From 7ab96cf6b312cfcd79cdc1a69c6bdb75de0ed30f Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Tue, 6 Apr 2021 07:49:39 -0700 Subject: [PATCH 001/671] Refactor lazy_scan_heap() loop. Add a lazy_scan_heap() subsidiary function that handles heap pruning and tuple freezing: lazy_scan_prune(). This is a great deal cleaner. The code that remains in lazy_scan_heap()'s per-block loop can now be thought of as code that either comes before or after the call to lazy_scan_prune(), which is now the clear focal point. This division is enforced by the way in which we now manage state. lazy_scan_prune() outputs state (using its own struct) that describes what to do with the page following pruning and freezing (e.g., visibility map maintenance, recording free space in the FSM). It doesn't get passed any special instructional state from the preamble code, though. Also cleanly separate the logic used by a VACUUM with INDEX_CLEANUP=off from the logic used by single-heap-pass VACUUMs. The former case is now structured as the omission of index and heap vacuuming by a two pass VACUUM. The latter case goes back to being used only when the table happens to have no indexes (just as it was before commit a96c41fe). This structure is much more natural, since the whole point of INDEX_CLEANUP=off is to skip the index and heap vacuuming that would otherwise take place. The single-heap-pass case doesn't skip any useful work, though -- it just does heap pruning and heap vacuuming together when the table happens to have no indexes. Both of these changes are preparation for an upcoming patch that generalizes the mechanism used by INDEX_CLEANUP=off. The later patch will allow VACUUM to give up on index and heap vacuuming dynamically, as problems emerge (e.g., with wraparound), so that an affected VACUUM operation can finish up as soon as possible. Also fix a very old bug in single-pass VACUUM VERBOSE output. We were reporting the number of tuples deleted via pruning as a direct substitute for reporting the number of LP_DEAD items removed in a function that deals with the second pass over the heap. But that doesn't work at all -- they're two different things. To fix, start tracking the total number of LP_DEAD items encountered during pruning, and use that in the report instead. A single pass VACUUM will always vacuum away whatever LP_DEAD items a heap page has immediately after it is pruned, so the total number of LP_DEAD items encountered during pruning equals the total number vacuumed-away. (They are _not_ equal in the INDEX_CLEANUP=off case, but that's okay because skipping index vacuuming is now a totally orthogonal concept to one-pass VACUUM.) Also stop reporting the count of LP_UNUSED items in VACUUM VERBOSE output. This makes the output of VACUUM VERBOSE more consistent with log_autovacuum's output (because it never showed information about LP_UNUSED items). VACUUM VERBOSE reported LP_UNUSED items left behind by the last VACUUM, and LP_UNUSED items created via pruning HOT chains during the current VACUUM (it never included LP_UNUSED items left behind by the current VACUUM's second pass over the heap). This makes it useless as an indicator of line pointer bloat, which must have been the original intention. (Like the first VACUUM VERBOSE issue, this issue was arguably an oversight in commit 282d2a03, which added the heap-only tuple optimization.) Finally, stop reporting empty_pages in VACUUM VERBOSE output, and start reporting pages_removed instead. This also makes the output of VACUUM VERBOSE more consistent with log_autovacuum's output (which does not show empty_pages, but does show pages_removed). An empty page isn't meaningfully different to a page that is almost empty, or a page that is empty but for only a small number of remaining LP_UNUSED items. Author: Peter Geoghegan Reviewed-By: Robert Haas Reviewed-By: Masahiko Sawada Discussion: https://postgr.es/m/CAH2-WznneCXTzuFmcwx_EyRQgfsfJAAsu+CsqRFmFXCAar=nJw@mail.gmail.com --- src/backend/access/heap/vacuumlazy.c | 1078 +++++++++++++++----------- 1 file changed, 633 insertions(+), 445 deletions(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index c259693a8ba1f..84700979c35be 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -296,8 +296,9 @@ typedef struct LVRelState Relation rel; Relation *indrels; int nindexes; - /* useindex = true means two-pass strategy; false means one-pass */ - bool useindex; + /* Do index vacuuming/cleanup? */ + bool do_index_vacuuming; + bool do_index_cleanup; /* Buffer access strategy and parallel state */ BufferAccessStrategy bstrategy; @@ -335,6 +336,7 @@ typedef struct LVRelState BlockNumber frozenskipped_pages; /* # of frozen pages we skipped */ BlockNumber tupcount_pages; /* pages whose tuples we counted */ BlockNumber pages_removed; /* pages remove by truncation */ + BlockNumber lpdead_item_pages; /* # pages with LP_DEAD items */ BlockNumber nonempty_pages; /* actually, last nonempty page + 1 */ bool lock_waiter_detected; @@ -347,12 +349,31 @@ typedef struct LVRelState /* Instrumentation counters */ int num_index_scans; int64 tuples_deleted; /* # deleted from table */ + int64 lpdead_items; /* # deleted from indexes */ int64 new_dead_tuples; /* new estimated total # of dead items in * table */ int64 num_tuples; /* total number of nonremovable tuples */ int64 live_tuples; /* live tuples (reltuples estimate) */ } LVRelState; +/* + * State returned by lazy_scan_prune() + */ +typedef struct LVPagePruneState +{ + bool hastup; /* Page is truncatable? */ + bool has_lpdead_items; /* includes existing LP_DEAD items */ + + /* + * State describes the proper VM bit states to set for the page following + * pruning and freezing. all_visible implies !has_lpdead_items, but don't + * trust all_frozen result unless all_visible is also set to true. + */ + bool all_visible; /* Every item visible to all? */ + bool all_frozen; /* provided all_visible is also true */ + TransactionId visibility_cutoff_xid; /* For recovery conflicts */ +} LVPagePruneState; + /* Struct for saving and restoring vacuum error information. */ typedef struct LVSavedErrInfo { @@ -368,6 +389,12 @@ static int elevel = -1; /* non-export function prototypes */ static void lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive); +static void lazy_scan_prune(LVRelState *vacrel, Buffer buf, + BlockNumber blkno, Page page, + GlobalVisState *vistest, + LVPagePruneState *prunestate, + VacOptTernaryValue index_cleanup); +static void lazy_vacuum(LVRelState *vacrel); static void lazy_vacuum_all_indexes(LVRelState *vacrel); static void lazy_vacuum_heap_rel(LVRelState *vacrel); static int lazy_vacuum_heap_page(LVRelState *vacrel, BlockNumber blkno, @@ -404,8 +431,6 @@ static long compute_max_dead_tuples(BlockNumber relblocks, bool hasindex); static void lazy_space_alloc(LVRelState *vacrel, int nworkers, BlockNumber relblocks); static void lazy_space_free(LVRelState *vacrel); -static void lazy_record_dead_tuple(LVDeadTuples *dead_tuples, - ItemPointer itemptr); static bool lazy_tid_reaped(ItemPointer itemptr, void *state); static int vac_cmp_itemptr(const void *left, const void *right); static bool heap_page_is_all_visible(LVRelState *vacrel, Buffer buf, @@ -519,8 +544,13 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, vacrel->rel = rel; vac_open_indexes(vacrel->rel, RowExclusiveLock, &vacrel->nindexes, &vacrel->indrels); - vacrel->useindex = (vacrel->nindexes > 0 && - params->index_cleanup == VACOPT_TERNARY_ENABLED); + vacrel->do_index_vacuuming = true; + vacrel->do_index_cleanup = true; + if (params->index_cleanup == VACOPT_TERNARY_DISABLED) + { + vacrel->do_index_vacuuming = false; + vacrel->do_index_cleanup = false; + } vacrel->bstrategy = bstrategy; vacrel->old_rel_pages = rel->rd_rel->relpages; vacrel->old_live_tuples = rel->rd_rel->reltuples; @@ -817,8 +847,8 @@ vacuum_log_cleanup_info(LVRelState *vacrel) * lists of dead tuples and pages with free space, calculates statistics * on the number of live tuples in the heap, and marks pages as * all-visible if appropriate. When done, or when we run low on space - * for dead-tuple TIDs, invoke vacuuming of indexes and reclaim dead line - * pointers. + * for dead-tuple TIDs, invoke lazy_vacuum to vacuum indexes and vacuum + * heap relation during its own second pass over the heap. * * If the table has at least two indexes, we execute both index vacuum * and index cleanup with parallel workers unless parallel vacuum is @@ -841,22 +871,12 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) { LVDeadTuples *dead_tuples; BlockNumber nblocks, - blkno; - HeapTupleData tuple; - BlockNumber empty_pages, - vacuumed_pages, + blkno, + next_unskippable_block, next_fsm_block_to_vacuum; - double num_tuples, /* total number of nonremovable tuples */ - live_tuples, /* live tuples (reltuples estimate) */ - tups_vacuumed, /* tuples cleaned up by current vacuum */ - nkeep, /* dead-but-not-removable tuples */ - nunused; /* # existing unused line pointers */ - int i; PGRUsage ru0; Buffer vmbuffer = InvalidBuffer; - BlockNumber next_unskippable_block; bool skipping_blocks; - xl_heap_freeze_tuple *frozen; StringInfoData buf; const int initprog_index[] = { PROGRESS_VACUUM_PHASE, @@ -879,23 +899,23 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) vacrel->relnamespace, vacrel->relname))); - empty_pages = vacuumed_pages = 0; - next_fsm_block_to_vacuum = (BlockNumber) 0; - num_tuples = live_tuples = tups_vacuumed = nkeep = nunused = 0; - nblocks = RelationGetNumberOfBlocks(vacrel->rel); + next_unskippable_block = 0; + next_fsm_block_to_vacuum = 0; vacrel->rel_pages = nblocks; vacrel->scanned_pages = 0; vacrel->pinskipped_pages = 0; vacrel->frozenskipped_pages = 0; vacrel->tupcount_pages = 0; vacrel->pages_removed = 0; + vacrel->lpdead_item_pages = 0; vacrel->nonempty_pages = 0; vacrel->lock_waiter_detected = false; /* Initialize instrumentation counters */ vacrel->num_index_scans = 0; vacrel->tuples_deleted = 0; + vacrel->lpdead_items = 0; vacrel->new_dead_tuples = 0; vacrel->num_tuples = 0; vacrel->live_tuples = 0; @@ -912,7 +932,6 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) */ lazy_space_alloc(vacrel, params->nworkers, nblocks); dead_tuples = vacrel->dead_tuples; - frozen = palloc(sizeof(xl_heap_freeze_tuple) * MaxHeapTuplesPerPage); /* Report that we're scanning the heap, advertising total # of blocks */ initprog_val[0] = PROGRESS_VACUUM_PHASE_SCAN_HEAP; @@ -964,7 +983,6 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) * the last page. This is worth avoiding mainly because such a lock must * be replayed on any hot standby, where it can be disruptive. */ - next_unskippable_block = 0; if ((params->options & VACOPT_DISABLE_PAGE_SKIPPING) == 0) { while (next_unskippable_block < nblocks) @@ -998,20 +1016,13 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) { Buffer buf; Page page; - OffsetNumber offnum, - maxoff; - bool tupgone, - hastup; - int prev_dead_count; - int nfrozen; - Size freespace; bool all_visible_according_to_vm = false; - bool all_visible; - bool all_frozen = true; /* provided all_visible is also true */ - bool has_dead_items; /* includes existing LP_DEAD items */ - TransactionId visibility_cutoff_xid = InvalidTransactionId; + LVPagePruneState prunestate; - /* see note above about forcing scanning of last page */ + /* + * Consider need to skip blocks. See note above about forcing + * scanning of last page. + */ #define FORCE_CHECK_PAGE() \ (blkno == nblocks - 1 && should_attempt_truncation(vacrel, params)) @@ -1096,8 +1107,10 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) vacuum_delay_point(); /* - * If we are close to overrunning the available space for dead-tuple - * TIDs, pause and do a cycle of vacuuming before we tackle this page. + * Consider if we definitely have enough space to process TIDs on page + * already. If we are close to overrunning the available space for + * dead-tuple TIDs, pause and do a cycle of vacuuming before we tackle + * this page. */ if ((dead_tuples->max_tuples - dead_tuples->num_tuples) < MaxHeapTuplesPerPage && dead_tuples->num_tuples > 0) @@ -1114,18 +1127,8 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) vmbuffer = InvalidBuffer; } - /* Work on all the indexes, then the heap */ - lazy_vacuum_all_indexes(vacrel); - - /* Remove tuples from heap */ - lazy_vacuum_heap_rel(vacrel); - - /* - * Forget the now-vacuumed tuples, and press on, but be careful - * not to reset latestRemovedXid since we want that value to be - * valid. - */ - dead_tuples->num_tuples = 0; + /* Remove the collected garbage tuples from table and indexes */ + lazy_vacuum(vacrel); /* * Vacuum the Free Space Map to make newly-freed space visible on @@ -1141,6 +1144,8 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) } /* + * Set up visibility map page as needed. + * * Pin the visibility map page in case we need to mark the page * all-visible. In most cases this will be very cheap, because we'll * already have the correct page pinned anyway. However, it's @@ -1153,9 +1158,14 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) buf = ReadBufferExtended(vacrel->rel, MAIN_FORKNUM, blkno, RBM_NORMAL, vacrel->bstrategy); - /* We need buffer cleanup lock so that we can prune HOT chains. */ + /* + * We need buffer cleanup lock so that we can prune HOT chains and + * defragment the page. + */ if (!ConditionalLockBufferForCleanup(buf)) { + bool hastup; + /* * If we're not performing an aggressive scan to guard against XID * wraparound, and we don't want to forcibly check the page, then @@ -1212,6 +1222,16 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) /* drop through to normal processing */ } + /* + * By here we definitely have enough dead_tuples space for whatever + * LP_DEAD tids are on this page, we have the visibility map page set + * up in case we need to set this page's all_visible/all_frozen bit, + * and we have a super-exclusive lock. Any tuples on this page are + * now sure to be "counted" by this VACUUM. + * + * One last piece of preamble needs to take place before we can prune: + * we need to consider new and empty pages. + */ vacrel->scanned_pages++; vacrel->tupcount_pages++; @@ -1240,13 +1260,10 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) */ UnlockReleaseBuffer(buf); - empty_pages++; - if (GetRecordedFreeSpace(vacrel->rel, blkno) == 0) { - Size freespace; + Size freespace = BLCKSZ - SizeOfPageHeaderData; - freespace = BufferGetPageSize(buf) - SizeOfPageHeaderData; RecordPageWithFreeSpace(vacrel->rel, blkno, freespace); } continue; @@ -1254,8 +1271,7 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) if (PageIsEmpty(page)) { - empty_pages++; - freespace = PageGetHeapFreeSpace(page); + Size freespace = PageGetHeapFreeSpace(page); /* * Empty pages are always all-visible and all-frozen (note that @@ -1295,349 +1311,88 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) } /* - * Prune all HOT-update chains in this page. + * Prune and freeze tuples. * - * We count tuples removed by the pruning step as removed by VACUUM - * (existing LP_DEAD line pointers don't count). + * Accumulates details of remaining LP_DEAD line pointers on page in + * dead tuple list. This includes LP_DEAD line pointers that we + * pruned ourselves, as well as existing LP_DEAD line pointers that + * were pruned some time earlier. Also considers freezing XIDs in the + * tuple headers of remaining items with storage. */ - tups_vacuumed += heap_page_prune(vacrel->rel, buf, vistest, - InvalidTransactionId, 0, false, - &vacrel->latestRemovedXid, - &vacrel->offnum); + lazy_scan_prune(vacrel, buf, blkno, page, vistest, &prunestate, + params->index_cleanup); - /* - * Now scan the page to collect vacuumable items and check for tuples - * requiring freezing. - */ - all_visible = true; - has_dead_items = false; - nfrozen = 0; - hastup = false; - prev_dead_count = dead_tuples->num_tuples; - maxoff = PageGetMaxOffsetNumber(page); + /* Remember the location of the last page with nonremovable tuples */ + if (prunestate.hastup) + vacrel->nonempty_pages = blkno + 1; - /* - * Note: If you change anything in the loop below, also look at - * heap_page_is_all_visible to see if that needs to be changed. - */ - for (offnum = FirstOffsetNumber; - offnum <= maxoff; - offnum = OffsetNumberNext(offnum)) + if (vacrel->nindexes == 0) { - ItemId itemid; - - /* - * Set the offset number so that we can display it along with any - * error that occurred while processing this tuple. - */ - vacrel->offnum = offnum; - itemid = PageGetItemId(page, offnum); - - /* Unused items require no processing, but we count 'em */ - if (!ItemIdIsUsed(itemid)) - { - nunused += 1; - continue; - } - - /* Redirect items mustn't be touched */ - if (ItemIdIsRedirected(itemid)) - { - hastup = true; /* this page won't be truncatable */ - continue; - } - - ItemPointerSet(&(tuple.t_self), blkno, offnum); - /* - * LP_DEAD line pointers are to be vacuumed normally; but we don't - * count them in tups_vacuumed, else we'd be double-counting (at - * least in the common case where heap_page_prune() just freed up - * a non-HOT tuple). Note also that the final tups_vacuumed value - * might be very low for tables where opportunistic page pruning - * happens to occur very frequently (via heap_page_prune_opt() - * calls that free up non-HOT tuples). - */ - if (ItemIdIsDead(itemid)) - { - lazy_record_dead_tuple(dead_tuples, &(tuple.t_self)); - all_visible = false; - has_dead_items = true; - continue; - } - - Assert(ItemIdIsNormal(itemid)); - - tuple.t_data = (HeapTupleHeader) PageGetItem(page, itemid); - tuple.t_len = ItemIdGetLength(itemid); - tuple.t_tableOid = RelationGetRelid(vacrel->rel); - - tupgone = false; - - /* - * The criteria for counting a tuple as live in this block need to - * match what analyze.c's acquire_sample_rows() does, otherwise - * VACUUM and ANALYZE may produce wildly different reltuples - * values, e.g. when there are many recently-dead tuples. + * Consider the need to do page-at-a-time heap vacuuming when + * using the one-pass strategy now. * - * The logic here is a bit simpler than acquire_sample_rows(), as - * VACUUM can't run inside a transaction block, which makes some - * cases impossible (e.g. in-progress insert from the same - * transaction). + * The one-pass strategy will never call lazy_vacuum(). The steps + * performed here can be thought of as the one-pass equivalent of + * a call to lazy_vacuum(). */ - switch (HeapTupleSatisfiesVacuum(&tuple, vacrel->OldestXmin, buf)) + if (prunestate.has_lpdead_items) { - case HEAPTUPLE_DEAD: - - /* - * Ordinarily, DEAD tuples would have been removed by - * heap_page_prune(), but it's possible that the tuple - * state changed since heap_page_prune() looked. In - * particular an INSERT_IN_PROGRESS tuple could have - * changed to DEAD if the inserter aborted. So this - * cannot be considered an error condition. - * - * If the tuple is HOT-updated then it must only be - * removed by a prune operation; so we keep it just as if - * it were RECENTLY_DEAD. Also, if it's a heap-only - * tuple, we choose to keep it, because it'll be a lot - * cheaper to get rid of it in the next pruning pass than - * to treat it like an indexed tuple. Finally, if index - * cleanup is disabled, the second heap pass will not - * execute, and the tuple will not get removed, so we must - * treat it like any other dead tuple that we choose to - * keep. - * - * If this were to happen for a tuple that actually needed - * to be deleted, we'd be in trouble, because it'd - * possibly leave a tuple below the relation's xmin - * horizon alive. heap_prepare_freeze_tuple() is prepared - * to detect that case and abort the transaction, - * preventing corruption. - */ - if (HeapTupleIsHotUpdated(&tuple) || - HeapTupleIsHeapOnly(&tuple) || - params->index_cleanup == VACOPT_TERNARY_DISABLED) - nkeep += 1; - else - tupgone = true; /* we can delete the tuple */ - all_visible = false; - break; - case HEAPTUPLE_LIVE: - - /* - * Count it as live. Not only is this natural, but it's - * also what acquire_sample_rows() does. - */ - live_tuples += 1; - - /* - * Is the tuple definitely visible to all transactions? - * - * NB: Like with per-tuple hint bits, we can't set the - * PD_ALL_VISIBLE flag if the inserter committed - * asynchronously. See SetHintBits for more info. Check - * that the tuple is hinted xmin-committed because of - * that. - */ - if (all_visible) - { - TransactionId xmin; - - if (!HeapTupleHeaderXminCommitted(tuple.t_data)) - { - all_visible = false; - break; - } - - /* - * The inserter definitely committed. But is it old - * enough that everyone sees it as committed? - */ - xmin = HeapTupleHeaderGetXmin(tuple.t_data); - if (!TransactionIdPrecedes(xmin, vacrel->OldestXmin)) - { - all_visible = false; - break; - } - - /* Track newest xmin on page. */ - if (TransactionIdFollows(xmin, visibility_cutoff_xid)) - visibility_cutoff_xid = xmin; - } - break; - case HEAPTUPLE_RECENTLY_DEAD: - - /* - * If tuple is recently deleted then we must not remove it - * from relation. - */ - nkeep += 1; - all_visible = false; - break; - case HEAPTUPLE_INSERT_IN_PROGRESS: - - /* - * This is an expected case during concurrent vacuum. - * - * We do not count these rows as live, because we expect - * the inserting transaction to update the counters at - * commit, and we assume that will happen only after we - * report our results. This assumption is a bit shaky, - * but it is what acquire_sample_rows() does, so be - * consistent. - */ - all_visible = false; - break; - case HEAPTUPLE_DELETE_IN_PROGRESS: - /* This is an expected case during concurrent vacuum */ - all_visible = false; - - /* - * Count such rows as live. As above, we assume the - * deleting transaction will commit and update the - * counters after we report. - */ - live_tuples += 1; - break; - default: - elog(ERROR, "unexpected HeapTupleSatisfiesVacuum result"); - break; - } + Size freespace; - if (tupgone) - { - lazy_record_dead_tuple(dead_tuples, &(tuple.t_self)); - HeapTupleHeaderAdvanceLatestRemovedXid(tuple.t_data, - &vacrel->latestRemovedXid); - tups_vacuumed += 1; - has_dead_items = true; - } - else - { - bool tuple_totally_frozen; + lazy_vacuum_heap_page(vacrel, blkno, buf, 0, &vmbuffer); - num_tuples += 1; - hastup = true; + /* Forget the now-vacuumed tuples */ + dead_tuples->num_tuples = 0; /* - * Each non-removable tuple must be checked to see if it needs - * freezing. Note we already have exclusive buffer lock. + * Periodically perform FSM vacuuming to make newly-freed + * space visible on upper FSM pages. Note we have not yet + * performed FSM processing for blkno. */ - if (heap_prepare_freeze_tuple(tuple.t_data, - vacrel->relfrozenxid, - vacrel->relminmxid, - vacrel->FreezeLimit, - vacrel->MultiXactCutoff, - &frozen[nfrozen], - &tuple_totally_frozen)) - frozen[nfrozen++].offset = offnum; - - if (!tuple_totally_frozen) - all_frozen = false; - } - } /* scan along page */ - - /* - * Clear the offset information once we have processed all the tuples - * on the page. - */ - vacrel->offnum = InvalidOffsetNumber; - - /* - * If we froze any tuples, mark the buffer dirty, and write a WAL - * record recording the changes. We must log the changes to be - * crash-safe against future truncation of CLOG. - */ - if (nfrozen > 0) - { - START_CRIT_SECTION(); - - MarkBufferDirty(buf); - - /* execute collected freezes */ - for (i = 0; i < nfrozen; i++) - { - ItemId itemid; - HeapTupleHeader htup; - - itemid = PageGetItemId(page, frozen[i].offset); - htup = (HeapTupleHeader) PageGetItem(page, itemid); - - heap_execute_freeze_tuple(htup, &frozen[i]); - } - - /* Now WAL-log freezing if necessary */ - if (RelationNeedsWAL(vacrel->rel)) - { - XLogRecPtr recptr; - - recptr = log_heap_freeze(vacrel->rel, buf, - vacrel->FreezeLimit, frozen, nfrozen); - PageSetLSN(page, recptr); - } - - END_CRIT_SECTION(); - } + if (blkno - next_fsm_block_to_vacuum >= VACUUM_FSM_EVERY_PAGES) + { + FreeSpaceMapVacuumRange(vacrel->rel, next_fsm_block_to_vacuum, + blkno); + next_fsm_block_to_vacuum = blkno; + } - /* - * If there are no indexes we can vacuum the page right now instead of - * doing a second scan. Also we don't do that but forget dead tuples - * when index cleanup is disabled. - */ - if (!vacrel->useindex && dead_tuples->num_tuples > 0) - { - if (vacrel->nindexes == 0) - { - /* Remove tuples from heap if the table has no index */ - lazy_vacuum_heap_page(vacrel, blkno, buf, 0, &vmbuffer); - vacuumed_pages++; - has_dead_items = false; - } - else - { /* - * Here, we have indexes but index cleanup is disabled. - * Instead of vacuuming the dead tuples on the heap, we just - * forget them. + * Now perform FSM processing for blkno, and move on to next + * page. * - * Note that vacrelstats->dead_tuples could have tuples which - * became dead after HOT-pruning but are not marked dead yet. - * We do not process them because it's a very rare condition, - * and the next vacuum will process them anyway. + * Our call to lazy_vacuum_heap_page() will have considered if + * it's possible to set all_visible/all_frozen independently + * of lazy_scan_prune(). Note that prunestate was invalidated + * by lazy_vacuum_heap_page() call. */ - Assert(params->index_cleanup == VACOPT_TERNARY_DISABLED); - } + freespace = PageGetHeapFreeSpace(page); - /* - * Forget the now-vacuumed tuples, and press on, but be careful - * not to reset latestRemovedXid since we want that value to be - * valid. - */ - dead_tuples->num_tuples = 0; + UnlockReleaseBuffer(buf); + RecordPageWithFreeSpace(vacrel->rel, blkno, freespace); + continue; + } /* - * Periodically do incremental FSM vacuuming to make newly-freed - * space visible on upper FSM pages. Note: although we've cleaned - * the current block, we haven't yet updated its FSM entry (that - * happens further down), so passing end == blkno is correct. + * There was no call to lazy_vacuum_heap_page() because pruning + * didn't encounter/create any LP_DEAD items that needed to be + * vacuumed. Prune state has not been invalidated, so proceed + * with prunestate-driven visibility map and FSM steps (just like + * the two-pass strategy). */ - if (blkno - next_fsm_block_to_vacuum >= VACUUM_FSM_EVERY_PAGES) - { - FreeSpaceMapVacuumRange(vacrel->rel, next_fsm_block_to_vacuum, - blkno); - next_fsm_block_to_vacuum = blkno; - } + Assert(dead_tuples->num_tuples == 0); } - freespace = PageGetHeapFreeSpace(page); - - /* mark page all-visible, if appropriate */ - if (all_visible && !all_visible_according_to_vm) + /* + * Handle setting visibility map bit based on what the VM said about + * the page before pruning started, and using prunestate + */ + Assert(!prunestate.all_visible || !prunestate.has_lpdead_items); + if (!all_visible_according_to_vm && prunestate.all_visible) { uint8 flags = VISIBILITYMAP_ALL_VISIBLE; - if (all_frozen) + if (prunestate.all_frozen) flags |= VISIBILITYMAP_ALL_FROZEN; /* @@ -1656,7 +1411,8 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) PageSetAllVisible(page); MarkBufferDirty(buf); visibilitymap_set(vacrel->rel, blkno, buf, InvalidXLogRecPtr, - vmbuffer, visibility_cutoff_xid, flags); + vmbuffer, prunestate.visibility_cutoff_xid, + flags); } /* @@ -1690,7 +1446,7 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) * There should never be dead tuples on a page with PD_ALL_VISIBLE * set, however. */ - else if (PageIsAllVisible(page) && has_dead_items) + else if (prunestate.has_lpdead_items && PageIsAllVisible(page)) { elog(WARNING, "page containing dead tuples is marked as all-visible in relation \"%s\" page %u", vacrel->relname, blkno); @@ -1705,7 +1461,8 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) * mark it as all-frozen. Note that all_frozen is only valid if * all_visible is true, so we must check both. */ - else if (all_visible_according_to_vm && all_visible && all_frozen && + else if (all_visible_according_to_vm && prunestate.all_visible && + prunestate.all_frozen && !VM_ALL_FROZEN(vacrel->rel, blkno, &vmbuffer)) { /* @@ -1718,39 +1475,40 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) VISIBILITYMAP_ALL_FROZEN); } - UnlockReleaseBuffer(buf); - - /* Remember the location of the last page with nonremovable tuples */ - if (hastup) - vacrel->nonempty_pages = blkno + 1; - /* - * If we remembered any tuples for deletion, then the page will be - * visited again by lazy_vacuum_heap_rel, which will compute and record - * its post-compaction free space. If not, then we're done with this - * page, so remember its free space as-is. (This path will always be - * taken if there are no indexes.) + * Final steps for block: drop super-exclusive lock, record free space + * in the FSM */ - if (dead_tuples->num_tuples == prev_dead_count) + if (prunestate.has_lpdead_items && vacrel->do_index_vacuuming) + { + /* + * Wait until lazy_vacuum_heap_rel() to save free space. + * + * Note: The one-pass (no indexes) case is only supposed to make + * it this far when there were no LP_DEAD items during pruning. + */ + Assert(vacrel->nindexes > 0); + UnlockReleaseBuffer(buf); + } + else + { + Size freespace = PageGetHeapFreeSpace(page); + + UnlockReleaseBuffer(buf); RecordPageWithFreeSpace(vacrel->rel, blkno, freespace); + } } - /* report that everything is scanned and vacuumed */ + /* report that everything is now scanned */ pgstat_progress_update_param(PROGRESS_VACUUM_HEAP_BLKS_SCANNED, blkno); /* Clear the block number information */ vacrel->blkno = InvalidBlockNumber; - pfree(frozen); - - /* save stats for use later */ - vacrel->tuples_deleted = tups_vacuumed; - vacrel->new_dead_tuples = nkeep; - /* now we can compute the new value for pg_class.reltuples */ vacrel->new_live_tuples = vac_estimate_reltuples(vacrel->rel, nblocks, vacrel->tupcount_pages, - live_tuples); + vacrel->live_tuples); /* * Also compute the total number of surviving heap entries. In the @@ -1771,13 +1529,7 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) /* If any tuples need to be deleted, perform final vacuum cycle */ /* XXX put a threshold on min number of tuples here? */ if (dead_tuples->num_tuples > 0) - { - /* Work on all the indexes, and then the heap */ - lazy_vacuum_all_indexes(vacrel); - - /* Remove tuples from heap */ - lazy_vacuum_heap_rel(vacrel); - } + lazy_vacuum(vacrel); /* * Vacuum the remainder of the Free Space Map. We must do this whether or @@ -1790,7 +1542,7 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) pgstat_progress_update_param(PROGRESS_VACUUM_HEAP_BLKS_VACUUMED, blkno); /* Do post-vacuum cleanup */ - if (vacrel->useindex) + if (vacrel->nindexes > 0 && vacrel->do_index_cleanup) lazy_cleanup_all_indexes(vacrel); /* @@ -1801,22 +1553,28 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) lazy_space_free(vacrel); /* Update index statistics */ - if (vacrel->useindex) + if (vacrel->nindexes > 0 && vacrel->do_index_cleanup) update_index_statistics(vacrel); - /* If no indexes, make log report that lazy_vacuum_heap_rel would've made */ - if (vacuumed_pages) + /* + * If table has no indexes and at least one heap pages was vacuumed, make + * log report that lazy_vacuum_heap_rel would've made had there been + * indexes (having indexes implies using the two pass strategy). + */ + if (vacrel->nindexes == 0 && vacrel->lpdead_item_pages > 0) ereport(elevel, - (errmsg("\"%s\": removed %.0f row versions in %u pages", - vacrel->relname, - tups_vacuumed, vacuumed_pages))); + (errmsg("\"%s\": removed %lld dead item identifiers in %u pages", + vacrel->relname, (long long) vacrel->lpdead_items, + vacrel->lpdead_item_pages))); initStringInfo(&buf); appendStringInfo(&buf, - _("%.0f dead row versions cannot be removed yet, oldest xmin: %u\n"), - nkeep, vacrel->OldestXmin); - appendStringInfo(&buf, _("There were %.0f unused item identifiers.\n"), - nunused); + _("%lld dead row versions cannot be removed yet, oldest xmin: %u\n"), + (long long) vacrel->new_dead_tuples, vacrel->OldestXmin); + appendStringInfo(&buf, ngettext("%u page removed.\n", + "%u pages removed.\n", + vacrel->pages_removed), + vacrel->pages_removed); appendStringInfo(&buf, ngettext("Skipped %u page due to buffer pins, ", "Skipped %u pages due to buffer pins, ", vacrel->pinskipped_pages), @@ -1825,21 +1583,463 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) "%u frozen pages.\n", vacrel->frozenskipped_pages), vacrel->frozenskipped_pages); - appendStringInfo(&buf, ngettext("%u page is entirely empty.\n", - "%u pages are entirely empty.\n", - empty_pages), - empty_pages); appendStringInfo(&buf, _("%s."), pg_rusage_show(&ru0)); ereport(elevel, - (errmsg("\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages", + (errmsg("\"%s\": found %lld removable, %lld nonremovable row versions in %u out of %u pages", vacrel->relname, - tups_vacuumed, num_tuples, - vacrel->scanned_pages, nblocks), + (long long) vacrel->tuples_deleted, + (long long) vacrel->num_tuples, vacrel->scanned_pages, + nblocks), errdetail_internal("%s", buf.data))); pfree(buf.data); } +/* + * lazy_scan_prune() -- lazy_scan_heap() pruning and freezing. + * + * Caller must hold pin and buffer cleanup lock on the buffer. + */ +static void +lazy_scan_prune(LVRelState *vacrel, + Buffer buf, + BlockNumber blkno, + Page page, + GlobalVisState *vistest, + LVPagePruneState *prunestate, + VacOptTernaryValue index_cleanup) +{ + Relation rel = vacrel->rel; + OffsetNumber offnum, + maxoff; + ItemId itemid; + HeapTupleData tuple; + int tuples_deleted, + lpdead_items, + new_dead_tuples, + num_tuples, + live_tuples; + int nfrozen; + OffsetNumber deadoffsets[MaxHeapTuplesPerPage]; + xl_heap_freeze_tuple frozen[MaxHeapTuplesPerPage]; + + maxoff = PageGetMaxOffsetNumber(page); + + /* Initialize (or reset) page-level counters */ + tuples_deleted = 0; + lpdead_items = 0; + new_dead_tuples = 0; + num_tuples = 0; + live_tuples = 0; + + /* + * Prune all HOT-update chains in this page. + * + * We count tuples removed by the pruning step as tuples_deleted. Its + * final value can be thought of as the number of tuples that have been + * deleted from the table. It should not be confused with lpdead_items; + * lpdead_items's final value can be thought of as the number of tuples + * that were deleted from indexes. + */ + tuples_deleted = heap_page_prune(rel, buf, vistest, + InvalidTransactionId, 0, false, + &vacrel->latestRemovedXid, + &vacrel->offnum); + + /* + * Now scan the page to collect LP_DEAD items and check for tuples + * requiring freezing among remaining tuples with storage + */ + prunestate->hastup = false; + prunestate->has_lpdead_items = false; + prunestate->all_visible = true; + prunestate->all_frozen = true; + prunestate->visibility_cutoff_xid = InvalidTransactionId; + nfrozen = 0; + + for (offnum = FirstOffsetNumber; + offnum <= maxoff; + offnum = OffsetNumberNext(offnum)) + { + bool tuple_totally_frozen; + bool tupgone = false; + + /* + * Set the offset number so that we can display it along with any + * error that occurred while processing this tuple. + */ + vacrel->offnum = offnum; + itemid = PageGetItemId(page, offnum); + + if (!ItemIdIsUsed(itemid)) + continue; + + /* Redirect items mustn't be touched */ + if (ItemIdIsRedirected(itemid)) + { + prunestate->hastup = true; /* page won't be truncatable */ + continue; + } + + /* + * LP_DEAD items are processed outside of the loop. + * + * Note that we deliberately don't set hastup=true in the case of an + * LP_DEAD item here, which is not how lazy_check_needs_freeze() or + * count_nondeletable_pages() do it -- they only consider pages empty + * when they only have LP_UNUSED items, which is important for + * correctness. + * + * Our assumption is that any LP_DEAD items we encounter here will + * become LP_UNUSED inside lazy_vacuum_heap_page() before we actually + * call count_nondeletable_pages(). In any case our opinion of + * whether or not a page 'hastup' (which is how our caller sets its + * vacrel->nonempty_pages value) is inherently race-prone. It must be + * treated as advisory/unreliable, so we might as well be slightly + * optimistic. + */ + if (ItemIdIsDead(itemid)) + { + deadoffsets[lpdead_items++] = offnum; + prunestate->all_visible = false; + prunestate->has_lpdead_items = true; + continue; + } + + Assert(ItemIdIsNormal(itemid)); + + ItemPointerSet(&(tuple.t_self), blkno, offnum); + tuple.t_data = (HeapTupleHeader) PageGetItem(page, itemid); + tuple.t_len = ItemIdGetLength(itemid); + tuple.t_tableOid = RelationGetRelid(rel); + + /* + * The criteria for counting a tuple as live in this block need to + * match what analyze.c's acquire_sample_rows() does, otherwise VACUUM + * and ANALYZE may produce wildly different reltuples values, e.g. + * when there are many recently-dead tuples. + * + * The logic here is a bit simpler than acquire_sample_rows(), as + * VACUUM can't run inside a transaction block, which makes some cases + * impossible (e.g. in-progress insert from the same transaction). + */ + switch (HeapTupleSatisfiesVacuum(&tuple, vacrel->OldestXmin, buf)) + { + case HEAPTUPLE_DEAD: + + /* + * Ordinarily, DEAD tuples would have been removed by + * heap_page_prune(), but it's possible that the tuple state + * changed since heap_page_prune() looked. In particular an + * INSERT_IN_PROGRESS tuple could have changed to DEAD if the + * inserter aborted. So this cannot be considered an error + * condition. + * + * If the tuple is HOT-updated then it must only be removed by + * a prune operation; so we keep it just as if it were + * RECENTLY_DEAD. Also, if it's a heap-only tuple, we choose + * to keep it, because it'll be a lot cheaper to get rid of it + * in the next pruning pass than to treat it like an indexed + * tuple. Finally, if index cleanup is disabled, the second + * heap pass will not execute, and the tuple will not get + * removed, so we must treat it like any other dead tuple that + * we choose to keep. + * + * If this were to happen for a tuple that actually needed to + * be deleted, we'd be in trouble, because it'd possibly leave + * a tuple below the relation's xmin horizon alive. + * heap_prepare_freeze_tuple() is prepared to detect that case + * and abort the transaction, preventing corruption. + */ + if (HeapTupleIsHotUpdated(&tuple) || + HeapTupleIsHeapOnly(&tuple) || + index_cleanup == VACOPT_TERNARY_DISABLED) + new_dead_tuples++; + else + tupgone = true; /* we can delete the tuple */ + prunestate->all_visible = false; + break; + case HEAPTUPLE_LIVE: + + /* + * Count it as live. Not only is this natural, but it's also + * what acquire_sample_rows() does. + */ + live_tuples++; + + /* + * Is the tuple definitely visible to all transactions? + * + * NB: Like with per-tuple hint bits, we can't set the + * PD_ALL_VISIBLE flag if the inserter committed + * asynchronously. See SetHintBits for more info. Check that + * the tuple is hinted xmin-committed because of that. + */ + if (prunestate->all_visible) + { + TransactionId xmin; + + if (!HeapTupleHeaderXminCommitted(tuple.t_data)) + { + prunestate->all_visible = false; + break; + } + + /* + * The inserter definitely committed. But is it old enough + * that everyone sees it as committed? + */ + xmin = HeapTupleHeaderGetXmin(tuple.t_data); + if (!TransactionIdPrecedes(xmin, vacrel->OldestXmin)) + { + prunestate->all_visible = false; + break; + } + + /* Track newest xmin on page. */ + if (TransactionIdFollows(xmin, prunestate->visibility_cutoff_xid)) + prunestate->visibility_cutoff_xid = xmin; + } + break; + case HEAPTUPLE_RECENTLY_DEAD: + + /* + * If tuple is recently deleted then we must not remove it + * from relation. (We only remove items that are LP_DEAD from + * pruning.) + */ + new_dead_tuples++; + prunestate->all_visible = false; + break; + case HEAPTUPLE_INSERT_IN_PROGRESS: + + /* + * We do not count these rows as live, because we expect the + * inserting transaction to update the counters at commit, and + * we assume that will happen only after we report our + * results. This assumption is a bit shaky, but it is what + * acquire_sample_rows() does, so be consistent. + */ + prunestate->all_visible = false; + break; + case HEAPTUPLE_DELETE_IN_PROGRESS: + /* This is an expected case during concurrent vacuum */ + prunestate->all_visible = false; + + /* + * Count such rows as live. As above, we assume the deleting + * transaction will commit and update the counters after we + * report. + */ + live_tuples++; + break; + default: + elog(ERROR, "unexpected HeapTupleSatisfiesVacuum result"); + break; + } + + if (tupgone) + { + /* Pretend that this is an LP_DEAD item */ + deadoffsets[lpdead_items++] = offnum; + prunestate->all_visible = false; + prunestate->has_lpdead_items = true; + + /* But remember it for XLOG_HEAP2_CLEANUP_INFO record */ + HeapTupleHeaderAdvanceLatestRemovedXid(tuple.t_data, + &vacrel->latestRemovedXid); + } + else + { + /* + * Non-removable tuple (i.e. tuple with storage). + * + * Check tuple left behind after pruning to see if needs to be frozen + * now. + */ + num_tuples++; + prunestate->hastup = true; + if (heap_prepare_freeze_tuple(tuple.t_data, + vacrel->relfrozenxid, + vacrel->relminmxid, + vacrel->FreezeLimit, + vacrel->MultiXactCutoff, + &frozen[nfrozen], + &tuple_totally_frozen)) + { + /* Will execute freeze below */ + frozen[nfrozen++].offset = offnum; + } + + /* + * If tuple is not frozen (and not about to become frozen) then caller + * had better not go on to set this page's VM bit + */ + if (!tuple_totally_frozen) + prunestate->all_frozen = false; + } + } + + /* + * We have now divided every item on the page into either an LP_DEAD item + * that will need to be vacuumed in indexes later, or a LP_NORMAL tuple + * that remains and needs to be considered for freezing now (LP_UNUSED and + * LP_REDIRECT items also remain, but are of no further interest to us). + * + * Add page level counters to caller's counts, and then actually process + * LP_DEAD and LP_NORMAL items. + * + * TODO: Remove tupgone logic entirely in next commit -- we shouldn't have + * to pretend that DEAD items are LP_DEAD items. + */ + vacrel->offnum = InvalidOffsetNumber; + + /* + * Consider the need to freeze any items with tuple storage from the page + * first (arbitrary) + */ + if (nfrozen > 0) + { + Assert(prunestate->hastup); + + /* + * At least one tuple with storage needs to be frozen -- execute that + * now. + * + * If we need to freeze any tuples we'll mark the buffer dirty, and + * write a WAL record recording the changes. We must log the changes + * to be crash-safe against future truncation of CLOG. + */ + START_CRIT_SECTION(); + + MarkBufferDirty(buf); + + /* execute collected freezes */ + for (int i = 0; i < nfrozen; i++) + { + HeapTupleHeader htup; + + itemid = PageGetItemId(page, frozen[i].offset); + htup = (HeapTupleHeader) PageGetItem(page, itemid); + + heap_execute_freeze_tuple(htup, &frozen[i]); + } + + /* Now WAL-log freezing if necessary */ + if (RelationNeedsWAL(vacrel->rel)) + { + XLogRecPtr recptr; + + recptr = log_heap_freeze(vacrel->rel, buf, vacrel->FreezeLimit, + frozen, nfrozen); + PageSetLSN(page, recptr); + } + + END_CRIT_SECTION(); + } + + /* + * The second pass over the heap can also set visibility map bits, using + * the same approach. This is important when the table frequently has a + * few old LP_DEAD items on each page by the time we get to it (typically + * because past opportunistic pruning operations freed some non-HOT + * tuples). + * + * VACUUM will call heap_page_is_all_visible() during the second pass over + * the heap to determine all_visible and all_frozen for the page -- this + * is a specialized version of the logic from this function. Now that + * we've finished pruning and freezing, make sure that we're in total + * agreement with heap_page_is_all_visible() using an assertion. + */ +#ifdef USE_ASSERT_CHECKING + /* Note that all_frozen value does not matter when !all_visible */ + if (prunestate->all_visible) + { + TransactionId cutoff; + bool all_frozen; + + if (!heap_page_is_all_visible(vacrel, buf, &cutoff, &all_frozen)) + Assert(false); + + Assert(lpdead_items == 0); + Assert(prunestate->all_frozen == all_frozen); + + /* + * It's possible that we froze tuples and made the page's XID cutoff + * (for recovery conflict purposes) FrozenTransactionId. This is okay + * because visibility_cutoff_xid will be logged by our caller in a + * moment. + */ + Assert(cutoff == FrozenTransactionId || + cutoff == prunestate->visibility_cutoff_xid); + } +#endif + + /* Add page-local counts to whole-VACUUM counts */ + vacrel->tuples_deleted += tuples_deleted; + vacrel->lpdead_items += lpdead_items; + vacrel->new_dead_tuples += new_dead_tuples; + vacrel->num_tuples += num_tuples; + vacrel->live_tuples += live_tuples; + + /* + * Now save details of the LP_DEAD items from the page in the dead_tuples + * array. Also record that page has dead items in per-page prunestate. + */ + if (lpdead_items > 0) + { + LVDeadTuples *dead_tuples = vacrel->dead_tuples; + ItemPointerData tmp; + + Assert(!prunestate->all_visible); + Assert(prunestate->has_lpdead_items); + + vacrel->lpdead_item_pages++; + + ItemPointerSetBlockNumber(&tmp, blkno); + + for (int i = 0; i < lpdead_items; i++) + { + ItemPointerSetOffsetNumber(&tmp, deadoffsets[i]); + dead_tuples->itemptrs[dead_tuples->num_tuples++] = tmp; + } + + Assert(dead_tuples->num_tuples <= dead_tuples->max_tuples); + pgstat_progress_update_param(PROGRESS_VACUUM_NUM_DEAD_TUPLES, + dead_tuples->num_tuples); + } +} + +/* + * Remove the collected garbage tuples from the table and its indexes. + */ +static void +lazy_vacuum(LVRelState *vacrel) +{ + /* Should not end up here with no indexes */ + Assert(vacrel->nindexes > 0); + Assert(!IsParallelWorker()); + Assert(vacrel->lpdead_item_pages > 0); + + if (!vacrel->do_index_vacuuming) + { + Assert(!vacrel->do_index_cleanup); + vacrel->dead_tuples->num_tuples = 0; + return; + } + + /* Okay, we're going to do index vacuuming */ + lazy_vacuum_all_indexes(vacrel); + + /* Remove tuples from heap */ + lazy_vacuum_heap_rel(vacrel); + + /* + * Forget the now-vacuumed tuples -- just press on + */ + vacrel->dead_tuples->num_tuples = 0; +} + /* * lazy_vacuum_all_indexes() -- Main entry for index vacuuming */ @@ -1848,6 +2048,8 @@ lazy_vacuum_all_indexes(LVRelState *vacrel) { Assert(!IsParallelWorker()); Assert(vacrel->nindexes > 0); + Assert(vacrel->do_index_vacuuming); + Assert(vacrel->do_index_cleanup); Assert(TransactionIdIsNormal(vacrel->relfrozenxid)); Assert(MultiXactIdIsValid(vacrel->relminmxid)); @@ -1902,6 +2104,10 @@ lazy_vacuum_heap_rel(LVRelState *vacrel) Buffer vmbuffer = InvalidBuffer; LVSavedErrInfo saved_err_info; + Assert(vacrel->do_index_vacuuming); + Assert(vacrel->do_index_cleanup); + Assert(vacrel->num_index_scans > 0); + /* Report that we are now vacuuming the heap */ pgstat_progress_update_param(PROGRESS_VACUUM_PHASE, PROGRESS_VACUUM_PHASE_VACUUM_HEAP); @@ -1986,6 +2192,8 @@ lazy_vacuum_heap_page(LVRelState *vacrel, BlockNumber blkno, Buffer buffer, bool all_frozen; LVSavedErrInfo saved_err_info; + Assert(vacrel->nindexes == 0 || vacrel->do_index_vacuuming); + pgstat_progress_update_param(PROGRESS_VACUUM_HEAP_BLKS_VACUUMED, blkno); /* Update error traceback information */ @@ -2947,14 +3155,14 @@ count_nondeletable_pages(LVRelState *vacrel) * Return the maximum number of dead tuples we can record. */ static long -compute_max_dead_tuples(BlockNumber relblocks, bool useindex) +compute_max_dead_tuples(BlockNumber relblocks, bool hasindex) { long maxtuples; int vac_work_mem = IsAutoVacuumWorkerProcess() && autovacuum_work_mem != -1 ? autovacuum_work_mem : maintenance_work_mem; - if (useindex) + if (hasindex) { maxtuples = MAXDEADTUPLES(vac_work_mem * 1024L); maxtuples = Min(maxtuples, INT_MAX); @@ -3039,26 +3247,6 @@ lazy_space_free(LVRelState *vacrel) end_parallel_vacuum(vacrel); } -/* - * lazy_record_dead_tuple - remember one deletable tuple - */ -static void -lazy_record_dead_tuple(LVDeadTuples *dead_tuples, ItemPointer itemptr) -{ - /* - * The array shouldn't overflow under normal behavior, but perhaps it - * could if we are given a really small maintenance_work_mem. In that - * case, just forget the last few tuples (we'll get 'em next time). - */ - if (dead_tuples->num_tuples < dead_tuples->max_tuples) - { - dead_tuples->itemptrs[dead_tuples->num_tuples] = *itemptr; - dead_tuples->num_tuples++; - pgstat_progress_update_param(PROGRESS_VACUUM_NUM_DEAD_TUPLES, - dead_tuples->num_tuples); - } -} - /* * lazy_tid_reaped() -- is a particular tid deletable? * From 518442c7f334f3b05ea28b7ef50f1b551cfcc23e Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Tue, 6 Apr 2021 16:12:37 +0200 Subject: [PATCH 002/671] Fix handling of clauses incompatible with extended statistics Handling of incompatible clauses while applying extended statistics was a bit confused - while handling a mix of compatible and incompatible clauses it sometimes incorrectly treated the incompatible clauses as compatible, resulting in a crash. Fixed by reworking the code applying the selected statistics object to make it easier to understand, and adding a proper compatibility check. Reported-by: David Rowley Discussion: https://postgr.es/m/CAApHDvpYT10-nkSp8xXe-nbO3jmoaRyRFHbzh-RWMfAJynqgpQ%40mail.gmail.com --- src/backend/statistics/extended_stats.c | 86 +++++++++++++++++-------- src/backend/statistics/mcv.c | 4 ++ src/test/regress/expected/stats_ext.out | 19 ++++++ src/test/regress/sql/stats_ext.sql | 19 ++++++ 4 files changed, 100 insertions(+), 28 deletions(-) diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index dd3c84a91c041..463d44a68a40f 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -1255,6 +1255,10 @@ choose_best_statistics(List *stats, char requiredkind, /* * Collect attributes and expressions in remaining (unestimated) * clauses fully covered by this statistic object. + * + * We know already estimated clauses have both clause_attnums and + * clause_exprs set to NULL. We leave the pointers NULL if already + * estimated, or we reset them to NULL after estimating the clause. */ for (i = 0; i < nclauses; i++) { @@ -1758,39 +1762,65 @@ statext_mcv_clauselist_selectivity(PlannerInfo *root, List *clauses, int varReli /* record which clauses are simple (single column or expression) */ simple_clauses = NULL; - listidx = 0; + listidx = -1; foreach(l, clauses) { + /* Increment the index before we decide if to skip the clause. */ + listidx++; + /* - * If the clause is not already estimated and is compatible with - * the selected statistics object (all attributes and expressions - * covered), mark it as estimated and add it to the list to - * estimate. + * Ignore clauses from which we did not extract any attnums or + * expressions (this needs to be consistent with what we do in + * choose_best_statistics). + * + * This also eliminates already estimated clauses - both those + * estimated before and during applying extended statistics. + * + * XXX This check is needed because both bms_is_subset and + * stat_covers_expressions return true for empty attnums and + * expressions. */ - if (!bms_is_member(listidx, *estimatedclauses) && - bms_is_subset(list_attnums[listidx], stat->keys) && - stat_covers_expressions(stat, list_exprs[listidx], NULL)) - { - /* record simple clauses (single column or expression) */ - if ((list_attnums[listidx] == NULL && - list_length(list_exprs[listidx]) == 1) || - (list_exprs[listidx] == NIL && - bms_membership(list_attnums[listidx]) == BMS_SINGLETON)) - simple_clauses = bms_add_member(simple_clauses, - list_length(stat_clauses)); - - /* add clause to list and mark as estimated */ - stat_clauses = lappend(stat_clauses, (Node *) lfirst(l)); - *estimatedclauses = bms_add_member(*estimatedclauses, listidx); - - bms_free(list_attnums[listidx]); - list_attnums[listidx] = NULL; - - list_free(list_exprs[listidx]); - list_exprs[listidx] = NULL; - } + if (!list_attnums[listidx] && !list_exprs[listidx]) + continue; - listidx++; + /* + * The clause was not estimated yet, and we've extracted either + * attnums of expressions from it. Ignore it if it's not fully + * covered by the chosen statistics. + * + * We need to check both attributes and expressions, and reject + * if either is not covered. + */ + if (!bms_is_subset(list_attnums[listidx], stat->keys) || + !stat_covers_expressions(stat, list_exprs[listidx], NULL)) + continue; + + /* + * Now we know the clause is compatible (we have either atttnums + * or expressions extracted from it), and was not estimated yet. + */ + + /* record simple clauses (single column or expression) */ + if ((list_attnums[listidx] == NULL && + list_length(list_exprs[listidx]) == 1) || + (list_exprs[listidx] == NIL && + bms_membership(list_attnums[listidx]) == BMS_SINGLETON)) + simple_clauses = bms_add_member(simple_clauses, + list_length(stat_clauses)); + + /* add clause to list and mark it as estimated */ + stat_clauses = lappend(stat_clauses, (Node *) lfirst(l)); + *estimatedclauses = bms_add_member(*estimatedclauses, listidx); + + /* + * Reset the pointers, so that choose_best_statistics knows this + * clause was estimated and does not consider it again. + */ + bms_free(list_attnums[listidx]); + list_attnums[listidx] = NULL; + + list_free(list_exprs[listidx]); + list_exprs[listidx] = NULL; } if (is_or) diff --git a/src/backend/statistics/mcv.c b/src/backend/statistics/mcv.c index 2a00fb48483f4..9ab3e81a91d77 100644 --- a/src/backend/statistics/mcv.c +++ b/src/backend/statistics/mcv.c @@ -1575,6 +1575,8 @@ mcv_match_expression(Node *expr, Bitmapset *keys, List *exprs, Oid *collid) (idx <= bms_num_members(keys) + list_length(exprs))); } + Assert((idx >= 0) && (idx < bms_num_members(keys) + list_length(exprs))); + return idx; } @@ -1654,6 +1656,8 @@ mcv_get_match_bitmap(PlannerInfo *root, List *clauses, /* match the attribute/expression to a dimension of the statistic */ idx = mcv_match_expression(clause_expr, keys, exprs, &collid); + Assert((idx >= 0) && (idx < bms_num_members(keys) + list_length(exprs))); + /* * Walk through the MCV items and evaluate the current clause. We * can skip items that were already ruled out, and terminate if diff --git a/src/test/regress/expected/stats_ext.out b/src/test/regress/expected/stats_ext.out index 679fd2d64d483..8c214d8dfc557 100644 --- a/src/test/regress/expected/stats_ext.out +++ b/src/test/regress/expected/stats_ext.out @@ -2938,6 +2938,25 @@ SELECT * FROM check_estimated_rows('SELECT * FROM expr_stats WHERE a = 0 AND (b (1 row) DROP TABLE expr_stats; +-- test handling of a mix of compatible and incompatible expressions +CREATE TABLE expr_stats_incompatible_test ( + c0 double precision, + c1 boolean NOT NULL +); +CREATE STATISTICS expr_stat_comp_1 ON c0, c1 FROM expr_stats_incompatible_test; +INSERT INTO expr_stats_incompatible_test VALUES (1234,false), (5678,true); +ANALYZE expr_stats_incompatible_test; +SELECT c0 FROM ONLY expr_stats_incompatible_test WHERE +( + upper('x') LIKE ('x'||('[0,1]'::int4range)) + AND + (c0 IN (0, 1) OR c1) +); + c0 +---- +(0 rows) + +DROP TABLE expr_stats_incompatible_test; -- Permission tests. Users should not be able to see specific data values in -- the extended statistics, if they lack permission to see those values in -- the underlying table. diff --git a/src/test/regress/sql/stats_ext.sql b/src/test/regress/sql/stats_ext.sql index 7e092571ca00b..e033080d4fb38 100644 --- a/src/test/regress/sql/stats_ext.sql +++ b/src/test/regress/sql/stats_ext.sql @@ -1470,6 +1470,25 @@ SELECT * FROM check_estimated_rows('SELECT * FROM expr_stats WHERE a = 0 AND (b DROP TABLE expr_stats; +-- test handling of a mix of compatible and incompatible expressions +CREATE TABLE expr_stats_incompatible_test ( + c0 double precision, + c1 boolean NOT NULL +); + +CREATE STATISTICS expr_stat_comp_1 ON c0, c1 FROM expr_stats_incompatible_test; + +INSERT INTO expr_stats_incompatible_test VALUES (1234,false), (5678,true); +ANALYZE expr_stats_incompatible_test; + +SELECT c0 FROM ONLY expr_stats_incompatible_test WHERE +( + upper('x') LIKE ('x'||('[0,1]'::int4range)) + AND + (c0 IN (0, 1) OR c1) +); + +DROP TABLE expr_stats_incompatible_test; -- Permission tests. Users should not be able to see specific data values in -- the extended statistics, if they lack permission to see those values in From 3a5130672296ed4e682403a77a9a3ad3d21cef75 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 6 Apr 2021 16:58:10 +0200 Subject: [PATCH 003/671] psql: Show all query results by default Previously, psql printed only the last result if a command string returned multiple result sets. Now it prints all of them. The previous behavior can be obtained by setting the psql variable SHOW_ALL_RESULTS to off. Author: Fabien COELHO Reviewed-by: "Iwata, Aya" Reviewed-by: Daniel Verite Reviewed-by: Peter Eisentraut Reviewed-by: Kyotaro Horiguchi Reviewed-by: vignesh C Discussion: https://www.postgresql.org/message-id/flat/alpine.DEB.2.21.1904132231510.8961@lancre --- .../expected/pg_stat_statements.out | 25 + doc/src/sgml/ref/psql-ref.sgml | 29 +- src/bin/psql/common.c | 624 ++++++++++-------- src/bin/psql/help.c | 2 + src/bin/psql/settings.h | 1 + src/bin/psql/startup.c | 10 + src/bin/psql/tab-complete.c | 2 +- src/test/regress/expected/copyselect.out | 14 +- src/test/regress/expected/psql.out | 93 +++ src/test/regress/expected/transactions.out | 58 +- src/test/regress/sql/copyselect.sql | 4 +- src/test/regress/sql/psql.sql | 38 ++ src/test/regress/sql/transactions.sql | 2 +- 13 files changed, 603 insertions(+), 299 deletions(-) diff --git a/contrib/pg_stat_statements/expected/pg_stat_statements.out b/contrib/pg_stat_statements/expected/pg_stat_statements.out index 16158525cac06..4ffb7e0076a10 100644 --- a/contrib/pg_stat_statements/expected/pg_stat_statements.out +++ b/contrib/pg_stat_statements/expected/pg_stat_statements.out @@ -50,8 +50,28 @@ BEGIN \; SELECT 2.0 AS "float" \; SELECT 'world' AS "text" \; COMMIT; + float +------- + 2.0 +(1 row) + + text +------- + world +(1 row) + -- compound with empty statements and spurious leading spacing \;\; SELECT 3 + 3 \;\;\; SELECT ' ' || ' !' \;\; SELECT 1 + 4 \;; + ?column? +---------- + 6 +(1 row) + + ?column? +---------- + ! +(1 row) + ?column? ---------- 5 @@ -61,6 +81,11 @@ COMMIT; SELECT 1 + 1 + 1 AS "add" \gset SELECT :add + 1 + 1 AS "add" \; SELECT :add + 1 + 1 AS "add" \gset + add +----- + 5 +(1 row) + -- set operator SELECT 1 AS i UNION SELECT 2 ORDER BY i; i diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 0ba1e2d44d47f..c1451c16727eb 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -127,18 +127,11 @@ echo '\x \\ SELECT * FROM foo;' | psql commands included in the string to divide it into multiple transactions. (See for more details about how the server handles multi-query strings.) - Also, psql only prints the - result of the last SQL command in the string. - This is different from the behavior when the same string is read from - a file or fed to psql's standard input, - because then psql sends - each SQL command separately. - Because of this behavior, putting more than one SQL command in a - single string often has unexpected results. - It's better to use repeated commands or feed - multiple commands to psql's standard input, + If having several commands executed in one transaction is not desired, + use repeated commands or feed multiple commands to + psql's standard input, either using echo as illustrated above, or via a shell here-document, for example: @@ -3527,10 +3520,6 @@ select 1\; select 2\; select 3; commands included in the string to divide it into multiple transactions. (See for more details about how the server handles multi-query strings.) - psql prints only the last query result - it receives for each request; in this example, although all - three SELECTs are indeed executed, psql - only prints the 3. @@ -4117,6 +4106,18 @@ bar + SHOW_ALL_RESULTS + + + When this variable is set to off, only the last + result of a combined query (\;) is shown instead of + all of them. The default is on. The off behavior + is for compatibility with older versions of psql. + + + + + SHOW_CONTEXT diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index 7a95465111ad1..028a357991fd2 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -33,6 +33,7 @@ static bool DescribeQuery(const char *query, double *elapsed_msec); static bool ExecQueryUsingCursor(const char *query, double *elapsed_msec); static bool command_no_begin(const char *query); static bool is_select_command(const char *query); +static int SendQueryAndProcessResults(const char *query, double *pelapsed_msec, bool is_watch); /* @@ -353,7 +354,7 @@ CheckConnection(void) * Returns true for valid result, false for error state. */ static bool -AcceptResult(const PGresult *result) +AcceptResult(const PGresult *result, bool show_error) { bool OK; @@ -384,7 +385,7 @@ AcceptResult(const PGresult *result) break; } - if (!OK) + if (!OK && show_error) { const char *error = PQerrorMessage(pset.db); @@ -472,6 +473,18 @@ ClearOrSaveResult(PGresult *result) } } +/* + * Consume all results + */ +static void +ClearOrSaveAllResults() +{ + PGresult *result; + + while ((result = PQgetResult(pset.db)) != NULL) + ClearOrSaveResult(result); +} + /* * Print microtiming output. Always print raw milliseconds; if the interval @@ -572,7 +585,7 @@ PSQLexec(const char *query) ResetCancelConn(); - if (!AcceptResult(res)) + if (!AcceptResult(res, true)) { ClearOrSaveResult(res); res = NULL; @@ -594,10 +607,8 @@ PSQLexec(const char *query) int PSQLexecWatch(const char *query, const printQueryOpt *opt) { - PGresult *res; double elapsed_msec = 0; - instr_time before; - instr_time after; + int res; if (!pset.db) { @@ -606,75 +617,16 @@ PSQLexecWatch(const char *query, const printQueryOpt *opt) } SetCancelConn(pset.db); - - if (pset.timing) - INSTR_TIME_SET_CURRENT(before); - - res = PQexec(pset.db, query); - + res = SendQueryAndProcessResults(query, &elapsed_msec, true); ResetCancelConn(); - if (!AcceptResult(res)) - { - ClearOrSaveResult(res); - return 0; - } - - if (pset.timing) - { - INSTR_TIME_SET_CURRENT(after); - INSTR_TIME_SUBTRACT(after, before); - elapsed_msec = INSTR_TIME_GET_MILLISEC(after); - } - - /* - * If SIGINT is sent while the query is processing, the interrupt will be - * consumed. The user's intention, though, is to cancel the entire watch - * process, so detect a sent cancellation request and exit in this case. - */ - if (cancel_pressed) - { - PQclear(res); - return 0; - } - - switch (PQresultStatus(res)) - { - case PGRES_TUPLES_OK: - printQuery(res, opt, pset.queryFout, false, pset.logfile); - break; - - case PGRES_COMMAND_OK: - fprintf(pset.queryFout, "%s\n%s\n\n", opt->title, PQcmdStatus(res)); - break; - - case PGRES_EMPTY_QUERY: - pg_log_error("\\watch cannot be used with an empty query"); - PQclear(res); - return -1; - - case PGRES_COPY_OUT: - case PGRES_COPY_IN: - case PGRES_COPY_BOTH: - pg_log_error("\\watch cannot be used with COPY"); - PQclear(res); - return -1; - - default: - pg_log_error("unexpected result status for \\watch"); - PQclear(res); - return -1; - } - - PQclear(res); - fflush(pset.queryFout); /* Possible microtiming output */ if (pset.timing) PrintTiming(elapsed_msec); - return 1; + return res; } @@ -887,197 +839,114 @@ ExecQueryTuples(const PGresult *result) /* - * ProcessResult: utility function for use by SendQuery() only - * - * When our command string contained a COPY FROM STDIN or COPY TO STDOUT, - * PQexec() has stopped at the PGresult associated with the first such - * command. In that event, we'll marshal data for the COPY and then cycle - * through any subsequent PGresult objects. + * Marshal the COPY data. Either subroutine will get the + * connection out of its COPY state, then call PQresultStatus() + * once and report any error. Return whether all was ok. * - * When the command string contained no such COPY command, this function - * degenerates to an AcceptResult() call. + * For COPY OUT, direct the output to pset.copyStream if it's set, + * otherwise to pset.gfname if it's set, otherwise to queryFout. + * For COPY IN, use pset.copyStream as data source if it's set, + * otherwise cur_cmd_source. * - * Changes its argument to point to the last PGresult of the command string, - * or NULL if that result was for a COPY TO STDOUT. (Returning NULL prevents - * the command status from being printed, which we want in that case so that - * the status line doesn't get taken as part of the COPY data.) - * - * Returns true on complete success, false otherwise. Possible failure modes - * include purely client-side problems; check the transaction status for the - * server-side opinion. + * Update result if further processing is necessary, or NULL otherwise. + * Return a result when queryFout can safely output a result status: + * on COPY IN, or on COPY OUT if written to something other than pset.queryFout. + * Returning NULL prevents the command status from being printed, which + * we want if the status line doesn't get taken as part of the COPY data. */ static bool -ProcessResult(PGresult **results) +HandleCopyResult(PGresult **result) { - bool success = true; - bool first_cycle = true; + bool success; + FILE *copystream; + PGresult *copy_result; + ExecStatusType result_status = PQresultStatus(*result); - for (;;) + Assert(result_status == PGRES_COPY_OUT || + result_status == PGRES_COPY_IN); + + SetCancelConn(pset.db); + + if (result_status == PGRES_COPY_OUT) { - ExecStatusType result_status; - bool is_copy; - PGresult *next_result; + bool need_close = false; + bool is_pipe = false; - if (!AcceptResult(*results)) + if (pset.copyStream) { - /* - * Failure at this point is always a server-side failure or a - * failure to submit the command string. Either way, we're - * finished with this command string. - */ - success = false; - break; + /* invoked by \copy */ + copystream = pset.copyStream; } - - result_status = PQresultStatus(*results); - switch (result_status) + else if (pset.gfname) { - case PGRES_EMPTY_QUERY: - case PGRES_COMMAND_OK: - case PGRES_TUPLES_OK: - is_copy = false; - break; + /* invoked by \g */ + if (openQueryOutputFile(pset.gfname, + ©stream, &is_pipe)) + { + need_close = true; + if (is_pipe) + disable_sigpipe_trap(); + } + else + copystream = NULL; /* discard COPY data entirely */ + } + else + { + /* fall back to the generic query output stream */ + copystream = pset.queryFout; + } - case PGRES_COPY_OUT: - case PGRES_COPY_IN: - is_copy = true; - break; + success = handleCopyOut(pset.db, + copystream, + ©_result) + && (copystream != NULL); - default: - /* AcceptResult() should have caught anything else. */ - is_copy = false; - pg_log_error("unexpected PQresultStatus: %d", result_status); - break; + /* + * Suppress status printing if the report would go to the same + * place as the COPY data just went. Note this doesn't + * prevent error reporting, since handleCopyOut did that. + */ + if (copystream == pset.queryFout) + { + PQclear(copy_result); + copy_result = NULL; } - if (is_copy) + if (need_close) { - /* - * Marshal the COPY data. Either subroutine will get the - * connection out of its COPY state, then call PQresultStatus() - * once and report any error. - * - * For COPY OUT, direct the output to pset.copyStream if it's set, - * otherwise to pset.gfname if it's set, otherwise to queryFout. - * For COPY IN, use pset.copyStream as data source if it's set, - * otherwise cur_cmd_source. - */ - FILE *copystream; - PGresult *copy_result; - - SetCancelConn(pset.db); - if (result_status == PGRES_COPY_OUT) + /* close \g argument file/pipe */ + if (is_pipe) { - bool need_close = false; - bool is_pipe = false; - - if (pset.copyStream) - { - /* invoked by \copy */ - copystream = pset.copyStream; - } - else if (pset.gfname) - { - /* invoked by \g */ - if (openQueryOutputFile(pset.gfname, - ©stream, &is_pipe)) - { - need_close = true; - if (is_pipe) - disable_sigpipe_trap(); - } - else - copystream = NULL; /* discard COPY data entirely */ - } - else - { - /* fall back to the generic query output stream */ - copystream = pset.queryFout; - } - - success = handleCopyOut(pset.db, - copystream, - ©_result) - && success - && (copystream != NULL); - - /* - * Suppress status printing if the report would go to the same - * place as the COPY data just went. Note this doesn't - * prevent error reporting, since handleCopyOut did that. - */ - if (copystream == pset.queryFout) - { - PQclear(copy_result); - copy_result = NULL; - } - - if (need_close) - { - /* close \g argument file/pipe */ - if (is_pipe) - { - pclose(copystream); - restore_sigpipe_trap(); - } - else - { - fclose(copystream); - } - } + pclose(copystream); + restore_sigpipe_trap(); } else { - /* COPY IN */ - copystream = pset.copyStream ? pset.copyStream : pset.cur_cmd_source; - success = handleCopyIn(pset.db, - copystream, - PQbinaryTuples(*results), - ©_result) && success; + fclose(copystream); } - ResetCancelConn(); - - /* - * Replace the PGRES_COPY_OUT/IN result with COPY command's exit - * status, or with NULL if we want to suppress printing anything. - */ - PQclear(*results); - *results = copy_result; - } - else if (first_cycle) - { - /* fast path: no COPY commands; PQexec visited all results */ - break; } - - /* - * Check PQgetResult() again. In the typical case of a single-command - * string, it will return NULL. Otherwise, we'll have other results - * to process that may include other COPYs. We keep the last result. - */ - next_result = PQgetResult(pset.db); - if (!next_result) - break; - - PQclear(*results); - *results = next_result; - first_cycle = false; + } + else + { + /* COPY IN */ + copystream = pset.copyStream ? pset.copyStream : pset.cur_cmd_source; + success = handleCopyIn(pset.db, + copystream, + PQbinaryTuples(*result), + ©_result); } - SetResultVariables(*results, success); - - /* may need this to recover from conn loss during COPY */ - if (!first_cycle && !CheckConnection()) - return false; + ResetCancelConn(); + PQclear(*result); + *result = copy_result; return success; } - /* * PrintQueryStatus: report command status as required * - * Note: Utility function for use by PrintQueryResults() only. + * Note: Utility function for use by HandleQueryResult() only. */ static void PrintQueryStatus(PGresult *results) @@ -1105,43 +974,50 @@ PrintQueryStatus(PGresult *results) /* - * PrintQueryResults: print out (or store or execute) query results as required - * - * Note: Utility function for use by SendQuery() only. + * HandleQueryResult: print out, store or execute one query result + * as required. * * Returns true if the query executed successfully, false otherwise. */ static bool -PrintQueryResults(PGresult *results) +HandleQueryResult(PGresult *result, bool last) { bool success; const char *cmdstatus; - if (!results) + if (result == NULL) return false; - switch (PQresultStatus(results)) + switch (PQresultStatus(result)) { case PGRES_TUPLES_OK: /* store or execute or print the data ... */ - if (pset.gset_prefix) - success = StoreQueryTuple(results); - else if (pset.gexec_flag) - success = ExecQueryTuples(results); - else if (pset.crosstab_flag) - success = PrintResultsInCrosstab(results); + if (last && pset.gset_prefix) + success = StoreQueryTuple(result); + else if (last && pset.gexec_flag) + success = ExecQueryTuples(result); + else if (last && pset.crosstab_flag) + success = PrintResultsInCrosstab(result); + else if (last || pset.show_all_results) + success = PrintQueryTuples(result); else - success = PrintQueryTuples(results); + success = true; + /* if it's INSERT/UPDATE/DELETE RETURNING, also print status */ - cmdstatus = PQcmdStatus(results); - if (strncmp(cmdstatus, "INSERT", 6) == 0 || - strncmp(cmdstatus, "UPDATE", 6) == 0 || - strncmp(cmdstatus, "DELETE", 6) == 0) - PrintQueryStatus(results); + if (last || pset.show_all_results) + { + cmdstatus = PQcmdStatus(result); + if (strncmp(cmdstatus, "INSERT", 6) == 0 || + strncmp(cmdstatus, "UPDATE", 6) == 0 || + strncmp(cmdstatus, "DELETE", 6) == 0) + PrintQueryStatus(result); + } + break; case PGRES_COMMAND_OK: - PrintQueryStatus(results); + if (last || pset.show_all_results) + PrintQueryStatus(result); success = true; break; @@ -1151,7 +1027,7 @@ PrintQueryResults(PGresult *results) case PGRES_COPY_OUT: case PGRES_COPY_IN: - /* nothing to do here */ + /* nothing to do here: already processed */ success = true; break; @@ -1164,7 +1040,7 @@ PrintQueryResults(PGresult *results) default: success = false; pg_log_error("unexpected PQresultStatus: %d", - PQresultStatus(results)); + PQresultStatus(result)); break; } @@ -1173,6 +1049,217 @@ PrintQueryResults(PGresult *results) return success; } +/* + * Data structure and functions to record notices while they are + * emitted, so that they can be shown later. + * + * We need to know which result is last, which requires to extract + * one result in advance, hence two buffers are needed. + */ +typedef struct { + bool in_flip; + PQExpBufferData flip; + PQExpBufferData flop; +} t_notice_messages; + +/* + * Store notices in appropriate buffer, for later display. + */ +static void +AppendNoticeMessage(void *arg, const char *msg) +{ + t_notice_messages *notes = (t_notice_messages*) arg; + appendPQExpBufferStr(notes->in_flip ? ¬es->flip : ¬es->flop, msg); +} + +/* + * Show notices stored in buffer, which is then reset. + */ +static void +ShowNoticeMessage(t_notice_messages *notes) +{ + PQExpBufferData *current = notes->in_flip ? ¬es->flip : ¬es->flop; + if (current->data != NULL && *current->data != '\0') + pg_log_info("%s", current->data); + resetPQExpBuffer(current); +} + +/* + * SendQueryAndProcessResults: utility function for use by SendQuery() + * and PSQLexecWatch(). + * + * Sends query and cycles through PGresult objects. + * + * When not under \watch and if our command string contained a COPY FROM STDIN + * or COPY TO STDOUT, the PGresult associated with these commands must be + * processed by providing an input or output stream. In that event, we'll + * marshal data for the COPY. + * + * For other commands, the results are processed normally, depending on their + * status. + * + * Returns 1 on complete success, 0 on interrupt and -1 or errors. Possible + * failure modes include purely client-side problems; check the transaction + * status for the server-side opinion. + * + * Note that on a combined query, failure does not mean that nothing was + * committed. + */ +static int +SendQueryAndProcessResults(const char *query, double *pelapsed_msec, bool is_watch) +{ + bool success; + instr_time before; + PGresult *result; + t_notice_messages notes; + + if (pset.timing) + INSTR_TIME_SET_CURRENT(before); + + success = PQsendQuery(pset.db, query); + ResetCancelConn(); + + if (!success) + { + const char *error = PQerrorMessage(pset.db); + + if (strlen(error)) + pg_log_info("%s", error); + + CheckConnection(); + + return -1; + } + + /* + * If SIGINT is sent while the query is processing, the interrupt will be + * consumed. The user's intention, though, is to cancel the entire watch + * process, so detect a sent cancellation request and exit in this case. + */ + if (is_watch && cancel_pressed) + { + ClearOrSaveAllResults(); + return 0; + } + + /* intercept notices */ + notes.in_flip = true; + initPQExpBuffer(¬es.flip); + initPQExpBuffer(¬es.flop); + PQsetNoticeProcessor(pset.db, AppendNoticeMessage, ¬es); + + /* first result */ + result = PQgetResult(pset.db); + + while (result != NULL) + { + ExecStatusType result_status; + PGresult *next_result; + bool last; + + if (!AcceptResult(result, false)) + { + /* + * Some error occured, either a server-side failure or + * a failure to submit the command string. Record that. + */ + const char *error = PQerrorMessage(pset.db); + + ShowNoticeMessage(¬es); + if (strlen(error)) + pg_log_info("%s", error); + CheckConnection(); + if (!is_watch) + SetResultVariables(result, false); + ClearOrSaveResult(result); + success = false; + + /* and switch to next result */ + result = PQgetResult(pset.db); + continue; + } + + /* must handle COPY before changing the current result */ + result_status = PQresultStatus(result); + Assert(result_status != PGRES_COPY_BOTH); + if (result_status == PGRES_COPY_IN || + result_status == PGRES_COPY_OUT) + { + ShowNoticeMessage(¬es); + + if (is_watch) + { + ClearOrSaveAllResults(); + pg_log_error("\\watch cannot be used with COPY"); + return -1; + } + + /* use normal notice processor during COPY */ + PQsetNoticeProcessor(pset.db, NoticeProcessor, NULL); + + success &= HandleCopyResult(&result); + + PQsetNoticeProcessor(pset.db, AppendNoticeMessage, ¬es); + } + + /* + * Check PQgetResult() again. In the typical case of a single-command + * string, it will return NULL. Otherwise, we'll have other results + * to process. + */ + notes.in_flip = !notes.in_flip; + next_result = PQgetResult(pset.db); + notes.in_flip = !notes.in_flip; + last = (next_result == NULL); + + /* + * Get timing measure before printing the last result. + * + * It will include the display of previous results, if any. + * This cannot be helped because the server goes on processing + * further queries anyway while the previous ones are being displayed. + * The parallel execution of the client display hides the server time + * when it is shorter. + * + * With combined queries, timing must be understood as an upper bound + * of the time spent processing them. + */ + if (last && pset.timing) + { + instr_time now; + INSTR_TIME_SET_CURRENT(now); + INSTR_TIME_SUBTRACT(now, before); + *pelapsed_msec = INSTR_TIME_GET_MILLISEC(now); + } + + /* notices already shown above for copy */ + ShowNoticeMessage(¬es); + + /* this may or may not print something depending on settings */ + if (result != NULL) + success &= HandleQueryResult(result, last); + + /* set variables on last result if all went well */ + if (!is_watch && last && success) + SetResultVariables(result, true); + + ClearOrSaveResult(result); + notes.in_flip = !notes.in_flip; + result = next_result; + } + + /* reset notice hook */ + PQsetNoticeProcessor(pset.db, NoticeProcessor, NULL); + termPQExpBuffer(¬es.flip); + termPQExpBuffer(¬es.flop); + + /* may need this to recover from conn loss during COPY */ + if (!CheckConnection()) + return -1; + + return success ? 1 : -1; +} + /* * SendQuery: send the query string to the backend @@ -1294,28 +1381,9 @@ SendQuery(const char *query) pset.crosstab_flag || !is_select_command(query)) { /* Default fetch-it-all-and-print mode */ - instr_time before, - after; - - if (pset.timing) - INSTR_TIME_SET_CURRENT(before); - - results = PQexec(pset.db, query); - - /* these operations are included in the timing result: */ - ResetCancelConn(); - OK = ProcessResult(&results); - - if (pset.timing) - { - INSTR_TIME_SET_CURRENT(after); - INSTR_TIME_SUBTRACT(after, before); - elapsed_msec = INSTR_TIME_GET_MILLISEC(after); - } - - /* but printing results isn't: */ - if (OK && results) - OK = PrintQueryResults(results); + int res = SendQueryAndProcessResults(query, &elapsed_msec, false); + OK = (res >= 0); + results = NULL; } else { @@ -1497,7 +1565,7 @@ DescribeQuery(const char *query, double *elapsed_msec) PQclear(results); results = PQdescribePrepared(pset.db, ""); - OK = AcceptResult(results) && + OK = AcceptResult(results, true) && (PQresultStatus(results) == PGRES_COMMAND_OK); if (OK && results) { @@ -1545,7 +1613,7 @@ DescribeQuery(const char *query, double *elapsed_msec) PQclear(results); results = PQexec(pset.db, buf.data); - OK = AcceptResult(results); + OK = AcceptResult(results, true); if (pset.timing) { @@ -1555,7 +1623,7 @@ DescribeQuery(const char *query, double *elapsed_msec) } if (OK && results) - OK = PrintQueryResults(results); + OK = HandleQueryResult(results, true); termPQExpBuffer(&buf); } @@ -1614,7 +1682,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec) if (PQtransactionStatus(pset.db) == PQTRANS_IDLE) { results = PQexec(pset.db, "BEGIN"); - OK = AcceptResult(results) && + OK = AcceptResult(results, true) && (PQresultStatus(results) == PGRES_COMMAND_OK); ClearOrSaveResult(results); if (!OK) @@ -1628,7 +1696,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec) query); results = PQexec(pset.db, buf.data); - OK = AcceptResult(results) && + OK = AcceptResult(results, true) && (PQresultStatus(results) == PGRES_COMMAND_OK); if (!OK) SetResultVariables(results, OK); @@ -1701,7 +1769,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec) is_pager = false; } - OK = AcceptResult(results); + OK = AcceptResult(results, true); Assert(!OK); SetResultVariables(results, OK); ClearOrSaveResult(results); @@ -1810,7 +1878,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec) results = PQexec(pset.db, "CLOSE _psql_cursor"); if (OK) { - OK = AcceptResult(results) && + OK = AcceptResult(results, true) && (PQresultStatus(results) == PGRES_COMMAND_OK); ClearOrSaveResult(results); } @@ -1820,7 +1888,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec) if (started_txn) { results = PQexec(pset.db, OK ? "COMMIT" : "ROLLBACK"); - OK &= AcceptResult(results) && + OK &= AcceptResult(results, true) && (PQresultStatus(results) == PGRES_COMMAND_OK); ClearOrSaveResult(results); } diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index 99a59470c5dc8..ac9a89a889ba8 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -410,6 +410,8 @@ helpVariables(unsigned short int pager) fprintf(output, _(" SERVER_VERSION_NAME\n" " SERVER_VERSION_NUM\n" " server's version (in short string or numeric format)\n")); + fprintf(output, _(" SHOW_ALL_RESULTS\n" + " show all results of a combined query (\\;) instead of only the last\n")); fprintf(output, _(" SHOW_CONTEXT\n" " controls display of message context fields [never, errors, always]\n")); fprintf(output, _(" SINGLELINE\n" diff --git a/src/bin/psql/settings.h b/src/bin/psql/settings.h index 83f2e6f254edd..62583ad6ca6fc 100644 --- a/src/bin/psql/settings.h +++ b/src/bin/psql/settings.h @@ -148,6 +148,7 @@ typedef struct _psqlSettings const char *prompt2; const char *prompt3; PGVerbosity verbosity; /* current error verbosity level */ + bool show_all_results; PGContextVisibility show_context; /* current context display level */ } PsqlSettings; diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c index 110906a4e959b..17437ce07dd13 100644 --- a/src/bin/psql/startup.c +++ b/src/bin/psql/startup.c @@ -196,6 +196,7 @@ main(int argc, char *argv[]) SetVariable(pset.vars, "PROMPT1", DEFAULT_PROMPT1); SetVariable(pset.vars, "PROMPT2", DEFAULT_PROMPT2); SetVariable(pset.vars, "PROMPT3", DEFAULT_PROMPT3); + SetVariableBool(pset.vars, "SHOW_ALL_RESULTS"); parse_psql_options(argc, argv, &options); @@ -1130,6 +1131,12 @@ verbosity_hook(const char *newval) return true; } +static bool +show_all_results_hook(const char *newval) +{ + return ParseVariableBool(newval, "SHOW_ALL_RESULTS", &pset.show_all_results); +} + static char * show_context_substitute_hook(char *newval) { @@ -1231,6 +1238,9 @@ EstablishVariableSpace(void) SetVariableHooks(pset.vars, "VERBOSITY", verbosity_substitute_hook, verbosity_hook); + SetVariableHooks(pset.vars, "SHOW_ALL_RESULTS", + bool_substitute_hook, + show_all_results_hook); SetVariableHooks(pset.vars, "SHOW_CONTEXT", show_context_substitute_hook, show_context_hook); diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 832bcdfc3bf9f..891997ca36975 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -4122,7 +4122,7 @@ psql_completion(const char *text, int start, int end) matches = complete_from_variables(text, "", "", false); else if (TailMatchesCS("\\set", MatchAny)) { - if (TailMatchesCS("AUTOCOMMIT|ON_ERROR_STOP|QUIET|" + if (TailMatchesCS("AUTOCOMMIT|ON_ERROR_STOP|QUIET|SHOW_ALL_RESULTS|" "SINGLELINE|SINGLESTEP")) COMPLETE_WITH_CS("on", "off"); else if (TailMatchesCS("COMP_KEYWORD_CASE")) diff --git a/src/test/regress/expected/copyselect.out b/src/test/regress/expected/copyselect.out index 72865fe1ebeea..bb9e026f913ae 100644 --- a/src/test/regress/expected/copyselect.out +++ b/src/test/regress/expected/copyselect.out @@ -126,7 +126,7 @@ copy (select 1) to stdout\; select 1/0; -- row, then error ERROR: division by zero select 1/0\; copy (select 1) to stdout; -- error only ERROR: division by zero -copy (select 1) to stdout\; copy (select 2) to stdout\; select 0\; select 3; -- 1 2 3 +copy (select 1) to stdout\; copy (select 2) to stdout\; select 3\; select 4; -- 1 2 3 4 1 2 ?column? @@ -134,8 +134,18 @@ copy (select 1) to stdout\; copy (select 2) to stdout\; select 0\; select 3; -- 3 (1 row) + ?column? +---------- + 4 +(1 row) + create table test3 (c int); -select 0\; copy test3 from stdin\; copy test3 from stdin\; select 1; -- 1 +select 0\; copy test3 from stdin\; copy test3 from stdin\; select 1; -- 0 1 + ?column? +---------- + 0 +(1 row) + ?column? ---------- 1 diff --git a/src/test/regress/expected/psql.out b/src/test/regress/expected/psql.out index 76050af797a76..9a51940530ab8 100644 --- a/src/test/regress/expected/psql.out +++ b/src/test/regress/expected/psql.out @@ -5078,3 +5078,96 @@ List of access methods hash | uuid_ops | uuid | uuid | 2 | uuid_hash_extended (5 rows) +-- +-- combined queries +-- +CREATE FUNCTION warn(msg TEXT) RETURNS BOOLEAN LANGUAGE plpgsql +AS $$ + BEGIN RAISE NOTICE 'warn %', msg ; RETURN TRUE ; END +$$; +-- show both +SELECT 1 AS one \; SELECT warn('1.5') \; SELECT 2 AS two ; + one +----- + 1 +(1 row) + +NOTICE: warn 1.5 +CONTEXT: PL/pgSQL function warn(text) line 2 at RAISE + warn +------ + t +(1 row) + + two +----- + 2 +(1 row) + +-- \gset applies to last query only +SELECT 3 AS three \; SELECT warn('3.5') \; SELECT 4 AS four \gset + three +------- + 3 +(1 row) + +NOTICE: warn 3.5 +CONTEXT: PL/pgSQL function warn(text) line 2 at RAISE + warn +------ + t +(1 row) + +\echo :three :four +:three 4 +-- syntax error stops all processing +SELECT 5 \; SELECT 6 + \; SELECT warn('6.5') \; SELECT 7 ; +ERROR: syntax error at or near ";" +LINE 1: SELECT 5 ; SELECT 6 + ; SELECT warn('6.5') ; SELECT 7 ; + ^ +-- with aborted transaction, stop on first error +BEGIN \; SELECT 8 AS eight \; SELECT 9/0 AS nine \; ROLLBACK \; SELECT 10 AS ten ; + eight +------- + 8 +(1 row) + +ERROR: division by zero +-- close previously aborted transaction +ROLLBACK; +-- misc SQL commands +-- (non SELECT output is sent to stderr, thus is not shown in expected results) +SELECT 'ok' AS "begin" \; +CREATE TABLE psql_comics(s TEXT) \; +INSERT INTO psql_comics VALUES ('Calvin'), ('hobbes') \; +COPY psql_comics FROM STDIN \; +UPDATE psql_comics SET s = 'Hobbes' WHERE s = 'hobbes' \; +DELETE FROM psql_comics WHERE s = 'Moe' \; +COPY psql_comics TO STDOUT \; +TRUNCATE psql_comics \; +DROP TABLE psql_comics \; +SELECT 'ok' AS "done" ; + begin +------- + ok +(1 row) + +Calvin +Susie +Hobbes + done +------ + ok +(1 row) + +\set SHOW_ALL_RESULTS off +SELECT 1 AS one \; SELECT warn('1.5') \; SELECT 2 AS two ; +NOTICE: warn 1.5 +CONTEXT: PL/pgSQL function warn(text) line 2 at RAISE + two +----- + 2 +(1 row) + +\set SHOW_ALL_RESULTS on +DROP FUNCTION warn(TEXT); diff --git a/src/test/regress/expected/transactions.out b/src/test/regress/expected/transactions.out index 61862d595d1ab..be1db0d5c0b53 100644 --- a/src/test/regress/expected/transactions.out +++ b/src/test/regress/expected/transactions.out @@ -900,8 +900,18 @@ DROP TABLE abc; -- tests rely on the fact that psql will not break SQL commands apart at a -- backslash-quoted semicolon, but will send them as one Query. create temp table i_table (f1 int); --- psql will show only the last result in a multi-statement Query +-- psql will show all results of a multi-statement Query SELECT 1\; SELECT 2\; SELECT 3; + ?column? +---------- + 1 +(1 row) + + ?column? +---------- + 2 +(1 row) + ?column? ---------- 3 @@ -916,6 +926,12 @@ insert into i_table values(1)\; select * from i_table; -- 1/0 error will cause rolling back the whole implicit transaction insert into i_table values(2)\; select * from i_table\; select 1/0; + f1 +---- + 1 + 2 +(2 rows) + ERROR: division by zero select * from i_table; f1 @@ -935,8 +951,18 @@ WARNING: there is no transaction in progress -- begin converts implicit transaction into a regular one that -- can extend past the end of the Query select 1\; begin\; insert into i_table values(5); + ?column? +---------- + 1 +(1 row) + commit; select 1\; begin\; insert into i_table values(6); + ?column? +---------- + 1 +(1 row) + rollback; -- commit in implicit-transaction state commits but issues a warning. insert into i_table values(7)\; commit\; insert into i_table values(8)\; select 1/0; @@ -963,22 +989,52 @@ rollback; -- we are not in a transaction at this point WARNING: there is no transaction in progress -- implicit transaction block is still a transaction block, for e.g. VACUUM SELECT 1\; VACUUM; + ?column? +---------- + 1 +(1 row) + ERROR: VACUUM cannot run inside a transaction block SELECT 1\; COMMIT\; VACUUM; WARNING: there is no transaction in progress + ?column? +---------- + 1 +(1 row) + ERROR: VACUUM cannot run inside a transaction block -- we disallow savepoint-related commands in implicit-transaction state SELECT 1\; SAVEPOINT sp; + ?column? +---------- + 1 +(1 row) + ERROR: SAVEPOINT can only be used in transaction blocks SELECT 1\; COMMIT\; SAVEPOINT sp; WARNING: there is no transaction in progress + ?column? +---------- + 1 +(1 row) + ERROR: SAVEPOINT can only be used in transaction blocks ROLLBACK TO SAVEPOINT sp\; SELECT 2; ERROR: ROLLBACK TO SAVEPOINT can only be used in transaction blocks SELECT 2\; RELEASE SAVEPOINT sp\; SELECT 3; + ?column? +---------- + 2 +(1 row) + ERROR: RELEASE SAVEPOINT can only be used in transaction blocks -- but this is OK, because the BEGIN converts it to a regular xact SELECT 1\; BEGIN\; SAVEPOINT sp\; ROLLBACK TO SAVEPOINT sp\; COMMIT; + ?column? +---------- + 1 +(1 row) + -- Tests for AND CHAIN in implicit transaction blocks SET TRANSACTION READ ONLY\; COMMIT AND CHAIN; -- error ERROR: COMMIT AND CHAIN can only be used in transaction blocks diff --git a/src/test/regress/sql/copyselect.sql b/src/test/regress/sql/copyselect.sql index 1d98dad3c8c55..e32a4f8e38e52 100644 --- a/src/test/regress/sql/copyselect.sql +++ b/src/test/regress/sql/copyselect.sql @@ -84,10 +84,10 @@ drop table test1; -- psql handling of COPY in multi-command strings copy (select 1) to stdout\; select 1/0; -- row, then error select 1/0\; copy (select 1) to stdout; -- error only -copy (select 1) to stdout\; copy (select 2) to stdout\; select 0\; select 3; -- 1 2 3 +copy (select 1) to stdout\; copy (select 2) to stdout\; select 3\; select 4; -- 1 2 3 4 create table test3 (c int); -select 0\; copy test3 from stdin\; copy test3 from stdin\; select 1; -- 1 +select 0\; copy test3 from stdin\; copy test3 from stdin\; select 1; -- 0 1 1 \. 2 diff --git a/src/test/regress/sql/psql.sql b/src/test/regress/sql/psql.sql index 537d5332aa90c..bf06bb87b5021 100644 --- a/src/test/regress/sql/psql.sql +++ b/src/test/regress/sql/psql.sql @@ -1228,3 +1228,41 @@ drop role regress_partitioning_role; \dAo * pg_catalog.jsonb_path_ops \dAp+ btree float_ops \dAp * pg_catalog.uuid_ops + +-- +-- combined queries +-- +CREATE FUNCTION warn(msg TEXT) RETURNS BOOLEAN LANGUAGE plpgsql +AS $$ + BEGIN RAISE NOTICE 'warn %', msg ; RETURN TRUE ; END +$$; +-- show both +SELECT 1 AS one \; SELECT warn('1.5') \; SELECT 2 AS two ; +-- \gset applies to last query only +SELECT 3 AS three \; SELECT warn('3.5') \; SELECT 4 AS four \gset +\echo :three :four +-- syntax error stops all processing +SELECT 5 \; SELECT 6 + \; SELECT warn('6.5') \; SELECT 7 ; +-- with aborted transaction, stop on first error +BEGIN \; SELECT 8 AS eight \; SELECT 9/0 AS nine \; ROLLBACK \; SELECT 10 AS ten ; +-- close previously aborted transaction +ROLLBACK; +-- misc SQL commands +-- (non SELECT output is sent to stderr, thus is not shown in expected results) +SELECT 'ok' AS "begin" \; +CREATE TABLE psql_comics(s TEXT) \; +INSERT INTO psql_comics VALUES ('Calvin'), ('hobbes') \; +COPY psql_comics FROM STDIN \; +UPDATE psql_comics SET s = 'Hobbes' WHERE s = 'hobbes' \; +DELETE FROM psql_comics WHERE s = 'Moe' \; +COPY psql_comics TO STDOUT \; +TRUNCATE psql_comics \; +DROP TABLE psql_comics \; +SELECT 'ok' AS "done" ; +Moe +Susie +\. +\set SHOW_ALL_RESULTS off +SELECT 1 AS one \; SELECT warn('1.5') \; SELECT 2 AS two ; +\set SHOW_ALL_RESULTS on +DROP FUNCTION warn(TEXT); diff --git a/src/test/regress/sql/transactions.sql b/src/test/regress/sql/transactions.sql index 8886280c0a628..7fc9f094680b4 100644 --- a/src/test/regress/sql/transactions.sql +++ b/src/test/regress/sql/transactions.sql @@ -504,7 +504,7 @@ DROP TABLE abc; create temp table i_table (f1 int); --- psql will show only the last result in a multi-statement Query +-- psql will show all results of a multi-statement Query SELECT 1\; SELECT 2\; SELECT 3; -- this implicitly commits: From 789d81de8a50d9a23cc1a3b8ea5d839246020689 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 6 Apr 2021 11:23:48 -0400 Subject: [PATCH 004/671] Fix missing #include in nodeResultCache.h. Per cpluspluscheck. --- src/backend/executor/nodeResultCache.c | 1 - src/include/executor/nodeResultCache.h | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/executor/nodeResultCache.c b/src/backend/executor/nodeResultCache.c index 99a2045681b05..534d733eb345a 100644 --- a/src/backend/executor/nodeResultCache.c +++ b/src/backend/executor/nodeResultCache.c @@ -66,7 +66,6 @@ #include "postgres.h" -#include "access/parallel.h" #include "common/hashfn.h" #include "executor/executor.h" #include "executor/nodeResultCache.h" diff --git a/src/include/executor/nodeResultCache.h b/src/include/executor/nodeResultCache.h index df671d16f9676..e7a3e7ab9cdbf 100644 --- a/src/include/executor/nodeResultCache.h +++ b/src/include/executor/nodeResultCache.h @@ -14,6 +14,7 @@ #ifndef NODERESULTCACHE_H #define NODERESULTCACHE_H +#include "access/parallel.h" #include "nodes/execnodes.h" extern ResultCacheState *ExecInitResultCache(ResultCache *node, EState *estate, int eflags); From 8523492d4e349c4714aa2ab0291be175a88cb4fc Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Tue, 6 Apr 2021 08:49:22 -0700 Subject: [PATCH 005/671] Remove tupgone special case from vacuumlazy.c. Retry the call to heap_prune_page() in rare cases where there is disagreement between the heap_prune_page() call and the call to HeapTupleSatisfiesVacuum() that immediately follows. Disagreement is possible when a concurrently-aborted transaction makes a tuple DEAD during the tiny window between each step. This was the only case where a tuple considered DEAD by VACUUM still had storage following pruning. VACUUM's definition of dead tuples is now uniformly simple and unambiguous: dead tuples from each page are always LP_DEAD line pointers that were encountered just after we performed pruning (and just before we considered freezing remaining items with tuple storage). Eliminating the tupgone=true special case enables INDEX_CLEANUP=off style skipping of index vacuuming that takes place based on flexible, dynamic criteria. The INDEX_CLEANUP=off case had to know about skipping indexes up-front before now, due to a subtle interaction with the special case (see commit dd695979) -- this was a special case unto itself. Now there are no special cases. And so now it won't matter when or how we decide to skip index vacuuming: it won't affect how pruning behaves, and it won't be affected by any of the implementation details of pruning or freezing. Also remove XLOG_HEAP2_CLEANUP_INFO records. These are no longer necessary because we now rely entirely on heap pruning taking care of recovery conflicts. There is no longer any need to generate recovery conflicts for DEAD tuples that pruning just missed. This also means that heap vacuuming now uses exactly the same strategy for recovery conflicts as index vacuuming always has: REDO routines never need to process a latestRemovedXid from the WAL record, since earlier REDO of the WAL record from pruning is sufficient in all cases. The generic XLOG_HEAP2_CLEAN record type is now split into two new record types to reflect this new division (these are called XLOG_HEAP2_PRUNE and XLOG_HEAP2_VACUUM). Also stop acquiring a super-exclusive lock for heap pages when they're vacuumed during VACUUM's second heap pass. A regular exclusive lock is enough. This is correct because heap page vacuuming is now strictly a matter of setting the LP_DEAD line pointers to LP_UNUSED. No other backend can have a pointer to a tuple located in a pinned buffer that can be invalidated by a concurrent heap page vacuum operation. Heap vacuuming can now be thought of as conceptually similar to index vacuuming and conceptually dissimilar to heap pruning. Heap pruning now has sole responsibility for anything involving the logical contents of the database (e.g., managing transaction status information, recovery conflicts, considering what to do with HOT chains). Index vacuuming and heap vacuuming are now only concerned with recycling garbage items from physical data structures that back the logical database. Bump XLOG_PAGE_MAGIC due to pruning and heap page vacuum WAL record changes. Credit for the idea of retrying pruning a page to avoid the tupgone case goes to Andres Freund. Author: Peter Geoghegan Reviewed-By: Andres Freund Reviewed-By: Masahiko Sawada Discussion: https://postgr.es/m/CAH2-WznneCXTzuFmcwx_EyRQgfsfJAAsu+CsqRFmFXCAar=nJw@mail.gmail.com --- src/backend/access/gist/gistxlog.c | 8 +- src/backend/access/hash/hash_xlog.c | 8 +- src/backend/access/heap/heapam.c | 205 ++++++++----------- src/backend/access/heap/pruneheap.c | 60 ++++-- src/backend/access/heap/vacuumlazy.c | 248 ++++++++++------------- src/backend/access/nbtree/nbtree.c | 8 +- src/backend/access/rmgrdesc/heapdesc.c | 31 +-- src/backend/replication/logical/decode.c | 4 +- src/include/access/heapam.h | 2 +- src/include/access/heapam_xlog.h | 41 ++-- src/include/access/xlog_internal.h | 2 +- src/tools/pgindent/typedefs.list | 4 +- 12 files changed, 285 insertions(+), 336 deletions(-) diff --git a/src/backend/access/gist/gistxlog.c b/src/backend/access/gist/gistxlog.c index 1c80eae044a94..6464cb9281b90 100644 --- a/src/backend/access/gist/gistxlog.c +++ b/src/backend/access/gist/gistxlog.c @@ -184,10 +184,10 @@ gistRedoDeleteRecord(XLogReaderState *record) * * GiST delete records can conflict with standby queries. You might think * that vacuum records would conflict as well, but we've handled that - * already. XLOG_HEAP2_CLEANUP_INFO records provide the highest xid - * cleaned by the vacuum of the heap and so we can resolve any conflicts - * just once when that arrives. After that we know that no conflicts - * exist from individual gist vacuum records on that index. + * already. XLOG_HEAP2_PRUNE records provide the highest xid cleaned by + * the vacuum of the heap and so we can resolve any conflicts just once + * when that arrives. After that we know that no conflicts exist from + * individual gist vacuum records on that index. */ if (InHotStandby) { diff --git a/src/backend/access/hash/hash_xlog.c b/src/backend/access/hash/hash_xlog.c index 02d9e6cdfd989..af35a991fc300 100644 --- a/src/backend/access/hash/hash_xlog.c +++ b/src/backend/access/hash/hash_xlog.c @@ -992,10 +992,10 @@ hash_xlog_vacuum_one_page(XLogReaderState *record) * Hash index records that are marked as LP_DEAD and being removed during * hash index tuple insertion can conflict with standby queries. You might * think that vacuum records would conflict as well, but we've handled - * that already. XLOG_HEAP2_CLEANUP_INFO records provide the highest xid - * cleaned by the vacuum of the heap and so we can resolve any conflicts - * just once when that arrives. After that we know that no conflicts - * exist from individual hash index vacuum records on that index. + * that already. XLOG_HEAP2_PRUNE records provide the highest xid cleaned + * by the vacuum of the heap and so we can resolve any conflicts just once + * when that arrives. After that we know that no conflicts exist from + * individual hash index vacuum records on that index. */ if (InHotStandby) { diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 595310ba1b206..9cbc161d7a9f7 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -7538,7 +7538,7 @@ heap_index_delete_tuples(Relation rel, TM_IndexDeleteOp *delstate) * must have considered the original tuple header as part of * generating its own latestRemovedXid value. * - * Relying on XLOG_HEAP2_CLEAN records like this is the same + * Relying on XLOG_HEAP2_PRUNE records like this is the same * strategy that index vacuuming uses in all cases. Index VACUUM * WAL records don't even have a latestRemovedXid field of their * own for this reason. @@ -7957,88 +7957,6 @@ bottomup_sort_and_shrink(TM_IndexDeleteOp *delstate) return nblocksfavorable; } -/* - * Perform XLogInsert to register a heap cleanup info message. These - * messages are sent once per VACUUM and are required because - * of the phasing of removal operations during a lazy VACUUM. - * see comments for vacuum_log_cleanup_info(). - */ -XLogRecPtr -log_heap_cleanup_info(RelFileNode rnode, TransactionId latestRemovedXid) -{ - xl_heap_cleanup_info xlrec; - XLogRecPtr recptr; - - xlrec.node = rnode; - xlrec.latestRemovedXid = latestRemovedXid; - - XLogBeginInsert(); - XLogRegisterData((char *) &xlrec, SizeOfHeapCleanupInfo); - - recptr = XLogInsert(RM_HEAP2_ID, XLOG_HEAP2_CLEANUP_INFO); - - return recptr; -} - -/* - * Perform XLogInsert for a heap-clean operation. Caller must already - * have modified the buffer and marked it dirty. - * - * Note: prior to Postgres 8.3, the entries in the nowunused[] array were - * zero-based tuple indexes. Now they are one-based like other uses - * of OffsetNumber. - * - * We also include latestRemovedXid, which is the greatest XID present in - * the removed tuples. That allows recovery processing to cancel or wait - * for long standby queries that can still see these tuples. - */ -XLogRecPtr -log_heap_clean(Relation reln, Buffer buffer, - OffsetNumber *redirected, int nredirected, - OffsetNumber *nowdead, int ndead, - OffsetNumber *nowunused, int nunused, - TransactionId latestRemovedXid) -{ - xl_heap_clean xlrec; - XLogRecPtr recptr; - - /* Caller should not call me on a non-WAL-logged relation */ - Assert(RelationNeedsWAL(reln)); - - xlrec.latestRemovedXid = latestRemovedXid; - xlrec.nredirected = nredirected; - xlrec.ndead = ndead; - - XLogBeginInsert(); - XLogRegisterData((char *) &xlrec, SizeOfHeapClean); - - XLogRegisterBuffer(0, buffer, REGBUF_STANDARD); - - /* - * The OffsetNumber arrays are not actually in the buffer, but we pretend - * that they are. When XLogInsert stores the whole buffer, the offset - * arrays need not be stored too. Note that even if all three arrays are - * empty, we want to expose the buffer as a candidate for whole-page - * storage, since this record type implies a defragmentation operation - * even if no line pointers changed state. - */ - if (nredirected > 0) - XLogRegisterBufData(0, (char *) redirected, - nredirected * sizeof(OffsetNumber) * 2); - - if (ndead > 0) - XLogRegisterBufData(0, (char *) nowdead, - ndead * sizeof(OffsetNumber)); - - if (nunused > 0) - XLogRegisterBufData(0, (char *) nowunused, - nunused * sizeof(OffsetNumber)); - - recptr = XLogInsert(RM_HEAP2_ID, XLOG_HEAP2_CLEAN); - - return recptr; -} - /* * Perform XLogInsert for a heap-freeze operation. Caller must have already * modified the buffer and marked it dirty. @@ -8510,34 +8428,15 @@ ExtractReplicaIdentity(Relation relation, HeapTuple tp, bool key_changed, } /* - * Handles CLEANUP_INFO - */ -static void -heap_xlog_cleanup_info(XLogReaderState *record) -{ - xl_heap_cleanup_info *xlrec = (xl_heap_cleanup_info *) XLogRecGetData(record); - - if (InHotStandby) - ResolveRecoveryConflictWithSnapshot(xlrec->latestRemovedXid, xlrec->node); - - /* - * Actual operation is a no-op. Record type exists to provide a means for - * conflict processing to occur before we begin index vacuum actions. see - * vacuumlazy.c and also comments in btvacuumpage() - */ - - /* Backup blocks are not used in cleanup_info records */ - Assert(!XLogRecHasAnyBlockRefs(record)); -} - -/* - * Handles XLOG_HEAP2_CLEAN record type + * Handles XLOG_HEAP2_PRUNE record type. + * + * Acquires a super-exclusive lock. */ static void -heap_xlog_clean(XLogReaderState *record) +heap_xlog_prune(XLogReaderState *record) { XLogRecPtr lsn = record->EndRecPtr; - xl_heap_clean *xlrec = (xl_heap_clean *) XLogRecGetData(record); + xl_heap_prune *xlrec = (xl_heap_prune *) XLogRecGetData(record); Buffer buffer; RelFileNode rnode; BlockNumber blkno; @@ -8548,12 +8447,8 @@ heap_xlog_clean(XLogReaderState *record) /* * We're about to remove tuples. In Hot Standby mode, ensure that there's * no queries running for which the removed tuples are still visible. - * - * Not all HEAP2_CLEAN records remove tuples with xids, so we only want to - * conflict on the records that cause MVCC failures for user queries. If - * latestRemovedXid is invalid, skip conflict processing. */ - if (InHotStandby && TransactionIdIsValid(xlrec->latestRemovedXid)) + if (InHotStandby) ResolveRecoveryConflictWithSnapshot(xlrec->latestRemovedXid, rnode); /* @@ -8606,7 +8501,7 @@ heap_xlog_clean(XLogReaderState *record) UnlockReleaseBuffer(buffer); /* - * After cleaning records from a page, it's useful to update the FSM + * After pruning records from a page, it's useful to update the FSM * about it, as it may cause the page become target for insertions * later even if vacuum decides not to visit it (which is possible if * gets marked all-visible.) @@ -8618,6 +8513,80 @@ heap_xlog_clean(XLogReaderState *record) } } +/* + * Handles XLOG_HEAP2_VACUUM record type. + * + * Acquires an exclusive lock only. + */ +static void +heap_xlog_vacuum(XLogReaderState *record) +{ + XLogRecPtr lsn = record->EndRecPtr; + xl_heap_vacuum *xlrec = (xl_heap_vacuum *) XLogRecGetData(record); + Buffer buffer; + BlockNumber blkno; + XLogRedoAction action; + + /* + * If we have a full-page image, restore it (without using a cleanup lock) + * and we're done. + */ + action = XLogReadBufferForRedoExtended(record, 0, RBM_NORMAL, false, + &buffer); + if (action == BLK_NEEDS_REDO) + { + Page page = (Page) BufferGetPage(buffer); + OffsetNumber *nowunused; + Size datalen; + OffsetNumber *offnum; + + nowunused = (OffsetNumber *) XLogRecGetBlockData(record, 0, &datalen); + + /* Shouldn't be a record unless there's something to do */ + Assert(xlrec->nunused > 0); + + /* Update all now-unused line pointers */ + offnum = nowunused; + for (int i = 0; i < xlrec->nunused; i++) + { + OffsetNumber off = *offnum++; + ItemId lp = PageGetItemId(page, off); + + Assert(ItemIdIsDead(lp) && !ItemIdHasStorage(lp)); + ItemIdSetUnused(lp); + } + + /* + * Update the page's hint bit about whether it has free pointers + */ + PageSetHasFreeLinePointers(page); + + PageSetLSN(page, lsn); + MarkBufferDirty(buffer); + } + + if (BufferIsValid(buffer)) + { + Size freespace = PageGetHeapFreeSpace(BufferGetPage(buffer)); + RelFileNode rnode; + + XLogRecGetBlockTag(record, 0, &rnode, NULL, &blkno); + + UnlockReleaseBuffer(buffer); + + /* + * After vacuuming LP_DEAD items from a page, it's useful to update + * the FSM about it, as it may cause the page become target for + * insertions later even if vacuum decides not to visit it (which is + * possible if gets marked all-visible.) + * + * Do this regardless of a full-page image being applied, since the + * FSM data is not in the page anyway. + */ + XLogRecordPageWithFreeSpace(rnode, blkno, freespace); + } +} + /* * Replay XLOG_HEAP2_VISIBLE record. * @@ -9722,15 +9691,15 @@ heap2_redo(XLogReaderState *record) switch (info & XLOG_HEAP_OPMASK) { - case XLOG_HEAP2_CLEAN: - heap_xlog_clean(record); + case XLOG_HEAP2_PRUNE: + heap_xlog_prune(record); + break; + case XLOG_HEAP2_VACUUM: + heap_xlog_vacuum(record); break; case XLOG_HEAP2_FREEZE_PAGE: heap_xlog_freeze_page(record); break; - case XLOG_HEAP2_CLEANUP_INFO: - heap_xlog_cleanup_info(record); - break; case XLOG_HEAP2_VISIBLE: heap_xlog_visible(record); break; diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c index 8bb38d6406e5e..f75502ca2c046 100644 --- a/src/backend/access/heap/pruneheap.c +++ b/src/backend/access/heap/pruneheap.c @@ -182,13 +182,10 @@ heap_page_prune_opt(Relation relation, Buffer buffer) */ if (PageIsFull(page) || PageGetHeapFreeSpace(page) < minfree) { - TransactionId ignore = InvalidTransactionId; /* return value not - * needed */ - /* OK to prune */ (void) heap_page_prune(relation, buffer, vistest, limited_xmin, limited_ts, - true, &ignore, NULL); + true, NULL); } /* And release buffer lock */ @@ -213,8 +210,6 @@ heap_page_prune_opt(Relation relation, Buffer buffer) * send its own new total to pgstats, and we don't want this delta applied * on top of that.) * - * Sets latestRemovedXid for caller on return. - * * off_loc is the offset location required by the caller to use in error * callback. * @@ -225,7 +220,7 @@ heap_page_prune(Relation relation, Buffer buffer, GlobalVisState *vistest, TransactionId old_snap_xmin, TimestampTz old_snap_ts, - bool report_stats, TransactionId *latestRemovedXid, + bool report_stats, OffsetNumber *off_loc) { int ndeleted = 0; @@ -251,7 +246,7 @@ heap_page_prune(Relation relation, Buffer buffer, prstate.old_snap_xmin = old_snap_xmin; prstate.old_snap_ts = old_snap_ts; prstate.old_snap_used = false; - prstate.latestRemovedXid = *latestRemovedXid; + prstate.latestRemovedXid = InvalidTransactionId; prstate.nredirected = prstate.ndead = prstate.nunused = 0; memset(prstate.marked, 0, sizeof(prstate.marked)); @@ -318,17 +313,41 @@ heap_page_prune(Relation relation, Buffer buffer, MarkBufferDirty(buffer); /* - * Emit a WAL XLOG_HEAP2_CLEAN record showing what we did + * Emit a WAL XLOG_HEAP2_PRUNE record showing what we did */ if (RelationNeedsWAL(relation)) { + xl_heap_prune xlrec; XLogRecPtr recptr; - recptr = log_heap_clean(relation, buffer, - prstate.redirected, prstate.nredirected, - prstate.nowdead, prstate.ndead, - prstate.nowunused, prstate.nunused, - prstate.latestRemovedXid); + xlrec.latestRemovedXid = prstate.latestRemovedXid; + xlrec.nredirected = prstate.nredirected; + xlrec.ndead = prstate.ndead; + + XLogBeginInsert(); + XLogRegisterData((char *) &xlrec, SizeOfHeapPrune); + + XLogRegisterBuffer(0, buffer, REGBUF_STANDARD); + + /* + * The OffsetNumber arrays are not actually in the buffer, but we + * pretend that they are. When XLogInsert stores the whole + * buffer, the offset arrays need not be stored too. + */ + if (prstate.nredirected > 0) + XLogRegisterBufData(0, (char *) prstate.redirected, + prstate.nredirected * + sizeof(OffsetNumber) * 2); + + if (prstate.ndead > 0) + XLogRegisterBufData(0, (char *) prstate.nowdead, + prstate.ndead * sizeof(OffsetNumber)); + + if (prstate.nunused > 0) + XLogRegisterBufData(0, (char *) prstate.nowunused, + prstate.nunused * sizeof(OffsetNumber)); + + recptr = XLogInsert(RM_HEAP2_ID, XLOG_HEAP2_PRUNE); PageSetLSN(BufferGetPage(buffer), recptr); } @@ -363,8 +382,6 @@ heap_page_prune(Relation relation, Buffer buffer, if (report_stats && ndeleted > prstate.ndead) pgstat_update_heap_dead_tuples(relation, ndeleted - prstate.ndead); - *latestRemovedXid = prstate.latestRemovedXid; - /* * XXX Should we update the FSM information of this page ? * @@ -809,12 +826,8 @@ heap_prune_record_unused(PruneState *prstate, OffsetNumber offnum) /* * Perform the actual page changes needed by heap_page_prune. - * It is expected that the caller has suitable pin and lock on the - * buffer, and is inside a critical section. - * - * This is split out because it is also used by heap_xlog_clean() - * to replay the WAL record when needed after a crash. Note that the - * arguments are identical to those of log_heap_clean(). + * It is expected that the caller has a super-exclusive lock on the + * buffer. */ void heap_page_prune_execute(Buffer buffer, @@ -826,6 +839,9 @@ heap_page_prune_execute(Buffer buffer, OffsetNumber *offnum; int i; + /* Shouldn't be called unless there's something to do */ + Assert(nredirected > 0 || ndead > 0 || nunused > 0); + /* Update all redirected line pointers */ offnum = redirected; for (i = 0; i < nredirected; i++) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 84700979c35be..446e3bc45233a 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -310,7 +310,6 @@ typedef struct LVRelState /* rel's initial relfrozenxid and relminmxid */ TransactionId relfrozenxid; MultiXactId relminmxid; - TransactionId latestRemovedXid; /* VACUUM operation's cutoff for pruning */ TransactionId OldestXmin; @@ -392,8 +391,7 @@ static void lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, static void lazy_scan_prune(LVRelState *vacrel, Buffer buf, BlockNumber blkno, Page page, GlobalVisState *vistest, - LVPagePruneState *prunestate, - VacOptTernaryValue index_cleanup); + LVPagePruneState *prunestate); static void lazy_vacuum(LVRelState *vacrel); static void lazy_vacuum_all_indexes(LVRelState *vacrel); static void lazy_vacuum_heap_rel(LVRelState *vacrel); @@ -556,7 +554,6 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, vacrel->old_live_tuples = rel->rd_rel->reltuples; vacrel->relfrozenxid = rel->rd_rel->relfrozenxid; vacrel->relminmxid = rel->rd_rel->relminmxid; - vacrel->latestRemovedXid = InvalidTransactionId; /* Set cutoffs for entire VACUUM */ vacrel->OldestXmin = OldestXmin; @@ -804,40 +801,6 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, } } -/* - * For Hot Standby we need to know the highest transaction id that will - * be removed by any change. VACUUM proceeds in a number of passes so - * we need to consider how each pass operates. The first phase runs - * heap_page_prune(), which can issue XLOG_HEAP2_CLEAN records as it - * progresses - these will have a latestRemovedXid on each record. - * In some cases this removes all of the tuples to be removed, though - * often we have dead tuples with index pointers so we must remember them - * for removal in phase 3. Index records for those rows are removed - * in phase 2 and index blocks do not have MVCC information attached. - * So before we can allow removal of any index tuples we need to issue - * a WAL record containing the latestRemovedXid of rows that will be - * removed in phase three. This allows recovery queries to block at the - * correct place, i.e. before phase two, rather than during phase three - * which would be after the rows have become inaccessible. - */ -static void -vacuum_log_cleanup_info(LVRelState *vacrel) -{ - /* - * Skip this for relations for which no WAL is to be written, or if we're - * not trying to support archive recovery. - */ - if (!RelationNeedsWAL(vacrel->rel) || !XLogIsNeeded()) - return; - - /* - * No need to write the record at all unless it contains a valid value - */ - if (TransactionIdIsValid(vacrel->latestRemovedXid)) - (void) log_heap_cleanup_info(vacrel->rel->rd_node, - vacrel->latestRemovedXid); -} - /* * lazy_scan_heap() -- scan an open heap relation * @@ -1319,8 +1282,7 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) * were pruned some time earlier. Also considers freezing XIDs in the * tuple headers of remaining items with storage. */ - lazy_scan_prune(vacrel, buf, blkno, page, vistest, &prunestate, - params->index_cleanup); + lazy_scan_prune(vacrel, buf, blkno, page, vistest, &prunestate); /* Remember the location of the last page with nonremovable tuples */ if (prunestate.hastup) @@ -1599,6 +1561,21 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) * lazy_scan_prune() -- lazy_scan_heap() pruning and freezing. * * Caller must hold pin and buffer cleanup lock on the buffer. + * + * Prior to PostgreSQL 14 there were very rare cases where heap_page_prune() + * was allowed to disagree with our HeapTupleSatisfiesVacuum() call about + * whether or not a tuple should be considered DEAD. This happened when an + * inserting transaction concurrently aborted (after our heap_page_prune() + * call, before our HeapTupleSatisfiesVacuum() call). There was rather a lot + * of complexity just so we could deal with tuples that were DEAD to VACUUM, + * but nevertheless were left with storage after pruning. + * + * The approach we take now is to restart pruning when the race condition is + * detected. This allows heap_page_prune() to prune the tuples inserted by + * the now-aborted transaction. This is a little crude, but it guarantees + * that any items that make it into the dead_tuples array are simple LP_DEAD + * line pointers, and that every remaining item with tuple storage is + * considered as a candidate for freezing. */ static void lazy_scan_prune(LVRelState *vacrel, @@ -1606,14 +1583,14 @@ lazy_scan_prune(LVRelState *vacrel, BlockNumber blkno, Page page, GlobalVisState *vistest, - LVPagePruneState *prunestate, - VacOptTernaryValue index_cleanup) + LVPagePruneState *prunestate) { Relation rel = vacrel->rel; OffsetNumber offnum, maxoff; ItemId itemid; HeapTupleData tuple; + HTSV_Result res; int tuples_deleted, lpdead_items, new_dead_tuples, @@ -1625,6 +1602,8 @@ lazy_scan_prune(LVRelState *vacrel, maxoff = PageGetMaxOffsetNumber(page); +retry: + /* Initialize (or reset) page-level counters */ tuples_deleted = 0; lpdead_items = 0; @@ -1643,7 +1622,6 @@ lazy_scan_prune(LVRelState *vacrel, */ tuples_deleted = heap_page_prune(rel, buf, vistest, InvalidTransactionId, 0, false, - &vacrel->latestRemovedXid, &vacrel->offnum); /* @@ -1662,7 +1640,6 @@ lazy_scan_prune(LVRelState *vacrel, offnum = OffsetNumberNext(offnum)) { bool tuple_totally_frozen; - bool tupgone = false; /* * Set the offset number so that we can display it along with any @@ -1713,6 +1690,17 @@ lazy_scan_prune(LVRelState *vacrel, tuple.t_len = ItemIdGetLength(itemid); tuple.t_tableOid = RelationGetRelid(rel); + /* + * DEAD tuples are almost always pruned into LP_DEAD line pointers by + * heap_page_prune(), but it's possible that the tuple state changed + * since heap_page_prune() looked. Handle that here by restarting. + * (See comments at the top of function for a full explanation.) + */ + res = HeapTupleSatisfiesVacuum(&tuple, vacrel->OldestXmin, buf); + + if (unlikely(res == HEAPTUPLE_DEAD)) + goto retry; + /* * The criteria for counting a tuple as live in this block need to * match what analyze.c's acquire_sample_rows() does, otherwise VACUUM @@ -1723,42 +1711,8 @@ lazy_scan_prune(LVRelState *vacrel, * VACUUM can't run inside a transaction block, which makes some cases * impossible (e.g. in-progress insert from the same transaction). */ - switch (HeapTupleSatisfiesVacuum(&tuple, vacrel->OldestXmin, buf)) + switch (res) { - case HEAPTUPLE_DEAD: - - /* - * Ordinarily, DEAD tuples would have been removed by - * heap_page_prune(), but it's possible that the tuple state - * changed since heap_page_prune() looked. In particular an - * INSERT_IN_PROGRESS tuple could have changed to DEAD if the - * inserter aborted. So this cannot be considered an error - * condition. - * - * If the tuple is HOT-updated then it must only be removed by - * a prune operation; so we keep it just as if it were - * RECENTLY_DEAD. Also, if it's a heap-only tuple, we choose - * to keep it, because it'll be a lot cheaper to get rid of it - * in the next pruning pass than to treat it like an indexed - * tuple. Finally, if index cleanup is disabled, the second - * heap pass will not execute, and the tuple will not get - * removed, so we must treat it like any other dead tuple that - * we choose to keep. - * - * If this were to happen for a tuple that actually needed to - * be deleted, we'd be in trouble, because it'd possibly leave - * a tuple below the relation's xmin horizon alive. - * heap_prepare_freeze_tuple() is prepared to detect that case - * and abort the transaction, preventing corruption. - */ - if (HeapTupleIsHotUpdated(&tuple) || - HeapTupleIsHeapOnly(&tuple) || - index_cleanup == VACOPT_TERNARY_DISABLED) - new_dead_tuples++; - else - tupgone = true; /* we can delete the tuple */ - prunestate->all_visible = false; - break; case HEAPTUPLE_LIVE: /* @@ -1838,46 +1792,32 @@ lazy_scan_prune(LVRelState *vacrel, break; } - if (tupgone) + /* + * Non-removable tuple (i.e. tuple with storage). + * + * Check tuple left behind after pruning to see if needs to be frozen + * now. + */ + num_tuples++; + prunestate->hastup = true; + if (heap_prepare_freeze_tuple(tuple.t_data, + vacrel->relfrozenxid, + vacrel->relminmxid, + vacrel->FreezeLimit, + vacrel->MultiXactCutoff, + &frozen[nfrozen], + &tuple_totally_frozen)) { - /* Pretend that this is an LP_DEAD item */ - deadoffsets[lpdead_items++] = offnum; - prunestate->all_visible = false; - prunestate->has_lpdead_items = true; - - /* But remember it for XLOG_HEAP2_CLEANUP_INFO record */ - HeapTupleHeaderAdvanceLatestRemovedXid(tuple.t_data, - &vacrel->latestRemovedXid); + /* Will execute freeze below */ + frozen[nfrozen++].offset = offnum; } - else - { - /* - * Non-removable tuple (i.e. tuple with storage). - * - * Check tuple left behind after pruning to see if needs to be frozen - * now. - */ - num_tuples++; - prunestate->hastup = true; - if (heap_prepare_freeze_tuple(tuple.t_data, - vacrel->relfrozenxid, - vacrel->relminmxid, - vacrel->FreezeLimit, - vacrel->MultiXactCutoff, - &frozen[nfrozen], - &tuple_totally_frozen)) - { - /* Will execute freeze below */ - frozen[nfrozen++].offset = offnum; - } - /* - * If tuple is not frozen (and not about to become frozen) then caller - * had better not go on to set this page's VM bit - */ - if (!tuple_totally_frozen) - prunestate->all_frozen = false; - } + /* + * If tuple is not frozen (and not about to become frozen) then caller + * had better not go on to set this page's VM bit + */ + if (!tuple_totally_frozen) + prunestate->all_frozen = false; } /* @@ -1888,9 +1828,6 @@ lazy_scan_prune(LVRelState *vacrel, * * Add page level counters to caller's counts, and then actually process * LP_DEAD and LP_NORMAL items. - * - * TODO: Remove tupgone logic entirely in next commit -- we shouldn't have - * to pretend that DEAD items are LP_DEAD items. */ vacrel->offnum = InvalidOffsetNumber; @@ -2053,9 +1990,6 @@ lazy_vacuum_all_indexes(LVRelState *vacrel) Assert(TransactionIdIsNormal(vacrel->relfrozenxid)); Assert(MultiXactIdIsValid(vacrel->relminmxid)); - /* Log cleanup info before we touch indexes */ - vacuum_log_cleanup_info(vacrel); - /* Report that we are now vacuuming indexes */ pgstat_progress_update_param(PROGRESS_VACUUM_PHASE, PROGRESS_VACUUM_PHASE_VACUUM_INDEX); @@ -2078,6 +2012,14 @@ lazy_vacuum_all_indexes(LVRelState *vacrel) do_parallel_lazy_vacuum_all_indexes(vacrel); } + /* + * We delete all LP_DEAD items from the first heap pass in all indexes on + * each call here. This makes the next call to lazy_vacuum_heap_rel() + * safe. + */ + Assert(vacrel->num_index_scans > 0 || + vacrel->dead_tuples->num_tuples == vacrel->lpdead_items); + /* Increase and report the number of index scans */ vacrel->num_index_scans++; pgstat_progress_update_param(PROGRESS_VACUUM_NUM_INDEX_VACUUMS, @@ -2087,9 +2029,9 @@ lazy_vacuum_all_indexes(LVRelState *vacrel) /* * lazy_vacuum_heap_rel() -- second pass over the heap for two pass strategy * - * This routine marks dead tuples as unused and compacts out free space on - * their pages. Pages not having dead tuples recorded from lazy_scan_heap are - * not visited at all. + * This routine marks LP_DEAD items in vacrel->dead_tuples array as LP_UNUSED. + * Pages that never had lazy_scan_prune record LP_DEAD items are not visited + * at all. * * Note: the reason for doing this as a second pass is we cannot remove the * tuples until we've removed their index entries, and we want to process @@ -2134,16 +2076,11 @@ lazy_vacuum_heap_rel(LVRelState *vacrel) vacrel->blkno = tblk; buf = ReadBufferExtended(vacrel->rel, MAIN_FORKNUM, tblk, RBM_NORMAL, vacrel->bstrategy); - if (!ConditionalLockBufferForCleanup(buf)) - { - ReleaseBuffer(buf); - ++tupindex; - continue; - } + LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); tupindex = lazy_vacuum_heap_page(vacrel, tblk, buf, tupindex, &vmbuffer); - /* Now that we've compacted the page, record its available space */ + /* Now that we've vacuumed the page, record its available space */ page = BufferGetPage(buf); freespace = PageGetHeapFreeSpace(page); @@ -2161,6 +2098,14 @@ lazy_vacuum_heap_rel(LVRelState *vacrel) vmbuffer = InvalidBuffer; } + /* + * We set all LP_DEAD items from the first heap pass to LP_UNUSED during + * the second heap pass. No more, no less. + */ + Assert(vacrel->num_index_scans > 1 || + (tupindex == vacrel->lpdead_items && + vacuumed_pages == vacrel->lpdead_item_pages)); + ereport(elevel, (errmsg("\"%s\": removed %d dead item identifiers in %u pages", vacrel->relname, tupindex, vacuumed_pages), @@ -2171,14 +2116,22 @@ lazy_vacuum_heap_rel(LVRelState *vacrel) } /* - * lazy_vacuum_heap_page() -- free dead tuples on a page - * and repair its fragmentation. + * lazy_vacuum_heap_page() -- free page's LP_DEAD items listed in the + * vacrel->dead_tuples array. * - * Caller must hold pin and buffer cleanup lock on the buffer. + * Caller must have an exclusive buffer lock on the buffer (though a + * super-exclusive lock is also acceptable). * * tupindex is the index in vacrel->dead_tuples of the first dead tuple for * this page. We assume the rest follow sequentially. The return value is * the first tupindex after the tuples of this page. + * + * Prior to PostgreSQL 14 there were rare cases where this routine had to set + * tuples with storage to unused. These days it is strictly responsible for + * marking LP_DEAD stub line pointers as unused. This only happens for those + * LP_DEAD items on the page that were determined to be LP_DEAD items back + * when the same page was visited by lazy_scan_prune() (i.e. those whose TID + * was recorded in the dead_tuples array). */ static int lazy_vacuum_heap_page(LVRelState *vacrel, BlockNumber blkno, Buffer buffer, @@ -2214,11 +2167,15 @@ lazy_vacuum_heap_page(LVRelState *vacrel, BlockNumber blkno, Buffer buffer, break; /* past end of tuples for this block */ toff = ItemPointerGetOffsetNumber(&dead_tuples->itemptrs[tupindex]); itemid = PageGetItemId(page, toff); + + Assert(ItemIdIsDead(itemid) && !ItemIdHasStorage(itemid)); ItemIdSetUnused(itemid); unused[uncnt++] = toff; } - PageRepairFragmentation(page); + Assert(uncnt > 0); + + PageSetHasFreeLinePointers(page); /* * Mark buffer dirty before we write WAL. @@ -2228,12 +2185,19 @@ lazy_vacuum_heap_page(LVRelState *vacrel, BlockNumber blkno, Buffer buffer, /* XLOG stuff */ if (RelationNeedsWAL(vacrel->rel)) { + xl_heap_vacuum xlrec; XLogRecPtr recptr; - recptr = log_heap_clean(vacrel->rel, buffer, - NULL, 0, NULL, 0, - unused, uncnt, - vacrel->latestRemovedXid); + xlrec.nunused = uncnt; + + XLogBeginInsert(); + XLogRegisterData((char *) &xlrec, SizeOfHeapVacuum); + + XLogRegisterBuffer(0, buffer, REGBUF_STANDARD); + XLogRegisterBufData(0, (char *) unused, uncnt * sizeof(OffsetNumber)); + + recptr = XLogInsert(RM_HEAP2_ID, XLOG_HEAP2_VACUUM); + PageSetLSN(page, recptr); } @@ -2246,10 +2210,10 @@ lazy_vacuum_heap_page(LVRelState *vacrel, BlockNumber blkno, Buffer buffer, END_CRIT_SECTION(); /* - * Now that we have removed the dead tuples from the page, once again + * Now that we have removed the LD_DEAD items from the page, once again * check if the page has become all-visible. The page is already marked * dirty, exclusively locked, and, if needed, a full page image has been - * emitted in the log_heap_clean() above. + * emitted. */ if (heap_page_is_all_visible(vacrel, buffer, &visibility_cutoff_xid, &all_frozen)) diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 9282c9ea22fb6..1360ab80c1e80 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -1213,10 +1213,10 @@ btvacuumpage(BTVacState *vstate, BlockNumber scanblkno) * as long as the callback function only considers whether the * index tuple refers to pre-cutoff heap tuples that were * certainly already pruned away during VACUUM's initial heap - * scan by the time we get here. (heapam's XLOG_HEAP2_CLEAN - * and XLOG_HEAP2_CLEANUP_INFO records produce conflicts using - * a latestRemovedXid value for the pointed-to heap tuples, so - * there is no need to produce our own conflict now.) + * scan by the time we get here. (heapam's XLOG_HEAP2_PRUNE + * records produce conflicts using a latestRemovedXid value + * for the pointed-to heap tuples, so there is no need to + * produce our own conflict now.) * * Backends with snapshots acquired after a VACUUM starts but * before it finishes could have visibility cutoff with a diff --git a/src/backend/access/rmgrdesc/heapdesc.c b/src/backend/access/rmgrdesc/heapdesc.c index e60e32b9353de..5c29fd9eae2b3 100644 --- a/src/backend/access/rmgrdesc/heapdesc.c +++ b/src/backend/access/rmgrdesc/heapdesc.c @@ -121,11 +121,20 @@ heap2_desc(StringInfo buf, XLogReaderState *record) uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK; info &= XLOG_HEAP_OPMASK; - if (info == XLOG_HEAP2_CLEAN) + if (info == XLOG_HEAP2_PRUNE) { - xl_heap_clean *xlrec = (xl_heap_clean *) rec; + xl_heap_prune *xlrec = (xl_heap_prune *) rec; - appendStringInfo(buf, "latestRemovedXid %u", xlrec->latestRemovedXid); + appendStringInfo(buf, "latestRemovedXid %u nredirected %u ndead %u", + xlrec->latestRemovedXid, + xlrec->nredirected, + xlrec->ndead); + } + else if (info == XLOG_HEAP2_VACUUM) + { + xl_heap_vacuum *xlrec = (xl_heap_vacuum *) rec; + + appendStringInfo(buf, "nunused %u", xlrec->nunused); } else if (info == XLOG_HEAP2_FREEZE_PAGE) { @@ -134,12 +143,6 @@ heap2_desc(StringInfo buf, XLogReaderState *record) appendStringInfo(buf, "cutoff xid %u ntuples %u", xlrec->cutoff_xid, xlrec->ntuples); } - else if (info == XLOG_HEAP2_CLEANUP_INFO) - { - xl_heap_cleanup_info *xlrec = (xl_heap_cleanup_info *) rec; - - appendStringInfo(buf, "latestRemovedXid %u", xlrec->latestRemovedXid); - } else if (info == XLOG_HEAP2_VISIBLE) { xl_heap_visible *xlrec = (xl_heap_visible *) rec; @@ -229,15 +232,15 @@ heap2_identify(uint8 info) switch (info & ~XLR_INFO_MASK) { - case XLOG_HEAP2_CLEAN: - id = "CLEAN"; + case XLOG_HEAP2_PRUNE: + id = "PRUNE"; + break; + case XLOG_HEAP2_VACUUM: + id = "VACUUM"; break; case XLOG_HEAP2_FREEZE_PAGE: id = "FREEZE_PAGE"; break; - case XLOG_HEAP2_CLEANUP_INFO: - id = "CLEANUP_INFO"; - break; case XLOG_HEAP2_VISIBLE: id = "VISIBLE"; break; diff --git a/src/backend/replication/logical/decode.c b/src/backend/replication/logical/decode.c index 97be4b0f23f4b..9aab7136843f5 100644 --- a/src/backend/replication/logical/decode.c +++ b/src/backend/replication/logical/decode.c @@ -484,8 +484,8 @@ DecodeHeap2Op(LogicalDecodingContext *ctx, XLogRecordBuffer *buf) * interested in. */ case XLOG_HEAP2_FREEZE_PAGE: - case XLOG_HEAP2_CLEAN: - case XLOG_HEAP2_CLEANUP_INFO: + case XLOG_HEAP2_PRUNE: + case XLOG_HEAP2_VACUUM: case XLOG_HEAP2_VISIBLE: case XLOG_HEAP2_LOCK_UPDATED: break; diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h index ceb625e13ac2e..e63b49fc385ce 100644 --- a/src/include/access/heapam.h +++ b/src/include/access/heapam.h @@ -186,7 +186,7 @@ extern int heap_page_prune(Relation relation, Buffer buffer, struct GlobalVisState *vistest, TransactionId old_snap_xmin, TimestampTz old_snap_ts_ts, - bool report_stats, TransactionId *latestRemovedXid, + bool report_stats, OffsetNumber *off_loc); extern void heap_page_prune_execute(Buffer buffer, OffsetNumber *redirected, int nredirected, diff --git a/src/include/access/heapam_xlog.h b/src/include/access/heapam_xlog.h index 178d49710a553..27db48184e6f1 100644 --- a/src/include/access/heapam_xlog.h +++ b/src/include/access/heapam_xlog.h @@ -51,9 +51,9 @@ * these, too. */ #define XLOG_HEAP2_REWRITE 0x00 -#define XLOG_HEAP2_CLEAN 0x10 -#define XLOG_HEAP2_FREEZE_PAGE 0x20 -#define XLOG_HEAP2_CLEANUP_INFO 0x30 +#define XLOG_HEAP2_PRUNE 0x10 +#define XLOG_HEAP2_VACUUM 0x20 +#define XLOG_HEAP2_FREEZE_PAGE 0x30 #define XLOG_HEAP2_VISIBLE 0x40 #define XLOG_HEAP2_MULTI_INSERT 0x50 #define XLOG_HEAP2_LOCK_UPDATED 0x60 @@ -227,7 +227,8 @@ typedef struct xl_heap_update #define SizeOfHeapUpdate (offsetof(xl_heap_update, new_offnum) + sizeof(OffsetNumber)) /* - * This is what we need to know about vacuum page cleanup/redirect + * This is what we need to know about page pruning (both during VACUUM and + * during opportunistic pruning) * * The array of OffsetNumbers following the fixed part of the record contains: * * for each redirected item: the item offset, then the offset redirected to @@ -236,29 +237,32 @@ typedef struct xl_heap_update * The total number of OffsetNumbers is therefore 2*nredirected+ndead+nunused. * Note that nunused is not explicitly stored, but may be found by reference * to the total record length. + * + * Requires a super-exclusive lock. */ -typedef struct xl_heap_clean +typedef struct xl_heap_prune { TransactionId latestRemovedXid; uint16 nredirected; uint16 ndead; /* OFFSET NUMBERS are in the block reference 0 */ -} xl_heap_clean; +} xl_heap_prune; -#define SizeOfHeapClean (offsetof(xl_heap_clean, ndead) + sizeof(uint16)) +#define SizeOfHeapPrune (offsetof(xl_heap_prune, ndead) + sizeof(uint16)) /* - * Cleanup_info is required in some cases during a lazy VACUUM. - * Used for reporting the results of HeapTupleHeaderAdvanceLatestRemovedXid() - * see vacuumlazy.c for full explanation + * The vacuum page record is similar to the prune record, but can only mark + * already dead items as unused + * + * Used by heap vacuuming only. Does not require a super-exclusive lock. */ -typedef struct xl_heap_cleanup_info +typedef struct xl_heap_vacuum { - RelFileNode node; - TransactionId latestRemovedXid; -} xl_heap_cleanup_info; + uint16 nunused; + /* OFFSET NUMBERS are in the block reference 0 */ +} xl_heap_vacuum; -#define SizeOfHeapCleanupInfo (sizeof(xl_heap_cleanup_info)) +#define SizeOfHeapVacuum (offsetof(xl_heap_vacuum, nunused) + sizeof(uint16)) /* flags for infobits_set */ #define XLHL_XMAX_IS_MULTI 0x01 @@ -397,13 +401,6 @@ extern void heap2_desc(StringInfo buf, XLogReaderState *record); extern const char *heap2_identify(uint8 info); extern void heap_xlog_logical_rewrite(XLogReaderState *r); -extern XLogRecPtr log_heap_cleanup_info(RelFileNode rnode, - TransactionId latestRemovedXid); -extern XLogRecPtr log_heap_clean(Relation reln, Buffer buffer, - OffsetNumber *redirected, int nredirected, - OffsetNumber *nowdead, int ndead, - OffsetNumber *nowunused, int nunused, - TransactionId latestRemovedXid); extern XLogRecPtr log_heap_freeze(Relation reln, Buffer buffer, TransactionId cutoff_xid, xl_heap_freeze_tuple *tuples, int ntuples); diff --git a/src/include/access/xlog_internal.h b/src/include/access/xlog_internal.h index b23e286406c69..da94f2d472a6a 100644 --- a/src/include/access/xlog_internal.h +++ b/src/include/access/xlog_internal.h @@ -31,7 +31,7 @@ /* * Each page of XLOG file has a header like this: */ -#define XLOG_PAGE_MAGIC 0xD10B /* can be used as WAL version indicator */ +#define XLOG_PAGE_MAGIC 0xD10C /* can be used as WAL version indicator */ typedef struct XLogPageHeaderData { diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 6a98064b2bdae..b26e81dcbf7a3 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -3554,8 +3554,6 @@ xl_hash_split_complete xl_hash_squeeze_page xl_hash_update_meta_page xl_hash_vacuum_one_page -xl_heap_clean -xl_heap_cleanup_info xl_heap_confirm xl_heap_delete xl_heap_freeze_page @@ -3567,9 +3565,11 @@ xl_heap_lock xl_heap_lock_updated xl_heap_multi_insert xl_heap_new_cid +xl_heap_prune xl_heap_rewrite_mapping xl_heap_truncate xl_heap_update +xl_heap_vacuum xl_heap_visible xl_invalid_page xl_invalid_page_key From 90c885cdab8bc5a5f12a243774fa0db51002a2fd Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Tue, 6 Apr 2021 09:24:50 -0700 Subject: [PATCH 006/671] Increment xactCompletionCount during subtransaction abort. Snapshot caching, introduced in 623a9ba79b, did not increment xactCompletionCount during subtransaction abort. That could lead to an older snapshot being reused. That is, at least as far as I can see, not a correctness issue (for MVCC snapshots there's no difference between "in progress" and "aborted"). The only difference between the old and new snapshots would be a newer ->xmax. While HeapTupleSatisfiesMVCC makes the same visibility determination, reusing the old snapshot leads HeapTupleSatisfiesMVCC to not set HEAP_XMIN_INVALID. Which subsequently causes the kill_prior_tuple optimization to not kick in (via HeapTupleIsSurelyDead() returning false). The performance effects of doing the same index-lookups over and over again is how the issue was discovered... Fix the issue by incrementing xactCompletionCount in XidCacheRemoveRunningXids. It already acquires ProcArrayLock exclusively, making that an easy proposition. Add a test to ensure that kill_prior_tuple prevents index growth when it involves aborted subtransaction of the current transaction. Author: Andres Freund Discussion: https://postgr.es/m/20210406043521.lopeo7bbigad3n6t@alap3.anarazel.de Discussion: https://postgr.es/m/20210317055718.v6qs3ltzrformqoa%40alap3.anarazel.de --- src/backend/storage/ipc/procarray.c | 8 ++++++ src/test/regress/expected/mvcc.out | 42 +++++++++++++++++++++++++++ src/test/regress/parallel_schedule | 2 +- src/test/regress/serial_schedule | 1 + src/test/regress/sql/mvcc.sql | 44 +++++++++++++++++++++++++++++ 5 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 src/test/regress/expected/mvcc.out create mode 100644 src/test/regress/sql/mvcc.sql diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index e113a85aed4c9..bf776286de013 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -1210,6 +1210,11 @@ ProcArrayApplyRecoveryInfo(RunningTransactions running) */ MaintainLatestCompletedXidRecovery(running->latestCompletedXid); + /* + * NB: No need to increment ShmemVariableCache->xactCompletionCount here, + * nobody can see it yet. + */ + LWLockRelease(ProcArrayLock); /* ShmemVariableCache->nextXid must be beyond any observed xid. */ @@ -3915,6 +3920,9 @@ XidCacheRemoveRunningXids(TransactionId xid, /* Also advance global latestCompletedXid while holding the lock */ MaintainLatestCompletedXid(latestXid); + /* ... and xactCompletionCount */ + ShmemVariableCache->xactCompletionCount++; + LWLockRelease(ProcArrayLock); } diff --git a/src/test/regress/expected/mvcc.out b/src/test/regress/expected/mvcc.out new file mode 100644 index 0000000000000..16ed4ddf2d8c0 --- /dev/null +++ b/src/test/regress/expected/mvcc.out @@ -0,0 +1,42 @@ +-- +-- Verify that index scans encountering dead rows produced by an +-- aborted subtransaction of the current transaction can utilize the +-- kill_prio_tuple optimization +-- +-- NB: The table size is currently *not* expected to stay the same, we +-- don't have logic to trigger opportunistic pruning in cases like +-- this. +BEGIN; +SET LOCAL enable_seqscan = false; +SET LOCAL enable_indexonlyscan = false; +SET LOCAL enable_bitmapscan = false; +-- Can't easily use a unique index, since dead tuples can be found +-- independent of the kill_prior_tuples optimization. +CREATE TABLE clean_aborted_self(key int, data text); +CREATE INDEX clean_aborted_self_key ON clean_aborted_self(key); +INSERT INTO clean_aborted_self (key, data) VALUES (-1, 'just to allocate metapage'); +-- save index size from before the changes, for comparison +SELECT pg_relation_size('clean_aborted_self_key') AS clean_aborted_self_key_before \gset +DO $$ +BEGIN + -- iterate often enough to see index growth even on larger-than-default page sizes + FOR i IN 1..100 LOOP + BEGIN + -- perform index scan over all the inserted keys to get them to be seen as dead + IF EXISTS(SELECT * FROM clean_aborted_self WHERE key > 0 AND key < 100) THEN + RAISE data_corrupted USING MESSAGE = 'these rows should not exist'; + END IF; + INSERT INTO clean_aborted_self SELECT g.i, 'rolling back in a sec' FROM generate_series(1, 100) g(i); + -- just some error that's not normally thrown + RAISE reading_sql_data_not_permitted USING MESSAGE = 'round and round again'; + EXCEPTION WHEN reading_sql_data_not_permitted THEN END; + END LOOP; +END;$$; +-- show sizes only if they differ +SELECT :clean_aborted_self_key_before AS size_before, pg_relation_size('clean_aborted_self_key') size_after +WHERE :clean_aborted_self_key_before != pg_relation_size('clean_aborted_self_key'); + size_before | size_after +-------------+------------ +(0 rows) + +ROLLBACK; diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule index 2e89839089233..a091300857720 100644 --- a/src/test/regress/parallel_schedule +++ b/src/test/regress/parallel_schedule @@ -29,7 +29,7 @@ test: strings numerology point lseg line box path polygon circle date time timet # geometry depends on point, lseg, box, path, polygon and circle # horology depends on interval, timetz, timestamp, timestamptz # ---------- -test: geometry horology regex type_sanity opr_sanity misc_sanity comments expressions unicode xid +test: geometry horology regex type_sanity opr_sanity misc_sanity comments expressions unicode xid mvcc # ---------- # These four each depend on the previous one diff --git a/src/test/regress/serial_schedule b/src/test/regress/serial_schedule index a46f3d01789b6..5644847601565 100644 --- a/src/test/regress/serial_schedule +++ b/src/test/regress/serial_schedule @@ -11,6 +11,7 @@ test: int4 test: int8 test: oid test: xid +test: mvcc test: float4 test: float8 test: bit diff --git a/src/test/regress/sql/mvcc.sql b/src/test/regress/sql/mvcc.sql new file mode 100644 index 0000000000000..b22a86dc5e514 --- /dev/null +++ b/src/test/regress/sql/mvcc.sql @@ -0,0 +1,44 @@ +-- +-- Verify that index scans encountering dead rows produced by an +-- aborted subtransaction of the current transaction can utilize the +-- kill_prio_tuple optimization +-- +-- NB: The table size is currently *not* expected to stay the same, we +-- don't have logic to trigger opportunistic pruning in cases like +-- this. +BEGIN; + +SET LOCAL enable_seqscan = false; +SET LOCAL enable_indexonlyscan = false; +SET LOCAL enable_bitmapscan = false; + +-- Can't easily use a unique index, since dead tuples can be found +-- independent of the kill_prior_tuples optimization. +CREATE TABLE clean_aborted_self(key int, data text); +CREATE INDEX clean_aborted_self_key ON clean_aborted_self(key); +INSERT INTO clean_aborted_self (key, data) VALUES (-1, 'just to allocate metapage'); + +-- save index size from before the changes, for comparison +SELECT pg_relation_size('clean_aborted_self_key') AS clean_aborted_self_key_before \gset + +DO $$ +BEGIN + -- iterate often enough to see index growth even on larger-than-default page sizes + FOR i IN 1..100 LOOP + BEGIN + -- perform index scan over all the inserted keys to get them to be seen as dead + IF EXISTS(SELECT * FROM clean_aborted_self WHERE key > 0 AND key < 100) THEN + RAISE data_corrupted USING MESSAGE = 'these rows should not exist'; + END IF; + INSERT INTO clean_aborted_self SELECT g.i, 'rolling back in a sec' FROM generate_series(1, 100) g(i); + -- just some error that's not normally thrown + RAISE reading_sql_data_not_permitted USING MESSAGE = 'round and round again'; + EXCEPTION WHEN reading_sql_data_not_permitted THEN END; + END LOOP; +END;$$; + +-- show sizes only if they differ +SELECT :clean_aborted_self_key_before AS size_before, pg_relation_size('clean_aborted_self_key') size_after +WHERE :clean_aborted_self_key_before != pg_relation_size('clean_aborted_self_key'); + +ROLLBACK; From a3740c48eb2f91663c7c06c948dfcfb6493d2588 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 7 Apr 2021 02:32:10 +0900 Subject: [PATCH 007/671] postgres_fdw: Allow partitions specified in LIMIT TO to be imported. Commit f49bcd4ef3 disallowed postgres_fdw to import table partitions. Because all data can be accessed through the partitioned table which is the root of the partitioning hierarchy, importing only partitioned table should allow access to all the data without creating extra objects. This is a reasonable default when importing a whole schema. But there may be the case where users want to explicitly import one of a partitioned tables' partitions. For that use case, this commit allows postgres_fdw to import tables or foreign tables which are partitions of some other table only when they are explicitly specified in LIMIT TO clause. It doesn't change the behavior that any partitions not specified in LIMIT TO are automatically excluded in IMPORT FOREIGN SCHEMA command. Author: Matthias van de Meent Reviewed-by: Bernd Helmle, Amit Langote, Michael Paquier, Fujii Masao Discussion: https://postgr.es/m/CAEze2Whwg4i=mzApMe+PXxCEfgoZmHGqdqQFW7J4bmj_5p6t1A@mail.gmail.com --- .../postgres_fdw/expected/postgres_fdw.out | 36 ++++++++++--------- contrib/postgres_fdw/postgres_fdw.c | 11 +++--- contrib/postgres_fdw/sql/postgres_fdw.sql | 6 ++-- doc/src/sgml/postgres-fdw.sgml | 10 +++--- 4 files changed, 37 insertions(+), 26 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 59e4e27ffbef2..9d472d2d3d6a8 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -8228,6 +8228,8 @@ ALTER TABLE import_source."x 5" DROP COLUMN c1; CREATE TABLE import_source.t4 (c1 int) PARTITION BY RANGE (c1); CREATE TABLE import_source.t4_part PARTITION OF import_source.t4 FOR VALUES FROM (1) TO (100); +CREATE TABLE import_source.t4_part2 PARTITION OF import_source.t4 + FOR VALUES FROM (100) TO (200); CREATE SCHEMA import_dest1; IMPORT FOREIGN SCHEMA import_source FROM SERVER loopback INTO import_dest1; \det+ import_dest1.* @@ -8419,27 +8421,29 @@ FDW options: (schema_name 'import_source', table_name 'x 5') -- Check LIMIT TO and EXCEPT CREATE SCHEMA import_dest4; -IMPORT FOREIGN SCHEMA import_source LIMIT TO (t1, nonesuch) +IMPORT FOREIGN SCHEMA import_source LIMIT TO (t1, nonesuch, t4_part) FROM SERVER loopback INTO import_dest4; \det+ import_dest4.* - List of foreign tables - Schema | Table | Server | FDW options | Description ---------------+-------+----------+------------------------------------------------+------------- - import_dest4 | t1 | loopback | (schema_name 'import_source', table_name 't1') | -(1 row) + List of foreign tables + Schema | Table | Server | FDW options | Description +--------------+---------+----------+-----------------------------------------------------+------------- + import_dest4 | t1 | loopback | (schema_name 'import_source', table_name 't1') | + import_dest4 | t4_part | loopback | (schema_name 'import_source', table_name 't4_part') | +(2 rows) -IMPORT FOREIGN SCHEMA import_source EXCEPT (t1, "x 4", nonesuch) +IMPORT FOREIGN SCHEMA import_source EXCEPT (t1, "x 4", nonesuch, t4_part) FROM SERVER loopback INTO import_dest4; \det+ import_dest4.* - List of foreign tables - Schema | Table | Server | FDW options | Description ---------------+-------+----------+-------------------------------------------------+------------- - import_dest4 | t1 | loopback | (schema_name 'import_source', table_name 't1') | - import_dest4 | t2 | loopback | (schema_name 'import_source', table_name 't2') | - import_dest4 | t3 | loopback | (schema_name 'import_source', table_name 't3') | - import_dest4 | t4 | loopback | (schema_name 'import_source', table_name 't4') | - import_dest4 | x 5 | loopback | (schema_name 'import_source', table_name 'x 5') | -(5 rows) + List of foreign tables + Schema | Table | Server | FDW options | Description +--------------+---------+----------+-----------------------------------------------------+------------- + import_dest4 | t1 | loopback | (schema_name 'import_source', table_name 't1') | + import_dest4 | t2 | loopback | (schema_name 'import_source', table_name 't2') | + import_dest4 | t3 | loopback | (schema_name 'import_source', table_name 't3') | + import_dest4 | t4 | loopback | (schema_name 'import_source', table_name 't4') | + import_dest4 | t4_part | loopback | (schema_name 'import_source', table_name 't4_part') | + import_dest4 | x 5 | loopback | (schema_name 'import_source', table_name 'x 5') | +(6 rows) -- Assorted error cases IMPORT FOREIGN SCHEMA import_source FROM SERVER loopback INTO import_dest4; diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index 16c2979f2d068..b6442070a350b 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -5095,9 +5095,11 @@ postgresImportForeignSchema(ImportForeignSchemaStmt *stmt, Oid serverOid) * should save a few cycles to not process excluded tables in the * first place.) * - * Ignore table data for partitions and only include the definitions - * of the root partitioned tables to allow access to the complete - * remote data set locally in the schema imported. + * Import table data for partitions only when they are explicitly + * specified in LIMIT TO clause. Otherwise ignore them and only + * include the definitions of the root partitioned tables to allow + * access to the complete remote data set locally in the schema + * imported. * * Note: because we run the connection with search_path restricted to * pg_catalog, the format_type() and pg_get_expr() outputs will always @@ -5153,7 +5155,8 @@ postgresImportForeignSchema(ImportForeignSchemaStmt *stmt, Oid serverOid) deparseStringLiteral(&buf, stmt->remote_schema); /* Partitions are supported since Postgres 10 */ - if (PQserverVersion(conn) >= 100000) + if (PQserverVersion(conn) >= 100000 && + stmt->list_type != FDW_IMPORT_SCHEMA_LIMIT_TO) appendStringInfoString(&buf, " AND NOT c.relispartition "); /* Apply restrictions for LIMIT TO and EXCEPT */ diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 107d1c0e030b3..3b4f90a99caff 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -2366,6 +2366,8 @@ ALTER TABLE import_source."x 5" DROP COLUMN c1; CREATE TABLE import_source.t4 (c1 int) PARTITION BY RANGE (c1); CREATE TABLE import_source.t4_part PARTITION OF import_source.t4 FOR VALUES FROM (1) TO (100); +CREATE TABLE import_source.t4_part2 PARTITION OF import_source.t4 + FOR VALUES FROM (100) TO (200); CREATE SCHEMA import_dest1; IMPORT FOREIGN SCHEMA import_source FROM SERVER loopback INTO import_dest1; @@ -2386,10 +2388,10 @@ IMPORT FOREIGN SCHEMA import_source FROM SERVER loopback INTO import_dest3 -- Check LIMIT TO and EXCEPT CREATE SCHEMA import_dest4; -IMPORT FOREIGN SCHEMA import_source LIMIT TO (t1, nonesuch) +IMPORT FOREIGN SCHEMA import_source LIMIT TO (t1, nonesuch, t4_part) FROM SERVER loopback INTO import_dest4; \det+ import_dest4.* -IMPORT FOREIGN SCHEMA import_source EXCEPT (t1, "x 4", nonesuch) +IMPORT FOREIGN SCHEMA import_source EXCEPT (t1, "x 4", nonesuch, t4_part) FROM SERVER loopback INTO import_dest4; \det+ import_dest4.* diff --git a/doc/src/sgml/postgres-fdw.sgml b/doc/src/sgml/postgres-fdw.sgml index a7c695b000ff6..b0792a13b13ea 100644 --- a/doc/src/sgml/postgres-fdw.sgml +++ b/doc/src/sgml/postgres-fdw.sgml @@ -510,10 +510,12 @@ OPTIONS (ADD password_required 'false'); Tables or foreign tables which are partitions of some other table are - automatically excluded. Partitioned tables are imported, unless they - are a partition of some other table. Since all data can be accessed - through the partitioned table which is the root of the partitioning - hierarchy, this approach should allow access to all the data without + imported only when they are explicitly specified in + LIMIT TO clause. Otherwise they are automatically + excluded from . + Since all data can be accessed through the partitioned table + which is the root of the partitioning hierarchy, importing only + partitioned tables should allow access to all the data without creating extra objects. From c5b7ba4e67aeb5d6f824b74f94114d99ed6e42b7 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 6 Apr 2021 15:56:55 -0400 Subject: [PATCH 008/671] Postpone some stuff out of ExecInitModifyTable. Arrange to do some things on-demand, rather than immediately during executor startup, because there's a fair chance of never having to do them at all: * Don't open result relations' indexes until needed. * Don't initialize partition tuple routing, nor the child-to-root tuple conversion map, until needed. This wins in UPDATEs on partitioned tables when only some of the partitions will actually receive updates; with larger partition counts the savings is quite noticeable. Also, we can remove some sketchy heuristics in ExecInitModifyTable about whether to set up tuple routing. Also, remove execPartition.c's private hash table tracking which partitions were already opened by the ModifyTable node. Instead use the hash added to ModifyTable itself by commit 86dc90056. To allow lazy computation of the conversion maps, we now set ri_RootResultRelInfo in all child ResultRelInfos. We formerly set it only in some, not terribly well-defined, cases. This has user-visible side effects in that now more error messages refer to the root relation instead of some partition (and provide error data in the root's column order, too). It looks to me like this is a strict improvement in consistency, so I don't have a problem with the output changes visible in this commit. Extracted from a larger patch, which seemed to me to be too messy to push in one commit. Amit Langote, reviewed at different times by Heikki Linnakangas and myself Discussion: https://postgr.es/m/CA+HiwqG7ZruBmmih3wPsBZ4s0H2EhywrnXEduckY5Hr3fWzPWA@mail.gmail.com --- src/backend/commands/copyfrom.c | 2 +- src/backend/commands/trigger.c | 2 +- src/backend/executor/execMain.c | 8 + src/backend/executor/execPartition.c | 183 +++++------------ src/backend/executor/execUtils.c | 26 +++ src/backend/executor/nodeModifyTable.c | 247 ++++++++++++----------- src/backend/replication/logical/worker.c | 2 +- src/include/executor/execPartition.h | 1 - src/include/executor/executor.h | 9 +- src/include/nodes/execnodes.h | 6 +- src/test/regress/expected/inherit.out | 2 +- src/test/regress/expected/privileges.out | 2 +- src/test/regress/expected/update.out | 12 +- 13 files changed, 235 insertions(+), 267 deletions(-) diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c index be2e3d7354f74..20e7d57d41f6f 100644 --- a/src/backend/commands/copyfrom.c +++ b/src/backend/commands/copyfrom.c @@ -697,7 +697,7 @@ CopyFrom(CopyFromState cstate) * CopyFrom tuple routing. */ if (cstate->rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) - proute = ExecSetupPartitionTupleRouting(estate, NULL, cstate->rel); + proute = ExecSetupPartitionTupleRouting(estate, cstate->rel); if (cstate->whereClause) cstate->qualexpr = ExecInitQual(castNode(List, cstate->whereClause), diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index a5ceb1698c0fa..3421014e47158 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -5479,7 +5479,7 @@ AfterTriggerSaveEvent(EState *estate, ResultRelInfo *relinfo, if (row_trigger && transition_capture != NULL) { TupleTableSlot *original_insert_tuple = transition_capture->tcs_original_insert_tuple; - TupleConversionMap *map = relinfo->ri_ChildToRootMap; + TupleConversionMap *map = ExecGetChildToRootMap(relinfo); bool delete_old_table = transition_capture->tcs_delete_old_table; bool update_old_table = transition_capture->tcs_update_old_table; bool update_new_table = transition_capture->tcs_update_new_table; diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 9f86910a6bff3..bf43e7d379ea8 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -1231,11 +1231,19 @@ InitResultRelInfo(ResultRelInfo *resultRelInfo, resultRelInfo->ri_ReturningSlot = NULL; resultRelInfo->ri_TrigOldSlot = NULL; resultRelInfo->ri_TrigNewSlot = NULL; + + /* + * Only ExecInitPartitionInfo() and ExecInitPartitionDispatchInfo() pass + * non-NULL partition_root_rri. For child relations that are part of the + * initial query rather than being dynamically added by tuple routing, + * this field is filled in ExecInitModifyTable(). + */ resultRelInfo->ri_RootResultRelInfo = partition_root_rri; resultRelInfo->ri_RootToPartitionMap = NULL; /* set by * ExecInitRoutingInfo */ resultRelInfo->ri_PartitionTupleSlot = NULL; /* ditto */ resultRelInfo->ri_ChildToRootMap = NULL; + resultRelInfo->ri_ChildToRootMapValid = false; resultRelInfo->ri_CopyMultiInsertBuffer = NULL; } diff --git a/src/backend/executor/execPartition.c b/src/backend/executor/execPartition.c index 558060e080f81..99780ebb9618f 100644 --- a/src/backend/executor/execPartition.c +++ b/src/backend/executor/execPartition.c @@ -66,11 +66,17 @@ * * partitions * Array of 'max_partitions' elements containing a pointer to a - * ResultRelInfo for every leaf partitions touched by tuple routing. + * ResultRelInfo for every leaf partition touched by tuple routing. * Some of these are pointers to ResultRelInfos which are borrowed out of - * 'subplan_resultrel_htab'. The remainder have been built especially - * for tuple routing. See comment for PartitionDispatchData->indexes for - * details on how this array is indexed. + * the owning ModifyTableState node. The remainder have been built + * especially for tuple routing. See comment for + * PartitionDispatchData->indexes for details on how this array is + * indexed. + * + * is_borrowed_rel + * Array of 'max_partitions' booleans recording whether a given entry + * in 'partitions' is a ResultRelInfo pointer borrowed from the owning + * ModifyTableState node, rather than being built here. * * num_partitions * The current number of items stored in the 'partitions' array. Also @@ -80,12 +86,6 @@ * max_partitions * The current allocated size of the 'partitions' array. * - * subplan_resultrel_htab - * Hash table to store subplan ResultRelInfos by Oid. This is used to - * cache ResultRelInfos from targets of an UPDATE ModifyTable node; - * NULL in other cases. Some of these may be useful for tuple routing - * to save having to build duplicates. - * * memcxt * Memory context used to allocate subsidiary structs. *----------------------- @@ -98,9 +98,9 @@ struct PartitionTupleRouting int num_dispatch; int max_dispatch; ResultRelInfo **partitions; + bool *is_borrowed_rel; int num_partitions; int max_partitions; - HTAB *subplan_resultrel_htab; MemoryContext memcxt; }; @@ -153,16 +153,7 @@ typedef struct PartitionDispatchData int indexes[FLEXIBLE_ARRAY_MEMBER]; } PartitionDispatchData; -/* struct to hold result relations coming from UPDATE subplans */ -typedef struct SubplanResultRelHashElem -{ - Oid relid; /* hash key -- must be first */ - ResultRelInfo *rri; -} SubplanResultRelHashElem; - -static void ExecHashSubPlanResultRelsByOid(ModifyTableState *mtstate, - PartitionTupleRouting *proute); static ResultRelInfo *ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, PartitionTupleRouting *proute, PartitionDispatch dispatch, @@ -173,7 +164,8 @@ static void ExecInitRoutingInfo(ModifyTableState *mtstate, PartitionTupleRouting *proute, PartitionDispatch dispatch, ResultRelInfo *partRelInfo, - int partidx); + int partidx, + bool is_borrowed_rel); static PartitionDispatch ExecInitPartitionDispatchInfo(EState *estate, PartitionTupleRouting *proute, Oid partoid, PartitionDispatch parent_pd, @@ -215,11 +207,9 @@ static void find_matching_subplans_recurse(PartitionPruningData *prunedata, * it should be estate->es_query_cxt. */ PartitionTupleRouting * -ExecSetupPartitionTupleRouting(EState *estate, ModifyTableState *mtstate, - Relation rel) +ExecSetupPartitionTupleRouting(EState *estate, Relation rel) { PartitionTupleRouting *proute; - ModifyTable *node = mtstate ? (ModifyTable *) mtstate->ps.plan : NULL; /* * Here we attempt to expend as little effort as possible in setting up @@ -241,17 +231,6 @@ ExecSetupPartitionTupleRouting(EState *estate, ModifyTableState *mtstate, ExecInitPartitionDispatchInfo(estate, proute, RelationGetRelid(rel), NULL, 0, NULL); - /* - * If performing an UPDATE with tuple routing, we can reuse partition - * sub-plan result rels. We build a hash table to map the OIDs of - * partitions present in mtstate->resultRelInfo to their ResultRelInfos. - * Every time a tuple is routed to a partition that we've yet to set the - * ResultRelInfo for, before we go to the trouble of making one, we check - * for a pre-made one in the hash table. - */ - if (node && node->operation == CMD_UPDATE) - ExecHashSubPlanResultRelsByOid(mtstate, proute); - return proute; } @@ -351,7 +330,6 @@ ExecFindPartition(ModifyTableState *mtstate, is_leaf = partdesc->is_leaf[partidx]; if (is_leaf) { - /* * We've reached the leaf -- hurray, we're done. Look to see if * we've already got a ResultRelInfo for this partition. @@ -364,42 +342,33 @@ ExecFindPartition(ModifyTableState *mtstate, } else { - bool found = false; - /* - * We have not yet set up a ResultRelInfo for this partition, - * but if we have a subplan hash table, we might have one - * there. If not, we'll have to create one. + * If the partition is known in the owning ModifyTableState + * node, we can re-use that ResultRelInfo instead of creating + * a new one with ExecInitPartitionInfo(). */ - if (proute->subplan_resultrel_htab) + rri = ExecLookupResultRelByOid(mtstate, + partdesc->oids[partidx], + true, false); + if (rri) { - Oid partoid = partdesc->oids[partidx]; - SubplanResultRelHashElem *elem; + /* Verify this ResultRelInfo allows INSERTs */ + CheckValidResultRel(rri, CMD_INSERT); - elem = hash_search(proute->subplan_resultrel_htab, - &partoid, HASH_FIND, NULL); - if (elem) - { - found = true; - rri = elem->rri; - - /* Verify this ResultRelInfo allows INSERTs */ - CheckValidResultRel(rri, CMD_INSERT); - - /* - * Initialize information needed to insert this and - * subsequent tuples routed to this partition. - */ - ExecInitRoutingInfo(mtstate, estate, proute, dispatch, - rri, partidx); - } + /* + * Initialize information needed to insert this and + * subsequent tuples routed to this partition. + */ + ExecInitRoutingInfo(mtstate, estate, proute, dispatch, + rri, partidx, true); } - - /* We need to create a new one. */ - if (!found) + else + { + /* We need to create a new one. */ rri = ExecInitPartitionInfo(mtstate, estate, proute, dispatch, rootResultRelInfo, partidx); + } } Assert(rri != NULL); @@ -509,50 +478,6 @@ ExecFindPartition(ModifyTableState *mtstate, return rri; } -/* - * ExecHashSubPlanResultRelsByOid - * Build a hash table to allow fast lookups of subplan ResultRelInfos by - * partition Oid. We also populate the subplan ResultRelInfo with an - * ri_PartitionRoot. - */ -static void -ExecHashSubPlanResultRelsByOid(ModifyTableState *mtstate, - PartitionTupleRouting *proute) -{ - HASHCTL ctl; - HTAB *htab; - int i; - - ctl.keysize = sizeof(Oid); - ctl.entrysize = sizeof(SubplanResultRelHashElem); - ctl.hcxt = CurrentMemoryContext; - - htab = hash_create("PartitionTupleRouting table", mtstate->mt_nrels, - &ctl, HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); - proute->subplan_resultrel_htab = htab; - - /* Hash all subplans by their Oid */ - for (i = 0; i < mtstate->mt_nrels; i++) - { - ResultRelInfo *rri = &mtstate->resultRelInfo[i]; - bool found; - Oid partoid = RelationGetRelid(rri->ri_RelationDesc); - SubplanResultRelHashElem *elem; - - elem = (SubplanResultRelHashElem *) - hash_search(htab, &partoid, HASH_ENTER, &found); - Assert(!found); - elem->rri = rri; - - /* - * This is required in order to convert the partition's tuple to be - * compatible with the root partitioned table's tuple descriptor. When - * generating the per-subplan result rels, this was not set. - */ - rri->ri_RootResultRelInfo = mtstate->rootResultRelInfo; - } -} - /* * ExecInitPartitionInfo * Lock the partition and initialize ResultRelInfo. Also setup other @@ -613,7 +538,7 @@ ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, * didn't build the withCheckOptionList for partitions within the planner, * but simple translation of varattnos will suffice. This only occurs for * the INSERT case or in the case of UPDATE tuple routing where we didn't - * find a result rel to reuse in ExecSetupPartitionTupleRouting(). + * find a result rel to reuse. */ if (node && node->withCheckOptionLists != NIL) { @@ -676,7 +601,7 @@ ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, * build the returningList for partitions within the planner, but simple * translation of varattnos will suffice. This only occurs for the INSERT * case or in the case of UPDATE tuple routing where we didn't find a - * result rel to reuse in ExecSetupPartitionTupleRouting(). + * result rel to reuse. */ if (node && node->returningLists != NIL) { @@ -734,7 +659,7 @@ ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, /* Set up information needed for routing tuples to the partition. */ ExecInitRoutingInfo(mtstate, estate, proute, dispatch, - leaf_part_rri, partidx); + leaf_part_rri, partidx, false); /* * If there is an ON CONFLICT clause, initialize state for it. @@ -910,15 +835,6 @@ ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, } } - /* - * Also, if transition capture is required, store a map to convert tuples - * from partition's rowtype to the root partition table's. - */ - if (mtstate->mt_transition_capture || mtstate->mt_oc_transition_capture) - leaf_part_rri->ri_ChildToRootMap = - convert_tuples_by_name(RelationGetDescr(leaf_part_rri->ri_RelationDesc), - RelationGetDescr(rootResultRelInfo->ri_RelationDesc)); - /* * Since we've just initialized this ResultRelInfo, it's not in any list * attached to the estate as yet. Add it, so that it can be found later. @@ -949,7 +865,8 @@ ExecInitRoutingInfo(ModifyTableState *mtstate, PartitionTupleRouting *proute, PartitionDispatch dispatch, ResultRelInfo *partRelInfo, - int partidx) + int partidx, + bool is_borrowed_rel) { ResultRelInfo *rootRelInfo = partRelInfo->ri_RootResultRelInfo; MemoryContext oldcxt; @@ -1029,6 +946,8 @@ ExecInitRoutingInfo(ModifyTableState *mtstate, proute->max_partitions = 8; proute->partitions = (ResultRelInfo **) palloc(sizeof(ResultRelInfo *) * proute->max_partitions); + proute->is_borrowed_rel = (bool *) + palloc(sizeof(bool) * proute->max_partitions); } else { @@ -1036,10 +955,14 @@ ExecInitRoutingInfo(ModifyTableState *mtstate, proute->partitions = (ResultRelInfo **) repalloc(proute->partitions, sizeof(ResultRelInfo *) * proute->max_partitions); + proute->is_borrowed_rel = (bool *) + repalloc(proute->is_borrowed_rel, sizeof(bool) * + proute->max_partitions); } } proute->partitions[rri_index] = partRelInfo; + proute->is_borrowed_rel[rri_index] = is_borrowed_rel; dispatch->indexes[partidx] = rri_index; MemoryContextSwitchTo(oldcxt); @@ -1199,7 +1122,6 @@ void ExecCleanupTupleRouting(ModifyTableState *mtstate, PartitionTupleRouting *proute) { - HTAB *htab = proute->subplan_resultrel_htab; int i; /* @@ -1230,20 +1152,11 @@ ExecCleanupTupleRouting(ModifyTableState *mtstate, resultRelInfo); /* - * Check if this result rel is one belonging to the node's subplans, - * if so, let ExecEndPlan() clean it up. + * Close it if it's not one of the result relations borrowed from the + * owning ModifyTableState; those will be closed by ExecEndPlan(). */ - if (htab) - { - Oid partoid; - bool found; - - partoid = RelationGetRelid(resultRelInfo->ri_RelationDesc); - - (void) hash_search(htab, &partoid, HASH_FIND, &found); - if (found) - continue; - } + if (proute->is_borrowed_rel[i]) + continue; ExecCloseIndices(resultRelInfo); table_close(resultRelInfo->ri_RelationDesc, NoLock); diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c index 42632cb4d8885..ad11392b99de1 100644 --- a/src/backend/executor/execUtils.c +++ b/src/backend/executor/execUtils.c @@ -1225,6 +1225,32 @@ ExecGetReturningSlot(EState *estate, ResultRelInfo *relInfo) return relInfo->ri_ReturningSlot; } +/* + * Return the map needed to convert given child result relation's tuples to + * the rowtype of the query's main target ("root") relation. Note that a + * NULL result is valid and means that no conversion is needed. + */ +TupleConversionMap * +ExecGetChildToRootMap(ResultRelInfo *resultRelInfo) +{ + /* If we didn't already do so, compute the map for this child. */ + if (!resultRelInfo->ri_ChildToRootMapValid) + { + ResultRelInfo *rootRelInfo = resultRelInfo->ri_RootResultRelInfo; + + if (rootRelInfo) + resultRelInfo->ri_ChildToRootMap = + convert_tuples_by_name(RelationGetDescr(resultRelInfo->ri_RelationDesc), + RelationGetDescr(rootRelInfo->ri_RelationDesc)); + else /* this isn't a child result rel */ + resultRelInfo->ri_ChildToRootMap = NULL; + + resultRelInfo->ri_ChildToRootMapValid = true; + } + + return resultRelInfo->ri_ChildToRootMap; +} + /* Return a bitmap representing columns being inserted */ Bitmapset * ExecGetInsertedCols(ResultRelInfo *relinfo, EState *estate) diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index bf65785e643f8..249555f234bc4 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -492,6 +492,14 @@ ExecInsert(ModifyTableState *mtstate, resultRelationDesc = resultRelInfo->ri_RelationDesc; + /* + * Open the table's indexes, if we have not done so already, so that we + * can add new index entries for the inserted tuple. + */ + if (resultRelationDesc->rd_rel->relhasindex && + resultRelInfo->ri_IndexRelationDescs == NULL) + ExecOpenIndices(resultRelInfo, onconflict != ONCONFLICT_NONE); + /* * BEFORE ROW INSERT Triggers. * @@ -1276,7 +1284,6 @@ ExecCrossPartitionUpdate(ModifyTableState *mtstate, TupleTableSlot **inserted_tuple) { EState *estate = mtstate->ps.state; - PartitionTupleRouting *proute = mtstate->mt_partition_tuple_routing; TupleConversionMap *tupconv_map; bool tuple_deleted; TupleTableSlot *epqslot = NULL; @@ -1296,13 +1303,35 @@ ExecCrossPartitionUpdate(ModifyTableState *mtstate, errdetail("The result tuple would appear in a different partition than the original tuple."))); /* - * When an UPDATE is run on a leaf partition, we will not have partition - * tuple routing set up. In that case, fail with partition constraint - * violation error. + * When an UPDATE is run directly on a leaf partition, simply fail with a + * partition constraint violation error. */ - if (proute == NULL) + if (resultRelInfo == mtstate->rootResultRelInfo) ExecPartitionCheckEmitError(resultRelInfo, slot, estate); + /* Initialize tuple routing info if not already done. */ + if (mtstate->mt_partition_tuple_routing == NULL) + { + Relation rootRel = mtstate->rootResultRelInfo->ri_RelationDesc; + MemoryContext oldcxt; + + /* Things built here have to last for the query duration. */ + oldcxt = MemoryContextSwitchTo(estate->es_query_cxt); + + mtstate->mt_partition_tuple_routing = + ExecSetupPartitionTupleRouting(estate, rootRel); + + /* + * Before a partition's tuple can be re-routed, it must first be + * converted to the root's format, so we'll need a slot for storing + * such tuples. + */ + Assert(mtstate->mt_root_tuple_slot == NULL); + mtstate->mt_root_tuple_slot = table_slot_create(rootRel, NULL); + + MemoryContextSwitchTo(oldcxt); + } + /* * Row movement, part 1. Delete the tuple, but skip RETURNING processing. * We want to return rows from INSERT. @@ -1364,7 +1393,7 @@ ExecCrossPartitionUpdate(ModifyTableState *mtstate, * convert the tuple into root's tuple descriptor if needed, since * ExecInsert() starts the search from root. */ - tupconv_map = resultRelInfo->ri_ChildToRootMap; + tupconv_map = ExecGetChildToRootMap(resultRelInfo); if (tupconv_map != NULL) slot = execute_attr_map_slot(tupconv_map->attrMap, slot, @@ -1436,6 +1465,14 @@ ExecUpdate(ModifyTableState *mtstate, ExecMaterializeSlot(slot); + /* + * Open the table's indexes, if we have not done so already, so that we + * can add new index entries for the updated tuple. + */ + if (resultRelationDesc->rd_rel->relhasindex && + resultRelInfo->ri_IndexRelationDescs == NULL) + ExecOpenIndices(resultRelInfo, false); + /* BEFORE ROW UPDATE Triggers */ if (resultRelInfo->ri_TrigDesc && resultRelInfo->ri_TrigDesc->trig_update_before_row) @@ -2244,38 +2281,8 @@ ExecModifyTable(PlanState *pstate) /* If it's not the same as last time, we need to locate the rel */ if (resultoid != node->mt_lastResultOid) - { - if (node->mt_resultOidHash) - { - /* Use the pre-built hash table to locate the rel */ - MTTargetRelLookup *mtlookup; - - mtlookup = (MTTargetRelLookup *) - hash_search(node->mt_resultOidHash, &resultoid, - HASH_FIND, NULL); - if (!mtlookup) - elog(ERROR, "incorrect result rel OID %u", resultoid); - node->mt_lastResultOid = resultoid; - node->mt_lastResultIndex = mtlookup->relationIndex; - resultRelInfo = node->resultRelInfo + mtlookup->relationIndex; - } - else - { - /* With few target rels, just do a simple search */ - int ndx; - - for (ndx = 0; ndx < node->mt_nrels; ndx++) - { - resultRelInfo = node->resultRelInfo + ndx; - if (RelationGetRelid(resultRelInfo->ri_RelationDesc) == resultoid) - break; - } - if (ndx >= node->mt_nrels) - elog(ERROR, "incorrect result rel OID %u", resultoid); - node->mt_lastResultOid = resultoid; - node->mt_lastResultIndex = ndx; - } - } + resultRelInfo = ExecLookupResultRelByOid(node, resultoid, + false, true); } /* @@ -2466,6 +2473,61 @@ ExecModifyTable(PlanState *pstate) return NULL; } +/* + * ExecLookupResultRelByOid + * If the table with given OID is among the result relations to be + * updated by the given ModifyTable node, return its ResultRelInfo. + * + * If not found, return NULL if missing_ok, else raise error. + * + * If update_cache is true, then upon successful lookup, update the node's + * one-element cache. ONLY ExecModifyTable may pass true for this. + */ +ResultRelInfo * +ExecLookupResultRelByOid(ModifyTableState *node, Oid resultoid, + bool missing_ok, bool update_cache) +{ + if (node->mt_resultOidHash) + { + /* Use the pre-built hash table to locate the rel */ + MTTargetRelLookup *mtlookup; + + mtlookup = (MTTargetRelLookup *) + hash_search(node->mt_resultOidHash, &resultoid, HASH_FIND, NULL); + if (mtlookup) + { + if (update_cache) + { + node->mt_lastResultOid = resultoid; + node->mt_lastResultIndex = mtlookup->relationIndex; + } + return node->resultRelInfo + mtlookup->relationIndex; + } + } + else + { + /* With few target rels, just search the ResultRelInfo array */ + for (int ndx = 0; ndx < node->mt_nrels; ndx++) + { + ResultRelInfo *rInfo = node->resultRelInfo + ndx; + + if (RelationGetRelid(rInfo->ri_RelationDesc) == resultoid) + { + if (update_cache) + { + node->mt_lastResultOid = resultoid; + node->mt_lastResultIndex = ndx; + } + return rInfo; + } + } + } + + if (!missing_ok) + elog(ERROR, "incorrect result relation OID %u", resultoid); + return NULL; +} + /* ---------------------------------------------------------------- * ExecInitModifyTable * ---------------------------------------------------------------- @@ -2482,7 +2544,6 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) ListCell *l; int i; Relation rel; - bool update_tuple_routing_needed = node->partColsUpdated; /* check for unsupported flags */ Assert(!(eflags & (EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK))); @@ -2554,8 +2615,18 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) Index resultRelation = lfirst_int(l); if (resultRelInfo != mtstate->rootResultRelInfo) + { ExecInitResultRelation(estate, resultRelInfo, resultRelation); + /* + * For child result relations, store the root result relation + * pointer. We do so for the convenience of places that want to + * look at the query's original target relation but don't have the + * mtstate handy. + */ + resultRelInfo->ri_RootResultRelInfo = mtstate->rootResultRelInfo; + } + /* Initialize the usesFdwDirectModify flag */ resultRelInfo->ri_usesFdwDirectModify = bms_is_member(i, node->fdwDirectModifyPlans); @@ -2581,32 +2652,7 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) { resultRelInfo = &mtstate->resultRelInfo[i]; - /* - * If there are indices on the result relation, open them and save - * descriptors in the result relation info, so that we can add new - * index entries for the tuples we add/update. We need not do this - * for a DELETE, however, since deletion doesn't affect indexes. Also, - * inside an EvalPlanQual operation, the indexes might be open - * already, since we share the resultrel state with the original - * query. - */ - if (resultRelInfo->ri_RelationDesc->rd_rel->relhasindex && - operation != CMD_DELETE && - resultRelInfo->ri_IndexRelationDescs == NULL) - ExecOpenIndices(resultRelInfo, - node->onConflictAction != ONCONFLICT_NONE); - - /* - * If this is an UPDATE and a BEFORE UPDATE trigger is present, the - * trigger itself might modify the partition-key values. So arrange - * for tuple routing. - */ - if (resultRelInfo->ri_TrigDesc && - resultRelInfo->ri_TrigDesc->trig_update_before_row && - operation == CMD_UPDATE) - update_tuple_routing_needed = true; - - /* Also let FDWs init themselves for foreign-table result rels */ + /* Let FDWs init themselves for foreign-table result rels */ if (!resultRelInfo->ri_usesFdwDirectModify && resultRelInfo->ri_FdwRoutine != NULL && resultRelInfo->ri_FdwRoutine->BeginForeignModify != NULL) @@ -2619,52 +2665,20 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) i, eflags); } - - /* - * If needed, initialize a map to convert tuples in the child format - * to the format of the table mentioned in the query (root relation). - * It's needed for update tuple routing, because the routing starts - * from the root relation. It's also needed for capturing transition - * tuples, because the transition tuple store can only store tuples in - * the root table format. - * - * For INSERT, the map is only initialized for a given partition when - * the partition itself is first initialized by ExecFindPartition(). - */ - if (update_tuple_routing_needed || - (mtstate->mt_transition_capture && - mtstate->operation != CMD_INSERT)) - resultRelInfo->ri_ChildToRootMap = - convert_tuples_by_name(RelationGetDescr(resultRelInfo->ri_RelationDesc), - RelationGetDescr(mtstate->rootResultRelInfo->ri_RelationDesc)); } /* Get the root target relation */ rel = mtstate->rootResultRelInfo->ri_RelationDesc; /* - * If it's not a partitioned table after all, UPDATE tuple routing should - * not be attempted. - */ - if (rel->rd_rel->relkind != RELKIND_PARTITIONED_TABLE) - update_tuple_routing_needed = false; - - /* - * Build state for tuple routing if it's an INSERT or if it's an UPDATE of - * partition key. + * Build state for tuple routing if it's a partitioned INSERT. An UPDATE + * might need this too, but only if it actually moves tuples between + * partitions; in that case setup is done by ExecCrossPartitionUpdate. */ if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE && - (operation == CMD_INSERT || update_tuple_routing_needed)) + operation == CMD_INSERT) mtstate->mt_partition_tuple_routing = - ExecSetupPartitionTupleRouting(estate, mtstate, rel); - - /* - * For update row movement we'll need a dedicated slot to store the tuples - * that have been converted from partition format to the root table - * format. - */ - if (update_tuple_routing_needed) - mtstate->mt_root_tuple_slot = table_slot_create(rel, NULL); + ExecSetupPartitionTupleRouting(estate, rel); /* * Initialize any WITH CHECK OPTION constraints if needed. @@ -2743,7 +2757,11 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) /* Set the list of arbiter indexes if needed for ON CONFLICT */ resultRelInfo = mtstate->resultRelInfo; if (node->onConflictAction != ONCONFLICT_NONE) + { + /* insert may only have one relation, inheritance is not expanded */ + Assert(nrels == 1); resultRelInfo->ri_onConflictArbiterIndexes = node->arbiterIndexes; + } /* * If needed, Initialize target list, projection and qual for ON CONFLICT @@ -2755,9 +2773,6 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) TupleDesc relationDesc; TupleDesc tupDesc; - /* insert may only have one relation, inheritance is not expanded */ - Assert(nrels == 1); - /* already exists if created by RETURNING processing above */ if (mtstate->ps.ps_ExprContext == NULL) ExecAssignExprContext(estate, &mtstate->ps); @@ -3036,22 +3051,20 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) */ if (operation == CMD_INSERT) { + /* insert may only have one relation, inheritance is not expanded */ + Assert(nrels == 1); resultRelInfo = mtstate->resultRelInfo; - for (i = 0; i < nrels; i++) + if (!resultRelInfo->ri_usesFdwDirectModify && + resultRelInfo->ri_FdwRoutine != NULL && + resultRelInfo->ri_FdwRoutine->GetForeignModifyBatchSize && + resultRelInfo->ri_FdwRoutine->ExecForeignBatchInsert) { - if (!resultRelInfo->ri_usesFdwDirectModify && - resultRelInfo->ri_FdwRoutine != NULL && - resultRelInfo->ri_FdwRoutine->GetForeignModifyBatchSize && - resultRelInfo->ri_FdwRoutine->ExecForeignBatchInsert) - resultRelInfo->ri_BatchSize = - resultRelInfo->ri_FdwRoutine->GetForeignModifyBatchSize(resultRelInfo); - else - resultRelInfo->ri_BatchSize = 1; - + resultRelInfo->ri_BatchSize = + resultRelInfo->ri_FdwRoutine->GetForeignModifyBatchSize(resultRelInfo); Assert(resultRelInfo->ri_BatchSize >= 1); - - resultRelInfo++; } + else + resultRelInfo->ri_BatchSize = 1; } /* diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 74d538b5e379a..8da602d163694 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -1583,7 +1583,7 @@ apply_handle_tuple_routing(ResultRelInfo *relinfo, mtstate->ps.state = estate; mtstate->operation = operation; mtstate->resultRelInfo = relinfo; - proute = ExecSetupPartitionTupleRouting(estate, mtstate, parentrel); + proute = ExecSetupPartitionTupleRouting(estate, parentrel); /* * Find the partition to which the "search tuple" belongs. diff --git a/src/include/executor/execPartition.h b/src/include/executor/execPartition.h index d30ffde7d92d4..694e38b7ddd8b 100644 --- a/src/include/executor/execPartition.h +++ b/src/include/executor/execPartition.h @@ -111,7 +111,6 @@ typedef struct PartitionPruneState } PartitionPruneState; extern PartitionTupleRouting *ExecSetupPartitionTupleRouting(EState *estate, - ModifyTableState *mtstate, Relation rel); extern ResultRelInfo *ExecFindPartition(ModifyTableState *mtstate, ResultRelInfo *rootResultRelInfo, diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h index 26dcc4485ebf5..6eae134c08b40 100644 --- a/src/include/executor/executor.h +++ b/src/include/executor/executor.h @@ -596,6 +596,7 @@ extern int ExecCleanTargetListLength(List *targetlist); extern TupleTableSlot *ExecGetTriggerOldSlot(EState *estate, ResultRelInfo *relInfo); extern TupleTableSlot *ExecGetTriggerNewSlot(EState *estate, ResultRelInfo *relInfo); extern TupleTableSlot *ExecGetReturningSlot(EState *estate, ResultRelInfo *relInfo); +extern TupleConversionMap *ExecGetChildToRootMap(ResultRelInfo *resultRelInfo); extern Bitmapset *ExecGetInsertedCols(ResultRelInfo *relinfo, EState *estate); extern Bitmapset *ExecGetUpdatedCols(ResultRelInfo *relinfo, EState *estate); @@ -645,9 +646,15 @@ extern void CheckCmdReplicaIdentity(Relation rel, CmdType cmd); extern void CheckSubscriptionRelkind(char relkind, const char *nspname, const char *relname); -/* needed by trigger.c */ +/* + * prototypes from functions in nodeModifyTable.c + */ extern TupleTableSlot *ExecGetUpdateNewTuple(ResultRelInfo *relinfo, TupleTableSlot *planSlot, TupleTableSlot *oldSlot); +extern ResultRelInfo *ExecLookupResultRelByOid(ModifyTableState *node, + Oid resultoid, + bool missing_ok, + bool update_cache); #endif /* EXECUTOR_H */ diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 52d1fa018b595..8116d62e814d4 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -512,10 +512,12 @@ typedef struct ResultRelInfo /* * Map to convert child result relation tuples to the format of the table - * actually mentioned in the query (called "root"). Set only if - * transition tuple capture or update partition row movement is active. + * actually mentioned in the query (called "root"). Computed only if + * needed. A NULL map value indicates that no conversion is needed, so we + * must have a separate flag to show if the map has been computed. */ TupleConversionMap *ri_ChildToRootMap; + bool ri_ChildToRootMapValid; /* for use by copyfrom.c when performing multi-inserts */ struct CopyMultiInsertBuffer *ri_CopyMultiInsertBuffer; diff --git a/src/test/regress/expected/inherit.out b/src/test/regress/expected/inherit.out index 1c703c351fe6d..06f44287bc56c 100644 --- a/src/test/regress/expected/inherit.out +++ b/src/test/regress/expected/inherit.out @@ -2492,7 +2492,7 @@ ERROR: new row for relation "errtst_child_plaindef" violates check constraint " DETAIL: Failing row contains (10, 1, 15). UPDATE errtst_parent SET data = data + 10 WHERE partid = 20; ERROR: new row for relation "errtst_child_reorder" violates check constraint "errtst_child_reorder_data_check" -DETAIL: Failing row contains (15, 1, 20). +DETAIL: Failing row contains (20, 1, 15). -- direct leaf partition update, without partition id violation BEGIN; UPDATE errtst_child_fastdef SET partid = 1 WHERE partid = 0; diff --git a/src/test/regress/expected/privileges.out b/src/test/regress/expected/privileges.out index e979a639b56a5..1b4fc16644d2c 100644 --- a/src/test/regress/expected/privileges.out +++ b/src/test/regress/expected/privileges.out @@ -720,7 +720,7 @@ DETAIL: Failing row contains (a, b, c) = (aaa, null, null). -- simple update. UPDATE errtst SET b = NULL; ERROR: null value in column "b" of relation "errtst_part_1" violates not-null constraint -DETAIL: Failing row contains (b) = (null). +DETAIL: Failing row contains (a, b, c) = (aaa, null, ccc). -- partitioning key is updated, doesn't move the row. UPDATE errtst SET a = 'aaa', b = NULL; ERROR: null value in column "b" of relation "errtst_part_1" violates not-null constraint diff --git a/src/test/regress/expected/update.out b/src/test/regress/expected/update.out index dc34ac67b371d..ad91e5aedb871 100644 --- a/src/test/regress/expected/update.out +++ b/src/test/regress/expected/update.out @@ -342,8 +342,8 @@ DETAIL: Failing row contains (105, 85, null, b, 15). -- fail, no partition key update, so no attempt to move tuple, -- but "a = 'a'" violates partition constraint enforced by root partition) UPDATE part_b_10_b_20 set a = 'a'; -ERROR: new row for relation "part_c_1_100" violates partition constraint -DETAIL: Failing row contains (null, 1, 96, 12, a). +ERROR: new row for relation "part_b_10_b_20" violates partition constraint +DETAIL: Failing row contains (null, 96, a, 12, 1). -- ok, partition key update, no constraint violation UPDATE range_parted set d = d - 10 WHERE d > 10; -- ok, no partition key update, no constraint violation @@ -373,8 +373,8 @@ UPDATE part_b_10_b_20 set c = c + 20 returning c, b, a; -- fail, row movement happens only within the partition subtree. UPDATE part_b_10_b_20 set b = b - 6 WHERE c > 116 returning *; -ERROR: new row for relation "part_d_1_15" violates partition constraint -DETAIL: Failing row contains (2, 117, 2, b, 7). +ERROR: new row for relation "part_b_10_b_20" violates partition constraint +DETAIL: Failing row contains (2, 117, b, 7, 2). -- ok, row movement, with subset of rows moved into different partition. UPDATE range_parted set b = b - 6 WHERE c > 116 returning a, b + c; a | ?column? @@ -815,8 +815,8 @@ INSERT into sub_parted VALUES (1,2,10); -- Test partition constraint violation when intermediate ancestor is used and -- constraint is inherited from upper root. UPDATE sub_parted set a = 2 WHERE c = 10; -ERROR: new row for relation "sub_part2" violates partition constraint -DETAIL: Failing row contains (2, 10, 2). +ERROR: new row for relation "sub_parted" violates partition constraint +DETAIL: Failing row contains (2, 2, 10). -- Test update-partition-key, where the unpruned partitions do not have their -- partition keys updated. SELECT tableoid::regclass::text, * FROM list_parted WHERE a = 2 ORDER BY 1; From 3b82d990ab784881153c0f127e4c1211e9b6065c Mon Sep 17 00:00:00 2001 From: David Rowley Date: Wed, 7 Apr 2021 09:51:33 +1200 Subject: [PATCH 009/671] Fix compiler warning for MSVC in libpq_pipeline.c DEBUG was already defined by the MSVC toolchain for "Debug" builds. On these systems the unconditional #define DEBUG was causing a 'DEBUG': macro redefinition warning. Here we rename DEBUG to DEBUG_OUPUT and also get rid of the #define which defined this constant. This appears to have been left in the code by mistake. Discussion: https://postgr.es/m/CAApHDvqTTgDm38s4HRj03nhzhzQ1oMOj-RXFUB1pE6Bj07jyuQ@mail.gmail.com --- src/test/modules/libpq_pipeline/libpq_pipeline.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/modules/libpq_pipeline/libpq_pipeline.c b/src/test/modules/libpq_pipeline/libpq_pipeline.c index 95ffaae9f678d..e4bba103ed112 100644 --- a/src/test/modules/libpq_pipeline/libpq_pipeline.c +++ b/src/test/modules/libpq_pipeline/libpq_pipeline.c @@ -35,8 +35,7 @@ const char *const progname = "libpq_pipeline"; char *tracefile = NULL; /* path to PQtrace() file */ -#define DEBUG -#ifdef DEBUG +#ifdef DEBUG_OUTPUT #define pg_debug(...) do { fprintf(stderr, __VA_ARGS__); } while (0) #else #define pg_debug(...) From a1115fa0782378a8238045d238ae70cac36be8ae Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 6 Apr 2021 18:13:05 -0400 Subject: [PATCH 010/671] Postpone some more stuff out of ExecInitModifyTable. Delay creation of the projections for INSERT and UPDATE tuples until they're needed. This saves a pretty fair amount of work when only some of the partitions are actually touched. The logic associated with identifying junk columns in UPDATE/DELETE is moved to another loop, allowing removal of one loop over the target relations; but it didn't actually change at all. Extracted from a larger patch, which seemed to me to be too messy to push in one commit. Amit Langote, reviewed at different times by Heikki Linnakangas and myself Discussion: https://postgr.es/m/CA+HiwqG7ZruBmmih3wPsBZ4s0H2EhywrnXEduckY5Hr3fWzPWA@mail.gmail.com --- src/backend/executor/execMain.c | 1 + src/backend/executor/nodeModifyTable.c | 365 ++++++++++++++----------- src/include/nodes/execnodes.h | 2 + 3 files changed, 210 insertions(+), 158 deletions(-) diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index bf43e7d379ea8..78ddbf95f6805 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -1221,6 +1221,7 @@ InitResultRelInfo(ResultRelInfo *resultRelInfo, resultRelInfo->ri_projectNew = NULL; resultRelInfo->ri_newTupleSlot = NULL; resultRelInfo->ri_oldTupleSlot = NULL; + resultRelInfo->ri_projectNewInfoValid = false; resultRelInfo->ri_FdwState = NULL; resultRelInfo->ri_usesFdwDirectModify = false; resultRelInfo->ri_ConstraintExprs = NULL; diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 249555f234bc4..6a16752c73a10 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -371,6 +371,139 @@ ExecComputeStoredGenerated(ResultRelInfo *resultRelInfo, MemoryContextSwitchTo(oldContext); } +/* + * ExecInitInsertProjection + * Do one-time initialization of projection data for INSERT tuples. + * + * INSERT queries may need a projection to filter out junk attrs in the tlist. + * + * This is "one-time" for any given result rel, but we might touch + * more than one result rel in the course of a partitioned INSERT. + * + * This is also a convenient place to verify that the + * output of an INSERT matches the target table. + */ +static void +ExecInitInsertProjection(ModifyTableState *mtstate, + ResultRelInfo *resultRelInfo) +{ + ModifyTable *node = (ModifyTable *) mtstate->ps.plan; + Plan *subplan = outerPlan(node); + EState *estate = mtstate->ps.state; + List *insertTargetList = NIL; + bool need_projection = false; + ListCell *l; + + /* Extract non-junk columns of the subplan's result tlist. */ + foreach(l, subplan->targetlist) + { + TargetEntry *tle = (TargetEntry *) lfirst(l); + + if (!tle->resjunk) + insertTargetList = lappend(insertTargetList, tle); + else + need_projection = true; + } + + /* + * The junk-free list must produce a tuple suitable for the result + * relation. + */ + ExecCheckPlanOutput(resultRelInfo->ri_RelationDesc, insertTargetList); + + /* We'll need a slot matching the table's format. */ + resultRelInfo->ri_newTupleSlot = + table_slot_create(resultRelInfo->ri_RelationDesc, + &estate->es_tupleTable); + + /* Build ProjectionInfo if needed (it probably isn't). */ + if (need_projection) + { + TupleDesc relDesc = RelationGetDescr(resultRelInfo->ri_RelationDesc); + + /* need an expression context to do the projection */ + if (mtstate->ps.ps_ExprContext == NULL) + ExecAssignExprContext(estate, &mtstate->ps); + + resultRelInfo->ri_projectNew = + ExecBuildProjectionInfo(insertTargetList, + mtstate->ps.ps_ExprContext, + resultRelInfo->ri_newTupleSlot, + &mtstate->ps, + relDesc); + } + + resultRelInfo->ri_projectNewInfoValid = true; +} + +/* + * ExecInitUpdateProjection + * Do one-time initialization of projection data for UPDATE tuples. + * + * UPDATE always needs a projection, because (1) there's always some junk + * attrs, and (2) we may need to merge values of not-updated columns from + * the old tuple into the final tuple. In UPDATE, the tuple arriving from + * the subplan contains only new values for the changed columns, plus row + * identity info in the junk attrs. + * + * This is "one-time" for any given result rel, but we might touch more than + * one result rel in the course of a partitioned UPDATE, and each one needs + * its own projection due to possible column order variation. + * + * This is also a convenient place to verify that the output of an UPDATE + * matches the target table (ExecBuildUpdateProjection does that). + */ +static void +ExecInitUpdateProjection(ModifyTableState *mtstate, + ResultRelInfo *resultRelInfo) +{ + ModifyTable *node = (ModifyTable *) mtstate->ps.plan; + Plan *subplan = outerPlan(node); + EState *estate = mtstate->ps.state; + TupleDesc relDesc = RelationGetDescr(resultRelInfo->ri_RelationDesc); + int whichrel; + List *updateColnos; + + /* + * Usually, mt_lastResultIndex matches the target rel. If it happens not + * to, we can get the index the hard way with an integer division. + */ + whichrel = mtstate->mt_lastResultIndex; + if (resultRelInfo != mtstate->resultRelInfo + whichrel) + { + whichrel = resultRelInfo - mtstate->resultRelInfo; + Assert(whichrel >= 0 && whichrel < mtstate->mt_nrels); + } + + updateColnos = (List *) list_nth(node->updateColnosLists, whichrel); + + /* + * For UPDATE, we use the old tuple to fill up missing values in the tuple + * produced by the subplan to get the new tuple. We need two slots, both + * matching the table's desired format. + */ + resultRelInfo->ri_oldTupleSlot = + table_slot_create(resultRelInfo->ri_RelationDesc, + &estate->es_tupleTable); + resultRelInfo->ri_newTupleSlot = + table_slot_create(resultRelInfo->ri_RelationDesc, + &estate->es_tupleTable); + + /* need an expression context to do the projection */ + if (mtstate->ps.ps_ExprContext == NULL) + ExecAssignExprContext(estate, &mtstate->ps); + + resultRelInfo->ri_projectNew = + ExecBuildUpdateProjection(subplan->targetlist, + updateColnos, + relDesc, + mtstate->ps.ps_ExprContext, + resultRelInfo->ri_newTupleSlot, + &mtstate->ps); + + resultRelInfo->ri_projectNewInfoValid = true; +} + /* * ExecGetInsertNewTuple * This prepares a "new" tuple ready to be inserted into given result @@ -429,6 +562,8 @@ ExecGetUpdateNewTuple(ResultRelInfo *relinfo, ProjectionInfo *newProj = relinfo->ri_projectNew; ExprContext *econtext; + /* Use a few extra Asserts to protect against outside callers */ + Assert(relinfo->ri_projectNewInfoValid); Assert(planSlot != NULL && !TTS_EMPTY(planSlot)); Assert(oldSlot != NULL && !TTS_EMPTY(oldSlot)); @@ -1375,8 +1510,12 @@ ExecCrossPartitionUpdate(ModifyTableState *mtstate, else { /* Fetch the most recent version of old tuple. */ - TupleTableSlot *oldSlot = resultRelInfo->ri_oldTupleSlot; + TupleTableSlot *oldSlot; + /* ... but first, make sure ri_oldTupleSlot is initialized. */ + if (unlikely(!resultRelInfo->ri_projectNewInfoValid)) + ExecInitUpdateProjection(mtstate, resultRelInfo); + oldSlot = resultRelInfo->ri_oldTupleSlot; if (!table_tuple_fetch_row_version(resultRelInfo->ri_RelationDesc, tupleid, SnapshotAny, @@ -1706,6 +1845,10 @@ lreplace:; /* Tuple not passing quals anymore, exiting... */ return NULL; + /* Make sure ri_oldTupleSlot is initialized. */ + if (unlikely(!resultRelInfo->ri_projectNewInfoValid)) + ExecInitUpdateProjection(mtstate, resultRelInfo); + /* Fetch the most recent version of old tuple. */ oldSlot = resultRelInfo->ri_oldTupleSlot; if (!table_tuple_fetch_row_version(resultRelationDesc, @@ -2388,11 +2531,17 @@ ExecModifyTable(PlanState *pstate) switch (operation) { case CMD_INSERT: + /* Initialize projection info if first time for this table */ + if (unlikely(!resultRelInfo->ri_projectNewInfoValid)) + ExecInitInsertProjection(node, resultRelInfo); slot = ExecGetInsertNewTuple(resultRelInfo, planSlot); slot = ExecInsert(node, resultRelInfo, slot, planSlot, estate, node->canSetTag); break; case CMD_UPDATE: + /* Initialize projection info if first time for this table */ + if (unlikely(!resultRelInfo->ri_projectNewInfoValid)) + ExecInitUpdateProjection(node, resultRelInfo); /* * Make the new tuple by combining plan's output tuple with @@ -2665,8 +2814,65 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) i, eflags); } + + /* + * For UPDATE/DELETE, find the appropriate junk attr now, either a + * 'ctid' or 'wholerow' attribute depending on relkind. For foreign + * tables, the FDW might have created additional junk attr(s), but + * those are no concern of ours. + */ + if (operation == CMD_UPDATE || operation == CMD_DELETE) + { + char relkind; + + relkind = resultRelInfo->ri_RelationDesc->rd_rel->relkind; + if (relkind == RELKIND_RELATION || + relkind == RELKIND_MATVIEW || + relkind == RELKIND_PARTITIONED_TABLE) + { + resultRelInfo->ri_RowIdAttNo = + ExecFindJunkAttributeInTlist(subplan->targetlist, "ctid"); + if (!AttributeNumberIsValid(resultRelInfo->ri_RowIdAttNo)) + elog(ERROR, "could not find junk ctid column"); + } + else if (relkind == RELKIND_FOREIGN_TABLE) + { + /* + * When there is a row-level trigger, there should be a + * wholerow attribute. We also require it to be present in + * UPDATE, so we can get the values of unchanged columns. + */ + resultRelInfo->ri_RowIdAttNo = + ExecFindJunkAttributeInTlist(subplan->targetlist, + "wholerow"); + if (mtstate->operation == CMD_UPDATE && + !AttributeNumberIsValid(resultRelInfo->ri_RowIdAttNo)) + elog(ERROR, "could not find junk wholerow column"); + } + else + { + /* Other valid target relkinds must provide wholerow */ + resultRelInfo->ri_RowIdAttNo = + ExecFindJunkAttributeInTlist(subplan->targetlist, + "wholerow"); + if (!AttributeNumberIsValid(resultRelInfo->ri_RowIdAttNo)) + elog(ERROR, "could not find junk wholerow column"); + } + } } + /* + * If this is an inherited update/delete, there will be a junk attribute + * named "tableoid" present in the subplan's targetlist. It will be used + * to identify the result relation for a given tuple to be + * updated/deleted. + */ + mtstate->mt_resultOidAttno = + ExecFindJunkAttributeInTlist(subplan->targetlist, "tableoid"); + Assert(AttributeNumberIsValid(mtstate->mt_resultOidAttno) || nrels == 1); + mtstate->mt_lastResultOid = InvalidOid; /* force lookup at first tuple */ + mtstate->mt_lastResultIndex = 0; /* must be zero if no such attr */ + /* Get the root target relation */ rel = mtstate->rootResultRelInfo->ri_RelationDesc; @@ -2842,163 +3048,6 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) EvalPlanQualSetPlan(&mtstate->mt_epqstate, subplan, arowmarks); - /* - * Initialize projection(s) to create tuples suitable for result rel(s). - * INSERT queries may need a projection to filter out junk attrs in the - * tlist. UPDATE always needs a projection, because (1) there's always - * some junk attrs, and (2) we may need to merge values of not-updated - * columns from the old tuple into the final tuple. In UPDATE, the tuple - * arriving from the subplan contains only new values for the changed - * columns, plus row identity info in the junk attrs. - * - * If there are multiple result relations, each one needs its own - * projection. Note multiple rels are only possible for UPDATE/DELETE, so - * we can't be fooled by some needing a projection and some not. - * - * This section of code is also a convenient place to verify that the - * output of an INSERT or UPDATE matches the target table(s). - */ - for (i = 0; i < nrels; i++) - { - resultRelInfo = &mtstate->resultRelInfo[i]; - - /* - * Prepare to generate tuples suitable for the target relation. - */ - if (operation == CMD_INSERT) - { - List *insertTargetList = NIL; - bool need_projection = false; - - foreach(l, subplan->targetlist) - { - TargetEntry *tle = (TargetEntry *) lfirst(l); - - if (!tle->resjunk) - insertTargetList = lappend(insertTargetList, tle); - else - need_projection = true; - } - - /* - * The junk-free list must produce a tuple suitable for the result - * relation. - */ - ExecCheckPlanOutput(resultRelInfo->ri_RelationDesc, - insertTargetList); - - /* We'll need a slot matching the table's format. */ - resultRelInfo->ri_newTupleSlot = - table_slot_create(resultRelInfo->ri_RelationDesc, - &mtstate->ps.state->es_tupleTable); - - /* Build ProjectionInfo if needed (it probably isn't). */ - if (need_projection) - { - TupleDesc relDesc = RelationGetDescr(resultRelInfo->ri_RelationDesc); - - /* need an expression context to do the projection */ - if (mtstate->ps.ps_ExprContext == NULL) - ExecAssignExprContext(estate, &mtstate->ps); - - resultRelInfo->ri_projectNew = - ExecBuildProjectionInfo(insertTargetList, - mtstate->ps.ps_ExprContext, - resultRelInfo->ri_newTupleSlot, - &mtstate->ps, - relDesc); - } - } - else if (operation == CMD_UPDATE) - { - List *updateColnos; - TupleDesc relDesc = RelationGetDescr(resultRelInfo->ri_RelationDesc); - - updateColnos = (List *) list_nth(node->updateColnosLists, i); - - /* - * For UPDATE, we use the old tuple to fill up missing values in - * the tuple produced by the plan to get the new tuple. We need - * two slots, both matching the table's desired format. - */ - resultRelInfo->ri_oldTupleSlot = - table_slot_create(resultRelInfo->ri_RelationDesc, - &mtstate->ps.state->es_tupleTable); - resultRelInfo->ri_newTupleSlot = - table_slot_create(resultRelInfo->ri_RelationDesc, - &mtstate->ps.state->es_tupleTable); - - /* need an expression context to do the projection */ - if (mtstate->ps.ps_ExprContext == NULL) - ExecAssignExprContext(estate, &mtstate->ps); - - resultRelInfo->ri_projectNew = - ExecBuildUpdateProjection(subplan->targetlist, - updateColnos, - relDesc, - mtstate->ps.ps_ExprContext, - resultRelInfo->ri_newTupleSlot, - &mtstate->ps); - } - - /* - * For UPDATE/DELETE, find the appropriate junk attr now, either a - * 'ctid' or 'wholerow' attribute depending on relkind. For foreign - * tables, the FDW might have created additional junk attr(s), but - * those are no concern of ours. - */ - if (operation == CMD_UPDATE || operation == CMD_DELETE) - { - char relkind; - - relkind = resultRelInfo->ri_RelationDesc->rd_rel->relkind; - if (relkind == RELKIND_RELATION || - relkind == RELKIND_MATVIEW || - relkind == RELKIND_PARTITIONED_TABLE) - { - resultRelInfo->ri_RowIdAttNo = - ExecFindJunkAttributeInTlist(subplan->targetlist, "ctid"); - if (!AttributeNumberIsValid(resultRelInfo->ri_RowIdAttNo)) - elog(ERROR, "could not find junk ctid column"); - } - else if (relkind == RELKIND_FOREIGN_TABLE) - { - /* - * When there is a row-level trigger, there should be a - * wholerow attribute. We also require it to be present in - * UPDATE, so we can get the values of unchanged columns. - */ - resultRelInfo->ri_RowIdAttNo = - ExecFindJunkAttributeInTlist(subplan->targetlist, - "wholerow"); - if (mtstate->operation == CMD_UPDATE && - !AttributeNumberIsValid(resultRelInfo->ri_RowIdAttNo)) - elog(ERROR, "could not find junk wholerow column"); - } - else - { - /* Other valid target relkinds must provide wholerow */ - resultRelInfo->ri_RowIdAttNo = - ExecFindJunkAttributeInTlist(subplan->targetlist, - "wholerow"); - if (!AttributeNumberIsValid(resultRelInfo->ri_RowIdAttNo)) - elog(ERROR, "could not find junk wholerow column"); - } - } - } - - /* - * If this is an inherited update/delete, there will be a junk attribute - * named "tableoid" present in the subplan's targetlist. It will be used - * to identify the result relation for a given tuple to be - * updated/deleted. - */ - mtstate->mt_resultOidAttno = - ExecFindJunkAttributeInTlist(subplan->targetlist, "tableoid"); - Assert(AttributeNumberIsValid(mtstate->mt_resultOidAttno) || nrels == 1); - mtstate->mt_lastResultOid = InvalidOid; /* force lookup at first tuple */ - mtstate->mt_lastResultIndex = 0; /* must be zero if no such attr */ - /* * If there are a lot of result relations, use a hash table to speed the * lookups. If there are not a lot, a simple linear search is faster. diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 8116d62e814d4..e7ae21c023c95 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -431,6 +431,8 @@ typedef struct ResultRelInfo TupleTableSlot *ri_newTupleSlot; /* Slot to hold the old tuple being updated */ TupleTableSlot *ri_oldTupleSlot; + /* Have the projection and the slots above been initialized? */ + bool ri_projectNewInfoValid; /* triggers to be fired, if any */ TriggerDesc *ri_TrigDesc; From 8ee9b662daa6d51b54d21ec274f22a218462ad2d Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 7 Apr 2021 07:42:36 +0900 Subject: [PATCH 011/671] Fix test added by commit 9de9294b0c. The buildfarm members "drongo" and "fairywren" reported that the regression test (024_archive_recovery.pl) added by commit 9de9294b0c failed. The cause of this failure is that the test calls $node->init() without "allows_streaming => 1" and which doesn't add pg_hba.conf entry for TCP/IP connection from pg_basebackup. This commit fixes the issue by specifying "allows_streaming => 1" when calling $node->init(). Author: Fujii Masao Discussion: https://postgr.es/m/3cc3909d-f779-7a74-c201-f1f7f62c7497@oss.nttdata.com --- src/test/recovery/t/024_archive_recovery.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/recovery/t/024_archive_recovery.pl b/src/test/recovery/t/024_archive_recovery.pl index c139db2ede6a0..2d8d59454ee29 100644 --- a/src/test/recovery/t/024_archive_recovery.pl +++ b/src/test/recovery/t/024_archive_recovery.pl @@ -9,7 +9,7 @@ # Initialize and start node with wal_level = replica and WAL archiving # enabled. my $node = get_new_node('orig'); -$node->init(has_archiving => 1); +$node->init(has_archiving => 1, allows_streaming => 1); my $replica_config = q[ wal_level = replica archive_mode = on From 9afffcb833d3c5e59a328a2af674fac7e7334fc1 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 7 Apr 2021 10:16:39 +0900 Subject: [PATCH 012/671] Add some information about authenticated identity via log_connections The "authenticated identity" is the string used by an authentication method to identify a particular user. In many common cases, this is the same as the PostgreSQL username, but for some third-party authentication methods, the identifier in use may be shortened or otherwise translated (e.g. through pg_ident user mappings) before the server stores it. To help administrators see who has actually interacted with the system, this commit adds the capability to store the original identity when authentication succeeds within the backend's Port, and generates a log entry when log_connections is enabled. The log entries generated look something like this (where a local user named "foouser" is connecting to the database as the database user called "admin"): LOG: connection received: host=[local] LOG: connection authenticated: identity="foouser" method=peer (/data/pg_hba.conf:88) LOG: connection authorized: user=admin database=postgres application_name=psql Port->authn_id is set according to the authentication method: bsd: the PostgreSQL username (aka the local username) cert: the client's Subject DN gss: the user principal ident: the remote username ldap: the final bind DN pam: the PostgreSQL username (aka PAM username) password (and all pw-challenge methods): the PostgreSQL username peer: the peer's pw_name radius: the PostgreSQL username (aka the RADIUS username) sspi: either the down-level (SAM-compatible) logon name, if compat_realm=1, or the User Principal Name if compat_realm=0 The trust auth method does not set an authenticated identity. Neither does clientcert=verify-full. Port->authn_id could be used for other purposes, like a superuser-only extra column in pg_stat_activity, but this is left as future work. PostgresNode::connect_{ok,fails}() have been modified to let tests check the backend log files for required or prohibited patterns, using the new log_like and log_unlike parameters. This uses a method based on a truncation of the existing server log file, like issues_sql_like(). Tests are added to the ldap, kerberos, authentication and SSL test suites. Author: Jacob Champion Reviewed-by: Stephen Frost, Magnus Hagander, Tom Lane, Michael Paquier Discussion: https://postgr.es/m/c55788dd1773c521c862e8e0dddb367df51222be.camel@vmware.com --- doc/src/sgml/config.sgml | 3 +- src/backend/libpq/auth.c | 136 ++++++++++++++++++++-- src/backend/libpq/hba.c | 24 ++++ src/include/libpq/hba.h | 1 + src/include/libpq/libpq-be.h | 13 +++ src/test/authentication/t/001_password.pl | 59 +++++++--- src/test/kerberos/t/001_auth.pl | 79 +++++++++---- src/test/ldap/t/001_auth.pl | 52 +++++++-- src/test/perl/PostgresNode.pm | 77 ++++++++++++ src/test/ssl/t/001_ssltests.pl | 36 ++++-- src/test/ssl/t/002_scram.pl | 10 +- 11 files changed, 416 insertions(+), 74 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index effc60c07b3e8..e51639d56c7c2 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -6755,7 +6755,8 @@ local0.* /var/log/postgresql Causes each attempted connection to the server to be logged, - as well as successful completion of client authentication. + as well as successful completion of both client authentication (if + necessary) and authorization. Only superusers can change this parameter at session start, and it cannot be changed at all within a session. The default is off. diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index 9dc28e19aaf0f..dee056b0d6537 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -34,8 +34,10 @@ #include "libpq/scram.h" #include "miscadmin.h" #include "port/pg_bswap.h" +#include "postmaster/postmaster.h" #include "replication/walsender.h" #include "storage/ipc.h" +#include "utils/guc.h" #include "utils/memutils.h" #include "utils/timestamp.h" @@ -47,6 +49,7 @@ static void sendAuthRequest(Port *port, AuthRequest areq, const char *extradata, int extralen); static void auth_failed(Port *port, int status, char *logdetail); static char *recv_password_packet(Port *port); +static void set_authn_id(Port *port, const char *id); /*---------------------------------------------------------------- @@ -337,6 +340,51 @@ auth_failed(Port *port, int status, char *logdetail) } +/* + * Sets the authenticated identity for the current user. The provided string + * will be copied into the TopMemoryContext. The ID will be logged if + * log_connections is enabled. + * + * Auth methods should call this routine exactly once, as soon as the user is + * successfully authenticated, even if they have reasons to know that + * authorization will fail later. + * + * The provided string will be copied into TopMemoryContext, to match the + * lifetime of the Port, so it is safe to pass a string that is managed by an + * external library. + */ +static void +set_authn_id(Port *port, const char *id) +{ + Assert(id); + + if (port->authn_id) + { + /* + * An existing authn_id should never be overwritten; that means two + * authentication providers are fighting (or one is fighting itself). + * Don't leak any authn details to the client, but don't let the + * connection continue, either. + */ + ereport(FATAL, + (errmsg("connection was re-authenticated"), + errdetail_log("previous ID: \"%s\"; new ID: \"%s\"", + port->authn_id, id))); + } + + port->authn_id = MemoryContextStrdup(TopMemoryContext, id); + + if (Log_connections) + { + ereport(LOG, + errmsg("connection authenticated: identity=\"%s\" method=%s " + "(%s:%d)", + port->authn_id, hba_authname(port), HbaFileName, + port->hba->linenumber)); + } +} + + /* * Client authentication starts here. If there is an error, this * function does not return and the backend process is terminated. @@ -757,6 +805,9 @@ CheckPasswordAuth(Port *port, char **logdetail) pfree(shadow_pass); pfree(passwd); + if (result == STATUS_OK) + set_authn_id(port, port->user_name); + return result; } @@ -816,6 +867,10 @@ CheckPWChallengeAuth(Port *port, char **logdetail) Assert(auth_result != STATUS_OK); return STATUS_ERROR; } + + if (auth_result == STATUS_OK) + set_authn_id(port, port->user_name); + return auth_result; } @@ -1174,8 +1229,13 @@ pg_GSS_checkauth(Port *port) /* * Copy the original name of the authenticated principal into our backend * memory for display later. + * + * This is also our authenticated identity. Set it now, rather than + * waiting for the usermap check below, because authentication has already + * succeeded and we want the log file to reflect that. */ port->gss->princ = MemoryContextStrdup(TopMemoryContext, gbuf.value); + set_authn_id(port, gbuf.value); /* * Split the username at the realm separator @@ -1285,6 +1345,7 @@ pg_SSPI_recvauth(Port *port) DWORD domainnamesize = sizeof(domainname); SID_NAME_USE accountnameuse; HMODULE secur32; + char *authn_id; QUERY_SECURITY_CONTEXT_TOKEN_FN _QuerySecurityContextToken; @@ -1514,6 +1575,26 @@ pg_SSPI_recvauth(Port *port) return status; } + /* + * We have all of the information necessary to construct the authenticated + * identity. Set it now, rather than waiting for check_usermap below, + * because authentication has already succeeded and we want the log file + * to reflect that. + */ + if (port->hba->compat_realm) + { + /* SAM-compatible format. */ + authn_id = psprintf("%s\\%s", domainname, accountname); + } + else + { + /* Kerberos principal format. */ + authn_id = psprintf("%s@%s", accountname, domainname); + } + + set_authn_id(port, authn_id); + pfree(authn_id); + /* * Compare realm/domain if requested. In SSPI, always compare case * insensitive. @@ -1901,8 +1982,15 @@ ident_inet(hbaPort *port) pg_freeaddrinfo_all(local_addr.addr.ss_family, la); if (ident_return) - /* Success! Check the usermap */ + { + /* + * Success! Store the identity, then check the usermap. Note that + * setting the authenticated identity is done before checking the + * usermap, because at this point authentication has succeeded. + */ + set_authn_id(port, ident_user); return check_usermap(port->hba->usermap, port->user_name, ident_user, false); + } return STATUS_ERROR; } @@ -1926,7 +2014,6 @@ auth_peer(hbaPort *port) gid_t gid; #ifndef WIN32 struct passwd *pw; - char *peer_user; int ret; #endif @@ -1958,12 +2045,14 @@ auth_peer(hbaPort *port) return STATUS_ERROR; } - /* Make a copy of static getpw*() result area. */ - peer_user = pstrdup(pw->pw_name); - - ret = check_usermap(port->hba->usermap, port->user_name, peer_user, false); + /* + * Make a copy of static getpw*() result area; this is our authenticated + * identity. Set it before calling check_usermap, because authentication + * has already succeeded and we want the log file to reflect that. + */ + set_authn_id(port, pw->pw_name); - pfree(peer_user); + ret = check_usermap(port->hba->usermap, port->user_name, port->authn_id, false); return ret; #else @@ -2220,6 +2309,9 @@ CheckPAMAuth(Port *port, const char *user, const char *password) pam_passwd = NULL; /* Unset pam_passwd */ + if (retval == PAM_SUCCESS) + set_authn_id(port, user); + return (retval == PAM_SUCCESS ? STATUS_OK : STATUS_ERROR); } #endif /* USE_PAM */ @@ -2255,6 +2347,7 @@ CheckBSDAuth(Port *port, char *user) if (!retval) return STATUS_ERROR; + set_authn_id(port, user); return STATUS_OK; } #endif /* USE_BSD_AUTH */ @@ -2761,6 +2854,9 @@ CheckLDAPAuth(Port *port) return STATUS_ERROR; } + /* Save the original bind DN as the authenticated identity. */ + set_authn_id(port, fulluser); + ldap_unbind(ldap); pfree(passwd); pfree(fulluser); @@ -2824,6 +2920,30 @@ CheckCertAuth(Port *port) return STATUS_ERROR; } + if (port->hba->auth_method == uaCert) + { + /* + * For cert auth, the client's Subject DN is always our authenticated + * identity, even if we're only using its CN for authorization. Set + * it now, rather than waiting for check_usermap() below, because + * authentication has already succeeded and we want the log file to + * reflect that. + */ + if (!port->peer_dn) + { + /* + * This should not happen as both peer_dn and peer_cn should be + * set in this context. + */ + ereport(LOG, + (errmsg("certificate authentication failed for user \"%s\": unable to retrieve subject DN", + port->user_name))); + return STATUS_ERROR; + } + + set_authn_id(port, port->peer_dn); + } + /* Just pass the certificate cn/dn to the usermap check */ status_check_usermap = check_usermap(port->hba->usermap, port->user_name, peer_username, false); if (status_check_usermap != STATUS_OK) @@ -2995,6 +3115,8 @@ CheckRADIUSAuth(Port *port) */ if (ret == STATUS_OK) { + set_authn_id(port, port->user_name); + pfree(passwd); return STATUS_OK; } diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index feb711a6ef797..b720b03e9a5bb 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -3141,3 +3141,27 @@ hba_getauthmethod(hbaPort *port) { check_hba(port); } + + +/* + * Return the name of the auth method in use ("gss", "md5", "trust", etc.). + * + * The return value is statically allocated (see the UserAuthName array) and + * should not be freed. + */ +const char * +hba_authname(hbaPort *port) +{ + UserAuth auth_method; + + Assert(port->hba); + auth_method = port->hba->auth_method; + + if (auth_method < 0 || USER_AUTH_LAST < auth_method) + { + /* Should never happen. */ + elog(FATAL, "port has out-of-bounds UserAuth: %d", auth_method); + } + + return UserAuthName[auth_method]; +} diff --git a/src/include/libpq/hba.h b/src/include/libpq/hba.h index 1ec8603da7505..63f2962139ff8 100644 --- a/src/include/libpq/hba.h +++ b/src/include/libpq/hba.h @@ -137,6 +137,7 @@ typedef struct Port hbaPort; extern bool load_hba(void); extern bool load_ident(void); +extern const char *hba_authname(hbaPort *port); extern void hba_getauthmethod(hbaPort *port); extern int check_usermap(const char *usermap_name, const char *pg_role, const char *auth_user, diff --git a/src/include/libpq/libpq-be.h b/src/include/libpq/libpq-be.h index 713c34fedd7a6..02015efe13c20 100644 --- a/src/include/libpq/libpq-be.h +++ b/src/include/libpq/libpq-be.h @@ -159,6 +159,19 @@ typedef struct Port */ HbaLine *hba; + /* + * Authenticated identity. The meaning of this identifier is dependent on + * hba->auth_method; it is the identity (if any) that the user presented + * during the authentication cycle, before they were assigned a database + * role. (It is effectively the "SYSTEM-USERNAME" of a pg_ident usermap + * -- though the exact string in use may be different, depending on pg_hba + * options.) + * + * authn_id is NULL if the user has not actually been authenticated, for + * example if the "trust" auth method is in use. + */ + const char *authn_id; + /* * TCP keepalive and user timeout settings. * diff --git a/src/test/authentication/t/001_password.pl b/src/test/authentication/t/001_password.pl index 65303ca3f5c55..150b226c0e864 100644 --- a/src/test/authentication/t/001_password.pl +++ b/src/test/authentication/t/001_password.pl @@ -17,7 +17,7 @@ } else { - plan tests => 13; + plan tests => 23; } @@ -35,15 +35,12 @@ sub reset_pg_hba return; } -# Test access for a single role, useful to wrap all tests into one. +# Test access for a single role, useful to wrap all tests into one. Extra +# named parameters are passed to connect_ok/fails as-is. sub test_role { - my $node = shift; - my $role = shift; - my $method = shift; - my $expected_res = shift; + my ($node, $role, $method, $expected_res, %params) = @_; my $status_string = 'failed'; - $status_string = 'success' if ($expected_res eq 0); my $connstr = "user=$role"; @@ -52,18 +49,19 @@ sub test_role if ($expected_res eq 0) { - $node->connect_ok($connstr, $testname); + $node->connect_ok($connstr, $testname, %params); } else { # No checks of the error message, only the status code. - $node->connect_fails($connstr, $testname); + $node->connect_fails($connstr, $testname, %params); } } # Initialize primary node my $node = get_new_node('primary'); $node->init; +$node->append_conf('postgresql.conf', "log_connections = on\n"); $node->start; # Create 3 roles with different password methods for each one. The same @@ -76,26 +74,51 @@ sub test_role ); $ENV{"PGPASSWORD"} = 'pass'; -# For "trust" method, all users should be able to connect. +# For "trust" method, all users should be able to connect. These users are not +# considered to be authenticated. reset_pg_hba($node, 'trust'); -test_role($node, 'scram_role', 'trust', 0); -test_role($node, 'md5_role', 'trust', 0); +test_role($node, 'scram_role', 'trust', 0, + log_unlike => [qr/connection authenticated:/]); +test_role($node, 'md5_role', 'trust', 0, + log_unlike => [qr/connection authenticated:/]); # For plain "password" method, all users should also be able to connect. reset_pg_hba($node, 'password'); -test_role($node, 'scram_role', 'password', 0); -test_role($node, 'md5_role', 'password', 0); +test_role($node, 'scram_role', 'password', 0, + log_like => + [qr/connection authenticated: identity="scram_role" method=password/]); +test_role($node, 'md5_role', 'password', 0, + log_like => + [qr/connection authenticated: identity="md5_role" method=password/]); # For "scram-sha-256" method, user "scram_role" should be able to connect. reset_pg_hba($node, 'scram-sha-256'); -test_role($node, 'scram_role', 'scram-sha-256', 0); -test_role($node, 'md5_role', 'scram-sha-256', 2); +test_role( + $node, + 'scram_role', + 'scram-sha-256', + 0, + log_like => [ + qr/connection authenticated: identity="scram_role" method=scram-sha-256/ + ]); +test_role($node, 'md5_role', 'scram-sha-256', 2, + log_unlike => [qr/connection authenticated:/]); + +# Test that bad passwords are rejected. +$ENV{"PGPASSWORD"} = 'badpass'; +test_role($node, 'scram_role', 'scram-sha-256', 2, + log_unlike => [qr/connection authenticated:/]); +$ENV{"PGPASSWORD"} = 'pass'; # For "md5" method, all users should be able to connect (SCRAM # authentication will be performed for the user with a SCRAM secret.) reset_pg_hba($node, 'md5'); -test_role($node, 'scram_role', 'md5', 0); -test_role($node, 'md5_role', 'md5', 0); +test_role($node, 'scram_role', 'md5', 0, + log_like => + [qr/connection authenticated: identity="scram_role" method=md5/]); +test_role($node, 'md5_role', 'md5', 0, + log_like => + [qr/connection authenticated: identity="md5_role" method=md5/]); # Tests for channel binding without SSL. # Using the password authentication method; channel binding can't work diff --git a/src/test/kerberos/t/001_auth.pl b/src/test/kerberos/t/001_auth.pl index 8db18294608a7..26c2c7077b397 100644 --- a/src/test/kerberos/t/001_auth.pl +++ b/src/test/kerberos/t/001_auth.pl @@ -20,7 +20,7 @@ if ($ENV{with_gssapi} eq 'yes') { - plan tests => 32; + plan tests => 44; } else { @@ -183,39 +183,36 @@ END sub test_access { my ($node, $role, $query, $expected_res, $gssencmode, $test_name, - $expect_log_msg) + @expect_log_msgs) = @_; # need to connect over TCP/IP for Kerberos my $connstr = $node->connstr('postgres') . " user=$role host=$host hostaddr=$hostaddr $gssencmode"; + my %params = ( + sql => $query, + ); + + if (@expect_log_msgs) + { + # Match every message literally. + my @regexes = map { qr/\Q$_\E/ } @expect_log_msgs; + + $params{log_like} = \@regexes; + } + if ($expected_res eq 0) { # The result is assumed to match "true", or "t", here. - $node->connect_ok( - $connstr, $test_name, - sql => $query, - expected_stdout => qr/^t$/); + $params{expected_stdout} = qr/^t$/; + + $node->connect_ok($connstr, $test_name, %params); } else { - $node->connect_fails($connstr, $test_name); + $node->connect_fails($connstr, $test_name, %params); } - - # Verify specified log message is logged in the log file. - if ($expect_log_msg ne '') - { - my $first_logfile = slurp_file($node->logfile); - - like($first_logfile, qr/\Q$expect_log_msg\E/, - 'found expected log file content'); - } - - # Clean up any existing contents in the node's log file so as - # future tests don't step on each other's generated contents. - truncate $node->logfile, 0; - return; } # As above, but test for an arbitrary query result. @@ -239,11 +236,19 @@ sub test_query qq{host all all $hostaddr/32 gss map=mymap}); $node->restart; -test_access($node, 'test1', 'SELECT true', 2, '', 'fails without ticket', ''); +test_access($node, 'test1', 'SELECT true', 2, '', 'fails without ticket'); run_log [ $kinit, 'test1' ], \$test1_password or BAIL_OUT($?); -test_access($node, 'test1', 'SELECT true', 2, '', 'fails without mapping', ''); +test_access( + $node, + 'test1', + 'SELECT true', + 2, + '', + 'fails without mapping', + "connection authenticated: identity=\"test1\@$realm\" method=gss", + "no match in usermap \"mymap\" for user \"test1\""); $node->append_conf('pg_ident.conf', qq{mymap /^(.*)\@$realm\$ \\1}); $node->restart; @@ -255,6 +260,7 @@ sub test_query 0, '', 'succeeds with mapping with default gssencmode and host hba', + "connection authenticated: identity=\"test1\@$realm\" method=gss", "connection authorized: user=$username database=$dbname application_name=$application GSS (authenticated=yes, encrypted=yes, principal=test1\@$realm)" ); @@ -265,6 +271,7 @@ sub test_query 0, 'gssencmode=prefer', 'succeeds with GSS-encrypted access preferred with host hba', + "connection authenticated: identity=\"test1\@$realm\" method=gss", "connection authorized: user=$username database=$dbname application_name=$application GSS (authenticated=yes, encrypted=yes, principal=test1\@$realm)" ); test_access( @@ -274,6 +281,7 @@ sub test_query 0, 'gssencmode=require', 'succeeds with GSS-encrypted access required with host hba', + "connection authenticated: identity=\"test1\@$realm\" method=gss", "connection authorized: user=$username database=$dbname application_name=$application GSS (authenticated=yes, encrypted=yes, principal=test1\@$realm)" ); @@ -310,6 +318,7 @@ sub test_query 0, 'gssencmode=prefer', 'succeeds with GSS-encrypted access preferred and hostgssenc hba', + "connection authenticated: identity=\"test1\@$realm\" method=gss", "connection authorized: user=$username database=$dbname application_name=$application GSS (authenticated=yes, encrypted=yes, principal=test1\@$realm)" ); test_access( @@ -319,10 +328,11 @@ sub test_query 0, 'gssencmode=require', 'succeeds with GSS-encrypted access required and hostgssenc hba', + "connection authenticated: identity=\"test1\@$realm\" method=gss", "connection authorized: user=$username database=$dbname application_name=$application GSS (authenticated=yes, encrypted=yes, principal=test1\@$realm)" ); test_access($node, 'test1', 'SELECT true', 2, 'gssencmode=disable', - 'fails with GSS encryption disabled and hostgssenc hba', ''); + 'fails with GSS encryption disabled and hostgssenc hba'); unlink($node->data_dir . '/pg_hba.conf'); $node->append_conf('pg_hba.conf', @@ -336,10 +346,11 @@ sub test_query 0, 'gssencmode=prefer', 'succeeds with GSS-encrypted access preferred and hostnogssenc hba, but no encryption', + "connection authenticated: identity=\"test1\@$realm\" method=gss", "connection authorized: user=$username database=$dbname application_name=$application GSS (authenticated=yes, encrypted=no, principal=test1\@$realm)" ); test_access($node, 'test1', 'SELECT true', 2, 'gssencmode=require', - 'fails with GSS-encrypted access required and hostnogssenc hba', ''); + 'fails with GSS-encrypted access required and hostnogssenc hba'); test_access( $node, 'test1', @@ -347,6 +358,7 @@ sub test_query 0, 'gssencmode=disable', 'succeeds with GSS encryption disabled and hostnogssenc hba', + "connection authenticated: identity=\"test1\@$realm\" method=gss", "connection authorized: user=$username database=$dbname application_name=$application GSS (authenticated=yes, encrypted=no, principal=test1\@$realm)" ); @@ -363,5 +375,22 @@ sub test_query 0, '', 'succeeds with include_realm=0 and defaults', + "connection authenticated: identity=\"test1\@$realm\" method=gss", "connection authorized: user=$username database=$dbname application_name=$application GSS (authenticated=yes, encrypted=yes, principal=test1\@$realm)" ); + +# Reset pg_hba.conf, and cause a usermap failure with an authentication +# that has passed. +unlink($node->data_dir . '/pg_hba.conf'); +$node->append_conf('pg_hba.conf', + qq{host all all $hostaddr/32 gss include_realm=0 krb_realm=EXAMPLE.ORG}); +$node->restart; + +test_access( + $node, + 'test1', + 'SELECT true', + 2, + '', + 'fails with wrong krb_realm, but still authenticates', + "connection authenticated: identity=\"test1\@$realm\" method=gss"); diff --git a/src/test/ldap/t/001_auth.pl b/src/test/ldap/t/001_auth.pl index ad54854a422e4..ec4721234bc1a 100644 --- a/src/test/ldap/t/001_auth.pl +++ b/src/test/ldap/t/001_auth.pl @@ -6,7 +6,7 @@ if ($ENV{with_ldap} eq 'yes') { - plan tests => 22; + plan tests => 28; } else { @@ -152,6 +152,7 @@ END my $node = get_new_node('node'); $node->init; +$node->append_conf('postgresql.conf', "log_connections = on\n"); $node->start; $node->safe_psql('postgres', 'CREATE USER test0;'); @@ -162,17 +163,17 @@ END sub test_access { - my ($node, $role, $expected_res, $test_name) = @_; + my ($node, $role, $expected_res, $test_name, %params) = @_; my $connstr = "user=$role"; if ($expected_res eq 0) { - $node->connect_ok($connstr, $test_name); + $node->connect_ok($connstr, $test_name, %params); } else { # No checks of the error message, only the status code. - $node->connect_fails($connstr, $test_name); + $node->connect_fails($connstr, $test_name, %params); } } @@ -185,12 +186,22 @@ sub test_access $node->restart; $ENV{"PGPASSWORD"} = 'wrong'; -test_access($node, 'test0', 2, - 'simple bind authentication fails if user not found in LDAP'); -test_access($node, 'test1', 2, - 'simple bind authentication fails with wrong password'); +test_access( + $node, 'test0', 2, + 'simple bind authentication fails if user not found in LDAP', + log_unlike => [qr/connection authenticated:/]); +test_access( + $node, 'test1', 2, + 'simple bind authentication fails with wrong password', + log_unlike => [qr/connection authenticated:/]); + $ENV{"PGPASSWORD"} = 'secret1'; -test_access($node, 'test1', 0, 'simple bind authentication succeeds'); +test_access( + $node, 'test1', 0, + 'simple bind authentication succeeds', + log_like => [ + qr/connection authenticated: identity="uid=test1,dc=example,dc=net" method=ldap/ + ],); note "search+bind"; @@ -206,7 +217,12 @@ sub test_access test_access($node, 'test1', 2, 'search+bind authentication fails with wrong password'); $ENV{"PGPASSWORD"} = 'secret1'; -test_access($node, 'test1', 0, 'search+bind authentication succeeds'); +test_access( + $node, 'test1', 0, + 'search+bind authentication succeeds', + log_like => [ + qr/connection authenticated: identity="uid=test1,dc=example,dc=net" method=ldap/ + ],); note "multiple servers"; @@ -250,9 +266,21 @@ sub test_access $node->restart; $ENV{"PGPASSWORD"} = 'secret1'; -test_access($node, 'test1', 0, 'search filter finds by uid'); +test_access( + $node, 'test1', 0, + 'search filter finds by uid', + log_like => [ + qr/connection authenticated: identity="uid=test1,dc=example,dc=net" method=ldap/ + ],); $ENV{"PGPASSWORD"} = 'secret2'; -test_access($node, 'test2@example.net', 0, 'search filter finds by mail'); +test_access( + $node, + 'test2@example.net', + 0, + 'search filter finds by mail', + log_like => [ + qr/connection authenticated: identity="uid=test2,dc=example,dc=net" method=ldap/ + ],); note "search filters in LDAP URLs"; diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index ec202f1b6e5f5..598906ad64999 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -1876,6 +1876,18 @@ instead of the default. If this regular expression is set, matches it with the output generated. +=item log_like => [ qr/required message/ ] + +If given, it must be an array reference containing a list of regular +expressions that must match against the server log, using +C. + +=item log_unlike => [ qr/prohibited message/ ] + +If given, it must be an array reference containing a list of regular +expressions that must NOT match against the server log. They will be +passed to C. + =back =cut @@ -1895,6 +1907,22 @@ sub connect_ok $sql = "SELECT \$\$connected with $connstr\$\$"; } + my (@log_like, @log_unlike); + if (defined($params{log_like})) + { + @log_like = @{ $params{log_like} }; + } + if (defined($params{log_unlike})) + { + @log_unlike = @{ $params{log_unlike} }; + } + + if (@log_like or @log_unlike) + { + # Don't let previous log entries match for this connection. + truncate $self->logfile, 0; + } + # Never prompt for a password, any callers of this routine should # have set up things properly, and this should not block. my ($ret, $stdout, $stderr) = $self->psql( @@ -1910,6 +1938,19 @@ sub connect_ok { like($stdout, $params{expected_stdout}, "$test_name: matches"); } + if (@log_like or @log_unlike) + { + my $log_contents = TestLib::slurp_file($self->logfile); + + while (my $regex = shift @log_like) + { + like($log_contents, $regex, "$test_name: log matches"); + } + while (my $regex = shift @log_unlike) + { + unlike($log_contents, $regex, "$test_name: log does not match"); + } + } } =pod @@ -1925,6 +1966,12 @@ to fail. If this regular expression is set, matches it with the output generated. +=item log_like => [ qr/required message/ ] + +=item log_unlike => [ qr/prohibited message/ ] + +See C, above. + =back =cut @@ -1934,6 +1981,22 @@ sub connect_fails local $Test::Builder::Level = $Test::Builder::Level + 1; my ($self, $connstr, $test_name, %params) = @_; + my (@log_like, @log_unlike); + if (defined($params{log_like})) + { + @log_like = @{ $params{log_like} }; + } + if (defined($params{log_unlike})) + { + @log_unlike = @{ $params{log_unlike} }; + } + + if (@log_like or @log_unlike) + { + # Don't let previous log entries match for this connection. + truncate $self->logfile, 0; + } + # Never prompt for a password, any callers of this routine should # have set up things properly, and this should not block. my ($ret, $stdout, $stderr) = $self->psql( @@ -1948,6 +2011,20 @@ sub connect_fails { like($stderr, $params{expected_stderr}, "$test_name: matches"); } + + if (@log_like or @log_unlike) + { + my $log_contents = TestLib::slurp_file($self->logfile); + + while (my $regex = shift @log_like) + { + like($log_contents, $regex, "$test_name: log matches"); + } + while (my $regex = shift @log_unlike) + { + unlike($log_contents, $regex, "$test_name: log does not match"); + } + } } =pod diff --git a/src/test/ssl/t/001_ssltests.pl b/src/test/ssl/t/001_ssltests.pl index 0decbe71774f3..cc797a5c98fbd 100644 --- a/src/test/ssl/t/001_ssltests.pl +++ b/src/test/ssl/t/001_ssltests.pl @@ -17,7 +17,7 @@ } else { - plan tests => 103; + plan tests => 110; } #### Some configuration @@ -431,7 +431,10 @@ $node->connect_ok( "$dn_connstr user=ssltestuser sslcert=ssl/client-dn.crt sslkey=ssl/client-dn_tmp.key", - "certificate authorization succeeds with DN mapping"); + "certificate authorization succeeds with DN mapping", + log_like => [ + qr/connection authenticated: identity="CN=ssltestuser-dn,OU=Testing,OU=Engineering,O=PGDG" method=cert/ + ],); # same thing but with a regex $dn_connstr = "$common_connstr dbname=certdb_dn_re"; @@ -445,7 +448,11 @@ $node->connect_ok( "$dn_connstr user=ssltestuser sslcert=ssl/client-dn.crt sslkey=ssl/client-dn_tmp.key", - "certificate authorization succeeds with CN mapping"); + "certificate authorization succeeds with CN mapping", + # the full DN should still be used as the authenticated identity + log_like => [ + qr/connection authenticated: identity="CN=ssltestuser-dn,OU=Testing,OU=Engineering,O=PGDG" method=cert/ + ],); @@ -511,13 +518,18 @@ "$common_connstr user=anotheruser sslcert=ssl/client.crt sslkey=ssl/client_tmp.key", "certificate authorization fails with client cert belonging to another user", expected_stderr => - qr/certificate authentication failed for user "anotheruser"/); + qr/certificate authentication failed for user "anotheruser"/, + # certificate authentication should be logged even on failure + log_like => + [qr/connection authenticated: identity="CN=ssltestuser" method=cert/],); # revoked client cert $node->connect_fails( "$common_connstr user=ssltestuser sslcert=ssl/client-revoked.crt sslkey=ssl/client-revoked_tmp.key", "certificate authorization fails with revoked client cert", - expected_stderr => qr/SSL error: sslv3 alert certificate revoked/); + expected_stderr => qr/SSL error: sslv3 alert certificate revoked/, + # revoked certificates should not authenticate the user + log_unlike => [qr/connection authenticated:/],); # Check that connecting with auth-option verify-full in pg_hba: # works, iff username matches Common Name @@ -527,21 +539,25 @@ $node->connect_ok( "$common_connstr user=ssltestuser sslcert=ssl/client.crt sslkey=ssl/client_tmp.key", - "auth_option clientcert=verify-full succeeds with matching username and Common Name" -); + "auth_option clientcert=verify-full succeeds with matching username and Common Name", + # verify-full does not provide authentication + log_unlike => [qr/connection authenticated:/],); $node->connect_fails( "$common_connstr user=anotheruser sslcert=ssl/client.crt sslkey=ssl/client_tmp.key", "auth_option clientcert=verify-full fails with mismatching username and Common Name", expected_stderr => - qr/FATAL: .* "trust" authentication failed for user "anotheruser"/,); + qr/FATAL: .* "trust" authentication failed for user "anotheruser"/, + # verify-full does not provide authentication + log_unlike => [qr/connection authenticated:/],); # Check that connecting with auth-optionverify-ca in pg_hba : # works, when username doesn't match Common Name $node->connect_ok( "$common_connstr user=yetanotheruser sslcert=ssl/client.crt sslkey=ssl/client_tmp.key", - "auth_option clientcert=verify-ca succeeds with mismatching username and Common Name" -); + "auth_option clientcert=verify-ca succeeds with mismatching username and Common Name", + # verify-full does not provide authentication + log_unlike => [qr/connection authenticated:/],); # intermediate client_ca.crt is provided by client, and isn't in server's ssl_ca_file switch_server_cert($node, 'server-cn-only', 'root_ca'); diff --git a/src/test/ssl/t/002_scram.pl b/src/test/ssl/t/002_scram.pl index 583b62b3a1845..3cb22ffced1ef 100644 --- a/src/test/ssl/t/002_scram.pl +++ b/src/test/ssl/t/002_scram.pl @@ -27,7 +27,7 @@ my $supports_tls_server_end_point = check_pg_config("#define HAVE_X509_GET_SIGNATURE_NID 1"); -my $number_of_tests = $supports_tls_server_end_point ? 9 : 10; +my $number_of_tests = $supports_tls_server_end_point ? 11 : 12; # Allocation of base connection string shared among multiple tests. my $common_connstr; @@ -102,6 +102,14 @@ qr/channel binding required, but server authenticated client without channel binding/ ); +# Certificate verification at the connection level should still work fine. +$node->connect_ok( + "sslcert=ssl/client.crt sslkey=$client_tmp_key sslrootcert=invalid hostaddr=$SERVERHOSTADDR dbname=verifydb user=ssltestuser channel_binding=require", + "SCRAM with clientcert=verify-full and channel_binding=require", + log_like => [ + qr/connection authenticated: identity="ssltestuser" method=scram-sha-256/ + ]); + # clean up unlink($client_tmp_key); From 4c0239cb7a7775e3183cb575e62703d71bf3302d Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 7 Apr 2021 14:35:26 +0900 Subject: [PATCH 013/671] Remove redundant memset(0) calls for page init of some index AMs Bloom, GIN, GiST and SP-GiST rely on PageInit() to initialize the contents of a page, and this routine fills entirely a page with zeros for a size of BLCKSZ, including the special space. Those index AMs have been using an extra memset() call to fill with zeros the special page space, or even the whole page, which is not necessary as PageInit() already does this work, so let's remove them. GiST was not doing this extra call, but has commented out a system call that did so since 6236991. While on it, remove one MAXALIGN() for SP-GiST as PageInit() takes care of that. This makes the whole page initialization logic more consistent across all index AMs. Author: Bharath Rupireddy Reviewed-by: Vignesh C, Mahendra Singh Thalor Discussion: https://postgr.es/m/CALj2ACViOo2qyaPT7krWm4LRyRTw9kOXt+g6PfNmYuGA=YHj9A@mail.gmail.com --- contrib/bloom/blinsert.c | 1 - contrib/bloom/blutils.c | 1 - src/backend/access/gin/ginutil.c | 1 - src/backend/access/gist/gistutil.c | 2 -- src/backend/access/spgist/spgutils.c | 3 +-- 5 files changed, 1 insertion(+), 7 deletions(-) diff --git a/contrib/bloom/blinsert.c b/contrib/bloom/blinsert.c index d37ceef753ab0..c34a640d1c442 100644 --- a/contrib/bloom/blinsert.c +++ b/contrib/bloom/blinsert.c @@ -63,7 +63,6 @@ flushCachedPage(Relation index, BloomBuildState *buildstate) static void initCachedPage(BloomBuildState *buildstate) { - memset(buildstate->data.data, 0, BLCKSZ); BloomInitPage(buildstate->data.data, 0); buildstate->count = 0; } diff --git a/contrib/bloom/blutils.c b/contrib/bloom/blutils.c index 1e505b1da5424..754de008d43f4 100644 --- a/contrib/bloom/blutils.c +++ b/contrib/bloom/blutils.c @@ -411,7 +411,6 @@ BloomInitPage(Page page, uint16 flags) PageInit(page, BLCKSZ, sizeof(BloomPageOpaqueData)); opaque = BloomPageGetOpaque(page); - memset(opaque, 0, sizeof(BloomPageOpaqueData)); opaque->flags = flags; opaque->bloom_page_id = BLOOM_PAGE_ID; } diff --git a/src/backend/access/gin/ginutil.c b/src/backend/access/gin/ginutil.c index 6b9b04cf429e3..cdd626ff0a444 100644 --- a/src/backend/access/gin/ginutil.c +++ b/src/backend/access/gin/ginutil.c @@ -348,7 +348,6 @@ GinInitPage(Page page, uint32 f, Size pageSize) PageInit(page, pageSize, sizeof(GinPageOpaqueData)); opaque = GinPageGetOpaque(page); - memset(opaque, 0, sizeof(GinPageOpaqueData)); opaque->flags = f; opaque->rightlink = InvalidBlockNumber; } diff --git a/src/backend/access/gist/gistutil.c b/src/backend/access/gist/gistutil.c index 1ff1bf816f1b4..8dcd53c457799 100644 --- a/src/backend/access/gist/gistutil.c +++ b/src/backend/access/gist/gistutil.c @@ -761,8 +761,6 @@ gistinitpage(Page page, uint32 f) PageInit(page, pageSize, sizeof(GISTPageOpaqueData)); opaque = GistPageGetOpaque(page); - /* page was already zeroed by PageInit, so this is not needed: */ - /* memset(&(opaque->nsn), 0, sizeof(GistNSN)); */ opaque->rightlink = InvalidBlockNumber; opaque->flags = f; opaque->gist_page_id = GIST_PAGE_ID; diff --git a/src/backend/access/spgist/spgutils.c b/src/backend/access/spgist/spgutils.c index 72cbde7e0b6c5..8d99c9b762622 100644 --- a/src/backend/access/spgist/spgutils.c +++ b/src/backend/access/spgist/spgutils.c @@ -677,9 +677,8 @@ SpGistInitPage(Page page, uint16 f) { SpGistPageOpaque opaque; - PageInit(page, BLCKSZ, MAXALIGN(sizeof(SpGistPageOpaqueData))); + PageInit(page, BLCKSZ, sizeof(SpGistPageOpaqueData)); opaque = SpGistPageGetOpaque(page); - memset(opaque, 0, sizeof(SpGistPageOpaqueData)); opaque->flags = f; opaque->spgist_page_id = SPGIST_PAGE_ID; } From 0b5e8245283eef67e88fb5380836cdc2c743d848 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 7 Apr 2021 07:37:30 +0200 Subject: [PATCH 014/671] Message improvement The previous wording contained a superfluous comma. Adjust phrasing for grammatical correctness and clarity. --- contrib/test_decoding/expected/slot.out | 2 +- src/backend/replication/logical/logicalfuncs.c | 2 +- src/backend/replication/slotfuncs.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contrib/test_decoding/expected/slot.out b/contrib/test_decoding/expected/slot.out index ea72bf9f1573c..75b4b5cc62576 100644 --- a/contrib/test_decoding/expected/slot.out +++ b/contrib/test_decoding/expected/slot.out @@ -144,7 +144,7 @@ SELECT pg_replication_slot_advance('regression_slot3', '0/0'); -- invalid LSN ERROR: invalid target WAL LSN SELECT pg_replication_slot_advance('regression_slot3', '0/1'); -- error ERROR: replication slot "regression_slot3" cannot be advanced -DETAIL: This slot has never previously reserved WAL, or has been invalidated. +DETAIL: This slot has never previously reserved WAL, or it has been invalidated. SELECT pg_drop_replication_slot('regression_slot3'); pg_drop_replication_slot -------------------------- diff --git a/src/backend/replication/logical/logicalfuncs.c b/src/backend/replication/logical/logicalfuncs.c index f7e055874e305..01d354829b936 100644 --- a/src/backend/replication/logical/logicalfuncs.c +++ b/src/backend/replication/logical/logicalfuncs.c @@ -250,7 +250,7 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("can no longer get changes from replication slot \"%s\"", NameStr(*name)), - errdetail("This slot has never previously reserved WAL, or has been invalidated."))); + errdetail("This slot has never previously reserved WAL, or it has been invalidated."))); MemoryContextSwitchTo(oldcontext); diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c index 9817b44113663..d9d36879ed785 100644 --- a/src/backend/replication/slotfuncs.c +++ b/src/backend/replication/slotfuncs.c @@ -647,7 +647,7 @@ pg_replication_slot_advance(PG_FUNCTION_ARGS) (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("replication slot \"%s\" cannot be advanced", NameStr(*slotname)), - errdetail("This slot has never previously reserved WAL, or has been invalidated."))); + errdetail("This slot has never previously reserved WAL, or it has been invalidated."))); /* * Check if the slot is not moving backwards. Physical slots rely simply From dd13ad9d39a1ba41cf329b6fe408b49be57c7b88 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 7 Apr 2021 07:49:27 +0200 Subject: [PATCH 015/671] Fix use of cursor sensitivity terminology Documentation and comments in code and tests have been using the terms sensitive/insensitive cursor incorrectly relative to the SQL standard. (Cursor sensitivity is only relevant for changes made in the same transaction as the cursor, not for concurrent changes in other sessions.) Moreover, some of the behavior of PostgreSQL is incorrect according to the SQL standard, confusing the issue further. (WHERE CURRENT OF changes are not visible in insensitive cursors, but they should be.) This change corrects the terminology and removes the claim that sensitive cursors are supported. It also adds a test case that checks the insensitive behavior in a "correct" way, using a change command not using WHERE CURRENT OF. Finally, it adds the ASENSITIVE cursor option to select the default asensitive behavior, per SQL standard. There are no changes to cursor behavior in this patch. Discussion: https://www.postgresql.org/message-id/flat/96ee8b30-9889-9e1b-b053-90e10c050e85%40enterprisedb.com --- doc/src/sgml/ecpg.sgml | 4 +-- doc/src/sgml/ref/declare.sgml | 49 ++++++++++++++++----------- src/backend/catalog/sql_features.txt | 2 +- src/backend/parser/analyze.c | 19 +++++++---- src/backend/parser/gram.y | 5 ++- src/bin/psql/tab-complete.c | 2 +- src/include/nodes/parsenodes.h | 3 +- src/include/parser/kwlist.h | 1 + src/test/regress/expected/portals.out | 37 +++++++++++++++++++- src/test/regress/sql/portals.sql | 17 +++++++++- 10 files changed, 105 insertions(+), 34 deletions(-) diff --git a/doc/src/sgml/ecpg.sgml b/doc/src/sgml/ecpg.sgml index e2e757668a7c3..56f5d9b5db1f9 100644 --- a/doc/src/sgml/ecpg.sgml +++ b/doc/src/sgml/ecpg.sgml @@ -6792,8 +6792,8 @@ EXEC SQL DEALLOCATE DESCRIPTOR mydesc; -DECLARE cursor_name [ BINARY ] [ INSENSITIVE ] [ [ NO ] SCROLL ] CURSOR [ { WITH | WITHOUT } HOLD ] FOR prepared_name -DECLARE cursor_name [ BINARY ] [ INSENSITIVE ] [ [ NO ] SCROLL ] CURSOR [ { WITH | WITHOUT } HOLD ] FOR query +DECLARE cursor_name [ BINARY ] [ ASENSITIVE | INSENSITIVE ] [ [ NO ] SCROLL ] CURSOR [ { WITH | WITHOUT } HOLD ] FOR prepared_name +DECLARE cursor_name [ BINARY ] [ ASENSITIVE | INSENSITIVE ] [ [ NO ] SCROLL ] CURSOR [ { WITH | WITHOUT } HOLD ] FOR query diff --git a/doc/src/sgml/ref/declare.sgml b/doc/src/sgml/ref/declare.sgml index 2152134635e46..8a2b8cc8929c5 100644 --- a/doc/src/sgml/ref/declare.sgml +++ b/doc/src/sgml/ref/declare.sgml @@ -26,7 +26,7 @@ PostgreSQL documentation -DECLARE name [ BINARY ] [ INSENSITIVE ] [ [ NO ] SCROLL ] +DECLARE name [ BINARY ] [ ASENSITIVE | INSENSITIVE ] [ [ NO ] SCROLL ] CURSOR [ { WITH | WITHOUT } HOLD ] FOR query @@ -75,14 +75,25 @@ DECLARE name [ BINARY ] [ INSENSITI + ASENSITIVE INSENSITIVE - Indicates that data retrieved from the cursor should be - unaffected by updates to the table(s) underlying the cursor that occur - after the cursor is created. In PostgreSQL, - this is the default behavior; so this key word has no - effect and is only accepted for compatibility with the SQL standard. + Cursor sensitivity determines whether changes to the data underlying the + cursor, done in the same transaction, after the cursor has been + declared, are visible in the cursor. INSENSITIVE + means they are not visible, ASENSITIVE means the + behavior is implementation-dependent. A third behavior, + SENSITIVE, meaning that such changes are visible in + the cursor, is not available in PostgreSQL. + In PostgreSQL, all cursors are insensitive; + so these key words have no effect and are only accepted for + compatibility with the SQL standard. + + + + Specifying INSENSITIVE together with FOR + UPDATE or FOR SHARE is an error. @@ -133,7 +144,7 @@ DECLARE name [ BINARY ] [ INSENSITI - The key words BINARY, + The key words ASENSITIVE, BINARY, INSENSITIVE, and SCROLL can appear in any order. @@ -246,10 +257,7 @@ DECLARE name [ BINARY ] [ INSENSITI fetched, in the same way as for a regular SELECT command with these options. - In addition, the returned rows will be the most up-to-date versions; - therefore these options provide the equivalent of what the SQL standard - calls a sensitive cursor. (Specifying INSENSITIVE - together with FOR UPDATE or FOR SHARE is an error.) + In addition, the returned rows will be the most up-to-date versions. @@ -278,7 +286,7 @@ DECLARE name [ BINARY ] [ INSENSITI The main reason not to use FOR UPDATE with WHERE CURRENT OF is if you need the cursor to be scrollable, or to be - insensitive to the subsequent updates (that is, continue to show the old + isolated from concurrent updates (that is, continue to show the old data). If this is a requirement, pay close heed to the caveats shown above. @@ -318,20 +326,21 @@ DECLARE liahona CURSOR FOR SELECT * FROM films; Compatibility - - The SQL standard says that it is implementation-dependent whether cursors - are sensitive to concurrent updates of the underlying data by default. In - PostgreSQL, cursors are insensitive by default, - and can be made sensitive by specifying FOR UPDATE. Other - products may work differently. - - The SQL standard allows cursors only in embedded SQL and in modules. PostgreSQL permits cursors to be used interactively. + + According to the SQL standard, changes made to insensitive cursors by + UPDATE ... WHERE CURRENT OF and DELETE + ... WHERE CURRENT OF statements are visibible in that same + cursor. PostgreSQL treats these statements like + all other data changing statements in that they are not visible in + insensitive cursors. + + Binary cursors are a PostgreSQL extension. diff --git a/src/backend/catalog/sql_features.txt b/src/backend/catalog/sql_features.txt index 657e6c734b381..9f424216e26cf 100644 --- a/src/backend/catalog/sql_features.txt +++ b/src/backend/catalog/sql_features.txt @@ -452,7 +452,7 @@ T211 Basic trigger capability 07 TRIGGER privilege YES T211 Basic trigger capability 08 Multiple triggers for the same event are executed in the order in which they were created in the catalog NO intentionally omitted T212 Enhanced trigger capability YES T213 INSTEAD OF triggers YES -T231 Sensitive cursors YES +T231 Sensitive cursors NO T241 START TRANSACTION statement YES T251 SET TRANSACTION statement: LOCAL option NO T261 Chained transactions YES diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 5de1307570e59..bce7a27de00e5 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -2681,14 +2681,21 @@ transformDeclareCursorStmt(ParseState *pstate, DeclareCursorStmt *stmt) Query *result; Query *query; - /* - * Don't allow both SCROLL and NO SCROLL to be specified - */ if ((stmt->options & CURSOR_OPT_SCROLL) && (stmt->options & CURSOR_OPT_NO_SCROLL)) ereport(ERROR, (errcode(ERRCODE_INVALID_CURSOR_DEFINITION), - errmsg("cannot specify both SCROLL and NO SCROLL"))); + /* translator: %s is a SQL keyword */ + errmsg("cannot specify both %s and %s", + "SCROLL", "NO SCROLL"))); + + if ((stmt->options & CURSOR_OPT_ASENSITIVE) && + (stmt->options & CURSOR_OPT_INSENSITIVE)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_CURSOR_DEFINITION), + /* translator: %s is a SQL keyword */ + errmsg("cannot specify both %s and %s", + "ASENSITIVE", "INSENSITIVE"))); /* Transform contained query, not allowing SELECT INTO */ query = transformStmt(pstate, stmt->query); @@ -2734,10 +2741,10 @@ transformDeclareCursorStmt(ParseState *pstate, DeclareCursorStmt *stmt) /* FOR UPDATE and INSENSITIVE are not compatible */ if (query->rowMarks != NIL && (stmt->options & CURSOR_OPT_INSENSITIVE)) ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + (errcode(ERRCODE_INVALID_CURSOR_DEFINITION), /*------ translator: %s is a SQL row locking clause such as FOR UPDATE */ - errmsg("DECLARE INSENSITIVE CURSOR ... %s is not supported", + errmsg("DECLARE INSENSITIVE CURSOR ... %s is not valid", LCS_asString(((RowMarkClause *) linitial(query->rowMarks))->strength)), errdetail("Insensitive cursors must be READ ONLY."))); diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 38c36a49360ef..517bf72378401 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -637,7 +637,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); /* ordinary key words in alphabetical order */ %token ABORT_P ABSOLUTE_P ACCESS ACTION ADD_P ADMIN AFTER AGGREGATE ALL ALSO ALTER ALWAYS ANALYSE ANALYZE AND ANY ARRAY AS ASC - ASSERTION ASSIGNMENT ASYMMETRIC AT ATTACH ATTRIBUTE AUTHORIZATION + ASENSITIVE ASSERTION ASSIGNMENT ASYMMETRIC AT ATTACH ATTRIBUTE AUTHORIZATION BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT BOOLEAN_P BOTH BREADTH BY @@ -11217,6 +11217,7 @@ cursor_options: /*EMPTY*/ { $$ = 0; } | cursor_options NO SCROLL { $$ = $1 | CURSOR_OPT_NO_SCROLL; } | cursor_options SCROLL { $$ = $1 | CURSOR_OPT_SCROLL; } | cursor_options BINARY { $$ = $1 | CURSOR_OPT_BINARY; } + | cursor_options ASENSITIVE { $$ = $1 | CURSOR_OPT_ASENSITIVE; } | cursor_options INSENSITIVE { $$ = $1 | CURSOR_OPT_INSENSITIVE; } ; @@ -15424,6 +15425,7 @@ unreserved_keyword: | ALSO | ALTER | ALWAYS + | ASENSITIVE | ASSERTION | ASSIGNMENT | AT @@ -15931,6 +15933,7 @@ bare_label_keyword: | AND | ANY | ASC + | ASENSITIVE | ASSERTION | ASSIGNMENT | ASYMMETRIC diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 891997ca36975..d79d7b8145b7e 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -3052,7 +3052,7 @@ psql_completion(const char *text, int start, int end) * SCROLL, and CURSOR. */ else if (Matches("DECLARE", MatchAny)) - COMPLETE_WITH("BINARY", "INSENSITIVE", "SCROLL", "NO SCROLL", + COMPLETE_WITH("BINARY", "ASENSITIVE", "INSENSITIVE", "SCROLL", "NO SCROLL", "CURSOR"); /* diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 807fbaceaac55..acc093d6e0f69 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -2774,7 +2774,8 @@ typedef struct SecLabelStmt #define CURSOR_OPT_SCROLL 0x0002 /* SCROLL explicitly given */ #define CURSOR_OPT_NO_SCROLL 0x0004 /* NO SCROLL explicitly given */ #define CURSOR_OPT_INSENSITIVE 0x0008 /* INSENSITIVE */ -#define CURSOR_OPT_HOLD 0x0010 /* WITH HOLD */ +#define CURSOR_OPT_ASENSITIVE 0x0010 /* ASENSITIVE */ +#define CURSOR_OPT_HOLD 0x0020 /* WITH HOLD */ /* these planner-control flags do not correspond to any SQL grammar: */ #define CURSOR_OPT_FAST_PLAN 0x0100 /* prefer fast-start plan */ #define CURSOR_OPT_GENERIC_PLAN 0x0200 /* force use of generic plan */ diff --git a/src/include/parser/kwlist.h b/src/include/parser/kwlist.h index 4bbe53e852293..d3ecd72e72ed1 100644 --- a/src/include/parser/kwlist.h +++ b/src/include/parser/kwlist.h @@ -44,6 +44,7 @@ PG_KEYWORD("any", ANY, RESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("array", ARRAY, RESERVED_KEYWORD, AS_LABEL) PG_KEYWORD("as", AS, RESERVED_KEYWORD, AS_LABEL) PG_KEYWORD("asc", ASC, RESERVED_KEYWORD, BARE_LABEL) +PG_KEYWORD("asensitive", ASENSITIVE, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("assertion", ASSERTION, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("assignment", ASSIGNMENT, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("asymmetric", ASYMMETRIC, RESERVED_KEYWORD, BARE_LABEL) diff --git a/src/test/regress/expected/portals.out b/src/test/regress/expected/portals.out index dc0d2ef7dd81f..42dc637fd4b72 100644 --- a/src/test/regress/expected/portals.out +++ b/src/test/regress/expected/portals.out @@ -1094,7 +1094,7 @@ SELECT * FROM uctest; 8 | one (1 row) ---- sensitive cursors can't currently scroll back, so this is an error: +--- FOR UPDATE cursors can't currently scroll back, so this is an error: FETCH RELATIVE 0 FROM c1; ERROR: cursor can only scan forward HINT: Declare it with SCROLL option to enable backward scan. @@ -1106,6 +1106,41 @@ SELECT * FROM uctest; 8 | one (2 rows) +-- Check insensitive cursor with INSERT +-- (The above tests don't test the SQL notion of an insensitive cursor +-- correctly, because per SQL standard, changes from WHERE CURRENT OF +-- commands should be visible in the cursor. So here we make the +-- changes with a command that is independent of the cursor.) +BEGIN; +DECLARE c1 INSENSITIVE CURSOR FOR SELECT * FROM uctest; +INSERT INTO uctest VALUES (10, 'ten'); +FETCH NEXT FROM c1; + f1 | f2 +----+------- + 3 | three +(1 row) + +FETCH NEXT FROM c1; + f1 | f2 +----+----- + 8 | one +(1 row) + +FETCH NEXT FROM c1; -- insert not visible + f1 | f2 +----+---- +(0 rows) + +COMMIT; +SELECT * FROM uctest; + f1 | f2 +----+------- + 3 | three + 8 | one + 10 | ten +(3 rows) + +DELETE FROM uctest WHERE f1 = 10; -- restore test table state -- Check inheritance cases CREATE TEMP TABLE ucchild () inherits (uctest); INSERT INTO ucchild values(100, 'hundred'); diff --git a/src/test/regress/sql/portals.sql b/src/test/regress/sql/portals.sql index 52560ac027516..bf1dff884d91c 100644 --- a/src/test/regress/sql/portals.sql +++ b/src/test/regress/sql/portals.sql @@ -382,11 +382,26 @@ DELETE FROM uctest WHERE CURRENT OF c1; -- no-op SELECT * FROM uctest; UPDATE uctest SET f1 = f1 + 10 WHERE CURRENT OF c1; -- no-op SELECT * FROM uctest; ---- sensitive cursors can't currently scroll back, so this is an error: +--- FOR UPDATE cursors can't currently scroll back, so this is an error: FETCH RELATIVE 0 FROM c1; ROLLBACK; SELECT * FROM uctest; +-- Check insensitive cursor with INSERT +-- (The above tests don't test the SQL notion of an insensitive cursor +-- correctly, because per SQL standard, changes from WHERE CURRENT OF +-- commands should be visible in the cursor. So here we make the +-- changes with a command that is independent of the cursor.) +BEGIN; +DECLARE c1 INSENSITIVE CURSOR FOR SELECT * FROM uctest; +INSERT INTO uctest VALUES (10, 'ten'); +FETCH NEXT FROM c1; +FETCH NEXT FROM c1; +FETCH NEXT FROM c1; -- insert not visible +COMMIT; +SELECT * FROM uctest; +DELETE FROM uctest WHERE f1 = 10; -- restore test table state + -- Check inheritance cases CREATE TEMP TABLE ucchild () inherits (uctest); INSERT INTO ucchild values(100, 'hundred'); From 9f984ba6d23dc6eecebf479ab1d3f2e550a4e9be Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Wed, 7 Apr 2021 13:22:05 +0300 Subject: [PATCH 016/671] Add sortsupport for gist_btree opclasses, for faster index builds. Commit 16fa9b2b30 introduced a faster way to build GiST indexes, by sorting all the data. This commit adds the sortsupport functions needed to make use of that feature for btree_gist. Author: Andrey Borodin Discussion: https://www.postgresql.org/message-id/2F3F7265-0D22-44DB-AD71-8554C743D943@yandex-team.ru --- contrib/btree_gist/Makefile | 2 +- contrib/btree_gist/btree_bit.c | 25 +++ contrib/btree_gist/btree_bytea.c | 26 ++- contrib/btree_gist/btree_cash.c | 80 +++++++++ contrib/btree_gist/btree_date.c | 27 +++ contrib/btree_gist/btree_enum.c | 70 ++++++++ contrib/btree_gist/btree_float4.c | 71 ++++++++ contrib/btree_gist/btree_float8.c | 77 +++++++++ contrib/btree_gist/btree_gist--1.6--1.7.sql | 182 ++++++++++++++++++++ contrib/btree_gist/btree_gist.control | 2 +- contrib/btree_gist/btree_gist.h | 1 + contrib/btree_gist/btree_inet.c | 77 +++++++++ contrib/btree_gist/btree_int2.c | 70 ++++++++ contrib/btree_gist/btree_int4.c | 70 ++++++++ contrib/btree_gist/btree_int8.c | 80 +++++++++ contrib/btree_gist/btree_interval.c | 27 +++ contrib/btree_gist/btree_macaddr.c | 78 +++++++++ contrib/btree_gist/btree_macaddr8.c | 78 +++++++++ contrib/btree_gist/btree_numeric.c | 29 ++++ contrib/btree_gist/btree_oid.c | 70 ++++++++ contrib/btree_gist/btree_text.c | 25 +++ contrib/btree_gist/btree_time.c | 27 +++ contrib/btree_gist/btree_ts.c | 27 +++ contrib/btree_gist/btree_uuid.c | 25 +++ contrib/btree_gist/expected/bit.out | 7 + contrib/btree_gist/expected/bytea.out | 7 + contrib/btree_gist/expected/cash.out | 7 + contrib/btree_gist/expected/char.out | 7 + contrib/btree_gist/expected/cidr.out | 7 + contrib/btree_gist/expected/date.out | 7 + contrib/btree_gist/expected/enum.out | 7 + contrib/btree_gist/expected/float4.out | 7 + contrib/btree_gist/expected/float8.out | 7 + contrib/btree_gist/expected/inet.out | 7 + contrib/btree_gist/expected/int2.out | 7 + contrib/btree_gist/expected/int4.out | 7 + contrib/btree_gist/expected/int8.out | 7 + contrib/btree_gist/expected/interval.out | 7 + contrib/btree_gist/expected/macaddr.out | 7 + contrib/btree_gist/expected/macaddr8.out | 7 + contrib/btree_gist/expected/numeric.out | 7 + contrib/btree_gist/expected/oid.out | 7 + contrib/btree_gist/expected/text.out | 7 + contrib/btree_gist/expected/time.out | 7 + contrib/btree_gist/expected/timestamp.out | 7 + contrib/btree_gist/expected/timestamptz.out | 7 + contrib/btree_gist/expected/timetz.out | 7 + contrib/btree_gist/expected/uuid.out | 7 + contrib/btree_gist/expected/varbit.out | 7 + contrib/btree_gist/expected/varchar.out | 7 + contrib/btree_gist/sql/bit.sql | 4 + contrib/btree_gist/sql/bytea.sql | 4 + contrib/btree_gist/sql/cash.sql | 4 + contrib/btree_gist/sql/char.sql | 4 + contrib/btree_gist/sql/cidr.sql | 4 + contrib/btree_gist/sql/date.sql | 4 + contrib/btree_gist/sql/enum.sql | 4 + contrib/btree_gist/sql/float4.sql | 4 + contrib/btree_gist/sql/float8.sql | 4 + contrib/btree_gist/sql/inet.sql | 4 + contrib/btree_gist/sql/int2.sql | 4 + contrib/btree_gist/sql/int4.sql | 4 + contrib/btree_gist/sql/int8.sql | 4 + contrib/btree_gist/sql/interval.sql | 4 + contrib/btree_gist/sql/macaddr.sql | 4 + contrib/btree_gist/sql/macaddr8.sql | 4 + contrib/btree_gist/sql/numeric.sql | 4 + contrib/btree_gist/sql/oid.sql | 4 + contrib/btree_gist/sql/text.sql | 4 + contrib/btree_gist/sql/time.sql | 4 + contrib/btree_gist/sql/timestamp.sql | 4 + contrib/btree_gist/sql/timestamptz.sql | 4 + contrib/btree_gist/sql/timetz.sql | 4 + contrib/btree_gist/sql/uuid.sql | 4 + contrib/btree_gist/sql/varbit.sql | 4 + contrib/btree_gist/sql/varchar.sql | 4 + src/backend/access/gist/gistbuild.c | 1 + 77 files changed, 1530 insertions(+), 3 deletions(-) create mode 100644 contrib/btree_gist/btree_gist--1.6--1.7.sql diff --git a/contrib/btree_gist/Makefile b/contrib/btree_gist/Makefile index e92d974a1a3bf..a1f818f71e6ff 100644 --- a/contrib/btree_gist/Makefile +++ b/contrib/btree_gist/Makefile @@ -32,7 +32,7 @@ EXTENSION = btree_gist DATA = btree_gist--1.0--1.1.sql \ btree_gist--1.1--1.2.sql btree_gist--1.2.sql btree_gist--1.2--1.3.sql \ btree_gist--1.3--1.4.sql btree_gist--1.4--1.5.sql \ - btree_gist--1.5--1.6.sql + btree_gist--1.5--1.6.sql btree_gist--1.6--1.7.sql PGFILEDESC = "btree_gist - B-tree equivalent GiST operator classes" REGRESS = init int2 int4 int8 float4 float8 cash oid timestamp timestamptz \ diff --git a/contrib/btree_gist/btree_bit.c b/contrib/btree_gist/btree_bit.c index 2225244ded598..61b2eecfd593b 100644 --- a/contrib/btree_gist/btree_bit.c +++ b/contrib/btree_gist/btree_bit.c @@ -19,6 +19,7 @@ PG_FUNCTION_INFO_V1(gbt_bit_picksplit); PG_FUNCTION_INFO_V1(gbt_bit_consistent); PG_FUNCTION_INFO_V1(gbt_bit_penalty); PG_FUNCTION_INFO_V1(gbt_bit_same); +PG_FUNCTION_INFO_V1(gbt_bit_sortsupport); /* define for comparison */ @@ -209,3 +210,27 @@ gbt_bit_penalty(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo)); } + +static int +gbt_bit_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + /* Use byteacmp(), like gbt_bitcmp() does */ + return DatumGetInt32(DirectFunctionCall2(byteacmp, + PointerGetDatum(a), + PointerGetDatum(b))); +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_bit_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_bit_sort_build_cmp; + ssup->abbrev_converter = NULL; + ssup->abbrev_abort = NULL; + ssup->abbrev_full_comparator = NULL; + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_bytea.c b/contrib/btree_gist/btree_bytea.c index 6b005f0157e29..a2abfb7d7c272 100644 --- a/contrib/btree_gist/btree_bytea.c +++ b/contrib/btree_gist/btree_bytea.c @@ -18,6 +18,7 @@ PG_FUNCTION_INFO_V1(gbt_bytea_picksplit); PG_FUNCTION_INFO_V1(gbt_bytea_consistent); PG_FUNCTION_INFO_V1(gbt_bytea_penalty); PG_FUNCTION_INFO_V1(gbt_bytea_same); +PG_FUNCTION_INFO_V1(gbt_bytea_sortsupport); /* define for comparison */ @@ -87,7 +88,7 @@ static const gbtree_vinfo tinfo = /************************************************** - * Text ops + * Bytea ops **************************************************/ @@ -168,3 +169,26 @@ gbt_bytea_penalty(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo)); } + +static int +gbt_bytea_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + return DatumGetInt32(DirectFunctionCall2(byteacmp, + PointerGetDatum(a), + PointerGetDatum(b))); +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_bytea_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_bytea_sort_build_cmp; + ssup->abbrev_converter = NULL; + ssup->abbrev_abort = NULL; + ssup->abbrev_full_comparator = NULL; + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_cash.c b/contrib/btree_gist/btree_cash.c index dfa23224b6f09..dbd72d3ea08d9 100644 --- a/contrib/btree_gist/btree_cash.c +++ b/contrib/btree_gist/btree_cash.c @@ -25,6 +25,7 @@ PG_FUNCTION_INFO_V1(gbt_cash_consistent); PG_FUNCTION_INFO_V1(gbt_cash_distance); PG_FUNCTION_INFO_V1(gbt_cash_penalty); PG_FUNCTION_INFO_V1(gbt_cash_same); +PG_FUNCTION_INFO_V1(gbt_cash_sortsupport); static bool gbt_cashgt(const void *a, const void *b, FmgrInfo *flinfo) @@ -216,3 +217,82 @@ gbt_cash_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_cash_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + cashKEY *ia = (cashKEY *) DatumGetPointer(a); + cashKEY *ib = (cashKEY *) DatumGetPointer(b); + + /* for leaf items we expect lower == upper */ + Assert(ia->lower == ia->upper); + Assert(ib->lower == ib->upper); + + if (ia->lower == ib->lower) + return 0; + + return (ia->lower > ib->lower) ? 1 : -1; +} + +static Datum +gbt_cash_abbrev_convert(Datum original, SortSupport ssup) +{ + cashKEY *b1 = (cashKEY *) DatumGetPointer(original); + int64 z = b1->lower; + +#if SIZEOF_DATUM == 8 + return Int64GetDatum(z); +#else + return Int32GetDatum(z >> 32); +#endif +} + +static int +gbt_cash_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) +{ +#if SIZEOF_DATUM == 8 + int64 a = DatumGetInt64(z1); + int64 b = DatumGetInt64(z2); +#else + int32 a = DatumGetInt32(z1); + int32 b = DatumGetInt32(z2); +#endif + + if (a > b) + return 1; + else if (a < b) + return -1; + else + return 0; +} + +/* + * We never consider aborting the abbreviation. + */ +static bool +gbt_cash_abbrev_abort(int memtupcount, SortSupport ssup) +{ + return false; +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_cash_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + if (ssup->abbreviate) + { + ssup->comparator = gbt_cash_cmp_abbrev; + ssup->abbrev_converter = gbt_cash_abbrev_convert; + ssup->abbrev_abort = gbt_cash_abbrev_abort; + ssup->abbrev_full_comparator = gbt_cash_sort_build_cmp; + } + else + { + ssup->comparator = gbt_cash_sort_build_cmp; + } + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_date.c b/contrib/btree_gist/btree_date.c index 455a265a49753..3abb6e9c475a0 100644 --- a/contrib/btree_gist/btree_date.c +++ b/contrib/btree_gist/btree_date.c @@ -25,6 +25,7 @@ PG_FUNCTION_INFO_V1(gbt_date_consistent); PG_FUNCTION_INFO_V1(gbt_date_distance); PG_FUNCTION_INFO_V1(gbt_date_penalty); PG_FUNCTION_INFO_V1(gbt_date_same); +PG_FUNCTION_INFO_V1(gbt_date_sortsupport); static bool gbt_dategt(const void *a, const void *b, FmgrInfo *flinfo) @@ -257,3 +258,29 @@ gbt_date_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_date_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + dateKEY *ia = (dateKEY *) PointerGetDatum(a); + dateKEY *ib = (dateKEY *) PointerGetDatum(b); + + return DatumGetInt32(DirectFunctionCall2(date_cmp, + DateADTGetDatum(ia->lower), + DateADTGetDatum(ib->lower))); +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_date_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_date_sort_build_cmp; + ssup->abbrev_converter = NULL; + ssup->abbrev_abort = NULL; + ssup->abbrev_full_comparator = NULL; + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_enum.c b/contrib/btree_gist/btree_enum.c index d4dc38a38e524..e8c5bc5ffe11d 100644 --- a/contrib/btree_gist/btree_enum.c +++ b/contrib/btree_gist/btree_enum.c @@ -26,6 +26,7 @@ PG_FUNCTION_INFO_V1(gbt_enum_picksplit); PG_FUNCTION_INFO_V1(gbt_enum_consistent); PG_FUNCTION_INFO_V1(gbt_enum_penalty); PG_FUNCTION_INFO_V1(gbt_enum_same); +PG_FUNCTION_INFO_V1(gbt_enum_sortsupport); static bool @@ -183,3 +184,72 @@ gbt_enum_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_enum_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + oidKEY *ia = (oidKEY *) DatumGetPointer(a); + oidKEY *ib = (oidKEY *) DatumGetPointer(b); + + /* for leaf items we expect lower == upper */ + Assert(ia->lower == ia->upper); + Assert(ib->lower == ib->upper); + + if (ia->lower == ib->lower) + return 0; + + return (ia->lower > ib->lower) ? 1 : -1; +} + +static Datum +gbt_enum_abbrev_convert(Datum original, SortSupport ssup) +{ + oidKEY *b1 = (oidKEY *) DatumGetPointer(original); + + return ObjectIdGetDatum(b1->lower); +} + +static int +gbt_enum_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) +{ + Oid a = DatumGetObjectId(z1); + Oid b = DatumGetObjectId(z2); + + if (a > b) + return 1; + else if (a < b) + return -1; + else + return 0; +} + +/* + * We never consider aborting the abbreviation. + */ +static bool +gbt_enum_abbrev_abort(int memtupcount, SortSupport ssup) +{ + return false; +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_enum_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + if (ssup->abbreviate) + { + ssup->comparator = gbt_enum_cmp_abbrev; + ssup->abbrev_converter = gbt_enum_abbrev_convert; + ssup->abbrev_abort = gbt_enum_abbrev_abort; + ssup->abbrev_full_comparator = gbt_enum_sort_build_cmp; + } + else + { + ssup->comparator = gbt_enum_sort_build_cmp; + } + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_float4.c b/contrib/btree_gist/btree_float4.c index 3604c73313a95..016b2d3d68ffc 100644 --- a/contrib/btree_gist/btree_float4.c +++ b/contrib/btree_gist/btree_float4.c @@ -23,6 +23,7 @@ PG_FUNCTION_INFO_V1(gbt_float4_consistent); PG_FUNCTION_INFO_V1(gbt_float4_distance); PG_FUNCTION_INFO_V1(gbt_float4_penalty); PG_FUNCTION_INFO_V1(gbt_float4_same); +PG_FUNCTION_INFO_V1(gbt_float4_sortsupport); static bool gbt_float4gt(const void *a, const void *b, FmgrInfo *flinfo) @@ -209,3 +210,73 @@ gbt_float4_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + + +static int +gbt_float4_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + float4KEY *ia = (float4KEY *) DatumGetPointer(a); + float4KEY *ib = (float4KEY *) DatumGetPointer(b); + + /* for leaf items we expect lower == upper */ + Assert(ia->lower == ia->upper); + Assert(ib->lower == ib->upper); + + if (ia->lower == ib->lower) + return 0; + + return (ia->lower > ib->lower) ? 1 : -1; +} + +static Datum +gbt_float4_abbrev_convert(Datum original, SortSupport ssup) +{ + float4KEY *b1 = (float4KEY *) DatumGetPointer(original); + + return Float4GetDatum(b1->lower); +} + +static int +gbt_float4_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) +{ + float4 a = DatumGetFloat4(z1); + float4 b = DatumGetFloat4(z2); + + if (a > b) + return 1; + else if (a < b) + return -1; + else + return 0; +} + +/* + * We never consider aborting the abbreviation. + */ +static bool +gbt_float4_abbrev_abort(int memtupcount, SortSupport ssup) +{ + return false; +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_float4_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + if (ssup->abbreviate) + { + ssup->comparator = gbt_float4_cmp_abbrev; + ssup->abbrev_converter = gbt_float4_abbrev_convert; + ssup->abbrev_abort = gbt_float4_abbrev_abort; + ssup->abbrev_full_comparator = gbt_float4_sort_build_cmp; + } + else + { + ssup->comparator = gbt_float4_sort_build_cmp; + } + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_float8.c b/contrib/btree_gist/btree_float8.c index 10a5262aaa7ca..bee1e4e05e2c7 100644 --- a/contrib/btree_gist/btree_float8.c +++ b/contrib/btree_gist/btree_float8.c @@ -23,6 +23,7 @@ PG_FUNCTION_INFO_V1(gbt_float8_consistent); PG_FUNCTION_INFO_V1(gbt_float8_distance); PG_FUNCTION_INFO_V1(gbt_float8_penalty); PG_FUNCTION_INFO_V1(gbt_float8_same); +PG_FUNCTION_INFO_V1(gbt_float8_sortsupport); static bool @@ -216,3 +217,79 @@ gbt_float8_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_float8_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + float8KEY *ia = (float8KEY *) DatumGetPointer(a); + float8KEY *ib = (float8KEY *) DatumGetPointer(b); + + /* for leaf items we expect lower == upper */ + Assert(ia->lower == ia->upper); + Assert(ib->lower == ib->upper); + + if (ia->lower == ib->lower) + return 0; + + return (ia->lower > ib->lower) ? 1 : -1; +} + +static Datum +gbt_float8_abbrev_convert(Datum original, SortSupport ssup) +{ + float8KEY *b1 = (float8KEY *) DatumGetPointer(original); + float8 z = b1->lower; + +#if SIZEOF_DATUM == 8 + return Float8GetDatum(z); +#else + return Float4GetDatum((float4) z); +#endif +} + +static int +gbt_float8_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) +{ +#if SIZEOF_DATUM == 8 + float8 a = DatumGetFloat8(z1); + float8 b = DatumGetFloat8(z2); +#else + float4 a = DatumGetFloat4(z1); + float4 b = DatumGetFloat4(z2); +#endif + + if (a > b) + return 1; + else if (a < b) + return -1; + else + return 0; +} + +static bool +gbt_float8_abbrev_abort(int memtupcount, SortSupport ssup) +{ + return false; +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_float8_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + if (ssup->abbreviate) + { + ssup->comparator = gbt_float8_cmp_abbrev; + ssup->abbrev_converter = gbt_float8_abbrev_convert; + ssup->abbrev_abort = gbt_float8_abbrev_abort; + ssup->abbrev_full_comparator = gbt_float8_sort_build_cmp; + } + else + { + ssup->comparator = gbt_float8_sort_build_cmp; + } + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_gist--1.6--1.7.sql b/contrib/btree_gist/btree_gist--1.6--1.7.sql new file mode 100644 index 0000000000000..abb5b8b0f4386 --- /dev/null +++ b/contrib/btree_gist/btree_gist--1.6--1.7.sql @@ -0,0 +1,182 @@ +/* contrib/btree_gist/btree_gist--1.6--1.7.sql */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "ALTER EXTENSION btree_gist UPDATE TO '1.7'" to load this file. \quit + + +CREATE FUNCTION gbt_int8_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_int8_ops USING gist ADD + FUNCTION 11 (int8, int8) gbt_int8_sortsupport (internal) ; + +CREATE FUNCTION gbt_int4_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_int4_ops USING gist ADD + FUNCTION 11 (int4, int4) gbt_int4_sortsupport (internal) ; + +CREATE FUNCTION gbt_int2_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_int2_ops USING gist ADD + FUNCTION 11 (int2, int2) gbt_int2_sortsupport (internal) ; + +CREATE FUNCTION gbt_float8_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_float8_ops USING gist ADD + FUNCTION 11 (float8, float8) gbt_float8_sortsupport (internal) ; + +CREATE FUNCTION gbt_float4_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_float4_ops USING gist ADD + FUNCTION 11 (float4, float4) gbt_float4_sortsupport (internal) ; + +CREATE FUNCTION gbt_enum_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_enum_ops USING gist ADD + FUNCTION 11 (anyenum, anyenum) gbt_enum_sortsupport (internal) ; + +CREATE FUNCTION gbt_oid_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_oid_ops USING gist ADD + FUNCTION 11 (oid, oid) gbt_oid_sortsupport (internal) ; + +CREATE FUNCTION gbt_cash_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_cash_ops USING gist ADD + FUNCTION 11 (money, money) gbt_cash_sortsupport (internal) ; + +CREATE FUNCTION gbt_inet_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_inet_ops USING gist ADD + FUNCTION 11 (inet, inet) gbt_inet_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_cidr_ops USING gist ADD + FUNCTION 11 (cidr, cidr) gbt_inet_sortsupport (internal) ; + + +CREATE FUNCTION gbt_macad_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_macaddr_ops USING gist ADD + FUNCTION 11 (macaddr, macaddr) gbt_macad_sortsupport (internal) ; + +CREATE FUNCTION gbt_macad8_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_macaddr8_ops USING gist ADD + FUNCTION 11 (macaddr8, macaddr8) gbt_macad8_sortsupport (internal) ; + +CREATE FUNCTION gbt_numeric_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_numeric_ops USING gist ADD + FUNCTION 11 (numeric, numeric) gbt_numeric_sortsupport (internal) ; + +CREATE FUNCTION gbt_uuid_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_uuid_ops USING gist ADD + FUNCTION 11 (uuid, uuid) gbt_uuid_sortsupport (internal) ; + +CREATE FUNCTION gbt_ts_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_timestamp_ops USING gist ADD + FUNCTION 11 (timestamp, timestamp) gbt_ts_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_timestamptz_ops USING gist ADD + FUNCTION 11 (timestamptz, timestamptz) gbt_ts_sortsupport (internal) ; + +CREATE FUNCTION gbt_text_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_text_ops USING gist ADD + FUNCTION 11 (text, text) gbt_text_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_bpchar_ops USING gist ADD + FUNCTION 11 (bpchar, bpchar) gbt_text_sortsupport (internal) ; + +CREATE FUNCTION gbt_time_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_time_ops USING gist ADD + FUNCTION 11 (time, time) gbt_time_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_timetz_ops USING gist ADD + FUNCTION 11 (timetz, timetz) gbt_time_sortsupport (internal) ; + +CREATE FUNCTION gbt_bytea_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_bytea_ops USING gist ADD + FUNCTION 11 (bytea, bytea) gbt_bytea_sortsupport (internal) ; + +CREATE FUNCTION gbt_date_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_date_ops USING gist ADD + FUNCTION 11 (date, date) gbt_date_sortsupport (internal) ; + +CREATE FUNCTION gbt_bit_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_bit_ops USING gist ADD + FUNCTION 11 (bit, bit) gbt_bit_sortsupport (internal) ; + +ALTER OPERATOR FAMILY gist_vbit_ops USING gist ADD + FUNCTION 11 (varbit, varbit) gbt_bit_sortsupport (internal) ; + +CREATE FUNCTION gbt_intv_sortsupport(internal) +RETURNS void +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +ALTER OPERATOR FAMILY gist_interval_ops USING gist ADD + FUNCTION 11 (interval, interval) gbt_intv_sortsupport (internal) ; + diff --git a/contrib/btree_gist/btree_gist.control b/contrib/btree_gist/btree_gist.control index e5c41fe8f3978..fa9171a80a2e3 100644 --- a/contrib/btree_gist/btree_gist.control +++ b/contrib/btree_gist/btree_gist.control @@ -1,6 +1,6 @@ # btree_gist extension comment = 'support for indexing common datatypes in GiST' -default_version = '1.6' +default_version = '1.7' module_pathname = '$libdir/btree_gist' relocatable = true trusted = true diff --git a/contrib/btree_gist/btree_gist.h b/contrib/btree_gist/btree_gist.h index 14c7c8ee193a4..35ad287ed3ddd 100644 --- a/contrib/btree_gist/btree_gist.h +++ b/contrib/btree_gist/btree_gist.h @@ -6,6 +6,7 @@ #include "access/nbtree.h" #include "fmgr.h" +#include "utils/sortsupport.h" #define BtreeGistNotEqualStrategyNumber 6 diff --git a/contrib/btree_gist/btree_inet.c b/contrib/btree_gist/btree_inet.c index e4b3a946b2770..88136128ceeb7 100644 --- a/contrib/btree_gist/btree_inet.c +++ b/contrib/btree_gist/btree_inet.c @@ -24,6 +24,7 @@ PG_FUNCTION_INFO_V1(gbt_inet_picksplit); PG_FUNCTION_INFO_V1(gbt_inet_consistent); PG_FUNCTION_INFO_V1(gbt_inet_penalty); PG_FUNCTION_INFO_V1(gbt_inet_same); +PG_FUNCTION_INFO_V1(gbt_inet_sortsupport); static bool @@ -186,3 +187,79 @@ gbt_inet_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_inet_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + inetKEY *ia = (inetKEY *) DatumGetPointer(a); + inetKEY *ib = (inetKEY *) DatumGetPointer(b); + + /* for leaf items we expect lower == upper */ + Assert(ia->lower == ia->upper); + Assert(ib->lower == ib->upper); + + if (ia->lower == ib->lower) + return 0; + + return (ia->lower > ib->lower) ? 1 : -1; +} + +static Datum +gbt_inet_abbrev_convert(Datum original, SortSupport ssup) +{ + inetKEY *b1 = (inetKEY *) DatumGetPointer(original); + double z = b1->lower; + +#if SIZEOF_DATUM == 8 + return Float8GetDatum(z); +#else + return Float4GetDatum((float4) z); +#endif +} + +static int +gbt_inet_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) +{ +#if SIZEOF_DATUM == 8 + float8 a = DatumGetFloat8(z1); + float8 b = DatumGetFloat8(z2); +#else + float4 a = DatumGetFloat4(z1); + float4 b = DatumGetFloat4(z2); +#endif + + if (a > b) + return 1; + else if (a < b) + return -1; + else + return 0; +} + +static bool +gbt_inet_abbrev_abort(int memtupcount, SortSupport ssup) +{ + return false; +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_inet_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + if (ssup->abbreviate) + { + ssup->comparator = gbt_inet_cmp_abbrev; + ssup->abbrev_converter = gbt_inet_abbrev_convert; + ssup->abbrev_abort = gbt_inet_abbrev_abort; + ssup->abbrev_full_comparator = gbt_inet_sort_build_cmp; + } + else + { + ssup->comparator = gbt_inet_sort_build_cmp; + } + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_int2.c b/contrib/btree_gist/btree_int2.c index a91b95ff39853..38ca3e05da726 100644 --- a/contrib/btree_gist/btree_int2.c +++ b/contrib/btree_gist/btree_int2.c @@ -24,6 +24,7 @@ PG_FUNCTION_INFO_V1(gbt_int2_consistent); PG_FUNCTION_INFO_V1(gbt_int2_distance); PG_FUNCTION_INFO_V1(gbt_int2_penalty); PG_FUNCTION_INFO_V1(gbt_int2_same); +PG_FUNCTION_INFO_V1(gbt_int2_sortsupport); static bool gbt_int2gt(const void *a, const void *b, FmgrInfo *flinfo) @@ -214,3 +215,72 @@ gbt_int2_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_int2_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + int16KEY *ia = (int16KEY *) DatumGetPointer(a); + int16KEY *ib = (int16KEY *) DatumGetPointer(b); + + /* for leaf items we expect lower == upper */ + Assert(ia->lower == ia->upper); + Assert(ib->lower == ib->upper); + + if (ia->lower == ib->lower) + return 0; + + return (ia->lower > ib->lower) ? 1 : -1; +} + +static Datum +gbt_int2_abbrev_convert(Datum original, SortSupport ssup) +{ + int16KEY *b1 = (int16KEY *) DatumGetPointer(original); + + return Int16GetDatum(b1->lower); +} + +static int +gbt_int2_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) +{ + int16 a = DatumGetInt16(z1); + int16 b = DatumGetInt16(z2); + + if (a > b) + return 1; + else if (a < b) + return -1; + else + return 0; +} + +/* + * We never consider aborting the abbreviation. + */ +static bool +gbt_int2_abbrev_abort(int memtupcount, SortSupport ssup) +{ + return false; +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_int2_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + if (ssup->abbreviate) + { + ssup->comparator = gbt_int2_cmp_abbrev; + ssup->abbrev_converter = gbt_int2_abbrev_convert; + ssup->abbrev_abort = gbt_int2_abbrev_abort; + ssup->abbrev_full_comparator = gbt_int2_sort_build_cmp; + } + else + { + ssup->comparator = gbt_int2_sort_build_cmp; + } + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_int4.c b/contrib/btree_gist/btree_int4.c index 7ea98c478c73b..21bd01ed10dfc 100644 --- a/contrib/btree_gist/btree_int4.c +++ b/contrib/btree_gist/btree_int4.c @@ -24,6 +24,7 @@ PG_FUNCTION_INFO_V1(gbt_int4_consistent); PG_FUNCTION_INFO_V1(gbt_int4_distance); PG_FUNCTION_INFO_V1(gbt_int4_penalty); PG_FUNCTION_INFO_V1(gbt_int4_same); +PG_FUNCTION_INFO_V1(gbt_int4_sortsupport); static bool @@ -215,3 +216,72 @@ gbt_int4_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_int4_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + int32KEY *ia = (int32KEY *) DatumGetPointer(a); + int32KEY *ib = (int32KEY *) DatumGetPointer(b); + + /* for leaf items we expect lower == upper */ + Assert(ia->lower == ia->upper); + Assert(ib->lower == ib->upper); + + if (ia->lower == ib->lower) + return 0; + + return (ia->lower > ib->lower) ? 1 : -1; +} + +static Datum +gbt_int4_abbrev_convert(Datum original, SortSupport ssup) +{ + int32KEY *b1 = (int32KEY *) DatumGetPointer(original); + + return Int32GetDatum(b1->lower); +} + +static int +gbt_int4_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) +{ + int32 a = DatumGetInt32(z1); + int32 b = DatumGetInt32(z2); + + if (a > b) + return 1; + else if (a < b) + return -1; + else + return 0; +} + +/* + * We never consider aborting the abbreviation. + */ +static bool +gbt_int4_abbrev_abort(int memtupcount, SortSupport ssup) +{ + return false; +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_int4_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + if (ssup->abbreviate) + { + ssup->comparator = gbt_int4_cmp_abbrev; + ssup->abbrev_converter = gbt_int4_abbrev_convert; + ssup->abbrev_abort = gbt_int4_abbrev_abort; + ssup->abbrev_full_comparator = gbt_int4_sort_build_cmp; + } + else + { + ssup->comparator = gbt_int4_sort_build_cmp; + } + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_int8.c b/contrib/btree_gist/btree_int8.c index df2b0d174b965..b6e7fe68742cb 100644 --- a/contrib/btree_gist/btree_int8.c +++ b/contrib/btree_gist/btree_int8.c @@ -24,6 +24,7 @@ PG_FUNCTION_INFO_V1(gbt_int8_consistent); PG_FUNCTION_INFO_V1(gbt_int8_distance); PG_FUNCTION_INFO_V1(gbt_int8_penalty); PG_FUNCTION_INFO_V1(gbt_int8_same); +PG_FUNCTION_INFO_V1(gbt_int8_sortsupport); static bool @@ -215,3 +216,82 @@ gbt_int8_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_int8_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + int64KEY *ia = (int64KEY *) DatumGetPointer(a); + int64KEY *ib = (int64KEY *) DatumGetPointer(b); + + /* for leaf items we expect lower == upper */ + Assert(ia->lower == ia->upper); + Assert(ib->lower == ib->upper); + + if (ia->lower == ib->lower) + return 0; + + return (ia->lower > ib->lower) ? 1 : -1; +} + +static Datum +gbt_int8_abbrev_convert(Datum original, SortSupport ssup) +{ + int64KEY *b1 = (int64KEY *) DatumGetPointer(original); + int64 z = b1->lower; + +#if SIZEOF_DATUM == 8 + return Int64GetDatum(z); +#else + return Int32GetDatum(z >> 32); +#endif +} + +static int +gbt_int8_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) +{ +#if SIZEOF_DATUM == 8 + int64 a = DatumGetInt64(z1); + int64 b = DatumGetInt64(z2); +#else + int32 a = DatumGetInt32(z1); + int32 b = DatumGetInt32(z2); +#endif + + if (a > b) + return 1; + else if (a < b) + return -1; + else + return 0; +} + +/* + * We never consider aborting the abbreviation. + */ +static bool +gbt_int8_abbrev_abort(int memtupcount, SortSupport ssup) +{ + return false; +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_int8_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + if (ssup->abbreviate) + { + ssup->comparator = gbt_int8_cmp_abbrev; + ssup->abbrev_converter = gbt_int8_abbrev_convert; + ssup->abbrev_abort = gbt_int8_abbrev_abort; + ssup->abbrev_full_comparator = gbt_int8_sort_build_cmp; + } + else + { + ssup->comparator = gbt_int8_sort_build_cmp; + } + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_interval.c b/contrib/btree_gist/btree_interval.c index a4b3b2b1e6fe4..0041acd3dddf0 100644 --- a/contrib/btree_gist/btree_interval.c +++ b/contrib/btree_gist/btree_interval.c @@ -27,6 +27,7 @@ PG_FUNCTION_INFO_V1(gbt_intv_consistent); PG_FUNCTION_INFO_V1(gbt_intv_distance); PG_FUNCTION_INFO_V1(gbt_intv_penalty); PG_FUNCTION_INFO_V1(gbt_intv_same); +PG_FUNCTION_INFO_V1(gbt_intv_sortsupport); static bool @@ -297,3 +298,29 @@ gbt_intv_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_intv_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + intvKEY *ia = (intvKEY *) DatumGetPointer(a); + intvKEY *ib = (intvKEY *) DatumGetPointer(b); + + return DatumGetInt32(DirectFunctionCall2(interval_cmp, + IntervalPGetDatum(&ia->lower), + IntervalPGetDatum(&ib->lower))); +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_intv_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_intv_sort_build_cmp; + ssup->abbrev_converter = NULL; + ssup->abbrev_abort = NULL; + ssup->abbrev_full_comparator = NULL; + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_macaddr.c b/contrib/btree_gist/btree_macaddr.c index 7f0e9e9c91254..805148575d748 100644 --- a/contrib/btree_gist/btree_macaddr.c +++ b/contrib/btree_gist/btree_macaddr.c @@ -25,6 +25,7 @@ PG_FUNCTION_INFO_V1(gbt_macad_picksplit); PG_FUNCTION_INFO_V1(gbt_macad_consistent); PG_FUNCTION_INFO_V1(gbt_macad_penalty); PG_FUNCTION_INFO_V1(gbt_macad_same); +PG_FUNCTION_INFO_V1(gbt_macad_sortsupport); static bool @@ -195,3 +196,80 @@ gbt_macad_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_macad_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + macKEY *ma = (macKEY *) DatumGetPointer(a); + macKEY *mb = (macKEY *) DatumGetPointer(b); + uint64 ia = mac_2_uint64(&ma->lower); + uint64 ib = mac_2_uint64(&mb->lower); + + /* for leaf items we expect lower == upper */ + + if (ia == ib) + return 0; + + return (ia > ib) ? 1 : -1; +} + +static Datum +gbt_macad_abbrev_convert(Datum original, SortSupport ssup) +{ + macKEY *b1 = (macKEY *) DatumGetPointer(original); + uint64 z = mac_2_uint64(&b1->lower); + +#if SIZEOF_DATUM == 8 + return UInt64GetDatum(z); +#else + /* use the high 32 bits of the 48-bit integer */ + return UInt32GetDatum(z >> 16); +#endif +} + +static int +gbt_macad_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) +{ +#if SIZEOF_DATUM == 8 + uint64 a = DatumGetUInt64(z1); + uint64 b = DatumGetUInt64(z2); +#else + uint32 a = DatumGetUInt32(z1); + uint32 b = DatumGetUInt32(z2); +#endif + + if (a > b) + return 1; + else if (a < b) + return -1; + else + return 0; +} + +static bool +gbt_macad_abbrev_abort(int memtupcount, SortSupport ssup) +{ + return false; +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_macad_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + if (ssup->abbreviate) + { + ssup->comparator = gbt_macad_cmp_abbrev; + ssup->abbrev_converter = gbt_macad_abbrev_convert; + ssup->abbrev_abort = gbt_macad_abbrev_abort; + ssup->abbrev_full_comparator = gbt_macad_sort_build_cmp; + } + else + { + ssup->comparator = gbt_macad_sort_build_cmp; + } + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_macaddr8.c b/contrib/btree_gist/btree_macaddr8.c index ab4bca5d50d84..a0514727e358b 100644 --- a/contrib/btree_gist/btree_macaddr8.c +++ b/contrib/btree_gist/btree_macaddr8.c @@ -25,6 +25,7 @@ PG_FUNCTION_INFO_V1(gbt_macad8_picksplit); PG_FUNCTION_INFO_V1(gbt_macad8_consistent); PG_FUNCTION_INFO_V1(gbt_macad8_penalty); PG_FUNCTION_INFO_V1(gbt_macad8_same); +PG_FUNCTION_INFO_V1(gbt_macad8_sortsupport); static bool @@ -195,3 +196,80 @@ gbt_macad8_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_macad8_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + mac8KEY *ma = (mac8KEY *) DatumGetPointer(a); + mac8KEY *mb = (mac8KEY *) DatumGetPointer(b); + uint64 ia = mac8_2_uint64(&ma->lower); + uint64 ib = mac8_2_uint64(&mb->lower); + + /* for leaf items we expect lower == upper */ + + if (ia == ib) + return 0; + + return (ia > ib) ? 1 : -1; +} + +static Datum +gbt_macad8_abbrev_convert(Datum original, SortSupport ssup) +{ + mac8KEY *b1 = (mac8KEY *) DatumGetPointer(original); + uint64 z = mac8_2_uint64(&b1->lower); + +#if SIZEOF_DATUM == 8 + return UInt64GetDatum(z); +#else + /* use the high bits only */ + return UInt32GetDatum(z >> 32); +#endif +} + +static int +gbt_macad8_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) +{ +#if SIZEOF_DATUM == 8 + uint64 a = DatumGetUInt64(z1); + uint64 b = DatumGetUInt64(z2); +#else + uint32 a = DatumGetUInt32(z1); + uint32 b = DatumGetUInt32(z2); +#endif + + if (a > b) + return 1; + else if (a < b) + return -1; + else + return 0; +} + +static bool +gbt_macad8_abbrev_abort(int memtupcount, SortSupport ssup) +{ + return false; +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_macad8_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + if (ssup->abbreviate) + { + ssup->comparator = gbt_macad8_cmp_abbrev; + ssup->abbrev_converter = gbt_macad8_abbrev_convert; + ssup->abbrev_abort = gbt_macad8_abbrev_abort; + ssup->abbrev_full_comparator = gbt_macad8_sort_build_cmp; + } + else + { + ssup->comparator = gbt_macad8_sort_build_cmp; + } + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_numeric.c b/contrib/btree_gist/btree_numeric.c index 35e466cdd9423..face4e2b3af91 100644 --- a/contrib/btree_gist/btree_numeric.c +++ b/contrib/btree_gist/btree_numeric.c @@ -21,6 +21,7 @@ PG_FUNCTION_INFO_V1(gbt_numeric_picksplit); PG_FUNCTION_INFO_V1(gbt_numeric_consistent); PG_FUNCTION_INFO_V1(gbt_numeric_penalty); PG_FUNCTION_INFO_V1(gbt_numeric_same); +PG_FUNCTION_INFO_V1(gbt_numeric_sortsupport); /* define for comparison */ @@ -227,3 +228,31 @@ gbt_numeric_picksplit(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(v); } + +static int +gbt_numeric_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + return DatumGetInt32(DirectFunctionCall2(numeric_cmp, + PointerGetDatum(a), + PointerGetDatum(b))); +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_numeric_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_numeric_sort_build_cmp; + + /* + * Numeric has abbreviation routines in numeric.c, but we don't try to use + * them here. Maybe later. + */ + ssup->abbrev_converter = NULL; + ssup->abbrev_abort = NULL; + ssup->abbrev_full_comparator = NULL; + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_oid.c b/contrib/btree_gist/btree_oid.c index 3cc7d4245d42b..9b7c546aeeb66 100644 --- a/contrib/btree_gist/btree_oid.c +++ b/contrib/btree_gist/btree_oid.c @@ -23,6 +23,7 @@ PG_FUNCTION_INFO_V1(gbt_oid_consistent); PG_FUNCTION_INFO_V1(gbt_oid_distance); PG_FUNCTION_INFO_V1(gbt_oid_penalty); PG_FUNCTION_INFO_V1(gbt_oid_same); +PG_FUNCTION_INFO_V1(gbt_oid_sortsupport); static bool @@ -215,3 +216,72 @@ gbt_oid_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_oid_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + oidKEY *ia = (oidKEY *) DatumGetPointer(a); + oidKEY *ib = (oidKEY *) DatumGetPointer(b); + + /* for leaf items we expect lower == upper */ + Assert(ia->lower == ia->upper); + Assert(ib->lower == ib->upper); + + if (ia->lower == ib->lower) + return 0; + + return (ia->lower > ib->lower) ? 1 : -1; +} + +static Datum +gbt_oid_abbrev_convert(Datum original, SortSupport ssup) +{ + oidKEY *b1 = (oidKEY *) DatumGetPointer(original); + + return ObjectIdGetDatum(b1->lower); +} + +static int +gbt_oid_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) +{ + Oid a = DatumGetObjectId(z1); + Oid b = DatumGetObjectId(z2); + + if (a > b) + return 1; + else if (a < b) + return -1; + else + return 0; +} + +/* + * We never consider aborting the abbreviation. + */ +static bool +gbt_oid_abbrev_abort(int memtupcount, SortSupport ssup) +{ + return false; +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_oid_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + if (ssup->abbreviate) + { + ssup->comparator = gbt_oid_cmp_abbrev; + ssup->abbrev_converter = gbt_oid_abbrev_convert; + ssup->abbrev_abort = gbt_oid_abbrev_abort; + ssup->abbrev_full_comparator = gbt_oid_sort_build_cmp; + } + else + { + ssup->comparator = gbt_oid_sort_build_cmp; + } + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_text.c b/contrib/btree_gist/btree_text.c index 8019d11281952..01b1bda2f66b6 100644 --- a/contrib/btree_gist/btree_text.c +++ b/contrib/btree_gist/btree_text.c @@ -18,6 +18,7 @@ PG_FUNCTION_INFO_V1(gbt_text_consistent); PG_FUNCTION_INFO_V1(gbt_bpchar_consistent); PG_FUNCTION_INFO_V1(gbt_text_penalty); PG_FUNCTION_INFO_V1(gbt_text_same); +PG_FUNCTION_INFO_V1(gbt_text_sortsupport); /* define for comparison */ @@ -239,3 +240,27 @@ gbt_text_penalty(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo)); } + +static int +gbt_text_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + return DatumGetInt32(DirectFunctionCall2Coll(bttextcmp, + ssup->ssup_collation, + PointerGetDatum(a), + PointerGetDatum(b))); +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_text_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_text_sort_build_cmp; + ssup->abbrev_converter = NULL; + ssup->abbrev_abort = NULL; + ssup->abbrev_full_comparator = NULL; + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_time.c b/contrib/btree_gist/btree_time.c index fd8774a2f0856..c021f6751426c 100644 --- a/contrib/btree_gist/btree_time.c +++ b/contrib/btree_gist/btree_time.c @@ -28,6 +28,7 @@ PG_FUNCTION_INFO_V1(gbt_time_distance); PG_FUNCTION_INFO_V1(gbt_timetz_consistent); PG_FUNCTION_INFO_V1(gbt_time_penalty); PG_FUNCTION_INFO_V1(gbt_time_same); +PG_FUNCTION_INFO_V1(gbt_time_sortsupport); #ifdef USE_FLOAT8_BYVAL @@ -332,3 +333,29 @@ gbt_time_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_time_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + timeKEY *ia = (timeKEY *) DatumGetPointer(a); + timeKEY *ib = (timeKEY *) DatumGetPointer(b); + + return DatumGetInt32(DirectFunctionCall2(time_cmp, + TimeADTGetDatumFast(ia->lower), + TimeADTGetDatumFast(ib->lower))); +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_time_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_time_sort_build_cmp; + ssup->abbrev_converter = NULL; + ssup->abbrev_abort = NULL; + ssup->abbrev_full_comparator = NULL; + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c index 2671ba961cdae..c6ef0782d24da 100644 --- a/contrib/btree_gist/btree_ts.c +++ b/contrib/btree_gist/btree_ts.c @@ -31,6 +31,7 @@ PG_FUNCTION_INFO_V1(gbt_tstz_consistent); PG_FUNCTION_INFO_V1(gbt_tstz_distance); PG_FUNCTION_INFO_V1(gbt_ts_penalty); PG_FUNCTION_INFO_V1(gbt_ts_same); +PG_FUNCTION_INFO_V1(gbt_ts_sortsupport); #ifdef USE_FLOAT8_BYVAL @@ -399,3 +400,29 @@ gbt_ts_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_ts_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + tsKEY *ia = (tsKEY *) DatumGetPointer(a); + tsKEY *ib = (tsKEY *) DatumGetPointer(b); + + return DatumGetInt32(DirectFunctionCall2(timestamp_cmp, + TimestampGetDatumFast(ia->lower), + TimestampGetDatumFast(ib->lower))); +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_ts_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_ts_sort_build_cmp; + ssup->abbrev_converter = NULL; + ssup->abbrev_abort = NULL; + ssup->abbrev_full_comparator = NULL; + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/btree_uuid.c b/contrib/btree_gist/btree_uuid.c index b81875979a3b9..c802bf95a9072 100644 --- a/contrib/btree_gist/btree_uuid.c +++ b/contrib/btree_gist/btree_uuid.c @@ -25,6 +25,7 @@ PG_FUNCTION_INFO_V1(gbt_uuid_picksplit); PG_FUNCTION_INFO_V1(gbt_uuid_consistent); PG_FUNCTION_INFO_V1(gbt_uuid_penalty); PG_FUNCTION_INFO_V1(gbt_uuid_same); +PG_FUNCTION_INFO_V1(gbt_uuid_sortsupport); static int @@ -233,3 +234,27 @@ gbt_uuid_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } + +static int +gbt_uuid_sort_build_cmp(Datum a, Datum b, SortSupport ssup) +{ + uuidKEY *ua = (uuidKEY *) DatumGetPointer(a); + uuidKEY *ub = (uuidKEY *) DatumGetPointer(b); + + return uuid_internal_cmp(&ua->lower, &ub->lower); +} + +/* + * Sort support routine for fast GiST index build by sorting. + */ +Datum +gbt_uuid_sortsupport(PG_FUNCTION_ARGS) +{ + SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); + + ssup->comparator = gbt_uuid_sort_build_cmp; + ssup->abbrev_converter = NULL; + ssup->abbrev_abort = NULL; + ssup->abbrev_full_comparator = NULL; + PG_RETURN_VOID(); +} diff --git a/contrib/btree_gist/expected/bit.out b/contrib/btree_gist/expected/bit.out index e57871f310b14..cb2297ce806f4 100644 --- a/contrib/btree_gist/expected/bit.out +++ b/contrib/btree_gist/expected/bit.out @@ -32,7 +32,14 @@ SELECT count(*) FROM bittmp WHERE a > '011011000100010111011000110000100'; 350 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX bitidx ON bittmp USING GIST ( a ); +DEBUG: building index "bitidx" on table "bittmp" serially +DEBUG: using sorted GiST build +CREATE INDEX bitidx_b ON bittmp USING GIST ( a ) WITH (buffering=on); +DEBUG: building index "bitidx_b" on table "bittmp" serially +DROP INDEX bitidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM bittmp WHERE a < '011011000100010111011000110000100'; count diff --git a/contrib/btree_gist/expected/bytea.out b/contrib/btree_gist/expected/bytea.out index b9efa73c0855f..170b48e1db90b 100644 --- a/contrib/btree_gist/expected/bytea.out +++ b/contrib/btree_gist/expected/bytea.out @@ -33,7 +33,14 @@ SELECT count(*) FROM byteatmp WHERE a > '31b0'; 400 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX byteaidx ON byteatmp USING GIST ( a ); +DEBUG: building index "byteaidx" on table "byteatmp" serially +DEBUG: using sorted GiST build +CREATE INDEX byteaidx_b ON byteatmp USING GIST ( a ) WITH (buffering=on); +DEBUG: building index "byteaidx_b" on table "byteatmp" serially +DROP INDEX byteaidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM byteatmp WHERE a < '31b0'::bytea; count diff --git a/contrib/btree_gist/expected/cash.out b/contrib/btree_gist/expected/cash.out index 7fbc7355929a1..868af70b22ccb 100644 --- a/contrib/btree_gist/expected/cash.out +++ b/contrib/btree_gist/expected/cash.out @@ -40,7 +40,14 @@ SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3; $21,915.01 | $442.22 (3 rows) +SET client_min_messages = DEBUG1; CREATE INDEX moneyidx ON moneytmp USING gist ( a ); +DEBUG: building index "moneyidx" on table "moneytmp" serially +DEBUG: using sorted GiST build +CREATE INDEX moneyidx_b ON moneytmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "moneyidx_b" on table "moneytmp" serially +DROP INDEX moneyidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM moneytmp WHERE a < '22649.64'::money; count diff --git a/contrib/btree_gist/expected/char.out b/contrib/btree_gist/expected/char.out index d715c045cc152..97316cbb06bd2 100644 --- a/contrib/btree_gist/expected/char.out +++ b/contrib/btree_gist/expected/char.out @@ -32,7 +32,14 @@ SELECT count(*) FROM chartmp WHERE a > '31b0'::char(32); 400 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX charidx ON chartmp USING GIST ( a ); +DEBUG: building index "charidx" on table "chartmp" serially +DEBUG: using sorted GiST build +CREATE INDEX charidx_b ON chartmp USING GIST ( a ) WITH (buffering=on); +DEBUG: building index "charidx_b" on table "chartmp" serially +DROP INDEX charidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM chartmp WHERE a < '31b0'::char(32); count diff --git a/contrib/btree_gist/expected/cidr.out b/contrib/btree_gist/expected/cidr.out index 6d0995add60ec..f15597c06a0ff 100644 --- a/contrib/btree_gist/expected/cidr.out +++ b/contrib/btree_gist/expected/cidr.out @@ -32,7 +32,14 @@ SELECT count(*) FROM cidrtmp WHERE a > '121.111.63.82'; 309 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX cidridx ON cidrtmp USING gist ( a ); +DEBUG: building index "cidridx" on table "cidrtmp" serially +DEBUG: using sorted GiST build +CREATE INDEX cidridx_b ON cidrtmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "cidridx_b" on table "cidrtmp" serially +DROP INDEX cidridx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM cidrtmp WHERE a < '121.111.63.82'::cidr; count diff --git a/contrib/btree_gist/expected/date.out b/contrib/btree_gist/expected/date.out index 5db864bb82caa..5c93d02209c3e 100644 --- a/contrib/btree_gist/expected/date.out +++ b/contrib/btree_gist/expected/date.out @@ -40,7 +40,14 @@ SELECT a, a <-> '2001-02-13' FROM datetmp ORDER BY a <-> '2001-02-13' LIMIT 3; 03-24-2001 | 39 (3 rows) +SET client_min_messages = DEBUG1; CREATE INDEX dateidx ON datetmp USING gist ( a ); +DEBUG: building index "dateidx" on table "datetmp" serially +DEBUG: using sorted GiST build +CREATE INDEX dateidx_b ON datetmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "dateidx_b" on table "datetmp" serially +DROP INDEX dateidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM datetmp WHERE a < '2001-02-13'::date; count diff --git a/contrib/btree_gist/expected/enum.out b/contrib/btree_gist/expected/enum.out index c4b769dd4b77c..d73ad33974ddd 100644 --- a/contrib/btree_gist/expected/enum.out +++ b/contrib/btree_gist/expected/enum.out @@ -46,7 +46,14 @@ SELECT count(*) FROM enumtmp WHERE a > 'g'::rainbow; 230 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX enumidx ON enumtmp USING gist ( a ); +DEBUG: building index "enumidx" on table "enumtmp" serially +DEBUG: using sorted GiST build +CREATE INDEX enumidx_b ON enumtmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "enumidx_b" on table "enumtmp" serially +DROP INDEX enumidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM enumtmp WHERE a < 'g'::rainbow; count diff --git a/contrib/btree_gist/expected/float4.out b/contrib/btree_gist/expected/float4.out index dfe732049e6d6..5f4f1aa4ec5d4 100644 --- a/contrib/btree_gist/expected/float4.out +++ b/contrib/btree_gist/expected/float4.out @@ -40,7 +40,14 @@ SELECT a, a <-> '-179.0' FROM float4tmp ORDER BY a <-> '-179.0' LIMIT 3; -158.17741 | 20.822586 (3 rows) +SET client_min_messages = DEBUG1; CREATE INDEX float4idx ON float4tmp USING gist ( a ); +DEBUG: building index "float4idx" on table "float4tmp" serially +DEBUG: using sorted GiST build +CREATE INDEX float4idx_b ON float4tmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "float4idx_b" on table "float4tmp" serially +DROP INDEX float4idx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM float4tmp WHERE a < -179.0::float4; count diff --git a/contrib/btree_gist/expected/float8.out b/contrib/btree_gist/expected/float8.out index ebd0ef3d689a1..4db0f7b8282ce 100644 --- a/contrib/btree_gist/expected/float8.out +++ b/contrib/btree_gist/expected/float8.out @@ -40,7 +40,14 @@ SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3; -1769.73634 | 120.26366000000007 (3 rows) +SET client_min_messages = DEBUG1; CREATE INDEX float8idx ON float8tmp USING gist ( a ); +DEBUG: building index "float8idx" on table "float8tmp" serially +DEBUG: using sorted GiST build +CREATE INDEX float8idx_b ON float8tmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "float8idx_b" on table "float8tmp" serially +DROP INDEX float8idx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM float8tmp WHERE a < -1890.0::float8; count diff --git a/contrib/btree_gist/expected/inet.out b/contrib/btree_gist/expected/inet.out index c323d903da461..0847d3b7d128a 100644 --- a/contrib/btree_gist/expected/inet.out +++ b/contrib/btree_gist/expected/inet.out @@ -32,7 +32,14 @@ SELECT count(*) FROM inettmp WHERE a > '89.225.196.191'; 386 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX inetidx ON inettmp USING gist ( a ); +DEBUG: building index "inetidx" on table "inettmp" serially +DEBUG: using sorted GiST build +CREATE INDEX inetidx_b ON inettmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "inetidx_b" on table "inettmp" serially +DROP INDEX inetidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM inettmp WHERE a < '89.225.196.191'::inet; count diff --git a/contrib/btree_gist/expected/int2.out b/contrib/btree_gist/expected/int2.out index 50a332939bd48..9ad06a8dce0cb 100644 --- a/contrib/btree_gist/expected/int2.out +++ b/contrib/btree_gist/expected/int2.out @@ -40,7 +40,14 @@ SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3; 228 | 9 (3 rows) +SET client_min_messages = DEBUG1; CREATE INDEX int2idx ON int2tmp USING gist ( a ); +DEBUG: building index "int2idx" on table "int2tmp" serially +DEBUG: using sorted GiST build +CREATE INDEX int2idx_b ON int2tmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "int2idx_b" on table "int2tmp" serially +DROP INDEX int2idx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM int2tmp WHERE a < 237::int2; count diff --git a/contrib/btree_gist/expected/int4.out b/contrib/btree_gist/expected/int4.out index 6bbdc7c3f4bf9..fdf143f32c321 100644 --- a/contrib/btree_gist/expected/int4.out +++ b/contrib/btree_gist/expected/int4.out @@ -40,7 +40,14 @@ SELECT a, a <-> '237' FROM int4tmp ORDER BY a <-> '237' LIMIT 3; 228 | 9 (3 rows) +SET client_min_messages = DEBUG1; CREATE INDEX int4idx ON int4tmp USING gist ( a ); +DEBUG: building index "int4idx" on table "int4tmp" serially +DEBUG: using sorted GiST build +CREATE INDEX int4idx_b ON int4tmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "int4idx_b" on table "int4tmp" serially +DROP INDEX int4idx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM int4tmp WHERE a < 237::int4; count diff --git a/contrib/btree_gist/expected/int8.out b/contrib/btree_gist/expected/int8.out index eff77c26b5adb..532c4e5e70413 100644 --- a/contrib/btree_gist/expected/int8.out +++ b/contrib/btree_gist/expected/int8.out @@ -40,7 +40,14 @@ SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' 478227196042750 | 13655904687909 (3 rows) +SET client_min_messages = DEBUG1; CREATE INDEX int8idx ON int8tmp USING gist ( a ); +DEBUG: building index "int8idx" on table "int8tmp" serially +DEBUG: using sorted GiST build +CREATE INDEX int8idx_b ON int8tmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "int8idx_b" on table "int8tmp" serially +DROP INDEX int8idx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM int8tmp WHERE a < 464571291354841::int8; count diff --git a/contrib/btree_gist/expected/interval.out b/contrib/btree_gist/expected/interval.out index 4c3d494e4a656..12d50fdf5810f 100644 --- a/contrib/btree_gist/expected/interval.out +++ b/contrib/btree_gist/expected/interval.out @@ -40,7 +40,14 @@ SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21 @ 220 days 19 hours 5 mins 42 secs | @ 21 days -2 hours -15 mins -41 secs (3 rows) +SET client_min_messages = DEBUG1; CREATE INDEX intervalidx ON intervaltmp USING gist ( a ); +DEBUG: building index "intervalidx" on table "intervaltmp" serially +DEBUG: using sorted GiST build +CREATE INDEX intervalidx_b ON intervaltmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "intervalidx_b" on table "intervaltmp" serially +DROP INDEX intervalidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM intervaltmp WHERE a < '199 days 21:21:23'::interval; count diff --git a/contrib/btree_gist/expected/macaddr.out b/contrib/btree_gist/expected/macaddr.out index c0a4c6287f321..9634000618f53 100644 --- a/contrib/btree_gist/expected/macaddr.out +++ b/contrib/btree_gist/expected/macaddr.out @@ -32,7 +32,14 @@ SELECT count(*) FROM macaddrtmp WHERE a > '22:00:5c:e5:9b:0d'; 540 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX macaddridx ON macaddrtmp USING gist ( a ); +DEBUG: building index "macaddridx" on table "macaddrtmp" serially +DEBUG: using sorted GiST build +CREATE INDEX macaddridx_b ON macaddrtmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "macaddridx_b" on table "macaddrtmp" serially +DROP INDEX macaddridx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM macaddrtmp WHERE a < '22:00:5c:e5:9b:0d'::macaddr; count diff --git a/contrib/btree_gist/expected/macaddr8.out b/contrib/btree_gist/expected/macaddr8.out index e5ec6a5deab1b..910223cd3b22e 100644 --- a/contrib/btree_gist/expected/macaddr8.out +++ b/contrib/btree_gist/expected/macaddr8.out @@ -32,7 +32,14 @@ SELECT count(*) FROM macaddr8tmp WHERE a > '22:00:5c:e5:9b:0d'; 540 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX macaddr8idx ON macaddr8tmp USING gist ( a ); +DEBUG: building index "macaddr8idx" on table "macaddr8tmp" serially +DEBUG: using sorted GiST build +CREATE INDEX macaddr8idx_b ON macaddr8tmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "macaddr8idx_b" on table "macaddr8tmp" serially +DROP INDEX macaddr8idx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM macaddr8tmp WHERE a < '22:00:5c:e5:9b:0d'::macaddr8; count diff --git a/contrib/btree_gist/expected/numeric.out b/contrib/btree_gist/expected/numeric.out index ae839b8ec839d..8dce480c30347 100644 --- a/contrib/btree_gist/expected/numeric.out +++ b/contrib/btree_gist/expected/numeric.out @@ -94,7 +94,14 @@ SELECT count(*) FROM numerictmp WHERE a > 0 ; 576 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX numericidx ON numerictmp USING gist ( a ); +DEBUG: building index "numericidx" on table "numerictmp" serially +DEBUG: using sorted GiST build +CREATE INDEX numericidx_b ON numerictmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "numericidx_b" on table "numerictmp" serially +DROP INDEX numericidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM numerictmp WHERE a < -1890.0; count diff --git a/contrib/btree_gist/expected/oid.out b/contrib/btree_gist/expected/oid.out index 776bbb10267c4..da27172609b30 100644 --- a/contrib/btree_gist/expected/oid.out +++ b/contrib/btree_gist/expected/oid.out @@ -32,7 +32,14 @@ SELECT count(*) FROM oidtmp WHERE oid > 17; 983 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX oididx ON oidtmp USING gist ( oid ); +DEBUG: building index "oididx" on table "oidtmp" serially +DEBUG: using sorted GiST build +CREATE INDEX oididx_b ON oidtmp USING gist ( oid ) WITH (buffering=on); +DEBUG: building index "oididx_b" on table "oidtmp" serially +DROP INDEX oididx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM oidtmp WHERE oid < 17; count diff --git a/contrib/btree_gist/expected/text.out b/contrib/btree_gist/expected/text.out index bb4e2e62d1d53..2e760d1487140 100644 --- a/contrib/btree_gist/expected/text.out +++ b/contrib/btree_gist/expected/text.out @@ -33,7 +33,14 @@ SELECT count(*) FROM texttmp WHERE a > '31b0'; 400 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX textidx ON texttmp USING GIST ( a ); +DEBUG: building index "textidx" on table "texttmp" serially +DEBUG: using sorted GiST build +CREATE INDEX textidx_b ON texttmp USING GIST ( a ) WITH (buffering=on); +DEBUG: building index "textidx_b" on table "texttmp" serially +DROP INDEX textidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM texttmp WHERE a < '31b0'::text; count diff --git a/contrib/btree_gist/expected/time.out b/contrib/btree_gist/expected/time.out index ec95ef77c57a6..9b81e58ed4dbf 100644 --- a/contrib/btree_gist/expected/time.out +++ b/contrib/btree_gist/expected/time.out @@ -40,7 +40,14 @@ SELECT a, a <-> '10:57:11' FROM timetmp ORDER BY a <-> '10:57:11' LIMIT 3; 10:55:32 | @ 1 min 39 secs (3 rows) +SET client_min_messages = DEBUG1; CREATE INDEX timeidx ON timetmp USING gist ( a ); +DEBUG: building index "timeidx" on table "timetmp" serially +DEBUG: using sorted GiST build +CREATE INDEX timeidx_b ON timetmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "timeidx_b" on table "timetmp" serially +DROP INDEX timeidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM timetmp WHERE a < '10:57:11'::time; count diff --git a/contrib/btree_gist/expected/timestamp.out b/contrib/btree_gist/expected/timestamp.out index 0d94f2f245cea..8ea9897551c73 100644 --- a/contrib/btree_gist/expected/timestamp.out +++ b/contrib/btree_gist/expected/timestamp.out @@ -40,7 +40,14 @@ SELECT a, a <-> '2004-10-26 08:55:08' FROM timestamptmp ORDER BY a <-> '2004-10- Mon Nov 29 20:12:43 2004 | @ 34 days 11 hours 17 mins 35 secs (3 rows) +SET client_min_messages = DEBUG1; CREATE INDEX timestampidx ON timestamptmp USING gist ( a ); +DEBUG: building index "timestampidx" on table "timestamptmp" serially +DEBUG: using sorted GiST build +CREATE INDEX timestampidx_b ON timestamptmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "timestampidx_b" on table "timestamptmp" serially +DROP INDEX timestampidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM timestamptmp WHERE a < '2004-10-26 08:55:08'::timestamp; count diff --git a/contrib/btree_gist/expected/timestamptz.out b/contrib/btree_gist/expected/timestamptz.out index 75a15a425684f..2ba0dcd7ede90 100644 --- a/contrib/btree_gist/expected/timestamptz.out +++ b/contrib/btree_gist/expected/timestamptz.out @@ -100,7 +100,14 @@ SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> ' Thu Jan 24 12:28:12 2019 PST | @ 37 days 7 hours 28 mins 18 secs (3 rows) +SET client_min_messages = DEBUG1; CREATE INDEX timestamptzidx ON timestamptztmp USING gist ( a ); +DEBUG: building index "timestamptzidx" on table "timestamptztmp" serially +DEBUG: using sorted GiST build +CREATE INDEX timestamptzidx_b ON timestamptztmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "timestamptzidx_b" on table "timestamptztmp" serially +DROP INDEX timestamptzidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM timestamptztmp WHERE a < '2018-12-18 10:59:54 GMT+3'::timestamptz; count diff --git a/contrib/btree_gist/expected/timetz.out b/contrib/btree_gist/expected/timetz.out index 7f73e44797725..6c855bfcd6410 100644 --- a/contrib/btree_gist/expected/timetz.out +++ b/contrib/btree_gist/expected/timetz.out @@ -18,7 +18,14 @@ INSERT INTO timetzcmp (r_id,a) SELECT 22,count(*) FROM timetztmp WHERE a <= '07: INSERT INTO timetzcmp (r_id,a) SELECT 23,count(*) FROM timetztmp WHERE a = '07:46:45 GMT+4'; INSERT INTO timetzcmp (r_id,a) SELECT 24,count(*) FROM timetztmp WHERE a >= '07:46:45 GMT+4'; INSERT INTO timetzcmp (r_id,a) SELECT 25,count(*) FROM timetztmp WHERE a > '07:46:45 GMT+4'; +SET client_min_messages = DEBUG1; CREATE INDEX timetzidx ON timetztmp USING gist ( a ); +DEBUG: building index "timetzidx" on table "timetztmp" serially +DEBUG: using sorted GiST build +CREATE INDEX timetzidx_b ON timetztmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "timetzidx_b" on table "timetztmp" serially +DROP INDEX timetzidx_b; +RESET client_min_messages; SET enable_seqscan=off; UPDATE timetzcmp SET b=c FROM ( SELECT count(*) AS c FROM timetztmp WHERE a < '07:46:45 GMT+3'::timetz ) q WHERE r_id=1 ; UPDATE timetzcmp SET b=c FROM ( SELECT count(*) AS c FROM timetztmp WHERE a <= '07:46:45 GMT+3'::timetz ) q WHERE r_id=2 ; diff --git a/contrib/btree_gist/expected/uuid.out b/contrib/btree_gist/expected/uuid.out index a34b024603203..0f0f2960392b5 100644 --- a/contrib/btree_gist/expected/uuid.out +++ b/contrib/btree_gist/expected/uuid.out @@ -32,7 +32,14 @@ SELECT count(*) FROM uuidtmp WHERE a > '55e65ca2-4136-4a4b-ba78-cd3fe4678203'; 375 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX uuididx ON uuidtmp USING gist ( a ); +DEBUG: building index "uuididx" on table "uuidtmp" serially +DEBUG: using sorted GiST build +CREATE INDEX uuididx_b ON uuidtmp USING gist ( a ) WITH (buffering=on); +DEBUG: building index "uuididx_b" on table "uuidtmp" serially +DROP INDEX uuididx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM uuidtmp WHERE a < '55e65ca2-4136-4a4b-ba78-cd3fe4678203'::uuid; count diff --git a/contrib/btree_gist/expected/varbit.out b/contrib/btree_gist/expected/varbit.out index ede36bc3ead1f..9cd41f4c9aaf9 100644 --- a/contrib/btree_gist/expected/varbit.out +++ b/contrib/btree_gist/expected/varbit.out @@ -32,7 +32,14 @@ SELECT count(*) FROM varbittmp WHERE a > '1110100111010'; 50 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX varbitidx ON varbittmp USING GIST ( a ); +DEBUG: building index "varbitidx" on table "varbittmp" serially +DEBUG: using sorted GiST build +CREATE INDEX varbitidx_b ON varbittmp USING GIST ( a ) WITH (buffering=on); +DEBUG: building index "varbitidx_b" on table "varbittmp" serially +DROP INDEX varbitidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM varbittmp WHERE a < '1110100111010'::varbit; count diff --git a/contrib/btree_gist/expected/varchar.out b/contrib/btree_gist/expected/varchar.out index d071d714cdddd..0520eb473155c 100644 --- a/contrib/btree_gist/expected/varchar.out +++ b/contrib/btree_gist/expected/varchar.out @@ -32,7 +32,14 @@ SELECT count(*) FROM vchartmp WHERE a > '31b0'::varchar(32); 400 (1 row) +SET client_min_messages = DEBUG1; CREATE INDEX vcharidx ON vchartmp USING GIST ( text(a) ); +DEBUG: building index "vcharidx" on table "vchartmp" serially +DEBUG: using sorted GiST build +CREATE INDEX vcharidx_b ON vchartmp USING GIST ( text(a) ) WITH (buffering=on); +DEBUG: building index "vcharidx_b" on table "vchartmp" serially +DROP INDEX vcharidx_b; +RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM vchartmp WHERE a < '31b0'::varchar(32); count diff --git a/contrib/btree_gist/sql/bit.sql b/contrib/btree_gist/sql/bit.sql index a733042023f0f..53c67cf77acfe 100644 --- a/contrib/btree_gist/sql/bit.sql +++ b/contrib/btree_gist/sql/bit.sql @@ -16,7 +16,11 @@ SELECT count(*) FROM bittmp WHERE a >= '011011000100010111011000110000100'; SELECT count(*) FROM bittmp WHERE a > '011011000100010111011000110000100'; +SET client_min_messages = DEBUG1; CREATE INDEX bitidx ON bittmp USING GIST ( a ); +CREATE INDEX bitidx_b ON bittmp USING GIST ( a ) WITH (buffering=on); +DROP INDEX bitidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/bytea.sql b/contrib/btree_gist/sql/bytea.sql index 6885f5e56d5c8..fdfa0c345bd52 100644 --- a/contrib/btree_gist/sql/bytea.sql +++ b/contrib/btree_gist/sql/bytea.sql @@ -17,7 +17,11 @@ SELECT count(*) FROM byteatmp WHERE a >= '31b0'; SELECT count(*) FROM byteatmp WHERE a > '31b0'; +SET client_min_messages = DEBUG1; CREATE INDEX byteaidx ON byteatmp USING GIST ( a ); +CREATE INDEX byteaidx_b ON byteatmp USING GIST ( a ) WITH (buffering=on); +DROP INDEX byteaidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/cash.sql b/contrib/btree_gist/sql/cash.sql index 4526cc4f0aa63..0581b3593efa5 100644 --- a/contrib/btree_gist/sql/cash.sql +++ b/contrib/btree_gist/sql/cash.sql @@ -18,7 +18,11 @@ SELECT count(*) FROM moneytmp WHERE a > '22649.64'; SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3; +SET client_min_messages = DEBUG1; CREATE INDEX moneyidx ON moneytmp USING gist ( a ); +CREATE INDEX moneyidx_b ON moneytmp USING gist ( a ) WITH (buffering=on); +DROP INDEX moneyidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/char.sql b/contrib/btree_gist/sql/char.sql index f6eb52e6724f1..234eabee3b894 100644 --- a/contrib/btree_gist/sql/char.sql +++ b/contrib/btree_gist/sql/char.sql @@ -16,7 +16,11 @@ SELECT count(*) FROM chartmp WHERE a >= '31b0'::char(32); SELECT count(*) FROM chartmp WHERE a > '31b0'::char(32); +SET client_min_messages = DEBUG1; CREATE INDEX charidx ON chartmp USING GIST ( a ); +CREATE INDEX charidx_b ON chartmp USING GIST ( a ) WITH (buffering=on); +DROP INDEX charidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/cidr.sql b/contrib/btree_gist/sql/cidr.sql index 9bd77185b96a8..be2d22b079a62 100644 --- a/contrib/btree_gist/sql/cidr.sql +++ b/contrib/btree_gist/sql/cidr.sql @@ -15,7 +15,11 @@ SELECT count(*) FROM cidrtmp WHERE a >= '121.111.63.82'; SELECT count(*) FROM cidrtmp WHERE a > '121.111.63.82'; +SET client_min_messages = DEBUG1; CREATE INDEX cidridx ON cidrtmp USING gist ( a ); +CREATE INDEX cidridx_b ON cidrtmp USING gist ( a ) WITH (buffering=on); +DROP INDEX cidridx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/date.sql b/contrib/btree_gist/sql/date.sql index f969ef0a08cb3..f007402bacc77 100644 --- a/contrib/btree_gist/sql/date.sql +++ b/contrib/btree_gist/sql/date.sql @@ -18,7 +18,11 @@ SELECT count(*) FROM datetmp WHERE a > '2001-02-13'; SELECT a, a <-> '2001-02-13' FROM datetmp ORDER BY a <-> '2001-02-13' LIMIT 3; +SET client_min_messages = DEBUG1; CREATE INDEX dateidx ON datetmp USING gist ( a ); +CREATE INDEX dateidx_b ON datetmp USING gist ( a ) WITH (buffering=on); +DROP INDEX dateidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/enum.sql b/contrib/btree_gist/sql/enum.sql index 476211e97952c..d6dbcb423921d 100644 --- a/contrib/btree_gist/sql/enum.sql +++ b/contrib/btree_gist/sql/enum.sql @@ -20,7 +20,11 @@ SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow; SELECT count(*) FROM enumtmp WHERE a > 'g'::rainbow; +SET client_min_messages = DEBUG1; CREATE INDEX enumidx ON enumtmp USING gist ( a ); +CREATE INDEX enumidx_b ON enumtmp USING gist ( a ) WITH (buffering=on); +DROP INDEX enumidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/float4.sql b/contrib/btree_gist/sql/float4.sql index 3da1ce953c8d1..0e3eb49343ff9 100644 --- a/contrib/btree_gist/sql/float4.sql +++ b/contrib/btree_gist/sql/float4.sql @@ -18,7 +18,11 @@ SELECT count(*) FROM float4tmp WHERE a > -179.0; SELECT a, a <-> '-179.0' FROM float4tmp ORDER BY a <-> '-179.0' LIMIT 3; +SET client_min_messages = DEBUG1; CREATE INDEX float4idx ON float4tmp USING gist ( a ); +CREATE INDEX float4idx_b ON float4tmp USING gist ( a ) WITH (buffering=on); +DROP INDEX float4idx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/float8.sql b/contrib/btree_gist/sql/float8.sql index e1e819b37f98c..6a216dd6065ba 100644 --- a/contrib/btree_gist/sql/float8.sql +++ b/contrib/btree_gist/sql/float8.sql @@ -18,7 +18,11 @@ SELECT count(*) FROM float8tmp WHERE a > -1890.0; SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3; +SET client_min_messages = DEBUG1; CREATE INDEX float8idx ON float8tmp USING gist ( a ); +CREATE INDEX float8idx_b ON float8tmp USING gist ( a ) WITH (buffering=on); +DROP INDEX float8idx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/inet.sql b/contrib/btree_gist/sql/inet.sql index 4b8d354b00ee5..0339c853d3822 100644 --- a/contrib/btree_gist/sql/inet.sql +++ b/contrib/btree_gist/sql/inet.sql @@ -16,7 +16,11 @@ SELECT count(*) FROM inettmp WHERE a >= '89.225.196.191'; SELECT count(*) FROM inettmp WHERE a > '89.225.196.191'; +SET client_min_messages = DEBUG1; CREATE INDEX inetidx ON inettmp USING gist ( a ); +CREATE INDEX inetidx_b ON inettmp USING gist ( a ) WITH (buffering=on); +DROP INDEX inetidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/int2.sql b/contrib/btree_gist/sql/int2.sql index 988518795fc56..bf98ac65f8305 100644 --- a/contrib/btree_gist/sql/int2.sql +++ b/contrib/btree_gist/sql/int2.sql @@ -18,7 +18,11 @@ SELECT count(*) FROM int2tmp WHERE a > 237; SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3; +SET client_min_messages = DEBUG1; CREATE INDEX int2idx ON int2tmp USING gist ( a ); +CREATE INDEX int2idx_b ON int2tmp USING gist ( a ) WITH (buffering=on); +DROP INDEX int2idx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/int4.sql b/contrib/btree_gist/sql/int4.sql index 659ab5ee24bbc..214993314afb7 100644 --- a/contrib/btree_gist/sql/int4.sql +++ b/contrib/btree_gist/sql/int4.sql @@ -18,7 +18,11 @@ SELECT count(*) FROM int4tmp WHERE a > 237; SELECT a, a <-> '237' FROM int4tmp ORDER BY a <-> '237' LIMIT 3; +SET client_min_messages = DEBUG1; CREATE INDEX int4idx ON int4tmp USING gist ( a ); +CREATE INDEX int4idx_b ON int4tmp USING gist ( a ) WITH (buffering=on); +DROP INDEX int4idx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/int8.sql b/contrib/btree_gist/sql/int8.sql index 51e55e9c14b87..8a6c2a4bfd1c8 100644 --- a/contrib/btree_gist/sql/int8.sql +++ b/contrib/btree_gist/sql/int8.sql @@ -18,7 +18,11 @@ SELECT count(*) FROM int8tmp WHERE a > 464571291354841; SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' LIMIT 3; +SET client_min_messages = DEBUG1; CREATE INDEX int8idx ON int8tmp USING gist ( a ); +CREATE INDEX int8idx_b ON int8tmp USING gist ( a ) WITH (buffering=on); +DROP INDEX int8idx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/interval.sql b/contrib/btree_gist/sql/interval.sql index 346d6adcb51ef..6f9b1d4a39aa0 100644 --- a/contrib/btree_gist/sql/interval.sql +++ b/contrib/btree_gist/sql/interval.sql @@ -18,7 +18,11 @@ SELECT count(*) FROM intervaltmp WHERE a > '199 days 21:21:23'; SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3; +SET client_min_messages = DEBUG1; CREATE INDEX intervalidx ON intervaltmp USING gist ( a ); +CREATE INDEX intervalidx_b ON intervaltmp USING gist ( a ) WITH (buffering=on); +DROP INDEX intervalidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/macaddr.sql b/contrib/btree_gist/sql/macaddr.sql index 85c271f7ce3c6..bccfc820ca40a 100644 --- a/contrib/btree_gist/sql/macaddr.sql +++ b/contrib/btree_gist/sql/macaddr.sql @@ -16,7 +16,11 @@ SELECT count(*) FROM macaddrtmp WHERE a >= '22:00:5c:e5:9b:0d'; SELECT count(*) FROM macaddrtmp WHERE a > '22:00:5c:e5:9b:0d'; +SET client_min_messages = DEBUG1; CREATE INDEX macaddridx ON macaddrtmp USING gist ( a ); +CREATE INDEX macaddridx_b ON macaddrtmp USING gist ( a ) WITH (buffering=on); +DROP INDEX macaddridx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/macaddr8.sql b/contrib/btree_gist/sql/macaddr8.sql index 61e7d7af405d1..2d0447a777b6a 100644 --- a/contrib/btree_gist/sql/macaddr8.sql +++ b/contrib/btree_gist/sql/macaddr8.sql @@ -16,7 +16,11 @@ SELECT count(*) FROM macaddr8tmp WHERE a >= '22:00:5c:e5:9b:0d'; SELECT count(*) FROM macaddr8tmp WHERE a > '22:00:5c:e5:9b:0d'; +SET client_min_messages = DEBUG1; CREATE INDEX macaddr8idx ON macaddr8tmp USING gist ( a ); +CREATE INDEX macaddr8idx_b ON macaddr8tmp USING gist ( a ) WITH (buffering=on); +DROP INDEX macaddr8idx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/numeric.sql b/contrib/btree_gist/sql/numeric.sql index dbb2f2f1838a8..55ecbcdadc574 100644 --- a/contrib/btree_gist/sql/numeric.sql +++ b/contrib/btree_gist/sql/numeric.sql @@ -40,7 +40,11 @@ SELECT count(*) FROM numerictmp WHERE a >= 0 ; SELECT count(*) FROM numerictmp WHERE a > 0 ; +SET client_min_messages = DEBUG1; CREATE INDEX numericidx ON numerictmp USING gist ( a ); +CREATE INDEX numericidx_b ON numerictmp USING gist ( a ) WITH (buffering=on); +DROP INDEX numericidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/oid.sql b/contrib/btree_gist/sql/oid.sql index c9358234ce9f4..bc9ee0cba348d 100644 --- a/contrib/btree_gist/sql/oid.sql +++ b/contrib/btree_gist/sql/oid.sql @@ -15,7 +15,11 @@ SELECT count(*) FROM oidtmp WHERE oid >= 17; SELECT count(*) FROM oidtmp WHERE oid > 17; +SET client_min_messages = DEBUG1; CREATE INDEX oididx ON oidtmp USING gist ( oid ); +CREATE INDEX oididx_b ON oidtmp USING gist ( oid ) WITH (buffering=on); +DROP INDEX oididx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/text.sql b/contrib/btree_gist/sql/text.sql index 46597e731d65d..52705a216d111 100644 --- a/contrib/btree_gist/sql/text.sql +++ b/contrib/btree_gist/sql/text.sql @@ -17,7 +17,11 @@ SELECT count(*) FROM texttmp WHERE a >= '31b0'; SELECT count(*) FROM texttmp WHERE a > '31b0'; +SET client_min_messages = DEBUG1; CREATE INDEX textidx ON texttmp USING GIST ( a ); +CREATE INDEX textidx_b ON texttmp USING GIST ( a ) WITH (buffering=on); +DROP INDEX textidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/time.sql b/contrib/btree_gist/sql/time.sql index 6104e7f61c8e2..6123945213130 100644 --- a/contrib/btree_gist/sql/time.sql +++ b/contrib/btree_gist/sql/time.sql @@ -18,7 +18,11 @@ SELECT count(*) FROM timetmp WHERE a > '10:57:11'; SELECT a, a <-> '10:57:11' FROM timetmp ORDER BY a <-> '10:57:11' LIMIT 3; +SET client_min_messages = DEBUG1; CREATE INDEX timeidx ON timetmp USING gist ( a ); +CREATE INDEX timeidx_b ON timetmp USING gist ( a ) WITH (buffering=on); +DROP INDEX timeidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/timestamp.sql b/contrib/btree_gist/sql/timestamp.sql index 95effebfc47a7..66a14f5ae516e 100644 --- a/contrib/btree_gist/sql/timestamp.sql +++ b/contrib/btree_gist/sql/timestamp.sql @@ -18,7 +18,11 @@ SELECT count(*) FROM timestamptmp WHERE a > '2004-10-26 08:55:08'; SELECT a, a <-> '2004-10-26 08:55:08' FROM timestamptmp ORDER BY a <-> '2004-10-26 08:55:08' LIMIT 3; +SET client_min_messages = DEBUG1; CREATE INDEX timestampidx ON timestamptmp USING gist ( a ); +CREATE INDEX timestampidx_b ON timestamptmp USING gist ( a ) WITH (buffering=on); +DROP INDEX timestampidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/timestamptz.sql b/contrib/btree_gist/sql/timestamptz.sql index f70caa4a6492c..2a92f63fc4a0a 100644 --- a/contrib/btree_gist/sql/timestamptz.sql +++ b/contrib/btree_gist/sql/timestamptz.sql @@ -39,7 +39,11 @@ SELECT count(*) FROM timestamptztmp WHERE a > '2018-12-18 10:59:54 GMT+4'; SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3; +SET client_min_messages = DEBUG1; CREATE INDEX timestamptzidx ON timestamptztmp USING gist ( a ); +CREATE INDEX timestamptzidx_b ON timestamptztmp USING gist ( a ) WITH (buffering=on); +DROP INDEX timestamptzidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/timetz.sql b/contrib/btree_gist/sql/timetz.sql index 2fb725db747f5..bc79d134b8f57 100644 --- a/contrib/btree_gist/sql/timetz.sql +++ b/contrib/btree_gist/sql/timetz.sql @@ -42,7 +42,11 @@ INSERT INTO timetzcmp (r_id,a) SELECT 25,count(*) FROM timetztmp WHERE a > '07: +SET client_min_messages = DEBUG1; CREATE INDEX timetzidx ON timetztmp USING gist ( a ); +CREATE INDEX timetzidx_b ON timetztmp USING gist ( a ) WITH (buffering=on); +DROP INDEX timetzidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/uuid.sql b/contrib/btree_gist/sql/uuid.sql index 3f7ad764e2db0..7771bc0d8284c 100644 --- a/contrib/btree_gist/sql/uuid.sql +++ b/contrib/btree_gist/sql/uuid.sql @@ -16,7 +16,11 @@ SELECT count(*) FROM uuidtmp WHERE a >= '55e65ca2-4136-4a4b-ba78-cd3fe4678203'; SELECT count(*) FROM uuidtmp WHERE a > '55e65ca2-4136-4a4b-ba78-cd3fe4678203'; +SET client_min_messages = DEBUG1; CREATE INDEX uuididx ON uuidtmp USING gist ( a ); +CREATE INDEX uuididx_b ON uuidtmp USING gist ( a ) WITH (buffering=on); +DROP INDEX uuididx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/varbit.sql b/contrib/btree_gist/sql/varbit.sql index e2a33b5a1b046..6d8243572bf67 100644 --- a/contrib/btree_gist/sql/varbit.sql +++ b/contrib/btree_gist/sql/varbit.sql @@ -16,7 +16,11 @@ SELECT count(*) FROM varbittmp WHERE a >= '1110100111010'; SELECT count(*) FROM varbittmp WHERE a > '1110100111010'; +SET client_min_messages = DEBUG1; CREATE INDEX varbitidx ON varbittmp USING GIST ( a ); +CREATE INDEX varbitidx_b ON varbittmp USING GIST ( a ) WITH (buffering=on); +DROP INDEX varbitidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/varchar.sql b/contrib/btree_gist/sql/varchar.sql index 8087a17704e7a..59b77e0983c81 100644 --- a/contrib/btree_gist/sql/varchar.sql +++ b/contrib/btree_gist/sql/varchar.sql @@ -16,7 +16,11 @@ SELECT count(*) FROM vchartmp WHERE a >= '31b0'::varchar(32); SELECT count(*) FROM vchartmp WHERE a > '31b0'::varchar(32); +SET client_min_messages = DEBUG1; CREATE INDEX vcharidx ON vchartmp USING GIST ( text(a) ); +CREATE INDEX vcharidx_b ON vchartmp USING GIST ( text(a) ) WITH (buffering=on); +DROP INDEX vcharidx_b; +RESET client_min_messages; SET enable_seqscan=off; diff --git a/src/backend/access/gist/gistbuild.c b/src/backend/access/gist/gistbuild.c index 1054f6f1f2e34..a90e3de3326b8 100644 --- a/src/backend/access/gist/gistbuild.c +++ b/src/backend/access/gist/gistbuild.c @@ -260,6 +260,7 @@ gistbuild(Relation heap, Relation index, IndexInfo *indexInfo) /* * Sort all data, build the index from bottom up. */ + elog(DEBUG1, "using sorted GiST build"); buildstate.sortstate = tuplesort_begin_index_gist(heap, index, maintenance_work_mem, From d92b1cdbab408d8f1299257125c9ae375f3ca644 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Wed, 7 Apr 2021 14:33:21 +0300 Subject: [PATCH 017/671] Revert "Add sortsupport for gist_btree opclasses, for faster index builds." This reverts commit 9f984ba6d23dc6eecebf479ab1d3f2e550a4e9be. It was making the buildfarm unhappy, apparently setting client_min_messages in a regression test produces different output if log_statement='all'. Another issue is that I now suspect the bit sortsupport function was in fact not correct to call byteacmp(). Revert to investigate both of those issues. --- contrib/btree_gist/Makefile | 2 +- contrib/btree_gist/btree_bit.c | 25 --- contrib/btree_gist/btree_bytea.c | 26 +-- contrib/btree_gist/btree_cash.c | 80 --------- contrib/btree_gist/btree_date.c | 27 --- contrib/btree_gist/btree_enum.c | 70 -------- contrib/btree_gist/btree_float4.c | 71 -------- contrib/btree_gist/btree_float8.c | 77 --------- contrib/btree_gist/btree_gist--1.6--1.7.sql | 182 -------------------- contrib/btree_gist/btree_gist.control | 2 +- contrib/btree_gist/btree_gist.h | 1 - contrib/btree_gist/btree_inet.c | 77 --------- contrib/btree_gist/btree_int2.c | 70 -------- contrib/btree_gist/btree_int4.c | 70 -------- contrib/btree_gist/btree_int8.c | 80 --------- contrib/btree_gist/btree_interval.c | 27 --- contrib/btree_gist/btree_macaddr.c | 78 --------- contrib/btree_gist/btree_macaddr8.c | 78 --------- contrib/btree_gist/btree_numeric.c | 29 ---- contrib/btree_gist/btree_oid.c | 70 -------- contrib/btree_gist/btree_text.c | 25 --- contrib/btree_gist/btree_time.c | 27 --- contrib/btree_gist/btree_ts.c | 27 --- contrib/btree_gist/btree_uuid.c | 25 --- contrib/btree_gist/expected/bit.out | 7 - contrib/btree_gist/expected/bytea.out | 7 - contrib/btree_gist/expected/cash.out | 7 - contrib/btree_gist/expected/char.out | 7 - contrib/btree_gist/expected/cidr.out | 7 - contrib/btree_gist/expected/date.out | 7 - contrib/btree_gist/expected/enum.out | 7 - contrib/btree_gist/expected/float4.out | 7 - contrib/btree_gist/expected/float8.out | 7 - contrib/btree_gist/expected/inet.out | 7 - contrib/btree_gist/expected/int2.out | 7 - contrib/btree_gist/expected/int4.out | 7 - contrib/btree_gist/expected/int8.out | 7 - contrib/btree_gist/expected/interval.out | 7 - contrib/btree_gist/expected/macaddr.out | 7 - contrib/btree_gist/expected/macaddr8.out | 7 - contrib/btree_gist/expected/numeric.out | 7 - contrib/btree_gist/expected/oid.out | 7 - contrib/btree_gist/expected/text.out | 7 - contrib/btree_gist/expected/time.out | 7 - contrib/btree_gist/expected/timestamp.out | 7 - contrib/btree_gist/expected/timestamptz.out | 7 - contrib/btree_gist/expected/timetz.out | 7 - contrib/btree_gist/expected/uuid.out | 7 - contrib/btree_gist/expected/varbit.out | 7 - contrib/btree_gist/expected/varchar.out | 7 - contrib/btree_gist/sql/bit.sql | 4 - contrib/btree_gist/sql/bytea.sql | 4 - contrib/btree_gist/sql/cash.sql | 4 - contrib/btree_gist/sql/char.sql | 4 - contrib/btree_gist/sql/cidr.sql | 4 - contrib/btree_gist/sql/date.sql | 4 - contrib/btree_gist/sql/enum.sql | 4 - contrib/btree_gist/sql/float4.sql | 4 - contrib/btree_gist/sql/float8.sql | 4 - contrib/btree_gist/sql/inet.sql | 4 - contrib/btree_gist/sql/int2.sql | 4 - contrib/btree_gist/sql/int4.sql | 4 - contrib/btree_gist/sql/int8.sql | 4 - contrib/btree_gist/sql/interval.sql | 4 - contrib/btree_gist/sql/macaddr.sql | 4 - contrib/btree_gist/sql/macaddr8.sql | 4 - contrib/btree_gist/sql/numeric.sql | 4 - contrib/btree_gist/sql/oid.sql | 4 - contrib/btree_gist/sql/text.sql | 4 - contrib/btree_gist/sql/time.sql | 4 - contrib/btree_gist/sql/timestamp.sql | 4 - contrib/btree_gist/sql/timestamptz.sql | 4 - contrib/btree_gist/sql/timetz.sql | 4 - contrib/btree_gist/sql/uuid.sql | 4 - contrib/btree_gist/sql/varbit.sql | 4 - contrib/btree_gist/sql/varchar.sql | 4 - src/backend/access/gist/gistbuild.c | 1 - 77 files changed, 3 insertions(+), 1530 deletions(-) delete mode 100644 contrib/btree_gist/btree_gist--1.6--1.7.sql diff --git a/contrib/btree_gist/Makefile b/contrib/btree_gist/Makefile index a1f818f71e6ff..e92d974a1a3bf 100644 --- a/contrib/btree_gist/Makefile +++ b/contrib/btree_gist/Makefile @@ -32,7 +32,7 @@ EXTENSION = btree_gist DATA = btree_gist--1.0--1.1.sql \ btree_gist--1.1--1.2.sql btree_gist--1.2.sql btree_gist--1.2--1.3.sql \ btree_gist--1.3--1.4.sql btree_gist--1.4--1.5.sql \ - btree_gist--1.5--1.6.sql btree_gist--1.6--1.7.sql + btree_gist--1.5--1.6.sql PGFILEDESC = "btree_gist - B-tree equivalent GiST operator classes" REGRESS = init int2 int4 int8 float4 float8 cash oid timestamp timestamptz \ diff --git a/contrib/btree_gist/btree_bit.c b/contrib/btree_gist/btree_bit.c index 61b2eecfd593b..2225244ded598 100644 --- a/contrib/btree_gist/btree_bit.c +++ b/contrib/btree_gist/btree_bit.c @@ -19,7 +19,6 @@ PG_FUNCTION_INFO_V1(gbt_bit_picksplit); PG_FUNCTION_INFO_V1(gbt_bit_consistent); PG_FUNCTION_INFO_V1(gbt_bit_penalty); PG_FUNCTION_INFO_V1(gbt_bit_same); -PG_FUNCTION_INFO_V1(gbt_bit_sortsupport); /* define for comparison */ @@ -210,27 +209,3 @@ gbt_bit_penalty(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo)); } - -static int -gbt_bit_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - /* Use byteacmp(), like gbt_bitcmp() does */ - return DatumGetInt32(DirectFunctionCall2(byteacmp, - PointerGetDatum(a), - PointerGetDatum(b))); -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_bit_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - ssup->comparator = gbt_bit_sort_build_cmp; - ssup->abbrev_converter = NULL; - ssup->abbrev_abort = NULL; - ssup->abbrev_full_comparator = NULL; - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_bytea.c b/contrib/btree_gist/btree_bytea.c index a2abfb7d7c272..6b005f0157e29 100644 --- a/contrib/btree_gist/btree_bytea.c +++ b/contrib/btree_gist/btree_bytea.c @@ -18,7 +18,6 @@ PG_FUNCTION_INFO_V1(gbt_bytea_picksplit); PG_FUNCTION_INFO_V1(gbt_bytea_consistent); PG_FUNCTION_INFO_V1(gbt_bytea_penalty); PG_FUNCTION_INFO_V1(gbt_bytea_same); -PG_FUNCTION_INFO_V1(gbt_bytea_sortsupport); /* define for comparison */ @@ -88,7 +87,7 @@ static const gbtree_vinfo tinfo = /************************************************** - * Bytea ops + * Text ops **************************************************/ @@ -169,26 +168,3 @@ gbt_bytea_penalty(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo)); } - -static int -gbt_bytea_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - return DatumGetInt32(DirectFunctionCall2(byteacmp, - PointerGetDatum(a), - PointerGetDatum(b))); -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_bytea_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - ssup->comparator = gbt_bytea_sort_build_cmp; - ssup->abbrev_converter = NULL; - ssup->abbrev_abort = NULL; - ssup->abbrev_full_comparator = NULL; - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_cash.c b/contrib/btree_gist/btree_cash.c index dbd72d3ea08d9..dfa23224b6f09 100644 --- a/contrib/btree_gist/btree_cash.c +++ b/contrib/btree_gist/btree_cash.c @@ -25,7 +25,6 @@ PG_FUNCTION_INFO_V1(gbt_cash_consistent); PG_FUNCTION_INFO_V1(gbt_cash_distance); PG_FUNCTION_INFO_V1(gbt_cash_penalty); PG_FUNCTION_INFO_V1(gbt_cash_same); -PG_FUNCTION_INFO_V1(gbt_cash_sortsupport); static bool gbt_cashgt(const void *a, const void *b, FmgrInfo *flinfo) @@ -217,82 +216,3 @@ gbt_cash_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_cash_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - cashKEY *ia = (cashKEY *) DatumGetPointer(a); - cashKEY *ib = (cashKEY *) DatumGetPointer(b); - - /* for leaf items we expect lower == upper */ - Assert(ia->lower == ia->upper); - Assert(ib->lower == ib->upper); - - if (ia->lower == ib->lower) - return 0; - - return (ia->lower > ib->lower) ? 1 : -1; -} - -static Datum -gbt_cash_abbrev_convert(Datum original, SortSupport ssup) -{ - cashKEY *b1 = (cashKEY *) DatumGetPointer(original); - int64 z = b1->lower; - -#if SIZEOF_DATUM == 8 - return Int64GetDatum(z); -#else - return Int32GetDatum(z >> 32); -#endif -} - -static int -gbt_cash_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) -{ -#if SIZEOF_DATUM == 8 - int64 a = DatumGetInt64(z1); - int64 b = DatumGetInt64(z2); -#else - int32 a = DatumGetInt32(z1); - int32 b = DatumGetInt32(z2); -#endif - - if (a > b) - return 1; - else if (a < b) - return -1; - else - return 0; -} - -/* - * We never consider aborting the abbreviation. - */ -static bool -gbt_cash_abbrev_abort(int memtupcount, SortSupport ssup) -{ - return false; -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_cash_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - if (ssup->abbreviate) - { - ssup->comparator = gbt_cash_cmp_abbrev; - ssup->abbrev_converter = gbt_cash_abbrev_convert; - ssup->abbrev_abort = gbt_cash_abbrev_abort; - ssup->abbrev_full_comparator = gbt_cash_sort_build_cmp; - } - else - { - ssup->comparator = gbt_cash_sort_build_cmp; - } - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_date.c b/contrib/btree_gist/btree_date.c index 3abb6e9c475a0..455a265a49753 100644 --- a/contrib/btree_gist/btree_date.c +++ b/contrib/btree_gist/btree_date.c @@ -25,7 +25,6 @@ PG_FUNCTION_INFO_V1(gbt_date_consistent); PG_FUNCTION_INFO_V1(gbt_date_distance); PG_FUNCTION_INFO_V1(gbt_date_penalty); PG_FUNCTION_INFO_V1(gbt_date_same); -PG_FUNCTION_INFO_V1(gbt_date_sortsupport); static bool gbt_dategt(const void *a, const void *b, FmgrInfo *flinfo) @@ -258,29 +257,3 @@ gbt_date_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_date_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - dateKEY *ia = (dateKEY *) PointerGetDatum(a); - dateKEY *ib = (dateKEY *) PointerGetDatum(b); - - return DatumGetInt32(DirectFunctionCall2(date_cmp, - DateADTGetDatum(ia->lower), - DateADTGetDatum(ib->lower))); -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_date_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - ssup->comparator = gbt_date_sort_build_cmp; - ssup->abbrev_converter = NULL; - ssup->abbrev_abort = NULL; - ssup->abbrev_full_comparator = NULL; - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_enum.c b/contrib/btree_gist/btree_enum.c index e8c5bc5ffe11d..d4dc38a38e524 100644 --- a/contrib/btree_gist/btree_enum.c +++ b/contrib/btree_gist/btree_enum.c @@ -26,7 +26,6 @@ PG_FUNCTION_INFO_V1(gbt_enum_picksplit); PG_FUNCTION_INFO_V1(gbt_enum_consistent); PG_FUNCTION_INFO_V1(gbt_enum_penalty); PG_FUNCTION_INFO_V1(gbt_enum_same); -PG_FUNCTION_INFO_V1(gbt_enum_sortsupport); static bool @@ -184,72 +183,3 @@ gbt_enum_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_enum_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - oidKEY *ia = (oidKEY *) DatumGetPointer(a); - oidKEY *ib = (oidKEY *) DatumGetPointer(b); - - /* for leaf items we expect lower == upper */ - Assert(ia->lower == ia->upper); - Assert(ib->lower == ib->upper); - - if (ia->lower == ib->lower) - return 0; - - return (ia->lower > ib->lower) ? 1 : -1; -} - -static Datum -gbt_enum_abbrev_convert(Datum original, SortSupport ssup) -{ - oidKEY *b1 = (oidKEY *) DatumGetPointer(original); - - return ObjectIdGetDatum(b1->lower); -} - -static int -gbt_enum_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) -{ - Oid a = DatumGetObjectId(z1); - Oid b = DatumGetObjectId(z2); - - if (a > b) - return 1; - else if (a < b) - return -1; - else - return 0; -} - -/* - * We never consider aborting the abbreviation. - */ -static bool -gbt_enum_abbrev_abort(int memtupcount, SortSupport ssup) -{ - return false; -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_enum_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - if (ssup->abbreviate) - { - ssup->comparator = gbt_enum_cmp_abbrev; - ssup->abbrev_converter = gbt_enum_abbrev_convert; - ssup->abbrev_abort = gbt_enum_abbrev_abort; - ssup->abbrev_full_comparator = gbt_enum_sort_build_cmp; - } - else - { - ssup->comparator = gbt_enum_sort_build_cmp; - } - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_float4.c b/contrib/btree_gist/btree_float4.c index 016b2d3d68ffc..3604c73313a95 100644 --- a/contrib/btree_gist/btree_float4.c +++ b/contrib/btree_gist/btree_float4.c @@ -23,7 +23,6 @@ PG_FUNCTION_INFO_V1(gbt_float4_consistent); PG_FUNCTION_INFO_V1(gbt_float4_distance); PG_FUNCTION_INFO_V1(gbt_float4_penalty); PG_FUNCTION_INFO_V1(gbt_float4_same); -PG_FUNCTION_INFO_V1(gbt_float4_sortsupport); static bool gbt_float4gt(const void *a, const void *b, FmgrInfo *flinfo) @@ -210,73 +209,3 @@ gbt_float4_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - - -static int -gbt_float4_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - float4KEY *ia = (float4KEY *) DatumGetPointer(a); - float4KEY *ib = (float4KEY *) DatumGetPointer(b); - - /* for leaf items we expect lower == upper */ - Assert(ia->lower == ia->upper); - Assert(ib->lower == ib->upper); - - if (ia->lower == ib->lower) - return 0; - - return (ia->lower > ib->lower) ? 1 : -1; -} - -static Datum -gbt_float4_abbrev_convert(Datum original, SortSupport ssup) -{ - float4KEY *b1 = (float4KEY *) DatumGetPointer(original); - - return Float4GetDatum(b1->lower); -} - -static int -gbt_float4_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) -{ - float4 a = DatumGetFloat4(z1); - float4 b = DatumGetFloat4(z2); - - if (a > b) - return 1; - else if (a < b) - return -1; - else - return 0; -} - -/* - * We never consider aborting the abbreviation. - */ -static bool -gbt_float4_abbrev_abort(int memtupcount, SortSupport ssup) -{ - return false; -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_float4_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - if (ssup->abbreviate) - { - ssup->comparator = gbt_float4_cmp_abbrev; - ssup->abbrev_converter = gbt_float4_abbrev_convert; - ssup->abbrev_abort = gbt_float4_abbrev_abort; - ssup->abbrev_full_comparator = gbt_float4_sort_build_cmp; - } - else - { - ssup->comparator = gbt_float4_sort_build_cmp; - } - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_float8.c b/contrib/btree_gist/btree_float8.c index bee1e4e05e2c7..10a5262aaa7ca 100644 --- a/contrib/btree_gist/btree_float8.c +++ b/contrib/btree_gist/btree_float8.c @@ -23,7 +23,6 @@ PG_FUNCTION_INFO_V1(gbt_float8_consistent); PG_FUNCTION_INFO_V1(gbt_float8_distance); PG_FUNCTION_INFO_V1(gbt_float8_penalty); PG_FUNCTION_INFO_V1(gbt_float8_same); -PG_FUNCTION_INFO_V1(gbt_float8_sortsupport); static bool @@ -217,79 +216,3 @@ gbt_float8_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_float8_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - float8KEY *ia = (float8KEY *) DatumGetPointer(a); - float8KEY *ib = (float8KEY *) DatumGetPointer(b); - - /* for leaf items we expect lower == upper */ - Assert(ia->lower == ia->upper); - Assert(ib->lower == ib->upper); - - if (ia->lower == ib->lower) - return 0; - - return (ia->lower > ib->lower) ? 1 : -1; -} - -static Datum -gbt_float8_abbrev_convert(Datum original, SortSupport ssup) -{ - float8KEY *b1 = (float8KEY *) DatumGetPointer(original); - float8 z = b1->lower; - -#if SIZEOF_DATUM == 8 - return Float8GetDatum(z); -#else - return Float4GetDatum((float4) z); -#endif -} - -static int -gbt_float8_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) -{ -#if SIZEOF_DATUM == 8 - float8 a = DatumGetFloat8(z1); - float8 b = DatumGetFloat8(z2); -#else - float4 a = DatumGetFloat4(z1); - float4 b = DatumGetFloat4(z2); -#endif - - if (a > b) - return 1; - else if (a < b) - return -1; - else - return 0; -} - -static bool -gbt_float8_abbrev_abort(int memtupcount, SortSupport ssup) -{ - return false; -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_float8_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - if (ssup->abbreviate) - { - ssup->comparator = gbt_float8_cmp_abbrev; - ssup->abbrev_converter = gbt_float8_abbrev_convert; - ssup->abbrev_abort = gbt_float8_abbrev_abort; - ssup->abbrev_full_comparator = gbt_float8_sort_build_cmp; - } - else - { - ssup->comparator = gbt_float8_sort_build_cmp; - } - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_gist--1.6--1.7.sql b/contrib/btree_gist/btree_gist--1.6--1.7.sql deleted file mode 100644 index abb5b8b0f4386..0000000000000 --- a/contrib/btree_gist/btree_gist--1.6--1.7.sql +++ /dev/null @@ -1,182 +0,0 @@ -/* contrib/btree_gist/btree_gist--1.6--1.7.sql */ - --- complain if script is sourced in psql, rather than via CREATE EXTENSION -\echo Use "ALTER EXTENSION btree_gist UPDATE TO '1.7'" to load this file. \quit - - -CREATE FUNCTION gbt_int8_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_int8_ops USING gist ADD - FUNCTION 11 (int8, int8) gbt_int8_sortsupport (internal) ; - -CREATE FUNCTION gbt_int4_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_int4_ops USING gist ADD - FUNCTION 11 (int4, int4) gbt_int4_sortsupport (internal) ; - -CREATE FUNCTION gbt_int2_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_int2_ops USING gist ADD - FUNCTION 11 (int2, int2) gbt_int2_sortsupport (internal) ; - -CREATE FUNCTION gbt_float8_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_float8_ops USING gist ADD - FUNCTION 11 (float8, float8) gbt_float8_sortsupport (internal) ; - -CREATE FUNCTION gbt_float4_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_float4_ops USING gist ADD - FUNCTION 11 (float4, float4) gbt_float4_sortsupport (internal) ; - -CREATE FUNCTION gbt_enum_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_enum_ops USING gist ADD - FUNCTION 11 (anyenum, anyenum) gbt_enum_sortsupport (internal) ; - -CREATE FUNCTION gbt_oid_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_oid_ops USING gist ADD - FUNCTION 11 (oid, oid) gbt_oid_sortsupport (internal) ; - -CREATE FUNCTION gbt_cash_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_cash_ops USING gist ADD - FUNCTION 11 (money, money) gbt_cash_sortsupport (internal) ; - -CREATE FUNCTION gbt_inet_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_inet_ops USING gist ADD - FUNCTION 11 (inet, inet) gbt_inet_sortsupport (internal) ; - -ALTER OPERATOR FAMILY gist_cidr_ops USING gist ADD - FUNCTION 11 (cidr, cidr) gbt_inet_sortsupport (internal) ; - - -CREATE FUNCTION gbt_macad_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_macaddr_ops USING gist ADD - FUNCTION 11 (macaddr, macaddr) gbt_macad_sortsupport (internal) ; - -CREATE FUNCTION gbt_macad8_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_macaddr8_ops USING gist ADD - FUNCTION 11 (macaddr8, macaddr8) gbt_macad8_sortsupport (internal) ; - -CREATE FUNCTION gbt_numeric_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_numeric_ops USING gist ADD - FUNCTION 11 (numeric, numeric) gbt_numeric_sortsupport (internal) ; - -CREATE FUNCTION gbt_uuid_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_uuid_ops USING gist ADD - FUNCTION 11 (uuid, uuid) gbt_uuid_sortsupport (internal) ; - -CREATE FUNCTION gbt_ts_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_timestamp_ops USING gist ADD - FUNCTION 11 (timestamp, timestamp) gbt_ts_sortsupport (internal) ; - -ALTER OPERATOR FAMILY gist_timestamptz_ops USING gist ADD - FUNCTION 11 (timestamptz, timestamptz) gbt_ts_sortsupport (internal) ; - -CREATE FUNCTION gbt_text_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_text_ops USING gist ADD - FUNCTION 11 (text, text) gbt_text_sortsupport (internal) ; - -ALTER OPERATOR FAMILY gist_bpchar_ops USING gist ADD - FUNCTION 11 (bpchar, bpchar) gbt_text_sortsupport (internal) ; - -CREATE FUNCTION gbt_time_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_time_ops USING gist ADD - FUNCTION 11 (time, time) gbt_time_sortsupport (internal) ; - -ALTER OPERATOR FAMILY gist_timetz_ops USING gist ADD - FUNCTION 11 (timetz, timetz) gbt_time_sortsupport (internal) ; - -CREATE FUNCTION gbt_bytea_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_bytea_ops USING gist ADD - FUNCTION 11 (bytea, bytea) gbt_bytea_sortsupport (internal) ; - -CREATE FUNCTION gbt_date_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_date_ops USING gist ADD - FUNCTION 11 (date, date) gbt_date_sortsupport (internal) ; - -CREATE FUNCTION gbt_bit_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_bit_ops USING gist ADD - FUNCTION 11 (bit, bit) gbt_bit_sortsupport (internal) ; - -ALTER OPERATOR FAMILY gist_vbit_ops USING gist ADD - FUNCTION 11 (varbit, varbit) gbt_bit_sortsupport (internal) ; - -CREATE FUNCTION gbt_intv_sortsupport(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -ALTER OPERATOR FAMILY gist_interval_ops USING gist ADD - FUNCTION 11 (interval, interval) gbt_intv_sortsupport (internal) ; - diff --git a/contrib/btree_gist/btree_gist.control b/contrib/btree_gist/btree_gist.control index fa9171a80a2e3..e5c41fe8f3978 100644 --- a/contrib/btree_gist/btree_gist.control +++ b/contrib/btree_gist/btree_gist.control @@ -1,6 +1,6 @@ # btree_gist extension comment = 'support for indexing common datatypes in GiST' -default_version = '1.7' +default_version = '1.6' module_pathname = '$libdir/btree_gist' relocatable = true trusted = true diff --git a/contrib/btree_gist/btree_gist.h b/contrib/btree_gist/btree_gist.h index 35ad287ed3ddd..14c7c8ee193a4 100644 --- a/contrib/btree_gist/btree_gist.h +++ b/contrib/btree_gist/btree_gist.h @@ -6,7 +6,6 @@ #include "access/nbtree.h" #include "fmgr.h" -#include "utils/sortsupport.h" #define BtreeGistNotEqualStrategyNumber 6 diff --git a/contrib/btree_gist/btree_inet.c b/contrib/btree_gist/btree_inet.c index 88136128ceeb7..e4b3a946b2770 100644 --- a/contrib/btree_gist/btree_inet.c +++ b/contrib/btree_gist/btree_inet.c @@ -24,7 +24,6 @@ PG_FUNCTION_INFO_V1(gbt_inet_picksplit); PG_FUNCTION_INFO_V1(gbt_inet_consistent); PG_FUNCTION_INFO_V1(gbt_inet_penalty); PG_FUNCTION_INFO_V1(gbt_inet_same); -PG_FUNCTION_INFO_V1(gbt_inet_sortsupport); static bool @@ -187,79 +186,3 @@ gbt_inet_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_inet_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - inetKEY *ia = (inetKEY *) DatumGetPointer(a); - inetKEY *ib = (inetKEY *) DatumGetPointer(b); - - /* for leaf items we expect lower == upper */ - Assert(ia->lower == ia->upper); - Assert(ib->lower == ib->upper); - - if (ia->lower == ib->lower) - return 0; - - return (ia->lower > ib->lower) ? 1 : -1; -} - -static Datum -gbt_inet_abbrev_convert(Datum original, SortSupport ssup) -{ - inetKEY *b1 = (inetKEY *) DatumGetPointer(original); - double z = b1->lower; - -#if SIZEOF_DATUM == 8 - return Float8GetDatum(z); -#else - return Float4GetDatum((float4) z); -#endif -} - -static int -gbt_inet_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) -{ -#if SIZEOF_DATUM == 8 - float8 a = DatumGetFloat8(z1); - float8 b = DatumGetFloat8(z2); -#else - float4 a = DatumGetFloat4(z1); - float4 b = DatumGetFloat4(z2); -#endif - - if (a > b) - return 1; - else if (a < b) - return -1; - else - return 0; -} - -static bool -gbt_inet_abbrev_abort(int memtupcount, SortSupport ssup) -{ - return false; -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_inet_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - if (ssup->abbreviate) - { - ssup->comparator = gbt_inet_cmp_abbrev; - ssup->abbrev_converter = gbt_inet_abbrev_convert; - ssup->abbrev_abort = gbt_inet_abbrev_abort; - ssup->abbrev_full_comparator = gbt_inet_sort_build_cmp; - } - else - { - ssup->comparator = gbt_inet_sort_build_cmp; - } - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_int2.c b/contrib/btree_gist/btree_int2.c index 38ca3e05da726..a91b95ff39853 100644 --- a/contrib/btree_gist/btree_int2.c +++ b/contrib/btree_gist/btree_int2.c @@ -24,7 +24,6 @@ PG_FUNCTION_INFO_V1(gbt_int2_consistent); PG_FUNCTION_INFO_V1(gbt_int2_distance); PG_FUNCTION_INFO_V1(gbt_int2_penalty); PG_FUNCTION_INFO_V1(gbt_int2_same); -PG_FUNCTION_INFO_V1(gbt_int2_sortsupport); static bool gbt_int2gt(const void *a, const void *b, FmgrInfo *flinfo) @@ -215,72 +214,3 @@ gbt_int2_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_int2_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - int16KEY *ia = (int16KEY *) DatumGetPointer(a); - int16KEY *ib = (int16KEY *) DatumGetPointer(b); - - /* for leaf items we expect lower == upper */ - Assert(ia->lower == ia->upper); - Assert(ib->lower == ib->upper); - - if (ia->lower == ib->lower) - return 0; - - return (ia->lower > ib->lower) ? 1 : -1; -} - -static Datum -gbt_int2_abbrev_convert(Datum original, SortSupport ssup) -{ - int16KEY *b1 = (int16KEY *) DatumGetPointer(original); - - return Int16GetDatum(b1->lower); -} - -static int -gbt_int2_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) -{ - int16 a = DatumGetInt16(z1); - int16 b = DatumGetInt16(z2); - - if (a > b) - return 1; - else if (a < b) - return -1; - else - return 0; -} - -/* - * We never consider aborting the abbreviation. - */ -static bool -gbt_int2_abbrev_abort(int memtupcount, SortSupport ssup) -{ - return false; -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_int2_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - if (ssup->abbreviate) - { - ssup->comparator = gbt_int2_cmp_abbrev; - ssup->abbrev_converter = gbt_int2_abbrev_convert; - ssup->abbrev_abort = gbt_int2_abbrev_abort; - ssup->abbrev_full_comparator = gbt_int2_sort_build_cmp; - } - else - { - ssup->comparator = gbt_int2_sort_build_cmp; - } - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_int4.c b/contrib/btree_gist/btree_int4.c index 21bd01ed10dfc..7ea98c478c73b 100644 --- a/contrib/btree_gist/btree_int4.c +++ b/contrib/btree_gist/btree_int4.c @@ -24,7 +24,6 @@ PG_FUNCTION_INFO_V1(gbt_int4_consistent); PG_FUNCTION_INFO_V1(gbt_int4_distance); PG_FUNCTION_INFO_V1(gbt_int4_penalty); PG_FUNCTION_INFO_V1(gbt_int4_same); -PG_FUNCTION_INFO_V1(gbt_int4_sortsupport); static bool @@ -216,72 +215,3 @@ gbt_int4_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_int4_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - int32KEY *ia = (int32KEY *) DatumGetPointer(a); - int32KEY *ib = (int32KEY *) DatumGetPointer(b); - - /* for leaf items we expect lower == upper */ - Assert(ia->lower == ia->upper); - Assert(ib->lower == ib->upper); - - if (ia->lower == ib->lower) - return 0; - - return (ia->lower > ib->lower) ? 1 : -1; -} - -static Datum -gbt_int4_abbrev_convert(Datum original, SortSupport ssup) -{ - int32KEY *b1 = (int32KEY *) DatumGetPointer(original); - - return Int32GetDatum(b1->lower); -} - -static int -gbt_int4_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) -{ - int32 a = DatumGetInt32(z1); - int32 b = DatumGetInt32(z2); - - if (a > b) - return 1; - else if (a < b) - return -1; - else - return 0; -} - -/* - * We never consider aborting the abbreviation. - */ -static bool -gbt_int4_abbrev_abort(int memtupcount, SortSupport ssup) -{ - return false; -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_int4_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - if (ssup->abbreviate) - { - ssup->comparator = gbt_int4_cmp_abbrev; - ssup->abbrev_converter = gbt_int4_abbrev_convert; - ssup->abbrev_abort = gbt_int4_abbrev_abort; - ssup->abbrev_full_comparator = gbt_int4_sort_build_cmp; - } - else - { - ssup->comparator = gbt_int4_sort_build_cmp; - } - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_int8.c b/contrib/btree_gist/btree_int8.c index b6e7fe68742cb..df2b0d174b965 100644 --- a/contrib/btree_gist/btree_int8.c +++ b/contrib/btree_gist/btree_int8.c @@ -24,7 +24,6 @@ PG_FUNCTION_INFO_V1(gbt_int8_consistent); PG_FUNCTION_INFO_V1(gbt_int8_distance); PG_FUNCTION_INFO_V1(gbt_int8_penalty); PG_FUNCTION_INFO_V1(gbt_int8_same); -PG_FUNCTION_INFO_V1(gbt_int8_sortsupport); static bool @@ -216,82 +215,3 @@ gbt_int8_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_int8_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - int64KEY *ia = (int64KEY *) DatumGetPointer(a); - int64KEY *ib = (int64KEY *) DatumGetPointer(b); - - /* for leaf items we expect lower == upper */ - Assert(ia->lower == ia->upper); - Assert(ib->lower == ib->upper); - - if (ia->lower == ib->lower) - return 0; - - return (ia->lower > ib->lower) ? 1 : -1; -} - -static Datum -gbt_int8_abbrev_convert(Datum original, SortSupport ssup) -{ - int64KEY *b1 = (int64KEY *) DatumGetPointer(original); - int64 z = b1->lower; - -#if SIZEOF_DATUM == 8 - return Int64GetDatum(z); -#else - return Int32GetDatum(z >> 32); -#endif -} - -static int -gbt_int8_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) -{ -#if SIZEOF_DATUM == 8 - int64 a = DatumGetInt64(z1); - int64 b = DatumGetInt64(z2); -#else - int32 a = DatumGetInt32(z1); - int32 b = DatumGetInt32(z2); -#endif - - if (a > b) - return 1; - else if (a < b) - return -1; - else - return 0; -} - -/* - * We never consider aborting the abbreviation. - */ -static bool -gbt_int8_abbrev_abort(int memtupcount, SortSupport ssup) -{ - return false; -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_int8_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - if (ssup->abbreviate) - { - ssup->comparator = gbt_int8_cmp_abbrev; - ssup->abbrev_converter = gbt_int8_abbrev_convert; - ssup->abbrev_abort = gbt_int8_abbrev_abort; - ssup->abbrev_full_comparator = gbt_int8_sort_build_cmp; - } - else - { - ssup->comparator = gbt_int8_sort_build_cmp; - } - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_interval.c b/contrib/btree_gist/btree_interval.c index 0041acd3dddf0..a4b3b2b1e6fe4 100644 --- a/contrib/btree_gist/btree_interval.c +++ b/contrib/btree_gist/btree_interval.c @@ -27,7 +27,6 @@ PG_FUNCTION_INFO_V1(gbt_intv_consistent); PG_FUNCTION_INFO_V1(gbt_intv_distance); PG_FUNCTION_INFO_V1(gbt_intv_penalty); PG_FUNCTION_INFO_V1(gbt_intv_same); -PG_FUNCTION_INFO_V1(gbt_intv_sortsupport); static bool @@ -298,29 +297,3 @@ gbt_intv_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_intv_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - intvKEY *ia = (intvKEY *) DatumGetPointer(a); - intvKEY *ib = (intvKEY *) DatumGetPointer(b); - - return DatumGetInt32(DirectFunctionCall2(interval_cmp, - IntervalPGetDatum(&ia->lower), - IntervalPGetDatum(&ib->lower))); -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_intv_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - ssup->comparator = gbt_intv_sort_build_cmp; - ssup->abbrev_converter = NULL; - ssup->abbrev_abort = NULL; - ssup->abbrev_full_comparator = NULL; - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_macaddr.c b/contrib/btree_gist/btree_macaddr.c index 805148575d748..7f0e9e9c91254 100644 --- a/contrib/btree_gist/btree_macaddr.c +++ b/contrib/btree_gist/btree_macaddr.c @@ -25,7 +25,6 @@ PG_FUNCTION_INFO_V1(gbt_macad_picksplit); PG_FUNCTION_INFO_V1(gbt_macad_consistent); PG_FUNCTION_INFO_V1(gbt_macad_penalty); PG_FUNCTION_INFO_V1(gbt_macad_same); -PG_FUNCTION_INFO_V1(gbt_macad_sortsupport); static bool @@ -196,80 +195,3 @@ gbt_macad_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_macad_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - macKEY *ma = (macKEY *) DatumGetPointer(a); - macKEY *mb = (macKEY *) DatumGetPointer(b); - uint64 ia = mac_2_uint64(&ma->lower); - uint64 ib = mac_2_uint64(&mb->lower); - - /* for leaf items we expect lower == upper */ - - if (ia == ib) - return 0; - - return (ia > ib) ? 1 : -1; -} - -static Datum -gbt_macad_abbrev_convert(Datum original, SortSupport ssup) -{ - macKEY *b1 = (macKEY *) DatumGetPointer(original); - uint64 z = mac_2_uint64(&b1->lower); - -#if SIZEOF_DATUM == 8 - return UInt64GetDatum(z); -#else - /* use the high 32 bits of the 48-bit integer */ - return UInt32GetDatum(z >> 16); -#endif -} - -static int -gbt_macad_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) -{ -#if SIZEOF_DATUM == 8 - uint64 a = DatumGetUInt64(z1); - uint64 b = DatumGetUInt64(z2); -#else - uint32 a = DatumGetUInt32(z1); - uint32 b = DatumGetUInt32(z2); -#endif - - if (a > b) - return 1; - else if (a < b) - return -1; - else - return 0; -} - -static bool -gbt_macad_abbrev_abort(int memtupcount, SortSupport ssup) -{ - return false; -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_macad_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - if (ssup->abbreviate) - { - ssup->comparator = gbt_macad_cmp_abbrev; - ssup->abbrev_converter = gbt_macad_abbrev_convert; - ssup->abbrev_abort = gbt_macad_abbrev_abort; - ssup->abbrev_full_comparator = gbt_macad_sort_build_cmp; - } - else - { - ssup->comparator = gbt_macad_sort_build_cmp; - } - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_macaddr8.c b/contrib/btree_gist/btree_macaddr8.c index a0514727e358b..ab4bca5d50d84 100644 --- a/contrib/btree_gist/btree_macaddr8.c +++ b/contrib/btree_gist/btree_macaddr8.c @@ -25,7 +25,6 @@ PG_FUNCTION_INFO_V1(gbt_macad8_picksplit); PG_FUNCTION_INFO_V1(gbt_macad8_consistent); PG_FUNCTION_INFO_V1(gbt_macad8_penalty); PG_FUNCTION_INFO_V1(gbt_macad8_same); -PG_FUNCTION_INFO_V1(gbt_macad8_sortsupport); static bool @@ -196,80 +195,3 @@ gbt_macad8_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_macad8_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - mac8KEY *ma = (mac8KEY *) DatumGetPointer(a); - mac8KEY *mb = (mac8KEY *) DatumGetPointer(b); - uint64 ia = mac8_2_uint64(&ma->lower); - uint64 ib = mac8_2_uint64(&mb->lower); - - /* for leaf items we expect lower == upper */ - - if (ia == ib) - return 0; - - return (ia > ib) ? 1 : -1; -} - -static Datum -gbt_macad8_abbrev_convert(Datum original, SortSupport ssup) -{ - mac8KEY *b1 = (mac8KEY *) DatumGetPointer(original); - uint64 z = mac8_2_uint64(&b1->lower); - -#if SIZEOF_DATUM == 8 - return UInt64GetDatum(z); -#else - /* use the high bits only */ - return UInt32GetDatum(z >> 32); -#endif -} - -static int -gbt_macad8_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) -{ -#if SIZEOF_DATUM == 8 - uint64 a = DatumGetUInt64(z1); - uint64 b = DatumGetUInt64(z2); -#else - uint32 a = DatumGetUInt32(z1); - uint32 b = DatumGetUInt32(z2); -#endif - - if (a > b) - return 1; - else if (a < b) - return -1; - else - return 0; -} - -static bool -gbt_macad8_abbrev_abort(int memtupcount, SortSupport ssup) -{ - return false; -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_macad8_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - if (ssup->abbreviate) - { - ssup->comparator = gbt_macad8_cmp_abbrev; - ssup->abbrev_converter = gbt_macad8_abbrev_convert; - ssup->abbrev_abort = gbt_macad8_abbrev_abort; - ssup->abbrev_full_comparator = gbt_macad8_sort_build_cmp; - } - else - { - ssup->comparator = gbt_macad8_sort_build_cmp; - } - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_numeric.c b/contrib/btree_gist/btree_numeric.c index face4e2b3af91..35e466cdd9423 100644 --- a/contrib/btree_gist/btree_numeric.c +++ b/contrib/btree_gist/btree_numeric.c @@ -21,7 +21,6 @@ PG_FUNCTION_INFO_V1(gbt_numeric_picksplit); PG_FUNCTION_INFO_V1(gbt_numeric_consistent); PG_FUNCTION_INFO_V1(gbt_numeric_penalty); PG_FUNCTION_INFO_V1(gbt_numeric_same); -PG_FUNCTION_INFO_V1(gbt_numeric_sortsupport); /* define for comparison */ @@ -228,31 +227,3 @@ gbt_numeric_picksplit(PG_FUNCTION_ARGS) &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(v); } - -static int -gbt_numeric_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - return DatumGetInt32(DirectFunctionCall2(numeric_cmp, - PointerGetDatum(a), - PointerGetDatum(b))); -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_numeric_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - ssup->comparator = gbt_numeric_sort_build_cmp; - - /* - * Numeric has abbreviation routines in numeric.c, but we don't try to use - * them here. Maybe later. - */ - ssup->abbrev_converter = NULL; - ssup->abbrev_abort = NULL; - ssup->abbrev_full_comparator = NULL; - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_oid.c b/contrib/btree_gist/btree_oid.c index 9b7c546aeeb66..3cc7d4245d42b 100644 --- a/contrib/btree_gist/btree_oid.c +++ b/contrib/btree_gist/btree_oid.c @@ -23,7 +23,6 @@ PG_FUNCTION_INFO_V1(gbt_oid_consistent); PG_FUNCTION_INFO_V1(gbt_oid_distance); PG_FUNCTION_INFO_V1(gbt_oid_penalty); PG_FUNCTION_INFO_V1(gbt_oid_same); -PG_FUNCTION_INFO_V1(gbt_oid_sortsupport); static bool @@ -216,72 +215,3 @@ gbt_oid_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_oid_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - oidKEY *ia = (oidKEY *) DatumGetPointer(a); - oidKEY *ib = (oidKEY *) DatumGetPointer(b); - - /* for leaf items we expect lower == upper */ - Assert(ia->lower == ia->upper); - Assert(ib->lower == ib->upper); - - if (ia->lower == ib->lower) - return 0; - - return (ia->lower > ib->lower) ? 1 : -1; -} - -static Datum -gbt_oid_abbrev_convert(Datum original, SortSupport ssup) -{ - oidKEY *b1 = (oidKEY *) DatumGetPointer(original); - - return ObjectIdGetDatum(b1->lower); -} - -static int -gbt_oid_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup) -{ - Oid a = DatumGetObjectId(z1); - Oid b = DatumGetObjectId(z2); - - if (a > b) - return 1; - else if (a < b) - return -1; - else - return 0; -} - -/* - * We never consider aborting the abbreviation. - */ -static bool -gbt_oid_abbrev_abort(int memtupcount, SortSupport ssup) -{ - return false; -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_oid_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - if (ssup->abbreviate) - { - ssup->comparator = gbt_oid_cmp_abbrev; - ssup->abbrev_converter = gbt_oid_abbrev_convert; - ssup->abbrev_abort = gbt_oid_abbrev_abort; - ssup->abbrev_full_comparator = gbt_oid_sort_build_cmp; - } - else - { - ssup->comparator = gbt_oid_sort_build_cmp; - } - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_text.c b/contrib/btree_gist/btree_text.c index 01b1bda2f66b6..8019d11281952 100644 --- a/contrib/btree_gist/btree_text.c +++ b/contrib/btree_gist/btree_text.c @@ -18,7 +18,6 @@ PG_FUNCTION_INFO_V1(gbt_text_consistent); PG_FUNCTION_INFO_V1(gbt_bpchar_consistent); PG_FUNCTION_INFO_V1(gbt_text_penalty); PG_FUNCTION_INFO_V1(gbt_text_same); -PG_FUNCTION_INFO_V1(gbt_text_sortsupport); /* define for comparison */ @@ -240,27 +239,3 @@ gbt_text_penalty(PG_FUNCTION_ARGS) PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo)); } - -static int -gbt_text_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - return DatumGetInt32(DirectFunctionCall2Coll(bttextcmp, - ssup->ssup_collation, - PointerGetDatum(a), - PointerGetDatum(b))); -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_text_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - ssup->comparator = gbt_text_sort_build_cmp; - ssup->abbrev_converter = NULL; - ssup->abbrev_abort = NULL; - ssup->abbrev_full_comparator = NULL; - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_time.c b/contrib/btree_gist/btree_time.c index c021f6751426c..fd8774a2f0856 100644 --- a/contrib/btree_gist/btree_time.c +++ b/contrib/btree_gist/btree_time.c @@ -28,7 +28,6 @@ PG_FUNCTION_INFO_V1(gbt_time_distance); PG_FUNCTION_INFO_V1(gbt_timetz_consistent); PG_FUNCTION_INFO_V1(gbt_time_penalty); PG_FUNCTION_INFO_V1(gbt_time_same); -PG_FUNCTION_INFO_V1(gbt_time_sortsupport); #ifdef USE_FLOAT8_BYVAL @@ -333,29 +332,3 @@ gbt_time_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_time_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - timeKEY *ia = (timeKEY *) DatumGetPointer(a); - timeKEY *ib = (timeKEY *) DatumGetPointer(b); - - return DatumGetInt32(DirectFunctionCall2(time_cmp, - TimeADTGetDatumFast(ia->lower), - TimeADTGetDatumFast(ib->lower))); -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_time_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - ssup->comparator = gbt_time_sort_build_cmp; - ssup->abbrev_converter = NULL; - ssup->abbrev_abort = NULL; - ssup->abbrev_full_comparator = NULL; - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c index c6ef0782d24da..2671ba961cdae 100644 --- a/contrib/btree_gist/btree_ts.c +++ b/contrib/btree_gist/btree_ts.c @@ -31,7 +31,6 @@ PG_FUNCTION_INFO_V1(gbt_tstz_consistent); PG_FUNCTION_INFO_V1(gbt_tstz_distance); PG_FUNCTION_INFO_V1(gbt_ts_penalty); PG_FUNCTION_INFO_V1(gbt_ts_same); -PG_FUNCTION_INFO_V1(gbt_ts_sortsupport); #ifdef USE_FLOAT8_BYVAL @@ -400,29 +399,3 @@ gbt_ts_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_ts_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - tsKEY *ia = (tsKEY *) DatumGetPointer(a); - tsKEY *ib = (tsKEY *) DatumGetPointer(b); - - return DatumGetInt32(DirectFunctionCall2(timestamp_cmp, - TimestampGetDatumFast(ia->lower), - TimestampGetDatumFast(ib->lower))); -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_ts_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - ssup->comparator = gbt_ts_sort_build_cmp; - ssup->abbrev_converter = NULL; - ssup->abbrev_abort = NULL; - ssup->abbrev_full_comparator = NULL; - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/btree_uuid.c b/contrib/btree_gist/btree_uuid.c index c802bf95a9072..b81875979a3b9 100644 --- a/contrib/btree_gist/btree_uuid.c +++ b/contrib/btree_gist/btree_uuid.c @@ -25,7 +25,6 @@ PG_FUNCTION_INFO_V1(gbt_uuid_picksplit); PG_FUNCTION_INFO_V1(gbt_uuid_consistent); PG_FUNCTION_INFO_V1(gbt_uuid_penalty); PG_FUNCTION_INFO_V1(gbt_uuid_same); -PG_FUNCTION_INFO_V1(gbt_uuid_sortsupport); static int @@ -234,27 +233,3 @@ gbt_uuid_same(PG_FUNCTION_ARGS) *result = gbt_num_same((void *) b1, (void *) b2, &tinfo, fcinfo->flinfo); PG_RETURN_POINTER(result); } - -static int -gbt_uuid_sort_build_cmp(Datum a, Datum b, SortSupport ssup) -{ - uuidKEY *ua = (uuidKEY *) DatumGetPointer(a); - uuidKEY *ub = (uuidKEY *) DatumGetPointer(b); - - return uuid_internal_cmp(&ua->lower, &ub->lower); -} - -/* - * Sort support routine for fast GiST index build by sorting. - */ -Datum -gbt_uuid_sortsupport(PG_FUNCTION_ARGS) -{ - SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0); - - ssup->comparator = gbt_uuid_sort_build_cmp; - ssup->abbrev_converter = NULL; - ssup->abbrev_abort = NULL; - ssup->abbrev_full_comparator = NULL; - PG_RETURN_VOID(); -} diff --git a/contrib/btree_gist/expected/bit.out b/contrib/btree_gist/expected/bit.out index cb2297ce806f4..e57871f310b14 100644 --- a/contrib/btree_gist/expected/bit.out +++ b/contrib/btree_gist/expected/bit.out @@ -32,14 +32,7 @@ SELECT count(*) FROM bittmp WHERE a > '011011000100010111011000110000100'; 350 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX bitidx ON bittmp USING GIST ( a ); -DEBUG: building index "bitidx" on table "bittmp" serially -DEBUG: using sorted GiST build -CREATE INDEX bitidx_b ON bittmp USING GIST ( a ) WITH (buffering=on); -DEBUG: building index "bitidx_b" on table "bittmp" serially -DROP INDEX bitidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM bittmp WHERE a < '011011000100010111011000110000100'; count diff --git a/contrib/btree_gist/expected/bytea.out b/contrib/btree_gist/expected/bytea.out index 170b48e1db90b..b9efa73c0855f 100644 --- a/contrib/btree_gist/expected/bytea.out +++ b/contrib/btree_gist/expected/bytea.out @@ -33,14 +33,7 @@ SELECT count(*) FROM byteatmp WHERE a > '31b0'; 400 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX byteaidx ON byteatmp USING GIST ( a ); -DEBUG: building index "byteaidx" on table "byteatmp" serially -DEBUG: using sorted GiST build -CREATE INDEX byteaidx_b ON byteatmp USING GIST ( a ) WITH (buffering=on); -DEBUG: building index "byteaidx_b" on table "byteatmp" serially -DROP INDEX byteaidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM byteatmp WHERE a < '31b0'::bytea; count diff --git a/contrib/btree_gist/expected/cash.out b/contrib/btree_gist/expected/cash.out index 868af70b22ccb..7fbc7355929a1 100644 --- a/contrib/btree_gist/expected/cash.out +++ b/contrib/btree_gist/expected/cash.out @@ -40,14 +40,7 @@ SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3; $21,915.01 | $442.22 (3 rows) -SET client_min_messages = DEBUG1; CREATE INDEX moneyidx ON moneytmp USING gist ( a ); -DEBUG: building index "moneyidx" on table "moneytmp" serially -DEBUG: using sorted GiST build -CREATE INDEX moneyidx_b ON moneytmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "moneyidx_b" on table "moneytmp" serially -DROP INDEX moneyidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM moneytmp WHERE a < '22649.64'::money; count diff --git a/contrib/btree_gist/expected/char.out b/contrib/btree_gist/expected/char.out index 97316cbb06bd2..d715c045cc152 100644 --- a/contrib/btree_gist/expected/char.out +++ b/contrib/btree_gist/expected/char.out @@ -32,14 +32,7 @@ SELECT count(*) FROM chartmp WHERE a > '31b0'::char(32); 400 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX charidx ON chartmp USING GIST ( a ); -DEBUG: building index "charidx" on table "chartmp" serially -DEBUG: using sorted GiST build -CREATE INDEX charidx_b ON chartmp USING GIST ( a ) WITH (buffering=on); -DEBUG: building index "charidx_b" on table "chartmp" serially -DROP INDEX charidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM chartmp WHERE a < '31b0'::char(32); count diff --git a/contrib/btree_gist/expected/cidr.out b/contrib/btree_gist/expected/cidr.out index f15597c06a0ff..6d0995add60ec 100644 --- a/contrib/btree_gist/expected/cidr.out +++ b/contrib/btree_gist/expected/cidr.out @@ -32,14 +32,7 @@ SELECT count(*) FROM cidrtmp WHERE a > '121.111.63.82'; 309 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX cidridx ON cidrtmp USING gist ( a ); -DEBUG: building index "cidridx" on table "cidrtmp" serially -DEBUG: using sorted GiST build -CREATE INDEX cidridx_b ON cidrtmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "cidridx_b" on table "cidrtmp" serially -DROP INDEX cidridx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM cidrtmp WHERE a < '121.111.63.82'::cidr; count diff --git a/contrib/btree_gist/expected/date.out b/contrib/btree_gist/expected/date.out index 5c93d02209c3e..5db864bb82caa 100644 --- a/contrib/btree_gist/expected/date.out +++ b/contrib/btree_gist/expected/date.out @@ -40,14 +40,7 @@ SELECT a, a <-> '2001-02-13' FROM datetmp ORDER BY a <-> '2001-02-13' LIMIT 3; 03-24-2001 | 39 (3 rows) -SET client_min_messages = DEBUG1; CREATE INDEX dateidx ON datetmp USING gist ( a ); -DEBUG: building index "dateidx" on table "datetmp" serially -DEBUG: using sorted GiST build -CREATE INDEX dateidx_b ON datetmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "dateidx_b" on table "datetmp" serially -DROP INDEX dateidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM datetmp WHERE a < '2001-02-13'::date; count diff --git a/contrib/btree_gist/expected/enum.out b/contrib/btree_gist/expected/enum.out index d73ad33974ddd..c4b769dd4b77c 100644 --- a/contrib/btree_gist/expected/enum.out +++ b/contrib/btree_gist/expected/enum.out @@ -46,14 +46,7 @@ SELECT count(*) FROM enumtmp WHERE a > 'g'::rainbow; 230 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX enumidx ON enumtmp USING gist ( a ); -DEBUG: building index "enumidx" on table "enumtmp" serially -DEBUG: using sorted GiST build -CREATE INDEX enumidx_b ON enumtmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "enumidx_b" on table "enumtmp" serially -DROP INDEX enumidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM enumtmp WHERE a < 'g'::rainbow; count diff --git a/contrib/btree_gist/expected/float4.out b/contrib/btree_gist/expected/float4.out index 5f4f1aa4ec5d4..dfe732049e6d6 100644 --- a/contrib/btree_gist/expected/float4.out +++ b/contrib/btree_gist/expected/float4.out @@ -40,14 +40,7 @@ SELECT a, a <-> '-179.0' FROM float4tmp ORDER BY a <-> '-179.0' LIMIT 3; -158.17741 | 20.822586 (3 rows) -SET client_min_messages = DEBUG1; CREATE INDEX float4idx ON float4tmp USING gist ( a ); -DEBUG: building index "float4idx" on table "float4tmp" serially -DEBUG: using sorted GiST build -CREATE INDEX float4idx_b ON float4tmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "float4idx_b" on table "float4tmp" serially -DROP INDEX float4idx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM float4tmp WHERE a < -179.0::float4; count diff --git a/contrib/btree_gist/expected/float8.out b/contrib/btree_gist/expected/float8.out index 4db0f7b8282ce..ebd0ef3d689a1 100644 --- a/contrib/btree_gist/expected/float8.out +++ b/contrib/btree_gist/expected/float8.out @@ -40,14 +40,7 @@ SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3; -1769.73634 | 120.26366000000007 (3 rows) -SET client_min_messages = DEBUG1; CREATE INDEX float8idx ON float8tmp USING gist ( a ); -DEBUG: building index "float8idx" on table "float8tmp" serially -DEBUG: using sorted GiST build -CREATE INDEX float8idx_b ON float8tmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "float8idx_b" on table "float8tmp" serially -DROP INDEX float8idx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM float8tmp WHERE a < -1890.0::float8; count diff --git a/contrib/btree_gist/expected/inet.out b/contrib/btree_gist/expected/inet.out index 0847d3b7d128a..c323d903da461 100644 --- a/contrib/btree_gist/expected/inet.out +++ b/contrib/btree_gist/expected/inet.out @@ -32,14 +32,7 @@ SELECT count(*) FROM inettmp WHERE a > '89.225.196.191'; 386 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX inetidx ON inettmp USING gist ( a ); -DEBUG: building index "inetidx" on table "inettmp" serially -DEBUG: using sorted GiST build -CREATE INDEX inetidx_b ON inettmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "inetidx_b" on table "inettmp" serially -DROP INDEX inetidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM inettmp WHERE a < '89.225.196.191'::inet; count diff --git a/contrib/btree_gist/expected/int2.out b/contrib/btree_gist/expected/int2.out index 9ad06a8dce0cb..50a332939bd48 100644 --- a/contrib/btree_gist/expected/int2.out +++ b/contrib/btree_gist/expected/int2.out @@ -40,14 +40,7 @@ SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3; 228 | 9 (3 rows) -SET client_min_messages = DEBUG1; CREATE INDEX int2idx ON int2tmp USING gist ( a ); -DEBUG: building index "int2idx" on table "int2tmp" serially -DEBUG: using sorted GiST build -CREATE INDEX int2idx_b ON int2tmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "int2idx_b" on table "int2tmp" serially -DROP INDEX int2idx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM int2tmp WHERE a < 237::int2; count diff --git a/contrib/btree_gist/expected/int4.out b/contrib/btree_gist/expected/int4.out index fdf143f32c321..6bbdc7c3f4bf9 100644 --- a/contrib/btree_gist/expected/int4.out +++ b/contrib/btree_gist/expected/int4.out @@ -40,14 +40,7 @@ SELECT a, a <-> '237' FROM int4tmp ORDER BY a <-> '237' LIMIT 3; 228 | 9 (3 rows) -SET client_min_messages = DEBUG1; CREATE INDEX int4idx ON int4tmp USING gist ( a ); -DEBUG: building index "int4idx" on table "int4tmp" serially -DEBUG: using sorted GiST build -CREATE INDEX int4idx_b ON int4tmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "int4idx_b" on table "int4tmp" serially -DROP INDEX int4idx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM int4tmp WHERE a < 237::int4; count diff --git a/contrib/btree_gist/expected/int8.out b/contrib/btree_gist/expected/int8.out index 532c4e5e70413..eff77c26b5adb 100644 --- a/contrib/btree_gist/expected/int8.out +++ b/contrib/btree_gist/expected/int8.out @@ -40,14 +40,7 @@ SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' 478227196042750 | 13655904687909 (3 rows) -SET client_min_messages = DEBUG1; CREATE INDEX int8idx ON int8tmp USING gist ( a ); -DEBUG: building index "int8idx" on table "int8tmp" serially -DEBUG: using sorted GiST build -CREATE INDEX int8idx_b ON int8tmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "int8idx_b" on table "int8tmp" serially -DROP INDEX int8idx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM int8tmp WHERE a < 464571291354841::int8; count diff --git a/contrib/btree_gist/expected/interval.out b/contrib/btree_gist/expected/interval.out index 12d50fdf5810f..4c3d494e4a656 100644 --- a/contrib/btree_gist/expected/interval.out +++ b/contrib/btree_gist/expected/interval.out @@ -40,14 +40,7 @@ SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21 @ 220 days 19 hours 5 mins 42 secs | @ 21 days -2 hours -15 mins -41 secs (3 rows) -SET client_min_messages = DEBUG1; CREATE INDEX intervalidx ON intervaltmp USING gist ( a ); -DEBUG: building index "intervalidx" on table "intervaltmp" serially -DEBUG: using sorted GiST build -CREATE INDEX intervalidx_b ON intervaltmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "intervalidx_b" on table "intervaltmp" serially -DROP INDEX intervalidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM intervaltmp WHERE a < '199 days 21:21:23'::interval; count diff --git a/contrib/btree_gist/expected/macaddr.out b/contrib/btree_gist/expected/macaddr.out index 9634000618f53..c0a4c6287f321 100644 --- a/contrib/btree_gist/expected/macaddr.out +++ b/contrib/btree_gist/expected/macaddr.out @@ -32,14 +32,7 @@ SELECT count(*) FROM macaddrtmp WHERE a > '22:00:5c:e5:9b:0d'; 540 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX macaddridx ON macaddrtmp USING gist ( a ); -DEBUG: building index "macaddridx" on table "macaddrtmp" serially -DEBUG: using sorted GiST build -CREATE INDEX macaddridx_b ON macaddrtmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "macaddridx_b" on table "macaddrtmp" serially -DROP INDEX macaddridx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM macaddrtmp WHERE a < '22:00:5c:e5:9b:0d'::macaddr; count diff --git a/contrib/btree_gist/expected/macaddr8.out b/contrib/btree_gist/expected/macaddr8.out index 910223cd3b22e..e5ec6a5deab1b 100644 --- a/contrib/btree_gist/expected/macaddr8.out +++ b/contrib/btree_gist/expected/macaddr8.out @@ -32,14 +32,7 @@ SELECT count(*) FROM macaddr8tmp WHERE a > '22:00:5c:e5:9b:0d'; 540 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX macaddr8idx ON macaddr8tmp USING gist ( a ); -DEBUG: building index "macaddr8idx" on table "macaddr8tmp" serially -DEBUG: using sorted GiST build -CREATE INDEX macaddr8idx_b ON macaddr8tmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "macaddr8idx_b" on table "macaddr8tmp" serially -DROP INDEX macaddr8idx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM macaddr8tmp WHERE a < '22:00:5c:e5:9b:0d'::macaddr8; count diff --git a/contrib/btree_gist/expected/numeric.out b/contrib/btree_gist/expected/numeric.out index 8dce480c30347..ae839b8ec839d 100644 --- a/contrib/btree_gist/expected/numeric.out +++ b/contrib/btree_gist/expected/numeric.out @@ -94,14 +94,7 @@ SELECT count(*) FROM numerictmp WHERE a > 0 ; 576 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX numericidx ON numerictmp USING gist ( a ); -DEBUG: building index "numericidx" on table "numerictmp" serially -DEBUG: using sorted GiST build -CREATE INDEX numericidx_b ON numerictmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "numericidx_b" on table "numerictmp" serially -DROP INDEX numericidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM numerictmp WHERE a < -1890.0; count diff --git a/contrib/btree_gist/expected/oid.out b/contrib/btree_gist/expected/oid.out index da27172609b30..776bbb10267c4 100644 --- a/contrib/btree_gist/expected/oid.out +++ b/contrib/btree_gist/expected/oid.out @@ -32,14 +32,7 @@ SELECT count(*) FROM oidtmp WHERE oid > 17; 983 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX oididx ON oidtmp USING gist ( oid ); -DEBUG: building index "oididx" on table "oidtmp" serially -DEBUG: using sorted GiST build -CREATE INDEX oididx_b ON oidtmp USING gist ( oid ) WITH (buffering=on); -DEBUG: building index "oididx_b" on table "oidtmp" serially -DROP INDEX oididx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM oidtmp WHERE oid < 17; count diff --git a/contrib/btree_gist/expected/text.out b/contrib/btree_gist/expected/text.out index 2e760d1487140..bb4e2e62d1d53 100644 --- a/contrib/btree_gist/expected/text.out +++ b/contrib/btree_gist/expected/text.out @@ -33,14 +33,7 @@ SELECT count(*) FROM texttmp WHERE a > '31b0'; 400 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX textidx ON texttmp USING GIST ( a ); -DEBUG: building index "textidx" on table "texttmp" serially -DEBUG: using sorted GiST build -CREATE INDEX textidx_b ON texttmp USING GIST ( a ) WITH (buffering=on); -DEBUG: building index "textidx_b" on table "texttmp" serially -DROP INDEX textidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM texttmp WHERE a < '31b0'::text; count diff --git a/contrib/btree_gist/expected/time.out b/contrib/btree_gist/expected/time.out index 9b81e58ed4dbf..ec95ef77c57a6 100644 --- a/contrib/btree_gist/expected/time.out +++ b/contrib/btree_gist/expected/time.out @@ -40,14 +40,7 @@ SELECT a, a <-> '10:57:11' FROM timetmp ORDER BY a <-> '10:57:11' LIMIT 3; 10:55:32 | @ 1 min 39 secs (3 rows) -SET client_min_messages = DEBUG1; CREATE INDEX timeidx ON timetmp USING gist ( a ); -DEBUG: building index "timeidx" on table "timetmp" serially -DEBUG: using sorted GiST build -CREATE INDEX timeidx_b ON timetmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "timeidx_b" on table "timetmp" serially -DROP INDEX timeidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM timetmp WHERE a < '10:57:11'::time; count diff --git a/contrib/btree_gist/expected/timestamp.out b/contrib/btree_gist/expected/timestamp.out index 8ea9897551c73..0d94f2f245cea 100644 --- a/contrib/btree_gist/expected/timestamp.out +++ b/contrib/btree_gist/expected/timestamp.out @@ -40,14 +40,7 @@ SELECT a, a <-> '2004-10-26 08:55:08' FROM timestamptmp ORDER BY a <-> '2004-10- Mon Nov 29 20:12:43 2004 | @ 34 days 11 hours 17 mins 35 secs (3 rows) -SET client_min_messages = DEBUG1; CREATE INDEX timestampidx ON timestamptmp USING gist ( a ); -DEBUG: building index "timestampidx" on table "timestamptmp" serially -DEBUG: using sorted GiST build -CREATE INDEX timestampidx_b ON timestamptmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "timestampidx_b" on table "timestamptmp" serially -DROP INDEX timestampidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM timestamptmp WHERE a < '2004-10-26 08:55:08'::timestamp; count diff --git a/contrib/btree_gist/expected/timestamptz.out b/contrib/btree_gist/expected/timestamptz.out index 2ba0dcd7ede90..75a15a425684f 100644 --- a/contrib/btree_gist/expected/timestamptz.out +++ b/contrib/btree_gist/expected/timestamptz.out @@ -100,14 +100,7 @@ SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> ' Thu Jan 24 12:28:12 2019 PST | @ 37 days 7 hours 28 mins 18 secs (3 rows) -SET client_min_messages = DEBUG1; CREATE INDEX timestamptzidx ON timestamptztmp USING gist ( a ); -DEBUG: building index "timestamptzidx" on table "timestamptztmp" serially -DEBUG: using sorted GiST build -CREATE INDEX timestamptzidx_b ON timestamptztmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "timestamptzidx_b" on table "timestamptztmp" serially -DROP INDEX timestamptzidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM timestamptztmp WHERE a < '2018-12-18 10:59:54 GMT+3'::timestamptz; count diff --git a/contrib/btree_gist/expected/timetz.out b/contrib/btree_gist/expected/timetz.out index 6c855bfcd6410..7f73e44797725 100644 --- a/contrib/btree_gist/expected/timetz.out +++ b/contrib/btree_gist/expected/timetz.out @@ -18,14 +18,7 @@ INSERT INTO timetzcmp (r_id,a) SELECT 22,count(*) FROM timetztmp WHERE a <= '07: INSERT INTO timetzcmp (r_id,a) SELECT 23,count(*) FROM timetztmp WHERE a = '07:46:45 GMT+4'; INSERT INTO timetzcmp (r_id,a) SELECT 24,count(*) FROM timetztmp WHERE a >= '07:46:45 GMT+4'; INSERT INTO timetzcmp (r_id,a) SELECT 25,count(*) FROM timetztmp WHERE a > '07:46:45 GMT+4'; -SET client_min_messages = DEBUG1; CREATE INDEX timetzidx ON timetztmp USING gist ( a ); -DEBUG: building index "timetzidx" on table "timetztmp" serially -DEBUG: using sorted GiST build -CREATE INDEX timetzidx_b ON timetztmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "timetzidx_b" on table "timetztmp" serially -DROP INDEX timetzidx_b; -RESET client_min_messages; SET enable_seqscan=off; UPDATE timetzcmp SET b=c FROM ( SELECT count(*) AS c FROM timetztmp WHERE a < '07:46:45 GMT+3'::timetz ) q WHERE r_id=1 ; UPDATE timetzcmp SET b=c FROM ( SELECT count(*) AS c FROM timetztmp WHERE a <= '07:46:45 GMT+3'::timetz ) q WHERE r_id=2 ; diff --git a/contrib/btree_gist/expected/uuid.out b/contrib/btree_gist/expected/uuid.out index 0f0f2960392b5..a34b024603203 100644 --- a/contrib/btree_gist/expected/uuid.out +++ b/contrib/btree_gist/expected/uuid.out @@ -32,14 +32,7 @@ SELECT count(*) FROM uuidtmp WHERE a > '55e65ca2-4136-4a4b-ba78-cd3fe4678203'; 375 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX uuididx ON uuidtmp USING gist ( a ); -DEBUG: building index "uuididx" on table "uuidtmp" serially -DEBUG: using sorted GiST build -CREATE INDEX uuididx_b ON uuidtmp USING gist ( a ) WITH (buffering=on); -DEBUG: building index "uuididx_b" on table "uuidtmp" serially -DROP INDEX uuididx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM uuidtmp WHERE a < '55e65ca2-4136-4a4b-ba78-cd3fe4678203'::uuid; count diff --git a/contrib/btree_gist/expected/varbit.out b/contrib/btree_gist/expected/varbit.out index 9cd41f4c9aaf9..ede36bc3ead1f 100644 --- a/contrib/btree_gist/expected/varbit.out +++ b/contrib/btree_gist/expected/varbit.out @@ -32,14 +32,7 @@ SELECT count(*) FROM varbittmp WHERE a > '1110100111010'; 50 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX varbitidx ON varbittmp USING GIST ( a ); -DEBUG: building index "varbitidx" on table "varbittmp" serially -DEBUG: using sorted GiST build -CREATE INDEX varbitidx_b ON varbittmp USING GIST ( a ) WITH (buffering=on); -DEBUG: building index "varbitidx_b" on table "varbittmp" serially -DROP INDEX varbitidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM varbittmp WHERE a < '1110100111010'::varbit; count diff --git a/contrib/btree_gist/expected/varchar.out b/contrib/btree_gist/expected/varchar.out index 0520eb473155c..d071d714cdddd 100644 --- a/contrib/btree_gist/expected/varchar.out +++ b/contrib/btree_gist/expected/varchar.out @@ -32,14 +32,7 @@ SELECT count(*) FROM vchartmp WHERE a > '31b0'::varchar(32); 400 (1 row) -SET client_min_messages = DEBUG1; CREATE INDEX vcharidx ON vchartmp USING GIST ( text(a) ); -DEBUG: building index "vcharidx" on table "vchartmp" serially -DEBUG: using sorted GiST build -CREATE INDEX vcharidx_b ON vchartmp USING GIST ( text(a) ) WITH (buffering=on); -DEBUG: building index "vcharidx_b" on table "vchartmp" serially -DROP INDEX vcharidx_b; -RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM vchartmp WHERE a < '31b0'::varchar(32); count diff --git a/contrib/btree_gist/sql/bit.sql b/contrib/btree_gist/sql/bit.sql index 53c67cf77acfe..a733042023f0f 100644 --- a/contrib/btree_gist/sql/bit.sql +++ b/contrib/btree_gist/sql/bit.sql @@ -16,11 +16,7 @@ SELECT count(*) FROM bittmp WHERE a >= '011011000100010111011000110000100'; SELECT count(*) FROM bittmp WHERE a > '011011000100010111011000110000100'; -SET client_min_messages = DEBUG1; CREATE INDEX bitidx ON bittmp USING GIST ( a ); -CREATE INDEX bitidx_b ON bittmp USING GIST ( a ) WITH (buffering=on); -DROP INDEX bitidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/bytea.sql b/contrib/btree_gist/sql/bytea.sql index fdfa0c345bd52..6885f5e56d5c8 100644 --- a/contrib/btree_gist/sql/bytea.sql +++ b/contrib/btree_gist/sql/bytea.sql @@ -17,11 +17,7 @@ SELECT count(*) FROM byteatmp WHERE a >= '31b0'; SELECT count(*) FROM byteatmp WHERE a > '31b0'; -SET client_min_messages = DEBUG1; CREATE INDEX byteaidx ON byteatmp USING GIST ( a ); -CREATE INDEX byteaidx_b ON byteatmp USING GIST ( a ) WITH (buffering=on); -DROP INDEX byteaidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/cash.sql b/contrib/btree_gist/sql/cash.sql index 0581b3593efa5..4526cc4f0aa63 100644 --- a/contrib/btree_gist/sql/cash.sql +++ b/contrib/btree_gist/sql/cash.sql @@ -18,11 +18,7 @@ SELECT count(*) FROM moneytmp WHERE a > '22649.64'; SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3; -SET client_min_messages = DEBUG1; CREATE INDEX moneyidx ON moneytmp USING gist ( a ); -CREATE INDEX moneyidx_b ON moneytmp USING gist ( a ) WITH (buffering=on); -DROP INDEX moneyidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/char.sql b/contrib/btree_gist/sql/char.sql index 234eabee3b894..f6eb52e6724f1 100644 --- a/contrib/btree_gist/sql/char.sql +++ b/contrib/btree_gist/sql/char.sql @@ -16,11 +16,7 @@ SELECT count(*) FROM chartmp WHERE a >= '31b0'::char(32); SELECT count(*) FROM chartmp WHERE a > '31b0'::char(32); -SET client_min_messages = DEBUG1; CREATE INDEX charidx ON chartmp USING GIST ( a ); -CREATE INDEX charidx_b ON chartmp USING GIST ( a ) WITH (buffering=on); -DROP INDEX charidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/cidr.sql b/contrib/btree_gist/sql/cidr.sql index be2d22b079a62..9bd77185b96a8 100644 --- a/contrib/btree_gist/sql/cidr.sql +++ b/contrib/btree_gist/sql/cidr.sql @@ -15,11 +15,7 @@ SELECT count(*) FROM cidrtmp WHERE a >= '121.111.63.82'; SELECT count(*) FROM cidrtmp WHERE a > '121.111.63.82'; -SET client_min_messages = DEBUG1; CREATE INDEX cidridx ON cidrtmp USING gist ( a ); -CREATE INDEX cidridx_b ON cidrtmp USING gist ( a ) WITH (buffering=on); -DROP INDEX cidridx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/date.sql b/contrib/btree_gist/sql/date.sql index f007402bacc77..f969ef0a08cb3 100644 --- a/contrib/btree_gist/sql/date.sql +++ b/contrib/btree_gist/sql/date.sql @@ -18,11 +18,7 @@ SELECT count(*) FROM datetmp WHERE a > '2001-02-13'; SELECT a, a <-> '2001-02-13' FROM datetmp ORDER BY a <-> '2001-02-13' LIMIT 3; -SET client_min_messages = DEBUG1; CREATE INDEX dateidx ON datetmp USING gist ( a ); -CREATE INDEX dateidx_b ON datetmp USING gist ( a ) WITH (buffering=on); -DROP INDEX dateidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/enum.sql b/contrib/btree_gist/sql/enum.sql index d6dbcb423921d..476211e97952c 100644 --- a/contrib/btree_gist/sql/enum.sql +++ b/contrib/btree_gist/sql/enum.sql @@ -20,11 +20,7 @@ SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow; SELECT count(*) FROM enumtmp WHERE a > 'g'::rainbow; -SET client_min_messages = DEBUG1; CREATE INDEX enumidx ON enumtmp USING gist ( a ); -CREATE INDEX enumidx_b ON enumtmp USING gist ( a ) WITH (buffering=on); -DROP INDEX enumidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/float4.sql b/contrib/btree_gist/sql/float4.sql index 0e3eb49343ff9..3da1ce953c8d1 100644 --- a/contrib/btree_gist/sql/float4.sql +++ b/contrib/btree_gist/sql/float4.sql @@ -18,11 +18,7 @@ SELECT count(*) FROM float4tmp WHERE a > -179.0; SELECT a, a <-> '-179.0' FROM float4tmp ORDER BY a <-> '-179.0' LIMIT 3; -SET client_min_messages = DEBUG1; CREATE INDEX float4idx ON float4tmp USING gist ( a ); -CREATE INDEX float4idx_b ON float4tmp USING gist ( a ) WITH (buffering=on); -DROP INDEX float4idx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/float8.sql b/contrib/btree_gist/sql/float8.sql index 6a216dd6065ba..e1e819b37f98c 100644 --- a/contrib/btree_gist/sql/float8.sql +++ b/contrib/btree_gist/sql/float8.sql @@ -18,11 +18,7 @@ SELECT count(*) FROM float8tmp WHERE a > -1890.0; SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3; -SET client_min_messages = DEBUG1; CREATE INDEX float8idx ON float8tmp USING gist ( a ); -CREATE INDEX float8idx_b ON float8tmp USING gist ( a ) WITH (buffering=on); -DROP INDEX float8idx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/inet.sql b/contrib/btree_gist/sql/inet.sql index 0339c853d3822..4b8d354b00ee5 100644 --- a/contrib/btree_gist/sql/inet.sql +++ b/contrib/btree_gist/sql/inet.sql @@ -16,11 +16,7 @@ SELECT count(*) FROM inettmp WHERE a >= '89.225.196.191'; SELECT count(*) FROM inettmp WHERE a > '89.225.196.191'; -SET client_min_messages = DEBUG1; CREATE INDEX inetidx ON inettmp USING gist ( a ); -CREATE INDEX inetidx_b ON inettmp USING gist ( a ) WITH (buffering=on); -DROP INDEX inetidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/int2.sql b/contrib/btree_gist/sql/int2.sql index bf98ac65f8305..988518795fc56 100644 --- a/contrib/btree_gist/sql/int2.sql +++ b/contrib/btree_gist/sql/int2.sql @@ -18,11 +18,7 @@ SELECT count(*) FROM int2tmp WHERE a > 237; SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3; -SET client_min_messages = DEBUG1; CREATE INDEX int2idx ON int2tmp USING gist ( a ); -CREATE INDEX int2idx_b ON int2tmp USING gist ( a ) WITH (buffering=on); -DROP INDEX int2idx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/int4.sql b/contrib/btree_gist/sql/int4.sql index 214993314afb7..659ab5ee24bbc 100644 --- a/contrib/btree_gist/sql/int4.sql +++ b/contrib/btree_gist/sql/int4.sql @@ -18,11 +18,7 @@ SELECT count(*) FROM int4tmp WHERE a > 237; SELECT a, a <-> '237' FROM int4tmp ORDER BY a <-> '237' LIMIT 3; -SET client_min_messages = DEBUG1; CREATE INDEX int4idx ON int4tmp USING gist ( a ); -CREATE INDEX int4idx_b ON int4tmp USING gist ( a ) WITH (buffering=on); -DROP INDEX int4idx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/int8.sql b/contrib/btree_gist/sql/int8.sql index 8a6c2a4bfd1c8..51e55e9c14b87 100644 --- a/contrib/btree_gist/sql/int8.sql +++ b/contrib/btree_gist/sql/int8.sql @@ -18,11 +18,7 @@ SELECT count(*) FROM int8tmp WHERE a > 464571291354841; SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' LIMIT 3; -SET client_min_messages = DEBUG1; CREATE INDEX int8idx ON int8tmp USING gist ( a ); -CREATE INDEX int8idx_b ON int8tmp USING gist ( a ) WITH (buffering=on); -DROP INDEX int8idx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/interval.sql b/contrib/btree_gist/sql/interval.sql index 6f9b1d4a39aa0..346d6adcb51ef 100644 --- a/contrib/btree_gist/sql/interval.sql +++ b/contrib/btree_gist/sql/interval.sql @@ -18,11 +18,7 @@ SELECT count(*) FROM intervaltmp WHERE a > '199 days 21:21:23'; SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3; -SET client_min_messages = DEBUG1; CREATE INDEX intervalidx ON intervaltmp USING gist ( a ); -CREATE INDEX intervalidx_b ON intervaltmp USING gist ( a ) WITH (buffering=on); -DROP INDEX intervalidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/macaddr.sql b/contrib/btree_gist/sql/macaddr.sql index bccfc820ca40a..85c271f7ce3c6 100644 --- a/contrib/btree_gist/sql/macaddr.sql +++ b/contrib/btree_gist/sql/macaddr.sql @@ -16,11 +16,7 @@ SELECT count(*) FROM macaddrtmp WHERE a >= '22:00:5c:e5:9b:0d'; SELECT count(*) FROM macaddrtmp WHERE a > '22:00:5c:e5:9b:0d'; -SET client_min_messages = DEBUG1; CREATE INDEX macaddridx ON macaddrtmp USING gist ( a ); -CREATE INDEX macaddridx_b ON macaddrtmp USING gist ( a ) WITH (buffering=on); -DROP INDEX macaddridx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/macaddr8.sql b/contrib/btree_gist/sql/macaddr8.sql index 2d0447a777b6a..61e7d7af405d1 100644 --- a/contrib/btree_gist/sql/macaddr8.sql +++ b/contrib/btree_gist/sql/macaddr8.sql @@ -16,11 +16,7 @@ SELECT count(*) FROM macaddr8tmp WHERE a >= '22:00:5c:e5:9b:0d'; SELECT count(*) FROM macaddr8tmp WHERE a > '22:00:5c:e5:9b:0d'; -SET client_min_messages = DEBUG1; CREATE INDEX macaddr8idx ON macaddr8tmp USING gist ( a ); -CREATE INDEX macaddr8idx_b ON macaddr8tmp USING gist ( a ) WITH (buffering=on); -DROP INDEX macaddr8idx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/numeric.sql b/contrib/btree_gist/sql/numeric.sql index 55ecbcdadc574..dbb2f2f1838a8 100644 --- a/contrib/btree_gist/sql/numeric.sql +++ b/contrib/btree_gist/sql/numeric.sql @@ -40,11 +40,7 @@ SELECT count(*) FROM numerictmp WHERE a >= 0 ; SELECT count(*) FROM numerictmp WHERE a > 0 ; -SET client_min_messages = DEBUG1; CREATE INDEX numericidx ON numerictmp USING gist ( a ); -CREATE INDEX numericidx_b ON numerictmp USING gist ( a ) WITH (buffering=on); -DROP INDEX numericidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/oid.sql b/contrib/btree_gist/sql/oid.sql index bc9ee0cba348d..c9358234ce9f4 100644 --- a/contrib/btree_gist/sql/oid.sql +++ b/contrib/btree_gist/sql/oid.sql @@ -15,11 +15,7 @@ SELECT count(*) FROM oidtmp WHERE oid >= 17; SELECT count(*) FROM oidtmp WHERE oid > 17; -SET client_min_messages = DEBUG1; CREATE INDEX oididx ON oidtmp USING gist ( oid ); -CREATE INDEX oididx_b ON oidtmp USING gist ( oid ) WITH (buffering=on); -DROP INDEX oididx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/text.sql b/contrib/btree_gist/sql/text.sql index 52705a216d111..46597e731d65d 100644 --- a/contrib/btree_gist/sql/text.sql +++ b/contrib/btree_gist/sql/text.sql @@ -17,11 +17,7 @@ SELECT count(*) FROM texttmp WHERE a >= '31b0'; SELECT count(*) FROM texttmp WHERE a > '31b0'; -SET client_min_messages = DEBUG1; CREATE INDEX textidx ON texttmp USING GIST ( a ); -CREATE INDEX textidx_b ON texttmp USING GIST ( a ) WITH (buffering=on); -DROP INDEX textidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/time.sql b/contrib/btree_gist/sql/time.sql index 6123945213130..6104e7f61c8e2 100644 --- a/contrib/btree_gist/sql/time.sql +++ b/contrib/btree_gist/sql/time.sql @@ -18,11 +18,7 @@ SELECT count(*) FROM timetmp WHERE a > '10:57:11'; SELECT a, a <-> '10:57:11' FROM timetmp ORDER BY a <-> '10:57:11' LIMIT 3; -SET client_min_messages = DEBUG1; CREATE INDEX timeidx ON timetmp USING gist ( a ); -CREATE INDEX timeidx_b ON timetmp USING gist ( a ) WITH (buffering=on); -DROP INDEX timeidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/timestamp.sql b/contrib/btree_gist/sql/timestamp.sql index 66a14f5ae516e..95effebfc47a7 100644 --- a/contrib/btree_gist/sql/timestamp.sql +++ b/contrib/btree_gist/sql/timestamp.sql @@ -18,11 +18,7 @@ SELECT count(*) FROM timestamptmp WHERE a > '2004-10-26 08:55:08'; SELECT a, a <-> '2004-10-26 08:55:08' FROM timestamptmp ORDER BY a <-> '2004-10-26 08:55:08' LIMIT 3; -SET client_min_messages = DEBUG1; CREATE INDEX timestampidx ON timestamptmp USING gist ( a ); -CREATE INDEX timestampidx_b ON timestamptmp USING gist ( a ) WITH (buffering=on); -DROP INDEX timestampidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/timestamptz.sql b/contrib/btree_gist/sql/timestamptz.sql index 2a92f63fc4a0a..f70caa4a6492c 100644 --- a/contrib/btree_gist/sql/timestamptz.sql +++ b/contrib/btree_gist/sql/timestamptz.sql @@ -39,11 +39,7 @@ SELECT count(*) FROM timestamptztmp WHERE a > '2018-12-18 10:59:54 GMT+4'; SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3; -SET client_min_messages = DEBUG1; CREATE INDEX timestamptzidx ON timestamptztmp USING gist ( a ); -CREATE INDEX timestamptzidx_b ON timestamptztmp USING gist ( a ) WITH (buffering=on); -DROP INDEX timestamptzidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/timetz.sql b/contrib/btree_gist/sql/timetz.sql index bc79d134b8f57..2fb725db747f5 100644 --- a/contrib/btree_gist/sql/timetz.sql +++ b/contrib/btree_gist/sql/timetz.sql @@ -42,11 +42,7 @@ INSERT INTO timetzcmp (r_id,a) SELECT 25,count(*) FROM timetztmp WHERE a > '07: -SET client_min_messages = DEBUG1; CREATE INDEX timetzidx ON timetztmp USING gist ( a ); -CREATE INDEX timetzidx_b ON timetztmp USING gist ( a ) WITH (buffering=on); -DROP INDEX timetzidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/uuid.sql b/contrib/btree_gist/sql/uuid.sql index 7771bc0d8284c..3f7ad764e2db0 100644 --- a/contrib/btree_gist/sql/uuid.sql +++ b/contrib/btree_gist/sql/uuid.sql @@ -16,11 +16,7 @@ SELECT count(*) FROM uuidtmp WHERE a >= '55e65ca2-4136-4a4b-ba78-cd3fe4678203'; SELECT count(*) FROM uuidtmp WHERE a > '55e65ca2-4136-4a4b-ba78-cd3fe4678203'; -SET client_min_messages = DEBUG1; CREATE INDEX uuididx ON uuidtmp USING gist ( a ); -CREATE INDEX uuididx_b ON uuidtmp USING gist ( a ) WITH (buffering=on); -DROP INDEX uuididx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/varbit.sql b/contrib/btree_gist/sql/varbit.sql index 6d8243572bf67..e2a33b5a1b046 100644 --- a/contrib/btree_gist/sql/varbit.sql +++ b/contrib/btree_gist/sql/varbit.sql @@ -16,11 +16,7 @@ SELECT count(*) FROM varbittmp WHERE a >= '1110100111010'; SELECT count(*) FROM varbittmp WHERE a > '1110100111010'; -SET client_min_messages = DEBUG1; CREATE INDEX varbitidx ON varbittmp USING GIST ( a ); -CREATE INDEX varbitidx_b ON varbittmp USING GIST ( a ) WITH (buffering=on); -DROP INDEX varbitidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/contrib/btree_gist/sql/varchar.sql b/contrib/btree_gist/sql/varchar.sql index 59b77e0983c81..8087a17704e7a 100644 --- a/contrib/btree_gist/sql/varchar.sql +++ b/contrib/btree_gist/sql/varchar.sql @@ -16,11 +16,7 @@ SELECT count(*) FROM vchartmp WHERE a >= '31b0'::varchar(32); SELECT count(*) FROM vchartmp WHERE a > '31b0'::varchar(32); -SET client_min_messages = DEBUG1; CREATE INDEX vcharidx ON vchartmp USING GIST ( text(a) ); -CREATE INDEX vcharidx_b ON vchartmp USING GIST ( text(a) ) WITH (buffering=on); -DROP INDEX vcharidx_b; -RESET client_min_messages; SET enable_seqscan=off; diff --git a/src/backend/access/gist/gistbuild.c b/src/backend/access/gist/gistbuild.c index a90e3de3326b8..1054f6f1f2e34 100644 --- a/src/backend/access/gist/gistbuild.c +++ b/src/backend/access/gist/gistbuild.c @@ -260,7 +260,6 @@ gistbuild(Relation heap, Relation index, IndexInfo *indexInfo) /* * Sort all data, build the index from bottom up. */ - elog(DEBUG1, "using sorted GiST build"); buildstate.sortstate = tuplesort_begin_index_gist(heap, index, maintenance_work_mem, From 4560e0acdafd57f3ba109b98e15ac047798d960c Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 7 Apr 2021 13:52:26 +0200 Subject: [PATCH 018/671] doc: Improve wording Discussion: https://www.postgresql.org/message-id/flat/161626776179.652.11944895442156126506%40wrigleys.postgresql.org --- doc/src/sgml/dml.sgml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/dml.sgml b/doc/src/sgml/dml.sgml index 971e6a36b5159..cbbc5e246334e 100644 --- a/doc/src/sgml/dml.sgml +++ b/doc/src/sgml/dml.sgml @@ -26,9 +26,9 @@ When a table is created, it contains no data. The first thing to do before a database can be of much use is to insert data. Data is - conceptually inserted one row at a time. Of course you can also - insert more than one row, but there is no way to insert less than - one row. Even if you know only some column values, a + inserted one row at a time. You can also insert more than one row + in a single command, but it is not possible to insert something that + is not a complete row. Even if you know only some column values, a complete row must be created. From c1968426ba3de1fe37848863e35fff30261bf941 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Wed, 7 Apr 2021 14:21:19 +0200 Subject: [PATCH 019/671] Refactor hba_authname The previous implementation (from 9afffcb833) had an unnecessary check on the boundaries of the enum which trigtered compile warnings. To clean it up, move the pre-existing static assert to a central location and call that. Reported-By: Erik Rijkers Reviewed-By: Michael Paquier Discussion: https://postgr.es/m/1056399262.13159.1617793249020@webmailclassic.xs4all.nl --- src/backend/libpq/auth.c | 2 +- src/backend/libpq/hba.c | 25 +++++++------------------ src/include/libpq/hba.h | 2 +- 3 files changed, 9 insertions(+), 20 deletions(-) diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index dee056b0d6537..27865b14a033b 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -379,7 +379,7 @@ set_authn_id(Port *port, const char *id) ereport(LOG, errmsg("connection authenticated: identity=\"%s\" method=%s " "(%s:%d)", - port->authn_id, hba_authname(port), HbaFileName, + port->authn_id, hba_authname(port->hba->auth_method), HbaFileName, port->hba->linenumber)); } } diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index b720b03e9a5bb..60767f295722a 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -2607,14 +2607,8 @@ fill_hba_line(Tuplestorestate *tuple_store, TupleDesc tupdesc, else nulls[index++] = true; - /* - * Make sure UserAuthName[] tracks additions to the UserAuth enum - */ - StaticAssertStmt(lengthof(UserAuthName) == USER_AUTH_LAST + 1, - "UserAuthName[] must match the UserAuth enum"); - /* auth_method */ - values[index++] = CStringGetTextDatum(UserAuthName[hba->auth_method]); + values[index++] = CStringGetTextDatum(hba_authname(hba->auth_method)); /* options */ options = gethba_options(hba); @@ -3150,18 +3144,13 @@ hba_getauthmethod(hbaPort *port) * should not be freed. */ const char * -hba_authname(hbaPort *port) +hba_authname(UserAuth auth_method) { - UserAuth auth_method; - - Assert(port->hba); - auth_method = port->hba->auth_method; - - if (auth_method < 0 || USER_AUTH_LAST < auth_method) - { - /* Should never happen. */ - elog(FATAL, "port has out-of-bounds UserAuth: %d", auth_method); - } + /* + * Make sure UserAuthName[] tracks additions to the UserAuth enum + */ + StaticAssertStmt(lengthof(UserAuthName) == USER_AUTH_LAST + 1, + "UserAuthName[] must match the UserAuth enum"); return UserAuthName[auth_method]; } diff --git a/src/include/libpq/hba.h b/src/include/libpq/hba.h index 63f2962139ff8..8d9f3821b1284 100644 --- a/src/include/libpq/hba.h +++ b/src/include/libpq/hba.h @@ -137,7 +137,7 @@ typedef struct Port hbaPort; extern bool load_hba(void); extern bool load_ident(void); -extern const char *hba_authname(hbaPort *port); +extern const char *hba_authname(UserAuth auth_method); extern void hba_getauthmethod(hbaPort *port); extern int check_usermap(const char *usermap_name, const char *pg_role, const char *auth_user, From 5c55dc8b47338e72a4e598c155d2048d756fd10e Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 7 Apr 2021 15:11:41 +0200 Subject: [PATCH 020/671] libpq: Set Server Name Indication (SNI) for SSL connections By default, have libpq set the TLS extension "Server Name Indication" (SNI). This allows an SNI-aware SSL proxy to route connections. (This requires a proxy that is aware of the PostgreSQL protocol, not just any SSL proxy.) In the future, this could also allow the server to use different SSL certificates for different host specifications. (That would require new server functionality. This would be the client-side functionality for that.) Since SNI makes the host name appear in cleartext in the network traffic, this might be undesirable in some cases. Therefore, also add a libpq connection option "sslsni" to turn it off. Discussion: https://www.postgresql.org/message-id/flat/7289d5eb-62a5-a732-c3b9-438cee2cb709%40enterprisedb.com --- .../postgres_fdw/expected/postgres_fdw.out | 2 +- doc/src/sgml/libpq.sgml | 31 +++++++++++++++++++ src/interfaces/libpq/fe-connect.c | 6 ++++ src/interfaces/libpq/fe-secure-openssl.c | 22 +++++++++++++ src/interfaces/libpq/libpq-int.h | 1 + 5 files changed, 61 insertions(+), 1 deletion(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 9d472d2d3d6a8..eeb6ae79d0685 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -8917,7 +8917,7 @@ DO $d$ END; $d$; ERROR: invalid option "password" -HINT: Valid options in this context are: service, passfile, channel_binding, connect_timeout, dbname, host, hostaddr, port, options, application_name, keepalives, keepalives_idle, keepalives_interval, keepalives_count, tcp_user_timeout, sslmode, sslcompression, sslcert, sslkey, sslrootcert, sslcrl, sslcrldir, requirepeer, ssl_min_protocol_version, ssl_max_protocol_version, gssencmode, krbsrvname, gsslib, target_session_attrs, use_remote_estimate, fdw_startup_cost, fdw_tuple_cost, extensions, updatable, fetch_size, batch_size, async_capable, keep_connections +HINT: Valid options in this context are: service, passfile, channel_binding, connect_timeout, dbname, host, hostaddr, port, options, application_name, keepalives, keepalives_idle, keepalives_interval, keepalives_count, tcp_user_timeout, sslmode, sslcompression, sslcert, sslkey, sslrootcert, sslcrl, sslcrldir, sslsni, requirepeer, ssl_min_protocol_version, ssl_max_protocol_version, gssencmode, krbsrvname, gsslib, target_session_attrs, use_remote_estimate, fdw_startup_cost, fdw_tuple_cost, extensions, updatable, fetch_size, batch_size, async_capable, keep_connections CONTEXT: SQL statement "ALTER SERVER loopback_nopw OPTIONS (ADD password 'dummypw')" PL/pgSQL function inline_code_block line 3 at EXECUTE -- If we add a password for our user mapping instead, we should get a different diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 3ec458ce09d59..52622fe4c1ae2 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -1777,6 +1777,27 @@ postgresql://%2Fvar%2Flib%2Fpostgresql/dbname + + sslsniServer Name Indication + + + By default, libpq sets the TLS extension Server Name + Indication (SNI) on SSL-enabled connections. See RFC 6066 + for details. By setting this parameter to 0, this is turned off. + + + + The Server Name Indication can be used by SSL-aware proxies to route + connections without having to decrypt the SSL stream. (Note that this + requires a proxy that is aware of the PostgreSQL protocol handshake, + not just any SSL proxy.) However, SNI makes the destination host name + appear in cleartext in the network traffic, so it might be undesirable + in some cases. + + + + requirepeer @@ -7797,6 +7818,16 @@ myEventProc(PGEventId evtId, void *evtInfo, void *passThrough) + + + + PGSSLSNI + + PGSSLSNI behaves the same as the connection parameter. + + + diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 56a8266bc3fc0..aa654dd6a8e48 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -303,6 +303,10 @@ static const internalPQconninfoOption PQconninfoOptions[] = { "SSL-Revocation-List-Dir", "", 64, offsetof(struct pg_conn, sslcrldir)}, + {"sslsni", "PGSSLSNI", "1", NULL, + "SSL-SNI", "", 1, + offsetof(struct pg_conn, sslsni)}, + {"requirepeer", "PGREQUIREPEER", NULL, NULL, "Require-Peer", "", 10, offsetof(struct pg_conn, requirepeer)}, @@ -4095,6 +4099,8 @@ freePGconn(PGconn *conn) free(conn->sslcrldir); if (conn->sslcompression) free(conn->sslcompression); + if (conn->sslsni) + free(conn->sslsni); if (conn->requirepeer) free(conn->requirepeer); if (conn->ssl_min_protocol_version) diff --git a/src/interfaces/libpq/fe-secure-openssl.c b/src/interfaces/libpq/fe-secure-openssl.c index 9c2222c1d1591..6f357dfbfec56 100644 --- a/src/interfaces/libpq/fe-secure-openssl.c +++ b/src/interfaces/libpq/fe-secure-openssl.c @@ -1082,6 +1082,28 @@ initialize_SSL(PGconn *conn) SSL_CTX_free(SSL_context); SSL_context = NULL; + /* + * Set Server Name Indication (SNI), if enabled by connection parameters. + * Per RFC 6066, do not set it if the host is a literal IP address (IPv4 + * or IPv6). + */ + if (conn->sslsni && conn->sslsni[0] && + !(strspn(conn->pghost, "0123456789.") == strlen(conn->pghost) || + strchr(conn->pghost, ':'))) + { + if (SSL_set_tlsext_host_name(conn->ssl, conn->pghost) != 1) + { + char *err = SSLerrmessage(ERR_get_error()); + + appendPQExpBuffer(&conn->errorMessage, + libpq_gettext("could not set SSL Server Name Indication (SNI): %s\n"), + err); + SSLerrfree(err); + SSL_CTX_free(SSL_context); + return -1; + } + } + /* * Read the SSL key. If a key is specified, treat it as an engine:key * combination if there is colon present - we don't support files with diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h index 3f7907127efa8..e81dc37906b8b 100644 --- a/src/interfaces/libpq/libpq-int.h +++ b/src/interfaces/libpq/libpq-int.h @@ -383,6 +383,7 @@ struct pg_conn char *sslrootcert; /* root certificate filename */ char *sslcrl; /* certificate revocation list filename */ char *sslcrldir; /* certificate revocation list directory name */ + char *sslsni; /* use SSL SNI extension (0 or 1) */ char *requirepeer; /* required peer credentials for local sockets */ char *gssencmode; /* GSS mode (require,prefer,disable) */ char *krbsrvname; /* Kerberos service name */ From 23607a8156d595522c232ff3933d77041d3adaa1 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Wed, 7 Apr 2021 15:58:35 +0200 Subject: [PATCH 021/671] Don't add non-existent pages to bitmap from BRIN The code in bringetbitmap() simply added the whole matching page range to the TID bitmap, as determined by pages_per_range, even if some of the pages were beyond the end of the heap. The query then might fail with an error like this: ERROR: could not open file "base/20176/20228.2" (target block 262144): previous segment is only 131021 blocks In this case, the relation has 262093 pages (131072 and 131021 pages), but we're trying to acess block 262144, i.e. first block of the 3rd segment. At that point _mdfd_getseg() notices the preceding segment is incomplete, and fails. Hitting this in practice is rather unlikely, because: * Most indexes use power-of-two ranges, so segments and page ranges align perfectly (segment end is also a page range end). * The table size has to be just right, with the last segment being almost full - less than one page range from full segment, so that the last page range actually crosses the segment boundary. * Prefetch has to be enabled. The regular page access checks that pages are not beyond heap end, but prefetch does not. On older releases (before 12) the execution stops after hitting the first non-existent page, so the prefetch distance has to be sufficient to reach the first page in the next segment to trigger the issue. Since 12 it's enough to just have prefetch enabled, the prefetch distance does not matter. Fixed by not adding non-existent pages to the TID bitmap. Backpatch all the way back to 9.6 (BRIN indexes were introduced in 9.5, but that release is EOL). Backpatch-through: 9.6 --- src/backend/access/brin/brin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c index 2d8759c6c1a8e..f885f3ab3afd6 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -696,7 +696,7 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm) BlockNumber pageno; for (pageno = heapBlk; - pageno <= heapBlk + opaque->bo_pagesPerRange - 1; + pageno <= Min(nblocks, heapBlk + opaque->bo_pagesPerRange) - 1; pageno++) { MemoryContextSwitchTo(oldcxt); From 3db826bd55cd1df0dd8c3d811f8e5b936d7ba1e4 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 7 Apr 2021 11:22:22 -0400 Subject: [PATCH 022/671] Tighten up allowed names for custom GUC parameters. Formerly we were pretty lax about what a custom GUC's name could be; so long as it had at least one dot in it, we'd take it. However, corner cases such as dashes or equal signs in the name would cause various bits of functionality to misbehave. Rather than trying to make the world perfectly safe for that, let's just require that custom names look like "identifier.identifier", where "identifier" means something that scan.l would accept without double quotes. Along the way, this patch refactors things slightly in guc.c so that find_option() is responsible for reporting GUC-not-found cases, allowing removal of duplicative code from its callers. Per report from Hubert Depesz Lubaczewski. No back-patch, since the consequences of the problem don't seem to warrant changing behavior in stable branches. Discussion: https://postgr.es/m/951335.1612910077@sss.pgh.pa.us --- src/backend/utils/misc/guc-file.l | 4 +- src/backend/utils/misc/guc.c | 167 ++++++++++++++++++------------ src/test/regress/expected/guc.out | 21 ++++ src/test/regress/sql/guc.sql | 10 ++ 4 files changed, 132 insertions(+), 70 deletions(-) diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l index 7885a169bb97f..9498bbea2f6dd 100644 --- a/src/backend/utils/misc/guc-file.l +++ b/src/backend/utils/misc/guc-file.l @@ -282,7 +282,7 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel) * Try to find the variable; but do not create a custom placeholder if * it's not there already. */ - record = find_option(item->name, false, elevel); + record = find_option(item->name, false, true, elevel); if (record) { @@ -306,7 +306,7 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel) /* Now mark it as present in file */ record->status |= GUC_IS_IN_FILE; } - else if (strchr(item->name, GUC_QUALIFIER_SEPARATOR) == NULL) + else if (!valid_custom_variable_name(item->name)) { /* Invalid non-custom variable, so complain */ ereport(elevel, diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index c9c9da85f3943..1b007ca85ca95 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -5334,6 +5334,45 @@ add_guc_variable(struct config_generic *var, int elevel) return true; } +/* + * Decide whether a proposed custom variable name is allowed. + * + * It must be "identifier.identifier", where the rules for what is an + * identifier agree with scan.l. + */ +static bool +valid_custom_variable_name(const char *name) +{ + int num_sep = 0; + bool name_start = true; + + for (const char *p = name; *p; p++) + { + if (*p == GUC_QUALIFIER_SEPARATOR) + { + if (name_start) + return false; /* empty name component */ + num_sep++; + name_start = true; + } + else if (strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz", *p) != NULL || + IS_HIGHBIT_SET(*p)) + { + /* okay as first or non-first character */ + name_start = false; + } + else if (!name_start && strchr("0123456789_$", *p) != NULL) + /* okay as non-first character */ ; + else + return false; + } + if (name_start) + return false; /* empty name component */ + /* OK if we had exactly one separator */ + return (num_sep == 1); +} + /* * Create and add a placeholder variable for a custom variable name. */ @@ -5381,12 +5420,23 @@ add_placeholder_variable(const char *name, int elevel) } /* - * Look up option NAME. If it exists, return a pointer to its record, - * else return NULL. If create_placeholders is true, we'll create a - * placeholder record for a valid-looking custom variable name. + * Look up option "name". If it exists, return a pointer to its record. + * Otherwise, if create_placeholders is true and name is a valid-looking + * custom variable name, we'll create and return a placeholder record. + * Otherwise, if skip_errors is true, then we silently return NULL for + * an unrecognized or invalid name. Otherwise, the error is reported at + * error level elevel (and we return NULL if that's less than ERROR). + * + * Note: internal errors, primarily out-of-memory, draw an elevel-level + * report and NULL return regardless of skip_errors. Hence, callers must + * handle a NULL return whenever elevel < ERROR, but they should not need + * to emit any additional error message. (In practice, internal errors + * can only happen when create_placeholders is true, so callers passing + * false need not think terribly hard about this.) */ static struct config_generic * -find_option(const char *name, bool create_placeholders, int elevel) +find_option(const char *name, bool create_placeholders, bool skip_errors, + int elevel) { const char **key = &name; struct config_generic **res; @@ -5414,19 +5464,38 @@ find_option(const char *name, bool create_placeholders, int elevel) for (i = 0; map_old_guc_names[i] != NULL; i += 2) { if (guc_name_compare(name, map_old_guc_names[i]) == 0) - return find_option(map_old_guc_names[i + 1], false, elevel); + return find_option(map_old_guc_names[i + 1], false, + skip_errors, elevel); } if (create_placeholders) { /* - * Check if the name is qualified, and if so, add a placeholder. + * Check if the name is valid, and if so, add a placeholder. If it + * doesn't contain a separator, don't assume that it was meant to be a + * placeholder. */ if (strchr(name, GUC_QUALIFIER_SEPARATOR) != NULL) - return add_placeholder_variable(name, elevel); + { + if (valid_custom_variable_name(name)) + return add_placeholder_variable(name, elevel); + /* A special error message seems desirable here */ + if (!skip_errors) + ereport(elevel, + (errcode(ERRCODE_INVALID_NAME), + errmsg("invalid configuration parameter name \"%s\"", + name), + errdetail("Custom parameter names must be of the form \"identifier.identifier\"."))); + return NULL; + } } /* Unknown name */ + if (!skip_errors) + ereport(elevel, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("unrecognized configuration parameter \"%s\"", + name))); return NULL; } @@ -6444,7 +6513,7 @@ ReportChangedGUCOptions(void) { struct config_generic *record; - record = find_option("in_hot_standby", false, ERROR); + record = find_option("in_hot_standby", false, false, ERROR); Assert(record != NULL); record->status |= GUC_NEEDS_REPORT; report_needed = true; @@ -7218,14 +7287,9 @@ set_config_option(const char *name, const char *value, (errcode(ERRCODE_INVALID_TRANSACTION_STATE), errmsg("cannot set parameters during a parallel operation"))); - record = find_option(name, true, elevel); + record = find_option(name, true, false, elevel); if (record == NULL) - { - ereport(elevel, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("unrecognized configuration parameter \"%s\"", name))); return 0; - } /* * Check if the option can be set at this time. See guc.h for the precise @@ -7947,10 +8011,10 @@ set_config_sourcefile(const char *name, char *sourcefile, int sourceline) */ elevel = IsUnderPostmaster ? DEBUG3 : LOG; - record = find_option(name, true, elevel); + record = find_option(name, true, false, elevel); /* should not happen */ if (record == NULL) - elog(ERROR, "unrecognized configuration parameter \"%s\"", name); + return; sourcefile = guc_strdup(elevel, sourcefile); if (record->sourcefile) @@ -7999,16 +8063,9 @@ GetConfigOption(const char *name, bool missing_ok, bool restrict_privileged) struct config_generic *record; static char buffer[256]; - record = find_option(name, false, ERROR); + record = find_option(name, false, missing_ok, ERROR); if (record == NULL) - { - if (missing_ok) - return NULL; - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("unrecognized configuration parameter \"%s\"", - name))); - } + return NULL; if (restrict_privileged && (record->flags & GUC_SUPERUSER_ONLY) && !is_member_of_role(GetUserId(), ROLE_PG_READ_ALL_SETTINGS)) @@ -8055,11 +8112,8 @@ GetConfigOptionResetString(const char *name) struct config_generic *record; static char buffer[256]; - record = find_option(name, false, ERROR); - if (record == NULL) - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("unrecognized configuration parameter \"%s\"", name))); + record = find_option(name, false, false, ERROR); + Assert(record != NULL); if ((record->flags & GUC_SUPERUSER_ONLY) && !is_member_of_role(GetUserId(), ROLE_PG_READ_ALL_SETTINGS)) ereport(ERROR, @@ -8103,16 +8157,9 @@ GetConfigOptionFlags(const char *name, bool missing_ok) { struct config_generic *record; - record = find_option(name, false, WARNING); + record = find_option(name, false, missing_ok, ERROR); if (record == NULL) - { - if (missing_ok) - return 0; - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("unrecognized configuration parameter \"%s\"", - name))); - } + return 0; return record->flags; } @@ -8144,7 +8191,7 @@ flatten_set_variable_args(const char *name, List *args) * Get flags for the variable; if it's not known, use default flags. * (Caller might throw error later, but not our business to do so here.) */ - record = find_option(name, false, WARNING); + record = find_option(name, false, true, WARNING); if (record) flags = record->flags; else @@ -8439,12 +8486,8 @@ AlterSystemSetConfigFile(AlterSystemStmt *altersysstmt) { struct config_generic *record; - record = find_option(name, false, ERROR); - if (record == NULL) - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("unrecognized configuration parameter \"%s\"", - name))); + record = find_option(name, false, false, ERROR); + Assert(record != NULL); /* * Don't allow parameters that can't be set in configuration files to @@ -9460,19 +9503,12 @@ GetConfigOptionByName(const char *name, const char **varname, bool missing_ok) { struct config_generic *record; - record = find_option(name, false, ERROR); + record = find_option(name, false, missing_ok, ERROR); if (record == NULL) { - if (missing_ok) - { - if (varname) - *varname = NULL; - return NULL; - } - - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("unrecognized configuration parameter \"%s\"", name))); + if (varname) + *varname = NULL; + return NULL; } if ((record->flags & GUC_SUPERUSER_ONLY) && @@ -10318,7 +10354,7 @@ read_nondefault_variables(void) if ((varname = read_string_with_null(fp)) == NULL) break; - if ((record = find_option(varname, true, FATAL)) == NULL) + if ((record = find_option(varname, true, false, FATAL)) == NULL) elog(FATAL, "failed to locate variable \"%s\" in exec config params file", varname); if ((varvalue = read_string_with_null(fp)) == NULL) @@ -11008,7 +11044,7 @@ GUCArrayAdd(ArrayType *array, const char *name, const char *value) (void) validate_option_array_item(name, value, false); /* normalize name (converts obsolete GUC names to modern spellings) */ - record = find_option(name, false, WARNING); + record = find_option(name, false, true, WARNING); if (record) name = record->name; @@ -11087,7 +11123,7 @@ GUCArrayDelete(ArrayType *array, const char *name) (void) validate_option_array_item(name, NULL, false); /* normalize name (converts obsolete GUC names to modern spellings) */ - record = find_option(name, false, WARNING); + record = find_option(name, false, true, WARNING); if (record) name = record->name; @@ -11234,7 +11270,7 @@ validate_option_array_item(const char *name, const char *value, * SUSET and user is superuser). * * name is not known, but exists or can be created as a placeholder (i.e., - * it has a prefixed name). We allow this case if you're a superuser, + * it has a valid custom name). We allow this case if you're a superuser, * otherwise not. Superusers are assumed to know what they're doing. We * can't allow it for other users, because when the placeholder is * resolved it might turn out to be a SUSET variable; @@ -11243,16 +11279,11 @@ validate_option_array_item(const char *name, const char *value, * name is not known and can't be created as a placeholder. Throw error, * unless skipIfNoPermissions is true, in which case return false. */ - gconf = find_option(name, true, WARNING); + gconf = find_option(name, true, skipIfNoPermissions, ERROR); if (!gconf) { /* not known, failed to make a placeholder */ - if (skipIfNoPermissions) - return false; - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("unrecognized configuration parameter \"%s\"", - name))); + return false; } if (gconf->flags & GUC_CUSTOM_PLACEHOLDER) diff --git a/src/test/regress/expected/guc.out b/src/test/regress/expected/guc.out index 811f80a0976bb..c55871a972e0b 100644 --- a/src/test/regress/expected/guc.out +++ b/src/test/regress/expected/guc.out @@ -511,6 +511,27 @@ SET seq_page_cost TO 'NaN'; ERROR: invalid value for parameter "seq_page_cost": "NaN" SET vacuum_cost_delay TO '10s'; ERROR: 10000 ms is outside the valid range for parameter "vacuum_cost_delay" (0 .. 100) +SET no_such_variable TO 42; +ERROR: unrecognized configuration parameter "no_such_variable" +-- Test "custom" GUCs created on the fly (which aren't really an +-- intended feature, but many people use them). +SET custom.my_guc = 42; +SHOW custom.my_guc; + custom.my_guc +--------------- + 42 +(1 row) + +SET custom."bad-guc" = 42; -- disallowed because -c cannot set this name +ERROR: invalid configuration parameter name "custom.bad-guc" +DETAIL: Custom parameter names must be of the form "identifier.identifier". +SHOW custom."bad-guc"; +ERROR: unrecognized configuration parameter "custom.bad-guc" +SET special."weird name" = 'foo'; -- could be allowed, but we choose not to +ERROR: invalid configuration parameter name "special.weird name" +DETAIL: Custom parameter names must be of the form "identifier.identifier". +SHOW special."weird name"; +ERROR: unrecognized configuration parameter "special.weird name" -- -- Test DISCARD TEMP -- diff --git a/src/test/regress/sql/guc.sql b/src/test/regress/sql/guc.sql index 43dbba3775ea7..3650188d9d767 100644 --- a/src/test/regress/sql/guc.sql +++ b/src/test/regress/sql/guc.sql @@ -147,6 +147,16 @@ SELECT '2006-08-13 12:34:56'::timestamptz; -- Test some simple error cases SET seq_page_cost TO 'NaN'; SET vacuum_cost_delay TO '10s'; +SET no_such_variable TO 42; + +-- Test "custom" GUCs created on the fly (which aren't really an +-- intended feature, but many people use them). +SET custom.my_guc = 42; +SHOW custom.my_guc; +SET custom."bad-guc" = 42; -- disallowed because -c cannot set this name +SHOW custom."bad-guc"; +SET special."weird name" = 'foo'; -- could be allowed, but we choose not to +SHOW special."weird name"; -- -- Test DISCARD TEMP From 3c3b8a4b26891892bccf3d220580a7f413c0b9ca Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Wed, 7 Apr 2021 08:47:15 -0700 Subject: [PATCH 023/671] Truncate line pointer array during VACUUM. Teach VACUUM to truncate the line pointer array of each heap page when a contiguous group of LP_UNUSED line pointers appear at the end of the array -- these unused and unreferenced items are excluded. This process occurs during VACUUM's second pass over the heap, right after LP_DEAD line pointers on the page (those encountered/pruned during the first pass) are marked LP_UNUSED. Truncation avoids line pointer bloat with certain workloads, particularly those involving continual range DELETEs and bulk INSERTs against the same table. Also harden heapam code to check for an out-of-range page offset number in places where we weren't already doing so. Author: Matthias van de Meent Author: Peter Geoghegan Reviewed-By: Masahiko Sawada Reviewed-By: Peter Geoghegan Discussion: https://postgr.es/m/CAEze2WjgaQc55Y5f5CQd3L=eS5CZcff2Obxp=O6pto8-f0hC4w@mail.gmail.com Discussion: https://postgr.es/m/CAH2-Wzn6a64PJM1Ggzm=uvx2otsopJMhFQj_g1rAj4GWr3ZSzw@mail.gmail.com --- src/backend/access/heap/heapam.c | 22 ++++-- src/backend/access/heap/pruneheap.c | 4 + src/backend/access/heap/vacuumlazy.c | 16 +++- src/backend/storage/page/bufpage.c | 112 ++++++++++++++++++++++++++- src/include/storage/bufpage.h | 1 + 5 files changed, 144 insertions(+), 11 deletions(-) diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 9cbc161d7a9f7..03d4abc938b88 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -635,8 +635,15 @@ heapgettup(HeapScanDesc scan, } else { + /* + * The previous returned tuple may have been vacuumed since the + * previous scan when we use a non-MVCC snapshot, so we must + * re-establish the lineoff <= PageGetMaxOffsetNumber(dp) + * invariant + */ lineoff = /* previous offnum */ - OffsetNumberPrev(ItemPointerGetOffsetNumber(&(tuple->t_self))); + Min(lines, + OffsetNumberPrev(ItemPointerGetOffsetNumber(&(tuple->t_self)))); } /* page and lineoff now reference the physically previous tid */ @@ -678,6 +685,13 @@ heapgettup(HeapScanDesc scan, lpp = PageGetItemId(dp, lineoff); for (;;) { + /* + * Only continue scanning the page while we have lines left. + * + * Note that this protects us from accessing line pointers past + * PageGetMaxOffsetNumber(); both for forward scans when we resume the + * table scan, and for when we start scanning a new page. + */ while (linesleft > 0) { if (ItemIdIsNormal(lpp)) @@ -8556,10 +8570,8 @@ heap_xlog_vacuum(XLogReaderState *record) ItemIdSetUnused(lp); } - /* - * Update the page's hint bit about whether it has free pointers - */ - PageSetHasFreeLinePointers(page); + /* Attempt to truncate line pointer array now */ + PageTruncateLinePointerArray(page); PageSetLSN(page, lsn); MarkBufferDirty(buffer); diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c index f75502ca2c046..0c8e49d3e6c61 100644 --- a/src/backend/access/heap/pruneheap.c +++ b/src/backend/access/heap/pruneheap.c @@ -962,6 +962,10 @@ heap_get_root_tuples(Page page, OffsetNumber *root_offsets) */ for (;;) { + /* Sanity check */ + if (nextoffnum < FirstOffsetNumber || nextoffnum > maxoff) + break; + lp = PageGetItemId(page, nextoffnum); /* Check for broken chains */ diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 446e3bc45233a..1d55d0ecf9d59 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -1444,7 +1444,11 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) if (prunestate.has_lpdead_items && vacrel->do_index_vacuuming) { /* - * Wait until lazy_vacuum_heap_rel() to save free space. + * Wait until lazy_vacuum_heap_rel() to save free space. This + * doesn't just save us some cycles; it also allows us to record + * any additional free space that lazy_vacuum_heap_page() will + * make available in cases where it's possible to truncate the + * page's line pointer array. * * Note: The one-pass (no indexes) case is only supposed to make * it this far when there were no LP_DEAD items during pruning. @@ -2033,6 +2037,13 @@ lazy_vacuum_all_indexes(LVRelState *vacrel) * Pages that never had lazy_scan_prune record LP_DEAD items are not visited * at all. * + * We may also be able to truncate the line pointer array of the heap pages we + * visit. If there is a contiguous group of LP_UNUSED items at the end of the + * array, it can be reclaimed as free space. These LP_UNUSED items usually + * start out as LP_DEAD items recorded by lazy_scan_prune (we set items from + * each page to LP_UNUSED, and then consider if it's possible to truncate the + * page's line pointer array). + * * Note: the reason for doing this as a second pass is we cannot remove the * tuples until we've removed their index entries, and we want to process * index entry removal in batches as large as possible. @@ -2175,7 +2186,8 @@ lazy_vacuum_heap_page(LVRelState *vacrel, BlockNumber blkno, Buffer buffer, Assert(uncnt > 0); - PageSetHasFreeLinePointers(page); + /* Attempt to truncate line pointer array now */ + PageTruncateLinePointerArray(page); /* * Mark buffer dirty before we write WAL. diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c index 5d5989c2f526f..b231c438f95a5 100644 --- a/src/backend/storage/page/bufpage.c +++ b/src/backend/storage/page/bufpage.c @@ -250,8 +250,17 @@ PageAddItemExtended(Page page, /* if no free slot, we'll put it at limit (1st open slot) */ if (PageHasFreeLinePointers(phdr)) { - /* Look for "recyclable" (unused) ItemId */ - for (offsetNumber = 1; offsetNumber < limit; offsetNumber++) + /* + * Scan line pointer array to locate a "recyclable" (unused) + * ItemId. + * + * Always use earlier items first. PageTruncateLinePointerArray + * can only truncate unused items when they appear as a contiguous + * group at the end of the line pointer array. + */ + for (offsetNumber = FirstOffsetNumber; + offsetNumber < limit; /* limit is maxoff+1 */ + offsetNumber++) { itemId = PageGetItemId(phdr, offsetNumber); @@ -675,11 +684,23 @@ compactify_tuples(itemIdCompact itemidbase, int nitems, Page page, bool presorte /* * PageRepairFragmentation * - * Frees fragmented space on a page. - * It doesn't remove unused line pointers! Please don't change this. + * Frees fragmented space on a heap page following pruning. * * This routine is usable for heap pages only, but see PageIndexMultiDelete. * + * Never removes unused line pointers. PageTruncateLinePointerArray can + * safely remove some unused line pointers. It ought to be safe for this + * routine to free unused line pointers in roughly the same way, but it's not + * clear that that would be beneficial. + * + * PageTruncateLinePointerArray is only called during VACUUM's second pass + * over the heap. Any unused line pointers that it sees are likely to have + * been set to LP_UNUSED (from LP_DEAD) immediately before the time it is + * called. On the other hand, many tables have the vast majority of all + * required pruning performed opportunistically (not during VACUUM). And so + * there is, in general, a good chance that even large groups of unused line + * pointers that we see here will be recycled quickly. + * * Caller had better have a super-exclusive lock on page's buffer. As a side * effect the page's PD_HAS_FREE_LINES hint bit will be set or unset as * needed. @@ -784,6 +805,89 @@ PageRepairFragmentation(Page page) PageClearHasFreeLinePointers(page); } +/* + * PageTruncateLinePointerArray + * + * Removes unused line pointers at the end of the line pointer array. + * + * This routine is usable for heap pages only. It is called by VACUUM during + * its second pass over the heap. We expect at least one LP_UNUSED line + * pointer on the page (if VACUUM didn't have an LP_DEAD item on the page that + * it just set to LP_UNUSED then it should not call here). + * + * We avoid truncating the line pointer array to 0 items, if necessary by + * leaving behind a single remaining LP_UNUSED item. This is a little + * arbitrary, but it seems like a good idea to avoid leaving a PageIsEmpty() + * page behind. + * + * Caller can have either an exclusive lock or a super-exclusive lock on + * page's buffer. The page's PD_HAS_FREE_LINES hint bit will be set or unset + * based on whether or not we leave behind any remaining LP_UNUSED items. + */ +void +PageTruncateLinePointerArray(Page page) +{ + PageHeader phdr = (PageHeader) page; + bool countdone = false, + sethint = false; + int nunusedend = 0; + + /* Scan line pointer array back-to-front */ + for (int i = PageGetMaxOffsetNumber(page); i >= FirstOffsetNumber; i--) + { + ItemId lp = PageGetItemId(page, i); + + if (!countdone && i > FirstOffsetNumber) + { + /* + * Still determining which line pointers from the end of the array + * will be truncated away. Either count another line pointer as + * safe to truncate, or notice that it's not safe to truncate + * additional line pointers (stop counting line pointers). + */ + if (!ItemIdIsUsed(lp)) + nunusedend++; + else + countdone = true; + } + else + { + /* + * Once we've stopped counting we still need to figure out if + * there are any remaining LP_UNUSED line pointers somewhere more + * towards the front of the array. + */ + if (!ItemIdIsUsed(lp)) + { + /* + * This is an unused line pointer that we won't be truncating + * away -- so there is at least one. Set hint on page. + */ + sethint = true; + break; + } + } + } + + if (nunusedend > 0) + { + phdr->pd_lower -= sizeof(ItemIdData) * nunusedend; + +#ifdef CLOBBER_FREED_MEMORY + memset((char *) page + phdr->pd_lower, 0x7F, + sizeof(ItemIdData) * nunusedend); +#endif + } + else + Assert(sethint); + + /* Set hint bit for PageAddItemExtended */ + if (sethint) + PageSetHasFreeLinePointers(page); + else + PageClearHasFreeLinePointers(page); +} + /* * PageGetFreeSpace * Returns the size of the free (allocatable) space on a page, diff --git a/src/include/storage/bufpage.h b/src/include/storage/bufpage.h index 359b749f7f408..c86ccdaf60844 100644 --- a/src/include/storage/bufpage.h +++ b/src/include/storage/bufpage.h @@ -441,6 +441,7 @@ extern Page PageGetTempPageCopy(Page page); extern Page PageGetTempPageCopySpecial(Page page); extern void PageRestoreTempPage(Page tempPage, Page oldPage); extern void PageRepairFragmentation(Page page); +extern void PageTruncateLinePointerArray(Page page); extern Size PageGetFreeSpace(Page page); extern Size PageGetFreeSpaceForMultipleTuples(Page page, int ntups); extern Size PageGetExactFreeSpace(Page page); From 4573f6a9af6e232ba073392716a051ae2017d1e9 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Wed, 7 Apr 2021 12:11:44 -0400 Subject: [PATCH 024/671] amcheck: Remove duplicate XID/MXID bounds checks. Commit 3b6c1259f9ca8e21860aaf24ec6735a8e5598ea0 resulted in the same xmin and xmax bounds checking being performed in both check_tuple() and check_tuple_visibility(). Remove the duplication. While at it, adjust some code comments that were overlooked in that commit. Mark Dilger Discussion: http://postgr.es/m/AC5479E4-6321-473D-AC92-5EC36299FBC2@enterprisedb.com --- contrib/amcheck/verify_heapam.c | 130 ++------------------------------ 1 file changed, 6 insertions(+), 124 deletions(-) diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c index 11ace483d0408..1d769035f1349 100644 --- a/contrib/amcheck/verify_heapam.c +++ b/contrib/amcheck/verify_heapam.c @@ -1390,136 +1390,18 @@ check_tuple_attribute(HeapCheckContext *ctx) static void check_tuple(HeapCheckContext *ctx) { - TransactionId xmin; - TransactionId xmax; - bool fatal = false; - uint16 infomask = ctx->tuphdr->t_infomask; - - /* If xmin is normal, it should be within valid range */ - xmin = HeapTupleHeaderGetXmin(ctx->tuphdr); - switch (get_xid_status(xmin, ctx, NULL)) - { - case XID_INVALID: - case XID_BOUNDS_OK: - break; - case XID_IN_FUTURE: - report_corruption(ctx, - psprintf("xmin %u equals or exceeds next valid transaction ID %u:%u", - xmin, - EpochFromFullTransactionId(ctx->next_fxid), - XidFromFullTransactionId(ctx->next_fxid))); - fatal = true; - break; - case XID_PRECEDES_CLUSTERMIN: - report_corruption(ctx, - psprintf("xmin %u precedes oldest valid transaction ID %u:%u", - xmin, - EpochFromFullTransactionId(ctx->oldest_fxid), - XidFromFullTransactionId(ctx->oldest_fxid))); - fatal = true; - break; - case XID_PRECEDES_RELMIN: - report_corruption(ctx, - psprintf("xmin %u precedes relation freeze threshold %u:%u", - xmin, - EpochFromFullTransactionId(ctx->relfrozenfxid), - XidFromFullTransactionId(ctx->relfrozenfxid))); - fatal = true; - break; - } - - xmax = HeapTupleHeaderGetRawXmax(ctx->tuphdr); - - if (infomask & HEAP_XMAX_IS_MULTI) - { - /* xmax is a multixact, so it should be within valid MXID range */ - switch (check_mxid_valid_in_rel(xmax, ctx)) - { - case XID_INVALID: - report_corruption(ctx, - pstrdup("multitransaction ID is invalid")); - fatal = true; - break; - case XID_PRECEDES_RELMIN: - report_corruption(ctx, - psprintf("multitransaction ID %u precedes relation minimum multitransaction ID threshold %u", - xmax, ctx->relminmxid)); - fatal = true; - break; - case XID_PRECEDES_CLUSTERMIN: - report_corruption(ctx, - psprintf("multitransaction ID %u precedes oldest valid multitransaction ID threshold %u", - xmax, ctx->oldest_mxact)); - fatal = true; - break; - case XID_IN_FUTURE: - report_corruption(ctx, - psprintf("multitransaction ID %u equals or exceeds next valid multitransaction ID %u", - xmax, - ctx->next_mxact)); - fatal = true; - break; - case XID_BOUNDS_OK: - break; - } - } - else - { - /* - * xmax is not a multixact and is normal, so it should be within the - * valid XID range. - */ - switch (get_xid_status(xmax, ctx, NULL)) - { - case XID_INVALID: - case XID_BOUNDS_OK: - break; - case XID_IN_FUTURE: - report_corruption(ctx, - psprintf("xmax %u equals or exceeds next valid transaction ID %u:%u", - xmax, - EpochFromFullTransactionId(ctx->next_fxid), - XidFromFullTransactionId(ctx->next_fxid))); - fatal = true; - break; - case XID_PRECEDES_CLUSTERMIN: - report_corruption(ctx, - psprintf("xmax %u precedes oldest valid transaction ID %u:%u", - xmax, - EpochFromFullTransactionId(ctx->oldest_fxid), - XidFromFullTransactionId(ctx->oldest_fxid))); - fatal = true; - break; - case XID_PRECEDES_RELMIN: - report_corruption(ctx, - psprintf("xmax %u precedes relation freeze threshold %u:%u", - xmax, - EpochFromFullTransactionId(ctx->relfrozenfxid), - XidFromFullTransactionId(ctx->relfrozenfxid))); - fatal = true; - } - } - /* - * Cannot process tuple data if tuple header was corrupt, as the offsets - * within the page cannot be trusted, leaving too much risk of reading - * garbage if we continue. - * - * We also cannot process the tuple if the xmin or xmax were invalid - * relative to relfrozenxid or relminmxid, as clog entries for the xids - * may already be gone. + * Check various forms of tuple header corruption, and if the header is too + * corrupt, do not continue with other checks. */ - if (fatal) + if (!check_tuple_header(ctx)) return; /* - * Check various forms of tuple header corruption. If the header is too - * corrupt to continue checking, or if the tuple is not visible to anyone, - * we cannot continue with other checks. + * Check tuple visibility. If the inserting transaction aborted, we + * cannot assume our relation description matches the tuple structure, and + * therefore cannot check it. */ - if (!check_tuple_header(ctx)) - return; - if (!check_tuple_visibility(ctx)) return; From 0d46771eaaf77ad08555cf34e421234d5943edfa Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 7 Apr 2021 12:21:54 -0400 Subject: [PATCH 025/671] Comment cleanup for a1115fa07. Amit Langote Discussion: https://postgr.es/m/CA+HiwqEcawatEaUh1uTbZMEZTJeLzbroRTz9_X9Z5CFjTWJkhw@mail.gmail.com --- src/backend/executor/nodeModifyTable.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 6a16752c73a10..c5a2a9a054ba4 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -377,9 +377,6 @@ ExecComputeStoredGenerated(ResultRelInfo *resultRelInfo, * * INSERT queries may need a projection to filter out junk attrs in the tlist. * - * This is "one-time" for any given result rel, but we might touch - * more than one result rel in the course of a partitioned INSERT. - * * This is also a convenient place to verify that the * output of an INSERT matches the target table. */ @@ -447,7 +444,7 @@ ExecInitInsertProjection(ModifyTableState *mtstate, * identity info in the junk attrs. * * This is "one-time" for any given result rel, but we might touch more than - * one result rel in the course of a partitioned UPDATE, and each one needs + * one result rel in the course of an inherited UPDATE, and each one needs * its own projection due to possible column order variation. * * This is also a convenient place to verify that the output of an UPDATE From a282ee68a070a8adc6e6d45e8e643769c587ecc3 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 7 Apr 2021 12:50:17 -0400 Subject: [PATCH 026/671] Remove channel binding requirement from clientcert=verify-full test. This fails on older OpenSSL versions that lack channel binding support. Since that feature is not essential to this test case, just remove it, instead of complicating matters. Per buildfarm. Jacob Champion Discussion: https://postgr.es/m/fa8dbbb58c20b1d1adf0082769f80d5466eaf485.camel@vmware.com --- src/test/ssl/t/002_scram.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/ssl/t/002_scram.pl b/src/test/ssl/t/002_scram.pl index 3cb22ffced1ef..194000b523f50 100644 --- a/src/test/ssl/t/002_scram.pl +++ b/src/test/ssl/t/002_scram.pl @@ -104,8 +104,8 @@ # Certificate verification at the connection level should still work fine. $node->connect_ok( - "sslcert=ssl/client.crt sslkey=$client_tmp_key sslrootcert=invalid hostaddr=$SERVERHOSTADDR dbname=verifydb user=ssltestuser channel_binding=require", - "SCRAM with clientcert=verify-full and channel_binding=require", + "sslcert=ssl/client.crt sslkey=$client_tmp_key sslrootcert=invalid hostaddr=$SERVERHOSTADDR dbname=verifydb user=ssltestuser", + "SCRAM with clientcert=verify-full", log_like => [ qr/connection authenticated: identity="ssltestuser" method=scram-sha-256/ ]); From 5fd9dfa5f50e4906c35133a414ebec5b6d518493 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 7 Apr 2021 13:06:47 -0400 Subject: [PATCH 027/671] Move pg_stat_statements query jumbling to core. Add compute_query_id GUC to control whether a query identifier should be computed by the core (off by default). It's thefore now possible to disable core queryid computation and use pg_stat_statements with a different algorithm to compute the query identifier by using a third-party module. To ensure that a single source of query identifier can be used and is well defined, modules that calculate a query identifier should throw an error if compute_query_id specified to compute a query id and if a query idenfitier was already calculated. Discussion: https://postgr.es/m/20210407125726.tkvjdbw76hxnpwfi@nol Author: Julien Rouhaud Reviewed-by: Alvaro Herrera, Nitin Jadhav, Zhihong Yu --- .../pg_stat_statements/pg_stat_statements.c | 805 +---------------- .../pg_stat_statements.conf | 1 + doc/src/sgml/config.sgml | 25 + doc/src/sgml/pgstatstatements.sgml | 20 +- src/backend/parser/analyze.c | 14 +- src/backend/tcop/postgres.c | 6 +- src/backend/utils/misc/Makefile | 1 + src/backend/utils/misc/guc.c | 10 + src/backend/utils/misc/postgresql.conf.sample | 1 + src/backend/utils/misc/queryjumble.c | 834 ++++++++++++++++++ src/include/parser/analyze.h | 4 +- src/include/utils/guc.h | 1 + src/include/utils/queryjumble.h | 58 ++ 13 files changed, 995 insertions(+), 785 deletions(-) create mode 100644 src/backend/utils/misc/queryjumble.c create mode 100644 src/include/utils/queryjumble.h diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index 1141d2b0673e2..0f8bac0ccae42 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -8,24 +8,9 @@ * a shared hashtable. (We track only as many distinct queries as will fit * in the designated amount of shared memory.) * - * As of Postgres 9.2, this module normalizes query entries. Normalization - * is a process whereby similar queries, typically differing only in their - * constants (though the exact rules are somewhat more subtle than that) are - * recognized as equivalent, and are tracked as a single entry. This is - * particularly useful for non-prepared queries. - * - * Normalization is implemented by fingerprinting queries, selectively - * serializing those fields of each query tree's nodes that are judged to be - * essential to the query. This is referred to as a query jumble. This is - * distinct from a regular serialization in that various extraneous - * information is ignored as irrelevant or not essential to the query, such - * as the collations of Vars and, most notably, the values of constants. - * - * This jumble is acquired at the end of parse analysis of each query, and - * a 64-bit hash of it is stored into the query's Query.queryId field. - * The server then copies this value around, making it available in plan - * tree(s) generated from the query. The executor can then use this value - * to blame query costs on the proper queryId. + * Starting in Postgres 9.2, this module normalized query entries. As of + * Postgres 14, the normalization is done by the core if compute_query_id is + * enabled, or optionally by third-party modules. * * To facilitate presenting entries to users, we create "representative" query * strings in which constants are replaced with parameter symbols ($n), to @@ -116,8 +101,6 @@ static const uint32 PGSS_PG_MAJOR_VERSION = PG_VERSION_NUM / 100; #define USAGE_DEALLOC_PERCENT 5 /* free this % of entries at once */ #define IS_STICKY(c) ((c.calls[PGSS_PLAN] + c.calls[PGSS_EXEC]) == 0) -#define JUMBLE_SIZE 1024 /* query serialization buffer size */ - /* * Extension version number, for supporting older extension versions' objects */ @@ -237,40 +220,6 @@ typedef struct pgssSharedState pgssGlobalStats stats; /* global statistics for pgss */ } pgssSharedState; -/* - * Struct for tracking locations/lengths of constants during normalization - */ -typedef struct pgssLocationLen -{ - int location; /* start offset in query text */ - int length; /* length in bytes, or -1 to ignore */ -} pgssLocationLen; - -/* - * Working state for computing a query jumble and producing a normalized - * query string - */ -typedef struct pgssJumbleState -{ - /* Jumble of current query tree */ - unsigned char *jumble; - - /* Number of bytes used in jumble[] */ - Size jumble_len; - - /* Array of locations of constants that should be removed */ - pgssLocationLen *clocations; - - /* Allocated length of clocations array */ - int clocations_buf_size; - - /* Current number of valid entries in clocations array */ - int clocations_count; - - /* highest Param id we've seen, in order to start normalization correctly */ - int highest_extern_param_id; -} pgssJumbleState; - /*---- Local variables ----*/ /* Current nesting depth of ExecutorRun+ProcessUtility calls */ @@ -344,7 +293,8 @@ PG_FUNCTION_INFO_V1(pg_stat_statements_info); static void pgss_shmem_startup(void); static void pgss_shmem_shutdown(int code, Datum arg); -static void pgss_post_parse_analyze(ParseState *pstate, Query *query); +static void pgss_post_parse_analyze(ParseState *pstate, Query *query, + JumbleState *jstate); static PlannedStmt *pgss_planner(Query *parse, const char *query_string, int cursorOptions, @@ -366,7 +316,7 @@ static void pgss_store(const char *query, uint64 queryId, double total_time, uint64 rows, const BufferUsage *bufusage, const WalUsage *walusage, - pgssJumbleState *jstate); + JumbleState *jstate); static void pg_stat_statements_internal(FunctionCallInfo fcinfo, pgssVersion api_version, bool showtext); @@ -382,16 +332,9 @@ static char *qtext_fetch(Size query_offset, int query_len, static bool need_gc_qtexts(void); static void gc_qtexts(void); static void entry_reset(Oid userid, Oid dbid, uint64 queryid); -static void AppendJumble(pgssJumbleState *jstate, - const unsigned char *item, Size size); -static void JumbleQuery(pgssJumbleState *jstate, Query *query); -static void JumbleRangeTable(pgssJumbleState *jstate, List *rtable); -static void JumbleRowMarks(pgssJumbleState *jstate, List *rowMarks); -static void JumbleExpr(pgssJumbleState *jstate, Node *node); -static void RecordConstLocation(pgssJumbleState *jstate, int location); -static char *generate_normalized_query(pgssJumbleState *jstate, const char *query, +static char *generate_normalized_query(JumbleState *jstate, const char *query, int query_loc, int *query_len_p); -static void fill_in_constant_lengths(pgssJumbleState *jstate, const char *query, +static void fill_in_constant_lengths(JumbleState *jstate, const char *query, int query_loc); static int comp_location(const void *a, const void *b); @@ -853,15 +796,10 @@ pgss_shmem_shutdown(int code, Datum arg) * Post-parse-analysis hook: mark query with a queryId */ static void -pgss_post_parse_analyze(ParseState *pstate, Query *query) +pgss_post_parse_analyze(ParseState *pstate, Query *query, JumbleState *jstate) { - pgssJumbleState jstate; - if (prev_post_parse_analyze_hook) - prev_post_parse_analyze_hook(pstate, query); - - /* Assert we didn't do this already */ - Assert(query->queryId == UINT64CONST(0)); + prev_post_parse_analyze_hook(pstate, query, jstate); /* Safety check... */ if (!pgss || !pgss_hash || !pgss_enabled(exec_nested_level)) @@ -881,35 +819,14 @@ pgss_post_parse_analyze(ParseState *pstate, Query *query) return; } - /* Set up workspace for query jumbling */ - jstate.jumble = (unsigned char *) palloc(JUMBLE_SIZE); - jstate.jumble_len = 0; - jstate.clocations_buf_size = 32; - jstate.clocations = (pgssLocationLen *) - palloc(jstate.clocations_buf_size * sizeof(pgssLocationLen)); - jstate.clocations_count = 0; - jstate.highest_extern_param_id = 0; - - /* Compute query ID and mark the Query node with it */ - JumbleQuery(&jstate, query); - query->queryId = - DatumGetUInt64(hash_any_extended(jstate.jumble, jstate.jumble_len, 0)); - /* - * If we are unlucky enough to get a hash of zero, use 1 instead, to - * prevent confusion with the utility-statement case. + * If query jumbling were able to identify any ignorable constants, we + * immediately create a hash table entry for the query, so that we can + * record the normalized form of the query string. If there were no such + * constants, the normalized string would be the same as the query text + * anyway, so there's no need for an early entry. */ - if (query->queryId == UINT64CONST(0)) - query->queryId = UINT64CONST(1); - - /* - * If we were able to identify any ignorable constants, we immediately - * create a hash table entry for the query, so that we can record the - * normalized form of the query string. If there were no such constants, - * the normalized string would be the same as the query text anyway, so - * there's no need for an early entry. - */ - if (jstate.clocations_count > 0) + if (jstate && jstate->clocations_count > 0) pgss_store(pstate->p_sourcetext, query->queryId, query->stmt_location, @@ -919,7 +836,7 @@ pgss_post_parse_analyze(ParseState *pstate, Query *query) 0, NULL, NULL, - &jstate); + jstate); } /* @@ -1269,7 +1186,7 @@ pgss_store(const char *query, uint64 queryId, double total_time, uint64 rows, const BufferUsage *bufusage, const WalUsage *walusage, - pgssJumbleState *jstate) + JumbleState *jstate) { pgssHashKey key; pgssEntry *entry; @@ -2629,678 +2546,6 @@ entry_reset(Oid userid, Oid dbid, uint64 queryid) LWLockRelease(pgss->lock); } -/* - * AppendJumble: Append a value that is substantive in a given query to - * the current jumble. - */ -static void -AppendJumble(pgssJumbleState *jstate, const unsigned char *item, Size size) -{ - unsigned char *jumble = jstate->jumble; - Size jumble_len = jstate->jumble_len; - - /* - * Whenever the jumble buffer is full, we hash the current contents and - * reset the buffer to contain just that hash value, thus relying on the - * hash to summarize everything so far. - */ - while (size > 0) - { - Size part_size; - - if (jumble_len >= JUMBLE_SIZE) - { - uint64 start_hash; - - start_hash = DatumGetUInt64(hash_any_extended(jumble, - JUMBLE_SIZE, 0)); - memcpy(jumble, &start_hash, sizeof(start_hash)); - jumble_len = sizeof(start_hash); - } - part_size = Min(size, JUMBLE_SIZE - jumble_len); - memcpy(jumble + jumble_len, item, part_size); - jumble_len += part_size; - item += part_size; - size -= part_size; - } - jstate->jumble_len = jumble_len; -} - -/* - * Wrappers around AppendJumble to encapsulate details of serialization - * of individual local variable elements. - */ -#define APP_JUMB(item) \ - AppendJumble(jstate, (const unsigned char *) &(item), sizeof(item)) -#define APP_JUMB_STRING(str) \ - AppendJumble(jstate, (const unsigned char *) (str), strlen(str) + 1) - -/* - * JumbleQuery: Selectively serialize the query tree, appending significant - * data to the "query jumble" while ignoring nonsignificant data. - * - * Rule of thumb for what to include is that we should ignore anything not - * semantically significant (such as alias names) as well as anything that can - * be deduced from child nodes (else we'd just be double-hashing that piece - * of information). - */ -static void -JumbleQuery(pgssJumbleState *jstate, Query *query) -{ - Assert(IsA(query, Query)); - Assert(query->utilityStmt == NULL); - - APP_JUMB(query->commandType); - /* resultRelation is usually predictable from commandType */ - JumbleExpr(jstate, (Node *) query->cteList); - JumbleRangeTable(jstate, query->rtable); - JumbleExpr(jstate, (Node *) query->jointree); - JumbleExpr(jstate, (Node *) query->targetList); - JumbleExpr(jstate, (Node *) query->onConflict); - JumbleExpr(jstate, (Node *) query->returningList); - JumbleExpr(jstate, (Node *) query->groupClause); - JumbleExpr(jstate, (Node *) query->groupingSets); - JumbleExpr(jstate, query->havingQual); - JumbleExpr(jstate, (Node *) query->windowClause); - JumbleExpr(jstate, (Node *) query->distinctClause); - JumbleExpr(jstate, (Node *) query->sortClause); - JumbleExpr(jstate, query->limitOffset); - JumbleExpr(jstate, query->limitCount); - JumbleRowMarks(jstate, query->rowMarks); - JumbleExpr(jstate, query->setOperations); -} - -/* - * Jumble a range table - */ -static void -JumbleRangeTable(pgssJumbleState *jstate, List *rtable) -{ - ListCell *lc; - - foreach(lc, rtable) - { - RangeTblEntry *rte = lfirst_node(RangeTblEntry, lc); - - APP_JUMB(rte->rtekind); - switch (rte->rtekind) - { - case RTE_RELATION: - APP_JUMB(rte->relid); - JumbleExpr(jstate, (Node *) rte->tablesample); - break; - case RTE_SUBQUERY: - JumbleQuery(jstate, rte->subquery); - break; - case RTE_JOIN: - APP_JUMB(rte->jointype); - break; - case RTE_FUNCTION: - JumbleExpr(jstate, (Node *) rte->functions); - break; - case RTE_TABLEFUNC: - JumbleExpr(jstate, (Node *) rte->tablefunc); - break; - case RTE_VALUES: - JumbleExpr(jstate, (Node *) rte->values_lists); - break; - case RTE_CTE: - - /* - * Depending on the CTE name here isn't ideal, but it's the - * only info we have to identify the referenced WITH item. - */ - APP_JUMB_STRING(rte->ctename); - APP_JUMB(rte->ctelevelsup); - break; - case RTE_NAMEDTUPLESTORE: - APP_JUMB_STRING(rte->enrname); - break; - case RTE_RESULT: - break; - default: - elog(ERROR, "unrecognized RTE kind: %d", (int) rte->rtekind); - break; - } - } -} - -/* - * Jumble a rowMarks list - */ -static void -JumbleRowMarks(pgssJumbleState *jstate, List *rowMarks) -{ - ListCell *lc; - - foreach(lc, rowMarks) - { - RowMarkClause *rowmark = lfirst_node(RowMarkClause, lc); - - if (!rowmark->pushedDown) - { - APP_JUMB(rowmark->rti); - APP_JUMB(rowmark->strength); - APP_JUMB(rowmark->waitPolicy); - } - } -} - -/* - * Jumble an expression tree - * - * In general this function should handle all the same node types that - * expression_tree_walker() does, and therefore it's coded to be as parallel - * to that function as possible. However, since we are only invoked on - * queries immediately post-parse-analysis, we need not handle node types - * that only appear in planning. - * - * Note: the reason we don't simply use expression_tree_walker() is that the - * point of that function is to support tree walkers that don't care about - * most tree node types, but here we care about all types. We should complain - * about any unrecognized node type. - */ -static void -JumbleExpr(pgssJumbleState *jstate, Node *node) -{ - ListCell *temp; - - if (node == NULL) - return; - - /* Guard against stack overflow due to overly complex expressions */ - check_stack_depth(); - - /* - * We always emit the node's NodeTag, then any additional fields that are - * considered significant, and then we recurse to any child nodes. - */ - APP_JUMB(node->type); - - switch (nodeTag(node)) - { - case T_Var: - { - Var *var = (Var *) node; - - APP_JUMB(var->varno); - APP_JUMB(var->varattno); - APP_JUMB(var->varlevelsup); - } - break; - case T_Const: - { - Const *c = (Const *) node; - - /* We jumble only the constant's type, not its value */ - APP_JUMB(c->consttype); - /* Also, record its parse location for query normalization */ - RecordConstLocation(jstate, c->location); - } - break; - case T_Param: - { - Param *p = (Param *) node; - - APP_JUMB(p->paramkind); - APP_JUMB(p->paramid); - APP_JUMB(p->paramtype); - /* Also, track the highest external Param id */ - if (p->paramkind == PARAM_EXTERN && - p->paramid > jstate->highest_extern_param_id) - jstate->highest_extern_param_id = p->paramid; - } - break; - case T_Aggref: - { - Aggref *expr = (Aggref *) node; - - APP_JUMB(expr->aggfnoid); - JumbleExpr(jstate, (Node *) expr->aggdirectargs); - JumbleExpr(jstate, (Node *) expr->args); - JumbleExpr(jstate, (Node *) expr->aggorder); - JumbleExpr(jstate, (Node *) expr->aggdistinct); - JumbleExpr(jstate, (Node *) expr->aggfilter); - } - break; - case T_GroupingFunc: - { - GroupingFunc *grpnode = (GroupingFunc *) node; - - JumbleExpr(jstate, (Node *) grpnode->refs); - } - break; - case T_WindowFunc: - { - WindowFunc *expr = (WindowFunc *) node; - - APP_JUMB(expr->winfnoid); - APP_JUMB(expr->winref); - JumbleExpr(jstate, (Node *) expr->args); - JumbleExpr(jstate, (Node *) expr->aggfilter); - } - break; - case T_SubscriptingRef: - { - SubscriptingRef *sbsref = (SubscriptingRef *) node; - - JumbleExpr(jstate, (Node *) sbsref->refupperindexpr); - JumbleExpr(jstate, (Node *) sbsref->reflowerindexpr); - JumbleExpr(jstate, (Node *) sbsref->refexpr); - JumbleExpr(jstate, (Node *) sbsref->refassgnexpr); - } - break; - case T_FuncExpr: - { - FuncExpr *expr = (FuncExpr *) node; - - APP_JUMB(expr->funcid); - JumbleExpr(jstate, (Node *) expr->args); - } - break; - case T_NamedArgExpr: - { - NamedArgExpr *nae = (NamedArgExpr *) node; - - APP_JUMB(nae->argnumber); - JumbleExpr(jstate, (Node *) nae->arg); - } - break; - case T_OpExpr: - case T_DistinctExpr: /* struct-equivalent to OpExpr */ - case T_NullIfExpr: /* struct-equivalent to OpExpr */ - { - OpExpr *expr = (OpExpr *) node; - - APP_JUMB(expr->opno); - JumbleExpr(jstate, (Node *) expr->args); - } - break; - case T_ScalarArrayOpExpr: - { - ScalarArrayOpExpr *expr = (ScalarArrayOpExpr *) node; - - APP_JUMB(expr->opno); - APP_JUMB(expr->useOr); - JumbleExpr(jstate, (Node *) expr->args); - } - break; - case T_BoolExpr: - { - BoolExpr *expr = (BoolExpr *) node; - - APP_JUMB(expr->boolop); - JumbleExpr(jstate, (Node *) expr->args); - } - break; - case T_SubLink: - { - SubLink *sublink = (SubLink *) node; - - APP_JUMB(sublink->subLinkType); - APP_JUMB(sublink->subLinkId); - JumbleExpr(jstate, (Node *) sublink->testexpr); - JumbleQuery(jstate, castNode(Query, sublink->subselect)); - } - break; - case T_FieldSelect: - { - FieldSelect *fs = (FieldSelect *) node; - - APP_JUMB(fs->fieldnum); - JumbleExpr(jstate, (Node *) fs->arg); - } - break; - case T_FieldStore: - { - FieldStore *fstore = (FieldStore *) node; - - JumbleExpr(jstate, (Node *) fstore->arg); - JumbleExpr(jstate, (Node *) fstore->newvals); - } - break; - case T_RelabelType: - { - RelabelType *rt = (RelabelType *) node; - - APP_JUMB(rt->resulttype); - JumbleExpr(jstate, (Node *) rt->arg); - } - break; - case T_CoerceViaIO: - { - CoerceViaIO *cio = (CoerceViaIO *) node; - - APP_JUMB(cio->resulttype); - JumbleExpr(jstate, (Node *) cio->arg); - } - break; - case T_ArrayCoerceExpr: - { - ArrayCoerceExpr *acexpr = (ArrayCoerceExpr *) node; - - APP_JUMB(acexpr->resulttype); - JumbleExpr(jstate, (Node *) acexpr->arg); - JumbleExpr(jstate, (Node *) acexpr->elemexpr); - } - break; - case T_ConvertRowtypeExpr: - { - ConvertRowtypeExpr *crexpr = (ConvertRowtypeExpr *) node; - - APP_JUMB(crexpr->resulttype); - JumbleExpr(jstate, (Node *) crexpr->arg); - } - break; - case T_CollateExpr: - { - CollateExpr *ce = (CollateExpr *) node; - - APP_JUMB(ce->collOid); - JumbleExpr(jstate, (Node *) ce->arg); - } - break; - case T_CaseExpr: - { - CaseExpr *caseexpr = (CaseExpr *) node; - - JumbleExpr(jstate, (Node *) caseexpr->arg); - foreach(temp, caseexpr->args) - { - CaseWhen *when = lfirst_node(CaseWhen, temp); - - JumbleExpr(jstate, (Node *) when->expr); - JumbleExpr(jstate, (Node *) when->result); - } - JumbleExpr(jstate, (Node *) caseexpr->defresult); - } - break; - case T_CaseTestExpr: - { - CaseTestExpr *ct = (CaseTestExpr *) node; - - APP_JUMB(ct->typeId); - } - break; - case T_ArrayExpr: - JumbleExpr(jstate, (Node *) ((ArrayExpr *) node)->elements); - break; - case T_RowExpr: - JumbleExpr(jstate, (Node *) ((RowExpr *) node)->args); - break; - case T_RowCompareExpr: - { - RowCompareExpr *rcexpr = (RowCompareExpr *) node; - - APP_JUMB(rcexpr->rctype); - JumbleExpr(jstate, (Node *) rcexpr->largs); - JumbleExpr(jstate, (Node *) rcexpr->rargs); - } - break; - case T_CoalesceExpr: - JumbleExpr(jstate, (Node *) ((CoalesceExpr *) node)->args); - break; - case T_MinMaxExpr: - { - MinMaxExpr *mmexpr = (MinMaxExpr *) node; - - APP_JUMB(mmexpr->op); - JumbleExpr(jstate, (Node *) mmexpr->args); - } - break; - case T_SQLValueFunction: - { - SQLValueFunction *svf = (SQLValueFunction *) node; - - APP_JUMB(svf->op); - /* type is fully determined by op */ - APP_JUMB(svf->typmod); - } - break; - case T_XmlExpr: - { - XmlExpr *xexpr = (XmlExpr *) node; - - APP_JUMB(xexpr->op); - JumbleExpr(jstate, (Node *) xexpr->named_args); - JumbleExpr(jstate, (Node *) xexpr->args); - } - break; - case T_NullTest: - { - NullTest *nt = (NullTest *) node; - - APP_JUMB(nt->nulltesttype); - JumbleExpr(jstate, (Node *) nt->arg); - } - break; - case T_BooleanTest: - { - BooleanTest *bt = (BooleanTest *) node; - - APP_JUMB(bt->booltesttype); - JumbleExpr(jstate, (Node *) bt->arg); - } - break; - case T_CoerceToDomain: - { - CoerceToDomain *cd = (CoerceToDomain *) node; - - APP_JUMB(cd->resulttype); - JumbleExpr(jstate, (Node *) cd->arg); - } - break; - case T_CoerceToDomainValue: - { - CoerceToDomainValue *cdv = (CoerceToDomainValue *) node; - - APP_JUMB(cdv->typeId); - } - break; - case T_SetToDefault: - { - SetToDefault *sd = (SetToDefault *) node; - - APP_JUMB(sd->typeId); - } - break; - case T_CurrentOfExpr: - { - CurrentOfExpr *ce = (CurrentOfExpr *) node; - - APP_JUMB(ce->cvarno); - if (ce->cursor_name) - APP_JUMB_STRING(ce->cursor_name); - APP_JUMB(ce->cursor_param); - } - break; - case T_NextValueExpr: - { - NextValueExpr *nve = (NextValueExpr *) node; - - APP_JUMB(nve->seqid); - APP_JUMB(nve->typeId); - } - break; - case T_InferenceElem: - { - InferenceElem *ie = (InferenceElem *) node; - - APP_JUMB(ie->infercollid); - APP_JUMB(ie->inferopclass); - JumbleExpr(jstate, ie->expr); - } - break; - case T_TargetEntry: - { - TargetEntry *tle = (TargetEntry *) node; - - APP_JUMB(tle->resno); - APP_JUMB(tle->ressortgroupref); - JumbleExpr(jstate, (Node *) tle->expr); - } - break; - case T_RangeTblRef: - { - RangeTblRef *rtr = (RangeTblRef *) node; - - APP_JUMB(rtr->rtindex); - } - break; - case T_JoinExpr: - { - JoinExpr *join = (JoinExpr *) node; - - APP_JUMB(join->jointype); - APP_JUMB(join->isNatural); - APP_JUMB(join->rtindex); - JumbleExpr(jstate, join->larg); - JumbleExpr(jstate, join->rarg); - JumbleExpr(jstate, join->quals); - } - break; - case T_FromExpr: - { - FromExpr *from = (FromExpr *) node; - - JumbleExpr(jstate, (Node *) from->fromlist); - JumbleExpr(jstate, from->quals); - } - break; - case T_OnConflictExpr: - { - OnConflictExpr *conf = (OnConflictExpr *) node; - - APP_JUMB(conf->action); - JumbleExpr(jstate, (Node *) conf->arbiterElems); - JumbleExpr(jstate, conf->arbiterWhere); - JumbleExpr(jstate, (Node *) conf->onConflictSet); - JumbleExpr(jstate, conf->onConflictWhere); - APP_JUMB(conf->constraint); - APP_JUMB(conf->exclRelIndex); - JumbleExpr(jstate, (Node *) conf->exclRelTlist); - } - break; - case T_List: - foreach(temp, (List *) node) - { - JumbleExpr(jstate, (Node *) lfirst(temp)); - } - break; - case T_IntList: - foreach(temp, (List *) node) - { - APP_JUMB(lfirst_int(temp)); - } - break; - case T_SortGroupClause: - { - SortGroupClause *sgc = (SortGroupClause *) node; - - APP_JUMB(sgc->tleSortGroupRef); - APP_JUMB(sgc->eqop); - APP_JUMB(sgc->sortop); - APP_JUMB(sgc->nulls_first); - } - break; - case T_GroupingSet: - { - GroupingSet *gsnode = (GroupingSet *) node; - - JumbleExpr(jstate, (Node *) gsnode->content); - } - break; - case T_WindowClause: - { - WindowClause *wc = (WindowClause *) node; - - APP_JUMB(wc->winref); - APP_JUMB(wc->frameOptions); - JumbleExpr(jstate, (Node *) wc->partitionClause); - JumbleExpr(jstate, (Node *) wc->orderClause); - JumbleExpr(jstate, wc->startOffset); - JumbleExpr(jstate, wc->endOffset); - } - break; - case T_CommonTableExpr: - { - CommonTableExpr *cte = (CommonTableExpr *) node; - - /* we store the string name because RTE_CTE RTEs need it */ - APP_JUMB_STRING(cte->ctename); - APP_JUMB(cte->ctematerialized); - JumbleQuery(jstate, castNode(Query, cte->ctequery)); - } - break; - case T_SetOperationStmt: - { - SetOperationStmt *setop = (SetOperationStmt *) node; - - APP_JUMB(setop->op); - APP_JUMB(setop->all); - JumbleExpr(jstate, setop->larg); - JumbleExpr(jstate, setop->rarg); - } - break; - case T_RangeTblFunction: - { - RangeTblFunction *rtfunc = (RangeTblFunction *) node; - - JumbleExpr(jstate, rtfunc->funcexpr); - } - break; - case T_TableFunc: - { - TableFunc *tablefunc = (TableFunc *) node; - - JumbleExpr(jstate, tablefunc->docexpr); - JumbleExpr(jstate, tablefunc->rowexpr); - JumbleExpr(jstate, (Node *) tablefunc->colexprs); - } - break; - case T_TableSampleClause: - { - TableSampleClause *tsc = (TableSampleClause *) node; - - APP_JUMB(tsc->tsmhandler); - JumbleExpr(jstate, (Node *) tsc->args); - JumbleExpr(jstate, (Node *) tsc->repeatable); - } - break; - default: - /* Only a warning, since we can stumble along anyway */ - elog(WARNING, "unrecognized node type: %d", - (int) nodeTag(node)); - break; - } -} - -/* - * Record location of constant within query string of query tree - * that is currently being walked. - */ -static void -RecordConstLocation(pgssJumbleState *jstate, int location) -{ - /* -1 indicates unknown or undefined location */ - if (location >= 0) - { - /* enlarge array if needed */ - if (jstate->clocations_count >= jstate->clocations_buf_size) - { - jstate->clocations_buf_size *= 2; - jstate->clocations = (pgssLocationLen *) - repalloc(jstate->clocations, - jstate->clocations_buf_size * - sizeof(pgssLocationLen)); - } - jstate->clocations[jstate->clocations_count].location = location; - /* initialize lengths to -1 to simplify fill_in_constant_lengths */ - jstate->clocations[jstate->clocations_count].length = -1; - jstate->clocations_count++; - } -} - /* * Generate a normalized version of the query string that will be used to * represent all similar queries. @@ -3321,7 +2566,7 @@ RecordConstLocation(pgssJumbleState *jstate, int location) * Returns a palloc'd string. */ static char * -generate_normalized_query(pgssJumbleState *jstate, const char *query, +generate_normalized_query(JumbleState *jstate, const char *query, int query_loc, int *query_len_p) { char *norm_query; @@ -3428,10 +2673,10 @@ generate_normalized_query(pgssJumbleState *jstate, const char *query, * reason for a constant to start with a '-'. */ static void -fill_in_constant_lengths(pgssJumbleState *jstate, const char *query, +fill_in_constant_lengths(JumbleState *jstate, const char *query, int query_loc) { - pgssLocationLen *locs; + LocationLen *locs; core_yyscan_t yyscanner; core_yy_extra_type yyextra; core_YYSTYPE yylval; @@ -3445,7 +2690,7 @@ fill_in_constant_lengths(pgssJumbleState *jstate, const char *query, */ if (jstate->clocations_count > 1) qsort(jstate->clocations, jstate->clocations_count, - sizeof(pgssLocationLen), comp_location); + sizeof(LocationLen), comp_location); locs = jstate->clocations; /* initialize the flex scanner --- should match raw_parser() */ @@ -3525,13 +2770,13 @@ fill_in_constant_lengths(pgssJumbleState *jstate, const char *query, } /* - * comp_location: comparator for qsorting pgssLocationLen structs by location + * comp_location: comparator for qsorting LocationLen structs by location */ static int comp_location(const void *a, const void *b) { - int l = ((const pgssLocationLen *) a)->location; - int r = ((const pgssLocationLen *) b)->location; + int l = ((const LocationLen *) a)->location; + int r = ((const LocationLen *) b)->location; if (l < r) return -1; diff --git a/contrib/pg_stat_statements/pg_stat_statements.conf b/contrib/pg_stat_statements/pg_stat_statements.conf index 13346e2807835..e47b26040ffcd 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.conf +++ b/contrib/pg_stat_statements/pg_stat_statements.conf @@ -1 +1,2 @@ shared_preload_libraries = 'pg_stat_statements' +compute_query_id = on diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index e51639d56c7c2..9d846cb7be0f6 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -7622,6 +7622,31 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; Statistics Monitoring + + compute_query_id (boolean) + + compute_query_id configuration parameter + + + + + Enables in-core computation of a query identifier. The extension requires a query identifier + to be computed. Note that an external module can alternatively + be used if the in-core query identifier computation method + isn't acceptable. In this case, in-core computation should + remain disabled. The default is off. + + + + To ensure that a only one query identifier is calculated and + displayed, extensions that calculate query identifiers should + throw an error if a query identifier has already been computed. + + + + + log_statement_stats (boolean) diff --git a/doc/src/sgml/pgstatstatements.sgml b/doc/src/sgml/pgstatstatements.sgml index 464bf0e5aedbc..3ca292d71fbbd 100644 --- a/doc/src/sgml/pgstatstatements.sgml +++ b/doc/src/sgml/pgstatstatements.sgml @@ -20,6 +20,14 @@ This means that a server restart is needed to add or remove the module. + + The module will not track statistics unless query + identifiers are calculated. This can be done by enabling or using a third-party module that + computes its own query identifiers. Note that all statistics tracked + by this module must be reset if the query identifier method is changed. + + When pg_stat_statements is loaded, it tracks statistics across all databases of the server. To access and manipulate @@ -84,7 +92,7 @@ queryid bigint - Internal hash code, computed from the statement's parse tree + Hash code to identify identical normalized queries. @@ -386,6 +394,16 @@ are compared strictly on the basis of their textual query strings, however. + + + The following details about constant replacement and + queryid only applies when is enabled. If you use an external + module instead to compute queryid, you + should refer to its documentation for details. + + + When a constant's value has been ignored for purposes of matching the query to other queries, the constant is replaced by a parameter symbol, such diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index bce7a27de00e5..d6da20ee8c58c 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -46,6 +46,8 @@ #include "parser/parsetree.h" #include "rewrite/rewriteManip.h" #include "utils/builtins.h" +#include "utils/guc.h" +#include "utils/queryjumble.h" #include "utils/rel.h" @@ -107,6 +109,7 @@ parse_analyze(RawStmt *parseTree, const char *sourceText, { ParseState *pstate = make_parsestate(NULL); Query *query; + JumbleState *jstate = NULL; Assert(sourceText != NULL); /* required as of 8.4 */ @@ -119,8 +122,11 @@ parse_analyze(RawStmt *parseTree, const char *sourceText, query = transformTopLevelStmt(pstate, parseTree); + if (compute_query_id) + jstate = JumbleQuery(query, sourceText); + if (post_parse_analyze_hook) - (*post_parse_analyze_hook) (pstate, query); + (*post_parse_analyze_hook) (pstate, query, jstate); free_parsestate(pstate); @@ -140,6 +146,7 @@ parse_analyze_varparams(RawStmt *parseTree, const char *sourceText, { ParseState *pstate = make_parsestate(NULL); Query *query; + JumbleState *jstate = NULL; Assert(sourceText != NULL); /* required as of 8.4 */ @@ -152,8 +159,11 @@ parse_analyze_varparams(RawStmt *parseTree, const char *sourceText, /* make sure all is well with parameter types */ check_variable_parameters(pstate, query); + if (compute_query_id) + jstate = JumbleQuery(query, sourceText); + if (post_parse_analyze_hook) - (*post_parse_analyze_hook) (pstate, query); + (*post_parse_analyze_hook) (pstate, query, jstate); free_parsestate(pstate); diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 330ec5b028890..50f2f7f2465bd 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -668,6 +668,7 @@ pg_analyze_and_rewrite_params(RawStmt *parsetree, ParseState *pstate; Query *query; List *querytree_list; + JumbleState *jstate = NULL; Assert(query_string != NULL); /* required as of 8.4 */ @@ -686,8 +687,11 @@ pg_analyze_and_rewrite_params(RawStmt *parsetree, query = transformTopLevelStmt(pstate, parsetree); + if (compute_query_id) + jstate = JumbleQuery(query, query_string); + if (post_parse_analyze_hook) - (*post_parse_analyze_hook) (pstate, query); + (*post_parse_analyze_hook) (pstate, query, jstate); free_parsestate(pstate); diff --git a/src/backend/utils/misc/Makefile b/src/backend/utils/misc/Makefile index 2397fc2453ef5..1d5327cf644a6 100644 --- a/src/backend/utils/misc/Makefile +++ b/src/backend/utils/misc/Makefile @@ -22,6 +22,7 @@ OBJS = \ pg_rusage.o \ ps_status.o \ queryenvironment.o \ + queryjumble.o \ rls.o \ sampling.o \ superuser.o \ diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 1b007ca85ca95..bdd67fb0bb423 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -534,6 +534,7 @@ extern const struct config_enum_entry dynamic_shared_memory_options[]; /* * GUC option variables that are exported from this module */ +bool compute_query_id = false; bool log_duration = false; bool Debug_print_plan = false; bool Debug_print_parse = false; @@ -1458,6 +1459,15 @@ static struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { + {"compute_query_id", PGC_SUSET, STATS_MONITORING, + gettext_noop("Compute query identifiers."), + NULL + }, + &compute_query_id, + false, + NULL, NULL, NULL + }, { {"log_parser_stats", PGC_SUSET, STATS_MONITORING, gettext_noop("Writes parser performance statistics to the server log."), diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 39da7cc9427f2..192577a02e5c5 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -596,6 +596,7 @@ # - Monitoring - +#compute_query_id = off #log_parser_stats = off #log_planner_stats = off #log_executor_stats = off diff --git a/src/backend/utils/misc/queryjumble.c b/src/backend/utils/misc/queryjumble.c new file mode 100644 index 0000000000000..2a47688fd6344 --- /dev/null +++ b/src/backend/utils/misc/queryjumble.c @@ -0,0 +1,834 @@ +/*------------------------------------------------------------------------- + * + * queryjumble.c + * Query normalization and fingerprinting. + * + * Normalization is a process whereby similar queries, typically differing only + * in their constants (though the exact rules are somewhat more subtle than + * that) are recognized as equivalent, and are tracked as a single entry. This + * is particularly useful for non-prepared queries. + * + * Normalization is implemented by fingerprinting queries, selectively + * serializing those fields of each query tree's nodes that are judged to be + * essential to the query. This is referred to as a query jumble. This is + * distinct from a regular serialization in that various extraneous + * information is ignored as irrelevant or not essential to the query, such + * as the collations of Vars and, most notably, the values of constants. + * + * This jumble is acquired at the end of parse analysis of each query, and + * a 64-bit hash of it is stored into the query's Query.queryId field. + * The server then copies this value around, making it available in plan + * tree(s) generated from the query. The executor can then use this value + * to blame query costs on the proper queryId. + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * src/backend/utils/misc/queryjumble.c + * + *------------------------------------------------------------------------- + */ +#include "postgres.h" + +#include "common/hashfn.h" +#include "miscadmin.h" +#include "parser/scansup.h" +#include "utils/queryjumble.h" + +#define JUMBLE_SIZE 1024 /* query serialization buffer size */ + +static uint64 compute_utility_queryid(const char *str, int query_len); +static void AppendJumble(JumbleState *jstate, + const unsigned char *item, Size size); +static void JumbleQueryInternal(JumbleState *jstate, Query *query); +static void JumbleRangeTable(JumbleState *jstate, List *rtable); +static void JumbleRowMarks(JumbleState *jstate, List *rowMarks); +static void JumbleExpr(JumbleState *jstate, Node *node); +static void RecordConstLocation(JumbleState *jstate, int location); + +/* + * Given a possibly multi-statement source string, confine our attention to the + * relevant part of the string. + */ +const char * +CleanQuerytext(const char *query, int *location, int *len) +{ + int query_location = *location; + int query_len = *len; + + /* First apply starting offset, unless it's -1 (unknown). */ + if (query_location >= 0) + { + Assert(query_location <= strlen(query)); + query += query_location; + /* Length of 0 (or -1) means "rest of string" */ + if (query_len <= 0) + query_len = strlen(query); + else + Assert(query_len <= strlen(query)); + } + else + { + /* If query location is unknown, distrust query_len as well */ + query_location = 0; + query_len = strlen(query); + } + + /* + * Discard leading and trailing whitespace, too. Use scanner_isspace() + * not libc's isspace(), because we want to match the lexer's behavior. + */ + while (query_len > 0 && scanner_isspace(query[0])) + query++, query_location++, query_len--; + while (query_len > 0 && scanner_isspace(query[query_len - 1])) + query_len--; + + *location = query_location; + *len = query_len; + + return query; +} + +JumbleState * +JumbleQuery(Query *query, const char *querytext) +{ + JumbleState *jstate = NULL; + if (query->utilityStmt) + { + const char *sql; + int query_location = query->stmt_location; + int query_len = query->stmt_len; + + /* + * Confine our attention to the relevant part of the string, if the + * query is a portion of a multi-statement source string. + */ + sql = CleanQuerytext(querytext, &query_location, &query_len); + + query->queryId = compute_utility_queryid(sql, query_len); + } + else + { + jstate = (JumbleState *) palloc(sizeof(JumbleState)); + + /* Set up workspace for query jumbling */ + jstate->jumble = (unsigned char *) palloc(JUMBLE_SIZE); + jstate->jumble_len = 0; + jstate->clocations_buf_size = 32; + jstate->clocations = (LocationLen *) + palloc(jstate->clocations_buf_size * sizeof(LocationLen)); + jstate->clocations_count = 0; + jstate->highest_extern_param_id = 0; + + /* Compute query ID and mark the Query node with it */ + JumbleQueryInternal(jstate, query); + query->queryId = DatumGetUInt64(hash_any_extended(jstate->jumble, + jstate->jumble_len, + 0)); + + /* + * If we are unlucky enough to get a hash of zero, use 1 instead, to + * prevent confusion with the utility-statement case. + */ + if (query->queryId == UINT64CONST(0)) + query->queryId = UINT64CONST(1); + } + + return jstate; +} + +/* + * Compute a query identifier for the given utility query string. + */ +static uint64 +compute_utility_queryid(const char *str, int query_len) +{ + uint64 queryId; + + queryId = DatumGetUInt64(hash_any_extended((const unsigned char *) str, + query_len, 0)); + + /* + * If we are unlucky enough to get a hash of zero(invalid), use + * queryID as 2 instead, queryID 1 is already in use for normal + * statements. + */ + if (queryId == UINT64CONST(0)) + queryId = UINT64CONST(2); + + return queryId; +} + +/* + * AppendJumble: Append a value that is substantive in a given query to + * the current jumble. + */ +static void +AppendJumble(JumbleState *jstate, const unsigned char *item, Size size) +{ + unsigned char *jumble = jstate->jumble; + Size jumble_len = jstate->jumble_len; + + /* + * Whenever the jumble buffer is full, we hash the current contents and + * reset the buffer to contain just that hash value, thus relying on the + * hash to summarize everything so far. + */ + while (size > 0) + { + Size part_size; + + if (jumble_len >= JUMBLE_SIZE) + { + uint64 start_hash; + + start_hash = DatumGetUInt64(hash_any_extended(jumble, + JUMBLE_SIZE, 0)); + memcpy(jumble, &start_hash, sizeof(start_hash)); + jumble_len = sizeof(start_hash); + } + part_size = Min(size, JUMBLE_SIZE - jumble_len); + memcpy(jumble + jumble_len, item, part_size); + jumble_len += part_size; + item += part_size; + size -= part_size; + } + jstate->jumble_len = jumble_len; +} + +/* + * Wrappers around AppendJumble to encapsulate details of serialization + * of individual local variable elements. + */ +#define APP_JUMB(item) \ + AppendJumble(jstate, (const unsigned char *) &(item), sizeof(item)) +#define APP_JUMB_STRING(str) \ + AppendJumble(jstate, (const unsigned char *) (str), strlen(str) + 1) + +/* + * JumbleQueryInternal: Selectively serialize the query tree, appending + * significant data to the "query jumble" while ignoring nonsignificant data. + * + * Rule of thumb for what to include is that we should ignore anything not + * semantically significant (such as alias names) as well as anything that can + * be deduced from child nodes (else we'd just be double-hashing that piece + * of information). + */ +static void +JumbleQueryInternal(JumbleState *jstate, Query *query) +{ + Assert(IsA(query, Query)); + Assert(query->utilityStmt == NULL); + + APP_JUMB(query->commandType); + /* resultRelation is usually predictable from commandType */ + JumbleExpr(jstate, (Node *) query->cteList); + JumbleRangeTable(jstate, query->rtable); + JumbleExpr(jstate, (Node *) query->jointree); + JumbleExpr(jstate, (Node *) query->targetList); + JumbleExpr(jstate, (Node *) query->onConflict); + JumbleExpr(jstate, (Node *) query->returningList); + JumbleExpr(jstate, (Node *) query->groupClause); + JumbleExpr(jstate, (Node *) query->groupingSets); + JumbleExpr(jstate, query->havingQual); + JumbleExpr(jstate, (Node *) query->windowClause); + JumbleExpr(jstate, (Node *) query->distinctClause); + JumbleExpr(jstate, (Node *) query->sortClause); + JumbleExpr(jstate, query->limitOffset); + JumbleExpr(jstate, query->limitCount); + JumbleRowMarks(jstate, query->rowMarks); + JumbleExpr(jstate, query->setOperations); +} + +/* + * Jumble a range table + */ +static void +JumbleRangeTable(JumbleState *jstate, List *rtable) +{ + ListCell *lc; + + foreach(lc, rtable) + { + RangeTblEntry *rte = lfirst_node(RangeTblEntry, lc); + + APP_JUMB(rte->rtekind); + switch (rte->rtekind) + { + case RTE_RELATION: + APP_JUMB(rte->relid); + JumbleExpr(jstate, (Node *) rte->tablesample); + break; + case RTE_SUBQUERY: + JumbleQueryInternal(jstate, rte->subquery); + break; + case RTE_JOIN: + APP_JUMB(rte->jointype); + break; + case RTE_FUNCTION: + JumbleExpr(jstate, (Node *) rte->functions); + break; + case RTE_TABLEFUNC: + JumbleExpr(jstate, (Node *) rte->tablefunc); + break; + case RTE_VALUES: + JumbleExpr(jstate, (Node *) rte->values_lists); + break; + case RTE_CTE: + + /* + * Depending on the CTE name here isn't ideal, but it's the + * only info we have to identify the referenced WITH item. + */ + APP_JUMB_STRING(rte->ctename); + APP_JUMB(rte->ctelevelsup); + break; + case RTE_NAMEDTUPLESTORE: + APP_JUMB_STRING(rte->enrname); + break; + case RTE_RESULT: + break; + default: + elog(ERROR, "unrecognized RTE kind: %d", (int) rte->rtekind); + break; + } + } +} + +/* + * Jumble a rowMarks list + */ +static void +JumbleRowMarks(JumbleState *jstate, List *rowMarks) +{ + ListCell *lc; + + foreach(lc, rowMarks) + { + RowMarkClause *rowmark = lfirst_node(RowMarkClause, lc); + + if (!rowmark->pushedDown) + { + APP_JUMB(rowmark->rti); + APP_JUMB(rowmark->strength); + APP_JUMB(rowmark->waitPolicy); + } + } +} + +/* + * Jumble an expression tree + * + * In general this function should handle all the same node types that + * expression_tree_walker() does, and therefore it's coded to be as parallel + * to that function as possible. However, since we are only invoked on + * queries immediately post-parse-analysis, we need not handle node types + * that only appear in planning. + * + * Note: the reason we don't simply use expression_tree_walker() is that the + * point of that function is to support tree walkers that don't care about + * most tree node types, but here we care about all types. We should complain + * about any unrecognized node type. + */ +static void +JumbleExpr(JumbleState *jstate, Node *node) +{ + ListCell *temp; + + if (node == NULL) + return; + + /* Guard against stack overflow due to overly complex expressions */ + check_stack_depth(); + + /* + * We always emit the node's NodeTag, then any additional fields that are + * considered significant, and then we recurse to any child nodes. + */ + APP_JUMB(node->type); + + switch (nodeTag(node)) + { + case T_Var: + { + Var *var = (Var *) node; + + APP_JUMB(var->varno); + APP_JUMB(var->varattno); + APP_JUMB(var->varlevelsup); + } + break; + case T_Const: + { + Const *c = (Const *) node; + + /* We jumble only the constant's type, not its value */ + APP_JUMB(c->consttype); + /* Also, record its parse location for query normalization */ + RecordConstLocation(jstate, c->location); + } + break; + case T_Param: + { + Param *p = (Param *) node; + + APP_JUMB(p->paramkind); + APP_JUMB(p->paramid); + APP_JUMB(p->paramtype); + /* Also, track the highest external Param id */ + if (p->paramkind == PARAM_EXTERN && + p->paramid > jstate->highest_extern_param_id) + jstate->highest_extern_param_id = p->paramid; + } + break; + case T_Aggref: + { + Aggref *expr = (Aggref *) node; + + APP_JUMB(expr->aggfnoid); + JumbleExpr(jstate, (Node *) expr->aggdirectargs); + JumbleExpr(jstate, (Node *) expr->args); + JumbleExpr(jstate, (Node *) expr->aggorder); + JumbleExpr(jstate, (Node *) expr->aggdistinct); + JumbleExpr(jstate, (Node *) expr->aggfilter); + } + break; + case T_GroupingFunc: + { + GroupingFunc *grpnode = (GroupingFunc *) node; + + JumbleExpr(jstate, (Node *) grpnode->refs); + } + break; + case T_WindowFunc: + { + WindowFunc *expr = (WindowFunc *) node; + + APP_JUMB(expr->winfnoid); + APP_JUMB(expr->winref); + JumbleExpr(jstate, (Node *) expr->args); + JumbleExpr(jstate, (Node *) expr->aggfilter); + } + break; + case T_SubscriptingRef: + { + SubscriptingRef *sbsref = (SubscriptingRef *) node; + + JumbleExpr(jstate, (Node *) sbsref->refupperindexpr); + JumbleExpr(jstate, (Node *) sbsref->reflowerindexpr); + JumbleExpr(jstate, (Node *) sbsref->refexpr); + JumbleExpr(jstate, (Node *) sbsref->refassgnexpr); + } + break; + case T_FuncExpr: + { + FuncExpr *expr = (FuncExpr *) node; + + APP_JUMB(expr->funcid); + JumbleExpr(jstate, (Node *) expr->args); + } + break; + case T_NamedArgExpr: + { + NamedArgExpr *nae = (NamedArgExpr *) node; + + APP_JUMB(nae->argnumber); + JumbleExpr(jstate, (Node *) nae->arg); + } + break; + case T_OpExpr: + case T_DistinctExpr: /* struct-equivalent to OpExpr */ + case T_NullIfExpr: /* struct-equivalent to OpExpr */ + { + OpExpr *expr = (OpExpr *) node; + + APP_JUMB(expr->opno); + JumbleExpr(jstate, (Node *) expr->args); + } + break; + case T_ScalarArrayOpExpr: + { + ScalarArrayOpExpr *expr = (ScalarArrayOpExpr *) node; + + APP_JUMB(expr->opno); + APP_JUMB(expr->useOr); + JumbleExpr(jstate, (Node *) expr->args); + } + break; + case T_BoolExpr: + { + BoolExpr *expr = (BoolExpr *) node; + + APP_JUMB(expr->boolop); + JumbleExpr(jstate, (Node *) expr->args); + } + break; + case T_SubLink: + { + SubLink *sublink = (SubLink *) node; + + APP_JUMB(sublink->subLinkType); + APP_JUMB(sublink->subLinkId); + JumbleExpr(jstate, (Node *) sublink->testexpr); + JumbleQueryInternal(jstate, castNode(Query, sublink->subselect)); + } + break; + case T_FieldSelect: + { + FieldSelect *fs = (FieldSelect *) node; + + APP_JUMB(fs->fieldnum); + JumbleExpr(jstate, (Node *) fs->arg); + } + break; + case T_FieldStore: + { + FieldStore *fstore = (FieldStore *) node; + + JumbleExpr(jstate, (Node *) fstore->arg); + JumbleExpr(jstate, (Node *) fstore->newvals); + } + break; + case T_RelabelType: + { + RelabelType *rt = (RelabelType *) node; + + APP_JUMB(rt->resulttype); + JumbleExpr(jstate, (Node *) rt->arg); + } + break; + case T_CoerceViaIO: + { + CoerceViaIO *cio = (CoerceViaIO *) node; + + APP_JUMB(cio->resulttype); + JumbleExpr(jstate, (Node *) cio->arg); + } + break; + case T_ArrayCoerceExpr: + { + ArrayCoerceExpr *acexpr = (ArrayCoerceExpr *) node; + + APP_JUMB(acexpr->resulttype); + JumbleExpr(jstate, (Node *) acexpr->arg); + JumbleExpr(jstate, (Node *) acexpr->elemexpr); + } + break; + case T_ConvertRowtypeExpr: + { + ConvertRowtypeExpr *crexpr = (ConvertRowtypeExpr *) node; + + APP_JUMB(crexpr->resulttype); + JumbleExpr(jstate, (Node *) crexpr->arg); + } + break; + case T_CollateExpr: + { + CollateExpr *ce = (CollateExpr *) node; + + APP_JUMB(ce->collOid); + JumbleExpr(jstate, (Node *) ce->arg); + } + break; + case T_CaseExpr: + { + CaseExpr *caseexpr = (CaseExpr *) node; + + JumbleExpr(jstate, (Node *) caseexpr->arg); + foreach(temp, caseexpr->args) + { + CaseWhen *when = lfirst_node(CaseWhen, temp); + + JumbleExpr(jstate, (Node *) when->expr); + JumbleExpr(jstate, (Node *) when->result); + } + JumbleExpr(jstate, (Node *) caseexpr->defresult); + } + break; + case T_CaseTestExpr: + { + CaseTestExpr *ct = (CaseTestExpr *) node; + + APP_JUMB(ct->typeId); + } + break; + case T_ArrayExpr: + JumbleExpr(jstate, (Node *) ((ArrayExpr *) node)->elements); + break; + case T_RowExpr: + JumbleExpr(jstate, (Node *) ((RowExpr *) node)->args); + break; + case T_RowCompareExpr: + { + RowCompareExpr *rcexpr = (RowCompareExpr *) node; + + APP_JUMB(rcexpr->rctype); + JumbleExpr(jstate, (Node *) rcexpr->largs); + JumbleExpr(jstate, (Node *) rcexpr->rargs); + } + break; + case T_CoalesceExpr: + JumbleExpr(jstate, (Node *) ((CoalesceExpr *) node)->args); + break; + case T_MinMaxExpr: + { + MinMaxExpr *mmexpr = (MinMaxExpr *) node; + + APP_JUMB(mmexpr->op); + JumbleExpr(jstate, (Node *) mmexpr->args); + } + break; + case T_SQLValueFunction: + { + SQLValueFunction *svf = (SQLValueFunction *) node; + + APP_JUMB(svf->op); + /* type is fully determined by op */ + APP_JUMB(svf->typmod); + } + break; + case T_XmlExpr: + { + XmlExpr *xexpr = (XmlExpr *) node; + + APP_JUMB(xexpr->op); + JumbleExpr(jstate, (Node *) xexpr->named_args); + JumbleExpr(jstate, (Node *) xexpr->args); + } + break; + case T_NullTest: + { + NullTest *nt = (NullTest *) node; + + APP_JUMB(nt->nulltesttype); + JumbleExpr(jstate, (Node *) nt->arg); + } + break; + case T_BooleanTest: + { + BooleanTest *bt = (BooleanTest *) node; + + APP_JUMB(bt->booltesttype); + JumbleExpr(jstate, (Node *) bt->arg); + } + break; + case T_CoerceToDomain: + { + CoerceToDomain *cd = (CoerceToDomain *) node; + + APP_JUMB(cd->resulttype); + JumbleExpr(jstate, (Node *) cd->arg); + } + break; + case T_CoerceToDomainValue: + { + CoerceToDomainValue *cdv = (CoerceToDomainValue *) node; + + APP_JUMB(cdv->typeId); + } + break; + case T_SetToDefault: + { + SetToDefault *sd = (SetToDefault *) node; + + APP_JUMB(sd->typeId); + } + break; + case T_CurrentOfExpr: + { + CurrentOfExpr *ce = (CurrentOfExpr *) node; + + APP_JUMB(ce->cvarno); + if (ce->cursor_name) + APP_JUMB_STRING(ce->cursor_name); + APP_JUMB(ce->cursor_param); + } + break; + case T_NextValueExpr: + { + NextValueExpr *nve = (NextValueExpr *) node; + + APP_JUMB(nve->seqid); + APP_JUMB(nve->typeId); + } + break; + case T_InferenceElem: + { + InferenceElem *ie = (InferenceElem *) node; + + APP_JUMB(ie->infercollid); + APP_JUMB(ie->inferopclass); + JumbleExpr(jstate, ie->expr); + } + break; + case T_TargetEntry: + { + TargetEntry *tle = (TargetEntry *) node; + + APP_JUMB(tle->resno); + APP_JUMB(tle->ressortgroupref); + JumbleExpr(jstate, (Node *) tle->expr); + } + break; + case T_RangeTblRef: + { + RangeTblRef *rtr = (RangeTblRef *) node; + + APP_JUMB(rtr->rtindex); + } + break; + case T_JoinExpr: + { + JoinExpr *join = (JoinExpr *) node; + + APP_JUMB(join->jointype); + APP_JUMB(join->isNatural); + APP_JUMB(join->rtindex); + JumbleExpr(jstate, join->larg); + JumbleExpr(jstate, join->rarg); + JumbleExpr(jstate, join->quals); + } + break; + case T_FromExpr: + { + FromExpr *from = (FromExpr *) node; + + JumbleExpr(jstate, (Node *) from->fromlist); + JumbleExpr(jstate, from->quals); + } + break; + case T_OnConflictExpr: + { + OnConflictExpr *conf = (OnConflictExpr *) node; + + APP_JUMB(conf->action); + JumbleExpr(jstate, (Node *) conf->arbiterElems); + JumbleExpr(jstate, conf->arbiterWhere); + JumbleExpr(jstate, (Node *) conf->onConflictSet); + JumbleExpr(jstate, conf->onConflictWhere); + APP_JUMB(conf->constraint); + APP_JUMB(conf->exclRelIndex); + JumbleExpr(jstate, (Node *) conf->exclRelTlist); + } + break; + case T_List: + foreach(temp, (List *) node) + { + JumbleExpr(jstate, (Node *) lfirst(temp)); + } + break; + case T_IntList: + foreach(temp, (List *) node) + { + APP_JUMB(lfirst_int(temp)); + } + break; + case T_SortGroupClause: + { + SortGroupClause *sgc = (SortGroupClause *) node; + + APP_JUMB(sgc->tleSortGroupRef); + APP_JUMB(sgc->eqop); + APP_JUMB(sgc->sortop); + APP_JUMB(sgc->nulls_first); + } + break; + case T_GroupingSet: + { + GroupingSet *gsnode = (GroupingSet *) node; + + JumbleExpr(jstate, (Node *) gsnode->content); + } + break; + case T_WindowClause: + { + WindowClause *wc = (WindowClause *) node; + + APP_JUMB(wc->winref); + APP_JUMB(wc->frameOptions); + JumbleExpr(jstate, (Node *) wc->partitionClause); + JumbleExpr(jstate, (Node *) wc->orderClause); + JumbleExpr(jstate, wc->startOffset); + JumbleExpr(jstate, wc->endOffset); + } + break; + case T_CommonTableExpr: + { + CommonTableExpr *cte = (CommonTableExpr *) node; + + /* we store the string name because RTE_CTE RTEs need it */ + APP_JUMB_STRING(cte->ctename); + APP_JUMB(cte->ctematerialized); + JumbleQueryInternal(jstate, castNode(Query, cte->ctequery)); + } + break; + case T_SetOperationStmt: + { + SetOperationStmt *setop = (SetOperationStmt *) node; + + APP_JUMB(setop->op); + APP_JUMB(setop->all); + JumbleExpr(jstate, setop->larg); + JumbleExpr(jstate, setop->rarg); + } + break; + case T_RangeTblFunction: + { + RangeTblFunction *rtfunc = (RangeTblFunction *) node; + + JumbleExpr(jstate, rtfunc->funcexpr); + } + break; + case T_TableFunc: + { + TableFunc *tablefunc = (TableFunc *) node; + + JumbleExpr(jstate, tablefunc->docexpr); + JumbleExpr(jstate, tablefunc->rowexpr); + JumbleExpr(jstate, (Node *) tablefunc->colexprs); + } + break; + case T_TableSampleClause: + { + TableSampleClause *tsc = (TableSampleClause *) node; + + APP_JUMB(tsc->tsmhandler); + JumbleExpr(jstate, (Node *) tsc->args); + JumbleExpr(jstate, (Node *) tsc->repeatable); + } + break; + default: + /* Only a warning, since we can stumble along anyway */ + elog(WARNING, "unrecognized node type: %d", + (int) nodeTag(node)); + break; + } +} + +/* + * Record location of constant within query string of query tree + * that is currently being walked. + */ +static void +RecordConstLocation(JumbleState *jstate, int location) +{ + /* -1 indicates unknown or undefined location */ + if (location >= 0) + { + /* enlarge array if needed */ + if (jstate->clocations_count >= jstate->clocations_buf_size) + { + jstate->clocations_buf_size *= 2; + jstate->clocations = (LocationLen *) + repalloc(jstate->clocations, + jstate->clocations_buf_size * + sizeof(LocationLen)); + } + jstate->clocations[jstate->clocations_count].location = location; + /* initialize lengths to -1 to simplify third-party module usage */ + jstate->clocations[jstate->clocations_count].length = -1; + jstate->clocations_count++; + } +} diff --git a/src/include/parser/analyze.h b/src/include/parser/analyze.h index 4a3c9686f9080..6716db6c1320e 100644 --- a/src/include/parser/analyze.h +++ b/src/include/parser/analyze.h @@ -15,10 +15,12 @@ #define ANALYZE_H #include "parser/parse_node.h" +#include "utils/queryjumble.h" /* Hook for plugins to get control at end of parse analysis */ typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, - Query *query); + Query *query, + JumbleState *jstate); extern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook; diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 5004ee4177900..9b6552b25b2c6 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -248,6 +248,7 @@ extern bool log_btree_build_stats; extern PGDLLIMPORT bool check_function_bodies; extern bool session_auth_is_superuser; +extern bool compute_query_id; extern bool log_duration; extern int log_parameter_max_length; extern int log_parameter_max_length_on_error; diff --git a/src/include/utils/queryjumble.h b/src/include/utils/queryjumble.h new file mode 100644 index 0000000000000..83ba7339faee8 --- /dev/null +++ b/src/include/utils/queryjumble.h @@ -0,0 +1,58 @@ +/*------------------------------------------------------------------------- + * + * queryjumble.h + * Query normalization and fingerprinting. + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/include/utils/queryjumble.h + * + *------------------------------------------------------------------------- + */ +#ifndef QUERYJUBLE_H +#define QUERYJUBLE_H + +#include "nodes/parsenodes.h" + +#define JUMBLE_SIZE 1024 /* query serialization buffer size */ + +/* + * Struct for tracking locations/lengths of constants during normalization + */ +typedef struct LocationLen +{ + int location; /* start offset in query text */ + int length; /* length in bytes, or -1 to ignore */ +} LocationLen; + +/* + * Working state for computing a query jumble and producing a normalized + * query string + */ +typedef struct JumbleState +{ + /* Jumble of current query tree */ + unsigned char *jumble; + + /* Number of bytes used in jumble[] */ + Size jumble_len; + + /* Array of locations of constants that should be removed */ + LocationLen *clocations; + + /* Allocated length of clocations array */ + int clocations_buf_size; + + /* Current number of valid entries in clocations array */ + int clocations_count; + + /* highest Param id we've seen, in order to start normalization correctly */ + int highest_extern_param_id; +} JumbleState; + +const char *CleanQuerytext(const char *query, int *location, int *len); +JumbleState *JumbleQuery(Query *query, const char *querytext); + +#endif /* QUERYJUMBLE_H */ From ec7ffb8096e8eb90f4c9230f7ba9487f0abe1a9f Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Wed, 7 Apr 2021 13:28:35 -0400 Subject: [PATCH 028/671] amcheck: fix multiple problems with TOAST pointer validation First, don't perform database access while holding a buffer lock. When checking a heap, we can validate that TOAST pointers are sane by performing a scan on the TOAST index and looking up the chunks that correspond to each value ID that appears in a TOAST poiner in the main table. But, to do that while holding a buffer lock at least risks causing other backends to wait uninterruptibly, and probably can cause undetected and uninterruptible deadlocks. So, instead, make a list of checks to perform while holding the lock, and then perform the checks after releasing it. Second, adjust things so that we don't try to follow TOAST pointers for tuples that are already eligible to be pruned. The TOAST tuples become eligible for pruning at the same time that the main tuple does, so trying to check them may lead to spurious reports of corruption, as observed in the buildfarm. The necessary infrastructure to decide whether or not the tuple being checked is prunable was added by commit 3b6c1259f9ca8e21860aaf24ec6735a8e5598ea0, but it wasn't actually used for its intended purpose prior to this patch. Mark Dilger, adjusted by me to avoid a memory leak. Discussion: http://postgr.es/m/AC5479E4-6321-473D-AC92-5EC36299FBC2@enterprisedb.com --- contrib/amcheck/verify_heapam.c | 236 +++++++++++++++++++++---------- src/tools/pgindent/typedefs.list | 1 + 2 files changed, 165 insertions(+), 72 deletions(-) diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c index 1d769035f1349..e8aa0d68d4eed 100644 --- a/contrib/amcheck/verify_heapam.c +++ b/contrib/amcheck/verify_heapam.c @@ -58,6 +58,19 @@ typedef enum SkipPages SKIP_PAGES_NONE } SkipPages; +/* + * Struct holding information about a toasted attribute sufficient to both + * check the toasted attribute and, if found to be corrupt, to report where it + * was encountered in the main table. + */ +typedef struct ToastedAttribute +{ + struct varatt_external toast_pointer; + BlockNumber blkno; /* block in main table */ + OffsetNumber offnum; /* offset in main table */ + AttrNumber attnum; /* attribute in main table */ +} ToastedAttribute; + /* * Struct holding the running context information during * a lifetime of a verify_heapam execution. @@ -119,11 +132,11 @@ typedef struct HeapCheckContext /* True if tuple's xmax makes it eligible for pruning */ bool tuple_could_be_pruned; - /* Values for iterating over toast for the attribute */ - int32 chunkno; - int32 attrsize; - int32 endchunk; - int32 totalchunks; + /* + * List of ToastedAttribute structs for toasted attributes which are not + * eligible for pruning and should be checked + */ + List *toasted_attributes; /* Whether verify_heapam has yet encountered any corrupt tuples */ bool is_corrupt; @@ -136,13 +149,20 @@ typedef struct HeapCheckContext /* Internal implementation */ static void sanity_check_relation(Relation rel); static void check_tuple(HeapCheckContext *ctx); -static void check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx); +static void check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, + ToastedAttribute *ta, int32 chunkno, + int32 endchunk); static bool check_tuple_attribute(HeapCheckContext *ctx); +static void check_toasted_attribute(HeapCheckContext *ctx, + ToastedAttribute *ta); + static bool check_tuple_header(HeapCheckContext *ctx); static bool check_tuple_visibility(HeapCheckContext *ctx); static void report_corruption(HeapCheckContext *ctx, char *msg); +static void report_toast_corruption(HeapCheckContext *ctx, + ToastedAttribute *ta, char *msg); static TupleDesc verify_heapam_tupdesc(void); static FullTransactionId FullTransactionIdFromXidAndCtx(TransactionId xid, const HeapCheckContext *ctx); @@ -253,6 +273,7 @@ verify_heapam(PG_FUNCTION_ARGS) memset(&ctx, 0, sizeof(HeapCheckContext)); ctx.cached_xid = InvalidTransactionId; + ctx.toasted_attributes = NIL; /* * Any xmin newer than the xmin of our snapshot can't become all-visible @@ -469,6 +490,19 @@ verify_heapam(PG_FUNCTION_ARGS) /* clean up */ UnlockReleaseBuffer(ctx.buffer); + /* + * Check any toast pointers from the page whose lock we just released + */ + if (ctx.toasted_attributes != NIL) + { + ListCell *cell; + + foreach(cell, ctx.toasted_attributes) + check_toasted_attribute(&ctx, lfirst(cell)); + list_free_deep(ctx.toasted_attributes); + ctx.toasted_attributes = NIL; + } + if (on_error_stop && ctx.is_corrupt) break; } @@ -510,14 +544,13 @@ sanity_check_relation(Relation rel) } /* - * Record a single corruption found in the table. The values in ctx should - * reflect the location of the corruption, and the msg argument should contain - * a human-readable description of the corruption. - * - * The msg argument is pfree'd by this function. + * Shared internal implementation for report_corruption and + * report_toast_corruption. */ static void -report_corruption(HeapCheckContext *ctx, char *msg) +report_corruption_internal(Tuplestorestate *tupstore, TupleDesc tupdesc, + BlockNumber blkno, OffsetNumber offnum, + AttrNumber attnum, char *msg) { Datum values[HEAPCHECK_RELATION_COLS]; bool nulls[HEAPCHECK_RELATION_COLS]; @@ -525,10 +558,10 @@ report_corruption(HeapCheckContext *ctx, char *msg) MemSet(values, 0, sizeof(values)); MemSet(nulls, 0, sizeof(nulls)); - values[0] = Int64GetDatum(ctx->blkno); - values[1] = Int32GetDatum(ctx->offnum); - values[2] = Int32GetDatum(ctx->attnum); - nulls[2] = (ctx->attnum < 0); + values[0] = Int64GetDatum(blkno); + values[1] = Int32GetDatum(offnum); + values[2] = Int32GetDatum(attnum); + nulls[2] = (attnum < 0); values[3] = CStringGetTextDatum(msg); /* @@ -541,8 +574,39 @@ report_corruption(HeapCheckContext *ctx, char *msg) */ pfree(msg); - tuple = heap_form_tuple(ctx->tupdesc, values, nulls); - tuplestore_puttuple(ctx->tupstore, tuple); + tuple = heap_form_tuple(tupdesc, values, nulls); + tuplestore_puttuple(tupstore, tuple); +} + +/* + * Record a single corruption found in the main table. The values in ctx should + * indicate the location of the corruption, and the msg argument should contain + * a human-readable description of the corruption. + * + * The msg argument is pfree'd by this function. + */ +static void +report_corruption(HeapCheckContext *ctx, char *msg) +{ + report_corruption_internal(ctx->tupstore, ctx->tupdesc, ctx->blkno, + ctx->offnum, ctx->attnum, msg); + ctx->is_corrupt = true; +} + +/* + * Record corruption found in the toast table. The values in ta should + * indicate the location in the main table where the toast pointer was + * encountered, and the msg argument should contain a human-readable + * description of the toast table corruption. + * + * As above, the msg argument is pfree'd by this function. + */ +static void +report_toast_corruption(HeapCheckContext *ctx, ToastedAttribute *ta, + char *msg) +{ + report_corruption_internal(ctx->tupstore, ctx->tupdesc, ta->blkno, + ta->offnum, ta->attnum, msg); ctx->is_corrupt = true; } @@ -1094,9 +1158,12 @@ check_tuple_visibility(HeapCheckContext *ctx) * tuples that store the toasted value are retrieved and checked in order, with * each toast tuple being checked against where we are in the sequence, as well * as each toast tuple having its varlena structure sanity checked. + * + * Returns whether the toast tuple passed the corruption checks. */ static void -check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx) +check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, + ToastedAttribute *ta, int32 chunkno, int32 endchunk) { int32 curchunk; Pointer chunk; @@ -1111,7 +1178,7 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx) ctx->toast_rel->rd_att, &isnull)); if (isnull) { - report_corruption(ctx, + report_toast_corruption(ctx, ta, pstrdup("toast chunk sequence number is null")); return; } @@ -1119,7 +1186,7 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx) ctx->toast_rel->rd_att, &isnull)); if (isnull) { - report_corruption(ctx, + report_toast_corruption(ctx, ta, pstrdup("toast chunk data is null")); return; } @@ -1137,7 +1204,7 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx) /* should never happen */ uint32 header = ((varattrib_4b *) chunk)->va_4byte.va_header; - report_corruption(ctx, + report_toast_corruption(ctx, ta, psprintf("corrupt extended toast chunk has invalid varlena header: %0x (sequence number %d)", header, curchunk)); return; @@ -1146,30 +1213,28 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx) /* * Some checks on the data we've found */ - if (curchunk != ctx->chunkno) + if (curchunk != chunkno) { - report_corruption(ctx, + report_toast_corruption(ctx, ta, psprintf("toast chunk sequence number %u does not match the expected sequence number %u", - curchunk, ctx->chunkno)); + curchunk, chunkno)); return; } - if (curchunk > ctx->endchunk) + if (curchunk > endchunk) { - report_corruption(ctx, + report_toast_corruption(ctx, ta, psprintf("toast chunk sequence number %u exceeds the end chunk sequence number %u", - curchunk, ctx->endchunk)); + curchunk, endchunk)); return; } - expected_size = curchunk < ctx->totalchunks - 1 ? TOAST_MAX_CHUNK_SIZE - : ctx->attrsize - ((ctx->totalchunks - 1) * TOAST_MAX_CHUNK_SIZE); + expected_size = curchunk < endchunk ? TOAST_MAX_CHUNK_SIZE + : VARATT_EXTERNAL_GET_EXTSIZE(ta->toast_pointer) - (endchunk * TOAST_MAX_CHUNK_SIZE); + if (chunksize != expected_size) - { - report_corruption(ctx, + report_toast_corruption(ctx, ta, psprintf("toast chunk size %u differs from the expected size %u", chunksize, expected_size)); - return; - } } /* @@ -1177,17 +1242,17 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx) * found in ctx->tupstore. * * This function follows the logic performed by heap_deform_tuple(), and in the - * case of a toasted value, optionally continues along the logic of - * detoast_external_attr(), checking for any conditions that would result in - * either of those functions Asserting or crashing the backend. The checks - * performed by Asserts present in those two functions are also performed here. - * In cases where those two functions are a bit cavalier in their assumptions - * about data being correct, we perform additional checks not present in either - * of those two functions. Where some condition is checked in both of those - * functions, we perform it here twice, as we parallel the logical flow of - * those two functions. The presence of duplicate checks seems a reasonable - * price to pay for keeping this code tightly coupled with the code it - * protects. + * case of a toasted value, optionally stores the toast pointer so later it can + * be checked following the logic of detoast_external_attr(), checking for any + * conditions that would result in either of those functions Asserting or + * crashing the backend. The checks performed by Asserts present in those two + * functions are also performed here and in check_toasted_attribute. In cases + * where those two functions are a bit cavalier in their assumptions about data + * being correct, we perform additional checks not present in either of those + * two functions. Where some condition is checked in both of those functions, + * we perform it here twice, as we parallel the logical flow of those two + * functions. The presence of duplicate checks seems a reasonable price to pay + * for keeping this code tightly coupled with the code it protects. * * Returns true if the tuple attribute is sane enough for processing to * continue on to the next attribute, false otherwise. @@ -1195,12 +1260,6 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx) static bool check_tuple_attribute(HeapCheckContext *ctx) { - struct varatt_external toast_pointer; - ScanKeyData toastkey; - SysScanDesc toastscan; - SnapshotData SnapshotToast; - HeapTuple toasttup; - bool found_toasttup; Datum attdatum; struct varlena *attr; char *tp; /* pointer to the tuple data */ @@ -1335,13 +1394,44 @@ check_tuple_attribute(HeapCheckContext *ctx) return true; /* - * Must copy attr into toast_pointer for alignment considerations + * If this tuple is eligible to be pruned, we cannot check the toast. + * Otherwise, we push a copy of the toast tuple so we can check it after + * releasing the main table buffer lock. */ - VARATT_EXTERNAL_GET_POINTER(toast_pointer, attr); + if (!ctx->tuple_could_be_pruned) + { + ToastedAttribute *ta; + + ta = (ToastedAttribute *) palloc0(sizeof(ToastedAttribute)); + + VARATT_EXTERNAL_GET_POINTER(ta->toast_pointer, attr); + ta->blkno = ctx->blkno; + ta->offnum = ctx->offnum; + ta->attnum = ctx->attnum; + ctx->toasted_attributes = lappend(ctx->toasted_attributes, ta); + } + + return true; +} + +/* + * For each attribute collected in ctx->toasted_attributes, look up the value + * in the toast table and perform checks on it. This function should only be + * called on toast pointers which cannot be vacuumed away during our + * processing. + */ +static void +check_toasted_attribute(HeapCheckContext *ctx, ToastedAttribute *ta) +{ + SnapshotData SnapshotToast; + ScanKeyData toastkey; + SysScanDesc toastscan; + bool found_toasttup; + HeapTuple toasttup; + int32 chunkno; + int32 endchunk; - ctx->attrsize = VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer); - ctx->endchunk = (ctx->attrsize - 1) / TOAST_MAX_CHUNK_SIZE; - ctx->totalchunks = ctx->endchunk + 1; + endchunk = (VARATT_EXTERNAL_GET_EXTSIZE(ta->toast_pointer) - 1) / TOAST_MAX_CHUNK_SIZE; /* * Setup a scan key to find chunks in toast table with matching va_valueid @@ -1349,7 +1439,7 @@ check_tuple_attribute(HeapCheckContext *ctx) ScanKeyInit(&toastkey, (AttrNumber) 1, BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(toast_pointer.va_valueid)); + ObjectIdGetDatum(ta->toast_pointer.va_valueid)); /* * Check if any chunks for this toasted object exist in the toast table, @@ -1360,27 +1450,26 @@ check_tuple_attribute(HeapCheckContext *ctx) ctx->valid_toast_index, &SnapshotToast, 1, &toastkey); - ctx->chunkno = 0; + chunkno = 0; found_toasttup = false; while ((toasttup = systable_getnext_ordered(toastscan, ForwardScanDirection)) != NULL) { found_toasttup = true; - check_toast_tuple(toasttup, ctx); - ctx->chunkno++; + check_toast_tuple(toasttup, ctx, ta, chunkno, endchunk); + chunkno++; } - if (!found_toasttup) - report_corruption(ctx, - psprintf("toasted value for attribute %u missing from toast table", - ctx->attnum)); - else if (ctx->chunkno != (ctx->endchunk + 1)) - report_corruption(ctx, - psprintf("final toast chunk number %u differs from expected value %u", - ctx->chunkno, (ctx->endchunk + 1))); systable_endscan_ordered(toastscan); - return true; + if (!found_toasttup) + report_toast_corruption(ctx, ta, + psprintf("toasted value for attribute %u missing from toast table", + ta->attnum)); + else if (chunkno != (endchunk + 1)) + report_toast_corruption(ctx, ta, + psprintf("final toast chunk number %u differs from expected value %u", + chunkno, (endchunk + 1))); } /* @@ -1391,8 +1480,8 @@ static void check_tuple(HeapCheckContext *ctx) { /* - * Check various forms of tuple header corruption, and if the header is too - * corrupt, do not continue with other checks. + * Check various forms of tuple header corruption, and if the header is + * too corrupt, do not continue with other checks. */ if (!check_tuple_header(ctx)) return; @@ -1423,7 +1512,10 @@ check_tuple(HeapCheckContext *ctx) * Check each attribute unless we hit corruption that confuses what to do * next, at which point we abort further attribute checks for this tuple. * Note that we don't abort for all types of corruption, only for those - * types where we don't know how to continue. + * types where we don't know how to continue. We also don't abort the + * checking of toasted attributes collected from the tuple prior to + * aborting. Those will still be checked later along with other toasted + * attributes collected from the page. */ ctx->offset = 0; for (ctx->attnum = 0; ctx->attnum < ctx->natts; ctx->attnum++) diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index b26e81dcbf7a3..efb9811198247 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -2558,6 +2558,7 @@ TmFromChar TmToChar ToastAttrInfo ToastTupleContext +ToastedAttribute TocEntry TokenAuxData TokenizedLine From 4f0b0966c866ae9f0e15d7cc73ccf7ce4e1af84b Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 7 Apr 2021 14:03:56 -0400 Subject: [PATCH 029/671] Make use of in-core query id added by commit 5fd9dfa5f5 Use the in-core query id computation for pg_stat_activity, log_line_prefix, and EXPLAIN VERBOSE. Similar to other fields in pg_stat_activity, only the queryid from the top level statements are exposed, and if the backends status isn't active then the queryid from the last executed statements is displayed. Add a %Q placeholder to include the queryid in log_line_prefix, which will also only expose top level statements. For EXPLAIN VERBOSE, if a query identifier has been computed, either by enabling compute_query_id or using a third-party module, display it. Bump catalog version. Discussion: https://postgr.es/m/20210407125726.tkvjdbw76hxnpwfi@nol Author: Julien Rouhaud Reviewed-by: Alvaro Herrera, Nitin Jadhav, Zhihong Yu --- .../pg_stat_statements/pg_stat_statements.c | 112 +++++++----------- doc/src/sgml/config.sgml | 29 +++-- doc/src/sgml/monitoring.sgml | 16 +++ doc/src/sgml/ref/explain.sgml | 6 +- src/backend/catalog/system_views.sql | 1 + src/backend/commands/explain.c | 18 +++ src/backend/executor/execMain.c | 9 ++ src/backend/executor/execParallel.c | 5 +- src/backend/parser/analyze.c | 5 + src/backend/tcop/postgres.c | 5 + src/backend/utils/activity/backend_status.c | 68 +++++++++++ src/backend/utils/adt/pgstatfuncs.c | 7 +- src/backend/utils/error/elog.c | 8 ++ src/backend/utils/misc/postgresql.conf.sample | 1 + src/backend/utils/misc/queryjumble.c | 27 ++--- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_proc.dat | 6 +- src/include/utils/backend_status.h | 5 + src/test/regress/expected/explain.out | 11 +- src/test/regress/expected/rules.out | 9 +- src/test/regress/sql/explain.sql | 5 +- 21 files changed, 250 insertions(+), 105 deletions(-) diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index 0f8bac0ccae42..52cba86196971 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -67,6 +67,7 @@ #include "tcop/utility.h" #include "utils/acl.h" #include "utils/builtins.h" +#include "utils/queryjumble.h" #include "utils/memutils.h" #include "utils/timestamp.h" @@ -101,6 +102,14 @@ static const uint32 PGSS_PG_MAJOR_VERSION = PG_VERSION_NUM / 100; #define USAGE_DEALLOC_PERCENT 5 /* free this % of entries at once */ #define IS_STICKY(c) ((c.calls[PGSS_PLAN] + c.calls[PGSS_EXEC]) == 0) +/* + * Utility statements that pgss_ProcessUtility and pgss_post_parse_analyze + * ignores. + */ +#define PGSS_HANDLED_UTILITY(n) (!IsA(n, ExecuteStmt) && \ + !IsA(n, PrepareStmt) && \ + !IsA(n, DeallocateStmt)) + /* * Extension version number, for supporting older extension versions' objects */ @@ -309,7 +318,6 @@ static void pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, QueryCompletion *qc); -static uint64 pgss_hash_string(const char *str, int len); static void pgss_store(const char *query, uint64 queryId, int query_location, int query_len, pgssStoreKind kind, @@ -806,16 +814,14 @@ pgss_post_parse_analyze(ParseState *pstate, Query *query, JumbleState *jstate) return; /* - * Utility statements get queryId zero. We do this even in cases where - * the statement contains an optimizable statement for which a queryId - * could be derived (such as EXPLAIN or DECLARE CURSOR). For such cases, - * runtime control will first go through ProcessUtility and then the - * executor, and we don't want the executor hooks to do anything, since we - * are already measuring the statement's costs at the utility level. + * Clear queryId for prepared statements related utility, as those will + * inherit from the underlying statement's one (except DEALLOCATE which is + * entirely untracked). */ if (query->utilityStmt) { - query->queryId = UINT64CONST(0); + if (pgss_track_utility && !PGSS_HANDLED_UTILITY(query->utilityStmt)) + query->queryId = UINT64CONST(0); return; } @@ -1057,6 +1063,23 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, DestReceiver *dest, QueryCompletion *qc) { Node *parsetree = pstmt->utilityStmt; + uint64 saved_queryId = pstmt->queryId; + + /* + * Force utility statements to get queryId zero. We do this even in cases + * where the statement contains an optimizable statement for which a + * queryId could be derived (such as EXPLAIN or DECLARE CURSOR). For such + * cases, runtime control will first go through ProcessUtility and then the + * executor, and we don't want the executor hooks to do anything, since we + * are already measuring the statement's costs at the utility level. + * + * Note that this is only done if pg_stat_statements is enabled and + * configured to track utility statements, in the unlikely possibility + * that user configured another extension to handle utility statements + * only. + */ + if (pgss_enabled(exec_nested_level) && pgss_track_utility) + pstmt->queryId = UINT64CONST(0); /* * If it's an EXECUTE statement, we don't track it and don't increment the @@ -1073,9 +1096,7 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, * Likewise, we don't track execution of DEALLOCATE. */ if (pgss_track_utility && pgss_enabled(exec_nested_level) && - !IsA(parsetree, ExecuteStmt) && - !IsA(parsetree, PrepareStmt) && - !IsA(parsetree, DeallocateStmt)) + PGSS_HANDLED_UTILITY(parsetree)) { instr_time start; instr_time duration; @@ -1130,7 +1151,7 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, WalUsageAccumDiff(&walusage, &pgWalUsage, &walusage_start); pgss_store(queryString, - 0, /* signal that it's a utility stmt */ + saved_queryId, pstmt->stmt_location, pstmt->stmt_len, PGSS_EXEC, @@ -1153,23 +1174,12 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, } } -/* - * Given an arbitrarily long query string, produce a hash for the purposes of - * identifying the query, without normalizing constants. Used when hashing - * utility statements. - */ -static uint64 -pgss_hash_string(const char *str, int len) -{ - return DatumGetUInt64(hash_any_extended((const unsigned char *) str, - len, 0)); -} - /* * Store some statistics for a statement. * - * If queryId is 0 then this is a utility statement and we should compute - * a suitable queryId internally. + * If queryId is 0 then this is a utility statement for which we couldn't + * compute a queryId during parse analysis, and we should compute a suitable + * queryId internally. * * If jstate is not NULL then we're trying to create an entry for which * we have no statistics as yet; we just want to record the normalized @@ -1200,52 +1210,18 @@ pgss_store(const char *query, uint64 queryId, return; /* - * Confine our attention to the relevant part of the string, if the query - * is a portion of a multi-statement source string. - * - * First apply starting offset, unless it's -1 (unknown). - */ - if (query_location >= 0) - { - Assert(query_location <= strlen(query)); - query += query_location; - /* Length of 0 (or -1) means "rest of string" */ - if (query_len <= 0) - query_len = strlen(query); - else - Assert(query_len <= strlen(query)); - } - else - { - /* If query location is unknown, distrust query_len as well */ - query_location = 0; - query_len = strlen(query); - } - - /* - * Discard leading and trailing whitespace, too. Use scanner_isspace() - * not libc's isspace(), because we want to match the lexer's behavior. + * Nothing to do if compute_query_id isn't enabled and no other module + * computed a query identifier. */ - while (query_len > 0 && scanner_isspace(query[0])) - query++, query_location++, query_len--; - while (query_len > 0 && scanner_isspace(query[query_len - 1])) - query_len--; + if (queryId == UINT64CONST(0)) + return; /* - * For utility statements, we just hash the query string to get an ID. + * Confine our attention to the relevant part of the string, if the query + * is a portion of a multi-statement source string, and update query + * location and length if needed. */ - if (queryId == UINT64CONST(0)) - { - queryId = pgss_hash_string(query, query_len); - - /* - * If we are unlucky enough to get a hash of zero(invalid), use - * queryID as 2 instead, queryID 1 is already in use for normal - * statements. - */ - if (queryId == UINT64CONST(0)) - queryId = UINT64CONST(2); - } + query = CleanQuerytext(query, &query_location, &query_len); /* Set up key for hashtable search */ key.userid = GetUserId(); diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 9d846cb7be0f6..18447f404ce79 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -7004,6 +7004,15 @@ local0.* /var/log/postgresql session processes no + + %Q + query identifier of the current query. Query + identifiers are not computed by default, so this field + will be zero unless + parameter is enabled or a third-party module that computes + query identifiers is configured. + yes + %% Literal % @@ -7480,8 +7489,8 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; Enables the collection of information on the currently - executing command of each session, along with the time when - that command began execution. This parameter is on by + executing command of each session, along with its identifier and the + time when that command began execution. This parameter is on by default. Note that even when enabled, this information is not visible to all users, only to superusers and the user owning the session being reported on, so it should not represent a @@ -7630,12 +7639,16 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; - Enables in-core computation of a query identifier. The extension requires a query identifier - to be computed. Note that an external module can alternatively - be used if the in-core query identifier computation method - isn't acceptable. In this case, in-core computation should - remain disabled. The default is off. + Enables in-core computation of a query identifier. + Query identifiers can be displayed in the pg_stat_activity + view, using EXPLAIN, or emitted in the log if + configured via the parameter. + The extension also requires a query + identifier to be computed. Note that an external module can + alternatively be used if the in-core query identifier computation + specification isn't acceptable. In this case, in-core computation + must be disabled. The default is off. diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 56018745c8993..52958b4fd91d5 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -910,6 +910,22 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser + + + queryid bigint + + + Identifier of this backend's most recent query. If + state is active this + field shows the identifier of the currently executing query. In + all other states, it shows the identifier of last query that was + executed. Query identifiers are not computed by default so this + field will be null unless + parameter is enabled or a third-party module that computes query + identifiers is configured. + + + query text diff --git a/doc/src/sgml/ref/explain.sgml b/doc/src/sgml/ref/explain.sgml index c4512332a068b..4d758fb237e39 100644 --- a/doc/src/sgml/ref/explain.sgml +++ b/doc/src/sgml/ref/explain.sgml @@ -136,8 +136,10 @@ ROLLBACK; the output column list for each node in the plan tree, schema-qualify table and function names, always label variables in expressions with their range table alias, and always print the name of each trigger for - which statistics are displayed. This parameter defaults to - FALSE. + which statistics are displayed. The query identifier will also be + displayed if one has been computed, see for more details. This parameter + defaults to FALSE. diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 5f2541d316dd1..4d6b23278723a 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -833,6 +833,7 @@ CREATE VIEW pg_stat_activity AS S.state, S.backend_xid, s.backend_xmin, + S.queryid, S.query, S.backend_type FROM pg_stat_get_activity(NULL) AS S diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index ede8cec9472b3..b62a76e7e5a67 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -24,6 +24,7 @@ #include "nodes/extensible.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" +#include "parser/analyze.h" #include "parser/parsetree.h" #include "rewrite/rewriteHandler.h" #include "storage/bufmgr.h" @@ -165,6 +166,8 @@ ExplainQuery(ParseState *pstate, ExplainStmt *stmt, { ExplainState *es = NewExplainState(); TupOutputState *tstate; + JumbleState *jstate = NULL; + Query *query; List *rewritten; ListCell *lc; bool timing_set = false; @@ -241,6 +244,13 @@ ExplainQuery(ParseState *pstate, ExplainStmt *stmt, /* if the summary was not set explicitly, set default value */ es->summary = (summary_set) ? es->summary : es->analyze; + query = castNode(Query, stmt->query); + if (compute_query_id) + jstate = JumbleQuery(query, pstate->p_sourcetext); + + if (post_parse_analyze_hook) + (*post_parse_analyze_hook) (pstate, query, jstate); + /* * Parse analysis was done already, but we still have to run the rule * rewriter. We do not do AcquireRewriteLocks: we assume the query either @@ -600,6 +610,14 @@ ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, ExplainState *es, /* Create textual dump of plan tree */ ExplainPrintPlan(es, queryDesc); + if (es->verbose && plannedstmt->queryId != UINT64CONST(0)) + { + char buf[MAXINT8LEN+1]; + + pg_lltoa(plannedstmt->queryId, buf); + ExplainPropertyText("Query Identifier", buf, es); + } + /* Show buffer usage in planning */ if (bufusage) { diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 78ddbf95f6805..b2e2df8773312 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -58,6 +58,7 @@ #include "storage/lmgr.h" #include "tcop/utility.h" #include "utils/acl.h" +#include "utils/backend_status.h" #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/partcache.h" @@ -128,6 +129,14 @@ static void EvalPlanQualStart(EPQState *epqstate, Plan *planTree); void ExecutorStart(QueryDesc *queryDesc, int eflags) { + /* + * In some cases (e.g. an EXECUTE statement) a query execution will skip + * parse analysis, which means that the queryid won't be reported. Note + * that it's harmless to report the queryid multiple time, as the call will + * be ignored if the top level queryid has already been reported. + */ + pgstat_report_queryid(queryDesc->plannedstmt->queryId, false); + if (ExecutorStart_hook) (*ExecutorStart_hook) (queryDesc, eflags); else diff --git a/src/backend/executor/execParallel.c b/src/backend/executor/execParallel.c index 366d0b20b92b2..c7a2f3147353e 100644 --- a/src/backend/executor/execParallel.c +++ b/src/backend/executor/execParallel.c @@ -175,7 +175,7 @@ ExecSerializePlan(Plan *plan, EState *estate) */ pstmt = makeNode(PlannedStmt); pstmt->commandType = CMD_SELECT; - pstmt->queryId = UINT64CONST(0); + pstmt->queryId = pgstat_get_my_queryid(); pstmt->hasReturning = false; pstmt->hasModifyingCTE = false; pstmt->canSetTag = true; @@ -1421,8 +1421,9 @@ ParallelQueryMain(dsm_segment *seg, shm_toc *toc) /* Setting debug_query_string for individual workers */ debug_query_string = queryDesc->sourceText; - /* Report workers' query for monitoring purposes */ + /* Report workers' query and queryId for monitoring purposes */ pgstat_report_activity(STATE_RUNNING, debug_query_string); + pgstat_report_queryid(queryDesc->plannedstmt->queryId, false); /* Attach to the dynamic shared memory area. */ area_space = shm_toc_lookup(toc, PARALLEL_KEY_DSA, false); diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index d6da20ee8c58c..9ddf78dccdb45 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -45,6 +45,7 @@ #include "parser/parse_type.h" #include "parser/parsetree.h" #include "rewrite/rewriteManip.h" +#include "utils/backend_status.h" #include "utils/builtins.h" #include "utils/guc.h" #include "utils/queryjumble.h" @@ -130,6 +131,8 @@ parse_analyze(RawStmt *parseTree, const char *sourceText, free_parsestate(pstate); + pgstat_report_queryid(query->queryId, false); + return query; } @@ -167,6 +170,8 @@ parse_analyze_varparams(RawStmt *parseTree, const char *sourceText, free_parsestate(pstate); + pgstat_report_queryid(query->queryId, false); + return query; } diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 50f2f7f2465bd..ef8fb20429c93 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -695,6 +695,8 @@ pg_analyze_and_rewrite_params(RawStmt *parsetree, free_parsestate(pstate); + pgstat_report_queryid(query->queryId, false); + if (log_parser_stats) ShowUsage("PARSE ANALYSIS STATISTICS"); @@ -913,6 +915,7 @@ pg_plan_queries(List *querytrees, const char *query_string, int cursorOptions, stmt->utilityStmt = query->utilityStmt; stmt->stmt_location = query->stmt_location; stmt->stmt_len = query->stmt_len; + stmt->queryId = query->queryId; } else { @@ -1029,6 +1032,8 @@ exec_simple_query(const char *query_string) DestReceiver *receiver; int16 format; + pgstat_report_queryid(0, true); + /* * Get the command name for use in status display (it also becomes the * default completion tag, down inside PortalRun). Set ps_status and diff --git a/src/backend/utils/activity/backend_status.c b/src/backend/utils/activity/backend_status.c index a25ec0ee3c110..6110113e56a68 100644 --- a/src/backend/utils/activity/backend_status.c +++ b/src/backend/utils/activity/backend_status.c @@ -544,6 +544,7 @@ pgstat_report_activity(BackendState state, const char *cmd_str) beentry->st_activity_start_timestamp = 0; /* st_xact_start_timestamp and wait_event_info are also disabled */ beentry->st_xact_start_timestamp = 0; + beentry->st_queryid = UINT64CONST(0); proc->wait_event_info = 0; PGSTAT_END_WRITE_ACTIVITY(beentry); } @@ -598,6 +599,14 @@ pgstat_report_activity(BackendState state, const char *cmd_str) beentry->st_state = state; beentry->st_state_start_timestamp = current_timestamp; + /* + * If a new query is started, we reset the query identifier as it'll only + * be known after parse analysis, to avoid reporting last query's + * identifier. + */ + if (state == STATE_RUNNING) + beentry->st_queryid = UINT64CONST(0); + if (cmd_str != NULL) { memcpy((char *) beentry->st_activity_raw, cmd_str, len); @@ -608,6 +617,46 @@ pgstat_report_activity(BackendState state, const char *cmd_str) PGSTAT_END_WRITE_ACTIVITY(beentry); } +/* -------- + * pgstat_report_queryid() - + * + * Called to update top-level query identifier. + * -------- + */ +void +pgstat_report_queryid(uint64 queryId, bool force) +{ + volatile PgBackendStatus *beentry = MyBEEntry; + + /* + * if track_activities is disabled, st_queryid should already have been + * reset + */ + if (!beentry || !pgstat_track_activities) + return; + + /* + * We only report the top-level query identifiers. The stored queryid is + * reset when a backend calls pgstat_report_activity(STATE_RUNNING), or + * with an explicit call to this function using the force flag. If the + * saved query identifier is not zero it means that it's not a top-level + * command, so ignore the one provided unless it's an explicit call to + * reset the identifier. + */ + if (beentry->st_queryid != 0 && !force) + return; + + /* + * Update my status entry, following the protocol of bumping + * st_changecount before and after. We use a volatile pointer here to + * ensure the compiler doesn't try to get cute. + */ + PGSTAT_BEGIN_WRITE_ACTIVITY(beentry); + beentry->st_queryid = queryId; + PGSTAT_END_WRITE_ACTIVITY(beentry); +} + + /* ---------- * pgstat_report_appname() - * @@ -972,6 +1021,25 @@ pgstat_get_crashed_backend_activity(int pid, char *buffer, int buflen) return NULL; } +/* ---------- + * pgstat_get_my_queryid() - + * + * Return current backend's query identifier. + */ +uint64 +pgstat_get_my_queryid(void) +{ + if (!MyBEEntry) + return 0; + + /* There's no need for a look around pgstat_begin_read_activity / + * pgstat_end_read_activity here as it's only called from + * pg_stat_get_activity which is already protected, or from the same + * backend which mean that there won't be concurrent write. + */ + return MyBEEntry->st_queryid; +} + /* ---------- * pgstat_fetch_stat_beentry() - diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 9ffbca685cd93..9fa4a93162f8d 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -569,7 +569,7 @@ pg_stat_get_progress_info(PG_FUNCTION_ARGS) Datum pg_stat_get_activity(PG_FUNCTION_ARGS) { -#define PG_STAT_GET_ACTIVITY_COLS 29 +#define PG_STAT_GET_ACTIVITY_COLS 30 int num_backends = pgstat_fetch_stat_numbackends(); int curr_backend; int pid = PG_ARGISNULL(0) ? -1 : PG_GETARG_INT32(0); @@ -914,6 +914,10 @@ pg_stat_get_activity(PG_FUNCTION_ARGS) values[27] = BoolGetDatum(false); /* GSS Encryption not in * use */ } + if (beentry->st_queryid == 0) + nulls[29] = true; + else + values[29] = DatumGetUInt64(beentry->st_queryid); } else { @@ -941,6 +945,7 @@ pg_stat_get_activity(PG_FUNCTION_ARGS) nulls[26] = true; nulls[27] = true; nulls[28] = true; + nulls[29] = true; } tuplestore_putvalues(tupstore, tupdesc, values, nulls); diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 12de4b38cbac2..1cf71a649b36b 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -2714,6 +2714,14 @@ log_line_prefix(StringInfo buf, ErrorData *edata) else appendStringInfoString(buf, unpack_sql_state(edata->sqlerrcode)); break; + case 'Q': + if (padding != 0) + appendStringInfo(buf, "%*ld", padding, + pgstat_get_my_queryid()); + else + appendStringInfo(buf, "%ld", + pgstat_get_my_queryid()); + break; default: /* format error - ignore it */ break; diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 192577a02e5c5..65f61869663e5 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -543,6 +543,7 @@ # %t = timestamp without milliseconds # %m = timestamp with milliseconds # %n = timestamp with milliseconds (as a Unix epoch) + # %Q = query ID (0 if none or not computed) # %i = command tag # %e = SQL state # %c = session ID diff --git a/src/backend/utils/misc/queryjumble.c b/src/backend/utils/misc/queryjumble.c index 2a47688fd6344..53286bb333f93 100644 --- a/src/backend/utils/misc/queryjumble.c +++ b/src/backend/utils/misc/queryjumble.c @@ -39,7 +39,7 @@ #define JUMBLE_SIZE 1024 /* query serialization buffer size */ -static uint64 compute_utility_queryid(const char *str, int query_len); +static uint64 compute_utility_queryid(const char *str, int query_location, int query_len); static void AppendJumble(JumbleState *jstate, const unsigned char *item, Size size); static void JumbleQueryInternal(JumbleState *jstate, Query *query); @@ -97,17 +97,9 @@ JumbleQuery(Query *query, const char *querytext) JumbleState *jstate = NULL; if (query->utilityStmt) { - const char *sql; - int query_location = query->stmt_location; - int query_len = query->stmt_len; - - /* - * Confine our attention to the relevant part of the string, if the - * query is a portion of a multi-statement source string. - */ - sql = CleanQuerytext(querytext, &query_location, &query_len); - - query->queryId = compute_utility_queryid(sql, query_len); + query->queryId = compute_utility_queryid(querytext, + query->stmt_location, + query->stmt_len); } else { @@ -143,11 +135,18 @@ JumbleQuery(Query *query, const char *querytext) * Compute a query identifier for the given utility query string. */ static uint64 -compute_utility_queryid(const char *str, int query_len) +compute_utility_queryid(const char *query_text, int query_location, int query_len) { uint64 queryId; + const char *sql; + + /* + * Confine our attention to the relevant part of the string, if the + * query is a portion of a multi-statement source string. + */ + sql = CleanQuerytext(query_text, &query_location, &query_len); - queryId = DatumGetUInt64(hash_any_extended((const unsigned char *) str, + queryId = DatumGetUInt64(hash_any_extended((const unsigned char *) sql, query_len, 0)); /* diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 4d534428d4e00..53fd6c08b3386 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202104062 +#define CATALOG_VERSION_NO 202104071 #endif diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 4309fa40dd2d2..97d8238a99761 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -5278,9 +5278,9 @@ proname => 'pg_stat_get_activity', prorows => '100', proisstrict => 'f', proretset => 't', provolatile => 's', proparallel => 'r', prorettype => 'record', proargtypes => 'int4', - proallargtypes => '{int4,oid,int4,oid,text,text,text,text,text,timestamptz,timestamptz,timestamptz,timestamptz,inet,text,int4,xid,xid,text,bool,text,text,int4,text,numeric,text,bool,text,bool,int4}', - proargmodes => '{i,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}', - proargnames => '{pid,datid,pid,usesysid,application_name,state,query,wait_event_type,wait_event,xact_start,query_start,backend_start,state_change,client_addr,client_hostname,client_port,backend_xid,backend_xmin,backend_type,ssl,sslversion,sslcipher,sslbits,ssl_client_dn,ssl_client_serial,ssl_issuer_dn,gss_auth,gss_princ,gss_enc,leader_pid}', + proallargtypes => '{int4,oid,int4,oid,text,text,text,text,text,timestamptz,timestamptz,timestamptz,timestamptz,inet,text,int4,xid,xid,text,bool,text,text,int4,text,numeric,text,bool,text,bool,int4,int8}', + proargmodes => '{i,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}', + proargnames => '{pid,datid,pid,usesysid,application_name,state,query,wait_event_type,wait_event,xact_start,query_start,backend_start,state_change,client_addr,client_hostname,client_port,backend_xid,backend_xmin,backend_type,ssl,sslversion,sslcipher,sslbits,ssl_client_dn,ssl_client_serial,ssl_issuer_dn,gss_auth,gss_princ,gss_enc,leader_pid,queryid}', prosrc => 'pg_stat_get_activity' }, { oid => '3318', descr => 'statistics: information about progress of backends running maintenance command', diff --git a/src/include/utils/backend_status.h b/src/include/utils/backend_status.h index 3fd7370d41e3c..8e149b56ca113 100644 --- a/src/include/utils/backend_status.h +++ b/src/include/utils/backend_status.h @@ -165,6 +165,9 @@ typedef struct PgBackendStatus ProgressCommandType st_progress_command; Oid st_progress_command_target; int64 st_progress_param[PGSTAT_NUM_PROGRESS_PARAM]; + + /* query identifier, optionally computed using post_parse_analyze_hook */ + uint64 st_queryid; } PgBackendStatus; @@ -294,12 +297,14 @@ extern void pgstat_clear_backend_activity_snapshot(void); /* Activity reporting functions */ extern void pgstat_report_activity(BackendState state, const char *cmd_str); +extern void pgstat_report_queryid(uint64 queryId, bool force); extern void pgstat_report_tempfile(size_t filesize); extern void pgstat_report_appname(const char *appname); extern void pgstat_report_xact_timestamp(TimestampTz tstamp); extern const char *pgstat_get_backend_current_activity(int pid, bool checkUser); extern const char *pgstat_get_crashed_backend_activity(int pid, char *buffer, int buflen); +extern uint64 pgstat_get_my_queryid(void); /* ---------- diff --git a/src/test/regress/expected/explain.out b/src/test/regress/expected/explain.out index b89b99fb020de..4c578d4f5e233 100644 --- a/src/test/regress/expected/explain.out +++ b/src/test/regress/expected/explain.out @@ -17,7 +17,7 @@ begin for ln in execute $1 loop -- Replace any numeric word with just 'N' - ln := regexp_replace(ln, '\m\d+\M', 'N', 'g'); + ln := regexp_replace(ln, '-?\m\d+\M', 'N', 'g'); -- In sort output, the above won't match units-suffixed numbers ln := regexp_replace(ln, '\m\d+kB', 'NkB', 'g'); -- Ignore text-mode buffers output because it varies depending @@ -477,3 +477,12 @@ select jsonb_pretty( (1 row) rollback; +set compute_query_id = on; +select explain_filter('explain (verbose) select 1'); + explain_filter +---------------------------------------- + Result (cost=N.N..N.N rows=N width=N) + Output: N + Query Identifier: N +(3 rows) + diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 9b59a7b4a5797..264deda7af59d 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1762,9 +1762,10 @@ pg_stat_activity| SELECT s.datid, s.state, s.backend_xid, s.backend_xmin, + s.queryid, s.query, s.backend_type - FROM ((pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid) + FROM ((pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, queryid) LEFT JOIN pg_database d ON ((s.datid = d.oid))) LEFT JOIN pg_authid u ON ((s.usesysid = u.oid))); pg_stat_all_indexes| SELECT c.oid AS relid, @@ -1876,7 +1877,7 @@ pg_stat_gssapi| SELECT s.pid, s.gss_auth AS gss_authenticated, s.gss_princ AS principal, s.gss_enc AS encrypted - FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid) + FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, queryid) WHERE (s.client_port IS NOT NULL); pg_stat_progress_analyze| SELECT s.pid, s.datid, @@ -2046,7 +2047,7 @@ pg_stat_replication| SELECT s.pid, w.sync_priority, w.sync_state, w.reply_time - FROM ((pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid) + FROM ((pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, queryid) JOIN pg_stat_get_wal_senders() w(pid, state, sent_lsn, write_lsn, flush_lsn, replay_lsn, write_lag, flush_lag, replay_lag, sync_priority, sync_state, reply_time) ON ((s.pid = w.pid))) LEFT JOIN pg_authid u ON ((s.usesysid = u.oid))); pg_stat_replication_slots| SELECT s.slot_name, @@ -2076,7 +2077,7 @@ pg_stat_ssl| SELECT s.pid, s.ssl_client_dn AS client_dn, s.ssl_client_serial AS client_serial, s.ssl_issuer_dn AS issuer_dn - FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid) + FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, queryid) WHERE (s.client_port IS NOT NULL); pg_stat_subscription| SELECT su.oid AS subid, su.subname, diff --git a/src/test/regress/sql/explain.sql b/src/test/regress/sql/explain.sql index f2eab030d6142..468caf403742c 100644 --- a/src/test/regress/sql/explain.sql +++ b/src/test/regress/sql/explain.sql @@ -19,7 +19,7 @@ begin for ln in execute $1 loop -- Replace any numeric word with just 'N' - ln := regexp_replace(ln, '\m\d+\M', 'N', 'g'); + ln := regexp_replace(ln, '-?\m\d+\M', 'N', 'g'); -- In sort output, the above won't match units-suffixed numbers ln := regexp_replace(ln, '\m\d+kB', 'NkB', 'g'); -- Ignore text-mode buffers output because it varies depending @@ -103,3 +103,6 @@ select jsonb_pretty( ); rollback; + +set compute_query_id = on; +select explain_filter('explain (verbose) select 1'); From 1e55e7d1755cefbb44982fbacc7da461fa8684e6 Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Wed, 7 Apr 2021 12:37:45 -0700 Subject: [PATCH 030/671] Add wraparound failsafe to VACUUM. Add a failsafe mechanism that is triggered by VACUUM when it notices that the table's relfrozenxid and/or relminmxid are dangerously far in the past. VACUUM checks the age of the table dynamically, at regular intervals. When the failsafe triggers, VACUUM takes extraordinary measures to finish as quickly as possible so that relfrozenxid and/or relminmxid can be advanced. VACUUM will stop applying any cost-based delay that may be in effect. VACUUM will also bypass any further index vacuuming and heap vacuuming -- it only completes whatever remaining pruning and freezing is required. Bypassing index/heap vacuuming is enabled by commit 8523492d, which made it possible to dynamically trigger the mechanism already used within VACUUM when it is run with INDEX_CLEANUP off. It is expected that the failsafe will almost always trigger within an autovacuum to prevent wraparound, long after the autovacuum began. However, the failsafe mechanism can trigger in any VACUUM operation. Even in a non-aggressive VACUUM, where we're likely to not advance relfrozenxid, it still seems like a good idea to finish off remaining pruning and freezing. An aggressive/anti-wraparound VACUUM will be launched immediately afterwards. Note that the anti-wraparound VACUUM that follows will itself trigger the failsafe, usually before it even begins its first (and only) pass over the heap. The failsafe is controlled by two new GUCs: vacuum_failsafe_age, and vacuum_multixact_failsafe_age. There are no equivalent reloptions, since that isn't expected to be useful. The GUCs have rather high defaults (both default to 1.6 billion), and are expected to generally only be used to make the failsafe trigger sooner/more frequently. Author: Masahiko Sawada Author: Peter Geoghegan Discussion: https://postgr.es/m/CAD21AoD0SkE11fMw4jD4RENAwBMcw1wasVnwpJVw3tVqPOQgAw@mail.gmail.com Discussion: https://postgr.es/m/CAH2-WzmgH3ySGYeC-m-eOBsa2=sDwa292-CFghV4rESYo39FsQ@mail.gmail.com --- doc/src/sgml/config.sgml | 66 +++++++ src/backend/access/heap/vacuumlazy.c | 176 ++++++++++++++++-- src/backend/commands/vacuum.c | 58 ++++++ src/backend/utils/misc/guc.c | 23 ++- src/backend/utils/misc/postgresql.conf.sample | 2 + src/include/commands/vacuum.h | 4 + 6 files changed, 316 insertions(+), 13 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 18447f404ce79..963824d0506c1 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -8644,6 +8644,39 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; + + vacuum_failsafe_age (integer) + + vacuum_failsafe_age configuration parameter + + + + + Specifies the maximum age (in transactions) that a table's + pg_class.relfrozenxid + field can attain before VACUUM takes + extraordinary measures to avoid system-wide transaction ID + wraparound failure. This is VACUUM's + strategy of last resort. The failsafe typically triggers + when an autovacuum to prevent transaction ID wraparound has + already been running for some time, though it's possible for + the failsafe to trigger during any VACUUM. + + + When the failsafe is triggered, any cost-based delay that is + in effect will no longer be applied, and further non-essential + maintenance tasks (such as index vacuuming) are bypassed. + + + The default is 1.6 billion transactions. Although users can + set this value anywhere from zero to 2.1 billion, + VACUUM will silently adjust the effective + value to no less than 105% of . + + + + vacuum_multixact_freeze_table_age (integer) @@ -8690,6 +8723,39 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; + + vacuum_multixact_failsafe_age (integer) + + vacuum_multixact_failsafe_age configuration parameter + + + + + Specifies the maximum age (in transactions) that a table's + pg_class.relminmxid + field can attain before VACUUM takes + extraordinary measures to avoid system-wide multixact ID + wraparound failure. This is VACUUM's + strategy of last resort. The failsafe typically triggers when + an autovacuum to prevent transaction ID wraparound has already + been running for some time, though it's possible for the + failsafe to trigger during any VACUUM. + + + When the failsafe is triggered, any cost-based delay that is + in effect will no longer be applied, and further non-essential + maintenance tasks (such as index vacuuming) are bypassed. + + + The default is 1.6 billion multixacts. Although users can set + this value anywhere from zero to 2.1 billion, + VACUUM will silently adjust the effective + value to no less than 105% of . + + + + bytea_output (enum) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 1d55d0ecf9d59..00832b72dc729 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -103,6 +103,13 @@ #define VACUUM_TRUNCATE_LOCK_WAIT_INTERVAL 50 /* ms */ #define VACUUM_TRUNCATE_LOCK_TIMEOUT 5000 /* ms */ +/* + * When a table is small (i.e. smaller than this), save cycles by avoiding + * repeated failsafe checks + */ +#define FAILSAFE_MIN_PAGES \ + ((BlockNumber) (((uint64) 4 * 1024 * 1024 * 1024) / BLCKSZ)) + /* * When a table has no indexes, vacuum the FSM after every 8GB, approximately * (it won't be exact because we only vacuum FSM after processing a heap page @@ -299,6 +306,8 @@ typedef struct LVRelState /* Do index vacuuming/cleanup? */ bool do_index_vacuuming; bool do_index_cleanup; + /* Wraparound failsafe in effect? (implies !do_index_vacuuming) */ + bool do_failsafe; /* Buffer access strategy and parallel state */ BufferAccessStrategy bstrategy; @@ -393,12 +402,13 @@ static void lazy_scan_prune(LVRelState *vacrel, Buffer buf, GlobalVisState *vistest, LVPagePruneState *prunestate); static void lazy_vacuum(LVRelState *vacrel); -static void lazy_vacuum_all_indexes(LVRelState *vacrel); +static bool lazy_vacuum_all_indexes(LVRelState *vacrel); static void lazy_vacuum_heap_rel(LVRelState *vacrel); static int lazy_vacuum_heap_page(LVRelState *vacrel, BlockNumber blkno, Buffer buffer, int tupindex, Buffer *vmbuffer); static bool lazy_check_needs_freeze(Buffer buf, bool *hastup, LVRelState *vacrel); +static bool lazy_check_wraparound_failsafe(LVRelState *vacrel); static void do_parallel_lazy_vacuum_all_indexes(LVRelState *vacrel); static void do_parallel_lazy_cleanup_all_indexes(LVRelState *vacrel); static void do_parallel_vacuum_or_cleanup(LVRelState *vacrel, int nworkers); @@ -544,6 +554,7 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, &vacrel->indrels); vacrel->do_index_vacuuming = true; vacrel->do_index_cleanup = true; + vacrel->do_failsafe = false; if (params->index_cleanup == VACOPT_TERNARY_DISABLED) { vacrel->do_index_vacuuming = false; @@ -888,6 +899,12 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) vacrel->indstats = (IndexBulkDeleteResult **) palloc0(vacrel->nindexes * sizeof(IndexBulkDeleteResult *)); + /* + * Before beginning scan, check if it's already necessary to apply + * failsafe + */ + lazy_check_wraparound_failsafe(vacrel); + /* * Allocate the space for dead tuples. Note that this handles parallel * VACUUM initialization as part of allocating shared memory space used @@ -1311,12 +1328,17 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) * Periodically perform FSM vacuuming to make newly-freed * space visible on upper FSM pages. Note we have not yet * performed FSM processing for blkno. + * + * Call lazy_check_wraparound_failsafe() here, too, since we + * also don't want to do that too frequently, or too + * infrequently. */ if (blkno - next_fsm_block_to_vacuum >= VACUUM_FSM_EVERY_PAGES) { FreeSpaceMapVacuumRange(vacrel->rel, next_fsm_block_to_vacuum, blkno); next_fsm_block_to_vacuum = blkno; + lazy_check_wraparound_failsafe(vacrel); } /* @@ -1450,6 +1472,13 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) * make available in cases where it's possible to truncate the * page's line pointer array. * + * Note: It's not in fact 100% certain that we really will call + * lazy_vacuum_heap_rel() -- lazy_vacuum() might yet opt to skip + * index vacuuming (and so must skip heap vacuuming). This is + * deemed okay because it only happens in emergencies. (Besides, + * we start recording free space in the FSM once index vacuuming + * has been abandoned.) + * * Note: The one-pass (no indexes) case is only supposed to make * it this far when there were no LP_DEAD items during pruning. */ @@ -1499,7 +1528,7 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) /* * Vacuum the remainder of the Free Space Map. We must do this whether or - * not there were indexes. + * not there were indexes, and whether or not we bypassed index vacuuming. */ if (blkno > next_fsm_block_to_vacuum) FreeSpaceMapVacuumRange(vacrel->rel, next_fsm_block_to_vacuum, blkno); @@ -1953,6 +1982,11 @@ lazy_scan_prune(LVRelState *vacrel, /* * Remove the collected garbage tuples from the table and its indexes. + * + * In rare emergencies, the ongoing VACUUM operation can be made to skip both + * index vacuuming and index cleanup at the point we're called. This avoids + * having the whole system refuse to allocate further XIDs/MultiXactIds due to + * wraparound. */ static void lazy_vacuum(LVRelState *vacrel) @@ -1969,11 +2003,30 @@ lazy_vacuum(LVRelState *vacrel) return; } - /* Okay, we're going to do index vacuuming */ - lazy_vacuum_all_indexes(vacrel); - - /* Remove tuples from heap */ - lazy_vacuum_heap_rel(vacrel); + if (lazy_vacuum_all_indexes(vacrel)) + { + /* + * We successfully completed a round of index vacuuming. Do related + * heap vacuuming now. + */ + lazy_vacuum_heap_rel(vacrel); + } + else + { + /* + * Failsafe case. + * + * we attempted index vacuuming, but didn't finish a full round/full + * index scan. This happens when relfrozenxid or relminmxid is too + * far in the past. + * + * From this point on the VACUUM operation will do no further index + * vacuuming or heap vacuuming. It will do any remaining pruning that + * may be required, plus other heap-related and relation-level + * maintenance tasks. But that's it. + */ + Assert(vacrel->do_failsafe); + } /* * Forget the now-vacuumed tuples -- just press on @@ -1983,10 +2036,17 @@ lazy_vacuum(LVRelState *vacrel) /* * lazy_vacuum_all_indexes() -- Main entry for index vacuuming + * + * Returns true in the common case when all indexes were successfully + * vacuumed. Returns false in rare cases where we determined that the ongoing + * VACUUM operation is at risk of taking too long to finish, leading to + * wraparound failure. */ -static void +static bool lazy_vacuum_all_indexes(LVRelState *vacrel) { + bool allindexes = true; + Assert(!IsParallelWorker()); Assert(vacrel->nindexes > 0); Assert(vacrel->do_index_vacuuming); @@ -1994,6 +2054,13 @@ lazy_vacuum_all_indexes(LVRelState *vacrel) Assert(TransactionIdIsNormal(vacrel->relfrozenxid)); Assert(MultiXactIdIsValid(vacrel->relminmxid)); + /* Precheck for XID wraparound emergencies */ + if (lazy_check_wraparound_failsafe(vacrel)) + { + /* Wraparound emergency -- don't even start an index scan */ + return false; + } + /* Report that we are now vacuuming indexes */ pgstat_progress_update_param(PROGRESS_VACUUM_PHASE, PROGRESS_VACUUM_PHASE_VACUUM_INDEX); @@ -2008,26 +2075,50 @@ lazy_vacuum_all_indexes(LVRelState *vacrel) vacrel->indstats[idx] = lazy_vacuum_one_index(indrel, istat, vacrel->old_live_tuples, vacrel); + + if (lazy_check_wraparound_failsafe(vacrel)) + { + /* Wraparound emergency -- end current index scan */ + allindexes = false; + break; + } } } else { /* Outsource everything to parallel variant */ do_parallel_lazy_vacuum_all_indexes(vacrel); + + /* + * Do a postcheck to consider applying wraparound failsafe now. Note + * that parallel VACUUM only gets the precheck and this postcheck. + */ + if (lazy_check_wraparound_failsafe(vacrel)) + allindexes = false; } /* * We delete all LP_DEAD items from the first heap pass in all indexes on - * each call here. This makes the next call to lazy_vacuum_heap_rel() - * safe. + * each call here (except calls where we choose to do the failsafe). This + * makes the next call to lazy_vacuum_heap_rel() safe (except in the event + * of the failsafe triggering, which prevents the next call from taking + * place). */ Assert(vacrel->num_index_scans > 0 || vacrel->dead_tuples->num_tuples == vacrel->lpdead_items); + Assert(allindexes || vacrel->do_failsafe); - /* Increase and report the number of index scans */ + /* + * Increase and report the number of index scans. + * + * We deliberately include the case where we started a round of bulk + * deletes that we weren't able to finish due to the failsafe triggering. + */ vacrel->num_index_scans++; pgstat_progress_update_param(PROGRESS_VACUUM_NUM_INDEX_VACUUMS, vacrel->num_index_scans); + + return allindexes; } /* @@ -2320,6 +2411,67 @@ lazy_check_needs_freeze(Buffer buf, bool *hastup, LVRelState *vacrel) return (offnum <= maxoff); } +/* + * Trigger the failsafe to avoid wraparound failure when vacrel table has a + * relfrozenxid and/or relminmxid that is dangerously far in the past. + * + * Triggering the failsafe makes the ongoing VACUUM bypass any further index + * vacuuming and heap vacuuming. It also stops the ongoing VACUUM from + * applying any cost-based delay that may be in effect. + * + * Returns true when failsafe has been triggered. + * + * Caller is expected to call here before and after vacuuming each index in + * the case of two-pass VACUUM, or every VACUUM_FSM_EVERY_PAGES blocks in the + * case of no-indexes/one-pass VACUUM. + * + * There is also a precheck before the first pass over the heap begins, which + * is helpful when the failsafe initially triggers during a non-aggressive + * VACUUM -- the automatic aggressive vacuum to prevent wraparound that + * follows can independently trigger the failsafe right away. + */ +static bool +lazy_check_wraparound_failsafe(LVRelState *vacrel) +{ + /* Avoid calling vacuum_xid_failsafe_check() very frequently */ + if (vacrel->num_index_scans == 0 && + vacrel->rel_pages <= FAILSAFE_MIN_PAGES) + return false; + + /* Don't warn more than once per VACUUM */ + if (vacrel->do_failsafe) + return true; + + if (unlikely(vacuum_xid_failsafe_check(vacrel->relfrozenxid, + vacrel->relminmxid))) + { + Assert(vacrel->do_index_vacuuming); + Assert(vacrel->do_index_cleanup); + + vacrel->do_index_vacuuming = false; + vacrel->do_index_cleanup = false; + vacrel->do_failsafe = true; + + ereport(WARNING, + (errmsg("abandoned index vacuuming of table \"%s.%s.%s\" as a failsafe after %d index scans", + get_database_name(MyDatabaseId), + vacrel->relnamespace, + vacrel->relname, + vacrel->num_index_scans), + errdetail("table's relfrozenxid or relminmxid is too far in the past"), + errhint("Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" + "You might also need to consider other ways for VACUUM to keep up with the allocation of transaction IDs."))); + + /* Stop applying cost limits from this point on */ + VacuumCostActive = false; + VacuumCostBalance = 0; + + return true; + } + + return false; +} + /* * Perform lazy_vacuum_all_indexes() steps in parallel */ @@ -3173,7 +3325,7 @@ lazy_space_alloc(LVRelState *vacrel, int nworkers, BlockNumber nblocks) * be used for an index, so we invoke parallelism only if there are at * least two indexes on a table. */ - if (nworkers >= 0 && vacrel->nindexes > 1) + if (nworkers >= 0 && vacrel->nindexes > 1 && vacrel->do_index_vacuuming) { /* * Since parallel workers cannot access data in temporary tables, we diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index 25465b05ddb0a..39df05c7352b6 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -62,6 +62,8 @@ int vacuum_freeze_min_age; int vacuum_freeze_table_age; int vacuum_multixact_freeze_min_age; int vacuum_multixact_freeze_table_age; +int vacuum_failsafe_age; +int vacuum_multixact_failsafe_age; /* A few variables that don't seem worth passing around as parameters */ @@ -1134,6 +1136,62 @@ vacuum_set_xid_limits(Relation rel, } } +/* + * vacuum_xid_failsafe_check() -- Used by VACUUM's wraparound failsafe + * mechanism to determine if its table's relfrozenxid and relminmxid are now + * dangerously far in the past. + * + * Input parameters are the target relation's relfrozenxid and relminmxid. + * + * When we return true, VACUUM caller triggers the failsafe. + */ +bool +vacuum_xid_failsafe_check(TransactionId relfrozenxid, MultiXactId relminmxid) +{ + TransactionId xid_skip_limit; + MultiXactId multi_skip_limit; + int skip_index_vacuum; + + Assert(TransactionIdIsNormal(relfrozenxid)); + Assert(MultiXactIdIsValid(relminmxid)); + + /* + * Determine the index skipping age to use. In any case no less than + * autovacuum_freeze_max_age * 1.05. + */ + skip_index_vacuum = Max(vacuum_failsafe_age, autovacuum_freeze_max_age * 1.05); + + xid_skip_limit = ReadNextTransactionId() - skip_index_vacuum; + if (!TransactionIdIsNormal(xid_skip_limit)) + xid_skip_limit = FirstNormalTransactionId; + + if (TransactionIdPrecedes(relfrozenxid, xid_skip_limit)) + { + /* The table's relfrozenxid is too old */ + return true; + } + + /* + * Similar to above, determine the index skipping age to use for + * multixact. In any case no less than autovacuum_multixact_freeze_max_age + * * 1.05. + */ + skip_index_vacuum = Max(vacuum_multixact_failsafe_age, + autovacuum_multixact_freeze_max_age * 1.05); + + multi_skip_limit = ReadNextMultiXactId() - skip_index_vacuum; + if (multi_skip_limit < FirstMultiXactId) + multi_skip_limit = FirstMultiXactId; + + if (MultiXactIdPrecedes(relminmxid, multi_skip_limit)) + { + /* The table's relminmxid is too old */ + return true; + } + + return false; +} + /* * vac_estimate_reltuples() -- estimate the new value for pg_class.reltuples * diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index bdd67fb0bb423..bee976bae87dd 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -2657,6 +2657,24 @@ static struct config_int ConfigureNamesInt[] = 0, 0, 1000000, /* see ComputeXidHorizons */ NULL, NULL, NULL }, + { + {"vacuum_failsafe_age", PGC_USERSET, CLIENT_CONN_STATEMENT, + gettext_noop("Age at which VACUUM should trigger failsafe to avoid a wraparound outage."), + NULL + }, + &vacuum_failsafe_age, + 1600000000, 0, 2100000000, + NULL, NULL, NULL + }, + { + {"vacuum_multixact_failsafe_age", PGC_USERSET, CLIENT_CONN_STATEMENT, + gettext_noop("Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage."), + NULL + }, + &vacuum_multixact_failsafe_age, + 1600000000, 0, 2100000000, + NULL, NULL, NULL + }, /* * See also CheckRequiredParameterValues() if this parameter changes @@ -3257,7 +3275,10 @@ static struct config_int ConfigureNamesInt[] = NULL }, &autovacuum_freeze_max_age, - /* see pg_resetwal if you change the upper-limit value */ + /* + * see pg_resetwal and vacuum_failsafe_age if you change the + * upper-limit value. + */ 200000000, 100000, 2000000000, NULL, NULL, NULL }, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 65f61869663e5..ff9fa006fefa8 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -677,6 +677,8 @@ #vacuum_freeze_table_age = 150000000 #vacuum_multixact_freeze_min_age = 5000000 #vacuum_multixact_freeze_table_age = 150000000 +#vacuum_failsafe_age = 1600000000 +#vacuum_multixact_failsafe_age = 1600000000 #bytea_output = 'hex' # hex, escape #xmlbinary = 'base64' #xmloption = 'content' diff --git a/src/include/commands/vacuum.h b/src/include/commands/vacuum.h index d029da5ac0568..cb27257bb65e7 100644 --- a/src/include/commands/vacuum.h +++ b/src/include/commands/vacuum.h @@ -235,6 +235,8 @@ extern int vacuum_freeze_min_age; extern int vacuum_freeze_table_age; extern int vacuum_multixact_freeze_min_age; extern int vacuum_multixact_freeze_table_age; +extern int vacuum_failsafe_age; +extern int vacuum_multixact_failsafe_age; /* Variables for cost-based parallel vacuum */ extern pg_atomic_uint32 *VacuumSharedCostBalance; @@ -270,6 +272,8 @@ extern void vacuum_set_xid_limits(Relation rel, TransactionId *xidFullScanLimit, MultiXactId *multiXactCutoff, MultiXactId *mxactFullScanLimit); +extern bool vacuum_xid_failsafe_check(TransactionId relfrozenxid, + MultiXactId relminmxid); extern void vac_update_datfrozenxid(void); extern void vacuum_delay_point(void); extern bool vacuum_is_relation_owner(Oid relid, Form_pg_class reltuple, From e717a9a18b2e34c9c40e5259ad4d31cd7e420750 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 7 Apr 2021 21:30:08 +0200 Subject: [PATCH 031/671] SQL-standard function body This adds support for writing CREATE FUNCTION and CREATE PROCEDURE statements for language SQL with a function body that conforms to the SQL standard and is portable to other implementations. Instead of the PostgreSQL-specific AS $$ string literal $$ syntax, this allows writing out the SQL statements making up the body unquoted, either as a single statement: CREATE FUNCTION add(a integer, b integer) RETURNS integer LANGUAGE SQL RETURN a + b; or as a block CREATE PROCEDURE insert_data(a integer, b integer) LANGUAGE SQL BEGIN ATOMIC INSERT INTO tbl VALUES (a); INSERT INTO tbl VALUES (b); END; The function body is parsed at function definition time and stored as expression nodes in a new pg_proc column prosqlbody. So at run time, no further parsing is required. However, this form does not support polymorphic arguments, because there is no more parse analysis done at call time. Dependencies between the function and the objects it uses are fully tracked. A new RETURN statement is introduced. This can only be used inside function bodies. Internally, it is treated much like a SELECT statement. psql needs some new intelligence to keep track of function body boundaries so that it doesn't send off statements when it sees semicolons that are inside a function body. Tested-by: Jaime Casanova Reviewed-by: Julien Rouhaud Discussion: https://www.postgresql.org/message-id/flat/1c11f1eb-f00c-43b7-799d-2d44132c02d7@2ndquadrant.com --- doc/src/sgml/catalogs.sgml | 10 + doc/src/sgml/ref/create_function.sgml | 125 ++++++++- doc/src/sgml/ref/create_procedure.sgml | 61 ++++- src/backend/catalog/pg_aggregate.c | 1 + src/backend/catalog/pg_proc.c | 116 +++++--- src/backend/commands/aggregatecmds.c | 2 + src/backend/commands/functioncmds.c | 145 ++++++++-- src/backend/commands/typecmds.c | 4 + src/backend/executor/functions.c | 79 +++--- src/backend/nodes/copyfuncs.c | 15 + src/backend/nodes/equalfuncs.c | 13 + src/backend/nodes/outfuncs.c | 12 + src/backend/nodes/readfuncs.c | 1 + src/backend/optimizer/util/clauses.c | 126 ++++++--- src/backend/parser/analyze.c | 35 +++ src/backend/parser/gram.y | 129 +++++++-- src/backend/tcop/postgres.c | 3 +- src/backend/utils/adt/ruleutils.c | 139 +++++++++- src/bin/pg_dump/pg_dump.c | 45 ++- src/bin/psql/describe.c | 15 +- src/fe_utils/psqlscan.l | 24 +- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_proc.dat | 4 + src/include/catalog/pg_proc.h | 6 +- src/include/commands/defrem.h | 2 + src/include/executor/functions.h | 15 + src/include/fe_utils/psqlscan_int.h | 2 + src/include/nodes/nodes.h | 1 + src/include/nodes/parsenodes.h | 13 + src/include/parser/kwlist.h | 2 + src/include/tcop/tcopprot.h | 1 + src/interfaces/ecpg/preproc/ecpg.addons | 6 + src/interfaces/ecpg/preproc/ecpg.trailer | 4 +- .../regress/expected/create_function_3.out | 257 +++++++++++++++++- .../regress/expected/create_procedure.out | 65 +++++ src/test/regress/sql/create_function_3.sql | 110 +++++++- src/test/regress/sql/create_procedure.sql | 33 +++ 37 files changed, 1411 insertions(+), 212 deletions(-) diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index f103d914a62b9..2656786d1e6dc 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -6002,6 +6002,16 @@ SCRAM-SHA-256$<iteration count>:&l + + + prosqlbody pg_node_tree + + + Pre-parsed SQL function body. This will be used for language SQL + functions if the body is not specified as a string constant. + + + proconfig text[] diff --git a/doc/src/sgml/ref/create_function.sgml b/doc/src/sgml/ref/create_function.sgml index f1001615f4aec..e43705d069cfa 100644 --- a/doc/src/sgml/ref/create_function.sgml +++ b/doc/src/sgml/ref/create_function.sgml @@ -38,6 +38,7 @@ CREATE [ OR REPLACE ] FUNCTION | SET configuration_parameter { TO value | = value | FROM CURRENT } | AS 'definition' | AS 'obj_file', 'link_symbol' + | sql_body } ... @@ -262,7 +263,9 @@ CREATE [ OR REPLACE ] FUNCTION The name of the language that the function is implemented in. It can be sql, c, internal, or the name of a user-defined - procedural language, e.g., plpgsql. Enclosing the + procedural language, e.g., plpgsql. The default is + sql if sql_body is specified. Enclosing the name in single quotes is deprecated and requires matching case. @@ -582,6 +585,44 @@ CREATE [ OR REPLACE ] FUNCTION + + sql_body + + + + The body of a LANGUAGE SQL function. This can + either be a single statement + +RETURN expression + + or a block + +BEGIN ATOMIC + statement; + statement; + ... + statement; +END + + + + + This is similar to writing the text of the function body as a string + constant (see definition above), but there + are some differences: This form only works for LANGUAGE + SQL, the string constant form works for all languages. This + form is parsed at function definition time, the string constant form is + parsed at execution time; therefore this form cannot support + polymorphic argument types and other constructs that are not resolvable + at function definition time. This form tracks dependencies between the + function and objects used in the function body, so DROP + ... CASCADE will work correctly, whereas the form using + string literals may leave dangling functions. Finally, this form is + more compatible with the SQL standard and other SQL implementations. + + + + @@ -667,6 +708,15 @@ CREATE FUNCTION add(integer, integer) RETURNS integer LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT; + + The same function written in a more SQL-conforming style, using argument + names and an unquoted body: + +CREATE FUNCTION add(a integer, b integer) RETURNS integer + LANGUAGE SQL + IMMUTABLE + RETURNS NULL ON NULL INPUT + RETURN a + b; @@ -797,23 +847,74 @@ COMMIT; Compatibility - A CREATE FUNCTION command is defined in the SQL standard. - The PostgreSQL version is similar but - not fully compatible. The attributes are not portable, neither are the - different available languages. + A CREATE FUNCTION command is defined in the SQL + standard. The PostgreSQL implementation can be + used in a compatible way but has many extensions. Conversely, the SQL + standard specifies a number of optional features that are not implemented + in PostgreSQL. - For compatibility with some other database systems, - argmode can be written - either before or after argname. - But only the first way is standard-compliant. + The following are important compatibility issues: + + + + + OR REPLACE is a PostgreSQL extension. + + + + + + For compatibility with some other database systems, argmode can be written either before or + after argname. But only + the first way is standard-compliant. + + + + + + For parameter defaults, the SQL standard specifies only the syntax with + the DEFAULT key word. The syntax with + = is used in T-SQL and Firebird. + + + + + + The SETOF modifier is a PostgreSQL extension. + + + + + + Only SQL is standardized as a language. + + + + + + All other attributes except CALLED ON NULL INPUT and + RETURNS NULL ON NULL INPUT are not standardized. + + + + + + For the body of LANGUAGE SQL functions, the SQL + standard only specifies the sql_body form. + + + - For parameter defaults, the SQL standard specifies only the syntax with - the DEFAULT key word. The syntax - with = is used in T-SQL and Firebird. + Simple LANGUAGE SQL functions can be written in a way + that is both standard-conforming and portable to other implementations. + More complex functions using advanced features, optimization attributes, or + other languages will necessarily be specific to PostgreSQL in a significant + way. diff --git a/doc/src/sgml/ref/create_procedure.sgml b/doc/src/sgml/ref/create_procedure.sgml index 6dbc01271941f..2cd47d097f3fc 100644 --- a/doc/src/sgml/ref/create_procedure.sgml +++ b/doc/src/sgml/ref/create_procedure.sgml @@ -29,6 +29,7 @@ CREATE [ OR REPLACE ] PROCEDURE | SET configuration_parameter { TO value | = value | FROM CURRENT } | AS 'definition' | AS 'obj_file', 'link_symbol' + | sql_body } ... @@ -167,7 +168,9 @@ CREATE [ OR REPLACE ] PROCEDURE The name of the language that the procedure is implemented in. It can be sql, c, internal, or the name of a user-defined - procedural language, e.g., plpgsql. Enclosing the + procedural language, e.g., plpgsql. The default is + sql if sql_body is specified. Enclosing the name in single quotes is deprecated and requires matching case. @@ -304,6 +307,41 @@ CREATE [ OR REPLACE ] PROCEDURE + + + sql_body + + + + The body of a LANGUAGE SQL procedure. This should + be a block + +BEGIN ATOMIC + statement; + statement; + ... + statement; +END + + + + + This is similar to writing the text of the procedure body as a string + constant (see definition above), but there + are some differences: This form only works for LANGUAGE + SQL, the string constant form works for all languages. This + form is parsed at procedure definition time, the string constant form is + parsed at execution time; therefore this form cannot support + polymorphic argument types and other constructs that are not resolvable + at procedure definition time. This form tracks dependencies between the + procedure and objects used in the procedure body, so DROP + ... CASCADE will work correctly, whereas the form using + string literals may leave dangling procedures. Finally, this form is + more compatible with the SQL standard and other SQL implementations. + + + + @@ -323,6 +361,7 @@ CREATE [ OR REPLACE ] PROCEDURE Examples + CREATE PROCEDURE insert_data(a integer, b integer) LANGUAGE SQL @@ -330,9 +369,21 @@ AS $$ INSERT INTO tbl VALUES (a); INSERT INTO tbl VALUES (b); $$; - + + or + +CREATE PROCEDURE insert_data(a integer, b integer) +LANGUAGE SQL +BEGIN ATOMIC + INSERT INTO tbl VALUES (a); + INSERT INTO tbl VALUES (b); +END; + + and call like this: + CALL insert_data(1, 2); + @@ -340,9 +391,9 @@ CALL insert_data(1, 2); A CREATE PROCEDURE command is defined in the SQL - standard. The PostgreSQL version is similar but - not fully compatible. For details see - also . + standard. The PostgreSQL implementation can be + used in a compatible way but has many extensions. For details see also + . diff --git a/src/backend/catalog/pg_aggregate.c b/src/backend/catalog/pg_aggregate.c index 89f23d0add8f8..5197076c760c9 100644 --- a/src/backend/catalog/pg_aggregate.c +++ b/src/backend/catalog/pg_aggregate.c @@ -622,6 +622,7 @@ AggregateCreate(const char *aggName, InvalidOid, /* no validator */ "aggregate_dummy", /* placeholder (no such proc) */ NULL, /* probin */ + NULL, /* prosqlbody */ PROKIND_AGGREGATE, false, /* security invoker (currently not * definable for agg) */ diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index e14eee5a19e14..05de377ba9cf6 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -32,6 +32,7 @@ #include "mb/pg_wchar.h" #include "miscadmin.h" #include "nodes/nodeFuncs.h" +#include "parser/analyze.h" #include "parser/parse_coerce.h" #include "parser/parse_type.h" #include "tcop/pquery.h" @@ -76,6 +77,7 @@ ProcedureCreate(const char *procedureName, Oid languageValidator, const char *prosrc, const char *probin, + Node *prosqlbody, char prokind, bool security_definer, bool isLeakProof, @@ -119,7 +121,7 @@ ProcedureCreate(const char *procedureName, /* * sanity checks */ - Assert(PointerIsValid(prosrc)); + Assert(PointerIsValid(prosrc) || PointerIsValid(prosqlbody)); parameterCount = parameterTypes->dim1; if (parameterCount < 0 || parameterCount > FUNC_MAX_ARGS) @@ -334,11 +336,18 @@ ProcedureCreate(const char *procedureName, values[Anum_pg_proc_protrftypes - 1] = trftypes; else nulls[Anum_pg_proc_protrftypes - 1] = true; - values[Anum_pg_proc_prosrc - 1] = CStringGetTextDatum(prosrc); + if (prosrc) + values[Anum_pg_proc_prosrc - 1] = CStringGetTextDatum(prosrc); + else + nulls[Anum_pg_proc_prosrc - 1] = true; if (probin) values[Anum_pg_proc_probin - 1] = CStringGetTextDatum(probin); else nulls[Anum_pg_proc_probin - 1] = true; + if (prosqlbody) + values[Anum_pg_proc_prosqlbody - 1] = CStringGetTextDatum(nodeToString(prosqlbody)); + else + nulls[Anum_pg_proc_prosqlbody - 1] = true; if (proconfig != PointerGetDatum(NULL)) values[Anum_pg_proc_proconfig - 1] = proconfig; else @@ -638,6 +647,10 @@ ProcedureCreate(const char *procedureName, record_object_address_dependencies(&myself, addrs, DEPENDENCY_NORMAL); free_object_addresses(addrs); + /* dependency on SQL routine body */ + if (languageObjectId == SQLlanguageId && prosqlbody) + recordDependencyOnExpr(&myself, prosqlbody, NIL, DEPENDENCY_NORMAL); + /* dependency on parameter default expressions */ if (parameterDefaults) recordDependencyOnExpr(&myself, (Node *) parameterDefaults, @@ -861,61 +874,81 @@ fmgr_sql_validator(PG_FUNCTION_ARGS) /* Postpone body checks if !check_function_bodies */ if (check_function_bodies) { - tmp = SysCacheGetAttr(PROCOID, tuple, Anum_pg_proc_prosrc, &isnull); - if (isnull) - elog(ERROR, "null prosrc"); - - prosrc = TextDatumGetCString(tmp); - /* * Setup error traceback support for ereport(). */ callback_arg.proname = NameStr(proc->proname); - callback_arg.prosrc = prosrc; + callback_arg.prosrc = NULL; sqlerrcontext.callback = sql_function_parse_error_callback; sqlerrcontext.arg = (void *) &callback_arg; sqlerrcontext.previous = error_context_stack; error_context_stack = &sqlerrcontext; - /* - * We can't do full prechecking of the function definition if there - * are any polymorphic input types, because actual datatypes of - * expression results will be unresolvable. The check will be done at - * runtime instead. - * - * We can run the text through the raw parser though; this will at - * least catch silly syntactic errors. - */ - raw_parsetree_list = pg_parse_query(prosrc); + tmp = SysCacheGetAttr(PROCOID, tuple, Anum_pg_proc_prosrc, &isnull); + if (isnull) + { + Node *n; - if (!haspolyarg) + tmp = SysCacheGetAttr(PROCOID, tuple, Anum_pg_proc_prosqlbody, &isnull); + if (isnull) + elog(ERROR, "null prosrc and prosqlbody"); + + n = stringToNode(TextDatumGetCString(tmp)); + if (IsA(n, List)) + querytree_list = castNode(List, n); + else + querytree_list = list_make1(list_make1(n)); + } + else { + prosrc = TextDatumGetCString(tmp); + + callback_arg.prosrc = prosrc; + /* - * OK to do full precheck: analyze and rewrite the queries, then - * verify the result type. + * We can't do full prechecking of the function definition if there + * are any polymorphic input types, because actual datatypes of + * expression results will be unresolvable. The check will be done at + * runtime instead. + * + * We can run the text through the raw parser though; this will at + * least catch silly syntactic errors. */ - SQLFunctionParseInfoPtr pinfo; - Oid rettype; - TupleDesc rettupdesc; - - /* But first, set up parameter information */ - pinfo = prepare_sql_fn_parse_info(tuple, NULL, InvalidOid); + raw_parsetree_list = pg_parse_query(prosrc); - querytree_list = NIL; - foreach(lc, raw_parsetree_list) + if (!haspolyarg) { - RawStmt *parsetree = lfirst_node(RawStmt, lc); - List *querytree_sublist; - - querytree_sublist = pg_analyze_and_rewrite_params(parsetree, - prosrc, - (ParserSetupHook) sql_fn_parser_setup, - pinfo, - NULL); - querytree_list = lappend(querytree_list, - querytree_sublist); + /* + * OK to do full precheck: analyze and rewrite the queries, then + * verify the result type. + */ + SQLFunctionParseInfoPtr pinfo; + + /* But first, set up parameter information */ + pinfo = prepare_sql_fn_parse_info(tuple, NULL, InvalidOid); + + querytree_list = NIL; + foreach(lc, raw_parsetree_list) + { + RawStmt *parsetree = lfirst_node(RawStmt, lc); + List *querytree_sublist; + + querytree_sublist = pg_analyze_and_rewrite_params(parsetree, + prosrc, + (ParserSetupHook) sql_fn_parser_setup, + pinfo, + NULL); + querytree_list = lappend(querytree_list, + querytree_sublist); + } } + } + + if (!haspolyarg) + { + Oid rettype; + TupleDesc rettupdesc; check_sql_fn_statements(querytree_list); @@ -968,6 +1001,9 @@ function_parse_error_transpose(const char *prosrc) int newerrposition; const char *queryText; + if (!prosrc) + return false; + /* * Nothing to do unless we are dealing with a syntax error that has a * cursor position. diff --git a/src/backend/commands/aggregatecmds.c b/src/backend/commands/aggregatecmds.c index 69c50ac087738..046cf2df08f69 100644 --- a/src/backend/commands/aggregatecmds.c +++ b/src/backend/commands/aggregatecmds.c @@ -312,9 +312,11 @@ DefineAggregate(ParseState *pstate, InvalidOid, OBJECT_AGGREGATE, ¶meterTypes, + NULL, &allParameterTypes, ¶meterModes, ¶meterNames, + NULL, ¶meterDefaults, &variadicArgType, &requiredResultType); diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index 7a4e104623bef..199029b7a8518 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -53,15 +53,18 @@ #include "commands/proclang.h" #include "executor/execdesc.h" #include "executor/executor.h" +#include "executor/functions.h" #include "funcapi.h" #include "miscadmin.h" #include "optimizer/optimizer.h" +#include "parser/analyze.h" #include "parser/parse_coerce.h" #include "parser/parse_collate.h" #include "parser/parse_expr.h" #include "parser/parse_func.h" #include "parser/parse_type.h" #include "pgstat.h" +#include "tcop/utility.h" #include "utils/acl.h" #include "utils/builtins.h" #include "utils/fmgroids.h" @@ -186,9 +189,11 @@ interpret_function_parameter_list(ParseState *pstate, Oid languageOid, ObjectType objtype, oidvector **parameterTypes, + List **parameterTypes_list, ArrayType **allParameterTypes, ArrayType **parameterModes, ArrayType **parameterNames, + List **inParameterNames_list, List **parameterDefaults, Oid *variadicArgType, Oid *requiredResultType) @@ -283,7 +288,11 @@ interpret_function_parameter_list(ParseState *pstate, /* handle input parameters */ if (fp->mode != FUNC_PARAM_OUT && fp->mode != FUNC_PARAM_TABLE) + { isinput = true; + if (parameterTypes_list) + *parameterTypes_list = lappend_oid(*parameterTypes_list, toid); + } /* handle signature parameters */ if (fp->mode == FUNC_PARAM_IN || fp->mode == FUNC_PARAM_INOUT || @@ -372,6 +381,9 @@ interpret_function_parameter_list(ParseState *pstate, have_names = true; } + if (inParameterNames_list) + *inParameterNames_list = lappend(*inParameterNames_list, makeString(fp->name ? fp->name : pstrdup(""))); + if (fp->defexpr) { Node *def; @@ -786,28 +798,10 @@ compute_function_attributes(ParseState *pstate, defel->defname); } - /* process required items */ if (as_item) *as = (List *) as_item->arg; - else - { - ereport(ERROR, - (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), - errmsg("no function body specified"))); - *as = NIL; /* keep compiler quiet */ - } - if (language_item) *language = strVal(language_item->arg); - else - { - ereport(ERROR, - (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), - errmsg("no language specified"))); - *language = NULL; /* keep compiler quiet */ - } - - /* process optional items */ if (transform_item) *transform = transform_item->arg; if (windowfunc_item) @@ -856,10 +850,26 @@ compute_function_attributes(ParseState *pstate, */ static void interpret_AS_clause(Oid languageOid, const char *languageName, - char *funcname, List *as, - char **prosrc_str_p, char **probin_str_p) + char *funcname, List *as, Node *sql_body_in, + List *parameterTypes, List *inParameterNames, + char **prosrc_str_p, char **probin_str_p, Node **sql_body_out) { - Assert(as != NIL); + if (!sql_body_in && !as) + ereport(ERROR, + (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), + errmsg("no function body specified"))); + + if (sql_body_in && as) + ereport(ERROR, + (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), + errmsg("duplicate function body specified"))); + + if (sql_body_in && languageOid != SQLlanguageId) + ereport(ERROR, + (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), + errmsg("inline SQL function body only valid for language SQL"))); + + *sql_body_out = NULL; if (languageOid == ClanguageId) { @@ -881,6 +891,76 @@ interpret_AS_clause(Oid languageOid, const char *languageName, *prosrc_str_p = funcname; } } + else if (sql_body_in) + { + SQLFunctionParseInfoPtr pinfo; + + pinfo = (SQLFunctionParseInfoPtr) palloc0(sizeof(SQLFunctionParseInfo)); + + pinfo->fname = funcname; + pinfo->nargs = list_length(parameterTypes); + pinfo->argtypes = (Oid *) palloc(pinfo->nargs * sizeof(Oid)); + pinfo->argnames = (char **) palloc(pinfo->nargs * sizeof(char *)); + for (int i = 0; i < list_length(parameterTypes); i++) + { + char *s = strVal(list_nth(inParameterNames, i)); + + pinfo->argtypes[i] = list_nth_oid(parameterTypes, i); + if (IsPolymorphicType(pinfo->argtypes[i])) + ereport(ERROR, + (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), + errmsg("SQL function with unquoted function body cannot have polymorphic arguments"))); + + if (s[0] != '\0') + pinfo->argnames[i] = s; + else + pinfo->argnames[i] = NULL; + } + + if (IsA(sql_body_in, List)) + { + List *stmts = linitial_node(List, castNode(List, sql_body_in)); + ListCell *lc; + List *transformed_stmts = NIL; + + foreach(lc, stmts) + { + Node *stmt = lfirst(lc); + Query *q; + ParseState *pstate = make_parsestate(NULL); + + sql_fn_parser_setup(pstate, pinfo); + q = transformStmt(pstate, stmt); + if (q->commandType == CMD_UTILITY) + ereport(ERROR, + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("%s is not yet supported in unquoted SQL function body", + GetCommandTagName(CreateCommandTag(q->utilityStmt)))); + transformed_stmts = lappend(transformed_stmts, q); + free_parsestate(pstate); + } + + *sql_body_out = (Node *) list_make1(transformed_stmts); + } + else + { + Query *q; + ParseState *pstate = make_parsestate(NULL); + + sql_fn_parser_setup(pstate, pinfo); + q = transformStmt(pstate, sql_body_in); + if (q->commandType == CMD_UTILITY) + ereport(ERROR, + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("%s is not yet supported in unquoted SQL function body", + GetCommandTagName(CreateCommandTag(q->utilityStmt)))); + + *sql_body_out = (Node *) q; + } + + *probin_str_p = NULL; + *prosrc_str_p = NULL; + } else { /* Everything else wants the given string in prosrc. */ @@ -919,6 +999,7 @@ CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt) { char *probin_str; char *prosrc_str; + Node *prosqlbody; Oid prorettype; bool returnsSet; char *language; @@ -929,9 +1010,11 @@ CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt) Oid namespaceId; AclResult aclresult; oidvector *parameterTypes; + List *parameterTypes_list = NIL; ArrayType *allParameterTypes; ArrayType *parameterModes; ArrayType *parameterNames; + List *inParameterNames_list = NIL; List *parameterDefaults; Oid variadicArgType; List *trftypes_list = NIL; @@ -962,6 +1045,8 @@ CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt) get_namespace_name(namespaceId)); /* Set default attributes */ + as_clause = NIL; + language = NULL; isWindowFunc = false; isStrict = false; security = false; @@ -983,6 +1068,16 @@ CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt) &proconfig, &procost, &prorows, &prosupport, ¶llel); + if (!language) + { + if (stmt->sql_body) + language = "sql"; + else + ereport(ERROR, + (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), + errmsg("no language specified"))); + } + /* Look up the language and validate permissions */ languageTuple = SearchSysCache1(LANGNAME, PointerGetDatum(language)); if (!HeapTupleIsValid(languageTuple)) @@ -1053,9 +1148,11 @@ CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt) languageOid, stmt->is_procedure ? OBJECT_PROCEDURE : OBJECT_FUNCTION, ¶meterTypes, + ¶meterTypes_list, &allParameterTypes, ¶meterModes, ¶meterNames, + &inParameterNames_list, ¶meterDefaults, &variadicArgType, &requiredResultType); @@ -1112,8 +1209,9 @@ CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt) trftypes = NULL; } - interpret_AS_clause(languageOid, language, funcname, as_clause, - &prosrc_str, &probin_str); + interpret_AS_clause(languageOid, language, funcname, as_clause, stmt->sql_body, + parameterTypes_list, inParameterNames_list, + &prosrc_str, &probin_str, &prosqlbody); /* * Set default values for COST and ROWS depending on other parameters; @@ -1155,6 +1253,7 @@ CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt) languageValidator, prosrc_str, /* converted to text later */ probin_str, /* converted to text later */ + prosqlbody, stmt->is_procedure ? PROKIND_PROCEDURE : (isWindowFunc ? PROKIND_WINDOW : PROKIND_FUNCTION), security, isLeakProof, diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 76218fb47ed4a..e975508ffa23a 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -1775,6 +1775,7 @@ makeRangeConstructors(const char *name, Oid namespace, F_FMGR_INTERNAL_VALIDATOR, /* language validator */ prosrc[i], /* prosrc */ NULL, /* probin */ + NULL, /* prosqlbody */ PROKIND_FUNCTION, false, /* security_definer */ false, /* leakproof */ @@ -1839,6 +1840,7 @@ makeMultirangeConstructors(const char *name, Oid namespace, F_FMGR_INTERNAL_VALIDATOR, "multirange_constructor0", /* prosrc */ NULL, /* probin */ + NULL, /* prosqlbody */ PROKIND_FUNCTION, false, /* security_definer */ false, /* leakproof */ @@ -1882,6 +1884,7 @@ makeMultirangeConstructors(const char *name, Oid namespace, F_FMGR_INTERNAL_VALIDATOR, "multirange_constructor1", /* prosrc */ NULL, /* probin */ + NULL, /* prosqlbody */ PROKIND_FUNCTION, false, /* security_definer */ false, /* leakproof */ @@ -1922,6 +1925,7 @@ makeMultirangeConstructors(const char *name, Oid namespace, F_FMGR_INTERNAL_VALIDATOR, "multirange_constructor2", /* prosrc */ NULL, /* probin */ + NULL, /* prosqlbody */ PROKIND_FUNCTION, false, /* security_definer */ false, /* leakproof */ diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index 7bb752ace3ada..642683843ed41 100644 --- a/src/backend/executor/functions.c +++ b/src/backend/executor/functions.c @@ -26,6 +26,7 @@ #include "parser/parse_coerce.h" #include "parser/parse_collate.h" #include "parser/parse_func.h" +#include "rewrite/rewriteHandler.h" #include "storage/proc.h" #include "tcop/utility.h" #include "utils/builtins.h" @@ -128,21 +129,6 @@ typedef struct typedef SQLFunctionCache *SQLFunctionCachePtr; -/* - * Data structure needed by the parser callback hooks to resolve parameter - * references during parsing of a SQL function's body. This is separate from - * SQLFunctionCache since we sometimes do parsing separately from execution. - */ -typedef struct SQLFunctionParseInfo -{ - char *fname; /* function's name */ - int nargs; /* number of input arguments */ - Oid *argtypes; /* resolved types of input arguments */ - char **argnames; /* names of input arguments; NULL if none */ - /* Note that argnames[i] can be NULL, if some args are unnamed */ - Oid collation; /* function's input collation, if known */ -} SQLFunctionParseInfo; - /* non-export function prototypes */ static Node *sql_fn_param_ref(ParseState *pstate, ParamRef *pref); @@ -607,7 +593,6 @@ init_sql_fcache(FunctionCallInfo fcinfo, Oid collation, bool lazyEvalOK) HeapTuple procedureTuple; Form_pg_proc procedureStruct; SQLFunctionCachePtr fcache; - List *raw_parsetree_list; List *queryTree_list; List *resulttlist; ListCell *lc; @@ -682,9 +667,6 @@ init_sql_fcache(FunctionCallInfo fcinfo, Oid collation, bool lazyEvalOK) procedureTuple, Anum_pg_proc_prosrc, &isNull); - if (isNull) - elog(ERROR, "null prosrc for function %u", foid); - fcache->src = TextDatumGetCString(tmp); /* * Parse and rewrite the queries in the function text. Use sublists to @@ -695,20 +677,55 @@ init_sql_fcache(FunctionCallInfo fcinfo, Oid collation, bool lazyEvalOK) * but we'll not worry about it until the module is rewritten to use * plancache.c. */ - raw_parsetree_list = pg_parse_query(fcache->src); - queryTree_list = NIL; - foreach(lc, raw_parsetree_list) + if (isNull) { - RawStmt *parsetree = lfirst_node(RawStmt, lc); - List *queryTree_sublist; - - queryTree_sublist = pg_analyze_and_rewrite_params(parsetree, - fcache->src, - (ParserSetupHook) sql_fn_parser_setup, - fcache->pinfo, - NULL); - queryTree_list = lappend(queryTree_list, queryTree_sublist); + Node *n; + List *stored_query_list; + + tmp = SysCacheGetAttr(PROCOID, + procedureTuple, + Anum_pg_proc_prosqlbody, + &isNull); + if (isNull) + elog(ERROR, "null prosrc and prosqlbody for function %u", foid); + + n = stringToNode(TextDatumGetCString(tmp)); + if (IsA(n, List)) + stored_query_list = linitial_node(List, castNode(List, n)); + else + stored_query_list = list_make1(n); + + foreach(lc, stored_query_list) + { + Query *parsetree = lfirst_node(Query, lc); + List *queryTree_sublist; + + AcquireRewriteLocks(parsetree, true, false); + queryTree_sublist = pg_rewrite_query(parsetree); + queryTree_list = lappend(queryTree_list, queryTree_sublist); + } + } + else + { + List *raw_parsetree_list; + + fcache->src = TextDatumGetCString(tmp); + + raw_parsetree_list = pg_parse_query(fcache->src); + + foreach(lc, raw_parsetree_list) + { + RawStmt *parsetree = lfirst_node(RawStmt, lc); + List *queryTree_sublist; + + queryTree_sublist = pg_analyze_and_rewrite_params(parsetree, + fcache->src, + (ParserSetupHook) sql_fn_parser_setup, + fcache->pinfo, + NULL); + queryTree_list = lappend(queryTree_list, queryTree_sublist); + } } /* diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index ad729d10a8dfd..fcc5ebb206f01 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -3171,6 +3171,7 @@ _copyQuery(const Query *from) COPY_SCALAR_FIELD(hasModifyingCTE); COPY_SCALAR_FIELD(hasForUpdate); COPY_SCALAR_FIELD(hasRowSecurity); + COPY_SCALAR_FIELD(isReturn); COPY_NODE_FIELD(cteList); COPY_NODE_FIELD(rtable); COPY_NODE_FIELD(jointree); @@ -3301,6 +3302,16 @@ _copySetOperationStmt(const SetOperationStmt *from) return newnode; } +static ReturnStmt * +_copyReturnStmt(const ReturnStmt *from) +{ + ReturnStmt *newnode = makeNode(ReturnStmt); + + COPY_NODE_FIELD(returnval); + + return newnode; +} + static PLAssignStmt * _copyPLAssignStmt(const PLAssignStmt *from) { @@ -3684,6 +3695,7 @@ _copyCreateFunctionStmt(const CreateFunctionStmt *from) COPY_NODE_FIELD(parameters); COPY_NODE_FIELD(returnType); COPY_NODE_FIELD(options); + COPY_NODE_FIELD(sql_body); return newnode; } @@ -5344,6 +5356,9 @@ copyObjectImpl(const void *from) case T_SetOperationStmt: retval = _copySetOperationStmt(from); break; + case T_ReturnStmt: + retval = _copyReturnStmt(from); + break; case T_PLAssignStmt: retval = _copyPLAssignStmt(from); break; diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index f6b37af0ecbde..936365e09a8a0 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -970,6 +970,7 @@ _equalQuery(const Query *a, const Query *b) COMPARE_SCALAR_FIELD(hasModifyingCTE); COMPARE_SCALAR_FIELD(hasForUpdate); COMPARE_SCALAR_FIELD(hasRowSecurity); + COMPARE_SCALAR_FIELD(isReturn); COMPARE_NODE_FIELD(cteList); COMPARE_NODE_FIELD(rtable); COMPARE_NODE_FIELD(jointree); @@ -1088,6 +1089,14 @@ _equalSetOperationStmt(const SetOperationStmt *a, const SetOperationStmt *b) return true; } +static bool +_equalReturnStmt(const ReturnStmt *a, const ReturnStmt *b) +{ + COMPARE_NODE_FIELD(returnval); + + return true; +} + static bool _equalPLAssignStmt(const PLAssignStmt *a, const PLAssignStmt *b) { @@ -1406,6 +1415,7 @@ _equalCreateFunctionStmt(const CreateFunctionStmt *a, const CreateFunctionStmt * COMPARE_NODE_FIELD(parameters); COMPARE_NODE_FIELD(returnType); COMPARE_NODE_FIELD(options); + COMPARE_NODE_FIELD(sql_body); return true; } @@ -3334,6 +3344,9 @@ equal(const void *a, const void *b) case T_SetOperationStmt: retval = _equalSetOperationStmt(a, b); break; + case T_ReturnStmt: + retval = _equalReturnStmt(a, b); + break; case T_PLAssignStmt: retval = _equalPLAssignStmt(a, b); break; diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index fa8f65fbc508e..4a8dc2d86dce1 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -2835,6 +2835,14 @@ _outSelectStmt(StringInfo str, const SelectStmt *node) WRITE_NODE_FIELD(rarg); } +static void +_outReturnStmt(StringInfo str, const ReturnStmt *node) +{ + WRITE_NODE_TYPE("RETURN"); + + WRITE_NODE_FIELD(returnval); +} + static void _outPLAssignStmt(StringInfo str, const PLAssignStmt *node) { @@ -3047,6 +3055,7 @@ _outQuery(StringInfo str, const Query *node) WRITE_BOOL_FIELD(hasModifyingCTE); WRITE_BOOL_FIELD(hasForUpdate); WRITE_BOOL_FIELD(hasRowSecurity); + WRITE_BOOL_FIELD(isReturn); WRITE_NODE_FIELD(cteList); WRITE_NODE_FIELD(rtable); WRITE_NODE_FIELD(jointree); @@ -4337,6 +4346,9 @@ outNode(StringInfo str, const void *obj) case T_SelectStmt: _outSelectStmt(str, obj); break; + case T_ReturnStmt: + _outReturnStmt(str, obj); + break; case T_PLAssignStmt: _outPLAssignStmt(str, obj); break; diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index ecce23b747b93..99247278513a4 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -263,6 +263,7 @@ _readQuery(void) READ_BOOL_FIELD(hasModifyingCTE); READ_BOOL_FIELD(hasForUpdate); READ_BOOL_FIELD(hasRowSecurity); + READ_BOOL_FIELD(isReturn); READ_NODE_FIELD(cteList); READ_NODE_FIELD(rtable); READ_NODE_FIELD(jointree); diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index bea1cc4d67e93..9a6e3dab834ae 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -4253,27 +4253,47 @@ inline_function(Oid funcid, Oid result_type, Oid result_collid, ALLOCSET_DEFAULT_SIZES); oldcxt = MemoryContextSwitchTo(mycxt); - /* Fetch the function body */ - tmp = SysCacheGetAttr(PROCOID, - func_tuple, - Anum_pg_proc_prosrc, - &isNull); - if (isNull) - elog(ERROR, "null prosrc for function %u", funcid); - src = TextDatumGetCString(tmp); - /* * Setup error traceback support for ereport(). This is so that we can * finger the function that bad information came from. */ callback_arg.proname = NameStr(funcform->proname); - callback_arg.prosrc = src; + callback_arg.prosrc = NULL; sqlerrcontext.callback = sql_inline_error_callback; sqlerrcontext.arg = (void *) &callback_arg; sqlerrcontext.previous = error_context_stack; error_context_stack = &sqlerrcontext; + /* Fetch the function body */ + tmp = SysCacheGetAttr(PROCOID, + func_tuple, + Anum_pg_proc_prosrc, + &isNull); + if (isNull) + { + Node *n; + List *querytree_list; + + tmp = SysCacheGetAttr(PROCOID, func_tuple, Anum_pg_proc_prosqlbody, &isNull); + if (isNull) + elog(ERROR, "null prosrc and prosqlbody for function %u", funcid); + + n = stringToNode(TextDatumGetCString(tmp)); + if (IsA(n, List)) + querytree_list = linitial_node(List, castNode(List, n)); + else + querytree_list = list_make1(n); + if (list_length(querytree_list) != 1) + goto fail; + querytree = linitial(querytree_list); + } + else + { + src = TextDatumGetCString(tmp); + + callback_arg.prosrc = src; + /* * Set up to handle parameters while parsing the function body. We need a * dummy FuncExpr node containing the already-simplified arguments to pass @@ -4317,6 +4337,7 @@ inline_function(Oid funcid, Oid result_type, Oid result_collid, querytree = transformTopLevelStmt(pstate, linitial(raw_parsetree_list)); free_parsestate(pstate); + } /* * The single command must be a simple "SELECT expression". @@ -4573,12 +4594,15 @@ sql_inline_error_callback(void *arg) int syntaxerrposition; /* If it's a syntax error, convert to internal syntax error report */ - syntaxerrposition = geterrposition(); - if (syntaxerrposition > 0) + if (callback_arg->prosrc) { - errposition(0); - internalerrposition(syntaxerrposition); - internalerrquery(callback_arg->prosrc); + syntaxerrposition = geterrposition(); + if (syntaxerrposition > 0) + { + errposition(0); + internalerrposition(syntaxerrposition); + internalerrquery(callback_arg->prosrc); + } } errcontext("SQL function \"%s\" during inlining", callback_arg->proname); @@ -4690,7 +4714,6 @@ inline_set_returning_function(PlannerInfo *root, RangeTblEntry *rte) Oid func_oid; HeapTuple func_tuple; Form_pg_proc funcform; - char *src; Datum tmp; bool isNull; MemoryContext oldcxt; @@ -4799,27 +4822,53 @@ inline_set_returning_function(PlannerInfo *root, RangeTblEntry *rte) ALLOCSET_DEFAULT_SIZES); oldcxt = MemoryContextSwitchTo(mycxt); - /* Fetch the function body */ - tmp = SysCacheGetAttr(PROCOID, - func_tuple, - Anum_pg_proc_prosrc, - &isNull); - if (isNull) - elog(ERROR, "null prosrc for function %u", func_oid); - src = TextDatumGetCString(tmp); - /* * Setup error traceback support for ereport(). This is so that we can * finger the function that bad information came from. */ callback_arg.proname = NameStr(funcform->proname); - callback_arg.prosrc = src; + callback_arg.prosrc = NULL; sqlerrcontext.callback = sql_inline_error_callback; sqlerrcontext.arg = (void *) &callback_arg; sqlerrcontext.previous = error_context_stack; error_context_stack = &sqlerrcontext; + /* Fetch the function body */ + tmp = SysCacheGetAttr(PROCOID, + func_tuple, + Anum_pg_proc_prosrc, + &isNull); + if (isNull) + { + Node *n; + + tmp = SysCacheGetAttr(PROCOID, func_tuple, Anum_pg_proc_prosqlbody, &isNull); + if (isNull) + elog(ERROR, "null prosrc and prosqlbody for function %u", func_oid); + + n = stringToNode(TextDatumGetCString(tmp)); + if (IsA(n, List)) + querytree_list = linitial_node(List, castNode(List, n)); + else + querytree_list = list_make1(n); + if (list_length(querytree_list) != 1) + goto fail; + querytree = linitial(querytree_list); + + querytree_list = pg_rewrite_query(querytree); + if (list_length(querytree_list) != 1) + goto fail; + querytree = linitial(querytree_list); + } + else + { + char *src; + + src = TextDatumGetCString(tmp); + + callback_arg.prosrc = src; + /* * Set up to handle parameters while parsing the function body. We can * use the FuncExpr just created as the input for @@ -4829,18 +4878,6 @@ inline_set_returning_function(PlannerInfo *root, RangeTblEntry *rte) (Node *) fexpr, fexpr->inputcollid); - /* - * Also resolve the actual function result tupdesc, if composite. If the - * function is just declared to return RECORD, dig the info out of the AS - * clause. - */ - functypclass = get_expr_result_type((Node *) fexpr, NULL, &rettupdesc); - if (functypclass == TYPEFUNC_RECORD) - rettupdesc = BuildDescFromLists(rtfunc->funccolnames, - rtfunc->funccoltypes, - rtfunc->funccoltypmods, - rtfunc->funccolcollations); - /* * Parse, analyze, and rewrite (unlike inline_function(), we can't skip * rewriting here). We can fail as soon as we find more than one query, @@ -4857,6 +4894,19 @@ inline_set_returning_function(PlannerInfo *root, RangeTblEntry *rte) if (list_length(querytree_list) != 1) goto fail; querytree = linitial(querytree_list); + } + + /* + * Also resolve the actual function result tupdesc, if composite. If the + * function is just declared to return RECORD, dig the info out of the AS + * clause. + */ + functypclass = get_expr_result_type((Node *) fexpr, NULL, &rettupdesc); + if (functypclass == TYPEFUNC_RECORD) + rettupdesc = BuildDescFromLists(rtfunc->funccolnames, + rtfunc->funccoltypes, + rtfunc->funccoltypmods, + rtfunc->funccolcollations); /* * The single command must be a plain SELECT. diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 9ddf78dccdb45..9f13880d19a32 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -71,6 +71,7 @@ static Node *transformSetOperationTree(ParseState *pstate, SelectStmt *stmt, bool isTopLevel, List **targetlist); static void determineRecursiveColTypes(ParseState *pstate, Node *larg, List *nrtargetlist); +static Query *transformReturnStmt(ParseState *pstate, ReturnStmt *stmt); static Query *transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt); static List *transformReturningList(ParseState *pstate, List *returningList); static List *transformUpdateTargetList(ParseState *pstate, @@ -323,6 +324,10 @@ transformStmt(ParseState *pstate, Node *parseTree) } break; + case T_ReturnStmt: + result = transformReturnStmt(pstate, (ReturnStmt *) parseTree); + break; + case T_PLAssignStmt: result = transformPLAssignStmt(pstate, (PLAssignStmt *) parseTree); @@ -2244,6 +2249,36 @@ determineRecursiveColTypes(ParseState *pstate, Node *larg, List *nrtargetlist) } +/* + * transformReturnStmt - + * transforms a return statement + */ +static Query * +transformReturnStmt(ParseState *pstate, ReturnStmt *stmt) +{ + Query *qry = makeNode(Query); + + qry->commandType = CMD_SELECT; + qry->isReturn = true; + + qry->targetList = list_make1(makeTargetEntry((Expr *) transformExpr(pstate, stmt->returnval, EXPR_KIND_SELECT_TARGET), + 1, NULL, false)); + + if (pstate->p_resolve_unknowns) + resolveTargetListUnknowns(pstate, qry->targetList); + qry->rtable = pstate->p_rtable; + qry->jointree = makeFromExpr(pstate->p_joinlist, NULL); + qry->hasSubLinks = pstate->p_hasSubLinks; + qry->hasWindowFuncs = pstate->p_hasWindowFuncs; + qry->hasTargetSRFs = pstate->p_hasTargetSRFs; + qry->hasAggs = pstate->p_hasAggs; + + assign_query_collations(pstate, qry); + + return qry; +} + + /* * transformUpdateStmt - * transforms an update statement diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 517bf72378401..73494002ad359 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -262,7 +262,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); struct GroupClause *groupclause; } -%type stmt schema_stmt +%type stmt toplevel_stmt schema_stmt routine_body_stmt AlterEventTrigStmt AlterDatabaseStmt AlterDatabaseSetStmt AlterDomainStmt AlterEnumStmt AlterFdwStmt AlterForeignServerStmt AlterGroupStmt @@ -289,9 +289,9 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); GrantStmt GrantRoleStmt ImportForeignSchemaStmt IndexStmt InsertStmt ListenStmt LoadStmt LockStmt NotifyStmt ExplainableStmt PreparableStmt CreateFunctionStmt AlterFunctionStmt ReindexStmt RemoveAggrStmt - RemoveFuncStmt RemoveOperStmt RenameStmt RevokeStmt RevokeRoleStmt + RemoveFuncStmt RemoveOperStmt RenameStmt ReturnStmt RevokeStmt RevokeRoleStmt RuleActionStmt RuleActionStmtOrEmpty RuleStmt - SecLabelStmt SelectStmt TransactionStmt TruncateStmt + SecLabelStmt SelectStmt TransactionStmt TransactionStmtLegacy TruncateStmt UnlistenStmt UpdateStmt VacuumStmt VariableResetStmt VariableSetStmt VariableShowStmt ViewStmt CheckPointStmt CreateConversionStmt @@ -395,14 +395,14 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %type vacuum_relation %type opt_select_limit select_limit limit_clause -%type parse_toplevel stmtmulti +%type parse_toplevel stmtmulti routine_body_stmt_list OptTableElementList TableElementList OptInherit definition OptTypedTableElementList TypedTableElementList reloptions opt_reloptions OptWith opt_definition func_args func_args_list func_args_with_defaults func_args_with_defaults_list aggr_args aggr_args_list - func_as createfunc_opt_list alterfunc_opt_list + func_as createfunc_opt_list opt_createfunc_opt_list alterfunc_opt_list old_aggr_definition old_aggr_list oper_argtypes RuleActionList RuleActionMulti opt_column_list columnList opt_name_list @@ -428,6 +428,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); vacuum_relation_list opt_vacuum_relation_list drop_option_list +%type opt_routine_body %type group_clause %type group_by_list %type group_by_item empty_grouping_set rollup_clause cube_clause @@ -637,7 +638,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); /* ordinary key words in alphabetical order */ %token ABORT_P ABSOLUTE_P ACCESS ACTION ADD_P ADMIN AFTER AGGREGATE ALL ALSO ALTER ALWAYS ANALYSE ANALYZE AND ANY ARRAY AS ASC - ASENSITIVE ASSERTION ASSIGNMENT ASYMMETRIC AT ATTACH ATTRIBUTE AUTHORIZATION + ASENSITIVE ASSERTION ASSIGNMENT ASYMMETRIC ATOMIC AT ATTACH ATTRIBUTE AUTHORIZATION BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT BOOLEAN_P BOTH BREADTH BY @@ -699,7 +700,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); RANGE READ REAL REASSIGN RECHECK RECURSIVE REF REFERENCES REFERENCING REFRESH REINDEX RELATIVE_P RELEASE RENAME REPEATABLE REPLACE REPLICA - RESET RESTART RESTRICT RETURNING RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP + RESET RESTART RESTRICT RETURN RETURNING RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP ROUTINE ROUTINES ROW ROWS RULE SAVEPOINT SCHEMA SCHEMAS SCROLL SEARCH SECOND_P SECURITY SELECT SEQUENCE SEQUENCES @@ -869,7 +870,7 @@ parse_toplevel: * we'd get -1 for the location in such cases. * We also take care to discard empty statements entirely. */ -stmtmulti: stmtmulti ';' stmt +stmtmulti: stmtmulti ';' toplevel_stmt { if ($1 != NIL) { @@ -881,7 +882,7 @@ stmtmulti: stmtmulti ';' stmt else $$ = $1; } - | stmt + | toplevel_stmt { if ($1 != NULL) $$ = list_make1(makeRawStmt($1, 0)); @@ -890,7 +891,16 @@ stmtmulti: stmtmulti ';' stmt } ; -stmt : +/* + * toplevel_stmt includes BEGIN and END. stmt does not include them, because + * those words have different meanings in function bodys. + */ +toplevel_stmt: + stmt + | TransactionStmtLegacy + ; + +stmt: AlterEventTrigStmt | AlterDatabaseStmt | AlterDatabaseSetStmt @@ -7477,7 +7487,7 @@ opt_nulls_order: NULLS_LA FIRST_P { $$ = SORTBY_NULLS_FIRST; } CreateFunctionStmt: CREATE opt_or_replace FUNCTION func_name func_args_with_defaults - RETURNS func_return createfunc_opt_list + RETURNS func_return opt_createfunc_opt_list opt_routine_body { CreateFunctionStmt *n = makeNode(CreateFunctionStmt); n->is_procedure = false; @@ -7486,10 +7496,11 @@ CreateFunctionStmt: n->parameters = $5; n->returnType = $7; n->options = $8; + n->sql_body = $9; $$ = (Node *)n; } | CREATE opt_or_replace FUNCTION func_name func_args_with_defaults - RETURNS TABLE '(' table_func_column_list ')' createfunc_opt_list + RETURNS TABLE '(' table_func_column_list ')' opt_createfunc_opt_list opt_routine_body { CreateFunctionStmt *n = makeNode(CreateFunctionStmt); n->is_procedure = false; @@ -7499,10 +7510,11 @@ CreateFunctionStmt: n->returnType = TableFuncTypeName($9); n->returnType->location = @7; n->options = $11; + n->sql_body = $12; $$ = (Node *)n; } | CREATE opt_or_replace FUNCTION func_name func_args_with_defaults - createfunc_opt_list + opt_createfunc_opt_list opt_routine_body { CreateFunctionStmt *n = makeNode(CreateFunctionStmt); n->is_procedure = false; @@ -7511,10 +7523,11 @@ CreateFunctionStmt: n->parameters = $5; n->returnType = NULL; n->options = $6; + n->sql_body = $7; $$ = (Node *)n; } | CREATE opt_or_replace PROCEDURE func_name func_args_with_defaults - createfunc_opt_list + opt_createfunc_opt_list opt_routine_body { CreateFunctionStmt *n = makeNode(CreateFunctionStmt); n->is_procedure = true; @@ -7523,6 +7536,7 @@ CreateFunctionStmt: n->parameters = $5; n->returnType = NULL; n->options = $6; + n->sql_body = $7; $$ = (Node *)n; } ; @@ -7833,6 +7847,11 @@ aggregate_with_argtypes_list: { $$ = lappend($1, $3); } ; +opt_createfunc_opt_list: + createfunc_opt_list + | /*EMPTY*/ { $$ = NIL; } + ; + createfunc_opt_list: /* Must be at least one to prevent conflict */ createfunc_opt_item { $$ = list_make1($1); } @@ -7944,6 +7963,51 @@ func_as: Sconst { $$ = list_make1(makeString($1)); } } ; +ReturnStmt: RETURN a_expr + { + ReturnStmt *r = makeNode(ReturnStmt); + r->returnval = (Node *) $2; + $$ = (Node *) r; + } + ; + +opt_routine_body: + ReturnStmt + { + $$ = $1; + } + | BEGIN_P ATOMIC routine_body_stmt_list END_P + { + /* + * A compound statement is stored as a single-item list + * containing the list of statements as its member. That + * way, the parse analysis code can tell apart an empty + * body from no body at all. + */ + $$ = (Node *) list_make1($3); + } + | /*EMPTY*/ + { + $$ = NULL; + } + ; + +routine_body_stmt_list: + routine_body_stmt_list routine_body_stmt ';' + { + $$ = lappend($1, $2); + } + | /*EMPTY*/ + { + $$ = NIL; + } + ; + +routine_body_stmt: + stmt + | ReturnStmt + ; + transform_type_list: FOR TYPE_P Typename { $$ = list_make1($3); } | transform_type_list ',' FOR TYPE_P Typename { $$ = lappend($1, $5); } @@ -9897,13 +9961,6 @@ TransactionStmt: n->chain = $3; $$ = (Node *)n; } - | BEGIN_P opt_transaction transaction_mode_list_or_empty - { - TransactionStmt *n = makeNode(TransactionStmt); - n->kind = TRANS_STMT_BEGIN; - n->options = $3; - $$ = (Node *)n; - } | START TRANSACTION transaction_mode_list_or_empty { TransactionStmt *n = makeNode(TransactionStmt); @@ -9919,14 +9976,6 @@ TransactionStmt: n->chain = $3; $$ = (Node *)n; } - | END_P opt_transaction opt_transaction_chain - { - TransactionStmt *n = makeNode(TransactionStmt); - n->kind = TRANS_STMT_COMMIT; - n->options = NIL; - n->chain = $3; - $$ = (Node *)n; - } | ROLLBACK opt_transaction opt_transaction_chain { TransactionStmt *n = makeNode(TransactionStmt); @@ -9993,6 +10042,24 @@ TransactionStmt: } ; +TransactionStmtLegacy: + BEGIN_P opt_transaction transaction_mode_list_or_empty + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_BEGIN; + n->options = $3; + $$ = (Node *)n; + } + | END_P opt_transaction opt_transaction_chain + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_COMMIT; + n->options = NIL; + n->chain = $3; + $$ = (Node *)n; + } + ; + opt_transaction: WORK | TRANSACTION | /*EMPTY*/ @@ -15429,6 +15496,7 @@ unreserved_keyword: | ASSERTION | ASSIGNMENT | AT + | ATOMIC | ATTACH | ATTRIBUTE | BACKWARD @@ -15631,6 +15699,7 @@ unreserved_keyword: | RESET | RESTART | RESTRICT + | RETURN | RETURNS | REVOKE | ROLE @@ -15938,6 +16007,7 @@ bare_label_keyword: | ASSIGNMENT | ASYMMETRIC | AT + | ATOMIC | ATTACH | ATTRIBUTE | AUTHORIZATION @@ -16212,6 +16282,7 @@ bare_label_keyword: | RESET | RESTART | RESTRICT + | RETURN | RETURNS | REVOKE | RIGHT diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index ef8fb20429c93..825fd55107af9 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -191,7 +191,6 @@ static int interactive_getc(void); static int SocketBackend(StringInfo inBuf); static int ReadCommand(StringInfo inBuf); static void forbidden_in_wal_sender(char firstchar); -static List *pg_rewrite_query(Query *query); static bool check_log_statement(List *stmt_list); static int errdetail_execute(List *raw_parsetree_list); static int errdetail_params(ParamListInfo params); @@ -716,7 +715,7 @@ pg_analyze_and_rewrite_params(RawStmt *parsetree, * Note: query must just have come from the parser, because we do not do * AcquireRewriteLocks() on it. */ -static List * +List * pg_rewrite_query(Query *query) { List *querytree_list; diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 0b5314e49b387..0a4fa93d01608 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -172,6 +172,10 @@ typedef struct List *outer_tlist; /* referent for OUTER_VAR Vars */ List *inner_tlist; /* referent for INNER_VAR Vars */ List *index_tlist; /* referent for INDEX_VAR Vars */ + /* Special namespace representing a function signature: */ + char *funcname; + int numargs; + char **argnames; } deparse_namespace; /* @@ -348,6 +352,7 @@ static int print_function_arguments(StringInfo buf, HeapTuple proctup, bool print_table_args, bool print_defaults); static void print_function_rettype(StringInfo buf, HeapTuple proctup); static void print_function_trftypes(StringInfo buf, HeapTuple proctup); +static void print_function_sqlbody(StringInfo buf, HeapTuple proctup); static void set_rtable_names(deparse_namespace *dpns, List *parent_namespaces, Bitmapset *rels_used); static void set_deparse_for_query(deparse_namespace *dpns, Query *query, @@ -2968,6 +2973,13 @@ pg_get_functiondef(PG_FUNCTION_ARGS) } /* And finally the function definition ... */ + tmp = SysCacheGetAttr(PROCOID, proctup, Anum_pg_proc_prosqlbody, &isnull); + if (proc->prolang == SQLlanguageId && !isnull) + { + print_function_sqlbody(&buf, proctup); + } + else + { appendStringInfoString(&buf, "AS "); tmp = SysCacheGetAttr(PROCOID, proctup, Anum_pg_proc_probin, &isnull); @@ -2999,6 +3011,7 @@ pg_get_functiondef(PG_FUNCTION_ARGS) appendBinaryStringInfo(&buf, dq.data, dq.len); appendStringInfoString(&buf, prosrc); appendBinaryStringInfo(&buf, dq.data, dq.len); + } appendStringInfoChar(&buf, '\n'); @@ -3382,6 +3395,83 @@ pg_get_function_arg_default(PG_FUNCTION_ARGS) PG_RETURN_TEXT_P(string_to_text(str)); } +static void +print_function_sqlbody(StringInfo buf, HeapTuple proctup) +{ + int numargs; + Oid *argtypes; + char **argnames; + char *argmodes; + deparse_namespace dpns = {0}; + Datum tmp; + bool isnull; + Node *n; + + dpns.funcname = pstrdup(NameStr(((Form_pg_proc) GETSTRUCT(proctup))->proname)); + numargs = get_func_arg_info(proctup, + &argtypes, &argnames, &argmodes); + dpns.numargs = numargs; + dpns.argnames = argnames; + + tmp = SysCacheGetAttr(PROCOID, proctup, Anum_pg_proc_prosqlbody, &isnull); + Assert(!isnull); + n = stringToNode(TextDatumGetCString(tmp)); + + if (IsA(n, List)) + { + List *stmts; + ListCell *lc; + + stmts = linitial(castNode(List, n)); + + appendStringInfoString(buf, "BEGIN ATOMIC\n"); + + foreach(lc, stmts) + { + Query *query = lfirst_node(Query, lc); + + get_query_def(query, buf, list_make1(&dpns), NULL, PRETTYFLAG_INDENT, WRAP_COLUMN_DEFAULT, 1); + appendStringInfoChar(buf, ';'); + appendStringInfoChar(buf, '\n'); + } + + appendStringInfoString(buf, "END"); + } + else + { + get_query_def(castNode(Query, n), buf, list_make1(&dpns), NULL, 0, WRAP_COLUMN_DEFAULT, 0); + } +} + +Datum +pg_get_function_sqlbody(PG_FUNCTION_ARGS) +{ + Oid funcid = PG_GETARG_OID(0); + StringInfoData buf; + HeapTuple proctup; + bool isnull; + + initStringInfo(&buf); + + /* Look up the function */ + proctup = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid)); + if (!HeapTupleIsValid(proctup)) + PG_RETURN_NULL(); + + SysCacheGetAttr(PROCOID, proctup, Anum_pg_proc_prosqlbody, &isnull); + if (isnull) + { + ReleaseSysCache(proctup); + PG_RETURN_NULL(); + } + + print_function_sqlbody(&buf, proctup); + + ReleaseSysCache(proctup); + + PG_RETURN_TEXT_P(cstring_to_text(buf.data)); +} + /* * deparse_expression - General utility for deparsing expressions @@ -5637,7 +5727,10 @@ get_basic_select_query(Query *query, deparse_context *context, /* * Build up the query string - first we say SELECT */ - appendStringInfoString(buf, "SELECT"); + if (query->isReturn) + appendStringInfoString(buf, "RETURN"); + else + appendStringInfoString(buf, "SELECT"); /* Add the DISTINCT clause if given */ if (query->distinctClause != NIL) @@ -7771,6 +7864,50 @@ get_parameter(Param *param, deparse_context *context) return; } + /* + * If it's an external parameter, see if the outermost namespace provides + * function argument names. + */ + if (param->paramkind == PARAM_EXTERN) + { + dpns = lfirst(list_tail(context->namespaces)); + if (dpns->argnames) + { + char *argname = dpns->argnames[param->paramid - 1]; + + if (argname) + { + bool should_qualify = false; + ListCell *lc; + + /* + * Qualify the parameter name if there are any other deparse + * namespaces with range tables. This avoids qualifying in + * trivial cases like "RETURN a + b", but makes it safe in all + * other cases. + */ + foreach(lc, context->namespaces) + { + deparse_namespace *dpns = lfirst(lc); + + if (list_length(dpns->rtable_names) > 0) + { + should_qualify = true; + break; + } + } + if (should_qualify) + { + appendStringInfoString(context->buf, quote_identifier(dpns->funcname)); + appendStringInfoChar(context->buf, '.'); + } + + appendStringInfoString(context->buf, quote_identifier(argname)); + return; + } + } + } + /* * Not PARAM_EXEC, or couldn't find referent: just print $N. */ diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 25717ce0e68b7..d0ea48961426c 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -12128,6 +12128,7 @@ dumpFunc(Archive *fout, const FuncInfo *finfo) char *proretset; char *prosrc; char *probin; + char *prosqlbody; char *funcargs; char *funciargs; char *funcresult; @@ -12174,7 +12175,7 @@ dumpFunc(Archive *fout, const FuncInfo *finfo) "provolatile,\n" "proisstrict,\n" "prosecdef,\n" - "(SELECT lanname FROM pg_catalog.pg_language WHERE oid = prolang) AS lanname,\n"); + "lanname,\n"); if (fout->remoteVersion >= 80300) appendPQExpBufferStr(query, @@ -12194,9 +12195,9 @@ dumpFunc(Archive *fout, const FuncInfo *finfo) * pg_get_function_result instead of examining proallargtypes etc. */ appendPQExpBufferStr(query, - "pg_catalog.pg_get_function_arguments(oid) AS funcargs,\n" - "pg_catalog.pg_get_function_identity_arguments(oid) AS funciargs,\n" - "pg_catalog.pg_get_function_result(oid) AS funcresult,\n"); + "pg_catalog.pg_get_function_arguments(p.oid) AS funcargs,\n" + "pg_catalog.pg_get_function_identity_arguments(p.oid) AS funciargs,\n" + "pg_catalog.pg_get_function_result(p.oid) AS funcresult,\n"); } else if (fout->remoteVersion >= 80100) appendPQExpBufferStr(query, @@ -12239,21 +12240,39 @@ dumpFunc(Archive *fout, const FuncInfo *finfo) if (fout->remoteVersion >= 120000) appendPQExpBufferStr(query, - "prosupport\n"); + "prosupport,\n"); else appendPQExpBufferStr(query, - "'-' AS prosupport\n"); + "'-' AS prosupport,\n"); + + if (fout->remoteVersion >= 140000) + appendPQExpBufferStr(query, + "CASE WHEN prosrc IS NULL AND lanname = 'sql' THEN pg_get_function_sqlbody(p.oid) END AS prosqlbody\n"); + else + appendPQExpBufferStr(query, + "NULL AS prosqlbody\n"); appendPQExpBuffer(query, - "FROM pg_catalog.pg_proc " - "WHERE oid = '%u'::pg_catalog.oid", + "FROM pg_catalog.pg_proc p, pg_catalog.pg_language l\n" + "WHERE p.oid = '%u'::pg_catalog.oid " + "AND l.oid = p.prolang", finfo->dobj.catId.oid); res = ExecuteSqlQueryForSingleRow(fout, query->data); proretset = PQgetvalue(res, 0, PQfnumber(res, "proretset")); - prosrc = PQgetvalue(res, 0, PQfnumber(res, "prosrc")); - probin = PQgetvalue(res, 0, PQfnumber(res, "probin")); + if (PQgetisnull(res, 0, PQfnumber(res, "prosqlbody"))) + { + prosrc = PQgetvalue(res, 0, PQfnumber(res, "prosrc")); + probin = PQgetvalue(res, 0, PQfnumber(res, "probin")); + prosqlbody = NULL; + } + else + { + prosrc = NULL; + probin = NULL; + prosqlbody = PQgetvalue(res, 0, PQfnumber(res, "prosqlbody")); + } if (fout->remoteVersion >= 80400) { funcargs = PQgetvalue(res, 0, PQfnumber(res, "funcargs")); @@ -12290,7 +12309,11 @@ dumpFunc(Archive *fout, const FuncInfo *finfo) * versions would set it to "-". There are no known cases in which prosrc * is unused, so the tests below for "-" are probably useless. */ - if (probin[0] != '\0' && strcmp(probin, "-") != 0) + if (prosqlbody) + { + appendPQExpBufferStr(asPart, prosqlbody); + } + else if (probin[0] != '\0' && strcmp(probin, "-") != 0) { appendPQExpBufferStr(asPart, "AS "); appendStringLiteralAH(asPart, probin, fout); diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 440249ff69df1..52f7b2ce78c2f 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -505,11 +505,18 @@ describeFunctions(const char *functypes, const char *pattern, bool verbose, bool appendPQExpBufferStr(&buf, ",\n "); printACLColumn(&buf, "p.proacl"); appendPQExpBuffer(&buf, - ",\n l.lanname as \"%s\"" - ",\n p.prosrc as \"%s\"" + ",\n l.lanname as \"%s\"", + gettext_noop("Language")); + if (pset.sversion >= 140000) + appendPQExpBuffer(&buf, + ",\n COALESCE(p.prosrc, pg_catalog.pg_get_function_sqlbody(p.oid)) as \"%s\"", + gettext_noop("Source code")); + else + appendPQExpBuffer(&buf, + ",\n p.prosrc as \"%s\"", + gettext_noop("Source code")); + appendPQExpBuffer(&buf, ",\n pg_catalog.obj_description(p.oid, 'pg_proc') as \"%s\"", - gettext_noop("Language"), - gettext_noop("Source code"), gettext_noop("Description")); } diff --git a/src/fe_utils/psqlscan.l b/src/fe_utils/psqlscan.l index 216ff30993f70..4ec57e96a9d9a 100644 --- a/src/fe_utils/psqlscan.l +++ b/src/fe_utils/psqlscan.l @@ -645,10 +645,11 @@ other . ";" { ECHO; - if (cur_state->paren_depth == 0) + if (cur_state->paren_depth == 0 && cur_state->begin_depth == 0) { /* Terminate lexing temporarily */ cur_state->start_state = YY_START; + cur_state->identifier_count = 0; return LEXRES_SEMI; } } @@ -661,6 +662,8 @@ other . "\\"[;:] { /* Force a semi-colon or colon into the query buffer */ psqlscan_emit(cur_state, yytext + 1, 1); + if (yytext[1] == ';') + cur_state->identifier_count = 0; } "\\" { @@ -867,6 +870,18 @@ other . {identifier} { + cur_state->identifier_count++; + if (pg_strcasecmp(yytext, "begin") == 0 + || pg_strcasecmp(yytext, "case") == 0) + { + if (cur_state->identifier_count > 1) + cur_state->begin_depth++; + } + else if (pg_strcasecmp(yytext, "end") == 0) + { + if (cur_state->begin_depth > 0) + cur_state->begin_depth--; + } ECHO; } @@ -1054,6 +1069,11 @@ psql_scan(PsqlScanState state, result = PSCAN_INCOMPLETE; *prompt = PROMPT_PAREN; } + if (state->begin_depth > 0) + { + result = PSCAN_INCOMPLETE; + *prompt = PROMPT_CONTINUE; + } else if (query_buf->len > 0) { result = PSCAN_EOL; @@ -1170,6 +1190,8 @@ psql_scan_reset(PsqlScanState state) if (state->dolqstart) free(state->dolqstart); state->dolqstart = NULL; + state->identifier_count = 0; + state->begin_depth = 0; } /* diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 53fd6c08b3386..abd4bffff5fc6 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202104071 +#define CATALOG_VERSION_NO 202104072 #endif diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 97d8238a99761..6feaaa44597e5 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -3718,6 +3718,10 @@ proname => 'pg_get_function_arg_default', provolatile => 's', prorettype => 'text', proargtypes => 'oid int4', prosrc => 'pg_get_function_arg_default' }, +{ oid => '9704', descr => 'function SQL body', + proname => 'pg_get_function_sqlbody', provolatile => 's', + prorettype => 'text', proargtypes => 'oid', + prosrc => 'pg_get_function_sqlbody' }, { oid => '1686', descr => 'list of SQL keywords', proname => 'pg_get_keywords', procost => '10', prorows => '500', diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 78f230894bd33..8d58067d0344e 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -112,11 +112,14 @@ CATALOG(pg_proc,1255,ProcedureRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(81,Proce Oid protrftypes[1] BKI_DEFAULT(_null_) BKI_LOOKUP(pg_type); /* procedure source text */ - text prosrc BKI_FORCE_NOT_NULL; + text prosrc; /* secondary procedure info (can be NULL) */ text probin BKI_DEFAULT(_null_); + /* pre-parsed SQL function body */ + pg_node_tree prosqlbody BKI_DEFAULT(_null_); + /* procedure-local GUC settings */ text proconfig[1] BKI_DEFAULT(_null_); @@ -194,6 +197,7 @@ extern ObjectAddress ProcedureCreate(const char *procedureName, Oid languageValidator, const char *prosrc, const char *probin, + Node *prosqlbody, char prokind, bool security_definer, bool isLeakProof, diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h index 339f29f4c852e..6bce4d76fe50c 100644 --- a/src/include/commands/defrem.h +++ b/src/include/commands/defrem.h @@ -65,9 +65,11 @@ extern void interpret_function_parameter_list(ParseState *pstate, Oid languageOid, ObjectType objtype, oidvector **parameterTypes, + List **parameterTypes_list, ArrayType **allParameterTypes, ArrayType **parameterModes, ArrayType **parameterNames, + List **inParameterNames_list, List **parameterDefaults, Oid *variadicArgType, Oid *requiredResultType); diff --git a/src/include/executor/functions.h b/src/include/executor/functions.h index c975a93661e89..dcb8e18437fe1 100644 --- a/src/include/executor/functions.h +++ b/src/include/executor/functions.h @@ -20,6 +20,21 @@ /* This struct is known only within executor/functions.c */ typedef struct SQLFunctionParseInfo *SQLFunctionParseInfoPtr; +/* + * Data structure needed by the parser callback hooks to resolve parameter + * references during parsing of a SQL function's body. This is separate from + * SQLFunctionCache since we sometimes do parsing separately from execution. + */ +typedef struct SQLFunctionParseInfo +{ + char *fname; /* function's name */ + int nargs; /* number of input arguments */ + Oid *argtypes; /* resolved types of input arguments */ + char **argnames; /* names of input arguments; NULL if none */ + /* Note that argnames[i] can be NULL, if some args are unnamed */ + Oid collation; /* function's input collation, if known */ +} SQLFunctionParseInfo; + extern Datum fmgr_sql(PG_FUNCTION_ARGS); extern SQLFunctionParseInfoPtr prepare_sql_fn_parse_info(HeapTuple procedureTuple, diff --git a/src/include/fe_utils/psqlscan_int.h b/src/include/fe_utils/psqlscan_int.h index 2bc3cc4ae7317..91d7d4d5c6cd1 100644 --- a/src/include/fe_utils/psqlscan_int.h +++ b/src/include/fe_utils/psqlscan_int.h @@ -114,6 +114,8 @@ typedef struct PsqlScanStateData int paren_depth; /* depth of nesting in parentheses */ int xcdepth; /* depth of nesting in slash-star comments */ char *dolqstart; /* current $foo$ quote start string */ + int identifier_count; /* identifiers since start of statement */ + int begin_depth; /* depth of begin/end routine body blocks */ /* * Callback functions provided by the program making use of the lexer, diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h index 2051abbbf9298..d9e417bcd7064 100644 --- a/src/include/nodes/nodes.h +++ b/src/include/nodes/nodes.h @@ -321,6 +321,7 @@ typedef enum NodeTag T_DeleteStmt, T_UpdateStmt, T_SelectStmt, + T_ReturnStmt, T_PLAssignStmt, T_AlterTableStmt, T_AlterTableCmd, diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index acc093d6e0f69..7a44bccdd3b46 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -140,6 +140,8 @@ typedef struct Query bool hasForUpdate; /* FOR [KEY] UPDATE/SHARE was specified */ bool hasRowSecurity; /* rewriter has applied some RLS policy */ + bool isReturn; /* is a RETURN statement */ + List *cteList; /* WITH list (of CommonTableExpr's) */ List *rtable; /* list of range table entries */ @@ -1721,6 +1723,16 @@ typedef struct SetOperationStmt } SetOperationStmt; +/* + * RETURN statement (inside SQL function body) + */ +typedef struct ReturnStmt +{ + NodeTag type; + Node *returnval; +} ReturnStmt; + + /* ---------------------- * PL/pgSQL Assignment Statement * @@ -2924,6 +2936,7 @@ typedef struct CreateFunctionStmt List *parameters; /* a list of FunctionParameter */ TypeName *returnType; /* the return type */ List *options; /* a list of DefElem */ + Node *sql_body; } CreateFunctionStmt; typedef enum FunctionParameterMode diff --git a/src/include/parser/kwlist.h b/src/include/parser/kwlist.h index d3ecd72e72ed1..f836acf876ac4 100644 --- a/src/include/parser/kwlist.h +++ b/src/include/parser/kwlist.h @@ -49,6 +49,7 @@ PG_KEYWORD("assertion", ASSERTION, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("assignment", ASSIGNMENT, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("asymmetric", ASYMMETRIC, RESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("at", AT, UNRESERVED_KEYWORD, BARE_LABEL) +PG_KEYWORD("atomic", ATOMIC, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("attach", ATTACH, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("attribute", ATTRIBUTE, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("authorization", AUTHORIZATION, TYPE_FUNC_NAME_KEYWORD, BARE_LABEL) @@ -349,6 +350,7 @@ PG_KEYWORD("replica", REPLICA, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("reset", RESET, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("restart", RESTART, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("restrict", RESTRICT, UNRESERVED_KEYWORD, BARE_LABEL) +PG_KEYWORD("return", RETURN, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("returning", RETURNING, RESERVED_KEYWORD, AS_LABEL) PG_KEYWORD("returns", RETURNS, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("revoke", REVOKE, UNRESERVED_KEYWORD, BARE_LABEL) diff --git a/src/include/tcop/tcopprot.h b/src/include/tcop/tcopprot.h index 241e7c99614a1..968345404e54d 100644 --- a/src/include/tcop/tcopprot.h +++ b/src/include/tcop/tcopprot.h @@ -44,6 +44,7 @@ typedef enum extern PGDLLIMPORT int log_statement; extern List *pg_parse_query(const char *query_string); +extern List *pg_rewrite_query(Query *query); extern List *pg_analyze_and_rewrite(RawStmt *parsetree, const char *query_string, Oid *paramTypes, int numParams, diff --git a/src/interfaces/ecpg/preproc/ecpg.addons b/src/interfaces/ecpg/preproc/ecpg.addons index 974ce05664f43..b6e3412cef52c 100644 --- a/src/interfaces/ecpg/preproc/ecpg.addons +++ b/src/interfaces/ecpg/preproc/ecpg.addons @@ -89,6 +89,12 @@ ECPG: stmtTransactionStmt block whenever_action(2); free($1); } +ECPG: toplevel_stmtTransactionStmtLegacy block + { + fprintf(base_yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1); + whenever_action(2); + free($1); + } ECPG: stmtViewStmt rule | ECPGAllocateDescr { diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer b/src/interfaces/ecpg/preproc/ecpg.trailer index d699e0abbfcf2..3600d7c605434 100644 --- a/src/interfaces/ecpg/preproc/ecpg.trailer +++ b/src/interfaces/ecpg/preproc/ecpg.trailer @@ -4,8 +4,8 @@ statements: /*EMPTY*/ | statements statement ; -statement: ecpgstart at stmt ';' { connection = NULL; } - | ecpgstart stmt ';' +statement: ecpgstart at toplevel_stmt ';' { connection = NULL; } + | ecpgstart toplevel_stmt ';' | ecpgstart ECPGVarDeclaration { fprintf(base_yyout, "%s", $2); diff --git a/src/test/regress/expected/create_function_3.out b/src/test/regress/expected/create_function_3.out index f25a407fddce2..1fbaebcc72809 100644 --- a/src/test/regress/expected/create_function_3.out +++ b/src/test/regress/expected/create_function_3.out @@ -255,6 +255,176 @@ SELECT pg_get_functiondef('functest_F_2'::regproc); (1 row) +-- +-- SQL-standard body +-- +CREATE FUNCTION functest_S_1(a text, b date) RETURNS boolean + LANGUAGE SQL + RETURN a = 'abcd' AND b > '2001-01-01'; +CREATE FUNCTION functest_S_2(a text[]) RETURNS int + RETURN a[1]::int; +CREATE FUNCTION functest_S_3() RETURNS boolean + RETURN false; +CREATE FUNCTION functest_S_3a() RETURNS boolean + BEGIN ATOMIC + RETURN false; + END; +CREATE FUNCTION functest_S_10(a text, b date) RETURNS boolean + LANGUAGE SQL + BEGIN ATOMIC + SELECT a = 'abcd' AND b > '2001-01-01'; + END; +CREATE FUNCTION functest_S_13() RETURNS boolean + BEGIN ATOMIC + SELECT 1; + SELECT false; + END; +-- error: duplicate function body +CREATE FUNCTION functest_S_xxx(x int) RETURNS int + LANGUAGE SQL + AS $$ SELECT x * 2 $$ + RETURN x * 3; +ERROR: duplicate function body specified +-- polymorphic arguments not allowed in this form +CREATE FUNCTION functest_S_xx(x anyarray) RETURNS anyelement + LANGUAGE SQL + RETURN x[1]; +ERROR: SQL function with unquoted function body cannot have polymorphic arguments +-- tricky parsing +CREATE FUNCTION functest_S_15(x int) RETURNS boolean +LANGUAGE SQL +BEGIN ATOMIC + select case when x % 2 = 0 then true else false end; +END; +SELECT functest_S_1('abcd', '2020-01-01'); + functest_s_1 +-------------- + t +(1 row) + +SELECT functest_S_2(ARRAY['1', '2', '3']); + functest_s_2 +-------------- + 1 +(1 row) + +SELECT functest_S_3(); + functest_s_3 +-------------- + f +(1 row) + +SELECT functest_S_10('abcd', '2020-01-01'); + functest_s_10 +--------------- + t +(1 row) + +SELECT functest_S_13(); + functest_s_13 +--------------- + f +(1 row) + +SELECT pg_get_functiondef('functest_S_1'::regproc); + pg_get_functiondef +------------------------------------------------------------------------ + CREATE OR REPLACE FUNCTION temp_func_test.functest_s_1(a text, b date)+ + RETURNS boolean + + LANGUAGE sql + + RETURN ((a = 'abcd'::text) AND (b > '01-01-2001'::date)) + + +(1 row) + +SELECT pg_get_functiondef('functest_S_2'::regproc); + pg_get_functiondef +------------------------------------------------------------------ + CREATE OR REPLACE FUNCTION temp_func_test.functest_s_2(a text[])+ + RETURNS integer + + LANGUAGE sql + + RETURN ((a)[1])::integer + + +(1 row) + +SELECT pg_get_functiondef('functest_S_3'::regproc); + pg_get_functiondef +---------------------------------------------------------- + CREATE OR REPLACE FUNCTION temp_func_test.functest_s_3()+ + RETURNS boolean + + LANGUAGE sql + + RETURN false + + +(1 row) + +SELECT pg_get_functiondef('functest_S_3a'::regproc); + pg_get_functiondef +----------------------------------------------------------- + CREATE OR REPLACE FUNCTION temp_func_test.functest_s_3a()+ + RETURNS boolean + + LANGUAGE sql + + BEGIN ATOMIC + + RETURN false; + + END + + +(1 row) + +SELECT pg_get_functiondef('functest_S_10'::regproc); + pg_get_functiondef +------------------------------------------------------------------------- + CREATE OR REPLACE FUNCTION temp_func_test.functest_s_10(a text, b date)+ + RETURNS boolean + + LANGUAGE sql + + BEGIN ATOMIC + + SELECT ((a = 'abcd'::text) AND (b > '01-01-2001'::date)); + + END + + +(1 row) + +SELECT pg_get_functiondef('functest_S_13'::regproc); + pg_get_functiondef +----------------------------------------------------------- + CREATE OR REPLACE FUNCTION temp_func_test.functest_s_13()+ + RETURNS boolean + + LANGUAGE sql + + BEGIN ATOMIC + + SELECT 1; + + SELECT false AS bool; + + END + + +(1 row) + +SELECT pg_get_functiondef('functest_S_15'::regproc); + pg_get_functiondef +-------------------------------------------------------------------- + CREATE OR REPLACE FUNCTION temp_func_test.functest_s_15(x integer)+ + RETURNS boolean + + LANGUAGE sql + + BEGIN ATOMIC + + SELECT + + CASE + + WHEN ((x % 2) = 0) THEN true + + ELSE false + + END AS "case"; + + END + + +(1 row) + +-- test with views +CREATE TABLE functest3 (a int); +INSERT INTO functest3 VALUES (1), (2); +CREATE VIEW functestv3 AS SELECT * FROM functest3; +CREATE FUNCTION functest_S_14() RETURNS bigint + RETURN (SELECT count(*) FROM functestv3); +SELECT functest_S_14(); + functest_s_14 +--------------- + 2 +(1 row) + +DROP TABLE functest3 CASCADE; +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to view functestv3 +drop cascades to function functest_s_14() -- information_schema tests CREATE FUNCTION functest_IS_1(a int, b int default 1, c text default 'foo') RETURNS int @@ -292,6 +462,15 @@ CREATE FUNCTION functest_IS_5(x int DEFAULT nextval('functest1')) RETURNS int LANGUAGE SQL AS 'SELECT x'; +CREATE FUNCTION functest_IS_6() + RETURNS int + LANGUAGE SQL + RETURN nextval('functest1'); +CREATE TABLE functest2 (a int, b int); +CREATE FUNCTION functest_IS_7() + RETURNS int + LANGUAGE SQL + RETURN (SELECT count(a) FROM functest2); SELECT r0.routine_name, r1.routine_name FROM information_schema.routine_routine_usage rru JOIN information_schema.routines r0 ON r0.specific_name = rru.specific_name @@ -305,23 +484,29 @@ SELECT routine_name, sequence_name FROM information_schema.routine_sequence_usag routine_name | sequence_name ---------------+--------------- functest_is_5 | functest1 -(1 row) + functest_is_6 | functest1 +(2 rows) --- currently empty SELECT routine_name, table_name, column_name FROM information_schema.routine_column_usage; - routine_name | table_name | column_name ---------------+------------+------------- -(0 rows) + routine_name | table_name | column_name +---------------+------------+------------- + functest_is_7 | functest2 | a +(1 row) SELECT routine_name, table_name FROM information_schema.routine_table_usage; - routine_name | table_name ---------------+------------ -(0 rows) + routine_name | table_name +---------------+------------ + functest_is_7 | functest2 +(1 row) DROP FUNCTION functest_IS_4a CASCADE; NOTICE: drop cascades to function functest_is_4b(integer) DROP SEQUENCE functest1 CASCADE; -NOTICE: drop cascades to function functest_is_5(integer) +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to function functest_is_5(integer) +drop cascades to function functest_is_6() +DROP TABLE functest2 CASCADE; +NOTICE: drop cascades to function functest_is_7() -- overload CREATE FUNCTION functest_B_2(bigint) RETURNS bool LANGUAGE 'sql' IMMUTABLE AS 'SELECT $1 > 0'; @@ -340,6 +525,49 @@ CREATE OR REPLACE PROCEDURE functest1(a int) LANGUAGE SQL AS 'SELECT $1'; ERROR: cannot change routine kind DETAIL: "functest1" is a function. DROP FUNCTION functest1(a int); +-- inlining of set-returning functions +CREATE FUNCTION functest_sri1() RETURNS SETOF int +LANGUAGE SQL +STABLE +AS ' + VALUES (1), (2), (3); +'; +SELECT * FROM functest_sri1(); + functest_sri1 +--------------- + 1 + 2 + 3 +(3 rows) + +EXPLAIN (verbose, costs off) SELECT * FROM functest_sri1(); + QUERY PLAN +------------------------------ + Values Scan on "*VALUES*" + Output: "*VALUES*".column1 +(2 rows) + +CREATE FUNCTION functest_sri2() RETURNS SETOF int +LANGUAGE SQL +STABLE +BEGIN ATOMIC + VALUES (1), (2), (3); +END; +SELECT * FROM functest_sri2(); + functest_sri2 +--------------- + 1 + 2 + 3 +(3 rows) + +EXPLAIN (verbose, costs off) SELECT * FROM functest_sri2(); + QUERY PLAN +------------------------------ + Values Scan on "*VALUES*" + Output: "*VALUES*".column1 +(2 rows) + -- Check behavior of VOID-returning SQL functions CREATE FUNCTION voidtest1(a int) RETURNS VOID LANGUAGE SQL AS $$ SELECT a + 1 $$; @@ -398,7 +626,7 @@ SELECT * FROM voidtest5(3); -- Cleanup DROP SCHEMA temp_func_test CASCADE; -NOTICE: drop cascades to 21 other objects +NOTICE: drop cascades to 30 other objects DETAIL: drop cascades to function functest_a_1(text,date) drop cascades to function functest_a_2(text[]) drop cascades to function functest_a_3() @@ -414,7 +642,16 @@ drop cascades to function functest_f_1(integer) drop cascades to function functest_f_2(integer) drop cascades to function functest_f_3(integer) drop cascades to function functest_f_4(integer) +drop cascades to function functest_s_1(text,date) +drop cascades to function functest_s_2(text[]) +drop cascades to function functest_s_3() +drop cascades to function functest_s_3a() +drop cascades to function functest_s_10(text,date) +drop cascades to function functest_s_13() +drop cascades to function functest_s_15(integer) drop cascades to function functest_b_2(bigint) +drop cascades to function functest_sri1() +drop cascades to function functest_sri2() drop cascades to function voidtest1(integer) drop cascades to function voidtest2(integer,integer) drop cascades to function voidtest3(integer) diff --git a/src/test/regress/expected/create_procedure.out b/src/test/regress/expected/create_procedure.out index 3838fa2324da4..d45575561e423 100644 --- a/src/test/regress/expected/create_procedure.out +++ b/src/test/regress/expected/create_procedure.out @@ -65,6 +65,48 @@ SELECT * FROM cp_test ORDER BY b COLLATE "C"; 1 | xyzzy (3 rows) +-- SQL-standard body +CREATE PROCEDURE ptest1s(x text) +LANGUAGE SQL +BEGIN ATOMIC + INSERT INTO cp_test VALUES (1, x); +END; +\df ptest1s + List of functions + Schema | Name | Result data type | Argument data types | Type +--------+---------+------------------+---------------------+------ + public | ptest1s | | x text | proc +(1 row) + +SELECT pg_get_functiondef('ptest1s'::regproc); + pg_get_functiondef +---------------------------------------------------- + CREATE OR REPLACE PROCEDURE public.ptest1s(x text)+ + LANGUAGE sql + + BEGIN ATOMIC + + INSERT INTO cp_test (a, b) + + VALUES (1, ptest1s.x); + + END + + +(1 row) + +CALL ptest1s('b'); +SELECT * FROM cp_test ORDER BY b COLLATE "C"; + a | b +---+------- + 1 | 0 + 1 | a + 1 | b + 1 | xyzzy +(4 rows) + +-- utitlity functions currently not supported here +CREATE PROCEDURE ptestx() +LANGUAGE SQL +BEGIN ATOMIC + CREATE TABLE x (a int); +END; +ERROR: CREATE TABLE is not yet supported in unquoted SQL function body CREATE PROCEDURE ptest2() LANGUAGE SQL AS $$ @@ -146,6 +188,28 @@ AS $$ SELECT a = b; $$; CALL ptest7(least('a', 'b'), 'a'); +-- empty body +CREATE PROCEDURE ptest8(x text) +BEGIN ATOMIC +END; +\df ptest8 + List of functions + Schema | Name | Result data type | Argument data types | Type +--------+--------+------------------+---------------------+------ + public | ptest8 | | x text | proc +(1 row) + +SELECT pg_get_functiondef('ptest8'::regproc); + pg_get_functiondef +--------------------------------------------------- + CREATE OR REPLACE PROCEDURE public.ptest8(x text)+ + LANGUAGE sql + + BEGIN ATOMIC + + END + + +(1 row) + +CALL ptest8(''); -- OUT parameters CREATE PROCEDURE ptest9(OUT a int) LANGUAGE SQL @@ -214,6 +278,7 @@ ALTER ROUTINE ptest1a RENAME TO ptest1; DROP ROUTINE cp_testfunc1(int); -- cleanup DROP PROCEDURE ptest1; +DROP PROCEDURE ptest1s; DROP PROCEDURE ptest2; DROP TABLE cp_test; DROP USER regress_cp_user1; diff --git a/src/test/regress/sql/create_function_3.sql b/src/test/regress/sql/create_function_3.sql index 549b34b4b2a9d..695ee3413f433 100644 --- a/src/test/regress/sql/create_function_3.sql +++ b/src/test/regress/sql/create_function_3.sql @@ -153,6 +153,79 @@ SELECT pg_get_functiondef('functest_C_3'::regproc); SELECT pg_get_functiondef('functest_F_2'::regproc); +-- +-- SQL-standard body +-- +CREATE FUNCTION functest_S_1(a text, b date) RETURNS boolean + LANGUAGE SQL + RETURN a = 'abcd' AND b > '2001-01-01'; +CREATE FUNCTION functest_S_2(a text[]) RETURNS int + RETURN a[1]::int; +CREATE FUNCTION functest_S_3() RETURNS boolean + RETURN false; +CREATE FUNCTION functest_S_3a() RETURNS boolean + BEGIN ATOMIC + RETURN false; + END; + +CREATE FUNCTION functest_S_10(a text, b date) RETURNS boolean + LANGUAGE SQL + BEGIN ATOMIC + SELECT a = 'abcd' AND b > '2001-01-01'; + END; + +CREATE FUNCTION functest_S_13() RETURNS boolean + BEGIN ATOMIC + SELECT 1; + SELECT false; + END; + +-- error: duplicate function body +CREATE FUNCTION functest_S_xxx(x int) RETURNS int + LANGUAGE SQL + AS $$ SELECT x * 2 $$ + RETURN x * 3; + +-- polymorphic arguments not allowed in this form +CREATE FUNCTION functest_S_xx(x anyarray) RETURNS anyelement + LANGUAGE SQL + RETURN x[1]; + +-- tricky parsing +CREATE FUNCTION functest_S_15(x int) RETURNS boolean +LANGUAGE SQL +BEGIN ATOMIC + select case when x % 2 = 0 then true else false end; +END; + +SELECT functest_S_1('abcd', '2020-01-01'); +SELECT functest_S_2(ARRAY['1', '2', '3']); +SELECT functest_S_3(); + +SELECT functest_S_10('abcd', '2020-01-01'); +SELECT functest_S_13(); + +SELECT pg_get_functiondef('functest_S_1'::regproc); +SELECT pg_get_functiondef('functest_S_2'::regproc); +SELECT pg_get_functiondef('functest_S_3'::regproc); +SELECT pg_get_functiondef('functest_S_3a'::regproc); +SELECT pg_get_functiondef('functest_S_10'::regproc); +SELECT pg_get_functiondef('functest_S_13'::regproc); +SELECT pg_get_functiondef('functest_S_15'::regproc); + +-- test with views +CREATE TABLE functest3 (a int); +INSERT INTO functest3 VALUES (1), (2); +CREATE VIEW functestv3 AS SELECT * FROM functest3; + +CREATE FUNCTION functest_S_14() RETURNS bigint + RETURN (SELECT count(*) FROM functestv3); + +SELECT functest_S_14(); + +DROP TABLE functest3 CASCADE; + + -- information_schema tests CREATE FUNCTION functest_IS_1(a int, b int default 1, c text default 'foo') @@ -188,17 +261,29 @@ CREATE FUNCTION functest_IS_5(x int DEFAULT nextval('functest1')) LANGUAGE SQL AS 'SELECT x'; +CREATE FUNCTION functest_IS_6() + RETURNS int + LANGUAGE SQL + RETURN nextval('functest1'); + +CREATE TABLE functest2 (a int, b int); + +CREATE FUNCTION functest_IS_7() + RETURNS int + LANGUAGE SQL + RETURN (SELECT count(a) FROM functest2); + SELECT r0.routine_name, r1.routine_name FROM information_schema.routine_routine_usage rru JOIN information_schema.routines r0 ON r0.specific_name = rru.specific_name JOIN information_schema.routines r1 ON r1.specific_name = rru.routine_name; SELECT routine_name, sequence_name FROM information_schema.routine_sequence_usage; --- currently empty SELECT routine_name, table_name, column_name FROM information_schema.routine_column_usage; SELECT routine_name, table_name FROM information_schema.routine_table_usage; DROP FUNCTION functest_IS_4a CASCADE; DROP SEQUENCE functest1 CASCADE; +DROP TABLE functest2 CASCADE; -- overload @@ -218,6 +303,29 @@ CREATE OR REPLACE PROCEDURE functest1(a int) LANGUAGE SQL AS 'SELECT $1'; DROP FUNCTION functest1(a int); +-- inlining of set-returning functions + +CREATE FUNCTION functest_sri1() RETURNS SETOF int +LANGUAGE SQL +STABLE +AS ' + VALUES (1), (2), (3); +'; + +SELECT * FROM functest_sri1(); +EXPLAIN (verbose, costs off) SELECT * FROM functest_sri1(); + +CREATE FUNCTION functest_sri2() RETURNS SETOF int +LANGUAGE SQL +STABLE +BEGIN ATOMIC + VALUES (1), (2), (3); +END; + +SELECT * FROM functest_sri2(); +EXPLAIN (verbose, costs off) SELECT * FROM functest_sri2(); + + -- Check behavior of VOID-returning SQL functions CREATE FUNCTION voidtest1(a int) RETURNS VOID LANGUAGE SQL AS diff --git a/src/test/regress/sql/create_procedure.sql b/src/test/regress/sql/create_procedure.sql index 2ef1c82ceabe2..76f781c0b90ef 100644 --- a/src/test/regress/sql/create_procedure.sql +++ b/src/test/regress/sql/create_procedure.sql @@ -28,6 +28,28 @@ CALL ptest1(substring(random()::numeric(20,15)::text, 1, 1)); -- ok, volatile a SELECT * FROM cp_test ORDER BY b COLLATE "C"; +-- SQL-standard body +CREATE PROCEDURE ptest1s(x text) +LANGUAGE SQL +BEGIN ATOMIC + INSERT INTO cp_test VALUES (1, x); +END; + +\df ptest1s +SELECT pg_get_functiondef('ptest1s'::regproc); + +CALL ptest1s('b'); + +SELECT * FROM cp_test ORDER BY b COLLATE "C"; + +-- utitlity functions currently not supported here +CREATE PROCEDURE ptestx() +LANGUAGE SQL +BEGIN ATOMIC + CREATE TABLE x (a int); +END; + + CREATE PROCEDURE ptest2() LANGUAGE SQL AS $$ @@ -112,6 +134,16 @@ $$; CALL ptest7(least('a', 'b'), 'a'); +-- empty body +CREATE PROCEDURE ptest8(x text) +BEGIN ATOMIC +END; + +\df ptest8 +SELECT pg_get_functiondef('ptest8'::regproc); +CALL ptest8(''); + + -- OUT parameters CREATE PROCEDURE ptest9(OUT a int) @@ -170,6 +202,7 @@ DROP ROUTINE cp_testfunc1(int); -- cleanup DROP PROCEDURE ptest1; +DROP PROCEDURE ptest1s; DROP PROCEDURE ptest2; DROP TABLE cp_test; From c7578fa64019f27edc31261ea49066a4b2569a6c Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 8 Apr 2021 06:55:00 +0900 Subject: [PATCH 032/671] Fix some failures with connection tests on Windows hosts The truncation of the log file, that this set of tests relies on to make sure that a connection attempt matches with its expected backend log pattern, fails, as reported by buildfarm member fairywren. Instead of a truncation, do a rotation of the log file and restart the node. This will ensure that the connection attempt data is unique for each test. Discussion: https://postgr.es/m/YG05nCI8x8B+Ad3G@paquier.xyz --- src/test/perl/PostgresNode.pm | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index 598906ad64999..e26b2b3f30e3b 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -1920,7 +1920,17 @@ sub connect_ok if (@log_like or @log_unlike) { # Don't let previous log entries match for this connection. - truncate $self->logfile, 0; + # On Windows, the truncation would not work, so rotate the log + # file before restarting the server afresh. + if ($TestLib::windows_os) + { + $self->rotate_logfile; + $self->restart; + } + else + { + truncate $self->logfile, 0; + } } # Never prompt for a password, any callers of this routine should @@ -1994,7 +2004,17 @@ sub connect_fails if (@log_like or @log_unlike) { # Don't let previous log entries match for this connection. - truncate $self->logfile, 0; + # On Windows, the truncation would not work, so rotate the log + # file before restarting the server afresh. + if ($TestLib::windows_os) + { + $self->rotate_logfile; + $self->restart; + } + else + { + truncate $self->logfile, 0; + } } # Never prompt for a password, any callers of this routine should From bc70728693bc2d28db7125e7a24d78ad7612f58c Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 7 Apr 2021 18:14:36 -0400 Subject: [PATCH 033/671] Fix regression test failure caused by commit 4f0b0966c8 The query originally used was too simple, cause explain_filter() to be unable to remove JIT output text. Reported-by: Tom Lane Author: Julien Rouhaud --- src/test/regress/expected/explain.out | 10 +++++----- src/test/regress/sql/explain.sql | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/regress/expected/explain.out b/src/test/regress/expected/explain.out index 4c578d4f5e233..cda28098baaba 100644 --- a/src/test/regress/expected/explain.out +++ b/src/test/regress/expected/explain.out @@ -478,11 +478,11 @@ select jsonb_pretty( rollback; set compute_query_id = on; -select explain_filter('explain (verbose) select 1'); - explain_filter ----------------------------------------- - Result (cost=N.N..N.N rows=N width=N) - Output: N +select explain_filter('explain (verbose) select * from int8_tbl i8'); + explain_filter +---------------------------------------------------------------- + Seq Scan on public.int8_tbl i8 (cost=N.N..N.N rows=N width=N) + Output: q1, q2 Query Identifier: N (3 rows) diff --git a/src/test/regress/sql/explain.sql b/src/test/regress/sql/explain.sql index 468caf403742c..3f9ae9843a266 100644 --- a/src/test/regress/sql/explain.sql +++ b/src/test/regress/sql/explain.sql @@ -105,4 +105,4 @@ select jsonb_pretty( rollback; set compute_query_id = on; -select explain_filter('explain (verbose) select 1'); +select explain_filter('explain (verbose) select * from int8_tbl i8'); From 5100010ee4d5c8ef46619dbd1d17090c627e6d0a Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Wed, 7 Apr 2021 16:14:54 -0700 Subject: [PATCH 034/671] Teach VACUUM to bypass unnecessary index vacuuming. VACUUM has never needed to call ambulkdelete() for each index in cases where there are precisely zero TIDs in its dead_tuples array by the end of its first pass over the heap (also its only pass over the heap in this scenario). Index vacuuming is simply not required when this happens. Index cleanup will still go ahead, but in practice most calls to amvacuumcleanup() are usually no-ops when there were zero preceding ambulkdelete() calls. In short, VACUUM has generally managed to avoid index scans when there were clearly no index tuples to delete from indexes. But cases with _close to_ no index tuples to delete were another matter -- a round of ambulkdelete() calls took place (one per index), each of which performed a full index scan. VACUUM now behaves just as if there were zero index tuples to delete in cases where there are in fact "virtually zero" such tuples. That is, it can now bypass index vacuuming and heap vacuuming as an optimization (though not index cleanup). Whether or not VACUUM bypasses indexes is determined dynamically, based on the just-observed number of heap pages in the table that have one or more LP_DEAD items (LP_DEAD items in heap pages have a 1:1 correspondence with index tuples that still need to be deleted from each index in the worst case). We only skip index vacuuming when 2% or less of the table's pages have one or more LP_DEAD items -- bypassing index vacuuming as an optimization must not noticeably impede setting bits in the visibility map. As a further condition, the dead_tuples array (i.e. VACUUM's array of LP_DEAD item TIDs) must not exceed 32MB at the point that the first pass over the heap finishes, which is also when the decision to bypass is made. (The VACUUM must also have been able to fit all TIDs in its maintenance_work_mem-bound dead_tuples space, though with a default maintenance_work_mem setting it can't matter.) This avoids surprising jumps in the duration and overhead of routine vacuuming with workloads where successive VACUUM operations consistently have almost zero dead index tuples. The number of LP_DEAD items may well accumulate over multiple VACUUM operations, before finally the threshold is crossed and VACUUM performs conventional index vacuuming. Even then, the optimization will have avoided a great deal of largely unnecessary index vacuuming. In the future we may teach VACUUM to skip index vacuuming on a per-index basis, using a much more sophisticated approach. For now we only consider the extreme cases, where we can be quite confident that index vacuuming just isn't worth it using simple heuristics. Also log information about how many heap pages have one or more LP_DEAD items when autovacuum logging is enabled. Author: Masahiko Sawada Author: Peter Geoghegan Discussion: https://postgr.es/m/CAD21AoD0SkE11fMw4jD4RENAwBMcw1wasVnwpJVw3tVqPOQgAw@mail.gmail.com Discussion: https://postgr.es/m/CAH2-WzmkebqPd4MVGuPTOS9bMFvp9MDs5cRTCOsv1rQJ3jCbXw@mail.gmail.com --- src/backend/access/heap/vacuumlazy.c | 138 +++++++++++++++++++++++++-- 1 file changed, 128 insertions(+), 10 deletions(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 00832b72dc729..f592e71364dc0 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -103,6 +103,12 @@ #define VACUUM_TRUNCATE_LOCK_WAIT_INTERVAL 50 /* ms */ #define VACUUM_TRUNCATE_LOCK_TIMEOUT 5000 /* ms */ +/* + * Threshold that controls whether we bypass index vacuuming and heap + * vacuuming as an optimization + */ +#define BYPASS_THRESHOLD_PAGES 0.02 /* i.e. 2% of rel_pages */ + /* * When a table is small (i.e. smaller than this), save cycles by avoiding * repeated failsafe checks @@ -401,7 +407,7 @@ static void lazy_scan_prune(LVRelState *vacrel, Buffer buf, BlockNumber blkno, Page page, GlobalVisState *vistest, LVPagePruneState *prunestate); -static void lazy_vacuum(LVRelState *vacrel); +static void lazy_vacuum(LVRelState *vacrel, bool onecall); static bool lazy_vacuum_all_indexes(LVRelState *vacrel); static void lazy_vacuum_heap_rel(LVRelState *vacrel); static int lazy_vacuum_heap_page(LVRelState *vacrel, BlockNumber blkno, @@ -760,6 +766,31 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, (long long) VacuumPageHit, (long long) VacuumPageMiss, (long long) VacuumPageDirty); + if (vacrel->rel_pages > 0) + { + if (vacrel->do_index_vacuuming) + { + msgfmt = _(" %u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n"); + + if (vacrel->nindexes == 0 || vacrel->num_index_scans == 0) + appendStringInfo(&buf, _("index scan not needed:")); + else + appendStringInfo(&buf, _("index scan needed:")); + } + else + { + msgfmt = _(" %u pages from table (%.2f%% of total) have %lld dead item identifiers\n"); + + if (!vacrel->do_failsafe) + appendStringInfo(&buf, _("index scan bypassed:")); + else + appendStringInfo(&buf, _("index scan bypassed by failsafe:")); + } + appendStringInfo(&buf, msgfmt, + vacrel->lpdead_item_pages, + 100.0 * vacrel->lpdead_item_pages / vacrel->rel_pages, + (long long) vacrel->lpdead_items); + } for (int i = 0; i < vacrel->nindexes; i++) { IndexBulkDeleteResult *istat = vacrel->indstats[i]; @@ -850,7 +881,8 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) next_fsm_block_to_vacuum; PGRUsage ru0; Buffer vmbuffer = InvalidBuffer; - bool skipping_blocks; + bool skipping_blocks, + have_vacuumed_indexes = false; StringInfoData buf; const int initprog_index[] = { PROGRESS_VACUUM_PHASE, @@ -1108,7 +1140,8 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) } /* Remove the collected garbage tuples from table and indexes */ - lazy_vacuum(vacrel); + lazy_vacuum(vacrel, false); + have_vacuumed_indexes = true; /* * Vacuum the Free Space Map to make newly-freed space visible on @@ -1475,9 +1508,10 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) * Note: It's not in fact 100% certain that we really will call * lazy_vacuum_heap_rel() -- lazy_vacuum() might yet opt to skip * index vacuuming (and so must skip heap vacuuming). This is - * deemed okay because it only happens in emergencies. (Besides, - * we start recording free space in the FSM once index vacuuming - * has been abandoned.) + * deemed okay because it only happens in emergencies, or when + * there is very little free space anyway. (Besides, we start + * recording free space in the FSM once index vacuuming has been + * abandoned.) * * Note: The one-pass (no indexes) case is only supposed to make * it this far when there were no LP_DEAD items during pruning. @@ -1522,9 +1556,8 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) } /* If any tuples need to be deleted, perform final vacuum cycle */ - /* XXX put a threshold on min number of tuples here? */ if (dead_tuples->num_tuples > 0) - lazy_vacuum(vacrel); + lazy_vacuum(vacrel, !have_vacuumed_indexes); /* * Vacuum the remainder of the Free Space Map. We must do this whether or @@ -1555,6 +1588,16 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) * If table has no indexes and at least one heap pages was vacuumed, make * log report that lazy_vacuum_heap_rel would've made had there been * indexes (having indexes implies using the two pass strategy). + * + * We deliberately don't do this in the case where there are indexes but + * index vacuuming was bypassed. We make a similar report at the point + * that index vacuuming is bypassed, but that's actually quite different + * in one important sense: it shows information about work we _haven't_ + * done. + * + * log_autovacuum output does things differently; it consistently presents + * information about LP_DEAD items for the VACUUM as a whole. We always + * report on each round of index and heap vacuuming separately, though. */ if (vacrel->nindexes == 0 && vacrel->lpdead_item_pages > 0) ereport(elevel, @@ -1983,14 +2026,21 @@ lazy_scan_prune(LVRelState *vacrel, /* * Remove the collected garbage tuples from the table and its indexes. * + * We may choose to bypass index vacuuming at this point, though only when the + * ongoing VACUUM operation will definitely only have one index scan/round of + * index vacuuming. Caller indicates whether or not this is such a VACUUM + * operation using 'onecall' argument. + * * In rare emergencies, the ongoing VACUUM operation can be made to skip both * index vacuuming and index cleanup at the point we're called. This avoids * having the whole system refuse to allocate further XIDs/MultiXactIds due to * wraparound. */ static void -lazy_vacuum(LVRelState *vacrel) +lazy_vacuum(LVRelState *vacrel, bool onecall) { + bool do_bypass_optimization; + /* Should not end up here with no indexes */ Assert(vacrel->nindexes > 0); Assert(!IsParallelWorker()); @@ -2003,7 +2053,75 @@ lazy_vacuum(LVRelState *vacrel) return; } - if (lazy_vacuum_all_indexes(vacrel)) + /* + * Consider bypassing index vacuuming (and heap vacuuming) entirely. + * + * We currently only do this in cases where the number of LP_DEAD items + * for the entire VACUUM operation is close to zero. This avoids sharp + * discontinuities in the duration and overhead of successive VACUUM + * operations that run against the same table with a fixed workload. + * Ideally, successive VACUUM operations will behave as if there are + * exactly zero LP_DEAD items in cases where there are close to zero. + * + * This is likely to be helpful with a table that is continually affected + * by UPDATEs that can mostly apply the HOT optimization, but occasionally + * have small aberrations that lead to just a few heap pages retaining + * only one or two LP_DEAD items. This is pretty common; even when the + * DBA goes out of their way to make UPDATEs use HOT, it is practically + * impossible to predict whether HOT will be applied in 100% of cases. + * It's far easier to ensure that 99%+ of all UPDATEs against a table use + * HOT through careful tuning. + */ + do_bypass_optimization = false; + if (onecall && vacrel->rel_pages > 0) + { + BlockNumber threshold; + + Assert(vacrel->num_index_scans == 0); + Assert(vacrel->lpdead_items == vacrel->dead_tuples->num_tuples); + Assert(vacrel->do_index_vacuuming); + Assert(vacrel->do_index_cleanup); + + /* + * This crossover point at which we'll start to do index vacuuming is + * expressed as a percentage of the total number of heap pages in the + * table that are known to have at least one LP_DEAD item. This is + * much more important than the total number of LP_DEAD items, since + * it's a proxy for the number of heap pages whose visibility map bits + * cannot be set on account of bypassing index and heap vacuuming. + * + * We apply one further precautionary test: the space currently used + * to store the TIDs (TIDs that now all point to LP_DEAD items) must + * not exceed 32MB. This limits the risk that we will bypass index + * vacuuming again and again until eventually there is a VACUUM whose + * dead_tuples space is not CPU cache resident. + */ + threshold = (double) vacrel->rel_pages * BYPASS_THRESHOLD_PAGES; + do_bypass_optimization = + (vacrel->lpdead_item_pages < threshold && + vacrel->lpdead_items < MAXDEADTUPLES(32L * 1024L * 1024L)); + } + + if (do_bypass_optimization) + { + /* + * There are almost zero TIDs. Behave as if there were precisely + * zero: bypass index vacuuming, but do index cleanup. + * + * We expect that the ongoing VACUUM operation will finish very + * quickly, so there is no point in considering speeding up as a + * failsafe against wraparound failure. (Index cleanup is expected to + * finish very quickly in cases where there were no ambulkdelete() + * calls.) + */ + vacrel->do_index_vacuuming = false; + ereport(elevel, + (errmsg("\"%s\": index scan bypassed: %u pages from table (%.2f%% of total) have %lld dead item identifiers", + vacrel->relname, vacrel->rel_pages, + 100.0 * vacrel->lpdead_item_pages / vacrel->rel_pages, + (long long) vacrel->lpdead_items))); + } + else if (lazy_vacuum_all_indexes(vacrel)) { /* * We successfully completed a round of index vacuuming. Do related From f57a2f5e03054ade221e554c70e628e1ffae1b66 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 7 Apr 2021 22:30:30 -0400 Subject: [PATCH 035/671] Add csvlog output for the new query_id value This also adjusts the printf format for query id used by log_line_prefix (%Q). Reported-by: Justin Pryzby Discussion: https://postgr.es/m/20210408005402.GG24239@momjian.us Author: Julien Rouhaud, Bruce Momjian --- doc/src/sgml/config.sgml | 4 +++- doc/src/sgml/file-fdw.sgml | 3 ++- src/backend/utils/error/elog.c | 12 ++++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 963824d0506c1..ea5cf3a2dc0eb 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -7310,7 +7310,8 @@ log_line_prefix = '%m [%p] %q%u@%d/%a ' character count of the error position therein, location of the error in the PostgreSQL source code (if log_error_verbosity is set to verbose), - application name, backend type, and process ID of parallel group leader. + application name, backend type, process ID of parallel group leader, + and query id. Here is a sample table definition for storing CSV-format log output: @@ -7341,6 +7342,7 @@ CREATE TABLE postgres_log application_name text, backend_type text, leader_pid integer, + query_id bigint, PRIMARY KEY (session_id, session_line_num) ); diff --git a/doc/src/sgml/file-fdw.sgml b/doc/src/sgml/file-fdw.sgml index 2e21806f48735..5b98782064f16 100644 --- a/doc/src/sgml/file-fdw.sgml +++ b/doc/src/sgml/file-fdw.sgml @@ -266,7 +266,8 @@ CREATE FOREIGN TABLE pglog ( location text, application_name text, backend_type text, - leader_pid integer + leader_pid integer, + query_id bigint ) SERVER pglog OPTIONS ( filename 'log/pglog.csv', format 'csv' ); diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 1cf71a649b36b..a1ebe06d5b061 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -2716,11 +2716,11 @@ log_line_prefix(StringInfo buf, ErrorData *edata) break; case 'Q': if (padding != 0) - appendStringInfo(buf, "%*ld", padding, - pgstat_get_my_queryid()); + appendStringInfo(buf, "%*lld", padding, + (long long) pgstat_get_my_queryid()); else - appendStringInfo(buf, "%ld", - pgstat_get_my_queryid()); + appendStringInfo(buf, "%lld", + (long long) pgstat_get_my_queryid()); break; default: /* format error - ignore it */ @@ -2964,6 +2964,10 @@ write_csvlog(ErrorData *edata) if (leader && leader->pid != MyProcPid) appendStringInfo(&buf, "%d", leader->pid); } + appendStringInfoChar(&buf, ','); + + /* query id */ + appendStringInfo(&buf, "%lld", (long long) pgstat_get_my_queryid()); appendStringInfoChar(&buf, '\n'); From a3027e1e7f3d3a107ecd72d3b4d6333ea2aab6a5 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 7 Apr 2021 23:02:16 -0400 Subject: [PATCH 036/671] Allow psql's \df and \do commands to specify argument types. When dealing with overloaded function or operator names, having to look through a long list of matches is tedious. Let's extend these commands to allow specification of (input) argument types to let such results be trimmed down. Each additional argument is treated the same as the pattern argument of \dT and matched against the appropriate argument's type name. While at it, fix \dT (and these new options) to recognize the usual notation of "foo[]" for "the array type over foo", and to handle the special abbreviations allowed by the backend grammar, such as "int" for "integer". Greg Sabino Mullane, revised rather significantly by me Discussion: https://postgr.es/m/CAKAnmmLF9Hhu02N+s7uAyLc5J1xZReg72HQUoiKhNiJV3_jACQ@mail.gmail.com --- doc/src/sgml/ref/psql-ref.sgml | 40 +++++-- src/bin/psql/command.c | 48 +++++++- src/bin/psql/describe.c | 181 ++++++++++++++++++++++++++--- src/bin/psql/describe.h | 8 +- src/bin/psql/help.c | 7 +- src/fe_utils/string_utils.c | 6 + src/test/regress/expected/psql.out | 101 ++++++++++++++++ src/test/regress/sql/psql.sql | 13 +++ 8 files changed, 374 insertions(+), 30 deletions(-) diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index c1451c16727eb..ddb7043362517 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1567,7 +1567,7 @@ testdb=> - \df[anptwS+] [ pattern ] + \df[anptwS+] [ pattern [ arg_pattern ... ] ] @@ -1580,6 +1580,11 @@ testdb=> If pattern is specified, only functions whose names match the pattern are shown. + Any additional arguments are type-name patterns, which are matched + to the type names of the first, second, and so on arguments of the + function. (Matching functions can have more arguments than what + you specify. To prevent that, write a dash - as + the last arg_pattern.) By default, only user-created objects are shown; supply a pattern or the S modifier to include system objects. @@ -1589,14 +1594,6 @@ testdb=> language, source code and description. - - - To look up functions taking arguments or returning values of a specific - data type, use your pager's search capability to scroll through the - \df output. - - - @@ -1721,12 +1718,19 @@ testdb=> - \do[S+] [ pattern ] + \do[S+] [ pattern [ arg_pattern [ arg_pattern ] ] ] Lists operators with their operand and result types. If pattern is specified, only operators whose names match the pattern are listed. + If one arg_pattern is + specified, only prefix operators whose right argument's type name + matches that pattern are listed. + If two arg_patterns + are specified, only binary operators whose argument type names match + those patterns are listed. (Alternatively, write - + for the unused argument of a unary operator.) By default, only user-created objects are shown; supply a pattern or the S modifier to include system objects. @@ -4986,6 +4990,22 @@ second | four + + Here is an example of using the \df command to + find only functions with names matching int*pl + and whose second argument is of type bigint: + +testdb=> \df int*pl * bigint + List of functions + Schema | Name | Result data type | Argument data types | Type +------------+---------+------------------+---------------------+------ + pg_catalog | int28pl | bigint | smallint, bigint | func + pg_catalog | int48pl | bigint | integer, bigint | func + pg_catalog | int8pl | bigint | bigint, bigint | func +(3 rows) + + + When suitable, query results can be shown in a crosstab representation with the \crosstabview command: diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index e04ccc5b628f5..543401c6d6a79 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -72,6 +72,9 @@ static backslashResult exec_command_copyright(PsqlScanState scan_state, bool act static backslashResult exec_command_crosstabview(PsqlScanState scan_state, bool active_branch); static backslashResult exec_command_d(PsqlScanState scan_state, bool active_branch, const char *cmd); +static bool exec_command_dfo(PsqlScanState scan_state, const char *cmd, + const char *pattern, + bool show_verbose, bool show_system); static backslashResult exec_command_edit(PsqlScanState scan_state, bool active_branch, PQExpBuffer query_buf, PQExpBuffer previous_buf); static backslashResult exec_command_ef_ev(PsqlScanState scan_state, bool active_branch, @@ -790,7 +793,8 @@ exec_command_d(PsqlScanState scan_state, bool active_branch, const char *cmd) case 'p': case 't': case 'w': - success = describeFunctions(&cmd[2], pattern, show_verbose, show_system); + success = exec_command_dfo(scan_state, cmd, pattern, + show_verbose, show_system); break; default: status = PSQL_CMD_UNKNOWN; @@ -811,7 +815,8 @@ exec_command_d(PsqlScanState scan_state, bool active_branch, const char *cmd) success = listSchemas(pattern, show_verbose, show_system); break; case 'o': - success = describeOperators(pattern, show_verbose, show_system); + success = exec_command_dfo(scan_state, cmd, pattern, + show_verbose, show_system); break; case 'O': success = listCollations(pattern, show_verbose, show_system); @@ -951,6 +956,45 @@ exec_command_d(PsqlScanState scan_state, bool active_branch, const char *cmd) return status; } +/* \df and \do; messy enough to split out of exec_command_d */ +static bool +exec_command_dfo(PsqlScanState scan_state, const char *cmd, + const char *pattern, + bool show_verbose, bool show_system) +{ + bool success; + char *arg_patterns[FUNC_MAX_ARGS]; + int num_arg_patterns = 0; + + /* Collect argument-type patterns too */ + if (pattern) /* otherwise it was just \df or \do */ + { + char *ap; + + while ((ap = psql_scan_slash_option(scan_state, + OT_NORMAL, NULL, true)) != NULL) + { + arg_patterns[num_arg_patterns++] = ap; + if (num_arg_patterns >= FUNC_MAX_ARGS) + break; /* protect limited-size array */ + } + } + + if (cmd[1] == 'f') + success = describeFunctions(&cmd[2], pattern, + arg_patterns, num_arg_patterns, + show_verbose, show_system); + else + success = describeOperators(pattern, + arg_patterns, num_arg_patterns, + show_verbose, show_system); + + while (--num_arg_patterns >= 0) + free(arg_patterns[num_arg_patterns]); + + return success; +} + /* * \e or \edit -- edit the current query buffer, or edit a file and * make it the query buffer diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 52f7b2ce78c2f..fdc2a89085a0c 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -28,6 +28,7 @@ #include "settings.h" #include "variables.h" +static const char *map_typename_pattern(const char *pattern); static bool describeOneTableDetails(const char *schemaname, const char *relationname, const char *oid, @@ -312,7 +313,9 @@ describeTablespaces(const char *pattern, bool verbose) * and you can mix and match these in any order. */ bool -describeFunctions(const char *functypes, const char *pattern, bool verbose, bool showSystem) +describeFunctions(const char *functypes, const char *func_pattern, + char **arg_patterns, int num_arg_patterns, + bool verbose, bool showSystem) { bool showAggregate = strchr(functypes, 'a') != NULL; bool showNormal = strchr(functypes, 'n') != NULL; @@ -524,6 +527,14 @@ describeFunctions(const char *functypes, const char *pattern, bool verbose, bool "\nFROM pg_catalog.pg_proc p" "\n LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace\n"); + for (int i = 0; i < num_arg_patterns; i++) + { + appendPQExpBuffer(&buf, + " LEFT JOIN pg_catalog.pg_type t%d ON t%d.oid = p.proargtypes[%d]\n" + " LEFT JOIN pg_catalog.pg_namespace nt%d ON nt%d.oid = t%d.typnamespace\n", + i, i, i, i, i, i); + } + if (verbose) appendPQExpBufferStr(&buf, " LEFT JOIN pg_catalog.pg_language l ON l.oid = p.prolang\n"); @@ -629,11 +640,43 @@ describeFunctions(const char *functypes, const char *pattern, bool verbose, bool appendPQExpBufferStr(&buf, " )\n"); } - processSQLNamePattern(pset.db, &buf, pattern, have_where, false, + processSQLNamePattern(pset.db, &buf, func_pattern, have_where, false, "n.nspname", "p.proname", NULL, "pg_catalog.pg_function_is_visible(p.oid)"); - if (!showSystem && !pattern) + for (int i = 0; i < num_arg_patterns; i++) + { + if (strcmp(arg_patterns[i], "-") != 0) + { + /* + * Match type-name patterns against either internal or external + * name, like \dT. Unlike \dT, there seems no reason to + * discriminate against arrays or composite types. + */ + char nspname[64]; + char typname[64]; + char ft[64]; + char tiv[64]; + + snprintf(nspname, sizeof(nspname), "nt%d.nspname", i); + snprintf(typname, sizeof(typname), "t%d.typname", i); + snprintf(ft, sizeof(ft), + "pg_catalog.format_type(t%d.oid, NULL)", i); + snprintf(tiv, sizeof(tiv), + "pg_catalog.pg_type_is_visible(t%d.oid)", i); + processSQLNamePattern(pset.db, &buf, + map_typename_pattern(arg_patterns[i]), + true, false, + nspname, typname, ft, tiv); + } + else + { + /* "-" pattern specifies no such parameter */ + appendPQExpBuffer(&buf, " AND t%d.typname IS NULL\n", i); + } + } + + if (!showSystem && !func_pattern) appendPQExpBufferStr(&buf, " AND n.nspname <> 'pg_catalog'\n" " AND n.nspname <> 'information_schema'\n"); @@ -746,20 +789,24 @@ describeTypes(const char *pattern, bool verbose, bool showSystem) "WHERE c.oid = t.typrelid))\n"); /* - * do not include array types (before 8.3 we have to use the assumption - * that their names start with underscore) + * do not include array types unless the pattern contains [] (before 8.3 + * we have to use the assumption that their names start with underscore) */ - if (pset.sversion >= 80300) - appendPQExpBufferStr(&buf, " AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid)\n"); - else - appendPQExpBufferStr(&buf, " AND t.typname !~ '^_'\n"); + if (pattern == NULL || strstr(pattern, "[]") == NULL) + { + if (pset.sversion >= 80300) + appendPQExpBufferStr(&buf, " AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid)\n"); + else + appendPQExpBufferStr(&buf, " AND t.typname !~ '^_'\n"); + } if (!showSystem && !pattern) appendPQExpBufferStr(&buf, " AND n.nspname <> 'pg_catalog'\n" " AND n.nspname <> 'information_schema'\n"); /* Match name pattern against either internal or external name */ - processSQLNamePattern(pset.db, &buf, pattern, true, false, + processSQLNamePattern(pset.db, &buf, map_typename_pattern(pattern), + true, false, "n.nspname", "t.typname", "pg_catalog.format_type(t.oid, NULL)", "pg_catalog.pg_type_is_visible(t.oid)"); @@ -781,13 +828,69 @@ describeTypes(const char *pattern, bool verbose, bool showSystem) return true; } +/* + * Map some variant type names accepted by the backend grammar into + * canonical type names. + * + * Helper for \dT and other functions that take typename patterns. + * This doesn't completely mask the fact that these names are special; + * for example, a pattern of "dec*" won't magically match "numeric". + * But it goes a long way to reduce the surprise factor. + */ +static const char * +map_typename_pattern(const char *pattern) +{ + static const char *const typename_map[] = { + /* + * These names are accepted by gram.y, although they are neither the + * "real" name seen in pg_type nor the canonical name printed by + * format_type(). + */ + "decimal", "numeric", + "float", "double precision", + "int", "integer", + + /* + * We also have to map the array names for cases where the canonical + * name is different from what pg_type says. + */ + "bool[]", "boolean[]", + "decimal[]", "numeric[]", + "float[]", "double precision[]", + "float4[]", "real[]", + "float8[]", "double precision[]", + "int[]", "integer[]", + "int2[]", "smallint[]", + "int4[]", "integer[]", + "int8[]", "bigint[]", + "time[]", "time without time zone[]", + "timetz[]", "time with time zone[]", + "timestamp[]", "timestamp without time zone[]", + "timestamptz[]", "timestamp with time zone[]", + "varbit[]", "bit varying[]", + "varchar[]", "character varying[]", + NULL + }; + + if (pattern == NULL) + return NULL; + for (int i = 0; typename_map[i] != NULL; i += 2) + { + if (pg_strcasecmp(pattern, typename_map[i]) == 0) + return typename_map[i + 1]; + } + return pattern; +} + /* * \do * Describe operators */ bool -describeOperators(const char *pattern, bool verbose, bool showSystem) +describeOperators(const char *oper_pattern, + char **arg_patterns, int num_arg_patterns, + bool verbose, bool showSystem) { PQExpBufferData buf; PGresult *res; @@ -836,14 +939,66 @@ describeOperators(const char *pattern, bool verbose, bool showSystem) " LEFT JOIN pg_catalog.pg_namespace n ON n.oid = o.oprnamespace\n", gettext_noop("Description")); - if (!showSystem && !pattern) + if (num_arg_patterns >= 2) + { + num_arg_patterns = 2; /* ignore any additional arguments */ + appendPQExpBufferStr(&buf, + " LEFT JOIN pg_catalog.pg_type t0 ON t0.oid = o.oprleft\n" + " LEFT JOIN pg_catalog.pg_namespace nt0 ON nt0.oid = t0.typnamespace\n" + " LEFT JOIN pg_catalog.pg_type t1 ON t1.oid = o.oprright\n" + " LEFT JOIN pg_catalog.pg_namespace nt1 ON nt1.oid = t1.typnamespace\n"); + } + else if (num_arg_patterns == 1) + { + appendPQExpBufferStr(&buf, + " LEFT JOIN pg_catalog.pg_type t0 ON t0.oid = o.oprright\n" + " LEFT JOIN pg_catalog.pg_namespace nt0 ON nt0.oid = t0.typnamespace\n"); + } + + if (!showSystem && !oper_pattern) appendPQExpBufferStr(&buf, "WHERE n.nspname <> 'pg_catalog'\n" " AND n.nspname <> 'information_schema'\n"); - processSQLNamePattern(pset.db, &buf, pattern, !showSystem && !pattern, true, + processSQLNamePattern(pset.db, &buf, oper_pattern, + !showSystem && !oper_pattern, true, "n.nspname", "o.oprname", NULL, "pg_catalog.pg_operator_is_visible(o.oid)"); + if (num_arg_patterns == 1) + appendPQExpBufferStr(&buf, " AND o.oprleft = 0\n"); + + for (int i = 0; i < num_arg_patterns; i++) + { + if (strcmp(arg_patterns[i], "-") != 0) + { + /* + * Match type-name patterns against either internal or external + * name, like \dT. Unlike \dT, there seems no reason to + * discriminate against arrays or composite types. + */ + char nspname[64]; + char typname[64]; + char ft[64]; + char tiv[64]; + + snprintf(nspname, sizeof(nspname), "nt%d.nspname", i); + snprintf(typname, sizeof(typname), "t%d.typname", i); + snprintf(ft, sizeof(ft), + "pg_catalog.format_type(t%d.oid, NULL)", i); + snprintf(tiv, sizeof(tiv), + "pg_catalog.pg_type_is_visible(t%d.oid)", i); + processSQLNamePattern(pset.db, &buf, + map_typename_pattern(arg_patterns[i]), + true, false, + nspname, typname, ft, tiv); + } + else + { + /* "-" pattern specifies no such parameter */ + appendPQExpBuffer(&buf, " AND t%d.typname IS NULL\n", i); + } + } + appendPQExpBufferStr(&buf, "ORDER BY 1, 2, 3, 4;"); res = PSQLexec(buf.data); diff --git a/src/bin/psql/describe.h b/src/bin/psql/describe.h index 39856a0c7e8f0..71b320f1fc692 100644 --- a/src/bin/psql/describe.h +++ b/src/bin/psql/describe.h @@ -19,13 +19,17 @@ extern bool describeAccessMethods(const char *pattern, bool verbose); extern bool describeTablespaces(const char *pattern, bool verbose); /* \df, \dfa, \dfn, \dft, \dfw, etc. */ -extern bool describeFunctions(const char *functypes, const char *pattern, bool verbose, bool showSystem); +extern bool describeFunctions(const char *functypes, const char *func_pattern, + char **arg_patterns, int num_arg_patterns, + bool verbose, bool showSystem); /* \dT */ extern bool describeTypes(const char *pattern, bool verbose, bool showSystem); /* \do */ -extern bool describeOperators(const char *pattern, bool verbose, bool showSystem); +extern bool describeOperators(const char *oper_pattern, + char **arg_patterns, int num_arg_patterns, + bool verbose, bool showSystem); /* \du, \dg */ extern bool describeRoles(const char *pattern, bool verbose, bool showSystem); diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index ac9a89a889ba8..36501d5e2b99d 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -166,7 +166,7 @@ slashUsage(unsigned short int pager) * Use "psql --help=commands | wc" to count correctly. It's okay to count * the USE_READLINE line even in builds without that. */ - output = PageOutput(133, pager ? &(pset.popt.topt) : NULL); + output = PageOutput(135, pager ? &(pset.popt.topt) : NULL); fprintf(output, _("General\n")); fprintf(output, _(" \\copyright show PostgreSQL usage and distribution terms\n")); @@ -240,7 +240,8 @@ slashUsage(unsigned short int pager) fprintf(output, _(" \\des[+] [PATTERN] list foreign servers\n")); fprintf(output, _(" \\deu[+] [PATTERN] list user mappings\n")); fprintf(output, _(" \\dew[+] [PATTERN] list foreign-data wrappers\n")); - fprintf(output, _(" \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] functions\n")); + fprintf(output, _(" \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n")); + fprintf(output, _(" list [only agg/normal/procedure/trigger/window] functions\n")); fprintf(output, _(" \\dF[+] [PATTERN] list text search configurations\n")); fprintf(output, _(" \\dFd[+] [PATTERN] list text search dictionaries\n")); fprintf(output, _(" \\dFp[+] [PATTERN] list text search parsers\n")); @@ -251,7 +252,7 @@ slashUsage(unsigned short int pager) fprintf(output, _(" \\dL[S+] [PATTERN] list procedural languages\n")); fprintf(output, _(" \\dm[S+] [PATTERN] list materialized views\n")); fprintf(output, _(" \\dn[S+] [PATTERN] list schemas\n")); - fprintf(output, _(" \\do[S] [PATTERN] list operators\n")); + fprintf(output, _(" \\do[S] [OPPTRN [TYPEPTRN [TYPEPTRN]]] list operators\n")); fprintf(output, _(" \\dO[S+] [PATTERN] list collations\n")); fprintf(output, _(" \\dp [PATTERN] list table, view, and sequence access privileges\n")); fprintf(output, _(" \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n")); diff --git a/src/fe_utils/string_utils.c b/src/fe_utils/string_utils.c index 9a1ea9ab98b0b..5b206c7481d79 100644 --- a/src/fe_utils/string_utils.c +++ b/src/fe_utils/string_utils.c @@ -1062,10 +1062,16 @@ patternToSQLRegex(int encoding, PQExpBuffer dbnamebuf, PQExpBuffer schemabuf, * regexp errors. Outside quotes, however, let them pass through * as-is; this lets knowledgeable users build regexp expressions * that are more powerful than shell-style patterns. + * + * As an exception to that, though, always quote "[]", as that's + * much more likely to be an attempt to write an array type name + * than it is to be the start of a regexp bracket expression. */ if ((inquotes || force_escape) && strchr("|*+?()[]{}.^$\\", ch)) appendPQExpBufferChar(curbuf, '\\'); + else if (ch == '[' && cp[1] == ']') + appendPQExpBufferChar(curbuf, '\\'); i = PQmblen(cp, encoding); while (i-- && *cp) { diff --git a/src/test/regress/expected/psql.out b/src/test/regress/expected/psql.out index 9a51940530ab8..672937b2f8872 100644 --- a/src/test/regress/expected/psql.out +++ b/src/test/regress/expected/psql.out @@ -5078,6 +5078,107 @@ List of access methods hash | uuid_ops | uuid | uuid | 2 | uuid_hash_extended (5 rows) +-- check \df, \do with argument specifications +\df *sqrt + List of functions + Schema | Name | Result data type | Argument data types | Type +------------+--------------+------------------+---------------------+------ + pg_catalog | dsqrt | double precision | double precision | func + pg_catalog | numeric_sqrt | numeric | numeric | func + pg_catalog | sqrt | double precision | double precision | func + pg_catalog | sqrt | numeric | numeric | func +(4 rows) + +\df *sqrt num* + List of functions + Schema | Name | Result data type | Argument data types | Type +------------+--------------+------------------+---------------------+------ + pg_catalog | numeric_sqrt | numeric | numeric | func + pg_catalog | sqrt | numeric | numeric | func +(2 rows) + +\df int*pl + List of functions + Schema | Name | Result data type | Argument data types | Type +------------+-------------+------------------+---------------------+------ + pg_catalog | int24pl | integer | smallint, integer | func + pg_catalog | int28pl | bigint | smallint, bigint | func + pg_catalog | int2pl | smallint | smallint, smallint | func + pg_catalog | int42pl | integer | integer, smallint | func + pg_catalog | int48pl | bigint | integer, bigint | func + pg_catalog | int4pl | integer | integer, integer | func + pg_catalog | int82pl | bigint | bigint, smallint | func + pg_catalog | int84pl | bigint | bigint, integer | func + pg_catalog | int8pl | bigint | bigint, bigint | func + pg_catalog | interval_pl | interval | interval, interval | func +(10 rows) + +\df int*pl int4 + List of functions + Schema | Name | Result data type | Argument data types | Type +------------+---------+------------------+---------------------+------ + pg_catalog | int42pl | integer | integer, smallint | func + pg_catalog | int48pl | bigint | integer, bigint | func + pg_catalog | int4pl | integer | integer, integer | func +(3 rows) + +\df int*pl * pg_catalog.int8 + List of functions + Schema | Name | Result data type | Argument data types | Type +------------+---------+------------------+---------------------+------ + pg_catalog | int28pl | bigint | smallint, bigint | func + pg_catalog | int48pl | bigint | integer, bigint | func + pg_catalog | int8pl | bigint | bigint, bigint | func +(3 rows) + +\df acl* aclitem[] + List of functions + Schema | Name | Result data type | Argument data types | Type +------------+-------------+------------------+----------------------------------------------------------------------------------------------------+------ + pg_catalog | aclcontains | boolean | aclitem[], aclitem | func + pg_catalog | aclexplode | SETOF record | acl aclitem[], OUT grantor oid, OUT grantee oid, OUT privilege_type text, OUT is_grantable boolean | func + pg_catalog | aclinsert | aclitem[] | aclitem[], aclitem | func + pg_catalog | aclremove | aclitem[] | aclitem[], aclitem | func +(4 rows) + +\df has_database_privilege oid text + List of functions + Schema | Name | Result data type | Argument data types | Type +------------+------------------------+------------------+---------------------+------ + pg_catalog | has_database_privilege | boolean | oid, text | func + pg_catalog | has_database_privilege | boolean | oid, text, text | func +(2 rows) + +\df has_database_privilege oid text - + List of functions + Schema | Name | Result data type | Argument data types | Type +------------+------------------------+------------------+---------------------+------ + pg_catalog | has_database_privilege | boolean | oid, text | func +(1 row) + +\dfa bit* small* + List of functions + Schema | Name | Result data type | Argument data types | Type +------------+---------+------------------+---------------------+------ + pg_catalog | bit_and | smallint | smallint | agg + pg_catalog | bit_or | smallint | smallint | agg + pg_catalog | bit_xor | smallint | smallint | agg +(3 rows) + +\do - pg_catalog.int4 + List of operators + Schema | Name | Left arg type | Right arg type | Result type | Description +------------+------+---------------+----------------+-------------+------------- + pg_catalog | - | | integer | integer | negate +(1 row) + +\do && anyarray * + List of operators + Schema | Name | Left arg type | Right arg type | Result type | Description +------------+------+---------------+----------------+-------------+------------- + pg_catalog | && | anyarray | anyarray | boolean | overlaps +(1 row) + -- -- combined queries -- diff --git a/src/test/regress/sql/psql.sql b/src/test/regress/sql/psql.sql index bf06bb87b5021..f90a0270fc335 100644 --- a/src/test/regress/sql/psql.sql +++ b/src/test/regress/sql/psql.sql @@ -1229,6 +1229,19 @@ drop role regress_partitioning_role; \dAp+ btree float_ops \dAp * pg_catalog.uuid_ops +-- check \df, \do with argument specifications +\df *sqrt +\df *sqrt num* +\df int*pl +\df int*pl int4 +\df int*pl * pg_catalog.int8 +\df acl* aclitem[] +\df has_database_privilege oid text +\df has_database_privilege oid text - +\dfa bit* small* +\do - pg_catalog.int4 +\do && anyarray * + -- -- combined queries -- From 4131f755d548f74eba56285dc674f1f26e4ed6b4 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 8 Apr 2021 00:46:14 -0400 Subject: [PATCH 037/671] Repair find_inheritance_children with no active snapshot When working on a scan with only a catalog snapshot, we may not have an ActiveSnapshot set. If we were to come across a detached partition, that would cause a crash. Fix by only ignoring detached partitions when there's an active snapshot. --- src/backend/catalog/pg_inherits.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/catalog/pg_inherits.c b/src/backend/catalog/pg_inherits.c index bedee069be224..bb8b2249b1077 100644 --- a/src/backend/catalog/pg_inherits.c +++ b/src/backend/catalog/pg_inherits.c @@ -106,10 +106,13 @@ find_inheritance_children(Oid parentrelId, bool include_detached, * * The reason for this check is that we want to avoid seeing the * partition as alive in RI queries during REPEATABLE READ or - * SERIALIZABLE transactions. + * SERIALIZABLE transactions. (If there's no active snapshot set, + * that means we're not running a user query, so it's OK to always + * include detached partitions in that case.) */ if (((Form_pg_inherits) GETSTRUCT(inheritsTuple))->inhdetachpending && - !include_detached) + !include_detached && + ActiveSnapshotSet()) { TransactionId xmin; Snapshot snap; From 8ffb003591ff02f59d92c36a5791307881863146 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Thu, 8 Apr 2021 10:24:00 +0530 Subject: [PATCH 038/671] Fix typo in jsonfuncs.c. Author: Tatsuro Yamada Discussion: https://postgr.es/m/7c166a60-2808-6b89-9524-feefc6233748@nttcom.co.jp_1 --- src/backend/utils/adt/jsonfuncs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c index 511467280f262..9961d27df475f 100644 --- a/src/backend/utils/adt/jsonfuncs.c +++ b/src/backend/utils/adt/jsonfuncs.c @@ -4882,7 +4882,7 @@ IteratorConcat(JsonbIterator **it1, JsonbIterator **it2, * case if target is an array. The assignment index will not be restricted by * number of elements in the array, and if there are any empty slots between * last element of the array and a new one they will be filled with nulls. If - * the index is negative, it still will be considered an an index from the end + * the index is negative, it still will be considered an index from the end * of the array. Of a part of the path is not present and this part is more * than just one last element, this flag will instruct to create the whole * chain of corresponding objects and insert the value. From b3ee4c503872f3d0a5d6a7cbde48815f555af15b Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Wed, 7 Apr 2021 22:00:01 -0700 Subject: [PATCH 039/671] Cope with NULL query string in ExecInitParallelPlan(). It's far from clear that this is the right approach - but a good portion of the buildfarm has been red for a few hours, on the last day of the CF. And this fixes at least the obvious crash. So let's go with that for now. Discussion: https://postgr.es/m/20210407225806.majgznh4lk34hjvu%40alap3.anarazel.de --- src/backend/executor/execParallel.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/executor/execParallel.c b/src/backend/executor/execParallel.c index c7a2f3147353e..d104a19767cfe 100644 --- a/src/backend/executor/execParallel.c +++ b/src/backend/executor/execParallel.c @@ -647,7 +647,7 @@ ExecInitParallelPlan(PlanState *planstate, EState *estate, shm_toc_estimate_keys(&pcxt->estimator, 1); /* Estimate space for query text. */ - query_len = strlen(estate->es_sourceText); + query_len = estate->es_sourceText ? strlen(estate->es_sourceText) : 0; shm_toc_estimate_chunk(&pcxt->estimator, query_len + 1); shm_toc_estimate_keys(&pcxt->estimator, 1); @@ -742,7 +742,10 @@ ExecInitParallelPlan(PlanState *planstate, EState *estate, /* Store query string */ query_string = shm_toc_allocate(pcxt->toc, query_len + 1); - memcpy(query_string, estate->es_sourceText, query_len + 1); + if (query_len == 0) + query_string[0] = 0; + else + memcpy(query_string, estate->es_sourceText, query_len + 1); shm_toc_insert(pcxt->toc, PARALLEL_KEY_QUERY_TEXT, query_string); /* Store serialized PlannedStmt. */ From 0827e8af70f4653ba17ed773f123a60eadd9f9c9 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 8 Apr 2021 01:19:36 -0400 Subject: [PATCH 040/671] autovacuum: handle analyze for partitioned tables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, autovacuum would completely ignore partitioned tables, which is not good regarding analyze -- failing to analyze those tables means poor plans may be chosen. Make autovacuum aware of those tables by propagating "changes since analyze" counts from the leaf partitions up the partitioning hierarchy. This also introduces necessary reloptions support for partitioned tables (autovacuum_enabled, autovacuum_analyze_scale_factor, autovacuum_analyze_threshold). It's unclear how best to document this aspect. Author: Yuzuko Hosoya Reviewed-by: Kyotaro Horiguchi Reviewed-by: Tomas Vondra Reviewed-by: Álvaro Herrera Discussion: https://postgr.es/m/CAKkQ508_PwVgwJyBY=0Lmkz90j8CmWNPUxgHvCUwGhMrouz6UA@mail.gmail.com --- src/backend/access/common/reloptions.c | 15 ++-- src/backend/catalog/system_views.sql | 4 +- src/backend/commands/analyze.c | 40 ++++++--- src/backend/postmaster/autovacuum.c | 105 +++++++++++++++++++++--- src/backend/postmaster/pgstat.c | 108 ++++++++++++++++++++++--- src/include/pgstat.h | 25 +++++- src/test/regress/expected/rules.out | 4 +- 7 files changed, 257 insertions(+), 44 deletions(-) diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c index d897bbec2ba3a..5554275e6454b 100644 --- a/src/backend/access/common/reloptions.c +++ b/src/backend/access/common/reloptions.c @@ -108,7 +108,7 @@ static relopt_bool boolRelOpts[] = { "autovacuum_enabled", "Enables autovacuum in this relation", - RELOPT_KIND_HEAP | RELOPT_KIND_TOAST, + RELOPT_KIND_HEAP | RELOPT_KIND_TOAST | RELOPT_KIND_PARTITIONED, ShareUpdateExclusiveLock }, true @@ -246,7 +246,7 @@ static relopt_int intRelOpts[] = { "autovacuum_analyze_threshold", "Minimum number of tuple inserts, updates or deletes prior to analyze", - RELOPT_KIND_HEAP, + RELOPT_KIND_HEAP | RELOPT_KIND_PARTITIONED, ShareUpdateExclusiveLock }, -1, 0, INT_MAX @@ -420,7 +420,7 @@ static relopt_real realRelOpts[] = { "autovacuum_analyze_scale_factor", "Number of tuple inserts, updates or deletes prior to analyze as a fraction of reltuples", - RELOPT_KIND_HEAP, + RELOPT_KIND_HEAP | RELOPT_KIND_PARTITIONED, ShareUpdateExclusiveLock }, -1, 0.0, 100.0 @@ -1962,12 +1962,11 @@ bytea * partitioned_table_reloptions(Datum reloptions, bool validate) { /* - * There are no options for partitioned tables yet, but this is able to do - * some validation. + * autovacuum_enabled, autovacuum_analyze_threshold and + * autovacuum_analyze_scale_factor are supported for partitioned tables. */ - return (bytea *) build_reloptions(reloptions, validate, - RELOPT_KIND_PARTITIONED, - 0, NULL, 0); + + return default_reloptions(reloptions, validate, RELOPT_KIND_PARTITIONED); } /* diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 4d6b23278723a..a47e102f36641 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -660,7 +660,7 @@ CREATE VIEW pg_stat_all_tables AS FROM pg_class C LEFT JOIN pg_index I ON C.oid = I.indrelid LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) - WHERE C.relkind IN ('r', 't', 'm') + WHERE C.relkind IN ('r', 't', 'm', 'p') GROUP BY C.oid, N.nspname, C.relname; CREATE VIEW pg_stat_xact_all_tables AS @@ -680,7 +680,7 @@ CREATE VIEW pg_stat_xact_all_tables AS FROM pg_class C LEFT JOIN pg_index I ON C.oid = I.indrelid LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) - WHERE C.relkind IN ('r', 't', 'm') + WHERE C.relkind IN ('r', 't', 'm', 'p') GROUP BY C.oid, N.nspname, C.relname; CREATE VIEW pg_stat_sys_tables AS diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index f84616d3d2c60..5bdaceefd5d57 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -612,8 +612,8 @@ do_analyze_rel(Relation onerel, VacuumParams *params, PROGRESS_ANALYZE_PHASE_FINALIZE_ANALYZE); /* - * Update pages/tuples stats in pg_class, and report ANALYZE to the stats - * collector ... but not if we're doing inherited stats. + * Update pages/tuples stats in pg_class ... but not if we're doing + * inherited stats. * * We assume that VACUUM hasn't set pg_class.reltuples already, even * during a VACUUM ANALYZE. Although VACUUM often updates pg_class, @@ -655,19 +655,35 @@ do_analyze_rel(Relation onerel, VacuumParams *params, InvalidMultiXactId, in_outer_xact); } + } - /* - * Now report ANALYZE to the stats collector. - * - * We deliberately don't report to the stats collector when doing - * inherited stats, because the stats collector only tracks per-table - * stats. - * - * Reset the changes_since_analyze counter only if we analyzed all - * columns; otherwise, there is still work for auto-analyze to do. - */ + /* + * Now report ANALYZE to the stats collector. For regular tables, we do + * it only if not doing inherited stats. For partitioned tables, we only + * do it for inherited stats. (We're never called for not-inherited stats + * on partitioned tables anyway.) + * + * Reset the changes_since_analyze counter only if we analyzed all + * columns; otherwise, there is still work for auto-analyze to do. + */ + if (!inh || onerel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) pgstat_report_analyze(onerel, totalrows, totaldeadrows, (va_cols == NIL)); + + /* + * If this is a manual analyze of all columns of a permanent leaf + * partition, and not doing inherited stats, also let the collector know + * about the ancestor tables of this partition. Autovacuum does the + * equivalent of this at the start of its run, so there's no reason to do + * it there. + */ + if (!inh && !IsAutoVacuumWorkerProcess() && + (va_cols == NIL) && + onerel->rd_rel->relispartition && + onerel->rd_rel->relkind == RELKIND_RELATION && + onerel->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT) + { + pgstat_report_anl_ancestors(RelationGetRelid(onerel)); } /* diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 23ef23c13ebe2..aef9ac4dd22ee 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -75,6 +75,7 @@ #include "catalog/dependency.h" #include "catalog/namespace.h" #include "catalog/pg_database.h" +#include "catalog/pg_inherits.h" #include "commands/dbcommands.h" #include "commands/vacuum.h" #include "lib/ilist.h" @@ -1969,6 +1970,7 @@ do_autovacuum(void) int effective_multixact_freeze_max_age; bool did_vacuum = false; bool found_concurrent_worker = false; + bool updated = false; int i; /* @@ -2054,12 +2056,19 @@ do_autovacuum(void) /* * Scan pg_class to determine which tables to vacuum. * - * We do this in two passes: on the first one we collect the list of plain - * relations and materialized views, and on the second one we collect - * TOAST tables. The reason for doing the second pass is that during it we - * want to use the main relation's pg_class.reloptions entry if the TOAST - * table does not have any, and we cannot obtain it unless we know - * beforehand what's the main table OID. + * We do this in three passes: First we let pgstat collector know about + * the partitioned table ancestors of all partitions that have recently + * acquired rows for analyze. This informs the second pass about the + * total number of tuple count in partitioning hierarchies. + * + * On the second pass, we collect the list of plain relations, + * materialized views and partitioned tables. On the third one we collect + * TOAST tables. + * + * The reason for doing the third pass is that during it we want to use + * the main relation's pg_class.reloptions entry if the TOAST table does + * not have any, and we cannot obtain it unless we know beforehand what's + * the main table OID. * * We need to check TOAST tables separately because in cases with short, * wide tables there might be proportionally much more activity in the @@ -2068,7 +2077,44 @@ do_autovacuum(void) relScan = table_beginscan_catalog(classRel, 0, NULL); /* - * On the first pass, we collect main tables to vacuum, and also the main + * First pass: before collecting the list of tables to vacuum, let stat + * collector know about partitioned-table ancestors of each partition. + */ + while ((tuple = heap_getnext(relScan, ForwardScanDirection)) != NULL) + { + Form_pg_class classForm = (Form_pg_class) GETSTRUCT(tuple); + Oid relid = classForm->oid; + PgStat_StatTabEntry *tabentry; + + /* Only consider permanent leaf partitions */ + if (!classForm->relispartition || + classForm->relkind == RELKIND_PARTITIONED_TABLE || + classForm->relpersistence == RELPERSISTENCE_TEMP) + continue; + + /* + * No need to do this for partitions that haven't acquired any rows. + */ + tabentry = pgstat_fetch_stat_tabentry(relid); + if (tabentry && + tabentry->changes_since_analyze - + tabentry->changes_since_analyze_reported > 0) + { + pgstat_report_anl_ancestors(relid); + updated = true; + } + } + + /* Acquire fresh stats for the next passes, if needed */ + if (updated) + { + autovac_refresh_stats(); + dbentry = pgstat_fetch_stat_dbentry(MyDatabaseId); + shared = pgstat_fetch_stat_dbentry(InvalidOid); + } + + /* + * On the second pass, we collect main tables to vacuum, and also the main * table relid to TOAST relid mapping. */ while ((tuple = heap_getnext(relScan, ForwardScanDirection)) != NULL) @@ -2082,7 +2128,8 @@ do_autovacuum(void) bool wraparound; if (classForm->relkind != RELKIND_RELATION && - classForm->relkind != RELKIND_MATVIEW) + classForm->relkind != RELKIND_MATVIEW && + classForm->relkind != RELKIND_PARTITIONED_TABLE) continue; relid = classForm->oid; @@ -2157,7 +2204,7 @@ do_autovacuum(void) table_endscan(relScan); - /* second pass: check TOAST tables */ + /* third pass: check TOAST tables */ ScanKeyInit(&key, Anum_pg_class_relkind, BTEqualStrategyNumber, F_CHAREQ, @@ -2745,6 +2792,7 @@ extract_autovac_opts(HeapTuple tup, TupleDesc pg_class_desc) Assert(((Form_pg_class) GETSTRUCT(tup))->relkind == RELKIND_RELATION || ((Form_pg_class) GETSTRUCT(tup))->relkind == RELKIND_MATVIEW || + ((Form_pg_class) GETSTRUCT(tup))->relkind == RELKIND_PARTITIONED_TABLE || ((Form_pg_class) GETSTRUCT(tup))->relkind == RELKIND_TOASTVALUE); relopts = extractRelOptions(tup, pg_class_desc, NULL); @@ -3161,7 +3209,44 @@ relation_needs_vacanalyze(Oid relid, */ if (PointerIsValid(tabentry) && AutoVacuumingActive()) { - reltuples = classForm->reltuples; + if (classForm->relkind != RELKIND_PARTITIONED_TABLE) + { + reltuples = classForm->reltuples; + } + else + { + /* + * If the relation is a partitioned table, we must add up + * children's reltuples. + */ + List *children; + ListCell *lc; + + reltuples = 0; + + /* Find all members of inheritance set taking AccessShareLock */ + children = find_all_inheritors(relid, AccessShareLock, NULL); + + foreach(lc, children) + { + Oid childOID = lfirst_oid(lc); + HeapTuple childtuple; + Form_pg_class childclass; + + childtuple = SearchSysCache1(RELOID, ObjectIdGetDatum(childOID)); + childclass = (Form_pg_class) GETSTRUCT(childtuple); + + /* Skip a partitioned table and foreign partitions */ + if (RELKIND_HAS_STORAGE(childclass->relkind)) + { + /* Sum up the child's reltuples for its parent table */ + reltuples += childclass->reltuples; + } + ReleaseSysCache(childtuple); + } + + list_free(children); + } vactuples = tabentry->n_dead_tuples; instuples = tabentry->inserts_since_vacuum; anltuples = tabentry->changes_since_analyze; diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index 5ba776e789449..958183dd69dee 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -38,6 +38,7 @@ #include "access/transam.h" #include "access/twophase_rmgr.h" #include "access/xact.h" +#include "catalog/partition.h" #include "catalog/pg_database.h" #include "catalog/pg_proc.h" #include "common/ip.h" @@ -343,6 +344,7 @@ static void pgstat_recv_resetreplslotcounter(PgStat_MsgResetreplslotcounter *msg static void pgstat_recv_autovac(PgStat_MsgAutovacStart *msg, int len); static void pgstat_recv_vacuum(PgStat_MsgVacuum *msg, int len); static void pgstat_recv_analyze(PgStat_MsgAnalyze *msg, int len); +static void pgstat_recv_anl_ancestors(PgStat_MsgAnlAncestors *msg, int len); static void pgstat_recv_archiver(PgStat_MsgArchiver *msg, int len); static void pgstat_recv_bgwriter(PgStat_MsgBgWriter *msg, int len); static void pgstat_recv_wal(PgStat_MsgWal *msg, int len); @@ -1592,6 +1594,9 @@ pgstat_report_vacuum(Oid tableoid, bool shared, * * Caller must provide new live- and dead-tuples estimates, as well as a * flag indicating whether to reset the changes_since_analyze counter. + * Exceptional support only changes_since_analyze for partitioned tables, + * though they don't have any data. This counter will tell us whether + * partitioned tables need autoanalyze or not. * -------- */ void @@ -1613,21 +1618,31 @@ pgstat_report_analyze(Relation rel, * be double-counted after commit. (This approach also ensures that the * collector ends up with the right numbers if we abort instead of * committing.) + * + * For partitioned tables, we don't report live and dead tuples, because + * such tables don't have any data. */ if (rel->pgstat_info != NULL) { PgStat_TableXactStatus *trans; - for (trans = rel->pgstat_info->trans; trans; trans = trans->upper) + if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) + /* If this rel is partitioned, skip modifying */ + livetuples = deadtuples = 0; + else { - livetuples -= trans->tuples_inserted - trans->tuples_deleted; - deadtuples -= trans->tuples_updated + trans->tuples_deleted; + for (trans = rel->pgstat_info->trans; trans; trans = trans->upper) + { + livetuples -= trans->tuples_inserted - trans->tuples_deleted; + deadtuples -= trans->tuples_updated + trans->tuples_deleted; + } + /* count stuff inserted by already-aborted subxacts, too */ + deadtuples -= rel->pgstat_info->t_counts.t_delta_dead_tuples; + /* Since ANALYZE's counts are estimates, we could have underflowed */ + livetuples = Max(livetuples, 0); + deadtuples = Max(deadtuples, 0); } - /* count stuff inserted by already-aborted subxacts, too */ - deadtuples -= rel->pgstat_info->t_counts.t_delta_dead_tuples; - /* Since ANALYZE's counts are estimates, we could have underflowed */ - livetuples = Max(livetuples, 0); - deadtuples = Max(deadtuples, 0); + } pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_ANALYZE); @@ -1639,6 +1654,48 @@ pgstat_report_analyze(Relation rel, msg.m_live_tuples = livetuples; msg.m_dead_tuples = deadtuples; pgstat_send(&msg, sizeof(msg)); + +} + +/* + * pgstat_report_anl_ancestors + * + * Send list of partitioned table ancestors of the given partition to the + * collector. The collector is in charge of propagating the analyze tuple + * counts from the partition to its ancestors. This is necessary so that + * other processes can decide whether to analyze the partitioned tables. + */ +void +pgstat_report_anl_ancestors(Oid relid) +{ + PgStat_MsgAnlAncestors msg; + List *ancestors; + ListCell *lc; + + pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_ANL_ANCESTORS); + msg.m_databaseid = MyDatabaseId; + msg.m_tableoid = relid; + msg.m_nancestors = 0; + + ancestors = get_partition_ancestors(relid); + foreach(lc, ancestors) + { + Oid ancestor = lfirst_oid(lc); + + msg.m_ancestors[msg.m_nancestors] = ancestor; + if (++msg.m_nancestors >= PGSTAT_NUM_ANCESTORENTRIES) + { + pgstat_send(&msg, offsetof(PgStat_MsgAnlAncestors, m_ancestors[0]) + + msg.m_nancestors * sizeof(Oid)); + msg.m_nancestors = 0; + } + } + + if (msg.m_nancestors > 0) + pgstat_send(&msg, offsetof(PgStat_MsgAnlAncestors, m_ancestors[0]) + + msg.m_nancestors * sizeof(Oid)); + + list_free(ancestors); } /* -------- @@ -1958,7 +2015,8 @@ pgstat_initstats(Relation rel) char relkind = rel->rd_rel->relkind; /* We only count stats for things that have storage */ - if (!RELKIND_HAS_STORAGE(relkind)) + if (!RELKIND_HAS_STORAGE(relkind) && + relkind != RELKIND_PARTITIONED_TABLE) { rel->pgstat_info = NULL; return; @@ -3287,6 +3345,10 @@ PgstatCollectorMain(int argc, char *argv[]) pgstat_recv_analyze(&msg.msg_analyze, len); break; + case PGSTAT_MTYPE_ANL_ANCESTORS: + pgstat_recv_anl_ancestors(&msg.msg_anl_ancestors, len); + break; + case PGSTAT_MTYPE_ARCHIVER: pgstat_recv_archiver(&msg.msg_archiver, len); break; @@ -3501,6 +3563,7 @@ pgstat_get_tab_entry(PgStat_StatDBEntry *dbentry, Oid tableoid, bool create) result->n_live_tuples = 0; result->n_dead_tuples = 0; result->changes_since_analyze = 0; + result->changes_since_analyze_reported = 0; result->inserts_since_vacuum = 0; result->blocks_fetched = 0; result->blocks_hit = 0; @@ -4768,6 +4831,7 @@ pgstat_recv_tabstat(PgStat_MsgTabstat *msg, int len) tabentry->n_live_tuples = tabmsg->t_counts.t_delta_live_tuples; tabentry->n_dead_tuples = tabmsg->t_counts.t_delta_dead_tuples; tabentry->changes_since_analyze = tabmsg->t_counts.t_changed_tuples; + tabentry->changes_since_analyze_reported = 0; tabentry->inserts_since_vacuum = tabmsg->t_counts.t_tuples_inserted; tabentry->blocks_fetched = tabmsg->t_counts.t_blocks_fetched; tabentry->blocks_hit = tabmsg->t_counts.t_blocks_hit; @@ -5159,7 +5223,10 @@ pgstat_recv_analyze(PgStat_MsgAnalyze *msg, int len) * have no good way to estimate how many of those there were. */ if (msg->m_resetcounter) + { tabentry->changes_since_analyze = 0; + tabentry->changes_since_analyze_reported = 0; + } if (msg->m_autovacuum) { @@ -5173,6 +5240,29 @@ pgstat_recv_analyze(PgStat_MsgAnalyze *msg, int len) } } +static void +pgstat_recv_anl_ancestors(PgStat_MsgAnlAncestors *msg, int len) +{ + PgStat_StatDBEntry *dbentry; + PgStat_StatTabEntry *tabentry; + + dbentry = pgstat_get_db_entry(msg->m_databaseid, true); + + tabentry = pgstat_get_tab_entry(dbentry, msg->m_tableoid, true); + + for (int i = 0; i < msg->m_nancestors; i++) + { + Oid ancestor_relid = msg->m_ancestors[i]; + PgStat_StatTabEntry *ancestor; + + ancestor = pgstat_get_tab_entry(dbentry, ancestor_relid, true); + ancestor->changes_since_analyze += + tabentry->changes_since_analyze - tabentry->changes_since_analyze_reported; + } + + tabentry->changes_since_analyze_reported = tabentry->changes_since_analyze; + +} /* ---------- * pgstat_recv_archiver() - diff --git a/src/include/pgstat.h b/src/include/pgstat.h index 7cd137506e2b4..89cd324454a3c 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -69,6 +69,7 @@ typedef enum StatMsgType PGSTAT_MTYPE_AUTOVAC_START, PGSTAT_MTYPE_VACUUM, PGSTAT_MTYPE_ANALYZE, + PGSTAT_MTYPE_ANL_ANCESTORS, PGSTAT_MTYPE_ARCHIVER, PGSTAT_MTYPE_BGWRITER, PGSTAT_MTYPE_WAL, @@ -106,7 +107,7 @@ typedef int64 PgStat_Counter; * * tuples_inserted/updated/deleted/hot_updated count attempted actions, * regardless of whether the transaction committed. delta_live_tuples, - * delta_dead_tuples, and changed_tuples are set depending on commit or abort. + * delta_dead_tuples, changed_tuples are set depending on commit or abort. * Note that delta_live_tuples and delta_dead_tuples can be negative! * ---------- */ @@ -429,6 +430,25 @@ typedef struct PgStat_MsgAnalyze PgStat_Counter m_dead_tuples; } PgStat_MsgAnalyze; +/* ---------- + * PgStat_MsgAnlAncestors Sent by the backend or autovacuum daemon + * to inform partitioned tables that are + * ancestors of a partition, to propagate + * analyze counters + * ---------- + */ +#define PGSTAT_NUM_ANCESTORENTRIES \ + ((PGSTAT_MSG_PAYLOAD - sizeof(Oid) - sizeof(Oid) - sizeof(int)) \ + / sizeof(Oid)) + +typedef struct PgStat_MsgAnlAncestors +{ + PgStat_MsgHdr m_hdr; + Oid m_databaseid; + Oid m_tableoid; + int m_nancestors; + Oid m_ancestors[PGSTAT_NUM_ANCESTORENTRIES]; +} PgStat_MsgAnlAncestors; /* ---------- * PgStat_MsgArchiver Sent by the archiver to update statistics. @@ -674,6 +694,7 @@ typedef union PgStat_Msg PgStat_MsgAutovacStart msg_autovacuum_start; PgStat_MsgVacuum msg_vacuum; PgStat_MsgAnalyze msg_analyze; + PgStat_MsgAnlAncestors msg_anl_ancestors; PgStat_MsgArchiver msg_archiver; PgStat_MsgBgWriter msg_bgwriter; PgStat_MsgWal msg_wal; @@ -769,6 +790,7 @@ typedef struct PgStat_StatTabEntry PgStat_Counter n_live_tuples; PgStat_Counter n_dead_tuples; PgStat_Counter changes_since_analyze; + PgStat_Counter changes_since_analyze_reported; PgStat_Counter inserts_since_vacuum; PgStat_Counter blocks_fetched; @@ -975,6 +997,7 @@ extern void pgstat_report_vacuum(Oid tableoid, bool shared, extern void pgstat_report_analyze(Relation rel, PgStat_Counter livetuples, PgStat_Counter deadtuples, bool resetcounter); +extern void pgstat_report_anl_ancestors(Oid relid); extern void pgstat_report_recovery_conflict(int reason); extern void pgstat_report_deadlock(void); diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 264deda7af59d..a8a1cc72d0d7c 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1807,7 +1807,7 @@ pg_stat_all_tables| SELECT c.oid AS relid, FROM ((pg_class c LEFT JOIN pg_index i ON ((c.oid = i.indrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) - WHERE (c.relkind = ANY (ARRAY['r'::"char", 't'::"char", 'm'::"char"])) + WHERE (c.relkind = ANY (ARRAY['r'::"char", 't'::"char", 'm'::"char", 'p'::"char"])) GROUP BY c.oid, n.nspname, c.relname; pg_stat_archiver| SELECT s.archived_count, s.last_archived_wal, @@ -2210,7 +2210,7 @@ pg_stat_xact_all_tables| SELECT c.oid AS relid, FROM ((pg_class c LEFT JOIN pg_index i ON ((c.oid = i.indrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) - WHERE (c.relkind = ANY (ARRAY['r'::"char", 't'::"char", 'm'::"char"])) + WHERE (c.relkind = ANY (ARRAY['r'::"char", 't'::"char", 'm'::"char", 'p'::"char"])) GROUP BY c.oid, n.nspname, c.relname; pg_stat_xact_sys_tables| SELECT pg_stat_xact_all_tables.relid, pg_stat_xact_all_tables.schemaname, From 2f27f8c511494cca9e0e9a4eeeb102fa9f193002 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Thu, 8 Apr 2021 17:48:37 +1200 Subject: [PATCH 041/671] Provide ReadRecentBuffer() to re-pin buffers by ID. If you know the ID of a buffer that recently held a block that you would like to pin, this function can be used check if it's still there. It can be used to avoid a second lookup in the buffer mapping table after PrefetchBuffer() reports a cache hit. Reviewed-by: Andres Freund Discussion: https://postgr.es/m/CA+hUKGJ4VJN8ttxScUFM8dOKX0BrBiboo5uz1cq=AovOddfHpA@mail.gmail.com --- src/backend/storage/buffer/bufmgr.c | 78 +++++++++++++++++++++++++++++ src/include/storage/bufmgr.h | 2 + 2 files changed, 80 insertions(+) diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 852138f9c93a1..0c5b87864b90b 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -610,6 +610,84 @@ PrefetchBuffer(Relation reln, ForkNumber forkNum, BlockNumber blockNum) } } +/* + * ReadRecentBuffer -- try to pin a block in a recently observed buffer + * + * Compared to ReadBuffer(), this avoids a buffer mapping lookup when it's + * successful. Return true if the buffer is valid and still has the expected + * tag. In that case, the buffer is pinned and the usage count is bumped. + */ +bool +ReadRecentBuffer(RelFileNode rnode, ForkNumber forkNum, BlockNumber blockNum, + Buffer recent_buffer) +{ + BufferDesc *bufHdr; + BufferTag tag; + uint32 buf_state; + bool have_private_ref; + + Assert(BufferIsValid(recent_buffer)); + + ResourceOwnerEnlargeBuffers(CurrentResourceOwner); + ReservePrivateRefCountEntry(); + INIT_BUFFERTAG(tag, rnode, forkNum, blockNum); + + if (BufferIsLocal(recent_buffer)) + { + bufHdr = GetBufferDescriptor(-recent_buffer - 1); + buf_state = pg_atomic_read_u32(&bufHdr->state); + + /* Is it still valid and holding the right tag? */ + if ((buf_state & BM_VALID) && BUFFERTAGS_EQUAL(tag, bufHdr->tag)) + { + /* Bump local buffer's ref and usage counts. */ + ResourceOwnerRememberBuffer(CurrentResourceOwner, recent_buffer); + LocalRefCount[-recent_buffer - 1]++; + if (BUF_STATE_GET_USAGECOUNT(buf_state) < BM_MAX_USAGE_COUNT) + pg_atomic_write_u32(&bufHdr->state, + buf_state + BUF_USAGECOUNT_ONE); + + return true; + } + } + else + { + bufHdr = GetBufferDescriptor(recent_buffer - 1); + have_private_ref = GetPrivateRefCount(recent_buffer) > 0; + + /* + * Do we already have this buffer pinned with a private reference? If + * so, it must be valid and it is safe to check the tag without + * locking. If not, we have to lock the header first and then check. + */ + if (have_private_ref) + buf_state = pg_atomic_read_u32(&bufHdr->state); + else + buf_state = LockBufHdr(bufHdr); + + if ((buf_state & BM_VALID) && BUFFERTAGS_EQUAL(tag, bufHdr->tag)) + { + /* + * It's now safe to pin the buffer. We can't pin first and ask + * questions later, because because it might confuse code paths + * like InvalidateBuffer() if we pinned a random non-matching + * buffer. + */ + if (have_private_ref) + PinBuffer(bufHdr, NULL); /* bump pin count */ + else + PinBuffer_Locked(bufHdr); /* pin for first time */ + + return true; + } + + /* If we locked the header above, now unlock. */ + if (!have_private_ref) + UnlockBufHdr(bufHdr, buf_state); + } + + return false; +} /* * ReadBuffer -- a shorthand for ReadBufferExtended, for reading from main diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h index fb00fda6a7f21..aa64fb42ec45d 100644 --- a/src/include/storage/bufmgr.h +++ b/src/include/storage/bufmgr.h @@ -176,6 +176,8 @@ extern PrefetchBufferResult PrefetchSharedBuffer(struct SMgrRelationData *smgr_r BlockNumber blockNum); extern PrefetchBufferResult PrefetchBuffer(Relation reln, ForkNumber forkNum, BlockNumber blockNum); +extern bool ReadRecentBuffer(RelFileNode rnode, ForkNumber forkNum, + BlockNumber blockNum, Buffer recent_buffer); extern Buffer ReadBuffer(Relation reln, BlockNumber blockNum); extern Buffer ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, From 2e0e0666790e48cec716d4947f89d067ef53490c Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 8 Apr 2021 08:28:03 +0200 Subject: [PATCH 042/671] Update Unicode data to CLDR 39 --- contrib/unaccent/unaccent.rules | 9 +++++++++ src/Makefile.global.in | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/contrib/unaccent/unaccent.rules b/contrib/unaccent/unaccent.rules index bf4c1bd19741f..1b5eb1b16c878 100644 --- a/contrib/unaccent/unaccent.rules +++ b/contrib/unaccent/unaccent.rules @@ -1,11 +1,14 @@ +¡ ! © (C) « << ­ - ® (R) +± +/- » >> ¼ 1/4 ½ 1/2 ¾ 3/4 +¿ ? À A Á A Â A @@ -1131,6 +1134,9 @@ ⅇ e ⅈ i ⅉ j +⅐ 1/7 +⅑ 1/9 +⅒ 1/10 ⅓ 1/3 ⅔ 2/3 ⅕ 1/5 @@ -1176,6 +1182,7 @@ ⅽ c ⅾ d ⅿ m +↉ 0/3 − - ∕ / ∖ \ @@ -1602,3 +1609,5 @@ ⦆ )) 。 . 、 , +← <- +→ -> diff --git a/src/Makefile.global.in b/src/Makefile.global.in index 74b3a6acd292f..8f058408210fb 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -365,7 +365,7 @@ DOWNLOAD = wget -O $@ --no-use-server-timestamps UNICODE_VERSION = 13.0.0 # Pick a release from here: -CLDR_VERSION = 37 +CLDR_VERSION = 39 # Tree-wide build support From 6b4d23feef6e334fb85af077f2857f62ab781848 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Thu, 8 Apr 2021 10:23:10 +0200 Subject: [PATCH 043/671] Track identical top vs nested queries independently in pg_stat_statements Changing pg_stat_statements.track between 'all' and 'top' would control if pg_stat_statements tracked just top level statements or also statements inside functions, but when tracking all it would not differentiate between the two. Being table to differentiate this is useful both to track where the actual query is coming from, and to see if there are differences in executions between the two. To do this, add a boolean to the hash key indicating if the statement was top level or not. Experience from the pg_stat_kcache module shows that in at least some "reasonable worloads" only <5% of the queries show up both top level and nested. Based on this, admittedly small, dataset, this patch does not try to de-duplicate those query *texts*, and will just store one copy for the top level and one for the nested. Author: Julien Rohaud Reviewed-By: Magnus Hagander, Masahiro Ikeda Discussion: https://postgr.es/m/20201202040516.GA43757@nol --- contrib/pg_stat_statements/Makefile | 3 +- .../expected/pg_stat_statements.out | 40 +++++++++++++ .../pg_stat_statements--1.9--1.10.sql | 57 +++++++++++++++++++ .../pg_stat_statements/pg_stat_statements.c | 50 +++++++++++++--- .../pg_stat_statements.control | 2 +- .../sql/pg_stat_statements.sql | 21 +++++++ doc/src/sgml/pgstatstatements.sgml | 9 +++ 7 files changed, 173 insertions(+), 9 deletions(-) create mode 100644 contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql diff --git a/contrib/pg_stat_statements/Makefile b/contrib/pg_stat_statements/Makefile index 3ec627b956180..cab4f626ad17b 100644 --- a/contrib/pg_stat_statements/Makefile +++ b/contrib/pg_stat_statements/Makefile @@ -6,7 +6,8 @@ OBJS = \ pg_stat_statements.o EXTENSION = pg_stat_statements -DATA = pg_stat_statements--1.4.sql pg_stat_statements--1.8--1.9.sql \ +DATA = pg_stat_statements--1.4.sql \ + pg_stat_statements--1.9--1.10.sql pg_stat_statements--1.8--1.9.sql \ pg_stat_statements--1.7--1.8.sql pg_stat_statements--1.6--1.7.sql \ pg_stat_statements--1.5--1.6.sql pg_stat_statements--1.4--1.5.sql \ pg_stat_statements--1.3--1.4.sql pg_stat_statements--1.2--1.3.sql \ diff --git a/contrib/pg_stat_statements/expected/pg_stat_statements.out b/contrib/pg_stat_statements/expected/pg_stat_statements.out index 4ffb7e0076a10..674ed270a8f85 100644 --- a/contrib/pg_stat_statements/expected/pg_stat_statements.out +++ b/contrib/pg_stat_statements/expected/pg_stat_statements.out @@ -901,4 +901,44 @@ SELECT dealloc FROM pg_stat_statements_info; 0 (1 row) +-- +-- top level handling +-- +SET pg_stat_statements.track = 'top'; +DELETE FROM test; +DO $$ +BEGIN + DELETE FROM test; +END; +$$ LANGUAGE plpgsql; +SELECT query, toplevel, plans, calls FROM pg_stat_statements WHERE query LIKE '%DELETE%' ORDER BY query COLLATE "C", toplevel; + query | toplevel | plans | calls +-----------------------+----------+-------+------- + DELETE FROM test | t | 1 | 1 + DO $$ +| t | 0 | 1 + BEGIN +| | | + DELETE FROM test;+| | | + END; +| | | + $$ LANGUAGE plpgsql | | | +(2 rows) + +SET pg_stat_statements.track = 'all'; +DELETE FROM test; +DO $$ +BEGIN + DELETE FROM test; +END; +$$ LANGUAGE plpgsql; +SELECT query, toplevel, plans, calls FROM pg_stat_statements WHERE query LIKE '%DELETE%' ORDER BY query COLLATE "C", toplevel; + query | toplevel | plans | calls +-----------------------+----------+-------+------- + DELETE FROM test | f | 1 | 1 + DELETE FROM test | t | 2 | 2 + DO $$ +| t | 0 | 2 + BEGIN +| | | + DELETE FROM test;+| | | + END; +| | | + $$ LANGUAGE plpgsql | | | +(3 rows) + DROP EXTENSION pg_stat_statements; diff --git a/contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql b/contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql new file mode 100644 index 0000000000000..f97d16497d4a6 --- /dev/null +++ b/contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql @@ -0,0 +1,57 @@ +/* contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql */ + +-- complain if script is sourced in psql, rather than via ALTER EXTENSION +\echo Use "ALTER EXTENSION pg_stat_statements UPDATE TO '1.10'" to load this file. \quit + +/* First we have to remove them from the extension */ +ALTER EXTENSION pg_stat_statements DROP VIEW pg_stat_statements; +ALTER EXTENSION pg_stat_statements DROP FUNCTION pg_stat_statements(boolean); + +/* Then we can drop them */ +DROP VIEW pg_stat_statements; +DROP FUNCTION pg_stat_statements(boolean); + +/* Now redefine */ +CREATE FUNCTION pg_stat_statements(IN showtext boolean, + OUT userid oid, + OUT dbid oid, + OUT toplevel bool, + OUT queryid bigint, + OUT query text, + OUT plans int8, + OUT total_plan_time float8, + OUT min_plan_time float8, + OUT max_plan_time float8, + OUT mean_plan_time float8, + OUT stddev_plan_time float8, + OUT calls int8, + OUT total_exec_time float8, + OUT min_exec_time float8, + OUT max_exec_time float8, + OUT mean_exec_time float8, + OUT stddev_exec_time float8, + OUT rows int8, + OUT shared_blks_hit int8, + OUT shared_blks_read int8, + OUT shared_blks_dirtied int8, + OUT shared_blks_written int8, + OUT local_blks_hit int8, + OUT local_blks_read int8, + OUT local_blks_dirtied int8, + OUT local_blks_written int8, + OUT temp_blks_read int8, + OUT temp_blks_written int8, + OUT blk_read_time float8, + OUT blk_write_time float8, + OUT wal_records int8, + OUT wal_fpi int8, + OUT wal_bytes numeric +) +RETURNS SETOF record +AS 'MODULE_PATHNAME', 'pg_stat_statements_1_10' +LANGUAGE C STRICT VOLATILE PARALLEL SAFE; + +CREATE VIEW pg_stat_statements AS + SELECT * FROM pg_stat_statements(true); + +GRANT SELECT ON pg_stat_statements TO PUBLIC; diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index 52cba86196971..fc2677643b920 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -87,7 +87,7 @@ PG_MODULE_MAGIC; #define PGSS_TEXT_FILE PG_STAT_TMP_DIR "/pgss_query_texts.stat" /* Magic number identifying the stats file format */ -static const uint32 PGSS_FILE_HEADER = 0x20201218; +static const uint32 PGSS_FILE_HEADER = 0x20201227; /* PostgreSQL major version number, changes in which invalidate all entries */ static const uint32 PGSS_PG_MAJOR_VERSION = PG_VERSION_NUM / 100; @@ -119,7 +119,8 @@ typedef enum pgssVersion PGSS_V1_1, PGSS_V1_2, PGSS_V1_3, - PGSS_V1_8 + PGSS_V1_8, + PGSS_V1_10 } pgssVersion; typedef enum pgssStoreKind @@ -141,16 +142,17 @@ typedef enum pgssStoreKind * Hashtable key that defines the identity of a hashtable entry. We separate * queries by user and by database even if they are otherwise identical. * - * Right now, this structure contains no padding. If you add any, make sure - * to teach pgss_store() to zero the padding bytes. Otherwise, things will - * break, because pgss_hash is created using HASH_BLOBS, and thus tag_hash - * is used to hash this. + * If you add a new key to this struct, make sure to teach pgss_store() to + * zero the padding bytes. Otherwise, things will break, because pgss_hash is + * created using HASH_BLOBS, and thus tag_hash is used to hash this. + */ typedef struct pgssHashKey { Oid userid; /* user OID */ Oid dbid; /* database OID */ uint64 queryid; /* query identifier */ + bool toplevel; /* query executed at top level */ } pgssHashKey; /* @@ -297,6 +299,7 @@ PG_FUNCTION_INFO_V1(pg_stat_statements_reset_1_7); PG_FUNCTION_INFO_V1(pg_stat_statements_1_2); PG_FUNCTION_INFO_V1(pg_stat_statements_1_3); PG_FUNCTION_INFO_V1(pg_stat_statements_1_8); +PG_FUNCTION_INFO_V1(pg_stat_statements_1_10); PG_FUNCTION_INFO_V1(pg_stat_statements); PG_FUNCTION_INFO_V1(pg_stat_statements_info); @@ -1224,9 +1227,14 @@ pgss_store(const char *query, uint64 queryId, query = CleanQuerytext(query, &query_location, &query_len); /* Set up key for hashtable search */ + + /* memset() is required when pgssHashKey is without padding only */ + memset(&key, 0, sizeof(pgssHashKey)); + key.userid = GetUserId(); key.dbid = MyDatabaseId; key.queryid = queryId; + key.toplevel = (exec_nested_level == 0); /* Lookup the hash table entry with shared lock. */ LWLockAcquire(pgss->lock, LW_SHARED); @@ -1406,7 +1414,8 @@ pg_stat_statements_reset(PG_FUNCTION_ARGS) #define PG_STAT_STATEMENTS_COLS_V1_2 19 #define PG_STAT_STATEMENTS_COLS_V1_3 23 #define PG_STAT_STATEMENTS_COLS_V1_8 32 -#define PG_STAT_STATEMENTS_COLS 32 /* maximum of above */ +#define PG_STAT_STATEMENTS_COLS_V1_10 33 +#define PG_STAT_STATEMENTS_COLS 33 /* maximum of above */ /* * Retrieve statement statistics. @@ -1418,6 +1427,16 @@ pg_stat_statements_reset(PG_FUNCTION_ARGS) * expected API version is identified by embedding it in the C name of the * function. Unfortunately we weren't bright enough to do that for 1.1. */ +Datum +pg_stat_statements_1_10(PG_FUNCTION_ARGS) +{ + bool showtext = PG_GETARG_BOOL(0); + + pg_stat_statements_internal(fcinfo, PGSS_V1_10, showtext); + + return (Datum) 0; +} + Datum pg_stat_statements_1_8(PG_FUNCTION_ARGS) { @@ -1537,6 +1556,10 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, if (api_version != PGSS_V1_8) elog(ERROR, "incorrect number of output arguments"); break; + case PG_STAT_STATEMENTS_COLS_V1_10: + if (api_version != PGSS_V1_10) + elog(ERROR, "incorrect number of output arguments"); + break; default: elog(ERROR, "incorrect number of output arguments"); } @@ -1628,6 +1651,8 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, values[i++] = ObjectIdGetDatum(entry->key.userid); values[i++] = ObjectIdGetDatum(entry->key.dbid); + if (api_version >= PGSS_V1_10) + values[i++] = BoolGetDatum(entry->key.toplevel); if (is_allowed_role || entry->key.userid == userid) { @@ -1765,6 +1790,7 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, api_version == PGSS_V1_2 ? PG_STAT_STATEMENTS_COLS_V1_2 : api_version == PGSS_V1_3 ? PG_STAT_STATEMENTS_COLS_V1_3 : api_version == PGSS_V1_8 ? PG_STAT_STATEMENTS_COLS_V1_8 : + api_version == PGSS_V1_10 ? PG_STAT_STATEMENTS_COLS_V1_10 : -1 /* fail if you forget to update this assert */ )); tuplestore_putvalues(tupstore, tupdesc, values, nulls); @@ -2437,10 +2463,20 @@ entry_reset(Oid userid, Oid dbid, uint64 queryid) if (userid != 0 && dbid != 0 && queryid != UINT64CONST(0)) { /* If all the parameters are available, use the fast path. */ + memset(&key, 0, sizeof(pgssHashKey)); key.userid = userid; key.dbid = dbid; key.queryid = queryid; + /* Remove the key if it exists, starting with the top-level entry */ + key.toplevel = false; + entry = (pgssEntry *) hash_search(pgss_hash, &key, HASH_REMOVE, NULL); + if (entry) /* found */ + num_remove++; + + /* Also remove entries for top level statements */ + key.toplevel = true; + /* Remove the key if exists */ entry = (pgssEntry *) hash_search(pgss_hash, &key, HASH_REMOVE, NULL); if (entry) /* found */ diff --git a/contrib/pg_stat_statements/pg_stat_statements.control b/contrib/pg_stat_statements/pg_stat_statements.control index 2f1ce6ed50705..0747e48138373 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.control +++ b/contrib/pg_stat_statements/pg_stat_statements.control @@ -1,5 +1,5 @@ # pg_stat_statements extension comment = 'track planning and execution statistics of all SQL statements executed' -default_version = '1.9' +default_version = '1.10' module_pathname = '$libdir/pg_stat_statements' relocatable = true diff --git a/contrib/pg_stat_statements/sql/pg_stat_statements.sql b/contrib/pg_stat_statements/sql/pg_stat_statements.sql index 6f58d9d0f669c..56d8526ccfa43 100644 --- a/contrib/pg_stat_statements/sql/pg_stat_statements.sql +++ b/contrib/pg_stat_statements/sql/pg_stat_statements.sql @@ -364,4 +364,25 @@ SELECT query, plans, calls, rows FROM pg_stat_statements ORDER BY query COLLATE SELECT pg_stat_statements_reset(); SELECT dealloc FROM pg_stat_statements_info; +-- +-- top level handling +-- +SET pg_stat_statements.track = 'top'; +DELETE FROM test; +DO $$ +BEGIN + DELETE FROM test; +END; +$$ LANGUAGE plpgsql; +SELECT query, toplevel, plans, calls FROM pg_stat_statements WHERE query LIKE '%DELETE%' ORDER BY query COLLATE "C", toplevel; + +SET pg_stat_statements.track = 'all'; +DELETE FROM test; +DO $$ +BEGIN + DELETE FROM test; +END; +$$ LANGUAGE plpgsql; +SELECT query, toplevel, plans, calls FROM pg_stat_statements WHERE query LIKE '%DELETE%' ORDER BY query COLLATE "C", toplevel; + DROP EXTENSION pg_stat_statements; diff --git a/doc/src/sgml/pgstatstatements.sgml b/doc/src/sgml/pgstatstatements.sgml index 3ca292d71fbbd..5ad4f0aed2abd 100644 --- a/doc/src/sgml/pgstatstatements.sgml +++ b/doc/src/sgml/pgstatstatements.sgml @@ -87,6 +87,15 @@ + + + toplevel bool + + + True if the query was executed as a top level statement + + + queryid bigint From fb310f17812e7321599845a29af2f36c7f1191c3 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 8 Apr 2021 10:51:26 +0200 Subject: [PATCH 044/671] doc: Prefer explicit JOIN syntax over old implicit syntax in tutorial MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update src/tutorial/basics.source to match. Author: Jürgen Purtz Reviewed-by: Thomas Munro Reviewed-by: "David G. Johnston" Discussion: https://www.postgresql.org/message-id/flat/158996922318.7035.10603922579567326239@wrigleys.postgresql.org --- doc/src/sgml/query.sgml | 74 ++++++++++++++++++-------------------- src/tutorial/basics.source | 22 +++++------- 2 files changed, 43 insertions(+), 53 deletions(-) diff --git a/doc/src/sgml/query.sgml b/doc/src/sgml/query.sgml index e793398bb2b73..71d644f432345 100644 --- a/doc/src/sgml/query.sgml +++ b/doc/src/sgml/query.sgml @@ -440,27 +440,26 @@ SELECT DISTINCT city Thus far, our queries have only accessed one table at a time. Queries can access multiple tables at once, or access the same table in such a way that multiple rows of the table are being - processed at the same time. A query that accesses multiple rows - of the same or different tables at one time is called a - join query. As an example, say you wish to - list all the weather records together with the location of the - associated city. To do that, we need to compare the city + processed at the same time. Queries that access multiple tables + (or multiple instances of the same table) at one time are called + join queries. They combine rows from one table + with rows from a second table, with an expression specifying which rows + are to be paired. For example, to return all the weather records together + with the location of the associated city, the database needs to compare + the city column of each row of the weather table with the name column of all rows in the cities - table, and select the pairs of rows where these values match. - + table, and select the pairs of rows where these values match. This is only a conceptual model. The join is usually performed in a more efficient manner than actually comparing each possible pair of rows, but this is invisible to the user. - + This would be accomplished by the following query: -SELECT * - FROM weather, cities - WHERE city = name; +SELECT * FROM weather JOIN cities ON city = name; @@ -497,23 +496,13 @@ SELECT * *: SELECT city, temp_lo, temp_hi, prcp, date, location - FROM weather, cities - WHERE city = name; + FROM weather JOIN cities ON city = name; - - Exercise: - - - Attempt to determine the semantics of this query when the - WHERE clause is omitted. - - - Since the columns all had different names, the parser automatically found which table they belong to. If there @@ -524,8 +513,7 @@ SELECT city, temp_lo, temp_hi, prcp, date, location SELECT weather.city, weather.temp_lo, weather.temp_hi, weather.prcp, weather.date, cities.location - FROM weather, cities - WHERE cities.name = weather.city; + FROM weather JOIN cities ON weather.city = cities.name; It is widely considered good style to qualify all column names @@ -535,15 +523,24 @@ SELECT weather.city, weather.temp_lo, weather.temp_hi, Join queries of the kind seen thus far can also be written in this - alternative form: + form: SELECT * - FROM weather INNER JOIN cities ON (weather.city = cities.name); + FROM weather, cities + WHERE city = name; - This syntax is not as commonly used as the one above, but we show - it here to help you understand the following topics. + This syntax pre-dates the JOIN/ON + syntax, which was introduced in SQL-92. The tables are simply listed in + the FROM clause, and the comparison expression is added + to the WHERE clause. The results from this older + implicit syntax and the newer explicit + JOIN/ON syntax are identical. But + for a reader of the query, the explicit syntax makes its meaning easier to + understand: The join condition is introduced by its own key word whereas + previously the condition was mixed into the WHERE + clause together with other conditions. joinouter @@ -556,12 +553,12 @@ SELECT * found we want some empty values to be substituted for the cities table's columns. This kind of query is called an outer join. (The - joins we have seen so far are inner joins.) The command looks - like this: + joins we have seen so far are inner joins.) + The command looks like this: SELECT * - FROM weather LEFT OUTER JOIN cities ON (weather.city = cities.name); + FROM weather LEFT OUTER JOIN cities ON weather.city = cities.name; @@ -591,10 +588,9 @@ SELECT * + joinself + aliasfor table name in query - joinself - aliasfor table name in query - We can also join a table against itself. This is called a self join. As an example, suppose we wish to find all the weather records that are in the temperature range @@ -608,10 +604,9 @@ SELECT * SELECT w1.city, w1.temp_lo AS low, w1.temp_hi AS high, - w2.city, w2.temp_lo AS low, w2.temp_hi AS high - FROM weather w1, weather w2 - WHERE w1.temp_lo < w2.temp_lo - AND w1.temp_hi > w2.temp_hi; + w2.city, w2.temp_lo AS low, w2.temp_hi AS high + FROM weather w1 JOIN weather w2 + ON w1.temp_lo < w2.temp_lo AND w1.temp_hi > w2.temp_hi; @@ -628,8 +623,7 @@ SELECT w1.city, w1.temp_lo AS low, w1.temp_hi AS high, queries to save some typing, e.g.: SELECT * - FROM weather w, cities c - WHERE w.city = c.name; + FROM weather w JOIN cities c ON w.city = c.name; You will encounter this style of abbreviating quite frequently. diff --git a/src/tutorial/basics.source b/src/tutorial/basics.source index fe1cdfde2a873..3e74d718ab005 100644 --- a/src/tutorial/basics.source +++ b/src/tutorial/basics.source @@ -97,42 +97,38 @@ SELECT DISTINCT city -- The following joins the weather table and the cities table. -SELECT * - FROM weather, cities - WHERE city = name; +SELECT * FROM weather JOIN cities ON city = name; -- This prevents a duplicate city name column: SELECT city, temp_lo, temp_hi, prcp, date, location - FROM weather, cities - WHERE city = name; + FROM weather JOIN cities ON city = name; -- since the column names are all different, we don't have to specify the -- table name. If you want to be clear, you can do the following. They give -- identical results, of course. SELECT weather.city, weather.temp_lo, weather.temp_hi, weather.prcp, weather.date, cities.location - FROM weather, cities - WHERE cities.name = weather.city; + FROM weather JOIN cities ON weather.city = cities.name; --- JOIN syntax +-- Old join syntax SELECT * - FROM weather JOIN cities ON (weather.city = cities.name); + FROM weather, cities + WHERE city = name; -- Outer join SELECT * - FROM weather LEFT OUTER JOIN cities ON (weather.city = cities.name); + FROM weather LEFT OUTER JOIN cities ON weather.city = cities.name; -- Suppose we want to find all the records that are in the temperature range -- of other records. w1 and w2 are aliases for weather. SELECT w1.city, w1.temp_lo, w1.temp_hi, w2.city, w2.temp_lo, w2.temp_hi -FROM weather w1, weather w2 -WHERE w1.temp_lo < w2.temp_lo - and w1.temp_hi > w2.temp_hi; +FROM weather w1 JOIN weather w2 + ON w1.temp_lo < w2.temp_lo AND w1.temp_hi > w2.temp_hi; ----------------------------- From aaf043257205ec523f1ba09a3856464d17cf2281 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Thu, 8 Apr 2021 11:32:14 +0200 Subject: [PATCH 045/671] Add functions to wait for backend termination This adds a function, pg_wait_for_backend_termination(), and a new timeout argument to pg_terminate_backend(), which will wait for the backend to actually terminate (with or without signaling it to do so depending on which function is called). The default behaviour of pg_terminate_backend() remains being timeout=0 which does not waiting. For pg_wait_for_backend_termination() the default wait is 5 seconds. Author: Bharath Rupireddy Reviewed-By: Fujii Masao, David Johnston, Muhammad Usama, Hou Zhijie, Magnus Hagander Discussion: https://postgr.es/m/CALj2ACUBpunmyhYZw-kXCYs5NM+h6oG_7Df_Tn4mLmmUQifkqA@mail.gmail.com --- doc/src/sgml/func.sgml | 30 +++++- doc/src/sgml/monitoring.sgml | 4 + src/backend/catalog/system_views.sql | 10 ++ src/backend/storage/ipc/signalfuncs.c | 124 +++++++++++++++++++++++- src/backend/utils/activity/wait_event.c | 3 + src/include/catalog/pg_proc.dat | 9 +- src/include/utils/wait_event.h | 1 + 7 files changed, 174 insertions(+), 7 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index c6a45d9e55c8e..0606b6a9aa41e 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -24977,7 +24977,7 @@ SELECT collation for ('foo' COLLATE "de_DE"); pg_terminate_backend - pg_terminate_backend ( pid integer ) + pg_terminate_backend ( pid integer, timeout bigint DEFAULT 0 ) boolean @@ -24986,6 +24986,34 @@ SELECT collation for ('foo' COLLATE "de_DE"); is a member of the role whose backend is being terminated or the calling role has been granted pg_signal_backend, however only superusers can terminate superuser backends. + + + If timeout is not specified or zero, this + function returns true whether the process actually + terminates or not, indicating only that the sending of the signal was + successful. If the timeout is specified (in + milliseconds) and greater than zero, the function waits until the + process is actually terminated or until the given time has passed. If + the process is terminated, the function + returns true. On timeout a warning is emitted and + false is returned. + + + + + + + pg_wait_for_backend_termination + + pg_wait_for_backend_termination ( pid integer, timeout bigint DEFAULT 5000 ) + boolean + + + Waits for the backend process with the specified Process ID to + terminate. If the process terminates before + the timeout (in milliseconds) + expires, true is returned. On timeout, a warning + is emitted and false is returned. diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 52958b4fd91d5..da16c461f08d5 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -1585,6 +1585,10 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser Waiting for subplan nodes of an Append plan node to be ready. + + BackendTermination + Waiting for the termination of another backend. + BackupWaitWalArchive Waiting for WAL files required for a backup to be successfully diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index a47e102f36641..ff65b3edfa7d8 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -1347,6 +1347,16 @@ CREATE OR REPLACE FUNCTION RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_promote' PARALLEL SAFE; +CREATE OR REPLACE FUNCTION + pg_terminate_backend(pid integer, timeout int8 DEFAULT 0) + RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_terminate_backend' + PARALLEL SAFE; + +CREATE OR REPLACE FUNCTION + pg_wait_for_backend_termination(pid integer, timeout int8 DEFAULT 5000) + RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_wait_for_backend_termination' + PARALLEL SAFE; + -- legacy definition for compatibility with 9.3 CREATE OR REPLACE FUNCTION json_populate_record(base anyelement, from_json json, use_json_as_text boolean DEFAULT false) diff --git a/src/backend/storage/ipc/signalfuncs.c b/src/backend/storage/ipc/signalfuncs.c index 8b55ff6e76b10..0337b00226ab6 100644 --- a/src/backend/storage/ipc/signalfuncs.c +++ b/src/backend/storage/ipc/signalfuncs.c @@ -18,6 +18,7 @@ #include "catalog/pg_authid.h" #include "miscadmin.h" +#include "pgstat.h" #include "postmaster/syslogger.h" #include "storage/pmsignal.h" #include "storage/proc.h" @@ -126,15 +127,90 @@ pg_cancel_backend(PG_FUNCTION_ARGS) } /* - * Signal to terminate a backend process. This is allowed if you are a member - * of the role whose process is being terminated. + * Wait until there is no backend process with the given PID and return true. + * On timeout, a warning is emitted and false is returned. + */ +static bool +pg_wait_until_termination(int pid, int64 timeout) +{ + /* + * Wait in steps of waittime milliseconds until this function exits or + * timeout. + */ + int64 waittime = 100; + /* + * Initially remaining time is the entire timeout specified by the user. + */ + int64 remainingtime = timeout; + + /* + * Check existence of the backend. If the backend still exists, then wait + * for waittime milliseconds, again check for the existence. Repeat this + * until timeout or an error occurs or a pending interrupt such as query + * cancel gets processed. + */ + do + { + if (remainingtime < waittime) + waittime = remainingtime; + + if (kill(pid, 0) == -1) + { + if (errno == ESRCH) + return true; + else + ereport(ERROR, + (errcode(ERRCODE_INTERNAL_ERROR), + errmsg("could not check the existence of the backend with PID %d: %m", + pid))); + } + + /* Process interrupts, if any, before waiting */ + CHECK_FOR_INTERRUPTS(); + + (void) WaitLatch(MyLatch, + WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH, + waittime, + WAIT_EVENT_BACKEND_TERMINATION); + + ResetLatch(MyLatch); + + remainingtime -= waittime; + } while (remainingtime > 0); + + ereport(WARNING, + (errmsg("backend with PID %d did not terminate within %lld milliseconds", + pid, (long long int) timeout))); + + return false; +} + +/* + * Signal to terminate a backend process. This is allowed if you are a member + * of the role whose process is being terminated. If timeout input argument is + * 0 (which is default), then this function just signals the backend and + * doesn't wait. Otherwise it waits until given the timeout milliseconds or no + * process has the given PID and returns true. On timeout, a warning is emitted + * and false is returned. * * Note that only superusers can signal superuser-owned processes. */ Datum pg_terminate_backend(PG_FUNCTION_ARGS) { - int r = pg_signal_backend(PG_GETARG_INT32(0), SIGTERM); + int pid; + int r; + int timeout; + + pid = PG_GETARG_INT32(0); + timeout = PG_GETARG_INT64(1); + + if (timeout < 0) + ereport(ERROR, + (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("\"timeout\" must not be negative"))); + + r = pg_signal_backend(pid, SIGTERM); if (r == SIGNAL_BACKEND_NOSUPERUSER) ereport(ERROR, @@ -146,7 +222,47 @@ pg_terminate_backend(PG_FUNCTION_ARGS) (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), errmsg("must be a member of the role whose process is being terminated or member of pg_signal_backend"))); - PG_RETURN_BOOL(r == SIGNAL_BACKEND_SUCCESS); + /* Wait only on success and if actually requested */ + if (r == SIGNAL_BACKEND_SUCCESS && timeout > 0) + PG_RETURN_BOOL(pg_wait_until_termination(pid, timeout)); + else + PG_RETURN_BOOL(r == SIGNAL_BACKEND_SUCCESS); +} + +/* + * Wait for a backend process with the given PID to exit or until the given + * timeout milliseconds occurs. Returns true if the backend has exited. On + * timeout a warning is emitted and false is returned. + * + * We allow any user to call this function, consistent with any user being + * able to view the pid of the process in pg_stat_activity etc. + */ +Datum +pg_wait_for_backend_termination(PG_FUNCTION_ARGS) +{ + int pid; + int64 timeout; + PGPROC *proc = NULL; + + pid = PG_GETARG_INT32(0); + timeout = PG_GETARG_INT64(1); + + if (timeout <= 0) + ereport(ERROR, + (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("\"timeout\" must not be negative or zero"))); + + proc = BackendPidGetProc(pid); + + if (proc == NULL) + { + ereport(WARNING, + (errmsg("PID %d is not a PostgreSQL server process", pid))); + + PG_RETURN_BOOL(false); + } + + PG_RETURN_BOOL(pg_wait_until_termination(pid, timeout)); } /* diff --git a/src/backend/utils/activity/wait_event.c b/src/backend/utils/activity/wait_event.c index accc1eb57764c..89b5b8b7b9d07 100644 --- a/src/backend/utils/activity/wait_event.c +++ b/src/backend/utils/activity/wait_event.c @@ -313,6 +313,9 @@ pgstat_get_wait_ipc(WaitEventIPC w) case WAIT_EVENT_APPEND_READY: event_name = "AppendReady"; break; + case WAIT_EVENT_BACKEND_TERMINATION: + event_name = "BackendTermination"; + break; case WAIT_EVENT_BACKUP_WAIT_WAL_ARCHIVE: event_name = "BackupWaitWalArchive"; break; diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 6feaaa44597e5..599dd10d10ecb 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -6190,9 +6190,14 @@ { oid => '2171', descr => 'cancel a server process\' current query', proname => 'pg_cancel_backend', provolatile => 'v', prorettype => 'bool', proargtypes => 'int4', prosrc => 'pg_cancel_backend' }, -{ oid => '2096', descr => 'terminate a server process', +{ oid => '2096', descr => 'terminate a backend process and if timeout is specified, wait for its exit or until timeout occurs', proname => 'pg_terminate_backend', provolatile => 'v', prorettype => 'bool', - proargtypes => 'int4', prosrc => 'pg_terminate_backend' }, + proargtypes => 'int4 int8', proargnames => '{pid,timeout}', + prosrc => 'pg_terminate_backend' }, +{ oid => '2137', descr => 'wait for a backend process exit or timeout occurs', + proname => 'pg_wait_for_backend_termination', provolatile => 'v', prorettype => 'bool', + proargtypes => 'int4 int8', proargnames => '{pid,timeout}', + prosrc => 'pg_wait_for_backend_termination' }, { oid => '2172', descr => 'prepare for taking an online backup', proname => 'pg_start_backup', provolatile => 'v', proparallel => 'r', prorettype => 'pg_lsn', proargtypes => 'text bool bool', diff --git a/src/include/utils/wait_event.h b/src/include/utils/wait_event.h index 44448b48ec0c5..47accc5ffe22f 100644 --- a/src/include/utils/wait_event.h +++ b/src/include/utils/wait_event.h @@ -80,6 +80,7 @@ typedef enum typedef enum { WAIT_EVENT_APPEND_READY = PG_WAIT_IPC, + WAIT_EVENT_BACKEND_TERMINATION, WAIT_EVENT_BACKUP_WAIT_WAL_ARCHIVE, WAIT_EVENT_BGWORKER_SHUTDOWN, WAIT_EVENT_BGWORKER_STARTUP, From 7e3c54168d9ec058cb3c9d47f8105b1d32dc8ceb Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 8 Apr 2021 12:20:11 +0200 Subject: [PATCH 046/671] Add ORDER BY to some regression test queries Apparently, an unrelated patch introduced some variation on the build farm. Reported-by: Magnus Hagander --- src/test/regress/expected/create_function_3.out | 9 +++++---- src/test/regress/sql/create_function_3.sql | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/test/regress/expected/create_function_3.out b/src/test/regress/expected/create_function_3.out index 1fbaebcc72809..477130e620e2a 100644 --- a/src/test/regress/expected/create_function_3.out +++ b/src/test/regress/expected/create_function_3.out @@ -474,26 +474,27 @@ CREATE FUNCTION functest_IS_7() SELECT r0.routine_name, r1.routine_name FROM information_schema.routine_routine_usage rru JOIN information_schema.routines r0 ON r0.specific_name = rru.specific_name - JOIN information_schema.routines r1 ON r1.specific_name = rru.routine_name; + JOIN information_schema.routines r1 ON r1.specific_name = rru.routine_name + ORDER BY 1, 2; routine_name | routine_name ----------------+---------------- functest_is_4b | functest_is_4a (1 row) -SELECT routine_name, sequence_name FROM information_schema.routine_sequence_usage; +SELECT routine_name, sequence_name FROM information_schema.routine_sequence_usage ORDER BY 1, 2; routine_name | sequence_name ---------------+--------------- functest_is_5 | functest1 functest_is_6 | functest1 (2 rows) -SELECT routine_name, table_name, column_name FROM information_schema.routine_column_usage; +SELECT routine_name, table_name, column_name FROM information_schema.routine_column_usage ORDER BY 1, 2; routine_name | table_name | column_name ---------------+------------+------------- functest_is_7 | functest2 | a (1 row) -SELECT routine_name, table_name FROM information_schema.routine_table_usage; +SELECT routine_name, table_name FROM information_schema.routine_table_usage ORDER BY 1, 2; routine_name | table_name ---------------+------------ functest_is_7 | functest2 diff --git a/src/test/regress/sql/create_function_3.sql b/src/test/regress/sql/create_function_3.sql index 695ee3413f433..3575ecc69326c 100644 --- a/src/test/regress/sql/create_function_3.sql +++ b/src/test/regress/sql/create_function_3.sql @@ -276,10 +276,11 @@ CREATE FUNCTION functest_IS_7() SELECT r0.routine_name, r1.routine_name FROM information_schema.routine_routine_usage rru JOIN information_schema.routines r0 ON r0.specific_name = rru.specific_name - JOIN information_schema.routines r1 ON r1.specific_name = rru.routine_name; -SELECT routine_name, sequence_name FROM information_schema.routine_sequence_usage; -SELECT routine_name, table_name, column_name FROM information_schema.routine_column_usage; -SELECT routine_name, table_name FROM information_schema.routine_table_usage; + JOIN information_schema.routines r1 ON r1.specific_name = rru.routine_name + ORDER BY 1, 2; +SELECT routine_name, sequence_name FROM information_schema.routine_sequence_usage ORDER BY 1, 2; +SELECT routine_name, table_name, column_name FROM information_schema.routine_column_usage ORDER BY 1, 2; +SELECT routine_name, table_name FROM information_schema.routine_table_usage ORDER BY 1, 2; DROP FUNCTION functest_IS_4a CASCADE; DROP SEQUENCE functest1 CASCADE; From 5ac9c4307337313bedeafc21dbbab93ba809241c Mon Sep 17 00:00:00 2001 From: David Rowley Date: Thu, 8 Apr 2021 22:35:48 +1200 Subject: [PATCH 047/671] Cleanup partition pruning step generation There was some code in gen_prune_steps_from_opexps that needlessly checked a list was not empty when it clearly had to contain at least one item. This prompted a further cleanup operation in partprune.c. Additionally, the previous code could end up adding additional needless INTERSECT steps. However, those do not appear to be able to cause any misbehavior. gen_prune_steps_from_opexps is now no longer in charge of generating combine pruning steps. Instead, gen_partprune_steps_internal, which already does some combine step creation has been given the sole responsibility of generating all combine steps. This means that when we recursively call gen_partprune_steps_internal, since it always now adds a combine step when it produces multiple steps, we can just pay attention to the final step returned. In passing, do quite a bit of work on the comments to try to more clearly explain the role of both gen_partprune_steps_internal and gen_prune_steps_from_opexps. This is fairly complex code so some extra effort to give any new readers an overview of how things work seems like a good idea. Author: Amit Langote Reported-by: Andy Fan Reviewed-by: Kyotaro Horiguchi, Andy Fan, Ryan Lambert, David Rowley Discussion: https://postgr.es/m/CAKU4AWqWoVii+bRTeBQmeVW+PznkdO8DfbwqNsu9Gj4ubt9A6w@mail.gmail.com --- src/backend/partitioning/partbounds.c | 2 +- src/backend/partitioning/partprune.c | 167 +++++++++++++------------- src/include/nodes/plannodes.h | 2 +- 3 files changed, 84 insertions(+), 87 deletions(-) diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index 2b2b1dc1ad750..bfa6e27e9bb00 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -4067,7 +4067,7 @@ get_qual_for_list(Relation parent, PartitionBoundSpec *spec) if (!list_has_null) { /* - * Gin up a "col IS NOT NULL" test that will be AND'd with the main + * Gin up a "col IS NOT NULL" test that will be ANDed with the main * expression. This might seem redundant, but the partition routing * machinery needs it. */ diff --git a/src/backend/partitioning/partprune.c b/src/backend/partitioning/partprune.c index d08739127b9cf..c79374265c6d1 100644 --- a/src/backend/partitioning/partprune.c +++ b/src/backend/partitioning/partprune.c @@ -156,8 +156,8 @@ static PartitionPruneStep *gen_prune_step_op(GeneratePruningStepsContext *contex static PartitionPruneStep *gen_prune_step_combine(GeneratePruningStepsContext *context, List *source_stepids, PartitionPruneCombineOp combineOp); -static PartitionPruneStep *gen_prune_steps_from_opexps(GeneratePruningStepsContext *context, - List **keyclauses, Bitmapset *nullkeys); +static List *gen_prune_steps_from_opexps(GeneratePruningStepsContext *context, + List **keyclauses, Bitmapset *nullkeys); static PartClauseMatchStatus match_clause_to_partition_key(GeneratePruningStepsContext *context, Expr *clause, Expr *partkey, int partkeyidx, bool *clause_is_not_null, @@ -924,22 +924,34 @@ get_matching_partitions(PartitionPruneContext *context, List *pruning_steps) /* * gen_partprune_steps_internal - * Processes 'clauses' to generate partition pruning steps. - * - * From OpExpr clauses that are mutually AND'd, we find combinations of those - * that match to the partition key columns and for every such combination, - * we emit a PartitionPruneStepOp containing a vector of expressions whose - * values are used as a look up key to search partitions by comparing the - * values with partition bounds. Relevant details of the operator and a - * vector of (possibly cross-type) comparison functions is also included with - * each step. - * - * For BoolExpr clauses, we recursively generate steps for each argument, and - * return a PartitionPruneStepCombine of their results. - * - * The return value is a list of the steps generated, which are also added to - * the context's steps list. Each step is assigned a step identifier, unique - * even across recursive calls. + * Processes 'clauses' to generate a List of partition pruning steps. We + * return NIL when no steps were generated. + * + * These partition pruning steps come in 2 forms; operator steps and combine + * steps. + * + * Operator steps (PartitionPruneStepOp) contain details of clauses that we + * determined that we can use for partition pruning. These contain details of + * the expression which is being compared to the partition key and the + * comparison function. + * + * Combine steps (PartitionPruneStepCombine) instruct the partition pruning + * code how it should produce a single set of partitions from multiple input + * operator and other combine steps. A PARTPRUNE_COMBINE_INTERSECT type + * combine step will merge its input steps to produce a result which only + * contains the partitions which are present in all of the input operator + * steps. A PARTPRUNE_COMBINE_UNION combine step will produce a result that + * has all of the partitions from each of the input operator steps. + * + * For BoolExpr clauses, each argument is processed recursively. Steps + * generated from processing an OR BoolExpr will be combined using + * PARTPRUNE_COMBINE_UNION. AND BoolExprs get combined using + * PARTPRUNE_COMBINE_INTERSECT. + * + * Otherwise, the list of clauses we receive we assume to be mutually ANDed. + * We generate all of the pruning steps we can based on these clauses and then + * at the end, if we have more than 1 step, we combine each step with a + * PARTPRUNE_COMBINE_INTERSECT combine step. Single steps are returned as-is. * * If we find clauses that are mutually contradictory, or contradictory with * the partitioning constraint, or a pseudoconstant clause that contains @@ -1046,11 +1058,16 @@ gen_partprune_steps_internal(GeneratePruningStepsContext *context, if (argsteps != NIL) { - PartitionPruneStep *step; + /* + * gen_partprune_steps_internal() always adds a single + * combine step when it generates multiple steps, so + * here we can just pay attention to the last one in + * the list. If it just generated one, then the last + * one in the list is still the one we want. + */ + PartitionPruneStep *last = llast(argsteps); - Assert(list_length(argsteps) == 1); - step = (PartitionPruneStep *) linitial(argsteps); - arg_stepids = lappend_int(arg_stepids, step->step_id); + arg_stepids = lappend_int(arg_stepids, last->step_id); } else { @@ -1089,9 +1106,7 @@ gen_partprune_steps_internal(GeneratePruningStepsContext *context, else if (is_andclause(clause)) { List *args = ((BoolExpr *) clause)->args; - List *argsteps, - *arg_stepids = NIL; - ListCell *lc1; + List *argsteps; /* * args may itself contain clauses of arbitrary type, so just @@ -1104,21 +1119,16 @@ gen_partprune_steps_internal(GeneratePruningStepsContext *context, if (context->contradictory) return NIL; - foreach(lc1, argsteps) - { - PartitionPruneStep *step = lfirst(lc1); - - arg_stepids = lappend_int(arg_stepids, step->step_id); - } - - if (arg_stepids != NIL) - { - PartitionPruneStep *step; + /* + * gen_partprune_steps_internal() always adds a single combine + * step when it generates multiple steps, so here we can just + * pay attention to the last one in the list. If it just + * generated one, then the last one in the list is still the + * one we want. + */ + if (argsteps != NIL) + result = lappend(result, llast(argsteps)); - step = gen_prune_step_combine(context, arg_stepids, - PARTPRUNE_COMBINE_INTERSECT); - result = lappend(result, step); - } continue; } @@ -1253,12 +1263,11 @@ gen_partprune_steps_internal(GeneratePruningStepsContext *context, } else if (generate_opsteps) { - PartitionPruneStep *step; + List *opsteps; /* Strategy 2 */ - step = gen_prune_steps_from_opexps(context, keyclauses, nullkeys); - if (step != NULL) - result = lappend(result, step); + opsteps = gen_prune_steps_from_opexps(context, keyclauses, nullkeys); + result = list_concat(result, opsteps); } else if (bms_num_members(notnullkeys) == part_scheme->partnatts) { @@ -1271,12 +1280,14 @@ gen_partprune_steps_internal(GeneratePruningStepsContext *context, } /* - * Finally, results from all entries appearing in result should be - * combined using an INTERSECT combine step, if more than one. + * Finally, if there are multiple steps, since the 'clauses' are mutually + * ANDed, add an INTERSECT step to combine the partition sets resulting + * from them and append it to the result list. */ if (list_length(result) > 1) { List *step_ids = NIL; + PartitionPruneStep *final; foreach(lc, result) { @@ -1285,14 +1296,9 @@ gen_partprune_steps_internal(GeneratePruningStepsContext *context, step_ids = lappend_int(step_ids, step->step_id); } - if (step_ids != NIL) - { - PartitionPruneStep *step; - - step = gen_prune_step_combine(context, step_ids, - PARTPRUNE_COMBINE_INTERSECT); - result = lappend(result, step); - } + final = gen_prune_step_combine(context, step_ids, + PARTPRUNE_COMBINE_INTERSECT); + result = lappend(result, final); } return result; @@ -1356,15 +1362,26 @@ gen_prune_step_combine(GeneratePruningStepsContext *context, /* * gen_prune_steps_from_opexps - * Generate pruning steps based on clauses for partition keys - * - * 'keyclauses' contains one list of clauses per partition key. We check here - * if we have found clauses for a valid subset of the partition key. In some - * cases, (depending on the type of partitioning being used) if we didn't - * find clauses for a given key, we discard clauses that may have been - * found for any subsequent keys; see specific notes below. + * Generate and return a list of PartitionPruneStepOp that are based on + * OpExpr and BooleanTest clauses that have been matched to the partition + * key. + * + * 'keyclauses' is an array of List pointers, indexed by the partition key's + * index. Each List element in the array can contain clauses that match to + * the corresponding partition key column. Partition key columns without any + * matched clauses will have an empty List. + * + * Some partitioning strategies allow pruning to still occur when we only have + * clauses for a prefix of the partition key columns, for example, RANGE + * partitioning. Other strategies, such as HASH partitioning, require clauses + * for all partition key columns. + * + * When we return multiple pruning steps here, it's up to the caller to add a + * relevant "combine" step to combine the returned steps. This is not done + * here as callers may wish to include additional pruning steps before + * combining them all. */ -static PartitionPruneStep * +static List * gen_prune_steps_from_opexps(GeneratePruningStepsContext *context, List **keyclauses, Bitmapset *nullkeys) { @@ -1397,7 +1414,7 @@ gen_prune_steps_from_opexps(GeneratePruningStepsContext *context, */ if (part_scheme->strategy == PARTITION_STRATEGY_HASH && clauselist == NIL && !bms_is_member(i, nullkeys)) - return NULL; + return NIL; foreach(lc, clauselist) { @@ -1728,27 +1745,7 @@ gen_prune_steps_from_opexps(GeneratePruningStepsContext *context, break; } - /* Lastly, add a combine step to mutually AND these op steps, if needed */ - if (list_length(opsteps) > 1) - { - List *opstep_ids = NIL; - - foreach(lc, opsteps) - { - PartitionPruneStep *step = lfirst(lc); - - opstep_ids = lappend_int(opstep_ids, step->step_id); - } - - if (opstep_ids != NIL) - return gen_prune_step_combine(context, opstep_ids, - PARTPRUNE_COMBINE_INTERSECT); - return NULL; - } - else if (opsteps != NIL) - return linitial(opsteps); - - return NULL; + return opsteps; } /* @@ -1782,8 +1779,8 @@ gen_prune_steps_from_opexps(GeneratePruningStepsContext *context, * true otherwise. * * * PARTCLAUSE_MATCH_STEPS if there is a match. - * Output arguments: *clause_steps is set to a list of PartitionPruneStep - * generated for the clause. + * Output arguments: *clause_steps is set to the list of recursively + * generated steps for the clause. * * * PARTCLAUSE_MATCH_CONTRADICT if the clause is self-contradictory, ie * it provably returns FALSE or NULL. diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h index 1678bd66fed25..d671328dfd66b 100644 --- a/src/include/nodes/plannodes.h +++ b/src/include/nodes/plannodes.h @@ -1215,7 +1215,7 @@ typedef struct PartitionPruneStep } PartitionPruneStep; /* - * PartitionPruneStepOp - Information to prune using a set of mutually AND'd + * PartitionPruneStepOp - Information to prune using a set of mutually ANDed * OpExpr clauses * * This contains information extracted from up to partnatts OpExpr clauses, From 323cbe7c7ddcf18aaf24b7f6d682a45a61d4e31b Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Thu, 8 Apr 2021 23:03:23 +1200 Subject: [PATCH 048/671] Remove read_page callback from XLogReader. Previously, the XLogReader module would fetch new input data using a callback function. Redesign the interface so that it tells the caller to insert more data with a special return value instead. This API suits later patches for prefetching, encryption and maybe other future projects that would otherwise require continually extending the callback interface. As incidental cleanup work, move global variables readOff, readLen and readSegNo inside XlogReaderState. Author: Kyotaro HORIGUCHI Author: Heikki Linnakangas (parts of earlier version) Reviewed-by: Antonin Houska Reviewed-by: Alvaro Herrera Reviewed-by: Takashi Menjo Reviewed-by: Andres Freund Reviewed-by: Thomas Munro Discussion: https://postgr.es/m/20190418.210257.43726183.horiguchi.kyotaro%40lab.ntt.co.jp --- src/backend/access/transam/twophase.c | 14 +- src/backend/access/transam/xlog.c | 126 ++- src/backend/access/transam/xlogreader.c | 931 +++++++++++------- src/backend/access/transam/xlogutils.c | 24 +- src/backend/replication/logical/logical.c | 26 +- .../replication/logical/logicalfuncs.c | 13 +- src/backend/replication/slotfuncs.c | 18 +- src/backend/replication/walsender.c | 42 +- src/bin/pg_rewind/parsexlog.c | 107 +- src/bin/pg_waldump/pg_waldump.c | 138 +-- src/include/access/xlogreader.h | 153 +-- src/include/access/xlogutils.h | 4 +- src/include/replication/logical.h | 11 +- 13 files changed, 930 insertions(+), 677 deletions(-) diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index 89335b64a24b5..3137cb3ecc153 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -1330,11 +1330,8 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len) char *errormsg; TimeLineID save_currtli = ThisTimeLineID; - xlogreader = XLogReaderAllocate(wal_segment_size, NULL, - XL_ROUTINE(.page_read = &read_local_xlog_page, - .segment_open = &wal_segment_open, - .segment_close = &wal_segment_close), - NULL); + xlogreader = XLogReaderAllocate(wal_segment_size, NULL, wal_segment_close); + if (!xlogreader) ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), @@ -1342,7 +1339,12 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len) errdetail("Failed while allocating a WAL reading processor."))); XLogBeginRead(xlogreader, lsn); - record = XLogReadRecord(xlogreader, &errormsg); + while (XLogReadRecord(xlogreader, &record, &errormsg) == + XLREAD_NEED_DATA) + { + if (!read_local_xlog_page(xlogreader)) + break; + } /* * Restore immediately the timeline where it was previously, as diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index c1d4415a43340..7faac01bf2433 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -811,17 +811,13 @@ static XLogSegNo openLogSegNo = 0; * These variables are used similarly to the ones above, but for reading * the XLOG. Note, however, that readOff generally represents the offset * of the page just read, not the seek position of the FD itself, which - * will be just past that page. readLen indicates how much of the current - * page has been read into readBuf, and readSource indicates where we got - * the currently open file from. + * will be just past that page. readSource indicates where we got the + * currently open file from. * Note: we could use Reserve/ReleaseExternalFD to track consumption of * this FD too; but it doesn't currently seem worthwhile, since the XLOG is * not read by general-purpose sessions. */ static int readFile = -1; -static XLogSegNo readSegNo = 0; -static uint32 readOff = 0; -static uint32 readLen = 0; static XLogSource readSource = XLOG_FROM_ANY; /* @@ -838,13 +834,6 @@ static XLogSource currentSource = XLOG_FROM_ANY; static bool lastSourceFailed = false; static bool pendingWalRcvRestart = false; -typedef struct XLogPageReadPrivate -{ - int emode; - bool fetching_ckpt; /* are we fetching a checkpoint record? */ - bool randAccess; -} XLogPageReadPrivate; - /* * These variables track when we last obtained some WAL data to process, * and where we got it from. (XLogReceiptSource is initially the same as @@ -920,10 +909,12 @@ static bool InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, static int XLogFileRead(XLogSegNo segno, int emode, TimeLineID tli, XLogSource source, bool notfoundOk); static int XLogFileReadAnyTLI(XLogSegNo segno, int emode, XLogSource source); -static int XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, - int reqLen, XLogRecPtr targetRecPtr, char *readBuf); +static bool XLogPageRead(XLogReaderState *state, + bool fetching_ckpt, int emode, bool randAccess); static bool WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, - bool fetching_ckpt, XLogRecPtr tliRecPtr); + bool fetching_ckpt, + XLogRecPtr tliRecPtr, + XLogSegNo readSegNo); static int emode_for_corrupt_record(int emode, XLogRecPtr RecPtr); static void XLogFileClose(void); static void PreallocXlogFiles(XLogRecPtr endptr); @@ -1234,8 +1225,7 @@ XLogInsertRecord(XLogRecData *rdata, appendBinaryStringInfo(&recordBuf, rdata->data, rdata->len); if (!debug_reader) - debug_reader = XLogReaderAllocate(wal_segment_size, NULL, - XL_ROUTINE(), NULL); + debug_reader = XLogReaderAllocate(wal_segment_size, NULL, NULL); if (!debug_reader) { @@ -4373,12 +4363,7 @@ ReadRecord(XLogReaderState *xlogreader, int emode, bool fetching_ckpt) { XLogRecord *record; - XLogPageReadPrivate *private = (XLogPageReadPrivate *) xlogreader->private_data; - - /* Pass through parameters to XLogPageRead */ - private->fetching_ckpt = fetching_ckpt; - private->emode = emode; - private->randAccess = (xlogreader->ReadRecPtr == InvalidXLogRecPtr); + bool randAccess = (xlogreader->ReadRecPtr == InvalidXLogRecPtr); /* This is the first attempt to read this page. */ lastSourceFailed = false; @@ -4386,8 +4371,16 @@ ReadRecord(XLogReaderState *xlogreader, int emode, for (;;) { char *errormsg; + XLogReadRecordResult result; + + while ((result = XLogReadRecord(xlogreader, &record, &errormsg)) + == XLREAD_NEED_DATA) + { + if (!XLogPageRead(xlogreader, fetching_ckpt, emode, randAccess)) + break; + + } - record = XLogReadRecord(xlogreader, &errormsg); ReadRecPtr = xlogreader->ReadRecPtr; EndRecPtr = xlogreader->EndRecPtr; if (record == NULL) @@ -6457,7 +6450,6 @@ StartupXLOG(void) bool backupFromStandby = false; DBState dbstate_at_startup; XLogReaderState *xlogreader; - XLogPageReadPrivate private; bool promoted = false; struct stat st; @@ -6616,13 +6608,9 @@ StartupXLOG(void) OwnLatch(&XLogCtl->recoveryWakeupLatch); /* Set up XLOG reader facility */ - MemSet(&private, 0, sizeof(XLogPageReadPrivate)); xlogreader = - XLogReaderAllocate(wal_segment_size, NULL, - XL_ROUTINE(.page_read = &XLogPageRead, - .segment_open = NULL, - .segment_close = wal_segment_close), - &private); + XLogReaderAllocate(wal_segment_size, NULL, wal_segment_close); + if (!xlogreader) ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), @@ -7819,7 +7807,8 @@ StartupXLOG(void) XLogRecPtr pageBeginPtr; pageBeginPtr = EndOfLog - (EndOfLog % XLOG_BLCKSZ); - Assert(readOff == XLogSegmentOffset(pageBeginPtr, wal_segment_size)); + Assert(XLogSegmentOffset(xlogreader->readPagePtr, wal_segment_size) == + XLogSegmentOffset(pageBeginPtr, wal_segment_size)); firstIdx = XLogRecPtrToBufIdx(EndOfLog); @@ -12107,13 +12096,15 @@ CancelBackup(void) * XLogPageRead() to try fetching the record from another source, or to * sleep and retry. */ -static int -XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, - XLogRecPtr targetRecPtr, char *readBuf) -{ - XLogPageReadPrivate *private = - (XLogPageReadPrivate *) xlogreader->private_data; - int emode = private->emode; +static bool +XLogPageRead(XLogReaderState *state, + bool fetching_ckpt, int emode, bool randAccess) +{ + char *readBuf = state->readBuf; + XLogRecPtr targetPagePtr = state->readPagePtr; + int reqLen = state->reqLen; + int readLen = 0; + XLogRecPtr targetRecPtr = state->ReadRecPtr; uint32 targetPageOff; XLogSegNo targetSegNo PG_USED_FOR_ASSERTS_ONLY; int r; @@ -12126,7 +12117,7 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, * is not in the currently open one. */ if (readFile >= 0 && - !XLByteInSeg(targetPagePtr, readSegNo, wal_segment_size)) + !XLByteInSeg(targetPagePtr, state->seg.ws_segno, wal_segment_size)) { /* * Request a restartpoint if we've replayed too much xlog since the @@ -12134,10 +12125,10 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, */ if (bgwriterLaunched) { - if (XLogCheckpointNeeded(readSegNo)) + if (XLogCheckpointNeeded(state->seg.ws_segno)) { (void) GetRedoRecPtr(); - if (XLogCheckpointNeeded(readSegNo)) + if (XLogCheckpointNeeded(state->seg.ws_segno)) RequestCheckpoint(CHECKPOINT_CAUSE_XLOG); } } @@ -12147,7 +12138,7 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, readSource = XLOG_FROM_ANY; } - XLByteToSeg(targetPagePtr, readSegNo, wal_segment_size); + XLByteToSeg(targetPagePtr, state->seg.ws_segno, wal_segment_size); retry: /* See if we need to retrieve more data */ @@ -12156,17 +12147,15 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, flushedUpto < targetPagePtr + reqLen)) { if (!WaitForWALToBecomeAvailable(targetPagePtr + reqLen, - private->randAccess, - private->fetching_ckpt, - targetRecPtr)) + randAccess, fetching_ckpt, + targetRecPtr, state->seg.ws_segno)) { if (readFile >= 0) close(readFile); readFile = -1; - readLen = 0; readSource = XLOG_FROM_ANY; - - return -1; + XLogReaderSetInputData(state, -1); + return false; } } @@ -12193,40 +12182,36 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, else readLen = XLOG_BLCKSZ; - /* Read the requested page */ - readOff = targetPageOff; - pgstat_report_wait_start(WAIT_EVENT_WAL_READ); - r = pg_pread(readFile, readBuf, XLOG_BLCKSZ, (off_t) readOff); + r = pg_pread(readFile, readBuf, XLOG_BLCKSZ, (off_t) targetPageOff); if (r != XLOG_BLCKSZ) { char fname[MAXFNAMELEN]; int save_errno = errno; pgstat_report_wait_end(); - XLogFileName(fname, curFileTLI, readSegNo, wal_segment_size); + XLogFileName(fname, curFileTLI, state->seg.ws_segno, wal_segment_size); if (r < 0) { errno = save_errno; ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen), (errcode_for_file_access(), errmsg("could not read from log segment %s, offset %u: %m", - fname, readOff))); + fname, targetPageOff))); } else ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen), (errcode(ERRCODE_DATA_CORRUPTED), errmsg("could not read from log segment %s, offset %u: read %d of %zu", - fname, readOff, r, (Size) XLOG_BLCKSZ))); + fname, targetPageOff, r, (Size) XLOG_BLCKSZ))); goto next_record_is_invalid; } pgstat_report_wait_end(); - Assert(targetSegNo == readSegNo); - Assert(targetPageOff == readOff); - Assert(reqLen <= readLen); + Assert(targetSegNo == state->seg.ws_segno); + Assert(readLen >= reqLen); - xlogreader->seg.ws_tli = curFileTLI; + state->seg.ws_tli = curFileTLI; /* * Check the page header immediately, so that we can retry immediately if @@ -12254,14 +12239,16 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, * Validating the page header is cheap enough that doing it twice * shouldn't be a big deal from a performance point of view. */ - if (!XLogReaderValidatePageHeader(xlogreader, targetPagePtr, readBuf)) + if (!XLogReaderValidatePageHeader(state, targetPagePtr, readBuf)) { - /* reset any error XLogReaderValidatePageHeader() might have set */ - xlogreader->errormsg_buf[0] = '\0'; + /* reset any error StateValidatePageHeader() might have set */ + state->errormsg_buf[0] = '\0'; goto next_record_is_invalid; } - return readLen; + Assert(state->readPagePtr == targetPagePtr); + XLogReaderSetInputData(state, readLen); + return true; next_record_is_invalid: lastSourceFailed = true; @@ -12269,14 +12256,14 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, if (readFile >= 0) close(readFile); readFile = -1; - readLen = 0; readSource = XLOG_FROM_ANY; /* In standby-mode, keep trying */ if (StandbyMode) goto retry; - else - return -1; + + XLogReaderSetInputData(state, -1); + return false; } /* @@ -12307,7 +12294,8 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, */ static bool WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, - bool fetching_ckpt, XLogRecPtr tliRecPtr) + bool fetching_ckpt, XLogRecPtr tliRecPtr, + XLogSegNo readSegNo) { static TimestampTz last_fail_time = 0; TimestampTz now; diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index 42738eb940c2c..02257768ec86a 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -36,11 +36,11 @@ static void report_invalid_record(XLogReaderState *state, const char *fmt,...) pg_attribute_printf(2, 3); static bool allocate_recordbuf(XLogReaderState *state, uint32 reclength); -static int ReadPageInternal(XLogReaderState *state, XLogRecPtr pageptr, - int reqLen); +static bool XLogNeedData(XLogReaderState *state, XLogRecPtr pageptr, + int reqLen, bool header_inclusive); static void XLogReaderInvalReadState(XLogReaderState *state); static bool ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr, - XLogRecPtr PrevRecPtr, XLogRecord *record, bool randAccess); + XLogRecPtr PrevRecPtr, XLogRecord *record); static bool ValidXLogRecord(XLogReaderState *state, XLogRecord *record, XLogRecPtr recptr); static void ResetDecoder(XLogReaderState *state); @@ -73,7 +73,7 @@ report_invalid_record(XLogReaderState *state, const char *fmt,...) */ XLogReaderState * XLogReaderAllocate(int wal_segment_size, const char *waldir, - XLogReaderRoutine *routine, void *private_data) + WALSegmentCleanupCB cleanup_cb) { XLogReaderState *state; @@ -84,7 +84,7 @@ XLogReaderAllocate(int wal_segment_size, const char *waldir, return NULL; /* initialize caller-provided support functions */ - state->routine = *routine; + state->cleanup_cb = cleanup_cb; state->max_block_id = -1; @@ -107,9 +107,7 @@ XLogReaderAllocate(int wal_segment_size, const char *waldir, WALOpenSegmentInit(&state->seg, &state->segcxt, wal_segment_size, waldir); - /* system_identifier initialized to zeroes above */ - state->private_data = private_data; - /* ReadRecPtr, EndRecPtr and readLen initialized to zeroes above */ + /* ReadRecPtr, EndRecPtr, reqLen and readLen initialized to zeroes above */ state->errormsg_buf = palloc_extended(MAX_ERRORMSG_LEN + 1, MCXT_ALLOC_NO_OOM); if (!state->errormsg_buf) @@ -140,8 +138,8 @@ XLogReaderFree(XLogReaderState *state) { int block_id; - if (state->seg.ws_file != -1) - state->routine.segment_close(state); + if (state->seg.ws_file >= 0) + state->cleanup_cb(state); for (block_id = 0; block_id <= XLR_MAX_BLOCK_ID; block_id++) { @@ -246,6 +244,7 @@ XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr) /* Begin at the passed-in record pointer. */ state->EndRecPtr = RecPtr; state->ReadRecPtr = InvalidXLogRecPtr; + state->readRecordState = XLREAD_NEXT_RECORD; } /* @@ -254,303 +253,456 @@ XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr) * XLogBeginRead() or XLogFindNextRecord() must be called before the first call * to XLogReadRecord(). * - * If the page_read callback fails to read the requested data, NULL is - * returned. The callback is expected to have reported the error; errormsg - * is set to NULL. + * This function may return XLREAD_NEED_DATA several times before returning a + * result record. The caller shall read in some new data then call this + * function again with the same parameters. * - * If the reading fails for some other reason, NULL is also returned, and - * *errormsg is set to a string with details of the failure. + * When a record is successfully read, returns XLREAD_SUCCESS with result + * record being stored in *record. Otherwise *record is NULL. * - * The returned pointer (or *errormsg) points to an internal buffer that's - * valid until the next call to XLogReadRecord. + * Returns XLREAD_NEED_DATA if more data is needed to finish decoding the + * current record. In that case, state->readPagePtr and state->reqLen inform + * the desired position and minimum length of data needed. The caller shall + * read in the requested data and set state->readBuf to point to a buffer + * containing it. The caller must also set state->seg->ws_tli and + * state->readLen to indicate the timeline that it was read from, and the + * length of data that is now available (which must be >= given reqLen), + * respectively. + * + * If invalid data is encountered, returns XLREAD_FAIL and sets *record to + * NULL. *errormsg is set to a string with details of the failure. The + * returned pointer (or *errormsg) points to an internal buffer that's valid + * until the next call to XLogReadRecord. + * + * + * This function runs a state machine consisting of the following states. + * + * XLREAD_NEXT_RECORD: + * The initial state. If called with a valid XLogRecPtr, try to read a + * record at that position. If invalid RecPtr is given try to read a record + * just after the last one read. The next state is XLREAD_TOT_LEN. + * + * XLREAD_TOT_LEN: + * Examining record header. Ends after reading record length. + * recordRemainLen and recordGotLen are initialized. The next state is + * XLREAD_FIRST_FRAGMENT. + * + * XLREAD_FIRST_FRAGMENT: + * Reading the first fragment. Goes to XLREAD_NEXT_RECORD if that's all or + * XLREAD_CONTINUATION if we need more data. + + * XLREAD_CONTINUATION: + * Reading continuation of record. If the whole record is now decoded, goes + * to XLREAD_NEXT_RECORD. During this state, recordRemainLen indicates how + * much is left. + * + * If invalid data is found in any state, the state machine stays at the + * current state. This behavior allows us to continue reading a record + * after switching to a different source, during streaming replication. */ -XLogRecord * -XLogReadRecord(XLogReaderState *state, char **errormsg) +XLogReadRecordResult +XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) { - XLogRecPtr RecPtr; - XLogRecord *record; - XLogRecPtr targetPagePtr; - bool randAccess; - uint32 len, - total_len; - uint32 targetRecOff; - uint32 pageHeaderSize; - bool gotheader; - int readOff; + XLogRecord *prec; - /* - * randAccess indicates whether to verify the previous-record pointer of - * the record we're reading. We only do this if we're reading - * sequentially, which is what we initially assume. - */ - randAccess = false; + *record = NULL; /* reset error state */ *errormsg = NULL; state->errormsg_buf[0] = '\0'; - ResetDecoder(state); + switch (state->readRecordState) + { + case XLREAD_NEXT_RECORD: + ResetDecoder(state); - RecPtr = state->EndRecPtr; + if (state->ReadRecPtr != InvalidXLogRecPtr) + { + /* read the record after the one we just read */ - if (state->ReadRecPtr != InvalidXLogRecPtr) - { - /* read the record after the one we just read */ + /* + * EndRecPtr is pointing to end+1 of the previous WAL record. + * If we're at a page boundary, no more records can fit on the + * current page. We must skip over the page header, but we + * can't do that until we've read in the page, since the + * header size is variable. + */ + state->PrevRecPtr = state->ReadRecPtr; + state->ReadRecPtr = state->EndRecPtr; + } + else + { + /* + * Caller supplied a position to start at. + * + * In this case, EndRecPtr should already be pointing to a + * valid record starting position. + */ + Assert(XRecOffIsValid(state->EndRecPtr)); + state->ReadRecPtr = state->EndRecPtr; - /* - * EndRecPtr is pointing to end+1 of the previous WAL record. If - * we're at a page boundary, no more records can fit on the current - * page. We must skip over the page header, but we can't do that until - * we've read in the page, since the header size is variable. - */ - } - else - { - /* - * Caller supplied a position to start at. - * - * In this case, EndRecPtr should already be pointing to a valid - * record starting position. - */ - Assert(XRecOffIsValid(RecPtr)); - randAccess = true; - } + /* + * We cannot verify the previous-record pointer when we're + * seeking to a particular record. Reset PrevRecPtr so that we + * won't try doing that. + */ + state->PrevRecPtr = InvalidXLogRecPtr; + state->EndRecPtr = InvalidXLogRecPtr; /* to be tidy */ + } - state->currRecPtr = RecPtr; + state->record_verified = false; + state->readRecordState = XLREAD_TOT_LEN; + /* fall through */ - targetPagePtr = RecPtr - (RecPtr % XLOG_BLCKSZ); - targetRecOff = RecPtr % XLOG_BLCKSZ; + case XLREAD_TOT_LEN: + { + uint32 total_len; + uint32 pageHeaderSize; + XLogRecPtr targetPagePtr; + uint32 targetRecOff; + XLogPageHeader pageHeader; - /* - * Read the page containing the record into state->readBuf. Request enough - * byte to cover the whole record header, or at least the part of it that - * fits on the same page. - */ - readOff = ReadPageInternal(state, targetPagePtr, - Min(targetRecOff + SizeOfXLogRecord, XLOG_BLCKSZ)); - if (readOff < 0) - goto err; + targetPagePtr = + state->ReadRecPtr - (state->ReadRecPtr % XLOG_BLCKSZ); + targetRecOff = state->ReadRecPtr % XLOG_BLCKSZ; - /* - * ReadPageInternal always returns at least the page header, so we can - * examine it now. - */ - pageHeaderSize = XLogPageHeaderSize((XLogPageHeader) state->readBuf); - if (targetRecOff == 0) - { - /* - * At page start, so skip over page header. - */ - RecPtr += pageHeaderSize; - targetRecOff = pageHeaderSize; - } - else if (targetRecOff < pageHeaderSize) - { - report_invalid_record(state, "invalid record offset at %X/%X", - LSN_FORMAT_ARGS(RecPtr)); - goto err; - } + /* + * Check if we have enough data. For the first record in the + * page, the requesting length doesn't contain page header. + */ + if (XLogNeedData(state, targetPagePtr, + Min(targetRecOff + SizeOfXLogRecord, XLOG_BLCKSZ), + targetRecOff != 0)) + return XLREAD_NEED_DATA; - if ((((XLogPageHeader) state->readBuf)->xlp_info & XLP_FIRST_IS_CONTRECORD) && - targetRecOff == pageHeaderSize) - { - report_invalid_record(state, "contrecord is requested by %X/%X", - LSN_FORMAT_ARGS(RecPtr)); - goto err; - } + /* error out if caller supplied bogus page */ + if (!state->page_verified) + goto err; - /* ReadPageInternal has verified the page header */ - Assert(pageHeaderSize <= readOff); + /* examine page header now. */ + pageHeaderSize = + XLogPageHeaderSize((XLogPageHeader) state->readBuf); + if (targetRecOff == 0) + { + /* At page start, so skip over page header. */ + state->ReadRecPtr += pageHeaderSize; + targetRecOff = pageHeaderSize; + } + else if (targetRecOff < pageHeaderSize) + { + report_invalid_record(state, "invalid record offset at %X/%X", + LSN_FORMAT_ARGS(state->ReadRecPtr)); + goto err; + } - /* - * Read the record length. - * - * NB: Even though we use an XLogRecord pointer here, the whole record - * header might not fit on this page. xl_tot_len is the first field of the - * struct, so it must be on this page (the records are MAXALIGNed), but we - * cannot access any other fields until we've verified that we got the - * whole header. - */ - record = (XLogRecord *) (state->readBuf + RecPtr % XLOG_BLCKSZ); - total_len = record->xl_tot_len; + pageHeader = (XLogPageHeader) state->readBuf; + if ((pageHeader->xlp_info & XLP_FIRST_IS_CONTRECORD) && + targetRecOff == pageHeaderSize) + { + report_invalid_record(state, "contrecord is requested by %X/%X", + (uint32) (state->ReadRecPtr >> 32), + (uint32) state->ReadRecPtr); + goto err; + } - /* - * If the whole record header is on this page, validate it immediately. - * Otherwise do just a basic sanity check on xl_tot_len, and validate the - * rest of the header after reading it from the next page. The xl_tot_len - * check is necessary here to ensure that we enter the "Need to reassemble - * record" code path below; otherwise we might fail to apply - * ValidXLogRecordHeader at all. - */ - if (targetRecOff <= XLOG_BLCKSZ - SizeOfXLogRecord) - { - if (!ValidXLogRecordHeader(state, RecPtr, state->ReadRecPtr, record, - randAccess)) - goto err; - gotheader = true; - } - else - { - /* XXX: more validation should be done here */ - if (total_len < SizeOfXLogRecord) - { - report_invalid_record(state, - "invalid record length at %X/%X: wanted %u, got %u", - LSN_FORMAT_ARGS(RecPtr), - (uint32) SizeOfXLogRecord, total_len); - goto err; - } - gotheader = false; - } + /* XLogNeedData has verified the page header */ + Assert(pageHeaderSize <= state->readLen); - len = XLOG_BLCKSZ - RecPtr % XLOG_BLCKSZ; - if (total_len > len) - { - /* Need to reassemble record */ - char *contdata; - XLogPageHeader pageHeader; - char *buffer; - uint32 gotlen; + /* + * Read the record length. + * + * NB: Even though we use an XLogRecord pointer here, the + * whole record header might not fit on this page. xl_tot_len + * is the first field of the struct, so it must be on this + * page (the records are MAXALIGNed), but we cannot access any + * other fields until we've verified that we got the whole + * header. + */ + prec = (XLogRecord *) (state->readBuf + + state->ReadRecPtr % XLOG_BLCKSZ); + total_len = prec->xl_tot_len; - /* - * Enlarge readRecordBuf as needed. - */ - if (total_len > state->readRecordBufSize && - !allocate_recordbuf(state, total_len)) - { - /* We treat this as a "bogus data" condition */ - report_invalid_record(state, "record length %u at %X/%X too long", - total_len, LSN_FORMAT_ARGS(RecPtr)); - goto err; - } + /* + * If the whole record header is on this page, validate it + * immediately. Otherwise do just a basic sanity check on + * xl_tot_len, and validate the rest of the header after + * reading it from the next page. The xl_tot_len check is + * necessary here to ensure that we enter the + * XLREAD_CONTINUATION state below; otherwise we might fail to + * apply ValidXLogRecordHeader at all. + */ + if (targetRecOff <= XLOG_BLCKSZ - SizeOfXLogRecord) + { + if (!ValidXLogRecordHeader(state, state->ReadRecPtr, + state->PrevRecPtr, prec)) + goto err; - /* Copy the first fragment of the record from the first page. */ - memcpy(state->readRecordBuf, - state->readBuf + RecPtr % XLOG_BLCKSZ, len); - buffer = state->readRecordBuf + len; - gotlen = len; + state->record_verified = true; + } + else + { + /* XXX: more validation should be done here */ + if (total_len < SizeOfXLogRecord) + { + report_invalid_record(state, + "invalid record length at %X/%X: wanted %u, got %u", + LSN_FORMAT_ARGS(state->ReadRecPtr), + (uint32) SizeOfXLogRecord, total_len); + goto err; + } + } - do - { - /* Calculate pointer to beginning of next page */ - targetPagePtr += XLOG_BLCKSZ; + /* + * Wait for the rest of the record, or the part of the record + * that fit on the first page if crossed a page boundary, to + * become available. + */ + state->recordGotLen = 0; + state->recordRemainLen = total_len; + state->readRecordState = XLREAD_FIRST_FRAGMENT; + } + /* fall through */ - /* Wait for the next page to become available */ - readOff = ReadPageInternal(state, targetPagePtr, - Min(total_len - gotlen + SizeOfXLogShortPHD, - XLOG_BLCKSZ)); + case XLREAD_FIRST_FRAGMENT: + { + uint32 total_len = state->recordRemainLen; + uint32 request_len; + uint32 record_len; + XLogRecPtr targetPagePtr; + uint32 targetRecOff; - if (readOff < 0) - goto err; + /* + * Wait for the rest of the record on the first page to become + * available + */ + targetPagePtr = + state->ReadRecPtr - (state->ReadRecPtr % XLOG_BLCKSZ); + targetRecOff = state->ReadRecPtr % XLOG_BLCKSZ; - Assert(SizeOfXLogShortPHD <= readOff); + request_len = Min(targetRecOff + total_len, XLOG_BLCKSZ); + record_len = request_len - targetRecOff; - /* Check that the continuation on next page looks valid */ - pageHeader = (XLogPageHeader) state->readBuf; - if (!(pageHeader->xlp_info & XLP_FIRST_IS_CONTRECORD)) - { - report_invalid_record(state, - "there is no contrecord flag at %X/%X", - LSN_FORMAT_ARGS(RecPtr)); - goto err; - } + /* ReadRecPtr contains page header */ + Assert(targetRecOff != 0); + if (XLogNeedData(state, targetPagePtr, request_len, true)) + return XLREAD_NEED_DATA; - /* - * Cross-check that xlp_rem_len agrees with how much of the record - * we expect there to be left. - */ - if (pageHeader->xlp_rem_len == 0 || - total_len != (pageHeader->xlp_rem_len + gotlen)) - { - report_invalid_record(state, - "invalid contrecord length %u (expected %lld) at %X/%X", - pageHeader->xlp_rem_len, - ((long long) total_len) - gotlen, - LSN_FORMAT_ARGS(RecPtr)); - goto err; - } + /* error out if caller supplied bogus page */ + if (!state->page_verified) + goto err; - /* Append the continuation from this page to the buffer */ - pageHeaderSize = XLogPageHeaderSize(pageHeader); + prec = (XLogRecord *) (state->readBuf + targetRecOff); - if (readOff < pageHeaderSize) - readOff = ReadPageInternal(state, targetPagePtr, - pageHeaderSize); + /* validate record header if not yet */ + if (!state->record_verified && record_len >= SizeOfXLogRecord) + { + if (!ValidXLogRecordHeader(state, state->ReadRecPtr, + state->PrevRecPtr, prec)) + goto err; - Assert(pageHeaderSize <= readOff); + state->record_verified = true; + } - contdata = (char *) state->readBuf + pageHeaderSize; - len = XLOG_BLCKSZ - pageHeaderSize; - if (pageHeader->xlp_rem_len < len) - len = pageHeader->xlp_rem_len; - if (readOff < pageHeaderSize + len) - readOff = ReadPageInternal(state, targetPagePtr, - pageHeaderSize + len); + if (total_len == record_len) + { + /* Record does not cross a page boundary */ + Assert(state->record_verified); - memcpy(buffer, (char *) contdata, len); - buffer += len; - gotlen += len; + if (!ValidXLogRecord(state, prec, state->ReadRecPtr)) + goto err; - /* If we just reassembled the record header, validate it. */ - if (!gotheader) - { - record = (XLogRecord *) state->readRecordBuf; - if (!ValidXLogRecordHeader(state, RecPtr, state->ReadRecPtr, - record, randAccess)) + state->record_verified = true; /* to be tidy */ + + /* We already checked the header earlier */ + state->EndRecPtr = state->ReadRecPtr + MAXALIGN(record_len); + + *record = prec; + state->readRecordState = XLREAD_NEXT_RECORD; + break; + } + + /* + * The record continues on the next page. Need to reassemble + * record + */ + Assert(total_len > record_len); + + /* Enlarge readRecordBuf as needed. */ + if (total_len > state->readRecordBufSize && + !allocate_recordbuf(state, total_len)) + { + /* We treat this as a "bogus data" condition */ + report_invalid_record(state, + "record length %u at %X/%X too long", + total_len, + LSN_FORMAT_ARGS(state->ReadRecPtr)); goto err; - gotheader = true; + } + + /* Copy the first fragment of the record from the first page. */ + memcpy(state->readRecordBuf, state->readBuf + targetRecOff, + record_len); + state->recordGotLen += record_len; + state->recordRemainLen -= record_len; + + /* Calculate pointer to beginning of next page */ + state->recordContRecPtr = state->ReadRecPtr + record_len; + Assert(state->recordContRecPtr % XLOG_BLCKSZ == 0); + + state->readRecordState = XLREAD_CONTINUATION; } - } while (gotlen < total_len); + /* fall through */ - Assert(gotheader); + case XLREAD_CONTINUATION: + { + XLogPageHeader pageHeader = NULL; + uint32 pageHeaderSize; + XLogRecPtr targetPagePtr = InvalidXLogRecPtr; - record = (XLogRecord *) state->readRecordBuf; - if (!ValidXLogRecord(state, record, RecPtr)) - goto err; + /* + * we enter this state only if we haven't read the whole + * record. + */ + Assert(state->recordRemainLen > 0); - pageHeaderSize = XLogPageHeaderSize((XLogPageHeader) state->readBuf); - state->ReadRecPtr = RecPtr; - state->EndRecPtr = targetPagePtr + pageHeaderSize - + MAXALIGN(pageHeader->xlp_rem_len); - } - else - { - /* Wait for the record data to become available */ - readOff = ReadPageInternal(state, targetPagePtr, - Min(targetRecOff + total_len, XLOG_BLCKSZ)); - if (readOff < 0) - goto err; + while (state->recordRemainLen > 0) + { + char *contdata; + uint32 request_len PG_USED_FOR_ASSERTS_ONLY; + uint32 record_len; + + /* Wait for the next page to become available */ + targetPagePtr = state->recordContRecPtr; + + /* this request contains page header */ + Assert(targetPagePtr != 0); + if (XLogNeedData(state, targetPagePtr, + Min(state->recordRemainLen, XLOG_BLCKSZ), + false)) + return XLREAD_NEED_DATA; + + if (!state->page_verified) + goto err; + + Assert(SizeOfXLogShortPHD <= state->readLen); + + /* Check that the continuation on next page looks valid */ + pageHeader = (XLogPageHeader) state->readBuf; + if (!(pageHeader->xlp_info & XLP_FIRST_IS_CONTRECORD)) + { + report_invalid_record( + state, + "there is no contrecord flag at %X/%X reading %X/%X", + (uint32) (state->recordContRecPtr >> 32), + (uint32) state->recordContRecPtr, + (uint32) (state->ReadRecPtr >> 32), + (uint32) state->ReadRecPtr); + goto err; + } + + /* + * Cross-check that xlp_rem_len agrees with how much of + * the record we expect there to be left. + */ + if (pageHeader->xlp_rem_len == 0 || + pageHeader->xlp_rem_len != state->recordRemainLen) + { + report_invalid_record( + state, + "invalid contrecord length %u at %X/%X reading %X/%X, expected %u", + pageHeader->xlp_rem_len, + (uint32) (state->recordContRecPtr >> 32), + (uint32) state->recordContRecPtr, + (uint32) (state->ReadRecPtr >> 32), + (uint32) state->ReadRecPtr, + state->recordRemainLen); + goto err; + } + + /* Append the continuation from this page to the buffer */ + pageHeaderSize = XLogPageHeaderSize(pageHeader); + + /* + * XLogNeedData should have ensured that the whole page + * header was read + */ + Assert(pageHeaderSize <= state->readLen); + + contdata = (char *) state->readBuf + pageHeaderSize; + record_len = XLOG_BLCKSZ - pageHeaderSize; + if (pageHeader->xlp_rem_len < record_len) + record_len = pageHeader->xlp_rem_len; + + request_len = record_len + pageHeaderSize; + + /* + * XLogNeedData should have ensured all needed data was + * read + */ + Assert(request_len <= state->readLen); + + memcpy(state->readRecordBuf + state->recordGotLen, + (char *) contdata, record_len); + state->recordGotLen += record_len; + state->recordRemainLen -= record_len; + + /* If we just reassembled the record header, validate it. */ + if (!state->record_verified) + { + Assert(state->recordGotLen >= SizeOfXLogRecord); + if (!ValidXLogRecordHeader(state, state->ReadRecPtr, + state->PrevRecPtr, + (XLogRecord *) state->readRecordBuf)) + goto err; + + state->record_verified = true; + } + + /* + * Calculate pointer to beginning of next page, and + * continue + */ + state->recordContRecPtr += XLOG_BLCKSZ; + } - /* Record does not cross a page boundary */ - if (!ValidXLogRecord(state, record, RecPtr)) - goto err; + /* targetPagePtr is pointing the last-read page here */ + prec = (XLogRecord *) state->readRecordBuf; + if (!ValidXLogRecord(state, prec, state->ReadRecPtr)) + goto err; - state->EndRecPtr = RecPtr + MAXALIGN(total_len); + pageHeaderSize = + XLogPageHeaderSize((XLogPageHeader) state->readBuf); + state->EndRecPtr = targetPagePtr + pageHeaderSize + + MAXALIGN(pageHeader->xlp_rem_len); - state->ReadRecPtr = RecPtr; + *record = prec; + state->readRecordState = XLREAD_NEXT_RECORD; + break; + } } /* * Special processing if it's an XLOG SWITCH record */ - if (record->xl_rmid == RM_XLOG_ID && - (record->xl_info & ~XLR_INFO_MASK) == XLOG_SWITCH) + if ((*record)->xl_rmid == RM_XLOG_ID && + ((*record)->xl_info & ~XLR_INFO_MASK) == XLOG_SWITCH) { /* Pretend it extends to end of segment */ state->EndRecPtr += state->segcxt.ws_segsize - 1; state->EndRecPtr -= XLogSegmentOffset(state->EndRecPtr, state->segcxt.ws_segsize); } - if (DecodeXLogRecord(state, record, errormsg)) - return record; - else - return NULL; + if (DecodeXLogRecord(state, *record, errormsg)) + return XLREAD_SUCCESS; + + *record = NULL; + return XLREAD_FAIL; err: /* - * Invalidate the read state. We might read from a different source after + * Invalidate the read page. We might read from a different source after * failure. */ XLogReaderInvalReadState(state); @@ -558,113 +710,141 @@ XLogReadRecord(XLogReaderState *state, char **errormsg) if (state->errormsg_buf[0] != '\0') *errormsg = state->errormsg_buf; - return NULL; + *record = NULL; + return XLREAD_FAIL; } /* - * Read a single xlog page including at least [pageptr, reqLen] of valid data - * via the page_read() callback. + * Checks that an xlog page loaded in state->readBuf is including at least + * [pageptr, reqLen] and the page is valid. header_inclusive indicates that + * reqLen is calculated including page header length. + * + * Returns false if the buffer already contains the requested data, or found + * error. state->page_verified is set to true for the former and false for the + * latter. * - * Returns -1 if the required page cannot be read for some reason; errormsg_buf - * is set in that case (unless the error occurs in the page_read callback). + * Otherwise returns true and requests data loaded onto state->readBuf by + * state->readPagePtr and state->readLen. The caller shall call this function + * again after filling the buffer at least with that portion of data and set + * state->readLen to the length of actually loaded data. * - * We fetch the page from a reader-local cache if we know we have the required - * data and if there hasn't been any error since caching the data. + * If header_inclusive is false, corrects reqLen internally by adding the + * actual page header length and may request caller for new data. */ -static int -ReadPageInternal(XLogReaderState *state, XLogRecPtr pageptr, int reqLen) +static bool +XLogNeedData(XLogReaderState *state, XLogRecPtr pageptr, int reqLen, + bool header_inclusive) { - int readLen; uint32 targetPageOff; XLogSegNo targetSegNo; - XLogPageHeader hdr; + uint32 addLen = 0; - Assert((pageptr % XLOG_BLCKSZ) == 0); + /* Some data is loaded, but page header is not verified yet. */ + if (!state->page_verified && + !XLogRecPtrIsInvalid(state->readPagePtr) && state->readLen >= 0) + { + uint32 pageHeaderSize; - XLByteToSeg(pageptr, targetSegNo, state->segcxt.ws_segsize); - targetPageOff = XLogSegmentOffset(pageptr, state->segcxt.ws_segsize); + /* just loaded new data so needs to verify page header */ - /* check whether we have all the requested data already */ - if (targetSegNo == state->seg.ws_segno && - targetPageOff == state->segoff && reqLen <= state->readLen) - return state->readLen; + /* The caller must have loaded at least page header */ + Assert(state->readLen >= SizeOfXLogShortPHD); - /* - * Data is not in our buffer. - * - * Every time we actually read the segment, even if we looked at parts of - * it before, we need to do verification as the page_read callback might - * now be rereading data from a different source. - * - * Whenever switching to a new WAL segment, we read the first page of the - * file and validate its header, even if that's not where the target - * record is. This is so that we can check the additional identification - * info that is present in the first page's "long" header. - */ - if (targetSegNo != state->seg.ws_segno && targetPageOff != 0) - { - XLogRecPtr targetSegmentPtr = pageptr - targetPageOff; + /* + * We have enough data to check the header length. Recheck the loaded + * length against the actual header length. + */ + pageHeaderSize = XLogPageHeaderSize((XLogPageHeader) state->readBuf); - readLen = state->routine.page_read(state, targetSegmentPtr, XLOG_BLCKSZ, - state->currRecPtr, - state->readBuf); - if (readLen < 0) - goto err; + /* Request more data if we don't have the full header. */ + if (state->readLen < pageHeaderSize) + { + state->reqLen = pageHeaderSize; + return true; + } - /* we can be sure to have enough WAL available, we scrolled back */ - Assert(readLen == XLOG_BLCKSZ); + /* Now that we know we have the full header, validate it. */ + if (!XLogReaderValidatePageHeader(state, state->readPagePtr, + (char *) state->readBuf)) + { + /* That's bad. Force reading the page again. */ + XLogReaderInvalReadState(state); - if (!XLogReaderValidatePageHeader(state, targetSegmentPtr, - state->readBuf)) - goto err; + return false; + } + + state->page_verified = true; + + XLByteToSeg(state->readPagePtr, state->seg.ws_segno, + state->segcxt.ws_segsize); } /* - * First, read the requested data length, but at least a short page header - * so that we can validate it. + * The loaded page may not be the one caller is supposing to read when we + * are verifying the first page of new segment. In that case, skip further + * verification and immediately load the target page. */ - readLen = state->routine.page_read(state, pageptr, Max(reqLen, SizeOfXLogShortPHD), - state->currRecPtr, - state->readBuf); - if (readLen < 0) - goto err; + if (state->page_verified && pageptr == state->readPagePtr) + { + /* + * calculate additional length for page header keeping the total + * length within the block size. + */ + if (!header_inclusive) + { + uint32 pageHeaderSize = + XLogPageHeaderSize((XLogPageHeader) state->readBuf); - Assert(readLen <= XLOG_BLCKSZ); + addLen = pageHeaderSize; + if (reqLen + pageHeaderSize <= XLOG_BLCKSZ) + addLen = pageHeaderSize; + else + addLen = XLOG_BLCKSZ - reqLen; + } - /* Do we have enough data to check the header length? */ - if (readLen <= SizeOfXLogShortPHD) - goto err; + /* Return if we already have it. */ + if (reqLen + addLen <= state->readLen) + return false; + } - Assert(readLen >= reqLen); + /* Data is not in our buffer, request the caller for it. */ + XLByteToSeg(pageptr, targetSegNo, state->segcxt.ws_segsize); + targetPageOff = XLogSegmentOffset(pageptr, state->segcxt.ws_segsize); + Assert((pageptr % XLOG_BLCKSZ) == 0); - hdr = (XLogPageHeader) state->readBuf; + /* + * Every time we request to load new data of a page to the caller, even if + * we looked at a part of it before, we need to do verification on the + * next invocation as the caller might now be rereading data from a + * different source. + */ + state->page_verified = false; - /* still not enough */ - if (readLen < XLogPageHeaderSize(hdr)) + /* + * Whenever switching to a new WAL segment, we read the first page of the + * file and validate its header, even if that's not where the target + * record is. This is so that we can check the additional identification + * info that is present in the first page's "long" header. Don't do this + * if the caller requested the first page in the segment. + */ + if (targetSegNo != state->seg.ws_segno && targetPageOff != 0) { - readLen = state->routine.page_read(state, pageptr, XLogPageHeaderSize(hdr), - state->currRecPtr, - state->readBuf); - if (readLen < 0) - goto err; + /* + * Then we'll see that the targetSegNo now matches the ws_segno, and + * will not come back here, but will request the actual target page. + */ + state->readPagePtr = pageptr - targetPageOff; + state->reqLen = XLOG_BLCKSZ; + return true; } /* - * Now that we know we have the full header, validate it. + * Request the caller to load the page. We need at least a short page + * header so that we can validate it. */ - if (!XLogReaderValidatePageHeader(state, pageptr, (char *) hdr)) - goto err; - - /* update read state information */ - state->seg.ws_segno = targetSegNo; - state->segoff = targetPageOff; - state->readLen = readLen; - - return readLen; - -err: - XLogReaderInvalReadState(state); - return -1; + state->readPagePtr = pageptr; + state->reqLen = Max(reqLen + addLen, SizeOfXLogShortPHD); + return true; } /* @@ -673,9 +853,7 @@ ReadPageInternal(XLogReaderState *state, XLogRecPtr pageptr, int reqLen) static void XLogReaderInvalReadState(XLogReaderState *state) { - state->seg.ws_segno = 0; - state->segoff = 0; - state->readLen = 0; + state->readPagePtr = InvalidXLogRecPtr; } /* @@ -683,11 +861,12 @@ XLogReaderInvalReadState(XLogReaderState *state) * * This is just a convenience subroutine to avoid duplicated code in * XLogReadRecord. It's not intended for use from anywhere else. + * + * If PrevRecPtr is valid, the xl_prev is is cross-checked with it. */ static bool ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr, - XLogRecPtr PrevRecPtr, XLogRecord *record, - bool randAccess) + XLogRecPtr PrevRecPtr, XLogRecord *record) { if (record->xl_tot_len < SizeOfXLogRecord) { @@ -704,7 +883,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr, record->xl_rmid, LSN_FORMAT_ARGS(RecPtr)); return false; } - if (randAccess) + if (PrevRecPtr == InvalidXLogRecPtr) { /* * We can't exactly verify the prev-link, but surely it should be less @@ -922,6 +1101,22 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, * here. */ +XLogFindNextRecordState * +InitXLogFindNextRecord(XLogReaderState *reader_state, XLogRecPtr start_ptr) +{ + XLogFindNextRecordState *state = (XLogFindNextRecordState *) + palloc_extended(sizeof(XLogFindNextRecordState), + MCXT_ALLOC_NO_OOM | MCXT_ALLOC_ZERO); + if (!state) + return NULL; + + state->reader_state = reader_state; + state->targetRecPtr = start_ptr; + state->currRecPtr = start_ptr; + + return state; +} + /* * Find the first record with an lsn >= RecPtr. * @@ -933,27 +1128,25 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, * This positions the reader, like XLogBeginRead(), so that the next call to * XLogReadRecord() will read the next valid record. */ -XLogRecPtr -XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) +bool +XLogFindNextRecord(XLogFindNextRecordState *state) { - XLogRecPtr tmpRecPtr; - XLogRecPtr found = InvalidXLogRecPtr; XLogPageHeader header; + XLogRecord *record; + XLogReadRecordResult result; char *errormsg; - Assert(!XLogRecPtrIsInvalid(RecPtr)); + Assert(!XLogRecPtrIsInvalid(state->currRecPtr)); /* * skip over potential continuation data, keeping in mind that it may span * multiple pages */ - tmpRecPtr = RecPtr; while (true) { XLogRecPtr targetPagePtr; int targetRecOff; uint32 pageHeaderSize; - int readLen; /* * Compute targetRecOff. It should typically be equal or greater than @@ -961,27 +1154,27 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) * that, except when caller has explicitly specified the offset that * falls somewhere there or when we are skipping multi-page * continuation record. It doesn't matter though because - * ReadPageInternal() is prepared to handle that and will read at - * least short page-header worth of data + * XLogNeedData() is prepared to handle that and will read at least + * short page-header worth of data */ - targetRecOff = tmpRecPtr % XLOG_BLCKSZ; + targetRecOff = state->currRecPtr % XLOG_BLCKSZ; /* scroll back to page boundary */ - targetPagePtr = tmpRecPtr - targetRecOff; + targetPagePtr = state->currRecPtr - targetRecOff; - /* Read the page containing the record */ - readLen = ReadPageInternal(state, targetPagePtr, targetRecOff); - if (readLen < 0) + if (XLogNeedData(state->reader_state, targetPagePtr, targetRecOff, + targetRecOff != 0)) + return true; + + if (!state->reader_state->page_verified) goto err; - header = (XLogPageHeader) state->readBuf; + header = (XLogPageHeader) state->reader_state->readBuf; pageHeaderSize = XLogPageHeaderSize(header); - /* make sure we have enough data for the page header */ - readLen = ReadPageInternal(state, targetPagePtr, pageHeaderSize); - if (readLen < 0) - goto err; + /* we should have read the page header */ + Assert(state->reader_state->readLen >= pageHeaderSize); /* skip over potential continuation data */ if (header->xlp_info & XLP_FIRST_IS_CONTRECORD) @@ -996,21 +1189,21 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) * Note that record headers are MAXALIGN'ed */ if (MAXALIGN(header->xlp_rem_len) >= (XLOG_BLCKSZ - pageHeaderSize)) - tmpRecPtr = targetPagePtr + XLOG_BLCKSZ; + state->currRecPtr = targetPagePtr + XLOG_BLCKSZ; else { /* * The previous continuation record ends in this page. Set - * tmpRecPtr to point to the first valid record + * state->currRecPtr to point to the first valid record */ - tmpRecPtr = targetPagePtr + pageHeaderSize + state->currRecPtr = targetPagePtr + pageHeaderSize + MAXALIGN(header->xlp_rem_len); break; } } else { - tmpRecPtr = targetPagePtr + pageHeaderSize; + state->currRecPtr = targetPagePtr + pageHeaderSize; break; } } @@ -1020,31 +1213,36 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) * because either we're at the first record after the beginning of a page * or we just jumped over the remaining data of a continuation. */ - XLogBeginRead(state, tmpRecPtr); - while (XLogReadRecord(state, &errormsg) != NULL) + XLogBeginRead(state->reader_state, state->currRecPtr); + while ((result = XLogReadRecord(state->reader_state, &record, &errormsg)) != + XLREAD_FAIL) { + if (result == XLREAD_NEED_DATA) + return true; + /* past the record we've found, break out */ - if (RecPtr <= state->ReadRecPtr) + if (state->targetRecPtr <= state->reader_state->ReadRecPtr) { /* Rewind the reader to the beginning of the last record. */ - found = state->ReadRecPtr; - XLogBeginRead(state, found); - return found; + state->currRecPtr = state->reader_state->ReadRecPtr; + XLogBeginRead(state->reader_state, state->currRecPtr); + return false; } } err: - XLogReaderInvalReadState(state); + XLogReaderInvalReadState(state->reader_state); - return InvalidXLogRecPtr; + state->currRecPtr = InvalidXLogRecPtr;; + return false; } #endif /* FRONTEND */ /* - * Helper function to ease writing of XLogRoutine->page_read callbacks. - * If this function is used, caller must supply a segment_open callback in - * 'state', as that is used here. + * Helper function to ease writing of routines that read raw WAL data. + * If this function is used, caller must supply a segment_open callback and + * segment_close callback as that is used here. * * Read 'count' bytes into 'buf', starting at location 'startptr', from WAL * fetched from timeline 'tli'. @@ -1057,6 +1255,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) */ bool WALRead(XLogReaderState *state, + WALSegmentOpenCB segopenfn, WALSegmentCloseCB segclosefn, char *buf, XLogRecPtr startptr, Size count, TimeLineID tli, WALReadError *errinfo) { @@ -1088,10 +1287,10 @@ WALRead(XLogReaderState *state, XLogSegNo nextSegNo; if (state->seg.ws_file >= 0) - state->routine.segment_close(state); + segclosefn(state); XLByteToSeg(recptr, nextSegNo, state->segcxt.ws_segsize); - state->routine.segment_open(state, nextSegNo, &tli); + segopenfn(state, nextSegNo, &tli); /* This shouldn't happen -- indicates a bug in segment_open */ Assert(state->seg.ws_file >= 0); diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c index d17d660f46053..e5de26dce54f4 100644 --- a/src/backend/access/transam/xlogutils.c +++ b/src/backend/access/transam/xlogutils.c @@ -686,8 +686,7 @@ XLogTruncateRelation(RelFileNode rnode, ForkNumber forkNum, void XLogReadDetermineTimeline(XLogReaderState *state, XLogRecPtr wantPage, uint32 wantLength) { - const XLogRecPtr lastReadPage = (state->seg.ws_segno * - state->segcxt.ws_segsize + state->segoff); + const XLogRecPtr lastReadPage = state->readPagePtr; Assert(wantPage != InvalidXLogRecPtr && wantPage % XLOG_BLCKSZ == 0); Assert(wantLength <= XLOG_BLCKSZ); @@ -702,7 +701,7 @@ XLogReadDetermineTimeline(XLogReaderState *state, XLogRecPtr wantPage, uint32 wa * current TLI has since become historical. */ if (lastReadPage == wantPage && - state->readLen != 0 && + state->page_verified && lastReadPage + state->readLen >= wantPage + Min(wantLength, XLOG_BLCKSZ - 1)) return; @@ -824,10 +823,12 @@ wal_segment_close(XLogReaderState *state) * exists for normal backends, so we have to do a check/sleep/repeat style of * loop for now. */ -int -read_local_xlog_page(XLogReaderState *state, XLogRecPtr targetPagePtr, - int reqLen, XLogRecPtr targetRecPtr, char *cur_page) +bool +read_local_xlog_page(XLogReaderState *state) { + XLogRecPtr targetPagePtr = state->readPagePtr; + int reqLen = state->reqLen; + char *cur_page = state->readBuf; XLogRecPtr read_upto, loc; TimeLineID tli; @@ -926,7 +927,8 @@ read_local_xlog_page(XLogReaderState *state, XLogRecPtr targetPagePtr, else if (targetPagePtr + reqLen > read_upto) { /* not enough data there */ - return -1; + XLogReaderSetInputData(state, -1); + return false; } else { @@ -939,12 +941,14 @@ read_local_xlog_page(XLogReaderState *state, XLogRecPtr targetPagePtr, * as 'count', read the whole page anyway. It's guaranteed to be * zero-padded up to the page boundary if it's incomplete. */ - if (!WALRead(state, cur_page, targetPagePtr, XLOG_BLCKSZ, tli, - &errinfo)) + if (!WALRead(state, wal_segment_open, wal_segment_close, + cur_page, targetPagePtr, XLOG_BLCKSZ, tli, &errinfo)) WALReadRaiseError(&errinfo); /* number of valid bytes in the buffer */ - return count; + state->readPagePtr = targetPagePtr; + XLogReaderSetInputData(state, count); + return true; } /* diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index 2f6803637bfc7..4f6e87f18d34c 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -148,7 +148,8 @@ StartupDecodingContext(List *output_plugin_options, TransactionId xmin_horizon, bool need_full_snapshot, bool fast_forward, - XLogReaderRoutine *xl_routine, + LogicalDecodingXLogPageReadCB page_read, + WALSegmentCleanupCB cleanup_cb, LogicalOutputPluginWriterPrepareWrite prepare_write, LogicalOutputPluginWriterWrite do_write, LogicalOutputPluginWriterUpdateProgress update_progress) @@ -198,11 +199,12 @@ StartupDecodingContext(List *output_plugin_options, ctx->slot = slot; - ctx->reader = XLogReaderAllocate(wal_segment_size, NULL, xl_routine, ctx); + ctx->reader = XLogReaderAllocate(wal_segment_size, NULL, cleanup_cb); if (!ctx->reader) ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), errmsg("out of memory"))); + ctx->page_read = page_read; ctx->reorder = ReorderBufferAllocate(); ctx->snapshot_builder = @@ -319,7 +321,8 @@ CreateInitDecodingContext(const char *plugin, List *output_plugin_options, bool need_full_snapshot, XLogRecPtr restart_lsn, - XLogReaderRoutine *xl_routine, + LogicalDecodingXLogPageReadCB page_read, + WALSegmentCleanupCB cleanup_cb, LogicalOutputPluginWriterPrepareWrite prepare_write, LogicalOutputPluginWriterWrite do_write, LogicalOutputPluginWriterUpdateProgress update_progress) @@ -422,7 +425,7 @@ CreateInitDecodingContext(const char *plugin, ctx = StartupDecodingContext(NIL, restart_lsn, xmin_horizon, need_full_snapshot, false, - xl_routine, prepare_write, do_write, + page_read, cleanup_cb, prepare_write, do_write, update_progress); /* call output plugin initialization callback */ @@ -476,7 +479,8 @@ LogicalDecodingContext * CreateDecodingContext(XLogRecPtr start_lsn, List *output_plugin_options, bool fast_forward, - XLogReaderRoutine *xl_routine, + LogicalDecodingXLogPageReadCB page_read, + WALSegmentCleanupCB cleanup_cb, LogicalOutputPluginWriterPrepareWrite prepare_write, LogicalOutputPluginWriterWrite do_write, LogicalOutputPluginWriterUpdateProgress update_progress) @@ -528,8 +532,8 @@ CreateDecodingContext(XLogRecPtr start_lsn, ctx = StartupDecodingContext(output_plugin_options, start_lsn, InvalidTransactionId, false, - fast_forward, xl_routine, prepare_write, - do_write, update_progress); + fast_forward, page_read, cleanup_cb, + prepare_write, do_write, update_progress); /* call output plugin initialization callback */ old_context = MemoryContextSwitchTo(ctx->context); @@ -585,7 +589,13 @@ DecodingContextFindStartpoint(LogicalDecodingContext *ctx) char *err = NULL; /* the read_page callback waits for new WAL */ - record = XLogReadRecord(ctx->reader, &err); + while (XLogReadRecord(ctx->reader, &record, &err) == + XLREAD_NEED_DATA) + { + if (!ctx->page_read(ctx->reader)) + break; + } + if (err) elog(ERROR, "%s", err); if (!record) diff --git a/src/backend/replication/logical/logicalfuncs.c b/src/backend/replication/logical/logicalfuncs.c index 01d354829b936..8f8c129620f2a 100644 --- a/src/backend/replication/logical/logicalfuncs.c +++ b/src/backend/replication/logical/logicalfuncs.c @@ -233,9 +233,8 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin ctx = CreateDecodingContext(InvalidXLogRecPtr, options, false, - XL_ROUTINE(.page_read = read_local_xlog_page, - .segment_open = wal_segment_open, - .segment_close = wal_segment_close), + read_local_xlog_page, + wal_segment_close, LogicalOutputPrepareWrite, LogicalOutputWrite, NULL); @@ -284,7 +283,13 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin XLogRecord *record; char *errm = NULL; - record = XLogReadRecord(ctx->reader, &errm); + while (XLogReadRecord(ctx->reader, &record, &errm) == + XLREAD_NEED_DATA) + { + if (!ctx->page_read(ctx->reader)) + break; + } + if (errm) elog(ERROR, "%s", errm); diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c index d9d36879ed785..7ab0b804e4c95 100644 --- a/src/backend/replication/slotfuncs.c +++ b/src/backend/replication/slotfuncs.c @@ -153,9 +153,8 @@ create_logical_replication_slot(char *name, char *plugin, ctx = CreateInitDecodingContext(plugin, NIL, false, /* just catalogs is OK */ restart_lsn, - XL_ROUTINE(.page_read = read_local_xlog_page, - .segment_open = wal_segment_open, - .segment_close = wal_segment_close), + read_local_xlog_page, + wal_segment_close, NULL, NULL, NULL); /* @@ -512,9 +511,8 @@ pg_logical_replication_slot_advance(XLogRecPtr moveto) ctx = CreateDecodingContext(InvalidXLogRecPtr, NIL, true, /* fast_forward */ - XL_ROUTINE(.page_read = read_local_xlog_page, - .segment_open = wal_segment_open, - .segment_close = wal_segment_close), + read_local_xlog_page, + wal_segment_close, NULL, NULL, NULL); /* @@ -536,7 +534,13 @@ pg_logical_replication_slot_advance(XLogRecPtr moveto) * Read records. No changes are generated in fast_forward mode, * but snapbuilder/slot statuses are updated properly. */ - record = XLogReadRecord(ctx->reader, &errm); + while (XLogReadRecord(ctx->reader, &record, &errm) == + XLREAD_NEED_DATA) + { + if (!ctx->page_read(ctx->reader)) + break; + } + if (errm) elog(ERROR, "%s", errm); diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index 4bf8a18e01e79..52fe9aba660d9 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -580,10 +580,7 @@ StartReplication(StartReplicationCmd *cmd) /* create xlogreader for physical replication */ xlogreader = - XLogReaderAllocate(wal_segment_size, NULL, - XL_ROUTINE(.segment_open = WalSndSegmentOpen, - .segment_close = wal_segment_close), - NULL); + XLogReaderAllocate(wal_segment_size, NULL, wal_segment_close); if (!xlogreader) ereport(ERROR, @@ -806,10 +803,12 @@ StartReplication(StartReplicationCmd *cmd) * which has to do a plain sleep/busy loop, because the walsender's latch gets * set every time WAL is flushed. */ -static int -logical_read_xlog_page(XLogReaderState *state, XLogRecPtr targetPagePtr, int reqLen, - XLogRecPtr targetRecPtr, char *cur_page) +static bool +logical_read_xlog_page(XLogReaderState *state) { + XLogRecPtr targetPagePtr = state->readPagePtr; + int reqLen = state->reqLen; + char *cur_page = state->readBuf; XLogRecPtr flushptr; int count; WALReadError errinfo; @@ -826,7 +825,10 @@ logical_read_xlog_page(XLogReaderState *state, XLogRecPtr targetPagePtr, int req /* fail if not (implies we are going to shut down) */ if (flushptr < targetPagePtr + reqLen) - return -1; + { + XLogReaderSetInputData(state, -1); + return false; + } if (targetPagePtr + XLOG_BLCKSZ <= flushptr) count = XLOG_BLCKSZ; /* more than one block available */ @@ -834,7 +836,7 @@ logical_read_xlog_page(XLogReaderState *state, XLogRecPtr targetPagePtr, int req count = flushptr - targetPagePtr; /* part of the page available */ /* now actually read the data, we know it's there */ - if (!WALRead(state, + if (!WALRead(state, WalSndSegmentOpen, wal_segment_close, cur_page, targetPagePtr, XLOG_BLCKSZ, @@ -854,7 +856,8 @@ logical_read_xlog_page(XLogReaderState *state, XLogRecPtr targetPagePtr, int req XLByteToSeg(targetPagePtr, segno, state->segcxt.ws_segsize); CheckXLogRemoved(segno, state->seg.ws_tli); - return count; + XLogReaderSetInputData(state, count); + return true; } /* @@ -1007,9 +1010,8 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd) ctx = CreateInitDecodingContext(cmd->plugin, NIL, need_full_snapshot, InvalidXLogRecPtr, - XL_ROUTINE(.page_read = logical_read_xlog_page, - .segment_open = WalSndSegmentOpen, - .segment_close = wal_segment_close), + logical_read_xlog_page, + wal_segment_close, WalSndPrepareWrite, WalSndWriteData, WalSndUpdateProgress); @@ -1167,9 +1169,8 @@ StartLogicalReplication(StartReplicationCmd *cmd) */ logical_decoding_ctx = CreateDecodingContext(cmd->startpoint, cmd->options, false, - XL_ROUTINE(.page_read = logical_read_xlog_page, - .segment_open = WalSndSegmentOpen, - .segment_close = wal_segment_close), + logical_read_xlog_page, + wal_segment_close, WalSndPrepareWrite, WalSndWriteData, WalSndUpdateProgress); xlogreader = logical_decoding_ctx->reader; @@ -2745,7 +2746,7 @@ XLogSendPhysical(void) enlargeStringInfo(&output_message, nbytes); retry: - if (!WALRead(xlogreader, + if (!WALRead(xlogreader, WalSndSegmentOpen, wal_segment_close, &output_message.data[output_message.len], startptr, nbytes, @@ -2843,7 +2844,12 @@ XLogSendLogical(void) */ WalSndCaughtUp = false; - record = XLogReadRecord(logical_decoding_ctx->reader, &errm); + while (XLogReadRecord(logical_decoding_ctx->reader, &record, &errm) == + XLREAD_NEED_DATA) + { + if (!logical_decoding_ctx->page_read(logical_decoding_ctx->reader)) + break; + } /* xlog record was invalid */ if (errm != NULL) diff --git a/src/bin/pg_rewind/parsexlog.c b/src/bin/pg_rewind/parsexlog.c index 59ebac7d6aa88..79f71c0477f38 100644 --- a/src/bin/pg_rewind/parsexlog.c +++ b/src/bin/pg_rewind/parsexlog.c @@ -41,15 +41,9 @@ static int xlogreadfd = -1; static XLogSegNo xlogreadsegno = -1; static char xlogfpath[MAXPGPATH]; -typedef struct XLogPageReadPrivate -{ - const char *restoreCommand; - int tliIndex; -} XLogPageReadPrivate; - -static int SimpleXLogPageRead(XLogReaderState *xlogreader, - XLogRecPtr targetPagePtr, - int reqLen, XLogRecPtr targetRecPtr, char *readBuf); +static bool SimpleXLogPageRead(XLogReaderState *xlogreader, + const char *datadir, int *tliIndex, + const char *restoreCommand); /* * Read WAL from the datadir/pg_wal, starting from 'startpoint' on timeline @@ -66,20 +60,22 @@ extractPageMap(const char *datadir, XLogRecPtr startpoint, int tliIndex, XLogRecord *record; XLogReaderState *xlogreader; char *errormsg; - XLogPageReadPrivate private; - private.tliIndex = tliIndex; - private.restoreCommand = restoreCommand; - xlogreader = XLogReaderAllocate(WalSegSz, datadir, - XL_ROUTINE(.page_read = &SimpleXLogPageRead), - &private); + xlogreader = XLogReaderAllocate(WalSegSz, datadir, NULL); + if (xlogreader == NULL) pg_fatal("out of memory"); XLogBeginRead(xlogreader, startpoint); do { - record = XLogReadRecord(xlogreader, &errormsg); + while (XLogReadRecord(xlogreader, &record, &errormsg) == + XLREAD_NEED_DATA) + { + if (!SimpleXLogPageRead(xlogreader, datadir, + &tliIndex, restoreCommand)) + break; + } if (record == NULL) { @@ -123,19 +119,19 @@ readOneRecord(const char *datadir, XLogRecPtr ptr, int tliIndex, XLogRecord *record; XLogReaderState *xlogreader; char *errormsg; - XLogPageReadPrivate private; XLogRecPtr endptr; - private.tliIndex = tliIndex; - private.restoreCommand = restoreCommand; - xlogreader = XLogReaderAllocate(WalSegSz, datadir, - XL_ROUTINE(.page_read = &SimpleXLogPageRead), - &private); + xlogreader = XLogReaderAllocate(WalSegSz, datadir, NULL); if (xlogreader == NULL) pg_fatal("out of memory"); XLogBeginRead(xlogreader, ptr); - record = XLogReadRecord(xlogreader, &errormsg); + while (XLogReadRecord(xlogreader, &record, &errormsg) == + XLREAD_NEED_DATA) + { + if (!SimpleXLogPageRead(xlogreader, datadir, &tliIndex, restoreCommand)) + break; + } if (record == NULL) { if (errormsg) @@ -170,7 +166,6 @@ findLastCheckpoint(const char *datadir, XLogRecPtr forkptr, int tliIndex, XLogRecPtr searchptr; XLogReaderState *xlogreader; char *errormsg; - XLogPageReadPrivate private; /* * The given fork pointer points to the end of the last common record, @@ -186,11 +181,7 @@ findLastCheckpoint(const char *datadir, XLogRecPtr forkptr, int tliIndex, forkptr += SizeOfXLogShortPHD; } - private.tliIndex = tliIndex; - private.restoreCommand = restoreCommand; - xlogreader = XLogReaderAllocate(WalSegSz, datadir, - XL_ROUTINE(.page_read = &SimpleXLogPageRead), - &private); + xlogreader = XLogReaderAllocate(WalSegSz, datadir, NULL); if (xlogreader == NULL) pg_fatal("out of memory"); @@ -200,7 +191,13 @@ findLastCheckpoint(const char *datadir, XLogRecPtr forkptr, int tliIndex, uint8 info; XLogBeginRead(xlogreader, searchptr); - record = XLogReadRecord(xlogreader, &errormsg); + while (XLogReadRecord(xlogreader, &record, &errormsg) == + XLREAD_NEED_DATA) + { + if (!SimpleXLogPageRead(xlogreader, datadir, + &tliIndex, restoreCommand)) + break; + } if (record == NULL) { @@ -246,16 +243,19 @@ findLastCheckpoint(const char *datadir, XLogRecPtr forkptr, int tliIndex, } /* XLogReader callback function, to read a WAL page */ -static int -SimpleXLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, - int reqLen, XLogRecPtr targetRecPtr, char *readBuf) +static bool +SimpleXLogPageRead(XLogReaderState *xlogreader, const char *datadir, + int *tliIndex, const char *restoreCommand) { - XLogPageReadPrivate *private = (XLogPageReadPrivate *) xlogreader->private_data; + XLogRecPtr targetPagePtr = xlogreader->readPagePtr; + char *readBuf = xlogreader->readBuf; uint32 targetPageOff; XLogRecPtr targetSegEnd; XLogSegNo targetSegNo; int r; + Assert(xlogreader->reqLen <= XLOG_BLCKSZ); + XLByteToSeg(targetPagePtr, targetSegNo, WalSegSz); XLogSegNoOffsetToRecPtr(targetSegNo + 1, 0, WalSegSz, targetSegEnd); targetPageOff = XLogSegmentOffset(targetPagePtr, WalSegSz); @@ -283,14 +283,14 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, * be done both forward and backward, consider also switching timeline * accordingly. */ - while (private->tliIndex < targetNentries - 1 && - targetHistory[private->tliIndex].end < targetSegEnd) - private->tliIndex++; - while (private->tliIndex > 0 && - targetHistory[private->tliIndex].begin >= targetSegEnd) - private->tliIndex--; - - XLogFileName(xlogfname, targetHistory[private->tliIndex].tli, + while (*tliIndex < targetNentries - 1 && + targetHistory[*tliIndex].end < targetSegEnd) + (*tliIndex)++; + while (*tliIndex > 0 && + targetHistory[*tliIndex].begin >= targetSegEnd) + (*tliIndex)--; + + XLogFileName(xlogfname, targetHistory[*tliIndex].tli, xlogreadsegno, WalSegSz); snprintf(xlogfpath, MAXPGPATH, "%s/" XLOGDIR "/%s", @@ -303,10 +303,11 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, /* * If we have no restore_command to execute, then exit. */ - if (private->restoreCommand == NULL) + if (restoreCommand == NULL) { pg_log_error("could not open file \"%s\": %m", xlogfpath); - return -1; + XLogReaderSetInputData(xlogreader, -1); + return false; } /* @@ -316,10 +317,13 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, xlogreadfd = RestoreArchivedFile(xlogreader->segcxt.ws_dir, xlogfname, WalSegSz, - private->restoreCommand); + restoreCommand); if (xlogreadfd < 0) - return -1; + { + XLogReaderSetInputData(xlogreader, -1); + return false; + } else pg_log_debug("using file \"%s\" restored from archive", xlogfpath); @@ -335,7 +339,8 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, if (lseek(xlogreadfd, (off_t) targetPageOff, SEEK_SET) < 0) { pg_log_error("could not seek in file \"%s\": %m", xlogfpath); - return -1; + XLogReaderSetInputData(xlogreader, -1); + return false; } @@ -348,13 +353,15 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, pg_log_error("could not read file \"%s\": read %d of %zu", xlogfpath, r, (Size) XLOG_BLCKSZ); - return -1; + XLogReaderSetInputData(xlogreader, -1); + return false; } Assert(targetSegNo == xlogreadsegno); - xlogreader->seg.ws_tli = targetHistory[private->tliIndex].tli; - return XLOG_BLCKSZ; + xlogreader->seg.ws_tli = targetHistory[*tliIndex].tli; + XLogReaderSetInputData(xlogreader, XLOG_BLCKSZ); + return true; } /* diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c index f8b8afe4a7beb..5db389aa2d2bb 100644 --- a/src/bin/pg_waldump/pg_waldump.c +++ b/src/bin/pg_waldump/pg_waldump.c @@ -29,14 +29,6 @@ static const char *progname; static int WalSegSz; -typedef struct XLogDumpPrivate -{ - TimeLineID timeline; - XLogRecPtr startptr; - XLogRecPtr endptr; - bool endptr_reached; -} XLogDumpPrivate; - typedef struct XLogDumpConfig { /* display options */ @@ -330,30 +322,41 @@ WALDumpCloseSegment(XLogReaderState *state) state->seg.ws_file = -1; } -/* pg_waldump's XLogReaderRoutine->page_read callback */ -static int -WALDumpReadPage(XLogReaderState *state, XLogRecPtr targetPagePtr, int reqLen, - XLogRecPtr targetPtr, char *readBuff) +/* + * pg_waldump's WAL page rader + * + * timeline and startptr specifies the LSN, and reads up to endptr. + */ +static bool +WALDumpReadPage(XLogReaderState *state, TimeLineID timeline, + XLogRecPtr startptr, XLogRecPtr endptr) { - XLogDumpPrivate *private = state->private_data; + XLogRecPtr targetPagePtr = state->readPagePtr; + int reqLen = state->reqLen; + char *readBuff = state->readBuf; int count = XLOG_BLCKSZ; WALReadError errinfo; - if (private->endptr != InvalidXLogRecPtr) + /* determine the number of bytes to read on the page */ + if (endptr != InvalidXLogRecPtr) { - if (targetPagePtr + XLOG_BLCKSZ <= private->endptr) + if (targetPagePtr + XLOG_BLCKSZ <= endptr) count = XLOG_BLCKSZ; - else if (targetPagePtr + reqLen <= private->endptr) - count = private->endptr - targetPagePtr; + else if (targetPagePtr + reqLen <= endptr) + count = endptr - targetPagePtr; else { - private->endptr_reached = true; - return -1; + /* Notify xlogreader that we didn't read at all */ + XLogReaderSetInputData(state, -1); + return false; } } - if (!WALRead(state, readBuff, targetPagePtr, count, private->timeline, - &errinfo)) + /* We should read more than requested by xlogreader */ + Assert(count >= state->readLen); + + if (!WALRead(state, WALDumpOpenSegment, WALDumpCloseSegment, + readBuff, targetPagePtr, count, timeline, &errinfo)) { WALOpenSegment *seg = &errinfo.wre_seg; char fname[MAXPGPATH]; @@ -373,7 +376,9 @@ WALDumpReadPage(XLogReaderState *state, XLogRecPtr targetPagePtr, int reqLen, (Size) errinfo.wre_req); } - return count; + /* Notify xlogreader of how many bytes we have read */ + XLogReaderSetInputData(state, count); + return true; } /* @@ -754,7 +759,10 @@ main(int argc, char **argv) uint32 xlogid; uint32 xrecoff; XLogReaderState *xlogreader_state; - XLogDumpPrivate private; + XLogFindNextRecordState *findnext_state; + TimeLineID timeline; + XLogRecPtr startptr; + XLogRecPtr endptr; XLogDumpConfig config; XLogDumpStats stats; XLogRecord *record; @@ -800,14 +808,12 @@ main(int argc, char **argv) } } - memset(&private, 0, sizeof(XLogDumpPrivate)); memset(&config, 0, sizeof(XLogDumpConfig)); memset(&stats, 0, sizeof(XLogDumpStats)); - private.timeline = 1; - private.startptr = InvalidXLogRecPtr; - private.endptr = InvalidXLogRecPtr; - private.endptr_reached = false; + timeline = 1; + startptr = InvalidXLogRecPtr; + endptr = InvalidXLogRecPtr; config.quiet = false; config.bkp_details = false; @@ -841,7 +847,7 @@ main(int argc, char **argv) optarg); goto bad_argument; } - private.endptr = (uint64) xlogid << 32 | xrecoff; + endptr = (uint64) xlogid << 32 | xrecoff; break; case 'f': config.follow = true; @@ -894,10 +900,10 @@ main(int argc, char **argv) goto bad_argument; } else - private.startptr = (uint64) xlogid << 32 | xrecoff; + startptr = (uint64) xlogid << 32 | xrecoff; break; case 't': - if (sscanf(optarg, "%d", &private.timeline) != 1) + if (sscanf(optarg, "%d", &timeline) != 1) { pg_log_error("could not parse timeline \"%s\"", optarg); goto bad_argument; @@ -974,21 +980,21 @@ main(int argc, char **argv) close(fd); /* parse position from file */ - XLogFromFileName(fname, &private.timeline, &segno, WalSegSz); + XLogFromFileName(fname, &timeline, &segno, WalSegSz); - if (XLogRecPtrIsInvalid(private.startptr)) - XLogSegNoOffsetToRecPtr(segno, 0, WalSegSz, private.startptr); - else if (!XLByteInSeg(private.startptr, segno, WalSegSz)) + if (XLogRecPtrIsInvalid(startptr)) + XLogSegNoOffsetToRecPtr(segno, 0, WalSegSz, startptr); + else if (!XLByteInSeg(startptr, segno, WalSegSz)) { pg_log_error("start WAL location %X/%X is not inside file \"%s\"", - LSN_FORMAT_ARGS(private.startptr), + LSN_FORMAT_ARGS(startptr), fname); goto bad_argument; } /* no second file specified, set end position */ - if (!(optind + 1 < argc) && XLogRecPtrIsInvalid(private.endptr)) - XLogSegNoOffsetToRecPtr(segno + 1, 0, WalSegSz, private.endptr); + if (!(optind + 1 < argc) && XLogRecPtrIsInvalid(endptr)) + XLogSegNoOffsetToRecPtr(segno + 1, 0, WalSegSz, endptr); /* parse ENDSEG if passed */ if (optind + 1 < argc) @@ -1004,26 +1010,26 @@ main(int argc, char **argv) close(fd); /* parse position from file */ - XLogFromFileName(fname, &private.timeline, &endsegno, WalSegSz); + XLogFromFileName(fname, &timeline, &endsegno, WalSegSz); if (endsegno < segno) fatal_error("ENDSEG %s is before STARTSEG %s", argv[optind + 1], argv[optind]); - if (XLogRecPtrIsInvalid(private.endptr)) + if (XLogRecPtrIsInvalid(endptr)) XLogSegNoOffsetToRecPtr(endsegno + 1, 0, WalSegSz, - private.endptr); + endptr); /* set segno to endsegno for check of --end */ segno = endsegno; } - if (!XLByteInSeg(private.endptr, segno, WalSegSz) && - private.endptr != (segno + 1) * WalSegSz) + if (!XLByteInSeg(endptr, segno, WalSegSz) && + endptr != (segno + 1) * WalSegSz) { pg_log_error("end WAL location %X/%X is not inside file \"%s\"", - LSN_FORMAT_ARGS(private.endptr), + LSN_FORMAT_ARGS(endptr), argv[argc - 1]); goto bad_argument; } @@ -1032,7 +1038,7 @@ main(int argc, char **argv) waldir = identify_target_directory(waldir, NULL); /* we don't know what to print */ - if (XLogRecPtrIsInvalid(private.startptr)) + if (XLogRecPtrIsInvalid(startptr)) { pg_log_error("no start WAL location given"); goto bad_argument; @@ -1042,42 +1048,56 @@ main(int argc, char **argv) /* we have everything we need, start reading */ xlogreader_state = - XLogReaderAllocate(WalSegSz, waldir, - XL_ROUTINE(.page_read = WALDumpReadPage, - .segment_open = WALDumpOpenSegment, - .segment_close = WALDumpCloseSegment), - &private); + XLogReaderAllocate(WalSegSz, waldir, WALDumpCloseSegment); + if (!xlogreader_state) fatal_error("out of memory"); + findnext_state = + InitXLogFindNextRecord(xlogreader_state, startptr); + + if (!findnext_state) + fatal_error("out of memory"); + /* first find a valid recptr to start from */ - first_record = XLogFindNextRecord(xlogreader_state, private.startptr); + while (XLogFindNextRecord(findnext_state)) + { + if (!WALDumpReadPage(xlogreader_state, timeline, startptr, endptr)) + break; + } + first_record = findnext_state->currRecPtr; if (first_record == InvalidXLogRecPtr) fatal_error("could not find a valid record after %X/%X", - LSN_FORMAT_ARGS(private.startptr)); + LSN_FORMAT_ARGS(startptr)); /* * Display a message that we're skipping data if `from` wasn't a pointer * to the start of a record and also wasn't a pointer to the beginning of * a segment (e.g. we were used in file mode). */ - if (first_record != private.startptr && - XLogSegmentOffset(private.startptr, WalSegSz) != 0) + if (first_record != startptr && + XLogSegmentOffset(startptr, WalSegSz) != 0) printf(ngettext("first record is after %X/%X, at %X/%X, skipping over %u byte\n", "first record is after %X/%X, at %X/%X, skipping over %u bytes\n", - (first_record - private.startptr)), - LSN_FORMAT_ARGS(private.startptr), + (first_record - startptr)), + LSN_FORMAT_ARGS(startptr), LSN_FORMAT_ARGS(first_record), - (uint32) (first_record - private.startptr)); + (uint32) (first_record - startptr)); for (;;) { /* try to read the next record */ - record = XLogReadRecord(xlogreader_state, &errormsg); + while (XLogReadRecord(xlogreader_state, &record, &errormsg) == + XLREAD_NEED_DATA) + { + if (!WALDumpReadPage(xlogreader_state, timeline, startptr, endptr)) + break; + } + if (!record) { - if (!config.follow || private.endptr_reached) + if (!config.follow) break; else { diff --git a/src/include/access/xlogreader.h b/src/include/access/xlogreader.h index 21d200d3df6f3..d27c0cd281c9d 100644 --- a/src/include/access/xlogreader.h +++ b/src/include/access/xlogreader.h @@ -56,65 +56,17 @@ typedef struct WALSegmentContext } WALSegmentContext; typedef struct XLogReaderState XLogReaderState; +typedef struct XLogFindNextRecordState XLogFindNextRecordState; -/* Function type definitions for various xlogreader interactions */ -typedef int (*XLogPageReadCB) (XLogReaderState *xlogreader, - XLogRecPtr targetPagePtr, - int reqLen, - XLogRecPtr targetRecPtr, - char *readBuf); +/* Function type definition for the segment cleanup callback */ +typedef void (*WALSegmentCleanupCB) (XLogReaderState *xlogreader); + +/* Function type definition for the open/close callbacks for WALRead() */ typedef void (*WALSegmentOpenCB) (XLogReaderState *xlogreader, XLogSegNo nextSegNo, TimeLineID *tli_p); typedef void (*WALSegmentCloseCB) (XLogReaderState *xlogreader); -typedef struct XLogReaderRoutine -{ - /* - * Data input callback - * - * This callback shall read at least reqLen valid bytes of the xlog page - * starting at targetPagePtr, and store them in readBuf. The callback - * shall return the number of bytes read (never more than XLOG_BLCKSZ), or - * -1 on failure. The callback shall sleep, if necessary, to wait for the - * requested bytes to become available. The callback will not be invoked - * again for the same page unless more than the returned number of bytes - * are needed. - * - * targetRecPtr is the position of the WAL record we're reading. Usually - * it is equal to targetPagePtr + reqLen, but sometimes xlogreader needs - * to read and verify the page or segment header, before it reads the - * actual WAL record it's interested in. In that case, targetRecPtr can - * be used to determine which timeline to read the page from. - * - * The callback shall set ->seg.ws_tli to the TLI of the file the page was - * read from. - */ - XLogPageReadCB page_read; - - /* - * Callback to open the specified WAL segment for reading. ->seg.ws_file - * shall be set to the file descriptor of the opened segment. In case of - * failure, an error shall be raised by the callback and it shall not - * return. - * - * "nextSegNo" is the number of the segment to be opened. - * - * "tli_p" is an input/output argument. WALRead() uses it to pass the - * timeline in which the new segment should be found, but the callback can - * use it to return the TLI that it actually opened. - */ - WALSegmentOpenCB segment_open; - - /* - * WAL segment close callback. ->seg.ws_file shall be set to a negative - * number. - */ - WALSegmentCloseCB segment_close; -} XLogReaderRoutine; - -#define XL_ROUTINE(...) &(XLogReaderRoutine){__VA_ARGS__} - typedef struct { /* Is this block ref in use? */ @@ -144,12 +96,36 @@ typedef struct uint16 data_bufsz; } DecodedBkpBlock; +/* Return code from XLogReadRecord */ +typedef enum XLogReadRecordResult +{ + XLREAD_SUCCESS, /* record is successfully read */ + XLREAD_NEED_DATA, /* need more data. see XLogReadRecord. */ + XLREAD_FAIL /* failed during reading a record */ +} XLogReadRecordResult; + +/* + * internal state of XLogReadRecord + * + * XLogReadState runs a state machine while reading a record. Theses states + * are not seen outside the function. Each state may repeat several times + * exiting requesting caller for new data. See the comment of XLogReadRecrod + * for details. + */ +typedef enum XLogReadRecordState +{ + XLREAD_NEXT_RECORD, + XLREAD_TOT_LEN, + XLREAD_FIRST_FRAGMENT, + XLREAD_CONTINUATION +} XLogReadRecordState; + struct XLogReaderState { /* * Operational callbacks */ - XLogReaderRoutine routine; + WALSegmentCleanupCB cleanup_cb; /* ---------------------------------------- * Public parameters @@ -162,19 +138,31 @@ struct XLogReaderState */ uint64 system_identifier; - /* - * Opaque data for callbacks to use. Not used by XLogReader. - */ - void *private_data; - /* * Start and end point of last record read. EndRecPtr is also used as the * position to read next. Calling XLogBeginRead() sets EndRecPtr to the * starting position and ReadRecPtr to invalid. */ - XLogRecPtr ReadRecPtr; /* start of last record read */ + XLogRecPtr ReadRecPtr; /* start of last record read or being read */ XLogRecPtr EndRecPtr; /* end+1 of last record read */ + XLogRecPtr PrevRecPtr; /* start of previous record read */ + /* ---------------------------------------- + * Communication with page reader + * readBuf is XLOG_BLCKSZ bytes, valid up to at least reqLen bytes. + * ---------------------------------------- + */ + /* variables the clients of xlogreader can examine */ + XLogRecPtr readPagePtr; /* page pointer to read */ + int32 reqLen; /* bytes requested to the caller */ + char *readBuf; /* buffer to store data */ + bool page_verified; /* is the page header on the buffer verified? */ + bool record_verified;/* is the current record header verified? */ + + /* variables set by the client of xlogreader */ + int32 readLen; /* actual bytes copied into readBuf by client, + * which should be >= reqLen. Client should + * use XLogReaderSetInputData() to set. */ /* ---------------------------------------- * Decoded representation of current record @@ -203,13 +191,6 @@ struct XLogReaderState * ---------------------------------------- */ - /* - * Buffer for currently read page (XLOG_BLCKSZ bytes, valid up to at least - * readLen bytes) - */ - char *readBuf; - uint32 readLen; - /* last read XLOG position for data currently in readBuf */ WALSegmentContext segcxt; WALOpenSegment seg; @@ -222,8 +203,6 @@ struct XLogReaderState XLogRecPtr latestPagePtr; TimeLineID latestPageTLI; - /* beginning of the WAL record being read. */ - XLogRecPtr currRecPtr; /* timeline to read it from, 0 if a lookup is required */ TimeLineID currTLI; @@ -250,16 +229,37 @@ struct XLogReaderState char *readRecordBuf; uint32 readRecordBufSize; + /* + * XLogReadRecord() state + */ + XLogReadRecordState readRecordState; /* state machine state */ + int recordGotLen; /* amount of current record that has already + * been read */ + int recordRemainLen; /* length of current record that remains */ + XLogRecPtr recordContRecPtr; /* where the current record continues */ + /* Buffer to hold error message */ char *errormsg_buf; }; +struct XLogFindNextRecordState +{ + XLogReaderState *reader_state; + XLogRecPtr targetRecPtr; + XLogRecPtr currRecPtr; +}; + +/* Report that data is available for decoding. */ +static inline void +XLogReaderSetInputData(XLogReaderState *state, int32 len) +{ + state->readLen = len; +} + /* Get a new XLogReader */ extern XLogReaderState *XLogReaderAllocate(int wal_segment_size, const char *waldir, - XLogReaderRoutine *routine, - void *private_data); -extern XLogReaderRoutine *LocalXLogReaderRoutine(void); + WALSegmentCleanupCB cleanup_cb); /* Free an XLogReader */ extern void XLogReaderFree(XLogReaderState *state); @@ -267,12 +267,14 @@ extern void XLogReaderFree(XLogReaderState *state); /* Position the XLogReader to given record */ extern void XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr); #ifdef FRONTEND -extern XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr); +extern XLogFindNextRecordState *InitXLogFindNextRecord(XLogReaderState *reader_state, XLogRecPtr start_ptr); +extern bool XLogFindNextRecord(XLogFindNextRecordState *state); #endif /* FRONTEND */ /* Read the next XLog record. Returns NULL on end-of-WAL or failure */ -extern struct XLogRecord *XLogReadRecord(XLogReaderState *state, - char **errormsg); +extern XLogReadRecordResult XLogReadRecord(XLogReaderState *state, + XLogRecord **record, + char **errormsg); /* Validate a page */ extern bool XLogReaderValidatePageHeader(XLogReaderState *state, @@ -292,6 +294,7 @@ typedef struct WALReadError } WALReadError; extern bool WALRead(XLogReaderState *state, + WALSegmentOpenCB segopenfn, WALSegmentCloseCB sgclosefn, char *buf, XLogRecPtr startptr, Size count, TimeLineID tli, WALReadError *errinfo); diff --git a/src/include/access/xlogutils.h b/src/include/access/xlogutils.h index 9ac602b674d1a..397fb27fc22be 100644 --- a/src/include/access/xlogutils.h +++ b/src/include/access/xlogutils.h @@ -47,9 +47,7 @@ extern Buffer XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum, extern Relation CreateFakeRelcacheEntry(RelFileNode rnode); extern void FreeFakeRelcacheEntry(Relation fakerel); -extern int read_local_xlog_page(XLogReaderState *state, - XLogRecPtr targetPagePtr, int reqLen, - XLogRecPtr targetRecPtr, char *cur_page); +extern bool read_local_xlog_page(XLogReaderState *state); extern void wal_segment_open(XLogReaderState *state, XLogSegNo nextSegNo, TimeLineID *tli_p); diff --git a/src/include/replication/logical.h b/src/include/replication/logical.h index af551d6f4eea8..94e278ef81cf5 100644 --- a/src/include/replication/logical.h +++ b/src/include/replication/logical.h @@ -29,6 +29,10 @@ typedef void (*LogicalOutputPluginWriterUpdateProgress) (struct LogicalDecodingC TransactionId xid ); +typedef struct LogicalDecodingContext LogicalDecodingContext; + +typedef bool (*LogicalDecodingXLogPageReadCB)(XLogReaderState *ctx); + typedef struct LogicalDecodingContext { /* memory context this is all allocated in */ @@ -39,6 +43,7 @@ typedef struct LogicalDecodingContext /* infrastructure pieces for decoding */ XLogReaderState *reader; + LogicalDecodingXLogPageReadCB page_read; struct ReorderBuffer *reorder; struct SnapBuild *snapshot_builder; @@ -105,14 +110,16 @@ extern LogicalDecodingContext *CreateInitDecodingContext(const char *plugin, List *output_plugin_options, bool need_full_snapshot, XLogRecPtr restart_lsn, - XLogReaderRoutine *xl_routine, + LogicalDecodingXLogPageReadCB page_read, + WALSegmentCleanupCB cleanup_cb, LogicalOutputPluginWriterPrepareWrite prepare_write, LogicalOutputPluginWriterWrite do_write, LogicalOutputPluginWriterUpdateProgress update_progress); extern LogicalDecodingContext *CreateDecodingContext(XLogRecPtr start_lsn, List *output_plugin_options, bool fast_forward, - XLogReaderRoutine *xl_routine, + LogicalDecodingXLogPageReadCB page_read, + WALSegmentCleanupCB cleanup_cb, LogicalOutputPluginWriterPrepareWrite prepare_write, LogicalOutputPluginWriterWrite do_write, LogicalOutputPluginWriterUpdateProgress update_progress); From f003d9f8721b3249e4aec8a1946034579d40d42c Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Thu, 8 Apr 2021 23:03:34 +1200 Subject: [PATCH 049/671] Add circular WAL decoding buffer. Teach xlogreader.c to decode its output into a circular buffer, to support optimizations based on looking ahead. * XLogReadRecord() works as before, consuming records one by one, and allowing them to be examined via the traditional XLogRecGetXXX() macros. * An alternative new interface XLogNextRecord() is added that returns pointers to DecodedXLogRecord structs that can be examined directly. * XLogReadAhead() provides a second cursor that lets you see further ahead, as long as data is available and there is enough space in the decoding buffer. This returns DecodedXLogRecord pointers to the caller, but also adds them to a queue of records that will later be consumed by XLogNextRecord()/XLogReadRecord(). The buffer's size is controlled with wal_decode_buffer_size. The buffer could potentially be placed into shared memory, for future projects. Large records that don't fit in the circular buffer are called "oversized" and allocated separately with palloc(). Discussion: https://postgr.es/m/CA+hUKGJ4VJN8ttxScUFM8dOKX0BrBiboo5uz1cq=AovOddfHpA@mail.gmail.com --- src/backend/access/transam/generic_xlog.c | 6 +- src/backend/access/transam/xlog.c | 28 +- src/backend/access/transam/xlogreader.c | 744 +++++++++++++++++----- src/backend/access/transam/xlogutils.c | 2 +- src/backend/replication/logical/decode.c | 2 +- src/bin/pg_rewind/parsexlog.c | 2 +- src/bin/pg_waldump/pg_waldump.c | 22 +- src/include/access/xlogreader.h | 128 +++- 8 files changed, 734 insertions(+), 200 deletions(-) diff --git a/src/backend/access/transam/generic_xlog.c b/src/backend/access/transam/generic_xlog.c index 63301a1ab1684..0e9bcc7159626 100644 --- a/src/backend/access/transam/generic_xlog.c +++ b/src/backend/access/transam/generic_xlog.c @@ -482,10 +482,10 @@ generic_redo(XLogReaderState *record) uint8 block_id; /* Protect limited size of buffers[] array */ - Assert(record->max_block_id < MAX_GENERIC_XLOG_PAGES); + Assert(XLogRecMaxBlockId(record) < MAX_GENERIC_XLOG_PAGES); /* Iterate over blocks */ - for (block_id = 0; block_id <= record->max_block_id; block_id++) + for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) { XLogRedoAction action; @@ -525,7 +525,7 @@ generic_redo(XLogReaderState *record) } /* Changes are done: unlock and release all buffers */ - for (block_id = 0; block_id <= record->max_block_id; block_id++) + for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) { if (BufferIsValid(buffers[block_id])) UnlockReleaseBuffer(buffers[block_id]); diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 7faac01bf2433..729fc5ff13c14 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -1209,6 +1209,7 @@ XLogInsertRecord(XLogRecData *rdata, StringInfoData recordBuf; char *errormsg = NULL; MemoryContext oldCxt; + DecodedXLogRecord *decoded; oldCxt = MemoryContextSwitchTo(walDebugCxt); @@ -1224,6 +1225,9 @@ XLogInsertRecord(XLogRecData *rdata, for (; rdata != NULL; rdata = rdata->next) appendBinaryStringInfo(&recordBuf, rdata->data, rdata->len); + /* How much space would it take to decode this record? */ + decoded = palloc(DecodeXLogRecordRequiredSpace(recordBuf.len)); + if (!debug_reader) debug_reader = XLogReaderAllocate(wal_segment_size, NULL, NULL); @@ -1231,7 +1235,9 @@ XLogInsertRecord(XLogRecData *rdata, { appendStringInfoString(&buf, "error decoding record: out of memory"); } - else if (!DecodeXLogRecord(debug_reader, (XLogRecord *) recordBuf.data, + else if (!DecodeXLogRecord(debug_reader, decoded, + (XLogRecord *) recordBuf.data, + EndPos, &errormsg)) { appendStringInfo(&buf, "error decoding record: %s", @@ -1240,10 +1246,17 @@ XLogInsertRecord(XLogRecData *rdata, else { appendStringInfoString(&buf, " - "); + /* + * Temporarily make this decoded record the current record for + * XLogRecGetXXX() macros. + */ + debug_reader->record = decoded; xlog_outdesc(&buf, debug_reader); + debug_reader->record = NULL; } elog(LOG, "%s", buf.data); + pfree(decoded); pfree(buf.data); pfree(recordBuf.data); MemoryContextSwitchTo(oldCxt); @@ -1417,7 +1430,7 @@ checkXLogConsistency(XLogReaderState *record) Assert((XLogRecGetInfo(record) & XLR_CHECK_CONSISTENCY) != 0); - for (block_id = 0; block_id <= record->max_block_id; block_id++) + for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) { Buffer buf; Page page; @@ -4383,6 +4396,7 @@ ReadRecord(XLogReaderState *xlogreader, int emode, ReadRecPtr = xlogreader->ReadRecPtr; EndRecPtr = xlogreader->EndRecPtr; + if (record == NULL) { if (readFile >= 0) @@ -10300,7 +10314,7 @@ xlog_redo(XLogReaderState *record) * XLOG_FPI and XLOG_FPI_FOR_HINT records, they use a different info * code just to distinguish them for statistics purposes. */ - for (uint8 block_id = 0; block_id <= record->max_block_id; block_id++) + for (uint8 block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) { Buffer buffer; @@ -10435,7 +10449,7 @@ xlog_block_info(StringInfo buf, XLogReaderState *record) int block_id; /* decode block references */ - for (block_id = 0; block_id <= record->max_block_id; block_id++) + for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) { RelFileNode rnode; ForkNumber forknum; @@ -12104,7 +12118,7 @@ XLogPageRead(XLogReaderState *state, XLogRecPtr targetPagePtr = state->readPagePtr; int reqLen = state->reqLen; int readLen = 0; - XLogRecPtr targetRecPtr = state->ReadRecPtr; + XLogRecPtr targetRecPtr = state->DecodeRecPtr; uint32 targetPageOff; XLogSegNo targetSegNo PG_USED_FOR_ASSERTS_ONLY; int r; @@ -12122,6 +12136,9 @@ XLogPageRead(XLogReaderState *state, /* * Request a restartpoint if we've replayed too much xlog since the * last one. + * + * XXX Why is this here? Move it to recovery loop, since it's based + * on replay position, not read position? */ if (bgwriterLaunched) { @@ -12613,6 +12630,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, * be updated on each cycle. When we are behind, * XLogReceiptTime will not advance, so the grace time * allotted to conflicting queries will decrease. + * */ if (RecPtr < flushedUpto) havedata = true; diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index 02257768ec86a..f66592482a478 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -38,6 +38,9 @@ static void report_invalid_record(XLogReaderState *state, const char *fmt,...) static bool allocate_recordbuf(XLogReaderState *state, uint32 reclength); static bool XLogNeedData(XLogReaderState *state, XLogRecPtr pageptr, int reqLen, bool header_inclusive); +size_t DecodeXLogRecordRequiredSpace(size_t xl_tot_len); +static XLogReadRecordResult XLogDecodeOneRecord(XLogReaderState *state, + bool allow_oversized); static void XLogReaderInvalReadState(XLogReaderState *state); static bool ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr, XLogRecPtr PrevRecPtr, XLogRecord *record); @@ -50,6 +53,8 @@ static void WALOpenSegmentInit(WALOpenSegment *seg, WALSegmentContext *segcxt, /* size of the buffer allocated for error message. */ #define MAX_ERRORMSG_LEN 1000 +#define DEFAULT_DECODE_BUFFER_SIZE 0x10000 + /* * Construct a string in state->errormsg_buf explaining what's wrong with * the current record being read. @@ -64,6 +69,8 @@ report_invalid_record(XLogReaderState *state, const char *fmt,...) va_start(args, fmt); vsnprintf(state->errormsg_buf, MAX_ERRORMSG_LEN, fmt, args); va_end(args); + + state->errormsg_deferred = true; } /* @@ -86,8 +93,6 @@ XLogReaderAllocate(int wal_segment_size, const char *waldir, /* initialize caller-provided support functions */ state->cleanup_cb = cleanup_cb; - state->max_block_id = -1; - /* * Permanently allocate readBuf. We do it this way, rather than just * making a static array, for two reasons: (1) no need to waste the @@ -136,18 +141,11 @@ XLogReaderAllocate(int wal_segment_size, const char *waldir, void XLogReaderFree(XLogReaderState *state) { - int block_id; - if (state->seg.ws_file >= 0) state->cleanup_cb(state); - for (block_id = 0; block_id <= XLR_MAX_BLOCK_ID; block_id++) - { - if (state->blocks[block_id].data) - pfree(state->blocks[block_id].data); - } - if (state->main_data) - pfree(state->main_data); + if (state->decode_buffer && state->free_decode_buffer) + pfree(state->decode_buffer); pfree(state->errormsg_buf); if (state->readRecordBuf) @@ -156,6 +154,22 @@ XLogReaderFree(XLogReaderState *state) pfree(state); } +/* + * Set the size of the decoding buffer. A pointer to a caller supplied memory + * region may also be passed in, in which case non-oversized records will be + * decoded there. + */ +void +XLogReaderSetDecodeBuffer(XLogReaderState *state, void *buffer, size_t size) +{ + Assert(state->decode_buffer == NULL); + + state->decode_buffer = buffer; + state->decode_buffer_size = size; + state->decode_buffer_head = buffer; + state->decode_buffer_tail = buffer; +} + /* * Allocate readRecordBuf to fit a record of at least the given length. * Returns true if successful, false if out of memory. @@ -243,22 +257,123 @@ XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr) /* Begin at the passed-in record pointer. */ state->EndRecPtr = RecPtr; + state->NextRecPtr = RecPtr; state->ReadRecPtr = InvalidXLogRecPtr; + state->DecodeRecPtr = InvalidXLogRecPtr; state->readRecordState = XLREAD_NEXT_RECORD; } /* - * Attempt to read an XLOG record. - * - * XLogBeginRead() or XLogFindNextRecord() must be called before the first call - * to XLogReadRecord(). + * See if we can release the last record that was returned by + * XLogReadRecord(), to free up space. + */ +static void +XLogReleasePreviousRecord(XLogReaderState *state) +{ + DecodedXLogRecord *record; + + /* + * Remove it from the decoded record queue. It must be the oldest + * item decoded, decode_queue_tail. + */ + record = state->record; + Assert(record == state->decode_queue_tail); + state->record = NULL; + state->decode_queue_tail = record->next; + + /* It might also be the newest item decoded, decode_queue_head. */ + if (state->decode_queue_head == record) + state->decode_queue_head = NULL; + + /* Release the space. */ + if (unlikely(record->oversized)) + { + /* It's not in the the decode buffer, so free it to release space. */ + pfree(record); + } + else + { + /* It must be the tail record in the decode buffer. */ + Assert(state->decode_buffer_tail == (char *) record); + + /* + * We need to update tail to point to the next record that is in the + * decode buffer, if any, being careful to skip oversized ones + * (they're not in the decode buffer). + */ + record = record->next; + while (unlikely(record && record->oversized)) + record = record->next; + + if (record) + { + /* Adjust tail to release space up to the next record. */ + state->decode_buffer_tail = (char *) record; + } + else if (state->decoding && !state->decoding->oversized) + { + /* + * We're releasing the last fully decoded record in + * XLogReadRecord(), but some time earlier we partially decoded a + * record in XLogReadAhead() and were unable to complete the job. + * We'll set the buffer head and tail to point to the record we + * started working on, so that we can continue (perhaps from a + * different source). + */ + state->decode_buffer_tail = (char *) state->decoding; + state->decode_buffer_head = (char *) state->decoding; + } + else + { + /* + * Otherwise we might as well just reset head and tail to the + * start of the buffer space, because we're empty. This means + * we'll keep overwriting the same piece of memory if we're not + * doing any prefetching. + */ + state->decode_buffer_tail = state->decode_buffer; + state->decode_buffer_head = state->decode_buffer; + } + } +} + +/* + * Similar to XLogNextRecord(), but this traditional interface is for code + * that just wants the header, not the decoded record. Callers can access the + * decoded record through the XLogRecGetXXX() macros. + */ +XLogReadRecordResult +XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) +{ + XLogReadRecordResult result; + DecodedXLogRecord *decoded; + + /* Consume the next decoded record. */ + result = XLogNextRecord(state, &decoded, errormsg); + if (result == XLREAD_SUCCESS) + { + /* + * The traditional interface just returns the header, not the decoded + * record. The caller will access the decoded record through the + * XLogRecGetXXX() macros. + */ + *record = &decoded->header; + } + else + *record = NULL; + return result; +} + +/* + * Consume the next record. XLogBeginRead() or XLogFindNextRecord() must be + * called before the first call to XLogNextRecord(). * * This function may return XLREAD_NEED_DATA several times before returning a * result record. The caller shall read in some new data then call this * function again with the same parameters. * * When a record is successfully read, returns XLREAD_SUCCESS with result - * record being stored in *record. Otherwise *record is NULL. + * record being stored in *record. Otherwise *record is set to NULL. * * Returns XLREAD_NEED_DATA if more data is needed to finish decoding the * current record. In that case, state->readPagePtr and state->reqLen inform @@ -269,11 +384,249 @@ XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr) * length of data that is now available (which must be >= given reqLen), * respectively. * - * If invalid data is encountered, returns XLREAD_FAIL and sets *record to - * NULL. *errormsg is set to a string with details of the failure. The + * Returns XLREAD_FULL if allow_oversized is true, and no space is available. + * This is intended for readahead. + * + * If invalid data is encountered, returns XLREAD_FAIL with *record being set + * to NULL. *errormsg is set to a string with details of the failure. The * returned pointer (or *errormsg) points to an internal buffer that's valid * until the next call to XLogReadRecord. * + */ +XLogReadRecordResult +XLogNextRecord(XLogReaderState *state, + DecodedXLogRecord **record, + char **errormsg) +{ + /* Release the space occupied by the last record we returned. */ + if (state->record) + XLogReleasePreviousRecord(state); + + for (;;) + { + XLogReadRecordResult result; + + /* We can now return the oldest item in the queue, if there is one. */ + if (state->decode_queue_tail) + { + /* + * Record this as the most recent record returned, so that we'll + * release it next time. This also exposes it to the + * XLogRecXXX(decoder) macros, which pass in the decoder rather + * than the record for historical reasons. + */ + state->record = state->decode_queue_tail; + + /* + * It should be immediately after the last the record returned by + * XLogReadRecord(), or at the position set by XLogBeginRead() if + * XLogReadRecord() hasn't been called yet. It may be after a + * page header, though. + */ + Assert(state->record->lsn == state->EndRecPtr || + (state->EndRecPtr % XLOG_BLCKSZ == 0 && + (state->record->lsn == state->EndRecPtr + SizeOfXLogShortPHD || + state->record->lsn == state->EndRecPtr + SizeOfXLogLongPHD))); + + /* + * Set ReadRecPtr and EndRecPtr to correspond to that + * record. + * + * Calling code could access these through the returned decoded + * record, but for now we'll update them directly here, for the + * benefit of all the existing code that accesses these variables + * directly. + */ + state->ReadRecPtr = state->record->lsn; + state->EndRecPtr = state->record->next_lsn; + + *errormsg = NULL; + *record = state->record; + + return XLREAD_SUCCESS; + } + else if (state->errormsg_deferred) + { + /* + * If we've run out of records, but we have a deferred error, now + * is the time to report it. + */ + state->errormsg_deferred = false; + if (state->errormsg_buf[0] != '\0') + *errormsg = state->errormsg_buf; + else + *errormsg = NULL; + *record = NULL; + state->EndRecPtr = state->DecodeRecPtr; + + return XLREAD_FAIL; + } + + /* We need to get a decoded record into our queue first. */ + result = XLogDecodeOneRecord(state, true /* allow_oversized */ ); + switch(result) + { + case XLREAD_NEED_DATA: + *errormsg = NULL; + *record = NULL; + return result; + case XLREAD_SUCCESS: + Assert(state->decode_queue_tail != NULL); + break; + case XLREAD_FULL: + /* Not expected because we passed allow_oversized = true */ + Assert(false); + break; + case XLREAD_FAIL: + /* + * If that produced neither a queued record nor a queued error, + * then we're at the end (for example, archive recovery with no + * more files available). + */ + Assert(state->decode_queue_tail == NULL); + if (!state->errormsg_deferred) + { + state->EndRecPtr = state->DecodeRecPtr; + *errormsg = NULL; + *record = NULL; + return result; + } + break; + } + } + + /* unreachable */ + return XLREAD_FAIL; +} + +/* + * Try to decode the next available record. The next record will also be + * returned to XLogRecordRead(). + * + * In addition to the values that XLogReadRecord() can return, XLogReadAhead() + * can also return XLREAD_FULL to indicate that further readahead is not + * possible yet due to lack of space. + */ +XLogReadRecordResult +XLogReadAhead(XLogReaderState *state, DecodedXLogRecord **record, char **errormsg) +{ + XLogReadRecordResult result; + + /* We stop trying after encountering an error. */ + if (unlikely(state->errormsg_deferred)) + { + /* We only report the error message the first time, see below. */ + *errormsg = NULL; + return XLREAD_FAIL; + } + + /* + * Try to decode one more record, if we have space. Pass allow_oversized + * = false, so that this call returns fast if the decode buffer is full. + */ + result = XLogDecodeOneRecord(state, false); + switch (result) + { + case XLREAD_SUCCESS: + /* New record at head of decode record queue. */ + Assert(state->decode_queue_head != NULL); + *record = state->decode_queue_head; + return result; + case XLREAD_FULL: + /* No space in circular decode buffer. */ + return result; + case XLREAD_NEED_DATA: + /* The caller needs to insert more data. */ + return result; + case XLREAD_FAIL: + /* Report the error. XLogReadRecord() will also report it. */ + Assert(state->errormsg_deferred); + if (state->errormsg_buf[0] != '\0') + *errormsg = state->errormsg_buf; + return result; + } + + /* Unreachable. */ + return XLREAD_FAIL; +} + +/* + * Allocate space for a decoded record. The only member of the returned + * object that is initialized is the 'oversized' flag, indicating that the + * decoded record wouldn't fit in the decode buffer and must eventually be + * freed explicitly. + * + * Return NULL if there is no space in the decode buffer and allow_oversized + * is false, or if memory allocation fails for an oversized buffer. + */ +static DecodedXLogRecord * +XLogReadRecordAlloc(XLogReaderState *state, size_t xl_tot_len, bool allow_oversized) +{ + size_t required_space = DecodeXLogRecordRequiredSpace(xl_tot_len); + DecodedXLogRecord *decoded = NULL; + + /* Allocate a circular decode buffer if we don't have one already. */ + if (unlikely(state->decode_buffer == NULL)) + { + if (state->decode_buffer_size == 0) + state->decode_buffer_size = DEFAULT_DECODE_BUFFER_SIZE; + state->decode_buffer = palloc(state->decode_buffer_size); + state->decode_buffer_head = state->decode_buffer; + state->decode_buffer_tail = state->decode_buffer; + state->free_decode_buffer = true; + } + if (state->decode_buffer_head >= state->decode_buffer_tail) + { + /* Empty, or head is to the right of tail. */ + if (state->decode_buffer_head + required_space <= + state->decode_buffer + state->decode_buffer_size) + { + /* There is space between head and end. */ + decoded = (DecodedXLogRecord *) state->decode_buffer_head; + decoded->oversized = false; + return decoded; + } + else if (state->decode_buffer + required_space < + state->decode_buffer_tail) + { + /* There is space between start and tail. */ + decoded = (DecodedXLogRecord *) state->decode_buffer; + decoded->oversized = false; + return decoded; + } + } + else + { + /* Head is to the left of tail. */ + if (state->decode_buffer_head + required_space < + state->decode_buffer_tail) + { + /* There is space between head and tail. */ + decoded = (DecodedXLogRecord *) state->decode_buffer_head; + decoded->oversized = false; + return decoded; + } + } + + /* Not enough space in the decode buffer. Are we allowed to allocate? */ + if (allow_oversized) + { + decoded = palloc_extended(required_space, MCXT_ALLOC_NO_OOM); + if (decoded == NULL) + return NULL; + decoded->oversized = true; + return decoded; + } + + return decoded; +} + +/* + * Try to read and decode the next record and add it to the head of the + * decoded record queue. If 'allow_oversized' is false, then XLREAD_FULL can + * be returned to indicate the decoding buffer is full. XLogBeginRead() or + * XLogFindNextRecord() must be called before the first call to + * XLogReadRecord(). * * This function runs a state machine consisting of the following states. * @@ -300,35 +653,35 @@ XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr) * current state. This behavior allows us to continue reading a record * after switching to a different source, during streaming replication. */ -XLogReadRecordResult -XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) +static XLogReadRecordResult +XLogDecodeOneRecord(XLogReaderState *state, bool allow_oversized) { + XLogRecord *record; + char *errormsg; /* not used */ XLogRecord *prec; - *record = NULL; - /* reset error state */ - *errormsg = NULL; state->errormsg_buf[0] = '\0'; + record = NULL; switch (state->readRecordState) { case XLREAD_NEXT_RECORD: - ResetDecoder(state); + Assert(!state->decoding); - if (state->ReadRecPtr != InvalidXLogRecPtr) + if (state->DecodeRecPtr != InvalidXLogRecPtr) { /* read the record after the one we just read */ /* - * EndRecPtr is pointing to end+1 of the previous WAL record. + * NextRecPtr is pointing to end+1 of the previous WAL record. * If we're at a page boundary, no more records can fit on the * current page. We must skip over the page header, but we * can't do that until we've read in the page, since the * header size is variable. */ - state->PrevRecPtr = state->ReadRecPtr; - state->ReadRecPtr = state->EndRecPtr; + state->PrevRecPtr = state->DecodeRecPtr; + state->DecodeRecPtr = state->NextRecPtr; } else { @@ -338,8 +691,8 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) * In this case, EndRecPtr should already be pointing to a * valid record starting position. */ - Assert(XRecOffIsValid(state->EndRecPtr)); - state->ReadRecPtr = state->EndRecPtr; + Assert(XRecOffIsValid(state->NextRecPtr)); + state->DecodeRecPtr = state->NextRecPtr; /* * We cannot verify the previous-record pointer when we're @@ -347,7 +700,6 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) * won't try doing that. */ state->PrevRecPtr = InvalidXLogRecPtr; - state->EndRecPtr = InvalidXLogRecPtr; /* to be tidy */ } state->record_verified = false; @@ -362,9 +714,11 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) uint32 targetRecOff; XLogPageHeader pageHeader; + Assert(!state->decoding); + targetPagePtr = - state->ReadRecPtr - (state->ReadRecPtr % XLOG_BLCKSZ); - targetRecOff = state->ReadRecPtr % XLOG_BLCKSZ; + state->DecodeRecPtr - (state->DecodeRecPtr % XLOG_BLCKSZ); + targetRecOff = state->DecodeRecPtr % XLOG_BLCKSZ; /* * Check if we have enough data. For the first record in the @@ -385,13 +739,13 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) if (targetRecOff == 0) { /* At page start, so skip over page header. */ - state->ReadRecPtr += pageHeaderSize; + state->DecodeRecPtr += pageHeaderSize; targetRecOff = pageHeaderSize; } else if (targetRecOff < pageHeaderSize) { report_invalid_record(state, "invalid record offset at %X/%X", - LSN_FORMAT_ARGS(state->ReadRecPtr)); + LSN_FORMAT_ARGS(state->DecodeRecPtr)); goto err; } @@ -400,8 +754,8 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) targetRecOff == pageHeaderSize) { report_invalid_record(state, "contrecord is requested by %X/%X", - (uint32) (state->ReadRecPtr >> 32), - (uint32) state->ReadRecPtr); + (uint32) (state->DecodeRecPtr >> 32), + (uint32) state->DecodeRecPtr); goto err; } @@ -419,9 +773,26 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) * header. */ prec = (XLogRecord *) (state->readBuf + - state->ReadRecPtr % XLOG_BLCKSZ); + state->DecodeRecPtr % XLOG_BLCKSZ); total_len = prec->xl_tot_len; + /* Find space to decode this record. */ + Assert(state->decoding == NULL); + state->decoding = XLogReadRecordAlloc(state, total_len, + allow_oversized); + if (state->decoding == NULL) + { + /* + * We couldn't get space. If allow_oversized was true, + * then palloc() must have failed. Otherwise, report that + * our decoding buffer is full. This means that weare + * trying to read too far ahead. + */ + if (allow_oversized) + goto err; + return XLREAD_FULL; + } + /* * If the whole record header is on this page, validate it * immediately. Otherwise do just a basic sanity check on @@ -433,7 +804,7 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) */ if (targetRecOff <= XLOG_BLCKSZ - SizeOfXLogRecord) { - if (!ValidXLogRecordHeader(state, state->ReadRecPtr, + if (!ValidXLogRecordHeader(state, state->DecodeRecPtr, state->PrevRecPtr, prec)) goto err; @@ -446,7 +817,7 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) { report_invalid_record(state, "invalid record length at %X/%X: wanted %u, got %u", - LSN_FORMAT_ARGS(state->ReadRecPtr), + LSN_FORMAT_ARGS(state->DecodeRecPtr), (uint32) SizeOfXLogRecord, total_len); goto err; } @@ -471,13 +842,15 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) XLogRecPtr targetPagePtr; uint32 targetRecOff; + Assert(state->decoding); + /* * Wait for the rest of the record on the first page to become * available */ targetPagePtr = - state->ReadRecPtr - (state->ReadRecPtr % XLOG_BLCKSZ); - targetRecOff = state->ReadRecPtr % XLOG_BLCKSZ; + state->DecodeRecPtr - (state->DecodeRecPtr % XLOG_BLCKSZ); + targetRecOff = state->DecodeRecPtr % XLOG_BLCKSZ; request_len = Min(targetRecOff + total_len, XLOG_BLCKSZ); record_len = request_len - targetRecOff; @@ -496,7 +869,7 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) /* validate record header if not yet */ if (!state->record_verified && record_len >= SizeOfXLogRecord) { - if (!ValidXLogRecordHeader(state, state->ReadRecPtr, + if (!ValidXLogRecordHeader(state, state->DecodeRecPtr, state->PrevRecPtr, prec)) goto err; @@ -509,15 +882,15 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) /* Record does not cross a page boundary */ Assert(state->record_verified); - if (!ValidXLogRecord(state, prec, state->ReadRecPtr)) + if (!ValidXLogRecord(state, prec, state->DecodeRecPtr)) goto err; state->record_verified = true; /* to be tidy */ /* We already checked the header earlier */ - state->EndRecPtr = state->ReadRecPtr + MAXALIGN(record_len); + state->NextRecPtr = state->DecodeRecPtr + MAXALIGN(record_len); - *record = prec; + record = prec; state->readRecordState = XLREAD_NEXT_RECORD; break; } @@ -536,7 +909,7 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) report_invalid_record(state, "record length %u at %X/%X too long", total_len, - LSN_FORMAT_ARGS(state->ReadRecPtr)); + LSN_FORMAT_ARGS(state->DecodeRecPtr)); goto err; } @@ -547,7 +920,7 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) state->recordRemainLen -= record_len; /* Calculate pointer to beginning of next page */ - state->recordContRecPtr = state->ReadRecPtr + record_len; + state->recordContRecPtr = state->DecodeRecPtr + record_len; Assert(state->recordContRecPtr % XLOG_BLCKSZ == 0); state->readRecordState = XLREAD_CONTINUATION; @@ -564,6 +937,7 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) * we enter this state only if we haven't read the whole * record. */ + Assert(state->decoding); Assert(state->recordRemainLen > 0); while (state->recordRemainLen > 0) @@ -583,7 +957,7 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) return XLREAD_NEED_DATA; if (!state->page_verified) - goto err; + goto err_continue; Assert(SizeOfXLogShortPHD <= state->readLen); @@ -596,8 +970,8 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) "there is no contrecord flag at %X/%X reading %X/%X", (uint32) (state->recordContRecPtr >> 32), (uint32) state->recordContRecPtr, - (uint32) (state->ReadRecPtr >> 32), - (uint32) state->ReadRecPtr); + (uint32) (state->DecodeRecPtr >> 32), + (uint32) state->DecodeRecPtr); goto err; } @@ -614,8 +988,8 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) pageHeader->xlp_rem_len, (uint32) (state->recordContRecPtr >> 32), (uint32) state->recordContRecPtr, - (uint32) (state->ReadRecPtr >> 32), - (uint32) state->ReadRecPtr, + (uint32) (state->DecodeRecPtr >> 32), + (uint32) state->DecodeRecPtr, state->recordRemainLen); goto err; } @@ -651,7 +1025,7 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) if (!state->record_verified) { Assert(state->recordGotLen >= SizeOfXLogRecord); - if (!ValidXLogRecordHeader(state, state->ReadRecPtr, + if (!ValidXLogRecordHeader(state, state->DecodeRecPtr, state->PrevRecPtr, (XLogRecord *) state->readRecordBuf)) goto err; @@ -668,16 +1042,17 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) /* targetPagePtr is pointing the last-read page here */ prec = (XLogRecord *) state->readRecordBuf; - if (!ValidXLogRecord(state, prec, state->ReadRecPtr)) + if (!ValidXLogRecord(state, prec, state->DecodeRecPtr)) goto err; pageHeaderSize = XLogPageHeaderSize((XLogPageHeader) state->readBuf); - state->EndRecPtr = targetPagePtr + pageHeaderSize + state->NextRecPtr = targetPagePtr + pageHeaderSize + MAXALIGN(pageHeader->xlp_rem_len); - *record = prec; + record = prec; state->readRecordState = XLREAD_NEXT_RECORD; + break; } } @@ -685,32 +1060,65 @@ XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) /* * Special processing if it's an XLOG SWITCH record */ - if ((*record)->xl_rmid == RM_XLOG_ID && - ((*record)->xl_info & ~XLR_INFO_MASK) == XLOG_SWITCH) + if (record->xl_rmid == RM_XLOG_ID && + (record->xl_info & ~XLR_INFO_MASK) == XLOG_SWITCH) { /* Pretend it extends to end of segment */ - state->EndRecPtr += state->segcxt.ws_segsize - 1; - state->EndRecPtr -= XLogSegmentOffset(state->EndRecPtr, state->segcxt.ws_segsize); + state->NextRecPtr += state->segcxt.ws_segsize - 1; + state->NextRecPtr -= XLogSegmentOffset(state->NextRecPtr, state->segcxt.ws_segsize); } - if (DecodeXLogRecord(state, *record, errormsg)) - return XLREAD_SUCCESS; + Assert(!record || state->readLen >= 0); + if (DecodeXLogRecord(state, state->decoding, record, state->DecodeRecPtr, &errormsg)) + { + /* Record the location of the next record. */ + state->decoding->next_lsn = state->NextRecPtr; - *record = NULL; - return XLREAD_FAIL; + /* + * If it's in the decode buffer (not an "oversized" record allocated + * with palloc()), mark the decode buffer space as occupied. + */ + if (!state->decoding->oversized) + { + /* The new decode buffer head must be MAXALIGNed. */ + Assert(state->decoding->size == MAXALIGN(state->decoding->size)); + if ((char *) state->decoding == state->decode_buffer) + state->decode_buffer_head = state->decode_buffer + + state->decoding->size; + else + state->decode_buffer_head += state->decoding->size; + } + + /* Insert it into the queue of decoded records. */ + Assert(state->decode_queue_head != state->decoding); + if (state->decode_queue_head) + state->decode_queue_head->next = state->decoding; + state->decode_queue_head = state->decoding; + if (!state->decode_queue_tail) + state->decode_queue_tail = state->decoding; + state->decoding = NULL; + + return XLREAD_SUCCESS; + } err: + if (state->decoding && state->decoding->oversized) + pfree(state->decoding); + state->decoding = NULL; +err_continue: /* * Invalidate the read page. We might read from a different source after * failure. */ XLogReaderInvalReadState(state); - if (state->errormsg_buf[0] != '\0') - *errormsg = state->errormsg_buf; + /* + * If an error was written to errmsg_buf, it'll be returned to the caller + * of XLogReadRecord() after all successfully decoded records from the + * read queue. + */ - *record = NULL; return XLREAD_FAIL; } @@ -1342,34 +1750,84 @@ WALRead(XLogReaderState *state, * ---------------------------------------- */ -/* private function to reset the state between records */ +/* + * Private function to reset the state, forgetting all decoded records, if we + * are asked to move to a new read position. + */ static void ResetDecoder(XLogReaderState *state) { - int block_id; - - state->decoded_record = NULL; + DecodedXLogRecord *r; - state->main_data_len = 0; - - for (block_id = 0; block_id <= state->max_block_id; block_id++) + /* Reset the decoded record queue, freeing any oversized records. */ + while ((r = state->decode_queue_tail)) { - state->blocks[block_id].in_use = false; - state->blocks[block_id].has_image = false; - state->blocks[block_id].has_data = false; - state->blocks[block_id].apply_image = false; + state->decode_queue_tail = r->next; + if (r->oversized) + pfree(r); } - state->max_block_id = -1; + state->decode_queue_head = NULL; + state->decode_queue_tail = NULL; + state->record = NULL; + state->decoding = NULL; + + /* Reset the decode buffer to empty. */ + state->decode_buffer_head = state->decode_buffer; + state->decode_buffer_tail = state->decode_buffer; + + /* Clear error state. */ + state->errormsg_buf[0] = '\0'; + state->errormsg_deferred = false; +} + +/* + * Compute the maximum possible amount of padding that could be required to + * decode a record, given xl_tot_len from the record's header. This is the + * amount of output buffer space that we need to decode a record, though we + * might not finish up using it all. + * + * This computation is pessimistic and assumes the maximum possible number of + * blocks, due to lack of better information. + */ +size_t +DecodeXLogRecordRequiredSpace(size_t xl_tot_len) +{ + size_t size = 0; + + /* Account for the fixed size part of the decoded record struct. */ + size += offsetof(DecodedXLogRecord, blocks[0]); + /* Account for the flexible blocks array of maximum possible size. */ + size += sizeof(DecodedBkpBlock) * (XLR_MAX_BLOCK_ID + 1); + /* Account for all the raw main and block data. */ + size += xl_tot_len; + /* We might insert padding before main_data. */ + size += (MAXIMUM_ALIGNOF - 1); + /* We might insert padding before each block's data. */ + size += (MAXIMUM_ALIGNOF - 1) * (XLR_MAX_BLOCK_ID + 1); + /* We might insert padding at the end. */ + size += (MAXIMUM_ALIGNOF - 1); + + return size; } /* - * Decode the previously read record. + * Decode a record. "decoded" must point to a MAXALIGNed memory area that has + * space for at least DecodeXLogRecordRequiredSpace(record) bytes. On + * success, decoded->size contains the actual space occupied by the decoded + * record, which may turn out to be less. + * + * Only decoded->oversized member must be initialized already, and will not be + * modified. Other members will be initialized as required. * * On error, a human-readable error message is returned in *errormsg, and * the return value is false. */ bool -DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg) +DecodeXLogRecord(XLogReaderState *state, + DecodedXLogRecord *decoded, + XLogRecord *record, + XLogRecPtr lsn, + char **errormsg) { /* * read next _size bytes from record buffer, but check for overrun first. @@ -1384,17 +1842,20 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg) } while(0) char *ptr; + char *out; uint32 remaining; uint32 datatotal; RelFileNode *rnode = NULL; uint8 block_id; - ResetDecoder(state); - - state->decoded_record = record; - state->record_origin = InvalidRepOriginId; - state->toplevel_xid = InvalidTransactionId; - + decoded->header = *record; + decoded->lsn = lsn; + decoded->next = NULL; + decoded->record_origin = InvalidRepOriginId; + decoded->toplevel_xid = InvalidTransactionId; + decoded->main_data = NULL; + decoded->main_data_len = 0; + decoded->max_block_id = -1; ptr = (char *) record; ptr += SizeOfXLogRecord; remaining = record->xl_tot_len - SizeOfXLogRecord; @@ -1412,7 +1873,7 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg) COPY_HEADER_FIELD(&main_data_len, sizeof(uint8)); - state->main_data_len = main_data_len; + decoded->main_data_len = main_data_len; datatotal += main_data_len; break; /* by convention, the main data fragment is * always last */ @@ -1423,18 +1884,18 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg) uint32 main_data_len; COPY_HEADER_FIELD(&main_data_len, sizeof(uint32)); - state->main_data_len = main_data_len; + decoded->main_data_len = main_data_len; datatotal += main_data_len; break; /* by convention, the main data fragment is * always last */ } else if (block_id == XLR_BLOCK_ID_ORIGIN) { - COPY_HEADER_FIELD(&state->record_origin, sizeof(RepOriginId)); + COPY_HEADER_FIELD(&decoded->record_origin, sizeof(RepOriginId)); } else if (block_id == XLR_BLOCK_ID_TOPLEVEL_XID) { - COPY_HEADER_FIELD(&state->toplevel_xid, sizeof(TransactionId)); + COPY_HEADER_FIELD(&decoded->toplevel_xid, sizeof(TransactionId)); } else if (block_id <= XLR_MAX_BLOCK_ID) { @@ -1442,7 +1903,11 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg) DecodedBkpBlock *blk; uint8 fork_flags; - if (block_id <= state->max_block_id) + /* mark any intervening block IDs as not in use */ + for (int i = decoded->max_block_id + 1; i < block_id; ++i) + decoded->blocks[i].in_use = false; + + if (block_id <= decoded->max_block_id) { report_invalid_record(state, "out-of-order block_id %u at %X/%X", @@ -1450,9 +1915,9 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg) LSN_FORMAT_ARGS(state->ReadRecPtr)); goto err; } - state->max_block_id = block_id; + decoded->max_block_id = block_id; - blk = &state->blocks[block_id]; + blk = &decoded->blocks[block_id]; blk->in_use = true; blk->apply_image = false; @@ -1596,17 +2061,18 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg) /* * Ok, we've parsed the fragment headers, and verified that the total * length of the payload in the fragments is equal to the amount of data - * left. Copy the data of each fragment to a separate buffer. - * - * We could just set up pointers into readRecordBuf, but we want to align - * the data for the convenience of the callers. Backup images are not - * copied, however; they don't need alignment. + * left. Copy the data of each fragment to contiguous space after the + * blocks array, inserting alignment padding before the data fragments so + * they can be cast to struct pointers by REDO routines. */ + out = ((char *) decoded) + + offsetof(DecodedXLogRecord, blocks) + + sizeof(decoded->blocks[0]) * (decoded->max_block_id + 1); /* block data first */ - for (block_id = 0; block_id <= state->max_block_id; block_id++) + for (block_id = 0; block_id <= decoded->max_block_id; block_id++) { - DecodedBkpBlock *blk = &state->blocks[block_id]; + DecodedBkpBlock *blk = &decoded->blocks[block_id]; if (!blk->in_use) continue; @@ -1615,58 +2081,37 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg) if (blk->has_image) { - blk->bkp_image = ptr; + /* no need to align image */ + blk->bkp_image = out; + memcpy(out, ptr, blk->bimg_len); ptr += blk->bimg_len; + out += blk->bimg_len; } if (blk->has_data) { - if (!blk->data || blk->data_len > blk->data_bufsz) - { - if (blk->data) - pfree(blk->data); - - /* - * Force the initial request to be BLCKSZ so that we don't - * waste time with lots of trips through this stanza as a - * result of WAL compression. - */ - blk->data_bufsz = MAXALIGN(Max(blk->data_len, BLCKSZ)); - blk->data = palloc(blk->data_bufsz); - } + out = (char *) MAXALIGN(out); + blk->data = out; memcpy(blk->data, ptr, blk->data_len); ptr += blk->data_len; + out += blk->data_len; } } /* and finally, the main data */ - if (state->main_data_len > 0) + if (decoded->main_data_len > 0) { - if (!state->main_data || state->main_data_len > state->main_data_bufsz) - { - if (state->main_data) - pfree(state->main_data); - - /* - * main_data_bufsz must be MAXALIGN'ed. In many xlog record - * types, we omit trailing struct padding on-disk to save a few - * bytes; but compilers may generate accesses to the xlog struct - * that assume that padding bytes are present. If the palloc - * request is not large enough to include such padding bytes then - * we'll get valgrind complaints due to otherwise-harmless fetches - * of the padding bytes. - * - * In addition, force the initial request to be reasonably large - * so that we don't waste time with lots of trips through this - * stanza. BLCKSZ / 2 seems like a good compromise choice. - */ - state->main_data_bufsz = MAXALIGN(Max(state->main_data_len, - BLCKSZ / 2)); - state->main_data = palloc(state->main_data_bufsz); - } - memcpy(state->main_data, ptr, state->main_data_len); - ptr += state->main_data_len; + out = (char *) MAXALIGN(out); + decoded->main_data = out; + memcpy(decoded->main_data, ptr, decoded->main_data_len); + ptr += decoded->main_data_len; + out += decoded->main_data_len; } + /* Report the actual size we used. */ + decoded->size = MAXALIGN(out - (char *) decoded); + Assert(DecodeXLogRecordRequiredSpace(record->xl_tot_len) >= + decoded->size); + return true; shortdata_err: @@ -1692,10 +2137,11 @@ XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id, { DecodedBkpBlock *bkpb; - if (!record->blocks[block_id].in_use) + if (block_id > record->record->max_block_id || + !record->record->blocks[block_id].in_use) return false; - bkpb = &record->blocks[block_id]; + bkpb = &record->record->blocks[block_id]; if (rnode) *rnode = bkpb->rnode; if (forknum) @@ -1715,10 +2161,11 @@ XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len) { DecodedBkpBlock *bkpb; - if (!record->blocks[block_id].in_use) + if (block_id > record->record->max_block_id || + !record->record->blocks[block_id].in_use) return NULL; - bkpb = &record->blocks[block_id]; + bkpb = &record->record->blocks[block_id]; if (!bkpb->has_data) { @@ -1746,12 +2193,13 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page) char *ptr; PGAlignedBlock tmp; - if (!record->blocks[block_id].in_use) + if (block_id > record->record->max_block_id || + !record->record->blocks[block_id].in_use) return false; - if (!record->blocks[block_id].has_image) + if (!record->record->blocks[block_id].has_image) return false; - bkpb = &record->blocks[block_id]; + bkpb = &record->record->blocks[block_id]; ptr = bkpb->bkp_image; if (bkpb->bimg_info & BKPIMAGE_IS_COMPRESSED) diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c index e5de26dce54f4..eedd95cc1378a 100644 --- a/src/backend/access/transam/xlogutils.c +++ b/src/backend/access/transam/xlogutils.c @@ -350,7 +350,7 @@ XLogReadBufferForRedoExtended(XLogReaderState *record, * going to initialize it. And vice versa. */ zeromode = (mode == RBM_ZERO_AND_LOCK || mode == RBM_ZERO_AND_CLEANUP_LOCK); - willinit = (record->blocks[block_id].flags & BKPBLOCK_WILL_INIT) != 0; + willinit = (record->record->blocks[block_id].flags & BKPBLOCK_WILL_INIT) != 0; if (willinit && !zeromode) elog(PANIC, "block with WILL_INIT flag in WAL record must be zeroed by redo routine"); if (!willinit && zeromode) diff --git a/src/backend/replication/logical/decode.c b/src/backend/replication/logical/decode.c index 9aab7136843f5..7924581cdcd08 100644 --- a/src/backend/replication/logical/decode.c +++ b/src/backend/replication/logical/decode.c @@ -123,7 +123,7 @@ LogicalDecodingProcessRecord(LogicalDecodingContext *ctx, XLogReaderState *recor { ReorderBufferAssignChild(ctx->reorder, txid, - record->decoded_record->xl_xid, + XLogRecGetXid(record), buf.origptr); } diff --git a/src/bin/pg_rewind/parsexlog.c b/src/bin/pg_rewind/parsexlog.c index 79f71c0477f38..81e186270a362 100644 --- a/src/bin/pg_rewind/parsexlog.c +++ b/src/bin/pg_rewind/parsexlog.c @@ -439,7 +439,7 @@ extractPageInfo(XLogReaderState *record) RmgrNames[rmid], info); } - for (block_id = 0; block_id <= record->max_block_id; block_id++) + for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) { RelFileNode rnode; ForkNumber forknum; diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c index 5db389aa2d2bb..d4d6bb25a9fbb 100644 --- a/src/bin/pg_waldump/pg_waldump.c +++ b/src/bin/pg_waldump/pg_waldump.c @@ -397,10 +397,10 @@ XLogDumpRecordLen(XLogReaderState *record, uint32 *rec_len, uint32 *fpi_len) * add an accessor macro for this. */ *fpi_len = 0; - for (block_id = 0; block_id <= record->max_block_id; block_id++) + for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) { if (XLogRecHasBlockImage(record, block_id)) - *fpi_len += record->blocks[block_id].bimg_len; + *fpi_len += record->record->blocks[block_id].bimg_len; } /* @@ -498,7 +498,7 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogReaderState *record) if (!config->bkp_details) { /* print block references (short format) */ - for (block_id = 0; block_id <= record->max_block_id; block_id++) + for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) { if (!XLogRecHasBlockRef(record, block_id)) continue; @@ -529,7 +529,7 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogReaderState *record) { /* print block references (detailed format) */ putchar('\n'); - for (block_id = 0; block_id <= record->max_block_id; block_id++) + for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) { if (!XLogRecHasBlockRef(record, block_id)) continue; @@ -542,26 +542,26 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogReaderState *record) blk); if (XLogRecHasBlockImage(record, block_id)) { - if (record->blocks[block_id].bimg_info & + if (record->record->blocks[block_id].bimg_info & BKPIMAGE_IS_COMPRESSED) { printf(" (FPW%s); hole: offset: %u, length: %u, " "compression saved: %u", XLogRecBlockImageApply(record, block_id) ? "" : " for WAL verification", - record->blocks[block_id].hole_offset, - record->blocks[block_id].hole_length, + record->record->blocks[block_id].hole_offset, + record->record->blocks[block_id].hole_length, BLCKSZ - - record->blocks[block_id].hole_length - - record->blocks[block_id].bimg_len); + record->record->blocks[block_id].hole_length - + record->record->blocks[block_id].bimg_len); } else { printf(" (FPW%s); hole: offset: %u, length: %u", XLogRecBlockImageApply(record, block_id) ? "" : " for WAL verification", - record->blocks[block_id].hole_offset, - record->blocks[block_id].hole_length); + record->record->blocks[block_id].hole_offset, + record->record->blocks[block_id].hole_length); } } putchar('\n'); diff --git a/src/include/access/xlogreader.h b/src/include/access/xlogreader.h index d27c0cd281c9d..010cbb59d6b92 100644 --- a/src/include/access/xlogreader.h +++ b/src/include/access/xlogreader.h @@ -101,6 +101,7 @@ typedef enum XLogReadRecordResult { XLREAD_SUCCESS, /* record is successfully read */ XLREAD_NEED_DATA, /* need more data. see XLogReadRecord. */ + XLREAD_FULL, /* cannot hold more data while reading ahead */ XLREAD_FAIL /* failed during reading a record */ } XLogReadRecordResult; @@ -120,6 +121,30 @@ typedef enum XLogReadRecordState XLREAD_CONTINUATION } XLogReadRecordState; +/* + * The decoded contents of a record. This occupies a contiguous region of + * memory, with main_data and blocks[n].data pointing to memory after the + * members declared here. + */ +typedef struct DecodedXLogRecord +{ + /* Private member used for resource management. */ + size_t size; /* total size of decoded record */ + bool oversized; /* outside the regular decode buffer? */ + struct DecodedXLogRecord *next; /* decoded record queue link */ + + /* Public members. */ + XLogRecPtr lsn; /* location */ + XLogRecPtr next_lsn; /* location of next record */ + XLogRecord header; /* header */ + RepOriginId record_origin; + TransactionId toplevel_xid; /* XID of top-level transaction */ + char *main_data; /* record's main data portion */ + uint32 main_data_len; /* main data portion's length */ + int max_block_id; /* highest block_id in use (-1 if none) */ + DecodedBkpBlock blocks[FLEXIBLE_ARRAY_MEMBER]; +} DecodedXLogRecord; + struct XLogReaderState { /* @@ -142,10 +167,12 @@ struct XLogReaderState * Start and end point of last record read. EndRecPtr is also used as the * position to read next. Calling XLogBeginRead() sets EndRecPtr to the * starting position and ReadRecPtr to invalid. + * + * Start and end point of last record returned by XLogReadRecord(). These + * are also available as record->lsn and record->next_lsn. */ XLogRecPtr ReadRecPtr; /* start of last record read or being read */ XLogRecPtr EndRecPtr; /* end+1 of last record read */ - XLogRecPtr PrevRecPtr; /* start of previous record read */ /* ---------------------------------------- * Communication with page reader @@ -170,27 +197,43 @@ struct XLogReaderState * Use XLogRecGet* functions to investigate the record; these fields * should not be accessed directly. * ---------------------------------------- + * Start and end point of the last record read and decoded by + * XLogReadRecordInternal(). NextRecPtr is also used as the position to + * decode next. Calling XLogBeginRead() sets NextRecPtr and EndRecPtr to + * the requested starting position. */ - XLogRecord *decoded_record; /* currently decoded record */ - - char *main_data; /* record's main data portion */ - uint32 main_data_len; /* main data portion's length */ - uint32 main_data_bufsz; /* allocated size of the buffer */ - - RepOriginId record_origin; + XLogRecPtr DecodeRecPtr; /* start of last record decoded */ + XLogRecPtr NextRecPtr; /* end+1 of last record decoded */ + XLogRecPtr PrevRecPtr; /* start of previous record decoded */ - TransactionId toplevel_xid; /* XID of top-level transaction */ - - /* information about blocks referenced by the record. */ - DecodedBkpBlock blocks[XLR_MAX_BLOCK_ID + 1]; - - int max_block_id; /* highest block_id in use (-1 if none) */ + /* Last record returned by XLogReadRecord(). */ + DecodedXLogRecord *record; /* ---------------------------------------- * private/internal state * ---------------------------------------- */ + /* + * Buffer for decoded records. This is a circular buffer, though + * individual records can't be split in the middle, so some space is often + * wasted at the end. Oversized records that don't fit in this space are + * allocated separately. + */ + char *decode_buffer; + size_t decode_buffer_size; + bool free_decode_buffer; /* need to free? */ + char *decode_buffer_head; /* write head */ + char *decode_buffer_tail; /* read head */ + + /* + * Queue of records that have been decoded. This is a linked list that + * usually consists of consecutive records in decode_buffer, but may also + * contain oversized records allocated with palloc(). + */ + DecodedXLogRecord *decode_queue_head; /* newest decoded record */ + DecodedXLogRecord *decode_queue_tail; /* oldest decoded record */ + /* last read XLOG position for data currently in readBuf */ WALSegmentContext segcxt; WALOpenSegment seg; @@ -230,7 +273,7 @@ struct XLogReaderState uint32 readRecordBufSize; /* - * XLogReadRecord() state + * XLogReadRecordInternal() state */ XLogReadRecordState readRecordState; /* state machine state */ int recordGotLen; /* amount of current record that has already @@ -238,8 +281,11 @@ struct XLogReaderState int recordRemainLen; /* length of current record that remains */ XLogRecPtr recordContRecPtr; /* where the current record continues */ + DecodedXLogRecord *decoding; /* record currently being decoded */ + /* Buffer to hold error message */ char *errormsg_buf; + bool errormsg_deferred; }; struct XLogFindNextRecordState @@ -264,6 +310,11 @@ extern XLogReaderState *XLogReaderAllocate(int wal_segment_size, /* Free an XLogReader */ extern void XLogReaderFree(XLogReaderState *state); +/* Optionally provide a circular decoding buffer to allow readahead. */ +extern void XLogReaderSetDecodeBuffer(XLogReaderState *state, + void *buffer, + size_t size); + /* Position the XLogReader to given record */ extern void XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr); #ifdef FRONTEND @@ -271,11 +322,21 @@ extern XLogFindNextRecordState *InitXLogFindNextRecord(XLogReaderState *reader_s extern bool XLogFindNextRecord(XLogFindNextRecordState *state); #endif /* FRONTEND */ -/* Read the next XLog record. Returns NULL on end-of-WAL or failure */ +/* Read the next record's header. Returns NULL on end-of-WAL or failure. */ extern XLogReadRecordResult XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg); +/* Read the next decoded record. Returns NULL on end-of-WAL or failure. */ +extern XLogReadRecordResult XLogNextRecord(XLogReaderState *state, + DecodedXLogRecord **record, + char **errormsg); + +/* Try to read ahead, if there is space in the decoding buffer. */ +extern XLogReadRecordResult XLogReadAhead(XLogReaderState *state, + DecodedXLogRecord **record, + char **errormsg); + /* Validate a page */ extern bool XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, char *phdr); @@ -300,25 +361,32 @@ extern bool WALRead(XLogReaderState *state, /* Functions for decoding an XLogRecord */ -extern bool DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, +extern size_t DecodeXLogRecordRequiredSpace(size_t xl_tot_len); +extern bool DecodeXLogRecord(XLogReaderState *state, + DecodedXLogRecord *decoded, + XLogRecord *record, + XLogRecPtr lsn, char **errmsg); -#define XLogRecGetTotalLen(decoder) ((decoder)->decoded_record->xl_tot_len) -#define XLogRecGetPrev(decoder) ((decoder)->decoded_record->xl_prev) -#define XLogRecGetInfo(decoder) ((decoder)->decoded_record->xl_info) -#define XLogRecGetRmid(decoder) ((decoder)->decoded_record->xl_rmid) -#define XLogRecGetXid(decoder) ((decoder)->decoded_record->xl_xid) -#define XLogRecGetOrigin(decoder) ((decoder)->record_origin) -#define XLogRecGetTopXid(decoder) ((decoder)->toplevel_xid) -#define XLogRecGetData(decoder) ((decoder)->main_data) -#define XLogRecGetDataLen(decoder) ((decoder)->main_data_len) -#define XLogRecHasAnyBlockRefs(decoder) ((decoder)->max_block_id >= 0) +#define XLogRecGetTotalLen(decoder) ((decoder)->record->header.xl_tot_len) +#define XLogRecGetPrev(decoder) ((decoder)->record->header.xl_prev) +#define XLogRecGetInfo(decoder) ((decoder)->record->header.xl_info) +#define XLogRecGetRmid(decoder) ((decoder)->record->header.xl_rmid) +#define XLogRecGetXid(decoder) ((decoder)->record->header.xl_xid) +#define XLogRecGetOrigin(decoder) ((decoder)->record->record_origin) +#define XLogRecGetTopXid(decoder) ((decoder)->record->toplevel_xid) +#define XLogRecGetData(decoder) ((decoder)->record->main_data) +#define XLogRecGetDataLen(decoder) ((decoder)->record->main_data_len) +#define XLogRecHasAnyBlockRefs(decoder) ((decoder)->record->max_block_id >= 0) +#define XLogRecMaxBlockId(decoder) ((decoder)->record->max_block_id) +#define XLogRecGetBlock(decoder, i) (&(decoder)->record->blocks[(i)]) #define XLogRecHasBlockRef(decoder, block_id) \ - ((decoder)->blocks[block_id].in_use) + ((decoder)->record->max_block_id >= (block_id)) && \ + ((decoder)->record->blocks[block_id].in_use) #define XLogRecHasBlockImage(decoder, block_id) \ - ((decoder)->blocks[block_id].has_image) + ((decoder)->record->blocks[block_id].has_image) #define XLogRecBlockImageApply(decoder, block_id) \ - ((decoder)->blocks[block_id].apply_image) + ((decoder)->record->blocks[block_id].apply_image) #ifndef FRONTEND extern FullTransactionId XLogRecGetFullXid(XLogReaderState *record); From 1d257577e08d3e598011d6850fd1025858de8c8c Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Thu, 8 Apr 2021 23:03:43 +1200 Subject: [PATCH 050/671] Optionally prefetch referenced data in recovery. Introduce a new GUC recovery_prefetch, disabled by default. When enabled, look ahead in the WAL and try to initiate asynchronous reading of referenced data blocks that are not yet cached in our buffer pool. For now, this is done with posix_fadvise(), which has several caveats. Better mechanisms will follow in later work on the I/O subsystem. The GUC maintenance_io_concurrency is used to limit the number of concurrent I/Os we allow ourselves to initiate, based on pessimistic heuristics used to infer that I/Os have begun and completed. The GUC wal_decode_buffer_size is used to limit the maximum distance we are prepared to read ahead in the WAL to find uncached blocks. Reviewed-by: Alvaro Herrera (parts) Reviewed-by: Andres Freund (parts) Reviewed-by: Tomas Vondra (parts) Tested-by: Tomas Vondra Tested-by: Jakub Wartak Tested-by: Dmitry Dolgov <9erthalion6@gmail.com> Tested-by: Sait Talha Nisanci Discussion: https://postgr.es/m/CA%2BhUKGJ4VJN8ttxScUFM8dOKX0BrBiboo5uz1cq%3DAovOddfHpA%40mail.gmail.com --- doc/src/sgml/config.sgml | 83 ++ doc/src/sgml/monitoring.sgml | 86 +- doc/src/sgml/wal.sgml | 17 + src/backend/access/transam/Makefile | 1 + src/backend/access/transam/xlog.c | 50 +- src/backend/access/transam/xlogprefetch.c | 922 ++++++++++++++++++ src/backend/access/transam/xlogreader.c | 13 + src/backend/access/transam/xlogutils.c | 23 +- src/backend/catalog/system_views.sql | 14 + src/backend/postmaster/pgstat.c | 103 +- src/backend/storage/freespace/freespace.c | 3 +- src/backend/storage/ipc/ipci.c | 3 + src/backend/utils/misc/guc.c | 51 +- src/backend/utils/misc/postgresql.conf.sample | 6 + src/include/access/xlog.h | 1 + src/include/access/xlogprefetch.h | 82 ++ src/include/access/xlogreader.h | 7 + src/include/access/xlogutils.h | 3 +- src/include/catalog/pg_proc.dat | 8 + src/include/pgstat.h | 26 + src/include/utils/guc.h | 4 + src/test/regress/expected/rules.out | 11 + src/tools/pgindent/typedefs.list | 4 + 23 files changed, 1502 insertions(+), 19 deletions(-) create mode 100644 src/backend/access/transam/xlogprefetch.c create mode 100644 src/include/access/xlogprefetch.h diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index ea5cf3a2dc0eb..26628f3e6d3b0 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -3565,6 +3565,89 @@ include_dir 'conf.d' + + + Recovery + + + configuration + of recovery + general settings + + + + This section describes the settings that apply to recovery in general, + affecting crash recovery, streaming replication and archive-based + replication. + + + + + + recovery_prefetch (boolean) + + recovery_prefetch configuration parameter + + + + + Whether to try to prefetch blocks that are referenced in the WAL that + are not yet in the buffer pool, during recovery. Prefetching blocks + that will soon be needed can reduce I/O wait times in some workloads. + See also the and + settings, which limit + prefetching activity. + This setting is disabled by default. + + + This feature currently depends on an effective + posix_fadvise function, which some + operating systems lack. + + + + + + recovery_prefetch_fpw (boolean) + + recovery_prefetch_fpw configuration parameter + + + + + Whether to prefetch blocks that were logged with full page images, + during recovery. Often this doesn't help, since such blocks will not + be read the first time they are needed and might remain in the buffer + pool after that. However, on file systems with a block size larger + than + PostgreSQL's, prefetching can avoid a + costly read-before-write when a blocks are later written. + The default is off. + + + + + + wal_decode_buffer_size (integer) + + wal_decode_buffer_size configuration parameter + + + + + A limit on how far ahead the server can look in the WAL, to find + blocks to prefetch. Setting it too high might be counterproductive, + if it means that data falls out of the + kernel cache before it is needed. If this value is specified without + units, it is taken as bytes. + The default is 512kB. + + + + + + + Archive Recovery diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index da16c461f08d5..f637fe041529f 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -337,6 +337,13 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser + + pg_stat_prefetch_recoverypg_stat_prefetch_recovery + Only one row, showing statistics about blocks prefetched during recovery. + See for details. + + + pg_stat_subscriptionpg_stat_subscription At least one row per subscription, showing information about @@ -2917,6 +2924,78 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i copy of the subscribed tables. + + <structname>pg_stat_prefetch_recovery</structname> View + + + + Column + Type + Description + + + + + + prefetch + bigint + Number of blocks prefetched because they were not in the buffer pool + + + skip_hit + bigint + Number of blocks not prefetched because they were already in the buffer pool + + + skip_new + bigint + Number of blocks not prefetched because they were new (usually relation extension) + + + skip_fpw + bigint + Number of blocks not prefetched because a full page image was included in the WAL and was set to off + + + skip_seq + bigint + Number of blocks not prefetched because of repeated access + + + distance + integer + How far ahead of recovery the prefetcher is currently reading, in bytes + + + queue_depth + integer + How many prefetches have been initiated but are not yet known to have completed + + + avg_distance + float4 + How far ahead of recovery the prefetcher is on average, while recovery is not idle + + + avg_queue_depth + float4 + Average number of prefetches in flight while recovery is not idle + + + +
+ + + The pg_stat_prefetch_recovery view will contain only + one row. It is filled with nulls if recovery is not running or WAL + prefetching is not enabled. See + for more information. The counters in this view are reset whenever the + , + or + setting is changed and + the server configuration is reloaded. + + <structname>pg_stat_subscription</structname> View @@ -5049,8 +5128,11 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i all the counters shown in the pg_stat_bgwriter view, archiver to reset all the counters shown in - the pg_stat_archiver view or wal - to reset all the counters shown in the pg_stat_wal view. + the pg_stat_archiver view, + wal to reset all the counters shown in the + pg_stat_wal view or + prefetch_recovery to reset all the counters shown + in the pg_stat_prefetch_recovery view. This function is restricted to superusers by default, but other users diff --git a/doc/src/sgml/wal.sgml b/doc/src/sgml/wal.sgml index 7d48f427109fe..0f13c43095e6a 100644 --- a/doc/src/sgml/wal.sgml +++ b/doc/src/sgml/wal.sgml @@ -803,6 +803,23 @@ counted as wal_write and wal_sync in pg_stat_wal, respectively. + + + The parameter can + be used to improve I/O performance during recovery by instructing + PostgreSQL to initiate reads + of disk blocks that will soon be needed but are not currently in + PostgreSQL's buffer pool. + The and + settings limit prefetching + concurrency and distance, respectively. The + prefetching mechanism is most likely to be effective on systems + with full_page_writes set to + off (where that is safe), and where the working + set is larger than RAM. By default, prefetching in recovery is enabled + on operating systems that have posix_fadvise + support. + diff --git a/src/backend/access/transam/Makefile b/src/backend/access/transam/Makefile index 595e02de722cf..39f9d4e77d4df 100644 --- a/src/backend/access/transam/Makefile +++ b/src/backend/access/transam/Makefile @@ -31,6 +31,7 @@ OBJS = \ xlogarchive.o \ xlogfuncs.o \ xloginsert.o \ + xlogprefetch.o \ xlogreader.o \ xlogutils.o diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 729fc5ff13c14..adfc6f67e29f5 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -35,6 +35,7 @@ #include "access/xlog_internal.h" #include "access/xlogarchive.h" #include "access/xloginsert.h" +#include "access/xlogprefetch.h" #include "access/xlogreader.h" #include "access/xlogutils.h" #include "catalog/catversion.h" @@ -110,6 +111,7 @@ int CommitDelay = 0; /* precommit delay in microseconds */ int CommitSiblings = 5; /* # concurrent xacts needed to sleep */ int wal_retrieve_retry_interval = 5000; int max_slot_wal_keep_size_mb = -1; +int wal_decode_buffer_size = 512 * 1024; bool track_wal_io_timing = false; #ifdef WAL_DEBUG @@ -910,7 +912,8 @@ static int XLogFileRead(XLogSegNo segno, int emode, TimeLineID tli, XLogSource source, bool notfoundOk); static int XLogFileReadAnyTLI(XLogSegNo segno, int emode, XLogSource source); static bool XLogPageRead(XLogReaderState *state, - bool fetching_ckpt, int emode, bool randAccess); + bool fetching_ckpt, int emode, bool randAccess, + bool nowait); static bool WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, bool fetching_ckpt, XLogRecPtr tliRecPtr, @@ -1461,7 +1464,7 @@ checkXLogConsistency(XLogReaderState *record) * temporary page. */ buf = XLogReadBufferExtended(rnode, forknum, blkno, - RBM_NORMAL_NO_LOG); + RBM_NORMAL_NO_LOG, InvalidBuffer); if (!BufferIsValid(buf)) continue; @@ -3729,7 +3732,6 @@ XLogFileRead(XLogSegNo segno, int emode, TimeLineID tli, snprintf(activitymsg, sizeof(activitymsg), "waiting for %s", xlogfname); set_ps_display(activitymsg); - restoredFromArchive = RestoreArchivedFile(path, xlogfname, "RECOVERYXLOG", wal_segment_size, @@ -4389,9 +4391,9 @@ ReadRecord(XLogReaderState *xlogreader, int emode, while ((result = XLogReadRecord(xlogreader, &record, &errormsg)) == XLREAD_NEED_DATA) { - if (!XLogPageRead(xlogreader, fetching_ckpt, emode, randAccess)) + if (!XLogPageRead(xlogreader, fetching_ckpt, emode, randAccess, + false /* wait for data if streaming */)) break; - } ReadRecPtr = xlogreader->ReadRecPtr; @@ -6632,6 +6634,12 @@ StartupXLOG(void) errdetail("Failed while allocating a WAL reading processor."))); xlogreader->system_identifier = ControlFile->system_identifier; + /* + * Set the WAL decode buffer size. This limits how far ahead we can read + * in the WAL. + */ + XLogReaderSetDecodeBuffer(xlogreader, NULL, wal_decode_buffer_size); + /* * Allocate two page buffers dedicated to WAL consistency checks. We do * it this way, rather than just making static arrays, for two reasons: @@ -7312,6 +7320,7 @@ StartupXLOG(void) { ErrorContextCallback errcallback; TimestampTz xtime; + XLogPrefetchState prefetch; PGRUsage ru0; pg_rusage_init(&ru0); @@ -7322,6 +7331,9 @@ StartupXLOG(void) (errmsg("redo starts at %X/%X", LSN_FORMAT_ARGS(ReadRecPtr)))); + /* Prepare to prefetch, if configured. */ + XLogPrefetchBegin(&prefetch, xlogreader); + /* * main redo apply loop */ @@ -7351,6 +7363,14 @@ StartupXLOG(void) /* Handle interrupt signals of startup process */ HandleStartupProcInterrupts(); + /* Perform WAL prefetching, if enabled. */ + while (XLogPrefetch(&prefetch, xlogreader->ReadRecPtr) == XLREAD_NEED_DATA) + { + if (!XLogPageRead(xlogreader, false, LOG, false, + true /* don't wait for streaming data */)) + break; + } + /* * Pause WAL replay, if requested by a hot-standby session via * SetRecoveryPause(). @@ -7524,6 +7544,9 @@ StartupXLOG(void) */ if (AllowCascadeReplication()) WalSndWakeup(); + + /* Reset the prefetcher. */ + XLogPrefetchReconfigure(); } /* Exit loop if we reached inclusive recovery target */ @@ -7540,6 +7563,7 @@ StartupXLOG(void) /* * end of main redo apply loop */ + XLogPrefetchEnd(&prefetch); if (reachedRecoveryTarget) { @@ -12109,10 +12133,13 @@ CancelBackup(void) * and call XLogPageRead() again with the same arguments. This lets * XLogPageRead() to try fetching the record from another source, or to * sleep and retry. + * + * If nowait is true, then return false immediately if the requested data isn't + * available yet. */ static bool XLogPageRead(XLogReaderState *state, - bool fetching_ckpt, int emode, bool randAccess) + bool fetching_ckpt, int emode, bool randAccess, bool nowait) { char *readBuf = state->readBuf; XLogRecPtr targetPagePtr = state->readPagePtr; @@ -12136,9 +12163,6 @@ XLogPageRead(XLogReaderState *state, /* * Request a restartpoint if we've replayed too much xlog since the * last one. - * - * XXX Why is this here? Move it to recovery loop, since it's based - * on replay position, not read position? */ if (bgwriterLaunched) { @@ -12163,6 +12187,12 @@ XLogPageRead(XLogReaderState *state, (readSource == XLOG_FROM_STREAM && flushedUpto < targetPagePtr + reqLen)) { + if (nowait) + { + XLogReaderSetInputData(state, -1); + return false; + } + if (!WaitForWALToBecomeAvailable(targetPagePtr + reqLen, randAccess, fetching_ckpt, targetRecPtr, state->seg.ws_segno)) @@ -12396,6 +12426,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, */ currentSource = XLOG_FROM_STREAM; startWalReceiver = true; + XLogPrefetchReconfigure(); break; case XLOG_FROM_STREAM: @@ -12651,6 +12682,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, else havedata = false; } + if (havedata) { /* diff --git a/src/backend/access/transam/xlogprefetch.c b/src/backend/access/transam/xlogprefetch.c new file mode 100644 index 0000000000000..28764326bcc59 --- /dev/null +++ b/src/backend/access/transam/xlogprefetch.c @@ -0,0 +1,922 @@ +/*------------------------------------------------------------------------- + * + * xlogprefetch.c + * Prefetching support for recovery. + * + * Portions Copyright (c) 2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * src/backend/access/transam/xlogprefetch.c + * + * The goal of this module is to read future WAL records and issue + * PrefetchSharedBuffer() calls for referenced blocks, so that we avoid I/O + * stalls in the main recovery loop. + * + * When examining a WAL record from the future, we need to consider that a + * referenced block or segment file might not exist on disk until this record + * or some earlier record has been replayed. After a crash, a file might also + * be missing because it was dropped by a later WAL record; in that case, it + * will be recreated when this record is replayed. These cases are handled by + * recognizing them and adding a "filter" that prevents all prefetching of a + * certain block range until the present WAL record has been replayed. Blocks + * skipped for these reasons are counted as "skip_new" (that is, cases where we + * didn't try to prefetch "new" blocks). + * + * Blocks found in the buffer pool already are counted as "skip_hit". + * Repeated access to the same buffer is detected and skipped, and this is + * counted with "skip_seq". Blocks that were logged with FPWs are skipped if + * recovery_prefetch_fpw is off, since on most systems there will be no I/O + * stall; this is counted with "skip_fpw". + * + * The only way we currently have to know that an I/O initiated with + * PrefetchSharedBuffer() has that recovery will eventually call ReadBuffer(), + * and perform a synchronous read. Therefore, we track the number of + * potentially in-flight I/Os by using a circular buffer of LSNs. When it's + * full, we have to wait for recovery to replay records so that the queue + * depth can be reduced, before we can do any more prefetching. Ideally, this + * keeps us the right distance ahead to respect maintenance_io_concurrency. + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#include "access/xlog.h" +#include "access/xlogprefetch.h" +#include "access/xlogreader.h" +#include "access/xlogutils.h" +#include "catalog/storage_xlog.h" +#include "utils/fmgrprotos.h" +#include "utils/timestamp.h" +#include "funcapi.h" +#include "pgstat.h" +#include "miscadmin.h" +#include "port/atomics.h" +#include "storage/bufmgr.h" +#include "storage/shmem.h" +#include "storage/smgr.h" +#include "utils/guc.h" +#include "utils/hsearch.h" + +/* + * Sample the queue depth and distance every time we replay this much WAL. + * This is used to compute avg_queue_depth and avg_distance for the log + * message that appears at the end of crash recovery. It's also used to send + * messages periodically to the stats collector, to save the counters on disk. + */ +#define XLOGPREFETCHER_SAMPLE_DISTANCE 0x40000 + +/* GUCs */ +bool recovery_prefetch = false; +bool recovery_prefetch_fpw = false; + +int XLogPrefetchReconfigureCount; + +/* + * A prefetcher object. There is at most one of these in existence at a time, + * recreated whenever there is a configuration change. + */ +struct XLogPrefetcher +{ + /* Reader and current reading state. */ + XLogReaderState *reader; + DecodedXLogRecord *record; + int next_block_id; + bool shutdown; + + /* Details of last prefetch to skip repeats and seq scans. */ + SMgrRelation last_reln; + RelFileNode last_rnode; + BlockNumber last_blkno; + + /* Online averages. */ + uint64 samples; + double avg_queue_depth; + double avg_distance; + XLogRecPtr next_sample_lsn; + + /* Book-keeping required to avoid accessing non-existing blocks. */ + HTAB *filter_table; + dlist_head filter_queue; + + /* Book-keeping required to limit concurrent prefetches. */ + int prefetch_head; + int prefetch_tail; + int prefetch_queue_size; + XLogRecPtr prefetch_queue[MAX_IO_CONCURRENCY + 1]; +}; + +/* + * A temporary filter used to track block ranges that haven't been created + * yet, whole relations that haven't been created yet, and whole relations + * that we must assume have already been dropped. + */ +typedef struct XLogPrefetcherFilter +{ + RelFileNode rnode; + XLogRecPtr filter_until_replayed; + BlockNumber filter_from_block; + dlist_node link; +} XLogPrefetcherFilter; + +/* + * Counters exposed in shared memory for pg_stat_prefetch_recovery. + */ +typedef struct XLogPrefetchStats +{ + pg_atomic_uint64 reset_time; /* Time of last reset. */ + pg_atomic_uint64 prefetch; /* Prefetches initiated. */ + pg_atomic_uint64 skip_hit; /* Blocks already buffered. */ + pg_atomic_uint64 skip_new; /* New/missing blocks filtered. */ + pg_atomic_uint64 skip_fpw; /* FPWs skipped. */ + pg_atomic_uint64 skip_seq; /* Repeat blocks skipped. */ + float avg_distance; + float avg_queue_depth; + + /* Reset counters */ + pg_atomic_uint32 reset_request; + uint32 reset_handled; + + /* Dynamic values */ + int distance; /* Number of bytes ahead in the WAL. */ + int queue_depth; /* Number of I/Os possibly in progress. */ +} XLogPrefetchStats; + +static inline void XLogPrefetcherAddFilter(XLogPrefetcher *prefetcher, + RelFileNode rnode, + BlockNumber blockno, + XLogRecPtr lsn); +static inline bool XLogPrefetcherIsFiltered(XLogPrefetcher *prefetcher, + RelFileNode rnode, + BlockNumber blockno); +static inline void XLogPrefetcherCompleteFilters(XLogPrefetcher *prefetcher, + XLogRecPtr replaying_lsn); +static inline void XLogPrefetcherInitiatedIO(XLogPrefetcher *prefetcher, + XLogRecPtr prefetching_lsn); +static inline void XLogPrefetcherCompletedIO(XLogPrefetcher *prefetcher, + XLogRecPtr replaying_lsn); +static inline bool XLogPrefetcherSaturated(XLogPrefetcher *prefetcher); +static bool XLogPrefetcherScanRecords(XLogPrefetcher *prefetcher, + XLogRecPtr replaying_lsn); +static bool XLogPrefetcherScanBlocks(XLogPrefetcher *prefetcher); +static void XLogPrefetchSaveStats(void); +static void XLogPrefetchRestoreStats(void); + +static XLogPrefetchStats *SharedStats; + +size_t +XLogPrefetchShmemSize(void) +{ + return sizeof(XLogPrefetchStats); +} + +static void +XLogPrefetchResetStats(void) +{ + pg_atomic_write_u64(&SharedStats->reset_time, GetCurrentTimestamp()); + pg_atomic_write_u64(&SharedStats->prefetch, 0); + pg_atomic_write_u64(&SharedStats->skip_hit, 0); + pg_atomic_write_u64(&SharedStats->skip_new, 0); + pg_atomic_write_u64(&SharedStats->skip_fpw, 0); + pg_atomic_write_u64(&SharedStats->skip_seq, 0); + SharedStats->avg_distance = 0; + SharedStats->avg_queue_depth = 0; +} + +void +XLogPrefetchShmemInit(void) +{ + bool found; + + SharedStats = (XLogPrefetchStats *) + ShmemInitStruct("XLogPrefetchStats", + sizeof(XLogPrefetchStats), + &found); + + if (!found) + { + pg_atomic_init_u32(&SharedStats->reset_request, 0); + SharedStats->reset_handled = 0; + + pg_atomic_init_u64(&SharedStats->reset_time, GetCurrentTimestamp()); + pg_atomic_init_u64(&SharedStats->prefetch, 0); + pg_atomic_init_u64(&SharedStats->skip_hit, 0); + pg_atomic_init_u64(&SharedStats->skip_new, 0); + pg_atomic_init_u64(&SharedStats->skip_fpw, 0); + pg_atomic_init_u64(&SharedStats->skip_seq, 0); + SharedStats->avg_distance = 0; + SharedStats->avg_queue_depth = 0; + SharedStats->distance = 0; + SharedStats->queue_depth = 0; + } +} + +/* + * Called when any GUC is changed that affects prefetching. + */ +void +XLogPrefetchReconfigure(void) +{ + XLogPrefetchReconfigureCount++; +} + +/* + * Called by any backend to request that the stats be reset. + */ +void +XLogPrefetchRequestResetStats(void) +{ + pg_atomic_fetch_add_u32(&SharedStats->reset_request, 1); +} + +/* + * Tell the stats collector to serialize the shared memory counters into the + * stats file. + */ +static void +XLogPrefetchSaveStats(void) +{ + PgStat_RecoveryPrefetchStats serialized = { + .prefetch = pg_atomic_read_u64(&SharedStats->prefetch), + .skip_hit = pg_atomic_read_u64(&SharedStats->skip_hit), + .skip_new = pg_atomic_read_u64(&SharedStats->skip_new), + .skip_fpw = pg_atomic_read_u64(&SharedStats->skip_fpw), + .skip_seq = pg_atomic_read_u64(&SharedStats->skip_seq), + .stat_reset_timestamp = pg_atomic_read_u64(&SharedStats->reset_time) + }; + + pgstat_send_recoveryprefetch(&serialized); +} + +/* + * Try to restore the shared memory counters from the stats file. + */ +static void +XLogPrefetchRestoreStats(void) +{ + PgStat_RecoveryPrefetchStats *serialized = pgstat_fetch_recoveryprefetch(); + + if (serialized->stat_reset_timestamp != 0) + { + pg_atomic_write_u64(&SharedStats->prefetch, serialized->prefetch); + pg_atomic_write_u64(&SharedStats->skip_hit, serialized->skip_hit); + pg_atomic_write_u64(&SharedStats->skip_new, serialized->skip_new); + pg_atomic_write_u64(&SharedStats->skip_fpw, serialized->skip_fpw); + pg_atomic_write_u64(&SharedStats->skip_seq, serialized->skip_seq); + pg_atomic_write_u64(&SharedStats->reset_time, serialized->stat_reset_timestamp); + } +} + +/* + * Increment a counter in shared memory. This is equivalent to *counter++ on a + * plain uint64 without any memory barrier or locking, except on platforms + * where readers can't read uint64 without possibly observing a torn value. + */ +static inline void +XLogPrefetchIncrement(pg_atomic_uint64 *counter) +{ + Assert(AmStartupProcess() || !IsUnderPostmaster); + pg_atomic_write_u64(counter, pg_atomic_read_u64(counter) + 1); +} + +/* + * Initialize an XLogPrefetchState object and restore the last saved + * statistics from disk. + */ +void +XLogPrefetchBegin(XLogPrefetchState *state, XLogReaderState *reader) +{ + XLogPrefetchRestoreStats(); + + /* We'll reconfigure on the first call to XLogPrefetch(). */ + state->reader = reader; + state->prefetcher = NULL; + state->reconfigure_count = XLogPrefetchReconfigureCount - 1; +} + +/* + * Shut down the prefetching infrastructure, if configured. + */ +void +XLogPrefetchEnd(XLogPrefetchState *state) +{ + XLogPrefetchSaveStats(); + + if (state->prefetcher) + XLogPrefetcherFree(state->prefetcher); + state->prefetcher = NULL; + + SharedStats->queue_depth = 0; + SharedStats->distance = 0; +} + +/* + * Create a prefetcher that is ready to begin prefetching blocks referenced by + * WAL records. + */ +XLogPrefetcher * +XLogPrefetcherAllocate(XLogReaderState *reader) +{ + XLogPrefetcher *prefetcher; + static HASHCTL hash_table_ctl = { + .keysize = sizeof(RelFileNode), + .entrysize = sizeof(XLogPrefetcherFilter) + }; + + /* + * The size of the queue is based on the maintenance_io_concurrency + * setting. In theory we might have a separate queue for each tablespace, + * but it's not clear how that should work, so for now we'll just use the + * general GUC to rate-limit all prefetching. The queue has space for up + * the highest possible value of the GUC + 1, because our circular buffer + * has a gap between head and tail when full. + */ + prefetcher = palloc0(sizeof(XLogPrefetcher)); + prefetcher->prefetch_queue_size = maintenance_io_concurrency + 1; + prefetcher->reader = reader; + prefetcher->filter_table = hash_create("XLogPrefetcherFilterTable", 1024, + &hash_table_ctl, + HASH_ELEM | HASH_BLOBS); + dlist_init(&prefetcher->filter_queue); + + SharedStats->queue_depth = 0; + SharedStats->distance = 0; + + return prefetcher; +} + +/* + * Destroy a prefetcher and release all resources. + */ +void +XLogPrefetcherFree(XLogPrefetcher *prefetcher) +{ + /* Log final statistics. */ + ereport(LOG, + (errmsg("recovery finished prefetching at %X/%X; " + "prefetch = " UINT64_FORMAT ", " + "skip_hit = " UINT64_FORMAT ", " + "skip_new = " UINT64_FORMAT ", " + "skip_fpw = " UINT64_FORMAT ", " + "skip_seq = " UINT64_FORMAT ", " + "avg_distance = %f, " + "avg_queue_depth = %f", + (uint32) (prefetcher->reader->EndRecPtr << 32), + (uint32) (prefetcher->reader->EndRecPtr), + pg_atomic_read_u64(&SharedStats->prefetch), + pg_atomic_read_u64(&SharedStats->skip_hit), + pg_atomic_read_u64(&SharedStats->skip_new), + pg_atomic_read_u64(&SharedStats->skip_fpw), + pg_atomic_read_u64(&SharedStats->skip_seq), + SharedStats->avg_distance, + SharedStats->avg_queue_depth))); + hash_destroy(prefetcher->filter_table); + pfree(prefetcher); +} + +/* + * Called when recovery is replaying a new LSN, to check if we can read ahead. + */ +bool +XLogPrefetcherReadAhead(XLogPrefetcher *prefetcher, XLogRecPtr replaying_lsn) +{ + uint32 reset_request; + + /* If an error has occurred or we've hit the end of the WAL, do nothing. */ + if (prefetcher->shutdown) + return false; + + /* + * Have any in-flight prefetches definitely completed, judging by the LSN + * that is currently being replayed? + */ + XLogPrefetcherCompletedIO(prefetcher, replaying_lsn); + + /* + * Do we already have the maximum permitted number of I/Os running + * (according to the information we have)? If so, we have to wait for at + * least one to complete, so give up early and let recovery catch up. + */ + if (XLogPrefetcherSaturated(prefetcher)) + return false; + + /* + * Can we drop any filters yet? This happens when the LSN that is + * currently being replayed has moved past a record that prevents + * prefetching of a block range, such as relation extension. + */ + XLogPrefetcherCompleteFilters(prefetcher, replaying_lsn); + + /* + * Have we been asked to reset our stats counters? This is checked with + * an unsynchronized memory read, but we'll see it eventually and we'll be + * accessing that cache line anyway. + */ + reset_request = pg_atomic_read_u32(&SharedStats->reset_request); + if (reset_request != SharedStats->reset_handled) + { + XLogPrefetchResetStats(); + SharedStats->reset_handled = reset_request; + + prefetcher->avg_distance = 0; + prefetcher->avg_queue_depth = 0; + prefetcher->samples = 0; + } + + /* OK, we can now try reading ahead. */ + return XLogPrefetcherScanRecords(prefetcher, replaying_lsn); +} + +/* + * Read ahead as far as we are allowed to, considering the LSN that recovery + * is currently replaying. + * + * Return true if the xlogreader would like more data. + */ +static bool +XLogPrefetcherScanRecords(XLogPrefetcher *prefetcher, XLogRecPtr replaying_lsn) +{ + XLogReaderState *reader = prefetcher->reader; + DecodedXLogRecord *record; + + Assert(!XLogPrefetcherSaturated(prefetcher)); + + for (;;) + { + char *error; + int64 distance; + + /* If we don't already have a record, then try to read one. */ + if (prefetcher->record == NULL) + { + switch (XLogReadAhead(reader, &record, &error)) + { + case XLREAD_NEED_DATA: + return true; + case XLREAD_FAIL: + if (error) + ereport(LOG, + (errmsg("recovery no longer prefetching: %s", + error))); + else + ereport(LOG, + (errmsg("recovery no longer prefetching"))); + prefetcher->shutdown = true; + SharedStats->queue_depth = 0; + SharedStats->distance = 0; + + return false; + case XLREAD_FULL: + return false; + case XLREAD_SUCCESS: + prefetcher->record = record; + prefetcher->next_block_id = 0; + break; + } + } + else + { + /* + * We ran out of I/O queue while part way through a record. We'll + * carry on where we left off, according to next_block_id. + */ + record = prefetcher->record; + } + + /* How far ahead of replay are we now? */ + distance = record->lsn - replaying_lsn; + + /* Update distance shown in shm. */ + SharedStats->distance = distance; + + /* Periodically recompute some statistics. */ + if (unlikely(replaying_lsn >= prefetcher->next_sample_lsn)) + { + /* Compute online averages. */ + prefetcher->samples++; + if (prefetcher->samples == 1) + { + prefetcher->avg_distance = SharedStats->distance; + prefetcher->avg_queue_depth = SharedStats->queue_depth; + } + else + { + prefetcher->avg_distance += + (SharedStats->distance - prefetcher->avg_distance) / + prefetcher->samples; + prefetcher->avg_queue_depth += + (SharedStats->queue_depth - prefetcher->avg_queue_depth) / + prefetcher->samples; + } + + /* Expose it in shared memory. */ + SharedStats->avg_distance = prefetcher->avg_distance; + SharedStats->avg_queue_depth = prefetcher->avg_queue_depth; + + /* Also periodically save the simple counters. */ + XLogPrefetchSaveStats(); + + prefetcher->next_sample_lsn = + replaying_lsn + XLOGPREFETCHER_SAMPLE_DISTANCE; + } + + /* Are we not far enough ahead? */ + if (distance <= 0) + { + /* XXX Is this still possible? */ + prefetcher->record = NULL; /* skip this record */ + continue; + } + + /* + * If this is a record that creates a new SMGR relation, we'll avoid + * prefetching anything from that rnode until it has been replayed. + */ + if (replaying_lsn < record->lsn && + record->header.xl_rmid == RM_SMGR_ID && + (record->header.xl_info & ~XLR_INFO_MASK) == XLOG_SMGR_CREATE) + { + xl_smgr_create *xlrec = (xl_smgr_create *) record->main_data; + + XLogPrefetcherAddFilter(prefetcher, xlrec->rnode, 0, record->lsn); + } + + /* Scan the record's block references. */ + if (!XLogPrefetcherScanBlocks(prefetcher)) + return false; + + /* Advance to the next record. */ + prefetcher->record = NULL; + } +} + +/* + * Scan the current record for block references, and consider prefetching. + * + * Return true if we processed the current record to completion and still have + * queue space to process a new record, and false if we saturated the I/O + * queue and need to wait for recovery to advance before we continue. + */ +static bool +XLogPrefetcherScanBlocks(XLogPrefetcher *prefetcher) +{ + DecodedXLogRecord *record = prefetcher->record; + + Assert(!XLogPrefetcherSaturated(prefetcher)); + + /* + * We might already have been partway through processing this record when + * our queue became saturated, so we need to start where we left off. + */ + for (int block_id = prefetcher->next_block_id; + block_id <= record->max_block_id; + ++block_id) + { + DecodedBkpBlock *block = &record->blocks[block_id]; + PrefetchBufferResult prefetch; + SMgrRelation reln; + + /* Ignore everything but the main fork for now. */ + if (block->forknum != MAIN_FORKNUM) + continue; + + /* + * If there is a full page image attached, we won't be reading the + * page, so you might think we should skip it. However, if the + * underlying filesystem uses larger logical blocks than us, it might + * still need to perform a read-before-write some time later. + * Therefore, only prefetch if configured to do so. + */ + if (block->has_image && !recovery_prefetch_fpw) + { + XLogPrefetchIncrement(&SharedStats->skip_fpw); + continue; + } + + /* + * If this block will initialize a new page then it's probably a + * relation extension. Since that might create a new segment, we + * can't try to prefetch this block until the record has been + * replayed, or we might try to open a file that doesn't exist yet. + */ + if (block->flags & BKPBLOCK_WILL_INIT) + { + XLogPrefetcherAddFilter(prefetcher, block->rnode, block->blkno, + record->lsn); + XLogPrefetchIncrement(&SharedStats->skip_new); + continue; + } + + /* Should we skip this block due to a filter? */ + if (XLogPrefetcherIsFiltered(prefetcher, block->rnode, block->blkno)) + { + XLogPrefetchIncrement(&SharedStats->skip_new); + continue; + } + + /* Fast path for repeated references to the same relation. */ + if (RelFileNodeEquals(block->rnode, prefetcher->last_rnode)) + { + /* + * If this is a repeat access to the same block, then skip it. + * + * XXX We could also check for last_blkno + 1 too, and also update + * last_blkno; it's not clear if the kernel would do a better job + * of sequential prefetching. + */ + if (block->blkno == prefetcher->last_blkno) + { + XLogPrefetchIncrement(&SharedStats->skip_seq); + continue; + } + + /* We can avoid calling smgropen(). */ + reln = prefetcher->last_reln; + } + else + { + /* Otherwise we have to open it. */ + reln = smgropen(block->rnode, InvalidBackendId); + prefetcher->last_rnode = block->rnode; + prefetcher->last_reln = reln; + } + prefetcher->last_blkno = block->blkno; + + /* Try to prefetch this block! */ + prefetch = PrefetchSharedBuffer(reln, block->forknum, block->blkno); + if (BufferIsValid(prefetch.recent_buffer)) + { + /* + * It was already cached, so do nothing. We'll remember the + * buffer, so that recovery can try to avoid looking it up again. + */ + block->recent_buffer = prefetch.recent_buffer; + XLogPrefetchIncrement(&SharedStats->skip_hit); + } + else if (prefetch.initiated_io) + { + /* + * I/O has possibly been initiated (though we don't know if it was + * already cached by the kernel, so we just have to assume that it + * has due to lack of better information). Record this as an I/O + * in progress until eventually we replay this LSN. + */ + XLogPrefetchIncrement(&SharedStats->prefetch); + XLogPrefetcherInitiatedIO(prefetcher, record->lsn); + + /* + * If the queue is now full, we'll have to wait before processing + * any more blocks from this record, or move to a new record if + * that was the last block. + */ + if (XLogPrefetcherSaturated(prefetcher)) + { + prefetcher->next_block_id = block_id + 1; + return false; + } + } + else + { + /* + * Neither cached nor initiated. The underlying segment file + * doesn't exist. Presumably it will be unlinked by a later WAL + * record. When recovery reads this block, it will use the + * EXTENSION_CREATE_RECOVERY flag. We certainly don't want to do + * that sort of thing while merely prefetching, so let's just + * ignore references to this relation until this record is + * replayed, and let recovery create the dummy file or complain if + * something is wrong. + */ + XLogPrefetcherAddFilter(prefetcher, block->rnode, 0, + record->lsn); + XLogPrefetchIncrement(&SharedStats->skip_new); + } + } + + return true; +} + +/* + * Expose statistics about recovery prefetching. + */ +Datum +pg_stat_get_prefetch_recovery(PG_FUNCTION_ARGS) +{ +#define PG_STAT_GET_PREFETCH_RECOVERY_COLS 10 + ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; + TupleDesc tupdesc; + Tuplestorestate *tupstore; + MemoryContext per_query_ctx; + MemoryContext oldcontext; + Datum values[PG_STAT_GET_PREFETCH_RECOVERY_COLS]; + bool nulls[PG_STAT_GET_PREFETCH_RECOVERY_COLS]; + + if (rsinfo == NULL || !IsA(rsinfo, ReturnSetInfo)) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("set-valued function called in context that cannot accept a set"))); + if (!(rsinfo->allowedModes & SFRM_Materialize)) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("materialize mod required, but it is not allowed in this context"))); + + if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) + elog(ERROR, "return type must be a row type"); + + per_query_ctx = rsinfo->econtext->ecxt_per_query_memory; + oldcontext = MemoryContextSwitchTo(per_query_ctx); + + tupstore = tuplestore_begin_heap(true, false, work_mem); + rsinfo->returnMode = SFRM_Materialize; + rsinfo->setResult = tupstore; + rsinfo->setDesc = tupdesc; + + MemoryContextSwitchTo(oldcontext); + + if (pg_atomic_read_u32(&SharedStats->reset_request) != SharedStats->reset_handled) + { + /* There's an unhandled reset request, so just show NULLs */ + for (int i = 0; i < PG_STAT_GET_PREFETCH_RECOVERY_COLS; ++i) + nulls[i] = true; + } + else + { + for (int i = 0; i < PG_STAT_GET_PREFETCH_RECOVERY_COLS; ++i) + nulls[i] = false; + } + + values[0] = TimestampTzGetDatum(pg_atomic_read_u64(&SharedStats->reset_time)); + values[1] = Int64GetDatum(pg_atomic_read_u64(&SharedStats->prefetch)); + values[2] = Int64GetDatum(pg_atomic_read_u64(&SharedStats->skip_hit)); + values[3] = Int64GetDatum(pg_atomic_read_u64(&SharedStats->skip_new)); + values[4] = Int64GetDatum(pg_atomic_read_u64(&SharedStats->skip_fpw)); + values[5] = Int64GetDatum(pg_atomic_read_u64(&SharedStats->skip_seq)); + values[6] = Int32GetDatum(SharedStats->distance); + values[7] = Int32GetDatum(SharedStats->queue_depth); + values[8] = Float4GetDatum(SharedStats->avg_distance); + values[9] = Float4GetDatum(SharedStats->avg_queue_depth); + tuplestore_putvalues(tupstore, tupdesc, values, nulls); + tuplestore_donestoring(tupstore); + + return (Datum) 0; +} + +/* + * Compute (n + 1) % prefetch_queue_size, assuming n < prefetch_queue_size, + * without using division. + */ +static inline int +XLogPrefetcherNext(XLogPrefetcher *prefetcher, int n) +{ + int next = n + 1; + + return next == prefetcher->prefetch_queue_size ? 0 : next; +} + +/* + * Don't prefetch any blocks >= 'blockno' from a given 'rnode', until 'lsn' + * has been replayed. + */ +static inline void +XLogPrefetcherAddFilter(XLogPrefetcher *prefetcher, RelFileNode rnode, + BlockNumber blockno, XLogRecPtr lsn) +{ + XLogPrefetcherFilter *filter; + bool found; + + filter = hash_search(prefetcher->filter_table, &rnode, HASH_ENTER, &found); + if (!found) + { + /* + * Don't allow any prefetching of this block or higher until replayed. + */ + filter->filter_until_replayed = lsn; + filter->filter_from_block = blockno; + dlist_push_head(&prefetcher->filter_queue, &filter->link); + } + else + { + /* + * We were already filtering this rnode. Extend the filter's lifetime + * to cover this WAL record, but leave the (presumably lower) block + * number there because we don't want to have to track individual + * blocks. + */ + filter->filter_until_replayed = lsn; + dlist_delete(&filter->link); + dlist_push_head(&prefetcher->filter_queue, &filter->link); + } +} + +/* + * Have we replayed the records that caused us to begin filtering a block + * range? That means that relations should have been created, extended or + * dropped as required, so we can drop relevant filters. + */ +static inline void +XLogPrefetcherCompleteFilters(XLogPrefetcher *prefetcher, XLogRecPtr replaying_lsn) +{ + while (unlikely(!dlist_is_empty(&prefetcher->filter_queue))) + { + XLogPrefetcherFilter *filter = dlist_tail_element(XLogPrefetcherFilter, + link, + &prefetcher->filter_queue); + + if (filter->filter_until_replayed >= replaying_lsn) + break; + dlist_delete(&filter->link); + hash_search(prefetcher->filter_table, filter, HASH_REMOVE, NULL); + } +} + +/* + * Check if a given block should be skipped due to a filter. + */ +static inline bool +XLogPrefetcherIsFiltered(XLogPrefetcher *prefetcher, RelFileNode rnode, + BlockNumber blockno) +{ + /* + * Test for empty queue first, because we expect it to be empty most of + * the time and we can avoid the hash table lookup in that case. + */ + if (unlikely(!dlist_is_empty(&prefetcher->filter_queue))) + { + XLogPrefetcherFilter *filter = hash_search(prefetcher->filter_table, &rnode, + HASH_FIND, NULL); + + if (filter && filter->filter_from_block <= blockno) + return true; + } + + return false; +} + +/* + * Insert an LSN into the queue. The queue must not be full already. This + * tracks the fact that we have (to the best of our knowledge) initiated an + * I/O, so that we can impose a cap on concurrent prefetching. + */ +static inline void +XLogPrefetcherInitiatedIO(XLogPrefetcher *prefetcher, + XLogRecPtr prefetching_lsn) +{ + Assert(!XLogPrefetcherSaturated(prefetcher)); + prefetcher->prefetch_queue[prefetcher->prefetch_head] = prefetching_lsn; + prefetcher->prefetch_head = + XLogPrefetcherNext(prefetcher, prefetcher->prefetch_head); + SharedStats->queue_depth++; + + Assert(SharedStats->queue_depth <= prefetcher->prefetch_queue_size); +} + +/* + * Have we replayed the records that caused us to initiate the oldest + * prefetches yet? That means that they're definitely finished, so we can can + * forget about them and allow ourselves to initiate more prefetches. For now + * we don't have any awareness of when I/O really completes. + */ +static inline void +XLogPrefetcherCompletedIO(XLogPrefetcher *prefetcher, XLogRecPtr replaying_lsn) +{ + while (prefetcher->prefetch_head != prefetcher->prefetch_tail && + prefetcher->prefetch_queue[prefetcher->prefetch_tail] < replaying_lsn) + { + prefetcher->prefetch_tail = + XLogPrefetcherNext(prefetcher, prefetcher->prefetch_tail); + SharedStats->queue_depth--; + + Assert(SharedStats->queue_depth >= 0); + } +} + +/* + * Check if the maximum allowed number of I/Os is already in flight. + */ +static inline bool +XLogPrefetcherSaturated(XLogPrefetcher *prefetcher) +{ + int next = XLogPrefetcherNext(prefetcher, prefetcher->prefetch_head); + + return next == prefetcher->prefetch_tail; +} + +void +assign_recovery_prefetch(bool new_value, void *extra) +{ + /* Reconfigure prefetching, because a setting it depends on changed. */ + recovery_prefetch = new_value; + if (AmStartupProcess()) + XLogPrefetchReconfigure(); +} + +void +assign_recovery_prefetch_fpw(bool new_value, void *extra) +{ + /* Reconfigure prefetching, because a setting it depends on changed. */ + recovery_prefetch_fpw = new_value; + if (AmStartupProcess()) + XLogPrefetchReconfigure(); +} diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index f66592482a478..3ae4127b8a8b3 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -1927,6 +1927,8 @@ DecodeXLogRecord(XLogReaderState *state, blk->has_image = ((fork_flags & BKPBLOCK_HAS_IMAGE) != 0); blk->has_data = ((fork_flags & BKPBLOCK_HAS_DATA) != 0); + blk->recent_buffer = InvalidBuffer; + COPY_HEADER_FIELD(&blk->data_len, sizeof(uint16)); /* cross-check that the HAS_DATA flag is set iff data_length > 0 */ if (blk->has_data && blk->data_len == 0) @@ -2134,6 +2136,15 @@ DecodeXLogRecord(XLogReaderState *state, bool XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id, RelFileNode *rnode, ForkNumber *forknum, BlockNumber *blknum) +{ + return XLogRecGetRecentBuffer(record, block_id, rnode, forknum, blknum, + NULL); +} + +bool +XLogRecGetRecentBuffer(XLogReaderState *record, uint8 block_id, + RelFileNode *rnode, ForkNumber *forknum, + BlockNumber *blknum, Buffer *recent_buffer) { DecodedBkpBlock *bkpb; @@ -2148,6 +2159,8 @@ XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id, *forknum = bkpb->forknum; if (blknum) *blknum = bkpb->blkno; + if (recent_buffer) + *recent_buffer = bkpb->recent_buffer; return true; } diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c index eedd95cc1378a..4d5c9bb08f53a 100644 --- a/src/backend/access/transam/xlogutils.c +++ b/src/backend/access/transam/xlogutils.c @@ -335,11 +335,13 @@ XLogReadBufferForRedoExtended(XLogReaderState *record, RelFileNode rnode; ForkNumber forknum; BlockNumber blkno; + Buffer recent_buffer; Page page; bool zeromode; bool willinit; - if (!XLogRecGetBlockTag(record, block_id, &rnode, &forknum, &blkno)) + if (!XLogRecGetRecentBuffer(record, block_id, &rnode, &forknum, &blkno, + &recent_buffer)) { /* Caller specified a bogus block_id */ elog(PANIC, "failed to locate backup block with ID %d", block_id); @@ -361,7 +363,8 @@ XLogReadBufferForRedoExtended(XLogReaderState *record, { Assert(XLogRecHasBlockImage(record, block_id)); *buf = XLogReadBufferExtended(rnode, forknum, blkno, - get_cleanup_lock ? RBM_ZERO_AND_CLEANUP_LOCK : RBM_ZERO_AND_LOCK); + get_cleanup_lock ? RBM_ZERO_AND_CLEANUP_LOCK : RBM_ZERO_AND_LOCK, + recent_buffer); page = BufferGetPage(*buf); if (!RestoreBlockImage(record, block_id, page)) elog(ERROR, "failed to restore block image"); @@ -390,7 +393,8 @@ XLogReadBufferForRedoExtended(XLogReaderState *record, } else { - *buf = XLogReadBufferExtended(rnode, forknum, blkno, mode); + *buf = XLogReadBufferExtended(rnode, forknum, blkno, mode, + recent_buffer); if (BufferIsValid(*buf)) { if (mode != RBM_ZERO_AND_LOCK && mode != RBM_ZERO_AND_CLEANUP_LOCK) @@ -437,7 +441,8 @@ XLogReadBufferForRedoExtended(XLogReaderState *record, */ Buffer XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum, - BlockNumber blkno, ReadBufferMode mode) + BlockNumber blkno, ReadBufferMode mode, + Buffer recent_buffer) { BlockNumber lastblock; Buffer buffer; @@ -445,6 +450,15 @@ XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum, Assert(blkno != P_NEW); + /* Do we have a clue where the buffer might be already? */ + if (BufferIsValid(recent_buffer) && + mode == RBM_NORMAL && + ReadRecentBuffer(rnode, forknum, blkno, recent_buffer)) + { + buffer = recent_buffer; + goto recent_buffer_fast_path; + } + /* Open the relation at smgr level */ smgr = smgropen(rnode, InvalidBackendId); @@ -503,6 +517,7 @@ XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum, } } +recent_buffer_fast_path: if (mode == RBM_NORMAL) { /* check that page has been initialized */ diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index ff65b3edfa7d8..451db2ee0a064 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -911,6 +911,20 @@ CREATE VIEW pg_stat_wal_receiver AS FROM pg_stat_get_wal_receiver() s WHERE s.pid IS NOT NULL; +CREATE VIEW pg_stat_prefetch_recovery AS + SELECT + s.stats_reset, + s.prefetch, + s.skip_hit, + s.skip_new, + s.skip_fpw, + s.skip_seq, + s.distance, + s.queue_depth, + s.avg_distance, + s.avg_queue_depth + FROM pg_stat_get_prefetch_recovery() s; + CREATE VIEW pg_stat_subscription AS SELECT su.oid AS subid, diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index 958183dd69dee..f4467625f7f01 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -38,6 +38,7 @@ #include "access/transam.h" #include "access/twophase_rmgr.h" #include "access/xact.h" +#include "access/xlogprefetch.h" #include "catalog/partition.h" #include "catalog/pg_database.h" #include "catalog/pg_proc.h" @@ -278,6 +279,7 @@ static PgStat_WalStats walStats; static PgStat_SLRUStats slruStats[SLRU_NUM_ELEMENTS]; static PgStat_ReplSlotStats *replSlotStats; static int nReplSlotStats; +static PgStat_RecoveryPrefetchStats recoveryPrefetchStats; /* * List of OIDs of databases we need to write out. If an entry is InvalidOid, @@ -349,6 +351,7 @@ static void pgstat_recv_archiver(PgStat_MsgArchiver *msg, int len); static void pgstat_recv_bgwriter(PgStat_MsgBgWriter *msg, int len); static void pgstat_recv_wal(PgStat_MsgWal *msg, int len); static void pgstat_recv_slru(PgStat_MsgSLRU *msg, int len); +static void pgstat_recv_recoveryprefetch(PgStat_MsgRecoveryPrefetch *msg, int len); static void pgstat_recv_funcstat(PgStat_MsgFuncstat *msg, int len); static void pgstat_recv_funcpurge(PgStat_MsgFuncpurge *msg, int len); static void pgstat_recv_recoveryconflict(PgStat_MsgRecoveryConflict *msg, int len); @@ -1424,11 +1427,20 @@ pgstat_reset_shared_counters(const char *target) msg.m_resettarget = RESET_BGWRITER; else if (strcmp(target, "wal") == 0) msg.m_resettarget = RESET_WAL; + else if (strcmp(target, "prefetch_recovery") == 0) + { + /* + * We can't ask the stats collector to do this for us as it is not + * attached to shared memory. + */ + XLogPrefetchRequestResetStats(); + return; + } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("unrecognized reset target: \"%s\"", target), - errhint("Target must be \"archiver\", \"bgwriter\" or \"wal\"."))); + errhint("Target must be \"archiver\", \"bgwriter\", \"wal\" or \"prefetch_recovery\"."))); pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_RESETSHAREDCOUNTER); pgstat_send(&msg, sizeof(msg)); @@ -2873,6 +2885,22 @@ pgstat_fetch_replslot(int *nslots_p) return replSlotStats; } +/* + * --------- + * pgstat_fetch_recoveryprefetch() - + * + * Support function for restoring the counters managed by xlogprefetch.c. + * --------- + */ +PgStat_RecoveryPrefetchStats * +pgstat_fetch_recoveryprefetch(void) +{ + backend_read_statsfile(); + + return &recoveryPrefetchStats; +} + + /* * Shut down a single backend's statistics reporting at process exit. * @@ -3148,6 +3176,23 @@ pgstat_send_slru(void) } +/* ---------- + * pgstat_send_recoveryprefetch() - + * + * Send recovery prefetch statistics to the collector + * ---------- + */ +void +pgstat_send_recoveryprefetch(PgStat_RecoveryPrefetchStats *stats) +{ + PgStat_MsgRecoveryPrefetch msg; + + pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_RECOVERYPREFETCH); + msg.m_stats = *stats; + pgstat_send(&msg, sizeof(msg)); +} + + /* ---------- * PgstatCollectorMain() - * @@ -3365,6 +3410,10 @@ PgstatCollectorMain(int argc, char *argv[]) pgstat_recv_slru(&msg.msg_slru, len); break; + case PGSTAT_MTYPE_RECOVERYPREFETCH: + pgstat_recv_recoveryprefetch(&msg.msg_recoveryprefetch, len); + break; + case PGSTAT_MTYPE_FUNCSTAT: pgstat_recv_funcstat(&msg.msg_funcstat, len); break; @@ -3658,6 +3707,13 @@ pgstat_write_statsfiles(bool permanent, bool allDbs) rc = fwrite(slruStats, sizeof(slruStats), 1, fpout); (void) rc; /* we'll check for error with ferror */ + /* + * Write recovery prefetch stats struct + */ + rc = fwrite(&recoveryPrefetchStats, sizeof(recoveryPrefetchStats), 1, + fpout); + (void) rc; /* we'll check for error with ferror */ + /* * Walk through the database table. */ @@ -3933,6 +3989,7 @@ pgstat_read_statsfiles(Oid onlydb, bool permanent, bool deep) memset(&archiverStats, 0, sizeof(archiverStats)); memset(&walStats, 0, sizeof(walStats)); memset(&slruStats, 0, sizeof(slruStats)); + memset(&recoveryPrefetchStats, 0, sizeof(recoveryPrefetchStats)); /* * Set the current timestamp (will be kept only in case we can't load an @@ -4038,6 +4095,18 @@ pgstat_read_statsfiles(Oid onlydb, bool permanent, bool deep) goto done; } + /* + * Read recoveryPrefetchStats struct + */ + if (fread(&recoveryPrefetchStats, 1, sizeof(recoveryPrefetchStats), + fpin) != sizeof(recoveryPrefetchStats)) + { + ereport(pgStatRunningInCollector ? LOG : WARNING, + (errmsg("corrupted statistics file \"%s\"", statfile))); + memset(&recoveryPrefetchStats, 0, sizeof(recoveryPrefetchStats)); + goto done; + } + /* * We found an existing collector stats file. Read it and put all the * hashtable entries into place. @@ -4356,6 +4425,7 @@ pgstat_read_db_statsfile_timestamp(Oid databaseid, bool permanent, PgStat_WalStats myWalStats; PgStat_SLRUStats mySLRUStats[SLRU_NUM_ELEMENTS]; PgStat_ReplSlotStats myReplSlotStats; + PgStat_RecoveryPrefetchStats myRecoveryPrefetchStats; FILE *fpin; int32 format_id; const char *statfile = permanent ? PGSTAT_STAT_PERMANENT_FILENAME : pgstat_stat_filename; @@ -4432,6 +4502,18 @@ pgstat_read_db_statsfile_timestamp(Oid databaseid, bool permanent, return false; } + /* + * Read recovery prefetch stats struct + */ + if (fread(&myRecoveryPrefetchStats, 1, sizeof(myRecoveryPrefetchStats), + fpin) != sizeof(myRecoveryPrefetchStats)) + { + ereport(pgStatRunningInCollector ? LOG : WARNING, + (errmsg("corrupted statistics file \"%s\"", statfile))); + FreeFile(fpin); + return false; + } + /* By default, we're going to return the timestamp of the global file. */ *ts = myGlobalStats.stats_timestamp; @@ -4615,6 +4697,13 @@ backend_read_statsfile(void) if (ok && file_ts >= min_ts) break; + /* + * If we're in crash recovery, the collector may not even be running, + * so work with what we have. + */ + if (InRecovery) + break; + /* Not there or too old, so kick the collector and wait a bit */ if ((count % PGSTAT_INQ_LOOP_COUNT) == 0) pgstat_send_inquiry(cur_ts, min_ts, inquiry_db); @@ -5349,6 +5438,18 @@ pgstat_recv_slru(PgStat_MsgSLRU *msg, int len) slruStats[msg->m_index].truncate += msg->m_truncate; } +/* ---------- + * pgstat_recv_recoveryprefetch() - + * + * Process a recovery prefetch message. + * ---------- + */ +static void +pgstat_recv_recoveryprefetch(PgStat_MsgRecoveryPrefetch *msg, int len) +{ + recoveryPrefetchStats = msg->m_stats; +} + /* ---------- * pgstat_recv_recoveryconflict() - * diff --git a/src/backend/storage/freespace/freespace.c b/src/backend/storage/freespace/freespace.c index 8c12dda2380d0..cfa0414e5ab43 100644 --- a/src/backend/storage/freespace/freespace.c +++ b/src/backend/storage/freespace/freespace.c @@ -210,7 +210,8 @@ XLogRecordPageWithFreeSpace(RelFileNode rnode, BlockNumber heapBlk, blkno = fsm_logical_to_physical(addr); /* If the page doesn't exist already, extend */ - buf = XLogReadBufferExtended(rnode, FSM_FORKNUM, blkno, RBM_ZERO_ON_ERROR); + buf = XLogReadBufferExtended(rnode, FSM_FORKNUM, blkno, RBM_ZERO_ON_ERROR, + InvalidBuffer); LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); page = BufferGetPage(buf); diff --git a/src/backend/storage/ipc/ipci.c b/src/backend/storage/ipc/ipci.c index 3e4ec53a97e8d..47847563ef0fb 100644 --- a/src/backend/storage/ipc/ipci.c +++ b/src/backend/storage/ipc/ipci.c @@ -22,6 +22,7 @@ #include "access/subtrans.h" #include "access/syncscan.h" #include "access/twophase.h" +#include "access/xlogprefetch.h" #include "commands/async.h" #include "miscadmin.h" #include "pgstat.h" @@ -126,6 +127,7 @@ CreateSharedMemoryAndSemaphores(void) size = add_size(size, PredicateLockShmemSize()); size = add_size(size, ProcGlobalShmemSize()); size = add_size(size, XLOGShmemSize()); + size = add_size(size, XLogPrefetchShmemSize()); size = add_size(size, CLOGShmemSize()); size = add_size(size, CommitTsShmemSize()); size = add_size(size, SUBTRANSShmemSize()); @@ -217,6 +219,7 @@ CreateSharedMemoryAndSemaphores(void) * Set up xlog, clog, and buffers */ XLOGShmemInit(); + XLogPrefetchShmemInit(); CLOGShmemInit(); CommitTsShmemInit(); SUBTRANSShmemInit(); diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index bee976bae87dd..090abdad8bae6 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -41,6 +41,7 @@ #include "access/twophase.h" #include "access/xact.h" #include "access/xlog_internal.h" +#include "access/xlogprefetch.h" #include "catalog/namespace.h" #include "catalog/pg_authid.h" #include "catalog/storage.h" @@ -209,6 +210,7 @@ static bool check_effective_io_concurrency(int *newval, void **extra, GucSource static bool check_maintenance_io_concurrency(int *newval, void **extra, GucSource source); static bool check_huge_page_size(int *newval, void **extra, GucSource source); static bool check_client_connection_check_interval(int *newval, void **extra, GucSource source); +static void assign_maintenance_io_concurrency(int newval, void *extra); static void assign_pgstat_temp_directory(const char *newval, void *extra); static bool check_application_name(char **newval, void **extra, GucSource source); static void assign_application_name(const char *newval, void *extra); @@ -1294,6 +1296,27 @@ static struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, + { + {"recovery_prefetch", PGC_SIGHUP, WAL_SETTINGS, + gettext_noop("Prefetch referenced blocks during recovery"), + gettext_noop("Read ahead of the current replay position to find uncached blocks.") + }, + &recovery_prefetch, + false, + NULL, assign_recovery_prefetch, NULL + }, + { + {"recovery_prefetch_fpw", PGC_SIGHUP, WAL_SETTINGS, + gettext_noop("Prefetch blocks that have full page images in the WAL"), + gettext_noop("On some systems, there is no benefit to prefetching pages that will be " + "entirely overwritten, but if the logical page size of the filesystem is " + "larger than PostgreSQL's, this can be beneficial. This option has no " + "effect unless recovery_prefetch is enabled.") + }, + &recovery_prefetch_fpw, + false, + NULL, assign_recovery_prefetch_fpw, NULL + }, { {"wal_log_hints", PGC_POSTMASTER, WAL_SETTINGS, @@ -2748,6 +2771,17 @@ static struct config_int ConfigureNamesInt[] = NULL, NULL, NULL }, + { + {"wal_decode_buffer_size", PGC_POSTMASTER, WAL_ARCHIVE_RECOVERY, + gettext_noop("Maximum buffer size for reading ahead in the WAL during recovery."), + gettext_noop("This controls the maximum distance we can read ahead n the WAL to prefetch referenced blocks."), + GUC_UNIT_BYTE + }, + &wal_decode_buffer_size, + 512 * 1024, 64 * 1024, INT_MAX, + NULL, NULL, NULL + }, + { {"wal_keep_size", PGC_SIGHUP, REPLICATION_SENDING, gettext_noop("Sets the size of WAL files held for standby servers."), @@ -3068,7 +3102,8 @@ static struct config_int ConfigureNamesInt[] = 0, #endif 0, MAX_IO_CONCURRENCY, - check_maintenance_io_concurrency, NULL, NULL + check_maintenance_io_concurrency, assign_maintenance_io_concurrency, + NULL }, { @@ -12072,6 +12107,20 @@ check_client_connection_check_interval(int *newval, void **extra, GucSource sour return true; } +static void +assign_maintenance_io_concurrency(int newval, void *extra) +{ +#ifdef USE_PREFETCH + /* + * Reconfigure recovery prefetching, because a setting it depends on + * changed. + */ + maintenance_io_concurrency = newval; + if (AmStartupProcess()) + XLogPrefetchReconfigure(); +#endif +} + static void assign_pgstat_temp_directory(const char *newval, void *extra) { diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index ff9fa006fefa8..9830cfe382e6e 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -235,6 +235,12 @@ #checkpoint_flush_after = 0 # measured in pages, 0 disables #checkpoint_warning = 30s # 0 disables +# - Prefetching during recovery - + +#wal_decode_buffer_size = 512kB # lookahead window used for prefetching +#recovery_prefetch = off # prefetch pages referenced in the WAL? +#recovery_prefetch_fpw = off # even pages logged with full page? + # - Archiving - #archive_mode = off # enables archiving; off, on, or always diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 77187c12bebac..f542af0a26246 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -132,6 +132,7 @@ extern char *PrimaryConnInfo; extern char *PrimarySlotName; extern bool wal_receiver_create_temp_slot; extern bool track_wal_io_timing; +extern int wal_decode_buffer_size; /* indirectly set via GUC system */ extern TransactionId recoveryTargetXid; diff --git a/src/include/access/xlogprefetch.h b/src/include/access/xlogprefetch.h new file mode 100644 index 0000000000000..59ce9c647398f --- /dev/null +++ b/src/include/access/xlogprefetch.h @@ -0,0 +1,82 @@ +/*------------------------------------------------------------------------- + * + * xlogprefetch.h + * Declarations for the recovery prefetching module. + * + * Portions Copyright (c) 2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/include/access/xlogprefetch.h + *------------------------------------------------------------------------- + */ +#ifndef XLOGPREFETCH_H +#define XLOGPREFETCH_H + +#include "access/xlogdefs.h" + +/* GUCs */ +extern bool recovery_prefetch; +extern bool recovery_prefetch_fpw; + +struct XLogPrefetcher; +typedef struct XLogPrefetcher XLogPrefetcher; + +extern int XLogPrefetchReconfigureCount; + +typedef struct XLogPrefetchState +{ + XLogReaderState *reader; + XLogPrefetcher *prefetcher; + int reconfigure_count; +} XLogPrefetchState; + +extern size_t XLogPrefetchShmemSize(void); +extern void XLogPrefetchShmemInit(void); + +extern void XLogPrefetchReconfigure(void); +extern void XLogPrefetchRequestResetStats(void); + +extern void XLogPrefetchBegin(XLogPrefetchState *state, XLogReaderState *reader); +extern void XLogPrefetchEnd(XLogPrefetchState *state); + +/* Functions exposed only for the use of XLogPrefetch(). */ +extern XLogPrefetcher *XLogPrefetcherAllocate(XLogReaderState *reader); +extern void XLogPrefetcherFree(XLogPrefetcher *prefetcher); +extern bool XLogPrefetcherReadAhead(XLogPrefetcher *prefetch, + XLogRecPtr replaying_lsn); + +/* + * Tell the prefetching module that we are now replaying a given LSN, so that + * it can decide how far ahead to read in the WAL, if configured. Return + * true if more data is needed by the reader. + */ +static inline bool +XLogPrefetch(XLogPrefetchState *state, XLogRecPtr replaying_lsn) +{ + /* + * Handle any configuration changes. Rather than trying to deal with + * various parameter changes, we just tear down and set up a new + * prefetcher if anything we depend on changes. + */ + if (unlikely(state->reconfigure_count != XLogPrefetchReconfigureCount)) + { + /* If we had a prefetcher, tear it down. */ + if (state->prefetcher) + { + XLogPrefetcherFree(state->prefetcher); + state->prefetcher = NULL; + } + /* If we want a prefetcher, set it up. */ + if (recovery_prefetch) + state->prefetcher = XLogPrefetcherAllocate(state->reader); + state->reconfigure_count = XLogPrefetchReconfigureCount; + } + + if (state->prefetcher) + return XLogPrefetcherReadAhead(state->prefetcher, replaying_lsn); + + return false; +} + +#endif diff --git a/src/include/access/xlogreader.h b/src/include/access/xlogreader.h index 010cbb59d6b92..d5308b25a283b 100644 --- a/src/include/access/xlogreader.h +++ b/src/include/access/xlogreader.h @@ -39,6 +39,7 @@ #endif #include "access/xlogrecord.h" +#include "storage/buf.h" /* WALOpenSegment represents a WAL segment being read. */ typedef struct WALOpenSegment @@ -77,6 +78,9 @@ typedef struct ForkNumber forknum; BlockNumber blkno; + /* Workspace for remembering last known buffer holding this block. */ + Buffer recent_buffer; + /* copy of the fork_flags field from the XLogRecordBlockHeader */ uint8 flags; @@ -397,5 +401,8 @@ extern char *XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size * extern bool XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id, RelFileNode *rnode, ForkNumber *forknum, BlockNumber *blknum); +extern bool XLogRecGetRecentBuffer(XLogReaderState *record, uint8 block_id, + RelFileNode *rnode, ForkNumber *forknum, + BlockNumber *blknum, Buffer *recent_buffer); #endif /* XLOGREADER_H */ diff --git a/src/include/access/xlogutils.h b/src/include/access/xlogutils.h index 397fb27fc22be..bbc6085130750 100644 --- a/src/include/access/xlogutils.h +++ b/src/include/access/xlogutils.h @@ -42,7 +42,8 @@ extern XLogRedoAction XLogReadBufferForRedoExtended(XLogReaderState *record, Buffer *buf); extern Buffer XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum, - BlockNumber blkno, ReadBufferMode mode); + BlockNumber blkno, ReadBufferMode mode, + Buffer recent_buffer); extern Relation CreateFakeRelcacheEntry(RelFileNode rnode); extern void FreeFakeRelcacheEntry(Relation fakerel); diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 599dd10d10ecb..f4957653ae6c0 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -6291,6 +6291,14 @@ prorettype => 'text', proargtypes => '', prosrc => 'pg_get_wal_replay_pause_state' }, +{ oid => '9085', descr => 'statistics: information about WAL prefetching', + proname => 'pg_stat_get_prefetch_recovery', prorows => '1', provolatile => 'v', + proretset => 't', prorettype => 'record', proargtypes => '', + proallargtypes => '{timestamptz,int8,int8,int8,int8,int8,int4,int4,float4,float4}', + proargmodes => '{o,o,o,o,o,o,o,o,o,o}', + proargnames => '{stats_reset,prefetch,skip_hit,skip_new,skip_fpw,skip_seq,distance,queue_depth,avg_distance,avg_queue_depth}', + prosrc => 'pg_stat_get_prefetch_recovery' }, + { oid => '2621', descr => 'reload configuration files', proname => 'pg_reload_conf', provolatile => 'v', prorettype => 'bool', proargtypes => '', prosrc => 'pg_reload_conf' }, diff --git a/src/include/pgstat.h b/src/include/pgstat.h index 89cd324454a3c..9a87e7cd8847b 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -74,6 +74,7 @@ typedef enum StatMsgType PGSTAT_MTYPE_BGWRITER, PGSTAT_MTYPE_WAL, PGSTAT_MTYPE_SLRU, + PGSTAT_MTYPE_RECOVERYPREFETCH, PGSTAT_MTYPE_FUNCSTAT, PGSTAT_MTYPE_FUNCPURGE, PGSTAT_MTYPE_RECOVERYCONFLICT, @@ -197,6 +198,19 @@ typedef struct PgStat_TableXactStatus struct PgStat_TableXactStatus *next; /* next of same subxact */ } PgStat_TableXactStatus; +/* + * Recovery prefetching statistics persisted on disk by pgstat.c, but kept in + * shared memory by xlogprefetch.c. + */ +typedef struct PgStat_RecoveryPrefetchStats +{ + PgStat_Counter prefetch; + PgStat_Counter skip_hit; + PgStat_Counter skip_new; + PgStat_Counter skip_fpw; + PgStat_Counter skip_seq; + TimestampTz stat_reset_timestamp; +} PgStat_RecoveryPrefetchStats; /* ------------------------------------------------------------ * Message formats follow @@ -536,6 +550,15 @@ typedef struct PgStat_MsgReplSlot PgStat_Counter m_stream_bytes; } PgStat_MsgReplSlot; +/* ---------- + * PgStat_MsgRecoveryPrefetch Sent by XLogPrefetch to save statistics. + * ---------- + */ +typedef struct PgStat_MsgRecoveryPrefetch +{ + PgStat_MsgHdr m_hdr; + PgStat_RecoveryPrefetchStats m_stats; +} PgStat_MsgRecoveryPrefetch; /* ---------- * PgStat_MsgRecoveryConflict Sent by the backend upon recovery conflict @@ -699,6 +722,7 @@ typedef union PgStat_Msg PgStat_MsgBgWriter msg_bgwriter; PgStat_MsgWal msg_wal; PgStat_MsgSLRU msg_slru; + PgStat_MsgRecoveryPrefetch msg_recoveryprefetch; PgStat_MsgFuncstat msg_funcstat; PgStat_MsgFuncpurge msg_funcpurge; PgStat_MsgRecoveryConflict msg_recoveryconflict; @@ -1088,6 +1112,7 @@ extern void pgstat_twophase_postabort(TransactionId xid, uint16 info, extern void pgstat_send_archiver(const char *xlog, bool failed); extern void pgstat_send_bgwriter(void); +extern void pgstat_send_recoveryprefetch(PgStat_RecoveryPrefetchStats *stats); extern void pgstat_report_wal(void); extern bool pgstat_send_wal(bool force); @@ -1104,6 +1129,7 @@ extern PgStat_GlobalStats *pgstat_fetch_global(void); extern PgStat_WalStats *pgstat_fetch_stat_wal(void); extern PgStat_SLRUStats *pgstat_fetch_slru(void); extern PgStat_ReplSlotStats *pgstat_fetch_replslot(int *nslots_p); +extern PgStat_RecoveryPrefetchStats *pgstat_fetch_recoveryprefetch(void); extern void pgstat_count_slru_page_zeroed(int slru_idx); extern void pgstat_count_slru_page_hit(int slru_idx); diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 9b6552b25b2c6..1892c7927b44f 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -443,4 +443,8 @@ extern void assign_search_path(const char *newval, void *extra); extern bool check_wal_buffers(int *newval, void **extra, GucSource source); extern void assign_xlog_sync_method(int new_sync_method, void *extra); +/* in access/transam/xlogprefetch.c */ +extern void assign_recovery_prefetch(bool new_value, void *extra); +extern void assign_recovery_prefetch_fpw(bool new_value, void *extra); + #endif /* GUC_H */ diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index a8a1cc72d0d7c..186e6c966c68f 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1879,6 +1879,17 @@ pg_stat_gssapi| SELECT s.pid, s.gss_enc AS encrypted FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, queryid) WHERE (s.client_port IS NOT NULL); +pg_stat_prefetch_recovery| SELECT s.stats_reset, + s.prefetch, + s.skip_hit, + s.skip_new, + s.skip_fpw, + s.skip_seq, + s.distance, + s.queue_depth, + s.avg_distance, + s.avg_queue_depth + FROM pg_stat_get_prefetch_recovery() s(stats_reset, prefetch, skip_hit, skip_new, skip_fpw, skip_seq, distance, queue_depth, avg_distance, avg_queue_depth); pg_stat_progress_analyze| SELECT s.pid, s.datid, d.datname, diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index efb9811198247..200015cac79d4 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -2803,6 +2803,10 @@ XLogPageHeader XLogPageHeaderData XLogPageReadCB XLogPageReadPrivate +XLogPrefetcher +XLogPrefetcherFilter +XLogPrefetchState +XLogPrefetchStats XLogReaderRoutine XLogReaderState XLogRecData From 50e17ad281b8d1c1b410c9833955bc80fbad4078 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Thu, 8 Apr 2021 23:51:22 +1200 Subject: [PATCH 051/671] Speedup ScalarArrayOpExpr evaluation ScalarArrayOpExprs with "useOr=true" and a set of Consts on the righthand side have traditionally been evaluated by using a linear search over the array. When these arrays contain large numbers of elements then this linear search could become a significant part of execution time. Here we add a new method of evaluating ScalarArrayOpExpr expressions to allow them to be evaluated by first building a hash table containing each element, then on subsequent evaluations, we just probe that hash table to determine if there is a match. The planner is in charge of determining when this optimization is possible and it enables it by setting hashfuncid in the ScalarArrayOpExpr. The executor will only perform the hash table evaluation when the hashfuncid is set. This means that not all cases are optimized. For example CHECK constraints containing an IN clause won't go through the planner, so won't get the hashfuncid set. We could maybe do something about that at some later date. The reason we're not doing it now is from fear that we may slow down cases where the expression is evaluated only once. Those cases can be common, for example, a single row INSERT to a table with a CHECK constraint containing an IN clause. In the planner, we enable this when there are suitable hash functions for the ScalarArrayOpExpr's operator and only when there is at least MIN_ARRAY_SIZE_FOR_HASHED_SAOP elements in the array. The threshold is currently set to 9. Author: James Coleman, David Rowley Reviewed-by: David Rowley, Tomas Vondra, Heikki Linnakangas Discussion: https://postgr.es/m/CAAaqYe8x62+=wn0zvNKCj55tPpg-JBHzhZFFc6ANovdqFw7-dA@mail.gmail.com --- src/backend/executor/execExpr.c | 99 ++++++-- src/backend/executor/execExprInterp.c | 262 ++++++++++++++++++++++ src/backend/jit/llvm/llvmjit_expr.c | 6 + src/backend/jit/llvm/llvmjit_types.c | 1 + src/backend/nodes/copyfuncs.c | 1 + src/backend/nodes/equalfuncs.c | 6 + src/backend/nodes/outfuncs.c | 1 + src/backend/nodes/readfuncs.c | 1 + src/backend/optimizer/path/costsize.c | 43 +++- src/backend/optimizer/plan/planner.c | 10 + src/backend/optimizer/plan/setrefs.c | 10 +- src/backend/optimizer/prep/prepqual.c | 1 + src/backend/optimizer/util/clauses.c | 64 ++++++ src/backend/parser/parse_oper.c | 1 + src/backend/partitioning/partbounds.c | 1 + src/include/catalog/catversion.h | 2 +- src/include/executor/execExpr.h | 19 ++ src/include/nodes/primnodes.h | 9 +- src/include/optimizer/optimizer.h | 2 + src/test/regress/expected/expressions.out | 118 ++++++++++ src/test/regress/sql/expressions.sql | 85 +++++++ 21 files changed, 712 insertions(+), 30 deletions(-) diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c index 23c0fb9379bd6..74fcfbea566e2 100644 --- a/src/backend/executor/execExpr.c +++ b/src/backend/executor/execExpr.c @@ -1149,6 +1149,8 @@ ExecInitExprRec(Expr *node, ExprState *state, FmgrInfo *finfo; FunctionCallInfo fcinfo; AclResult aclresult; + FmgrInfo *hash_finfo; + FunctionCallInfo hash_fcinfo; Assert(list_length(opexpr->args) == 2); scalararg = (Expr *) linitial(opexpr->args); @@ -1163,6 +1165,17 @@ ExecInitExprRec(Expr *node, ExprState *state, get_func_name(opexpr->opfuncid)); InvokeFunctionExecuteHook(opexpr->opfuncid); + if (OidIsValid(opexpr->hashfuncid)) + { + aclresult = pg_proc_aclcheck(opexpr->hashfuncid, + GetUserId(), + ACL_EXECUTE); + if (aclresult != ACLCHECK_OK) + aclcheck_error(aclresult, OBJECT_FUNCTION, + get_func_name(opexpr->hashfuncid)); + InvokeFunctionExecuteHook(opexpr->hashfuncid); + } + /* Set up the primary fmgr lookup information */ finfo = palloc0(sizeof(FmgrInfo)); fcinfo = palloc0(SizeForFunctionCallInfo(2)); @@ -1171,26 +1184,76 @@ ExecInitExprRec(Expr *node, ExprState *state, InitFunctionCallInfoData(*fcinfo, finfo, 2, opexpr->inputcollid, NULL, NULL); - /* Evaluate scalar directly into left function argument */ - ExecInitExprRec(scalararg, state, - &fcinfo->args[0].value, &fcinfo->args[0].isnull); - /* - * Evaluate array argument into our return value. There's no - * danger in that, because the return value is guaranteed to - * be overwritten by EEOP_SCALARARRAYOP, and will not be - * passed to any other expression. + * If hashfuncid is set, we create a EEOP_HASHED_SCALARARRAYOP + * step instead of a EEOP_SCALARARRAYOP. This provides much + * faster lookup performance than the normal linear search + * when the number of items in the array is anything but very + * small. */ - ExecInitExprRec(arrayarg, state, resv, resnull); - - /* And perform the operation */ - scratch.opcode = EEOP_SCALARARRAYOP; - scratch.d.scalararrayop.element_type = InvalidOid; - scratch.d.scalararrayop.useOr = opexpr->useOr; - scratch.d.scalararrayop.finfo = finfo; - scratch.d.scalararrayop.fcinfo_data = fcinfo; - scratch.d.scalararrayop.fn_addr = finfo->fn_addr; - ExprEvalPushStep(state, &scratch); + if (OidIsValid(opexpr->hashfuncid)) + { + hash_finfo = palloc0(sizeof(FmgrInfo)); + hash_fcinfo = palloc0(SizeForFunctionCallInfo(1)); + fmgr_info(opexpr->hashfuncid, hash_finfo); + fmgr_info_set_expr((Node *) node, hash_finfo); + InitFunctionCallInfoData(*hash_fcinfo, hash_finfo, + 1, opexpr->inputcollid, NULL, + NULL); + + scratch.d.hashedscalararrayop.hash_finfo = hash_finfo; + scratch.d.hashedscalararrayop.hash_fcinfo_data = hash_fcinfo; + scratch.d.hashedscalararrayop.hash_fn_addr = hash_finfo->fn_addr; + + /* Evaluate scalar directly into left function argument */ + ExecInitExprRec(scalararg, state, + &fcinfo->args[0].value, &fcinfo->args[0].isnull); + + /* + * Evaluate array argument into our return value. There's + * no danger in that, because the return value is + * guaranteed to be overwritten by + * EEOP_HASHED_SCALARARRAYOP, and will not be passed to + * any other expression. + */ + ExecInitExprRec(arrayarg, state, resv, resnull); + + /* And perform the operation */ + scratch.opcode = EEOP_HASHED_SCALARARRAYOP; + scratch.d.hashedscalararrayop.finfo = finfo; + scratch.d.hashedscalararrayop.fcinfo_data = fcinfo; + scratch.d.hashedscalararrayop.fn_addr = finfo->fn_addr; + + scratch.d.hashedscalararrayop.hash_finfo = hash_finfo; + scratch.d.hashedscalararrayop.hash_fcinfo_data = hash_fcinfo; + scratch.d.hashedscalararrayop.hash_fn_addr = hash_finfo->fn_addr; + + ExprEvalPushStep(state, &scratch); + } + else + { + /* Evaluate scalar directly into left function argument */ + ExecInitExprRec(scalararg, state, + &fcinfo->args[0].value, + &fcinfo->args[0].isnull); + + /* + * Evaluate array argument into our return value. There's + * no danger in that, because the return value is + * guaranteed to be overwritten by EEOP_SCALARARRAYOP, and + * will not be passed to any other expression. + */ + ExecInitExprRec(arrayarg, state, resv, resnull); + + /* And perform the operation */ + scratch.opcode = EEOP_SCALARARRAYOP; + scratch.d.scalararrayop.element_type = InvalidOid; + scratch.d.scalararrayop.useOr = opexpr->useOr; + scratch.d.scalararrayop.finfo = finfo; + scratch.d.scalararrayop.fcinfo_data = fcinfo; + scratch.d.scalararrayop.fn_addr = finfo->fn_addr; + ExprEvalPushStep(state, &scratch); + } break; } diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c index 6308286d8c35c..07948c1b13150 100644 --- a/src/backend/executor/execExprInterp.c +++ b/src/backend/executor/execExprInterp.c @@ -178,6 +178,51 @@ static pg_attribute_always_inline void ExecAggPlainTransByRef(AggState *aggstate ExprContext *aggcontext, int setno); +/* + * ScalarArrayOpExprHashEntry + * Hash table entry type used during EEOP_HASHED_SCALARARRAYOP + */ +typedef struct ScalarArrayOpExprHashEntry +{ + Datum key; + uint32 status; /* hash status */ + uint32 hash; /* hash value (cached) */ +} ScalarArrayOpExprHashEntry; + +#define SH_PREFIX saophash +#define SH_ELEMENT_TYPE ScalarArrayOpExprHashEntry +#define SH_KEY_TYPE Datum +#define SH_SCOPE static inline +#define SH_DECLARE +#include "lib/simplehash.h" + +static bool saop_hash_element_match(struct saophash_hash *tb, Datum key1, + Datum key2); +static uint32 saop_element_hash(struct saophash_hash *tb, Datum key); + +/* + * ScalarArrayOpExprHashTable + * Hash table for EEOP_HASHED_SCALARARRAYOP + */ +typedef struct ScalarArrayOpExprHashTable +{ + saophash_hash *hashtab; /* underlying hash table */ + struct ExprEvalStep *op; +} ScalarArrayOpExprHashTable; + +/* Define parameters for ScalarArrayOpExpr hash table code generation. */ +#define SH_PREFIX saophash +#define SH_ELEMENT_TYPE ScalarArrayOpExprHashEntry +#define SH_KEY_TYPE Datum +#define SH_KEY key +#define SH_HASH_KEY(tb, key) saop_element_hash(tb, key) +#define SH_EQUAL(tb, a, b) saop_hash_element_match(tb, a, b) +#define SH_SCOPE static inline +#define SH_STORE_HASH +#define SH_GET_HASH(tb, a) a->hash +#define SH_DEFINE +#include "lib/simplehash.h" + /* * Prepare ExprState for interpreted execution. */ @@ -426,6 +471,7 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) &&CASE_EEOP_DOMAIN_CHECK, &&CASE_EEOP_CONVERT_ROWTYPE, &&CASE_EEOP_SCALARARRAYOP, + &&CASE_EEOP_HASHED_SCALARARRAYOP, &&CASE_EEOP_XMLEXPR, &&CASE_EEOP_AGGREF, &&CASE_EEOP_GROUPING_FUNC, @@ -1436,6 +1482,14 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) EEO_NEXT(); } + EEO_CASE(EEOP_HASHED_SCALARARRAYOP) + { + /* too complex for an inline implementation */ + ExecEvalHashedScalarArrayOp(state, op, econtext); + + EEO_NEXT(); + } + EEO_CASE(EEOP_DOMAIN_NOTNULL) { /* too complex for an inline implementation */ @@ -3345,6 +3399,214 @@ ExecEvalScalarArrayOp(ExprState *state, ExprEvalStep *op) *op->resnull = resultnull; } +/* + * Hash function for scalar array hash op elements. + * + * We use the element type's default hash opclass, and the column collation + * if the type is collation-sensitive. + */ +static uint32 +saop_element_hash(struct saophash_hash *tb, Datum key) +{ + ScalarArrayOpExprHashTable *elements_tab = (ScalarArrayOpExprHashTable *) tb->private_data; + FunctionCallInfo fcinfo = elements_tab->op->d.hashedscalararrayop.hash_fcinfo_data; + Datum hash; + + fcinfo->args[0].value = key; + fcinfo->args[0].isnull = false; + + hash = elements_tab->op->d.hashedscalararrayop.hash_fn_addr(fcinfo); + + return DatumGetUInt32(hash); +} + +/* + * Matching function for scalar array hash op elements, to be used in hashtable + * lookups. + */ +static bool +saop_hash_element_match(struct saophash_hash *tb, Datum key1, Datum key2) +{ + Datum result; + + ScalarArrayOpExprHashTable *elements_tab = (ScalarArrayOpExprHashTable *) tb->private_data; + FunctionCallInfo fcinfo = elements_tab->op->d.hashedscalararrayop.fcinfo_data; + + fcinfo->args[0].value = key1; + fcinfo->args[0].isnull = false; + fcinfo->args[1].value = key2; + fcinfo->args[1].isnull = false; + + result = elements_tab->op->d.hashedscalararrayop.fn_addr(fcinfo); + + return DatumGetBool(result); +} + +/* + * Evaluate "scalar op ANY (const array)". + * + * Similar to ExecEvalScalarArrayOp, but optimized for faster repeat lookups + * by building a hashtable on the first lookup. This hashtable will be reused + * by subsequent lookups. Unlike ExecEvalScalarArrayOp, this version only + * supports OR semantics. + * + * Source array is in our result area, scalar arg is already evaluated into + * fcinfo->args[0]. + * + * The operator always yields boolean. + */ +void +ExecEvalHashedScalarArrayOp(ExprState *state, ExprEvalStep *op, ExprContext *econtext) +{ + ScalarArrayOpExprHashTable *elements_tab = op->d.hashedscalararrayop.elements_tab; + FunctionCallInfo fcinfo = op->d.hashedscalararrayop.fcinfo_data; + bool strictfunc = op->d.hashedscalararrayop.finfo->fn_strict; + Datum scalar = fcinfo->args[0].value; + bool scalar_isnull = fcinfo->args[0].isnull; + Datum result; + bool resultnull; + bool hashfound; + + /* We don't setup a hashed scalar array op if the array const is null. */ + Assert(!*op->resnull); + + /* + * If the scalar is NULL, and the function is strict, return NULL; no + * point in executing the search. + */ + if (fcinfo->args[0].isnull && strictfunc) + { + *op->resnull = true; + return; + } + + /* Build the hash table on first evaluation */ + if (elements_tab == NULL) + { + int16 typlen; + bool typbyval; + char typalign; + int nitems; + bool has_nulls = false; + char *s; + bits8 *bitmap; + int bitmask; + MemoryContext oldcontext; + ArrayType *arr; + + arr = DatumGetArrayTypeP(*op->resvalue); + nitems = ArrayGetNItems(ARR_NDIM(arr), ARR_DIMS(arr)); + + get_typlenbyvalalign(ARR_ELEMTYPE(arr), + &typlen, + &typbyval, + &typalign); + + oldcontext = MemoryContextSwitchTo(econtext->ecxt_per_query_memory); + + elements_tab = (ScalarArrayOpExprHashTable *) + palloc(sizeof(ScalarArrayOpExprHashTable)); + op->d.hashedscalararrayop.elements_tab = elements_tab; + elements_tab->op = op; + + /* + * Create the hash table sizing it according to the number of elements + * in the array. This does assume that the array has no duplicates. + * If the array happens to contain many duplicate values then it'll + * just mean that we sized the table a bit on the large side. + */ + elements_tab->hashtab = saophash_create(CurrentMemoryContext, nitems, + elements_tab); + + MemoryContextSwitchTo(oldcontext); + + s = (char *) ARR_DATA_PTR(arr); + bitmap = ARR_NULLBITMAP(arr); + bitmask = 1; + for (int i = 0; i < nitems; i++) + { + /* Get array element, checking for NULL. */ + if (bitmap && (*bitmap & bitmask) == 0) + { + has_nulls = true; + } + else + { + Datum element; + + element = fetch_att(s, typbyval, typlen); + s = att_addlength_pointer(s, typlen, s); + s = (char *) att_align_nominal(s, typalign); + + saophash_insert(elements_tab->hashtab, element, &hashfound); + } + + /* Advance bitmap pointer if any. */ + if (bitmap) + { + bitmask <<= 1; + if (bitmask == 0x100) + { + bitmap++; + bitmask = 1; + } + } + } + + /* + * Remember if we had any nulls so that we know if we need to execute + * non-strict functions with a null lhs value if no match is found. + */ + op->d.hashedscalararrayop.has_nulls = has_nulls; + } + + /* Check the hash to see if we have a match. */ + hashfound = NULL != saophash_lookup(elements_tab->hashtab, scalar); + + result = BoolGetDatum(hashfound); + resultnull = false; + + /* + * If we didn't find a match in the array, we still might need to handle + * the possibility of null values. We didn't put any NULLs into the + * hashtable, but instead marked if we found any when building the table + * in has_nulls. + */ + if (!DatumGetBool(result) && op->d.hashedscalararrayop.has_nulls) + { + if (strictfunc) + { + + /* + * We have nulls in the array so a non-null lhs and no match must + * yield NULL. + */ + result = (Datum) 0; + resultnull = true; + } + else + { + /* + * Execute function will null rhs just once. + * + * The hash lookup path will have scribbled on the lhs argument so + * we need to set it up also (even though we entered this function + * with it already set). + */ + fcinfo->args[0].value = scalar; + fcinfo->args[0].isnull = scalar_isnull; + fcinfo->args[1].value = (Datum) 0; + fcinfo->args[1].isnull = true; + + result = op->d.hashedscalararrayop.fn_addr(fcinfo); + resultnull = fcinfo->isnull; + } + } + + *op->resvalue = result; + *op->resnull = resultnull; +} + /* * Evaluate a NOT NULL domain constraint. */ diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c index 42bf4754c526f..0f9cc790c7d70 100644 --- a/src/backend/jit/llvm/llvmjit_expr.c +++ b/src/backend/jit/llvm/llvmjit_expr.c @@ -1836,6 +1836,12 @@ llvm_compile_expr(ExprState *state) LLVMBuildBr(b, opblocks[opno + 1]); break; + case EEOP_HASHED_SCALARARRAYOP: + build_EvalXFunc(b, mod, "ExecEvalHashedScalarArrayOp", + v_state, op, v_econtext); + LLVMBuildBr(b, opblocks[opno + 1]); + break; + case EEOP_XMLEXPR: build_EvalXFunc(b, mod, "ExecEvalXmlExpr", v_state, op); diff --git a/src/backend/jit/llvm/llvmjit_types.c b/src/backend/jit/llvm/llvmjit_types.c index 8bc58b641cfbe..2deb65c5b5cf7 100644 --- a/src/backend/jit/llvm/llvmjit_types.c +++ b/src/backend/jit/llvm/llvmjit_types.c @@ -126,6 +126,7 @@ void *referenced_functions[] = ExecEvalRowNull, ExecEvalSQLValueFunction, ExecEvalScalarArrayOp, + ExecEvalHashedScalarArrayOp, ExecEvalSubPlan, ExecEvalSysVar, ExecEvalWholeRowVar, diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index fcc5ebb206f01..632cc31a045e2 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -1716,6 +1716,7 @@ _copyScalarArrayOpExpr(const ScalarArrayOpExpr *from) COPY_SCALAR_FIELD(opno); COPY_SCALAR_FIELD(opfuncid); + COPY_SCALAR_FIELD(hashfuncid); COPY_SCALAR_FIELD(useOr); COPY_SCALAR_FIELD(inputcollid); COPY_NODE_FIELD(args); diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index 936365e09a8a0..a410a29a178d5 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -408,6 +408,12 @@ _equalScalarArrayOpExpr(const ScalarArrayOpExpr *a, const ScalarArrayOpExpr *b) b->opfuncid != 0) return false; + /* As above, hashfuncid may differ too */ + if (a->hashfuncid != b->hashfuncid && + a->hashfuncid != 0 && + b->hashfuncid != 0) + return false; + COMPARE_SCALAR_FIELD(useOr); COMPARE_SCALAR_FIELD(inputcollid); COMPARE_NODE_FIELD(args); diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 4a8dc2d86dce1..c723f6d635f4f 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -1309,6 +1309,7 @@ _outScalarArrayOpExpr(StringInfo str, const ScalarArrayOpExpr *node) WRITE_OID_FIELD(opno); WRITE_OID_FIELD(opfuncid); + WRITE_OID_FIELD(hashfuncid); WRITE_BOOL_FIELD(useOr); WRITE_OID_FIELD(inputcollid); WRITE_NODE_FIELD(args); diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 99247278513a4..3746668f526f0 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -831,6 +831,7 @@ _readScalarArrayOpExpr(void) READ_OID_FIELD(opno); READ_OID_FIELD(opfuncid); + READ_OID_FIELD(hashfuncid); READ_BOOL_FIELD(useOr); READ_OID_FIELD(inputcollid); READ_NODE_FIELD(args); diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 05686d01942b8..8577c7b138975 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -4436,21 +4436,50 @@ cost_qual_eval_walker(Node *node, cost_qual_eval_context *context) } else if (IsA(node, ScalarArrayOpExpr)) { - /* - * Estimate that the operator will be applied to about half of the - * array elements before the answer is determined. - */ ScalarArrayOpExpr *saop = (ScalarArrayOpExpr *) node; Node *arraynode = (Node *) lsecond(saop->args); QualCost sacosts; + QualCost hcosts; + int estarraylen = estimate_array_length(arraynode); set_sa_opfuncid(saop); sacosts.startup = sacosts.per_tuple = 0; add_function_cost(context->root, saop->opfuncid, NULL, &sacosts); - context->total.startup += sacosts.startup; - context->total.per_tuple += sacosts.per_tuple * - estimate_array_length(arraynode) * 0.5; + + if (OidIsValid(saop->hashfuncid)) + { + /* Handle costs for hashed ScalarArrayOpExpr */ + hcosts.startup = hcosts.per_tuple = 0; + + add_function_cost(context->root, saop->hashfuncid, NULL, &hcosts); + context->total.startup += sacosts.startup + hcosts.startup; + + /* Estimate the cost of building the hashtable. */ + context->total.startup += estarraylen * hcosts.per_tuple; + + /* + * XXX should we charge a little bit for sacosts.per_tuple when + * building the table, or is it ok to assume there will be zero + * hash collision? + */ + + /* + * Charge for hashtable lookups. Charge a single hash and a + * single comparison. + */ + context->total.per_tuple += hcosts.per_tuple + sacosts.per_tuple; + } + else + { + /* + * Estimate that the operator will be applied to about half of the + * array elements before the answer is determined. + */ + context->total.startup += sacosts.startup; + context->total.per_tuple += sacosts.per_tuple * + estimate_array_length(arraynode) * 0.5; + } } else if (IsA(node, Aggref) || IsA(node, WindowFunc)) diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 898d7fcb0bd5f..1868c4eff4716 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -1110,6 +1110,16 @@ preprocess_expression(PlannerInfo *root, Node *expr, int kind) #endif } + /* + * Check for ANY ScalarArrayOpExpr with Const arrays and set the + * hashfuncid of any that might execute more quickly by using hash lookups + * instead of a linear search. + */ + if (kind == EXPRKIND_QUAL || kind == EXPRKIND_TARGET) + { + convert_saop_to_hashed_saop(expr); + } + /* Expand SubLinks to SubPlans */ if (root->parse->hasSubLinks) expr = SS_process_sublinks(root, expr, (kind == EXPRKIND_QUAL)); diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 70c0fa07e6e3a..9f40ed77e6464 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -1674,9 +1674,13 @@ fix_expr_common(PlannerInfo *root, Node *node) } else if (IsA(node, ScalarArrayOpExpr)) { - set_sa_opfuncid((ScalarArrayOpExpr *) node); - record_plan_function_dependency(root, - ((ScalarArrayOpExpr *) node)->opfuncid); + ScalarArrayOpExpr *saop = (ScalarArrayOpExpr *) node; + + set_sa_opfuncid(saop); + record_plan_function_dependency(root, saop->opfuncid); + + if (!OidIsValid(saop->hashfuncid)) + record_plan_function_dependency(root, saop->hashfuncid); } else if (IsA(node, Const)) { diff --git a/src/backend/optimizer/prep/prepqual.c b/src/backend/optimizer/prep/prepqual.c index 8d4dc9cd10532..42c3e4dc0464d 100644 --- a/src/backend/optimizer/prep/prepqual.c +++ b/src/backend/optimizer/prep/prepqual.c @@ -127,6 +127,7 @@ negate_clause(Node *node) newopexpr->opno = negator; newopexpr->opfuncid = InvalidOid; + newopexpr->hashfuncid = InvalidOid; newopexpr->useOr = !saopexpr->useOr; newopexpr->inputcollid = saopexpr->inputcollid; newopexpr->args = saopexpr->args; diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 9a6e3dab834ae..526997327c6e1 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -106,6 +106,7 @@ static bool contain_leaked_vars_walker(Node *node, void *context); static Relids find_nonnullable_rels_walker(Node *node, bool top_level); static List *find_nonnullable_vars_walker(Node *node, bool top_level); static bool is_strict_saop(ScalarArrayOpExpr *expr, bool falseOK); +static bool convert_saop_to_hashed_saop_walker(Node *node, void *context); static Node *eval_const_expressions_mutator(Node *node, eval_const_expressions_context *context); static bool contain_non_const_walker(Node *node, void *context); @@ -2101,6 +2102,69 @@ eval_const_expressions(PlannerInfo *root, Node *node) return eval_const_expressions_mutator(node, &context); } +#define MIN_ARRAY_SIZE_FOR_HASHED_SAOP 9 +/*-------------------- + * convert_saop_to_hashed_saop + * + * Recursively search 'node' for ScalarArrayOpExprs and fill in the hash + * function for any ScalarArrayOpExpr that looks like it would be useful to + * evaluate using a hash table rather than a linear search. + * + * We'll use a hash table if all of the following conditions are met: + * 1. The 2nd argument of the array contain only Consts. + * 2. useOr is true. + * 3. There's valid hash function for both left and righthand operands and + * these hash functions are the same. + * 4. If the array contains enough elements for us to consider it to be + * worthwhile using a hash table rather than a linear search. + */ +void +convert_saop_to_hashed_saop(Node *node) +{ + (void) convert_saop_to_hashed_saop_walker(node, NULL); +} + +static bool +convert_saop_to_hashed_saop_walker(Node *node, void *context) +{ + if (node == NULL) + return false; + + if (IsA(node, ScalarArrayOpExpr)) + { + ScalarArrayOpExpr *saop = (ScalarArrayOpExpr *) node; + Expr *arrayarg = (Expr *) lsecond(saop->args); + Oid lefthashfunc; + Oid righthashfunc; + + if (saop->useOr && arrayarg && IsA(arrayarg, Const) && + !((Const *) arrayarg)->constisnull && + get_op_hash_functions(saop->opno, &lefthashfunc, &righthashfunc) && + lefthashfunc == righthashfunc) + { + Datum arrdatum = ((Const *) arrayarg)->constvalue; + ArrayType *arr = (ArrayType *) DatumGetPointer(arrdatum); + int nitems; + + /* + * Only fill in the hash functions if the array looks large enough + * for it to be worth hashing instead of doing a linear search. + */ + nitems = ArrayGetNItems(ARR_NDIM(arr), ARR_DIMS(arr)); + + if (nitems >= MIN_ARRAY_SIZE_FOR_HASHED_SAOP) + { + /* Looks good. Fill in the hash functions */ + saop->hashfuncid = lefthashfunc; + } + return true; + } + } + + return expression_tree_walker(node, convert_saop_to_hashed_saop_walker, NULL); +} + + /*-------------------- * estimate_expression_value * diff --git a/src/backend/parser/parse_oper.c b/src/backend/parser/parse_oper.c index 24013bcac9c61..c379d72fcec99 100644 --- a/src/backend/parser/parse_oper.c +++ b/src/backend/parser/parse_oper.c @@ -894,6 +894,7 @@ make_scalar_array_op(ParseState *pstate, List *opname, result = makeNode(ScalarArrayOpExpr); result->opno = oprid(tup); result->opfuncid = opform->oprcode; + result->hashfuncid = InvalidOid; result->useOr = useOr; /* inputcollid will be set by parse_collate.c */ result->args = args; diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index bfa6e27e9bb00..1290d45963a7b 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -3812,6 +3812,7 @@ make_partition_op_expr(PartitionKey key, int keynum, saopexpr = makeNode(ScalarArrayOpExpr); saopexpr->opno = operoid; saopexpr->opfuncid = get_opcode(operoid); + saopexpr->hashfuncid = InvalidOid; saopexpr->useOr = true; saopexpr->inputcollid = key->partcollation[keynum]; saopexpr->args = list_make2(arg1, arrexpr); diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index abd4bffff5fc6..45722fdbb139e 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202104072 +#define CATALOG_VERSION_NO 202104081 #endif diff --git a/src/include/executor/execExpr.h b/src/include/executor/execExpr.h index 1b7f9865b0a57..2449cde7ad371 100644 --- a/src/include/executor/execExpr.h +++ b/src/include/executor/execExpr.h @@ -20,6 +20,7 @@ /* forward references to avoid circularity */ struct ExprEvalStep; struct SubscriptingRefState; +struct ScalarArrayOpExprHashTable; /* Bits in ExprState->flags (see also execnodes.h for public flag bits): */ /* expression's interpreter has been initialized */ @@ -218,6 +219,7 @@ typedef enum ExprEvalOp /* evaluate assorted special-purpose expression types */ EEOP_CONVERT_ROWTYPE, EEOP_SCALARARRAYOP, + EEOP_HASHED_SCALARARRAYOP, EEOP_XMLEXPR, EEOP_AGGREF, EEOP_GROUPING_FUNC, @@ -554,6 +556,21 @@ typedef struct ExprEvalStep PGFunction fn_addr; /* actual call address */ } scalararrayop; + /* for EEOP_HASHED_SCALARARRAYOP */ + struct + { + bool has_nulls; + struct ScalarArrayOpExprHashTable *elements_tab; + FmgrInfo *finfo; /* function's lookup data */ + FunctionCallInfo fcinfo_data; /* arguments etc */ + /* faster to access without additional indirection: */ + PGFunction fn_addr; /* actual call address */ + FmgrInfo *hash_finfo; /* function's lookup data */ + FunctionCallInfo hash_fcinfo_data; /* arguments etc */ + /* faster to access without additional indirection: */ + PGFunction hash_fn_addr; /* actual call address */ + } hashedscalararrayop; + /* for EEOP_XMLEXPR */ struct { @@ -725,6 +742,8 @@ extern void ExecEvalFieldStoreForm(ExprState *state, ExprEvalStep *op, extern void ExecEvalConvertRowtype(ExprState *state, ExprEvalStep *op, ExprContext *econtext); extern void ExecEvalScalarArrayOp(ExprState *state, ExprEvalStep *op); +extern void ExecEvalHashedScalarArrayOp(ExprState *state, ExprEvalStep *op, + ExprContext *econtext); extern void ExecEvalConstraintNotNull(ExprState *state, ExprEvalStep *op); extern void ExecEvalConstraintCheck(ExprState *state, ExprEvalStep *op); extern void ExecEvalXmlExpr(ExprState *state, ExprEvalStep *op); diff --git a/src/include/nodes/primnodes.h b/src/include/nodes/primnodes.h index f2ac4e51f168e..9ae851d847715 100644 --- a/src/include/nodes/primnodes.h +++ b/src/include/nodes/primnodes.h @@ -578,12 +578,19 @@ typedef OpExpr NullIfExpr; * is almost the same as for the underlying operator, but we need a useOr * flag to remember whether it's ANY or ALL, and we don't have to store * the result type (or the collation) because it must be boolean. + * + * A ScalarArrayOpExpr with a valid hashfuncid is evaluated during execution + * by building a hash table containing the Const values from the rhs arg. + * This table is probed during expression evaluation. Only useOr=true + * ScalarArrayOpExpr with Const arrays on the rhs can have the hashfuncid + * field set. See convert_saop_to_hashed_saop(). */ typedef struct ScalarArrayOpExpr { Expr xpr; Oid opno; /* PG_OPERATOR OID of the operator */ - Oid opfuncid; /* PG_PROC OID of underlying function */ + Oid opfuncid; /* PG_PROC OID of comparison function */ + Oid hashfuncid; /* PG_PROC OID of hash func or InvalidOid */ bool useOr; /* true for ANY, false for ALL */ Oid inputcollid; /* OID of collation that operator should use */ List *args; /* the scalar and array operands */ diff --git a/src/include/optimizer/optimizer.h b/src/include/optimizer/optimizer.h index d587952b7d687..68ebb84bf5d47 100644 --- a/src/include/optimizer/optimizer.h +++ b/src/include/optimizer/optimizer.h @@ -146,6 +146,8 @@ extern bool contain_volatile_functions_not_nextval(Node *clause); extern Node *eval_const_expressions(PlannerInfo *root, Node *node); +extern void convert_saop_to_hashed_saop(Node *node); + extern Node *estimate_expression_value(PlannerInfo *root, Node *node); extern Expr *evaluate_expr(Expr *expr, Oid result_type, int32 result_typmod, diff --git a/src/test/regress/expected/expressions.out b/src/test/regress/expected/expressions.out index 05a6eb07b2e74..5944dfd5e1a0d 100644 --- a/src/test/regress/expected/expressions.out +++ b/src/test/regress/expected/expressions.out @@ -158,3 +158,121 @@ select count(*) from date_tbl 13 (1 row) +-- +-- Tests for ScalarArrayOpExpr with a hashfn +-- +-- create a stable function so that the tests below are not +-- evaluated using the planner's constant folding. +begin; +create function return_int_input(int) returns int as $$ +begin + return $1; +end; +$$ language plpgsql stable; +create function return_text_input(text) returns text as $$ +begin + return $1; +end; +$$ language plpgsql stable; +select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); + ?column? +---------- + t +(1 row) + +select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); + ?column? +---------- + +(1 row) + +select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null); + ?column? +---------- + +(1 row) + +select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null); + ?column? +---------- + t +(1 row) + +select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); + ?column? +---------- + +(1 row) + +select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); + ?column? +---------- + +(1 row) + +select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'); + ?column? +---------- + t +(1 row) + +rollback; +-- Test with non-strict equality function. +-- We need to create our own type for this. +begin; +create type myint; +create function myintin(cstring) returns myint strict immutable language + internal as 'int4in'; +NOTICE: return type myint is only a shell +create function myintout(myint) returns cstring strict immutable language + internal as 'int4out'; +NOTICE: argument type myint is only a shell +create function myinthash(myint) returns integer strict immutable language + internal as 'hashint4'; +NOTICE: argument type myint is only a shell +create type myint (input = myintin, output = myintout, like = int4); +create cast (int4 as myint) without function; +create cast (myint as int4) without function; +create function myinteq(myint, myint) returns bool as $$ +begin + if $1 is null and $2 is null then + return true; + else + return $1::int = $2::int; + end if; +end; +$$ language plpgsql immutable; +create operator = ( + leftarg = myint, + rightarg = myint, + commutator = =, + negator = <>, + procedure = myinteq, + restrict = eqsel, + join = eqjoinsel, + merges +); +create operator class myint_ops +default for type myint using hash as + operator 1 = (myint, myint), + function 1 myinthash(myint); +create table inttest (a myint); +insert into inttest values(1::myint),(null); +-- try an array with enough elements to cause hashing +select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); + a +--- + 1 + +(2 rows) + +-- ensure the result matched with the non-hashed version. We simply remove +-- some array elements so that we don't reach the hashing threshold. +select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint, null); + a +--- + 1 + +(2 rows) + +rollback; diff --git a/src/test/regress/sql/expressions.sql b/src/test/regress/sql/expressions.sql index 1ca8bb151c80c..b3fd1b5ecbac4 100644 --- a/src/test/regress/sql/expressions.sql +++ b/src/test/regress/sql/expressions.sql @@ -65,3 +65,88 @@ select count(*) from date_tbl where f1 not between symmetric '1997-01-01' and '1998-01-01'; select count(*) from date_tbl where f1 not between symmetric '1997-01-01' and '1998-01-01'; + +-- +-- Tests for ScalarArrayOpExpr with a hashfn +-- + +-- create a stable function so that the tests below are not +-- evaluated using the planner's constant folding. +begin; + +create function return_int_input(int) returns int as $$ +begin + return $1; +end; +$$ language plpgsql stable; + +create function return_text_input(text) returns text as $$ +begin + return $1; +end; +$$ language plpgsql stable; + +select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); +select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); +select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null); +select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null); +select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); +select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); +select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'); + +rollback; + +-- Test with non-strict equality function. +-- We need to create our own type for this. + +begin; + +create type myint; +create function myintin(cstring) returns myint strict immutable language + internal as 'int4in'; +create function myintout(myint) returns cstring strict immutable language + internal as 'int4out'; +create function myinthash(myint) returns integer strict immutable language + internal as 'hashint4'; + +create type myint (input = myintin, output = myintout, like = int4); + +create cast (int4 as myint) without function; +create cast (myint as int4) without function; + +create function myinteq(myint, myint) returns bool as $$ +begin + if $1 is null and $2 is null then + return true; + else + return $1::int = $2::int; + end if; +end; +$$ language plpgsql immutable; + +create operator = ( + leftarg = myint, + rightarg = myint, + commutator = =, + negator = <>, + procedure = myinteq, + restrict = eqsel, + join = eqjoinsel, + merges +); + +create operator class myint_ops +default for type myint using hash as + operator 1 = (myint, myint), + function 1 myinthash(myint); + +create table inttest (a myint); +insert into inttest values(1::myint),(null); + +-- try an array with enough elements to cause hashing +select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); +-- ensure the result matched with the non-hashed version. We simply remove +-- some array elements so that we don't reach the hashing threshold. +select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint, null); + +rollback; From 8ff1c94649f5c9184ac5f07981d8aea9dfd7ac19 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Thu, 8 Apr 2021 20:56:08 +0900 Subject: [PATCH 052/671] Allow TRUNCATE command to truncate foreign tables. This commit introduces new foreign data wrapper API for TRUNCATE. It extends TRUNCATE command so that it accepts foreign tables as the targets to truncate and invokes that API. Also it extends postgres_fdw so that it can issue TRUNCATE command to foreign servers, by adding new routine for that TRUNCATE API. The information about options specified in TRUNCATE command, e.g., ONLY, CACADE, etc is passed to FDW via API. The list of foreign tables to truncate is also passed to FDW. FDW truncates the foreign data sources that the passed foreign tables specify, based on those information. For example, postgres_fdw constructs TRUNCATE command using them and issues it to the foreign server. For performance, TRUNCATE command invokes the FDW routine for TRUNCATE once per foreign server that foreign tables to truncate belong to. Author: Kazutaka Onishi, Kohei KaiGai, slightly modified by Fujii Masao Reviewed-by: Bharath Rupireddy, Michael Paquier, Zhihong Yu, Alvaro Herrera, Stephen Frost, Ashutosh Bapat, Amit Langote, Daniel Gustafsson, Ibrar Ahmed, Fujii Masao Discussion: https://postgr.es/m/CAOP8fzb_gkReLput7OvOK+8NHgw-RKqNv59vem7=524krQTcWA@mail.gmail.com Discussion: https://postgr.es/m/CAJuF6cMWDDqU-vn_knZgma+2GMaout68YUgn1uyDnexRhqqM5Q@mail.gmail.com --- contrib/postgres_fdw/connection.c | 3 +- contrib/postgres_fdw/deparse.c | 38 ++++ .../postgres_fdw/expected/postgres_fdw.out | 201 +++++++++++++++++- contrib/postgres_fdw/option.c | 4 + contrib/postgres_fdw/postgres_fdw.c | 103 +++++++++ contrib/postgres_fdw/postgres_fdw.h | 6 + contrib/postgres_fdw/sql/postgres_fdw.sql | 101 +++++++++ doc/src/sgml/fdwhandler.sgml | 61 ++++++ doc/src/sgml/postgres-fdw.sgml | 32 ++- doc/src/sgml/ref/truncate.sgml | 6 +- src/backend/commands/tablecmds.c | 151 +++++++++++-- src/backend/replication/logical/worker.c | 11 +- src/include/commands/tablecmds.h | 18 +- src/include/foreign/fdwapi.h | 8 + src/include/utils/rel.h | 4 +- src/test/regress/expected/foreign_data.out | 8 +- src/tools/pgindent/typedefs.list | 1 + 17 files changed, 725 insertions(+), 31 deletions(-) diff --git a/contrib/postgres_fdw/connection.c b/contrib/postgres_fdw/connection.c index 6a61d83862123..82aa14a65de42 100644 --- a/contrib/postgres_fdw/connection.c +++ b/contrib/postgres_fdw/connection.c @@ -92,7 +92,6 @@ static PGconn *connect_pg_server(ForeignServer *server, UserMapping *user); static void disconnect_pg_server(ConnCacheEntry *entry); static void check_conn_params(const char **keywords, const char **values, UserMapping *user); static void configure_remote_session(PGconn *conn); -static void do_sql_command(PGconn *conn, const char *sql); static void begin_remote_xact(ConnCacheEntry *entry); static void pgfdw_xact_callback(XactEvent event, void *arg); static void pgfdw_subxact_callback(SubXactEvent event, @@ -568,7 +567,7 @@ configure_remote_session(PGconn *conn) /* * Convenience subroutine to issue a non-data-returning SQL command to remote */ -static void +void do_sql_command(PGconn *conn, const char *sql) { PGresult *res; diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c index 5aa3455e30b68..bdc4c3620d024 100644 --- a/contrib/postgres_fdw/deparse.c +++ b/contrib/postgres_fdw/deparse.c @@ -56,6 +56,7 @@ #include "utils/rel.h" #include "utils/syscache.h" #include "utils/typcache.h" +#include "commands/tablecmds.h" /* * Global context for foreign_expr_walker's search of an expression tree. @@ -2172,6 +2173,43 @@ deparseAnalyzeSql(StringInfo buf, Relation rel, List **retrieved_attrs) deparseRelation(buf, rel); } +/* + * Construct a simple "TRUNCATE rel" statement + */ +void +deparseTruncateSql(StringInfo buf, + List *rels, + List *rels_extra, + DropBehavior behavior, + bool restart_seqs) +{ + ListCell *lc1, + *lc2; + + appendStringInfoString(buf, "TRUNCATE "); + + forboth(lc1, rels, lc2, rels_extra) + { + Relation rel = lfirst(lc1); + int extra = lfirst_int(lc2); + + if (lc1 != list_head(rels)) + appendStringInfoString(buf, ", "); + if (extra & TRUNCATE_REL_CONTEXT_ONLY) + appendStringInfoString(buf, "ONLY "); + + deparseRelation(buf, rel); + } + + appendStringInfo(buf, " %s IDENTITY", + restart_seqs ? "RESTART" : "CONTINUE"); + + if (behavior == DROP_RESTRICT) + appendStringInfoString(buf, " RESTRICT"); + else if (behavior == DROP_CASCADE) + appendStringInfoString(buf, " CASCADE"); +} + /* * Construct name to use for given column, and emit it into buf. * If it has a column_name FDW option, use that instead of attribute name. diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index eeb6ae79d0685..7f69fa00545b1 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -8215,6 +8215,205 @@ select * from rem3; drop foreign table rem3; drop table loc3; -- =================================================================== +-- test for TRUNCATE +-- =================================================================== +CREATE TABLE tru_rtable0 (id int primary key); +CREATE TABLE tru_rtable1 (id int primary key); +CREATE FOREIGN TABLE tru_ftable (id int) + SERVER loopback OPTIONS (table_name 'tru_rtable0'); +INSERT INTO tru_rtable0 (SELECT x FROM generate_series(1,10) x); +CREATE TABLE tru_ptable (id int) PARTITION BY HASH(id); +CREATE TABLE tru_ptable__p0 PARTITION OF tru_ptable + FOR VALUES WITH (MODULUS 2, REMAINDER 0); +CREATE FOREIGN TABLE tru_ftable__p1 PARTITION OF tru_ptable + FOR VALUES WITH (MODULUS 2, REMAINDER 1) + SERVER loopback OPTIONS (table_name 'tru_rtable1'); +INSERT INTO tru_ptable (SELECT x FROM generate_series(11,20) x); +CREATE TABLE tru_pk_table(id int primary key); +CREATE TABLE tru_fk_table(fkey int references tru_pk_table(id)); +INSERT INTO tru_pk_table (SELECT x FROM generate_series(1,10) x); +INSERT INTO tru_fk_table (SELECT x % 10 + 1 FROM generate_series(5,25) x); +CREATE FOREIGN TABLE tru_pk_ftable (id int) + SERVER loopback OPTIONS (table_name 'tru_pk_table'); +CREATE TABLE tru_rtable_parent (id int); +CREATE TABLE tru_rtable_child (id int); +CREATE FOREIGN TABLE tru_ftable_parent (id int) + SERVER loopback OPTIONS (table_name 'tru_rtable_parent'); +CREATE FOREIGN TABLE tru_ftable_child () INHERITS (tru_ftable_parent) + SERVER loopback OPTIONS (table_name 'tru_rtable_child'); +INSERT INTO tru_rtable_parent (SELECT x FROM generate_series(1,8) x); +INSERT INTO tru_rtable_child (SELECT x FROM generate_series(10, 18) x); +-- normal truncate +SELECT sum(id) FROM tru_ftable; -- 55 + sum +----- + 55 +(1 row) + +TRUNCATE tru_ftable; +SELECT count(*) FROM tru_rtable0; -- 0 + count +------- + 0 +(1 row) + +SELECT count(*) FROM tru_ftable; -- 0 + count +------- + 0 +(1 row) + +-- 'truncatable' option +ALTER SERVER loopback OPTIONS (ADD truncatable 'false'); +TRUNCATE tru_ftable; -- error +ERROR: foreign table "tru_ftable" does not allow truncates +ALTER FOREIGN TABLE tru_ftable OPTIONS (ADD truncatable 'true'); +TRUNCATE tru_ftable; -- accepted +ALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'false'); +TRUNCATE tru_ftable; -- error +ERROR: foreign table "tru_ftable" does not allow truncates +ALTER SERVER loopback OPTIONS (DROP truncatable); +ALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'false'); +TRUNCATE tru_ftable; -- error +ERROR: foreign table "tru_ftable" does not allow truncates +ALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'true'); +TRUNCATE tru_ftable; -- accepted +-- partitioned table with both local and foreign tables as partitions +SELECT sum(id) FROM tru_ptable; -- 155 + sum +----- + 155 +(1 row) + +TRUNCATE tru_ptable; +SELECT count(*) FROM tru_ptable; -- 0 + count +------- + 0 +(1 row) + +SELECT count(*) FROM tru_ptable__p0; -- 0 + count +------- + 0 +(1 row) + +SELECT count(*) FROM tru_ftable__p1; -- 0 + count +------- + 0 +(1 row) + +SELECT count(*) FROM tru_rtable1; -- 0 + count +------- + 0 +(1 row) + +-- 'CASCADE' option +SELECT sum(id) FROM tru_pk_ftable; -- 55 + sum +----- + 55 +(1 row) + +TRUNCATE tru_pk_ftable; -- failed by FK reference +ERROR: cannot truncate a table referenced in a foreign key constraint +DETAIL: Table "tru_fk_table" references "tru_pk_table". +HINT: Truncate table "tru_fk_table" at the same time, or use TRUNCATE ... CASCADE. +CONTEXT: remote SQL command: TRUNCATE public.tru_pk_table CONTINUE IDENTITY RESTRICT +TRUNCATE tru_pk_ftable CASCADE; +SELECT count(*) FROM tru_pk_ftable; -- 0 + count +------- + 0 +(1 row) + +SELECT count(*) FROM tru_fk_table; -- also truncated,0 + count +------- + 0 +(1 row) + +-- truncate two tables at a command +INSERT INTO tru_ftable (SELECT x FROM generate_series(1,8) x); +INSERT INTO tru_pk_ftable (SELECT x FROM generate_series(3,10) x); +SELECT count(*) from tru_ftable; -- 8 + count +------- + 8 +(1 row) + +SELECT count(*) from tru_pk_ftable; -- 8 + count +------- + 8 +(1 row) + +TRUNCATE tru_ftable, tru_pk_ftable CASCADE; +SELECT count(*) from tru_ftable; -- 0 + count +------- + 0 +(1 row) + +SELECT count(*) from tru_pk_ftable; -- 0 + count +------- + 0 +(1 row) + +-- truncate with ONLY clause +TRUNCATE ONLY tru_ftable_parent; +SELECT sum(id) FROM tru_ftable_parent; -- 126 + sum +----- + 126 +(1 row) + +TRUNCATE tru_ftable_parent; +SELECT count(*) FROM tru_ftable_parent; -- 0 + count +------- + 0 +(1 row) + +-- in case when remote table has inherited children +CREATE TABLE tru_rtable0_child () INHERITS (tru_rtable0); +INSERT INTO tru_rtable0 (SELECT x FROM generate_series(5,9) x); +INSERT INTO tru_rtable0_child (SELECT x FROM generate_series(10,14) x); +SELECT sum(id) FROM tru_ftable; -- 95 + sum +----- + 95 +(1 row) + +TRUNCATE ONLY tru_ftable; -- truncate only parent portion +SELECT sum(id) FROM tru_ftable; -- 60 + sum +----- + 60 +(1 row) + +INSERT INTO tru_rtable0 (SELECT x FROM generate_series(21,25) x); +SELECT sum(id) FROM tru_ftable; -- 175 + sum +----- + 175 +(1 row) + +TRUNCATE tru_ftable; -- truncate both of parent and child +SELECT count(*) FROM tru_ftable; -- empty + count +------- + 0 +(1 row) + +-- cleanup +DROP FOREIGN TABLE tru_ftable_parent, tru_ftable_child, tru_pk_ftable,tru_ftable__p1,tru_ftable; +DROP TABLE tru_rtable0, tru_rtable1, tru_ptable, tru_ptable__p0, tru_pk_table, tru_fk_table, +tru_rtable_parent,tru_rtable_child, tru_rtable0_child; +-- =================================================================== -- test IMPORT FOREIGN SCHEMA -- =================================================================== CREATE SCHEMA import_source; @@ -8917,7 +9116,7 @@ DO $d$ END; $d$; ERROR: invalid option "password" -HINT: Valid options in this context are: service, passfile, channel_binding, connect_timeout, dbname, host, hostaddr, port, options, application_name, keepalives, keepalives_idle, keepalives_interval, keepalives_count, tcp_user_timeout, sslmode, sslcompression, sslcert, sslkey, sslrootcert, sslcrl, sslcrldir, sslsni, requirepeer, ssl_min_protocol_version, ssl_max_protocol_version, gssencmode, krbsrvname, gsslib, target_session_attrs, use_remote_estimate, fdw_startup_cost, fdw_tuple_cost, extensions, updatable, fetch_size, batch_size, async_capable, keep_connections +HINT: Valid options in this context are: service, passfile, channel_binding, connect_timeout, dbname, host, hostaddr, port, options, application_name, keepalives, keepalives_idle, keepalives_interval, keepalives_count, tcp_user_timeout, sslmode, sslcompression, sslcert, sslkey, sslrootcert, sslcrl, sslcrldir, sslsni, requirepeer, ssl_min_protocol_version, ssl_max_protocol_version, gssencmode, krbsrvname, gsslib, target_session_attrs, use_remote_estimate, fdw_startup_cost, fdw_tuple_cost, extensions, updatable, truncatable, fetch_size, batch_size, async_capable, keep_connections CONTEXT: SQL statement "ALTER SERVER loopback_nopw OPTIONS (ADD password 'dummypw')" PL/pgSQL function inline_code_block line 3 at EXECUTE -- If we add a password for our user mapping instead, we should get a different diff --git a/contrib/postgres_fdw/option.c b/contrib/postgres_fdw/option.c index f1d0c8bd412a4..672b55a808f4f 100644 --- a/contrib/postgres_fdw/option.c +++ b/contrib/postgres_fdw/option.c @@ -108,6 +108,7 @@ postgres_fdw_validator(PG_FUNCTION_ARGS) */ if (strcmp(def->defname, "use_remote_estimate") == 0 || strcmp(def->defname, "updatable") == 0 || + strcmp(def->defname, "truncatable") == 0 || strcmp(def->defname, "async_capable") == 0 || strcmp(def->defname, "keep_connections") == 0) { @@ -213,6 +214,9 @@ InitPgFdwOptions(void) /* updatable is available on both server and table */ {"updatable", ForeignServerRelationId, false}, {"updatable", ForeignTableRelationId, false}, + /* truncatable is available on both server and table */ + {"truncatable", ForeignServerRelationId, false}, + {"truncatable", ForeignTableRelationId, false}, /* fetch_size is available on both server and table */ {"fetch_size", ForeignServerRelationId, false}, {"fetch_size", ForeignTableRelationId, false}, diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index b6442070a350b..c590f374c675a 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -400,6 +400,10 @@ static void postgresExplainForeignModify(ModifyTableState *mtstate, ExplainState *es); static void postgresExplainDirectModify(ForeignScanState *node, ExplainState *es); +static void postgresExecForeignTruncate(List *rels, + List *rels_extra, + DropBehavior behavior, + bool restart_seqs); static bool postgresAnalyzeForeignTable(Relation relation, AcquireSampleRowsFunc *func, BlockNumber *totalpages); @@ -588,6 +592,9 @@ postgres_fdw_handler(PG_FUNCTION_ARGS) routine->ExplainForeignModify = postgresExplainForeignModify; routine->ExplainDirectModify = postgresExplainDirectModify; + /* Support function for TRUNCATE */ + routine->ExecForeignTruncate = postgresExecForeignTruncate; + /* Support functions for ANALYZE */ routine->AnalyzeForeignTable = postgresAnalyzeForeignTable; @@ -2868,6 +2875,102 @@ postgresExplainDirectModify(ForeignScanState *node, ExplainState *es) } } +/* + * postgresExecForeignTruncate + * Truncate one or more foreign tables + */ +static void +postgresExecForeignTruncate(List *rels, + List *rels_extra, + DropBehavior behavior, + bool restart_seqs) +{ + Oid serverid = InvalidOid; + UserMapping *user = NULL; + PGconn *conn = NULL; + StringInfoData sql; + ListCell *lc; + bool server_truncatable = true; + + /* + * By default, all postgres_fdw foreign tables are assumed truncatable. + * This can be overridden by a per-server setting, which in turn can be + * overridden by a per-table setting. + */ + foreach(lc, rels) + { + ForeignServer *server = NULL; + Relation rel = lfirst(lc); + ForeignTable *table = GetForeignTable(RelationGetRelid(rel)); + ListCell *cell; + bool truncatable; + + /* + * First time through, determine whether the foreign server allows + * truncates. Since all specified foreign tables are assumed to belong + * to the same foreign server, this result can be used for other + * foreign tables. + */ + if (!OidIsValid(serverid)) + { + serverid = table->serverid; + server = GetForeignServer(serverid); + + foreach(cell, server->options) + { + DefElem *defel = (DefElem *) lfirst(cell); + + if (strcmp(defel->defname, "truncatable") == 0) + { + server_truncatable = defGetBoolean(defel); + break; + } + } + } + + /* + * Confirm that all specified foreign tables belong to the same + * foreign server. + */ + Assert(table->serverid == serverid); + + /* Determine whether this foreign table allows truncations */ + truncatable = server_truncatable; + foreach(cell, table->options) + { + DefElem *defel = (DefElem *) lfirst(cell); + + if (strcmp(defel->defname, "truncatable") == 0) + { + truncatable = defGetBoolean(defel); + break; + } + } + + if (!truncatable) + ereport(ERROR, + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("foreign table \"%s\" does not allow truncates", + RelationGetRelationName(rel)))); + } + Assert(OidIsValid(serverid)); + + /* + * Get connection to the foreign server. Connection manager will + * establish new connection if necessary. + */ + user = GetUserMapping(GetUserId(), serverid); + conn = GetConnection(user, false, NULL); + + /* Construct the TRUNCATE command string */ + initStringInfo(&sql); + deparseTruncateSql(&sql, rels, rels_extra, behavior, restart_seqs); + + /* Issue the TRUNCATE command to remote server */ + do_sql_command(conn, sql.data); + + pfree(sql.data); +} /* * estimate_path_cost_size diff --git a/contrib/postgres_fdw/postgres_fdw.h b/contrib/postgres_fdw/postgres_fdw.h index 88d94da6f6bdc..5d44b7531409d 100644 --- a/contrib/postgres_fdw/postgres_fdw.h +++ b/contrib/postgres_fdw/postgres_fdw.h @@ -145,6 +145,7 @@ extern PGconn *GetConnection(UserMapping *user, bool will_prep_stmt, extern void ReleaseConnection(PGconn *conn); extern unsigned int GetCursorNumber(PGconn *conn); extern unsigned int GetPrepStmtNumber(PGconn *conn); +extern void do_sql_command(PGconn *conn, const char *sql); extern PGresult *pgfdw_get_result(PGconn *conn, const char *query); extern PGresult *pgfdw_exec_query(PGconn *conn, const char *query, PgFdwConnState *state); @@ -206,6 +207,11 @@ extern void deparseDirectDeleteSql(StringInfo buf, PlannerInfo *root, extern void deparseAnalyzeSizeSql(StringInfo buf, Relation rel); extern void deparseAnalyzeSql(StringInfo buf, Relation rel, List **retrieved_attrs); +extern void deparseTruncateSql(StringInfo buf, + List *rels, + List *rels_extra, + DropBehavior behavior, + bool restart_seqs); extern void deparseStringLiteral(StringInfo buf, const char *val); extern Expr *find_em_expr_for_rel(EquivalenceClass *ec, RelOptInfo *rel); extern Expr *find_em_expr_for_input_target(PlannerInfo *root, diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 3b4f90a99caff..7487096eac530 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -2351,6 +2351,107 @@ select * from rem3; drop foreign table rem3; drop table loc3; +-- =================================================================== +-- test for TRUNCATE +-- =================================================================== +CREATE TABLE tru_rtable0 (id int primary key); +CREATE TABLE tru_rtable1 (id int primary key); +CREATE FOREIGN TABLE tru_ftable (id int) + SERVER loopback OPTIONS (table_name 'tru_rtable0'); +INSERT INTO tru_rtable0 (SELECT x FROM generate_series(1,10) x); + +CREATE TABLE tru_ptable (id int) PARTITION BY HASH(id); +CREATE TABLE tru_ptable__p0 PARTITION OF tru_ptable + FOR VALUES WITH (MODULUS 2, REMAINDER 0); +CREATE FOREIGN TABLE tru_ftable__p1 PARTITION OF tru_ptable + FOR VALUES WITH (MODULUS 2, REMAINDER 1) + SERVER loopback OPTIONS (table_name 'tru_rtable1'); +INSERT INTO tru_ptable (SELECT x FROM generate_series(11,20) x); + +CREATE TABLE tru_pk_table(id int primary key); +CREATE TABLE tru_fk_table(fkey int references tru_pk_table(id)); +INSERT INTO tru_pk_table (SELECT x FROM generate_series(1,10) x); +INSERT INTO tru_fk_table (SELECT x % 10 + 1 FROM generate_series(5,25) x); +CREATE FOREIGN TABLE tru_pk_ftable (id int) + SERVER loopback OPTIONS (table_name 'tru_pk_table'); + +CREATE TABLE tru_rtable_parent (id int); +CREATE TABLE tru_rtable_child (id int); +CREATE FOREIGN TABLE tru_ftable_parent (id int) + SERVER loopback OPTIONS (table_name 'tru_rtable_parent'); +CREATE FOREIGN TABLE tru_ftable_child () INHERITS (tru_ftable_parent) + SERVER loopback OPTIONS (table_name 'tru_rtable_child'); +INSERT INTO tru_rtable_parent (SELECT x FROM generate_series(1,8) x); +INSERT INTO tru_rtable_child (SELECT x FROM generate_series(10, 18) x); + +-- normal truncate +SELECT sum(id) FROM tru_ftable; -- 55 +TRUNCATE tru_ftable; +SELECT count(*) FROM tru_rtable0; -- 0 +SELECT count(*) FROM tru_ftable; -- 0 + +-- 'truncatable' option +ALTER SERVER loopback OPTIONS (ADD truncatable 'false'); +TRUNCATE tru_ftable; -- error +ALTER FOREIGN TABLE tru_ftable OPTIONS (ADD truncatable 'true'); +TRUNCATE tru_ftable; -- accepted +ALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'false'); +TRUNCATE tru_ftable; -- error +ALTER SERVER loopback OPTIONS (DROP truncatable); +ALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'false'); +TRUNCATE tru_ftable; -- error +ALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'true'); +TRUNCATE tru_ftable; -- accepted + +-- partitioned table with both local and foreign tables as partitions +SELECT sum(id) FROM tru_ptable; -- 155 +TRUNCATE tru_ptable; +SELECT count(*) FROM tru_ptable; -- 0 +SELECT count(*) FROM tru_ptable__p0; -- 0 +SELECT count(*) FROM tru_ftable__p1; -- 0 +SELECT count(*) FROM tru_rtable1; -- 0 + +-- 'CASCADE' option +SELECT sum(id) FROM tru_pk_ftable; -- 55 +TRUNCATE tru_pk_ftable; -- failed by FK reference +TRUNCATE tru_pk_ftable CASCADE; +SELECT count(*) FROM tru_pk_ftable; -- 0 +SELECT count(*) FROM tru_fk_table; -- also truncated,0 + +-- truncate two tables at a command +INSERT INTO tru_ftable (SELECT x FROM generate_series(1,8) x); +INSERT INTO tru_pk_ftable (SELECT x FROM generate_series(3,10) x); +SELECT count(*) from tru_ftable; -- 8 +SELECT count(*) from tru_pk_ftable; -- 8 +TRUNCATE tru_ftable, tru_pk_ftable CASCADE; +SELECT count(*) from tru_ftable; -- 0 +SELECT count(*) from tru_pk_ftable; -- 0 + +-- truncate with ONLY clause +TRUNCATE ONLY tru_ftable_parent; +SELECT sum(id) FROM tru_ftable_parent; -- 126 +TRUNCATE tru_ftable_parent; +SELECT count(*) FROM tru_ftable_parent; -- 0 + +-- in case when remote table has inherited children +CREATE TABLE tru_rtable0_child () INHERITS (tru_rtable0); +INSERT INTO tru_rtable0 (SELECT x FROM generate_series(5,9) x); +INSERT INTO tru_rtable0_child (SELECT x FROM generate_series(10,14) x); +SELECT sum(id) FROM tru_ftable; -- 95 + +TRUNCATE ONLY tru_ftable; -- truncate only parent portion +SELECT sum(id) FROM tru_ftable; -- 60 + +INSERT INTO tru_rtable0 (SELECT x FROM generate_series(21,25) x); +SELECT sum(id) FROM tru_ftable; -- 175 +TRUNCATE tru_ftable; -- truncate both of parent and child +SELECT count(*) FROM tru_ftable; -- empty + +-- cleanup +DROP FOREIGN TABLE tru_ftable_parent, tru_ftable_child, tru_pk_ftable,tru_ftable__p1,tru_ftable; +DROP TABLE tru_rtable0, tru_rtable1, tru_ptable, tru_ptable__p0, tru_pk_table, tru_fk_table, +tru_rtable_parent,tru_rtable_child, tru_rtable0_child; + -- =================================================================== -- test IMPORT FOREIGN SCHEMA -- =================================================================== diff --git a/doc/src/sgml/fdwhandler.sgml b/doc/src/sgml/fdwhandler.sgml index 0f2397df4972b..98882ddab86f0 100644 --- a/doc/src/sgml/fdwhandler.sgml +++ b/doc/src/sgml/fdwhandler.sgml @@ -1065,6 +1065,67 @@ EndDirectModify(ForeignScanState *node); + + FDW Routines for <command>TRUNCATE</command> + + + +void +ExecForeignTruncate(List *rels, List *rels_extra, + DropBehavior behavior, bool restart_seqs); + + + Truncate a set of foreign tables specified in rels. + This function is called when is executed + on foreign tables. rels is the list of + Relation data structure that indicates + a foreign table to truncate. rels_extra the list of + int value, which delivers extra information about + a foreign table to truncate. Possible values are + TRUNCATE_REL_CONTEXT_NORMAL, which means that + the foreign table is specified WITHOUT ONLY clause + in TRUNCATE, + TRUNCATE_REL_CONTEXT_ONLY, which means that + the foreign table is specified WITH ONLY clause, + and TRUNCATE_REL_CONTEXT_CASCADING, + which means that the foreign table is not specified explicitly, + but will be truncated due to dependency (for example, partition table). + There is one-to-one mapping between rels and + rels_extra. The number of entries is the same + between the two lists. + + + + behavior defines how foreign tables should + be truncated, using as possible values DROP_RESTRICT, + which means that RESTRICT option is specified, + and DROP_CASCADE, which means that + CASCADE option is specified, in + TRUNCATE command. + + + + restart_seqs is set to true + if RESTART IDENTITY option is specified in + TRUNCATE command. It is false + if CONTINUE IDENTITY option is specified. + + + + TRUNCATE invokes + ExecForeignTruncate once per foreign server + that foreign tables to truncate belong to. This means that all foreign + tables included in rels must belong to the same + server. + + + + If the ExecForeignTruncate pointer is set to + NULL, attempts to truncate foreign tables will + fail with an error message. + + + FDW Routines for Row Locking diff --git a/doc/src/sgml/postgres-fdw.sgml b/doc/src/sgml/postgres-fdw.sgml index b0792a13b13ea..fd34956936986 100644 --- a/doc/src/sgml/postgres-fdw.sgml +++ b/doc/src/sgml/postgres-fdw.sgml @@ -63,9 +63,10 @@ Now you need only SELECT from a foreign table to access the data stored in its underlying remote table. You can also modify - the remote table using INSERT, UPDATE, or - DELETE. (Of course, the remote user you have specified - in your user mapping must have privileges to do these things.) + the remote table using INSERT, UPDATE, + DELETE, or TRUNCATE. + (Of course, the remote user you have specified in your user mapping must + have privileges to do these things.) @@ -436,6 +437,31 @@ OPTIONS (ADD password_required 'false'); + + Truncatability Options + + + By default all foreign tables using postgres_fdw are assumed + to be truncatable. This may be overridden using the following option: + + + + + + truncatable + + + This option controls whether postgres_fdw allows + foreign tables to be truncated using TRUNCATE + command. It can be specified for a foreign table or a foreign server. + A table-level option overrides a server-level option. + The default is true. + + + + + + Importing Options diff --git a/doc/src/sgml/ref/truncate.sgml b/doc/src/sgml/ref/truncate.sgml index 91cdac5562330..acf3633be4608 100644 --- a/doc/src/sgml/ref/truncate.sgml +++ b/doc/src/sgml/ref/truncate.sgml @@ -172,9 +172,9 @@ TRUNCATE [ TABLE ] [ ONLY ] name [ - TRUNCATE is not currently supported for foreign tables. - This implies that if a specified table has any descendant tables that are - foreign, the command will fail. + TRUNCATE can be used for foreign tables if + the foreign data wrapper supports, for instance, + see . diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 87f9bdaef05c1..1f19629a9494b 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -59,6 +59,7 @@ #include "commands/typecmds.h" #include "commands/user.h" #include "executor/executor.h" +#include "foreign/fdwapi.h" #include "foreign/foreign.h" #include "miscadmin.h" #include "nodes/makefuncs.h" @@ -310,6 +311,21 @@ struct DropRelationCallbackState #define ATT_FOREIGN_TABLE 0x0020 #define ATT_PARTITIONED_INDEX 0x0040 +/* + * ForeignTruncateInfo + * + * Information related to truncation of foreign tables. This is used for + * the elements in a hash table. It uses the server OID as lookup key, + * and includes a per-server list of all foreign tables involved in the + * truncation. + */ +typedef struct ForeignTruncateInfo +{ + Oid serverid; + List *rels; + List *rels_extra; +} ForeignTruncateInfo; + /* * Partition tables are expected to be dropped when the parent partitioned * table gets dropped. Hence for partitioning we use AUTO dependency. @@ -1589,7 +1605,10 @@ RangeVarCallbackForDropRelation(const RangeVar *rel, Oid relOid, Oid oldRelOid, * * This is a multi-relation truncate. We first open and grab exclusive * lock on all relations involved, checking permissions and otherwise - * verifying that the relation is OK for truncation. In CASCADE mode, + * verifying that the relation is OK for truncation. Note that if relations + * are foreign tables, at this stage, we have not yet checked that their + * foreign data in external data sources are OK for truncation. These are + * checked when foreign data are actually truncated later. In CASCADE mode, * relations having FK references to the targeted relations are automatically * added to the group; in RESTRICT mode, we check that all FK references are * internal to the group that's being truncated. Finally all the relations @@ -1600,6 +1619,7 @@ ExecuteTruncate(TruncateStmt *stmt) { List *rels = NIL; List *relids = NIL; + List *relids_extra = NIL; List *relids_logged = NIL; ListCell *cell; @@ -1636,6 +1656,9 @@ ExecuteTruncate(TruncateStmt *stmt) rels = lappend(rels, rel); relids = lappend_oid(relids, myrelid); + relids_extra = lappend_int(relids_extra, (recurse ? + TRUNCATE_REL_CONTEXT_NORMAL : + TRUNCATE_REL_CONTEXT_ONLY)); /* Log this relation only if needed for logical decoding */ if (RelationIsLogicallyLogged(rel)) relids_logged = lappend_oid(relids_logged, myrelid); @@ -1683,6 +1706,8 @@ ExecuteTruncate(TruncateStmt *stmt) rels = lappend(rels, rel); relids = lappend_oid(relids, childrelid); + relids_extra = lappend_int(relids_extra, + TRUNCATE_REL_CONTEXT_CASCADING); /* Log this relation only if needed for logical decoding */ if (RelationIsLogicallyLogged(rel)) relids_logged = lappend_oid(relids_logged, childrelid); @@ -1695,7 +1720,7 @@ ExecuteTruncate(TruncateStmt *stmt) errhint("Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly."))); } - ExecuteTruncateGuts(rels, relids, relids_logged, + ExecuteTruncateGuts(rels, relids, relids_extra, relids_logged, stmt->behavior, stmt->restart_seqs); /* And close the rels */ @@ -1716,21 +1741,28 @@ ExecuteTruncate(TruncateStmt *stmt) * * explicit_rels is the list of Relations to truncate that the command * specified. relids is the list of Oids corresponding to explicit_rels. - * relids_logged is the list of Oids (a subset of relids) that require - * WAL-logging. This is all a bit redundant, but the existing callers have - * this information handy in this form. + * relids_extra is the list of integer values that deliver extra information + * about relations in explicit_rels. relids_logged is the list of Oids + * (a subset of relids) that require WAL-logging. This is all a bit redundant, + * but the existing callers have this information handy in this form. */ void -ExecuteTruncateGuts(List *explicit_rels, List *relids, List *relids_logged, +ExecuteTruncateGuts(List *explicit_rels, + List *relids, + List *relids_extra, + List *relids_logged, DropBehavior behavior, bool restart_seqs) { List *rels; List *seq_relids = NIL; + HTAB *ft_htab = NULL; EState *estate; ResultRelInfo *resultRelInfos; ResultRelInfo *resultRelInfo; SubTransactionId mySubid; ListCell *cell; + ListCell *lc1, + *lc2; Oid *logrelids; /* @@ -1768,6 +1800,8 @@ ExecuteTruncateGuts(List *explicit_rels, List *relids, List *relids_logged, truncate_check_activity(rel); rels = lappend(rels, rel); relids = lappend_oid(relids, relid); + relids_extra = lappend_int(relids_extra, + TRUNCATE_REL_CONTEXT_CASCADING); /* Log this relation only if needed for logical decoding */ if (RelationIsLogicallyLogged(rel)) relids_logged = lappend_oid(relids_logged, relid); @@ -1868,14 +1902,63 @@ ExecuteTruncateGuts(List *explicit_rels, List *relids, List *relids_logged, */ mySubid = GetCurrentSubTransactionId(); - foreach(cell, rels) + Assert(list_length(rels) == list_length(relids_extra)); + forboth(lc1, rels, lc2, relids_extra) { - Relation rel = (Relation) lfirst(cell); + Relation rel = (Relation) lfirst(lc1); + int extra = lfirst_int(lc2); /* Skip partitioned tables as there is nothing to do */ if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) continue; + /* + * Build the lists of foreign tables belonging to each foreign server + * and pass each list to the foreign data wrapper's callback function, + * so that each server can truncate its all foreign tables in bulk. + * Each list is saved as a single entry in a hash table that uses the + * server OID as lookup key. + */ + if (rel->rd_rel->relkind == RELKIND_FOREIGN_TABLE) + { + Oid serverid = GetForeignServerIdByRelId(RelationGetRelid(rel)); + bool found; + ForeignTruncateInfo *ft_info; + + /* First time through, initialize hashtable for foreign tables */ + if (!ft_htab) + { + HASHCTL hctl; + + memset(&hctl, 0, sizeof(HASHCTL)); + hctl.keysize = sizeof(Oid); + hctl.entrysize = sizeof(ForeignTruncateInfo); + hctl.hcxt = CurrentMemoryContext; + + ft_htab = hash_create("TRUNCATE for Foreign Tables", + 32, /* start small and extend */ + &hctl, + HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); + } + + /* Find or create cached entry for the foreign table */ + ft_info = hash_search(ft_htab, &serverid, HASH_ENTER, &found); + if (!found) + { + ft_info->serverid = serverid; + ft_info->rels = NIL; + ft_info->rels_extra = NIL; + } + + /* + * Save the foreign table in the entry of the server that the + * foreign table belongs to. + */ + ft_info->rels = lappend(ft_info->rels, rel); + ft_info->rels_extra = lappend_int(ft_info->rels_extra, extra); + continue; + } + /* * Normally, we need a transaction-safe truncation here. However, if * the table was either created in the current (sub)transaction or has @@ -1938,6 +2021,36 @@ ExecuteTruncateGuts(List *explicit_rels, List *relids, List *relids_logged, pgstat_count_truncate(rel); } + /* Now go through the hash table, and truncate foreign tables */ + if (ft_htab) + { + ForeignTruncateInfo *ft_info; + HASH_SEQ_STATUS seq; + + hash_seq_init(&seq, ft_htab); + + PG_TRY(); + { + while ((ft_info = hash_seq_search(&seq)) != NULL) + { + FdwRoutine *routine = GetFdwRoutineByServerId(ft_info->serverid); + + /* truncate_check_rel() has checked that already */ + Assert(routine->ExecForeignTruncate != NULL); + + routine->ExecForeignTruncate(ft_info->rels, + ft_info->rels_extra, + behavior, + restart_seqs); + } + } + PG_FINALLY(); + { + hash_destroy(ft_htab); + } + PG_END_TRY(); + } + /* * Restart owned sequences if we were asked to. */ @@ -2023,12 +2136,24 @@ truncate_check_rel(Oid relid, Form_pg_class reltuple) char *relname = NameStr(reltuple->relname); /* - * Only allow truncate on regular tables and partitioned tables (although, - * the latter are only being included here for the following checks; no - * physical truncation will occur in their case.) + * Only allow truncate on regular tables, foreign tables using foreign + * data wrappers supporting TRUNCATE and partitioned tables (although, the + * latter are only being included here for the following checks; no + * physical truncation will occur in their case.). */ - if (reltuple->relkind != RELKIND_RELATION && - reltuple->relkind != RELKIND_PARTITIONED_TABLE) + if (reltuple->relkind == RELKIND_FOREIGN_TABLE) + { + Oid serverid = GetForeignServerIdByRelId(relid); + FdwRoutine *fdwroutine = GetFdwRoutineByServerId(serverid); + + if (!fdwroutine->ExecForeignTruncate) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot truncate foreign table \"%s\"", + relname))); + } + else if (reltuple->relkind != RELKIND_RELATION && + reltuple->relkind != RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("\"%s\" is not a table", relname))); diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 8da602d163694..fb3ba5c4159de 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -1795,6 +1795,7 @@ apply_handle_truncate(StringInfo s) List *rels = NIL; List *part_rels = NIL; List *relids = NIL; + List *relids_extra = NIL; List *relids_logged = NIL; ListCell *lc; @@ -1824,6 +1825,7 @@ apply_handle_truncate(StringInfo s) remote_rels = lappend(remote_rels, rel); rels = lappend(rels, rel->localrel); relids = lappend_oid(relids, rel->localreloid); + relids_extra = lappend_int(relids_extra, TRUNCATE_REL_CONTEXT_NORMAL); if (RelationIsLogicallyLogged(rel->localrel)) relids_logged = lappend_oid(relids_logged, rel->localreloid); @@ -1862,6 +1864,7 @@ apply_handle_truncate(StringInfo s) rels = lappend(rels, childrel); part_rels = lappend(part_rels, childrel); relids = lappend_oid(relids, childrelid); + relids_extra = lappend_int(relids_extra, TRUNCATE_REL_CONTEXT_CASCADING); /* Log this relation only if needed for logical decoding */ if (RelationIsLogicallyLogged(childrel)) relids_logged = lappend_oid(relids_logged, childrelid); @@ -1874,8 +1877,12 @@ apply_handle_truncate(StringInfo s) * to replaying changes without further cascading. This might be later * changeable with a user specified option. */ - ExecuteTruncateGuts(rels, relids, relids_logged, DROP_RESTRICT, restart_seqs); - + ExecuteTruncateGuts(rels, + relids, + relids_extra, + relids_logged, + DROP_RESTRICT, + restart_seqs); foreach(lc, remote_rels) { LogicalRepRelMapEntry *rel = lfirst(lc); diff --git a/src/include/commands/tablecmds.h b/src/include/commands/tablecmds.h index b3d30acc3596d..b808a07e461b6 100644 --- a/src/include/commands/tablecmds.h +++ b/src/include/commands/tablecmds.h @@ -21,6 +21,16 @@ #include "storage/lock.h" #include "utils/relcache.h" +/* + * These values indicate how a relation was specified as the target to + * truncate in TRUNCATE command. + */ +#define TRUNCATE_REL_CONTEXT_NORMAL 1 /* specified without ONLY clause */ +#define TRUNCATE_REL_CONTEXT_ONLY 2 /* specified with ONLY clause */ +#define TRUNCATE_REL_CONTEXT_CASCADING 3 /* not specified but truncated + * due to dependency (e.g., + * partition table) */ + struct AlterTableUtilityContext; /* avoid including tcop/utility.h here */ @@ -56,8 +66,12 @@ extern void AlterRelationNamespaceInternal(Relation classRel, Oid relOid, extern void CheckTableNotInUse(Relation rel, const char *stmt); extern void ExecuteTruncate(TruncateStmt *stmt); -extern void ExecuteTruncateGuts(List *explicit_rels, List *relids, List *relids_logged, - DropBehavior behavior, bool restart_seqs); +extern void ExecuteTruncateGuts(List *explicit_rels, + List *relids, + List *relids_extra, + List *relids_logged, + DropBehavior behavior, + bool restart_seqs); extern void SetRelationHasSubclass(Oid relationId, bool relhassubclass); diff --git a/src/include/foreign/fdwapi.h b/src/include/foreign/fdwapi.h index 10d29ff292add..4ebbca6de920b 100644 --- a/src/include/foreign/fdwapi.h +++ b/src/include/foreign/fdwapi.h @@ -160,6 +160,11 @@ typedef bool (*AnalyzeForeignTable_function) (Relation relation, typedef List *(*ImportForeignSchema_function) (ImportForeignSchemaStmt *stmt, Oid serverOid); +typedef void (*ExecForeignTruncate_function) (List *rels, + List *rels_extra, + DropBehavior behavior, + bool restart_seqs); + typedef Size (*EstimateDSMForeignScan_function) (ForeignScanState *node, ParallelContext *pcxt); typedef void (*InitializeDSMForeignScan_function) (ForeignScanState *node, @@ -255,6 +260,9 @@ typedef struct FdwRoutine /* Support functions for IMPORT FOREIGN SCHEMA */ ImportForeignSchema_function ImportForeignSchema; + /* Support functions for TRUNCATE */ + ExecForeignTruncate_function ExecForeignTruncate; + /* Support functions for parallelism under Gather node */ IsForeignScanParallelSafe_function IsForeignScanParallelSafe; EstimateDSMForeignScan_function EstimateDSMForeignScan; diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h index 9a3a03e52077a..34e25eb59785a 100644 --- a/src/include/utils/rel.h +++ b/src/include/utils/rel.h @@ -634,7 +634,8 @@ typedef struct ViewOptions * WAL stream. * * We don't log information for unlogged tables (since they don't WAL log - * anyway) and for system tables (their content is hard to make sense of, and + * anyway), for foreign tables (since they don't WAL log, either), + * and for system tables (their content is hard to make sense of, and * it would complicate decoding slightly for little gain). Note that we *do* * log information for user defined catalog tables since they presumably are * interesting to the user... @@ -642,6 +643,7 @@ typedef struct ViewOptions #define RelationIsLogicallyLogged(relation) \ (XLogLogicalInfoActive() && \ RelationNeedsWAL(relation) && \ + (relation)->rd_rel->relkind != RELKIND_FOREIGN_TABLE && \ !IsCatalogRelation(relation)) /* routines in utils/cache/relcache.c */ diff --git a/src/test/regress/expected/foreign_data.out b/src/test/regress/expected/foreign_data.out index e4cdb780d0a43..5385f98a0fe27 100644 --- a/src/test/regress/expected/foreign_data.out +++ b/src/test/regress/expected/foreign_data.out @@ -1807,9 +1807,9 @@ Inherits: fd_pt1 -- TRUNCATE doesn't work on foreign tables, either directly or recursively TRUNCATE ft2; -- ERROR -ERROR: "ft2" is not a table +ERROR: foreign-data wrapper "dummy" has no handler TRUNCATE fd_pt1; -- ERROR -ERROR: "ft2" is not a table +ERROR: foreign-data wrapper "dummy" has no handler DROP TABLE fd_pt1 CASCADE; NOTICE: drop cascades to foreign table ft2 -- IMPORT FOREIGN SCHEMA @@ -2032,9 +2032,9 @@ ALTER FOREIGN TABLE fd_pt2_1 ADD CONSTRAINT fd_pt2chk1 CHECK (c1 > 0); ALTER TABLE fd_pt2 ATTACH PARTITION fd_pt2_1 FOR VALUES IN (1); -- TRUNCATE doesn't work on foreign tables, either directly or recursively TRUNCATE fd_pt2_1; -- ERROR -ERROR: "fd_pt2_1" is not a table +ERROR: foreign-data wrapper "dummy" has no handler TRUNCATE fd_pt2; -- ERROR -ERROR: "fd_pt2_1" is not a table +ERROR: foreign-data wrapper "dummy" has no handler DROP FOREIGN TABLE fd_pt2_1; DROP TABLE fd_pt2; -- foreign table cannot be part of partition tree made of temporary diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 200015cac79d4..c7aff677d4bb3 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -704,6 +704,7 @@ ForeignScanState ForeignServer ForeignServerInfo ForeignTable +ForeignTruncateInfo ForkNumber FormData_pg_aggregate FormData_pg_am From 34399a670a1c559ef8a355ed25d090d73e400ad4 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 9 Apr 2021 00:36:59 +1200 Subject: [PATCH 053/671] Remove duplicate typedef. Thinko in commit 323cbe7c, per complaint from BF animal locust's older GCC compiler. --- src/include/replication/logical.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/include/replication/logical.h b/src/include/replication/logical.h index 94e278ef81cf5..7dfcb7be187d3 100644 --- a/src/include/replication/logical.h +++ b/src/include/replication/logical.h @@ -29,8 +29,6 @@ typedef void (*LogicalOutputPluginWriterUpdateProgress) (struct LogicalDecodingC TransactionId xid ); -typedef struct LogicalDecodingContext LogicalDecodingContext; - typedef bool (*LogicalDecodingXLogPageReadCB)(XLogReaderState *ctx); typedef struct LogicalDecodingContext From 5844c23dc50508aefeb8183be45f4ee99e9dec17 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Thu, 8 Apr 2021 15:15:17 +0200 Subject: [PATCH 054/671] Merge v1.10 of pg_stat_statements into v1.9 v1.9 is already new in this version of PostgreSQL, so turn it into just one change. Author: Julien Rohaud Discussion: https://postgr.es/m/20210408120505.7zinijtdexbyghvb@nol --- contrib/pg_stat_statements/Makefile | 3 +- .../pg_stat_statements--1.8--1.9.sql | 53 +++++++++++++++++ .../pg_stat_statements--1.9--1.10.sql | 57 ------------------- .../pg_stat_statements/pg_stat_statements.c | 18 +++--- .../pg_stat_statements.control | 2 +- 5 files changed, 64 insertions(+), 69 deletions(-) delete mode 100644 contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql diff --git a/contrib/pg_stat_statements/Makefile b/contrib/pg_stat_statements/Makefile index cab4f626ad17b..3ec627b956180 100644 --- a/contrib/pg_stat_statements/Makefile +++ b/contrib/pg_stat_statements/Makefile @@ -6,8 +6,7 @@ OBJS = \ pg_stat_statements.o EXTENSION = pg_stat_statements -DATA = pg_stat_statements--1.4.sql \ - pg_stat_statements--1.9--1.10.sql pg_stat_statements--1.8--1.9.sql \ +DATA = pg_stat_statements--1.4.sql pg_stat_statements--1.8--1.9.sql \ pg_stat_statements--1.7--1.8.sql pg_stat_statements--1.6--1.7.sql \ pg_stat_statements--1.5--1.6.sql pg_stat_statements--1.4--1.5.sql \ pg_stat_statements--1.3--1.4.sql pg_stat_statements--1.2--1.3.sql \ diff --git a/contrib/pg_stat_statements/pg_stat_statements--1.8--1.9.sql b/contrib/pg_stat_statements/pg_stat_statements--1.8--1.9.sql index 3504ca7eb13fd..c45223f888e98 100644 --- a/contrib/pg_stat_statements/pg_stat_statements--1.8--1.9.sql +++ b/contrib/pg_stat_statements/pg_stat_statements--1.8--1.9.sql @@ -16,3 +16,56 @@ CREATE VIEW pg_stat_statements_info AS SELECT * FROM pg_stat_statements_info(); GRANT SELECT ON pg_stat_statements_info TO PUBLIC; + +/* First we have to remove them from the extension */ +ALTER EXTENSION pg_stat_statements DROP VIEW pg_stat_statements; +ALTER EXTENSION pg_stat_statements DROP FUNCTION pg_stat_statements(boolean); + +/* Then we can drop them */ +DROP VIEW pg_stat_statements; +DROP FUNCTION pg_stat_statements(boolean); + +/* Now redefine */ +CREATE FUNCTION pg_stat_statements(IN showtext boolean, + OUT userid oid, + OUT dbid oid, + OUT toplevel bool, + OUT queryid bigint, + OUT query text, + OUT plans int8, + OUT total_plan_time float8, + OUT min_plan_time float8, + OUT max_plan_time float8, + OUT mean_plan_time float8, + OUT stddev_plan_time float8, + OUT calls int8, + OUT total_exec_time float8, + OUT min_exec_time float8, + OUT max_exec_time float8, + OUT mean_exec_time float8, + OUT stddev_exec_time float8, + OUT rows int8, + OUT shared_blks_hit int8, + OUT shared_blks_read int8, + OUT shared_blks_dirtied int8, + OUT shared_blks_written int8, + OUT local_blks_hit int8, + OUT local_blks_read int8, + OUT local_blks_dirtied int8, + OUT local_blks_written int8, + OUT temp_blks_read int8, + OUT temp_blks_written int8, + OUT blk_read_time float8, + OUT blk_write_time float8, + OUT wal_records int8, + OUT wal_fpi int8, + OUT wal_bytes numeric +) +RETURNS SETOF record +AS 'MODULE_PATHNAME', 'pg_stat_statements_1_9' +LANGUAGE C STRICT VOLATILE PARALLEL SAFE; + +CREATE VIEW pg_stat_statements AS + SELECT * FROM pg_stat_statements(true); + +GRANT SELECT ON pg_stat_statements TO PUBLIC; diff --git a/contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql b/contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql deleted file mode 100644 index f97d16497d4a6..0000000000000 --- a/contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql +++ /dev/null @@ -1,57 +0,0 @@ -/* contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql */ - --- complain if script is sourced in psql, rather than via ALTER EXTENSION -\echo Use "ALTER EXTENSION pg_stat_statements UPDATE TO '1.10'" to load this file. \quit - -/* First we have to remove them from the extension */ -ALTER EXTENSION pg_stat_statements DROP VIEW pg_stat_statements; -ALTER EXTENSION pg_stat_statements DROP FUNCTION pg_stat_statements(boolean); - -/* Then we can drop them */ -DROP VIEW pg_stat_statements; -DROP FUNCTION pg_stat_statements(boolean); - -/* Now redefine */ -CREATE FUNCTION pg_stat_statements(IN showtext boolean, - OUT userid oid, - OUT dbid oid, - OUT toplevel bool, - OUT queryid bigint, - OUT query text, - OUT plans int8, - OUT total_plan_time float8, - OUT min_plan_time float8, - OUT max_plan_time float8, - OUT mean_plan_time float8, - OUT stddev_plan_time float8, - OUT calls int8, - OUT total_exec_time float8, - OUT min_exec_time float8, - OUT max_exec_time float8, - OUT mean_exec_time float8, - OUT stddev_exec_time float8, - OUT rows int8, - OUT shared_blks_hit int8, - OUT shared_blks_read int8, - OUT shared_blks_dirtied int8, - OUT shared_blks_written int8, - OUT local_blks_hit int8, - OUT local_blks_read int8, - OUT local_blks_dirtied int8, - OUT local_blks_written int8, - OUT temp_blks_read int8, - OUT temp_blks_written int8, - OUT blk_read_time float8, - OUT blk_write_time float8, - OUT wal_records int8, - OUT wal_fpi int8, - OUT wal_bytes numeric -) -RETURNS SETOF record -AS 'MODULE_PATHNAME', 'pg_stat_statements_1_10' -LANGUAGE C STRICT VOLATILE PARALLEL SAFE; - -CREATE VIEW pg_stat_statements AS - SELECT * FROM pg_stat_statements(true); - -GRANT SELECT ON pg_stat_statements TO PUBLIC; diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index fc2677643b920..24b453adcb410 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -120,7 +120,7 @@ typedef enum pgssVersion PGSS_V1_2, PGSS_V1_3, PGSS_V1_8, - PGSS_V1_10 + PGSS_V1_9 } pgssVersion; typedef enum pgssStoreKind @@ -299,7 +299,7 @@ PG_FUNCTION_INFO_V1(pg_stat_statements_reset_1_7); PG_FUNCTION_INFO_V1(pg_stat_statements_1_2); PG_FUNCTION_INFO_V1(pg_stat_statements_1_3); PG_FUNCTION_INFO_V1(pg_stat_statements_1_8); -PG_FUNCTION_INFO_V1(pg_stat_statements_1_10); +PG_FUNCTION_INFO_V1(pg_stat_statements_1_9); PG_FUNCTION_INFO_V1(pg_stat_statements); PG_FUNCTION_INFO_V1(pg_stat_statements_info); @@ -1414,7 +1414,7 @@ pg_stat_statements_reset(PG_FUNCTION_ARGS) #define PG_STAT_STATEMENTS_COLS_V1_2 19 #define PG_STAT_STATEMENTS_COLS_V1_3 23 #define PG_STAT_STATEMENTS_COLS_V1_8 32 -#define PG_STAT_STATEMENTS_COLS_V1_10 33 +#define PG_STAT_STATEMENTS_COLS_V1_9 33 #define PG_STAT_STATEMENTS_COLS 33 /* maximum of above */ /* @@ -1428,11 +1428,11 @@ pg_stat_statements_reset(PG_FUNCTION_ARGS) * function. Unfortunately we weren't bright enough to do that for 1.1. */ Datum -pg_stat_statements_1_10(PG_FUNCTION_ARGS) +pg_stat_statements_1_9(PG_FUNCTION_ARGS) { bool showtext = PG_GETARG_BOOL(0); - pg_stat_statements_internal(fcinfo, PGSS_V1_10, showtext); + pg_stat_statements_internal(fcinfo, PGSS_V1_9, showtext); return (Datum) 0; } @@ -1556,8 +1556,8 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, if (api_version != PGSS_V1_8) elog(ERROR, "incorrect number of output arguments"); break; - case PG_STAT_STATEMENTS_COLS_V1_10: - if (api_version != PGSS_V1_10) + case PG_STAT_STATEMENTS_COLS_V1_9: + if (api_version != PGSS_V1_9) elog(ERROR, "incorrect number of output arguments"); break; default: @@ -1651,7 +1651,7 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, values[i++] = ObjectIdGetDatum(entry->key.userid); values[i++] = ObjectIdGetDatum(entry->key.dbid); - if (api_version >= PGSS_V1_10) + if (api_version >= PGSS_V1_9) values[i++] = BoolGetDatum(entry->key.toplevel); if (is_allowed_role || entry->key.userid == userid) @@ -1790,7 +1790,7 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, api_version == PGSS_V1_2 ? PG_STAT_STATEMENTS_COLS_V1_2 : api_version == PGSS_V1_3 ? PG_STAT_STATEMENTS_COLS_V1_3 : api_version == PGSS_V1_8 ? PG_STAT_STATEMENTS_COLS_V1_8 : - api_version == PGSS_V1_10 ? PG_STAT_STATEMENTS_COLS_V1_10 : + api_version == PGSS_V1_9 ? PG_STAT_STATEMENTS_COLS_V1_9 : -1 /* fail if you forget to update this assert */ )); tuplestore_putvalues(tupstore, tupdesc, values, nulls); diff --git a/contrib/pg_stat_statements/pg_stat_statements.control b/contrib/pg_stat_statements/pg_stat_statements.control index 0747e48138373..2f1ce6ed50705 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.control +++ b/contrib/pg_stat_statements/pg_stat_statements.control @@ -1,5 +1,5 @@ # pg_stat_statements extension comment = 'track planning and execution statistics of all SQL statements executed' -default_version = '1.10' +default_version = '1.9' module_pathname = '$libdir/pg_stat_statements' relocatable = true From 0f61727b75b93915ca9a9f20c996ed7020996a38 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 8 Apr 2021 11:16:01 -0400 Subject: [PATCH 055/671] Fixes for query_id feature Ignore parallel workers in pg_stat_statements Oversight in 4f0b0966c8 which exposed queryid in parallel workers. Counters are aggregated by the main backend process so parallel workers would report duplicated activity, and could also report activity for the wrong entry as they are only aware of the top level queryid. Fix thinko in pg_stat_get_activity when retrieving the queryid. Remove unnecessary call to pgstat_report_queryid(). Reported-by: Amit Kapila, Andres Freund, Thomas Munro Discussion: https://postgr.es/m/20210408051735.lfbdzun5zdlax5gd@alap3.anarazel.de p634GTSOqnDW86Owrn6qDAVosC5dJjXjp7BMfc5Gz1Q@mail.gmail.com Author: Julien Rouhaud --- contrib/pg_stat_statements/pg_stat_statements.c | 4 +++- src/backend/executor/execParallel.c | 1 - src/backend/utils/adt/pgstatfuncs.c | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index 24b453adcb410..f42f07622e942 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -47,6 +47,7 @@ #include #include +#include "access/parallel.h" #include "catalog/pg_authid.h" #include "common/hashfn.h" #include "executor/instrument.h" @@ -278,8 +279,9 @@ static bool pgss_save; /* whether to save stats across shutdown */ #define pgss_enabled(level) \ + (!IsParallelWorker() && \ (pgss_track == PGSS_TRACK_ALL || \ - (pgss_track == PGSS_TRACK_TOP && (level) == 0)) + (pgss_track == PGSS_TRACK_TOP && (level) == 0))) #define record_gc_qtexts() \ do { \ diff --git a/src/backend/executor/execParallel.c b/src/backend/executor/execParallel.c index d104a19767cfe..4fca8782b2fad 100644 --- a/src/backend/executor/execParallel.c +++ b/src/backend/executor/execParallel.c @@ -1426,7 +1426,6 @@ ParallelQueryMain(dsm_segment *seg, shm_toc *toc) /* Report workers' query and queryId for monitoring purposes */ pgstat_report_activity(STATE_RUNNING, debug_query_string); - pgstat_report_queryid(queryDesc->plannedstmt->queryId, false); /* Attach to the dynamic shared memory area. */ area_space = shm_toc_lookup(toc, PARALLEL_KEY_DSA, false); diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 9fa4a93162f8d..182b15e3f23a8 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -917,7 +917,7 @@ pg_stat_get_activity(PG_FUNCTION_ARGS) if (beentry->st_queryid == 0) nulls[29] = true; else - values[29] = DatumGetUInt64(beentry->st_queryid); + values[29] = UInt64GetDatum(beentry->st_queryid); } else { From 01add89454d5dc289ed3126d5de03169bdeff41b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 8 Apr 2021 15:14:26 -0400 Subject: [PATCH 056/671] Suppress uninitialized-variable warning. Several buildfarm critters that don't usually produce such warnings are complaining about e717a9a18. I think it's actually safe, but move initialization to silence the warning. --- src/backend/catalog/pg_proc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index 05de377ba9cf6..cd13e63852a94 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -916,6 +916,7 @@ fmgr_sql_validator(PG_FUNCTION_ARGS) * least catch silly syntactic errors. */ raw_parsetree_list = pg_parse_query(prosrc); + querytree_list = NIL; if (!haspolyarg) { @@ -928,7 +929,6 @@ fmgr_sql_validator(PG_FUNCTION_ARGS) /* But first, set up parameter information */ pinfo = prepare_sql_fn_parse_info(tuple, NULL, InvalidOid); - querytree_list = NIL; foreach(lc, raw_parsetree_list) { RawStmt *parsetree = lfirst_node(RawStmt, lc); From d1fcbde579d440c35023baa0de7ebf27f644a314 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 8 Apr 2021 15:38:26 -0400 Subject: [PATCH 057/671] Add support for tab-completion of type arguments in \df, \do. Oversight in commit a3027e1e7. --- src/bin/psql/tab-complete.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index d79d7b8145b7e..26ac786c512dc 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -3988,6 +3988,8 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH_QUERY(Query_for_list_of_fdws); else if (TailMatchesCS("\\df*")) COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions, NULL); + else if (HeadMatchesCS("\\df*")) + COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes, NULL); else if (TailMatchesCS("\\dFd*")) COMPLETE_WITH_QUERY(Query_for_list_of_ts_dictionaries); @@ -4005,6 +4007,9 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH_QUERY(Query_for_list_of_languages); else if (TailMatchesCS("\\dn*")) COMPLETE_WITH_QUERY(Query_for_list_of_schemas); + /* no support for completing operators, but we can complete types: */ + else if (HeadMatchesCS("\\do*", MatchAny)) + COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes, NULL); else if (TailMatchesCS("\\dp") || TailMatchesCS("\\z")) COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables, NULL); else if (TailMatchesCS("\\dPi*")) From 796092fb84c08162ae803e83a13aa8bd6d9b23d0 Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Thu, 8 Apr 2021 12:54:31 -0700 Subject: [PATCH 058/671] Silence another _bt_check_unique compiler warning. Per complaint from Tom Lane Discussion: https://postgr.es/m/1922884.1617909599@sss.pgh.pa.us --- src/backend/access/nbtree/nbtinsert.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index 0bc86943ebc55..6ac205c98ee8e 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -408,7 +408,7 @@ _bt_check_unique(Relation rel, BTInsertState insertstate, Relation heapRel, { IndexTuple itup = insertstate->itup; IndexTuple curitup = NULL; - ItemId curitemid; + ItemId curitemid = NULL; BTScanInsert itup_key = insertstate->itup_key; SnapshotData SnapshotDirty; OffsetNumber offset; From 609b0652af00374b89411ea2613fd5bb92bca92c Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 9 Apr 2021 13:53:07 +0900 Subject: [PATCH 059/671] Fix typos and grammar in documentation and code comments Comment fixes are applied on HEAD, and documentation improvements are applied on back-branches where needed. Author: Justin Pryzby Discussion: https://postgr.es/m/20210408164008.GJ6592@telsasoft.com Backpatch-through: 9.6 --- doc/src/sgml/config.sgml | 10 +++++----- doc/src/sgml/func.sgml | 16 ++++++++-------- doc/src/sgml/logical-replication.sgml | 11 +++++------ doc/src/sgml/maintenance.sgml | 2 +- doc/src/sgml/monitoring.sgml | 2 +- doc/src/sgml/perform.sgml | 4 ++-- doc/src/sgml/pgstatstatements.sgml | 2 +- doc/src/sgml/postgres-fdw.sgml | 9 +++++---- doc/src/sgml/ref/create_table.sgml | 4 ++-- doc/src/sgml/ref/createuser.sgml | 2 +- doc/src/sgml/ref/declare.sgml | 2 +- doc/src/sgml/ref/pg_amcheck.sgml | 2 +- doc/src/sgml/ref/psql-ref.sgml | 7 ++++--- doc/src/sgml/wal.sgml | 2 +- src/backend/catalog/heap.c | 1 + src/backend/commands/analyze.c | 2 +- src/backend/commands/cluster.c | 2 +- src/backend/commands/copyfrom.c | 2 +- src/backend/statistics/extended_stats.c | 2 +- src/backend/utils/adt/jsonfuncs.c | 4 ++-- src/bin/pg_amcheck/t/004_verify_heapam.pl | 2 +- src/include/lib/sort_template.h | 2 +- src/include/utils/guc.h | 13 ++++++------- 23 files changed, 53 insertions(+), 52 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 26628f3e6d3b0..3a062a145ca08 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -2723,7 +2723,7 @@ include_dir 'conf.d' Note that changing wal_level to minimal makes any base backups taken before unavailable for archive recovery and standby server, which may - lead to database loss. + lead to data loss. In logical level, the same information is logged as @@ -3098,7 +3098,7 @@ include_dir 'conf.d' When this parameter is on, the PostgreSQL - server compresses a full page image written to WAL when + server compresses full page images written to WAL when is on or during a base backup. A compressed page image will be decompressed during WAL replay. The default value is off. @@ -4137,7 +4137,7 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows On the subscriber side, specifies how many replication origins (see ) can be tracked simultaneously, effectively limiting how many logical replication subscriptions can - be created on the server. Setting it a lower value than the current + be created on the server. Setting it to a lower value than the current number of tracked replication origins (reflected in pg_replication_origin_status, not pg_replication_origin) @@ -7732,12 +7732,12 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; The extension also requires a query identifier to be computed. Note that an external module can alternatively be used if the in-core query identifier computation - specification isn't acceptable. In this case, in-core computation + method is not acceptable. In this case, in-core computation must be disabled. The default is off. - To ensure that a only one query identifier is calculated and + To ensure that only one query identifier is calculated and displayed, extensions that calculate query identifiers should throw an error if a query identifier has already been computed. diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 0606b6a9aa41e..67d802b02c24c 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -3560,7 +3560,7 @@ repeat('Pg', 4) PgPgPgPg text - Evaluate escaped Unicode characters in argument. Unicode characters + Evaluate escaped Unicode characters in the argument. Unicode characters can be specified as \XXXX (4 hexadecimal digits), \+XXXXXX (6 @@ -24926,12 +24926,12 @@ SELECT collation for ('foo' COLLATE "de_DE"); boolean - Requests to log the memory contexts whose backend process has - the specified process ID. These memory contexts will be logged at + Requests to log the memory contexts of the backend with the + specified process ID. These memory contexts will be logged at LOG message level. They will appear in the server log based on the log configuration set (See for more information), - but will not be sent to the client whatever the setting of + but will not be sent to the client regardless of . Only superusers can request to log the memory contexts. @@ -25037,7 +25037,7 @@ SELECT collation for ('foo' COLLATE "de_DE"); pg_log_backend_memory_contexts can be used - to log the memory contexts of the backend process. For example, + to log the memory contexts of a backend process. For example: postgres=# SELECT pg_log_backend_memory_contexts(pg_backend_pid()); pg_log_backend_memory_contexts @@ -25061,8 +25061,8 @@ LOG: level: 1; TransactionAbortContext: 32768 total in 1 blocks; 32504 free (0 LOG: level: 1; ErrorContext: 8192 total in 1 blocks; 7928 free (3 chunks); 264 used LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 used - For more than 100 child contexts under the same parent one, - 100 child contexts and a summary of the remaining ones will be logged. + If there are more than 100 child contexts under the same parent, the first + 100 child contexts are logged, along with a summary of the remaining contexts. Note that frequent calls to this function could incur significant overhead, because it may generate a large number of log messages. @@ -25576,7 +25576,7 @@ postgres=# SELECT * FROM pg_walfile_name_offset(pg_stop_backup()); Returns recovery pause state. The return values are not paused if pause is not requested, pause requested if pause is requested but recovery is - not yet paused and, paused if the recovery is + not yet paused, and paused if the recovery is actually paused. diff --git a/doc/src/sgml/logical-replication.sgml b/doc/src/sgml/logical-replication.sgml index e95d446dacb08..737895265182b 100644 --- a/doc/src/sgml/logical-replication.sgml +++ b/doc/src/sgml/logical-replication.sgml @@ -490,9 +490,9 @@ any changes that happened during the initial data copy using standard logical replication. During this synchronization phase, the changes are applied and committed in the same order as they happened on the - publisher. Once the synchronization is done, the control of the + publisher. Once synchronization is done, control of the replication of the table is given back to the main apply process where - the replication continues as normal. + replication continues as normal. @@ -602,10 +602,9 @@ - The subscriber also requires the max_replication_slots - be set to configure how many replication origins can be tracked. In this - case it should be set to at least the number of subscriptions that will be - added to the subscriber, plus some reserve for table synchronization. + max_replication_slots must also be set on the subscriber. + It should be set to at least the number of subscriptions that will be added + to the subscriber, plus some reserve for table synchronization. max_logical_replication_workers must be set to at least the number of subscriptions, again plus some reserve for the table synchronization. Additionally the max_worker_processes diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml index 3bbae6dd917aa..4adb34a21b145 100644 --- a/doc/src/sgml/maintenance.sgml +++ b/doc/src/sgml/maintenance.sgml @@ -185,7 +185,7 @@ never issue VACUUM FULL. In this approach, the idea is not to keep tables at their minimum size, but to maintain steady-state usage of disk space: each table occupies space equivalent to its - minimum size plus however much space gets used up between vacuumings. + minimum size plus however much space gets used up between vacuum runs. Although VACUUM FULL can be used to shrink a table back to its minimum size and return the disk space to the operating system, there is not much point in this if the table will just grow again in the diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index f637fe041529f..8287587f614df 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -5890,7 +5890,7 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid, When creating an index on a partitioned table, this column is set to - the number of partitions on which the index has been completed. + the number of partitions on which the index has been created. This field is 0 during a REINDEX. diff --git a/doc/src/sgml/perform.sgml b/doc/src/sgml/perform.sgml index e0d3f246e9a83..89ff58338e5db 100644 --- a/doc/src/sgml/perform.sgml +++ b/doc/src/sgml/perform.sgml @@ -1747,7 +1747,7 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse; to zero. But note that changing these settings requires a server restart, and makes any base backups taken before unavailable for archive - recovery and standby server, which may lead to database loss. + recovery and standby server, which may lead to data loss. @@ -1899,7 +1899,7 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse; much faster. The following are configuration changes you can make to improve performance in such cases. Except as noted below, durability is still guaranteed in case of a crash of the database software; - only abrupt operating system stoppage creates a risk of data loss + only an abrupt operating system crash creates a risk of data loss or corruption when these settings are used. diff --git a/doc/src/sgml/pgstatstatements.sgml b/doc/src/sgml/pgstatstatements.sgml index 5ad4f0aed2abd..e235504e9a9b5 100644 --- a/doc/src/sgml/pgstatstatements.sgml +++ b/doc/src/sgml/pgstatstatements.sgml @@ -406,7 +406,7 @@ The following details about constant replacement and - queryid only applies when queryid only apply when is enabled. If you use an external module instead to compute queryid, you should refer to its documentation for details. diff --git a/doc/src/sgml/postgres-fdw.sgml b/doc/src/sgml/postgres-fdw.sgml index fd34956936986..5320accf6f4b5 100644 --- a/doc/src/sgml/postgres-fdw.sgml +++ b/doc/src/sgml/postgres-fdw.sgml @@ -551,8 +551,9 @@ OPTIONS (ADD password_required 'false'); Connection Management Options - By default all the open connections that postgres_fdw - established to the foreign servers are kept in local session for re-use. + By default, all connections that postgres_fdw + establishes to foreign servers are kept open in the local session + for re-use. @@ -562,11 +563,11 @@ OPTIONS (ADD password_required 'false'); This option controls whether postgres_fdw keeps - the connections to the foreign server open so that the subsequent + the connections to the foreign server open so that subsequent queries can re-use them. It can only be specified for a foreign server. The default is on. If set to off, all connections to this foreign server will be discarded at the end of - transaction. + each transaction. diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index 44e50620fd1ea..d7fffddbce366 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -1520,7 +1520,7 @@ WITH ( MODULUS numeric_literal, REM - + autovacuum_vacuum_scale_factor, toast.autovacuum_vacuum_scale_factor (floating point) autovacuum_vacuum_scale_factor @@ -1610,7 +1610,7 @@ WITH ( MODULUS numeric_literal, REM - + autovacuum_vacuum_cost_limit, toast.autovacuum_vacuum_cost_limit (integer) autovacuum_vacuum_cost_limit diff --git a/doc/src/sgml/ref/createuser.sgml b/doc/src/sgml/ref/createuser.sgml index 4d60dc2cda123..17579e50afbbb 100644 --- a/doc/src/sgml/ref/createuser.sgml +++ b/doc/src/sgml/ref/createuser.sgml @@ -44,7 +44,7 @@ PostgreSQL documentation If you wish to create a new superuser, you must connect as a superuser, not merely with CREATEROLE privilege. Being a superuser implies the ability to bypass all access permission - checks within the database, so superuserdom should not be granted lightly. + checks within the database, so superuser access should not be granted lightly. diff --git a/doc/src/sgml/ref/declare.sgml b/doc/src/sgml/ref/declare.sgml index 8a2b8cc8929c5..aa3d1d1fa1624 100644 --- a/doc/src/sgml/ref/declare.sgml +++ b/doc/src/sgml/ref/declare.sgml @@ -335,7 +335,7 @@ DECLARE liahona CURSOR FOR SELECT * FROM films; According to the SQL standard, changes made to insensitive cursors by UPDATE ... WHERE CURRENT OF and DELETE - ... WHERE CURRENT OF statements are visibible in that same + ... WHERE CURRENT OF statements are visible in that same cursor. PostgreSQL treats these statements like all other data changing statements in that they are not visible in insensitive cursors. diff --git a/doc/src/sgml/ref/pg_amcheck.sgml b/doc/src/sgml/ref/pg_amcheck.sgml index fcc96b430a630..d01e26faa81be 100644 --- a/doc/src/sgml/ref/pg_amcheck.sgml +++ b/doc/src/sgml/ref/pg_amcheck.sgml @@ -460,7 +460,7 @@ PostgreSQL documentation - If "all-frozen" is given, table corruption checks + If all-frozen is given, table corruption checks will skip over pages in all tables that are marked as all frozen. diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index ddb7043362517..a3cfd3b5575be 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1927,9 +1927,10 @@ testdb=> - The column of the kind of extended stats (e.g. Ndistinct) shows its status. - NULL means that it doesn't exists. "defined" means that it was requested - when creating the statistics. + The status of each kind of extended statistics is shown in a column + named after its statistic kind (e.g. Ndistinct). + "defined" means that it was requested when creating the statistics, + and NULL means it wasn't requested. You can use pg_stats_ext if you'd like to know whether ANALYZE was run and statistics are available to the planner. diff --git a/doc/src/sgml/wal.sgml b/doc/src/sgml/wal.sgml index 0f13c43095e6a..24cf567ee2e5b 100644 --- a/doc/src/sgml/wal.sgml +++ b/doc/src/sgml/wal.sgml @@ -797,7 +797,7 @@ fsync, or fsync_writethrough, the write operation moves WAL buffers to kernel cache and issue_xlog_fsync syncs them to disk. Regardless - of the setting of track_wal_io_timing, the numbers + of the setting of track_wal_io_timing, the number of times XLogWrite writes and issue_xlog_fsync syncs WAL data to disk are also counted as wal_write and wal_sync diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 9f6303266f901..ba03e8aa8f326 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -1119,6 +1119,7 @@ AddNewRelationType(const char *typeName, * reltypeid: OID to assign to rel's rowtype, or InvalidOid to select one * reloftypeid: if a typed table, OID of underlying type; else InvalidOid * ownerid: OID of new rel's owner + * accessmtd: OID of new rel's access method * tupdesc: tuple descriptor (source of column definitions) * cooked_constraints: list of precooked check constraints and defaults * relkind: relkind for new rel diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 5bdaceefd5d57..182a133033248 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -617,7 +617,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params, * * We assume that VACUUM hasn't set pg_class.reltuples already, even * during a VACUUM ANALYZE. Although VACUUM often updates pg_class, - * exceptions exists. A "VACUUM (ANALYZE, INDEX_CLEANUP OFF)" command + * exceptions exist. A "VACUUM (ANALYZE, INDEX_CLEANUP OFF)" command * will never update pg_class entries for index relations. It's also * possible that an individual index's pg_class entry won't be updated * during VACUUM if the index AM returns NULL from its amvacuumcleanup() diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index 096a06f7b3b8d..6487a9e3fcb9c 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -1422,7 +1422,7 @@ finish_heap_swap(Oid OIDOldHeap, Oid OIDNewHeap, PROGRESS_CLUSTER_PHASE_FINAL_CLEANUP); /* - * If the relation being rebuild is pg_class, swap_relation_files() + * If the relation being rebuilt is pg_class, swap_relation_files() * couldn't update pg_class's own pg_class entry (check comments in * swap_relation_files()), thus relfrozenxid was not updated. That's * annoying because a potential reason for doing a VACUUM FULL is a diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c index 20e7d57d41f6f..40a54ad0bd735 100644 --- a/src/backend/commands/copyfrom.c +++ b/src/backend/commands/copyfrom.c @@ -410,7 +410,7 @@ CopyMultiInsertBufferCleanup(CopyMultiInsertInfo *miinfo, * Once flushed we also trim the tracked buffers list down to size by removing * the buffers created earliest first. * - * Callers should pass 'curr_rri' is the ResultRelInfo that's currently being + * Callers should pass 'curr_rri' as the ResultRelInfo that's currently being * used. When cleaning up old buffers we'll never remove the one for * 'curr_rri'. */ diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index 463d44a68a40f..4674168ff806e 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -254,7 +254,7 @@ BuildRelationExtStatistics(Relation onerel, double totalrows, * that would require additional columns. * * See statext_compute_stattarget for details about how we compute statistics - * target for a statistics objects (from the object target, attribute targets + * target for a statistics object (from the object target, attribute targets * and default statistics target). */ int diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c index 9961d27df475f..09fcff67299b0 100644 --- a/src/backend/utils/adt/jsonfuncs.c +++ b/src/backend/utils/adt/jsonfuncs.c @@ -1651,7 +1651,7 @@ push_null_elements(JsonbParseState **ps, int num) * this path. E.g. the path [a][0][b] with the new value 1 will produce the * structure {a: [{b: 1}]}. * - * Called is responsible to make sure such path does not exist yet. + * Caller is responsible to make sure such path does not exist yet. */ static void push_path(JsonbParseState **st, int level, Datum *path_elems, @@ -4887,7 +4887,7 @@ IteratorConcat(JsonbIterator **it1, JsonbIterator **it2, * than just one last element, this flag will instruct to create the whole * chain of corresponding objects and insert the value. * - * JB_PATH_CONSISTENT_POSITION for an array indicates that the called wants to + * JB_PATH_CONSISTENT_POSITION for an array indicates that the caller wants to * keep values with fixed indices. Indices for existing elements could be * changed (shifted forward) in case if the array is prepended with a new value * and a negative index out of the range, so this behavior will be prevented diff --git a/src/bin/pg_amcheck/t/004_verify_heapam.pl b/src/bin/pg_amcheck/t/004_verify_heapam.pl index 36607596b1bbc..2171d236a7a0f 100644 --- a/src/bin/pg_amcheck/t/004_verify_heapam.pl +++ b/src/bin/pg_amcheck/t/004_verify_heapam.pl @@ -175,7 +175,7 @@ sub write_tuple seek($fh, $offset, 0) or BAIL_OUT("seek failed: $!"); defined(syswrite($fh, $buffer, HEAPTUPLE_PACK_LENGTH)) - or BAIL_OUT("syswrite failed: $!");; + or BAIL_OUT("syswrite failed: $!"); return; } diff --git a/src/include/lib/sort_template.h b/src/include/lib/sort_template.h index 771c789ced052..24d6d0006cfd7 100644 --- a/src/include/lib/sort_template.h +++ b/src/include/lib/sort_template.h @@ -241,7 +241,7 @@ ST_SCOPE void ST_SORT(ST_ELEMENT_TYPE *first, size_t n /* * Find the median of three values. Currently, performance seems to be best - * if the the comparator is inlined here, but the med3 function is not inlined + * if the comparator is inlined here, but the med3 function is not inlined * in the qsort function. */ static pg_noinline ST_ELEMENT_TYPE * diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 1892c7927b44f..7894940741ea6 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -90,13 +90,12 @@ typedef enum * dividing line between "interactive" and "non-interactive" sources for * error reporting purposes. * - * PGC_S_TEST is used when testing values to be used later ("doit" will always - * be false, so this never gets stored as the actual source of any value). - * For example, ALTER DATABASE/ROLE tests proposed per-database or per-user - * defaults this way, and CREATE FUNCTION tests proposed function SET clauses - * this way. This is an interactive case, but it needs its own source value - * because some assign hooks need to make different validity checks in this - * case. In particular, references to nonexistent database objects generally + * PGC_S_TEST is used when testing values to be used later. For example, + * ALTER DATABASE/ROLE tests proposed per-database or per-user defaults this + * way, and CREATE FUNCTION tests proposed function SET clauses this way. + * This is an interactive case, but it needs its own source value because + * some assign hooks need to make different validity checks in this case. + * In particular, references to nonexistent database objects generally * shouldn't throw hard errors in this case, at most NOTICEs, since the * objects might exist by the time the setting is used for real. * From 1798d8f8b6fbb8ff922f640ff2d5dbd3e47064a2 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Fri, 9 Apr 2021 12:40:14 +0200 Subject: [PATCH 060/671] Fix typo Author: Daniel Westermann Backpatch-through: 9.6 Discussion: https://postgr.es/m/GV0P278MB0483A7AA85BAFCC06D90F453D2739@GV0P278MB0483.CHEP278.PROD.OUTLOOK.COM --- src/backend/utils/misc/guc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 090abdad8bae6..46f1d6406f58a 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -1320,7 +1320,7 @@ static struct config_bool ConfigureNamesBool[] = { {"wal_log_hints", PGC_POSTMASTER, WAL_SETTINGS, - gettext_noop("Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications."), + gettext_noop("Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification."), NULL }, &wal_log_hints, From 0e69f705cc1a3df273b38c9883fb5765991e04fe Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 9 Apr 2021 11:29:08 -0400 Subject: [PATCH 061/671] Set pg_class.reltuples for partitioned tables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When commit 0827e8af70f4 added auto-analyze support for partitioned tables, it included code to obtain reltuples for the partitioned table as a number of catalog accesses to read pg_class.reltuples for each partition. That's not only very inefficient, but also problematic because autovacuum doesn't hold any locks on any of those tables -- and doesn't want to. Replace that code with a read of pg_class.reltuples for the partitioned table, and make sure ANALYZE and TRUNCATE properly maintain that value. I found no code that would be affected by the change of relpages from zero to non-zero for partitioned tables, and no other code that should be maintaining it, but if there is, hopefully it'll be an easy fix. Per buildfarm. Author: Álvaro Herrera Reviewed-by: Zhihong Yu Discussion: https://postgr.es/m/1823909.1617862590@sss.pgh.pa.us --- src/backend/commands/analyze.c | 12 ++++++++ src/backend/commands/tablecmds.c | 47 ++++++++++++++++++++++++++++- src/backend/postmaster/autovacuum.c | 39 +----------------------- 3 files changed, 59 insertions(+), 39 deletions(-) diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 182a133033248..cffcd543029de 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -656,6 +656,18 @@ do_analyze_rel(Relation onerel, VacuumParams *params, in_outer_xact); } } + else if (onerel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) + { + /* + * Partitioned tables don't have storage, so we don't set any fields in + * their pg_class entries except for relpages, which is necessary for + * auto-analyze to work properly. + */ + vac_update_relstats(onerel, -1, totalrows, + 0, false, InvalidTransactionId, + InvalidMultiXactId, + in_outer_xact); + } /* * Now report ANALYZE to the stats collector. For regular tables, we do diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 1f19629a9494b..f780918a95164 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -337,6 +337,7 @@ typedef struct ForeignTruncateInfo static void truncate_check_rel(Oid relid, Form_pg_class reltuple); static void truncate_check_perms(Oid relid, Form_pg_class reltuple); static void truncate_check_activity(Relation rel); +static void truncate_update_partedrel_stats(List *parted_rels); static void RangeVarCallbackForTruncate(const RangeVar *relation, Oid relId, Oid oldRelId, void *arg); static List *MergeAttributes(List *schema, List *supers, char relpersistence, @@ -1755,6 +1756,7 @@ ExecuteTruncateGuts(List *explicit_rels, { List *rels; List *seq_relids = NIL; + List *parted_rels = NIL; HTAB *ft_htab = NULL; EState *estate; ResultRelInfo *resultRelInfos; @@ -1908,9 +1910,15 @@ ExecuteTruncateGuts(List *explicit_rels, Relation rel = (Relation) lfirst(lc1); int extra = lfirst_int(lc2); - /* Skip partitioned tables as there is nothing to do */ + /* + * Save OID of partitioned tables for later; nothing else to do for + * them here. + */ if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) + { + parted_rels = lappend_oid(parted_rels, RelationGetRelid(rel)); continue; + } /* * Build the lists of foreign tables belonging to each foreign server @@ -2061,6 +2069,9 @@ ExecuteTruncateGuts(List *explicit_rels, ResetSequence(seq_relid); } + /* Reset partitioned tables' pg_class.reltuples */ + truncate_update_partedrel_stats(parted_rels); + /* * Write a WAL record to allow this set of actions to be logically * decoded. @@ -2207,6 +2218,40 @@ truncate_check_activity(Relation rel) CheckTableNotInUse(rel, "TRUNCATE"); } +/* + * Update pg_class.reltuples for all the given partitioned tables to 0. + */ +static void +truncate_update_partedrel_stats(List *parted_rels) +{ + Relation pg_class; + ListCell *lc; + + pg_class = table_open(RelationRelationId, RowExclusiveLock); + + foreach(lc, parted_rels) + { + Oid relid = lfirst_oid(lc); + HeapTuple tuple; + Form_pg_class rd_rel; + + tuple = SearchSysCacheCopy1(RELOID, ObjectIdGetDatum(relid)); + if (!HeapTupleIsValid(tuple)) + elog(ERROR, "could not find tuple for relation %u", relid); + rd_rel = (Form_pg_class) GETSTRUCT(tuple); + if (rd_rel->reltuples != (float4) 0) + { + rd_rel->reltuples = (float4) 0; + + heap_inplace_update(pg_class, tuple); + } + + heap_freetuple(tuple); + } + + table_close(pg_class, RowExclusiveLock); +} + /* * storage_name * returns the name corresponding to a typstorage/attstorage enum value diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index aef9ac4dd22ee..a799544738e5b 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -3209,44 +3209,7 @@ relation_needs_vacanalyze(Oid relid, */ if (PointerIsValid(tabentry) && AutoVacuumingActive()) { - if (classForm->relkind != RELKIND_PARTITIONED_TABLE) - { - reltuples = classForm->reltuples; - } - else - { - /* - * If the relation is a partitioned table, we must add up - * children's reltuples. - */ - List *children; - ListCell *lc; - - reltuples = 0; - - /* Find all members of inheritance set taking AccessShareLock */ - children = find_all_inheritors(relid, AccessShareLock, NULL); - - foreach(lc, children) - { - Oid childOID = lfirst_oid(lc); - HeapTuple childtuple; - Form_pg_class childclass; - - childtuple = SearchSysCache1(RELOID, ObjectIdGetDatum(childOID)); - childclass = (Form_pg_class) GETSTRUCT(childtuple); - - /* Skip a partitioned table and foreign partitions */ - if (RELKIND_HAS_STORAGE(childclass->relkind)) - { - /* Sum up the child's reltuples for its parent table */ - reltuples += childclass->reltuples; - } - ReleaseSysCache(childtuple); - } - - list_free(children); - } + reltuples = classForm->reltuples; vactuples = tabentry->n_dead_tuples; instuples = tabentry->inserts_since_vacuum; anltuples = tabentry->changes_since_analyze; From 41badeaba8beee7648ebe7923a41c04f1f3cb302 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 9 Apr 2021 13:38:07 -0400 Subject: [PATCH 062/671] Document ANALYZE storage parameters for partitioned tables Commit 0827e8af70f4 added parameters for autovacuum to support partitioned tables, but didn't add any docs. Add them. Discussion: https://postgr.es/m/20210408213051.GL6592@telsasoft.com --- doc/src/sgml/ref/create_table.sgml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index d7fffddbce366..b6cf9adcb256c 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -1369,8 +1369,8 @@ WITH ( MODULUS numeric_literal, REM If a table parameter value is set and the equivalent toast. parameter is not, the TOAST table will use the table's parameter value. - Specifying these parameters for partitioned tables is not supported, - but you may specify them for individual leaf partitions. + Except where noted, these parameters are not supported on partitioned + tables; however, you can specify them on individual leaf partitions. @@ -1452,6 +1452,8 @@ WITH ( MODULUS numeric_literal, REM If true, the autovacuum daemon will perform automatic VACUUM and/or ANALYZE operations on this table following the rules discussed in . + This parameter can be set for partitioned tables to prevent autovacuum + from running ANALYZE on them. If false, this table will not be autovacuumed, except to prevent transaction ID wraparound. See for more about wraparound prevention. @@ -1576,6 +1578,7 @@ WITH ( MODULUS numeric_literal, REM Per-table value for parameter. + This parameter can be set for partitioned tables. @@ -1591,6 +1594,7 @@ WITH ( MODULUS numeric_literal, REM Per-table value for parameter. + This parameter can be set for partitioned tables. From 49fb4e6b249029e75ccc6b490d76f15cd53d553b Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 9 Apr 2021 21:55:08 +0200 Subject: [PATCH 063/671] doc: Additional documentation for date_bin Reported-by: Justin Pryzby Author: John Naylor Discussion: https://www.postgresql.org/message-id/CAFBsxsEEm1nuhZmfVQxvu_i3nDDEuvNJ_WMrDo9whFD_jusp-A@mail.gmail.com --- doc/src/sgml/func.sgml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 67d802b02c24c..d201163407527 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -9941,6 +9941,20 @@ SELECT date_trunc('hour', INTERVAL '3 days 02:47:33'); aligned with a specified origin. + + +date_trunc(stride, source, origin) + + source is a value expression of type + timestamp or timestamp with time zone. (Values + of type date are cast automatically to + timestamp.) stride is a value + expression of type interval. The return value is likewise + of type timestamp or timestamp with time zone, + and it marks the beginning of the bin into which the + source is placed. + + Examples: @@ -9958,6 +9972,10 @@ SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-0 that date_bin can truncate to an arbitrary interval. + + Negative intervals are allowed and are treated the same as positive intervals. + + The stride interval cannot contain units of month or larger. From dc88460c24ed71ba7464ef4749e5f25da1bf6652 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Sat, 10 Apr 2021 08:09:30 +1200 Subject: [PATCH 064/671] Doc: Review for "Optionally prefetch referenced data in recovery." Typos, corrections and language improvements in the docs, and a few in code comments too. Reported-by: Justin Pryzby Discussion: https://postgr.es/m/20210409033703.GP6592%40telsasoft.com --- doc/src/sgml/config.sgml | 2 +- doc/src/sgml/wal.sgml | 4 +--- src/backend/access/transam/xlogprefetch.c | 12 +++++++----- src/backend/utils/misc/guc.c | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 3a062a145ca08..cc18b0bbf0aa8 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -3621,7 +3621,7 @@ include_dir 'conf.d' pool after that. However, on file systems with a block size larger than PostgreSQL's, prefetching can avoid a - costly read-before-write when a blocks are later written. + costly read-before-write when blocks are later written. The default is off. diff --git a/doc/src/sgml/wal.sgml b/doc/src/sgml/wal.sgml index 24cf567ee2e5b..36e00c92c267b 100644 --- a/doc/src/sgml/wal.sgml +++ b/doc/src/sgml/wal.sgml @@ -816,9 +816,7 @@ prefetching mechanism is most likely to be effective on systems with full_page_writes set to off (where that is safe), and where the working - set is larger than RAM. By default, prefetching in recovery is enabled - on operating systems that have posix_fadvise - support. + set is larger than RAM. By default, prefetching in recovery is disabled. diff --git a/src/backend/access/transam/xlogprefetch.c b/src/backend/access/transam/xlogprefetch.c index 28764326bcc59..2178c9086e619 100644 --- a/src/backend/access/transam/xlogprefetch.c +++ b/src/backend/access/transam/xlogprefetch.c @@ -31,12 +31,14 @@ * stall; this is counted with "skip_fpw". * * The only way we currently have to know that an I/O initiated with - * PrefetchSharedBuffer() has that recovery will eventually call ReadBuffer(), - * and perform a synchronous read. Therefore, we track the number of + * PrefetchSharedBuffer() has completed is to wait for the corresponding call + * to XLogReadBufferInRedo() to return. Therefore, we track the number of * potentially in-flight I/Os by using a circular buffer of LSNs. When it's - * full, we have to wait for recovery to replay records so that the queue - * depth can be reduced, before we can do any more prefetching. Ideally, this - * keeps us the right distance ahead to respect maintenance_io_concurrency. + * full, we have to wait for recovery to replay enough records to remove some + * LSNs, and only then can we initiate more prefetching. Ideally, this keeps + * us just the right distance ahead to respect maintenance_io_concurrency, + * though in practice it errs on the side of being too conservative because + * many I/Os complete sooner than we know. * *------------------------------------------------------------------------- */ diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 46f1d6406f58a..6dd889a7c0e85 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -2774,7 +2774,7 @@ static struct config_int ConfigureNamesInt[] = { {"wal_decode_buffer_size", PGC_POSTMASTER, WAL_ARCHIVE_RECOVERY, gettext_noop("Maximum buffer size for reading ahead in the WAL during recovery."), - gettext_noop("This controls the maximum distance we can read ahead n the WAL to prefetch referenced blocks."), + gettext_noop("This controls the maximum distance we can read ahead in the WAL to prefetch referenced blocks."), GUC_UNIT_BYTE }, &wal_decode_buffer_size, From 846d35b2dc1bd4d09f5e3e5e5a2cc8efafeb600e Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Sat, 10 Apr 2021 08:41:07 +1200 Subject: [PATCH 065/671] Make new GUC short descriptions more consistent. Reported-by: Daniel Westermann (DWE) Discussion: https://postgr.es/m/GV0P278MB0483490FEAC879DCA5ED583DD2739%40GV0P278MB0483.CHEP278.PROD.OUTLOOK.COM --- src/backend/utils/misc/guc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 6dd889a7c0e85..ca378bd6afb21 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -1298,7 +1298,7 @@ static struct config_bool ConfigureNamesBool[] = }, { {"recovery_prefetch", PGC_SIGHUP, WAL_SETTINGS, - gettext_noop("Prefetch referenced blocks during recovery"), + gettext_noop("Prefetch referenced blocks during recovery."), gettext_noop("Read ahead of the current replay position to find uncached blocks.") }, &recovery_prefetch, @@ -1307,7 +1307,7 @@ static struct config_bool ConfigureNamesBool[] = }, { {"recovery_prefetch_fpw", PGC_SIGHUP, WAL_SETTINGS, - gettext_noop("Prefetch blocks that have full page images in the WAL"), + gettext_noop("Prefetch blocks that have full page images in the WAL."), gettext_noop("On some systems, there is no benefit to prefetching pages that will be " "entirely overwritten, but if the logical page size of the filesystem is " "larger than PostgreSQL's, this can be beneficial. This option has no " From e7e341409a3d85aba4cf754ba9cf722a4d8e6676 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 9 Apr 2021 17:13:18 -0400 Subject: [PATCH 066/671] Suppress length of Notice/Error msgs in PQtrace regress mode A (relatively minor) annoyance of ErrorResponse/NoticeResponse messages as printed by PQtrace() is that their length might vary when we move error messages from one source file to another, one function to another, or even when their location line numbers change number of digits. To avoid having to adjust expected files for some tests, make the regress mode of PQtrace() suppress the length word of NoticeResponse and ErrorResponse messages. Discussion: https://postgr.es/m/20210402023010.GA13563@alvherre.pgsql Reviewed-by: Tom Lane --- src/interfaces/libpq/fe-trace.c | 11 ++++++++++- .../libpq_pipeline/traces/pipeline_abort.trace | 8 ++++---- .../modules/libpq_pipeline/traces/transaction.trace | 6 +++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c index 51b01fd40e5de..61a7e4896710e 100644 --- a/src/interfaces/libpq/fe-trace.c +++ b/src/interfaces/libpq/fe-trace.c @@ -549,7 +549,16 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer) length = (int) pg_ntoh32(length); logCursor += 4; - fprintf(conn->Pfdebug, "%s\t%d\t", prefix, length); + /* + * In regress mode, suppress the length of ErrorResponse and + * NoticeResponse. The F (file name), L (line number) and R (routine + * name) fields can change as server code is modified, and if their + * lengths differ from the originals, that would break tests. + */ + if (regress && !toServer && (id == 'E' || id == 'N')) + fprintf(conn->Pfdebug, "%s\tNN\t", prefix); + else + fprintf(conn->Pfdebug, "%s\t%d\t", prefix, length); switch (id) { diff --git a/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace b/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace index b0614357856ca..254e48599755e 100644 --- a/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace +++ b/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace @@ -1,5 +1,5 @@ F 42 Query "DROP TABLE IF EXISTS pq_pipeline_demo" -B 123 NoticeResponse S "NOTICE" V "NOTICE" C "00000" M "table "pq_pipeline_demo" does not exist, skipping" F "SSSS" L "SSSS" R "SSSS" \x00 +B NN NoticeResponse S "NOTICE" V "NOTICE" C "00000" M "table "pq_pipeline_demo" does not exist, skipping" F "SSSS" L "SSSS" R "SSSS" \x00 B 15 CommandComplete "DROP TABLE" B 5 ReadyForQuery I F 99 Query "CREATE UNLOGGED TABLE pq_pipeline_demo(id serial primary key, itemno integer,int8filler int8);" @@ -27,7 +27,7 @@ B 4 ParseComplete B 4 BindComplete B 4 NoData B 15 CommandComplete "INSERT 0 1" -B 217 ErrorResponse S "ERROR" V "ERROR" C "42883" M "function no_such_function(integer) does not exist" H "No function matches the given name and argument types. You might need to add explicit type casts." P "8" F "SSSS" L "SSSS" R "SSSS" \x00 +B NN ErrorResponse S "ERROR" V "ERROR" C "42883" M "function no_such_function(integer) does not exist" H "No function matches the given name and argument types. You might need to add explicit type casts." P "8" F "SSSS" L "SSSS" R "SSSS" \x00 B 5 ReadyForQuery I B 4 ParseComplete B 4 BindComplete @@ -39,7 +39,7 @@ F 12 Bind "" "" 0 0 0 F 6 Describe P "" F 9 Execute "" 0 F 4 Sync -B 123 ErrorResponse S "ERROR" V "ERROR" C "42601" M "cannot insert multiple commands into a prepared statement" F "SSSS" L "SSSS" R "SSSS" \x00 +B NN ErrorResponse S "ERROR" V "ERROR" C "42601" M "cannot insert multiple commands into a prepared statement" F "SSSS" L "SSSS" R "SSSS" \x00 B 5 ReadyForQuery I F 54 Parse "" "SELECT 1.0/g FROM generate_series(3, -1, -1) g" 0 F 12 Bind "" "" 0 0 0 @@ -52,7 +52,7 @@ B 33 RowDescription 1 "?column?" NNNN 0 NNNN 65535 -1 0 B 32 DataRow 1 22 '0.33333333333333333333' B 32 DataRow 1 22 '0.50000000000000000000' B 32 DataRow 1 22 '1.00000000000000000000' -B 70 ErrorResponse S "ERROR" V "ERROR" C "22012" M "division by zero" F "SSSS" L "SSSS" R "SSSS" \x00 +B NN ErrorResponse S "ERROR" V "ERROR" C "22012" M "division by zero" F "SSSS" L "SSSS" R "SSSS" \x00 B 5 ReadyForQuery I F 40 Query "SELECT itemno FROM pq_pipeline_demo" B 31 RowDescription 1 "itemno" NNNN 2 NNNN 4 -1 0 diff --git a/src/test/modules/libpq_pipeline/traces/transaction.trace b/src/test/modules/libpq_pipeline/traces/transaction.trace index 0267a534fa1f4..1dcc2373c0b5c 100644 --- a/src/test/modules/libpq_pipeline/traces/transaction.trace +++ b/src/test/modules/libpq_pipeline/traces/transaction.trace @@ -1,5 +1,5 @@ F 79 Query "DROP TABLE IF EXISTS pq_pipeline_tst;CREATE TABLE pq_pipeline_tst (id int)" -B 122 NoticeResponse S "NOTICE" V "NOTICE" C "00000" M "table "pq_pipeline_tst" does not exist, skipping" F "SSSS" L "SSSS" R "SSSS" \x00 +B NN NoticeResponse S "NOTICE" V "NOTICE" C "00000" M "table "pq_pipeline_tst" does not exist, skipping" F "SSSS" L "SSSS" R "SSSS" \x00 B 15 CommandComplete "DROP TABLE" B 17 CommandComplete "CREATE TABLE" B 5 ReadyForQuery I @@ -40,9 +40,9 @@ B 4 BindComplete B 4 NoData B 10 CommandComplete "BEGIN" B 4 ParseComplete -B 65 ErrorResponse S "ERROR" V "ERROR" C "22012" M "division by zero" F "SSSS" L "SSSS" R "SSSS" \x00 +B NN ErrorResponse S "ERROR" V "ERROR" C "22012" M "division by zero" F "SSSS" L "SSSS" R "SSSS" \x00 B 5 ReadyForQuery E -B 145 ErrorResponse S "ERROR" V "ERROR" C "25P02" M "current transaction is aborted, commands ignored until end of transaction block" F "SSSS" L "SSSS" R "SSSS" \x00 +B NN ErrorResponse S "ERROR" V "ERROR" C "25P02" M "current transaction is aborted, commands ignored until end of transaction block" F "SSSS" L "SSSS" R "SSSS" \x00 B 5 ReadyForQuery E B 4 BindComplete B 4 NoData From 9cae39b8e6a53decb37cce22852bb2e6d0e3f5d3 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 9 Apr 2021 23:23:45 +0200 Subject: [PATCH 067/671] doc: Fix man page whitespace issues Whitespace between tags is significant, and in some cases it creates extra vertical space in man pages. The fix is to remove some newlines in the markup. --- doc/src/sgml/ref/cluster.sgml | 1 - doc/src/sgml/ref/create_extension.sgml | 3 +-- doc/src/sgml/ref/create_procedure.sgml | 3 +-- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/doc/src/sgml/ref/cluster.sgml b/doc/src/sgml/ref/cluster.sgml index 0d9720fd8e6c7..86f5fdc469be4 100644 --- a/doc/src/sgml/ref/cluster.sgml +++ b/doc/src/sgml/ref/cluster.sgml @@ -28,7 +28,6 @@ CLUSTER [VERBOSE] where option can be one of: VERBOSE [ boolean ] - diff --git a/doc/src/sgml/ref/create_extension.sgml b/doc/src/sgml/ref/create_extension.sgml index efd7fc646560f..ca2b80d669c5e 100644 --- a/doc/src/sgml/ref/create_extension.sgml +++ b/doc/src/sgml/ref/create_extension.sgml @@ -223,8 +223,7 @@ CREATE EXTENSION hstore SCHEMA addons; SET search_path = addons; CREATE EXTENSION hstore; - - + diff --git a/doc/src/sgml/ref/create_procedure.sgml b/doc/src/sgml/ref/create_procedure.sgml index 2cd47d097f3fc..03a14c868458e 100644 --- a/doc/src/sgml/ref/create_procedure.sgml +++ b/doc/src/sgml/ref/create_procedure.sgml @@ -382,8 +382,7 @@ END; and call like this: CALL insert_data(1, 2); - - + From 152d33bccec7176f50be225bdbedf2e6de214e54 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Sat, 10 Apr 2021 19:19:45 +1200 Subject: [PATCH 068/671] Improve slightly misleading comments in nodeFuncs.c There were some comments in nodeFuncs.c that, depending on your interpretation of the word "result", could lead you to believe that the comments were badly copied and pasted from somewhere else. If you thought of "result" as the return value of the function that the comment is written in, then you'd be misled. However, if you'd correctly interpreted "result" to mean the result type of the given node type, you'd not have seen any issues. Here we do a small cleanup to try to prevent any future misinterpretations. Per wording suggestion from Tom Lane. Reviewed-by: Tom Lane Discussion: https://postgr.es/m/CAApHDvp+Bw=2Qiu5=uXMKfC7gd0+B=4JvexVgGJU=am2g9a1CA@mail.gmail.com --- src/backend/nodes/nodeFuncs.c | 69 ++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 25 deletions(-) diff --git a/src/backend/nodes/nodeFuncs.c b/src/backend/nodes/nodeFuncs.c index 860e9a2a06456..ff3dcc7b18baa 100644 --- a/src/backend/nodes/nodeFuncs.c +++ b/src/backend/nodes/nodeFuncs.c @@ -802,10 +802,12 @@ exprCollation(const Node *expr) coll = ((const NullIfExpr *) expr)->opcollid; break; case T_ScalarArrayOpExpr: - coll = InvalidOid; /* result is always boolean */ + /* ScalarArrayOpExpr's result is boolean ... */ + coll = InvalidOid; /* ... so it has no collation */ break; case T_BoolExpr: - coll = InvalidOid; /* result is always boolean */ + /* BoolExpr's result is boolean ... */ + coll = InvalidOid; /* ... so it has no collation */ break; case T_SubLink: { @@ -827,8 +829,8 @@ exprCollation(const Node *expr) } else { - /* otherwise, result is RECORD or BOOLEAN */ - coll = InvalidOid; + /* otherwise, SubLink's result is RECORD or BOOLEAN */ + coll = InvalidOid; /* ... so it has no collation */ } } break; @@ -845,8 +847,8 @@ exprCollation(const Node *expr) } else { - /* otherwise, result is RECORD or BOOLEAN */ - coll = InvalidOid; + /* otherwise, SubPlan's result is RECORD or BOOLEAN */ + coll = InvalidOid; /* ... so it has no collation */ } } break; @@ -862,7 +864,8 @@ exprCollation(const Node *expr) coll = ((const FieldSelect *) expr)->resultcollid; break; case T_FieldStore: - coll = InvalidOid; /* result is always composite */ + /* FieldStore's result is composite ... */ + coll = InvalidOid; /* ... so it has no collation */ break; case T_RelabelType: coll = ((const RelabelType *) expr)->resultcollid; @@ -874,7 +877,8 @@ exprCollation(const Node *expr) coll = ((const ArrayCoerceExpr *) expr)->resultcollid; break; case T_ConvertRowtypeExpr: - coll = InvalidOid; /* result is always composite */ + /* ConvertRowtypeExpr's result is composite ... */ + coll = InvalidOid; /* ... so it has no collation */ break; case T_CollateExpr: coll = ((const CollateExpr *) expr)->collOid; @@ -889,10 +893,12 @@ exprCollation(const Node *expr) coll = ((const ArrayExpr *) expr)->array_collid; break; case T_RowExpr: - coll = InvalidOid; /* result is always composite */ + /* RowExpr's result is composite ... */ + coll = InvalidOid; /* ... so it has no collation */ break; case T_RowCompareExpr: - coll = InvalidOid; /* result is always boolean */ + /* RowCompareExpr's result is boolean ... */ + coll = InvalidOid; /* ... so it has no collation */ break; case T_CoalesceExpr: coll = ((const CoalesceExpr *) expr)->coalescecollid; @@ -920,10 +926,12 @@ exprCollation(const Node *expr) coll = InvalidOid; break; case T_NullTest: - coll = InvalidOid; /* result is always boolean */ + /* NullTest's result is boolean ... */ + coll = InvalidOid; /* ... so it has no collation */ break; case T_BooleanTest: - coll = InvalidOid; /* result is always boolean */ + /* BooleanTest's result is boolean ... */ + coll = InvalidOid; /* ... so it has no collation */ break; case T_CoerceToDomain: coll = ((const CoerceToDomain *) expr)->resultcollid; @@ -935,10 +943,12 @@ exprCollation(const Node *expr) coll = ((const SetToDefault *) expr)->collation; break; case T_CurrentOfExpr: - coll = InvalidOid; /* result is always boolean */ + /* CurrentOfExpr's result is boolean ... */ + coll = InvalidOid; /* ... so it has no collation */ break; case T_NextValueExpr: - coll = InvalidOid; /* result is always an integer type */ + /* NextValueExpr's result is an integer type ... */ + coll = InvalidOid; /* ... so it has no collation */ break; case T_InferenceElem: coll = exprCollation((Node *) ((const InferenceElem *) expr)->expr); @@ -1050,10 +1060,12 @@ exprSetCollation(Node *expr, Oid collation) ((NullIfExpr *) expr)->opcollid = collation; break; case T_ScalarArrayOpExpr: - Assert(!OidIsValid(collation)); /* result is always boolean */ + /* ScalarArrayOpExpr's result is boolean ... */ + Assert(!OidIsValid(collation)); /* ... so never set a collation */ break; case T_BoolExpr: - Assert(!OidIsValid(collation)); /* result is always boolean */ + /* BoolExpr's result is boolean ... */ + Assert(!OidIsValid(collation)); /* ... so never set a collation */ break; case T_SubLink: #ifdef USE_ASSERT_CHECKING @@ -1085,7 +1097,8 @@ exprSetCollation(Node *expr, Oid collation) ((FieldSelect *) expr)->resultcollid = collation; break; case T_FieldStore: - Assert(!OidIsValid(collation)); /* result is always composite */ + /* FieldStore's result is composite ... */ + Assert(!OidIsValid(collation)); /* ... so never set a collation */ break; case T_RelabelType: ((RelabelType *) expr)->resultcollid = collation; @@ -1097,7 +1110,8 @@ exprSetCollation(Node *expr, Oid collation) ((ArrayCoerceExpr *) expr)->resultcollid = collation; break; case T_ConvertRowtypeExpr: - Assert(!OidIsValid(collation)); /* result is always composite */ + /* ConvertRowtypeExpr's result is composite ... */ + Assert(!OidIsValid(collation)); /* ... so never set a collation */ break; case T_CaseExpr: ((CaseExpr *) expr)->casecollid = collation; @@ -1106,10 +1120,12 @@ exprSetCollation(Node *expr, Oid collation) ((ArrayExpr *) expr)->array_collid = collation; break; case T_RowExpr: - Assert(!OidIsValid(collation)); /* result is always composite */ + /* RowExpr's result is composite ... */ + Assert(!OidIsValid(collation)); /* ... so never set a collation */ break; case T_RowCompareExpr: - Assert(!OidIsValid(collation)); /* result is always boolean */ + /* RowCompareExpr's result is boolean ... */ + Assert(!OidIsValid(collation)); /* ... so never set a collation */ break; case T_CoalesceExpr: ((CoalesceExpr *) expr)->coalescecollid = collation; @@ -1128,10 +1144,12 @@ exprSetCollation(Node *expr, Oid collation) (collation == InvalidOid)); break; case T_NullTest: - Assert(!OidIsValid(collation)); /* result is always boolean */ + /* NullTest's result is boolean ... */ + Assert(!OidIsValid(collation)); /* ... so never set a collation */ break; case T_BooleanTest: - Assert(!OidIsValid(collation)); /* result is always boolean */ + /* BooleanTest's result is boolean ... */ + Assert(!OidIsValid(collation)); /* ... so never set a collation */ break; case T_CoerceToDomain: ((CoerceToDomain *) expr)->resultcollid = collation; @@ -1143,11 +1161,12 @@ exprSetCollation(Node *expr, Oid collation) ((SetToDefault *) expr)->collation = collation; break; case T_CurrentOfExpr: - Assert(!OidIsValid(collation)); /* result is always boolean */ + /* CurrentOfExpr's result is boolean ... */ + Assert(!OidIsValid(collation)); /* ... so never set a collation */ break; case T_NextValueExpr: - Assert(!OidIsValid(collation)); /* result is always an integer - * type */ + /* NextValueExpr's result is an integer type ... */ + Assert(!OidIsValid(collation)); /* ... so never set a collation */ break; default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(expr)); From 07b76833b15163c6574ea2c12d05d9a0800665e2 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 10 Apr 2021 12:08:28 -0400 Subject: [PATCH 069/671] Doc: update documentation of check_function_bodies. Adjust docs and description string to note that check_function_bodies applies to procedures too. (In hindsight it should have been named check_routine_bodies, but it seems too late for that now.) Daniel Westermann Discussion: https://postgr.es/m/GV0P278MB04834A9EB9A74B036DC7CE49D2739@GV0P278MB0483.CHEP278.PROD.OUTLOOK.COM --- doc/src/sgml/config.sgml | 12 +++++++----- src/backend/utils/misc/guc.c | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index cc18b0bbf0aa8..5bdb8650cc283 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -8415,10 +8415,12 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; This parameter is normally on. When set to off, it - disables validation of the function body string during . Disabling validation avoids side - effects of the validation process and avoids false positives due - to problems such as forward references. Set this parameter + disables validation of the routine body string during and . Disabling validation avoids side + effects of the validation process, in particular preventing false + positives due to problems such as forward references. + Set this parameter to off before loading functions on behalf of other users; pg_dump does so automatically. @@ -9954,7 +9956,7 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' When set to on, which is the default, PostgreSQL will automatically remove temporary files after a backend crash. If disabled, the files will be - retained and may be used for debugging, for example. Repeated crashes + retained and may be used for debugging, for example. Repeated crashes may however result in accumulation of useless files. diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index ca378bd6afb21..d0a51b507d77b 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -1759,7 +1759,7 @@ static struct config_bool ConfigureNamesBool[] = }, { {"check_function_bodies", PGC_USERSET, CLIENT_CONN_STATEMENT, - gettext_noop("Check function bodies during CREATE FUNCTION."), + gettext_noop("Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE."), NULL }, &check_function_bodies, From 99964c4ade468c35a3f6e248a2380a1ff67d9cd3 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 10 Apr 2021 13:16:08 -0400 Subject: [PATCH 070/671] Fix failure of xlogprefetch.h to include all prerequisite headers. Per cpluspluscheck. --- src/include/access/xlogprefetch.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/access/xlogprefetch.h b/src/include/access/xlogprefetch.h index 59ce9c647398f..0a7902ee4707a 100644 --- a/src/include/access/xlogprefetch.h +++ b/src/include/access/xlogprefetch.h @@ -13,7 +13,7 @@ #ifndef XLOGPREFETCH_H #define XLOGPREFETCH_H -#include "access/xlogdefs.h" +#include "access/xlogreader.h" /* GUCs */ extern bool recovery_prefetch; From 496e58bb0e5e939e6ed5839c92b05e3ab11b54bb Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sat, 10 Apr 2021 19:33:46 +0200 Subject: [PATCH 071/671] Improve behavior of date_bin with origin in the future Currently, when the origin is after the input, the result is the timestamp at the end of the bin, rather than the beginning as expected. This puts the result consistently at the beginning of the bin. Author: John Naylor Discussion: https://www.postgresql.org/message-id/CAFBsxsGjLDxQofRfH+d4KSAXxPf3MMevUG7s6EDfdBOvHLDLjw@mail.gmail.com --- src/backend/utils/adt/timestamp.c | 14 +++++++ src/test/regress/expected/timestamp.out | 54 +++++++++++++++++++++++++ src/test/regress/sql/timestamp.sql | 34 ++++++++++++++++ 3 files changed, 102 insertions(+) diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index b2bdbcab57669..280ee7f92bab8 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -3846,6 +3846,13 @@ timestamp_bin(PG_FUNCTION_ARGS) tm_diff = timestamp - origin; tm_delta = tm_diff - tm_diff % stride_usecs; + /* + * Make sure the returned timestamp is at the start of the bin, + * even if the origin is in the future. + */ + if (origin > timestamp && stride_usecs > 1) + tm_delta -= stride_usecs; + result = origin + tm_delta; PG_RETURN_TIMESTAMP(result); @@ -4017,6 +4024,13 @@ timestamptz_bin(PG_FUNCTION_ARGS) tm_diff = timestamp - origin; tm_delta = tm_diff - tm_diff % stride_usecs; + /* + * Make sure the returned timestamp is at the start of the bin, + * even if the origin is in the future. + */ + if (origin > timestamp && stride_usecs > 1) + tm_delta -= stride_usecs; + result = origin + tm_delta; PG_RETURN_TIMESTAMPTZ(result); diff --git a/src/test/regress/expected/timestamp.out b/src/test/regress/expected/timestamp.out index 690656dfb2dae..ac1a4a9b6acad 100644 --- a/src/test/regress/expected/timestamp.out +++ b/src/test/regress/expected/timestamp.out @@ -609,6 +609,60 @@ FROM ( microsecond | 1 us | t (7 rows) +-- case 3: AD dates, origin > input +SELECT + str, + interval, + date_trunc(str, ts) = date_bin(interval::interval, ts, timestamp '2020-03-02') AS equal +FROM ( + VALUES + ('week', '7 d'), + ('day', '1 d'), + ('hour', '1 h'), + ('minute', '1 m'), + ('second', '1 s'), + ('millisecond', '1 ms'), + ('microsecond', '1 us') +) intervals (str, interval), +(VALUES (timestamp '2020-02-29 15:44:17.71393')) ts (ts); + str | interval | equal +-------------+----------+------- + week | 7 d | t + day | 1 d | t + hour | 1 h | t + minute | 1 m | t + second | 1 s | t + millisecond | 1 ms | t + microsecond | 1 us | t +(7 rows) + +-- case 4: BC dates, origin > input +SELECT + str, + interval, + date_trunc(str, ts) = date_bin(interval::interval, ts, timestamp '0055-06-17 BC') AS equal +FROM ( + VALUES + ('week', '7 d'), + ('day', '1 d'), + ('hour', '1 h'), + ('minute', '1 m'), + ('second', '1 s'), + ('millisecond', '1 ms'), + ('microsecond', '1 us') +) intervals (str, interval), +(VALUES (timestamp '0055-6-10 15:44:17.71393 BC')) ts (ts); + str | interval | equal +-------------+----------+------- + week | 7 d | t + day | 1 d | t + hour | 1 h | t + minute | 1 m | t + second | 1 s | t + millisecond | 1 ms | t + microsecond | 1 us | t +(7 rows) + -- bin timestamps into arbitrary intervals SELECT interval, diff --git a/src/test/regress/sql/timestamp.sql b/src/test/regress/sql/timestamp.sql index c43a1f22688f3..d51e83127aee9 100644 --- a/src/test/regress/sql/timestamp.sql +++ b/src/test/regress/sql/timestamp.sql @@ -203,6 +203,40 @@ FROM ( ) intervals (str, interval), (VALUES (timestamp '0055-6-10 15:44:17.71393 BC')) ts (ts); +-- case 3: AD dates, origin > input +SELECT + str, + interval, + date_trunc(str, ts) = date_bin(interval::interval, ts, timestamp '2020-03-02') AS equal +FROM ( + VALUES + ('week', '7 d'), + ('day', '1 d'), + ('hour', '1 h'), + ('minute', '1 m'), + ('second', '1 s'), + ('millisecond', '1 ms'), + ('microsecond', '1 us') +) intervals (str, interval), +(VALUES (timestamp '2020-02-29 15:44:17.71393')) ts (ts); + +-- case 4: BC dates, origin > input +SELECT + str, + interval, + date_trunc(str, ts) = date_bin(interval::interval, ts, timestamp '0055-06-17 BC') AS equal +FROM ( + VALUES + ('week', '7 d'), + ('day', '1 d'), + ('hour', '1 h'), + ('minute', '1 m'), + ('second', '1 s'), + ('millisecond', '1 ms'), + ('microsecond', '1 us') +) intervals (str, interval), +(VALUES (timestamp '0055-6-10 15:44:17.71393 BC')) ts (ts); + -- bin timestamps into arbitrary intervals SELECT interval, From df5efaf4410f94cc1b69e8ade1d64dc92232ec1d Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Sat, 10 Apr 2021 12:01:41 -0700 Subject: [PATCH 072/671] Standardize pg_authid oid_symbol values. Commit c9c41c7a337d3e2deb0b2a193e9ecfb865d8f52b used two different naming patterns. Standardize on the majority pattern, which was the only pattern in the last reviewed version of that commit. --- src/backend/catalog/aclchk.c | 8 ++++---- src/backend/commands/user.c | 8 ++++---- src/backend/utils/adt/acl.c | 6 +++--- src/include/catalog/pg_authid.dat | 6 +++--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c index 1d8930a1e0e03..e1573eb3984fd 100644 --- a/src/backend/catalog/aclchk.c +++ b/src/backend/catalog/aclchk.c @@ -3931,7 +3931,7 @@ pg_class_aclmask_ext(Oid table_oid, Oid roleid, AclMode mask, * pg_read_all_data role, which allows read access to all relations. */ if (mask & ACL_SELECT && !(result & ACL_SELECT) && - has_privs_of_role(roleid, ROLE_READ_ALL_DATA)) + has_privs_of_role(roleid, ROLE_PG_READ_ALL_DATA)) result |= ACL_SELECT; /* @@ -3943,7 +3943,7 @@ pg_class_aclmask_ext(Oid table_oid, Oid roleid, AclMode mask, */ if (mask & (ACL_INSERT | ACL_UPDATE | ACL_DELETE) && !(result & (ACL_INSERT | ACL_UPDATE | ACL_DELETE)) && - has_privs_of_role(roleid, ROLE_WRITE_ALL_DATA)) + has_privs_of_role(roleid, ROLE_PG_WRITE_ALL_DATA)) result |= (mask & (ACL_INSERT | ACL_UPDATE | ACL_DELETE)); return result; @@ -4279,8 +4279,8 @@ pg_namespace_aclmask(Oid nsp_oid, Oid roleid, * access to all schemas. */ if (mask & ACL_USAGE && !(result & ACL_USAGE) && - (has_privs_of_role(roleid, ROLE_READ_ALL_DATA) || - has_privs_of_role(roleid, ROLE_WRITE_ALL_DATA))) + (has_privs_of_role(roleid, ROLE_PG_READ_ALL_DATA) || + has_privs_of_role(roleid, ROLE_PG_WRITE_ALL_DATA))) result |= ACL_USAGE; return result; } diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index a8c5188ebcdee..65bb73395891d 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -1501,10 +1501,10 @@ AddRoleMems(const char *rolename, Oid roleid, * situation-dependent member. There's no technical need for this * restriction. (One could lift it and take the further step of making * pg_database_ownercheck() equivalent to has_privs_of_role(roleid, - * ROLE_DATABASE_OWNER), in which case explicit, - * situation-independent members could act as the owner of any database.) + * ROLE_PG_DATABASE_OWNER), in which case explicit, situation-independent + * members could act as the owner of any database.) */ - if (roleid == ROLE_DATABASE_OWNER) + if (roleid == ROLE_PG_DATABASE_OWNER) ereport(ERROR, errmsg("role \"%s\" cannot have explicit members", rolename)); @@ -1555,7 +1555,7 @@ AddRoleMems(const char *rolename, Oid roleid, * shared object. (The effect of such ownership is that any owner of * another database can act as the owner of affected shared objects.) */ - if (memberid == ROLE_DATABASE_OWNER) + if (memberid == ROLE_PG_DATABASE_OWNER) ereport(ERROR, errmsg("role \"%s\" cannot be a member of any role", get_rolespec_name(memberRole))); diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index ebf113074a9d0..7861a0a613a1d 100644 --- a/src/backend/utils/adt/acl.c +++ b/src/backend/utils/adt/acl.c @@ -4741,8 +4741,8 @@ roles_is_member_of(Oid roleid, enum RoleRecurseType type, /* * Role expansion happens in a non-database backend when guc.c checks - * ROLE_READ_ALL_SETTINGS for a physical walsender SHOW command. - * In that case, no role gets pg_database_owner. + * ROLE_PG_READ_ALL_SETTINGS for a physical walsender SHOW command. In + * that case, no role gets pg_database_owner. */ if (!OidIsValid(MyDatabaseId)) dba = InvalidOid; @@ -4808,7 +4808,7 @@ roles_is_member_of(Oid roleid, enum RoleRecurseType type, /* implement pg_database_owner implicit membership */ if (memberid == dba && OidIsValid(dba)) roles_list = list_append_unique_oid(roles_list, - ROLE_DATABASE_OWNER); + ROLE_PG_DATABASE_OWNER); } /* diff --git a/src/include/catalog/pg_authid.dat b/src/include/catalog/pg_authid.dat index f78802e41fa2f..ed5916330c9d4 100644 --- a/src/include/catalog/pg_authid.dat +++ b/src/include/catalog/pg_authid.dat @@ -24,17 +24,17 @@ rolcreaterole => 't', rolcreatedb => 't', rolcanlogin => 't', rolreplication => 't', rolbypassrls => 't', rolconnlimit => '-1', rolpassword => '_null_', rolvaliduntil => '_null_' }, -{ oid => '8778', oid_symbol => 'ROLE_DATABASE_OWNER', +{ oid => '8778', oid_symbol => 'ROLE_PG_DATABASE_OWNER', rolname => 'pg_database_owner', rolsuper => 'f', rolinherit => 't', rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f', rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1', rolpassword => '_null_', rolvaliduntil => '_null_' }, -{ oid => '9274', oid_symbol => 'ROLE_READ_ALL_DATA', +{ oid => '9274', oid_symbol => 'ROLE_PG_READ_ALL_DATA', rolname => 'pg_read_all_data', rolsuper => 'f', rolinherit => 't', rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f', rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1', rolpassword => '_null_', rolvaliduntil => '_null_' }, -{ oid => '9275', oid_symbol => 'ROLE_WRITE_ALL_DATA', +{ oid => '9275', oid_symbol => 'ROLE_PG_WRITE_ALL_DATA', rolname => 'pg_write_all_data', rolsuper => 'f', rolinherit => 't', rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f', rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1', From 08aa89b326261b669648df97d4f2a6edba22d26a Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Mon, 12 Apr 2021 00:00:18 +0900 Subject: [PATCH 073/671] Remove COMMIT_TS_SETTS record. Commit 438fc4a39c prevented the WAL replay from writing COMMIT_TS_SETTS record. By this change there is no code that generates COMMIT_TS_SETTS record in PostgreSQL core. Also we can think that there are no extensions using the record because we've not received so far any complaints about the issue that commit 438fc4a39c fixed. Therefore this commit removes COMMIT_TS_SETTS record and its related code. Even without this record, the timestamp required for commit timestamp feature can be acquired from the COMMIT record. Bump WAL page magic. Reported-by: lx zou Author: Fujii Masao Reviewed-by: Alvaro Herrera Discussion: https://postgr.es/m/16931-620d0f2fdc6108f1@postgresql.org --- src/backend/access/rmgrdesc/committsdesc.c | 27 --------- src/backend/access/transam/commit_ts.c | 64 +--------------------- src/backend/access/transam/twophase.c | 2 +- src/backend/access/transam/xact.c | 4 +- src/include/access/commit_ts.h | 3 +- src/include/access/xlog_internal.h | 2 +- 6 files changed, 6 insertions(+), 96 deletions(-) diff --git a/src/backend/access/rmgrdesc/committsdesc.c b/src/backend/access/rmgrdesc/committsdesc.c index 7ebd3d35efd02..26bad44b964aa 100644 --- a/src/backend/access/rmgrdesc/committsdesc.c +++ b/src/backend/access/rmgrdesc/committsdesc.c @@ -38,31 +38,6 @@ commit_ts_desc(StringInfo buf, XLogReaderState *record) appendStringInfo(buf, "pageno %d, oldestXid %u", trunc->pageno, trunc->oldestXid); } - else if (info == COMMIT_TS_SETTS) - { - xl_commit_ts_set *xlrec = (xl_commit_ts_set *) rec; - int nsubxids; - - appendStringInfo(buf, "set %s/%d for: %u", - timestamptz_to_str(xlrec->timestamp), - xlrec->nodeid, - xlrec->mainxid); - nsubxids = ((XLogRecGetDataLen(record) - SizeOfCommitTsSet) / - sizeof(TransactionId)); - if (nsubxids > 0) - { - int i; - TransactionId *subxids; - - subxids = palloc(sizeof(TransactionId) * nsubxids); - memcpy(subxids, - XLogRecGetData(record) + SizeOfCommitTsSet, - sizeof(TransactionId) * nsubxids); - for (i = 0; i < nsubxids; i++) - appendStringInfo(buf, ", %u", subxids[i]); - pfree(subxids); - } - } } const char * @@ -74,8 +49,6 @@ commit_ts_identify(uint8 info) return "ZEROPAGE"; case COMMIT_TS_TRUNCATE: return "TRUNCATE"; - case COMMIT_TS_SETTS: - return "SETTS"; default: return NULL; } diff --git a/src/backend/access/transam/commit_ts.c b/src/backend/access/transam/commit_ts.c index 268bdba339822..0985fa155caea 100644 --- a/src/backend/access/transam/commit_ts.c +++ b/src/backend/access/transam/commit_ts.c @@ -114,9 +114,6 @@ static void ActivateCommitTs(void); static void DeactivateCommitTs(void); static void WriteZeroPageXlogRec(int pageno); static void WriteTruncateXlogRec(int pageno, TransactionId oldestXid); -static void WriteSetTimestampXlogRec(TransactionId mainxid, int nsubxids, - TransactionId *subxids, TimestampTz timestamp, - RepOriginId nodeid); /* * TransactionTreeSetCommitTsData @@ -133,18 +130,11 @@ static void WriteSetTimestampXlogRec(TransactionId mainxid, int nsubxids, * permanent) so we need to keep the information about them here. If the * subtrans implementation changes in the future, we might want to revisit the * decision of storing timestamp info for each subxid. - * - * The write_xlog parameter tells us whether to include an XLog record of this - * or not. Normally, this is called from transaction commit routines (both - * normal and prepared) and the information will be stored in the transaction - * commit XLog record, and so they should pass "false" for this. The XLog redo - * code should use "false" here as well. Other callers probably want to pass - * true, so that the given values persist in case of crashes. */ void TransactionTreeSetCommitTsData(TransactionId xid, int nsubxids, TransactionId *subxids, TimestampTz timestamp, - RepOriginId nodeid, bool write_xlog) + RepOriginId nodeid) { int i; TransactionId headxid; @@ -161,13 +151,6 @@ TransactionTreeSetCommitTsData(TransactionId xid, int nsubxids, if (!commitTsShared->commitTsActive) return; - /* - * Comply with the WAL-before-data rule: if caller specified it wants this - * value to be recorded in WAL, do so before touching the data. - */ - if (write_xlog) - WriteSetTimestampXlogRec(xid, nsubxids, subxids, timestamp, nodeid); - /* * Figure out the latest Xid in this batch: either the last subxid if * there's any, otherwise the parent xid. @@ -993,28 +976,6 @@ WriteTruncateXlogRec(int pageno, TransactionId oldestXid) (void) XLogInsert(RM_COMMIT_TS_ID, COMMIT_TS_TRUNCATE); } -/* - * Write a SETTS xlog record - */ -static void -WriteSetTimestampXlogRec(TransactionId mainxid, int nsubxids, - TransactionId *subxids, TimestampTz timestamp, - RepOriginId nodeid) -{ - xl_commit_ts_set record; - - record.timestamp = timestamp; - record.nodeid = nodeid; - record.mainxid = mainxid; - - XLogBeginInsert(); - XLogRegisterData((char *) &record, - offsetof(xl_commit_ts_set, mainxid) + - sizeof(TransactionId)); - XLogRegisterData((char *) subxids, nsubxids * sizeof(TransactionId)); - XLogInsert(RM_COMMIT_TS_ID, COMMIT_TS_SETTS); -} - /* * CommitTS resource manager's routines */ @@ -1055,29 +1016,6 @@ commit_ts_redo(XLogReaderState *record) SimpleLruTruncate(CommitTsCtl, trunc->pageno); } - else if (info == COMMIT_TS_SETTS) - { - xl_commit_ts_set *setts = (xl_commit_ts_set *) XLogRecGetData(record); - int nsubxids; - TransactionId *subxids; - - nsubxids = ((XLogRecGetDataLen(record) - SizeOfCommitTsSet) / - sizeof(TransactionId)); - if (nsubxids > 0) - { - subxids = palloc(sizeof(TransactionId) * nsubxids); - memcpy(subxids, - XLogRecGetData(record) + SizeOfCommitTsSet, - sizeof(TransactionId) * nsubxids); - } - else - subxids = NULL; - - TransactionTreeSetCommitTsData(setts->mainxid, nsubxids, subxids, - setts->timestamp, setts->nodeid, false); - if (subxids) - pfree(subxids); - } else elog(PANIC, "commit_ts_redo: unknown op code %u", info); } diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index 3137cb3ecc153..b6581349a35bd 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -2246,7 +2246,7 @@ RecordTransactionCommitPrepared(TransactionId xid, TransactionTreeSetCommitTsData(xid, nchildren, children, replorigin_session_origin_timestamp, - replorigin_session_origin, false); + replorigin_session_origin); /* * We don't currently try to sleep before flush here ... nor is there any diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index c83aa16f2ce74..441445927e8d7 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -1366,7 +1366,7 @@ RecordTransactionCommit(void) TransactionTreeSetCommitTsData(xid, nchildren, children, replorigin_session_origin_timestamp, - replorigin_session_origin, false); + replorigin_session_origin); } /* @@ -5804,7 +5804,7 @@ xact_redo_commit(xl_xact_parsed_commit *parsed, /* Set the transaction commit timestamp and metadata */ TransactionTreeSetCommitTsData(xid, parsed->nsubxacts, parsed->subxacts, - commit_time, origin_id, false); + commit_time, origin_id); if (standbyState == STANDBY_DISABLED) { diff --git a/src/include/access/commit_ts.h b/src/include/access/commit_ts.h index 750369104ac59..608a1643cdd9c 100644 --- a/src/include/access/commit_ts.h +++ b/src/include/access/commit_ts.h @@ -25,7 +25,7 @@ extern bool check_track_commit_timestamp(bool *newval, void **extra, extern void TransactionTreeSetCommitTsData(TransactionId xid, int nsubxids, TransactionId *subxids, TimestampTz timestamp, - RepOriginId nodeid, bool write_xlog); + RepOriginId nodeid); extern bool TransactionIdGetCommitTsData(TransactionId xid, TimestampTz *ts, RepOriginId *nodeid); extern TransactionId GetLatestCommitTsData(TimestampTz *ts, @@ -50,7 +50,6 @@ extern int committssyncfiletag(const FileTag *ftag, char *path); /* XLOG stuff */ #define COMMIT_TS_ZEROPAGE 0x00 #define COMMIT_TS_TRUNCATE 0x10 -#define COMMIT_TS_SETTS 0x20 typedef struct xl_commit_ts_set { diff --git a/src/include/access/xlog_internal.h b/src/include/access/xlog_internal.h index da94f2d472a6a..26a743b6b6c39 100644 --- a/src/include/access/xlog_internal.h +++ b/src/include/access/xlog_internal.h @@ -31,7 +31,7 @@ /* * Each page of XLOG file has a header like this: */ -#define XLOG_PAGE_MAGIC 0xD10C /* can be used as WAL version indicator */ +#define XLOG_PAGE_MAGIC 0xD10D /* can be used as WAL version indicator */ typedef struct XLogPageHeaderData { From 81a23dd87999ec9fb62554328c69c5b678612d56 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Mon, 12 Apr 2021 00:05:58 +0900 Subject: [PATCH 074/671] Avoid unnecessary table open/close in TRUNCATE command. ExecuteTruncate() filters out the duplicate tables specified in the TRUNCATE command, for example in the case where "TRUNCATE foo, foo" is executed. Such duplicate tables obviously don't need to be opened and closed because they are skipped. But previously it always opened the tables before checking whether they were duplicated ones or not, and then closed them if they were. That is, the duplicated tables were opened and closed unnecessarily. This commit changes ExecuteTruncate() so that it opens the table after it confirms that table is not duplicated one, which leads to avoid unnecessary table open/close. Do not back-patch because such unnecessary table open/close is not a bug though it exists in older versions. Author: Bharath Rupireddy Reviewed-by: Amul Sul, Fujii Masao Discussion: https://postgr.es/m/CALj2ACUdBO_sXJTa08OZ0YT0qk7F_gAmRa9hT4dxRcgPS4nsZA@mail.gmail.com --- src/backend/commands/tablecmds.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index f780918a95164..096a6f289155f 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -1639,15 +1639,12 @@ ExecuteTruncate(TruncateStmt *stmt) 0, RangeVarCallbackForTruncate, NULL); - /* open the relation, we already hold a lock on it */ - rel = table_open(myrelid, NoLock); - /* don't throw error for "TRUNCATE foo, foo" */ if (list_member_oid(relids, myrelid)) - { - table_close(rel, lockmode); continue; - } + + /* open the relation, we already hold a lock on it */ + rel = table_open(myrelid, NoLock); /* * RangeVarGetRelidExtended() has done most checks with its callback, From 9cb92334092fa75afc62a71243bbc1f4612ecfa4 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 11 Apr 2021 11:46:32 -0400 Subject: [PATCH 075/671] Fix uninitialized variable from commit a4d75c86b. The path for *exprs != NIL would misbehave, and likely crash, since pull_varattnos expects its last argument to be valid at call. Found by Coverity --- we have no coverage of this path in the regression tests. --- src/backend/statistics/extended_stats.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index 4674168ff806e..4bbd85f401ece 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -1609,7 +1609,7 @@ statext_is_compatible_clause(PlannerInfo *root, Node *clause, Index relid, if (pg_class_aclcheck(rte->relid, userid, ACL_SELECT) != ACLCHECK_OK) { - Bitmapset *clause_attnums; + Bitmapset *clause_attnums = NULL; /* Don't have table privilege, must check individual columns */ if (*exprs != NIL) From d7cff12c4c035b7cf12bb8454824f48f13018730 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 11 Apr 2021 13:22:56 -0400 Subject: [PATCH 076/671] Add macro PGWARNING, and make PGERROR available on all platforms. We'd previously noted the need for coping with Windows headers that provide some other definition of macro "ERROR" than elog.h does. It turns out that R also wants to define ERROR, and WARNING too. PL/R has been working around this in a hacky way that broke when we recently changed the numeric value of ERROR. To let them have a more future-proof solution, provide an alternate macro PGWARNING for WARNING, and make PGERROR visible always, not only when #ifdef WIN32. Discussion: https://postgr.es/m/CADK3HHK6iMChd1yoOqssxBn5Z14Zar8Ztr3G-N_fuG7F8YTP3w@mail.gmail.com --- src/include/utils/elog.h | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h index 9acb57a27b542..f53607e12eb81 100644 --- a/src/include/utils/elog.h +++ b/src/include/utils/elog.h @@ -40,20 +40,22 @@ #define WARNING 19 /* Warnings. NOTICE is for expected messages * like implicit sequence creation by SERIAL. * WARNING is for unexpected messages. */ +#define PGWARNING 19 /* Must equal WARNING; see NOTE below. */ #define WARNING_CLIENT_ONLY 20 /* Warnings to be sent to client as usual, but * never to the server log. */ #define ERROR 21 /* user error - abort transaction; return to * known state */ -/* Save ERROR value in PGERROR so it can be restored when Win32 includes - * modify it. We have to use a constant rather than ERROR because macros - * are expanded only when referenced outside macros. - */ -#ifdef WIN32 -#define PGERROR 21 -#endif +#define PGERROR 21 /* Must equal ERROR; see NOTE below. */ #define FATAL 22 /* fatal error - abort process */ #define PANIC 23 /* take down the other backends with me */ +/* + * NOTE: the alternate names PGWARNING and PGERROR are useful for dealing + * with third-party headers that make other definitions of WARNING and/or + * ERROR. One can, for example, re-define ERROR as PGERROR after including + * such a header. + */ + /* macros for representing SQLSTATE strings compactly */ #define PGSIXBIT(ch) (((ch) - '0') & 0x3F) From 6277435a8a89c59f716c111200c072d1454b8ff2 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 11 Apr 2021 17:02:04 -0400 Subject: [PATCH 077/671] Silence some Coverity warnings and improve code consistency. Coverity complained about possible overflow in expressions like intresult = tm->tm_sec * 1000000 + fsec; on the grounds that the multiplication would happen in 32-bit arithmetic before widening to the int64 result. I think these are all false positives because of the limited possible range of tm_sec; but nonetheless it seems silly to spell it like that when nearby lines have the identical computation written with a 64-bit constant. ... or more accurately, with an LL constant, which is not project style. Make all of these use INT64CONST(), as we do elsewhere. This is all new code from a2da77cdb, so no need for back-patch. --- src/backend/utils/adt/date.c | 14 +++++++------- src/backend/utils/adt/timestamp.c | 26 +++++++++++++------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index 83036e5985e50..0bea16cb671ac 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -2158,7 +2158,7 @@ time_part_common(PG_FUNCTION_ARGS, bool retnumeric) switch (val) { case DTK_MICROSEC: - intresult = tm->tm_sec * 1000000 + fsec; + intresult = tm->tm_sec * INT64CONST(1000000) + fsec; break; case DTK_MILLISEC: @@ -2167,7 +2167,7 @@ time_part_common(PG_FUNCTION_ARGS, bool retnumeric) * tm->tm_sec * 1000 + fsec / 1000 * = (tm->tm_sec * 1'000'000 + fsec) / 1000 */ - PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * 1000000LL + fsec, 3)); + PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * INT64CONST(1000000) + fsec, 3)); else PG_RETURN_FLOAT8(tm->tm_sec * 1000.0 + fsec / 1000.0); break; @@ -2178,7 +2178,7 @@ time_part_common(PG_FUNCTION_ARGS, bool retnumeric) * tm->tm_sec + fsec / 1'000'000 * = (tm->tm_sec * 1'000'000 + fsec) / 1'000'000 */ - PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * 1000000LL + fsec, 6)); + PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * INT64CONST(1000000) + fsec, 6)); else PG_RETURN_FLOAT8(tm->tm_sec + fsec / 1000000.0); break; @@ -2940,7 +2940,7 @@ timetz_part_common(PG_FUNCTION_ARGS, bool retnumeric) break; case DTK_MICROSEC: - intresult = tm->tm_sec * 1000000 + fsec; + intresult = tm->tm_sec * INT64CONST(1000000) + fsec; break; case DTK_MILLISEC: @@ -2949,7 +2949,7 @@ timetz_part_common(PG_FUNCTION_ARGS, bool retnumeric) * tm->tm_sec * 1000 + fsec / 1000 * = (tm->tm_sec * 1'000'000 + fsec) / 1000 */ - PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * 1000000LL + fsec, 3)); + PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * INT64CONST(1000000) + fsec, 3)); else PG_RETURN_FLOAT8(tm->tm_sec * 1000.0 + fsec / 1000.0); break; @@ -2960,7 +2960,7 @@ timetz_part_common(PG_FUNCTION_ARGS, bool retnumeric) * tm->tm_sec + fsec / 1'000'000 * = (tm->tm_sec * 1'000'000 + fsec) / 1'000'000 */ - PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * 1000000LL + fsec, 6)); + PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * INT64CONST(1000000) + fsec, 6)); else PG_RETURN_FLOAT8(tm->tm_sec + fsec / 1000000.0); break; @@ -2995,7 +2995,7 @@ timetz_part_common(PG_FUNCTION_ARGS, bool retnumeric) * time->time / 1'000'000 + time->zone * = (time->time + time->zone * 1'000'000) / 1'000'000 */ - PG_RETURN_NUMERIC(int64_div_fast_to_numeric(time->time + time->zone * 1000000LL, 6)); + PG_RETURN_NUMERIC(int64_div_fast_to_numeric(time->time + time->zone * INT64CONST(1000000), 6)); else PG_RETURN_FLOAT8(time->time / 1000000.0 + time->zone); } diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 280ee7f92bab8..3a93e92e4036d 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -4676,7 +4676,7 @@ timestamp_part_common(PG_FUNCTION_ARGS, bool retnumeric) switch (val) { case DTK_MICROSEC: - intresult = tm->tm_sec * 1000000.0 + fsec; + intresult = tm->tm_sec * INT64CONST(1000000) + fsec; break; case DTK_MILLISEC: @@ -4685,7 +4685,7 @@ timestamp_part_common(PG_FUNCTION_ARGS, bool retnumeric) * tm->tm_sec * 1000 + fsec / 1000 * = (tm->tm_sec * 1'000'000 + fsec) / 1000 */ - PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * 1000000LL + fsec, 3)); + PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * INT64CONST(1000000) + fsec, 3)); else PG_RETURN_FLOAT8(tm->tm_sec * 1000.0 + fsec / 1000.0); break; @@ -4696,7 +4696,7 @@ timestamp_part_common(PG_FUNCTION_ARGS, bool retnumeric) * tm->tm_sec + fsec / 1'000'000 * = (tm->tm_sec * 1'000'000 + fsec) / 1'000'000 */ - PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * 1000000LL + fsec, 6)); + PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * INT64CONST(1000000) + fsec, 6)); else PG_RETURN_FLOAT8(tm->tm_sec + fsec / 1000000.0); break; @@ -4772,8 +4772,8 @@ timestamp_part_common(PG_FUNCTION_ARGS, bool retnumeric) case DTK_JULIAN: if (retnumeric) PG_RETURN_NUMERIC(numeric_add_opt_error(int64_to_numeric(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday)), - numeric_div_opt_error(int64_to_numeric(((((tm->tm_hour * MINS_PER_HOUR) + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec) * 1000000LL + fsec), - int64_to_numeric(SECS_PER_DAY * 1000000LL), + numeric_div_opt_error(int64_to_numeric(((((tm->tm_hour * MINS_PER_HOUR) + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec) * INT64CONST(1000000) + fsec), + int64_to_numeric(SECS_PER_DAY * INT64CONST(1000000)), NULL), NULL)); else @@ -4962,7 +4962,7 @@ timestamptz_part_common(PG_FUNCTION_ARGS, bool retnumeric) break; case DTK_MICROSEC: - intresult = tm->tm_sec * 1000000 + fsec; + intresult = tm->tm_sec * INT64CONST(1000000) + fsec; break; case DTK_MILLISEC: @@ -4971,7 +4971,7 @@ timestamptz_part_common(PG_FUNCTION_ARGS, bool retnumeric) * tm->tm_sec * 1000 + fsec / 1000 * = (tm->tm_sec * 1'000'000 + fsec) / 1000 */ - PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * 1000000LL + fsec, 3)); + PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * INT64CONST(1000000) + fsec, 3)); else PG_RETURN_FLOAT8(tm->tm_sec * 1000.0 + fsec / 1000.0); break; @@ -4982,7 +4982,7 @@ timestamptz_part_common(PG_FUNCTION_ARGS, bool retnumeric) * tm->tm_sec + fsec / 1'000'000 * = (tm->tm_sec * 1'000'000 + fsec) / 1'000'000 */ - PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * 1000000LL + fsec, 6)); + PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * INT64CONST(1000000) + fsec, 6)); else PG_RETURN_FLOAT8(tm->tm_sec + fsec / 1000000.0); break; @@ -5046,8 +5046,8 @@ timestamptz_part_common(PG_FUNCTION_ARGS, bool retnumeric) case DTK_JULIAN: if (retnumeric) PG_RETURN_NUMERIC(numeric_add_opt_error(int64_to_numeric(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday)), - numeric_div_opt_error(int64_to_numeric(((((tm->tm_hour * MINS_PER_HOUR) + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec) * 1000000LL + fsec), - int64_to_numeric(SECS_PER_DAY * 1000000LL), + numeric_div_opt_error(int64_to_numeric(((((tm->tm_hour * MINS_PER_HOUR) + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec) * INT64CONST(1000000) + fsec), + int64_to_numeric(SECS_PER_DAY * INT64CONST(1000000)), NULL), NULL)); else @@ -5191,7 +5191,7 @@ interval_part_common(PG_FUNCTION_ARGS, bool retnumeric) switch (val) { case DTK_MICROSEC: - intresult = tm->tm_sec * 1000000 + fsec; + intresult = tm->tm_sec * INT64CONST(1000000) + fsec; break; case DTK_MILLISEC: @@ -5200,7 +5200,7 @@ interval_part_common(PG_FUNCTION_ARGS, bool retnumeric) * tm->tm_sec * 1000 + fsec / 1000 * = (tm->tm_sec * 1'000'000 + fsec) / 1000 */ - PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * 1000000LL + fsec, 3)); + PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * INT64CONST(1000000) + fsec, 3)); else PG_RETURN_FLOAT8(tm->tm_sec * 1000.0 + fsec / 1000.0); break; @@ -5211,7 +5211,7 @@ interval_part_common(PG_FUNCTION_ARGS, bool retnumeric) * tm->tm_sec + fsec / 1'000'000 * = (tm->tm_sec * 1'000'000 + fsec) / 1'000'000 */ - PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * 1000000LL + fsec, 6)); + PG_RETURN_NUMERIC(int64_div_fast_to_numeric(tm->tm_sec * INT64CONST(1000000) + fsec, 6)); else PG_RETURN_FLOAT8(tm->tm_sec + fsec / 1000000.0); break; From 7a3972597f6ed7a6976d81abb66c38a7a1c29058 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 12 Apr 2021 11:30:50 +0900 Subject: [PATCH 078/671] Fix out-of-bound memory access for interval -> char conversion Using Roman numbers (via "RM" or "rm") for a conversion to calculate a number of months has never considered the case of negative numbers, where a conversion could easily cause out-of-bound memory accesses. The conversions in themselves were not completely consistent either, as specifying 12 would result in NULL, but it should mean XII. This commit reworks the conversion calculation to have a more consistent behavior: - If the number of months and years is 0, return NULL. - If the number of months is positive, return the exact month number. - If the number of months is negative, do a backward calculation, with -1 meaning December, -2 November, etc. Reported-by: Theodor Arsenij Larionov-Trichkin Author: Julien Rouhaud Discussion: https://postgr.es/m/16953-f255a18f8c51f1d5@postgresql.org backpatch-through: 9.6 --- src/backend/utils/adt/formatting.c | 63 +++++++++++++++++++++---- src/test/regress/expected/timestamp.out | 36 ++++++++++++++ src/test/regress/sql/timestamp.sql | 6 +++ 3 files changed, 95 insertions(+), 10 deletions(-) diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index 783c7b5e7acf9..a1145e2721db9 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -3207,18 +3207,61 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col s += strlen(s); break; case DCH_RM: - if (!tm->tm_mon) - break; - sprintf(s, "%*s", S_FM(n->suffix) ? 0 : -4, - rm_months_upper[MONTHS_PER_YEAR - tm->tm_mon]); - s += strlen(s); - break; + /* FALLTHROUGH */ case DCH_rm: - if (!tm->tm_mon) + + /* + * For intervals, values like '12 month' will be reduced to 0 + * month and some years. These should be processed. + */ + if (!tm->tm_mon && !tm->tm_year) break; - sprintf(s, "%*s", S_FM(n->suffix) ? 0 : -4, - rm_months_lower[MONTHS_PER_YEAR - tm->tm_mon]); - s += strlen(s); + else + { + int mon = 0; + const char *const *months; + + if (n->key->id == DCH_RM) + months = rm_months_upper; + else + months = rm_months_lower; + + /* + * Compute the position in the roman-numeral array. Note + * that the contents of the array are reversed, December + * being first and January last. + */ + if (tm->tm_mon == 0) + { + /* + * This case is special, and tracks the case of full + * interval years. + */ + mon = tm->tm_year >= 0 ? 0 : MONTHS_PER_YEAR - 1; + } + else if (tm->tm_mon < 0) + { + /* + * Negative case. In this case, the calculation is + * reversed, where -1 means December, -2 November, + * etc. + */ + mon = -1 * (tm->tm_mon + 1); + } + else + { + /* + * Common case, with a strictly positive value. The + * position in the array matches with the value of + * tm_mon. + */ + mon = MONTHS_PER_YEAR - tm->tm_mon; + } + + sprintf(s, "%*s", S_FM(n->suffix) ? 0 : -4, + months[mon]); + s += strlen(s); + } break; case DCH_W: sprintf(s, "%d", (tm->tm_mday - 1) / 7 + 1); diff --git a/src/test/regress/expected/timestamp.out b/src/test/regress/expected/timestamp.out index ac1a4a9b6acad..6fdca6b295cba 100644 --- a/src/test/regress/expected/timestamp.out +++ b/src/test/regress/expected/timestamp.out @@ -1961,6 +1961,42 @@ SELECT to_char(d, 'FF1 FF2 FF3 FF4 FF5 FF6 ff1 ff2 ff3 ff4 ff5 ff6 MS US') 7 78 789 7890 78901 789012 7 78 789 7890 78901 789012 789 789012 (4 rows) +-- Roman months, with upper and lower case. +SELECT i, + to_char(i * interval '1mon', 'rm'), + to_char(i * interval '1mon', 'RM') + FROM generate_series(-13, 13) i; + i | to_char | to_char +-----+---------+--------- + -13 | xii | XII + -12 | i | I + -11 | ii | II + -10 | iii | III + -9 | iv | IV + -8 | v | V + -7 | vi | VI + -6 | vii | VII + -5 | viii | VIII + -4 | ix | IX + -3 | x | X + -2 | xi | XI + -1 | xii | XII + 0 | | + 1 | i | I + 2 | ii | II + 3 | iii | III + 4 | iv | IV + 5 | v | V + 6 | vi | VI + 7 | vii | VII + 8 | viii | VIII + 9 | ix | IX + 10 | x | X + 11 | xi | XI + 12 | xii | XII + 13 | i | I +(27 rows) + -- timestamp numeric fields constructor SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887); make_timestamp diff --git a/src/test/regress/sql/timestamp.sql b/src/test/regress/sql/timestamp.sql index d51e83127aee9..2841d2f2af462 100644 --- a/src/test/regress/sql/timestamp.sql +++ b/src/test/regress/sql/timestamp.sql @@ -353,6 +353,12 @@ SELECT to_char(d, 'FF1 FF2 FF3 FF4 FF5 FF6 ff1 ff2 ff3 ff4 ff5 ff6 MS US') ('2018-11-02 12:34:56.78901234') ) d(d); +-- Roman months, with upper and lower case. +SELECT i, + to_char(i * interval '1mon', 'rm'), + to_char(i * interval '1mon', 'RM') + FROM generate_series(-13, 13) i; + -- timestamp numeric fields constructor SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887); SELECT make_timestamp(-44, 3, 15, 12, 30, 15); From 15c1a9d9cb7604472d4823f48b64cdc02c441194 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Mon, 12 Apr 2021 09:27:10 +0530 Subject: [PATCH 079/671] doc: Update information of new messages for logical replication. Updated documentation for new messages added for streaming of in-progress transactions, as well as changes made to the existing messages. It also updates the information of protocol versions supported for logical replication. Author: Ajin Cherian Reviewed-by: Amit Kapila, Peter Smith, Euler Taveira Discussion: https://postgr.es/m/CAFPTHDYHN9m=MZZct-B=BYg_TETvv+kXvL9RD2DpaBS5pGxGYg@mail.gmail.com --- doc/src/sgml/protocol.sgml | 283 ++++++++++++++++++++++++++++++++++++- 1 file changed, 277 insertions(+), 6 deletions(-) diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index 380be5fb17c1d..2f4dde3bebd49 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -2797,9 +2797,11 @@ The commands accepted in replication mode are: - Protocol version. Currently only version 1 is - supported. - + Protocol version. Currently versions 1 and + 2 are supported. The version 2 + is supported only for server version 14 and above, and it allows + streaming of large in-progress transactions. + @@ -2855,7 +2857,10 @@ The commands accepted in replication mode are: The logical replication protocol sends individual transactions one by one. This means that all messages between a pair of Begin and Commit messages - belong to the same transaction. + belong to the same transaction. It also sends changes of large in-progress + transactions between a pair of Stream Start and Stream Stop messages. The + last stream of such a transaction contains Stream Commit or Stream Abort + message. @@ -6457,8 +6462,8 @@ Message - Xid of the transaction. The XID is sent only when user has - requested streaming of in-progress transactions. + Xid of the transaction (only present for streamed transactions). + This field is available since protocol version 2. @@ -6646,6 +6651,17 @@ Relation Int32 + + Xid of the transaction (only present for streamed transactions). + This field is available since protocol version 2. + + + + + + Int32 + + ID of the relation. @@ -6767,6 +6783,17 @@ Type Int32 + + Xid of the transaction (only present for streamed transactions). + This field is available since protocol version 2. + + + + + + Int32 + + ID of the data type. @@ -6821,6 +6848,17 @@ Insert Int32 + + Xid of the transaction (only present for streamed transactions). + This field is available since protocol version 2. + + + + + + Int32 + + ID of the relation corresponding to the ID in the relation message. @@ -6877,6 +6915,17 @@ Update Int32 + + Xid of the transaction (only present for streamed transactions). + This field is available since protocol version 2. + + + + + + Int32 + + ID of the relation corresponding to the ID in the relation message. @@ -6980,6 +7029,17 @@ Delete Int32 + + Xid of the transaction (only present for streamed transactions). + This field is available since protocol version 2. + + + + + + Int32 + + ID of the relation corresponding to the ID in the relation message. @@ -7058,6 +7118,17 @@ Truncate Int32 + + Xid of the transaction (only present for streamed transactions). + This field is available since protocol version 2. + + + + + + Int32 + + Number of relations @@ -7095,6 +7166,206 @@ Truncate +The following messages (Stream Start, Stream End, Stream Commit, and +Stream Abort) are available since protocol version 2. + + + + + + + +Stream Start + + + + + + + + Byte1('S') + + + + Identifies the message as a stream start message. + + + + + + Int32 + + + + Xid of the transaction. + + + + + + Int8 + + + + A value of 1 indicates this is the first stream segment for + this XID, 0 for any other stream segment. + + + + + + + + + + + +Stream Stop + + + + + + + + Byte1('E') + + + + Identifies the message as a stream stop message. + + + + + + + + + + + +Stream Commit + + + + + + + + Byte1('c') + + + + Identifies the message as a stream commit message. + + + + + + Int32 + + + + Xid of the transaction. + + + + + + Int8 + + + + Flags; currently unused (must be 0). + + + + + + Int64 + + + + The LSN of the commit. + + + + + + Int64 + + + + The end LSN of the transaction. + + + + + + Int64 + + + + Commit timestamp of the transaction. The value is in number + of microseconds since PostgreSQL epoch (2000-01-01). + + + + + + + + + + + +Stream Abort + + + + + + + + Byte1('A') + + + + Identifies the message as a stream abort message. + + + + + + Int32 + + + + Xid of the transaction. + + + + + + Int32 + + + + Xid of the subtransaction (will be same as xid of the transaction for top-level + transactions). + + + + + + + + + + + + + The following message parts are shared by the above messages. From b094063cd16d22b2f065a432580bb3568b2d8a77 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 12 Apr 2021 13:53:17 +0900 Subject: [PATCH 080/671] Move log_autovacuum_min_duration into its correct sections This GUC has already been classified as LOGGING_WHAT, but its location in postgresql.conf.sample and the documentation did not reflect that, so fix those inconsistencies. Author: Justin Pryzby Discussion: https://postgr.es/m/20210404012546.GK6592@telsasoft.com --- doc/src/sgml/config.sgml | 56 +++++++++---------- src/backend/utils/misc/postgresql.conf.sample | 9 +-- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 5bdb8650cc283..f749fe9ce7b46 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -6812,6 +6812,34 @@ local0.* /var/log/postgresql + + log_autovacuum_min_duration (integer) + + log_autovacuum_min_duration + configuration parameter + + + + + Causes each action executed by autovacuum to be logged if it ran for at + least the specified amount of time. Setting this to zero logs + all autovacuum actions. -1 (the default) disables + logging autovacuum actions. + If this value is specified without units, it is taken as milliseconds. + For example, if you set this to + 250ms then all automatic vacuums and analyzes that run + 250ms or longer will be logged. In addition, when this parameter is + set to any value other than -1, a message will be + logged if an autovacuum action is skipped due to a conflicting lock or a + concurrently dropped relation. Enabling this parameter can be helpful + in tracking autovacuum activity. This parameter can only be set in + the postgresql.conf file or on the server command line; + but the setting can be overridden for individual tables by + changing table storage parameters. + + + + log_checkpoints (boolean) @@ -7827,34 +7855,6 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; - - log_autovacuum_min_duration (integer) - - log_autovacuum_min_duration - configuration parameter - - - - - Causes each action executed by autovacuum to be logged if it ran for at - least the specified amount of time. Setting this to zero logs - all autovacuum actions. -1 (the default) disables - logging autovacuum actions. - If this value is specified without units, it is taken as milliseconds. - For example, if you set this to - 250ms then all automatic vacuums and analyzes that run - 250ms or longer will be logged. In addition, when this parameter is - set to any value other than -1, a message will be - logged if an autovacuum action is skipped due to a conflicting lock or a - concurrently dropped relation. Enabling this parameter can be helpful - in tracking autovacuum activity. This parameter can only be set in - the postgresql.conf file or on the server command line; - but the setting can be overridden for individual tables by - changing table storage parameters. - - - - autovacuum_max_workers (integer) diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 9830cfe382e6e..2f6dd014a81ed 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -531,6 +531,11 @@ #debug_print_rewritten = off #debug_print_plan = off #debug_pretty_print = on +#log_autovacuum_min_duration = -1 # log autovacuum activity; + # -1 disables, 0 logs all actions and + # their durations, > 0 logs only + # actions running at least this number + # of milliseconds. #log_checkpoints = off #log_connections = off #log_disconnections = off @@ -616,10 +621,6 @@ #autovacuum = on # Enable autovacuum subprocess? 'on' # requires track_counts to also be on. -#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and - # their durations, > 0 logs only - # actions running at least this number - # of milliseconds. #autovacuum_max_workers = 3 # max number of autovacuum subprocesses # (change requires restart) #autovacuum_naptime = 1min # time between autovacuum runs From 81e094bdfdd6cf6568cba2b25eea9876daceaacb Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Mon, 12 Apr 2021 21:34:23 +0900 Subject: [PATCH 081/671] Support tab-complete for TRUNCATE on foreign tables. Commit 8ff1c94649 extended TRUNCATE command so that it can also truncate foreign tables. But it forgot to support tab-complete for TRUNCATE on foreign tables. That is, previously tab-complete for TRUNCATE displayed only the names of regular tables. This commit improves tab-complete for TRUNCATE so that it displays also the names of foreign tables. Author: Fujii Masao Reviewed-by: Bharath Rupireddy Discussion: https://postgr.es/m/551ed8c1-f531-818b-664a-2cecdab99cd8@oss.nttdata.com --- src/bin/psql/tab-complete.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 26ac786c512dc..d34271e3b8799 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -549,6 +549,18 @@ static const SchemaQuery Query_for_list_of_selectables = { .result = "pg_catalog.quote_ident(c.relname)", }; +/* Relations supporting TRUNCATE */ +static const SchemaQuery Query_for_list_of_truncatables = { + .catname = "pg_catalog.pg_class c", + .selcondition = + "c.relkind IN (" CppAsString2(RELKIND_RELATION) ", " + CppAsString2(RELKIND_FOREIGN_TABLE) ", " + CppAsString2(RELKIND_PARTITIONED_TABLE) ")", + .viscondition = "pg_catalog.pg_table_is_visible(c.oid)", + .namespace = "c.relnamespace", + .result = "pg_catalog.quote_ident(c.relname)", +}; + /* Relations supporting GRANT are currently same as those supporting SELECT */ #define Query_for_list_of_grantables Query_for_list_of_selectables @@ -3834,14 +3846,14 @@ psql_completion(const char *text, int start, int end) /* TRUNCATE */ else if (Matches("TRUNCATE")) - COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, + COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_truncatables, " UNION SELECT 'TABLE'" " UNION SELECT 'ONLY'"); else if (Matches("TRUNCATE", "TABLE")) - COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, + COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_truncatables, " UNION SELECT 'ONLY'"); else if (HeadMatches("TRUNCATE") && TailMatches("ONLY")) - COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL); + COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_truncatables, NULL); else if (Matches("TRUNCATE", MatchAny) || Matches("TRUNCATE", "TABLE|ONLY", MatchAny) || Matches("TRUNCATE", "TABLE", "ONLY", MatchAny)) From 44c8a3d75997b08fa7645dac7ee5c7a918a235c7 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 12 Apr 2021 15:44:38 +0200 Subject: [PATCH 082/671] Fix files references in nls.mk broken by 37d2ff38031262a1778bc76a9c55fff7afbcf275 --- src/bin/pg_rewind/nls.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bin/pg_rewind/nls.mk b/src/bin/pg_rewind/nls.mk index 732d2bc23233a..5786a05ef2a2a 100644 --- a/src/bin/pg_rewind/nls.mk +++ b/src/bin/pg_rewind/nls.mk @@ -1,7 +1,7 @@ # src/bin/pg_rewind/nls.mk CATALOG_NAME = pg_rewind AVAIL_LANGUAGES = cs de es fr it ja ko pl pt_BR ru sv tr zh_CN -GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) copy_fetch.c datapagemap.c fetch.c file_ops.c filemap.c libpq_fetch.c parsexlog.c pg_rewind.c timeline.c xlogreader.c ../../common/fe_memutils.c ../../common/restricted_token.c ../../fe_utils/archive.c ../../fe_utils/recovery_gen.c +GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) datapagemap.c file_ops.c filemap.c libpq_source.c local_source.c parsexlog.c pg_rewind.c timeline.c xlogreader.c ../../common/fe_memutils.c ../../common/restricted_token.c ../../fe_utils/archive.c ../../fe_utils/recovery_gen.c GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) pg_fatal report_invalid_record:2 GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) \ pg_fatal:1:c-format \ From fc0fefbfe0d7e805f6a3a4aaaad7127090fcca51 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 12 Apr 2021 19:04:33 +0200 Subject: [PATCH 083/671] pg_amcheck: Add basic NLS support --- src/bin/pg_amcheck/nls.mk | 7 ++ src/bin/pg_amcheck/pg_amcheck.c | 114 ++++++++++++++++---------------- 2 files changed, 64 insertions(+), 57 deletions(-) create mode 100644 src/bin/pg_amcheck/nls.mk diff --git a/src/bin/pg_amcheck/nls.mk b/src/bin/pg_amcheck/nls.mk new file mode 100644 index 0000000000000..d80595c72efab --- /dev/null +++ b/src/bin/pg_amcheck/nls.mk @@ -0,0 +1,7 @@ +# src/bin/pg_amcheck/nls.mk +CATALOG_NAME = pg_amcheck +AVAIL_LANGUAGES = +GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \ + pg_amcheck.c +GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) +GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) diff --git a/src/bin/pg_amcheck/pg_amcheck.c b/src/bin/pg_amcheck/pg_amcheck.c index c9d9900693a9d..587a79a1a6da5 100644 --- a/src/bin/pg_amcheck/pg_amcheck.c +++ b/src/bin/pg_amcheck/pg_amcheck.c @@ -320,7 +320,7 @@ main(int argc, char *argv[]) if (opts.jobs < 1) { fprintf(stderr, - "number of parallel jobs must be at least 1\n"); + _("number of parallel jobs must be at least 1\n")); exit(1); } break; @@ -393,7 +393,7 @@ main(int argc, char *argv[]) opts.skip = "all frozen"; else { - fprintf(stderr, "invalid skip option\n"); + fprintf(stderr, _("invalid skip option\n")); exit(1); } break; @@ -402,13 +402,13 @@ main(int argc, char *argv[]) if (*endptr != '\0') { fprintf(stderr, - "invalid start block\n"); + _("invalid start block\n")); exit(1); } if (opts.startblock > MaxBlockNumber || opts.startblock < 0) { fprintf(stderr, - "start block out of bounds\n"); + _("start block out of bounds\n")); exit(1); } break; @@ -417,13 +417,13 @@ main(int argc, char *argv[]) if (*endptr != '\0') { fprintf(stderr, - "invalid end block\n"); + _("invalid end block\n")); exit(1); } if (opts.endblock > MaxBlockNumber || opts.endblock < 0) { fprintf(stderr, - "end block out of bounds\n"); + _("end block out of bounds\n")); exit(1); } break; @@ -442,7 +442,7 @@ main(int argc, char *argv[]) break; default: fprintf(stderr, - "Try \"%s --help\" for more information.\n", + _("Try \"%s --help\" for more information.\n"), progname); exit(1); } @@ -451,7 +451,7 @@ main(int argc, char *argv[]) if (opts.endblock >= 0 && opts.endblock < opts.startblock) { fprintf(stderr, - "end block precedes start block\n"); + _("end block precedes start block\n")); exit(1); } @@ -1116,52 +1116,52 @@ verify_btree_slot_handler(PGresult *res, PGconn *conn, void *context) static void help(const char *progname) { - printf("%s uses amcheck module to check objects in a PostgreSQL database for corruption.\n\n", progname); - printf("Usage:\n"); - printf(" %s [OPTION]... [DBNAME]\n", progname); - printf("\nTarget Options:\n"); - printf(" -a, --all check all databases\n"); - printf(" -d, --database=PATTERN check matching database(s)\n"); - printf(" -D, --exclude-database=PATTERN do NOT check matching database(s)\n"); - printf(" -i, --index=PATTERN check matching index(es)\n"); - printf(" -I, --exclude-index=PATTERN do NOT check matching index(es)\n"); - printf(" -r, --relation=PATTERN check matching relation(s)\n"); - printf(" -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n"); - printf(" -s, --schema=PATTERN check matching schema(s)\n"); - printf(" -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n"); - printf(" -t, --table=PATTERN check matching table(s)\n"); - printf(" -T, --exclude-table=PATTERN do NOT check matching table(s)\n"); - printf(" --no-dependent-indexes do NOT expand list of relations to include indexes\n"); - printf(" --no-dependent-toast do NOT expand list of relations to include toast\n"); - printf(" --no-strict-names do NOT require patterns to match objects\n"); - printf("\nTable Checking Options:\n"); - printf(" --exclude-toast-pointers do NOT follow relation toast pointers\n"); - printf(" --on-error-stop stop checking at end of first corrupt page\n"); - printf(" --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n"); - printf(" --startblock=BLOCK begin checking table(s) at the given block number\n"); - printf(" --endblock=BLOCK check table(s) only up to the given block number\n"); - printf("\nBtree Index Checking Options:\n"); - printf(" --heapallindexed check all heap tuples are found within indexes\n"); - printf(" --parent-check check index parent/child relationships\n"); - printf(" --rootdescend search from root page to refind tuples\n"); - printf("\nConnection options:\n"); - printf(" -h, --host=HOSTNAME database server host or socket directory\n"); - printf(" -p, --port=PORT database server port\n"); - printf(" -U, --username=USERNAME user name to connect as\n"); - printf(" -w, --no-password never prompt for password\n"); - printf(" -W, --password force password prompt\n"); - printf(" --maintenance-db=DBNAME alternate maintenance database\n"); - printf("\nOther Options:\n"); - printf(" -e, --echo show the commands being sent to the server\n"); - printf(" -j, --jobs=NUM use this many concurrent connections to the server\n"); - printf(" -q, --quiet don't write any messages\n"); - printf(" -v, --verbose write a lot of output\n"); - printf(" -V, --version output version information, then exit\n"); - printf(" -P, --progress show progress information\n"); - printf(" -?, --help show this help, then exit\n"); - - printf("\nReport bugs to <%s>.\n", PACKAGE_BUGREPORT); - printf("%s home page: <%s>\n", PACKAGE_NAME, PACKAGE_URL); + printf(_("%s uses amcheck module to check objects in a PostgreSQL database for corruption.\n\n"), progname); + printf(_("Usage:\n")); + printf(_(" %s [OPTION]... [DBNAME]\n"), progname); + printf(_("\nTarget Options:\n")); + printf(_(" -a, --all check all databases\n")); + printf(_(" -d, --database=PATTERN check matching database(s)\n")); + printf(_(" -D, --exclude-database=PATTERN do NOT check matching database(s)\n")); + printf(_(" -i, --index=PATTERN check matching index(es)\n")); + printf(_(" -I, --exclude-index=PATTERN do NOT check matching index(es)\n")); + printf(_(" -r, --relation=PATTERN check matching relation(s)\n")); + printf(_(" -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n")); + printf(_(" -s, --schema=PATTERN check matching schema(s)\n")); + printf(_(" -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n")); + printf(_(" -t, --table=PATTERN check matching table(s)\n")); + printf(_(" -T, --exclude-table=PATTERN do NOT check matching table(s)\n")); + printf(_(" --no-dependent-indexes do NOT expand list of relations to include indexes\n")); + printf(_(" --no-dependent-toast do NOT expand list of relations to include toast\n")); + printf(_(" --no-strict-names do NOT require patterns to match objects\n")); + printf(_("\nTable Checking Options:\n")); + printf(_(" --exclude-toast-pointers do NOT follow relation toast pointers\n")); + printf(_(" --on-error-stop stop checking at end of first corrupt page\n")); + printf(_(" --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n")); + printf(_(" --startblock=BLOCK begin checking table(s) at the given block number\n")); + printf(_(" --endblock=BLOCK check table(s) only up to the given block number\n")); + printf(_("\nBtree Index Checking Options:\n")); + printf(_(" --heapallindexed check all heap tuples are found within indexes\n")); + printf(_(" --parent-check check index parent/child relationships\n")); + printf(_(" --rootdescend search from root page to refind tuples\n")); + printf(_("\nConnection options:\n")); + printf(_(" -h, --host=HOSTNAME database server host or socket directory\n")); + printf(_(" -p, --port=PORT database server port\n")); + printf(_(" -U, --username=USERNAME user name to connect as\n")); + printf(_(" -w, --no-password never prompt for password\n")); + printf(_(" -W, --password force password prompt\n")); + printf(_(" --maintenance-db=DBNAME alternate maintenance database\n")); + printf(_("\nOther Options:\n")); + printf(_(" -e, --echo show the commands being sent to the server\n")); + printf(_(" -j, --jobs=NUM use this many concurrent connections to the server\n")); + printf(_(" -q, --quiet don't write any messages\n")); + printf(_(" -v, --verbose write a lot of output\n")); + printf(_(" -V, --version output version information, then exit\n")); + printf(_(" -P, --progress show progress information\n")); + printf(_(" -?, --help show this help, then exit\n")); + + printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT); + printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL); } /* @@ -1219,7 +1219,7 @@ progress_report(uint64 relations_total, uint64 relations_checked, * last call) */ fprintf(stderr, - "%*s/%s relations (%d%%) %*s/%s pages (%d%%) %*s", + _("%*s/%s relations (%d%%) %*s/%s pages (%d%%) %*s"), (int) strlen(total_rel), checked_rel, total_rel, percent_rel, (int) strlen(total_pages), @@ -1230,7 +1230,7 @@ progress_report(uint64 relations_total, uint64 relations_checked, bool truncate = (strlen(datname) > VERBOSE_DATNAME_LENGTH); fprintf(stderr, - "%*s/%s relations (%d%%) %*s/%s pages (%d%%), (%s%-*.*s)", + _("%*s/%s relations (%d%%) %*s/%s pages (%d%%), (%s%-*.*s)"), (int) strlen(total_rel), checked_rel, total_rel, percent_rel, (int) strlen(total_pages), @@ -1245,7 +1245,7 @@ progress_report(uint64 relations_total, uint64 relations_checked, } else fprintf(stderr, - "%*s/%s relations (%d%%) %*s/%s pages (%d%%)", + _("%*s/%s relations (%d%%) %*s/%s pages (%d%%)"), (int) strlen(total_rel), checked_rel, total_rel, percent_rel, (int) strlen(total_pages), From 6787e53fe59eed19095c771a8d3323fb59420733 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 12 Apr 2021 20:29:24 +0200 Subject: [PATCH 084/671] pg_upgrade: Print OID using %u instead of %d This could write wrong output into the cluster deletion script if a database OID exceeds the signed 32-bit range. --- src/bin/pg_upgrade/check.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c index d77183b8d124c..1c1c908664dea 100644 --- a/src/bin/pg_upgrade/check.c +++ b/src/bin/pg_upgrade/check.c @@ -600,7 +600,7 @@ create_script_for_old_cluster_deletion(char **deletion_script_file_name) PATH_SEPARATOR); for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++) - fprintf(script, RMDIR_CMD " %c%s%c%d%c\n", PATH_QUOTE, + fprintf(script, RMDIR_CMD " %c%s%c%u%c\n", PATH_QUOTE, fix_path_separator(os_info.old_tablespaces[tblnum]), PATH_SEPARATOR, old_cluster.dbarr.dbs[dbnum].db_oid, PATH_QUOTE); From c402b02b9fb53aee2a26876de90a8f95f9a9be92 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 12 Apr 2021 14:37:22 -0400 Subject: [PATCH 085/671] Fix old bug with coercing the result of a COLLATE expression. There are hacks in parse_coerce.c to push down a requested coercion to below any CollateExpr that may appear. However, we did that even if the requested data type is non-collatable, leading to an invalid expression tree in which CollateExpr is applied to a non-collatable type. The fix is just to drop the CollateExpr altogether, reasoning that it's useless. This bug is ten years old, dating to the original addition of COLLATE support. The lack of field complaints suggests that there aren't a lot of user-visible consequences. We noticed the problem because it would trigger an assertion in DefineVirtualRelation if the invalid structure appears as an output column of a view; however, in a non-assert build, you don't see a crash just a (subtly incorrect) complaint about applying collation to a non-collatable type. I found that by putting the incorrect structure further down in a view, I could make a view definition that would fail dump/reload, per the added regression test case. But CollateExpr doesn't do anything at run-time, so this likely doesn't lead to any really exciting consequences. Per report from Yulin Pei. Back-patch to all supported branches. Discussion: https://postgr.es/m/HK0PR01MB22744393C474D503E16C8509F4709@HK0PR01MB2274.apcprd01.prod.exchangelabs.com --- src/backend/parser/parse_coerce.c | 29 +++++++++++++++++---------- src/test/regress/expected/collate.out | 16 ++++++++++++++- src/test/regress/sql/collate.sql | 6 ++++++ 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c index d5310f27db1d2..aa4a21126d32b 100644 --- a/src/backend/parser/parse_coerce.c +++ b/src/backend/parser/parse_coerce.c @@ -95,6 +95,7 @@ coerce_to_target_type(ParseState *pstate, Node *expr, Oid exprtype, * *must* know that to avoid possibly calling hide_coercion_node on * something that wasn't generated by coerce_type. Note that if there are * multiple stacked CollateExprs, we just discard all but the topmost. + * Also, if the target type isn't collatable, we discard the CollateExpr. */ origexpr = expr; while (expr && IsA(expr, CollateExpr)) @@ -114,7 +115,7 @@ coerce_to_target_type(ParseState *pstate, Node *expr, Oid exprtype, ccontext, cformat, location, (result != expr && !IsA(result, Const))); - if (expr != origexpr) + if (expr != origexpr && type_is_collatable(targettype)) { /* Reinstall top CollateExpr */ CollateExpr *coll = (CollateExpr *) origexpr; @@ -388,20 +389,26 @@ coerce_type(ParseState *pstate, Node *node, { /* * If we have a COLLATE clause, we have to push the coercion - * underneath the COLLATE. This is really ugly, but there is little - * choice because the above hacks on Consts and Params wouldn't happen + * underneath the COLLATE; or discard the COLLATE if the target type + * isn't collatable. This is really ugly, but there is little choice + * because the above hacks on Consts and Params wouldn't happen * otherwise. This kluge has consequences in coerce_to_target_type. */ CollateExpr *coll = (CollateExpr *) node; - CollateExpr *newcoll = makeNode(CollateExpr); - newcoll->arg = (Expr *) - coerce_type(pstate, (Node *) coll->arg, - inputTypeId, targetTypeId, targetTypeMod, - ccontext, cformat, location); - newcoll->collOid = coll->collOid; - newcoll->location = coll->location; - return (Node *) newcoll; + result = coerce_type(pstate, (Node *) coll->arg, + inputTypeId, targetTypeId, targetTypeMod, + ccontext, cformat, location); + if (type_is_collatable(targetTypeId)) + { + CollateExpr *newcoll = makeNode(CollateExpr); + + newcoll->arg = (Expr *) result; + newcoll->collOid = coll->collOid; + newcoll->location = coll->location; + result = (Node *) newcoll; + } + return result; } pathtype = find_coercion_pathway(targetTypeId, inputTypeId, ccontext, &funcId); diff --git a/src/test/regress/expected/collate.out b/src/test/regress/expected/collate.out index c42ab8f7037e9..0b60b55514747 100644 --- a/src/test/regress/expected/collate.out +++ b/src/test/regress/expected/collate.out @@ -688,13 +688,26 @@ SELECT collation for ((SELECT b FROM collate_test1 LIMIT 1)); "C" (1 row) +-- old bug with not dropping COLLATE when coercing to non-collatable type +CREATE VIEW collate_on_int AS +SELECT c1+1 AS c1p FROM + (SELECT ('4' COLLATE "C")::INT AS c1) ss; +\d+ collate_on_int + View "collate_tests.collate_on_int" + Column | Type | Collation | Nullable | Default | Storage | Description +--------+---------+-----------+----------+---------+---------+------------- + c1p | integer | | | | plain | +View definition: + SELECT ss.c1 + 1 AS c1p + FROM ( SELECT 4 AS c1) ss; + -- -- Clean up. Many of these table names will be re-used if the user is -- trying to run any platform-specific collation tests later, so we -- must get rid of them. -- DROP SCHEMA collate_tests CASCADE; -NOTICE: drop cascades to 18 other objects +NOTICE: drop cascades to 19 other objects DETAIL: drop cascades to table collate_test1 drop cascades to table collate_test_like drop cascades to table collate_test2 @@ -713,3 +726,4 @@ drop cascades to table collate_test21 drop cascades to table collate_test22 drop cascades to collation mycoll2 drop cascades to table collate_test23 +drop cascades to view collate_on_int diff --git a/src/test/regress/sql/collate.sql b/src/test/regress/sql/collate.sql index 82f9c855b884a..30f811ba89693 100644 --- a/src/test/regress/sql/collate.sql +++ b/src/test/regress/sql/collate.sql @@ -266,6 +266,12 @@ SELECT collation for ('foo'::text); SELECT collation for ((SELECT a FROM collate_test1 LIMIT 1)); -- non-collatable type - error SELECT collation for ((SELECT b FROM collate_test1 LIMIT 1)); +-- old bug with not dropping COLLATE when coercing to non-collatable type +CREATE VIEW collate_on_int AS +SELECT c1+1 AS c1p FROM + (SELECT ('4' COLLATE "C")::INT AS c1) ss; +\d+ collate_on_int + -- -- Clean up. Many of these table names will be re-used if the user is From cf0020080a3de20287217621da57bfd840e9a693 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 12 Apr 2021 18:58:20 -0400 Subject: [PATCH 086/671] Remove no-longer-relevant test case. collate.icu.utf8.sql was exercising the recording of a collation dependency for an enum comparison expression, but such an expression should never have had any collation dependency in the first place. After I fixed that in commit c402b02b9, the test started failing. We don't need to test that scenario anymore, so just remove the now-useless test steps. (This test case is new in HEAD, so no need to back-patch.) Discussion: https://postgr.es/m/3044030.1618261159@sss.pgh.pa.us Discussion: https://postgr.es/m/HK0PR01MB22744393C474D503E16C8509F4709@HK0PR01MB2274.apcprd01.prod.exchangelabs.com --- src/test/regress/expected/collate.icu.utf8.out | 8 ++------ src/test/regress/sql/collate.icu.utf8.sql | 6 +----- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/test/regress/expected/collate.icu.utf8.out b/src/test/regress/expected/collate.icu.utf8.out index de70cb121274d..779405ef320ee 100644 --- a/src/test/regress/expected/collate.icu.utf8.out +++ b/src/test/regress/expected/collate.icu.utf8.out @@ -1960,7 +1960,6 @@ CREATE COLLATION custom ( ); CREATE TYPE myrange AS range (subtype = text); CREATE TYPE myrange_en_fr_ga AS range(subtype = t_en_fr_ga); -CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy'); CREATE TABLE collate_test ( id integer, val text COLLATE "fr-x-icu", @@ -1971,8 +1970,7 @@ CREATE TABLE collate_test ( d_en_fr_ga d_en_fr_ga, d_en_fr_ga_arr d_en_fr_ga[], myrange myrange, - myrange_en_fr_ga myrange_en_fr_ga, - mood mood + myrange_en_fr_ga myrange_en_fr_ga ); CREATE INDEX icuidx00_val ON collate_test(val); -- shouldn't get duplicated dependencies @@ -2009,7 +2007,6 @@ CREATE INDEX icuidx12_custom ON collate_test(id) WHERE ('foo', 'bar')::d_custom CREATE INDEX icuidx13_custom ON collate_test(id) WHERE ('foo' COLLATE custom, 'bar')::d_custom = ('foo', 'bar')::d_custom; CREATE INDEX icuidx14_myrange ON collate_test(myrange); CREATE INDEX icuidx15_myrange_en_fr_ga ON collate_test USING gist (myrange_en_fr_ga); -CREATE INDEX icuidx16_mood ON collate_test(id) WHERE mood > 'ok' COLLATE "fr-x-icu"; CREATE TABLE collate_part(id integer, val text COLLATE "en-x-icu") PARTITION BY range(id); CREATE TABLE collate_part_0 PARTITION OF collate_part FOR VALUES FROM (0) TO (1); CREATE TABLE collate_part_1 PARTITION OF collate_part FOR VALUES FROM (1) TO (1000000); @@ -2085,9 +2082,8 @@ ORDER BY 1, 2, 3; icuidx15_myrange_en_fr_ga | "en-x-icu" | up to date icuidx15_myrange_en_fr_ga | "fr-x-icu" | up to date icuidx15_myrange_en_fr_ga | "ga-x-icu" | up to date - icuidx16_mood | "fr-x-icu" | up to date icuidx17_part | "en-x-icu" | up to date -(58 rows) +(57 rows) -- Validate that REINDEX will update the stored version. UPDATE pg_depend SET refobjversion = 'not a version' diff --git a/src/test/regress/sql/collate.icu.utf8.sql b/src/test/regress/sql/collate.icu.utf8.sql index dd5d208854747..7f40c560398ea 100644 --- a/src/test/regress/sql/collate.icu.utf8.sql +++ b/src/test/regress/sql/collate.icu.utf8.sql @@ -758,8 +758,6 @@ CREATE COLLATION custom ( CREATE TYPE myrange AS range (subtype = text); CREATE TYPE myrange_en_fr_ga AS range(subtype = t_en_fr_ga); -CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy'); - CREATE TABLE collate_test ( id integer, val text COLLATE "fr-x-icu", @@ -770,8 +768,7 @@ CREATE TABLE collate_test ( d_en_fr_ga d_en_fr_ga, d_en_fr_ga_arr d_en_fr_ga[], myrange myrange, - myrange_en_fr_ga myrange_en_fr_ga, - mood mood + myrange_en_fr_ga myrange_en_fr_ga ); CREATE INDEX icuidx00_val ON collate_test(val); @@ -809,7 +806,6 @@ CREATE INDEX icuidx12_custom ON collate_test(id) WHERE ('foo', 'bar')::d_custom CREATE INDEX icuidx13_custom ON collate_test(id) WHERE ('foo' COLLATE custom, 'bar')::d_custom = ('foo', 'bar')::d_custom; CREATE INDEX icuidx14_myrange ON collate_test(myrange); CREATE INDEX icuidx15_myrange_en_fr_ga ON collate_test USING gist (myrange_en_fr_ga); -CREATE INDEX icuidx16_mood ON collate_test(id) WHERE mood > 'ok' COLLATE "fr-x-icu"; CREATE TABLE collate_part(id integer, val text COLLATE "en-x-icu") PARTITION BY range(id); CREATE TABLE collate_part_0 PARTITION OF collate_part FOR VALUES FROM (0) TO (1); From 885a87641930778d9580fdf0656af24e3f52d276 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 13 Apr 2021 09:42:01 +0900 Subject: [PATCH 087/671] Remove duplicated --no-sync switches in new tests of test_pg_dump These got introduced in 6568cef. Reported-by: Noah Misch Discussion: https://postgr.es/m/20210404220802.GA728316@rfd.leadboat.com --- src/test/modules/test_pg_dump/t/001_base.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/modules/test_pg_dump/t/001_base.pl b/src/test/modules/test_pg_dump/t/001_base.pl index 7c053c4e49d56..ef98c08493988 100644 --- a/src/test/modules/test_pg_dump/t/001_base.pl +++ b/src/test/modules/test_pg_dump/t/001_base.pl @@ -198,7 +198,7 @@ with_extension => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/with_extension.sql", - '--extension=test_pg_dump', '--no-sync', 'postgres', + '--extension=test_pg_dump', 'postgres', ], }, @@ -206,7 +206,7 @@ without_extension => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/without_extension.sql", - '--extension=plpgsql', '--no-sync', 'postgres', + '--extension=plpgsql', 'postgres', ], },); From b1df6b696b759f00ebbf02e6de64e259d4be5785 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Tue, 13 Apr 2021 12:34:25 +1200 Subject: [PATCH 088/671] Fix potential SSI hazard in heap_update(). Commit 6f38d4dac38 failed to heed a warning about the stability of the value pointed to by "otid". The caller is allowed to pass in a pointer to newtup->t_self, which will be updated during the execution of the function. Instead, the SSI check should use the value we copy into oldtup.t_self near the top of the function. Not a live bug, because newtup->t_self doesn't really get updated until a bit later, but it was confusing and broke the rule established by the comment. Back-patch to 13. Reported-by: Tom Lane Discussion: https://postgr.es/m/2689164.1618160085%40sss.pgh.pa.us --- src/backend/access/heap/heapam.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 03d4abc938b88..548720021edf8 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -3900,7 +3900,8 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, * will include checking the relation level, there is no benefit to a * separate check for the new tuple. */ - CheckForSerializableConflictIn(relation, otid, BufferGetBlockNumber(buffer)); + CheckForSerializableConflictIn(relation, &oldtup.t_self, + BufferGetBlockNumber(buffer)); /* * At this point newbuf and buffer are both pinned and locked, and newbuf From c3556f6fac349b31da2fd00107469ce36fb37536 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 12 Apr 2021 19:24:21 -0700 Subject: [PATCH 089/671] Port regress-python3-mangle.mk to Solaris "sed". It doesn't support "\(foo\)*" like a POSIX "sed" implementation does; see the Autoconf manual. Back-patch to 9.6 (all supported versions). --- src/pl/plpython/regress-python3-mangle.mk | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pl/plpython/regress-python3-mangle.mk b/src/pl/plpython/regress-python3-mangle.mk index e18cb821540d4..a785818a1724e 100644 --- a/src/pl/plpython/regress-python3-mangle.mk +++ b/src/pl/plpython/regress-python3-mangle.mk @@ -23,8 +23,10 @@ pgregress-python3-mangle: -e "s/def next/def __next__/g" \ -e "s/LANGUAGE plpythonu/LANGUAGE plpython3u/g" \ -e "s/LANGUAGE plpython2u/LANGUAGE plpython3u/g" \ - -e "s/EXTENSION \([^ ]*_\)*plpythonu/EXTENSION \1plpython3u/g" \ - -e "s/EXTENSION \([^ ]*_\)*plpython2u/EXTENSION \1plpython3u/g" \ + -e "s/EXTENSION plpythonu/EXTENSION plpython3u/g" \ + -e "s/EXTENSION plpython2u/EXTENSION plpython3u/g" \ + -e "s/EXTENSION \([^ ]*\)_plpythonu/EXTENSION \1_plpython3u/g" \ + -e "s/EXTENSION \([^ ]*\)_plpython2u/EXTENSION \1_plpython3u/g" \ -e 's/installing required extension "plpython2u"/installing required extension "plpython3u"/g' \ $$file >`echo $$file | sed 's,^.*/\([^/][^/]*/\)\([^/][^/]*\)$$,\1python3/\2,'` || exit; \ done From 455dbc010be53ac61fcb2da83b1e565f4c263449 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 12 Apr 2021 19:24:41 -0700 Subject: [PATCH 090/671] Use "-I." in directories holding Bison parsers, for Oracle compilers. With the Oracle Developer Studio 12.6 compiler, #line directives alter the current source file location for purposes of #include "..." directives. Hence, a VPATH build failed with 'cannot find include file: "specscanner.c"'. With two exceptions, parser-containing directories already add "-I. -I$(srcdir)"; eliminate the exceptions. Back-patch to 9.6 (all supported versions). --- src/backend/utils/adt/Makefile | 2 ++ src/test/isolation/Makefile | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/backend/utils/adt/Makefile b/src/backend/utils/adt/Makefile index 279ff15ade925..41b486bceffae 100644 --- a/src/backend/utils/adt/Makefile +++ b/src/backend/utils/adt/Makefile @@ -8,6 +8,8 @@ subdir = src/backend/utils/adt top_builddir = ../../../.. include $(top_builddir)/src/Makefile.global +override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) + # keep this list arranged alphabetically or it gets to be a mess OBJS = \ acl.o \ diff --git a/src/test/isolation/Makefile b/src/test/isolation/Makefile index edff04f041cdf..0d452c89d40cf 100644 --- a/src/test/isolation/Makefile +++ b/src/test/isolation/Makefile @@ -9,7 +9,8 @@ subdir = src/test/isolation top_builddir = ../../.. include $(top_builddir)/src/Makefile.global -override CPPFLAGS := -I$(srcdir) -I$(libpq_srcdir) -I$(srcdir)/../regress $(CPPFLAGS) +override CPPFLAGS := -I. -I$(srcdir) -I$(libpq_srcdir) \ + -I$(srcdir)/../regress $(CPPFLAGS) OBJS = \ $(WIN32RES) \ From 5fe83adad9efd5e3929f0465b44e786dc23c7b55 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Tue, 13 Apr 2021 14:21:51 +0900 Subject: [PATCH 091/671] doc: Fix typo in logicaldecoding.sgml. Introduced in commit 0aa8a01d04. Author: Peter Smith Discussion: https://postgr.es/m/CAHut+Ps8rkVHKWyjg09Fb1PaVG5-EhoFTFJ9OZMF4HPzDSXfew@mail.gmail.com --- doc/src/sgml/logicaldecoding.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/logicaldecoding.sgml b/doc/src/sgml/logicaldecoding.sgml index 5d049cdc6875a..cfd58d530808d 100644 --- a/doc/src/sgml/logicaldecoding.sgml +++ b/doc/src/sgml/logicaldecoding.sgml @@ -888,7 +888,7 @@ typedef bool (*LogicalDecodeFilterPrepareCB) (struct LogicalDecodingContext *ctx typedef void (*LogicalDecodeRollbackPreparedCB) (struct LogicalDecodingContext *ctx, ReorderBufferTXN *txn, - XLogRecPtr preapre_end_lsn, + XLogRecPtr prepare_end_lsn, TimestampTz prepare_time); From 34f581c39e97e2ea237255cf75cccebccc02d477 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 13 Apr 2021 12:17:24 -0400 Subject: [PATCH 092/671] Avoid improbable PANIC during heap_update. heap_update needs to clear any existing "all visible" flag on the old tuple's page (and on the new page too, if different). Per coding rules, to do this it must acquire pin on the appropriate visibility-map page while not holding exclusive buffer lock; which creates a race condition since someone else could set the flag whenever we're not holding the buffer lock. The code is supposed to handle that by re-checking the flag after acquiring buffer lock and retrying if it became set. However, one code path through heap_update itself, as well as one in its subroutine RelationGetBufferForTuple, failed to do this. The end result, in the unlikely event that a concurrent VACUUM did set the flag while we're transiently not holding lock, is a non-recurring "PANIC: wrong buffer passed to visibilitymap_clear" failure. This has been seen a few times in the buildfarm since recent VACUUM changes that added code paths that could set the all-visible flag while holding only exclusive buffer lock. Previously, the flag was (usually?) set only after doing LockBufferForCleanup, which would insist on buffer pin count zero, thus preventing the flag from becoming set partway through heap_update. However, it's clear that it's heap_update not VACUUM that's at fault here. What's less clear is whether there is any hazard from these bugs in released branches. heap_update is certainly violating API expectations, but if there is no code path that can set all-visible without a cleanup lock then it's only a latent bug. That's not 100% certain though, besides which we should worry about extensions or future back-patch fixes that could introduce such code paths. I chose to back-patch to v12. Fixing RelationGetBufferForTuple before that would require also back-patching portions of older fixes (notably 0d1fe9f74), which is more code churn than seems prudent to fix a hypothetical issue. Discussion: https://postgr.es/m/2247102.1618008027@sss.pgh.pa.us --- src/backend/access/heap/heapam.c | 44 ++++++++++++++++++++------------ src/backend/access/heap/hio.c | 24 ++++++++++++----- 2 files changed, 45 insertions(+), 23 deletions(-) diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 548720021edf8..13396eb7f2c51 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -3784,7 +3784,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, * overhead would be unchanged, that doesn't seem necessarily * worthwhile. */ - if (PageIsAllVisible(BufferGetPage(buffer)) && + if (PageIsAllVisible(page) && visibilitymap_clear(relation, block, vmbuffer, VISIBILITYMAP_ALL_FROZEN)) cleared_all_frozen = true; @@ -3846,36 +3846,46 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, * first". To implement this, we must do RelationGetBufferForTuple * while not holding the lock on the old page, and we must rely on it * to get the locks on both pages in the correct order. + * + * Another consideration is that we need visibility map page pin(s) if + * we will have to clear the all-visible flag on either page. If we + * call RelationGetBufferForTuple, we rely on it to acquire any such + * pins; but if we don't, we have to handle that here. Hence we need + * a loop. */ - if (newtupsize > pagefree) - { - /* Assume there's no chance to put heaptup on same page. */ - newbuf = RelationGetBufferForTuple(relation, heaptup->t_len, - buffer, 0, NULL, - &vmbuffer_new, &vmbuffer); - } - else + for (;;) { + if (newtupsize > pagefree) + { + /* It doesn't fit, must use RelationGetBufferForTuple. */ + newbuf = RelationGetBufferForTuple(relation, heaptup->t_len, + buffer, 0, NULL, + &vmbuffer_new, &vmbuffer); + /* We're all done. */ + break; + } + /* Acquire VM page pin if needed and we don't have it. */ + if (vmbuffer == InvalidBuffer && PageIsAllVisible(page)) + visibilitymap_pin(relation, block, &vmbuffer); /* Re-acquire the lock on the old tuple's page. */ LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); /* Re-check using the up-to-date free space */ pagefree = PageGetHeapFreeSpace(page); - if (newtupsize > pagefree) + if (newtupsize > pagefree || + (vmbuffer == InvalidBuffer && PageIsAllVisible(page))) { /* - * Rats, it doesn't fit anymore. We must now unlock and - * relock to avoid deadlock. Fortunately, this path should - * seldom be taken. + * Rats, it doesn't fit anymore, or somebody just now set the + * all-visible flag. We must now unlock and loop to avoid + * deadlock. Fortunately, this path should seldom be taken. */ LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - newbuf = RelationGetBufferForTuple(relation, heaptup->t_len, - buffer, 0, NULL, - &vmbuffer_new, &vmbuffer); } else { - /* OK, it fits here, so we're done. */ + /* We're all done. */ newbuf = buffer; + break; } } } diff --git a/src/backend/access/heap/hio.c b/src/backend/access/heap/hio.c index 37a1be4114ec6..ffc89685bff6f 100644 --- a/src/backend/access/heap/hio.c +++ b/src/backend/access/heap/hio.c @@ -293,9 +293,13 @@ RelationAddExtraBlocks(Relation relation, BulkInsertState bistate) * happen if space is freed in that page after heap_update finds there's not * enough there). In that case, the page will be pinned and locked only once. * - * For the vmbuffer and vmbuffer_other arguments, we avoid deadlock by - * locking them only after locking the corresponding heap page, and taking - * no further lwlocks while they are locked. + * We also handle the possibility that the all-visible flag will need to be + * cleared on one or both pages. If so, pin on the associated visibility map + * page must be acquired before acquiring buffer lock(s), to avoid possibly + * doing I/O while holding buffer locks. The pins are passed back to the + * caller using the input-output arguments vmbuffer and vmbuffer_other. + * Note that in some cases the caller might have already acquired such pins, + * which is indicated by these arguments not being InvalidBuffer on entry. * * We normally use FSM to help us find free space. However, * if HEAP_INSERT_SKIP_FSM is specified, we just append a new empty page to @@ -666,6 +670,8 @@ RelationGetBufferForTuple(Relation relation, Size len, if (otherBuffer != InvalidBuffer) { Assert(otherBuffer != buffer); + targetBlock = BufferGetBlockNumber(buffer); + Assert(targetBlock > otherBlock); if (unlikely(!ConditionalLockBuffer(otherBuffer))) { @@ -674,10 +680,16 @@ RelationGetBufferForTuple(Relation relation, Size len, LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); /* - * Because the buffer was unlocked for a while, it's possible, - * although unlikely, that the page was filled. If so, just retry - * from start. + * Because the buffers were unlocked for a while, it's possible, + * although unlikely, that an all-visible flag became set or that + * somebody used up the available space in the new page. We can + * use GetVisibilityMapPins to deal with the first case. In the + * second case, just retry from start. */ + GetVisibilityMapPins(relation, otherBuffer, buffer, + otherBlock, targetBlock, vmbuffer_other, + vmbuffer); + if (len > PageGetHeapFreeSpace(page)) { LockBuffer(otherBuffer, BUFFER_LOCK_UNLOCK); From c2db458c1036efae503ce5e451f8369e64c99541 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 13 Apr 2021 13:37:07 -0400 Subject: [PATCH 093/671] Redesign the caching done by get_cached_rowtype(). Previously, get_cached_rowtype() cached a pointer to a reference-counted tuple descriptor from the typcache, relying on the ExprContextCallback mechanism to release the tupdesc refcount when the expression tree using the tupdesc was destroyed. This worked fine when it was designed, but the introduction of within-DO-block COMMITs broke it. The refcount is logged in a transaction-lifespan resource owner, but plpgsql won't destroy simple expressions made within the DO block (before its first commit) until the DO block is exited. That results in a warning about a leaked tupdesc refcount when the COMMIT destroys the original resource owner, and then an error about the active resource owner not holding a matching refcount when the expression is destroyed. To fix, get rid of the need to have a shutdown callback at all, by instead caching a pointer to the relevant typcache entry. Those survive for the life of the backend, so we needn't worry about the pointer becoming stale. (For registered RECORD types, we can still cache a pointer to the tupdesc, knowing that it won't change for the life of the backend.) This mechanism has been in use in plpgsql and expandedrecord.c since commit 4b93f5799, and seems to work well. This change requires modifying the ExprEvalStep structs used by the relevant expression step types, which is slightly worrisome for back-patching. However, there seems no good reason for extensions to be familiar with the details of these particular sub-structs. Per report from Rohit Bhogate. Back-patch to v11 where within-DO-block COMMITs became a thing. Discussion: https://postgr.es/m/CAAV6ZkQRCVBh8qAY+SZiHnz+U+FqAGBBDaDTjF2yiKa2nJSLKg@mail.gmail.com --- src/backend/executor/execExpr.c | 31 ++-- src/backend/executor/execExprInterp.c | 163 ++++++++++-------- src/include/executor/execExpr.h | 36 ++-- .../src/expected/plpgsql_transaction.out | 24 +++ .../plpgsql/src/sql/plpgsql_transaction.sql | 20 +++ 5 files changed, 180 insertions(+), 94 deletions(-) diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c index 74fcfbea566e2..77c9d785d991a 100644 --- a/src/backend/executor/execExpr.c +++ b/src/backend/executor/execExpr.c @@ -1375,7 +1375,7 @@ ExecInitExprRec(Expr *node, ExprState *state, scratch.opcode = EEOP_FIELDSELECT; scratch.d.fieldselect.fieldnum = fselect->fieldnum; scratch.d.fieldselect.resulttype = fselect->resulttype; - scratch.d.fieldselect.argdesc = NULL; + scratch.d.fieldselect.rowcache.cacheptr = NULL; ExprEvalPushStep(state, &scratch); break; @@ -1385,7 +1385,7 @@ ExecInitExprRec(Expr *node, ExprState *state, { FieldStore *fstore = (FieldStore *) node; TupleDesc tupDesc; - TupleDesc *descp; + ExprEvalRowtypeCache *rowcachep; Datum *values; bool *nulls; int ncolumns; @@ -1401,9 +1401,9 @@ ExecInitExprRec(Expr *node, ExprState *state, values = (Datum *) palloc(sizeof(Datum) * ncolumns); nulls = (bool *) palloc(sizeof(bool) * ncolumns); - /* create workspace for runtime tupdesc cache */ - descp = (TupleDesc *) palloc(sizeof(TupleDesc)); - *descp = NULL; + /* create shared composite-type-lookup cache struct */ + rowcachep = palloc(sizeof(ExprEvalRowtypeCache)); + rowcachep->cacheptr = NULL; /* emit code to evaluate the composite input value */ ExecInitExprRec(fstore->arg, state, resv, resnull); @@ -1411,7 +1411,7 @@ ExecInitExprRec(Expr *node, ExprState *state, /* next, deform the input tuple into our workspace */ scratch.opcode = EEOP_FIELDSTORE_DEFORM; scratch.d.fieldstore.fstore = fstore; - scratch.d.fieldstore.argdesc = descp; + scratch.d.fieldstore.rowcache = rowcachep; scratch.d.fieldstore.values = values; scratch.d.fieldstore.nulls = nulls; scratch.d.fieldstore.ncolumns = ncolumns; @@ -1469,7 +1469,7 @@ ExecInitExprRec(Expr *node, ExprState *state, /* finally, form result tuple */ scratch.opcode = EEOP_FIELDSTORE_FORM; scratch.d.fieldstore.fstore = fstore; - scratch.d.fieldstore.argdesc = descp; + scratch.d.fieldstore.rowcache = rowcachep; scratch.d.fieldstore.values = values; scratch.d.fieldstore.nulls = nulls; scratch.d.fieldstore.ncolumns = ncolumns; @@ -1615,17 +1615,24 @@ ExecInitExprRec(Expr *node, ExprState *state, case T_ConvertRowtypeExpr: { ConvertRowtypeExpr *convert = (ConvertRowtypeExpr *) node; + ExprEvalRowtypeCache *rowcachep; + + /* cache structs must be out-of-line for space reasons */ + rowcachep = palloc(2 * sizeof(ExprEvalRowtypeCache)); + rowcachep[0].cacheptr = NULL; + rowcachep[1].cacheptr = NULL; /* evaluate argument into step's result area */ ExecInitExprRec(convert->arg, state, resv, resnull); /* and push conversion step */ scratch.opcode = EEOP_CONVERT_ROWTYPE; - scratch.d.convert_rowtype.convert = convert; - scratch.d.convert_rowtype.indesc = NULL; - scratch.d.convert_rowtype.outdesc = NULL; + scratch.d.convert_rowtype.inputtype = + exprType((Node *) convert->arg); + scratch.d.convert_rowtype.outputtype = convert->resulttype; + scratch.d.convert_rowtype.incache = &rowcachep[0]; + scratch.d.convert_rowtype.outcache = &rowcachep[1]; scratch.d.convert_rowtype.map = NULL; - scratch.d.convert_rowtype.initialized = false; ExprEvalPushStep(state, &scratch); break; @@ -2250,7 +2257,7 @@ ExecInitExprRec(Expr *node, ExprState *state, (int) ntest->nulltesttype); } /* initialize cache in case it's a row test */ - scratch.d.nulltest_row.argdesc = NULL; + scratch.d.nulltest_row.rowcache.cacheptr = NULL; /* first evaluate argument into result variable */ ExecInitExprRec(ntest->arg, state, diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c index 07948c1b13150..094e22d3923a9 100644 --- a/src/backend/executor/execExprInterp.c +++ b/src/backend/executor/execExprInterp.c @@ -145,8 +145,8 @@ static void ExecInitInterpreter(void); static void CheckVarSlotCompatibility(TupleTableSlot *slot, int attnum, Oid vartype); static void CheckOpSlotCompatibility(ExprEvalStep *op, TupleTableSlot *slot); static TupleDesc get_cached_rowtype(Oid type_id, int32 typmod, - TupleDesc *cache_field, ExprContext *econtext); -static void ShutdownTupleDescRef(Datum arg); + ExprEvalRowtypeCache *rowcache, + bool *changed); static void ExecEvalRowNullInt(ExprState *state, ExprEvalStep *op, ExprContext *econtext, bool checkisnull); @@ -1959,56 +1959,78 @@ CheckOpSlotCompatibility(ExprEvalStep *op, TupleTableSlot *slot) * get_cached_rowtype: utility function to lookup a rowtype tupdesc * * type_id, typmod: identity of the rowtype - * cache_field: where to cache the TupleDesc pointer in expression state node - * (field must be initialized to NULL) - * econtext: expression context we are executing in + * rowcache: space for caching identity info + * (rowcache->cacheptr must be initialized to NULL) + * changed: if not NULL, *changed is set to true on any update * - * NOTE: because the shutdown callback will be called during plan rescan, - * must be prepared to re-do this during any node execution; cannot call - * just once during expression initialization. + * The returned TupleDesc is not guaranteed pinned; caller must pin it + * to use it across any operation that might incur cache invalidation. + * (The TupleDesc is always refcounted, so just use IncrTupleDescRefCount.) + * + * NOTE: because composite types can change contents, we must be prepared + * to re-do this during any node execution; cannot call just once during + * expression initialization. */ static TupleDesc get_cached_rowtype(Oid type_id, int32 typmod, - TupleDesc *cache_field, ExprContext *econtext) + ExprEvalRowtypeCache *rowcache, + bool *changed) { - TupleDesc tupDesc = *cache_field; - - /* Do lookup if no cached value or if requested type changed */ - if (tupDesc == NULL || - type_id != tupDesc->tdtypeid || - typmod != tupDesc->tdtypmod) + if (type_id != RECORDOID) { - tupDesc = lookup_rowtype_tupdesc(type_id, typmod); + /* + * It's a named composite type, so use the regular typcache. Do a + * lookup first time through, or if the composite type changed. Note: + * "tupdesc_id == 0" may look redundant, but it protects against the + * admittedly-theoretical possibility that type_id was RECORDOID the + * last time through, so that the cacheptr isn't TypeCacheEntry *. + */ + TypeCacheEntry *typentry = (TypeCacheEntry *) rowcache->cacheptr; - if (*cache_field) + if (unlikely(typentry == NULL || + rowcache->tupdesc_id == 0 || + typentry->tupDesc_identifier != rowcache->tupdesc_id)) { - /* Release old tupdesc; but callback is already registered */ - ReleaseTupleDesc(*cache_field); - } - else - { - /* Need to register shutdown callback to release tupdesc */ - RegisterExprContextCallback(econtext, - ShutdownTupleDescRef, - PointerGetDatum(cache_field)); - } - *cache_field = tupDesc; + typentry = lookup_type_cache(type_id, TYPECACHE_TUPDESC); + if (typentry->tupDesc == NULL) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("type %s is not composite", + format_type_be(type_id)))); + rowcache->cacheptr = (void *) typentry; + rowcache->tupdesc_id = typentry->tupDesc_identifier; + if (changed) + *changed = true; + } + return typentry->tupDesc; + } + else + { + /* + * A RECORD type, once registered, doesn't change for the life of the + * backend. So we don't need a typcache entry as such, which is good + * because there isn't one. It's possible that the caller is asking + * about a different type than before, though. + */ + TupleDesc tupDesc = (TupleDesc) rowcache->cacheptr; + + if (unlikely(tupDesc == NULL || + rowcache->tupdesc_id != 0 || + type_id != tupDesc->tdtypeid || + typmod != tupDesc->tdtypmod)) + { + tupDesc = lookup_rowtype_tupdesc(type_id, typmod); + /* Drop pin acquired by lookup_rowtype_tupdesc */ + ReleaseTupleDesc(tupDesc); + rowcache->cacheptr = (void *) tupDesc; + rowcache->tupdesc_id = 0; /* not a valid value for non-RECORD */ + if (changed) + *changed = true; + } + return tupDesc; } - return tupDesc; } -/* - * Callback function to release a tupdesc refcount at econtext shutdown - */ -static void -ShutdownTupleDescRef(Datum arg) -{ - TupleDesc *cache_field = (TupleDesc *) DatumGetPointer(arg); - - if (*cache_field) - ReleaseTupleDesc(*cache_field); - *cache_field = NULL; -} /* * Fast-path functions, for very simple expressions @@ -2600,8 +2622,7 @@ ExecEvalRowNullInt(ExprState *state, ExprEvalStep *op, /* Lookup tupdesc if first time through or if type changes */ tupDesc = get_cached_rowtype(tupType, tupTypmod, - &op->d.nulltest_row.argdesc, - econtext); + &op->d.nulltest_row.rowcache, NULL); /* * heap_attisnull needs a HeapTuple not a bare HeapTupleHeader. @@ -3034,8 +3055,7 @@ ExecEvalFieldSelect(ExprState *state, ExprEvalStep *op, ExprContext *econtext) /* Lookup tupdesc if first time through or if type changes */ tupDesc = get_cached_rowtype(tupType, tupTypmod, - &op->d.fieldselect.argdesc, - econtext); + &op->d.fieldselect.rowcache, NULL); /* * Find field's attr record. Note we don't support system columns @@ -3093,9 +3113,9 @@ ExecEvalFieldStoreDeForm(ExprState *state, ExprEvalStep *op, ExprContext *econte { TupleDesc tupDesc; - /* Lookup tupdesc if first time through or after rescan */ + /* Lookup tupdesc if first time through or if type changes */ tupDesc = get_cached_rowtype(op->d.fieldstore.fstore->resulttype, -1, - op->d.fieldstore.argdesc, econtext); + op->d.fieldstore.rowcache, NULL); /* Check that current tupdesc doesn't have more fields than we allocated */ if (unlikely(tupDesc->natts > op->d.fieldstore.ncolumns)) @@ -3137,10 +3157,14 @@ ExecEvalFieldStoreDeForm(ExprState *state, ExprEvalStep *op, ExprContext *econte void ExecEvalFieldStoreForm(ExprState *state, ExprEvalStep *op, ExprContext *econtext) { + TupleDesc tupDesc; HeapTuple tuple; - /* argdesc should already be valid from the DeForm step */ - tuple = heap_form_tuple(*op->d.fieldstore.argdesc, + /* Lookup tupdesc (should be valid already) */ + tupDesc = get_cached_rowtype(op->d.fieldstore.fstore->resulttype, -1, + op->d.fieldstore.rowcache, NULL); + + tuple = heap_form_tuple(tupDesc, op->d.fieldstore.values, op->d.fieldstore.nulls); @@ -3157,13 +3181,13 @@ ExecEvalFieldStoreForm(ExprState *state, ExprEvalStep *op, ExprContext *econtext void ExecEvalConvertRowtype(ExprState *state, ExprEvalStep *op, ExprContext *econtext) { - ConvertRowtypeExpr *convert = op->d.convert_rowtype.convert; HeapTuple result; Datum tupDatum; HeapTupleHeader tuple; HeapTupleData tmptup; TupleDesc indesc, outdesc; + bool changed = false; /* NULL in -> NULL out */ if (*op->resnull) @@ -3172,24 +3196,19 @@ ExecEvalConvertRowtype(ExprState *state, ExprEvalStep *op, ExprContext *econtext tupDatum = *op->resvalue; tuple = DatumGetHeapTupleHeader(tupDatum); - /* Lookup tupdescs if first time through or after rescan */ - if (op->d.convert_rowtype.indesc == NULL) - { - get_cached_rowtype(exprType((Node *) convert->arg), -1, - &op->d.convert_rowtype.indesc, - econtext); - op->d.convert_rowtype.initialized = false; - } - if (op->d.convert_rowtype.outdesc == NULL) - { - get_cached_rowtype(convert->resulttype, -1, - &op->d.convert_rowtype.outdesc, - econtext); - op->d.convert_rowtype.initialized = false; - } - - indesc = op->d.convert_rowtype.indesc; - outdesc = op->d.convert_rowtype.outdesc; + /* + * Lookup tupdescs if first time through or if type changes. We'd better + * pin them since type conversion functions could do catalog lookups and + * hence cause cache invalidation. + */ + indesc = get_cached_rowtype(op->d.convert_rowtype.inputtype, -1, + op->d.convert_rowtype.incache, + &changed); + IncrTupleDescRefCount(indesc); + outdesc = get_cached_rowtype(op->d.convert_rowtype.outputtype, -1, + op->d.convert_rowtype.outcache, + &changed); + IncrTupleDescRefCount(outdesc); /* * We used to be able to assert that incoming tuples are marked with @@ -3200,8 +3219,8 @@ ExecEvalConvertRowtype(ExprState *state, ExprEvalStep *op, ExprContext *econtext Assert(HeapTupleHeaderGetTypeId(tuple) == indesc->tdtypeid || HeapTupleHeaderGetTypeId(tuple) == RECORDOID); - /* if first time through, initialize conversion map */ - if (!op->d.convert_rowtype.initialized) + /* if first time through, or after change, initialize conversion map */ + if (changed) { MemoryContext old_cxt; @@ -3210,7 +3229,6 @@ ExecEvalConvertRowtype(ExprState *state, ExprEvalStep *op, ExprContext *econtext /* prepare map from old to new attribute numbers */ op->d.convert_rowtype.map = convert_tuples_by_name(indesc, outdesc); - op->d.convert_rowtype.initialized = true; MemoryContextSwitchTo(old_cxt); } @@ -3240,6 +3258,9 @@ ExecEvalConvertRowtype(ExprState *state, ExprEvalStep *op, ExprContext *econtext */ *op->resvalue = heap_copy_tuple_as_datum(&tmptup, outdesc); } + + DecrTupleDescRefCount(indesc); + DecrTupleDescRefCount(outdesc); } /* diff --git a/src/include/executor/execExpr.h b/src/include/executor/execExpr.h index 2449cde7ad371..785600d04d09c 100644 --- a/src/include/executor/execExpr.h +++ b/src/include/executor/execExpr.h @@ -38,6 +38,20 @@ typedef bool (*ExecEvalBoolSubroutine) (ExprState *state, struct ExprEvalStep *op, ExprContext *econtext); +/* ExprEvalSteps that cache a composite type's tupdesc need one of these */ +/* (it fits in-line in some step types, otherwise allocate out-of-line) */ +typedef struct ExprEvalRowtypeCache +{ + /* + * cacheptr points to composite type's TypeCacheEntry if tupdesc_id is not + * 0; or for an anonymous RECORD type, it points directly at the cached + * tupdesc for the type, and tupdesc_id is 0. (We'd use separate fields + * if space were not at a premium.) Initial state is cacheptr == NULL. + */ + void *cacheptr; + uint64 tupdesc_id; /* last-seen tupdesc identifier, or 0 */ +} ExprEvalRowtypeCache; + /* * Discriminator for ExprEvalSteps. * @@ -355,8 +369,8 @@ typedef struct ExprEvalStep /* for EEOP_NULLTEST_ROWIS[NOT]NULL */ struct { - /* cached tupdesc pointer - filled at runtime */ - TupleDesc argdesc; + /* cached descriptor for composite type - filled at runtime */ + ExprEvalRowtypeCache rowcache; } nulltest_row; /* for EEOP_PARAM_EXEC/EXTERN */ @@ -481,8 +495,8 @@ typedef struct ExprEvalStep { AttrNumber fieldnum; /* field number to extract */ Oid resulttype; /* field's type */ - /* cached tupdesc pointer - filled at runtime */ - TupleDesc argdesc; + /* cached descriptor for composite type - filled at runtime */ + ExprEvalRowtypeCache rowcache; } fieldselect; /* for EEOP_FIELDSTORE_DEFORM / FIELDSTORE_FORM */ @@ -491,9 +505,9 @@ typedef struct ExprEvalStep /* original expression node */ FieldStore *fstore; - /* cached tupdesc pointer - filled at runtime */ - /* note that a DEFORM and FORM pair share the same tupdesc */ - TupleDesc *argdesc; + /* cached descriptor for composite type - filled at runtime */ + /* note that a DEFORM and FORM pair share the same cache */ + ExprEvalRowtypeCache *rowcache; /* workspace for column values */ Datum *values; @@ -533,12 +547,12 @@ typedef struct ExprEvalStep /* for EEOP_CONVERT_ROWTYPE */ struct { - ConvertRowtypeExpr *convert; /* original expression */ + Oid inputtype; /* input composite type */ + Oid outputtype; /* output composite type */ /* these three fields are filled at runtime: */ - TupleDesc indesc; /* tupdesc for input type */ - TupleDesc outdesc; /* tupdesc for output type */ + ExprEvalRowtypeCache *incache; /* cache for input type */ + ExprEvalRowtypeCache *outcache; /* cache for output type */ TupleConversionMap *map; /* column mapping */ - bool initialized; /* initialized for current types? */ } convert_rowtype; /* for EEOP_SCALARARRAYOP */ diff --git a/src/pl/plpgsql/src/expected/plpgsql_transaction.out b/src/pl/plpgsql/src/expected/plpgsql_transaction.out index 5f576231c3cd3..e205a1e00227c 100644 --- a/src/pl/plpgsql/src/expected/plpgsql_transaction.out +++ b/src/pl/plpgsql/src/expected/plpgsql_transaction.out @@ -379,6 +379,30 @@ SELECT * FROM test1; ---+--- (0 rows) +-- operations on composite types vs. internal transactions +DO LANGUAGE plpgsql $$ +declare + c test1 := row(42, 'hello'); + r bool; +begin + for i in 1..3 loop + r := c is not null; + raise notice 'r = %', r; + commit; + end loop; + for i in 1..3 loop + r := c is null; + raise notice 'r = %', r; + rollback; + end loop; +end +$$; +NOTICE: r = t +NOTICE: r = t +NOTICE: r = t +NOTICE: r = f +NOTICE: r = f +NOTICE: r = f -- COMMIT failures DO LANGUAGE plpgsql $$ BEGIN diff --git a/src/pl/plpgsql/src/sql/plpgsql_transaction.sql b/src/pl/plpgsql/src/sql/plpgsql_transaction.sql index 7575655c1ae69..94fd406b7a346 100644 --- a/src/pl/plpgsql/src/sql/plpgsql_transaction.sql +++ b/src/pl/plpgsql/src/sql/plpgsql_transaction.sql @@ -313,6 +313,26 @@ $$; SELECT * FROM test1; +-- operations on composite types vs. internal transactions +DO LANGUAGE plpgsql $$ +declare + c test1 := row(42, 'hello'); + r bool; +begin + for i in 1..3 loop + r := c is not null; + raise notice 'r = %', r; + commit; + end loop; + for i in 1..3 loop + r := c is null; + raise notice 'r = %', r; + rollback; + end loop; +end +$$; + + -- COMMIT failures DO LANGUAGE plpgsql $$ BEGIN From 69d5ca484b69771073380e234e5377b6d6a5ebaf Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 13 Apr 2021 15:10:18 -0400 Subject: [PATCH 094/671] Fix some inappropriately-disallowed uses of ALTER ROLE/DATABASE SET. Most GUC check hooks that inspect database state have special checks that prevent them from throwing hard errors for state-dependent issues when source == PGC_S_TEST. This allows, for example, "ALTER DATABASE d SET default_text_search_config = foo" when the "foo" configuration hasn't been created yet. Without this, we have problems during dump/reload or pg_upgrade, because pg_dump has no idea about possible dependencies of GUC values and can't ensure a safe restore ordering. However, check_role() and check_session_authorization() hadn't gotten the memo about that, and would throw hard errors anyway. It's not entirely clear what is the use-case for "ALTER ROLE x SET role = y", but we've now heard two independent complaints about that bollixing an upgrade, so apparently some people are doing it. Hence, fix these two functions to act more like other check hooks with similar needs. (But I did not change their insistence on being inside a transaction, as it's still not apparent that setting either GUC from the configuration file would be wise.) Also fix check_temp_buffers, which had a different form of the disease of making state-dependent checks without any exception for PGC_S_TEST. A cursory survey of other GUC check hooks did not find any more issues of this ilk. (There are a lot of interdependencies among PGC_POSTMASTER and PGC_SIGHUP GUCs, which may be a bad idea, but they're not relevant to the immediate concern because they can't be set via ALTER ROLE/DATABASE.) Per reports from Charlie Hornsby and Nathan Bossart. Back-patch to all supported branches. Discussion: https://postgr.es/m/HE1P189MB0523B31598B0C772C908088DB7709@HE1P189MB0523.EURP189.PROD.OUTLOOK.COM Discussion: https://postgr.es/m/20160711223641.1426.86096@wrigleys.postgresql.org --- src/backend/commands/variable.c | 32 ++++++++++++++++++++++++++++++++ src/backend/utils/misc/guc.c | 3 ++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index c5cf08b423780..0c85679420ca0 100644 --- a/src/backend/commands/variable.c +++ b/src/backend/commands/variable.c @@ -767,6 +767,17 @@ check_session_authorization(char **newval, void **extra, GucSource source) roleTup = SearchSysCache1(AUTHNAME, PointerGetDatum(*newval)); if (!HeapTupleIsValid(roleTup)) { + /* + * When source == PGC_S_TEST, we don't throw a hard error for a + * nonexistent user name, only a NOTICE. See comments in guc.h. + */ + if (source == PGC_S_TEST) + { + ereport(NOTICE, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("role \"%s\" does not exist", *newval))); + return true; + } GUC_check_errmsg("role \"%s\" does not exist", *newval); return false; } @@ -837,10 +848,23 @@ check_role(char **newval, void **extra, GucSource source) return false; } + /* + * When source == PGC_S_TEST, we don't throw a hard error for a + * nonexistent user name or insufficient privileges, only a NOTICE. + * See comments in guc.h. + */ + /* Look up the username */ roleTup = SearchSysCache1(AUTHNAME, PointerGetDatum(*newval)); if (!HeapTupleIsValid(roleTup)) { + if (source == PGC_S_TEST) + { + ereport(NOTICE, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("role \"%s\" does not exist", *newval))); + return true; + } GUC_check_errmsg("role \"%s\" does not exist", *newval); return false; } @@ -859,6 +883,14 @@ check_role(char **newval, void **extra, GucSource source) if (!InitializingParallelWorker && !is_member_of_role(GetSessionUserId(), roleid)) { + if (source == PGC_S_TEST) + { + ereport(NOTICE, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("permission will be denied to set role \"%s\"", + *newval))); + return true; + } GUC_check_errcode(ERRCODE_INSUFFICIENT_PRIVILEGE); GUC_check_errmsg("permission denied to set role \"%s\"", *newval); diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index d0a51b507d77b..2ffefdf943803 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -11777,8 +11777,9 @@ check_temp_buffers(int *newval, void **extra, GucSource source) { /* * Once local buffers have been initialized, it's too late to change this. + * However, if this is only a test call, allow it. */ - if (NLocBuffer && NLocBuffer != *newval) + if (source != PGC_S_TEST && NLocBuffer && NLocBuffer != *newval) { GUC_check_errdetail("\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session."); return false; From e8c435a824e123f43067ce6f69d66f14cfb8815e Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Tue, 13 Apr 2021 14:56:12 -0400 Subject: [PATCH 095/671] docs: Update TOAST storage docs for configurable compression. Mention that there are multiple TOAST compression methods and that the compression method used is stored in a TOAST pointer along with the other information that was stored there previously. Add a reference to the documentation for default_toast_compression, where the supported methods are listed, instead of duplicating that here. I haven't tried to preserve the text claiming that pglz is "fairly simple and very fast." I have no view on the veracity of the former claim, but LZ4 seems to be faster (and to compress better) so it seems better not to muddy the waters by talking about compression speed as a strong point of PGLZ. Patch by me, reviewed by Justin Pryzby. Discussion: http://postgr.es/m/CA+Tgmoaw_YBwQhOS_hhEPPwFhfAnu+VCLs18EfGr9gQw1z4H-w@mail.gmail.com --- doc/src/sgml/storage.sgml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/src/sgml/storage.sgml b/doc/src/sgml/storage.sgml index 3234adb639f58..bfccda77afde4 100644 --- a/doc/src/sgml/storage.sgml +++ b/doc/src/sgml/storage.sgml @@ -394,9 +394,9 @@ Further details appear in . The compression technique used for either in-line or out-of-line compressed -data is a fairly simple and very fast member -of the LZ family of compression techniques. See -src/common/pg_lzcompress.c for the details. +data can be selected using the COMPRESSION option on a per-column +basis when creating a table. The default for columns with no explicit setting +is taken from the value of . @@ -425,8 +425,9 @@ retrieval of the values. A pointer datum representing an out-of-line on-disk TOASTed value therefore needs to store the OID of the TOAST table in which to look and the OID of the specific value (its chunk_id). For convenience, pointer datums also store the -logical datum size (original uncompressed data length) and physical stored size -(different if compression was applied). Allowing for the varlena header bytes, +logical datum size (original uncompressed data length), physical stored size +(different if compression was applied), and the compression method used, if +any. Allowing for the varlena header bytes, the total size of an on-disk TOAST pointer datum is therefore 18 bytes regardless of the actual size of the represented value. From 6c0373ab77359c94b279c4e67c91aa623841af65 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 13 Apr 2021 15:39:33 -0400 Subject: [PATCH 096/671] Allow table-qualified variable names in ON CONFLICT ... WHERE. Previously you could only use unqualified variable names here. While that's not a functional deficiency, since only the target table can be referenced, it's a surprising inconsistency with the rules for partial-index predicates, on which this syntax is supposedly modeled. The fix for that is no harder than passing addToRelNameSpace = true to addNSItemToQuery. However, it's really pretty bogus for transformOnConflictArbiter and transformOnConflictClause to be messing with the namespace item for the target table at all. It's not theirs to manage, it results in duplicative creations of namespace items, and transformOnConflictClause wasn't even doing it quite correctly (that coding resulted in two nsitems for the target table, since it hadn't cleaned out the existing one). Hence, make transformInsertStmt responsible for setting up the target nsitem once for both these clauses and RETURNING. Also, arrange for ON CONFLICT ... UPDATE's "excluded" pseudo-relation to be added to the rangetable before we run transformOnConflictArbiter. This produces a more helpful HINT if someone writes "excluded.col" in the arbiter expression. Per bug #16958 from Lukas Eder. Although I agree this is a bug, the consequences are hardly severe, so no back-patch. Discussion: https://postgr.es/m/16958-963f638020de271c@postgresql.org --- src/backend/parser/analyze.c | 81 +++++++++++-------- src/backend/parser/parse_clause.c | 13 --- src/test/regress/expected/insert_conflict.out | 4 +- src/test/regress/sql/insert_conflict.sql | 2 +- 4 files changed, 52 insertions(+), 48 deletions(-) diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 9f13880d19a32..862f18a92f270 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -869,25 +869,27 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) attr_num - FirstLowInvalidHeapAttributeNumber); } - /* Process ON CONFLICT, if any. */ - if (stmt->onConflictClause) - qry->onConflict = transformOnConflictClause(pstate, - stmt->onConflictClause); - /* - * If we have a RETURNING clause, we need to add the target relation to - * the query namespace before processing it, so that Var references in - * RETURNING will work. Also, remove any namespace entries added in a + * If we have any clauses yet to process, set the query namespace to + * contain only the target relation, removing any entries added in a * sub-SELECT or VALUES list. */ - if (stmt->returningList) + if (stmt->onConflictClause || stmt->returningList) { pstate->p_namespace = NIL; addNSItemToQuery(pstate, pstate->p_target_nsitem, false, true, true); + } + + /* Process ON CONFLICT, if any. */ + if (stmt->onConflictClause) + qry->onConflict = transformOnConflictClause(pstate, + stmt->onConflictClause); + + /* Process RETURNING, if any. */ + if (stmt->returningList) qry->returningList = transformReturningList(pstate, stmt->returningList); - } /* done building the range table and jointree */ qry->rtable = pstate->p_rtable; @@ -1014,6 +1016,7 @@ static OnConflictExpr * transformOnConflictClause(ParseState *pstate, OnConflictClause *onConflictClause) { + ParseNamespaceItem *exclNSItem = NULL; List *arbiterElems; Node *arbiterWhere; Oid arbiterConstraint; @@ -1023,29 +1026,17 @@ transformOnConflictClause(ParseState *pstate, List *exclRelTlist = NIL; OnConflictExpr *result; - /* Process the arbiter clause, ON CONFLICT ON (...) */ - transformOnConflictArbiter(pstate, onConflictClause, &arbiterElems, - &arbiterWhere, &arbiterConstraint); - - /* Process DO UPDATE */ + /* + * If this is ON CONFLICT ... UPDATE, first create the range table entry + * for the EXCLUDED pseudo relation, so that that will be present while + * processing arbiter expressions. (You can't actually reference it from + * there, but this provides a useful error message if you try.) + */ if (onConflictClause->action == ONCONFLICT_UPDATE) { Relation targetrel = pstate->p_target_relation; - ParseNamespaceItem *exclNSItem; RangeTblEntry *exclRte; - /* - * All INSERT expressions have been parsed, get ready for potentially - * existing SET statements that need to be processed like an UPDATE. - */ - pstate->p_is_insert = false; - - /* - * Add range table entry for the EXCLUDED pseudo relation. relkind is - * set to composite to signal that we're not dealing with an actual - * relation, and no permission checks are required on it. (We'll - * check the actual target relation, instead.) - */ exclNSItem = addRangeTableEntryForRelation(pstate, targetrel, RowExclusiveLock, @@ -1054,6 +1045,11 @@ transformOnConflictClause(ParseState *pstate, exclRte = exclNSItem->p_rte; exclRelIndex = exclNSItem->p_rtindex; + /* + * relkind is set to composite to signal that we're not dealing with + * an actual relation, and no permission checks are required on it. + * (We'll check the actual target relation, instead.) + */ exclRte->relkind = RELKIND_COMPOSITE_TYPE; exclRte->requiredPerms = 0; /* other permissions fields in exclRte are already empty */ @@ -1061,14 +1057,27 @@ transformOnConflictClause(ParseState *pstate, /* Create EXCLUDED rel's targetlist for use by EXPLAIN */ exclRelTlist = BuildOnConflictExcludedTargetlist(targetrel, exclRelIndex); + } + + /* Process the arbiter clause, ON CONFLICT ON (...) */ + transformOnConflictArbiter(pstate, onConflictClause, &arbiterElems, + &arbiterWhere, &arbiterConstraint); + + /* Process DO UPDATE */ + if (onConflictClause->action == ONCONFLICT_UPDATE) + { + /* + * Expressions in the UPDATE targetlist need to be handled like UPDATE + * not INSERT. We don't need to save/restore this because all INSERT + * expressions have been parsed already. + */ + pstate->p_is_insert = false; /* - * Add EXCLUDED and the target RTE to the namespace, so that they can - * be used in the UPDATE subexpressions. + * Add the EXCLUDED pseudo relation to the query namespace, making it + * available in the UPDATE subexpressions. */ addNSItemToQuery(pstate, exclNSItem, false, true, true); - addNSItemToQuery(pstate, pstate->p_target_nsitem, - false, true, true); /* * Now transform the UPDATE subexpressions. @@ -1079,6 +1088,14 @@ transformOnConflictClause(ParseState *pstate, onConflictWhere = transformWhereClause(pstate, onConflictClause->whereClause, EXPR_KIND_WHERE, "WHERE"); + + /* + * Remove the EXCLUDED pseudo relation from the query namespace, since + * it's not supposed to be available in RETURNING. (Maybe someday we + * could allow that, and drop this step.) + */ + Assert((ParseNamespaceItem *) llast(pstate->p_namespace) == exclNSItem); + pstate->p_namespace = list_delete_last(pstate->p_namespace); } /* Finally, build ON CONFLICT DO [NOTHING | UPDATE] expression */ diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index af80aa4593689..89d95d3e949b1 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -3222,17 +3222,6 @@ transformOnConflictArbiter(ParseState *pstate, /* ON CONFLICT DO NOTHING does not require an inference clause */ if (infer) { - List *save_namespace; - - /* - * While we process the arbiter expressions, accept only non-qualified - * references to the target table. Hide any other relations. - */ - save_namespace = pstate->p_namespace; - pstate->p_namespace = NIL; - addNSItemToQuery(pstate, pstate->p_target_nsitem, - false, false, true); - if (infer->indexElems) *arbiterExpr = resolve_unique_index_expr(pstate, infer, pstate->p_target_relation); @@ -3245,8 +3234,6 @@ transformOnConflictArbiter(ParseState *pstate, *arbiterWhere = transformExpr(pstate, infer->whereClause, EXPR_KIND_INDEX_PREDICATE); - pstate->p_namespace = save_namespace; - /* * If the arbiter is specified by constraint name, get the constraint * OID and mark the constrained columns as requiring SELECT privilege, diff --git a/src/test/regress/expected/insert_conflict.out b/src/test/regress/expected/insert_conflict.out index a54a51e5c72d5..66d8633e3ec56 100644 --- a/src/test/regress/expected/insert_conflict.out +++ b/src/test/regress/expected/insert_conflict.out @@ -248,7 +248,7 @@ insert into insertconflicttest values (1, 'Apple') on conflict (keyy) do update ERROR: column "keyy" does not exist LINE 1: ...nsertconflicttest values (1, 'Apple') on conflict (keyy) do ... ^ -HINT: Perhaps you meant to reference the column "insertconflicttest.key". +HINT: Perhaps you meant to reference the column "insertconflicttest.key" or the column "excluded.key". -- Have useful HINT for EXCLUDED.* RTE within UPDATE: insert into insertconflicttest values (1, 'Apple') on conflict (key) do update set fruit = excluded.fruitt; ERROR: column excluded.fruitt does not exist @@ -373,7 +373,7 @@ drop index fruit_index; create unique index partial_key_index on insertconflicttest(key) where fruit like '%berry'; -- Succeeds insert into insertconflicttest values (23, 'Blackberry') on conflict (key) where fruit like '%berry' do update set fruit = excluded.fruit; -insert into insertconflicttest values (23, 'Blackberry') on conflict (key) where fruit like '%berry' and fruit = 'inconsequential' do nothing; +insert into insertconflicttest as t values (23, 'Blackberry') on conflict (key) where fruit like '%berry' and t.fruit = 'inconsequential' do nothing; -- fails insert into insertconflicttest values (23, 'Blackberry') on conflict (key) do update set fruit = excluded.fruit; ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification diff --git a/src/test/regress/sql/insert_conflict.sql b/src/test/regress/sql/insert_conflict.sql index 43691cd335798..23d5778b821e0 100644 --- a/src/test/regress/sql/insert_conflict.sql +++ b/src/test/regress/sql/insert_conflict.sql @@ -214,7 +214,7 @@ create unique index partial_key_index on insertconflicttest(key) where fruit lik -- Succeeds insert into insertconflicttest values (23, 'Blackberry') on conflict (key) where fruit like '%berry' do update set fruit = excluded.fruit; -insert into insertconflicttest values (23, 'Blackberry') on conflict (key) where fruit like '%berry' and fruit = 'inconsequential' do nothing; +insert into insertconflicttest as t values (23, 'Blackberry') on conflict (key) where fruit like '%berry' and t.fruit = 'inconsequential' do nothing; -- fails insert into insertconflicttest values (23, 'Blackberry') on conflict (key) do update set fruit = excluded.fruit; From 60f1f09ff44308667ef6c72fbafd68235e55ae27 Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Tue, 13 Apr 2021 12:58:31 -0700 Subject: [PATCH 097/671] Don't truncate heap when VACUUM's failsafe is in effect. It seems like a good idea to bypass heap truncation when the wraparound failsafe mechanism (which was added in commit 1e55e7d1) is in effect. Deliberately don't bypass heap truncation in the INDEX_CLEANUP=off case, even though it is similar to the failsafe case. There is already a separate reloption (and related VACUUM parameter) for that. Reported-By: Masahiko Sawada Discussion: https://postgr.es/m/CAD21AoDWRh6oTN5T8wa+cpZUVpHXET8BJ8Da7WHVHpwkPP6KLg@mail.gmail.com --- src/backend/access/heap/vacuumlazy.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index f592e71364dc0..9f9ba5d308b3c 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -2139,9 +2139,8 @@ lazy_vacuum(LVRelState *vacrel, bool onecall) * far in the past. * * From this point on the VACUUM operation will do no further index - * vacuuming or heap vacuuming. It will do any remaining pruning that - * may be required, plus other heap-related and relation-level - * maintenance tasks. But that's it. + * vacuuming or heap vacuuming. This VACUUM operation won't end up + * back here again. */ Assert(vacrel->do_failsafe); } @@ -2534,8 +2533,11 @@ lazy_check_needs_freeze(Buffer buf, bool *hastup, LVRelState *vacrel) * relfrozenxid and/or relminmxid that is dangerously far in the past. * * Triggering the failsafe makes the ongoing VACUUM bypass any further index - * vacuuming and heap vacuuming. It also stops the ongoing VACUUM from - * applying any cost-based delay that may be in effect. + * vacuuming and heap vacuuming. Truncating the heap is also bypassed. + * + * Any remaining work (work that VACUUM cannot just bypass) is typically sped + * up when the failsafe triggers. VACUUM stops applying any cost-based delay + * that it started out with. * * Returns true when failsafe has been triggered. * @@ -3097,14 +3099,12 @@ lazy_cleanup_one_index(Relation indrel, IndexBulkDeleteResult *istat, * Don't even think about it unless we have a shot at releasing a goodly * number of pages. Otherwise, the time taken isn't worth it. * + * Also don't attempt it if wraparound failsafe is in effect. It's hard to + * predict how long lazy_truncate_heap will take. Don't take any chances. + * * Also don't attempt it if we are doing early pruning/vacuuming, because a * scan which cannot find a truncated heap page cannot determine that the - * snapshot is too old to read that page. We might be able to get away with - * truncating all except one of the pages, setting its LSN to (at least) the - * maximum of the truncated range if we also treated an index leaf tuple - * pointing to a missing heap page as something to trigger the "snapshot too - * old" error, but that seems fragile and seems like it deserves its own patch - * if we consider it. + * snapshot is too old to read that page. * * This is split out so that we can test whether truncation is going to be * called for before we actually do it. If you change the logic here, be @@ -3118,6 +3118,9 @@ should_attempt_truncation(LVRelState *vacrel, VacuumParams *params) if (params->truncate == VACOPT_TERNARY_DISABLED) return false; + if (vacrel->do_failsafe) + return false; + possibly_freeable = vacrel->rel_pages - vacrel->nonempty_pages; if (possibly_freeable > 0 && (possibly_freeable >= REL_TRUNCATE_MINIMUM || From 20661c15db8f430d4880ba685e6b12afa271c1ac Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Wed, 14 Apr 2021 00:46:12 +0200 Subject: [PATCH 098/671] Initialize t_self and t_tableOid in statext_expressions_load The function is building a fake heap tuple, but left some of the header fields (tid and table OID) uninitialized. Per Coverity report. Reported-by: Ranier Vilela Discussion: https://postgr.es/m/CAEudQApj6h8tZ0-eP5Af5PKc5NG1YUc7=SdN_99YoHS51fKa0Q@mail.gmail.com --- src/backend/statistics/extended_stats.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index 4bbd85f401ece..e54e8aa8e0f55 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -2420,6 +2420,8 @@ statext_expressions_load(Oid stxoid, int idx) /* Build a temporary HeapTuple control structure */ tmptup.t_len = HeapTupleHeaderGetDatumLength(td); + ItemPointerSetInvalid(&(tmptup.t_self)); + tmptup.t_tableOid = InvalidOid; tmptup.t_data = td; tup = heap_copytuple(&tmptup); From cca57c1d9bf7eeba5b81115e0b82651cf3d8e4ea Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Wed, 14 Apr 2021 08:55:03 +0530 Subject: [PATCH 099/671] Use NameData datatype for slotname in stats. This will make it consistent with the other usage of slotname in the code. In the passing, change pgstat_report_replslot signature to use a structure rather than multiple parameters. Reported-by: Andres Freund Author: Vignesh C Reviewed-by: Sawada Masahiko, Amit Kapila Discussion: https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de --- src/backend/postmaster/pgstat.c | 32 +++++++++++------------ src/backend/replication/logical/logical.c | 13 ++++++--- src/backend/replication/slot.c | 7 ++++- src/backend/utils/adt/pgstatfuncs.c | 2 +- src/include/pgstat.h | 11 +++----- 5 files changed, 36 insertions(+), 29 deletions(-) diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index f4467625f7f01..666ce95d083d8 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -64,6 +64,7 @@ #include "storage/pg_shmem.h" #include "storage/proc.h" #include "storage/procsignal.h" +#include "utils/builtins.h" #include "utils/guc.h" #include "utils/memutils.h" #include "utils/ps_status.h" @@ -1539,7 +1540,7 @@ pgstat_reset_replslot_counter(const char *name) if (SlotIsPhysical(slot)) return; - strlcpy(msg.m_slotname, name, NAMEDATALEN); + namestrcpy(&msg.m_slotname, name); msg.clearall = false; } else @@ -1812,10 +1813,7 @@ pgstat_report_tempfile(size_t filesize) * ---------- */ void -pgstat_report_replslot(const char *slotname, PgStat_Counter spilltxns, - PgStat_Counter spillcount, PgStat_Counter spillbytes, - PgStat_Counter streamtxns, PgStat_Counter streamcount, - PgStat_Counter streambytes) +pgstat_report_replslot(const PgStat_ReplSlotStats *repSlotStat) { PgStat_MsgReplSlot msg; @@ -1823,14 +1821,14 @@ pgstat_report_replslot(const char *slotname, PgStat_Counter spilltxns, * Prepare and send the message */ pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_REPLSLOT); - strlcpy(msg.m_slotname, slotname, NAMEDATALEN); + namestrcpy(&msg.m_slotname, NameStr(repSlotStat->slotname)); msg.m_drop = false; - msg.m_spill_txns = spilltxns; - msg.m_spill_count = spillcount; - msg.m_spill_bytes = spillbytes; - msg.m_stream_txns = streamtxns; - msg.m_stream_count = streamcount; - msg.m_stream_bytes = streambytes; + msg.m_spill_txns = repSlotStat->spill_txns; + msg.m_spill_count = repSlotStat->spill_count; + msg.m_spill_bytes = repSlotStat->spill_bytes; + msg.m_stream_txns = repSlotStat->stream_txns; + msg.m_stream_count = repSlotStat->stream_count; + msg.m_stream_bytes = repSlotStat->stream_bytes; pgstat_send(&msg, sizeof(PgStat_MsgReplSlot)); } @@ -1846,7 +1844,7 @@ pgstat_report_replslot_drop(const char *slotname) PgStat_MsgReplSlot msg; pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_REPLSLOT); - strlcpy(msg.m_slotname, slotname, NAMEDATALEN); + namestrcpy(&msg.m_slotname, slotname); msg.m_drop = true; pgstat_send(&msg, sizeof(PgStat_MsgReplSlot)); } @@ -5202,7 +5200,7 @@ pgstat_recv_resetreplslotcounter(PgStat_MsgResetreplslotcounter *msg, else { /* Get the index of replication slot statistics to reset */ - idx = pgstat_replslot_index(msg->m_slotname, false); + idx = pgstat_replslot_index(NameStr(msg->m_slotname), false); /* * Nothing to do if the given slot entry is not found. This could @@ -5538,7 +5536,7 @@ pgstat_recv_replslot(PgStat_MsgReplSlot *msg, int len) * Get the index of replication slot statistics. On dropping, we don't * create the new statistics. */ - idx = pgstat_replslot_index(msg->m_slotname, !msg->m_drop); + idx = pgstat_replslot_index(NameStr(msg->m_slotname), !msg->m_drop); /* * The slot entry is not found or there is no space to accommodate the new @@ -5763,7 +5761,7 @@ pgstat_replslot_index(const char *name, bool create_it) Assert(nReplSlotStats <= max_replication_slots); for (i = 0; i < nReplSlotStats; i++) { - if (strcmp(replSlotStats[i].slotname, name) == 0) + if (namestrcmp(&replSlotStats[i].slotname, name) == 0) return i; /* found */ } @@ -5776,7 +5774,7 @@ pgstat_replslot_index(const char *name, bool create_it) /* Register new slot */ memset(&replSlotStats[nReplSlotStats], 0, sizeof(PgStat_ReplSlotStats)); - strlcpy(replSlotStats[nReplSlotStats].slotname, name, NAMEDATALEN); + namestrcpy(&replSlotStats[nReplSlotStats].slotname, name); return nReplSlotStats++; } diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index 4f6e87f18d34c..68e210ce12bce 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -1773,6 +1773,7 @@ void UpdateDecodingStats(LogicalDecodingContext *ctx) { ReorderBuffer *rb = ctx->reorder; + PgStat_ReplSlotStats repSlotStat; /* * Nothing to do if we haven't spilled or streamed anything since the last @@ -1790,9 +1791,15 @@ UpdateDecodingStats(LogicalDecodingContext *ctx) (long long) rb->streamCount, (long long) rb->streamBytes); - pgstat_report_replslot(NameStr(ctx->slot->data.name), - rb->spillTxns, rb->spillCount, rb->spillBytes, - rb->streamTxns, rb->streamCount, rb->streamBytes); + namestrcpy(&repSlotStat.slotname, NameStr(ctx->slot->data.name)); + repSlotStat.spill_txns = rb->spillTxns; + repSlotStat.spill_count = rb->spillCount; + repSlotStat.spill_bytes = rb->spillBytes; + repSlotStat.stream_txns = rb->streamTxns; + repSlotStat.stream_count = rb->streamCount; + repSlotStat.stream_bytes = rb->streamBytes; + + pgstat_report_replslot(&repSlotStat); rb->spillTxns = 0; rb->spillCount = 0; rb->spillBytes = 0; diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index 75a087c2f9d27..f61b163f78d0e 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -328,7 +328,12 @@ ReplicationSlotCreate(const char *name, bool db_specific, * ReplicationSlotAllocationLock. */ if (SlotIsLogical(slot)) - pgstat_report_replslot(NameStr(slot->data.name), 0, 0, 0, 0, 0, 0); + { + PgStat_ReplSlotStats repSlotStat; + MemSet(&repSlotStat, 0, sizeof(PgStat_ReplSlotStats)); + namestrcpy(&repSlotStat.slotname, NameStr(slot->data.name)); + pgstat_report_replslot(&repSlotStat); + } /* * Now that the slot has been marked as in_use and active, it's safe to diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 182b15e3f23a8..521ba7361439d 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -2328,7 +2328,7 @@ pg_stat_get_replication_slots(PG_FUNCTION_ARGS) MemSet(values, 0, sizeof(values)); MemSet(nulls, 0, sizeof(nulls)); - values[0] = PointerGetDatum(cstring_to_text(s->slotname)); + values[0] = CStringGetTextDatum(NameStr(s->slotname)); values[1] = Int64GetDatum(s->spill_txns); values[2] = Int64GetDatum(s->spill_count); values[3] = Int64GetDatum(s->spill_bytes); diff --git a/src/include/pgstat.h b/src/include/pgstat.h index 9a87e7cd8847b..8e11215058e80 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -393,7 +393,7 @@ typedef struct PgStat_MsgResetslrucounter typedef struct PgStat_MsgResetreplslotcounter { PgStat_MsgHdr m_hdr; - char m_slotname[NAMEDATALEN]; + NameData m_slotname; bool clearall; } PgStat_MsgResetreplslotcounter; @@ -540,7 +540,7 @@ typedef struct PgStat_MsgSLRU typedef struct PgStat_MsgReplSlot { PgStat_MsgHdr m_hdr; - char m_slotname[NAMEDATALEN]; + NameData m_slotname; bool m_drop; PgStat_Counter m_spill_txns; PgStat_Counter m_spill_count; @@ -917,7 +917,7 @@ typedef struct PgStat_SLRUStats */ typedef struct PgStat_ReplSlotStats { - char slotname[NAMEDATALEN]; + NameData slotname; PgStat_Counter spill_txns; PgStat_Counter spill_count; PgStat_Counter spill_bytes; @@ -1027,10 +1027,7 @@ extern void pgstat_report_recovery_conflict(int reason); extern void pgstat_report_deadlock(void); extern void pgstat_report_checksum_failures_in_db(Oid dboid, int failurecount); extern void pgstat_report_checksum_failure(void); -extern void pgstat_report_replslot(const char *slotname, PgStat_Counter spilltxns, - PgStat_Counter spillcount, PgStat_Counter spillbytes, - PgStat_Counter streamtxns, PgStat_Counter streamcount, - PgStat_Counter streambytes); +extern void pgstat_report_replslot(const PgStat_ReplSlotStats *repSlotStat); extern void pgstat_report_replslot_drop(const char *slotname); extern void pgstat_initialize(void); From 93f41461449f917da20af4fa2973f8afe8e6ea6e Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 14 Apr 2021 14:23:53 +0900 Subject: [PATCH 100/671] Simplify tests of postgres_fdw terminating connections The tests introduced in 32a9c0b for connections broken and re-established rely on pg_terminate_backend() for their logic. When these were introduced, this function simply sent a signal to a backend without waiting for the operation to complete, and the tests repeatedly looked at pg_stat_activity to check if the operation was completed or not. Since aaf0432, it is possible to define a timeout to make pg_terminate_backend() wait for a certain duration, so make use of it, with a timeout reasonably large enough (3min) to give enough room for the tests to pass even on slow machines. Some measurements show that the tests of postgres_fdw are much faster with this change. For example, on my laptop, they now take 4s instead of 6s. Author: Bharath Rupireddy Discussion: https://postgr.es/m/CALj2ACXGY_EfGrMTjKjHy2zi-u1u9rdeioU_fro0T6Jo8t56KQ@mail.gmail.com --- .../postgres_fdw/expected/postgres_fdw.out | 34 +++++++++---------- contrib/postgres_fdw/sql/postgres_fdw.sql | 26 ++++---------- 2 files changed, 22 insertions(+), 38 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 7f69fa00545b1..5070d93239490 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -9195,19 +9195,6 @@ WARNING: there is no transaction in progress -- =================================================================== -- reestablish new connection -- =================================================================== --- Terminate the backend having the specified application_name and wait for --- the termination to complete. -CREATE OR REPLACE PROCEDURE terminate_backend_and_wait(appname text) AS $$ -BEGIN - PERFORM pg_terminate_backend(pid) FROM pg_stat_activity - WHERE application_name = appname; - LOOP - PERFORM * FROM pg_stat_activity WHERE application_name = appname; - EXIT WHEN NOT FOUND; - PERFORM pg_sleep(1), pg_stat_clear_snapshot(); - END LOOP; -END; -$$ LANGUAGE plpgsql; -- Change application_name of remote connection to special one -- so that we can easily terminate the connection later. ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check'); @@ -9217,8 +9204,14 @@ SELECT 1 FROM ft1 LIMIT 1; 1 (1 row) --- Terminate the remote connection. -CALL terminate_backend_and_wait('fdw_retry_check'); +-- Terminate the remote connection and wait for the termination to complete. +SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity + WHERE application_name = 'fdw_retry_check'; + pg_terminate_backend +---------------------- + t +(1 row) + -- This query should detect the broken connection when starting new remote -- transaction, reestablish new connection, and then succeed. BEGIN; @@ -9231,15 +9224,20 @@ SELECT 1 FROM ft1 LIMIT 1; -- If the query detects the broken connection when starting new remote -- subtransaction, it doesn't reestablish new connection and should fail. -- The text of the error might vary across platforms, so don't show it. -CALL terminate_backend_and_wait('fdw_retry_check'); +-- Terminate the remote connection and wait for the termination to complete. +SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity + WHERE application_name = 'fdw_retry_check'; + pg_terminate_backend +---------------------- + t +(1 row) + SAVEPOINT s; \set VERBOSITY sqlstate SELECT 1 FROM ft1 LIMIT 1; -- should fail ERROR: 08006 \set VERBOSITY default COMMIT; --- Clean up -DROP PROCEDURE terminate_backend_and_wait(text); -- ============================================================================= -- test connection invalidation cases and postgres_fdw_get_connections function -- ============================================================================= diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 7487096eac530..74590089bd19f 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -2786,27 +2786,14 @@ ROLLBACK; -- reestablish new connection -- =================================================================== --- Terminate the backend having the specified application_name and wait for --- the termination to complete. -CREATE OR REPLACE PROCEDURE terminate_backend_and_wait(appname text) AS $$ -BEGIN - PERFORM pg_terminate_backend(pid) FROM pg_stat_activity - WHERE application_name = appname; - LOOP - PERFORM * FROM pg_stat_activity WHERE application_name = appname; - EXIT WHEN NOT FOUND; - PERFORM pg_sleep(1), pg_stat_clear_snapshot(); - END LOOP; -END; -$$ LANGUAGE plpgsql; - -- Change application_name of remote connection to special one -- so that we can easily terminate the connection later. ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check'); SELECT 1 FROM ft1 LIMIT 1; --- Terminate the remote connection. -CALL terminate_backend_and_wait('fdw_retry_check'); +-- Terminate the remote connection and wait for the termination to complete. +SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity + WHERE application_name = 'fdw_retry_check'; -- This query should detect the broken connection when starting new remote -- transaction, reestablish new connection, and then succeed. @@ -2816,16 +2803,15 @@ SELECT 1 FROM ft1 LIMIT 1; -- If the query detects the broken connection when starting new remote -- subtransaction, it doesn't reestablish new connection and should fail. -- The text of the error might vary across platforms, so don't show it. -CALL terminate_backend_and_wait('fdw_retry_check'); +-- Terminate the remote connection and wait for the termination to complete. +SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity + WHERE application_name = 'fdw_retry_check'; SAVEPOINT s; \set VERBOSITY sqlstate SELECT 1 FROM ft1 LIMIT 1; -- should fail \set VERBOSITY default COMMIT; --- Clean up -DROP PROCEDURE terminate_backend_and_wait(text); - -- ============================================================================= -- test connection invalidation cases and postgres_fdw_get_connections function -- ============================================================================= From ac725ee0f98c3fec703ffd9b070da629608e9a1e Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 14 Apr 2021 15:55:55 +0900 Subject: [PATCH 101/671] doc: Move force_parallel_mode to section for developer options This GUC has always been classified as a planner option since its introduction in 7c944bd, and was listed in postgresql.conf.sample. As this parameter exists for testing purposes, move it to the section dedicated to developer parameters and hence remove it from postgresql.conf.sample. This will avoid any temptation to play with it on production servers for users that should never really have to touch this parameter. The general description used for developer options is reworded a bit, to take into account the inclusion of force_parallel_mode, per a suggestion from Tom Lane. Per discussion between Tom Lane, Bruce Momjian, Justin Pryzby, Bharath Rupireddy and me. Author: Justin Pryzby, Tom Lane Discussion: https://postgr.es/m/20210403152402.GA8049@momjian.us --- doc/src/sgml/config.sgml | 99 +++++++++---------- src/backend/utils/misc/guc.c | 4 +- src/backend/utils/misc/postgresql.conf.sample | 1 - 3 files changed, 51 insertions(+), 53 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index f749fe9ce7b46..776ab1a8c8b79 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -5912,51 +5912,6 @@ SELECT * FROM parent WHERE key = 2400; - - force_parallel_mode (enum) - - force_parallel_mode configuration parameter - - - - - Allows the use of parallel queries for testing purposes even in cases - where no performance benefit is expected. - The allowed values of force_parallel_mode are - off (use parallel mode only when it is expected to improve - performance), on (force parallel query for all queries - for which it is thought to be safe), and regress (like - on, but with additional behavior changes as explained - below). - - - - More specifically, setting this value to on will add - a Gather node to the top of any query plan for which this - appears to be safe, so that the query runs inside of a parallel worker. - Even when a parallel worker is not available or cannot be used, - operations such as starting a subtransaction that would be prohibited - in a parallel query context will be prohibited unless the planner - believes that this will cause the query to fail. If failures or - unexpected results occur when this option is set, some functions used - by the query may need to be marked PARALLEL UNSAFE - (or, possibly, PARALLEL RESTRICTED). - - - - Setting this value to regress has all of the same effects - as setting it to on plus some additional effects that are - intended to facilitate automated regression testing. Normally, - messages from a parallel worker include a context line indicating that, - but a setting of regress suppresses this line so that the - output is the same as in non-parallel execution. Also, - the Gather nodes added to plans by this setting are hidden - in EXPLAIN output so that the output matches what - would be obtained if this setting were turned off. - - - - plan_cache_mode (enum) @@ -10374,11 +10329,10 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' Developer Options - The following parameters are intended for work on the - PostgreSQL source code, and in some cases - to assist with recovery of severely damaged databases. There - should be no reason to use them on a production database. - As such, they have been excluded from the sample + The following parameters are intended for developer testing, and + should never be used on a production database. However, some of + them can be used to assist with the recovery of severely damaged + databases. As such, they have been excluded from the sample postgresql.conf file. Note that many of these parameters require special source compilation flags to work at all. @@ -10464,6 +10418,51 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' + + force_parallel_mode (enum) + + force_parallel_mode configuration parameter + + + + + Allows the use of parallel queries for testing purposes even in cases + where no performance benefit is expected. + The allowed values of force_parallel_mode are + off (use parallel mode only when it is expected to improve + performance), on (force parallel query for all queries + for which it is thought to be safe), and regress (like + on, but with additional behavior changes as explained + below). + + + + More specifically, setting this value to on will add + a Gather node to the top of any query plan for which this + appears to be safe, so that the query runs inside of a parallel worker. + Even when a parallel worker is not available or cannot be used, + operations such as starting a subtransaction that would be prohibited + in a parallel query context will be prohibited unless the planner + believes that this will cause the query to fail. If failures or + unexpected results occur when this option is set, some functions used + by the query may need to be marked PARALLEL UNSAFE + (or, possibly, PARALLEL RESTRICTED). + + + + Setting this value to regress has all of the same effects + as setting it to on plus some additional effects that are + intended to facilitate automated regression testing. Normally, + messages from a parallel worker include a context line indicating that, + but a setting of regress suppresses this line so that the + output is the same as in non-parallel execution. Also, + the Gather nodes added to plans by this setting are hidden + in EXPLAIN output so that the output matches what + would be obtained if this setting were turned off. + + + + ignore_system_indexes (boolean) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 2ffefdf943803..b130874bdc72c 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -4922,10 +4922,10 @@ static struct config_enum ConfigureNamesEnum[] = }, { - {"force_parallel_mode", PGC_USERSET, QUERY_TUNING_OTHER, + {"force_parallel_mode", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Forces use of parallel query facilities."), gettext_noop("If possible, run query using a parallel worker and with parallel restrictions."), - GUC_EXPLAIN + GUC_NOT_IN_SAMPLE | GUC_EXPLAIN }, &force_parallel_mode, FORCE_PARALLEL_OFF, force_parallel_mode_options, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 2f6dd014a81ed..0f7f49b949c2f 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -421,7 +421,6 @@ #from_collapse_limit = 8 #join_collapse_limit = 8 # 1 disables collapsing of explicit # JOIN clauses -#force_parallel_mode = off #jit = on # allow JIT compilation #plan_cache_mode = auto # auto, force_generic_plan or # force_custom_plan From 07e5e66742333ab100a557e6e3f710e92fa1fd92 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 14 Apr 2021 09:10:57 +0200 Subject: [PATCH 102/671] Improve quoting in some error messages --- contrib/amcheck/verify_nbtree.c | 6 +++--- src/backend/access/brin/brin.c | 4 ++-- src/backend/access/index/indexam.c | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c index b31906cbcfdfe..3d06be556322e 100644 --- a/contrib/amcheck/verify_nbtree.c +++ b/contrib/amcheck/verify_nbtree.c @@ -290,7 +290,7 @@ bt_index_check_internal(Oid indrelid, bool parentcheck, bool heapallindexed, if (heaprel == NULL || heapid != IndexGetRelation(indrelid, false)) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), - errmsg("could not open parent table of index %s", + errmsg("could not open parent table of index \"%s\"", RelationGetRelationName(indrel)))); /* Relation suitable for checking as B-Tree? */ @@ -535,7 +535,7 @@ bt_check_every_level(Relation rel, Relation heaprel, bool heapkeyspace, if (metad->btm_fastroot != metad->btm_root) ereport(DEBUG1, (errcode(ERRCODE_NO_DATA), - errmsg_internal("harmless fast root mismatch in index %s", + errmsg_internal("harmless fast root mismatch in index \"%s\"", RelationGetRelationName(rel)), errdetail_internal("Fast root block %u (level %u) differs from true root block %u (level %u).", metad->btm_fastroot, metad->btm_fastlevel, @@ -2277,7 +2277,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit, { ereport(DEBUG1, (errcode(ERRCODE_NO_DATA), - errmsg_internal("harmless interrupted page split detected in index %s", + errmsg_internal("harmless interrupted page split detected in index \"%s\"", RelationGetRelationName(state->rel)), errdetail_internal("Block=%u level=%u left sibling=%u page lsn=%X/%X.", blkno, opaque->btpo_level, diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c index f885f3ab3afd6..c320e215082a4 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -1060,7 +1060,7 @@ brin_summarize_range(PG_FUNCTION_ARGS) if (heapRel == NULL || heapoid != IndexGetRelation(indexoid, false)) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), - errmsg("could not open parent table of index %s", + errmsg("could not open parent table of index \"%s\"", RelationGetRelationName(indexRel)))); /* OK, do it */ @@ -1137,7 +1137,7 @@ brin_desummarize_range(PG_FUNCTION_ARGS) if (heapRel == NULL || heapoid != IndexGetRelation(indexoid, false)) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), - errmsg("could not open parent table of index %s", + errmsg("could not open parent table of index \"%s\"", RelationGetRelationName(indexRel)))); /* the revmap does the hard work */ diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c index 9b5afa12ad6d6..5e22479b7ade7 100644 --- a/src/backend/access/index/indexam.c +++ b/src/backend/access/index/indexam.c @@ -93,14 +93,14 @@ #define CHECK_REL_PROCEDURE(pname) \ do { \ if (indexRelation->rd_indam->pname == NULL) \ - elog(ERROR, "function %s is not defined for index %s", \ + elog(ERROR, "function \"%s\" is not defined for index \"%s\"", \ CppAsString(pname), RelationGetRelationName(indexRelation)); \ } while(0) #define CHECK_SCAN_PROCEDURE(pname) \ do { \ if (scan->indexRelation->rd_indam->pname == NULL) \ - elog(ERROR, "function %s is not defined for index %s", \ + elog(ERROR, "function \"%s\" is not defined for index \"%s\"", \ CppAsString(pname), RelationGetRelationName(scan->indexRelation)); \ } while(0) From 9acaf1a62197205b06a85afbfcaa7ffaac939ef3 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Wed, 14 Apr 2021 12:46:31 -0400 Subject: [PATCH 103/671] amcheck: Reword some messages and fix an alignment problem. We don't need to mention the attribute number in these messages, because there's a dedicated column for that, but we should mention the toast value ID, because that's really useful for any follow-up troubleshooting the user wants to do. This also rewords some of the messages to hopefully read a little better. Also, use VARATT_EXTERNAL_GET_POINTER in case we're accessing a TOAST pointer that isn't aligned on a platform that's fussy about alignment, so that we don't crash while corruption-checking the user's data. Mark Dilger, reviewed by me. Discussion: http://postgr.es/m/7D3B9BF6-50D0-4C30-8506-1C1851C7F96F@enterprisedb.com --- contrib/amcheck/verify_heapam.c | 63 +++++++++++++---------- src/bin/pg_amcheck/t/004_verify_heapam.pl | 4 +- 2 files changed, 38 insertions(+), 29 deletions(-) diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c index e8aa0d68d4eed..13f420d9adad6 100644 --- a/contrib/amcheck/verify_heapam.c +++ b/contrib/amcheck/verify_heapam.c @@ -1179,7 +1179,8 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, if (isnull) { report_toast_corruption(ctx, ta, - pstrdup("toast chunk sequence number is null")); + psprintf("toast value %u has toast chunk with null sequence number", + ta->toast_pointer.va_valueid)); return; } chunk = DatumGetPointer(fastgetattr(toasttup, 3, @@ -1187,7 +1188,8 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, if (isnull) { report_toast_corruption(ctx, ta, - pstrdup("toast chunk data is null")); + psprintf("toast value %u chunk %d has null data", + ta->toast_pointer.va_valueid, chunkno)); return; } if (!VARATT_IS_EXTENDED(chunk)) @@ -1205,8 +1207,9 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, uint32 header = ((varattrib_4b *) chunk)->va_4byte.va_header; report_toast_corruption(ctx, ta, - psprintf("corrupt extended toast chunk has invalid varlena header: %0x (sequence number %d)", - header, curchunk)); + psprintf("toast value %u chunk %d has invalid varlena header %0x", + ta->toast_pointer.va_valueid, + chunkno, header)); return; } @@ -1216,15 +1219,17 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, if (curchunk != chunkno) { report_toast_corruption(ctx, ta, - psprintf("toast chunk sequence number %u does not match the expected sequence number %u", - curchunk, chunkno)); + psprintf("toast value %u chunk %d has sequence number %d, but expected sequence number %d", + ta->toast_pointer.va_valueid, + chunkno, curchunk, chunkno)); return; } - if (curchunk > endchunk) + if (chunkno > endchunk) { report_toast_corruption(ctx, ta, - psprintf("toast chunk sequence number %u exceeds the end chunk sequence number %u", - curchunk, endchunk)); + psprintf("toast value %u chunk %d follows last expected chunk %d", + ta->toast_pointer.va_valueid, + chunkno, endchunk)); return; } @@ -1233,8 +1238,9 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, if (chunksize != expected_size) report_toast_corruption(ctx, ta, - psprintf("toast chunk size %u differs from the expected size %u", - chunksize, expected_size)); + psprintf("toast value %u chunk %d has size %u, but expected size %u", + ta->toast_pointer.va_valueid, + chunkno, chunksize, expected_size)); } /* @@ -1265,6 +1271,7 @@ check_tuple_attribute(HeapCheckContext *ctx) char *tp; /* pointer to the tuple data */ uint16 infomask; Form_pg_attribute thisatt; + struct varatt_external toast_pointer; infomask = ctx->tuphdr->t_infomask; thisatt = TupleDescAttr(RelationGetDescr(ctx->rel), ctx->attnum); @@ -1274,8 +1281,7 @@ check_tuple_attribute(HeapCheckContext *ctx) if (ctx->tuphdr->t_hoff + ctx->offset > ctx->lp_len) { report_corruption(ctx, - psprintf("attribute %u with length %u starts at offset %u beyond total tuple length %u", - ctx->attnum, + psprintf("attribute with length %u starts at offset %u beyond total tuple length %u", thisatt->attlen, ctx->tuphdr->t_hoff + ctx->offset, ctx->lp_len)); @@ -1295,8 +1301,7 @@ check_tuple_attribute(HeapCheckContext *ctx) if (ctx->tuphdr->t_hoff + ctx->offset > ctx->lp_len) { report_corruption(ctx, - psprintf("attribute %u with length %u ends at offset %u beyond total tuple length %u", - ctx->attnum, + psprintf("attribute with length %u ends at offset %u beyond total tuple length %u", thisatt->attlen, ctx->tuphdr->t_hoff + ctx->offset, ctx->lp_len)); @@ -1328,8 +1333,7 @@ check_tuple_attribute(HeapCheckContext *ctx) if (va_tag != VARTAG_ONDISK) { report_corruption(ctx, - psprintf("toasted attribute %u has unexpected TOAST tag %u", - ctx->attnum, + psprintf("toasted attribute has unexpected TOAST tag %u", va_tag)); /* We can't know where the next attribute begins */ return false; @@ -1343,8 +1347,7 @@ check_tuple_attribute(HeapCheckContext *ctx) if (ctx->tuphdr->t_hoff + ctx->offset > ctx->lp_len) { report_corruption(ctx, - psprintf("attribute %u with length %u ends at offset %u beyond total tuple length %u", - ctx->attnum, + psprintf("attribute with length %u ends at offset %u beyond total tuple length %u", thisatt->attlen, ctx->tuphdr->t_hoff + ctx->offset, ctx->lp_len)); @@ -1371,12 +1374,17 @@ check_tuple_attribute(HeapCheckContext *ctx) /* It is external, and we're looking at a page on disk */ + /* + * Must copy attr into toast_pointer for alignment considerations + */ + VARATT_EXTERNAL_GET_POINTER(toast_pointer, attr); + /* The tuple header better claim to contain toasted values */ if (!(infomask & HEAP_HASEXTERNAL)) { report_corruption(ctx, - psprintf("attribute %u is external but tuple header flag HEAP_HASEXTERNAL not set", - ctx->attnum)); + psprintf("toast value %u is external but tuple header flag HEAP_HASEXTERNAL not set", + toast_pointer.va_valueid)); return true; } @@ -1384,8 +1392,8 @@ check_tuple_attribute(HeapCheckContext *ctx) if (!ctx->rel->rd_rel->reltoastrelid) { report_corruption(ctx, - psprintf("attribute %u is external but relation has no toast relation", - ctx->attnum)); + psprintf("toast value %u is external but relation has no toast relation", + toast_pointer.va_valueid)); return true; } @@ -1464,12 +1472,13 @@ check_toasted_attribute(HeapCheckContext *ctx, ToastedAttribute *ta) if (!found_toasttup) report_toast_corruption(ctx, ta, - psprintf("toasted value for attribute %u missing from toast table", - ta->attnum)); + psprintf("toast value %u not found in toast table", + ta->toast_pointer.va_valueid)); else if (chunkno != (endchunk + 1)) report_toast_corruption(ctx, ta, - psprintf("final toast chunk number %u differs from expected value %u", - chunkno, (endchunk + 1))); + psprintf("toast value %u was expected to end at chunk %u, but ended at chunk %u", + ta->toast_pointer.va_valueid, + (endchunk + 1), chunkno)); } /* diff --git a/src/bin/pg_amcheck/t/004_verify_heapam.pl b/src/bin/pg_amcheck/t/004_verify_heapam.pl index 2171d236a7a0f..3c1277adf3e1c 100644 --- a/src/bin/pg_amcheck/t/004_verify_heapam.pl +++ b/src/bin/pg_amcheck/t/004_verify_heapam.pl @@ -480,7 +480,7 @@ sub header $header = header(0, $offnum, 1); push @expected, - qr/${header}attribute \d+ with length \d+ ends at offset \d+ beyond total tuple length \d+/; + qr/${header}attribute with length \d+ ends at offset \d+ beyond total tuple length \d+/; } elsif ($offnum == 13) { @@ -489,7 +489,7 @@ sub header $header = header(0, $offnum, 2); push @expected, - qr/${header}toasted value for attribute 2 missing from toast table/; + qr/${header}toast value \d+ not found in toast table/; } elsif ($offnum == 14) { From e1623b7d86812ee6ab98a42f38b43a192c149988 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 14 Apr 2021 14:28:17 -0400 Subject: [PATCH 104/671] Fix obsolete comments referencing JoinPathExtraData.extra_lateral_rels. That field went away in commit edca44b15, but it seems that commit 45be99f8c re-introduced some comments mentioning it. Noted by James Coleman, though this isn't exactly his proposed new wording. Also thanks to Justin Pryzby for software archaeology. Discussion: https://postgr.es/m/CAAaqYe8fxZjq3na+XkNx4C78gDqykH-7dbnzygm9Qa9nuDTePg@mail.gmail.com --- src/backend/optimizer/path/joinpath.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/optimizer/path/joinpath.c b/src/backend/optimizer/path/joinpath.c index e9b6968b1d7cd..4c30c6556409d 100644 --- a/src/backend/optimizer/path/joinpath.c +++ b/src/backend/optimizer/path/joinpath.c @@ -670,8 +670,8 @@ try_partial_nestloop_path(PlannerInfo *root, /* * If the inner path is parameterized, the parameterization must be fully * satisfied by the proposed outer path. Parameterized partial paths are - * not supported. The caller should already have verified that no - * extra_lateral_rels are required here. + * not supported. The caller should already have verified that no lateral + * rels are required here. */ Assert(bms_is_empty(joinrel->lateral_relids)); if (inner_path->param_info != NULL) @@ -984,8 +984,8 @@ try_partial_hashjoin_path(PlannerInfo *root, /* * If the inner path is parameterized, the parameterization must be fully * satisfied by the proposed outer path. Parameterized partial paths are - * not supported. The caller should already have verified that no - * extra_lateral_rels are required here. + * not supported. The caller should already have verified that no lateral + * rels are required here. */ Assert(bms_is_empty(joinrel->lateral_relids)); if (inner_path->param_info != NULL) @@ -1714,7 +1714,7 @@ match_unsorted_outer(PlannerInfo *root, * partial path and the joinrel is parallel-safe. However, we can't * handle JOIN_UNIQUE_OUTER, because the outer path will be partial, and * therefore we won't be able to properly guarantee uniqueness. Nor can - * we handle extra_lateral_rels, since partial paths must not be + * we handle joins needing lateral rels, since partial paths must not be * parameterized. Similarly, we can't handle JOIN_FULL and JOIN_RIGHT, * because they can produce false null extended rows. */ From 344487e2db03f3cec13685a839dbc8a0e2a36750 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 15 Apr 2021 10:03:46 +0900 Subject: [PATCH 105/671] Tweak behavior of pg_dump --extension with configuration tables 6568cef, that introduced the option, had an inconsistent behavior when it comes to configuration tables set up by pg_extension_config_dump, as the data of all configuration tables would included in a dump even for extensions not listed by a set of --extension switches. The contents dumped changed depending on the schema where an extension was installed when an extension was not listed. For example, an extension installed under the public schema would have its configuration data not dumped even when not listed with --extension, which was inconsistent with the case of an extension installed on a non-public schema, where the configuration would be dumped. Per discussion with Noah, we have settled down to the simple rule of dumping configuration data of an extension if it is listed in --extension (default is unchanged and backward-compatible, to dump everything on sight if there are no extensions directly listed). This avoids some weird cases where the dumps depended on a --schema for one. More tests are added to cover the gap, where we cross-check more behaviors depending on --schema when an extension is not listed. Reported-by: Noah Misch Reviewed-by: Noah Misch Discussion: https://postgr.es/m/20210404220802.GA728316@rfd.leadboat.com --- doc/src/sgml/ref/pg_dump.sgml | 6 ++++ src/bin/pg_dump/pg_dump.c | 12 +++++++- src/test/modules/test_pg_dump/t/001_base.pl | 34 +++++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml index 529b167c969a6..67c2cbbec62e2 100644 --- a/doc/src/sgml/ref/pg_dump.sgml +++ b/doc/src/sgml/ref/pg_dump.sgml @@ -234,6 +234,12 @@ PostgreSQL documentation shell from expanding the wildcards. + + Any configuration relation registered by + pg_extension_config_dump is included in the + dump if its extension is specified by . + + When is specified, diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index d0ea48961426c..391947340f4d2 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -18271,7 +18271,8 @@ processExtensionTables(Archive *fout, ExtensionInfo extinfo[], * Note that we create TableDataInfo objects even in schemaOnly mode, ie, * user data in a configuration table is treated like schema data. This * seems appropriate since system data in a config table would get - * reloaded by CREATE EXTENSION. + * reloaded by CREATE EXTENSION. If the extension is not listed in the + * list of extensions to be included, none of its data is dumped. */ for (i = 0; i < numExtensions; i++) { @@ -18283,6 +18284,15 @@ processExtensionTables(Archive *fout, ExtensionInfo extinfo[], int nconfigitems = 0; int nconditionitems = 0; + /* + * Check if this extension is listed as to include in the dump. If + * not, any table data associated with it is discarded. + */ + if (extension_include_oids.head != NULL && + !simple_oid_list_member(&extension_include_oids, + curext->dobj.catId.oid)) + continue; + if (strlen(extconfig) != 0 || strlen(extcondition) != 0) { int j; diff --git a/src/test/modules/test_pg_dump/t/001_base.pl b/src/test/modules/test_pg_dump/t/001_base.pl index ef98c08493988..1cc6f29ab6956 100644 --- a/src/test/modules/test_pg_dump/t/001_base.pl +++ b/src/test/modules/test_pg_dump/t/001_base.pl @@ -208,6 +208,34 @@ 'pg_dump', '--no-sync', "--file=$tempdir/without_extension.sql", '--extension=plpgsql', 'postgres', ], + }, + + # plgsql in the list of extensions blocks the dump of extension + # test_pg_dump. "public" is the schema used by the extension + # test_pg_dump, but none of its objects should be dumped. + without_extension_explicit_schema => { + dump_cmd => [ + 'pg_dump', + '--no-sync', + "--file=$tempdir/without_extension_explicit_schema.sql", + '--extension=plpgsql', + '--schema=public', + 'postgres', + ], + }, + + # plgsql in the list of extensions blocks the dump of extension + # test_pg_dump, but not the dump of objects not dependent on the + # extension located on a schema maintained by the extension. + without_extension_internal_schema => { + dump_cmd => [ + 'pg_dump', + '--no-sync', + "--file=$tempdir/without_extension_internal_schema.sql", + '--extension=plpgsql', + '--schema=regress_pg_dump_schema', + 'postgres', + ], },); ############################################################### @@ -632,6 +660,8 @@ pg_dumpall_globals => 1, section_data => 1, section_pre_data => 1, + # Excludes this schema as extension is not listed. + without_extension_explicit_schema => 1, }, }, @@ -646,6 +676,8 @@ pg_dumpall_globals => 1, section_data => 1, section_pre_data => 1, + # Excludes this schema as extension is not listed. + without_extension_explicit_schema => 1, }, }, @@ -662,6 +694,8 @@ %full_runs, schema_only => 1, section_pre_data => 1, + # Excludes the extension and keeps the schema's data. + without_extension_internal_schema => 1, }, },); From 59da8d9eb7255c3cb1c9f3b79d76b18b6a1c7da2 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 15 Apr 2021 08:58:03 +0200 Subject: [PATCH 106/671] amcheck: Use correct format placeholder for TOAST chunk numbers Several of these were already fixed in passing in 9acaf1a62197205b06a85afbfcaa7ffaac939ef3, but one was remaining inconsistent. --- contrib/amcheck/verify_heapam.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c index 13f420d9adad6..9366f45d7461a 100644 --- a/contrib/amcheck/verify_heapam.c +++ b/contrib/amcheck/verify_heapam.c @@ -1476,7 +1476,7 @@ check_toasted_attribute(HeapCheckContext *ctx, ToastedAttribute *ta) ta->toast_pointer.va_valueid)); else if (chunkno != (endchunk + 1)) report_toast_corruption(ctx, ta, - psprintf("toast value %u was expected to end at chunk %u, but ended at chunk %u", + psprintf("toast value %u was expected to end at chunk %d, but ended at chunk %d", ta->toast_pointer.va_valueid, (endchunk + 1), chunkno)); } From cbae8774eb5c2f5552323ee18ca5286f9c8e5d06 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 15 Apr 2021 09:08:18 +0200 Subject: [PATCH 107/671] pg_upgrade: Small fix for better translatability of help output --- src/bin/pg_upgrade/option.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bin/pg_upgrade/option.c b/src/bin/pg_upgrade/option.c index 9c9b313e0cf9e..4b74f9eea7e7b 100644 --- a/src/bin/pg_upgrade/option.c +++ b/src/bin/pg_upgrade/option.c @@ -312,8 +312,8 @@ usage(void) printf(_(" -v, --verbose enable verbose internal logging\n")); printf(_(" -V, --version display version information, then exit\n")); printf(_(" --clone clone instead of copying files to new cluster\n")); - printf(_(" --index-collation-versions-unknown\n")); - printf(_(" mark text indexes as needing to be rebuilt\n")); + printf(_(" --index-collation-versions-unknown\n" + " mark text indexes as needing to be rebuilt\n")); printf(_(" -?, --help show this help, then exit\n")); printf(_("\n" "Before running pg_upgrade you must:\n" From 1840d9f4c89998872a3b46473f8e9e5b6ff3c144 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 15 Apr 2021 16:45:34 +0900 Subject: [PATCH 108/671] doc: Simplify example of HISTFILE for psql e4c7619 has added a space to the example used for HISTFILE in the docs of psql before the variable DBNAME, as a workaround because variables were not parsed the same way back then. This behavior has changed in 9.2, causing the example in the psql docs to result in the same history file created with or without a space added before the DBNAME variable. Let's just remove this space in the example, to reduce any confusion, as the point of it is to prove that a per-database history file is easy to set up, and that's easier to read this way. Per discussion with Tom Lane. Reported-by: Ludovic Kuty Discussion: https://postgr.es/m/161830067409.691.16198363670687811485@wrigleys.postgresql.org --- doc/src/sgml/ref/psql-ref.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index a3cfd3b5575be..67e527124d9f4 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -3915,7 +3915,7 @@ bar or %APPDATA%\postgresql\psql_history on Windows. For example, putting: -\set HISTFILE ~/.psql_history- :DBNAME +\set HISTFILE ~/.psql_history-:DBNAME in ~/.psqlrc will cause psql to maintain a separate history for From e2e2efca85b4857361780ed0c736c2a44edb458a Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Thu, 15 Apr 2021 23:15:19 +0900 Subject: [PATCH 109/671] doc: Add missing COMPRESSION into CREATE TABLE synopsis. Commit bbe0a81db6 introduced "INCLUDING COMPRESSION" option in CREATE TABLE command, but forgot to mention it in the CREATE TABLE syntax synopsis. Author: Fujii Masao Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/54d30e66-dbd6-5485-aaf6-a291ed55919d@oss.nttdata.com --- doc/src/sgml/ref/create_table.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index b6cf9adcb256c..a8c5e4028af0e 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -87,7 +87,7 @@ class="parameter">referential_action ] [ ON UPDATE and like_option is: -{ INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED | IDENTITY | INDEXES | STATISTICS | STORAGE | ALL } +{ INCLUDING | EXCLUDING } { COMMENTS | COMPRESSION | CONSTRAINTS | DEFAULTS | GENERATED | IDENTITY | INDEXES | STATISTICS | STORAGE | ALL } and partition_bound_spec is: From fae65629cec824738ee11bf60f757239906d64fa Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 15 Apr 2021 19:41:42 +0200 Subject: [PATCH 110/671] Revert "psql: Show all query results by default" This reverts commit 3a5130672296ed4e682403a77a9a3ad3d21cef75. Per discussion, this patch had too many issues to resolve at this point of the development cycle. We'll try again in the future. Discussion: https://www.postgresql.org/message-id/flat/alpine.DEB.2.21.1904132231510.8961@lancre --- .../expected/pg_stat_statements.out | 25 - doc/src/sgml/ref/psql-ref.sgml | 29 +- src/bin/psql/common.c | 624 ++++++++---------- src/bin/psql/help.c | 2 - src/bin/psql/settings.h | 1 - src/bin/psql/startup.c | 10 - src/bin/psql/tab-complete.c | 2 +- src/test/regress/expected/copyselect.out | 14 +- src/test/regress/expected/psql.out | 93 --- src/test/regress/expected/transactions.out | 58 +- src/test/regress/sql/copyselect.sql | 4 +- src/test/regress/sql/psql.sql | 38 -- src/test/regress/sql/transactions.sql | 2 +- 13 files changed, 299 insertions(+), 603 deletions(-) diff --git a/contrib/pg_stat_statements/expected/pg_stat_statements.out b/contrib/pg_stat_statements/expected/pg_stat_statements.out index 674ed270a8f85..fb97f6873700c 100644 --- a/contrib/pg_stat_statements/expected/pg_stat_statements.out +++ b/contrib/pg_stat_statements/expected/pg_stat_statements.out @@ -50,28 +50,8 @@ BEGIN \; SELECT 2.0 AS "float" \; SELECT 'world' AS "text" \; COMMIT; - float -------- - 2.0 -(1 row) - - text -------- - world -(1 row) - -- compound with empty statements and spurious leading spacing \;\; SELECT 3 + 3 \;\;\; SELECT ' ' || ' !' \;\; SELECT 1 + 4 \;; - ?column? ----------- - 6 -(1 row) - - ?column? ----------- - ! -(1 row) - ?column? ---------- 5 @@ -81,11 +61,6 @@ COMMIT; SELECT 1 + 1 + 1 AS "add" \gset SELECT :add + 1 + 1 AS "add" \; SELECT :add + 1 + 1 AS "add" \gset - add ------ - 5 -(1 row) - -- set operator SELECT 1 AS i UNION SELECT 2 ORDER BY i; i diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 67e527124d9f4..bd4f26e6cc877 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -127,11 +127,18 @@ echo '\x \\ SELECT * FROM foo;' | psql commands included in the string to divide it into multiple transactions. (See for more details about how the server handles multi-query strings.) + Also, psql only prints the + result of the last SQL command in the string. + This is different from the behavior when the same string is read from + a file or fed to psql's standard input, + because then psql sends + each SQL command separately. - If having several commands executed in one transaction is not desired, - use repeated commands or feed multiple commands to - psql's standard input, + Because of this behavior, putting more than one SQL command in a + single string often has unexpected results. + It's better to use repeated commands or feed + multiple commands to psql's standard input, either using echo as illustrated above, or via a shell here-document, for example: @@ -3525,6 +3532,10 @@ select 1\; select 2\; select 3; commands included in the string to divide it into multiple transactions. (See for more details about how the server handles multi-query strings.) + psql prints only the last query result + it receives for each request; in this example, although all + three SELECTs are indeed executed, psql + only prints the 3. @@ -4111,18 +4122,6 @@ bar - SHOW_ALL_RESULTS - - - When this variable is set to off, only the last - result of a combined query (\;) is shown instead of - all of them. The default is on. The off behavior - is for compatibility with older versions of psql. - - - - - SHOW_CONTEXT diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index 028a357991fd2..7a95465111ad1 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -33,7 +33,6 @@ static bool DescribeQuery(const char *query, double *elapsed_msec); static bool ExecQueryUsingCursor(const char *query, double *elapsed_msec); static bool command_no_begin(const char *query); static bool is_select_command(const char *query); -static int SendQueryAndProcessResults(const char *query, double *pelapsed_msec, bool is_watch); /* @@ -354,7 +353,7 @@ CheckConnection(void) * Returns true for valid result, false for error state. */ static bool -AcceptResult(const PGresult *result, bool show_error) +AcceptResult(const PGresult *result) { bool OK; @@ -385,7 +384,7 @@ AcceptResult(const PGresult *result, bool show_error) break; } - if (!OK && show_error) + if (!OK) { const char *error = PQerrorMessage(pset.db); @@ -473,18 +472,6 @@ ClearOrSaveResult(PGresult *result) } } -/* - * Consume all results - */ -static void -ClearOrSaveAllResults() -{ - PGresult *result; - - while ((result = PQgetResult(pset.db)) != NULL) - ClearOrSaveResult(result); -} - /* * Print microtiming output. Always print raw milliseconds; if the interval @@ -585,7 +572,7 @@ PSQLexec(const char *query) ResetCancelConn(); - if (!AcceptResult(res, true)) + if (!AcceptResult(res)) { ClearOrSaveResult(res); res = NULL; @@ -607,8 +594,10 @@ PSQLexec(const char *query) int PSQLexecWatch(const char *query, const printQueryOpt *opt) { + PGresult *res; double elapsed_msec = 0; - int res; + instr_time before; + instr_time after; if (!pset.db) { @@ -617,16 +606,75 @@ PSQLexecWatch(const char *query, const printQueryOpt *opt) } SetCancelConn(pset.db); - res = SendQueryAndProcessResults(query, &elapsed_msec, true); + + if (pset.timing) + INSTR_TIME_SET_CURRENT(before); + + res = PQexec(pset.db, query); + ResetCancelConn(); + if (!AcceptResult(res)) + { + ClearOrSaveResult(res); + return 0; + } + + if (pset.timing) + { + INSTR_TIME_SET_CURRENT(after); + INSTR_TIME_SUBTRACT(after, before); + elapsed_msec = INSTR_TIME_GET_MILLISEC(after); + } + + /* + * If SIGINT is sent while the query is processing, the interrupt will be + * consumed. The user's intention, though, is to cancel the entire watch + * process, so detect a sent cancellation request and exit in this case. + */ + if (cancel_pressed) + { + PQclear(res); + return 0; + } + + switch (PQresultStatus(res)) + { + case PGRES_TUPLES_OK: + printQuery(res, opt, pset.queryFout, false, pset.logfile); + break; + + case PGRES_COMMAND_OK: + fprintf(pset.queryFout, "%s\n%s\n\n", opt->title, PQcmdStatus(res)); + break; + + case PGRES_EMPTY_QUERY: + pg_log_error("\\watch cannot be used with an empty query"); + PQclear(res); + return -1; + + case PGRES_COPY_OUT: + case PGRES_COPY_IN: + case PGRES_COPY_BOTH: + pg_log_error("\\watch cannot be used with COPY"); + PQclear(res); + return -1; + + default: + pg_log_error("unexpected result status for \\watch"); + PQclear(res); + return -1; + } + + PQclear(res); + fflush(pset.queryFout); /* Possible microtiming output */ if (pset.timing) PrintTiming(elapsed_msec); - return res; + return 1; } @@ -839,114 +887,197 @@ ExecQueryTuples(const PGresult *result) /* - * Marshal the COPY data. Either subroutine will get the - * connection out of its COPY state, then call PQresultStatus() - * once and report any error. Return whether all was ok. + * ProcessResult: utility function for use by SendQuery() only + * + * When our command string contained a COPY FROM STDIN or COPY TO STDOUT, + * PQexec() has stopped at the PGresult associated with the first such + * command. In that event, we'll marshal data for the COPY and then cycle + * through any subsequent PGresult objects. * - * For COPY OUT, direct the output to pset.copyStream if it's set, - * otherwise to pset.gfname if it's set, otherwise to queryFout. - * For COPY IN, use pset.copyStream as data source if it's set, - * otherwise cur_cmd_source. + * When the command string contained no such COPY command, this function + * degenerates to an AcceptResult() call. * - * Update result if further processing is necessary, or NULL otherwise. - * Return a result when queryFout can safely output a result status: - * on COPY IN, or on COPY OUT if written to something other than pset.queryFout. - * Returning NULL prevents the command status from being printed, which - * we want if the status line doesn't get taken as part of the COPY data. + * Changes its argument to point to the last PGresult of the command string, + * or NULL if that result was for a COPY TO STDOUT. (Returning NULL prevents + * the command status from being printed, which we want in that case so that + * the status line doesn't get taken as part of the COPY data.) + * + * Returns true on complete success, false otherwise. Possible failure modes + * include purely client-side problems; check the transaction status for the + * server-side opinion. */ static bool -HandleCopyResult(PGresult **result) +ProcessResult(PGresult **results) { - bool success; - FILE *copystream; - PGresult *copy_result; - ExecStatusType result_status = PQresultStatus(*result); - - Assert(result_status == PGRES_COPY_OUT || - result_status == PGRES_COPY_IN); - - SetCancelConn(pset.db); + bool success = true; + bool first_cycle = true; - if (result_status == PGRES_COPY_OUT) + for (;;) { - bool need_close = false; - bool is_pipe = false; + ExecStatusType result_status; + bool is_copy; + PGresult *next_result; - if (pset.copyStream) - { - /* invoked by \copy */ - copystream = pset.copyStream; - } - else if (pset.gfname) + if (!AcceptResult(*results)) { - /* invoked by \g */ - if (openQueryOutputFile(pset.gfname, - ©stream, &is_pipe)) - { - need_close = true; - if (is_pipe) - disable_sigpipe_trap(); - } - else - copystream = NULL; /* discard COPY data entirely */ + /* + * Failure at this point is always a server-side failure or a + * failure to submit the command string. Either way, we're + * finished with this command string. + */ + success = false; + break; } - else + + result_status = PQresultStatus(*results); + switch (result_status) { - /* fall back to the generic query output stream */ - copystream = pset.queryFout; - } + case PGRES_EMPTY_QUERY: + case PGRES_COMMAND_OK: + case PGRES_TUPLES_OK: + is_copy = false; + break; - success = handleCopyOut(pset.db, - copystream, - ©_result) - && (copystream != NULL); + case PGRES_COPY_OUT: + case PGRES_COPY_IN: + is_copy = true; + break; - /* - * Suppress status printing if the report would go to the same - * place as the COPY data just went. Note this doesn't - * prevent error reporting, since handleCopyOut did that. - */ - if (copystream == pset.queryFout) - { - PQclear(copy_result); - copy_result = NULL; + default: + /* AcceptResult() should have caught anything else. */ + is_copy = false; + pg_log_error("unexpected PQresultStatus: %d", result_status); + break; } - if (need_close) + if (is_copy) { - /* close \g argument file/pipe */ - if (is_pipe) + /* + * Marshal the COPY data. Either subroutine will get the + * connection out of its COPY state, then call PQresultStatus() + * once and report any error. + * + * For COPY OUT, direct the output to pset.copyStream if it's set, + * otherwise to pset.gfname if it's set, otherwise to queryFout. + * For COPY IN, use pset.copyStream as data source if it's set, + * otherwise cur_cmd_source. + */ + FILE *copystream; + PGresult *copy_result; + + SetCancelConn(pset.db); + if (result_status == PGRES_COPY_OUT) { - pclose(copystream); - restore_sigpipe_trap(); + bool need_close = false; + bool is_pipe = false; + + if (pset.copyStream) + { + /* invoked by \copy */ + copystream = pset.copyStream; + } + else if (pset.gfname) + { + /* invoked by \g */ + if (openQueryOutputFile(pset.gfname, + ©stream, &is_pipe)) + { + need_close = true; + if (is_pipe) + disable_sigpipe_trap(); + } + else + copystream = NULL; /* discard COPY data entirely */ + } + else + { + /* fall back to the generic query output stream */ + copystream = pset.queryFout; + } + + success = handleCopyOut(pset.db, + copystream, + ©_result) + && success + && (copystream != NULL); + + /* + * Suppress status printing if the report would go to the same + * place as the COPY data just went. Note this doesn't + * prevent error reporting, since handleCopyOut did that. + */ + if (copystream == pset.queryFout) + { + PQclear(copy_result); + copy_result = NULL; + } + + if (need_close) + { + /* close \g argument file/pipe */ + if (is_pipe) + { + pclose(copystream); + restore_sigpipe_trap(); + } + else + { + fclose(copystream); + } + } } else { - fclose(copystream); + /* COPY IN */ + copystream = pset.copyStream ? pset.copyStream : pset.cur_cmd_source; + success = handleCopyIn(pset.db, + copystream, + PQbinaryTuples(*results), + ©_result) && success; } + ResetCancelConn(); + + /* + * Replace the PGRES_COPY_OUT/IN result with COPY command's exit + * status, or with NULL if we want to suppress printing anything. + */ + PQclear(*results); + *results = copy_result; } - } - else - { - /* COPY IN */ - copystream = pset.copyStream ? pset.copyStream : pset.cur_cmd_source; - success = handleCopyIn(pset.db, - copystream, - PQbinaryTuples(*result), - ©_result); + else if (first_cycle) + { + /* fast path: no COPY commands; PQexec visited all results */ + break; + } + + /* + * Check PQgetResult() again. In the typical case of a single-command + * string, it will return NULL. Otherwise, we'll have other results + * to process that may include other COPYs. We keep the last result. + */ + next_result = PQgetResult(pset.db); + if (!next_result) + break; + + PQclear(*results); + *results = next_result; + first_cycle = false; } - ResetCancelConn(); - PQclear(*result); - *result = copy_result; + SetResultVariables(*results, success); + + /* may need this to recover from conn loss during COPY */ + if (!first_cycle && !CheckConnection()) + return false; return success; } + /* * PrintQueryStatus: report command status as required * - * Note: Utility function for use by HandleQueryResult() only. + * Note: Utility function for use by PrintQueryResults() only. */ static void PrintQueryStatus(PGresult *results) @@ -974,50 +1105,43 @@ PrintQueryStatus(PGresult *results) /* - * HandleQueryResult: print out, store or execute one query result - * as required. + * PrintQueryResults: print out (or store or execute) query results as required + * + * Note: Utility function for use by SendQuery() only. * * Returns true if the query executed successfully, false otherwise. */ static bool -HandleQueryResult(PGresult *result, bool last) +PrintQueryResults(PGresult *results) { bool success; const char *cmdstatus; - if (result == NULL) + if (!results) return false; - switch (PQresultStatus(result)) + switch (PQresultStatus(results)) { case PGRES_TUPLES_OK: /* store or execute or print the data ... */ - if (last && pset.gset_prefix) - success = StoreQueryTuple(result); - else if (last && pset.gexec_flag) - success = ExecQueryTuples(result); - else if (last && pset.crosstab_flag) - success = PrintResultsInCrosstab(result); - else if (last || pset.show_all_results) - success = PrintQueryTuples(result); + if (pset.gset_prefix) + success = StoreQueryTuple(results); + else if (pset.gexec_flag) + success = ExecQueryTuples(results); + else if (pset.crosstab_flag) + success = PrintResultsInCrosstab(results); else - success = true; - + success = PrintQueryTuples(results); /* if it's INSERT/UPDATE/DELETE RETURNING, also print status */ - if (last || pset.show_all_results) - { - cmdstatus = PQcmdStatus(result); - if (strncmp(cmdstatus, "INSERT", 6) == 0 || - strncmp(cmdstatus, "UPDATE", 6) == 0 || - strncmp(cmdstatus, "DELETE", 6) == 0) - PrintQueryStatus(result); - } - + cmdstatus = PQcmdStatus(results); + if (strncmp(cmdstatus, "INSERT", 6) == 0 || + strncmp(cmdstatus, "UPDATE", 6) == 0 || + strncmp(cmdstatus, "DELETE", 6) == 0) + PrintQueryStatus(results); break; case PGRES_COMMAND_OK: - if (last || pset.show_all_results) - PrintQueryStatus(result); + PrintQueryStatus(results); success = true; break; @@ -1027,7 +1151,7 @@ HandleQueryResult(PGresult *result, bool last) case PGRES_COPY_OUT: case PGRES_COPY_IN: - /* nothing to do here: already processed */ + /* nothing to do here */ success = true; break; @@ -1040,7 +1164,7 @@ HandleQueryResult(PGresult *result, bool last) default: success = false; pg_log_error("unexpected PQresultStatus: %d", - PQresultStatus(result)); + PQresultStatus(results)); break; } @@ -1049,217 +1173,6 @@ HandleQueryResult(PGresult *result, bool last) return success; } -/* - * Data structure and functions to record notices while they are - * emitted, so that they can be shown later. - * - * We need to know which result is last, which requires to extract - * one result in advance, hence two buffers are needed. - */ -typedef struct { - bool in_flip; - PQExpBufferData flip; - PQExpBufferData flop; -} t_notice_messages; - -/* - * Store notices in appropriate buffer, for later display. - */ -static void -AppendNoticeMessage(void *arg, const char *msg) -{ - t_notice_messages *notes = (t_notice_messages*) arg; - appendPQExpBufferStr(notes->in_flip ? ¬es->flip : ¬es->flop, msg); -} - -/* - * Show notices stored in buffer, which is then reset. - */ -static void -ShowNoticeMessage(t_notice_messages *notes) -{ - PQExpBufferData *current = notes->in_flip ? ¬es->flip : ¬es->flop; - if (current->data != NULL && *current->data != '\0') - pg_log_info("%s", current->data); - resetPQExpBuffer(current); -} - -/* - * SendQueryAndProcessResults: utility function for use by SendQuery() - * and PSQLexecWatch(). - * - * Sends query and cycles through PGresult objects. - * - * When not under \watch and if our command string contained a COPY FROM STDIN - * or COPY TO STDOUT, the PGresult associated with these commands must be - * processed by providing an input or output stream. In that event, we'll - * marshal data for the COPY. - * - * For other commands, the results are processed normally, depending on their - * status. - * - * Returns 1 on complete success, 0 on interrupt and -1 or errors. Possible - * failure modes include purely client-side problems; check the transaction - * status for the server-side opinion. - * - * Note that on a combined query, failure does not mean that nothing was - * committed. - */ -static int -SendQueryAndProcessResults(const char *query, double *pelapsed_msec, bool is_watch) -{ - bool success; - instr_time before; - PGresult *result; - t_notice_messages notes; - - if (pset.timing) - INSTR_TIME_SET_CURRENT(before); - - success = PQsendQuery(pset.db, query); - ResetCancelConn(); - - if (!success) - { - const char *error = PQerrorMessage(pset.db); - - if (strlen(error)) - pg_log_info("%s", error); - - CheckConnection(); - - return -1; - } - - /* - * If SIGINT is sent while the query is processing, the interrupt will be - * consumed. The user's intention, though, is to cancel the entire watch - * process, so detect a sent cancellation request and exit in this case. - */ - if (is_watch && cancel_pressed) - { - ClearOrSaveAllResults(); - return 0; - } - - /* intercept notices */ - notes.in_flip = true; - initPQExpBuffer(¬es.flip); - initPQExpBuffer(¬es.flop); - PQsetNoticeProcessor(pset.db, AppendNoticeMessage, ¬es); - - /* first result */ - result = PQgetResult(pset.db); - - while (result != NULL) - { - ExecStatusType result_status; - PGresult *next_result; - bool last; - - if (!AcceptResult(result, false)) - { - /* - * Some error occured, either a server-side failure or - * a failure to submit the command string. Record that. - */ - const char *error = PQerrorMessage(pset.db); - - ShowNoticeMessage(¬es); - if (strlen(error)) - pg_log_info("%s", error); - CheckConnection(); - if (!is_watch) - SetResultVariables(result, false); - ClearOrSaveResult(result); - success = false; - - /* and switch to next result */ - result = PQgetResult(pset.db); - continue; - } - - /* must handle COPY before changing the current result */ - result_status = PQresultStatus(result); - Assert(result_status != PGRES_COPY_BOTH); - if (result_status == PGRES_COPY_IN || - result_status == PGRES_COPY_OUT) - { - ShowNoticeMessage(¬es); - - if (is_watch) - { - ClearOrSaveAllResults(); - pg_log_error("\\watch cannot be used with COPY"); - return -1; - } - - /* use normal notice processor during COPY */ - PQsetNoticeProcessor(pset.db, NoticeProcessor, NULL); - - success &= HandleCopyResult(&result); - - PQsetNoticeProcessor(pset.db, AppendNoticeMessage, ¬es); - } - - /* - * Check PQgetResult() again. In the typical case of a single-command - * string, it will return NULL. Otherwise, we'll have other results - * to process. - */ - notes.in_flip = !notes.in_flip; - next_result = PQgetResult(pset.db); - notes.in_flip = !notes.in_flip; - last = (next_result == NULL); - - /* - * Get timing measure before printing the last result. - * - * It will include the display of previous results, if any. - * This cannot be helped because the server goes on processing - * further queries anyway while the previous ones are being displayed. - * The parallel execution of the client display hides the server time - * when it is shorter. - * - * With combined queries, timing must be understood as an upper bound - * of the time spent processing them. - */ - if (last && pset.timing) - { - instr_time now; - INSTR_TIME_SET_CURRENT(now); - INSTR_TIME_SUBTRACT(now, before); - *pelapsed_msec = INSTR_TIME_GET_MILLISEC(now); - } - - /* notices already shown above for copy */ - ShowNoticeMessage(¬es); - - /* this may or may not print something depending on settings */ - if (result != NULL) - success &= HandleQueryResult(result, last); - - /* set variables on last result if all went well */ - if (!is_watch && last && success) - SetResultVariables(result, true); - - ClearOrSaveResult(result); - notes.in_flip = !notes.in_flip; - result = next_result; - } - - /* reset notice hook */ - PQsetNoticeProcessor(pset.db, NoticeProcessor, NULL); - termPQExpBuffer(¬es.flip); - termPQExpBuffer(¬es.flop); - - /* may need this to recover from conn loss during COPY */ - if (!CheckConnection()) - return -1; - - return success ? 1 : -1; -} - /* * SendQuery: send the query string to the backend @@ -1381,9 +1294,28 @@ SendQuery(const char *query) pset.crosstab_flag || !is_select_command(query)) { /* Default fetch-it-all-and-print mode */ - int res = SendQueryAndProcessResults(query, &elapsed_msec, false); - OK = (res >= 0); - results = NULL; + instr_time before, + after; + + if (pset.timing) + INSTR_TIME_SET_CURRENT(before); + + results = PQexec(pset.db, query); + + /* these operations are included in the timing result: */ + ResetCancelConn(); + OK = ProcessResult(&results); + + if (pset.timing) + { + INSTR_TIME_SET_CURRENT(after); + INSTR_TIME_SUBTRACT(after, before); + elapsed_msec = INSTR_TIME_GET_MILLISEC(after); + } + + /* but printing results isn't: */ + if (OK && results) + OK = PrintQueryResults(results); } else { @@ -1565,7 +1497,7 @@ DescribeQuery(const char *query, double *elapsed_msec) PQclear(results); results = PQdescribePrepared(pset.db, ""); - OK = AcceptResult(results, true) && + OK = AcceptResult(results) && (PQresultStatus(results) == PGRES_COMMAND_OK); if (OK && results) { @@ -1613,7 +1545,7 @@ DescribeQuery(const char *query, double *elapsed_msec) PQclear(results); results = PQexec(pset.db, buf.data); - OK = AcceptResult(results, true); + OK = AcceptResult(results); if (pset.timing) { @@ -1623,7 +1555,7 @@ DescribeQuery(const char *query, double *elapsed_msec) } if (OK && results) - OK = HandleQueryResult(results, true); + OK = PrintQueryResults(results); termPQExpBuffer(&buf); } @@ -1682,7 +1614,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec) if (PQtransactionStatus(pset.db) == PQTRANS_IDLE) { results = PQexec(pset.db, "BEGIN"); - OK = AcceptResult(results, true) && + OK = AcceptResult(results) && (PQresultStatus(results) == PGRES_COMMAND_OK); ClearOrSaveResult(results); if (!OK) @@ -1696,7 +1628,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec) query); results = PQexec(pset.db, buf.data); - OK = AcceptResult(results, true) && + OK = AcceptResult(results) && (PQresultStatus(results) == PGRES_COMMAND_OK); if (!OK) SetResultVariables(results, OK); @@ -1769,7 +1701,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec) is_pager = false; } - OK = AcceptResult(results, true); + OK = AcceptResult(results); Assert(!OK); SetResultVariables(results, OK); ClearOrSaveResult(results); @@ -1878,7 +1810,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec) results = PQexec(pset.db, "CLOSE _psql_cursor"); if (OK) { - OK = AcceptResult(results, true) && + OK = AcceptResult(results) && (PQresultStatus(results) == PGRES_COMMAND_OK); ClearOrSaveResult(results); } @@ -1888,7 +1820,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec) if (started_txn) { results = PQexec(pset.db, OK ? "COMMIT" : "ROLLBACK"); - OK &= AcceptResult(results, true) && + OK &= AcceptResult(results) && (PQresultStatus(results) == PGRES_COMMAND_OK); ClearOrSaveResult(results); } diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index 36501d5e2b99d..8e3bb38ab1e05 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -411,8 +411,6 @@ helpVariables(unsigned short int pager) fprintf(output, _(" SERVER_VERSION_NAME\n" " SERVER_VERSION_NUM\n" " server's version (in short string or numeric format)\n")); - fprintf(output, _(" SHOW_ALL_RESULTS\n" - " show all results of a combined query (\\;) instead of only the last\n")); fprintf(output, _(" SHOW_CONTEXT\n" " controls display of message context fields [never, errors, always]\n")); fprintf(output, _(" SINGLELINE\n" diff --git a/src/bin/psql/settings.h b/src/bin/psql/settings.h index 62583ad6ca6fc..83f2e6f254edd 100644 --- a/src/bin/psql/settings.h +++ b/src/bin/psql/settings.h @@ -148,7 +148,6 @@ typedef struct _psqlSettings const char *prompt2; const char *prompt3; PGVerbosity verbosity; /* current error verbosity level */ - bool show_all_results; PGContextVisibility show_context; /* current context display level */ } PsqlSettings; diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c index 17437ce07dd13..110906a4e959b 100644 --- a/src/bin/psql/startup.c +++ b/src/bin/psql/startup.c @@ -196,7 +196,6 @@ main(int argc, char *argv[]) SetVariable(pset.vars, "PROMPT1", DEFAULT_PROMPT1); SetVariable(pset.vars, "PROMPT2", DEFAULT_PROMPT2); SetVariable(pset.vars, "PROMPT3", DEFAULT_PROMPT3); - SetVariableBool(pset.vars, "SHOW_ALL_RESULTS"); parse_psql_options(argc, argv, &options); @@ -1131,12 +1130,6 @@ verbosity_hook(const char *newval) return true; } -static bool -show_all_results_hook(const char *newval) -{ - return ParseVariableBool(newval, "SHOW_ALL_RESULTS", &pset.show_all_results); -} - static char * show_context_substitute_hook(char *newval) { @@ -1238,9 +1231,6 @@ EstablishVariableSpace(void) SetVariableHooks(pset.vars, "VERBOSITY", verbosity_substitute_hook, verbosity_hook); - SetVariableHooks(pset.vars, "SHOW_ALL_RESULTS", - bool_substitute_hook, - show_all_results_hook); SetVariableHooks(pset.vars, "SHOW_CONTEXT", show_context_substitute_hook, show_context_hook); diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index d34271e3b8799..cfd0a840c7ca4 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -4139,7 +4139,7 @@ psql_completion(const char *text, int start, int end) matches = complete_from_variables(text, "", "", false); else if (TailMatchesCS("\\set", MatchAny)) { - if (TailMatchesCS("AUTOCOMMIT|ON_ERROR_STOP|QUIET|SHOW_ALL_RESULTS|" + if (TailMatchesCS("AUTOCOMMIT|ON_ERROR_STOP|QUIET|" "SINGLELINE|SINGLESTEP")) COMPLETE_WITH_CS("on", "off"); else if (TailMatchesCS("COMP_KEYWORD_CASE")) diff --git a/src/test/regress/expected/copyselect.out b/src/test/regress/expected/copyselect.out index bb9e026f913ae..72865fe1ebeea 100644 --- a/src/test/regress/expected/copyselect.out +++ b/src/test/regress/expected/copyselect.out @@ -126,7 +126,7 @@ copy (select 1) to stdout\; select 1/0; -- row, then error ERROR: division by zero select 1/0\; copy (select 1) to stdout; -- error only ERROR: division by zero -copy (select 1) to stdout\; copy (select 2) to stdout\; select 3\; select 4; -- 1 2 3 4 +copy (select 1) to stdout\; copy (select 2) to stdout\; select 0\; select 3; -- 1 2 3 1 2 ?column? @@ -134,18 +134,8 @@ copy (select 1) to stdout\; copy (select 2) to stdout\; select 3\; select 4; -- 3 (1 row) - ?column? ----------- - 4 -(1 row) - create table test3 (c int); -select 0\; copy test3 from stdin\; copy test3 from stdin\; select 1; -- 0 1 - ?column? ----------- - 0 -(1 row) - +select 0\; copy test3 from stdin\; copy test3 from stdin\; select 1; -- 1 ?column? ---------- 1 diff --git a/src/test/regress/expected/psql.out b/src/test/regress/expected/psql.out index 672937b2f8872..49139dd3633bd 100644 --- a/src/test/regress/expected/psql.out +++ b/src/test/regress/expected/psql.out @@ -5179,96 +5179,3 @@ List of access methods pg_catalog | && | anyarray | anyarray | boolean | overlaps (1 row) --- --- combined queries --- -CREATE FUNCTION warn(msg TEXT) RETURNS BOOLEAN LANGUAGE plpgsql -AS $$ - BEGIN RAISE NOTICE 'warn %', msg ; RETURN TRUE ; END -$$; --- show both -SELECT 1 AS one \; SELECT warn('1.5') \; SELECT 2 AS two ; - one ------ - 1 -(1 row) - -NOTICE: warn 1.5 -CONTEXT: PL/pgSQL function warn(text) line 2 at RAISE - warn ------- - t -(1 row) - - two ------ - 2 -(1 row) - --- \gset applies to last query only -SELECT 3 AS three \; SELECT warn('3.5') \; SELECT 4 AS four \gset - three -------- - 3 -(1 row) - -NOTICE: warn 3.5 -CONTEXT: PL/pgSQL function warn(text) line 2 at RAISE - warn ------- - t -(1 row) - -\echo :three :four -:three 4 --- syntax error stops all processing -SELECT 5 \; SELECT 6 + \; SELECT warn('6.5') \; SELECT 7 ; -ERROR: syntax error at or near ";" -LINE 1: SELECT 5 ; SELECT 6 + ; SELECT warn('6.5') ; SELECT 7 ; - ^ --- with aborted transaction, stop on first error -BEGIN \; SELECT 8 AS eight \; SELECT 9/0 AS nine \; ROLLBACK \; SELECT 10 AS ten ; - eight -------- - 8 -(1 row) - -ERROR: division by zero --- close previously aborted transaction -ROLLBACK; --- misc SQL commands --- (non SELECT output is sent to stderr, thus is not shown in expected results) -SELECT 'ok' AS "begin" \; -CREATE TABLE psql_comics(s TEXT) \; -INSERT INTO psql_comics VALUES ('Calvin'), ('hobbes') \; -COPY psql_comics FROM STDIN \; -UPDATE psql_comics SET s = 'Hobbes' WHERE s = 'hobbes' \; -DELETE FROM psql_comics WHERE s = 'Moe' \; -COPY psql_comics TO STDOUT \; -TRUNCATE psql_comics \; -DROP TABLE psql_comics \; -SELECT 'ok' AS "done" ; - begin -------- - ok -(1 row) - -Calvin -Susie -Hobbes - done ------- - ok -(1 row) - -\set SHOW_ALL_RESULTS off -SELECT 1 AS one \; SELECT warn('1.5') \; SELECT 2 AS two ; -NOTICE: warn 1.5 -CONTEXT: PL/pgSQL function warn(text) line 2 at RAISE - two ------ - 2 -(1 row) - -\set SHOW_ALL_RESULTS on -DROP FUNCTION warn(TEXT); diff --git a/src/test/regress/expected/transactions.out b/src/test/regress/expected/transactions.out index be1db0d5c0b53..61862d595d1ab 100644 --- a/src/test/regress/expected/transactions.out +++ b/src/test/regress/expected/transactions.out @@ -900,18 +900,8 @@ DROP TABLE abc; -- tests rely on the fact that psql will not break SQL commands apart at a -- backslash-quoted semicolon, but will send them as one Query. create temp table i_table (f1 int); --- psql will show all results of a multi-statement Query +-- psql will show only the last result in a multi-statement Query SELECT 1\; SELECT 2\; SELECT 3; - ?column? ----------- - 1 -(1 row) - - ?column? ----------- - 2 -(1 row) - ?column? ---------- 3 @@ -926,12 +916,6 @@ insert into i_table values(1)\; select * from i_table; -- 1/0 error will cause rolling back the whole implicit transaction insert into i_table values(2)\; select * from i_table\; select 1/0; - f1 ----- - 1 - 2 -(2 rows) - ERROR: division by zero select * from i_table; f1 @@ -951,18 +935,8 @@ WARNING: there is no transaction in progress -- begin converts implicit transaction into a regular one that -- can extend past the end of the Query select 1\; begin\; insert into i_table values(5); - ?column? ----------- - 1 -(1 row) - commit; select 1\; begin\; insert into i_table values(6); - ?column? ----------- - 1 -(1 row) - rollback; -- commit in implicit-transaction state commits but issues a warning. insert into i_table values(7)\; commit\; insert into i_table values(8)\; select 1/0; @@ -989,52 +963,22 @@ rollback; -- we are not in a transaction at this point WARNING: there is no transaction in progress -- implicit transaction block is still a transaction block, for e.g. VACUUM SELECT 1\; VACUUM; - ?column? ----------- - 1 -(1 row) - ERROR: VACUUM cannot run inside a transaction block SELECT 1\; COMMIT\; VACUUM; WARNING: there is no transaction in progress - ?column? ----------- - 1 -(1 row) - ERROR: VACUUM cannot run inside a transaction block -- we disallow savepoint-related commands in implicit-transaction state SELECT 1\; SAVEPOINT sp; - ?column? ----------- - 1 -(1 row) - ERROR: SAVEPOINT can only be used in transaction blocks SELECT 1\; COMMIT\; SAVEPOINT sp; WARNING: there is no transaction in progress - ?column? ----------- - 1 -(1 row) - ERROR: SAVEPOINT can only be used in transaction blocks ROLLBACK TO SAVEPOINT sp\; SELECT 2; ERROR: ROLLBACK TO SAVEPOINT can only be used in transaction blocks SELECT 2\; RELEASE SAVEPOINT sp\; SELECT 3; - ?column? ----------- - 2 -(1 row) - ERROR: RELEASE SAVEPOINT can only be used in transaction blocks -- but this is OK, because the BEGIN converts it to a regular xact SELECT 1\; BEGIN\; SAVEPOINT sp\; ROLLBACK TO SAVEPOINT sp\; COMMIT; - ?column? ----------- - 1 -(1 row) - -- Tests for AND CHAIN in implicit transaction blocks SET TRANSACTION READ ONLY\; COMMIT AND CHAIN; -- error ERROR: COMMIT AND CHAIN can only be used in transaction blocks diff --git a/src/test/regress/sql/copyselect.sql b/src/test/regress/sql/copyselect.sql index e32a4f8e38e52..1d98dad3c8c55 100644 --- a/src/test/regress/sql/copyselect.sql +++ b/src/test/regress/sql/copyselect.sql @@ -84,10 +84,10 @@ drop table test1; -- psql handling of COPY in multi-command strings copy (select 1) to stdout\; select 1/0; -- row, then error select 1/0\; copy (select 1) to stdout; -- error only -copy (select 1) to stdout\; copy (select 2) to stdout\; select 3\; select 4; -- 1 2 3 4 +copy (select 1) to stdout\; copy (select 2) to stdout\; select 0\; select 3; -- 1 2 3 create table test3 (c int); -select 0\; copy test3 from stdin\; copy test3 from stdin\; select 1; -- 0 1 +select 0\; copy test3 from stdin\; copy test3 from stdin\; select 1; -- 1 1 \. 2 diff --git a/src/test/regress/sql/psql.sql b/src/test/regress/sql/psql.sql index f90a0270fc335..68121d171cd91 100644 --- a/src/test/regress/sql/psql.sql +++ b/src/test/regress/sql/psql.sql @@ -1241,41 +1241,3 @@ drop role regress_partitioning_role; \dfa bit* small* \do - pg_catalog.int4 \do && anyarray * - --- --- combined queries --- -CREATE FUNCTION warn(msg TEXT) RETURNS BOOLEAN LANGUAGE plpgsql -AS $$ - BEGIN RAISE NOTICE 'warn %', msg ; RETURN TRUE ; END -$$; --- show both -SELECT 1 AS one \; SELECT warn('1.5') \; SELECT 2 AS two ; --- \gset applies to last query only -SELECT 3 AS three \; SELECT warn('3.5') \; SELECT 4 AS four \gset -\echo :three :four --- syntax error stops all processing -SELECT 5 \; SELECT 6 + \; SELECT warn('6.5') \; SELECT 7 ; --- with aborted transaction, stop on first error -BEGIN \; SELECT 8 AS eight \; SELECT 9/0 AS nine \; ROLLBACK \; SELECT 10 AS ten ; --- close previously aborted transaction -ROLLBACK; --- misc SQL commands --- (non SELECT output is sent to stderr, thus is not shown in expected results) -SELECT 'ok' AS "begin" \; -CREATE TABLE psql_comics(s TEXT) \; -INSERT INTO psql_comics VALUES ('Calvin'), ('hobbes') \; -COPY psql_comics FROM STDIN \; -UPDATE psql_comics SET s = 'Hobbes' WHERE s = 'hobbes' \; -DELETE FROM psql_comics WHERE s = 'Moe' \; -COPY psql_comics TO STDOUT \; -TRUNCATE psql_comics \; -DROP TABLE psql_comics \; -SELECT 'ok' AS "done" ; -Moe -Susie -\. -\set SHOW_ALL_RESULTS off -SELECT 1 AS one \; SELECT warn('1.5') \; SELECT 2 AS two ; -\set SHOW_ALL_RESULTS on -DROP FUNCTION warn(TEXT); diff --git a/src/test/regress/sql/transactions.sql b/src/test/regress/sql/transactions.sql index 7fc9f094680b4..8886280c0a628 100644 --- a/src/test/regress/sql/transactions.sql +++ b/src/test/regress/sql/transactions.sql @@ -504,7 +504,7 @@ DROP TABLE abc; create temp table i_table (f1 int); --- psql will show all results of a multi-statement Query +-- psql will show only the last result in a multi-statement Query SELECT 1\; SELECT 2\; SELECT 3; -- this implicitly commits: From 3157cbe974846729d49a1ee081944eee1839bdd8 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 15 Apr 2021 16:31:36 -0400 Subject: [PATCH 111/671] Stabilize recently-added information_schema test queries. These queries could show unexpected entries if the core system, or concurrently-running test scripts, created any functions that would appear in the information_schema views. Restrict them to showing functions belonging to this test's schema, as the far-older nearby test case does. Per experimentation with conversion of some built-in functions to SQL-function-body style. --- src/test/regress/expected/create_function_3.out | 14 +++++++++++--- src/test/regress/sql/create_function_3.sql | 14 +++++++++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/test/regress/expected/create_function_3.out b/src/test/regress/expected/create_function_3.out index 477130e620e2a..94ff7095e7d0b 100644 --- a/src/test/regress/expected/create_function_3.out +++ b/src/test/regress/expected/create_function_3.out @@ -475,26 +475,34 @@ SELECT r0.routine_name, r1.routine_name FROM information_schema.routine_routine_usage rru JOIN information_schema.routines r0 ON r0.specific_name = rru.specific_name JOIN information_schema.routines r1 ON r1.specific_name = rru.routine_name + WHERE r0.routine_schema = 'temp_func_test' AND + r1.routine_schema = 'temp_func_test' ORDER BY 1, 2; routine_name | routine_name ----------------+---------------- functest_is_4b | functest_is_4a (1 row) -SELECT routine_name, sequence_name FROM information_schema.routine_sequence_usage ORDER BY 1, 2; +SELECT routine_name, sequence_name FROM information_schema.routine_sequence_usage + WHERE routine_schema = 'temp_func_test' + ORDER BY 1, 2; routine_name | sequence_name ---------------+--------------- functest_is_5 | functest1 functest_is_6 | functest1 (2 rows) -SELECT routine_name, table_name, column_name FROM information_schema.routine_column_usage ORDER BY 1, 2; +SELECT routine_name, table_name, column_name FROM information_schema.routine_column_usage + WHERE routine_schema = 'temp_func_test' + ORDER BY 1, 2; routine_name | table_name | column_name ---------------+------------+------------- functest_is_7 | functest2 | a (1 row) -SELECT routine_name, table_name FROM information_schema.routine_table_usage ORDER BY 1, 2; +SELECT routine_name, table_name FROM information_schema.routine_table_usage + WHERE routine_schema = 'temp_func_test' + ORDER BY 1, 2; routine_name | table_name ---------------+------------ functest_is_7 | functest2 diff --git a/src/test/regress/sql/create_function_3.sql b/src/test/regress/sql/create_function_3.sql index 3575ecc69326c..592a43b5ed2ee 100644 --- a/src/test/regress/sql/create_function_3.sql +++ b/src/test/regress/sql/create_function_3.sql @@ -277,10 +277,18 @@ SELECT r0.routine_name, r1.routine_name FROM information_schema.routine_routine_usage rru JOIN information_schema.routines r0 ON r0.specific_name = rru.specific_name JOIN information_schema.routines r1 ON r1.specific_name = rru.routine_name + WHERE r0.routine_schema = 'temp_func_test' AND + r1.routine_schema = 'temp_func_test' + ORDER BY 1, 2; +SELECT routine_name, sequence_name FROM information_schema.routine_sequence_usage + WHERE routine_schema = 'temp_func_test' + ORDER BY 1, 2; +SELECT routine_name, table_name, column_name FROM information_schema.routine_column_usage + WHERE routine_schema = 'temp_func_test' + ORDER BY 1, 2; +SELECT routine_name, table_name FROM information_schema.routine_table_usage + WHERE routine_schema = 'temp_func_test' ORDER BY 1, 2; -SELECT routine_name, sequence_name FROM information_schema.routine_sequence_usage ORDER BY 1, 2; -SELECT routine_name, table_name, column_name FROM information_schema.routine_column_usage ORDER BY 1, 2; -SELECT routine_name, table_name FROM information_schema.routine_table_usage ORDER BY 1, 2; DROP FUNCTION functest_IS_4a CASCADE; DROP SEQUENCE functest1 CASCADE; From 1111b2668d89bfcb6f502789158b1233ab4217a6 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 15 Apr 2021 17:17:20 -0400 Subject: [PATCH 112/671] Undo decision to allow pg_proc.prosrc to be NULL. Commit e717a9a18 changed the longstanding rule that prosrc is NOT NULL because when a SQL-language function is written in SQL-standard style, we don't currently have anything useful to put there. This seems a poor decision though, as it could easily have negative impacts on external PLs (opening them to crashes they didn't use to have, for instance). SQL-function-related code can just as easily test "is prosqlbody not null" as "is prosrc null", so there's no real gain there either. Hence, revert the NOT NULL marking removal and adjust related logic. For now, we just put an empty string into prosrc for SQL-standard functions. Maybe we'll have a better idea later, although the history of things like pg_attrdef.adsrc suggests that it's not easy to maintain a string equivalent of a node tree. This also adds an assertion that queryDesc->sourceText != NULL to standard_ExecutorStart. We'd been silently relying on that for awhile, so let's make it less silent. Also fix some overlooked documentation and test cases. Discussion: https://postgr.es/m/2197698.1617984583@sss.pgh.pa.us --- doc/src/sgml/catalogs.sgml | 16 +++-- src/backend/catalog/pg_proc.c | 31 ++++----- src/backend/commands/functioncmds.c | 11 +++- src/backend/executor/execMain.c | 2 + src/backend/executor/functions.c | 20 +++--- src/backend/optimizer/util/clauses.c | 66 +++++++++---------- src/bin/pg_dump/pg_dump.c | 2 +- src/bin/psql/describe.c | 2 +- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_proc.h | 2 +- src/include/executor/functions.h | 5 +- .../regress/expected/create_function_3.out | 6 ++ src/test/regress/expected/opr_sanity.out | 11 +++- src/test/regress/sql/create_function_3.sql | 5 ++ src/test/regress/sql/opr_sanity.sql | 7 +- 15 files changed, 109 insertions(+), 79 deletions(-) diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 2656786d1e6dc..1345791e96381 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -6007,8 +6007,9 @@ SCRAM-SHA-256$<iteration count>:&l prosqlbody pg_node_tree - Pre-parsed SQL function body. This will be used for language SQL - functions if the body is not specified as a string constant. + Pre-parsed SQL function body. This is used for SQL-language + functions when the body is given in SQL-standard notation + rather than as a string literal. It's null in other cases. @@ -6036,9 +6037,16 @@ SCRAM-SHA-256$<iteration count>:&l For compiled functions, both built-in and dynamically loaded, prosrc contains the function's C-language - name (link symbol). For all other currently-known language types, + name (link symbol). + For SQL-language functions, prosrc contains + the function's source text if that is specified as a string literal; + but if the function body is specified in SQL-standard style, + prosrc is unused (typically it's an empty + string) and prosqlbody contains the + pre-parsed definition. + For all other currently-known language types, prosrc contains the function's source - text. probin is unused except for + text. probin is null except for dynamically-loaded C functions, for which it gives the name of the shared library file containing the function. diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index cd13e63852a94..478dbde3fe67d 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -121,7 +121,7 @@ ProcedureCreate(const char *procedureName, /* * sanity checks */ - Assert(PointerIsValid(prosrc) || PointerIsValid(prosqlbody)); + Assert(PointerIsValid(prosrc)); parameterCount = parameterTypes->dim1; if (parameterCount < 0 || parameterCount > FUNC_MAX_ARGS) @@ -336,10 +336,7 @@ ProcedureCreate(const char *procedureName, values[Anum_pg_proc_protrftypes - 1] = trftypes; else nulls[Anum_pg_proc_protrftypes - 1] = true; - if (prosrc) - values[Anum_pg_proc_prosrc - 1] = CStringGetTextDatum(prosrc); - else - nulls[Anum_pg_proc_prosrc - 1] = true; + values[Anum_pg_proc_prosrc - 1] = CStringGetTextDatum(prosrc); if (probin) values[Anum_pg_proc_probin - 1] = CStringGetTextDatum(probin); else @@ -874,26 +871,29 @@ fmgr_sql_validator(PG_FUNCTION_ARGS) /* Postpone body checks if !check_function_bodies */ if (check_function_bodies) { + tmp = SysCacheGetAttr(PROCOID, tuple, Anum_pg_proc_prosrc, &isnull); + if (isnull) + elog(ERROR, "null prosrc"); + + prosrc = TextDatumGetCString(tmp); + /* * Setup error traceback support for ereport(). */ callback_arg.proname = NameStr(proc->proname); - callback_arg.prosrc = NULL; + callback_arg.prosrc = prosrc; sqlerrcontext.callback = sql_function_parse_error_callback; sqlerrcontext.arg = (void *) &callback_arg; sqlerrcontext.previous = error_context_stack; error_context_stack = &sqlerrcontext; - tmp = SysCacheGetAttr(PROCOID, tuple, Anum_pg_proc_prosrc, &isnull); - if (isnull) + /* If we have prosqlbody, pay attention to that not prosrc */ + tmp = SysCacheGetAttr(PROCOID, tuple, Anum_pg_proc_prosqlbody, &isnull); + if (!isnull) { Node *n; - tmp = SysCacheGetAttr(PROCOID, tuple, Anum_pg_proc_prosqlbody, &isnull); - if (isnull) - elog(ERROR, "null prosrc and prosqlbody"); - n = stringToNode(TextDatumGetCString(tmp)); if (IsA(n, List)) querytree_list = castNode(List, n); @@ -902,10 +902,6 @@ fmgr_sql_validator(PG_FUNCTION_ARGS) } else { - prosrc = TextDatumGetCString(tmp); - - callback_arg.prosrc = prosrc; - /* * We can't do full prechecking of the function definition if there * are any polymorphic input types, because actual datatypes of @@ -1001,9 +997,6 @@ function_parse_error_transpose(const char *prosrc) int newerrposition; const char *queryText; - if (!prosrc) - return false; - /* * Nothing to do unless we are dealing with a syntax error that has a * cursor position. diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index 199029b7a8518..dc317c83afc36 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -958,8 +958,17 @@ interpret_AS_clause(Oid languageOid, const char *languageName, *sql_body_out = (Node *) q; } + /* + * We must put something in prosrc. For the moment, just record an + * empty string. It might be useful to store the original text of the + * CREATE FUNCTION statement --- but to make actual use of that in + * error reports, we'd also have to adjust readfuncs.c to not throw + * away node location fields when reading prosqlbody. + */ + *prosrc_str_p = pstrdup(""); + + /* But we definitely don't need probin. */ *probin_str_p = NULL; - *prosrc_str_p = NULL; } else { diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index b2e2df8773312..2cf6dad768581 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -195,6 +195,8 @@ standard_ExecutorStart(QueryDesc *queryDesc, int eflags) palloc0(nParamExec * sizeof(ParamExecData)); } + /* We now require all callers to provide sourceText */ + Assert(queryDesc->sourceText != NULL); estate->es_sourceText = queryDesc->sourceText; /* diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index 642683843ed41..39580f7d5776a 100644 --- a/src/backend/executor/functions.c +++ b/src/backend/executor/functions.c @@ -667,6 +667,15 @@ init_sql_fcache(FunctionCallInfo fcinfo, Oid collation, bool lazyEvalOK) procedureTuple, Anum_pg_proc_prosrc, &isNull); + if (isNull) + elog(ERROR, "null prosrc for function %u", foid); + fcache->src = TextDatumGetCString(tmp); + + /* If we have prosqlbody, pay attention to that not prosrc. */ + tmp = SysCacheGetAttr(PROCOID, + procedureTuple, + Anum_pg_proc_prosqlbody, + &isNull); /* * Parse and rewrite the queries in the function text. Use sublists to @@ -678,18 +687,11 @@ init_sql_fcache(FunctionCallInfo fcinfo, Oid collation, bool lazyEvalOK) * plancache.c. */ queryTree_list = NIL; - if (isNull) + if (!isNull) { Node *n; List *stored_query_list; - tmp = SysCacheGetAttr(PROCOID, - procedureTuple, - Anum_pg_proc_prosqlbody, - &isNull); - if (isNull) - elog(ERROR, "null prosrc and prosqlbody for function %u", foid); - n = stringToNode(TextDatumGetCString(tmp)); if (IsA(n, List)) stored_query_list = linitial_node(List, castNode(List, n)); @@ -710,8 +712,6 @@ init_sql_fcache(FunctionCallInfo fcinfo, Oid collation, bool lazyEvalOK) { List *raw_parsetree_list; - fcache->src = TextDatumGetCString(tmp); - raw_parsetree_list = pg_parse_query(fcache->src); foreach(lc, raw_parsetree_list) diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 526997327c6e1..d9ad4efc5eac5 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -4317,32 +4317,37 @@ inline_function(Oid funcid, Oid result_type, Oid result_collid, ALLOCSET_DEFAULT_SIZES); oldcxt = MemoryContextSwitchTo(mycxt); + /* Fetch the function body */ + tmp = SysCacheGetAttr(PROCOID, + func_tuple, + Anum_pg_proc_prosrc, + &isNull); + if (isNull) + elog(ERROR, "null prosrc for function %u", funcid); + src = TextDatumGetCString(tmp); + /* * Setup error traceback support for ereport(). This is so that we can * finger the function that bad information came from. */ callback_arg.proname = NameStr(funcform->proname); - callback_arg.prosrc = NULL; + callback_arg.prosrc = src; sqlerrcontext.callback = sql_inline_error_callback; sqlerrcontext.arg = (void *) &callback_arg; sqlerrcontext.previous = error_context_stack; error_context_stack = &sqlerrcontext; - /* Fetch the function body */ + /* If we have prosqlbody, pay attention to that not prosrc */ tmp = SysCacheGetAttr(PROCOID, func_tuple, - Anum_pg_proc_prosrc, + Anum_pg_proc_prosqlbody, &isNull); - if (isNull) + if (!isNull) { Node *n; List *querytree_list; - tmp = SysCacheGetAttr(PROCOID, func_tuple, Anum_pg_proc_prosqlbody, &isNull); - if (isNull) - elog(ERROR, "null prosrc and prosqlbody for function %u", funcid); - n = stringToNode(TextDatumGetCString(tmp)); if (IsA(n, List)) querytree_list = linitial_node(List, castNode(List, n)); @@ -4354,10 +4359,6 @@ inline_function(Oid funcid, Oid result_type, Oid result_collid, } else { - src = TextDatumGetCString(tmp); - - callback_arg.prosrc = src; - /* * Set up to handle parameters while parsing the function body. We need a * dummy FuncExpr node containing the already-simplified arguments to pass @@ -4658,15 +4659,12 @@ sql_inline_error_callback(void *arg) int syntaxerrposition; /* If it's a syntax error, convert to internal syntax error report */ - if (callback_arg->prosrc) + syntaxerrposition = geterrposition(); + if (syntaxerrposition > 0) { - syntaxerrposition = geterrposition(); - if (syntaxerrposition > 0) - { - errposition(0); - internalerrposition(syntaxerrposition); - internalerrquery(callback_arg->prosrc); - } + errposition(0); + internalerrposition(syntaxerrposition); + internalerrquery(callback_arg->prosrc); } errcontext("SQL function \"%s\" during inlining", callback_arg->proname); @@ -4778,6 +4776,7 @@ inline_set_returning_function(PlannerInfo *root, RangeTblEntry *rte) Oid func_oid; HeapTuple func_tuple; Form_pg_proc funcform; + char *src; Datum tmp; bool isNull; MemoryContext oldcxt; @@ -4886,31 +4885,36 @@ inline_set_returning_function(PlannerInfo *root, RangeTblEntry *rte) ALLOCSET_DEFAULT_SIZES); oldcxt = MemoryContextSwitchTo(mycxt); + /* Fetch the function body */ + tmp = SysCacheGetAttr(PROCOID, + func_tuple, + Anum_pg_proc_prosrc, + &isNull); + if (isNull) + elog(ERROR, "null prosrc for function %u", func_oid); + src = TextDatumGetCString(tmp); + /* * Setup error traceback support for ereport(). This is so that we can * finger the function that bad information came from. */ callback_arg.proname = NameStr(funcform->proname); - callback_arg.prosrc = NULL; + callback_arg.prosrc = src; sqlerrcontext.callback = sql_inline_error_callback; sqlerrcontext.arg = (void *) &callback_arg; sqlerrcontext.previous = error_context_stack; error_context_stack = &sqlerrcontext; - /* Fetch the function body */ + /* If we have prosqlbody, pay attention to that not prosrc */ tmp = SysCacheGetAttr(PROCOID, func_tuple, - Anum_pg_proc_prosrc, + Anum_pg_proc_prosqlbody, &isNull); - if (isNull) + if (!isNull) { Node *n; - tmp = SysCacheGetAttr(PROCOID, func_tuple, Anum_pg_proc_prosqlbody, &isNull); - if (isNull) - elog(ERROR, "null prosrc and prosqlbody for function %u", func_oid); - n = stringToNode(TextDatumGetCString(tmp)); if (IsA(n, List)) querytree_list = linitial_node(List, castNode(List, n)); @@ -4927,12 +4931,6 @@ inline_set_returning_function(PlannerInfo *root, RangeTblEntry *rte) } else { - char *src; - - src = TextDatumGetCString(tmp); - - callback_arg.prosrc = src; - /* * Set up to handle parameters while parsing the function body. We can * use the FuncExpr just created as the input for diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 391947340f4d2..e397b7635680c 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -12247,7 +12247,7 @@ dumpFunc(Archive *fout, const FuncInfo *finfo) if (fout->remoteVersion >= 140000) appendPQExpBufferStr(query, - "CASE WHEN prosrc IS NULL AND lanname = 'sql' THEN pg_get_function_sqlbody(p.oid) END AS prosqlbody\n"); + "pg_get_function_sqlbody(p.oid) AS prosqlbody\n"); else appendPQExpBufferStr(query, "NULL AS prosqlbody\n"); diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index fdc2a89085a0c..400b683859c35 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -512,7 +512,7 @@ describeFunctions(const char *functypes, const char *func_pattern, gettext_noop("Language")); if (pset.sversion >= 140000) appendPQExpBuffer(&buf, - ",\n COALESCE(p.prosrc, pg_catalog.pg_get_function_sqlbody(p.oid)) as \"%s\"", + ",\n COALESCE(pg_catalog.pg_get_function_sqlbody(p.oid), p.prosrc) as \"%s\"", gettext_noop("Source code")); else appendPQExpBuffer(&buf, diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 45722fdbb139e..87e9596da5691 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202104081 +#define CATALOG_VERSION_NO 202104151 #endif diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 8d58067d0344e..448d9898cb31f 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -112,7 +112,7 @@ CATALOG(pg_proc,1255,ProcedureRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(81,Proce Oid protrftypes[1] BKI_DEFAULT(_null_) BKI_LOOKUP(pg_type); /* procedure source text */ - text prosrc; + text prosrc BKI_FORCE_NOT_NULL; /* secondary procedure info (can be NULL) */ text probin BKI_DEFAULT(_null_); diff --git a/src/include/executor/functions.h b/src/include/executor/functions.h index dcb8e18437fe1..b56ce26da07f9 100644 --- a/src/include/executor/functions.h +++ b/src/include/executor/functions.h @@ -17,9 +17,6 @@ #include "nodes/execnodes.h" #include "tcop/dest.h" -/* This struct is known only within executor/functions.c */ -typedef struct SQLFunctionParseInfo *SQLFunctionParseInfoPtr; - /* * Data structure needed by the parser callback hooks to resolve parameter * references during parsing of a SQL function's body. This is separate from @@ -35,6 +32,8 @@ typedef struct SQLFunctionParseInfo Oid collation; /* function's input collation, if known */ } SQLFunctionParseInfo; +typedef SQLFunctionParseInfo *SQLFunctionParseInfoPtr; + extern Datum fmgr_sql(PG_FUNCTION_ARGS); extern SQLFunctionParseInfoPtr prepare_sql_fn_parse_info(HeapTuple procedureTuple, diff --git a/src/test/regress/expected/create_function_3.out b/src/test/regress/expected/create_function_3.out index 94ff7095e7d0b..ce480890127a6 100644 --- a/src/test/regress/expected/create_function_3.out +++ b/src/test/regress/expected/create_function_3.out @@ -290,6 +290,12 @@ CREATE FUNCTION functest_S_xx(x anyarray) RETURNS anyelement LANGUAGE SQL RETURN x[1]; ERROR: SQL function with unquoted function body cannot have polymorphic arguments +-- check reporting of parse-analysis errors +CREATE FUNCTION functest_S_xx(x date) RETURNS boolean + LANGUAGE SQL + RETURN x > 1; +ERROR: operator does not exist: date > integer +HINT: No operator matches the given name and argument types. You might need to add explicit type casts. -- tricky parsing CREATE FUNCTION functest_S_15(x int) RETURNS boolean LANGUAGE SQL diff --git a/src/test/regress/expected/opr_sanity.out b/src/test/regress/expected/opr_sanity.out index fa26bf761046a..7a0d345b608cf 100644 --- a/src/test/regress/expected/opr_sanity.out +++ b/src/test/regress/expected/opr_sanity.out @@ -91,10 +91,17 @@ WHERE p1.prolang = 0 OR p1.prorettype = 0 OR -----+--------- (0 rows) --- prosrc should never be null or empty +-- prosrc should never be null; it can be empty only if prosqlbody isn't null SELECT p1.oid, p1.proname FROM pg_proc as p1 -WHERE prosrc IS NULL OR prosrc = '' OR prosrc = '-'; +WHERE prosrc IS NULL; + oid | proname +-----+--------- +(0 rows) + +SELECT p1.oid, p1.proname +FROM pg_proc as p1 +WHERE (prosrc = '' OR prosrc = '-') AND prosqlbody IS NULL; oid | proname -----+--------- (0 rows) diff --git a/src/test/regress/sql/create_function_3.sql b/src/test/regress/sql/create_function_3.sql index 592a43b5ed2ee..4b778999ed7fc 100644 --- a/src/test/regress/sql/create_function_3.sql +++ b/src/test/regress/sql/create_function_3.sql @@ -191,6 +191,11 @@ CREATE FUNCTION functest_S_xx(x anyarray) RETURNS anyelement LANGUAGE SQL RETURN x[1]; +-- check reporting of parse-analysis errors +CREATE FUNCTION functest_S_xx(x date) RETURNS boolean + LANGUAGE SQL + RETURN x > 1; + -- tricky parsing CREATE FUNCTION functest_S_15(x int) RETURNS boolean LANGUAGE SQL diff --git a/src/test/regress/sql/opr_sanity.sql b/src/test/regress/sql/opr_sanity.sql index 04691745981f9..393acdf8c3cf3 100644 --- a/src/test/regress/sql/opr_sanity.sql +++ b/src/test/regress/sql/opr_sanity.sql @@ -96,10 +96,13 @@ WHERE p1.prolang = 0 OR p1.prorettype = 0 OR provolatile NOT IN ('i', 's', 'v') OR proparallel NOT IN ('s', 'r', 'u'); --- prosrc should never be null or empty +-- prosrc should never be null; it can be empty only if prosqlbody isn't null SELECT p1.oid, p1.proname FROM pg_proc as p1 -WHERE prosrc IS NULL OR prosrc = '' OR prosrc = '-'; +WHERE prosrc IS NULL; +SELECT p1.oid, p1.proname +FROM pg_proc as p1 +WHERE (prosrc = '' OR prosrc = '-') AND prosqlbody IS NULL; -- proretset should only be set for normal functions SELECT p1.oid, p1.proname From 83efce7a1ebc5bae79617ddba12a64790141725c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 15 Apr 2021 17:17:45 -0400 Subject: [PATCH 113/671] Revert "Cope with NULL query string in ExecInitParallelPlan()." This reverts commit b3ee4c503872f3d0a5d6a7cbde48815f555af15b. We don't need it in the wake of the preceding commit, which added an upstream check that the querystring isn't null. Discussion: https://postgr.es/m/2197698.1617984583@sss.pgh.pa.us --- src/backend/executor/execParallel.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/backend/executor/execParallel.c b/src/backend/executor/execParallel.c index 4fca8782b2fad..5dab1e36b9bed 100644 --- a/src/backend/executor/execParallel.c +++ b/src/backend/executor/execParallel.c @@ -647,7 +647,7 @@ ExecInitParallelPlan(PlanState *planstate, EState *estate, shm_toc_estimate_keys(&pcxt->estimator, 1); /* Estimate space for query text. */ - query_len = estate->es_sourceText ? strlen(estate->es_sourceText) : 0; + query_len = strlen(estate->es_sourceText); shm_toc_estimate_chunk(&pcxt->estimator, query_len + 1); shm_toc_estimate_keys(&pcxt->estimator, 1); @@ -742,10 +742,7 @@ ExecInitParallelPlan(PlanState *planstate, EState *estate, /* Store query string */ query_string = shm_toc_allocate(pcxt->toc, query_len + 1); - if (query_len == 0) - query_string[0] = 0; - else - memcpy(query_string, estate->es_sourceText, query_len + 1); + memcpy(query_string, estate->es_sourceText, query_len + 1); shm_toc_insert(pcxt->toc, PARALLEL_KEY_QUERY_TEXT, query_string); /* Store serialized PlannedStmt. */ From 409723365b2708acd3bdf2e830257504bdefac4b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 15 Apr 2021 17:24:12 -0400 Subject: [PATCH 114/671] Provide query source text when parsing a SQL-standard function body. Without this, we lose error cursor positions, as shown in the modified regression test result. Discussion: https://postgr.es/m/2197698.1617984583@sss.pgh.pa.us --- src/backend/commands/functioncmds.c | 10 ++++++++-- src/test/regress/expected/create_function_3.out | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index dc317c83afc36..e7cb5c65e9a45 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -852,7 +852,9 @@ static void interpret_AS_clause(Oid languageOid, const char *languageName, char *funcname, List *as, Node *sql_body_in, List *parameterTypes, List *inParameterNames, - char **prosrc_str_p, char **probin_str_p, Node **sql_body_out) + char **prosrc_str_p, char **probin_str_p, + Node **sql_body_out, + const char *queryString) { if (!sql_body_in && !as) ereport(ERROR, @@ -929,6 +931,7 @@ interpret_AS_clause(Oid languageOid, const char *languageName, Query *q; ParseState *pstate = make_parsestate(NULL); + pstate->p_sourcetext = queryString; sql_fn_parser_setup(pstate, pinfo); q = transformStmt(pstate, stmt); if (q->commandType == CMD_UTILITY) @@ -947,6 +950,7 @@ interpret_AS_clause(Oid languageOid, const char *languageName, Query *q; ParseState *pstate = make_parsestate(NULL); + pstate->p_sourcetext = queryString; sql_fn_parser_setup(pstate, pinfo); q = transformStmt(pstate, sql_body_in); if (q->commandType == CMD_UTILITY) @@ -954,6 +958,7 @@ interpret_AS_clause(Oid languageOid, const char *languageName, errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("%s is not yet supported in unquoted SQL function body", GetCommandTagName(CreateCommandTag(q->utilityStmt)))); + free_parsestate(pstate); *sql_body_out = (Node *) q; } @@ -1220,7 +1225,8 @@ CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt) interpret_AS_clause(languageOid, language, funcname, as_clause, stmt->sql_body, parameterTypes_list, inParameterNames_list, - &prosrc_str, &probin_str, &prosqlbody); + &prosrc_str, &probin_str, &prosqlbody, + pstate->p_sourcetext); /* * Set default values for COST and ROWS depending on other parameters; diff --git a/src/test/regress/expected/create_function_3.out b/src/test/regress/expected/create_function_3.out index ce480890127a6..5b6bc5eddbe75 100644 --- a/src/test/regress/expected/create_function_3.out +++ b/src/test/regress/expected/create_function_3.out @@ -295,6 +295,8 @@ CREATE FUNCTION functest_S_xx(x date) RETURNS boolean LANGUAGE SQL RETURN x > 1; ERROR: operator does not exist: date > integer +LINE 3: RETURN x > 1; + ^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts. -- tricky parsing CREATE FUNCTION functest_S_15(x int) RETURNS boolean From 1bf946bd43e545b86e567588b791311fe4e36a8c Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 16 Apr 2021 13:20:58 +1200 Subject: [PATCH 115/671] Doc: Document known problem with Windows collation versions. Warn users that locales with traditional Windows NLS names like "English_United States.1252" won't provide version information, and that something like initdb --lc-collate=en-US would be needed to fix that problem for the initial template databases. Discussion: https://postgr.es/m/CA%2BhUKGJ_hk3rU%3D%3Dg2FpAMChb_4i%2BTJacpjjqFsinY-tRM3FBmA%40mail.gmail.com --- doc/src/sgml/charset.sgml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/src/sgml/charset.sgml b/doc/src/sgml/charset.sgml index 1b00e543a66ff..1c673cc1103a4 100644 --- a/doc/src/sgml/charset.sgml +++ b/doc/src/sgml/charset.sgml @@ -985,6 +985,15 @@ CREATE COLLATION ignore_accents (provider = icu, locale = 'und-u-ks-level1-kc-tr approach is imperfect as maintainers are free to back-port newer collation definitions to older C library releases. + + When using Windows collations, version information is only available for + collations defined with BCP 47 language tags such as + en-US. Currently, initdb selects + a default locale using a traditional Windows language and country + string such as English_United States.1252. The + --lc-collate option can be used to provide an explicit + locale name in BCP 47 format. + From f5fc2f5b23d1b1dff60f8ca5dc211161df47eda4 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Fri, 16 Apr 2021 07:34:43 +0530 Subject: [PATCH 116/671] Add information of total data processed to replication slot stats. This adds the statistics about total transactions count and total transaction data logically sent to the decoding output plugin from ReorderBuffer. Users can query the pg_stat_replication_slots view to check these stats. Suggested-by: Andres Freund Author: Vignesh C and Amit Kapila Reviewed-by: Sawada Masahiko, Amit Kapila Discussion: https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de --- contrib/test_decoding/Makefile | 2 + contrib/test_decoding/expected/stats.out | 79 +++++++++++++------ contrib/test_decoding/sql/stats.sql | 48 +++++++---- contrib/test_decoding/t/001_repl_stats.pl | 76 ++++++++++++++++++ doc/src/sgml/monitoring.sgml | 25 ++++++ src/backend/catalog/system_views.sql | 2 + src/backend/postmaster/pgstat.c | 6 ++ src/backend/replication/logical/logical.c | 18 +++-- .../replication/logical/reorderbuffer.c | 21 +++++ src/backend/utils/adt/pgstatfuncs.c | 8 +- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_proc.dat | 6 +- src/include/pgstat.h | 4 + src/include/replication/reorderbuffer.h | 7 ++ src/test/regress/expected/rules.out | 4 +- 15 files changed, 256 insertions(+), 52 deletions(-) create mode 100644 contrib/test_decoding/t/001_repl_stats.pl diff --git a/contrib/test_decoding/Makefile b/contrib/test_decoding/Makefile index c5e28ce5cca78..9a31e0b879587 100644 --- a/contrib/test_decoding/Makefile +++ b/contrib/test_decoding/Makefile @@ -17,6 +17,8 @@ ISOLATION_OPTS = --temp-config $(top_srcdir)/contrib/test_decoding/logical.conf # typical installcheck users do not have (e.g. buildfarm clients). NO_INSTALLCHECK = 1 +TAP_TESTS = 1 + ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) diff --git a/contrib/test_decoding/expected/stats.out b/contrib/test_decoding/expected/stats.out index bca36fa90309c..bc8e601eab6b2 100644 --- a/contrib/test_decoding/expected/stats.out +++ b/contrib/test_decoding/expected/stats.out @@ -8,7 +8,7 @@ SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_d CREATE TABLE stats_test(data text); -- function to wait for counters to advance -CREATE FUNCTION wait_for_decode_stats(check_reset bool) RETURNS void AS $$ +CREATE FUNCTION wait_for_decode_stats(check_reset bool, check_spill_txns bool) RETURNS void AS $$ DECLARE start_time timestamptz := clock_timestamp(); updated bool; @@ -16,12 +16,25 @@ BEGIN -- we don't want to wait forever; loop will exit after 30 seconds FOR i IN 1 .. 300 LOOP - -- check to see if all updates have been reset/updated - SELECT CASE WHEN check_reset THEN (spill_txns = 0) - ELSE (spill_txns > 0) - END - INTO updated - FROM pg_stat_replication_slots WHERE slot_name='regression_slot'; + IF check_spill_txns THEN + + -- check to see if all updates have been reset/updated + SELECT CASE WHEN check_reset THEN (spill_txns = 0) + ELSE (spill_txns > 0) + END + INTO updated + FROM pg_stat_replication_slots WHERE slot_name='regression_slot'; + + ELSE + + -- check to see if all updates have been reset/updated + SELECT CASE WHEN check_reset THEN (total_txns = 0) + ELSE (total_txns > 0) + END + INTO updated + FROM pg_stat_replication_slots WHERE slot_name='regression_slot'; + + END IF; exit WHEN updated; @@ -51,16 +64,16 @@ SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, -- Check stats, wait for the stats collector to update. We can't test the -- exact stats count as that can vary if any background transaction (say by -- autovacuum) happens in parallel to the main transaction. -SELECT wait_for_decode_stats(false); +SELECT wait_for_decode_stats(false, true); wait_for_decode_stats ----------------------- (1 row) -SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count FROM pg_stat_replication_slots; - slot_name | spill_txns | spill_count ------------------+------------+------------- - regression_slot | t | t +SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; + slot_name | spill_txns | spill_count | total_txns | total_bytes +-----------------+------------+-------------+------------+------------- + regression_slot | t | t | t | t (1 row) -- reset the slot stats, and wait for stats collector to reset @@ -70,16 +83,16 @@ SELECT pg_stat_reset_replication_slot('regression_slot'); (1 row) -SELECT wait_for_decode_stats(true); +SELECT wait_for_decode_stats(true, true); wait_for_decode_stats ----------------------- (1 row) -SELECT slot_name, spill_txns, spill_count FROM pg_stat_replication_slots; - slot_name | spill_txns | spill_count ------------------+------------+------------- - regression_slot | 0 | 0 +SELECT slot_name, spill_txns, spill_count, total_txns, total_bytes FROM pg_stat_replication_slots; + slot_name | spill_txns | spill_count | total_txns | total_bytes +-----------------+------------+-------------+------------+------------- + regression_slot | 0 | 0 | 0 | 0 (1 row) -- decode and check stats again. @@ -89,16 +102,36 @@ SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 5002 (1 row) -SELECT wait_for_decode_stats(false); +SELECT wait_for_decode_stats(false, true); + wait_for_decode_stats +----------------------- + +(1 row) + +SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; + slot_name | spill_txns | spill_count | total_txns | total_bytes +-----------------+------------+-------------+------------+------------- + regression_slot | t | t | t | t +(1 row) + +SELECT pg_stat_reset_replication_slot('regression_slot'); + pg_stat_reset_replication_slot +-------------------------------- + +(1 row) + +-- non-spilled xact +INSERT INTO stats_test values(generate_series(1, 10)); +SELECT wait_for_decode_stats(false, false); wait_for_decode_stats ----------------------- (1 row) -SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count FROM pg_stat_replication_slots; - slot_name | spill_txns | spill_count ------------------+------------+------------- - regression_slot | t | t +SELECT slot_name, spill_txns = 0 AS spill_txns, spill_count = 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; + slot_name | spill_txns | spill_count | total_txns | total_bytes +-----------------+------------+-------------+------------+------------- + regression_slot | f | f | t | t (1 row) -- Ensure stats can be repeatedly accessed using the same stats snapshot. See @@ -117,7 +150,7 @@ SELECT slot_name FROM pg_stat_replication_slots; (1 row) COMMIT; -DROP FUNCTION wait_for_decode_stats(bool); +DROP FUNCTION wait_for_decode_stats(bool, bool); DROP TABLE stats_test; SELECT pg_drop_replication_slot('regression_slot'); pg_drop_replication_slot diff --git a/contrib/test_decoding/sql/stats.sql b/contrib/test_decoding/sql/stats.sql index 51294e48e87fd..8c34aeced1de0 100644 --- a/contrib/test_decoding/sql/stats.sql +++ b/contrib/test_decoding/sql/stats.sql @@ -6,7 +6,7 @@ SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_d CREATE TABLE stats_test(data text); -- function to wait for counters to advance -CREATE FUNCTION wait_for_decode_stats(check_reset bool) RETURNS void AS $$ +CREATE FUNCTION wait_for_decode_stats(check_reset bool, check_spill_txns bool) RETURNS void AS $$ DECLARE start_time timestamptz := clock_timestamp(); updated bool; @@ -14,12 +14,25 @@ BEGIN -- we don't want to wait forever; loop will exit after 30 seconds FOR i IN 1 .. 300 LOOP - -- check to see if all updates have been reset/updated - SELECT CASE WHEN check_reset THEN (spill_txns = 0) - ELSE (spill_txns > 0) - END - INTO updated - FROM pg_stat_replication_slots WHERE slot_name='regression_slot'; + IF check_spill_txns THEN + + -- check to see if all updates have been reset/updated + SELECT CASE WHEN check_reset THEN (spill_txns = 0) + ELSE (spill_txns > 0) + END + INTO updated + FROM pg_stat_replication_slots WHERE slot_name='regression_slot'; + + ELSE + + -- check to see if all updates have been reset/updated + SELECT CASE WHEN check_reset THEN (total_txns = 0) + ELSE (total_txns > 0) + END + INTO updated + FROM pg_stat_replication_slots WHERE slot_name='regression_slot'; + + END IF; exit WHEN updated; @@ -46,18 +59,25 @@ SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, -- Check stats, wait for the stats collector to update. We can't test the -- exact stats count as that can vary if any background transaction (say by -- autovacuum) happens in parallel to the main transaction. -SELECT wait_for_decode_stats(false); -SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count FROM pg_stat_replication_slots; +SELECT wait_for_decode_stats(false, true); +SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; -- reset the slot stats, and wait for stats collector to reset SELECT pg_stat_reset_replication_slot('regression_slot'); -SELECT wait_for_decode_stats(true); -SELECT slot_name, spill_txns, spill_count FROM pg_stat_replication_slots; +SELECT wait_for_decode_stats(true, true); +SELECT slot_name, spill_txns, spill_count, total_txns, total_bytes FROM pg_stat_replication_slots; -- decode and check stats again. SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'skip-empty-xacts', '1'); -SELECT wait_for_decode_stats(false); -SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count FROM pg_stat_replication_slots; +SELECT wait_for_decode_stats(false, true); +SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; + +SELECT pg_stat_reset_replication_slot('regression_slot'); + +-- non-spilled xact +INSERT INTO stats_test values(generate_series(1, 10)); +SELECT wait_for_decode_stats(false, false); +SELECT slot_name, spill_txns = 0 AS spill_txns, spill_count = 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; -- Ensure stats can be repeatedly accessed using the same stats snapshot. See -- https://postgr.es/m/20210317230447.c7uc4g3vbs4wi32i%40alap3.anarazel.de @@ -66,6 +86,6 @@ SELECT slot_name FROM pg_stat_replication_slots; SELECT slot_name FROM pg_stat_replication_slots; COMMIT; -DROP FUNCTION wait_for_decode_stats(bool); +DROP FUNCTION wait_for_decode_stats(bool, bool); DROP TABLE stats_test; SELECT pg_drop_replication_slot('regression_slot'); diff --git a/contrib/test_decoding/t/001_repl_stats.pl b/contrib/test_decoding/t/001_repl_stats.pl new file mode 100644 index 0000000000000..11b6cd9b9c70b --- /dev/null +++ b/contrib/test_decoding/t/001_repl_stats.pl @@ -0,0 +1,76 @@ +# Test replication statistics data in pg_stat_replication_slots is sane after +# drop replication slot and restart. +use strict; +use warnings; +use PostgresNode; +use TestLib; +use Test::More tests => 1; + +# Test set-up +my $node = get_new_node('test'); +$node->init(allows_streaming => 'logical'); +$node->append_conf('postgresql.conf', 'synchronous_commit = on'); +$node->start; + +# Create table. +$node->safe_psql('postgres', + "CREATE TABLE test_repl_stat(col1 int)"); + +# Create replication slots. +$node->safe_psql( + 'postgres', qq[ + SELECT pg_create_logical_replication_slot('regression_slot1', 'test_decoding'); + SELECT pg_create_logical_replication_slot('regression_slot2', 'test_decoding'); + SELECT pg_create_logical_replication_slot('regression_slot3', 'test_decoding'); + SELECT pg_create_logical_replication_slot('regression_slot4', 'test_decoding'); +]); + +# Insert some data. +$node->safe_psql('postgres', "INSERT INTO test_repl_stat values(generate_series(1, 5));"); + +$node->safe_psql( + 'postgres', qq[ + SELECT data FROM pg_logical_slot_get_changes('regression_slot1', NULL, + NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); + SELECT data FROM pg_logical_slot_get_changes('regression_slot2', NULL, + NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); + SELECT data FROM pg_logical_slot_get_changes('regression_slot3', NULL, + NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); + SELECT data FROM pg_logical_slot_get_changes('regression_slot4', NULL, + NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); +]); + +# Wait for the statistics to be updated. +$node->poll_query_until( + 'postgres', qq[ + SELECT count(slot_name) >= 4 FROM pg_stat_replication_slots + WHERE slot_name ~ 'regression_slot' + AND total_txns > 0 AND total_bytes > 0; +]) or die "Timed out while waiting for statistics to be updated"; + +# Test to drop one of the replication slot and verify replication statistics data is +# fine after restart. +$node->safe_psql('postgres', "SELECT pg_drop_replication_slot('regression_slot4')"); + +$node->stop; +$node->start; + +# Verify statistics data present in pg_stat_replication_slots are sane after +# restart. +my $result = $node->safe_psql('postgres', + "SELECT slot_name, total_txns > 0 AS total_txn, + total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots + ORDER BY slot_name" +); +is($result, qq(regression_slot1|t|t +regression_slot2|t|t +regression_slot3|t|t), 'check replication statistics are updated'); + +# cleanup +$node->safe_psql('postgres', "DROP TABLE test_repl_stat"); +$node->safe_psql('postgres', "SELECT pg_drop_replication_slot('regression_slot1')"); +$node->safe_psql('postgres', "SELECT pg_drop_replication_slot('regression_slot2')"); +$node->safe_psql('postgres', "SELECT pg_drop_replication_slot('regression_slot3')"); + +# shutdown +$node->stop; diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 8287587f614df..c44d087508093 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -2716,6 +2716,31 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i + + + total_txns bigint + + + Number of decoded transactions sent to the decoding output plugin for + this slot. This counter is used to maintain the top level transactions, + so the counter is not incremented for subtransactions. Note that this + includes the transactions that are streamed and/or spilled. + + + + + + total_bytesbigint + + + Amount of decoded transactions data sent to the decoding output plugin + while decoding the changes from WAL for this slot. This can be used to + gauge the total amount of data sent during logical decoding. Note that + this includes the data that is streamed and/or spilled. + + + + stats_reset timestamp with time zone diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 451db2ee0a064..6d78b33590818 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -875,6 +875,8 @@ CREATE VIEW pg_stat_replication_slots AS s.stream_txns, s.stream_count, s.stream_bytes, + s.total_txns, + s.total_bytes, s.stats_reset FROM pg_stat_get_replication_slots() AS s; diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index 666ce95d083d8..e1ec7d8b7d65a 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -1829,6 +1829,8 @@ pgstat_report_replslot(const PgStat_ReplSlotStats *repSlotStat) msg.m_stream_txns = repSlotStat->stream_txns; msg.m_stream_count = repSlotStat->stream_count; msg.m_stream_bytes = repSlotStat->stream_bytes; + msg.m_total_txns = repSlotStat->total_txns; + msg.m_total_bytes = repSlotStat->total_bytes; pgstat_send(&msg, sizeof(PgStat_MsgReplSlot)); } @@ -5568,6 +5570,8 @@ pgstat_recv_replslot(PgStat_MsgReplSlot *msg, int len) replSlotStats[idx].stream_txns += msg->m_stream_txns; replSlotStats[idx].stream_count += msg->m_stream_count; replSlotStats[idx].stream_bytes += msg->m_stream_bytes; + replSlotStats[idx].total_txns += msg->m_total_txns; + replSlotStats[idx].total_bytes += msg->m_total_bytes; } } @@ -5795,6 +5799,8 @@ pgstat_reset_replslot(int i, TimestampTz ts) replSlotStats[i].stream_txns = 0; replSlotStats[i].stream_count = 0; replSlotStats[i].stream_bytes = 0; + replSlotStats[i].total_txns = 0; + replSlotStats[i].total_bytes = 0; replSlotStats[i].stat_reset_timestamp = ts; } diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index 68e210ce12bce..35b0c67641291 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -1775,21 +1775,20 @@ UpdateDecodingStats(LogicalDecodingContext *ctx) ReorderBuffer *rb = ctx->reorder; PgStat_ReplSlotStats repSlotStat; - /* - * Nothing to do if we haven't spilled or streamed anything since the last - * time the stats has been sent. - */ - if (rb->spillBytes <= 0 && rb->streamBytes <= 0) + /* Nothing to do if we don't have any replication stats to be sent. */ + if (rb->spillBytes <= 0 && rb->streamBytes <= 0 && rb->totalBytes <= 0) return; - elog(DEBUG2, "UpdateDecodingStats: updating stats %p %lld %lld %lld %lld %lld %lld", + elog(DEBUG2, "UpdateDecodingStats: updating stats %p %lld %lld %lld %lld %lld %lld %lld %lld", rb, (long long) rb->spillTxns, (long long) rb->spillCount, (long long) rb->spillBytes, (long long) rb->streamTxns, (long long) rb->streamCount, - (long long) rb->streamBytes); + (long long) rb->streamBytes, + (long long) rb->totalTxns, + (long long) rb->totalBytes); namestrcpy(&repSlotStat.slotname, NameStr(ctx->slot->data.name)); repSlotStat.spill_txns = rb->spillTxns; @@ -1798,12 +1797,17 @@ UpdateDecodingStats(LogicalDecodingContext *ctx) repSlotStat.stream_txns = rb->streamTxns; repSlotStat.stream_count = rb->streamCount; repSlotStat.stream_bytes = rb->streamBytes; + repSlotStat.total_txns = rb->totalTxns; + repSlotStat.total_bytes = rb->totalBytes; pgstat_report_replslot(&repSlotStat); + rb->spillTxns = 0; rb->spillCount = 0; rb->spillBytes = 0; rb->streamTxns = 0; rb->streamCount = 0; rb->streamBytes = 0; + rb->totalTxns = 0; + rb->totalBytes = 0; } diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 52d06285a2152..5cb484f03231e 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -350,6 +350,8 @@ ReorderBufferAllocate(void) buffer->streamTxns = 0; buffer->streamCount = 0; buffer->streamBytes = 0; + buffer->totalTxns = 0; + buffer->totalBytes = 0; buffer->current_restart_decoding_lsn = InvalidXLogRecPtr; @@ -1363,6 +1365,11 @@ ReorderBufferIterTXNNext(ReorderBuffer *rb, ReorderBufferIterTXNState *state) dlist_delete(&change->node); dlist_push_tail(&state->old_change, &change->node); + /* + * Update the total bytes processed before releasing the current set + * of changes and restoring the new set of changes. + */ + rb->totalBytes += rb->size; if (ReorderBufferRestoreChanges(rb, entry->txn, &entry->file, &state->entries[off].segno)) { @@ -2363,6 +2370,20 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn, ReorderBufferIterTXNFinish(rb, iterstate); iterstate = NULL; + /* + * Update total transaction count and total transaction bytes + * processed. Ensure to not count the streamed transaction multiple + * times. + * + * Note that the statistics computation has to be done after + * ReorderBufferIterTXNFinish as it releases the serialized change + * which we have already accounted in ReorderBufferIterTXNNext. + */ + if (!rbtxn_is_streamed(txn)) + rb->totalTxns++; + + rb->totalBytes += rb->size; + /* * Done with current changes, send the last message for this set of * changes depending upon streaming mode. diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 521ba7361439d..2680190a4026b 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -2284,7 +2284,7 @@ pg_stat_get_archiver(PG_FUNCTION_ARGS) Datum pg_stat_get_replication_slots(PG_FUNCTION_ARGS) { -#define PG_STAT_GET_REPLICATION_SLOT_COLS 8 +#define PG_STAT_GET_REPLICATION_SLOT_COLS 10 ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; TupleDesc tupdesc; Tuplestorestate *tupstore; @@ -2335,11 +2335,13 @@ pg_stat_get_replication_slots(PG_FUNCTION_ARGS) values[4] = Int64GetDatum(s->stream_txns); values[5] = Int64GetDatum(s->stream_count); values[6] = Int64GetDatum(s->stream_bytes); + values[7] = Int64GetDatum(s->total_txns); + values[8] = Int64GetDatum(s->total_bytes); if (s->stat_reset_timestamp == 0) - nulls[7] = true; + nulls[9] = true; else - values[7] = TimestampTzGetDatum(s->stat_reset_timestamp); + values[9] = TimestampTzGetDatum(s->stat_reset_timestamp); tuplestore_putvalues(tupstore, tupdesc, values, nulls); } diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 87e9596da5691..904b0c97ec211 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202104151 +#define CATALOG_VERSION_NO 202104161 #endif diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index f4957653ae6c0..591753fe81712 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -5315,9 +5315,9 @@ proname => 'pg_stat_get_replication_slots', prorows => '10', proisstrict => 'f', proretset => 't', provolatile => 's', proparallel => 'r', prorettype => 'record', proargtypes => '', - proallargtypes => '{text,int8,int8,int8,int8,int8,int8,timestamptz}', - proargmodes => '{o,o,o,o,o,o,o,o}', - proargnames => '{slot_name,spill_txns,spill_count,spill_bytes,stream_txns,stream_count,stream_bytes,stats_reset}', + proallargtypes => '{text,int8,int8,int8,int8,int8,int8,int8,int8,timestamptz}', + proargmodes => '{o,o,o,o,o,o,o,o,o,o}', + proargnames => '{slot_name,spill_txns,spill_count,spill_bytes,stream_txns,stream_count,stream_bytes,total_txns,total_bytes,stats_reset}', prosrc => 'pg_stat_get_replication_slots' }, { oid => '6118', descr => 'statistics: information about subscription', proname => 'pg_stat_get_subscription', prorows => '10', proisstrict => 'f', diff --git a/src/include/pgstat.h b/src/include/pgstat.h index 8e11215058e80..2aeb3cded4d71 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -548,6 +548,8 @@ typedef struct PgStat_MsgReplSlot PgStat_Counter m_stream_txns; PgStat_Counter m_stream_count; PgStat_Counter m_stream_bytes; + PgStat_Counter m_total_txns; + PgStat_Counter m_total_bytes; } PgStat_MsgReplSlot; /* ---------- @@ -924,6 +926,8 @@ typedef struct PgStat_ReplSlotStats PgStat_Counter stream_txns; PgStat_Counter stream_count; PgStat_Counter stream_bytes; + PgStat_Counter total_txns; + PgStat_Counter total_bytes; TimestampTz stat_reset_timestamp; } PgStat_ReplSlotStats; diff --git a/src/include/replication/reorderbuffer.h b/src/include/replication/reorderbuffer.h index 565a961d6ab24..bfab8303ee773 100644 --- a/src/include/replication/reorderbuffer.h +++ b/src/include/replication/reorderbuffer.h @@ -618,6 +618,13 @@ struct ReorderBuffer int64 streamTxns; /* number of transactions streamed */ int64 streamCount; /* streaming invocation counter */ int64 streamBytes; /* amount of data streamed */ + + /* + * Statistics about all the transactions sent to the decoding output + * plugin + */ + int64 totalTxns; /* total number of transactions sent */ + int64 totalBytes; /* total amount of data sent */ }; diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 186e6c966c68f..6399f3feef803 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -2068,8 +2068,10 @@ pg_stat_replication_slots| SELECT s.slot_name, s.stream_txns, s.stream_count, s.stream_bytes, + s.total_txns, + s.total_bytes, s.stats_reset - FROM pg_stat_get_replication_slots() s(slot_name, spill_txns, spill_count, spill_bytes, stream_txns, stream_count, stream_bytes, stats_reset); + FROM pg_stat_get_replication_slots() s(slot_name, spill_txns, spill_count, spill_bytes, stream_txns, stream_count, stream_bytes, total_txns, total_bytes, stats_reset); pg_stat_slru| SELECT s.name, s.blks_zeroed, s.blks_hit, From 254a2164e5b216ecf98882f8bcb9e239ab2d432d Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 16 Apr 2021 16:56:12 +0900 Subject: [PATCH 117/671] doc: Fix typo in example query of SQL/JSON Author: Erik Rijkers Discussion: https://postgr.es/m/1219476687.20432.1617452918468@webmailclassic.xs4all.nl Backpatch-through: 12 --- doc/src/sgml/json.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/json.sgml b/doc/src/sgml/json.sgml index 6ab836548b29f..1b5103e2694b5 100644 --- a/doc/src/sgml/json.sgml +++ b/doc/src/sgml/json.sgml @@ -489,7 +489,7 @@ CREATE INDEX idxgintags ON api USING GIN ((jdoc -> 'tags')); SELECT jdoc->'guid', jdoc->'name' FROM api WHERE jdoc @@ '$.tags[*] == "qui"'; -SELECT jdoc->'guid', jdoc->'name' FROM api WHERE jdoc @@ '$.tags[*] ? (@ == "qui")'; +SELECT jdoc->'guid', jdoc->'name' FROM api WHERE jdoc @? '$.tags[*] ? (@ == "qui")'; GIN index extracts statements of following form out of jsonpath: accessors_chain = const. From 25593d7d338232fb855ba563b325237de8f14091 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 16 Apr 2021 11:04:04 +0200 Subject: [PATCH 118/671] psql: Small fixes for better translatability --- src/bin/psql/describe.c | 2 +- src/bin/psql/help.c | 7 ++++--- src/test/regress/expected/psql.out | 6 +++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 400b683859c35..3e39fdb545297 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -4088,7 +4088,7 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys (showTables || showMatViews || showIndexes)) appendPQExpBuffer(&buf, ",\n am.amname as \"%s\"", - gettext_noop("Access Method")); + gettext_noop("Access method")); /* * As of PostgreSQL 9.0, use pg_table_size() to show a more accurate diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index 8e3bb38ab1e05..97fc680f1f70b 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -240,8 +240,8 @@ slashUsage(unsigned short int pager) fprintf(output, _(" \\des[+] [PATTERN] list foreign servers\n")); fprintf(output, _(" \\deu[+] [PATTERN] list user mappings\n")); fprintf(output, _(" \\dew[+] [PATTERN] list foreign-data wrappers\n")); - fprintf(output, _(" \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n")); - fprintf(output, _(" list [only agg/normal/procedure/trigger/window] functions\n")); + fprintf(output, _(" \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" + " list [only agg/normal/procedure/trigger/window] functions\n")); fprintf(output, _(" \\dF[+] [PATTERN] list text search configurations\n")); fprintf(output, _(" \\dFd[+] [PATTERN] list text search dictionaries\n")); fprintf(output, _(" \\dFp[+] [PATTERN] list text search parsers\n")); @@ -252,7 +252,8 @@ slashUsage(unsigned short int pager) fprintf(output, _(" \\dL[S+] [PATTERN] list procedural languages\n")); fprintf(output, _(" \\dm[S+] [PATTERN] list materialized views\n")); fprintf(output, _(" \\dn[S+] [PATTERN] list schemas\n")); - fprintf(output, _(" \\do[S] [OPPTRN [TYPEPTRN [TYPEPTRN]]] list operators\n")); + fprintf(output, _(" \\do[S] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" + " list operators\n")); fprintf(output, _(" \\dO[S+] [PATTERN] list collations\n")); fprintf(output, _(" \\dp [PATTERN] list table, view, and sequence access privileges\n")); fprintf(output, _(" \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n")); diff --git a/src/test/regress/expected/psql.out b/src/test/regress/expected/psql.out index 49139dd3633bd..1b2f6bc418850 100644 --- a/src/test/regress/expected/psql.out +++ b/src/test/regress/expected/psql.out @@ -2846,7 +2846,7 @@ Access method: heap -- AM is displayed for tables, indexes and materialized views. \d+ List of relations - Schema | Name | Type | Owner | Persistence | Access Method | Size | Description + Schema | Name | Type | Owner | Persistence | Access method | Size | Description -----------------+--------------------+-------------------+----------------------+-------------+---------------+---------+------------- tableam_display | mat_view_heap_psql | materialized view | regress_display_role | permanent | heap_psql | 0 bytes | tableam_display | tbl_heap | table | regress_display_role | permanent | heap | 0 bytes | @@ -2856,7 +2856,7 @@ Access method: heap \dt+ List of relations - Schema | Name | Type | Owner | Persistence | Access Method | Size | Description + Schema | Name | Type | Owner | Persistence | Access method | Size | Description -----------------+---------------+-------+----------------------+-------------+---------------+---------+------------- tableam_display | tbl_heap | table | regress_display_role | permanent | heap | 0 bytes | tableam_display | tbl_heap_psql | table | regress_display_role | permanent | heap_psql | 0 bytes | @@ -2864,7 +2864,7 @@ Access method: heap \dm+ List of relations - Schema | Name | Type | Owner | Persistence | Access Method | Size | Description + Schema | Name | Type | Owner | Persistence | Access method | Size | Description -----------------+--------------------+-------------------+----------------------+-------------+---------------+---------+------------- tableam_display | mat_view_heap_psql | materialized view | regress_display_role | permanent | heap_psql | 0 bytes | (1 row) From 029c5ac03db72f1898ee17e417650a2e0764b239 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 16 Apr 2021 11:46:01 +0200 Subject: [PATCH 119/671] psql: Refine lexing of BEGIN...END blocks in CREATE FUNCTION statements Only track BEGIN...END blocks if they are in a CREATE [OR REPLACE] {FUNCTION|PROCEDURE} statement. Ignore if in parentheses. Reviewed-by: Laurenz Albe Discussion: https://www.postgresql.org/message-id/cee01d26fe55bc086b3bcf10bfe4e8d450e2f608.camel@cybertec.at --- src/fe_utils/psqlscan.l | 53 ++++++++++++++++++++++++----- src/include/fe_utils/psqlscan_int.h | 8 ++++- 2 files changed, 52 insertions(+), 9 deletions(-) diff --git a/src/fe_utils/psqlscan.l b/src/fe_utils/psqlscan.l index 4ec57e96a9d9a..991b7de0b5546 100644 --- a/src/fe_utils/psqlscan.l +++ b/src/fe_utils/psqlscan.l @@ -870,18 +870,55 @@ other . {identifier} { - cur_state->identifier_count++; - if (pg_strcasecmp(yytext, "begin") == 0 - || pg_strcasecmp(yytext, "case") == 0) + /* + * We need to track if we are inside a BEGIN .. END block + * in a function definition, so that semicolons contained + * therein don't terminate the whole statement. Short of + * writing a full parser here, the following heuristic + * should work. First, we track whether the beginning of + * the statement matches CREATE [OR REPLACE] + * {FUNCTION|PROCEDURE} + */ + + if (cur_state->identifier_count == 0) + memset(cur_state->identifiers, 0, sizeof(cur_state->identifiers)); + + if (pg_strcasecmp(yytext, "create") == 0 || + pg_strcasecmp(yytext, "function") == 0 || + pg_strcasecmp(yytext, "procedure") == 0 || + pg_strcasecmp(yytext, "or") == 0 || + pg_strcasecmp(yytext, "replace") == 0) { - if (cur_state->identifier_count > 1) - cur_state->begin_depth++; + if (cur_state->identifier_count < sizeof(cur_state->identifiers)) + cur_state->identifiers[cur_state->identifier_count] = pg_tolower((unsigned char) yytext[0]); } - else if (pg_strcasecmp(yytext, "end") == 0) + + cur_state->identifier_count++; + + if (cur_state->identifiers[0] == 'c' && + (cur_state->identifiers[1] == 'f' || cur_state->identifiers[1] == 'p' || + (cur_state->identifiers[1] == 'o' && cur_state->identifiers[2] == 'r' && + (cur_state->identifiers[3] == 'f' || cur_state->identifiers[3] == 'p'))) && + cur_state->paren_depth == 0) { - if (cur_state->begin_depth > 0) - cur_state->begin_depth--; + if (pg_strcasecmp(yytext, "begin") == 0) + cur_state->begin_depth++; + else if (pg_strcasecmp(yytext, "case") == 0) + { + /* + * CASE also ends with END. We only need to track + * this if we are already inside a BEGIN. + */ + if (cur_state->begin_depth >= 1) + cur_state->begin_depth++; + } + else if (pg_strcasecmp(yytext, "end") == 0) + { + if (cur_state->begin_depth > 0) + cur_state->begin_depth--; + } } + ECHO; } diff --git a/src/include/fe_utils/psqlscan_int.h b/src/include/fe_utils/psqlscan_int.h index 91d7d4d5c6cd1..8ada9770927cc 100644 --- a/src/include/fe_utils/psqlscan_int.h +++ b/src/include/fe_utils/psqlscan_int.h @@ -114,8 +114,14 @@ typedef struct PsqlScanStateData int paren_depth; /* depth of nesting in parentheses */ int xcdepth; /* depth of nesting in slash-star comments */ char *dolqstart; /* current $foo$ quote start string */ + + /* + * State to track boundaries of BEGIN ... END blocks in function + * definitions, so that semicolons do not send query too early. + */ int identifier_count; /* identifiers since start of statement */ - int begin_depth; /* depth of begin/end routine body blocks */ + char identifiers[4]; /* records the first few identifiers */ + int begin_depth; /* depth of begin/end pairs */ /* * Callback functions provided by the program making use of the lexer, From f90c708a048667befbf6bbe5f48ae9695cb89de4 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 16 Apr 2021 11:30:27 -0400 Subject: [PATCH 120/671] Fix wrong units in two ExplainPropertyFloat calls. This is only a latent bug, since these calls are only reached for non-text output formats, and currently none of those will print the units. Still, we should get it right in case that ever changes. Justin Pryzby Discussion: https://postgr.es/m/20210415163846.GA3315@telsasoft.com --- src/backend/commands/explain.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index b62a76e7e5a67..3d5198e2345a1 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -1631,9 +1631,9 @@ ExplainNode(PlanState *planstate, List *ancestors, { if (es->timing) { - ExplainPropertyFloat("Actual Startup Time", "s", startup_ms, + ExplainPropertyFloat("Actual Startup Time", "ms", startup_ms, 3, es); - ExplainPropertyFloat("Actual Total Time", "s", total_ms, + ExplainPropertyFloat("Actual Total Time", "ms", total_ms, 3, es); } ExplainPropertyFloat("Actual Rows", NULL, rows, 0, es); From ef387bed87f2787b1012e68e9a33607a1074c123 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 16 Apr 2021 12:26:50 -0400 Subject: [PATCH 121/671] Fix bogus collation-version-recording logic. recordMultipleDependencies had the wrong scope for its "version" variable, allowing a version label to leak from the collation entry it was meant for to subsequent non-collation entries. This is relatively hard to trigger because of the OID-descending order that the inputs will normally arrive in: subsequent non-collation items will tend to be pinned. But it can be exhibited easily with a custom collation. Also, don't special-case the default collation, but instead ignore pinned-ness of a collation when we've found a version for it. This avoids creating useless pg_depend entries, and removes a not-very- future-proof assumption that C, POSIX, and DEFAULT are the only pinned collations. A small problem is that, because the default collation may or may not have a version, the regression tests can't assume anything about whether dependency entries will be made for it. This seems OK though since it's now handled just the same as other collations, and we have test cases for both versioned and unversioned collations. Fixes oversights in commit 257836a75. Thanks to Julien Rouhaud for review. Discussion: https://postgr.es/m/3564817.1618420687@sss.pgh.pa.us --- src/backend/catalog/pg_depend.c | 16 +++------------- src/test/regress/expected/create_index.out | 14 +++++--------- src/test/regress/sql/create_index.sql | 4 ++-- 3 files changed, 10 insertions(+), 24 deletions(-) diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c index 362db7fe913b7..1217c01b8ae98 100644 --- a/src/backend/catalog/pg_depend.c +++ b/src/backend/catalog/pg_depend.c @@ -73,7 +73,6 @@ recordMultipleDependencies(const ObjectAddress *depender, max_slots, slot_init_count, slot_stored_count; - char *version = NULL; if (nreferenced <= 0) return; /* nothing to do */ @@ -104,31 +103,22 @@ recordMultipleDependencies(const ObjectAddress *depender, slot_init_count = 0; for (i = 0; i < nreferenced; i++, referenced++) { - bool ignore_systempin = false; + char *version = NULL; if (record_version) { /* For now we only know how to deal with collations. */ if (referenced->classId == CollationRelationId) { - /* C and POSIX don't need version tracking. */ + /* These are unversioned, so don't waste cycles on them. */ if (referenced->objectId == C_COLLATION_OID || referenced->objectId == POSIX_COLLATION_OID) continue; version = get_collation_version_for_oid(referenced->objectId, false); - - /* - * Default collation is pinned, so we need to force recording - * the dependency to store the version. - */ - if (referenced->objectId == DEFAULT_COLLATION_OID) - ignore_systempin = true; } } - else - Assert(!version); /* * If the referenced object is pinned by the system, there's no real @@ -136,7 +126,7 @@ recordMultipleDependencies(const ObjectAddress *depender, * version. This saves lots of space in pg_depend, so it's worth the * time taken to check. */ - if (!ignore_systempin && isObjectPinned(referenced, dependDesc)) + if (version == NULL && isObjectPinned(referenced, dependDesc)) continue; if (slot_init_count < max_slots) diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out index 830fdddf244cf..7f8f91b92c6bc 100644 --- a/src/test/regress/expected/create_index.out +++ b/src/test/regress/expected/create_index.out @@ -2026,10 +2026,10 @@ REINDEX TABLE concur_reindex_tab; -- notice NOTICE: table "concur_reindex_tab" has no indexes to reindex REINDEX (CONCURRENTLY) TABLE concur_reindex_tab; -- notice NOTICE: table "concur_reindex_tab" has no indexes that can be reindexed concurrently -ALTER TABLE concur_reindex_tab ADD COLUMN c2 text; -- add toast index +ALTER TABLE concur_reindex_tab ADD COLUMN c2 text COLLATE "C"; -- add toast index -- Normal index with integer column CREATE UNIQUE INDEX concur_reindex_ind1 ON concur_reindex_tab(c1); --- Normal index with text column +-- Normal index with text column (with unversioned collation) CREATE INDEX concur_reindex_ind2 ON concur_reindex_tab(c2); -- UNIQUE index with expression CREATE UNIQUE INDEX concur_reindex_ind3 ON concur_reindex_tab(abs(c1)); @@ -2069,16 +2069,14 @@ WHERE classid = 'pg_class'::regclass AND obj | objref | deptype ------------------------------------------+------------------------------------------------------------+--------- index concur_reindex_ind1 | constraint concur_reindex_ind1 on table concur_reindex_tab | i - index concur_reindex_ind2 | collation "default" | n index concur_reindex_ind2 | column c2 of table concur_reindex_tab | a index concur_reindex_ind3 | column c1 of table concur_reindex_tab | a index concur_reindex_ind3 | table concur_reindex_tab | a - index concur_reindex_ind4 | collation "default" | n index concur_reindex_ind4 | column c1 of table concur_reindex_tab | a index concur_reindex_ind4 | column c2 of table concur_reindex_tab | a materialized view concur_reindex_matview | schema public | n table concur_reindex_tab | schema public | n -(10 rows) +(8 rows) REINDEX INDEX CONCURRENTLY concur_reindex_ind1; REINDEX TABLE CONCURRENTLY concur_reindex_tab; @@ -2098,16 +2096,14 @@ WHERE classid = 'pg_class'::regclass AND obj | objref | deptype ------------------------------------------+------------------------------------------------------------+--------- index concur_reindex_ind1 | constraint concur_reindex_ind1 on table concur_reindex_tab | i - index concur_reindex_ind2 | collation "default" | n index concur_reindex_ind2 | column c2 of table concur_reindex_tab | a index concur_reindex_ind3 | column c1 of table concur_reindex_tab | a index concur_reindex_ind3 | table concur_reindex_tab | a - index concur_reindex_ind4 | collation "default" | n index concur_reindex_ind4 | column c1 of table concur_reindex_tab | a index concur_reindex_ind4 | column c2 of table concur_reindex_tab | a materialized view concur_reindex_matview | schema public | n table concur_reindex_tab | schema public | n -(10 rows) +(8 rows) -- Check that comments are preserved CREATE TABLE testcomment (i int); @@ -2487,7 +2483,7 @@ WARNING: cannot reindex system catalogs concurrently, skipping all Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- c1 | integer | | not null | - c2 | text | | | + c2 | text | C | | Indexes: "concur_reindex_ind1" PRIMARY KEY, btree (c1) "concur_reindex_ind2" btree (c2) diff --git a/src/test/regress/sql/create_index.sql b/src/test/regress/sql/create_index.sql index 8bc76f7c6f187..51c9a121514ac 100644 --- a/src/test/regress/sql/create_index.sql +++ b/src/test/regress/sql/create_index.sql @@ -797,10 +797,10 @@ CREATE TABLE concur_reindex_tab (c1 int); -- REINDEX REINDEX TABLE concur_reindex_tab; -- notice REINDEX (CONCURRENTLY) TABLE concur_reindex_tab; -- notice -ALTER TABLE concur_reindex_tab ADD COLUMN c2 text; -- add toast index +ALTER TABLE concur_reindex_tab ADD COLUMN c2 text COLLATE "C"; -- add toast index -- Normal index with integer column CREATE UNIQUE INDEX concur_reindex_ind1 ON concur_reindex_tab(c1); --- Normal index with text column +-- Normal index with text column (with unversioned collation) CREATE INDEX concur_reindex_ind2 ON concur_reindex_tab(c2); -- UNIQUE index with expression CREATE UNIQUE INDEX concur_reindex_ind3 ON concur_reindex_tab(abs(c1)); From 3c5b0685b921533f37622345beb0f8dd49200c01 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Fri, 16 Apr 2021 16:54:04 -0400 Subject: [PATCH 122/671] Allow TestLib::slurp_file to skip contents, and use as needed In order to avoid getting old logfile contents certain functions in PostgresNode were doing one of two things. On Windows it rotated the logfile and restarted the server, while elsewhere it truncated the log file. Both of these are unnecessary. We borrow from the buildfarm which does this instead: note the size of the logfile before we start, and then when fetching the logfile skip to that position before accumulating contents. This is spelled differently on Windows but the effect is the same. This is largely centralized in TestLib's slurp_file function, which has a new optional parameter, the offset to skip to before starting to reading the file. Code in the client becomes much neater. Backpatch to all live branches. Michael Paquier, slightly modified by me. Discussion: https://postgr.es/m/YHajnhcMAI3++pJL@paquier.xyz --- src/test/perl/PostgresNode.pm | 46 +++++++---------------------------- src/test/perl/TestLib.pm | 21 ++++++++++++---- 2 files changed, 25 insertions(+), 42 deletions(-) diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index e26b2b3f30e3b..e209ea71632e1 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -1917,21 +1917,7 @@ sub connect_ok @log_unlike = @{ $params{log_unlike} }; } - if (@log_like or @log_unlike) - { - # Don't let previous log entries match for this connection. - # On Windows, the truncation would not work, so rotate the log - # file before restarting the server afresh. - if ($TestLib::windows_os) - { - $self->rotate_logfile; - $self->restart; - } - else - { - truncate $self->logfile, 0; - } - } + my $log_location = -s $self->logfile; # Never prompt for a password, any callers of this routine should # have set up things properly, and this should not block. @@ -1950,7 +1936,8 @@ sub connect_ok } if (@log_like or @log_unlike) { - my $log_contents = TestLib::slurp_file($self->logfile); + my $log_contents = TestLib::slurp_file($self->logfile, + $log_location); while (my $regex = shift @log_like) { @@ -2001,21 +1988,7 @@ sub connect_fails @log_unlike = @{ $params{log_unlike} }; } - if (@log_like or @log_unlike) - { - # Don't let previous log entries match for this connection. - # On Windows, the truncation would not work, so rotate the log - # file before restarting the server afresh. - if ($TestLib::windows_os) - { - $self->rotate_logfile; - $self->restart; - } - else - { - truncate $self->logfile, 0; - } - } + my $log_location = -s $self->logfile; # Never prompt for a password, any callers of this routine should # have set up things properly, and this should not block. @@ -2034,7 +2007,8 @@ sub connect_fails if (@log_like or @log_unlike) { - my $log_contents = TestLib::slurp_file($self->logfile); + my $log_contents = TestLib::slurp_file($self->logfile, + $log_location); while (my $regex = shift @log_like) { @@ -2194,9 +2168,6 @@ sub command_checks_all Run a command on the node, then verify that $expected_sql appears in the server log file. -Reads the whole log file so be careful when working with large log outputs. -The log file is truncated prior to running the command, however. - =cut sub issues_sql_like @@ -2207,10 +2178,11 @@ sub issues_sql_like local %ENV = $self->_get_env(); - truncate $self->logfile, 0; + my $log_location = -s $self->logfile; + my $result = TestLib::run_log($cmd); ok($result, "@$cmd exit code 0"); - my $log = TestLib::slurp_file($self->logfile); + my $log = TestLib::slurp_file($self->logfile, $log_location); like($log, $expected_sql, "$test_name: SQL found in server log"); return; } diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index 1baf6bd00173a..6bdedc2cfaf66 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -47,7 +47,7 @@ use Carp; use Config; use Cwd; use Exporter 'import'; -use Fcntl qw(:mode); +use Fcntl qw(:mode :seek); use File::Basename; use File::Find; use File::Spec; @@ -124,7 +124,7 @@ BEGIN if ($windows_os) { require Win32API::File; - Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle)); + Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle setFilePointer)); } # Specifies whether to use Unix sockets for test setups. On @@ -430,21 +430,27 @@ sub slurp_dir =pod -=item slurp_file(filename) +=item slurp_file(filename [, $offset]) -Return the full contents of the specified file. +Return the full contents of the specified file, beginning from an +offset position if specified. =cut sub slurp_file { - my ($filename) = @_; + my ($filename, $offset) = @_; local $/; my $contents; if ($Config{osname} ne 'MSWin32') { open(my $in, '<', $filename) or croak "could not read \"$filename\": $!"; + if (defined($offset)) + { + seek($in, $offset, SEEK_SET) + or croak "could not seek \"$filename\": $!"; + } $contents = <$in>; close $in; } @@ -454,6 +460,11 @@ sub slurp_file or croak "could not open \"$filename\": $^E"; OsFHandleOpen(my $fh = IO::Handle->new(), $fHandle, 'r') or croak "could not read \"$filename\": $^E\n"; + if (defined($offset)) + { + setFilePointer($fh, $offset, qw(FILE_BEGIN)) + or croak "could not seek \"$filename\": $^E\n"; + } $contents = <$fh>; CloseHandle($fHandle) or croak "could not close \"$filename\": $^E\n"; From e80949372564c126c92aa7d64de483e04c0ef95e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 16 Apr 2021 18:20:42 -0400 Subject: [PATCH 123/671] Split function definitions out of system_views.sql into a new file. Invent system_functions.sql to carry the function definitions that were formerly in system_views.sql. The function definitions were already a quarter of the file and are about to be more, so it seems appropriate to give them their own home. In passing, fix an oversight in dfb75e478: it neglected to call check_input() for system_constraints.sql. Discussion: https://postgr.es/m/3956760.1618529139@sss.pgh.pa.us --- src/backend/catalog/Makefile | 3 +- src/backend/catalog/system_functions.sql | 392 +++++++++++++++++++++++ src/backend/catalog/system_views.sql | 381 +--------------------- src/bin/initdb/initdb.c | 6 + 4 files changed, 401 insertions(+), 381 deletions(-) create mode 100644 src/backend/catalog/system_functions.sql diff --git a/src/backend/catalog/Makefile b/src/backend/catalog/Makefile index e36a9602c129a..69f9dd51a7a2e 100644 --- a/src/backend/catalog/Makefile +++ b/src/backend/catalog/Makefile @@ -122,6 +122,7 @@ $(top_builddir)/src/include/catalog/header-stamp: bki-stamp install-data: bki-stamp installdirs $(INSTALL_DATA) $(call vpathsearch,postgres.bki) '$(DESTDIR)$(datadir)/postgres.bki' $(INSTALL_DATA) $(call vpathsearch,system_constraints.sql) '$(DESTDIR)$(datadir)/system_constraints.sql' + $(INSTALL_DATA) $(srcdir)/system_functions.sql '$(DESTDIR)$(datadir)/system_functions.sql' $(INSTALL_DATA) $(srcdir)/system_views.sql '$(DESTDIR)$(datadir)/system_views.sql' $(INSTALL_DATA) $(srcdir)/information_schema.sql '$(DESTDIR)$(datadir)/information_schema.sql' $(INSTALL_DATA) $(srcdir)/sql_features.txt '$(DESTDIR)$(datadir)/sql_features.txt' @@ -131,7 +132,7 @@ installdirs: .PHONY: uninstall-data uninstall-data: - rm -f $(addprefix '$(DESTDIR)$(datadir)'/, postgres.bki system_constraints.sql system_views.sql information_schema.sql sql_features.txt) + rm -f $(addprefix '$(DESTDIR)$(datadir)'/, postgres.bki system_constraints.sql system_functions.sql system_views.sql information_schema.sql sql_features.txt) # postgres.bki, system_constraints.sql, and the generated headers are # in the distribution tarball, so they are not cleaned here. diff --git a/src/backend/catalog/system_functions.sql b/src/backend/catalog/system_functions.sql new file mode 100644 index 0000000000000..d7ac7a926e478 --- /dev/null +++ b/src/backend/catalog/system_functions.sql @@ -0,0 +1,392 @@ +/* + * PostgreSQL System Functions + * + * Copyright (c) 1996-2021, PostgreSQL Global Development Group + * + * src/backend/catalog/system_functions.sql + * + * This file redefines certain built-in functions that it's impractical + * to fully define in pg_proc.dat. In most cases that's because they use + * SQL-standard function bodies and/or default expressions. The node + * tree representations of those are too unreadable, platform-dependent, + * and changeable to want to deal with them manually. Hence, we put stub + * definitions of such functions into pg_proc.dat and then replace them + * here. The stub definitions would be unnecessary were it not that we'd + * like these functions to have stable OIDs, the same as other built-in + * functions. + * + * This file also takes care of adjusting privileges for those functions + * that should not have the default public-EXECUTE privileges. (However, + * a small number of functions that exist mainly to underlie system views + * are dealt with in system_views.sql, instead.) + * + * Note: this file is read in single-user -j mode, which means that the + * command terminator is semicolon-newline-newline; whenever the backend + * sees that, it stops and executes what it's got. If you write a lot of + * statements without empty lines between, they'll all get quoted to you + * in any error message about one of them, so don't do that. Also, you + * cannot write a semicolon immediately followed by an empty line in a + * string literal (including a function body!) or a multiline comment. + */ + + +CREATE FUNCTION ts_debug(IN config regconfig, IN document text, + OUT alias text, + OUT description text, + OUT token text, + OUT dictionaries regdictionary[], + OUT dictionary regdictionary, + OUT lexemes text[]) +RETURNS SETOF record AS +$$ +SELECT + tt.alias AS alias, + tt.description AS description, + parse.token AS token, + ARRAY ( SELECT m.mapdict::pg_catalog.regdictionary + FROM pg_catalog.pg_ts_config_map AS m + WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid + ORDER BY m.mapseqno ) + AS dictionaries, + ( SELECT mapdict::pg_catalog.regdictionary + FROM pg_catalog.pg_ts_config_map AS m + WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid + ORDER BY pg_catalog.ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno + LIMIT 1 + ) AS dictionary, + ( SELECT pg_catalog.ts_lexize(mapdict, parse.token) + FROM pg_catalog.pg_ts_config_map AS m + WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid + ORDER BY pg_catalog.ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno + LIMIT 1 + ) AS lexemes +FROM pg_catalog.ts_parse( + (SELECT cfgparser FROM pg_catalog.pg_ts_config WHERE oid = $1 ), $2 + ) AS parse, + pg_catalog.ts_token_type( + (SELECT cfgparser FROM pg_catalog.pg_ts_config WHERE oid = $1 ) + ) AS tt +WHERE tt.tokid = parse.tokid +$$ +LANGUAGE SQL STRICT STABLE PARALLEL SAFE; + +COMMENT ON FUNCTION ts_debug(regconfig,text) IS + 'debug function for text search configuration'; + +CREATE FUNCTION ts_debug(IN document text, + OUT alias text, + OUT description text, + OUT token text, + OUT dictionaries regdictionary[], + OUT dictionary regdictionary, + OUT lexemes text[]) +RETURNS SETOF record AS +$$ + SELECT * FROM pg_catalog.ts_debug( pg_catalog.get_current_ts_config(), $1); +$$ +LANGUAGE SQL STRICT STABLE PARALLEL SAFE; + +COMMENT ON FUNCTION ts_debug(text) IS + 'debug function for current text search configuration'; + + +CREATE OR REPLACE FUNCTION + pg_start_backup(label text, fast boolean DEFAULT false, exclusive boolean DEFAULT true) + RETURNS pg_lsn STRICT VOLATILE LANGUAGE internal AS 'pg_start_backup' + PARALLEL RESTRICTED; + +CREATE OR REPLACE FUNCTION pg_stop_backup ( + exclusive boolean, wait_for_archive boolean DEFAULT true, + OUT lsn pg_lsn, OUT labelfile text, OUT spcmapfile text) + RETURNS SETOF record STRICT VOLATILE LANGUAGE internal as 'pg_stop_backup_v2' + PARALLEL RESTRICTED; + +CREATE OR REPLACE FUNCTION + pg_promote(wait boolean DEFAULT true, wait_seconds integer DEFAULT 60) + RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_promote' + PARALLEL SAFE; + +CREATE OR REPLACE FUNCTION + pg_terminate_backend(pid integer, timeout int8 DEFAULT 0) + RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_terminate_backend' + PARALLEL SAFE; + +CREATE OR REPLACE FUNCTION + pg_wait_for_backend_termination(pid integer, timeout int8 DEFAULT 5000) + RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_wait_for_backend_termination' + PARALLEL SAFE; + +-- legacy definition for compatibility with 9.3 +CREATE OR REPLACE FUNCTION + json_populate_record(base anyelement, from_json json, use_json_as_text boolean DEFAULT false) + RETURNS anyelement LANGUAGE internal STABLE AS 'json_populate_record' PARALLEL SAFE; + +-- legacy definition for compatibility with 9.3 +CREATE OR REPLACE FUNCTION + json_populate_recordset(base anyelement, from_json json, use_json_as_text boolean DEFAULT false) + RETURNS SETOF anyelement LANGUAGE internal STABLE ROWS 100 AS 'json_populate_recordset' PARALLEL SAFE; + +CREATE OR REPLACE FUNCTION pg_logical_slot_get_changes( + IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}', + OUT lsn pg_lsn, OUT xid xid, OUT data text) +RETURNS SETOF RECORD +LANGUAGE INTERNAL +VOLATILE ROWS 1000 COST 1000 +AS 'pg_logical_slot_get_changes'; + +CREATE OR REPLACE FUNCTION pg_logical_slot_peek_changes( + IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}', + OUT lsn pg_lsn, OUT xid xid, OUT data text) +RETURNS SETOF RECORD +LANGUAGE INTERNAL +VOLATILE ROWS 1000 COST 1000 +AS 'pg_logical_slot_peek_changes'; + +CREATE OR REPLACE FUNCTION pg_logical_slot_get_binary_changes( + IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}', + OUT lsn pg_lsn, OUT xid xid, OUT data bytea) +RETURNS SETOF RECORD +LANGUAGE INTERNAL +VOLATILE ROWS 1000 COST 1000 +AS 'pg_logical_slot_get_binary_changes'; + +CREATE OR REPLACE FUNCTION pg_logical_slot_peek_binary_changes( + IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}', + OUT lsn pg_lsn, OUT xid xid, OUT data bytea) +RETURNS SETOF RECORD +LANGUAGE INTERNAL +VOLATILE ROWS 1000 COST 1000 +AS 'pg_logical_slot_peek_binary_changes'; + +CREATE OR REPLACE FUNCTION pg_create_physical_replication_slot( + IN slot_name name, IN immediately_reserve boolean DEFAULT false, + IN temporary boolean DEFAULT false, + OUT slot_name name, OUT lsn pg_lsn) +RETURNS RECORD +LANGUAGE INTERNAL +STRICT VOLATILE +AS 'pg_create_physical_replication_slot'; + +CREATE OR REPLACE FUNCTION pg_create_logical_replication_slot( + IN slot_name name, IN plugin name, + IN temporary boolean DEFAULT false, + IN twophase boolean DEFAULT false, + OUT slot_name name, OUT lsn pg_lsn) +RETURNS RECORD +LANGUAGE INTERNAL +STRICT VOLATILE +AS 'pg_create_logical_replication_slot'; + +CREATE OR REPLACE FUNCTION + make_interval(years int4 DEFAULT 0, months int4 DEFAULT 0, weeks int4 DEFAULT 0, + days int4 DEFAULT 0, hours int4 DEFAULT 0, mins int4 DEFAULT 0, + secs double precision DEFAULT 0.0) +RETURNS interval +LANGUAGE INTERNAL +STRICT IMMUTABLE PARALLEL SAFE +AS 'make_interval'; + +CREATE OR REPLACE FUNCTION + jsonb_set(jsonb_in jsonb, path text[] , replacement jsonb, + create_if_missing boolean DEFAULT true) +RETURNS jsonb +LANGUAGE INTERNAL +STRICT IMMUTABLE PARALLEL SAFE +AS 'jsonb_set'; + +CREATE OR REPLACE FUNCTION + jsonb_set_lax(jsonb_in jsonb, path text[] , replacement jsonb, + create_if_missing boolean DEFAULT true, + null_value_treatment text DEFAULT 'use_json_null') +RETURNS jsonb +LANGUAGE INTERNAL +CALLED ON NULL INPUT IMMUTABLE PARALLEL SAFE +AS 'jsonb_set_lax'; + +CREATE OR REPLACE FUNCTION + parse_ident(str text, strict boolean DEFAULT true) +RETURNS text[] +LANGUAGE INTERNAL +STRICT IMMUTABLE PARALLEL SAFE +AS 'parse_ident'; + +CREATE OR REPLACE FUNCTION + jsonb_insert(jsonb_in jsonb, path text[] , replacement jsonb, + insert_after boolean DEFAULT false) +RETURNS jsonb +LANGUAGE INTERNAL +STRICT IMMUTABLE PARALLEL SAFE +AS 'jsonb_insert'; + +CREATE OR REPLACE FUNCTION + jsonb_path_exists(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', + silent boolean DEFAULT false) +RETURNS boolean +LANGUAGE INTERNAL +STRICT IMMUTABLE PARALLEL SAFE +AS 'jsonb_path_exists'; + +CREATE OR REPLACE FUNCTION + jsonb_path_match(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', + silent boolean DEFAULT false) +RETURNS boolean +LANGUAGE INTERNAL +STRICT IMMUTABLE PARALLEL SAFE +AS 'jsonb_path_match'; + +CREATE OR REPLACE FUNCTION + jsonb_path_query(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', + silent boolean DEFAULT false) +RETURNS SETOF jsonb +LANGUAGE INTERNAL +STRICT IMMUTABLE PARALLEL SAFE +AS 'jsonb_path_query'; + +CREATE OR REPLACE FUNCTION + jsonb_path_query_array(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', + silent boolean DEFAULT false) +RETURNS jsonb +LANGUAGE INTERNAL +STRICT IMMUTABLE PARALLEL SAFE +AS 'jsonb_path_query_array'; + +CREATE OR REPLACE FUNCTION + jsonb_path_query_first(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', + silent boolean DEFAULT false) +RETURNS jsonb +LANGUAGE INTERNAL +STRICT IMMUTABLE PARALLEL SAFE +AS 'jsonb_path_query_first'; + +CREATE OR REPLACE FUNCTION + jsonb_path_exists_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', + silent boolean DEFAULT false) +RETURNS boolean +LANGUAGE INTERNAL +STRICT STABLE PARALLEL SAFE +AS 'jsonb_path_exists_tz'; + +CREATE OR REPLACE FUNCTION + jsonb_path_match_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', + silent boolean DEFAULT false) +RETURNS boolean +LANGUAGE INTERNAL +STRICT STABLE PARALLEL SAFE +AS 'jsonb_path_match_tz'; + +CREATE OR REPLACE FUNCTION + jsonb_path_query_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', + silent boolean DEFAULT false) +RETURNS SETOF jsonb +LANGUAGE INTERNAL +STRICT STABLE PARALLEL SAFE +AS 'jsonb_path_query_tz'; + +CREATE OR REPLACE FUNCTION + jsonb_path_query_array_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', + silent boolean DEFAULT false) +RETURNS jsonb +LANGUAGE INTERNAL +STRICT STABLE PARALLEL SAFE +AS 'jsonb_path_query_array_tz'; + +CREATE OR REPLACE FUNCTION + jsonb_path_query_first_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', + silent boolean DEFAULT false) +RETURNS jsonb +LANGUAGE INTERNAL +STRICT STABLE PARALLEL SAFE +AS 'jsonb_path_query_first_tz'; + +-- default normalization form is NFC, per SQL standard +CREATE OR REPLACE FUNCTION + "normalize"(text, text DEFAULT 'NFC') +RETURNS text +LANGUAGE internal +STRICT IMMUTABLE PARALLEL SAFE +AS 'unicode_normalize_func'; + +CREATE OR REPLACE FUNCTION + is_normalized(text, text DEFAULT 'NFC') +RETURNS boolean +LANGUAGE internal +STRICT IMMUTABLE PARALLEL SAFE +AS 'unicode_is_normalized'; + +-- +-- The default permissions for functions mean that anyone can execute them. +-- A number of functions shouldn't be executable by just anyone, but rather +-- than use explicit 'superuser()' checks in those functions, we use the GRANT +-- system to REVOKE access to those functions at initdb time. Administrators +-- can later change who can access these functions, or leave them as only +-- available to superuser / cluster owner, if they choose. +-- +REVOKE EXECUTE ON FUNCTION pg_start_backup(text, boolean, boolean) FROM public; +REVOKE EXECUTE ON FUNCTION pg_stop_backup() FROM public; +REVOKE EXECUTE ON FUNCTION pg_stop_backup(boolean, boolean) FROM public; +REVOKE EXECUTE ON FUNCTION pg_create_restore_point(text) FROM public; +REVOKE EXECUTE ON FUNCTION pg_switch_wal() FROM public; +REVOKE EXECUTE ON FUNCTION pg_wal_replay_pause() FROM public; +REVOKE EXECUTE ON FUNCTION pg_wal_replay_resume() FROM public; +REVOKE EXECUTE ON FUNCTION pg_rotate_logfile() FROM public; +REVOKE EXECUTE ON FUNCTION pg_reload_conf() FROM public; +REVOKE EXECUTE ON FUNCTION pg_current_logfile() FROM public; +REVOKE EXECUTE ON FUNCTION pg_current_logfile(text) FROM public; +REVOKE EXECUTE ON FUNCTION pg_promote(boolean, integer) FROM public; + +REVOKE EXECUTE ON FUNCTION pg_stat_reset() FROM public; +REVOKE EXECUTE ON FUNCTION pg_stat_reset_shared(text) FROM public; +REVOKE EXECUTE ON FUNCTION pg_stat_reset_slru(text) FROM public; +REVOKE EXECUTE ON FUNCTION pg_stat_reset_single_table_counters(oid) FROM public; +REVOKE EXECUTE ON FUNCTION pg_stat_reset_single_function_counters(oid) FROM public; +REVOKE EXECUTE ON FUNCTION pg_stat_reset_replication_slot(text) FROM public; + +REVOKE EXECUTE ON FUNCTION lo_import(text) FROM public; +REVOKE EXECUTE ON FUNCTION lo_import(text, oid) FROM public; +REVOKE EXECUTE ON FUNCTION lo_export(oid, text) FROM public; + +REVOKE EXECUTE ON FUNCTION pg_ls_logdir() FROM public; +REVOKE EXECUTE ON FUNCTION pg_ls_waldir() FROM public; +REVOKE EXECUTE ON FUNCTION pg_ls_archive_statusdir() FROM public; +REVOKE EXECUTE ON FUNCTION pg_ls_tmpdir() FROM public; +REVOKE EXECUTE ON FUNCTION pg_ls_tmpdir(oid) FROM public; + +REVOKE EXECUTE ON FUNCTION pg_read_file(text) FROM public; +REVOKE EXECUTE ON FUNCTION pg_read_file(text,bigint,bigint) FROM public; +REVOKE EXECUTE ON FUNCTION pg_read_file(text,bigint,bigint,boolean) FROM public; + +REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text) FROM public; +REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint) FROM public; +REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint,boolean) FROM public; + +REVOKE EXECUTE ON FUNCTION pg_replication_origin_advance(text, pg_lsn) FROM public; +REVOKE EXECUTE ON FUNCTION pg_replication_origin_create(text) FROM public; +REVOKE EXECUTE ON FUNCTION pg_replication_origin_drop(text) FROM public; +REVOKE EXECUTE ON FUNCTION pg_replication_origin_oid(text) FROM public; +REVOKE EXECUTE ON FUNCTION pg_replication_origin_progress(text, boolean) FROM public; +REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_is_setup() FROM public; +REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_progress(boolean) FROM public; +REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_reset() FROM public; +REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_setup(text) FROM public; +REVOKE EXECUTE ON FUNCTION pg_replication_origin_xact_reset() FROM public; +REVOKE EXECUTE ON FUNCTION pg_replication_origin_xact_setup(pg_lsn, timestamp with time zone) FROM public; +REVOKE EXECUTE ON FUNCTION pg_show_replication_origin_status() FROM public; + +REVOKE EXECUTE ON FUNCTION pg_stat_file(text) FROM public; +REVOKE EXECUTE ON FUNCTION pg_stat_file(text,boolean) FROM public; + +REVOKE EXECUTE ON FUNCTION pg_ls_dir(text) FROM public; +REVOKE EXECUTE ON FUNCTION pg_ls_dir(text,boolean,boolean) FROM public; + +-- +-- We also set up some things as accessible to standard roles. +-- +GRANT EXECUTE ON FUNCTION pg_ls_logdir() TO pg_monitor; +GRANT EXECUTE ON FUNCTION pg_ls_waldir() TO pg_monitor; +GRANT EXECUTE ON FUNCTION pg_ls_archive_statusdir() TO pg_monitor; +GRANT EXECUTE ON FUNCTION pg_ls_tmpdir() TO pg_monitor; +GRANT EXECUTE ON FUNCTION pg_ls_tmpdir(oid) TO pg_monitor; + +GRANT pg_read_all_settings TO pg_monitor; +GRANT pg_read_all_stats TO pg_monitor; +GRANT pg_stat_scan_tables TO pg_monitor; diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 6d78b33590818..e96dd732805a3 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -164,7 +164,7 @@ CREATE VIEW pg_indexes AS LEFT JOIN pg_tablespace T ON (T.oid = I.reltablespace) WHERE C.relkind IN ('r', 'm', 'p') AND I.relkind IN ('i', 'I'); -CREATE OR REPLACE VIEW pg_sequences AS +CREATE VIEW pg_sequences AS SELECT N.nspname AS schemaname, C.relname AS sequencename, @@ -1268,382 +1268,3 @@ REVOKE ALL ON pg_replication_origin_status FROM public; REVOKE ALL ON pg_subscription FROM public; GRANT SELECT (subdbid, subname, subowner, subenabled, subbinary, substream, subslotname, subpublications) ON pg_subscription TO public; - - --- --- We have a few function definitions in here, too. --- At some point there might be enough to justify breaking them out into --- a separate "system_functions.sql" file. --- - --- Tsearch debug function. Defined here because it'd be pretty unwieldy --- to put it into pg_proc.h - -CREATE FUNCTION ts_debug(IN config regconfig, IN document text, - OUT alias text, - OUT description text, - OUT token text, - OUT dictionaries regdictionary[], - OUT dictionary regdictionary, - OUT lexemes text[]) -RETURNS SETOF record AS -$$ -SELECT - tt.alias AS alias, - tt.description AS description, - parse.token AS token, - ARRAY ( SELECT m.mapdict::pg_catalog.regdictionary - FROM pg_catalog.pg_ts_config_map AS m - WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid - ORDER BY m.mapseqno ) - AS dictionaries, - ( SELECT mapdict::pg_catalog.regdictionary - FROM pg_catalog.pg_ts_config_map AS m - WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid - ORDER BY pg_catalog.ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno - LIMIT 1 - ) AS dictionary, - ( SELECT pg_catalog.ts_lexize(mapdict, parse.token) - FROM pg_catalog.pg_ts_config_map AS m - WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid - ORDER BY pg_catalog.ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno - LIMIT 1 - ) AS lexemes -FROM pg_catalog.ts_parse( - (SELECT cfgparser FROM pg_catalog.pg_ts_config WHERE oid = $1 ), $2 - ) AS parse, - pg_catalog.ts_token_type( - (SELECT cfgparser FROM pg_catalog.pg_ts_config WHERE oid = $1 ) - ) AS tt -WHERE tt.tokid = parse.tokid -$$ -LANGUAGE SQL STRICT STABLE PARALLEL SAFE; - -COMMENT ON FUNCTION ts_debug(regconfig,text) IS - 'debug function for text search configuration'; - -CREATE FUNCTION ts_debug(IN document text, - OUT alias text, - OUT description text, - OUT token text, - OUT dictionaries regdictionary[], - OUT dictionary regdictionary, - OUT lexemes text[]) -RETURNS SETOF record AS -$$ - SELECT * FROM pg_catalog.ts_debug( pg_catalog.get_current_ts_config(), $1); -$$ -LANGUAGE SQL STRICT STABLE PARALLEL SAFE; - -COMMENT ON FUNCTION ts_debug(text) IS - 'debug function for current text search configuration'; - --- --- Redeclare built-in functions that need default values attached to their --- arguments. It's impractical to set those up directly in pg_proc.h because --- of the complexity and platform-dependency of the expression tree --- representation. (Note that internal functions still have to have entries --- in pg_proc.h; we are merely causing their proargnames and proargdefaults --- to get filled in.) --- - -CREATE OR REPLACE FUNCTION - pg_start_backup(label text, fast boolean DEFAULT false, exclusive boolean DEFAULT true) - RETURNS pg_lsn STRICT VOLATILE LANGUAGE internal AS 'pg_start_backup' - PARALLEL RESTRICTED; - -CREATE OR REPLACE FUNCTION pg_stop_backup ( - exclusive boolean, wait_for_archive boolean DEFAULT true, - OUT lsn pg_lsn, OUT labelfile text, OUT spcmapfile text) - RETURNS SETOF record STRICT VOLATILE LANGUAGE internal as 'pg_stop_backup_v2' - PARALLEL RESTRICTED; - -CREATE OR REPLACE FUNCTION - pg_promote(wait boolean DEFAULT true, wait_seconds integer DEFAULT 60) - RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_promote' - PARALLEL SAFE; - -CREATE OR REPLACE FUNCTION - pg_terminate_backend(pid integer, timeout int8 DEFAULT 0) - RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_terminate_backend' - PARALLEL SAFE; - -CREATE OR REPLACE FUNCTION - pg_wait_for_backend_termination(pid integer, timeout int8 DEFAULT 5000) - RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_wait_for_backend_termination' - PARALLEL SAFE; - --- legacy definition for compatibility with 9.3 -CREATE OR REPLACE FUNCTION - json_populate_record(base anyelement, from_json json, use_json_as_text boolean DEFAULT false) - RETURNS anyelement LANGUAGE internal STABLE AS 'json_populate_record' PARALLEL SAFE; - --- legacy definition for compatibility with 9.3 -CREATE OR REPLACE FUNCTION - json_populate_recordset(base anyelement, from_json json, use_json_as_text boolean DEFAULT false) - RETURNS SETOF anyelement LANGUAGE internal STABLE ROWS 100 AS 'json_populate_recordset' PARALLEL SAFE; - -CREATE OR REPLACE FUNCTION pg_logical_slot_get_changes( - IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}', - OUT lsn pg_lsn, OUT xid xid, OUT data text) -RETURNS SETOF RECORD -LANGUAGE INTERNAL -VOLATILE ROWS 1000 COST 1000 -AS 'pg_logical_slot_get_changes'; - -CREATE OR REPLACE FUNCTION pg_logical_slot_peek_changes( - IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}', - OUT lsn pg_lsn, OUT xid xid, OUT data text) -RETURNS SETOF RECORD -LANGUAGE INTERNAL -VOLATILE ROWS 1000 COST 1000 -AS 'pg_logical_slot_peek_changes'; - -CREATE OR REPLACE FUNCTION pg_logical_slot_get_binary_changes( - IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}', - OUT lsn pg_lsn, OUT xid xid, OUT data bytea) -RETURNS SETOF RECORD -LANGUAGE INTERNAL -VOLATILE ROWS 1000 COST 1000 -AS 'pg_logical_slot_get_binary_changes'; - -CREATE OR REPLACE FUNCTION pg_logical_slot_peek_binary_changes( - IN slot_name name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}', - OUT lsn pg_lsn, OUT xid xid, OUT data bytea) -RETURNS SETOF RECORD -LANGUAGE INTERNAL -VOLATILE ROWS 1000 COST 1000 -AS 'pg_logical_slot_peek_binary_changes'; - -CREATE OR REPLACE FUNCTION pg_create_physical_replication_slot( - IN slot_name name, IN immediately_reserve boolean DEFAULT false, - IN temporary boolean DEFAULT false, - OUT slot_name name, OUT lsn pg_lsn) -RETURNS RECORD -LANGUAGE INTERNAL -STRICT VOLATILE -AS 'pg_create_physical_replication_slot'; - -CREATE OR REPLACE FUNCTION pg_create_logical_replication_slot( - IN slot_name name, IN plugin name, - IN temporary boolean DEFAULT false, - IN twophase boolean DEFAULT false, - OUT slot_name name, OUT lsn pg_lsn) -RETURNS RECORD -LANGUAGE INTERNAL -STRICT VOLATILE -AS 'pg_create_logical_replication_slot'; - -CREATE OR REPLACE FUNCTION - make_interval(years int4 DEFAULT 0, months int4 DEFAULT 0, weeks int4 DEFAULT 0, - days int4 DEFAULT 0, hours int4 DEFAULT 0, mins int4 DEFAULT 0, - secs double precision DEFAULT 0.0) -RETURNS interval -LANGUAGE INTERNAL -STRICT IMMUTABLE PARALLEL SAFE -AS 'make_interval'; - -CREATE OR REPLACE FUNCTION - jsonb_set(jsonb_in jsonb, path text[] , replacement jsonb, - create_if_missing boolean DEFAULT true) -RETURNS jsonb -LANGUAGE INTERNAL -STRICT IMMUTABLE PARALLEL SAFE -AS 'jsonb_set'; - -CREATE OR REPLACE FUNCTION - jsonb_set_lax(jsonb_in jsonb, path text[] , replacement jsonb, - create_if_missing boolean DEFAULT true, - null_value_treatment text DEFAULT 'use_json_null') -RETURNS jsonb -LANGUAGE INTERNAL -CALLED ON NULL INPUT IMMUTABLE PARALLEL SAFE -AS 'jsonb_set_lax'; - -CREATE OR REPLACE FUNCTION - parse_ident(str text, strict boolean DEFAULT true) -RETURNS text[] -LANGUAGE INTERNAL -STRICT IMMUTABLE PARALLEL SAFE -AS 'parse_ident'; - -CREATE OR REPLACE FUNCTION - jsonb_insert(jsonb_in jsonb, path text[] , replacement jsonb, - insert_after boolean DEFAULT false) -RETURNS jsonb -LANGUAGE INTERNAL -STRICT IMMUTABLE PARALLEL SAFE -AS 'jsonb_insert'; - -CREATE OR REPLACE FUNCTION - jsonb_path_exists(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', - silent boolean DEFAULT false) -RETURNS boolean -LANGUAGE INTERNAL -STRICT IMMUTABLE PARALLEL SAFE -AS 'jsonb_path_exists'; - -CREATE OR REPLACE FUNCTION - jsonb_path_match(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', - silent boolean DEFAULT false) -RETURNS boolean -LANGUAGE INTERNAL -STRICT IMMUTABLE PARALLEL SAFE -AS 'jsonb_path_match'; - -CREATE OR REPLACE FUNCTION - jsonb_path_query(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', - silent boolean DEFAULT false) -RETURNS SETOF jsonb -LANGUAGE INTERNAL -STRICT IMMUTABLE PARALLEL SAFE -AS 'jsonb_path_query'; - -CREATE OR REPLACE FUNCTION - jsonb_path_query_array(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', - silent boolean DEFAULT false) -RETURNS jsonb -LANGUAGE INTERNAL -STRICT IMMUTABLE PARALLEL SAFE -AS 'jsonb_path_query_array'; - -CREATE OR REPLACE FUNCTION - jsonb_path_query_first(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', - silent boolean DEFAULT false) -RETURNS jsonb -LANGUAGE INTERNAL -STRICT IMMUTABLE PARALLEL SAFE -AS 'jsonb_path_query_first'; - -CREATE OR REPLACE FUNCTION - jsonb_path_exists_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', - silent boolean DEFAULT false) -RETURNS boolean -LANGUAGE INTERNAL -STRICT STABLE PARALLEL SAFE -AS 'jsonb_path_exists_tz'; - -CREATE OR REPLACE FUNCTION - jsonb_path_match_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', - silent boolean DEFAULT false) -RETURNS boolean -LANGUAGE INTERNAL -STRICT STABLE PARALLEL SAFE -AS 'jsonb_path_match_tz'; - -CREATE OR REPLACE FUNCTION - jsonb_path_query_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', - silent boolean DEFAULT false) -RETURNS SETOF jsonb -LANGUAGE INTERNAL -STRICT STABLE PARALLEL SAFE -AS 'jsonb_path_query_tz'; - -CREATE OR REPLACE FUNCTION - jsonb_path_query_array_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', - silent boolean DEFAULT false) -RETURNS jsonb -LANGUAGE INTERNAL -STRICT STABLE PARALLEL SAFE -AS 'jsonb_path_query_array_tz'; - -CREATE OR REPLACE FUNCTION - jsonb_path_query_first_tz(target jsonb, path jsonpath, vars jsonb DEFAULT '{}', - silent boolean DEFAULT false) -RETURNS jsonb -LANGUAGE INTERNAL -STRICT STABLE PARALLEL SAFE -AS 'jsonb_path_query_first_tz'; - --- default normalization form is NFC, per SQL standard -CREATE OR REPLACE FUNCTION - "normalize"(text, text DEFAULT 'NFC') -RETURNS text -LANGUAGE internal -STRICT IMMUTABLE PARALLEL SAFE -AS 'unicode_normalize_func'; - -CREATE OR REPLACE FUNCTION - is_normalized(text, text DEFAULT 'NFC') -RETURNS boolean -LANGUAGE internal -STRICT IMMUTABLE PARALLEL SAFE -AS 'unicode_is_normalized'; - --- --- The default permissions for functions mean that anyone can execute them. --- A number of functions shouldn't be executable by just anyone, but rather --- than use explicit 'superuser()' checks in those functions, we use the GRANT --- system to REVOKE access to those functions at initdb time. Administrators --- can later change who can access these functions, or leave them as only --- available to superuser / cluster owner, if they choose. --- -REVOKE EXECUTE ON FUNCTION pg_start_backup(text, boolean, boolean) FROM public; -REVOKE EXECUTE ON FUNCTION pg_stop_backup() FROM public; -REVOKE EXECUTE ON FUNCTION pg_stop_backup(boolean, boolean) FROM public; -REVOKE EXECUTE ON FUNCTION pg_create_restore_point(text) FROM public; -REVOKE EXECUTE ON FUNCTION pg_switch_wal() FROM public; -REVOKE EXECUTE ON FUNCTION pg_wal_replay_pause() FROM public; -REVOKE EXECUTE ON FUNCTION pg_wal_replay_resume() FROM public; -REVOKE EXECUTE ON FUNCTION pg_rotate_logfile() FROM public; -REVOKE EXECUTE ON FUNCTION pg_reload_conf() FROM public; -REVOKE EXECUTE ON FUNCTION pg_current_logfile() FROM public; -REVOKE EXECUTE ON FUNCTION pg_current_logfile(text) FROM public; -REVOKE EXECUTE ON FUNCTION pg_promote(boolean, integer) FROM public; - -REVOKE EXECUTE ON FUNCTION pg_stat_reset() FROM public; -REVOKE EXECUTE ON FUNCTION pg_stat_reset_shared(text) FROM public; -REVOKE EXECUTE ON FUNCTION pg_stat_reset_slru(text) FROM public; -REVOKE EXECUTE ON FUNCTION pg_stat_reset_single_table_counters(oid) FROM public; -REVOKE EXECUTE ON FUNCTION pg_stat_reset_single_function_counters(oid) FROM public; -REVOKE EXECUTE ON FUNCTION pg_stat_reset_replication_slot(text) FROM public; - -REVOKE EXECUTE ON FUNCTION lo_import(text) FROM public; -REVOKE EXECUTE ON FUNCTION lo_import(text, oid) FROM public; -REVOKE EXECUTE ON FUNCTION lo_export(oid, text) FROM public; - -REVOKE EXECUTE ON FUNCTION pg_ls_logdir() FROM public; -REVOKE EXECUTE ON FUNCTION pg_ls_waldir() FROM public; -REVOKE EXECUTE ON FUNCTION pg_ls_archive_statusdir() FROM public; -REVOKE EXECUTE ON FUNCTION pg_ls_tmpdir() FROM public; -REVOKE EXECUTE ON FUNCTION pg_ls_tmpdir(oid) FROM public; - -REVOKE EXECUTE ON FUNCTION pg_read_file(text) FROM public; -REVOKE EXECUTE ON FUNCTION pg_read_file(text,bigint,bigint) FROM public; -REVOKE EXECUTE ON FUNCTION pg_read_file(text,bigint,bigint,boolean) FROM public; - -REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text) FROM public; -REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint) FROM public; -REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint,boolean) FROM public; - -REVOKE EXECUTE ON FUNCTION pg_replication_origin_advance(text, pg_lsn) FROM public; -REVOKE EXECUTE ON FUNCTION pg_replication_origin_create(text) FROM public; -REVOKE EXECUTE ON FUNCTION pg_replication_origin_drop(text) FROM public; -REVOKE EXECUTE ON FUNCTION pg_replication_origin_oid(text) FROM public; -REVOKE EXECUTE ON FUNCTION pg_replication_origin_progress(text, boolean) FROM public; -REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_is_setup() FROM public; -REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_progress(boolean) FROM public; -REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_reset() FROM public; -REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_setup(text) FROM public; -REVOKE EXECUTE ON FUNCTION pg_replication_origin_xact_reset() FROM public; -REVOKE EXECUTE ON FUNCTION pg_replication_origin_xact_setup(pg_lsn, timestamp with time zone) FROM public; -REVOKE EXECUTE ON FUNCTION pg_show_replication_origin_status() FROM public; - -REVOKE EXECUTE ON FUNCTION pg_stat_file(text) FROM public; -REVOKE EXECUTE ON FUNCTION pg_stat_file(text,boolean) FROM public; - -REVOKE EXECUTE ON FUNCTION pg_ls_dir(text) FROM public; -REVOKE EXECUTE ON FUNCTION pg_ls_dir(text,boolean,boolean) FROM public; - --- --- We also set up some things as accessible to standard roles. --- -GRANT EXECUTE ON FUNCTION pg_ls_logdir() TO pg_monitor; -GRANT EXECUTE ON FUNCTION pg_ls_waldir() TO pg_monitor; -GRANT EXECUTE ON FUNCTION pg_ls_archive_statusdir() TO pg_monitor; -GRANT EXECUTE ON FUNCTION pg_ls_tmpdir() TO pg_monitor; -GRANT EXECUTE ON FUNCTION pg_ls_tmpdir(oid) TO pg_monitor; - -GRANT pg_read_all_settings TO pg_monitor; -GRANT pg_read_all_stats TO pg_monitor; -GRANT pg_stat_scan_tables TO pg_monitor; diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 4500df6fc8a4a..152d21e88bd29 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -160,6 +160,7 @@ static char *dictionary_file; static char *info_schema_file; static char *features_file; static char *system_constraints_file; +static char *system_functions_file; static char *system_views_file; static bool success = false; static bool made_new_pgdata = false; @@ -2506,6 +2507,7 @@ setup_data_file_paths(void) set_input(&info_schema_file, "information_schema.sql"); set_input(&features_file, "sql_features.txt"); set_input(&system_constraints_file, "system_constraints.sql"); + set_input(&system_functions_file, "system_functions.sql"); set_input(&system_views_file, "system_views.sql"); if (show_setting || debug) @@ -2532,6 +2534,8 @@ setup_data_file_paths(void) check_input(dictionary_file); check_input(info_schema_file); check_input(features_file); + check_input(system_constraints_file); + check_input(system_functions_file); check_input(system_views_file); } @@ -2869,6 +2873,8 @@ initialize_data_directory(void) setup_run_file(cmdfd, system_constraints_file); + setup_run_file(cmdfd, system_functions_file); + setup_depend(cmdfd); /* From 767982e36298be4da44a063e36261e9cfdc0bf49 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 16 Apr 2021 18:36:45 -0400 Subject: [PATCH 124/671] Convert built-in SQL-language functions to SQL-standard-body style. Adopt the new pre-parsed representation for all built-in and information_schema SQL-language functions, except for a small number that can't presently be converted because they have polymorphic arguments. This eliminates residual hazards around search-path safety of these functions, and might provide some small performance benefits by reducing parsing costs. It seems useful also to provide more test coverage for the SQL-standard-body feature. Discussion: https://postgr.es/m/3956760.1618529139@sss.pgh.pa.us --- src/backend/catalog/information_schema.sql | 48 ++- src/backend/catalog/system_functions.sql | 350 +++++++++++++++++++-- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_proc.dat | 115 ++++--- 4 files changed, 402 insertions(+), 113 deletions(-) diff --git a/src/backend/catalog/information_schema.sql b/src/backend/catalog/information_schema.sql index 941a9f664c918..0f2c1833e9f36 100644 --- a/src/backend/catalog/information_schema.sql +++ b/src/backend/catalog/information_schema.sql @@ -43,7 +43,8 @@ SET search_path TO information_schema; CREATE FUNCTION _pg_expandarray(IN anyarray, OUT x anyelement, OUT n int) RETURNS SETOF RECORD LANGUAGE sql STRICT IMMUTABLE PARALLEL SAFE - AS 'select $1[s], s - pg_catalog.array_lower($1,1) + 1 + AS 'select $1[s], + s operator(pg_catalog.-) pg_catalog.array_lower($1,1) operator(pg_catalog.+) 1 from pg_catalog.generate_series(pg_catalog.array_lower($1,1), pg_catalog.array_upper($1,1), 1) as g(s)'; @@ -52,28 +53,26 @@ CREATE FUNCTION _pg_expandarray(IN anyarray, OUT x anyelement, OUT n int) * column's position in the index (NULL if not there) */ CREATE FUNCTION _pg_index_position(oid, smallint) RETURNS int LANGUAGE sql STRICT STABLE - AS $$ +BEGIN ATOMIC SELECT (ss.a).n FROM (SELECT information_schema._pg_expandarray(indkey) AS a FROM pg_catalog.pg_index WHERE indexrelid = $1) ss WHERE (ss.a).x = $2; -$$; +END; CREATE FUNCTION _pg_truetypid(pg_attribute, pg_type) RETURNS oid LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT CASE WHEN $2.typtype = 'd' THEN $2.typbasetype ELSE $1.atttypid END$$; +RETURN CASE WHEN $2.typtype = 'd' THEN $2.typbasetype ELSE $1.atttypid END; CREATE FUNCTION _pg_truetypmod(pg_attribute, pg_type) RETURNS int4 LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT CASE WHEN $2.typtype = 'd' THEN $2.typtypmod ELSE $1.atttypmod END$$; +RETURN CASE WHEN $2.typtype = 'd' THEN $2.typtypmod ELSE $1.atttypmod END; -- these functions encapsulate knowledge about the encoding of typmod: @@ -82,8 +81,7 @@ CREATE FUNCTION _pg_char_max_length(typid oid, typmod int4) RETURNS integer IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE WHEN $2 = -1 /* default typmod */ THEN null WHEN $1 IN (1042, 1043) /* char, varchar */ @@ -91,15 +89,14 @@ $$SELECT WHEN $1 IN (1560, 1562) /* bit, varbit */ THEN $2 ELSE null - END$$; + END; CREATE FUNCTION _pg_char_octet_length(typid oid, typmod int4) RETURNS integer LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE WHEN $1 IN (25, 1042, 1043) /* text, char, varchar */ THEN CASE WHEN $2 = -1 /* default typmod */ THEN CAST(2^30 AS integer) @@ -107,15 +104,14 @@ $$SELECT pg_catalog.pg_encoding_max_length((SELECT encoding FROM pg_catalog.pg_database WHERE datname = pg_catalog.current_database())) END ELSE null - END$$; + END; CREATE FUNCTION _pg_numeric_precision(typid oid, typmod int4) RETURNS integer LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE $1 WHEN 21 /*int2*/ THEN 16 WHEN 23 /*int4*/ THEN 32 @@ -128,27 +124,25 @@ $$SELECT WHEN 700 /*float4*/ THEN 24 /*FLT_MANT_DIG*/ WHEN 701 /*float8*/ THEN 53 /*DBL_MANT_DIG*/ ELSE null - END$$; + END; CREATE FUNCTION _pg_numeric_precision_radix(typid oid, typmod int4) RETURNS integer LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE WHEN $1 IN (21, 23, 20, 700, 701) THEN 2 WHEN $1 IN (1700) THEN 10 ELSE null - END$$; + END; CREATE FUNCTION _pg_numeric_scale(typid oid, typmod int4) RETURNS integer LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE WHEN $1 IN (21, 23, 20) THEN 0 WHEN $1 IN (1700) THEN CASE WHEN $2 = -1 @@ -156,15 +150,14 @@ $$SELECT ELSE ($2 - 4) & 65535 END ELSE null - END$$; + END; CREATE FUNCTION _pg_datetime_precision(typid oid, typmod int4) RETURNS integer LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE WHEN $1 IN (1082) /* date */ THEN 0 WHEN $1 IN (1083, 1114, 1184, 1266) /* time, timestamp, same + tz */ @@ -172,19 +165,18 @@ $$SELECT WHEN $1 IN (1186) /* interval */ THEN CASE WHEN $2 < 0 OR $2 & 65535 = 65535 THEN 6 ELSE $2 & 65535 END ELSE null - END$$; + END; CREATE FUNCTION _pg_interval_type(typid oid, mod int4) RETURNS text LANGUAGE sql IMMUTABLE PARALLEL SAFE RETURNS NULL ON NULL INPUT - AS -$$SELECT +RETURN CASE WHEN $1 IN (1186) /* interval */ THEN pg_catalog.upper(substring(pg_catalog.format_type($1, $2) similar 'interval[()0-9]* #"%#"' escape '#')) ELSE null - END$$; + END; -- 5.2 INFORMATION_SCHEMA_CATALOG_NAME view appears later. diff --git a/src/backend/catalog/system_functions.sql b/src/backend/catalog/system_functions.sql index d7ac7a926e478..1b2b37c1bf080 100644 --- a/src/backend/catalog/system_functions.sql +++ b/src/backend/catalog/system_functions.sql @@ -30,65 +30,351 @@ */ -CREATE FUNCTION ts_debug(IN config regconfig, IN document text, +CREATE OR REPLACE FUNCTION lpad(text, integer) + RETURNS text + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN lpad($1, $2, ' '); + +CREATE OR REPLACE FUNCTION rpad(text, integer) + RETURNS text + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN rpad($1, $2, ' '); + +CREATE OR REPLACE FUNCTION "substring"(text, text, text) + RETURNS text + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN substring($1, similar_to_escape($2, $3)); + +CREATE OR REPLACE FUNCTION bit_length(bit) + RETURNS integer + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN length($1); + +CREATE OR REPLACE FUNCTION bit_length(bytea) + RETURNS integer + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN octet_length($1) * 8; + +CREATE OR REPLACE FUNCTION bit_length(text) + RETURNS integer + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN octet_length($1) * 8; + +CREATE OR REPLACE FUNCTION log(numeric) + RETURNS numeric + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN log(10, $1); + +CREATE OR REPLACE FUNCTION log10(numeric) + RETURNS numeric + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN log(10, $1); + +CREATE OR REPLACE FUNCTION round(numeric) + RETURNS numeric + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN round($1, 0); + +CREATE OR REPLACE FUNCTION trunc(numeric) + RETURNS numeric + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN trunc($1, 0); + +CREATE OR REPLACE FUNCTION numeric_pl_pg_lsn(numeric, pg_lsn) + RETURNS pg_lsn + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION path_contain_pt(path, point) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN on_ppath($2, $1); + +CREATE OR REPLACE FUNCTION polygon(circle) + RETURNS polygon + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN polygon(12, $1); + +CREATE OR REPLACE FUNCTION age(timestamptz) + RETURNS interval + LANGUAGE sql + STABLE PARALLEL SAFE STRICT COST 1 +RETURN age(cast(current_date as timestamptz), $1); + +CREATE OR REPLACE FUNCTION age(timestamp) + RETURNS interval + LANGUAGE sql + STABLE PARALLEL SAFE STRICT COST 1 +RETURN age(cast(current_date as timestamp), $1); + +CREATE OR REPLACE FUNCTION date_part(text, date) + RETURNS double precision + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN date_part($1, cast($2 as timestamp)); + +CREATE OR REPLACE FUNCTION timestamptz(date, time) + RETURNS timestamptz + LANGUAGE sql + STABLE PARALLEL SAFE STRICT COST 1 +RETURN cast(($1 + $2) as timestamptz); + +CREATE OR REPLACE FUNCTION timedate_pl(time, date) + RETURNS timestamp + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION timetzdate_pl(timetz, date) + RETURNS timestamptz + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION interval_pl_time(interval, time) + RETURNS time + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION interval_pl_date(interval, date) + RETURNS timestamp + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION interval_pl_timetz(interval, timetz) + RETURNS timetz + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION interval_pl_timestamp(interval, timestamp) + RETURNS timestamp + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION interval_pl_timestamptz(interval, timestamptz) + RETURNS timestamptz + LANGUAGE sql + STABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION integer_pl_date(integer, date) + RETURNS date + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION "overlaps"(timestamptz, timestamptz, + timestamptz, interval) + RETURNS boolean + LANGUAGE sql + STABLE PARALLEL SAFE COST 1 +RETURN ($1, $2) overlaps ($3, ($3 + $4)); + +CREATE OR REPLACE FUNCTION "overlaps"(timestamptz, interval, + timestamptz, interval) + RETURNS boolean + LANGUAGE sql + STABLE PARALLEL SAFE COST 1 +RETURN ($1, ($1 + $2)) overlaps ($3, ($3 + $4)); + +CREATE OR REPLACE FUNCTION "overlaps"(timestamptz, interval, + timestamptz, timestamptz) + RETURNS boolean + LANGUAGE sql + STABLE PARALLEL SAFE COST 1 +RETURN ($1, ($1 + $2)) overlaps ($3, $4); + +CREATE OR REPLACE FUNCTION "overlaps"(timestamp, timestamp, + timestamp, interval) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE COST 1 +RETURN ($1, $2) overlaps ($3, ($3 + $4)); + +CREATE OR REPLACE FUNCTION "overlaps"(timestamp, interval, + timestamp, timestamp) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE COST 1 +RETURN ($1, ($1 + $2)) overlaps ($3, $4); + +CREATE OR REPLACE FUNCTION "overlaps"(timestamp, interval, + timestamp, interval) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE COST 1 +RETURN ($1, ($1 + $2)) overlaps ($3, ($3 + $4)); + +CREATE OR REPLACE FUNCTION "overlaps"(time, interval, + time, interval) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE COST 1 +RETURN ($1, ($1 + $2)) overlaps ($3, ($3 + $4)); + +CREATE OR REPLACE FUNCTION "overlaps"(time, time, + time, interval) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE COST 1 +RETURN ($1, $2) overlaps ($3, ($3 + $4)); + +CREATE OR REPLACE FUNCTION "overlaps"(time, interval, + time, time) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE COST 1 +RETURN ($1, ($1 + $2)) overlaps ($3, $4); + +CREATE OR REPLACE FUNCTION int8pl_inet(bigint, inet) + RETURNS inet + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN $2 + $1; + +CREATE OR REPLACE FUNCTION xpath(text, xml) + RETURNS xml[] + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN xpath($1, $2, '{}'::text[]); + +CREATE OR REPLACE FUNCTION xpath_exists(text, xml) + RETURNS boolean + LANGUAGE sql + IMMUTABLE PARALLEL SAFE STRICT COST 1 +RETURN xpath_exists($1, $2, '{}'::text[]); + +CREATE OR REPLACE FUNCTION pg_sleep_for(interval) + RETURNS void + LANGUAGE sql + PARALLEL SAFE STRICT COST 1 +RETURN pg_sleep(extract(epoch from clock_timestamp() + $1) - + extract(epoch from clock_timestamp())); + +CREATE OR REPLACE FUNCTION pg_sleep_until(timestamptz) + RETURNS void + LANGUAGE sql + PARALLEL SAFE STRICT COST 1 +RETURN pg_sleep(extract(epoch from $1) - + extract(epoch from clock_timestamp())); + +CREATE OR REPLACE FUNCTION pg_relation_size(regclass) + RETURNS bigint + LANGUAGE sql + PARALLEL SAFE STRICT COST 1 +RETURN pg_relation_size($1, 'main'); + +CREATE OR REPLACE FUNCTION obj_description(oid, name) + RETURNS text + LANGUAGE sql + STABLE PARALLEL SAFE STRICT +BEGIN ATOMIC +select description from pg_description + where objoid = $1 and + classoid = (select oid from pg_class where relname = $2 and + relnamespace = 'pg_catalog'::regnamespace) and + objsubid = 0; +END; + +CREATE OR REPLACE FUNCTION shobj_description(oid, name) + RETURNS text + LANGUAGE sql + STABLE PARALLEL SAFE STRICT +BEGIN ATOMIC +select description from pg_shdescription + where objoid = $1 and + classoid = (select oid from pg_class where relname = $2 and + relnamespace = 'pg_catalog'::regnamespace); +END; + +CREATE OR REPLACE FUNCTION obj_description(oid) + RETURNS text + LANGUAGE sql + STABLE PARALLEL SAFE STRICT +BEGIN ATOMIC +select description from pg_description where objoid = $1 and objsubid = 0; +END; + +CREATE OR REPLACE FUNCTION col_description(oid, integer) + RETURNS text + LANGUAGE sql + STABLE PARALLEL SAFE STRICT +BEGIN ATOMIC +select description from pg_description + where objoid = $1 and classoid = 'pg_class'::regclass and objsubid = $2; +END; + +CREATE OR REPLACE FUNCTION ts_debug(config regconfig, document text, OUT alias text, OUT description text, OUT token text, OUT dictionaries regdictionary[], OUT dictionary regdictionary, OUT lexemes text[]) -RETURNS SETOF record AS -$$ -SELECT + RETURNS SETOF record + LANGUAGE sql + STABLE PARALLEL SAFE STRICT +BEGIN ATOMIC +select tt.alias AS alias, tt.description AS description, parse.token AS token, - ARRAY ( SELECT m.mapdict::pg_catalog.regdictionary - FROM pg_catalog.pg_ts_config_map AS m + ARRAY ( SELECT m.mapdict::regdictionary + FROM pg_ts_config_map AS m WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid ORDER BY m.mapseqno ) AS dictionaries, - ( SELECT mapdict::pg_catalog.regdictionary - FROM pg_catalog.pg_ts_config_map AS m + ( SELECT mapdict::regdictionary + FROM pg_ts_config_map AS m WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid - ORDER BY pg_catalog.ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno + ORDER BY ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno LIMIT 1 ) AS dictionary, - ( SELECT pg_catalog.ts_lexize(mapdict, parse.token) - FROM pg_catalog.pg_ts_config_map AS m + ( SELECT ts_lexize(mapdict, parse.token) + FROM pg_ts_config_map AS m WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid - ORDER BY pg_catalog.ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno + ORDER BY ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno LIMIT 1 ) AS lexemes -FROM pg_catalog.ts_parse( - (SELECT cfgparser FROM pg_catalog.pg_ts_config WHERE oid = $1 ), $2 +FROM ts_parse( + (SELECT cfgparser FROM pg_ts_config WHERE oid = $1 ), $2 ) AS parse, - pg_catalog.ts_token_type( - (SELECT cfgparser FROM pg_catalog.pg_ts_config WHERE oid = $1 ) + ts_token_type( + (SELECT cfgparser FROM pg_ts_config WHERE oid = $1 ) ) AS tt -WHERE tt.tokid = parse.tokid -$$ -LANGUAGE SQL STRICT STABLE PARALLEL SAFE; +WHERE tt.tokid = parse.tokid; +END; -COMMENT ON FUNCTION ts_debug(regconfig,text) IS - 'debug function for text search configuration'; - -CREATE FUNCTION ts_debug(IN document text, +CREATE OR REPLACE FUNCTION ts_debug(document text, OUT alias text, OUT description text, OUT token text, OUT dictionaries regdictionary[], OUT dictionary regdictionary, OUT lexemes text[]) -RETURNS SETOF record AS -$$ - SELECT * FROM pg_catalog.ts_debug( pg_catalog.get_current_ts_config(), $1); -$$ -LANGUAGE SQL STRICT STABLE PARALLEL SAFE; - -COMMENT ON FUNCTION ts_debug(text) IS - 'debug function for current text search configuration'; - + RETURNS SETOF record + LANGUAGE sql + STABLE PARALLEL SAFE STRICT +BEGIN ATOMIC + SELECT * FROM ts_debug(get_current_ts_config(), $1); +END; CREATE OR REPLACE FUNCTION pg_start_backup(label text, fast boolean DEFAULT false, exclusive boolean DEFAULT true) diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 904b0c97ec211..1c60d1a69986a 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202104161 +#define CATALOG_VERSION_NO 202104162 #endif diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 591753fe81712..14aba6e39b7bd 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -2364,7 +2364,7 @@ { oid => '1176', descr => 'convert date and time to timestamp with time zone', proname => 'timestamptz', prolang => 'sql', provolatile => 's', prorettype => 'timestamptz', proargtypes => 'date time', - prosrc => 'select cast(($1 + $2) as timestamp with time zone)' }, + prosrc => 'see system_views.sql' }, { oid => '1178', descr => 'convert timestamp with time zone to date', proname => 'date', provolatile => 's', prorettype => 'date', proargtypes => 'timestamptz', prosrc => 'timestamptz_date' }, @@ -2417,16 +2417,16 @@ { oid => '1215', descr => 'get description for object id and catalog name', proname => 'obj_description', prolang => 'sql', procost => '100', provolatile => 's', prorettype => 'text', proargtypes => 'oid name', - prosrc => 'select description from pg_catalog.pg_description where objoid = $1 and classoid = (select oid from pg_catalog.pg_class where relname = $2 and relnamespace = \'pg_catalog\'::pg_catalog.regnamespace) and objsubid = 0' }, + prosrc => 'see system_views.sql' }, { oid => '1216', descr => 'get description for table column', proname => 'col_description', prolang => 'sql', procost => '100', provolatile => 's', prorettype => 'text', proargtypes => 'oid int4', - prosrc => 'select description from pg_catalog.pg_description where objoid = $1 and classoid = \'pg_catalog.pg_class\'::pg_catalog.regclass and objsubid = $2' }, + prosrc => 'see system_views.sql' }, { oid => '1993', descr => 'get description for object id and shared catalog name', proname => 'shobj_description', prolang => 'sql', procost => '100', provolatile => 's', prorettype => 'text', proargtypes => 'oid name', - prosrc => 'select description from pg_catalog.pg_shdescription where objoid = $1 and classoid = (select oid from pg_catalog.pg_class where relname = $2 and relnamespace = \'pg_catalog\'::pg_catalog.regnamespace)' }, + prosrc => 'see system_views.sql' }, { oid => '1217', descr => 'truncate timestamp with time zone to specified units', @@ -2601,13 +2601,13 @@ { oid => '1296', proname => 'timedate_pl', prolang => 'sql', prorettype => 'timestamp', - proargtypes => 'time date', prosrc => 'select ($2 + $1)' }, + proargtypes => 'time date', prosrc => 'see system_views.sql' }, { oid => '1297', proname => 'datetimetz_pl', prorettype => 'timestamptz', proargtypes => 'date timetz', prosrc => 'datetimetz_timestamptz' }, { oid => '1298', proname => 'timetzdate_pl', prolang => 'sql', prorettype => 'timestamptz', - proargtypes => 'timetz date', prosrc => 'select ($2 + $1)' }, + proargtypes => 'timetz date', prosrc => 'see system_views.sql' }, { oid => '1299', descr => 'current transaction time', proname => 'now', provolatile => 's', prorettype => 'timestamptz', proargtypes => '', prosrc => 'now' }, @@ -2651,17 +2651,17 @@ proname => 'overlaps', prolang => 'sql', proisstrict => 'f', provolatile => 's', prorettype => 'bool', proargtypes => 'timestamptz interval timestamptz interval', - prosrc => 'select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))' }, + prosrc => 'see system_views.sql' }, { oid => '1306', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', provolatile => 's', prorettype => 'bool', proargtypes => 'timestamptz timestamptz timestamptz interval', - prosrc => 'select ($1, $2) overlaps ($3, ($3 + $4))' }, + prosrc => 'see system_views.sql' }, { oid => '1307', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', provolatile => 's', prorettype => 'bool', proargtypes => 'timestamptz interval timestamptz timestamptz', - prosrc => 'select ($1, ($1 + $2)) overlaps ($3, $4)' }, + prosrc => 'see system_views.sql' }, { oid => '1308', descr => 'intervals overlap?', proname => 'overlaps', proisstrict => 'f', prorettype => 'bool', @@ -2669,15 +2669,15 @@ { oid => '1309', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', prorettype => 'bool', proargtypes => 'time interval time interval', - prosrc => 'select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))' }, + prosrc => 'see system_views.sql' }, { oid => '1310', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', prorettype => 'bool', proargtypes => 'time time time interval', - prosrc => 'select ($1, $2) overlaps ($3, ($3 + $4))' }, + prosrc => 'see system_views.sql' }, { oid => '1311', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', prorettype => 'bool', proargtypes => 'time interval time time', - prosrc => 'select ($1, ($1 + $2)) overlaps ($3, $4)' }, + prosrc => 'see system_views.sql' }, { oid => '1312', descr => 'I/O', proname => 'timestamp_in', provolatile => 's', prorettype => 'timestamp', @@ -2758,7 +2758,7 @@ { oid => '1348', descr => 'deprecated, use two-argument form instead', proname => 'obj_description', prolang => 'sql', procost => '100', provolatile => 's', prorettype => 'text', proargtypes => 'oid', - prosrc => 'select description from pg_catalog.pg_description where objoid = $1 and objsubid = 0' }, + prosrc => 'see system_views.sql' }, { oid => '1349', descr => 'print type names of oidvector field', proname => 'oidvectortypes', provolatile => 's', prorettype => 'text', @@ -2841,8 +2841,7 @@ { oid => '1384', descr => 'extract field from date', proname => 'date_part', prolang => 'sql', prorettype => 'float8', - proargtypes => 'text date', - prosrc => 'select pg_catalog.date_part($1, cast($2 as timestamp without time zone))' }, + proargtypes => 'text date', prosrc => 'see system_views.sql' }, { oid => '9979', descr => 'extract field from date', proname => 'extract', prorettype => 'numeric', proargtypes => 'text date', prosrc => 'extract_date' }, @@ -2856,7 +2855,7 @@ descr => 'date difference from today preserving months and years', proname => 'age', prolang => 'sql', provolatile => 's', prorettype => 'interval', proargtypes => 'timestamptz', - prosrc => 'select pg_catalog.age(cast(current_date as timestamp with time zone), $1)' }, + prosrc => 'see system_views.sql' }, { oid => '1388', descr => 'convert timestamp with time zone to time with time zone', @@ -2970,7 +2969,7 @@ prosrc => 'box_div' }, { oid => '1426', proname => 'path_contain_pt', prolang => 'sql', prorettype => 'bool', - proargtypes => 'path point', prosrc => 'select pg_catalog.on_ppath($2, $1)' }, + proargtypes => 'path point', prosrc => 'see system_views.sql' }, { oid => '1428', proname => 'poly_contain_pt', prorettype => 'bool', proargtypes => 'polygon point', prosrc => 'poly_contain_pt' }, @@ -3230,7 +3229,7 @@ prosrc => 'circle_center' }, { oid => '1544', descr => 'convert circle to 12-vertex polygon', proname => 'polygon', prolang => 'sql', prorettype => 'polygon', - proargtypes => 'circle', prosrc => 'select pg_catalog.polygon(12, $1)' }, + proargtypes => 'circle', prosrc => 'see system_views.sql' }, { oid => '1545', descr => 'number of points', proname => 'npoints', prorettype => 'int4', proargtypes => 'path', prosrc => 'path_npoints' }, @@ -3526,12 +3525,10 @@ prosrc => 'translate' }, { oid => '879', descr => 'left-pad string to length', proname => 'lpad', prolang => 'sql', prorettype => 'text', - proargtypes => 'text int4', - prosrc => 'select pg_catalog.lpad($1, $2, \' \')' }, + proargtypes => 'text int4', prosrc => 'see system_views.sql' }, { oid => '880', descr => 'right-pad string to length', proname => 'rpad', prolang => 'sql', prorettype => 'text', - proargtypes => 'text int4', - prosrc => 'select pg_catalog.rpad($1, $2, \' \')' }, + proargtypes => 'text int4', prosrc => 'see system_views.sql' }, { oid => '881', descr => 'trim spaces from left end of string', proname => 'ltrim', prorettype => 'text', proargtypes => 'text', prosrc => 'ltrim1' }, @@ -4147,7 +4144,7 @@ prosrc => 'inetpl' }, { oid => '2631', proname => 'int8pl_inet', prolang => 'sql', prorettype => 'inet', - proargtypes => 'int8 inet', prosrc => 'select $2 + $1' }, + proargtypes => 'int8 inet', prosrc => 'see system_views.sql' }, { oid => '2632', proname => 'inetmi_int8', prorettype => 'inet', proargtypes => 'inet int8', prosrc => 'inetmi_int8' }, @@ -4279,13 +4276,13 @@ prosrc => 'numeric_round' }, { oid => '1708', descr => 'value rounded to \'scale\' of zero', proname => 'round', prolang => 'sql', prorettype => 'numeric', - proargtypes => 'numeric', prosrc => 'select pg_catalog.round($1,0)' }, + proargtypes => 'numeric', prosrc => 'see system_views.sql' }, { oid => '1709', descr => 'value truncated to \'scale\'', proname => 'trunc', prorettype => 'numeric', proargtypes => 'numeric int4', prosrc => 'numeric_trunc' }, { oid => '1710', descr => 'value truncated to \'scale\' of zero', proname => 'trunc', prolang => 'sql', prorettype => 'numeric', - proargtypes => 'numeric', prosrc => 'select pg_catalog.trunc($1,0)' }, + proargtypes => 'numeric', prosrc => 'see system_views.sql' }, { oid => '1711', descr => 'nearest integer >= value', proname => 'ceil', prorettype => 'numeric', proargtypes => 'numeric', prosrc => 'numeric_ceil' }, @@ -4385,10 +4382,10 @@ proargtypes => 'int4', prosrc => 'int4_numeric' }, { oid => '1741', descr => 'base 10 logarithm', proname => 'log', prolang => 'sql', prorettype => 'numeric', - proargtypes => 'numeric', prosrc => 'select pg_catalog.log(10, $1)' }, + proargtypes => 'numeric', prosrc => 'see system_views.sql' }, { oid => '1481', descr => 'base 10 logarithm', proname => 'log10', prolang => 'sql', prorettype => 'numeric', - proargtypes => 'numeric', prosrc => 'select pg_catalog.log(10, $1)' }, + proargtypes => 'numeric', prosrc => 'see system_views.sql' }, { oid => '1742', descr => 'convert float4 to numeric', proname => 'numeric', proleakproof => 't', prorettype => 'numeric', proargtypes => 'float4', prosrc => 'float4_numeric' }, @@ -4572,13 +4569,13 @@ { oid => '1810', descr => 'length in bits', proname => 'bit_length', prolang => 'sql', prorettype => 'int4', - proargtypes => 'bytea', prosrc => 'select pg_catalog.octet_length($1) * 8' }, + proargtypes => 'bytea', prosrc => 'see system_views.sql' }, { oid => '1811', descr => 'length in bits', proname => 'bit_length', prolang => 'sql', prorettype => 'int4', - proargtypes => 'text', prosrc => 'select pg_catalog.octet_length($1) * 8' }, + proargtypes => 'text', prosrc => 'see system_views.sql' }, { oid => '1812', descr => 'length in bits', proname => 'bit_length', prolang => 'sql', prorettype => 'int4', - proargtypes => 'bit', prosrc => 'select pg_catalog.length($1)' }, + proargtypes => 'bit', prosrc => 'see system_views.sql' }, # Selectivity estimators for LIKE and related operators { oid => '1814', descr => 'restriction selectivity of ILIKE', @@ -4897,7 +4894,7 @@ { oid => '1848', proname => 'interval_pl_time', prolang => 'sql', prorettype => 'time', - proargtypes => 'interval time', prosrc => 'select $2 + $1' }, + proargtypes => 'interval time', prosrc => 'see system_views.sql' }, { oid => '1850', proname => 'int28eq', proleakproof => 't', prorettype => 'bool', @@ -5782,11 +5779,11 @@ { oid => '2003', proname => 'textanycat', prolang => 'sql', provolatile => 's', prorettype => 'text', proargtypes => 'text anynonarray', - prosrc => 'select $1 || $2::pg_catalog.text' }, + prosrc => 'select $1 operator(pg_catalog.||) $2::pg_catalog.text' }, { oid => '2004', proname => 'anytextcat', prolang => 'sql', provolatile => 's', prorettype => 'text', proargtypes => 'anynonarray text', - prosrc => 'select $1::pg_catalog.text || $2' }, + prosrc => 'select $1::pg_catalog.text operator(pg_catalog.||) $2' }, { oid => '2005', proname => 'bytealike', prosupport => 'textlike_support', @@ -5906,15 +5903,15 @@ { oid => '2042', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', prorettype => 'bool', proargtypes => 'timestamp interval timestamp interval', - prosrc => 'select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))' }, + prosrc => 'see system_views.sql' }, { oid => '2043', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', prorettype => 'bool', proargtypes => 'timestamp timestamp timestamp interval', - prosrc => 'select ($1, $2) overlaps ($3, ($3 + $4))' }, + prosrc => 'see system_views.sql' }, { oid => '2044', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', prorettype => 'bool', proargtypes => 'timestamp interval timestamp timestamp', - prosrc => 'select ($1, ($1 + $2)) overlaps ($3, $4)' }, + prosrc => 'see system_views.sql' }, { oid => '2045', descr => 'less-equal-greater', proname => 'timestamp_cmp', proleakproof => 't', prorettype => 'int4', proargtypes => 'timestamp timestamp', prosrc => 'timestamp_cmp' }, @@ -5980,7 +5977,7 @@ descr => 'date difference from today preserving months and years', proname => 'age', prolang => 'sql', provolatile => 's', prorettype => 'interval', proargtypes => 'timestamp', - prosrc => 'select pg_catalog.age(cast(current_date as timestamp without time zone), $1)' }, + prosrc => 'see system_views.sql' }, { oid => '2069', descr => 'adjust timestamp to new time zone', proname => 'timezone', prorettype => 'timestamptz', @@ -6000,8 +5997,7 @@ prosrc => 'textregexsubstr' }, { oid => '2074', descr => 'extract text matching SQL regular expression', proname => 'substring', prolang => 'sql', prorettype => 'text', - proargtypes => 'text text text', - prosrc => 'select pg_catalog.substring($1, pg_catalog.similar_to_escape($2, $3))' }, + proargtypes => 'text text text', prosrc => 'see system_views.sql' }, { oid => '2075', descr => 'convert int8 to bitstring', proname => 'bit', prorettype => 'bit', proargtypes => 'int8 int4', @@ -6366,11 +6362,11 @@ { oid => '3935', descr => 'sleep for the specified interval', proname => 'pg_sleep_for', prolang => 'sql', provolatile => 'v', prorettype => 'void', proargtypes => 'interval', - prosrc => 'select pg_catalog.pg_sleep(extract(epoch from pg_catalog.clock_timestamp() operator(pg_catalog.+) $1) operator(pg_catalog.-) extract(epoch from pg_catalog.clock_timestamp()))' }, + prosrc => 'see system_views.sql' }, { oid => '3936', descr => 'sleep until the specified time', proname => 'pg_sleep_until', prolang => 'sql', provolatile => 'v', prorettype => 'void', proargtypes => 'timestamptz', - prosrc => 'select pg_catalog.pg_sleep(extract(epoch from $1) operator(pg_catalog.-) extract(epoch from pg_catalog.clock_timestamp()))' }, + prosrc => 'see system_views.sql' }, { oid => '315', descr => 'Is JIT compilation available in this session?', proname => 'pg_jit_available', provolatile => 'v', prorettype => 'bool', proargtypes => '', prosrc => 'pg_jit_available' }, @@ -7185,7 +7181,7 @@ descr => 'disk space usage for the main fork of the specified table or index', proname => 'pg_relation_size', prolang => 'sql', provolatile => 'v', prorettype => 'int8', proargtypes => 'regclass', - prosrc => 'select pg_catalog.pg_relation_size($1, \'main\')' }, + prosrc => 'see system_views.sql' }, { oid => '2332', descr => 'disk space usage for the specified fork of a table or index', proname => 'pg_relation_size', provolatile => 'v', prorettype => 'int8', @@ -8104,21 +8100,21 @@ # formerly-missing interval + datetime operators { oid => '2546', proname => 'interval_pl_date', prolang => 'sql', prorettype => 'timestamp', - proargtypes => 'interval date', prosrc => 'select $2 + $1' }, + proargtypes => 'interval date', prosrc => 'see system_views.sql' }, { oid => '2547', proname => 'interval_pl_timetz', prolang => 'sql', prorettype => 'timetz', - proargtypes => 'interval timetz', prosrc => 'select $2 + $1' }, + proargtypes => 'interval timetz', prosrc => 'see system_views.sql' }, { oid => '2548', proname => 'interval_pl_timestamp', prolang => 'sql', prorettype => 'timestamp', proargtypes => 'interval timestamp', - prosrc => 'select $2 + $1' }, + prosrc => 'see system_views.sql' }, { oid => '2549', proname => 'interval_pl_timestamptz', prolang => 'sql', provolatile => 's', prorettype => 'timestamptz', proargtypes => 'interval timestamptz', - prosrc => 'select $2 + $1' }, + prosrc => 'see system_views.sql' }, { oid => '2550', proname => 'integer_pl_date', prolang => 'sql', prorettype => 'date', - proargtypes => 'int4 date', prosrc => 'select $2 + $1' }, + proargtypes => 'int4 date', prosrc => 'see system_views.sql' }, { oid => '2556', descr => 'get OIDs of databases in a tablespace', proname => 'pg_tablespace_databases', prorows => '1000', proretset => 't', @@ -8601,8 +8597,7 @@ prosrc => 'xpath' }, { oid => '2932', descr => 'evaluate XPath expression', proname => 'xpath', prolang => 'sql', prorettype => '_xml', - proargtypes => 'text xml', - prosrc => 'select pg_catalog.xpath($1, $2, \'{}\'::pg_catalog.text[])' }, + proargtypes => 'text xml', prosrc => 'see system_views.sql' }, { oid => '2614', descr => 'test XML value against XPath expression', proname => 'xmlexists', prorettype => 'bool', proargtypes => 'text xml', @@ -8614,8 +8609,7 @@ proargtypes => 'text xml _text', prosrc => 'xpath_exists' }, { oid => '3050', descr => 'test XML value against XPath expression', proname => 'xpath_exists', prolang => 'sql', prorettype => 'bool', - proargtypes => 'text xml', - prosrc => 'select pg_catalog.xpath_exists($1, $2, \'{}\'::pg_catalog.text[])' }, + proargtypes => 'text xml', prosrc => 'see system_views.sql' }, { oid => '3051', descr => 'determine if a string is well formed XML', proname => 'xml_is_well_formed', provolatile => 's', prorettype => 'bool', proargtypes => 'text', prosrc => 'xml_is_well_formed' }, @@ -8880,7 +8874,7 @@ proargtypes => 'pg_lsn numeric', prosrc => 'pg_lsn_pli' }, { oid => '5023', proname => 'numeric_pl_pg_lsn', prolang => 'sql', prorettype => 'pg_lsn', - proargtypes => 'numeric pg_lsn', prosrc => 'select $2 + $1' }, + proargtypes => 'numeric pg_lsn', prosrc => 'see system_views.sql' }, { oid => '5024', proname => 'pg_lsn_mii', prorettype => 'pg_lsn', proargtypes => 'pg_lsn numeric', prosrc => 'pg_lsn_mii' }, @@ -9319,6 +9313,23 @@ proname => 'ts_lexize', prorettype => '_text', proargtypes => 'regdictionary text', prosrc => 'ts_lexize' }, +{ oid => '9531', descr => 'debug function for text search configuration', + proname => 'ts_debug', prolang => 'sql', prorows => '1000', proretset => 't', + provolatile => 's', prorettype => 'record', proargtypes => 'regconfig text', + proallargtypes => '{regconfig,text,text,text,text,_regdictionary,regdictionary,_text}', + proargmodes => '{i,i,o,o,o,o,o,o}', + proargnames => '{config,document,alias,description,token,dictionaries,dictionary,lexemes}', + prosrc => 'see system_views.sql' }, + +{ oid => '9532', + descr => 'debug function for current text search configuration', + proname => 'ts_debug', prolang => 'sql', prorows => '1000', proretset => 't', + provolatile => 's', prorettype => 'record', proargtypes => 'text', + proallargtypes => '{text,text,text,text,_regdictionary,regdictionary,_text}', + proargmodes => '{i,o,o,o,o,o,o}', + proargnames => '{document,alias,description,token,dictionaries,dictionary,lexemes}', + prosrc => 'see system_views.sql' }, + { oid => '3725', descr => '(internal)', proname => 'dsimple_init', prorettype => 'internal', proargtypes => 'internal', prosrc => 'dsimple_init' }, From 8a2df442b652f83b1c189822737091b90f343965 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 16 Apr 2021 19:01:22 -0400 Subject: [PATCH 125/671] Update dummy prosrc values. Ooops, forgot to s/system_views.sql/system_functions.sql/g in this part of 767982e36. No need for an additional catversion bump, I think, since these strings are gone by the time initdb finishes. Discussion: https://postgr.es/m/3956760.1618529139@sss.pgh.pa.us --- src/include/catalog/pg_proc.dat | 92 ++++++++++++++++----------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 14aba6e39b7bd..b62abcd22c047 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -2364,7 +2364,7 @@ { oid => '1176', descr => 'convert date and time to timestamp with time zone', proname => 'timestamptz', prolang => 'sql', provolatile => 's', prorettype => 'timestamptz', proargtypes => 'date time', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '1178', descr => 'convert timestamp with time zone to date', proname => 'date', provolatile => 's', prorettype => 'date', proargtypes => 'timestamptz', prosrc => 'timestamptz_date' }, @@ -2417,16 +2417,16 @@ { oid => '1215', descr => 'get description for object id and catalog name', proname => 'obj_description', prolang => 'sql', procost => '100', provolatile => 's', prorettype => 'text', proargtypes => 'oid name', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '1216', descr => 'get description for table column', proname => 'col_description', prolang => 'sql', procost => '100', provolatile => 's', prorettype => 'text', proargtypes => 'oid int4', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '1993', descr => 'get description for object id and shared catalog name', proname => 'shobj_description', prolang => 'sql', procost => '100', provolatile => 's', prorettype => 'text', proargtypes => 'oid name', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '1217', descr => 'truncate timestamp with time zone to specified units', @@ -2601,13 +2601,13 @@ { oid => '1296', proname => 'timedate_pl', prolang => 'sql', prorettype => 'timestamp', - proargtypes => 'time date', prosrc => 'see system_views.sql' }, + proargtypes => 'time date', prosrc => 'see system_functions.sql' }, { oid => '1297', proname => 'datetimetz_pl', prorettype => 'timestamptz', proargtypes => 'date timetz', prosrc => 'datetimetz_timestamptz' }, { oid => '1298', proname => 'timetzdate_pl', prolang => 'sql', prorettype => 'timestamptz', - proargtypes => 'timetz date', prosrc => 'see system_views.sql' }, + proargtypes => 'timetz date', prosrc => 'see system_functions.sql' }, { oid => '1299', descr => 'current transaction time', proname => 'now', provolatile => 's', prorettype => 'timestamptz', proargtypes => '', prosrc => 'now' }, @@ -2651,17 +2651,17 @@ proname => 'overlaps', prolang => 'sql', proisstrict => 'f', provolatile => 's', prorettype => 'bool', proargtypes => 'timestamptz interval timestamptz interval', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '1306', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', provolatile => 's', prorettype => 'bool', proargtypes => 'timestamptz timestamptz timestamptz interval', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '1307', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', provolatile => 's', prorettype => 'bool', proargtypes => 'timestamptz interval timestamptz timestamptz', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '1308', descr => 'intervals overlap?', proname => 'overlaps', proisstrict => 'f', prorettype => 'bool', @@ -2669,15 +2669,15 @@ { oid => '1309', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', prorettype => 'bool', proargtypes => 'time interval time interval', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '1310', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', prorettype => 'bool', proargtypes => 'time time time interval', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '1311', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', prorettype => 'bool', proargtypes => 'time interval time time', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '1312', descr => 'I/O', proname => 'timestamp_in', provolatile => 's', prorettype => 'timestamp', @@ -2758,7 +2758,7 @@ { oid => '1348', descr => 'deprecated, use two-argument form instead', proname => 'obj_description', prolang => 'sql', procost => '100', provolatile => 's', prorettype => 'text', proargtypes => 'oid', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '1349', descr => 'print type names of oidvector field', proname => 'oidvectortypes', provolatile => 's', prorettype => 'text', @@ -2841,7 +2841,7 @@ { oid => '1384', descr => 'extract field from date', proname => 'date_part', prolang => 'sql', prorettype => 'float8', - proargtypes => 'text date', prosrc => 'see system_views.sql' }, + proargtypes => 'text date', prosrc => 'see system_functions.sql' }, { oid => '9979', descr => 'extract field from date', proname => 'extract', prorettype => 'numeric', proargtypes => 'text date', prosrc => 'extract_date' }, @@ -2855,7 +2855,7 @@ descr => 'date difference from today preserving months and years', proname => 'age', prolang => 'sql', provolatile => 's', prorettype => 'interval', proargtypes => 'timestamptz', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '1388', descr => 'convert timestamp with time zone to time with time zone', @@ -2969,7 +2969,7 @@ prosrc => 'box_div' }, { oid => '1426', proname => 'path_contain_pt', prolang => 'sql', prorettype => 'bool', - proargtypes => 'path point', prosrc => 'see system_views.sql' }, + proargtypes => 'path point', prosrc => 'see system_functions.sql' }, { oid => '1428', proname => 'poly_contain_pt', prorettype => 'bool', proargtypes => 'polygon point', prosrc => 'poly_contain_pt' }, @@ -3229,7 +3229,7 @@ prosrc => 'circle_center' }, { oid => '1544', descr => 'convert circle to 12-vertex polygon', proname => 'polygon', prolang => 'sql', prorettype => 'polygon', - proargtypes => 'circle', prosrc => 'see system_views.sql' }, + proargtypes => 'circle', prosrc => 'see system_functions.sql' }, { oid => '1545', descr => 'number of points', proname => 'npoints', prorettype => 'int4', proargtypes => 'path', prosrc => 'path_npoints' }, @@ -3525,10 +3525,10 @@ prosrc => 'translate' }, { oid => '879', descr => 'left-pad string to length', proname => 'lpad', prolang => 'sql', prorettype => 'text', - proargtypes => 'text int4', prosrc => 'see system_views.sql' }, + proargtypes => 'text int4', prosrc => 'see system_functions.sql' }, { oid => '880', descr => 'right-pad string to length', proname => 'rpad', prolang => 'sql', prorettype => 'text', - proargtypes => 'text int4', prosrc => 'see system_views.sql' }, + proargtypes => 'text int4', prosrc => 'see system_functions.sql' }, { oid => '881', descr => 'trim spaces from left end of string', proname => 'ltrim', prorettype => 'text', proargtypes => 'text', prosrc => 'ltrim1' }, @@ -4144,7 +4144,7 @@ prosrc => 'inetpl' }, { oid => '2631', proname => 'int8pl_inet', prolang => 'sql', prorettype => 'inet', - proargtypes => 'int8 inet', prosrc => 'see system_views.sql' }, + proargtypes => 'int8 inet', prosrc => 'see system_functions.sql' }, { oid => '2632', proname => 'inetmi_int8', prorettype => 'inet', proargtypes => 'inet int8', prosrc => 'inetmi_int8' }, @@ -4276,13 +4276,13 @@ prosrc => 'numeric_round' }, { oid => '1708', descr => 'value rounded to \'scale\' of zero', proname => 'round', prolang => 'sql', prorettype => 'numeric', - proargtypes => 'numeric', prosrc => 'see system_views.sql' }, + proargtypes => 'numeric', prosrc => 'see system_functions.sql' }, { oid => '1709', descr => 'value truncated to \'scale\'', proname => 'trunc', prorettype => 'numeric', proargtypes => 'numeric int4', prosrc => 'numeric_trunc' }, { oid => '1710', descr => 'value truncated to \'scale\' of zero', proname => 'trunc', prolang => 'sql', prorettype => 'numeric', - proargtypes => 'numeric', prosrc => 'see system_views.sql' }, + proargtypes => 'numeric', prosrc => 'see system_functions.sql' }, { oid => '1711', descr => 'nearest integer >= value', proname => 'ceil', prorettype => 'numeric', proargtypes => 'numeric', prosrc => 'numeric_ceil' }, @@ -4382,10 +4382,10 @@ proargtypes => 'int4', prosrc => 'int4_numeric' }, { oid => '1741', descr => 'base 10 logarithm', proname => 'log', prolang => 'sql', prorettype => 'numeric', - proargtypes => 'numeric', prosrc => 'see system_views.sql' }, + proargtypes => 'numeric', prosrc => 'see system_functions.sql' }, { oid => '1481', descr => 'base 10 logarithm', proname => 'log10', prolang => 'sql', prorettype => 'numeric', - proargtypes => 'numeric', prosrc => 'see system_views.sql' }, + proargtypes => 'numeric', prosrc => 'see system_functions.sql' }, { oid => '1742', descr => 'convert float4 to numeric', proname => 'numeric', proleakproof => 't', prorettype => 'numeric', proargtypes => 'float4', prosrc => 'float4_numeric' }, @@ -4569,13 +4569,13 @@ { oid => '1810', descr => 'length in bits', proname => 'bit_length', prolang => 'sql', prorettype => 'int4', - proargtypes => 'bytea', prosrc => 'see system_views.sql' }, + proargtypes => 'bytea', prosrc => 'see system_functions.sql' }, { oid => '1811', descr => 'length in bits', proname => 'bit_length', prolang => 'sql', prorettype => 'int4', - proargtypes => 'text', prosrc => 'see system_views.sql' }, + proargtypes => 'text', prosrc => 'see system_functions.sql' }, { oid => '1812', descr => 'length in bits', proname => 'bit_length', prolang => 'sql', prorettype => 'int4', - proargtypes => 'bit', prosrc => 'see system_views.sql' }, + proargtypes => 'bit', prosrc => 'see system_functions.sql' }, # Selectivity estimators for LIKE and related operators { oid => '1814', descr => 'restriction selectivity of ILIKE', @@ -4894,7 +4894,7 @@ { oid => '1848', proname => 'interval_pl_time', prolang => 'sql', prorettype => 'time', - proargtypes => 'interval time', prosrc => 'see system_views.sql' }, + proargtypes => 'interval time', prosrc => 'see system_functions.sql' }, { oid => '1850', proname => 'int28eq', proleakproof => 't', prorettype => 'bool', @@ -5903,15 +5903,15 @@ { oid => '2042', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', prorettype => 'bool', proargtypes => 'timestamp interval timestamp interval', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '2043', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', prorettype => 'bool', proargtypes => 'timestamp timestamp timestamp interval', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '2044', descr => 'intervals overlap?', proname => 'overlaps', prolang => 'sql', proisstrict => 'f', prorettype => 'bool', proargtypes => 'timestamp interval timestamp timestamp', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '2045', descr => 'less-equal-greater', proname => 'timestamp_cmp', proleakproof => 't', prorettype => 'int4', proargtypes => 'timestamp timestamp', prosrc => 'timestamp_cmp' }, @@ -5977,7 +5977,7 @@ descr => 'date difference from today preserving months and years', proname => 'age', prolang => 'sql', provolatile => 's', prorettype => 'interval', proargtypes => 'timestamp', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '2069', descr => 'adjust timestamp to new time zone', proname => 'timezone', prorettype => 'timestamptz', @@ -5997,7 +5997,7 @@ prosrc => 'textregexsubstr' }, { oid => '2074', descr => 'extract text matching SQL regular expression', proname => 'substring', prolang => 'sql', prorettype => 'text', - proargtypes => 'text text text', prosrc => 'see system_views.sql' }, + proargtypes => 'text text text', prosrc => 'see system_functions.sql' }, { oid => '2075', descr => 'convert int8 to bitstring', proname => 'bit', prorettype => 'bit', proargtypes => 'int8 int4', @@ -6362,11 +6362,11 @@ { oid => '3935', descr => 'sleep for the specified interval', proname => 'pg_sleep_for', prolang => 'sql', provolatile => 'v', prorettype => 'void', proargtypes => 'interval', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '3936', descr => 'sleep until the specified time', proname => 'pg_sleep_until', prolang => 'sql', provolatile => 'v', prorettype => 'void', proargtypes => 'timestamptz', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '315', descr => 'Is JIT compilation available in this session?', proname => 'pg_jit_available', provolatile => 'v', prorettype => 'bool', proargtypes => '', prosrc => 'pg_jit_available' }, @@ -7181,7 +7181,7 @@ descr => 'disk space usage for the main fork of the specified table or index', proname => 'pg_relation_size', prolang => 'sql', provolatile => 'v', prorettype => 'int8', proargtypes => 'regclass', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '2332', descr => 'disk space usage for the specified fork of a table or index', proname => 'pg_relation_size', provolatile => 'v', prorettype => 'int8', @@ -8100,21 +8100,21 @@ # formerly-missing interval + datetime operators { oid => '2546', proname => 'interval_pl_date', prolang => 'sql', prorettype => 'timestamp', - proargtypes => 'interval date', prosrc => 'see system_views.sql' }, + proargtypes => 'interval date', prosrc => 'see system_functions.sql' }, { oid => '2547', proname => 'interval_pl_timetz', prolang => 'sql', prorettype => 'timetz', - proargtypes => 'interval timetz', prosrc => 'see system_views.sql' }, + proargtypes => 'interval timetz', prosrc => 'see system_functions.sql' }, { oid => '2548', proname => 'interval_pl_timestamp', prolang => 'sql', prorettype => 'timestamp', proargtypes => 'interval timestamp', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '2549', proname => 'interval_pl_timestamptz', prolang => 'sql', provolatile => 's', prorettype => 'timestamptz', proargtypes => 'interval timestamptz', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '2550', proname => 'integer_pl_date', prolang => 'sql', prorettype => 'date', - proargtypes => 'int4 date', prosrc => 'see system_views.sql' }, + proargtypes => 'int4 date', prosrc => 'see system_functions.sql' }, { oid => '2556', descr => 'get OIDs of databases in a tablespace', proname => 'pg_tablespace_databases', prorows => '1000', proretset => 't', @@ -8597,7 +8597,7 @@ prosrc => 'xpath' }, { oid => '2932', descr => 'evaluate XPath expression', proname => 'xpath', prolang => 'sql', prorettype => '_xml', - proargtypes => 'text xml', prosrc => 'see system_views.sql' }, + proargtypes => 'text xml', prosrc => 'see system_functions.sql' }, { oid => '2614', descr => 'test XML value against XPath expression', proname => 'xmlexists', prorettype => 'bool', proargtypes => 'text xml', @@ -8609,7 +8609,7 @@ proargtypes => 'text xml _text', prosrc => 'xpath_exists' }, { oid => '3050', descr => 'test XML value against XPath expression', proname => 'xpath_exists', prolang => 'sql', prorettype => 'bool', - proargtypes => 'text xml', prosrc => 'see system_views.sql' }, + proargtypes => 'text xml', prosrc => 'see system_functions.sql' }, { oid => '3051', descr => 'determine if a string is well formed XML', proname => 'xml_is_well_formed', provolatile => 's', prorettype => 'bool', proargtypes => 'text', prosrc => 'xml_is_well_formed' }, @@ -8874,7 +8874,7 @@ proargtypes => 'pg_lsn numeric', prosrc => 'pg_lsn_pli' }, { oid => '5023', proname => 'numeric_pl_pg_lsn', prolang => 'sql', prorettype => 'pg_lsn', - proargtypes => 'numeric pg_lsn', prosrc => 'see system_views.sql' }, + proargtypes => 'numeric pg_lsn', prosrc => 'see system_functions.sql' }, { oid => '5024', proname => 'pg_lsn_mii', prorettype => 'pg_lsn', proargtypes => 'pg_lsn numeric', prosrc => 'pg_lsn_mii' }, @@ -9319,7 +9319,7 @@ proallargtypes => '{regconfig,text,text,text,text,_regdictionary,regdictionary,_text}', proargmodes => '{i,i,o,o,o,o,o,o}', proargnames => '{config,document,alias,description,token,dictionaries,dictionary,lexemes}', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '9532', descr => 'debug function for current text search configuration', @@ -9328,7 +9328,7 @@ proallargtypes => '{text,text,text,text,_regdictionary,regdictionary,_text}', proargmodes => '{i,o,o,o,o,o,o}', proargnames => '{document,alias,description,token,dictionaries,dictionary,lexemes}', - prosrc => 'see system_views.sql' }, + prosrc => 'see system_functions.sql' }, { oid => '3725', descr => '(internal)', proname => 'dsimple_init', prorettype => 'internal', From f24b156997059c257c697b825f022d115825091d Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 16 Apr 2021 22:23:46 -0400 Subject: [PATCH 126/671] Rethink extraction of collation dependencies. As it stands, find_expr_references_walker() pays attention to leaf-node collation fields while ignoring the input collations of actual function and operator nodes. That seems exactly backwards from a semantic standpoint, and it leads to reporting dependencies on collations that really have nothing to do with the expression's behavior. Hence, rewrite to look at function input collations instead. This isn't completely perfect either; it fails to account for the behavior of record_eq and its siblings. (The previous coding at least gave an approximation of that, though I think it could be fooled pretty easily into considering the columns of irrelevant composite types.) We may be able to improve on this later, but for now this should satisfy the buildfarm members that didn't like ef387bed8. In passing fix some oversights in GetTypeCollations(), and get rid of its duplicative de-duplications. (I'm worried that it's still potentially O(N^2) or worse, but this makes it a little better.) Discussion: https://postgr.es/m/3564817.1618420687@sss.pgh.pa.us --- src/backend/catalog/dependency.c | 104 +++++++++--------- src/backend/catalog/pg_type.c | 29 +++-- .../regress/expected/collate.icu.utf8.out | 23 +--- src/test/regress/sql/collate.icu.utf8.sql | 2 +- 4 files changed, 72 insertions(+), 86 deletions(-) diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index 8d8e926c21c79..41093ea6aee0d 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -1835,8 +1835,17 @@ recordDependencyOnSingleRelExpr(const ObjectAddress *depender, * the datatype. However we do need a type dependency if there is no such * indirect dependency, as for example in Const and CoerceToDomain nodes. * - * Similarly, we don't need to create dependencies on collations except where - * the collation is being freshly introduced to the expression. + * Collations are handled primarily by recording the inputcollid's of node + * types that have them, as those are the ones that are semantically + * significant during expression evaluation. We also record the collation of + * CollateExpr nodes, since those will be needed to print such nodes even if + * they don't really affect semantics. Collations of leaf nodes such as Vars + * can be ignored on the grounds that if they're not default, they came from + * the referenced object (e.g., a table column), so the dependency on that + * object is enough. (Note: in a post-const-folding expression tree, a + * CollateExpr's collation could have been absorbed into a Const or + * RelabelType node. While ruleutils.c prints such collations for clarity, + * we may ignore them here as they have no semantic effect.) */ static bool find_expr_references_walker(Node *node, @@ -1876,29 +1885,6 @@ find_expr_references_walker(Node *node, /* If it's a plain relation, reference this column */ add_object_address(OCLASS_CLASS, rte->relid, var->varattno, context->addrs); - - /* Top-level collation if valid */ - if (OidIsValid(var->varcollid)) - add_object_address(OCLASS_COLLATION, var->varcollid, 0, - context->addrs); - /* Otherwise, it may be a type with internal collations */ - else if (var->vartype >= FirstNormalObjectId) - { - List *collations; - ListCell *lc; - - collations = GetTypeCollations(var->vartype); - - foreach(lc, collations) - { - Oid coll = lfirst_oid(lc); - - if (OidIsValid(coll)) - add_object_address(OCLASS_COLLATION, - lfirst_oid(lc), 0, - context->addrs); - } - } } /* @@ -1920,15 +1906,6 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_TYPE, con->consttype, 0, context->addrs); - /* - * We must also depend on the constant's collation: it could be - * different from the datatype's, if a CollateExpr was const-folded to - * a simple constant. - */ - if (OidIsValid(con->constcollid)) - add_object_address(OCLASS_COLLATION, con->constcollid, 0, - context->addrs); - /* * If it's a regclass or similar literal referring to an existing * object, add a reference to that object. (Currently, only the @@ -2013,10 +1990,6 @@ find_expr_references_walker(Node *node, /* A parameter must depend on the parameter's datatype */ add_object_address(OCLASS_TYPE, param->paramtype, 0, context->addrs); - /* and its collation, just as for Consts */ - if (OidIsValid(param->paramcollid)) - add_object_address(OCLASS_COLLATION, param->paramcollid, 0, - context->addrs); } else if (IsA(node, FuncExpr)) { @@ -2024,6 +1997,9 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_PROC, funcexpr->funcid, 0, context->addrs); + if (OidIsValid(funcexpr->inputcollid)) + add_object_address(OCLASS_COLLATION, funcexpr->inputcollid, 0, + context->addrs); /* fall through to examine arguments */ } else if (IsA(node, OpExpr)) @@ -2032,6 +2008,9 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_OPERATOR, opexpr->opno, 0, context->addrs); + if (OidIsValid(opexpr->inputcollid)) + add_object_address(OCLASS_COLLATION, opexpr->inputcollid, 0, + context->addrs); /* fall through to examine arguments */ } else if (IsA(node, DistinctExpr)) @@ -2040,6 +2019,9 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_OPERATOR, distinctexpr->opno, 0, context->addrs); + if (OidIsValid(distinctexpr->inputcollid)) + add_object_address(OCLASS_COLLATION, distinctexpr->inputcollid, 0, + context->addrs); /* fall through to examine arguments */ } else if (IsA(node, NullIfExpr)) @@ -2048,6 +2030,9 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_OPERATOR, nullifexpr->opno, 0, context->addrs); + if (OidIsValid(nullifexpr->inputcollid)) + add_object_address(OCLASS_COLLATION, nullifexpr->inputcollid, 0, + context->addrs); /* fall through to examine arguments */ } else if (IsA(node, ScalarArrayOpExpr)) @@ -2056,6 +2041,9 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_OPERATOR, opexpr->opno, 0, context->addrs); + if (OidIsValid(opexpr->inputcollid)) + add_object_address(OCLASS_COLLATION, opexpr->inputcollid, 0, + context->addrs); /* fall through to examine arguments */ } else if (IsA(node, Aggref)) @@ -2064,6 +2052,9 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_PROC, aggref->aggfnoid, 0, context->addrs); + if (OidIsValid(aggref->inputcollid)) + add_object_address(OCLASS_COLLATION, aggref->inputcollid, 0, + context->addrs); /* fall through to examine arguments */ } else if (IsA(node, WindowFunc)) @@ -2072,6 +2063,9 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_PROC, wfunc->winfnoid, 0, context->addrs); + if (OidIsValid(wfunc->inputcollid)) + add_object_address(OCLASS_COLLATION, wfunc->inputcollid, 0, + context->addrs); /* fall through to examine arguments */ } else if (IsA(node, SubscriptingRef)) @@ -2116,10 +2110,6 @@ find_expr_references_walker(Node *node, else add_object_address(OCLASS_TYPE, fselect->resulttype, 0, context->addrs); - /* the collation might not be referenced anywhere else, either */ - if (OidIsValid(fselect->resultcollid)) - add_object_address(OCLASS_COLLATION, fselect->resultcollid, 0, - context->addrs); } else if (IsA(node, FieldStore)) { @@ -2146,10 +2136,6 @@ find_expr_references_walker(Node *node, /* since there is no function dependency, need to depend on type */ add_object_address(OCLASS_TYPE, relab->resulttype, 0, context->addrs); - /* the collation might not be referenced anywhere else, either */ - if (OidIsValid(relab->resultcollid)) - add_object_address(OCLASS_COLLATION, relab->resultcollid, 0, - context->addrs); } else if (IsA(node, CoerceViaIO)) { @@ -2158,10 +2144,6 @@ find_expr_references_walker(Node *node, /* since there is no exposed function, need to depend on type */ add_object_address(OCLASS_TYPE, iocoerce->resulttype, 0, context->addrs); - /* the collation might not be referenced anywhere else, either */ - if (OidIsValid(iocoerce->resultcollid)) - add_object_address(OCLASS_COLLATION, iocoerce->resultcollid, 0, - context->addrs); } else if (IsA(node, ArrayCoerceExpr)) { @@ -2170,10 +2152,6 @@ find_expr_references_walker(Node *node, /* as above, depend on type */ add_object_address(OCLASS_TYPE, acoerce->resulttype, 0, context->addrs); - /* the collation might not be referenced anywhere else, either */ - if (OidIsValid(acoerce->resultcollid)) - add_object_address(OCLASS_COLLATION, acoerce->resultcollid, 0, - context->addrs); /* fall through to examine arguments */ } else if (IsA(node, ConvertRowtypeExpr)) @@ -2213,6 +2191,24 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_OPFAMILY, lfirst_oid(l), 0, context->addrs); } + foreach(l, rcexpr->inputcollids) + { + Oid inputcollid = lfirst_oid(l); + + if (OidIsValid(inputcollid)) + add_object_address(OCLASS_COLLATION, inputcollid, 0, + context->addrs); + } + /* fall through to examine arguments */ + } + else if (IsA(node, MinMaxExpr)) + { + MinMaxExpr *mmexpr = (MinMaxExpr *) node; + + /* minmaxtype will match one of the inputs, so no need to record it */ + if (OidIsValid(mmexpr->inputcollid)) + add_object_address(OCLASS_COLLATION, mmexpr->inputcollid, 0, + context->addrs); /* fall through to examine arguments */ } else if (IsA(node, CoerceToDomain)) diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c index ec5d1224323cf..64f6c7238f7c5 100644 --- a/src/backend/catalog/pg_type.c +++ b/src/backend/catalog/pg_type.c @@ -535,8 +535,12 @@ GetTypeCollations(Oid typeoid) elog(ERROR, "cache lookup failed for type %u", typeoid); typeTup = (Form_pg_type) GETSTRUCT(tuple); + /* + * If the type has a typcollation attribute, report that and we're done. + * Otherwise, it could be a container type that we should recurse into. + */ if (OidIsValid(typeTup->typcollation)) - result = list_append_unique_oid(result, typeTup->typcollation); + result = list_make1_oid(typeTup->typcollation); else if (typeTup->typtype == TYPTYPE_COMPOSITE) { Relation rel = relation_open(typeTup->typrelid, AccessShareLock); @@ -546,6 +550,8 @@ GetTypeCollations(Oid typeoid) { Form_pg_attribute att = TupleDescAttr(desc, i); + if (att->attisdropped) + continue; if (OidIsValid(att->attcollation)) result = list_append_unique_oid(result, att->attcollation); else @@ -558,21 +564,24 @@ GetTypeCollations(Oid typeoid) else if (typeTup->typtype == TYPTYPE_DOMAIN) { Assert(OidIsValid(typeTup->typbasetype)); - - result = list_concat_unique_oid(result, - GetTypeCollations(typeTup->typbasetype)); + result = GetTypeCollations(typeTup->typbasetype); } else if (typeTup->typtype == TYPTYPE_RANGE) { - Oid rangeid = get_range_subtype(typeTup->oid); + Oid rangecoll = get_range_collation(typeTup->oid); - Assert(OidIsValid(rangeid)); + if (OidIsValid(rangecoll)) + result = list_make1_oid(rangecoll); + else + { + Oid rangeid = get_range_subtype(typeTup->oid); - result = list_concat_unique_oid(result, GetTypeCollations(rangeid)); + Assert(OidIsValid(rangeid)); + result = GetTypeCollations(rangeid); + } } - else if (OidIsValid(typeTup->typelem)) - result = list_concat_unique_oid(result, - GetTypeCollations(typeTup->typelem)); + else if (IsTrueArrayType(typeTup)) + result = GetTypeCollations(typeTup->typelem); ReleaseSysCache(tuple); diff --git a/src/test/regress/expected/collate.icu.utf8.out b/src/test/regress/expected/collate.icu.utf8.out index 779405ef320ee..faf99f76b540b 100644 --- a/src/test/regress/expected/collate.icu.utf8.out +++ b/src/test/regress/expected/collate.icu.utf8.out @@ -1958,7 +1958,7 @@ CREATE DOMAIN d_custom AS t_custom; CREATE COLLATION custom ( LOCALE = 'fr-x-icu', PROVIDER = 'icu' ); -CREATE TYPE myrange AS range (subtype = text); +CREATE TYPE myrange AS range (subtype = text, collation = "POSIX"); CREATE TYPE myrange_en_fr_ga AS range(subtype = t_en_fr_ga); CREATE TABLE collate_test ( id integer, @@ -2054,36 +2054,17 @@ ORDER BY 1, 2, 3; icuidx05_d_en_fr_ga_arr | "en-x-icu" | up to date icuidx05_d_en_fr_ga_arr | "fr-x-icu" | up to date icuidx05_d_en_fr_ga_arr | "ga-x-icu" | up to date - icuidx06_d_en_fr_ga | "default" | XXX - icuidx06_d_en_fr_ga | "en-x-icu" | up to date icuidx06_d_en_fr_ga | "fr-x-icu" | up to date - icuidx06_d_en_fr_ga | "ga-x-icu" | up to date - icuidx07_d_en_fr_ga | "default" | XXX - icuidx07_d_en_fr_ga | "en-x-icu" | up to date - icuidx07_d_en_fr_ga | "fr-x-icu" | up to date icuidx07_d_en_fr_ga | "ga-x-icu" | up to date - icuidx08_d_en_fr_ga | "en-x-icu" | up to date - icuidx08_d_en_fr_ga | "fr-x-icu" | up to date - icuidx08_d_en_fr_ga | "ga-x-icu" | up to date - icuidx09_d_en_fr_ga | "en-x-icu" | up to date - icuidx09_d_en_fr_ga | "fr-x-icu" | up to date - icuidx09_d_en_fr_ga | "ga-x-icu" | up to date - icuidx10_d_en_fr_ga_es | "en-x-icu" | up to date icuidx10_d_en_fr_ga_es | "es-x-icu" | up to date - icuidx10_d_en_fr_ga_es | "fr-x-icu" | up to date - icuidx10_d_en_fr_ga_es | "ga-x-icu" | up to date - icuidx11_d_es | "default" | XXX icuidx11_d_es | "es-x-icu" | up to date - icuidx12_custom | "default" | XXX icuidx12_custom | custom | up to date - icuidx13_custom | "default" | XXX icuidx13_custom | custom | up to date - icuidx14_myrange | "default" | XXX icuidx15_myrange_en_fr_ga | "en-x-icu" | up to date icuidx15_myrange_en_fr_ga | "fr-x-icu" | up to date icuidx15_myrange_en_fr_ga | "ga-x-icu" | up to date icuidx17_part | "en-x-icu" | up to date -(57 rows) +(38 rows) -- Validate that REINDEX will update the stored version. UPDATE pg_depend SET refobjversion = 'not a version' diff --git a/src/test/regress/sql/collate.icu.utf8.sql b/src/test/regress/sql/collate.icu.utf8.sql index 7f40c560398ea..4c71f4d249e5f 100644 --- a/src/test/regress/sql/collate.icu.utf8.sql +++ b/src/test/regress/sql/collate.icu.utf8.sql @@ -755,7 +755,7 @@ CREATE COLLATION custom ( LOCALE = 'fr-x-icu', PROVIDER = 'icu' ); -CREATE TYPE myrange AS range (subtype = text); +CREATE TYPE myrange AS range (subtype = text, collation = "POSIX"); CREATE TYPE myrange_en_fr_ga AS range(subtype = t_en_fr_ga); CREATE TABLE collate_test ( From f59b58e2a1b7e4a48dee36cc61966759da0faedd Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sat, 17 Apr 2021 09:40:50 +0200 Subject: [PATCH 127/671] Use correct format placeholder for block numbers Should be %u rather than %d. --- src/backend/access/gist/gistbuild.c | 4 ++-- src/backend/access/heap/vacuumlazy.c | 2 +- src/backend/replication/basebackup.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/access/gist/gistbuild.c b/src/backend/access/gist/gistbuild.c index 1054f6f1f2e34..36edc576a8827 100644 --- a/src/backend/access/gist/gistbuild.c +++ b/src/backend/access/gist/gistbuild.c @@ -1212,7 +1212,7 @@ gistBufferingFindCorrectParent(GISTBuildState *buildstate, * number. */ if (*parentblkno == InvalidBlockNumber) - elog(ERROR, "no parent buffer provided of child %d", childblkno); + elog(ERROR, "no parent buffer provided of child %u", childblkno); parent = *parentblkno; } @@ -1545,7 +1545,7 @@ gistGetParent(GISTBuildState *buildstate, BlockNumber child) HASH_FIND, &found); if (!found) - elog(ERROR, "could not find parent of block %d in lookup table", child); + elog(ERROR, "could not find parent of block %u in lookup table", child); return entry->parentblkno; } diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 9f9ba5d308b3c..e90fc18aa9a75 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -2260,7 +2260,7 @@ static void lazy_vacuum_heap_rel(LVRelState *vacrel) { int tupindex; - int vacuumed_pages; + BlockNumber vacuumed_pages; PGRUsage ru0; Buffer vmbuffer = InvalidBuffer; LVSavedErrInfo saved_err_info; diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index 56cd473f9f319..767eac33e4f7b 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -1676,7 +1676,7 @@ sendFile(const char *readfilename, const char *tarfilename, { ereport(WARNING, (errmsg("could not verify checksum in file \"%s\", block " - "%d: read buffer size %d and page size %d " + "%u: read buffer size %d and page size %d " "differ", readfilename, blkno, (int) cnt, BLCKSZ))); verify_checksum = false; @@ -1749,7 +1749,7 @@ sendFile(const char *readfilename, const char *tarfilename, if (checksum_failures <= 5) ereport(WARNING, (errmsg("checksum verification failed in " - "file \"%s\", block %d: calculated " + "file \"%s\", block %u: calculated " "%X but expected %X", readfilename, blkno, checksum, phdr->pd_checksum))); From f7c09706c14d0858d5a186f3cc769471cba41578 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sat, 17 Apr 2021 14:14:26 +0200 Subject: [PATCH 128/671] doc: Fix up spacing around verbatim DocBook elements --- doc/src/sgml/libpq.sgml | 8 +++---- doc/src/sgml/logicaldecoding.sgml | 40 +++++++++++++++---------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 52622fe4c1ae2..7bcb7504a6e5f 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -5437,18 +5437,18 @@ int PQpipelineSync(PGconn *conn); round-trip to get the results it needs. However, it's often possible to adjust the client design to exchange the required information server-side. Read-modify-write cycles are especially good candidates; for example: - + BEGIN; SELECT x FROM mytable WHERE id = 42 FOR UPDATE; -- result: x=2 -- client adds 1 to x: UPDATE mytable SET x = 3 WHERE id = 42; COMMIT; - + could be much more efficiently done with: - + UPDATE mytable SET x = x + 1 WHERE id = 42; - + diff --git a/doc/src/sgml/logicaldecoding.sgml b/doc/src/sgml/logicaldecoding.sgml index cfd58d530808d..f61bcfcf3c93e 100644 --- a/doc/src/sgml/logicaldecoding.sgml +++ b/doc/src/sgml/logicaldecoding.sgml @@ -830,10 +830,10 @@ typedef bool (*LogicalDecodeFilterPrepareCB) (struct LogicalDecodingContext *ctx check if the plugin has already received this PREPARE in which case it can either error out or skip the remaining changes of the transaction. - - typedef void (*LogicalDecodeBeginPrepareCB) (struct LogicalDecodingContext *ctx, - ReorderBufferTXN *txn); - + +typedef void (*LogicalDecodeBeginPrepareCB) (struct LogicalDecodingContext *ctx, + ReorderBufferTXN *txn); + @@ -847,11 +847,11 @@ typedef bool (*LogicalDecodeFilterPrepareCB) (struct LogicalDecodingContext *ctx rows will have been called before this, if there have been any modified rows. The gid field, which is part of the txn parameter, can be used in this callback. - - typedef void (*LogicalDecodePrepareCB) (struct LogicalDecodingContext *ctx, - ReorderBufferTXN *txn, - XLogRecPtr prepare_lsn); - + +typedef void (*LogicalDecodePrepareCB) (struct LogicalDecodingContext *ctx, + ReorderBufferTXN *txn, + XLogRecPtr prepare_lsn); + @@ -863,11 +863,11 @@ typedef bool (*LogicalDecodeFilterPrepareCB) (struct LogicalDecodingContext *ctx whenever a transaction COMMIT PREPARED has been decoded. The gid field, which is part of the txn parameter, can be used in this callback. - - typedef void (*LogicalDecodeCommitPreparedCB) (struct LogicalDecodingContext *ctx, - ReorderBufferTXN *txn, - XLogRecPtr commit_lsn); - + +typedef void (*LogicalDecodeCommitPreparedCB) (struct LogicalDecodingContext *ctx, + ReorderBufferTXN *txn, + XLogRecPtr commit_lsn); + @@ -885,12 +885,12 @@ typedef bool (*LogicalDecodeFilterPrepareCB) (struct LogicalDecodingContext *ctx it can apply the rollback, otherwise, it can skip the rollback operation. The gid alone is not sufficient because the downstream node can have a prepared transaction with same identifier. - - typedef void (*LogicalDecodeRollbackPreparedCB) (struct LogicalDecodingContext *ctx, - ReorderBufferTXN *txn, - XLogRecPtr prepare_end_lsn, - TimestampTz prepare_time); - + +typedef void (*LogicalDecodeRollbackPreparedCB) (struct LogicalDecodingContext *ctx, + ReorderBufferTXN *txn, + XLogRecPtr prepare_end_lsn, + TimestampTz prepare_time); + From 4ed7f0599a8984d9ed967780a157d9b23d03fbb5 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sun, 18 Apr 2021 16:11:58 +0200 Subject: [PATCH 129/671] Add missing source files to nls.mk --- src/bin/pg_amcheck/nls.mk | 5 ++++- src/bin/scripts/nls.mk | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/bin/pg_amcheck/nls.mk b/src/bin/pg_amcheck/nls.mk index d80595c72efab..121529b1509b4 100644 --- a/src/bin/pg_amcheck/nls.mk +++ b/src/bin/pg_amcheck/nls.mk @@ -2,6 +2,9 @@ CATALOG_NAME = pg_amcheck AVAIL_LANGUAGES = GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \ - pg_amcheck.c + pg_amcheck.c \ + ../../fe_utils/cancel.c \ + ../../fe_utils/connect_utils.c \ + ../../fe_utils/query_utils.c GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) diff --git a/src/bin/scripts/nls.mk b/src/bin/scripts/nls.mk index 7fc716092e73a..a224a3b2c4866 100644 --- a/src/bin/scripts/nls.mk +++ b/src/bin/scripts/nls.mk @@ -9,6 +9,7 @@ GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \ common.c \ ../../fe_utils/parallel_slot.c \ ../../fe_utils/cancel.c ../../fe_utils/print.c \ + ../../fe_utils/connect_utils.c ../../fe_utils/query_utils.c \ ../../common/fe_memutils.c ../../common/username.c GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) simple_prompt yesno_prompt GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) From 8e861eaae86eeaf5589963c9b1c7ce6d4c2acbb5 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Mon, 19 Apr 2021 10:22:31 +1200 Subject: [PATCH 130/671] Explain postmaster's treatment of SIGURG. Add a few words of comment to explain why SIGURG doesn't follow the dummy_handler pattern used for SIGUSR2, since that might otherwise appear to be a bug. Discussion: https://postgr.es/m/4006115.1618577212%40sss.pgh.pa.us --- src/backend/postmaster/postmaster.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 4a3ca78c1b706..b05db5a473503 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -660,6 +660,11 @@ PostmasterMain(int argc, char *argv[]) pqsignal_pm(SIGCHLD, reaper); /* handle child termination */ #ifdef SIGURG + /* + * Ignore SIGURG for now. Child processes may change this (see + * InitializeLatchSupport), but they will not receive any such signals + * until they wait on a latch. + */ pqsignal_pm(SIGURG, SIG_IGN); /* ignored */ #endif From c731f9187b5fd7038b04ba60703d3cace1806366 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 19 Apr 2021 10:15:35 +0900 Subject: [PATCH 131/671] Replace magic constants for seek() calls in perl scripts A couple of tests have been using 0 as magic constant while SEEK_SET can be used instead. This makes the code easier to understand, and more consistent with the changes done in 3c5b068. Per discussion with Andrew Dunstan. Discussion: https://postgr.es/m/YHrc24AgJQ6tQ1q0@paquier.xyz --- contrib/amcheck/t/001_verify_heapam.pl | 3 ++- src/bin/pg_amcheck/t/003_check.pl | 4 +++- src/bin/pg_amcheck/t/004_verify_heapam.pl | 5 +++-- src/bin/pg_basebackup/t/010_pg_basebackup.pl | 7 ++++--- src/bin/pg_checksums/t/002_actions.pl | 4 +++- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/contrib/amcheck/t/001_verify_heapam.pl b/contrib/amcheck/t/001_verify_heapam.pl index 6050feb71215c..bf47c2ed37315 100644 --- a/contrib/amcheck/t/001_verify_heapam.pl +++ b/contrib/amcheck/t/001_verify_heapam.pl @@ -4,6 +4,7 @@ use PostgresNode; use TestLib; +use Fcntl qw(:seek); use Test::More tests => 80; my ($node, $result); @@ -124,7 +125,7 @@ sub corrupt_first_page # Corrupt some line pointers. The values are chosen to hit the # various line-pointer-corruption checks in verify_heapam.c # on both little-endian and big-endian architectures. - seek($fh, 32, 0) + seek($fh, 32, SEEK_SET) or BAIL_OUT("seek failed: $!"); syswrite( $fh, diff --git a/src/bin/pg_amcheck/t/003_check.pl b/src/bin/pg_amcheck/t/003_check.pl index 66dd14e498bf6..2da9631da4a61 100644 --- a/src/bin/pg_amcheck/t/003_check.pl +++ b/src/bin/pg_amcheck/t/003_check.pl @@ -3,6 +3,8 @@ use PostgresNode; use TestLib; + +use Fcntl qw(:seek); use Test::More tests => 63; my ($node, $port, %corrupt_page, %remove_relation); @@ -84,7 +86,7 @@ sub corrupt_first_page # Corrupt some line pointers. The values are chosen to hit the # various line-pointer-corruption checks in verify_heapam.c # on both little-endian and big-endian architectures. - seek($fh, 32, 0) + seek($fh, 32, SEEK_SET) or BAIL_OUT("seek failed: $!"); syswrite( $fh, diff --git a/src/bin/pg_amcheck/t/004_verify_heapam.pl b/src/bin/pg_amcheck/t/004_verify_heapam.pl index 3c1277adf3e1c..b842f7bc6db08 100644 --- a/src/bin/pg_amcheck/t/004_verify_heapam.pl +++ b/src/bin/pg_amcheck/t/004_verify_heapam.pl @@ -4,6 +4,7 @@ use PostgresNode; use TestLib; +use Fcntl qw(:seek); use Test::More; # This regression test demonstrates that the pg_amcheck binary correctly @@ -95,7 +96,7 @@ sub read_tuple { my ($fh, $offset) = @_; my ($buffer, %tup); - seek($fh, $offset, 0) + seek($fh, $offset, SEEK_SET) or BAIL_OUT("seek failed: $!"); defined(sysread($fh, $buffer, HEAPTUPLE_PACK_LENGTH)) or BAIL_OUT("sysread failed: $!"); @@ -172,7 +173,7 @@ sub write_tuple $tup->{c_va_extinfo}, $tup->{c_va_valueid}, $tup->{c_va_toastrelid}); - seek($fh, $offset, 0) + seek($fh, $offset, SEEK_SET) or BAIL_OUT("seek failed: $!"); defined(syswrite($fh, $buffer, HEAPTUPLE_PACK_LENGTH)) or BAIL_OUT("syswrite failed: $!"); diff --git a/src/bin/pg_basebackup/t/010_pg_basebackup.pl b/src/bin/pg_basebackup/t/010_pg_basebackup.pl index 089c9cb851aa8..a9dfe88aaae83 100644 --- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl +++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl @@ -4,6 +4,7 @@ use Config; use File::Basename qw(basename dirname); use File::Path qw(rmtree); +use Fcntl qw(:seek); use PostgresNode; use TestLib; use Test::More tests => 110; @@ -555,7 +556,7 @@ # induce corruption system_or_bail 'pg_ctl', '-D', $pgdata, 'stop'; open $file, '+<', "$pgdata/$file_corrupt1"; -seek($file, $pageheader_size, 0); +seek($file, $pageheader_size, SEEK_SET); syswrite($file, "\0\0\0\0\0\0\0\0\0"); close $file; system_or_bail 'pg_ctl', '-D', $pgdata, 'start'; @@ -574,7 +575,7 @@ for my $i (1 .. 5) { my $offset = $pageheader_size + $i * $block_size; - seek($file, $offset, 0); + seek($file, $offset, SEEK_SET); syswrite($file, "\0\0\0\0\0\0\0\0\0"); } close $file; @@ -591,7 +592,7 @@ # induce corruption in a second file system_or_bail 'pg_ctl', '-D', $pgdata, 'stop'; open $file, '+<', "$pgdata/$file_corrupt2"; -seek($file, $pageheader_size, 0); +seek($file, $pageheader_size, SEEK_SET); syswrite($file, "\0\0\0\0\0\0\0\0\0"); close $file; system_or_bail 'pg_ctl', '-D', $pgdata, 'start'; diff --git a/src/bin/pg_checksums/t/002_actions.pl b/src/bin/pg_checksums/t/002_actions.pl index 8a81f36a067fd..d52bbac5faa97 100644 --- a/src/bin/pg_checksums/t/002_actions.pl +++ b/src/bin/pg_checksums/t/002_actions.pl @@ -5,6 +5,8 @@ use warnings; use PostgresNode; use TestLib; + +use Fcntl qw(:seek); use Test::More tests => 63; @@ -50,7 +52,7 @@ sub check_relation_corruption # Time to create some corruption open my $file, '+<', "$pgdata/$file_corrupted"; - seek($file, $pageheader_size, 0); + seek($file, $pageheader_size, SEEK_SET); syswrite($file, "\0\0\0\0\0\0\0\0\0"); close $file; From 7ef8b52cf079ef3ace4575f7b97c2d6f80463b4f Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 19 Apr 2021 11:32:30 +0900 Subject: [PATCH 132/671] Fix typos and grammar in comments and docs Author: Justin Pryzby Discussion: https://postgr.es/m/20210416070310.GG3315@telsasoft.com --- contrib/amcheck/verify_heapam.c | 2 +- doc/src/sgml/brin.sgml | 6 +++--- doc/src/sgml/ecpg.sgml | 24 ++++++++++----------- src/backend/access/brin/brin.c | 4 ++-- src/backend/access/brin/brin_bloom.c | 2 +- src/backend/access/brin/brin_minmax_multi.c | 6 +++--- src/backend/access/gist/gistbuild.c | 2 +- src/backend/access/index/genam.c | 2 +- src/backend/access/nbtree/nbtpage.c | 4 ++-- src/backend/catalog/pg_type.c | 2 +- src/backend/commands/analyze.c | 2 +- src/backend/executor/nodeIncrementalSort.c | 6 +++--- src/backend/rewrite/rewriteSearchCycle.c | 2 +- src/backend/statistics/dependencies.c | 4 ++-- src/backend/statistics/extended_stats.c | 2 +- src/backend/storage/ipc/procarray.c | 2 +- src/backend/tsearch/spell.c | 2 +- src/backend/utils/activity/backend_status.c | 4 ++-- src/backend/utils/adt/multirangetypes.c | 2 +- src/backend/utils/adt/selfuncs.c | 2 +- src/bin/pg_rewind/pg_rewind.c | 2 +- src/bin/pg_waldump/pg_waldump.c | 2 +- src/common/hmac_openssl.c | 2 +- src/common/pg_lzcompress.c | 2 +- src/interfaces/ecpg/preproc/ecpg.c | 2 +- src/port/bsearch_arg.c | 2 +- 26 files changed, 47 insertions(+), 47 deletions(-) diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c index 9366f45d7461a..9f159eb3dbd8d 100644 --- a/contrib/amcheck/verify_heapam.c +++ b/contrib/amcheck/verify_heapam.c @@ -930,7 +930,7 @@ check_tuple_visibility(HeapCheckContext *ctx) * If xmin_status happens to be XID_IS_CURRENT_XID, then in theory * any such DDL changes ought to be visible to us, so perhaps * we could check anyway in that case. But, for now, let's be - * conservate and treat this like any other uncommitted insert. + * conservative and treat this like any other uncommitted insert. */ return false; } diff --git a/doc/src/sgml/brin.sgml b/doc/src/sgml/brin.sgml index d2f12bb605fbd..ce7c2105755db 100644 --- a/doc/src/sgml/brin.sgml +++ b/doc/src/sgml/brin.sgml @@ -730,7 +730,7 @@ LOG: request for BRIN range summarization for index "brin_wi_idx" page 128 was for . When set to a positive value, each block range is assumed to contain this number of distinct non-null values. When set to a negative value, which must be greater than or - equal to -1, the number of distinct non-null is assumed linear with + equal to -1, the number of distinct non-null values is assumed to grow linearly with the maximum possible number of tuples in the block range (about 290 rows per block). The default value is -0.1, and the minimum number of distinct non-null values is 16. @@ -833,7 +833,7 @@ typedef struct BrinOpcInfo Returns whether all the ScanKey entries are consistent with the given indexed values for a range. The attribute number to use is passed as part of the scan key. - Multiple scan keys for the same attribute may be passed at once, the + Multiple scan keys for the same attribute may be passed at once; the number of entries is determined by the nkeys parameter. @@ -1214,7 +1214,7 @@ typedef struct BrinOpcInfo The minmax-multi operator class is also intended for data types implementing - a totally ordered sets, and may be seen as a simple extension of the minmax + a totally ordered set, and may be seen as a simple extension of the minmax operator class. While minmax operator class summarizes values from each block range into a single contiguous interval, minmax-multi allows summarization into multiple smaller intervals to improve handling of outlier values. diff --git a/doc/src/sgml/ecpg.sgml b/doc/src/sgml/ecpg.sgml index 56f5d9b5db1f9..e67f3e0bf3fa6 100644 --- a/doc/src/sgml/ecpg.sgml +++ b/doc/src/sgml/ecpg.sgml @@ -354,15 +354,15 @@ current=testdb1 (should be testdb1) - The third option is to declare sql identifier linked to + The third option is to declare a SQL identifier linked to the connection, for example: EXEC SQL AT connection-name DECLARE statement-name STATEMENT; EXEC SQL PREPARE statement-name FROM :dyn-string; - Once you link a sql identifier to a connection, you execute a dynamic SQL - without AT clause. Note that this option behaves like preprocessor directives, - therefore the link is enabled only in the file. + Once you link a SQL identifier to a connection, you execute dynamic SQL + without an AT clause. Note that this option behaves like preprocessor + directives, therefore the link is enabled only in the file. Here is an example program using this option: @@ -6911,15 +6911,15 @@ EXEC SQL [ AT connection_name ] DEC Description - DECLARE STATEMENT declares SQL statement identifier. + DECLARE STATEMENT declares a SQL statement identifier. SQL statement identifier can be associated with the connection. - When the identifier is used by dynamic SQL statements, these SQLs are executed - by using the associated connection. - The namespace of the declaration is the precompile unit, and multiple declarations to - the same SQL statement identifier is not allowed. - - Note that if the precompiler run in the Informix compatibility mode and some SQL statement - is declared, "database" can not be used as a cursor name. + When the identifier is used by dynamic SQL statements, the statements + are executed using the associated connection. + The namespace of the declaration is the precompile unit, and multiple + declarations to the same SQL statement identifier are not allowed. + Note that if the precompiler runs in Informix compatibility mode and + some SQL statement is declared, "database" can not be used as a cursor + name. diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c index c320e215082a4..c23ea44866a10 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -596,7 +596,7 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm) * and if we're violating them. In that case we can * terminate early, without invoking the support function. * - * As there may be more keys, we can only detemine + * As there may be more keys, we can only determine * mismatch within this loop. */ if (bdesc->bd_info[attno - 1]->oi_regular_nulls && @@ -636,7 +636,7 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm) /* * Collation from the first key (has to be the same for - * all keys for the same attribue). + * all keys for the same attribute). */ collation = keys[attno - 1][0]->sk_collation; diff --git a/src/backend/access/brin/brin_bloom.c b/src/backend/access/brin/brin_bloom.c index 2214fb4d0ccf9..e83c2b82e15ac 100644 --- a/src/backend/access/brin/brin_bloom.c +++ b/src/backend/access/brin/brin_bloom.c @@ -409,7 +409,7 @@ typedef struct BloomOpaque { /* * XXX At this point we only need a single proc (to compute the hash), but - * let's keep the array just like inclusion and minman opclasses, for + * let's keep the array just like inclusion and minmax opclasses, for * consistency. We may need additional procs in the future. */ FmgrInfo extra_procinfos[BLOOM_MAX_PROCNUMS]; diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c index 4163abef3f03b..5e4b234cc61d7 100644 --- a/src/backend/access/brin/brin_minmax_multi.c +++ b/src/backend/access/brin/brin_minmax_multi.c @@ -248,7 +248,7 @@ typedef struct DistanceValue } DistanceValue; -/* Cache for support and strategy procesures. */ +/* Cache for support and strategy procedures. */ static FmgrInfo *minmax_multi_get_procinfo(BrinDesc *bdesc, uint16 attno, uint16 procnum); @@ -1311,7 +1311,7 @@ compare_distances(const void *a, const void *b) } /* - * Given an array of expanded ranges, compute distance of the gaps betwen + * Given an array of expanded ranges, compute distance of the gaps between * the ranges - for ncranges there are (ncranges-1) gaps. * * We simply call the "distance" function to compute the (max-min) for pairs @@ -1623,7 +1623,7 @@ ensure_free_space_in_buffer(BrinDesc *bdesc, Oid colloid, * * We don't simply check against range->maxvalues again. The deduplication * might have freed very little space (e.g. just one value), forcing us to - * do depuplication very often. In that case it's better to do compaction + * do deduplication very often. In that case it's better to do compaction * and reduce more space. */ if (2 * range->nranges + range->nvalues <= range->maxvalues * MINMAX_BUFFER_LOAD_FACTOR) diff --git a/src/backend/access/gist/gistbuild.c b/src/backend/access/gist/gistbuild.c index 36edc576a8827..f46a42197c979 100644 --- a/src/backend/access/gist/gistbuild.c +++ b/src/backend/access/gist/gistbuild.c @@ -115,7 +115,7 @@ typedef struct /* * In sorted build, we use a stack of these structs, one for each level, - * to hold an in-memory buffer of the righmost page at the level. When the + * to hold an in-memory buffer of the rightmost page at the level. When the * page fills up, it is written out and a new page is allocated. */ typedef struct GistSortedBuildPageState diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c index 1c3e937c61534..0aa26b448b792 100644 --- a/src/backend/access/index/genam.c +++ b/src/backend/access/index/genam.c @@ -633,7 +633,7 @@ systable_endscan(SysScanDesc sysscan) * Currently we do not support non-index-based scans here. (In principle * we could do a heapscan and sort, but the uses are in places that * probably don't need to still work with corrupted catalog indexes.) - * For the moment, therefore, these functions are merely the thinnest of + * For the moment, therefore, these functions are merely the thinest of * wrappers around index_beginscan/index_getnext_slot. The main reason for * their existence is to centralize possible future support of lossy operators * in catalog scans. diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index ef48679cc2eb0..706e16ae949da 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -1398,7 +1398,7 @@ _bt_delitems_delete(Relation rel, Buffer buf, TransactionId latestRemovedXid, * _bt_delitems_delete. These steps must take place before each function's * critical section begins. * - * updatabable and nupdatable are inputs, though note that we will use + * updatable and nupdatable are inputs, though note that we will use * _bt_update_posting() to replace the original itup with a pointer to a final * version in palloc()'d memory. Caller should free the tuples when its done. * @@ -1504,7 +1504,7 @@ _bt_delitems_cmp(const void *a, const void *b) * some extra index tuples that were practically free for tableam to check in * passing (when they actually turn out to be safe to delete). It probably * only makes sense for the tableam to go ahead with these extra checks when - * it is block-orientated (otherwise the checks probably won't be practically + * it is block-oriented (otherwise the checks probably won't be practically * free, which we rely on). The tableam interface requires the tableam side * to handle the problem, though, so this is okay (we as an index AM are free * to make the simplifying assumption that all tableams must be block-based). diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c index 64f6c7238f7c5..dc9d28a32c572 100644 --- a/src/backend/catalog/pg_type.c +++ b/src/backend/catalog/pg_type.c @@ -997,7 +997,7 @@ makeMultirangeTypeName(const char *rangeTypeName, Oid typeNamespace) * makeUniqueTypeName * Generate a unique name for a prospective new type * - * Given a typeName, return a new palloc'ed name by preprending underscores + * Given a typeName, return a new palloc'ed name by prepending underscores * until a non-conflicting name results. * * If tryOriginal, first try with zero underscores. diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index cffcd543029de..8aa329a2a03d6 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -660,7 +660,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params, { /* * Partitioned tables don't have storage, so we don't set any fields in - * their pg_class entries except for relpages, which is necessary for + * their pg_class entries except for reltuples, which is necessary for * auto-analyze to work properly. */ vac_update_relstats(onerel, -1, totalrows, diff --git a/src/backend/executor/nodeIncrementalSort.c b/src/backend/executor/nodeIncrementalSort.c index 459c879f0bbc7..18f246a8233c9 100644 --- a/src/backend/executor/nodeIncrementalSort.c +++ b/src/backend/executor/nodeIncrementalSort.c @@ -661,9 +661,9 @@ ExecIncrementalSort(PlanState *pstate) /* * We're in full sort mode accumulating a minimum number of tuples * and not checking for prefix key equality yet, so we can't - * assume the group pivot tuple will reamin the same -- unless + * assume the group pivot tuple will remain the same -- unless * we're using a minimum group size of 1, in which case the pivot - * is obviously still the pviot. + * is obviously still the pivot. */ if (nTuples != minGroupSize) ExecClearTuple(node->group_pivot); @@ -1162,7 +1162,7 @@ ExecReScanIncrementalSort(IncrementalSortState *node) } /* - * If chgParam of subnode is not null, theni the plan will be re-scanned + * If chgParam of subnode is not null, then the plan will be re-scanned * by the first ExecProcNode. */ if (outerPlan->chgParam == NULL) diff --git a/src/backend/rewrite/rewriteSearchCycle.c b/src/backend/rewrite/rewriteSearchCycle.c index 1a7d66fa6f991..2d0ac378a81e9 100644 --- a/src/backend/rewrite/rewriteSearchCycle.c +++ b/src/backend/rewrite/rewriteSearchCycle.c @@ -59,7 +59,7 @@ * SQL standard actually does it in that more complicated way), but the * internal representation allows us to construct it this way.) * - * With a search caluse + * With a search clause * * SEARCH DEPTH FIRST BY col1, col2 SET sqc * diff --git a/src/backend/statistics/dependencies.c b/src/backend/statistics/dependencies.c index cf8a6d5f68bd5..ba7decb6a4ebd 100644 --- a/src/backend/statistics/dependencies.c +++ b/src/backend/statistics/dependencies.c @@ -972,7 +972,7 @@ find_strongest_dependency(MVDependencies **dependencies, int ndependencies, /* * clauselist_apply_dependencies * Apply the specified functional dependencies to a list of clauses and - * return the estimated selecvitity of the clauses that are compatible + * return the estimated selectivity of the clauses that are compatible * with any of the given dependencies. * * This will estimate all not-already-estimated clauses that are compatible @@ -1450,7 +1450,7 @@ dependencies_clauselist_selectivity(PlannerInfo *root, if (!bms_is_member(listidx, *estimatedclauses)) { /* - * If it's a simple column refrence, just extract the attnum. If + * If it's a simple column reference, just extract the attnum. If * it's an expression, assign a negative attnum as if it was a * system attribute. */ diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index e54e8aa8e0f55..7e11cb9d5f5c0 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -358,7 +358,7 @@ statext_compute_stattarget(int stattarget, int nattrs, VacAttrStats **stats) */ for (i = 0; i < nattrs; i++) { - /* keep the maximmum statistics target */ + /* keep the maximum statistics target */ if (stats[i]->attr->attstattarget > stattarget) stattarget = stats[i]->attr->attstattarget; } diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index bf776286de013..5ff8cab394eda 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -2131,7 +2131,7 @@ GetSnapshotDataReuse(Snapshot snapshot) * older than this are known not running any more. * * And try to advance the bounds of GlobalVis{Shared,Catalog,Data,Temp}Rels - * for the benefit of theGlobalVisTest* family of functions. + * for the benefit of the GlobalVisTest* family of functions. * * Note: this function should probably not be called with an argument that's * not statically allocated (see xip allocation below). diff --git a/src/backend/tsearch/spell.c b/src/backend/tsearch/spell.c index 68160bd5925cd..ebc89604ac207 100644 --- a/src/backend/tsearch/spell.c +++ b/src/backend/tsearch/spell.c @@ -2020,7 +2020,7 @@ NISortAffixes(IspellDict *Conf) (const unsigned char *) Affix->repl, (ptr - 1)->len)) { - /* leave only unique and minimals suffixes */ + /* leave only unique and minimal suffixes */ ptr->affix = Affix->repl; ptr->len = Affix->replen; ptr->issuffix = issuffix; diff --git a/src/backend/utils/activity/backend_status.c b/src/backend/utils/activity/backend_status.c index 6110113e56a68..5c1b2c25ed23d 100644 --- a/src/backend/utils/activity/backend_status.c +++ b/src/backend/utils/activity/backend_status.c @@ -1032,10 +1032,10 @@ pgstat_get_my_queryid(void) if (!MyBEEntry) return 0; - /* There's no need for a look around pgstat_begin_read_activity / + /* There's no need for a lock around pgstat_begin_read_activity / * pgstat_end_read_activity here as it's only called from * pg_stat_get_activity which is already protected, or from the same - * backend which mean that there won't be concurrent write. + * backend which means that there won't be concurrent writes. */ return MyBEEntry->st_queryid; } diff --git a/src/backend/utils/adt/multirangetypes.c b/src/backend/utils/adt/multirangetypes.c index b3964ea27fdd5..7ba6ff9860441 100644 --- a/src/backend/utils/adt/multirangetypes.c +++ b/src/backend/utils/adt/multirangetypes.c @@ -553,7 +553,7 @@ multirange_get_typcache(FunctionCallInfo fcinfo, Oid mltrngtypid) /* - * Estimate size occupied by serialized multirage. + * Estimate size occupied by serialized multirange. */ static Size multirange_size_estimate(TypeCacheEntry *rangetyp, int32 range_count, diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 0963e2701cb7c..3d4304cce7a3c 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -4039,7 +4039,7 @@ estimate_multivariate_ndistinct(PlannerInfo *root, RelOptInfo *rel, /* * Process a simple Var expression, by matching it to keys - * directly. If there's a matchine expression, we'll try + * directly. If there's a matching expression, we'll try * matching it later. */ if (IsA(varinfo->var, Var)) diff --git a/src/bin/pg_rewind/pg_rewind.c b/src/bin/pg_rewind/pg_rewind.c index 9df08ab2b08d9..38e5d23755187 100644 --- a/src/bin/pg_rewind/pg_rewind.c +++ b/src/bin/pg_rewind/pg_rewind.c @@ -605,7 +605,7 @@ perform_rewind(filemap_t *filemap, rewind_source *source, * and the target. But if the source is a standby server, it's possible * that the last common checkpoint is *after* the standby's restartpoint. * That implies that the source server has applied the checkpoint record, - * but hasn't perfomed a corresponding restartpoint yet. Make sure we + * but hasn't performed a corresponding restartpoint yet. Make sure we * start at the restartpoint's redo point in that case. * * Use the old version of the source's control file for this. The server diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c index d4d6bb25a9fbb..4ec273e6d28bc 100644 --- a/src/bin/pg_waldump/pg_waldump.c +++ b/src/bin/pg_waldump/pg_waldump.c @@ -323,7 +323,7 @@ WALDumpCloseSegment(XLogReaderState *state) } /* - * pg_waldump's WAL page rader + * pg_waldump's WAL page reader * * timeline and startptr specifies the LSN, and reads up to endptr. */ diff --git a/src/common/hmac_openssl.c b/src/common/hmac_openssl.c index b5e3065d1a90c..5df06839e015f 100644 --- a/src/common/hmac_openssl.c +++ b/src/common/hmac_openssl.c @@ -34,7 +34,7 @@ /* * In backend, use an allocation in TopMemoryContext to count for resowner - * cleanup handling if necesary. For versions of OpenSSL where HMAC_CTX is + * cleanup handling if necessary. For versions of OpenSSL where HMAC_CTX is * known, just use palloc(). In frontend, use malloc to be able to return * a failure status back to the caller. */ diff --git a/src/common/pg_lzcompress.c b/src/common/pg_lzcompress.c index fdd527f757aba..a30a2c2eb83a7 100644 --- a/src/common/pg_lzcompress.c +++ b/src/common/pg_lzcompress.c @@ -147,7 +147,7 @@ * * For each subsequent entry in the history list, the "good_match" * is lowered by 10%. So the compressor will be more happy with - * short matches the farer it has to go back in the history. + * short matches the further it has to go back in the history. * Another "speed against ratio" preference characteristic of * the algorithm. * diff --git a/src/interfaces/ecpg/preproc/ecpg.c b/src/interfaces/ecpg/preproc/ecpg.c index ee2fa51588806..9d861b428b02c 100644 --- a/src/interfaces/ecpg/preproc/ecpg.c +++ b/src/interfaces/ecpg/preproc/ecpg.c @@ -375,7 +375,7 @@ main(int argc, char *const argv[]) } cur = NULL; - /* remove old delared statements if any are still there */ + /* remove old declared statements if any are still there */ for (list = g_declared_list; list != NULL;) { struct declared_list *this = list; diff --git a/src/port/bsearch_arg.c b/src/port/bsearch_arg.c index 0f1eaeba83bbc..8849bdffd2524 100644 --- a/src/port/bsearch_arg.c +++ b/src/port/bsearch_arg.c @@ -43,7 +43,7 @@ * is odd, moving left simply involves halving lim: e.g., when lim * is 5 we look at item 2, so we change lim to 2 so that we will * look at items 0 & 1. If lim is even, the same applies. If lim - * is odd, moving right again involes halving lim, this time moving + * is odd, moving right again involves halving lim, this time moving * the base up one item past p: e.g., when lim is 5 we change base * to item 3 and make lim 2 so that we will look at items 3 and 4. * If lim is even, however, we have to shrink it by one before From c64dcc7fee5f8a7941a4fd098a969de1f457cc79 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Mon, 19 Apr 2021 09:02:47 +0530 Subject: [PATCH 133/671] Fix test case added by commit f5fc2f5b23. In the new test after resetting the stats, we were not waiting for the stats message to be delivered. Also, we need to decode the results for the new test, otherwise, it will show the old stats. In passing, a. Change docs added by commit f5fc2f5b23 as per suggestion by Justin Pryzby. b. Bump the PGSTAT_FILE_FORMAT_ID as commit f5fc2f5b23 changes the file format of stats. Reported-by: Tom Lane based on buildfarm reports Author: Vignesh C, Justin Pryzby Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de --- contrib/test_decoding/expected/stats.out | 57 ++++++++++++++++-------- contrib/test_decoding/sql/stats.sql | 18 +++++--- doc/src/sgml/monitoring.sgml | 10 ++--- src/include/pgstat.h | 2 +- 4 files changed, 55 insertions(+), 32 deletions(-) diff --git a/contrib/test_decoding/expected/stats.out b/contrib/test_decoding/expected/stats.out index bc8e601eab6b2..86d594ca15ef8 100644 --- a/contrib/test_decoding/expected/stats.out +++ b/contrib/test_decoding/expected/stats.out @@ -51,39 +51,34 @@ BEGIN extract(epoch from clock_timestamp() - start_time); END $$ LANGUAGE plpgsql; --- spilling the xact -BEGIN; -INSERT INTO stats_test SELECT 'serialize-topbig--1:'||g.i FROM generate_series(1, 5000) g(i); -COMMIT; -SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'skip-empty-xacts', '1'); +-- non-spilled xact +INSERT INTO stats_test values(1); +SELECT count(*) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'skip-empty-xacts', '1'); count ------- - 5002 + 3 (1 row) --- Check stats, wait for the stats collector to update. We can't test the --- exact stats count as that can vary if any background transaction (say by --- autovacuum) happens in parallel to the main transaction. -SELECT wait_for_decode_stats(false, true); +SELECT wait_for_decode_stats(false, false); wait_for_decode_stats ----------------------- (1 row) -SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; +SELECT slot_name, spill_txns = 0 AS spill_txns, spill_count = 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; slot_name | spill_txns | spill_count | total_txns | total_bytes -----------------+------------+-------------+------------+------------- regression_slot | t | t | t | t (1 row) --- reset the slot stats, and wait for stats collector to reset +-- reset the slot stats, and wait for stats collector's total txn to reset SELECT pg_stat_reset_replication_slot('regression_slot'); pg_stat_reset_replication_slot -------------------------------- (1 row) -SELECT wait_for_decode_stats(true, true); +SELECT wait_for_decode_stats(true, false); wait_for_decode_stats ----------------------- @@ -95,13 +90,19 @@ SELECT slot_name, spill_txns, spill_count, total_txns, total_bytes FROM pg_stat_ regression_slot | 0 | 0 | 0 | 0 (1 row) --- decode and check stats again. +-- spilling the xact +BEGIN; +INSERT INTO stats_test SELECT 'serialize-topbig--1:'||g.i FROM generate_series(1, 5000) g(i); +COMMIT; SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'skip-empty-xacts', '1'); count ------- 5002 (1 row) +-- Check stats, wait for the stats collector to update. We can't test the +-- exact stats count as that can vary if any background transaction (say by +-- autovacuum) happens in parallel to the main transaction. SELECT wait_for_decode_stats(false, true); wait_for_decode_stats ----------------------- @@ -114,24 +115,42 @@ SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count, regression_slot | t | t | t | t (1 row) +-- reset the slot stats, and wait for stats collector to reset SELECT pg_stat_reset_replication_slot('regression_slot'); pg_stat_reset_replication_slot -------------------------------- (1 row) --- non-spilled xact -INSERT INTO stats_test values(generate_series(1, 10)); -SELECT wait_for_decode_stats(false, false); +SELECT wait_for_decode_stats(true, true); wait_for_decode_stats ----------------------- (1 row) -SELECT slot_name, spill_txns = 0 AS spill_txns, spill_count = 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; +SELECT slot_name, spill_txns, spill_count, total_txns, total_bytes FROM pg_stat_replication_slots; slot_name | spill_txns | spill_count | total_txns | total_bytes -----------------+------------+-------------+------------+------------- - regression_slot | f | f | t | t + regression_slot | 0 | 0 | 0 | 0 +(1 row) + +-- decode and check stats again. +SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'skip-empty-xacts', '1'); + count +------- + 5002 +(1 row) + +SELECT wait_for_decode_stats(false, true); + wait_for_decode_stats +----------------------- + +(1 row) + +SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; + slot_name | spill_txns | spill_count | total_txns | total_bytes +-----------------+------------+-------------+------------+------------- + regression_slot | t | t | t | t (1 row) -- Ensure stats can be repeatedly accessed using the same stats snapshot. See diff --git a/contrib/test_decoding/sql/stats.sql b/contrib/test_decoding/sql/stats.sql index 8c34aeced1de0..03fc27e537f4d 100644 --- a/contrib/test_decoding/sql/stats.sql +++ b/contrib/test_decoding/sql/stats.sql @@ -50,6 +50,17 @@ BEGIN END $$ LANGUAGE plpgsql; +-- non-spilled xact +INSERT INTO stats_test values(1); +SELECT count(*) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'skip-empty-xacts', '1'); +SELECT wait_for_decode_stats(false, false); +SELECT slot_name, spill_txns = 0 AS spill_txns, spill_count = 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; + +-- reset the slot stats, and wait for stats collector's total txn to reset +SELECT pg_stat_reset_replication_slot('regression_slot'); +SELECT wait_for_decode_stats(true, false); +SELECT slot_name, spill_txns, spill_count, total_txns, total_bytes FROM pg_stat_replication_slots; + -- spilling the xact BEGIN; INSERT INTO stats_test SELECT 'serialize-topbig--1:'||g.i FROM generate_series(1, 5000) g(i); @@ -72,13 +83,6 @@ SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, SELECT wait_for_decode_stats(false, true); SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; -SELECT pg_stat_reset_replication_slot('regression_slot'); - --- non-spilled xact -INSERT INTO stats_test values(generate_series(1, 10)); -SELECT wait_for_decode_stats(false, false); -SELECT slot_name, spill_txns = 0 AS spill_txns, spill_count = 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; - -- Ensure stats can be repeatedly accessed using the same stats snapshot. See -- https://postgr.es/m/20210317230447.c7uc4g3vbs4wi32i%40alap3.anarazel.de BEGIN; diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index c44d087508093..5cf083bb7761e 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -2722,9 +2722,9 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i Number of decoded transactions sent to the decoding output plugin for - this slot. This counter is used to maintain the top level transactions, - so the counter is not incremented for subtransactions. Note that this - includes the transactions that are streamed and/or spilled. + this slot. This counts toplevel transactions only, and is not incremented + for subtransactions. Note that this includes the transactions that are + streamed and/or spilled. @@ -2733,10 +2733,10 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i total_bytesbigint - Amount of decoded transactions data sent to the decoding output plugin + Amount of decoded transaction data sent to the decoding output plugin while decoding the changes from WAL for this slot. This can be used to gauge the total amount of data sent during logical decoding. Note that - this includes the data that is streamed and/or spilled. + this includes data that is streamed and/or spilled. diff --git a/src/include/pgstat.h b/src/include/pgstat.h index 2aeb3cded4d71..5c5920b0b5f0d 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -744,7 +744,7 @@ typedef union PgStat_Msg * ------------------------------------------------------------ */ -#define PGSTAT_FILE_FORMAT_ID 0x01A5BCA1 +#define PGSTAT_FILE_FORMAT_ID 0x01A5BCA2 /* ---------- * PgStat_StatDBEntry The collector's data per database From 640b91c3ed24002b34c7226fb51ef9176fb72713 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 19 Apr 2021 10:43:18 +0200 Subject: [PATCH 134/671] Use correct format placeholder for pids Should be signed, not unsigned. --- src/backend/postmaster/autovacuum.c | 2 +- src/backend/postmaster/bgworker.c | 2 +- src/backend/replication/logical/snapbuild.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index a799544738e5b..83c584ddc8cd4 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -1860,7 +1860,7 @@ autovac_balance_cost(void) } if (worker->wi_proc != NULL) - elog(DEBUG2, "autovac_balance_cost(pid=%u db=%u, rel=%u, dobalance=%s cost_limit=%d, cost_limit_base=%d, cost_delay=%g)", + elog(DEBUG2, "autovac_balance_cost(pid=%d db=%u, rel=%u, dobalance=%s cost_limit=%d, cost_limit_base=%d, cost_delay=%g)", worker->wi_proc->pid, worker->wi_dboid, worker->wi_tableoid, worker->wi_dobalance ? "yes" : "no", worker->wi_cost_limit, worker->wi_cost_limit_base, diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c index bbbc09b0b5c15..11fc1b786379f 100644 --- a/src/backend/postmaster/bgworker.c +++ b/src/backend/postmaster/bgworker.c @@ -387,7 +387,7 @@ BackgroundWorkerStateChange(bool allow_new_workers) rw->rw_worker.bgw_notify_pid = slot->worker.bgw_notify_pid; if (!PostmasterMarkPIDForWorkerNotify(rw->rw_worker.bgw_notify_pid)) { - elog(DEBUG1, "worker notification PID %lu is not valid", + elog(DEBUG1, "worker notification PID %ld is not valid", (long) rw->rw_worker.bgw_notify_pid); rw->rw_worker.bgw_notify_pid = 0; } diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c index c5a812511959f..9118e214220ab 100644 --- a/src/backend/replication/logical/snapbuild.c +++ b/src/backend/replication/logical/snapbuild.c @@ -1541,7 +1541,7 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn) elog(DEBUG1, "serializing snapshot to %s", path); /* to make sure only we will write to this tempfile, include pid */ - sprintf(tmppath, "pg_logical/snapshots/%X-%X.snap.%u.tmp", + sprintf(tmppath, "pg_logical/snapshots/%X-%X.snap.%d.tmp", LSN_FORMAT_ARGS(lsn), MyProcPid); /* From 7136bf34f28892362144ae2e350714836a5c0c0c Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Mon, 19 Apr 2021 18:55:31 -0700 Subject: [PATCH 135/671] Document LP_DEAD accounting issues in VACUUM. Document VACUUM's soft assumption that any LP_DEAD items encountered during pruning will become LP_UNUSED items before VACUUM finishes up. This is integral to the accounting used by VACUUM to generate its final report on the table to the stats collector. It also affects how VACUUM determines which heap pages are truncatable. In both cases VACUUM is concerned with the likely contents of the page in the near future, not the current contents of the page. This state of affairs created the false impression that VACUUM's dead tuple accounting had significant difference with similar accounting used during ANALYZE. There were and are no substantive differences, at least when the soft assumption completely works out. This is far clearer now. Also document cases where things don't quite work out for VACUUM's dead tuple accounting. It's possible that a significant number of LP_DEAD items will be left behind by VACUUM, and won't be recorded as remaining dead tuples in VACUUM's statistics collector report. This behavior dates back to commit a96c41fe, which taught VACUUM to run without index and heap vacuuming at the user's request. The failsafe mechanism added to VACUUM more recently by commit 1e55e7d1 takes the same approach to dead tuple accounting. Reported-By: Masahiko Sawada Discussion: https://postgr.es/m/CAH2-Wz=Jmtu18PrsYq3EvvZJGOmZqSO2u3bvKpx9xJa5uhNp=Q@mail.gmail.com --- src/backend/access/heap/vacuumlazy.c | 55 +++++++++++++++++++++------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index e90fc18aa9a75..c3fc12d76c796 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -686,7 +686,16 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, new_min_multi, false); - /* report results to the stats collector, too */ + /* + * Report results to the stats collector, too. + * + * Deliberately avoid telling the stats collector about LP_DEAD items that + * remain in the table due to VACUUM bypassing index and heap vacuuming. + * ANALYZE will consider the remaining LP_DEAD items to be dead tuples. + * It seems like a good idea to err on the side of not vacuuming again too + * soon in cases where the failsafe prevented significant amounts of heap + * vacuuming. + */ pgstat_report_vacuum(RelationGetRelid(rel), rel->rd_rel->relisshared, Max(new_live_tuples, 0), @@ -1334,6 +1343,9 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) */ lazy_scan_prune(vacrel, buf, blkno, page, vistest, &prunestate); + Assert(!prunestate.all_visible || !prunestate.has_lpdead_items); + Assert(!all_visible_according_to_vm || prunestate.all_visible); + /* Remember the location of the last page with nonremovable tuples */ if (prunestate.hastup) vacrel->nonempty_pages = blkno + 1; @@ -1404,7 +1416,6 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) * Handle setting visibility map bit based on what the VM said about * the page before pruning started, and using prunestate */ - Assert(!prunestate.all_visible || !prunestate.has_lpdead_items); if (!all_visible_according_to_vm && prunestate.all_visible) { uint8 flags = VISIBILITYMAP_ALL_VISIBLE; @@ -1786,6 +1797,14 @@ lazy_scan_prune(LVRelState *vacrel, * The logic here is a bit simpler than acquire_sample_rows(), as * VACUUM can't run inside a transaction block, which makes some cases * impossible (e.g. in-progress insert from the same transaction). + * + * We treat LP_DEAD items a little differently, too -- we don't count + * them as dead_tuples at all (we only consider new_dead_tuples). The + * outcome is no different because we assume that any LP_DEAD items we + * encounter here will become LP_UNUSED inside lazy_vacuum_heap_page() + * before we report anything to the stats collector. (Cases where we + * bypass index vacuuming will violate our assumption, but the overall + * impact of that should be negligible.) */ switch (res) { @@ -1901,9 +1920,6 @@ lazy_scan_prune(LVRelState *vacrel, * that will need to be vacuumed in indexes later, or a LP_NORMAL tuple * that remains and needs to be considered for freezing now (LP_UNUSED and * LP_REDIRECT items also remain, but are of no further interest to us). - * - * Add page level counters to caller's counts, and then actually process - * LP_DEAD and LP_NORMAL items. */ vacrel->offnum = InvalidOffsetNumber; @@ -1988,13 +2004,6 @@ lazy_scan_prune(LVRelState *vacrel, } #endif - /* Add page-local counts to whole-VACUUM counts */ - vacrel->tuples_deleted += tuples_deleted; - vacrel->lpdead_items += lpdead_items; - vacrel->new_dead_tuples += new_dead_tuples; - vacrel->num_tuples += num_tuples; - vacrel->live_tuples += live_tuples; - /* * Now save details of the LP_DEAD items from the page in the dead_tuples * array. Also record that page has dead items in per-page prunestate. @@ -2021,6 +2030,13 @@ lazy_scan_prune(LVRelState *vacrel, pgstat_progress_update_param(PROGRESS_VACUUM_NUM_DEAD_TUPLES, dead_tuples->num_tuples); } + + /* Finally, add page-local counts to whole-VACUUM counts */ + vacrel->tuples_deleted += tuples_deleted; + vacrel->lpdead_items += lpdead_items; + vacrel->new_dead_tuples += new_dead_tuples; + vacrel->num_tuples += num_tuples; + vacrel->live_tuples += live_tuples; } /* @@ -2095,6 +2111,14 @@ lazy_vacuum(LVRelState *vacrel, bool onecall) * not exceed 32MB. This limits the risk that we will bypass index * vacuuming again and again until eventually there is a VACUUM whose * dead_tuples space is not CPU cache resident. + * + * We don't take any special steps to remember the LP_DEAD items (such + * as counting them in new_dead_tuples report to the stats collector) + * when the optimization is applied. Though the accounting used in + * analyze.c's acquire_sample_rows() will recognize the same LP_DEAD + * items as dead rows in its own stats collector report, that's okay. + * The discrepancy should be negligible. If this optimization is ever + * expanded to cover more cases then this may need to be reconsidered. */ threshold = (double) vacrel->rel_pages * BYPASS_THRESHOLD_PAGES; do_bypass_optimization = @@ -2146,7 +2170,8 @@ lazy_vacuum(LVRelState *vacrel, bool onecall) } /* - * Forget the now-vacuumed tuples -- just press on + * Forget the LP_DEAD items that we just vacuumed (or just decided to not + * vacuum) */ vacrel->dead_tuples->num_tuples = 0; } @@ -3101,6 +3126,10 @@ lazy_cleanup_one_index(Relation indrel, IndexBulkDeleteResult *istat, * * Also don't attempt it if wraparound failsafe is in effect. It's hard to * predict how long lazy_truncate_heap will take. Don't take any chances. + * There is very little chance of truncation working out when the failsafe is + * in effect in any case. lazy_scan_prune makes the optimistic assumption + * that any LP_DEAD items it encounters will always be LP_UNUSED by the time + * we're called. * * Also don't attempt it if we are doing early pruning/vacuuming, because a * scan which cannot find a truncated heap page cannot determine that the From 8b4b5669cde2b17bd6b5d68f584d97078f3296ac Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Tue, 20 Apr 2021 14:35:16 +0200 Subject: [PATCH 136/671] Fix typo in comment Author: Julien Rouhaud Backpatch-through: 11 Discussion: https://postgr.es/m/20210420121659.odjueyd4rpilorn5@nol --- src/backend/lib/dshash.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/lib/dshash.c b/src/backend/lib/dshash.c index e0c763be3261a..88ca9d62aab9a 100644 --- a/src/backend/lib/dshash.c +++ b/src/backend/lib/dshash.c @@ -375,7 +375,7 @@ dshash_get_hash_table_handle(dshash_table *hash_table) * the caller must take care to ensure that the entry is not left corrupted. * The lock mode is either shared or exclusive depending on 'exclusive'. * - * The caller must not lock a lock already. + * The caller must not hold a lock already. * * Note that the lock held is in fact an LWLock, so interrupts will be held on * return from this function, and not resumed until dshash_release_lock is From 95c3a1956ec9eac686c1b69b033dd79211b72343 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Tue, 20 Apr 2021 10:14:16 -0400 Subject: [PATCH 137/671] Avoid unfortunate IPC::Run path caching in PostgresNode Commit b34ca595ab provided for installation-aware instances of PostgresNode. However, it turns out that IPC::Run works against this by caching the path to a binary and not consulting the path again, even if it has changed. We work around this by calling Postgres binaries with the installed path rather than just a bare name to be looked up in the environment path, if there is an installed path. For the common case where there is no installed path we continue to use the bare command name. Diagnosis and solution from Mark Dilger Discussion: https://postgr.es/m/E8F512F8-B4D6-4514-BA8D-2E671439DA92@enterprisedb.com --- src/test/perl/PostgresNode.pm | 36 ++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index e209ea71632e1..b32223f716433 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -1271,6 +1271,28 @@ sub _get_env return (%inst_env); } +# Private routine to get an installation path qualified command. +# +# IPC::Run maintains a cache, %cmd_cache, mapping commands to paths. Tests +# which use nodes spanning more than one postgres installation path need to +# avoid confusing which installation's binaries get run. Setting $ENV{PATH} is +# insufficient, as IPC::Run does not check to see if the path has changed since +# caching a command. +sub installed_command +{ + my ($self, $cmd) = @_; + + # Nodes using alternate installation locations use their installation's + # bin/ directory explicitly + return join('/', $self->{_install_path}, 'bin', $cmd) + if defined $self->{_install_path}; + + # Nodes implicitly using the default installation location rely on IPC::Run + # to find the right binary, which should not cause %cmd_cache confusion, + # because no nodes with other installation paths do it that way. + return $cmd; +} + =pod =item get_free_port() @@ -1568,7 +1590,8 @@ sub psql } $psql_connstr .= defined $replication ? " replication=$replication" : ""; - my @psql_params = ('psql', '-XAtq', '-d', $psql_connstr, '-f', '-'); + my @psql_params = ($self->installed_command('psql'), + '-XAtq', '-d', $psql_connstr, '-f', '-'); # If the caller wants an array and hasn't passed stdout/stderr # references, allocate temporary ones to capture them so we @@ -1754,7 +1777,7 @@ sub background_psql my $replication = $params{replication}; my @psql_params = ( - 'psql', + $self->installed_command('psql'), '-XAtq', '-d', $self->connstr($dbname) @@ -1831,7 +1854,8 @@ sub interactive_psql local %ENV = $self->_get_env(); - my @psql_params = ('psql', '-XAt', '-d', $self->connstr($dbname)); + my @psql_params = ($self->installed_command('psql'), + '-XAt', '-d', $self->connstr($dbname)); push @psql_params, @{ $params{extra_params} } if defined $params{extra_params}; @@ -2041,7 +2065,8 @@ sub poll_query_until $expected = 't' unless defined($expected); # default value - my $cmd = [ 'psql', '-XAt', '-c', $query, '-d', $self->connstr($dbname) ]; + my $cmd = [ $self->installed_command('psql'), + '-XAt', '-c', $query, '-d', $self->connstr($dbname) ]; my ($stdout, $stderr); my $max_attempts = 180 * 10; my $attempts = 0; @@ -2461,7 +2486,8 @@ sub pg_recvlogical_upto croak 'endpos must be specified' unless defined($endpos); my @cmd = ( - 'pg_recvlogical', '-S', $slot_name, '--dbname', + $self->installed_command('pg_recvlogical'), + '-S', $slot_name, '--dbname', $self->connstr($dbname)); push @cmd, '--endpos', $endpos; push @cmd, '-f', '-', '--no-loop', '--start'; From 375398244168add84a884347625d14581a421e71 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 20 Apr 2021 11:32:02 -0400 Subject: [PATCH 138/671] Fix planner failure in some cases of sorting by an aggregate. An oversight introduced by the incremental-sort patches caused "could not find pathkey item to sort" errors in some situations where a sort key involves an aggregate or window function. The basic problem here is that find_em_expr_usable_for_sorting_rel isn't properly modeling what prepare_sort_from_pathkeys will do later. Rather than hoping we can keep those functions in sync, let's refactor so that they actually share the code for identifying a suitable sort expression. With this refactoring, tlist.c's tlist_member_ignore_relabel is unused. I removed it in HEAD but left it in place in v13, in case any extensions are using it. Per report from Luc Vlaming. Back-patch to v13 where the problem arose. James Coleman and Tom Lane Discussion: https://postgr.es/m/91f3ec99-85a4-fa55-ea74-33f85a5c651f@swarm64.com --- src/backend/optimizer/path/equivclass.c | 255 +++++++++++++++--- src/backend/optimizer/plan/createplan.c | 118 +------- src/backend/optimizer/util/tlist.c | 28 -- src/include/optimizer/paths.h | 8 + src/include/optimizer/tlist.h | 1 - .../regress/expected/incremental_sort.out | 26 ++ src/test/regress/sql/incremental_sort.sql | 7 + 7 files changed, 262 insertions(+), 181 deletions(-) diff --git a/src/backend/optimizer/path/equivclass.c b/src/backend/optimizer/path/equivclass.c index 0188c1e9a1894..6e87fba2aa323 100644 --- a/src/backend/optimizer/path/equivclass.c +++ b/src/backend/optimizer/path/equivclass.c @@ -35,6 +35,7 @@ static EquivalenceMember *add_eq_member(EquivalenceClass *ec, Expr *expr, Relids relids, Relids nullable_relids, bool is_child, Oid datatype); +static bool is_exprlist_member(Expr *node, List *exprs); static void generate_base_implied_equalities_const(PlannerInfo *root, EquivalenceClass *ec); static void generate_base_implied_equalities_no_const(PlannerInfo *root, @@ -769,6 +770,167 @@ get_eclass_for_sort_expr(PlannerInfo *root, return newec; } +/* + * find_ec_member_matching_expr + * Locate an EquivalenceClass member matching the given expr, if any; + * return NULL if no match. + * + * "Matching" is defined as "equal after stripping RelabelTypes". + * This is used for identifying sort expressions, and we need to allow + * binary-compatible relabeling for some cases involving binary-compatible + * sort operators. + * + * Child EC members are ignored unless they belong to given 'relids'. + */ +EquivalenceMember * +find_ec_member_matching_expr(EquivalenceClass *ec, + Expr *expr, + Relids relids) +{ + ListCell *lc; + + /* We ignore binary-compatible relabeling on both ends */ + while (expr && IsA(expr, RelabelType)) + expr = ((RelabelType *) expr)->arg; + + foreach(lc, ec->ec_members) + { + EquivalenceMember *em = (EquivalenceMember *) lfirst(lc); + Expr *emexpr; + + /* + * We shouldn't be trying to sort by an equivalence class that + * contains a constant, so no need to consider such cases any further. + */ + if (em->em_is_const) + continue; + + /* + * Ignore child members unless they belong to the requested rel. + */ + if (em->em_is_child && + !bms_is_subset(em->em_relids, relids)) + continue; + + /* + * Match if same expression (after stripping relabel). + */ + emexpr = em->em_expr; + while (emexpr && IsA(emexpr, RelabelType)) + emexpr = ((RelabelType *) emexpr)->arg; + + if (equal(emexpr, expr)) + return em; + } + + return NULL; +} + +/* + * find_computable_ec_member + * Locate an EquivalenceClass member that can be computed from the + * expressions appearing in "exprs"; return NULL if no match. + * + * "exprs" can be either a list of bare expression trees, or a list of + * TargetEntry nodes. Either way, it should contain Vars and possibly + * Aggrefs and WindowFuncs, which are matched to the corresponding elements + * of the EquivalenceClass's expressions. + * + * Unlike find_ec_member_matching_expr, there's no special provision here + * for binary-compatible relabeling. This is intentional: if we have to + * compute an expression in this way, setrefs.c is going to insist on exact + * matches of Vars to the source tlist. + * + * Child EC members are ignored unless they belong to given 'relids'. + * Also, non-parallel-safe expressions are ignored if 'require_parallel_safe'. + * + * Note: some callers pass root == NULL for notational reasons. This is OK + * when require_parallel_safe is false. + */ +EquivalenceMember * +find_computable_ec_member(PlannerInfo *root, + EquivalenceClass *ec, + List *exprs, + Relids relids, + bool require_parallel_safe) +{ + ListCell *lc; + + foreach(lc, ec->ec_members) + { + EquivalenceMember *em = (EquivalenceMember *) lfirst(lc); + List *exprvars; + ListCell *lc2; + + /* + * We shouldn't be trying to sort by an equivalence class that + * contains a constant, so no need to consider such cases any further. + */ + if (em->em_is_const) + continue; + + /* + * Ignore child members unless they belong to the requested rel. + */ + if (em->em_is_child && + !bms_is_subset(em->em_relids, relids)) + continue; + + /* + * Match if all Vars and quasi-Vars are available in "exprs". + */ + exprvars = pull_var_clause((Node *) em->em_expr, + PVC_INCLUDE_AGGREGATES | + PVC_INCLUDE_WINDOWFUNCS | + PVC_INCLUDE_PLACEHOLDERS); + foreach(lc2, exprvars) + { + if (!is_exprlist_member(lfirst(lc2), exprs)) + break; + } + list_free(exprvars); + if (lc2) + continue; /* we hit a non-available Var */ + + /* + * If requested, reject expressions that are not parallel-safe. We + * check this last because it's a rather expensive test. + */ + if (require_parallel_safe && + !is_parallel_safe(root, (Node *) em->em_expr)) + continue; + + return em; /* found usable expression */ + } + + return NULL; +} + +/* + * is_exprlist_member + * Subroutine for find_computable_ec_member: is "node" in "exprs"? + * + * Per the requirements of that function, "exprs" might or might not have + * TargetEntry superstructure. + */ +static bool +is_exprlist_member(Expr *node, List *exprs) +{ + ListCell *lc; + + foreach(lc, exprs) + { + Expr *expr = (Expr *) lfirst(lc); + + if (expr && IsA(expr, TargetEntry)) + expr = ((TargetEntry *) expr)->expr; + + if (equal(node, expr)) + return true; + } + return false; +} + /* * Find an equivalence class member expression, all of whose Vars, come from * the indicated relation. @@ -799,71 +961,78 @@ find_em_expr_for_rel(EquivalenceClass *ec, RelOptInfo *rel) } /* - * Find an equivalence class member expression that can be safely used to build - * a sort node using the provided relation. The rules are a subset of those - * applied in prepare_sort_from_pathkeys since that function deals with sorts - * that must be delayed until the last stages of query execution, while here - * we only care about proactive sorts. + * Find an equivalence class member expression that can be used to build + * a sort node using the provided relation; return NULL if no candidate. + * + * To succeed, we must find an EC member that prepare_sort_from_pathkeys knows + * how to sort on, given the rel's reltarget as input. There are also a few + * additional constraints based on the fact that the desired sort will be done + * within the scan/join part of the plan. Also, non-parallel-safe expressions + * are ignored if 'require_parallel_safe'. */ Expr * find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec, RelOptInfo *rel, bool require_parallel_safe) { - ListCell *lc_em; + PathTarget *target = rel->reltarget; + EquivalenceMember *em; + ListCell *lc; /* - * If there is more than one equivalence member matching these - * requirements we'll be content to choose any one of them. + * Reject volatile ECs immediately; such sorts must always be postponed. */ - foreach(lc_em, ec->ec_members) - { - EquivalenceMember *em = lfirst(lc_em); - Expr *em_expr = em->em_expr; + if (ec->ec_has_volatile) + return NULL; - /* - * We shouldn't be trying to sort by an equivalence class that - * contains a constant, so no need to consider such cases any further. - */ - if (em->em_is_const) - continue; + /* + * Try to find an EM directly matching some reltarget member. + */ + foreach(lc, target->exprs) + { + Expr *targetexpr = (Expr *) lfirst(lc); - /* - * Any Vars in the equivalence class member need to come from this - * relation. This is a superset of prepare_sort_from_pathkeys ignoring - * child members unless they belong to the rel being sorted. - */ - if (!bms_is_subset(em->em_relids, rel->relids)) + em = find_ec_member_matching_expr(ec, targetexpr, rel->relids); + if (!em) continue; /* - * If requested, reject expressions that are not parallel-safe. + * Reject expressions involving set-returning functions, as those + * can't be computed early either. (Note: this test and the following + * one are effectively checking properties of targetexpr, so there's + * no point in asking whether some other EC member would be better.) */ - if (require_parallel_safe && !is_parallel_safe(root, (Node *) em_expr)) + if (IS_SRF_CALL((Node *) em->em_expr)) continue; /* - * Disallow SRFs so that all of them can be evaluated at the correct - * time as determined by make_sort_input_target. + * If requested, reject expressions that are not parallel-safe. We + * check this last because it's a rather expensive test. */ - if (IS_SRF_CALL((Node *) em_expr)) + if (require_parallel_safe && + !is_parallel_safe(root, (Node *) em->em_expr)) continue; - /* - * As long as the expression isn't volatile then - * prepare_sort_from_pathkeys is able to generate a new target entry, - * so there's no need to verify that one already exists. - * - * While prepare_sort_from_pathkeys has to be concerned about matching - * up a volatile expression to the proper tlist entry, it doesn't seem - * valuable here to expend the work trying to find a match in the - * target's exprs since such a sort will have to be postponed anyway. - */ - if (!ec->ec_has_volatile) - return em->em_expr; + return em->em_expr; } - /* We didn't find any suitable equivalence class expression */ - return NULL; + /* + * Try to find a expression computable from the reltarget. + */ + em = find_computable_ec_member(root, ec, target->exprs, rel->relids, + require_parallel_safe); + if (!em) + return NULL; + + /* + * Reject expressions involving set-returning functions, as those can't be + * computed early either. (There's no point in looking for another EC + * member in this case; since SRFs can't appear in WHERE, they cannot + * belong to multi-member ECs.) + */ + if (IS_SRF_CALL((Node *) em->em_expr)) + return NULL; + + return em->em_expr; } /* diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 22f10fa339b83..a9aff24831470 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -269,9 +269,6 @@ static Plan *prepare_sort_from_pathkeys(Plan *lefttree, List *pathkeys, Oid **p_sortOperators, Oid **p_collations, bool **p_nullsFirst); -static EquivalenceMember *find_ec_member_for_tle(EquivalenceClass *ec, - TargetEntry *tle, - Relids relids); static Sort *make_sort_from_pathkeys(Plan *lefttree, List *pathkeys, Relids relids); static IncrementalSort *make_incrementalsort_from_pathkeys(Plan *lefttree, @@ -2110,7 +2107,7 @@ create_sort_plan(PlannerInfo *root, SortPath *best_path, int flags) flags | CP_SMALL_TLIST); /* - * make_sort_from_pathkeys() indirectly calls find_ec_member_for_tle(), + * make_sort_from_pathkeys indirectly calls find_ec_member_matching_expr, * which will ignore any child EC members that don't belong to the given * relids. Thus, if this sort path is based on a child relation, we must * pass its relids. @@ -6017,9 +6014,6 @@ make_incrementalsort(Plan *lefttree, int numCols, int nPresortedCols, * * Returns the node which is to be the input to the Sort (either lefttree, * or a Result stacked atop lefttree). - * - * Note: Restrictions on what expressions are safely sortable may also need to - * be added to find_em_expr_usable_for_sorting_rel. */ static Plan * prepare_sort_from_pathkeys(Plan *lefttree, List *pathkeys, @@ -6089,7 +6083,7 @@ prepare_sort_from_pathkeys(Plan *lefttree, List *pathkeys, tle = get_tle_by_resno(tlist, reqColIdx[numsortkeys]); if (tle) { - em = find_ec_member_for_tle(ec, tle, relids); + em = find_ec_member_matching_expr(ec, tle->expr, relids); if (em) { /* found expr at right place in tlist */ @@ -6120,7 +6114,7 @@ prepare_sort_from_pathkeys(Plan *lefttree, List *pathkeys, foreach(j, tlist) { tle = (TargetEntry *) lfirst(j); - em = find_ec_member_for_tle(ec, tle, relids); + em = find_ec_member_matching_expr(ec, tle->expr, relids); if (em) { /* found expr already in tlist */ @@ -6134,56 +6128,12 @@ prepare_sort_from_pathkeys(Plan *lefttree, List *pathkeys, if (!tle) { /* - * No matching tlist item; look for a computable expression. Note - * that we treat Aggrefs as if they were variables; this is - * necessary when attempting to sort the output from an Agg node - * for use in a WindowFunc (since grouping_planner will have - * treated the Aggrefs as variables, too). Likewise, if we find a - * WindowFunc in a sort expression, treat it as a variable. + * No matching tlist item; look for a computable expression. */ - Expr *sortexpr = NULL; - - foreach(j, ec->ec_members) - { - EquivalenceMember *em = (EquivalenceMember *) lfirst(j); - List *exprvars; - ListCell *k; - - /* - * We shouldn't be trying to sort by an equivalence class that - * contains a constant, so no need to consider such cases any - * further. - */ - if (em->em_is_const) - continue; - - /* - * Ignore child members unless they belong to the rel being - * sorted. - */ - if (em->em_is_child && - !bms_is_subset(em->em_relids, relids)) - continue; - - sortexpr = em->em_expr; - exprvars = pull_var_clause((Node *) sortexpr, - PVC_INCLUDE_AGGREGATES | - PVC_INCLUDE_WINDOWFUNCS | - PVC_INCLUDE_PLACEHOLDERS); - foreach(k, exprvars) - { - if (!tlist_member_ignore_relabel(lfirst(k), tlist)) - break; - } - list_free(exprvars); - if (!k) - { - pk_datatype = em->em_datatype; - break; /* found usable expression */ - } - } - if (!j) + em = find_computable_ec_member(NULL, ec, tlist, relids, false); + if (!em) elog(ERROR, "could not find pathkey item to sort"); + pk_datatype = em->em_datatype; /* * Do we need to insert a Result node? @@ -6203,7 +6153,7 @@ prepare_sort_from_pathkeys(Plan *lefttree, List *pathkeys, /* * Add resjunk entry to input's tlist */ - tle = makeTargetEntry(sortexpr, + tle = makeTargetEntry(copyObject(em->em_expr), list_length(tlist) + 1, NULL, true); @@ -6242,56 +6192,6 @@ prepare_sort_from_pathkeys(Plan *lefttree, List *pathkeys, return lefttree; } -/* - * find_ec_member_for_tle - * Locate an EquivalenceClass member matching the given TLE, if any - * - * Child EC members are ignored unless they belong to given 'relids'. - */ -static EquivalenceMember * -find_ec_member_for_tle(EquivalenceClass *ec, - TargetEntry *tle, - Relids relids) -{ - Expr *tlexpr; - ListCell *lc; - - /* We ignore binary-compatible relabeling on both ends */ - tlexpr = tle->expr; - while (tlexpr && IsA(tlexpr, RelabelType)) - tlexpr = ((RelabelType *) tlexpr)->arg; - - foreach(lc, ec->ec_members) - { - EquivalenceMember *em = (EquivalenceMember *) lfirst(lc); - Expr *emexpr; - - /* - * We shouldn't be trying to sort by an equivalence class that - * contains a constant, so no need to consider such cases any further. - */ - if (em->em_is_const) - continue; - - /* - * Ignore child members unless they belong to the rel being sorted. - */ - if (em->em_is_child && - !bms_is_subset(em->em_relids, relids)) - continue; - - /* Match if same expression (after stripping relabel) */ - emexpr = em->em_expr; - while (emexpr && IsA(emexpr, RelabelType)) - emexpr = ((RelabelType *) emexpr)->arg; - - if (equal(emexpr, tlexpr)) - return em; - } - - return NULL; -} - /* * make_sort_from_pathkeys * Create sort plan to sort according to given pathkeys @@ -6753,7 +6653,7 @@ make_unique_from_pathkeys(Plan *lefttree, List *pathkeys, int numCols) foreach(j, plan->targetlist) { tle = (TargetEntry *) lfirst(j); - em = find_ec_member_for_tle(ec, tle, NULL); + em = find_ec_member_matching_expr(ec, tle->expr, NULL); if (em) { /* found expr already in tlist */ diff --git a/src/backend/optimizer/util/tlist.c b/src/backend/optimizer/util/tlist.c index 8a26288070d48..311579d059051 100644 --- a/src/backend/optimizer/util/tlist.c +++ b/src/backend/optimizer/util/tlist.c @@ -79,34 +79,6 @@ tlist_member(Expr *node, List *targetlist) return NULL; } -/* - * tlist_member_ignore_relabel - * Same as above, except that we ignore top-level RelabelType nodes - * while checking for a match. This is needed for some scenarios - * involving binary-compatible sort operations. - */ -TargetEntry * -tlist_member_ignore_relabel(Expr *node, List *targetlist) -{ - ListCell *temp; - - while (node && IsA(node, RelabelType)) - node = ((RelabelType *) node)->arg; - - foreach(temp, targetlist) - { - TargetEntry *tlentry = (TargetEntry *) lfirst(temp); - Expr *tlexpr = tlentry->expr; - - while (tlexpr && IsA(tlexpr, RelabelType)) - tlexpr = ((RelabelType *) tlexpr)->arg; - - if (equal(node, tlexpr)) - return tlentry; - } - return NULL; -} - /* * tlist_member_match_var * Same as above, except that we match the provided Var on the basis diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h index 035d3e1206984..888e85ff5b3fa 100644 --- a/src/include/optimizer/paths.h +++ b/src/include/optimizer/paths.h @@ -135,6 +135,14 @@ extern EquivalenceClass *get_eclass_for_sort_expr(PlannerInfo *root, Index sortref, Relids rel, bool create_it); +extern EquivalenceMember *find_ec_member_matching_expr(EquivalenceClass *ec, + Expr *expr, + Relids relids); +extern EquivalenceMember *find_computable_ec_member(PlannerInfo *root, + EquivalenceClass *ec, + List *exprs, + Relids relids, + bool require_parallel_safe); extern Expr *find_em_expr_for_rel(EquivalenceClass *ec, RelOptInfo *rel); extern Expr *find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec, diff --git a/src/include/optimizer/tlist.h b/src/include/optimizer/tlist.h index e081ef2d5e439..d62a09665a4e8 100644 --- a/src/include/optimizer/tlist.h +++ b/src/include/optimizer/tlist.h @@ -18,7 +18,6 @@ extern TargetEntry *tlist_member(Expr *node, List *targetlist); -extern TargetEntry *tlist_member_ignore_relabel(Expr *node, List *targetlist); extern List *add_to_flat_tlist(List *tlist, List *exprs); diff --git a/src/test/regress/expected/incremental_sort.out b/src/test/regress/expected/incremental_sort.out index a417b566d95ab..545e301e48272 100644 --- a/src/test/regress/expected/incremental_sort.out +++ b/src/test/regress/expected/incremental_sort.out @@ -1579,6 +1579,32 @@ order by 1, 2; -> Function Scan on generate_series (7 rows) +-- Parallel sort with an aggregate that can be safely generated in parallel, +-- but we can't sort by partial aggregate values. +explain (costs off) select count(*) +from tenk1 t1 +join tenk1 t2 on t1.unique1 = t2.unique2 +join tenk1 t3 on t2.unique1 = t3.unique1 +order by count(*); + QUERY PLAN +----------------------------------------------------------------------------------------------- + Sort + Sort Key: (count(*)) + -> Finalize Aggregate + -> Gather + Workers Planned: 2 + -> Partial Aggregate + -> Parallel Hash Join + Hash Cond: (t2.unique1 = t3.unique1) + -> Parallel Hash Join + Hash Cond: (t1.unique1 = t2.unique2) + -> Parallel Index Only Scan using tenk1_unique1 on tenk1 t1 + -> Parallel Hash + -> Parallel Index Scan using tenk1_unique2 on tenk1 t2 + -> Parallel Hash + -> Parallel Index Only Scan using tenk1_unique1 on tenk1 t3 +(15 rows) + -- Parallel sort but with expression (correlated subquery) that -- is prohibited in parallel plans. explain (costs off) select distinct diff --git a/src/test/regress/sql/incremental_sort.sql b/src/test/regress/sql/incremental_sort.sql index 81429164d45df..d8768a6b54d78 100644 --- a/src/test/regress/sql/incremental_sort.sql +++ b/src/test/regress/sql/incremental_sort.sql @@ -257,6 +257,13 @@ from tenk1, lateral (select tenk1.unique1 from generate_series(1, 1000)) as sub; explain (costs off) select sub.unique1, md5(stringu1) from tenk1, lateral (select tenk1.unique1 from generate_series(1, 1000)) as sub order by 1, 2; +-- Parallel sort with an aggregate that can be safely generated in parallel, +-- but we can't sort by partial aggregate values. +explain (costs off) select count(*) +from tenk1 t1 +join tenk1 t2 on t1.unique1 = t2.unique2 +join tenk1 t3 on t2.unique1 = t3.unique1 +order by count(*); -- Parallel sort but with expression (correlated subquery) that -- is prohibited in parallel plans. explain (costs off) select distinct From 7645376774c8532159f5f0f905e5e734d4ccbb18 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 20 Apr 2021 11:37:36 -0400 Subject: [PATCH 139/671] Rename find_em_expr_usable_for_sorting_rel. I didn't particularly like this function name, as it fails to express what's going on. Also, returning the sort expression alone isn't too helpful --- typically, a caller would also need some other fields of the EquivalenceMember. But the sole caller really only needs a bool result, so let's make it "bool relation_can_be_sorted_early()". Discussion: https://postgr.es/m/91f3ec99-85a4-fa55-ea74-33f85a5c651f@swarm64.com --- src/backend/optimizer/path/allpaths.c | 21 +++++++++---------- src/backend/optimizer/path/equivclass.c | 27 ++++++++++++++----------- src/include/optimizer/paths.h | 7 +++---- 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index edba5e49a8526..30728be85af20 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -2697,20 +2697,19 @@ get_useful_pathkeys_for_relation(PlannerInfo *root, RelOptInfo *rel, EquivalenceClass *pathkey_ec = pathkey->pk_eclass; /* - * We can only build a sort for pathkeys which contain an EC - * member in the current relation's target, so ignore any suffix - * of the list as soon as we find a pathkey without an EC member - * in the relation. + * We can only build a sort for pathkeys that contain a + * safe-to-compute-early EC member computable from the current + * relation's reltarget, so ignore the remainder of the list as + * soon as we find a pathkey without such a member. * - * By still returning the prefix of the pathkeys list that does - * meet criteria of EC membership in the current relation, we - * enable not just an incremental sort on the entirety of - * query_pathkeys but also incremental sort below a JOIN. + * It's still worthwhile to return any prefix of the pathkeys list + * that meets this requirement, as we may be able to do an + * incremental sort. * - * If requested, ensure the expression is parallel safe too. + * If requested, ensure the sort expression is parallel-safe too. */ - if (!find_em_expr_usable_for_sorting_rel(root, pathkey_ec, rel, - require_parallel_safe)) + if (!relation_can_be_sorted_early(root, rel, pathkey_ec, + require_parallel_safe)) break; npathkeys++; diff --git a/src/backend/optimizer/path/equivclass.c b/src/backend/optimizer/path/equivclass.c index 6e87fba2aa323..6f1abbe47d64f 100644 --- a/src/backend/optimizer/path/equivclass.c +++ b/src/backend/optimizer/path/equivclass.c @@ -961,18 +961,21 @@ find_em_expr_for_rel(EquivalenceClass *ec, RelOptInfo *rel) } /* - * Find an equivalence class member expression that can be used to build - * a sort node using the provided relation; return NULL if no candidate. + * relation_can_be_sorted_early + * Can this relation be sorted on this EC before the final output step? * * To succeed, we must find an EC member that prepare_sort_from_pathkeys knows * how to sort on, given the rel's reltarget as input. There are also a few * additional constraints based on the fact that the desired sort will be done - * within the scan/join part of the plan. Also, non-parallel-safe expressions - * are ignored if 'require_parallel_safe'. + * "early", within the scan/join part of the plan. Also, non-parallel-safe + * expressions are ignored if 'require_parallel_safe'. + * + * At some point we might want to return the identified EquivalenceMember, + * but for now, callers only want to know if there is one. */ -Expr * -find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec, - RelOptInfo *rel, bool require_parallel_safe) +bool +relation_can_be_sorted_early(PlannerInfo *root, RelOptInfo *rel, + EquivalenceClass *ec, bool require_parallel_safe) { PathTarget *target = rel->reltarget; EquivalenceMember *em; @@ -982,7 +985,7 @@ find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec, * Reject volatile ECs immediately; such sorts must always be postponed. */ if (ec->ec_has_volatile) - return NULL; + return false; /* * Try to find an EM directly matching some reltarget member. @@ -1012,7 +1015,7 @@ find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec, !is_parallel_safe(root, (Node *) em->em_expr)) continue; - return em->em_expr; + return true; } /* @@ -1021,7 +1024,7 @@ find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec, em = find_computable_ec_member(root, ec, target->exprs, rel->relids, require_parallel_safe); if (!em) - return NULL; + return false; /* * Reject expressions involving set-returning functions, as those can't be @@ -1030,9 +1033,9 @@ find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec, * belong to multi-member ECs.) */ if (IS_SRF_CALL((Node *) em->em_expr)) - return NULL; + return false; - return em->em_expr; + return true; } /* diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h index 888e85ff5b3fa..f1d111063c24b 100644 --- a/src/include/optimizer/paths.h +++ b/src/include/optimizer/paths.h @@ -144,10 +144,9 @@ extern EquivalenceMember *find_computable_ec_member(PlannerInfo *root, Relids relids, bool require_parallel_safe); extern Expr *find_em_expr_for_rel(EquivalenceClass *ec, RelOptInfo *rel); -extern Expr *find_em_expr_usable_for_sorting_rel(PlannerInfo *root, - EquivalenceClass *ec, - RelOptInfo *rel, - bool require_parallel_safe); +extern bool relation_can_be_sorted_early(PlannerInfo *root, RelOptInfo *rel, + EquivalenceClass *ec, + bool require_parallel_safe); extern void generate_base_implied_equalities(PlannerInfo *root); extern List *generate_join_implied_equalities(PlannerInfo *root, Relids join_relids, From 9660834dd8bf5b093f7b49eef846666201d45a35 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 20 Apr 2021 12:22:26 -0400 Subject: [PATCH 140/671] adjust query id feature to use pg_stat_activity.query_id MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, it was pg_stat_activity.queryid to match the pg_stat_statements queryid column. This is an adjustment to patch 4f0b0966c8. This also adjusts some of the internal function calls to match. Catversion bumped. Reported-by: Álvaro Herrera, Julien Rouhaud Discussion: https://postgr.es/m/20210408032704.GA7498@alvherre.pgsql --- doc/src/sgml/monitoring.sgml | 2 +- src/backend/catalog/system_views.sql | 2 +- src/backend/executor/execMain.c | 8 ++++---- src/backend/executor/execParallel.c | 2 +- src/backend/parser/analyze.c | 4 ++-- src/backend/tcop/postgres.c | 4 ++-- src/backend/utils/activity/backend_status.c | 22 ++++++++++----------- src/backend/utils/adt/pgstatfuncs.c | 4 ++-- src/backend/utils/error/elog.c | 6 +++--- src/backend/utils/misc/queryjumble.c | 6 +++--- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_proc.dat | 2 +- src/include/utils/backend_status.h | 6 +++--- src/test/regress/expected/rules.out | 10 +++++----- 14 files changed, 40 insertions(+), 40 deletions(-) diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 5cf083bb7761e..886e626be802e 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -919,7 +919,7 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser - queryid bigint + query_id bigint Identifier of this backend's most recent query. If diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index e96dd732805a3..70e578894f5a0 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -833,7 +833,7 @@ CREATE VIEW pg_stat_activity AS S.state, S.backend_xid, s.backend_xmin, - S.queryid, + S.query_id, S.query, S.backend_type FROM pg_stat_get_activity(NULL) AS S diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 2cf6dad768581..8638bd3dd96b6 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -131,11 +131,11 @@ ExecutorStart(QueryDesc *queryDesc, int eflags) { /* * In some cases (e.g. an EXECUTE statement) a query execution will skip - * parse analysis, which means that the queryid won't be reported. Note - * that it's harmless to report the queryid multiple time, as the call will - * be ignored if the top level queryid has already been reported. + * parse analysis, which means that the query_id won't be reported. Note + * that it's harmless to report the query_id multiple time, as the call will + * be ignored if the top level query_id has already been reported. */ - pgstat_report_queryid(queryDesc->plannedstmt->queryId, false); + pgstat_report_query_id(queryDesc->plannedstmt->queryId, false); if (ExecutorStart_hook) (*ExecutorStart_hook) (queryDesc, eflags); diff --git a/src/backend/executor/execParallel.c b/src/backend/executor/execParallel.c index 5dab1e36b9bed..12c41d746b25b 100644 --- a/src/backend/executor/execParallel.c +++ b/src/backend/executor/execParallel.c @@ -175,7 +175,7 @@ ExecSerializePlan(Plan *plan, EState *estate) */ pstmt = makeNode(PlannedStmt); pstmt->commandType = CMD_SELECT; - pstmt->queryId = pgstat_get_my_queryid(); + pstmt->queryId = pgstat_get_my_query_id(); pstmt->hasReturning = false; pstmt->hasModifyingCTE = false; pstmt->canSetTag = true; diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 862f18a92f270..e415bc3df0fe3 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -132,7 +132,7 @@ parse_analyze(RawStmt *parseTree, const char *sourceText, free_parsestate(pstate); - pgstat_report_queryid(query->queryId, false); + pgstat_report_query_id(query->queryId, false); return query; } @@ -171,7 +171,7 @@ parse_analyze_varparams(RawStmt *parseTree, const char *sourceText, free_parsestate(pstate); - pgstat_report_queryid(query->queryId, false); + pgstat_report_query_id(query->queryId, false); return query; } diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 825fd55107af9..1216a2b397bd9 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -694,7 +694,7 @@ pg_analyze_and_rewrite_params(RawStmt *parsetree, free_parsestate(pstate); - pgstat_report_queryid(query->queryId, false); + pgstat_report_query_id(query->queryId, false); if (log_parser_stats) ShowUsage("PARSE ANALYSIS STATISTICS"); @@ -1031,7 +1031,7 @@ exec_simple_query(const char *query_string) DestReceiver *receiver; int16 format; - pgstat_report_queryid(0, true); + pgstat_report_query_id(0, true); /* * Get the command name for use in status display (it also becomes the diff --git a/src/backend/utils/activity/backend_status.c b/src/backend/utils/activity/backend_status.c index 5c1b2c25ed23d..787f062f9c3d4 100644 --- a/src/backend/utils/activity/backend_status.c +++ b/src/backend/utils/activity/backend_status.c @@ -544,7 +544,7 @@ pgstat_report_activity(BackendState state, const char *cmd_str) beentry->st_activity_start_timestamp = 0; /* st_xact_start_timestamp and wait_event_info are also disabled */ beentry->st_xact_start_timestamp = 0; - beentry->st_queryid = UINT64CONST(0); + beentry->st_query_id = UINT64CONST(0); proc->wait_event_info = 0; PGSTAT_END_WRITE_ACTIVITY(beentry); } @@ -605,7 +605,7 @@ pgstat_report_activity(BackendState state, const char *cmd_str) * identifier. */ if (state == STATE_RUNNING) - beentry->st_queryid = UINT64CONST(0); + beentry->st_query_id = UINT64CONST(0); if (cmd_str != NULL) { @@ -618,32 +618,32 @@ pgstat_report_activity(BackendState state, const char *cmd_str) } /* -------- - * pgstat_report_queryid() - + * pgstat_report_query_id() - * * Called to update top-level query identifier. * -------- */ void -pgstat_report_queryid(uint64 queryId, bool force) +pgstat_report_query_id(uint64 query_id, bool force) { volatile PgBackendStatus *beentry = MyBEEntry; /* - * if track_activities is disabled, st_queryid should already have been + * if track_activities is disabled, st_query_id should already have been * reset */ if (!beentry || !pgstat_track_activities) return; /* - * We only report the top-level query identifiers. The stored queryid is + * We only report the top-level query identifiers. The stored query_id is * reset when a backend calls pgstat_report_activity(STATE_RUNNING), or * with an explicit call to this function using the force flag. If the * saved query identifier is not zero it means that it's not a top-level * command, so ignore the one provided unless it's an explicit call to * reset the identifier. */ - if (beentry->st_queryid != 0 && !force) + if (beentry->st_query_id != 0 && !force) return; /* @@ -652,7 +652,7 @@ pgstat_report_queryid(uint64 queryId, bool force) * ensure the compiler doesn't try to get cute. */ PGSTAT_BEGIN_WRITE_ACTIVITY(beentry); - beentry->st_queryid = queryId; + beentry->st_query_id = query_id; PGSTAT_END_WRITE_ACTIVITY(beentry); } @@ -1022,12 +1022,12 @@ pgstat_get_crashed_backend_activity(int pid, char *buffer, int buflen) } /* ---------- - * pgstat_get_my_queryid() - + * pgstat_get_my_query_id() - * * Return current backend's query identifier. */ uint64 -pgstat_get_my_queryid(void) +pgstat_get_my_query_id(void) { if (!MyBEEntry) return 0; @@ -1037,7 +1037,7 @@ pgstat_get_my_queryid(void) * pg_stat_get_activity which is already protected, or from the same * backend which means that there won't be concurrent writes. */ - return MyBEEntry->st_queryid; + return MyBEEntry->st_query_id; } diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 2680190a4026b..87f02d572e65d 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -914,10 +914,10 @@ pg_stat_get_activity(PG_FUNCTION_ARGS) values[27] = BoolGetDatum(false); /* GSS Encryption not in * use */ } - if (beentry->st_queryid == 0) + if (beentry->st_query_id == 0) nulls[29] = true; else - values[29] = UInt64GetDatum(beentry->st_queryid); + values[29] = UInt64GetDatum(beentry->st_query_id); } else { diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index a1ebe06d5b061..65019989cf6ba 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -2717,10 +2717,10 @@ log_line_prefix(StringInfo buf, ErrorData *edata) case 'Q': if (padding != 0) appendStringInfo(buf, "%*lld", padding, - (long long) pgstat_get_my_queryid()); + (long long) pgstat_get_my_query_id()); else appendStringInfo(buf, "%lld", - (long long) pgstat_get_my_queryid()); + (long long) pgstat_get_my_query_id()); break; default: /* format error - ignore it */ @@ -2967,7 +2967,7 @@ write_csvlog(ErrorData *edata) appendStringInfoChar(&buf, ','); /* query id */ - appendStringInfo(&buf, "%lld", (long long) pgstat_get_my_queryid()); + appendStringInfo(&buf, "%lld", (long long) pgstat_get_my_query_id()); appendStringInfoChar(&buf, '\n'); diff --git a/src/backend/utils/misc/queryjumble.c b/src/backend/utils/misc/queryjumble.c index 53286bb333f93..afd6d76cebe87 100644 --- a/src/backend/utils/misc/queryjumble.c +++ b/src/backend/utils/misc/queryjumble.c @@ -39,7 +39,7 @@ #define JUMBLE_SIZE 1024 /* query serialization buffer size */ -static uint64 compute_utility_queryid(const char *str, int query_location, int query_len); +static uint64 compute_utility_query_id(const char *str, int query_location, int query_len); static void AppendJumble(JumbleState *jstate, const unsigned char *item, Size size); static void JumbleQueryInternal(JumbleState *jstate, Query *query); @@ -97,7 +97,7 @@ JumbleQuery(Query *query, const char *querytext) JumbleState *jstate = NULL; if (query->utilityStmt) { - query->queryId = compute_utility_queryid(querytext, + query->queryId = compute_utility_query_id(querytext, query->stmt_location, query->stmt_len); } @@ -135,7 +135,7 @@ JumbleQuery(Query *query, const char *querytext) * Compute a query identifier for the given utility query string. */ static uint64 -compute_utility_queryid(const char *query_text, int query_location, int query_len) +compute_utility_query_id(const char *query_text, int query_location, int query_len) { uint64 queryId; const char *sql; diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 1c60d1a69986a..a185f0c313c10 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202104162 +#define CATALOG_VERSION_NO 202104201 #endif diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index b62abcd22c047..b1ee078a1dbc4 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -5281,7 +5281,7 @@ prorettype => 'record', proargtypes => 'int4', proallargtypes => '{int4,oid,int4,oid,text,text,text,text,text,timestamptz,timestamptz,timestamptz,timestamptz,inet,text,int4,xid,xid,text,bool,text,text,int4,text,numeric,text,bool,text,bool,int4,int8}', proargmodes => '{i,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}', - proargnames => '{pid,datid,pid,usesysid,application_name,state,query,wait_event_type,wait_event,xact_start,query_start,backend_start,state_change,client_addr,client_hostname,client_port,backend_xid,backend_xmin,backend_type,ssl,sslversion,sslcipher,sslbits,ssl_client_dn,ssl_client_serial,ssl_issuer_dn,gss_auth,gss_princ,gss_enc,leader_pid,queryid}', + proargnames => '{pid,datid,pid,usesysid,application_name,state,query,wait_event_type,wait_event,xact_start,query_start,backend_start,state_change,client_addr,client_hostname,client_port,backend_xid,backend_xmin,backend_type,ssl,sslversion,sslcipher,sslbits,ssl_client_dn,ssl_client_serial,ssl_issuer_dn,gss_auth,gss_princ,gss_enc,leader_pid,query_id}', prosrc => 'pg_stat_get_activity' }, { oid => '3318', descr => 'statistics: information about progress of backends running maintenance command', diff --git a/src/include/utils/backend_status.h b/src/include/utils/backend_status.h index 8e149b56ca113..0cbcc9c943555 100644 --- a/src/include/utils/backend_status.h +++ b/src/include/utils/backend_status.h @@ -167,7 +167,7 @@ typedef struct PgBackendStatus int64 st_progress_param[PGSTAT_NUM_PROGRESS_PARAM]; /* query identifier, optionally computed using post_parse_analyze_hook */ - uint64 st_queryid; + uint64 st_query_id; } PgBackendStatus; @@ -297,14 +297,14 @@ extern void pgstat_clear_backend_activity_snapshot(void); /* Activity reporting functions */ extern void pgstat_report_activity(BackendState state, const char *cmd_str); -extern void pgstat_report_queryid(uint64 queryId, bool force); +extern void pgstat_report_query_id(uint64 query_id, bool force); extern void pgstat_report_tempfile(size_t filesize); extern void pgstat_report_appname(const char *appname); extern void pgstat_report_xact_timestamp(TimestampTz tstamp); extern const char *pgstat_get_backend_current_activity(int pid, bool checkUser); extern const char *pgstat_get_crashed_backend_activity(int pid, char *buffer, int buflen); -extern uint64 pgstat_get_my_queryid(void); +extern uint64 pgstat_get_my_query_id(void); /* ---------- diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 6399f3feef803..6dff5439e0035 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1762,10 +1762,10 @@ pg_stat_activity| SELECT s.datid, s.state, s.backend_xid, s.backend_xmin, - s.queryid, + s.query_id, s.query, s.backend_type - FROM ((pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, queryid) + FROM ((pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, query_id) LEFT JOIN pg_database d ON ((s.datid = d.oid))) LEFT JOIN pg_authid u ON ((s.usesysid = u.oid))); pg_stat_all_indexes| SELECT c.oid AS relid, @@ -1877,7 +1877,7 @@ pg_stat_gssapi| SELECT s.pid, s.gss_auth AS gss_authenticated, s.gss_princ AS principal, s.gss_enc AS encrypted - FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, queryid) + FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, query_id) WHERE (s.client_port IS NOT NULL); pg_stat_prefetch_recovery| SELECT s.stats_reset, s.prefetch, @@ -2058,7 +2058,7 @@ pg_stat_replication| SELECT s.pid, w.sync_priority, w.sync_state, w.reply_time - FROM ((pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, queryid) + FROM ((pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, query_id) JOIN pg_stat_get_wal_senders() w(pid, state, sent_lsn, write_lsn, flush_lsn, replay_lsn, write_lag, flush_lag, replay_lag, sync_priority, sync_state, reply_time) ON ((s.pid = w.pid))) LEFT JOIN pg_authid u ON ((s.usesysid = u.oid))); pg_stat_replication_slots| SELECT s.slot_name, @@ -2090,7 +2090,7 @@ pg_stat_ssl| SELECT s.pid, s.ssl_client_dn AS client_dn, s.ssl_client_serial AS client_serial, s.ssl_issuer_dn AS issuer_dn - FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, queryid) + FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, query_id) WHERE (s.client_port IS NOT NULL); pg_stat_subscription| SELECT su.oid AS subid, su.subname, From db01f797dd48f826c62e1b8eea70f11fe7ff3efc Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 20 Apr 2021 12:57:59 -0400 Subject: [PATCH 141/671] Fix interaction of log_line_prefix's query_id and log_statement log_statement is issued before query_id can be computed, so properly clear the value, and document the interaction. Reported-by: Fujii Masao, Michael Paquier Discussion: https://postgr.es/m/YHPkU8hFi4no4NSw@paquier.xyz Author: Julien Rouhaud --- doc/src/sgml/config.sgml | 10 ++++++++++ src/backend/utils/activity/backend_status.c | 1 + 2 files changed, 11 insertions(+) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 776ab1a8c8b79..dd7ebe7a9dad2 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -7139,6 +7139,16 @@ log_line_prefix = '%m [%p] %q%u@%d/%a ' + + + + The %Q escape always reports a zero identifier + for lines output by because + log_statement generates output before an + identifier can be calculated, including invalid statements for + which an identifier cannot be calculated. + + diff --git a/src/backend/utils/activity/backend_status.c b/src/backend/utils/activity/backend_status.c index 787f062f9c3d4..a368101103042 100644 --- a/src/backend/utils/activity/backend_status.c +++ b/src/backend/utils/activity/backend_status.c @@ -398,6 +398,7 @@ pgstat_bestart(void) lbeentry.st_state = STATE_UNDEFINED; lbeentry.st_progress_command = PROGRESS_COMMAND_INVALID; lbeentry.st_progress_command_target = InvalidOid; + lbeentry.st_query_id = UINT64CONST(0); /* * we don't zero st_progress_param here to save cycles; nobody should From 9e41148229192dccc4bcc40f53af588b73d8ffea Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 20 Apr 2021 16:58:30 -0400 Subject: [PATCH 142/671] Fix under-parenthesized XLogRecHasBlockRef() macro. Commit f003d9f87 left this macro with inadequate (or, one could say, too much) parenthesization. Which was catastrophic to the correctness of calls such as "if (!XLogRecHasBlockRef(record, 1)) ...". There are only a few of those, which perhaps explains why we didn't notice immediately (with our general weakness of WAL replay testing being another factor). I found it by debugging intermittent replay failures like 2021-04-08 14:33:30.191 EDT [29463] PANIC: failed to locate backup block with ID 1 2021-04-08 14:33:30.191 EDT [29463] CONTEXT: WAL redo at 0/95D3438 for SPGist/ADD_NODE: off 1; blkref #0: rel 1663/16384/25998, blk 1 --- src/include/access/xlogreader.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/include/access/xlogreader.h b/src/include/access/xlogreader.h index d5308b25a283b..3b8af31a8fea4 100644 --- a/src/include/access/xlogreader.h +++ b/src/include/access/xlogreader.h @@ -385,8 +385,8 @@ extern bool DecodeXLogRecord(XLogReaderState *state, #define XLogRecMaxBlockId(decoder) ((decoder)->record->max_block_id) #define XLogRecGetBlock(decoder, i) (&(decoder)->record->blocks[(i)]) #define XLogRecHasBlockRef(decoder, block_id) \ - ((decoder)->record->max_block_id >= (block_id)) && \ - ((decoder)->record->blocks[block_id].in_use) + ((decoder)->record->max_block_id >= (block_id) && \ + (decoder)->record->blocks[block_id].in_use) #define XLogRecHasBlockImage(decoder, block_id) \ ((decoder)->record->blocks[block_id].has_image) #define XLogRecBlockImageApply(decoder, block_id) \ From 783be78ca91166ac7f80c953f2bbc5af1f61c6cd Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 20 Apr 2021 17:01:43 -0400 Subject: [PATCH 143/671] Improve WAL record descriptions for SP-GiST records. While tracking down the bug fixed in the preceding commit, I got quite annoyed by the low quality of spg_desc's output. Add missing fields, try to make the formatting consistent. --- src/backend/access/rmgrdesc/spgdesc.c | 86 +++++++++++++++++++++------ 1 file changed, 67 insertions(+), 19 deletions(-) diff --git a/src/backend/access/rmgrdesc/spgdesc.c b/src/backend/access/rmgrdesc/spgdesc.c index 3610dc1b46c89..0fefe386b8ebc 100644 --- a/src/backend/access/rmgrdesc/spgdesc.c +++ b/src/backend/access/rmgrdesc/spgdesc.c @@ -28,10 +28,9 @@ spg_desc(StringInfo buf, XLogReaderState *record) { spgxlogAddLeaf *xlrec = (spgxlogAddLeaf *) rec; - appendStringInfoString(buf, "add leaf to page"); - appendStringInfo(buf, "; off %u; headoff %u; parentoff %u", + appendStringInfo(buf, "off: %u, headoff: %u, parentoff: %u, nodeI: %u", xlrec->offnumLeaf, xlrec->offnumHeadLeaf, - xlrec->offnumParent); + xlrec->offnumParent, xlrec->nodeI); if (xlrec->newPage) appendStringInfoString(buf, " (newpage)"); if (xlrec->storesNulls) @@ -39,42 +38,91 @@ spg_desc(StringInfo buf, XLogReaderState *record) } break; case XLOG_SPGIST_MOVE_LEAFS: - appendStringInfo(buf, "%u leafs", - ((spgxlogMoveLeafs *) rec)->nMoves); + { + spgxlogMoveLeafs *xlrec = (spgxlogMoveLeafs *) rec; + + appendStringInfo(buf, "nmoves: %u, parentoff: %u, nodeI: %u", + xlrec->nMoves, + xlrec->offnumParent, xlrec->nodeI); + if (xlrec->newPage) + appendStringInfoString(buf, " (newpage)"); + if (xlrec->replaceDead) + appendStringInfoString(buf, " (replacedead)"); + if (xlrec->storesNulls) + appendStringInfoString(buf, " (nulls)"); + } break; case XLOG_SPGIST_ADD_NODE: - appendStringInfo(buf, "off %u", - ((spgxlogAddNode *) rec)->offnum); + { + spgxlogAddNode *xlrec = (spgxlogAddNode *) rec; + + appendStringInfo(buf, "off: %u, newoff: %u, parentBlk: %d, " + "parentoff: %u, nodeI: %u", + xlrec->offnum, + xlrec->offnumNew, + xlrec->parentBlk, + xlrec->offnumParent, + xlrec->nodeI); + if (xlrec->newPage) + appendStringInfoString(buf, " (newpage)"); + } break; case XLOG_SPGIST_SPLIT_TUPLE: - appendStringInfo(buf, "prefix off: %u, postfix off: %u (same %d, new %d)", - ((spgxlogSplitTuple *) rec)->offnumPrefix, - ((spgxlogSplitTuple *) rec)->offnumPostfix, - ((spgxlogSplitTuple *) rec)->postfixBlkSame, - ((spgxlogSplitTuple *) rec)->newPage - ); + { + spgxlogSplitTuple *xlrec = (spgxlogSplitTuple *) rec; + + appendStringInfo(buf, "prefixoff: %u, postfixoff: %u", + xlrec->offnumPrefix, + xlrec->offnumPostfix); + if (xlrec->newPage) + appendStringInfoString(buf, " (newpage)"); + if (xlrec->postfixBlkSame) + appendStringInfoString(buf, " (same)"); + } break; case XLOG_SPGIST_PICKSPLIT: { spgxlogPickSplit *xlrec = (spgxlogPickSplit *) rec; - appendStringInfo(buf, "ndel %u; nins %u", - xlrec->nDelete, xlrec->nInsert); + appendStringInfo(buf, "ndelete: %u, ninsert: %u, inneroff: %u, " + "parentoff: %u, nodeI: %u", + xlrec->nDelete, xlrec->nInsert, + xlrec->offnumInner, + xlrec->offnumParent, xlrec->nodeI); if (xlrec->innerIsParent) appendStringInfoString(buf, " (innerIsParent)"); + if (xlrec->storesNulls) + appendStringInfoString(buf, " (nulls)"); if (xlrec->isRootSplit) appendStringInfoString(buf, " (isRootSplit)"); } break; case XLOG_SPGIST_VACUUM_LEAF: - /* no further information */ + { + spgxlogVacuumLeaf *xlrec = (spgxlogVacuumLeaf *) rec; + + appendStringInfo(buf, "ndead: %u, nplaceholder: %u, nmove: %u, nchain: %u", + xlrec->nDead, xlrec->nPlaceholder, + xlrec->nMove, xlrec->nChain); + } break; case XLOG_SPGIST_VACUUM_ROOT: - /* no further information */ + { + spgxlogVacuumRoot *xlrec = (spgxlogVacuumRoot *) rec; + + appendStringInfo(buf, "ndelete: %u", + xlrec->nDelete); + } break; case XLOG_SPGIST_VACUUM_REDIRECT: - appendStringInfo(buf, "newest XID %u", - ((spgxlogVacuumRedirect *) rec)->newestRedirectXid); + { + spgxlogVacuumRedirect *xlrec = (spgxlogVacuumRedirect *) rec; + + appendStringInfo(buf, "ntoplaceholder: %u, firstplaceholder: %u, newestredirectxid: %u", + xlrec->nToPlaceholder, + xlrec->firstPlaceholder, + xlrec->newestRedirectXid); + } break; } } From 22b2dec31b2ef4dfee299290b16375e9fa6e6932 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 21 Apr 2021 10:34:43 +0900 Subject: [PATCH 144/671] Add CURRENT_ROLE to list of roles for tab completion of GRANT in psql This compatibility has been added in 45b9805, but psql forgot the call. Author: Wei Wang Reviewed-by: Aleksander Alekseev Discussion: https://postgr.es/m/OS3PR01MB6275935F62E161BCD393D6559E489@OS3PR01MB6275.jpnprd01.prod.outlook.com --- src/bin/psql/tab-complete.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index cfd0a840c7ca4..ed84b3789c63e 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -764,6 +764,7 @@ static const SchemaQuery Query_for_list_of_collations = { " FROM pg_catalog.pg_roles "\ " WHERE substring(pg_catalog.quote_ident(rolname),1,%d)='%s'"\ " UNION ALL SELECT 'PUBLIC'"\ +" UNION ALL SELECT 'CURRENT_ROLE'"\ " UNION ALL SELECT 'CURRENT_USER'"\ " UNION ALL SELECT 'SESSION_USER'" @@ -3450,7 +3451,7 @@ psql_completion(const char *text, int start, int end) /* * Complete "GRANT/REVOKE ... TO/FROM" with username, PUBLIC, - * CURRENT_USER, or SESSION_USER. + * CURRENT_ROLE, CURRENT_USER, or SESSION_USER. */ else if ((HeadMatches("GRANT") && TailMatches("TO")) || (HeadMatches("REVOKE") && TailMatches("FROM"))) @@ -3884,6 +3885,7 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH("FOR"); else if (Matches("CREATE", "USER", "MAPPING", "FOR")) COMPLETE_WITH_QUERY(Query_for_list_of_roles + " UNION SELECT 'CURRENT_ROLE'" " UNION SELECT 'CURRENT_USER'" " UNION SELECT 'PUBLIC'" " UNION SELECT 'USER'"); From 64087eb5def7786bd49e60eb5d984ec6e4a872a9 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 21 Apr 2021 12:02:41 +0900 Subject: [PATCH 145/671] doc: List compute_query_id in required config for pg_stat_statements Not enabling compute_query_id would disable pg_stat_statements even if the module is listed in shared_preload_libraries, so add it to the minimum configuration set as listed in its documentation. Author: Greg Nancarrow Reviewed-by: Julien Rouhaud, Bharath Rupireddy Discussion: https://postgr.es/m/CAJcOf-fXyb2QiDbwftD813UF70w-+BsK-03bFp1GrijXU9GQYQ@mail.gmail.com --- doc/src/sgml/pgstatstatements.sgml | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/sgml/pgstatstatements.sgml b/doc/src/sgml/pgstatstatements.sgml index e235504e9a9b5..a0c315aa9740a 100644 --- a/doc/src/sgml/pgstatstatements.sgml +++ b/doc/src/sgml/pgstatstatements.sgml @@ -740,6 +740,7 @@ # postgresql.conf shared_preload_libraries = 'pg_stat_statements' +compute_query_id = on pg_stat_statements.max = 10000 pg_stat_statements.track = all From f0ec598b4323d8b29df5c67f2cd0000547a507ed Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 19 Apr 2021 22:47:43 +0200 Subject: [PATCH 146/671] Fix typo --- src/backend/access/transam/xlogprefetch.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/access/transam/xlogprefetch.c b/src/backend/access/transam/xlogprefetch.c index 2178c9086e619..9a6f17ca3609f 100644 --- a/src/backend/access/transam/xlogprefetch.c +++ b/src/backend/access/transam/xlogprefetch.c @@ -722,7 +722,7 @@ pg_stat_get_prefetch_recovery(PG_FUNCTION_ARGS) if (!(rsinfo->allowedModes & SFRM_Materialize)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("materialize mod required, but it is not allowed in this context"))); + errmsg("materialize mode required, but it is not allowed in this context"))); if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) elog(ERROR, "return type must be a row type"); From 3286065651477c2060910dfb42b3cedbd79a7980 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 19 Apr 2021 22:48:13 +0200 Subject: [PATCH 147/671] Don't use INT64_FORMAT inside message strings Use %lld and cast to long long int instead. --- src/bin/pg_rewind/libpq_source.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bin/pg_rewind/libpq_source.c b/src/bin/pg_rewind/libpq_source.c index ac794cf4ebeb2..8e0783fcef3d1 100644 --- a/src/bin/pg_rewind/libpq_source.c +++ b/src/bin/pg_rewind/libpq_source.c @@ -526,8 +526,8 @@ process_queued_fetch_requests(libpq_source *src) } else { - pg_log_debug("received chunk for file \"%s\", offset " INT64_FORMAT ", size %d", - filename, chunkoff, chunksize); + pg_log_debug("received chunk for file \"%s\", offset %lld, size %d", + filename, (long long int) chunkoff, chunksize); if (strcmp(filename, rq->path) != 0) { @@ -535,8 +535,8 @@ process_queued_fetch_requests(libpq_source *src) filename, rq->path); } if (chunkoff != rq->offset) - pg_fatal("received data at offset " INT64_FORMAT " of file \"%s\", when requested for offset " INT64_FORMAT, - chunkoff, rq->path, (int64) rq->offset); + pg_fatal("received data at offset %lld of file \"%s\", when requested for offset %lld", + (long long int) chunkoff, rq->path, (long long int) rq->offset); /* * We should not receive more data than we requested, or From 544b28088f9d41750ccf193812da62bdfe4bd98a Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 21 Apr 2021 08:14:43 +0200 Subject: [PATCH 148/671] doc: Improve hyphenation consistency --- doc/src/sgml/catalogs.sgml | 14 +++++++------- doc/src/sgml/ddl.sgml | 2 +- doc/src/sgml/ref/alter_policy.sgml | 2 +- doc/src/sgml/ref/alter_table.sgml | 6 +++--- doc/src/sgml/ref/create_policy.sgml | 6 +++--- doc/src/sgml/ref/drop_policy.sgml | 6 +++--- doc/src/sgml/rules.sgml | 2 +- src/backend/commands/copyto.c | 2 +- src/backend/commands/functioncmds.c | 2 +- src/backend/executor/execMain.c | 4 ++-- src/backend/optimizer/path/allpaths.c | 2 +- src/backend/rewrite/rewriteHandler.c | 4 ++-- src/backend/rewrite/rowsecurity.c | 4 ++-- src/include/catalog/pg_authid.h | 2 +- src/test/regress/expected/rowsecurity.out | 2 +- src/test/regress/sql/rowsecurity.sql | 2 +- 16 files changed, 31 insertions(+), 31 deletions(-) diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 1345791e96381..492ed348b3a72 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -1556,7 +1556,7 @@ rolbypassrls bool - Role bypasses every row level security policy, see + Role bypasses every row-level security policy, see for more information. @@ -2130,7 +2130,7 @@ SCRAM-SHA-256$<iteration count>:&l relrowsecurity bool - True if table has row level security enabled; see + True if table has row-level security enabled; see pg_policy catalog @@ -2140,7 +2140,7 @@ SCRAM-SHA-256$<iteration count>:&l relforcerowsecurity bool - True if row level security (when enabled) will also apply to table owner; see + True if row-level security (when enabled) will also apply to table owner; see pg_policy catalog @@ -5531,7 +5531,7 @@ SCRAM-SHA-256$<iteration count>:&l - The catalog pg_policy stores row level + The catalog pg_policy stores row-level security policies for tables. A policy includes the kind of command that it applies to (possibly all commands), the roles that it applies to, the expression to be added as a security-barrier @@ -11765,7 +11765,7 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx rolbypassrls bool - Role bypasses every row level security policy, see + Role bypasses every row-level security policy, see for more information. @@ -12554,7 +12554,7 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx usebypassrls bool - User bypasses every row level security policy, see + User bypasses every row-level security policy, see for more information. @@ -13667,7 +13667,7 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx usebypassrls bool - User bypasses every row level security policy, see + User bypasses every row-level security policy, see for more information. diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml index 30e4170963451..7d587b226cbd1 100644 --- a/doc/src/sgml/ddl.sgml +++ b/doc/src/sgml/ddl.sgml @@ -2382,7 +2382,7 @@ INSERT INTO passwd VALUES INSERT INTO passwd VALUES ('alice','xxx',2,1,'Alice','098-765-4321',null,'/home/alice','/bin/zsh'); --- Be sure to enable row level security on the table +-- Be sure to enable row-level security on the table ALTER TABLE passwd ENABLE ROW LEVEL SECURITY; -- Create policies diff --git a/doc/src/sgml/ref/alter_policy.sgml b/doc/src/sgml/ref/alter_policy.sgml index 1c38324b599d7..fbc262ba20d17 100644 --- a/doc/src/sgml/ref/alter_policy.sgml +++ b/doc/src/sgml/ref/alter_policy.sgml @@ -16,7 +16,7 @@ PostgreSQL documentation ALTER POLICY - change the definition of a row level security policy + change the definition of a row-level security policy diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index 07e37a6dc81a2..39927be41eded 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -611,7 +611,7 @@ WITH ( MODULUS numeric_literal, REM These forms control the application of row security policies belonging to the table. If enabled and no policies exist for the table, then a default-deny policy is applied. Note that policies can exist for a table - even if row level security is disabled. In this case, the policies will + even if row-level security is disabled. In this case, the policies will not be applied and the policies will be ignored. See also CREATE POLICY. @@ -624,9 +624,9 @@ WITH ( MODULUS numeric_literal, REM These forms control the application of row security policies belonging - to the table when the user is the table owner. If enabled, row level + to the table when the user is the table owner. If enabled, row-level security policies will be applied when the user is the table owner. If - disabled (the default) then row level security will not be applied when + disabled (the default) then row-level security will not be applied when the user is the table owner. See also CREATE POLICY. diff --git a/doc/src/sgml/ref/create_policy.sgml b/doc/src/sgml/ref/create_policy.sgml index b4f90561018c4..9f532068e6404 100644 --- a/doc/src/sgml/ref/create_policy.sgml +++ b/doc/src/sgml/ref/create_policy.sgml @@ -16,7 +16,7 @@ PostgreSQL documentation CREATE POLICY - define a new row level security policy for a table + define a new row-level security policy for a table @@ -188,7 +188,7 @@ CREATE POLICY name ON SQL conditional expression (returning boolean). The conditional expression cannot contain any aggregate or window functions. This expression will be added - to queries that refer to the table if row level security is enabled. + to queries that refer to the table if row-level security is enabled. Rows for which the expression returns true will be visible. Any rows for which the expression returns false or null will not be visible to the user (in a SELECT), and will not be @@ -207,7 +207,7 @@ CREATE POLICY name ON boolean). The conditional expression cannot contain any aggregate or window functions. This expression will be used in INSERT and UPDATE queries against - the table if row level security is enabled. Only rows for which the + the table if row-level security is enabled. Only rows for which the expression evaluates to true will be allowed. An error will be thrown if the expression evaluates to false or null for any of the records inserted or any of the records that result from the update. Note that diff --git a/doc/src/sgml/ref/drop_policy.sgml b/doc/src/sgml/ref/drop_policy.sgml index 9297ade1133cf..d7d3771faea5e 100644 --- a/doc/src/sgml/ref/drop_policy.sgml +++ b/doc/src/sgml/ref/drop_policy.sgml @@ -16,7 +16,7 @@ PostgreSQL documentation DROP POLICY - remove a row level security policy from a table + remove a row-level security policy from a table @@ -31,9 +31,9 @@ DROP POLICY [ IF EXISTS ] name ON < DROP POLICY removes the specified policy from the table. Note that if the last policy is removed for a table and the table still has - row level security enabled via ALTER TABLE, then the + row-level security enabled via ALTER TABLE, then the default-deny policy will be used. ALTER TABLE ... DISABLE ROW - LEVEL SECURITY can be used to disable row level security for a + LEVEL SECURITY can be used to disable row-level security for a table, whether policies for the table exist or not. diff --git a/doc/src/sgml/rules.sgml b/doc/src/sgml/rules.sgml index 2ae6925b4182e..5024e4ff704ff 100644 --- a/doc/src/sgml/rules.sgml +++ b/doc/src/sgml/rules.sgml @@ -2123,7 +2123,7 @@ SELECT * FROM phone_number WHERE tricky(person, phone); - When it is necessary for a view to provide row level security, the + When it is necessary for a view to provide row-level security, the security_barrier attribute should be applied to the view. This prevents maliciously-chosen functions and operators from being passed values from rows until after the view has done its work. For diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c index 7257a54e93501..67bac9ccab60b 100644 --- a/src/backend/commands/copyto.c +++ b/src/backend/commands/copyto.c @@ -512,7 +512,7 @@ BeginCopyTo(ParseState *pstate, CURSOR_OPT_PARALLEL_OK, NULL); /* - * With row level security and a user using "COPY relation TO", we + * With row-level security and a user using "COPY relation TO", we * have to convert the "COPY relation TO" to a query-based COPY (eg: * "COPY (SELECT * FROM relation) TO"), to allow the rewriter to add * in any RLS clauses. diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index e7cb5c65e9a45..954828721740f 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -1129,7 +1129,7 @@ CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt) /* * Only superuser is allowed to create leakproof functions because * leakproof functions can see tuples which have not yet been filtered out - * by security barrier views or row level security policies. + * by security barrier views or row-level security policies. */ if (isLeakProof && !superuser()) ereport(ERROR, diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 8638bd3dd96b6..8d0f3de76eddf 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -558,7 +558,7 @@ ExecutorRewind(QueryDesc *queryDesc) * Returns true if permissions are adequate. Otherwise, throws an appropriate * error if ereport_on_violation is true, or simply returns false otherwise. * - * Note that this does NOT address row level security policies (aka: RLS). If + * Note that this does NOT address row-level security policies (aka: RLS). If * rows will be returned to the user as a result of this permission check * passing, then RLS also needs to be consulted (and check_enable_rls()). * @@ -1947,7 +1947,7 @@ ExecConstraints(ResultRelInfo *resultRelInfo, * * Note that this needs to be called multiple times to ensure that all kinds of * WITH CHECK OPTIONs are handled (both those from views which have the WITH - * CHECK OPTION set and from row level security policies). See ExecInsert() + * CHECK OPTION set and from row-level security policies). See ExecInsert() * and ExecUpdate(). */ void diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 30728be85af20..353454b183e52 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -2141,7 +2141,7 @@ set_subquery_pathlist(PlannerInfo *root, RelOptInfo *rel, /* * If the subquery has the "security_barrier" flag, it means the subquery - * originated from a view that must enforce row level security. Then we + * originated from a view that must enforce row-level security. Then we * must not push down quals that contain leaky functions. (Ideally this * would be checked inside subquery_is_pushdown_safe, but since we don't * currently pass the RTE to that function, we must do it here.) diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index da78f02775156..497d30d8a9304 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -2159,7 +2159,7 @@ fireRIRrules(Query *parsetree, List *activeRIRs) QTW_IGNORE_RC_SUBQUERIES); /* - * Apply any row level security policies. We do this last because it + * Apply any row-level security policies. We do this last because it * requires special recursion detection if the new quals have sublink * subqueries, and if we did it in the loop above query_tree_walker would * then recurse into those quals a second time. @@ -2249,7 +2249,7 @@ fireRIRrules(Query *parsetree, List *activeRIRs) } /* - * Make sure the query is marked correctly if row level security + * Make sure the query is marked correctly if row-level security * applies, or if the new quals had sublinks. */ if (hasRowSecurity) diff --git a/src/backend/rewrite/rowsecurity.c b/src/backend/rewrite/rowsecurity.c index fc26cb23a21a0..e10f94904e1a6 100644 --- a/src/backend/rewrite/rowsecurity.c +++ b/src/backend/rewrite/rowsecurity.c @@ -1,6 +1,6 @@ /* * rewrite/rowsecurity.c - * Routines to support policies for row level security (aka RLS). + * Routines to support policies for row-level security (aka RLS). * * Policies in PostgreSQL provide a mechanism to limit what records are * returned to a user and what records a user is permitted to add to a table. @@ -100,7 +100,7 @@ row_security_policy_hook_type row_security_policy_hook_restrictive = NULL; * Get any row security quals and WithCheckOption checks that should be * applied to the specified RTE. * - * In addition, hasRowSecurity is set to true if row level security is enabled + * In addition, hasRowSecurity is set to true if row-level security is enabled * (even if this RTE doesn't have any row security quals), and hasSubLinks is * set to true if any of the quals returned contain sublinks. */ diff --git a/src/include/catalog/pg_authid.h b/src/include/catalog/pg_authid.h index 1a5c7a73c7c67..609bd7fcbcc3c 100644 --- a/src/include/catalog/pg_authid.h +++ b/src/include/catalog/pg_authid.h @@ -38,7 +38,7 @@ CATALOG(pg_authid,1260,AuthIdRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID(284 bool rolcreatedb; /* allowed to create databases? */ bool rolcanlogin; /* allowed to log in as session user? */ bool rolreplication; /* role used for streaming replication */ - bool rolbypassrls; /* bypasses row level security? */ + bool rolbypassrls; /* bypasses row-level security? */ int32 rolconnlimit; /* max connections allowed (-1=no limit) */ /* remaining fields may be null; use heap_getattr to read them! */ diff --git a/src/test/regress/expected/rowsecurity.out b/src/test/regress/expected/rowsecurity.out index b02a682471137..367ecace4723e 100644 --- a/src/test/regress/expected/rowsecurity.out +++ b/src/test/regress/expected/rowsecurity.out @@ -3514,7 +3514,7 @@ CREATE POLICY p ON t USING (c % 2 = 1); ALTER TABLE t ENABLE ROW LEVEL SECURITY; SAVEPOINT q; CREATE RULE "_RETURN" AS ON SELECT TO t DO INSTEAD - SELECT * FROM generate_series(1,5) t0(c); -- fails due to row level security enabled + SELECT * FROM generate_series(1,5) t0(c); -- fails due to row-level security enabled ERROR: could not convert table "t" to a view because it has row security enabled ROLLBACK TO q; ALTER TABLE t DISABLE ROW LEVEL SECURITY; diff --git a/src/test/regress/sql/rowsecurity.sql b/src/test/regress/sql/rowsecurity.sql index d7a5a36cf86b4..281ae74b9ca7e 100644 --- a/src/test/regress/sql/rowsecurity.sql +++ b/src/test/regress/sql/rowsecurity.sql @@ -1445,7 +1445,7 @@ ALTER TABLE t ENABLE ROW LEVEL SECURITY; SAVEPOINT q; CREATE RULE "_RETURN" AS ON SELECT TO t DO INSTEAD - SELECT * FROM generate_series(1,5) t0(c); -- fails due to row level security enabled + SELECT * FROM generate_series(1,5) t0(c); -- fails due to row-level security enabled ROLLBACK TO q; ALTER TABLE t DISABLE ROW LEVEL SECURITY; From 39d0928a0e88426ee64189898565c40d4af9ad96 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 21 Apr 2021 08:26:18 +0200 Subject: [PATCH 149/671] Use correct format placeholder for timeline IDs Should be %u rather than %d. --- src/bin/pg_rewind/pg_rewind.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bin/pg_rewind/pg_rewind.c b/src/bin/pg_rewind/pg_rewind.c index 38e5d23755187..5157f59cf79b3 100644 --- a/src/bin/pg_rewind/pg_rewind.c +++ b/src/bin/pg_rewind/pg_rewind.c @@ -857,7 +857,7 @@ getTimelineHistory(ControlFileData *controlFile, int *nentries) TimeLineHistoryEntry *entry; entry = &history[i]; - pg_log_debug("%d: %X/%X - %X/%X", entry->tli, + pg_log_debug("%u: %X/%X - %X/%X", entry->tli, LSN_FORMAT_ARGS(entry->begin), LSN_FORMAT_ARGS(entry->end)); } From d84ffffe582b8e036a14c6bc2378df29167f3a00 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 21 Apr 2021 11:54:47 +0200 Subject: [PATCH 150/671] Add DISTINCT to information schema usage views Since pg_depend can contain duplicate entries, we need to eliminate those in information schema views that build on pg_depend, using DISTINCT. Some of the older views already did that correctly, but some of the more recently added ones didn't. (In some of these views, it might not be possible to reproduce the issue because of how the implementation happens to deduplicate dependencies while recording them, but it seems better to keep this consistent in all cases.) --- src/backend/catalog/information_schema.sql | 18 ++++++++++++------ src/include/catalog/catversion.h | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/backend/catalog/information_schema.sql b/src/backend/catalog/information_schema.sql index 0f2c1833e9f36..11d9dd60c2089 100644 --- a/src/backend/catalog/information_schema.sql +++ b/src/backend/catalog/information_schema.sql @@ -406,7 +406,8 @@ GRANT SELECT ON character_sets TO PUBLIC; */ CREATE VIEW check_constraint_routine_usage AS - SELECT CAST(current_database() AS sql_identifier) AS constraint_catalog, + SELECT DISTINCT + CAST(current_database() AS sql_identifier) AS constraint_catalog, CAST(nc.nspname AS sql_identifier) AS constraint_schema, CAST(c.conname AS sql_identifier) AS constraint_name, CAST(current_database() AS sql_identifier) AS specific_catalog, @@ -505,7 +506,8 @@ GRANT SELECT ON collation_character_set_applicability TO PUBLIC; */ CREATE VIEW column_column_usage AS - SELECT CAST(current_database() AS sql_identifier) AS table_catalog, + SELECT DISTINCT + CAST(current_database() AS sql_identifier) AS table_catalog, CAST(n.nspname AS sql_identifier) AS table_schema, CAST(c.relname AS sql_identifier) AS table_name, CAST(ac.attname AS sql_identifier) AS column_name, @@ -1325,7 +1327,8 @@ GRANT SELECT ON role_column_grants TO PUBLIC; */ CREATE VIEW routine_column_usage AS - SELECT CAST(current_database() AS sql_identifier) AS specific_catalog, + SELECT DISTINCT + CAST(current_database() AS sql_identifier) AS specific_catalog, CAST(np.nspname AS sql_identifier) AS specific_schema, CAST(nameconcatoid(p.proname, p.oid) AS sql_identifier) AS specific_name, CAST(current_database() AS sql_identifier) AS routine_catalog, @@ -1434,7 +1437,8 @@ GRANT SELECT ON role_routine_grants TO PUBLIC; */ CREATE VIEW routine_routine_usage AS - SELECT CAST(current_database() AS sql_identifier) AS specific_catalog, + SELECT DISTINCT + CAST(current_database() AS sql_identifier) AS specific_catalog, CAST(np.nspname AS sql_identifier) AS specific_schema, CAST(nameconcatoid(p.proname, p.oid) AS sql_identifier) AS specific_name, CAST(current_database() AS sql_identifier) AS routine_catalog, @@ -1462,7 +1466,8 @@ GRANT SELECT ON routine_routine_usage TO PUBLIC; */ CREATE VIEW routine_sequence_usage AS - SELECT CAST(current_database() AS sql_identifier) AS specific_catalog, + SELECT DISTINCT + CAST(current_database() AS sql_identifier) AS specific_catalog, CAST(np.nspname AS sql_identifier) AS specific_schema, CAST(nameconcatoid(p.proname, p.oid) AS sql_identifier) AS specific_name, CAST(current_database() AS sql_identifier) AS routine_catalog, @@ -1493,7 +1498,8 @@ GRANT SELECT ON routine_sequence_usage TO PUBLIC; */ CREATE VIEW routine_table_usage AS - SELECT CAST(current_database() AS sql_identifier) AS specific_catalog, + SELECT DISTINCT + CAST(current_database() AS sql_identifier) AS specific_catalog, CAST(np.nspname AS sql_identifier) AS specific_schema, CAST(nameconcatoid(p.proname, p.oid) AS sql_identifier) AS specific_name, CAST(current_database() AS sql_identifier) AS routine_catalog, diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index a185f0c313c10..c32c5b2731a6f 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202104201 +#define CATALOG_VERSION_NO 202104211 #endif From d064afc7204b52cb78a83fea0e686693ce5ba00c Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Wed, 21 Apr 2021 10:21:22 -0400 Subject: [PATCH 151/671] Only ever test for non-127.0.0.1 addresses on Windows in PostgresNode This has been found to cause hangs where tcp usage is forced. Alexey Kodratov Discussion: https://postgr.es/m/82e271a9a11928337fcb5b5e57b423c0@postgrespro.ru Backpatch to all live branches --- src/test/perl/PostgresNode.pm | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index b32223f716433..8394c57d3f872 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -1332,19 +1332,22 @@ sub get_free_port # Check to see if anything else is listening on this TCP port. # Seek a port available for all possible listen_addresses values, # so callers can harness this port for the widest range of purposes. - # The 0.0.0.0 test achieves that for post-2006 Cygwin, which - # automatically sets SO_EXCLUSIVEADDRUSE. The same holds for MSYS (a - # Cygwin fork). Testing 0.0.0.0 is insufficient for Windows native - # Perl (https://stackoverflow.com/a/14388707), so we also test - # individual addresses. + # The 0.0.0.0 test achieves that for MSYS, which automatically sets + # SO_EXCLUSIVEADDRUSE. Testing 0.0.0.0 is insufficient for Windows + # native Perl (https://stackoverflow.com/a/14388707), so we also + # have to test individual addresses. Doing that for 127.0.0/24 + # addresses other than 127.0.0.1 might fail with EADDRNOTAVAIL on + # non-Linux, non-Windows kernels. # - # On non-Linux, non-Windows kernels, binding to 127.0.0/24 addresses - # other than 127.0.0.1 might fail with EADDRNOTAVAIL. Binding to - # 0.0.0.0 is unnecessary on non-Windows systems. + # Thus, 0.0.0.0 and individual 127.0.0/24 addresses are tested + # only on Windows and only when TCP usage is requested. if ($found == 1) { foreach my $addr (qw(127.0.0.1), - $use_tcp ? qw(127.0.0.2 127.0.0.3 0.0.0.0) : ()) + $use_tcp ? qw(127.0.0.2 127.0.0.3 0.0.0.0) : ()) + $use_tcp && $TestLib::windows_os + ? qw(127.0.0.2 127.0.0.3 0.0.0.0) + : ()) { if (!can_bind($addr, $port)) { From 26ac261ee4033710cad44f7924d53753129b60c7 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 21 Apr 2021 16:02:03 +0200 Subject: [PATCH 152/671] Update config.guess and config.sub --- config/config.guess | 278 ++++++++++--------- config/config.sub | 643 ++++++++++++++++++++++++-------------------- 2 files changed, 507 insertions(+), 414 deletions(-) diff --git a/config/config.guess b/config/config.guess index 11fda528bc7b1..1972fda8eb05d 100644 --- a/config/config.guess +++ b/config/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. -timestamp='2020-04-26' +timestamp='2021-01-25' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -27,12 +27,12 @@ timestamp='2020-04-26' # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . -me=`echo "$0" | sed -e 's,.*/,,'` +me=$(echo "$0" | sed -e 's,.*/,,') usage="\ Usage: $0 [OPTION] @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2020 Free Software Foundation, Inc. +Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -103,7 +103,7 @@ set_cc_for_build() { test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039 - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } @@ -131,16 +131,14 @@ if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown +UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown +UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown +UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown +UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu + LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" @@ -149,17 +147,29 @@ Linux|GNU|GNU/*) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc - #else + #elif defined(__GLIBC__) LIBC=gnu + #else + #include + /* First heuristic to detect musl libc. */ + #ifdef __DEFINED_va_list + LIBC=musl + #endif #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')" - # If ldd exists, use it to detect musl libc. - if command -v ldd >/dev/null && \ - ldd --version 2>&1 | grep -q ^musl - then - LIBC=musl + # Second heuristic to detect musl libc. + if [ "$LIBC" = unknown ] && + command -v ldd >/dev/null && + ldd --version 2>&1 | grep -q ^musl; then + LIBC=musl + fi + + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + if [ "$LIBC" = unknown ]; then + LIBC=gnu fi ;; esac @@ -178,20 +188,20 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - "/sbin/$sysctl" 2>/dev/null || \ - "/usr/sbin/$sysctl" 2>/dev/null || \ - echo unknown)` + UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \ + /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + echo unknown)) case "$UNAME_MACHINE_ARCH" in + aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) - arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` - endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,') + endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p') machine="${arch}${endian}"-unknown ;; *) machine="$UNAME_MACHINE_ARCH"-unknown ;; @@ -222,7 +232,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` + abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr") ;; esac # The OS release @@ -235,7 +245,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in release='-gnu' ;; *) - release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` + release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2) ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: @@ -244,15 +254,15 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in echo "$machine-${os}${release}${abi-}" exit ;; *:Bitrig:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//') echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//') echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//') echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) @@ -288,17 +298,17 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}') ;; *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}') ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1) case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; @@ -336,7 +346,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" + echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 @@ -370,7 +380,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then + if test "$( (/bin/universe) 2>/dev/null)" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd @@ -383,17 +393,17 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in + case $(/usr/bin/uname -p) in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) - echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" exit ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" @@ -404,7 +414,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null @@ -412,30 +422,30 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in SUN_ARCH=x86_64 fi fi - echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in + case "$(/usr/bin/arch -k)" in Series*|S4*) - UNAME_RELEASE=`uname -v` + UNAME_RELEASE=$(uname -v) ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" + echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null) test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 - case "`/bin/arch`" in + case "$(/bin/arch)" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; @@ -515,8 +525,8 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && - dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`"$dummy" "$dummyarg"` && + dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') && + SYSTEM_NAME=$("$dummy" "$dummyarg") && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; @@ -543,11 +553,11 @@ EOF exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] + UNAME_PROCESSOR=$(/usr/bin/uname -p) + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then - if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ - [ "$TARGET_BINARY_INTERFACE"x = x ] + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x then echo m88k-dg-dgux"$UNAME_RELEASE" else @@ -571,17 +581,17 @@ EOF echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) - echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" + echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + exit ;; # Note that: echo "'$(uname -s)'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if test -x /usr/bin/oslevel ; then + IBM_REV=$(/usr/bin/oslevel) else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi @@ -601,7 +611,7 @@ EOF exit(0); } EOF - if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") then echo "$SYSTEM_NAME" else @@ -614,15 +624,15 @@ EOF fi exit ;; *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }') if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi - if [ -x /usr/bin/lslpp ] ; then - IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | - awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + if test -x /usr/bin/lslpp ; then + IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/) else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi @@ -650,14 +660,14 @@ EOF echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') case "$UNAME_MACHINE" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + if test -x /usr/bin/getconf; then + sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null) + sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null) case "$sc_cpu_version" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 @@ -669,7 +679,7 @@ EOF esac ;; esac fi - if [ "$HP_ARCH" = "" ]; then + if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" @@ -704,11 +714,11 @@ EOF exit (0); } EOF - (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy") test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ "$HP_ARCH" = hppa2.0w ] + if test "$HP_ARCH" = hppa2.0w then set_cc_for_build @@ -732,7 +742,7 @@ EOF echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) @@ -762,7 +772,7 @@ EOF exit (0); } EOF - $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; @@ -782,7 +792,7 @@ EOF echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then + if test -x /usr/sbin/sysversion ; then echo "$UNAME_MACHINE"-unknown-osf1mk else echo "$UNAME_MACHINE"-unknown-osf1 @@ -831,14 +841,14 @@ EOF echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` - FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` + FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz) + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/') echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/') echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) @@ -851,25 +861,25 @@ EOF echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; arm:FreeBSD:*:*) - UNAME_PROCESSOR=`uname -p` + UNAME_PROCESSOR=$(uname -p) set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi else - echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf fi exit ;; *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` + UNAME_PROCESSOR=$(/usr/bin/uname -p) case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac - echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin @@ -905,15 +915,15 @@ EOF echo x86_64-pc-cygwin exit ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; *:GNU:*:*) # the GNU system - echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" + echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" + echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC" exit ;; *:Minix:*:*) echo "$UNAME_MACHINE"-unknown-minix @@ -926,7 +936,7 @@ EOF echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in + case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; @@ -985,6 +995,9 @@ EOF k1om:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; @@ -1035,7 +1048,7 @@ EOF #endif #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`" + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) @@ -1055,7 +1068,7 @@ EOF exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; @@ -1073,7 +1086,7 @@ EOF ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; - riscv32:Linux:*:* | riscv64:Linux:*:*) + riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) @@ -1095,7 +1108,17 @@ EOF echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) - echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + set_cc_for_build + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_X32 >/dev/null + then + LIBCABI="$LIBC"x32 + fi + fi + echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI" exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" @@ -1135,7 +1158,7 @@ EOF echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) - UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` + UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//') if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else @@ -1144,7 +1167,7 @@ EOF exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in + case $(/bin/uname -X | grep "^Machine") in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; @@ -1153,10 +1176,10 @@ EOF exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //')) (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 @@ -1206,7 +1229,7 @@ EOF 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ @@ -1217,7 +1240,7 @@ EOF NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ @@ -1250,7 +1273,7 @@ EOF exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` + UNAME_MACHINE=$( (uname -p) 2>/dev/null) echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv @@ -1284,7 +1307,7 @@ EOF echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then + if test -d /usr/nec; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-sysv"$UNAME_RELEASE" @@ -1332,8 +1355,11 @@ EOF *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; + arm64:Darwin:*:*) + echo aarch64-apple-darwin"$UNAME_RELEASE" + exit ;; *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` + UNAME_PROCESSOR=$(uname -p) case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac @@ -1346,7 +1372,7 @@ EOF else set_cc_for_build fi - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null @@ -1370,7 +1396,7 @@ EOF echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` + UNAME_PROCESSOR=$(uname -p) if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc @@ -1438,10 +1464,10 @@ EOF echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) - echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" exit ;; *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` + UNAME_MACHINE=$( (uname -p) 2>/dev/null) case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; @@ -1451,13 +1477,13 @@ EOF echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" + echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')" exit ;; i*86:rdos:*:*) echo "$UNAME_MACHINE"-pc-rdos exit ;; - i*86:AROS:*:*) - echo "$UNAME_MACHINE"-pc-aros + *:AROS:*:*) + echo "$UNAME_MACHINE"-unknown-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx @@ -1509,7 +1535,7 @@ main () #define __ARCHITECTURE__ "m68k" #endif int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null); if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else @@ -1601,7 +1627,7 @@ main () } EOF -$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` && +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. @@ -1626,14 +1652,14 @@ This script (version $timestamp), has failed to recognize the operating system you are using. If your script is old, overwrite *all* copies of config.guess and config.sub with the latest versions from: - https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess + https://git.savannah.gnu.org/cgit/config.git/plain/config.guess and - https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + https://git.savannah.gnu.org/cgit/config.git/plain/config.sub EOF -year=`echo $timestamp | sed 's,-.*,,'` +year=$(echo $timestamp | sed 's,-.*,,') # shellcheck disable=SC2003 -if test "`expr "\`date +%Y\`" - "$year"`" -lt 3 ; then +if test "$(expr "$(date +%Y)" - "$year")" -lt 3 ; then cat >&2 </dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` +uname -m = $( (uname -m) 2>/dev/null || echo unknown) +uname -r = $( (uname -r) 2>/dev/null || echo unknown) +uname -s = $( (uname -s) 2>/dev/null || echo unknown) +uname -v = $( (uname -v) 2>/dev/null || echo unknown) -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` +/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null) +/bin/uname -X = $( (/bin/uname -X) 2>/dev/null) -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` +hostinfo = $( (hostinfo) 2>/dev/null) +/bin/universe = $( (/bin/universe) 2>/dev/null) +/usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null) +/bin/arch = $( (/bin/arch) 2>/dev/null) +/usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null) +/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null) UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" diff --git a/config/config.sub b/config/config.sub index a0d12275ac5f1..7f7d0b055ac53 100644 --- a/config/config.sub +++ b/config/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. -timestamp='2020-04-24' +timestamp='2021-03-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ timestamp='2020-04-24' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub +# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -50,7 +50,7 @@ timestamp='2020-04-24' # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. -me=`echo "$0" | sed -e 's,.*/,,'` +me=$(echo "$0" | sed -e 's,.*/,,') usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS @@ -67,7 +67,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2020 Free Software Foundation, Inc. +Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -124,28 +124,27 @@ case $1 in ;; *-*-*-*) basic_machine=$field1-$field2 - os=$field3-$field4 + basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \ - | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \ + nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 - os=$maybe_os + basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown - os=linux-android + basic_os=linux-android ;; *) basic_machine=$field1-$field2 - os=$field3 + basic_os=$field3 ;; esac ;; @@ -154,7 +153,7 @@ case $1 in case $field1-$field2 in decstation-3100) basic_machine=mips-dec - os= + basic_os= ;; *-*) # Second component is usually, but not always the OS @@ -162,7 +161,7 @@ case $1 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 - os=$field2 + basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ @@ -175,11 +174,11 @@ case $1 in | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 - os= + basic_os= ;; *) basic_machine=$field1 - os=$field2 + basic_os=$field2 ;; esac ;; @@ -191,447 +190,451 @@ case $1 in case $field1 in 386bsd) basic_machine=i386-pc - os=bsd + basic_os=bsd ;; a29khif) basic_machine=a29k-amd - os=udi + basic_os=udi ;; adobe68k) basic_machine=m68010-adobe - os=scout + basic_os=scout ;; alliant) basic_machine=fx80-alliant - os= + basic_os= ;; altos | altos3068) basic_machine=m68k-altos - os= + basic_os= ;; am29k) basic_machine=a29k-none - os=bsd + basic_os=bsd ;; amdahl) basic_machine=580-amdahl - os=sysv + basic_os=sysv ;; amiga) basic_machine=m68k-unknown - os= + basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown - os=amigaos + basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown - os=sysv4 + basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo - os=sysv + basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo - os=bsd + basic_os=bsd ;; aros) basic_machine=i386-pc - os=aros + basic_os=aros ;; aux) basic_machine=m68k-apple - os=aux + basic_os=aux ;; balance) basic_machine=ns32k-sequent - os=dynix + basic_os=dynix ;; blackfin) basic_machine=bfin-unknown - os=linux + basic_os=linux ;; cegcc) basic_machine=arm-unknown - os=cegcc + basic_os=cegcc ;; convex-c1) basic_machine=c1-convex - os=bsd + basic_os=bsd ;; convex-c2) basic_machine=c2-convex - os=bsd + basic_os=bsd ;; convex-c32) basic_machine=c32-convex - os=bsd + basic_os=bsd ;; convex-c34) basic_machine=c34-convex - os=bsd + basic_os=bsd ;; convex-c38) basic_machine=c38-convex - os=bsd + basic_os=bsd ;; cray) basic_machine=j90-cray - os=unicos + basic_os=unicos ;; crds | unos) basic_machine=m68k-crds - os= + basic_os= ;; da30) basic_machine=m68k-da30 - os= + basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec - os= + basic_os= ;; delta88) basic_machine=m88k-motorola - os=sysv3 + basic_os=sysv3 ;; dicos) basic_machine=i686-pc - os=dicos + basic_os=dicos ;; djgpp) basic_machine=i586-pc - os=msdosdjgpp + basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd - os=ebmon + basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson - os=ose + basic_os=ose ;; gmicro) basic_machine=tron-gmicro - os=sysv + basic_os=sysv ;; go32) basic_machine=i386-pc - os=go32 + basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi - os=hms + basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi - os=xray + basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi - os=hms + basic_os=hms ;; harris) basic_machine=m88k-harris - os=sysv3 + basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp - os=hpux + basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp - os=bsd + basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp - os=osf + basic_os=osf ;; hppro) basic_machine=hppa1.1-hp - os=proelf + basic_os=proelf ;; i386mach) basic_machine=i386-mach - os=mach + basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi - os=sysv + basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown - os=linux + basic_os=linux ;; magnum | m3230) basic_machine=mips-mips - os=sysv + basic_os=sysv ;; merlin) basic_machine=ns32k-utek - os=sysv + basic_os=sysv ;; mingw64) basic_machine=x86_64-pc - os=mingw64 + basic_os=mingw64 ;; mingw32) basic_machine=i686-pc - os=mingw32 + basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown - os=mingw32ce + basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k - os=coff + basic_os=coff ;; morphos) basic_machine=powerpc-unknown - os=morphos + basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown - os=moxiebox + basic_os=moxiebox ;; msdos) basic_machine=i386-pc - os=msdos + basic_os=msdos ;; msys) basic_machine=i686-pc - os=msys + basic_os=msys ;; mvs) basic_machine=i370-ibm - os=mvs + basic_os=mvs ;; nacl) basic_machine=le32-unknown - os=nacl + basic_os=nacl ;; ncr3000) basic_machine=i486-ncr - os=sysv4 + basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc - os=netbsd + basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel - os=linux + basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony - os=newsos + basic_os=newsos ;; news1000) basic_machine=m68030-sony - os=newsos + basic_os=newsos ;; necv70) basic_machine=v70-nec - os=sysv + basic_os=sysv ;; nh3000) basic_machine=m68k-harris - os=cxux + basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris - os=cxux + basic_os=cxux ;; nindy960) basic_machine=i960-intel - os=nindy + basic_os=nindy ;; mon960) basic_machine=i960-intel - os=mon960 + basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq - os=nonstopux + basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm - os=os400 + basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson - os=ose + basic_os=ose ;; os68k) basic_machine=m68k-none - os=os68k + basic_os=os68k ;; paragon) basic_machine=i860-intel - os=osf + basic_os=osf ;; parisc) basic_machine=hppa-unknown - os=linux + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp ;; pw32) basic_machine=i586-unknown - os=pw32 + basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc - os=rdos + basic_os=rdos ;; rdos32) basic_machine=i386-pc - os=rdos + basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k - os=coff + basic_os=coff ;; sa29200) basic_machine=a29k-amd - os=udi + basic_os=udi ;; sei) basic_machine=mips-sei - os=seiux + basic_os=seiux ;; sequent) basic_machine=i386-sequent - os= + basic_os= ;; sps7) basic_machine=m68k-bull - os=sysv2 + basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem - os= + basic_os= ;; stratus) basic_machine=i860-stratus - os=sysv4 + basic_os=sysv4 ;; sun2) basic_machine=m68000-sun - os= + basic_os= ;; sun2os3) basic_machine=m68000-sun - os=sunos3 + basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun - os=sunos4 + basic_os=sunos4 ;; sun3) basic_machine=m68k-sun - os= + basic_os= ;; sun3os3) basic_machine=m68k-sun - os=sunos3 + basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun - os=sunos4 + basic_os=sunos4 ;; sun4) basic_machine=sparc-sun - os= + basic_os= ;; sun4os3) basic_machine=sparc-sun - os=sunos3 + basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun - os=sunos4 + basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun - os=solaris2 + basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun - os= + basic_os= ;; sv1) basic_machine=sv1-cray - os=unicos + basic_os=unicos ;; symmetry) basic_machine=i386-sequent - os=dynix + basic_os=dynix ;; t3e) basic_machine=alphaev5-cray - os=unicos + basic_os=unicos ;; t90) basic_machine=t90-cray - os=unicos + basic_os=unicos ;; toad1) basic_machine=pdp10-xkl - os=tops20 + basic_os=tops20 ;; tpf) basic_machine=s390x-ibm - os=tpf + basic_os=tpf ;; udi29k) basic_machine=a29k-amd - os=udi + basic_os=udi ;; ultra3) basic_machine=a29k-nyu - os=sym1 + basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec - os=none + basic_os=none ;; vaxv) basic_machine=vax-dec - os=sysv + basic_os=sysv ;; vms) basic_machine=vax-dec - os=vms + basic_os=vms ;; vsta) basic_machine=i386-pc - os=vsta + basic_os=vsta ;; vxworks960) basic_machine=i960-wrs - os=vxworks + basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs - os=vxworks + basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs - os=vxworks + basic_os=vxworks ;; xbox) basic_machine=i686-pc - os=mingw32 + basic_os=mingw32 ;; ymp) basic_machine=ymp-cray - os=unicos + basic_os=unicos ;; *) basic_machine=$1 - os= + basic_os= ;; esac ;; @@ -683,17 +686,17 @@ case $basic_machine in bluegene*) cpu=powerpc vendor=ibm - os=cnk + basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec - os=tops10 + basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec - os=tops20 + basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) @@ -703,7 +706,7 @@ case $basic_machine in dpx2*) cpu=m68k vendor=bull - os=sysv3 + basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k @@ -712,7 +715,7 @@ case $basic_machine in elxsi) cpu=elxsi vendor=elxsi - os=${os:-bsd} + basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 @@ -725,7 +728,7 @@ case $basic_machine in h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi - os=hiuxwe2 + basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 @@ -766,38 +769,38 @@ case $basic_machine in vendor=hp ;; i*86v32) - cpu=`echo "$1" | sed -e 's/86.*/86/'` + cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc - os=sysv32 + basic_os=sysv32 ;; i*86v4*) - cpu=`echo "$1" | sed -e 's/86.*/86/'` + cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc - os=sysv4 + basic_os=sysv4 ;; i*86v) - cpu=`echo "$1" | sed -e 's/86.*/86/'` + cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc - os=sysv + basic_os=sysv ;; i*86sol2) - cpu=`echo "$1" | sed -e 's/86.*/86/'` + cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc - os=solaris2 + basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray - os=${os:-unicos} + basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi - case $os in + case $basic_os in irix*) ;; *) - os=irix4 + basic_os=irix4 ;; esac ;; @@ -808,26 +811,26 @@ case $basic_machine in *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari - os=mint + basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony - os=newsos + basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next - case $os in + case $basic_os in openstep*) ;; nextstep*) ;; ns2*) - os=nextstep2 + basic_os=nextstep2 ;; *) - os=nextstep3 + basic_os=nextstep3 ;; esac ;; @@ -838,12 +841,12 @@ case $basic_machine in op50n-* | op60c-*) cpu=hppa1.1 vendor=oki - os=proelf + basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi - os=hiuxwe2 + basic_os=hiuxwe2 ;; pbd) cpu=sparc @@ -880,12 +883,12 @@ case $basic_machine in sde) cpu=mipsisa32 vendor=sde - os=${os:-elf} + basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs - os=vxworks + basic_os=vxworks ;; tower | tower-32) cpu=m68k @@ -902,7 +905,7 @@ case $basic_machine in w89k-*) cpu=hppa1.1 vendor=winbond - os=proelf + basic_os=proelf ;; none) cpu=none @@ -914,7 +917,7 @@ case $basic_machine in ;; leon-*|leon[3-9]-*) cpu=sparc - vendor=`echo "$basic_machine" | sed 's/-.*//'` + vendor=$(echo "$basic_machine" | sed 's/-.*//') ;; *-*) @@ -955,11 +958,11 @@ case $cpu-$vendor in # some cases the only manufacturer, in others, it is the most popular. craynv-unknown) vendor=cray - os=${os:-unicosmp} + basic_os=${basic_os:-unicosmp} ;; c90-unknown | c90-cray) vendor=cray - os=${os:-unicos} + basic_os=${Basic_os:-unicos} ;; fx80-unknown) vendor=alliant @@ -1003,7 +1006,7 @@ case $cpu-$vendor in dpx20-unknown | dpx20-bull) cpu=rs6000 vendor=bull - os=${os:-bosx} + basic_os=${basic_os:-bosx} ;; # Here we normalize CPU types irrespective of the vendor @@ -1012,7 +1015,7 @@ case $cpu-$vendor in ;; blackfin-*) cpu=bfin - os=linux + basic_os=linux ;; c54x-*) cpu=tic54x @@ -1025,7 +1028,7 @@ case $cpu-$vendor in ;; e500v[12]-*) cpu=powerpc - os=$os"spe" + basic_os=${basic_os}"spe" ;; mips3*-*) cpu=mips64 @@ -1035,7 +1038,7 @@ case $cpu-$vendor in ;; m68knommu-*) cpu=m68k - os=linux + basic_os=linux ;; m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) cpu=s12z @@ -1045,7 +1048,7 @@ case $cpu-$vendor in ;; parisc-*) cpu=hppa - os=linux + basic_os=linux ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) cpu=i586 @@ -1081,7 +1084,7 @@ case $cpu-$vendor in cpu=mipsisa64sb1el ;; sh5e[lb]-*) - cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` + cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/') ;; spur-*) cpu=spur @@ -1099,13 +1102,16 @@ case $cpu-$vendor in cpu=x86_64 ;; xscale-* | xscalee[bl]-*) - cpu=`echo "$cpu" | sed 's/^xscale/arm/'` + cpu=$(echo "$cpu" | sed 's/^xscale/arm/') + ;; + arm64-*) + cpu=aarch64 ;; # Recognize the canonical CPU Types that limit and/or modify the # company names they are paired with. cr16-*) - os=${os:-elf} + basic_os=${basic_os:-elf} ;; crisv32-* | etraxfs*-*) cpu=crisv32 @@ -1116,7 +1122,7 @@ case $cpu-$vendor in vendor=axis ;; crx-*) - os=${os:-elf} + basic_os=${basic_os:-elf} ;; neo-tandem) cpu=neo @@ -1138,16 +1144,12 @@ case $cpu-$vendor in cpu=nsx vendor=tandem ;; - s390-*) - cpu=s390 - vendor=ibm - ;; - s390x-*) - cpu=s390x - vendor=ibm + mipsallegrexel-sony) + cpu=mipsallegrexel + vendor=sony ;; tile*-*) - os=${os:-linux-gnu} + basic_os=${basic_os:-linux-gnu} ;; *) @@ -1164,7 +1166,7 @@ case $cpu-$vendor in | am33_2.0 \ | amdgcn \ | arc | arceb \ - | arm | arm[lb]e | arme[lb] | armv* \ + | arm | arm[lb]e | arme[lb] | armv* \ | avr | avr32 \ | asmjs \ | ba \ @@ -1183,6 +1185,7 @@ case $cpu-$vendor in | k1om \ | le32 | le64 \ | lm32 \ + | loongarch32 | loongarch64 | loongarchx32 \ | m32c | m32r | m32rle \ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ @@ -1227,8 +1230,9 @@ case $cpu-$vendor in | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ | pru \ | pyramid \ - | riscv | riscv32 | riscv64 \ + | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ | rl78 | romp | rs6000 | rx \ + | s390 | s390x \ | score \ | sh | shl \ | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ @@ -1238,6 +1242,7 @@ case $cpu-$vendor in | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ | spu \ | tahoe \ + | thumbv7* \ | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ | tron \ | ubicom32 \ @@ -1275,8 +1280,47 @@ esac # Decode manufacturer-specific aliases for certain operating systems. -if [ x$os != x ] +if test x$basic_os != x then + +# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just +# set os. +case $basic_os in + gnu/linux*) + kernel=linux + os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|') + ;; + os2-emx) + kernel=os2 + os=$(echo $basic_os | sed -e 's|os2-emx|emx|') + ;; + nto-qnx*) + kernel=nto + os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|') + ;; + *-*) + # shellcheck disable=SC2162 + IFS="-" read kernel os <&2 - exit 1 + # No normalization, but not necessarily accepted, that comes below. ;; esac + else # Here we handle the default operating systems that come with various machines. @@ -1528,6 +1499,7 @@ else # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. +kernel= case $cpu-$vendor in score-*) os=elf @@ -1539,7 +1511,8 @@ case $cpu-$vendor in os=riscix1.2 ;; arm*-rebel) - os=linux + kernel=linux + os=gnu ;; arm*-semi) os=aout @@ -1705,84 +1678,178 @@ case $cpu-$vendor in os=none ;; esac + fi +# Now, validate our (potentially fixed-up) OS. +case $os in + # Sometimes we do "kernel-libc", so those need to count as OSes. + musl* | newlib* | uclibc*) + ;; + # Likewise for "kernel-abi" + eabi* | gnueabi*) + ;; + # VxWorks passes extra cpu info in the 4th filed. + simlinux | simwindows | spe) + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ + | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ + | hiux* | abug | nacl* | netware* | windows* \ + | os9* | macos* | osx* | ios* \ + | mpw* | magic* | mmixware* | mon960* | lnews* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* | twizzler* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ + | mirbsd* | netbsd* | dicos* | openedition* | ose* \ + | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \ + | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ + | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ + | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | udi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* | serenity* \ + | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | mint* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ + | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ + | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*) + ;; + # This one is extra strict with allowed versions + sco3.2v2 | sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + none) + ;; + *) + echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2 + exit 1 + ;; +esac + +# As a final step for OS-related things, validate the OS-kernel combination +# (given a valid OS), if there is a kernel. +case $kernel-$os in + linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* ) + ;; + uclinux-uclibc* ) + ;; + -dietlibc* | -newlib* | -musl* | -uclibc* ) + # These are just libc implementations, not actual OSes, and thus + # require a kernel. + echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 + exit 1 + ;; + kfreebsd*-gnu* | kopensolaris*-gnu*) + ;; + vxworks-simlinux | vxworks-simwindows | vxworks-spe) + ;; + nto-qnx*) + ;; + os2-emx) + ;; + *-eabi* | *-gnueabi*) + ;; + -*) + # Blank kernel with real OS is always fine. + ;; + *-*) + echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 + exit 1 + ;; +esac + # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) - case $os in - riscix*) + case $cpu-$os in + *-riscix*) vendor=acorn ;; - sunos*) + *-sunos*) vendor=sun ;; - cnk*|-aix*) + *-cnk* | *-aix*) vendor=ibm ;; - beos*) + *-beos*) vendor=be ;; - hpux*) + *-hpux*) vendor=hp ;; - mpeix*) + *-mpeix*) vendor=hp ;; - hiux*) + *-hiux*) vendor=hitachi ;; - unos*) + *-unos*) vendor=crds ;; - dgux*) + *-dgux*) vendor=dg ;; - luna*) + *-luna*) vendor=omron ;; - genix*) + *-genix*) vendor=ns ;; - clix*) + *-clix*) vendor=intergraph ;; - mvs* | opened*) + *-mvs* | *-opened*) + vendor=ibm + ;; + *-os400*) vendor=ibm ;; - os400*) + s390-* | s390x-*) vendor=ibm ;; - ptx*) + *-ptx*) vendor=sequent ;; - tpf*) + *-tpf*) vendor=ibm ;; - vxsim* | vxworks* | windiss*) + *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; - aux*) + *-aux*) vendor=apple ;; - hms*) + *-hms*) vendor=hitachi ;; - mpw* | macos*) + *-mpw* | *-macos*) vendor=apple ;; - *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) + *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; - vos*) + *-vos*) vendor=stratus ;; esac ;; esac -echo "$cpu-$vendor-$os" +echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: From e014d25deade08df082d2b37de45adb0c984f563 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Wed, 21 Apr 2021 11:12:04 -0400 Subject: [PATCH 153/671] fix silly perl error in commit d064afc720 --- src/test/perl/PostgresNode.pm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index 8394c57d3f872..685dee6fab54d 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -1344,8 +1344,7 @@ sub get_free_port if ($found == 1) { foreach my $addr (qw(127.0.0.1), - $use_tcp ? qw(127.0.0.2 127.0.0.3 0.0.0.0) : ()) - $use_tcp && $TestLib::windows_os + ($use_tcp && $TestLib::windows_os) ? qw(127.0.0.2 127.0.0.3 0.0.0.0) : ()) { From 7b357cc6ae553c0ecacdc11b2e5278b7bf477dba Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Wed, 21 Apr 2021 18:12:05 -0400 Subject: [PATCH 154/671] Don't add a redundant constraint when detaching a partition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On ALTER TABLE .. DETACH CONCURRENTLY, we add a new table constraint that duplicates the partition constraint. But if the partition already has another constraint that implies that one, then that's unnecessary. We were already avoiding the addition of a duplicate constraint if there was an exact 'equal' match -- this just improves the quality of the check. Author: Justin Pryzby Reviewed-by: Álvaro Herrera Discussion: https://postgr.es/m/20210410184226.GY6592@telsasoft.com --- src/backend/commands/tablecmds.c | 61 +++++++++++------------ src/test/regress/expected/alter_table.out | 20 ++++++++ src/test/regress/sql/alter_table.sql | 6 +++ 3 files changed, 54 insertions(+), 33 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 096a6f289155f..97cc9fd6eca39 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -17915,47 +17915,42 @@ ATExecDetachPartitionFinalize(Relation rel, RangeVar *name) * DetachAddConstraintIfNeeded * Subroutine for ATExecDetachPartition. Create a constraint that * takes the place of the partition constraint, but avoid creating - * a dupe if an equivalent constraint already exists. + * a dupe if an constraint already exists which implies the needed + * constraint. */ static void DetachAddConstraintIfNeeded(List **wqueue, Relation partRel) { - AlteredTableInfo *tab; - Expr *constraintExpr; - TupleDesc td = RelationGetDescr(partRel); - Constraint *n; + List *constraintExpr; - constraintExpr = make_ands_explicit(RelationGetPartitionQual(partRel)); + constraintExpr = RelationGetPartitionQual(partRel); + constraintExpr = (List *) eval_const_expressions(NULL, (Node *) constraintExpr); - /* If an identical constraint exists, we don't need to create one */ - if (td->constr && td->constr->num_check > 0) + /* + * Avoid adding a new constraint if the needed constraint is implied by an + * existing constraint + */ + if (!PartConstraintImpliedByRelConstraint(partRel, constraintExpr)) { - for (int i = 0; i < td->constr->num_check; i++) - { - Node *thisconstr; - - thisconstr = stringToNode(td->constr->check[i].ccbin); - - if (equal(constraintExpr, thisconstr)) - return; - } + AlteredTableInfo *tab; + Constraint *n; + + tab = ATGetQueueEntry(wqueue, partRel); + + /* Add constraint on partition, equivalent to the partition constraint */ + n = makeNode(Constraint); + n->contype = CONSTR_CHECK; + n->conname = NULL; + n->location = -1; + n->is_no_inherit = false; + n->raw_expr = NULL; + n->cooked_expr = nodeToString(make_ands_explicit(constraintExpr)); + n->initially_valid = true; + n->skip_validation = true; + /* It's a re-add, since it nominally already exists */ + ATAddCheckConstraint(wqueue, tab, partRel, n, + true, false, true, ShareUpdateExclusiveLock); } - - tab = ATGetQueueEntry(wqueue, partRel); - - /* Add constraint on partition, equivalent to the partition constraint */ - n = makeNode(Constraint); - n->contype = CONSTR_CHECK; - n->conname = NULL; - n->location = -1; - n->is_no_inherit = false; - n->raw_expr = NULL; - n->cooked_expr = nodeToString(constraintExpr); - n->initially_valid = true; - n->skip_validation = true; - /* It's a re-add, since it nominally already exists */ - ATAddCheckConstraint(wqueue, tab, partRel, n, - true, false, true, ShareUpdateExclusiveLock); } /* diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out index ec14b060a637c..f81bdf513b6bf 100644 --- a/src/test/regress/expected/alter_table.out +++ b/src/test/regress/expected/alter_table.out @@ -4191,6 +4191,26 @@ ALTER TABLE range_parted2 DETACH PARTITION part_rp CONCURRENTLY; Partition key: RANGE (a) Number of partitions: 0 +-- constraint should be created +\d part_rp + Table "public.part_rp" + Column | Type | Collation | Nullable | Default +--------+---------+-----------+----------+--------- + a | integer | | | +Check constraints: + "part_rp_a_check" CHECK (a IS NOT NULL AND a >= 0 AND a < 100) + +CREATE TABLE part_rp100 PARTITION OF range_parted2 (CHECK (a>=123 AND a<133 AND a IS NOT NULL)) FOR VALUES FROM (100) to (200); +ALTER TABLE range_parted2 DETACH PARTITION part_rp100 CONCURRENTLY; +-- redundant constraint should not be created +\d part_rp100 + Table "public.part_rp100" + Column | Type | Collation | Nullable | Default +--------+---------+-----------+----------+--------- + a | integer | | | +Check constraints: + "part_rp100_a_check" CHECK (a >= 123 AND a < 133 AND a IS NOT NULL) + DROP TABLE range_parted2; -- Check ALTER TABLE commands for partitioned tables and partitions -- cannot add/drop column to/from *only* the parent diff --git a/src/test/regress/sql/alter_table.sql b/src/test/regress/sql/alter_table.sql index 7a9c9252dc0ad..dc0200adcb81f 100644 --- a/src/test/regress/sql/alter_table.sql +++ b/src/test/regress/sql/alter_table.sql @@ -2696,6 +2696,12 @@ DROP TABLE part_rpd; -- works fine ALTER TABLE range_parted2 DETACH PARTITION part_rp CONCURRENTLY; \d+ range_parted2 +-- constraint should be created +\d part_rp +CREATE TABLE part_rp100 PARTITION OF range_parted2 (CHECK (a>=123 AND a<133 AND a IS NOT NULL)) FOR VALUES FROM (100) to (200); +ALTER TABLE range_parted2 DETACH PARTITION part_rp100 CONCURRENTLY; +-- redundant constraint should not be created +\d part_rp100 DROP TABLE range_parted2; -- Check ALTER TABLE commands for partitioned tables and partitions From 7c298c6573a0f181963ddcb40c850fa9c7da0ada Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Wed, 21 Apr 2021 18:36:12 -0400 Subject: [PATCH 155/671] Add comment about extract_autovac_opts not holding lock Per observation from Tom Lane. Discussion: https://postgr.es/m/1901125.1617904665@sss.pgh.pa.us --- src/backend/postmaster/autovacuum.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 83c584ddc8cd4..d516df0ac5c70 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -2783,6 +2783,11 @@ perform_work_item(AutoVacuumWorkItem *workitem) * * Given a relation's pg_class tuple, return the AutoVacOpts portion of * reloptions, if set; otherwise, return NULL. + * + * Note: callers do not have a relation lock on the table at this point, + * so the table could have been dropped, and its catalog rows gone, after + * we acquired the pg_class row. If pg_class had a TOAST table, this would + * be a risk; fortunately, it doesn't. */ static AutoVacOpts * extract_autovac_opts(HeapTuple tup, TupleDesc pg_class_desc) From 1599e7b375127cac81b539d2c69d3faf7598509b Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 22 Apr 2021 09:47:43 +0900 Subject: [PATCH 156/671] doc: Move parallel_leader_participation to its correct category parallel_leader_participation got introduced in e5253fd, where it was listed under RESOURCES_ASYNCHRONOUS in guc.c, but the documentation did not reflect that and listed it with the other planner-related options. This commit fixes this inconsistency as the parameter is intended to be an asynchronous one. While on it, reorganize a bit the section dedicated to asynchronous parameters, backend_flush_after being moved first to do better in terms of alphabetical order of the options listed. Reported-by: Yanliang Lei Author: Bharath Rupireddy Discussion: https://postgr.es/m/16972-42d4b0c15aa1d5f5@postgresql.org --- doc/src/sgml/config.sgml | 88 ++++++++++++++++++++-------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index dd7ebe7a9dad2..cf75d913ce97d 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -2383,6 +2383,36 @@ include_dir 'conf.d' Asynchronous Behavior + + backend_flush_after (integer) + + backend_flush_after configuration parameter + + + + + Whenever more than this amount of data has + been written by a single backend, attempt to force the OS to issue + these writes to the underlying storage. Doing so will limit the + amount of dirty data in the kernel's page cache, reducing the + likelihood of stalls when an fsync is issued at the end of a + checkpoint, or when the OS writes data back in larger batches in the + background. Often that will result in greatly reduced transaction + latency, but there also are some cases, especially with workloads + that are bigger than , but smaller + than the OS's page cache, where performance might degrade. This + setting may have no effect on some platforms. + If this value is specified without units, it is taken as blocks, + that is BLCKSZ bytes, typically 8kB. + The valid range is + between 0, which disables forced writeback, + and 2MB. The default is 0, i.e., no + forced writeback. (If BLCKSZ is not 8kB, + the maximum value scales proportionally to it.) + + + + effective_io_concurrency (integer) @@ -2579,32 +2609,25 @@ include_dir 'conf.d' - - backend_flush_after (integer) + + + parallel_leader_participation (boolean) - backend_flush_after configuration parameter + parallel_leader_participation configuration parameter - Whenever more than this amount of data has - been written by a single backend, attempt to force the OS to issue - these writes to the underlying storage. Doing so will limit the - amount of dirty data in the kernel's page cache, reducing the - likelihood of stalls when an fsync is issued at the end of a - checkpoint, or when the OS writes data back in larger batches in the - background. Often that will result in greatly reduced transaction - latency, but there also are some cases, especially with workloads - that are bigger than , but smaller - than the OS's page cache, where performance might degrade. This - setting may have no effect on some platforms. - If this value is specified without units, it is taken as blocks, - that is BLCKSZ bytes, typically 8kB. - The valid range is - between 0, which disables forced writeback, - and 2MB. The default is 0, i.e., no - forced writeback. (If BLCKSZ is not 8kB, - the maximum value scales proportionally to it.) + Allows the leader process to execute the query plan under + Gather and Gather Merge nodes + instead of waiting for worker processes. The default is + on. Setting this value to off + reduces the likelihood that workers will become blocked because the + leader is not reading tuples fast enough, but requires the leader + process to wait for worker processes to start up before the first + tuples can be produced. The degree to which the leader can help or + hinder performance depends on the plan type, number of workers and + query duration. @@ -5889,29 +5912,6 @@ SELECT * FROM parent WHERE key = 2400; - - - parallel_leader_participation (boolean) - - parallel_leader_participation configuration parameter - - - - - Allows the leader process to execute the query plan under - Gather and Gather Merge nodes - instead of waiting for worker processes. The default is - on. Setting this value to off - reduces the likelihood that workers will become blocked because the - leader is not reading tuples fast enough, but requires the leader - process to wait for worker processes to start up before the first - tuples can be produced. The degree to which the leader can help or - hinder performance depends on the plan type, number of workers and - query duration. - - - - plan_cache_mode (enum) From f3b141c482552a57866c72919007d6481cd59ee3 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 22 Apr 2021 12:48:54 +0900 Subject: [PATCH 157/671] Fix relation leak for subscribers firing triggers in logical replication Creating a trigger on a relation to which an apply operation is triggered would cause a relation leak once the change gets committed, as the executor would miss that the relation needs to be closed beforehand. This issue got introduced with the refactoring done in 1375422c, where it becomes necessary to track relations within es_opened_result_relations to make sure that they are closed. We have discussed using ExecInitResultRelation() coupled with ExecCloseResultRelations() for the relations in need of tracking by the apply operations in the subscribers, which would simplify greatly the opening and closing of indexes, but this requires a larger rework and reorganization of the worker code, particularly for the tuple routing part. And that's not really welcome post feature freeze. So, for now, settle down to the same solution as TRUNCATE which is to fill in es_opened_result_relations with the relation opened, to make sure that ExecGetTriggerResultRel() finds them and that they get closed. The code is lightly refactored so as a relation is not registered three times for each DML code path, making the whole a bit easier to follow. Reported-by: Tang Haiying, Shi Yu, Hou Zhijie Author: Amit Langote, Masahiko Sawada, Hou Zhijie Reviewed-by: Amit Kapila, Michael Paquier Discussion: https://postgr.es/m/OS0PR01MB611383FA0FE92EB9DE21946AFB769@OS0PR01MB6113.jpnprd01.prod.outlook.com --- src/backend/replication/logical/worker.c | 73 +++++++++++++++--------- 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index fb3ba5c4159de..d09703f7acd1f 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -338,10 +338,13 @@ handle_streamed_transaction(LogicalRepMsgType action, StringInfo s) * Executor state preparation for evaluation of constraint expressions, * indexes and triggers. * - * This is based on similar code in copy.c + * resultRelInfo is a ResultRelInfo for the relation to be passed to the + * executor routines. The caller must open and close any indexes to be + * updated independently of the relation registered here. */ static EState * -create_estate_for_relation(LogicalRepRelMapEntry *rel) +create_estate_for_relation(LogicalRepRelMapEntry *rel, + ResultRelInfo **resultRelInfo) { EState *estate; RangeTblEntry *rte; @@ -355,6 +358,27 @@ create_estate_for_relation(LogicalRepRelMapEntry *rel) rte->rellockmode = AccessShareLock; ExecInitRangeTable(estate, list_make1(rte)); + *resultRelInfo = makeNode(ResultRelInfo); + + /* + * Use Relation opened by logicalrep_rel_open() instead of opening it + * again. + */ + InitResultRelInfo(*resultRelInfo, rel->localrel, 1, NULL, 0); + + /* + * We put the ResultRelInfo in the es_opened_result_relations list, even + * though we don't populate the es_result_relations array. That's a bit + * bogus, but it's enough to make ExecGetTriggerResultRel() find them. + * Also, because we did not open the Relation ourselves here, there is no + * need to worry about closing it. + * + * ExecOpenIndices() is not called here either, each execution path doing + * an apply operation being responsible for that. + */ + estate->es_opened_result_relations = + lappend(estate->es_opened_result_relations, *resultRelInfo); + estate->es_output_cid = GetCurrentCommandId(true); /* Prepare to catch AFTER triggers. */ @@ -363,6 +387,21 @@ create_estate_for_relation(LogicalRepRelMapEntry *rel) return estate; } +/* + * Finish any operations related to the executor state created by + * create_estate_for_relation(). + */ +static void +finish_estate(EState *estate) +{ + /* Handle any queued AFTER triggers. */ + AfterTriggerEndQuery(estate); + + /* Cleanup. */ + ExecResetTupleTable(estate->es_tupleTable, false); + FreeExecutorState(estate); +} + /* * Executes default values for columns for which we can't map to remote * relation columns. @@ -1168,12 +1207,10 @@ apply_handle_insert(StringInfo s) } /* Initialize the executor state. */ - estate = create_estate_for_relation(rel); + estate = create_estate_for_relation(rel, &resultRelInfo); remoteslot = ExecInitExtraTupleSlot(estate, RelationGetDescr(rel->localrel), &TTSOpsVirtual); - resultRelInfo = makeNode(ResultRelInfo); - InitResultRelInfo(resultRelInfo, rel->localrel, 1, NULL, 0); /* Input functions may need an active snapshot, so get one */ PushActiveSnapshot(GetTransactionSnapshot()); @@ -1194,11 +1231,7 @@ apply_handle_insert(StringInfo s) PopActiveSnapshot(); - /* Handle queued AFTER triggers. */ - AfterTriggerEndQuery(estate); - - ExecResetTupleTable(estate->es_tupleTable, false); - FreeExecutorState(estate); + finish_estate(estate); logicalrep_rel_close(rel, NoLock); @@ -1293,12 +1326,10 @@ apply_handle_update(StringInfo s) check_relation_updatable(rel); /* Initialize the executor state. */ - estate = create_estate_for_relation(rel); + estate = create_estate_for_relation(rel, &resultRelInfo); remoteslot = ExecInitExtraTupleSlot(estate, RelationGetDescr(rel->localrel), &TTSOpsVirtual); - resultRelInfo = makeNode(ResultRelInfo); - InitResultRelInfo(resultRelInfo, rel->localrel, 1, NULL, 0); /* * Populate updatedCols so that per-column triggers can fire, and so @@ -1345,11 +1376,7 @@ apply_handle_update(StringInfo s) PopActiveSnapshot(); - /* Handle queued AFTER triggers. */ - AfterTriggerEndQuery(estate); - - ExecResetTupleTable(estate->es_tupleTable, false); - FreeExecutorState(estate); + finish_estate(estate); logicalrep_rel_close(rel, NoLock); @@ -1450,12 +1477,10 @@ apply_handle_delete(StringInfo s) check_relation_updatable(rel); /* Initialize the executor state. */ - estate = create_estate_for_relation(rel); + estate = create_estate_for_relation(rel, &resultRelInfo); remoteslot = ExecInitExtraTupleSlot(estate, RelationGetDescr(rel->localrel), &TTSOpsVirtual); - resultRelInfo = makeNode(ResultRelInfo); - InitResultRelInfo(resultRelInfo, rel->localrel, 1, NULL, 0); PushActiveSnapshot(GetTransactionSnapshot()); @@ -1474,11 +1499,7 @@ apply_handle_delete(StringInfo s) PopActiveSnapshot(); - /* Handle queued AFTER triggers. */ - AfterTriggerEndQuery(estate); - - ExecResetTupleTable(estate->es_tupleTable, false); - FreeExecutorState(estate); + finish_estate(estate); logicalrep_rel_close(rel, NoLock); From 4c4eaf3d19201c5e2d9efebc590903dfaba0d3e5 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Thu, 22 Apr 2021 10:56:28 -0400 Subject: [PATCH 158/671] Make PostgresNode version aware A new PostgresVersion object type is created and this is used in PostgresNode using the output of `pg_config --version` and the result stored in the PostgresNode object. This object can be compared to other PostgresVersion objects, or to a number or string. PostgresNode is currently believed to be compatible with versions down to release 12, so PostgresNode will issue a warning if used with a version prior to that. No attempt has been made to deal with incompatibilities in older versions - that remains work to be undertaken in a subsequent development cycle. Based on code from Mark Dilger and Jehan-Guillaume de Rorthais. Discussion: https://postgr.es/m/a80421c0-3d7e-def1-bcfe-24777f15e344@dunslane.net --- src/test/perl/PostgresNode.pm | 56 +++++++++++++ src/test/perl/PostgresVersion.pm | 137 +++++++++++++++++++++++++++++++ 2 files changed, 193 insertions(+) create mode 100644 src/test/perl/PostgresVersion.pm diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index 685dee6fab54d..0eb8df5fbf0dc 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -96,6 +96,7 @@ use File::Spec; use File::stat qw(stat); use File::Temp (); use IPC::Run; +use PostgresVersion; use RecursiveCopy; use Socket; use Test::More; @@ -350,6 +351,8 @@ sub info my $_info = ''; open my $fh, '>', \$_info or die; print $fh "Name: " . $self->name . "\n"; + print $fh "Version: " . $self->{_pg_version} . "\n" + if $self->{_pg_version}; print $fh "Data directory: " . $self->data_dir . "\n"; print $fh "Backup directory: " . $self->backup_dir . "\n"; print $fh "Archive directory: " . $self->archive_dir . "\n"; @@ -1196,9 +1199,62 @@ sub get_new_node # Add node to list of nodes push(@all_nodes, $node); + $node->_set_pg_version; + + my $v = $node->{_pg_version}; + + carp("PostgresNode isn't fully compatible with version " . $v) + if $v < 12; + return $node; } +# Private routine to run the pg_config binary found in our environment (or in +# our install_path, if we have one), and set the version from it +# +sub _set_pg_version +{ + my ($self) = @_; + my $inst = $self->{_install_path}; + my $pg_config = "pg_config"; + + if (defined $inst) + { + # If the _install_path is invalid, our PATH variables might find an + # unrelated pg_config executable elsewhere. Sanity check the + # directory. + BAIL_OUT("directory not found: $inst") + unless -d $inst; + + # If the directory exists but is not the root of a postgresql + # installation, or if the user configured using + # --bindir=$SOMEWHERE_ELSE, we're not going to find pg_config, so + # complain about that, too. + $pg_config = "$inst/bin/pg_config"; + BAIL_OUT("pg_config not found: $pg_config") + unless -e $pg_config; + BAIL_OUT("pg_config not executable: $pg_config") + unless -x $pg_config; + + # Leave $pg_config install_path qualified, to be sure we get the right + # version information, below, or die trying + } + + local %ENV = $self->_get_env(); + + # We only want the version field + open my $fh, "-|", $pg_config, "--version" + or + BAIL_OUT("$pg_config failed: $!"); + my $version_line = <$fh>; + close $fh or die; + + $self->{_pg_version} = PostgresVersion->new($version_line); + + BAIL_OUT("could not parse pg_config --version output: $version_line") + unless defined $self->{_pg_version}; +} + # Private routine to return a copy of the environment with the PATH and # (DY)LD_LIBRARY_PATH correctly set when there is an install path set for # the node. diff --git a/src/test/perl/PostgresVersion.pm b/src/test/perl/PostgresVersion.pm new file mode 100644 index 0000000000000..14750365acfd9 --- /dev/null +++ b/src/test/perl/PostgresVersion.pm @@ -0,0 +1,137 @@ +############################################################################ +# +# PostgresVersion.pm +# +# Module encapsulating Postgres Version numbers +# +# Copyright (c) 2021, PostgreSQL Global Development Group +# +############################################################################ + +=pod + +=head1 NAME + +PostgresVersion - class representing PostgreSQL version numbers + +=head1 SYNOPSIS + + use PostgresVersion; + + my $version = PostgresVersion->new($version_arg); + + # compare two versions + my $bool = $version1 <= $version2; + + # or compare with a number + $bool = $version < 12; + + # or with a string + $bool = $version lt "13.1"; + + # interpolate in a string + my $stringyval = "version: $version"; + +=head1 DESCRIPTION + +PostgresVersion encapsulated Postgres version numbers, providing parsing +of common version formats and comparison operations. + +=cut + +package PostgresVersion; + +use strict; +use warnings; + +use Scalar::Util qw(blessed); + +use overload + '<=>' => \&_version_cmp, + 'cmp' => \&_version_cmp, + '""' => \&_stringify; + +=pod + +=head1 METHODS + +=over + +=item PostgresVersion->new($version) + +Create a new PostgresVersion instance. + +The argument can be a number like 12, or a string like '12.2' or the output +of a Postgres command like `psql --version` or `pg_config --version`; + +=back + +=cut + +sub new +{ + my $class = shift; + my $arg = shift; + + # Accept standard formats, in case caller has handed us the output of a + # postgres command line tool + $arg = $1 + if ($arg =~ m/\(?PostgreSQL\)? (\d+(?:\.\d+)*(?:devel)?)/); + + # Split into an array + my @result = split(/\./, $arg); + + # Treat development versions as having a minor/micro version one less than + # the first released version of that branch. + if ($result[$#result] =~ m/^(\d+)devel$/) + { + pop(@result); + push(@result, $1, -1); + } + + my $res = [@result]; + bless $res, $class; + return $res; +} + + +# Routine which compares the _pg_version_array obtained for the two +# arguments and returns -1, 0, or 1, allowing comparison between two +# PostgresVersion objects or a PostgresVersion and a version string or number. +# +# If the second argument is not a blessed object we call the constructor +# to make one. +# +# Because we're overloading '<=>' and 'cmp' this function supplies us with +# all the comparison operators ('<' and friends, 'gt' and friends) +# +sub _version_cmp +{ + my ($a, $b) = @_; + + $b = __PACKAGE__->new($b) unless blessed($b); + + for (my $idx = 0;; $idx++) + { + return 0 unless (defined $a->[$idx] && defined $b->[$idx]); + return $a->[$idx] <=> $b->[$idx] + if ($a->[$idx] <=> $b->[$idx]); + } +} + +# Render the version number in the standard "joined by dots" notation if +# interpolated into a string. Put back 'devel' if we previously turned it +# into a -1. +sub _stringify +{ + my $self = shift; + my @sections = @$self; + if ($sections[-1] == -1) + { + pop @sections; + $sections[-1] = "$sections[-1]devel"; + } + return join('.', @sections); +} + +1; From 82b13dbc4d4b46f71ca95ce1cc15c425deff5957 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 22 Apr 2021 14:47:26 -0400 Subject: [PATCH 159/671] Doc: document the tie-breaking behavior of the round() function. Back-patch to v13; the table layout in older branches is unfriendly to adding such details. Laurenz Albe Discussion: https://postgr.es/m/161881920775.685.12293798764864559341@wrigleys.postgresql.org --- doc/src/sgml/func.sgml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index d201163407527..5bba13973f3d1 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -1568,7 +1568,10 @@ repeat('Pg', 4) PgPgPgPg double precision - Rounds to nearest integer + Rounds to nearest integer. For numeric, ties are + broken by rounding away from zero. For double precision, + the tie-breaking behavior is platform dependent, but + round to nearest even is the most common rule. round(42.4) @@ -1583,7 +1586,7 @@ repeat('Pg', 4) PgPgPgPg Rounds v to s decimal - places + places. Ties are broken by rounding away from zero. round(42.4382, 2) From 8aba9322511f718f12b618470d8c07f0ee5f0700 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 22 Apr 2021 15:13:25 -0400 Subject: [PATCH 160/671] Fix relcache inconsistency hazard in partition detach MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit During queries coming from ri_triggers.c, we need to omit partitions that are marked pending detach -- otherwise, the RI query is tricked into allowing a row into the referencing table whose corresponding row is in the detached partition. Which is bogus: once the detach operation completes, the row becomes an orphan. However, the code was not doing that in repeatable-read transactions, because relcache kept a copy of the partition descriptor that included the partition, and used it in the RI query. This commit changes the partdesc cache code to only keep descriptors that aren't dependent on a snapshot (namely: those where no detached partition exist, and those where detached partitions are included). When a partdesc-without- detached-partitions is requested, we create one afresh each time; also, those partdescs are stored in PortalContext instead of CacheMemoryContext. find_inheritance_children gets a new output *detached_exist boolean, which indicates whether any partition marked pending-detach is found. Its "include_detached" input flag is changed to "omit_detached", because that name captures desired the semantics more naturally. CreatePartitionDirectory() and RelationGetPartitionDesc() arguments are identically renamed. This was noticed because a buildfarm member that runs with relcache clobbering, which would not keep the improperly cached partdesc, broke one test, which led us to realize that the expected output of that test was bogus. This commit also corrects that expected output. Author: Amit Langote Author: Álvaro Herrera Discussion: https://postgr.es/m/3269784.1617215412@sss.pgh.pa.us --- src/backend/catalog/heap.c | 2 +- src/backend/catalog/pg_inherits.c | 63 ++++++----- src/backend/commands/indexcmds.c | 4 +- src/backend/commands/tablecmds.c | 40 +++---- src/backend/commands/trigger.c | 6 +- src/backend/executor/execPartition.c | 19 ++-- src/backend/optimizer/util/plancat.c | 2 +- src/backend/partitioning/partbounds.c | 6 +- src/backend/partitioning/partdesc.c | 100 ++++++++++++------ src/include/catalog/pg_inherits.h | 4 +- src/include/partitioning/partdesc.h | 14 ++- .../detach-partition-concurrently-4.out | 1 + 12 files changed, 160 insertions(+), 101 deletions(-) diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index ba03e8aa8f326..42ff175bc80a2 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -3840,7 +3840,7 @@ StorePartitionBound(Relation rel, Relation parent, PartitionBoundSpec *bound) * removed. */ defaultPartOid = - get_default_oid_from_partdesc(RelationGetPartitionDesc(parent, false)); + get_default_oid_from_partdesc(RelationGetPartitionDesc(parent, true)); if (OidIsValid(defaultPartOid)) CacheInvalidateRelcacheByRelid(defaultPartOid); diff --git a/src/backend/catalog/pg_inherits.c b/src/backend/catalog/pg_inherits.c index bb8b2249b1077..98bf48d1e2bb3 100644 --- a/src/backend/catalog/pg_inherits.c +++ b/src/backend/catalog/pg_inherits.c @@ -52,13 +52,19 @@ typedef struct SeenRelsEntry * then no locks are acquired, but caller must beware of race conditions * against possible DROPs of child relations. * - * include_detached says to include all partitions, even if they're marked - * detached. Passing it as false means they might or might not be included, - * depending on the visibility of the pg_inherits row for the active snapshot. + * If a partition's pg_inherits row is marked "detach pending", + * *detached_exist (if not null) is set true, otherwise it is set false. + * + * If omit_detached is true and there is an active snapshot (not the same as + * the catalog snapshot used to scan pg_inherits!) and a pg_inherits tuple + * marked "detach pending" is visible to that snapshot, then that partition is + * omitted from the output list. This makes partitions invisible depending on + * whether the transaction that marked those partitions as detached appears + * committed to the active snapshot. */ List * -find_inheritance_children(Oid parentrelId, bool include_detached, - LOCKMODE lockmode) +find_inheritance_children(Oid parentrelId, bool omit_detached, + LOCKMODE lockmode, bool *detached_exist) { List *list = NIL; Relation relation; @@ -78,6 +84,9 @@ find_inheritance_children(Oid parentrelId, bool include_detached, if (!has_subclass(parentrelId)) return NIL; + if (detached_exist) + *detached_exist = false; + /* * Scan pg_inherits and build a working array of subclass OIDs. */ @@ -99,29 +108,35 @@ find_inheritance_children(Oid parentrelId, bool include_detached, { /* * Cope with partitions concurrently being detached. When we see a - * partition marked "detach pending", we only include it in the set of - * visible partitions if caller requested all detached partitions, or - * if its pg_inherits tuple's xmin is still visible to the active - * snapshot. + * partition marked "detach pending", we omit it from the returned set + * of visible partitions if caller requested that and the tuple's xmin + * does not appear in progress to the active snapshot. (If there's no + * active snapshot set, that means we're not running a user query, so + * it's OK to always include detached partitions in that case; if the + * xmin is still running to the active snapshot, then the partition + * has not been detached yet and so we include it.) * - * The reason for this check is that we want to avoid seeing the + * The reason for this hack is that we want to avoid seeing the * partition as alive in RI queries during REPEATABLE READ or - * SERIALIZABLE transactions. (If there's no active snapshot set, - * that means we're not running a user query, so it's OK to always - * include detached partitions in that case.) + * SERIALIZABLE transactions: such queries use a different snapshot + * than the one used by regular (user) queries. */ - if (((Form_pg_inherits) GETSTRUCT(inheritsTuple))->inhdetachpending && - !include_detached && - ActiveSnapshotSet()) + if (((Form_pg_inherits) GETSTRUCT(inheritsTuple))->inhdetachpending) { - TransactionId xmin; - Snapshot snap; + if (detached_exist) + *detached_exist = true; + + if (omit_detached && ActiveSnapshotSet()) + { + TransactionId xmin; + Snapshot snap; - xmin = HeapTupleHeaderGetXmin(inheritsTuple->t_data); - snap = GetActiveSnapshot(); + xmin = HeapTupleHeaderGetXmin(inheritsTuple->t_data); + snap = GetActiveSnapshot(); - if (!XidInMVCCSnapshot(xmin, snap)) - continue; + if (!XidInMVCCSnapshot(xmin, snap)) + continue; + } } inhrelid = ((Form_pg_inherits) GETSTRUCT(inheritsTuple))->inhrelid; @@ -235,8 +250,8 @@ find_all_inheritors(Oid parentrelId, LOCKMODE lockmode, List **numparents) ListCell *lc; /* Get the direct children of this rel */ - currentchildren = find_inheritance_children(currentrel, false, - lockmode); + currentchildren = find_inheritance_children(currentrel, true, + lockmode, NULL); /* * Add to the queue only those children not already seen. This avoids diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 166374cc0c91e..3edf61993ad96 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1123,7 +1123,7 @@ DefineIndex(Oid relationId, */ if (partitioned && stmt->relation && !stmt->relation->inh) { - PartitionDesc pd = RelationGetPartitionDesc(rel, false); + PartitionDesc pd = RelationGetPartitionDesc(rel, true); if (pd->nparts != 0) flags |= INDEX_CREATE_INVALID; @@ -1180,7 +1180,7 @@ DefineIndex(Oid relationId, * * If we're called internally (no stmt->relation), recurse always. */ - partdesc = RelationGetPartitionDesc(rel, false); + partdesc = RelationGetPartitionDesc(rel, true); if ((!stmt->relation || stmt->relation->inh) && partdesc->nparts > 0) { int nparts = partdesc->nparts; diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 97cc9fd6eca39..7d00f4eb25663 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -1041,7 +1041,7 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId, */ defaultPartOid = get_default_oid_from_partdesc(RelationGetPartitionDesc(parent, - false)); + true)); if (OidIsValid(defaultPartOid)) defaultRel = table_open(defaultPartOid, AccessExclusiveLock); @@ -3507,7 +3507,7 @@ renameatt_internal(Oid myrelid, * expected_parents will only be 0 if we are not already recursing. */ if (expected_parents == 0 && - find_inheritance_children(myrelid, false, NoLock) != NIL) + find_inheritance_children(myrelid, true, NoLock, NULL) != NIL) ereport(ERROR, (errcode(ERRCODE_INVALID_TABLE_DEFINITION), errmsg("inherited column \"%s\" must be renamed in child tables too", @@ -3706,7 +3706,7 @@ rename_constraint_internal(Oid myrelid, else { if (expected_parents == 0 && - find_inheritance_children(myrelid, false, NoLock) != NIL) + find_inheritance_children(myrelid, true, NoLock, NULL) != NIL) ereport(ERROR, (errcode(ERRCODE_INVALID_TABLE_DEFINITION), errmsg("inherited constraint \"%s\" must be renamed in child tables too", @@ -6580,7 +6580,7 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, */ if (colDef->identity && recurse && - find_inheritance_children(myrelid, false, NoLock) != NIL) + find_inheritance_children(myrelid, true, NoLock, NULL) != NIL) ereport(ERROR, (errcode(ERRCODE_INVALID_TABLE_DEFINITION), errmsg("cannot recursively add identity column to table that has child tables"))); @@ -6826,7 +6826,7 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, * use find_all_inheritors to do it in one pass. */ children = - find_inheritance_children(RelationGetRelid(rel), false, lockmode); + find_inheritance_children(RelationGetRelid(rel), true, lockmode, NULL); /* * If we are told not to recurse, there had better not be any child @@ -6980,7 +6980,7 @@ ATPrepDropNotNull(Relation rel, bool recurse, bool recursing) */ if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) { - PartitionDesc partdesc = RelationGetPartitionDesc(rel, false); + PartitionDesc partdesc = RelationGetPartitionDesc(rel, true); Assert(partdesc != NULL); if (partdesc->nparts > 0 && !recurse && !recursing) @@ -7689,7 +7689,7 @@ ATPrepDropExpression(Relation rel, AlterTableCmd *cmd, bool recurse, bool recurs * resulting state can be properly dumped and restored. */ if (!recurse && - find_inheritance_children(RelationGetRelid(rel), false, lockmode)) + find_inheritance_children(RelationGetRelid(rel), true, lockmode, NULL)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("ALTER TABLE / DROP EXPRESSION must be applied to child tables too"))); @@ -8297,7 +8297,7 @@ ATExecDropColumn(List **wqueue, Relation rel, const char *colName, * use find_all_inheritors to do it in one pass. */ children = - find_inheritance_children(RelationGetRelid(rel), false, lockmode); + find_inheritance_children(RelationGetRelid(rel), true, lockmode, NULL); if (children) { @@ -8785,7 +8785,7 @@ ATAddCheckConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel, * use find_all_inheritors to do it in one pass. */ children = - find_inheritance_children(RelationGetRelid(rel), false, lockmode); + find_inheritance_children(RelationGetRelid(rel), true, lockmode, NULL); /* * Check if ONLY was specified with ALTER TABLE. If so, allow the @@ -9400,7 +9400,7 @@ addFkRecurseReferenced(List **wqueue, Constraint *fkconstraint, Relation rel, */ if (pkrel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) { - PartitionDesc pd = RelationGetPartitionDesc(pkrel, false); + PartitionDesc pd = RelationGetPartitionDesc(pkrel, true); for (int i = 0; i < pd->nparts; i++) { @@ -9534,7 +9534,7 @@ addFkRecurseReferencing(List **wqueue, Constraint *fkconstraint, Relation rel, } else if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) { - PartitionDesc pd = RelationGetPartitionDesc(rel, false); + PartitionDesc pd = RelationGetPartitionDesc(rel, true); /* * Recurse to take appropriate action on each partition; either we @@ -11318,8 +11318,8 @@ ATExecDropConstraint(Relation rel, const char *constrName, * use find_all_inheritors to do it in one pass. */ if (!is_no_inherit_constraint) - children = - find_inheritance_children(RelationGetRelid(rel), false, lockmode); + children = find_inheritance_children(RelationGetRelid(rel), true, + lockmode, NULL); else children = NIL; @@ -11703,8 +11703,8 @@ ATPrepAlterColumnType(List **wqueue, } } else if (!recursing && - find_inheritance_children(RelationGetRelid(rel), false, - NoLock) != NIL) + find_inheritance_children(RelationGetRelid(rel), true, + NoLock, NULL) != NIL) ereport(ERROR, (errcode(ERRCODE_INVALID_TABLE_DEFINITION), errmsg("type of inherited column \"%s\" must be changed in child tables too", @@ -16875,7 +16875,7 @@ QueuePartitionConstraintValidation(List **wqueue, Relation scanrel, } else if (scanrel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) { - PartitionDesc partdesc = RelationGetPartitionDesc(scanrel, false); + PartitionDesc partdesc = RelationGetPartitionDesc(scanrel, true); int i; for (i = 0; i < partdesc->nparts; i++) @@ -16935,7 +16935,7 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd, * new partition will change its partition constraint. */ defaultPartOid = - get_default_oid_from_partdesc(RelationGetPartitionDesc(rel, false)); + get_default_oid_from_partdesc(RelationGetPartitionDesc(rel, true)); if (OidIsValid(defaultPartOid)) LockRelationOid(defaultPartOid, AccessExclusiveLock); @@ -17551,7 +17551,7 @@ ATExecDetachPartition(List **wqueue, AlteredTableInfo *tab, Relation rel, * will change its partition constraint. */ defaultPartOid = - get_default_oid_from_partdesc(RelationGetPartitionDesc(rel, false)); + get_default_oid_from_partdesc(RelationGetPartitionDesc(rel, true)); if (OidIsValid(defaultPartOid)) { /* @@ -18148,7 +18148,7 @@ ATExecAttachPartitionIdx(List **wqueue, Relation parentIdx, RangeVar *name) RelationGetRelationName(partIdx)))); /* Make sure it indexes a partition of the other index's table */ - partDesc = RelationGetPartitionDesc(parentTbl, false); + partDesc = RelationGetPartitionDesc(parentTbl, true); found = false; for (i = 0; i < partDesc->nparts; i++) { @@ -18302,7 +18302,7 @@ validatePartitionedIndex(Relation partedIdx, Relation partedTbl) * If we found as many inherited indexes as the partitioned table has * partitions, we're good; update pg_index to set indisvalid. */ - if (tuples == RelationGetPartitionDesc(partedTbl, false)->nparts) + if (tuples == RelationGetPartitionDesc(partedTbl, true)->nparts) { Relation idxRel; HeapTuple newtup; diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 3421014e47158..d8393aa4de39a 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -1119,7 +1119,7 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString, */ if (partition_recurse) { - PartitionDesc partdesc = RelationGetPartitionDesc(rel, false); + PartitionDesc partdesc = RelationGetPartitionDesc(rel, true); List *idxs = NIL; List *childTbls = NIL; ListCell *l; @@ -1141,8 +1141,8 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString, ListCell *l; List *idxs = NIL; - idxs = find_inheritance_children(indexOid, false, - ShareRowExclusiveLock); + idxs = find_inheritance_children(indexOid, true, + ShareRowExclusiveLock, NULL); foreach(l, idxs) childTbls = lappend_oid(childTbls, IndexGetRelation(lfirst_oid(l), diff --git a/src/backend/executor/execPartition.c b/src/backend/executor/execPartition.c index 99780ebb9618f..8afddca73a0ec 100644 --- a/src/backend/executor/execPartition.c +++ b/src/backend/executor/execPartition.c @@ -991,19 +991,16 @@ ExecInitPartitionDispatchInfo(EState *estate, /* * For data modification, it is better that executor does not include - * partitions being detached, except in snapshot-isolation mode. This - * means that a read-committed transaction immediately gets a "no - * partition for tuple" error when a tuple is inserted into a partition - * that's being detached concurrently, but a transaction in repeatable- - * read mode can still use the partition. Note that because partition - * detach uses ShareLock on the partition (which conflicts with DML), - * we're certain that the detach won't be able to complete until any - * inserting transaction is done. + * partitions being detached, except when running in snapshot-isolation + * mode. This means that a read-committed transaction immediately gets a + * "no partition for tuple" error when a tuple is inserted into a + * partition that's being detached concurrently, but a transaction in + * repeatable-read mode can still use such a partition. */ if (estate->es_partition_directory == NULL) estate->es_partition_directory = CreatePartitionDirectory(estate->es_query_cxt, - IsolationUsesXactSnapshot()); + !IsolationUsesXactSnapshot()); oldcxt = MemoryContextSwitchTo(proute->memcxt); @@ -1571,10 +1568,10 @@ ExecCreatePartitionPruneState(PlanState *planstate, ListCell *lc; int i; - /* Executor must always include detached partitions */ + /* For data reading, executor always omits detached partitions */ if (estate->es_partition_directory == NULL) estate->es_partition_directory = - CreatePartitionDirectory(estate->es_query_cxt, true); + CreatePartitionDirectory(estate->es_query_cxt, false); n_part_hierarchies = list_length(partitionpruneinfo->prune_infos); Assert(n_part_hierarchies > 0); diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index 345c7425f6044..295ce114506ce 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -2200,7 +2200,7 @@ set_relation_partition_info(PlannerInfo *root, RelOptInfo *rel, if (root->glob->partition_directory == NULL) { root->glob->partition_directory = - CreatePartitionDirectory(CurrentMemoryContext, false); + CreatePartitionDirectory(CurrentMemoryContext, true); } partdesc = PartitionDirectoryLookup(root->glob->partition_directory, diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index 1290d45963a7b..c9c789297d4df 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -2798,7 +2798,7 @@ check_new_partition_bound(char *relname, Relation parent, PartitionBoundSpec *spec, ParseState *pstate) { PartitionKey key = RelationGetPartitionKey(parent); - PartitionDesc partdesc = RelationGetPartitionDesc(parent, true); + PartitionDesc partdesc = RelationGetPartitionDesc(parent, false); PartitionBoundInfo boundinfo = partdesc->boundinfo; int with = -1; bool overlap = false; @@ -3991,7 +3991,7 @@ get_qual_for_list(Relation parent, PartitionBoundSpec *spec) { int i; int ndatums = 0; - PartitionDesc pdesc = RelationGetPartitionDesc(parent, true); /* XXX correct? */ + PartitionDesc pdesc = RelationGetPartitionDesc(parent, false); PartitionBoundInfo boundinfo = pdesc->boundinfo; if (boundinfo) @@ -4191,7 +4191,7 @@ get_qual_for_range(Relation parent, PartitionBoundSpec *spec, if (spec->is_default) { List *or_expr_args = NIL; - PartitionDesc pdesc = RelationGetPartitionDesc(parent, true); /* XXX correct? */ + PartitionDesc pdesc = RelationGetPartitionDesc(parent, false); Oid *inhoids = pdesc->oids; int nparts = pdesc->nparts, i; diff --git a/src/backend/partitioning/partdesc.c b/src/backend/partitioning/partdesc.c index 58570fecfdc3d..12ef36a73e63f 100644 --- a/src/backend/partitioning/partdesc.c +++ b/src/backend/partitioning/partdesc.c @@ -37,7 +37,7 @@ typedef struct PartitionDirectoryData { MemoryContext pdir_mcxt; HTAB *pdir_hash; - bool include_detached; + bool omit_detached; } PartitionDirectoryData; typedef struct PartitionDirectoryEntry @@ -47,7 +47,8 @@ typedef struct PartitionDirectoryEntry PartitionDesc pd; } PartitionDirectoryEntry; -static void RelationBuildPartitionDesc(Relation rel, bool include_detached); +static PartitionDesc RelationBuildPartitionDesc(Relation rel, + bool omit_detached); /* @@ -60,18 +61,29 @@ static void RelationBuildPartitionDesc(Relation rel, bool include_detached); * for callers to continue to use that pointer as long as (a) they hold the * relation open, and (b) they hold a relation lock strong enough to ensure * that the data doesn't become stale. + * + * The above applies to partition descriptors that are complete regarding + * partitions concurrently being detached. When a descriptor that omits + * partitions being detached is requested (and such partitions are present), + * said descriptor is not part of relcache and so it isn't freed by + * invalidations either. Caller must not use such a descriptor beyond the + * current Portal. */ PartitionDesc -RelationGetPartitionDesc(Relation rel, bool include_detached) +RelationGetPartitionDesc(Relation rel, bool omit_detached) { - if (rel->rd_rel->relkind != RELKIND_PARTITIONED_TABLE) - return NULL; + Assert(rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE); - if (unlikely(rel->rd_partdesc == NULL || - rel->rd_partdesc->includes_detached != include_detached)) - RelationBuildPartitionDesc(rel, include_detached); + /* + * If relcache has a partition descriptor, use that. However, we can only + * do so when we are asked to include all partitions including detached; + * and also when we know that there are no detached partitions. + */ + if (likely(rel->rd_partdesc && + (!rel->rd_partdesc->detached_exist || !omit_detached))) + return rel->rd_partdesc; - return rel->rd_partdesc; + return RelationBuildPartitionDesc(rel, omit_detached); } /* @@ -88,9 +100,15 @@ RelationGetPartitionDesc(Relation rel, bool include_detached) * context the current context except in very brief code sections, out of fear * that some of our callees allocate memory on their own which would be leaked * permanently. + * + * As a special case, partition descriptors that are requested to omit + * partitions being detached (and which contain such partitions) are transient + * and are not associated with the relcache entry. Such descriptors only last + * through the requesting Portal, so we use the corresponding memory context + * for them. */ -static void -RelationBuildPartitionDesc(Relation rel, bool include_detached) +static PartitionDesc +RelationBuildPartitionDesc(Relation rel, bool omit_detached) { PartitionDesc partdesc; PartitionBoundInfo boundinfo = NULL; @@ -98,6 +116,7 @@ RelationBuildPartitionDesc(Relation rel, bool include_detached) PartitionBoundSpec **boundspecs = NULL; Oid *oids = NULL; bool *is_leaf = NULL; + bool detached_exist; ListCell *cell; int i, nparts; @@ -112,8 +131,8 @@ RelationBuildPartitionDesc(Relation rel, bool include_detached) * concurrently, whatever this function returns will be accurate as of * some well-defined point in time. */ - inhoids = find_inheritance_children(RelationGetRelid(rel), include_detached, - NoLock); + inhoids = find_inheritance_children(RelationGetRelid(rel), omit_detached, + NoLock, &detached_exist); nparts = list_length(inhoids); /* Allocate working arrays for OIDs, leaf flags, and boundspecs. */ @@ -234,6 +253,7 @@ RelationBuildPartitionDesc(Relation rel, bool include_detached) partdesc = (PartitionDescData *) MemoryContextAllocZero(new_pdcxt, sizeof(PartitionDescData)); partdesc->nparts = nparts; + partdesc->detached_exist = detached_exist; /* If there are no partitions, the rest of the partdesc can stay zero */ if (nparts > 0) { @@ -241,7 +261,6 @@ RelationBuildPartitionDesc(Relation rel, bool include_detached) partdesc->boundinfo = partition_bounds_copy(boundinfo, key); partdesc->oids = (Oid *) palloc(nparts * sizeof(Oid)); partdesc->is_leaf = (bool *) palloc(nparts * sizeof(bool)); - partdesc->includes_detached = include_detached; /* * Assign OIDs from the original array into mapped indexes of the @@ -261,22 +280,41 @@ RelationBuildPartitionDesc(Relation rel, bool include_detached) } /* - * We have a fully valid partdesc ready to store into the relcache. - * Reparent it so it has the right lifespan. + * We have a fully valid partdesc. Reparent it so that it has the right + * lifespan, and if appropriate put it into the relation's relcache entry. */ - MemoryContextSetParent(new_pdcxt, CacheMemoryContext); + if (omit_detached && detached_exist) + { + /* + * A transient partition descriptor is only good for the current + * statement, so make it a child of the current portal's context. + */ + MemoryContextSetParent(new_pdcxt, PortalContext); + } + else + { + /* + * This partdesc goes into relcache. + */ - /* - * But first, a kluge: if there's an old rd_pdcxt, it contains an old - * partition descriptor that may still be referenced somewhere. Preserve - * it, while not leaking it, by reattaching it as a child context of the - * new rd_pdcxt. Eventually it will get dropped by either RelationClose - * or RelationClearRelation. - */ - if (rel->rd_pdcxt != NULL) - MemoryContextSetParent(rel->rd_pdcxt, new_pdcxt); - rel->rd_pdcxt = new_pdcxt; - rel->rd_partdesc = partdesc; + MemoryContextSetParent(new_pdcxt, CacheMemoryContext); + + /* + * But first, a kluge: if there's an old rd_pdcxt, it contains an old + * partition descriptor that may still be referenced somewhere. + * Preserve it, while not leaking it, by reattaching it as a child + * context of the new rd_pdcxt. Eventually it will get dropped by + * either RelationClose or RelationClearRelation. + */ + if (rel->rd_pdcxt != NULL) + MemoryContextSetParent(rel->rd_pdcxt, new_pdcxt); + rel->rd_pdcxt = new_pdcxt; + + /* Store it into relcache */ + rel->rd_partdesc = partdesc; + } + + return partdesc; } /* @@ -284,7 +322,7 @@ RelationBuildPartitionDesc(Relation rel, bool include_detached) * Create a new partition directory object. */ PartitionDirectory -CreatePartitionDirectory(MemoryContext mcxt, bool include_detached) +CreatePartitionDirectory(MemoryContext mcxt, bool omit_detached) { MemoryContext oldcontext = MemoryContextSwitchTo(mcxt); PartitionDirectory pdir; @@ -299,7 +337,7 @@ CreatePartitionDirectory(MemoryContext mcxt, bool include_detached) pdir->pdir_hash = hash_create("partition directory", 256, &ctl, HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); - pdir->include_detached = include_detached; + pdir->omit_detached = omit_detached; MemoryContextSwitchTo(oldcontext); return pdir; @@ -332,7 +370,7 @@ PartitionDirectoryLookup(PartitionDirectory pdir, Relation rel) */ RelationIncrementReferenceCount(rel); pde->rel = rel; - pde->pd = RelationGetPartitionDesc(rel, pdir->include_detached); + pde->pd = RelationGetPartitionDesc(rel, pdir->omit_detached); Assert(pde->pd != NULL); } return pde->pd; diff --git a/src/include/catalog/pg_inherits.h b/src/include/catalog/pg_inherits.h index 6d07e1b302bbc..4d28ede5a6589 100644 --- a/src/include/catalog/pg_inherits.h +++ b/src/include/catalog/pg_inherits.h @@ -50,8 +50,8 @@ DECLARE_INDEX(pg_inherits_parent_index, 2187, on pg_inherits using btree(inhpare #define InheritsParentIndexId 2187 -extern List *find_inheritance_children(Oid parentrelId, bool include_detached, - LOCKMODE lockmode); +extern List *find_inheritance_children(Oid parentrelId, bool omit_detached, + LOCKMODE lockmode, bool *detached_exist); extern List *find_all_inheritors(Oid parentrelId, LOCKMODE lockmode, List **parents); extern bool has_subclass(Oid relationId); diff --git a/src/include/partitioning/partdesc.h b/src/include/partitioning/partdesc.h index 7f03ff4271229..0792f48507ce9 100644 --- a/src/include/partitioning/partdesc.h +++ b/src/include/partitioning/partdesc.h @@ -17,11 +17,19 @@ /* * Information about partitions of a partitioned table. + * + * For partitioned tables where detached partitions exist, we only cache + * descriptors that include all partitions, including detached; when we're + * requested a descriptor without the detached partitions, we create one + * afresh each time. (The reason for this is that the set of detached + * partitions that are visible to each caller depends on the snapshot it has, + * so it's pretty much impossible to evict a descriptor from cache at the + * right time.) */ typedef struct PartitionDescData { int nparts; /* Number of partitions */ - bool includes_detached; /* Does it include detached partitions */ + bool detached_exist; /* Are there any detached partitions? */ Oid *oids; /* Array of 'nparts' elements containing * partition OIDs in order of the their bounds */ bool *is_leaf; /* Array of 'nparts' elements storing whether @@ -31,9 +39,9 @@ typedef struct PartitionDescData } PartitionDescData; -extern PartitionDesc RelationGetPartitionDesc(Relation rel, bool include_detached); +extern PartitionDesc RelationGetPartitionDesc(Relation rel, bool omit_detached); -extern PartitionDirectory CreatePartitionDirectory(MemoryContext mcxt, bool include_detached); +extern PartitionDirectory CreatePartitionDirectory(MemoryContext mcxt, bool omit_detached); extern PartitionDesc PartitionDirectoryLookup(PartitionDirectory, Relation); extern void DestroyPartitionDirectory(PartitionDirectory pdir); diff --git a/src/test/isolation/expected/detach-partition-concurrently-4.out b/src/test/isolation/expected/detach-partition-concurrently-4.out index 90a75cb077157..21676753748bf 100644 --- a/src/test/isolation/expected/detach-partition-concurrently-4.out +++ b/src/test/isolation/expected/detach-partition-concurrently-4.out @@ -324,6 +324,7 @@ a 1 2 step s1insert: insert into d4_fk values (1); +ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; starting permutation: s2snitch s1b s1s s2detach s1cancel s3vacfreeze s1s s1insert s1c From 502dc6df8f6eeba06812ce09488efc7e684f5ec9 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Thu, 22 Apr 2021 15:25:37 -0400 Subject: [PATCH 161/671] Make PostgresVersion code a bit more robust and simple. per gripe from Alvaro Herrera. --- src/test/perl/PostgresVersion.pm | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/test/perl/PostgresVersion.pm b/src/test/perl/PostgresVersion.pm index 14750365acfd9..3f3744ccfa9a5 100644 --- a/src/test/perl/PostgresVersion.pm +++ b/src/test/perl/PostgresVersion.pm @@ -34,7 +34,7 @@ PostgresVersion - class representing PostgreSQL version numbers =head1 DESCRIPTION -PostgresVersion encapsulated Postgres version numbers, providing parsing +PostgresVersion encapsulates Postgres version numbers, providing parsing of common version formats and comparison operations. =cut @@ -73,25 +73,22 @@ sub new my $class = shift; my $arg = shift; + chomp $arg; + # Accept standard formats, in case caller has handed us the output of a # postgres command line tool - $arg = $1 - if ($arg =~ m/\(?PostgreSQL\)? (\d+(?:\.\d+)*(?:devel)?)/); + my $devel; + ($arg,$devel) = ($1, $2) + if ($arg =~ m/^(?:\(?PostgreSQL\)? )?(\d+(?:\.\d+)*)(devel)?/); # Split into an array my @result = split(/\./, $arg); # Treat development versions as having a minor/micro version one less than # the first released version of that branch. - if ($result[$#result] =~ m/^(\d+)devel$/) - { - pop(@result); - push(@result, $1, -1); - } + push @result, -1 if ($devel); - my $res = [@result]; - bless $res, $class; - return $res; + return bless \@result, $class; } From 84f15ccd4c25c4ffc4de6ed82f7658a3a199a1d7 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 22 Apr 2021 16:01:17 -0400 Subject: [PATCH 162/671] doc: mention can be inside of , but not This was discussed in commit 9081bddbd. Reported-by: Peter Eisentraut Discussion: https://postgr.es/m/flat/87o8pco34z.fsf@wibble.ilmari.org --- doc/src/sgml/README.links | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/sgml/README.links b/doc/src/sgml/README.links index 4181e0877b5b5..65df9c111f3b5 100644 --- a/doc/src/sgml/README.links +++ b/doc/src/sgml/README.links @@ -22,6 +22,7 @@ endterm= use to supply text for the link, only uses linkend, requires http://www.oasis-open.org/docbook/documentation/reference/html/link.html + can be embedded inside of , unlike External Linking From 43b55ec4bc3bc06596d966391f16defe016310ec Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 22 Apr 2021 16:04:48 -0400 Subject: [PATCH 163/671] Fix uninitialized memory bug Have interested callers of find_inheritance_children set the detached_exist value to false prior to calling it, so that that routine only has to set it true in the rare cases where it is necessary. Don't touch it otherwise. Per buildfarm member thorntail (which reported a UBSan failure here). --- src/backend/catalog/pg_inherits.c | 5 +---- src/backend/partitioning/partdesc.c | 1 + 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/backend/catalog/pg_inherits.c b/src/backend/catalog/pg_inherits.c index 98bf48d1e2bb3..6447b52854635 100644 --- a/src/backend/catalog/pg_inherits.c +++ b/src/backend/catalog/pg_inherits.c @@ -53,7 +53,7 @@ typedef struct SeenRelsEntry * against possible DROPs of child relations. * * If a partition's pg_inherits row is marked "detach pending", - * *detached_exist (if not null) is set true, otherwise it is set false. + * *detached_exist (if not null) is set true. * * If omit_detached is true and there is an active snapshot (not the same as * the catalog snapshot used to scan pg_inherits!) and a pg_inherits tuple @@ -84,9 +84,6 @@ find_inheritance_children(Oid parentrelId, bool omit_detached, if (!has_subclass(parentrelId)) return NIL; - if (detached_exist) - *detached_exist = false; - /* * Scan pg_inherits and build a working array of subclass OIDs. */ diff --git a/src/backend/partitioning/partdesc.c b/src/backend/partitioning/partdesc.c index 12ef36a73e63f..2305dff40770b 100644 --- a/src/backend/partitioning/partdesc.c +++ b/src/backend/partitioning/partdesc.c @@ -131,6 +131,7 @@ RelationBuildPartitionDesc(Relation rel, bool omit_detached) * concurrently, whatever this function returns will be accurate as of * some well-defined point in time. */ + detached_exist = false; inhoids = find_inheritance_children(RelationGetRelid(rel), omit_detached, NoLock, &detached_exist); nparts = list_length(inhoids); From 197d33ccbe888fc84ae4e49bb241e88ea3c81f15 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 22 Apr 2021 22:47:57 +0200 Subject: [PATCH 164/671] Fix some trailing whitespace in documentation files --- doc/src/sgml/fdwhandler.sgml | 4 ++-- doc/src/sgml/installation.sgml | 2 +- doc/src/sgml/logical-replication.sgml | 2 +- doc/src/sgml/logicaldecoding.sgml | 4 ++-- doc/src/sgml/ref/pgupgrade.sgml | 2 +- doc/src/sgml/ref/psql-ref.sgml | 2 +- doc/src/sgml/ref/reindex.sgml | 2 +- doc/src/sgml/ref/vacuum.sgml | 2 +- doc/src/sgml/wal.sgml | 4 ++-- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/src/sgml/fdwhandler.sgml b/doc/src/sgml/fdwhandler.sgml index 98882ddab86f0..9f9274ce55fde 100644 --- a/doc/src/sgml/fdwhandler.sgml +++ b/doc/src/sgml/fdwhandler.sgml @@ -460,7 +460,7 @@ AddForeignUpdateTargets(PlannerInfo *root, for a whole-row Var marked with vartype = RECORD, and wholerowN - for a whole-row Var with + for a whole-row Var with vartype equal to the table's declared rowtype. Re-use these names when you can (the planner will combine duplicate requests for identical junk columns). If you need another kind of @@ -1616,7 +1616,7 @@ ForeignAsyncRequest(AsyncRequest *areq); void ForeignAsyncConfigureWait(AsyncRequest *areq); - Configure a file descriptor event for which the + Configure a file descriptor event for which the ForeignScan node wishes to wait. This function will only be called when the ForeignScan node has the diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index 66ad4ba93808f..50d9fa2021511 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -982,7 +982,7 @@ build-postgresql: configure will check for the required header files and libraries to make sure that your OpenSSL installation is sufficient - before proceeding. + before proceeding. diff --git a/doc/src/sgml/logical-replication.sgml b/doc/src/sgml/logical-replication.sgml index 737895265182b..88646bc859dff 100644 --- a/doc/src/sgml/logical-replication.sgml +++ b/doc/src/sgml/logical-replication.sgml @@ -305,7 +305,7 @@ using ALTER SUBSCRIPTION before attempting to drop the subscription. If the remote database instance no longer exists, no further action is then necessary. If, however, the remote database - instance is just unreachable, the replication slot (and any still + instance is just unreachable, the replication slot (and any still remaining table synchronization slots) should then be dropped manually; otherwise it/they would continue to reserve WAL and might eventually cause the disk to fill up. Such cases should be carefully diff --git a/doc/src/sgml/logicaldecoding.sgml b/doc/src/sgml/logicaldecoding.sgml index f61bcfcf3c93e..a7ec5c3577678 100644 --- a/doc/src/sgml/logicaldecoding.sgml +++ b/doc/src/sgml/logicaldecoding.sgml @@ -477,7 +477,7 @@ typedef void (*LogicalOutputPluginInit) (struct OutputPluginCallbacks *cb); An output plugin may also define functions to support two-phase commits, which allows actions to be decoded on the PREPARE TRANSACTION. - The begin_prepare_cb, prepare_cb, + The begin_prepare_cb, prepare_cb, stream_prepare_cb, commit_prepared_cb and rollback_prepared_cb callbacks are required, while filter_prepare_cb is optional. @@ -1202,7 +1202,7 @@ stream_commit_cb(...); <-- commit of the streamed transaction To support the streaming of two-phase commands, an output plugin needs to provide additional callbacks. There are multiple two-phase commit callbacks that are required, (begin_prepare_cb, - prepare_cb, commit_prepared_cb, + prepare_cb, commit_prepared_cb, rollback_prepared_cb and stream_prepare_cb) and an optional callback (filter_prepare_cb). diff --git a/doc/src/sgml/ref/pgupgrade.sgml b/doc/src/sgml/ref/pgupgrade.sgml index 92e1d09a55cae..4737d97d20203 100644 --- a/doc/src/sgml/ref/pgupgrade.sgml +++ b/doc/src/sgml/ref/pgupgrade.sgml @@ -375,7 +375,7 @@ NET STOP postgresql-&majorversion; Latest checkpoint location values match in all clusters. (There will be a mismatch if old standby servers were shut down before the old primary or if the old standby servers are still running.) - Also, make sure wal_level is not set to + Also, make sure wal_level is not set to minimal in the postgresql.conf file on the new primary cluster. diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index bd4f26e6cc877..3b9ec5e0a3972 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1937,7 +1937,7 @@ testdb=> The status of each kind of extended statistics is shown in a column named after its statistic kind (e.g. Ndistinct). "defined" means that it was requested when creating the statistics, - and NULL means it wasn't requested. + and NULL means it wasn't requested. You can use pg_stats_ext if you'd like to know whether ANALYZE was run and statistics are available to the planner. diff --git a/doc/src/sgml/ref/reindex.sgml b/doc/src/sgml/ref/reindex.sgml index 5875ecb93f789..53c362dcd3ea4 100644 --- a/doc/src/sgml/ref/reindex.sgml +++ b/doc/src/sgml/ref/reindex.sgml @@ -224,7 +224,7 @@ REINDEX [ ( option [, ...] ) ] { IN new_tablespace - The tablespace where indexes will be rebuilt. + The tablespace where indexes will be rebuilt. diff --git a/doc/src/sgml/ref/vacuum.sgml b/doc/src/sgml/ref/vacuum.sgml index 6a0028a514252..5f67c9d18b7b4 100644 --- a/doc/src/sgml/ref/vacuum.sgml +++ b/doc/src/sgml/ref/vacuum.sgml @@ -398,7 +398,7 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ and for details. diff --git a/doc/src/sgml/wal.sgml b/doc/src/sgml/wal.sgml index 36e00c92c267b..9606c617d41a8 100644 --- a/doc/src/sgml/wal.sgml +++ b/doc/src/sgml/wal.sgml @@ -270,7 +270,7 @@ The pg_checksums - application can be used to enable or disable data checksums, as well as + application can be used to enable or disable data checksums, as well as verify checksums, on an offline cluster. @@ -783,7 +783,7 @@ issue_xlog_fsync syncs WAL data to disk are counted as wal_write_time and wal_sync_time in , respectively. - XLogWrite is normally called by + XLogWrite is normally called by XLogInsertRecord (when there is no space for the new record in WAL buffers), XLogFlush and the WAL writer, to write WAL buffers to disk and call issue_xlog_fsync. From d479d00285255d422a2b38f1cfaa35808968a08c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 22 Apr 2021 17:30:42 -0400 Subject: [PATCH 165/671] Don't crash on reference to an un-available system column. Adopt a more consistent policy about what slot-type-specific getsysattr functions should do when system attributes are not available. To wit, they should all throw the same user-oriented error, rather than variously crashing or emitting developer-oriented messages. This closes a identifiable problem in commits a71cfc56b and 3fb93103a (in v13 and v12), so back-patch into those branches, along with a test case to try to ensure we don't break it again. It is not known that any of the former crash cases are reachable in HEAD, but this seems like a good safety improvement in any case. Discussion: https://postgr.es/m/141051591267657@mail.yandex.ru --- src/backend/executor/execTuples.c | 40 ++++++++++++++++++--- src/test/regress/expected/update.out | 53 ++++++++++++++++++++++++++++ src/test/regress/sql/update.sql | 32 +++++++++++++++++ 3 files changed, 120 insertions(+), 5 deletions(-) diff --git a/src/backend/executor/execTuples.c b/src/backend/executor/execTuples.c index 73c35df9c9686..f4478028431f0 100644 --- a/src/backend/executor/execTuples.c +++ b/src/backend/executor/execTuples.c @@ -122,9 +122,8 @@ tts_virtual_clear(TupleTableSlot *slot) } /* - * Attribute values are readily available in tts_values and tts_isnull array - * in a VirtualTupleTableSlot. So there should be no need to call either of the - * following two functions. + * VirtualTupleTableSlots always have fully populated tts_values and + * tts_isnull arrays. So this function should never be called. */ static void tts_virtual_getsomeattrs(TupleTableSlot *slot, int natts) @@ -132,10 +131,19 @@ tts_virtual_getsomeattrs(TupleTableSlot *slot, int natts) elog(ERROR, "getsomeattrs is not required to be called on a virtual tuple table slot"); } +/* + * VirtualTupleTableSlots never provide system attributes (except those + * handled generically, such as tableoid). We generally shouldn't get + * here, but provide a user-friendly message if we do. + */ static Datum tts_virtual_getsysattr(TupleTableSlot *slot, int attnum, bool *isnull) { - elog(ERROR, "virtual tuple table slot does not have system attributes"); + Assert(!TTS_EMPTY(slot)); + + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot retrieve a system column in this context"))); return 0; /* silence compiler warnings */ } @@ -335,6 +343,15 @@ tts_heap_getsysattr(TupleTableSlot *slot, int attnum, bool *isnull) Assert(!TTS_EMPTY(slot)); + /* + * In some code paths it's possible to get here with a non-materialized + * slot, in which case we can't retrieve system columns. + */ + if (!hslot->tuple) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot retrieve a system column in this context"))); + return heap_getsysattr(hslot->tuple, attnum, slot->tts_tupleDescriptor, isnull); } @@ -497,7 +514,11 @@ tts_minimal_getsomeattrs(TupleTableSlot *slot, int natts) static Datum tts_minimal_getsysattr(TupleTableSlot *slot, int attnum, bool *isnull) { - elog(ERROR, "minimal tuple table slot does not have system attributes"); + Assert(!TTS_EMPTY(slot)); + + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot retrieve a system column in this context"))); return 0; /* silence compiler warnings */ } @@ -681,6 +702,15 @@ tts_buffer_heap_getsysattr(TupleTableSlot *slot, int attnum, bool *isnull) Assert(!TTS_EMPTY(slot)); + /* + * In some code paths it's possible to get here with a non-materialized + * slot, in which case we can't retrieve system columns. + */ + if (!bslot->base.tuple) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot retrieve a system column in this context"))); + return heap_getsysattr(bslot->base.tuple, attnum, slot->tts_tupleDescriptor, isnull); } diff --git a/src/test/regress/expected/update.out b/src/test/regress/expected/update.out index ad91e5aedb871..bbf6705b656c0 100644 --- a/src/test/regress/expected/update.out +++ b/src/test/regress/expected/update.out @@ -795,6 +795,59 @@ DETAIL: Failing row contains (a, 10). -- ok UPDATE list_default set a = 'x' WHERE a = 'd'; DROP TABLE list_parted; +-- Test retrieval of system columns with non-consistent partition row types. +-- This is only partially supported, as seen in the results. +create table utrtest (a int, b text) partition by list (a); +create table utr1 (a int check (a in (1)), q text, b text); +create table utr2 (a int check (a in (2)), b text); +alter table utr1 drop column q; +alter table utrtest attach partition utr1 for values in (1); +alter table utrtest attach partition utr2 for values in (2); +insert into utrtest values (1, 'foo') + returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok; + a | b | tableoid | xmin_ok +---+-----+----------+--------- + 1 | foo | utr1 | t +(1 row) + +insert into utrtest values (2, 'bar') + returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok; -- fails +ERROR: cannot retrieve a system column in this context +insert into utrtest values (2, 'bar') + returning *, tableoid::regclass; + a | b | tableoid +---+-----+---------- + 2 | bar | utr2 +(1 row) + +update utrtest set b = b || b from (values (1), (2)) s(x) where a = s.x + returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok; + a | b | x | tableoid | xmin_ok +---+--------+---+----------+--------- + 1 | foofoo | 1 | utr1 | t + 2 | barbar | 2 | utr2 | t +(2 rows) + +update utrtest set a = 3 - a from (values (1), (2)) s(x) where a = s.x + returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok; -- fails +ERROR: cannot retrieve a system column in this context +update utrtest set a = 3 - a from (values (1), (2)) s(x) where a = s.x + returning *, tableoid::regclass; + a | b | x | tableoid +---+--------+---+---------- + 2 | foofoo | 1 | utr2 + 1 | barbar | 2 | utr1 +(2 rows) + +delete from utrtest + returning *, tableoid::regclass, xmax = pg_current_xact_id()::xid as xmax_ok; + a | b | tableoid | xmax_ok +---+--------+----------+--------- + 1 | barbar | utr1 | t + 2 | foofoo | utr2 | t +(2 rows) + +drop table utrtest; -------------- -- Some more update-partition-key test scenarios below. This time use list -- partitions. diff --git a/src/test/regress/sql/update.sql b/src/test/regress/sql/update.sql index 8c558a7bc7286..d0bc8e9228bac 100644 --- a/src/test/regress/sql/update.sql +++ b/src/test/regress/sql/update.sql @@ -502,6 +502,38 @@ UPDATE list_default set a = 'x' WHERE a = 'd'; DROP TABLE list_parted; +-- Test retrieval of system columns with non-consistent partition row types. +-- This is only partially supported, as seen in the results. + +create table utrtest (a int, b text) partition by list (a); +create table utr1 (a int check (a in (1)), q text, b text); +create table utr2 (a int check (a in (2)), b text); +alter table utr1 drop column q; +alter table utrtest attach partition utr1 for values in (1); +alter table utrtest attach partition utr2 for values in (2); + +insert into utrtest values (1, 'foo') + returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok; +insert into utrtest values (2, 'bar') + returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok; -- fails +insert into utrtest values (2, 'bar') + returning *, tableoid::regclass; + +update utrtest set b = b || b from (values (1), (2)) s(x) where a = s.x + returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok; + +update utrtest set a = 3 - a from (values (1), (2)) s(x) where a = s.x + returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok; -- fails + +update utrtest set a = 3 - a from (values (1), (2)) s(x) where a = s.x + returning *, tableoid::regclass; + +delete from utrtest + returning *, tableoid::regclass, xmax = pg_current_xact_id()::xid as xmax_ok; + +drop table utrtest; + + -------------- -- Some more update-partition-key test scenarios below. This time use list -- partitions. From bb684c82f73316b88f9bcb321128a4347b5206fe Mon Sep 17 00:00:00 2001 From: Etsuro Fujita Date: Fri, 23 Apr 2021 12:00:00 +0900 Subject: [PATCH 166/671] Minor code cleanup in asynchronous execution support. This is cleanup for commit 27e1f1456: * ExecAppendAsyncEventWait(), which was modified a bit further by commit a8af856d3, duplicated the same nevents calculation. Simplify the code a little bit to avoid the duplication. Update comments there. * Add an assertion to ExecAppendAsyncRequest(). * Update a comment about merging the async_capable options from input relations in merge_fdw_options(), per complaint from Kyotaro Horiguchi. * Add a comment for fetch_more_data_begin(). Author: Etsuro Fujita Discussion: https://postgr.es/m/CAPmGK1637W30Wx3MnrReewhafn6F_0J76mrJGoFXFnpPq4QfvA%40mail.gmail.com --- contrib/postgres_fdw/postgres_fdw.c | 8 +++++++- src/backend/executor/nodeAppend.c | 18 +++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index c590f374c675a..e201b5404e6dc 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -5835,7 +5835,10 @@ merge_fdw_options(PgFdwRelationInfo *fpinfo, /* * We'll prefer to consider this join async-capable if any table from - * either side of the join is considered async-capable. + * either side of the join is considered async-capable. This would be + * reasonable because in that case the foreign server would have its + * own resources to scan that table asynchronously, and the join could + * also be computed asynchronously using the resources. */ fpinfo->async_capable = fpinfo_o->async_capable || fpinfo_i->async_capable; @@ -6893,6 +6896,9 @@ produce_tuple_asynchronously(AsyncRequest *areq, bool fetch) /* * Begin an asynchronous data fetch. * + * Note: this function assumes there is no currently-in-progress asynchronous + * data fetch. + * * Note: fetch_more_data must be called to fetch the result. */ static void diff --git a/src/backend/executor/nodeAppend.c b/src/backend/executor/nodeAppend.c index c25275726860c..3c1f12adafb54 100644 --- a/src/backend/executor/nodeAppend.c +++ b/src/backend/executor/nodeAppend.c @@ -952,7 +952,10 @@ ExecAppendAsyncRequest(AppendState *node, TupleTableSlot **result) /* Nothing to do if there are no async subplans needing a new request. */ if (bms_is_empty(node->as_needrequest)) + { + Assert(node->as_nasyncresults == 0); return false; + } /* * If there are any asynchronously-generated results that have not yet @@ -998,17 +1001,16 @@ ExecAppendAsyncRequest(AppendState *node, TupleTableSlot **result) static void ExecAppendAsyncEventWait(AppendState *node) { + int nevents = node->as_nasyncplans + 1; long timeout = node->as_syncdone ? -1 : 0; WaitEvent occurred_event[EVENT_BUFFER_SIZE]; int noccurred; - int nevents; int i; /* We should never be called when there are no valid async subplans. */ Assert(node->as_nasyncremain > 0); - node->as_eventset = CreateWaitEventSet(CurrentMemoryContext, - node->as_nasyncplans + 1); + node->as_eventset = CreateWaitEventSet(CurrentMemoryContext, nevents); AddWaitEventToSet(node->as_eventset, WL_EXIT_ON_PM_DEATH, PGINVALID_SOCKET, NULL, NULL); @@ -1022,8 +1024,14 @@ ExecAppendAsyncEventWait(AppendState *node) ExecAsyncConfigureWait(areq); } - /* Wait for at least one event to occur. */ - nevents = Min(node->as_nasyncplans + 1, EVENT_BUFFER_SIZE); + /* We wait on at most EVENT_BUFFER_SIZE events. */ + if (nevents > EVENT_BUFFER_SIZE) + nevents = EVENT_BUFFER_SIZE; + + /* + * If the timeout is -1, wait until at least one event occurs. If the + * timeout is 0, poll for events, but do not wait at all. + */ noccurred = WaitEventSetWait(node->as_eventset, timeout, occurred_event, nevents, WAIT_EVENT_APPEND_READY); FreeWaitEventSet(node->as_eventset); From 62aa2bb293148c13851484e63db4835e3c53147f Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 23 Apr 2021 13:25:49 +0900 Subject: [PATCH 167/671] Remove use of [U]INT64_FORMAT in some translatable strings %lld with (long long), or %llu with (unsigned long long) are more adapted. This is similar to 3286065. Author: Kyotaro Horiguchi Discussion: https://postgr.es/m/20210421.200000.1462448394029407895.horikyota.ntt@gmail.com --- contrib/pg_prewarm/pg_prewarm.c | 8 ++++---- src/backend/access/transam/xlogprefetch.c | 23 +++++++++++------------ src/bin/pgbench/pgbench.c | 6 +++--- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/contrib/pg_prewarm/pg_prewarm.c b/contrib/pg_prewarm/pg_prewarm.c index a8554529361e6..48d0132a0d0e1 100644 --- a/contrib/pg_prewarm/pg_prewarm.c +++ b/contrib/pg_prewarm/pg_prewarm.c @@ -126,8 +126,8 @@ pg_prewarm(PG_FUNCTION_ARGS) if (first_block < 0 || first_block >= nblocks) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("starting block number must be between 0 and " INT64_FORMAT, - nblocks - 1))); + errmsg("starting block number must be between 0 and %lld", + (long long) (nblocks - 1)))); } if (PG_ARGISNULL(4)) last_block = nblocks - 1; @@ -137,8 +137,8 @@ pg_prewarm(PG_FUNCTION_ARGS) if (last_block < 0 || last_block >= nblocks) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("ending block number must be between 0 and " INT64_FORMAT, - nblocks - 1))); + errmsg("ending block number must be between 0 and %lld", + (long long) (nblocks - 1)))); } /* Now we're ready to do the real work. */ diff --git a/src/backend/access/transam/xlogprefetch.c b/src/backend/access/transam/xlogprefetch.c index 9a6f17ca3609f..ae4585232be33 100644 --- a/src/backend/access/transam/xlogprefetch.c +++ b/src/backend/access/transam/xlogprefetch.c @@ -358,20 +358,19 @@ XLogPrefetcherFree(XLogPrefetcher *prefetcher) /* Log final statistics. */ ereport(LOG, (errmsg("recovery finished prefetching at %X/%X; " - "prefetch = " UINT64_FORMAT ", " - "skip_hit = " UINT64_FORMAT ", " - "skip_new = " UINT64_FORMAT ", " - "skip_fpw = " UINT64_FORMAT ", " - "skip_seq = " UINT64_FORMAT ", " + "prefetch = %llu, " + "skip_hit = %llu, " + "skip_new = %llu, " + "skip_fpw = %llu, " + "skip_seq = %llu, " "avg_distance = %f, " "avg_queue_depth = %f", - (uint32) (prefetcher->reader->EndRecPtr << 32), - (uint32) (prefetcher->reader->EndRecPtr), - pg_atomic_read_u64(&SharedStats->prefetch), - pg_atomic_read_u64(&SharedStats->skip_hit), - pg_atomic_read_u64(&SharedStats->skip_new), - pg_atomic_read_u64(&SharedStats->skip_fpw), - pg_atomic_read_u64(&SharedStats->skip_seq), + LSN_FORMAT_ARGS(prefetcher->reader->EndRecPtr), + (unsigned long long) pg_atomic_read_u64(&SharedStats->prefetch), + (unsigned long long) pg_atomic_read_u64(&SharedStats->skip_hit), + (unsigned long long) pg_atomic_read_u64(&SharedStats->skip_new), + (unsigned long long) pg_atomic_read_u64(&SharedStats->skip_fpw), + (unsigned long long) pg_atomic_read_u64(&SharedStats->skip_seq), SharedStats->avg_distance, SharedStats->avg_queue_depth))); hash_destroy(prefetcher->filter_table); diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index da1d9ec535178..08276659977d5 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -5359,8 +5359,8 @@ parseScriptWeight(const char *option, char **script) } if (wtmp > INT_MAX || wtmp < 0) { - pg_log_fatal("weight specification out of range (0 .. %u): " INT64_FORMAT, - INT_MAX, (int64) wtmp); + pg_log_fatal("weight specification out of range (0 .. %u): %lld", + INT_MAX, (long long) wtmp); exit(1); } weight = wtmp; @@ -5680,7 +5680,7 @@ set_random_seed(const char *seed) } if (seed != NULL) - pg_log_info("setting random seed to " UINT64_FORMAT, iseed); + pg_log_info("setting random seed to %llu", (unsigned long long) iseed); random_seed = iseed; /* Fill base_random_sequence with low-order bits of seed */ From 45c0c5f70eb5e22d31be8bb9a8b4d9c66a3e9b37 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 23 Apr 2021 13:34:02 +0900 Subject: [PATCH 168/671] Fix some comments in fmgr.c Oversight in 2a0faed. Author: Hou Zhijie Discussion: https://postgr.es/m/OS0PR01MB5716405E2464D85E6DB6DC0794469@OS0PR01MB5716.jpnprd01.prod.outlook.com --- src/backend/utils/fmgr/fmgr.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c index b6835c2c4c1ef..3dfe6e5825255 100644 --- a/src/backend/utils/fmgr/fmgr.c +++ b/src/backend/utils/fmgr/fmgr.c @@ -273,7 +273,7 @@ fmgr_info_cxt_security(Oid functionId, FmgrInfo *finfo, MemoryContext mcxt, * If *mod == NULL and *fn != NULL, the function is implemented by a symbol in * the main binary. * - * If *mod != NULL and *fn !=NULL the function is implemented in an extension + * If *mod != NULL and *fn != NULL the function is implemented in an extension * shared object. * * The returned module and function names are pstrdup'ed into the current @@ -288,14 +288,11 @@ fmgr_symbol(Oid functionId, char **mod, char **fn) Datum prosrcattr; Datum probinattr; - /* Otherwise we need the pg_proc entry */ procedureTuple = SearchSysCache1(PROCOID, ObjectIdGetDatum(functionId)); if (!HeapTupleIsValid(procedureTuple)) elog(ERROR, "cache lookup failed for function %u", functionId); procedureStruct = (Form_pg_proc) GETSTRUCT(procedureTuple); - /* - */ if (procedureStruct->prosecdef || !heap_attisnull(procedureTuple, Anum_pg_proc_proconfig, NULL) || FmgrHookIsNeeded(functionId)) From 7776a23a4bdeb7215e4f8ddea5989cb143becc12 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 23 Apr 2021 07:21:13 +0200 Subject: [PATCH 169/671] Fix incorrect format placeholder --- src/backend/utils/misc/guc-file.l | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l index 9498bbea2f6dd..986ce542e372d 100644 --- a/src/backend/utils/misc/guc-file.l +++ b/src/backend/utils/misc/guc-file.l @@ -311,7 +311,7 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel) /* Invalid non-custom variable, so complain */ ereport(elevel, (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("unrecognized configuration parameter \"%s\" in file \"%s\" line %u", + errmsg("unrecognized configuration parameter \"%s\" in file \"%s\" line %d", item->name, item->filename, item->sourceline))); item->errmsg = pstrdup("unrecognized configuration parameter"); From eaec48b3c54eec222d64468b57af80ee4ddf76a9 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Fri, 23 Apr 2021 15:45:46 +0900 Subject: [PATCH 170/671] doc: Fix obsolete description about pg_basebackup. Previously it was documented that if using "-X none" option there was no guarantee that all required WAL files were archived at the end of pg_basebackup when taking a backup from the standby. But this limitation was removed by commit 52f8a59dd9. Now, even when taking a backup from the standby, pg_basebackup can wait for all required WAL files to be archived. Therefore this commit removes such obsolete description from the docs. Also this commit adds new description about the limitation when taking a backup from the standby, into the docs. The limitation is that pg_basebackup cannot force the standbfy to switch to a new WAL file at the end of backup, which may cause pg_basebackup to wait a long time for the last required WAL file to be switched and archived, especially when write activity on the primary is low. Back-patch to v10 where the issue was introduced. Reported-by: Kyotaro Horiguchi Author: Kyotaro Horiguchi, Fujii Masao Reviewed-by: Kyotaro Horiguchi, Fujii Masao Discussion: https://postgr.es/m/20210420.133235.1342729068750553399.horikyota.ntt@gmail.com --- doc/src/sgml/ref/pg_basebackup.sgml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/ref/pg_basebackup.sgml b/doc/src/sgml/ref/pg_basebackup.sgml index a3e292d44aea7..9e6807b4574d0 100644 --- a/doc/src/sgml/ref/pg_basebackup.sgml +++ b/doc/src/sgml/ref/pg_basebackup.sgml @@ -83,8 +83,14 @@ PostgreSQL documentation - If you are using -X none, there is no guarantee that all - WAL files required for the backup are archived at the end of backup. + pg_basebackup cannot force the standby + to switch to a new WAL file at the end of backup. + When you are using -X none, if write activity on + the primary is low, pg_basebackup may + need to wait a long time for the last WAL file required for the backup + to be switched and archived. In this case, it may be useful to run + pg_switch_wal on the primary in order to + trigger an immediate WAL file switch. From 9bd563aa9f0694994a6640946a7ee3dc0431d507 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 23 Apr 2021 09:28:44 +0200 Subject: [PATCH 171/671] doc: Fix typos Author: Justin Pryzby --- doc/src/sgml/func.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 5bba13973f3d1..cc8415689b0c0 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -9946,13 +9946,13 @@ SELECT date_trunc('hour', INTERVAL '3 days 02:47:33'); -date_trunc(stride, source, origin) +date_bin(stride, source, origin) source is a value expression of type timestamp or timestamp with time zone. (Values of type date are cast automatically to timestamp.) stride is a value - expression of type interval. The return value is likewise + expression of type interval. The return value is likewise of type timestamp or timestamp with time zone, and it marks the beginning of the bin into which the source is placed. From add5fad78aac8da96aeeb730155d35b16ff9b55a Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 23 Apr 2021 09:55:23 +0200 Subject: [PATCH 172/671] pg_amcheck: Use logging functions This was already mostly done, but some error messages were printed the long way. --- src/bin/pg_amcheck/pg_amcheck.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/bin/pg_amcheck/pg_amcheck.c b/src/bin/pg_amcheck/pg_amcheck.c index 587a79a1a6da5..bfe3d8e59497d 100644 --- a/src/bin/pg_amcheck/pg_amcheck.c +++ b/src/bin/pg_amcheck/pg_amcheck.c @@ -319,8 +319,7 @@ main(int argc, char *argv[]) opts.jobs = atoi(optarg); if (opts.jobs < 1) { - fprintf(stderr, - _("number of parallel jobs must be at least 1\n")); + pg_log_error("number of parallel jobs must be at least 1"); exit(1); } break; @@ -393,7 +392,7 @@ main(int argc, char *argv[]) opts.skip = "all frozen"; else { - fprintf(stderr, _("invalid skip option\n")); + pg_log_error("invalid skip option"); exit(1); } break; @@ -401,14 +400,12 @@ main(int argc, char *argv[]) opts.startblock = strtol(optarg, &endptr, 10); if (*endptr != '\0') { - fprintf(stderr, - _("invalid start block\n")); + pg_log_error("invalid start block"); exit(1); } if (opts.startblock > MaxBlockNumber || opts.startblock < 0) { - fprintf(stderr, - _("start block out of bounds\n")); + pg_log_error("start block out of bounds"); exit(1); } break; @@ -416,14 +413,12 @@ main(int argc, char *argv[]) opts.endblock = strtol(optarg, &endptr, 10); if (*endptr != '\0') { - fprintf(stderr, - _("invalid end block\n")); + pg_log_error("invalid end block"); exit(1); } if (opts.endblock > MaxBlockNumber || opts.endblock < 0) { - fprintf(stderr, - _("end block out of bounds\n")); + pg_log_error("end block out of bounds"); exit(1); } break; @@ -450,8 +445,7 @@ main(int argc, char *argv[]) if (opts.endblock >= 0 && opts.endblock < opts.startblock) { - fprintf(stderr, - _("end block precedes start block\n")); + pg_log_error("end block precedes start block"); exit(1); } From 7531fcb1fcf5b3ea2f49959a3f095c083e3fc4c4 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Fri, 23 Apr 2021 11:41:36 +0200 Subject: [PATCH 173/671] Mention that toplevel is part of pg_stat_statements key. While at it, also document that toplevel is always true if pg_stat_statements.track is set to top. Author: Julien Rouhaud Reported-By: Fujii Masao Discussion: https://postgr.es/m/a878d5ea-64a7-485e-5d2f-177618ebc52d@oss.nttdata.com --- doc/src/sgml/pgstatstatements.sgml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/pgstatstatements.sgml b/doc/src/sgml/pgstatstatements.sgml index a0c315aa9740a..bc2b6038ee851 100644 --- a/doc/src/sgml/pgstatstatements.sgml +++ b/doc/src/sgml/pgstatstatements.sgml @@ -46,8 +46,8 @@ The statistics gathered by the module are made available via a view named pg_stat_statements. This view - contains one row for each distinct database ID, user ID and query - ID (up to the maximum number of distinct statements that the module + contains one row for each distinct database ID, user ID, query ID and + toplevel (up to the maximum number of distinct statements that the module can track). The columns of the view are shown in . @@ -93,6 +93,8 @@ True if the query was executed as a top level statement + (if pg_stat_statements.track is set to + all, otherwise always false) From 3f20d5f37086e548c32ddb9d6ae09c2e1ce300ce Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Fri, 23 Apr 2021 19:10:24 +0900 Subject: [PATCH 174/671] Reorder COMPRESSION option in gram.y and parsenodes.h into alphabetical order. Commit bbe0a81db6 introduced "INCLUDING COMPRESSION" option in CREATE TABLE command, but previously TableLikeOption in gram.y and parsenodes.h didn't classify this new option in alphabetical order with the rest. Author: Fujii Masao Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/YHerAixOhfR1ryXa@paquier.xyz --- src/backend/parser/gram.y | 2 +- src/include/nodes/parsenodes.h | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 73494002ad359..b4ab4014c8737 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -3760,6 +3760,7 @@ TableLikeOptionList: TableLikeOption: COMMENTS { $$ = CREATE_TABLE_LIKE_COMMENTS; } + | COMPRESSION { $$ = CREATE_TABLE_LIKE_COMPRESSION; } | CONSTRAINTS { $$ = CREATE_TABLE_LIKE_CONSTRAINTS; } | DEFAULTS { $$ = CREATE_TABLE_LIKE_DEFAULTS; } | IDENTITY_P { $$ = CREATE_TABLE_LIKE_IDENTITY; } @@ -3767,7 +3768,6 @@ TableLikeOption: | INDEXES { $$ = CREATE_TABLE_LIKE_INDEXES; } | STATISTICS { $$ = CREATE_TABLE_LIKE_STATISTICS; } | STORAGE { $$ = CREATE_TABLE_LIKE_STORAGE; } - | COMPRESSION { $$ = CREATE_TABLE_LIKE_COMPRESSION; } | ALL { $$ = CREATE_TABLE_LIKE_ALL; } ; diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 7a44bccdd3b46..615dfa26aa2f3 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -690,14 +690,14 @@ typedef struct TableLikeClause typedef enum TableLikeOption { CREATE_TABLE_LIKE_COMMENTS = 1 << 0, - CREATE_TABLE_LIKE_CONSTRAINTS = 1 << 1, - CREATE_TABLE_LIKE_DEFAULTS = 1 << 2, - CREATE_TABLE_LIKE_GENERATED = 1 << 3, - CREATE_TABLE_LIKE_IDENTITY = 1 << 4, - CREATE_TABLE_LIKE_INDEXES = 1 << 5, - CREATE_TABLE_LIKE_STATISTICS = 1 << 6, - CREATE_TABLE_LIKE_STORAGE = 1 << 7, - CREATE_TABLE_LIKE_COMPRESSION = 1 << 8, + CREATE_TABLE_LIKE_COMPRESSION = 1 << 1, + CREATE_TABLE_LIKE_CONSTRAINTS = 1 << 2, + CREATE_TABLE_LIKE_DEFAULTS = 1 << 3, + CREATE_TABLE_LIKE_GENERATED = 1 << 4, + CREATE_TABLE_LIKE_IDENTITY = 1 << 5, + CREATE_TABLE_LIKE_INDEXES = 1 << 6, + CREATE_TABLE_LIKE_STATISTICS = 1 << 7, + CREATE_TABLE_LIKE_STORAGE = 1 << 8, CREATE_TABLE_LIKE_ALL = PG_INT32_MAX } TableLikeOption; From 6bbcff096f932a1fe43ac3208c5c8b0acac29cda Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Fri, 23 Apr 2021 12:57:33 +0300 Subject: [PATCH 175/671] Mark multirange_constructor0() and multirange_constructor2() strict These functions shouldn't receive null arguments: multirange_constructor0() doesn't have any arguments while multirange_constructor2() has a single array argument, which is never null. But mark them strict anyway for the sake of uniformity. Also, make checks for null arguments use elog() instead of ereport() as these errors should normally be never thrown. And adjust corresponding comments. Catversion is bumped. Reported-by: Peter Eisentraut Discussion: https://postgr.es/m/0f783a96-8d67-9e71-996b-f34a7352eeef%40enterprisedb.com --- src/backend/commands/typecmds.c | 4 ++-- src/backend/utils/adt/multirangetypes.c | 25 +++++++++++++------------ src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_proc.dat | 24 ++++++++++++------------ 4 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index e975508ffa23a..036fa69d17dd9 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -1844,7 +1844,7 @@ makeMultirangeConstructors(const char *name, Oid namespace, PROKIND_FUNCTION, false, /* security_definer */ false, /* leakproof */ - false, /* isStrict */ + true, /* isStrict */ PROVOLATILE_IMMUTABLE, /* volatility */ PROPARALLEL_SAFE, /* parallel safety */ argtypes, /* parameterTypes */ @@ -1929,7 +1929,7 @@ makeMultirangeConstructors(const char *name, Oid namespace, PROKIND_FUNCTION, false, /* security_definer */ false, /* leakproof */ - false, /* isStrict */ + true, /* isStrict */ PROVOLATILE_IMMUTABLE, /* volatility */ PROPARALLEL_SAFE, /* parallel safety */ argtypes, /* parameterTypes */ diff --git a/src/backend/utils/adt/multirangetypes.c b/src/backend/utils/adt/multirangetypes.c index 7ba6ff9860441..0b81649779ac3 100644 --- a/src/backend/utils/adt/multirangetypes.c +++ b/src/backend/utils/adt/multirangetypes.c @@ -216,6 +216,7 @@ multirange_in(PG_FUNCTION_ARGS) parse_state = MULTIRANGE_IN_RANGE_QUOTED; else if (ch == '\\') parse_state = MULTIRANGE_IN_RANGE_ESCAPED; + /* * We will include this character into range_str once we * find the end of the range value. @@ -223,6 +224,7 @@ multirange_in(PG_FUNCTION_ARGS) } break; case MULTIRANGE_IN_RANGE_ESCAPED: + /* * We will include this character into range_str once we find * the end of the range value. @@ -242,8 +244,8 @@ multirange_in(PG_FUNCTION_ARGS) parse_state = MULTIRANGE_IN_RANGE_QUOTED_ESCAPED; /* - * We will include this character into range_str once we - * find the end of the range value. + * We will include this character into range_str once we find + * the end of the range value. */ break; case MULTIRANGE_AFTER_RANGE: @@ -259,6 +261,7 @@ multirange_in(PG_FUNCTION_ARGS) errdetail("Expected comma or end of multirange."))); break; case MULTIRANGE_IN_RANGE_QUOTED_ESCAPED: + /* * We will include this character into range_str once we find * the end of the range value. @@ -951,14 +954,13 @@ multirange_constructor2(PG_FUNCTION_ARGS) PG_RETURN_MULTIRANGE_P(make_multirange(mltrngtypid, rangetyp, 0, NULL)); /* - * These checks should be guaranteed by our signature, but let's do them - * just in case. + * This check should be guaranteed by our signature, but let's do it just + * in case. */ if (PG_ARGISNULL(0)) - ereport(ERROR, - (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), - errmsg("multirange values cannot contain NULL members"))); + elog(ERROR, + "multirange values cannot contain NULL members"); rangeArray = PG_GETARG_ARRAYTYPE_P(0); @@ -1022,14 +1024,13 @@ multirange_constructor1(PG_FUNCTION_ARGS) rangetyp = typcache->rngtype; /* - * These checks should be guaranteed by our signature, but let's do them - * just in case. + * This check should be guaranteed by our signature, but let's do it just + * in case. */ if (PG_ARGISNULL(0)) - ereport(ERROR, - (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), - errmsg("multirange values cannot contain NULL members"))); + elog(ERROR, + "multirange values cannot contain NULL members"); range = PG_GETARG_RANGE_P(0); diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index c32c5b2731a6f..ba1a0d03333f8 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202104211 +#define CATALOG_VERSION_NO 202104231 #endif diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index b1ee078a1dbc4..db1abc149c6f2 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -10445,72 +10445,72 @@ proargtypes => 'anymultirange int8', prosrc => 'hash_multirange_extended' }, { oid => '4280', descr => 'int4multirange constructor', - proname => 'int4multirange', proisstrict => 'f', + proname => 'int4multirange', prorettype => 'int4multirange', proargtypes => '', prosrc => 'multirange_constructor0' }, { oid => '4281', descr => 'int4multirange constructor', proname => 'int4multirange', prorettype => 'int4multirange', proargtypes => 'int4range', prosrc => 'multirange_constructor1' }, { oid => '4282', descr => 'int4multirange constructor', - proname => 'int4multirange', provariadic => 'int4range', proisstrict => 'f', + proname => 'int4multirange', provariadic => 'int4range', prorettype => 'int4multirange', proargtypes => '_int4range', proallargtypes => '{_int4range}', proargmodes => '{v}', prosrc => 'multirange_constructor2' }, { oid => '4283', descr => 'nummultirange constructor', - proname => 'nummultirange', proisstrict => 'f', prorettype => 'nummultirange', + proname => 'nummultirange', prorettype => 'nummultirange', proargtypes => '', prosrc => 'multirange_constructor0' }, { oid => '4284', descr => 'nummultirange constructor', proname => 'nummultirange', prorettype => 'nummultirange', proargtypes => 'numrange', prosrc => 'multirange_constructor1' }, { oid => '4285', descr => 'nummultirange constructor', - proname => 'nummultirange', provariadic => 'numrange', proisstrict => 'f', + proname => 'nummultirange', provariadic => 'numrange', prorettype => 'nummultirange', proargtypes => '_numrange', proallargtypes => '{_numrange}', proargmodes => '{v}', prosrc => 'multirange_constructor2' }, { oid => '4286', descr => 'tsmultirange constructor', - proname => 'tsmultirange', proisstrict => 'f', prorettype => 'tsmultirange', + proname => 'tsmultirange', prorettype => 'tsmultirange', proargtypes => '', prosrc => 'multirange_constructor0' }, { oid => '4287', descr => 'tsmultirange constructor', proname => 'tsmultirange', prorettype => 'tsmultirange', proargtypes => 'tsrange', prosrc => 'multirange_constructor1' }, { oid => '4288', descr => 'tsmultirange constructor', - proname => 'tsmultirange', provariadic => 'tsrange', proisstrict => 'f', + proname => 'tsmultirange', provariadic => 'tsrange', prorettype => 'tsmultirange', proargtypes => '_tsrange', proallargtypes => '{_tsrange}', proargmodes => '{v}', prosrc => 'multirange_constructor2' }, { oid => '4289', descr => 'tstzmultirange constructor', - proname => 'tstzmultirange', proisstrict => 'f', + proname => 'tstzmultirange', prorettype => 'tstzmultirange', proargtypes => '', prosrc => 'multirange_constructor0' }, { oid => '4290', descr => 'tstzmultirange constructor', proname => 'tstzmultirange', prorettype => 'tstzmultirange', proargtypes => 'tstzrange', prosrc => 'multirange_constructor1' }, { oid => '4291', descr => 'tstzmultirange constructor', - proname => 'tstzmultirange', provariadic => 'tstzrange', proisstrict => 'f', + proname => 'tstzmultirange', provariadic => 'tstzrange', prorettype => 'tstzmultirange', proargtypes => '_tstzrange', proallargtypes => '{_tstzrange}', proargmodes => '{v}', prosrc => 'multirange_constructor2' }, { oid => '4292', descr => 'datemultirange constructor', - proname => 'datemultirange', proisstrict => 'f', + proname => 'datemultirange', prorettype => 'datemultirange', proargtypes => '', prosrc => 'multirange_constructor0' }, { oid => '4293', descr => 'datemultirange constructor', proname => 'datemultirange', prorettype => 'datemultirange', proargtypes => 'daterange', prosrc => 'multirange_constructor1' }, { oid => '4294', descr => 'datemultirange constructor', - proname => 'datemultirange', provariadic => 'daterange', proisstrict => 'f', + proname => 'datemultirange', provariadic => 'daterange', prorettype => 'datemultirange', proargtypes => '_daterange', proallargtypes => '{_daterange}', proargmodes => '{v}', prosrc => 'multirange_constructor2' }, { oid => '4295', descr => 'int8multirange constructor', - proname => 'int8multirange', proisstrict => 'f', + proname => 'int8multirange', prorettype => 'int8multirange', proargtypes => '', prosrc => 'multirange_constructor0' }, { oid => '4296', descr => 'int8multirange constructor', proname => 'int8multirange', prorettype => 'int8multirange', proargtypes => 'int8range', prosrc => 'multirange_constructor1' }, { oid => '4297', descr => 'int8multirange constructor', - proname => 'int8multirange', provariadic => 'int8range', proisstrict => 'f', + proname => 'int8multirange', provariadic => 'int8range', prorettype => 'int8multirange', proargtypes => '_int8range', proallargtypes => '{_int8range}', proargmodes => '{v}', prosrc => 'multirange_constructor2' }, From 9486844f301e265a3ad11b612decaba2462c3c15 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 23 Apr 2021 13:27:01 +0200 Subject: [PATCH 176/671] Use correct format placeholder for WSAGetLastError() Some code thought this was unsigned, but it's signed int. --- src/backend/libpq/pqcomm.c | 2 +- src/backend/port/win32/socket.c | 2 +- src/backend/storage/ipc/latch.c | 6 +++--- src/interfaces/libpq/fe-connect.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index 4cd6d6dfbb985..b215b77fee26f 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -1594,7 +1594,7 @@ pq_setkeepaliveswin32(Port *port, int idle, int interval) != 0) { ereport(LOG, - (errmsg("WSAIoctl(%s) failed: %ui", + (errmsg("WSAIoctl(%s) failed: %d", "SIO_KEEPALIVE_VALS", WSAGetLastError()))); return STATUS_ERROR; } diff --git a/src/backend/port/win32/socket.c b/src/backend/port/win32/socket.c index a8012c2798df9..af151e847093c 100644 --- a/src/backend/port/win32/socket.c +++ b/src/backend/port/win32/socket.c @@ -635,7 +635,7 @@ pgwin32_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, c { ZeroMemory(&resEvents, sizeof(resEvents)); if (WSAEnumNetworkEvents(sockets[i], events[i], &resEvents) != 0) - elog(ERROR, "failed to enumerate network events: error code %u", + elog(ERROR, "failed to enumerate network events: error code %d", WSAGetLastError()); /* Read activity? */ if (readfds && FD_ISSET(sockets[i], readfds)) diff --git a/src/backend/storage/ipc/latch.c b/src/backend/storage/ipc/latch.c index 5f3318fa8f1c7..e91755c7042a1 100644 --- a/src/backend/storage/ipc/latch.c +++ b/src/backend/storage/ipc/latch.c @@ -1280,11 +1280,11 @@ WaitEventAdjustWin32(WaitEventSet *set, WaitEvent *event) { *handle = WSACreateEvent(); if (*handle == WSA_INVALID_EVENT) - elog(ERROR, "failed to create event for socket: error code %u", + elog(ERROR, "failed to create event for socket: error code %d", WSAGetLastError()); } if (WSAEventSelect(event->fd, *handle, flags) != 0) - elog(ERROR, "failed to set up event for socket: error code %u", + elog(ERROR, "failed to set up event for socket: error code %d", WSAGetLastError()); Assert(event->fd != PGINVALID_SOCKET); @@ -1971,7 +1971,7 @@ WaitEventSetWaitBlock(WaitEventSet *set, int cur_timeout, ZeroMemory(&resEvents, sizeof(resEvents)); if (WSAEnumNetworkEvents(cur_event->fd, handle, &resEvents) != 0) - elog(ERROR, "failed to enumerate network events: error code %u", + elog(ERROR, "failed to enumerate network events: error code %d", WSAGetLastError()); if ((cur_event->events & WL_SOCKET_READABLE) && (resEvents.lNetworkEvents & FD_READ)) diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index aa654dd6a8e48..96b9edf125653 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -1985,7 +1985,7 @@ setKeepalivesWin32(PGconn *conn) != 0) { appendPQExpBuffer(&conn->errorMessage, - libpq_gettext("WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n"), + libpq_gettext("WSAIoctl(SIO_KEEPALIVE_VALS) failed: %d\n"), WSAGetLastError()); return 0; } From 82c3cd974131d7fa1cfcd07cebfb04fffe26ee35 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 23 Apr 2021 14:18:11 +0200 Subject: [PATCH 177/671] Factor out system call names from error messages Instead, put them in via a format placeholder. This reduces the number of distinct translatable messages and also reduces the chances of typos during translation. We already did this for the system call arguments in a number of cases, so this is just the same thing taken a bit further. Discussion: https://www.postgresql.org/message-id/flat/92d6f545-5102-65d8-3c87-489f71ea0a37%40enterprisedb.com --- src/backend/libpq/pqcomm.c | 46 ++++++++++++++------------ src/backend/postmaster/pgstat.c | 4 +-- src/backend/storage/ipc/latch.c | 25 ++++++-------- src/bin/pg_basebackup/pg_recvlogical.c | 2 +- src/bin/pg_basebackup/receivelog.c | 2 +- src/bin/pg_dump/parallel.c | 6 ++-- src/bin/pg_upgrade/parallel.c | 2 +- src/common/exec.c | 2 +- src/interfaces/libpq/fe-connect.c | 15 ++++++--- src/interfaces/libpq/fe-misc.c | 3 +- 10 files changed, 55 insertions(+), 52 deletions(-) diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index b215b77fee26f..8066ee1d1e07b 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -485,8 +485,9 @@ StreamServerPort(int family, const char *hostName, unsigned short portNumber, { ereport(LOG, (errcode_for_socket_access(), - /* translator: first %s is IPv4, IPv6, or Unix */ - errmsg("setsockopt(SO_REUSEADDR) failed for %s address \"%s\": %m", + /* translator: third %s is IPv4, IPv6, or Unix */ + errmsg("%s(%s) failed for %s address \"%s\": %m", + "setsockopt", "SO_REUSEADDR", familyDesc, addrDesc))); closesocket(fd); continue; @@ -502,8 +503,9 @@ StreamServerPort(int family, const char *hostName, unsigned short portNumber, { ereport(LOG, (errcode_for_socket_access(), - /* translator: first %s is IPv4, IPv6, or Unix */ - errmsg("setsockopt(IPV6_V6ONLY) failed for %s address \"%s\": %m", + /* translator: third %s is IPv4, IPv6, or Unix */ + errmsg("%s(%s) failed for %s address \"%s\": %m", + "setsockopt", "IPV6_V6ONLY", familyDesc, addrDesc))); closesocket(fd); continue; @@ -741,7 +743,7 @@ StreamConnection(pgsocket server_fd, Port *port) &port->laddr.salen) < 0) { ereport(LOG, - (errmsg("getsockname() failed: %m"))); + (errmsg("%s() failed: %m", "getsockname"))); return STATUS_ERROR; } @@ -761,7 +763,7 @@ StreamConnection(pgsocket server_fd, Port *port) (char *) &on, sizeof(on)) < 0) { ereport(LOG, - (errmsg("setsockopt(%s) failed: %m", "TCP_NODELAY"))); + (errmsg("%s(%s) failed: %m", "setsockopt", "TCP_NODELAY"))); return STATUS_ERROR; } #endif @@ -770,7 +772,7 @@ StreamConnection(pgsocket server_fd, Port *port) (char *) &on, sizeof(on)) < 0) { ereport(LOG, - (errmsg("setsockopt(%s) failed: %m", "SO_KEEPALIVE"))); + (errmsg("%s(%s) failed: %m", "setsockopt", "SO_KEEPALIVE"))); return STATUS_ERROR; } @@ -802,7 +804,7 @@ StreamConnection(pgsocket server_fd, Port *port) &optlen) < 0) { ereport(LOG, - (errmsg("getsockopt(%s) failed: %m", "SO_SNDBUF"))); + (errmsg("%s(%s) failed: %m", "getsockopt", "SO_SNDBUF"))); return STATUS_ERROR; } newopt = PQ_SEND_BUFFER_SIZE * 4; @@ -812,7 +814,7 @@ StreamConnection(pgsocket server_fd, Port *port) sizeof(newopt)) < 0) { ereport(LOG, - (errmsg("setsockopt(%s) failed: %m", "SO_SNDBUF"))); + (errmsg("%s(%s) failed: %m", "setsockopt", "SO_SNDBUF"))); return STATUS_ERROR; } } @@ -1594,8 +1596,8 @@ pq_setkeepaliveswin32(Port *port, int idle, int interval) != 0) { ereport(LOG, - (errmsg("WSAIoctl(%s) failed: %d", - "SIO_KEEPALIVE_VALS", WSAGetLastError()))); + (errmsg("%s(%s) failed: error code %d", + "WSAIoctl", "SIO_KEEPALIVE_VALS", WSAGetLastError()))); return STATUS_ERROR; } if (port->keepalives_idle != idle) @@ -1626,7 +1628,7 @@ pq_getkeepalivesidle(Port *port) &size) < 0) { ereport(LOG, - (errmsg("getsockopt(%s) failed: %m", PG_TCP_KEEPALIVE_IDLE_STR))); + (errmsg("%s(%s) failed: %m", "getsockopt", PG_TCP_KEEPALIVE_IDLE_STR))); port->default_keepalives_idle = -1; /* don't know */ } #else /* WIN32 */ @@ -1671,7 +1673,7 @@ pq_setkeepalivesidle(int idle, Port *port) (char *) &idle, sizeof(idle)) < 0) { ereport(LOG, - (errmsg("setsockopt(%s) failed: %m", PG_TCP_KEEPALIVE_IDLE_STR))); + (errmsg("%s(%s) failed: %m", "setsockopt", PG_TCP_KEEPALIVE_IDLE_STR))); return STATUS_ERROR; } @@ -1711,7 +1713,7 @@ pq_getkeepalivesinterval(Port *port) &size) < 0) { ereport(LOG, - (errmsg("getsockopt(%s) failed: %m", "TCP_KEEPINTVL"))); + (errmsg("%s(%s) failed: %m", "getsockopt", "TCP_KEEPINTVL"))); port->default_keepalives_interval = -1; /* don't know */ } #else @@ -1755,7 +1757,7 @@ pq_setkeepalivesinterval(int interval, Port *port) (char *) &interval, sizeof(interval)) < 0) { ereport(LOG, - (errmsg("setsockopt(%s) failed: %m", "TCP_KEEPINTVL"))); + (errmsg("%s(%s) failed: %m", "setsockopt", "TCP_KEEPINTVL"))); return STATUS_ERROR; } @@ -1767,7 +1769,7 @@ pq_setkeepalivesinterval(int interval, Port *port) if (interval != 0) { ereport(LOG, - (errmsg("setsockopt(%s) not supported", "TCP_KEEPINTVL"))); + (errmsg("%s(%s) not supported", "setsockopt", "TCP_KEEPINTVL"))); return STATUS_ERROR; } #endif @@ -1794,7 +1796,7 @@ pq_getkeepalivescount(Port *port) &size) < 0) { ereport(LOG, - (errmsg("getsockopt(%s) failed: %m", "TCP_KEEPCNT"))); + (errmsg("%s(%s) failed: %m", "getsockopt", "TCP_KEEPCNT"))); port->default_keepalives_count = -1; /* don't know */ } } @@ -1833,7 +1835,7 @@ pq_setkeepalivescount(int count, Port *port) (char *) &count, sizeof(count)) < 0) { ereport(LOG, - (errmsg("setsockopt(%s) failed: %m", "TCP_KEEPCNT"))); + (errmsg("%s(%s) failed: %m", "setsockopt", "TCP_KEEPCNT"))); return STATUS_ERROR; } @@ -1842,7 +1844,7 @@ pq_setkeepalivescount(int count, Port *port) if (count != 0) { ereport(LOG, - (errmsg("setsockopt(%s) not supported", "TCP_KEEPCNT"))); + (errmsg("%s(%s) not supported", "setsockopt", "TCP_KEEPCNT"))); return STATUS_ERROR; } #endif @@ -1869,7 +1871,7 @@ pq_gettcpusertimeout(Port *port) &size) < 0) { ereport(LOG, - (errmsg("getsockopt(%s) failed: %m", "TCP_USER_TIMEOUT"))); + (errmsg("%s(%s) failed: %m", "getsockopt", "TCP_USER_TIMEOUT"))); port->default_tcp_user_timeout = -1; /* don't know */ } } @@ -1908,7 +1910,7 @@ pq_settcpusertimeout(int timeout, Port *port) (char *) &timeout, sizeof(timeout)) < 0) { ereport(LOG, - (errmsg("setsockopt(%s) failed: %m", "TCP_USER_TIMEOUT"))); + (errmsg("%s(%s) failed: %m", "setsockopt", "TCP_USER_TIMEOUT"))); return STATUS_ERROR; } @@ -1917,7 +1919,7 @@ pq_settcpusertimeout(int timeout, Port *port) if (timeout != 0) { ereport(LOG, - (errmsg("setsockopt(%s) not supported", "TCP_USER_TIMEOUT"))); + (errmsg("%s(%s) not supported", "setsockopt", "TCP_USER_TIMEOUT"))); return STATUS_ERROR; } #endif diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index e1ec7d8b7d65a..6e8dee97842bf 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -618,7 +618,7 @@ pgstat_init(void) (char *) &old_rcvbuf, &rcvbufsize) < 0) { ereport(LOG, - (errmsg("getsockopt(%s) failed: %m", "SO_RCVBUF"))); + (errmsg("%s(%s) failed: %m", "getsockopt", "SO_RCVBUF"))); /* if we can't get existing size, always try to set it */ old_rcvbuf = 0; } @@ -629,7 +629,7 @@ pgstat_init(void) if (setsockopt(pgStatSock, SOL_SOCKET, SO_RCVBUF, (char *) &new_rcvbuf, sizeof(new_rcvbuf)) < 0) ereport(LOG, - (errmsg("setsockopt(%s) failed: %m", "SO_RCVBUF"))); + (errmsg("%s(%s) failed: %m", "setsockopt", "SO_RCVBUF"))); } } diff --git a/src/backend/storage/ipc/latch.c b/src/backend/storage/ipc/latch.c index e91755c7042a1..ad781131e2ac8 100644 --- a/src/backend/storage/ipc/latch.c +++ b/src/backend/storage/ipc/latch.c @@ -1061,9 +1061,8 @@ WaitEventAdjustEpoll(WaitEventSet *set, WaitEvent *event, int action) if (rc < 0) ereport(ERROR, (errcode_for_socket_access(), - /* translator: %s is a syscall name, such as "poll()" */ - errmsg("%s failed: %m", - "epoll_ctl()"))); + errmsg("%s() failed: %m", + "epoll_ctl"))); } #endif @@ -1231,9 +1230,8 @@ WaitEventAdjustKqueue(WaitEventSet *set, WaitEvent *event, int old_events) else ereport(ERROR, (errcode_for_socket_access(), - /* translator: %s is a syscall name, such as "poll()" */ - errmsg("%s failed: %m", - "kevent()"))); + errmsg("%s() failed: %m", + "kevent"))); } else if (event->events == WL_POSTMASTER_DEATH && PostmasterPid != getppid() && @@ -1461,9 +1459,8 @@ WaitEventSetWaitBlock(WaitEventSet *set, int cur_timeout, waiting = false; ereport(ERROR, (errcode_for_socket_access(), - /* translator: %s is a syscall name, such as "poll()" */ - errmsg("%s failed: %m", - "epoll_wait()"))); + errmsg("%s() failed: %m", + "epoll_wait"))); } return 0; } @@ -1614,9 +1611,8 @@ WaitEventSetWaitBlock(WaitEventSet *set, int cur_timeout, waiting = false; ereport(ERROR, (errcode_for_socket_access(), - /* translator: %s is a syscall name, such as "poll()" */ - errmsg("%s failed: %m", - "kevent()"))); + errmsg("%s() failed: %m", + "kevent"))); } return 0; } @@ -1731,9 +1727,8 @@ WaitEventSetWaitBlock(WaitEventSet *set, int cur_timeout, waiting = false; ereport(ERROR, (errcode_for_socket_access(), - /* translator: %s is a syscall name, such as "poll()" */ - errmsg("%s failed: %m", - "poll()"))); + errmsg("%s() failed: %m", + "poll"))); } return 0; } diff --git a/src/bin/pg_basebackup/pg_recvlogical.c b/src/bin/pg_basebackup/pg_recvlogical.c index bf0246c4266d4..5efec160e8847 100644 --- a/src/bin/pg_basebackup/pg_recvlogical.c +++ b/src/bin/pg_basebackup/pg_recvlogical.c @@ -411,7 +411,7 @@ StreamLogicalLog(void) } else if (r < 0) { - pg_log_error("select() failed: %m"); + pg_log_error("%s() failed: %m", "select"); goto error; } diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c index 7a2148fd05aa5..3952a3f943004 100644 --- a/src/bin/pg_basebackup/receivelog.c +++ b/src/bin/pg_basebackup/receivelog.c @@ -897,7 +897,7 @@ CopyStreamPoll(PGconn *conn, long timeout_ms, pgsocket stop_socket) { if (errno == EINTR) return 0; /* Got a signal, so not an error */ - pg_log_error("select() failed: %m"); + pg_log_error("%s() failed: %m", "select"); return -1; } if (ret > 0 && FD_ISSET(connsocket, &input_mask)) diff --git a/src/bin/pg_dump/parallel.c b/src/bin/pg_dump/parallel.c index c7351a43fde2d..f1577e785fafe 100644 --- a/src/bin/pg_dump/parallel.c +++ b/src/bin/pg_dump/parallel.c @@ -251,7 +251,7 @@ init_parallel_dump_utils(void) err = WSAStartup(MAKEWORD(2, 2), &wsaData); if (err != 0) { - pg_log_error("WSAStartup failed: %d", err); + pg_log_error("%s() failed: error code %d", "WSAStartup", err); exit_nicely(1); } @@ -1611,7 +1611,7 @@ getMessageFromWorker(ParallelState *pstate, bool do_wait, int *worker) } if (i < 0) - fatal("select() failed: %m"); + fatal("%s() failed: %m", "select"); for (i = 0; i < pstate->numWorkers; i++) { @@ -1761,7 +1761,7 @@ pgpipe(int handles[2]) } if (getsockname(s, (SOCKADDR *) &serv_addr, &len) == SOCKET_ERROR) { - pg_log_error("pgpipe: getsockname() failed: error code %d", + pg_log_error("pgpipe: %s() failed: error code %d", "getsockname", WSAGetLastError()); closesocket(s); return -1; diff --git a/src/bin/pg_upgrade/parallel.c b/src/bin/pg_upgrade/parallel.c index d5883e2eba46b..ee7364da3bb02 100644 --- a/src/bin/pg_upgrade/parallel.c +++ b/src/bin/pg_upgrade/parallel.c @@ -297,7 +297,7 @@ reap_child(bool wait_for_child) #ifndef WIN32 child = waitpid(-1, &work_status, wait_for_child ? 0 : WNOHANG); if (child == (pid_t) -1) - pg_fatal("waitpid() failed: %s\n", strerror(errno)); + pg_fatal("%s() failed: %s\n", "waitpid", strerror(errno)); if (child == 0) return false; /* no children, or no dead children */ if (work_status != 0) diff --git a/src/common/exec.c b/src/common/exec.c index 66c3aa6accfb4..81b810d4cfaf9 100644 --- a/src/common/exec.c +++ b/src/common/exec.c @@ -406,7 +406,7 @@ pclose_check(FILE *stream) { /* pclose() itself failed, and hopefully set errno */ log_error(errcode(ERRCODE_SYSTEM_ERROR), - _("pclose failed: %m")); + _("%s() failed: %m"), "pclose"); } else { diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 96b9edf125653..5a57c9d75b402 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -1863,7 +1863,8 @@ setKeepalivesIdle(PGconn *conn) char sebuf[PG_STRERROR_R_BUFLEN]; appendPQExpBuffer(&conn->errorMessage, - libpq_gettext("setsockopt(%s) failed: %s\n"), + libpq_gettext("%s(%s) failed: %s\n"), + "setsockopt", PG_TCP_KEEPALIVE_IDLE_STR, SOCK_STRERROR(SOCK_ERRNO, sebuf, sizeof(sebuf))); return 0; @@ -1897,7 +1898,8 @@ setKeepalivesInterval(PGconn *conn) char sebuf[PG_STRERROR_R_BUFLEN]; appendPQExpBuffer(&conn->errorMessage, - libpq_gettext("setsockopt(%s) failed: %s\n"), + libpq_gettext("%s(%s) failed: %s\n"), + "setsockopt", "TCP_KEEPINTVL", SOCK_STRERROR(SOCK_ERRNO, sebuf, sizeof(sebuf))); return 0; @@ -1932,7 +1934,8 @@ setKeepalivesCount(PGconn *conn) char sebuf[PG_STRERROR_R_BUFLEN]; appendPQExpBuffer(&conn->errorMessage, - libpq_gettext("setsockopt(%s) failed: %s\n"), + libpq_gettext("%s(%s) failed: %s\n"), + "setsockopt", "TCP_KEEPCNT", SOCK_STRERROR(SOCK_ERRNO, sebuf, sizeof(sebuf))); return 0; @@ -2019,7 +2022,8 @@ setTCPUserTimeout(PGconn *conn) char sebuf[256]; appendPQExpBuffer(&conn->errorMessage, - libpq_gettext("setsockopt(%s) failed: %s\n"), + libpq_gettext("%s(%s) failed: %s\n"), + "setsockopt", "TCP_USER_TIMEOUT", SOCK_STRERROR(SOCK_ERRNO, sebuf, sizeof(sebuf))); return 0; @@ -2632,7 +2636,8 @@ PQconnectPoll(PGconn *conn) (char *) &on, sizeof(on)) < 0) { appendPQExpBuffer(&conn->errorMessage, - libpq_gettext("setsockopt(%s) failed: %s\n"), + libpq_gettext("%s(%s) failed: %s\n"), + "setsockopt", "SO_KEEPALIVE", SOCK_STRERROR(SOCK_ERRNO, sebuf, sizeof(sebuf))); err = 1; diff --git a/src/interfaces/libpq/fe-misc.c b/src/interfaces/libpq/fe-misc.c index 082b583c152c1..b347d7f847937 100644 --- a/src/interfaces/libpq/fe-misc.c +++ b/src/interfaces/libpq/fe-misc.c @@ -1080,7 +1080,8 @@ pqSocketCheck(PGconn *conn, int forRead, int forWrite, time_t end_time) char sebuf[PG_STRERROR_R_BUFLEN]; appendPQExpBuffer(&conn->errorMessage, - libpq_gettext("select() failed: %s\n"), + libpq_gettext("%s() failed: %s\n"), + "select", SOCK_STRERROR(SOCK_ERRNO, sebuf, sizeof(sebuf))); } From bb3ecc8c961896ecb2ad3d5ba705c2877b933945 Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Fri, 23 Apr 2021 15:37:03 -0700 Subject: [PATCH 178/671] amcheck: MAXALIGN() nbtree special area offset. This isn't strictly necessary, but in theory it might matter if in the future the width of the nbtree special area changes -- its total size might not be an even number of MAXALIGN() quantums, even with padding. PageInit() MAXALIGN()s all special area offsets, but amcheck uses the offset to perform initial basic validation of line pointers, so we don't rely on the offset from the page header. The real reason to do this is to set a good example for new code that adds amcheck coverage for other index AMs. Reported-By: Bharath Rupireddy Discussion: https://postgr.es/m/CALj2ACUMqTR9nErh99FbOBmzCXE9=gXNqhBiwYOhejJJS1LXqQ@mail.gmail.com --- contrib/amcheck/verify_nbtree.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c index 3d06be556322e..2c1d5f81a88e3 100644 --- a/contrib/amcheck/verify_nbtree.c +++ b/contrib/amcheck/verify_nbtree.c @@ -3134,7 +3134,7 @@ PageGetItemIdCareful(BtreeCheckState *state, BlockNumber block, Page page, ItemId itemid = PageGetItemId(page, offset); if (ItemIdGetOffset(itemid) + ItemIdGetLength(itemid) > - BLCKSZ - sizeof(BTPageOpaqueData)) + BLCKSZ - MAXALIGN(sizeof(BTPageOpaqueData))) ereport(ERROR, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("line pointer points past end of tuple space in index \"%s\"", From 4aba61b87026b43fb37fc8e9ec5d9ae208e07b6b Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sat, 24 Apr 2021 09:09:02 +0900 Subject: [PATCH 179/671] Add some forgotten LSN_FORMAT_ARGS() in xlogreader.c 6f6f284 has introduced a specific macro to make printf()-ing of LSNs easier. This takes care of what looks like the remaining code paths that did not get the call. Author: Michael Paquier Reviewed-by: Kyotaro Horiguchi, Tom Lane Discussion: https://postgr.es/m/YIJS9x6K8ruizN7j@paquier.xyz --- src/backend/access/transam/xlogreader.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index 3ae4127b8a8b3..4277e92d7c956 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -754,8 +754,7 @@ XLogDecodeOneRecord(XLogReaderState *state, bool allow_oversized) targetRecOff == pageHeaderSize) { report_invalid_record(state, "contrecord is requested by %X/%X", - (uint32) (state->DecodeRecPtr >> 32), - (uint32) state->DecodeRecPtr); + LSN_FORMAT_ARGS(state->DecodeRecPtr)); goto err; } @@ -968,10 +967,8 @@ XLogDecodeOneRecord(XLogReaderState *state, bool allow_oversized) report_invalid_record( state, "there is no contrecord flag at %X/%X reading %X/%X", - (uint32) (state->recordContRecPtr >> 32), - (uint32) state->recordContRecPtr, - (uint32) (state->DecodeRecPtr >> 32), - (uint32) state->DecodeRecPtr); + LSN_FORMAT_ARGS(state->recordContRecPtr), + LSN_FORMAT_ARGS(state->DecodeRecPtr)); goto err; } @@ -986,10 +983,8 @@ XLogDecodeOneRecord(XLogReaderState *state, bool allow_oversized) state, "invalid contrecord length %u at %X/%X reading %X/%X, expected %u", pageHeader->xlp_rem_len, - (uint32) (state->recordContRecPtr >> 32), - (uint32) state->recordContRecPtr, - (uint32) (state->DecodeRecPtr >> 32), - (uint32) state->DecodeRecPtr, + LSN_FORMAT_ARGS(state->recordContRecPtr), + LSN_FORMAT_ARGS(state->DecodeRecPtr), state->recordRemainLen); goto err; } From 0d0049c58b4970183a102fc1f7dc1e9bef2a7149 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sat, 24 Apr 2021 10:44:13 +0900 Subject: [PATCH 180/671] Doc: Remove extraneous whitespaces with some tags Author: Justin Pryzby Discussion: https://postgr.es/m/20210423184338.GL7256@telsasoft.com --- doc/src/sgml/maintenance.sgml | 2 +- doc/src/sgml/mvcc.sgml | 2 +- doc/src/sgml/pgcrypto.sgml | 2 +- doc/src/sgml/ref/pg_rewind.sgml | 2 +- doc/src/sgml/runtime.sgml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml index 4adb34a21b145..ee6113926ac8c 100644 --- a/doc/src/sgml/maintenance.sgml +++ b/doc/src/sgml/maintenance.sgml @@ -719,7 +719,7 @@ HINT: Stop the postmaster and vacuum that database in single-user mode. PostgreSQL has an optional but highly recommended feature called autovacuum, whose purpose is to automate the execution of - VACUUM and ANALYZE commands. + VACUUM and ANALYZE commands. When enabled, autovacuum checks for tables that have had a large number of inserted, updated or deleted tuples. These checks use the statistics collection facility; diff --git a/doc/src/sgml/mvcc.sgml b/doc/src/sgml/mvcc.sgml index b46cba8158285..6cb9c631613d8 100644 --- a/doc/src/sgml/mvcc.sgml +++ b/doc/src/sgml/mvcc.sgml @@ -1074,7 +1074,7 @@ ERROR: could not serialize access due to read/write dependencies among transact
- Conflicting Lock Modes + Conflicting Lock Modes diff --git a/doc/src/sgml/pgcrypto.sgml b/doc/src/sgml/pgcrypto.sgml index b6bb23de0f91d..13770dfc6f66c 100644 --- a/doc/src/sgml/pgcrypto.sgml +++ b/doc/src/sgml/pgcrypto.sgml @@ -1410,7 +1410,7 @@ gen_random_uuid() returns uuid KAME kame/sys/crypto - SHA256/384/512 + SHA256/384/512 Aaron D. Gifford OpenBSD sys/crypto diff --git a/doc/src/sgml/ref/pg_rewind.sgml b/doc/src/sgml/ref/pg_rewind.sgml index 07aae75d8b797..33e6bb64ad61c 100644 --- a/doc/src/sgml/ref/pg_rewind.sgml +++ b/doc/src/sgml/ref/pg_rewind.sgml @@ -25,7 +25,7 @@ PostgreSQL documentation option - + directory diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index 001d195b8e316..f1cbc1d9e922b 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -2258,7 +2258,7 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433 The certificates of intermediate certificate authorities can also be appended to the file. Doing this avoids the necessity of storing intermediate certificates on clients, assuming the root and - intermediate certificates were created with v3_ca + intermediate certificates were created with v3_ca extensions. (This sets the certificate's basic constraint of CA to true.) This allows easier expiration of intermediate certificates. From 9b5558e7ad4706bbd53947e5b4d7c06e150390a5 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sat, 24 Apr 2021 15:07:04 +0900 Subject: [PATCH 181/671] Fix come comments in execMain.c 1375422 has refactored this area of the executor code, and some comments went out-of-sync. Author: Yukun Wang Reviewed-by: Amul Sul Discussion: https://postgr.es/m/OS0PR01MB60033394FCAEF79B98F078F5B4459@OS0PR01MB6003.jpnprd01.prod.outlook.com --- src/backend/executor/execMain.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 8d0f3de76eddf..df3d7f9a8bced 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -1286,7 +1286,7 @@ ExecGetTriggerResultRel(EState *estate, Oid relid) Relation rel; MemoryContext oldcontext; - /* First, search through the query result relations */ + /* Search through the query result relations */ foreach(l, estate->es_opened_result_relations) { rInfo = lfirst(l); @@ -1295,8 +1295,8 @@ ExecGetTriggerResultRel(EState *estate, Oid relid) } /* - * Third, search through the result relations that were created during - * tuple routing, if any. + * Search through the result relations that were created during tuple + * routing, if any. */ foreach(l, estate->es_tuple_routing_result_relations) { From aa271209f6d995488fc5cba9731415f974823990 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Sat, 24 Apr 2021 09:37:20 -0400 Subject: [PATCH 182/671] Teach PostgresVersion all the ways to mark non-release code As well as 'devel' version_stamp.pl provides for 'alphaN' 'betaN' and 'rcN', so teach PostgresVersion about those. Also stash the version string instead of trying to reconstruct it during stringification. Discussion: https://postgr.es/m/YIHlw5nSgAHs4dK1@paquier.xyz --- src/test/perl/PostgresVersion.pm | 36 ++++++++++++++++---------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/test/perl/PostgresVersion.pm b/src/test/perl/PostgresVersion.pm index 3f3744ccfa9a5..7ce9e62b798dc 100644 --- a/src/test/perl/PostgresVersion.pm +++ b/src/test/perl/PostgresVersion.pm @@ -79,18 +79,24 @@ sub new # postgres command line tool my $devel; ($arg,$devel) = ($1, $2) - if ($arg =~ m/^(?:\(?PostgreSQL\)? )?(\d+(?:\.\d+)*)(devel)?/); + if ($arg =~ + m!^ # beginning of line + (?:\(?PostgreSQL\)?\s)? # ignore PostgreSQL marker + (\d+(?:\.\d+)*) # version number, dotted notation + (devel|(?:alpha|beta|rc)\d+)? # dev marker - see version_stamp.pl + !x); # Split into an array - my @result = split(/\./, $arg); + my @numbers = split(/\./, $arg); # Treat development versions as having a minor/micro version one less than # the first released version of that branch. - push @result, -1 if ($devel); + push @numbers, -1 if ($devel); - return bless \@result, $class; -} + $devel ||= ""; + return bless { str => "$arg$devel", num => \@numbers }, $class; +} # Routine which compares the _pg_version_array obtained for the two # arguments and returns -1, 0, or 1, allowing comparison between two @@ -108,27 +114,21 @@ sub _version_cmp $b = __PACKAGE__->new($b) unless blessed($b); + my ($an, $bn) = ($a->{num}, $b->{num}); + for (my $idx = 0;; $idx++) { - return 0 unless (defined $a->[$idx] && defined $b->[$idx]); - return $a->[$idx] <=> $b->[$idx] - if ($a->[$idx] <=> $b->[$idx]); + return 0 unless (defined $an->[$idx] && defined $bn->[$idx]); + return $an->[$idx] <=> $bn->[$idx] + if ($an->[$idx] <=> $bn->[$idx]); } } -# Render the version number in the standard "joined by dots" notation if -# interpolated into a string. Put back 'devel' if we previously turned it -# into a -1. +# Render the version number using the saved string. sub _stringify { my $self = shift; - my @sections = @$self; - if ($sections[-1] == -1) - { - pop @sections; - $sections[-1] = "$sections[-1]devel"; - } - return join('.', @sections); + return $self->{str}; } 1; From b859d94c638968ccbb517ac7e151bdd94ed7c16a Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Sat, 24 Apr 2021 10:13:07 -0400 Subject: [PATCH 183/671] Provide pg_amcheck with an --install-missing option This will install amcheck in the database if not present. The default schema is for the extension is pg_catalog, but this can be overridden by providing a value for the option. Mark Dilger, slightly editorialized by me. (rather divergent) Discussion: https://postgr.es/m/bdc0f7c2-09e3-ee57-8471-569dfb509234@dunslane.net --- doc/src/sgml/ref/pg_amcheck.sgml | 17 ++++++++++++++ src/bin/pg_amcheck/pg_amcheck.c | 39 ++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/doc/src/sgml/ref/pg_amcheck.sgml b/doc/src/sgml/ref/pg_amcheck.sgml index d01e26faa81be..d4989c9f23176 100644 --- a/doc/src/sgml/ref/pg_amcheck.sgml +++ b/doc/src/sgml/ref/pg_amcheck.sgml @@ -217,6 +217,23 @@ PostgreSQL documentation + + + + + + Install any missing extensions that are required to check the + database(s). If not yet installed, each extension's objects will be + installed into the given + schema, or if not specified + into schema pg_catalog. + + + At present, the only required extension is . + + + + diff --git a/src/bin/pg_amcheck/pg_amcheck.c b/src/bin/pg_amcheck/pg_amcheck.c index bfe3d8e59497d..09ebb4929a7b8 100644 --- a/src/bin/pg_amcheck/pg_amcheck.c +++ b/src/bin/pg_amcheck/pg_amcheck.c @@ -61,6 +61,13 @@ typedef struct AmcheckOptions bool show_progress; int jobs; + /* + * Whether to install missing extensions, and optionally the name of the + * schema in which to install the extension's objects. + */ + bool install_missing; + char *install_schema; + /* Objects to check or not to check, as lists of PatternInfo structs. */ PatternInfoArray include; PatternInfoArray exclude; @@ -109,6 +116,8 @@ static AmcheckOptions opts = { .strict_names = true, .show_progress = false, .jobs = 1, + .install_missing = false, + .install_schema = "pg_catalog", .include = {NULL, 0}, .exclude = {NULL, 0}, .excludetbl = false, @@ -259,6 +268,7 @@ main(int argc, char *argv[]) {"no-strict-names", no_argument, NULL, 10}, {"heapallindexed", no_argument, NULL, 11}, {"parent-check", no_argument, NULL, 12}, + {"install-missing", optional_argument, NULL, 13}, {NULL, 0, NULL, 0} }; @@ -435,6 +445,11 @@ main(int argc, char *argv[]) case 12: opts.parent_check = true; break; + case 13: + opts.install_missing = true; + if (optarg) + opts.install_schema = pg_strdup(optarg); + break; default: fprintf(stderr, _("Try \"%s --help\" for more information.\n"), @@ -543,6 +558,29 @@ main(int argc, char *argv[]) conn = connectDatabase(&cparams, progname, opts.echo, false, true); } + /* + * Optionally install amcheck if not already installed in this + * database. + */ + if (opts.install_missing) + { + char *schema; + char *install_sql; + + /* + * Must re-escape the schema name for each database, as the + * escaping rules may change. + */ + schema = PQescapeIdentifier(conn, opts.install_schema, + strlen(opts.install_schema)); + install_sql = psprintf("CREATE EXTENSION IF NOT EXISTS amcheck WITH SCHEMA %s", + schema); + + executeCommand(conn, install_sql, opts.echo); + pfree(install_sql); + pfree(schema); + } + /* * Verify that amcheck is installed for this next database. User * error could result in a database not having amcheck that should @@ -1153,6 +1191,7 @@ help(const char *progname) printf(_(" -V, --version output version information, then exit\n")); printf(_(" -P, --progress show progress information\n")); printf(_(" -?, --help show this help, then exit\n")); + printf(_(" --install-missing install missing extensions\n")); printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT); printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL); From 59773da2b132ced19c84ff1f69b53b5cf95fd69e Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Sun, 25 Apr 2021 01:08:05 -0700 Subject: [PATCH 184/671] Make a test endure log_error_verbosity=verbose. --- src/test/recovery/t/024_archive_recovery.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/recovery/t/024_archive_recovery.pl b/src/test/recovery/t/024_archive_recovery.pl index 2d8d59454ee29..78f06b690acea 100644 --- a/src/test/recovery/t/024_archive_recovery.pl +++ b/src/test/recovery/t/024_archive_recovery.pl @@ -84,7 +84,7 @@ sub test_recovery_wal_level_minimal # Confirm that the archive recovery fails with an expected error my $logfile = slurp_file($recovery_node->logfile()); ok( $logfile =~ - qr/FATAL: WAL was generated with wal_level=minimal, cannot continue recovering/, + qr/FATAL: .* WAL was generated with wal_level=minimal, cannot continue recovering/, "$node_text ends with an error because it finds WAL generated with wal_level=minimal"); } From 08a986966524e522914b96e4398a4bebf942b298 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 25 Apr 2021 18:02:03 -0400 Subject: [PATCH 185/671] Update comments for rewriteTargetListIU(). This function's behavior for UPDATE on a trigger-updatable view was justified by analogy to what preptlist.c used to do for UPDATE on regular tables. Since preptlist.c hasn't done that since 86dc90056, that argument is no longer sensible, let alone convincing. I think we do still need it to act that way, so update the comment to explain why. --- src/backend/rewrite/rewriteHandler.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index 497d30d8a9304..4fa4ac2aefb78 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -681,12 +681,10 @@ adjustJoinTreeList(Query *parsetree, bool removert, int rt_index) * * 2. For an UPDATE on a trigger-updatable view, add tlist entries for any * unassigned-to attributes, assigning them their old values. These will - * later get expanded to the output values of the view. (This is equivalent - * to what the planner's expand_targetlist() will do for UPDATE on a regular - * table, but it's more convenient to do it here while we still have easy - * access to the view's original RT index.) This is only necessary for - * trigger-updatable views, for which the view remains the result relation of - * the query. For auto-updatable views we must not do this, since it might + * later get expanded to the output values of the view. This is only needed + * for trigger-updatable views, for which the view remains the result relation + * of the query; without it, we would not have a complete "new tuple" to pass + * to triggers. For auto-updatable views we must not do this, since it might * add assignments to non-updatable view columns. For rule-updatable views it * is unnecessary extra work, since the query will be rewritten with a * different result relation which will be processed when we recurse via From 6d2e87a077b3c2394e4adb8eb226b3dcfe3f3346 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Mon, 26 Apr 2021 08:42:46 +0530 Subject: [PATCH 186/671] Fix typo in reorderbuffer.c. Author: Peter Smith Discussion: https://postgr.es/m/CAHut+PtvzuYY0zu=dVRK_WVz5WGos1+otZWgEWqjha1ncoSRag@mail.gmail.com --- src/backend/replication/logical/reorderbuffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 5cb484f03231e..5f8907bb743b5 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -1867,7 +1867,7 @@ ReorderBufferStreamCommit(ReorderBuffer *rb, ReorderBufferTXN *txn) * to truncate the changes in the subscriber. Similarly, for prepared * transactions, we stop decoding if concurrent abort is detected and then * rollback the changes when rollback prepared is encountered. See - * DecodePreare. + * DecodePrepare. */ static inline void SetupCheckXidLive(TransactionId xid) From 3cbea581c76e86d51b8f2babf116e643847e7712 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 26 Apr 2021 07:05:21 +0200 Subject: [PATCH 187/671] Remove unused function argument This was already unused in the initial commit 257836a75585934cc05ed7a80bccf8190d41e056. Apparently, it was used in an earlier proposed patch version. --- src/bin/pg_dump/pg_dump.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index e397b7635680c..3cb3598f2b5e6 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -297,7 +297,7 @@ static const char *getAttrName(int attrnum, const TableInfo *tblInfo); static const char *fmtCopyColumnList(const TableInfo *ti, PQExpBuffer buffer); static bool nonemptyReloptions(const char *reloptions); static void appendIndexCollationVersion(PQExpBuffer buffer, const IndxInfo *indxinfo, - int enc, bool coll_unknown, + bool coll_unknown, Archive *fout); static void appendReloptionsArrayAH(PQExpBuffer buffer, const char *reloptions, const char *prefix, Archive *fout); @@ -16844,8 +16844,7 @@ dumpIndex(Archive *fout, const IndxInfo *indxinfo) "INDEX", qqindxname); if (dopt->binary_upgrade) - appendIndexCollationVersion(q, indxinfo, fout->encoding, - dopt->coll_unknown, fout); + appendIndexCollationVersion(q, indxinfo, dopt->coll_unknown, fout); /* If the index defines identity, we need to record that. */ if (indxinfo->indisreplident) @@ -16877,8 +16876,7 @@ dumpIndex(Archive *fout, const IndxInfo *indxinfo) } else if (dopt->binary_upgrade) { - appendIndexCollationVersion(q, indxinfo, fout->encoding, - dopt->coll_unknown, fout); + appendIndexCollationVersion(q, indxinfo, dopt->coll_unknown, fout); if (indxinfo->dobj.dump & DUMP_COMPONENT_DEFINITION) ArchiveEntry(fout, indxinfo->dobj.catId, indxinfo->dobj.dumpId, @@ -18903,7 +18901,7 @@ nonemptyReloptions(const char *reloptions) * cluster, during a binary upgrade. */ static void -appendIndexCollationVersion(PQExpBuffer buffer, const IndxInfo *indxinfo, int enc, +appendIndexCollationVersion(PQExpBuffer buffer, const IndxInfo *indxinfo, bool coll_unknown, Archive *fout) { char *inddependcollnames = indxinfo->inddependcollnames; From f25a4584c6f56f3407f8f8734c78f2a87e4b77e8 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Mon, 26 Apr 2021 11:27:44 +0530 Subject: [PATCH 188/671] Avoid sending prepare multiple times while decoding. We send the prepare for the concurrently aborted xacts so that later when rollback prepared is decoded and sent, the downstream should be able to rollback such a xact. For 'streaming' case (when we send changes for in-progress transactions), we were sending prepare twice when concurrent abort was detected. Author: Peter Smith Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/f82133c6-6055-b400-7922-97dae9f2b50b@enterprisedb.com --- src/backend/replication/logical/reorderbuffer.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 5f8907bb743b5..c27f710053474 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -2690,8 +2690,11 @@ ReorderBufferPrepare(ReorderBuffer *rb, TransactionId xid, * We send the prepare for the concurrently aborted xacts so that later * when rollback prepared is decoded and sent, the downstream should be * able to rollback such a xact. See comments atop DecodePrepare. + * + * Note, for the concurrent_abort + streaming case a stream_prepare was + * already sent within the ReorderBufferReplay call above. */ - if (txn->concurrent_abort) + if (txn->concurrent_abort && !rbtxn_is_streamed(txn)) rb->prepare(rb, txn, txn->final_lsn); } From 2ecfeda3e916f2a1123f818018d9d35908a499ac Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 26 Apr 2021 15:22:48 +0900 Subject: [PATCH 189/671] Add more tests with triggers on partitions for logical replication The tuple routing logic used by a logical replication worker can fire triggers on relations part of a partition tree, but there was no test coverage in this area. The existing script 003_constraints.pl included something, but nothing when a tuple is applied across partitioned tables on a subscriber. Author: Amit Langote Discussion: https://postgr.es/m/OS0PR01MB611383FA0FE92EB9DE21946AFB769@OS0PR01MB6113.jpnprd01.prod.outlook.com --- src/test/subscription/t/013_partition.pl | 91 +++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/src/test/subscription/t/013_partition.pl b/src/test/subscription/t/013_partition.pl index a04c03a7e249a..4b7d637c70d92 100644 --- a/src/test/subscription/t/013_partition.pl +++ b/src/test/subscription/t/013_partition.pl @@ -3,7 +3,7 @@ use warnings; use PostgresNode; use TestLib; -use Test::More tests => 51; +use Test::More tests => 54; # setup @@ -67,6 +67,40 @@ "CREATE SUBSCRIPTION sub1 CONNECTION '$publisher_connstr' PUBLICATION pub1" ); +# Add set of AFTER replica triggers for testing that they are fired +# correctly. This uses a table that records details of all trigger +# activities. Triggers are marked as enabled for a subset of the +# partition tree. +$node_subscriber1->safe_psql( + 'postgres', qq{ +CREATE TABLE sub1_trigger_activity (tgtab text, tgop text, + tgwhen text, tglevel text, olda int, newa int); +CREATE FUNCTION sub1_trigger_activity_func() RETURNS TRIGGER AS \$\$ +BEGIN + IF (TG_OP = 'INSERT') THEN + INSERT INTO public.sub1_trigger_activity + SELECT TG_RELNAME, TG_OP, TG_WHEN, TG_LEVEL, NULL, NEW.a; + ELSIF (TG_OP = 'UPDATE') THEN + INSERT INTO public.sub1_trigger_activity + SELECT TG_RELNAME, TG_OP, TG_WHEN, TG_LEVEL, OLD.a, NEW.a; + END IF; + RETURN NULL; +END; +\$\$ LANGUAGE plpgsql; +CREATE TRIGGER sub1_tab1_log_op_trigger + AFTER INSERT OR UPDATE ON tab1 + FOR EACH ROW EXECUTE PROCEDURE sub1_trigger_activity_func(); +ALTER TABLE ONLY tab1 ENABLE REPLICA TRIGGER sub1_tab1_log_op_trigger; +CREATE TRIGGER sub1_tab1_2_log_op_trigger + AFTER INSERT OR UPDATE ON tab1_2 + FOR EACH ROW EXECUTE PROCEDURE sub1_trigger_activity_func(); +ALTER TABLE ONLY tab1_2 ENABLE REPLICA TRIGGER sub1_tab1_2_log_op_trigger; +CREATE TRIGGER sub1_tab1_2_2_log_op_trigger + AFTER INSERT OR UPDATE ON tab1_2_2 + FOR EACH ROW EXECUTE PROCEDURE sub1_trigger_activity_func(); +ALTER TABLE ONLY tab1_2_2 ENABLE REPLICA TRIGGER sub1_tab1_2_2_log_op_trigger; +}); + # subscriber 2 # # This does not use partitioning. The tables match the leaf tables on @@ -87,6 +121,34 @@ "CREATE SUBSCRIPTION sub2 CONNECTION '$publisher_connstr' PUBLICATION pub_all" ); +# Add set of AFTER replica triggers for testing that they are fired +# correctly, using the same method as the first subscriber. +$node_subscriber2->safe_psql( + 'postgres', qq{ +CREATE TABLE sub2_trigger_activity (tgtab text, + tgop text, tgwhen text, tglevel text, olda int, newa int); +CREATE FUNCTION sub2_trigger_activity_func() RETURNS TRIGGER AS \$\$ +BEGIN + IF (TG_OP = 'INSERT') THEN + INSERT INTO public.sub2_trigger_activity + SELECT TG_RELNAME, TG_OP, TG_WHEN, TG_LEVEL, NULL, NEW.a; + ELSIF (TG_OP = 'UPDATE') THEN + INSERT INTO public.sub2_trigger_activity + SELECT TG_RELNAME, TG_OP, TG_WHEN, TG_LEVEL, OLD.a, NEW.a; + END IF; + RETURN NULL; +END; +\$\$ LANGUAGE plpgsql; +CREATE TRIGGER sub2_tab1_log_op_trigger + AFTER INSERT OR UPDATE ON tab1 + FOR EACH ROW EXECUTE PROCEDURE sub2_trigger_activity_func(); +ALTER TABLE ONLY tab1 ENABLE REPLICA TRIGGER sub2_tab1_log_op_trigger; +CREATE TRIGGER sub2_tab1_2_log_op_trigger + AFTER INSERT OR UPDATE ON tab1_2 + FOR EACH ROW EXECUTE PROCEDURE sub2_trigger_activity_func(); +ALTER TABLE ONLY tab1_2 ENABLE REPLICA TRIGGER sub2_tab1_2_log_op_trigger; +}); + # Wait for initial sync of all subscriptions my $synced_query = "SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');"; @@ -130,6 +192,14 @@ "SELECT c, a FROM tab1_2 ORDER BY 1, 2"); is($result, qq(sub2_tab1_2|5), 'inserts into tab1_2 replicated'); +# The AFTER trigger of tab1_2 should have recorded one INSERT. +$result = $node_subscriber2->safe_psql('postgres', + "SELECT * FROM sub2_trigger_activity ORDER BY tgtab, tgop, tgwhen, olda, newa;" +); +is( $result, + qq(tab1_2|INSERT|AFTER|ROW||5), + 'check replica insert after trigger applied on subscriber'); + $result = $node_subscriber2->safe_psql('postgres', "SELECT c, a FROM tab1_def ORDER BY 1, 2"); is($result, qq(sub2_tab1_def|0), 'inserts into tab1_def replicated'); @@ -161,6 +231,15 @@ "SELECT a FROM tab1_2_2 ORDER BY 1"); is($result, qq(6), 'updates of tab1_2 replicated into tab1_2_2 correctly'); +# The AFTER trigger should have recorded the UPDATEs of tab1_2_2. +$result = $node_subscriber1->safe_psql('postgres', + "SELECT * FROM sub1_trigger_activity ORDER BY tgtab, tgop, tgwhen, olda, newa;" +); +is( $result, qq(tab1_2_2|INSERT|AFTER|ROW||6 +tab1_2_2|UPDATE|AFTER|ROW|4|6 +tab1_2_2|UPDATE|AFTER|ROW|6|4), + 'check replica update after trigger applied on subscriber'); + $result = $node_subscriber2->safe_psql('postgres', "SELECT c, a FROM tab1_1 ORDER BY 1, 2"); is( $result, qq(sub2_tab1_1|2 @@ -170,6 +249,16 @@ "SELECT c, a FROM tab1_2 ORDER BY 1, 2"); is($result, qq(sub2_tab1_2|6), 'tab1_2 updated'); +# The AFTER trigger should have recorded the updates of tab1_2. +$result = $node_subscriber2->safe_psql('postgres', + "SELECT * FROM sub2_trigger_activity ORDER BY tgtab, tgop, tgwhen, olda, newa;" +); +is( $result, qq(tab1_2|INSERT|AFTER|ROW||5 +tab1_2|UPDATE|AFTER|ROW|4|6 +tab1_2|UPDATE|AFTER|ROW|5|6 +tab1_2|UPDATE|AFTER|ROW|6|4), + 'check replica update after trigger applied on subscriber'); + $result = $node_subscriber2->safe_psql('postgres', "SELECT c, a FROM tab1_def ORDER BY 1"); is($result, qq(sub2_tab1_def|0), 'tab1_def unchanged'); From 38c9a5938ac5e1409b42677fee970a12632852ee Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 26 Apr 2021 12:10:46 +0200 Subject: [PATCH 190/671] Fix pg_upgrade test on Cygwin The verification of permissions doesn't succeed on Cygwin, because the required feature is not implemented for Cygwin at the moment. So skip this part of the test, like MinGW already does. --- src/bin/pg_upgrade/test.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bin/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh index 9c6deae294a7d..1ba326decdd05 100644 --- a/src/bin/pg_upgrade/test.sh +++ b/src/bin/pg_upgrade/test.sh @@ -232,7 +232,7 @@ pg_upgrade $PG_UPGRADE_OPTS -d "${PGDATA}.old" -D "$PGDATA" -b "$oldbindir" -p " # make sure all directories and files have group permissions, on Unix hosts # Windows hosts don't support Unix-y permissions. case $testhost in - MINGW*) ;; + MINGW*|CYGWIN*) ;; *) if [ `find "$PGDATA" -type f ! -perm 640 | wc -l` -ne 0 ]; then echo "files in PGDATA with permission != 640"; exit 1; @@ -240,7 +240,7 @@ case $testhost in esac case $testhost in - MINGW*) ;; + MINGW*|CYGWIN*) ;; *) if [ `find "$PGDATA" -type d ! -perm 750 | wc -l` -ne 0 ]; then echo "directories in PGDATA with permission != 750"; exit 1; From 79a5928ebcb726b7061bf265b5c6990e835e8c4f Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 26 Apr 2021 11:50:35 -0400 Subject: [PATCH 191/671] Doc: document EXTRACT(JULIAN ...), improve Julian Date explanation. For some reason, the "julian" option for extract()/date_part() has never gotten listed in the manual. Also, while Appendix B mentioned in passing that we don't conform to the usual astronomical definition that a Julian date starts at noon UTC, it was kind of vague about what we do instead. Clarify that, and add an example showing how to get the astronomical definition if you want it. It's been like this for ages, so back-patch to all supported branches. Discussion: https://postgr.es/m/1197050.1619123213@sss.pgh.pa.us --- doc/src/sgml/datetime.sgml | 46 +++++++++++++++++++++++++++++++++----- doc/src/sgml/func.sgml | 22 +++++++++++++++++- 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/doc/src/sgml/datetime.sgml b/doc/src/sgml/datetime.sgml index 39fbc39cb0ddb..2e48d5d788580 100644 --- a/doc/src/sgml/datetime.sgml +++ b/doc/src/sgml/datetime.sgml @@ -763,9 +763,6 @@ Gregorian calendar - - Julian date - The SQL standard states that Within the definition of a @@ -868,14 +865,27 @@ $ cal 9 1752 festivals. + + + + Julian Dates + + + Julian date + + - The Julian Date system is another type of - calendar, unrelated to the Julian calendar though it is confusingly + The Julian Date system is a method for + numbering days. It is + unrelated to the Julian calendar, though it is confusingly named similarly to that calendar. The Julian Date system was invented by the French scholar Joseph Justus Scaliger (1540–1609) and probably takes its name from Scaliger's father, the Italian scholar Julius Caesar Scaliger (1484–1558). + + + In the Julian Date system, each day has a sequential number, starting from JD 0 (which is sometimes called the Julian Date). JD 0 corresponds to 1 January 4713 BC in the Julian calendar, or @@ -891,7 +901,31 @@ $ cal 9 1752 input and output of dates (and also uses Julian dates for some internal datetime calculations), it does not observe the nicety of having dates run from noon to noon. PostgreSQL treats a Julian Date - as running from midnight to midnight. + as running from local midnight to local midnight, the same as a normal + date. + + + + This definition does, however, provide a way to obtain the astronomical + definition when you need it: do the arithmetic in time + zone UTC-12. For example, + +=> SELECT extract(julian from '2021-06-23 7:00:00-04'::timestamptz at time zone 'UTC-12'); + extract +------------------------------ + 2459389.95833333333333333333 +(1 row) +=> SELECT extract(julian from '2021-06-23 8:00:00-04'::timestamptz at time zone 'UTC-12'); + extract +-------------------------------------- + 2459390.0000000000000000000000000000 +(1 row) +=> SELECT extract(julian from date '2021-06-24'); + extract +--------- + 2459390 +(1 row) + diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index cc8415689b0c0..b9b25e03a237f 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -7539,7 +7539,8 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); J - Julian Day (integer days since November 24, 4714 BC at midnight UTC) + Julian Date (integer days since November 24, 4714 BC at local + midnight; see ) Q @@ -9609,6 +9610,25 @@ SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); + + julian + + + The Julian Date corresponding to the + date or timestamp (not applicable to intervals). Timestamps + that are not local midnight result in a fractional value. See + for more information. + + + +SELECT EXTRACT(JULIAN FROM DATE '2006-01-01'); +Result: 2453737 +SELECT EXTRACT(JULIAN FROM TIMESTAMP '2006-01-01 12:00'); +Result: 2453737.50000000000000000000 + + + + microseconds From 04942bffd0aa9bd0d143d99b473342eb9ecee88b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 26 Apr 2021 13:58:00 -0400 Subject: [PATCH 192/671] Remove rewriteTargetListIU's expansion of view targetlists in UPDATE. Commit 2ec993a7c, which added triggers on views, modified the rewriter to add dummy entries like "SET x = x" for all columns that weren't actually being updated by the user in any UPDATE directed at a view. That was needed at the time to produce a complete "NEW" row to pass to the trigger. Later it was found to cause problems for ordinary updatable views, so commit cab5dc5da restricted it to happen only for trigger-updatable views. But in the wake of commit 86dc90056, we really don't need it at all. nodeModifyTable.c populates the trigger "OLD" row from the whole-row variable that is generated for the view, and then it computes the "NEW" row using that old row and the UPDATE targetlist. So there is no need for the UPDATE tlist to have dummy entries, any more than it needs them for regular tables or other types of views. (The comments for rewriteTargetListIU suggest that we must do this for correct expansion of NEW references in rules, but I now think that that was just lazy comment editing in 2ec993a7c. If we didn't need it for rules on views before there were triggers, we don't need it after that.) This essentially propagates 86dc90056's decision that we don't need dummy column updates into the view case. Aside from making the different cases more uniform and hence possibly forestalling future bugs, it ought to save a little bit of rewriter/planner effort. Discussion: https://postgr.es/m/2181213.1619397634@sss.pgh.pa.us --- src/backend/rewrite/rewriteHandler.c | 42 +++------------------------- 1 file changed, 4 insertions(+), 38 deletions(-) diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index 4fa4ac2aefb78..1f1df95b0dd0b 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -679,18 +679,7 @@ adjustJoinTreeList(Query *parsetree, bool removert, int rt_index) * and UPDATE, replace explicit DEFAULT specifications with column default * expressions. * - * 2. For an UPDATE on a trigger-updatable view, add tlist entries for any - * unassigned-to attributes, assigning them their old values. These will - * later get expanded to the output values of the view. This is only needed - * for trigger-updatable views, for which the view remains the result relation - * of the query; without it, we would not have a complete "new tuple" to pass - * to triggers. For auto-updatable views we must not do this, since it might - * add assignments to non-updatable view columns. For rule-updatable views it - * is unnecessary extra work, since the query will be rewritten with a - * different result relation which will be processed when we recurse via - * RewriteQuery. - * - * 3. Merge multiple entries for the same target attribute, or declare error + * 2. Merge multiple entries for the same target attribute, or declare error * if we can't. Multiple entries are only allowed for INSERT/UPDATE of * portions of an array or record field, for example * UPDATE table SET foo[2] = 42, foo[4] = 43; @@ -698,11 +687,11 @@ adjustJoinTreeList(Query *parsetree, bool removert, int rt_index) * the expression we want to produce in this case is like * foo = array_set_element(array_set_element(foo, 2, 42), 4, 43) * - * 4. Sort the tlist into standard order: non-junk fields in order by resno, + * 3. Sort the tlist into standard order: non-junk fields in order by resno, * then junk fields (these in no particular order). * - * We must do items 1,2,3 before firing rewrite rules, else rewritten - * references to NEW.foo will produce wrong or incomplete results. Item 4 + * We must do items 1 and 2 before firing rewrite rules, else rewritten + * references to NEW.foo will produce wrong or incomplete results. Item 3 * is not needed for rewriting, but it is helpful for the planner, and we * can do it essentially for free while handling the other items. * @@ -984,29 +973,6 @@ rewriteTargetListIU(List *targetList, false); } - /* - * For an UPDATE on a trigger-updatable view, provide a dummy entry - * whenever there is no explicit assignment. - */ - if (new_tle == NULL && commandType == CMD_UPDATE && - target_relation->rd_rel->relkind == RELKIND_VIEW && - view_has_instead_trigger(target_relation, CMD_UPDATE)) - { - Node *new_expr; - - new_expr = (Node *) makeVar(result_rti, - attrno, - att_tup->atttypid, - att_tup->atttypmod, - att_tup->attcollation, - 0); - - new_tle = makeTargetEntry((Expr *) new_expr, - attrno, - pstrdup(NameStr(att_tup->attname)), - false); - } - if (new_tle) new_tlist = lappend(new_tlist, new_tle); } From 6dd1042eda0acdabaab352c19b783288de62b587 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 22 Apr 2021 16:37:46 -0400 Subject: [PATCH 193/671] psql: tab-complete ALTER ... DETACH CONCURRENTLY / FINALIZE New keywords per 71f4c8c6f74b. Discussion: https://postgr.es/m/20210422204035.GA25929@alvherre.pgsql --- src/bin/psql/tab-complete.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index ed84b3789c63e..7c4933333b3b8 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -2209,6 +2209,8 @@ psql_completion(const char *text, int start, int end) completion_info_charp = prev3_wd; COMPLETE_WITH_QUERY(Query_for_partition_of_table); } + else if (Matches("ALTER", "TABLE", MatchAny, "DETACH", "PARTITION", MatchAny)) + COMPLETE_WITH("CONCURRENTLY", "FINALIZE"); /* ALTER TABLESPACE with RENAME TO, OWNER TO, SET, RESET */ else if (Matches("ALTER", "TABLESPACE", MatchAny)) From e7eea52b2d61917fbbdac7f3f895e4ef636e935b Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Tue, 27 Apr 2021 08:28:26 +0530 Subject: [PATCH 194/671] Fix Logical Replication of Truncate in synchronous commit mode. The Truncate operation acquires an exclusive lock on the target relation and indexes. It then waits for logical replication of the operation to finish at commit. Now because we are acquiring the shared lock on the target index to get index attributes in pgoutput while sending the changes for the Truncate operation, it leads to a deadlock. Actually, we don't need to acquire a lock on the target index as we build the cache entry using a historic snapshot and all the later changes are absorbed while decoding WAL. So, we wrote a special purpose function for logical replication to get a bitmap of replica identity attribute numbers where we get that information without locking the target index. We decided not to backpatch this as there doesn't seem to be any field complaint about this issue since it was introduced in commit 5dfd1e5a in v11. Reported-by: Haiying Tang Author: Takamichi Osumi, test case by Li Japin Reviewed-by: Amit Kapila, Ajin Cherian Discussion: https://postgr.es/m/OS0PR01MB6113C2499C7DC70EE55ADB82FB759@OS0PR01MB6113.jpnprd01.prod.outlook.com --- src/backend/replication/logical/proto.c | 3 +- src/backend/utils/cache/relcache.c | 75 +++++++++++++++++++++++++ src/include/utils/relcache.h | 2 + src/test/subscription/t/010_truncate.pl | 27 ++++++++- 4 files changed, 104 insertions(+), 3 deletions(-) diff --git a/src/backend/replication/logical/proto.c b/src/backend/replication/logical/proto.c index 2a1f9830e05d3..1cf59e0fb0fae 100644 --- a/src/backend/replication/logical/proto.c +++ b/src/backend/replication/logical/proto.c @@ -668,8 +668,7 @@ logicalrep_write_attrs(StringInfo out, Relation rel) /* fetch bitmap of REPLICATION IDENTITY attributes */ replidentfull = (rel->rd_rel->relreplident == REPLICA_IDENTITY_FULL); if (!replidentfull) - idattrs = RelationGetIndexAttrBitmap(rel, - INDEX_ATTR_BITMAP_IDENTITY_KEY); + idattrs = RelationGetIdentityKeyBitmap(rel); /* send the attributes */ for (i = 0; i < desc->natts; i++) diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 29702d6eab18f..466c28d528775 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -5206,6 +5206,81 @@ RelationGetIndexAttrBitmap(Relation relation, IndexAttrBitmapKind attrKind) } } +/* + * RelationGetIdentityKeyBitmap -- get a bitmap of replica identity attribute + * numbers + * + * A bitmap of index attribute numbers for the configured replica identity + * index is returned. + * + * See also comments of RelationGetIndexAttrBitmap(). + * + * This is a special purpose function used during logical replication. Here, + * unlike RelationGetIndexAttrBitmap(), we don't acquire a lock on the required + * index as we build the cache entry using a historic snapshot and all the + * later changes are absorbed while decoding WAL. Due to this reason, we don't + * need to retry here in case of a change in the set of indexes. + */ +Bitmapset * +RelationGetIdentityKeyBitmap(Relation relation) +{ + Bitmapset *idindexattrs = NULL; /* columns in the replica identity */ + List *indexoidlist; + Relation indexDesc; + int i; + MemoryContext oldcxt; + + /* Quick exit if we already computed the result */ + if (relation->rd_idattr != NULL) + return bms_copy(relation->rd_idattr); + + /* Fast path if definitely no indexes */ + if (!RelationGetForm(relation)->relhasindex) + return NULL; + + /* Historic snapshot must be set. */ + Assert(HistoricSnapshotActive()); + + indexoidlist = RelationGetIndexList(relation); + + /* Fall out if no indexes (but relhasindex was set) */ + if (indexoidlist == NIL) + return NULL; + + /* Add referenced attributes to idindexattrs */ + indexDesc = RelationIdGetRelation(relation->rd_replidindex); + for (i = 0; i < indexDesc->rd_index->indnatts; i++) + { + int attrnum = indexDesc->rd_index->indkey.values[i]; + + /* + * We don't include non-key columns into idindexattrs bitmaps. See + * RelationGetIndexAttrBitmap. + */ + if (attrnum != 0) + { + if (i < indexDesc->rd_index->indnkeyatts) + idindexattrs = bms_add_member(idindexattrs, + attrnum - FirstLowInvalidHeapAttributeNumber); + } + } + + RelationClose(indexDesc); + list_free(indexoidlist); + + /* Don't leak the old values of these bitmaps, if any */ + bms_free(relation->rd_idattr); + relation->rd_idattr = NULL; + + /* Now save copy of the bitmap in the relcache entry */ + oldcxt = MemoryContextSwitchTo(CacheMemoryContext); + relation->rd_idattr = bms_copy(idindexattrs); + MemoryContextSwitchTo(oldcxt); + + /* We return our original working copy for caller to play with */ + return idindexattrs; +} + /* * RelationGetExclusionInfo -- get info about index's exclusion constraint * diff --git a/src/include/utils/relcache.h b/src/include/utils/relcache.h index 2fcdf793238b8..f772855ac69d6 100644 --- a/src/include/utils/relcache.h +++ b/src/include/utils/relcache.h @@ -65,6 +65,8 @@ typedef enum IndexAttrBitmapKind extern Bitmapset *RelationGetIndexAttrBitmap(Relation relation, IndexAttrBitmapKind attrKind); +extern Bitmapset *RelationGetIdentityKeyBitmap(Relation relation); + extern void RelationGetExclusionInfo(Relation indexRelation, Oid **operators, Oid **procs, diff --git a/src/test/subscription/t/010_truncate.pl b/src/test/subscription/t/010_truncate.pl index be2c0bdc35e3d..7fc403e138556 100644 --- a/src/test/subscription/t/010_truncate.pl +++ b/src/test/subscription/t/010_truncate.pl @@ -3,7 +3,7 @@ use warnings; use PostgresNode; use TestLib; -use Test::More tests => 9; +use Test::More tests => 11; # setup @@ -158,3 +158,28 @@ $result = $node_subscriber->safe_psql('postgres', "SELECT count(*), min(a), max(a) FROM tab2"); is($result, qq(3|1|3), 'truncate of multiple tables some not published'); + +# Test that truncate works for synchronous logical replication + +$node_publisher->safe_psql('postgres', + "ALTER SYSTEM SET synchronous_standby_names TO 'sub1'"); +$node_publisher->safe_psql('postgres', "SELECT pg_reload_conf()"); + +# insert data to truncate + +$node_publisher->safe_psql('postgres', + "INSERT INTO tab1 VALUES (1), (2), (3)"); + +$node_publisher->wait_for_catchup('sub1'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*), min(a), max(a) FROM tab1"); +is($result, qq(3|1|3), 'check synchronous logical replication'); + +$node_publisher->safe_psql('postgres', "TRUNCATE tab1"); + +$node_publisher->wait_for_catchup('sub1'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*), min(a), max(a) FROM tab1"); +is($result, qq(0||), 'truncate replicated in synchronous logical replication'); From 3fa17d37716f978f80dfcdab4e7c73f3a24e7a48 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Tue, 27 Apr 2021 09:09:11 +0530 Subject: [PATCH 195/671] Use HTAB for replication slot statistics. Previously, we used to use the array of size max_replication_slots to store stats for replication slots. But that had two problems in the cases where a message for dropping a slot gets lost: 1) the stats for the new slot are not recorded if the array is full and 2) writing beyond the end of the array if the user reduces the max_replication_slots. This commit uses HTAB for replication slot statistics, resolving both problems. Now, pgstat_vacuum_stat() search for all the dead replication slots in stats hashtable and tell the collector to remove them. To avoid showing the stats for the already-dropped slots, pg_stat_replication_slots view searches slot stats by the slot name taken from pg_replication_slots. Also, we send a message for creating a slot at slot creation, initializing the stats. This reduces the possibility that the stats are accumulated into the old slot stats when a message for dropping a slot gets lost. Reported-by: Andres Freund Author: Sawada Masahiko, test case by Vignesh C Reviewed-by: Amit Kapila, Vignesh C, Dilip Kumar Discussion: https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de --- contrib/test_decoding/t/001_repl_stats.pl | 69 ++++- src/backend/catalog/system_views.sql | 30 +- src/backend/postmaster/pgstat.c | 340 +++++++++++++--------- src/backend/replication/logical/logical.c | 2 +- src/backend/replication/slot.c | 28 +- src/backend/utils/adt/pgstatfuncs.c | 146 ++++++---- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_proc.dat | 14 +- src/include/pgstat.h | 10 +- src/include/replication/slot.h | 2 +- src/test/regress/expected/rules.out | 4 +- src/tools/pgindent/typedefs.list | 2 +- 12 files changed, 389 insertions(+), 260 deletions(-) diff --git a/contrib/test_decoding/t/001_repl_stats.pl b/contrib/test_decoding/t/001_repl_stats.pl index 11b6cd9b9c70b..3ab0e80722830 100644 --- a/contrib/test_decoding/t/001_repl_stats.pl +++ b/contrib/test_decoding/t/001_repl_stats.pl @@ -2,9 +2,10 @@ # drop replication slot and restart. use strict; use warnings; +use File::Path qw(rmtree); use PostgresNode; use TestLib; -use Test::More tests => 1; +use Test::More tests => 2; # Test set-up my $node = get_new_node('test'); @@ -12,9 +13,22 @@ $node->append_conf('postgresql.conf', 'synchronous_commit = on'); $node->start; +# Check that replication slot stats are expected. +sub test_slot_stats +{ + my ($node, $expected, $msg) = @_; + + my $result = $node->safe_psql( + 'postgres', qq[ + SELECT slot_name, total_txns > 0 AS total_txn, + total_bytes > 0 AS total_bytes + FROM pg_stat_replication_slots + ORDER BY slot_name]); + is($result, $expected, $msg); +} + # Create table. -$node->safe_psql('postgres', - "CREATE TABLE test_repl_stat(col1 int)"); +$node->safe_psql('postgres', "CREATE TABLE test_repl_stat(col1 int)"); # Create replication slots. $node->safe_psql( @@ -26,7 +40,8 @@ ]); # Insert some data. -$node->safe_psql('postgres', "INSERT INTO test_repl_stat values(generate_series(1, 5));"); +$node->safe_psql('postgres', + "INSERT INTO test_repl_stat values(generate_series(1, 5));"); $node->safe_psql( 'postgres', qq[ @@ -50,27 +65,51 @@ # Test to drop one of the replication slot and verify replication statistics data is # fine after restart. -$node->safe_psql('postgres', "SELECT pg_drop_replication_slot('regression_slot4')"); +$node->safe_psql('postgres', + "SELECT pg_drop_replication_slot('regression_slot4')"); $node->stop; $node->start; # Verify statistics data present in pg_stat_replication_slots are sane after # restart. -my $result = $node->safe_psql('postgres', - "SELECT slot_name, total_txns > 0 AS total_txn, - total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots - ORDER BY slot_name" -); -is($result, qq(regression_slot1|t|t +test_slot_stats( + $node, + qq(regression_slot1|t|t regression_slot2|t|t -regression_slot3|t|t), 'check replication statistics are updated'); +regression_slot3|t|t), + 'check replication statistics are updated'); + +# Test to remove one of the replication slots and adjust +# max_replication_slots accordingly to the number of slots. This leads +# to a mismatch between the number of slots present in the stats file and the +# number of stats present in the shared memory, simulating the scenario for +# drop slot message lost by the statistics collector process. We verify +# replication statistics data is fine after restart. + +$node->stop; +my $datadir = $node->data_dir; +my $slot3_replslotdir = "$datadir/pg_replslot/regression_slot3"; + +rmtree($slot3_replslotdir); + +$node->append_conf('postgresql.conf', 'max_replication_slots = 2'); +$node->start; + +# Verify statistics data present in pg_stat_replication_slots are sane after +# restart. +test_slot_stats( + $node, + qq(regression_slot1|t|t +regression_slot2|t|t), + 'check replication statistics after removing the slot file'); # cleanup $node->safe_psql('postgres', "DROP TABLE test_repl_stat"); -$node->safe_psql('postgres', "SELECT pg_drop_replication_slot('regression_slot1')"); -$node->safe_psql('postgres', "SELECT pg_drop_replication_slot('regression_slot2')"); -$node->safe_psql('postgres', "SELECT pg_drop_replication_slot('regression_slot3')"); +$node->safe_psql('postgres', + "SELECT pg_drop_replication_slot('regression_slot1')"); +$node->safe_psql('postgres', + "SELECT pg_drop_replication_slot('regression_slot2')"); # shutdown $node->stop; diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 70e578894f5a0..08f95c43cae77 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -866,20 +866,6 @@ CREATE VIEW pg_stat_replication AS JOIN pg_stat_get_wal_senders() AS W ON (S.pid = W.pid) LEFT JOIN pg_authid AS U ON (S.usesysid = U.oid); -CREATE VIEW pg_stat_replication_slots AS - SELECT - s.slot_name, - s.spill_txns, - s.spill_count, - s.spill_bytes, - s.stream_txns, - s.stream_count, - s.stream_bytes, - s.total_txns, - s.total_bytes, - s.stats_reset - FROM pg_stat_get_replication_slots() AS s; - CREATE VIEW pg_stat_slru AS SELECT s.name, @@ -984,6 +970,22 @@ CREATE VIEW pg_replication_slots AS FROM pg_get_replication_slots() AS L LEFT JOIN pg_database D ON (L.datoid = D.oid); +CREATE VIEW pg_stat_replication_slots AS + SELECT + s.slot_name, + s.spill_txns, + s.spill_count, + s.spill_bytes, + s.stream_txns, + s.stream_count, + s.stream_bytes, + s.total_txns, + s.total_bytes, + s.stats_reset + FROM pg_replication_slots as r, + LATERAL pg_stat_get_replication_slot(slot_name) as s + WHERE r.datoid IS NOT NULL; -- excluding physical slots + CREATE VIEW pg_stat_database AS SELECT D.oid AS datid, diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index 6e8dee97842bf..ba335fd342991 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -106,6 +106,7 @@ #define PGSTAT_DB_HASH_SIZE 16 #define PGSTAT_TAB_HASH_SIZE 512 #define PGSTAT_FUNCTION_HASH_SIZE 512 +#define PGSTAT_REPLSLOT_HASH_SIZE 32 /* ---------- @@ -278,8 +279,7 @@ static PgStat_ArchiverStats archiverStats; static PgStat_GlobalStats globalStats; static PgStat_WalStats walStats; static PgStat_SLRUStats slruStats[SLRU_NUM_ELEMENTS]; -static PgStat_ReplSlotStats *replSlotStats; -static int nReplSlotStats; +static HTAB *replSlotStatHash = NULL; static PgStat_RecoveryPrefetchStats recoveryPrefetchStats; /* @@ -319,8 +319,8 @@ static void backend_read_statsfile(void); static bool pgstat_write_statsfile_needed(void); static bool pgstat_db_requested(Oid databaseid); -static int pgstat_replslot_index(const char *name, bool create_it); -static void pgstat_reset_replslot(int i, TimestampTz ts); +static PgStat_StatReplSlotEntry *pgstat_get_replslot_entry(NameData name, bool create_it); +static void pgstat_reset_replslot(PgStat_StatReplSlotEntry *slotstats, TimestampTz ts); static void pgstat_send_tabstat(PgStat_MsgTabstat *tsmsg); static void pgstat_send_funcstats(void); @@ -1109,6 +1109,24 @@ pgstat_vacuum_stat(void) /* Clean up */ hash_destroy(htab); + /* + * Search for all the dead replication slots in stats hashtable and tell + * the stats collector to drop them. + */ + if (replSlotStatHash) + { + PgStat_StatReplSlotEntry *slotentry; + + hash_seq_init(&hstat, replSlotStatHash); + while ((slotentry = (PgStat_StatReplSlotEntry *) hash_seq_search(&hstat)) != NULL) + { + CHECK_FOR_INTERRUPTS(); + + if (SearchNamedReplicationSlot(NameStr(slotentry->slotname), true) == NULL) + pgstat_report_replslot_drop(NameStr(slotentry->slotname)); + } + } + /* * Lookup our own database entry; if not found, nothing more to do. */ @@ -1516,30 +1534,6 @@ pgstat_reset_replslot_counter(const char *name) if (name) { - ReplicationSlot *slot; - - /* - * Check if the slot exists with the given name. It is possible that by - * the time this message is executed the slot is dropped but at least - * this check will ensure that the given name is for a valid slot. - */ - LWLockAcquire(ReplicationSlotControlLock, LW_SHARED); - slot = SearchNamedReplicationSlot(name); - LWLockRelease(ReplicationSlotControlLock); - - if (!slot) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("replication slot \"%s\" does not exist", - name))); - - /* - * Nothing to do for physical slots as we collect stats only for - * logical slots. - */ - if (SlotIsPhysical(slot)) - return; - namestrcpy(&msg.m_slotname, name); msg.clearall = false; } @@ -1813,7 +1807,7 @@ pgstat_report_tempfile(size_t filesize) * ---------- */ void -pgstat_report_replslot(const PgStat_ReplSlotStats *repSlotStat) +pgstat_report_replslot(const PgStat_StatReplSlotEntry *repSlotStat) { PgStat_MsgReplSlot msg; @@ -1822,6 +1816,7 @@ pgstat_report_replslot(const PgStat_ReplSlotStats *repSlotStat) */ pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_REPLSLOT); namestrcpy(&msg.m_slotname, NameStr(repSlotStat->slotname)); + msg.m_create = false; msg.m_drop = false; msg.m_spill_txns = repSlotStat->spill_txns; msg.m_spill_count = repSlotStat->spill_count; @@ -1834,6 +1829,24 @@ pgstat_report_replslot(const PgStat_ReplSlotStats *repSlotStat) pgstat_send(&msg, sizeof(PgStat_MsgReplSlot)); } +/* ---------- + * pgstat_report_replslot_create() - + * + * Tell the collector about creating the replication slot. + * ---------- + */ +void +pgstat_report_replslot_create(const char *slotname) +{ + PgStat_MsgReplSlot msg; + + pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_REPLSLOT); + namestrcpy(&msg.m_slotname, slotname); + msg.m_create = true; + msg.m_drop = false; + pgstat_send(&msg, sizeof(PgStat_MsgReplSlot)); +} + /* ---------- * pgstat_report_replslot_drop() - * @@ -1847,6 +1860,7 @@ pgstat_report_replslot_drop(const char *slotname) pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_REPLSLOT); namestrcpy(&msg.m_slotname, slotname); + msg.m_create = false; msg.m_drop = true; pgstat_send(&msg, sizeof(PgStat_MsgReplSlot)); } @@ -2872,17 +2886,15 @@ pgstat_fetch_slru(void) * pgstat_fetch_replslot() - * * Support function for the SQL-callable pgstat* functions. Returns - * a pointer to the replication slot statistics struct and sets the - * number of entries in nslots_p. + * a pointer to the replication slot statistics struct. * --------- */ -PgStat_ReplSlotStats * -pgstat_fetch_replslot(int *nslots_p) +PgStat_StatReplSlotEntry * +pgstat_fetch_replslot(NameData slotname) { backend_read_statsfile(); - *nslots_p = nReplSlotStats; - return replSlotStats; + return pgstat_get_replslot_entry(slotname, false); } /* @@ -3654,7 +3666,6 @@ pgstat_write_statsfiles(bool permanent, bool allDbs) const char *tmpfile = permanent ? PGSTAT_STAT_PERMANENT_TMPFILE : pgstat_stat_tmpname; const char *statfile = permanent ? PGSTAT_STAT_PERMANENT_FILENAME : pgstat_stat_filename; int rc; - int i; elog(DEBUG2, "writing stats file \"%s\"", statfile); @@ -3744,11 +3755,17 @@ pgstat_write_statsfiles(bool permanent, bool allDbs) /* * Write replication slot stats struct */ - for (i = 0; i < nReplSlotStats; i++) + if (replSlotStatHash) { - fputc('R', fpout); - rc = fwrite(&replSlotStats[i], sizeof(PgStat_ReplSlotStats), 1, fpout); - (void) rc; /* we'll check for error with ferror */ + PgStat_StatReplSlotEntry *slotent; + + hash_seq_init(&hstat, replSlotStatHash); + while ((slotent = (PgStat_StatReplSlotEntry *) hash_seq_search(&hstat)) != NULL) + { + fputc('R', fpout); + rc = fwrite(slotent, sizeof(PgStat_StatReplSlotEntry), 1, fpout); + (void) rc; /* we'll check for error with ferror */ + } } /* @@ -3975,12 +3992,6 @@ pgstat_read_statsfiles(Oid onlydb, bool permanent, bool deep) dbhash = hash_create("Databases hash", PGSTAT_DB_HASH_SIZE, &hash_ctl, HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); - /* Allocate the space for replication slot statistics */ - replSlotStats = MemoryContextAllocZero(pgStatLocalContext, - max_replication_slots - * sizeof(PgStat_ReplSlotStats)); - nReplSlotStats = 0; - /* * Clear out global, archiver, WAL and SLRU statistics so they start from * zero in case we can't load an existing statsfile. @@ -4005,12 +4016,6 @@ pgstat_read_statsfiles(Oid onlydb, bool permanent, bool deep) for (i = 0; i < SLRU_NUM_ELEMENTS; i++) slruStats[i].stat_reset_timestamp = globalStats.stat_reset_timestamp; - /* - * Set the same reset timestamp for all replication slots too. - */ - for (i = 0; i < max_replication_slots; i++) - replSlotStats[i].stat_reset_timestamp = globalStats.stat_reset_timestamp; - /* * Try to open the stats file. If it doesn't exist, the backends simply * return zero for anything and the collector simply starts from scratch @@ -4197,21 +4202,43 @@ pgstat_read_statsfiles(Oid onlydb, bool permanent, bool deep) break; /* - * 'R' A PgStat_ReplSlotStats struct describing a replication - * slot follows. + * 'R' A PgStat_StatReplSlotEntry struct describing a + * replication slot follows. */ case 'R': - if (fread(&replSlotStats[nReplSlotStats], 1, sizeof(PgStat_ReplSlotStats), fpin) - != sizeof(PgStat_ReplSlotStats)) { - ereport(pgStatRunningInCollector ? LOG : WARNING, - (errmsg("corrupted statistics file \"%s\"", - statfile))); - memset(&replSlotStats[nReplSlotStats], 0, sizeof(PgStat_ReplSlotStats)); - goto done; + PgStat_StatReplSlotEntry slotbuf; + PgStat_StatReplSlotEntry *slotent; + + if (fread(&slotbuf, 1, sizeof(PgStat_StatReplSlotEntry), fpin) + != sizeof(PgStat_StatReplSlotEntry)) + { + ereport(pgStatRunningInCollector ? LOG : WARNING, + (errmsg("corrupted statistics file \"%s\"", + statfile))); + goto done; + } + + /* Create hash table if we don't have it already. */ + if (replSlotStatHash == NULL) + { + HASHCTL hash_ctl; + + hash_ctl.keysize = sizeof(NameData); + hash_ctl.entrysize = sizeof(PgStat_StatReplSlotEntry); + hash_ctl.hcxt = pgStatLocalContext; + replSlotStatHash = hash_create("Replication slots hash", + PGSTAT_REPLSLOT_HASH_SIZE, + &hash_ctl, + HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); + } + + slotent = (PgStat_StatReplSlotEntry *) hash_search(replSlotStatHash, + (void *) &slotbuf.slotname, + HASH_ENTER, NULL); + memcpy(slotent, &slotbuf, sizeof(PgStat_StatReplSlotEntry)); + break; } - nReplSlotStats++; - break; case 'E': goto done; @@ -4424,7 +4451,7 @@ pgstat_read_db_statsfile_timestamp(Oid databaseid, bool permanent, PgStat_ArchiverStats myArchiverStats; PgStat_WalStats myWalStats; PgStat_SLRUStats mySLRUStats[SLRU_NUM_ELEMENTS]; - PgStat_ReplSlotStats myReplSlotStats; + PgStat_StatReplSlotEntry myReplSlotStats; PgStat_RecoveryPrefetchStats myRecoveryPrefetchStats; FILE *fpin; int32 format_id; @@ -4553,12 +4580,12 @@ pgstat_read_db_statsfile_timestamp(Oid databaseid, bool permanent, break; /* - * 'R' A PgStat_ReplSlotStats struct describing a replication - * slot follows. + * 'R' A PgStat_StatReplSlotEntry struct describing a + * replication slot follows. */ case 'R': - if (fread(&myReplSlotStats, 1, sizeof(PgStat_ReplSlotStats), fpin) - != sizeof(PgStat_ReplSlotStats)) + if (fread(&myReplSlotStats, 1, sizeof(PgStat_StatReplSlotEntry), fpin) + != sizeof(PgStat_StatReplSlotEntry)) { ereport(pgStatRunningInCollector ? LOG : WARNING, (errmsg("corrupted statistics file \"%s\"", @@ -4764,8 +4791,7 @@ pgstat_clear_snapshot(void) /* Reset variables */ pgStatLocalContext = NULL; pgStatDBHash = NULL; - replSlotStats = NULL; - nReplSlotStats = 0; + replSlotStatHash = NULL; /* * Historically the backend_status.c facilities lived in this file, and @@ -5189,20 +5215,26 @@ static void pgstat_recv_resetreplslotcounter(PgStat_MsgResetreplslotcounter *msg, int len) { - int i; - int idx = -1; + PgStat_StatReplSlotEntry *slotent; TimestampTz ts; + /* Return if we don't have replication slot statistics */ + if (replSlotStatHash == NULL) + return; + ts = GetCurrentTimestamp(); if (msg->clearall) { - for (i = 0; i < nReplSlotStats; i++) - pgstat_reset_replslot(i, ts); + HASH_SEQ_STATUS sstat; + + hash_seq_init(&sstat, replSlotStatHash); + while ((slotent = (PgStat_StatReplSlotEntry *) hash_seq_search(&sstat)) != NULL) + pgstat_reset_replslot(slotent, ts); } else { - /* Get the index of replication slot statistics to reset */ - idx = pgstat_replslot_index(NameStr(msg->m_slotname), false); + /* Get the slot statistics to reset */ + slotent = pgstat_get_replslot_entry(msg->m_slotname, false); /* * Nothing to do if the given slot entry is not found. This could @@ -5210,11 +5242,11 @@ pgstat_recv_resetreplslotcounter(PgStat_MsgResetreplslotcounter *msg, * corresponding statistics entry is also removed before receiving the * reset message. */ - if (idx < 0) + if (!slotent) return; /* Reset the stats for the requested replication slot */ - pgstat_reset_replslot(idx, ts); + pgstat_reset_replslot(slotent, ts); } } @@ -5532,46 +5564,45 @@ pgstat_recv_checksum_failure(PgStat_MsgChecksumFailure *msg, int len) static void pgstat_recv_replslot(PgStat_MsgReplSlot *msg, int len) { - int idx; - - /* - * Get the index of replication slot statistics. On dropping, we don't - * create the new statistics. - */ - idx = pgstat_replslot_index(NameStr(msg->m_slotname), !msg->m_drop); - - /* - * The slot entry is not found or there is no space to accommodate the new - * entry. This could happen when the message for the creation of a slot - * reached before the drop message even though the actual operations - * happen in reverse order. In such a case, the next update of the - * statistics for the same slot will create the required entry. - */ - if (idx < 0) - return; - - /* it must be a valid replication slot index */ - Assert(idx < nReplSlotStats); - if (msg->m_drop) { + Assert(!msg->m_create); + /* Remove the replication slot statistics with the given name */ - if (idx < nReplSlotStats - 1) - memcpy(&replSlotStats[idx], &replSlotStats[nReplSlotStats - 1], - sizeof(PgStat_ReplSlotStats)); - nReplSlotStats--; + if (replSlotStatHash != NULL) + (void) hash_search(replSlotStatHash, + (void *) &(msg->m_slotname), + HASH_REMOVE, + NULL); } else { - /* Update the replication slot statistics */ - replSlotStats[idx].spill_txns += msg->m_spill_txns; - replSlotStats[idx].spill_count += msg->m_spill_count; - replSlotStats[idx].spill_bytes += msg->m_spill_bytes; - replSlotStats[idx].stream_txns += msg->m_stream_txns; - replSlotStats[idx].stream_count += msg->m_stream_count; - replSlotStats[idx].stream_bytes += msg->m_stream_bytes; - replSlotStats[idx].total_txns += msg->m_total_txns; - replSlotStats[idx].total_bytes += msg->m_total_bytes; + PgStat_StatReplSlotEntry *slotent; + + slotent = pgstat_get_replslot_entry(msg->m_slotname, true); + Assert(slotent); + + if (msg->m_create) + { + /* + * If the message for dropping the slot with the same name gets + * lost, slotent has stats for the old slot. So we initialize all + * counters at slot creation. + */ + pgstat_reset_replslot(slotent, 0); + } + else + { + /* Update the replication slot statistics */ + slotent->spill_txns += msg->m_spill_txns; + slotent->spill_count += msg->m_spill_count; + slotent->spill_bytes += msg->m_spill_bytes; + slotent->stream_txns += msg->m_stream_txns; + slotent->stream_count += msg->m_stream_count; + slotent->stream_bytes += msg->m_stream_bytes; + slotent->total_txns += msg->m_total_txns; + slotent->total_bytes += msg->m_total_bytes; + } } } @@ -5749,59 +5780,80 @@ pgstat_db_requested(Oid databaseid) } /* ---------- - * pgstat_replslot_index + * pgstat_replslot_entry * - * Return the index of entry of a replication slot with the given name, or - * -1 if the slot is not found. + * Return the entry of replication slot stats with the given name. Return + * NULL if not found and the caller didn't request to create it. * - * create_it tells whether to create the new slot entry if it is not found. + * create tells whether to create the new slot entry if it is not found. * ---------- */ -static int -pgstat_replslot_index(const char *name, bool create_it) +static PgStat_StatReplSlotEntry * +pgstat_get_replslot_entry(NameData name, bool create) { - int i; + PgStat_StatReplSlotEntry *slotent; + bool found; - Assert(nReplSlotStats <= max_replication_slots); - for (i = 0; i < nReplSlotStats; i++) + if (replSlotStatHash == NULL) { - if (namestrcmp(&replSlotStats[i].slotname, name) == 0) - return i; /* found */ + HASHCTL hash_ctl; + + /* + * Quick return NULL if the hash table is empty and the caller didn't + * request to create the entry. + */ + if (!create) + return NULL; + + hash_ctl.keysize = sizeof(NameData); + hash_ctl.entrysize = sizeof(PgStat_StatReplSlotEntry); + replSlotStatHash = hash_create("Replication slots hash", + PGSTAT_REPLSLOT_HASH_SIZE, + &hash_ctl, + HASH_ELEM | HASH_BLOBS); } - /* - * The slot is not found. We don't want to register the new statistics if - * the list is already full or the caller didn't request. - */ - if (i == max_replication_slots || !create_it) - return -1; + slotent = (PgStat_StatReplSlotEntry *) hash_search(replSlotStatHash, + (void *) &name, + create ? HASH_ENTER : HASH_FIND, + &found); - /* Register new slot */ - memset(&replSlotStats[nReplSlotStats], 0, sizeof(PgStat_ReplSlotStats)); - namestrcpy(&replSlotStats[nReplSlotStats].slotname, name); + if (!slotent) + { + /* not found */ + Assert(!create && !found); + return NULL; + } + + /* initialize the entry */ + if (create && !found) + { + namestrcpy(&(slotent->slotname), NameStr(name)); + pgstat_reset_replslot(slotent, 0); + } - return nReplSlotStats++; + return slotent; } /* ---------- * pgstat_reset_replslot * - * Reset the replication slot stats at index 'i'. + * Reset the given replication slot stats. * ---------- */ static void -pgstat_reset_replslot(int i, TimestampTz ts) +pgstat_reset_replslot(PgStat_StatReplSlotEntry *slotent, TimestampTz ts) { /* reset only counters. Don't clear slot name */ - replSlotStats[i].spill_txns = 0; - replSlotStats[i].spill_count = 0; - replSlotStats[i].spill_bytes = 0; - replSlotStats[i].stream_txns = 0; - replSlotStats[i].stream_count = 0; - replSlotStats[i].stream_bytes = 0; - replSlotStats[i].total_txns = 0; - replSlotStats[i].total_bytes = 0; - replSlotStats[i].stat_reset_timestamp = ts; + slotent->spill_txns = 0; + slotent->spill_count = 0; + slotent->spill_bytes = 0; + slotent->stream_txns = 0; + slotent->stream_count = 0; + slotent->stream_bytes = 0; + slotent->total_txns = 0; + slotent->total_bytes = 0; + slotent->stat_reset_timestamp = ts; } /* diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index 35b0c67641291..00543ede45a00 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -1773,7 +1773,7 @@ void UpdateDecodingStats(LogicalDecodingContext *ctx) { ReorderBuffer *rb = ctx->reorder; - PgStat_ReplSlotStats repSlotStat; + PgStat_StatReplSlotEntry repSlotStat; /* Nothing to do if we don't have any replication stats to be sent. */ if (rb->spillBytes <= 0 && rb->streamBytes <= 0 && rb->totalBytes <= 0) diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index f61b163f78d0e..cf261e200e4bc 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -328,12 +328,7 @@ ReplicationSlotCreate(const char *name, bool db_specific, * ReplicationSlotAllocationLock. */ if (SlotIsLogical(slot)) - { - PgStat_ReplSlotStats repSlotStat; - MemSet(&repSlotStat, 0, sizeof(PgStat_ReplSlotStats)); - namestrcpy(&repSlotStat.slotname, NameStr(slot->data.name)); - pgstat_report_replslot(&repSlotStat); - } + pgstat_report_replslot_create(NameStr(slot->data.name)); /* * Now that the slot has been marked as in_use and active, it's safe to @@ -349,17 +344,15 @@ ReplicationSlotCreate(const char *name, bool db_specific, * Search for the named replication slot. * * Return the replication slot if found, otherwise NULL. - * - * The caller must hold ReplicationSlotControlLock in shared mode. */ ReplicationSlot * -SearchNamedReplicationSlot(const char *name) +SearchNamedReplicationSlot(const char *name, bool need_lock) { int i; - ReplicationSlot *slot = NULL; + ReplicationSlot *slot = NULL; - Assert(LWLockHeldByMeInMode(ReplicationSlotControlLock, - LW_SHARED)); + if (need_lock) + LWLockAcquire(ReplicationSlotControlLock, LW_SHARED); for (i = 0; i < max_replication_slots; i++) { @@ -372,6 +365,9 @@ SearchNamedReplicationSlot(const char *name) } } + if (need_lock) + LWLockRelease(ReplicationSlotControlLock); + return slot; } @@ -416,7 +412,7 @@ ReplicationSlotAcquireInternal(ReplicationSlot *slot, const char *name, * Search for the slot with the specified name if the slot to acquire is * not given. If the slot is not found, we either return -1 or error out. */ - s = slot ? slot : SearchNamedReplicationSlot(name); + s = slot ? slot : SearchNamedReplicationSlot(name, false); if (s == NULL || !s->in_use) { LWLockRelease(ReplicationSlotControlLock); @@ -713,6 +709,12 @@ ReplicationSlotDropPtr(ReplicationSlot *slot) * reduce that possibility. If the messages reached in reverse, we would * lose one statistics update message. But the next update message will * create the statistics for the replication slot. + * + * XXX In case, the messages for creation and drop slot of the same name + * get lost and create happens before (auto)vacuum cleans up the dead + * slot, the stats will be accumulated into the old slot. One can imagine + * having OIDs for each slot to avoid the accumulation of stats but that + * doesn't seem worth doing as in practice this won't happen frequently. */ if (SlotIsLogical(slot)) pgstat_report_replslot_drop(NameStr(slot->data.name)); diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 87f02d572e65d..14056f53471d3 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -24,6 +24,7 @@ #include "pgstat.h" #include "postmaster/bgworker_internals.h" #include "postmaster/postmaster.h" +#include "replication/slot.h" #include "storage/proc.h" #include "storage/procarray.h" #include "utils/acl.h" @@ -2207,8 +2208,33 @@ pg_stat_reset_replication_slot(PG_FUNCTION_ARGS) char *target = NULL; if (!PG_ARGISNULL(0)) + { + ReplicationSlot *slot; + target = text_to_cstring(PG_GETARG_TEXT_PP(0)); + /* + * Check if the slot exists with the given name. It is possible that + * by the time this message is executed the slot is dropped but at + * least this check will ensure that the given name is for a valid + * slot. + */ + slot = SearchNamedReplicationSlot(target, true); + + if (!slot) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("replication slot \"%s\" does not exist", + target))); + + /* + * Nothing to do for physical slots as we collect stats only for + * logical slots. + */ + if (SlotIsPhysical(slot)) + PG_RETURN_VOID(); + } + pgstat_reset_replslot_counter(target); PG_RETURN_VOID(); @@ -2280,73 +2306,77 @@ pg_stat_get_archiver(PG_FUNCTION_ARGS) PG_RETURN_DATUM(HeapTupleGetDatum(heap_form_tuple(tupdesc, values, nulls))); } -/* Get the statistics for the replication slots */ +/* + * Get the statistics for the replication slot. If the slot statistics is not + * available, return all-zeroes stats. + */ Datum -pg_stat_get_replication_slots(PG_FUNCTION_ARGS) +pg_stat_get_replication_slot(PG_FUNCTION_ARGS) { #define PG_STAT_GET_REPLICATION_SLOT_COLS 10 - ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; + text *slotname_text = PG_GETARG_TEXT_P(0); + NameData slotname; TupleDesc tupdesc; - Tuplestorestate *tupstore; - MemoryContext per_query_ctx; - MemoryContext oldcontext; - PgStat_ReplSlotStats *slotstats; - int nstats; - int i; + Datum values[10]; + bool nulls[10]; + PgStat_StatReplSlotEntry *slotent; + PgStat_StatReplSlotEntry allzero; - /* check to see if caller supports us returning a tuplestore */ - if (rsinfo == NULL || !IsA(rsinfo, ReturnSetInfo)) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("set-valued function called in context that cannot accept a set"))); - if (!(rsinfo->allowedModes & SFRM_Materialize)) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("materialize mode required, but it is not allowed in this context"))); - - /* Build a tuple descriptor for our result type */ - if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) - elog(ERROR, "return type must be a row type"); - - per_query_ctx = rsinfo->econtext->ecxt_per_query_memory; - oldcontext = MemoryContextSwitchTo(per_query_ctx); - - tupstore = tuplestore_begin_heap(true, false, work_mem); - rsinfo->returnMode = SFRM_Materialize; - rsinfo->setResult = tupstore; - rsinfo->setDesc = tupdesc; + /* Initialise values and NULL flags arrays */ + MemSet(values, 0, sizeof(values)); + MemSet(nulls, 0, sizeof(nulls)); - MemoryContextSwitchTo(oldcontext); + /* Initialise attributes information in the tuple descriptor */ + tupdesc = CreateTemplateTupleDesc(PG_STAT_GET_REPLICATION_SLOT_COLS); + TupleDescInitEntry(tupdesc, (AttrNumber) 1, "slot_name", + TEXTOID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 2, "spill_txns", + INT8OID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 3, "spill_count", + INT8OID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 4, "spill_bytes", + INT8OID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 5, "stream_txns", + INT8OID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 6, "stream_count", + INT8OID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 7, "stream_bytes", + INT8OID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 8, "total_txns", + INT8OID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 9, "total_bytes", + INT8OID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 10, "stats_reset", + TIMESTAMPTZOID, -1, 0); + BlessTupleDesc(tupdesc); - slotstats = pgstat_fetch_replslot(&nstats); - for (i = 0; i < nstats; i++) + namestrcpy(&slotname, text_to_cstring(slotname_text)); + slotent = pgstat_fetch_replslot(slotname); + if (!slotent) { - Datum values[PG_STAT_GET_REPLICATION_SLOT_COLS]; - bool nulls[PG_STAT_GET_REPLICATION_SLOT_COLS]; - PgStat_ReplSlotStats *s = &(slotstats[i]); - - MemSet(values, 0, sizeof(values)); - MemSet(nulls, 0, sizeof(nulls)); - - values[0] = CStringGetTextDatum(NameStr(s->slotname)); - values[1] = Int64GetDatum(s->spill_txns); - values[2] = Int64GetDatum(s->spill_count); - values[3] = Int64GetDatum(s->spill_bytes); - values[4] = Int64GetDatum(s->stream_txns); - values[5] = Int64GetDatum(s->stream_count); - values[6] = Int64GetDatum(s->stream_bytes); - values[7] = Int64GetDatum(s->total_txns); - values[8] = Int64GetDatum(s->total_bytes); - - if (s->stat_reset_timestamp == 0) - nulls[9] = true; - else - values[9] = TimestampTzGetDatum(s->stat_reset_timestamp); - - tuplestore_putvalues(tupstore, tupdesc, values, nulls); + /* + * If the slot is not found, initialise its stats. This is possible if + * the create slot message is lost. + */ + memset(&allzero, 0, sizeof(PgStat_StatReplSlotEntry)); + slotent = &allzero; } - tuplestore_donestoring(tupstore); + values[0] = CStringGetTextDatum(NameStr(slotname)); + values[1] = Int64GetDatum(slotent->spill_txns); + values[2] = Int64GetDatum(slotent->spill_count); + values[3] = Int64GetDatum(slotent->spill_bytes); + values[4] = Int64GetDatum(slotent->stream_txns); + values[5] = Int64GetDatum(slotent->stream_count); + values[6] = Int64GetDatum(slotent->stream_bytes); + values[7] = Int64GetDatum(slotent->total_txns); + values[8] = Int64GetDatum(slotent->total_bytes); - return (Datum) 0; + if (slotent->stat_reset_timestamp == 0) + nulls[9] = true; + else + values[9] = TimestampTzGetDatum(slotent->stat_reset_timestamp); + + /* Returns the record as Datum */ + PG_RETURN_DATUM(HeapTupleGetDatum(heap_form_tuple(tupdesc, values, nulls))); } diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index ba1a0d03333f8..22dcd0a270c6f 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202104231 +#define CATALOG_VERSION_NO 202104271 #endif diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index db1abc149c6f2..91f0ea2212c7d 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -5308,14 +5308,14 @@ proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}', proargnames => '{pid,status,receive_start_lsn,receive_start_tli,written_lsn,flushed_lsn,received_tli,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time,slot_name,sender_host,sender_port,conninfo}', prosrc => 'pg_stat_get_wal_receiver' }, -{ oid => '8595', descr => 'statistics: information about replication slots', - proname => 'pg_stat_get_replication_slots', prorows => '10', +{ oid => '8595', descr => 'statistics: information about replication slot', + proname => 'pg_stat_get_replication_slot', prorows => '1', proisstrict => 'f', proretset => 't', provolatile => 's', proparallel => 'r', - prorettype => 'record', proargtypes => '', - proallargtypes => '{text,int8,int8,int8,int8,int8,int8,int8,int8,timestamptz}', - proargmodes => '{o,o,o,o,o,o,o,o,o,o}', - proargnames => '{slot_name,spill_txns,spill_count,spill_bytes,stream_txns,stream_count,stream_bytes,total_txns,total_bytes,stats_reset}', - prosrc => 'pg_stat_get_replication_slots' }, + prorettype => 'record', proargtypes => 'text', + proallargtypes => '{text,text,int8,int8,int8,int8,int8,int8,int8,int8,timestamptz}', + proargmodes => '{i,o,o,o,o,o,o,o,o,o,o}', + proargnames => '{slot_name,slot_name,spill_txns,spill_count,spill_bytes,stream_txns,stream_count,stream_bytes,total_txns,total_bytes,stats_reset}', + prosrc => 'pg_stat_get_replication_slot' }, { oid => '6118', descr => 'statistics: information about subscription', proname => 'pg_stat_get_subscription', prorows => '10', proisstrict => 'f', proretset => 't', provolatile => 's', proparallel => 'r', diff --git a/src/include/pgstat.h b/src/include/pgstat.h index 5c5920b0b5f0d..1ce363e7d181d 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -541,6 +541,7 @@ typedef struct PgStat_MsgReplSlot { PgStat_MsgHdr m_hdr; NameData m_slotname; + bool m_create; bool m_drop; PgStat_Counter m_spill_txns; PgStat_Counter m_spill_count; @@ -917,7 +918,7 @@ typedef struct PgStat_SLRUStats /* * Replication slot statistics kept in the stats collector */ -typedef struct PgStat_ReplSlotStats +typedef struct PgStat_StatReplSlotEntry { NameData slotname; PgStat_Counter spill_txns; @@ -929,7 +930,7 @@ typedef struct PgStat_ReplSlotStats PgStat_Counter total_txns; PgStat_Counter total_bytes; TimestampTz stat_reset_timestamp; -} PgStat_ReplSlotStats; +} PgStat_StatReplSlotEntry; /* @@ -1031,7 +1032,8 @@ extern void pgstat_report_recovery_conflict(int reason); extern void pgstat_report_deadlock(void); extern void pgstat_report_checksum_failures_in_db(Oid dboid, int failurecount); extern void pgstat_report_checksum_failure(void); -extern void pgstat_report_replslot(const PgStat_ReplSlotStats *repSlotStat); +extern void pgstat_report_replslot(const PgStat_StatReplSlotEntry *repSlotStat); +extern void pgstat_report_replslot_create(const char *slotname); extern void pgstat_report_replslot_drop(const char *slotname); extern void pgstat_initialize(void); @@ -1129,7 +1131,7 @@ extern PgStat_ArchiverStats *pgstat_fetch_stat_archiver(void); extern PgStat_GlobalStats *pgstat_fetch_global(void); extern PgStat_WalStats *pgstat_fetch_stat_wal(void); extern PgStat_SLRUStats *pgstat_fetch_slru(void); -extern PgStat_ReplSlotStats *pgstat_fetch_replslot(int *nslots_p); +extern PgStat_StatReplSlotEntry *pgstat_fetch_replslot(NameData slotname); extern PgStat_RecoveryPrefetchStats *pgstat_fetch_recoveryprefetch(void); extern void pgstat_count_slru_page_zeroed(int slru_idx); diff --git a/src/include/replication/slot.h b/src/include/replication/slot.h index 1ad5e6c50dffd..357068403a11e 100644 --- a/src/include/replication/slot.h +++ b/src/include/replication/slot.h @@ -223,7 +223,7 @@ extern XLogRecPtr ReplicationSlotsComputeLogicalRestartLSN(void); extern bool ReplicationSlotsCountDBSlots(Oid dboid, int *nslots, int *nactive); extern void ReplicationSlotsDropDBSlots(Oid dboid); extern void InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno); -extern ReplicationSlot *SearchNamedReplicationSlot(const char *name); +extern ReplicationSlot *SearchNamedReplicationSlot(const char *name, bool need_lock); extern void ReplicationSlotNameForTablesync(Oid suboid, Oid relid, char *syncslotname, int szslot); extern void ReplicationSlotDropAtPubNode(WalReceiverConn *wrconn, char *slotname, bool missing_ok); diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 6dff5439e0035..572bc2057cc27 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -2071,7 +2071,9 @@ pg_stat_replication_slots| SELECT s.slot_name, s.total_txns, s.total_bytes, s.stats_reset - FROM pg_stat_get_replication_slots() s(slot_name, spill_txns, spill_count, spill_bytes, stream_txns, stream_count, stream_bytes, total_txns, total_bytes, stats_reset); + FROM pg_replication_slots r, + LATERAL pg_stat_get_replication_slot((r.slot_name)::text) s(slot_name, spill_txns, spill_count, spill_bytes, stream_txns, stream_count, stream_bytes, total_txns, total_bytes, stats_reset) + WHERE (r.datoid IS NOT NULL); pg_stat_slru| SELECT s.name, s.blks_zeroed, s.blks_hit, diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index c7aff677d4bb3..878b67a276d43 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -1870,12 +1870,12 @@ PgStat_MsgTabstat PgStat_MsgTempFile PgStat_MsgVacuum PgStat_MsgWal -PgStat_ReplSlotStats PgStat_SLRUStats PgStat_Shared_Reset_Target PgStat_Single_Reset_Type PgStat_StatDBEntry PgStat_StatFuncEntry +PgStat_StatReplSlotEntry PgStat_StatTabEntry PgStat_SubXactStatus PgStat_TableCounts From 8e9ea08bae93a754d5075b7bc9c0b2bc71958bfd Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Tue, 27 Apr 2021 14:41:27 +0900 Subject: [PATCH 196/671] Don't pass "ONLY" options specified in TRUNCATE to foreign data wrapper. Commit 8ff1c94649 allowed TRUNCATE command to truncate foreign tables. Previously the information about "ONLY" options specified in TRUNCATE command were passed to the foreign data wrapper. Then postgres_fdw constructed the TRUNCATE command to issue the remote server and included "ONLY" options in it based on the passed information. On the other hand, "ONLY" options specified in SELECT, UPDATE or DELETE have no effect when accessing or modifying the remote table, i.e., are not passed to the foreign data wrapper. So it's inconsistent to make only TRUNCATE command pass the "ONLY" options to the foreign data wrapper. Therefore this commit changes the TRUNCATE command so that it doesn't pass the "ONLY" options to the foreign data wrapper, for the consistency with other statements. Also this commit changes postgres_fdw so that it always doesn't include "ONLY" options in the TRUNCATE command that it constructs. Author: Fujii Masao Reviewed-by: Bharath Rupireddy, Kyotaro Horiguchi, Justin Pryzby, Zhihong Yu Discussion: https://postgr.es/m/551ed8c1-f531-818b-664a-2cecdab99cd8@oss.nttdata.com --- contrib/postgres_fdw/deparse.c | 13 +++----- .../postgres_fdw/expected/postgres_fdw.out | 24 +++++++++----- contrib/postgres_fdw/postgres_fdw.c | 4 +-- contrib/postgres_fdw/postgres_fdw.h | 1 - contrib/postgres_fdw/sql/postgres_fdw.sql | 16 ++++++--- doc/src/sgml/fdwhandler.sgml | 29 ++++++++-------- doc/src/sgml/postgres-fdw.sgml | 7 ++++ src/backend/commands/tablecmds.c | 33 +++++-------------- src/backend/replication/logical/worker.c | 4 --- src/include/commands/tablecmds.h | 11 ------- src/include/foreign/fdwapi.h | 1 - 11 files changed, 60 insertions(+), 83 deletions(-) diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c index bdc4c3620d024..7a798530e3a05 100644 --- a/contrib/postgres_fdw/deparse.c +++ b/contrib/postgres_fdw/deparse.c @@ -2179,24 +2179,19 @@ deparseAnalyzeSql(StringInfo buf, Relation rel, List **retrieved_attrs) void deparseTruncateSql(StringInfo buf, List *rels, - List *rels_extra, DropBehavior behavior, bool restart_seqs) { - ListCell *lc1, - *lc2; + ListCell *cell; appendStringInfoString(buf, "TRUNCATE "); - forboth(lc1, rels, lc2, rels_extra) + foreach(cell, rels) { - Relation rel = lfirst(lc1); - int extra = lfirst_int(lc2); + Relation rel = lfirst(cell); - if (lc1 != list_head(rels)) + if (cell != list_head(rels)) appendStringInfoString(buf, ", "); - if (extra & TRUNCATE_REL_CONTEXT_ONLY) - appendStringInfoString(buf, "ONLY "); deparseRelation(buf, rel); } diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 5070d93239490..8e1cc695081da 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -8218,13 +8218,13 @@ drop table loc3; -- test for TRUNCATE -- =================================================================== CREATE TABLE tru_rtable0 (id int primary key); -CREATE TABLE tru_rtable1 (id int primary key); CREATE FOREIGN TABLE tru_ftable (id int) SERVER loopback OPTIONS (table_name 'tru_rtable0'); INSERT INTO tru_rtable0 (SELECT x FROM generate_series(1,10) x); CREATE TABLE tru_ptable (id int) PARTITION BY HASH(id); CREATE TABLE tru_ptable__p0 PARTITION OF tru_ptable FOR VALUES WITH (MODULUS 2, REMAINDER 0); +CREATE TABLE tru_rtable1 (id int primary key); CREATE FOREIGN TABLE tru_ftable__p1 PARTITION OF tru_ptable FOR VALUES WITH (MODULUS 2, REMAINDER 1) SERVER loopback OPTIONS (table_name 'tru_rtable1'); @@ -8364,6 +8364,8 @@ SELECT count(*) from tru_pk_ftable; -- 0 (1 row) -- truncate with ONLY clause +-- Since ONLY is specified, the table tru_ftable_child that inherits +-- tru_ftable_parent locally is not truncated. TRUNCATE ONLY tru_ftable_parent; SELECT sum(id) FROM tru_ftable_parent; -- 126 sum @@ -8388,22 +8390,26 @@ SELECT sum(id) FROM tru_ftable; -- 95 95 (1 row) -TRUNCATE ONLY tru_ftable; -- truncate only parent portion -SELECT sum(id) FROM tru_ftable; -- 60 - sum ------ - 60 +-- Both parent and child tables in the foreign server are truncated +-- even though ONLY is specified because ONLY has no effect +-- when truncating a foreign table. +TRUNCATE ONLY tru_ftable; +SELECT count(*) FROM tru_ftable; -- 0 + count +------- + 0 (1 row) INSERT INTO tru_rtable0 (SELECT x FROM generate_series(21,25) x); -SELECT sum(id) FROM tru_ftable; -- 175 +INSERT INTO tru_rtable0_child (SELECT x FROM generate_series(26,30) x); +SELECT sum(id) FROM tru_ftable; -- 255 sum ----- - 175 + 255 (1 row) TRUNCATE tru_ftable; -- truncate both of parent and child -SELECT count(*) FROM tru_ftable; -- empty +SELECT count(*) FROM tru_ftable; -- 0 count ------- 0 diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index e201b5404e6dc..8bcdc8d6160dc 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -401,7 +401,6 @@ static void postgresExplainForeignModify(ModifyTableState *mtstate, static void postgresExplainDirectModify(ForeignScanState *node, ExplainState *es); static void postgresExecForeignTruncate(List *rels, - List *rels_extra, DropBehavior behavior, bool restart_seqs); static bool postgresAnalyzeForeignTable(Relation relation, @@ -2881,7 +2880,6 @@ postgresExplainDirectModify(ForeignScanState *node, ExplainState *es) */ static void postgresExecForeignTruncate(List *rels, - List *rels_extra, DropBehavior behavior, bool restart_seqs) { @@ -2964,7 +2962,7 @@ postgresExecForeignTruncate(List *rels, /* Construct the TRUNCATE command string */ initStringInfo(&sql); - deparseTruncateSql(&sql, rels, rels_extra, behavior, restart_seqs); + deparseTruncateSql(&sql, rels, behavior, restart_seqs); /* Issue the TRUNCATE command to remote server */ do_sql_command(conn, sql.data); diff --git a/contrib/postgres_fdw/postgres_fdw.h b/contrib/postgres_fdw/postgres_fdw.h index 5d44b7531409d..9591c0f6c26d7 100644 --- a/contrib/postgres_fdw/postgres_fdw.h +++ b/contrib/postgres_fdw/postgres_fdw.h @@ -209,7 +209,6 @@ extern void deparseAnalyzeSql(StringInfo buf, Relation rel, List **retrieved_attrs); extern void deparseTruncateSql(StringInfo buf, List *rels, - List *rels_extra, DropBehavior behavior, bool restart_seqs); extern void deparseStringLiteral(StringInfo buf, const char *val); diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 74590089bd19f..dcd36a9753ebd 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -2355,7 +2355,6 @@ drop table loc3; -- test for TRUNCATE -- =================================================================== CREATE TABLE tru_rtable0 (id int primary key); -CREATE TABLE tru_rtable1 (id int primary key); CREATE FOREIGN TABLE tru_ftable (id int) SERVER loopback OPTIONS (table_name 'tru_rtable0'); INSERT INTO tru_rtable0 (SELECT x FROM generate_series(1,10) x); @@ -2363,6 +2362,7 @@ INSERT INTO tru_rtable0 (SELECT x FROM generate_series(1,10) x); CREATE TABLE tru_ptable (id int) PARTITION BY HASH(id); CREATE TABLE tru_ptable__p0 PARTITION OF tru_ptable FOR VALUES WITH (MODULUS 2, REMAINDER 0); +CREATE TABLE tru_rtable1 (id int primary key); CREATE FOREIGN TABLE tru_ftable__p1 PARTITION OF tru_ptable FOR VALUES WITH (MODULUS 2, REMAINDER 1) SERVER loopback OPTIONS (table_name 'tru_rtable1'); @@ -2428,6 +2428,8 @@ SELECT count(*) from tru_ftable; -- 0 SELECT count(*) from tru_pk_ftable; -- 0 -- truncate with ONLY clause +-- Since ONLY is specified, the table tru_ftable_child that inherits +-- tru_ftable_parent locally is not truncated. TRUNCATE ONLY tru_ftable_parent; SELECT sum(id) FROM tru_ftable_parent; -- 126 TRUNCATE tru_ftable_parent; @@ -2439,13 +2441,17 @@ INSERT INTO tru_rtable0 (SELECT x FROM generate_series(5,9) x); INSERT INTO tru_rtable0_child (SELECT x FROM generate_series(10,14) x); SELECT sum(id) FROM tru_ftable; -- 95 -TRUNCATE ONLY tru_ftable; -- truncate only parent portion -SELECT sum(id) FROM tru_ftable; -- 60 +-- Both parent and child tables in the foreign server are truncated +-- even though ONLY is specified because ONLY has no effect +-- when truncating a foreign table. +TRUNCATE ONLY tru_ftable; +SELECT count(*) FROM tru_ftable; -- 0 INSERT INTO tru_rtable0 (SELECT x FROM generate_series(21,25) x); -SELECT sum(id) FROM tru_ftable; -- 175 +INSERT INTO tru_rtable0_child (SELECT x FROM generate_series(26,30) x); +SELECT sum(id) FROM tru_ftable; -- 255 TRUNCATE tru_ftable; -- truncate both of parent and child -SELECT count(*) FROM tru_ftable; -- empty +SELECT count(*) FROM tru_ftable; -- 0 -- cleanup DROP FOREIGN TABLE tru_ftable_parent, tru_ftable_child, tru_pk_ftable,tru_ftable__p1,tru_ftable; diff --git a/doc/src/sgml/fdwhandler.sgml b/doc/src/sgml/fdwhandler.sgml index 9f9274ce55fde..e08441ec8bce4 100644 --- a/doc/src/sgml/fdwhandler.sgml +++ b/doc/src/sgml/fdwhandler.sgml @@ -1071,28 +1071,16 @@ EndDirectModify(ForeignScanState *node); void -ExecForeignTruncate(List *rels, List *rels_extra, - DropBehavior behavior, bool restart_seqs); +ExecForeignTruncate(List *rels, + DropBehavior behavior, + bool restart_seqs); Truncate a set of foreign tables specified in rels. This function is called when is executed on foreign tables. rels is the list of Relation data structure that indicates - a foreign table to truncate. rels_extra the list of - int value, which delivers extra information about - a foreign table to truncate. Possible values are - TRUNCATE_REL_CONTEXT_NORMAL, which means that - the foreign table is specified WITHOUT ONLY clause - in TRUNCATE, - TRUNCATE_REL_CONTEXT_ONLY, which means that - the foreign table is specified WITH ONLY clause, - and TRUNCATE_REL_CONTEXT_CASCADING, - which means that the foreign table is not specified explicitly, - but will be truncated due to dependency (for example, partition table). - There is one-to-one mapping between rels and - rels_extra. The number of entries is the same - between the two lists. + a foreign table to truncate. @@ -1111,6 +1099,15 @@ ExecForeignTruncate(List *rels, List *rels_extra, if CONTINUE IDENTITY option is specified. + + Note that the ONLY options specified + in the original TRUNCATE command are not passed to + ExecForeignTruncate. This behavior is similar to + the callback functions of SELECT, + UPDATE and DELETE on + a foreign table. + + TRUNCATE invokes ExecForeignTruncate once per foreign server diff --git a/doc/src/sgml/postgres-fdw.sgml b/doc/src/sgml/postgres-fdw.sgml index 5320accf6f4b5..b0806c1274e83 100644 --- a/doc/src/sgml/postgres-fdw.sgml +++ b/doc/src/sgml/postgres-fdw.sgml @@ -69,6 +69,13 @@ have privileges to do these things.) + + Note that the ONLY option specified in + SELECT, UPDATE, + DELETE or TRUNCATE + has no effect when accessing or modifying the remote table. + + Note that postgres_fdw currently lacks support for INSERT statements with an ON CONFLICT DO diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 7d00f4eb25663..8e717ada28d0a 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -323,7 +323,6 @@ typedef struct ForeignTruncateInfo { Oid serverid; List *rels; - List *rels_extra; } ForeignTruncateInfo; /* @@ -1620,7 +1619,6 @@ ExecuteTruncate(TruncateStmt *stmt) { List *rels = NIL; List *relids = NIL; - List *relids_extra = NIL; List *relids_logged = NIL; ListCell *cell; @@ -1654,9 +1652,7 @@ ExecuteTruncate(TruncateStmt *stmt) rels = lappend(rels, rel); relids = lappend_oid(relids, myrelid); - relids_extra = lappend_int(relids_extra, (recurse ? - TRUNCATE_REL_CONTEXT_NORMAL : - TRUNCATE_REL_CONTEXT_ONLY)); + /* Log this relation only if needed for logical decoding */ if (RelationIsLogicallyLogged(rel)) relids_logged = lappend_oid(relids_logged, myrelid); @@ -1704,8 +1700,7 @@ ExecuteTruncate(TruncateStmt *stmt) rels = lappend(rels, rel); relids = lappend_oid(relids, childrelid); - relids_extra = lappend_int(relids_extra, - TRUNCATE_REL_CONTEXT_CASCADING); + /* Log this relation only if needed for logical decoding */ if (RelationIsLogicallyLogged(rel)) relids_logged = lappend_oid(relids_logged, childrelid); @@ -1718,7 +1713,7 @@ ExecuteTruncate(TruncateStmt *stmt) errhint("Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly."))); } - ExecuteTruncateGuts(rels, relids, relids_extra, relids_logged, + ExecuteTruncateGuts(rels, relids, relids_logged, stmt->behavior, stmt->restart_seqs); /* And close the rels */ @@ -1739,15 +1734,13 @@ ExecuteTruncate(TruncateStmt *stmt) * * explicit_rels is the list of Relations to truncate that the command * specified. relids is the list of Oids corresponding to explicit_rels. - * relids_extra is the list of integer values that deliver extra information - * about relations in explicit_rels. relids_logged is the list of Oids - * (a subset of relids) that require WAL-logging. This is all a bit redundant, - * but the existing callers have this information handy in this form. + * relids_logged is the list of Oids (a subset of relids) that require + * WAL-logging. This is all a bit redundant, but the existing callers have + * this information handy in this form. */ void ExecuteTruncateGuts(List *explicit_rels, List *relids, - List *relids_extra, List *relids_logged, DropBehavior behavior, bool restart_seqs) { @@ -1760,8 +1753,6 @@ ExecuteTruncateGuts(List *explicit_rels, ResultRelInfo *resultRelInfo; SubTransactionId mySubid; ListCell *cell; - ListCell *lc1, - *lc2; Oid *logrelids; /* @@ -1799,8 +1790,7 @@ ExecuteTruncateGuts(List *explicit_rels, truncate_check_activity(rel); rels = lappend(rels, rel); relids = lappend_oid(relids, relid); - relids_extra = lappend_int(relids_extra, - TRUNCATE_REL_CONTEXT_CASCADING); + /* Log this relation only if needed for logical decoding */ if (RelationIsLogicallyLogged(rel)) relids_logged = lappend_oid(relids_logged, relid); @@ -1901,11 +1891,9 @@ ExecuteTruncateGuts(List *explicit_rels, */ mySubid = GetCurrentSubTransactionId(); - Assert(list_length(rels) == list_length(relids_extra)); - forboth(lc1, rels, lc2, relids_extra) + foreach(cell, rels) { - Relation rel = (Relation) lfirst(lc1); - int extra = lfirst_int(lc2); + Relation rel = (Relation) lfirst(cell); /* * Save OID of partitioned tables for later; nothing else to do for @@ -1952,7 +1940,6 @@ ExecuteTruncateGuts(List *explicit_rels, { ft_info->serverid = serverid; ft_info->rels = NIL; - ft_info->rels_extra = NIL; } /* @@ -1960,7 +1947,6 @@ ExecuteTruncateGuts(List *explicit_rels, * foreign table belongs to. */ ft_info->rels = lappend(ft_info->rels, rel); - ft_info->rels_extra = lappend_int(ft_info->rels_extra, extra); continue; } @@ -2044,7 +2030,6 @@ ExecuteTruncateGuts(List *explicit_rels, Assert(routine->ExecForeignTruncate != NULL); routine->ExecForeignTruncate(ft_info->rels, - ft_info->rels_extra, behavior, restart_seqs); } diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index d09703f7acd1f..d9f157172b234 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -1816,7 +1816,6 @@ apply_handle_truncate(StringInfo s) List *rels = NIL; List *part_rels = NIL; List *relids = NIL; - List *relids_extra = NIL; List *relids_logged = NIL; ListCell *lc; @@ -1846,7 +1845,6 @@ apply_handle_truncate(StringInfo s) remote_rels = lappend(remote_rels, rel); rels = lappend(rels, rel->localrel); relids = lappend_oid(relids, rel->localreloid); - relids_extra = lappend_int(relids_extra, TRUNCATE_REL_CONTEXT_NORMAL); if (RelationIsLogicallyLogged(rel->localrel)) relids_logged = lappend_oid(relids_logged, rel->localreloid); @@ -1885,7 +1883,6 @@ apply_handle_truncate(StringInfo s) rels = lappend(rels, childrel); part_rels = lappend(part_rels, childrel); relids = lappend_oid(relids, childrelid); - relids_extra = lappend_int(relids_extra, TRUNCATE_REL_CONTEXT_CASCADING); /* Log this relation only if needed for logical decoding */ if (RelationIsLogicallyLogged(childrel)) relids_logged = lappend_oid(relids_logged, childrelid); @@ -1900,7 +1897,6 @@ apply_handle_truncate(StringInfo s) */ ExecuteTruncateGuts(rels, relids, - relids_extra, relids_logged, DROP_RESTRICT, restart_seqs); diff --git a/src/include/commands/tablecmds.h b/src/include/commands/tablecmds.h index b808a07e461b6..14f4b4882ff66 100644 --- a/src/include/commands/tablecmds.h +++ b/src/include/commands/tablecmds.h @@ -21,16 +21,6 @@ #include "storage/lock.h" #include "utils/relcache.h" -/* - * These values indicate how a relation was specified as the target to - * truncate in TRUNCATE command. - */ -#define TRUNCATE_REL_CONTEXT_NORMAL 1 /* specified without ONLY clause */ -#define TRUNCATE_REL_CONTEXT_ONLY 2 /* specified with ONLY clause */ -#define TRUNCATE_REL_CONTEXT_CASCADING 3 /* not specified but truncated - * due to dependency (e.g., - * partition table) */ - struct AlterTableUtilityContext; /* avoid including tcop/utility.h here */ @@ -68,7 +58,6 @@ extern void CheckTableNotInUse(Relation rel, const char *stmt); extern void ExecuteTruncate(TruncateStmt *stmt); extern void ExecuteTruncateGuts(List *explicit_rels, List *relids, - List *relids_extra, List *relids_logged, DropBehavior behavior, bool restart_seqs); diff --git a/src/include/foreign/fdwapi.h b/src/include/foreign/fdwapi.h index 4ebbca6de920b..4f17becbb81c1 100644 --- a/src/include/foreign/fdwapi.h +++ b/src/include/foreign/fdwapi.h @@ -161,7 +161,6 @@ typedef List *(*ImportForeignSchema_function) (ImportForeignSchemaStmt *stmt, Oid serverOid); typedef void (*ExecForeignTruncate_function) (List *rels, - List *rels_extra, DropBehavior behavior, bool restart_seqs); From 0c8f40863acb94963df9fd6a4369eb71efe9a93b Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Tue, 27 Apr 2021 18:39:30 +0900 Subject: [PATCH 197/671] doc: Review for "Allow TRUNCATE command to truncate foreign tables". Typos, corrections and language improvements in the docs. Author: Justin Pryzby, Fujii Masao Reviewed-by: Bharath Rupireddy, Justin Pryzby, Fujii Masao Discussion: https://postgr.es/m/20210411041658.GB14564@telsasoft.com --- doc/src/sgml/fdwhandler.sgml | 37 ++++++++++++++++------------------ doc/src/sgml/postgres-fdw.sgml | 8 +++++++- doc/src/sgml/ref/truncate.sgml | 2 +- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/doc/src/sgml/fdwhandler.sgml b/doc/src/sgml/fdwhandler.sgml index e08441ec8bce4..8aa7edfe4af10 100644 --- a/doc/src/sgml/fdwhandler.sgml +++ b/doc/src/sgml/fdwhandler.sgml @@ -1076,27 +1076,25 @@ ExecForeignTruncate(List *rels, bool restart_seqs); - Truncate a set of foreign tables specified in rels. - This function is called when is executed - on foreign tables. rels is the list of - Relation data structure that indicates - a foreign table to truncate. + Truncate foreign tables. This function is called when + is executed on a foreign table. + rels is a list of Relation + data structures of foreign tables to truncate. - behavior defines how foreign tables should - be truncated, using as possible values DROP_RESTRICT, - which means that RESTRICT option is specified, - and DROP_CASCADE, which means that - CASCADE option is specified, in - TRUNCATE command. + behavior is either DROP_RESTRICT + or DROP_CASCADE indicating that the + RESTRICT or CASCADE option was + requested in the original TRUNCATE command, + respectively. - restart_seqs is set to true - if RESTART IDENTITY option is specified in - TRUNCATE command. It is false - if CONTINUE IDENTITY option is specified. + If restart_seqs is true, + the original TRUNCATE command requested the + RESTART IDENTITY behavior, otherwise the + CONTINUE IDENTITY behavior was requested. @@ -1109,11 +1107,10 @@ ExecForeignTruncate(List *rels, - TRUNCATE invokes - ExecForeignTruncate once per foreign server - that foreign tables to truncate belong to. This means that all foreign - tables included in rels must belong to the same - server. + ExecForeignTruncate is invoked once per + foreign server for which foreign tables are to be truncated. + This means that all foreign tables included in rels + must belong to the same server. diff --git a/doc/src/sgml/postgres-fdw.sgml b/doc/src/sgml/postgres-fdw.sgml index b0806c1274e83..839126c4efe79 100644 --- a/doc/src/sgml/postgres-fdw.sgml +++ b/doc/src/sgml/postgres-fdw.sgml @@ -459,11 +459,17 @@ OPTIONS (ADD password_required 'false'); This option controls whether postgres_fdw allows - foreign tables to be truncated using TRUNCATE + foreign tables to be truncated using the TRUNCATE command. It can be specified for a foreign table or a foreign server. A table-level option overrides a server-level option. The default is true. + + + Of course, if the remote table is not in fact truncatable, an error + would occur anyway. Use of this option primarily allows the error to + be thrown locally without querying the remote server. + diff --git a/doc/src/sgml/ref/truncate.sgml b/doc/src/sgml/ref/truncate.sgml index acf3633be4608..9d846f88c9f60 100644 --- a/doc/src/sgml/ref/truncate.sgml +++ b/doc/src/sgml/ref/truncate.sgml @@ -173,7 +173,7 @@ TRUNCATE [ TABLE ] [ ONLY ] name [ TRUNCATE can be used for foreign tables if - the foreign data wrapper supports, for instance, + supported by the foreign data wrapper, for instance, see . From fa26eba221a9e837493df47d0255ce615129e9a8 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Tue, 27 Apr 2021 08:21:15 -0400 Subject: [PATCH 198/671] Improve logic in PostgresVersion.pm Handle the situation where perl swaps the order of operands of the comparison operator. See `perldoc overload` for details: The third argument is set to TRUE if (and only if) the two operands have been swapped. Perl may do this to ensure that the first argument ($self) is an object implementing the overloaded operation, in line with general object calling conventions. --- src/test/perl/PostgresVersion.pm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/perl/PostgresVersion.pm b/src/test/perl/PostgresVersion.pm index 7ce9e62b798dc..55984ec7e8120 100644 --- a/src/test/perl/PostgresVersion.pm +++ b/src/test/perl/PostgresVersion.pm @@ -110,10 +110,12 @@ sub new # sub _version_cmp { - my ($a, $b) = @_; + my ($a, $b, $swapped) = @_; $b = __PACKAGE__->new($b) unless blessed($b); + ($a, $b) = ($b, $a) if $swapped; + my ($an, $bn) = ($a->{num}, $b->{num}); for (my $idx = 0;; $idx++) From f7aab36d61fd2fdbd949d5880247e8cae9ee4be0 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 28 Apr 2021 11:17:58 +0900 Subject: [PATCH 199/671] Fix pg_identify_object_as_address() with event triggers Attempting to use this function with event triggers failed, as, since its introduction in a676201, this code has never associated an object name with event triggers. This addresses the failure by adding the event trigger name to the set defining its object address. Note that regression tests are added within event_trigger and not object_address to avoid issues with concurrent connections in parallel schedules. Author: Joel Jacobson Discussion: https://postgr.es/m/3c905e77-a026-46ae-8835-c3f6cd1d24c8@www.fastmail.com Backpatch-through: 9.6 --- src/backend/catalog/objectaddress.c | 11 +++++------ src/test/regress/expected/event_trigger.out | 17 +++++++++++++++++ src/test/regress/sql/event_trigger.sql | 11 +++++++++++ 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index 6d88b690d87a8..ad9740098e40f 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -5607,10 +5607,7 @@ getObjectIdentityParts(const ObjectAddress *object, { HeapTuple tup; Form_pg_event_trigger trigForm; - - /* no objname support here */ - if (objname) - *objname = NIL; + char *evtname; tup = SearchSysCache1(EVENTTRIGGEROID, ObjectIdGetDatum(object->objectId)); @@ -5622,8 +5619,10 @@ getObjectIdentityParts(const ObjectAddress *object, break; } trigForm = (Form_pg_event_trigger) GETSTRUCT(tup); - appendStringInfoString(&buffer, - quote_identifier(NameStr(trigForm->evtname))); + evtname = NameStr(trigForm->evtname); + appendStringInfoString(&buffer, quote_identifier(evtname)); + if (objname) + *objname = list_make1(evtname); ReleaseSysCache(tup); break; } diff --git a/src/test/regress/expected/event_trigger.out b/src/test/regress/expected/event_trigger.out index bdd0ffcdaf3d7..369f3d7d84f38 100644 --- a/src/test/regress/expected/event_trigger.out +++ b/src/test/regress/expected/event_trigger.out @@ -533,6 +533,23 @@ DROP POLICY p2 ON event_trigger_test; NOTICE: DROP POLICY - ddl_command_start NOTICE: DROP POLICY - sql_drop NOTICE: DROP POLICY - ddl_command_end +-- Check the object addresses of all the event triggers. +SELECT + e.evtname, + pg_describe_object('pg_event_trigger'::regclass, e.oid, 0) as descr, + b.type, b.object_names, b.object_args, + pg_identify_object(a.classid, a.objid, a.objsubid) as ident + FROM pg_event_trigger as e, + LATERAL pg_identify_object_as_address('pg_event_trigger'::regclass, e.oid, 0) as b, + LATERAL pg_get_object_address(b.type, b.object_names, b.object_args) as a + ORDER BY e.evtname; + evtname | descr | type | object_names | object_args | ident +-------------------+---------------------------------+---------------+---------------------+-------------+-------------------------------------------------------- + end_rls_command | event trigger end_rls_command | event trigger | {end_rls_command} | {} | ("event trigger",,end_rls_command,end_rls_command) + sql_drop_command | event trigger sql_drop_command | event trigger | {sql_drop_command} | {} | ("event trigger",,sql_drop_command,sql_drop_command) + start_rls_command | event trigger start_rls_command | event trigger | {start_rls_command} | {} | ("event trigger",,start_rls_command,start_rls_command) +(3 rows) + DROP EVENT TRIGGER start_rls_command; DROP EVENT TRIGGER end_rls_command; DROP EVENT TRIGGER sql_drop_command; diff --git a/src/test/regress/sql/event_trigger.sql b/src/test/regress/sql/event_trigger.sql index 18b2a267cbe91..e79c5f0b5dc64 100644 --- a/src/test/regress/sql/event_trigger.sql +++ b/src/test/regress/sql/event_trigger.sql @@ -426,6 +426,17 @@ ALTER POLICY p1 ON event_trigger_test USING (TRUE); ALTER POLICY p1 ON event_trigger_test RENAME TO p2; DROP POLICY p2 ON event_trigger_test; +-- Check the object addresses of all the event triggers. +SELECT + e.evtname, + pg_describe_object('pg_event_trigger'::regclass, e.oid, 0) as descr, + b.type, b.object_names, b.object_args, + pg_identify_object(a.classid, a.objid, a.objsubid) as ident + FROM pg_event_trigger as e, + LATERAL pg_identify_object_as_address('pg_event_trigger'::regclass, e.oid, 0) as b, + LATERAL pg_get_object_address(b.type, b.object_names, b.object_args) as a + ORDER BY e.evtname; + DROP EVENT TRIGGER start_rls_command; DROP EVENT TRIGGER end_rls_command; DROP EVENT TRIGGER sql_drop_command; From f93f0b5b25068807051edb2f3510614b69bb79ff Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 28 Apr 2021 11:58:08 +0900 Subject: [PATCH 200/671] Fix use-after-release issue with pg_identify_object_as_address() Spotted by buildfarm member prion, with -DRELCACHE_FORCE_RELEASE. Introduced in f7aab36. Discussion: https://postgr.es/m/2759018.1619577848@sss.pgh.pa.us Backpatch-through: 9.6 --- src/backend/catalog/objectaddress.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index ad9740098e40f..d1d7a10b43832 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -5619,7 +5619,7 @@ getObjectIdentityParts(const ObjectAddress *object, break; } trigForm = (Form_pg_event_trigger) GETSTRUCT(tup); - evtname = NameStr(trigForm->evtname); + evtname = pstrdup(NameStr(trigForm->evtname)); appendStringInfoString(&buffer, quote_identifier(evtname)); if (objname) *objname = list_make1(evtname); From c93f8f3b8d3bc780892e2bf11192fbdd136fddfe Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 28 Apr 2021 10:03:28 -0400 Subject: [PATCH 201/671] Doc: fix discussion of how to get real Julian Dates. Somehow I'd convinced myself that rotating to UTC-12 was the way to do this, but upon further review, it's definitely UTC+12. Discussion: https://postgr.es/m/1197050.1619123213@sss.pgh.pa.us --- doc/src/sgml/datetime.sgml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/src/sgml/datetime.sgml b/doc/src/sgml/datetime.sgml index 2e48d5d788580..c53bd2f379f4f 100644 --- a/doc/src/sgml/datetime.sgml +++ b/doc/src/sgml/datetime.sgml @@ -908,22 +908,22 @@ $ cal 9 1752 This definition does, however, provide a way to obtain the astronomical definition when you need it: do the arithmetic in time - zone UTC-12. For example, + zone UTC+12. For example, -=> SELECT extract(julian from '2021-06-23 7:00:00-04'::timestamptz at time zone 'UTC-12'); +=> SELECT extract(julian from '2021-06-23 7:00:00-04'::timestamptz at time zone 'UTC+12'); extract ------------------------------ - 2459389.95833333333333333333 + 2459388.95833333333333333333 (1 row) -=> SELECT extract(julian from '2021-06-23 8:00:00-04'::timestamptz at time zone 'UTC-12'); +=> SELECT extract(julian from '2021-06-23 8:00:00-04'::timestamptz at time zone 'UTC+12'); extract -------------------------------------- - 2459390.0000000000000000000000000000 + 2459389.0000000000000000000000000000 (1 row) -=> SELECT extract(julian from date '2021-06-24'); +=> SELECT extract(julian from date '2021-06-23'); extract --------- - 2459390 + 2459389 (1 row) From d6b8d29419df0efad57f95c80b871745d1b55da6 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Wed, 28 Apr 2021 15:44:35 -0400 Subject: [PATCH 202/671] Allow a partdesc-omitting-partitions to be cached Makes partition descriptor acquisition faster during the transient period in which a partition is in the process of being detached. This also adds the restriction that only one partition can be in pending-detach state for a partitioned table. While at it, return find_inheritance_children() API to what it was before 71f4c8c6f74b, and create a separate find_inheritance_children_extended() that returns detailed info about detached partitions. (This incidentally fixes a bug in 8aba9322511 whereby a memory context holding a transient partdesc is reparented to a NULL PortalContext, leading to permanent leak of that memory. The fix is to no longer rely on reparenting contexts to PortalContext. Reported by Amit Langote.) Per gripe from Amit Langote Discussion: https://postgr.es/m/CA+HiwqFgpP1LxJZOBYGt9rpvTjXXkg5qG2+Xch2Z1Q7KrqZR1A@mail.gmail.com --- doc/src/sgml/ref/alter_table.sgml | 2 + src/backend/catalog/pg_inherits.c | 52 ++++++++- src/backend/commands/tablecmds.c | 66 ++++++----- src/backend/commands/trigger.c | 3 +- src/backend/partitioning/partdesc.c | 101 +++++++++++----- src/backend/utils/cache/relcache.c | 33 +++++- src/include/catalog/pg_inherits.h | 6 +- src/include/utils/rel.h | 15 +++ .../detach-partition-concurrently-3.out | 110 +++++++++++++++++- .../detach-partition-concurrently-3.spec | 14 ++- 10 files changed, 329 insertions(+), 73 deletions(-) diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index 39927be41eded..6166b26334523 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -986,6 +986,8 @@ WITH ( MODULUS numeric_literal, REM If FINALIZE is specified, a previous DETACH CONCURRENTLY invocation that was cancelled or interrupted is completed. + At most one partition in a partitioned table can be pending detach at + a time. diff --git a/src/backend/catalog/pg_inherits.c b/src/backend/catalog/pg_inherits.c index 6447b52854635..c373faf2d64de 100644 --- a/src/backend/catalog/pg_inherits.c +++ b/src/backend/catalog/pg_inherits.c @@ -52,6 +52,22 @@ typedef struct SeenRelsEntry * then no locks are acquired, but caller must beware of race conditions * against possible DROPs of child relations. * + * Partitions marked as being detached are omitted; see + * find_inheritance_children_extended for details. + */ +List * +find_inheritance_children(Oid parentrelId, LOCKMODE lockmode) +{ + return find_inheritance_children_extended(parentrelId, true, lockmode, + NULL, NULL); +} + +/* + * find_inheritance_children_extended + * + * As find_inheritance_children, with more options regarding detached + * partitions. + * * If a partition's pg_inherits row is marked "detach pending", * *detached_exist (if not null) is set true. * @@ -60,11 +76,13 @@ typedef struct SeenRelsEntry * marked "detach pending" is visible to that snapshot, then that partition is * omitted from the output list. This makes partitions invisible depending on * whether the transaction that marked those partitions as detached appears - * committed to the active snapshot. + * committed to the active snapshot. In addition, *detached_xmin (if not null) + * is set to the xmin of the row of the detached partition. */ List * -find_inheritance_children(Oid parentrelId, bool omit_detached, - LOCKMODE lockmode, bool *detached_exist) +find_inheritance_children_extended(Oid parentrelId, bool omit_detached, + LOCKMODE lockmode, bool *detached_exist, + TransactionId *detached_xmin) { List *list = NIL; Relation relation; @@ -132,7 +150,32 @@ find_inheritance_children(Oid parentrelId, bool omit_detached, snap = GetActiveSnapshot(); if (!XidInMVCCSnapshot(xmin, snap)) + { + if (detached_xmin) + { + /* + * Two detached partitions should not occur (see + * checks in MarkInheritDetached), but if they do, + * track the newer of the two. Make sure to warn the + * user, so that they can clean up. Since this is + * just a cross-check against potentially corrupt + * catalogs, we don't make it a full-fledged error + * message. + */ + if (*detached_xmin != InvalidTransactionId) + { + elog(WARNING, "more than one partition pending detach found for table with OID %u", + parentrelId); + if (TransactionIdFollows(xmin, *detached_xmin)) + *detached_xmin = xmin; + } + else + *detached_xmin = xmin; + } + + /* Don't add the partition to the output list */ continue; + } } } @@ -247,8 +290,7 @@ find_all_inheritors(Oid parentrelId, LOCKMODE lockmode, List **numparents) ListCell *lc; /* Get the direct children of this rel */ - currentchildren = find_inheritance_children(currentrel, true, - lockmode, NULL); + currentchildren = find_inheritance_children(currentrel, lockmode); /* * Add to the queue only those children not already seen. This avoids diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 8e717ada28d0a..d9ba87a2a3a39 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -3492,7 +3492,7 @@ renameatt_internal(Oid myrelid, * expected_parents will only be 0 if we are not already recursing. */ if (expected_parents == 0 && - find_inheritance_children(myrelid, true, NoLock, NULL) != NIL) + find_inheritance_children(myrelid, NoLock) != NIL) ereport(ERROR, (errcode(ERRCODE_INVALID_TABLE_DEFINITION), errmsg("inherited column \"%s\" must be renamed in child tables too", @@ -3691,7 +3691,7 @@ rename_constraint_internal(Oid myrelid, else { if (expected_parents == 0 && - find_inheritance_children(myrelid, true, NoLock, NULL) != NIL) + find_inheritance_children(myrelid, NoLock) != NIL) ereport(ERROR, (errcode(ERRCODE_INVALID_TABLE_DEFINITION), errmsg("inherited constraint \"%s\" must be renamed in child tables too", @@ -6565,7 +6565,7 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, */ if (colDef->identity && recurse && - find_inheritance_children(myrelid, true, NoLock, NULL) != NIL) + find_inheritance_children(myrelid, NoLock) != NIL) ereport(ERROR, (errcode(ERRCODE_INVALID_TABLE_DEFINITION), errmsg("cannot recursively add identity column to table that has child tables"))); @@ -6811,7 +6811,7 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, * use find_all_inheritors to do it in one pass. */ children = - find_inheritance_children(RelationGetRelid(rel), true, lockmode, NULL); + find_inheritance_children(RelationGetRelid(rel), lockmode); /* * If we are told not to recurse, there had better not be any child @@ -7674,7 +7674,7 @@ ATPrepDropExpression(Relation rel, AlterTableCmd *cmd, bool recurse, bool recurs * resulting state can be properly dumped and restored. */ if (!recurse && - find_inheritance_children(RelationGetRelid(rel), true, lockmode, NULL)) + find_inheritance_children(RelationGetRelid(rel), lockmode)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("ALTER TABLE / DROP EXPRESSION must be applied to child tables too"))); @@ -8282,7 +8282,7 @@ ATExecDropColumn(List **wqueue, Relation rel, const char *colName, * use find_all_inheritors to do it in one pass. */ children = - find_inheritance_children(RelationGetRelid(rel), true, lockmode, NULL); + find_inheritance_children(RelationGetRelid(rel), lockmode); if (children) { @@ -8770,7 +8770,7 @@ ATAddCheckConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel, * use find_all_inheritors to do it in one pass. */ children = - find_inheritance_children(RelationGetRelid(rel), true, lockmode, NULL); + find_inheritance_children(RelationGetRelid(rel), lockmode); /* * Check if ONLY was specified with ALTER TABLE. If so, allow the @@ -11303,8 +11303,7 @@ ATExecDropConstraint(Relation rel, const char *constrName, * use find_all_inheritors to do it in one pass. */ if (!is_no_inherit_constraint) - children = find_inheritance_children(RelationGetRelid(rel), true, - lockmode, NULL); + children = find_inheritance_children(RelationGetRelid(rel), lockmode); else children = NIL; @@ -11688,8 +11687,7 @@ ATPrepAlterColumnType(List **wqueue, } } else if (!recursing && - find_inheritance_children(RelationGetRelid(rel), true, - NoLock, NULL) != NIL) + find_inheritance_children(RelationGetRelid(rel), NoLock) != NIL) ereport(ERROR, (errcode(ERRCODE_INVALID_TABLE_DEFINITION), errmsg("type of inherited column \"%s\" must be changed in child tables too", @@ -14601,7 +14599,8 @@ ATExecDropInherit(Relation rel, RangeVar *parent, LOCKMODE lockmode) * MarkInheritDetached * * Set inhdetachpending for a partition, for ATExecDetachPartition - * in concurrent mode. + * in concurrent mode. While at it, verify that no other partition is + * already pending detach. */ static void MarkInheritDetached(Relation child_rel, Relation parent_rel) @@ -14617,32 +14616,45 @@ MarkInheritDetached(Relation child_rel, Relation parent_rel) Assert(parent_rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE); /* - * Find pg_inherits entries by inhrelid. + * Find pg_inherits entries by inhparent. (We need to scan them all in + * order to verify that no other partition is pending detach.) */ catalogRelation = table_open(InheritsRelationId, RowExclusiveLock); ScanKeyInit(&key, - Anum_pg_inherits_inhrelid, + Anum_pg_inherits_inhparent, BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(RelationGetRelid(child_rel))); - scan = systable_beginscan(catalogRelation, InheritsRelidSeqnoIndexId, + ObjectIdGetDatum(RelationGetRelid(parent_rel))); + scan = systable_beginscan(catalogRelation, InheritsParentIndexId, true, NULL, 1, &key); while (HeapTupleIsValid(inheritsTuple = systable_getnext(scan))) { - HeapTuple newtup; + Form_pg_inherits inhForm; - if (((Form_pg_inherits) GETSTRUCT(inheritsTuple))->inhparent != - RelationGetRelid(parent_rel)) - elog(ERROR, "bad parent tuple found for partition %u", - RelationGetRelid(child_rel)); + inhForm = (Form_pg_inherits) GETSTRUCT(inheritsTuple); + if (inhForm->inhdetachpending) + ereport(ERROR, + errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("partition \"%s\" already pending detach in partitioned table \"%s.%s\"", + get_rel_name(inhForm->inhrelid), + get_namespace_name(parent_rel->rd_rel->relnamespace), + RelationGetRelationName(parent_rel)), + errhint("Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the detach operation.")); + + if (inhForm->inhrelid == RelationGetRelid(child_rel)) + { + HeapTuple newtup; - newtup = heap_copytuple(inheritsTuple); - ((Form_pg_inherits) GETSTRUCT(newtup))->inhdetachpending = true; + newtup = heap_copytuple(inheritsTuple); + ((Form_pg_inherits) GETSTRUCT(newtup))->inhdetachpending = true; - CatalogTupleUpdate(catalogRelation, - &inheritsTuple->t_self, - newtup); - found = true; + CatalogTupleUpdate(catalogRelation, + &inheritsTuple->t_self, + newtup); + found = true; + heap_freetuple(newtup); + /* keep looking, to ensure we catch others pending detach */ + } } /* Done */ diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index d8393aa4de39a..f305f8bc0f202 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -1141,8 +1141,7 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString, ListCell *l; List *idxs = NIL; - idxs = find_inheritance_children(indexOid, true, - ShareRowExclusiveLock, NULL); + idxs = find_inheritance_children(indexOid, ShareRowExclusiveLock); foreach(l, idxs) childTbls = lappend_oid(childTbls, IndexGetRelation(lfirst_oid(l), diff --git a/src/backend/partitioning/partdesc.c b/src/backend/partitioning/partdesc.c index 2305dff40770b..fa9729283a05f 100644 --- a/src/backend/partitioning/partdesc.c +++ b/src/backend/partitioning/partdesc.c @@ -54,6 +54,12 @@ static PartitionDesc RelationBuildPartitionDesc(Relation rel, /* * RelationGetPartitionDesc -- get partition descriptor, if relation is partitioned * + * We keep two partdescs in relcache: rd_partdesc includes all partitions + * (even those being concurrently marked detached), while rd_partdesc_nodetach + * omits (some of) those. We store the pg_inherits.xmin value for the latter, + * to determine whether it can be validly reused in each case, since that + * depends on the active snapshot. + * * Note: we arrange for partition descriptors to not get freed until the * relcache entry's refcount goes to zero (see hacks in RelationClose, * RelationClearRelation, and RelationBuildPartitionDesc). Therefore, even @@ -61,13 +67,6 @@ static PartitionDesc RelationBuildPartitionDesc(Relation rel, * for callers to continue to use that pointer as long as (a) they hold the * relation open, and (b) they hold a relation lock strong enough to ensure * that the data doesn't become stale. - * - * The above applies to partition descriptors that are complete regarding - * partitions concurrently being detached. When a descriptor that omits - * partitions being detached is requested (and such partitions are present), - * said descriptor is not part of relcache and so it isn't freed by - * invalidations either. Caller must not use such a descriptor beyond the - * current Portal. */ PartitionDesc RelationGetPartitionDesc(Relation rel, bool omit_detached) @@ -78,11 +77,36 @@ RelationGetPartitionDesc(Relation rel, bool omit_detached) * If relcache has a partition descriptor, use that. However, we can only * do so when we are asked to include all partitions including detached; * and also when we know that there are no detached partitions. + * + * If there is no active snapshot, detached partitions aren't omitted + * either, so we can use the cached descriptor too in that case. */ if (likely(rel->rd_partdesc && - (!rel->rd_partdesc->detached_exist || !omit_detached))) + (!rel->rd_partdesc->detached_exist || !omit_detached || + !ActiveSnapshotSet()))) return rel->rd_partdesc; + /* + * If we're asked to omit detached partitions, we may be able to use a + * cached descriptor too. We determine that based on the pg_inherits.xmin + * that was saved alongside that descriptor: if the xmin that was not in + * progress for that active snapshot is also not in progress for the + * current active snapshot, then we can use use it. Otherwise build one + * from scratch. + */ + if (omit_detached && + rel->rd_partdesc_nodetached && + TransactionIdIsValid(rel->rd_partdesc_nodetached_xmin) && + ActiveSnapshotSet()) + { + Snapshot activesnap; + + activesnap = GetActiveSnapshot(); + + if (!XidInMVCCSnapshot(rel->rd_partdesc_nodetached_xmin, activesnap)) + return rel->rd_partdesc_nodetached; + } + return RelationBuildPartitionDesc(rel, omit_detached); } @@ -117,6 +141,8 @@ RelationBuildPartitionDesc(Relation rel, bool omit_detached) Oid *oids = NULL; bool *is_leaf = NULL; bool detached_exist; + bool is_omit; + TransactionId detached_xmin; ListCell *cell; int i, nparts; @@ -132,8 +158,11 @@ RelationBuildPartitionDesc(Relation rel, bool omit_detached) * some well-defined point in time. */ detached_exist = false; - inhoids = find_inheritance_children(RelationGetRelid(rel), omit_detached, - NoLock, &detached_exist); + detached_xmin = InvalidTransactionId; + inhoids = find_inheritance_children_extended(RelationGetRelid(rel), + omit_detached, NoLock, + &detached_exist, + &detached_xmin); nparts = list_length(inhoids); /* Allocate working arrays for OIDs, leaf flags, and boundspecs. */ @@ -280,38 +309,50 @@ RelationBuildPartitionDesc(Relation rel, bool omit_detached) MemoryContextSwitchTo(oldcxt); } + /* + * Are we working with the partition that omits detached partitions, or + * the one that includes them? + */ + is_omit = omit_detached && detached_exist && ActiveSnapshotSet(); + /* * We have a fully valid partdesc. Reparent it so that it has the right - * lifespan, and if appropriate put it into the relation's relcache entry. + * lifespan. */ - if (omit_detached && detached_exist) + MemoryContextSetParent(new_pdcxt, CacheMemoryContext); + + /* + * Store it into relcache. + * + * But first, a kluge: if there's an old context for this type of + * descriptor, it contains an old partition descriptor that may still be + * referenced somewhere. Preserve it, while not leaking it, by + * reattaching it as a child context of the new one. Eventually it will + * get dropped by either RelationClose or RelationClearRelation. + * (We keep the regular partdesc in rd_pdcxt, and the partdesc-excluding- + * detached-partitions in rd_pddcxt.) + */ + if (is_omit) { + if (rel->rd_pddcxt != NULL) + MemoryContextSetParent(rel->rd_pddcxt, new_pdcxt); + rel->rd_pddcxt = new_pdcxt; + rel->rd_partdesc_nodetached = partdesc; + /* - * A transient partition descriptor is only good for the current - * statement, so make it a child of the current portal's context. + * For partdescs built excluding detached partitions, which we save + * separately, we also record the pg_inherits.xmin of the detached + * partition that was omitted; this informs a future potential user of + * such a cached partdescs. (This might be InvalidXid; see comments + * in struct RelationData). */ - MemoryContextSetParent(new_pdcxt, PortalContext); + rel->rd_partdesc_nodetached_xmin = detached_xmin; } else { - /* - * This partdesc goes into relcache. - */ - - MemoryContextSetParent(new_pdcxt, CacheMemoryContext); - - /* - * But first, a kluge: if there's an old rd_pdcxt, it contains an old - * partition descriptor that may still be referenced somewhere. - * Preserve it, while not leaking it, by reattaching it as a child - * context of the new rd_pdcxt. Eventually it will get dropped by - * either RelationClose or RelationClearRelation. - */ if (rel->rd_pdcxt != NULL) MemoryContextSetParent(rel->rd_pdcxt, new_pdcxt); rel->rd_pdcxt = new_pdcxt; - - /* Store it into relcache */ rel->rd_partdesc = partdesc; } diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 466c28d528775..31c8e07f2a75f 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -1157,7 +1157,10 @@ RelationBuildDesc(Oid targetRelId, bool insertIt) relation->rd_partkey = NULL; relation->rd_partkeycxt = NULL; relation->rd_partdesc = NULL; + relation->rd_partdesc_nodetached = NULL; + relation->rd_partdesc_nodetached_xmin = InvalidTransactionId; relation->rd_pdcxt = NULL; + relation->rd_pddcxt = NULL; relation->rd_partcheck = NIL; relation->rd_partcheckvalid = false; relation->rd_partcheckcxt = NULL; @@ -2103,10 +2106,16 @@ RelationClose(Relation relation) * stale partition descriptors it has. This is unlikely, so check to see * if there are child contexts before expending a call to mcxt.c. */ - if (RelationHasReferenceCountZero(relation) && - relation->rd_pdcxt != NULL && - relation->rd_pdcxt->firstchild != NULL) - MemoryContextDeleteChildren(relation->rd_pdcxt); + if (RelationHasReferenceCountZero(relation)) + { + if (relation->rd_pdcxt != NULL && + relation->rd_pdcxt->firstchild != NULL) + MemoryContextDeleteChildren(relation->rd_pdcxt); + + if (relation->rd_pddcxt != NULL && + relation->rd_pddcxt->firstchild != NULL) + MemoryContextDeleteChildren(relation->rd_pddcxt); + } #ifdef RELCACHE_FORCE_RELEASE if (RelationHasReferenceCountZero(relation) && @@ -2390,6 +2399,8 @@ RelationDestroyRelation(Relation relation, bool remember_tupdesc) MemoryContextDelete(relation->rd_partkeycxt); if (relation->rd_pdcxt) MemoryContextDelete(relation->rd_pdcxt); + if (relation->rd_pddcxt) + MemoryContextDelete(relation->rd_pddcxt); if (relation->rd_partcheckcxt) MemoryContextDelete(relation->rd_partcheckcxt); pfree(relation); @@ -2644,7 +2655,7 @@ RelationClearRelation(Relation relation, bool rebuild) SWAPFIELD(PartitionKey, rd_partkey); SWAPFIELD(MemoryContext, rd_partkeycxt); } - if (newrel->rd_pdcxt != NULL) + if (newrel->rd_pdcxt != NULL || newrel->rd_pddcxt != NULL) { /* * We are rebuilding a partitioned relation with a non-zero @@ -2672,13 +2683,22 @@ RelationClearRelation(Relation relation, bool rebuild) * newrel. */ relation->rd_partdesc = NULL; /* ensure rd_partdesc is invalid */ + relation->rd_partdesc_nodetached = NULL; + relation->rd_partdesc_nodetached_xmin = InvalidTransactionId; if (relation->rd_pdcxt != NULL) /* probably never happens */ MemoryContextSetParent(newrel->rd_pdcxt, relation->rd_pdcxt); else relation->rd_pdcxt = newrel->rd_pdcxt; + if (relation->rd_pddcxt != NULL) + MemoryContextSetParent(newrel->rd_pddcxt, relation->rd_pddcxt); + else + relation->rd_pddcxt = newrel->rd_pddcxt; /* drop newrel's pointers so we don't destroy it below */ newrel->rd_partdesc = NULL; + newrel->rd_partdesc_nodetached = NULL; + newrel->rd_partdesc_nodetached_xmin = InvalidTransactionId; newrel->rd_pdcxt = NULL; + newrel->rd_pddcxt = NULL; } #undef SWAPFIELD @@ -6017,7 +6037,10 @@ load_relcache_init_file(bool shared) rel->rd_partkey = NULL; rel->rd_partkeycxt = NULL; rel->rd_partdesc = NULL; + rel->rd_partdesc_nodetached = NULL; + rel->rd_partdesc_nodetached_xmin = InvalidTransactionId; rel->rd_pdcxt = NULL; + rel->rd_pddcxt = NULL; rel->rd_partcheck = NIL; rel->rd_partcheckvalid = false; rel->rd_partcheckcxt = NULL; diff --git a/src/include/catalog/pg_inherits.h b/src/include/catalog/pg_inherits.h index 4d28ede5a6589..f47c0a8cd84f2 100644 --- a/src/include/catalog/pg_inherits.h +++ b/src/include/catalog/pg_inherits.h @@ -50,8 +50,10 @@ DECLARE_INDEX(pg_inherits_parent_index, 2187, on pg_inherits using btree(inhpare #define InheritsParentIndexId 2187 -extern List *find_inheritance_children(Oid parentrelId, bool omit_detached, - LOCKMODE lockmode, bool *detached_exist); +extern List *find_inheritance_children(Oid parentrelId, LOCKMODE lockmode); +extern List *find_inheritance_children_extended(Oid parentrelId, bool omit_detached, + LOCKMODE lockmode, bool *detached_exist, TransactionId *detached_xmin); + extern List *find_all_inheritors(Oid parentrelId, LOCKMODE lockmode, List **parents); extern bool has_subclass(Oid relationId); diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h index 34e25eb59785a..07ae2c70a9672 100644 --- a/src/include/utils/rel.h +++ b/src/include/utils/rel.h @@ -129,6 +129,21 @@ typedef struct RelationData PartitionDesc rd_partdesc; /* partition descriptor, or NULL */ MemoryContext rd_pdcxt; /* private context for rd_partdesc, if any */ + /* Same as above, for partdescs that omit detached partitions */ + PartitionDesc rd_partdesc_nodetached; /* partdesc w/o detached parts */ + MemoryContext rd_pddcxt; /* for rd_partdesc_nodetached, if any */ + + /* + * pg_inherits.xmin of the partition that was excluded in + * rd_partdesc_nodetached. This informs a future user of that partdesc: + * if this value is not in progress for the active snapshot, then the + * partdesc can be used, otherwise they have to build a new one. (This + * matches what find_inheritance_children_extended would do). In the rare + * case where the pg_inherits tuple has been frozen, this will be + * InvalidXid; behave as if the partdesc is unusable in that case. + */ + TransactionId rd_partdesc_nodetached_xmin; + /* data managed by RelationGetPartitionQual: */ List *rd_partcheck; /* partition CHECK quals */ bool rd_partcheckvalid; /* true if list has been computed */ diff --git a/src/test/isolation/expected/detach-partition-concurrently-3.out b/src/test/isolation/expected/detach-partition-concurrently-3.out index 88e83638c788b..bbb9d151fb7f9 100644 --- a/src/test/isolation/expected/detach-partition-concurrently-3.out +++ b/src/test/isolation/expected/detach-partition-concurrently-3.out @@ -20,6 +20,7 @@ step s1describe: SELECT 'd3_listp' AS root, * FROM pg_partition_tree('d3_listp') root relid parentrelid isleaf level d3_listp d3_listp f 0 +d3_listp d3_listp2 d3_listp t 1 d3_listp1 d3_listp1 t 0 step s1alter: ALTER TABLE d3_listp1 ALTER a DROP NOT NULL; ERROR: cannot alter partition "d3_listp1" with an incomplete detach @@ -81,6 +82,59 @@ error in steps s1cancel s2detach: ERROR: canceling statement due to user reques step s1c: COMMIT; step s1insertpart: INSERT INTO d3_listp1 VALUES (1); +starting permutation: s2snitch s1b s1s s2detach2 s1cancel s1c s1brr s1insert s1s s1insert s1c +step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); +step s1b: BEGIN; +step s1s: SELECT * FROM d3_listp; +a + +1 +step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend + +t +step s2detach2: <... completed> +error in steps s1cancel s2detach2: ERROR: canceling statement due to user request +step s1c: COMMIT; +step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; +step s1insert: INSERT INTO d3_listp VALUES (1); +step s1s: SELECT * FROM d3_listp; +a + +1 +1 +step s1insert: INSERT INTO d3_listp VALUES (1); +step s1c: COMMIT; + +starting permutation: s2snitch s1b s1s s2detach2 s1cancel s1c s1brr s1s s1insert s1s s1c +step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); +step s1b: BEGIN; +step s1s: SELECT * FROM d3_listp; +a + +1 +step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend + +t +step s2detach2: <... completed> +error in steps s1cancel s2detach2: ERROR: canceling statement due to user request +step s1c: COMMIT; +step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; +step s1s: SELECT * FROM d3_listp; +a + +1 +step s1insert: INSERT INTO d3_listp VALUES (1); +step s1s: SELECT * FROM d3_listp; +a + +1 +1 +step s1c: COMMIT; + starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1drop s1list step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; @@ -123,6 +177,61 @@ a 1 +starting permutation: s2snitch s1b s1s s2detach s1cancel s2detach2 s1c +step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); +step s1b: BEGIN; +step s1s: SELECT * FROM d3_listp; +a + +1 +step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend + +t +step s2detach: <... completed> +error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; +ERROR: partition "d3_listp1" already pending detach in partitioned table "public.d3_listp" +step s1c: COMMIT; + +starting permutation: s2snitch s1b s1s s2detach s1cancel s2detachfinal s1c s2detach2 +step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); +step s1b: BEGIN; +step s1s: SELECT * FROM d3_listp; +a + +1 +step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend + +t +step s2detach: <... completed> +error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; +step s1c: COMMIT; +step s2detachfinal: <... completed> +step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; + +starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1droppart s2detach2 +step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); +step s1b: BEGIN; +step s1s: SELECT * FROM d3_listp; +a + +1 +step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend + +t +step s2detach: <... completed> +error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s1c: COMMIT; +step s1droppart: DROP TABLE d3_listp1; +step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; + starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s2begin s2drop s1s s2commit step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; @@ -279,4 +388,3 @@ step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; step s1insertpart: INSERT INTO d3_listp1 VALUES (1); step s2commit: COMMIT; step s1insertpart: <... completed> -unused step name: s1droppart diff --git a/src/test/isolation/specs/detach-partition-concurrently-3.spec b/src/test/isolation/specs/detach-partition-concurrently-3.spec index 4b706430e13bd..5a8351fc83ebd 100644 --- a/src/test/isolation/specs/detach-partition-concurrently-3.spec +++ b/src/test/isolation/specs/detach-partition-concurrently-3.spec @@ -4,12 +4,13 @@ setup { CREATE TABLE d3_listp (a int) PARTITION BY LIST(a); CREATE TABLE d3_listp1 PARTITION OF d3_listp FOR VALUES IN (1); + CREATE TABLE d3_listp2 PARTITION OF d3_listp FOR VALUES IN (2); CREATE TABLE d3_pid (pid int); INSERT INTO d3_listp VALUES (1); } teardown { - DROP TABLE IF EXISTS d3_listp, d3_listp1, d3_pid; + DROP TABLE IF EXISTS d3_listp, d3_listp1, d3_listp2, d3_pid; } session "s1" @@ -34,6 +35,7 @@ session "s2" step "s2begin" { BEGIN; } step "s2snitch" { INSERT INTO d3_pid SELECT pg_backend_pid(); } step "s2detach" { ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; } +step "s2detach2" { ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; } step "s2detachfinal" { ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; } step "s2drop" { DROP TABLE d3_listp1; } step "s2commit" { COMMIT; } @@ -44,11 +46,21 @@ permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s1describe" "s1a permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1insert" "s1c" permutation "s2snitch" "s1brr" "s1s" "s2detach" "s1cancel" "s1insert" "s1c" "s1spart" permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s1insertpart" + +# Test partition descriptor caching +permutation "s2snitch" "s1b" "s1s" "s2detach2" "s1cancel" "s1c" "s1brr" "s1insert" "s1s" "s1insert" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach2" "s1cancel" "s1c" "s1brr" "s1s" "s1insert" "s1s" "s1c" + # "drop" here does both tables permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s1drop" "s1list" # "truncate" only does parent, not partition permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s1trunc" "s1spart" +# If a partition pending detach exists, we cannot drop another one +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2detach2" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2detachfinal" "s1c" "s2detach2" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s1droppart" "s2detach2" + # When a partition with incomplete detach is dropped, we grab lock on parent too. permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s2begin" "s2drop" "s1s" "s2commit" From 9626325da5e8e23ff90091bc96535495d350f06e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 28 Apr 2021 15:50:42 -0400 Subject: [PATCH 203/671] Add heuristic incoming-message-size limits in the server. We had a report of confusing server behavior caused by a client bug that sent junk to the server: the server thought the junk was a very long message length and waited patiently for data that would never come. We can reduce the risk of that by being less trusting about message lengths. For a long time, libpq has had a heuristic rule that it wouldn't believe large message size words, except for a small number of message types that are expected to be (potentially) long. This provides some defense against loss of message-boundary sync and other corrupted-data cases. The server does something similar, except that up to now it only limited the lengths of messages received during the connection authentication phase. Let's do the same as in libpq and put restrictions on the allowed length of all messages, while distinguishing between message types that are expected to be long and those that aren't. I used a limit of 10000 bytes for non-long messages. (libpq's corresponding limit is 30000 bytes, but given the asymmetry of the FE/BE protocol, there's no good reason why the numbers should be the same.) Experimentation suggests that this is at least a factor of 10, maybe a factor of 100, more than we really need; but plenty of daylight seems desirable to avoid false positives. In any case we can adjust the limit based on beta-test results. For long messages, set a limit of MaxAllocSize - 1, which is the most that we can absorb into the StringInfo buffer that the message is collected in. This just serves to make sure that a bogus message size is reported as such, rather than as a confusing gripe about not being able to enlarge a string buffer. While at it, make sure that non-mainline code paths (such as COPY FROM STDIN) are as paranoid as SocketBackend is, and validate the message type code before believing the message length. This provides an additional guard against getting stuck on corrupted input. Discussion: https://postgr.es/m/2003757.1619373089@sss.pgh.pa.us --- src/backend/commands/copyfromparse.c | 31 ++++++++++++++++++++++------ src/backend/libpq/auth.c | 3 ++- src/backend/libpq/pqcomm.c | 5 ++--- src/backend/replication/walsender.c | 29 ++++++++++++++++++++------ src/backend/tcop/postgres.c | 24 ++++++++++++++++++--- src/include/libpq/libpq.h | 9 ++++++++ 6 files changed, 82 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c index 0813424768f39..fdf57f155600b 100644 --- a/src/backend/commands/copyfromparse.c +++ b/src/backend/commands/copyfromparse.c @@ -265,6 +265,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread) { /* Try to receive another message */ int mtype; + int maxmsglen; readmessage: HOLD_CANCEL_INTERRUPTS(); @@ -274,11 +275,33 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread) ereport(ERROR, (errcode(ERRCODE_CONNECTION_FAILURE), errmsg("unexpected EOF on client connection with an open transaction"))); - if (pq_getmessage(cstate->fe_msgbuf, 0)) + /* Validate message type and set packet size limit */ + switch (mtype) + { + case 'd': /* CopyData */ + maxmsglen = PQ_LARGE_MESSAGE_LIMIT; + break; + case 'c': /* CopyDone */ + case 'f': /* CopyFail */ + case 'H': /* Flush */ + case 'S': /* Sync */ + maxmsglen = PQ_SMALL_MESSAGE_LIMIT; + break; + default: + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("unexpected message type 0x%02X during COPY from stdin", + mtype))); + maxmsglen = 0; /* keep compiler quiet */ + break; + } + /* Now collect the message body */ + if (pq_getmessage(cstate->fe_msgbuf, maxmsglen)) ereport(ERROR, (errcode(ERRCODE_CONNECTION_FAILURE), errmsg("unexpected EOF on client connection with an open transaction"))); RESUME_CANCEL_INTERRUPTS(); + /* ... and process it */ switch (mtype) { case 'd': /* CopyData */ @@ -304,11 +327,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread) */ goto readmessage; default: - ereport(ERROR, - (errcode(ERRCODE_PROTOCOL_VIOLATION), - errmsg("unexpected message type 0x%02X during COPY from stdin", - mtype))); - break; + Assert(false); /* NOT REACHED */ } } avail = cstate->fe_msgbuf->len - cstate->fe_msgbuf->cursor; diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index 27865b14a033b..45a91235a4546 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -210,6 +210,7 @@ static int PerformRadiusTransaction(const char *server, const char *secret, cons /* * Maximum accepted size of GSS and SSPI authentication tokens. + * We also use this as a limit on ordinary password packet lengths. * * Kerberos tickets are usually quite small, but the TGTs issued by Windows * domain controllers include an authorization field known as the Privilege @@ -724,7 +725,7 @@ recv_password_packet(Port *port) } initStringInfo(&buf); - if (pq_getmessage(&buf, 0)) /* receive password */ + if (pq_getmessage(&buf, PG_MAX_AUTH_TOKEN_LENGTH)) /* receive password */ { /* EOF - pq_getmessage already logged a suitable message */ pfree(buf.data); diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index 8066ee1d1e07b..b9ccd4473f7d8 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -1203,7 +1203,7 @@ pq_is_reading_msg(void) * is removed. Also, s->cursor is initialized to zero for convenience * in scanning the message contents. * - * If maxlen is not zero, it is an upper limit on the length of the + * maxlen is the upper limit on the length of the * message we are willing to accept. We abort the connection (by * returning EOF) if client tries to send more than that. * @@ -1230,8 +1230,7 @@ pq_getmessage(StringInfo s, int maxlen) len = pg_ntoh32(len); - if (len < 4 || - (maxlen > 0 && len > maxlen)) + if (len < 4 || len > maxlen) { ereport(COMMERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index 52fe9aba660d9..6fefc3bedc48c 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -1704,6 +1704,7 @@ static void ProcessRepliesIfAny(void) { unsigned char firstchar; + int maxmsglen; int r; bool received = false; @@ -1733,9 +1734,28 @@ ProcessRepliesIfAny(void) break; } + /* Validate message type and set packet size limit */ + switch (firstchar) + { + case 'd': + maxmsglen = PQ_LARGE_MESSAGE_LIMIT; + break; + case 'c': + case 'X': + maxmsglen = PQ_SMALL_MESSAGE_LIMIT; + break; + default: + ereport(FATAL, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("invalid standby message type \"%c\"", + firstchar))); + maxmsglen = 0; /* keep compiler quiet */ + break; + } + /* Read the message contents */ resetStringInfo(&reply_message); - if (pq_getmessage(&reply_message, 0)) + if (pq_getmessage(&reply_message, maxmsglen)) { ereport(COMMERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), @@ -1743,7 +1763,7 @@ ProcessRepliesIfAny(void) proc_exit(0); } - /* Handle the very limited subset of commands expected in this phase */ + /* ... and process it */ switch (firstchar) { /* @@ -1776,10 +1796,7 @@ ProcessRepliesIfAny(void) proc_exit(0); default: - ereport(FATAL, - (errcode(ERRCODE_PROTOCOL_VIOLATION), - errmsg("invalid standby message type \"%c\"", - firstchar))); + Assert(false); /* NOT REACHED */ } } diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 1216a2b397bd9..2d6d145ecc053 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -343,6 +343,7 @@ static int SocketBackend(StringInfo inBuf) { int qtype; + int maxmsglen; /* * Get message type code from the frontend. @@ -375,7 +376,9 @@ SocketBackend(StringInfo inBuf) /* * Validate message type code before trying to read body; if we have lost * sync, better to say "command unknown" than to run out of memory because - * we used garbage as a length word. + * we used garbage as a length word. We can also select a type-dependent + * limit on what a sane length word could be. (The limit could be chosen + * more granularly, but it's not clear it's worth fussing over.) * * This also gives us a place to set the doing_extended_query_message flag * as soon as possible. @@ -383,28 +386,37 @@ SocketBackend(StringInfo inBuf) switch (qtype) { case 'Q': /* simple query */ + maxmsglen = PQ_LARGE_MESSAGE_LIMIT; doing_extended_query_message = false; break; case 'F': /* fastpath function call */ + maxmsglen = PQ_LARGE_MESSAGE_LIMIT; doing_extended_query_message = false; break; case 'X': /* terminate */ + maxmsglen = PQ_SMALL_MESSAGE_LIMIT; doing_extended_query_message = false; ignore_till_sync = false; break; case 'B': /* bind */ + case 'P': /* parse */ + maxmsglen = PQ_LARGE_MESSAGE_LIMIT; + doing_extended_query_message = true; + break; + case 'C': /* close */ case 'D': /* describe */ case 'E': /* execute */ case 'H': /* flush */ - case 'P': /* parse */ + maxmsglen = PQ_SMALL_MESSAGE_LIMIT; doing_extended_query_message = true; break; case 'S': /* sync */ + maxmsglen = PQ_SMALL_MESSAGE_LIMIT; /* stop any active skip-till-Sync */ ignore_till_sync = false; /* mark not-extended, so that a new error doesn't begin skip */ @@ -412,8 +424,13 @@ SocketBackend(StringInfo inBuf) break; case 'd': /* copy data */ + maxmsglen = PQ_LARGE_MESSAGE_LIMIT; + doing_extended_query_message = false; + break; + case 'c': /* copy done */ case 'f': /* copy fail */ + maxmsglen = PQ_SMALL_MESSAGE_LIMIT; doing_extended_query_message = false; break; @@ -427,6 +444,7 @@ SocketBackend(StringInfo inBuf) ereport(FATAL, (errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("invalid frontend message type %d", qtype))); + maxmsglen = 0; /* keep compiler quiet */ break; } @@ -435,7 +453,7 @@ SocketBackend(StringInfo inBuf) * after the type code; we can read the message contents independently of * the type. */ - if (pq_getmessage(inBuf, 0)) + if (pq_getmessage(inBuf, maxmsglen)) return EOF; /* suitable message already logged */ RESUME_CANCEL_INTERRUPTS(); diff --git a/src/include/libpq/libpq.h b/src/include/libpq/libpq.h index 3ebbc8d6656bd..6c51b2f20fa54 100644 --- a/src/include/libpq/libpq.h +++ b/src/include/libpq/libpq.h @@ -21,6 +21,15 @@ #include "storage/latch.h" +/* + * Callers of pq_getmessage() must supply a maximum expected message size. + * By convention, if there's not any specific reason to use another value, + * use PQ_SMALL_MESSAGE_LIMIT for messages that shouldn't be too long, and + * PQ_LARGE_MESSAGE_LIMIT for messages that can be long. + */ +#define PQ_SMALL_MESSAGE_LIMIT 10000 +#define PQ_LARGE_MESSAGE_LIMIT (MaxAllocSize - 1) + typedef struct { void (*comm_reset) (void); From 2977f244bc7e64e046364122be3fef08aa6efef9 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 29 Apr 2021 11:44:24 +0900 Subject: [PATCH 204/671] doc: Fix description of target_session_attrs=prefer-standby If no standbys can be found in the set of connection points provided, the fallback behavior is "any", and not "all" that does not exist. Author: Greg Nancarrow Reviewed-by: Laurenz Albe Discussion: https://postgr.es/m/CAJcOf-fDaCv8qCpWH7k5Yh6zFxZeUwZowu4sCWQ2zFx4CdkHpA@mail.gmail.com --- doc/src/sgml/libpq.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 7bcb7504a6e5f..174a6b7f37bc4 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -1965,7 +1965,7 @@ postgresql://%2Fvar%2Flib%2Fpostgresql/dbname first try to find a standby server, but if none of the listed - hosts is a standby server, try again in all + hosts is a standby server, try again in any mode From 3a948ea0a2ced719f26e725b030558f2e4ab1d8e Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 29 Apr 2021 06:51:42 +0200 Subject: [PATCH 205/671] pg_hba.conf.sample: Reword connection type section Improve the wording in the connection type section of pg_hba.conf.sample a bit. After the hostgssenc part was added on, the whole thing became a bit wordy, and it's also a bit inaccurate for example in that the current wording for "host" appears to say that it does not apply to GSS-encrypted connections. Discussion: https://www.postgresql.org/message-id/flat/fc06dcc5-513f-e944-cd07-ba51dd7c6916%40enterprisedb.com --- src/backend/libpq/pg_hba.conf.sample | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/backend/libpq/pg_hba.conf.sample b/src/backend/libpq/pg_hba.conf.sample index b6de12b29850a..5f3f63eb0c529 100644 --- a/src/backend/libpq/pg_hba.conf.sample +++ b/src/backend/libpq/pg_hba.conf.sample @@ -18,12 +18,13 @@ # # (The uppercase items must be replaced by actual values.) # -# The first field is the connection type: "local" is a Unix-domain -# socket, "host" is either a plain or SSL-encrypted TCP/IP socket, -# "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a -# non-SSL TCP/IP socket. Similarly, "hostgssenc" uses a -# GSSAPI-encrypted TCP/IP socket, while "hostnogssenc" uses a -# non-GSSAPI socket. +# The first field is the connection type: +# - "local" is a Unix-domain socket +# - "host" is a TCP/IP socket (encrypted or not) +# - "hostssl" is a TCP/IP socket that is SSL-encrypted +# - "hostnossl" is a TCP/IP socket that is not SSL-encrypted +# - "hostgssenc" is a TCP/IP socket that is GSSAPI-encrypted +# - "hostnogssenc" is a TCP/IP socket that is not GSSAPI-encrypted # # DATABASE can be "all", "sameuser", "samerole", "replication", a # database name, or a comma-separated list thereof. The "all" From d9a9f4b4b92ad39e3c4e6600dc61d5603ddd6e24 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 29 Apr 2021 09:04:31 +0200 Subject: [PATCH 206/671] psql: Fix line continuation prompts for unbalanced parentheses This was broken by a silly mistake in e717a9a18b2e34c9c40e5259ad4d31cd7e420750. Reported-by: Jeff Janes Author: Justin Pryzby Discussion: https://www.postgresql.org/message-id/CAMkU=1zKGWEJdBbYKw7Tn7cJmYR_UjgdcXTPDqJj=dNwCETBCQ@mail.gmail.com --- src/fe_utils/psqlscan.l | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fe_utils/psqlscan.l b/src/fe_utils/psqlscan.l index 991b7de0b5546..0fab48a38253a 100644 --- a/src/fe_utils/psqlscan.l +++ b/src/fe_utils/psqlscan.l @@ -1106,7 +1106,7 @@ psql_scan(PsqlScanState state, result = PSCAN_INCOMPLETE; *prompt = PROMPT_PAREN; } - if (state->begin_depth > 0) + else if (state->begin_depth > 0) { result = PSCAN_INCOMPLETE; *prompt = PROMPT_CONTINUE; From 94b9cb722552c37da78c8320bac1d5b55e34def6 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 29 Apr 2021 11:31:24 -0400 Subject: [PATCH 207/671] Improve documentation for default_tablespace on partitioned tables Backpatch to 12, where 87259588d0ab introduced the current behavior. Per note from Justin Pryzby. Co-authored-by: Justin Pryzby Discussion: https://postgr.es/m/20210416143135.GI3315@telsasoft.com --- doc/src/sgml/config.sgml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index cf75d913ce97d..5efbfe97b5d95 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -8268,8 +8268,7 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; This variable specifies the default tablespace in which to create objects (tables and indexes) when a CREATE command does - not explicitly specify a tablespace. It also determines the tablespace - that a partitioned relation will direct future partitions to. + not explicitly specify a tablespace. @@ -8293,6 +8292,14 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; the template database it is copied from. + + If this parameter is set to a value other than the empty string + when a partitioned table is created, the partitioned table's + tablespace will be set to that value, which will be used as + the default tablespace for partitions created in the future, + even if default_tablespace has changed since then. + + For more information on tablespaces, see . From 57c081de0afcd01bf47c46f015bf8886b01c2c21 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 29 Apr 2021 15:24:37 -0400 Subject: [PATCH 208/671] Fix some more omissions in pg_upgrade's tests for non-upgradable types. Commits 29aeda6e4 et al closed up some oversights involving not checking for non-upgradable types within container types, such as arrays and ranges. However, I only looked at version.c, failing to notice that there were substantially-equivalent tests in check.c. (The division of responsibility between those files is less than clear...) In addition, because genbki.pl does not guarantee that auto-generated rowtype OIDs will hold still across versions, we need to consider that the composite type associated with a system catalog or view is non-upgradable. It seems unlikely that someone would have a user column declared that way, but if they did, trying to read it in another PG version would likely draw "no such pg_type OID" failures, thanks to the type OID embedded in composite Datums. To support the composite and reg*-type cases, extend the recursive query that does the search to allow any base query that returns a column of pg_type OIDs, rather than limiting it to exactly one starting type. As before, back-patch to all supported branches. Discussion: https://postgr.es/m/2798740.1619622555@sss.pgh.pa.us --- src/bin/pg_upgrade/check.c | 223 ++++++++++++-------------------- src/bin/pg_upgrade/pg_upgrade.h | 6 + src/bin/pg_upgrade/version.c | 53 ++++++-- 3 files changed, 133 insertions(+), 149 deletions(-) diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c index 1c1c908664dea..19c15c7114dcf 100644 --- a/src/bin/pg_upgrade/check.c +++ b/src/bin/pg_upgrade/check.c @@ -24,6 +24,7 @@ static void check_for_prepared_transactions(ClusterInfo *cluster); static void check_for_isn_and_int8_passing_mismatch(ClusterInfo *cluster); static void check_for_user_defined_postfix_ops(ClusterInfo *cluster); static void check_for_tables_with_oids(ClusterInfo *cluster); +static void check_for_composite_data_type_usage(ClusterInfo *cluster); static void check_for_reg_data_type_usage(ClusterInfo *cluster); static void check_for_jsonb_9_4_usage(ClusterInfo *cluster); static void check_for_pg_role_prefix(ClusterInfo *cluster); @@ -100,6 +101,7 @@ check_and_dump_old_cluster(bool live_check) check_is_install_user(&old_cluster); check_proper_datallowconn(&old_cluster); check_for_prepared_transactions(&old_cluster); + check_for_composite_data_type_usage(&old_cluster); check_for_reg_data_type_usage(&old_cluster); check_for_isn_and_int8_passing_mismatch(&old_cluster); @@ -1043,6 +1045,63 @@ check_for_tables_with_oids(ClusterInfo *cluster) } +/* + * check_for_composite_data_type_usage() + * Check for system-defined composite types used in user tables. + * + * The OIDs of rowtypes of system catalogs and information_schema views + * can change across major versions; unlike user-defined types, we have + * no mechanism for forcing them to be the same in the new cluster. + * Hence, if any user table uses one, that's problematic for pg_upgrade. + */ +static void +check_for_composite_data_type_usage(ClusterInfo *cluster) +{ + bool found; + Oid firstUserOid; + char output_path[MAXPGPATH]; + char *base_query; + + prep_status("Checking for system-defined composite types in user tables"); + + snprintf(output_path, sizeof(output_path), "tables_using_composite.txt"); + + /* + * Look for composite types that were made during initdb *or* belong to + * information_schema; that's important in case information_schema was + * dropped and reloaded. + * + * The cutoff OID here should match the source cluster's value of + * FirstNormalObjectId. We hardcode it rather than using that C #define + * because, if that #define is ever changed, our own version's value is + * NOT what to use. Eventually we may need a test on the source cluster's + * version to select the correct value. + */ + firstUserOid = 16384; + + base_query = psprintf("SELECT t.oid FROM pg_catalog.pg_type t " + "LEFT JOIN pg_catalog.pg_namespace n ON t.typnamespace = n.oid " + " WHERE typtype = 'c' AND (t.oid < %u OR nspname = 'information_schema')", + firstUserOid); + + found = check_for_data_types_usage(cluster, base_query, output_path); + + free(base_query); + + if (found) + { + pg_log(PG_REPORT, "fatal\n"); + pg_fatal("Your installation contains system-defined composite type(s) in user tables.\n" + "These type OIDs are not stable across PostgreSQL versions,\n" + "so this cluster cannot currently be upgraded. You can\n" + "drop the problem columns and restart the upgrade.\n" + "A list of the problem columns is in the file:\n" + " %s\n\n", output_path); + } + else + check_ok(); +} + /* * check_for_reg_data_type_usage() * pg_upgrade only preserves these system values: @@ -1057,88 +1116,36 @@ check_for_tables_with_oids(ClusterInfo *cluster) static void check_for_reg_data_type_usage(ClusterInfo *cluster) { - int dbnum; - FILE *script = NULL; - bool found = false; + bool found; char output_path[MAXPGPATH]; prep_status("Checking for reg* data types in user tables"); snprintf(output_path, sizeof(output_path), "tables_using_reg.txt"); - for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) - { - PGresult *res; - bool db_used = false; - int ntups; - int rowno; - int i_nspname, - i_relname, - i_attname; - DbInfo *active_db = &cluster->dbarr.dbs[dbnum]; - PGconn *conn = connectToServer(cluster, active_db->db_name); - - /* - * While several relkinds don't store any data, e.g. views, they can - * be used to define data types of other columns, so we check all - * relkinds. - */ - res = executeQueryOrDie(conn, - "SELECT n.nspname, c.relname, a.attname " - "FROM pg_catalog.pg_class c, " - " pg_catalog.pg_namespace n, " - " pg_catalog.pg_attribute a, " - " pg_catalog.pg_type t " - "WHERE c.oid = a.attrelid AND " - " NOT a.attisdropped AND " - " a.atttypid = t.oid AND " - " t.typnamespace = " - " (SELECT oid FROM pg_namespace " - " WHERE nspname = 'pg_catalog') AND" - " t.typname IN ( " - /* regclass.oid is preserved, so 'regclass' is OK */ - " 'regcollation', " - " 'regconfig', " - " 'regdictionary', " - " 'regnamespace', " - " 'regoper', " - " 'regoperator', " - " 'regproc', " - " 'regprocedure' " - /* regrole.oid is preserved, so 'regrole' is OK */ - /* regtype.oid is preserved, so 'regtype' is OK */ - " ) AND " - " c.relnamespace = n.oid AND " - " n.nspname NOT IN ('pg_catalog', 'information_schema')"); - - ntups = PQntuples(res); - i_nspname = PQfnumber(res, "nspname"); - i_relname = PQfnumber(res, "relname"); - i_attname = PQfnumber(res, "attname"); - for (rowno = 0; rowno < ntups; rowno++) - { - found = true; - if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL) - pg_fatal("could not open file \"%s\": %s\n", - output_path, strerror(errno)); - if (!db_used) - { - fprintf(script, "In database: %s\n", active_db->db_name); - db_used = true; - } - fprintf(script, " %s.%s.%s\n", - PQgetvalue(res, rowno, i_nspname), - PQgetvalue(res, rowno, i_relname), - PQgetvalue(res, rowno, i_attname)); - } - - PQclear(res); - - PQfinish(conn); - } - - if (script) - fclose(script); + /* + * Note: older servers will not have all of these reg* types, so we have + * to write the query like this rather than depending on casts to regtype. + */ + found = check_for_data_types_usage(cluster, + "SELECT oid FROM pg_catalog.pg_type t " + "WHERE t.typnamespace = " + " (SELECT oid FROM pg_catalog.pg_namespace " + " WHERE nspname = 'pg_catalog') " + " AND t.typname IN ( " + /* pg_class.oid is preserved, so 'regclass' is OK */ + " 'regcollation', " + " 'regconfig', " + " 'regdictionary', " + " 'regnamespace', " + " 'regoper', " + " 'regoperator', " + " 'regproc', " + " 'regprocedure' " + /* pg_authid.oid is preserved, so 'regrole' is OK */ + /* pg_type.oid is (mostly) preserved, so 'regtype' is OK */ + " )", + output_path); if (found) { @@ -1163,75 +1170,13 @@ check_for_reg_data_type_usage(ClusterInfo *cluster) static void check_for_jsonb_9_4_usage(ClusterInfo *cluster) { - int dbnum; - FILE *script = NULL; - bool found = false; char output_path[MAXPGPATH]; prep_status("Checking for incompatible \"jsonb\" data type"); snprintf(output_path, sizeof(output_path), "tables_using_jsonb.txt"); - for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) - { - PGresult *res; - bool db_used = false; - int ntups; - int rowno; - int i_nspname, - i_relname, - i_attname; - DbInfo *active_db = &cluster->dbarr.dbs[dbnum]; - PGconn *conn = connectToServer(cluster, active_db->db_name); - - /* - * While several relkinds don't store any data, e.g. views, they can - * be used to define data types of other columns, so we check all - * relkinds. - */ - res = executeQueryOrDie(conn, - "SELECT n.nspname, c.relname, a.attname " - "FROM pg_catalog.pg_class c, " - " pg_catalog.pg_namespace n, " - " pg_catalog.pg_attribute a " - "WHERE c.oid = a.attrelid AND " - " NOT a.attisdropped AND " - " a.atttypid = 'pg_catalog.jsonb'::pg_catalog.regtype AND " - " c.relnamespace = n.oid AND " - /* exclude possible orphaned temp tables */ - " n.nspname !~ '^pg_temp_' AND " - " n.nspname NOT IN ('pg_catalog', 'information_schema')"); - - ntups = PQntuples(res); - i_nspname = PQfnumber(res, "nspname"); - i_relname = PQfnumber(res, "relname"); - i_attname = PQfnumber(res, "attname"); - for (rowno = 0; rowno < ntups; rowno++) - { - found = true; - if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL) - pg_fatal("could not open file \"%s\": %s\n", - output_path, strerror(errno)); - if (!db_used) - { - fprintf(script, "In database: %s\n", active_db->db_name); - db_used = true; - } - fprintf(script, " %s.%s.%s\n", - PQgetvalue(res, rowno, i_nspname), - PQgetvalue(res, rowno, i_relname), - PQgetvalue(res, rowno, i_attname)); - } - - PQclear(res); - - PQfinish(conn); - } - - if (script) - fclose(script); - - if (found) + if (check_for_data_type_usage(cluster, "pg_catalog.jsonb", output_path)) { pg_log(PG_REPORT, "fatal\n"); pg_fatal("Your installation contains the \"jsonb\" data type in user tables.\n" diff --git a/src/bin/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h index 919a7849fd042..d7666da3f2707 100644 --- a/src/bin/pg_upgrade/pg_upgrade.h +++ b/src/bin/pg_upgrade/pg_upgrade.h @@ -440,6 +440,12 @@ unsigned int str2uint(const char *str); /* version.c */ +bool check_for_data_types_usage(ClusterInfo *cluster, + const char *base_query, + const char *output_path); +bool check_for_data_type_usage(ClusterInfo *cluster, + const char *typename, + const char *output_path); void new_9_0_populate_pg_largeobject_metadata(ClusterInfo *cluster, bool check_mode); void old_9_3_check_for_line_data_type_usage(ClusterInfo *cluster); diff --git a/src/bin/pg_upgrade/version.c b/src/bin/pg_upgrade/version.c index a41247b33d2f6..4fd9b8749bcb6 100644 --- a/src/bin/pg_upgrade/version.c +++ b/src/bin/pg_upgrade/version.c @@ -97,17 +97,22 @@ new_9_0_populate_pg_largeobject_metadata(ClusterInfo *cluster, bool check_mode) /* - * check_for_data_type_usage - * Detect whether there are any stored columns depending on the given type + * check_for_data_types_usage() + * Detect whether there are any stored columns depending on given type(s) * * If so, write a report to the given file name, and return true. * - * We check for the type in tables, matviews, and indexes, but not views; + * base_query should be a SELECT yielding a single column named "oid", + * containing the pg_type OIDs of one or more types that are known to have + * inconsistent on-disk representations across server versions. + * + * We check for the type(s) in tables, matviews, and indexes, but not views; * there's no storage involved in a view. */ -static bool -check_for_data_type_usage(ClusterInfo *cluster, const char *typename, - char *output_path) +bool +check_for_data_types_usage(ClusterInfo *cluster, + const char *base_query, + const char *output_path) { bool found = false; FILE *script = NULL; @@ -127,7 +132,7 @@ check_for_data_type_usage(ClusterInfo *cluster, const char *typename, i_attname; /* - * The type of interest might be wrapped in a domain, array, + * The type(s) of interest might be wrapped in a domain, array, * composite, or range, and these container types can be nested (to * varying extents depending on server version, but that's not of * concern here). To handle all these cases we need a recursive CTE. @@ -135,8 +140,8 @@ check_for_data_type_usage(ClusterInfo *cluster, const char *typename, initPQExpBuffer(&querybuf); appendPQExpBuffer(&querybuf, "WITH RECURSIVE oids AS ( " - /* the target type itself */ - " SELECT '%s'::pg_catalog.regtype AS oid " + /* start with the type(s) returned by base_query */ + " %s " " UNION ALL " " SELECT * FROM ( " /* inner WITH because we can only reference the CTE once */ @@ -154,7 +159,7 @@ check_for_data_type_usage(ClusterInfo *cluster, const char *typename, " c.oid = a.attrelid AND " " NOT a.attisdropped AND " " a.atttypid = x.oid ", - typename); + base_query); /* Ranges were introduced in 9.2 */ if (GET_MAJOR_VERSION(cluster->major_version) >= 902) @@ -222,6 +227,34 @@ check_for_data_type_usage(ClusterInfo *cluster, const char *typename, return found; } +/* + * check_for_data_type_usage() + * Detect whether there are any stored columns depending on the given type + * + * If so, write a report to the given file name, and return true. + * + * typename should be a fully qualified type name. This is just a + * trivial wrapper around check_for_data_types_usage() to convert a + * type name into a base query. + */ +bool +check_for_data_type_usage(ClusterInfo *cluster, + const char *typename, + const char *output_path) +{ + bool found; + char *base_query; + + base_query = psprintf("SELECT '%s'::pg_catalog.regtype AS oid", + typename); + + found = check_for_data_types_usage(cluster, base_query, output_path); + + free(base_query); + + return found; +} + /* * old_9_3_check_for_line_data_type_usage() From c9c37ae03fea0c8ad467392ddf03940b61974935 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 29 Apr 2021 15:40:34 -0400 Subject: [PATCH 209/671] Improve wording of some pg_upgrade failure reports. Don't advocate dropping a whole table when dropping a column would serve. While at it, try to make the layout of these messages a bit cleaner and more consistent. Per suggestion from Daniel Gustafsson. No back-patch, as we generally don't like to churn translatable messages in released branches. Discussion: https://postgr.es/m/2798740.1619622555@sss.pgh.pa.us --- src/bin/pg_upgrade/check.c | 10 +++++----- src/bin/pg_upgrade/version.c | 26 ++++++++++++++------------ 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c index 19c15c7114dcf..955a1533d05df 100644 --- a/src/bin/pg_upgrade/check.c +++ b/src/bin/pg_upgrade/check.c @@ -1153,8 +1153,8 @@ check_for_reg_data_type_usage(ClusterInfo *cluster) pg_fatal("Your installation contains one of the reg* data types in user tables.\n" "These data types reference system OIDs that are not preserved by\n" "pg_upgrade, so this cluster cannot currently be upgraded. You can\n" - "remove the problem tables and restart the upgrade. A list of the\n" - "problem columns is in the file:\n" + "drop the problem columns and restart the upgrade.\n" + "A list of the problem columns is in the file:\n" " %s\n\n", output_path); } else @@ -1181,9 +1181,9 @@ check_for_jsonb_9_4_usage(ClusterInfo *cluster) pg_log(PG_REPORT, "fatal\n"); pg_fatal("Your installation contains the \"jsonb\" data type in user tables.\n" "The internal format of \"jsonb\" changed during 9.4 beta so this\n" - "cluster cannot currently be upgraded. You can remove the problem\n" - "tables and restart the upgrade. A list of the problem columns is\n" - "in the file:\n" + "cluster cannot currently be upgraded. You can\n" + "drop the problem columns and restart the upgrade.\n" + "A list of the problem columns is in the file:\n" " %s\n\n", output_path); } else diff --git a/src/bin/pg_upgrade/version.c b/src/bin/pg_upgrade/version.c index 4fd9b8749bcb6..b531bda3e5c0b 100644 --- a/src/bin/pg_upgrade/version.c +++ b/src/bin/pg_upgrade/version.c @@ -276,11 +276,12 @@ old_9_3_check_for_line_data_type_usage(ClusterInfo *cluster) if (check_for_data_type_usage(cluster, "pg_catalog.line", output_path)) { pg_log(PG_REPORT, "fatal\n"); - pg_fatal("Your installation contains the \"line\" data type in user tables. This\n" - "data type changed its internal and input/output format between your old\n" - "and new clusters so this cluster cannot currently be upgraded. You can\n" - "remove the problem tables and restart the upgrade. A list of the problem\n" - "columns is in the file:\n" + pg_fatal("Your installation contains the \"line\" data type in user tables.\n" + "This data type changed its internal and input/output format\n" + "between your old and new versions so this\n" + "cluster cannot currently be upgraded. You can\n" + "drop the problem columns and restart the upgrade.\n" + "A list of the problem columns is in the file:\n" " %s\n\n", output_path); } else @@ -313,9 +314,10 @@ old_9_6_check_for_unknown_data_type_usage(ClusterInfo *cluster) if (check_for_data_type_usage(cluster, "pg_catalog.unknown", output_path)) { pg_log(PG_REPORT, "fatal\n"); - pg_fatal("Your installation contains the \"unknown\" data type in user tables. This\n" - "data type is no longer allowed in tables, so this cluster cannot currently\n" - "be upgraded. You can remove the problem tables and restart the upgrade.\n" + pg_fatal("Your installation contains the \"unknown\" data type in user tables.\n" + "This data type is no longer allowed in tables, so this\n" + "cluster cannot currently be upgraded. You can\n" + "drop the problem columns and restart the upgrade.\n" "A list of the problem columns is in the file:\n" " %s\n\n", output_path); } @@ -456,10 +458,10 @@ old_11_check_for_sql_identifier_data_type_usage(ClusterInfo *cluster) output_path)) { pg_log(PG_REPORT, "fatal\n"); - pg_fatal("Your installation contains the \"sql_identifier\" data type in user tables\n" - "and/or indexes. The on-disk format for this data type has changed, so this\n" - "cluster cannot currently be upgraded. You can remove the problem tables or\n" - "change the data type to \"name\" and restart the upgrade.\n" + pg_fatal("Your installation contains the \"sql_identifier\" data type in user tables.\n" + "The on-disk format for this data type has changed, so this\n" + "cluster cannot currently be upgraded. You can\n" + "drop the problem columns and restart the upgrade.\n" "A list of the problem columns is in the file:\n" " %s\n\n", output_path); } From 51ef9173030cc196c6633ae82b7b32f404b0f768 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Fri, 30 Apr 2021 07:55:42 +0530 Subject: [PATCH 210/671] Another try to fix the test case added by commit f5fc2f5b23. As per analysis, it appears that the 'drop slot' message from the previous test and 'create slot' message of the new test are either missed or not yet delivered to the stats collector due to which we will still see the stats from the old slot. This can happen rarely which could be the reason that we are seeing some failures in the buildfarm randomly. To avoid that we are using a different slot name for the tests in test_decoding/sql/stats.sql. Reported-by: Tom Lane based on buildfarm reports Author: Sawada Masahiko Reviewed-by: Amit Kapila, Vignesh C Discussion: https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de --- contrib/test_decoding/expected/stats.out | 62 ++++++++++++------------ contrib/test_decoding/sql/stats.sql | 20 ++++---- 2 files changed, 43 insertions(+), 39 deletions(-) diff --git a/contrib/test_decoding/expected/stats.out b/contrib/test_decoding/expected/stats.out index 86d594ca15ef8..7d174ee8d280f 100644 --- a/contrib/test_decoding/expected/stats.out +++ b/contrib/test_decoding/expected/stats.out @@ -1,6 +1,6 @@ -- predictability SET synchronous_commit = on; -SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding'); +SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_stats', 'test_decoding'); ?column? ---------- init @@ -23,7 +23,7 @@ BEGIN ELSE (spill_txns > 0) END INTO updated - FROM pg_stat_replication_slots WHERE slot_name='regression_slot'; + FROM pg_stat_replication_slots WHERE slot_name='regression_slot_stats'; ELSE @@ -32,7 +32,7 @@ BEGIN ELSE (total_txns > 0) END INTO updated - FROM pg_stat_replication_slots WHERE slot_name='regression_slot'; + FROM pg_stat_replication_slots WHERE slot_name='regression_slot_stats'; END IF; @@ -52,8 +52,9 @@ BEGIN END $$ LANGUAGE plpgsql; -- non-spilled xact +SET logical_decoding_work_mem to '64MB'; INSERT INTO stats_test values(1); -SELECT count(*) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'skip-empty-xacts', '1'); +SELECT count(*) FROM pg_logical_slot_get_changes('regression_slot_stats', NULL, NULL, 'skip-empty-xacts', '1'); count ------- 3 @@ -66,13 +67,14 @@ SELECT wait_for_decode_stats(false, false); (1 row) SELECT slot_name, spill_txns = 0 AS spill_txns, spill_count = 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; - slot_name | spill_txns | spill_count | total_txns | total_bytes ------------------+------------+-------------+------------+------------- - regression_slot | t | t | t | t + slot_name | spill_txns | spill_count | total_txns | total_bytes +-----------------------+------------+-------------+------------+------------- + regression_slot_stats | t | t | t | t (1 row) +RESET logical_decoding_work_mem; -- reset the slot stats, and wait for stats collector's total txn to reset -SELECT pg_stat_reset_replication_slot('regression_slot'); +SELECT pg_stat_reset_replication_slot('regression_slot_stats'); pg_stat_reset_replication_slot -------------------------------- @@ -85,16 +87,16 @@ SELECT wait_for_decode_stats(true, false); (1 row) SELECT slot_name, spill_txns, spill_count, total_txns, total_bytes FROM pg_stat_replication_slots; - slot_name | spill_txns | spill_count | total_txns | total_bytes ------------------+------------+-------------+------------+------------- - regression_slot | 0 | 0 | 0 | 0 + slot_name | spill_txns | spill_count | total_txns | total_bytes +-----------------------+------------+-------------+------------+------------- + regression_slot_stats | 0 | 0 | 0 | 0 (1 row) -- spilling the xact BEGIN; INSERT INTO stats_test SELECT 'serialize-topbig--1:'||g.i FROM generate_series(1, 5000) g(i); COMMIT; -SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'skip-empty-xacts', '1'); +SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot_stats', NULL, NULL, 'skip-empty-xacts', '1'); count ------- 5002 @@ -110,13 +112,13 @@ SELECT wait_for_decode_stats(false, true); (1 row) SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; - slot_name | spill_txns | spill_count | total_txns | total_bytes ------------------+------------+-------------+------------+------------- - regression_slot | t | t | t | t + slot_name | spill_txns | spill_count | total_txns | total_bytes +-----------------------+------------+-------------+------------+------------- + regression_slot_stats | t | t | t | t (1 row) -- reset the slot stats, and wait for stats collector to reset -SELECT pg_stat_reset_replication_slot('regression_slot'); +SELECT pg_stat_reset_replication_slot('regression_slot_stats'); pg_stat_reset_replication_slot -------------------------------- @@ -129,13 +131,13 @@ SELECT wait_for_decode_stats(true, true); (1 row) SELECT slot_name, spill_txns, spill_count, total_txns, total_bytes FROM pg_stat_replication_slots; - slot_name | spill_txns | spill_count | total_txns | total_bytes ------------------+------------+-------------+------------+------------- - regression_slot | 0 | 0 | 0 | 0 + slot_name | spill_txns | spill_count | total_txns | total_bytes +-----------------------+------------+-------------+------------+------------- + regression_slot_stats | 0 | 0 | 0 | 0 (1 row) -- decode and check stats again. -SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'skip-empty-xacts', '1'); +SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot_stats', NULL, NULL, 'skip-empty-xacts', '1'); count ------- 5002 @@ -148,30 +150,30 @@ SELECT wait_for_decode_stats(false, true); (1 row) SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; - slot_name | spill_txns | spill_count | total_txns | total_bytes ------------------+------------+-------------+------------+------------- - regression_slot | t | t | t | t + slot_name | spill_txns | spill_count | total_txns | total_bytes +-----------------------+------------+-------------+------------+------------- + regression_slot_stats | t | t | t | t (1 row) -- Ensure stats can be repeatedly accessed using the same stats snapshot. See -- https://postgr.es/m/20210317230447.c7uc4g3vbs4wi32i%40alap3.anarazel.de BEGIN; SELECT slot_name FROM pg_stat_replication_slots; - slot_name ------------------ - regression_slot + slot_name +----------------------- + regression_slot_stats (1 row) SELECT slot_name FROM pg_stat_replication_slots; - slot_name ------------------ - regression_slot + slot_name +----------------------- + regression_slot_stats (1 row) COMMIT; DROP FUNCTION wait_for_decode_stats(bool, bool); DROP TABLE stats_test; -SELECT pg_drop_replication_slot('regression_slot'); +SELECT pg_drop_replication_slot('regression_slot_stats'); pg_drop_replication_slot -------------------------- diff --git a/contrib/test_decoding/sql/stats.sql b/contrib/test_decoding/sql/stats.sql index 03fc27e537f4d..263568b00ce98 100644 --- a/contrib/test_decoding/sql/stats.sql +++ b/contrib/test_decoding/sql/stats.sql @@ -1,7 +1,7 @@ -- predictability SET synchronous_commit = on; -SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding'); +SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_stats', 'test_decoding'); CREATE TABLE stats_test(data text); @@ -21,7 +21,7 @@ BEGIN ELSE (spill_txns > 0) END INTO updated - FROM pg_stat_replication_slots WHERE slot_name='regression_slot'; + FROM pg_stat_replication_slots WHERE slot_name='regression_slot_stats'; ELSE @@ -30,7 +30,7 @@ BEGIN ELSE (total_txns > 0) END INTO updated - FROM pg_stat_replication_slots WHERE slot_name='regression_slot'; + FROM pg_stat_replication_slots WHERE slot_name='regression_slot_stats'; END IF; @@ -51,13 +51,15 @@ END $$ LANGUAGE plpgsql; -- non-spilled xact +SET logical_decoding_work_mem to '64MB'; INSERT INTO stats_test values(1); -SELECT count(*) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'skip-empty-xacts', '1'); +SELECT count(*) FROM pg_logical_slot_get_changes('regression_slot_stats', NULL, NULL, 'skip-empty-xacts', '1'); SELECT wait_for_decode_stats(false, false); SELECT slot_name, spill_txns = 0 AS spill_txns, spill_count = 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; +RESET logical_decoding_work_mem; -- reset the slot stats, and wait for stats collector's total txn to reset -SELECT pg_stat_reset_replication_slot('regression_slot'); +SELECT pg_stat_reset_replication_slot('regression_slot_stats'); SELECT wait_for_decode_stats(true, false); SELECT slot_name, spill_txns, spill_count, total_txns, total_bytes FROM pg_stat_replication_slots; @@ -65,7 +67,7 @@ SELECT slot_name, spill_txns, spill_count, total_txns, total_bytes FROM pg_stat_ BEGIN; INSERT INTO stats_test SELECT 'serialize-topbig--1:'||g.i FROM generate_series(1, 5000) g(i); COMMIT; -SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'skip-empty-xacts', '1'); +SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot_stats', NULL, NULL, 'skip-empty-xacts', '1'); -- Check stats, wait for the stats collector to update. We can't test the -- exact stats count as that can vary if any background transaction (say by @@ -74,12 +76,12 @@ SELECT wait_for_decode_stats(false, true); SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; -- reset the slot stats, and wait for stats collector to reset -SELECT pg_stat_reset_replication_slot('regression_slot'); +SELECT pg_stat_reset_replication_slot('regression_slot_stats'); SELECT wait_for_decode_stats(true, true); SELECT slot_name, spill_txns, spill_count, total_txns, total_bytes FROM pg_stat_replication_slots; -- decode and check stats again. -SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'skip-empty-xacts', '1'); +SELECT count(*) FROM pg_logical_slot_peek_changes('regression_slot_stats', NULL, NULL, 'skip-empty-xacts', '1'); SELECT wait_for_decode_stats(false, true); SELECT slot_name, spill_txns > 0 AS spill_txns, spill_count > 0 AS spill_count, total_txns > 0 AS total_txns, total_bytes > 0 AS total_bytes FROM pg_stat_replication_slots; @@ -92,4 +94,4 @@ COMMIT; DROP FUNCTION wait_for_decode_stats(bool, bool); DROP TABLE stats_test; -SELECT pg_drop_replication_slot('regression_slot'); +SELECT pg_drop_replication_slot('regression_slot_stats'); From 3c80e96dffd4df7f66fffa5f265cbd87becb7ef5 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Fri, 30 Apr 2021 14:46:42 +1200 Subject: [PATCH 211/671] Adjust EXPLAIN output for parallel Result Cache plans Here we adjust the EXPLAIN ANALYZE output for Result Cache so that we don't show any Result Cache stats for parallel workers who don't contribute anything to Result Cache plan nodes. I originally had ideas that workers who don't help could still have their Result Cache stats displayed. The idea with that was so that I could write some parallel Result Cache regression tests that show the EXPLAIN ANALYZE output. However, I realized a little too late that such tests would just not be possible to have run in a stable way on the buildfarm. With that knowledge, before 9eacee2e6 went in, I had removed all of the tests that were showing the EXPLAIN ANALYZE output of a parallel Result Cache plan, however, I forgot to put back the code that adjusts the EXPLAIN output to hide the Result Cache stats for parallel workers who were not fast enough to help out before query execution was over. All other nodes behave this way and so should Result Cache. Additionally, with this change, it now seems safe enough to remove the SET force_parallel_mode = off that I had added to the regression tests. Also, perform some cleanup in the partition_prune tests. I had adjusted the explain_parallel_append() function to sanitize the Result Cache EXPLAIN ANALYZE output. However, since I didn't actually include any parallel Result Cache tests that show their EXPLAIN ANALYZE output, that code does nothing and can be removed. In passing, move the setting of memPeakKb into the scope where it's used. Reported-by: Amit Khandekar Author: David Rowley, Amit Khandekar Discussion: https://postgr.es/m/CAJ3gD9d8SkfY95GpM1zmsOtX2-Ogx5q-WLsf8f0ykEb0hCRK3w@mail.gmail.com --- src/backend/commands/explain.c | 25 ++++++++++++------- src/test/regress/expected/partition_prune.out | 3 --- src/test/regress/expected/resultcache.out | 4 --- src/test/regress/sql/partition_prune.sql | 3 --- src/test/regress/sql/resultcache.sql | 5 +--- 5 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 3d5198e2345a1..8ab7bca866b04 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -3144,17 +3144,17 @@ show_resultcache_info(ResultCacheState *rcstate, List *ancestors, if (!es->analyze) return; - /* - * mem_peak is only set when we freed memory, so we must use mem_used when - * mem_peak is 0. - */ - if (rcstate->stats.mem_peak > 0) - memPeakKb = (rcstate->stats.mem_peak + 1023) / 1024; - else - memPeakKb = (rcstate->mem_used + 1023) / 1024; - if (rcstate->stats.cache_misses > 0) { + /* + * mem_peak is only set when we freed memory, so we must use mem_used + * when mem_peak is 0. + */ + if (rcstate->stats.mem_peak > 0) + memPeakKb = (rcstate->stats.mem_peak + 1023) / 1024; + else + memPeakKb = (rcstate->mem_used + 1023) / 1024; + if (es->format != EXPLAIN_FORMAT_TEXT) { ExplainPropertyInteger("Cache Hits", NULL, rcstate->stats.cache_hits, es); @@ -3186,6 +3186,13 @@ show_resultcache_info(ResultCacheState *rcstate, List *ancestors, si = &rcstate->shared_info->sinstrument[n]; + /* + * Skip workers that didn't do any work. We needn't bother checking + * for cache hits as a miss will always occur before a cache hit. + */ + if (si->cache_misses == 0) + continue; + if (es->workers_state) ExplainOpenWorker(n, es); diff --git a/src/test/regress/expected/partition_prune.out b/src/test/regress/expected/partition_prune.out index 1a7149bfd5709..2c62e4a7a60d2 100644 --- a/src/test/regress/expected/partition_prune.out +++ b/src/test/regress/expected/partition_prune.out @@ -1958,9 +1958,6 @@ begin ln := regexp_replace(ln, 'Workers Launched: \d+', 'Workers Launched: N'); ln := regexp_replace(ln, 'actual rows=\d+ loops=\d+', 'actual rows=N loops=N'); ln := regexp_replace(ln, 'Rows Removed by Filter: \d+', 'Rows Removed by Filter: N'); - ln := regexp_replace(ln, 'Hits: \d+', 'Hits: N'); - ln := regexp_replace(ln, 'Misses: \d+', 'Misses: N'); - ln := regexp_replace(ln, 'Memory Usage: \d+', 'Memory Usage: N'); return next ln; end loop; end; diff --git a/src/test/regress/expected/resultcache.out b/src/test/regress/expected/resultcache.out index 7f4bf95f3feed..5b5dd6838e0f3 100644 --- a/src/test/regress/expected/resultcache.out +++ b/src/test/regress/expected/resultcache.out @@ -31,9 +31,6 @@ $$; -- Ensure we get a result cache on the inner side of the nested loop SET enable_hashjoin TO off; SET enable_bitmapscan TO off; --- force_parallel_mode = regress can cause some instability in EXPLAIN ANALYZE --- output, so let's ensure that we turn it off. -SET force_parallel_mode TO off; SELECT explain_resultcache(' SELECT COUNT(*),AVG(t1.unique1) FROM tenk1 t1 INNER JOIN tenk1 t2 ON t1.unique1 = t2.twenty @@ -118,7 +115,6 @@ WHERE t2.unique1 < 1200;', true); RESET enable_mergejoin; RESET work_mem; -RESET force_parallel_mode; RESET enable_bitmapscan; RESET enable_hashjoin; -- Test parallel plans with Result Cache. diff --git a/src/test/regress/sql/partition_prune.sql b/src/test/regress/sql/partition_prune.sql index 247264f93b754..16c8dc5f1fadf 100644 --- a/src/test/regress/sql/partition_prune.sql +++ b/src/test/regress/sql/partition_prune.sql @@ -464,9 +464,6 @@ begin ln := regexp_replace(ln, 'Workers Launched: \d+', 'Workers Launched: N'); ln := regexp_replace(ln, 'actual rows=\d+ loops=\d+', 'actual rows=N loops=N'); ln := regexp_replace(ln, 'Rows Removed by Filter: \d+', 'Rows Removed by Filter: N'); - ln := regexp_replace(ln, 'Hits: \d+', 'Hits: N'); - ln := regexp_replace(ln, 'Misses: \d+', 'Misses: N'); - ln := regexp_replace(ln, 'Memory Usage: \d+', 'Memory Usage: N'); return next ln; end loop; end; diff --git a/src/test/regress/sql/resultcache.sql b/src/test/regress/sql/resultcache.sql index 3fede90b00666..43a70d56a5118 100644 --- a/src/test/regress/sql/resultcache.sql +++ b/src/test/regress/sql/resultcache.sql @@ -33,9 +33,7 @@ $$; -- Ensure we get a result cache on the inner side of the nested loop SET enable_hashjoin TO off; SET enable_bitmapscan TO off; --- force_parallel_mode = regress can cause some instability in EXPLAIN ANALYZE --- output, so let's ensure that we turn it off. -SET force_parallel_mode TO off; + SELECT explain_resultcache(' SELECT COUNT(*),AVG(t1.unique1) FROM tenk1 t1 INNER JOIN tenk1 t2 ON t1.unique1 = t2.twenty @@ -69,7 +67,6 @@ INNER JOIN tenk1 t2 ON t1.unique1 = t2.thousand WHERE t2.unique1 < 1200;', true); RESET enable_mergejoin; RESET work_mem; -RESET force_parallel_mode; RESET enable_bitmapscan; RESET enable_hashjoin; From ee4ba01dbbc31daa083f434ecd603a80bbe50501 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Fri, 30 Apr 2021 10:49:52 +0530 Subject: [PATCH 212/671] Fix the bugs in selecting the transaction for streaming. There were two problems: a. We were always selecting the next available txn instead of selecting it when it is larger than the previous transaction. b. We were selecting the transactions which haven't made any changes to the database (base snapshot is not set). Later it was hitting an Assert because we don't decode such transactions and the changes in txn remain as it is. It is better not to choose such transactions for streaming in the first place. Reported-by: Haiying Tang Author: Dilip Kumar Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/OS0PR01MB61133B94E63177040F7ECDA1FB429@OS0PR01MB6113.jpnprd01.prod.outlook.com --- .../replication/logical/reorderbuffer.c | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index c27f710053474..e1e17962e7d35 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -3362,19 +3362,22 @@ ReorderBufferLargestTXN(ReorderBuffer *rb) * This can be seen as an optimized version of ReorderBufferLargestTXN, which * should give us the same transaction (because we don't update memory account * for subtransaction with streaming, so it's always 0). But we can simply - * iterate over the limited number of toplevel transactions. + * iterate over the limited number of toplevel transactions that have a base + * snapshot. There is no use of selecting a transaction that doesn't have base + * snapshot because we don't decode such transactions. * * Note that, we skip transactions that contains incomplete changes. There - * is a scope of optimization here such that we can select the largest transaction - * which has complete changes. But that will make the code and design quite complex - * and that might not be worth the benefit. If we plan to stream the transactions - * that contains incomplete changes then we need to find a way to partially - * stream/truncate the transaction changes in-memory and build a mechanism to - * partially truncate the spilled files. Additionally, whenever we partially - * stream the transaction we need to maintain the last streamed lsn and next time - * we need to restore from that segment and the offset in WAL. As we stream the - * changes from the top transaction and restore them subtransaction wise, we need - * to even remember the subxact from where we streamed the last change. + * is a scope of optimization here such that we can select the largest + * transaction which has incomplete changes. But that will make the code and + * design quite complex and that might not be worth the benefit. If we plan to + * stream the transactions that contains incomplete changes then we need to + * find a way to partially stream/truncate the transaction changes in-memory + * and build a mechanism to partially truncate the spilled files. + * Additionally, whenever we partially stream the transaction we need to + * maintain the last streamed lsn and next time we need to restore from that + * segment and the offset in WAL. As we stream the changes from the top + * transaction and restore them subtransaction wise, we need to even remember + * the subxact from where we streamed the last change. */ static ReorderBufferTXN * ReorderBufferLargestTopTXN(ReorderBuffer *rb) @@ -3383,14 +3386,19 @@ ReorderBufferLargestTopTXN(ReorderBuffer *rb) Size largest_size = 0; ReorderBufferTXN *largest = NULL; - /* Find the largest top-level transaction. */ - dlist_foreach(iter, &rb->toplevel_by_lsn) + /* Find the largest top-level transaction having a base snapshot. */ + dlist_foreach(iter, &rb->txns_by_base_snapshot_lsn) { ReorderBufferTXN *txn; - txn = dlist_container(ReorderBufferTXN, node, iter.cur); + txn = dlist_container(ReorderBufferTXN, base_snapshot_node, iter.cur); + + /* must not be a subtxn */ + Assert(!rbtxn_is_known_subxact(txn)); + /* base_snapshot must be set */ + Assert(txn->base_snapshot != NULL); - if ((largest != NULL || txn->total_size > largest_size) && + if ((largest == NULL || txn->total_size > largest_size) && (txn->total_size > 0) && !(rbtxn_has_incomplete_tuple(txn))) { largest = txn; From 2efcd502e56a528f75ec8e88c02a287ad3457d77 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 30 Apr 2021 14:10:26 -0400 Subject: [PATCH 213/671] Disallow calling anything but plain functions via the fastpath API. Reject aggregates, window functions, and procedures. Aggregates failed anyway, though with a somewhat obscure error message. Window functions would hit an Assert or null-pointer dereference. Procedures seemed to work as long as you didn't try to do transaction control, but (a) transaction control is sort of the point of a procedure, and (b) it's not entirely clear that no bugs lurk in that path. Given the lack of testing of this area, it seems safest to be conservative in what we support. Also reject proretset functions, as the fastpath protocol can't support returning a set. Also remove an easily-triggered assertion that the given OID isn't 0; the subsequent lookups can handle that case themselves. Per report from Theodor-Arsenij Larionov-Trichkin. Back-patch to all supported branches. (The procedure angle only applies in v11+, of course.) Discussion: https://postgr.es/m/2039442.1615317309@sss.pgh.pa.us --- src/backend/tcop/fastpath.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/backend/tcop/fastpath.c b/src/backend/tcop/fastpath.c index 77d17ebca942f..9fa8997cb30b7 100644 --- a/src/backend/tcop/fastpath.c +++ b/src/backend/tcop/fastpath.c @@ -121,7 +121,6 @@ fetch_fp_info(Oid func_id, struct fp_info *fip) HeapTuple func_htp; Form_pg_proc pp; - Assert(OidIsValid(func_id)); Assert(fip != NULL); /* @@ -135,8 +134,6 @@ fetch_fp_info(Oid func_id, struct fp_info *fip) MemSet(fip, 0, sizeof(struct fp_info)); fip->funcid = InvalidOid; - fmgr_info(func_id, &fip->flinfo); - func_htp = SearchSysCache1(PROCOID, ObjectIdGetDatum(func_id)); if (!HeapTupleIsValid(func_htp)) ereport(ERROR, @@ -144,6 +141,13 @@ fetch_fp_info(Oid func_id, struct fp_info *fip) errmsg("function with OID %u does not exist", func_id))); pp = (Form_pg_proc) GETSTRUCT(func_htp); + /* reject pg_proc entries that are unsafe to call via fastpath */ + if (pp->prokind != PROKIND_FUNCTION || pp->proretset) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot call function %s via fastpath interface", + NameStr(pp->proname)))); + /* watch out for catalog entries with more than FUNC_MAX_ARGS args */ if (pp->pronargs > FUNC_MAX_ARGS) elog(ERROR, "function %s has more than %d arguments", @@ -156,6 +160,8 @@ fetch_fp_info(Oid func_id, struct fp_info *fip) ReleaseSysCache(func_htp); + fmgr_info(func_id, &fip->flinfo); + /* * This must be last! */ From 386e64ea5abf346d887c21ea8869317838ba19b5 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 30 Apr 2021 15:10:06 -0400 Subject: [PATCH 214/671] Doc: update libpq's documentation for PQfn(). Mention specifically that you can't call aggregates, window functions, or procedures this way (the inability to call SRFs was already mentioned). Also, the claim that PQfn doesn't support NULL arguments or results has been a lie since we invented protocol 3.0. Not sure why this text was never updated for that, but do it now. Discussion: https://postgr.es/m/2039442.1615317309@sss.pgh.pa.us --- doc/src/sgml/libpq.sgml | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 174a6b7f37bc4..875950b83c0e2 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -5760,15 +5760,32 @@ typedef struct PQfn always returns a valid - PGresult pointer. The result status should be + PGresult pointer, with + status PGRES_COMMAND_OK for success + or PGRES_FATAL_ERROR if some problem was encountered. + The result status should be checked before the result is used. The caller is responsible for freeing the PGresult with when it is no longer needed. - Note that it is not possible to handle null arguments, null results, - nor set-valued results when using this interface. + To pass a NULL argument to the function, set + the len field of that parameter structure + to -1; the isint + and u fields are then irrelevant. + + + + If the function returns NULL, *result_len is set + to -1, and *result_buf is not + modified. + + + + Note that it is not possible to handle set-valued results when using + this interface. Also, the function must be a plain function, not an + aggregate, window function, or procedure. From e6f9539dc32473793c03cbe95bc099ee0a199c73 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 30 Apr 2021 15:37:56 -0400 Subject: [PATCH 215/671] Doc: add an example of a self-referential foreign key to ddl.sgml. While we've always allowed such cases, the documentation didn't say you could do it. Discussion: https://postgr.es/m/161969805833.690.13680986983883602407@wrigleys.postgresql.org --- doc/src/sgml/ddl.sgml | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml index 7d587b226cbd1..513112a216d96 100644 --- a/doc/src/sgml/ddl.sgml +++ b/doc/src/sgml/ddl.sgml @@ -915,6 +915,11 @@ CREATE TABLE orders ( referenced table is used as the referenced column(s). + + You can assign your own name for a foreign key constraint, + in the usual way. + + A foreign key can also constrain and reference a group of columns. As usual, it then needs to be written in table constraint form. @@ -931,9 +936,28 @@ CREATE TABLE t1 ( match the number and type of the referenced columns. + + foreign key + self-referential + + - You can assign your own name for a foreign key constraint, - in the usual way. + Sometimes it is useful for the other table of a + foreign key constraint to be the same table; this is called + a self-referential foreign key. For + example, if you want rows of a table to represent nodes of a tree + structure, you could write + +CREATE TABLE tree ( + node_id integer PRIMARY KEY, + parent_id integer REFERENCES tree, + name text, + ... +); + + A top-level node would have NULL parent_id, + but non-NULL parent_id entries would be + constrained to reference valid rows of the table. From 651d005e76bc0b9542615f609b4d0d946035dc58 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sat, 1 May 2021 10:42:44 -0400 Subject: [PATCH 216/671] Revert use singular for -1 (commits 9ee7d533da and 5da9868ed9 Turns out you can specify negative values using plurals: https://english.stackexchange.com/questions/9735/is-1-followed-by-a-singular-or-plural-noun so the previous code was correct enough, and consistent with other usage in our code. Also add comment in the two places where this could be confused. Reported-by: Noah Misch Diagnosed-by: 20210425115726.GA2353095@rfd.leadboat.com --- contrib/dblink/expected/dblink.out | 6 +++--- src/backend/utils/adt/datetime.c | 5 +++-- src/interfaces/ecpg/pgtypeslib/interval.c | 5 +++-- src/interfaces/libpq/fe-print.c | 4 ++-- src/test/regress/expected/interval.out | 22 +++++++++++----------- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/contrib/dblink/expected/dblink.out b/contrib/dblink/expected/dblink.out index 33ceaddd89cb5..6516d4f13133e 100644 --- a/contrib/dblink/expected/dblink.out +++ b/contrib/dblink/expected/dblink.out @@ -1099,9 +1099,9 @@ SELECT * FROM dblink('myconn', 'SELECT * FROM (VALUES (''-1 2:03:04'')) i') AS i(i interval); - i ------------------- - -1 day -02:03:04 + i +------------------- + -1 days -02:03:04 (1 row) -- Try swapping to another format to ensure the GUCs are tracked diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index 889077f55c558..54ae632de242a 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -4190,7 +4190,7 @@ AddPostgresIntPart(char *cp, int value, const char *units, (*is_before && value > 0) ? "+" : "", value, units, - (abs(value) != 1) ? "s" : ""); + (value != 1) ? "s" : ""); /* * Each nonzero field sets is_before for (only) the next one. This is a @@ -4216,7 +4216,7 @@ AddVerboseIntPart(char *cp, int value, const char *units, } else if (*is_before) value = -value; - sprintf(cp, " %d %s%s", value, units, (abs(value) == 1) ? "" : "s"); + sprintf(cp, " %d %s%s", value, units, (value == 1) ? "" : "s"); *is_zero = false; return cp + strlen(cp); } @@ -4414,6 +4414,7 @@ EncodeInterval(struct pg_tm *tm, fsec_t fsec, int style, char *str) else if (is_before) *cp++ = '-'; cp = AppendSeconds(cp, sec, fsec, MAX_INTERVAL_PRECISION, false); + /* We output "ago", not negatives, so use abs(). */ sprintf(cp, " sec%s", (abs(sec) != 1 || fsec != 0) ? "s" : ""); is_zero = false; diff --git a/src/interfaces/ecpg/pgtypeslib/interval.c b/src/interfaces/ecpg/pgtypeslib/interval.c index 4245016c8e83b..02b3c47223309 100644 --- a/src/interfaces/ecpg/pgtypeslib/interval.c +++ b/src/interfaces/ecpg/pgtypeslib/interval.c @@ -694,7 +694,7 @@ AddVerboseIntPart(char *cp, int value, const char *units, } else if (*is_before) value = -value; - sprintf(cp, " %d %s%s", value, units, (abs(value) == 1) ? "" : "s"); + sprintf(cp, " %d %s%s", value, units, (value == 1) ? "" : "s"); *is_zero = false; return cp + strlen(cp); } @@ -711,7 +711,7 @@ AddPostgresIntPart(char *cp, int value, const char *units, (*is_before && value > 0) ? "+" : "", value, units, - (abs(value) != 1) ? "s" : ""); + (value != 1) ? "s" : ""); /* * Each nonzero field sets is_before for (only) the next one. This is a @@ -924,6 +924,7 @@ EncodeInterval(struct /* pg_ */ tm *tm, fsec_t fsec, int style, char *str) *cp++ = '-'; AppendSeconds(cp, sec, fsec, MAX_INTERVAL_PRECISION, false); cp += strlen(cp); + /* We output "ago", not negatives, so use abs(). */ sprintf(cp, " sec%s", (abs(sec) != 1 || fsec != 0) ? "s" : ""); is_zero = false; diff --git a/src/interfaces/libpq/fe-print.c b/src/interfaces/libpq/fe-print.c index af19b3c0a3e35..94219b1825bcb 100644 --- a/src/interfaces/libpq/fe-print.c +++ b/src/interfaces/libpq/fe-print.c @@ -303,7 +303,7 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po) } if (po->header && !po->html3) fprintf(fout, "(%d row%s)\n\n", PQntuples(res), - (abs(PQntuples(res)) == 1) ? "" : "s"); + (PQntuples(res) == 1) ? "" : "s"); if (po->html3 && !po->expanded) fputs("
\n", fout); free(fieldMax); @@ -662,7 +662,7 @@ PQdisplayTuples(const PGresult *res, if (!quiet) fprintf(fp, "\nQuery returned %d row%s.\n", PQntuples(res), - (abs(PQntuples(res)) == 1) ? "" : "s"); + (PQntuples(res) == 1) ? "" : "s"); fflush(fp); diff --git a/src/test/regress/expected/interval.out b/src/test/regress/expected/interval.out index 0191949137657..e4b1246f45349 100644 --- a/src/test/regress/expected/interval.out +++ b/src/test/regress/expected/interval.out @@ -23,15 +23,15 @@ SELECT INTERVAL '-08:00' AS "Eight hours"; (1 row) SELECT INTERVAL '-1 +02:03' AS "22 hours ago..."; - 22 hours ago... ------------------- - -1 day +02:03:00 + 22 hours ago... +------------------- + -1 days +02:03:00 (1 row) SELECT INTERVAL '-1 days +02:03' AS "22 hours ago..."; - 22 hours ago... ------------------- - -1 day +02:03:00 + 22 hours ago... +------------------- + -1 days +02:03:00 (1 row) SELECT INTERVAL '1.5 weeks' AS "Ten days twelve hours"; @@ -288,7 +288,7 @@ FROM INTERVAL_MULDIV_TBL; product ------------------------------------ 1 year 12 days 122:24:00 - -1 year -12 days +93:36:00 + -1 years -12 days +93:36:00 -3 days -14:24:00 2 mons 13 days 01:22:28.8 -10 mons +120 days 37:28:21.6567 @@ -317,7 +317,7 @@ FROM INTERVAL_MULDIV_TBL; ---------------------------------- 4 mons 4 days 40:48:00 -4 mons -4 days +31:12:00 - -1 day -04:48:00 + -1 days -04:48:00 25 days -15:32:30.4 -3 mons +30 days 12:29:27.2189 12 days @@ -785,9 +785,9 @@ SELECT interval '+1 -1:00:00', interval '-1 +1:00:00', interval '+1-2 -3 +4:05:06.789', interval '-1-2 +3 -4:05:06.789'; - interval | interval | interval | interval ------------------+------------------+-------------------------------------+--------------------------------------- - 1 day -01:00:00 | -1 day +01:00:00 | 1 year 2 mons -3 days +04:05:06.789 | -1 year -2 mons +3 days -04:05:06.789 + interval | interval | interval | interval +-----------------+-------------------+-------------------------------------+---------------------------------------- + 1 day -01:00:00 | -1 days +01:00:00 | 1 year 2 mons -3 days +04:05:06.789 | -1 years -2 mons +3 days -04:05:06.789 (1 row) -- test output of couple non-standard interval values in the sql style From eb086056fec44516efdd5db71244a079fed65c7f Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Mon, 3 May 2021 03:58:03 +0300 Subject: [PATCH 217/671] Make websearch_to_tsquery() parse text in quotes as a single token websearch_to_tsquery() splits text in quotes into tokens and connects them with phrase operator on its own. However, that leads to surprising results when the token contains no words. For instance, websearch_to_tsquery('"aaa: bbb"') is 'aaa <2> bbb', because it is equivalent of to_tsquery(E'aaa <-> \':\' <-> bbb'). But websearch_to_tsquery('"aaa: bbb"') has to be 'aaa <-> bbb' in order to match to_tsvector('aaa: bbb'). Since 0c4f355c6a, we anyway connect lexemes of complex tokens with phrase operators. Thus, let's just websearch_to_tsquery() parse text in quotes as a single token. Therefore, websearch_to_tsquery() should process the quoted text in the same way phraseto_tsquery() does. This solution is what we exactly need and also simplifies the code. This commit is an incompatible change, so we don't backpatch it. Reported-by: Valentin Gatien-Baron Discussion: https://postgr.es/m/CA%2B0DEqiZs7gdOd4ikmg%3D0UWG%2BSwWOLxPsk_JW-sx9WNOyrb0KQ%40mail.gmail.com Author: Alexander Korotkov Reviewed-by: Tom Lane, Zhihong Yu --- src/backend/utils/adt/tsquery.c | 81 ++++++++------------------- src/test/regress/expected/tsearch.out | 24 +++++--- src/test/regress/sql/tsearch.sql | 1 + 3 files changed, 39 insertions(+), 67 deletions(-) diff --git a/src/backend/utils/adt/tsquery.c b/src/backend/utils/adt/tsquery.c index fe4470174f5d1..b2ca0d2f8a248 100644 --- a/src/backend/utils/adt/tsquery.c +++ b/src/backend/utils/adt/tsquery.c @@ -77,7 +77,6 @@ struct TSQueryParserStateData char *buf; /* current scan point */ int count; /* nesting count, incremented by (, * decremented by ) */ - bool in_quotes; /* phrase in quotes "" */ ts_parserstate state; /* polish (prefix) notation in list, filled in by push* functions */ @@ -235,9 +234,6 @@ parse_or_operator(TSQueryParserState pstate) { char *ptr = pstate->buf; - if (pstate->in_quotes) - return false; - /* it should begin with "OR" literal */ if (pg_strncasecmp(ptr, "or", 2) != 0) return false; @@ -398,38 +394,29 @@ gettoken_query_websearch(TSQueryParserState state, int8 *operator, state->buf++; state->state = WAITOPERAND; - if (state->in_quotes) - continue; - *operator = OP_NOT; return PT_OPR; } else if (t_iseq(state->buf, '"')) { + /* Everything in quotes is processed as a single token */ + + /* skip opening quote */ state->buf++; + *strval = state->buf; - if (!state->in_quotes) - { - state->state = WAITOPERAND; + /* iterate to the closing quote or end of the string */ + while (*state->buf != '\0' && !t_iseq(state->buf, '"')) + state->buf++; + *lenval = state->buf - *strval; - if (strchr(state->buf, '"')) - { - /* quoted text should be ordered <-> */ - state->in_quotes = true; - return PT_OPEN; - } + /* skip closing quote if not end of the string */ + if (*state->buf != '\0') + state->buf++; - /* web search tolerates missing quotes */ - continue; - } - else - { - /* we have to provide an operand */ - state->in_quotes = false; - state->state = WAITOPERATOR; - pushStop(state); - return PT_CLOSE; - } + state->state = WAITOPERATOR; + state->count++; + return PT_VAL; } else if (ISOPERATOR(state->buf)) { @@ -467,24 +454,13 @@ gettoken_query_websearch(TSQueryParserState state, int8 *operator, case WAITOPERATOR: if (t_iseq(state->buf, '"')) { - if (!state->in_quotes) - { - /* - * put implicit AND after an operand and handle this - * quote in WAITOPERAND - */ - state->state = WAITOPERAND; - *operator = OP_AND; - return PT_OPR; - } - else - { - state->buf++; - - /* just close quotes */ - state->in_quotes = false; - return PT_CLOSE; - } + /* + * put implicit AND after an operand and handle this quote + * in WAITOPERAND + */ + state->state = WAITOPERAND; + *operator = OP_AND; + return PT_OPR; } else if (parse_or_operator(state)) { @@ -498,18 +474,8 @@ gettoken_query_websearch(TSQueryParserState state, int8 *operator, } else if (!t_isspace(state->buf)) { - if (state->in_quotes) - { - /* put implicit <-> after an operand */ - *operator = OP_PHRASE; - *weight = 1; - } - else - { - /* put implicit AND after an operand */ - *operator = OP_AND; - } - + /* put implicit AND after an operand */ + *operator = OP_AND; state->state = WAITOPERAND; return PT_OPR; } @@ -846,7 +812,6 @@ parse_tsquery(char *buf, state.buffer = buf; state.buf = buf; state.count = 0; - state.in_quotes = false; state.state = WAITFIRSTOPERAND; state.polstr = NIL; diff --git a/src/test/regress/expected/tsearch.out b/src/test/regress/expected/tsearch.out index 4ae62320c9ffe..45b92a6338836 100644 --- a/src/test/regress/expected/tsearch.out +++ b/src/test/regress/expected/tsearch.out @@ -2678,9 +2678,9 @@ select websearch_to_tsquery('simple', 'abc OR_abc'); -- test quotes select websearch_to_tsquery('english', '"pg_class pg'); - websearch_to_tsquery -------------------------- - 'pg' <-> 'class' & 'pg' + websearch_to_tsquery +--------------------------- + 'pg' <-> 'class' <-> 'pg' (1 row) select websearch_to_tsquery('english', 'pg_class pg"'); @@ -2695,6 +2695,12 @@ select websearch_to_tsquery('english', '"pg_class pg"'); 'pg' <-> 'class' <-> 'pg' (1 row) +select websearch_to_tsquery('english', '"pg_class : pg"'); + websearch_to_tsquery +--------------------------- + 'pg' <-> 'class' <-> 'pg' +(1 row) + select websearch_to_tsquery('english', 'abc "pg_class pg"'); websearch_to_tsquery ----------------------------------- @@ -2708,15 +2714,15 @@ select websearch_to_tsquery('english', '"pg_class pg" def'); (1 row) select websearch_to_tsquery('english', 'abc "pg pg_class pg" def'); - websearch_to_tsquery --------------------------------------------------------- - 'abc' & 'pg' <-> ( 'pg' <-> 'class' ) <-> 'pg' & 'def' + websearch_to_tsquery +---------------------------------------------------- + 'abc' & 'pg' <-> 'pg' <-> 'class' <-> 'pg' & 'def' (1 row) select websearch_to_tsquery('english', ' or "pg pg_class pg" or '); - websearch_to_tsquery ----------------------------------------- - 'pg' <-> ( 'pg' <-> 'class' ) <-> 'pg' + websearch_to_tsquery +------------------------------------ + 'pg' <-> 'pg' <-> 'class' <-> 'pg' (1 row) select websearch_to_tsquery('english', '""pg pg_class pg""'); diff --git a/src/test/regress/sql/tsearch.sql b/src/test/regress/sql/tsearch.sql index b02ed73f6a8c2..d929210998ae5 100644 --- a/src/test/regress/sql/tsearch.sql +++ b/src/test/regress/sql/tsearch.sql @@ -759,6 +759,7 @@ select websearch_to_tsquery('simple', 'abc OR_abc'); select websearch_to_tsquery('english', '"pg_class pg'); select websearch_to_tsquery('english', 'pg_class pg"'); select websearch_to_tsquery('english', '"pg_class pg"'); +select websearch_to_tsquery('english', '"pg_class : pg"'); select websearch_to_tsquery('english', 'abc "pg_class pg"'); select websearch_to_tsquery('english', '"pg_class pg" def'); select websearch_to_tsquery('english', 'abc "pg pg_class pg" def'); From 205f466282be11ec97506f73341e47b72e0aee5d Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Mon, 3 May 2021 07:22:08 +0530 Subject: [PATCH 218/671] Fix the computation of slot stats for 'total_bytes'. Previously, we were using the size of all the changes present in ReorderBuffer to compute total_bytes after decoding a transaction and that can lead to counting some of the transactions' changes more than once. Fix it by using the size of the changes decoded for a transaction to compute 'total_bytes'. Author: Sawada Masahiko Reviewed-by: Vignesh C, Amit Kapila Discussion: https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de --- .../replication/logical/reorderbuffer.c | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index e1e17962e7d35..ee680e5e1b4a3 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -1366,10 +1366,11 @@ ReorderBufferIterTXNNext(ReorderBuffer *rb, ReorderBufferIterTXNState *state) dlist_push_tail(&state->old_change, &change->node); /* - * Update the total bytes processed before releasing the current set - * of changes and restoring the new set of changes. + * Update the total bytes processed by the txn for which we are + * releasing the current set of changes and restoring the new set of + * changes. */ - rb->totalBytes += rb->size; + rb->totalBytes += entry->txn->size; if (ReorderBufferRestoreChanges(rb, entry->txn, &entry->file, &state->entries[off].segno)) { @@ -2371,9 +2372,9 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn, iterstate = NULL; /* - * Update total transaction count and total transaction bytes - * processed. Ensure to not count the streamed transaction multiple - * times. + * Update total transaction count and total bytes processed by the + * transaction and its subtransactions. Ensure to not count the + * streamed transaction multiple times. * * Note that the statistics computation has to be done after * ReorderBufferIterTXNFinish as it releases the serialized change @@ -2382,7 +2383,7 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn, if (!rbtxn_is_streamed(txn)) rb->totalTxns++; - rb->totalBytes += rb->size; + rb->totalBytes += txn->total_size; /* * Done with current changes, send the last message for this set of @@ -3073,7 +3074,7 @@ ReorderBufferChangeMemoryUpdate(ReorderBuffer *rb, { Size sz; ReorderBufferTXN *txn; - ReorderBufferTXN *toptxn = NULL; + ReorderBufferTXN *toptxn; Assert(change->txn); @@ -3087,14 +3088,14 @@ ReorderBufferChangeMemoryUpdate(ReorderBuffer *rb, txn = change->txn; - /* If streaming supported, update the total size in top level as well. */ - if (ReorderBufferCanStream(rb)) - { - if (txn->toptxn != NULL) - toptxn = txn->toptxn; - else - toptxn = txn; - } + /* + * Update the total size in top level as well. This is later used to + * compute the decoding stats. + */ + if (txn->toptxn != NULL) + toptxn = txn->toptxn; + else + toptxn = txn; sz = ReorderBufferChangeSize(change); @@ -3104,8 +3105,7 @@ ReorderBufferChangeMemoryUpdate(ReorderBuffer *rb, rb->size += sz; /* Update the total size in the top transaction. */ - if (toptxn) - toptxn->total_size += sz; + toptxn->total_size += sz; } else { @@ -3114,8 +3114,7 @@ ReorderBufferChangeMemoryUpdate(ReorderBuffer *rb, rb->size -= sz; /* Update the total size in the top transaction. */ - if (toptxn) - toptxn->total_size -= sz; + toptxn->total_size -= sz; } Assert(txn->size <= rb->size); From 853c8c75571558f4b474eeac3ef9e6fcf9be62ba Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 3 May 2021 07:27:31 +0200 Subject: [PATCH 219/671] Factor out system call names from error messages One more that ought to have been part of 82c3cd974131d7fa1cfcd07cebfb04fffe26ee35. --- src/interfaces/libpq/fe-connect.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 5a57c9d75b402..3242cfc874e5d 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -1988,7 +1988,8 @@ setKeepalivesWin32(PGconn *conn) != 0) { appendPQExpBuffer(&conn->errorMessage, - libpq_gettext("WSAIoctl(SIO_KEEPALIVE_VALS) failed: %d\n"), + libpq_gettext("%s(%s) failed: error code %d\n"), + "WSAIoctl", "SIO_KEEPALIVE_VALS", WSAGetLastError()); return 0; } From ced12b73a9bc76b887cb7137df3d56222e2b5263 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 3 May 2021 08:51:30 +0200 Subject: [PATCH 220/671] libpq: Refactor some error messages for easier translation --- src/interfaces/libpq/fe-connect.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 3242cfc874e5d..80703698b81e0 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -3751,8 +3751,9 @@ PQconnectPoll(PGconn *conn) PQclear(res); /* Append error report to conn->errorMessage. */ - appendPQExpBufferStr(&conn->errorMessage, - libpq_gettext("\"SHOW transaction_read_only\" failed\n")); + appendPQExpBuffer(&conn->errorMessage, + libpq_gettext("\"%s\" failed\n"), + "SHOW transaction_read_only"); /* Close connection politely. */ conn->status = CONNECTION_OK; @@ -3802,8 +3803,9 @@ PQconnectPoll(PGconn *conn) PQclear(res); /* Append error report to conn->errorMessage. */ - appendPQExpBufferStr(&conn->errorMessage, - libpq_gettext("\"SELECT pg_is_in_recovery()\" failed\n")); + appendPQExpBuffer(&conn->errorMessage, + libpq_gettext("\"%s\" failed\n"), + "SELECT pg_is_in_recovery()"); /* Close connection politely. */ conn->status = CONNECTION_OK; From c285babf8f44d86b7fd1e73e9e4f94456b825bfb Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 3 May 2021 09:05:58 +0200 Subject: [PATCH 221/671] Remove unused function argument became unused by 04942bffd0aa9bd0d143d99b473342eb9ecee88b --- src/backend/rewrite/rewriteHandler.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index 1f1df95b0dd0b..88a9e95e339f8 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -70,7 +70,6 @@ static List *rewriteTargetListIU(List *targetList, CmdType commandType, OverridingKind override, Relation target_relation, - int result_rti, RangeTblEntry *values_rte, int values_rte_index, Bitmapset **unused_values_attrnos); @@ -709,7 +708,6 @@ rewriteTargetListIU(List *targetList, CmdType commandType, OverridingKind override, Relation target_relation, - int result_rti, RangeTblEntry *values_rte, int values_rte_index, Bitmapset **unused_values_attrnos) @@ -3696,7 +3694,6 @@ RewriteQuery(Query *parsetree, List *rewrite_events) parsetree->commandType, parsetree->override, rt_entry_relation, - parsetree->resultRelation, values_rte, values_rte_index, &unused_values_attrnos); @@ -3714,7 +3711,6 @@ RewriteQuery(Query *parsetree, List *rewrite_events) parsetree->commandType, parsetree->override, rt_entry_relation, - parsetree->resultRelation, NULL, 0, NULL); } @@ -3726,7 +3722,6 @@ RewriteQuery(Query *parsetree, List *rewrite_events) CMD_UPDATE, parsetree->override, rt_entry_relation, - parsetree->resultRelation, NULL, 0, NULL); } } @@ -3737,7 +3732,6 @@ RewriteQuery(Query *parsetree, List *rewrite_events) parsetree->commandType, parsetree->override, rt_entry_relation, - parsetree->resultRelation, NULL, 0, NULL); /* Also populate extraUpdatedCols (for generated columns) */ From b94409a02f6122d77b5154e481c0819fed6b4c95 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 3 May 2021 12:11:33 +0200 Subject: [PATCH 222/671] Prevent lwlock dtrace probes from unnecessary work If dtrace is compiled in but disabled, the lwlock dtrace probes still evaluate their arguments. Since PostgreSQL 13, T_NAME(lock) does nontrivial work, so it should be avoided if not needed. To fix, make these calls conditional on the *_ENABLED() macro corresponding to each probe. Reviewed-by: Craig Ringer Discussion: https://www.postgresql.org/message-id/CAGRY4nwxKUS_RvXFW-ugrZBYxPFFM5kjwKT5O+0+Stuga5b4+Q@mail.gmail.com --- src/backend/storage/lmgr/lwlock.c | 36 ++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index 975d547f34b1e..55b9d7970ec38 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -1318,7 +1318,8 @@ LWLockAcquire(LWLock *lock, LWLockMode mode) #endif LWLockReportWaitStart(lock); - TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), mode); + if (TRACE_POSTGRESQL_LWLOCK_WAIT_START_ENABLED()) + TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), mode); for (;;) { @@ -1340,7 +1341,8 @@ LWLockAcquire(LWLock *lock, LWLockMode mode) } #endif - TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), mode); + if (TRACE_POSTGRESQL_LWLOCK_WAIT_DONE_ENABLED()) + TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), mode); LWLockReportWaitEnd(); LOG_LWDEBUG("LWLockAcquire", lock, "awakened"); @@ -1349,7 +1351,8 @@ LWLockAcquire(LWLock *lock, LWLockMode mode) result = false; } - TRACE_POSTGRESQL_LWLOCK_ACQUIRE(T_NAME(lock), mode); + if (TRACE_POSTGRESQL_LWLOCK_ACQUIRE_ENABLED()) + TRACE_POSTGRESQL_LWLOCK_ACQUIRE(T_NAME(lock), mode); /* Add lock to list of locks held by this backend */ held_lwlocks[num_held_lwlocks].lock = lock; @@ -1400,14 +1403,16 @@ LWLockConditionalAcquire(LWLock *lock, LWLockMode mode) RESUME_INTERRUPTS(); LOG_LWDEBUG("LWLockConditionalAcquire", lock, "failed"); - TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL(T_NAME(lock), mode); + if (TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL_ENABLED()) + TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL(T_NAME(lock), mode); } else { /* Add lock to list of locks held by this backend */ held_lwlocks[num_held_lwlocks].lock = lock; held_lwlocks[num_held_lwlocks++].mode = mode; - TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE(T_NAME(lock), mode); + if (TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE_ENABLED()) + TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE(T_NAME(lock), mode); } return !mustwait; } @@ -1479,7 +1484,8 @@ LWLockAcquireOrWait(LWLock *lock, LWLockMode mode) #endif LWLockReportWaitStart(lock); - TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), mode); + if (TRACE_POSTGRESQL_LWLOCK_WAIT_START_ENABLED()) + TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), mode); for (;;) { @@ -1497,7 +1503,8 @@ LWLockAcquireOrWait(LWLock *lock, LWLockMode mode) Assert(nwaiters < MAX_BACKENDS); } #endif - TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), mode); + if (TRACE_POSTGRESQL_LWLOCK_WAIT_DONE_ENABLED()) + TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), mode); LWLockReportWaitEnd(); LOG_LWDEBUG("LWLockAcquireOrWait", lock, "awakened"); @@ -1527,7 +1534,8 @@ LWLockAcquireOrWait(LWLock *lock, LWLockMode mode) /* Failed to get lock, so release interrupt holdoff */ RESUME_INTERRUPTS(); LOG_LWDEBUG("LWLockAcquireOrWait", lock, "failed"); - TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT_FAIL(T_NAME(lock), mode); + if (TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT_FAIL_ENABLED()) + TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT_FAIL(T_NAME(lock), mode); } else { @@ -1535,7 +1543,8 @@ LWLockAcquireOrWait(LWLock *lock, LWLockMode mode) /* Add lock to list of locks held by this backend */ held_lwlocks[num_held_lwlocks].lock = lock; held_lwlocks[num_held_lwlocks++].mode = mode; - TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT(T_NAME(lock), mode); + if (TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT_ENABLED()) + TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT(T_NAME(lock), mode); } return !mustwait; @@ -1695,7 +1704,8 @@ LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval) #endif LWLockReportWaitStart(lock); - TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), LW_EXCLUSIVE); + if (TRACE_POSTGRESQL_LWLOCK_WAIT_START_ENABLED()) + TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), LW_EXCLUSIVE); for (;;) { @@ -1714,7 +1724,8 @@ LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval) } #endif - TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), LW_EXCLUSIVE); + if (TRACE_POSTGRESQL_LWLOCK_WAIT_DONE_ENABLED()) + TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), LW_EXCLUSIVE); LWLockReportWaitEnd(); LOG_LWDEBUG("LWLockWaitForVar", lock, "awakened"); @@ -1840,7 +1851,8 @@ LWLockRelease(LWLock *lock) /* nobody else can have that kind of lock */ Assert(!(oldstate & LW_VAL_EXCLUSIVE)); - TRACE_POSTGRESQL_LWLOCK_RELEASE(T_NAME(lock)); + if (TRACE_POSTGRESQL_LWLOCK_RELEASE_ENABLED()) + TRACE_POSTGRESQL_LWLOCK_RELEASE(T_NAME(lock)); /* * We're still waiting for backends to get scheduled, don't wake them up From f68970e33f4dc48094c24c78c452ad730ae9ae12 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 3 May 2021 11:42:31 -0400 Subject: [PATCH 223/671] Fix performance issue in new regex match-all detection code. Commit 824bf7190 introduced a new search of the NFAs generated by regex compilation. I failed to think hard about the performance characteristics of that search, with the predictable outcome that it's bad: weird regexes can trigger exponential search time. Worse, there's no check-for-interrupt in that code, so you can't even cancel the query if this happens. Fix by introducing memo-ization of the search results, so that any one NFA state need be examined in detail just once. This potentially uses a lot of memory, but we can bound the memory usage by putting a limit on the number of states for which we'll try to prove match-all-ness. That is sane because we already have a limit (DUPINF) on the maximum finite string length that a matchall regex can match; and patterns that involve much more than DUPINF states would probably exceed that limit anyway. Also, rearrange the logic so that we check the basic is-the-graph- all-RAINBOW-arcs property before we start the recursive search to determine path lengths. This will ensure that we fall out quickly whenever the NFA couldn't possibly be matchall. Also stick in a check-for-interrupt, just in case these measures don't completely eliminate the risk of slowness. Discussion: https://postgr.es/m/3483895.1619898362@sss.pgh.pa.us --- src/backend/regex/regc_nfa.c | 481 ++++++++++++++++++---------- src/backend/regex/regcomp.c | 3 +- src/test/regress/expected/regex.out | 37 +++ src/test/regress/sql/regex.sql | 8 + 4 files changed, 366 insertions(+), 163 deletions(-) diff --git a/src/backend/regex/regc_nfa.c b/src/backend/regex/regc_nfa.c index 77b860cb0fdad..6d77c59e12139 100644 --- a/src/backend/regex/regc_nfa.c +++ b/src/backend/regex/regc_nfa.c @@ -3032,96 +3032,189 @@ analyze(struct nfa *nfa) static void checkmatchall(struct nfa *nfa) { - bool hasmatch[DUPINF + 1]; - int minmatch, - maxmatch, - morematch; + bool **haspaths; + struct state *s; + int i; /* - * hasmatch[i] will be set true if a match of length i is feasible, for i - * from 0 to DUPINF-1. hasmatch[DUPINF] will be set true if every match - * length of DUPINF or more is feasible. + * If there are too many states, don't bother trying to detect matchall. + * This limit serves to bound the time and memory we could consume below. + * Note that even if the graph is all-RAINBOW, if there are significantly + * more than DUPINF states then it's likely that there are paths of length + * more than DUPINF, which would force us to fail anyhow. In practice, + * plausible ways of writing a matchall regex with maximum finite path + * length K tend not to have very many more than K states. */ - memset(hasmatch, 0, sizeof(hasmatch)); + if (nfa->nstates > DUPINF * 2) + return; /* - * Recursively search the graph for all-RAINBOW paths to the "post" state, - * starting at the "pre" state. The -1 initial depth accounts for the - * fact that transitions out of the "pre" state are not part of the - * matched string. We likewise don't count the final transition to the - * "post" state as part of the match length. (But we still insist that - * those transitions have RAINBOW arcs, otherwise there are lookbehind or - * lookahead constraints at the start/end of the pattern.) + * First, scan all the states to verify that only RAINBOW arcs appear, + * plus pseudocolor arcs adjacent to the pre and post states. This lets + * us quickly eliminate most cases that aren't matchall NFAs. */ - if (!checkmatchall_recurse(nfa, nfa->pre, false, -1, hasmatch)) - return; + for (s = nfa->states; s != NULL; s = s->next) + { + struct arc *a; + + for (a = s->outs; a != NULL; a = a->outchain) + { + if (a->type != PLAIN) + return; /* any LACONs make it non-matchall */ + if (a->co != RAINBOW) + { + if (nfa->cm->cd[a->co].flags & PSEUDO) + { + /* + * Pseudocolor arc: verify it's in a valid place (this + * seems quite unlikely to fail, but let's be sure). + */ + if (s == nfa->pre && + (a->co == nfa->bos[0] || a->co == nfa->bos[1])) + /* okay BOS/BOL arc */ ; + else if (a->to == nfa->post && + (a->co == nfa->eos[0] || a->co == nfa->eos[1])) + /* okay EOS/EOL arc */ ; + else + return; /* unexpected pseudocolor arc */ + /* We'll check these arcs some more below. */ + } + else + return; /* any other color makes it non-matchall */ + } + } + /* Also, assert that the tmp fields are available for use. */ + assert(s->tmp == NULL); + } /* - * We found some all-RAINBOW paths, and not anything that we couldn't - * handle. Now verify that pseudocolor arcs adjacent to the pre and post - * states match the RAINBOW arcs there. (We could do this while - * recursing, but it's expensive and unlikely to fail, so do it last.) + * The next cheapest check we can make is to verify that the BOS/BOL + * outarcs of the pre state reach the same states as its RAINBOW outarcs. + * If they don't, the NFA expresses some constraints on the character + * before the matched string, making it non-matchall. Likewise, the + * EOS/EOL inarcs of the post state must match its RAINBOW inarcs. */ if (!check_out_colors_match(nfa->pre, RAINBOW, nfa->bos[0]) || - !check_out_colors_match(nfa->pre, nfa->bos[0], RAINBOW) || !check_out_colors_match(nfa->pre, RAINBOW, nfa->bos[1]) || - !check_out_colors_match(nfa->pre, nfa->bos[1], RAINBOW)) - return; - if (!check_in_colors_match(nfa->post, RAINBOW, nfa->eos[0]) || - !check_in_colors_match(nfa->post, nfa->eos[0], RAINBOW) || - !check_in_colors_match(nfa->post, RAINBOW, nfa->eos[1]) || - !check_in_colors_match(nfa->post, nfa->eos[1], RAINBOW)) + !check_in_colors_match(nfa->post, RAINBOW, nfa->eos[0]) || + !check_in_colors_match(nfa->post, RAINBOW, nfa->eos[1])) return; /* - * hasmatch[] now represents the set of possible match lengths; but we - * want to reduce that to a min and max value, because it doesn't seem - * worth complicating regexec.c to deal with nonconsecutive possible match - * lengths. Find min and max of first run of lengths, then verify there - * are no nonconsecutive lengths. + * Initialize an array of path-length arrays, in which + * checkmatchall_recurse will return per-state results. This lets us + * memo-ize the recursive search and avoid exponential time consumption. */ - for (minmatch = 0; minmatch <= DUPINF; minmatch++) - { - if (hasmatch[minmatch]) - break; - } - assert(minmatch <= DUPINF); /* else checkmatchall_recurse lied */ - for (maxmatch = minmatch; maxmatch < DUPINF; maxmatch++) + haspaths = (bool **) MALLOC(nfa->nstates * sizeof(bool *)); + if (haspaths == NULL) + return; /* fail quietly */ + memset(haspaths, 0, nfa->nstates * sizeof(bool *)); + + /* + * Recursively search the graph for all-RAINBOW paths to the "post" state, + * starting at the "pre" state, and computing the lengths of the paths. + * (Given the preceding checks, there should be at least one such path. + * However we could get back a false result anyway, in case there are + * multi-state loops, paths exceeding DUPINF+1 length, or non-algorithmic + * failures such as ENOMEM.) + */ + if (checkmatchall_recurse(nfa, nfa->pre, haspaths)) { - if (!hasmatch[maxmatch + 1]) - break; + /* The useful result is the path length array for the pre state */ + bool *haspath = haspaths[nfa->pre->no]; + int minmatch, + maxmatch, + morematch; + + assert(haspath != NULL); + + /* + * haspath[] now represents the set of possible path lengths; but we + * want to reduce that to a min and max value, because it doesn't seem + * worth complicating regexec.c to deal with nonconsecutive possible + * match lengths. Find min and max of first run of lengths, then + * verify there are no nonconsecutive lengths. + */ + for (minmatch = 0; minmatch <= DUPINF + 1; minmatch++) + { + if (haspath[minmatch]) + break; + } + assert(minmatch <= DUPINF + 1); /* else checkmatchall_recurse lied */ + for (maxmatch = minmatch; maxmatch < DUPINF + 1; maxmatch++) + { + if (!haspath[maxmatch + 1]) + break; + } + for (morematch = maxmatch + 1; morematch <= DUPINF + 1; morematch++) + { + if (haspath[morematch]) + { + haspath = NULL; /* fail, there are nonconsecutive lengths */ + break; + } + } + + if (haspath != NULL) + { + /* + * Success, so record the info. Here we have a fine point: the + * path length from the pre state includes the pre-to-initial + * transition, so it's one more than the actually matched string + * length. (We avoided counting the final-to-post transition + * within checkmatchall_recurse, but not this one.) This is why + * checkmatchall_recurse allows one more level of path length than + * might seem necessary. This decrement also takes care of + * converting checkmatchall_recurse's definition of "infinity" as + * "DUPINF+1" to our normal representation as "DUPINF". + */ + assert(minmatch > 0); /* else pre and post states were adjacent */ + nfa->minmatchall = minmatch - 1; + nfa->maxmatchall = maxmatch - 1; + nfa->flags |= MATCHALL; + } } - for (morematch = maxmatch + 1; morematch <= DUPINF; morematch++) + + /* Clean up */ + for (i = 0; i < nfa->nstates; i++) { - if (hasmatch[morematch]) - return; /* fail, there are nonconsecutive lengths */ + if (haspaths[i] != NULL) + FREE(haspaths[i]); } - - /* Success, so record the info */ - nfa->minmatchall = minmatch; - nfa->maxmatchall = maxmatch; - nfa->flags |= MATCHALL; + FREE(haspaths); } /* * checkmatchall_recurse - recursive search for checkmatchall * - * s is the current state - * foundloop is true if any predecessor state has a loop-to-self - * depth is the current recursion depth (starting at -1) - * hasmatch[] is the output area for recording feasible match lengths + * s is the state to be examined in this recursion level. + * haspaths[] is an array of per-state exit path length arrays. + * + * We return true if the search was performed successfully, false if + * we had to fail because of multi-state loops or other internal reasons. + * (Because "dead" states that can't reach the post state have been + * eliminated, and we already verified that only RAINBOW and matching + * pseudocolor arcs exist, every state should have RAINBOW path(s) to + * the post state. Hence we take a false result from recursive calls + * as meaning that we'd better fail altogether, not just that that + * particular state can't reach the post state.) * - * We return true if there is at least one all-RAINBOW path to the "post" - * state and no non-matchall paths; otherwise false. Note we assume that - * any dead-end paths have already been removed, else we might return - * false unnecessarily. + * On success, we store a malloc'd result array in haspaths[s->no], + * showing the possible path lengths from s to the post state. + * Each state's haspath[] array is of length DUPINF+2. The entries from + * k = 0 to DUPINF are true if there is an all-RAINBOW path of length k + * from this state to the string end. haspath[DUPINF+1] is true if all + * path lengths >= DUPINF+1 are possible. (Situations that cannot be + * represented under these rules cause failure.) + * + * checkmatchall is responsible for eventually freeing the haspath[] arrays. */ static bool -checkmatchall_recurse(struct nfa *nfa, struct state *s, - bool foundloop, int depth, - bool *hasmatch) +checkmatchall_recurse(struct nfa *nfa, struct state *s, bool **haspaths) { bool result = false; + bool foundloop = false; + bool *haspath; struct arc *a; /* @@ -3131,61 +3224,20 @@ checkmatchall_recurse(struct nfa *nfa, struct state *s, if (STACK_TOO_DEEP(nfa->v->re)) return false; - /* - * Likewise, if we get to a depth too large to represent correctly in - * maxmatchall, fail quietly. - */ - if (depth >= DUPINF) - return false; - - /* - * Scan the outarcs to detect cases we can't handle, and to see if there - * is a loop-to-self here. We need to know about any such loop before we - * recurse, so it's hard to avoid making two passes over the outarcs. In - * any case, checking for showstoppers before we recurse is probably best. - */ - for (a = s->outs; a != NULL; a = a->outchain) + /* In case the search takes a long time, check for cancel */ + if (CANCEL_REQUESTED(nfa->v->re)) { - if (a->type != PLAIN) - return false; /* any LACONs make it non-matchall */ - if (a->co != RAINBOW) - { - if (nfa->cm->cd[a->co].flags & PSEUDO) - { - /* - * Pseudocolor arc: verify it's in a valid place (this seems - * quite unlikely to fail, but let's be sure). - */ - if (s == nfa->pre && - (a->co == nfa->bos[0] || a->co == nfa->bos[1])) - /* okay BOS/BOL arc */ ; - else if (a->to == nfa->post && - (a->co == nfa->eos[0] || a->co == nfa->eos[1])) - /* okay EOS/EOL arc */ ; - else - return false; /* unexpected pseudocolor arc */ - /* We'll finish checking these arcs after the recursion */ - continue; - } - return false; /* any other color makes it non-matchall */ - } - if (a->to == s) - { - /* - * We found a cycle of length 1, so remember that to pass down to - * successor states. (It doesn't matter if there was also such a - * loop at a predecessor state.) - */ - foundloop = true; - } - else if (a->to->tmp) - { - /* We found a cycle of length > 1, so fail. */ - return false; - } + NERR(REG_CANCEL); + return false; } - /* We need to recurse, so mark state as under consideration */ + /* Create a haspath array for this state */ + haspath = (bool *) MALLOC((DUPINF + 2) * sizeof(bool)); + if (haspath == NULL) + return false; /* again, treat as non-matchall */ + memset(haspath, 0, (DUPINF + 2) * sizeof(bool)); + + /* Mark this state as being visited */ assert(s->tmp == NULL); s->tmp = s; @@ -3197,95 +3249,202 @@ checkmatchall_recurse(struct nfa *nfa, struct state *s, { /* We found an all-RAINBOW path to the post state */ result = true; - /* ... which should not be adjacent to the pre state */ - if (depth < 0) + + /* + * Mark this state as being zero steps away from the string end + * (the transition to the post state isn't counted). + */ + haspath[0] = true; + } + else if (a->to == s) + { + /* We found a cycle of length 1, which we'll deal with below. */ + foundloop = true; + } + else if (a->to->tmp != NULL) + { + /* It's busy, so we found a cycle of length > 1, so fail. */ + result = false; + break; + } + else + { + /* Consider paths forward through this to-state. */ + bool *nexthaspath; + int i; + + /* If to-state was not already visited, recurse */ + if (haspaths[a->to->no] == NULL) { - NERR(REG_ASSERT); - return false; + result = checkmatchall_recurse(nfa, a->to, haspaths); + /* Fail if any recursive path fails */ + if (!result) + break; } - /* Record potential match lengths */ - hasmatch[depth] = true; - if (foundloop) + else { - /* A predecessor loop makes all larger lengths match, too */ - int i; + /* The previous visit must have found path(s) to the end */ + result = true; + } + assert(a->to->tmp == NULL); + nexthaspath = haspaths[a->to->no]; + assert(nexthaspath != NULL); - for (i = depth + 1; i <= DUPINF; i++) - hasmatch[i] = true; + /* + * Now, for every path of length i from a->to to the string end, + * there is a path of length i + 1 from s to the string end. + */ + if (nexthaspath[DUPINF] != nexthaspath[DUPINF + 1]) + { + /* + * a->to has a path of length exactly DUPINF, but not longer; + * or it has paths of all lengths > DUPINF but not one of + * exactly that length. In either case, we cannot represent + * the possible path lengths from s correctly, so fail. + */ + result = false; + break; } + /* Merge knowledge of these path lengths into what we have */ + for (i = 0; i < DUPINF; i++) + haspath[i + 1] |= nexthaspath[i]; + /* Infinity + 1 is still infinity */ + haspath[DUPINF + 1] |= nexthaspath[DUPINF + 1]; } - else if (a->to != s) + } + + if (result && foundloop) + { + /* + * If there is a length-1 loop at this state, then find the shortest + * known path length to the end. The loop means that every larger + * path length is possible, too. (It doesn't matter whether any of + * the longer lengths were already known possible.) + */ + int i; + + for (i = 0; i <= DUPINF; i++) { - /* This is a new path forward; recurse to investigate */ - result = checkmatchall_recurse(nfa, a->to, - foundloop, depth + 1, - hasmatch); - /* Fail if any recursive path fails */ - if (!result) + if (haspath[i]) break; } + for (i++; i <= DUPINF + 1; i++) + haspath[i] = true; } + /* Report out the completed path length map */ + assert(s->no < nfa->nstates); + assert(haspaths[s->no] == NULL); + haspaths[s->no] = haspath; + + /* Mark state no longer busy */ s->tmp = NULL; + return result; } /* * check_out_colors_match - subroutine for checkmatchall * - * Check if every s outarc of color co1 has a matching outarc of color co2. - * (checkmatchall_recurse already verified that all of the outarcs are PLAIN, - * so we need not examine arc types here. Also, since it verified that there - * are only RAINBOW and pseudocolor arcs, there shouldn't be enough arcs for - * this brute-force O(N^2) implementation to cause problems.) + * Check whether the set of states reachable from s by arcs of color co1 + * is equivalent to the set reachable by arcs of color co2. + * checkmatchall already verified that all of the NFA's arcs are PLAIN, + * so we need not examine arc types here. */ static bool check_out_colors_match(struct state *s, color co1, color co2) { - struct arc *a1; - struct arc *a2; + bool result = true; + struct arc *a; - for (a1 = s->outs; a1 != NULL; a1 = a1->outchain) + /* + * To do this in linear time, we assume that the NFA contains no duplicate + * arcs. Run through the out-arcs, marking states reachable by arcs of + * color co1. Run through again, un-marking states reachable by arcs of + * color co2; if we see a not-marked state, we know this co2 arc is + * unmatched. Then run through again, checking for still-marked states, + * and in any case leaving all the tmp fields reset to NULL. + */ + for (a = s->outs; a != NULL; a = a->outchain) { - if (a1->co != co1) - continue; - for (a2 = s->outs; a2 != NULL; a2 = a2->outchain) + if (a->co == co1) { - if (a2->co == co2 && a2->to == a1->to) - break; + assert(a->to->tmp == NULL); + a->to->tmp = a->to; + } + } + for (a = s->outs; a != NULL; a = a->outchain) + { + if (a->co == co2) + { + if (a->to->tmp != NULL) + a->to->tmp = NULL; + else + result = false; /* unmatched co2 arc */ } - if (a2 == NULL) - return false; } - return true; + for (a = s->outs; a != NULL; a = a->outchain) + { + if (a->co == co1) + { + if (a->to->tmp != NULL) + { + result = false; /* unmatched co1 arc */ + a->to->tmp = NULL; + } + } + } + return result; } /* * check_in_colors_match - subroutine for checkmatchall * - * Check if every s inarc of color co1 has a matching inarc of color co2. - * (For paranoia's sake, ignore any non-PLAIN arcs here. But we're still - * not expecting very many arcs.) + * Check whether the set of states that can reach s by arcs of color co1 + * is equivalent to the set that can reach s by arcs of color co2. + * checkmatchall already verified that all of the NFA's arcs are PLAIN, + * so we need not examine arc types here. */ static bool check_in_colors_match(struct state *s, color co1, color co2) { - struct arc *a1; - struct arc *a2; + bool result = true; + struct arc *a; - for (a1 = s->ins; a1 != NULL; a1 = a1->inchain) + /* + * Identical algorithm to check_out_colors_match, except examine the + * from-states of s' inarcs. + */ + for (a = s->ins; a != NULL; a = a->inchain) { - if (a1->type != PLAIN || a1->co != co1) - continue; - for (a2 = s->ins; a2 != NULL; a2 = a2->inchain) + if (a->co == co1) { - if (a2->type == PLAIN && a2->co == co2 && a2->from == a1->from) - break; + assert(a->from->tmp == NULL); + a->from->tmp = a->from; } - if (a2 == NULL) - return false; } - return true; + for (a = s->ins; a != NULL; a = a->inchain) + { + if (a->co == co2) + { + if (a->from->tmp != NULL) + a->from->tmp = NULL; + else + result = false; /* unmatched co2 arc */ + } + } + for (a = s->ins; a != NULL; a = a->inchain) + { + if (a->co == co1) + { + if (a->from->tmp != NULL) + { + result = false; /* unmatched co1 arc */ + a->from->tmp = NULL; + } + } + } + return result; } /* diff --git a/src/backend/regex/regcomp.c b/src/backend/regex/regcomp.c index ba8dd8646459b..9f71177d31806 100644 --- a/src/backend/regex/regcomp.c +++ b/src/backend/regex/regcomp.c @@ -182,8 +182,7 @@ static void markreachable(struct nfa *, struct state *, struct state *, struct s static void markcanreach(struct nfa *, struct state *, struct state *, struct state *); static long analyze(struct nfa *); static void checkmatchall(struct nfa *); -static bool checkmatchall_recurse(struct nfa *, struct state *, - bool, int, bool *); +static bool checkmatchall_recurse(struct nfa *, struct state *, bool **); static bool check_out_colors_match(struct state *, color, color); static bool check_in_colors_match(struct state *, color, color); static void compact(struct nfa *, struct cnfa *); diff --git a/src/test/regress/expected/regex.out b/src/test/regress/expected/regex.out index 0923ad9b5b047..86477cc506c81 100644 --- a/src/test/regress/expected/regex.out +++ b/src/test/regress/expected/regex.out @@ -567,6 +567,43 @@ select 'a' ~ '()+\1'; t (1 row) +-- Add coverage for some cases in checkmatchall +select regexp_match('xy', '.|...'); + regexp_match +-------------- + {x} +(1 row) + +select regexp_match('xyz', '.|...'); + regexp_match +-------------- + {xyz} +(1 row) + +select regexp_match('xy', '.*'); + regexp_match +-------------- + {xy} +(1 row) + +select regexp_match('fooba', '(?:..)*'); + regexp_match +-------------- + {foob} +(1 row) + +select regexp_match('xyz', repeat('.', 260)); + regexp_match +-------------- + +(1 row) + +select regexp_match('foo', '(?:.|){99}'); + regexp_match +-------------- + {foo} +(1 row) + -- Error conditions select 'xyz' ~ 'x(\w)(?=\1)'; -- no backrefs in LACONs ERROR: invalid regular expression: invalid backreference number diff --git a/src/test/regress/sql/regex.sql b/src/test/regress/sql/regex.sql index a1742240c4bbb..b03a8d9ac220b 100644 --- a/src/test/regress/sql/regex.sql +++ b/src/test/regress/sql/regex.sql @@ -135,6 +135,14 @@ select 'a' ~ '.. ()|\1'; select 'a' ~ '()*\1'; select 'a' ~ '()+\1'; +-- Add coverage for some cases in checkmatchall +select regexp_match('xy', '.|...'); +select regexp_match('xyz', '.|...'); +select regexp_match('xy', '.*'); +select regexp_match('fooba', '(?:..)*'); +select regexp_match('xyz', repeat('.', 260)); +select regexp_match('foo', '(?:.|){99}'); + -- Error conditions select 'xyz' ~ 'x(\w)(?=\1)'; -- no backrefs in LACONs select 'xyz' ~ 'x(\w)(?=(\1))'; From 50529e5b4e39ad80a637ba0905277f9691eb4a15 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Mon, 3 May 2021 12:32:05 -0400 Subject: [PATCH 224/671] amcheck: Improve some confusing reports about TOAST problems. Don't phrase reports in terms of the number of tuples thus-far returned by the index scan, but rather in terms of the chunk_seq values found inside the tuples. Patch by me, reviewed by Mark Dilger. Discussion: http://postgr.es/m/CA+TgmoZUONCkdcdR778EKuE+f1r5Obieu63db2OgMPHaEvEPTQ@mail.gmail.com --- contrib/amcheck/verify_heapam.c | 75 ++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c index 9f159eb3dbd8d..36c1b791a22d9 100644 --- a/contrib/amcheck/verify_heapam.c +++ b/contrib/amcheck/verify_heapam.c @@ -150,8 +150,8 @@ typedef struct HeapCheckContext static void sanity_check_relation(Relation rel); static void check_tuple(HeapCheckContext *ctx); static void check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, - ToastedAttribute *ta, int32 chunkno, - int32 endchunk); + ToastedAttribute *ta, int32 *expected_chunk_seq, + uint32 extsize); static bool check_tuple_attribute(HeapCheckContext *ctx); static void check_toasted_attribute(HeapCheckContext *ctx, @@ -1159,23 +1159,25 @@ check_tuple_visibility(HeapCheckContext *ctx) * each toast tuple being checked against where we are in the sequence, as well * as each toast tuple having its varlena structure sanity checked. * - * Returns whether the toast tuple passed the corruption checks. + * On entry, *expected_chunk_seq should be the chunk_seq value that we expect + * to find in toasttup. On exit, it will be updated to the value the next call + * to this function should expect to see. */ static void check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, - ToastedAttribute *ta, int32 chunkno, int32 endchunk) + ToastedAttribute *ta, int32 *expected_chunk_seq, + uint32 extsize) { - int32 curchunk; + int32 chunk_seq; + int32 last_chunk_seq = (extsize - 1) / TOAST_MAX_CHUNK_SIZE; Pointer chunk; bool isnull; int32 chunksize; int32 expected_size; - /* - * Have a chunk, extract the sequence number and the data - */ - curchunk = DatumGetInt32(fastgetattr(toasttup, 2, - ctx->toast_rel->rd_att, &isnull)); + /* Sanity-check the sequence number. */ + chunk_seq = DatumGetInt32(fastgetattr(toasttup, 2, + ctx->toast_rel->rd_att, &isnull)); if (isnull) { report_toast_corruption(ctx, ta, @@ -1183,13 +1185,25 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, ta->toast_pointer.va_valueid)); return; } + if (chunk_seq != *expected_chunk_seq) + { + /* Either the TOAST index is corrupt, or we don't have all chunks. */ + report_toast_corruption(ctx, ta, + psprintf("toast value %u index scan returned chunk %d when expecting chunk %d", + ta->toast_pointer.va_valueid, + chunk_seq, *expected_chunk_seq)); + } + *expected_chunk_seq = chunk_seq + 1; + + /* Sanity-check the chunk data. */ chunk = DatumGetPointer(fastgetattr(toasttup, 3, ctx->toast_rel->rd_att, &isnull)); if (isnull) { report_toast_corruption(ctx, ta, psprintf("toast value %u chunk %d has null data", - ta->toast_pointer.va_valueid, chunkno)); + ta->toast_pointer.va_valueid, + chunk_seq)); return; } if (!VARATT_IS_EXTENDED(chunk)) @@ -1209,40 +1223,31 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, report_toast_corruption(ctx, ta, psprintf("toast value %u chunk %d has invalid varlena header %0x", ta->toast_pointer.va_valueid, - chunkno, header)); + chunk_seq, header)); return; } /* * Some checks on the data we've found */ - if (curchunk != chunkno) - { - report_toast_corruption(ctx, ta, - psprintf("toast value %u chunk %d has sequence number %d, but expected sequence number %d", - ta->toast_pointer.va_valueid, - chunkno, curchunk, chunkno)); - return; - } - if (chunkno > endchunk) + if (chunk_seq > last_chunk_seq) { report_toast_corruption(ctx, ta, psprintf("toast value %u chunk %d follows last expected chunk %d", ta->toast_pointer.va_valueid, - chunkno, endchunk)); + chunk_seq, last_chunk_seq)); return; } - expected_size = curchunk < endchunk ? TOAST_MAX_CHUNK_SIZE - : VARATT_EXTERNAL_GET_EXTSIZE(ta->toast_pointer) - (endchunk * TOAST_MAX_CHUNK_SIZE); + expected_size = chunk_seq < last_chunk_seq ? TOAST_MAX_CHUNK_SIZE + : extsize - (last_chunk_seq * TOAST_MAX_CHUNK_SIZE); if (chunksize != expected_size) report_toast_corruption(ctx, ta, psprintf("toast value %u chunk %d has size %u, but expected size %u", ta->toast_pointer.va_valueid, - chunkno, chunksize, expected_size)); + chunk_seq, chunksize, expected_size)); } - /* * Check the current attribute as tracked in ctx, recording any corruption * found in ctx->tupstore. @@ -1436,10 +1441,12 @@ check_toasted_attribute(HeapCheckContext *ctx, ToastedAttribute *ta) SysScanDesc toastscan; bool found_toasttup; HeapTuple toasttup; - int32 chunkno; - int32 endchunk; + uint32 extsize; + int32 expected_chunk_seq = 0; + int32 last_chunk_seq; - endchunk = (VARATT_EXTERNAL_GET_EXTSIZE(ta->toast_pointer) - 1) / TOAST_MAX_CHUNK_SIZE; + extsize = VARATT_EXTERNAL_GET_EXTSIZE(ta->toast_pointer); + last_chunk_seq = (extsize - 1) / TOAST_MAX_CHUNK_SIZE; /* * Setup a scan key to find chunks in toast table with matching va_valueid @@ -1458,15 +1465,13 @@ check_toasted_attribute(HeapCheckContext *ctx, ToastedAttribute *ta) ctx->valid_toast_index, &SnapshotToast, 1, &toastkey); - chunkno = 0; found_toasttup = false; while ((toasttup = systable_getnext_ordered(toastscan, ForwardScanDirection)) != NULL) { found_toasttup = true; - check_toast_tuple(toasttup, ctx, ta, chunkno, endchunk); - chunkno++; + check_toast_tuple(toasttup, ctx, ta, &expected_chunk_seq, extsize); } systable_endscan_ordered(toastscan); @@ -1474,11 +1479,11 @@ check_toasted_attribute(HeapCheckContext *ctx, ToastedAttribute *ta) report_toast_corruption(ctx, ta, psprintf("toast value %u not found in toast table", ta->toast_pointer.va_valueid)); - else if (chunkno != (endchunk + 1)) + else if (expected_chunk_seq <= last_chunk_seq) report_toast_corruption(ctx, ta, - psprintf("toast value %u was expected to end at chunk %d, but ended at chunk %d", + psprintf("toast value %u was expected to end at chunk %d, but ended while expecting chunk %d", ta->toast_pointer.va_valueid, - (endchunk + 1), chunkno)); + last_chunk_seq, expected_chunk_seq)); } /* From 5df6aeab42279eaea8e9ff92744645b155c85b03 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 3 May 2021 20:14:03 +0200 Subject: [PATCH 225/671] doc: Add index entry for "multirange type" Before now, looking up "multirange" in the index only led to the multirange() function. To make this more useful, also add an entry pointing to the range types section. --- doc/src/sgml/func.sgml | 2 +- doc/src/sgml/rangetypes.sgml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index b9b25e03a237f..5ae8abff0ce4c 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -19206,7 +19206,7 @@ SELECT NULLIF(value, '(none)') ... - multirange + multirange (function) multirange ( anyrange ) anymultirange diff --git a/doc/src/sgml/rangetypes.sgml b/doc/src/sgml/rangetypes.sgml index 91e353d4fdb91..92ea0e83dab7b 100644 --- a/doc/src/sgml/rangetypes.sgml +++ b/doc/src/sgml/rangetypes.sgml @@ -7,6 +7,10 @@ range type + + multirange type + + Range types are data types representing a range of values of some element type (called the range's subtype). From f7a97b6ec31f3f57a6154d0039c4de81ad517064 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 3 May 2021 14:59:30 -0400 Subject: [PATCH 226/671] Update query_id computation Properly fix: - the "ONLY" in FROM [ONLY] isn't hashed - the agglevelsup field in GROUPING isn't hashed - WITH TIES not being hashed (new in PG 13) - "DISTINCT" in "GROUP BY [DISTINCT]" isn't hashed (new in PG 14) Reported-by: Julien Rouhaud Discussion: https://postgr.es/m/20210425081119.ulyzxqz23ueh3wuj@nol --- .../expected/pg_stat_statements.out | 151 ++++++++++++++++++ .../sql/pg_stat_statements.sql | 52 ++++++ src/backend/utils/misc/queryjumble.c | 4 + 3 files changed, 207 insertions(+) diff --git a/contrib/pg_stat_statements/expected/pg_stat_statements.out b/contrib/pg_stat_statements/expected/pg_stat_statements.out index fb97f6873700c..40b5109b55963 100644 --- a/contrib/pg_stat_statements/expected/pg_stat_statements.out +++ b/contrib/pg_stat_statements/expected/pg_stat_statements.out @@ -916,4 +916,155 @@ SELECT query, toplevel, plans, calls FROM pg_stat_statements WHERE query LIKE '% $$ LANGUAGE plpgsql | | | (3 rows) +-- FROM [ONLY] +CREATE TABLE tbl_inh(id integer); +CREATE TABLE tbl_inh_1() INHERITS (tbl_inh); +INSERT INTO tbl_inh_1 SELECT 1; +SELECT * FROM tbl_inh; + id +---- + 1 +(1 row) + +SELECT * FROM ONLY tbl_inh; + id +---- +(0 rows) + +SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%FROM%tbl_inh%'; + count +------- + 2 +(1 row) + +-- WITH TIES +CREATE TABLE limitoption AS SELECT 0 AS val FROM generate_series(1, 10); +SELECT * +FROM limitoption +WHERE val < 2 +ORDER BY val +FETCH FIRST 2 ROWS WITH TIES; + val +----- + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 +(10 rows) + +SELECT * +FROM limitoption +WHERE val < 2 +ORDER BY val +FETCH FIRST 2 ROW ONLY; + val +----- + 0 + 0 +(2 rows) + +SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%FETCH FIRST%'; + count +------- + 2 +(1 row) + +-- GROUP BY [DISTINCT] +SELECT a, b, c +FROM (VALUES (1, 2, 3), (4, NULL, 6), (7, 8, 9)) AS t (a, b, c) +GROUP BY ROLLUP(a, b), rollup(a, c) +ORDER BY a, b, c; + a | b | c +---+---+--- + 1 | 2 | 3 + 1 | 2 | + 1 | 2 | + 1 | | 3 + 1 | | 3 + 1 | | + 1 | | + 1 | | + 4 | | 6 + 4 | | 6 + 4 | | 6 + 4 | | + 4 | | + 4 | | + 4 | | + 4 | | + 7 | 8 | 9 + 7 | 8 | + 7 | 8 | + 7 | | 9 + 7 | | 9 + 7 | | + 7 | | + 7 | | + | | +(25 rows) + +SELECT a, b, c +FROM (VALUES (1, 2, 3), (4, NULL, 6), (7, 8, 9)) AS t (a, b, c) +GROUP BY DISTINCT ROLLUP(a, b), rollup(a, c) +ORDER BY a, b, c; + a | b | c +---+---+--- + 1 | 2 | 3 + 1 | 2 | + 1 | | 3 + 1 | | + 4 | | 6 + 4 | | 6 + 4 | | + 4 | | + 7 | 8 | 9 + 7 | 8 | + 7 | | 9 + 7 | | + | | +(13 rows) + +SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%GROUP BY%ROLLUP%'; + count +------- + 2 +(1 row) + +-- GROUPING SET agglevelsup +SELECT ( + SELECT ( + SELECT GROUPING(a,b) FROM (VALUES (1)) v2(c) + ) FROM (VALUES (1,2)) v1(a,b) GROUP BY (a,b) +) FROM (VALUES(6,7)) v3(e,f) GROUP BY ROLLUP(e,f); + grouping +---------- + 0 + 0 + 0 +(3 rows) + +SELECT ( + SELECT ( + SELECT GROUPING(e,f) FROM (VALUES (1)) v2(c) + ) FROM (VALUES (1,2)) v1(a,b) GROUP BY (a,b) +) FROM (VALUES(6,7)) v3(e,f) GROUP BY ROLLUP(e,f); + grouping +---------- + 3 + 0 + 1 +(3 rows) + +SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%SELECT GROUPING%'; + count +------- + 2 +(1 row) + DROP EXTENSION pg_stat_statements; diff --git a/contrib/pg_stat_statements/sql/pg_stat_statements.sql b/contrib/pg_stat_statements/sql/pg_stat_statements.sql index 56d8526ccfa43..bc3b6493e6bc1 100644 --- a/contrib/pg_stat_statements/sql/pg_stat_statements.sql +++ b/contrib/pg_stat_statements/sql/pg_stat_statements.sql @@ -385,4 +385,56 @@ END; $$ LANGUAGE plpgsql; SELECT query, toplevel, plans, calls FROM pg_stat_statements WHERE query LIKE '%DELETE%' ORDER BY query COLLATE "C", toplevel; +-- FROM [ONLY] +CREATE TABLE tbl_inh(id integer); +CREATE TABLE tbl_inh_1() INHERITS (tbl_inh); +INSERT INTO tbl_inh_1 SELECT 1; + +SELECT * FROM tbl_inh; +SELECT * FROM ONLY tbl_inh; + +SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%FROM%tbl_inh%'; + +-- WITH TIES +CREATE TABLE limitoption AS SELECT 0 AS val FROM generate_series(1, 10); +SELECT * +FROM limitoption +WHERE val < 2 +ORDER BY val +FETCH FIRST 2 ROWS WITH TIES; + +SELECT * +FROM limitoption +WHERE val < 2 +ORDER BY val +FETCH FIRST 2 ROW ONLY; + +SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%FETCH FIRST%'; + +-- GROUP BY [DISTINCT] +SELECT a, b, c +FROM (VALUES (1, 2, 3), (4, NULL, 6), (7, 8, 9)) AS t (a, b, c) +GROUP BY ROLLUP(a, b), rollup(a, c) +ORDER BY a, b, c; +SELECT a, b, c +FROM (VALUES (1, 2, 3), (4, NULL, 6), (7, 8, 9)) AS t (a, b, c) +GROUP BY DISTINCT ROLLUP(a, b), rollup(a, c) +ORDER BY a, b, c; + +SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%GROUP BY%ROLLUP%'; + +-- GROUPING SET agglevelsup +SELECT ( + SELECT ( + SELECT GROUPING(a,b) FROM (VALUES (1)) v2(c) + ) FROM (VALUES (1,2)) v1(a,b) GROUP BY (a,b) +) FROM (VALUES(6,7)) v3(e,f) GROUP BY ROLLUP(e,f); +SELECT ( + SELECT ( + SELECT GROUPING(e,f) FROM (VALUES (1)) v2(c) + ) FROM (VALUES (1,2)) v1(a,b) GROUP BY (a,b) +) FROM (VALUES(6,7)) v3(e,f) GROUP BY ROLLUP(e,f); + +SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%SELECT GROUPING%'; + DROP EXTENSION pg_stat_statements; diff --git a/src/backend/utils/misc/queryjumble.c b/src/backend/utils/misc/queryjumble.c index afd6d76cebe87..1bb9fe20ea822 100644 --- a/src/backend/utils/misc/queryjumble.c +++ b/src/backend/utils/misc/queryjumble.c @@ -230,6 +230,7 @@ JumbleQueryInternal(JumbleState *jstate, Query *query) JumbleExpr(jstate, (Node *) query->onConflict); JumbleExpr(jstate, (Node *) query->returningList); JumbleExpr(jstate, (Node *) query->groupClause); + APP_JUMB(query->groupDistinct); JumbleExpr(jstate, (Node *) query->groupingSets); JumbleExpr(jstate, query->havingQual); JumbleExpr(jstate, (Node *) query->windowClause); @@ -237,6 +238,7 @@ JumbleQueryInternal(JumbleState *jstate, Query *query) JumbleExpr(jstate, (Node *) query->sortClause); JumbleExpr(jstate, query->limitOffset); JumbleExpr(jstate, query->limitCount); + APP_JUMB(query->limitOption); JumbleRowMarks(jstate, query->rowMarks); JumbleExpr(jstate, query->setOperations); } @@ -259,6 +261,7 @@ JumbleRangeTable(JumbleState *jstate, List *rtable) case RTE_RELATION: APP_JUMB(rte->relid); JumbleExpr(jstate, (Node *) rte->tablesample); + APP_JUMB(rte->inh); break; case RTE_SUBQUERY: JumbleQueryInternal(jstate, rte->subquery); @@ -399,6 +402,7 @@ JumbleExpr(JumbleState *jstate, Node *node) GroupingFunc *grpnode = (GroupingFunc *) node; JumbleExpr(jstate, (Node *) grpnode->refs); + APP_JUMB(grpnode->agglevelsup); } break; case T_WindowFunc: From ae9492a61bbf575e2862cf9323c7f02806382093 Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Tue, 4 May 2021 03:56:16 +0300 Subject: [PATCH 227/671] Remove mention of the version number from pg_trgm docs We don't usually mention the version number in similar situations. So, neither mention it here. Reported-by: Bruce Momjian Discussion: https://postgr.es/m/20210503234914.GO6180%40momjian.us --- doc/src/sgml/pgtrgm.sgml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/pgtrgm.sgml b/doc/src/sgml/pgtrgm.sgml index ca97c7ce00a9d..7e292822553e5 100644 --- a/doc/src/sgml/pgtrgm.sgml +++ b/doc/src/sgml/pgtrgm.sgml @@ -415,9 +415,8 @@ the purpose of very fast similarity searches. These index types support the above-described similarity operators, and additionally support trigram-based index searches for LIKE, ILIKE, - ~ and ~* queries. Beginning in - PostgreSQL 14, these indexes also support - the equality operator (inequality operators are not supported). + ~, ~* and = queries. + Inequality operators are not supported. Note that those indexes may not be as efficient as regular B-tree indexes for equality operator. From a970edbed306354b0079bdcdc2fc74312122ad89 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 4 May 2021 11:45:37 +0200 Subject: [PATCH 228/671] Fix ALTER TABLE / INHERIT with generated columns When running ALTER TABLE t2 INHERIT t1, we must check that columns in t2 that correspond to a generated column in t1 are also generated and have the same generation expression. Otherwise, this would allow creating setups that a normal CREATE TABLE sequence would not allow. Discussion: https://www.postgresql.org/message-id/22de27f6-7096-8d96-4619-7b882932ca25@2ndquadrant.com --- src/backend/commands/tablecmds.c | 60 +++++++++++++++++++++++++ src/test/regress/expected/generated.out | 21 +++++++++ src/test/regress/sql/generated.sql | 14 ++++++ 3 files changed, 95 insertions(+) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index d9ba87a2a3a39..4142ada820ff4 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -14381,6 +14381,66 @@ MergeAttributesIntoExisting(Relation child_rel, Relation parent_rel) errmsg("column \"%s\" in child table must be marked NOT NULL", attributeName))); + /* + * If parent column is generated, child column must be, too. + */ + if (attribute->attgenerated && !childatt->attgenerated) + ereport(ERROR, + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("column \"%s\" in child table must be a generated column", + attributeName))); + + /* + * Check that both generation expressions match. + * + * The test we apply is to see whether they reverse-compile to the + * same source string. This insulates us from issues like whether + * attributes have the same physical column numbers in parent and + * child relations. (See also constraints_equivalent().) + */ + if (attribute->attgenerated && childatt->attgenerated) + { + TupleConstr *child_constr = child_rel->rd_att->constr; + TupleConstr *parent_constr = parent_rel->rd_att->constr; + char *child_expr = NULL; + char *parent_expr = NULL; + + Assert(child_constr != NULL); + Assert(parent_constr != NULL); + + for (int i = 0; i < child_constr->num_defval; i++) + { + if (child_constr->defval[i].adnum == childatt->attnum) + { + child_expr = + TextDatumGetCString(DirectFunctionCall2(pg_get_expr, + CStringGetTextDatum(child_constr->defval[i].adbin), + ObjectIdGetDatum(child_rel->rd_id))); + break; + } + } + Assert(child_expr != NULL); + + for (int i = 0; i < parent_constr->num_defval; i++) + { + if (parent_constr->defval[i].adnum == attribute->attnum) + { + parent_expr = + TextDatumGetCString(DirectFunctionCall2(pg_get_expr, + CStringGetTextDatum(parent_constr->defval[i].adbin), + ObjectIdGetDatum(parent_rel->rd_id))); + break; + } + } + Assert(parent_expr != NULL); + + if (strcmp(child_expr, parent_expr) != 0) + ereport(ERROR, + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("column \"%s\" in child table has a conflicting generation expression", + attributeName))); + } + /* * OK, bump the child column's inheritance count. (If we fail * later on, this change will just roll back.) diff --git a/src/test/regress/expected/generated.out b/src/test/regress/expected/generated.out index ca721d38bf40c..675773f0c1f28 100644 --- a/src/test/regress/expected/generated.out +++ b/src/test/regress/expected/generated.out @@ -281,6 +281,17 @@ SELECT * FROM gtest_normal; 2 | 4 (2 rows) +CREATE TABLE gtest_normal_child2 (a int, b int GENERATED ALWAYS AS (a * 3) STORED); +ALTER TABLE gtest_normal_child2 INHERIT gtest_normal; +INSERT INTO gtest_normal_child2 (a) VALUES (3); +SELECT * FROM gtest_normal; + a | b +---+--- + 1 | + 2 | 4 + 3 | 9 +(3 rows) + -- test inheritance mismatches between parent and child CREATE TABLE gtestx (x int, b int GENERATED ALWAYS AS (a * 22) STORED) INHERITS (gtest1); -- error NOTICE: merging column "b" with inherited definition @@ -292,6 +303,16 @@ ERROR: column "b" inherits from generated column but specifies default CREATE TABLE gtestx (x int, b int GENERATED ALWAYS AS IDENTITY) INHERITS (gtest1); -- error NOTICE: merging column "b" with inherited definition ERROR: column "b" inherits from generated column but specifies identity +CREATE TABLE gtestxx_1 (a int NOT NULL, b int); +ALTER TABLE gtestxx_1 INHERIT gtest1; -- error +ERROR: column "b" in child table must be a generated column +CREATE TABLE gtestxx_2 (a int NOT NULL, b int GENERATED ALWAYS AS (a * 22) STORED); +ALTER TABLE gtestxx_2 INHERIT gtest1; -- error +ERROR: column "b" in child table has a conflicting generation expression +CREATE TABLE gtestxx_3 (a int NOT NULL, b int GENERATED ALWAYS AS (a * 2) STORED); +ALTER TABLE gtestxx_3 INHERIT gtest1; -- ok +CREATE TABLE gtestxx_4 (b int GENERATED ALWAYS AS (a * 2) STORED, a int NOT NULL); +ALTER TABLE gtestxx_4 INHERIT gtest1; -- ok -- test multiple inheritance mismatches CREATE TABLE gtesty (x int, b int); CREATE TABLE gtest1_2 () INHERITS (gtest1, gtesty); -- error diff --git a/src/test/regress/sql/generated.sql b/src/test/regress/sql/generated.sql index bd2b0bfaaadad..63251c443a968 100644 --- a/src/test/regress/sql/generated.sql +++ b/src/test/regress/sql/generated.sql @@ -113,11 +113,25 @@ INSERT INTO gtest_normal (a) VALUES (1); INSERT INTO gtest_normal_child (a) VALUES (2); SELECT * FROM gtest_normal; +CREATE TABLE gtest_normal_child2 (a int, b int GENERATED ALWAYS AS (a * 3) STORED); +ALTER TABLE gtest_normal_child2 INHERIT gtest_normal; +INSERT INTO gtest_normal_child2 (a) VALUES (3); +SELECT * FROM gtest_normal; + -- test inheritance mismatches between parent and child CREATE TABLE gtestx (x int, b int GENERATED ALWAYS AS (a * 22) STORED) INHERITS (gtest1); -- error CREATE TABLE gtestx (x int, b int DEFAULT 10) INHERITS (gtest1); -- error CREATE TABLE gtestx (x int, b int GENERATED ALWAYS AS IDENTITY) INHERITS (gtest1); -- error +CREATE TABLE gtestxx_1 (a int NOT NULL, b int); +ALTER TABLE gtestxx_1 INHERIT gtest1; -- error +CREATE TABLE gtestxx_2 (a int NOT NULL, b int GENERATED ALWAYS AS (a * 22) STORED); +ALTER TABLE gtestxx_2 INHERIT gtest1; -- error +CREATE TABLE gtestxx_3 (a int NOT NULL, b int GENERATED ALWAYS AS (a * 2) STORED); +ALTER TABLE gtestxx_3 INHERIT gtest1; -- ok +CREATE TABLE gtestxx_4 (b int GENERATED ALWAYS AS (a * 2) STORED, a int NOT NULL); +ALTER TABLE gtestxx_4 INHERIT gtest1; -- ok + -- test multiple inheritance mismatches CREATE TABLE gtesty (x int, b int); CREATE TABLE gtest1_2 () INHERITS (gtest1, gtesty); -- error From feb270d1005f3d7b3705dec9e04c9a205750ea97 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 4 May 2021 14:03:54 +0200 Subject: [PATCH 229/671] pg_dump: Fix dump of generated columns in partitions The previous fix for dumping of inherited generated columns (0bf83648a52df96f7c8677edbbdf141bfa0cf32b) must not be applied to partitions, since, unlike normal inherited tables, they are always dumped separately and reattached. Reported-by: Santosh Udupi Discussion: https://www.postgresql.org/message-id/flat/CACLRvHZ4a-%2BSM_159%2BtcrHdEqxFrG%3DW4gwTRnwf7Oj0UNj5R2A%40mail.gmail.com --- src/bin/pg_dump/common.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c index 1a261a5545668..7fcd2014e7389 100644 --- a/src/bin/pg_dump/common.c +++ b/src/bin/pg_dump/common.c @@ -480,9 +480,11 @@ flagInhIndexes(Archive *fout, TableInfo tblinfo[], int numTables) * - Detect child columns that have a generation expression when their parents * also have one. Generation expressions are always inherited, so there is * no need to set them again in child tables, and there is no syntax for it - * either. (Exception: In binary upgrade mode we dump them because - * inherited tables are recreated standalone first and then reattached to - * the parent.) + * either. Exceptions: If it's a partition or we are in binary upgrade + * mode, we dump them because in those cases inherited tables are recreated + * standalone first and then reattached to the parent. (See also the logic + * in dumpTableSchema().) In that situation, the generation expressions + * must match the parent, enforced by ALTER TABLE. * * modifies tblinfo */ @@ -585,7 +587,7 @@ flagInhAttrs(DumpOptions *dopt, TableInfo *tblinfo, int numTables) } /* Remove generation expression from child */ - if (foundGenerated && !dopt->binary_upgrade) + if (foundGenerated && !tbinfo->ispartition && !dopt->binary_upgrade) tbinfo->attrdefs[j] = NULL; } } From c98a6d7887ea6588b4e9797903182312a2b46f67 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 4 May 2021 15:45:13 +0200 Subject: [PATCH 230/671] doc: Fix typos --- doc/src/sgml/ecpg.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/ecpg.sgml b/doc/src/sgml/ecpg.sgml index e67f3e0bf3fa6..86c078e17de23 100644 --- a/doc/src/sgml/ecpg.sgml +++ b/doc/src/sgml/ecpg.sgml @@ -371,14 +371,14 @@ EXEC SQL PREPARE statement-name FROM :dy EXEC SQL BEGIN DECLARE SECTION; char dbname[128]; -char *dym_sql = "SELECT current_database()"; +char *dyn_sql = "SELECT current_database()"; EXEC SQL END DECLARE SECTION; int main(){ EXEC SQL CONNECT TO postgres AS con1; EXEC SQL CONNECT TO testdb AS con2; EXEC SQL AT con1 DECLARE stmt STATEMENT; - EXEC SQL PREPARE stmt FROM :dym_sql; + EXEC SQL PREPARE stmt FROM :dyn_sql; EXEC SQL EXECUTE stmt INTO :dbname; printf("%s\n", dbname); From e798d095da3a4a4bb5c50bb3dff886f07ef52f55 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Tue, 4 May 2021 10:09:12 -0400 Subject: [PATCH 231/671] Fix OID passed to object-alter hook during ALTER CONSTRAINT The OID of the constraint is used instead of the OID of the trigger -- an easy mistake to make. Apparently the object-alter hooks are not very well tested :-( Backpatch to 12, where this typo was introduced by 578b229718e8 Discussion: https://postgr.es/m/20210503231633.GA6994@alvherre.pgsql --- src/backend/commands/tablecmds.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 4142ada820ff4..a992f1bef8028 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -10319,7 +10319,7 @@ ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd, copy_tg->tginitdeferred = cmdcon->initdeferred; CatalogTupleUpdate(tgrel, ©Tuple->t_self, copyTuple); - InvokeObjectPostAlterHook(TriggerRelationId, currcon->oid, 0); + InvokeObjectPostAlterHook(TriggerRelationId, tgform->oid, 0); heap_freetuple(copyTuple); } From 1273a15bf91fa322915e32d3b6dc6ec916397268 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 4 May 2021 13:36:26 -0400 Subject: [PATCH 232/671] Disable cache clobber to avoid breaking postgres_fdw termination test. Commit 93f414614 improved a pre-existing test case so that it would show whether or not termination of the "remote" worker process happened. This soon exposed that, when debug_invalidate_system_caches_always (nee CLOBBER_CACHE_ALWAYS) is enabled, no such termination occurs. That's because cache invalidation forces postgres_fdw connections to be dropped at end of transaction, so that there's no worker to terminate. There's a race condition as to whether the worker will manage to get out of the BackendStatusArray before we look, but at least on buildfarm member hyrax, it's failed twice in two attempts. Rather than re-lobotomizing the test, let's fix this by transiently disabling debug_invalidate_system_caches_always. (Hooray for that being just a GUC nowadays, rather than a compile-time option.) If this proves not to be enough to make the test stable, we can do the other thing instead. Discussion: https://postgr.es/m/3854538.1620081771@sss.pgh.pa.us --- contrib/postgres_fdw/expected/postgres_fdw.out | 13 ++++++++++--- contrib/postgres_fdw/sql/postgres_fdw.sql | 16 +++++++++++++--- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 8e1cc695081da..6f533c745d696 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -9204,6 +9204,12 @@ WARNING: there is no transaction in progress -- Change application_name of remote connection to special one -- so that we can easily terminate the connection later. ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check'); +-- If debug_invalidate_system_caches_always is active, it results in +-- dropping remote connections after every transaction, making it +-- impossible to test termination meaningfully. So turn that off +-- for this test. +SET debug_invalidate_system_caches_always = 0; +-- Make sure we have a remote connection. SELECT 1 FROM ft1 LIMIT 1; ?column? ---------- @@ -9227,9 +9233,8 @@ SELECT 1 FROM ft1 LIMIT 1; 1 (1 row) --- If the query detects the broken connection when starting new remote --- subtransaction, it doesn't reestablish new connection and should fail. --- The text of the error might vary across platforms, so don't show it. +-- If we detect the broken connection when starting a new remote +-- subtransaction, we should fail instead of establishing a new connection. -- Terminate the remote connection and wait for the termination to complete. SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity WHERE application_name = 'fdw_retry_check'; @@ -9239,11 +9244,13 @@ SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity (1 row) SAVEPOINT s; +-- The text of the error might vary across platforms, so only show SQLSTATE. \set VERBOSITY sqlstate SELECT 1 FROM ft1 LIMIT 1; -- should fail ERROR: 08006 \set VERBOSITY default COMMIT; +RESET debug_invalidate_system_caches_always; -- ============================================================================= -- test connection invalidation cases and postgres_fdw_get_connections function -- ============================================================================= diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index dcd36a9753ebd..000e2534fc8ab 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -2795,6 +2795,14 @@ ROLLBACK; -- Change application_name of remote connection to special one -- so that we can easily terminate the connection later. ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check'); + +-- If debug_invalidate_system_caches_always is active, it results in +-- dropping remote connections after every transaction, making it +-- impossible to test termination meaningfully. So turn that off +-- for this test. +SET debug_invalidate_system_caches_always = 0; + +-- Make sure we have a remote connection. SELECT 1 FROM ft1 LIMIT 1; -- Terminate the remote connection and wait for the termination to complete. @@ -2806,18 +2814,20 @@ SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity BEGIN; SELECT 1 FROM ft1 LIMIT 1; --- If the query detects the broken connection when starting new remote --- subtransaction, it doesn't reestablish new connection and should fail. --- The text of the error might vary across platforms, so don't show it. +-- If we detect the broken connection when starting a new remote +-- subtransaction, we should fail instead of establishing a new connection. -- Terminate the remote connection and wait for the termination to complete. SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity WHERE application_name = 'fdw_retry_check'; SAVEPOINT s; +-- The text of the error might vary across platforms, so only show SQLSTATE. \set VERBOSITY sqlstate SELECT 1 FROM ft1 LIMIT 1; -- should fail \set VERBOSITY default COMMIT; +RESET debug_invalidate_system_caches_always; + -- ============================================================================= -- test connection invalidation cases and postgres_fdw_get_connections function -- ============================================================================= From 38f36aad8c55c8f91e3fb8720fae1847c8fa0552 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 5 May 2021 08:18:22 +0200 Subject: [PATCH 233/671] GUC description improvements for clarity --- src/backend/utils/misc/guc.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index b130874bdc72c..f2c7c2486b088 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -2888,7 +2888,7 @@ static struct config_int ConfigureNamesInt[] = { {"wal_skip_threshold", PGC_USERSET, WAL_SETTINGS, - gettext_noop("Size of new file to fsync instead of writing WAL."), + gettext_noop("Minimum size of new file to fsync instead of writing WAL."), NULL, GUC_UNIT_KB }, @@ -3843,9 +3843,8 @@ static struct config_real ConfigureNamesReal[] = { {"log_transaction_sample_rate", PGC_SUSET, LOGGING_WHEN, - gettext_noop("Sets the fraction of transactions to log for new transactions."), - gettext_noop("Logs all statements from a fraction of transactions. " - "Use a value between 0.0 (never log) and 1.0 (log all " + gettext_noop("Sets the fraction of transactions from which to log all statements."), + gettext_noop("Use a value between 0.0 (never log) and 1.0 (log all " "statements for all transactions).") }, &log_xact_sample_rate, From f33a178a34809a2bae7a5f4c00984d87771f4204 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 5 May 2021 11:26:48 -0400 Subject: [PATCH 234/671] Doc: improve and centralize the documentation for OID alias types. Previously, a lot of information about type regclass existed only in the discussion of the sequence functions. Maybe that made sense in the beginning, because I think originally those were the only functions taking regclass. But it doesn't make sense anymore. Move that material to the "Object Identifier Types" section in datatype.sgml, generalize it to talk about the other reg* types as well, and add more examples. Per bug #16991 from Federico Caselli. Discussion: https://postgr.es/m/16991-bcaeaafa17e0a723@postgresql.org --- doc/src/sgml/datatype.sgml | 110 ++++++++++++++++++++++++++++++++----- doc/src/sgml/func.sgml | 56 +++---------------- 2 files changed, 102 insertions(+), 64 deletions(-) diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index 7c341c8e3fa6d..0e8ef958a93e1 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -4632,7 +4632,8 @@ INSERT INTO mytable VALUES(-1); -- fails PostgreSQL as primary keys for various system tables. Type oid represents an object identifier. There are also - several alias types for oid named regsomething. + several alias types for oid, each + named regsomething. shows an overview. @@ -4780,10 +4781,14 @@ SELECT * FROM pg_attribute - All of the OID alias types for objects grouped by namespace accept - schema-qualified names, and will + All of the OID alias types for objects that are grouped by namespace + accept schema-qualified names, and will display schema-qualified names on output if the object would not be found in the current search path without being qualified. + For example, myschema.mytable is acceptable input + for regclass (if there is such a table). That value + might be output as myschema.mytable, or + just mytable, depending on the current search path. The regproc and regoper alias types will only accept input names that are unique (not overloaded), so they are of limited use; for most uses regprocedure or @@ -4792,6 +4797,87 @@ SELECT * FROM pg_attribute operand. + + The input functions for these types allow whitespace between tokens, + and will fold upper-case letters to lower case, except within double + quotes; this is done to make the syntax rules similar to the way + object names are written in SQL. Conversely, the output functions + will use double quotes if needed to make the output be a valid SQL + identifier. For example, the OID of a function + named Foo (with upper case F) + taking two integer arguments could be entered as + ' "Foo" ( int, integer ) '::regprocedure. The + output would look like "Foo"(integer,integer). + Both the function name and the argument type names could be + schema-qualified, too. + + + + Many built-in PostgreSQL functions accept + the OID of a table, or another kind of database object, and for + convenience are declared as taking regclass (or the + appropriate OID alias type). This means you do not have to look up + the object's OID by hand, but can just enter its name as a string + literal. For example, the nextval(regclass) function + takes a sequence relation's OID, so you could call it like this: + +nextval('foo') operates on sequence foo +nextval('FOO') same as above +nextval('"Foo"') operates on sequence Foo +nextval('myschema.foo') operates on myschema.foo +nextval('"myschema".foo') same as above +nextval('foo') searches search path for foo + + + + + + When you write the argument of such a function as an unadorned + literal string, it becomes a constant of type regclass + (or the appropriate type). + Since this is really just an OID, it will track the originally + identified object despite later renaming, schema reassignment, + etc. This early binding behavior is usually desirable for + object references in column defaults and views. But sometimes you might + want late binding where the object reference is resolved + at run time. To get late-binding behavior, force the constant to be + stored as a text constant instead of regclass: + +nextval('foo'::text) foo is looked up at runtime + + The to_regclass() function and its siblings + can also be used to perform run-time lookups. See + . + + + + + Another practical example of use of regclass + is to look up the OID of a table listed in + the information_schema views, which don't supply + such OIDs directly. One might for example wish to call + the pg_relation_size() function, which requires + the table OID. Taking the above rules into account, the correct way + to do that is + +SELECT table_schema, table_name, + pg_relation_size((quote_ident(table_schema) || '.' || + quote_ident(table_name))::regclass) +FROM information_schema.tables +WHERE ... + + The quote_ident() function will take care of + double-quoting the identifiers where needed. The seemingly easier + +SELECT pg_relation_size(table_name) +FROM information_schema.tables +WHERE ... + + is not recommended, because it will fail for + tables that are outside your search path or have names that require + quoting. + + An additional property of most of the OID alias types is the creation of dependencies. If a @@ -4801,19 +4887,13 @@ SELECT * FROM pg_attribute expression nextval('my_seq'::regclass), PostgreSQL understands that the default expression depends on the sequence - my_seq; the system will not let the sequence be dropped - without first removing the default expression. - regrole is the only exception for the property. Constants of this - type are not allowed in such expressions. - - - - - The OID alias types do not completely follow transaction isolation - rules. The planner also treats them as simple constants, which may - result in sub-optimal planning. + my_seq, so the system will not let the sequence + be dropped without first removing the default expression. The + alternative of nextval('my_seq'::text) does not + create a dependency. + (regrole is an exception to this property. Constants of this + type are not allowed in stored expressions.) - Another identifier type used by the system is xid, or transaction diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 5ae8abff0ce4c..c60d98360ff89 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -14429,8 +14429,9 @@ SELECT xmltable.* table_to_xml maps the content of the named table, passed as parameter table. The regclass type accepts strings identifying tables using the - usual notation, including optional schema qualifications and - double quotes. query_to_xml executes the + usual notation, including optional schema qualification and + double quotes (see for details). + query_to_xml executes the query whose text is passed as parameter query and maps the result set. cursor_to_xml fetches the indicated number of @@ -17316,49 +17317,9 @@ SELECT setval('myseq', 42, false); Next nextvalregclass argument, which is simply the OID of the sequence in the pg_class system catalog. You do not have to look up the OID by hand, however, since the regclass data type's input - converter will do the work for you. Just write the sequence name enclosed - in single quotes so that it looks like a literal constant. For - compatibility with the handling of ordinary - SQL names, the string will be converted to lower case - unless it contains double quotes around the sequence name. Thus: - -nextval('foo') operates on sequence foo -nextval('FOO') operates on sequence foo -nextval('"Foo"') operates on sequence Foo - - The sequence name can be schema-qualified if necessary: - -nextval('myschema.foo') operates on myschema.foo -nextval('"myschema".foo') same as above -nextval('foo') searches search path for foo - - See for more information about - regclass. + converter will do the work for you. See + for details. - - - - When you write the argument of a sequence function as an unadorned - literal string, it becomes a constant of type regclass. - Since this is really just an OID, it will track the originally - identified sequence despite later renaming, schema reassignment, - etc. This early binding behavior is usually desirable for - sequence references in column defaults and views. But sometimes you might - want late binding where the sequence reference is resolved - at run time. To get late-binding behavior, force the constant to be - stored as a text constant instead of regclass: - -nextval('foo'::text) foo is looked up at runtime - - - - - Of course, the argument of a sequence function can be an expression - as well as a constant. If it is a text expression then the implicit - coercion will result in a run-time lookup. - - - @@ -26474,11 +26435,8 @@ postgres=# SELECT * FROM pg_walfile_name_offset(pg_stop_backup()); regclass argument, which is simply the OID of the table or index in the pg_class system catalog. You do not have to look up the OID by hand, however, since the regclass data type's input - converter will do the work for you. Just write the table name enclosed in - single quotes so that it looks like a literal constant. For compatibility - with the handling of ordinary SQL names, the string - will be converted to lower case unless it contains double quotes around - the table name. + converter will do the work for you. See + for details. From 6f70d7ca1d1937a9f7b79eff6fb18ed1bb2a4c47 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Wed, 5 May 2021 12:14:21 -0400 Subject: [PATCH 235/671] Have ALTER CONSTRAINT recurse on partitioned tables When ALTER TABLE .. ALTER CONSTRAINT changes deferrability properties changed in a partitioned table, we failed to propagate those changes correctly to partitions and to triggers. Repair by adding a recursion mechanism to affect all derived constraints and all derived triggers. (In particular, recurse to partitions even if their respective parents are already in the desired state: it is possible for the partitions to have been altered individually.) Because foreign keys involve tables in two sides, we cannot use the standard ALTER TABLE recursion mechanism, so we invent our own by following pg_constraint.conparentid down. When ALTER TABLE .. ALTER CONSTRAINT is invoked on the derived pg_constraint object that's automaticaly created in a partition as a result of a constraint added to its parent, raise an error instead of pretending to work and then failing to modify all the affected triggers. Before this commit such a command would be allowed but failed to affect all triggers, so it would silently misbehave. (Restoring dumps of existing databases is not affected, because pg_dump does not produce anything for such a derived constraint anyway.) Add some tests for the case. Backpatch to 11, where foreign key support was added to partitioned tables by commit 3de241dba86f. (A related change is commit f56f8f8da6af in pg12 which added support for FKs *referencing* partitioned tables; this is what forces us to use an ad-hoc recursion mechanism for this.) Diagnosed by Tom Lane from bug report from Ron L Johnson. As of this writing, no reviews were offered. Discussion: https://postgr.es/m/75fe0761-a291-86a9-c8d8-4906da077469@gmail.com Discussion: https://postgr.es/m/3144850.1607369633@sss.pgh.pa.us --- src/backend/commands/tablecmds.c | 196 +++++++++++++++++----- src/test/regress/expected/foreign_key.out | 78 +++++++++ src/test/regress/sql/foreign_key.sql | 75 +++++++++ 3 files changed, 311 insertions(+), 38 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index a992f1bef8028..72aba2ff6b0f0 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -357,6 +357,9 @@ static void AlterSeqNamespaces(Relation classRel, Relation rel, LOCKMODE lockmode); static ObjectAddress ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd, bool recurse, bool recursing, LOCKMODE lockmode); +static bool ATExecAlterConstrRecurse(Constraint *cmdcon, Relation conrel, Relation tgrel, + Relation rel, HeapTuple contuple, List **otherrelids, + LOCKMODE lockmode); static ObjectAddress ATExecValidateConstraint(List **wqueue, Relation rel, char *constrName, bool recurse, bool recursing, LOCKMODE lockmode); @@ -4669,6 +4672,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, break; case AT_AlterConstraint: /* ALTER CONSTRAINT */ ATSimplePermissions(rel, ATT_TABLE); + /* Recursion occurs during execution phase */ pass = AT_PASS_MISC; break; case AT_ValidateConstraint: /* VALIDATE CONSTRAINT */ @@ -10190,28 +10194,29 @@ tryAttachPartitionForeignKey(ForeignKeyCacheInfo *fk, * Update the attributes of a constraint. * * Currently only works for Foreign Key constraints. - * Foreign keys do not inherit, so we purposely ignore the - * recursion bit here, but we keep the API the same for when - * other constraint types are supported. * * If the constraint is modified, returns its address; otherwise, return * InvalidObjectAddress. */ static ObjectAddress -ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd, - bool recurse, bool recursing, LOCKMODE lockmode) +ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd, bool recurse, + bool recursing, LOCKMODE lockmode) { Constraint *cmdcon; Relation conrel; + Relation tgrel; SysScanDesc scan; ScanKeyData skey[3]; HeapTuple contuple; Form_pg_constraint currcon; ObjectAddress address; + List *otherrelids = NIL; + ListCell *lc; cmdcon = castNode(Constraint, cmd->def); conrel = table_open(ConstraintRelationId, RowExclusiveLock); + tgrel = table_open(TriggerRelationId, RowExclusiveLock); /* * Find and check the target constraint @@ -10245,21 +10250,120 @@ ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd, errmsg("constraint \"%s\" of relation \"%s\" is not a foreign key constraint", cmdcon->conname, RelationGetRelationName(rel)))); + /* + * If it's not the topmost constraint, raise an error. + * + * Altering a non-topmost constraint leaves some triggers untouched, since + * they are not directly connected to this constraint; also, pg_dump would + * ignore the deferrability status of the individual constraint, since it + * only dumps topmost constraints. Avoid these problems by refusing this + * operation and telling the user to alter the parent constraint instead. + */ + if (OidIsValid(currcon->conparentid)) + { + HeapTuple tp; + Oid parent = currcon->conparentid; + char *ancestorname = NULL; + char *ancestortable = NULL; + + /* Loop to find the topmost constraint */ + while (HeapTupleIsValid(tp = SearchSysCache1(CONSTROID, ObjectIdGetDatum(parent)))) + { + Form_pg_constraint contup = (Form_pg_constraint) GETSTRUCT(tp); + + /* If no parent, this is the constraint we want */ + if (!OidIsValid(contup->conparentid)) + { + ancestorname = pstrdup(NameStr(contup->conname)); + ancestortable = get_rel_name(contup->conrelid); + ReleaseSysCache(tp); + break; + } + + parent = contup->conparentid; + ReleaseSysCache(tp); + } + + ereport(ERROR, + (errmsg("cannot alter constraint \"%s\" on relation \"%s\"", + cmdcon->conname, RelationGetRelationName(rel)), + ancestorname && ancestortable ? + errdetail("Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\".", + cmdcon->conname, ancestorname, ancestortable) : 0, + errhint("You may alter the constraint it derives from, instead."))); + } + + /* + * Do the actual catalog work. We can skip changing if already in the + * desired state, but not if a partitioned table: partitions need to be + * processed regardless, in case they had the constraint locally changed. + */ + address = InvalidObjectAddress; + if (currcon->condeferrable != cmdcon->deferrable || + currcon->condeferred != cmdcon->initdeferred || + rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) + { + if (ATExecAlterConstrRecurse(cmdcon, conrel, tgrel, rel, contuple, + &otherrelids, lockmode)) + ObjectAddressSet(address, ConstraintRelationId, currcon->oid); + } + + /* + * ATExecConstrRecurse already invalidated relcache for the relations + * having the constraint itself; here we also invalidate for relations + * that have any triggers that are part of the constraint. + */ + foreach(lc, otherrelids) + CacheInvalidateRelcacheByRelid(lfirst_oid(lc)); + + systable_endscan(scan); + + table_close(tgrel, RowExclusiveLock); + table_close(conrel, RowExclusiveLock); + + return address; +} + +/* + * Recursive subroutine of ATExecAlterConstraint. Returns true if the + * constraint is altered. + * + * *otherrelids is appended OIDs of relations containing affected triggers. + * + * Note that we must recurse even when the values are correct, in case + * indirect descendants have had their constraints altered locally. + * (This could be avoided if we forbade altering constraints in partitions + * but existing releases don't do that.) + */ +static bool +ATExecAlterConstrRecurse(Constraint *cmdcon, Relation conrel, Relation tgrel, + Relation rel, HeapTuple contuple, List **otherrelids, + LOCKMODE lockmode) +{ + Form_pg_constraint currcon; + Oid conoid; + Oid refrelid; + bool changed = false; + + currcon = (Form_pg_constraint) GETSTRUCT(contuple); + conoid = currcon->oid; + refrelid = currcon->confrelid; + + /* + * Update pg_constraint with the flags from cmdcon. + * + * If called to modify a constraint that's already in the desired state, + * silently do nothing. + */ if (currcon->condeferrable != cmdcon->deferrable || currcon->condeferred != cmdcon->initdeferred) { HeapTuple copyTuple; - HeapTuple tgtuple; Form_pg_constraint copy_con; - List *otherrelids = NIL; + HeapTuple tgtuple; ScanKeyData tgkey; SysScanDesc tgscan; - Relation tgrel; - ListCell *lc; - /* - * Now update the catalog, while we have the door open. - */ copyTuple = heap_copytuple(contuple); copy_con = (Form_pg_constraint) GETSTRUCT(copyTuple); copy_con->condeferrable = cmdcon->deferrable; @@ -10267,28 +10371,29 @@ ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd, CatalogTupleUpdate(conrel, ©Tuple->t_self, copyTuple); InvokeObjectPostAlterHook(ConstraintRelationId, - currcon->oid, 0); + conoid, 0); heap_freetuple(copyTuple); + changed = true; + + /* Make new constraint flags visible to others */ + CacheInvalidateRelcache(rel); /* * Now we need to update the multiple entries in pg_trigger that * implement the constraint. */ - tgrel = table_open(TriggerRelationId, RowExclusiveLock); - ScanKeyInit(&tgkey, Anum_pg_trigger_tgconstraint, BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(currcon->oid)); - + ObjectIdGetDatum(conoid)); tgscan = systable_beginscan(tgrel, TriggerConstraintIndexId, true, NULL, 1, &tgkey); - while (HeapTupleIsValid(tgtuple = systable_getnext(tgscan))) { Form_pg_trigger tgform = (Form_pg_trigger) GETSTRUCT(tgtuple); Form_pg_trigger copy_tg; + HeapTuple copyTuple; /* * Remember OIDs of other relation(s) involved in FK constraint. @@ -10297,8 +10402,8 @@ ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd, * change, but let's be conservative.) */ if (tgform->tgrelid != RelationGetRelid(rel)) - otherrelids = list_append_unique_oid(otherrelids, - tgform->tgrelid); + *otherrelids = list_append_unique_oid(*otherrelids, + tgform->tgrelid); /* * Update deferrability of RI_FKey_noaction_del, @@ -10325,31 +10430,46 @@ ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd, } systable_endscan(tgscan); + } - table_close(tgrel, RowExclusiveLock); + /* + * If the table at either end of the constraint is partitioned, we need to + * recurse and handle every constraint that is a child of this one. + * + * (This assumes that the recurse flag is forcibly set for partitioned + * tables, and not set for legacy inheritance, though we don't check for + * that here.) + */ + if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE || + get_rel_relkind(refrelid) == RELKIND_PARTITIONED_TABLE) + { + ScanKeyData pkey; + SysScanDesc pscan; + HeapTuple childtup; - /* - * Invalidate relcache so that others see the new attributes. We must - * inval both the named rel and any others having relevant triggers. - * (At present there should always be exactly one other rel, but - * there's no need to hard-wire such an assumption here.) - */ - CacheInvalidateRelcache(rel); - foreach(lc, otherrelids) + ScanKeyInit(&pkey, + Anum_pg_constraint_conparentid, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(conoid)); + + pscan = systable_beginscan(conrel, ConstraintParentIndexId, + true, NULL, 1, &pkey); + + while (HeapTupleIsValid(childtup = systable_getnext(pscan))) { - CacheInvalidateRelcacheByRelid(lfirst_oid(lc)); + Form_pg_constraint childcon = (Form_pg_constraint) GETSTRUCT(childtup); + Relation childrel; + + childrel = table_open(childcon->conrelid, lockmode); + ATExecAlterConstrRecurse(cmdcon, conrel, tgrel, childrel, childtup, + otherrelids, lockmode); + table_close(childrel, NoLock); } - ObjectAddressSet(address, ConstraintRelationId, currcon->oid); + systable_endscan(pscan); } - else - address = InvalidObjectAddress; - systable_endscan(scan); - - table_close(conrel, RowExclusiveLock); - - return address; + return changed; } /* diff --git a/src/test/regress/expected/foreign_key.out b/src/test/regress/expected/foreign_key.out index 7386f4d6359a9..bf794dce9d8b6 100644 --- a/src/test/regress/expected/foreign_key.out +++ b/src/test/regress/expected/foreign_key.out @@ -2313,6 +2313,84 @@ SET CONSTRAINTS fk_a_fkey DEFERRED; DELETE FROM pk WHERE a = 1; DELETE FROM fk WHERE a = 1; COMMIT; -- OK +-- Verify constraint deferrability when changed by ALTER +-- Partitioned table at referencing end +CREATE TABLE pt(f1 int, f2 int, f3 int, PRIMARY KEY(f1,f2)); +CREATE TABLE ref(f1 int, f2 int, f3 int) + PARTITION BY list(f1); +CREATE TABLE ref1 PARTITION OF ref FOR VALUES IN (1); +CREATE TABLE ref2 PARTITION OF ref FOR VALUES in (2); +ALTER TABLE ref ADD FOREIGN KEY(f1,f2) REFERENCES pt; +ALTER TABLE ref ALTER CONSTRAINT ref_f1_f2_fkey + DEFERRABLE INITIALLY DEFERRED; +INSERT INTO pt VALUES(1,2,3); +INSERT INTO ref VALUES(1,2,3); +BEGIN; +DELETE FROM pt; +DELETE FROM ref; +ABORT; +DROP TABLE pt, ref; +-- Multi-level partitioning at referencing end +CREATE TABLE pt(f1 int, f2 int, f3 int, PRIMARY KEY(f1,f2)); +CREATE TABLE ref(f1 int, f2 int, f3 int) + PARTITION BY list(f1); +CREATE TABLE ref1_2 PARTITION OF ref FOR VALUES IN (1, 2) PARTITION BY list (f2); +CREATE TABLE ref1 PARTITION OF ref1_2 FOR VALUES IN (1); +CREATE TABLE ref2 PARTITION OF ref1_2 FOR VALUES IN (2) PARTITION BY list (f2); +CREATE TABLE ref22 PARTITION OF ref2 FOR VALUES IN (2); +ALTER TABLE ref ADD FOREIGN KEY(f1,f2) REFERENCES pt; +INSERT INTO pt VALUES(1,2,3); +INSERT INTO ref VALUES(1,2,3); +ALTER TABLE ref22 ALTER CONSTRAINT ref_f1_f2_fkey + DEFERRABLE INITIALLY IMMEDIATE; -- fails +ERROR: cannot alter constraint "ref_f1_f2_fkey" on relation "ref22" +DETAIL: Constraint "ref_f1_f2_fkey" is derived from constraint "ref_f1_f2_fkey" of relation "ref". +HINT: You may alter the constraint it derives from, instead. +ALTER TABLE ref ALTER CONSTRAINT ref_f1_f2_fkey + DEFERRABLE INITIALLY DEFERRED; +BEGIN; +DELETE FROM pt; +DELETE FROM ref; +ABORT; +DROP TABLE pt, ref; +-- Partitioned table at referenced end +CREATE TABLE pt(f1 int, f2 int, f3 int, PRIMARY KEY(f1,f2)) + PARTITION BY LIST(f1); +CREATE TABLE pt1 PARTITION OF pt FOR VALUES IN (1); +CREATE TABLE pt2 PARTITION OF pt FOR VALUES IN (2); +CREATE TABLE ref(f1 int, f2 int, f3 int); +ALTER TABLE ref ADD FOREIGN KEY(f1,f2) REFERENCES pt; +ALTER TABLE ref ALTER CONSTRAINT ref_f1_f2_fkey + DEFERRABLE INITIALLY DEFERRED; +INSERT INTO pt VALUES(1,2,3); +INSERT INTO ref VALUES(1,2,3); +BEGIN; +DELETE FROM pt; +DELETE FROM ref; +ABORT; +DROP TABLE pt, ref; +-- Multi-level partitioning at at referenced end +CREATE TABLE pt(f1 int, f2 int, f3 int, PRIMARY KEY(f1,f2)) + PARTITION BY LIST(f1); +CREATE TABLE pt1_2 PARTITION OF pt FOR VALUES IN (1, 2) PARTITION BY LIST (f1); +CREATE TABLE pt1 PARTITION OF pt1_2 FOR VALUES IN (1); +CREATE TABLE pt2 PARTITION OF pt1_2 FOR VALUES IN (2); +CREATE TABLE ref(f1 int, f2 int, f3 int); +ALTER TABLE ref ADD FOREIGN KEY(f1,f2) REFERENCES pt; +ALTER TABLE ref ALTER CONSTRAINT ref_f1_f2_fkey1 + DEFERRABLE INITIALLY DEFERRED; -- fails +ERROR: cannot alter constraint "ref_f1_f2_fkey1" on relation "ref" +DETAIL: Constraint "ref_f1_f2_fkey1" is derived from constraint "ref_f1_f2_fkey" of relation "ref". +HINT: You may alter the constraint it derives from, instead. +ALTER TABLE ref ALTER CONSTRAINT ref_f1_f2_fkey + DEFERRABLE INITIALLY DEFERRED; +INSERT INTO pt VALUES(1,2,3); +INSERT INTO ref VALUES(1,2,3); +BEGIN; +DELETE FROM pt; +DELETE FROM ref; +ABORT; +DROP TABLE pt, ref; DROP SCHEMA fkpart9 CASCADE; NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table pk diff --git a/src/test/regress/sql/foreign_key.sql b/src/test/regress/sql/foreign_key.sql index 67aa20435d20a..de417b62b64dc 100644 --- a/src/test/regress/sql/foreign_key.sql +++ b/src/test/regress/sql/foreign_key.sql @@ -1636,6 +1636,81 @@ SET CONSTRAINTS fk_a_fkey DEFERRED; DELETE FROM pk WHERE a = 1; DELETE FROM fk WHERE a = 1; COMMIT; -- OK + +-- Verify constraint deferrability when changed by ALTER +-- Partitioned table at referencing end +CREATE TABLE pt(f1 int, f2 int, f3 int, PRIMARY KEY(f1,f2)); +CREATE TABLE ref(f1 int, f2 int, f3 int) + PARTITION BY list(f1); +CREATE TABLE ref1 PARTITION OF ref FOR VALUES IN (1); +CREATE TABLE ref2 PARTITION OF ref FOR VALUES in (2); +ALTER TABLE ref ADD FOREIGN KEY(f1,f2) REFERENCES pt; +ALTER TABLE ref ALTER CONSTRAINT ref_f1_f2_fkey + DEFERRABLE INITIALLY DEFERRED; +INSERT INTO pt VALUES(1,2,3); +INSERT INTO ref VALUES(1,2,3); +BEGIN; +DELETE FROM pt; +DELETE FROM ref; +ABORT; +DROP TABLE pt, ref; +-- Multi-level partitioning at referencing end +CREATE TABLE pt(f1 int, f2 int, f3 int, PRIMARY KEY(f1,f2)); +CREATE TABLE ref(f1 int, f2 int, f3 int) + PARTITION BY list(f1); +CREATE TABLE ref1_2 PARTITION OF ref FOR VALUES IN (1, 2) PARTITION BY list (f2); +CREATE TABLE ref1 PARTITION OF ref1_2 FOR VALUES IN (1); +CREATE TABLE ref2 PARTITION OF ref1_2 FOR VALUES IN (2) PARTITION BY list (f2); +CREATE TABLE ref22 PARTITION OF ref2 FOR VALUES IN (2); +ALTER TABLE ref ADD FOREIGN KEY(f1,f2) REFERENCES pt; +INSERT INTO pt VALUES(1,2,3); +INSERT INTO ref VALUES(1,2,3); +ALTER TABLE ref22 ALTER CONSTRAINT ref_f1_f2_fkey + DEFERRABLE INITIALLY IMMEDIATE; -- fails +ALTER TABLE ref ALTER CONSTRAINT ref_f1_f2_fkey + DEFERRABLE INITIALLY DEFERRED; +BEGIN; +DELETE FROM pt; +DELETE FROM ref; +ABORT; +DROP TABLE pt, ref; + +-- Partitioned table at referenced end +CREATE TABLE pt(f1 int, f2 int, f3 int, PRIMARY KEY(f1,f2)) + PARTITION BY LIST(f1); +CREATE TABLE pt1 PARTITION OF pt FOR VALUES IN (1); +CREATE TABLE pt2 PARTITION OF pt FOR VALUES IN (2); +CREATE TABLE ref(f1 int, f2 int, f3 int); +ALTER TABLE ref ADD FOREIGN KEY(f1,f2) REFERENCES pt; +ALTER TABLE ref ALTER CONSTRAINT ref_f1_f2_fkey + DEFERRABLE INITIALLY DEFERRED; +INSERT INTO pt VALUES(1,2,3); +INSERT INTO ref VALUES(1,2,3); +BEGIN; +DELETE FROM pt; +DELETE FROM ref; +ABORT; +DROP TABLE pt, ref; +-- Multi-level partitioning at at referenced end +CREATE TABLE pt(f1 int, f2 int, f3 int, PRIMARY KEY(f1,f2)) + PARTITION BY LIST(f1); +CREATE TABLE pt1_2 PARTITION OF pt FOR VALUES IN (1, 2) PARTITION BY LIST (f1); +CREATE TABLE pt1 PARTITION OF pt1_2 FOR VALUES IN (1); +CREATE TABLE pt2 PARTITION OF pt1_2 FOR VALUES IN (2); +CREATE TABLE ref(f1 int, f2 int, f3 int); +ALTER TABLE ref ADD FOREIGN KEY(f1,f2) REFERENCES pt; +ALTER TABLE ref ALTER CONSTRAINT ref_f1_f2_fkey1 + DEFERRABLE INITIALLY DEFERRED; -- fails +ALTER TABLE ref ALTER CONSTRAINT ref_f1_f2_fkey + DEFERRABLE INITIALLY DEFERRED; +INSERT INTO pt VALUES(1,2,3); +INSERT INTO ref VALUES(1,2,3); +BEGIN; +DELETE FROM pt; +DELETE FROM ref; +ABORT; +DROP TABLE pt, ref; + DROP SCHEMA fkpart9 CASCADE; -- Verify ON UPDATE/DELETE behavior From c250062df42ffd3e252471f6205bfb6cbef67b7b Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Wed, 5 May 2021 12:27:39 -0400 Subject: [PATCH 236/671] Remove unused argument of ATAddForeignConstraint Commit 0325d7a5957b made this unused but forgot to remove it. Do so now. Author: Amit Langote Discussion: https://postgr.es/m/209c99fe-b9a2-94f4-cd68-a8304186a09e@lab.ntt.co.jp --- src/backend/commands/tablecmds.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 72aba2ff6b0f0..0da61784d7a19 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -477,7 +477,7 @@ static ObjectAddress ATAddCheckConstraint(List **wqueue, bool recurse, bool recursing, bool is_readd, LOCKMODE lockmode); static ObjectAddress ATAddForeignKeyConstraint(List **wqueue, AlteredTableInfo *tab, - Relation rel, Constraint *fkconstraint, Oid parentConstr, + Relation rel, Constraint *fkconstraint, bool recurse, bool recursing, LOCKMODE lockmode); static ObjectAddress addFkRecurseReferenced(List **wqueue, Constraint *fkconstraint, @@ -8620,7 +8620,7 @@ ATExecAddConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel, NIL); address = ATAddForeignKeyConstraint(wqueue, tab, rel, - newConstraint, InvalidOid, + newConstraint, recurse, false, lockmode); break; @@ -8826,7 +8826,7 @@ ATAddCheckConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel, */ static ObjectAddress ATAddForeignKeyConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel, - Constraint *fkconstraint, Oid parentConstr, + Constraint *fkconstraint, bool recurse, bool recursing, LOCKMODE lockmode) { Relation pkrel; From 2ce353fc19024d62e59ad99850d7592ebc9abecf Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Thu, 6 May 2021 08:26:42 +0530 Subject: [PATCH 237/671] Tighten the concurrent abort check during decoding. During decoding of an in-progress or prepared transaction, we detect concurrent abort with an error code ERRCODE_TRANSACTION_ROLLBACK. That is not sufficient because a callback can decide to throw that error code at other times as well. Reported-by: Tom Lane Author: Amit Kapila Reviewed-by: Dilip Kumar Discussion: https://postgr.es/m/CAA4eK1KCjPRS4aZHB48QMM4J8XOC1+TD8jo-4Yu84E+MjwqVhA@mail.gmail.com --- .../replication/logical/reorderbuffer.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index ee680e5e1b4a3..c79425fbb7388 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -2492,17 +2492,18 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn, * abort of the (sub)transaction we are streaming or preparing. We * need to do the cleanup and return gracefully on this error, see * SetupCheckXidLive. + * + * This error code can be thrown by one of the callbacks we call during + * decoding so we need to ensure that we return gracefully only when we are + * sending the data in streaming mode and the streaming is not finished yet + * or when we are sending the data out on a PREPARE during a two-phase + * commit. */ - if (errdata->sqlerrcode == ERRCODE_TRANSACTION_ROLLBACK) + if (errdata->sqlerrcode == ERRCODE_TRANSACTION_ROLLBACK && + (stream_started || rbtxn_prepared(txn))) { - /* - * This error can occur either when we are sending the data in - * streaming mode and the streaming is not finished yet or when we - * are sending the data out on a PREPARE during a two-phase - * commit. - */ - Assert(streaming || rbtxn_prepared(txn)); - Assert(stream_started || rbtxn_prepared(txn)); + /* curtxn must be set for streaming or prepared transactions */ + Assert(curtxn); /* Cleanup the temporary error state. */ FlushErrorState(); From e8ce68b0b9ae2757c6153a88bf869904d2d5ac0b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 5 May 2021 23:10:33 -0400 Subject: [PATCH 238/671] Doc: update RELEASE_CHANGES checklist. Update checklist to reflect current practice: * The platform-specific FAQ files are long gone. * We've never routinely updated the libbind code we borrowed, either, and there seems no reason to start now. * Explain current practice of running pgindent twice per cycle. Discussion: https://postgr.es/m/4038398.1620238684@sss.pgh.pa.us --- src/tools/RELEASE_CHANGES | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/tools/RELEASE_CHANGES b/src/tools/RELEASE_CHANGES index 8f9ac00e94ac1..ec45ae4c90859 100644 --- a/src/tools/RELEASE_CHANGES +++ b/src/tools/RELEASE_CHANGES @@ -59,7 +59,6 @@ in both master and the branch. * Ports o update ports list in doc/src/sgml/installation.sgml - o update platform-specific FAQ's, if needed Pre-Beta Tasks @@ -69,14 +68,16 @@ These things should be done at least once per development cycle. Typically we do them between feature freeze and start of beta test, but there may be reasons to do them at other times as well. +* Run mechanical code beautification tools: + pgindent, pgperltidy, and "make reformat-dat-files" + (see src/tools/pgindent/README) + * Renumber any manually-assigned OIDs between 8000 and 9999 to lower numbers, using renumber_oids.pl (see notes in bki.sgml) * Update config.guess and config.sub (from https://savannah.gnu.org/projects/config) -* Update inet/cidr data types with newest Bind patches - * Update Unicode data: Edit UNICODE_VERSION and CLDR_VERSION in src/Makefile.global.in, run make update-unicode, and commit. @@ -84,7 +85,8 @@ but there may be reasons to do them at other times as well. Starting a New Development Cycle ================================ -* Typically, we do pgindent and perltidy runs just before branching +* Typically, we do pgindent and perltidy runs just before branching, + as well as before beta * Create a branch in git for maintenance of the previous release o on master branch, do: From 7f2e10baa2482494dbcf70e0ae6f0469771e0b4c Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Wed, 5 May 2021 22:07:40 -0700 Subject: [PATCH 239/671] jit: Fix warning reported by gcc-11 caused by dubious function signature. Reported-By: Erik Rijkers Discussion: https://postgr.es/m/833107370.1313189.1619647621213@webmailclassic.xs4all.nl Backpatch: 13, where b059d2f45685 introduced the issue. --- src/backend/jit/llvm/llvmjit_expr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c index 0f9cc790c7d70..8a4075bdaf254 100644 --- a/src/backend/jit/llvm/llvmjit_expr.c +++ b/src/backend/jit/llvm/llvmjit_expr.c @@ -61,7 +61,7 @@ static LLVMValueRef build_EvalXFuncInt(LLVMBuilderRef b, LLVMModuleRef mod, const char *funcname, LLVMValueRef v_state, ExprEvalStep *op, - int natts, LLVMValueRef v_args[]); + int natts, LLVMValueRef *v_args); static LLVMValueRef create_LifetimeEnd(LLVMModuleRef mod); /* macro making it easier to call ExecEval* functions */ @@ -2459,7 +2459,7 @@ BuildV1Call(LLVMJitContext *context, LLVMBuilderRef b, static LLVMValueRef build_EvalXFuncInt(LLVMBuilderRef b, LLVMModuleRef mod, const char *funcname, LLVMValueRef v_state, ExprEvalStep *op, - int nargs, LLVMValueRef v_args[]) + int nargs, LLVMValueRef *v_args) { LLVMValueRef v_fn = llvm_pg_func(mod, funcname); LLVMValueRef *params; From 592f00f8dec68038301467a904ac514eddabf6cd Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Thu, 6 May 2021 11:21:26 +0530 Subject: [PATCH 240/671] Update replication statistics after every stream/spill. Currently, replication slot statistics are updated at prepare, commit, and rollback. Now, if the transaction is interrupted the stats might not get updated. Fixed this by updating replication statistics after every stream/spill. In passing update the docs to change the description of some of the slot stats. Author: Vignesh C, Sawada Masahiko Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de --- doc/src/sgml/monitoring.sgml | 15 +++++++-------- src/backend/replication/logical/decode.c | 14 ++++++++------ src/backend/replication/logical/reorderbuffer.c | 6 ++++++ src/include/replication/reorderbuffer.h | 4 ++-- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 886e626be802e..370cdc2e1a11e 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -2708,10 +2708,10 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i stream_bytesbigint - Amount of decoded in-progress transaction data streamed to the decoding - output plugin while decoding changes from WAL for this slot. This and other - streaming counters for this slot can be used to gauge the network I/O which - occurred during logical decoding and allow tuning logical_decoding_work_mem. + Amount of transaction data decoded for streaming in-progress + transactions to the decoding output plugin while decoding changes from + WAL for this slot. This and other streaming counters for this slot can + be used to tune logical_decoding_work_mem. @@ -2733,10 +2733,9 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i total_bytesbigint - Amount of decoded transaction data sent to the decoding output plugin - while decoding the changes from WAL for this slot. This can be used to - gauge the total amount of data sent during logical decoding. Note that - this includes data that is streamed and/or spilled. + Amount of transaction data decoded for sending transactions to the + decoding output plugin while decoding changes from WAL for this slot. + Note that this includes data that is streamed and/or spilled.
diff --git a/src/backend/replication/logical/decode.c b/src/backend/replication/logical/decode.c index 7924581cdcd08..888e064ec0f07 100644 --- a/src/backend/replication/logical/decode.c +++ b/src/backend/replication/logical/decode.c @@ -746,9 +746,10 @@ DecodeCommit(LogicalDecodingContext *ctx, XLogRecordBuffer *buf, } /* - * Update the decoding stats at transaction prepare/commit/abort. It is - * not clear that sending more or less frequently than this would be - * better. + * Update the decoding stats at transaction prepare/commit/abort. + * Additionally we send the stats when we spill or stream the changes to + * avoid losing them in case the decoding is interrupted. It is not clear + * that sending more or less frequently than this would be better. */ UpdateDecodingStats(ctx); } @@ -828,9 +829,10 @@ DecodePrepare(LogicalDecodingContext *ctx, XLogRecordBuffer *buf, ReorderBufferPrepare(ctx->reorder, xid, parsed->twophase_gid); /* - * Update the decoding stats at transaction prepare/commit/abort. It is - * not clear that sending more or less frequently than this would be - * better. + * Update the decoding stats at transaction prepare/commit/abort. + * Additionally we send the stats when we spill or stream the changes to + * avoid losing them in case the decoding is interrupted. It is not clear + * that sending more or less frequently than this would be better. */ UpdateDecodingStats(ctx); } diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index c79425fbb7388..e80a195472e62 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -3559,6 +3559,9 @@ ReorderBufferSerializeTXN(ReorderBuffer *rb, ReorderBufferTXN *txn) /* don't consider already serialized transactions */ rb->spillTxns += (rbtxn_is_serialized(txn) || rbtxn_is_serialized_clear(txn)) ? 0 : 1; + + /* update the decoding stats */ + UpdateDecodingStats((LogicalDecodingContext *) rb->private_data); } Assert(spilled == txn->nentries_mem); @@ -3928,6 +3931,9 @@ ReorderBufferStreamTXN(ReorderBuffer *rb, ReorderBufferTXN *txn) /* Don't consider already streamed transaction. */ rb->streamTxns += (txn_is_streamed) ? 0 : 1; + /* update the decoding stats */ + UpdateDecodingStats((LogicalDecodingContext *) rb->private_data); + Assert(dlist_is_empty(&txn->changes)); Assert(txn->nentries == 0); Assert(txn->nentries_mem == 0); diff --git a/src/include/replication/reorderbuffer.h b/src/include/replication/reorderbuffer.h index bfab8303ee773..53cdfa5d88f90 100644 --- a/src/include/replication/reorderbuffer.h +++ b/src/include/replication/reorderbuffer.h @@ -617,14 +617,14 @@ struct ReorderBuffer /* Statistics about transactions streamed to the decoding output plugin */ int64 streamTxns; /* number of transactions streamed */ int64 streamCount; /* streaming invocation counter */ - int64 streamBytes; /* amount of data streamed */ + int64 streamBytes; /* amount of data decoded */ /* * Statistics about all the transactions sent to the decoding output * plugin */ int64 totalTxns; /* total number of transactions sent */ - int64 totalBytes; /* total amount of data sent */ + int64 totalBytes; /* total amount of data decoded */ }; From 2d0f662402635d591cac9f1daae5e81e7c4374fc Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Thu, 6 May 2021 08:22:45 -0400 Subject: [PATCH 241/671] docs: Clarify how ALTER TABLE .. SET COMPRESSION works. Justin Pryzby, per a complaint from Michael Paquier. Reviewed by Dilip Kumar and by me. Discussion: http://postgr.es/m/20210429040132.GF27406@telsasoft.com --- doc/src/sgml/ref/alter_table.sgml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index 6166b26334523..9cef1f101eb25 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -391,7 +391,21 @@ WITH ( MODULUS numeric_literal, REM - This sets the compression method for a column. The supported compression + This sets the compression method to be used for data inserted into a column. + + This does not cause the table to be rewritten, so existing data may still + be compressed with other compression methods. If the table is rewritten with + VACUUM FULL or CLUSTER, or restored + with pg_restore, then all tuples are rewritten + with the configured compression methods. + + Also, note that when data is inserted from another relation (for example, + by INSERT ... SELECT), tuples from the source data are + not necessarily detoasted, and any previously compressed data is retained + with its existing compression method, rather than recompressing with the + compression methods of the target columns. + + The supported compression methods are pglz and lz4. lz4 is available only if --with-lz4 was used when building PostgreSQL. From 448b02c00515ba9d6683a8a97fe4305604d80028 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Thu, 6 May 2021 08:27:20 -0400 Subject: [PATCH 242/671] Additional doc fixes for configurable TOAST compression. The grammar changes in commit bbe0a81db69bd10bd166907c3701492a29aca294 allow SET COMPRESSION to be used with ALTER MATERIALIZED VIEW as well as with ALTER TABLE, so update those docs to say that it works. Also, update the documentation for the pg_column_compression() to explain that it will return NULL when there's no relevant value. Patch by me, per concerns from Michael Paquier. Discussion: http://postgr.es/m/CA+Tgmob9h5u4iNL9KM0drZgkY-JL4oCVW0dWrMqtLPQ1zHkquA@mail.gmail.com --- doc/src/sgml/func.sgml | 3 ++- doc/src/sgml/ref/alter_materialized_view.sgml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index c60d98360ff89..0b5571460de78 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -26256,7 +26256,8 @@ postgres=# SELECT * FROM pg_walfile_name_offset(pg_stop_backup()); Shows the compression algorithm that was used to compress a - an individual variable-length value. + an individual variable-length value. Returns NULL + if the value is not compressed. diff --git a/doc/src/sgml/ref/alter_materialized_view.sgml b/doc/src/sgml/ref/alter_materialized_view.sgml index 27f60f6df59d0..7011a0e7da04e 100644 --- a/doc/src/sgml/ref/alter_materialized_view.sgml +++ b/doc/src/sgml/ref/alter_materialized_view.sgml @@ -40,6 +40,7 @@ ALTER MATERIALIZED VIEW ALL IN TABLESPACE namecolumn_name SET ( attribute_option = value [, ... ] ) ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] ) ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } + ALTER [ COLUMN ] column_name SET COMPRESSION compression_method CLUSTER ON index_name SET WITHOUT CLUSTER SET ( storage_parameter [= value] [, ... ] ) From c38cadc0907a8d071b043b2b32b83efa09db38ea Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 6 May 2021 09:59:11 -0400 Subject: [PATCH 243/671] Doc: trivial wording adjustment. Improve self-referential foreign key example, per suggestion from David Johnston. Discussion: https://postgr.es/m/CAKFQuwZTke7+HUn4YUGqu2+gAPi4Cy18TXMrg_Z5nADkxfPNMw@mail.gmail.com --- doc/src/sgml/ddl.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml index 513112a216d96..b4648321dc4c2 100644 --- a/doc/src/sgml/ddl.sgml +++ b/doc/src/sgml/ddl.sgml @@ -956,7 +956,7 @@ CREATE TABLE tree ( ); A top-level node would have NULL parent_id, - but non-NULL parent_id entries would be + while non-NULL parent_id entries would be constrained to reference valid rows of the table. From 3fe773b149755977d2ffde2afd89557b39d0afd9 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 6 May 2021 12:47:30 -0400 Subject: [PATCH 244/671] Track detached partitions more accurately in partdescs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In d6b8d29419df I (Álvaro) was sloppy about recording whether a partition descripor does or does not include detached partitions, when the snapshot checking does not see the pg_inherits row marked detached. In that case no partition was omitted, yet in the relcache entry we were saving the partdesc as omitting partitions. Flip that (so we save it as a partdesc not omitting partitions, which indeed it doesn't), which hopefully makes the code easier to reason about. Author: Amit Langote Discussion: https://postgr.es/m/CA+HiwqE7GxGU4VdzwZzfiz+Ont5SsopoFkgtrZGEdPqWRL+biA@mail.gmail.com --- src/backend/partitioning/partdesc.c | 22 ++++++++++++++++------ src/include/utils/rel.h | 4 +--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/backend/partitioning/partdesc.c b/src/backend/partitioning/partdesc.c index fa9729283a05f..cf1ca0fe5f75f 100644 --- a/src/backend/partitioning/partdesc.c +++ b/src/backend/partitioning/partdesc.c @@ -96,11 +96,11 @@ RelationGetPartitionDesc(Relation rel, bool omit_detached) */ if (omit_detached && rel->rd_partdesc_nodetached && - TransactionIdIsValid(rel->rd_partdesc_nodetached_xmin) && ActiveSnapshotSet()) { Snapshot activesnap; + Assert(TransactionIdIsValid(rel->rd_partdesc_nodetached_xmin)); activesnap = GetActiveSnapshot(); if (!XidInMVCCSnapshot(rel->rd_partdesc_nodetached_xmin, activesnap)) @@ -163,6 +163,7 @@ RelationBuildPartitionDesc(Relation rel, bool omit_detached) omit_detached, NoLock, &detached_exist, &detached_xmin); + nparts = list_length(inhoids); /* Allocate working arrays for OIDs, leaf flags, and boundspecs. */ @@ -310,10 +311,17 @@ RelationBuildPartitionDesc(Relation rel, bool omit_detached) } /* - * Are we working with the partition that omits detached partitions, or - * the one that includes them? + * Are we working with the partdesc that omits the detached partition, or + * the one that includes it? + * + * Note that if a partition was found by the catalog's scan to have been + * detached, but the pg_inherit tuple saying so was not visible to the + * active snapshot (find_inheritance_children_extended will not have set + * detached_xmin in that case), we consider there to be no "omittable" + * detached partitions. */ - is_omit = omit_detached && detached_exist && ActiveSnapshotSet(); + is_omit = omit_detached && detached_exist && ActiveSnapshotSet() && + TransactionIdIsValid(detached_xmin); /* * We have a fully valid partdesc. Reparent it so that it has the right @@ -343,9 +351,11 @@ RelationBuildPartitionDesc(Relation rel, bool omit_detached) * For partdescs built excluding detached partitions, which we save * separately, we also record the pg_inherits.xmin of the detached * partition that was omitted; this informs a future potential user of - * such a cached partdescs. (This might be InvalidXid; see comments - * in struct RelationData). + * such a cached partdesc to only use it after cross-checking that the + * xmin is indeed visible to the snapshot it is going to be working + * with. */ + Assert(TransactionIdIsValid(detached_xmin)); rel->rd_partdesc_nodetached_xmin = detached_xmin; } else diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h index 07ae2c70a9672..5bd44be9a79e0 100644 --- a/src/include/utils/rel.h +++ b/src/include/utils/rel.h @@ -138,9 +138,7 @@ typedef struct RelationData * rd_partdesc_nodetached. This informs a future user of that partdesc: * if this value is not in progress for the active snapshot, then the * partdesc can be used, otherwise they have to build a new one. (This - * matches what find_inheritance_children_extended would do). In the rare - * case where the pg_inherits tuple has been frozen, this will be - * InvalidXid; behave as if the partdesc is unusable in that case. + * matches what find_inheritance_children_extended would do). */ TransactionId rd_partdesc_nodetached_xmin; From c9787385db47ba423d845b34d58e158551c6335d Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Thu, 6 May 2021 13:17:39 -0700 Subject: [PATCH 245/671] Remove overzealous VACUUM visibility map assertion. The all_visible_according_to_vm variable's value is inherently prone to becoming invalidated concurrently, since it is set before we even acquire a lock on a related heap page buffer. Oversight in commit 7136bf34, which added the assertion in passing. Author: Masahiko Sawada Reported-By: Tang Diagnosed-By:: Masahiko Sawada Discussion: https://postgr.es/m/CAD21AoDzgc8_MYrA5m1fyydomw_eVKtQiYh7sfDK4KEhdMsf_g@mail.gmail.com --- src/backend/access/heap/vacuumlazy.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index c3fc12d76c796..47ac6385d1212 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -1344,7 +1344,6 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) lazy_scan_prune(vacrel, buf, blkno, page, vistest, &prunestate); Assert(!prunestate.all_visible || !prunestate.has_lpdead_items); - Assert(!all_visible_according_to_vm || prunestate.all_visible); /* Remember the location of the last page with nonremovable tuples */ if (prunestate.hastup) From db6e1aeb952e9aed26ba2a56b4145293c72b8068 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 6 May 2021 16:42:30 -0400 Subject: [PATCH 246/671] Improve documentation on DETACH PARTITION lock levels This was forgotten in 71f4c8c6f74b. Reported-by: Pavel Luzanov Author: Amit Langote Discussion: https://postgr.es/m/0688e7c3-8bc8-a3e4-9d8e-3bcbbf3e1f4d@postgrespro.ru --- doc/src/sgml/ddl.sgml | 24 ++++++++++-------------- doc/src/sgml/ref/alter_table.sgml | 2 +- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml index b4648321dc4c2..63bc946c3b625 100644 --- a/doc/src/sgml/ddl.sgml +++ b/doc/src/sgml/ddl.sgml @@ -3915,18 +3915,25 @@ DROP TABLE measurement_y2006m02; Another option that is often preferable is to remove the partition from the partitioned table but retain access to it as a table in its own - right: + right. This has two forms: ALTER TABLE measurement DETACH PARTITION measurement_y2006m02; +ALTER TABLE measurement DETACH PARTITION measurement_y2006m02 CONCURRENTLY; - This allows further operations to be performed on the data before + These allow further operations to be performed on the data before it is dropped. For example, this is often a useful time to back up the data using COPY, pg_dump, or similar tools. It might also be a useful time to aggregate data into smaller formats, perform other data manipulations, or run - reports. + reports. The first form of the command requires an + ACCESS EXCLUSIVE lock on the parent table. + Adding the CONCURRENTLY qualifier as in the second + form allows the detach operation to require only + SHARE UPDATE EXCLUSIVE lock on the parent table, but see + ALTER TABLE ... DETACH PARTITION + for details on the restrictions. @@ -4163,17 +4170,6 @@ ALTER INDEX measurement_city_id_logdate_key might be poor.) - - - - Some operations require a stronger lock when using declarative - partitioning than when using table inheritance. For example, - removing a partition from a partitioned table requires taking - an ACCESS EXCLUSIVE lock on the parent table, - whereas a SHARE UPDATE EXCLUSIVE lock is enough - in the case of regular inheritance. - - diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index 9cef1f101eb25..087f640dc07bb 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -967,7 +967,7 @@ WITH ( MODULUS numeric_literal, REM
- + DETACH PARTITION partition_name [ CONCURRENTLY | FINALIZE ] From 469116389e18dbf6be0bd555bc2055a26be91a48 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 6 May 2021 17:17:57 -0400 Subject: [PATCH 247/671] Document lock level used by ALTER TABLE VALIDATE CONSTRAINT Backpatch all the way back to 9.6. Author: Simon Riggs Discussion: https://postgr.es/m/CANbhV-EwxvdhHuOLdfG2ciYrHOHXV=mm6=fD5aMhqcH09Li3Tg@mail.gmail.com --- doc/src/sgml/ref/alter_table.sgml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index 087f640dc07bb..1431d2649befe 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -536,6 +536,9 @@ WITH ( MODULUS numeric_literal, REM (See below for an explanation of the usefulness of this command.) + + This command acquires a SHARE UPDATE EXCLUSIVE lock. + From a288d94c91e345ebeb10ac30f247270c8c8e380a Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 6 May 2021 17:28:36 -0400 Subject: [PATCH 248/671] Remove redundant variable Author: Amul Sul Reviewed-by: Jeevan Ladhe Reviewed-by: Bharath Rupireddy Reviewed-by: Justin Pryzby Discussion: https://postgr.es/m/CAAJ_b94HaNcrPVREUuB9-qUn2uB+gfcoX3FG_Vx0S6aFse+yhw@mail.gmail.com --- src/backend/parser/parse_utilcmd.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 9dd30370dae17..6fae9a9687202 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -176,7 +176,6 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString) Oid namespaceid; Oid existing_relid; ParseCallbackState pcbstate; - bool is_foreign_table = IsA(stmt, CreateForeignTableStmt); /* * We must not scribble on the passed-in CreateStmt, so copy it. (This is @@ -333,8 +332,11 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString) /* * Postprocess check constraints. + * + * For regular tables all constraints can be marked valid immediately, + * because the table is new therefore empty. Not so for foreign tables. */ - transformCheckConstraints(&cxt, !is_foreign_table ? true : false); + transformCheckConstraints(&cxt, !cxt.isforeign); /* * Postprocess extended statistics. From ec48314708262d8ea6cdcb83f803fc83dd89e721 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 7 May 2021 20:17:42 +1200 Subject: [PATCH 249/671] Revert per-index collation version tracking feature. Design problems were discovered in the handling of composite types and record types that would cause some relevant versions not to be recorded. Misgivings were also expressed about the use of the pg_depend catalog for this purpose. We're out of time for this release so we'll revert and try again. Commits reverted: 1bf946bd: Doc: Document known problem with Windows collation versions. cf002008: Remove no-longer-relevant test case. ef387bed: Fix bogus collation-version-recording logic. 0fb0a050: Hide internal error for pg_collation_actual_version(). ff942057: Suppress "warning: variable 'collcollate' set but not used". d50e3b1f: Fix assertion in collation version lookup. f24b1569: Rethink extraction of collation dependencies. 257836a7: Track collation versions for indexes. cd6f479e: Add pg_depend.refobjversion. 7d1297df: Remove pg_collation.collversion. Discussion: https://postgr.es/m/CA%2BhUKGLhj5t1fcjqAu8iD9B3ixJtsTNqyCCD4V0aTO9kAKAjjA%40mail.gmail.com --- doc/src/sgml/catalogs.sgml | 23 +- doc/src/sgml/charset.sgml | 48 ---- doc/src/sgml/func.sgml | 8 +- doc/src/sgml/ref/alter_collation.sgml | 63 +++++ doc/src/sgml/ref/alter_index.sgml | 15 -- doc/src/sgml/ref/create_collation.sgml | 21 ++ doc/src/sgml/ref/pgupgrade.sgml | 15 -- doc/src/sgml/ref/reindex.sgml | 9 - src/backend/catalog/dependency.c | 230 ++++-------------- src/backend/catalog/heap.c | 7 +- src/backend/catalog/index.c | 198 ++------------- src/backend/catalog/pg_collation.c | 5 + src/backend/catalog/pg_constraint.c | 2 +- src/backend/catalog/pg_depend.c | 47 +--- src/backend/catalog/pg_type.c | 69 ------ src/backend/commands/collationcmds.c | 104 +++++++- src/backend/commands/statscmds.c | 2 +- src/backend/commands/tablecmds.c | 31 --- src/backend/nodes/copyfuncs.c | 14 +- src/backend/nodes/equalfuncs.c | 11 + src/backend/optimizer/util/plancat.c | 9 - src/backend/parser/gram.y | 26 +- src/backend/tcop/utility.c | 12 + src/backend/utils/adt/pg_locale.c | 89 +++---- src/backend/utils/adt/pg_upgrade_support.c | 1 - src/backend/utils/cache/relcache.c | 2 - src/bin/pg_dump/pg_backup.h | 1 - src/bin/pg_dump/pg_dump.c | 216 +++------------- src/bin/pg_dump/pg_dump.h | 2 - src/bin/pg_upgrade/dump.c | 4 +- src/bin/pg_upgrade/option.c | 7 - src/bin/pg_upgrade/pg_upgrade.h | 1 - src/bin/psql/tab-complete.c | 33 +-- src/include/catalog/catversion.h | 2 +- src/include/catalog/dependency.h | 20 +- src/include/catalog/index.h | 3 - src/include/catalog/pg_collation.h | 8 + src/include/catalog/pg_depend.h | 5 - src/include/catalog/pg_type.h | 2 - src/include/commands/collationcmds.h | 1 + src/include/nodes/parsenodes.h | 13 +- src/include/utils/pg_locale.h | 2 +- src/include/utils/rel.h | 1 - src/test/Makefile | 3 +- src/test/locale/.gitignore | 1 - src/test/locale/Makefile | 7 - src/test/locale/t/001_index.pl | 67 ----- .../regress/expected/collate.icu.utf8.out | 195 +-------------- .../regress/expected/collate.linux.utf8.out | 3 + src/test/regress/expected/create_index.out | 6 +- src/test/regress/expected/misc_sanity.out | 4 +- src/test/regress/sql/collate.icu.utf8.sql | 138 +---------- src/test/regress/sql/collate.linux.utf8.sql | 5 + src/test/regress/sql/create_index.sql | 4 +- src/tools/pgindent/typedefs.list | 2 - 55 files changed, 463 insertions(+), 1354 deletions(-) delete mode 100644 src/test/locale/t/001_index.pl diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 492ed348b3a72..29ee9605b61dc 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -2374,6 +2374,17 @@ SCRAM-SHA-256$<iteration count>:&l LC_CTYPE for this collation object + + + + collversion text + + + Provider-specific version of the collation. This is recorded when the + collation is created and then checked when it is used, to detect + changes in the collation definition that could lead to data corruption. + + @@ -3317,18 +3328,6 @@ SCRAM-SHA-256$<iteration count>:&l A code defining the specific semantics of this dependency relationship; see text - - - - refobjversion text - - - An optional version for the referenced object. Currently used for - indexes' collations (see ). - - - - diff --git a/doc/src/sgml/charset.sgml b/doc/src/sgml/charset.sgml index 1c673cc1103a4..98df74d0e1017 100644 --- a/doc/src/sgml/charset.sgml +++ b/doc/src/sgml/charset.sgml @@ -948,54 +948,6 @@ CREATE COLLATION ignore_accents (provider = icu, locale = 'und-u-ks-level1-kc-tr - - - Collation Versions - - - The sort order defined by a collation is not necessarily fixed over time. - PostgreSQL relies on external libraries that - are subject to operating system upgrades, and can also differ between - servers involved in binary replication and file-system-level migration. - Persistent data structures such as B-trees that depend on sort order might - be corrupted by any resulting change. - PostgreSQL defends against this by recording the - current version of each referenced collation for any index that depends on - it in the - pg_depend - catalog, if the collation provider makes that information available. If the - provider later begins to report a different version, a warning will be - issued when the index is accessed, until either the - command or the - command is used to update the version. - - - Version information is available from the - icu provider on all operating systems. For the - libc provider, versions are currently only available - on systems using the GNU C library (most Linux systems), FreeBSD and - Windows. - - - - - When using the GNU C library for collations, the C library's version - is used as a proxy for the collation version. Many Linux distributions - change collation definitions only when upgrading the C library, but this - approach is imperfect as maintainers are free to back-port newer - collation definitions to older C library releases. - - - When using Windows collations, version information is only available for - collations defined with BCP 47 language tags such as - en-US. Currently, initdb selects - a default locale using a traditional Windows language and country - string such as English_United States.1252. The - --lc-collate option can be used to provide an explicit - locale name in BCP 47 format. - - - diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 0b5571460de78..4d1f1794ca336 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -26547,9 +26547,11 @@ postgres=# SELECT * FROM pg_walfile_name_offset(pg_stop_backup()); Returns the actual version of the collation object as it is currently - installed in the operating system. null is returned - on operating systems where PostgreSQL - doesn't have support for versions. + installed in the operating system. If this is different from the + value in + pg_collation.collversion, + then objects depending on the collation might need to be rebuilt. See + also . diff --git a/doc/src/sgml/ref/alter_collation.sgml b/doc/src/sgml/ref/alter_collation.sgml index 65429aabe28b3..af9ff2867b722 100644 --- a/doc/src/sgml/ref/alter_collation.sgml +++ b/doc/src/sgml/ref/alter_collation.sgml @@ -21,6 +21,8 @@ PostgreSQL documentation +ALTER COLLATION name REFRESH VERSION + ALTER COLLATION name RENAME TO new_name ALTER COLLATION name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER COLLATION name SET SCHEMA new_schema @@ -86,9 +88,70 @@ ALTER COLLATION name SET SCHEMA new_sche + + REFRESH VERSION + + + Update the collation's version. + See below. + + + + + Notes + + + When using collations provided by the ICU library, the ICU-specific version + of the collator is recorded in the system catalog when the collation object + is created. When the collation is used, the current version is + checked against the recorded version, and a warning is issued when there is + a mismatch, for example: + +WARNING: collation "xx-x-icu" has version mismatch +DETAIL: The collation in the database was created using version 1.2.3.4, but the operating system provides version 2.3.4.5. +HINT: Rebuild all objects affected by this collation and run ALTER COLLATION pg_catalog."xx-x-icu" REFRESH VERSION, or build PostgreSQL with the right library version. + + A change in collation definitions can lead to corrupt indexes and other + problems because the database system relies on stored objects having a + certain sort order. Generally, this should be avoided, but it can happen + in legitimate circumstances, such as when + using pg_upgrade to upgrade to server binaries linked + with a newer version of ICU. When this happens, all objects depending on + the collation should be rebuilt, for example, + using REINDEX. When that is done, the collation version + can be refreshed using the command ALTER COLLATION ... REFRESH + VERSION. This will update the system catalog to record the + current collator version and will make the warning go away. Note that this + does not actually check whether all affected objects have been rebuilt + correctly. + + + When using collations provided by libc and + PostgreSQL was built with the GNU C library, the + C library's version is used as a collation version. Since collation + definitions typically change only with GNU C library releases, this provides + some defense against corruption, but it is not completely reliable. + + + Currently, there is no version tracking for the database default collation. + + + + The following query can be used to identify all collations in the current + database that need to be refreshed and the objects that depend on them: + pg_collation_actual_version(c.oid) + ORDER BY 1, 2; +]]> + + Examples diff --git a/doc/src/sgml/ref/alter_index.sgml b/doc/src/sgml/ref/alter_index.sgml index 4b446384c262b..e26efec064bee 100644 --- a/doc/src/sgml/ref/alter_index.sgml +++ b/doc/src/sgml/ref/alter_index.sgml @@ -25,7 +25,6 @@ ALTER INDEX [ IF EXISTS ] name RENA ALTER INDEX [ IF EXISTS ] name SET TABLESPACE tablespace_name ALTER INDEX name ATTACH PARTITION index_name ALTER INDEX name [ NO ] DEPENDS ON EXTENSION extension_name -ALTER INDEX name ALTER COLLATION collation_name REFRESH VERSION ALTER INDEX [ IF EXISTS ] name SET ( storage_parameter [= value] [, ... ] ) ALTER INDEX [ IF EXISTS ] name RESET ( storage_parameter [, ... ] ) ALTER INDEX [ IF EXISTS ] name ALTER [ COLUMN ] column_number @@ -113,20 +112,6 @@ ALTER INDEX ALL IN TABLESPACE name - - ALTER COLLATION collation_name REFRESH VERSION - - - Silences warnings about mismatched collation versions, by declaring - that the index is compatible with the current collation definition. - Be aware that incorrect use of this command can hide index corruption. - If you don't know whether a collation's definition has changed - incompatibly, is a safe alternative. - See for more information. - - - - SET ( storage_parameter [= value] [, ... ] ) diff --git a/doc/src/sgml/ref/create_collation.sgml b/doc/src/sgml/ref/create_collation.sgml index b97842071f92f..58f5f0cd63a27 100644 --- a/doc/src/sgml/ref/create_collation.sgml +++ b/doc/src/sgml/ref/create_collation.sgml @@ -27,6 +27,7 @@ CREATE COLLATION [ IF NOT EXISTS ] name ( [ LC_CTYPE = lc_ctype, ] [ PROVIDER = provider, ] [ DETERMINISTIC = boolean, ] + [ VERSION = version ] ) CREATE COLLATION [ IF NOT EXISTS ] name FROM existing_collation @@ -148,6 +149,26 @@ CREATE COLLATION [ IF NOT EXISTS ] name FROM + + version + + + + Specifies the version string to store with the collation. Normally, + this should be omitted, which will cause the version to be computed + from the actual version of the collation as provided by the operating + system. This option is intended to be used + by pg_upgrade for copying the version from an + existing installation. + + + + See also for how to handle + collation version mismatches. + + + + existing_collation diff --git a/doc/src/sgml/ref/pgupgrade.sgml b/doc/src/sgml/ref/pgupgrade.sgml index 4737d97d20203..a83c63cd98f4b 100644 --- a/doc/src/sgml/ref/pgupgrade.sgml +++ b/doc/src/sgml/ref/pgupgrade.sgml @@ -215,21 +215,6 @@ PostgreSQL documentation - - - - - When upgrading indexes from releases before 14 that didn't track - collation versions, pg_upgrade - assumes by default that the upgraded indexes are compatible with the - currently installed versions of relevant collations (see - ). Specify - to mark - them as needing to be rebuilt instead. - - - - diff --git a/doc/src/sgml/ref/reindex.sgml b/doc/src/sgml/ref/reindex.sgml index 53c362dcd3ea4..e6b25ee670f73 100644 --- a/doc/src/sgml/ref/reindex.sgml +++ b/doc/src/sgml/ref/reindex.sgml @@ -40,15 +40,6 @@ REINDEX [ ( option [, ...] ) ] { IN several scenarios in which to use REINDEX: - - - The index depends on the sort order of a collation, and the definition - of the collation has changed. This can cause index scans to fail to - find keys that are present. See for - more information. - - - An index has become corrupted, and no longer contains valid diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index 41093ea6aee0d..259cde33976a4 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -76,7 +76,6 @@ #include "rewrite/rewriteRemove.h" #include "storage/lmgr.h" #include "utils/acl.h" -#include "utils/builtins.h" #include "utils/fmgroids.h" #include "utils/guc.h" #include "utils/lsyscache.h" @@ -435,84 +434,6 @@ performMultipleDeletions(const ObjectAddresses *objects, table_close(depRel, RowExclusiveLock); } -/* - * Call a function for all objects that 'object' depend on. If the function - * returns true, refobjversion will be updated in the catalog. - */ -void -visitDependenciesOf(const ObjectAddress *object, - VisitDependenciesOfCB callback, - void *userdata) -{ - Relation depRel; - ScanKeyData key[3]; - SysScanDesc scan; - HeapTuple tup; - ObjectAddress otherObject; - - ScanKeyInit(&key[0], - Anum_pg_depend_classid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(object->classId)); - ScanKeyInit(&key[1], - Anum_pg_depend_objid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(object->objectId)); - ScanKeyInit(&key[2], - Anum_pg_depend_objsubid, - BTEqualStrategyNumber, F_INT4EQ, - Int32GetDatum(object->objectSubId)); - - depRel = table_open(DependRelationId, RowExclusiveLock); - scan = systable_beginscan(depRel, DependDependerIndexId, true, - NULL, 3, key); - - while (HeapTupleIsValid(tup = systable_getnext(scan))) - { - Form_pg_depend foundDep = (Form_pg_depend) GETSTRUCT(tup); - char *new_version; - Datum depversion; - bool isnull; - - otherObject.classId = foundDep->refclassid; - otherObject.objectId = foundDep->refobjid; - otherObject.objectSubId = foundDep->refobjsubid; - - depversion = heap_getattr(tup, Anum_pg_depend_refobjversion, - RelationGetDescr(depRel), &isnull); - - /* Does the callback want to update the version? */ - if (callback(&otherObject, - isnull ? NULL : TextDatumGetCString(depversion), - &new_version, - userdata)) - { - Datum values[Natts_pg_depend]; - bool nulls[Natts_pg_depend]; - bool replaces[Natts_pg_depend]; - - memset(values, 0, sizeof(values)); - memset(nulls, false, sizeof(nulls)); - memset(replaces, false, sizeof(replaces)); - - if (new_version) - values[Anum_pg_depend_refobjversion - 1] = - CStringGetTextDatum(new_version); - else - nulls[Anum_pg_depend_refobjversion - 1] = true; - replaces[Anum_pg_depend_refobjversion - 1] = true; - - tup = heap_modify_tuple(tup, RelationGetDescr(depRel), values, - nulls, replaces); - CatalogTupleUpdate(depRel, &tup->t_self, tup); - - heap_freetuple(tup); - } - } - systable_endscan(scan); - table_close(depRel, RowExclusiveLock); -} - /* * findDependentObjects - find all objects that depend on 'object' * @@ -1639,38 +1560,6 @@ ReleaseDeletionLock(const ObjectAddress *object) AccessExclusiveLock); } -/* - * Record dependencies on a list of collations, optionally with their current - * version. - */ -void -recordDependencyOnCollations(ObjectAddress *myself, - List *collations, - bool record_version) -{ - ObjectAddresses *addrs; - ListCell *lc; - - if (list_length(collations) == 0) - return; - - addrs = new_object_addresses(); - foreach(lc, collations) - { - ObjectAddress referenced; - - ObjectAddressSet(referenced, CollationRelationId, lfirst_oid(lc)); - - add_exact_object_address(&referenced, addrs); - } - - eliminate_duplicate_dependencies(addrs); - recordMultipleDependencies(myself, addrs->refs, addrs->numrefs, - DEPENDENCY_NORMAL, record_version); - - free_object_addresses(addrs); -} - /* * recordDependencyOnExpr - find expression dependencies * @@ -1705,10 +1594,8 @@ recordDependencyOnExpr(const ObjectAddress *depender, /* And record 'em */ recordMultipleDependencies(depender, - context.addrs->refs, - context.addrs->numrefs, - behavior, - false); + context.addrs->refs, context.addrs->numrefs, + behavior); free_object_addresses(context.addrs); } @@ -1735,8 +1622,7 @@ recordDependencyOnSingleRelExpr(const ObjectAddress *depender, Node *expr, Oid relId, DependencyType behavior, DependencyType self_behavior, - bool reverse_self, - bool record_version) + bool reverse_self) { find_expr_references_context context; RangeTblEntry rte; @@ -1795,10 +1681,8 @@ recordDependencyOnSingleRelExpr(const ObjectAddress *depender, /* Record the self-dependencies with the appropriate direction */ if (!reverse_self) recordMultipleDependencies(depender, - self_addrs->refs, - self_addrs->numrefs, - self_behavior, - record_version); + self_addrs->refs, self_addrs->numrefs, + self_behavior); else { /* Can't use recordMultipleDependencies, so do it the hard way */ @@ -1817,10 +1701,8 @@ recordDependencyOnSingleRelExpr(const ObjectAddress *depender, /* Record the external dependencies */ recordMultipleDependencies(depender, - context.addrs->refs, - context.addrs->numrefs, - behavior, - record_version); + context.addrs->refs, context.addrs->numrefs, + behavior); free_object_addresses(context.addrs); } @@ -1835,17 +1717,8 @@ recordDependencyOnSingleRelExpr(const ObjectAddress *depender, * the datatype. However we do need a type dependency if there is no such * indirect dependency, as for example in Const and CoerceToDomain nodes. * - * Collations are handled primarily by recording the inputcollid's of node - * types that have them, as those are the ones that are semantically - * significant during expression evaluation. We also record the collation of - * CollateExpr nodes, since those will be needed to print such nodes even if - * they don't really affect semantics. Collations of leaf nodes such as Vars - * can be ignored on the grounds that if they're not default, they came from - * the referenced object (e.g., a table column), so the dependency on that - * object is enough. (Note: in a post-const-folding expression tree, a - * CollateExpr's collation could have been absorbed into a Const or - * RelabelType node. While ruleutils.c prints such collations for clarity, - * we may ignore them here as they have no semantic effect.) + * Similarly, we don't need to create dependencies on collations except where + * the collation is being freshly introduced to the expression. */ static bool find_expr_references_walker(Node *node, @@ -1906,6 +1779,17 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_TYPE, con->consttype, 0, context->addrs); + /* + * We must also depend on the constant's collation: it could be + * different from the datatype's, if a CollateExpr was const-folded to + * a simple constant. However we can save work in the most common + * case where the collation is "default", since we know that's pinned. + */ + if (OidIsValid(con->constcollid) && + con->constcollid != DEFAULT_COLLATION_OID) + add_object_address(OCLASS_COLLATION, con->constcollid, 0, + context->addrs); + /* * If it's a regclass or similar literal referring to an existing * object, add a reference to that object. (Currently, only the @@ -1990,6 +1874,11 @@ find_expr_references_walker(Node *node, /* A parameter must depend on the parameter's datatype */ add_object_address(OCLASS_TYPE, param->paramtype, 0, context->addrs); + /* and its collation, just as for Consts */ + if (OidIsValid(param->paramcollid) && + param->paramcollid != DEFAULT_COLLATION_OID) + add_object_address(OCLASS_COLLATION, param->paramcollid, 0, + context->addrs); } else if (IsA(node, FuncExpr)) { @@ -1997,9 +1886,6 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_PROC, funcexpr->funcid, 0, context->addrs); - if (OidIsValid(funcexpr->inputcollid)) - add_object_address(OCLASS_COLLATION, funcexpr->inputcollid, 0, - context->addrs); /* fall through to examine arguments */ } else if (IsA(node, OpExpr)) @@ -2008,9 +1894,6 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_OPERATOR, opexpr->opno, 0, context->addrs); - if (OidIsValid(opexpr->inputcollid)) - add_object_address(OCLASS_COLLATION, opexpr->inputcollid, 0, - context->addrs); /* fall through to examine arguments */ } else if (IsA(node, DistinctExpr)) @@ -2019,9 +1902,6 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_OPERATOR, distinctexpr->opno, 0, context->addrs); - if (OidIsValid(distinctexpr->inputcollid)) - add_object_address(OCLASS_COLLATION, distinctexpr->inputcollid, 0, - context->addrs); /* fall through to examine arguments */ } else if (IsA(node, NullIfExpr)) @@ -2030,9 +1910,6 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_OPERATOR, nullifexpr->opno, 0, context->addrs); - if (OidIsValid(nullifexpr->inputcollid)) - add_object_address(OCLASS_COLLATION, nullifexpr->inputcollid, 0, - context->addrs); /* fall through to examine arguments */ } else if (IsA(node, ScalarArrayOpExpr)) @@ -2041,9 +1918,6 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_OPERATOR, opexpr->opno, 0, context->addrs); - if (OidIsValid(opexpr->inputcollid)) - add_object_address(OCLASS_COLLATION, opexpr->inputcollid, 0, - context->addrs); /* fall through to examine arguments */ } else if (IsA(node, Aggref)) @@ -2052,9 +1926,6 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_PROC, aggref->aggfnoid, 0, context->addrs); - if (OidIsValid(aggref->inputcollid)) - add_object_address(OCLASS_COLLATION, aggref->inputcollid, 0, - context->addrs); /* fall through to examine arguments */ } else if (IsA(node, WindowFunc)) @@ -2063,9 +1934,6 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_PROC, wfunc->winfnoid, 0, context->addrs); - if (OidIsValid(wfunc->inputcollid)) - add_object_address(OCLASS_COLLATION, wfunc->inputcollid, 0, - context->addrs); /* fall through to examine arguments */ } else if (IsA(node, SubscriptingRef)) @@ -2110,6 +1978,11 @@ find_expr_references_walker(Node *node, else add_object_address(OCLASS_TYPE, fselect->resulttype, 0, context->addrs); + /* the collation might not be referenced anywhere else, either */ + if (OidIsValid(fselect->resultcollid) && + fselect->resultcollid != DEFAULT_COLLATION_OID) + add_object_address(OCLASS_COLLATION, fselect->resultcollid, 0, + context->addrs); } else if (IsA(node, FieldStore)) { @@ -2136,6 +2009,11 @@ find_expr_references_walker(Node *node, /* since there is no function dependency, need to depend on type */ add_object_address(OCLASS_TYPE, relab->resulttype, 0, context->addrs); + /* the collation might not be referenced anywhere else, either */ + if (OidIsValid(relab->resultcollid) && + relab->resultcollid != DEFAULT_COLLATION_OID) + add_object_address(OCLASS_COLLATION, relab->resultcollid, 0, + context->addrs); } else if (IsA(node, CoerceViaIO)) { @@ -2144,6 +2022,11 @@ find_expr_references_walker(Node *node, /* since there is no exposed function, need to depend on type */ add_object_address(OCLASS_TYPE, iocoerce->resulttype, 0, context->addrs); + /* the collation might not be referenced anywhere else, either */ + if (OidIsValid(iocoerce->resultcollid) && + iocoerce->resultcollid != DEFAULT_COLLATION_OID) + add_object_address(OCLASS_COLLATION, iocoerce->resultcollid, 0, + context->addrs); } else if (IsA(node, ArrayCoerceExpr)) { @@ -2152,6 +2035,11 @@ find_expr_references_walker(Node *node, /* as above, depend on type */ add_object_address(OCLASS_TYPE, acoerce->resulttype, 0, context->addrs); + /* the collation might not be referenced anywhere else, either */ + if (OidIsValid(acoerce->resultcollid) && + acoerce->resultcollid != DEFAULT_COLLATION_OID) + add_object_address(OCLASS_COLLATION, acoerce->resultcollid, 0, + context->addrs); /* fall through to examine arguments */ } else if (IsA(node, ConvertRowtypeExpr)) @@ -2191,24 +2079,6 @@ find_expr_references_walker(Node *node, add_object_address(OCLASS_OPFAMILY, lfirst_oid(l), 0, context->addrs); } - foreach(l, rcexpr->inputcollids) - { - Oid inputcollid = lfirst_oid(l); - - if (OidIsValid(inputcollid)) - add_object_address(OCLASS_COLLATION, inputcollid, 0, - context->addrs); - } - /* fall through to examine arguments */ - } - else if (IsA(node, MinMaxExpr)) - { - MinMaxExpr *mmexpr = (MinMaxExpr *) node; - - /* minmaxtype will match one of the inputs, so no need to record it */ - if (OidIsValid(mmexpr->inputcollid)) - add_object_address(OCLASS_COLLATION, mmexpr->inputcollid, 0, - context->addrs); /* fall through to examine arguments */ } else if (IsA(node, CoerceToDomain)) @@ -2255,7 +2125,8 @@ find_expr_references_walker(Node *node, if (OidIsValid(wc->endInRangeFunc)) add_object_address(OCLASS_PROC, wc->endInRangeFunc, 0, context->addrs); - if (OidIsValid(wc->inRangeColl)) + if (OidIsValid(wc->inRangeColl) && + wc->inRangeColl != DEFAULT_COLLATION_OID) add_object_address(OCLASS_COLLATION, wc->inRangeColl, 0, context->addrs); /* fall through to examine substructure */ @@ -2415,7 +2286,7 @@ find_expr_references_walker(Node *node, { Oid collid = lfirst_oid(ct); - if (OidIsValid(collid)) + if (OidIsValid(collid) && collid != DEFAULT_COLLATION_OID) add_object_address(OCLASS_COLLATION, collid, 0, context->addrs); } @@ -2437,7 +2308,7 @@ find_expr_references_walker(Node *node, { Oid collid = lfirst_oid(ct); - if (OidIsValid(collid)) + if (OidIsValid(collid) && collid != DEFAULT_COLLATION_OID) add_object_address(OCLASS_COLLATION, collid, 0, context->addrs); } @@ -2834,8 +2705,7 @@ record_object_address_dependencies(const ObjectAddress *depender, eliminate_duplicate_dependencies(referenced); recordMultipleDependencies(depender, referenced->refs, referenced->numrefs, - behavior, - false); + behavior); } /* diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 42ff175bc80a2..431e62e389726 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -2357,7 +2357,7 @@ StoreAttrDefault(Relation rel, AttrNumber attnum, */ recordDependencyOnSingleRelExpr(&colobject, expr, RelationGetRelid(rel), DEPENDENCY_AUTO, - DEPENDENCY_AUTO, false, false); + DEPENDENCY_AUTO, false); } else { @@ -2367,7 +2367,7 @@ StoreAttrDefault(Relation rel, AttrNumber attnum, */ recordDependencyOnSingleRelExpr(&defobject, expr, RelationGetRelid(rel), DEPENDENCY_NORMAL, - DEPENDENCY_NORMAL, false, false); + DEPENDENCY_NORMAL, false); } /* @@ -3729,8 +3729,7 @@ StorePartitionKey(Relation rel, RelationGetRelid(rel), DEPENDENCY_NORMAL, DEPENDENCY_INTERNAL, - true /* reverse the self-deps */ , - false /* don't track versions */ ); + true /* reverse the self-deps */ ); /* * We must invalidate the relcache so that the next diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index a628b3281ce8e..8ded2b53d4c74 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -54,7 +54,6 @@ #include "catalog/pg_trigger.h" #include "catalog/pg_type.h" #include "catalog/storage.h" -#include "commands/defrem.h" #include "commands/event_trigger.h" #include "commands/progress.h" #include "commands/tablecmds.h" @@ -78,7 +77,6 @@ #include "utils/guc.h" #include "utils/inval.h" #include "utils/lsyscache.h" -#include "utils/pg_locale.h" #include "utils/memutils.h" #include "utils/pg_rusage.h" #include "utils/rel.h" @@ -1034,8 +1032,6 @@ index_create(Relation heapRelation, ObjectAddress myself, referenced; ObjectAddresses *addrs; - List *colls = NIL, - *colls_no_version = NIL; ObjectAddressSet(myself, RelationRelationId, indexRelationId); @@ -1119,65 +1115,30 @@ index_create(Relation heapRelation, recordDependencyOn(&myself, &referenced, DEPENDENCY_PARTITION_SEC); } - /* Get dependencies on collations for all index keys. */ - for (i = 0; i < indexInfo->ii_NumIndexKeyAttrs; i++) - { - Oid colloid = collationObjectId[i]; + /* placeholder for normal dependencies */ + addrs = new_object_addresses(); - if (OidIsValid(colloid)) - { - Oid opclass = classObjectId[i]; + /* Store dependency on collations */ - /* - * The *_pattern_ops opclasses are special: they explicitly do - * not depend on collation order so we can save some effort. - * - * XXX With more analysis, we could also skip version tracking - * for some cases like hash indexes with deterministic - * collations, because they will never need to order strings. - */ - if (opclass == TEXT_BTREE_PATTERN_OPS_OID || - opclass == VARCHAR_BTREE_PATTERN_OPS_OID || - opclass == BPCHAR_BTREE_PATTERN_OPS_OID) - colls_no_version = lappend_oid(colls_no_version, colloid); - else - colls = lappend_oid(colls, colloid); - } - else + /* The default collation is pinned, so don't bother recording it */ + for (i = 0; i < indexInfo->ii_NumIndexKeyAttrs; i++) + { + if (OidIsValid(collationObjectId[i]) && + collationObjectId[i] != DEFAULT_COLLATION_OID) { - Form_pg_attribute att = TupleDescAttr(indexTupDesc, i); - - Assert(i < indexTupDesc->natts); - - /* - * Even though there is no top-level collation, there may be - * collations affecting ordering inside types, so look there - * too. - */ - colls = list_concat(colls, GetTypeCollations(att->atttypid)); + ObjectAddressSet(referenced, CollationRelationId, + collationObjectId[i]); + add_exact_object_address(&referenced, addrs); } } - /* - * If we have anything in both lists, keep just the versioned one to - * avoid some duplication. - */ - if (colls_no_version != NIL && colls != NIL) - colls_no_version = list_difference_oid(colls_no_version, colls); - - /* Store the versioned and unversioned collation dependencies. */ - if (colls_no_version != NIL) - recordDependencyOnCollations(&myself, colls_no_version, false); - if (colls != NIL) - recordDependencyOnCollations(&myself, colls, true); - /* Store dependency on operator classes */ - addrs = new_object_addresses(); for (i = 0; i < indexInfo->ii_NumIndexKeyAttrs; i++) { ObjectAddressSet(referenced, OperatorClassRelationId, classObjectId[i]); add_exact_object_address(&referenced, addrs); } + record_object_address_dependencies(&myself, addrs, DEPENDENCY_NORMAL); free_object_addresses(addrs); @@ -1188,7 +1149,7 @@ index_create(Relation heapRelation, (Node *) indexInfo->ii_Expressions, heapRelationId, DEPENDENCY_NORMAL, - DEPENDENCY_AUTO, false, true); + DEPENDENCY_AUTO, false); } /* Store dependencies on anything mentioned in predicate */ @@ -1198,7 +1159,7 @@ index_create(Relation heapRelation, (Node *) indexInfo->ii_Predicate, heapRelationId, DEPENDENCY_NORMAL, - DEPENDENCY_AUTO, false, true); + DEPENDENCY_AUTO, false); } } else @@ -1277,130 +1238,6 @@ index_create(Relation heapRelation, return indexRelationId; } -typedef struct do_collation_version_check_context -{ - Oid relid; - List *warned_colls; -} do_collation_version_check_context; - -/* - * Raise a warning if the recorded and current collation version don't match. - * This is a callback for visitDependenciesOf(). - */ -static bool -do_collation_version_check(const ObjectAddress *otherObject, - const char *version, - char **new_version, - void *data) -{ - do_collation_version_check_context *context = data; - char *current_version; - - /* We only care about dependencies on collations with a version. */ - if (!version || otherObject->classId != CollationRelationId) - return false; - - /* Ask the provider for the current version. Give up if unsupported. */ - current_version = get_collation_version_for_oid(otherObject->objectId, - false); - if (!current_version) - return false; - - /* - * We don't expect too many duplicates, but it's possible, and we don't - * want to generate duplicate warnings. - */ - if (list_member_oid(context->warned_colls, otherObject->objectId)) - return false; - - /* Do they match? */ - if (strcmp(current_version, version) != 0) - { - /* - * The version has changed, probably due to an OS/library upgrade or - * streaming replication between different OS/library versions. - */ - ereport(WARNING, - (errmsg("index \"%s\" depends on collation \"%s\" version \"%s\", but the current version is \"%s\"", - get_rel_name(context->relid), - get_collation_name(otherObject->objectId), - version, - current_version), - errdetail("The index may be corrupted due to changes in sort order."), - errhint("REINDEX to avoid the risk of corruption."))); - - /* Remember not to complain about this collation again. */ - context->warned_colls = lappend_oid(context->warned_colls, - otherObject->objectId); - } - - return false; -} - -/* index_check_collation_versions - * Check the collation version for all dependencies on the given index. - */ -void -index_check_collation_versions(Oid relid) -{ - do_collation_version_check_context context; - ObjectAddress object; - - /* - * The callback needs the relid for error messages, and some scratch space - * to avoid duplicate warnings. - */ - context.relid = relid; - context.warned_colls = NIL; - - object.classId = RelationRelationId; - object.objectId = relid; - object.objectSubId = 0; - - visitDependenciesOf(&object, &do_collation_version_check, &context); - - list_free(context.warned_colls); -} - -/* - * Update the version for collations. A callback for visitDependenciesOf(). - */ -static bool -do_collation_version_update(const ObjectAddress *otherObject, - const char *version, - char **new_version, - void *data) -{ - Oid *coll = data; - - /* We only care about dependencies on collations with versions. */ - if (!version || otherObject->classId != CollationRelationId) - return false; - - /* If we're only trying to update one collation, skip others. */ - if (OidIsValid(*coll) && otherObject->objectId != *coll) - return false; - - *new_version = get_collation_version_for_oid(otherObject->objectId, false); - - return true; -} - -/* - * Record the current versions of one or all collations that an index depends - * on. InvalidOid means all. - */ -void -index_update_collation_versions(Oid relid, Oid coll) -{ - ObjectAddress object; - - object.classId = RelationRelationId; - object.objectId = relid; - object.objectSubId = 0; - visitDependenciesOf(&object, &do_collation_version_update, &coll); -} - /* * index_concurrently_create_copy * @@ -1864,10 +1701,6 @@ index_concurrently_swap(Oid newIndexId, Oid oldIndexId, const char *oldName) changeDependenciesOf(RelationRelationId, oldIndexId, newIndexId); changeDependenciesOn(RelationRelationId, oldIndexId, newIndexId); - /* Now we have the old index's collation versions, so fix that. */ - CommandCounterIncrement(); - index_update_collation_versions(newIndexId, InvalidOid); - /* * Copy over statistics from old to new index */ @@ -3921,9 +3754,6 @@ reindex_index(Oid indexId, bool skip_constraint_checks, char persistence, /* Close rels, but keep locks */ index_close(iRel, NoLock); table_close(heapRelation, NoLock); - - /* Record the current versions of all depended-on collations. */ - index_update_collation_versions(indexId, InvalidOid); } /* diff --git a/src/backend/catalog/pg_collation.c b/src/backend/catalog/pg_collation.c index 40d98a334a6e9..19068b652a0b2 100644 --- a/src/backend/catalog/pg_collation.c +++ b/src/backend/catalog/pg_collation.c @@ -49,6 +49,7 @@ CollationCreate(const char *collname, Oid collnamespace, bool collisdeterministic, int32 collencoding, const char *collcollate, const char *collctype, + const char *collversion, bool if_not_exists, bool quiet) { @@ -166,6 +167,10 @@ CollationCreate(const char *collname, Oid collnamespace, values[Anum_pg_collation_collcollate - 1] = NameGetDatum(&name_collate); namestrcpy(&name_ctype, collctype); values[Anum_pg_collation_collctype - 1] = NameGetDatum(&name_ctype); + if (collversion) + values[Anum_pg_collation_collversion - 1] = CStringGetTextDatum(collversion); + else + nulls[Anum_pg_collation_collversion - 1] = true; tup = heap_form_tuple(tupDesc, values, nulls); diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c index 0081558c48ad3..a4e890020ff4b 100644 --- a/src/backend/catalog/pg_constraint.c +++ b/src/backend/catalog/pg_constraint.c @@ -362,7 +362,7 @@ CreateConstraintEntry(const char *constraintName, */ recordDependencyOnSingleRelExpr(&conobject, conExpr, relId, DEPENDENCY_NORMAL, - DEPENDENCY_NORMAL, false, true); + DEPENDENCY_NORMAL, false); } /* Post creation hook for new constraint */ diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c index 1217c01b8ae98..54688094f5848 100644 --- a/src/backend/catalog/pg_depend.c +++ b/src/backend/catalog/pg_depend.c @@ -19,16 +19,13 @@ #include "access/table.h" #include "catalog/dependency.h" #include "catalog/indexing.h" -#include "catalog/pg_collation.h" #include "catalog/pg_constraint.h" #include "catalog/pg_depend.h" #include "catalog/pg_extension.h" #include "commands/extension.h" #include "miscadmin.h" -#include "utils/builtins.h" #include "utils/fmgroids.h" #include "utils/lsyscache.h" -#include "utils/pg_locale.h" #include "utils/rel.h" @@ -47,24 +44,18 @@ recordDependencyOn(const ObjectAddress *depender, const ObjectAddress *referenced, DependencyType behavior) { - recordMultipleDependencies(depender, referenced, 1, behavior, false); + recordMultipleDependencies(depender, referenced, 1, behavior); } /* * Record multiple dependencies (of the same kind) for a single dependent * object. This has a little less overhead than recording each separately. - * - * If record_version is true, then a record is added even if the referenced - * object is pinned, and the dependency version will be retrieved according to - * the referenced object kind. For now, only collation version is - * supported. */ void recordMultipleDependencies(const ObjectAddress *depender, const ObjectAddress *referenced, int nreferenced, - DependencyType behavior, - bool record_version) + DependencyType behavior) { Relation dependDesc; CatalogIndexState indstate; @@ -103,30 +94,12 @@ recordMultipleDependencies(const ObjectAddress *depender, slot_init_count = 0; for (i = 0; i < nreferenced; i++, referenced++) { - char *version = NULL; - - if (record_version) - { - /* For now we only know how to deal with collations. */ - if (referenced->classId == CollationRelationId) - { - /* These are unversioned, so don't waste cycles on them. */ - if (referenced->objectId == C_COLLATION_OID || - referenced->objectId == POSIX_COLLATION_OID) - continue; - - version = get_collation_version_for_oid(referenced->objectId, - false); - } - } - /* * If the referenced object is pinned by the system, there's no real - * need to record dependencies on it, unless we need to record a - * version. This saves lots of space in pg_depend, so it's worth the - * time taken to check. + * need to record dependencies on it. This saves lots of space in + * pg_depend, so it's worth the time taken to check. */ - if (version == NULL && isObjectPinned(referenced, dependDesc)) + if (isObjectPinned(referenced, dependDesc)) continue; if (slot_init_count < max_slots) @@ -142,9 +115,6 @@ recordMultipleDependencies(const ObjectAddress *depender, * Record the dependency. Note we don't bother to check for duplicate * dependencies; there's no harm in them. */ - memset(slot[slot_stored_count]->tts_isnull, false, - slot[slot_stored_count]->tts_tupleDescriptor->natts * sizeof(bool)); - slot[slot_stored_count]->tts_values[Anum_pg_depend_refclassid - 1] = ObjectIdGetDatum(referenced->classId); slot[slot_stored_count]->tts_values[Anum_pg_depend_refobjid - 1] = ObjectIdGetDatum(referenced->objectId); slot[slot_stored_count]->tts_values[Anum_pg_depend_refobjsubid - 1] = Int32GetDatum(referenced->objectSubId); @@ -152,10 +122,9 @@ recordMultipleDependencies(const ObjectAddress *depender, slot[slot_stored_count]->tts_values[Anum_pg_depend_classid - 1] = ObjectIdGetDatum(depender->classId); slot[slot_stored_count]->tts_values[Anum_pg_depend_objid - 1] = ObjectIdGetDatum(depender->objectId); slot[slot_stored_count]->tts_values[Anum_pg_depend_objsubid - 1] = Int32GetDatum(depender->objectSubId); - if (version) - slot[slot_stored_count]->tts_values[Anum_pg_depend_refobjversion - 1] = CStringGetTextDatum(version); - else - slot[slot_stored_count]->tts_isnull[Anum_pg_depend_refobjversion - 1] = true; + + memset(slot[slot_stored_count]->tts_isnull, false, + slot[slot_stored_count]->tts_tupleDescriptor->natts * sizeof(bool)); ExecStoreVirtualTuple(slot[slot_stored_count]); slot_stored_count++; diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c index dc9d28a32c572..da65584476b18 100644 --- a/src/backend/catalog/pg_type.c +++ b/src/backend/catalog/pg_type.c @@ -15,7 +15,6 @@ #include "postgres.h" #include "access/htup_details.h" -#include "access/relation.h" #include "access/table.h" #include "access/xact.h" #include "catalog/binary_upgrade.h" @@ -520,74 +519,6 @@ TypeCreate(Oid newTypeOid, return address; } -/* - * Get a list of all distinct collations that the given type depends on. - */ -List * -GetTypeCollations(Oid typeoid) -{ - List *result = NIL; - HeapTuple tuple; - Form_pg_type typeTup; - - tuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typeoid)); - if (!HeapTupleIsValid(tuple)) - elog(ERROR, "cache lookup failed for type %u", typeoid); - typeTup = (Form_pg_type) GETSTRUCT(tuple); - - /* - * If the type has a typcollation attribute, report that and we're done. - * Otherwise, it could be a container type that we should recurse into. - */ - if (OidIsValid(typeTup->typcollation)) - result = list_make1_oid(typeTup->typcollation); - else if (typeTup->typtype == TYPTYPE_COMPOSITE) - { - Relation rel = relation_open(typeTup->typrelid, AccessShareLock); - TupleDesc desc = RelationGetDescr(rel); - - for (int i = 0; i < RelationGetNumberOfAttributes(rel); i++) - { - Form_pg_attribute att = TupleDescAttr(desc, i); - - if (att->attisdropped) - continue; - if (OidIsValid(att->attcollation)) - result = list_append_unique_oid(result, att->attcollation); - else - result = list_concat_unique_oid(result, - GetTypeCollations(att->atttypid)); - } - - relation_close(rel, NoLock); - } - else if (typeTup->typtype == TYPTYPE_DOMAIN) - { - Assert(OidIsValid(typeTup->typbasetype)); - result = GetTypeCollations(typeTup->typbasetype); - } - else if (typeTup->typtype == TYPTYPE_RANGE) - { - Oid rangecoll = get_range_collation(typeTup->oid); - - if (OidIsValid(rangecoll)) - result = list_make1_oid(rangecoll); - else - { - Oid rangeid = get_range_subtype(typeTup->oid); - - Assert(OidIsValid(rangeid)); - result = GetTypeCollations(rangeid); - } - } - else if (IsTrueArrayType(typeTup)) - result = GetTypeCollations(typeTup->typelem); - - ReleaseSysCache(tuple); - - return result; -} - /* * GenerateTypeDependencies: build the dependencies needed for a type * diff --git a/src/backend/commands/collationcmds.c b/src/backend/commands/collationcmds.c index b8ec6f5756417..ebb0994db32af 100644 --- a/src/backend/commands/collationcmds.c +++ b/src/backend/commands/collationcmds.c @@ -62,12 +62,14 @@ DefineCollation(ParseState *pstate, List *names, List *parameters, bool if_not_e DefElem *lcctypeEl = NULL; DefElem *providerEl = NULL; DefElem *deterministicEl = NULL; + DefElem *versionEl = NULL; char *collcollate = NULL; char *collctype = NULL; char *collproviderstr = NULL; bool collisdeterministic = true; int collencoding = 0; char collprovider = 0; + char *collversion = NULL; Oid newoid; ObjectAddress address; @@ -95,6 +97,8 @@ DefineCollation(ParseState *pstate, List *names, List *parameters, bool if_not_e defelp = &providerEl; else if (strcmp(defel->defname, "deterministic") == 0) defelp = &deterministicEl; + else if (strcmp(defel->defname, "version") == 0) + defelp = &versionEl; else { ereport(ERROR, @@ -163,6 +167,9 @@ DefineCollation(ParseState *pstate, List *names, List *parameters, bool if_not_e if (deterministicEl) collisdeterministic = defGetBoolean(deterministicEl); + if (versionEl) + collversion = defGetString(versionEl); + if (collproviderstr) { if (pg_strcasecmp(collproviderstr, "icu") == 0) @@ -209,6 +216,9 @@ DefineCollation(ParseState *pstate, List *names, List *parameters, bool if_not_e } } + if (!collversion) + collversion = get_collation_actual_version(collprovider, collcollate); + newoid = CollationCreate(collName, collNamespace, GetUserId(), @@ -217,6 +227,7 @@ DefineCollation(ParseState *pstate, List *names, List *parameters, bool if_not_e collencoding, collcollate, collctype, + collversion, if_not_exists, false); /* not quiet */ @@ -267,13 +278,101 @@ IsThereCollationInNamespace(const char *collname, Oid nspOid) collname, get_namespace_name(nspOid)))); } +/* + * ALTER COLLATION + */ +ObjectAddress +AlterCollation(AlterCollationStmt *stmt) +{ + Relation rel; + Oid collOid; + HeapTuple tup; + Form_pg_collation collForm; + Datum collversion; + bool isnull; + char *oldversion; + char *newversion; + ObjectAddress address; + + rel = table_open(CollationRelationId, RowExclusiveLock); + collOid = get_collation_oid(stmt->collname, false); + + if (!pg_collation_ownercheck(collOid, GetUserId())) + aclcheck_error(ACLCHECK_NOT_OWNER, OBJECT_COLLATION, + NameListToString(stmt->collname)); + + tup = SearchSysCacheCopy1(COLLOID, ObjectIdGetDatum(collOid)); + if (!HeapTupleIsValid(tup)) + elog(ERROR, "cache lookup failed for collation %u", collOid); + + collForm = (Form_pg_collation) GETSTRUCT(tup); + collversion = SysCacheGetAttr(COLLOID, tup, Anum_pg_collation_collversion, + &isnull); + oldversion = isnull ? NULL : TextDatumGetCString(collversion); + + newversion = get_collation_actual_version(collForm->collprovider, NameStr(collForm->collcollate)); + + /* cannot change from NULL to non-NULL or vice versa */ + if ((!oldversion && newversion) || (oldversion && !newversion)) + elog(ERROR, "invalid collation version change"); + else if (oldversion && newversion && strcmp(newversion, oldversion) != 0) + { + bool nulls[Natts_pg_collation]; + bool replaces[Natts_pg_collation]; + Datum values[Natts_pg_collation]; + + ereport(NOTICE, + (errmsg("changing version from %s to %s", + oldversion, newversion))); + + memset(values, 0, sizeof(values)); + memset(nulls, false, sizeof(nulls)); + memset(replaces, false, sizeof(replaces)); + + values[Anum_pg_collation_collversion - 1] = CStringGetTextDatum(newversion); + replaces[Anum_pg_collation_collversion - 1] = true; + + tup = heap_modify_tuple(tup, RelationGetDescr(rel), + values, nulls, replaces); + } + else + ereport(NOTICE, + (errmsg("version has not changed"))); + + CatalogTupleUpdate(rel, &tup->t_self, tup); + + InvokeObjectPostAlterHook(CollationRelationId, collOid, 0); + + ObjectAddressSet(address, CollationRelationId, collOid); + + heap_freetuple(tup); + table_close(rel, NoLock); + + return address; +} + + Datum pg_collation_actual_version(PG_FUNCTION_ARGS) { Oid collid = PG_GETARG_OID(0); + HeapTuple tp; + char *collcollate; + char collprovider; char *version; - version = get_collation_version_for_oid(collid, true); + tp = SearchSysCache1(COLLOID, ObjectIdGetDatum(collid)); + if (!HeapTupleIsValid(tp)) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("collation with OID %u does not exist", collid))); + + collcollate = pstrdup(NameStr(((Form_pg_collation) GETSTRUCT(tp))->collcollate)); + collprovider = ((Form_pg_collation) GETSTRUCT(tp))->collprovider; + + ReleaseSysCache(tp); + + version = get_collation_actual_version(collprovider, collcollate); if (version) PG_RETURN_TEXT_P(cstring_to_text(version)); @@ -495,6 +594,7 @@ pg_import_system_collations(PG_FUNCTION_ARGS) collid = CollationCreate(localebuf, nspid, GetUserId(), COLLPROVIDER_LIBC, true, enc, localebuf, localebuf, + get_collation_actual_version(COLLPROVIDER_LIBC, localebuf), true, true); if (OidIsValid(collid)) { @@ -555,6 +655,7 @@ pg_import_system_collations(PG_FUNCTION_ARGS) collid = CollationCreate(alias, nspid, GetUserId(), COLLPROVIDER_LIBC, true, enc, locale, locale, + get_collation_actual_version(COLLPROVIDER_LIBC, locale), true, true); if (OidIsValid(collid)) { @@ -616,6 +717,7 @@ pg_import_system_collations(PG_FUNCTION_ARGS) nspid, GetUserId(), COLLPROVIDER_ICU, true, -1, collcollate, collcollate, + get_collation_actual_version(COLLPROVIDER_ICU, collcollate), true, true); if (OidIsValid(collid)) { diff --git a/src/backend/commands/statscmds.c b/src/backend/commands/statscmds.c index df4768952d5b8..acae19176c01d 100644 --- a/src/backend/commands/statscmds.c +++ b/src/backend/commands/statscmds.c @@ -555,7 +555,7 @@ CreateStatistics(CreateStatsStmt *stmt) (Node *) stxexprs, relid, DEPENDENCY_NORMAL, - DEPENDENCY_AUTO, false, true); + DEPENDENCY_AUTO, false); /* * Also add dependencies on namespace and owner. These are required diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 0da61784d7a19..3b5d411683918 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -94,7 +94,6 @@ #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/partcache.h" -#include "utils/pg_locale.h" #include "utils/relcache.h" #include "utils/ruleutils.h" #include "utils/snapmgr.h" @@ -602,7 +601,6 @@ static void refuseDupeIndexAttach(Relation parentIdx, Relation partIdx, Relation partitionTbl); static List *GetParentedForeignKeyRefs(Relation partition); static void ATDetachCheckNoForeignKeyRefs(Relation partition); -static void ATExecAlterCollationRefreshVersion(Relation rel, List *coll); static char GetAttributeCompression(Form_pg_attribute att, char *compression); @@ -4333,10 +4331,6 @@ AlterTableGetLockLevel(List *cmds) cmd_lockmode = AccessShareLock; break; - case AT_AlterCollationRefreshVersion: - cmd_lockmode = AccessExclusiveLock; - break; - default: /* oops */ elog(ERROR, "unrecognized alter table type: %d", (int) cmd->subtype); @@ -4524,12 +4518,6 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, /* This command never recurses */ pass = AT_PASS_MISC; break; - case AT_AlterCollationRefreshVersion: /* ALTER COLLATION ... REFRESH - * VERSION */ - ATSimplePermissions(rel, ATT_INDEX); - /* This command never recurses */ - pass = AT_PASS_MISC; - break; case AT_SetStorage: /* ALTER COLUMN SET STORAGE */ ATSimplePermissions(rel, ATT_TABLE | ATT_MATVIEW | ATT_FOREIGN_TABLE); ATSimpleRecursion(wqueue, rel, cmd, recurse, lockmode, context); @@ -5139,11 +5127,6 @@ ATExecCmd(List **wqueue, AlteredTableInfo *tab, case AT_DetachPartitionFinalize: ATExecDetachPartitionFinalize(rel, ((PartitionCmd *) cmd->def)->name); break; - case AT_AlterCollationRefreshVersion: - /* ATPrepCmd ensured it must be an index */ - Assert(rel->rd_rel->relkind == RELKIND_INDEX); - ATExecAlterCollationRefreshVersion(rel, cmd->object); - break; default: /* oops */ elog(ERROR, "unrecognized alter table type: %d", (int) cmd->subtype); @@ -18626,20 +18609,6 @@ ATDetachCheckNoForeignKeyRefs(Relation partition) } } -/* - * ALTER INDEX ... ALTER COLLATION ... REFRESH VERSION - * - * Update refobjversion to the current collation version by force. This clears - * warnings about version mismatches without the need to run REINDEX, - * potentially hiding corruption due to ordering changes. - */ -static void -ATExecAlterCollationRefreshVersion(Relation rel, List *coll) -{ - index_update_collation_versions(rel->rd_id, get_collation_oid(coll, false)); - CacheInvalidateRelcache(rel); -} - /* * resolve column compression specification to compression method. */ diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 632cc31a045e2..f5a7760740f56 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -3347,7 +3347,6 @@ _copyAlterTableCmd(const AlterTableCmd *from) COPY_SCALAR_FIELD(subtype); COPY_STRING_FIELD(name); - COPY_NODE_FIELD(object); COPY_SCALAR_FIELD(num); COPY_NODE_FIELD(newowner); COPY_NODE_FIELD(def); @@ -3357,6 +3356,16 @@ _copyAlterTableCmd(const AlterTableCmd *from) return newnode; } +static AlterCollationStmt * +_copyAlterCollationStmt(const AlterCollationStmt *from) +{ + AlterCollationStmt *newnode = makeNode(AlterCollationStmt); + + COPY_NODE_FIELD(collname); + + return newnode; +} + static AlterDomainStmt * _copyAlterDomainStmt(const AlterDomainStmt *from) { @@ -5369,6 +5378,9 @@ copyObjectImpl(const void *from) case T_AlterTableCmd: retval = _copyAlterTableCmd(from); break; + case T_AlterCollationStmt: + retval = _copyAlterCollationStmt(from); + break; case T_AlterDomainStmt: retval = _copyAlterDomainStmt(from); break; diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index a410a29a178d5..ce76d093dda3f 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -1140,6 +1140,14 @@ _equalAlterTableCmd(const AlterTableCmd *a, const AlterTableCmd *b) return true; } +static bool +_equalAlterCollationStmt(const AlterCollationStmt *a, const AlterCollationStmt *b) +{ + COMPARE_NODE_FIELD(collname); + + return true; +} + static bool _equalAlterDomainStmt(const AlterDomainStmt *a, const AlterDomainStmt *b) { @@ -3362,6 +3370,9 @@ equal(const void *a, const void *b) case T_AlterTableCmd: retval = _equalAlterTableCmd(a, b); break; + case T_AlterCollationStmt: + retval = _equalAlterCollationStmt(a, b); + break; case T_AlterDomainStmt: retval = _equalAlterDomainStmt(a, b); break; diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index 295ce114506ce..c5194fdbbf23b 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -27,7 +27,6 @@ #include "access/xlog.h" #include "catalog/catalog.h" #include "catalog/heap.h" -#include "catalog/index.h" #include "catalog/pg_am.h" #include "catalog/pg_proc.h" #include "catalog/pg_statistic_ext.h" @@ -199,14 +198,6 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent, indexRelation = index_open(indexoid, lmode); index = indexRelation->rd_index; - /* Warn if any dependent collations' versions have moved. */ - if (!IsSystemRelation(relation) && - !indexRelation->rd_version_checked) - { - index_check_collation_versions(indexoid); - indexRelation->rd_version_checked = true; - } - /* * Ignore invalid indexes, since they can't safely be used for * queries. Note that this is OK because the data structure we diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index b4ab4014c8737..aaf1a51f685ae 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -263,7 +263,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); } %type stmt toplevel_stmt schema_stmt routine_body_stmt - AlterEventTrigStmt + AlterEventTrigStmt AlterCollationStmt AlterDatabaseStmt AlterDatabaseSetStmt AlterDomainStmt AlterEnumStmt AlterFdwStmt AlterForeignServerStmt AlterGroupStmt AlterObjectDependsStmt AlterObjectSchemaStmt AlterOwnerStmt @@ -902,6 +902,7 @@ toplevel_stmt: stmt: AlterEventTrigStmt + | AlterCollationStmt | AlterDatabaseStmt | AlterDatabaseSetStmt | AlterDefaultPrivilegesStmt @@ -2682,14 +2683,6 @@ alter_table_cmd: n->subtype = AT_NoForceRowSecurity; $$ = (Node *)n; } - /* ALTER INDEX ALTER COLLATION ... REFRESH VERSION */ - | ALTER COLLATION any_name REFRESH VERSION_P - { - AlterTableCmd *n = makeNode(AlterTableCmd); - n->subtype = AT_AlterCollationRefreshVersion; - n->object = $3; - $$ = (Node *)n; - } | alter_generic_options { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -10377,6 +10370,21 @@ drop_option: } ; +/***************************************************************************** + * + * ALTER COLLATION + * + *****************************************************************************/ + +AlterCollationStmt: ALTER COLLATION any_name REFRESH VERSION_P + { + AlterCollationStmt *n = makeNode(AlterCollationStmt); + n->collname = $3; + $$ = (Node *)n; + } + ; + + /***************************************************************************** * * ALTER SYSTEM diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 16c6f17e2355a..1a8fc16773322 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -1850,6 +1850,10 @@ ProcessUtilitySlow(ParseState *pstate, address = AlterStatistics((AlterStatsStmt *) parsetree); break; + case T_AlterCollationStmt: + address = AlterCollation((AlterCollationStmt *) parsetree); + break; + default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(parsetree)); @@ -3001,6 +3005,10 @@ CreateCommandTag(Node *parsetree) tag = CMDTAG_DROP_SUBSCRIPTION; break; + case T_AlterCollationStmt: + tag = CMDTAG_ALTER_COLLATION; + break; + case T_PrepareStmt: tag = CMDTAG_PREPARE; break; @@ -3617,6 +3625,10 @@ GetCommandLogLevel(Node *parsetree) lev = LOGSTMT_DDL; break; + case T_AlterCollationStmt: + lev = LOGSTMT_DDL; + break; + /* already-planned queries */ case T_PlannedStmt: { diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index aa4874163f88e..eab089f252f7d 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -57,9 +57,7 @@ #include "access/htup_details.h" #include "catalog/pg_collation.h" #include "catalog/pg_control.h" -#include "catalog/pg_database.h" #include "mb/pg_wchar.h" -#include "miscadmin.h" #include "utils/builtins.h" #include "utils/formatting.h" #include "utils/hsearch.h" @@ -127,9 +125,6 @@ static char *IsoLocaleName(const char *); /* MSVC specific */ static void icu_set_collation_attributes(UCollator *collator, const char *loc); #endif -static char *get_collation_actual_version(char collprovider, - const char *collcollate); - /* * pg_perm_setlocale * @@ -1488,10 +1483,12 @@ pg_newlocale_from_collation(Oid collid) /* We haven't computed this yet in this session, so do it */ HeapTuple tp; Form_pg_collation collform; - const char *collcollate pg_attribute_unused(); + const char *collcollate; const char *collctype pg_attribute_unused(); struct pg_locale_struct result; pg_locale_t resultp; + Datum collversion; + bool isnull; tp = SearchSysCache1(COLLOID, ObjectIdGetDatum(collid)); if (!HeapTupleIsValid(tp)) @@ -1593,6 +1590,41 @@ pg_newlocale_from_collation(Oid collid) #endif /* not USE_ICU */ } + collversion = SysCacheGetAttr(COLLOID, tp, Anum_pg_collation_collversion, + &isnull); + if (!isnull) + { + char *actual_versionstr; + char *collversionstr; + + actual_versionstr = get_collation_actual_version(collform->collprovider, collcollate); + if (!actual_versionstr) + { + /* + * This could happen when specifying a version in CREATE + * COLLATION for a libc locale, or manually creating a mess in + * the catalogs. + */ + ereport(ERROR, + (errmsg("collation \"%s\" has no actual version, but a version was specified", + NameStr(collform->collname)))); + } + collversionstr = TextDatumGetCString(collversion); + + if (strcmp(actual_versionstr, collversionstr) != 0) + ereport(WARNING, + (errmsg("collation \"%s\" has version mismatch", + NameStr(collform->collname)), + errdetail("The collation in the database was created using version %s, " + "but the operating system provides version %s.", + collversionstr, actual_versionstr), + errhint("Rebuild all objects affected by this collation and run " + "ALTER COLLATION %s REFRESH VERSION, " + "or build PostgreSQL with the right library version.", + quote_qualified_identifier(get_namespace_name(collform->collnamespace), + NameStr(collform->collname))))); + } + ReleaseSysCache(tp); /* We'll keep the pg_locale_t structures in TopMemoryContext */ @@ -1609,7 +1641,7 @@ pg_newlocale_from_collation(Oid collid) * Get provider-specific collation version string for the given collation from * the operating system/library. */ -static char * +char * get_collation_actual_version(char collprovider, const char *collcollate) { char *collversion = NULL; @@ -1697,49 +1729,6 @@ get_collation_actual_version(char collprovider, const char *collcollate) return collversion; } -/* - * Get provider-specific collation version string for a given collation OID. - * Return NULL if the provider doesn't support versions, or the collation is - * unversioned (for example "C"). Unknown OIDs result in NULL if missing_ok is - * true. - */ -char * -get_collation_version_for_oid(Oid oid, bool missing_ok) -{ - HeapTuple tp; - char *version; - - if (oid == DEFAULT_COLLATION_OID) - { - Form_pg_database dbform; - - tp = SearchSysCache1(DATABASEOID, ObjectIdGetDatum(MyDatabaseId)); - if (!HeapTupleIsValid(tp)) - elog(ERROR, "cache lookup failed for database %u", MyDatabaseId); - dbform = (Form_pg_database) GETSTRUCT(tp); - version = get_collation_actual_version(COLLPROVIDER_LIBC, - NameStr(dbform->datcollate)); - } - else - { - Form_pg_collation collform; - - tp = SearchSysCache1(COLLOID, ObjectIdGetDatum(oid)); - if (!HeapTupleIsValid(tp)) - { - if (missing_ok) - return NULL; - elog(ERROR, "cache lookup failed for collation %u", oid); - } - collform = (Form_pg_collation) GETSTRUCT(tp); - version = get_collation_actual_version(collform->collprovider, - NameStr(collform->collcollate)); - } - - ReleaseSysCache(tp); - - return version; -} #ifdef USE_ICU /* diff --git a/src/backend/utils/adt/pg_upgrade_support.c b/src/backend/utils/adt/pg_upgrade_support.c index a575c950790ad..b5b46d723127a 100644 --- a/src/backend/utils/adt/pg_upgrade_support.c +++ b/src/backend/utils/adt/pg_upgrade_support.c @@ -13,7 +13,6 @@ #include "catalog/binary_upgrade.h" #include "catalog/heap.h" -#include "catalog/index.h" #include "catalog/namespace.h" #include "catalog/pg_type.h" #include "commands/extension.h" diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 31c8e07f2a75f..bd88f6105ba10 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -42,7 +42,6 @@ #include "access/xact.h" #include "access/xlog.h" #include "catalog/catalog.h" -#include "catalog/index.h" #include "catalog/indexing.h" #include "catalog/namespace.h" #include "catalog/partition.h" @@ -6069,7 +6068,6 @@ load_relcache_init_file(bool shared) rel->rd_idattr = NULL; rel->rd_pubactions = NULL; rel->rd_statvalid = false; - rel->rd_version_checked = false; rel->rd_statlist = NIL; rel->rd_fkeyvalid = false; rel->rd_fkeylist = NIL; diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h index 3bc86635f798d..fc054af5ba18c 100644 --- a/src/bin/pg_dump/pg_backup.h +++ b/src/bin/pg_dump/pg_backup.h @@ -180,7 +180,6 @@ typedef struct _dumpOptions int sequence_data; /* dump sequence data even in schema-only mode */ int do_nothing; - int coll_unknown; } DumpOptions; /* diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 3cb3598f2b5e6..e384690d94ae2 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -46,7 +46,6 @@ #include "catalog/pg_attribute_d.h" #include "catalog/pg_cast_d.h" #include "catalog/pg_class_d.h" -#include "catalog/pg_collation_d.h" #include "catalog/pg_default_acl_d.h" #include "catalog/pg_largeobject_d.h" #include "catalog/pg_largeobject_metadata_d.h" @@ -296,9 +295,6 @@ static void binary_upgrade_extension_member(PQExpBuffer upgrade_buffer, static const char *getAttrName(int attrnum, const TableInfo *tblInfo); static const char *fmtCopyColumnList(const TableInfo *ti, PQExpBuffer buffer); static bool nonemptyReloptions(const char *reloptions); -static void appendIndexCollationVersion(PQExpBuffer buffer, const IndxInfo *indxinfo, - bool coll_unknown, - Archive *fout); static void appendReloptionsArrayAH(PQExpBuffer buffer, const char *reloptions, const char *prefix, Archive *fout); static char *get_synchronized_snapshot(Archive *fout); @@ -401,7 +397,6 @@ main(int argc, char **argv) {"on-conflict-do-nothing", no_argument, &dopt.do_nothing, 1}, {"rows-per-insert", required_argument, NULL, 10}, {"include-foreign-data", required_argument, NULL, 11}, - {"index-collation-versions-unknown", no_argument, &dopt.coll_unknown, 1}, {NULL, 0, NULL, 0} }; @@ -734,10 +729,6 @@ main(int argc, char **argv) if (archiveFormat != archDirectory && numWorkers > 1) fatal("parallel backup only supported by the directory format"); - /* Unknown collation versions only relevant in binary upgrade mode */ - if (dopt.coll_unknown && !dopt.binary_upgrade) - fatal("option --index-collation-versions-unknown only works in binary upgrade mode"); - /* Open the output file */ fout = CreateArchive(filename, archiveFormat, compressLevel, dosync, archiveMode, setupDumpWorker); @@ -7227,9 +7218,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables) i_tablespace, i_indreloptions, i_indstatcols, - i_indstatvals, - i_inddependcollnames, - i_inddependcollversions; + i_indstatvals; int ntups; for (i = 0; i < numTables; i++) @@ -7265,64 +7254,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables) * is not. */ resetPQExpBuffer(query); - if (fout->remoteVersion >= 140000) - { - appendPQExpBuffer(query, - "SELECT t.tableoid, t.oid, " - "t.relname AS indexname, " - "inh.inhparent AS parentidx, " - "pg_catalog.pg_get_indexdef(i.indexrelid) AS indexdef, " - "i.indnkeyatts AS indnkeyatts, " - "i.indnatts AS indnatts, " - "i.indkey, i.indisclustered, " - "i.indisreplident, " - "c.contype, c.conname, " - "c.condeferrable, c.condeferred, " - "c.tableoid AS contableoid, " - "c.oid AS conoid, " - "pg_catalog.pg_get_constraintdef(c.oid, false) AS condef, " - "(SELECT spcname FROM pg_catalog.pg_tablespace s WHERE s.oid = t.reltablespace) AS tablespace, " - "t.reloptions AS indreloptions, " - "(SELECT pg_catalog.array_agg(attnum ORDER BY attnum) " - " FROM pg_catalog.pg_attribute " - " WHERE attrelid = i.indexrelid AND " - " attstattarget >= 0) AS indstatcols," - "(SELECT pg_catalog.array_agg(attstattarget ORDER BY attnum) " - " FROM pg_catalog.pg_attribute " - " WHERE attrelid = i.indexrelid AND " - " attstattarget >= 0) AS indstatvals, " - "(SELECT pg_catalog.array_agg(quote_ident(ns.nspname) || '.' || quote_ident(c.collname) ORDER BY refobjid) " - " FROM pg_catalog.pg_depend d " - " JOIN pg_catalog.pg_collation c ON (c.oid = d.refobjid) " - " JOIN pg_catalog.pg_namespace ns ON (c.collnamespace = ns.oid) " - " WHERE d.classid = 'pg_catalog.pg_class'::regclass AND " - " d.objid = i.indexrelid AND " - " d.objsubid = 0 AND " - " d.refclassid = 'pg_catalog.pg_collation'::regclass AND " - " d.refobjversion IS NOT NULL) AS inddependcollnames, " - "(SELECT pg_catalog.array_agg(quote_literal(refobjversion) ORDER BY refobjid) " - " FROM pg_catalog.pg_depend " - " WHERE classid = 'pg_catalog.pg_class'::regclass AND " - " objid = i.indexrelid AND " - " objsubid = 0 AND " - " refclassid = 'pg_catalog.pg_collation'::regclass AND " - " refobjversion IS NOT NULL) AS inddependcollversions " - "FROM pg_catalog.pg_index i " - "JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid) " - "JOIN pg_catalog.pg_class t2 ON (t2.oid = i.indrelid) " - "LEFT JOIN pg_catalog.pg_constraint c " - "ON (i.indrelid = c.conrelid AND " - "i.indexrelid = c.conindid AND " - "c.contype IN ('p','u','x')) " - "LEFT JOIN pg_catalog.pg_inherits inh " - "ON (inh.inhrelid = indexrelid) " - "WHERE i.indrelid = '%u'::pg_catalog.oid " - "AND (i.indisvalid OR t2.relkind = 'p') " - "AND i.indisready " - "ORDER BY indexname", - tbinfo->dobj.catId.oid); - } - else if (fout->remoteVersion >= 110000) + if (fout->remoteVersion >= 110000) { appendPQExpBuffer(query, "SELECT t.tableoid, t.oid, " @@ -7347,9 +7279,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables) "(SELECT pg_catalog.array_agg(attstattarget ORDER BY attnum) " " FROM pg_catalog.pg_attribute " " WHERE attrelid = i.indexrelid AND " - " attstattarget >= 0) AS indstatvals, " - "'{}' AS inddependcollnames, " - "'{}' AS inddependcollversions " + " attstattarget >= 0) AS indstatvals " "FROM pg_catalog.pg_index i " "JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid) " "JOIN pg_catalog.pg_class t2 ON (t2.oid = i.indrelid) " @@ -7388,9 +7318,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables) "(SELECT spcname FROM pg_catalog.pg_tablespace s WHERE s.oid = t.reltablespace) AS tablespace, " "t.reloptions AS indreloptions, " "'' AS indstatcols, " - "'' AS indstatvals, " - "'{}' AS inddependcollnames, " - "'{}' AS inddependcollversions " + "'' AS indstatvals " "FROM pg_catalog.pg_index i " "JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid) " "LEFT JOIN pg_catalog.pg_constraint c " @@ -7425,9 +7353,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables) "(SELECT spcname FROM pg_catalog.pg_tablespace s WHERE s.oid = t.reltablespace) AS tablespace, " "t.reloptions AS indreloptions, " "'' AS indstatcols, " - "'' AS indstatvals, " - "'{}' AS inddependcollnames, " - "'{}' AS inddependcollversions " + "'' AS indstatvals " "FROM pg_catalog.pg_index i " "JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid) " "LEFT JOIN pg_catalog.pg_constraint c " @@ -7458,9 +7384,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables) "(SELECT spcname FROM pg_catalog.pg_tablespace s WHERE s.oid = t.reltablespace) AS tablespace, " "t.reloptions AS indreloptions, " "'' AS indstatcols, " - "'' AS indstatvals, " - "'{}' AS inddependcollnames, " - "'{}' AS inddependcollversions " + "'' AS indstatvals " "FROM pg_catalog.pg_index i " "JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid) " "LEFT JOIN pg_catalog.pg_depend d " @@ -7494,9 +7418,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables) "(SELECT spcname FROM pg_catalog.pg_tablespace s WHERE s.oid = t.reltablespace) AS tablespace, " "null AS indreloptions, " "'' AS indstatcols, " - "'' AS indstatvals, " - "'{}' AS inddependcollnames, " - "'{}' AS inddependcollversions " + "'' AS indstatvals " "FROM pg_catalog.pg_index i " "JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid) " "LEFT JOIN pg_catalog.pg_depend d " @@ -7536,8 +7458,6 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables) i_indreloptions = PQfnumber(res, "indreloptions"); i_indstatcols = PQfnumber(res, "indstatcols"); i_indstatvals = PQfnumber(res, "indstatvals"); - i_inddependcollnames = PQfnumber(res, "inddependcollnames"); - i_inddependcollversions = PQfnumber(res, "inddependcollversions"); tbinfo->indexes = indxinfo = (IndxInfo *) pg_malloc(ntups * sizeof(IndxInfo)); @@ -7563,8 +7483,6 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables) indxinfo[j].indreloptions = pg_strdup(PQgetvalue(res, j, i_indreloptions)); indxinfo[j].indstatcols = pg_strdup(PQgetvalue(res, j, i_indstatcols)); indxinfo[j].indstatvals = pg_strdup(PQgetvalue(res, j, i_indstatvals)); - indxinfo[j].inddependcollnames = pg_strdup(PQgetvalue(res, j, i_inddependcollnames)); - indxinfo[j].inddependcollversions = pg_strdup(PQgetvalue(res, j, i_inddependcollversions)); indxinfo[j].indkeys = (Oid *) pg_malloc(indxinfo[j].indnattrs * sizeof(Oid)); parseOidArray(PQgetvalue(res, j, i_indkey), indxinfo[j].indkeys, indxinfo[j].indnattrs); @@ -13933,10 +13851,12 @@ dumpCollation(Archive *fout, const CollInfo *collinfo) if (fout->remoteVersion >= 100000) appendPQExpBufferStr(query, - "collprovider, "); + "collprovider, " + "collversion, "); else appendPQExpBufferStr(query, - "'c' AS collprovider, "); + "'c' AS collprovider, " + "NULL AS collversion, "); if (fout->remoteVersion >= 120000) appendPQExpBufferStr(query, @@ -13997,6 +13917,24 @@ dumpCollation(Archive *fout, const CollInfo *collinfo) appendStringLiteralAH(q, collctype, fout); } + /* + * For binary upgrade, carry over the collation version. For normal + * dump/restore, omit the version, so that it is computed upon restore. + */ + if (dopt->binary_upgrade) + { + int i_collversion; + + i_collversion = PQfnumber(res, "collversion"); + if (!PQgetisnull(res, 0, i_collversion)) + { + appendPQExpBufferStr(q, ", version = "); + appendStringLiteralAH(q, + PQgetvalue(res, 0, i_collversion), + fout); + } + } + appendPQExpBufferStr(q, ");\n"); if (dopt->binary_upgrade) @@ -16770,8 +16708,7 @@ dumpIndex(Archive *fout, const IndxInfo *indxinfo) /* * If there's an associated constraint, don't dump the index per se, but - * do dump any comment, or in binary upgrade mode dependency on a - * collation version for it. (This is safe because dependency ordering + * do dump any comment for it. (This is safe because dependency ordering * will have ensured the constraint is emitted first.) Note that the * emitted comment has to be shown as depending on the constraint, not the * index, in such cases. @@ -16843,9 +16780,6 @@ dumpIndex(Archive *fout, const IndxInfo *indxinfo) "pg_catalog.pg_class", "INDEX", qqindxname); - if (dopt->binary_upgrade) - appendIndexCollationVersion(q, indxinfo, dopt->coll_unknown, fout); - /* If the index defines identity, we need to record that. */ if (indxinfo->indisreplident) { @@ -16874,20 +16808,6 @@ dumpIndex(Archive *fout, const IndxInfo *indxinfo) if (indstatvalsarray) free(indstatvalsarray); } - else if (dopt->binary_upgrade) - { - appendIndexCollationVersion(q, indxinfo, dopt->coll_unknown, fout); - - if (indxinfo->dobj.dump & DUMP_COMPONENT_DEFINITION) - ArchiveEntry(fout, indxinfo->dobj.catId, indxinfo->dobj.dumpId, - ARCHIVE_OPTS(.tag = indxinfo->dobj.name, - .namespace = tbinfo->dobj.namespace->dobj.name, - .tablespace = indxinfo->tablespace, - .owner = tbinfo->rolname, - .description = "INDEX", - .section = SECTION_POST_DATA, - .createStmt = q->data)); - } /* Dump Index Comments */ if (indxinfo->dobj.dump & DUMP_COMPONENT_COMMENT) @@ -18896,82 +18816,6 @@ nonemptyReloptions(const char *reloptions) return (reloptions != NULL && strlen(reloptions) > 2); } -/* - * Generate UPDATE statements to import the collation versions into the new - * cluster, during a binary upgrade. - */ -static void -appendIndexCollationVersion(PQExpBuffer buffer, const IndxInfo *indxinfo, - bool coll_unknown, Archive *fout) -{ - char *inddependcollnames = indxinfo->inddependcollnames; - char *inddependcollversions = indxinfo->inddependcollversions; - char **inddependcollnamesarray; - char **inddependcollversionsarray; - int ninddependcollnames; - int ninddependcollversions; - - /* - * By default, the new cluster's index will have pg_depends rows with - * current collation versions, meaning that we assume the index isn't - * corrupted if importing from a release that didn't record versions. - * However, if --index-collation-versions-unknown was passed in, then we - * assume such indexes might be corrupted, and clobber versions with - * 'unknown' to trigger version warnings. - */ - if (coll_unknown) - { - appendPQExpBuffer(buffer, - "\n-- For binary upgrade, clobber new index's collation versions\n"); - appendPQExpBuffer(buffer, - "UPDATE pg_catalog.pg_depend SET refobjversion = 'unknown' WHERE objid = '%u'::pg_catalog.oid AND refclassid = 'pg_catalog.pg_collation'::regclass AND refobjversion IS NOT NULL;\n", - indxinfo->dobj.catId.oid); - } - - /* Restore the versions that were recorded by the old cluster (if any). */ - if (strlen(inddependcollnames) == 0 && strlen(inddependcollversions) == 0) - { - ninddependcollnames = ninddependcollversions = 0; - inddependcollnamesarray = inddependcollversionsarray = NULL; - } - else - { - if (!parsePGArray(inddependcollnames, - &inddependcollnamesarray, - &ninddependcollnames)) - fatal("could not parse index collation name array"); - if (!parsePGArray(inddependcollversions, - &inddependcollversionsarray, - &ninddependcollversions)) - fatal("could not parse index collation version array"); - } - - if (ninddependcollnames != ninddependcollversions) - fatal("mismatched number of collation names and versions for index"); - - if (ninddependcollnames > 0) - appendPQExpBufferStr(buffer, - "\n-- For binary upgrade, restore old index's collation versions\n"); - for (int i = 0; i < ninddependcollnames; i++) - { - /* - * Import refobjversion from the old cluster, being careful to resolve - * the collation OID by name in the new cluster. - */ - appendPQExpBuffer(buffer, - "UPDATE pg_catalog.pg_depend SET refobjversion = %s WHERE objid = '%u'::pg_catalog.oid AND refclassid = 'pg_catalog.pg_collation'::regclass AND refobjversion IS NOT NULL AND refobjid = ", - inddependcollversionsarray[i], - indxinfo->dobj.catId.oid); - appendStringLiteralAH(buffer, inddependcollnamesarray[i], fout); - appendPQExpBuffer(buffer, "::regcollation;\n"); - } - - if (inddependcollnamesarray) - free(inddependcollnamesarray); - if (inddependcollversionsarray) - free(inddependcollversionsarray); -} - /* * Format a reloptions array and append it to the given buffer. * diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h index 53408430819bf..49e1b0a09c4ea 100644 --- a/src/bin/pg_dump/pg_dump.h +++ b/src/bin/pg_dump/pg_dump.h @@ -376,8 +376,6 @@ typedef struct _indxInfo int indnattrs; /* total number of index attributes */ Oid *indkeys; /* In spite of the name 'indkeys' this field * contains both key and nonkey attributes */ - char *inddependcollnames; /* FQ names of depended-on collations */ - char *inddependcollversions; /* versions of the above */ bool indisclustered; bool indisreplident; Oid parentidx; /* if a partition, parent index OID */ diff --git a/src/bin/pg_upgrade/dump.c b/src/bin/pg_upgrade/dump.c index 33d9591f3743f..90060d0f8ebf7 100644 --- a/src/bin/pg_upgrade/dump.c +++ b/src/bin/pg_upgrade/dump.c @@ -52,11 +52,9 @@ generate_old_dump(void) parallel_exec_prog(log_file_name, NULL, "\"%s/pg_dump\" %s --schema-only --quote-all-identifiers " - "--binary-upgrade --format=custom %s %s --file=\"%s\" %s", + "--binary-upgrade --format=custom %s --file=\"%s\" %s", new_cluster.bindir, cluster_conn_opts(&old_cluster), log_opts.verbose ? "--verbose" : "", - user_opts.ind_coll_unknown ? - "--index-collation-versions-unknown" : "", sql_file_name, escaped_connstr.data); termPQExpBuffer(&escaped_connstr); diff --git a/src/bin/pg_upgrade/option.c b/src/bin/pg_upgrade/option.c index 4b74f9eea7e7b..64bbda565084e 100644 --- a/src/bin/pg_upgrade/option.c +++ b/src/bin/pg_upgrade/option.c @@ -56,7 +56,6 @@ parseCommandLine(int argc, char *argv[]) {"socketdir", required_argument, NULL, 's'}, {"verbose", no_argument, NULL, 'v'}, {"clone", no_argument, NULL, 1}, - {"index-collation-versions-unknown", no_argument, NULL, 2}, {NULL, 0, NULL, 0} }; @@ -204,10 +203,6 @@ parseCommandLine(int argc, char *argv[]) user_opts.transfer_mode = TRANSFER_MODE_CLONE; break; - case 2: - user_opts.ind_coll_unknown = true; - break; - default: fprintf(stderr, _("Try \"%s --help\" for more information.\n"), os_info.progname); @@ -312,8 +307,6 @@ usage(void) printf(_(" -v, --verbose enable verbose internal logging\n")); printf(_(" -V, --version display version information, then exit\n")); printf(_(" --clone clone instead of copying files to new cluster\n")); - printf(_(" --index-collation-versions-unknown\n" - " mark text indexes as needing to be rebuilt\n")); printf(_(" -?, --help show this help, then exit\n")); printf(_("\n" "Before running pg_upgrade you must:\n" diff --git a/src/bin/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h index d7666da3f2707..a5f71c5294ff3 100644 --- a/src/bin/pg_upgrade/pg_upgrade.h +++ b/src/bin/pg_upgrade/pg_upgrade.h @@ -292,7 +292,6 @@ typedef struct transferMode transfer_mode; /* copy files or link them? */ int jobs; /* number of processes/threads to use */ char *socketdir; /* directory to use for Unix sockets */ - bool ind_coll_unknown; /* mark unknown index collation versions */ } UserOpts; typedef struct diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 7c4933333b3b8..d917987fd588c 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -45,7 +45,6 @@ #include "catalog/pg_am_d.h" #include "catalog/pg_class_d.h" -#include "catalog/pg_collation_d.h" #include "common.h" #include "libpq-fe.h" #include "pqexpbuffer.h" @@ -842,20 +841,6 @@ static const SchemaQuery Query_for_list_of_collations = { " (SELECT tgrelid FROM pg_catalog.pg_trigger "\ " WHERE pg_catalog.quote_ident(tgname)='%s')" -/* the silly-looking length condition is just to eat up the current word */ -#define Query_for_list_of_colls_for_one_index \ -" SELECT DISTINCT pg_catalog.quote_ident(coll.collname) " \ -" FROM pg_catalog.pg_depend d, pg_catalog.pg_collation coll, " \ -" pg_catalog.pg_class c" \ -" WHERE (%d = pg_catalog.length('%s'))" \ -" AND d.refclassid = " CppAsString2(CollationRelationId) \ -" AND d.refobjid = coll.oid " \ -" AND d.classid = " CppAsString2(RelationRelationId) \ -" AND d.objid = c.oid " \ -" AND c.relkind = " CppAsString2(RELKIND_INDEX) \ -" AND pg_catalog.pg_table_is_visible(c.oid) " \ -" AND c.relname = '%s'" - #define Query_for_list_of_ts_configurations \ "SELECT pg_catalog.quote_ident(cfgname) FROM pg_catalog.pg_ts_config "\ " WHERE substring(pg_catalog.quote_ident(cfgname),1,%d)='%s'" @@ -1769,15 +1754,14 @@ psql_completion(const char *text, int start, int end) else if (Matches("ALTER", "INDEX", MatchAny)) COMPLETE_WITH("ALTER COLUMN", "OWNER TO", "RENAME TO", "SET", "RESET", "ATTACH PARTITION", - "DEPENDS ON EXTENSION", "NO DEPENDS ON EXTENSION", - "ALTER COLLATION"); + "DEPENDS ON EXTENSION", "NO DEPENDS ON EXTENSION"); else if (Matches("ALTER", "INDEX", MatchAny, "ATTACH")) COMPLETE_WITH("PARTITION"); else if (Matches("ALTER", "INDEX", MatchAny, "ATTACH", "PARTITION")) COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes, NULL); /* ALTER INDEX ALTER */ else if (Matches("ALTER", "INDEX", MatchAny, "ALTER")) - COMPLETE_WITH("COLLATION", "COLUMN"); + COMPLETE_WITH("COLUMN"); /* ALTER INDEX ALTER COLUMN */ else if (Matches("ALTER", "INDEX", MatchAny, "ALTER", "COLUMN")) { @@ -1816,15 +1800,10 @@ psql_completion(const char *text, int start, int end) "buffering =", /* GiST */ "pages_per_range =", "autosummarize =" /* BRIN */ ); - /* ALTER INDEX ALTER COLLATION */ - else if (Matches("ALTER", "INDEX", MatchAny, "ALTER", "COLLATION")) - { - completion_info_charp = prev3_wd; - COMPLETE_WITH_QUERY(Query_for_list_of_colls_for_one_index); - } - /* ALTER INDEX ALTER COLLATION */ - else if (Matches("ALTER", "INDEX", MatchAny, "ALTER", "COLLATION", MatchAny)) - COMPLETE_WITH("REFRESH VERSION"); + else if (Matches("ALTER", "INDEX", MatchAny, "NO", "DEPENDS")) + COMPLETE_WITH("ON EXTENSION"); + else if (Matches("ALTER", "INDEX", MatchAny, "DEPENDS")) + COMPLETE_WITH("ON EXTENSION"); /* ALTER LANGUAGE */ else if (Matches("ALTER", "LANGUAGE", MatchAny)) diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 22dcd0a270c6f..a54be88d7f174 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202104271 +#define CATALOG_VERSION_NO 202105051 #endif diff --git a/src/include/catalog/dependency.h b/src/include/catalog/dependency.h index f272e2c99f874..fd44081e741ec 100644 --- a/src/include/catalog/dependency.h +++ b/src/include/catalog/dependency.h @@ -167,8 +167,7 @@ extern void recordDependencyOnSingleRelExpr(const ObjectAddress *depender, Node *expr, Oid relId, DependencyType behavior, DependencyType self_behavior, - bool reverse_self, - bool record_version); + bool reverse_self); extern ObjectClass getObjectClass(const ObjectAddress *object); @@ -188,30 +187,16 @@ extern void sort_object_addresses(ObjectAddresses *addrs); extern void free_object_addresses(ObjectAddresses *addrs); -typedef bool(*VisitDependenciesOfCB) (const ObjectAddress *otherObject, - const char *version, - char **new_version, - void *data); - -extern void visitDependenciesOf(const ObjectAddress *object, - VisitDependenciesOfCB callback, - void *data); - /* in pg_depend.c */ extern void recordDependencyOn(const ObjectAddress *depender, const ObjectAddress *referenced, DependencyType behavior); -extern void recordDependencyOnCollations(ObjectAddress *myself, - List *collations, - bool record_version); - extern void recordMultipleDependencies(const ObjectAddress *depender, const ObjectAddress *referenced, int nreferenced, - DependencyType behavior, - bool record_version); + DependencyType behavior); extern void recordDependencyOnCurrentExtension(const ObjectAddress *object, bool isReplace); @@ -232,6 +217,7 @@ extern long changeDependencyFor(Oid classId, Oid objectId, extern long changeDependenciesOf(Oid classId, Oid oldObjectId, Oid newObjectId); + extern long changeDependenciesOn(Oid refClassId, Oid oldRefObjectId, Oid newRefObjectId); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436b12..008f723e1043e 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -136,9 +136,6 @@ extern void FormIndexDatum(IndexInfo *indexInfo, Datum *values, bool *isnull); -extern void index_check_collation_versions(Oid relid); -extern void index_update_collation_versions(Oid relid, Oid coll); - extern void index_build(Relation heapRelation, Relation indexRelation, IndexInfo *indexInfo, diff --git a/src/include/catalog/pg_collation.h b/src/include/catalog/pg_collation.h index c6394ca222165..52bfd2cb7bf4b 100644 --- a/src/include/catalog/pg_collation.h +++ b/src/include/catalog/pg_collation.h @@ -41,6 +41,11 @@ CATALOG(pg_collation,3456,CollationRelationId) int32 collencoding; /* encoding for this collation; -1 = "all" */ NameData collcollate; /* LC_COLLATE setting */ NameData collctype; /* LC_CTYPE setting */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ + text collversion BKI_DEFAULT(_null_); /* provider-dependent */ + /* version of */ + /* collation data */ +#endif } FormData_pg_collation; /* ---------------- @@ -50,6 +55,8 @@ CATALOG(pg_collation,3456,CollationRelationId) */ typedef FormData_pg_collation *Form_pg_collation; +DECLARE_TOAST(pg_collation, 8888, 8889); + DECLARE_UNIQUE_INDEX(pg_collation_name_enc_nsp_index, 3164, on pg_collation using btree(collname name_ops, collencoding int4_ops, collnamespace oid_ops)); #define CollationNameEncNspIndexId 3164 DECLARE_UNIQUE_INDEX_PKEY(pg_collation_oid_index, 3085, on pg_collation using btree(oid oid_ops)); @@ -70,6 +77,7 @@ extern Oid CollationCreate(const char *collname, Oid collnamespace, bool collisdeterministic, int32 collencoding, const char *collcollate, const char *collctype, + const char *collversion, bool if_not_exists, bool quiet); diff --git a/src/include/catalog/pg_depend.h b/src/include/catalog/pg_depend.h index 606a2a8e192ec..e0bc1141457e3 100644 --- a/src/include/catalog/pg_depend.h +++ b/src/include/catalog/pg_depend.h @@ -63,9 +63,6 @@ CATALOG(pg_depend,2608,DependRelationId) * field. See DependencyType in catalog/dependency.h. */ char deptype; /* see codes in dependency.h */ -#ifdef CATALOG_VARLEN - text refobjversion; /* version of referenced object */ -#endif } FormData_pg_depend; /* ---------------- @@ -75,8 +72,6 @@ CATALOG(pg_depend,2608,DependRelationId) */ typedef FormData_pg_depend *Form_pg_depend; -DECLARE_TOAST(pg_depend, 8888, 8889); - DECLARE_INDEX(pg_depend_depender_index, 2673, on pg_depend using btree(classid oid_ops, objid oid_ops, objsubid int4_ops)); #define DependDependerIndexId 2673 DECLARE_INDEX(pg_depend_reference_index, 2674, on pg_depend using btree(refclassid oid_ops, refobjid oid_ops, refobjsubid int4_ops)); diff --git a/src/include/catalog/pg_type.h b/src/include/catalog/pg_type.h index 8ee5fa0507a37..33557760e1902 100644 --- a/src/include/catalog/pg_type.h +++ b/src/include/catalog/pg_type.h @@ -390,8 +390,6 @@ extern void GenerateTypeDependencies(HeapTuple typeTuple, bool isDependentType, bool rebuild); -extern List *GetTypeCollations(Oid typeObjectid); - extern void RenameTypeInternal(Oid typeOid, const char *newTypeName, Oid typeNamespace); diff --git a/src/include/commands/collationcmds.h b/src/include/commands/collationcmds.h index 4e690458805de..e49a5db0fbdea 100644 --- a/src/include/commands/collationcmds.h +++ b/src/include/commands/collationcmds.h @@ -20,5 +20,6 @@ extern ObjectAddress DefineCollation(ParseState *pstate, List *names, List *parameters, bool if_not_exists); extern void IsThereCollationInNamespace(const char *collname, Oid nspOid); +extern ObjectAddress AlterCollation(AlterCollationStmt *stmt); #endif /* COLLATIONCMDS_H */ diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 615dfa26aa2f3..fea3123251942 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -1933,7 +1933,6 @@ typedef enum AlterTableType AT_AddIdentity, /* ADD IDENTITY */ AT_SetIdentity, /* SET identity column options */ AT_DropIdentity, /* DROP IDENTITY */ - AT_AlterCollationRefreshVersion, /* ALTER COLLATION ... REFRESH VERSION */ AT_ReAddStatistics /* internal to commands/tablecmds.c */ } AlterTableType; @@ -1950,7 +1949,6 @@ typedef struct AlterTableCmd /* one subcommand of an ALTER TABLE */ AlterTableType subtype; /* Type of table alteration to apply */ char *name; /* column, constraint, or trigger to act on, * or tablespace */ - List *object; /* collation to act on if it's a collation */ int16 num; /* attribute number for columns referenced by * number */ RoleSpec *newowner; @@ -1961,6 +1959,17 @@ typedef struct AlterTableCmd /* one subcommand of an ALTER TABLE */ } AlterTableCmd; +/* ---------------------- + * Alter Collation + * ---------------------- + */ +typedef struct AlterCollationStmt +{ + NodeTag type; + List *collname; +} AlterCollationStmt; + + /* ---------------------- * Alter Domain * diff --git a/src/include/utils/pg_locale.h b/src/include/utils/pg_locale.h index 5a37caefbe47a..2946f46c76f97 100644 --- a/src/include/utils/pg_locale.h +++ b/src/include/utils/pg_locale.h @@ -103,7 +103,7 @@ typedef struct pg_locale_struct *pg_locale_t; extern pg_locale_t pg_newlocale_from_collation(Oid collid); -extern char *get_collation_version_for_oid(Oid collid, bool missing_ok); +extern char *get_collation_actual_version(char collprovider, const char *collcollate); #ifdef USE_ICU extern int32_t icu_to_uchar(UChar **buff_uchar, const char *buff, size_t nbytes); diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h index 5bd44be9a79e0..774ac5b2b193f 100644 --- a/src/include/utils/rel.h +++ b/src/include/utils/rel.h @@ -63,7 +63,6 @@ typedef struct RelationData bool rd_indexvalid; /* is rd_indexlist valid? (also rd_pkindex and * rd_replidindex) */ bool rd_statvalid; /* is rd_statlist valid? */ - bool rd_version_checked; /* has version check been done yet? */ /*---------- * rd_createSubid is the ID of the highest subtransaction the rel has diff --git a/src/test/Makefile b/src/test/Makefile index f7859c2fd5e79..46275915ff327 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -12,8 +12,7 @@ subdir = src/test top_builddir = ../.. include $(top_builddir)/src/Makefile.global -SUBDIRS = perl regress isolation modules authentication recovery subscription \ - locale +SUBDIRS = perl regress isolation modules authentication recovery subscription # Test suites that are not safe by default but can be run if selected # by the user via the whitespace-separated list in variable diff --git a/src/test/locale/.gitignore b/src/test/locale/.gitignore index 64e1bf2a8037c..620d3df425421 100644 --- a/src/test/locale/.gitignore +++ b/src/test/locale/.gitignore @@ -1,2 +1 @@ /test-ctype -/tmp_check/ diff --git a/src/test/locale/Makefile b/src/test/locale/Makefile index 673e14dcd08a1..7ba096b542710 100644 --- a/src/test/locale/Makefile +++ b/src/test/locale/Makefile @@ -4,7 +4,6 @@ subdir = src/test/locale top_builddir = ../../.. include $(top_builddir)/src/Makefile.global -export with_icu PROGS = test-ctype DIRS = de_DE.ISO8859-1 gr_GR.ISO8859-7 koi8-r koi8-to-win1251 @@ -21,9 +20,3 @@ clean distclean maintainer-clean: # These behave like installcheck targets. check-%: all @$(MAKE) -C `echo $@ | sed 's/^check-//'` test - -check: - $(prove_check) - -installcheck: - $(prove_installcheck) diff --git a/src/test/locale/t/001_index.pl b/src/test/locale/t/001_index.pl deleted file mode 100644 index a67f78cb719cd..0000000000000 --- a/src/test/locale/t/001_index.pl +++ /dev/null @@ -1,67 +0,0 @@ -use strict; -use warnings; - -use Config; -use PostgresNode; -use TestLib; -use Test::More; - -if ($ENV{with_icu} eq 'yes') -{ - plan tests => 10; -} -else -{ - plan skip_all => 'ICU not supported by this build'; -} - -#### Set up the server - -note "setting up data directory"; -my $node = get_new_node('main'); -$node->init(extra => [ '--encoding=UTF8' ]); - -$ENV{PGHOST} = $node->host; -$ENV{PGPORT} = $node->port; -$node->start; - -sub test_index -{ - my ($err_like, $err_comm) = @_; - my ($ret, $out, $err) = $node->psql('postgres', "SELECT * FROM icu1"); - is($ret, 0, 'SELECT should succeed.'); - like($err, $err_like, $err_comm); -} - -$node->safe_psql('postgres', 'CREATE TABLE icu1(val text);'); -$node->safe_psql('postgres', 'CREATE INDEX icu1_fr ON icu1 (val COLLATE "fr-x-icu");'); - -test_index(qr/^$/, 'No warning should be raised'); - -# Simulate different collation version -$node->safe_psql('postgres', - "UPDATE pg_depend SET refobjversion = 'not_a_version'" - . " WHERE refobjversion IS NOT NULL" - . " AND objid::regclass::text = 'icu1_fr';"); - -test_index(qr/index "icu1_fr" depends on collation "fr-x-icu" version "not_a_version", but the current version is/, - 'Different collation version warning should be raised.'); - -$node->safe_psql('postgres', 'ALTER INDEX icu1_fr ALTER COLLATION "fr-x-icu" REFRESH VERSION;'); - -test_index(qr/^$/, 'No warning should be raised'); - -# Simulate different collation version -$node->safe_psql('postgres', - "UPDATE pg_depend SET refobjversion = 'not_a_version'" - . " WHERE refobjversion IS NOT NULL" - . " AND objid::regclass::text = 'icu1_fr';"); - -test_index(qr/index "icu1_fr" depends on collation "fr-x-icu" version "not_a_version", but the current version is/, - 'Different collation version warning should be raised.'); - -$node->safe_psql('postgres', 'REINDEX TABLE icu1;'); - -test_index(qr/^$/, 'No warning should be raised'); - -$node->stop; diff --git a/src/test/regress/expected/collate.icu.utf8.out b/src/test/regress/expected/collate.icu.utf8.out index faf99f76b540b..70133df8042cc 100644 --- a/src/test/regress/expected/collate.icu.utf8.out +++ b/src/test/regress/expected/collate.icu.utf8.out @@ -1082,6 +1082,9 @@ SELECT collname FROM pg_collation WHERE collname LIKE 'test%'; DROP SCHEMA test_schema; DROP ROLE regress_test_role; +-- ALTER +ALTER COLLATION "en-x-icu" REFRESH VERSION; +NOTICE: version has not changed -- dependencies CREATE COLLATION test0 FROM "C"; CREATE TABLE collate_dep_test1 (a int, b text COLLATE test0); @@ -1947,184 +1950,6 @@ SELECT (SELECT count(*) FROM test33_0) <> (SELECT count(*) FROM test33_1); t (1 row) --- collation versioning support -CREATE TYPE t_en_fr AS (fr text COLLATE "fr-x-icu", en text COLLATE "en-x-icu"); -CREATE DOMAIN d_en_fr AS t_en_fr; -CREATE DOMAIN d_es AS text COLLATE "es-x-icu"; -CREATE TYPE t_en_fr_ga AS (en_fr t_en_fr, ga text COLLATE "ga-x-icu"); -CREATE DOMAIN d_en_fr_ga AS t_en_fr_ga; -CREATE TYPE t_custom AS (meh text, meh2 text); -CREATE DOMAIN d_custom AS t_custom; -CREATE COLLATION custom ( - LOCALE = 'fr-x-icu', PROVIDER = 'icu' -); -CREATE TYPE myrange AS range (subtype = text, collation = "POSIX"); -CREATE TYPE myrange_en_fr_ga AS range(subtype = t_en_fr_ga); -CREATE TABLE collate_test ( - id integer, - val text COLLATE "fr-x-icu", - t_en_fr t_en_fr, - d_en_fr d_en_fr, - d_es d_es, - t_en_fr_ga t_en_fr_ga, - d_en_fr_ga d_en_fr_ga, - d_en_fr_ga_arr d_en_fr_ga[], - myrange myrange, - myrange_en_fr_ga myrange_en_fr_ga -); -CREATE INDEX icuidx00_val ON collate_test(val); --- shouldn't get duplicated dependencies -CREATE INDEX icuidx00_val_val ON collate_test(val, val); --- shouldn't track version -CREATE INDEX icuidx00_val_pattern ON collate_test(val text_pattern_ops); --- should have single dependency, no version -CREATE INDEX icuidx00_val_pattern_val_pattern ON collate_test(val text_pattern_ops, val text_pattern_ops); --- should have single dependency, with version -CREATE INDEX icuidx00_val_pattern_val ON collate_test(val text_pattern_ops, val); --- should have single dependency, with version -CREATE INDEX icuidx00_val_val_pattern ON collate_test(val, val text_pattern_ops); --- two rows expected, only one a version, because we don't try to merge these yet -CREATE INDEX icuidx00_val_pattern_where ON collate_test(val text_pattern_ops) WHERE val >= val; --- two rows expected with version, because we don't try to merge these yet -CREATE INDEX icuidx00_val_where ON collate_test(val) WHERE val >= val; --- two rows expected with version (expression walker + attribute) -CREATE INDEX icuidx00_val_pattern_expr ON collate_test(val varchar_pattern_ops, (val || val)); --- two rows expected, one with a version (expression walker + attribute) -CREATE INDEX icuidx00_val_pattern_expr_pattern ON collate_test(val varchar_pattern_ops, (val || val) text_pattern_ops); --- should have single dependency, with version tracked -CREATE INDEX icuidx01_t_en_fr__d_es ON collate_test (t_en_fr, d_es); -CREATE INDEX icuidx02_d_en_fr ON collate_test (d_en_fr); -CREATE INDEX icuidx03_t_en_fr_ga ON collate_test (t_en_fr_ga); -CREATE INDEX icuidx04_d_en_fr_ga ON collate_test (d_en_fr_ga); -CREATE INDEX icuidx05_d_en_fr_ga_arr ON collate_test (d_en_fr_ga_arr); -CREATE INDEX icuidx06_d_en_fr_ga ON collate_test(id) WHERE (d_en_fr_ga).en_fr.fr = 'foo'; -CREATE INDEX icuidx07_d_en_fr_ga ON collate_test(id) WHERE (d_en_fr_ga).ga = 'foo'; -CREATE INDEX icuidx08_d_en_fr_ga ON collate_test(id) WHERE (t_en_fr_ga) = ('foo', 'bar', 'baz'); -CREATE INDEX icuidx09_d_en_fr_ga ON collate_test(id) WHERE (d_en_fr_ga) = ('foo', 'bar', 'baz'); -CREATE INDEX icuidx10_d_en_fr_ga_es ON collate_test(id) WHERE (d_en_fr_ga) = ('foo', 'bar', 'baz' COLLATE "es-x-icu"); -CREATE INDEX icuidx11_d_es ON collate_test(id) WHERE (d_es) = ('foo'); -CREATE INDEX icuidx12_custom ON collate_test(id) WHERE ('foo', 'bar')::d_custom = ('foo', 'bar' COLLATE custom)::d_custom; -CREATE INDEX icuidx13_custom ON collate_test(id) WHERE ('foo' COLLATE custom, 'bar')::d_custom = ('foo', 'bar')::d_custom; -CREATE INDEX icuidx14_myrange ON collate_test(myrange); -CREATE INDEX icuidx15_myrange_en_fr_ga ON collate_test USING gist (myrange_en_fr_ga); -CREATE TABLE collate_part(id integer, val text COLLATE "en-x-icu") PARTITION BY range(id); -CREATE TABLE collate_part_0 PARTITION OF collate_part FOR VALUES FROM (0) TO (1); -CREATE TABLE collate_part_1 PARTITION OF collate_part FOR VALUES FROM (1) TO (1000000); -CREATE INDEX icuidx17_part ON collate_part_1 (val); -SELECT objid::regclass::text collate "C", refobjid::regcollation::text collate "C", -CASE -WHEN refobjid = 'default'::regcollation THEN 'XXX' -- depends on libc version support -WHEN refobjversion IS NULL THEN 'version not tracked' -WHEN refobjversion = pg_collation_actual_version(refobjid) THEN 'up to date' -ELSE 'out of date' -END AS version -FROM pg_depend d -LEFT JOIN pg_class c ON c.oid = d.objid -WHERE refclassid = 'pg_collation'::regclass -AND coalesce(relkind, 'i') = 'i' -AND relname LIKE 'icuidx%' -ORDER BY 1, 2, 3; - objid | refobjid | version ------------------------------------+------------+--------------------- - icuidx00_val | "fr-x-icu" | up to date - icuidx00_val_pattern | "fr-x-icu" | version not tracked - icuidx00_val_pattern_expr | "fr-x-icu" | up to date - icuidx00_val_pattern_expr | "fr-x-icu" | up to date - icuidx00_val_pattern_expr_pattern | "fr-x-icu" | up to date - icuidx00_val_pattern_expr_pattern | "fr-x-icu" | version not tracked - icuidx00_val_pattern_val | "fr-x-icu" | up to date - icuidx00_val_pattern_val_pattern | "fr-x-icu" | version not tracked - icuidx00_val_pattern_where | "fr-x-icu" | up to date - icuidx00_val_pattern_where | "fr-x-icu" | version not tracked - icuidx00_val_val | "fr-x-icu" | up to date - icuidx00_val_val_pattern | "fr-x-icu" | up to date - icuidx00_val_where | "fr-x-icu" | up to date - icuidx00_val_where | "fr-x-icu" | up to date - icuidx01_t_en_fr__d_es | "en-x-icu" | up to date - icuidx01_t_en_fr__d_es | "es-x-icu" | up to date - icuidx01_t_en_fr__d_es | "fr-x-icu" | up to date - icuidx02_d_en_fr | "en-x-icu" | up to date - icuidx02_d_en_fr | "fr-x-icu" | up to date - icuidx03_t_en_fr_ga | "en-x-icu" | up to date - icuidx03_t_en_fr_ga | "fr-x-icu" | up to date - icuidx03_t_en_fr_ga | "ga-x-icu" | up to date - icuidx04_d_en_fr_ga | "en-x-icu" | up to date - icuidx04_d_en_fr_ga | "fr-x-icu" | up to date - icuidx04_d_en_fr_ga | "ga-x-icu" | up to date - icuidx05_d_en_fr_ga_arr | "en-x-icu" | up to date - icuidx05_d_en_fr_ga_arr | "fr-x-icu" | up to date - icuidx05_d_en_fr_ga_arr | "ga-x-icu" | up to date - icuidx06_d_en_fr_ga | "fr-x-icu" | up to date - icuidx07_d_en_fr_ga | "ga-x-icu" | up to date - icuidx10_d_en_fr_ga_es | "es-x-icu" | up to date - icuidx11_d_es | "es-x-icu" | up to date - icuidx12_custom | custom | up to date - icuidx13_custom | custom | up to date - icuidx15_myrange_en_fr_ga | "en-x-icu" | up to date - icuidx15_myrange_en_fr_ga | "fr-x-icu" | up to date - icuidx15_myrange_en_fr_ga | "ga-x-icu" | up to date - icuidx17_part | "en-x-icu" | up to date -(38 rows) - --- Validate that REINDEX will update the stored version. -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text LIKE 'icuidx%' -AND refobjversion IS NOT NULL; -REINDEX TABLE collate_test; -REINDEX TABLE collate_part_0; -REINDEX TABLE collate_part_1; -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - objid -------- -(0 rows) - --- Validate that REINDEX CONCURRENTLY will update the stored version. -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text LIKE 'icuidx%' -AND refobjversion IS NOT NULL; -REINDEX TABLE CONCURRENTLY collate_test; -REINDEX TABLE CONCURRENTLY collate_part_0; -REINDEX INDEX CONCURRENTLY icuidx17_part; -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - objid -------- -(0 rows) - --- Validate that VACUUM FULL will update the stored version. -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text LIKE 'icuidx%' -AND refobjversion IS NOT NULL; -VACUUM FULL collate_test; -VACUUM FULL collate_part_0; -VACUUM FULL collate_part_1; -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - objid -------- -(0 rows) - --- Test ALTER INDEX name ALTER COLLATION name REFRESH VERSION -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text = 'icuidx17_part' -AND refobjversion IS NOT NULL; -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - objid ---------------- - icuidx17_part -(1 row) - -ALTER INDEX icuidx17_part ALTER COLLATION "en-x-icu" REFRESH VERSION; -SELECT objid::regclass, refobjversion = 'not a version' AS ver FROM pg_depend -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text = 'icuidx17_part'; - objid | ver ----------------+----- - icuidx17_part | f -(1 row) - -- cleanup RESET search_path; SET client_min_messages TO warning; @@ -2132,17 +1957,3 @@ DROP SCHEMA collate_tests CASCADE; RESET client_min_messages; -- leave a collation for pg_upgrade test CREATE COLLATION coll_icu_upgrade FROM "und-x-icu"; --- Test user-visible function for inspecting versions -SELECT pg_collation_actual_version('"en-x-icu"'::regcollation) is not null; - ?column? ----------- - t -(1 row) - --- Invalid OIDs are silently ignored -SELECT pg_collation_actual_version(0) is null; - ?column? ----------- - t -(1 row) - diff --git a/src/test/regress/expected/collate.linux.utf8.out b/src/test/regress/expected/collate.linux.utf8.out index 580b00eea79bc..f06ae543e4977 100644 --- a/src/test/regress/expected/collate.linux.utf8.out +++ b/src/test/regress/expected/collate.linux.utf8.out @@ -1093,6 +1093,9 @@ SELECT collname FROM pg_collation WHERE collname LIKE 'test%'; DROP SCHEMA test_schema; DROP ROLE regress_test_role; +-- ALTER +ALTER COLLATION "en_US" REFRESH VERSION; +NOTICE: version has not changed -- dependencies CREATE COLLATION test0 FROM "C"; CREATE TABLE collate_dep_test1 (a int, b text COLLATE test0); diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out index 7f8f91b92c6bc..49f2a158c1fb2 100644 --- a/src/test/regress/expected/create_index.out +++ b/src/test/regress/expected/create_index.out @@ -2026,10 +2026,10 @@ REINDEX TABLE concur_reindex_tab; -- notice NOTICE: table "concur_reindex_tab" has no indexes to reindex REINDEX (CONCURRENTLY) TABLE concur_reindex_tab; -- notice NOTICE: table "concur_reindex_tab" has no indexes that can be reindexed concurrently -ALTER TABLE concur_reindex_tab ADD COLUMN c2 text COLLATE "C"; -- add toast index +ALTER TABLE concur_reindex_tab ADD COLUMN c2 text; -- add toast index -- Normal index with integer column CREATE UNIQUE INDEX concur_reindex_ind1 ON concur_reindex_tab(c1); --- Normal index with text column (with unversioned collation) +-- Normal index with text column CREATE INDEX concur_reindex_ind2 ON concur_reindex_tab(c2); -- UNIQUE index with expression CREATE UNIQUE INDEX concur_reindex_ind3 ON concur_reindex_tab(abs(c1)); @@ -2483,7 +2483,7 @@ WARNING: cannot reindex system catalogs concurrently, skipping all Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- c1 | integer | | not null | - c2 | text | C | | + c2 | text | | | Indexes: "concur_reindex_ind1" PRIMARY KEY, btree (c1) "concur_reindex_ind2" btree (c2) diff --git a/src/test/regress/expected/misc_sanity.out b/src/test/regress/expected/misc_sanity.out index 9ebe28a78da30..a67f40198a45d 100644 --- a/src/test/regress/expected/misc_sanity.out +++ b/src/test/regress/expected/misc_sanity.out @@ -18,8 +18,8 @@ WHERE refclassid = 0 OR refobjid = 0 OR deptype NOT IN ('a', 'e', 'i', 'n', 'p') OR (deptype != 'p' AND (classid = 0 OR objid = 0)) OR (deptype = 'p' AND (classid != 0 OR objid != 0 OR objsubid != 0)); - classid | objid | objsubid | refclassid | refobjid | refobjsubid | deptype | refobjversion ----------+-------+----------+------------+----------+-------------+---------+--------------- + classid | objid | objsubid | refclassid | refobjid | refobjsubid | deptype +---------+-------+----------+------------+----------+-------------+--------- (0 rows) -- **************** pg_shdepend **************** diff --git a/src/test/regress/sql/collate.icu.utf8.sql b/src/test/regress/sql/collate.icu.utf8.sql index 4c71f4d249e5f..9cee3d0042b1c 100644 --- a/src/test/regress/sql/collate.icu.utf8.sql +++ b/src/test/regress/sql/collate.icu.utf8.sql @@ -405,6 +405,11 @@ DROP SCHEMA test_schema; DROP ROLE regress_test_role; +-- ALTER + +ALTER COLLATION "en-x-icu" REFRESH VERSION; + + -- dependencies CREATE COLLATION test0 FROM "C"; @@ -742,134 +747,6 @@ INSERT INTO test33 VALUES (2, 'DEF'); -- they end up in the same partition (but it's platform-dependent which one) SELECT (SELECT count(*) FROM test33_0) <> (SELECT count(*) FROM test33_1); --- collation versioning support -CREATE TYPE t_en_fr AS (fr text COLLATE "fr-x-icu", en text COLLATE "en-x-icu"); -CREATE DOMAIN d_en_fr AS t_en_fr; -CREATE DOMAIN d_es AS text COLLATE "es-x-icu"; -CREATE TYPE t_en_fr_ga AS (en_fr t_en_fr, ga text COLLATE "ga-x-icu"); -CREATE DOMAIN d_en_fr_ga AS t_en_fr_ga; -CREATE TYPE t_custom AS (meh text, meh2 text); -CREATE DOMAIN d_custom AS t_custom; - -CREATE COLLATION custom ( - LOCALE = 'fr-x-icu', PROVIDER = 'icu' -); - -CREATE TYPE myrange AS range (subtype = text, collation = "POSIX"); -CREATE TYPE myrange_en_fr_ga AS range(subtype = t_en_fr_ga); - -CREATE TABLE collate_test ( - id integer, - val text COLLATE "fr-x-icu", - t_en_fr t_en_fr, - d_en_fr d_en_fr, - d_es d_es, - t_en_fr_ga t_en_fr_ga, - d_en_fr_ga d_en_fr_ga, - d_en_fr_ga_arr d_en_fr_ga[], - myrange myrange, - myrange_en_fr_ga myrange_en_fr_ga -); - -CREATE INDEX icuidx00_val ON collate_test(val); --- shouldn't get duplicated dependencies -CREATE INDEX icuidx00_val_val ON collate_test(val, val); --- shouldn't track version -CREATE INDEX icuidx00_val_pattern ON collate_test(val text_pattern_ops); --- should have single dependency, no version -CREATE INDEX icuidx00_val_pattern_val_pattern ON collate_test(val text_pattern_ops, val text_pattern_ops); --- should have single dependency, with version -CREATE INDEX icuidx00_val_pattern_val ON collate_test(val text_pattern_ops, val); --- should have single dependency, with version -CREATE INDEX icuidx00_val_val_pattern ON collate_test(val, val text_pattern_ops); --- two rows expected, only one a version, because we don't try to merge these yet -CREATE INDEX icuidx00_val_pattern_where ON collate_test(val text_pattern_ops) WHERE val >= val; --- two rows expected with version, because we don't try to merge these yet -CREATE INDEX icuidx00_val_where ON collate_test(val) WHERE val >= val; --- two rows expected with version (expression walker + attribute) -CREATE INDEX icuidx00_val_pattern_expr ON collate_test(val varchar_pattern_ops, (val || val)); --- two rows expected, one with a version (expression walker + attribute) -CREATE INDEX icuidx00_val_pattern_expr_pattern ON collate_test(val varchar_pattern_ops, (val || val) text_pattern_ops); --- should have single dependency, with version tracked -CREATE INDEX icuidx01_t_en_fr__d_es ON collate_test (t_en_fr, d_es); -CREATE INDEX icuidx02_d_en_fr ON collate_test (d_en_fr); -CREATE INDEX icuidx03_t_en_fr_ga ON collate_test (t_en_fr_ga); -CREATE INDEX icuidx04_d_en_fr_ga ON collate_test (d_en_fr_ga); -CREATE INDEX icuidx05_d_en_fr_ga_arr ON collate_test (d_en_fr_ga_arr); -CREATE INDEX icuidx06_d_en_fr_ga ON collate_test(id) WHERE (d_en_fr_ga).en_fr.fr = 'foo'; -CREATE INDEX icuidx07_d_en_fr_ga ON collate_test(id) WHERE (d_en_fr_ga).ga = 'foo'; -CREATE INDEX icuidx08_d_en_fr_ga ON collate_test(id) WHERE (t_en_fr_ga) = ('foo', 'bar', 'baz'); -CREATE INDEX icuidx09_d_en_fr_ga ON collate_test(id) WHERE (d_en_fr_ga) = ('foo', 'bar', 'baz'); -CREATE INDEX icuidx10_d_en_fr_ga_es ON collate_test(id) WHERE (d_en_fr_ga) = ('foo', 'bar', 'baz' COLLATE "es-x-icu"); -CREATE INDEX icuidx11_d_es ON collate_test(id) WHERE (d_es) = ('foo'); -CREATE INDEX icuidx12_custom ON collate_test(id) WHERE ('foo', 'bar')::d_custom = ('foo', 'bar' COLLATE custom)::d_custom; -CREATE INDEX icuidx13_custom ON collate_test(id) WHERE ('foo' COLLATE custom, 'bar')::d_custom = ('foo', 'bar')::d_custom; -CREATE INDEX icuidx14_myrange ON collate_test(myrange); -CREATE INDEX icuidx15_myrange_en_fr_ga ON collate_test USING gist (myrange_en_fr_ga); - -CREATE TABLE collate_part(id integer, val text COLLATE "en-x-icu") PARTITION BY range(id); -CREATE TABLE collate_part_0 PARTITION OF collate_part FOR VALUES FROM (0) TO (1); -CREATE TABLE collate_part_1 PARTITION OF collate_part FOR VALUES FROM (1) TO (1000000); -CREATE INDEX icuidx17_part ON collate_part_1 (val); - -SELECT objid::regclass::text collate "C", refobjid::regcollation::text collate "C", -CASE -WHEN refobjid = 'default'::regcollation THEN 'XXX' -- depends on libc version support -WHEN refobjversion IS NULL THEN 'version not tracked' -WHEN refobjversion = pg_collation_actual_version(refobjid) THEN 'up to date' -ELSE 'out of date' -END AS version -FROM pg_depend d -LEFT JOIN pg_class c ON c.oid = d.objid -WHERE refclassid = 'pg_collation'::regclass -AND coalesce(relkind, 'i') = 'i' -AND relname LIKE 'icuidx%' -ORDER BY 1, 2, 3; - --- Validate that REINDEX will update the stored version. -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text LIKE 'icuidx%' -AND refobjversion IS NOT NULL; - -REINDEX TABLE collate_test; -REINDEX TABLE collate_part_0; -REINDEX TABLE collate_part_1; - -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - --- Validate that REINDEX CONCURRENTLY will update the stored version. -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text LIKE 'icuidx%' -AND refobjversion IS NOT NULL; -REINDEX TABLE CONCURRENTLY collate_test; -REINDEX TABLE CONCURRENTLY collate_part_0; -REINDEX INDEX CONCURRENTLY icuidx17_part; - -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - --- Validate that VACUUM FULL will update the stored version. -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text LIKE 'icuidx%' -AND refobjversion IS NOT NULL; -VACUUM FULL collate_test; -VACUUM FULL collate_part_0; -VACUUM FULL collate_part_1; - -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - --- Test ALTER INDEX name ALTER COLLATION name REFRESH VERSION -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text = 'icuidx17_part' -AND refobjversion IS NOT NULL; -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; -ALTER INDEX icuidx17_part ALTER COLLATION "en-x-icu" REFRESH VERSION; -SELECT objid::regclass, refobjversion = 'not a version' AS ver FROM pg_depend -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text = 'icuidx17_part'; -- cleanup RESET search_path; @@ -879,8 +756,3 @@ RESET client_min_messages; -- leave a collation for pg_upgrade test CREATE COLLATION coll_icu_upgrade FROM "und-x-icu"; - --- Test user-visible function for inspecting versions -SELECT pg_collation_actual_version('"en-x-icu"'::regcollation) is not null; --- Invalid OIDs are silently ignored -SELECT pg_collation_actual_version(0) is null; diff --git a/src/test/regress/sql/collate.linux.utf8.sql b/src/test/regress/sql/collate.linux.utf8.sql index c697c99488055..cbbd2203e413b 100644 --- a/src/test/regress/sql/collate.linux.utf8.sql +++ b/src/test/regress/sql/collate.linux.utf8.sql @@ -406,6 +406,11 @@ DROP SCHEMA test_schema; DROP ROLE regress_test_role; +-- ALTER + +ALTER COLLATION "en_US" REFRESH VERSION; + + -- dependencies CREATE COLLATION test0 FROM "C"; diff --git a/src/test/regress/sql/create_index.sql b/src/test/regress/sql/create_index.sql index 51c9a121514ac..8bc76f7c6f187 100644 --- a/src/test/regress/sql/create_index.sql +++ b/src/test/regress/sql/create_index.sql @@ -797,10 +797,10 @@ CREATE TABLE concur_reindex_tab (c1 int); -- REINDEX REINDEX TABLE concur_reindex_tab; -- notice REINDEX (CONCURRENTLY) TABLE concur_reindex_tab; -- notice -ALTER TABLE concur_reindex_tab ADD COLUMN c2 text COLLATE "C"; -- add toast index +ALTER TABLE concur_reindex_tab ADD COLUMN c2 text; -- add toast index -- Normal index with integer column CREATE UNIQUE INDEX concur_reindex_ind1 ON concur_reindex_tab(c1); --- Normal index with text column (with unversioned collation) +-- Normal index with text column CREATE INDEX concur_reindex_ind2 ON concur_reindex_tab(c2); -- UNIQUE index with expression CREATE UNIQUE INDEX concur_reindex_ind3 ON concur_reindex_tab(abs(c1)); diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 878b67a276d43..0f197a9c8db9f 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -2948,8 +2948,6 @@ dlist_head dlist_iter dlist_mutable_iter dlist_node -do_collation_version_check_context -do_collation_version_update_context ds_state dsa_area dsa_area_control From b65431ca5e12a475ba7cf68afb63edb070c2ce08 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 7 May 2021 21:47:08 +1200 Subject: [PATCH 250/671] Doc: Update notes about libc collation versions. The per-index collation version tracking feature was reverted, but we still have the ability to ask Windows (352f6f2d) and FreeBSD (ca051d8b) for collation versions to store in pg_collation.collversion. So, from the reverted patch, take a few words of documentation about libc on all three supported OSes to replace the pre-existing note that mentioned only glibc. Discussion: https://postgr.es/m/CA%2BhUKGLhj5t1fcjqAu8iD9B3ixJtsTNqyCCD4V0aTO9kAKAjjA%40mail.gmail.com --- doc/src/sgml/ref/alter_collation.sgml | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/doc/src/sgml/ref/alter_collation.sgml b/doc/src/sgml/ref/alter_collation.sgml index af9ff2867b722..9bcb91e8ff9b7 100644 --- a/doc/src/sgml/ref/alter_collation.sgml +++ b/doc/src/sgml/ref/alter_collation.sgml @@ -129,12 +129,24 @@ HINT: Rebuild all objects affected by this collation and run ALTER COLLATION pg correctly. - When using collations provided by libc and - PostgreSQL was built with the GNU C library, the - C library's version is used as a collation version. Since collation - definitions typically change only with GNU C library releases, this provides - some defense against corruption, but it is not completely reliable. + When using collations provided by libc, version + information is recorded on systems using the GNU C library (most Linux + systems), FreeBSD and Windows. + + + When using the GNU C library for collations, the C library's version + is used as a proxy for the collation version. Many Linux distributions + change collation definitions only when upgrading the C library, but this + approach is imperfect as maintainers are free to back-port newer + collation definitions to older C library releases. + + + When using Windows for collations, version information is only available + for collations defined with BCP 47 language tags such as + en-US. + + Currently, there is no version tracking for the database default collation. From 8d4b311d2494ca592e30aed03b29854d864eb846 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Fri, 7 May 2021 13:56:32 +0200 Subject: [PATCH 251/671] Make pg_get_statisticsobjdef_expressions return NULL The usual behavior for functions in ruleutils.c is to return NULL when the object does not exist. pg_get_statisticsobjdef_expressions raised an error instead, so correct that. Reported-by: Justin Pryzby Discussion: https://postgr.es/m/20210505210947.GA27406%40telsasoft.com --- src/backend/utils/adt/ruleutils.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 0a4fa93d01608..881e8ec03d296 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -1759,9 +1759,9 @@ pg_get_statisticsobjdef_expressions(PG_FUNCTION_ARGS) statexttup = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(statextid)); if (!HeapTupleIsValid(statexttup)) - elog(ERROR, "cache lookup failed for statistics object %u", statextid); + PG_RETURN_NULL(); - /* has the statistics expressions? */ + /* Does the stats object have expressions? */ has_exprs = !heap_attisnull(statexttup, Anum_pg_statistic_ext_stxexprs, NULL); /* no expressions? we're done */ From 93f9af138795a7d12366187de95f4961fb07ed98 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Fri, 7 May 2021 13:57:29 +0200 Subject: [PATCH 252/671] Fix typos in comments about extended statistics Reported-by: Justin Pryzby Discussion: https://postgr.es/m/20210505210947.GA27406%40telsasoft.com --- src/backend/parser/parse_utilcmd.c | 2 +- src/backend/statistics/extended_stats.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 6fae9a9687202..48cce4567b438 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -1945,7 +1945,7 @@ generateClonedExtStatsStmt(RangeVar *heapRel, Oid heapRelid, * simply append them after simple column references. * * XXX Some places during build/estimation treat expressions as if they - * are before atttibutes, but for the CREATE command that's entirely + * are before attributes, but for the CREATE command that's entirely * irrelevant. */ datum = SysCacheGetAttr(STATEXTOID, ht_stats, diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index 7e11cb9d5f5c0..5e53783ea6636 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -1796,7 +1796,7 @@ statext_mcv_clauselist_selectivity(PlannerInfo *root, List *clauses, int varReli continue; /* - * Now we know the clause is compatible (we have either atttnums + * Now we know the clause is compatible (we have either attnums * or expressions extracted from it), and was not estimated yet. */ From 44f90ad092f95fe19bebb51465193bc63849c15f Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Fri, 7 May 2021 14:02:22 +0200 Subject: [PATCH 253/671] Mention statistics objects in maintenance.sgml The docs mentioned expression indexes as a way to improve selectivity estimates for functions, but we have a second option to improve that by creating extended statistics. So mention that too. Reported-by: Justin Pryzby Discussion: https://postgr.es/m/20210505210947.GA27406%40telsasoft.com --- doc/src/sgml/maintenance.sgml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml index ee6113926ac8c..de7fd75e1c609 100644 --- a/doc/src/sgml/maintenance.sgml +++ b/doc/src/sgml/maintenance.sgml @@ -330,7 +330,8 @@ Also, by default there is limited information available about - the selectivity of functions. However, if you create an expression + the selectivity of functions. However, if you create a statistics + object or an expression index that uses a function call, useful statistics will be gathered about the function, which can greatly improve query plans that use the expression index. From 8fa6e6919c1aaa6f74c74e16452aaf0b5f3b4cd5 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Fri, 7 May 2021 10:56:14 -0400 Subject: [PATCH 254/671] Add a copyright notice to perl files lacking one. --- contrib/amcheck/t/001_verify_heapam.pl | 3 +++ contrib/auto_explain/t/001_auto_explain.pl | 3 +++ contrib/bloom/t/001_wal.pl | 3 +++ contrib/intarray/bench/bench.pl | 3 +++ contrib/intarray/bench/create_test.pl | 3 +++ contrib/oid2name/t/001_basic.pl | 3 +++ contrib/seg/seg-validate.pl | 3 +++ contrib/seg/sort-segments.pl | 3 +++ contrib/test_decoding/t/001_repl_stats.pl | 3 +++ contrib/vacuumlo/t/001_basic.pl | 3 +++ src/bin/initdb/t/001_initdb.pl | 3 +++ src/bin/pg_amcheck/t/001_basic.pl | 3 +++ src/bin/pg_amcheck/t/002_nonesuch.pl | 3 +++ src/bin/pg_amcheck/t/003_check.pl | 3 +++ src/bin/pg_amcheck/t/004_verify_heapam.pl | 3 +++ src/bin/pg_amcheck/t/005_opclass_damage.pl | 3 +++ src/bin/pg_archivecleanup/t/010_pg_archivecleanup.pl | 3 +++ src/bin/pg_basebackup/t/010_pg_basebackup.pl | 3 +++ src/bin/pg_basebackup/t/020_pg_receivewal.pl | 3 +++ src/bin/pg_basebackup/t/030_pg_recvlogical.pl | 3 +++ src/bin/pg_checksums/t/001_basic.pl | 3 +++ src/bin/pg_checksums/t/002_actions.pl | 3 +++ src/bin/pg_config/t/001_pg_config.pl | 3 +++ src/bin/pg_controldata/t/001_pg_controldata.pl | 3 +++ src/bin/pg_ctl/t/001_start_stop.pl | 3 +++ src/bin/pg_ctl/t/002_status.pl | 3 +++ src/bin/pg_ctl/t/003_promote.pl | 3 +++ src/bin/pg_ctl/t/004_logrotate.pl | 3 +++ src/bin/pg_dump/t/001_basic.pl | 3 +++ src/bin/pg_dump/t/002_pg_dump.pl | 3 +++ src/bin/pg_dump/t/003_pg_dump_with_server.pl | 3 +++ src/bin/pg_dump/t/010_dump_connstr.pl | 3 +++ src/bin/pg_resetwal/t/001_basic.pl | 3 +++ src/bin/pg_resetwal/t/002_corrupted.pl | 3 +++ src/bin/pg_rewind/t/001_basic.pl | 3 +++ src/bin/pg_rewind/t/002_databases.pl | 3 +++ src/bin/pg_rewind/t/003_extrafiles.pl | 3 +++ src/bin/pg_rewind/t/004_pg_xlog_symlink.pl | 3 +++ src/bin/pg_rewind/t/005_same_timeline.pl | 3 +++ src/bin/pg_rewind/t/006_options.pl | 3 +++ src/bin/pg_rewind/t/007_standby_source.pl | 3 +++ src/bin/pg_rewind/t/008_min_recovery_point.pl | 3 +++ src/bin/pg_rewind/t/RewindTest.pm | 3 +++ src/bin/pg_test_fsync/t/001_basic.pl | 3 +++ src/bin/pg_test_timing/t/001_basic.pl | 3 +++ src/bin/pg_verifybackup/t/001_basic.pl | 3 +++ src/bin/pg_verifybackup/t/002_algorithm.pl | 3 +++ src/bin/pg_verifybackup/t/003_corruption.pl | 3 +++ src/bin/pg_verifybackup/t/004_options.pl | 3 +++ src/bin/pg_verifybackup/t/005_bad_manifest.pl | 3 +++ src/bin/pg_verifybackup/t/006_encoding.pl | 3 +++ src/bin/pg_verifybackup/t/007_wal.pl | 3 +++ src/bin/pg_waldump/t/001_basic.pl | 3 +++ src/bin/pgbench/t/001_pgbench_with_server.pl | 3 +++ src/bin/pgbench/t/002_pgbench_no_server.pl | 3 +++ src/bin/psql/t/010_tab_completion.pl | 3 +++ src/bin/scripts/t/010_clusterdb.pl | 3 +++ src/bin/scripts/t/011_clusterdb_all.pl | 3 +++ src/bin/scripts/t/020_createdb.pl | 3 +++ src/bin/scripts/t/040_createuser.pl | 3 +++ src/bin/scripts/t/050_dropdb.pl | 3 +++ src/bin/scripts/t/070_dropuser.pl | 3 +++ src/bin/scripts/t/080_pg_isready.pl | 3 +++ src/bin/scripts/t/090_reindexdb.pl | 3 +++ src/bin/scripts/t/091_reindexdb_all.pl | 3 +++ src/bin/scripts/t/100_vacuumdb.pl | 3 +++ src/bin/scripts/t/101_vacuumdb_all.pl | 3 +++ src/bin/scripts/t/102_vacuumdb_stages.pl | 3 +++ src/bin/scripts/t/200_connstr.pl | 3 +++ src/interfaces/libpq/test/regress.pl | 3 +++ src/pl/plperl/plc_perlboot.pl | 3 +++ src/pl/plperl/plc_trusted.pl | 3 +++ src/pl/plperl/plperl_opmask.pl | 3 +++ src/pl/plperl/text2macro.pl | 3 +++ src/test/authentication/t/001_password.pl | 3 +++ src/test/authentication/t/002_saslprep.pl | 3 +++ src/test/kerberos/t/001_auth.pl | 3 +++ src/test/ldap/t/001_auth.pl | 3 +++ src/test/locale/sort-test.pl | 3 +++ src/test/modules/brin/t/01_workitems.pl | 3 +++ src/test/modules/commit_ts/t/001_base.pl | 3 +++ src/test/modules/commit_ts/t/002_standby.pl | 3 +++ src/test/modules/commit_ts/t/003_standby_2.pl | 3 +++ src/test/modules/commit_ts/t/004_restart.pl | 3 +++ src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl | 3 +++ src/test/modules/ssl_passphrase_callback/t/001_testfunc.pl | 3 +++ src/test/modules/test_misc/t/001_constraint_validation.pl | 3 +++ src/test/modules/test_pg_dump/t/001_base.pl | 3 +++ src/test/perl/PostgresNode.pm | 3 +++ src/test/perl/RecursiveCopy.pm | 3 +++ src/test/perl/SimpleTee.pm | 3 +++ src/test/perl/TestLib.pm | 3 +++ src/test/recovery/t/001_stream_rep.pl | 3 +++ src/test/recovery/t/002_archiving.pl | 3 +++ src/test/recovery/t/003_recovery_targets.pl | 3 +++ src/test/recovery/t/004_timeline_switch.pl | 3 +++ src/test/recovery/t/005_replay_delay.pl | 3 +++ src/test/recovery/t/006_logical_decoding.pl | 3 +++ src/test/recovery/t/007_sync_rep.pl | 3 +++ src/test/recovery/t/008_fsm_truncation.pl | 3 +++ src/test/recovery/t/009_twophase.pl | 3 +++ src/test/recovery/t/010_logical_decoding_timelines.pl | 3 +++ src/test/recovery/t/011_crash_recovery.pl | 3 +++ src/test/recovery/t/012_subtransactions.pl | 3 +++ src/test/recovery/t/013_crash_restart.pl | 3 +++ src/test/recovery/t/014_unlogged_reinit.pl | 3 +++ src/test/recovery/t/015_promotion_pages.pl | 3 +++ src/test/recovery/t/016_min_consistency.pl | 3 +++ src/test/recovery/t/017_shm.pl | 3 +++ src/test/recovery/t/018_wal_optimize.pl | 3 +++ src/test/recovery/t/019_replslot_limit.pl | 3 +++ src/test/recovery/t/020_archive_status.pl | 3 +++ src/test/recovery/t/021_row_visibility.pl | 3 +++ src/test/recovery/t/022_crash_temp_files.pl | 3 +++ src/test/recovery/t/023_pitr_prepared_xact.pl | 3 +++ src/test/recovery/t/024_archive_recovery.pl | 3 +++ src/test/ssl/t/001_ssltests.pl | 3 +++ src/test/ssl/t/002_scram.pl | 3 +++ src/test/ssl/t/SSLServer.pm | 3 +++ src/test/subscription/t/001_rep_changes.pl | 3 +++ src/test/subscription/t/002_types.pl | 3 +++ src/test/subscription/t/003_constraints.pl | 3 +++ src/test/subscription/t/004_sync.pl | 3 +++ src/test/subscription/t/005_encoding.pl | 3 +++ src/test/subscription/t/006_rewrite.pl | 3 +++ src/test/subscription/t/007_ddl.pl | 3 +++ src/test/subscription/t/008_diff_schema.pl | 3 +++ src/test/subscription/t/009_matviews.pl | 3 +++ src/test/subscription/t/010_truncate.pl | 3 +++ src/test/subscription/t/011_generated.pl | 3 +++ src/test/subscription/t/012_collation.pl | 3 +++ src/test/subscription/t/013_partition.pl | 3 +++ src/test/subscription/t/014_binary.pl | 3 +++ src/test/subscription/t/015_stream.pl | 3 +++ src/test/subscription/t/016_stream_subxact.pl | 3 +++ src/test/subscription/t/017_stream_ddl.pl | 3 +++ src/test/subscription/t/018_stream_subxact_abort.pl | 3 +++ src/test/subscription/t/019_stream_subxact_ddl_abort.pl | 3 +++ src/test/subscription/t/020_messages.pl | 3 +++ src/test/subscription/t/100_bugs.pl | 3 +++ src/tools/git_changelog | 3 +++ src/tools/msvc/Install.pm | 3 +++ src/tools/msvc/MSBuildProject.pm | 3 +++ src/tools/msvc/Mkvcbuild.pm | 3 +++ src/tools/msvc/Project.pm | 3 +++ src/tools/msvc/Solution.pm | 3 +++ src/tools/msvc/VSObjectFactory.pm | 3 +++ src/tools/msvc/build.pl | 3 +++ src/tools/msvc/config_default.pl | 3 +++ src/tools/msvc/dummylib/Win32.pm | 3 +++ src/tools/msvc/dummylib/Win32/Registry.pm | 3 +++ src/tools/msvc/dummylib/Win32API/File.pm | 3 +++ src/tools/msvc/gendef.pl | 3 +++ src/tools/msvc/install.pl | 3 +++ src/tools/msvc/mkvcbuild.pl | 3 +++ src/tools/msvc/pgbison.pl | 3 +++ src/tools/msvc/pgflex.pl | 3 +++ src/tools/msvc/vcregress.pl | 3 +++ src/tools/pginclude/pgcheckdefines | 3 +++ src/tools/pgindent/pgindent | 3 +++ 160 files changed, 480 insertions(+) diff --git a/contrib/amcheck/t/001_verify_heapam.pl b/contrib/amcheck/t/001_verify_heapam.pl index bf47c2ed37315..f86a932bd07b3 100644 --- a/contrib/amcheck/t/001_verify_heapam.pl +++ b/contrib/amcheck/t/001_verify_heapam.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/contrib/auto_explain/t/001_auto_explain.pl b/contrib/auto_explain/t/001_auto_explain.pl index 7968be963b125..9c4f1d0571356 100644 --- a/contrib/auto_explain/t/001_auto_explain.pl +++ b/contrib/auto_explain/t/001_auto_explain.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/contrib/bloom/t/001_wal.pl b/contrib/bloom/t/001_wal.pl index 7f6398f57129c..9310af5c3dd87 100644 --- a/contrib/bloom/t/001_wal.pl +++ b/contrib/bloom/t/001_wal.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test generic xlog record work for bloom index replication. use strict; use warnings; diff --git a/contrib/intarray/bench/bench.pl b/contrib/intarray/bench/bench.pl index daf3febc804a1..6a618cbe9c019 100755 --- a/contrib/intarray/bench/bench.pl +++ b/contrib/intarray/bench/bench.pl @@ -1,5 +1,8 @@ #!/usr/bin/perl + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/contrib/intarray/bench/create_test.pl b/contrib/intarray/bench/create_test.pl index 3f2a6e4da2a1e..4df46d05d0f77 100755 --- a/contrib/intarray/bench/create_test.pl +++ b/contrib/intarray/bench/create_test.pl @@ -1,5 +1,8 @@ #!/usr/bin/perl + +# Copyright (c) 2021, PostgreSQL Global Development Group + # contrib/intarray/bench/create_test.pl use strict; diff --git a/contrib/oid2name/t/001_basic.pl b/contrib/oid2name/t/001_basic.pl index fa2c5743f63ab..8f0d4349a077c 100644 --- a/contrib/oid2name/t/001_basic.pl +++ b/contrib/oid2name/t/001_basic.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/contrib/seg/seg-validate.pl b/contrib/seg/seg-validate.pl index 9fa0887e7102a..bdd8e1ac8bf8e 100755 --- a/contrib/seg/seg-validate.pl +++ b/contrib/seg/seg-validate.pl @@ -1,5 +1,8 @@ #!/usr/bin/perl + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/contrib/seg/sort-segments.pl b/contrib/seg/sort-segments.pl index 2e3c9734a94de..370da29b2ca4d 100755 --- a/contrib/seg/sort-segments.pl +++ b/contrib/seg/sort-segments.pl @@ -1,5 +1,8 @@ #!/usr/bin/perl + +# Copyright (c) 2021, PostgreSQL Global Development Group + # this script will sort any table with the segment data type in its last column use strict; diff --git a/contrib/test_decoding/t/001_repl_stats.pl b/contrib/test_decoding/t/001_repl_stats.pl index 3ab0e80722830..2dc5ef5f0796c 100644 --- a/contrib/test_decoding/t/001_repl_stats.pl +++ b/contrib/test_decoding/t/001_repl_stats.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test replication statistics data in pg_stat_replication_slots is sane after # drop replication slot and restart. use strict; diff --git a/contrib/vacuumlo/t/001_basic.pl b/contrib/vacuumlo/t/001_basic.pl index 2bfb6ce17d964..2121f454e026a 100644 --- a/contrib/vacuumlo/t/001_basic.pl +++ b/contrib/vacuumlo/t/001_basic.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/initdb/t/001_initdb.pl b/src/bin/initdb/t/001_initdb.pl index 8387b945d369b..635ff79b475d0 100644 --- a/src/bin/initdb/t/001_initdb.pl +++ b/src/bin/initdb/t/001_initdb.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # To test successful data directory creation with an additional feature, first # try to elaborate the "successful creation" test instead of adding a test. # Successful initdb consumes much time and I/O. diff --git a/src/bin/pg_amcheck/t/001_basic.pl b/src/bin/pg_amcheck/t/001_basic.pl index dfa0ae9e062c3..6f60e3ec1f509 100644 --- a/src/bin/pg_amcheck/t/001_basic.pl +++ b/src/bin/pg_amcheck/t/001_basic.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_amcheck/t/002_nonesuch.pl b/src/bin/pg_amcheck/t/002_nonesuch.pl index afff146e2461d..7c446064ab62f 100644 --- a/src/bin/pg_amcheck/t/002_nonesuch.pl +++ b/src/bin/pg_amcheck/t/002_nonesuch.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_amcheck/t/003_check.pl b/src/bin/pg_amcheck/t/003_check.pl index 2da9631da4a61..659fd15983e8e 100644 --- a/src/bin/pg_amcheck/t/003_check.pl +++ b/src/bin/pg_amcheck/t/003_check.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_amcheck/t/004_verify_heapam.pl b/src/bin/pg_amcheck/t/004_verify_heapam.pl index b842f7bc6db08..fa4059172ecd1 100644 --- a/src/bin/pg_amcheck/t/004_verify_heapam.pl +++ b/src/bin/pg_amcheck/t/004_verify_heapam.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_amcheck/t/005_opclass_damage.pl b/src/bin/pg_amcheck/t/005_opclass_damage.pl index eba8ea9cae63b..062015aa00392 100644 --- a/src/bin/pg_amcheck/t/005_opclass_damage.pl +++ b/src/bin/pg_amcheck/t/005_opclass_damage.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # This regression test checks the behavior of the btree validation in the # presence of breaking sort order changes. # diff --git a/src/bin/pg_archivecleanup/t/010_pg_archivecleanup.pl b/src/bin/pg_archivecleanup/t/010_pg_archivecleanup.pl index 22782d304207b..8134c2a62e81c 100644 --- a/src/bin/pg_archivecleanup/t/010_pg_archivecleanup.pl +++ b/src/bin/pg_archivecleanup/t/010_pg_archivecleanup.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use TestLib; diff --git a/src/bin/pg_basebackup/t/010_pg_basebackup.pl b/src/bin/pg_basebackup/t/010_pg_basebackup.pl index a9dfe88aaae83..28949c9caf817 100644 --- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl +++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use Cwd; diff --git a/src/bin/pg_basebackup/t/020_pg_receivewal.pl b/src/bin/pg_basebackup/t/020_pg_receivewal.pl index 6e2f051187711..a547c97ef187e 100644 --- a/src/bin/pg_basebackup/t/020_pg_receivewal.pl +++ b/src/bin/pg_basebackup/t/020_pg_receivewal.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use TestLib; diff --git a/src/bin/pg_basebackup/t/030_pg_recvlogical.pl b/src/bin/pg_basebackup/t/030_pg_recvlogical.pl index 99154bcf3988a..53f41814b0b20 100644 --- a/src/bin/pg_basebackup/t/030_pg_recvlogical.pl +++ b/src/bin/pg_basebackup/t/030_pg_recvlogical.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use TestLib; diff --git a/src/bin/pg_checksums/t/001_basic.pl b/src/bin/pg_checksums/t/001_basic.pl index 4334c8060616e..62e78a50438fa 100644 --- a/src/bin/pg_checksums/t/001_basic.pl +++ b/src/bin/pg_checksums/t/001_basic.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use TestLib; diff --git a/src/bin/pg_checksums/t/002_actions.pl b/src/bin/pg_checksums/t/002_actions.pl index d52bbac5faa97..af88b9479539d 100644 --- a/src/bin/pg_checksums/t/002_actions.pl +++ b/src/bin/pg_checksums/t/002_actions.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Do basic sanity checks supported by pg_checksums using # an initialized cluster. diff --git a/src/bin/pg_config/t/001_pg_config.pl b/src/bin/pg_config/t/001_pg_config.pl index ccca190bb19b5..d8829faea6c9f 100644 --- a/src/bin/pg_config/t/001_pg_config.pl +++ b/src/bin/pg_config/t/001_pg_config.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use TestLib; diff --git a/src/bin/pg_controldata/t/001_pg_controldata.pl b/src/bin/pg_controldata/t/001_pg_controldata.pl index 3b63ad230fc33..c3f3aca095c80 100644 --- a/src/bin/pg_controldata/t/001_pg_controldata.pl +++ b/src/bin/pg_controldata/t/001_pg_controldata.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use PostgresNode; diff --git a/src/bin/pg_ctl/t/001_start_stop.pl b/src/bin/pg_ctl/t/001_start_stop.pl index b1e419f02e95c..4bfc23b93deb9 100644 --- a/src/bin/pg_ctl/t/001_start_stop.pl +++ b/src/bin/pg_ctl/t/001_start_stop.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_ctl/t/002_status.pl b/src/bin/pg_ctl/t/002_status.pl index 606d10560fce9..e69cb80134878 100644 --- a/src/bin/pg_ctl/t/002_status.pl +++ b/src/bin/pg_ctl/t/002_status.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_ctl/t/003_promote.pl b/src/bin/pg_ctl/t/003_promote.pl index ecb294b4906aa..2d7e2fd5f3d36 100644 --- a/src/bin/pg_ctl/t/003_promote.pl +++ b/src/bin/pg_ctl/t/003_promote.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_ctl/t/004_logrotate.pl b/src/bin/pg_ctl/t/004_logrotate.pl index 2f381e556ec71..9a0492ae631a0 100644 --- a/src/bin/pg_ctl/t/004_logrotate.pl +++ b/src/bin/pg_ctl/t/004_logrotate.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_dump/t/001_basic.pl b/src/bin/pg_dump/t/001_basic.pl index 083fb3ad08329..9f12ca6c51da8 100644 --- a/src/bin/pg_dump/t/001_basic.pl +++ b/src/bin/pg_dump/t/001_basic.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index 86113df29c468..c1bbf3c7d4b3a 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_dump/t/003_pg_dump_with_server.pl b/src/bin/pg_dump/t/003_pg_dump_with_server.pl index dd9a60a2c9f1d..f9fea9ddcfe7b 100644 --- a/src/bin/pg_dump/t/003_pg_dump_with_server.pl +++ b/src/bin/pg_dump/t/003_pg_dump_with_server.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_dump/t/010_dump_connstr.pl b/src/bin/pg_dump/t/010_dump_connstr.pl index 5497e4605642a..9a61eea060d34 100644 --- a/src/bin/pg_dump/t/010_dump_connstr.pl +++ b/src/bin/pg_dump/t/010_dump_connstr.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_resetwal/t/001_basic.pl b/src/bin/pg_resetwal/t/001_basic.pl index ca93ddbda050f..9c08ade79fcdd 100644 --- a/src/bin/pg_resetwal/t/001_basic.pl +++ b/src/bin/pg_resetwal/t/001_basic.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_resetwal/t/002_corrupted.pl b/src/bin/pg_resetwal/t/002_corrupted.pl index f9940d7fc5d6b..954790c28cced 100644 --- a/src/bin/pg_resetwal/t/002_corrupted.pl +++ b/src/bin/pg_resetwal/t/002_corrupted.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Tests for handling a corrupted pg_control use strict; diff --git a/src/bin/pg_rewind/t/001_basic.pl b/src/bin/pg_rewind/t/001_basic.pl index 93fa09467b41d..15a6f25adeeec 100644 --- a/src/bin/pg_rewind/t/001_basic.pl +++ b/src/bin/pg_rewind/t/001_basic.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use TestLib; diff --git a/src/bin/pg_rewind/t/002_databases.pl b/src/bin/pg_rewind/t/002_databases.pl index 5506fe425bcac..72c4b225a7f1d 100644 --- a/src/bin/pg_rewind/t/002_databases.pl +++ b/src/bin/pg_rewind/t/002_databases.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use TestLib; diff --git a/src/bin/pg_rewind/t/003_extrafiles.pl b/src/bin/pg_rewind/t/003_extrafiles.pl index 5b953b11ae80e..4fc500d4b4c24 100644 --- a/src/bin/pg_rewind/t/003_extrafiles.pl +++ b/src/bin/pg_rewind/t/003_extrafiles.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test how pg_rewind reacts to extra files and directories in the data dirs. use strict; diff --git a/src/bin/pg_rewind/t/004_pg_xlog_symlink.pl b/src/bin/pg_rewind/t/004_pg_xlog_symlink.pl index fff4758508346..8fb0ab3eadd0b 100644 --- a/src/bin/pg_rewind/t/004_pg_xlog_symlink.pl +++ b/src/bin/pg_rewind/t/004_pg_xlog_symlink.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # Test pg_rewind when the target's pg_wal directory is a symlink. # diff --git a/src/bin/pg_rewind/t/005_same_timeline.pl b/src/bin/pg_rewind/t/005_same_timeline.pl index 8706d5aed5c47..efe1d4c77f5ad 100644 --- a/src/bin/pg_rewind/t/005_same_timeline.pl +++ b/src/bin/pg_rewind/t/005_same_timeline.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # Test that running pg_rewind with the source and target clusters # on the same timeline runs successfully. diff --git a/src/bin/pg_rewind/t/006_options.pl b/src/bin/pg_rewind/t/006_options.pl index 1515696e66354..81793899e59d5 100644 --- a/src/bin/pg_rewind/t/006_options.pl +++ b/src/bin/pg_rewind/t/006_options.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # Test checking options of pg_rewind. # diff --git a/src/bin/pg_rewind/t/007_standby_source.pl b/src/bin/pg_rewind/t/007_standby_source.pl index 7a597bf12bd7d..44319a8204ebb 100644 --- a/src/bin/pg_rewind/t/007_standby_source.pl +++ b/src/bin/pg_rewind/t/007_standby_source.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # Test using a standby server as the source. # diff --git a/src/bin/pg_rewind/t/008_min_recovery_point.pl b/src/bin/pg_rewind/t/008_min_recovery_point.pl index e3d94b3346df4..7d9362cc2294c 100644 --- a/src/bin/pg_rewind/t/008_min_recovery_point.pl +++ b/src/bin/pg_rewind/t/008_min_recovery_point.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # Test situation where a target data directory contains # WAL records beyond both the last checkpoint and the divergence diff --git a/src/bin/pg_rewind/t/RewindTest.pm b/src/bin/pg_rewind/t/RewindTest.pm index 41ed7d4b3befd..55a350af9d633 100644 --- a/src/bin/pg_rewind/t/RewindTest.pm +++ b/src/bin/pg_rewind/t/RewindTest.pm @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + package RewindTest; # Test driver for pg_rewind. Each test consists of a cycle where a new cluster diff --git a/src/bin/pg_test_fsync/t/001_basic.pl b/src/bin/pg_test_fsync/t/001_basic.pl index fe9c295c4976d..c0d0effd92de8 100644 --- a/src/bin/pg_test_fsync/t/001_basic.pl +++ b/src/bin/pg_test_fsync/t/001_basic.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_test_timing/t/001_basic.pl b/src/bin/pg_test_timing/t/001_basic.pl index 8bad19c7fad97..72e5a42b6f2e3 100644 --- a/src/bin/pg_test_timing/t/001_basic.pl +++ b/src/bin/pg_test_timing/t/001_basic.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pg_verifybackup/t/001_basic.pl b/src/bin/pg_verifybackup/t/001_basic.pl index 0c35062dc0a13..4ad1c3f0a995c 100644 --- a/src/bin/pg_verifybackup/t/001_basic.pl +++ b/src/bin/pg_verifybackup/t/001_basic.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use TestLib; diff --git a/src/bin/pg_verifybackup/t/002_algorithm.pl b/src/bin/pg_verifybackup/t/002_algorithm.pl index 6c118832668df..c2c4c3176af2a 100644 --- a/src/bin/pg_verifybackup/t/002_algorithm.pl +++ b/src/bin/pg_verifybackup/t/002_algorithm.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Verify that we can take and verify backups with various checksum types. use strict; diff --git a/src/bin/pg_verifybackup/t/003_corruption.pl b/src/bin/pg_verifybackup/t/003_corruption.pl index 0c0691ba2b20d..682b3b857e623 100644 --- a/src/bin/pg_verifybackup/t/003_corruption.pl +++ b/src/bin/pg_verifybackup/t/003_corruption.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Verify that various forms of corruption are detected by pg_verifybackup. use strict; diff --git a/src/bin/pg_verifybackup/t/004_options.pl b/src/bin/pg_verifybackup/t/004_options.pl index 1bd0aab54596f..3f6e84c2210a8 100644 --- a/src/bin/pg_verifybackup/t/004_options.pl +++ b/src/bin/pg_verifybackup/t/004_options.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Verify the behavior of assorted pg_verifybackup options. use strict; diff --git a/src/bin/pg_verifybackup/t/005_bad_manifest.pl b/src/bin/pg_verifybackup/t/005_bad_manifest.pl index 5bd5556038c3d..9f8a100a716bf 100644 --- a/src/bin/pg_verifybackup/t/005_bad_manifest.pl +++ b/src/bin/pg_verifybackup/t/005_bad_manifest.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test the behavior of pg_verifybackup when the backup manifest has # problems. diff --git a/src/bin/pg_verifybackup/t/006_encoding.pl b/src/bin/pg_verifybackup/t/006_encoding.pl index 35b854a78e893..a821d52a6af8d 100644 --- a/src/bin/pg_verifybackup/t/006_encoding.pl +++ b/src/bin/pg_verifybackup/t/006_encoding.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Verify that pg_verifybackup handles hex-encoded filenames correctly. use strict; diff --git a/src/bin/pg_verifybackup/t/007_wal.pl b/src/bin/pg_verifybackup/t/007_wal.pl index 23a4f8bbd8d6f..28837b8503dc3 100644 --- a/src/bin/pg_verifybackup/t/007_wal.pl +++ b/src/bin/pg_verifybackup/t/007_wal.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test pg_verifybackup's WAL verification. use strict; diff --git a/src/bin/pg_waldump/t/001_basic.pl b/src/bin/pg_waldump/t/001_basic.pl index 5af0ce94fb803..fb2f807dc3bc9 100644 --- a/src/bin/pg_waldump/t/001_basic.pl +++ b/src/bin/pg_waldump/t/001_basic.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use TestLib; diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index c2482dea1752d..e1496bb213069 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/pgbench/t/002_pgbench_no_server.pl b/src/bin/pgbench/t/002_pgbench_no_server.pl index 4027e68dfac59..9023fac52d5b7 100644 --- a/src/bin/pgbench/t/002_pgbench_no_server.pl +++ b/src/bin/pgbench/t/002_pgbench_no_server.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # pgbench tests which do not need a server # diff --git a/src/bin/psql/t/010_tab_completion.pl b/src/bin/psql/t/010_tab_completion.pl index c27f216d39276..3c58d50118a76 100644 --- a/src/bin/psql/t/010_tab_completion.pl +++ b/src/bin/psql/t/010_tab_completion.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/scripts/t/010_clusterdb.pl b/src/bin/scripts/t/010_clusterdb.pl index ba093fa3a7a22..6d483be143347 100644 --- a/src/bin/scripts/t/010_clusterdb.pl +++ b/src/bin/scripts/t/010_clusterdb.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/scripts/t/011_clusterdb_all.pl b/src/bin/scripts/t/011_clusterdb_all.pl index efd541bc4d656..c7e8514fb6cf5 100644 --- a/src/bin/scripts/t/011_clusterdb_all.pl +++ b/src/bin/scripts/t/011_clusterdb_all.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/scripts/t/020_createdb.pl b/src/bin/scripts/t/020_createdb.pl index 983dbb1d37f1e..7261ebb2eff32 100644 --- a/src/bin/scripts/t/020_createdb.pl +++ b/src/bin/scripts/t/020_createdb.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/scripts/t/040_createuser.pl b/src/bin/scripts/t/040_createuser.pl index 916d925947940..8fdd32d77b7d5 100644 --- a/src/bin/scripts/t/040_createuser.pl +++ b/src/bin/scripts/t/040_createuser.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/scripts/t/050_dropdb.pl b/src/bin/scripts/t/050_dropdb.pl index c51babe093fb4..646cb4e82f43b 100644 --- a/src/bin/scripts/t/050_dropdb.pl +++ b/src/bin/scripts/t/050_dropdb.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/scripts/t/070_dropuser.pl b/src/bin/scripts/t/070_dropuser.pl index 2e858c595bccf..cbcb09b0ad8f5 100644 --- a/src/bin/scripts/t/070_dropuser.pl +++ b/src/bin/scripts/t/070_dropuser.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/scripts/t/080_pg_isready.pl b/src/bin/scripts/t/080_pg_isready.pl index 6da89e1b04f31..e2e39ea2d4e5e 100644 --- a/src/bin/scripts/t/080_pg_isready.pl +++ b/src/bin/scripts/t/080_pg_isready.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/scripts/t/090_reindexdb.pl b/src/bin/scripts/t/090_reindexdb.pl index 159b637230335..af5bdf352c40e 100644 --- a/src/bin/scripts/t/090_reindexdb.pl +++ b/src/bin/scripts/t/090_reindexdb.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/scripts/t/091_reindexdb_all.pl b/src/bin/scripts/t/091_reindexdb_all.pl index 8e6041460c5c8..299b198d1599b 100644 --- a/src/bin/scripts/t/091_reindexdb_all.pl +++ b/src/bin/scripts/t/091_reindexdb_all.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/scripts/t/100_vacuumdb.pl b/src/bin/scripts/t/100_vacuumdb.pl index 99ec8bebde350..0addc97bf8b8d 100644 --- a/src/bin/scripts/t/100_vacuumdb.pl +++ b/src/bin/scripts/t/100_vacuumdb.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/scripts/t/101_vacuumdb_all.pl b/src/bin/scripts/t/101_vacuumdb_all.pl index 43212587e5ab7..504f252748bb1 100644 --- a/src/bin/scripts/t/101_vacuumdb_all.pl +++ b/src/bin/scripts/t/101_vacuumdb_all.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/scripts/t/102_vacuumdb_stages.pl b/src/bin/scripts/t/102_vacuumdb_stages.pl index 17a7fc720d2b1..155c77edd9011 100644 --- a/src/bin/scripts/t/102_vacuumdb_stages.pl +++ b/src/bin/scripts/t/102_vacuumdb_stages.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/bin/scripts/t/200_connstr.pl b/src/bin/scripts/t/200_connstr.pl index ee2523d08582e..b1ceab73bbaa3 100644 --- a/src/bin/scripts/t/200_connstr.pl +++ b/src/bin/scripts/t/200_connstr.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/interfaces/libpq/test/regress.pl b/src/interfaces/libpq/test/regress.pl index 54db4f1abfcc9..cc1db485f4984 100644 --- a/src/interfaces/libpq/test/regress.pl +++ b/src/interfaces/libpq/test/regress.pl @@ -1,5 +1,8 @@ #!/usr/bin/perl + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/pl/plperl/plc_perlboot.pl b/src/pl/plperl/plc_perlboot.pl index ee1b9bf4634ba..028c4cea6d12f 100644 --- a/src/pl/plperl/plc_perlboot.pl +++ b/src/pl/plperl/plc_perlboot.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # src/pl/plperl/plc_perlboot.pl use strict; diff --git a/src/pl/plperl/plc_trusted.pl b/src/pl/plperl/plc_trusted.pl index dea3727682cf5..2ca71e6e12dd4 100644 --- a/src/pl/plperl/plc_trusted.pl +++ b/src/pl/plperl/plc_trusted.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # src/pl/plperl/plc_trusted.pl #<<< protect next line from perltidy so perlcritic annotation works diff --git a/src/pl/plperl/plperl_opmask.pl b/src/pl/plperl/plperl_opmask.pl index ee18e915289bf..7ad315f1fb23d 100644 --- a/src/pl/plperl/plperl_opmask.pl +++ b/src/pl/plperl/plperl_opmask.pl @@ -1,5 +1,8 @@ #!perl + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/pl/plperl/text2macro.pl b/src/pl/plperl/text2macro.pl index 52fcbe1be1c82..a3e307b16118d 100644 --- a/src/pl/plperl/text2macro.pl +++ b/src/pl/plperl/text2macro.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # src/pl/plperl/text2macro.pl =head1 NAME diff --git a/src/test/authentication/t/001_password.pl b/src/test/authentication/t/001_password.pl index 150b226c0e864..17d686e702e4c 100644 --- a/src/test/authentication/t/001_password.pl +++ b/src/test/authentication/t/001_password.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Set of tests for authentication and pg_hba.conf. The following password # methods are checked through this test: # - Plain diff --git a/src/test/authentication/t/002_saslprep.pl b/src/test/authentication/t/002_saslprep.pl index aa164b2bd98c6..f080a0ccbaefa 100644 --- a/src/test/authentication/t/002_saslprep.pl +++ b/src/test/authentication/t/002_saslprep.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test password normalization in SCRAM. # # This test can only run with Unix-domain sockets. diff --git a/src/test/kerberos/t/001_auth.pl b/src/test/kerberos/t/001_auth.pl index 26c2c7077b397..03337064380cd 100644 --- a/src/test/kerberos/t/001_auth.pl +++ b/src/test/kerberos/t/001_auth.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Sets up a KDC and then runs a variety of tests to make sure that the # GSSAPI/Kerberos authentication and encryption are working properly, # that the options in pg_hba.conf and pg_ident.conf are handled correctly, diff --git a/src/test/ldap/t/001_auth.pl b/src/test/ldap/t/001_auth.pl index ec4721234bc1a..0ae14e4c85fdb 100644 --- a/src/test/ldap/t/001_auth.pl +++ b/src/test/ldap/t/001_auth.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use TestLib; diff --git a/src/test/locale/sort-test.pl b/src/test/locale/sort-test.pl index b61968b7e0a55..a2a17e7f34751 100755 --- a/src/test/locale/sort-test.pl +++ b/src/test/locale/sort-test.pl @@ -1,5 +1,8 @@ #! /usr/bin/perl + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use locale; diff --git a/src/test/modules/brin/t/01_workitems.pl b/src/test/modules/brin/t/01_workitems.pl index 534ab63ab26d6..a4f603a9d548b 100644 --- a/src/test/modules/brin/t/01_workitems.pl +++ b/src/test/modules/brin/t/01_workitems.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Verify that work items work correctly use strict; diff --git a/src/test/modules/commit_ts/t/001_base.pl b/src/test/modules/commit_ts/t/001_base.pl index f8d5d84cc527c..dd41936658d9a 100644 --- a/src/test/modules/commit_ts/t/001_base.pl +++ b/src/test/modules/commit_ts/t/001_base.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Single-node test: value can be set, and is still present after recovery use strict; diff --git a/src/test/modules/commit_ts/t/002_standby.pl b/src/test/modules/commit_ts/t/002_standby.pl index 872efb2e8eae3..24446bb38413d 100644 --- a/src/test/modules/commit_ts/t/002_standby.pl +++ b/src/test/modules/commit_ts/t/002_standby.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test simple scenario involving a standby use strict; diff --git a/src/test/modules/commit_ts/t/003_standby_2.pl b/src/test/modules/commit_ts/t/003_standby_2.pl index 36ab829dfdd20..1d57ecedae544 100644 --- a/src/test/modules/commit_ts/t/003_standby_2.pl +++ b/src/test/modules/commit_ts/t/003_standby_2.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test primary/standby scenario where the track_commit_timestamp GUC is # repeatedly toggled on and off. use strict; diff --git a/src/test/modules/commit_ts/t/004_restart.pl b/src/test/modules/commit_ts/t/004_restart.pl index 4e6ae776b979b..bc9931944f332 100644 --- a/src/test/modules/commit_ts/t/004_restart.pl +++ b/src/test/modules/commit_ts/t/004_restart.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Testing of commit timestamps preservation across restarts use strict; use warnings; diff --git a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl index 4819dbd8495f4..99a41150a2cb2 100644 --- a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl +++ b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/test/modules/ssl_passphrase_callback/t/001_testfunc.pl b/src/test/modules/ssl_passphrase_callback/t/001_testfunc.pl index a2bed5336c005..1e2455e82f39a 100644 --- a/src/test/modules/ssl_passphrase_callback/t/001_testfunc.pl +++ b/src/test/modules/ssl_passphrase_callback/t/001_testfunc.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/test/modules/test_misc/t/001_constraint_validation.pl b/src/test/modules/test_misc/t/001_constraint_validation.pl index c9453f9063e69..3729906c1acfa 100644 --- a/src/test/modules/test_misc/t/001_constraint_validation.pl +++ b/src/test/modules/test_misc/t/001_constraint_validation.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Verify that ALTER TABLE optimizes certain operations as expected use strict; diff --git a/src/test/modules/test_pg_dump/t/001_base.pl b/src/test/modules/test_pg_dump/t/001_base.pl index 1cc6f29ab6956..4baca365c6498 100644 --- a/src/test/modules/test_pg_dump/t/001_base.pl +++ b/src/test/modules/test_pg_dump/t/001_base.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index 0eb8df5fbf0dc..8493066eb2428 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -1,4 +1,7 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + =pod =head1 NAME diff --git a/src/test/perl/RecursiveCopy.pm b/src/test/perl/RecursiveCopy.pm index baf5d0ac63b95..341cee62fae22 100644 --- a/src/test/perl/RecursiveCopy.pm +++ b/src/test/perl/RecursiveCopy.pm @@ -1,4 +1,7 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + =pod =head1 NAME diff --git a/src/test/perl/SimpleTee.pm b/src/test/perl/SimpleTee.pm index 74409bde6d7be..681a36a0f8e8b 100644 --- a/src/test/perl/SimpleTee.pm +++ b/src/test/perl/SimpleTee.pm @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # A simple 'tee' implementation, using perl tie. # # Whenever you print to the handle, it gets forwarded to a list of diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index 6bdedc2cfaf66..5dbe7cf397645 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -1,4 +1,7 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + =pod =head1 NAME diff --git a/src/test/recovery/t/001_stream_rep.pl b/src/test/recovery/t/001_stream_rep.pl index 9b0e44280c686..7ce67d2b200bc 100644 --- a/src/test/recovery/t/001_stream_rep.pl +++ b/src/test/recovery/t/001_stream_rep.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Minimal test testing streaming replication use strict; use warnings; diff --git a/src/test/recovery/t/002_archiving.pl b/src/test/recovery/t/002_archiving.pl index cf8988f62a7b6..c675c0886cdd2 100644 --- a/src/test/recovery/t/002_archiving.pl +++ b/src/test/recovery/t/002_archiving.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # test for archiving with hot standby use strict; use warnings; diff --git a/src/test/recovery/t/003_recovery_targets.pl b/src/test/recovery/t/003_recovery_targets.pl index 448afc4e0e718..4da7ed970e120 100644 --- a/src/test/recovery/t/003_recovery_targets.pl +++ b/src/test/recovery/t/003_recovery_targets.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test for recovery targets: name, timestamp, XID use strict; use warnings; diff --git a/src/test/recovery/t/004_timeline_switch.pl b/src/test/recovery/t/004_timeline_switch.pl index c8dbd8f9df3ed..c101980e9e2b3 100644 --- a/src/test/recovery/t/004_timeline_switch.pl +++ b/src/test/recovery/t/004_timeline_switch.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test for timeline switch use strict; use warnings; diff --git a/src/test/recovery/t/005_replay_delay.pl b/src/test/recovery/t/005_replay_delay.pl index 459772f6c44fb..7f177afaedcdc 100644 --- a/src/test/recovery/t/005_replay_delay.pl +++ b/src/test/recovery/t/005_replay_delay.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Checks for recovery_min_apply_delay use strict; use warnings; diff --git a/src/test/recovery/t/006_logical_decoding.pl b/src/test/recovery/t/006_logical_decoding.pl index 8cdfae1e1e2d0..827a7b488e278 100644 --- a/src/test/recovery/t/006_logical_decoding.pl +++ b/src/test/recovery/t/006_logical_decoding.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Testing of logical decoding using SQL interface and/or pg_recvlogical # # Most logical decoding tests are in contrib/test_decoding. This module diff --git a/src/test/recovery/t/007_sync_rep.pl b/src/test/recovery/t/007_sync_rep.pl index e3c6738d3ab80..ad3fb1b44ce42 100644 --- a/src/test/recovery/t/007_sync_rep.pl +++ b/src/test/recovery/t/007_sync_rep.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Minimal test testing synchronous replication sync_state transition use strict; use warnings; diff --git a/src/test/recovery/t/008_fsm_truncation.pl b/src/test/recovery/t/008_fsm_truncation.pl index 37967c11744fc..14b4b97e9e782 100644 --- a/src/test/recovery/t/008_fsm_truncation.pl +++ b/src/test/recovery/t/008_fsm_truncation.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test WAL replay of FSM changes. # # FSM changes don't normally need to be WAL-logged, except for truncation. diff --git a/src/test/recovery/t/009_twophase.pl b/src/test/recovery/t/009_twophase.pl index 9da3464bc1dda..3ee012226dacf 100644 --- a/src/test/recovery/t/009_twophase.pl +++ b/src/test/recovery/t/009_twophase.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Tests dedicated to two-phase commit in recovery use strict; use warnings; diff --git a/src/test/recovery/t/010_logical_decoding_timelines.pl b/src/test/recovery/t/010_logical_decoding_timelines.pl index 329500f0ae5b7..8719c61a02d07 100644 --- a/src/test/recovery/t/010_logical_decoding_timelines.pl +++ b/src/test/recovery/t/010_logical_decoding_timelines.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Demonstrate that logical can follow timeline switches. # # Logical replication slots can follow timeline switches but it's diff --git a/src/test/recovery/t/011_crash_recovery.pl b/src/test/recovery/t/011_crash_recovery.pl index 10cd98f70aa28..0e5059db99728 100644 --- a/src/test/recovery/t/011_crash_recovery.pl +++ b/src/test/recovery/t/011_crash_recovery.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # Tests relating to PostgreSQL crash recovery and redo # diff --git a/src/test/recovery/t/012_subtransactions.pl b/src/test/recovery/t/012_subtransactions.pl index 6b9e29ae3c7f6..aa84073311b77 100644 --- a/src/test/recovery/t/012_subtransactions.pl +++ b/src/test/recovery/t/012_subtransactions.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Tests dedicated to subtransactions in recovery use strict; use warnings; diff --git a/src/test/recovery/t/013_crash_restart.pl b/src/test/recovery/t/013_crash_restart.pl index 95d7bb62425fa..66e43ffbe8d1e 100644 --- a/src/test/recovery/t/013_crash_restart.pl +++ b/src/test/recovery/t/013_crash_restart.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # Tests restarts of postgres due to crashes of a subprocess. # diff --git a/src/test/recovery/t/014_unlogged_reinit.pl b/src/test/recovery/t/014_unlogged_reinit.pl index ee05e1a1ee11c..b629d549dd947 100644 --- a/src/test/recovery/t/014_unlogged_reinit.pl +++ b/src/test/recovery/t/014_unlogged_reinit.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Tests that unlogged tables are properly reinitialized after a crash. # # The behavior should be the same when restoring from a backup, but diff --git a/src/test/recovery/t/015_promotion_pages.pl b/src/test/recovery/t/015_promotion_pages.pl index 25a9e4764a2f4..2b72dc23343d9 100644 --- a/src/test/recovery/t/015_promotion_pages.pl +++ b/src/test/recovery/t/015_promotion_pages.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test for promotion handling with WAL records generated post-promotion # before the first checkpoint is generated. This test case checks for # invalid page references at replay based on the minimum consistent diff --git a/src/test/recovery/t/016_min_consistency.pl b/src/test/recovery/t/016_min_consistency.pl index 707538b9869bb..60ecd3dbe7c03 100644 --- a/src/test/recovery/t/016_min_consistency.pl +++ b/src/test/recovery/t/016_min_consistency.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test for checking consistency of on-disk pages for a cluster with # the minimum recovery LSN, ensuring that the updates happen across # all processes. In this test, the updates from the startup process diff --git a/src/test/recovery/t/017_shm.pl b/src/test/recovery/t/017_shm.pl index dc0dcd3ca275a..6fe9b97f6e085 100644 --- a/src/test/recovery/t/017_shm.pl +++ b/src/test/recovery/t/017_shm.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # Tests of pg_shmem.h functions # diff --git a/src/test/recovery/t/018_wal_optimize.pl b/src/test/recovery/t/018_wal_optimize.pl index 1bc01b5fa5f40..53d9864309fb2 100644 --- a/src/test/recovery/t/018_wal_optimize.pl +++ b/src/test/recovery/t/018_wal_optimize.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test WAL replay when some operation has skipped WAL. # # These tests exercise code that once violated the mandate described in diff --git a/src/test/recovery/t/019_replslot_limit.pl b/src/test/recovery/t/019_replslot_limit.pl index 20f4a1bbc3dcc..7094aa0704b20 100644 --- a/src/test/recovery/t/019_replslot_limit.pl +++ b/src/test/recovery/t/019_replslot_limit.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test for replication slot limit # Ensure that max_slot_wal_keep_size limits the number of WAL files to # be kept by replication slots. diff --git a/src/test/recovery/t/020_archive_status.pl b/src/test/recovery/t/020_archive_status.pl index 27d63d3cbfcc2..777bf052743e9 100644 --- a/src/test/recovery/t/020_archive_status.pl +++ b/src/test/recovery/t/020_archive_status.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # Tests related to WAL archiving and recovery. # diff --git a/src/test/recovery/t/021_row_visibility.pl b/src/test/recovery/t/021_row_visibility.pl index f6a486bb88672..2d0f0556298d6 100644 --- a/src/test/recovery/t/021_row_visibility.pl +++ b/src/test/recovery/t/021_row_visibility.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Checks that snapshots on standbys behave in a minimally reasonable # way. use strict; diff --git a/src/test/recovery/t/022_crash_temp_files.pl b/src/test/recovery/t/022_crash_temp_files.pl index 41d8b74911fa0..42c3cfc027d39 100644 --- a/src/test/recovery/t/022_crash_temp_files.pl +++ b/src/test/recovery/t/022_crash_temp_files.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test remove of temporary files after a crash. use strict; use warnings; diff --git a/src/test/recovery/t/023_pitr_prepared_xact.pl b/src/test/recovery/t/023_pitr_prepared_xact.pl index 533cd1a0fb364..9190a38f93c3d 100644 --- a/src/test/recovery/t/023_pitr_prepared_xact.pl +++ b/src/test/recovery/t/023_pitr_prepared_xact.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test for point-in-time-recovery (PITR) with prepared transactions use strict; use warnings; diff --git a/src/test/recovery/t/024_archive_recovery.pl b/src/test/recovery/t/024_archive_recovery.pl index 78f06b690acea..302c69f96b5aa 100644 --- a/src/test/recovery/t/024_archive_recovery.pl +++ b/src/test/recovery/t/024_archive_recovery.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test for archive recovery of WAL generated with wal_level=minimal use strict; use warnings; diff --git a/src/test/ssl/t/001_ssltests.pl b/src/test/ssl/t/001_ssltests.pl index cc797a5c98fbd..45acb1687c8b9 100644 --- a/src/test/ssl/t/001_ssltests.pl +++ b/src/test/ssl/t/001_ssltests.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use PostgresNode; diff --git a/src/test/ssl/t/002_scram.pl b/src/test/ssl/t/002_scram.pl index 194000b523f50..9143fa515f211 100644 --- a/src/test/ssl/t/002_scram.pl +++ b/src/test/ssl/t/002_scram.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test SCRAM authentication and TLS channel binding types use strict; diff --git a/src/test/ssl/t/SSLServer.pm b/src/test/ssl/t/SSLServer.pm index 129a7154a98b1..0ca2bebf2b3a9 100644 --- a/src/test/ssl/t/SSLServer.pm +++ b/src/test/ssl/t/SSLServer.pm @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # This module sets up a test server, for the SSL regression tests. # # The server is configured as follows: diff --git a/src/test/subscription/t/001_rep_changes.pl b/src/test/subscription/t/001_rep_changes.pl index 04635e93e9959..46a88b6d30552 100644 --- a/src/test/subscription/t/001_rep_changes.pl +++ b/src/test/subscription/t/001_rep_changes.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Basic logical replication test use strict; use warnings; diff --git a/src/test/subscription/t/002_types.pl b/src/test/subscription/t/002_types.pl index aedcab2fbcce7..96669f869b1d4 100644 --- a/src/test/subscription/t/002_types.pl +++ b/src/test/subscription/t/002_types.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # This tests that more complex datatypes are replicated correctly # by logical replication use strict; diff --git a/src/test/subscription/t/003_constraints.pl b/src/test/subscription/t/003_constraints.pl index 9f140b552b493..1182a1288cecd 100644 --- a/src/test/subscription/t/003_constraints.pl +++ b/src/test/subscription/t/003_constraints.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # This test checks that constraints work on subscriber use strict; use warnings; diff --git a/src/test/subscription/t/004_sync.pl b/src/test/subscription/t/004_sync.pl index c7926681b66c8..f4afdc241d54c 100644 --- a/src/test/subscription/t/004_sync.pl +++ b/src/test/subscription/t/004_sync.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Tests for logical replication table syncing use strict; use warnings; diff --git a/src/test/subscription/t/005_encoding.pl b/src/test/subscription/t/005_encoding.pl index aec7a17a78e65..a3f56a452f3dc 100644 --- a/src/test/subscription/t/005_encoding.pl +++ b/src/test/subscription/t/005_encoding.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test replication between databases with different encodings use strict; use warnings; diff --git a/src/test/subscription/t/006_rewrite.pl b/src/test/subscription/t/006_rewrite.pl index c6cda10a19b42..37e05a401af26 100644 --- a/src/test/subscription/t/006_rewrite.pl +++ b/src/test/subscription/t/006_rewrite.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test logical replication behavior with heap rewrites use strict; use warnings; diff --git a/src/test/subscription/t/007_ddl.pl b/src/test/subscription/t/007_ddl.pl index 7fe6cc6d639fa..dd10d5cffa8f5 100644 --- a/src/test/subscription/t/007_ddl.pl +++ b/src/test/subscription/t/007_ddl.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test some logical replication DDL behavior use strict; use warnings; diff --git a/src/test/subscription/t/008_diff_schema.pl b/src/test/subscription/t/008_diff_schema.pl index 963334ed89dd6..a04a798a187f5 100644 --- a/src/test/subscription/t/008_diff_schema.pl +++ b/src/test/subscription/t/008_diff_schema.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test behavior with different schema on subscriber use strict; use warnings; diff --git a/src/test/subscription/t/009_matviews.pl b/src/test/subscription/t/009_matviews.pl index 7afc7bdba9f1d..92c7d18be8e9c 100644 --- a/src/test/subscription/t/009_matviews.pl +++ b/src/test/subscription/t/009_matviews.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test materialized views behavior use strict; use warnings; diff --git a/src/test/subscription/t/010_truncate.pl b/src/test/subscription/t/010_truncate.pl index 7fc403e138556..cd3f45c1925ce 100644 --- a/src/test/subscription/t/010_truncate.pl +++ b/src/test/subscription/t/010_truncate.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test TRUNCATE use strict; use warnings; diff --git a/src/test/subscription/t/011_generated.pl b/src/test/subscription/t/011_generated.pl index f35d1cba4c92b..29108cbcf20c6 100644 --- a/src/test/subscription/t/011_generated.pl +++ b/src/test/subscription/t/011_generated.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test generated columns use strict; use warnings; diff --git a/src/test/subscription/t/012_collation.pl b/src/test/subscription/t/012_collation.pl index 4bfcef7c2f50e..8137a165eed57 100644 --- a/src/test/subscription/t/012_collation.pl +++ b/src/test/subscription/t/012_collation.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test collations, in particular nondeterministic ones # (only works with ICU) use strict; diff --git a/src/test/subscription/t/013_partition.pl b/src/test/subscription/t/013_partition.pl index 4b7d637c70d92..6daf8daa3cc97 100644 --- a/src/test/subscription/t/013_partition.pl +++ b/src/test/subscription/t/013_partition.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test logical replication with partitioned tables use strict; use warnings; diff --git a/src/test/subscription/t/014_binary.pl b/src/test/subscription/t/014_binary.pl index 36a2f58e17bec..7260378f5e8c0 100644 --- a/src/test/subscription/t/014_binary.pl +++ b/src/test/subscription/t/014_binary.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Binary mode logical replication test use strict; diff --git a/src/test/subscription/t/015_stream.pl b/src/test/subscription/t/015_stream.pl index 1b0e6fb9fb6a9..d76e14c37640d 100644 --- a/src/test/subscription/t/015_stream.pl +++ b/src/test/subscription/t/015_stream.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test streaming of simple large transaction use strict; use warnings; diff --git a/src/test/subscription/t/016_stream_subxact.pl b/src/test/subscription/t/016_stream_subxact.pl index b6a2d10e91ef0..399036f14b4b0 100644 --- a/src/test/subscription/t/016_stream_subxact.pl +++ b/src/test/subscription/t/016_stream_subxact.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test streaming of large transaction containing large subtransactions use strict; use warnings; diff --git a/src/test/subscription/t/017_stream_ddl.pl b/src/test/subscription/t/017_stream_ddl.pl index be7d7d74e3fba..8194a3882ac18 100644 --- a/src/test/subscription/t/017_stream_ddl.pl +++ b/src/test/subscription/t/017_stream_ddl.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test streaming of large transaction with DDL and subtransactions use strict; use warnings; diff --git a/src/test/subscription/t/018_stream_subxact_abort.pl b/src/test/subscription/t/018_stream_subxact_abort.pl index ddf0621558a5d..aafb555ada547 100644 --- a/src/test/subscription/t/018_stream_subxact_abort.pl +++ b/src/test/subscription/t/018_stream_subxact_abort.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test streaming of large transaction containing multiple subtransactions and rollbacks use strict; use warnings; diff --git a/src/test/subscription/t/019_stream_subxact_ddl_abort.pl b/src/test/subscription/t/019_stream_subxact_ddl_abort.pl index 33e42edfef26a..517a26342baf7 100644 --- a/src/test/subscription/t/019_stream_subxact_ddl_abort.pl +++ b/src/test/subscription/t/019_stream_subxact_ddl_abort.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Test streaming of large transaction with subtransactions, DDLs, DMLs, and # rollbacks use strict; diff --git a/src/test/subscription/t/020_messages.pl b/src/test/subscription/t/020_messages.pl index c8be26be736c3..e5d48ec8a0062 100644 --- a/src/test/subscription/t/020_messages.pl +++ b/src/test/subscription/t/020_messages.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Tests that logical decoding messages use strict; use warnings; diff --git a/src/test/subscription/t/100_bugs.pl b/src/test/subscription/t/100_bugs.pl index b8f46f08cc5d9..76a9a90bcb9c5 100644 --- a/src/test/subscription/t/100_bugs.pl +++ b/src/test/subscription/t/100_bugs.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Tests for various bugs found over time use strict; use warnings; diff --git a/src/tools/git_changelog b/src/tools/git_changelog index 0911389b1e42d..fd1e8aa0ea071 100755 --- a/src/tools/git_changelog +++ b/src/tools/git_changelog @@ -1,5 +1,8 @@ #!/usr/bin/perl + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # src/tools/git_changelog # diff --git a/src/tools/msvc/Install.pm b/src/tools/msvc/Install.pm index ffcd0e5095890..2ff6b0784fa9e 100644 --- a/src/tools/msvc/Install.pm +++ b/src/tools/msvc/Install.pm @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + package Install; # diff --git a/src/tools/msvc/MSBuildProject.pm b/src/tools/msvc/MSBuildProject.pm index ebb169e201202..ebe6530ba58ab 100644 --- a/src/tools/msvc/MSBuildProject.pm +++ b/src/tools/msvc/MSBuildProject.pm @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + package MSBuildProject; # diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm index 58a99e4f104a8..5a1ab33b3d461 100644 --- a/src/tools/msvc/Mkvcbuild.pm +++ b/src/tools/msvc/Mkvcbuild.pm @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + package Mkvcbuild; # diff --git a/src/tools/msvc/Project.pm b/src/tools/msvc/Project.pm index 20f79b382b1bc..2f1679ab44fa9 100644 --- a/src/tools/msvc/Project.pm +++ b/src/tools/msvc/Project.pm @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + package Project; # diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index d2bc7abef0dae..459579d312f30 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + package Solution; # diff --git a/src/tools/msvc/VSObjectFactory.pm b/src/tools/msvc/VSObjectFactory.pm index 541254006128a..61e83f52a095c 100644 --- a/src/tools/msvc/VSObjectFactory.pm +++ b/src/tools/msvc/VSObjectFactory.pm @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + package VSObjectFactory; # diff --git a/src/tools/msvc/build.pl b/src/tools/msvc/build.pl index a75d191b6dd3a..4c51d8b260cf8 100644 --- a/src/tools/msvc/build.pl +++ b/src/tools/msvc/build.pl @@ -1,4 +1,7 @@ # -*-perl-*- hey - emacs - this is a perl file + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # Script that provides 'make' functionality for msvc builds. # diff --git a/src/tools/msvc/config_default.pl b/src/tools/msvc/config_default.pl index 5395e211eb208..256878f582086 100644 --- a/src/tools/msvc/config_default.pl +++ b/src/tools/msvc/config_default.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # Configuration arguments for vcbuild. use strict; use warnings; diff --git a/src/tools/msvc/dummylib/Win32.pm b/src/tools/msvc/dummylib/Win32.pm index 079e276f24660..d47e59a609003 100644 --- a/src/tools/msvc/dummylib/Win32.pm +++ b/src/tools/msvc/dummylib/Win32.pm @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + package Win32; use strict; use warnings; diff --git a/src/tools/msvc/dummylib/Win32/Registry.pm b/src/tools/msvc/dummylib/Win32/Registry.pm index 1433b1fb54f3c..73bd898497f3e 100644 --- a/src/tools/msvc/dummylib/Win32/Registry.pm +++ b/src/tools/msvc/dummylib/Win32/Registry.pm @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + package Win32::Registry; use strict; diff --git a/src/tools/msvc/dummylib/Win32API/File.pm b/src/tools/msvc/dummylib/Win32API/File.pm index bfba9cc7d6134..b74d28fc29abb 100644 --- a/src/tools/msvc/dummylib/Win32API/File.pm +++ b/src/tools/msvc/dummylib/Win32API/File.pm @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + package Win32API::File; use strict; diff --git a/src/tools/msvc/gendef.pl b/src/tools/msvc/gendef.pl index 41d53eda468b4..71c18580a654d 100644 --- a/src/tools/msvc/gendef.pl +++ b/src/tools/msvc/gendef.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use 5.8.0; diff --git a/src/tools/msvc/install.pl b/src/tools/msvc/install.pl index 66c42557d4d30..45276d0d18caa 100755 --- a/src/tools/msvc/install.pl +++ b/src/tools/msvc/install.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # Script that provides 'make install' functionality for msvc builds # diff --git a/src/tools/msvc/mkvcbuild.pl b/src/tools/msvc/mkvcbuild.pl index 2e396c0672687..3749e7f23b15c 100644 --- a/src/tools/msvc/mkvcbuild.pl +++ b/src/tools/msvc/mkvcbuild.pl @@ -1,3 +1,6 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # Script that parses Unix style build environment and generates build files # for building with Visual Studio. diff --git a/src/tools/msvc/pgbison.pl b/src/tools/msvc/pgbison.pl index 774d5be059582..e5d16ae9b74ad 100644 --- a/src/tools/msvc/pgbison.pl +++ b/src/tools/msvc/pgbison.pl @@ -1,5 +1,8 @@ # -*-perl-*- hey - emacs - this is a perl file + +# Copyright (c) 2021, PostgreSQL Global Development Group + # src/tools/msvc/pgbison.pl use strict; diff --git a/src/tools/msvc/pgflex.pl b/src/tools/msvc/pgflex.pl index 26c73dbfade27..5caebe6bd6c9c 100644 --- a/src/tools/msvc/pgflex.pl +++ b/src/tools/msvc/pgflex.pl @@ -1,5 +1,8 @@ # -*-perl-*- hey - emacs - this is a perl file + +# Copyright (c) 2021, PostgreSQL Global Development Group + # src/tools/msvc/pgflex.pl use strict; diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index d9bac6c3a29cb..8815ee7e90253 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -1,5 +1,8 @@ # -*-perl-*- hey - emacs - this is a perl file + +# Copyright (c) 2021, PostgreSQL Global Development Group + # src/tools/msvc/vcregress.pl use strict; diff --git a/src/tools/pginclude/pgcheckdefines b/src/tools/pginclude/pgcheckdefines index 0a760d6ecadf2..66033236132e1 100755 --- a/src/tools/pginclude/pgcheckdefines +++ b/src/tools/pginclude/pgcheckdefines @@ -1,5 +1,8 @@ #! /usr/bin/perl + +# Copyright (c) 2021, PostgreSQL Global Development Group + # # This script looks for symbols that are referenced in #ifdef or defined() # tests without having #include'd the file that defines them. Since this diff --git a/src/tools/pgindent/pgindent b/src/tools/pgindent/pgindent index feb02067c5ad6..6d2ca9c59a1f2 100755 --- a/src/tools/pgindent/pgindent +++ b/src/tools/pgindent/pgindent @@ -1,5 +1,8 @@ #!/usr/bin/perl + +# Copyright (c) 2021, PostgreSQL Global Development Group + use strict; use warnings; use 5.008001; From 8b82de0164c13eb3b113a525dc7eda7887f5238b Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Fri, 7 May 2021 11:37:37 -0400 Subject: [PATCH 255/671] Remove extraneous newlines added by perl copyright patch --- contrib/intarray/bench/bench.pl | 1 - contrib/intarray/bench/create_test.pl | 1 - contrib/seg/seg-validate.pl | 1 - contrib/seg/sort-segments.pl | 1 - src/interfaces/libpq/test/regress.pl | 1 - src/pl/plperl/plperl_opmask.pl | 1 - src/test/locale/sort-test.pl | 1 - src/test/perl/PostgresNode.pm | 1 - src/test/perl/RecursiveCopy.pm | 1 - src/test/perl/TestLib.pm | 1 - src/tools/git_changelog | 1 - src/tools/msvc/pgbison.pl | 1 - src/tools/msvc/pgflex.pl | 1 - src/tools/msvc/vcregress.pl | 1 - src/tools/pginclude/pgcheckdefines | 1 - src/tools/pgindent/pgindent | 1 - 16 files changed, 16 deletions(-) diff --git a/contrib/intarray/bench/bench.pl b/contrib/intarray/bench/bench.pl index 6a618cbe9c019..a4341d12cc2bf 100755 --- a/contrib/intarray/bench/bench.pl +++ b/contrib/intarray/bench/bench.pl @@ -1,6 +1,5 @@ #!/usr/bin/perl - # Copyright (c) 2021, PostgreSQL Global Development Group use strict; diff --git a/contrib/intarray/bench/create_test.pl b/contrib/intarray/bench/create_test.pl index 4df46d05d0f77..993a4572f4167 100755 --- a/contrib/intarray/bench/create_test.pl +++ b/contrib/intarray/bench/create_test.pl @@ -1,6 +1,5 @@ #!/usr/bin/perl - # Copyright (c) 2021, PostgreSQL Global Development Group # contrib/intarray/bench/create_test.pl diff --git a/contrib/seg/seg-validate.pl b/contrib/seg/seg-validate.pl index bdd8e1ac8bf8e..eee27056338be 100755 --- a/contrib/seg/seg-validate.pl +++ b/contrib/seg/seg-validate.pl @@ -1,6 +1,5 @@ #!/usr/bin/perl - # Copyright (c) 2021, PostgreSQL Global Development Group use strict; diff --git a/contrib/seg/sort-segments.pl b/contrib/seg/sort-segments.pl index 370da29b2ca4d..ec0d0a5699775 100755 --- a/contrib/seg/sort-segments.pl +++ b/contrib/seg/sort-segments.pl @@ -1,6 +1,5 @@ #!/usr/bin/perl - # Copyright (c) 2021, PostgreSQL Global Development Group # this script will sort any table with the segment data type in its last column diff --git a/src/interfaces/libpq/test/regress.pl b/src/interfaces/libpq/test/regress.pl index cc1db485f4984..de705cf5c9f15 100644 --- a/src/interfaces/libpq/test/regress.pl +++ b/src/interfaces/libpq/test/regress.pl @@ -1,6 +1,5 @@ #!/usr/bin/perl - # Copyright (c) 2021, PostgreSQL Global Development Group use strict; diff --git a/src/pl/plperl/plperl_opmask.pl b/src/pl/plperl/plperl_opmask.pl index 7ad315f1fb23d..4f7b19db18a0c 100644 --- a/src/pl/plperl/plperl_opmask.pl +++ b/src/pl/plperl/plperl_opmask.pl @@ -1,6 +1,5 @@ #!perl - # Copyright (c) 2021, PostgreSQL Global Development Group use strict; diff --git a/src/test/locale/sort-test.pl b/src/test/locale/sort-test.pl index a2a17e7f34751..ba8d3f3896cea 100755 --- a/src/test/locale/sort-test.pl +++ b/src/test/locale/sort-test.pl @@ -1,6 +1,5 @@ #! /usr/bin/perl - # Copyright (c) 2021, PostgreSQL Global Development Group use strict; diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index 8493066eb2428..fcbd18af798db 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -1,5 +1,4 @@ - # Copyright (c) 2021, PostgreSQL Global Development Group =pod diff --git a/src/test/perl/RecursiveCopy.pm b/src/test/perl/RecursiveCopy.pm index 341cee62fae22..8a9cc722b5565 100644 --- a/src/test/perl/RecursiveCopy.pm +++ b/src/test/perl/RecursiveCopy.pm @@ -1,5 +1,4 @@ - # Copyright (c) 2021, PostgreSQL Global Development Group =pod diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index 5dbe7cf397645..000eb0df1cbc2 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -1,5 +1,4 @@ - # Copyright (c) 2021, PostgreSQL Global Development Group =pod diff --git a/src/tools/git_changelog b/src/tools/git_changelog index fd1e8aa0ea071..30a64b371a84b 100755 --- a/src/tools/git_changelog +++ b/src/tools/git_changelog @@ -1,6 +1,5 @@ #!/usr/bin/perl - # Copyright (c) 2021, PostgreSQL Global Development Group # diff --git a/src/tools/msvc/pgbison.pl b/src/tools/msvc/pgbison.pl index e5d16ae9b74ad..e83c0b1f79a66 100644 --- a/src/tools/msvc/pgbison.pl +++ b/src/tools/msvc/pgbison.pl @@ -1,6 +1,5 @@ # -*-perl-*- hey - emacs - this is a perl file - # Copyright (c) 2021, PostgreSQL Global Development Group # src/tools/msvc/pgbison.pl diff --git a/src/tools/msvc/pgflex.pl b/src/tools/msvc/pgflex.pl index 5caebe6bd6c9c..0728b85d4de92 100644 --- a/src/tools/msvc/pgflex.pl +++ b/src/tools/msvc/pgflex.pl @@ -1,6 +1,5 @@ # -*-perl-*- hey - emacs - this is a perl file - # Copyright (c) 2021, PostgreSQL Global Development Group # src/tools/msvc/pgflex.pl diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index 8815ee7e90253..860899c039417 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -1,6 +1,5 @@ # -*-perl-*- hey - emacs - this is a perl file - # Copyright (c) 2021, PostgreSQL Global Development Group # src/tools/msvc/vcregress.pl diff --git a/src/tools/pginclude/pgcheckdefines b/src/tools/pginclude/pgcheckdefines index 66033236132e1..d6565b282e1d3 100755 --- a/src/tools/pginclude/pgcheckdefines +++ b/src/tools/pginclude/pgcheckdefines @@ -1,6 +1,5 @@ #! /usr/bin/perl - # Copyright (c) 2021, PostgreSQL Global Development Group # diff --git a/src/tools/pgindent/pgindent b/src/tools/pgindent/pgindent index 6d2ca9c59a1f2..f8190b6c354af 100755 --- a/src/tools/pgindent/pgindent +++ b/src/tools/pgindent/pgindent @@ -1,6 +1,5 @@ #!/usr/bin/perl - # Copyright (c) 2021, PostgreSQL Global Development Group use strict; From 4e8c0f1a0d0d095a749a329a216c88a340a455b6 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 7 May 2021 11:46:37 -0400 Subject: [PATCH 256/671] AlterSubscription_refresh: avoid stomping on global variable This patch replaces use of the global "wrconn" variable in AlterSubscription_refresh with a local variable of the same name, making it consistent with other functions in subscriptioncmds.c (e.g. DropSubscription). The global wrconn is only meant to be used for logical apply/tablesync worker. Abusing it this way is known to cause trouble if an apply worker manages to do a subscription refresh, such as reported by Jeremy Finzel and diagnosed by Andres Freund back in November 2020, at https://www.postgresql.org/message-id/20201111215820.qihhrz7fayu6myfi@alap3.anarazel.de Backpatch to 10. In branch master, also move the connection establishment to occur outside the PG_TRY block; this way we can remove a test for NULL in PG_FINALLY, and it also makes the code more consistent with similar code in the same file. Author: Peter Smith Reviewed-by: Bharath Rupireddy Reviewed-by: Japin Li Discussion: https://postgr.es/m/CAHut+Pu7Jv9L2BOEx_Z0UtJxfDevQSAUW2mJqWU+CtmDrEZVAg@mail.gmail.com --- src/backend/commands/subscriptioncmds.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index 517c8edd3b260..bbb2f5d029ea7 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -556,18 +556,19 @@ AlterSubscription_refresh(Subscription *sub, bool copy_data) char state; } SubRemoveRels; SubRemoveRels *sub_remove_rels; + WalReceiverConn *wrconn; /* Load the library providing us libpq calls. */ load_file("libpqwalreceiver", false); + /* Try to connect to the publisher. */ + wrconn = walrcv_connect(sub->conninfo, true, sub->name, &err); + if (!wrconn) + ereport(ERROR, + (errmsg("could not connect to the publisher: %s", err))); + PG_TRY(); { - /* Try to connect to the publisher. */ - wrconn = walrcv_connect(sub->conninfo, true, sub->name, &err); - if (!wrconn) - ereport(ERROR, - (errmsg("could not connect to the publisher: %s", err))); - /* Get the table list from publisher. */ pubrel_names = fetch_table_list(wrconn, sub->publications); @@ -737,8 +738,7 @@ AlterSubscription_refresh(Subscription *sub, bool copy_data) } PG_FINALLY(); { - if (wrconn) - walrcv_disconnect(wrconn); + walrcv_disconnect(wrconn); } PG_END_TRY(); @@ -1062,7 +1062,7 @@ DropSubscription(DropSubscriptionStmt *stmt, bool isTopLevel) ListCell *lc; char originname[NAMEDATALEN]; char *err = NULL; - WalReceiverConn *wrconn = NULL; + WalReceiverConn *wrconn; Form_pg_subscription form; List *rstates; From 9f989a8581cc37879d493a5a78b0f01ec0e3245a Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 7 May 2021 17:47:22 +0200 Subject: [PATCH 257/671] Fix typo --- src/backend/partitioning/partbounds.c | 2 +- src/test/regress/expected/create_table.out | 6 +++--- src/test/regress/sql/create_table.sql | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index c9c789297d4df..d3dedfd784442 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -2899,7 +2899,7 @@ check_new_partition_bound(char *relname, Relation parent, ereport(ERROR, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), errmsg("every hash partition modulus must be a factor of the next larger modulus"), - errdetail("The new modulus %d is not factor of %d, the modulus of existing partition \"%s\".", + errdetail("The new modulus %d is not a factor of %d, the modulus of existing partition \"%s\".", spec->modulus, next_modulus, get_rel_name(partdesc->oids[boundinfo->indexes[offset + 1]])))); } diff --git a/src/test/regress/expected/create_table.out b/src/test/regress/expected/create_table.out index a392df2d6a506..ad89dd05c142e 100644 --- a/src/test/regress/expected/create_table.out +++ b/src/test/regress/expected/create_table.out @@ -780,14 +780,14 @@ CREATE TABLE hash_parted ( CREATE TABLE hpart_1 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 10, REMAINDER 0); CREATE TABLE hpart_2 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 50, REMAINDER 1); CREATE TABLE hpart_3 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 200, REMAINDER 2); --- modulus 25 is factor of modulus of 50 but 10 is not factor of 25. +-- modulus 25 is factor of modulus of 50 but 10 is not a factor of 25. CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 25, REMAINDER 3); ERROR: every hash partition modulus must be a factor of the next larger modulus DETAIL: The new modulus 25 is not divisible by 10, the modulus of existing partition "hpart_1". --- previous modulus 50 is factor of 150 but this modulus is not factor of next modulus 200. +-- previous modulus 50 is factor of 150 but this modulus is not a factor of next modulus 200. CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 150, REMAINDER 3); ERROR: every hash partition modulus must be a factor of the next larger modulus -DETAIL: The new modulus 150 is not factor of 200, the modulus of existing partition "hpart_3". +DETAIL: The new modulus 150 is not a factor of 200, the modulus of existing partition "hpart_3". -- trying to specify range for the hash partitioned table CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES FROM ('a', 1) TO ('z'); ERROR: invalid bound specification for a hash partition diff --git a/src/test/regress/sql/create_table.sql b/src/test/regress/sql/create_table.sql index d257679ba68c1..54cbf6c0595f0 100644 --- a/src/test/regress/sql/create_table.sql +++ b/src/test/regress/sql/create_table.sql @@ -631,9 +631,9 @@ CREATE TABLE hash_parted ( CREATE TABLE hpart_1 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 10, REMAINDER 0); CREATE TABLE hpart_2 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 50, REMAINDER 1); CREATE TABLE hpart_3 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 200, REMAINDER 2); --- modulus 25 is factor of modulus of 50 but 10 is not factor of 25. +-- modulus 25 is factor of modulus of 50 but 10 is not a factor of 25. CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 25, REMAINDER 3); --- previous modulus 50 is factor of 150 but this modulus is not factor of next modulus 200. +-- previous modulus 50 is factor of 150 but this modulus is not a factor of next modulus 200. CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 150, REMAINDER 3); -- trying to specify range for the hash partitioned table CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES FROM ('a', 1) TO ('z'); From 8292c0675a793a5afd0a8eedbeb0db7abfb844f3 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Fri, 7 May 2021 14:27:18 -0400 Subject: [PATCH 258/671] Add a README and Makefile recipe for Gen_dummy_probes.pl Discussion: https://postgr.es/m/20210506035602.3akutfvvojngj3nb@alap3.anarazel.de --- src/backend/utils/Makefile | 10 +++++++++ src/backend/utils/README.Gen_dummy_probes | 25 +++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/backend/utils/README.Gen_dummy_probes diff --git a/src/backend/utils/Makefile b/src/backend/utils/Makefile index 59b22552606fd..bcf9dd41adfbe 100644 --- a/src/backend/utils/Makefile +++ b/src/backend/utils/Makefile @@ -88,6 +88,16 @@ $(top_builddir)/src/include/utils/probes.h: probes.h cd '$(dir $@)' && rm -f $(notdir $@) && \ $(LN_S) "../../../$(subdir)/probes.h" . +# Recipe for rebuilding the Perl version of Gen_dummy_probes +# Nothing depends on it, so it will never be called unless explicitly requested +# The last two lines of the recipe format the script according to our +# standard and put back some blank lines for improved readability. +Gen_dummy_probes.pl: Gen_dummy_probes.sed + perl -ni -e ' print; exit if /^\$$0/;' $@ + s2p -f $< | sed -e 1,4d -e '/# #/d' -e '$$d' >> $@ + perltidy --profile=../../tools/pgindent/perltidyrc $@ + perl -pi -e '!$$lb && ( /^\t+#/ || /^# prototypes/ ) && print qq{\n};'\ + -e '$$lb = m/^\n/; ' $@ .PHONY: install-data install-data: errcodes.txt installdirs diff --git a/src/backend/utils/README.Gen_dummy_probes b/src/backend/utils/README.Gen_dummy_probes new file mode 100644 index 0000000000000..90fec37bce471 --- /dev/null +++ b/src/backend/utils/README.Gen_dummy_probes @@ -0,0 +1,25 @@ +# Generating dummy probes + +If Postgres isn't configured with dtrace enabled, we need to generate +dummy probes for the entries in probes.d, that do nothing. + +This is accomplished in Unix via the sed script `Gen_dummy_probes.sed`. We +used to use this in MSVC builds using the perl utility `psed`, which mimicked +sed. However, that utility disappeared from Windows perl distributions and so +we converted the sed script to a perl script to be used in MSVC builds. + +We still keep the sed script as the authoritative source for generating +these dummy probes because except on Windows perl is not a hard requirement +when building from a tarball. + +So, if you need to change the way dummy probes are generated, first change +the sed script, and when it's working generate the perl script. This can +be accomplished by using the perl utility s2p. + +s2p is no longer part of the perl core, so it might not be on your system, +but it is available on CPAN and also in many package systems. e.g. +on Fedora it can be installed using `cpan App::s2p` or +`dnf install perl-App-s2p`. + +The Makefile contains a recipe for regenerating Gen_dummy_probes.pl, so all +you need to do is once you have s2p installed is `make Gen_dummy_probes.pl` From c6a01d924939306e95c8deafd09352be6a955648 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Fri, 7 May 2021 22:29:43 +0200 Subject: [PATCH 259/671] Copy the INSERT query in postgres_fdw When executing the INSERT with batching, we may need to rebuild the query when the batch size changes, in which case we pfree the current string. We must not release the original string, stored in fdw_private, because that may be needed in EXPLAIN ANALYZE. So make copy of the SQL, but only for INSERT queries. Reported-by: Pavel Stehule Discussion: https://postgr.es/m/CAFj8pRCL_Rjw-MCR6J7VX9OF7MR6PA5K8qUbrMvprW_e-aHkfQ%40mail.gmail.com --- contrib/postgres_fdw/postgres_fdw.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index 8bcdc8d6160dc..4ff58d9c2756c 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -3903,7 +3903,10 @@ create_foreign_modify(EState *estate, /* Set up remote query information. */ fmstate->query = query; if (operation == CMD_INSERT) + { + fmstate->query = pstrdup(fmstate->query); fmstate->orig_query = pstrdup(fmstate->query); + } fmstate->target_attrs = target_attrs; fmstate->values_end = values_end; fmstate->has_returning = has_returning; From 9681f2160dcbe2a02fd2e2db2322ea204eff6562 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sat, 8 May 2021 10:18:05 +0900 Subject: [PATCH 260/671] Fix incorrect error code for CREATE/ALTER TABLE COMPRESSION Specifying an incorrect value for the compression method of an attribute caused ERRCODE_FEATURE_NOT_SUPPORTED to be raised as error. Use instead ERRCODE_INVALID_PARAMETER_VALUE to be more consistent. Author: Dilip Kumar Discussion: https://postgr.es/m/CAFiTN-vH84fE-8C4zGZw4v0Wyh4Y2v=5JWg2fGE5+LPaDvz1GQ@mail.gmail.com --- src/backend/commands/tablecmds.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 3b5d411683918..591bf01189b11 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -18640,7 +18640,7 @@ GetAttributeCompression(Form_pg_attribute att, char *compression) cmethod = CompressionNameToMethod(compression); if (!CompressionMethodIsValid(cmethod)) ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid compression method \"%s\"", compression))); return cmethod; From f9b809e7fbe36cd3fe1ce33edb277288a31da386 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 8 May 2021 11:33:13 -0400 Subject: [PATCH 261/671] Doc: copy-editing for debug_invalidate_system_caches_always description. I came to fix "useful only useful", but the more I looked at the text the more things I thought could be improved. --- doc/src/sgml/config.sgml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 5efbfe97b5d95..a71c8821f6a80 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -10406,28 +10406,29 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' - When set to 1, each cache lookup for a system catalog entry is - invalidated at the first possible opportunity, irrespective of whether + When set to 1, each system catalog cache entry is + invalidated at the first possible opportunity, whether or not anything that would render it invalid really occurred. Caching of system catalogs is effectively disabled as a result, so the server will run extremely slowly. Higher values run the cache invalidation - recursively, which is even slower and useful only useful for testing - in very specific scenarios. + recursively, which is even slower and only useful for testing + the caching logic itself. The default value of 0 + selects normal catalog caching behavior. - This option can be very helpful when trying to trigger - hard-to-reproduce bugs involving concurrency and catalog changes but + This parameter can be very helpful when trying to trigger + hard-to-reproduce bugs involving concurrent catalog changes, but it is otherwise rarely needed. See the source code files inval.c and pg_config_manual.h for details. - This setting is supported but off by default (0) when - CLOBBER_CACHE_ENABLED is defined at compile time + This parameter is supported when + CLOBBER_CACHE_ENABLED was defined at compile time (which happens automatically when using the - configure option + configure option ). In production builds, its value will always be 0 and attempts to set it to another value will raise an error. From a55a98477b690dedb9b4368d7e5710c8e7fa534e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 8 May 2021 12:13:33 -0400 Subject: [PATCH 262/671] Sync guc.c and postgresql.conf.sample with the SGML docs. It seems that various people have moved GUCs around in the config.sgml listing without bothering to make the code agree. Ensure that the config_group codes assigned to GUCs match where they are listed in config.sgml. Likewise ensure that postgresql.conf.sample lists GUCs in the same sub-section and same ordering as they appear in config.sgml. (I've got some doubts about some of these choices, but for the purposes of this patch, we'll treat config.sgml as gospel.) Notably, this requires adding a WAL_RECOVERY config_group value, because 1d257577e didn't. As long as we're renumbering that enum anyway, let's take out the values corresponding to major groups that are divided into sub-groups. No GUC should be assigned to the major group itself, so those values just create a temptation to do the wrong thing, while adding work for translators. In passing, adjust the short_desc strings for PRESET_OPTIONS GUCs to uniformly use the phrasing "Shows XYZ.", removing the impression some of these strings left that you can set the value. While some of these errors are old, no back-patch, as changing the contents of the pg_settings view in stable branches seems more likely to be seen as a compatibility break than anything helpful. Bharath Rupireddy, Justin Pryzby, Tom Lane Discussion: https://postgr.es/m/16997-ff16127f6e0d1390@postgresql.org Discussion: https://postgr.es/m/20210413123139.GE6091@telsasoft.com --- src/backend/utils/misc/guc.c | 56 ++++------- src/backend/utils/misc/postgresql.conf.sample | 95 +++++++++---------- src/include/utils/guc_tables.h | 15 +-- 3 files changed, 71 insertions(+), 95 deletions(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index f2c7c2486b088..9db40b134a8ae 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -703,16 +703,12 @@ const char *const config_group_names[] = gettext_noop("Ungrouped"), /* FILE_LOCATIONS */ gettext_noop("File Locations"), - /* CONN_AUTH */ - gettext_noop("Connections and Authentication"), /* CONN_AUTH_SETTINGS */ gettext_noop("Connections and Authentication / Connection Settings"), /* CONN_AUTH_AUTH */ gettext_noop("Connections and Authentication / Authentication"), /* CONN_AUTH_SSL */ gettext_noop("Connections and Authentication / SSL"), - /* RESOURCES */ - gettext_noop("Resource Usage"), /* RESOURCES_MEM */ gettext_noop("Resource Usage / Memory"), /* RESOURCES_DISK */ @@ -725,20 +721,18 @@ const char *const config_group_names[] = gettext_noop("Resource Usage / Background Writer"), /* RESOURCES_ASYNCHRONOUS */ gettext_noop("Resource Usage / Asynchronous Behavior"), - /* WAL */ - gettext_noop("Write-Ahead Log"), /* WAL_SETTINGS */ gettext_noop("Write-Ahead Log / Settings"), /* WAL_CHECKPOINTS */ gettext_noop("Write-Ahead Log / Checkpoints"), /* WAL_ARCHIVING */ gettext_noop("Write-Ahead Log / Archiving"), + /* WAL_RECOVERY */ + gettext_noop("Write-Ahead Log / Recovery"), /* WAL_ARCHIVE_RECOVERY */ gettext_noop("Write-Ahead Log / Archive Recovery"), /* WAL_RECOVERY_TARGET */ gettext_noop("Write-Ahead Log / Recovery Target"), - /* REPLICATION */ - gettext_noop("Replication"), /* REPLICATION_SENDING */ gettext_noop("Replication / Sending Servers"), /* REPLICATION_PRIMARY */ @@ -747,8 +741,6 @@ const char *const config_group_names[] = gettext_noop("Replication / Standby Servers"), /* REPLICATION_SUBSCRIBERS */ gettext_noop("Replication / Subscribers"), - /* QUERY_TUNING */ - gettext_noop("Query Tuning"), /* QUERY_TUNING_METHOD */ gettext_noop("Query Tuning / Planner Method Configuration"), /* QUERY_TUNING_COST */ @@ -757,8 +749,6 @@ const char *const config_group_names[] = gettext_noop("Query Tuning / Genetic Query Optimizer"), /* QUERY_TUNING_OTHER */ gettext_noop("Query Tuning / Other Planner Options"), - /* LOGGING */ - gettext_noop("Reporting and Logging"), /* LOGGING_WHERE */ gettext_noop("Reporting and Logging / Where to Log"), /* LOGGING_WHEN */ @@ -766,17 +756,13 @@ const char *const config_group_names[] = /* LOGGING_WHAT */ gettext_noop("Reporting and Logging / What to Log"), /* PROCESS_TITLE */ - gettext_noop("Process Title"), - /* STATS */ - gettext_noop("Statistics"), + gettext_noop("Reporting and Logging / Process Title"), /* STATS_MONITORING */ gettext_noop("Statistics / Monitoring"), /* STATS_COLLECTOR */ gettext_noop("Statistics / Query and Index Statistics Collector"), /* AUTOVACUUM */ gettext_noop("Autovacuum"), - /* CLIENT_CONN */ - gettext_noop("Client Connection Defaults"), /* CLIENT_CONN_STATEMENT */ gettext_noop("Client Connection Defaults / Statement Behavior"), /* CLIENT_CONN_LOCALE */ @@ -787,8 +773,6 @@ const char *const config_group_names[] = gettext_noop("Client Connection Defaults / Other Defaults"), /* LOCK_MANAGEMENT */ gettext_noop("Lock Management"), - /* COMPAT_OPTIONS */ - gettext_noop("Version and Platform Compatibility"), /* COMPAT_OPTIONS_PREVIOUS */ gettext_noop("Version and Platform Compatibility / Previous PostgreSQL Versions"), /* COMPAT_OPTIONS_CLIENT */ @@ -1188,7 +1172,7 @@ static struct config_bool ConfigureNamesBool[] = check_bonjour, NULL, NULL }, { - {"track_commit_timestamp", PGC_POSTMASTER, REPLICATION, + {"track_commit_timestamp", PGC_POSTMASTER, REPLICATION_SENDING, gettext_noop("Collects transaction commit time."), NULL }, @@ -1297,7 +1281,7 @@ static struct config_bool ConfigureNamesBool[] = NULL, NULL, NULL }, { - {"recovery_prefetch", PGC_SIGHUP, WAL_SETTINGS, + {"recovery_prefetch", PGC_SIGHUP, WAL_RECOVERY, gettext_noop("Prefetch referenced blocks during recovery."), gettext_noop("Read ahead of the current replay position to find uncached blocks.") }, @@ -1306,7 +1290,7 @@ static struct config_bool ConfigureNamesBool[] = NULL, assign_recovery_prefetch, NULL }, { - {"recovery_prefetch_fpw", PGC_SIGHUP, WAL_SETTINGS, + {"recovery_prefetch_fpw", PGC_SIGHUP, WAL_RECOVERY, gettext_noop("Prefetch blocks that have full page images in the WAL."), gettext_noop("On some systems, there is no benefit to prefetching pages that will be " "entirely overwritten, but if the logical page size of the filesystem is " @@ -1869,7 +1853,7 @@ static struct config_bool ConfigureNamesBool[] = { {"integer_datetimes", PGC_INTERNAL, PRESET_OPTIONS, - gettext_noop("Datetimes are integer based."), + gettext_noop("Shows whether datetimes are integer based."), NULL, GUC_REPORT | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE }, @@ -2416,7 +2400,7 @@ static struct config_int ConfigureNamesInt[] = { {"data_directory_mode", PGC_INTERNAL, PRESET_OPTIONS, - gettext_noop("Mode of the data directory."), + gettext_noop("Shows the mode of the data directory."), gettext_noop("The parameter value is a numeric mode specification " "in the form accepted by the chmod and umask system " "calls. (To use the customary octal format the number " @@ -2772,7 +2756,7 @@ static struct config_int ConfigureNamesInt[] = }, { - {"wal_decode_buffer_size", PGC_POSTMASTER, WAL_ARCHIVE_RECOVERY, + {"wal_decode_buffer_size", PGC_POSTMASTER, WAL_RECOVERY, gettext_noop("Maximum buffer size for reading ahead in the WAL during recovery."), gettext_noop("This controls the maximum distance we can read ahead in the WAL to prefetch referenced blocks."), GUC_UNIT_BYTE @@ -3393,7 +3377,7 @@ static struct config_int ConfigureNamesInt[] = }, { - {"tcp_keepalives_idle", PGC_USERSET, CLIENT_CONN_OTHER, + {"tcp_keepalives_idle", PGC_USERSET, CONN_AUTH_SETTINGS, gettext_noop("Time between issuing TCP keepalives."), gettext_noop("A value of 0 uses the system default."), GUC_UNIT_S @@ -3404,7 +3388,7 @@ static struct config_int ConfigureNamesInt[] = }, { - {"tcp_keepalives_interval", PGC_USERSET, CLIENT_CONN_OTHER, + {"tcp_keepalives_interval", PGC_USERSET, CONN_AUTH_SETTINGS, gettext_noop("Time between TCP keepalive retransmits."), gettext_noop("A value of 0 uses the system default."), GUC_UNIT_S @@ -3426,7 +3410,7 @@ static struct config_int ConfigureNamesInt[] = }, { - {"tcp_keepalives_count", PGC_USERSET, CLIENT_CONN_OTHER, + {"tcp_keepalives_count", PGC_USERSET, CONN_AUTH_SETTINGS, gettext_noop("Maximum number of TCP keepalive retransmits."), gettext_noop("This controls the number of consecutive keepalive retransmits that can be " "lost before a connection is considered dead. A value of 0 uses the " @@ -3506,7 +3490,7 @@ static struct config_int ConfigureNamesInt[] = }, { - {"track_activity_query_size", PGC_POSTMASTER, RESOURCES_MEM, + {"track_activity_query_size", PGC_POSTMASTER, STATS_COLLECTOR, gettext_noop("Sets the size reserved for pg_stat_activity.query, in bytes."), NULL, GUC_UNIT_BYTE @@ -3528,7 +3512,7 @@ static struct config_int ConfigureNamesInt[] = }, { - {"tcp_user_timeout", PGC_USERSET, CLIENT_CONN_OTHER, + {"tcp_user_timeout", PGC_USERSET, CONN_AUTH_SETTINGS, gettext_noop("TCP user timeout."), gettext_noop("A value of 0 uses the system default."), GUC_UNIT_MS @@ -3573,7 +3557,7 @@ static struct config_int ConfigureNamesInt[] = }, { - {"client_connection_check_interval", PGC_USERSET, CLIENT_CONN_OTHER, + {"client_connection_check_interval", PGC_USERSET, CONN_AUTH_SETTINGS, gettext_noop("Sets the time interval between checks for disconnection while running queries."), NULL, GUC_UNIT_MS @@ -4102,7 +4086,7 @@ static struct config_string ConfigureNamesString[] = /* See main.c about why defaults for LC_foo are not all alike */ { - {"lc_collate", PGC_INTERNAL, CLIENT_CONN_LOCALE, + {"lc_collate", PGC_INTERNAL, PRESET_OPTIONS, gettext_noop("Shows the collation order locale."), NULL, GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE @@ -4113,7 +4097,7 @@ static struct config_string ConfigureNamesString[] = }, { - {"lc_ctype", PGC_INTERNAL, CLIENT_CONN_LOCALE, + {"lc_ctype", PGC_INTERNAL, PRESET_OPTIONS, gettext_noop("Shows the character classification and case conversion locale."), NULL, GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE @@ -4209,8 +4193,8 @@ static struct config_string ConfigureNamesString[] = { /* Can't be set in postgresql.conf */ - {"server_encoding", PGC_INTERNAL, CLIENT_CONN_LOCALE, - gettext_noop("Sets the server (database) character set encoding."), + {"server_encoding", PGC_INTERNAL, PRESET_OPTIONS, + gettext_noop("Shows the server (database) character set encoding."), NULL, GUC_IS_NAME | GUC_REPORT | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE }, @@ -4429,7 +4413,7 @@ static struct config_string ConfigureNamesString[] = { {"ssl_library", PGC_INTERNAL, PRESET_OPTIONS, - gettext_noop("Name of the SSL library."), + gettext_noop("Shows the name of the SSL library."), NULL, GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE }, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 0f7f49b949c2f..3307d3a635aaa 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -85,6 +85,10 @@ #tcp_user_timeout = 0 # TCP_USER_TIMEOUT, in milliseconds; # 0 selects the system default +#client_connection_check_interval = 0 # time between checks for client + # disconnection while running queries; + # 0 for never + # - Authentication - #authentication_timeout = 1min # 1s-600s @@ -178,17 +182,17 @@ # - Asynchronous Behavior - +#backend_flush_after = 0 # measured in pages, 0 disables #effective_io_concurrency = 1 # 1-1000; 0 disables prefetching #maintenance_io_concurrency = 10 # 1-1000; 0 disables prefetching #max_worker_processes = 8 # (change requires restart) -#max_parallel_maintenance_workers = 2 # taken from max_parallel_workers #max_parallel_workers_per_gather = 2 # taken from max_parallel_workers -#parallel_leader_participation = on +#max_parallel_maintenance_workers = 2 # taken from max_parallel_workers #max_parallel_workers = 8 # maximum number of max_worker_processes that # can be used in parallel operations +#parallel_leader_participation = on #old_snapshot_threshold = -1 # 1min-60d; -1 disables; 0 is immediate # (change requires restart) -#backend_flush_after = 0 # measured in pages, 0 disables #------------------------------------------------------------------------------ @@ -212,9 +216,9 @@ # fsync_writethrough # open_sync #full_page_writes = on # recover from partial page writes -#wal_compression = off # enable compression of full-page writes #wal_log_hints = off # also do full page writes of non-critical updates # (change requires restart) +#wal_compression = off # enable compression of full-page writes #wal_init_zero = on # zero-fill new WAL files #wal_recycle = on # recycle WAL files #wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers @@ -229,17 +233,11 @@ # - Checkpoints - #checkpoint_timeout = 5min # range 30s-1d -#max_wal_size = 1GB -#min_wal_size = 80MB #checkpoint_completion_target = 0.9 # checkpoint target duration, 0.0 - 1.0 #checkpoint_flush_after = 0 # measured in pages, 0 disables #checkpoint_warning = 30s # 0 disables - -# - Prefetching during recovery - - -#wal_decode_buffer_size = 512kB # lookahead window used for prefetching -#recovery_prefetch = off # prefetch pages referenced in the WAL? -#recovery_prefetch_fpw = off # even pages logged with full page? +#max_wal_size = 1GB +#min_wal_size = 80MB # - Archiving - @@ -252,6 +250,12 @@ #archive_timeout = 0 # force a logfile segment switch after this # number of seconds; 0 disables +# - Recovery - + +#recovery_prefetch = off # prefetch pages referenced in the WAL? +#recovery_prefetch_fpw = off # even pages logged with full page? +#wal_decode_buffer_size = 512kB # lookahead window used for prefetching + # - Archive Recovery - # These are only used in recovery mode. @@ -298,12 +302,11 @@ #max_wal_senders = 10 # max number of walsender processes # (change requires restart) +#max_replication_slots = 10 # max number of replication slots + # (change requires restart) #wal_keep_size = 0 # in megabytes; 0 disables #max_slot_wal_keep_size = -1 # in megabytes; -1 disables #wal_sender_timeout = 60s # in milliseconds; 0 disables - -#max_replication_slots = 10 # max number of replication slots - # (change requires restart) #track_commit_timestamp = off # collect timestamp of transaction commit # (change requires restart) @@ -360,25 +363,26 @@ # - Planner Method Configuration - +#enable_async_append = on #enable_bitmapscan = on +#enable_gathermerge = on #enable_hashagg = on #enable_hashjoin = on +#enable_incremental_sort = on #enable_indexscan = on #enable_indexonlyscan = on #enable_material = on +#enable_resultcache = on #enable_mergejoin = on #enable_nestloop = on #enable_parallel_append = on +#enable_parallel_hash = on +#enable_partition_pruning = on +#enable_partitionwise_join = off +#enable_partitionwise_aggregate = off #enable_seqscan = on #enable_sort = on -#enable_incremental_sort = on -#enable_resultcache = on #enable_tidscan = on -#enable_partitionwise_join = off -#enable_partitionwise_aggregate = off -#enable_parallel_hash = on -#enable_partition_pruning = on -#enable_async_append = on # - Planner Cost Constants - @@ -387,8 +391,11 @@ #cpu_tuple_cost = 0.01 # same scale as above #cpu_index_tuple_cost = 0.005 # same scale as above #cpu_operator_cost = 0.0025 # same scale as above -#parallel_tuple_cost = 0.1 # same scale as above #parallel_setup_cost = 1000.0 # same scale as above +#parallel_tuple_cost = 0.1 # same scale as above +#min_parallel_table_scan_size = 8MB +#min_parallel_index_scan_size = 512kB +#effective_cache_size = 4GB #jit_above_cost = 100000 # perform JIT compilation if available # and query more expensive than this; @@ -399,10 +406,6 @@ # query is more expensive than this; # -1 disables -#min_parallel_table_scan_size = 8MB -#min_parallel_index_scan_size = 512kB -#effective_cache_size = 4GB - # - Genetic Query Optimizer - #geqo = on @@ -419,9 +422,9 @@ #constraint_exclusion = partition # on, off, or partition #cursor_tuple_fraction = 0.1 # range 0.0-1.0 #from_collapse_limit = 8 +#jit = on # allow JIT compilation #join_collapse_limit = 8 # 1 disables collapsing of explicit # JOIN clauses -#jit = on # allow JIT compilation #plan_cache_mode = auto # auto, force_generic_plan or # force_custom_plan @@ -450,6 +453,11 @@ # can include strftime() escapes #log_file_mode = 0600 # creation mode for log files, # begin with 0 to use octal notation +#log_rotation_age = 1d # Automatic rotation of logfiles will + # happen after that time. 0 disables. +#log_rotation_size = 10MB # Automatic rotation of logfiles will + # happen after that much log output. + # 0 disables. #log_truncate_on_rotation = off # If on, an existing log file with the # same name as the new log file will be # truncated rather than appended to. @@ -458,11 +466,6 @@ # or size-driven rotation. Default is # off, meaning append to existing files # in all cases. -#log_rotation_age = 1d # Automatic rotation of logfiles will - # happen after that time. 0 disables. -#log_rotation_size = 10MB # Automatic rotation of logfiles will - # happen after that much log output. - # 0 disables. # These are relevant when logging to syslog: #syslog_facility = 'LOCAL0' @@ -470,7 +473,7 @@ #syslog_sequence_numbers = on #syslog_split_messages = on -# This is only relevant when logging to eventlog (win32): +# This is only relevant when logging to eventlog (Windows): # (change requires restart) #event_source = 'PostgreSQL' @@ -597,21 +600,21 @@ # - Query and Index Statistics Collector - #track_activities = on +#track_activity_query_size = 1024 # (change requires restart) #track_counts = on #track_io_timing = off #track_wal_io_timing = off #track_functions = none # none, pl, all -#track_activity_query_size = 1024 # (change requires restart) #stats_temp_directory = 'pg_stat_tmp' # - Monitoring - #compute_query_id = off +#log_statement_stats = off #log_parser_stats = off #log_planner_stats = off #log_executor_stats = off -#log_statement_stats = off #------------------------------------------------------------------------------ @@ -665,11 +668,11 @@ # error #search_path = '"$user", public' # schema names #row_security = on +#default_table_access_method = 'heap' #default_tablespace = '' # a tablespace name, '' uses the default +#default_toast_compression = 'pglz' # 'pglz' or 'lz4' #temp_tablespaces = '' # a list of tablespace names, '' uses # only default tablespace -#default_table_access_method = 'heap' -#default_toast_compression = 'pglz' # 'pglz' or 'lz4' #check_function_bodies = on #default_transaction_isolation = 'read committed' #default_transaction_read_only = off @@ -679,16 +682,15 @@ #lock_timeout = 0 # in milliseconds, 0 is disabled #idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled #idle_session_timeout = 0 # in milliseconds, 0 is disabled -#vacuum_freeze_min_age = 50000000 #vacuum_freeze_table_age = 150000000 -#vacuum_multixact_freeze_min_age = 5000000 -#vacuum_multixact_freeze_table_age = 150000000 +#vacuum_freeze_min_age = 50000000 #vacuum_failsafe_age = 1600000000 +#vacuum_multixact_freeze_table_age = 150000000 +#vacuum_multixact_freeze_min_age = 5000000 #vacuum_multixact_failsafe_age = 1600000000 #bytea_output = 'hex' # hex, escape #xmlbinary = 'base64' #xmloption = 'content' -#gin_fuzzy_search_limit = 0 #gin_pending_list_limit = 4MB # - Locale and Formatting - @@ -720,18 +722,15 @@ # - Shared Library Preloading - -#shared_preload_libraries = '' # (change requires restart) #local_preload_libraries = '' #session_preload_libraries = '' +#shared_preload_libraries = '' # (change requires restart) #jit_provider = 'llvmjit' # JIT library to use # - Other Defaults - #dynamic_library_path = '$libdir' - -#client_connection_check_interval = 0 # time between checks for client - # disconnection while running queries; - # 0 for never +#gin_fuzzy_search_limit = 0 #------------------------------------------------------------------------------ # LOCK MANAGEMENT @@ -775,10 +774,10 @@ #restart_after_crash = on # reinitialize after backend crash? #remove_temp_files_after_crash = on # remove temporary files after # backend crash? -#recovery_init_sync_method = fsync # fsync, syncfs (Linux 5.8+) #data_sync_retry = off # retry or panic on failure to fsync # data? # (change requires restart) +#recovery_init_sync_method = fsync # fsync, syncfs (Linux 5.8+) #------------------------------------------------------------------------------ diff --git a/src/include/utils/guc_tables.h b/src/include/utils/guc_tables.h index b9b5c1addaca8..35aac5bbc7bc2 100644 --- a/src/include/utils/guc_tables.h +++ b/src/include/utils/guc_tables.h @@ -48,55 +48,48 @@ typedef struct config_var_value } config_var_value; /* - * Groupings to help organize all the run-time options for display + * Groupings to help organize all the run-time options for display. + * Be sure this agrees with the way the options are categorized in config.sgml! */ enum config_group { - UNGROUPED, + UNGROUPED, /* use for options not shown in pg_settings */ FILE_LOCATIONS, - CONN_AUTH, CONN_AUTH_SETTINGS, CONN_AUTH_AUTH, CONN_AUTH_SSL, - RESOURCES, RESOURCES_MEM, RESOURCES_DISK, RESOURCES_KERNEL, RESOURCES_VACUUM_DELAY, RESOURCES_BGWRITER, RESOURCES_ASYNCHRONOUS, - WAL, WAL_SETTINGS, WAL_CHECKPOINTS, WAL_ARCHIVING, + WAL_RECOVERY, WAL_ARCHIVE_RECOVERY, WAL_RECOVERY_TARGET, - REPLICATION, REPLICATION_SENDING, REPLICATION_PRIMARY, REPLICATION_STANDBY, REPLICATION_SUBSCRIBERS, - QUERY_TUNING, QUERY_TUNING_METHOD, QUERY_TUNING_COST, QUERY_TUNING_GEQO, QUERY_TUNING_OTHER, - LOGGING, LOGGING_WHERE, LOGGING_WHEN, LOGGING_WHAT, PROCESS_TITLE, - STATS, STATS_MONITORING, STATS_COLLECTOR, AUTOVACUUM, - CLIENT_CONN, CLIENT_CONN_STATEMENT, CLIENT_CONN_LOCALE, CLIENT_CONN_PRELOAD, CLIENT_CONN_OTHER, LOCK_MANAGEMENT, - COMPAT_OPTIONS, COMPAT_OPTIONS_PREVIOUS, COMPAT_OPTIONS_CLIENT, ERROR_HANDLING_OPTIONS, From 92c4c269d24d016c19858a21347ff25a7de1f486 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Sun, 9 May 2021 11:37:18 +1200 Subject: [PATCH 263/671] Move memory accounting Asserts for Result Cache code In 9eacee2e6, I included some code to verify the cache's memory tracking is correct by counting up the number of entries and the memory they use each time we evict something from the cache. Those values are then compared to the expected values using Assert. The problem is that this requires looping over the entire cache hash table each time we evict an entry from the cache. That can be pretty expensive, as noted by Pavel Stehule. Here we move this memory accounting checking code so that we only verify it on cassert builds once when shutting down the Result Cache node. Aside from the performance increase, this has two distinct advantages: 1) We do the memory checks at the last possible moment before destroying the cache. This means we'll now catch accounting problems that might sneak in after a cache eviction. 2) We now do the memory Assert checks when there were no cache evictions. This increases the coverage. One small disadvantage is that we'll now miss any memory tracking issues that somehow managed to resolve themselves by the end of execution. However, it seems to me that such a memory tracking problem would be quite unlikely, and likely somewhat less harmful if one were to exist. In passing, adjust the loop over the hash table to use the standard simplehash.h method of iteration. Reported-by: Pavel Stehule Discussion: https://postgr.es/m/CAFj8pRAzgoSkdEiqrKbT=7yG9FA5fjUAP3jmJywuDqYq6Ki5ug@mail.gmail.com --- src/backend/executor/nodeResultCache.c | 64 ++++++++++++-------------- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/src/backend/executor/nodeResultCache.c b/src/backend/executor/nodeResultCache.c index 534d733eb345a..919238d1ff195 100644 --- a/src/backend/executor/nodeResultCache.c +++ b/src/backend/executor/nodeResultCache.c @@ -298,41 +298,6 @@ remove_cache_entry(ResultCacheState *rcstate, ResultCacheEntry *entry) dlist_delete(&entry->key->lru_node); -#ifdef USE_ASSERT_CHECKING - - /* - * Validate the memory accounting code is correct in assert builds. XXX is - * this too expensive for USE_ASSERT_CHECKING? - */ - { - int i, - count; - uint64 mem = 0; - - count = 0; - for (i = 0; i < rcstate->hashtable->size; i++) - { - ResultCacheEntry *entry = &rcstate->hashtable->data[i]; - - if (entry->status == resultcache_SH_IN_USE) - { - ResultCacheTuple *tuple = entry->tuplehead; - - mem += EMPTY_ENTRY_MEMORY_BYTES(entry); - while (tuple != NULL) - { - mem += CACHE_TUPLE_BYTES(tuple); - tuple = tuple->next; - } - count++; - } - } - - Assert(count == rcstate->hashtable->members); - Assert(mem == rcstate->mem_used); - } -#endif - /* Remove all of the tuples from this entry */ entry_purge_tuples(rcstate, entry); @@ -977,6 +942,35 @@ ExecInitResultCache(ResultCache *node, EState *estate, int eflags) void ExecEndResultCache(ResultCacheState *node) { +#ifdef USE_ASSERT_CHECKING + /* Validate the memory accounting code is correct in assert builds. */ + { + int count; + uint64 mem = 0; + resultcache_iterator i; + ResultCacheEntry *entry; + + resultcache_start_iterate(node->hashtable, &i); + + count = 0; + while ((entry = resultcache_iterate(node->hashtable, &i)) != NULL) + { + ResultCacheTuple *tuple = entry->tuplehead; + + mem += EMPTY_ENTRY_MEMORY_BYTES(entry); + while (tuple != NULL) + { + mem += CACHE_TUPLE_BYTES(tuple); + tuple = tuple->next; + } + count++; + } + + Assert(count == node->hashtable->members); + Assert(mem == node->mem_used); + } +#endif + /* * When ending a parallel worker, copy the statistics gathered by the * worker back into shared memory so that it can be picked up by the main From 8dc3d68cbe676deb5e74d1b1b565f57fffaf107e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 9 May 2021 19:33:24 -0400 Subject: [PATCH 264/671] Improve comments about USE_VALGRIND in pg_config_manual.h. These comments left the impression that USE_VALGRIND isn't really essential for valgrind testing. But that's wrong, as I learned the hard way today. Discussion: https://postgr.es/m/512778.1620588546@sss.pgh.pa.us --- src/include/pg_config_manual.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/include/pg_config_manual.h b/src/include/pg_config_manual.h index e28c9903823b8..42ee43f0aa7ef 100644 --- a/src/include/pg_config_manual.h +++ b/src/include/pg_config_manual.h @@ -279,12 +279,18 @@ * enables detection of buffer accesses that take place without holding a * buffer pin (or without holding a buffer lock in the case of index access * methods that superimpose their own custom client requests on top of the - * generic bufmgr.c requests). See also src/tools/valgrind.supp. + * generic bufmgr.c requests). * * "make installcheck" is significantly slower under Valgrind. The client * requests fall in hot code paths, so USE_VALGRIND slows execution by a few * percentage points even when not run under Valgrind. * + * Do not try to test the server under Valgrind without having built the + * server with USE_VALGRIND; else you will get false positives from sinval + * messaging (see comments in AddCatcacheInvalidationMessage). It's also + * important to use the suppression file src/tools/valgrind.supp to + * exclude other known false positives. + * * You should normally use MEMORY_CONTEXT_CHECKING with USE_VALGRIND; * instrumentation of repalloc() is inferior without it. */ From 02a93e7ef9612788081ef07ea1bbd0a8cc99ae99 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 10 May 2021 09:30:35 +0900 Subject: [PATCH 265/671] doc: Fix some gaps with the documentation related to LZ4 The upstream project is officially named "LZ4", and the documentation was confused with the option value that can be used with DDLs supporting this option, and the project name. Documentation related to the configure option --with-lz4 was missing, so add something for that. Author: Dilip Kumar, Michael Paquier Reviewed-by: Justin Pryzby Discussion: https://postgr.es/m/YJaOZQDXBVySq+Cc@paquier.xyz --- doc/src/sgml/catalogs.sgml | 2 +- doc/src/sgml/config.sgml | 6 +++--- doc/src/sgml/installation.sgml | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 29ee9605b61dc..6d06ad22b92b4 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -1363,7 +1363,7 @@ The current compression method of the column. If it is an invalid compression method ('\0') then column data will not be compressed. Otherwise, 'p' = pglz compression or - 'l' = lz4 compression. + 'l' = LZ4 compression. diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index a71c8821f6a80..f129a87501420 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -8321,9 +8321,9 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; CREATE TABLE statement can override this default by specifying the COMPRESSION column option. - The supported compression methods are pglz and - (if configured at the time PostgreSQL was - built) lz4. + The supported compression methods are pglz and, + if PostgreSQL was compiled with + --with-lz4, lz4. The default is pglz. diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index 50d9fa2021511..3c0aa118c76bf 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -266,6 +266,14 @@ su - postgres + + + You need LZ4, if you want to support + compression of data with this method; see + . + + + To build the PostgreSQL documentation, @@ -966,6 +974,17 @@ build-postgresql: + + + + + Build with LZ4 compression support. + This allows the use of LZ4 for + compression of table data. + + + + From 63db0ac3f9e6bae313da67f640c95c0045b7f0ee Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 10 May 2021 11:12:07 +0900 Subject: [PATCH 266/671] Add more TAP tests for pg_dump with attribute compression Some relations with LZ4 used as the toast compression methods have been left around in the main regression test suite to stress pg_upgrade, but pg_dump, that includes tests much more picky in terms of output generated, had no actual coverage with this feature. Similarly to collations, tests only working with LZ4 are tracked with an additional flag, and this uses TestLib::check_pg_config() to check if the build supports LZ4 or not. This stresses more scenarios with tables, materialized views and pg_dump --no-toast-compression. Author: Dilip Kumar Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/CAFiTN-twgPmohG7qj1HXhySq16h123y5OowsQR+5h1YeZE9fmQ@mail.gmail.com --- src/bin/pg_dump/t/002_pg_dump.pl | 83 +++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index c1bbf3c7d4b3a..4bc845e57c399 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -233,6 +233,13 @@ '--exclude-database', '*dump_test*', '--no-sync', ], }, + no_toast_compression => { + dump_cmd => [ + 'pg_dump', '--no-sync', + "--file=$tempdir/no_toast_compression.sql", + '--no-toast-compression', 'postgres', + ], + }, no_blobs => { dump_cmd => [ 'pg_dump', '--no-sync', @@ -377,6 +384,10 @@ # of the pg_dump runs happening. This is what "seeds" the # system with objects to be dumped out. # +# There can be a flag called 'lz4', which can be set if the test +# case depends on LZ4. Tests marked with this flag are skipped if +# the build used does not support LZ4. +# # Building of this hash takes a bit of time as all of the regexps # included in it are compiled. This greatly improves performance # as the regexps are used for each run the test applies to. @@ -397,6 +408,7 @@ exclude_dump_test_schema => 1, exclude_test_table => 1, exclude_test_table_data => 1, + no_toast_compression => 1, no_blobs => 1, no_owner => 1, no_privs => 1, @@ -2071,6 +2083,28 @@ unlike => { exclude_dump_test_schema => 1, }, }, + 'CREATE MATERIALIZED VIEW matview_compression' => { + create_order => 20, + create_sql => 'CREATE MATERIALIZED VIEW + dump_test.matview_compression (col2) AS + SELECT col2 FROM dump_test.test_table; + ALTER MATERIALIZED VIEW dump_test.matview_compression + ALTER COLUMN col2 SET COMPRESSION lz4;', + regexp => qr/^ + \QCREATE MATERIALIZED VIEW dump_test.matview_compression AS\E + \n\s+\QSELECT test_table.col2\E + \n\s+\QFROM dump_test.test_table\E + \n\s+\QWITH NO DATA;\E + .* + \QALTER TABLE ONLY dump_test.matview_compression ALTER COLUMN col2 SET COMPRESSION lz4;\E\n + /xms, + lz4 => 1, + like => + { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, + unlike => + { exclude_dump_test_schema => 1, no_toast_compression => 1, }, + }, + 'CREATE POLICY p1 ON test_table' => { create_order => 22, create_sql => 'CREATE POLICY p1 ON dump_test.test_table @@ -2279,7 +2313,7 @@ create_order => 3, create_sql => 'CREATE TABLE dump_test.test_table ( col1 serial primary key, - col2 text, + col2 text COMPRESSION pglz, col3 text, col4 text, CHECK (col1 <= 1000) @@ -2337,6 +2371,27 @@ unlike => { exclude_dump_test_schema => 1, }, }, + 'CREATE TABLE test_compression' => { + create_order => 3, + create_sql => 'CREATE TABLE dump_test.test_compression ( + col1 int, + col2 text COMPRESSION lz4 + );', + regexp => qr/^ + \QCREATE TABLE dump_test.test_compression (\E\n + \s+\Qcol1 integer,\E\n + \s+\Qcol2 text\E\n + \);\n + .* + \QALTER TABLE ONLY dump_test.test_compression ALTER COLUMN col2 SET COMPRESSION lz4;\E\n + /xms, + lz4 => 1, + like => + { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, + unlike => + { exclude_dump_test_schema => 1, no_toast_compression => 1, }, + }, + 'CREATE TABLE measurement PARTITIONED BY' => { create_order => 90, create_sql => 'CREATE TABLE dump_test.measurement ( @@ -2686,6 +2741,7 @@ defaults => 1, exclude_test_table => 1, exclude_test_table_data => 1, + no_toast_compression => 1, no_blobs => 1, no_privs => 1, no_owner => 1, @@ -2758,6 +2814,7 @@ exclude_dump_test_schema => 1, exclude_test_table => 1, exclude_test_table_data => 1, + no_toast_compression => 1, no_blobs => 1, no_privs => 1, no_owner => 1, @@ -3391,6 +3448,9 @@ $collation_support = 1; } +# Determine whether build supports LZ4. +my $supports_lz4 = check_pg_config("#define HAVE_LIBLZ4 1"); + # Create a second database for certain tests to work against $node->psql('postgres', 'create database regress_pg_dump_test;'); @@ -3448,6 +3508,13 @@ next; } + # Skip tests specific to LZ4 if this build does not support + # this option. + if (!$supports_lz4 && defined($tests{$test}->{lz4})) + { + next; + } + # If there is a like entry, but no unlike entry, then we will test the like case if ($tests{$test}->{like}->{$test_key} && !defined($tests{$test}->{unlike}->{$test_key})) @@ -3505,6 +3572,13 @@ next; } + # Skip tests specific to LZ4 if this build does not support + # this option. + if (!$supports_lz4 && defined($tests{$test}->{lz4})) + { + next; + } + # Add terminating semicolon $create_sql{$test_db} .= $tests{$test}->{create_sql} . ";"; } @@ -3603,6 +3677,13 @@ next; } + # Skip tests specific to LZ4 if this build does not support + # this option. + if (!$supports_lz4 && defined($tests{$test}->{lz4})) + { + next; + } + if ($run_db ne $test_db) { next; From c2dc19342e05e081dc13b296787baa38352681ef Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Mon, 10 May 2021 16:00:53 +1200 Subject: [PATCH 267/671] Revert recovery prefetching feature. This set of commits has some bugs with known fixes, but at this late stage in the release cycle it seems best to revert and resubmit next time, along with some new automated test coverage for this whole area. Commits reverted: dc88460c: Doc: Review for "Optionally prefetch referenced data in recovery." 1d257577: Optionally prefetch referenced data in recovery. f003d9f8: Add circular WAL decoding buffer. 323cbe7c: Remove read_page callback from XLogReader. Remove the new GUC group WAL_RECOVERY recently added by a55a9847, as the corresponding section of config.sgml is now reverted. Discussion: https://postgr.es/m/CAOuzzgrn7iKnFRsB4MHp3UisEQAGgZMbk_ViTN4HV4-Ksq8zCg%40mail.gmail.com --- doc/src/sgml/config.sgml | 83 - doc/src/sgml/monitoring.sgml | 86 +- doc/src/sgml/wal.sgml | 15 - src/backend/access/transam/Makefile | 1 - src/backend/access/transam/generic_xlog.c | 6 +- src/backend/access/transam/twophase.c | 14 +- src/backend/access/transam/xlog.c | 188 +- src/backend/access/transam/xlogprefetch.c | 923 ---------- src/backend/access/transam/xlogreader.c | 1545 +++++------------ src/backend/access/transam/xlogutils.c | 49 +- src/backend/catalog/system_views.sql | 14 - src/backend/postmaster/pgstat.c | 103 +- src/backend/replication/logical/decode.c | 2 +- src/backend/replication/logical/logical.c | 26 +- .../replication/logical/logicalfuncs.c | 13 +- src/backend/replication/slotfuncs.c | 18 +- src/backend/replication/walsender.c | 42 +- src/backend/storage/freespace/freespace.c | 3 +- src/backend/storage/ipc/ipci.c | 3 - src/backend/utils/misc/guc.c | 53 +- src/backend/utils/misc/postgresql.conf.sample | 6 - src/bin/pg_rewind/parsexlog.c | 109 +- src/bin/pg_waldump/pg_waldump.c | 160 +- src/include/access/xlog.h | 1 - src/include/access/xlogprefetch.h | 82 - src/include/access/xlogreader.h | 278 ++- src/include/access/xlogutils.h | 7 +- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_proc.dat | 8 - src/include/pgstat.h | 26 - src/include/replication/logical.h | 9 +- src/include/utils/guc.h | 4 - src/include/utils/guc_tables.h | 1 - src/test/regress/expected/rules.out | 11 - src/tools/pgindent/typedefs.list | 4 - 35 files changed, 815 insertions(+), 3080 deletions(-) delete mode 100644 src/backend/access/transam/xlogprefetch.c delete mode 100644 src/include/access/xlogprefetch.h diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index f129a87501420..45bd1f1b7e3bc 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -3588,89 +3588,6 @@ include_dir 'conf.d' - - - Recovery - - - configuration - of recovery - general settings - - - - This section describes the settings that apply to recovery in general, - affecting crash recovery, streaming replication and archive-based - replication. - - - - - - recovery_prefetch (boolean) - - recovery_prefetch configuration parameter - - - - - Whether to try to prefetch blocks that are referenced in the WAL that - are not yet in the buffer pool, during recovery. Prefetching blocks - that will soon be needed can reduce I/O wait times in some workloads. - See also the and - settings, which limit - prefetching activity. - This setting is disabled by default. - - - This feature currently depends on an effective - posix_fadvise function, which some - operating systems lack. - - - - - - recovery_prefetch_fpw (boolean) - - recovery_prefetch_fpw configuration parameter - - - - - Whether to prefetch blocks that were logged with full page images, - during recovery. Often this doesn't help, since such blocks will not - be read the first time they are needed and might remain in the buffer - pool after that. However, on file systems with a block size larger - than - PostgreSQL's, prefetching can avoid a - costly read-before-write when blocks are later written. - The default is off. - - - - - - wal_decode_buffer_size (integer) - - wal_decode_buffer_size configuration parameter - - - - - A limit on how far ahead the server can look in the WAL, to find - blocks to prefetch. Setting it too high might be counterproductive, - if it means that data falls out of the - kernel cache before it is needed. If this value is specified without - units, it is taken as bytes. - The default is 512kB. - - - - - - - Archive Recovery diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 370cdc2e1a11e..dcbb10fb6ff32 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -337,13 +337,6 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser - - pg_stat_prefetch_recoverypg_stat_prefetch_recovery - Only one row, showing statistics about blocks prefetched during recovery. - See for details. - - - pg_stat_subscriptionpg_stat_subscription At least one row per subscription, showing information about @@ -2948,78 +2941,6 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i copy of the subscribed tables. - - <structname>pg_stat_prefetch_recovery</structname> View - - - - Column - Type - Description - - - - - - prefetch - bigint - Number of blocks prefetched because they were not in the buffer pool - - - skip_hit - bigint - Number of blocks not prefetched because they were already in the buffer pool - - - skip_new - bigint - Number of blocks not prefetched because they were new (usually relation extension) - - - skip_fpw - bigint - Number of blocks not prefetched because a full page image was included in the WAL and was set to off - - - skip_seq - bigint - Number of blocks not prefetched because of repeated access - - - distance - integer - How far ahead of recovery the prefetcher is currently reading, in bytes - - - queue_depth - integer - How many prefetches have been initiated but are not yet known to have completed - - - avg_distance - float4 - How far ahead of recovery the prefetcher is on average, while recovery is not idle - - - avg_queue_depth - float4 - Average number of prefetches in flight while recovery is not idle - - - -
- - - The pg_stat_prefetch_recovery view will contain only - one row. It is filled with nulls if recovery is not running or WAL - prefetching is not enabled. See - for more information. The counters in this view are reset whenever the - , - or - setting is changed and - the server configuration is reloaded. - - <structname>pg_stat_subscription</structname> View @@ -5152,11 +5073,8 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i all the counters shown in the pg_stat_bgwriter view, archiver to reset all the counters shown in - the pg_stat_archiver view, - wal to reset all the counters shown in the - pg_stat_wal view or - prefetch_recovery to reset all the counters shown - in the pg_stat_prefetch_recovery view. + the pg_stat_archiver view or wal + to reset all the counters shown in the pg_stat_wal view. This function is restricted to superusers by default, but other users diff --git a/doc/src/sgml/wal.sgml b/doc/src/sgml/wal.sgml index 9606c617d41a8..60f066d247390 100644 --- a/doc/src/sgml/wal.sgml +++ b/doc/src/sgml/wal.sgml @@ -803,21 +803,6 @@ counted as wal_write and wal_sync in pg_stat_wal, respectively. - - - The parameter can - be used to improve I/O performance during recovery by instructing - PostgreSQL to initiate reads - of disk blocks that will soon be needed but are not currently in - PostgreSQL's buffer pool. - The and - settings limit prefetching - concurrency and distance, respectively. The - prefetching mechanism is most likely to be effective on systems - with full_page_writes set to - off (where that is safe), and where the working - set is larger than RAM. By default, prefetching in recovery is disabled. - diff --git a/src/backend/access/transam/Makefile b/src/backend/access/transam/Makefile index 39f9d4e77d4df..595e02de722cf 100644 --- a/src/backend/access/transam/Makefile +++ b/src/backend/access/transam/Makefile @@ -31,7 +31,6 @@ OBJS = \ xlogarchive.o \ xlogfuncs.o \ xloginsert.o \ - xlogprefetch.o \ xlogreader.o \ xlogutils.o diff --git a/src/backend/access/transam/generic_xlog.c b/src/backend/access/transam/generic_xlog.c index 0e9bcc7159626..63301a1ab1684 100644 --- a/src/backend/access/transam/generic_xlog.c +++ b/src/backend/access/transam/generic_xlog.c @@ -482,10 +482,10 @@ generic_redo(XLogReaderState *record) uint8 block_id; /* Protect limited size of buffers[] array */ - Assert(XLogRecMaxBlockId(record) < MAX_GENERIC_XLOG_PAGES); + Assert(record->max_block_id < MAX_GENERIC_XLOG_PAGES); /* Iterate over blocks */ - for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) + for (block_id = 0; block_id <= record->max_block_id; block_id++) { XLogRedoAction action; @@ -525,7 +525,7 @@ generic_redo(XLogReaderState *record) } /* Changes are done: unlock and release all buffers */ - for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) + for (block_id = 0; block_id <= record->max_block_id; block_id++) { if (BufferIsValid(buffers[block_id])) UnlockReleaseBuffer(buffers[block_id]); diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index b6581349a35bd..46f3d0824926f 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -1330,8 +1330,11 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len) char *errormsg; TimeLineID save_currtli = ThisTimeLineID; - xlogreader = XLogReaderAllocate(wal_segment_size, NULL, wal_segment_close); - + xlogreader = XLogReaderAllocate(wal_segment_size, NULL, + XL_ROUTINE(.page_read = &read_local_xlog_page, + .segment_open = &wal_segment_open, + .segment_close = &wal_segment_close), + NULL); if (!xlogreader) ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), @@ -1339,12 +1342,7 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len) errdetail("Failed while allocating a WAL reading processor."))); XLogBeginRead(xlogreader, lsn); - while (XLogReadRecord(xlogreader, &record, &errormsg) == - XLREAD_NEED_DATA) - { - if (!read_local_xlog_page(xlogreader)) - break; - } + record = XLogReadRecord(xlogreader, &errormsg); /* * Restore immediately the timeline where it was previously, as diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index adfc6f67e29f5..c1d4415a43340 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -35,7 +35,6 @@ #include "access/xlog_internal.h" #include "access/xlogarchive.h" #include "access/xloginsert.h" -#include "access/xlogprefetch.h" #include "access/xlogreader.h" #include "access/xlogutils.h" #include "catalog/catversion.h" @@ -111,7 +110,6 @@ int CommitDelay = 0; /* precommit delay in microseconds */ int CommitSiblings = 5; /* # concurrent xacts needed to sleep */ int wal_retrieve_retry_interval = 5000; int max_slot_wal_keep_size_mb = -1; -int wal_decode_buffer_size = 512 * 1024; bool track_wal_io_timing = false; #ifdef WAL_DEBUG @@ -813,13 +811,17 @@ static XLogSegNo openLogSegNo = 0; * These variables are used similarly to the ones above, but for reading * the XLOG. Note, however, that readOff generally represents the offset * of the page just read, not the seek position of the FD itself, which - * will be just past that page. readSource indicates where we got the - * currently open file from. + * will be just past that page. readLen indicates how much of the current + * page has been read into readBuf, and readSource indicates where we got + * the currently open file from. * Note: we could use Reserve/ReleaseExternalFD to track consumption of * this FD too; but it doesn't currently seem worthwhile, since the XLOG is * not read by general-purpose sessions. */ static int readFile = -1; +static XLogSegNo readSegNo = 0; +static uint32 readOff = 0; +static uint32 readLen = 0; static XLogSource readSource = XLOG_FROM_ANY; /* @@ -836,6 +838,13 @@ static XLogSource currentSource = XLOG_FROM_ANY; static bool lastSourceFailed = false; static bool pendingWalRcvRestart = false; +typedef struct XLogPageReadPrivate +{ + int emode; + bool fetching_ckpt; /* are we fetching a checkpoint record? */ + bool randAccess; +} XLogPageReadPrivate; + /* * These variables track when we last obtained some WAL data to process, * and where we got it from. (XLogReceiptSource is initially the same as @@ -911,13 +920,10 @@ static bool InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, static int XLogFileRead(XLogSegNo segno, int emode, TimeLineID tli, XLogSource source, bool notfoundOk); static int XLogFileReadAnyTLI(XLogSegNo segno, int emode, XLogSource source); -static bool XLogPageRead(XLogReaderState *state, - bool fetching_ckpt, int emode, bool randAccess, - bool nowait); +static int XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, + int reqLen, XLogRecPtr targetRecPtr, char *readBuf); static bool WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, - bool fetching_ckpt, - XLogRecPtr tliRecPtr, - XLogSegNo readSegNo); + bool fetching_ckpt, XLogRecPtr tliRecPtr); static int emode_for_corrupt_record(int emode, XLogRecPtr RecPtr); static void XLogFileClose(void); static void PreallocXlogFiles(XLogRecPtr endptr); @@ -1212,7 +1218,6 @@ XLogInsertRecord(XLogRecData *rdata, StringInfoData recordBuf; char *errormsg = NULL; MemoryContext oldCxt; - DecodedXLogRecord *decoded; oldCxt = MemoryContextSwitchTo(walDebugCxt); @@ -1228,19 +1233,15 @@ XLogInsertRecord(XLogRecData *rdata, for (; rdata != NULL; rdata = rdata->next) appendBinaryStringInfo(&recordBuf, rdata->data, rdata->len); - /* How much space would it take to decode this record? */ - decoded = palloc(DecodeXLogRecordRequiredSpace(recordBuf.len)); - if (!debug_reader) - debug_reader = XLogReaderAllocate(wal_segment_size, NULL, NULL); + debug_reader = XLogReaderAllocate(wal_segment_size, NULL, + XL_ROUTINE(), NULL); if (!debug_reader) { appendStringInfoString(&buf, "error decoding record: out of memory"); } - else if (!DecodeXLogRecord(debug_reader, decoded, - (XLogRecord *) recordBuf.data, - EndPos, + else if (!DecodeXLogRecord(debug_reader, (XLogRecord *) recordBuf.data, &errormsg)) { appendStringInfo(&buf, "error decoding record: %s", @@ -1249,17 +1250,10 @@ XLogInsertRecord(XLogRecData *rdata, else { appendStringInfoString(&buf, " - "); - /* - * Temporarily make this decoded record the current record for - * XLogRecGetXXX() macros. - */ - debug_reader->record = decoded; xlog_outdesc(&buf, debug_reader); - debug_reader->record = NULL; } elog(LOG, "%s", buf.data); - pfree(decoded); pfree(buf.data); pfree(recordBuf.data); MemoryContextSwitchTo(oldCxt); @@ -1433,7 +1427,7 @@ checkXLogConsistency(XLogReaderState *record) Assert((XLogRecGetInfo(record) & XLR_CHECK_CONSISTENCY) != 0); - for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) + for (block_id = 0; block_id <= record->max_block_id; block_id++) { Buffer buf; Page page; @@ -1464,7 +1458,7 @@ checkXLogConsistency(XLogReaderState *record) * temporary page. */ buf = XLogReadBufferExtended(rnode, forknum, blkno, - RBM_NORMAL_NO_LOG, InvalidBuffer); + RBM_NORMAL_NO_LOG); if (!BufferIsValid(buf)) continue; @@ -3732,6 +3726,7 @@ XLogFileRead(XLogSegNo segno, int emode, TimeLineID tli, snprintf(activitymsg, sizeof(activitymsg), "waiting for %s", xlogfname); set_ps_display(activitymsg); + restoredFromArchive = RestoreArchivedFile(path, xlogfname, "RECOVERYXLOG", wal_segment_size, @@ -4378,7 +4373,12 @@ ReadRecord(XLogReaderState *xlogreader, int emode, bool fetching_ckpt) { XLogRecord *record; - bool randAccess = (xlogreader->ReadRecPtr == InvalidXLogRecPtr); + XLogPageReadPrivate *private = (XLogPageReadPrivate *) xlogreader->private_data; + + /* Pass through parameters to XLogPageRead */ + private->fetching_ckpt = fetching_ckpt; + private->emode = emode; + private->randAccess = (xlogreader->ReadRecPtr == InvalidXLogRecPtr); /* This is the first attempt to read this page. */ lastSourceFailed = false; @@ -4386,19 +4386,10 @@ ReadRecord(XLogReaderState *xlogreader, int emode, for (;;) { char *errormsg; - XLogReadRecordResult result; - - while ((result = XLogReadRecord(xlogreader, &record, &errormsg)) - == XLREAD_NEED_DATA) - { - if (!XLogPageRead(xlogreader, fetching_ckpt, emode, randAccess, - false /* wait for data if streaming */)) - break; - } + record = XLogReadRecord(xlogreader, &errormsg); ReadRecPtr = xlogreader->ReadRecPtr; EndRecPtr = xlogreader->EndRecPtr; - if (record == NULL) { if (readFile >= 0) @@ -6466,6 +6457,7 @@ StartupXLOG(void) bool backupFromStandby = false; DBState dbstate_at_startup; XLogReaderState *xlogreader; + XLogPageReadPrivate private; bool promoted = false; struct stat st; @@ -6624,9 +6616,13 @@ StartupXLOG(void) OwnLatch(&XLogCtl->recoveryWakeupLatch); /* Set up XLOG reader facility */ + MemSet(&private, 0, sizeof(XLogPageReadPrivate)); xlogreader = - XLogReaderAllocate(wal_segment_size, NULL, wal_segment_close); - + XLogReaderAllocate(wal_segment_size, NULL, + XL_ROUTINE(.page_read = &XLogPageRead, + .segment_open = NULL, + .segment_close = wal_segment_close), + &private); if (!xlogreader) ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), @@ -6634,12 +6630,6 @@ StartupXLOG(void) errdetail("Failed while allocating a WAL reading processor."))); xlogreader->system_identifier = ControlFile->system_identifier; - /* - * Set the WAL decode buffer size. This limits how far ahead we can read - * in the WAL. - */ - XLogReaderSetDecodeBuffer(xlogreader, NULL, wal_decode_buffer_size); - /* * Allocate two page buffers dedicated to WAL consistency checks. We do * it this way, rather than just making static arrays, for two reasons: @@ -7320,7 +7310,6 @@ StartupXLOG(void) { ErrorContextCallback errcallback; TimestampTz xtime; - XLogPrefetchState prefetch; PGRUsage ru0; pg_rusage_init(&ru0); @@ -7331,9 +7320,6 @@ StartupXLOG(void) (errmsg("redo starts at %X/%X", LSN_FORMAT_ARGS(ReadRecPtr)))); - /* Prepare to prefetch, if configured. */ - XLogPrefetchBegin(&prefetch, xlogreader); - /* * main redo apply loop */ @@ -7363,14 +7349,6 @@ StartupXLOG(void) /* Handle interrupt signals of startup process */ HandleStartupProcInterrupts(); - /* Perform WAL prefetching, if enabled. */ - while (XLogPrefetch(&prefetch, xlogreader->ReadRecPtr) == XLREAD_NEED_DATA) - { - if (!XLogPageRead(xlogreader, false, LOG, false, - true /* don't wait for streaming data */)) - break; - } - /* * Pause WAL replay, if requested by a hot-standby session via * SetRecoveryPause(). @@ -7544,9 +7522,6 @@ StartupXLOG(void) */ if (AllowCascadeReplication()) WalSndWakeup(); - - /* Reset the prefetcher. */ - XLogPrefetchReconfigure(); } /* Exit loop if we reached inclusive recovery target */ @@ -7563,7 +7538,6 @@ StartupXLOG(void) /* * end of main redo apply loop */ - XLogPrefetchEnd(&prefetch); if (reachedRecoveryTarget) { @@ -7845,8 +7819,7 @@ StartupXLOG(void) XLogRecPtr pageBeginPtr; pageBeginPtr = EndOfLog - (EndOfLog % XLOG_BLCKSZ); - Assert(XLogSegmentOffset(xlogreader->readPagePtr, wal_segment_size) == - XLogSegmentOffset(pageBeginPtr, wal_segment_size)); + Assert(readOff == XLogSegmentOffset(pageBeginPtr, wal_segment_size)); firstIdx = XLogRecPtrToBufIdx(EndOfLog); @@ -10338,7 +10311,7 @@ xlog_redo(XLogReaderState *record) * XLOG_FPI and XLOG_FPI_FOR_HINT records, they use a different info * code just to distinguish them for statistics purposes. */ - for (uint8 block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) + for (uint8 block_id = 0; block_id <= record->max_block_id; block_id++) { Buffer buffer; @@ -10473,7 +10446,7 @@ xlog_block_info(StringInfo buf, XLogReaderState *record) int block_id; /* decode block references */ - for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) + for (block_id = 0; block_id <= record->max_block_id; block_id++) { RelFileNode rnode; ForkNumber forknum; @@ -12133,19 +12106,14 @@ CancelBackup(void) * and call XLogPageRead() again with the same arguments. This lets * XLogPageRead() to try fetching the record from another source, or to * sleep and retry. - * - * If nowait is true, then return false immediately if the requested data isn't - * available yet. */ -static bool -XLogPageRead(XLogReaderState *state, - bool fetching_ckpt, int emode, bool randAccess, bool nowait) -{ - char *readBuf = state->readBuf; - XLogRecPtr targetPagePtr = state->readPagePtr; - int reqLen = state->reqLen; - int readLen = 0; - XLogRecPtr targetRecPtr = state->DecodeRecPtr; +static int +XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, + XLogRecPtr targetRecPtr, char *readBuf) +{ + XLogPageReadPrivate *private = + (XLogPageReadPrivate *) xlogreader->private_data; + int emode = private->emode; uint32 targetPageOff; XLogSegNo targetSegNo PG_USED_FOR_ASSERTS_ONLY; int r; @@ -12158,7 +12126,7 @@ XLogPageRead(XLogReaderState *state, * is not in the currently open one. */ if (readFile >= 0 && - !XLByteInSeg(targetPagePtr, state->seg.ws_segno, wal_segment_size)) + !XLByteInSeg(targetPagePtr, readSegNo, wal_segment_size)) { /* * Request a restartpoint if we've replayed too much xlog since the @@ -12166,10 +12134,10 @@ XLogPageRead(XLogReaderState *state, */ if (bgwriterLaunched) { - if (XLogCheckpointNeeded(state->seg.ws_segno)) + if (XLogCheckpointNeeded(readSegNo)) { (void) GetRedoRecPtr(); - if (XLogCheckpointNeeded(state->seg.ws_segno)) + if (XLogCheckpointNeeded(readSegNo)) RequestCheckpoint(CHECKPOINT_CAUSE_XLOG); } } @@ -12179,7 +12147,7 @@ XLogPageRead(XLogReaderState *state, readSource = XLOG_FROM_ANY; } - XLByteToSeg(targetPagePtr, state->seg.ws_segno, wal_segment_size); + XLByteToSeg(targetPagePtr, readSegNo, wal_segment_size); retry: /* See if we need to retrieve more data */ @@ -12187,22 +12155,18 @@ XLogPageRead(XLogReaderState *state, (readSource == XLOG_FROM_STREAM && flushedUpto < targetPagePtr + reqLen)) { - if (nowait) - { - XLogReaderSetInputData(state, -1); - return false; - } - if (!WaitForWALToBecomeAvailable(targetPagePtr + reqLen, - randAccess, fetching_ckpt, - targetRecPtr, state->seg.ws_segno)) + private->randAccess, + private->fetching_ckpt, + targetRecPtr)) { if (readFile >= 0) close(readFile); readFile = -1; + readLen = 0; readSource = XLOG_FROM_ANY; - XLogReaderSetInputData(state, -1); - return false; + + return -1; } } @@ -12229,36 +12193,40 @@ XLogPageRead(XLogReaderState *state, else readLen = XLOG_BLCKSZ; + /* Read the requested page */ + readOff = targetPageOff; + pgstat_report_wait_start(WAIT_EVENT_WAL_READ); - r = pg_pread(readFile, readBuf, XLOG_BLCKSZ, (off_t) targetPageOff); + r = pg_pread(readFile, readBuf, XLOG_BLCKSZ, (off_t) readOff); if (r != XLOG_BLCKSZ) { char fname[MAXFNAMELEN]; int save_errno = errno; pgstat_report_wait_end(); - XLogFileName(fname, curFileTLI, state->seg.ws_segno, wal_segment_size); + XLogFileName(fname, curFileTLI, readSegNo, wal_segment_size); if (r < 0) { errno = save_errno; ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen), (errcode_for_file_access(), errmsg("could not read from log segment %s, offset %u: %m", - fname, targetPageOff))); + fname, readOff))); } else ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen), (errcode(ERRCODE_DATA_CORRUPTED), errmsg("could not read from log segment %s, offset %u: read %d of %zu", - fname, targetPageOff, r, (Size) XLOG_BLCKSZ))); + fname, readOff, r, (Size) XLOG_BLCKSZ))); goto next_record_is_invalid; } pgstat_report_wait_end(); - Assert(targetSegNo == state->seg.ws_segno); - Assert(readLen >= reqLen); + Assert(targetSegNo == readSegNo); + Assert(targetPageOff == readOff); + Assert(reqLen <= readLen); - state->seg.ws_tli = curFileTLI; + xlogreader->seg.ws_tli = curFileTLI; /* * Check the page header immediately, so that we can retry immediately if @@ -12286,16 +12254,14 @@ XLogPageRead(XLogReaderState *state, * Validating the page header is cheap enough that doing it twice * shouldn't be a big deal from a performance point of view. */ - if (!XLogReaderValidatePageHeader(state, targetPagePtr, readBuf)) + if (!XLogReaderValidatePageHeader(xlogreader, targetPagePtr, readBuf)) { - /* reset any error StateValidatePageHeader() might have set */ - state->errormsg_buf[0] = '\0'; + /* reset any error XLogReaderValidatePageHeader() might have set */ + xlogreader->errormsg_buf[0] = '\0'; goto next_record_is_invalid; } - Assert(state->readPagePtr == targetPagePtr); - XLogReaderSetInputData(state, readLen); - return true; + return readLen; next_record_is_invalid: lastSourceFailed = true; @@ -12303,14 +12269,14 @@ XLogPageRead(XLogReaderState *state, if (readFile >= 0) close(readFile); readFile = -1; + readLen = 0; readSource = XLOG_FROM_ANY; /* In standby-mode, keep trying */ if (StandbyMode) goto retry; - - XLogReaderSetInputData(state, -1); - return false; + else + return -1; } /* @@ -12341,8 +12307,7 @@ XLogPageRead(XLogReaderState *state, */ static bool WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, - bool fetching_ckpt, XLogRecPtr tliRecPtr, - XLogSegNo readSegNo) + bool fetching_ckpt, XLogRecPtr tliRecPtr) { static TimestampTz last_fail_time = 0; TimestampTz now; @@ -12426,7 +12391,6 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, */ currentSource = XLOG_FROM_STREAM; startWalReceiver = true; - XLogPrefetchReconfigure(); break; case XLOG_FROM_STREAM: @@ -12661,7 +12625,6 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, * be updated on each cycle. When we are behind, * XLogReceiptTime will not advance, so the grace time * allotted to conflicting queries will decrease. - * */ if (RecPtr < flushedUpto) havedata = true; @@ -12682,7 +12645,6 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, else havedata = false; } - if (havedata) { /* diff --git a/src/backend/access/transam/xlogprefetch.c b/src/backend/access/transam/xlogprefetch.c deleted file mode 100644 index ae4585232be33..0000000000000 --- a/src/backend/access/transam/xlogprefetch.c +++ /dev/null @@ -1,923 +0,0 @@ -/*------------------------------------------------------------------------- - * - * xlogprefetch.c - * Prefetching support for recovery. - * - * Portions Copyright (c) 2021, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * - * IDENTIFICATION - * src/backend/access/transam/xlogprefetch.c - * - * The goal of this module is to read future WAL records and issue - * PrefetchSharedBuffer() calls for referenced blocks, so that we avoid I/O - * stalls in the main recovery loop. - * - * When examining a WAL record from the future, we need to consider that a - * referenced block or segment file might not exist on disk until this record - * or some earlier record has been replayed. After a crash, a file might also - * be missing because it was dropped by a later WAL record; in that case, it - * will be recreated when this record is replayed. These cases are handled by - * recognizing them and adding a "filter" that prevents all prefetching of a - * certain block range until the present WAL record has been replayed. Blocks - * skipped for these reasons are counted as "skip_new" (that is, cases where we - * didn't try to prefetch "new" blocks). - * - * Blocks found in the buffer pool already are counted as "skip_hit". - * Repeated access to the same buffer is detected and skipped, and this is - * counted with "skip_seq". Blocks that were logged with FPWs are skipped if - * recovery_prefetch_fpw is off, since on most systems there will be no I/O - * stall; this is counted with "skip_fpw". - * - * The only way we currently have to know that an I/O initiated with - * PrefetchSharedBuffer() has completed is to wait for the corresponding call - * to XLogReadBufferInRedo() to return. Therefore, we track the number of - * potentially in-flight I/Os by using a circular buffer of LSNs. When it's - * full, we have to wait for recovery to replay enough records to remove some - * LSNs, and only then can we initiate more prefetching. Ideally, this keeps - * us just the right distance ahead to respect maintenance_io_concurrency, - * though in practice it errs on the side of being too conservative because - * many I/Os complete sooner than we know. - * - *------------------------------------------------------------------------- - */ - -#include "postgres.h" - -#include "access/xlog.h" -#include "access/xlogprefetch.h" -#include "access/xlogreader.h" -#include "access/xlogutils.h" -#include "catalog/storage_xlog.h" -#include "utils/fmgrprotos.h" -#include "utils/timestamp.h" -#include "funcapi.h" -#include "pgstat.h" -#include "miscadmin.h" -#include "port/atomics.h" -#include "storage/bufmgr.h" -#include "storage/shmem.h" -#include "storage/smgr.h" -#include "utils/guc.h" -#include "utils/hsearch.h" - -/* - * Sample the queue depth and distance every time we replay this much WAL. - * This is used to compute avg_queue_depth and avg_distance for the log - * message that appears at the end of crash recovery. It's also used to send - * messages periodically to the stats collector, to save the counters on disk. - */ -#define XLOGPREFETCHER_SAMPLE_DISTANCE 0x40000 - -/* GUCs */ -bool recovery_prefetch = false; -bool recovery_prefetch_fpw = false; - -int XLogPrefetchReconfigureCount; - -/* - * A prefetcher object. There is at most one of these in existence at a time, - * recreated whenever there is a configuration change. - */ -struct XLogPrefetcher -{ - /* Reader and current reading state. */ - XLogReaderState *reader; - DecodedXLogRecord *record; - int next_block_id; - bool shutdown; - - /* Details of last prefetch to skip repeats and seq scans. */ - SMgrRelation last_reln; - RelFileNode last_rnode; - BlockNumber last_blkno; - - /* Online averages. */ - uint64 samples; - double avg_queue_depth; - double avg_distance; - XLogRecPtr next_sample_lsn; - - /* Book-keeping required to avoid accessing non-existing blocks. */ - HTAB *filter_table; - dlist_head filter_queue; - - /* Book-keeping required to limit concurrent prefetches. */ - int prefetch_head; - int prefetch_tail; - int prefetch_queue_size; - XLogRecPtr prefetch_queue[MAX_IO_CONCURRENCY + 1]; -}; - -/* - * A temporary filter used to track block ranges that haven't been created - * yet, whole relations that haven't been created yet, and whole relations - * that we must assume have already been dropped. - */ -typedef struct XLogPrefetcherFilter -{ - RelFileNode rnode; - XLogRecPtr filter_until_replayed; - BlockNumber filter_from_block; - dlist_node link; -} XLogPrefetcherFilter; - -/* - * Counters exposed in shared memory for pg_stat_prefetch_recovery. - */ -typedef struct XLogPrefetchStats -{ - pg_atomic_uint64 reset_time; /* Time of last reset. */ - pg_atomic_uint64 prefetch; /* Prefetches initiated. */ - pg_atomic_uint64 skip_hit; /* Blocks already buffered. */ - pg_atomic_uint64 skip_new; /* New/missing blocks filtered. */ - pg_atomic_uint64 skip_fpw; /* FPWs skipped. */ - pg_atomic_uint64 skip_seq; /* Repeat blocks skipped. */ - float avg_distance; - float avg_queue_depth; - - /* Reset counters */ - pg_atomic_uint32 reset_request; - uint32 reset_handled; - - /* Dynamic values */ - int distance; /* Number of bytes ahead in the WAL. */ - int queue_depth; /* Number of I/Os possibly in progress. */ -} XLogPrefetchStats; - -static inline void XLogPrefetcherAddFilter(XLogPrefetcher *prefetcher, - RelFileNode rnode, - BlockNumber blockno, - XLogRecPtr lsn); -static inline bool XLogPrefetcherIsFiltered(XLogPrefetcher *prefetcher, - RelFileNode rnode, - BlockNumber blockno); -static inline void XLogPrefetcherCompleteFilters(XLogPrefetcher *prefetcher, - XLogRecPtr replaying_lsn); -static inline void XLogPrefetcherInitiatedIO(XLogPrefetcher *prefetcher, - XLogRecPtr prefetching_lsn); -static inline void XLogPrefetcherCompletedIO(XLogPrefetcher *prefetcher, - XLogRecPtr replaying_lsn); -static inline bool XLogPrefetcherSaturated(XLogPrefetcher *prefetcher); -static bool XLogPrefetcherScanRecords(XLogPrefetcher *prefetcher, - XLogRecPtr replaying_lsn); -static bool XLogPrefetcherScanBlocks(XLogPrefetcher *prefetcher); -static void XLogPrefetchSaveStats(void); -static void XLogPrefetchRestoreStats(void); - -static XLogPrefetchStats *SharedStats; - -size_t -XLogPrefetchShmemSize(void) -{ - return sizeof(XLogPrefetchStats); -} - -static void -XLogPrefetchResetStats(void) -{ - pg_atomic_write_u64(&SharedStats->reset_time, GetCurrentTimestamp()); - pg_atomic_write_u64(&SharedStats->prefetch, 0); - pg_atomic_write_u64(&SharedStats->skip_hit, 0); - pg_atomic_write_u64(&SharedStats->skip_new, 0); - pg_atomic_write_u64(&SharedStats->skip_fpw, 0); - pg_atomic_write_u64(&SharedStats->skip_seq, 0); - SharedStats->avg_distance = 0; - SharedStats->avg_queue_depth = 0; -} - -void -XLogPrefetchShmemInit(void) -{ - bool found; - - SharedStats = (XLogPrefetchStats *) - ShmemInitStruct("XLogPrefetchStats", - sizeof(XLogPrefetchStats), - &found); - - if (!found) - { - pg_atomic_init_u32(&SharedStats->reset_request, 0); - SharedStats->reset_handled = 0; - - pg_atomic_init_u64(&SharedStats->reset_time, GetCurrentTimestamp()); - pg_atomic_init_u64(&SharedStats->prefetch, 0); - pg_atomic_init_u64(&SharedStats->skip_hit, 0); - pg_atomic_init_u64(&SharedStats->skip_new, 0); - pg_atomic_init_u64(&SharedStats->skip_fpw, 0); - pg_atomic_init_u64(&SharedStats->skip_seq, 0); - SharedStats->avg_distance = 0; - SharedStats->avg_queue_depth = 0; - SharedStats->distance = 0; - SharedStats->queue_depth = 0; - } -} - -/* - * Called when any GUC is changed that affects prefetching. - */ -void -XLogPrefetchReconfigure(void) -{ - XLogPrefetchReconfigureCount++; -} - -/* - * Called by any backend to request that the stats be reset. - */ -void -XLogPrefetchRequestResetStats(void) -{ - pg_atomic_fetch_add_u32(&SharedStats->reset_request, 1); -} - -/* - * Tell the stats collector to serialize the shared memory counters into the - * stats file. - */ -static void -XLogPrefetchSaveStats(void) -{ - PgStat_RecoveryPrefetchStats serialized = { - .prefetch = pg_atomic_read_u64(&SharedStats->prefetch), - .skip_hit = pg_atomic_read_u64(&SharedStats->skip_hit), - .skip_new = pg_atomic_read_u64(&SharedStats->skip_new), - .skip_fpw = pg_atomic_read_u64(&SharedStats->skip_fpw), - .skip_seq = pg_atomic_read_u64(&SharedStats->skip_seq), - .stat_reset_timestamp = pg_atomic_read_u64(&SharedStats->reset_time) - }; - - pgstat_send_recoveryprefetch(&serialized); -} - -/* - * Try to restore the shared memory counters from the stats file. - */ -static void -XLogPrefetchRestoreStats(void) -{ - PgStat_RecoveryPrefetchStats *serialized = pgstat_fetch_recoveryprefetch(); - - if (serialized->stat_reset_timestamp != 0) - { - pg_atomic_write_u64(&SharedStats->prefetch, serialized->prefetch); - pg_atomic_write_u64(&SharedStats->skip_hit, serialized->skip_hit); - pg_atomic_write_u64(&SharedStats->skip_new, serialized->skip_new); - pg_atomic_write_u64(&SharedStats->skip_fpw, serialized->skip_fpw); - pg_atomic_write_u64(&SharedStats->skip_seq, serialized->skip_seq); - pg_atomic_write_u64(&SharedStats->reset_time, serialized->stat_reset_timestamp); - } -} - -/* - * Increment a counter in shared memory. This is equivalent to *counter++ on a - * plain uint64 without any memory barrier or locking, except on platforms - * where readers can't read uint64 without possibly observing a torn value. - */ -static inline void -XLogPrefetchIncrement(pg_atomic_uint64 *counter) -{ - Assert(AmStartupProcess() || !IsUnderPostmaster); - pg_atomic_write_u64(counter, pg_atomic_read_u64(counter) + 1); -} - -/* - * Initialize an XLogPrefetchState object and restore the last saved - * statistics from disk. - */ -void -XLogPrefetchBegin(XLogPrefetchState *state, XLogReaderState *reader) -{ - XLogPrefetchRestoreStats(); - - /* We'll reconfigure on the first call to XLogPrefetch(). */ - state->reader = reader; - state->prefetcher = NULL; - state->reconfigure_count = XLogPrefetchReconfigureCount - 1; -} - -/* - * Shut down the prefetching infrastructure, if configured. - */ -void -XLogPrefetchEnd(XLogPrefetchState *state) -{ - XLogPrefetchSaveStats(); - - if (state->prefetcher) - XLogPrefetcherFree(state->prefetcher); - state->prefetcher = NULL; - - SharedStats->queue_depth = 0; - SharedStats->distance = 0; -} - -/* - * Create a prefetcher that is ready to begin prefetching blocks referenced by - * WAL records. - */ -XLogPrefetcher * -XLogPrefetcherAllocate(XLogReaderState *reader) -{ - XLogPrefetcher *prefetcher; - static HASHCTL hash_table_ctl = { - .keysize = sizeof(RelFileNode), - .entrysize = sizeof(XLogPrefetcherFilter) - }; - - /* - * The size of the queue is based on the maintenance_io_concurrency - * setting. In theory we might have a separate queue for each tablespace, - * but it's not clear how that should work, so for now we'll just use the - * general GUC to rate-limit all prefetching. The queue has space for up - * the highest possible value of the GUC + 1, because our circular buffer - * has a gap between head and tail when full. - */ - prefetcher = palloc0(sizeof(XLogPrefetcher)); - prefetcher->prefetch_queue_size = maintenance_io_concurrency + 1; - prefetcher->reader = reader; - prefetcher->filter_table = hash_create("XLogPrefetcherFilterTable", 1024, - &hash_table_ctl, - HASH_ELEM | HASH_BLOBS); - dlist_init(&prefetcher->filter_queue); - - SharedStats->queue_depth = 0; - SharedStats->distance = 0; - - return prefetcher; -} - -/* - * Destroy a prefetcher and release all resources. - */ -void -XLogPrefetcherFree(XLogPrefetcher *prefetcher) -{ - /* Log final statistics. */ - ereport(LOG, - (errmsg("recovery finished prefetching at %X/%X; " - "prefetch = %llu, " - "skip_hit = %llu, " - "skip_new = %llu, " - "skip_fpw = %llu, " - "skip_seq = %llu, " - "avg_distance = %f, " - "avg_queue_depth = %f", - LSN_FORMAT_ARGS(prefetcher->reader->EndRecPtr), - (unsigned long long) pg_atomic_read_u64(&SharedStats->prefetch), - (unsigned long long) pg_atomic_read_u64(&SharedStats->skip_hit), - (unsigned long long) pg_atomic_read_u64(&SharedStats->skip_new), - (unsigned long long) pg_atomic_read_u64(&SharedStats->skip_fpw), - (unsigned long long) pg_atomic_read_u64(&SharedStats->skip_seq), - SharedStats->avg_distance, - SharedStats->avg_queue_depth))); - hash_destroy(prefetcher->filter_table); - pfree(prefetcher); -} - -/* - * Called when recovery is replaying a new LSN, to check if we can read ahead. - */ -bool -XLogPrefetcherReadAhead(XLogPrefetcher *prefetcher, XLogRecPtr replaying_lsn) -{ - uint32 reset_request; - - /* If an error has occurred or we've hit the end of the WAL, do nothing. */ - if (prefetcher->shutdown) - return false; - - /* - * Have any in-flight prefetches definitely completed, judging by the LSN - * that is currently being replayed? - */ - XLogPrefetcherCompletedIO(prefetcher, replaying_lsn); - - /* - * Do we already have the maximum permitted number of I/Os running - * (according to the information we have)? If so, we have to wait for at - * least one to complete, so give up early and let recovery catch up. - */ - if (XLogPrefetcherSaturated(prefetcher)) - return false; - - /* - * Can we drop any filters yet? This happens when the LSN that is - * currently being replayed has moved past a record that prevents - * prefetching of a block range, such as relation extension. - */ - XLogPrefetcherCompleteFilters(prefetcher, replaying_lsn); - - /* - * Have we been asked to reset our stats counters? This is checked with - * an unsynchronized memory read, but we'll see it eventually and we'll be - * accessing that cache line anyway. - */ - reset_request = pg_atomic_read_u32(&SharedStats->reset_request); - if (reset_request != SharedStats->reset_handled) - { - XLogPrefetchResetStats(); - SharedStats->reset_handled = reset_request; - - prefetcher->avg_distance = 0; - prefetcher->avg_queue_depth = 0; - prefetcher->samples = 0; - } - - /* OK, we can now try reading ahead. */ - return XLogPrefetcherScanRecords(prefetcher, replaying_lsn); -} - -/* - * Read ahead as far as we are allowed to, considering the LSN that recovery - * is currently replaying. - * - * Return true if the xlogreader would like more data. - */ -static bool -XLogPrefetcherScanRecords(XLogPrefetcher *prefetcher, XLogRecPtr replaying_lsn) -{ - XLogReaderState *reader = prefetcher->reader; - DecodedXLogRecord *record; - - Assert(!XLogPrefetcherSaturated(prefetcher)); - - for (;;) - { - char *error; - int64 distance; - - /* If we don't already have a record, then try to read one. */ - if (prefetcher->record == NULL) - { - switch (XLogReadAhead(reader, &record, &error)) - { - case XLREAD_NEED_DATA: - return true; - case XLREAD_FAIL: - if (error) - ereport(LOG, - (errmsg("recovery no longer prefetching: %s", - error))); - else - ereport(LOG, - (errmsg("recovery no longer prefetching"))); - prefetcher->shutdown = true; - SharedStats->queue_depth = 0; - SharedStats->distance = 0; - - return false; - case XLREAD_FULL: - return false; - case XLREAD_SUCCESS: - prefetcher->record = record; - prefetcher->next_block_id = 0; - break; - } - } - else - { - /* - * We ran out of I/O queue while part way through a record. We'll - * carry on where we left off, according to next_block_id. - */ - record = prefetcher->record; - } - - /* How far ahead of replay are we now? */ - distance = record->lsn - replaying_lsn; - - /* Update distance shown in shm. */ - SharedStats->distance = distance; - - /* Periodically recompute some statistics. */ - if (unlikely(replaying_lsn >= prefetcher->next_sample_lsn)) - { - /* Compute online averages. */ - prefetcher->samples++; - if (prefetcher->samples == 1) - { - prefetcher->avg_distance = SharedStats->distance; - prefetcher->avg_queue_depth = SharedStats->queue_depth; - } - else - { - prefetcher->avg_distance += - (SharedStats->distance - prefetcher->avg_distance) / - prefetcher->samples; - prefetcher->avg_queue_depth += - (SharedStats->queue_depth - prefetcher->avg_queue_depth) / - prefetcher->samples; - } - - /* Expose it in shared memory. */ - SharedStats->avg_distance = prefetcher->avg_distance; - SharedStats->avg_queue_depth = prefetcher->avg_queue_depth; - - /* Also periodically save the simple counters. */ - XLogPrefetchSaveStats(); - - prefetcher->next_sample_lsn = - replaying_lsn + XLOGPREFETCHER_SAMPLE_DISTANCE; - } - - /* Are we not far enough ahead? */ - if (distance <= 0) - { - /* XXX Is this still possible? */ - prefetcher->record = NULL; /* skip this record */ - continue; - } - - /* - * If this is a record that creates a new SMGR relation, we'll avoid - * prefetching anything from that rnode until it has been replayed. - */ - if (replaying_lsn < record->lsn && - record->header.xl_rmid == RM_SMGR_ID && - (record->header.xl_info & ~XLR_INFO_MASK) == XLOG_SMGR_CREATE) - { - xl_smgr_create *xlrec = (xl_smgr_create *) record->main_data; - - XLogPrefetcherAddFilter(prefetcher, xlrec->rnode, 0, record->lsn); - } - - /* Scan the record's block references. */ - if (!XLogPrefetcherScanBlocks(prefetcher)) - return false; - - /* Advance to the next record. */ - prefetcher->record = NULL; - } -} - -/* - * Scan the current record for block references, and consider prefetching. - * - * Return true if we processed the current record to completion and still have - * queue space to process a new record, and false if we saturated the I/O - * queue and need to wait for recovery to advance before we continue. - */ -static bool -XLogPrefetcherScanBlocks(XLogPrefetcher *prefetcher) -{ - DecodedXLogRecord *record = prefetcher->record; - - Assert(!XLogPrefetcherSaturated(prefetcher)); - - /* - * We might already have been partway through processing this record when - * our queue became saturated, so we need to start where we left off. - */ - for (int block_id = prefetcher->next_block_id; - block_id <= record->max_block_id; - ++block_id) - { - DecodedBkpBlock *block = &record->blocks[block_id]; - PrefetchBufferResult prefetch; - SMgrRelation reln; - - /* Ignore everything but the main fork for now. */ - if (block->forknum != MAIN_FORKNUM) - continue; - - /* - * If there is a full page image attached, we won't be reading the - * page, so you might think we should skip it. However, if the - * underlying filesystem uses larger logical blocks than us, it might - * still need to perform a read-before-write some time later. - * Therefore, only prefetch if configured to do so. - */ - if (block->has_image && !recovery_prefetch_fpw) - { - XLogPrefetchIncrement(&SharedStats->skip_fpw); - continue; - } - - /* - * If this block will initialize a new page then it's probably a - * relation extension. Since that might create a new segment, we - * can't try to prefetch this block until the record has been - * replayed, or we might try to open a file that doesn't exist yet. - */ - if (block->flags & BKPBLOCK_WILL_INIT) - { - XLogPrefetcherAddFilter(prefetcher, block->rnode, block->blkno, - record->lsn); - XLogPrefetchIncrement(&SharedStats->skip_new); - continue; - } - - /* Should we skip this block due to a filter? */ - if (XLogPrefetcherIsFiltered(prefetcher, block->rnode, block->blkno)) - { - XLogPrefetchIncrement(&SharedStats->skip_new); - continue; - } - - /* Fast path for repeated references to the same relation. */ - if (RelFileNodeEquals(block->rnode, prefetcher->last_rnode)) - { - /* - * If this is a repeat access to the same block, then skip it. - * - * XXX We could also check for last_blkno + 1 too, and also update - * last_blkno; it's not clear if the kernel would do a better job - * of sequential prefetching. - */ - if (block->blkno == prefetcher->last_blkno) - { - XLogPrefetchIncrement(&SharedStats->skip_seq); - continue; - } - - /* We can avoid calling smgropen(). */ - reln = prefetcher->last_reln; - } - else - { - /* Otherwise we have to open it. */ - reln = smgropen(block->rnode, InvalidBackendId); - prefetcher->last_rnode = block->rnode; - prefetcher->last_reln = reln; - } - prefetcher->last_blkno = block->blkno; - - /* Try to prefetch this block! */ - prefetch = PrefetchSharedBuffer(reln, block->forknum, block->blkno); - if (BufferIsValid(prefetch.recent_buffer)) - { - /* - * It was already cached, so do nothing. We'll remember the - * buffer, so that recovery can try to avoid looking it up again. - */ - block->recent_buffer = prefetch.recent_buffer; - XLogPrefetchIncrement(&SharedStats->skip_hit); - } - else if (prefetch.initiated_io) - { - /* - * I/O has possibly been initiated (though we don't know if it was - * already cached by the kernel, so we just have to assume that it - * has due to lack of better information). Record this as an I/O - * in progress until eventually we replay this LSN. - */ - XLogPrefetchIncrement(&SharedStats->prefetch); - XLogPrefetcherInitiatedIO(prefetcher, record->lsn); - - /* - * If the queue is now full, we'll have to wait before processing - * any more blocks from this record, or move to a new record if - * that was the last block. - */ - if (XLogPrefetcherSaturated(prefetcher)) - { - prefetcher->next_block_id = block_id + 1; - return false; - } - } - else - { - /* - * Neither cached nor initiated. The underlying segment file - * doesn't exist. Presumably it will be unlinked by a later WAL - * record. When recovery reads this block, it will use the - * EXTENSION_CREATE_RECOVERY flag. We certainly don't want to do - * that sort of thing while merely prefetching, so let's just - * ignore references to this relation until this record is - * replayed, and let recovery create the dummy file or complain if - * something is wrong. - */ - XLogPrefetcherAddFilter(prefetcher, block->rnode, 0, - record->lsn); - XLogPrefetchIncrement(&SharedStats->skip_new); - } - } - - return true; -} - -/* - * Expose statistics about recovery prefetching. - */ -Datum -pg_stat_get_prefetch_recovery(PG_FUNCTION_ARGS) -{ -#define PG_STAT_GET_PREFETCH_RECOVERY_COLS 10 - ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; - TupleDesc tupdesc; - Tuplestorestate *tupstore; - MemoryContext per_query_ctx; - MemoryContext oldcontext; - Datum values[PG_STAT_GET_PREFETCH_RECOVERY_COLS]; - bool nulls[PG_STAT_GET_PREFETCH_RECOVERY_COLS]; - - if (rsinfo == NULL || !IsA(rsinfo, ReturnSetInfo)) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("set-valued function called in context that cannot accept a set"))); - if (!(rsinfo->allowedModes & SFRM_Materialize)) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("materialize mode required, but it is not allowed in this context"))); - - if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) - elog(ERROR, "return type must be a row type"); - - per_query_ctx = rsinfo->econtext->ecxt_per_query_memory; - oldcontext = MemoryContextSwitchTo(per_query_ctx); - - tupstore = tuplestore_begin_heap(true, false, work_mem); - rsinfo->returnMode = SFRM_Materialize; - rsinfo->setResult = tupstore; - rsinfo->setDesc = tupdesc; - - MemoryContextSwitchTo(oldcontext); - - if (pg_atomic_read_u32(&SharedStats->reset_request) != SharedStats->reset_handled) - { - /* There's an unhandled reset request, so just show NULLs */ - for (int i = 0; i < PG_STAT_GET_PREFETCH_RECOVERY_COLS; ++i) - nulls[i] = true; - } - else - { - for (int i = 0; i < PG_STAT_GET_PREFETCH_RECOVERY_COLS; ++i) - nulls[i] = false; - } - - values[0] = TimestampTzGetDatum(pg_atomic_read_u64(&SharedStats->reset_time)); - values[1] = Int64GetDatum(pg_atomic_read_u64(&SharedStats->prefetch)); - values[2] = Int64GetDatum(pg_atomic_read_u64(&SharedStats->skip_hit)); - values[3] = Int64GetDatum(pg_atomic_read_u64(&SharedStats->skip_new)); - values[4] = Int64GetDatum(pg_atomic_read_u64(&SharedStats->skip_fpw)); - values[5] = Int64GetDatum(pg_atomic_read_u64(&SharedStats->skip_seq)); - values[6] = Int32GetDatum(SharedStats->distance); - values[7] = Int32GetDatum(SharedStats->queue_depth); - values[8] = Float4GetDatum(SharedStats->avg_distance); - values[9] = Float4GetDatum(SharedStats->avg_queue_depth); - tuplestore_putvalues(tupstore, tupdesc, values, nulls); - tuplestore_donestoring(tupstore); - - return (Datum) 0; -} - -/* - * Compute (n + 1) % prefetch_queue_size, assuming n < prefetch_queue_size, - * without using division. - */ -static inline int -XLogPrefetcherNext(XLogPrefetcher *prefetcher, int n) -{ - int next = n + 1; - - return next == prefetcher->prefetch_queue_size ? 0 : next; -} - -/* - * Don't prefetch any blocks >= 'blockno' from a given 'rnode', until 'lsn' - * has been replayed. - */ -static inline void -XLogPrefetcherAddFilter(XLogPrefetcher *prefetcher, RelFileNode rnode, - BlockNumber blockno, XLogRecPtr lsn) -{ - XLogPrefetcherFilter *filter; - bool found; - - filter = hash_search(prefetcher->filter_table, &rnode, HASH_ENTER, &found); - if (!found) - { - /* - * Don't allow any prefetching of this block or higher until replayed. - */ - filter->filter_until_replayed = lsn; - filter->filter_from_block = blockno; - dlist_push_head(&prefetcher->filter_queue, &filter->link); - } - else - { - /* - * We were already filtering this rnode. Extend the filter's lifetime - * to cover this WAL record, but leave the (presumably lower) block - * number there because we don't want to have to track individual - * blocks. - */ - filter->filter_until_replayed = lsn; - dlist_delete(&filter->link); - dlist_push_head(&prefetcher->filter_queue, &filter->link); - } -} - -/* - * Have we replayed the records that caused us to begin filtering a block - * range? That means that relations should have been created, extended or - * dropped as required, so we can drop relevant filters. - */ -static inline void -XLogPrefetcherCompleteFilters(XLogPrefetcher *prefetcher, XLogRecPtr replaying_lsn) -{ - while (unlikely(!dlist_is_empty(&prefetcher->filter_queue))) - { - XLogPrefetcherFilter *filter = dlist_tail_element(XLogPrefetcherFilter, - link, - &prefetcher->filter_queue); - - if (filter->filter_until_replayed >= replaying_lsn) - break; - dlist_delete(&filter->link); - hash_search(prefetcher->filter_table, filter, HASH_REMOVE, NULL); - } -} - -/* - * Check if a given block should be skipped due to a filter. - */ -static inline bool -XLogPrefetcherIsFiltered(XLogPrefetcher *prefetcher, RelFileNode rnode, - BlockNumber blockno) -{ - /* - * Test for empty queue first, because we expect it to be empty most of - * the time and we can avoid the hash table lookup in that case. - */ - if (unlikely(!dlist_is_empty(&prefetcher->filter_queue))) - { - XLogPrefetcherFilter *filter = hash_search(prefetcher->filter_table, &rnode, - HASH_FIND, NULL); - - if (filter && filter->filter_from_block <= blockno) - return true; - } - - return false; -} - -/* - * Insert an LSN into the queue. The queue must not be full already. This - * tracks the fact that we have (to the best of our knowledge) initiated an - * I/O, so that we can impose a cap on concurrent prefetching. - */ -static inline void -XLogPrefetcherInitiatedIO(XLogPrefetcher *prefetcher, - XLogRecPtr prefetching_lsn) -{ - Assert(!XLogPrefetcherSaturated(prefetcher)); - prefetcher->prefetch_queue[prefetcher->prefetch_head] = prefetching_lsn; - prefetcher->prefetch_head = - XLogPrefetcherNext(prefetcher, prefetcher->prefetch_head); - SharedStats->queue_depth++; - - Assert(SharedStats->queue_depth <= prefetcher->prefetch_queue_size); -} - -/* - * Have we replayed the records that caused us to initiate the oldest - * prefetches yet? That means that they're definitely finished, so we can can - * forget about them and allow ourselves to initiate more prefetches. For now - * we don't have any awareness of when I/O really completes. - */ -static inline void -XLogPrefetcherCompletedIO(XLogPrefetcher *prefetcher, XLogRecPtr replaying_lsn) -{ - while (prefetcher->prefetch_head != prefetcher->prefetch_tail && - prefetcher->prefetch_queue[prefetcher->prefetch_tail] < replaying_lsn) - { - prefetcher->prefetch_tail = - XLogPrefetcherNext(prefetcher, prefetcher->prefetch_tail); - SharedStats->queue_depth--; - - Assert(SharedStats->queue_depth >= 0); - } -} - -/* - * Check if the maximum allowed number of I/Os is already in flight. - */ -static inline bool -XLogPrefetcherSaturated(XLogPrefetcher *prefetcher) -{ - int next = XLogPrefetcherNext(prefetcher, prefetcher->prefetch_head); - - return next == prefetcher->prefetch_tail; -} - -void -assign_recovery_prefetch(bool new_value, void *extra) -{ - /* Reconfigure prefetching, because a setting it depends on changed. */ - recovery_prefetch = new_value; - if (AmStartupProcess()) - XLogPrefetchReconfigure(); -} - -void -assign_recovery_prefetch_fpw(bool new_value, void *extra) -{ - /* Reconfigure prefetching, because a setting it depends on changed. */ - recovery_prefetch_fpw = new_value; - if (AmStartupProcess()) - XLogPrefetchReconfigure(); -} diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index 4277e92d7c956..42738eb940c2c 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -36,14 +36,11 @@ static void report_invalid_record(XLogReaderState *state, const char *fmt,...) pg_attribute_printf(2, 3); static bool allocate_recordbuf(XLogReaderState *state, uint32 reclength); -static bool XLogNeedData(XLogReaderState *state, XLogRecPtr pageptr, - int reqLen, bool header_inclusive); -size_t DecodeXLogRecordRequiredSpace(size_t xl_tot_len); -static XLogReadRecordResult XLogDecodeOneRecord(XLogReaderState *state, - bool allow_oversized); +static int ReadPageInternal(XLogReaderState *state, XLogRecPtr pageptr, + int reqLen); static void XLogReaderInvalReadState(XLogReaderState *state); static bool ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr, - XLogRecPtr PrevRecPtr, XLogRecord *record); + XLogRecPtr PrevRecPtr, XLogRecord *record, bool randAccess); static bool ValidXLogRecord(XLogReaderState *state, XLogRecord *record, XLogRecPtr recptr); static void ResetDecoder(XLogReaderState *state); @@ -53,8 +50,6 @@ static void WALOpenSegmentInit(WALOpenSegment *seg, WALSegmentContext *segcxt, /* size of the buffer allocated for error message. */ #define MAX_ERRORMSG_LEN 1000 -#define DEFAULT_DECODE_BUFFER_SIZE 0x10000 - /* * Construct a string in state->errormsg_buf explaining what's wrong with * the current record being read. @@ -69,8 +64,6 @@ report_invalid_record(XLogReaderState *state, const char *fmt,...) va_start(args, fmt); vsnprintf(state->errormsg_buf, MAX_ERRORMSG_LEN, fmt, args); va_end(args); - - state->errormsg_deferred = true; } /* @@ -80,7 +73,7 @@ report_invalid_record(XLogReaderState *state, const char *fmt,...) */ XLogReaderState * XLogReaderAllocate(int wal_segment_size, const char *waldir, - WALSegmentCleanupCB cleanup_cb) + XLogReaderRoutine *routine, void *private_data) { XLogReaderState *state; @@ -91,7 +84,9 @@ XLogReaderAllocate(int wal_segment_size, const char *waldir, return NULL; /* initialize caller-provided support functions */ - state->cleanup_cb = cleanup_cb; + state->routine = *routine; + + state->max_block_id = -1; /* * Permanently allocate readBuf. We do it this way, rather than just @@ -112,7 +107,9 @@ XLogReaderAllocate(int wal_segment_size, const char *waldir, WALOpenSegmentInit(&state->seg, &state->segcxt, wal_segment_size, waldir); - /* ReadRecPtr, EndRecPtr, reqLen and readLen initialized to zeroes above */ + /* system_identifier initialized to zeroes above */ + state->private_data = private_data; + /* ReadRecPtr, EndRecPtr and readLen initialized to zeroes above */ state->errormsg_buf = palloc_extended(MAX_ERRORMSG_LEN + 1, MCXT_ALLOC_NO_OOM); if (!state->errormsg_buf) @@ -141,11 +138,18 @@ XLogReaderAllocate(int wal_segment_size, const char *waldir, void XLogReaderFree(XLogReaderState *state) { - if (state->seg.ws_file >= 0) - state->cleanup_cb(state); + int block_id; - if (state->decode_buffer && state->free_decode_buffer) - pfree(state->decode_buffer); + if (state->seg.ws_file != -1) + state->routine.segment_close(state); + + for (block_id = 0; block_id <= XLR_MAX_BLOCK_ID; block_id++) + { + if (state->blocks[block_id].data) + pfree(state->blocks[block_id].data); + } + if (state->main_data) + pfree(state->main_data); pfree(state->errormsg_buf); if (state->readRecordBuf) @@ -154,22 +158,6 @@ XLogReaderFree(XLogReaderState *state) pfree(state); } -/* - * Set the size of the decoding buffer. A pointer to a caller supplied memory - * region may also be passed in, in which case non-oversized records will be - * decoded there. - */ -void -XLogReaderSetDecodeBuffer(XLogReaderState *state, void *buffer, size_t size) -{ - Assert(state->decode_buffer == NULL); - - state->decode_buffer = buffer; - state->decode_buffer_size = size; - state->decode_buffer_head = buffer; - state->decode_buffer_tail = buffer; -} - /* * Allocate readRecordBuf to fit a record of at least the given length. * Returns true if successful, false if out of memory. @@ -257,799 +245,290 @@ XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr) /* Begin at the passed-in record pointer. */ state->EndRecPtr = RecPtr; - state->NextRecPtr = RecPtr; state->ReadRecPtr = InvalidXLogRecPtr; - state->DecodeRecPtr = InvalidXLogRecPtr; - state->readRecordState = XLREAD_NEXT_RECORD; } /* - * See if we can release the last record that was returned by - * XLogReadRecord(), to free up space. + * Attempt to read an XLOG record. + * + * XLogBeginRead() or XLogFindNextRecord() must be called before the first call + * to XLogReadRecord(). + * + * If the page_read callback fails to read the requested data, NULL is + * returned. The callback is expected to have reported the error; errormsg + * is set to NULL. + * + * If the reading fails for some other reason, NULL is also returned, and + * *errormsg is set to a string with details of the failure. + * + * The returned pointer (or *errormsg) points to an internal buffer that's + * valid until the next call to XLogReadRecord. */ -static void -XLogReleasePreviousRecord(XLogReaderState *state) +XLogRecord * +XLogReadRecord(XLogReaderState *state, char **errormsg) { - DecodedXLogRecord *record; + XLogRecPtr RecPtr; + XLogRecord *record; + XLogRecPtr targetPagePtr; + bool randAccess; + uint32 len, + total_len; + uint32 targetRecOff; + uint32 pageHeaderSize; + bool gotheader; + int readOff; /* - * Remove it from the decoded record queue. It must be the oldest - * item decoded, decode_queue_tail. + * randAccess indicates whether to verify the previous-record pointer of + * the record we're reading. We only do this if we're reading + * sequentially, which is what we initially assume. */ - record = state->record; - Assert(record == state->decode_queue_tail); - state->record = NULL; - state->decode_queue_tail = record->next; + randAccess = false; - /* It might also be the newest item decoded, decode_queue_head. */ - if (state->decode_queue_head == record) - state->decode_queue_head = NULL; + /* reset error state */ + *errormsg = NULL; + state->errormsg_buf[0] = '\0'; - /* Release the space. */ - if (unlikely(record->oversized)) - { - /* It's not in the the decode buffer, so free it to release space. */ - pfree(record); - } - else + ResetDecoder(state); + + RecPtr = state->EndRecPtr; + + if (state->ReadRecPtr != InvalidXLogRecPtr) { - /* It must be the tail record in the decode buffer. */ - Assert(state->decode_buffer_tail == (char *) record); + /* read the record after the one we just read */ /* - * We need to update tail to point to the next record that is in the - * decode buffer, if any, being careful to skip oversized ones - * (they're not in the decode buffer). + * EndRecPtr is pointing to end+1 of the previous WAL record. If + * we're at a page boundary, no more records can fit on the current + * page. We must skip over the page header, but we can't do that until + * we've read in the page, since the header size is variable. */ - record = record->next; - while (unlikely(record && record->oversized)) - record = record->next; - - if (record) - { - /* Adjust tail to release space up to the next record. */ - state->decode_buffer_tail = (char *) record; - } - else if (state->decoding && !state->decoding->oversized) - { - /* - * We're releasing the last fully decoded record in - * XLogReadRecord(), but some time earlier we partially decoded a - * record in XLogReadAhead() and were unable to complete the job. - * We'll set the buffer head and tail to point to the record we - * started working on, so that we can continue (perhaps from a - * different source). - */ - state->decode_buffer_tail = (char *) state->decoding; - state->decode_buffer_head = (char *) state->decoding; - } - else - { - /* - * Otherwise we might as well just reset head and tail to the - * start of the buffer space, because we're empty. This means - * we'll keep overwriting the same piece of memory if we're not - * doing any prefetching. - */ - state->decode_buffer_tail = state->decode_buffer; - state->decode_buffer_head = state->decode_buffer; - } } -} - -/* - * Similar to XLogNextRecord(), but this traditional interface is for code - * that just wants the header, not the decoded record. Callers can access the - * decoded record through the XLogRecGetXXX() macros. - */ -XLogReadRecordResult -XLogReadRecord(XLogReaderState *state, XLogRecord **record, char **errormsg) -{ - XLogReadRecordResult result; - DecodedXLogRecord *decoded; - - /* Consume the next decoded record. */ - result = XLogNextRecord(state, &decoded, errormsg); - if (result == XLREAD_SUCCESS) + else { /* - * The traditional interface just returns the header, not the decoded - * record. The caller will access the decoded record through the - * XLogRecGetXXX() macros. + * Caller supplied a position to start at. + * + * In this case, EndRecPtr should already be pointing to a valid + * record starting position. */ - *record = &decoded->header; + Assert(XRecOffIsValid(RecPtr)); + randAccess = true; } - else - *record = NULL; - return result; -} -/* - * Consume the next record. XLogBeginRead() or XLogFindNextRecord() must be - * called before the first call to XLogNextRecord(). - * - * This function may return XLREAD_NEED_DATA several times before returning a - * result record. The caller shall read in some new data then call this - * function again with the same parameters. - * - * When a record is successfully read, returns XLREAD_SUCCESS with result - * record being stored in *record. Otherwise *record is set to NULL. - * - * Returns XLREAD_NEED_DATA if more data is needed to finish decoding the - * current record. In that case, state->readPagePtr and state->reqLen inform - * the desired position and minimum length of data needed. The caller shall - * read in the requested data and set state->readBuf to point to a buffer - * containing it. The caller must also set state->seg->ws_tli and - * state->readLen to indicate the timeline that it was read from, and the - * length of data that is now available (which must be >= given reqLen), - * respectively. - * - * Returns XLREAD_FULL if allow_oversized is true, and no space is available. - * This is intended for readahead. - * - * If invalid data is encountered, returns XLREAD_FAIL with *record being set - * to NULL. *errormsg is set to a string with details of the failure. The - * returned pointer (or *errormsg) points to an internal buffer that's valid - * until the next call to XLogReadRecord. - * - */ -XLogReadRecordResult -XLogNextRecord(XLogReaderState *state, - DecodedXLogRecord **record, - char **errormsg) -{ - /* Release the space occupied by the last record we returned. */ - if (state->record) - XLogReleasePreviousRecord(state); + state->currRecPtr = RecPtr; - for (;;) - { - XLogReadRecordResult result; - - /* We can now return the oldest item in the queue, if there is one. */ - if (state->decode_queue_tail) - { - /* - * Record this as the most recent record returned, so that we'll - * release it next time. This also exposes it to the - * XLogRecXXX(decoder) macros, which pass in the decoder rather - * than the record for historical reasons. - */ - state->record = state->decode_queue_tail; - - /* - * It should be immediately after the last the record returned by - * XLogReadRecord(), or at the position set by XLogBeginRead() if - * XLogReadRecord() hasn't been called yet. It may be after a - * page header, though. - */ - Assert(state->record->lsn == state->EndRecPtr || - (state->EndRecPtr % XLOG_BLCKSZ == 0 && - (state->record->lsn == state->EndRecPtr + SizeOfXLogShortPHD || - state->record->lsn == state->EndRecPtr + SizeOfXLogLongPHD))); - - /* - * Set ReadRecPtr and EndRecPtr to correspond to that - * record. - * - * Calling code could access these through the returned decoded - * record, but for now we'll update them directly here, for the - * benefit of all the existing code that accesses these variables - * directly. - */ - state->ReadRecPtr = state->record->lsn; - state->EndRecPtr = state->record->next_lsn; + targetPagePtr = RecPtr - (RecPtr % XLOG_BLCKSZ); + targetRecOff = RecPtr % XLOG_BLCKSZ; - *errormsg = NULL; - *record = state->record; - - return XLREAD_SUCCESS; - } - else if (state->errormsg_deferred) - { - /* - * If we've run out of records, but we have a deferred error, now - * is the time to report it. - */ - state->errormsg_deferred = false; - if (state->errormsg_buf[0] != '\0') - *errormsg = state->errormsg_buf; - else - *errormsg = NULL; - *record = NULL; - state->EndRecPtr = state->DecodeRecPtr; - - return XLREAD_FAIL; - } + /* + * Read the page containing the record into state->readBuf. Request enough + * byte to cover the whole record header, or at least the part of it that + * fits on the same page. + */ + readOff = ReadPageInternal(state, targetPagePtr, + Min(targetRecOff + SizeOfXLogRecord, XLOG_BLCKSZ)); + if (readOff < 0) + goto err; - /* We need to get a decoded record into our queue first. */ - result = XLogDecodeOneRecord(state, true /* allow_oversized */ ); - switch(result) - { - case XLREAD_NEED_DATA: - *errormsg = NULL; - *record = NULL; - return result; - case XLREAD_SUCCESS: - Assert(state->decode_queue_tail != NULL); - break; - case XLREAD_FULL: - /* Not expected because we passed allow_oversized = true */ - Assert(false); - break; - case XLREAD_FAIL: - /* - * If that produced neither a queued record nor a queued error, - * then we're at the end (for example, archive recovery with no - * more files available). - */ - Assert(state->decode_queue_tail == NULL); - if (!state->errormsg_deferred) - { - state->EndRecPtr = state->DecodeRecPtr; - *errormsg = NULL; - *record = NULL; - return result; - } - break; - } + /* + * ReadPageInternal always returns at least the page header, so we can + * examine it now. + */ + pageHeaderSize = XLogPageHeaderSize((XLogPageHeader) state->readBuf); + if (targetRecOff == 0) + { + /* + * At page start, so skip over page header. + */ + RecPtr += pageHeaderSize; + targetRecOff = pageHeaderSize; } - - /* unreachable */ - return XLREAD_FAIL; -} - -/* - * Try to decode the next available record. The next record will also be - * returned to XLogRecordRead(). - * - * In addition to the values that XLogReadRecord() can return, XLogReadAhead() - * can also return XLREAD_FULL to indicate that further readahead is not - * possible yet due to lack of space. - */ -XLogReadRecordResult -XLogReadAhead(XLogReaderState *state, DecodedXLogRecord **record, char **errormsg) -{ - XLogReadRecordResult result; - - /* We stop trying after encountering an error. */ - if (unlikely(state->errormsg_deferred)) + else if (targetRecOff < pageHeaderSize) { - /* We only report the error message the first time, see below. */ - *errormsg = NULL; - return XLREAD_FAIL; + report_invalid_record(state, "invalid record offset at %X/%X", + LSN_FORMAT_ARGS(RecPtr)); + goto err; } - /* - * Try to decode one more record, if we have space. Pass allow_oversized - * = false, so that this call returns fast if the decode buffer is full. - */ - result = XLogDecodeOneRecord(state, false); - switch (result) + if ((((XLogPageHeader) state->readBuf)->xlp_info & XLP_FIRST_IS_CONTRECORD) && + targetRecOff == pageHeaderSize) { - case XLREAD_SUCCESS: - /* New record at head of decode record queue. */ - Assert(state->decode_queue_head != NULL); - *record = state->decode_queue_head; - return result; - case XLREAD_FULL: - /* No space in circular decode buffer. */ - return result; - case XLREAD_NEED_DATA: - /* The caller needs to insert more data. */ - return result; - case XLREAD_FAIL: - /* Report the error. XLogReadRecord() will also report it. */ - Assert(state->errormsg_deferred); - if (state->errormsg_buf[0] != '\0') - *errormsg = state->errormsg_buf; - return result; + report_invalid_record(state, "contrecord is requested by %X/%X", + LSN_FORMAT_ARGS(RecPtr)); + goto err; } - /* Unreachable. */ - return XLREAD_FAIL; -} + /* ReadPageInternal has verified the page header */ + Assert(pageHeaderSize <= readOff); -/* - * Allocate space for a decoded record. The only member of the returned - * object that is initialized is the 'oversized' flag, indicating that the - * decoded record wouldn't fit in the decode buffer and must eventually be - * freed explicitly. - * - * Return NULL if there is no space in the decode buffer and allow_oversized - * is false, or if memory allocation fails for an oversized buffer. - */ -static DecodedXLogRecord * -XLogReadRecordAlloc(XLogReaderState *state, size_t xl_tot_len, bool allow_oversized) -{ - size_t required_space = DecodeXLogRecordRequiredSpace(xl_tot_len); - DecodedXLogRecord *decoded = NULL; + /* + * Read the record length. + * + * NB: Even though we use an XLogRecord pointer here, the whole record + * header might not fit on this page. xl_tot_len is the first field of the + * struct, so it must be on this page (the records are MAXALIGNed), but we + * cannot access any other fields until we've verified that we got the + * whole header. + */ + record = (XLogRecord *) (state->readBuf + RecPtr % XLOG_BLCKSZ); + total_len = record->xl_tot_len; - /* Allocate a circular decode buffer if we don't have one already. */ - if (unlikely(state->decode_buffer == NULL)) - { - if (state->decode_buffer_size == 0) - state->decode_buffer_size = DEFAULT_DECODE_BUFFER_SIZE; - state->decode_buffer = palloc(state->decode_buffer_size); - state->decode_buffer_head = state->decode_buffer; - state->decode_buffer_tail = state->decode_buffer; - state->free_decode_buffer = true; - } - if (state->decode_buffer_head >= state->decode_buffer_tail) + /* + * If the whole record header is on this page, validate it immediately. + * Otherwise do just a basic sanity check on xl_tot_len, and validate the + * rest of the header after reading it from the next page. The xl_tot_len + * check is necessary here to ensure that we enter the "Need to reassemble + * record" code path below; otherwise we might fail to apply + * ValidXLogRecordHeader at all. + */ + if (targetRecOff <= XLOG_BLCKSZ - SizeOfXLogRecord) { - /* Empty, or head is to the right of tail. */ - if (state->decode_buffer_head + required_space <= - state->decode_buffer + state->decode_buffer_size) - { - /* There is space between head and end. */ - decoded = (DecodedXLogRecord *) state->decode_buffer_head; - decoded->oversized = false; - return decoded; - } - else if (state->decode_buffer + required_space < - state->decode_buffer_tail) - { - /* There is space between start and tail. */ - decoded = (DecodedXLogRecord *) state->decode_buffer; - decoded->oversized = false; - return decoded; - } + if (!ValidXLogRecordHeader(state, RecPtr, state->ReadRecPtr, record, + randAccess)) + goto err; + gotheader = true; } else { - /* Head is to the left of tail. */ - if (state->decode_buffer_head + required_space < - state->decode_buffer_tail) + /* XXX: more validation should be done here */ + if (total_len < SizeOfXLogRecord) { - /* There is space between head and tail. */ - decoded = (DecodedXLogRecord *) state->decode_buffer_head; - decoded->oversized = false; - return decoded; + report_invalid_record(state, + "invalid record length at %X/%X: wanted %u, got %u", + LSN_FORMAT_ARGS(RecPtr), + (uint32) SizeOfXLogRecord, total_len); + goto err; } + gotheader = false; } - /* Not enough space in the decode buffer. Are we allowed to allocate? */ - if (allow_oversized) + len = XLOG_BLCKSZ - RecPtr % XLOG_BLCKSZ; + if (total_len > len) { - decoded = palloc_extended(required_space, MCXT_ALLOC_NO_OOM); - if (decoded == NULL) - return NULL; - decoded->oversized = true; - return decoded; - } + /* Need to reassemble record */ + char *contdata; + XLogPageHeader pageHeader; + char *buffer; + uint32 gotlen; - return decoded; -} - -/* - * Try to read and decode the next record and add it to the head of the - * decoded record queue. If 'allow_oversized' is false, then XLREAD_FULL can - * be returned to indicate the decoding buffer is full. XLogBeginRead() or - * XLogFindNextRecord() must be called before the first call to - * XLogReadRecord(). - * - * This function runs a state machine consisting of the following states. - * - * XLREAD_NEXT_RECORD: - * The initial state. If called with a valid XLogRecPtr, try to read a - * record at that position. If invalid RecPtr is given try to read a record - * just after the last one read. The next state is XLREAD_TOT_LEN. - * - * XLREAD_TOT_LEN: - * Examining record header. Ends after reading record length. - * recordRemainLen and recordGotLen are initialized. The next state is - * XLREAD_FIRST_FRAGMENT. - * - * XLREAD_FIRST_FRAGMENT: - * Reading the first fragment. Goes to XLREAD_NEXT_RECORD if that's all or - * XLREAD_CONTINUATION if we need more data. - - * XLREAD_CONTINUATION: - * Reading continuation of record. If the whole record is now decoded, goes - * to XLREAD_NEXT_RECORD. During this state, recordRemainLen indicates how - * much is left. - * - * If invalid data is found in any state, the state machine stays at the - * current state. This behavior allows us to continue reading a record - * after switching to a different source, during streaming replication. - */ -static XLogReadRecordResult -XLogDecodeOneRecord(XLogReaderState *state, bool allow_oversized) -{ - XLogRecord *record; - char *errormsg; /* not used */ - XLogRecord *prec; - - /* reset error state */ - state->errormsg_buf[0] = '\0'; - record = NULL; + /* + * Enlarge readRecordBuf as needed. + */ + if (total_len > state->readRecordBufSize && + !allocate_recordbuf(state, total_len)) + { + /* We treat this as a "bogus data" condition */ + report_invalid_record(state, "record length %u at %X/%X too long", + total_len, LSN_FORMAT_ARGS(RecPtr)); + goto err; + } - switch (state->readRecordState) - { - case XLREAD_NEXT_RECORD: - Assert(!state->decoding); + /* Copy the first fragment of the record from the first page. */ + memcpy(state->readRecordBuf, + state->readBuf + RecPtr % XLOG_BLCKSZ, len); + buffer = state->readRecordBuf + len; + gotlen = len; - if (state->DecodeRecPtr != InvalidXLogRecPtr) - { - /* read the record after the one we just read */ + do + { + /* Calculate pointer to beginning of next page */ + targetPagePtr += XLOG_BLCKSZ; - /* - * NextRecPtr is pointing to end+1 of the previous WAL record. - * If we're at a page boundary, no more records can fit on the - * current page. We must skip over the page header, but we - * can't do that until we've read in the page, since the - * header size is variable. - */ - state->PrevRecPtr = state->DecodeRecPtr; - state->DecodeRecPtr = state->NextRecPtr; - } - else - { - /* - * Caller supplied a position to start at. - * - * In this case, EndRecPtr should already be pointing to a - * valid record starting position. - */ - Assert(XRecOffIsValid(state->NextRecPtr)); - state->DecodeRecPtr = state->NextRecPtr; + /* Wait for the next page to become available */ + readOff = ReadPageInternal(state, targetPagePtr, + Min(total_len - gotlen + SizeOfXLogShortPHD, + XLOG_BLCKSZ)); - /* - * We cannot verify the previous-record pointer when we're - * seeking to a particular record. Reset PrevRecPtr so that we - * won't try doing that. - */ - state->PrevRecPtr = InvalidXLogRecPtr; - } + if (readOff < 0) + goto err; - state->record_verified = false; - state->readRecordState = XLREAD_TOT_LEN; - /* fall through */ + Assert(SizeOfXLogShortPHD <= readOff); - case XLREAD_TOT_LEN: + /* Check that the continuation on next page looks valid */ + pageHeader = (XLogPageHeader) state->readBuf; + if (!(pageHeader->xlp_info & XLP_FIRST_IS_CONTRECORD)) { - uint32 total_len; - uint32 pageHeaderSize; - XLogRecPtr targetPagePtr; - uint32 targetRecOff; - XLogPageHeader pageHeader; - - Assert(!state->decoding); - - targetPagePtr = - state->DecodeRecPtr - (state->DecodeRecPtr % XLOG_BLCKSZ); - targetRecOff = state->DecodeRecPtr % XLOG_BLCKSZ; - - /* - * Check if we have enough data. For the first record in the - * page, the requesting length doesn't contain page header. - */ - if (XLogNeedData(state, targetPagePtr, - Min(targetRecOff + SizeOfXLogRecord, XLOG_BLCKSZ), - targetRecOff != 0)) - return XLREAD_NEED_DATA; - - /* error out if caller supplied bogus page */ - if (!state->page_verified) - goto err; - - /* examine page header now. */ - pageHeaderSize = - XLogPageHeaderSize((XLogPageHeader) state->readBuf); - if (targetRecOff == 0) - { - /* At page start, so skip over page header. */ - state->DecodeRecPtr += pageHeaderSize; - targetRecOff = pageHeaderSize; - } - else if (targetRecOff < pageHeaderSize) - { - report_invalid_record(state, "invalid record offset at %X/%X", - LSN_FORMAT_ARGS(state->DecodeRecPtr)); - goto err; - } - - pageHeader = (XLogPageHeader) state->readBuf; - if ((pageHeader->xlp_info & XLP_FIRST_IS_CONTRECORD) && - targetRecOff == pageHeaderSize) - { - report_invalid_record(state, "contrecord is requested by %X/%X", - LSN_FORMAT_ARGS(state->DecodeRecPtr)); - goto err; - } - - /* XLogNeedData has verified the page header */ - Assert(pageHeaderSize <= state->readLen); - - /* - * Read the record length. - * - * NB: Even though we use an XLogRecord pointer here, the - * whole record header might not fit on this page. xl_tot_len - * is the first field of the struct, so it must be on this - * page (the records are MAXALIGNed), but we cannot access any - * other fields until we've verified that we got the whole - * header. - */ - prec = (XLogRecord *) (state->readBuf + - state->DecodeRecPtr % XLOG_BLCKSZ); - total_len = prec->xl_tot_len; - - /* Find space to decode this record. */ - Assert(state->decoding == NULL); - state->decoding = XLogReadRecordAlloc(state, total_len, - allow_oversized); - if (state->decoding == NULL) - { - /* - * We couldn't get space. If allow_oversized was true, - * then palloc() must have failed. Otherwise, report that - * our decoding buffer is full. This means that weare - * trying to read too far ahead. - */ - if (allow_oversized) - goto err; - return XLREAD_FULL; - } - - /* - * If the whole record header is on this page, validate it - * immediately. Otherwise do just a basic sanity check on - * xl_tot_len, and validate the rest of the header after - * reading it from the next page. The xl_tot_len check is - * necessary here to ensure that we enter the - * XLREAD_CONTINUATION state below; otherwise we might fail to - * apply ValidXLogRecordHeader at all. - */ - if (targetRecOff <= XLOG_BLCKSZ - SizeOfXLogRecord) - { - if (!ValidXLogRecordHeader(state, state->DecodeRecPtr, - state->PrevRecPtr, prec)) - goto err; - - state->record_verified = true; - } - else - { - /* XXX: more validation should be done here */ - if (total_len < SizeOfXLogRecord) - { - report_invalid_record(state, - "invalid record length at %X/%X: wanted %u, got %u", - LSN_FORMAT_ARGS(state->DecodeRecPtr), - (uint32) SizeOfXLogRecord, total_len); - goto err; - } - } - - /* - * Wait for the rest of the record, or the part of the record - * that fit on the first page if crossed a page boundary, to - * become available. - */ - state->recordGotLen = 0; - state->recordRemainLen = total_len; - state->readRecordState = XLREAD_FIRST_FRAGMENT; + report_invalid_record(state, + "there is no contrecord flag at %X/%X", + LSN_FORMAT_ARGS(RecPtr)); + goto err; } - /* fall through */ - case XLREAD_FIRST_FRAGMENT: + /* + * Cross-check that xlp_rem_len agrees with how much of the record + * we expect there to be left. + */ + if (pageHeader->xlp_rem_len == 0 || + total_len != (pageHeader->xlp_rem_len + gotlen)) { - uint32 total_len = state->recordRemainLen; - uint32 request_len; - uint32 record_len; - XLogRecPtr targetPagePtr; - uint32 targetRecOff; - - Assert(state->decoding); - - /* - * Wait for the rest of the record on the first page to become - * available - */ - targetPagePtr = - state->DecodeRecPtr - (state->DecodeRecPtr % XLOG_BLCKSZ); - targetRecOff = state->DecodeRecPtr % XLOG_BLCKSZ; - - request_len = Min(targetRecOff + total_len, XLOG_BLCKSZ); - record_len = request_len - targetRecOff; - - /* ReadRecPtr contains page header */ - Assert(targetRecOff != 0); - if (XLogNeedData(state, targetPagePtr, request_len, true)) - return XLREAD_NEED_DATA; - - /* error out if caller supplied bogus page */ - if (!state->page_verified) - goto err; - - prec = (XLogRecord *) (state->readBuf + targetRecOff); - - /* validate record header if not yet */ - if (!state->record_verified && record_len >= SizeOfXLogRecord) - { - if (!ValidXLogRecordHeader(state, state->DecodeRecPtr, - state->PrevRecPtr, prec)) - goto err; - - state->record_verified = true; - } - + report_invalid_record(state, + "invalid contrecord length %u (expected %lld) at %X/%X", + pageHeader->xlp_rem_len, + ((long long) total_len) - gotlen, + LSN_FORMAT_ARGS(RecPtr)); + goto err; + } - if (total_len == record_len) - { - /* Record does not cross a page boundary */ - Assert(state->record_verified); + /* Append the continuation from this page to the buffer */ + pageHeaderSize = XLogPageHeaderSize(pageHeader); - if (!ValidXLogRecord(state, prec, state->DecodeRecPtr)) - goto err; + if (readOff < pageHeaderSize) + readOff = ReadPageInternal(state, targetPagePtr, + pageHeaderSize); - state->record_verified = true; /* to be tidy */ + Assert(pageHeaderSize <= readOff); - /* We already checked the header earlier */ - state->NextRecPtr = state->DecodeRecPtr + MAXALIGN(record_len); + contdata = (char *) state->readBuf + pageHeaderSize; + len = XLOG_BLCKSZ - pageHeaderSize; + if (pageHeader->xlp_rem_len < len) + len = pageHeader->xlp_rem_len; - record = prec; - state->readRecordState = XLREAD_NEXT_RECORD; - break; - } + if (readOff < pageHeaderSize + len) + readOff = ReadPageInternal(state, targetPagePtr, + pageHeaderSize + len); - /* - * The record continues on the next page. Need to reassemble - * record - */ - Assert(total_len > record_len); + memcpy(buffer, (char *) contdata, len); + buffer += len; + gotlen += len; - /* Enlarge readRecordBuf as needed. */ - if (total_len > state->readRecordBufSize && - !allocate_recordbuf(state, total_len)) - { - /* We treat this as a "bogus data" condition */ - report_invalid_record(state, - "record length %u at %X/%X too long", - total_len, - LSN_FORMAT_ARGS(state->DecodeRecPtr)); + /* If we just reassembled the record header, validate it. */ + if (!gotheader) + { + record = (XLogRecord *) state->readRecordBuf; + if (!ValidXLogRecordHeader(state, RecPtr, state->ReadRecPtr, + record, randAccess)) goto err; - } - - /* Copy the first fragment of the record from the first page. */ - memcpy(state->readRecordBuf, state->readBuf + targetRecOff, - record_len); - state->recordGotLen += record_len; - state->recordRemainLen -= record_len; - - /* Calculate pointer to beginning of next page */ - state->recordContRecPtr = state->DecodeRecPtr + record_len; - Assert(state->recordContRecPtr % XLOG_BLCKSZ == 0); - - state->readRecordState = XLREAD_CONTINUATION; + gotheader = true; } - /* fall through */ + } while (gotlen < total_len); - case XLREAD_CONTINUATION: - { - XLogPageHeader pageHeader = NULL; - uint32 pageHeaderSize; - XLogRecPtr targetPagePtr = InvalidXLogRecPtr; + Assert(gotheader); - /* - * we enter this state only if we haven't read the whole - * record. - */ - Assert(state->decoding); - Assert(state->recordRemainLen > 0); - - while (state->recordRemainLen > 0) - { - char *contdata; - uint32 request_len PG_USED_FOR_ASSERTS_ONLY; - uint32 record_len; - - /* Wait for the next page to become available */ - targetPagePtr = state->recordContRecPtr; - - /* this request contains page header */ - Assert(targetPagePtr != 0); - if (XLogNeedData(state, targetPagePtr, - Min(state->recordRemainLen, XLOG_BLCKSZ), - false)) - return XLREAD_NEED_DATA; - - if (!state->page_verified) - goto err_continue; - - Assert(SizeOfXLogShortPHD <= state->readLen); - - /* Check that the continuation on next page looks valid */ - pageHeader = (XLogPageHeader) state->readBuf; - if (!(pageHeader->xlp_info & XLP_FIRST_IS_CONTRECORD)) - { - report_invalid_record( - state, - "there is no contrecord flag at %X/%X reading %X/%X", - LSN_FORMAT_ARGS(state->recordContRecPtr), - LSN_FORMAT_ARGS(state->DecodeRecPtr)); - goto err; - } - - /* - * Cross-check that xlp_rem_len agrees with how much of - * the record we expect there to be left. - */ - if (pageHeader->xlp_rem_len == 0 || - pageHeader->xlp_rem_len != state->recordRemainLen) - { - report_invalid_record( - state, - "invalid contrecord length %u at %X/%X reading %X/%X, expected %u", - pageHeader->xlp_rem_len, - LSN_FORMAT_ARGS(state->recordContRecPtr), - LSN_FORMAT_ARGS(state->DecodeRecPtr), - state->recordRemainLen); - goto err; - } - - /* Append the continuation from this page to the buffer */ - pageHeaderSize = XLogPageHeaderSize(pageHeader); - - /* - * XLogNeedData should have ensured that the whole page - * header was read - */ - Assert(pageHeaderSize <= state->readLen); - - contdata = (char *) state->readBuf + pageHeaderSize; - record_len = XLOG_BLCKSZ - pageHeaderSize; - if (pageHeader->xlp_rem_len < record_len) - record_len = pageHeader->xlp_rem_len; - - request_len = record_len + pageHeaderSize; - - /* - * XLogNeedData should have ensured all needed data was - * read - */ - Assert(request_len <= state->readLen); - - memcpy(state->readRecordBuf + state->recordGotLen, - (char *) contdata, record_len); - state->recordGotLen += record_len; - state->recordRemainLen -= record_len; - - /* If we just reassembled the record header, validate it. */ - if (!state->record_verified) - { - Assert(state->recordGotLen >= SizeOfXLogRecord); - if (!ValidXLogRecordHeader(state, state->DecodeRecPtr, - state->PrevRecPtr, - (XLogRecord *) state->readRecordBuf)) - goto err; - - state->record_verified = true; - } - - /* - * Calculate pointer to beginning of next page, and - * continue - */ - state->recordContRecPtr += XLOG_BLCKSZ; - } + record = (XLogRecord *) state->readRecordBuf; + if (!ValidXLogRecord(state, record, RecPtr)) + goto err; - /* targetPagePtr is pointing the last-read page here */ - prec = (XLogRecord *) state->readRecordBuf; - if (!ValidXLogRecord(state, prec, state->DecodeRecPtr)) - goto err; + pageHeaderSize = XLogPageHeaderSize((XLogPageHeader) state->readBuf); + state->ReadRecPtr = RecPtr; + state->EndRecPtr = targetPagePtr + pageHeaderSize + + MAXALIGN(pageHeader->xlp_rem_len); + } + else + { + /* Wait for the record data to become available */ + readOff = ReadPageInternal(state, targetPagePtr, + Min(targetRecOff + total_len, XLOG_BLCKSZ)); + if (readOff < 0) + goto err; - pageHeaderSize = - XLogPageHeaderSize((XLogPageHeader) state->readBuf); - state->NextRecPtr = targetPagePtr + pageHeaderSize - + MAXALIGN(pageHeader->xlp_rem_len); + /* Record does not cross a page boundary */ + if (!ValidXLogRecord(state, record, RecPtr)) + goto err; - record = prec; - state->readRecordState = XLREAD_NEXT_RECORD; + state->EndRecPtr = RecPtr + MAXALIGN(total_len); - break; - } + state->ReadRecPtr = RecPtr; } /* @@ -1059,195 +538,133 @@ XLogDecodeOneRecord(XLogReaderState *state, bool allow_oversized) (record->xl_info & ~XLR_INFO_MASK) == XLOG_SWITCH) { /* Pretend it extends to end of segment */ - state->NextRecPtr += state->segcxt.ws_segsize - 1; - state->NextRecPtr -= XLogSegmentOffset(state->NextRecPtr, state->segcxt.ws_segsize); + state->EndRecPtr += state->segcxt.ws_segsize - 1; + state->EndRecPtr -= XLogSegmentOffset(state->EndRecPtr, state->segcxt.ws_segsize); } - Assert(!record || state->readLen >= 0); - if (DecodeXLogRecord(state, state->decoding, record, state->DecodeRecPtr, &errormsg)) - { - /* Record the location of the next record. */ - state->decoding->next_lsn = state->NextRecPtr; - - /* - * If it's in the decode buffer (not an "oversized" record allocated - * with palloc()), mark the decode buffer space as occupied. - */ - if (!state->decoding->oversized) - { - /* The new decode buffer head must be MAXALIGNed. */ - Assert(state->decoding->size == MAXALIGN(state->decoding->size)); - if ((char *) state->decoding == state->decode_buffer) - state->decode_buffer_head = state->decode_buffer + - state->decoding->size; - else - state->decode_buffer_head += state->decoding->size; - } - - /* Insert it into the queue of decoded records. */ - Assert(state->decode_queue_head != state->decoding); - if (state->decode_queue_head) - state->decode_queue_head->next = state->decoding; - state->decode_queue_head = state->decoding; - if (!state->decode_queue_tail) - state->decode_queue_tail = state->decoding; - state->decoding = NULL; - - return XLREAD_SUCCESS; - } + if (DecodeXLogRecord(state, record, errormsg)) + return record; + else + return NULL; err: - if (state->decoding && state->decoding->oversized) - pfree(state->decoding); - state->decoding = NULL; -err_continue: /* - * Invalidate the read page. We might read from a different source after + * Invalidate the read state. We might read from a different source after * failure. */ XLogReaderInvalReadState(state); - /* - * If an error was written to errmsg_buf, it'll be returned to the caller - * of XLogReadRecord() after all successfully decoded records from the - * read queue. - */ + if (state->errormsg_buf[0] != '\0') + *errormsg = state->errormsg_buf; - return XLREAD_FAIL; + return NULL; } /* - * Checks that an xlog page loaded in state->readBuf is including at least - * [pageptr, reqLen] and the page is valid. header_inclusive indicates that - * reqLen is calculated including page header length. - * - * Returns false if the buffer already contains the requested data, or found - * error. state->page_verified is set to true for the former and false for the - * latter. + * Read a single xlog page including at least [pageptr, reqLen] of valid data + * via the page_read() callback. * - * Otherwise returns true and requests data loaded onto state->readBuf by - * state->readPagePtr and state->readLen. The caller shall call this function - * again after filling the buffer at least with that portion of data and set - * state->readLen to the length of actually loaded data. + * Returns -1 if the required page cannot be read for some reason; errormsg_buf + * is set in that case (unless the error occurs in the page_read callback). * - * If header_inclusive is false, corrects reqLen internally by adding the - * actual page header length and may request caller for new data. + * We fetch the page from a reader-local cache if we know we have the required + * data and if there hasn't been any error since caching the data. */ -static bool -XLogNeedData(XLogReaderState *state, XLogRecPtr pageptr, int reqLen, - bool header_inclusive) +static int +ReadPageInternal(XLogReaderState *state, XLogRecPtr pageptr, int reqLen) { + int readLen; uint32 targetPageOff; XLogSegNo targetSegNo; - uint32 addLen = 0; + XLogPageHeader hdr; - /* Some data is loaded, but page header is not verified yet. */ - if (!state->page_verified && - !XLogRecPtrIsInvalid(state->readPagePtr) && state->readLen >= 0) - { - uint32 pageHeaderSize; - - /* just loaded new data so needs to verify page header */ - - /* The caller must have loaded at least page header */ - Assert(state->readLen >= SizeOfXLogShortPHD); + Assert((pageptr % XLOG_BLCKSZ) == 0); - /* - * We have enough data to check the header length. Recheck the loaded - * length against the actual header length. - */ - pageHeaderSize = XLogPageHeaderSize((XLogPageHeader) state->readBuf); + XLByteToSeg(pageptr, targetSegNo, state->segcxt.ws_segsize); + targetPageOff = XLogSegmentOffset(pageptr, state->segcxt.ws_segsize); - /* Request more data if we don't have the full header. */ - if (state->readLen < pageHeaderSize) - { - state->reqLen = pageHeaderSize; - return true; - } + /* check whether we have all the requested data already */ + if (targetSegNo == state->seg.ws_segno && + targetPageOff == state->segoff && reqLen <= state->readLen) + return state->readLen; - /* Now that we know we have the full header, validate it. */ - if (!XLogReaderValidatePageHeader(state, state->readPagePtr, - (char *) state->readBuf)) - { - /* That's bad. Force reading the page again. */ - XLogReaderInvalReadState(state); + /* + * Data is not in our buffer. + * + * Every time we actually read the segment, even if we looked at parts of + * it before, we need to do verification as the page_read callback might + * now be rereading data from a different source. + * + * Whenever switching to a new WAL segment, we read the first page of the + * file and validate its header, even if that's not where the target + * record is. This is so that we can check the additional identification + * info that is present in the first page's "long" header. + */ + if (targetSegNo != state->seg.ws_segno && targetPageOff != 0) + { + XLogRecPtr targetSegmentPtr = pageptr - targetPageOff; - return false; - } + readLen = state->routine.page_read(state, targetSegmentPtr, XLOG_BLCKSZ, + state->currRecPtr, + state->readBuf); + if (readLen < 0) + goto err; - state->page_verified = true; + /* we can be sure to have enough WAL available, we scrolled back */ + Assert(readLen == XLOG_BLCKSZ); - XLByteToSeg(state->readPagePtr, state->seg.ws_segno, - state->segcxt.ws_segsize); + if (!XLogReaderValidatePageHeader(state, targetSegmentPtr, + state->readBuf)) + goto err; } /* - * The loaded page may not be the one caller is supposing to read when we - * are verifying the first page of new segment. In that case, skip further - * verification and immediately load the target page. + * First, read the requested data length, but at least a short page header + * so that we can validate it. */ - if (state->page_verified && pageptr == state->readPagePtr) - { - /* - * calculate additional length for page header keeping the total - * length within the block size. - */ - if (!header_inclusive) - { - uint32 pageHeaderSize = - XLogPageHeaderSize((XLogPageHeader) state->readBuf); + readLen = state->routine.page_read(state, pageptr, Max(reqLen, SizeOfXLogShortPHD), + state->currRecPtr, + state->readBuf); + if (readLen < 0) + goto err; - addLen = pageHeaderSize; - if (reqLen + pageHeaderSize <= XLOG_BLCKSZ) - addLen = pageHeaderSize; - else - addLen = XLOG_BLCKSZ - reqLen; - } + Assert(readLen <= XLOG_BLCKSZ); - /* Return if we already have it. */ - if (reqLen + addLen <= state->readLen) - return false; - } + /* Do we have enough data to check the header length? */ + if (readLen <= SizeOfXLogShortPHD) + goto err; - /* Data is not in our buffer, request the caller for it. */ - XLByteToSeg(pageptr, targetSegNo, state->segcxt.ws_segsize); - targetPageOff = XLogSegmentOffset(pageptr, state->segcxt.ws_segsize); - Assert((pageptr % XLOG_BLCKSZ) == 0); + Assert(readLen >= reqLen); - /* - * Every time we request to load new data of a page to the caller, even if - * we looked at a part of it before, we need to do verification on the - * next invocation as the caller might now be rereading data from a - * different source. - */ - state->page_verified = false; + hdr = (XLogPageHeader) state->readBuf; - /* - * Whenever switching to a new WAL segment, we read the first page of the - * file and validate its header, even if that's not where the target - * record is. This is so that we can check the additional identification - * info that is present in the first page's "long" header. Don't do this - * if the caller requested the first page in the segment. - */ - if (targetSegNo != state->seg.ws_segno && targetPageOff != 0) + /* still not enough */ + if (readLen < XLogPageHeaderSize(hdr)) { - /* - * Then we'll see that the targetSegNo now matches the ws_segno, and - * will not come back here, but will request the actual target page. - */ - state->readPagePtr = pageptr - targetPageOff; - state->reqLen = XLOG_BLCKSZ; - return true; + readLen = state->routine.page_read(state, pageptr, XLogPageHeaderSize(hdr), + state->currRecPtr, + state->readBuf); + if (readLen < 0) + goto err; } /* - * Request the caller to load the page. We need at least a short page - * header so that we can validate it. + * Now that we know we have the full header, validate it. */ - state->readPagePtr = pageptr; - state->reqLen = Max(reqLen + addLen, SizeOfXLogShortPHD); - return true; + if (!XLogReaderValidatePageHeader(state, pageptr, (char *) hdr)) + goto err; + + /* update read state information */ + state->seg.ws_segno = targetSegNo; + state->segoff = targetPageOff; + state->readLen = readLen; + + return readLen; + +err: + XLogReaderInvalReadState(state); + return -1; } /* @@ -1256,7 +673,9 @@ XLogNeedData(XLogReaderState *state, XLogRecPtr pageptr, int reqLen, static void XLogReaderInvalReadState(XLogReaderState *state) { - state->readPagePtr = InvalidXLogRecPtr; + state->seg.ws_segno = 0; + state->segoff = 0; + state->readLen = 0; } /* @@ -1264,12 +683,11 @@ XLogReaderInvalReadState(XLogReaderState *state) * * This is just a convenience subroutine to avoid duplicated code in * XLogReadRecord. It's not intended for use from anywhere else. - * - * If PrevRecPtr is valid, the xl_prev is is cross-checked with it. */ static bool ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr, - XLogRecPtr PrevRecPtr, XLogRecord *record) + XLogRecPtr PrevRecPtr, XLogRecord *record, + bool randAccess) { if (record->xl_tot_len < SizeOfXLogRecord) { @@ -1286,7 +704,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr, record->xl_rmid, LSN_FORMAT_ARGS(RecPtr)); return false; } - if (PrevRecPtr == InvalidXLogRecPtr) + if (randAccess) { /* * We can't exactly verify the prev-link, but surely it should be less @@ -1504,22 +922,6 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, * here. */ -XLogFindNextRecordState * -InitXLogFindNextRecord(XLogReaderState *reader_state, XLogRecPtr start_ptr) -{ - XLogFindNextRecordState *state = (XLogFindNextRecordState *) - palloc_extended(sizeof(XLogFindNextRecordState), - MCXT_ALLOC_NO_OOM | MCXT_ALLOC_ZERO); - if (!state) - return NULL; - - state->reader_state = reader_state; - state->targetRecPtr = start_ptr; - state->currRecPtr = start_ptr; - - return state; -} - /* * Find the first record with an lsn >= RecPtr. * @@ -1531,25 +933,27 @@ InitXLogFindNextRecord(XLogReaderState *reader_state, XLogRecPtr start_ptr) * This positions the reader, like XLogBeginRead(), so that the next call to * XLogReadRecord() will read the next valid record. */ -bool -XLogFindNextRecord(XLogFindNextRecordState *state) +XLogRecPtr +XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) { + XLogRecPtr tmpRecPtr; + XLogRecPtr found = InvalidXLogRecPtr; XLogPageHeader header; - XLogRecord *record; - XLogReadRecordResult result; char *errormsg; - Assert(!XLogRecPtrIsInvalid(state->currRecPtr)); + Assert(!XLogRecPtrIsInvalid(RecPtr)); /* * skip over potential continuation data, keeping in mind that it may span * multiple pages */ + tmpRecPtr = RecPtr; while (true) { XLogRecPtr targetPagePtr; int targetRecOff; uint32 pageHeaderSize; + int readLen; /* * Compute targetRecOff. It should typically be equal or greater than @@ -1557,27 +961,27 @@ XLogFindNextRecord(XLogFindNextRecordState *state) * that, except when caller has explicitly specified the offset that * falls somewhere there or when we are skipping multi-page * continuation record. It doesn't matter though because - * XLogNeedData() is prepared to handle that and will read at least - * short page-header worth of data + * ReadPageInternal() is prepared to handle that and will read at + * least short page-header worth of data */ - targetRecOff = state->currRecPtr % XLOG_BLCKSZ; + targetRecOff = tmpRecPtr % XLOG_BLCKSZ; /* scroll back to page boundary */ - targetPagePtr = state->currRecPtr - targetRecOff; + targetPagePtr = tmpRecPtr - targetRecOff; - if (XLogNeedData(state->reader_state, targetPagePtr, targetRecOff, - targetRecOff != 0)) - return true; - - if (!state->reader_state->page_verified) + /* Read the page containing the record */ + readLen = ReadPageInternal(state, targetPagePtr, targetRecOff); + if (readLen < 0) goto err; - header = (XLogPageHeader) state->reader_state->readBuf; + header = (XLogPageHeader) state->readBuf; pageHeaderSize = XLogPageHeaderSize(header); - /* we should have read the page header */ - Assert(state->reader_state->readLen >= pageHeaderSize); + /* make sure we have enough data for the page header */ + readLen = ReadPageInternal(state, targetPagePtr, pageHeaderSize); + if (readLen < 0) + goto err; /* skip over potential continuation data */ if (header->xlp_info & XLP_FIRST_IS_CONTRECORD) @@ -1592,21 +996,21 @@ XLogFindNextRecord(XLogFindNextRecordState *state) * Note that record headers are MAXALIGN'ed */ if (MAXALIGN(header->xlp_rem_len) >= (XLOG_BLCKSZ - pageHeaderSize)) - state->currRecPtr = targetPagePtr + XLOG_BLCKSZ; + tmpRecPtr = targetPagePtr + XLOG_BLCKSZ; else { /* * The previous continuation record ends in this page. Set - * state->currRecPtr to point to the first valid record + * tmpRecPtr to point to the first valid record */ - state->currRecPtr = targetPagePtr + pageHeaderSize + tmpRecPtr = targetPagePtr + pageHeaderSize + MAXALIGN(header->xlp_rem_len); break; } } else { - state->currRecPtr = targetPagePtr + pageHeaderSize; + tmpRecPtr = targetPagePtr + pageHeaderSize; break; } } @@ -1616,36 +1020,31 @@ XLogFindNextRecord(XLogFindNextRecordState *state) * because either we're at the first record after the beginning of a page * or we just jumped over the remaining data of a continuation. */ - XLogBeginRead(state->reader_state, state->currRecPtr); - while ((result = XLogReadRecord(state->reader_state, &record, &errormsg)) != - XLREAD_FAIL) + XLogBeginRead(state, tmpRecPtr); + while (XLogReadRecord(state, &errormsg) != NULL) { - if (result == XLREAD_NEED_DATA) - return true; - /* past the record we've found, break out */ - if (state->targetRecPtr <= state->reader_state->ReadRecPtr) + if (RecPtr <= state->ReadRecPtr) { /* Rewind the reader to the beginning of the last record. */ - state->currRecPtr = state->reader_state->ReadRecPtr; - XLogBeginRead(state->reader_state, state->currRecPtr); - return false; + found = state->ReadRecPtr; + XLogBeginRead(state, found); + return found; } } err: - XLogReaderInvalReadState(state->reader_state); + XLogReaderInvalReadState(state); - state->currRecPtr = InvalidXLogRecPtr;; - return false; + return InvalidXLogRecPtr; } #endif /* FRONTEND */ /* - * Helper function to ease writing of routines that read raw WAL data. - * If this function is used, caller must supply a segment_open callback and - * segment_close callback as that is used here. + * Helper function to ease writing of XLogRoutine->page_read callbacks. + * If this function is used, caller must supply a segment_open callback in + * 'state', as that is used here. * * Read 'count' bytes into 'buf', starting at location 'startptr', from WAL * fetched from timeline 'tli'. @@ -1658,7 +1057,6 @@ XLogFindNextRecord(XLogFindNextRecordState *state) */ bool WALRead(XLogReaderState *state, - WALSegmentOpenCB segopenfn, WALSegmentCloseCB segclosefn, char *buf, XLogRecPtr startptr, Size count, TimeLineID tli, WALReadError *errinfo) { @@ -1690,10 +1088,10 @@ WALRead(XLogReaderState *state, XLogSegNo nextSegNo; if (state->seg.ws_file >= 0) - segclosefn(state); + state->routine.segment_close(state); XLByteToSeg(recptr, nextSegNo, state->segcxt.ws_segsize); - segopenfn(state, nextSegNo, &tli); + state->routine.segment_open(state, nextSegNo, &tli); /* This shouldn't happen -- indicates a bug in segment_open */ Assert(state->seg.ws_file >= 0); @@ -1745,84 +1143,34 @@ WALRead(XLogReaderState *state, * ---------------------------------------- */ -/* - * Private function to reset the state, forgetting all decoded records, if we - * are asked to move to a new read position. - */ +/* private function to reset the state between records */ static void ResetDecoder(XLogReaderState *state) { - DecodedXLogRecord *r; + int block_id; - /* Reset the decoded record queue, freeing any oversized records. */ - while ((r = state->decode_queue_tail)) - { - state->decode_queue_tail = r->next; - if (r->oversized) - pfree(r); - } - state->decode_queue_head = NULL; - state->decode_queue_tail = NULL; - state->record = NULL; - state->decoding = NULL; - - /* Reset the decode buffer to empty. */ - state->decode_buffer_head = state->decode_buffer; - state->decode_buffer_tail = state->decode_buffer; + state->decoded_record = NULL; - /* Clear error state. */ - state->errormsg_buf[0] = '\0'; - state->errormsg_deferred = false; -} + state->main_data_len = 0; -/* - * Compute the maximum possible amount of padding that could be required to - * decode a record, given xl_tot_len from the record's header. This is the - * amount of output buffer space that we need to decode a record, though we - * might not finish up using it all. - * - * This computation is pessimistic and assumes the maximum possible number of - * blocks, due to lack of better information. - */ -size_t -DecodeXLogRecordRequiredSpace(size_t xl_tot_len) -{ - size_t size = 0; - - /* Account for the fixed size part of the decoded record struct. */ - size += offsetof(DecodedXLogRecord, blocks[0]); - /* Account for the flexible blocks array of maximum possible size. */ - size += sizeof(DecodedBkpBlock) * (XLR_MAX_BLOCK_ID + 1); - /* Account for all the raw main and block data. */ - size += xl_tot_len; - /* We might insert padding before main_data. */ - size += (MAXIMUM_ALIGNOF - 1); - /* We might insert padding before each block's data. */ - size += (MAXIMUM_ALIGNOF - 1) * (XLR_MAX_BLOCK_ID + 1); - /* We might insert padding at the end. */ - size += (MAXIMUM_ALIGNOF - 1); - - return size; + for (block_id = 0; block_id <= state->max_block_id; block_id++) + { + state->blocks[block_id].in_use = false; + state->blocks[block_id].has_image = false; + state->blocks[block_id].has_data = false; + state->blocks[block_id].apply_image = false; + } + state->max_block_id = -1; } /* - * Decode a record. "decoded" must point to a MAXALIGNed memory area that has - * space for at least DecodeXLogRecordRequiredSpace(record) bytes. On - * success, decoded->size contains the actual space occupied by the decoded - * record, which may turn out to be less. - * - * Only decoded->oversized member must be initialized already, and will not be - * modified. Other members will be initialized as required. + * Decode the previously read record. * * On error, a human-readable error message is returned in *errormsg, and * the return value is false. */ bool -DecodeXLogRecord(XLogReaderState *state, - DecodedXLogRecord *decoded, - XLogRecord *record, - XLogRecPtr lsn, - char **errormsg) +DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg) { /* * read next _size bytes from record buffer, but check for overrun first. @@ -1837,20 +1185,17 @@ DecodeXLogRecord(XLogReaderState *state, } while(0) char *ptr; - char *out; uint32 remaining; uint32 datatotal; RelFileNode *rnode = NULL; uint8 block_id; - decoded->header = *record; - decoded->lsn = lsn; - decoded->next = NULL; - decoded->record_origin = InvalidRepOriginId; - decoded->toplevel_xid = InvalidTransactionId; - decoded->main_data = NULL; - decoded->main_data_len = 0; - decoded->max_block_id = -1; + ResetDecoder(state); + + state->decoded_record = record; + state->record_origin = InvalidRepOriginId; + state->toplevel_xid = InvalidTransactionId; + ptr = (char *) record; ptr += SizeOfXLogRecord; remaining = record->xl_tot_len - SizeOfXLogRecord; @@ -1868,7 +1213,7 @@ DecodeXLogRecord(XLogReaderState *state, COPY_HEADER_FIELD(&main_data_len, sizeof(uint8)); - decoded->main_data_len = main_data_len; + state->main_data_len = main_data_len; datatotal += main_data_len; break; /* by convention, the main data fragment is * always last */ @@ -1879,18 +1224,18 @@ DecodeXLogRecord(XLogReaderState *state, uint32 main_data_len; COPY_HEADER_FIELD(&main_data_len, sizeof(uint32)); - decoded->main_data_len = main_data_len; + state->main_data_len = main_data_len; datatotal += main_data_len; break; /* by convention, the main data fragment is * always last */ } else if (block_id == XLR_BLOCK_ID_ORIGIN) { - COPY_HEADER_FIELD(&decoded->record_origin, sizeof(RepOriginId)); + COPY_HEADER_FIELD(&state->record_origin, sizeof(RepOriginId)); } else if (block_id == XLR_BLOCK_ID_TOPLEVEL_XID) { - COPY_HEADER_FIELD(&decoded->toplevel_xid, sizeof(TransactionId)); + COPY_HEADER_FIELD(&state->toplevel_xid, sizeof(TransactionId)); } else if (block_id <= XLR_MAX_BLOCK_ID) { @@ -1898,11 +1243,7 @@ DecodeXLogRecord(XLogReaderState *state, DecodedBkpBlock *blk; uint8 fork_flags; - /* mark any intervening block IDs as not in use */ - for (int i = decoded->max_block_id + 1; i < block_id; ++i) - decoded->blocks[i].in_use = false; - - if (block_id <= decoded->max_block_id) + if (block_id <= state->max_block_id) { report_invalid_record(state, "out-of-order block_id %u at %X/%X", @@ -1910,9 +1251,9 @@ DecodeXLogRecord(XLogReaderState *state, LSN_FORMAT_ARGS(state->ReadRecPtr)); goto err; } - decoded->max_block_id = block_id; + state->max_block_id = block_id; - blk = &decoded->blocks[block_id]; + blk = &state->blocks[block_id]; blk->in_use = true; blk->apply_image = false; @@ -1922,8 +1263,6 @@ DecodeXLogRecord(XLogReaderState *state, blk->has_image = ((fork_flags & BKPBLOCK_HAS_IMAGE) != 0); blk->has_data = ((fork_flags & BKPBLOCK_HAS_DATA) != 0); - blk->recent_buffer = InvalidBuffer; - COPY_HEADER_FIELD(&blk->data_len, sizeof(uint16)); /* cross-check that the HAS_DATA flag is set iff data_length > 0 */ if (blk->has_data && blk->data_len == 0) @@ -2058,18 +1397,17 @@ DecodeXLogRecord(XLogReaderState *state, /* * Ok, we've parsed the fragment headers, and verified that the total * length of the payload in the fragments is equal to the amount of data - * left. Copy the data of each fragment to contiguous space after the - * blocks array, inserting alignment padding before the data fragments so - * they can be cast to struct pointers by REDO routines. + * left. Copy the data of each fragment to a separate buffer. + * + * We could just set up pointers into readRecordBuf, but we want to align + * the data for the convenience of the callers. Backup images are not + * copied, however; they don't need alignment. */ - out = ((char *) decoded) + - offsetof(DecodedXLogRecord, blocks) + - sizeof(decoded->blocks[0]) * (decoded->max_block_id + 1); /* block data first */ - for (block_id = 0; block_id <= decoded->max_block_id; block_id++) + for (block_id = 0; block_id <= state->max_block_id; block_id++) { - DecodedBkpBlock *blk = &decoded->blocks[block_id]; + DecodedBkpBlock *blk = &state->blocks[block_id]; if (!blk->in_use) continue; @@ -2078,36 +1416,57 @@ DecodeXLogRecord(XLogReaderState *state, if (blk->has_image) { - /* no need to align image */ - blk->bkp_image = out; - memcpy(out, ptr, blk->bimg_len); + blk->bkp_image = ptr; ptr += blk->bimg_len; - out += blk->bimg_len; } if (blk->has_data) { - out = (char *) MAXALIGN(out); - blk->data = out; + if (!blk->data || blk->data_len > blk->data_bufsz) + { + if (blk->data) + pfree(blk->data); + + /* + * Force the initial request to be BLCKSZ so that we don't + * waste time with lots of trips through this stanza as a + * result of WAL compression. + */ + blk->data_bufsz = MAXALIGN(Max(blk->data_len, BLCKSZ)); + blk->data = palloc(blk->data_bufsz); + } memcpy(blk->data, ptr, blk->data_len); ptr += blk->data_len; - out += blk->data_len; } } /* and finally, the main data */ - if (decoded->main_data_len > 0) + if (state->main_data_len > 0) { - out = (char *) MAXALIGN(out); - decoded->main_data = out; - memcpy(decoded->main_data, ptr, decoded->main_data_len); - ptr += decoded->main_data_len; - out += decoded->main_data_len; - } + if (!state->main_data || state->main_data_len > state->main_data_bufsz) + { + if (state->main_data) + pfree(state->main_data); - /* Report the actual size we used. */ - decoded->size = MAXALIGN(out - (char *) decoded); - Assert(DecodeXLogRecordRequiredSpace(record->xl_tot_len) >= - decoded->size); + /* + * main_data_bufsz must be MAXALIGN'ed. In many xlog record + * types, we omit trailing struct padding on-disk to save a few + * bytes; but compilers may generate accesses to the xlog struct + * that assume that padding bytes are present. If the palloc + * request is not large enough to include such padding bytes then + * we'll get valgrind complaints due to otherwise-harmless fetches + * of the padding bytes. + * + * In addition, force the initial request to be reasonably large + * so that we don't waste time with lots of trips through this + * stanza. BLCKSZ / 2 seems like a good compromise choice. + */ + state->main_data_bufsz = MAXALIGN(Max(state->main_data_len, + BLCKSZ / 2)); + state->main_data = palloc(state->main_data_bufsz); + } + memcpy(state->main_data, ptr, state->main_data_len); + ptr += state->main_data_len; + } return true; @@ -2131,31 +1490,19 @@ DecodeXLogRecord(XLogReaderState *state, bool XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id, RelFileNode *rnode, ForkNumber *forknum, BlockNumber *blknum) -{ - return XLogRecGetRecentBuffer(record, block_id, rnode, forknum, blknum, - NULL); -} - -bool -XLogRecGetRecentBuffer(XLogReaderState *record, uint8 block_id, - RelFileNode *rnode, ForkNumber *forknum, - BlockNumber *blknum, Buffer *recent_buffer) { DecodedBkpBlock *bkpb; - if (block_id > record->record->max_block_id || - !record->record->blocks[block_id].in_use) + if (!record->blocks[block_id].in_use) return false; - bkpb = &record->record->blocks[block_id]; + bkpb = &record->blocks[block_id]; if (rnode) *rnode = bkpb->rnode; if (forknum) *forknum = bkpb->forknum; if (blknum) *blknum = bkpb->blkno; - if (recent_buffer) - *recent_buffer = bkpb->recent_buffer; return true; } @@ -2169,11 +1516,10 @@ XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len) { DecodedBkpBlock *bkpb; - if (block_id > record->record->max_block_id || - !record->record->blocks[block_id].in_use) + if (!record->blocks[block_id].in_use) return NULL; - bkpb = &record->record->blocks[block_id]; + bkpb = &record->blocks[block_id]; if (!bkpb->has_data) { @@ -2201,13 +1547,12 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page) char *ptr; PGAlignedBlock tmp; - if (block_id > record->record->max_block_id || - !record->record->blocks[block_id].in_use) + if (!record->blocks[block_id].in_use) return false; - if (!record->record->blocks[block_id].has_image) + if (!record->blocks[block_id].has_image) return false; - bkpb = &record->record->blocks[block_id]; + bkpb = &record->blocks[block_id]; ptr = bkpb->bkp_image; if (bkpb->bimg_info & BKPIMAGE_IS_COMPRESSED) diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c index 4d5c9bb08f53a..d17d660f46053 100644 --- a/src/backend/access/transam/xlogutils.c +++ b/src/backend/access/transam/xlogutils.c @@ -335,13 +335,11 @@ XLogReadBufferForRedoExtended(XLogReaderState *record, RelFileNode rnode; ForkNumber forknum; BlockNumber blkno; - Buffer recent_buffer; Page page; bool zeromode; bool willinit; - if (!XLogRecGetRecentBuffer(record, block_id, &rnode, &forknum, &blkno, - &recent_buffer)) + if (!XLogRecGetBlockTag(record, block_id, &rnode, &forknum, &blkno)) { /* Caller specified a bogus block_id */ elog(PANIC, "failed to locate backup block with ID %d", block_id); @@ -352,7 +350,7 @@ XLogReadBufferForRedoExtended(XLogReaderState *record, * going to initialize it. And vice versa. */ zeromode = (mode == RBM_ZERO_AND_LOCK || mode == RBM_ZERO_AND_CLEANUP_LOCK); - willinit = (record->record->blocks[block_id].flags & BKPBLOCK_WILL_INIT) != 0; + willinit = (record->blocks[block_id].flags & BKPBLOCK_WILL_INIT) != 0; if (willinit && !zeromode) elog(PANIC, "block with WILL_INIT flag in WAL record must be zeroed by redo routine"); if (!willinit && zeromode) @@ -363,8 +361,7 @@ XLogReadBufferForRedoExtended(XLogReaderState *record, { Assert(XLogRecHasBlockImage(record, block_id)); *buf = XLogReadBufferExtended(rnode, forknum, blkno, - get_cleanup_lock ? RBM_ZERO_AND_CLEANUP_LOCK : RBM_ZERO_AND_LOCK, - recent_buffer); + get_cleanup_lock ? RBM_ZERO_AND_CLEANUP_LOCK : RBM_ZERO_AND_LOCK); page = BufferGetPage(*buf); if (!RestoreBlockImage(record, block_id, page)) elog(ERROR, "failed to restore block image"); @@ -393,8 +390,7 @@ XLogReadBufferForRedoExtended(XLogReaderState *record, } else { - *buf = XLogReadBufferExtended(rnode, forknum, blkno, mode, - recent_buffer); + *buf = XLogReadBufferExtended(rnode, forknum, blkno, mode); if (BufferIsValid(*buf)) { if (mode != RBM_ZERO_AND_LOCK && mode != RBM_ZERO_AND_CLEANUP_LOCK) @@ -441,8 +437,7 @@ XLogReadBufferForRedoExtended(XLogReaderState *record, */ Buffer XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum, - BlockNumber blkno, ReadBufferMode mode, - Buffer recent_buffer) + BlockNumber blkno, ReadBufferMode mode) { BlockNumber lastblock; Buffer buffer; @@ -450,15 +445,6 @@ XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum, Assert(blkno != P_NEW); - /* Do we have a clue where the buffer might be already? */ - if (BufferIsValid(recent_buffer) && - mode == RBM_NORMAL && - ReadRecentBuffer(rnode, forknum, blkno, recent_buffer)) - { - buffer = recent_buffer; - goto recent_buffer_fast_path; - } - /* Open the relation at smgr level */ smgr = smgropen(rnode, InvalidBackendId); @@ -517,7 +503,6 @@ XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum, } } -recent_buffer_fast_path: if (mode == RBM_NORMAL) { /* check that page has been initialized */ @@ -701,7 +686,8 @@ XLogTruncateRelation(RelFileNode rnode, ForkNumber forkNum, void XLogReadDetermineTimeline(XLogReaderState *state, XLogRecPtr wantPage, uint32 wantLength) { - const XLogRecPtr lastReadPage = state->readPagePtr; + const XLogRecPtr lastReadPage = (state->seg.ws_segno * + state->segcxt.ws_segsize + state->segoff); Assert(wantPage != InvalidXLogRecPtr && wantPage % XLOG_BLCKSZ == 0); Assert(wantLength <= XLOG_BLCKSZ); @@ -716,7 +702,7 @@ XLogReadDetermineTimeline(XLogReaderState *state, XLogRecPtr wantPage, uint32 wa * current TLI has since become historical. */ if (lastReadPage == wantPage && - state->page_verified && + state->readLen != 0 && lastReadPage + state->readLen >= wantPage + Min(wantLength, XLOG_BLCKSZ - 1)) return; @@ -838,12 +824,10 @@ wal_segment_close(XLogReaderState *state) * exists for normal backends, so we have to do a check/sleep/repeat style of * loop for now. */ -bool -read_local_xlog_page(XLogReaderState *state) +int +read_local_xlog_page(XLogReaderState *state, XLogRecPtr targetPagePtr, + int reqLen, XLogRecPtr targetRecPtr, char *cur_page) { - XLogRecPtr targetPagePtr = state->readPagePtr; - int reqLen = state->reqLen; - char *cur_page = state->readBuf; XLogRecPtr read_upto, loc; TimeLineID tli; @@ -942,8 +926,7 @@ read_local_xlog_page(XLogReaderState *state) else if (targetPagePtr + reqLen > read_upto) { /* not enough data there */ - XLogReaderSetInputData(state, -1); - return false; + return -1; } else { @@ -956,14 +939,12 @@ read_local_xlog_page(XLogReaderState *state) * as 'count', read the whole page anyway. It's guaranteed to be * zero-padded up to the page boundary if it's incomplete. */ - if (!WALRead(state, wal_segment_open, wal_segment_close, - cur_page, targetPagePtr, XLOG_BLCKSZ, tli, &errinfo)) + if (!WALRead(state, cur_page, targetPagePtr, XLOG_BLCKSZ, tli, + &errinfo)) WALReadRaiseError(&errinfo); /* number of valid bytes in the buffer */ - state->readPagePtr = targetPagePtr; - XLogReaderSetInputData(state, count); - return true; + return count; } /* diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 08f95c43cae77..5c84d758bb617 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -899,20 +899,6 @@ CREATE VIEW pg_stat_wal_receiver AS FROM pg_stat_get_wal_receiver() s WHERE s.pid IS NOT NULL; -CREATE VIEW pg_stat_prefetch_recovery AS - SELECT - s.stats_reset, - s.prefetch, - s.skip_hit, - s.skip_new, - s.skip_fpw, - s.skip_seq, - s.distance, - s.queue_depth, - s.avg_distance, - s.avg_queue_depth - FROM pg_stat_get_prefetch_recovery() s; - CREATE VIEW pg_stat_subscription AS SELECT su.oid AS subid, diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index ba335fd342991..e94f5f55c7859 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -38,7 +38,6 @@ #include "access/transam.h" #include "access/twophase_rmgr.h" #include "access/xact.h" -#include "access/xlogprefetch.h" #include "catalog/partition.h" #include "catalog/pg_database.h" #include "catalog/pg_proc.h" @@ -280,7 +279,6 @@ static PgStat_GlobalStats globalStats; static PgStat_WalStats walStats; static PgStat_SLRUStats slruStats[SLRU_NUM_ELEMENTS]; static HTAB *replSlotStatHash = NULL; -static PgStat_RecoveryPrefetchStats recoveryPrefetchStats; /* * List of OIDs of databases we need to write out. If an entry is InvalidOid, @@ -352,7 +350,6 @@ static void pgstat_recv_archiver(PgStat_MsgArchiver *msg, int len); static void pgstat_recv_bgwriter(PgStat_MsgBgWriter *msg, int len); static void pgstat_recv_wal(PgStat_MsgWal *msg, int len); static void pgstat_recv_slru(PgStat_MsgSLRU *msg, int len); -static void pgstat_recv_recoveryprefetch(PgStat_MsgRecoveryPrefetch *msg, int len); static void pgstat_recv_funcstat(PgStat_MsgFuncstat *msg, int len); static void pgstat_recv_funcpurge(PgStat_MsgFuncpurge *msg, int len); static void pgstat_recv_recoveryconflict(PgStat_MsgRecoveryConflict *msg, int len); @@ -1446,20 +1443,11 @@ pgstat_reset_shared_counters(const char *target) msg.m_resettarget = RESET_BGWRITER; else if (strcmp(target, "wal") == 0) msg.m_resettarget = RESET_WAL; - else if (strcmp(target, "prefetch_recovery") == 0) - { - /* - * We can't ask the stats collector to do this for us as it is not - * attached to shared memory. - */ - XLogPrefetchRequestResetStats(); - return; - } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("unrecognized reset target: \"%s\"", target), - errhint("Target must be \"archiver\", \"bgwriter\", \"wal\" or \"prefetch_recovery\"."))); + errhint("Target must be \"archiver\", \"bgwriter\" or \"wal\"."))); pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_RESETSHAREDCOUNTER); pgstat_send(&msg, sizeof(msg)); @@ -2897,22 +2885,6 @@ pgstat_fetch_replslot(NameData slotname) return pgstat_get_replslot_entry(slotname, false); } -/* - * --------- - * pgstat_fetch_recoveryprefetch() - - * - * Support function for restoring the counters managed by xlogprefetch.c. - * --------- - */ -PgStat_RecoveryPrefetchStats * -pgstat_fetch_recoveryprefetch(void) -{ - backend_read_statsfile(); - - return &recoveryPrefetchStats; -} - - /* * Shut down a single backend's statistics reporting at process exit. * @@ -3188,23 +3160,6 @@ pgstat_send_slru(void) } -/* ---------- - * pgstat_send_recoveryprefetch() - - * - * Send recovery prefetch statistics to the collector - * ---------- - */ -void -pgstat_send_recoveryprefetch(PgStat_RecoveryPrefetchStats *stats) -{ - PgStat_MsgRecoveryPrefetch msg; - - pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_RECOVERYPREFETCH); - msg.m_stats = *stats; - pgstat_send(&msg, sizeof(msg)); -} - - /* ---------- * PgstatCollectorMain() - * @@ -3422,10 +3377,6 @@ PgstatCollectorMain(int argc, char *argv[]) pgstat_recv_slru(&msg.msg_slru, len); break; - case PGSTAT_MTYPE_RECOVERYPREFETCH: - pgstat_recv_recoveryprefetch(&msg.msg_recoveryprefetch, len); - break; - case PGSTAT_MTYPE_FUNCSTAT: pgstat_recv_funcstat(&msg.msg_funcstat, len); break; @@ -3718,13 +3669,6 @@ pgstat_write_statsfiles(bool permanent, bool allDbs) rc = fwrite(slruStats, sizeof(slruStats), 1, fpout); (void) rc; /* we'll check for error with ferror */ - /* - * Write recovery prefetch stats struct - */ - rc = fwrite(&recoveryPrefetchStats, sizeof(recoveryPrefetchStats), 1, - fpout); - (void) rc; /* we'll check for error with ferror */ - /* * Walk through the database table. */ @@ -4000,7 +3944,6 @@ pgstat_read_statsfiles(Oid onlydb, bool permanent, bool deep) memset(&archiverStats, 0, sizeof(archiverStats)); memset(&walStats, 0, sizeof(walStats)); memset(&slruStats, 0, sizeof(slruStats)); - memset(&recoveryPrefetchStats, 0, sizeof(recoveryPrefetchStats)); /* * Set the current timestamp (will be kept only in case we can't load an @@ -4100,18 +4043,6 @@ pgstat_read_statsfiles(Oid onlydb, bool permanent, bool deep) goto done; } - /* - * Read recoveryPrefetchStats struct - */ - if (fread(&recoveryPrefetchStats, 1, sizeof(recoveryPrefetchStats), - fpin) != sizeof(recoveryPrefetchStats)) - { - ereport(pgStatRunningInCollector ? LOG : WARNING, - (errmsg("corrupted statistics file \"%s\"", statfile))); - memset(&recoveryPrefetchStats, 0, sizeof(recoveryPrefetchStats)); - goto done; - } - /* * We found an existing collector stats file. Read it and put all the * hashtable entries into place. @@ -4452,7 +4383,6 @@ pgstat_read_db_statsfile_timestamp(Oid databaseid, bool permanent, PgStat_WalStats myWalStats; PgStat_SLRUStats mySLRUStats[SLRU_NUM_ELEMENTS]; PgStat_StatReplSlotEntry myReplSlotStats; - PgStat_RecoveryPrefetchStats myRecoveryPrefetchStats; FILE *fpin; int32 format_id; const char *statfile = permanent ? PGSTAT_STAT_PERMANENT_FILENAME : pgstat_stat_filename; @@ -4529,18 +4459,6 @@ pgstat_read_db_statsfile_timestamp(Oid databaseid, bool permanent, return false; } - /* - * Read recovery prefetch stats struct - */ - if (fread(&myRecoveryPrefetchStats, 1, sizeof(myRecoveryPrefetchStats), - fpin) != sizeof(myRecoveryPrefetchStats)) - { - ereport(pgStatRunningInCollector ? LOG : WARNING, - (errmsg("corrupted statistics file \"%s\"", statfile))); - FreeFile(fpin); - return false; - } - /* By default, we're going to return the timestamp of the global file. */ *ts = myGlobalStats.stats_timestamp; @@ -4724,13 +4642,6 @@ backend_read_statsfile(void) if (ok && file_ts >= min_ts) break; - /* - * If we're in crash recovery, the collector may not even be running, - * so work with what we have. - */ - if (InRecovery) - break; - /* Not there or too old, so kick the collector and wait a bit */ if ((count % PGSTAT_INQ_LOOP_COUNT) == 0) pgstat_send_inquiry(cur_ts, min_ts, inquiry_db); @@ -5470,18 +5381,6 @@ pgstat_recv_slru(PgStat_MsgSLRU *msg, int len) slruStats[msg->m_index].truncate += msg->m_truncate; } -/* ---------- - * pgstat_recv_recoveryprefetch() - - * - * Process a recovery prefetch message. - * ---------- - */ -static void -pgstat_recv_recoveryprefetch(PgStat_MsgRecoveryPrefetch *msg, int len) -{ - recoveryPrefetchStats = msg->m_stats; -} - /* ---------- * pgstat_recv_recoveryconflict() - * diff --git a/src/backend/replication/logical/decode.c b/src/backend/replication/logical/decode.c index 888e064ec0f07..70670169acc25 100644 --- a/src/backend/replication/logical/decode.c +++ b/src/backend/replication/logical/decode.c @@ -123,7 +123,7 @@ LogicalDecodingProcessRecord(LogicalDecodingContext *ctx, XLogReaderState *recor { ReorderBufferAssignChild(ctx->reorder, txid, - XLogRecGetXid(record), + record->decoded_record->xl_xid, buf.origptr); } diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index 00543ede45a00..ffc6160e9f380 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -148,8 +148,7 @@ StartupDecodingContext(List *output_plugin_options, TransactionId xmin_horizon, bool need_full_snapshot, bool fast_forward, - LogicalDecodingXLogPageReadCB page_read, - WALSegmentCleanupCB cleanup_cb, + XLogReaderRoutine *xl_routine, LogicalOutputPluginWriterPrepareWrite prepare_write, LogicalOutputPluginWriterWrite do_write, LogicalOutputPluginWriterUpdateProgress update_progress) @@ -199,12 +198,11 @@ StartupDecodingContext(List *output_plugin_options, ctx->slot = slot; - ctx->reader = XLogReaderAllocate(wal_segment_size, NULL, cleanup_cb); + ctx->reader = XLogReaderAllocate(wal_segment_size, NULL, xl_routine, ctx); if (!ctx->reader) ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), errmsg("out of memory"))); - ctx->page_read = page_read; ctx->reorder = ReorderBufferAllocate(); ctx->snapshot_builder = @@ -321,8 +319,7 @@ CreateInitDecodingContext(const char *plugin, List *output_plugin_options, bool need_full_snapshot, XLogRecPtr restart_lsn, - LogicalDecodingXLogPageReadCB page_read, - WALSegmentCleanupCB cleanup_cb, + XLogReaderRoutine *xl_routine, LogicalOutputPluginWriterPrepareWrite prepare_write, LogicalOutputPluginWriterWrite do_write, LogicalOutputPluginWriterUpdateProgress update_progress) @@ -425,7 +422,7 @@ CreateInitDecodingContext(const char *plugin, ctx = StartupDecodingContext(NIL, restart_lsn, xmin_horizon, need_full_snapshot, false, - page_read, cleanup_cb, prepare_write, do_write, + xl_routine, prepare_write, do_write, update_progress); /* call output plugin initialization callback */ @@ -479,8 +476,7 @@ LogicalDecodingContext * CreateDecodingContext(XLogRecPtr start_lsn, List *output_plugin_options, bool fast_forward, - LogicalDecodingXLogPageReadCB page_read, - WALSegmentCleanupCB cleanup_cb, + XLogReaderRoutine *xl_routine, LogicalOutputPluginWriterPrepareWrite prepare_write, LogicalOutputPluginWriterWrite do_write, LogicalOutputPluginWriterUpdateProgress update_progress) @@ -532,8 +528,8 @@ CreateDecodingContext(XLogRecPtr start_lsn, ctx = StartupDecodingContext(output_plugin_options, start_lsn, InvalidTransactionId, false, - fast_forward, page_read, cleanup_cb, - prepare_write, do_write, update_progress); + fast_forward, xl_routine, prepare_write, + do_write, update_progress); /* call output plugin initialization callback */ old_context = MemoryContextSwitchTo(ctx->context); @@ -589,13 +585,7 @@ DecodingContextFindStartpoint(LogicalDecodingContext *ctx) char *err = NULL; /* the read_page callback waits for new WAL */ - while (XLogReadRecord(ctx->reader, &record, &err) == - XLREAD_NEED_DATA) - { - if (!ctx->page_read(ctx->reader)) - break; - } - + record = XLogReadRecord(ctx->reader, &err); if (err) elog(ERROR, "%s", err); if (!record) diff --git a/src/backend/replication/logical/logicalfuncs.c b/src/backend/replication/logical/logicalfuncs.c index 8f8c129620f2a..01d354829b936 100644 --- a/src/backend/replication/logical/logicalfuncs.c +++ b/src/backend/replication/logical/logicalfuncs.c @@ -233,8 +233,9 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin ctx = CreateDecodingContext(InvalidXLogRecPtr, options, false, - read_local_xlog_page, - wal_segment_close, + XL_ROUTINE(.page_read = read_local_xlog_page, + .segment_open = wal_segment_open, + .segment_close = wal_segment_close), LogicalOutputPrepareWrite, LogicalOutputWrite, NULL); @@ -283,13 +284,7 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin XLogRecord *record; char *errm = NULL; - while (XLogReadRecord(ctx->reader, &record, &errm) == - XLREAD_NEED_DATA) - { - if (!ctx->page_read(ctx->reader)) - break; - } - + record = XLogReadRecord(ctx->reader, &errm); if (errm) elog(ERROR, "%s", errm); diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c index 7ab0b804e4c95..d9d36879ed785 100644 --- a/src/backend/replication/slotfuncs.c +++ b/src/backend/replication/slotfuncs.c @@ -153,8 +153,9 @@ create_logical_replication_slot(char *name, char *plugin, ctx = CreateInitDecodingContext(plugin, NIL, false, /* just catalogs is OK */ restart_lsn, - read_local_xlog_page, - wal_segment_close, + XL_ROUTINE(.page_read = read_local_xlog_page, + .segment_open = wal_segment_open, + .segment_close = wal_segment_close), NULL, NULL, NULL); /* @@ -511,8 +512,9 @@ pg_logical_replication_slot_advance(XLogRecPtr moveto) ctx = CreateDecodingContext(InvalidXLogRecPtr, NIL, true, /* fast_forward */ - read_local_xlog_page, - wal_segment_close, + XL_ROUTINE(.page_read = read_local_xlog_page, + .segment_open = wal_segment_open, + .segment_close = wal_segment_close), NULL, NULL, NULL); /* @@ -534,13 +536,7 @@ pg_logical_replication_slot_advance(XLogRecPtr moveto) * Read records. No changes are generated in fast_forward mode, * but snapbuilder/slot statuses are updated properly. */ - while (XLogReadRecord(ctx->reader, &record, &errm) == - XLREAD_NEED_DATA) - { - if (!ctx->page_read(ctx->reader)) - break; - } - + record = XLogReadRecord(ctx->reader, &errm); if (errm) elog(ERROR, "%s", errm); diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index 6fefc3bedc48c..628c8d49d9854 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -580,7 +580,10 @@ StartReplication(StartReplicationCmd *cmd) /* create xlogreader for physical replication */ xlogreader = - XLogReaderAllocate(wal_segment_size, NULL, wal_segment_close); + XLogReaderAllocate(wal_segment_size, NULL, + XL_ROUTINE(.segment_open = WalSndSegmentOpen, + .segment_close = wal_segment_close), + NULL); if (!xlogreader) ereport(ERROR, @@ -803,12 +806,10 @@ StartReplication(StartReplicationCmd *cmd) * which has to do a plain sleep/busy loop, because the walsender's latch gets * set every time WAL is flushed. */ -static bool -logical_read_xlog_page(XLogReaderState *state) +static int +logical_read_xlog_page(XLogReaderState *state, XLogRecPtr targetPagePtr, int reqLen, + XLogRecPtr targetRecPtr, char *cur_page) { - XLogRecPtr targetPagePtr = state->readPagePtr; - int reqLen = state->reqLen; - char *cur_page = state->readBuf; XLogRecPtr flushptr; int count; WALReadError errinfo; @@ -825,10 +826,7 @@ logical_read_xlog_page(XLogReaderState *state) /* fail if not (implies we are going to shut down) */ if (flushptr < targetPagePtr + reqLen) - { - XLogReaderSetInputData(state, -1); - return false; - } + return -1; if (targetPagePtr + XLOG_BLCKSZ <= flushptr) count = XLOG_BLCKSZ; /* more than one block available */ @@ -836,7 +834,7 @@ logical_read_xlog_page(XLogReaderState *state) count = flushptr - targetPagePtr; /* part of the page available */ /* now actually read the data, we know it's there */ - if (!WALRead(state, WalSndSegmentOpen, wal_segment_close, + if (!WALRead(state, cur_page, targetPagePtr, XLOG_BLCKSZ, @@ -856,8 +854,7 @@ logical_read_xlog_page(XLogReaderState *state) XLByteToSeg(targetPagePtr, segno, state->segcxt.ws_segsize); CheckXLogRemoved(segno, state->seg.ws_tli); - XLogReaderSetInputData(state, count); - return true; + return count; } /* @@ -1010,8 +1007,9 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd) ctx = CreateInitDecodingContext(cmd->plugin, NIL, need_full_snapshot, InvalidXLogRecPtr, - logical_read_xlog_page, - wal_segment_close, + XL_ROUTINE(.page_read = logical_read_xlog_page, + .segment_open = WalSndSegmentOpen, + .segment_close = wal_segment_close), WalSndPrepareWrite, WalSndWriteData, WalSndUpdateProgress); @@ -1169,8 +1167,9 @@ StartLogicalReplication(StartReplicationCmd *cmd) */ logical_decoding_ctx = CreateDecodingContext(cmd->startpoint, cmd->options, false, - logical_read_xlog_page, - wal_segment_close, + XL_ROUTINE(.page_read = logical_read_xlog_page, + .segment_open = WalSndSegmentOpen, + .segment_close = wal_segment_close), WalSndPrepareWrite, WalSndWriteData, WalSndUpdateProgress); xlogreader = logical_decoding_ctx->reader; @@ -2763,7 +2762,7 @@ XLogSendPhysical(void) enlargeStringInfo(&output_message, nbytes); retry: - if (!WALRead(xlogreader, WalSndSegmentOpen, wal_segment_close, + if (!WALRead(xlogreader, &output_message.data[output_message.len], startptr, nbytes, @@ -2861,12 +2860,7 @@ XLogSendLogical(void) */ WalSndCaughtUp = false; - while (XLogReadRecord(logical_decoding_ctx->reader, &record, &errm) == - XLREAD_NEED_DATA) - { - if (!logical_decoding_ctx->page_read(logical_decoding_ctx->reader)) - break; - } + record = XLogReadRecord(logical_decoding_ctx->reader, &errm); /* xlog record was invalid */ if (errm != NULL) diff --git a/src/backend/storage/freespace/freespace.c b/src/backend/storage/freespace/freespace.c index cfa0414e5ab43..8c12dda2380d0 100644 --- a/src/backend/storage/freespace/freespace.c +++ b/src/backend/storage/freespace/freespace.c @@ -210,8 +210,7 @@ XLogRecordPageWithFreeSpace(RelFileNode rnode, BlockNumber heapBlk, blkno = fsm_logical_to_physical(addr); /* If the page doesn't exist already, extend */ - buf = XLogReadBufferExtended(rnode, FSM_FORKNUM, blkno, RBM_ZERO_ON_ERROR, - InvalidBuffer); + buf = XLogReadBufferExtended(rnode, FSM_FORKNUM, blkno, RBM_ZERO_ON_ERROR); LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); page = BufferGetPage(buf); diff --git a/src/backend/storage/ipc/ipci.c b/src/backend/storage/ipc/ipci.c index 47847563ef0fb..3e4ec53a97e8d 100644 --- a/src/backend/storage/ipc/ipci.c +++ b/src/backend/storage/ipc/ipci.c @@ -22,7 +22,6 @@ #include "access/subtrans.h" #include "access/syncscan.h" #include "access/twophase.h" -#include "access/xlogprefetch.h" #include "commands/async.h" #include "miscadmin.h" #include "pgstat.h" @@ -127,7 +126,6 @@ CreateSharedMemoryAndSemaphores(void) size = add_size(size, PredicateLockShmemSize()); size = add_size(size, ProcGlobalShmemSize()); size = add_size(size, XLOGShmemSize()); - size = add_size(size, XLogPrefetchShmemSize()); size = add_size(size, CLOGShmemSize()); size = add_size(size, CommitTsShmemSize()); size = add_size(size, SUBTRANSShmemSize()); @@ -219,7 +217,6 @@ CreateSharedMemoryAndSemaphores(void) * Set up xlog, clog, and buffers */ XLOGShmemInit(); - XLogPrefetchShmemInit(); CLOGShmemInit(); CommitTsShmemInit(); SUBTRANSShmemInit(); diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 9db40b134a8ae..0a180341c227e 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -41,7 +41,6 @@ #include "access/twophase.h" #include "access/xact.h" #include "access/xlog_internal.h" -#include "access/xlogprefetch.h" #include "catalog/namespace.h" #include "catalog/pg_authid.h" #include "catalog/storage.h" @@ -210,7 +209,6 @@ static bool check_effective_io_concurrency(int *newval, void **extra, GucSource static bool check_maintenance_io_concurrency(int *newval, void **extra, GucSource source); static bool check_huge_page_size(int *newval, void **extra, GucSource source); static bool check_client_connection_check_interval(int *newval, void **extra, GucSource source); -static void assign_maintenance_io_concurrency(int newval, void *extra); static void assign_pgstat_temp_directory(const char *newval, void *extra); static bool check_application_name(char **newval, void **extra, GucSource source); static void assign_application_name(const char *newval, void *extra); @@ -727,8 +725,6 @@ const char *const config_group_names[] = gettext_noop("Write-Ahead Log / Checkpoints"), /* WAL_ARCHIVING */ gettext_noop("Write-Ahead Log / Archiving"), - /* WAL_RECOVERY */ - gettext_noop("Write-Ahead Log / Recovery"), /* WAL_ARCHIVE_RECOVERY */ gettext_noop("Write-Ahead Log / Archive Recovery"), /* WAL_RECOVERY_TARGET */ @@ -1280,27 +1276,6 @@ static struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, - { - {"recovery_prefetch", PGC_SIGHUP, WAL_RECOVERY, - gettext_noop("Prefetch referenced blocks during recovery."), - gettext_noop("Read ahead of the current replay position to find uncached blocks.") - }, - &recovery_prefetch, - false, - NULL, assign_recovery_prefetch, NULL - }, - { - {"recovery_prefetch_fpw", PGC_SIGHUP, WAL_RECOVERY, - gettext_noop("Prefetch blocks that have full page images in the WAL."), - gettext_noop("On some systems, there is no benefit to prefetching pages that will be " - "entirely overwritten, but if the logical page size of the filesystem is " - "larger than PostgreSQL's, this can be beneficial. This option has no " - "effect unless recovery_prefetch is enabled.") - }, - &recovery_prefetch_fpw, - false, - NULL, assign_recovery_prefetch_fpw, NULL - }, { {"wal_log_hints", PGC_POSTMASTER, WAL_SETTINGS, @@ -2755,17 +2730,6 @@ static struct config_int ConfigureNamesInt[] = NULL, NULL, NULL }, - { - {"wal_decode_buffer_size", PGC_POSTMASTER, WAL_RECOVERY, - gettext_noop("Maximum buffer size for reading ahead in the WAL during recovery."), - gettext_noop("This controls the maximum distance we can read ahead in the WAL to prefetch referenced blocks."), - GUC_UNIT_BYTE - }, - &wal_decode_buffer_size, - 512 * 1024, 64 * 1024, INT_MAX, - NULL, NULL, NULL - }, - { {"wal_keep_size", PGC_SIGHUP, REPLICATION_SENDING, gettext_noop("Sets the size of WAL files held for standby servers."), @@ -3086,8 +3050,7 @@ static struct config_int ConfigureNamesInt[] = 0, #endif 0, MAX_IO_CONCURRENCY, - check_maintenance_io_concurrency, assign_maintenance_io_concurrency, - NULL + check_maintenance_io_concurrency, NULL, NULL }, { @@ -12091,20 +12054,6 @@ check_client_connection_check_interval(int *newval, void **extra, GucSource sour return true; } -static void -assign_maintenance_io_concurrency(int newval, void *extra) -{ -#ifdef USE_PREFETCH - /* - * Reconfigure recovery prefetching, because a setting it depends on - * changed. - */ - maintenance_io_concurrency = newval; - if (AmStartupProcess()) - XLogPrefetchReconfigure(); -#endif -} - static void assign_pgstat_temp_directory(const char *newval, void *extra) { diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 3307d3a635aaa..efde01ee566db 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -250,12 +250,6 @@ #archive_timeout = 0 # force a logfile segment switch after this # number of seconds; 0 disables -# - Recovery - - -#recovery_prefetch = off # prefetch pages referenced in the WAL? -#recovery_prefetch_fpw = off # even pages logged with full page? -#wal_decode_buffer_size = 512kB # lookahead window used for prefetching - # - Archive Recovery - # These are only used in recovery mode. diff --git a/src/bin/pg_rewind/parsexlog.c b/src/bin/pg_rewind/parsexlog.c index 81e186270a362..59ebac7d6aa88 100644 --- a/src/bin/pg_rewind/parsexlog.c +++ b/src/bin/pg_rewind/parsexlog.c @@ -41,9 +41,15 @@ static int xlogreadfd = -1; static XLogSegNo xlogreadsegno = -1; static char xlogfpath[MAXPGPATH]; -static bool SimpleXLogPageRead(XLogReaderState *xlogreader, - const char *datadir, int *tliIndex, - const char *restoreCommand); +typedef struct XLogPageReadPrivate +{ + const char *restoreCommand; + int tliIndex; +} XLogPageReadPrivate; + +static int SimpleXLogPageRead(XLogReaderState *xlogreader, + XLogRecPtr targetPagePtr, + int reqLen, XLogRecPtr targetRecPtr, char *readBuf); /* * Read WAL from the datadir/pg_wal, starting from 'startpoint' on timeline @@ -60,22 +66,20 @@ extractPageMap(const char *datadir, XLogRecPtr startpoint, int tliIndex, XLogRecord *record; XLogReaderState *xlogreader; char *errormsg; + XLogPageReadPrivate private; - xlogreader = XLogReaderAllocate(WalSegSz, datadir, NULL); - + private.tliIndex = tliIndex; + private.restoreCommand = restoreCommand; + xlogreader = XLogReaderAllocate(WalSegSz, datadir, + XL_ROUTINE(.page_read = &SimpleXLogPageRead), + &private); if (xlogreader == NULL) pg_fatal("out of memory"); XLogBeginRead(xlogreader, startpoint); do { - while (XLogReadRecord(xlogreader, &record, &errormsg) == - XLREAD_NEED_DATA) - { - if (!SimpleXLogPageRead(xlogreader, datadir, - &tliIndex, restoreCommand)) - break; - } + record = XLogReadRecord(xlogreader, &errormsg); if (record == NULL) { @@ -119,19 +123,19 @@ readOneRecord(const char *datadir, XLogRecPtr ptr, int tliIndex, XLogRecord *record; XLogReaderState *xlogreader; char *errormsg; + XLogPageReadPrivate private; XLogRecPtr endptr; - xlogreader = XLogReaderAllocate(WalSegSz, datadir, NULL); + private.tliIndex = tliIndex; + private.restoreCommand = restoreCommand; + xlogreader = XLogReaderAllocate(WalSegSz, datadir, + XL_ROUTINE(.page_read = &SimpleXLogPageRead), + &private); if (xlogreader == NULL) pg_fatal("out of memory"); XLogBeginRead(xlogreader, ptr); - while (XLogReadRecord(xlogreader, &record, &errormsg) == - XLREAD_NEED_DATA) - { - if (!SimpleXLogPageRead(xlogreader, datadir, &tliIndex, restoreCommand)) - break; - } + record = XLogReadRecord(xlogreader, &errormsg); if (record == NULL) { if (errormsg) @@ -166,6 +170,7 @@ findLastCheckpoint(const char *datadir, XLogRecPtr forkptr, int tliIndex, XLogRecPtr searchptr; XLogReaderState *xlogreader; char *errormsg; + XLogPageReadPrivate private; /* * The given fork pointer points to the end of the last common record, @@ -181,7 +186,11 @@ findLastCheckpoint(const char *datadir, XLogRecPtr forkptr, int tliIndex, forkptr += SizeOfXLogShortPHD; } - xlogreader = XLogReaderAllocate(WalSegSz, datadir, NULL); + private.tliIndex = tliIndex; + private.restoreCommand = restoreCommand; + xlogreader = XLogReaderAllocate(WalSegSz, datadir, + XL_ROUTINE(.page_read = &SimpleXLogPageRead), + &private); if (xlogreader == NULL) pg_fatal("out of memory"); @@ -191,13 +200,7 @@ findLastCheckpoint(const char *datadir, XLogRecPtr forkptr, int tliIndex, uint8 info; XLogBeginRead(xlogreader, searchptr); - while (XLogReadRecord(xlogreader, &record, &errormsg) == - XLREAD_NEED_DATA) - { - if (!SimpleXLogPageRead(xlogreader, datadir, - &tliIndex, restoreCommand)) - break; - } + record = XLogReadRecord(xlogreader, &errormsg); if (record == NULL) { @@ -243,19 +246,16 @@ findLastCheckpoint(const char *datadir, XLogRecPtr forkptr, int tliIndex, } /* XLogReader callback function, to read a WAL page */ -static bool -SimpleXLogPageRead(XLogReaderState *xlogreader, const char *datadir, - int *tliIndex, const char *restoreCommand) +static int +SimpleXLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, + int reqLen, XLogRecPtr targetRecPtr, char *readBuf) { - XLogRecPtr targetPagePtr = xlogreader->readPagePtr; - char *readBuf = xlogreader->readBuf; + XLogPageReadPrivate *private = (XLogPageReadPrivate *) xlogreader->private_data; uint32 targetPageOff; XLogRecPtr targetSegEnd; XLogSegNo targetSegNo; int r; - Assert(xlogreader->reqLen <= XLOG_BLCKSZ); - XLByteToSeg(targetPagePtr, targetSegNo, WalSegSz); XLogSegNoOffsetToRecPtr(targetSegNo + 1, 0, WalSegSz, targetSegEnd); targetPageOff = XLogSegmentOffset(targetPagePtr, WalSegSz); @@ -283,14 +283,14 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, const char *datadir, * be done both forward and backward, consider also switching timeline * accordingly. */ - while (*tliIndex < targetNentries - 1 && - targetHistory[*tliIndex].end < targetSegEnd) - (*tliIndex)++; - while (*tliIndex > 0 && - targetHistory[*tliIndex].begin >= targetSegEnd) - (*tliIndex)--; - - XLogFileName(xlogfname, targetHistory[*tliIndex].tli, + while (private->tliIndex < targetNentries - 1 && + targetHistory[private->tliIndex].end < targetSegEnd) + private->tliIndex++; + while (private->tliIndex > 0 && + targetHistory[private->tliIndex].begin >= targetSegEnd) + private->tliIndex--; + + XLogFileName(xlogfname, targetHistory[private->tliIndex].tli, xlogreadsegno, WalSegSz); snprintf(xlogfpath, MAXPGPATH, "%s/" XLOGDIR "/%s", @@ -303,11 +303,10 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, const char *datadir, /* * If we have no restore_command to execute, then exit. */ - if (restoreCommand == NULL) + if (private->restoreCommand == NULL) { pg_log_error("could not open file \"%s\": %m", xlogfpath); - XLogReaderSetInputData(xlogreader, -1); - return false; + return -1; } /* @@ -317,13 +316,10 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, const char *datadir, xlogreadfd = RestoreArchivedFile(xlogreader->segcxt.ws_dir, xlogfname, WalSegSz, - restoreCommand); + private->restoreCommand); if (xlogreadfd < 0) - { - XLogReaderSetInputData(xlogreader, -1); - return false; - } + return -1; else pg_log_debug("using file \"%s\" restored from archive", xlogfpath); @@ -339,8 +335,7 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, const char *datadir, if (lseek(xlogreadfd, (off_t) targetPageOff, SEEK_SET) < 0) { pg_log_error("could not seek in file \"%s\": %m", xlogfpath); - XLogReaderSetInputData(xlogreader, -1); - return false; + return -1; } @@ -353,15 +348,13 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, const char *datadir, pg_log_error("could not read file \"%s\": read %d of %zu", xlogfpath, r, (Size) XLOG_BLCKSZ); - XLogReaderSetInputData(xlogreader, -1); - return false; + return -1; } Assert(targetSegNo == xlogreadsegno); - xlogreader->seg.ws_tli = targetHistory[*tliIndex].tli; - XLogReaderSetInputData(xlogreader, XLOG_BLCKSZ); - return true; + xlogreader->seg.ws_tli = targetHistory[private->tliIndex].tli; + return XLOG_BLCKSZ; } /* @@ -439,7 +432,7 @@ extractPageInfo(XLogReaderState *record) RmgrNames[rmid], info); } - for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) + for (block_id = 0; block_id <= record->max_block_id; block_id++) { RelFileNode rnode; ForkNumber forknum; diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c index 4ec273e6d28bc..f8b8afe4a7beb 100644 --- a/src/bin/pg_waldump/pg_waldump.c +++ b/src/bin/pg_waldump/pg_waldump.c @@ -29,6 +29,14 @@ static const char *progname; static int WalSegSz; +typedef struct XLogDumpPrivate +{ + TimeLineID timeline; + XLogRecPtr startptr; + XLogRecPtr endptr; + bool endptr_reached; +} XLogDumpPrivate; + typedef struct XLogDumpConfig { /* display options */ @@ -322,41 +330,30 @@ WALDumpCloseSegment(XLogReaderState *state) state->seg.ws_file = -1; } -/* - * pg_waldump's WAL page reader - * - * timeline and startptr specifies the LSN, and reads up to endptr. - */ -static bool -WALDumpReadPage(XLogReaderState *state, TimeLineID timeline, - XLogRecPtr startptr, XLogRecPtr endptr) +/* pg_waldump's XLogReaderRoutine->page_read callback */ +static int +WALDumpReadPage(XLogReaderState *state, XLogRecPtr targetPagePtr, int reqLen, + XLogRecPtr targetPtr, char *readBuff) { - XLogRecPtr targetPagePtr = state->readPagePtr; - int reqLen = state->reqLen; - char *readBuff = state->readBuf; + XLogDumpPrivate *private = state->private_data; int count = XLOG_BLCKSZ; WALReadError errinfo; - /* determine the number of bytes to read on the page */ - if (endptr != InvalidXLogRecPtr) + if (private->endptr != InvalidXLogRecPtr) { - if (targetPagePtr + XLOG_BLCKSZ <= endptr) + if (targetPagePtr + XLOG_BLCKSZ <= private->endptr) count = XLOG_BLCKSZ; - else if (targetPagePtr + reqLen <= endptr) - count = endptr - targetPagePtr; + else if (targetPagePtr + reqLen <= private->endptr) + count = private->endptr - targetPagePtr; else { - /* Notify xlogreader that we didn't read at all */ - XLogReaderSetInputData(state, -1); - return false; + private->endptr_reached = true; + return -1; } } - /* We should read more than requested by xlogreader */ - Assert(count >= state->readLen); - - if (!WALRead(state, WALDumpOpenSegment, WALDumpCloseSegment, - readBuff, targetPagePtr, count, timeline, &errinfo)) + if (!WALRead(state, readBuff, targetPagePtr, count, private->timeline, + &errinfo)) { WALOpenSegment *seg = &errinfo.wre_seg; char fname[MAXPGPATH]; @@ -376,9 +373,7 @@ WALDumpReadPage(XLogReaderState *state, TimeLineID timeline, (Size) errinfo.wre_req); } - /* Notify xlogreader of how many bytes we have read */ - XLogReaderSetInputData(state, count); - return true; + return count; } /* @@ -397,10 +392,10 @@ XLogDumpRecordLen(XLogReaderState *record, uint32 *rec_len, uint32 *fpi_len) * add an accessor macro for this. */ *fpi_len = 0; - for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) + for (block_id = 0; block_id <= record->max_block_id; block_id++) { if (XLogRecHasBlockImage(record, block_id)) - *fpi_len += record->record->blocks[block_id].bimg_len; + *fpi_len += record->blocks[block_id].bimg_len; } /* @@ -498,7 +493,7 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogReaderState *record) if (!config->bkp_details) { /* print block references (short format) */ - for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) + for (block_id = 0; block_id <= record->max_block_id; block_id++) { if (!XLogRecHasBlockRef(record, block_id)) continue; @@ -529,7 +524,7 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogReaderState *record) { /* print block references (detailed format) */ putchar('\n'); - for (block_id = 0; block_id <= XLogRecMaxBlockId(record); block_id++) + for (block_id = 0; block_id <= record->max_block_id; block_id++) { if (!XLogRecHasBlockRef(record, block_id)) continue; @@ -542,26 +537,26 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogReaderState *record) blk); if (XLogRecHasBlockImage(record, block_id)) { - if (record->record->blocks[block_id].bimg_info & + if (record->blocks[block_id].bimg_info & BKPIMAGE_IS_COMPRESSED) { printf(" (FPW%s); hole: offset: %u, length: %u, " "compression saved: %u", XLogRecBlockImageApply(record, block_id) ? "" : " for WAL verification", - record->record->blocks[block_id].hole_offset, - record->record->blocks[block_id].hole_length, + record->blocks[block_id].hole_offset, + record->blocks[block_id].hole_length, BLCKSZ - - record->record->blocks[block_id].hole_length - - record->record->blocks[block_id].bimg_len); + record->blocks[block_id].hole_length - + record->blocks[block_id].bimg_len); } else { printf(" (FPW%s); hole: offset: %u, length: %u", XLogRecBlockImageApply(record, block_id) ? "" : " for WAL verification", - record->record->blocks[block_id].hole_offset, - record->record->blocks[block_id].hole_length); + record->blocks[block_id].hole_offset, + record->blocks[block_id].hole_length); } } putchar('\n'); @@ -759,10 +754,7 @@ main(int argc, char **argv) uint32 xlogid; uint32 xrecoff; XLogReaderState *xlogreader_state; - XLogFindNextRecordState *findnext_state; - TimeLineID timeline; - XLogRecPtr startptr; - XLogRecPtr endptr; + XLogDumpPrivate private; XLogDumpConfig config; XLogDumpStats stats; XLogRecord *record; @@ -808,12 +800,14 @@ main(int argc, char **argv) } } + memset(&private, 0, sizeof(XLogDumpPrivate)); memset(&config, 0, sizeof(XLogDumpConfig)); memset(&stats, 0, sizeof(XLogDumpStats)); - timeline = 1; - startptr = InvalidXLogRecPtr; - endptr = InvalidXLogRecPtr; + private.timeline = 1; + private.startptr = InvalidXLogRecPtr; + private.endptr = InvalidXLogRecPtr; + private.endptr_reached = false; config.quiet = false; config.bkp_details = false; @@ -847,7 +841,7 @@ main(int argc, char **argv) optarg); goto bad_argument; } - endptr = (uint64) xlogid << 32 | xrecoff; + private.endptr = (uint64) xlogid << 32 | xrecoff; break; case 'f': config.follow = true; @@ -900,10 +894,10 @@ main(int argc, char **argv) goto bad_argument; } else - startptr = (uint64) xlogid << 32 | xrecoff; + private.startptr = (uint64) xlogid << 32 | xrecoff; break; case 't': - if (sscanf(optarg, "%d", &timeline) != 1) + if (sscanf(optarg, "%d", &private.timeline) != 1) { pg_log_error("could not parse timeline \"%s\"", optarg); goto bad_argument; @@ -980,21 +974,21 @@ main(int argc, char **argv) close(fd); /* parse position from file */ - XLogFromFileName(fname, &timeline, &segno, WalSegSz); + XLogFromFileName(fname, &private.timeline, &segno, WalSegSz); - if (XLogRecPtrIsInvalid(startptr)) - XLogSegNoOffsetToRecPtr(segno, 0, WalSegSz, startptr); - else if (!XLByteInSeg(startptr, segno, WalSegSz)) + if (XLogRecPtrIsInvalid(private.startptr)) + XLogSegNoOffsetToRecPtr(segno, 0, WalSegSz, private.startptr); + else if (!XLByteInSeg(private.startptr, segno, WalSegSz)) { pg_log_error("start WAL location %X/%X is not inside file \"%s\"", - LSN_FORMAT_ARGS(startptr), + LSN_FORMAT_ARGS(private.startptr), fname); goto bad_argument; } /* no second file specified, set end position */ - if (!(optind + 1 < argc) && XLogRecPtrIsInvalid(endptr)) - XLogSegNoOffsetToRecPtr(segno + 1, 0, WalSegSz, endptr); + if (!(optind + 1 < argc) && XLogRecPtrIsInvalid(private.endptr)) + XLogSegNoOffsetToRecPtr(segno + 1, 0, WalSegSz, private.endptr); /* parse ENDSEG if passed */ if (optind + 1 < argc) @@ -1010,26 +1004,26 @@ main(int argc, char **argv) close(fd); /* parse position from file */ - XLogFromFileName(fname, &timeline, &endsegno, WalSegSz); + XLogFromFileName(fname, &private.timeline, &endsegno, WalSegSz); if (endsegno < segno) fatal_error("ENDSEG %s is before STARTSEG %s", argv[optind + 1], argv[optind]); - if (XLogRecPtrIsInvalid(endptr)) + if (XLogRecPtrIsInvalid(private.endptr)) XLogSegNoOffsetToRecPtr(endsegno + 1, 0, WalSegSz, - endptr); + private.endptr); /* set segno to endsegno for check of --end */ segno = endsegno; } - if (!XLByteInSeg(endptr, segno, WalSegSz) && - endptr != (segno + 1) * WalSegSz) + if (!XLByteInSeg(private.endptr, segno, WalSegSz) && + private.endptr != (segno + 1) * WalSegSz) { pg_log_error("end WAL location %X/%X is not inside file \"%s\"", - LSN_FORMAT_ARGS(endptr), + LSN_FORMAT_ARGS(private.endptr), argv[argc - 1]); goto bad_argument; } @@ -1038,7 +1032,7 @@ main(int argc, char **argv) waldir = identify_target_directory(waldir, NULL); /* we don't know what to print */ - if (XLogRecPtrIsInvalid(startptr)) + if (XLogRecPtrIsInvalid(private.startptr)) { pg_log_error("no start WAL location given"); goto bad_argument; @@ -1048,56 +1042,42 @@ main(int argc, char **argv) /* we have everything we need, start reading */ xlogreader_state = - XLogReaderAllocate(WalSegSz, waldir, WALDumpCloseSegment); - + XLogReaderAllocate(WalSegSz, waldir, + XL_ROUTINE(.page_read = WALDumpReadPage, + .segment_open = WALDumpOpenSegment, + .segment_close = WALDumpCloseSegment), + &private); if (!xlogreader_state) fatal_error("out of memory"); - findnext_state = - InitXLogFindNextRecord(xlogreader_state, startptr); - - if (!findnext_state) - fatal_error("out of memory"); - /* first find a valid recptr to start from */ - while (XLogFindNextRecord(findnext_state)) - { - if (!WALDumpReadPage(xlogreader_state, timeline, startptr, endptr)) - break; - } + first_record = XLogFindNextRecord(xlogreader_state, private.startptr); - first_record = findnext_state->currRecPtr; if (first_record == InvalidXLogRecPtr) fatal_error("could not find a valid record after %X/%X", - LSN_FORMAT_ARGS(startptr)); + LSN_FORMAT_ARGS(private.startptr)); /* * Display a message that we're skipping data if `from` wasn't a pointer * to the start of a record and also wasn't a pointer to the beginning of * a segment (e.g. we were used in file mode). */ - if (first_record != startptr && - XLogSegmentOffset(startptr, WalSegSz) != 0) + if (first_record != private.startptr && + XLogSegmentOffset(private.startptr, WalSegSz) != 0) printf(ngettext("first record is after %X/%X, at %X/%X, skipping over %u byte\n", "first record is after %X/%X, at %X/%X, skipping over %u bytes\n", - (first_record - startptr)), - LSN_FORMAT_ARGS(startptr), + (first_record - private.startptr)), + LSN_FORMAT_ARGS(private.startptr), LSN_FORMAT_ARGS(first_record), - (uint32) (first_record - startptr)); + (uint32) (first_record - private.startptr)); for (;;) { /* try to read the next record */ - while (XLogReadRecord(xlogreader_state, &record, &errormsg) == - XLREAD_NEED_DATA) - { - if (!WALDumpReadPage(xlogreader_state, timeline, startptr, endptr)) - break; - } - + record = XLogReadRecord(xlogreader_state, &errormsg); if (!record) { - if (!config.follow) + if (!config.follow || private.endptr_reached) break; else { diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index f542af0a26246..77187c12bebac 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -132,7 +132,6 @@ extern char *PrimaryConnInfo; extern char *PrimarySlotName; extern bool wal_receiver_create_temp_slot; extern bool track_wal_io_timing; -extern int wal_decode_buffer_size; /* indirectly set via GUC system */ extern TransactionId recoveryTargetXid; diff --git a/src/include/access/xlogprefetch.h b/src/include/access/xlogprefetch.h deleted file mode 100644 index 0a7902ee4707a..0000000000000 --- a/src/include/access/xlogprefetch.h +++ /dev/null @@ -1,82 +0,0 @@ -/*------------------------------------------------------------------------- - * - * xlogprefetch.h - * Declarations for the recovery prefetching module. - * - * Portions Copyright (c) 2021, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * IDENTIFICATION - * src/include/access/xlogprefetch.h - *------------------------------------------------------------------------- - */ -#ifndef XLOGPREFETCH_H -#define XLOGPREFETCH_H - -#include "access/xlogreader.h" - -/* GUCs */ -extern bool recovery_prefetch; -extern bool recovery_prefetch_fpw; - -struct XLogPrefetcher; -typedef struct XLogPrefetcher XLogPrefetcher; - -extern int XLogPrefetchReconfigureCount; - -typedef struct XLogPrefetchState -{ - XLogReaderState *reader; - XLogPrefetcher *prefetcher; - int reconfigure_count; -} XLogPrefetchState; - -extern size_t XLogPrefetchShmemSize(void); -extern void XLogPrefetchShmemInit(void); - -extern void XLogPrefetchReconfigure(void); -extern void XLogPrefetchRequestResetStats(void); - -extern void XLogPrefetchBegin(XLogPrefetchState *state, XLogReaderState *reader); -extern void XLogPrefetchEnd(XLogPrefetchState *state); - -/* Functions exposed only for the use of XLogPrefetch(). */ -extern XLogPrefetcher *XLogPrefetcherAllocate(XLogReaderState *reader); -extern void XLogPrefetcherFree(XLogPrefetcher *prefetcher); -extern bool XLogPrefetcherReadAhead(XLogPrefetcher *prefetch, - XLogRecPtr replaying_lsn); - -/* - * Tell the prefetching module that we are now replaying a given LSN, so that - * it can decide how far ahead to read in the WAL, if configured. Return - * true if more data is needed by the reader. - */ -static inline bool -XLogPrefetch(XLogPrefetchState *state, XLogRecPtr replaying_lsn) -{ - /* - * Handle any configuration changes. Rather than trying to deal with - * various parameter changes, we just tear down and set up a new - * prefetcher if anything we depend on changes. - */ - if (unlikely(state->reconfigure_count != XLogPrefetchReconfigureCount)) - { - /* If we had a prefetcher, tear it down. */ - if (state->prefetcher) - { - XLogPrefetcherFree(state->prefetcher); - state->prefetcher = NULL; - } - /* If we want a prefetcher, set it up. */ - if (recovery_prefetch) - state->prefetcher = XLogPrefetcherAllocate(state->reader); - state->reconfigure_count = XLogPrefetchReconfigureCount; - } - - if (state->prefetcher) - return XLogPrefetcherReadAhead(state->prefetcher, replaying_lsn); - - return false; -} - -#endif diff --git a/src/include/access/xlogreader.h b/src/include/access/xlogreader.h index 3b8af31a8fea4..21d200d3df6f3 100644 --- a/src/include/access/xlogreader.h +++ b/src/include/access/xlogreader.h @@ -39,7 +39,6 @@ #endif #include "access/xlogrecord.h" -#include "storage/buf.h" /* WALOpenSegment represents a WAL segment being read. */ typedef struct WALOpenSegment @@ -57,17 +56,65 @@ typedef struct WALSegmentContext } WALSegmentContext; typedef struct XLogReaderState XLogReaderState; -typedef struct XLogFindNextRecordState XLogFindNextRecordState; -/* Function type definition for the segment cleanup callback */ -typedef void (*WALSegmentCleanupCB) (XLogReaderState *xlogreader); - -/* Function type definition for the open/close callbacks for WALRead() */ +/* Function type definitions for various xlogreader interactions */ +typedef int (*XLogPageReadCB) (XLogReaderState *xlogreader, + XLogRecPtr targetPagePtr, + int reqLen, + XLogRecPtr targetRecPtr, + char *readBuf); typedef void (*WALSegmentOpenCB) (XLogReaderState *xlogreader, XLogSegNo nextSegNo, TimeLineID *tli_p); typedef void (*WALSegmentCloseCB) (XLogReaderState *xlogreader); +typedef struct XLogReaderRoutine +{ + /* + * Data input callback + * + * This callback shall read at least reqLen valid bytes of the xlog page + * starting at targetPagePtr, and store them in readBuf. The callback + * shall return the number of bytes read (never more than XLOG_BLCKSZ), or + * -1 on failure. The callback shall sleep, if necessary, to wait for the + * requested bytes to become available. The callback will not be invoked + * again for the same page unless more than the returned number of bytes + * are needed. + * + * targetRecPtr is the position of the WAL record we're reading. Usually + * it is equal to targetPagePtr + reqLen, but sometimes xlogreader needs + * to read and verify the page or segment header, before it reads the + * actual WAL record it's interested in. In that case, targetRecPtr can + * be used to determine which timeline to read the page from. + * + * The callback shall set ->seg.ws_tli to the TLI of the file the page was + * read from. + */ + XLogPageReadCB page_read; + + /* + * Callback to open the specified WAL segment for reading. ->seg.ws_file + * shall be set to the file descriptor of the opened segment. In case of + * failure, an error shall be raised by the callback and it shall not + * return. + * + * "nextSegNo" is the number of the segment to be opened. + * + * "tli_p" is an input/output argument. WALRead() uses it to pass the + * timeline in which the new segment should be found, but the callback can + * use it to return the TLI that it actually opened. + */ + WALSegmentOpenCB segment_open; + + /* + * WAL segment close callback. ->seg.ws_file shall be set to a negative + * number. + */ + WALSegmentCloseCB segment_close; +} XLogReaderRoutine; + +#define XL_ROUTINE(...) &(XLogReaderRoutine){__VA_ARGS__} + typedef struct { /* Is this block ref in use? */ @@ -78,9 +125,6 @@ typedef struct ForkNumber forknum; BlockNumber blkno; - /* Workspace for remembering last known buffer holding this block. */ - Buffer recent_buffer; - /* copy of the fork_flags field from the XLogRecordBlockHeader */ uint8 flags; @@ -100,61 +144,12 @@ typedef struct uint16 data_bufsz; } DecodedBkpBlock; -/* Return code from XLogReadRecord */ -typedef enum XLogReadRecordResult -{ - XLREAD_SUCCESS, /* record is successfully read */ - XLREAD_NEED_DATA, /* need more data. see XLogReadRecord. */ - XLREAD_FULL, /* cannot hold more data while reading ahead */ - XLREAD_FAIL /* failed during reading a record */ -} XLogReadRecordResult; - -/* - * internal state of XLogReadRecord - * - * XLogReadState runs a state machine while reading a record. Theses states - * are not seen outside the function. Each state may repeat several times - * exiting requesting caller for new data. See the comment of XLogReadRecrod - * for details. - */ -typedef enum XLogReadRecordState -{ - XLREAD_NEXT_RECORD, - XLREAD_TOT_LEN, - XLREAD_FIRST_FRAGMENT, - XLREAD_CONTINUATION -} XLogReadRecordState; - -/* - * The decoded contents of a record. This occupies a contiguous region of - * memory, with main_data and blocks[n].data pointing to memory after the - * members declared here. - */ -typedef struct DecodedXLogRecord -{ - /* Private member used for resource management. */ - size_t size; /* total size of decoded record */ - bool oversized; /* outside the regular decode buffer? */ - struct DecodedXLogRecord *next; /* decoded record queue link */ - - /* Public members. */ - XLogRecPtr lsn; /* location */ - XLogRecPtr next_lsn; /* location of next record */ - XLogRecord header; /* header */ - RepOriginId record_origin; - TransactionId toplevel_xid; /* XID of top-level transaction */ - char *main_data; /* record's main data portion */ - uint32 main_data_len; /* main data portion's length */ - int max_block_id; /* highest block_id in use (-1 if none) */ - DecodedBkpBlock blocks[FLEXIBLE_ARRAY_MEMBER]; -} DecodedXLogRecord; - struct XLogReaderState { /* * Operational callbacks */ - WALSegmentCleanupCB cleanup_cb; + XLogReaderRoutine routine; /* ---------------------------------------- * Public parameters @@ -167,33 +162,19 @@ struct XLogReaderState */ uint64 system_identifier; + /* + * Opaque data for callbacks to use. Not used by XLogReader. + */ + void *private_data; + /* * Start and end point of last record read. EndRecPtr is also used as the * position to read next. Calling XLogBeginRead() sets EndRecPtr to the * starting position and ReadRecPtr to invalid. - * - * Start and end point of last record returned by XLogReadRecord(). These - * are also available as record->lsn and record->next_lsn. */ - XLogRecPtr ReadRecPtr; /* start of last record read or being read */ + XLogRecPtr ReadRecPtr; /* start of last record read */ XLogRecPtr EndRecPtr; /* end+1 of last record read */ - /* ---------------------------------------- - * Communication with page reader - * readBuf is XLOG_BLCKSZ bytes, valid up to at least reqLen bytes. - * ---------------------------------------- - */ - /* variables the clients of xlogreader can examine */ - XLogRecPtr readPagePtr; /* page pointer to read */ - int32 reqLen; /* bytes requested to the caller */ - char *readBuf; /* buffer to store data */ - bool page_verified; /* is the page header on the buffer verified? */ - bool record_verified;/* is the current record header verified? */ - - /* variables set by the client of xlogreader */ - int32 readLen; /* actual bytes copied into readBuf by client, - * which should be >= reqLen. Client should - * use XLogReaderSetInputData() to set. */ /* ---------------------------------------- * Decoded representation of current record @@ -201,17 +182,21 @@ struct XLogReaderState * Use XLogRecGet* functions to investigate the record; these fields * should not be accessed directly. * ---------------------------------------- - * Start and end point of the last record read and decoded by - * XLogReadRecordInternal(). NextRecPtr is also used as the position to - * decode next. Calling XLogBeginRead() sets NextRecPtr and EndRecPtr to - * the requested starting position. */ - XLogRecPtr DecodeRecPtr; /* start of last record decoded */ - XLogRecPtr NextRecPtr; /* end+1 of last record decoded */ - XLogRecPtr PrevRecPtr; /* start of previous record decoded */ + XLogRecord *decoded_record; /* currently decoded record */ + + char *main_data; /* record's main data portion */ + uint32 main_data_len; /* main data portion's length */ + uint32 main_data_bufsz; /* allocated size of the buffer */ + + RepOriginId record_origin; + + TransactionId toplevel_xid; /* XID of top-level transaction */ + + /* information about blocks referenced by the record. */ + DecodedBkpBlock blocks[XLR_MAX_BLOCK_ID + 1]; - /* Last record returned by XLogReadRecord(). */ - DecodedXLogRecord *record; + int max_block_id; /* highest block_id in use (-1 if none) */ /* ---------------------------------------- * private/internal state @@ -219,24 +204,11 @@ struct XLogReaderState */ /* - * Buffer for decoded records. This is a circular buffer, though - * individual records can't be split in the middle, so some space is often - * wasted at the end. Oversized records that don't fit in this space are - * allocated separately. - */ - char *decode_buffer; - size_t decode_buffer_size; - bool free_decode_buffer; /* need to free? */ - char *decode_buffer_head; /* write head */ - char *decode_buffer_tail; /* read head */ - - /* - * Queue of records that have been decoded. This is a linked list that - * usually consists of consecutive records in decode_buffer, but may also - * contain oversized records allocated with palloc(). + * Buffer for currently read page (XLOG_BLCKSZ bytes, valid up to at least + * readLen bytes) */ - DecodedXLogRecord *decode_queue_head; /* newest decoded record */ - DecodedXLogRecord *decode_queue_tail; /* oldest decoded record */ + char *readBuf; + uint32 readLen; /* last read XLOG position for data currently in readBuf */ WALSegmentContext segcxt; @@ -250,6 +222,8 @@ struct XLogReaderState XLogRecPtr latestPagePtr; TimeLineID latestPageTLI; + /* beginning of the WAL record being read. */ + XLogRecPtr currRecPtr; /* timeline to read it from, 0 if a lookup is required */ TimeLineID currTLI; @@ -276,70 +250,29 @@ struct XLogReaderState char *readRecordBuf; uint32 readRecordBufSize; - /* - * XLogReadRecordInternal() state - */ - XLogReadRecordState readRecordState; /* state machine state */ - int recordGotLen; /* amount of current record that has already - * been read */ - int recordRemainLen; /* length of current record that remains */ - XLogRecPtr recordContRecPtr; /* where the current record continues */ - - DecodedXLogRecord *decoding; /* record currently being decoded */ - /* Buffer to hold error message */ char *errormsg_buf; - bool errormsg_deferred; }; -struct XLogFindNextRecordState -{ - XLogReaderState *reader_state; - XLogRecPtr targetRecPtr; - XLogRecPtr currRecPtr; -}; - -/* Report that data is available for decoding. */ -static inline void -XLogReaderSetInputData(XLogReaderState *state, int32 len) -{ - state->readLen = len; -} - /* Get a new XLogReader */ extern XLogReaderState *XLogReaderAllocate(int wal_segment_size, const char *waldir, - WALSegmentCleanupCB cleanup_cb); + XLogReaderRoutine *routine, + void *private_data); +extern XLogReaderRoutine *LocalXLogReaderRoutine(void); /* Free an XLogReader */ extern void XLogReaderFree(XLogReaderState *state); -/* Optionally provide a circular decoding buffer to allow readahead. */ -extern void XLogReaderSetDecodeBuffer(XLogReaderState *state, - void *buffer, - size_t size); - /* Position the XLogReader to given record */ extern void XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr); #ifdef FRONTEND -extern XLogFindNextRecordState *InitXLogFindNextRecord(XLogReaderState *reader_state, XLogRecPtr start_ptr); -extern bool XLogFindNextRecord(XLogFindNextRecordState *state); +extern XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr); #endif /* FRONTEND */ -/* Read the next record's header. Returns NULL on end-of-WAL or failure. */ -extern XLogReadRecordResult XLogReadRecord(XLogReaderState *state, - XLogRecord **record, - char **errormsg); - -/* Read the next decoded record. Returns NULL on end-of-WAL or failure. */ -extern XLogReadRecordResult XLogNextRecord(XLogReaderState *state, - DecodedXLogRecord **record, - char **errormsg); - -/* Try to read ahead, if there is space in the decoding buffer. */ -extern XLogReadRecordResult XLogReadAhead(XLogReaderState *state, - DecodedXLogRecord **record, - char **errormsg); +/* Read the next XLog record. Returns NULL on end-of-WAL or failure */ +extern struct XLogRecord *XLogReadRecord(XLogReaderState *state, + char **errormsg); /* Validate a page */ extern bool XLogReaderValidatePageHeader(XLogReaderState *state, @@ -359,38 +292,30 @@ typedef struct WALReadError } WALReadError; extern bool WALRead(XLogReaderState *state, - WALSegmentOpenCB segopenfn, WALSegmentCloseCB sgclosefn, char *buf, XLogRecPtr startptr, Size count, TimeLineID tli, WALReadError *errinfo); /* Functions for decoding an XLogRecord */ -extern size_t DecodeXLogRecordRequiredSpace(size_t xl_tot_len); -extern bool DecodeXLogRecord(XLogReaderState *state, - DecodedXLogRecord *decoded, - XLogRecord *record, - XLogRecPtr lsn, +extern bool DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errmsg); -#define XLogRecGetTotalLen(decoder) ((decoder)->record->header.xl_tot_len) -#define XLogRecGetPrev(decoder) ((decoder)->record->header.xl_prev) -#define XLogRecGetInfo(decoder) ((decoder)->record->header.xl_info) -#define XLogRecGetRmid(decoder) ((decoder)->record->header.xl_rmid) -#define XLogRecGetXid(decoder) ((decoder)->record->header.xl_xid) -#define XLogRecGetOrigin(decoder) ((decoder)->record->record_origin) -#define XLogRecGetTopXid(decoder) ((decoder)->record->toplevel_xid) -#define XLogRecGetData(decoder) ((decoder)->record->main_data) -#define XLogRecGetDataLen(decoder) ((decoder)->record->main_data_len) -#define XLogRecHasAnyBlockRefs(decoder) ((decoder)->record->max_block_id >= 0) -#define XLogRecMaxBlockId(decoder) ((decoder)->record->max_block_id) -#define XLogRecGetBlock(decoder, i) (&(decoder)->record->blocks[(i)]) +#define XLogRecGetTotalLen(decoder) ((decoder)->decoded_record->xl_tot_len) +#define XLogRecGetPrev(decoder) ((decoder)->decoded_record->xl_prev) +#define XLogRecGetInfo(decoder) ((decoder)->decoded_record->xl_info) +#define XLogRecGetRmid(decoder) ((decoder)->decoded_record->xl_rmid) +#define XLogRecGetXid(decoder) ((decoder)->decoded_record->xl_xid) +#define XLogRecGetOrigin(decoder) ((decoder)->record_origin) +#define XLogRecGetTopXid(decoder) ((decoder)->toplevel_xid) +#define XLogRecGetData(decoder) ((decoder)->main_data) +#define XLogRecGetDataLen(decoder) ((decoder)->main_data_len) +#define XLogRecHasAnyBlockRefs(decoder) ((decoder)->max_block_id >= 0) #define XLogRecHasBlockRef(decoder, block_id) \ - ((decoder)->record->max_block_id >= (block_id) && \ - (decoder)->record->blocks[block_id].in_use) + ((decoder)->blocks[block_id].in_use) #define XLogRecHasBlockImage(decoder, block_id) \ - ((decoder)->record->blocks[block_id].has_image) + ((decoder)->blocks[block_id].has_image) #define XLogRecBlockImageApply(decoder, block_id) \ - ((decoder)->record->blocks[block_id].apply_image) + ((decoder)->blocks[block_id].apply_image) #ifndef FRONTEND extern FullTransactionId XLogRecGetFullXid(XLogReaderState *record); @@ -401,8 +326,5 @@ extern char *XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size * extern bool XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id, RelFileNode *rnode, ForkNumber *forknum, BlockNumber *blknum); -extern bool XLogRecGetRecentBuffer(XLogReaderState *record, uint8 block_id, - RelFileNode *rnode, ForkNumber *forknum, - BlockNumber *blknum, Buffer *recent_buffer); #endif /* XLOGREADER_H */ diff --git a/src/include/access/xlogutils.h b/src/include/access/xlogutils.h index bbc6085130750..9ac602b674d1a 100644 --- a/src/include/access/xlogutils.h +++ b/src/include/access/xlogutils.h @@ -42,13 +42,14 @@ extern XLogRedoAction XLogReadBufferForRedoExtended(XLogReaderState *record, Buffer *buf); extern Buffer XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum, - BlockNumber blkno, ReadBufferMode mode, - Buffer recent_buffer); + BlockNumber blkno, ReadBufferMode mode); extern Relation CreateFakeRelcacheEntry(RelFileNode rnode); extern void FreeFakeRelcacheEntry(Relation fakerel); -extern bool read_local_xlog_page(XLogReaderState *state); +extern int read_local_xlog_page(XLogReaderState *state, + XLogRecPtr targetPagePtr, int reqLen, + XLogRecPtr targetRecPtr, char *cur_page); extern void wal_segment_open(XLogReaderState *state, XLogSegNo nextSegNo, TimeLineID *tli_p); diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index a54be88d7f174..c8d445e4d9c99 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202105051 +#define CATALOG_VERSION_NO 202105091 #endif diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 91f0ea2212c7d..26c3fc0f6ba39 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -6287,14 +6287,6 @@ prorettype => 'text', proargtypes => '', prosrc => 'pg_get_wal_replay_pause_state' }, -{ oid => '9085', descr => 'statistics: information about WAL prefetching', - proname => 'pg_stat_get_prefetch_recovery', prorows => '1', provolatile => 'v', - proretset => 't', prorettype => 'record', proargtypes => '', - proallargtypes => '{timestamptz,int8,int8,int8,int8,int8,int4,int4,float4,float4}', - proargmodes => '{o,o,o,o,o,o,o,o,o,o}', - proargnames => '{stats_reset,prefetch,skip_hit,skip_new,skip_fpw,skip_seq,distance,queue_depth,avg_distance,avg_queue_depth}', - prosrc => 'pg_stat_get_prefetch_recovery' }, - { oid => '2621', descr => 'reload configuration files', proname => 'pg_reload_conf', provolatile => 'v', prorettype => 'bool', proargtypes => '', prosrc => 'pg_reload_conf' }, diff --git a/src/include/pgstat.h b/src/include/pgstat.h index 1ce363e7d181d..72ff4a06d6f24 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -74,7 +74,6 @@ typedef enum StatMsgType PGSTAT_MTYPE_BGWRITER, PGSTAT_MTYPE_WAL, PGSTAT_MTYPE_SLRU, - PGSTAT_MTYPE_RECOVERYPREFETCH, PGSTAT_MTYPE_FUNCSTAT, PGSTAT_MTYPE_FUNCPURGE, PGSTAT_MTYPE_RECOVERYCONFLICT, @@ -198,19 +197,6 @@ typedef struct PgStat_TableXactStatus struct PgStat_TableXactStatus *next; /* next of same subxact */ } PgStat_TableXactStatus; -/* - * Recovery prefetching statistics persisted on disk by pgstat.c, but kept in - * shared memory by xlogprefetch.c. - */ -typedef struct PgStat_RecoveryPrefetchStats -{ - PgStat_Counter prefetch; - PgStat_Counter skip_hit; - PgStat_Counter skip_new; - PgStat_Counter skip_fpw; - PgStat_Counter skip_seq; - TimestampTz stat_reset_timestamp; -} PgStat_RecoveryPrefetchStats; /* ------------------------------------------------------------ * Message formats follow @@ -553,15 +539,6 @@ typedef struct PgStat_MsgReplSlot PgStat_Counter m_total_bytes; } PgStat_MsgReplSlot; -/* ---------- - * PgStat_MsgRecoveryPrefetch Sent by XLogPrefetch to save statistics. - * ---------- - */ -typedef struct PgStat_MsgRecoveryPrefetch -{ - PgStat_MsgHdr m_hdr; - PgStat_RecoveryPrefetchStats m_stats; -} PgStat_MsgRecoveryPrefetch; /* ---------- * PgStat_MsgRecoveryConflict Sent by the backend upon recovery conflict @@ -725,7 +702,6 @@ typedef union PgStat_Msg PgStat_MsgBgWriter msg_bgwriter; PgStat_MsgWal msg_wal; PgStat_MsgSLRU msg_slru; - PgStat_MsgRecoveryPrefetch msg_recoveryprefetch; PgStat_MsgFuncstat msg_funcstat; PgStat_MsgFuncpurge msg_funcpurge; PgStat_MsgRecoveryConflict msg_recoveryconflict; @@ -1115,7 +1091,6 @@ extern void pgstat_twophase_postabort(TransactionId xid, uint16 info, extern void pgstat_send_archiver(const char *xlog, bool failed); extern void pgstat_send_bgwriter(void); -extern void pgstat_send_recoveryprefetch(PgStat_RecoveryPrefetchStats *stats); extern void pgstat_report_wal(void); extern bool pgstat_send_wal(bool force); @@ -1132,7 +1107,6 @@ extern PgStat_GlobalStats *pgstat_fetch_global(void); extern PgStat_WalStats *pgstat_fetch_stat_wal(void); extern PgStat_SLRUStats *pgstat_fetch_slru(void); extern PgStat_StatReplSlotEntry *pgstat_fetch_replslot(NameData slotname); -extern PgStat_RecoveryPrefetchStats *pgstat_fetch_recoveryprefetch(void); extern void pgstat_count_slru_page_zeroed(int slru_idx); extern void pgstat_count_slru_page_hit(int slru_idx); diff --git a/src/include/replication/logical.h b/src/include/replication/logical.h index 7dfcb7be187d3..af551d6f4eea8 100644 --- a/src/include/replication/logical.h +++ b/src/include/replication/logical.h @@ -29,8 +29,6 @@ typedef void (*LogicalOutputPluginWriterUpdateProgress) (struct LogicalDecodingC TransactionId xid ); -typedef bool (*LogicalDecodingXLogPageReadCB)(XLogReaderState *ctx); - typedef struct LogicalDecodingContext { /* memory context this is all allocated in */ @@ -41,7 +39,6 @@ typedef struct LogicalDecodingContext /* infrastructure pieces for decoding */ XLogReaderState *reader; - LogicalDecodingXLogPageReadCB page_read; struct ReorderBuffer *reorder; struct SnapBuild *snapshot_builder; @@ -108,16 +105,14 @@ extern LogicalDecodingContext *CreateInitDecodingContext(const char *plugin, List *output_plugin_options, bool need_full_snapshot, XLogRecPtr restart_lsn, - LogicalDecodingXLogPageReadCB page_read, - WALSegmentCleanupCB cleanup_cb, + XLogReaderRoutine *xl_routine, LogicalOutputPluginWriterPrepareWrite prepare_write, LogicalOutputPluginWriterWrite do_write, LogicalOutputPluginWriterUpdateProgress update_progress); extern LogicalDecodingContext *CreateDecodingContext(XLogRecPtr start_lsn, List *output_plugin_options, bool fast_forward, - LogicalDecodingXLogPageReadCB page_read, - WALSegmentCleanupCB cleanup_cb, + XLogReaderRoutine *xl_routine, LogicalOutputPluginWriterPrepareWrite prepare_write, LogicalOutputPluginWriterWrite do_write, LogicalOutputPluginWriterUpdateProgress update_progress); diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 7894940741ea6..24a5d9d3fb283 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -442,8 +442,4 @@ extern void assign_search_path(const char *newval, void *extra); extern bool check_wal_buffers(int *newval, void **extra, GucSource source); extern void assign_xlog_sync_method(int new_sync_method, void *extra); -/* in access/transam/xlogprefetch.c */ -extern void assign_recovery_prefetch(bool new_value, void *extra); -extern void assign_recovery_prefetch_fpw(bool new_value, void *extra); - #endif /* GUC_H */ diff --git a/src/include/utils/guc_tables.h b/src/include/utils/guc_tables.h index 35aac5bbc7bc2..6b40f1eeb8c20 100644 --- a/src/include/utils/guc_tables.h +++ b/src/include/utils/guc_tables.h @@ -67,7 +67,6 @@ enum config_group WAL_SETTINGS, WAL_CHECKPOINTS, WAL_ARCHIVING, - WAL_RECOVERY, WAL_ARCHIVE_RECOVERY, WAL_RECOVERY_TARGET, REPLICATION_SENDING, diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 572bc2057cc27..e5ab11275d99a 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1879,17 +1879,6 @@ pg_stat_gssapi| SELECT s.pid, s.gss_enc AS encrypted FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid, query_id) WHERE (s.client_port IS NOT NULL); -pg_stat_prefetch_recovery| SELECT s.stats_reset, - s.prefetch, - s.skip_hit, - s.skip_new, - s.skip_fpw, - s.skip_seq, - s.distance, - s.queue_depth, - s.avg_distance, - s.avg_queue_depth - FROM pg_stat_get_prefetch_recovery() s(stats_reset, prefetch, skip_hit, skip_new, skip_fpw, skip_seq, distance, queue_depth, avg_distance, avg_queue_depth); pg_stat_progress_analyze| SELECT s.pid, s.datid, d.datname, diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 0f197a9c8db9f..1196febfa2512 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -2804,10 +2804,6 @@ XLogPageHeader XLogPageHeaderData XLogPageReadCB XLogPageReadPrivate -XLogPrefetcher -XLogPrefetcherFilter -XLogPrefetchState -XLogPrefetchStats XLogReaderRoutine XLogReaderState XLogRecData From 45aa88fe1d4028ea50ba7d26d390223b6ef78acc Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 10 May 2021 14:34:07 +0900 Subject: [PATCH 268/671] Fix generation of ./INSTALL for the distribution tarball "make dist", in charge of creating a distribution tarball, failed when attempting to generate ./INSTALL as a new reference added to guc-default-toast-compression on the documentation for the installation details was not getting translated properly to plain text. Like all the other link references on this page, this adds a new entry to standalone-profile.xsl to allow the generation of ./INSTALL to finish properly. Oversight in 02a93e7, per buildfarm member guaibasaurus. --- doc/src/sgml/standalone-profile.xsl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/src/sgml/standalone-profile.xsl b/doc/src/sgml/standalone-profile.xsl index 1817d1579ff24..8bdf58632cd11 100644 --- a/doc/src/sgml/standalone-profile.xsl +++ b/doc/src/sgml/standalone-profile.xsl @@ -48,6 +48,10 @@ variant without links and references to the main documentation. the documentation + + the configuration parameter default_toast_compression + + the documentation From dc0260861063b125d297c0f3caca359feb381c6a Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 10 May 2021 01:58:59 -0400 Subject: [PATCH 269/671] doc: first draft of the PG 14 release notes --- doc/src/sgml/release-14.sgml | 3377 +++++++++++++++++++++++++++++++++- 1 file changed, 3373 insertions(+), 4 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 9116a34b91f88..0c59fcbcd6bce 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -6,11 +6,3380 @@ Release date: - 2021-??-?? + 2021-??-?? (AS OF 2021-05-09) - - This is just a placeholder for now. - + + Overview + + + PostgreSQL 14 contains many new features and + enhancements, including: + + + + + + + + + + + The above items and other new features + of PostgreSQL 14 are explained in more + detail in the sections below. + + + + + + + Migration to Version 14 + + + A dump/restore using or use of or logical replication is required for those + wishing to migrate data from any previous release. See for general information on migrating to new major + releases. + + + + Version 14 contains a number of changes that may affect compatibility + with previous releases. Observe the following incompatibilities: + + + + + + + + +Prevent the containment operators (<@ and @>) for contrib/intarray from using GiST indexes (Tom Lane) + + + +Previously a full GiST index scan was required, so just avoid that and scan the heap, which is faster. +EXISTING INDEXES? REMOVE? + + + + + + + +Disallow single-quoting of the language name in the CREATE/DROP LANGUAGE command (Peter Eisentraut) + + + + + + + +Make websearch_to_tsquery() parse text in quotes as a single token (Alexander Korotkov) + + + +DETAILS? ALREADY CHANGED ABOVE. + + + + + + + +Change EXTRACT to return the NUMERIC data type (Peter Eisentraut) + + + +EXTRACT(date) now throws an error for units that are not part of the date data type. + + + + + + + +Pass doubled quote marks in ecpg SQL command strings literally (Tom Lane) + + + +Previously 'abc''def' was passed to the server as 'abc'def'; "abc""def" was passed as "abc"def". + + + + + + + +Prevent tablefunc's function normal_rand() from accepting negative values (Ashutosh Bapat) + + + +Negative values produced undesirable results. + + + + + + + +Fix handling of infinite window function ranges (Tom Lane) + + + +Previously window frame clauses like 'inf' PRECEDING AND 'inf' FOLLOWING returned incorrect results. + + + + + + + +Change var_samp() and stddev_samp() with numeric parameters to return NULL for a single NaN value (Tom Lane) + + + +Previously NaN was returned. + + + + + + + +Remove support for SSL compression (Daniel Gustafsson, Michael Paquier) + + + +This was already disabled by default in previous Postgres releases, and most modern OpenSSL and TLS versions no longer support it. + + + + + + + +Remove containment operators @ and ~ from contrib modules cube, hstore, intarray, and seg (Justin Pryzby) + + + +The more consistent containment operators <@ and @> have been supported since PostgreSQL 8.2 (year 2006). + + + + + + + +Remove server and libpq support for the version 2 wire protocol (Heikki Linnakangas) + + + +This was last used as the default in Postgres 7.2 (year 2002). + + + + + + + +Improve handling of regular expression back-references (Tom Lane) + + + +For example, disregard ^ in its expansion in \1 in "(^\d+).*\1". + + + + + + + +Allow \D and \W shorthands to match newlines in newline-sensitive mode (Tom Lane) + + + +Previously they did not match; [^[:digit:]] or [^[:word:]] can be used to get the old behavior. + + + + + + + +Disallow \w as range start/end in character classes (Tom Lane) + + + +This previously was allowed but produced incorrect results. + + + + + + + +Remove contrib program pg_standby (Justin Pryzby) + + + + + + + +Remove deprecated containment operators for built-in geometry data types (Justin Pryzby) + + + +The more consistent <@ and @> have been recommended for many years. + + + + + + + +Overhaul the specification of clientcert in pg_hba.conf (Kyotaro Horiguchi) + + + +Values 1/0/no-verify are no longer supported; only the strings verify-ca and verify-full can be used. Also, disallow verify-ca if cert authentication is enabled since cert requires verify-full +checking. + + + + + + + +Remove factorial operators ! and !! (Mark Dilger) + + + +The factorial() function is still supported. Also remove function numeric_fac(). + + + + + + + +Disallow factorial() of negative numbers (Peter Eisentraut) + + + +Previously such cases returned 1. + + + + + + + +Remove support for postfix (right-unary) operators (Mark Dilger) + + + +pg_dump and pg_upgrade will warn if post-fix operators are being dumped. + + + + + + + +Avoid retrieval of CHECK constraints and DEFAULT exprs in data-only dump (Julien Rouhaud) + + + +IS THIS BACKWARD INCOMPATIBLE? + + + + + + + +Remove composite types for sequences or toast tables (Tom Lane) + + + + + + + +Remove operator_precedence_warning setting (Tom Lane) + + + +This was needed for warning applications about PostgreSQL 9.5 changes. + + + + + + + +Initialize work_mem and maintenance_work_mem using current guc.c default (Peter Geoghegan) + + + +Oversight in commit 848ae330a49, which increased the previous defaults +for work_mem and maintenance_work_mem by 4X. IS THIS A BEHAVIORAL CHANGE? + + + + + + + +Remove password_encryption's support for boolean values, e.g. true (Peter Eisentraut) + + + +Previous boolean values enabled md5. Now, only the md5 string does this. + + + + + + + + + Changes + + + Below you will find a detailed account of the changes between + PostgreSQL 14 and the previous major + release. + + + + Server + + + + + + + +Add function pg_wait_for_backend_termination() that waits for session exit (Bharath Rupireddy) + + + +Also add a similar optional wait parameter to pg_terminate_backend(). + + + + + + + +Improve autovacuum's analyze of partitioned tables (Yuzuko Hosoya) + + + +DETAILS? + + + + + + + +Allow vacuum to skip index vacuuming when the number of removable index entries is insignificant (Masahiko Sawada, Peter Geoghegan) + + + + + + + +Cause vacuum operations to be aggressive if the table is near xid or multixact wraparound (Masahiko Sawada, Peter Geoghegan) + + + +This is controlled by vacuum_failsafe_age and vacuum_multixact_failsafe_age. + + + + + + + +Add a predefined role to match the database owner (Noah Misch) + + + +It is called pg_database_owner; this is useful in template databases. + + + + + + + +Add predefined roles pg_read_all_data and pg_write_all_data (Stephen Frost) + + + +These non-login roles give read-only/write-only access to all objects. + + + + + + + +Add long-running queries to be canceled if the client disconnects (Sergey Cherkashin, Thomas Munro) + + + +The server variable check_client_connection_interval allows supporting operating systems, e.g., Linux, to automatically cancel queries by disconnected clients. + + + + + + + +Remove temporary files after backend crashes (Euler Taveira) + + + +These files were previously retained for debugging purposes; deletion can be disabled with remove_temp_files_after_crash. + + + + + + + <link linkend="ddl-partitioning">Partitioning</link> + + + + + + + +Allow partitions to be detached in a non-blocking manner (Álvaro Herrera) + + + +The syntax is ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY, and FINALIZE. + + + + + + + +Allow the arbitrary collations of partition boundary values (Tom Lane) + + + +Previously it had to match the collation of the partition key. + + + + + + + + + Indexes + + + + + + + +Remove expired btree index entries to prevent page splits (Peter Geoghegan) + + + +This is particularly helpful for reducing index bloat on tables that frequently update indexed columns. + + + + + + + +Allow BRIN indexes to record multiple min/max values per range (Tomas Vondra) + + + +This is useful if there are groups of values in each page range. + + + + + + + +Allow BRIN indexes to use bloom filters (Tomas Vondra) + + + +This allows bloom indexes to be used effectively with data that is not physically localized in the heap. + + + + + + + +Allow SP-GiST to use INCLUDE'd columns (Pavel Borisov) + + + + + + + +Allow some GiST index to be built by presorting the data (Andrey Borodin) + + + +Presorting happens automatically and allows for faster index creation and smaller indexes. + + + + + + + + + Optimizer + + + + + + + +Allow extended statistics on expressions (Tomas Vondra) + + + +This allows statistics on a group of expressions and columns, rather than only columns like previously. System view pg_stats_ext_exprs reports such statistics. +ALTER TABLE ... ALTER COLUMN ... TYPE RESETS STASTISTICS? + + + + + + + +Increase the number of places extended statistics can be used for OR clause estimation (Tomas Vondra, Dean Rasheed) + + + + + + + + + General Performance + + + + + + + +Improve speed of computing MVCC visibility snapshots on systems with many CPUs and high session count (Andres Freund) + + + +This also improves performance when there are many idle sessions. + + + + + + + +Add executor method to cache results from the inner-side of joins (David Rowley) + + + +This is useful if only a small percentage of rows is checked on the inner side. + + + + + + + +Allow multiple foreign table scans to be run in parallel (Robert Haas, Kyotaro Horiguchi, Thomas Munro, Etsuro Fujita) + + + +The postgres_fdw supports these type of scans if "async_capable" is set. + + + + + + + +Add ability to use LZ4 compression on TOAST data (Dilip Kumar) + + + +This can be set at the column level, or set as a default via server setting default_toast_compression. The server must be compiled with --with-lz4 support to enable this feature; the default is still pglz. + + + + + + + +Allow analyze to do page prefetching (Stephen Frost) + + + +This is controlled by maintenance_io_concurrency. + + + + + + + +Improve the performance of parallel sequential scans (Thomas Munro, David Rowley) + + + +This was done by allocating blocks in groups to parallel workers. + + + + + + + +Improve the performance of regular expression comparisons (Tom Lane) + + + + + + + +Speed truncation of small tables on large shared buffer servers (Kirk Jamison) + + + + + + + +Speed up vacuuming of databases with many relations (Tatsuhito Kasahara) + + + + + + + +Allow windowing functions to perform incremental sorts (David Rowley) + + + + + + + + + Monitoring + + + + + + + +If server variable compute_query_id is enabled, display the hash in pg_stat_activity, EXPLAIN VERBOSE, csvlog, and optionally in log_line_prefix (Julien Rouhaud) + + + + + + + +Add information about the original user name supplied by the client to the output of log_connections (Jacob Champion) + + + + + + + +Add function pg_backend_memory_contexts() to output the memory contexts of arbitrary backends (Atsushi Torikoshi) + + + + + + + +Add per-index information to autovacuum logging output (Masahiko Sawada) + + + + + + + +Improve logging of auto-vacuum and auto-analyze (Stephen Frost, Jakub Wartak) + + + +This reports I/O timings for auto-vacuum and auto-analyze if track_io_timing is enabled. Also, report buffer read and dirty rates for auto-analyze. + + + + + + + + + System Views + + + + + + + +Make the archiver process visible in pg_stat_activity (Kyotaro Horiguchi) + + + + + + + +Improve pg_stat_activity reporting for walsenders processes (Tom Lane) + + + +Previously only SQL commands were reported. + + + + + + + +Add view pg_stat_progress_copy to report COPY progress (Josef Šimánek, Matthias van de Meent) + + + + + + + +Add system view pg_stat_wal which reports WAL activity (Masahiro Ikeda) + + + + + + + +Add lock wait time to pg_locks (Atsushi Torikoshi) + + + + + + + +Add session statistics to the pg_stat_database system view (Laurenz Albe) + + + + + + + +Add system view pg_stat_replication_slots to report replication slot activity (Sawada Masahiko, Amit Kapila) + + + +Function pg_stat_reset_replication_slot() resets slot statistics. +THIS IS LOGICAL ONLY, BUT NO "LOGICAL" IN THE NAME? IS "ACTIVITY" THE RIGHT WORD? + + + + + + + +Add system view pg_backend_memory_contexts to report session memory usage (Atsushi Torikoshi, Fujii Masao) + + + + + + + +Add columns to pg_prepared_statements to report generic and custom plan counts (Atsushi Torikoshi, Kyotaro Horiguchi) + + + + + + + +Add wait event WalReceiverExit to report WAL receiver exit wait time (Fujii Masao) + + + + + + + + + <acronym>Authentication</acronym> + + + + + + + +Change password_encryption's default to scram-sha-256 (Peter Eisentraut) + + + +Previously it was md5. + + + + + + + +Allow more than the common name (CN) to be matched for client certificate authentication (Andrew Dunstan) + + + +The new pg_hba.conf keyword "clientname=DN" allows comparison with non-CN certificate attributes and can be combined with ident maps. + + + + + + + +Allow passwords of an arbitrary length (Tom Lane, Nathan Bossart) + + + + + + + +Allow pg_hba.conf and pg_ident.conf records to span multiple lines (Fabien Coelho) + + + +A backslash at the end of a line allows record contents to be continued on the next line. + + + + + + + + + Server Configuration + + + + + + + +Add server setting idle_session_timeout to close idle sessions (Li Japin) + + + +This is similar to idle_in_transaction_session_timeout. + + + + + + + +Force custom server variable names to match the pattern used for unquoted SQL identifiers (Tom Lane) + + + + + + + +Change checkpoint_completion_target default to 0.9 (Stephen Frost) + + + +The previous default was 0.5. + + + + + + + +Reduce the default value of vacuum_cost_page_miss (Peter Geoghegan) + + + +This new default better reflects current hardware capabilities. + + + + + + + +Add Set Server Name Indication (SNI) for SSL connection packets (Peter Eisentraut) + + + +This can be disabled by turning client options "sslsni" off. + + + + + + + +Allow the specification of a certificate revocation list (CRL) directory (Kyotaro Horiguchi) + + + +This is controlled by server variable ssl_crl_dir and libpq connection option sslcrldir. Previously only CRL files could be specified. + + + + + + + +Add server variable log_recovery_conflict_waits to report long recovery conflict wait times (Bertrand Drouvot, Masahiko Sawada) + + + + + + + +Add new server-side variable in_hot_standby (Haribabu Kommi, Greg Nancarrow, Tom Lane) + + + + + + + +Allow restore_command setting to be changed during a server reload (Sergei Kornilov) + + + +You can also set restore_command to an empty string and reload to force recovery to only read from the pg_wal directory. + + + + + + + +Allow unix_socket_directories to specify paths as individual, comma-separated quoted strings (Ian Lawrence Barwick) + + + +Previously all the paths had to be in a single quoted string. + + + + + + + +Add %P to log_line_prefix to report the parallel group leader (Justin Pryzby) + + + + + + + +Increase warning time and hard limit before transaction id and multi-transaction wraparound (Noah Misch) + + + +This should reduce the number of failures without warning. + + + + + + + +Allow startup allocation of dynamic shared memory (Thomas Munro) + + + +This is controlled by min_dynamic_shared_memory. This allows more use of huge pages. + + + + + + + +Add setting huge_page_size to control the size of huge pages used on Linux (Odin Ugedal) + + + + + + + + + + + Streaming Replication and Recovery + + + + + + + +Allow control over whether logical decoding messages are sent to the replication stream (David Pirotte, Euler Taveira) + + + + + + + +Allow logical decoding to be filtered by xid (Markus Wanner) + + + + + + + +Allow file system sync at the start of crash recovery on Linux (Thomas Munro) + + + +This allows for faster recovery on systems with many database files and is enabled via recovery_init_sync_method, + + + + + + + +Allow multiple xacts during table sync in logical replication (Peter Smith, Amit Kapila, and Takamichi Osumi) + + + +IMPORTANT? + + + + + + + +Improve signal handling reliability (Fujii Masao) + + + +GENERAL ENOUGH? + + + + + + + +Allow standby servers to be rewound via pg_rewind (Heikki Linnakangas) + + + + + + + +Add support for streaming to built-in logical replication (Vondra, Dilip Kumar, Amit Kapila, Ajin Cherian, Nikhil Sontakke, Stas Kelvich) + + + + + + + +Allow logical replication to stream long transactions to standbys (Dilip Kumar, Tomas Vondra, Amit Kapila, Nikhil Sontakke) + + + +Previously transactions that exceeded logical_decoding_work_mem were written to disk until the transaction completed. + + + + + + + +Immediately WAL-log subtransaction and top-level XID association (Tomas Vondra, Dilip Kumar, Amit Kapila) + + + +This is useful for logical decoding. + + + + + + + +Allow logical replication subscriptions to use binary transfer mode (Dave Cramer) + + + +This is faster than text mode, but slightly less robust. + + + + + + + +Add the replication origin to the record returned by pg_last_committed_xact() (Movead Li) + + + + + + + +Add function pg_xact_commit_timestamp_origin() to return the commit timestamp and replication origin of the specified transaction (Movead Li) + + + + + + + +Allow replication origin functions to be controlled using standard function permission controls (Martín Marqués) + + + +Previously these functions could only be executed by super-users, and still defaults do that. + + + + + + + +Generate WAL invalidations message during command completion when using logical replication (Dilip Kumar, Tomas Vondra, Amit Kapila) + + + +When logical replication is disabled, WAL invalidation messages are generated at transaction completion. This allows logical streaming of in-progress transactions. + + + + + + + +Improve the logical replication API to allow streaming large in-progress transactions (Tomas Vondra, Dilip Kumar, Amit Kapila) + + + +The output functions begin with "stream". test_decoding also supports these. + + + + + + + +Pause recovery if the primary changes its parameters in a way that prevents replay on the hot standby (Peter Eisentraut) + + + +Previously the standby would shut down immediately. + + + + + + + +Enable logical replication to handle two phase commits (Ajin Cherian) + + + +This is controlled via pg_create_logical_replication_slot(). + + + + + + + +Add function pg_get_wal_replay_pause_state() to report the recovery state (Dilip Kumar) + + + +It gives more detailed information than pg_is_wal_replay_paused(), which still exists. + + + + + + + + + SELECT, INSERT + + + + + + + +Allow the WHERE clause of ON CONFLICT to be table-qualified (Tom Lane) + + + +Only the target table can be referenced. + + + + + + + +Allow hash lookup of IN clause with many constants (James Coleman, David Rowley) + + + +Previously the only option was to sequentially scan the list of constants. + + + + + + + +Allow an alias to be specified for JOIN's USING clause (Peter Eisentraut) + + + +The alias is created by using AS after the USING clause and represents an alias for the USING columns. + + + + + + + +Allow DISTINCT to be added to GROUP BY to remove duplicate GROUPING SET combinations (Vik Fearing) + + + +For example, GROUP BY CUBE (a,b), CUBE (b,c) will generated duplicate grouping combinations without DISTINCT. + + + + + + + +Add SQL-standard SEARCH and CYCLE clauses for common table expressions (Peter Eisentraut) + + + +This could be accomplished previously using existing syntax. + + + + + + + +Properly handle DEFAULT values for columns in multi-column inserts (Dean Rasheed) + + + +This used to throw an error. + + + + + + + +Reduce the number of keywords that can't be used as column labels without "AS" (Mark Dilger) + + + +There are now 90% fewer restricted keywords. + + + + + + + + + Utility Commands + + + + + + + +Allow TRUNCATE to operate on foreign tables (Kazutaka Onishi, Kohei KaiGai) + + + +The postgres_fdw module also now supports this. + + + + + + + +Allow publications to be more easily added and removed (Japin Li) + + + +The new syntax is ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION. This avoids having to specify all publications to add/remove entries. + + + + + + + +Allow control over whether foreign servers keep connections open after transaction completion (Bharath Rupireddy) + + + +This is controlled by keep_connections and defaults to on. + + + + + + + +Allow REFRESH MATERIALIZED VIEW to use parallelism (Bharath Rupireddy) + + + + + + + +Allow VACUUM VERBOSE to report page deletion counts for each scan of an index (Peter Geoghegan) + + + +Previously only total page count deletion was reported. + + + + + + + +Add ability to skip vacuuming of TOAST tables (Nathan Bossart) + + + +VACUUM now has a PROCESS_TOAST which can be set to false to disable TOAST processing, and vacuumdb has a --no-process-toast option. + + + + + + + +Allow REINDEX to change the tablespace of the new index (Alexey Kondratov, Michael Paquier, Justin Pryzby) + + + +This is done by specifying a TABLESPACE clause. + + + + + + + +Add primary keys, unique constraints, and foreign keys to system catalogs (Peter Eisentraut) + + + +This helps GUI tools analyze the system tables. + + + + + + + +Add the SQL-standard clause GRANTED BY to GRANT and REVOKE (Peter Eisentraut) + + + + + + + +Fix EXPLAIN CREATE TABLE AS and EXPLAIN CREATE MATERIALIZED VIEW to honor IF NOT EXISTS (Bharath Rupireddy) + + + +Previously, if the object already exists, EXPLAIN would fail. + + + + + + + +Add OR REPLACE for CREATE TRIGGER (Takamichi Osumi) + + + +This allows pre-existing triggers to be conditionally replaced. + + + + + + + +Preserve SQL standard syntax in view definitions, if possible (Tom Lane) + + + +Previously non-function call SQL standard syntax, e.g. EXTRACT, were converted to non-SQL standard function calls. + + + + + + + +Allow CURRENT_ROLE every place CURRENT_USER is accepted (Peter Eisentraut) + + + + + + + +Allow REINDEX to process all child tables and indexes of a partitioned table (Justin Pryzby, Michael Paquier) + + + + + + + +Improve the performance of COPY FROM in binary mode (Bharath Rupireddy, Amit Langote) + + + + + + + + + Data Types + + + + + + + +Create composite array types for most system relations (Wenjing Zeng) + + + + + + + +Add support for multirange data types (Paul Jungwirth, Alexander Korotkov) + + + +These are like range data types, but they allow the specification of multiple, ordered, non-overlapping ranges. +All existing range types now also support multirange versions. + + + + + + + +Add point operators <<| and |>> to be strictly above/below geometry (Emre Hasegeli) + + + +Previously >^ and <^ were marked as performing this test, but non-point geometric operators used these operators for non-strict comparisons, leading to confusion. The old operators still exist but will be +eventually removed. ACCURATE? + + + + + + + +Improve the accuracy of floating point computations involving infinity (Tom Lane) + + + + + + + +Allow tsearch data files to have unlimited line lengths (Tom Lane) + + + +The previous limit was 4k bytes. Also remove function t_readline(). + + + + + + + +Add support for infinity and -infinity values to the numeric data type (Tom Lane) + + + +Floating point data types already supported these. + + + + + + + +Allow binary data transfer to be more forgiving of array and record OID mismatches (Tom Lane) + + + + + + + +Add operators to add and subtract LSN and numeric (byte) values (Fujii Masao) + + + + + + + +Add support for the stemming of languages Armenian, Basque, Catalan, Hindi, Serbian, and Yiddish (Peter Eisentraut) + + + + + + + +Have non-zero float values divided by infinity return zero (Kyotaro Horiguchi) + + + +Previously such operations produced underflow errors. + + + + + + + +Cause floating-point division of NaN by zero to return NaN (Tom Lane) + + + +Previously this returned an error. Division with Numerics always returned NaN. + + + + + + + + + Functions + + + + + + + +Change pg_describe_object(), pg_identify_object(), and pg_identify_object_as_address() to always report helpful error messages for non-existent objects (Michael Paquier) + + + + + + + +Cause exp() and power() for negative-infinity exponents to return zero (Tom Lane) + + + +Previously they often returned underflow errors. + + + + + + + +Allow SQL-language functions and procedures to use SQL-standard function bodies (Peter Eisentraut) + + + +Previously only single-quoted or $$-quoted function bodies were supported. + + + + + + + +Add unistr() function to allow Unicode characters to be specified as backslash-hex escapes in strings (Pavel Stehule) + + + +This is similar to how Unicode can be specified in literal string. + + + + + + + +Add date_bin function (John Naylor) + + + +WHAT DOES THIS DO? + + + + + + + +Add function bit_count() to return the number of bits set in a bit or byte string (David Fetter) + + + + + + + +Mark pg_stat_get_subscription() as returning a set (Tom Lane) + + + +While it worked in previous releases, it didn't report proper optimizer statistics and couldn't be used in the target list. + + + + + + + +Add bit_xor XOR aggregate function (Alexey Bashtanov) + + + + + + + +Add SQL-standard trim_array() function (Vik Fearing) + + + +This can already be done with array slices. + + + + + + + +Allow efficient retrieval of heap rows via tid (Edmund Horner, David Rowley) + + + +Previously a sequential scan was required for non-equality tid specifications. + + + + + + + +Add [[:word:]] as a character class to match \w (Tom Lane) + + + + + + + +Allow complemented character class escapes \D, \S, and \W within regex brackets (Tom Lane) + + + + + + + +Allow subscripting of jsonb (Dmitry Dolgov) + + + +Subscripting can be used to extract from and assign to jsonb documents. + + + + + + + +Improve to_tsquery() and websearch_to_tsquery() handling (Alexander Korotkov) + + + +NEED TEXT HERE + + + + + + + +Add bytea equivalents of ltrim() and rtrim() (Joel Jacobson) + + + + + + + +Prevent inet_server_addr() and inet_server_port() from being run by parallel workers (Masahiko Sawada) + + + + + + + +Support negative indexes in split_part() (Nikhil Benesch) + + + +Negative values count from the last field going forward. + + + + + + + +Allow some array functions to operate on a mix of compatible data types (Tom Lane) + + + +The functions are array_append() array_prepend(), array_cat(), array_position(), array_positions(), array_remove(), array_replace(), and width_bucket(). Previously only identical data types could be used. + + + + + + + +Allow more flexible data types for default values of lead() and lag() window functions (Vik Fearing) + + + + + + + +Dramatically improve Unicode normalization (John Naylor) + + + +WHAT OPERATIONS USE THIS? + + + + + + + +Allow procedures to have OUT parameters (Peter Eisentraut) + + + + + + + +Allow make_timestamp/make_timestamptz to accept negative years (Peter Eisentraut) + + + +They are interpreted as BC years. + + + + + + + +A string_to_table() function to split a string on delimiters (Pavel Stehule) + + + +This is similar to the regexp_split_to_table() function. + + + + + + + +Make built-in type coercion functions as leakproof where possible (Tom Lane) + + + +This allows more use of functions that require type conversion in security-sensitive situations. + + + + + + + +Add newer regular expression substring() syntax (Peter Eisentraut) + + + +The new syntax is SUBSTRING(text SIMILAR pattern ESCAPE escapechar). The previous standard syntax was SUBSTRING(text FROM pattern FOR escapechar), and is still supported by Postgres. + + + + + + + + + <link linkend="plpgsql">PL/pgSQL</link> + + + + + + + +Improve performance of repeated CALLs within plpgsql procedures (Pavel Stehule, Tom Lane) + + + + + + + +Improve PL/pgSQL's expression and assignment parsing (Tom Lane) + + + +This adds nested record and array slicing support. + + + + + + + +Allow plpgsql's RETURN QUERY to execute its query using parallelism (Tom Lane) + + + + + + + + + Client Interfaces + + + + + + + +Improve the output format of libpq's PQtrace() (Aya Iwata) + + + + + + + +Allow an ECPG SQL identifier to be linked to a specific connection (Hayato Kuroda) + + + +This is done via DECLARE ... STATEMENT. + + + + + + + +Add pipeline mode to libpq (Craig Ringer, Matthieu Garrigues, Álvaro Herrera) + + + +This allows multiple queries to be send and only wait for completion when a specific synchronization message is sent. + + + + + + + +Enhance libpq libpq's target_session_attrs parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane) + + + +New options are "read-only", "primary", "standby", and "prefer-standby". + + + + + + + +Allow libpq service files to have unlimited line lengths (Daniel Gustafsson) + + + +The previous limit was 255 bytes. + + + + + + + + + Client Applications + + + + + + + +Allow vacuumdb to skip index cleanup and truncation (Nathan Bossart) + + + +The options are --no-index-cleanup and --no-truncate. + + + + + + + +Allow multiple verbose option specifications (-v) to increase the logging verbosity (Tom Lane) + + + +This is now supported by pg_dump, pg_dumpall, and pg_restore. + + + + + + + +Allow reindexdb to change the tablespace of the new index (Michael Paquier) + + + +This is done by specifying --tablespace. + + + + + + + <xref linkend="app-psql"/> + + + + + + + +Fix psql's \dT to understand array syntax and backend grammar aliases, like "int" for "integer" (Greg Sabino Mullane, Tom Lane) + + + + + + + +Allow psql's \df and \do commands to specify function and operator argument types (Greg Sabino Mullane, Tom Lane) + + + +This helps reduce the number of matches for overloaded entries. + + + + + + + +When using \e in psql, if the buffer is not modified by the editor, ignore the editor contents and leave the buffer unchanged (Laurenz Albe) + + + +The \ef and \ev commands also now have this behavior. DOCS SAY BUFFER IS CLEARED. + + + + + + + +Allow pg_dump to dump only certain extensions (Guillaume Lelarge) + + + +This is controlled by option --extension. + + + + + + + +Add psql command \dX to list extended statistics objects (Tatsuro Yamada) + + + + + + + +Allow psql's \dt and \di to show TOAST tables and their indexes (Justin Pryzby) + + + + + + + +Improve psql's handling of \connect with -reuse-previous (Tom Lane) + + + +Specifically, properly reuse the password previously specified, and prompt for a new password if the previous one failed. + + + + + + + +Add an access method column to psql's \d[i|m|t]+ output (Georgios Kokolatos) + + + + + + + +Improve tab completion (Vignesh C,, Michael Paquier, Justin Pryzby, Georgios Kokolatos, Julien Rouhaud, ADD NAMES) + + + + + + + + + <link linkend="pgbench"><application>pgbench</application></link> + + + + + + + +Add pgbench permute() function to randomly shuffle values (Fabien Coelho, Hironobu Suzuki, Dean Rasheed) + + + + + + + + + + + Server Applications + + + + + + + +Add command-line utility pg_amcheck to simplify running contrib/amcheck operations on many relations (Mark Dilger) + + + + + + + +Add --no-instructions option to initdb (Magnus Hagander) + + + +This removes the server start instructions that are normally output. + + + + + + + +Remove support for the postmaster -o option (Magnus Hagander) + + + +This option was unnecessary since all passed options could already be specified directly. + + + + + + + +Stop pg_upgrade from creating analyze_new_cluster script (Michael Paquier) + + + +Instead, give comparable vacuumdb instructions. + + + + + + + + + Documentation + + + + + + + +Rename Default Roles to Predefined Roles (Bruce Momjian, Stephen Frost) + + + + + + + +Add documentation for the factorial() function (Peter Eisentraut) + + + +With the removal of the ! operator in this release, factorial() is the only built-in way to computer a factorial. + + + + + + + + + Source Code + + + + + + + +Add configure option --with-openssl to behave like --with-ssl={openssl} (Daniel Gustafsson, Michael Paquier) + + + +The option --with-openssl is kept for compatibility. + + + + + + + +Add direct conversion routines between EUC_TW and Big5 (Heikki Linnakangas) + + + + + + + +Add a test module for the regular expression package (Tom Lane) + + + + + + + +Add debug_invalidate_system_caches_always to control cache overwriting (Craig Ringer) + + + +Previously this could only be controlled at compile time and is enabled only in assert builds. + + + + + + + +Change SHA1, SHA2, and MD5 hash computations to use the OpenSSL EVP API (Michael Paquier) + + + +This is more modern and supports FIPS mode. + + + + + + + +Add support for abstract Unix-domain sockets (Peter Eisentraut) + + + +This is currently supported on Linux and Windows. + + + + + + + +Remove build control over the random library used (Daniel Gustafsson) + + + + + + + +Add collation versions for FreeBSD (Thomas Munro) + + + + + + + +Add support for LLVM 12 (Andres Freund) + + + + + + + +Add "amadjustmembers" to the index access method API (Tom Lane) + + + +REMOVE? + + + + + + + +Various improvements in valgrind detection (Álvaro Herrera, Peter Geoghegan) + + + + + + + + + Additional Modules + + + + + + + +Move query hash computation from pg_stat_statements to the core server (Julien Rouhaud) + + + +Extension pg_stat_statements will need to enable hash computation via the compute_query_id server variable to function properly. +pg_stat_statements can now use a custom hash computation method. + + + + + + + +Allow pg_stat_statements to track top and nested statements independently (Julien Rohaud) + + + +Previously, when tracking all statements, identical top and nested statements were tracked together. + + + + + + + +Allow postgres_fdw to import table partitions if specified by IMPORT FOREIGN SCHEMA ... LIMIT TO (Matthias van de Meent) + + + +By default, only the root of partitioned tables are imported. + + + + + + + +Add postgres_fdw functions to discard cached connections (Bharath Rupireddy) + + + + + + + +Allow postgres_fdw to INSERT rows in bulk (Takayuki Tsunakawa, Tomas Vondra, Amit Langote) + + + + + + + +Add postgres_fdw function postgres_fdw_get_connections to report open foreign server connections (Bharath Rupireddy) + + + + + + + +Allow postgres_fdw to reestablish foreign server connections if necessary (Bharath Rupireddy) + + + +Previously foreign server restarts could cause foreign table access errors. + + + + + + + +Allow the cube data type to be transferred in binary mode (KaiGai Kohei) + + + + + + + +Change pageinspect block numbers to be bigints (Peter Eisentraut) + + + + + + + +Allow pageinspect to inspect GiST indexes (Andrey Borodin, Heikki Linnakangas) + + + + + + + +Allow subscripting of hstore values (Tom Lane, Dmitry Dolgov) + + + + + + + +Add pg_stat_statements_info system view to show pg_stat_statements activity (Katsuragi Yuta, Yuki Seino, Naoki Nakamichi) + + + + + + + +Allow GiST/GIN pg_trgm indexes to do equality lookups (Julien Rouhaud) + + + +This is similar to LIKE except no wildcards are honored. + + + + + + + +Allow amcheck to also check heap pages (Mark Dilger) + + + +Previously it only checked B-Tree index pages. + + + + + + + +Add contrib module old_snapshot to report the XID/time mapping used by an active old_snapshot_threshold (Robert Haas) + + + + + + + +Add contrib module pg_surgery which allows changes to row visibility (Ashutosh Sharma) + + + +This is useful for correcting database corruption. + + + + + + + +Add row counts for utility commands to pg_stat_statements (Fujii Masao, Katsuragi Yuta, Seino Yuki) + + + + + + + +Mark btree_gist functions as parallel safe (Steven Winfield) + + + + + + + +Allow pgstattuple_approx() to report on TOAST tables (Peter Eisentraut) + + + + + + + + + + + Acknowledgments + + + The following individuals (in alphabetical order) have contributed to this + release as patch authors, committers, reviewers, testers, or reporters of + issues. + + + + + + From 829daab4bbe356a2f9ae0b2ee0fc98bc2279d754 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 10 May 2021 15:45:54 +0900 Subject: [PATCH 270/671] Fix typos in operatorcmds.c Author: Kyotaro Horiguchi, Justin Pryzby Discussion: https://postgr.es/m/20210428.173633.1525059946206239295.horikyota.ntt@gmail.com --- src/backend/commands/operatorcmds.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/commands/operatorcmds.c b/src/backend/commands/operatorcmds.c index 809043c5d195d..fbd7d8d062f73 100644 --- a/src/backend/commands/operatorcmds.c +++ b/src/backend/commands/operatorcmds.c @@ -265,7 +265,7 @@ DefineOperator(List *names, List *parameters) } /* - * Look up a restriction estimator function ny name, and verify that it has + * Look up a restriction estimator function by name, and verify that it has * the correct signature and we have the permissions to attach it to an * operator. */ @@ -300,7 +300,7 @@ ValidateRestrictionEstimator(List *restrictionName) } /* - * Look up a join estimator function ny name, and verify that it has the + * Look up a join estimator function by name, and verify that it has the * correct signature and we have the permissions to attach it to an * operator. */ From 3c554100307f4e57c0881e205dbdbc173bb84d56 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 10 May 2021 10:02:33 +0200 Subject: [PATCH 271/671] Remove unused function arguments Was present in original commit 198b3716dba68544b55cb97bd120738a86d5df2d but apparently never used. --- src/interfaces/libpq/fe-trace.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c index 61a7e4896710e..37ec06fc4d01c 100644 --- a/src/interfaces/libpq/fe-trace.c +++ b/src/interfaces/libpq/fe-trace.c @@ -304,7 +304,7 @@ pqTraceOutputD(FILE *f, bool toServer, const char *message, int *cursor) /* NoticeResponse / ErrorResponse */ static void pqTraceOutputNR(FILE *f, const char *type, const char *message, int *cursor, - int length, bool regress) + bool regress) { fprintf(f, "%s\t", type); for (;;) @@ -324,7 +324,7 @@ pqTraceOutputNR(FILE *f, const char *type, const char *message, int *cursor, /* Execute(F) or ErrorResponse(B) */ static void -pqTraceOutputE(FILE *f, bool toServer, const char *message, int *cursor, int length, bool regress) +pqTraceOutputE(FILE *f, bool toServer, const char *message, int *cursor, bool regress) { if (toServer) { @@ -333,7 +333,7 @@ pqTraceOutputE(FILE *f, bool toServer, const char *message, int *cursor, int len pqTraceOutputInt32(f, message, cursor, false); } else - pqTraceOutputNR(f, "ErrorResponse", message, cursor, length, regress); + pqTraceOutputNR(f, "ErrorResponse", message, cursor, regress); } /* CopyFail */ @@ -595,7 +595,7 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer) break; case 'E': /* Execute(F) or Error Response(B) */ pqTraceOutputE(conn->Pfdebug, toServer, message, &logCursor, - length, regress); + regress); break; case 'f': /* Copy Fail */ pqTraceOutputf(conn->Pfdebug, message, &logCursor); @@ -625,7 +625,7 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer) break; case 'N': pqTraceOutputNR(conn->Pfdebug, "NoticeResponse", message, - &logCursor, length, regress); + &logCursor, regress); break; case 'P': /* Parse */ pqTraceOutputP(conn->Pfdebug, message, &logCursor, regress); From fa8fbadb934b4727a7aeff074995e799f4685a75 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 10 May 2021 11:36:26 +0200 Subject: [PATCH 272/671] Emit dummy statements for probes.d probes when disabled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When building without --enable-dtrace, emit dummy do {} while (0) statements for the stubbed-out TRACE_POSTGRESQL_foo() macros instead of empty macros that totally elide the original probe statement. This fixes the warning: suggest braces around empty body in an ‘if’ statement [-Wempty-body] introduced by b94409a02f. Author: Craig Ringer Discussion: https://www.postgresql.org/message-id/flat/20210504221531.cfvpmmdfsou6eitb%40alap3.anarazel.de --- src/backend/utils/Gen_dummy_probes.pl | 6 ++++++ src/backend/utils/Gen_dummy_probes.sed | 1 + 2 files changed, 7 insertions(+) diff --git a/src/backend/utils/Gen_dummy_probes.pl b/src/backend/utils/Gen_dummy_probes.pl index 9f3cf6baf18c8..4852103daf4b4 100644 --- a/src/backend/utils/Gen_dummy_probes.pl +++ b/src/backend/utils/Gen_dummy_probes.pl @@ -135,6 +135,12 @@ () $CondReg ||= $s; } + # s/$/ do {} while (0)/ + { + $s = s /$/ do {} while (0)/s; + $CondReg ||= $s; + } + # P { if (/^(.*)/) { print $1, "\n"; } diff --git a/src/backend/utils/Gen_dummy_probes.sed b/src/backend/utils/Gen_dummy_probes.sed index aa3db59cce7c2..6e29d86afaf68 100644 --- a/src/backend/utils/Gen_dummy_probes.sed +++ b/src/backend/utils/Gen_dummy_probes.sed @@ -19,5 +19,6 @@ s/([^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\})/(INT1, INT2, s/([^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\})/(INT1, INT2, INT3, INT4, INT5, INT6)/ s/([^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\})/(INT1, INT2, INT3, INT4, INT5, INT6, INT7)/ s/([^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\}, [^,)]\{1,\})/(INT1, INT2, INT3, INT4, INT5, INT6, INT7, INT8)/ +s/$/ do {} while (0)/ P s/(.*$/_ENABLED() (0)/ From 6206454bdac1ccd6f6ed9d811e1a1139e663a8b9 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 10 May 2021 14:36:21 +0200 Subject: [PATCH 273/671] Translation updates Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git Source-Git-Hash: 1c361d3ac016b61715d99f2055dee050397e3f13 --- src/backend/nls.mk | 2 +- src/backend/po/de.po | 15220 +++++++------- src/backend/po/es.po | 5201 +++-- src/backend/po/fr.po | 14996 ++++++++------ src/backend/po/ja.po | 12362 +++++------ src/backend/po/ko.po | 12402 +++++------ src/backend/po/ru.po | 13216 ++++++------ src/backend/po/sv.po | 5426 ++--- src/backend/po/uk.po | 27348 +++++++++++++++++++++++++ src/bin/initdb/nls.mk | 2 +- src/bin/initdb/po/cs.po | 550 +- src/bin/initdb/po/de.po | 330 +- src/bin/initdb/po/el.po | 1095 + src/bin/initdb/po/es.po | 49 +- src/bin/initdb/po/fr.po | 335 +- src/bin/initdb/po/ja.po | 787 +- src/bin/initdb/po/ko.po | 344 +- src/bin/initdb/po/ru.po | 351 +- src/bin/initdb/po/uk.po | 362 +- src/bin/pg_amcheck/nls.mk | 2 +- src/bin/pg_amcheck/po/fr.po | 464 + src/bin/pg_archivecleanup/po/cs.po | 89 +- src/bin/pg_archivecleanup/po/es.po | 15 +- src/bin/pg_archivecleanup/po/fr.po | 2 +- src/bin/pg_archivecleanup/po/ja.po | 126 +- src/bin/pg_archivecleanup/po/ko.po | 67 +- src/bin/pg_archivecleanup/po/ru.po | 74 +- src/bin/pg_archivecleanup/po/uk.po | 80 +- src/bin/pg_basebackup/nls.mk | 2 +- src/bin/pg_basebackup/po/cs.po | 853 +- src/bin/pg_basebackup/po/de.po | 466 +- src/bin/pg_basebackup/po/es.po | 395 +- src/bin/pg_basebackup/po/fr.po | 526 +- src/bin/pg_basebackup/po/ja.po | 1258 +- src/bin/pg_basebackup/po/ko.po | 674 +- src/bin/pg_basebackup/po/ru.po | 690 +- src/bin/pg_basebackup/po/uk.po | 1452 ++ src/bin/pg_checksums/nls.mk | 2 +- src/bin/pg_checksums/po/cs.po | 98 +- src/bin/pg_checksums/po/de.po | 62 +- src/bin/pg_checksums/po/es.po | 62 +- src/bin/pg_checksums/po/fr.po | 90 +- src/bin/pg_checksums/po/ja.po | 155 +- src/bin/pg_checksums/po/ko.po | 91 +- src/bin/pg_checksums/po/ru.po | 98 +- src/bin/pg_checksums/po/uk.po | 299 + src/bin/pg_checksums/po/zh_CN.po | 308 + src/bin/pg_config/po/cs.po | 69 +- src/bin/pg_config/po/de.po | 28 +- src/bin/pg_config/po/es.po | 11 +- src/bin/pg_config/po/fr.po | 65 +- src/bin/pg_config/po/ja.po | 186 +- src/bin/pg_config/po/ko.po | 46 +- src/bin/pg_config/po/ru.po | 49 +- src/bin/pg_config/po/uk.po | 76 +- src/bin/pg_controldata/po/cs.po | 202 +- src/bin/pg_controldata/po/es.po | 19 +- src/bin/pg_controldata/po/ja.po | 233 +- src/bin/pg_controldata/po/ko.po | 172 +- src/bin/pg_controldata/po/ru.po | 178 +- src/bin/pg_controldata/po/uk.po | 268 +- src/bin/pg_ctl/nls.mk | 2 +- src/bin/pg_ctl/po/cs.po | 391 +- src/bin/pg_ctl/po/de.po | 284 +- src/bin/pg_ctl/po/el.po | 1020 + src/bin/pg_ctl/po/es.po | 20 +- src/bin/pg_ctl/po/fr.po | 385 +- src/bin/pg_ctl/po/ja.po | 395 +- src/bin/pg_ctl/po/ko.po | 326 +- src/bin/pg_ctl/po/ru.po | 333 +- src/bin/pg_ctl/po/uk.po | 446 +- src/bin/pg_dump/nls.mk | 2 +- src/bin/pg_dump/po/cs.po | 1417 +- src/bin/pg_dump/po/de.po | 1060 +- src/bin/pg_dump/po/el.po | 2994 +++ src/bin/pg_dump/po/es.po | 515 +- src/bin/pg_dump/po/fr.po | 1750 +- src/bin/pg_dump/po/ja.po | 2229 +- src/bin/pg_dump/po/ko.po | 1065 +- src/bin/pg_dump/po/ru.po | 1090 +- src/bin/pg_dump/po/sv.po | 736 +- src/bin/pg_dump/po/uk.po | 2622 +++ src/bin/pg_resetwal/nls.mk | 2 +- src/bin/pg_resetwal/po/cs.po | 311 +- src/bin/pg_resetwal/po/es.po | 37 +- src/bin/pg_resetwal/po/ja.po | 471 +- src/bin/pg_resetwal/po/ko.po | 219 +- src/bin/pg_resetwal/po/ru.po | 229 +- src/bin/pg_resetwal/po/uk.po | 618 + src/bin/pg_rewind/nls.mk | 2 +- src/bin/pg_rewind/po/cs.po | 544 +- src/bin/pg_rewind/po/de.po | 518 +- src/bin/pg_rewind/po/es.po | 267 +- src/bin/pg_rewind/po/fr.po | 551 +- src/bin/pg_rewind/po/ja.po | 623 +- src/bin/pg_rewind/po/ru.po | 477 +- src/bin/pg_rewind/po/sv.po | 198 +- src/bin/pg_rewind/po/uk.po | 913 + src/bin/pg_test_fsync/po/de.po | 105 +- src/bin/pg_test_fsync/po/es.po | 2 +- src/bin/pg_test_fsync/po/fr.po | 110 +- src/bin/pg_test_fsync/po/ru.po | 70 +- src/bin/pg_test_fsync/po/uk.po | 96 +- src/bin/pg_test_timing/po/de.po | 58 +- src/bin/pg_test_timing/po/fr.po | 56 +- src/bin/pg_upgrade/nls.mk | 2 +- src/bin/pg_upgrade/po/cs.po | 564 +- src/bin/pg_upgrade/po/de.po | 526 +- src/bin/pg_upgrade/po/es.po | 171 +- src/bin/pg_upgrade/po/fr.po | 612 +- src/bin/pg_upgrade/po/ja.po | 556 +- src/bin/pg_upgrade/po/ko.po | 521 +- src/bin/pg_upgrade/po/ru.po | 549 +- src/bin/pg_upgrade/po/sv.po | 164 +- src/bin/pg_upgrade/po/uk.po | 1623 ++ src/bin/pg_verifybackup/nls.mk | 2 +- src/bin/pg_verifybackup/po/de.po | 501 + src/bin/pg_verifybackup/po/es.po | 477 + src/bin/pg_verifybackup/po/fr.po | 174 +- src/bin/pg_verifybackup/po/ja.po | 469 + src/bin/pg_verifybackup/po/ko.po | 467 + src/bin/pg_verifybackup/po/ru.po | 479 + src/bin/pg_verifybackup/po/sv.po | 88 +- src/bin/pg_verifybackup/po/uk.po | 453 + src/bin/pg_verifybackup/po/zh_CN.po | 467 + src/bin/pg_waldump/nls.mk | 2 +- src/bin/pg_waldump/po/cs.po | 180 +- src/bin/pg_waldump/po/es.po | 54 +- src/bin/pg_waldump/po/ja.po | 246 +- src/bin/pg_waldump/po/ru.po | 166 +- src/bin/pg_waldump/po/uk.po | 293 + src/bin/pg_waldump/po/zh_CN.po | 160 +- src/bin/psql/nls.mk | 2 +- src/bin/psql/po/cs.po | 3422 ++-- src/bin/psql/po/de.po | 3200 +-- src/bin/psql/po/el.po | 6753 ++++++ src/bin/psql/po/es.po | 675 +- src/bin/psql/po/fr.po | 3932 ++-- src/bin/psql/po/ja.po | 4190 ++-- src/bin/psql/po/ko.po | 3139 +-- src/bin/psql/po/ru.po | 3186 +-- src/bin/psql/po/sv.po | 536 +- src/bin/psql/po/uk.po | 3142 +-- src/bin/scripts/nls.mk | 2 +- src/bin/scripts/po/cs.po | 641 +- src/bin/scripts/po/de.po | 586 +- src/bin/scripts/po/es.po | 91 +- src/bin/scripts/po/fr.po | 733 +- src/bin/scripts/po/ja.po | 803 +- src/bin/scripts/po/ko.po | 472 +- src/bin/scripts/po/ru.po | 515 +- src/bin/scripts/po/sv.po | 26 +- src/bin/scripts/po/uk.po | 1089 + src/interfaces/ecpg/ecpglib/po/es.po | 2 +- src/interfaces/ecpg/ecpglib/po/fr.po | 2 +- src/interfaces/ecpg/ecpglib/po/ru.po | 8 +- src/interfaces/ecpg/ecpglib/po/uk.po | 19 +- src/interfaces/ecpg/preproc/po/cs.po | 195 +- src/interfaces/ecpg/preproc/po/de.po | 218 +- src/interfaces/ecpg/preproc/po/es.po | 156 +- src/interfaces/ecpg/preproc/po/fr.po | 219 +- src/interfaces/ecpg/preproc/po/ko.po | 186 +- src/interfaces/ecpg/preproc/po/ru.po | 202 +- src/interfaces/ecpg/preproc/po/uk.po | 188 +- src/interfaces/libpq/nls.mk | 2 +- src/interfaces/libpq/po/cs.po | 638 +- src/interfaces/libpq/po/de.po | 777 +- src/interfaces/libpq/po/el.po | 1422 ++ src/interfaces/libpq/po/es.po | 267 +- src/interfaces/libpq/po/fr.po | 889 +- src/interfaces/libpq/po/ja.po | 620 +- src/interfaces/libpq/po/ko.po | 574 +- src/interfaces/libpq/po/ru.po | 580 +- src/interfaces/libpq/po/sv.po | 263 +- src/interfaces/libpq/po/uk.po | 629 +- src/interfaces/libpq/po/zh_CN.po | 609 +- src/pl/plperl/nls.mk | 2 +- src/pl/plperl/po/es.po | 2 +- src/pl/plperl/po/ru.po | 88 +- src/pl/plperl/po/uk.po | 222 + src/pl/plpgsql/src/po/cs.po | 270 +- src/pl/plpgsql/src/po/de.po | 387 +- src/pl/plpgsql/src/po/es.po | 6 +- src/pl/plpgsql/src/po/fr.po | 393 +- src/pl/plpgsql/src/po/ko.po | 224 +- src/pl/plpgsql/src/po/ru.po | 312 +- src/pl/plpgsql/src/po/sv.po | 6 +- src/pl/plpgsql/src/po/uk.po | 383 +- src/pl/plpython/po/es.po | 30 +- src/pl/plpython/po/ru.po | 178 +- src/pl/plpython/po/uk.po | 164 +- src/pl/tcl/po/es.po | 2 +- src/pl/tcl/po/ru.po | 32 +- src/pl/tcl/po/uk.po | 58 +- 194 files changed, 132793 insertions(+), 71771 deletions(-) create mode 100644 src/backend/po/uk.po create mode 100644 src/bin/initdb/po/el.po create mode 100644 src/bin/pg_amcheck/po/fr.po create mode 100644 src/bin/pg_basebackup/po/uk.po create mode 100644 src/bin/pg_checksums/po/uk.po create mode 100644 src/bin/pg_checksums/po/zh_CN.po create mode 100644 src/bin/pg_ctl/po/el.po create mode 100644 src/bin/pg_dump/po/el.po create mode 100644 src/bin/pg_dump/po/uk.po create mode 100644 src/bin/pg_resetwal/po/uk.po create mode 100644 src/bin/pg_rewind/po/uk.po create mode 100644 src/bin/pg_upgrade/po/uk.po create mode 100644 src/bin/pg_verifybackup/po/de.po create mode 100644 src/bin/pg_verifybackup/po/es.po create mode 100644 src/bin/pg_verifybackup/po/ja.po create mode 100644 src/bin/pg_verifybackup/po/ko.po create mode 100644 src/bin/pg_verifybackup/po/ru.po create mode 100644 src/bin/pg_verifybackup/po/uk.po create mode 100644 src/bin/pg_verifybackup/po/zh_CN.po create mode 100644 src/bin/pg_waldump/po/uk.po create mode 100644 src/bin/psql/po/el.po create mode 100644 src/bin/scripts/po/uk.po create mode 100644 src/interfaces/libpq/po/el.po create mode 100644 src/pl/plperl/po/uk.po diff --git a/src/backend/nls.mk b/src/backend/nls.mk index f2788a076d0d9..771b58d4f45bf 100644 --- a/src/backend/nls.mk +++ b/src/backend/nls.mk @@ -1,6 +1,6 @@ # src/backend/nls.mk CATALOG_NAME = postgres -AVAIL_LANGUAGES = de es fr id it ja ko pl pt_BR ru sv tr zh_CN +AVAIL_LANGUAGES = de es fr id it ja ko pl pt_BR ru sv tr uk zh_CN GETTEXT_FILES = + gettext-files GETTEXT_TRIGGERS = $(BACKEND_COMMON_GETTEXT_TRIGGERS) \ GUC_check_errmsg \ diff --git a/src/backend/po/de.po b/src/backend/po/de.po index fd3b640c1626d..e77e20fb1c961 100644 --- a/src/backend/po/de.po +++ b/src/backend/po/de.po @@ -1,14 +1,14 @@ # German message translation file for PostgreSQL server -# Peter Eisentraut , 2001 - 2020. +# Peter Eisentraut , 2001 - 2021. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 13\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-04-26 02:10+0000\n" -"PO-Revision-Date: 2020-04-26 11:59+0200\n" +"POT-Creation-Date: 2021-05-08 01:40+0000\n" +"PO-Revision-Date: 2021-05-10 11:57+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -25,36 +25,36 @@ msgid "not recorded" msgstr "nicht aufgezeichnet" #: ../common/controldata_utils.c:68 ../common/controldata_utils.c:73 -#: commands/copy.c:3500 commands/extension.c:3423 utils/adt/genfile.c:147 +#: commands/copyfrom.c:1516 commands/extension.c:3455 utils/adt/genfile.c:128 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %m" #: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 -#: access/transam/timeline.c:348 access/transam/twophase.c:1276 -#: access/transam/xlog.c:3501 access/transam/xlog.c:4726 -#: access/transam/xlog.c:11093 access/transam/xlog.c:11106 -#: access/transam/xlog.c:11559 access/transam/xlog.c:11639 -#: access/transam/xlog.c:11678 access/transam/xlog.c:11721 -#: access/transam/xlogfuncs.c:662 access/transam/xlogfuncs.c:681 -#: commands/extension.c:3433 libpq/hba.c:499 replication/logical/origin.c:714 -#: replication/logical/origin.c:750 replication/logical/reorderbuffer.c:3607 -#: replication/logical/snapbuild.c:1741 replication/logical/snapbuild.c:1783 -#: replication/logical/snapbuild.c:1811 replication/logical/snapbuild.c:1838 -#: replication/slot.c:1539 replication/slot.c:1580 replication/walsender.c:550 -#: storage/file/copydir.c:195 utils/adt/genfile.c:164 utils/adt/misc.c:765 -#: utils/cache/relmapper.c:741 +#: access/transam/timeline.c:143 access/transam/timeline.c:362 +#: access/transam/twophase.c:1271 access/transam/xlog.c:3553 +#: access/transam/xlog.c:4781 access/transam/xlog.c:11363 +#: access/transam/xlog.c:11376 access/transam/xlog.c:11829 +#: access/transam/xlog.c:11909 access/transam/xlog.c:11946 +#: access/transam/xlog.c:12006 access/transam/xlogfuncs.c:703 +#: access/transam/xlogfuncs.c:722 commands/extension.c:3465 libpq/hba.c:536 +#: replication/basebackup.c:2020 replication/logical/origin.c:729 +#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4876 +#: replication/logical/snapbuild.c:1733 replication/logical/snapbuild.c:1775 +#: replication/logical/snapbuild.c:1802 replication/slot.c:1658 +#: replication/slot.c:1699 replication/walsender.c:544 +#: storage/file/buffile.c:445 storage/file/copydir.c:195 +#: utils/adt/genfile.c:203 utils/adt/misc.c:859 utils/cache/relmapper.c:741 #, c-format msgid "could not read file \"%s\": %m" msgstr "konnte Datei »%s« nicht lesen: %m" #: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 -#: access/transam/twophase.c:1279 access/transam/xlog.c:3506 -#: access/transam/xlog.c:4731 replication/logical/origin.c:719 -#: replication/logical/origin.c:758 replication/logical/snapbuild.c:1746 -#: replication/logical/snapbuild.c:1788 replication/logical/snapbuild.c:1816 -#: replication/logical/snapbuild.c:1843 replication/slot.c:1543 -#: replication/slot.c:1584 replication/walsender.c:555 +#: access/transam/xlog.c:3558 access/transam/xlog.c:4786 +#: replication/basebackup.c:2024 replication/logical/origin.c:734 +#: replication/logical/origin.c:773 replication/logical/snapbuild.c:1738 +#: replication/logical/snapbuild.c:1780 replication/logical/snapbuild.c:1807 +#: replication/slot.c:1662 replication/slot.c:1703 replication/walsender.c:549 #: utils/cache/relmapper.c:745 #, c-format msgid "could not read file \"%s\": read %d of %zu" @@ -62,20 +62,20 @@ msgstr "konnte Datei »%s« nicht lesen: %d von %zu gelesen" #: ../common/controldata_utils.c:112 ../common/controldata_utils.c:117 #: ../common/controldata_utils.c:256 ../common/controldata_utils.c:259 -#: access/heap/rewriteheap.c:1181 access/heap/rewriteheap.c:1284 -#: access/transam/timeline.c:378 access/transam/timeline.c:422 -#: access/transam/timeline.c:500 access/transam/twophase.c:1288 -#: access/transam/twophase.c:1673 access/transam/xlog.c:3373 -#: access/transam/xlog.c:3541 access/transam/xlog.c:3546 -#: access/transam/xlog.c:3874 access/transam/xlog.c:4696 -#: access/transam/xlog.c:5623 access/transam/xlogfuncs.c:687 -#: commands/copy.c:1815 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 -#: replication/logical/origin.c:652 replication/logical/origin.c:791 -#: replication/logical/reorderbuffer.c:3665 -#: replication/logical/snapbuild.c:1653 replication/logical/snapbuild.c:1851 -#: replication/slot.c:1430 replication/slot.c:1591 replication/walsender.c:565 -#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:702 -#: storage/file/fd.c:3417 storage/file/fd.c:3520 utils/cache/relmapper.c:753 +#: access/heap/rewriteheap.c:1185 access/heap/rewriteheap.c:1288 +#: access/transam/timeline.c:392 access/transam/timeline.c:438 +#: access/transam/timeline.c:516 access/transam/twophase.c:1283 +#: access/transam/twophase.c:1682 access/transam/xlog.c:3425 +#: access/transam/xlog.c:3593 access/transam/xlog.c:3598 +#: access/transam/xlog.c:3925 access/transam/xlog.c:4751 +#: access/transam/xlog.c:5676 access/transam/xlogfuncs.c:728 +#: commands/copyfrom.c:1576 commands/copyto.c:328 libpq/be-fsstubs.c:462 +#: libpq/be-fsstubs.c:533 replication/logical/origin.c:667 +#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:4934 +#: replication/logical/snapbuild.c:1642 replication/logical/snapbuild.c:1815 +#: replication/slot.c:1549 replication/slot.c:1710 replication/walsender.c:559 +#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 +#: storage/file/fd.c:3534 storage/file/fd.c:3637 utils/cache/relmapper.c:753 #: utils/cache/relmapper.c:892 #, c-format msgid "could not close file \"%s\": %m" @@ -100,172 +100,126 @@ msgstr "" "wäre inkompatibel mit diesem Datenverzeichnis." #: ../common/controldata_utils.c:197 ../common/controldata_utils.c:203 -#: ../common/file_utils.c:224 ../common/file_utils.c:283 -#: ../common/file_utils.c:357 access/heap/rewriteheap.c:1267 -#: access/transam/timeline.c:112 access/transam/timeline.c:237 -#: access/transam/timeline.c:334 access/transam/twophase.c:1232 -#: access/transam/xlog.c:3275 access/transam/xlog.c:3415 -#: access/transam/xlog.c:3456 access/transam/xlog.c:3654 -#: access/transam/xlog.c:3739 access/transam/xlog.c:3842 -#: access/transam/xlog.c:4716 access/transam/xlogutils.c:808 -#: postmaster/syslogger.c:1488 replication/basebackup.c:621 -#: replication/basebackup.c:1590 replication/logical/origin.c:704 -#: replication/logical/reorderbuffer.c:2466 -#: replication/logical/reorderbuffer.c:2833 -#: replication/logical/reorderbuffer.c:3587 -#: replication/logical/snapbuild.c:1608 replication/logical/snapbuild.c:1712 -#: replication/slot.c:1511 replication/walsender.c:523 -#: replication/walsender.c:2498 storage/file/copydir.c:161 -#: storage/file/fd.c:677 storage/file/fd.c:3404 storage/file/fd.c:3491 -#: storage/smgr/md.c:475 utils/cache/relmapper.c:724 -#: utils/cache/relmapper.c:836 utils/error/elog.c:1858 -#: utils/init/miscinit.c:1316 utils/init/miscinit.c:1450 -#: utils/init/miscinit.c:1527 utils/misc/guc.c:8262 utils/misc/guc.c:8294 +#: ../common/file_utils.c:232 ../common/file_utils.c:291 +#: ../common/file_utils.c:365 access/heap/rewriteheap.c:1271 +#: access/transam/timeline.c:111 access/transam/timeline.c:251 +#: access/transam/timeline.c:348 access/transam/twophase.c:1227 +#: access/transam/xlog.c:3311 access/transam/xlog.c:3467 +#: access/transam/xlog.c:3508 access/transam/xlog.c:3706 +#: access/transam/xlog.c:3790 access/transam/xlog.c:3893 +#: access/transam/xlog.c:4771 access/transam/xlogutils.c:817 +#: postmaster/syslogger.c:1487 replication/basebackup.c:616 +#: replication/basebackup.c:1610 replication/logical/origin.c:719 +#: replication/logical/reorderbuffer.c:3544 +#: replication/logical/reorderbuffer.c:4091 +#: replication/logical/reorderbuffer.c:4856 +#: replication/logical/snapbuild.c:1597 replication/logical/snapbuild.c:1704 +#: replication/slot.c:1630 replication/walsender.c:517 +#: replication/walsender.c:2527 storage/file/copydir.c:161 +#: storage/file/fd.c:713 storage/file/fd.c:3521 storage/file/fd.c:3608 +#: storage/smgr/md.c:502 utils/cache/relmapper.c:724 +#: utils/cache/relmapper.c:836 utils/error/elog.c:1938 +#: utils/init/miscinit.c:1346 utils/init/miscinit.c:1480 +#: utils/init/miscinit.c:1557 utils/misc/guc.c:8637 utils/misc/guc.c:8669 #, c-format msgid "could not open file \"%s\": %m" msgstr "konnte Datei »%s« nicht öffnen: %m" #: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 -#: access/transam/twophase.c:1646 access/transam/twophase.c:1655 -#: access/transam/xlog.c:10850 access/transam/xlog.c:10888 -#: access/transam/xlog.c:11301 access/transam/xlogfuncs.c:741 -#: postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 -#: utils/cache/relmapper.c:870 +#: access/transam/twophase.c:1655 access/transam/twophase.c:1664 +#: access/transam/xlog.c:11120 access/transam/xlog.c:11158 +#: access/transam/xlog.c:11571 access/transam/xlogfuncs.c:782 +#: postmaster/postmaster.c:5641 postmaster/syslogger.c:1498 +#: postmaster/syslogger.c:1511 utils/cache/relmapper.c:870 #, c-format msgid "could not write file \"%s\": %m" msgstr "konnte Datei »%s« nicht schreiben: %m" #: ../common/controldata_utils.c:239 ../common/controldata_utils.c:245 -#: ../common/file_utils.c:295 ../common/file_utils.c:365 -#: access/heap/rewriteheap.c:961 access/heap/rewriteheap.c:1175 -#: access/heap/rewriteheap.c:1278 access/transam/timeline.c:416 -#: access/transam/timeline.c:494 access/transam/twophase.c:1667 -#: access/transam/xlog.c:3366 access/transam/xlog.c:3535 -#: access/transam/xlog.c:4689 access/transam/xlog.c:10358 -#: access/transam/xlog.c:10385 replication/logical/snapbuild.c:1646 -#: replication/slot.c:1416 replication/slot.c:1521 storage/file/fd.c:694 -#: storage/file/fd.c:3512 storage/smgr/md.c:921 storage/smgr/md.c:962 -#: storage/sync/sync.c:395 utils/cache/relmapper.c:885 utils/misc/guc.c:8045 +#: ../common/file_utils.c:303 ../common/file_utils.c:373 +#: access/heap/rewriteheap.c:967 access/heap/rewriteheap.c:1179 +#: access/heap/rewriteheap.c:1282 access/transam/timeline.c:432 +#: access/transam/timeline.c:510 access/transam/twophase.c:1676 +#: access/transam/xlog.c:3418 access/transam/xlog.c:3587 +#: access/transam/xlog.c:4744 access/transam/xlog.c:10611 +#: access/transam/xlog.c:10652 replication/logical/snapbuild.c:1635 +#: replication/slot.c:1535 replication/slot.c:1640 storage/file/fd.c:730 +#: storage/file/fd.c:3629 storage/smgr/md.c:950 storage/smgr/md.c:991 +#: storage/sync/sync.c:417 utils/cache/relmapper.c:885 utils/misc/guc.c:8424 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fsyncen: %m" -#: ../common/exec.c:137 ../common/exec.c:254 ../common/exec.c:300 +#: ../common/cryptohash_openssl.c:104 ../common/exec.c:522 ../common/exec.c:567 +#: ../common/exec.c:659 ../common/hmac_openssl.c:103 ../common/psprintf.c:143 +#: ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 +#: ../port/path.c:685 access/transam/twophase.c:1338 access/transam/xlog.c:6633 +#: lib/dshash.c:246 libpq/auth.c:1483 libpq/auth.c:1551 libpq/auth.c:2109 +#: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:347 +#: postmaster/bgworker.c:937 postmaster/postmaster.c:2513 +#: postmaster/postmaster.c:4156 postmaster/postmaster.c:4826 +#: postmaster/postmaster.c:5566 postmaster/postmaster.c:5930 +#: replication/libpqwalreceiver/libpqwalreceiver.c:282 +#: replication/logical/logical.c:206 replication/walsender.c:588 +#: storage/buffer/localbuf.c:442 storage/file/fd.c:882 storage/file/fd.c:1352 +#: storage/file/fd.c:1513 storage/file/fd.c:2321 storage/ipc/procarray.c:1388 +#: storage/ipc/procarray.c:2182 storage/ipc/procarray.c:2189 +#: storage/ipc/procarray.c:2678 storage/ipc/procarray.c:3302 +#: utils/adt/cryptohashfuncs.c:46 utils/adt/cryptohashfuncs.c:66 +#: utils/adt/formatting.c:1699 utils/adt/formatting.c:1823 +#: utils/adt/formatting.c:1948 utils/adt/pg_locale.c:450 +#: utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 +#: utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 +#: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 +#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5069 +#: utils/misc/guc.c:5085 utils/misc/guc.c:5098 utils/misc/guc.c:8402 +#: utils/misc/tzparser.c:467 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:701 +#: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:234 +#: utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 +#: utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1082 utils/mmgr/mcxt.c:1113 +#: utils/mmgr/mcxt.c:1149 utils/mmgr/mcxt.c:1201 utils/mmgr/mcxt.c:1236 +#: utils/mmgr/mcxt.c:1271 utils/mmgr/slab.c:236 +#, c-format +msgid "out of memory" +msgstr "Speicher aufgebraucht" + +#: ../common/exec.c:136 ../common/exec.c:253 ../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "konnte aktuelles Verzeichnis nicht ermitteln: %m" -#: ../common/exec.c:156 +#: ../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "ungültige Programmdatei »%s«" -#: ../common/exec.c:206 +#: ../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "konnte Programmdatei »%s« nicht lesen" -#: ../common/exec.c:214 +#: ../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "konnte kein »%s« zum Ausführen finden" -#: ../common/exec.c:270 ../common/exec.c:309 utils/init/miscinit.c:395 +#: ../common/exec.c:269 ../common/exec.c:308 utils/init/miscinit.c:425 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "konnte nicht in Verzeichnis »%s« wechseln: %m" -#: ../common/exec.c:287 access/transam/xlog.c:10722 -#: replication/basebackup.c:1415 utils/adt/misc.c:336 +#: ../common/exec.c:286 access/transam/xlog.c:10994 +#: replication/basebackup.c:1428 utils/adt/misc.c:340 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht lesen: %m" -#: ../common/exec.c:410 -#, c-format -msgid "pclose failed: %m" -msgstr "pclose fehlgeschlagen: %m" - -#: ../common/exec.c:539 ../common/exec.c:584 ../common/exec.c:676 -#: ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 -#: ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1338 -#: access/transam/xlog.c:6486 lib/dshash.c:246 libpq/auth.c:1090 -#: libpq/auth.c:1491 libpq/auth.c:1559 libpq/auth.c:2089 -#: libpq/be-secure-gssapi.c:480 postmaster/bgworker.c:336 -#: postmaster/bgworker.c:886 postmaster/postmaster.c:2488 -#: postmaster/postmaster.c:2510 postmaster/postmaster.c:4148 -#: postmaster/postmaster.c:4842 postmaster/postmaster.c:4912 -#: postmaster/postmaster.c:5597 postmaster/postmaster.c:5958 -#: replication/libpqwalreceiver/libpqwalreceiver.c:259 -#: replication/logical/logical.c:176 storage/buffer/localbuf.c:442 -#: storage/file/fd.c:832 storage/file/fd.c:1302 storage/file/fd.c:1463 -#: storage/file/fd.c:2268 storage/ipc/procarray.c:1047 -#: storage/ipc/procarray.c:1543 storage/ipc/procarray.c:1550 -#: storage/ipc/procarray.c:1974 storage/ipc/procarray.c:2599 -#: utils/adt/cryptohashes.c:45 utils/adt/cryptohashes.c:65 -#: utils/adt/formatting.c:1698 utils/adt/formatting.c:1822 -#: utils/adt/formatting.c:1947 utils/adt/pg_locale.c:483 -#: utils/adt/pg_locale.c:647 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 -#: utils/hash/dynahash.c:450 utils/hash/dynahash.c:559 -#: utils/hash/dynahash.c:1071 utils/mb/mbutils.c:401 utils/mb/mbutils.c:428 -#: utils/mb/mbutils.c:757 utils/mb/mbutils.c:783 utils/misc/guc.c:4856 -#: utils/misc/guc.c:4872 utils/misc/guc.c:4885 utils/misc/guc.c:8023 -#: utils/misc/tzparser.c:467 utils/mmgr/aset.c:475 utils/mmgr/dsa.c:701 -#: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:233 -#: utils/mmgr/mcxt.c:821 utils/mmgr/mcxt.c:857 utils/mmgr/mcxt.c:895 -#: utils/mmgr/mcxt.c:933 utils/mmgr/mcxt.c:969 utils/mmgr/mcxt.c:1000 -#: utils/mmgr/mcxt.c:1036 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1123 -#: utils/mmgr/mcxt.c:1158 utils/mmgr/slab.c:234 -#, c-format -msgid "out of memory" -msgstr "Speicher aufgebraucht" - -#: ../common/fe_archive.c:57 -#, fuzzy, c-format -#| msgid "could not send replication command \"%s\": %s" -msgid "could not use restore_command with %%r alias" -msgstr "konnte Replikationsbefehl »%s« nicht senden: %s" - -#: ../common/fe_archive.c:78 -#, fuzzy, c-format -#| msgid "archive file \"%s\" has wrong size: %lu instead of %lu" -msgid "unexpected file size for \"%s\": %lu instead of %lu" -msgstr "Archivdatei »%s« hat falsche Größe: %lu statt %lu" - -#: ../common/fe_archive.c:89 -#, fuzzy, c-format -#| msgid "could not restore file \"%s\" from archive: %s" -msgid "could not open file \"%s\" restored from archive: %m" -msgstr "konnte Datei »%s« nicht aus Archiv wiederherstellen: %s" - -#: ../common/fe_archive.c:101 ../common/file_utils.c:79 -#: ../common/file_utils.c:181 access/transam/twophase.c:1244 -#: access/transam/xlog.c:10826 access/transam/xlog.c:10864 -#: access/transam/xlog.c:11081 access/transam/xlogarchive.c:110 -#: access/transam/xlogarchive.c:226 commands/copy.c:1943 commands/copy.c:3510 -#: commands/extension.c:3412 commands/tablespace.c:795 -#: commands/tablespace.c:886 guc-file.l:1061 replication/basebackup.c:444 -#: replication/basebackup.c:627 replication/basebackup.c:700 -#: replication/logical/snapbuild.c:1522 storage/file/copydir.c:68 -#: storage/file/copydir.c:107 storage/file/fd.c:1814 storage/file/fd.c:3088 -#: storage/file/fd.c:3270 storage/file/fd.c:3356 utils/adt/dbsize.c:70 -#: utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:127 -#: utils/adt/genfile.c:380 utils/adt/genfile.c:606 +#: ../common/exec.c:409 libpq/pqcomm.c:746 storage/ipc/latch.c:1064 +#: storage/ipc/latch.c:1233 storage/ipc/latch.c:1462 storage/ipc/latch.c:1614 +#: storage/ipc/latch.c:1730 #, c-format -msgid "could not stat file \"%s\": %m" -msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" - -#: ../common/fe_archive.c:116 -#, fuzzy, c-format -#| msgid "restore_command is not set on the target cluster" -msgid "restore_command failed due to the signal: %s" -msgstr "restore_command ist im Ziel-Cluster nicht gesetzt" - -#: ../common/fe_archive.c:125 -#, fuzzy, c-format -#| msgid "could not restore file \"%s\" from archive: %s" -msgid "could not restore file \"%s\" from archive" -msgstr "konnte Datei »%s« nicht aus Archiv wiederherstellen: %s" +msgid "%s() failed: %m" +msgstr "%s() fehlgeschlagen: %m" #: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 #: ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 @@ -281,121 +235,165 @@ msgstr "Speicher aufgebraucht\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" -#: ../common/file_utils.c:158 ../common/pgfnames.c:48 commands/tablespace.c:718 -#: commands/tablespace.c:728 postmaster/postmaster.c:1497 -#: storage/file/fd.c:2671 storage/file/reinit.c:122 utils/adt/misc.c:258 +#: ../common/file_utils.c:87 ../common/file_utils.c:451 +#: ../common/file_utils.c:455 access/transam/twophase.c:1239 +#: access/transam/xlog.c:11096 access/transam/xlog.c:11134 +#: access/transam/xlog.c:11351 access/transam/xlogarchive.c:110 +#: access/transam/xlogarchive.c:227 commands/copyfrom.c:1526 +#: commands/copyto.c:734 commands/extension.c:3444 commands/tablespace.c:807 +#: commands/tablespace.c:898 guc-file.l:1060 replication/basebackup.c:439 +#: replication/basebackup.c:622 replication/basebackup.c:698 +#: replication/logical/snapbuild.c:1514 storage/file/copydir.c:68 +#: storage/file/copydir.c:107 storage/file/fd.c:1863 storage/file/fd.c:1949 +#: storage/file/fd.c:3149 storage/file/fd.c:3353 utils/adt/dbsize.c:70 +#: utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:419 +#: utils/adt/genfile.c:645 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" + +#: ../common/file_utils.c:166 ../common/pgfnames.c:48 commands/tablespace.c:730 +#: commands/tablespace.c:740 postmaster/postmaster.c:1512 +#: storage/file/fd.c:2724 storage/file/reinit.c:122 utils/adt/misc.c:262 #: utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht öffnen: %m" -#: ../common/file_utils.c:192 ../common/pgfnames.c:69 storage/file/fd.c:2683 +#: ../common/file_utils.c:200 ../common/pgfnames.c:69 storage/file/fd.c:2736 #, c-format msgid "could not read directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht lesen: %m" -#: ../common/file_utils.c:375 access/transam/xlogarchive.c:411 -#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1665 -#: replication/slot.c:609 replication/slot.c:1302 replication/slot.c:1444 -#: storage/file/fd.c:712 utils/time/snapmgr.c:1350 +#: ../common/file_utils.c:383 access/transam/xlogarchive.c:412 +#: postmaster/syslogger.c:1522 replication/logical/snapbuild.c:1654 +#: replication/slot.c:668 replication/slot.c:1421 replication/slot.c:1563 +#: storage/file/fd.c:748 storage/file/fd.c:846 utils/time/snapmgr.c:1265 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "konnte Datei »%s« nicht in »%s« umbenennen: %m" -#: ../common/jsonapi.c:1064 +#: ../common/hex.c:54 +#, fuzzy, c-format +#| msgid "invalid hexadecimal digit: \"%c\"" +msgid "invalid hexadecimal digit" +msgstr "ungültige hexadezimale Ziffer: »%c«" + +#: ../common/hex.c:59 +#, fuzzy, c-format +#| msgid "invalid hexadecimal digit: \"%c\"" +msgid "invalid hexadecimal digit: \"%.*s\"" +msgstr "ungültige hexadezimale Ziffer: »%c«" + +#: ../common/hex.c:90 +#, c-format +msgid "overflow of destination buffer in hex encoding" +msgstr "" + +#: ../common/hex.c:136 ../common/hex.c:141 +#, c-format +msgid "invalid hexadecimal data: odd number of digits" +msgstr "ungültige hexadezimale Daten: ungerade Anzahl Ziffern" + +#: ../common/hex.c:152 +#, c-format +msgid "overflow of destination buffer in hex decoding" +msgstr "" + +#: ../common/jsonapi.c:1066 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "Escape-Sequenz »\\%s« ist nicht gültig." -#: ../common/jsonapi.c:1067 +#: ../common/jsonapi.c:1069 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Zeichen mit Wert 0x%02x muss escapt werden." -#: ../common/jsonapi.c:1070 +#: ../common/jsonapi.c:1072 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Ende der Eingabe erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1073 +#: ../common/jsonapi.c:1075 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Array-Element oder »]« erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1076 +#: ../common/jsonapi.c:1078 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "»,« oder »]« erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1079 +#: ../common/jsonapi.c:1081 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "»:« erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1082 +#: ../common/jsonapi.c:1084 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "JSON-Wert erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1085 +#: ../common/jsonapi.c:1087 msgid "The input string ended unexpectedly." msgstr "Die Eingabezeichenkette endete unerwartet." -#: ../common/jsonapi.c:1087 +#: ../common/jsonapi.c:1089 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Zeichenkette oder »}« erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1090 +#: ../common/jsonapi.c:1092 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "»,« oder »}« erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1093 +#: ../common/jsonapi.c:1095 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Zeichenkette erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1096 +#: ../common/jsonapi.c:1098 #, c-format msgid "Token \"%s\" is invalid." msgstr "Token »%s« ist ungültig." -#: ../common/jsonapi.c:1099 jsonpath_scan.l:495 +#: ../common/jsonapi.c:1101 jsonpath_scan.l:499 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 kann nicht in »text« umgewandelt werden." -#: ../common/jsonapi.c:1101 +#: ../common/jsonapi.c:1103 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "Nach »\\u« müssen vier Hexadezimalziffern folgen." -#: ../common/jsonapi.c:1104 +#: ../common/jsonapi.c:1106 msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." msgstr "Unicode-Escape-Werte können nicht für Code-Punkt-Werte über 007F verwendet werden, wenn die Kodierung nicht UTF8 ist." -#: ../common/jsonapi.c:1106 jsonpath_scan.l:516 +#: ../common/jsonapi.c:1108 jsonpath_scan.l:520 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Unicode-High-Surrogate darf nicht auf ein High-Surrogate folgen." -#: ../common/jsonapi.c:1108 jsonpath_scan.l:527 jsonpath_scan.l:537 -#: jsonpath_scan.l:579 +#: ../common/jsonapi.c:1110 jsonpath_scan.l:531 jsonpath_scan.l:541 +#: jsonpath_scan.l:583 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Unicode-Low-Surrogate muss auf ein High-Surrogate folgen." -#: ../common/logging.c:236 +#: ../common/logging.c:259 #, c-format msgid "fatal: " msgstr "Fatal: " -#: ../common/logging.c:243 +#: ../common/logging.c:266 #, c-format msgid "error: " msgstr "Fehler: " -#: ../common/logging.c:250 +#: ../common/logging.c:273 #, c-format msgid "warning: " msgstr "Warnung: " @@ -415,7 +413,7 @@ msgstr "ungültiger Fork-Name" msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Gültige Fork-Namen sind »main«, »fsm«, »vm« und »init«." -#: ../common/restricted_token.c:64 libpq/auth.c:1521 libpq/auth.c:2520 +#: ../common/restricted_token.c:64 libpq/auth.c:1513 libpq/auth.c:2545 #, c-format msgid "could not load library \"%s\": error code %lu" msgstr "konnte Bibliothek »%s« nicht laden: Fehlercode %lu" @@ -455,8 +453,8 @@ msgstr "konnte Prozess nicht mit beschränktem Token neu starten: Fehlercode %lu msgid "could not get exit code from subprocess: error code %lu" msgstr "konnte Statuscode des Subprozesses nicht ermitteln: Fehlercode %lu" -#: ../common/rmtree.c:79 replication/basebackup.c:1168 -#: replication/basebackup.c:1344 +#: ../common/rmtree.c:79 replication/basebackup.c:1181 +#: replication/basebackup.c:1357 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "konnte »stat« für Datei oder Verzeichnis »%s« nicht ausführen: %m" @@ -466,31 +464,28 @@ msgstr "konnte »stat« für Datei oder Verzeichnis »%s« nicht ausführen: %m" msgid "could not remove file or directory \"%s\": %m" msgstr "konnte Datei oder Verzeichnis »%s« nicht entfernen: %m" -#: ../common/saslprep.c:1087 -#, c-format -msgid "password too long" -msgstr "Passwort zu lang" - #: ../common/stringinfo.c:306 #, c-format msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." msgstr "Kann Zeichenkettenpuffer mit %d Bytes nicht um %d Bytes vergrößern." #: ../common/stringinfo.c:310 -#, fuzzy, c-format -#| msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." +#, c-format msgid "" "out of memory\n" "\n" "Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" -msgstr "Kann Zeichenkettenpuffer mit %d Bytes nicht um %d Bytes vergrößern." +msgstr "" +"Speicher aufgebraucht\n" +"\n" +"Kann Zeichenkettenpuffer mit %d Bytes nicht um %d Bytes vergrößern.\n" #: ../common/username.c:43 #, c-format msgid "could not look up effective user ID %ld: %s" msgstr "konnte effektive Benutzer-ID %ld nicht nachschlagen: %s" -#: ../common/username.c:45 libpq/auth.c:2027 +#: ../common/username.c:45 libpq/auth.c:2045 msgid "user does not exist" msgstr "Benutzer existiert nicht" @@ -607,13 +602,13 @@ msgstr "konnte SID der PowerUsers-Gruppe nicht ermitteln: Fehlercode %lu\n" msgid "could not check access token membership: error code %lu\n" msgstr "konnte Access-Token-Mitgliedschaft nicht prüfen: Fehlercode %lu\n" -#: access/brin/brin.c:210 +#: access/brin/brin.c:214 #, c-format msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" -msgstr "" +msgstr "Aufforderung für BRIN-Range-Summarization für Index »%s« Seite %u wurde nicht aufgezeichnet" -#: access/brin/brin.c:873 access/brin/brin.c:950 access/gin/ginfast.c:1035 -#: access/transam/xlog.c:10494 access/transam/xlog.c:11032 +#: access/brin/brin.c:1015 access/brin/brin.c:1092 access/gin/ginfast.c:1035 +#: access/transam/xlog.c:10773 access/transam/xlog.c:11302 #: access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 #: access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 #: access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 @@ -622,85 +617,105 @@ msgstr "" msgid "recovery is in progress" msgstr "Wiederherstellung läuft" -#: access/brin/brin.c:874 access/brin/brin.c:951 +#: access/brin/brin.c:1016 access/brin/brin.c:1093 #, c-format msgid "BRIN control functions cannot be executed during recovery." msgstr "Während der Wiederherstellung können keine BRIN-Kontrollfunktionen ausgeführt werden." -#: access/brin/brin.c:882 access/brin/brin.c:959 +#: access/brin/brin.c:1024 access/brin/brin.c:1101 #, c-format msgid "block number out of range: %s" msgstr "Blocknummer ist außerhalb des gültigen Bereichs: %s" -#: access/brin/brin.c:905 access/brin/brin.c:982 +#: access/brin/brin.c:1047 access/brin/brin.c:1124 #, c-format msgid "\"%s\" is not a BRIN index" msgstr "»%s« ist kein BRIN-Index" -#: access/brin/brin.c:921 access/brin/brin.c:998 +#: access/brin/brin.c:1063 access/brin/brin.c:1140 +#, c-format +msgid "could not open parent table of index \"%s\"" +msgstr "konnte Basistabelle von Index »%s« nicht öffnen" + +#: access/brin/brin_bloom.c:751 access/brin/brin_bloom.c:793 +#: access/brin/brin_minmax_multi.c:2984 access/brin/brin_minmax_multi.c:3129 +#: statistics/dependencies.c:651 statistics/dependencies.c:704 +#: statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 +#: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 +#: utils/adt/pseudotypes.c:77 utils/adt/pseudotypes.c:252 +#, c-format +msgid "cannot accept a value of type %s" +msgstr "kann keinen Wert vom Typ %s annehmen" + +#: access/brin/brin_minmax_multi.c:2141 access/brin/brin_minmax_multi.c:2148 +#: access/brin/brin_minmax_multi.c:2155 utils/adt/timestamp.c:941 +#: utils/adt/timestamp.c:1515 utils/adt/timestamp.c:1982 +#: utils/adt/timestamp.c:3059 utils/adt/timestamp.c:3064 +#: utils/adt/timestamp.c:3069 utils/adt/timestamp.c:3119 +#: utils/adt/timestamp.c:3126 utils/adt/timestamp.c:3133 +#: utils/adt/timestamp.c:3153 utils/adt/timestamp.c:3160 +#: utils/adt/timestamp.c:3167 utils/adt/timestamp.c:3197 +#: utils/adt/timestamp.c:3205 utils/adt/timestamp.c:3249 +#: utils/adt/timestamp.c:3676 utils/adt/timestamp.c:3801 +#: utils/adt/timestamp.c:4349 #, c-format -msgid "could not open parent table of index %s" -msgstr "konnte Basistabelle von Index %s nicht öffnen" +msgid "interval out of range" +msgstr "interval-Wert ist außerhalb des gültigen Bereichs" #: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 #: access/brin/brin_pageops.c:843 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1434 access/spgist/spgdoinsert.c:1957 +#: access/gist/gist.c:1441 access/spgist/spgdoinsert.c:1995 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "Größe %zu der Indexzeile überschreitet Maximum %zu für Index »%s«" -#: access/brin/brin_revmap.c:382 access/brin/brin_revmap.c:388 +#: access/brin/brin_revmap.c:392 access/brin/brin_revmap.c:398 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "verfälschter BRIN-Index: inkonsistente Range-Map" -#: access/brin/brin_revmap.c:405 -#, c-format -msgid "leftover placeholder tuple detected in BRIN index \"%s\", deleting" -msgstr "übrig gebliebenes Platzhaltertupel in BRIN-Index »%s« entdeckt, wird gelöscht" - -#: access/brin/brin_revmap.c:602 +#: access/brin/brin_revmap.c:601 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "unerwarteter Seitentyp 0x%04X in BRIN-Index »%s« Block %u" #: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:151 -#: access/gist/gistvalidate.c:149 access/hash/hashvalidate.c:136 -#: access/nbtree/nbtvalidate.c:117 access/spgist/spgvalidate.c:168 +#: access/gist/gistvalidate.c:153 access/hash/hashvalidate.c:139 +#: access/nbtree/nbtvalidate.c:120 access/spgist/spgvalidate.c:189 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with invalid support number %d" msgstr "Operatorfamilie »%s« für Zugriffsmethode %s enthält Funktion %s mit ungültiger Support-Nummer %d" #: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:163 -#: access/gist/gistvalidate.c:161 access/hash/hashvalidate.c:115 -#: access/nbtree/nbtvalidate.c:129 access/spgist/spgvalidate.c:180 +#: access/gist/gistvalidate.c:165 access/hash/hashvalidate.c:118 +#: access/nbtree/nbtvalidate.c:132 access/spgist/spgvalidate.c:201 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with wrong signature for support number %d" msgstr "Operatorfamilie »%s« für Zugriffsmethode %s enthält Funktion %s mit falscher Signatur für Support-Nummer %d" #: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:182 -#: access/gist/gistvalidate.c:181 access/hash/hashvalidate.c:157 -#: access/nbtree/nbtvalidate.c:149 access/spgist/spgvalidate.c:200 +#: access/gist/gistvalidate.c:185 access/hash/hashvalidate.c:160 +#: access/nbtree/nbtvalidate.c:152 access/spgist/spgvalidate.c:221 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with invalid strategy number %d" msgstr "Operatorfamilie »%s« für Zugriffsmethode %s enthält Operator %s mit ungültiger Strategienummer %d" #: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:195 -#: access/hash/hashvalidate.c:170 access/nbtree/nbtvalidate.c:162 -#: access/spgist/spgvalidate.c:216 +#: access/hash/hashvalidate.c:173 access/nbtree/nbtvalidate.c:165 +#: access/spgist/spgvalidate.c:237 #, c-format msgid "operator family \"%s\" of access method %s contains invalid ORDER BY specification for operator %s" msgstr "Operatorfamilie »%s« für Zugriffsmethode %s enthält ungültige ORDER-BY-Angabe für Operator %s" #: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:208 -#: access/gist/gistvalidate.c:229 access/hash/hashvalidate.c:183 -#: access/nbtree/nbtvalidate.c:175 access/spgist/spgvalidate.c:232 +#: access/gist/gistvalidate.c:233 access/hash/hashvalidate.c:186 +#: access/nbtree/nbtvalidate.c:178 access/spgist/spgvalidate.c:253 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with wrong signature" msgstr "Operatorfamilie »%s« für Zugriffsmethode %s enthält Operator %s mit falscher Signatur" -#: access/brin/brin_validate.c:236 access/hash/hashvalidate.c:223 -#: access/nbtree/nbtvalidate.c:233 access/spgist/spgvalidate.c:259 +#: access/brin/brin_validate.c:236 access/hash/hashvalidate.c:226 +#: access/nbtree/nbtvalidate.c:236 access/spgist/spgvalidate.c:280 #, c-format msgid "operator family \"%s\" of access method %s is missing operator(s) for types %s and %s" msgstr "in Operatorfamilie »%s« für Zugriffsmethode %s fehlen Operatoren für Typen %s und %s" @@ -710,14 +725,14 @@ msgstr "in Operatorfamilie »%s« für Zugriffsmethode %s fehlen Operatoren für msgid "operator family \"%s\" of access method %s is missing support function(s) for types %s and %s" msgstr "in Operatorfamilie »%s« für Zugriffsmethode %s fehlen Support-Funktionen für Typen %s und %s" -#: access/brin/brin_validate.c:259 access/hash/hashvalidate.c:237 -#: access/nbtree/nbtvalidate.c:257 access/spgist/spgvalidate.c:294 +#: access/brin/brin_validate.c:259 access/hash/hashvalidate.c:240 +#: access/nbtree/nbtvalidate.c:260 access/spgist/spgvalidate.c:315 #, c-format msgid "operator class \"%s\" of access method %s is missing operator(s)" msgstr "in Operatorklasse »%s« für Zugriffsmethode %s fehlen Operatoren" #: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:250 -#: access/gist/gistvalidate.c:270 +#: access/gist/gistvalidate.c:274 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d" msgstr "in Operatorklasse »%s« für Zugriffsmethode %s fehlt Support-Funktion %d" @@ -757,13 +772,13 @@ msgstr "Anzahl der Spalten (%d) überschreitet Maximum (%d)" msgid "number of index columns (%d) exceeds limit (%d)" msgstr "Anzahl der Indexspalten (%d) überschreitet Maximum (%d)" -#: access/common/indextuple.c:187 access/spgist/spgutils.c:703 +#: access/common/indextuple.c:199 access/spgist/spgutils.c:947 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "Indexzeile benötigt %zu Bytes, Maximalgröße ist %zu" -#: access/common/printtup.c:369 tcop/fastpath.c:180 tcop/fastpath.c:530 -#: tcop/postgres.c:1904 +#: access/common/printtup.c:292 tcop/fastpath.c:106 tcop/fastpath.c:453 +#: tcop/postgres.c:1900 #, c-format msgid "unsupported format code: %d" msgstr "nicht unterstützter Formatcode: %d" @@ -791,7 +806,7 @@ msgstr "RESET darf keinen Parameterwert enthalten" msgid "unrecognized parameter namespace \"%s\"" msgstr "unbekannter Parameter-Namensraum »%s«" -#: access/common/reloptions.c:1277 utils/misc/guc.c:12014 +#: access/common/reloptions.c:1277 utils/misc/guc.c:12561 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "Tabellen mit WITH OIDS werden nicht unterstützt" @@ -841,8 +856,25 @@ msgstr "Gültige Werte sind zwischen »%f« und »%f«." msgid "invalid value for enum option \"%s\": %s" msgstr "ungültiger Wert für Enum-Option »%s«: »%s«" -#: access/common/tupdesc.c:842 parser/parse_clause.c:772 -#: parser/parse_relation.c:1803 +#: access/common/toast_compression.c:32 +#, fuzzy, c-format +#| msgid "unlink not supported with compression" +msgid "unsupported LZ4 compression method" +msgstr "Unlink wird bei Komprimierung nicht unterstützt" + +#: access/common/toast_compression.c:33 +#, fuzzy, c-format +#| msgid "This functionality requires the server to be built with libxml support." +msgid "This functionality requires the server to be built with lz4 support." +msgstr "Diese Funktionalität verlangt, dass der Server mit Libxml-Unterstützung gebaut wird." + +#: access/common/toast_compression.c:34 +#, c-format +msgid "You need to rebuild PostgreSQL using --with-lz4." +msgstr "Sie müssen PostgreSQL mit --with-lz4 neu bauen." + +#: access/common/tupdesc.c:822 parser/parse_clause.c:772 +#: parser/parse_relation.c:1838 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "Spalte »%s« kann nicht als SETOF deklariert werden" @@ -872,6 +904,11 @@ msgstr "»%s« ist kein GIN-Index" msgid "cannot access temporary indexes of other sessions" msgstr "auf temporäre Indexe anderer Sitzungen kann nicht zugegriffen werden" +#: access/gin/ginget.c:270 access/nbtree/nbtinsert.c:759 +#, c-format +msgid "failed to re-find tuple within index \"%s\"" +msgstr "konnte Tupel mit Index »%s« nicht erneut finden" + #: access/gin/ginscan.c:431 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" @@ -882,15 +919,15 @@ msgstr "alte GIN-Indexe unterstützen keine Scans des ganzen Index oder Suchen n msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Um das zu reparieren, führen Sie REINDEX INDEX \"%s\" aus." -#: access/gin/ginutil.c:144 executor/execExpr.c:1862 -#: utils/adt/arrayfuncs.c:3790 utils/adt/arrayfuncs.c:6418 -#: utils/adt/rowtypes.c:936 +#: access/gin/ginutil.c:145 executor/execExpr.c:2112 +#: utils/adt/arrayfuncs.c:3816 utils/adt/arrayfuncs.c:6444 +#: utils/adt/rowtypes.c:957 #, c-format msgid "could not identify a comparison function for type %s" msgstr "konnte keine Vergleichsfunktion für Typ %s ermitteln" #: access/gin/ginvalidate.c:92 access/gist/gistvalidate.c:93 -#: access/hash/hashvalidate.c:99 access/spgist/spgvalidate.c:99 +#: access/hash/hashvalidate.c:102 access/spgist/spgvalidate.c:102 #, c-format msgid "operator family \"%s\" of access method %s contains support function %s with different left and right input types" msgstr "Operatorfamilie »%s« für Zugriffsmethode %s enthält Support-Funktion %s mit unterschiedlichen linken und rechten Eingabetypen" @@ -900,29 +937,35 @@ msgstr "Operatorfamilie »%s« für Zugriffsmethode %s enthält Support-Funktion msgid "operator class \"%s\" of access method %s is missing support function %d or %d" msgstr "in Operatorklasse »%s« für Zugriffsmethode %s fehlt Support-Funktion %d oder %d" -#: access/gist/gist.c:753 access/gist/gistvacuum.c:408 +#: access/gin/ginvalidate.c:333 access/gist/gistvalidate.c:350 +#: access/spgist/spgvalidate.c:387 +#, c-format +msgid "support function number %d is invalid for access method %s" +msgstr "Support-Funktionsnummer %d ist ungültig für Zugriffsmethode %s" + +#: access/gist/gist.c:758 access/gist/gistvacuum.c:420 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "Index »%s« enthält ein inneres Tupel, das als ungültig markiert ist" -#: access/gist/gist.c:755 access/gist/gistvacuum.c:410 +#: access/gist/gist.c:760 access/gist/gistvacuum.c:422 #, c-format msgid "This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1." msgstr "Das kommt von einem unvollständigen Page-Split bei der Crash-Recovery vor dem Upgrade auf PostgreSQL 9.1." -#: access/gist/gist.c:756 access/gist/gistutil.c:786 access/gist/gistutil.c:797 -#: access/gist/gistvacuum.c:411 access/hash/hashutil.c:226 -#: access/hash/hashutil.c:237 access/hash/hashutil.c:249 -#: access/hash/hashutil.c:270 access/nbtree/nbtpage.c:734 -#: access/nbtree/nbtpage.c:745 +#: access/gist/gist.c:761 access/gist/gistutil.c:801 access/gist/gistutil.c:812 +#: access/gist/gistvacuum.c:423 access/hash/hashutil.c:227 +#: access/hash/hashutil.c:238 access/hash/hashutil.c:250 +#: access/hash/hashutil.c:271 access/nbtree/nbtpage.c:810 +#: access/nbtree/nbtpage.c:821 #, c-format msgid "Please REINDEX it." msgstr "Bitte führen Sie REINDEX für den Index aus." -#: access/gist/gistbuildbuffers.c:779 utils/sort/logtape.c:247 +#: access/gist/gist.c:1175 #, c-format -msgid "could not write block %ld of temporary file: %m" -msgstr "konnte Block %ld von temporärer Datei nicht schreiben: %m" +msgid "fixing incomplete split in index \"%s\", block %u" +msgstr "repariere unvollständiges Teilen in Index »%s«, Block %u" #: access/gist/gistsplit.c:446 #, c-format @@ -934,24 +977,24 @@ msgstr "Picksplit-Methode für Spalte %d von Index »%s« fehlgeschlagen" msgid "The index is not optimal. To optimize it, contact a developer, or try to use the column as the second one in the CREATE INDEX command." msgstr "Der Index ist nicht optimal. Um ihn zu optimieren, kontaktieren Sie einen Entwickler oder versuchen Sie, die Spalte als die zweite im CREATE-INDEX-Befehl zu verwenden." -#: access/gist/gistutil.c:783 access/hash/hashutil.c:223 -#: access/nbtree/nbtpage.c:731 +#: access/gist/gistutil.c:798 access/hash/hashutil.c:224 +#: access/nbtree/nbtpage.c:807 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "Index »%s« enthält unerwartete Nullseite bei Block %u" -#: access/gist/gistutil.c:794 access/hash/hashutil.c:234 -#: access/hash/hashutil.c:246 access/nbtree/nbtpage.c:742 +#: access/gist/gistutil.c:809 access/hash/hashutil.c:235 +#: access/hash/hashutil.c:247 access/nbtree/nbtpage.c:818 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "Index »%s« enthält korrupte Seite bei Block %u" -#: access/gist/gistvalidate.c:199 +#: access/gist/gistvalidate.c:203 #, c-format msgid "operator family \"%s\" of access method %s contains unsupported ORDER BY specification for operator %s" msgstr "Operatorfamilie »%s« für Zugriffsmethode %s enthält nicht unterstützte ORDER-BY-Angabe für Operator %s" -#: access/gist/gistvalidate.c:210 +#: access/gist/gistvalidate.c:214 #, c-format msgid "operator family \"%s\" of access method %s contains incorrect ORDER BY opfamily specification for operator %s" msgstr "Operatorfamilie »%s« für Zugriffsmethode %s enthält ungültige ORDER-BY-Operatorfamilienangabe für Operator %s" @@ -962,14 +1005,13 @@ msgstr "Operatorfamilie »%s« für Zugriffsmethode %s enthält ungültige ORDER msgid "could not determine which collation to use for string hashing" msgstr "konnte die für das Zeichenketten-Hashing zu verwendende Sortierfolge nicht bestimmen" -#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:702 -#: catalog/heap.c:708 commands/createas.c:206 commands/createas.c:489 -#: commands/indexcmds.c:1815 commands/tablecmds.c:15846 commands/view.c:86 -#: parser/parse_utilcmd.c:4116 regex/regc_pg_locale.c:263 -#: utils/adt/formatting.c:1665 utils/adt/formatting.c:1789 -#: utils/adt/formatting.c:1914 utils/adt/like.c:194 -#: utils/adt/like_support.c:1005 utils/adt/varchar.c:733 -#: utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1476 +#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:712 +#: catalog/heap.c:718 commands/createas.c:206 commands/createas.c:509 +#: commands/indexcmds.c:1869 commands/tablecmds.c:16827 commands/view.c:86 +#: regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 +#: utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 +#: utils/adt/like_support.c:1003 utils/adt/varchar.c:733 +#: utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1524 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Verwenden Sie die COLLATE-Klausel, um die Sortierfolge explizit zu setzen." @@ -979,8 +1021,8 @@ msgstr "Verwenden Sie die COLLATE-Klausel, um die Sortierfolge explizit zu setze msgid "index row size %zu exceeds hash maximum %zu" msgstr "Größe der Indexzeile %zu überschreitet Maximum für Hash-Index %zu" -#: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:1961 -#: access/spgist/spgutils.c:764 +#: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:1999 +#: access/spgist/spgutils.c:1008 #, c-format msgid "Values larger than a buffer page cannot be indexed." msgstr "Werte, die größer sind als eine Pufferseite, können nicht indiziert werden." @@ -1000,336 +1042,409 @@ msgstr "keine Überlaufseiten in Hash-Index »%s« mehr" msgid "hash indexes do not support whole-index scans" msgstr "Hash-Indexe unterstützen keine Scans des ganzen Index" -#: access/hash/hashutil.c:262 +#: access/hash/hashutil.c:263 #, c-format msgid "index \"%s\" is not a hash index" msgstr "Index »%s« ist kein Hash-Index" -#: access/hash/hashutil.c:268 +#: access/hash/hashutil.c:269 #, c-format msgid "index \"%s\" has wrong hash version" msgstr "Index »%s« hat falsche Hash-Version" -#: access/hash/hashvalidate.c:195 +#: access/hash/hashvalidate.c:198 #, c-format msgid "operator family \"%s\" of access method %s lacks support function for operator %s" msgstr "in Operatorfamilie »%s« für Zugriffsmethode %s fehlt Support-Funktion für Operator %s" -#: access/hash/hashvalidate.c:253 access/nbtree/nbtvalidate.c:273 +#: access/hash/hashvalidate.c:256 access/nbtree/nbtvalidate.c:276 #, c-format msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "in Operatorfamilie »%s« für Zugriffsmethode %s fehlen typübergreifende Operatoren" -#: access/heap/heapam.c:2026 +#: access/heap/heapam.c:2324 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "in einem parallelen Arbeitsprozess können keine Tupel eingefügt werden" -#: access/heap/heapam.c:2444 +#: access/heap/heapam.c:2795 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "während einer parallelen Operation können keine Tupel gelöscht werden" -#: access/heap/heapam.c:2490 +#: access/heap/heapam.c:2841 #, c-format msgid "attempted to delete invisible tuple" msgstr "Versuch ein unsichtbares Tupel zu löschen" -#: access/heap/heapam.c:2916 access/heap/heapam.c:5705 +#: access/heap/heapam.c:3266 access/heap/heapam.c:6067 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "während einer parallelen Operation können keine Tupel aktualisiert werden" -#: access/heap/heapam.c:3049 +#: access/heap/heapam.c:3399 #, c-format msgid "attempted to update invisible tuple" msgstr "Versuch ein unsichtbares Tupel zu aktualisieren" -#: access/heap/heapam.c:4360 access/heap/heapam.c:4398 -#: access/heap/heapam.c:4655 access/heap/heapam_handler.c:450 +#: access/heap/heapam.c:4720 access/heap/heapam.c:4758 +#: access/heap/heapam.c:5014 access/heap/heapam_handler.c:454 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "konnte Sperre für Zeile in Relation »%s« nicht setzen" -#: access/heap/heapam_handler.c:399 +#: access/heap/heapam_handler.c:403 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update" msgstr "das zu sperrende Tupel wurde schon durch ein gleichzeitiges Update in eine andere Partition verschoben" -#: access/heap/hio.c:345 access/heap/rewriteheap.c:662 +#: access/heap/hio.c:360 access/heap/rewriteheap.c:665 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "Zeile ist zu groß: Größe ist %zu, Maximalgröße ist %zu" -#: access/heap/rewriteheap.c:921 +#: access/heap/rewriteheap.c:927 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "konnte nicht in Datei »%s« schreiben, %d von %d geschrieben: %m" -#: access/heap/rewriteheap.c:1015 access/heap/rewriteheap.c:1134 -#: access/transam/timeline.c:315 access/transam/timeline.c:469 -#: access/transam/xlog.c:3298 access/transam/xlog.c:3470 -#: access/transam/xlog.c:4668 access/transam/xlog.c:10841 -#: access/transam/xlog.c:10879 access/transam/xlog.c:11284 -#: access/transam/xlogfuncs.c:735 postmaster/postmaster.c:4603 -#: replication/logical/origin.c:572 replication/slot.c:1363 -#: storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1329 +#: access/heap/rewriteheap.c:1020 access/heap/rewriteheap.c:1138 +#: access/transam/timeline.c:329 access/transam/timeline.c:485 +#: access/transam/xlog.c:3334 access/transam/xlog.c:3522 +#: access/transam/xlog.c:4723 access/transam/xlog.c:11111 +#: access/transam/xlog.c:11149 access/transam/xlog.c:11554 +#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4581 +#: postmaster/postmaster.c:5628 replication/logical/origin.c:587 +#: replication/slot.c:1482 storage/file/copydir.c:167 storage/smgr/md.c:218 +#: utils/time/snapmgr.c:1244 #, c-format msgid "could not create file \"%s\": %m" msgstr "konnte Datei »%s« nicht erstellen: %m" -#: access/heap/rewriteheap.c:1144 +#: access/heap/rewriteheap.c:1148 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "konnte Datei »%s« nicht auf %u kürzen: %m" -#: access/heap/rewriteheap.c:1162 access/transam/timeline.c:370 -#: access/transam/timeline.c:409 access/transam/timeline.c:486 -#: access/transam/xlog.c:3354 access/transam/xlog.c:3526 -#: access/transam/xlog.c:4680 postmaster/postmaster.c:4613 -#: postmaster/postmaster.c:4623 replication/logical/origin.c:584 -#: replication/logical/origin.c:626 replication/logical/origin.c:645 -#: replication/logical/snapbuild.c:1622 replication/slot.c:1398 -#: storage/file/copydir.c:207 utils/init/miscinit.c:1391 -#: utils/init/miscinit.c:1402 utils/init/miscinit.c:1410 utils/misc/guc.c:8006 -#: utils/misc/guc.c:8037 utils/misc/guc.c:9957 utils/misc/guc.c:9971 -#: utils/time/snapmgr.c:1334 utils/time/snapmgr.c:1341 +#: access/heap/rewriteheap.c:1166 access/transam/timeline.c:384 +#: access/transam/timeline.c:424 access/transam/timeline.c:502 +#: access/transam/xlog.c:3406 access/transam/xlog.c:3578 +#: access/transam/xlog.c:4735 postmaster/postmaster.c:4591 +#: postmaster/postmaster.c:4601 replication/logical/origin.c:599 +#: replication/logical/origin.c:641 replication/logical/origin.c:660 +#: replication/logical/snapbuild.c:1611 replication/slot.c:1517 +#: storage/file/buffile.c:506 storage/file/copydir.c:207 +#: utils/init/miscinit.c:1421 utils/init/miscinit.c:1432 +#: utils/init/miscinit.c:1440 utils/misc/guc.c:8385 utils/misc/guc.c:8416 +#: utils/misc/guc.c:10325 utils/misc/guc.c:10339 utils/time/snapmgr.c:1249 +#: utils/time/snapmgr.c:1256 #, c-format msgid "could not write to file \"%s\": %m" msgstr "konnte nicht in Datei »%s« schreiben: %m" -#: access/heap/rewriteheap.c:1252 access/transam/twophase.c:1606 -#: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:421 -#: postmaster/postmaster.c:1080 postmaster/syslogger.c:1465 -#: replication/logical/origin.c:560 replication/logical/reorderbuffer.c:3087 -#: replication/logical/snapbuild.c:1564 replication/logical/snapbuild.c:2006 -#: replication/slot.c:1495 storage/file/fd.c:752 storage/file/fd.c:3108 -#: storage/file/fd.c:3170 storage/file/reinit.c:255 storage/ipc/dsm.c:302 -#: storage/smgr/md.c:311 storage/smgr/md.c:367 storage/sync/sync.c:210 -#: utils/time/snapmgr.c:1674 +#: access/heap/rewriteheap.c:1256 access/transam/twophase.c:1615 +#: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 +#: postmaster/postmaster.c:1093 postmaster/syslogger.c:1464 +#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4358 +#: replication/logical/snapbuild.c:1556 replication/logical/snapbuild.c:1972 +#: replication/slot.c:1614 storage/file/fd.c:788 storage/file/fd.c:3169 +#: storage/file/fd.c:3231 storage/file/reinit.c:250 storage/ipc/dsm.c:315 +#: storage/smgr/md.c:344 storage/smgr/md.c:394 storage/sync/sync.c:231 +#: utils/time/snapmgr.c:1589 #, c-format msgid "could not remove file \"%s\": %m" msgstr "konnte Datei »%s« nicht löschen: %m" -#: access/heap/vacuumlazy.c:640 -#, fuzzy, c-format -#| msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" +#: access/heap/vacuumlazy.c:746 +#, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" -msgstr "automatisches aggressives Vacuum der Tabelle »%s.%s.%s«: Index-Scans: %d\n" +msgstr "automatisches aggressives Vacuum um Überlauf zu verhindern in der Tabelle »%s.%s.%s«: Index-Scans: %d\n" -#: access/heap/vacuumlazy.c:642 -#, fuzzy, c-format -#| msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" +#: access/heap/vacuumlazy.c:748 +#, c-format msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" -msgstr "automatisches aggressives Vacuum der Tabelle »%s.%s.%s«: Index-Scans: %d\n" +msgstr "automatisches Vacuum um Überlauf zu verhindern in der Tabelle »%s.%s.%s«: Index-Scans: %d\n" -#: access/heap/vacuumlazy.c:647 +#: access/heap/vacuumlazy.c:753 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisches aggressives Vacuum der Tabelle »%s.%s.%s«: Index-Scans: %d\n" -#: access/heap/vacuumlazy.c:649 +#: access/heap/vacuumlazy.c:755 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisches Vacuum der Tabelle »%s.%s.%s«: Index-Scans: %d\n" -#: access/heap/vacuumlazy.c:656 +#: access/heap/vacuumlazy.c:762 #, c-format msgid "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n" msgstr "Seiten: %u entfernt, %u verbleiben, %u übersprungen wegen Pins, %u übersprungen weil eingefroren\n" -#: access/heap/vacuumlazy.c:662 +#: access/heap/vacuumlazy.c:768 #, c-format -msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable, oldest xmin: %u\n" -msgstr "Tupel: %.0f entfernt, %.0f verbleiben, %.0f sind tot aber noch nicht entfernbar, ältestes xmin: %u\n" +msgid "tuples: %lld removed, %lld remain, %lld are dead but not yet removable, oldest xmin: %u\n" +msgstr "Tupel: %lld entfernt, %lld verbleiben, %lld sind tot aber noch nicht entfernbar, ältestes xmin: %u\n" -#: access/heap/vacuumlazy.c:668 +#: access/heap/vacuumlazy.c:774 commands/analyze.c:795 #, c-format msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" msgstr "Puffer-Verwendung: %lld Treffer, %lld Verfehlen, %lld geändert\n" -#: access/heap/vacuumlazy.c:672 +#: access/heap/vacuumlazy.c:782 +#, c-format +msgid " %u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n" +msgstr "" + +#: access/heap/vacuumlazy.c:785 +#, fuzzy +#| msgid "index \"%s\" not found" +msgid "index scan not needed:" +msgstr "Index »%s« nicht gefunden" + +#: access/heap/vacuumlazy.c:787 +#, fuzzy +#| msgid "index \"%s\" was reindexed" +msgid "index scan needed:" +msgstr "Index »%s« wurde neu indiziert" + +#: access/heap/vacuumlazy.c:791 +#, c-format +msgid " %u pages from table (%.2f%% of total) have %lld dead item identifiers\n" +msgstr "" + +#: access/heap/vacuumlazy.c:794 +msgid "index scan bypassed:" +msgstr "" + +#: access/heap/vacuumlazy.c:796 +msgid "index scan bypassed by failsafe:" +msgstr "" + +#: access/heap/vacuumlazy.c:811 +#, c-format +msgid "index \"%s\": pages: %u in total, %u newly deleted, %u currently deleted, %u reusable\n" +msgstr "" + +#: access/heap/vacuumlazy.c:818 commands/analyze.c:799 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "durchschn. Leserate: %.3f MB/s, durchschn. Schreibrate: %.3f MB/s\n" -#: access/heap/vacuumlazy.c:674 -#, fuzzy, c-format -#| msgid "system usage: %s" -msgid "system usage: %s\n" -msgstr "Systembenutzung: %s" +#: access/heap/vacuumlazy.c:822 commands/analyze.c:803 +msgid "I/O Timings:" +msgstr "" + +#: access/heap/vacuumlazy.c:824 commands/analyze.c:805 +#, c-format +msgid " read=%.3f" +msgstr "" -#: access/heap/vacuumlazy.c:676 +#: access/heap/vacuumlazy.c:827 commands/analyze.c:808 #, c-format -msgid "WAL usage: %ld records, %ld full page writes, " +msgid " write=%.3f" msgstr "" -#: access/heap/vacuumlazy.c:788 +#: access/heap/vacuumlazy.c:831 +#, c-format +msgid "system usage: %s\n" +msgstr "Systembenutzung: %s\n" + +#: access/heap/vacuumlazy.c:833 +#, c-format +msgid "WAL usage: %ld records, %ld full page images, %llu bytes" +msgstr "WAL-Benutzung: %ld Einträge, %ld Full Page Images, %llu Bytes" + +#: access/heap/vacuumlazy.c:908 #, c-format msgid "aggressively vacuuming \"%s.%s\"" msgstr "aggressives Vacuum von »%s.%s«" -#: access/heap/vacuumlazy.c:793 commands/cluster.c:874 +#: access/heap/vacuumlazy.c:913 commands/cluster.c:898 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "Vacuum von »%s.%s«" -#: access/heap/vacuumlazy.c:830 -#, c-format -msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" -msgstr "" - -#: access/heap/vacuumlazy.c:1715 -#, c-format -msgid "\"%s\": removed %.0f row versions in %u pages" -msgstr "»%s«: %.0f Zeilenversionen in %u Seiten entfernt" +#: access/heap/vacuumlazy.c:1614 +#, fuzzy, c-format +#| msgid "\"%s\": removed %d row versions in %d pages" +msgid "\"%s\": removed %lld dead item identifiers in %u pages" +msgstr "»%s«: %d Zeilenversionen in %d Seiten entfernt" -#: access/heap/vacuumlazy.c:1725 +#: access/heap/vacuumlazy.c:1620 #, c-format -msgid "%.0f dead row versions cannot be removed yet, oldest xmin: %u\n" -msgstr "%.0f tote Zeilenversionen können noch nicht entfernt werden, ältestes xmin: %u\n" +msgid "%lld dead row versions cannot be removed yet, oldest xmin: %u\n" +msgstr "%lld tote Zeilenversionen können noch nicht entfernt werden, ältestes xmin: %u\n" -#: access/heap/vacuumlazy.c:1727 +#: access/heap/vacuumlazy.c:1622 #, c-format -msgid "There were %.0f unused item identifiers.\n" -msgstr "Es gab %.0f unbenutzte Item-Identifiers.\n" +msgid "%u page removed.\n" +msgid_plural "%u pages removed.\n" +msgstr[0] "" +msgstr[1] "" -#: access/heap/vacuumlazy.c:1729 +#: access/heap/vacuumlazy.c:1626 #, c-format msgid "Skipped %u page due to buffer pins, " msgid_plural "Skipped %u pages due to buffer pins, " msgstr[0] "%u Seite wegen Buffer-Pins übersprungen, " msgstr[1] "%u Seiten wegen Buffer-Pins übersprungen, " -#: access/heap/vacuumlazy.c:1733 +#: access/heap/vacuumlazy.c:1630 #, c-format msgid "%u frozen page.\n" msgid_plural "%u frozen pages.\n" msgstr[0] "%u eingefrorene Seite.\n" msgstr[1] "%u eingefrorene Seiten.\n" -#: access/heap/vacuumlazy.c:1737 -#, c-format -msgid "%u page is entirely empty.\n" -msgid_plural "%u pages are entirely empty.\n" -msgstr[0] "%u Seite ist vollkommen leer.\n" -msgstr[1] "%u Seiten sind vollkommen leer.\n" - -#: access/heap/vacuumlazy.c:1741 commands/indexcmds.c:3450 -#: commands/indexcmds.c:3468 +#: access/heap/vacuumlazy.c:1634 commands/indexcmds.c:3986 +#: commands/indexcmds.c:4005 #, c-format msgid "%s." msgstr "%s." -#: access/heap/vacuumlazy.c:1744 +#: access/heap/vacuumlazy.c:1637 #, c-format -msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" -msgstr "»%s«: %.0f entfernbare, %.0f nicht entfernbare Zeilenversionen in %u von %u Seiten gefunden" +msgid "\"%s\": found %lld removable, %lld nonremovable row versions in %u out of %u pages" +msgstr "»%s«: %lld entfernbare, %lld nicht entfernbare Zeilenversionen in %u von %u Seiten gefunden" -#: access/heap/vacuumlazy.c:1876 +#: access/heap/vacuumlazy.c:2142 #, c-format -msgid "\"%s\": removed %d row versions in %d pages" +msgid "\"%s\": index scan bypassed: %u pages from table (%.2f%% of total) have %lld dead item identifiers" +msgstr "" + +#: access/heap/vacuumlazy.c:2353 +#, fuzzy, c-format +#| msgid "\"%s\": removed %d row versions in %d pages" +msgid "\"%s\": removed %d dead item identifiers in %u pages" msgstr "»%s«: %d Zeilenversionen in %d Seiten entfernt" -#: access/heap/vacuumlazy.c:2138 +#: access/heap/vacuumlazy.c:2600 +#, fuzzy, c-format +#| msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" +msgid "abandoned index vacuuming of table \"%s.%s.%s\" as a failsafe after %d index scans" +msgstr "automatisches Vacuum der Tabelle »%s.%s.%s«: Index-Scans: %d\n" + +#: access/heap/vacuumlazy.c:2605 +#, fuzzy, c-format +#| msgid "oldest xmin is far in the past" +msgid "table's relfrozenxid or relminmxid is too far in the past" +msgstr "älteste xmin ist weit in der Vergangenheit" + +#: access/heap/vacuumlazy.c:2606 +#, c-format +msgid "" +"Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" +"You might also need to consider other ways for VACUUM to keep up with the allocation of transaction IDs." +msgstr "" + +#: access/heap/vacuumlazy.c:2746 #, c-format msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index cleanup (planned: %d)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d parallelen Vacuum-Worker für Index-Cleanup gestartet (geplant: %d)" +msgstr[1] "%d parallele Vacuum-Worker für Index-Cleanup gestartet (geplant: %d)" -#: access/heap/vacuumlazy.c:2144 +#: access/heap/vacuumlazy.c:2752 #, c-format msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" -msgstr[0] "" -msgstr[1] "" - -#: access/heap/vacuumlazy.c:2431 -#, fuzzy, c-format -#| msgid "scanned index \"%s\" to remove %d row versions" -msgid "scanned index \"%s\" to remove %d row versions by parallel vacuum worker" -msgstr "Index »%s« gelesen und %d Zeilenversionen entfernt" +msgstr[0] "%d parallelen Vacuum-Worker für Index-Vacuum gestartet (geplant: %d)" +msgstr[1] "%d parallele Vacuum-Worker für Index-Vacuum gestartet (geplant: %d)" -#: access/heap/vacuumlazy.c:2433 +#: access/heap/vacuumlazy.c:3041 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "Index »%s« gelesen und %d Zeilenversionen entfernt" -#: access/heap/vacuumlazy.c:2493 -#, fuzzy, c-format -#| msgid "index \"%s\" now contains %.0f row versions in %u pages" -msgid "index \"%s\" now contains %.0f row versions in %u pages as reported by parallel vacuum worker" -msgstr "Index »%s« enthält %.0f Zeilenversionen in %u Seiten" - -#: access/heap/vacuumlazy.c:2495 +#: access/heap/vacuumlazy.c:3098 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "Index »%s« enthält %.0f Zeilenversionen in %u Seiten" -#: access/heap/vacuumlazy.c:2502 -#, c-format +#: access/heap/vacuumlazy.c:3102 +#, fuzzy, c-format +#| msgid "" +#| "%.0f index row versions were removed.\n" +#| "%u index pages have been deleted, %u are currently reusable.\n" +#| "%s." msgid "" "%.0f index row versions were removed.\n" -"%u index pages have been deleted, %u are currently reusable.\n" +"%u index pages were newly deleted.\n" +"%u index pages are currently deleted, of which %u are currently reusable.\n" "%s." msgstr "" "%.0f Indexzeilenversionen wurde entfernt.\n" "%u Indexseiten wurden gelöscht, %u sind gegenwärtig wiederverwendbar.\n" "%s." -#: access/heap/vacuumlazy.c:2599 +#: access/heap/vacuumlazy.c:3214 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "»%s«: Truncate wird gestoppt wegen Sperrkonflikt" -#: access/heap/vacuumlazy.c:2665 +#: access/heap/vacuumlazy.c:3280 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "»%s«: von %u auf %u Seiten verkürzt" -#: access/heap/vacuumlazy.c:2730 +#: access/heap/vacuumlazy.c:3345 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "»%s«: Truncate wird ausgesetzt wegen Sperrkonflikt" -#: access/heap/vacuumlazy.c:3477 -#, fuzzy, c-format -#| msgid "starting background worker process \"%s\"" -msgid "starting parallel vacuum worker for %s" -msgstr "starte Background-Worker-Prozess »%s«" +#: access/heap/vacuumlazy.c:3491 +#, c-format +msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" +msgstr "Paralleloption für Vacuum von »%s« wird deaktiviert --- Vacuum in temporären Tabellen kann nicht parallel ausgeführt werden" -#: access/heap/vacuumlazy.c:3568 +#: access/heap/vacuumlazy.c:4246 #, fuzzy, c-format -#| msgid "writing block %u of relation %s" +#| msgid "while scanning block %u of relation \"%s.%s\"" +msgid "while scanning block %u and offset %u of relation \"%s.%s\"" +msgstr "beim Scannen von Block %u von Relation »%s.%s«" + +#: access/heap/vacuumlazy.c:4249 +#, c-format msgid "while scanning block %u of relation \"%s.%s\"" -msgstr "schreibe Block %u von Relation %s" +msgstr "beim Scannen von Block %u von Relation »%s.%s«" + +#: access/heap/vacuumlazy.c:4253 +#, c-format +msgid "while scanning relation \"%s.%s\"" +msgstr "beim Scannen von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:3574 +#: access/heap/vacuumlazy.c:4261 #, fuzzy, c-format -#| msgid "writing block %u of relation %s" +#| msgid "while vacuuming block %u of relation \"%s.%s\"" +msgid "while vacuuming block %u and offset %u of relation \"%s.%s\"" +msgstr "beim Vacuum von Block %u von Relation »%s.%s«" + +#: access/heap/vacuumlazy.c:4264 +#, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" -msgstr "schreibe Block %u von Relation %s" +msgstr "beim Vacuum von Block %u von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:3579 -#, fuzzy, c-format -#| msgid "while inserting index tuple (%u,%u) in relation \"%s\"" +#: access/heap/vacuumlazy.c:4268 +#, c-format +msgid "while vacuuming relation \"%s.%s\"" +msgstr "beim Vacuum von Relation »%s.%s«" + +#: access/heap/vacuumlazy.c:4273 +#, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" -msgstr "beim Einfügen von Indextupel (%u,%u) in Relation »%s«" +msgstr "beim Vacuum von Index »%s« von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:3584 -#, fuzzy, c-format -#| msgid "while deleting tuple (%u,%u) in relation \"%s\"" +#: access/heap/vacuumlazy.c:4278 +#, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" -msgstr "beim Löschen von Tupel (%u,%u) in Relation »%s«" +msgstr "beim Säubern von Index »%s« von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:3590 -#, fuzzy, c-format -#| msgid "error while cloning relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" +#: access/heap/vacuumlazy.c:4284 +#, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" -msgstr "Fehler beim Klonen von Relation »%s.%s« (»%s« nach »%s«): %s\n" +msgstr "beim Trunkieren von Relation »%s.%s« auf %u Blöcke" -#: access/index/amapi.c:83 commands/amcmds.c:167 +#: access/index/amapi.c:83 commands/amcmds.c:143 #, c-format msgid "access method \"%s\" is not of type %s" msgstr "Zugriffsmethode »%s« ist nicht vom Typ %s" @@ -1339,72 +1454,71 @@ msgstr "Zugriffsmethode »%s« ist nicht vom Typ %s" msgid "index access method \"%s\" does not have a handler" msgstr "Indexzugriffsmethode »%s« hat keinen Handler" -#: access/index/indexam.c:142 catalog/objectaddress.c:1260 -#: commands/indexcmds.c:2517 commands/tablecmds.c:254 commands/tablecmds.c:278 -#: commands/tablecmds.c:15544 commands/tablecmds.c:16999 +#: access/index/genam.c:486 +#, fuzzy, c-format +#| msgid "cannot reindex system catalogs concurrently" +msgid "transaction aborted during system catalog scan" +msgstr "Systemkataloge können nicht nebenläufig reindiziert werden" + +#: access/index/indexam.c:142 catalog/objectaddress.c:1354 +#: commands/indexcmds.c:2670 commands/tablecmds.c:267 commands/tablecmds.c:291 +#: commands/tablecmds.c:16525 commands/tablecmds.c:18227 #, c-format msgid "\"%s\" is not an index" msgstr "»%s« ist kein Index" -#: access/index/indexam.c:970 +#: access/index/indexam.c:973 #, c-format msgid "operator class %s has no options" msgstr "Operatorklasse %s hat keine Optionen" -#: access/nbtree/nbtinsert.c:650 +#: access/nbtree/nbtinsert.c:665 #, c-format msgid "duplicate key value violates unique constraint \"%s\"" msgstr "doppelter Schlüsselwert verletzt Unique-Constraint »%s«" -#: access/nbtree/nbtinsert.c:652 +#: access/nbtree/nbtinsert.c:667 #, c-format msgid "Key %s already exists." msgstr "Schlüssel »%s« existiert bereits." -#: access/nbtree/nbtinsert.c:744 -#, c-format -msgid "failed to re-find tuple within index \"%s\"" -msgstr "konnte Tupel mit Index »%s« nicht erneut finden" - -#: access/nbtree/nbtinsert.c:746 +#: access/nbtree/nbtinsert.c:761 #, c-format msgid "This may be because of a non-immutable index expression." msgstr "Das kann daran liegen, dass der Indexausdruck nicht »immutable« ist." -#: access/nbtree/nbtpage.c:143 access/nbtree/nbtpage.c:531 -#: parser/parse_utilcmd.c:2156 +#: access/nbtree/nbtpage.c:159 access/nbtree/nbtpage.c:608 +#: parser/parse_utilcmd.c:2329 #, c-format msgid "index \"%s\" is not a btree" msgstr "Index »%s« ist kein B-Tree" -#: access/nbtree/nbtpage.c:150 access/nbtree/nbtpage.c:538 +#: access/nbtree/nbtpage.c:166 access/nbtree/nbtpage.c:615 #, c-format msgid "version mismatch in index \"%s\": file version %d, current version %d, minimal supported version %d" msgstr "keine Versionsübereinstimmung in Index »%s«: Dateiversion %d, aktuelle Version %d, kleinste unterstützte Version %d" -#: access/nbtree/nbtpage.c:1537 +#: access/nbtree/nbtpage.c:1875 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "Index »%s« enthält eine halbtote interne Seite" -#: access/nbtree/nbtpage.c:1539 +#: access/nbtree/nbtpage.c:1877 #, c-format msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "Die Ursache kann ein unterbrochenes VACUUM in Version 9.3 oder älter vor dem Upgrade sein. Bitte REINDEX durchführen." -#: access/nbtree/nbtutils.c:2660 -#, fuzzy, c-format -#| msgid "index row size %zu exceeds maximum %zu for index \"%s\"" +#: access/nbtree/nbtutils.c:2665 +#, c-format msgid "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" -msgstr "Größe %zu der Indexzeile überschreitet Maximum %zu für Index »%s«" +msgstr "Größe %zu der Indexzeile überschreitet btree-Version %u Maximum %zu für Index »%s«" -#: access/nbtree/nbtutils.c:2666 -#, fuzzy, c-format -#| msgid "while deleting tuple (%u,%u) in relation \"%s\"" +#: access/nbtree/nbtutils.c:2671 +#, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." -msgstr "beim Löschen von Tupel (%u,%u) in Relation »%s«" +msgstr "Indexzeile verweist auf Tupel (%u,%u) in Relation »%s«." -#: access/nbtree/nbtutils.c:2670 +#: access/nbtree/nbtutils.c:2675 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1413,39 +1527,46 @@ msgstr "" "Werte, die größer sind als 1/3 einer Pufferseite, können nicht indiziert werden.\n" "Erstellen Sie eventuell einen Funktionsindex auf einen MD5-Hash oder verwenden Sie Volltextindizierung." -#: access/nbtree/nbtvalidate.c:243 +#: access/nbtree/nbtvalidate.c:246 #, c-format msgid "operator family \"%s\" of access method %s is missing support function for types %s and %s" msgstr "in Operatorfamilie »%s« für Zugriffsmethode %s fehlt Support-Funktion für Typen %s und %s" -#: access/spgist/spgutils.c:147 +#: access/spgist/spgutils.c:232 #, c-format msgid "compress method must be defined when leaf type is different from input type" -msgstr "" +msgstr "Compress-Methode muss definiert sein, wenn der Leaf-Typ verschieden vom Eingabetyp ist" -#: access/spgist/spgutils.c:761 +#: access/spgist/spgutils.c:1005 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "innere Tupelgröße %zu überschreitet SP-GiST-Maximum %zu" -#: access/spgist/spgvalidate.c:281 +#: access/spgist/spgvalidate.c:136 +#, fuzzy, c-format +#| msgid "anycompatiblerange type %s does not match anycompatible type %s" +msgid "SP-GiST leaf data type %s does not match declared type %s" +msgstr "anycompatiblerange-Typ %s stimmt nicht mit anycompatible-Typ %s überein" + +#: access/spgist/spgvalidate.c:302 #, c-format msgid "operator family \"%s\" of access method %s is missing support function %d for type %s" msgstr "in Operatorfamilie »%s« für Zugriffsmethode %s fehlt Support-Funktion %d für Typ %s" -#: access/table/table.c:49 access/table/table.c:78 access/table/table.c:111 -#: catalog/aclchk.c:1806 +#: access/table/table.c:49 access/table/table.c:83 access/table/table.c:112 +#: access/table/table.c:145 catalog/aclchk.c:1792 #, c-format msgid "\"%s\" is an index" msgstr "»%s« ist ein Index" -#: access/table/table.c:54 access/table/table.c:83 access/table/table.c:116 -#: catalog/aclchk.c:1813 commands/tablecmds.c:12365 commands/tablecmds.c:15553 +#: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 +#: access/table/table.c:150 catalog/aclchk.c:1799 commands/tablecmds.c:13226 +#: commands/tablecmds.c:16534 #, c-format msgid "\"%s\" is a composite type" msgstr "»%s« ist ein zusammengesetzter Typ" -#: access/table/tableam.c:240 +#: access/table/tableam.c:266 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "tid (%u, %u) ist nicht gültig für Relation »%s«" @@ -1455,10 +1576,10 @@ msgstr "tid (%u, %u) ist nicht gültig für Relation »%s«" msgid "%s cannot be empty." msgstr "%s kann nicht leer sein." -#: access/table/tableamapi.c:122 utils/misc/guc.c:11938 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12485 #, c-format msgid "%s is too long (maximum %d characters)." -msgstr "%s ist zu lang (maximal %d Zeichen)" +msgstr "%s ist zu lang (maximal %d Zeichen)." #: access/table/tableamapi.c:145 #, c-format @@ -1475,33 +1596,33 @@ msgstr "Tabellenzugriffsmethode »%s« existiert nicht." msgid "sample percentage must be between 0 and 100" msgstr "Stichprobenprozentsatz muss zwischen 0 und 100 sein" -#: access/transam/commit_ts.c:295 +#: access/transam/commit_ts.c:278 #, c-format msgid "cannot retrieve commit timestamp for transaction %u" msgstr "Commit-Timestamp von Transaktion %u kann nicht abgefragt werden" -#: access/transam/commit_ts.c:393 +#: access/transam/commit_ts.c:376 #, c-format msgid "could not get commit timestamp data" msgstr "konnte Commit-Timestamp-Daten nicht auslesen" -#: access/transam/commit_ts.c:395 +#: access/transam/commit_ts.c:378 #, c-format -msgid "Make sure the configuration parameter \"%s\" is set on the master server." -msgstr "Stellen Sie sicher, dass der Konfigurationsparameter »%s« auf dem Masterserver gesetzt ist." +msgid "Make sure the configuration parameter \"%s\" is set on the primary server." +msgstr "Stellen Sie sicher, dass der Konfigurationsparameter »%s« auf dem Primärserver gesetzt ist." -#: access/transam/commit_ts.c:397 +#: access/transam/commit_ts.c:380 #, c-format msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Stellen Sie sicher, dass der Konfigurationsparameter »%s« gesetzt ist." -#: access/transam/multixact.c:1002 +#: access/transam/multixact.c:1021 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database \"%s\"" msgstr "Datenbank nimmt keine Befehle an, die neue MultiXactIds erzeugen, um Datenverlust wegen Transaktionsnummernüberlauf in Datenbank »%s« zu vermeiden" -#: access/transam/multixact.c:1004 access/transam/multixact.c:1011 -#: access/transam/multixact.c:1035 access/transam/multixact.c:1044 +#: access/transam/multixact.c:1023 access/transam/multixact.c:1030 +#: access/transam/multixact.c:1054 access/transam/multixact.c:1063 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1510,72 +1631,67 @@ msgstr "" "Führen Sie ein datenbankweites VACUUM in dieser Datenbank aus.\n" "Eventuell müssen Sie auch alte vorbereitete Transaktionen committen oder zurückrollen oder unbenutzte Replikations-Slots löschen." -#: access/transam/multixact.c:1009 +#: access/transam/multixact.c:1028 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database with OID %u" msgstr "Datenbank nimmt keine Befehle an, die neue MultiXactIds erzeugen, um Datenverlust wegen Transaktionsnummernüberlauf in Datenbank mit OID %u zu vermeiden" -#: access/transam/multixact.c:1030 access/transam/multixact.c:2320 +#: access/transam/multixact.c:1049 access/transam/multixact.c:2330 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "database \"%s\" must be vacuumed before %u more MultiXactIds are used" msgstr[0] "Datenbank »%s« muss gevacuumt werden, bevor %u weitere MultiXactId aufgebraucht ist" msgstr[1] "Datenbank »%s« muss gevacuumt werden, bevor %u weitere MultiXactIds aufgebraucht sind" -#: access/transam/multixact.c:1039 access/transam/multixact.c:2329 +#: access/transam/multixact.c:1058 access/transam/multixact.c:2339 #, c-format msgid "database with OID %u must be vacuumed before %u more MultiXactId is used" msgid_plural "database with OID %u must be vacuumed before %u more MultiXactIds are used" msgstr[0] "Datenbank mit OID %u muss gevacuumt werden, bevor %u weitere MultiXactId aufgebraucht ist" msgstr[1] "Datenbank mit OID %u muss gevacuumt werden, bevor %u weitere MultiXactIds aufgebraucht sind" -#: access/transam/multixact.c:1100 +#: access/transam/multixact.c:1119 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "Grenzwert für Multixact-»Members« überschritten" -#: access/transam/multixact.c:1101 +#: access/transam/multixact.c:1120 #, c-format msgid "This command would create a multixact with %u members, but the remaining space is only enough for %u member." msgid_plural "This command would create a multixact with %u members, but the remaining space is only enough for %u members." msgstr[0] "Dieser Befehl würde eine Multixact mit %u Mitgliedern erzeugen, aber es ist nur genug Platz für %u Mitglied." msgstr[1] "Dieser Befehl würde eine Multixact mit %u Mitgliedern erzeugen, aber es ist nur genug Platz für %u Mitglieder." -#: access/transam/multixact.c:1106 +#: access/transam/multixact.c:1125 #, c-format msgid "Execute a database-wide VACUUM in database with OID %u with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "Führen Sie ein datenbankweites VACUUM in der Datenbank mit OID %u aus, mit reduzierten Einstellungen für vacuum_multixact_freeze_min_age und vacuum_multixact_freeze_table_age." -#: access/transam/multixact.c:1137 +#: access/transam/multixact.c:1156 #, c-format msgid "database with OID %u must be vacuumed before %d more multixact member is used" msgid_plural "database with OID %u must be vacuumed before %d more multixact members are used" msgstr[0] "Datenbank mit OID %u muss gevacuumt werden, bevor %d weiteres Multixact-Mitglied aufgebraucht ist" msgstr[1] "Datenbank mit OID %u muss gevacuumt werden, bevor %d weitere Multixact-Mitglieder aufgebraucht sind" -#: access/transam/multixact.c:1142 +#: access/transam/multixact.c:1161 #, c-format msgid "Execute a database-wide VACUUM in that database with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "Führen Sie ein datenbankweites VACUUM in dieser Datenbank aus, mit reduzierten Einstellungen für vacuum_multixact_freeze_min_age und vacuum_multixact_freeze_table_age." -#: access/transam/multixact.c:1279 +#: access/transam/multixact.c:1298 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u existiert nicht mehr -- anscheinender Überlauf" -#: access/transam/multixact.c:1287 +#: access/transam/multixact.c:1306 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %u wurde noch nicht erzeugt -- anscheinender Überlauf" -#: access/transam/multixact.c:2270 -#, c-format -msgid "MultiXactId wrap limit is %u, limited by database with OID %u" -msgstr "Grenze für MultiXactId-Überlauf ist %u, begrenzt durch Datenbank mit OID %u" - -#: access/transam/multixact.c:2325 access/transam/multixact.c:2334 -#: access/transam/varsup.c:149 access/transam/varsup.c:156 -#: access/transam/varsup.c:447 access/transam/varsup.c:454 +#: access/transam/multixact.c:2335 access/transam/multixact.c:2344 +#: access/transam/varsup.c:151 access/transam/varsup.c:158 +#: access/transam/varsup.c:466 access/transam/varsup.c:473 #, c-format msgid "" "To avoid a database shutdown, execute a database-wide VACUUM in that database.\n" @@ -1584,174 +1700,159 @@ msgstr "" "Um ein Abschalten der Datenbank zu vermeiden, führen Sie ein komplettes VACUUM über diese Datenbank aus.\n" "Eventuell müssen Sie auch alte vorbereitete Transaktionen committen oder zurückrollen oder unbenutzte Replikations-Slots löschen." -#: access/transam/multixact.c:2604 -#, c-format -msgid "oldest MultiXactId member is at offset %u" -msgstr "ältestes MultiXactId-Mitglied ist bei Offset %u" - -#: access/transam/multixact.c:2608 +#: access/transam/multixact.c:2618 #, c-format msgid "MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk" msgstr "MultiXact-Member-Wraparound-Schutz ist deaktiviert, weil die älteste gecheckpointete MultiXact %u nicht auf der Festplatte existiert" -#: access/transam/multixact.c:2630 +#: access/transam/multixact.c:2640 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "MultiXact-Member-Wraparound-Schutz ist jetzt aktiviert" -#: access/transam/multixact.c:2633 -#, c-format -msgid "MultiXact member stop limit is now %u based on MultiXact %u" -msgstr "MultiXact-Member-Stopp-Limit ist jetzt %u, basierend auf MultiXact %u" - -#: access/transam/multixact.c:3013 +#: access/transam/multixact.c:3027 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "älteste MultiXact %u nicht gefunden, älteste ist MultiXact %u, Truncate wird ausgelassen" -#: access/transam/multixact.c:3031 +#: access/transam/multixact.c:3045 #, c-format msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" msgstr "kann nicht bis MultiXact %u trunkieren, weil sie nicht auf der Festplatte existiert, Trunkierung wird ausgelassen" -#: access/transam/multixact.c:3345 +#: access/transam/multixact.c:3359 #, c-format msgid "invalid MultiXactId: %u" msgstr "ungültige MultiXactId: %u" -#: access/transam/parallel.c:706 access/transam/parallel.c:825 +#: access/transam/parallel.c:707 access/transam/parallel.c:826 #, c-format msgid "parallel worker failed to initialize" msgstr "Initialisierung von parallelem Arbeitsprozess fehlgeschlagen" -#: access/transam/parallel.c:707 access/transam/parallel.c:826 +#: access/transam/parallel.c:708 access/transam/parallel.c:827 #, c-format msgid "More details may be available in the server log." msgstr "Weitere Einzelheiten sind möglicherweise im Serverlog zu finden." -#: access/transam/parallel.c:887 +#: access/transam/parallel.c:888 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "Postmaster beendete während einer parallelen Transaktion" -#: access/transam/parallel.c:1074 +#: access/transam/parallel.c:1075 #, c-format msgid "lost connection to parallel worker" msgstr "Verbindung mit parallelem Arbeitsprozess verloren" -#: access/transam/parallel.c:1140 access/transam/parallel.c:1142 +#: access/transam/parallel.c:1141 access/transam/parallel.c:1143 msgid "parallel worker" msgstr "paralleler Arbeitsprozess" -#: access/transam/parallel.c:1293 +#: access/transam/parallel.c:1294 #, c-format msgid "could not map dynamic shared memory segment" msgstr "konnte dynamisches Shared-Memory-Segment nicht mappen" -#: access/transam/parallel.c:1298 +#: access/transam/parallel.c:1299 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "ungültige magische Zahl in dynamischem Shared-Memory-Segment" -#: access/transam/slru.c:691 +#: access/transam/slru.c:712 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "Datei »%s« existiert nicht, wird als Nullen eingelesen" -#: access/transam/slru.c:932 access/transam/slru.c:938 -#: access/transam/slru.c:946 access/transam/slru.c:951 +#: access/transam/slru.c:944 access/transam/slru.c:950 #: access/transam/slru.c:958 access/transam/slru.c:963 -#: access/transam/slru.c:970 access/transam/slru.c:977 +#: access/transam/slru.c:970 access/transam/slru.c:975 +#: access/transam/slru.c:982 access/transam/slru.c:989 #, c-format msgid "could not access status of transaction %u" msgstr "konnte auf den Status von Transaktion %u nicht zugreifen" -#: access/transam/slru.c:933 +#: access/transam/slru.c:945 #, c-format msgid "Could not open file \"%s\": %m." msgstr "Konnte Datei »%s« nicht öffnen: %m." -#: access/transam/slru.c:939 +#: access/transam/slru.c:951 #, c-format msgid "Could not seek in file \"%s\" to offset %u: %m." msgstr "Konnte Positionszeiger in Datei »%s« nicht auf %u setzen: %m." -#: access/transam/slru.c:947 +#: access/transam/slru.c:959 #, c-format msgid "Could not read from file \"%s\" at offset %u: %m." msgstr "Konnte nicht aus Datei »%s« bei Position %u lesen: %m." -#: access/transam/slru.c:952 +#: access/transam/slru.c:964 #, c-format msgid "Could not read from file \"%s\" at offset %u: read too few bytes." msgstr "Konnte nicht aus Datei »%s« bei Position %u lesen: zu wenige Bytes gelesen." -#: access/transam/slru.c:959 +#: access/transam/slru.c:971 #, c-format msgid "Could not write to file \"%s\" at offset %u: %m." msgstr "Konnte nicht in Datei »%s« bei Position %u schreiben: %m." -#: access/transam/slru.c:964 +#: access/transam/slru.c:976 #, c-format msgid "Could not write to file \"%s\" at offset %u: wrote too few bytes." msgstr "Konnte nicht in Datei »%s« bei Position %u schreiben: zu wenige Bytes geschrieben." -#: access/transam/slru.c:971 +#: access/transam/slru.c:983 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "Konnte Datei »%s« nicht fsyncen: %m." -#: access/transam/slru.c:978 +#: access/transam/slru.c:990 #, c-format msgid "Could not close file \"%s\": %m." msgstr "Konnte Datei »%s« nicht schließen: %m." -#: access/transam/slru.c:1241 +#: access/transam/slru.c:1251 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "konnte Verzeichnis »%s« nicht leeren: anscheinender Überlauf" -#: access/transam/slru.c:1296 access/transam/slru.c:1352 -#, c-format -msgid "removing file \"%s\"" -msgstr "entferne Datei »%s«" - -#: access/transam/timeline.c:149 access/transam/timeline.c:154 +#: access/transam/timeline.c:163 access/transam/timeline.c:168 #, c-format msgid "syntax error in history file: %s" msgstr "Syntaxfehler in History-Datei: %s" -#: access/transam/timeline.c:150 +#: access/transam/timeline.c:164 #, c-format msgid "Expected a numeric timeline ID." msgstr "Eine numerische Zeitleisten-ID wurde erwartet." -#: access/transam/timeline.c:155 +#: access/transam/timeline.c:169 #, c-format msgid "Expected a write-ahead log switchpoint location." msgstr "Eine Write-Ahead-Log-Switchpoint-Position wurde erwartet." -#: access/transam/timeline.c:159 +#: access/transam/timeline.c:173 #, c-format msgid "invalid data in history file: %s" msgstr "ungültige Daten in History-Datei: %s" -#: access/transam/timeline.c:160 +#: access/transam/timeline.c:174 #, c-format msgid "Timeline IDs must be in increasing sequence." msgstr "Zeitleisten-IDs müssen in aufsteigender Folge sein." -#: access/transam/timeline.c:180 +#: access/transam/timeline.c:194 #, c-format msgid "invalid data in history file \"%s\"" msgstr "ungültige Daten in History-Datei »%s«" -#: access/transam/timeline.c:181 +#: access/transam/timeline.c:195 #, c-format msgid "Timeline IDs must be less than child timeline's ID." msgstr "Zeitleisten-IDs müssen kleiner als die Zeitleisten-ID des Kindes sein." -#: access/transam/timeline.c:581 +#: access/transam/timeline.c:597 #, c-format msgid "requested timeline %u is not in this server's history" msgstr "angeforderte Zeitleiste %u ist nicht in der History dieses Servers" @@ -1776,146 +1877,151 @@ msgstr "Setzen Sie max_prepared_transactions auf einen Wert höher als null." msgid "transaction identifier \"%s\" is already in use" msgstr "Transaktionsbezeichner »%s« wird bereits verwendet" -#: access/transam/twophase.c:417 access/transam/twophase.c:2365 +#: access/transam/twophase.c:417 access/transam/twophase.c:2387 #, c-format msgid "maximum number of prepared transactions reached" msgstr "maximale Anzahl vorbereiteter Transaktionen erreicht" -#: access/transam/twophase.c:418 access/transam/twophase.c:2366 +#: access/transam/twophase.c:418 access/transam/twophase.c:2388 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "Erhöhen Sie max_prepared_transactions (aktuell %d)." -#: access/transam/twophase.c:586 +#: access/transam/twophase.c:584 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "vorbereitete Transaktion mit Bezeichner »%s« ist beschäftigt" -#: access/transam/twophase.c:592 +#: access/transam/twophase.c:590 #, c-format msgid "permission denied to finish prepared transaction" msgstr "keine Berechtigung, um vorbereitete Transaktion abzuschließen" -#: access/transam/twophase.c:593 +#: access/transam/twophase.c:591 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "Sie müssen Superuser oder der Benutzer sein, der die Transaktion vorbereitet hat." -#: access/transam/twophase.c:604 +#: access/transam/twophase.c:602 #, c-format msgid "prepared transaction belongs to another database" msgstr "vorbereitete Transaktion gehört zu einer anderen Datenbank" -#: access/transam/twophase.c:605 +#: access/transam/twophase.c:603 #, c-format msgid "Connect to the database where the transaction was prepared to finish it." msgstr "Verbinden Sie sich mit der Datenbank, wo die Transaktion vorbereitet wurde, um sie zu beenden." -#: access/transam/twophase.c:620 +#: access/transam/twophase.c:618 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "vorbereitete Transaktion mit Bezeichner »%s« existiert nicht" -#: access/transam/twophase.c:1098 +#: access/transam/twophase.c:1093 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "maximale Länge der Zweiphasen-Statusdatei überschritten" -#: access/transam/twophase.c:1252 +#: access/transam/twophase.c:1247 #, c-format -msgid "incorrect size of file \"%s\": %zu byte" -msgid_plural "incorrect size of file \"%s\": %zu bytes" -msgstr[0] "falsche Größe von Datei »%s«: %zu Byte" -msgstr[1] "falsche Größe von Datei »%s«: %zu Bytes" +msgid "incorrect size of file \"%s\": %lld byte" +msgid_plural "incorrect size of file \"%s\": %lld bytes" +msgstr[0] "falsche Größe von Datei »%s«: %lld Byte" +msgstr[1] "falsche Größe von Datei »%s«: %lld Bytes" -#: access/transam/twophase.c:1261 +#: access/transam/twophase.c:1256 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" msgstr "falsche Ausrichtung des CRC-Offsets für Datei »%s«" -#: access/transam/twophase.c:1294 +#: access/transam/twophase.c:1274 +#, c-format +msgid "could not read file \"%s\": read %d of %lld" +msgstr "konnte Datei »%s« nicht lesen: %d von %lld gelesen" + +#: access/transam/twophase.c:1289 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "ungültige magische Zahl in Datei »%s gespeichert«" -#: access/transam/twophase.c:1300 +#: access/transam/twophase.c:1295 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "ungültige Größe in Datei »%s« gespeichert" -#: access/transam/twophase.c:1312 +#: access/transam/twophase.c:1307 #, c-format msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "berechnete CRC-Prüfsumme stimmt nicht mit dem Wert in Datei »%s« überein" -#: access/transam/twophase.c:1339 access/transam/xlog.c:6487 +#: access/transam/twophase.c:1339 access/transam/xlog.c:6634 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Fehlgeschlagen beim Anlegen eines WAL-Leseprozessors." -#: access/transam/twophase.c:1346 +#: access/transam/twophase.c:1359 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "konnte Zweiphasen-Status nicht aus dem WAL bei %X/%X lesen" -#: access/transam/twophase.c:1354 +#: access/transam/twophase.c:1366 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "erwartete Zweiphasen-Status-Daten sind nicht im WAL bei %X/%X vorhanden" -#: access/transam/twophase.c:1634 +#: access/transam/twophase.c:1643 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "konnte Datei »%s« nicht neu erzeugen: %m" -#: access/transam/twophase.c:1761 +#: access/transam/twophase.c:1770 #, c-format msgid "%u two-phase state file was written for a long-running prepared transaction" msgid_plural "%u two-phase state files were written for long-running prepared transactions" msgstr[0] "%u Zweiphasen-Statusdatei wurde für eine lange laufende vorbereitete Transaktion geschrieben" msgstr[1] "%u Zweiphasen-Statusdateien wurden für lange laufende vorbereitete Transaktionen geschrieben" -#: access/transam/twophase.c:1995 +#: access/transam/twophase.c:2004 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "Wiederherstellung der vorbereiteten Transaktion %u aus dem Shared Memory" -#: access/transam/twophase.c:2086 +#: access/transam/twophase.c:2095 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "entferne abgelaufene Zweiphasen-Statusdatei für Transaktion %u" -#: access/transam/twophase.c:2093 +#: access/transam/twophase.c:2102 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "entferne abgelaufenen Zweiphasen-Status aus dem Speicher für Transaktion %u" -#: access/transam/twophase.c:2106 +#: access/transam/twophase.c:2115 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "entferne zukünftige Zweiphasen-Statusdatei für Transaktion %u" -#: access/transam/twophase.c:2113 +#: access/transam/twophase.c:2122 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "entferne zukünftigen Zweiphasen-Status aus dem Speicher für Transaktion %u" -#: access/transam/twophase.c:2138 +#: access/transam/twophase.c:2147 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "verfälschte Zweiphasen-Statusdatei für Transaktion %u" -#: access/transam/twophase.c:2143 +#: access/transam/twophase.c:2152 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "verfälschter Zweiphasen-Status im Speicher für Transaktion %u" -#: access/transam/varsup.c:127 +#: access/transam/varsup.c:129 #, c-format msgid "database is not accepting commands to avoid wraparound data loss in database \"%s\"" msgstr "Datenbank nimmt keine Befehle an, um Datenverlust wegen Transaktionsnummernüberlauf in Datenbank »%s« zu vermeiden" -#: access/transam/varsup.c:129 access/transam/varsup.c:136 +#: access/transam/varsup.c:131 access/transam/varsup.c:138 #, c-format msgid "" "Stop the postmaster and vacuum that database in single-user mode.\n" @@ -1924,847 +2030,857 @@ msgstr "" "Halten Sie den Postmaster an und führen Sie in dieser Datenbank VACUUM im Einzelbenutzermodus aus.\n" "Eventuell müssen Sie auch alte vorbereitete Transaktionen committen oder zurückrollen oder unbenutzte Replikations-Slots löschen." -#: access/transam/varsup.c:134 +#: access/transam/varsup.c:136 #, c-format msgid "database is not accepting commands to avoid wraparound data loss in database with OID %u" msgstr "Datenbank nimmt keine Befehle an, um Datenverlust wegen Transaktionsnummernüberlauf in Datenbank mit OID %u zu vermeiden" -#: access/transam/varsup.c:146 access/transam/varsup.c:444 +#: access/transam/varsup.c:148 access/transam/varsup.c:463 #, c-format msgid "database \"%s\" must be vacuumed within %u transactions" msgstr "Datenbank »%s« muss innerhalb von %u Transaktionen gevacuumt werden" -#: access/transam/varsup.c:153 access/transam/varsup.c:451 +#: access/transam/varsup.c:155 access/transam/varsup.c:470 #, c-format msgid "database with OID %u must be vacuumed within %u transactions" msgstr "Datenbank mit OID %u muss innerhalb von %u Transaktionen gevacuumt werden" -#: access/transam/varsup.c:409 -#, c-format -msgid "transaction ID wrap limit is %u, limited by database with OID %u" -msgstr "Grenze für Transaktionsnummernüberlauf ist %u, begrenzt durch Datenbank mit OID %u" - -#: access/transam/xact.c:1030 +#: access/transam/xact.c:1045 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "kann nicht mehr als 2^32-2 Befehle in einer Transaktion ausführen" -#: access/transam/xact.c:1555 +#: access/transam/xact.c:1582 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "maximale Anzahl committeter Subtransaktionen (%d) überschritten" -#: access/transam/xact.c:2395 +#: access/transam/xact.c:2423 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "PREPARE kann nicht für eine Transaktion ausgeführt werden, die temporäre Objekte bearbeitet hat" -#: access/transam/xact.c:2405 +#: access/transam/xact.c:2433 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "PREPARE kann nicht für eine Transaktion ausgeführt werden, die Snapshots exportiert hat" -#: access/transam/xact.c:2414 -#, c-format -msgid "cannot PREPARE a transaction that has manipulated logical replication workers" -msgstr "PREPARE kann nicht für eine Transaktion ausgeführt werden, die Arbeitsprozesse für logische Replikation manipuliert hat" - #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3359 +#: access/transam/xact.c:3388 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s kann nicht in einem Transaktionsblock laufen" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3369 +#: access/transam/xact.c:3398 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s kann nicht in einer Subtransaktion laufen" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3379 +#: access/transam/xact.c:3408 #, c-format msgid "%s cannot be executed from a function" -msgstr "%s kann nicht aus einer Funktion ausgerufen werden" +msgstr "%s kann nicht aus einer Funktion ausgeführt werden" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3448 access/transam/xact.c:3754 -#: access/transam/xact.c:3833 access/transam/xact.c:3956 -#: access/transam/xact.c:4107 access/transam/xact.c:4176 -#: access/transam/xact.c:4287 +#: access/transam/xact.c:3477 access/transam/xact.c:3783 +#: access/transam/xact.c:3862 access/transam/xact.c:3985 +#: access/transam/xact.c:4136 access/transam/xact.c:4205 +#: access/transam/xact.c:4316 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s kann nur in Transaktionsblöcken verwendet werden" -#: access/transam/xact.c:3640 +#: access/transam/xact.c:3669 #, c-format msgid "there is already a transaction in progress" msgstr "eine Transaktion ist bereits begonnen" -#: access/transam/xact.c:3759 access/transam/xact.c:3838 -#: access/transam/xact.c:3961 +#: access/transam/xact.c:3788 access/transam/xact.c:3867 +#: access/transam/xact.c:3990 #, c-format msgid "there is no transaction in progress" msgstr "keine Transaktion offen" -#: access/transam/xact.c:3849 +#: access/transam/xact.c:3878 #, c-format msgid "cannot commit during a parallel operation" msgstr "während einer parallelen Operation kann nicht committet werden" -#: access/transam/xact.c:3972 +#: access/transam/xact.c:4001 #, c-format msgid "cannot abort during a parallel operation" msgstr "während einer parallelen Operation kann nicht abgebrochen werden" -#: access/transam/xact.c:4071 +#: access/transam/xact.c:4100 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "während einer parallelen Operation können keine Sicherungspunkte definiert werden" -#: access/transam/xact.c:4158 +#: access/transam/xact.c:4187 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "während einer parallelen Operation können keine Sicherungspunkte freigegeben werden" -#: access/transam/xact.c:4168 access/transam/xact.c:4219 -#: access/transam/xact.c:4279 access/transam/xact.c:4328 +#: access/transam/xact.c:4197 access/transam/xact.c:4248 +#: access/transam/xact.c:4308 access/transam/xact.c:4357 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "Sicherungspunkt »%s« existiert nicht" -#: access/transam/xact.c:4225 access/transam/xact.c:4334 +#: access/transam/xact.c:4254 access/transam/xact.c:4363 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "Sicherungspunkt »%s« existiert nicht innerhalb der aktuellen Sicherungspunktebene" -#: access/transam/xact.c:4267 +#: access/transam/xact.c:4296 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "während einer parallelen Operation kann nicht auf einen Sicherungspunkt zurückgerollt werden" -#: access/transam/xact.c:4395 +#: access/transam/xact.c:4424 #, c-format msgid "cannot start subtransactions during a parallel operation" msgstr "während einer parallelen Operation können keine Subtransaktionen gestartet werden" -#: access/transam/xact.c:4463 +#: access/transam/xact.c:4492 #, c-format msgid "cannot commit subtransactions during a parallel operation" msgstr "während einer parallelen Operation können keine Subtransaktionen committet werden" -#: access/transam/xact.c:5103 +#: access/transam/xact.c:5133 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "kann nicht mehr als 2^32-1 Subtransaktionen in einer Transaktion haben" -#: access/transam/xlog.c:2552 +#: access/transam/xlog.c:1831 #, c-format -msgid "could not write to log file %s at offset %u, length %zu: %m" -msgstr "konnte nicht in Logdatei %s bei Position %u, Länge %zu schreiben: %m" +msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" +msgstr "" -#: access/transam/xlog.c:2828 +#: access/transam/xlog.c:2592 #, c-format -msgid "updated min recovery point to %X/%X on timeline %u" -msgstr "minimaler Recovery-Punkt auf %X/%X auf Zeitleiste %u aktualisiert" +msgid "could not write to log file %s at offset %u, length %zu: %m" +msgstr "konnte nicht in Logdatei %s bei Position %u, Länge %zu schreiben: %m" -#: access/transam/xlog.c:3942 access/transam/xlogutils.c:803 -#: replication/walsender.c:2492 +#: access/transam/xlog.c:3993 access/transam/xlogutils.c:812 +#: replication/walsender.c:2521 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "das angeforderte WAL-Segment %s wurde schon entfernt" -#: access/transam/xlog.c:4185 -#, c-format -msgid "recycled write-ahead log file \"%s\"" -msgstr "Write-Ahead-Log-Datei »%s« wird wiederverwendet" - -#: access/transam/xlog.c:4197 -#, c-format -msgid "removing write-ahead log file \"%s\"" -msgstr "entferne Write-Ahead-Log-Datei »%s«" - -#: access/transam/xlog.c:4217 +#: access/transam/xlog.c:4268 #, c-format msgid "could not rename file \"%s\": %m" msgstr "konnte Datei »%s« nicht umbenennen: %m" -#: access/transam/xlog.c:4259 access/transam/xlog.c:4269 +#: access/transam/xlog.c:4310 access/transam/xlog.c:4320 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "benötigtes WAL-Verzeichnis »%s« existiert nicht" -#: access/transam/xlog.c:4275 +#: access/transam/xlog.c:4326 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "erzeuge fehlendes WAL-Verzeichnis »%s«" -#: access/transam/xlog.c:4278 +#: access/transam/xlog.c:4329 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "konnte fehlendes Verzeichnis »%s« nicht erzeugen: %m" -#: access/transam/xlog.c:4381 +#: access/transam/xlog.c:4436 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "unerwartete Zeitleisten-ID %u in Logsegment %s, Offset %u" -#: access/transam/xlog.c:4519 +#: access/transam/xlog.c:4574 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "neue Zeitleiste %u ist kein Kind der Datenbanksystemzeitleiste %u" -#: access/transam/xlog.c:4533 +#: access/transam/xlog.c:4588 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "neue Zeitleiste %u zweigte von der aktuellen Datenbanksystemzeitleiste %u vor dem aktuellen Wiederherstellungspunkt %X/%X ab" -#: access/transam/xlog.c:4552 +#: access/transam/xlog.c:4607 #, c-format msgid "new target timeline is %u" msgstr "neue Zielzeitleiste ist %u" -#: access/transam/xlog.c:4588 +#: access/transam/xlog.c:4643 #, c-format msgid "could not generate secret authorization token" msgstr "konnte geheimes Autorisierungstoken nicht erzeugen" -#: access/transam/xlog.c:4747 access/transam/xlog.c:4756 -#: access/transam/xlog.c:4780 access/transam/xlog.c:4787 -#: access/transam/xlog.c:4794 access/transam/xlog.c:4799 -#: access/transam/xlog.c:4806 access/transam/xlog.c:4813 -#: access/transam/xlog.c:4820 access/transam/xlog.c:4827 -#: access/transam/xlog.c:4834 access/transam/xlog.c:4841 -#: access/transam/xlog.c:4850 access/transam/xlog.c:4857 -#: utils/init/miscinit.c:1548 +#: access/transam/xlog.c:4802 access/transam/xlog.c:4811 +#: access/transam/xlog.c:4835 access/transam/xlog.c:4842 +#: access/transam/xlog.c:4849 access/transam/xlog.c:4854 +#: access/transam/xlog.c:4861 access/transam/xlog.c:4868 +#: access/transam/xlog.c:4875 access/transam/xlog.c:4882 +#: access/transam/xlog.c:4889 access/transam/xlog.c:4896 +#: access/transam/xlog.c:4905 access/transam/xlog.c:4912 +#: utils/init/miscinit.c:1578 #, c-format msgid "database files are incompatible with server" msgstr "Datenbankdateien sind inkompatibel mit Server" -#: access/transam/xlog.c:4748 +#: access/transam/xlog.c:4803 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), but the server was compiled with PG_CONTROL_VERSION %d (0x%08x)." msgstr "Der Datenbank-Cluster wurde mit PG_CONTROL_VERSION %d (0x%08x) initialisiert, aber der Server wurde mit PG_CONTROL_VERSION %d (0x%08x) kompiliert." -#: access/transam/xlog.c:4752 +#: access/transam/xlog.c:4807 #, c-format msgid "This could be a problem of mismatched byte ordering. It looks like you need to initdb." msgstr "Das Problem könnte eine falsche Byte-Reihenfolge sein. Es sieht so aus, dass Sie initdb ausführen müssen." -#: access/transam/xlog.c:4757 +#: access/transam/xlog.c:4812 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d, but the server was compiled with PG_CONTROL_VERSION %d." msgstr "Der Datenbank-Cluster wurde mit PG_CONTROL_VERSION %d initialisiert, aber der Server wurde mit PG_CONTROL_VERSION %d kompiliert." -#: access/transam/xlog.c:4760 access/transam/xlog.c:4784 -#: access/transam/xlog.c:4791 access/transam/xlog.c:4796 +#: access/transam/xlog.c:4815 access/transam/xlog.c:4839 +#: access/transam/xlog.c:4846 access/transam/xlog.c:4851 #, c-format msgid "It looks like you need to initdb." msgstr "Es sieht so aus, dass Sie initdb ausführen müssen." -#: access/transam/xlog.c:4771 +#: access/transam/xlog.c:4826 #, c-format msgid "incorrect checksum in control file" msgstr "falsche Prüfsumme in Kontrolldatei" -#: access/transam/xlog.c:4781 +#: access/transam/xlog.c:4836 #, c-format msgid "The database cluster was initialized with CATALOG_VERSION_NO %d, but the server was compiled with CATALOG_VERSION_NO %d." msgstr "Der Datenbank-Cluster wurde mit CATALOG_VERSION_NO %d initialisiert, aber der Server wurde mit CATALOG_VERSION_NO %d kompiliert." -#: access/transam/xlog.c:4788 +#: access/transam/xlog.c:4843 #, c-format msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." msgstr "Der Datenbank-Cluster wurde mit MAXALIGN %d initialisiert, aber der Server wurde mit MAXALIGN %d kompiliert." -#: access/transam/xlog.c:4795 +#: access/transam/xlog.c:4850 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "Der Datenbank-Cluster verwendet anscheinend ein anderes Fließkommazahlenformat als das Serverprogramm." -#: access/transam/xlog.c:4800 +#: access/transam/xlog.c:4855 #, c-format msgid "The database cluster was initialized with BLCKSZ %d, but the server was compiled with BLCKSZ %d." msgstr "Der Datenbank-Cluster wurde mit BLCKSZ %d initialisiert, aber der Server wurde mit BLCKSZ %d kompiliert." -#: access/transam/xlog.c:4803 access/transam/xlog.c:4810 -#: access/transam/xlog.c:4817 access/transam/xlog.c:4824 -#: access/transam/xlog.c:4831 access/transam/xlog.c:4838 -#: access/transam/xlog.c:4845 access/transam/xlog.c:4853 -#: access/transam/xlog.c:4860 +#: access/transam/xlog.c:4858 access/transam/xlog.c:4865 +#: access/transam/xlog.c:4872 access/transam/xlog.c:4879 +#: access/transam/xlog.c:4886 access/transam/xlog.c:4893 +#: access/transam/xlog.c:4900 access/transam/xlog.c:4908 +#: access/transam/xlog.c:4915 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Es sieht so aus, dass Sie neu kompilieren oder initdb ausführen müssen." -#: access/transam/xlog.c:4807 +#: access/transam/xlog.c:4862 #, c-format msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." msgstr "Der Datenbank-Cluster wurde mit RELSEG_SIZE %d initialisiert, aber der Server wurde mit RELSEGSIZE %d kompiliert." -#: access/transam/xlog.c:4814 +#: access/transam/xlog.c:4869 #, c-format msgid "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was compiled with XLOG_BLCKSZ %d." msgstr "Der Datenbank-Cluster wurde mit XLOG_BLCKSZ %d initialisiert, aber der Server wurde mit XLOG_BLCKSZ %d kompiliert." -#: access/transam/xlog.c:4821 +#: access/transam/xlog.c:4876 #, c-format msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." msgstr "Der Datenbank-Cluster wurde mit NAMEDATALEN %d initialisiert, aber der Server wurde mit NAMEDATALEN %d kompiliert." -#: access/transam/xlog.c:4828 +#: access/transam/xlog.c:4883 #, c-format msgid "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server was compiled with INDEX_MAX_KEYS %d." msgstr "Der Datenbank-Cluster wurde mit INDEX_MAX_KEYS %d initialisiert, aber der Server wurde mit INDEX_MAX_KEYS %d kompiliert." -#: access/transam/xlog.c:4835 +#: access/transam/xlog.c:4890 #, c-format msgid "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the server was compiled with TOAST_MAX_CHUNK_SIZE %d." msgstr "Der Datenbank-Cluster wurde mit TOAST_MAX_CHUNK_SIZE %d initialisiert, aber der Server wurde mit TOAST_MAX_CHUNK_SIZE %d kompiliert." -#: access/transam/xlog.c:4842 +#: access/transam/xlog.c:4897 #, c-format msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." msgstr "Der Datenbank-Cluster wurde mit LOBLKSIZE %d initialisiert, aber der Server wurde mit LOBLKSIZE %d kompiliert." -#: access/transam/xlog.c:4851 +#: access/transam/xlog.c:4906 #, c-format msgid "The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL." msgstr "Der Datenbank-Cluster wurde ohne USE_FLOAT8_BYVAL initialisiert, aber der Server wurde mit USE_FLOAT8_BYVAL kompiliert." -#: access/transam/xlog.c:4858 +#: access/transam/xlog.c:4913 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "Der Datenbank-Cluster wurde mit USE_FLOAT8_BYVAL initialisiert, aber der Server wurde ohne USE_FLOAT8_BYVAL kompiliert." -#: access/transam/xlog.c:4867 +#: access/transam/xlog.c:4922 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "WAL-Segmentgröße muss eine Zweierpotenz zwischen 1 MB und 1 GB sein, aber die Kontrolldatei gibt %d Byte an" msgstr[1] "WAL-Segmentgröße muss eine Zweierpotenz zwischen 1 MB und 1 GB sein, aber die Kontrolldatei gibt %d Bytes an" -#: access/transam/xlog.c:4879 +#: access/transam/xlog.c:4934 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "»min_wal_size« muss mindestens zweimal so groß wie »wal_segment_size« sein" -#: access/transam/xlog.c:4883 +#: access/transam/xlog.c:4938 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "»max_wal_size« muss mindestens zweimal so groß wie »wal_segment_size« sein" -#: access/transam/xlog.c:5319 +#: access/transam/xlog.c:5372 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "konnte Bootstrap-Write-Ahead-Log-Datei nicht schreiben: %m" -#: access/transam/xlog.c:5327 +#: access/transam/xlog.c:5380 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "konnte Bootstrap-Write-Ahead-Log-Datei nicht fsyncen: %m" -#: access/transam/xlog.c:5333 +#: access/transam/xlog.c:5386 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "konnte Bootstrap-Write-Ahead-Log-Datei nicht schließen: %m" -#: access/transam/xlog.c:5394 +#: access/transam/xlog.c:5447 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "Verwendung von Recovery-Befehlsdatei »%s« wird nicht unterstützt" -#: access/transam/xlog.c:5459 +#: access/transam/xlog.c:5512 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "Standby-Modus wird von Servern im Einzelbenutzermodus nicht unterstützt" -#: access/transam/xlog.c:5476 +#: access/transam/xlog.c:5529 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "weder primary_conninfo noch restore_command angegeben" -#: access/transam/xlog.c:5477 +#: access/transam/xlog.c:5530 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "Der Datenbankserver prüft das Unterverzeichnis pg_wal regelmäßig auf dort abgelegte Dateien." -#: access/transam/xlog.c:5485 +#: access/transam/xlog.c:5538 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "restore_command muss angegeben werden, wenn der Standby-Modus nicht eingeschaltet ist" -#: access/transam/xlog.c:5523 +#: access/transam/xlog.c:5576 #, c-format msgid "recovery target timeline %u does not exist" msgstr "recovery_target_timeline %u existiert nicht" -#: access/transam/xlog.c:5645 +#: access/transam/xlog.c:5698 #, c-format msgid "archive recovery complete" msgstr "Wiederherstellung aus Archiv abgeschlossen" -#: access/transam/xlog.c:5711 access/transam/xlog.c:5984 +#: access/transam/xlog.c:5764 access/transam/xlog.c:6035 #, c-format msgid "recovery stopping after reaching consistency" msgstr "Wiederherstellung beendet nachdem Konsistenz erreicht wurde" -#: access/transam/xlog.c:5732 +#: access/transam/xlog.c:5785 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "Wiederherstellung beendet vor WAL-Position (LSN) »%X/%X«" -#: access/transam/xlog.c:5818 +#: access/transam/xlog.c:5870 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "Wiederherstellung beendet vor Commit der Transaktion %u, Zeit %s" -#: access/transam/xlog.c:5825 +#: access/transam/xlog.c:5877 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "Wiederherstellung beendet vor Abbruch der Transaktion %u, Zeit %s" -#: access/transam/xlog.c:5878 +#: access/transam/xlog.c:5930 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "Wiederherstellung beendet bei Restore-Punkt »%s«, Zeit %s" -#: access/transam/xlog.c:5896 +#: access/transam/xlog.c:5948 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "Wiederherstellung beendet nach WAL-Position (LSN) »%X/%X«" -#: access/transam/xlog.c:5964 +#: access/transam/xlog.c:6015 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "Wiederherstellung beendet nach Commit der Transaktion %u, Zeit %s" -#: access/transam/xlog.c:5972 +#: access/transam/xlog.c:6023 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "Wiederherstellung beendet nach Abbruch der Transaktion %u, Zeit %s" -#: access/transam/xlog.c:6021 -#, fuzzy, c-format -#| msgid "starting archive recovery" +#: access/transam/xlog.c:6068 +#, c-format msgid "pausing at the end of recovery" -msgstr "starte Wiederherstellung aus Archiv" +msgstr "pausiere am Ende der Wiederherstellung" -#: access/transam/xlog.c:6022 -#, fuzzy, c-format -#| msgid "Execute pg_wal_replay_resume() to continue." +#: access/transam/xlog.c:6069 +#, c-format msgid "Execute pg_wal_replay_resume() to promote." -msgstr "Führen Sie pg_wal_replay_resume() aus um fortzusetzen." +msgstr "Führen Sie pg_wal_replay_resume() aus, um den Server zum Primärserver zu befördern." -#: access/transam/xlog.c:6025 +#: access/transam/xlog.c:6072 access/transam/xlog.c:6345 #, c-format msgid "recovery has paused" msgstr "Wiederherstellung wurde pausiert" -#: access/transam/xlog.c:6026 +#: access/transam/xlog.c:6073 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Führen Sie pg_wal_replay_resume() aus um fortzusetzen." -#: access/transam/xlog.c:6243 +#: access/transam/xlog.c:6336 +#, c-format +msgid "hot standby is not possible because of insufficient parameter settings" +msgstr "Hot Standby ist nicht möglich wegen unzureichender Parametereinstellungen" + +#: access/transam/xlog.c:6337 access/transam/xlog.c:6360 +#: access/transam/xlog.c:6390 +#, c-format +msgid "%s = %d is a lower setting than on the primary server, where its value was %d." +msgstr "%s = %d ist eine niedrigere Einstellung als auf dem Primärserver, wo der Wert %d war." + +#: access/transam/xlog.c:6346 +#, c-format +msgid "If recovery is unpaused, the server will shut down." +msgstr "Wenn die Wiederherstellungspause beendet wird, wird der Server herunterfahren." + +#: access/transam/xlog.c:6347 +#, c-format +msgid "You can then restart the server after making the necessary configuration changes." +msgstr "Sie können den Server dann neu starten, nachdem die nötigen Konfigurationsänderungen getätigt worden sind." + +#: access/transam/xlog.c:6358 +#, c-format +msgid "promotion is not possible because of insufficient parameter settings" +msgstr "Beförderung ist nicht möglich wegen unzureichender Parametereinstellungen" + +#: access/transam/xlog.c:6364 +#, c-format +msgid "Restart the server after making the necessary configuration changes." +msgstr "Starten Sie den Server neu, nachdem die nötigen Konfigurationsänderungen getätigt worden sind." + +#: access/transam/xlog.c:6388 #, c-format -msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" -msgstr "Hot Standby ist nicht möglich, weil %s = %d eine niedrigere Einstellung als auf dem Masterserver ist (Wert dort war %d)" +msgid "recovery aborted because of insufficient parameter settings" +msgstr "Wiederherstellung abgebrochen wegen unzureichender Parametereinstellungen" -#: access/transam/xlog.c:6267 +#: access/transam/xlog.c:6394 #, c-format -msgid "WAL was generated with wal_level=minimal, data may be missing" -msgstr "WAL wurde mit wal_level=minimal erzeugt, eventuell fehlen Daten" +msgid "You can restart the server after making the necessary configuration changes." +msgstr "Sie können den Server neu starten, nachdem die nötigen Konfigurationsänderungen getätigt worden sind." -#: access/transam/xlog.c:6268 +#: access/transam/xlog.c:6416 #, c-format -msgid "This happens if you temporarily set wal_level=minimal without taking a new base backup." -msgstr "Das passiert, wenn vorübergehend wal_level=minimal gesetzt wurde, ohne ein neues Base-Backup zu erzeugen." +msgid "WAL was generated with wal_level=minimal, cannot continue recovering" +msgstr "WAL wurde mit wal_level=minimal erzeugt, Wiederherstellung kann nicht fortgesetzt werden" -#: access/transam/xlog.c:6279 +#: access/transam/xlog.c:6417 #, c-format -msgid "hot standby is not possible because wal_level was not set to \"replica\" or higher on the master server" -msgstr "Hot Standby ist nicht möglich, weil wal_level auf dem Masterserver nicht auf »replica« oder höher gesetzt wurde" +msgid "This happens if you temporarily set wal_level=minimal on the server." +msgstr "Das passiert, wenn auf dem Server vorübergehend wal_level=minimal gesetzt wurde." -#: access/transam/xlog.c:6280 +#: access/transam/xlog.c:6418 #, c-format -msgid "Either set wal_level to \"replica\" on the master, or turn off hot_standby here." -msgstr "Setzen Sie entweder wal_level auf »replica« auf dem Master oder schalten Sie hot_standby hier aus." +msgid "Use a backup taken after setting wal_level to higher than minimal." +msgstr "Verwenden Sie ein Backup, das durchgeführt wurde, nachdem wal_level auf höher als minimal gesetzt wurde." -#: access/transam/xlog.c:6342 +#: access/transam/xlog.c:6486 #, c-format msgid "control file contains invalid checkpoint location" msgstr "Kontrolldatei enthält ungültige Checkpoint-Position" -#: access/transam/xlog.c:6349 +#: access/transam/xlog.c:6497 #, c-format msgid "database system was shut down at %s" msgstr "Datenbanksystem wurde am %s heruntergefahren" -#: access/transam/xlog.c:6355 +#: access/transam/xlog.c:6503 #, c-format msgid "database system was shut down in recovery at %s" msgstr "Datenbanksystem wurde während der Wiederherstellung am %s heruntergefahren" -#: access/transam/xlog.c:6361 +#: access/transam/xlog.c:6509 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "Datenbanksystem wurde beim Herunterfahren unterbrochen; letzte bekannte Aktion am %s" -#: access/transam/xlog.c:6367 +#: access/transam/xlog.c:6515 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "Datenbanksystem wurde während der Wiederherstellung am %s unterbrochen" -#: access/transam/xlog.c:6369 +#: access/transam/xlog.c:6517 #, c-format msgid "This probably means that some data is corrupted and you will have to use the last backup for recovery." msgstr "Das bedeutet wahrscheinlich, dass einige Daten verfälscht sind und Sie die letzte Datensicherung zur Wiederherstellung verwenden müssen." -#: access/transam/xlog.c:6375 +#: access/transam/xlog.c:6523 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "Datenbanksystem wurde während der Wiederherstellung bei Logzeit %s unterbrochen" -#: access/transam/xlog.c:6377 +#: access/transam/xlog.c:6525 #, c-format msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." msgstr "Wenn dies mehr als einmal vorgekommen ist, dann sind einige Daten möglicherweise verfälscht und Sie müssen ein früheres Wiederherstellungsziel wählen." -#: access/transam/xlog.c:6383 +#: access/transam/xlog.c:6531 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "Datenbanksystem wurde unterbrochen; letzte bekannte Aktion am %s" -#: access/transam/xlog.c:6389 +#: access/transam/xlog.c:6537 #, c-format msgid "control file contains invalid database cluster state" msgstr "Kontrolldatei enthält ungültigen Datenbankclusterstatus" -#: access/transam/xlog.c:6446 +#: access/transam/xlog.c:6594 #, c-format msgid "entering standby mode" msgstr "Standby-Modus eingeschaltet" -#: access/transam/xlog.c:6449 +#: access/transam/xlog.c:6597 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "starte Point-in-Time-Recovery bis XID %u" -#: access/transam/xlog.c:6453 +#: access/transam/xlog.c:6601 #, c-format msgid "starting point-in-time recovery to %s" msgstr "starte Point-in-Time-Recovery bis %s" -#: access/transam/xlog.c:6457 +#: access/transam/xlog.c:6605 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "starte Point-in-Time-Recovery bis »%s«" -#: access/transam/xlog.c:6461 +#: access/transam/xlog.c:6609 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "starte Point-in-Time-Recovery bis WAL-Position (LSN) »%X/%X«" -#: access/transam/xlog.c:6466 +#: access/transam/xlog.c:6613 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "starte Point-in-Time-Recovery bis zum frühesten konsistenten Punkt" -#: access/transam/xlog.c:6469 +#: access/transam/xlog.c:6616 #, c-format msgid "starting archive recovery" msgstr "starte Wiederherstellung aus Archiv" -#: access/transam/xlog.c:6524 access/transam/xlog.c:6657 -#, c-format -msgid "checkpoint record is at %X/%X" -msgstr "Checkpoint-Eintrag ist bei %X/%X" - -#: access/transam/xlog.c:6539 +#: access/transam/xlog.c:6692 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "konnte die vom Checkpoint-Datensatz referenzierte Redo-Position nicht finden" -#: access/transam/xlog.c:6540 access/transam/xlog.c:6550 +#: access/transam/xlog.c:6693 access/transam/xlog.c:6703 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n" "Be careful: removing \"%s/backup_label\" will result in a corrupt cluster if restoring from a backup." msgstr "" +"Wenn Sie gerade ein Backup wiederherstellen, dann erzeugen Sie »%s/recovery.signal« und setzen Sie die notwendigen Recovery-Optionen.\n" +"Wenn Sie gerade kein Backup wiederherstellen, dann versuchen Sie, die Datei »%s/backup_label« zu entfernen.\n" +"Vorsicht: Wenn ein Backup wiederhergestellt wird und »%s/backup_label« gelöscht wird, dann wird das den Cluster verfälschen." -#: access/transam/xlog.c:6549 +#: access/transam/xlog.c:6702 #, c-format msgid "could not locate required checkpoint record" msgstr "konnte den nötigen Checkpoint-Datensatz nicht finden" -#: access/transam/xlog.c:6578 commands/tablespace.c:654 +#: access/transam/xlog.c:6731 commands/tablespace.c:666 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht erstellen: %m" -#: access/transam/xlog.c:6610 access/transam/xlog.c:6616 +#: access/transam/xlog.c:6763 access/transam/xlog.c:6769 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ignoriere Datei »%s«, weil keine Datei »%s« existiert" -#: access/transam/xlog.c:6612 access/transam/xlog.c:11800 +#: access/transam/xlog.c:6765 access/transam/xlog.c:12085 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Datei »%s« wurde in »%s« umbenannt." -#: access/transam/xlog.c:6618 +#: access/transam/xlog.c:6771 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "Konnte Datei »%s« nicht in »%s« umbenennen: %m." -#: access/transam/xlog.c:6669 +#: access/transam/xlog.c:6822 #, c-format msgid "could not locate a valid checkpoint record" msgstr "konnte keinen gültigen Checkpoint-Datensatz finden" -#: access/transam/xlog.c:6707 +#: access/transam/xlog.c:6860 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "angeforderte Zeitleiste %u ist kein Kind der History dieses Servers" -#: access/transam/xlog.c:6709 +#: access/transam/xlog.c:6862 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "Neuester Checkpoint ist bei %X/%X auf Zeitleiste %u, aber in der History der angeforderten Zeitleiste zweigte der Server von dieser Zeitleiste bei %X/%X ab." -#: access/transam/xlog.c:6725 +#: access/transam/xlog.c:6876 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "angeforderte Zeitleiste %u enthält nicht den minimalen Wiederherstellungspunkt %X/%X auf Zeitleiste %u" -#: access/transam/xlog.c:6756 +#: access/transam/xlog.c:6906 #, c-format msgid "invalid next transaction ID" msgstr "ungültige nächste Transaktions-ID" -#: access/transam/xlog.c:6850 +#: access/transam/xlog.c:7007 #, c-format msgid "invalid redo in checkpoint record" msgstr "ungültiges Redo im Checkpoint-Datensatz" -#: access/transam/xlog.c:6861 +#: access/transam/xlog.c:7018 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "ungültiger Redo-Datensatz im Shutdown-Checkpoint" -#: access/transam/xlog.c:6895 +#: access/transam/xlog.c:7052 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "Datenbanksystem wurde nicht richtig heruntergefahren; automatische Wiederherstellung läuft" -#: access/transam/xlog.c:6899 +#: access/transam/xlog.c:7056 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "Wiederherstellung nach Absturz beginnt in Zeitleiste %u und hat Zielzeitleiste %u" -#: access/transam/xlog.c:6946 +#: access/transam/xlog.c:7103 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "Daten in backup_label stimmen nicht mit Kontrolldatei überein" -#: access/transam/xlog.c:6947 +#: access/transam/xlog.c:7104 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "Das bedeutet, dass die Datensicherung verfälscht ist und Sie eine andere Datensicherung zur Wiederherstellung verwenden werden müssen." -#: access/transam/xlog.c:7038 -#, c-format -msgid "initializing for hot standby" -msgstr "initialisiere für Hot Standby" - -#: access/transam/xlog.c:7171 +#: access/transam/xlog.c:7331 #, c-format msgid "redo starts at %X/%X" msgstr "Redo beginnt bei %X/%X" -#: access/transam/xlog.c:7395 +#: access/transam/xlog.c:7572 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "angeforderter Recovery-Endpunkt ist vor konsistentem Recovery-Punkt" -#: access/transam/xlog.c:7433 -#, c-format -msgid "redo done at %X/%X" +#: access/transam/xlog.c:7610 +#, fuzzy, c-format +#| msgid "redo done at %X/%X" +msgid "redo done at %X/%X system usage: %s" msgstr "Redo fertig bei %X/%X" -#: access/transam/xlog.c:7438 +#: access/transam/xlog.c:7616 #, c-format msgid "last completed transaction was at log time %s" msgstr "letzte vollständige Transaktion war bei Logzeit %s" -#: access/transam/xlog.c:7447 +#: access/transam/xlog.c:7625 #, c-format msgid "redo is not required" msgstr "Redo nicht nötig" -#: access/transam/xlog.c:7459 +#: access/transam/xlog.c:7637 #, c-format msgid "recovery ended before configured recovery target was reached" -msgstr "" +msgstr "Wiederherstellung endete bevor das konfigurierte Wiederherstellungsziel erreicht wurde" -#: access/transam/xlog.c:7538 access/transam/xlog.c:7542 +#: access/transam/xlog.c:7716 access/transam/xlog.c:7720 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL endet vor dem Ende der Online-Sicherung" -#: access/transam/xlog.c:7539 +#: access/transam/xlog.c:7717 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Der komplette WAL, der während der Online-Sicherung erzeugt wurde, muss bei der Wiederherstellung verfügbar sein." -#: access/transam/xlog.c:7543 +#: access/transam/xlog.c:7721 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "Die mit pg_start_backup() begonnene Online-Sicherung muss mit pg_stop_backup() beendet werden und der ganze WAL bis zu diesem Punkt muss bei der Wiederherstellung verfügbar sein." -#: access/transam/xlog.c:7546 +#: access/transam/xlog.c:7724 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL endet vor einem konsistenten Wiederherstellungspunkt" -#: access/transam/xlog.c:7581 +#: access/transam/xlog.c:7759 #, c-format msgid "selected new timeline ID: %u" msgstr "gewählte neue Zeitleisten-ID: %u" -#: access/transam/xlog.c:8029 +#: access/transam/xlog.c:8203 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "konsistenter Wiederherstellungszustand erreicht bei %X/%X" -#: access/transam/xlog.c:8239 +#: access/transam/xlog.c:8412 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "ungültige primäre Checkpoint-Verknüpfung in Kontrolldatei" -#: access/transam/xlog.c:8243 +#: access/transam/xlog.c:8416 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "ungültige Checkpoint-Verknüpfung in backup_label-Datei" -#: access/transam/xlog.c:8261 +#: access/transam/xlog.c:8434 #, c-format msgid "invalid primary checkpoint record" msgstr "ungültiger primärer Checkpoint-Datensatz" -#: access/transam/xlog.c:8265 +#: access/transam/xlog.c:8438 #, c-format msgid "invalid checkpoint record" msgstr "ungültiger Checkpoint-Datensatz" -#: access/transam/xlog.c:8276 +#: access/transam/xlog.c:8449 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "ungültige Resource-Manager-ID im primären Checkpoint-Datensatz" -#: access/transam/xlog.c:8280 +#: access/transam/xlog.c:8453 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "ungültige Resource-Manager-ID im Checkpoint-Datensatz" -#: access/transam/xlog.c:8293 +#: access/transam/xlog.c:8466 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "ungültige xl_info im primären Checkpoint-Datensatz" -#: access/transam/xlog.c:8297 +#: access/transam/xlog.c:8470 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "ungültige xl_info im Checkpoint-Datensatz" -#: access/transam/xlog.c:8308 +#: access/transam/xlog.c:8481 #, c-format msgid "invalid length of primary checkpoint record" msgstr "ungültige Länge des primären Checkpoint-Datensatzes" -#: access/transam/xlog.c:8312 +#: access/transam/xlog.c:8485 #, c-format msgid "invalid length of checkpoint record" msgstr "ungültige Länge des Checkpoint-Datensatzes" -#: access/transam/xlog.c:8492 +#: access/transam/xlog.c:8666 #, c-format msgid "shutting down" msgstr "fahre herunter" -#: access/transam/xlog.c:8812 +#. translator: the placeholders show checkpoint options +#: access/transam/xlog.c:8705 #, c-format -msgid "checkpoint skipped because system is idle" -msgstr "Checkpoint übersprungen weil das System inaktiv ist" +msgid "restartpoint starting:%s%s%s%s%s%s%s%s" +msgstr "Restart-Punkt beginnt:%s%s%s%s%s%s%s%s" -#: access/transam/xlog.c:9012 +#. translator: the placeholders show checkpoint options +#: access/transam/xlog.c:8717 #, c-format -msgid "concurrent write-ahead log activity while database system is shutting down" -msgstr "gleichzeitige Write-Ahead-Log-Aktivität während das Datenbanksystem herunterfährt" +msgid "checkpoint starting:%s%s%s%s%s%s%s%s" +msgstr "Checkpoint beginnt:%s%s%s%s%s%s%s%s" + +#: access/transam/xlog.c:8777 +#, c-format +msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" +msgstr "" -#: access/transam/xlog.c:9269 +#: access/transam/xlog.c:8797 #, c-format -msgid "skipping restartpoint, recovery has already ended" -msgstr "Restart-Punkt übersprungen, Wiederherstellung ist bereits beendet" +msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" +msgstr "" -#: access/transam/xlog.c:9292 +#: access/transam/xlog.c:9230 #, c-format -msgid "skipping restartpoint, already performed at %X/%X" -msgstr "Restart-Punkt wird übersprungen, schon bei %X/%X erledigt" +msgid "concurrent write-ahead log activity while database system is shutting down" +msgstr "gleichzeitige Write-Ahead-Log-Aktivität während das Datenbanksystem herunterfährt" -#: access/transam/xlog.c:9460 +#: access/transam/xlog.c:9686 #, c-format msgid "recovery restart point at %X/%X" msgstr "Recovery-Restart-Punkt bei %X/%X" -#: access/transam/xlog.c:9462 +#: access/transam/xlog.c:9688 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Die letzte vollständige Transaktion war bei Logzeit %s." -#: access/transam/xlog.c:9691 +#: access/transam/xlog.c:9928 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "Restore-Punkt »%s« erzeugt bei %X/%X" -#: access/transam/xlog.c:9832 +#: access/transam/xlog.c:10073 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "unerwartete vorherige Zeitleisten-ID %u (aktuelle Zeitleisten-ID %u) im Checkpoint-Datensatz" -#: access/transam/xlog.c:9841 +#: access/transam/xlog.c:10082 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "unerwartete Zeitleisten-ID %u (nach %u) im Checkpoint-Datensatz" -#: access/transam/xlog.c:9857 +#: access/transam/xlog.c:10098 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "unerwartete Zeitleisten-ID %u in Checkpoint-Datensatz, bevor der minimale Wiederherstellungspunkt %X/%X auf Zeitleiste %u erreicht wurde" -#: access/transam/xlog.c:9933 +#: access/transam/xlog.c:10173 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "Online-Sicherung wurde storniert, Wiederherstellung kann nicht fortgesetzt werden" -#: access/transam/xlog.c:9987 access/transam/xlog.c:10041 -#: access/transam/xlog.c:10064 +#: access/transam/xlog.c:10229 access/transam/xlog.c:10285 +#: access/transam/xlog.c:10308 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "unerwartete Zeitleisten-ID %u (sollte %u sein) im Checkpoint-Datensatz" -#: access/transam/xlog.c:10390 +#: access/transam/xlog.c:10657 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "konnte Write-Through-Logdatei »%s« nicht fsyncen: %m" -#: access/transam/xlog.c:10396 +#: access/transam/xlog.c:10663 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fdatasyncen: %m" -#: access/transam/xlog.c:10495 access/transam/xlog.c:11033 +#: access/transam/xlog.c:10774 access/transam/xlog.c:11303 #: access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 #: access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 #: access/transam/xlogfuncs.c:383 @@ -2772,218 +2888,206 @@ msgstr "konnte Datei »%s« nicht fdatasyncen: %m" msgid "WAL control functions cannot be executed during recovery." msgstr "Während der Wiederherstellung können keine WAL-Kontrollfunktionen ausgeführt werden." -#: access/transam/xlog.c:10504 access/transam/xlog.c:11042 +#: access/transam/xlog.c:10783 access/transam/xlog.c:11312 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "WAL-Level nicht ausreichend, um Online-Sicherung durchzuführen" -#: access/transam/xlog.c:10505 access/transam/xlog.c:11043 +#: access/transam/xlog.c:10784 access/transam/xlog.c:11313 #: access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "wal_level muss beim Serverstart auf »replica« oder »logical« gesetzt werden." -#: access/transam/xlog.c:10510 +#: access/transam/xlog.c:10789 #, c-format msgid "backup label too long (max %d bytes)" msgstr "Backup-Label zu lang (maximal %d Bytes)" -#: access/transam/xlog.c:10547 access/transam/xlog.c:10832 -#: access/transam/xlog.c:10870 +#: access/transam/xlog.c:10826 access/transam/xlog.c:11102 +#: access/transam/xlog.c:11140 #, c-format msgid "a backup is already in progress" msgstr "ein Backup läuft bereits" -#: access/transam/xlog.c:10548 +#: access/transam/xlog.c:10827 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Führen Sie pg_stop_backup() aus und versuchen Sie es nochmal." -#: access/transam/xlog.c:10644 +#: access/transam/xlog.c:10923 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "mit full_page_writes=off erzeugtes WAL wurde seit dem letzten Restart-Punkt zurückgespielt" -#: access/transam/xlog.c:10646 access/transam/xlog.c:11238 +#: access/transam/xlog.c:10925 access/transam/xlog.c:11508 #, c-format -msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the master, and then try an online backup again." -msgstr "Das bedeutet, dass die aktuelle Datensicherung auf dem Standby-Server verfälscht ist und nicht verwendet werden sollte. Schalten Sie full_page_writes ein, führen Sie CHECKPOINT aus und versuchen Sie dann die Online-Sicherung erneut." +msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the primary, and then try an online backup again." +msgstr "Das bedeutet, dass die aktuelle Datensicherung auf dem Standby-Server verfälscht ist und nicht verwendet werden sollte. Schalten Sie auf dem Primärserver full_page_writes ein, führen Sie dort CHECKPOINT aus und versuchen Sie dann die Online-Sicherung erneut." -#: access/transam/xlog.c:10729 replication/basebackup.c:1420 -#: utils/adt/misc.c:341 +#: access/transam/xlog.c:11001 replication/basebackup.c:1433 +#: utils/adt/misc.c:345 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "Ziel für symbolische Verknüpfung »%s« ist zu lang" -#: access/transam/xlog.c:10782 commands/tablespace.c:402 -#: commands/tablespace.c:566 replication/basebackup.c:1435 utils/adt/misc.c:349 +#: access/transam/xlog.c:11051 commands/tablespace.c:402 +#: commands/tablespace.c:578 replication/basebackup.c:1448 utils/adt/misc.c:353 #, c-format msgid "tablespaces are not supported on this platform" msgstr "Tablespaces werden auf dieser Plattform nicht unterstützt" -#: access/transam/xlog.c:10833 access/transam/xlog.c:10871 +#: access/transam/xlog.c:11103 access/transam/xlog.c:11141 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "Wenn Sie sicher sind, dass noch kein Backup läuft, entfernen Sie die Datei »%s« und versuchen Sie es noch einmal." -#: access/transam/xlog.c:11058 +#: access/transam/xlog.c:11328 #, c-format msgid "exclusive backup not in progress" msgstr "es läuft kein exklusives Backup" -#: access/transam/xlog.c:11085 +#: access/transam/xlog.c:11355 #, c-format msgid "a backup is not in progress" msgstr "es läuft kein Backup" -#: access/transam/xlog.c:11171 access/transam/xlog.c:11184 -#: access/transam/xlog.c:11573 access/transam/xlog.c:11579 -#: access/transam/xlog.c:11627 access/transam/xlog.c:11700 -#: access/transam/xlogfuncs.c:692 +#: access/transam/xlog.c:11441 access/transam/xlog.c:11454 +#: access/transam/xlog.c:11843 access/transam/xlog.c:11849 +#: access/transam/xlog.c:11897 access/transam/xlog.c:11977 +#: access/transam/xlog.c:12001 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "ungültige Daten in Datei »%s«" -#: access/transam/xlog.c:11188 replication/basebackup.c:1268 +#: access/transam/xlog.c:11458 replication/basebackup.c:1281 #, c-format msgid "the standby was promoted during online backup" msgstr "der Standby-Server wurde während der Online-Sicherung zum Primärserver befördert" -#: access/transam/xlog.c:11189 replication/basebackup.c:1269 +#: access/transam/xlog.c:11459 replication/basebackup.c:1282 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "Das bedeutet, dass die aktuelle Online-Sicherung verfälscht ist und nicht verwendet werden sollte. Versuchen Sie, eine neue Online-Sicherung durchzuführen." -#: access/transam/xlog.c:11236 +#: access/transam/xlog.c:11506 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "mit full_page_writes=off erzeugtes WAL wurde während der Online-Sicherung zurückgespielt" -#: access/transam/xlog.c:11356 +#: access/transam/xlog.c:11626 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "Basissicherung beendet, warte bis die benötigten WAL-Segmente archiviert sind" -#: access/transam/xlog.c:11368 +#: access/transam/xlog.c:11638 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "warte immer noch, bis alle benötigten WAL-Segmente archiviert sind (%d Sekunden abgelaufen)" -#: access/transam/xlog.c:11370 +#: access/transam/xlog.c:11640 #, c-format msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." msgstr "Prüfen Sie, ob das archive_command korrekt ausgeführt wird. Dieser Sicherungsvorgang kann gefahrlos abgebrochen werden, aber die Datenbanksicherung wird ohne die fehlenden WAL-Segmente nicht benutzbar sein." -#: access/transam/xlog.c:11377 +#: access/transam/xlog.c:11647 #, c-format msgid "all required WAL segments have been archived" msgstr "alle benötigten WAL-Segmente wurden archiviert" -#: access/transam/xlog.c:11381 +#: access/transam/xlog.c:11651 #, c-format msgid "WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup" msgstr "WAL-Archivierung ist nicht eingeschaltet; Sie müssen dafür sorgen, dass alle benötigten WAL-Segmente auf andere Art kopiert werden, um die Sicherung abzuschließen" -#: access/transam/xlog.c:11434 -#, fuzzy, c-format -#| msgid "aborting backup due to backend exiting before pg_stop_backup was called" -msgid "aborting backup due to backend exiting before pg_stop_back up was called" -msgstr "Backup wird abgebrochen, weil Backend-Prozess beendete, bevor pg_stop_backup aufgerufen wurde" - -#: access/transam/xlog.c:11610 -#, c-format -msgid "backup time %s in file \"%s\"" -msgstr "Backup-Zeit %s in Datei »%s«" - -#: access/transam/xlog.c:11615 +#: access/transam/xlog.c:11704 #, c-format -msgid "backup label %s in file \"%s\"" -msgstr "Backup-Label %s in Datei »%s«" +msgid "aborting backup due to backend exiting before pg_stop_backup was called" +msgstr "Backup wird abgebrochen, weil Backend-Prozess beendete, bevor pg_stop_backup aufgerufen wurde" -#: access/transam/xlog.c:11628 +#: access/transam/xlog.c:11898 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "Gelesene Zeitleisten-ID ist %u, aber %u wurde erwartet." -#: access/transam/xlog.c:11632 -#, c-format -msgid "backup timeline %u in file \"%s\"" -msgstr "Backup-Zeitleiste %u in Datei »%s«" - #. translator: %s is a WAL record description -#: access/transam/xlog.c:11740 +#: access/transam/xlog.c:12026 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "WAL-Redo bei %X/%X für %s" -#: access/transam/xlog.c:11789 +#: access/transam/xlog.c:12074 #, c-format msgid "online backup mode was not canceled" msgstr "Online-Sicherungsmodus wurde nicht storniert" -#: access/transam/xlog.c:11790 +#: access/transam/xlog.c:12075 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "Konnte Datei »%s« nicht in »%s« umbenennen: %m." -#: access/transam/xlog.c:11799 access/transam/xlog.c:11811 -#: access/transam/xlog.c:11821 +#: access/transam/xlog.c:12084 access/transam/xlog.c:12096 +#: access/transam/xlog.c:12106 #, c-format msgid "online backup mode canceled" msgstr "Online-Sicherungsmodus storniert" -#: access/transam/xlog.c:11812 +#: access/transam/xlog.c:12097 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "Dateien »%s« und »%s« wurden in »%s« und »%s« umbenannt." -#: access/transam/xlog.c:11822 +#: access/transam/xlog.c:12107 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "Datei »%s« wurde in »%s« umbenannt, aber Datei »%s« konnte nicht in »%s« umbenannt werden: %m." -#: access/transam/xlog.c:11955 access/transam/xlogutils.c:965 +#: access/transam/xlog.c:12246 access/transam/xlogutils.c:986 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "konnte nicht aus Logsegment %s, Position %u lesen: %m" -#: access/transam/xlog.c:11961 access/transam/xlogutils.c:972 +#: access/transam/xlog.c:12252 access/transam/xlogutils.c:993 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "konnte nicht aus Logsegment %s bei Position %u lesen: %d von %zu gelesen" -#: access/transam/xlog.c:12489 -#, fuzzy, c-format -#| msgid "received fast shutdown request" -msgid "wal receiver process shutdown requested" -msgstr "schnelles Herunterfahren verlangt" +#: access/transam/xlog.c:12793 +#, c-format +msgid "WAL receiver process shutdown requested" +msgstr "Herunterfahren des WAL-Receiver-Prozesses verlangt" -#: access/transam/xlog.c:12595 +#: access/transam/xlog.c:12880 #, c-format msgid "received promote request" msgstr "Anforderung zum Befördern empfangen" -#: access/transam/xlog.c:12608 +#: access/transam/xlog.c:12893 #, c-format msgid "promote trigger file found: %s" msgstr "Promote-Triggerdatei gefunden: %s" -#: access/transam/xlog.c:12617 +#: access/transam/xlog.c:12901 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "konnte »stat« für Promote-Triggerdatei »%s« nicht ausführen: %m" #: access/transam/xlogarchive.c:205 #, c-format -msgid "archive file \"%s\" has wrong size: %lu instead of %lu" -msgstr "Archivdatei »%s« hat falsche Größe: %lu statt %lu" +msgid "archive file \"%s\" has wrong size: %lld instead of %lld" +msgstr "Archivdatei »%s« hat falsche Größe: %lld statt %lld" #: access/transam/xlogarchive.c:214 #, c-format msgid "restored log file \"%s\" from archive" msgstr "Logdatei »%s« aus Archiv wiederhergestellt" -#: access/transam/xlogarchive.c:259 +#: access/transam/xlogarchive.c:228 +#, c-format +msgid "restore_command returned a zero exit status, but stat() failed." +msgstr "" + +#: access/transam/xlogarchive.c:260 #, c-format msgid "could not restore file \"%s\" from archive: %s" msgstr "konnte Datei »%s« nicht aus Archiv wiederherstellen: %s" @@ -2991,17 +3095,17 @@ msgstr "konnte Datei »%s« nicht aus Archiv wiederherstellen: %s" #. translator: First %s represents a postgresql.conf parameter name like #. "recovery_end_command", the 2nd is the value of that parameter, the #. third an already translated error message. -#: access/transam/xlogarchive.c:368 +#: access/transam/xlogarchive.c:369 #, c-format msgid "%s \"%s\": %s" msgstr "%s »%s«: %s" -#: access/transam/xlogarchive.c:478 access/transam/xlogarchive.c:542 +#: access/transam/xlogarchive.c:479 access/transam/xlogarchive.c:543 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "konnte Archivstatusdatei »%s« nicht erstellen: %m" -#: access/transam/xlogarchive.c:486 access/transam/xlogarchive.c:550 +#: access/transam/xlogarchive.c:487 access/transam/xlogarchive.c:551 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "konnte Archivstatusdatei »%s« nicht schreiben: %m" @@ -3021,34 +3125,38 @@ msgstr "es läuft ein nicht-exklusives Backup" msgid "Did you mean to use pg_stop_backup('f')?" msgstr "Meinten Sie pg_stop_backup('f')?" -#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1350 -#: commands/event_trigger.c:1902 commands/extension.c:1931 -#: commands/extension.c:2039 commands/extension.c:2324 commands/prepare.c:712 -#: executor/execExpr.c:2203 executor/execSRF.c:728 executor/functions.c:1046 -#: foreign/foreign.c:520 libpq/hba.c:2666 replication/logical/launcher.c:1086 -#: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1483 -#: replication/slotfuncs.c:249 replication/walsender.c:3255 -#: storage/ipc/shmem.c:550 utils/adt/datetime.c:4778 utils/adt/genfile.c:469 -#: utils/adt/genfile.c:552 utils/adt/jsonfuncs.c:1792 -#: utils/adt/jsonfuncs.c:1904 utils/adt/jsonfuncs.c:2092 -#: utils/adt/jsonfuncs.c:2201 utils/adt/jsonfuncs.c:3663 utils/adt/misc.c:214 -#: utils/adt/pgstatfuncs.c:476 utils/adt/pgstatfuncs.c:584 -#: utils/adt/pgstatfuncs.c:1713 utils/fmgr/funcapi.c:72 utils/misc/guc.c:9658 +#: access/transam/xlogfuncs.c:185 access/transam/xlogprefetch.c:720 +#: commands/event_trigger.c:1311 commands/event_trigger.c:1869 +#: commands/extension.c:1944 commands/extension.c:2052 +#: commands/extension.c:2337 commands/prepare.c:712 executor/execExpr.c:2453 +#: executor/execSRF.c:738 executor/functions.c:1058 foreign/foreign.c:520 +#: libpq/hba.c:2712 replication/logical/launcher.c:943 +#: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 +#: replication/slotfuncs.c:254 replication/walsender.c:3297 +#: storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:508 +#: utils/adt/genfile.c:591 utils/adt/jsonfuncs.c:1933 +#: utils/adt/jsonfuncs.c:2045 utils/adt/jsonfuncs.c:2233 +#: utils/adt/jsonfuncs.c:2342 utils/adt/jsonfuncs.c:3803 +#: utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:218 utils/adt/pgstatfuncs.c:477 +#: utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 +#: utils/adt/varlena.c:4832 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10026 #: utils/mmgr/portalmem.c:1136 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "Funktion mit Mengenergebnis in einem Zusammenhang aufgerufen, der keine Mengenergebnisse verarbeiten kann" -#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1354 -#: commands/event_trigger.c:1906 commands/extension.c:1935 -#: commands/extension.c:2043 commands/extension.c:2328 commands/prepare.c:716 -#: foreign/foreign.c:525 libpq/hba.c:2670 replication/logical/launcher.c:1090 -#: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1487 -#: replication/slotfuncs.c:253 replication/walsender.c:3259 -#: storage/ipc/shmem.c:554 utils/adt/datetime.c:4782 utils/adt/genfile.c:473 -#: utils/adt/genfile.c:556 utils/adt/misc.c:218 utils/adt/pgstatfuncs.c:480 -#: utils/adt/pgstatfuncs.c:588 utils/adt/pgstatfuncs.c:1717 -#: utils/misc/guc.c:9662 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 +#: access/transam/xlogfuncs.c:189 access/transam/xlogprefetch.c:724 +#: commands/event_trigger.c:1315 commands/event_trigger.c:1873 +#: commands/extension.c:1948 commands/extension.c:2056 +#: commands/extension.c:2341 commands/prepare.c:716 foreign/foreign.c:525 +#: libpq/hba.c:2716 replication/logical/launcher.c:947 +#: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 +#: replication/slotfuncs.c:258 replication/walsender.c:3301 +#: storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:512 +#: utils/adt/genfile.c:595 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:222 +#: utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 +#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4836 utils/misc/guc.c:10030 +#: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "Materialisierungsmodus wird benötigt, ist aber in diesem Zusammenhang nicht erlaubt" @@ -3078,201 +3186,221 @@ msgstr "Wert zu lang für Restore-Punkt (maximal %d Zeichen)" msgid "%s cannot be executed during recovery." msgstr "%s kann nicht während der Wiederherstellung ausgeführt werden." -#: access/transam/xlogfuncs.c:531 access/transam/xlogfuncs.c:558 -#: access/transam/xlogfuncs.c:582 access/transam/xlogfuncs.c:722 +#: access/transam/xlogfuncs.c:531 access/transam/xlogfuncs.c:561 +#: access/transam/xlogfuncs.c:585 access/transam/xlogfuncs.c:608 +#: access/transam/xlogfuncs.c:763 #, c-format msgid "recovery is not in progress" msgstr "Wiederherstellung läuft nicht" -#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:559 -#: access/transam/xlogfuncs.c:583 access/transam/xlogfuncs.c:723 +#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:562 +#: access/transam/xlogfuncs.c:586 access/transam/xlogfuncs.c:609 +#: access/transam/xlogfuncs.c:764 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "Wiederherstellungskontrollfunktionen können nur während der Wiederherstellung ausgeführt werden." -#: access/transam/xlogfuncs.c:537 access/transam/xlogfuncs.c:564 +#: access/transam/xlogfuncs.c:537 access/transam/xlogfuncs.c:567 #, c-format msgid "standby promotion is ongoing" -msgstr "" +msgstr "Beförderung des Standby läuft" -#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:565 -#, fuzzy, c-format -#| msgid "%s cannot be executed from a function" +#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:568 +#, c-format msgid "%s cannot be executed after promotion is triggered." -msgstr "%s kann nicht aus einer Funktion ausgerufen werden" +msgstr "%s kann nicht ausgeführt werden, nachdem eine Beförderung angestoßen wurde." -#: access/transam/xlogfuncs.c:728 +#: access/transam/xlogfuncs.c:769 #, c-format msgid "\"wait_seconds\" must not be negative or zero" msgstr "»wait_seconds« darf nicht negativ oder null sein" -#: access/transam/xlogfuncs.c:748 storage/ipc/signalfuncs.c:164 +#: access/transam/xlogfuncs.c:789 storage/ipc/signalfuncs.c:280 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "konnte Signal nicht an Postmaster senden: %m" -#: access/transam/xlogfuncs.c:784 +#: access/transam/xlogfuncs.c:825 #, c-format -msgid "server did not promote within %d seconds" -msgstr "Befördern des Servers wurde nicht innerhalb von %d Sekunden abgeschlossen" +msgid "server did not promote within %d second" +msgid_plural "server did not promote within %d seconds" +msgstr[0] "Befördern des Servers wurde nicht innerhalb von %d Sekunde abgeschlossen" +msgstr[1] "Befördern des Servers wurde nicht innerhalb von %d Sekunden abgeschlossen" + +#: access/transam/xlogprefetch.c:360 +#, c-format +msgid "recovery finished prefetching at %X/%X; prefetch = %llu, skip_hit = %llu, skip_new = %llu, skip_fpw = %llu, skip_seq = %llu, avg_distance = %f, avg_queue_depth = %f" +msgstr "" + +#: access/transam/xlogprefetch.c:462 +#, fuzzy, c-format +#| msgid "recovery stopping after reaching consistency" +msgid "recovery no longer prefetching: %s" +msgstr "Wiederherstellung beendet nachdem Konsistenz erreicht wurde" + +#: access/transam/xlogprefetch.c:466 +#, fuzzy, c-format +#| msgid "aclremove is no longer supported" +msgid "recovery no longer prefetching" +msgstr "aclremove wird nicht mehr unterstützt" -#: access/transam/xlogreader.c:345 +#: access/transam/xlogreader.c:747 #, c-format msgid "invalid record offset at %X/%X" msgstr "ungültiger Datensatz-Offset bei %X/%X" -#: access/transam/xlogreader.c:353 +#: access/transam/xlogreader.c:756 #, c-format msgid "contrecord is requested by %X/%X" msgstr "Contrecord angefordert von %X/%X" -#: access/transam/xlogreader.c:394 access/transam/xlogreader.c:691 +#: access/transam/xlogreader.c:818 access/transam/xlogreader.c:1277 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "ungültige Datensatzlänge bei %X/%X: %u erwartet, %u erhalten" -#: access/transam/xlogreader.c:418 +#: access/transam/xlogreader.c:909 #, c-format msgid "record length %u at %X/%X too long" msgstr "Datensatzlänge %u bei %X/%X ist zu lang" -#: access/transam/xlogreader.c:450 +#: access/transam/xlogreader.c:969 #, c-format -msgid "there is no contrecord flag at %X/%X" -msgstr "keine Contrecord-Flag bei %X/%X" +msgid "there is no contrecord flag at %X/%X reading %X/%X" +msgstr "keine Contrecord-Flag bei %X/%X beim Lesen von %X/%X" -#: access/transam/xlogreader.c:463 +#: access/transam/xlogreader.c:984 #, c-format -msgid "invalid contrecord length %u at %X/%X" -msgstr "ungültige Contrecord-Länge %u bei %X/%X" +msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" +msgstr "ungültige Contrecord-Länge %u bei %X/%X beim Lesen von %X/%X, erwartet wurde %u" -#: access/transam/xlogreader.c:699 +#: access/transam/xlogreader.c:1285 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ungültige Resource-Manager-ID %u bei %X/%X" -#: access/transam/xlogreader.c:713 access/transam/xlogreader.c:730 +#: access/transam/xlogreader.c:1298 access/transam/xlogreader.c:1314 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "Datensatz mit falschem Prev-Link %X/%X bei %X/%X" -#: access/transam/xlogreader.c:767 +#: access/transam/xlogreader.c:1350 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "ungültige Resource-Manager-Datenprüfsumme in Datensatz bei %X/%X" -#: access/transam/xlogreader.c:804 +#: access/transam/xlogreader.c:1387 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "ungültige magische Zahl %04X in Logsegment %s, Offset %u" -#: access/transam/xlogreader.c:818 access/transam/xlogreader.c:859 +#: access/transam/xlogreader.c:1401 access/transam/xlogreader.c:1442 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "ungültige Info-Bits %04X in Logsegment %s, Offset %u" -#: access/transam/xlogreader.c:833 +#: access/transam/xlogreader.c:1416 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Datenbanksystemidentifikator in WAL-Datei ist %llu, Datenbanksystemidentifikator in pg_control ist %llu" -#: access/transam/xlogreader.c:841 +#: access/transam/xlogreader.c:1424 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: falsche Segmentgröße im Seitenkopf" -#: access/transam/xlogreader.c:847 +#: access/transam/xlogreader.c:1430 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: falsche XLOG_BLCKSZ im Seitenkopf" -#: access/transam/xlogreader.c:878 +#: access/transam/xlogreader.c:1461 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "unerwartete Pageaddr %X/%X in Logsegment %s, Offset %u" -#: access/transam/xlogreader.c:903 +#: access/transam/xlogreader.c:1486 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "Zeitleisten-ID %u außer der Reihe (nach %u) in Logsegment %s, Offset %u" -#: access/transam/xlogreader.c:1239 +#: access/transam/xlogreader.c:1908 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u außer der Reihe bei %X/%X" -#: access/transam/xlogreader.c:1262 +#: access/transam/xlogreader.c:1932 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA gesetzt, aber keine Daten enthalten bei %X/%X" -#: access/transam/xlogreader.c:1269 +#: access/transam/xlogreader.c:1939 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA nicht gesetzt, aber Datenlänge ist %u bei %X/%X" -#: access/transam/xlogreader.c:1305 +#: access/transam/xlogreader.c:1975 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE gesetzt, aber Loch Offset %u Länge %u Block-Abbild-Länge %u bei %X/%X" -#: access/transam/xlogreader.c:1321 +#: access/transam/xlogreader.c:1991 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE nicht gesetzt, aber Loch Offset %u Länge %u bei %X/%X" -#: access/transam/xlogreader.c:1336 +#: access/transam/xlogreader.c:2006 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge %u bei %X/%X" -#: access/transam/xlogreader.c:1351 +#: access/transam/xlogreader.c:2021 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "weder BKPIMAGE_HAS_HOLE noch BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge ist %u bei %X/%X" -#: access/transam/xlogreader.c:1367 +#: access/transam/xlogreader.c:2037 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL gesetzt, aber keine vorangehende Relation bei %X/%X" -#: access/transam/xlogreader.c:1379 +#: access/transam/xlogreader.c:2049 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "ungültige block_id %u bei %X/%X" -#: access/transam/xlogreader.c:1468 +#: access/transam/xlogreader.c:2116 #, c-format msgid "record with invalid length at %X/%X" msgstr "Datensatz mit ungültiger Länge bei %X/%X" -#: access/transam/xlogreader.c:1557 +#: access/transam/xlogreader.c:2219 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "ungültiges komprimiertes Abbild bei %X/%X, Block %d" -#: bootstrap/bootstrap.c:271 +#: bootstrap/bootstrap.c:270 #, c-format msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X benötigt eine Zweierpotenz zwischen 1 MB und 1 GB" -#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:830 tcop/postgres.c:3705 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:844 tcop/postgres.c:3848 #, c-format msgid "--%s requires a value" msgstr "--%s benötigt einen Wert" -#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:835 tcop/postgres.c:3710 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:849 tcop/postgres.c:3853 #, c-format msgid "-c %s requires a value" msgstr "-c %s benötigt einen Wert" -#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:847 -#: postmaster/postmaster.c:860 +#: bootstrap/bootstrap.c:303 postmaster/postmaster.c:861 +#: postmaster/postmaster.c:874 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: bootstrap/bootstrap.c:313 +#: bootstrap/bootstrap.c:312 #, c-format msgid "%s: invalid command-line arguments\n" msgstr "%s: ungültige Kommandozeilenargumente\n" @@ -3322,93 +3450,99 @@ msgstr "es konnten nicht alle Privilegien für Spalte »%s« von Relation »%s« msgid "not all privileges could be revoked for \"%s\"" msgstr "es konnten nicht alle Privilegien für »%s« entzogen werden" -#: catalog/aclchk.c:430 catalog/aclchk.c:973 +#: catalog/aclchk.c:379 +#, fuzzy, c-format +#| msgid "must be superuser" +msgid "grantor must be current user" +msgstr "Berechtigung nur für Superuser" + +#: catalog/aclchk.c:446 catalog/aclchk.c:989 #, c-format msgid "invalid privilege type %s for relation" msgstr "ungültiger Privilegtyp %s für Relation" -#: catalog/aclchk.c:434 catalog/aclchk.c:977 +#: catalog/aclchk.c:450 catalog/aclchk.c:993 #, c-format msgid "invalid privilege type %s for sequence" msgstr "ungültiger Privilegtyp %s für Sequenz" -#: catalog/aclchk.c:438 +#: catalog/aclchk.c:454 #, c-format msgid "invalid privilege type %s for database" msgstr "ungültiger Privilegtyp %s für Datenbank" -#: catalog/aclchk.c:442 +#: catalog/aclchk.c:458 #, c-format msgid "invalid privilege type %s for domain" msgstr "ungültiger Privilegtyp %s für Domäne" -#: catalog/aclchk.c:446 catalog/aclchk.c:981 +#: catalog/aclchk.c:462 catalog/aclchk.c:997 #, c-format msgid "invalid privilege type %s for function" msgstr "ungültiger Privilegtyp %s für Funktion" -#: catalog/aclchk.c:450 +#: catalog/aclchk.c:466 #, c-format msgid "invalid privilege type %s for language" msgstr "ungültiger Privilegtyp %s für Sprache" -#: catalog/aclchk.c:454 +#: catalog/aclchk.c:470 #, c-format msgid "invalid privilege type %s for large object" msgstr "ungültiger Privilegtyp %s für Large Object" -#: catalog/aclchk.c:458 catalog/aclchk.c:997 +#: catalog/aclchk.c:474 catalog/aclchk.c:1013 #, c-format msgid "invalid privilege type %s for schema" msgstr "ungültiger Privilegtyp %s für Schema" -#: catalog/aclchk.c:462 catalog/aclchk.c:985 +#: catalog/aclchk.c:478 catalog/aclchk.c:1001 #, c-format msgid "invalid privilege type %s for procedure" msgstr "ungültiger Privilegtyp %s für Prozedur" -#: catalog/aclchk.c:466 catalog/aclchk.c:989 +#: catalog/aclchk.c:482 catalog/aclchk.c:1005 #, c-format msgid "invalid privilege type %s for routine" msgstr "ungültiger Privilegtyp %s für Routine" -#: catalog/aclchk.c:470 +#: catalog/aclchk.c:486 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "ungültiger Privilegtyp %s für Tablespace" -#: catalog/aclchk.c:474 catalog/aclchk.c:993 +#: catalog/aclchk.c:490 catalog/aclchk.c:1009 #, c-format msgid "invalid privilege type %s for type" msgstr "ungültiger Privilegtyp %s für Typ" -#: catalog/aclchk.c:478 +#: catalog/aclchk.c:494 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "ungültiger Privilegtyp %s für Fremddaten-Wrapper" -#: catalog/aclchk.c:482 +#: catalog/aclchk.c:498 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "ungültiger Privilegtyp %s für Fremdserver" -#: catalog/aclchk.c:521 +#: catalog/aclchk.c:537 #, c-format msgid "column privileges are only valid for relations" msgstr "Spaltenprivilegien sind nur für Relation gültig" -#: catalog/aclchk.c:681 catalog/aclchk.c:4100 catalog/aclchk.c:4882 -#: catalog/objectaddress.c:965 catalog/pg_largeobject.c:116 +#: catalog/aclchk.c:697 catalog/aclchk.c:4164 catalog/aclchk.c:4985 +#: catalog/objectaddress.c:1059 catalog/pg_largeobject.c:116 #: storage/large_object/inv_api.c:285 #, c-format msgid "large object %u does not exist" msgstr "Large Object %u existiert nicht" -#: catalog/aclchk.c:910 catalog/aclchk.c:919 commands/collationcmds.c:118 -#: commands/copy.c:1139 commands/copy.c:1159 commands/copy.c:1168 -#: commands/copy.c:1177 commands/copy.c:1186 commands/copy.c:1195 -#: commands/copy.c:1204 commands/copy.c:1213 commands/copy.c:1231 -#: commands/copy.c:1247 commands/copy.c:1267 commands/copy.c:1284 +#: catalog/aclchk.c:926 catalog/aclchk.c:935 commands/collationcmds.c:119 +#: commands/copy.c:362 commands/copy.c:382 commands/copy.c:392 +#: commands/copy.c:401 commands/copy.c:410 commands/copy.c:420 +#: commands/copy.c:429 commands/copy.c:438 commands/copy.c:456 +#: commands/copy.c:472 commands/copy.c:492 commands/copy.c:509 #: commands/dbcommands.c:157 commands/dbcommands.c:166 #: commands/dbcommands.c:175 commands/dbcommands.c:184 #: commands/dbcommands.c:193 commands/dbcommands.c:202 @@ -3416,625 +3550,640 @@ msgstr "Large Object %u existiert nicht" #: commands/dbcommands.c:229 commands/dbcommands.c:238 #: commands/dbcommands.c:260 commands/dbcommands.c:1502 #: commands/dbcommands.c:1511 commands/dbcommands.c:1520 -#: commands/dbcommands.c:1529 commands/extension.c:1722 -#: commands/extension.c:1732 commands/extension.c:1742 -#: commands/extension.c:3042 commands/foreigncmds.c:539 -#: commands/foreigncmds.c:548 commands/functioncmds.c:570 -#: commands/functioncmds.c:736 commands/functioncmds.c:745 -#: commands/functioncmds.c:754 commands/functioncmds.c:763 -#: commands/functioncmds.c:2014 commands/functioncmds.c:2022 +#: commands/dbcommands.c:1529 commands/extension.c:1735 +#: commands/extension.c:1745 commands/extension.c:1755 +#: commands/extension.c:3055 commands/foreigncmds.c:539 +#: commands/foreigncmds.c:548 commands/functioncmds.c:578 +#: commands/functioncmds.c:744 commands/functioncmds.c:753 +#: commands/functioncmds.c:762 commands/functioncmds.c:771 +#: commands/functioncmds.c:2068 commands/functioncmds.c:2076 #: commands/publicationcmds.c:90 commands/publicationcmds.c:133 -#: commands/sequence.c:1267 commands/sequence.c:1277 commands/sequence.c:1287 -#: commands/sequence.c:1297 commands/sequence.c:1307 commands/sequence.c:1317 -#: commands/sequence.c:1327 commands/sequence.c:1337 commands/sequence.c:1347 -#: commands/subscriptioncmds.c:104 commands/subscriptioncmds.c:114 +#: commands/sequence.c:1266 commands/sequence.c:1276 commands/sequence.c:1286 +#: commands/sequence.c:1296 commands/sequence.c:1306 commands/sequence.c:1316 +#: commands/sequence.c:1326 commands/sequence.c:1336 commands/sequence.c:1346 #: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 -#: commands/subscriptioncmds.c:148 commands/subscriptioncmds.c:159 -#: commands/subscriptioncmds.c:173 commands/tablecmds.c:6905 -#: commands/typecmds.c:321 commands/typecmds.c:1354 commands/typecmds.c:1363 -#: commands/typecmds.c:1371 commands/typecmds.c:1379 commands/typecmds.c:1387 -#: commands/user.c:133 commands/user.c:147 commands/user.c:156 -#: commands/user.c:165 commands/user.c:174 commands/user.c:183 -#: commands/user.c:192 commands/user.c:201 commands/user.c:210 -#: commands/user.c:219 commands/user.c:228 commands/user.c:237 -#: commands/user.c:246 commands/user.c:582 commands/user.c:590 -#: commands/user.c:598 commands/user.c:606 commands/user.c:614 -#: commands/user.c:622 commands/user.c:630 commands/user.c:638 -#: commands/user.c:647 commands/user.c:655 commands/user.c:663 -#: parser/parse_utilcmd.c:386 replication/pgoutput/pgoutput.c:141 -#: replication/pgoutput/pgoutput.c:162 replication/walsender.c:876 -#: replication/walsender.c:887 replication/walsender.c:897 +#: commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 +#: commands/subscriptioncmds.c:168 commands/subscriptioncmds.c:179 +#: commands/subscriptioncmds.c:193 commands/subscriptioncmds.c:203 +#: commands/subscriptioncmds.c:213 commands/tablecmds.c:7514 +#: commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 +#: commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 +#: commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 +#: commands/user.c:156 commands/user.c:165 commands/user.c:174 +#: commands/user.c:183 commands/user.c:192 commands/user.c:201 +#: commands/user.c:210 commands/user.c:219 commands/user.c:228 +#: commands/user.c:237 commands/user.c:246 commands/user.c:582 +#: commands/user.c:590 commands/user.c:598 commands/user.c:606 +#: commands/user.c:614 commands/user.c:622 commands/user.c:630 +#: commands/user.c:638 commands/user.c:647 commands/user.c:655 +#: commands/user.c:663 parser/parse_utilcmd.c:407 +#: replication/pgoutput/pgoutput.c:192 replication/pgoutput/pgoutput.c:213 +#: replication/pgoutput/pgoutput.c:227 replication/pgoutput/pgoutput.c:237 +#: replication/pgoutput/pgoutput.c:247 replication/walsender.c:885 +#: replication/walsender.c:896 replication/walsender.c:906 #, c-format msgid "conflicting or redundant options" msgstr "widersprüchliche oder überflüssige Optionen" -#: catalog/aclchk.c:1030 +#: catalog/aclchk.c:1046 #, c-format msgid "default privileges cannot be set for columns" msgstr "Vorgabeprivilegien können nicht für Spalten gesetzt werden" -#: catalog/aclchk.c:1190 +#: catalog/aclchk.c:1206 #, c-format msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "Klausel IN SCHEMA kann nicht verwendet werden, wenn GRANT/REVOKE ON SCHEMAS verwendet wird" -#: catalog/aclchk.c:1558 catalog/catalog.c:506 catalog/objectaddress.c:1427 -#: commands/analyze.c:389 commands/copy.c:5085 commands/sequence.c:1702 -#: commands/tablecmds.c:6445 commands/tablecmds.c:6603 -#: commands/tablecmds.c:6677 commands/tablecmds.c:6747 -#: commands/tablecmds.c:6830 commands/tablecmds.c:6924 -#: commands/tablecmds.c:6983 commands/tablecmds.c:7056 -#: commands/tablecmds.c:7085 commands/tablecmds.c:7240 -#: commands/tablecmds.c:7322 commands/tablecmds.c:7414 -#: commands/tablecmds.c:7523 commands/tablecmds.c:10783 -#: commands/tablecmds.c:10965 commands/tablecmds.c:11125 -#: commands/tablecmds.c:12208 commands/trigger.c:876 parser/analyze.c:2339 -#: parser/parse_relation.c:713 parser/parse_target.c:1036 -#: parser/parse_type.c:144 parser/parse_utilcmd.c:3202 -#: parser/parse_utilcmd.c:3237 parser/parse_utilcmd.c:3279 utils/adt/acl.c:2870 -#: utils/adt/ruleutils.c:2535 +#: catalog/aclchk.c:1544 catalog/catalog.c:553 catalog/objectaddress.c:1521 +#: commands/analyze.c:390 commands/copy.c:741 commands/sequence.c:1701 +#: commands/tablecmds.c:6990 commands/tablecmds.c:7133 +#: commands/tablecmds.c:7183 commands/tablecmds.c:7257 +#: commands/tablecmds.c:7327 commands/tablecmds.c:7439 +#: commands/tablecmds.c:7533 commands/tablecmds.c:7592 +#: commands/tablecmds.c:7681 commands/tablecmds.c:7710 +#: commands/tablecmds.c:7865 commands/tablecmds.c:7947 +#: commands/tablecmds.c:8102 commands/tablecmds.c:8219 +#: commands/tablecmds.c:11568 commands/tablecmds.c:11750 +#: commands/tablecmds.c:11910 commands/tablecmds.c:13069 +#: commands/tablecmds.c:15631 commands/trigger.c:924 parser/analyze.c:2413 +#: parser/parse_relation.c:714 parser/parse_target.c:1064 +#: parser/parse_type.c:144 parser/parse_utilcmd.c:3453 +#: parser/parse_utilcmd.c:3488 parser/parse_utilcmd.c:3530 utils/adt/acl.c:2845 +#: utils/adt/ruleutils.c:2708 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "Spalte »%s« von Relation »%s« existiert nicht" -#: catalog/aclchk.c:1821 catalog/objectaddress.c:1267 commands/sequence.c:1140 -#: commands/tablecmds.c:236 commands/tablecmds.c:15517 utils/adt/acl.c:2060 -#: utils/adt/acl.c:2090 utils/adt/acl.c:2122 utils/adt/acl.c:2154 -#: utils/adt/acl.c:2182 utils/adt/acl.c:2212 +#: catalog/aclchk.c:1807 catalog/objectaddress.c:1361 commands/sequence.c:1139 +#: commands/tablecmds.c:249 commands/tablecmds.c:16498 utils/adt/acl.c:2053 +#: utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 +#: utils/adt/acl.c:2175 utils/adt/acl.c:2205 #, c-format msgid "\"%s\" is not a sequence" msgstr "»%s« ist keine Sequenz" -#: catalog/aclchk.c:1859 +#: catalog/aclchk.c:1845 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "Sequenz »%s« unterstützt nur die Privilegien USAGE, SELECT und UPDATE" -#: catalog/aclchk.c:1876 +#: catalog/aclchk.c:1862 #, c-format msgid "invalid privilege type %s for table" msgstr "ungültiger Privilegtyp %s für Tabelle" -#: catalog/aclchk.c:2042 +#: catalog/aclchk.c:2028 #, c-format msgid "invalid privilege type %s for column" msgstr "ungültiger Privilegtyp %s für Spalte" -#: catalog/aclchk.c:2055 +#: catalog/aclchk.c:2041 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "Sequenz »%s« unterstützt nur den Spaltenprivilegientyp SELECT" -#: catalog/aclchk.c:2637 +#: catalog/aclchk.c:2623 #, c-format msgid "language \"%s\" is not trusted" msgstr "Sprache »%s« ist nicht »trusted«" -#: catalog/aclchk.c:2639 +#: catalog/aclchk.c:2625 #, c-format msgid "GRANT and REVOKE are not allowed on untrusted languages, because only superusers can use untrusted languages." msgstr "GRANT und REVOKE sind für nicht vertrauenswürdige Sprachen nicht erlaubt, weil nur Superuser nicht vertrauenswürdige Sprachen verwenden können." -#: catalog/aclchk.c:3153 +#: catalog/aclchk.c:3139 #, c-format msgid "cannot set privileges of array types" msgstr "für Array-Typen können keine Privilegien gesetzt werden" -#: catalog/aclchk.c:3154 +#: catalog/aclchk.c:3140 #, c-format msgid "Set the privileges of the element type instead." msgstr "Setzen Sie stattdessen die Privilegien des Elementtyps." -#: catalog/aclchk.c:3161 catalog/objectaddress.c:1561 +#: catalog/aclchk.c:3147 catalog/objectaddress.c:1655 #, c-format msgid "\"%s\" is not a domain" msgstr "»%s« ist keine Domäne" -#: catalog/aclchk.c:3281 +#: catalog/aclchk.c:3267 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "unbekannter Privilegtyp »%s«" -#: catalog/aclchk.c:3342 +#: catalog/aclchk.c:3328 #, c-format msgid "permission denied for aggregate %s" msgstr "keine Berechtigung für Aggregatfunktion %s" -#: catalog/aclchk.c:3345 +#: catalog/aclchk.c:3331 #, c-format msgid "permission denied for collation %s" msgstr "keine Berechtigung für Sortierfolge %s" -#: catalog/aclchk.c:3348 +#: catalog/aclchk.c:3334 #, c-format msgid "permission denied for column %s" msgstr "keine Berechtigung für Spalte %s" -#: catalog/aclchk.c:3351 +#: catalog/aclchk.c:3337 #, c-format msgid "permission denied for conversion %s" msgstr "keine Berechtigung für Konversion %s" -#: catalog/aclchk.c:3354 +#: catalog/aclchk.c:3340 #, c-format msgid "permission denied for database %s" msgstr "keine Berechtigung für Datenbank %s" -#: catalog/aclchk.c:3357 +#: catalog/aclchk.c:3343 #, c-format msgid "permission denied for domain %s" msgstr "keine Berechtigung für Domäne %s" -#: catalog/aclchk.c:3360 +#: catalog/aclchk.c:3346 #, c-format msgid "permission denied for event trigger %s" msgstr "keine Berechtigung für Ereignistrigger %s" -#: catalog/aclchk.c:3363 +#: catalog/aclchk.c:3349 #, c-format msgid "permission denied for extension %s" msgstr "keine Berechtigung für Erweiterung %s" -#: catalog/aclchk.c:3366 +#: catalog/aclchk.c:3352 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "keine Berechtigung für Fremddaten-Wrapper %s" -#: catalog/aclchk.c:3369 +#: catalog/aclchk.c:3355 #, c-format msgid "permission denied for foreign server %s" msgstr "keine Berechtigung für Fremdserver %s" -#: catalog/aclchk.c:3372 +#: catalog/aclchk.c:3358 #, c-format msgid "permission denied for foreign table %s" msgstr "keine Berechtigung für Fremdtabelle %s" -#: catalog/aclchk.c:3375 +#: catalog/aclchk.c:3361 #, c-format msgid "permission denied for function %s" msgstr "keine Berechtigung für Funktion %s" -#: catalog/aclchk.c:3378 +#: catalog/aclchk.c:3364 #, c-format msgid "permission denied for index %s" msgstr "keine Berechtigung für Index %s" -#: catalog/aclchk.c:3381 +#: catalog/aclchk.c:3367 #, c-format msgid "permission denied for language %s" msgstr "keine Berechtigung für Sprache %s" -#: catalog/aclchk.c:3384 +#: catalog/aclchk.c:3370 #, c-format msgid "permission denied for large object %s" msgstr "keine Berechtigung für Large Object %s" -#: catalog/aclchk.c:3387 +#: catalog/aclchk.c:3373 #, c-format msgid "permission denied for materialized view %s" msgstr "keine Berechtigung für materialisierte Sicht %s" -#: catalog/aclchk.c:3390 +#: catalog/aclchk.c:3376 #, c-format msgid "permission denied for operator class %s" msgstr "keine Berechtigung für Operatorklasse %s" -#: catalog/aclchk.c:3393 +#: catalog/aclchk.c:3379 #, c-format msgid "permission denied for operator %s" msgstr "keine Berechtigung für Operator %s" -#: catalog/aclchk.c:3396 +#: catalog/aclchk.c:3382 #, c-format msgid "permission denied for operator family %s" msgstr "keine Berechtigung für Operatorfamilie %s" -#: catalog/aclchk.c:3399 +#: catalog/aclchk.c:3385 #, c-format msgid "permission denied for policy %s" msgstr "keine Berechtigung für Policy %s" -#: catalog/aclchk.c:3402 +#: catalog/aclchk.c:3388 #, c-format msgid "permission denied for procedure %s" msgstr "keine Berechtigung für Prozedur %s" -#: catalog/aclchk.c:3405 +#: catalog/aclchk.c:3391 #, c-format msgid "permission denied for publication %s" msgstr "keine Berechtigung für Publikation %s" -#: catalog/aclchk.c:3408 +#: catalog/aclchk.c:3394 #, c-format msgid "permission denied for routine %s" msgstr "keine Berechtigung für Routine %s" -#: catalog/aclchk.c:3411 +#: catalog/aclchk.c:3397 #, c-format msgid "permission denied for schema %s" msgstr "keine Berechtigung für Schema %s" -#: catalog/aclchk.c:3414 commands/sequence.c:610 commands/sequence.c:844 -#: commands/sequence.c:886 commands/sequence.c:927 commands/sequence.c:1800 -#: commands/sequence.c:1864 +#: catalog/aclchk.c:3400 commands/sequence.c:610 commands/sequence.c:844 +#: commands/sequence.c:886 commands/sequence.c:927 commands/sequence.c:1799 +#: commands/sequence.c:1863 #, c-format msgid "permission denied for sequence %s" msgstr "keine Berechtigung für Sequenz %s" -#: catalog/aclchk.c:3417 +#: catalog/aclchk.c:3403 #, c-format msgid "permission denied for statistics object %s" msgstr "keine Berechtigung für Statistikobjekt %s" -#: catalog/aclchk.c:3420 +#: catalog/aclchk.c:3406 #, c-format msgid "permission denied for subscription %s" msgstr "keine Berechtigung für Subskription %s" -#: catalog/aclchk.c:3423 +#: catalog/aclchk.c:3409 #, c-format msgid "permission denied for table %s" msgstr "keine Berechtigung für Tabelle %s" -#: catalog/aclchk.c:3426 +#: catalog/aclchk.c:3412 #, c-format msgid "permission denied for tablespace %s" msgstr "keine Berechtigung für Tablespace %s" -#: catalog/aclchk.c:3429 +#: catalog/aclchk.c:3415 #, c-format msgid "permission denied for text search configuration %s" msgstr "keine Berechtigung für Textsuchekonfiguration %s" -#: catalog/aclchk.c:3432 +#: catalog/aclchk.c:3418 #, c-format msgid "permission denied for text search dictionary %s" msgstr "keine Berechtigung für Textsuchewörterbuch %s" -#: catalog/aclchk.c:3435 +#: catalog/aclchk.c:3421 #, c-format msgid "permission denied for type %s" msgstr "keine Berechtigung für Typ %s" -#: catalog/aclchk.c:3438 +#: catalog/aclchk.c:3424 #, c-format msgid "permission denied for view %s" msgstr "keine Berechtigung für Sicht %s" -#: catalog/aclchk.c:3473 +#: catalog/aclchk.c:3459 #, c-format msgid "must be owner of aggregate %s" msgstr "Berechtigung nur für Eigentümer der Aggregatfunktion %s" -#: catalog/aclchk.c:3476 +#: catalog/aclchk.c:3462 #, c-format msgid "must be owner of collation %s" msgstr "Berechtigung nur für Eigentümer der Sortierfolge %s" -#: catalog/aclchk.c:3479 +#: catalog/aclchk.c:3465 #, c-format msgid "must be owner of conversion %s" msgstr "Berechtigung nur für Eigentümer der Konversion %s" -#: catalog/aclchk.c:3482 +#: catalog/aclchk.c:3468 #, c-format msgid "must be owner of database %s" msgstr "Berechtigung nur für Eigentümer der Datenbank %s" -#: catalog/aclchk.c:3485 +#: catalog/aclchk.c:3471 #, c-format msgid "must be owner of domain %s" msgstr "Berechtigung nur für Eigentümer der Domäne %s" -#: catalog/aclchk.c:3488 +#: catalog/aclchk.c:3474 #, c-format msgid "must be owner of event trigger %s" msgstr "Berechtigung nur für Eigentümer des Ereignistriggers %s" -#: catalog/aclchk.c:3491 +#: catalog/aclchk.c:3477 #, c-format msgid "must be owner of extension %s" msgstr "Berechtigung nur für Eigentümer der Erweiterung %s" -#: catalog/aclchk.c:3494 +#: catalog/aclchk.c:3480 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "Berechtigung nur für Eigentümer des Fremddaten-Wrappers %s" -#: catalog/aclchk.c:3497 +#: catalog/aclchk.c:3483 #, c-format msgid "must be owner of foreign server %s" msgstr "Berechtigung nur für Eigentümer des Fremdservers %s" -#: catalog/aclchk.c:3500 +#: catalog/aclchk.c:3486 #, c-format msgid "must be owner of foreign table %s" msgstr "Berechtigung nur für Eigentümer der Fremdtabelle %s" -#: catalog/aclchk.c:3503 +#: catalog/aclchk.c:3489 #, c-format msgid "must be owner of function %s" msgstr "Berechtigung nur für Eigentümer der Funktion %s" -#: catalog/aclchk.c:3506 +#: catalog/aclchk.c:3492 #, c-format msgid "must be owner of index %s" msgstr "Berechtigung nur für Eigentümer des Index %s" -#: catalog/aclchk.c:3509 +#: catalog/aclchk.c:3495 #, c-format msgid "must be owner of language %s" msgstr "Berechtigung nur für Eigentümer der Sprache %s" -#: catalog/aclchk.c:3512 +#: catalog/aclchk.c:3498 #, c-format msgid "must be owner of large object %s" msgstr "Berechtigung nur für Eigentümer des Large Object %s" -#: catalog/aclchk.c:3515 +#: catalog/aclchk.c:3501 #, c-format msgid "must be owner of materialized view %s" msgstr "Berechtigung nur für Eigentümer der materialisierten Sicht %s" -#: catalog/aclchk.c:3518 +#: catalog/aclchk.c:3504 #, c-format msgid "must be owner of operator class %s" msgstr "Berechtigung nur für Eigentümer der Operatorklasse %s" -#: catalog/aclchk.c:3521 +#: catalog/aclchk.c:3507 #, c-format msgid "must be owner of operator %s" msgstr "Berechtigung nur für Eigentümer des Operators %s" -#: catalog/aclchk.c:3524 +#: catalog/aclchk.c:3510 #, c-format msgid "must be owner of operator family %s" msgstr "Berechtigung nur für Eigentümer der Operatorfamilie %s" -#: catalog/aclchk.c:3527 +#: catalog/aclchk.c:3513 #, c-format msgid "must be owner of procedure %s" msgstr "Berechtigung nur für Eigentümer der Prozedur %s" -#: catalog/aclchk.c:3530 +#: catalog/aclchk.c:3516 #, c-format msgid "must be owner of publication %s" msgstr "Berechtigung nur für Eigentümer der Publikation %s" -#: catalog/aclchk.c:3533 +#: catalog/aclchk.c:3519 #, c-format msgid "must be owner of routine %s" msgstr "Berechtigung nur für Eigentümer der Routine %s" -#: catalog/aclchk.c:3536 +#: catalog/aclchk.c:3522 #, c-format msgid "must be owner of sequence %s" msgstr "Berechtigung nur für Eigentümer der Sequenz %s" -#: catalog/aclchk.c:3539 +#: catalog/aclchk.c:3525 #, c-format msgid "must be owner of subscription %s" msgstr "Berechtigung nur für Eigentümer der Subskription %s" -#: catalog/aclchk.c:3542 +#: catalog/aclchk.c:3528 #, c-format msgid "must be owner of table %s" msgstr "Berechtigung nur für Eigentümer der Tabelle %s" -#: catalog/aclchk.c:3545 +#: catalog/aclchk.c:3531 #, c-format msgid "must be owner of type %s" msgstr "Berechtigung nur für Eigentümer des Typs %s" -#: catalog/aclchk.c:3548 +#: catalog/aclchk.c:3534 #, c-format msgid "must be owner of view %s" msgstr "Berechtigung nur für Eigentümer der Sicht %s" -#: catalog/aclchk.c:3551 +#: catalog/aclchk.c:3537 #, c-format msgid "must be owner of schema %s" msgstr "Berechtigung nur für Eigentümer des Schemas %s" -#: catalog/aclchk.c:3554 +#: catalog/aclchk.c:3540 #, c-format msgid "must be owner of statistics object %s" msgstr "Berechtigung nur für Eigentümer des Statistikobjekts %s" -#: catalog/aclchk.c:3557 +#: catalog/aclchk.c:3543 #, c-format msgid "must be owner of tablespace %s" msgstr "Berechtigung nur für Eigentümer des Tablespace %s" -#: catalog/aclchk.c:3560 +#: catalog/aclchk.c:3546 #, c-format msgid "must be owner of text search configuration %s" msgstr "Berechtigung nur für Eigentümer der Textsuchekonfiguration %s" -#: catalog/aclchk.c:3563 +#: catalog/aclchk.c:3549 #, c-format msgid "must be owner of text search dictionary %s" msgstr "Berechtigung nur für Eigentümer des Textsuchewörterbuches %s" -#: catalog/aclchk.c:3577 +#: catalog/aclchk.c:3563 #, c-format msgid "must be owner of relation %s" msgstr "Berechtigung nur für Eigentümer der Relation %s" -#: catalog/aclchk.c:3621 +#: catalog/aclchk.c:3607 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "keine Berechtigung für Spalte »%s« von Relation »%s«" -#: catalog/aclchk.c:3742 catalog/aclchk.c:3750 +#: catalog/aclchk.c:3750 catalog/aclchk.c:3769 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "Attribut %d der Relation mit OID %u existiert nicht" -#: catalog/aclchk.c:3823 catalog/aclchk.c:4733 +#: catalog/aclchk.c:3864 catalog/aclchk.c:4836 #, c-format msgid "relation with OID %u does not exist" msgstr "Relation mit OID %u existiert nicht" -#: catalog/aclchk.c:3913 catalog/aclchk.c:5151 +#: catalog/aclchk.c:3977 catalog/aclchk.c:5254 #, c-format msgid "database with OID %u does not exist" msgstr "Datenbank mit OID %u existiert nicht" -#: catalog/aclchk.c:3967 catalog/aclchk.c:4811 tcop/fastpath.c:221 -#: utils/fmgr/fmgr.c:2055 +#: catalog/aclchk.c:4031 catalog/aclchk.c:4914 tcop/fastpath.c:141 +#: utils/fmgr/fmgr.c:2051 #, c-format msgid "function with OID %u does not exist" msgstr "Funktion mit OID %u existiert nicht" -#: catalog/aclchk.c:4021 catalog/aclchk.c:4837 +#: catalog/aclchk.c:4085 catalog/aclchk.c:4940 #, c-format msgid "language with OID %u does not exist" msgstr "Sprache mit OID %u existiert nicht" -#: catalog/aclchk.c:4185 catalog/aclchk.c:4909 +#: catalog/aclchk.c:4249 catalog/aclchk.c:5012 commands/collationcmds.c:517 #, c-format msgid "schema with OID %u does not exist" msgstr "Schema mit OID %u existiert nicht" -#: catalog/aclchk.c:4239 catalog/aclchk.c:4936 utils/adt/genfile.c:650 +#: catalog/aclchk.c:4313 catalog/aclchk.c:5039 utils/adt/genfile.c:689 #, c-format msgid "tablespace with OID %u does not exist" msgstr "Tablespace mit OID %u existiert nicht" -#: catalog/aclchk.c:4298 catalog/aclchk.c:5070 commands/foreigncmds.c:325 +#: catalog/aclchk.c:4372 catalog/aclchk.c:5173 commands/foreigncmds.c:325 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "Fremddaten-Wrapper mit OID %u existiert nicht" -#: catalog/aclchk.c:4360 catalog/aclchk.c:5097 commands/foreigncmds.c:462 +#: catalog/aclchk.c:4434 catalog/aclchk.c:5200 commands/foreigncmds.c:462 #, c-format msgid "foreign server with OID %u does not exist" msgstr "Fremdserver mit OID %u existiert nicht" -#: catalog/aclchk.c:4420 catalog/aclchk.c:4759 utils/cache/typcache.c:378 -#: utils/cache/typcache.c:432 +#: catalog/aclchk.c:4494 catalog/aclchk.c:4862 utils/cache/typcache.c:384 +#: utils/cache/typcache.c:439 #, c-format msgid "type with OID %u does not exist" msgstr "Typ mit OID %u existiert nicht" -#: catalog/aclchk.c:4785 +#: catalog/aclchk.c:4888 #, c-format msgid "operator with OID %u does not exist" msgstr "Operator mit OID %u existiert nicht" -#: catalog/aclchk.c:4962 +#: catalog/aclchk.c:5065 #, c-format msgid "operator class with OID %u does not exist" msgstr "Operatorklasse mit OID %u existiert nicht" -#: catalog/aclchk.c:4989 +#: catalog/aclchk.c:5092 #, c-format msgid "operator family with OID %u does not exist" msgstr "Operatorfamilie mit OID %u existiert nicht" -#: catalog/aclchk.c:5016 +#: catalog/aclchk.c:5119 #, c-format msgid "text search dictionary with OID %u does not exist" msgstr "Textsuchewörterbuch mit OID %u existiert nicht" -#: catalog/aclchk.c:5043 +#: catalog/aclchk.c:5146 #, c-format msgid "text search configuration with OID %u does not exist" msgstr "Textsuchekonfiguration mit OID %u existiert nicht" -#: catalog/aclchk.c:5124 commands/event_trigger.c:481 +#: catalog/aclchk.c:5227 commands/event_trigger.c:453 #, c-format msgid "event trigger with OID %u does not exist" msgstr "Ereignistrigger mit OID %u existiert nicht" -#: catalog/aclchk.c:5177 commands/collationcmds.c:367 +#: catalog/aclchk.c:5280 commands/collationcmds.c:368 #, c-format msgid "collation with OID %u does not exist" msgstr "Sortierfolge mit OID %u existiert nicht" -#: catalog/aclchk.c:5203 +#: catalog/aclchk.c:5306 #, c-format msgid "conversion with OID %u does not exist" msgstr "Konversion mit OID %u existiert nicht" -#: catalog/aclchk.c:5244 +#: catalog/aclchk.c:5347 #, c-format msgid "extension with OID %u does not exist" msgstr "Erweiterung mit OID %u existiert nicht" -#: catalog/aclchk.c:5271 commands/publicationcmds.c:794 +#: catalog/aclchk.c:5374 commands/publicationcmds.c:771 #, c-format msgid "publication with OID %u does not exist" msgstr "Publikation mit OID %u existiert nicht" -#: catalog/aclchk.c:5297 commands/subscriptioncmds.c:1113 +#: catalog/aclchk.c:5400 commands/subscriptioncmds.c:1459 #, c-format msgid "subscription with OID %u does not exist" msgstr "Subskription mit OID %u existiert nicht" -#: catalog/aclchk.c:5323 +#: catalog/aclchk.c:5426 #, c-format msgid "statistics object with OID %u does not exist" msgstr "Statistikobjekt mit OID %u existiert nicht" -#: catalog/catalog.c:485 +#: catalog/catalog.c:378 +#, fuzzy, c-format +#| msgid "while inserting index tuple (%u,%u) in relation \"%s\"" +msgid "still finding an unused OID within relation \"%s\"" +msgstr "beim Einfügen von Indextupel (%u,%u) in Relation »%s«" + +#: catalog/catalog.c:380 +#, c-format +msgid "OID candidates were checked \"%llu\" times, but no unused OID is yet found." +msgstr "" + +#: catalog/catalog.c:403 +#, c-format +msgid "new OID has been assigned in relation \"%s\" after \"%llu\" retries" +msgstr "" + +#: catalog/catalog.c:532 #, c-format msgid "must be superuser to call pg_nextoid()" msgstr "nur Superuser können pg_nextoid() aufrufen" -#: catalog/catalog.c:493 +#: catalog/catalog.c:540 #, c-format msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() kann nur mit Systemkatalogen verwendet werden" -#: catalog/catalog.c:498 parser/parse_utilcmd.c:2103 +#: catalog/catalog.c:545 parser/parse_utilcmd.c:2276 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "Index »%s« gehört nicht zu Tabelle »%s«" -#: catalog/catalog.c:515 +#: catalog/catalog.c:562 #, c-format msgid "column \"%s\" is not of type oid" msgstr "Spalte »%s« hat nicht Typ oid" -#: catalog/catalog.c:522 +#: catalog/catalog.c:569 #, c-format msgid "index \"%s\" is not the index for column \"%s\"" msgstr "»%s« ist kein Index für Spalte »%s«" -#: catalog/dependency.c:825 catalog/dependency.c:1063 +#: catalog/dependency.c:821 catalog/dependency.c:1060 #, c-format msgid "cannot drop %s because %s requires it" msgstr "kann %s nicht löschen, wird von %s benötigt" -#: catalog/dependency.c:827 catalog/dependency.c:1065 +#: catalog/dependency.c:823 catalog/dependency.c:1062 #, c-format msgid "You can drop %s instead." msgstr "Sie können stattdessen %s löschen." -#: catalog/dependency.c:935 catalog/pg_shdepend.c:640 +#: catalog/dependency.c:931 catalog/pg_shdepend.c:696 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "kann %s nicht löschen, wird vom Datenbanksystem benötigt" -#: catalog/dependency.c:1131 -#, c-format -msgid "drop auto-cascades to %s" -msgstr "Löschvorgang löscht automatisch %s" - -#: catalog/dependency.c:1143 catalog/dependency.c:1152 +#: catalog/dependency.c:1135 catalog/dependency.c:1144 #, c-format msgid "%s depends on %s" msgstr "%s hängt von %s ab" -#: catalog/dependency.c:1164 catalog/dependency.c:1173 +#: catalog/dependency.c:1156 catalog/dependency.c:1165 #, c-format msgid "drop cascades to %s" msgstr "Löschvorgang löscht ebenfalls %s" -#: catalog/dependency.c:1181 catalog/pg_shdepend.c:769 +#: catalog/dependency.c:1173 catalog/pg_shdepend.c:825 #, c-format msgid "" "\n" @@ -4049,313 +4198,302 @@ msgstr[1] "" "\n" "und %d weitere Objekte (Liste im Serverlog)" -#: catalog/dependency.c:1193 +#: catalog/dependency.c:1185 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "kann %s nicht löschen, weil andere Objekte davon abhängen" -#: catalog/dependency.c:1195 catalog/dependency.c:1196 -#: catalog/dependency.c:1202 catalog/dependency.c:1203 -#: catalog/dependency.c:1214 catalog/dependency.c:1215 -#: commands/tablecmds.c:1247 commands/tablecmds.c:12827 commands/user.c:1093 -#: commands/view.c:495 libpq/auth.c:334 replication/syncrep.c:1032 -#: storage/lmgr/deadlock.c:1154 storage/lmgr/proc.c:1350 utils/adt/acl.c:5329 -#: utils/adt/jsonfuncs.c:614 utils/adt/jsonfuncs.c:620 utils/misc/guc.c:6781 -#: utils/misc/guc.c:6817 utils/misc/guc.c:6887 utils/misc/guc.c:10957 -#: utils/misc/guc.c:10991 utils/misc/guc.c:11025 utils/misc/guc.c:11059 -#: utils/misc/guc.c:11094 +#: catalog/dependency.c:1187 catalog/dependency.c:1188 +#: catalog/dependency.c:1194 catalog/dependency.c:1195 +#: catalog/dependency.c:1206 catalog/dependency.c:1207 +#: commands/tablecmds.c:1306 commands/tablecmds.c:13687 +#: commands/tablespace.c:481 commands/user.c:1095 commands/view.c:495 +#: libpq/auth.c:338 replication/syncrep.c:1044 storage/lmgr/deadlock.c:1152 +#: storage/lmgr/proc.c:1433 utils/adt/acl.c:5250 utils/adt/jsonfuncs.c:618 +#: utils/adt/jsonfuncs.c:624 utils/misc/guc.c:7147 utils/misc/guc.c:7183 +#: utils/misc/guc.c:7253 utils/misc/guc.c:11433 utils/misc/guc.c:11467 +#: utils/misc/guc.c:11501 utils/misc/guc.c:11544 utils/misc/guc.c:11586 #, c-format msgid "%s" msgstr "%s" -#: catalog/dependency.c:1197 catalog/dependency.c:1204 +#: catalog/dependency.c:1189 catalog/dependency.c:1196 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Verwenden Sie DROP ... CASCADE, um die abhängigen Objekte ebenfalls zu löschen." -#: catalog/dependency.c:1201 +#: catalog/dependency.c:1193 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "kann gewünschte Objekte nicht löschen, weil andere Objekte davon abhängen" #. translator: %d always has a value larger than 1 -#: catalog/dependency.c:1210 +#: catalog/dependency.c:1202 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" msgstr[0] "Löschvorgang löscht ebenfalls %d weiteres Objekt" msgstr[1] "Löschvorgang löscht ebenfalls %d weitere Objekte" -#: catalog/dependency.c:1872 +#: catalog/dependency.c:1863 #, c-format msgid "constant of the type %s cannot be used here" msgstr "Konstante vom Typ %s kann hier nicht verwendet werden" -#: catalog/heap.c:330 +#: catalog/heap.c:331 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "keine Berechtigung, um »%s.%s« zu erzeugen" -#: catalog/heap.c:332 +#: catalog/heap.c:333 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Änderungen an Systemkatalogen sind gegenwärtig nicht erlaubt." -#: catalog/heap.c:500 commands/tablecmds.c:2132 commands/tablecmds.c:2646 -#: commands/tablecmds.c:6042 +#: catalog/heap.c:510 commands/tablecmds.c:2343 commands/tablecmds.c:2980 +#: commands/tablecmds.c:6572 #, c-format msgid "tables can have at most %d columns" msgstr "Tabellen können höchstens %d Spalten haben" -#: catalog/heap.c:518 commands/tablecmds.c:6335 +#: catalog/heap.c:528 commands/tablecmds.c:6880 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "Spaltenname »%s« steht im Konflikt mit dem Namen einer Systemspalte" -#: catalog/heap.c:534 +#: catalog/heap.c:544 #, c-format msgid "column name \"%s\" specified more than once" msgstr "Spaltenname »%s« mehrmals angegeben" #. translator: first %s is an integer not a name -#: catalog/heap.c:609 +#: catalog/heap.c:619 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "Partitionierungsschlüsselspalte %s hat Pseudotyp %s" -#: catalog/heap.c:614 +#: catalog/heap.c:624 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "Spalte »%s« hat Pseudotyp %s" -#: catalog/heap.c:645 +#: catalog/heap.c:655 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "zusammengesetzter Typ %s kann nicht Teil von sich selbst werden" #. translator: first %s is an integer not a name -#: catalog/heap.c:700 +#: catalog/heap.c:710 #, c-format msgid "no collation was derived for partition key column %s with collatable type %s" msgstr "für Partitionierungsschlüsselspalte %s mit sortierbarem Typ %s wurde keine Sortierfolge abgeleitet" -#: catalog/heap.c:706 commands/createas.c:203 commands/createas.c:486 +#: catalog/heap.c:716 commands/createas.c:203 commands/createas.c:506 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "für Spalte »%s« mit sortierbarem Typ %s wurde keine Sortierfolge abgeleitet" -#: catalog/heap.c:1155 catalog/index.c:865 commands/tablecmds.c:3413 +#: catalog/heap.c:1198 catalog/index.c:868 commands/createas.c:411 +#: commands/tablecmds.c:3861 #, c-format msgid "relation \"%s\" already exists" msgstr "Relation »%s« existiert bereits" -#: catalog/heap.c:1171 catalog/pg_type.c:428 catalog/pg_type.c:775 -#: commands/typecmds.c:237 commands/typecmds.c:249 commands/typecmds.c:718 -#: commands/typecmds.c:1124 commands/typecmds.c:1336 commands/typecmds.c:2101 +#: catalog/heap.c:1214 catalog/pg_type.c:435 catalog/pg_type.c:773 +#: catalog/pg_type.c:920 commands/typecmds.c:249 commands/typecmds.c:261 +#: commands/typecmds.c:757 commands/typecmds.c:1172 commands/typecmds.c:1398 +#: commands/typecmds.c:1590 commands/typecmds.c:2563 #, c-format msgid "type \"%s\" already exists" msgstr "Typ »%s« existiert bereits" -#: catalog/heap.c:1172 +#: catalog/heap.c:1215 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "Eine Relation hat einen zugehörigen Typ mit dem selben Namen, daher müssen Sie einen Namen wählen, der nicht mit einem bestehenden Typ kollidiert." -#: catalog/heap.c:1201 +#: catalog/heap.c:1244 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "Heap-OID-Wert für pg_class ist im Binary-Upgrade-Modus nicht gesetzt" -#: catalog/heap.c:2400 +#: catalog/heap.c:2451 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "zur partitionierten Tabelle »%s« kann kein NO-INHERIT-Constraint hinzugefügt werden" -#: catalog/heap.c:2670 +#: catalog/heap.c:2723 #, c-format msgid "check constraint \"%s\" already exists" msgstr "Check-Constraint »%s« existiert bereits" -#: catalog/heap.c:2840 catalog/index.c:879 catalog/pg_constraint.c:668 -#: commands/tablecmds.c:7873 +#: catalog/heap.c:2893 catalog/index.c:882 catalog/pg_constraint.c:670 +#: commands/tablecmds.c:8593 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "Constraint »%s« existiert bereits für Relation »%s«" -#: catalog/heap.c:2847 +#: catalog/heap.c:2900 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "Constraint »%s« kollidiert mit nicht vererbtem Constraint für Relation »%s«" -#: catalog/heap.c:2858 +#: catalog/heap.c:2911 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "Constraint »%s« kollidiert mit vererbtem Constraint für Relation »%s«" -#: catalog/heap.c:2868 +#: catalog/heap.c:2921 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "Constraint »%s« kollidiert mit NOT-VALID-Constraint für Relation »%s«" -#: catalog/heap.c:2873 +#: catalog/heap.c:2926 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "Constraint »%s« wird mit geerbter Definition zusammengeführt" -#: catalog/heap.c:2975 +#: catalog/heap.c:3028 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "generierte Spalte »%s« kann nicht im Spaltengenerierungsausdruck verwendet werden" -#: catalog/heap.c:2977 +#: catalog/heap.c:3030 #, c-format msgid "A generated column cannot reference another generated column." msgstr "Eine generierte Spalte kann nicht auf eine andere generierte Spalte verweisen." -#: catalog/heap.c:3029 +#: catalog/heap.c:3082 #, c-format msgid "generation expression is not immutable" msgstr "Generierungsausdruck ist nicht »immutable«" -#: catalog/heap.c:3057 rewrite/rewriteHandler.c:1192 +#: catalog/heap.c:3110 rewrite/rewriteHandler.c:1245 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "Spalte »%s« hat Typ %s, aber der Vorgabeausdruck hat Typ %s" -#: catalog/heap.c:3062 commands/prepare.c:367 parser/parse_node.c:412 -#: parser/parse_target.c:589 parser/parse_target.c:869 -#: parser/parse_target.c:879 rewrite/rewriteHandler.c:1197 +#: catalog/heap.c:3115 commands/prepare.c:367 parser/analyze.c:2637 +#: parser/parse_target.c:595 parser/parse_target.c:883 +#: parser/parse_target.c:893 rewrite/rewriteHandler.c:1250 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Sie müssen den Ausdruck umschreiben oder eine Typumwandlung vornehmen." -#: catalog/heap.c:3109 +#: catalog/heap.c:3162 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "nur Verweise auf Tabelle »%s« sind im Check-Constraint zugelassen" -#: catalog/heap.c:3366 +#: catalog/heap.c:3460 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "nicht unterstützte Kombination aus ON COMMIT und Fremdschlüssel" -#: catalog/heap.c:3367 +#: catalog/heap.c:3461 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "Tabelle »%s« verweist auf »%s«, aber sie haben nicht die gleiche ON-COMMIT-Einstellung." -#: catalog/heap.c:3372 +#: catalog/heap.c:3466 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "kann eine Tabelle, die in einen Fremdschlüssel-Constraint eingebunden ist, nicht leeren" -#: catalog/heap.c:3373 +#: catalog/heap.c:3467 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "Tabelle »%s« verweist auf »%s«." -#: catalog/heap.c:3375 +#: catalog/heap.c:3469 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Leeren Sie die Tabelle »%s« gleichzeitig oder verwenden Sie TRUNCATE ... CASCADE." -#: catalog/index.c:219 parser/parse_utilcmd.c:1910 parser/parse_utilcmd.c:2009 +#: catalog/index.c:221 parser/parse_utilcmd.c:2182 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "mehrere Primärschlüssel für Tabelle »%s« nicht erlaubt" -#: catalog/index.c:237 +#: catalog/index.c:239 #, c-format msgid "primary keys cannot be expressions" msgstr "Primärschlüssel können keine Ausdrücke sein" -#: catalog/index.c:254 +#: catalog/index.c:256 #, c-format msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "Primärschlüsselspalte »%s« ist nicht als NOT NULL markiert" -#: catalog/index.c:764 catalog/index.c:1839 +#: catalog/index.c:767 catalog/index.c:1903 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "benutzerdefinierte Indexe für Systemkatalogtabellen werden nicht unterstützt" -#: catalog/index.c:804 +#: catalog/index.c:807 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "nichtdeterministische Sortierfolgen werden von Operatorklasse »%s« nicht unterstützt" -#: catalog/index.c:819 +#: catalog/index.c:822 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "nebenläufige Indexerzeugung für Systemkatalogtabellen wird nicht unterstützt" -#: catalog/index.c:828 catalog/index.c:1281 +#: catalog/index.c:831 catalog/index.c:1282 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "nebenläufige Indexerzeugung für Exclusion-Constraints wird nicht unterstützt" -#: catalog/index.c:837 +#: catalog/index.c:840 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "Cluster-globale Indexe können nicht nach initdb erzeugt werden" -#: catalog/index.c:857 commands/createas.c:252 commands/sequence.c:154 -#: parser/parse_utilcmd.c:208 +#: catalog/index.c:860 commands/createas.c:417 commands/sequence.c:154 +#: parser/parse_utilcmd.c:211 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "Relation »%s« existiert bereits, wird übersprungen" -#: catalog/index.c:907 +#: catalog/index.c:910 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "Index-OID-Wert für pg_class ist im Binary-Upgrade-Modus nicht gesetzt" -#: catalog/index.c:2124 +#: catalog/index.c:2189 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY muss die erste Aktion in einer Transaktion sein" -#: catalog/index.c:2855 -#, c-format -msgid "building index \"%s\" on table \"%s\" serially" -msgstr "baue Index »%s« von Tabelle »%s« seriell" - -#: catalog/index.c:2860 -#, c-format -msgid "building index \"%s\" on table \"%s\" with request for %d parallel worker" -msgid_plural "building index \"%s\" on table \"%s\" with request for %d parallel workers" -msgstr[0] "baue Index »%s« von Tabelle »%s« mit angefordertem %d parallelen Arbeitsprozess" -msgstr[1] "baue Index »%s« von Tabelle »%s« mit angeforderten %d parallelen Arbeitsprozessen" - -#: catalog/index.c:3488 +#: catalog/index.c:3574 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "kann temporäre Tabellen anderer Sitzungen nicht reindizieren" -#: catalog/index.c:3499 -#, fuzzy, c-format -#| msgid "cannot reindex specific index(es) in all databases" +#: catalog/index.c:3585 commands/indexcmds.c:3426 +#, c-format msgid "cannot reindex invalid index on TOAST table" -msgstr "kann nicht bestimmte Indexe in allen Datenbanken reindizieren" +msgstr "ungültiger Index einer TOAST-Tabelle kann nicht reindiziert werden" -#: catalog/index.c:3621 +#: catalog/index.c:3601 commands/indexcmds.c:3306 commands/indexcmds.c:3450 +#: commands/tablecmds.c:3300 +#, c-format +msgid "cannot move system relation \"%s\"" +msgstr "Systemrelation »%s« kann nicht verschoben werden" + +#: catalog/index.c:3746 #, c-format msgid "index \"%s\" was reindexed" msgstr "Index »%s« wurde neu indiziert" -#: catalog/index.c:3697 commands/indexcmds.c:3017 +#: catalog/index.c:3877 #, c-format -msgid "REINDEX of partitioned tables is not yet implemented, skipping \"%s\"" -msgstr "REINDEX von partitionierten Tabellen ist noch nicht implementiert, »%s« wird übersprungen" - -#: catalog/index.c:3752 -#, fuzzy, c-format -#| msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" -msgstr "ungültiger Index »%s.%s« kann nicht nebenläufig reindizert werden, wird übersprungen" +msgstr "ungültiger Index »%s.%s« einer TOAST-Tabelle kann nicht reindizert werden, wird übersprungen" #: catalog/namespace.c:257 catalog/namespace.c:461 catalog/namespace.c:553 -#: commands/trigger.c:5043 +#: commands/trigger.c:5132 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "Verweise auf andere Datenbanken sind nicht implementiert: »%s.%s.%s«" @@ -4370,24 +4508,24 @@ msgstr "temporäre Tabellen können keinen Schemanamen angeben" msgid "could not obtain lock on relation \"%s.%s\"" msgstr "konnte Sperre für Relation »%s.%s« nicht setzen" -#: catalog/namespace.c:400 commands/lockcmds.c:142 commands/lockcmds.c:227 +#: catalog/namespace.c:400 commands/lockcmds.c:143 commands/lockcmds.c:228 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "konnte Sperre für Relation »%s« nicht setzen" -#: catalog/namespace.c:428 parser/parse_relation.c:1357 +#: catalog/namespace.c:428 parser/parse_relation.c:1362 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "Relation »%s.%s« existiert nicht" -#: catalog/namespace.c:433 parser/parse_relation.c:1370 -#: parser/parse_relation.c:1378 +#: catalog/namespace.c:433 parser/parse_relation.c:1375 +#: parser/parse_relation.c:1383 #, c-format msgid "relation \"%s\" does not exist" msgstr "Relation »%s« existiert nicht" -#: catalog/namespace.c:499 catalog/namespace.c:3030 commands/extension.c:1506 -#: commands/extension.c:1512 +#: catalog/namespace.c:499 catalog/namespace.c:3029 commands/extension.c:1519 +#: commands/extension.c:1525 #, c-format msgid "no schema has been selected to create in" msgstr "kein Schema für die Objekterzeugung ausgewählt" @@ -4407,318 +4545,317 @@ msgstr "kann keine temporäre Relation in einem nicht-temporären Schema erzeuge msgid "only temporary relations may be created in temporary schemas" msgstr "nur temporäre Relationen können in temporären Schemas erzeugt werden" -#: catalog/namespace.c:2222 +#: catalog/namespace.c:2221 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "Statistikobjekt »%s« existiert nicht" -#: catalog/namespace.c:2345 +#: catalog/namespace.c:2344 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "Textsucheparser »%s« existiert nicht" -#: catalog/namespace.c:2471 +#: catalog/namespace.c:2470 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "Textsuchewörterbuch »%s« existiert nicht" -#: catalog/namespace.c:2598 +#: catalog/namespace.c:2597 #, c-format msgid "text search template \"%s\" does not exist" msgstr "Textsuchevorlage »%s« existiert nicht" -#: catalog/namespace.c:2724 commands/tsearchcmds.c:1194 -#: utils/cache/ts_cache.c:617 +#: catalog/namespace.c:2723 commands/tsearchcmds.c:1121 +#: utils/cache/ts_cache.c:613 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "Textsuchekonfiguration »%s« existiert nicht" -#: catalog/namespace.c:2837 parser/parse_expr.c:872 parser/parse_target.c:1228 +#: catalog/namespace.c:2836 parser/parse_expr.c:810 parser/parse_target.c:1256 #, c-format msgid "cross-database references are not implemented: %s" msgstr "Verweise auf andere Datenbanken sind nicht implementiert: %s" -#: catalog/namespace.c:2843 gram.y:14978 gram.y:16432 parser/parse_expr.c:879 -#: parser/parse_target.c:1235 +#: catalog/namespace.c:2842 gram.y:15124 gram.y:17082 parser/parse_expr.c:817 +#: parser/parse_target.c:1263 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "falscher qualifizierter Name (zu viele Namensteile): %s" -#: catalog/namespace.c:2973 +#: catalog/namespace.c:2972 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "Objekte können nicht in oder aus temporären Schemas verschoben werden" -#: catalog/namespace.c:2979 +#: catalog/namespace.c:2978 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "Objekte können nicht in oder aus TOAST-Schemas verschoben werden" -#: catalog/namespace.c:3052 commands/schemacmds.c:256 commands/schemacmds.c:336 -#: commands/tablecmds.c:1192 +#: catalog/namespace.c:3051 commands/schemacmds.c:233 commands/schemacmds.c:313 +#: commands/tablecmds.c:1251 #, c-format msgid "schema \"%s\" does not exist" msgstr "Schema »%s« existiert nicht" -#: catalog/namespace.c:3083 +#: catalog/namespace.c:3082 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "falscher Relationsname (zu viele Namensteile): %s" -#: catalog/namespace.c:3646 +#: catalog/namespace.c:3645 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "Sortierfolge »%s« für Kodierung »%s« existiert nicht" -#: catalog/namespace.c:3701 +#: catalog/namespace.c:3700 #, c-format msgid "conversion \"%s\" does not exist" msgstr "Konversion »%s« existiert nicht" -#: catalog/namespace.c:3965 +#: catalog/namespace.c:3964 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "keine Berechtigung, um temporäre Tabellen in Datenbank »%s« zu erzeugen" -#: catalog/namespace.c:3981 +#: catalog/namespace.c:3980 #, c-format msgid "cannot create temporary tables during recovery" msgstr "während der Wiederherstellung können keine temporären Tabellen erzeugt werden" -#: catalog/namespace.c:3987 +#: catalog/namespace.c:3986 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "während einer parallelen Operation können keine temporären Tabellen erzeugt werden" -#: catalog/namespace.c:4286 commands/tablespace.c:1204 commands/variable.c:64 -#: utils/misc/guc.c:11126 utils/misc/guc.c:11204 +#: catalog/namespace.c:4285 commands/tablespace.c:1217 commands/variable.c:64 +#: utils/misc/guc.c:11618 utils/misc/guc.c:11696 #, c-format msgid "List syntax is invalid." msgstr "Die Listensyntax ist ungültig." -#: catalog/objectaddress.c:1275 catalog/pg_publication.c:57 -#: commands/policy.c:95 commands/policy.c:395 commands/policy.c:485 -#: commands/tablecmds.c:230 commands/tablecmds.c:272 commands/tablecmds.c:1976 -#: commands/tablecmds.c:5489 commands/tablecmds.c:10900 +#: catalog/objectaddress.c:1369 catalog/pg_publication.c:57 +#: commands/policy.c:95 commands/policy.c:375 commands/policy.c:465 +#: commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2153 +#: commands/tablecmds.c:6021 commands/tablecmds.c:11685 #, c-format msgid "\"%s\" is not a table" msgstr "»%s« ist keine Tabelle" -#: catalog/objectaddress.c:1282 commands/tablecmds.c:242 -#: commands/tablecmds.c:5519 commands/tablecmds.c:15522 commands/view.c:119 +#: catalog/objectaddress.c:1376 commands/tablecmds.c:255 +#: commands/tablecmds.c:6051 commands/tablecmds.c:16503 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "»%s« ist keine Sicht" -#: catalog/objectaddress.c:1289 commands/matview.c:175 commands/tablecmds.c:248 -#: commands/tablecmds.c:15527 +#: catalog/objectaddress.c:1383 commands/matview.c:175 commands/tablecmds.c:261 +#: commands/tablecmds.c:16508 #, c-format msgid "\"%s\" is not a materialized view" msgstr "»%s« ist keine materialisierte Sicht" -#: catalog/objectaddress.c:1296 commands/tablecmds.c:266 -#: commands/tablecmds.c:5522 commands/tablecmds.c:15532 +#: catalog/objectaddress.c:1390 commands/tablecmds.c:279 +#: commands/tablecmds.c:6054 commands/tablecmds.c:16513 #, c-format msgid "\"%s\" is not a foreign table" msgstr "»%s« ist keine Fremdtabelle" -#: catalog/objectaddress.c:1337 +#: catalog/objectaddress.c:1431 #, c-format msgid "must specify relation and object name" msgstr "Relations- und Objektname müssen angegeben werden" -#: catalog/objectaddress.c:1413 catalog/objectaddress.c:1466 +#: catalog/objectaddress.c:1507 catalog/objectaddress.c:1560 #, c-format msgid "column name must be qualified" msgstr "Spaltenname muss qualifiziert werden" -#: catalog/objectaddress.c:1513 +#: catalog/objectaddress.c:1607 #, c-format msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "Vorgabewert für Spalte »%s« von Relation »%s« existiert nicht" -#: catalog/objectaddress.c:1550 commands/functioncmds.c:133 -#: commands/tablecmds.c:258 commands/typecmds.c:262 commands/typecmds.c:3252 -#: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:845 -#: utils/adt/acl.c:4436 +#: catalog/objectaddress.c:1644 commands/functioncmds.c:136 +#: commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 +#: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 +#: utils/adt/acl.c:4411 #, c-format msgid "type \"%s\" does not exist" msgstr "Typ »%s« existiert nicht" -#: catalog/objectaddress.c:1669 +#: catalog/objectaddress.c:1763 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "Operator %d (%s, %s) von %s existiert nicht" -#: catalog/objectaddress.c:1700 +#: catalog/objectaddress.c:1794 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "Funktion %d (%s, %s) von %s existiert nicht" -#: catalog/objectaddress.c:1751 catalog/objectaddress.c:1777 +#: catalog/objectaddress.c:1845 catalog/objectaddress.c:1871 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "Benutzerabbildung für Benutzer »%s« auf Server »%s« existiert nicht" -#: catalog/objectaddress.c:1766 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:1012 commands/foreigncmds.c:1392 -#: foreign/foreign.c:723 +#: catalog/objectaddress.c:1860 commands/foreigncmds.c:430 +#: commands/foreigncmds.c:988 commands/foreigncmds.c:1347 foreign/foreign.c:723 #, c-format msgid "server \"%s\" does not exist" msgstr "Server »%s« existiert nicht" -#: catalog/objectaddress.c:1833 +#: catalog/objectaddress.c:1927 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "Publikationsrelation »%s« in Publikation »%s« existiert nicht" -#: catalog/objectaddress.c:1895 +#: catalog/objectaddress.c:1989 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "unbekannter Standard-ACL-Objekttyp »%c«" -#: catalog/objectaddress.c:1896 +#: catalog/objectaddress.c:1990 #, c-format msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." msgstr "Gültige Objekttypen sind »%c«, »%c«, »%c«, »%c«, »%c«." -#: catalog/objectaddress.c:1947 +#: catalog/objectaddress.c:2041 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "Standard-ACL für Benutzer »%s« in Schema »%s« für %s existiert nicht" -#: catalog/objectaddress.c:1952 +#: catalog/objectaddress.c:2046 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "Standard-ACL für Benutzer »%s« für %s existiert nicht" -#: catalog/objectaddress.c:1979 catalog/objectaddress.c:2037 -#: catalog/objectaddress.c:2094 +#: catalog/objectaddress.c:2073 catalog/objectaddress.c:2131 +#: catalog/objectaddress.c:2188 #, c-format msgid "name or argument lists may not contain nulls" msgstr "Namens- oder Argumentlisten dürfen keine NULL-Werte enthalten" -#: catalog/objectaddress.c:2013 +#: catalog/objectaddress.c:2107 #, c-format msgid "unsupported object type \"%s\"" msgstr "nicht unterstützter Objekttyp »%s«" -#: catalog/objectaddress.c:2033 catalog/objectaddress.c:2051 -#: catalog/objectaddress.c:2192 +#: catalog/objectaddress.c:2127 catalog/objectaddress.c:2145 +#: catalog/objectaddress.c:2286 #, c-format msgid "name list length must be exactly %d" msgstr "Länge der Namensliste muss genau %d sein" -#: catalog/objectaddress.c:2055 +#: catalog/objectaddress.c:2149 #, c-format msgid "large object OID may not be null" msgstr "Large-Object-OID darf nicht NULL sein" -#: catalog/objectaddress.c:2064 catalog/objectaddress.c:2127 -#: catalog/objectaddress.c:2134 +#: catalog/objectaddress.c:2158 catalog/objectaddress.c:2221 +#: catalog/objectaddress.c:2228 #, c-format msgid "name list length must be at least %d" msgstr "Länge der Namensliste muss mindestens %d sein" -#: catalog/objectaddress.c:2120 catalog/objectaddress.c:2141 +#: catalog/objectaddress.c:2214 catalog/objectaddress.c:2235 #, c-format msgid "argument list length must be exactly %d" msgstr "Länge der Argumentliste muss genau %d sein" -#: catalog/objectaddress.c:2393 libpq/be-fsstubs.c:321 +#: catalog/objectaddress.c:2487 libpq/be-fsstubs.c:321 #, c-format msgid "must be owner of large object %u" msgstr "Berechtigung nur für Eigentümer des Large Object %u" -#: catalog/objectaddress.c:2408 commands/functioncmds.c:1445 +#: catalog/objectaddress.c:2502 commands/functioncmds.c:1555 #, c-format msgid "must be owner of type %s or type %s" msgstr "Berechtigung nur für Eigentümer des Typs %s oder des Typs %s" -#: catalog/objectaddress.c:2458 catalog/objectaddress.c:2475 +#: catalog/objectaddress.c:2552 catalog/objectaddress.c:2569 #, c-format msgid "must be superuser" msgstr "Berechtigung nur für Superuser" -#: catalog/objectaddress.c:2465 +#: catalog/objectaddress.c:2559 #, c-format msgid "must have CREATEROLE privilege" msgstr "Berechtigung nur mit CREATEROLE-Privileg" -#: catalog/objectaddress.c:2544 +#: catalog/objectaddress.c:2638 #, c-format msgid "unrecognized object type \"%s\"" msgstr "unbekannter Objekttyp »%s«" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2772 +#: catalog/objectaddress.c:2880 #, c-format msgid "column %s of %s" msgstr "Spalte %s von %s" -#: catalog/objectaddress.c:2782 +#: catalog/objectaddress.c:2894 #, c-format msgid "function %s" msgstr "Funktion %s" -#: catalog/objectaddress.c:2787 +#: catalog/objectaddress.c:2906 #, c-format msgid "type %s" msgstr "Typ %s" -#: catalog/objectaddress.c:2817 +#: catalog/objectaddress.c:2943 #, c-format msgid "cast from %s to %s" msgstr "Typumwandlung von %s in %s" -#: catalog/objectaddress.c:2845 +#: catalog/objectaddress.c:2976 #, c-format msgid "collation %s" msgstr "Sortierfolge %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2871 +#: catalog/objectaddress.c:3007 #, c-format msgid "constraint %s on %s" msgstr "Constraint %s für %s" -#: catalog/objectaddress.c:2877 +#: catalog/objectaddress.c:3013 #, c-format msgid "constraint %s" msgstr "Constraint %s" -#: catalog/objectaddress.c:2904 +#: catalog/objectaddress.c:3045 #, c-format msgid "conversion %s" msgstr "Konversion %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:2943 +#: catalog/objectaddress.c:3091 #, c-format msgid "default value for %s" msgstr "Vorgabewert für %s" -#: catalog/objectaddress.c:2952 +#: catalog/objectaddress.c:3105 #, c-format msgid "language %s" msgstr "Sprache %s" -#: catalog/objectaddress.c:2957 +#: catalog/objectaddress.c:3113 #, c-format msgid "large object %u" msgstr "Large Object %u" -#: catalog/objectaddress.c:2962 +#: catalog/objectaddress.c:3126 #, c-format msgid "operator %s" msgstr "Operator %s" -#: catalog/objectaddress.c:2994 +#: catalog/objectaddress.c:3163 #, c-format msgid "operator class %s for access method %s" msgstr "Operatorklasse %s für Zugriffsmethode %s" -#: catalog/objectaddress.c:3017 +#: catalog/objectaddress.c:3191 #, c-format msgid "access method %s" msgstr "Zugriffsmethode %s" @@ -4727,7 +4864,7 @@ msgstr "Zugriffsmethode %s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3059 +#: catalog/objectaddress.c:3240 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "Operator %d (%s, %s) von %s: %s" @@ -4736,365 +4873,364 @@ msgstr "Operator %d (%s, %s) von %s: %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3109 +#: catalog/objectaddress.c:3297 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "Funktion %d (%s, %s) von %s: %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3153 +#: catalog/objectaddress.c:3349 #, c-format msgid "rule %s on %s" msgstr "Regel %s für %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3191 +#: catalog/objectaddress.c:3395 #, c-format msgid "trigger %s on %s" msgstr "Trigger %s für %s" -#: catalog/objectaddress.c:3207 +#: catalog/objectaddress.c:3415 #, c-format msgid "schema %s" msgstr "Schema %s" -#: catalog/objectaddress.c:3230 +#: catalog/objectaddress.c:3443 #, c-format msgid "statistics object %s" msgstr "Statistikobjekt %s" -#: catalog/objectaddress.c:3257 +#: catalog/objectaddress.c:3474 #, c-format msgid "text search parser %s" msgstr "Textsucheparser %s" -#: catalog/objectaddress.c:3283 +#: catalog/objectaddress.c:3505 #, c-format msgid "text search dictionary %s" msgstr "Textsuchewörterbuch %s" -#: catalog/objectaddress.c:3309 +#: catalog/objectaddress.c:3536 #, c-format msgid "text search template %s" msgstr "Textsuchevorlage %s" -#: catalog/objectaddress.c:3335 +#: catalog/objectaddress.c:3567 #, c-format msgid "text search configuration %s" msgstr "Textsuchekonfiguration %s" -#: catalog/objectaddress.c:3344 +#: catalog/objectaddress.c:3580 #, c-format msgid "role %s" msgstr "Rolle %s" -#: catalog/objectaddress.c:3357 +#: catalog/objectaddress.c:3596 #, c-format msgid "database %s" msgstr "Datenbank %s" -#: catalog/objectaddress.c:3369 +#: catalog/objectaddress.c:3612 #, c-format msgid "tablespace %s" msgstr "Tablespace %s" -#: catalog/objectaddress.c:3378 +#: catalog/objectaddress.c:3623 #, c-format msgid "foreign-data wrapper %s" msgstr "Fremddaten-Wrapper %s" -#: catalog/objectaddress.c:3387 +#: catalog/objectaddress.c:3633 #, c-format msgid "server %s" msgstr "Server %s" -#: catalog/objectaddress.c:3415 +#: catalog/objectaddress.c:3666 #, c-format msgid "user mapping for %s on server %s" msgstr "Benutzerabbildung für %s auf Server %s" -#: catalog/objectaddress.c:3460 +#: catalog/objectaddress.c:3718 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "Vorgabeprivilegien für neue Relationen von Rolle %s in Schema %s" -#: catalog/objectaddress.c:3464 +#: catalog/objectaddress.c:3722 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "Vorgabeprivilegien für neue Relationen von Rolle %s" -#: catalog/objectaddress.c:3470 +#: catalog/objectaddress.c:3728 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "Vorgabeprivilegien für neue Sequenzen von Rolle %s in Schema %s" -#: catalog/objectaddress.c:3474 +#: catalog/objectaddress.c:3732 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "Vorgabeprivilegien für neue Sequenzen von Rolle %s" -#: catalog/objectaddress.c:3480 +#: catalog/objectaddress.c:3738 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "Vorgabeprivilegien für neue Funktionen von Rolle %s in Schema %s" -#: catalog/objectaddress.c:3484 +#: catalog/objectaddress.c:3742 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "Vorgabeprivilegien für neue Funktionen von Rolle %s" -#: catalog/objectaddress.c:3490 +#: catalog/objectaddress.c:3748 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "Vorgabeprivilegien für neue Typen von Rolle %s in Schema %s" -#: catalog/objectaddress.c:3494 +#: catalog/objectaddress.c:3752 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "Vorgabeprivilegien für neue Typen von Rolle %s" -#: catalog/objectaddress.c:3500 +#: catalog/objectaddress.c:3758 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "Vorgabeprivilegien für neue Schemas von Rolle %s" -#: catalog/objectaddress.c:3507 +#: catalog/objectaddress.c:3765 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "Vorgabeprivilegien von Rolle %s in Schema %s" -#: catalog/objectaddress.c:3511 +#: catalog/objectaddress.c:3769 #, c-format msgid "default privileges belonging to role %s" msgstr "Vorgabeprivilegien von Rolle %s" -#: catalog/objectaddress.c:3529 +#: catalog/objectaddress.c:3791 #, c-format msgid "extension %s" msgstr "Erweiterung %s" -#: catalog/objectaddress.c:3542 +#: catalog/objectaddress.c:3808 #, c-format msgid "event trigger %s" msgstr "Ereignistrigger %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3578 +#: catalog/objectaddress.c:3852 #, c-format msgid "policy %s on %s" msgstr "Policy %s für %s" -#: catalog/objectaddress.c:3588 +#: catalog/objectaddress.c:3865 #, c-format msgid "publication %s" msgstr "Publikation %s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3614 +#: catalog/objectaddress.c:3893 #, c-format msgid "publication of %s in publication %s" msgstr "Publikation von %s in Publikation %s" -#: catalog/objectaddress.c:3623 +#: catalog/objectaddress.c:3905 #, c-format msgid "subscription %s" msgstr "Subskription %s" -#: catalog/objectaddress.c:3642 +#: catalog/objectaddress.c:3926 #, c-format msgid "transform for %s language %s" msgstr "Transformation %s für Sprache %s" -#: catalog/objectaddress.c:3705 +#: catalog/objectaddress.c:3997 #, c-format msgid "table %s" msgstr "Tabelle %s" -#: catalog/objectaddress.c:3710 +#: catalog/objectaddress.c:4002 #, c-format msgid "index %s" msgstr "Index %s" -#: catalog/objectaddress.c:3714 +#: catalog/objectaddress.c:4006 #, c-format msgid "sequence %s" msgstr "Sequenz %s" -#: catalog/objectaddress.c:3718 +#: catalog/objectaddress.c:4010 #, c-format msgid "toast table %s" msgstr "TOAST-Tabelle %s" -#: catalog/objectaddress.c:3722 +#: catalog/objectaddress.c:4014 #, c-format msgid "view %s" msgstr "Sicht %s" -#: catalog/objectaddress.c:3726 +#: catalog/objectaddress.c:4018 #, c-format msgid "materialized view %s" msgstr "materialisierte Sicht %s" -#: catalog/objectaddress.c:3730 +#: catalog/objectaddress.c:4022 #, c-format msgid "composite type %s" msgstr "zusammengesetzter Typ %s" -#: catalog/objectaddress.c:3734 +#: catalog/objectaddress.c:4026 #, c-format msgid "foreign table %s" msgstr "Fremdtabelle %s" -#: catalog/objectaddress.c:3739 +#: catalog/objectaddress.c:4031 #, c-format msgid "relation %s" msgstr "Relation %s" -#: catalog/objectaddress.c:3776 +#: catalog/objectaddress.c:4072 #, c-format msgid "operator family %s for access method %s" msgstr "Operatorfamilie %s für Zugriffsmethode %s" -#: catalog/pg_aggregate.c:128 +#: catalog/pg_aggregate.c:129 #, c-format msgid "aggregates cannot have more than %d argument" msgid_plural "aggregates cannot have more than %d arguments" msgstr[0] "Aggregatfunktionen können nicht mehr als %d Argument haben" msgstr[1] "Aggregatfunktionen können nicht mehr als %d Argumente haben" -#: catalog/pg_aggregate.c:143 catalog/pg_aggregate.c:157 +#: catalog/pg_aggregate.c:144 catalog/pg_aggregate.c:158 #, c-format msgid "cannot determine transition data type" msgstr "kann Übergangsdatentyp nicht bestimmen" -#: catalog/pg_aggregate.c:172 +#: catalog/pg_aggregate.c:173 #, c-format msgid "a variadic ordered-set aggregate must use VARIADIC type ANY" msgstr "eine variadische Ordered-Set-Aggregatfunktion muss VARIADIC-Typ ANY verwenden" -#: catalog/pg_aggregate.c:198 +#: catalog/pg_aggregate.c:199 #, c-format msgid "a hypothetical-set aggregate must have direct arguments matching its aggregated arguments" msgstr "eine Hypothetical-Set-Aggregatfunktion muss direkte Argumente haben, die mit ihren aggregierten Argumenten übereinstimmen" -#: catalog/pg_aggregate.c:245 catalog/pg_aggregate.c:289 +#: catalog/pg_aggregate.c:246 catalog/pg_aggregate.c:290 #, c-format msgid "return type of transition function %s is not %s" msgstr "Rückgabetyp der Übergangsfunktion %s ist nicht %s" -#: catalog/pg_aggregate.c:265 catalog/pg_aggregate.c:308 +#: catalog/pg_aggregate.c:266 catalog/pg_aggregate.c:309 #, c-format msgid "must not omit initial value when transition function is strict and transition type is not compatible with input type" msgstr "Anfangswert darf nicht ausgelassen werden, wenn Übergangsfunktion strikt ist und Übergangstyp nicht mit Eingabetyp kompatibel ist" -#: catalog/pg_aggregate.c:334 +#: catalog/pg_aggregate.c:335 #, c-format msgid "return type of inverse transition function %s is not %s" msgstr "Rückgabetyp der inversen Übergangsfunktion %s ist nicht %s" -#: catalog/pg_aggregate.c:351 executor/nodeWindowAgg.c:2852 +#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:2852 #, c-format msgid "strictness of aggregate's forward and inverse transition functions must match" msgstr "Striktheit der vorwärtigen und inversen Übergangsfunktionen einer Aggregatfunktion müssen übereinstimmen" -#: catalog/pg_aggregate.c:395 catalog/pg_aggregate.c:553 +#: catalog/pg_aggregate.c:396 catalog/pg_aggregate.c:554 #, c-format msgid "final function with extra arguments must not be declared STRICT" msgstr "Abschlussfunktion mit zusätzlichen Argumenten darf nicht als STRICT deklariert sein" -#: catalog/pg_aggregate.c:426 +#: catalog/pg_aggregate.c:427 #, c-format msgid "return type of combine function %s is not %s" msgstr "Rückgabetyp der Kombinierfunktion %s ist nicht %s" -#: catalog/pg_aggregate.c:438 executor/nodeAgg.c:4098 +#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:4127 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "Kombinierfunktion mit Übergangstyp %s darf nicht als STRICT deklariert sein" -#: catalog/pg_aggregate.c:457 +#: catalog/pg_aggregate.c:458 #, c-format msgid "return type of serialization function %s is not %s" msgstr "Rückgabetyp der Serialisierungsfunktion %s ist nicht %s" -#: catalog/pg_aggregate.c:478 +#: catalog/pg_aggregate.c:479 #, c-format msgid "return type of deserialization function %s is not %s" msgstr "Rückgabetyp der Deserialisierungsfunktion %s ist nicht %s" -#: catalog/pg_aggregate.c:497 catalog/pg_proc.c:186 catalog/pg_proc.c:220 +#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:189 catalog/pg_proc.c:223 #, c-format msgid "cannot determine result data type" msgstr "kann Ergebnisdatentyp nicht bestimmen" -#: catalog/pg_aggregate.c:512 catalog/pg_proc.c:199 catalog/pg_proc.c:228 +#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:202 catalog/pg_proc.c:231 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "unsichere Verwendung des Pseudotyps »internal«" -#: catalog/pg_aggregate.c:566 +#: catalog/pg_aggregate.c:567 #, c-format msgid "moving-aggregate implementation returns type %s, but plain implementation returns type %s" msgstr "Moving-Aggregat-Implementierung gibt Typ %s zurück, aber die normale Implementierung gibt Typ %s zurück" -#: catalog/pg_aggregate.c:577 +#: catalog/pg_aggregate.c:578 #, c-format msgid "sort operator can only be specified for single-argument aggregates" msgstr "Sortieroperator kann nur für Aggregatfunktionen mit einem Argument angegeben werden" -#: catalog/pg_aggregate.c:704 catalog/pg_proc.c:374 +#: catalog/pg_aggregate.c:706 catalog/pg_proc.c:384 #, c-format msgid "cannot change routine kind" msgstr "kann Routinenart nicht ändern" -#: catalog/pg_aggregate.c:706 +#: catalog/pg_aggregate.c:708 #, c-format msgid "\"%s\" is an ordinary aggregate function." msgstr "»%s« ist eine normale Aggregatfunktion." -#: catalog/pg_aggregate.c:708 -#, fuzzy, c-format -#| msgid "\"%s\" is an aggregate function." +#: catalog/pg_aggregate.c:710 +#, c-format msgid "\"%s\" is an ordered-set aggregate." -msgstr "»%s« ist eine Aggregatfunktion." +msgstr "»%s« ist eine Ordered-Set-Aggregatfunktion." -#: catalog/pg_aggregate.c:710 +#: catalog/pg_aggregate.c:712 #, c-format msgid "\"%s\" is a hypothetical-set aggregate." -msgstr "" +msgstr "»%s« ist eine Hypothetical-Set-Aggregatfunktion." -#: catalog/pg_aggregate.c:715 +#: catalog/pg_aggregate.c:717 #, c-format msgid "cannot change number of direct arguments of an aggregate function" msgstr "die Anzahl direkter Argumente einer Aggregatfunktion kann nicht geändert werden" -#: catalog/pg_aggregate.c:870 commands/functioncmds.c:667 -#: commands/typecmds.c:1647 commands/typecmds.c:1692 commands/typecmds.c:1734 -#: commands/typecmds.c:1770 commands/typecmds.c:1804 commands/typecmds.c:1838 -#: commands/typecmds.c:1872 commands/typecmds.c:1949 commands/typecmds.c:1991 -#: parser/parse_func.c:414 parser/parse_func.c:443 parser/parse_func.c:468 -#: parser/parse_func.c:482 parser/parse_func.c:602 parser/parse_func.c:622 -#: parser/parse_func.c:2129 parser/parse_func.c:2320 +#: catalog/pg_aggregate.c:858 commands/functioncmds.c:675 +#: commands/typecmds.c:1992 commands/typecmds.c:2038 commands/typecmds.c:2090 +#: commands/typecmds.c:2127 commands/typecmds.c:2161 commands/typecmds.c:2195 +#: commands/typecmds.c:2229 commands/typecmds.c:2258 commands/typecmds.c:2345 +#: commands/typecmds.c:2387 parser/parse_func.c:416 parser/parse_func.c:447 +#: parser/parse_func.c:474 parser/parse_func.c:488 parser/parse_func.c:610 +#: parser/parse_func.c:630 parser/parse_func.c:2143 parser/parse_func.c:2334 #, c-format msgid "function %s does not exist" msgstr "Funktion %s existiert nicht" -#: catalog/pg_aggregate.c:876 +#: catalog/pg_aggregate.c:864 #, c-format msgid "function %s returns a set" msgstr "Funktion %s gibt eine Ergebnismenge zurück" -#: catalog/pg_aggregate.c:891 +#: catalog/pg_aggregate.c:879 #, c-format msgid "function %s must accept VARIADIC ANY to be used in this aggregate" msgstr "Funktion %s muss VARIADIC ANY akzeptieren, um in dieser Aggregatfunktion verwendet zu werden" -#: catalog/pg_aggregate.c:915 +#: catalog/pg_aggregate.c:903 #, c-format msgid "function %s requires run-time type coercion" msgstr "Funktion %s erfordert Typumwandlung zur Laufzeit" -#: catalog/pg_cast.c:67 +#: catalog/pg_cast.c:68 #, c-format msgid "cast from type %s to type %s already exists" msgstr "Typumwandlung von Typ %s in Typ %s existiert bereits" @@ -5119,7 +5255,7 @@ msgstr "Sortierfolge »%s« existiert bereits" msgid "collation \"%s\" for encoding \"%s\" already exists" msgstr "Sortierfolge »%s« für Kodierung »%s« existiert bereits" -#: catalog/pg_constraint.c:676 +#: catalog/pg_constraint.c:678 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "Constraint »%s« für Domäne %s existiert bereits" @@ -5144,25 +5280,25 @@ msgstr "Konversion »%s« existiert bereits" msgid "default conversion for %s to %s already exists" msgstr "Standardumwandlung von %s nach %s existiert bereits" -#: catalog/pg_depend.c:162 commands/extension.c:3311 +#: catalog/pg_depend.c:204 commands/extension.c:3343 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s ist schon Mitglied der Erweiterung »%s«" -#: catalog/pg_depend.c:538 +#: catalog/pg_depend.c:580 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "kann Abhängigkeit von %s nicht entfernen, weil es ein Systemobjekt ist" -#: catalog/pg_enum.c:127 catalog/pg_enum.c:230 catalog/pg_enum.c:525 +#: catalog/pg_enum.c:128 catalog/pg_enum.c:230 catalog/pg_enum.c:525 #, c-format msgid "invalid enum label \"%s\"" msgstr "ungültiges Enum-Label »%s«" -#: catalog/pg_enum.c:128 catalog/pg_enum.c:231 catalog/pg_enum.c:526 +#: catalog/pg_enum.c:129 catalog/pg_enum.c:231 catalog/pg_enum.c:526 #, c-format -msgid "Labels must be %d characters or less." -msgstr "Labels müssen %d oder weniger Zeichen haben." +msgid "Labels must be %d bytes or less." +msgstr "Labels müssen %d oder weniger Bytes haben." #: catalog/pg_enum.c:259 #, c-format @@ -5189,7 +5325,34 @@ msgstr "OID-Wert für pg_enum ist im Binary-Upgrade-Modus nicht gesetzt" msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" msgstr "ALTER TYPE ADD BEFORE/AFTER ist mit Binary Upgrade inkompatibel" -#: catalog/pg_namespace.c:64 commands/schemacmds.c:265 +#: catalog/pg_inherits.c:593 +#, fuzzy, c-format +#| msgid "cannot inherit from partition \"%s\"" +msgid "cannot detach partition \"%s\"" +msgstr "von Partition »%s« kann nicht geerbt werden" + +#: catalog/pg_inherits.c:595 +#, c-format +msgid "The partition is being detached concurrently or has an unfinished detach." +msgstr "" + +#: catalog/pg_inherits.c:596 +#, c-format +msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation" +msgstr "" + +#: catalog/pg_inherits.c:600 +#, fuzzy, c-format +#| msgid "cannot cluster on partial index \"%s\"" +msgid "cannot complete detaching partition \"%s\"" +msgstr "kann nicht anhand des partiellen Index »%s« clustern" + +#: catalog/pg_inherits.c:602 +#, c-format +msgid "There's no pending concurrent detach." +msgstr "" + +#: catalog/pg_namespace.c:64 commands/schemacmds.c:242 #, c-format msgid "schema \"%s\" already exists" msgstr "Schema »%s« existiert bereits" @@ -5204,7 +5367,7 @@ msgstr "»%s« ist kein gültiger Operatorname" msgid "only binary operators can have commutators" msgstr "nur binäre Operatoren können Kommutatoren haben" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:483 +#: catalog/pg_operator.c:374 commands/operatorcmds.c:507 #, c-format msgid "only binary operators can have join selectivity" msgstr "nur binäre Operatoren können Join-Selectivity haben" @@ -5224,12 +5387,12 @@ msgstr "nur binäre Operatoren können eine Hash-Funktion haben" msgid "only boolean operators can have negators" msgstr "nur Boole’sche Operatoren können Negatoren haben" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:491 +#: catalog/pg_operator.c:397 commands/operatorcmds.c:515 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "nur Boole’sche Operatoren können Restriction-Selectivity haben" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:495 +#: catalog/pg_operator.c:401 commands/operatorcmds.c:519 #, c-format msgid "only boolean operators can have join selectivity" msgstr "nur Boole’sche Operatoren können Join-Selectivity haben" @@ -5254,44 +5417,44 @@ msgstr "Operator %s existiert bereits" msgid "operator cannot be its own negator or sort operator" msgstr "Operator kann nicht sein eigener Negator oder Sortierungsoperator sein" -#: catalog/pg_proc.c:127 parser/parse_func.c:2191 +#: catalog/pg_proc.c:130 parser/parse_func.c:2205 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" msgstr[0] "Funktionen können nicht mehr als %d Argument haben" msgstr[1] "Funktionen können nicht mehr als %d Argumente haben" -#: catalog/pg_proc.c:364 +#: catalog/pg_proc.c:374 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "Funktion »%s« existiert bereits mit den selben Argumenttypen" -#: catalog/pg_proc.c:376 +#: catalog/pg_proc.c:386 #, c-format msgid "\"%s\" is an aggregate function." msgstr "»%s« ist eine Aggregatfunktion." -#: catalog/pg_proc.c:378 +#: catalog/pg_proc.c:388 #, c-format msgid "\"%s\" is a function." msgstr "»%s« ist eine Funktion." -#: catalog/pg_proc.c:380 +#: catalog/pg_proc.c:390 #, c-format msgid "\"%s\" is a procedure." msgstr "»%s« ist eine Prozedur." -#: catalog/pg_proc.c:382 +#: catalog/pg_proc.c:392 #, c-format msgid "\"%s\" is a window function." msgstr "»%s« ist eine Fensterfunktion." -#: catalog/pg_proc.c:402 +#: catalog/pg_proc.c:412 #, c-format msgid "cannot change whether a procedure has output parameters" msgstr "man kann nicht ändern, ob eine Prozedur Ausgabeparameter hat" -#: catalog/pg_proc.c:403 catalog/pg_proc.c:433 +#: catalog/pg_proc.c:413 catalog/pg_proc.c:443 #, c-format msgid "cannot change return type of existing function" msgstr "kann Rückgabetyp einer bestehenden Funktion nicht ändern" @@ -5300,48 +5463,48 @@ msgstr "kann Rückgabetyp einer bestehenden Funktion nicht ändern" #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:409 catalog/pg_proc.c:436 catalog/pg_proc.c:481 -#: catalog/pg_proc.c:507 catalog/pg_proc.c:533 +#: catalog/pg_proc.c:419 catalog/pg_proc.c:446 catalog/pg_proc.c:493 +#: catalog/pg_proc.c:519 catalog/pg_proc.c:545 #, c-format msgid "Use %s %s first." msgstr "Verwenden Sie zuerst %s %s." -#: catalog/pg_proc.c:434 +#: catalog/pg_proc.c:444 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "Der von OUT-Parametern bestimmte Zeilentyp ist verschieden." -#: catalog/pg_proc.c:478 +#: catalog/pg_proc.c:490 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "kann Name des Eingabeparameters »%s« nicht ändern" -#: catalog/pg_proc.c:505 +#: catalog/pg_proc.c:517 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "kann Parametervorgabewerte einer bestehenden Funktion nicht entfernen" -#: catalog/pg_proc.c:531 +#: catalog/pg_proc.c:543 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "kann Datentyp eines bestehenden Parametervorgabewerts nicht ändern" -#: catalog/pg_proc.c:748 +#: catalog/pg_proc.c:753 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "es gibt keine eingebaute Funktion namens %s" -#: catalog/pg_proc.c:846 +#: catalog/pg_proc.c:851 #, c-format msgid "SQL functions cannot return type %s" msgstr "SQL-Funktionen können keinen Rückgabetyp »%s« haben" -#: catalog/pg_proc.c:861 +#: catalog/pg_proc.c:866 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "SQL-Funktionen können keine Argumente vom Typ »%s« haben" -#: catalog/pg_proc.c:954 executor/functions.c:1446 +#: catalog/pg_proc.c:978 executor/functions.c:1458 #, c-format msgid "SQL function \"%s\"" msgstr "SQL-Funktion »%s«" @@ -5377,12 +5540,12 @@ msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "Relation »%s« ist schon Mitglied der Publikation »%s«" #: catalog/pg_publication.c:470 commands/publicationcmds.c:451 -#: commands/publicationcmds.c:762 +#: commands/publicationcmds.c:739 #, c-format msgid "publication \"%s\" does not exist" msgstr "Publikation »%s« existiert nicht" -#: catalog/pg_shdepend.c:776 +#: catalog/pg_shdepend.c:832 #, c-format msgid "" "\n" @@ -5397,198 +5560,233 @@ msgstr[1] "" "\n" "und Objekte in %d anderen Datenbanken (Liste im Serverlog)" -#: catalog/pg_shdepend.c:1082 +#: catalog/pg_shdepend.c:1176 #, c-format msgid "role %u was concurrently dropped" msgstr "Rolle %u wurde gleichzeitig gelöscht" -#: catalog/pg_shdepend.c:1101 +#: catalog/pg_shdepend.c:1188 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "Tablespace %u wurde gleichzeitig gelöscht" -#: catalog/pg_shdepend.c:1116 +#: catalog/pg_shdepend.c:1202 #, c-format msgid "database %u was concurrently dropped" msgstr "Datenbank %u wurde gleichzeitig gelöscht" -#: catalog/pg_shdepend.c:1161 +#: catalog/pg_shdepend.c:1247 #, c-format msgid "owner of %s" msgstr "Eigentümer von %s" -#: catalog/pg_shdepend.c:1163 +#: catalog/pg_shdepend.c:1249 #, c-format msgid "privileges for %s" msgstr "Privilegien für %s" -#: catalog/pg_shdepend.c:1165 +#: catalog/pg_shdepend.c:1251 #, c-format msgid "target of %s" msgstr "Ziel von %s" +#: catalog/pg_shdepend.c:1253 +#, c-format +msgid "tablespace for %s" +msgstr "Tablespace für %s" + #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1173 +#: catalog/pg_shdepend.c:1261 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" msgstr[0] "%d Objekt in %s" msgstr[1] "%d Objekte in %s" -#: catalog/pg_shdepend.c:1284 +#: catalog/pg_shdepend.c:1372 #, c-format msgid "cannot drop objects owned by %s because they are required by the database system" msgstr "kann Objekte, die %s gehören, nicht löschen, weil sie vom Datenbanksystem benötigt werden" -#: catalog/pg_shdepend.c:1407 +#: catalog/pg_shdepend.c:1519 #, c-format msgid "cannot reassign ownership of objects owned by %s because they are required by the database system" msgstr "kann den Eigentümer von den Objekten, die %s gehören, nicht ändern, weil die Objekte vom Datenbanksystem benötigt werden" -#: catalog/pg_subscription.c:171 commands/subscriptioncmds.c:644 -#: commands/subscriptioncmds.c:858 commands/subscriptioncmds.c:1081 +#: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:775 +#: commands/subscriptioncmds.c:1085 commands/subscriptioncmds.c:1427 #, c-format msgid "subscription \"%s\" does not exist" msgstr "Subskription »%s« existiert nicht" -#: catalog/pg_type.c:131 catalog/pg_type.c:468 +#: catalog/pg_subscription.c:432 +#, fuzzy, c-format +#| msgid "could not find function information for function \"%s\"" +msgid "could not drop relation mapping for subscription \"%s\"" +msgstr "konnte Funktionsinformationen für Funktion »%s« nicht finden" + +#: catalog/pg_subscription.c:434 +#, c-format +msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." +msgstr "" + +#. translator: first %s is a SQL ALTER command and second %s is a +#. SQL DROP command +#. +#: catalog/pg_subscription.c:440 +#, c-format +msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." +msgstr "" + +#: catalog/pg_type.c:136 catalog/pg_type.c:475 #, c-format msgid "pg_type OID value not set when in binary upgrade mode" msgstr "OID-Wert für pg_type ist im Binary-Upgrade-Modus nicht gesetzt" -#: catalog/pg_type.c:249 +#: catalog/pg_type.c:255 #, c-format msgid "invalid type internal size %d" msgstr "ungültige interne Typgröße %d" -#: catalog/pg_type.c:265 catalog/pg_type.c:273 catalog/pg_type.c:281 -#: catalog/pg_type.c:290 +#: catalog/pg_type.c:271 catalog/pg_type.c:279 catalog/pg_type.c:287 +#: catalog/pg_type.c:296 #, c-format msgid "alignment \"%c\" is invalid for passed-by-value type of size %d" msgstr "Ausrichtung »%c« ist ungültig für Typen mit Wertübergabe mit Größe %d" -#: catalog/pg_type.c:297 +#: catalog/pg_type.c:303 #, c-format msgid "internal size %d is invalid for passed-by-value type" msgstr "interne Größe %d ist ungültig für Typen mit Wertübergabe" -#: catalog/pg_type.c:307 catalog/pg_type.c:313 +#: catalog/pg_type.c:313 catalog/pg_type.c:319 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "Ausrichtung »%c« ist ungültig für Typen variabler Länge" -#: catalog/pg_type.c:321 commands/typecmds.c:3704 +#: catalog/pg_type.c:327 commands/typecmds.c:4164 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "Typen mit fester Größe müssen Storage-Typ PLAIN haben" -#: catalog/pg_type.c:839 +#: catalog/pg_type.c:816 #, c-format msgid "could not form array type name for type \"%s\"" msgstr "konnte keinen Arraytypnamen für Datentyp »%s« erzeugen" -#: catalog/storage.c:449 storage/buffer/bufmgr.c:933 +#: catalog/pg_type.c:921 +#, fuzzy, c-format +#| msgid "Failed while creating memory context \"%s\"." +msgid "Failed while creating a multirange type for type \"%s\"." +msgstr "Fehler während der Erzeugung des Speicherkontexts »%s«." + +#: catalog/pg_type.c:922 +#, c-format +msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute" +msgstr "" + +#: catalog/storage.c:450 storage/buffer/bufmgr.c:1026 #, c-format msgid "invalid page in block %u of relation %s" msgstr "ungültige Seite in Block %u von Relation %s" -#: catalog/toasting.c:106 commands/indexcmds.c:639 commands/tablecmds.c:5501 -#: commands/tablecmds.c:15387 +#: catalog/toasting.c:104 commands/indexcmds.c:667 commands/tablecmds.c:6033 +#: commands/tablecmds.c:16368 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "»%s« ist keine Tabelle oder materialisierte Sicht" -#: commands/aggregatecmds.c:171 +#: commands/aggregatecmds.c:170 #, c-format msgid "only ordered-set aggregates can be hypothetical" msgstr "nur Ordered-Set-Aggregatfunktionen können Hypothetical-Set-Aggregatfunktionen sein" -#: commands/aggregatecmds.c:196 +#: commands/aggregatecmds.c:195 #, c-format msgid "aggregate attribute \"%s\" not recognized" msgstr "Attribut »%s« für Aggregatfunktion unbekannt" -#: commands/aggregatecmds.c:206 +#: commands/aggregatecmds.c:205 #, c-format msgid "aggregate stype must be specified" msgstr "»stype« für Aggregatfunktion muss angegeben werden" -#: commands/aggregatecmds.c:210 +#: commands/aggregatecmds.c:209 #, c-format msgid "aggregate sfunc must be specified" msgstr "»sfunc« für Aggregatfunktion muss angegeben werden" -#: commands/aggregatecmds.c:222 +#: commands/aggregatecmds.c:221 #, c-format msgid "aggregate msfunc must be specified when mstype is specified" msgstr "»msfunc« für Aggregatfunktion muss angegeben werden, wenn »mstype« angegeben ist" -#: commands/aggregatecmds.c:226 +#: commands/aggregatecmds.c:225 #, c-format msgid "aggregate minvfunc must be specified when mstype is specified" msgstr "»minvfunc« für Aggregatfunktion muss angegeben werden, wenn »mstype« angegeben ist" -#: commands/aggregatecmds.c:233 +#: commands/aggregatecmds.c:232 #, c-format msgid "aggregate msfunc must not be specified without mstype" msgstr "»msfunc« für Aggregatfunktion darf nicht angegeben werden, wenn »mstype« nicht angegeben ist" -#: commands/aggregatecmds.c:237 +#: commands/aggregatecmds.c:236 #, c-format msgid "aggregate minvfunc must not be specified without mstype" msgstr "»minvfunc« für Aggregatfunktion darf nicht angegeben werden, wenn »mstype« nicht angegeben ist" -#: commands/aggregatecmds.c:241 +#: commands/aggregatecmds.c:240 #, c-format msgid "aggregate mfinalfunc must not be specified without mstype" msgstr "»mfinalfunc« für Aggregatfunktion darf nicht angegeben werden, wenn »mstype« nicht angegeben ist" -#: commands/aggregatecmds.c:245 +#: commands/aggregatecmds.c:244 #, c-format msgid "aggregate msspace must not be specified without mstype" msgstr "»msspace« für Aggregatfunktion darf nicht angegeben werden, wenn »mstype« nicht angegeben ist" -#: commands/aggregatecmds.c:249 +#: commands/aggregatecmds.c:248 #, c-format msgid "aggregate minitcond must not be specified without mstype" msgstr "»minitcond« für Aggregatfunktion darf nicht angegeben werden, wenn »mstype« nicht angegeben ist" -#: commands/aggregatecmds.c:278 +#: commands/aggregatecmds.c:277 #, c-format msgid "aggregate input type must be specified" msgstr "Eingabetyp für Aggregatfunktion muss angegeben werden" -#: commands/aggregatecmds.c:308 +#: commands/aggregatecmds.c:307 #, c-format msgid "basetype is redundant with aggregate input type specification" msgstr "Angabe »basetype« ist überflüssig bei Angabe des Eingabetyps der Aggregatfunktion" -#: commands/aggregatecmds.c:349 commands/aggregatecmds.c:390 +#: commands/aggregatecmds.c:350 commands/aggregatecmds.c:391 #, c-format msgid "aggregate transition data type cannot be %s" msgstr "Übergangsdatentyp von Aggregatfunktion kann nicht %s sein" -#: commands/aggregatecmds.c:361 +#: commands/aggregatecmds.c:362 #, c-format msgid "serialization functions may be specified only when the aggregate transition data type is %s" msgstr "Serialisierungsfunktionen dürfen nur angegeben werden, wenn der Übergangsdatentyp der Aggregatfunktion %s ist" -#: commands/aggregatecmds.c:371 +#: commands/aggregatecmds.c:372 #, c-format msgid "must specify both or neither of serialization and deserialization functions" msgstr "Serialisierungs- und Deserialisierungsfunktionen müssen zusammen angegeben werden" -#: commands/aggregatecmds.c:436 commands/functioncmds.c:615 +#: commands/aggregatecmds.c:437 commands/functioncmds.c:623 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "Parameter »parallel« muss SAFE, RESTRICTED oder UNSAFE sein" -#: commands/aggregatecmds.c:492 +#: commands/aggregatecmds.c:493 #, c-format msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "Parameter »%s« muss READ_ONLY, SHAREABLE oder READ_WRITE sein" -#: commands/alter.c:84 commands/event_trigger.c:180 +#: commands/alter.c:84 commands/event_trigger.c:174 #, c-format msgid "event trigger \"%s\" already exists" msgstr "Ereignistrigger »%s« existiert bereits" @@ -5598,12 +5796,12 @@ msgstr "Ereignistrigger »%s« existiert bereits" msgid "foreign-data wrapper \"%s\" already exists" msgstr "Fremddaten-Wrapper »%s« existiert bereits" -#: commands/alter.c:90 commands/foreigncmds.c:903 +#: commands/alter.c:90 commands/foreigncmds.c:879 #, c-format msgid "server \"%s\" already exists" msgstr "Server »%s« existiert bereits" -#: commands/alter.c:93 commands/proclang.c:132 +#: commands/alter.c:93 commands/proclang.c:133 #, c-format msgid "language \"%s\" already exists" msgstr "Sprache »%s« existiert bereits" @@ -5613,7 +5811,7 @@ msgstr "Sprache »%s« existiert bereits" msgid "publication \"%s\" already exists" msgstr "Publikation »%s« existiert bereits" -#: commands/alter.c:99 commands/subscriptioncmds.c:371 +#: commands/alter.c:99 commands/subscriptioncmds.c:398 #, c-format msgid "subscription \"%s\" already exists" msgstr "Subskription »%s« existiert bereits" @@ -5658,200 +5856,207 @@ msgstr "nur Superuser können %s umbenennen" msgid "must be superuser to set schema of %s" msgstr "nur Superuser können Schema von %s setzen" -#: commands/amcmds.c:59 +#: commands/amcmds.c:60 #, c-format msgid "permission denied to create access method \"%s\"" msgstr "keine Berechtigung, um Zugriffsmethode »%s« zu erzeugen" -#: commands/amcmds.c:61 +#: commands/amcmds.c:62 #, c-format msgid "Must be superuser to create an access method." msgstr "Nur Superuser können Zugriffsmethoden anlegen." -#: commands/amcmds.c:70 +#: commands/amcmds.c:71 #, c-format msgid "access method \"%s\" already exists" msgstr "Zugriffsmethode »%s« existiert bereits" -#: commands/amcmds.c:127 -#, c-format -msgid "must be superuser to drop access methods" -msgstr "nur Superuser können Zugriffsmethoden löschen" - -#: commands/amcmds.c:178 commands/indexcmds.c:188 commands/indexcmds.c:790 -#: commands/opclasscmds.c:373 commands/opclasscmds.c:793 +#: commands/amcmds.c:154 commands/indexcmds.c:210 commands/indexcmds.c:818 +#: commands/opclasscmds.c:370 commands/opclasscmds.c:824 #, c-format msgid "access method \"%s\" does not exist" msgstr "Zugriffsmethode »%s« existiert nicht" -#: commands/amcmds.c:267 +#: commands/amcmds.c:243 #, c-format msgid "handler function is not specified" msgstr "keine Handler-Funktion angegeben" -#: commands/amcmds.c:288 commands/event_trigger.c:189 -#: commands/foreigncmds.c:489 commands/proclang.c:79 commands/trigger.c:687 +#: commands/amcmds.c:264 commands/event_trigger.c:183 +#: commands/foreigncmds.c:489 commands/proclang.c:80 commands/trigger.c:681 #: parser/parse_clause.c:941 #, c-format msgid "function %s must return type %s" msgstr "Funktion %s muss Rückgabetyp %s haben" -#: commands/analyze.c:226 +#: commands/analyze.c:227 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "überspringe »%s« --- kann diese Fremdtabelle nicht analysieren" -#: commands/analyze.c:243 +#: commands/analyze.c:244 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "überspringe »%s« --- kann Nicht-Tabellen oder besondere Systemtabellen nicht analysieren" -#: commands/analyze.c:329 +#: commands/analyze.c:324 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "analysiere Vererbungsbaum von »%s.%s«" -#: commands/analyze.c:334 +#: commands/analyze.c:329 #, c-format msgid "analyzing \"%s.%s\"" msgstr "analysiere »%s.%s«" -#: commands/analyze.c:394 +#: commands/analyze.c:395 #, c-format msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "Spalte »%s« von Relation »%s« erscheint mehrmals" -#: commands/analyze.c:700 -#, c-format -msgid "automatic analyze of table \"%s.%s.%s\" system usage: %s" -msgstr "automatisches Analysieren von Tabelle »%s.%s.%s« Systembenutzung: %s" +#: commands/analyze.c:791 +#, fuzzy, c-format +#| msgid "automatic analyze of table \"%s.%s.%s\"" +msgid "automatic analyze of table \"%s.%s.%s\"\n" +msgstr "automatisches Analysieren der Tabelle »%s.%s.%s«" + +#: commands/analyze.c:812 +#, fuzzy, c-format +#| msgid "system usage: %s\n" +msgid "system usage: %s" +msgstr "Systembenutzung: %s\n" -#: commands/analyze.c:1169 +#: commands/analyze.c:1351 #, c-format msgid "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead rows; %d rows in sample, %.0f estimated total rows" msgstr "»%s«: %d von %u Seiten gelesen, enthalten %.0f lebende Zeilen und %.0f tote Zeilen; %d Zeilen in Stichprobe, schätzungsweise %.0f Zeilen insgesamt" -#: commands/analyze.c:1249 +#: commands/analyze.c:1431 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" msgstr "überspringe Analysieren des Vererbungsbaums »%s.%s« --- dieser Vererbungsbaum enthält keine abgeleiteten Tabellen" -#: commands/analyze.c:1347 +#: commands/analyze.c:1529 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "überspringe Analysieren des Vererbungsbaums »%s.%s« --- dieser Vererbungsbaum enthält keine analysierbaren abgeleiteten Tabellen" -#: commands/async.c:636 +#: commands/async.c:639 #, c-format msgid "channel name cannot be empty" msgstr "Kanalname kann nicht leer sein" -#: commands/async.c:642 +#: commands/async.c:645 #, c-format msgid "channel name too long" msgstr "Kanalname zu lang" -#: commands/async.c:647 +#: commands/async.c:650 #, c-format msgid "payload string too long" msgstr "Payload-Zeichenkette zu lang" -#: commands/async.c:866 +#: commands/async.c:869 #, c-format msgid "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" msgstr "PREPARE kann nicht in einer Transaktion ausgeführt werden, die LISTEN, UNLISTEN oder NOTIFY ausgeführt hat" -#: commands/async.c:972 +#: commands/async.c:975 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "zu viele Benachrichtigungen in NOTIFY-Schlange" -#: commands/async.c:1626 +#: commands/async.c:1646 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "NOTIFY-Schlange ist %.0f%% voll" -#: commands/async.c:1628 +#: commands/async.c:1648 #, c-format msgid "The server process with PID %d is among those with the oldest transactions." msgstr "Der Serverprozess mit PID %d gehört zu denen mit den ältesten Transaktionen." -#: commands/async.c:1631 +#: commands/async.c:1651 #, c-format msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." msgstr "Die NOTIFY-Schlange kann erst geleert werden, wenn dieser Prozess seine aktuelle Transaktion beendet." -#: commands/cluster.c:125 commands/cluster.c:362 +#: commands/cluster.c:119 +#, c-format +msgid "unrecognized CLUSTER option \"%s\"" +msgstr "unbekannte CLUSTER-Option »%s«" + +#: commands/cluster.c:147 commands/cluster.c:386 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "kann temporäre Tabellen anderer Sitzungen nicht clustern" -#: commands/cluster.c:133 +#: commands/cluster.c:155 #, c-format msgid "cannot cluster a partitioned table" msgstr "eine partitionierte Tabelle kann nicht geclustert werden" -#: commands/cluster.c:151 +#: commands/cluster.c:173 #, c-format msgid "there is no previously clustered index for table \"%s\"" msgstr "es gibt keinen bereits geclusterten Index für Tabelle »%s«" -#: commands/cluster.c:165 commands/tablecmds.c:12664 commands/tablecmds.c:14470 +#: commands/cluster.c:187 commands/tablecmds.c:13524 commands/tablecmds.c:15392 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "Index »%s« für Tabelle »%s« existiert nicht" -#: commands/cluster.c:351 +#: commands/cluster.c:375 #, c-format msgid "cannot cluster a shared catalog" msgstr "globaler Katalog kann nicht geclustert werden" -#: commands/cluster.c:366 +#: commands/cluster.c:390 #, c-format msgid "cannot vacuum temporary tables of other sessions" msgstr "temporäre Tabellen anderer Sitzungen können nicht gevacuumt werden" -#: commands/cluster.c:432 commands/tablecmds.c:14480 +#: commands/cluster.c:456 commands/tablecmds.c:15402 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "»%s« ist kein Index für Tabelle »%s«" -#: commands/cluster.c:440 +#: commands/cluster.c:464 #, c-format msgid "cannot cluster on index \"%s\" because access method does not support clustering" msgstr "kann nicht anhand des Index »%s« clustern, weil die Indexmethode Clustern nicht unterstützt" -#: commands/cluster.c:452 +#: commands/cluster.c:476 #, c-format msgid "cannot cluster on partial index \"%s\"" msgstr "kann nicht anhand des partiellen Index »%s« clustern" -#: commands/cluster.c:466 +#: commands/cluster.c:490 #, c-format msgid "cannot cluster on invalid index \"%s\"" msgstr "kann nicht anhand des ungültigen Index »%s« clustern" -#: commands/cluster.c:490 +#: commands/cluster.c:514 #, c-format msgid "cannot mark index clustered in partitioned table" msgstr "ein Index kann nicht als anhand einer partitionierten Tabelle geclustert markiert werden" -#: commands/cluster.c:863 +#: commands/cluster.c:887 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr "clustere »%s.%s« durch Index-Scan von »%s«" -#: commands/cluster.c:869 +#: commands/cluster.c:893 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "clustere »%s.%s« durch sequenziellen Scan und Sortieren" -#: commands/cluster.c:900 +#: commands/cluster.c:924 #, c-format msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" msgstr "»%s«: %.0f entfernbare, %.0f nicht entfernbare Zeilenversionen in %u Seiten gefunden" -#: commands/cluster.c:904 +#: commands/cluster.c:928 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -5860,73 +6065,75 @@ msgstr "" "%.0f tote Zeilenversionen können noch nicht entfernt werden.\n" "%s." -#: commands/collationcmds.c:105 +#: commands/collationcmds.c:106 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "Attribut »%s« für Sortierfolge unbekannt" -#: commands/collationcmds.c:148 +#: commands/collationcmds.c:149 #, c-format msgid "collation \"default\" cannot be copied" msgstr "Sortierfolge »default« kann nicht kopiert werden" -#: commands/collationcmds.c:181 +#: commands/collationcmds.c:182 #, c-format msgid "unrecognized collation provider: %s" msgstr "unbekannter Sortierfolgen-Provider: %s" -#: commands/collationcmds.c:190 +#: commands/collationcmds.c:191 #, c-format msgid "parameter \"lc_collate\" must be specified" msgstr "Parameter »lc_collate« muss angegeben werden" -#: commands/collationcmds.c:195 +#: commands/collationcmds.c:196 #, c-format msgid "parameter \"lc_ctype\" must be specified" msgstr "Parameter »lc_ctype« muss angegeben werden" -#: commands/collationcmds.c:205 +#: commands/collationcmds.c:206 #, c-format msgid "nondeterministic collations not supported with this provider" msgstr "nichtdeterministische Sortierfolgen werden von diesem Provider nicht unterstützt" -#: commands/collationcmds.c:265 +#: commands/collationcmds.c:266 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "Sortierfolge »%s« für Kodierung »%s« existiert bereits in Schema »%s«" -#: commands/collationcmds.c:276 +#: commands/collationcmds.c:277 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "Sortierfolge »%s« existiert bereits in Schema »%s«" -#: commands/collationcmds.c:324 -#, c-format +#: commands/collationcmds.c:325 +#, fuzzy, c-format +#| msgid "cast from %s to %s" msgid "changing version from %s to %s" -msgstr "Version wird von %s in %s geändert" +msgstr "Typumwandlung von %s in %s" -#: commands/collationcmds.c:339 -#, c-format +#: commands/collationcmds.c:340 +#, fuzzy, c-format +#| msgid "proto_version \"%s\" out of range" msgid "version has not changed" -msgstr "Version hat sich nicht geändert" +msgstr "proto_version »%s« ist außerhalb des gültigen Bereichs" -#: commands/collationcmds.c:470 +#: commands/collationcmds.c:454 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "konnte Locale-Namen »%s« nicht in Sprach-Tag umwandeln: %s" -#: commands/collationcmds.c:531 +#: commands/collationcmds.c:512 #, c-format msgid "must be superuser to import system collations" msgstr "nur Superuser können Systemsortierfolgen importieren" -#: commands/collationcmds.c:554 commands/copy.c:1899 commands/copy.c:3485 +#: commands/collationcmds.c:540 commands/copyfrom.c:1500 commands/copyto.c:688 #: libpq/be-secure-common.c:81 #, c-format msgid "could not execute command \"%s\": %m" msgstr "konnte Befehl »%s« nicht ausführen: %m" -#: commands/collationcmds.c:685 +#: commands/collationcmds.c:671 #, c-format msgid "no usable system locales were found" msgstr "keine brauchbaren System-Locales gefunden" @@ -5934,23 +6141,23 @@ msgstr "keine brauchbaren System-Locales gefunden" #: commands/comment.c:61 commands/dbcommands.c:841 commands/dbcommands.c:1037 #: commands/dbcommands.c:1150 commands/dbcommands.c:1340 #: commands/dbcommands.c:1588 commands/dbcommands.c:1702 -#: commands/dbcommands.c:2142 utils/init/postinit.c:888 -#: utils/init/postinit.c:993 utils/init/postinit.c:1010 +#: commands/dbcommands.c:2142 utils/init/postinit.c:887 +#: utils/init/postinit.c:992 utils/init/postinit.c:1009 #, c-format msgid "database \"%s\" does not exist" msgstr "Datenbank »%s« existiert nicht" -#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:955 +#: commands/comment.c:101 commands/seclabel.c:191 parser/parse_utilcmd.c:989 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" msgstr "»%s« ist weder Tabelle, Sicht, materialisierte Sicht, zusammengesetzter Typ noch Fremdtabelle" -#: commands/constraint.c:63 utils/adt/ri_triggers.c:1913 +#: commands/constraint.c:63 utils/adt/ri_triggers.c:1948 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "Funktion »%s« wurde nicht von Triggermanager aufgerufen" -#: commands/constraint.c:70 utils/adt/ri_triggers.c:1922 +#: commands/constraint.c:70 utils/adt/ri_triggers.c:1957 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "Funktion »%s« muss AFTER ROW ausgelöst werden" @@ -5960,555 +6167,551 @@ msgstr "Funktion »%s« muss AFTER ROW ausgelöst werden" msgid "function \"%s\" must be fired for INSERT or UPDATE" msgstr "Funktion »%s« muss von INSERT oder UPDATE ausgelöst werden" -#: commands/conversioncmds.c:66 +#: commands/conversioncmds.c:67 #, c-format msgid "source encoding \"%s\" does not exist" msgstr "Quellkodierung »%s« existiert nicht" -#: commands/conversioncmds.c:73 +#: commands/conversioncmds.c:74 #, c-format msgid "destination encoding \"%s\" does not exist" msgstr "Zielkodierung »%s« existiert nicht" -#: commands/conversioncmds.c:86 -#, fuzzy, c-format -#| msgid "encoding conversion from %s to ASCII not supported" +#: commands/conversioncmds.c:87 +#, c-format msgid "encoding conversion to or from \"SQL_ASCII\" is not supported" -msgstr "Kodierungsumwandlung zwischen %s und ASCII wird nicht unterstützt" +msgstr "Kodierungsumwandlung nach oder von »SQL_ASCII« wird nicht unterstützt" -#: commands/conversioncmds.c:99 +#: commands/conversioncmds.c:100 #, c-format msgid "encoding conversion function %s must return type %s" msgstr "Kodierungskonversionsfunktion %s muss Typ %s zurückgeben" -#: commands/copy.c:426 commands/copy.c:460 -#, c-format -msgid "COPY BINARY is not supported to stdout or from stdin" -msgstr "COPY BINARY mit STDOUT oder STDIN wird nicht unterstützt" - -#: commands/copy.c:560 -#, c-format -msgid "could not write to COPY program: %m" -msgstr "konnte nicht zum COPY-Programm schreiben: %m" - -#: commands/copy.c:565 -#, c-format -msgid "could not write to COPY file: %m" -msgstr "konnte nicht in COPY-Datei schreiben: %m" - -#: commands/copy.c:578 -#, c-format -msgid "connection lost during COPY to stdout" -msgstr "Verbindung während COPY nach STDOUT verloren" - -#: commands/copy.c:622 -#, c-format -msgid "could not read from COPY file: %m" -msgstr "konnte nicht aus COPY-Datei lesen: %m" - -#: commands/copy.c:640 commands/copy.c:661 commands/copy.c:665 -#: tcop/postgres.c:344 tcop/postgres.c:380 tcop/postgres.c:407 -#, c-format -msgid "unexpected EOF on client connection with an open transaction" -msgstr "unerwartetes EOF auf Client-Verbindung mit einer offenen Transaktion" - -#: commands/copy.c:678 -#, c-format -msgid "COPY from stdin failed: %s" -msgstr "COPY FROM STDIN fehlgeschlagen: %s" - -#: commands/copy.c:694 -#, c-format -msgid "unexpected message type 0x%02X during COPY from stdin" -msgstr "unerwarteter Messagetyp 0x%02X während COPY FROM STDIN" +#: commands/conversioncmds.c:130 +#, fuzzy, c-format +#| msgid "encoding conversion function %s must return type %s" +msgid "encoding conversion function %s returned incorrect result for empty input" +msgstr "Kodierungskonversionsfunktion %s muss Typ %s zurückgeben" -#: commands/copy.c:861 +#: commands/copy.c:86 #, c-format msgid "must be superuser or a member of the pg_execute_server_program role to COPY to or from an external program" msgstr "nur Superuser oder Mitglieder von pg_execute_server_program können COPY mit externen Programmen verwenden" -#: commands/copy.c:862 commands/copy.c:871 commands/copy.c:878 +#: commands/copy.c:87 commands/copy.c:96 commands/copy.c:103 #, c-format msgid "Anyone can COPY to stdout or from stdin. psql's \\copy command also works for anyone." msgstr "Jeder kann COPY mit STDOUT oder STDIN verwenden. Der Befehl \\copy in psql funktioniert auch für jeden." -#: commands/copy.c:870 +#: commands/copy.c:95 #, c-format msgid "must be superuser or a member of the pg_read_server_files role to COPY from a file" msgstr "nur Superuser oder Mitglieder von pg_read_server_files können mit COPY aus einer Datei lesen" -#: commands/copy.c:877 +#: commands/copy.c:102 #, c-format msgid "must be superuser or a member of the pg_write_server_files role to COPY to a file" msgstr "nur Superuser oder Mitglieder von pg_write_server_files können mit COPY in eine Datei schreiben" -#: commands/copy.c:963 +#: commands/copy.c:188 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM wird nicht unterstützt mit Sicherheit auf Zeilenebene" -#: commands/copy.c:964 +#: commands/copy.c:189 #, c-format msgid "Use INSERT statements instead." msgstr "Verwenden Sie stattdessen INSERT-Anweisungen." -#: commands/copy.c:1151 +#: commands/copy.c:374 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "COPY-Format »%s« nicht erkannt" -#: commands/copy.c:1222 commands/copy.c:1238 commands/copy.c:1253 -#: commands/copy.c:1275 +#: commands/copy.c:447 commands/copy.c:463 commands/copy.c:478 +#: commands/copy.c:500 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "Argument von Option »%s« muss eine Liste aus Spaltennamen sein" -#: commands/copy.c:1290 +#: commands/copy.c:515 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "Argument von Option »%s« muss ein gültiger Kodierungsname sein" -#: commands/copy.c:1297 commands/dbcommands.c:253 commands/dbcommands.c:1536 +#: commands/copy.c:522 commands/dbcommands.c:253 commands/dbcommands.c:1536 #, c-format msgid "option \"%s\" not recognized" msgstr "Option »%s« nicht erkannt" -#: commands/copy.c:1309 +#: commands/copy.c:534 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "DELIMITER kann nicht im BINARY-Modus angegeben werden" -#: commands/copy.c:1314 +#: commands/copy.c:539 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "NULL kann nicht im BINARY-Modus angegeben werden" -#: commands/copy.c:1336 +#: commands/copy.c:561 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "DELIMITER für COPY muss ein einzelnes Ein-Byte-Zeichen sein" -#: commands/copy.c:1343 +#: commands/copy.c:568 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "COPY-Trennzeichen kann nicht Newline oder Carriage Return sein" -#: commands/copy.c:1349 +#: commands/copy.c:574 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "COPY NULL-Darstellung kann nicht Newline oder Carriage Return enthalten" -#: commands/copy.c:1366 +#: commands/copy.c:591 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "DELIMITER für COPY darf nicht »%s« sein" -#: commands/copy.c:1372 +#: commands/copy.c:597 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "COPY HEADER ist nur im CSV-Modus verfügbar" -#: commands/copy.c:1378 +#: commands/copy.c:603 #, c-format msgid "COPY quote available only in CSV mode" msgstr "Quote-Zeichen für COPY ist nur im CSV-Modus verfügbar" -#: commands/copy.c:1383 +#: commands/copy.c:608 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "Quote-Zeichen für COPY muss ein einzelnes Ein-Byte-Zeichen sein" -#: commands/copy.c:1388 +#: commands/copy.c:613 #, c-format msgid "COPY delimiter and quote must be different" msgstr "DELIMITER und QUOTE für COPY müssen verschieden sein" -#: commands/copy.c:1394 +#: commands/copy.c:619 #, c-format msgid "COPY escape available only in CSV mode" msgstr "Escape-Zeichen für COPY ist nur im CSV-Modus verfügbar" -#: commands/copy.c:1399 +#: commands/copy.c:624 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "Escape-Zeichen für COPY muss ein einzelnes Ein-Byte-Zeichen sein" -#: commands/copy.c:1405 +#: commands/copy.c:630 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "FORCE_QUOTE für COPY ist nur im CSV-Modus verfügbar" -#: commands/copy.c:1409 +#: commands/copy.c:634 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "FORCE_QUOTE ist nur bei COPY TO verfügbar" -#: commands/copy.c:1415 +#: commands/copy.c:640 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "FORCE_NOT_NULL für COPY ist nur im CSV-Modus verfügbar" -#: commands/copy.c:1419 +#: commands/copy.c:644 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "FORCE_NOT_NULL ist nur bei COPY FROM verfügbar" -#: commands/copy.c:1425 +#: commands/copy.c:650 #, c-format msgid "COPY force null available only in CSV mode" msgstr "FORCE_NULL für COPY ist nur im CSV-Modus verfügbar" -#: commands/copy.c:1430 +#: commands/copy.c:655 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "FORCE_NULL ist nur bei COPY FROM verfügbar" -#: commands/copy.c:1436 +#: commands/copy.c:661 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "Trennzeichen für COPY darf nicht in der NULL-Darstellung erscheinen" -#: commands/copy.c:1443 +#: commands/copy.c:668 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "CSV-Quote-Zeichen darf nicht in der NULL-Darstellung erscheinen" -#: commands/copy.c:1529 +#: commands/copy.c:729 #, c-format -msgid "DO INSTEAD NOTHING rules are not supported for COPY" -msgstr "DO-INSTEAD-NOTHING-Regeln werden für COPY nicht unterstützt" +msgid "column \"%s\" is a generated column" +msgstr "Spalte »%s« ist eine generierte Spalte" -#: commands/copy.c:1543 +#: commands/copy.c:731 #, c-format -msgid "conditional DO INSTEAD rules are not supported for COPY" -msgstr "DO-INSTEAD-Regeln mit Bedingung werden für COPY nicht unterstützt" +msgid "Generated columns cannot be used in COPY." +msgstr "Generierte Spalten können nicht in COPY verwendet werden." -#: commands/copy.c:1547 +#: commands/copy.c:746 commands/indexcmds.c:1754 commands/statscmds.c:250 +#: commands/tablecmds.c:2374 commands/tablecmds.c:3030 +#: commands/tablecmds.c:3523 parser/parse_relation.c:3593 +#: parser/parse_relation.c:3613 utils/adt/tsvector_op.c:2680 #, c-format -msgid "DO ALSO rules are not supported for the COPY" -msgstr "DO-ALSO-Regeln werden für COPY nicht unterstützt" +msgid "column \"%s\" does not exist" +msgstr "Spalte »%s« existiert nicht" -#: commands/copy.c:1552 +#: commands/copy.c:753 commands/tablecmds.c:2400 commands/trigger.c:933 +#: parser/parse_target.c:1080 parser/parse_target.c:1091 #, c-format -msgid "multi-statement DO INSTEAD rules are not supported for COPY" -msgstr "DO-INSTEAD-Regeln mit mehreren Anweisungen werden für COPY nicht unterstützt" +msgid "column \"%s\" specified more than once" +msgstr "Spalte »%s« mehrmals angegeben" -#: commands/copy.c:1562 +#: commands/copyfrom.c:127 #, c-format -msgid "COPY (SELECT INTO) is not supported" -msgstr "COPY (SELECT INTO) wird nicht unterstützt" +msgid "COPY %s, line %s, column %s" +msgstr "COPY %s, Zeile %s, Spalte %s" -#: commands/copy.c:1579 +#: commands/copyfrom.c:131 commands/copyfrom.c:172 #, c-format -msgid "COPY query must have a RETURNING clause" -msgstr "COPY-Anfrage muss eine RETURNING-Klausel haben" +msgid "COPY %s, line %s" +msgstr "COPY %s, Zeile %s" -#: commands/copy.c:1608 +#: commands/copyfrom.c:142 #, c-format -msgid "relation referenced by COPY statement has changed" -msgstr "die von der COPY-Anweisung verwendete Relation hat sich geändert" +msgid "COPY %s, line %s, column %s: \"%s\"" +msgstr "COPY %s, Zeile %s, Spalte %s: »%s«" -#: commands/copy.c:1667 +#: commands/copyfrom.c:150 #, c-format -msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" -msgstr "FORCE_QUOTE-Spalte »%s« wird von COPY nicht verwendet" +msgid "COPY %s, line %s, column %s: null input" +msgstr "COPY %s, Zeile %s, Spalte %s: NULL Eingabe" -#: commands/copy.c:1690 +#: commands/copyfrom.c:166 #, c-format -msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" -msgstr "Spalte »%s« mit FORCE_NOT_NULL wird von COPY nicht verwendet" +msgid "COPY %s, line %s: \"%s\"" +msgstr "COPY %s, Zeile %s: »%s«" -#: commands/copy.c:1713 +#: commands/copyfrom.c:566 #, c-format -msgid "FORCE_NULL column \"%s\" not referenced by COPY" -msgstr "Spalte »%s« mit FORCE_NULL wird von COPY nicht verwendet" +msgid "cannot copy to view \"%s\"" +msgstr "kann nicht in Sicht »%s« kopieren" -#: commands/copy.c:1779 libpq/be-secure-common.c:105 +#: commands/copyfrom.c:568 #, c-format -msgid "could not close pipe to external command: %m" -msgstr "konnte Pipe zu externem Programm nicht schließen: %m" +msgid "To enable copying to a view, provide an INSTEAD OF INSERT trigger." +msgstr "Um Kopieren in eine Sicht zu ermöglichen, richten Sie einen INSTEAD OF INSERT Trigger ein." -#: commands/copy.c:1794 +#: commands/copyfrom.c:572 #, c-format -msgid "program \"%s\" failed" -msgstr "Programm »%s« fehlgeschlagen" +msgid "cannot copy to materialized view \"%s\"" +msgstr "kann nicht in materialisierte Sicht »%s« kopieren" -#: commands/copy.c:1845 +#: commands/copyfrom.c:577 #, c-format -msgid "cannot copy from view \"%s\"" -msgstr "kann nicht aus Sicht »%s« kopieren" +msgid "cannot copy to sequence \"%s\"" +msgstr "kann nicht in Sequenz »%s« kopieren" -#: commands/copy.c:1847 commands/copy.c:1853 commands/copy.c:1859 -#: commands/copy.c:1870 +#: commands/copyfrom.c:582 #, c-format -msgid "Try the COPY (SELECT ...) TO variant." -msgstr "Versuchen Sie die Variante COPY (SELECT ...) TO." +msgid "cannot copy to non-table relation \"%s\"" +msgstr "kann nicht in Relation »%s« kopieren, die keine Tabelle ist" -#: commands/copy.c:1851 +#: commands/copyfrom.c:622 #, c-format -msgid "cannot copy from materialized view \"%s\"" -msgstr "kann nicht aus materialisierter Sicht »%s« kopieren" +msgid "cannot perform COPY FREEZE on a partitioned table" +msgstr "COPY FREEZE kann nicht in einer partitionierten Tabelle durchgeführt werden" -#: commands/copy.c:1857 +#: commands/copyfrom.c:637 #, c-format -msgid "cannot copy from foreign table \"%s\"" -msgstr "kann nicht aus Fremdtabelle »%s« kopieren" +msgid "cannot perform COPY FREEZE because of prior transaction activity" +msgstr "COPY FREEZE kann nicht durchgeführt werden wegen vorheriger Aktivität in dieser Transaktion" -#: commands/copy.c:1863 +#: commands/copyfrom.c:643 #, c-format -msgid "cannot copy from sequence \"%s\"" -msgstr "kann nicht aus Sequenz »%s« kopieren" +msgid "cannot perform COPY FREEZE because the table was not created or truncated in the current subtransaction" +msgstr "COPY FREEZE kann nicht durchgeführt werden, weil die Tabelle nicht in der aktuellen Transaktion erzeugt oder geleert wurde" -#: commands/copy.c:1868 +#: commands/copyfrom.c:1264 commands/copyto.c:618 #, c-format -msgid "cannot copy from partitioned table \"%s\"" -msgstr "kann nicht aus partitionierter Tabelle »%s« kopieren" +msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" +msgstr "Spalte »%s« mit FORCE_NOT_NULL wird von COPY nicht verwendet" -#: commands/copy.c:1874 +#: commands/copyfrom.c:1287 commands/copyto.c:641 #, c-format -msgid "cannot copy from non-table relation \"%s\"" -msgstr "kann nicht aus Relation »%s«, die keine Tabelle ist, kopieren" +msgid "FORCE_NULL column \"%s\" not referenced by COPY" +msgstr "Spalte »%s« mit FORCE_NULL wird von COPY nicht verwendet" -#: commands/copy.c:1914 +#: commands/copyfrom.c:1519 #, c-format -msgid "relative path not allowed for COPY to file" -msgstr "relativer Pfad bei COPY in Datei nicht erlaubt" +msgid "COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \\copy." +msgstr "Mit COPY FROM liest der PostgreSQL-Serverprozess eine Datei. Möglicherweise möchten Sie Funktionalität auf Client-Seite verwenden, wie zum Beispiel \\copy in psql." -#: commands/copy.c:1933 +#: commands/copyfrom.c:1532 commands/copyto.c:740 #, c-format -msgid "could not open file \"%s\" for writing: %m" -msgstr "konnte Datei »%s« nicht zum Schreiben öffnen: %m" +msgid "\"%s\" is a directory" +msgstr "»%s« ist ein Verzeichnis" -#: commands/copy.c:1936 +#: commands/copyfrom.c:1600 commands/copyto.c:302 libpq/be-secure-common.c:105 #, c-format -msgid "COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \\copy." -msgstr "Mit COPY TO schreibt der PostgreSQL-Serverprozess eine Datei. Möglicherweise möchten Sie Funktionalität auf Client-Seite verwenden, wie zum Beispiel \\copy in psql." - -#: commands/copy.c:1949 commands/copy.c:3516 -#, c-format -msgid "\"%s\" is a directory" -msgstr "»%s« ist ein Verzeichnis" - -#: commands/copy.c:2251 -#, c-format -msgid "COPY %s, line %s, column %s" -msgstr "COPY %s, Zeile %s, Spalte %s" - -#: commands/copy.c:2255 commands/copy.c:2302 -#, c-format -msgid "COPY %s, line %s" -msgstr "COPY %s, Zeile %s" - -#: commands/copy.c:2266 -#, c-format -msgid "COPY %s, line %s, column %s: \"%s\"" -msgstr "COPY %s, Zeile %s, Spalte %s: »%s«" - -#: commands/copy.c:2274 -#, c-format -msgid "COPY %s, line %s, column %s: null input" -msgstr "COPY %s, Zeile %s, Spalte %s: NULL Eingabe" - -#: commands/copy.c:2296 -#, c-format -msgid "COPY %s, line %s: \"%s\"" -msgstr "COPY %s, Zeile %s: »%s«" - -#: commands/copy.c:2697 -#, c-format -msgid "cannot copy to view \"%s\"" -msgstr "kann nicht in Sicht »%s« kopieren" - -#: commands/copy.c:2699 -#, c-format -msgid "To enable copying to a view, provide an INSTEAD OF INSERT trigger." -msgstr "Um Kopieren in eine Sicht zu ermöglichen, richten Sie einen INSTEAD OF INSERT Trigger ein." - -#: commands/copy.c:2703 -#, c-format -msgid "cannot copy to materialized view \"%s\"" -msgstr "kann nicht in materialisierte Sicht »%s« kopieren" - -#: commands/copy.c:2708 -#, c-format -msgid "cannot copy to sequence \"%s\"" -msgstr "kann nicht in Sequenz »%s« kopieren" - -#: commands/copy.c:2713 -#, c-format -msgid "cannot copy to non-table relation \"%s\"" -msgstr "kann nicht in Relation »%s« kopieren, die keine Tabelle ist" - -#: commands/copy.c:2753 -#, c-format -msgid "cannot perform COPY FREEZE on a partitioned table" -msgstr "COPY FREEZE kann nicht in einer partitionierten Tabelle durchgeführt werden" - -#: commands/copy.c:2768 -#, c-format -msgid "cannot perform COPY FREEZE because of prior transaction activity" -msgstr "COPY FREEZE kann nicht durchgeführt werden wegen vorheriger Aktivität in dieser Transaktion" - -#: commands/copy.c:2774 -#, c-format -msgid "cannot perform COPY FREEZE because the table was not created or truncated in the current subtransaction" -msgstr "COPY FREEZE kann nicht durchgeführt werden, weil die Tabelle nicht in der aktuellen Transaktion erzeugt oder geleert wurde" +msgid "could not close pipe to external command: %m" +msgstr "konnte Pipe zu externem Programm nicht schließen: %m" -#: commands/copy.c:3503 +#: commands/copyfrom.c:1615 commands/copyto.c:307 #, c-format -msgid "COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \\copy." -msgstr "Mit COPY FROM liest der PostgreSQL-Serverprozess eine Datei. Möglicherweise möchten Sie Funktionalität auf Client-Seite verwenden, wie zum Beispiel \\copy in psql." +msgid "program \"%s\" failed" +msgstr "Programm »%s« fehlgeschlagen" -#: commands/copy.c:3531 +#: commands/copyfromparse.c:199 #, c-format msgid "COPY file signature not recognized" msgstr "COPY-Datei-Signatur nicht erkannt" -#: commands/copy.c:3536 +#: commands/copyfromparse.c:204 #, c-format msgid "invalid COPY file header (missing flags)" msgstr "ungültiger COPY-Dateikopf (Flags fehlen)" -#: commands/copy.c:3540 +#: commands/copyfromparse.c:208 #, c-format msgid "invalid COPY file header (WITH OIDS)" msgstr "ungültiger COPY-Dateikopf (WITH OIDS)" -#: commands/copy.c:3545 +#: commands/copyfromparse.c:213 #, c-format msgid "unrecognized critical flags in COPY file header" msgstr "unbekannte kritische Flags im COPY-Dateikopf" -#: commands/copy.c:3551 +#: commands/copyfromparse.c:219 #, c-format msgid "invalid COPY file header (missing length)" msgstr "ungültiger COPY-Dateikopf (Länge fehlt)" -#: commands/copy.c:3558 +#: commands/copyfromparse.c:226 #, c-format msgid "invalid COPY file header (wrong length)" msgstr "ungültiger COPY-Dateikopf (falsche Länge)" -#: commands/copy.c:3677 commands/copy.c:4342 commands/copy.c:4572 +#: commands/copyfromparse.c:255 +#, c-format +msgid "could not read from COPY file: %m" +msgstr "konnte nicht aus COPY-Datei lesen: %m" + +#: commands/copyfromparse.c:277 commands/copyfromparse.c:302 +#: tcop/postgres.c:360 +#, c-format +msgid "unexpected EOF on client connection with an open transaction" +msgstr "unerwartetes EOF auf Client-Verbindung mit einer offenen Transaktion" + +#: commands/copyfromparse.c:293 +#, c-format +msgid "unexpected message type 0x%02X during COPY from stdin" +msgstr "unerwarteter Messagetyp 0x%02X während COPY FROM STDIN" + +#: commands/copyfromparse.c:316 +#, c-format +msgid "COPY from stdin failed: %s" +msgstr "COPY FROM STDIN fehlgeschlagen: %s" + +#: commands/copyfromparse.c:841 commands/copyfromparse.c:1451 +#: commands/copyfromparse.c:1681 #, c-format msgid "extra data after last expected column" msgstr "zusätzliche Daten nach letzter erwarteter Spalte" -#: commands/copy.c:3691 +#: commands/copyfromparse.c:855 #, c-format msgid "missing data for column \"%s\"" msgstr "fehlende Daten für Spalte »%s«" -#: commands/copy.c:3774 +#: commands/copyfromparse.c:933 #, c-format msgid "received copy data after EOF marker" msgstr "COPY-Daten nach EOF-Markierung empfangen" -#: commands/copy.c:3781 +#: commands/copyfromparse.c:940 #, c-format msgid "row field count is %d, expected %d" msgstr "Feldanzahl in Zeile ist %d, erwartet wurden %d" -#: commands/copy.c:4101 commands/copy.c:4118 +#: commands/copyfromparse.c:1233 commands/copyfromparse.c:1250 #, c-format msgid "literal carriage return found in data" msgstr "Carriage-Return-Zeichen in Daten gefunden" -#: commands/copy.c:4102 commands/copy.c:4119 +#: commands/copyfromparse.c:1234 commands/copyfromparse.c:1251 #, c-format msgid "unquoted carriage return found in data" msgstr "ungequotetes Carriage-Return-Zeichen in Daten gefunden" -#: commands/copy.c:4104 commands/copy.c:4121 +#: commands/copyfromparse.c:1236 commands/copyfromparse.c:1253 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "Verwenden Sie »\\r«, um ein Carriage-Return-Zeichen darzustellen." -#: commands/copy.c:4105 commands/copy.c:4122 +#: commands/copyfromparse.c:1237 commands/copyfromparse.c:1254 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "Verwenden Sie ein gequotetes CSV-Feld, um ein Carriage-Return-Zeichen darzustellen." -#: commands/copy.c:4134 +#: commands/copyfromparse.c:1266 #, c-format msgid "literal newline found in data" msgstr "Newline-Zeichen in Daten gefunden" -#: commands/copy.c:4135 +#: commands/copyfromparse.c:1267 #, c-format msgid "unquoted newline found in data" msgstr "ungequotetes Newline-Zeichen in Daten gefunden" -#: commands/copy.c:4137 +#: commands/copyfromparse.c:1269 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "Verwenden Sie »\\n«, um ein Newline-Zeichen darzustellen." -#: commands/copy.c:4138 +#: commands/copyfromparse.c:1270 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "Verwenden Sie ein gequotetes CSV-Feld, um ein Newline-Zeichen darzustellen." -#: commands/copy.c:4184 commands/copy.c:4220 +#: commands/copyfromparse.c:1316 commands/copyfromparse.c:1352 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "COPY-Ende-Markierung stimmt nicht mit vorherigem Newline-Stil überein" -#: commands/copy.c:4193 commands/copy.c:4209 +#: commands/copyfromparse.c:1325 commands/copyfromparse.c:1341 #, c-format msgid "end-of-copy marker corrupt" msgstr "COPY-Ende-Markierung verfälscht" -#: commands/copy.c:4656 +#: commands/copyfromparse.c:1765 #, c-format msgid "unterminated CSV quoted field" msgstr "Quotes in CSV-Feld nicht abgeschlossen" -#: commands/copy.c:4733 commands/copy.c:4752 +#: commands/copyfromparse.c:1841 commands/copyfromparse.c:1860 #, c-format msgid "unexpected EOF in COPY data" msgstr "unerwartetes EOF in COPY-Daten" -#: commands/copy.c:4742 +#: commands/copyfromparse.c:1850 #, c-format msgid "invalid field size" msgstr "ungültige Feldgröße" -#: commands/copy.c:4765 +#: commands/copyfromparse.c:1873 #, c-format msgid "incorrect binary data format" msgstr "falsches Binärdatenformat" -#: commands/copy.c:5073 +#: commands/copyto.c:235 #, c-format -msgid "column \"%s\" is a generated column" -msgstr "Spalte »%s« ist eine generierte Spalte" +msgid "could not write to COPY program: %m" +msgstr "konnte nicht zum COPY-Programm schreiben: %m" -#: commands/copy.c:5075 +#: commands/copyto.c:240 #, c-format -msgid "Generated columns cannot be used in COPY." -msgstr "Generierte Spalten können nicht in COPY verwendet werden." +msgid "could not write to COPY file: %m" +msgstr "konnte nicht in COPY-Datei schreiben: %m" -#: commands/copy.c:5090 commands/indexcmds.c:1700 commands/statscmds.c:217 -#: commands/tablecmds.c:2163 commands/tablecmds.c:2696 -#: commands/tablecmds.c:3075 parser/parse_relation.c:3507 -#: parser/parse_relation.c:3527 utils/adt/tsvector_op.c:2519 +#: commands/copyto.c:370 #, c-format -msgid "column \"%s\" does not exist" -msgstr "Spalte »%s« existiert nicht" +msgid "cannot copy from view \"%s\"" +msgstr "kann nicht aus Sicht »%s« kopieren" -#: commands/copy.c:5097 commands/tablecmds.c:2189 commands/trigger.c:885 -#: parser/parse_target.c:1052 parser/parse_target.c:1063 +#: commands/copyto.c:372 commands/copyto.c:378 commands/copyto.c:384 +#: commands/copyto.c:395 #, c-format -msgid "column \"%s\" specified more than once" -msgstr "Spalte »%s« mehrmals angegeben" +msgid "Try the COPY (SELECT ...) TO variant." +msgstr "Versuchen Sie die Variante COPY (SELECT ...) TO." + +#: commands/copyto.c:376 +#, c-format +msgid "cannot copy from materialized view \"%s\"" +msgstr "kann nicht aus materialisierter Sicht »%s« kopieren" + +#: commands/copyto.c:382 +#, c-format +msgid "cannot copy from foreign table \"%s\"" +msgstr "kann nicht aus Fremdtabelle »%s« kopieren" + +#: commands/copyto.c:388 +#, c-format +msgid "cannot copy from sequence \"%s\"" +msgstr "kann nicht aus Sequenz »%s« kopieren" + +#: commands/copyto.c:393 +#, c-format +msgid "cannot copy from partitioned table \"%s\"" +msgstr "kann nicht aus partitionierter Tabelle »%s« kopieren" + +#: commands/copyto.c:399 +#, c-format +msgid "cannot copy from non-table relation \"%s\"" +msgstr "kann nicht aus Relation »%s«, die keine Tabelle ist, kopieren" + +#: commands/copyto.c:457 +#, c-format +msgid "DO INSTEAD NOTHING rules are not supported for COPY" +msgstr "DO-INSTEAD-NOTHING-Regeln werden für COPY nicht unterstützt" -#: commands/createas.c:215 commands/createas.c:497 +#: commands/copyto.c:471 +#, c-format +msgid "conditional DO INSTEAD rules are not supported for COPY" +msgstr "DO-INSTEAD-Regeln mit Bedingung werden für COPY nicht unterstützt" + +#: commands/copyto.c:475 +#, c-format +msgid "DO ALSO rules are not supported for the COPY" +msgstr "DO-ALSO-Regeln werden für COPY nicht unterstützt" + +#: commands/copyto.c:480 +#, c-format +msgid "multi-statement DO INSTEAD rules are not supported for COPY" +msgstr "DO-INSTEAD-Regeln mit mehreren Anweisungen werden für COPY nicht unterstützt" + +#: commands/copyto.c:490 +#, c-format +msgid "COPY (SELECT INTO) is not supported" +msgstr "COPY (SELECT INTO) wird nicht unterstützt" + +#: commands/copyto.c:507 +#, c-format +msgid "COPY query must have a RETURNING clause" +msgstr "COPY-Anfrage muss eine RETURNING-Klausel haben" + +#: commands/copyto.c:536 +#, c-format +msgid "relation referenced by COPY statement has changed" +msgstr "die von der COPY-Anweisung verwendete Relation hat sich geändert" + +#: commands/copyto.c:595 +#, c-format +msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" +msgstr "FORCE_QUOTE-Spalte »%s« wird von COPY nicht verwendet" + +#: commands/copyto.c:705 +#, c-format +msgid "relative path not allowed for COPY to file" +msgstr "relativer Pfad bei COPY in Datei nicht erlaubt" + +#: commands/copyto.c:724 +#, c-format +msgid "could not open file \"%s\" for writing: %m" +msgstr "konnte Datei »%s« nicht zum Schreiben öffnen: %m" + +#: commands/copyto.c:727 +#, c-format +msgid "COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \\copy." +msgstr "Mit COPY TO schreibt der PostgreSQL-Serverprozess eine Datei. Möglicherweise möchten Sie Funktionalität auf Client-Seite verwenden, wie zum Beispiel \\copy in psql." + +#: commands/createas.c:215 commands/createas.c:517 #, c-format msgid "too many column names were specified" msgstr "zu viele Spaltennamen wurden angegeben" -#: commands/createas.c:539 +#: commands/createas.c:540 #, c-format msgid "policies not yet implemented for this command" msgstr "Policys sind für diesen Befehl noch nicht implementiert" @@ -6526,7 +6729,7 @@ msgstr "Verwenden Sie stattdessen Tablespaces." #: commands/dbcommands.c:261 #, c-format msgid "LOCALE cannot be specified together with LC_COLLATE or LC_CTYPE." -msgstr "" +msgstr "LOCALE kann nicht zusammen mit LC_COLLATE oder LC_CTYPE angegeben werden." #: commands/dbcommands.c:279 utils/adt/ascii.c:145 #, c-format @@ -6711,16 +6914,15 @@ msgstr "Sie müssen sie zurück in den Standard-Tablespace der Datenbank verschi #: commands/dbcommands.c:1404 commands/dbcommands.c:1980 #: commands/dbcommands.c:2203 commands/dbcommands.c:2261 -#: commands/tablespace.c:619 +#: commands/tablespace.c:631 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "einige nutzlose Dateien wurde möglicherweise im alten Datenbankverzeichnis »%s« zurückgelassen" #: commands/dbcommands.c:1460 -#, fuzzy, c-format -#| msgid "unrecognized ANALYZE option \"%s\"" +#, c-format msgid "unrecognized DROP DATABASE option \"%s\"" -msgstr "unbekannte ANALYZE-Option »%s«" +msgstr "unbekannte DROP-DATABASE-Option »%s«" #: commands/dbcommands.c:1550 #, c-format @@ -6749,7 +6951,7 @@ msgid_plural "There are %d other sessions using the database." msgstr[0] "%d andere Sitzung verwendet die Datenbank." msgstr[1] "%d andere Sitzungen verwenden die Datenbank." -#: commands/dbcommands.c:2094 storage/ipc/procarray.c:3018 +#: commands/dbcommands.c:2094 storage/ipc/procarray.c:3726 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." @@ -6793,8 +6995,8 @@ msgstr "Argument von %s muss ein Typname sein" msgid "invalid argument for %s: \"%s\"" msgstr "ungültiges Argument für %s: »%s«" -#: commands/dropcmds.c:100 commands/functioncmds.c:1274 -#: utils/adt/ruleutils.c:2633 +#: commands/dropcmds.c:100 commands/functioncmds.c:1384 +#: utils/adt/ruleutils.c:2806 #, c-format msgid "\"%s\" is an aggregate function" msgstr "»%s« ist eine Aggregatfunktion" @@ -6804,19 +7006,19 @@ msgstr "»%s« ist eine Aggregatfunktion" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Verwenden Sie DROP AGGREGATE, um Aggregatfunktionen zu löschen." -#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3159 -#: commands/tablecmds.c:3317 commands/tablecmds.c:3362 -#: commands/tablecmds.c:14849 tcop/utility.c:1274 +#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3607 +#: commands/tablecmds.c:3765 commands/tablecmds.c:3810 +#: commands/tablecmds.c:15829 tcop/utility.c:1291 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "Relation »%s« existiert nicht, wird übersprungen" -#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1197 +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1256 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "Schema »%s« existiert nicht, wird übersprungen" -#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:259 +#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:272 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "Typ »%s« existiert nicht, wird übersprungen" @@ -6836,7 +7038,7 @@ msgstr "Sortierfolge »%s« existiert nicht, wird übersprungen" msgid "conversion \"%s\" does not exist, skipping" msgstr "Konversion »%s« existiert nicht, wird übersprungen" -#: commands/dropcmds.c:293 commands/statscmds.c:477 +#: commands/dropcmds.c:293 commands/statscmds.c:641 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "Statistikobjekt »%s« existiert nicht, wird übersprungen" @@ -6931,7 +7133,7 @@ msgstr "Regel »%s« für Relation »%s« existiert nicht, wird übersprungen" msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "Fremddaten-Wrapper »%s« existiert nicht, wird übersprungen" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1396 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1351 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "Server »%s« existiert nicht, wird übersprungen" @@ -6951,99 +7153,94 @@ msgstr "Operatorfamilie »%s« existiert nicht für Zugriffsmethode »%s«, wird msgid "publication \"%s\" does not exist, skipping" msgstr "Publikation »%s« existiert nicht, wird übersprungen" -#: commands/event_trigger.c:131 +#: commands/event_trigger.c:125 #, c-format msgid "permission denied to create event trigger \"%s\"" msgstr "keine Berechtigung, um Ereignistrigger »%s« zu erzeugen" -#: commands/event_trigger.c:133 +#: commands/event_trigger.c:127 #, c-format msgid "Must be superuser to create an event trigger." msgstr "Nur Superuser können Ereignistrigger anlegen." -#: commands/event_trigger.c:142 +#: commands/event_trigger.c:136 #, c-format msgid "unrecognized event name \"%s\"" msgstr "unbekannter Ereignisname »%s«" -#: commands/event_trigger.c:159 +#: commands/event_trigger.c:153 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "unbekannte Filtervariable »%s«" -#: commands/event_trigger.c:213 +#: commands/event_trigger.c:207 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "Filterwert »%s« nicht erkannt für Filtervariable »%s«" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:219 commands/event_trigger.c:241 +#: commands/event_trigger.c:213 commands/event_trigger.c:235 #, c-format msgid "event triggers are not supported for %s" msgstr "Ereignistrigger für %s werden nicht unterstützt" -#: commands/event_trigger.c:254 +#: commands/event_trigger.c:248 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "Filtervariable »%s« mehrmals angegeben" -#: commands/event_trigger.c:405 commands/event_trigger.c:449 -#: commands/event_trigger.c:543 +#: commands/event_trigger.c:377 commands/event_trigger.c:421 +#: commands/event_trigger.c:515 #, c-format msgid "event trigger \"%s\" does not exist" msgstr "Ereignistrigger »%s« existiert nicht" -#: commands/event_trigger.c:511 +#: commands/event_trigger.c:483 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "keine Berechtigung, um Eigentümer des Ereignistriggers »%s« zu ändern" -#: commands/event_trigger.c:513 +#: commands/event_trigger.c:485 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "Der Eigentümer eines Ereignistriggers muss ein Superuser sein." -#: commands/event_trigger.c:1343 +#: commands/event_trigger.c:1304 #, c-format msgid "%s can only be called in a sql_drop event trigger function" msgstr "%s kann nur in einer sql_drop-Ereignistriggerfunktion aufgerufen werden" -#: commands/event_trigger.c:1463 commands/event_trigger.c:1484 +#: commands/event_trigger.c:1424 commands/event_trigger.c:1445 #, c-format msgid "%s can only be called in a table_rewrite event trigger function" msgstr "%s kann nur in einer table_rewrite-Ereignistriggerfunktion aufgerufen werden" -#: commands/event_trigger.c:1895 +#: commands/event_trigger.c:1862 #, c-format msgid "%s can only be called in an event trigger function" msgstr "%s kann nur in einer Ereignistriggerfunktion aufgerufen werden" -#: commands/explain.c:212 +#: commands/explain.c:218 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "unbekannter Wert für EXPLAIN-Option »%s«: »%s«" -#: commands/explain.c:219 +#: commands/explain.c:225 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "unbekannte EXPLAIN-Option »%s«" -#: commands/explain.c:227 -#, c-format -msgid "EXPLAIN option BUFFERS requires ANALYZE" -msgstr "EXPLAIN-Option BUFFERS erfordert ANALYZE" - -#: commands/explain.c:232 +#: commands/explain.c:233 #, c-format msgid "EXPLAIN option WAL requires ANALYZE" msgstr "EXPLAIN-Option WAL erfordert ANALYZE" -#: commands/explain.c:241 +#: commands/explain.c:242 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "EXPLAIN-Option TIMING erfordert ANALYZE" -#: commands/extension.c:173 commands/extension.c:3000 +#: commands/extension.c:173 commands/extension.c:3013 #, c-format msgid "extension \"%s\" does not exist" msgstr "Erweiterung »%s« existiert nicht" @@ -7111,7 +7308,7 @@ msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "Parameter »%s« kann nicht in einer sekundären Erweitungskontrolldatei gesetzt werden" #: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 -#: utils/misc/guc.c:6759 +#: utils/misc/guc.c:7125 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "Parameter »%s« erfordert einen Boole’schen Wert" @@ -7147,10 +7344,9 @@ msgid "permission denied to create extension \"%s\"" msgstr "keine Berechtigung, um Erweiterung »%s« zu erzeugen" #: commands/extension.c:864 -#, fuzzy, c-format -#| msgid "Must be superuser to create this extension." +#, c-format msgid "Must have CREATE privilege on current database to create this extension." -msgstr "Nur Superuser können diese Erweiterung anlegen." +msgstr "CREATE-Privileg für die aktuelle Datenbank wird benötigt, um diese Erweiterung anzulegen." #: commands/extension.c:865 #, c-format @@ -7163,127 +7359,131 @@ msgid "permission denied to update extension \"%s\"" msgstr "keine Berechtigung, um Erweiterung »%s« zu aktualisieren" #: commands/extension.c:872 -#, fuzzy, c-format -#| msgid "Must be superuser to update this extension." +#, c-format msgid "Must have CREATE privilege on current database to update this extension." -msgstr "Nur Superuser können diese Erweiterung aktualisieren." +msgstr "CREATE-Privileg für die aktuelle Datenbank wird benötigt, um diese Erweiterung zu aktualisieren." #: commands/extension.c:873 #, c-format msgid "Must be superuser to update this extension." msgstr "Nur Superuser können diese Erweiterung aktualisieren." -#: commands/extension.c:1187 +#: commands/extension.c:1200 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "Erweiterung »%s« hat keinen Aktualisierungspfad von Version »%s« auf Version »%s«" -#: commands/extension.c:1395 commands/extension.c:3061 +#: commands/extension.c:1408 commands/extension.c:3074 #, c-format msgid "version to install must be specified" msgstr "die zu installierende Version muss angegeben werden" -#: commands/extension.c:1432 +#: commands/extension.c:1445 #, c-format msgid "extension \"%s\" has no installation script nor update path for version \"%s\"" msgstr "Erweiterung »%s« hat kein Installationsskript und keinen Aktualisierungspfad für Version »%s«" -#: commands/extension.c:1466 +#: commands/extension.c:1479 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "Erweiterung »%s« muss in Schema »%s« installiert werden" -#: commands/extension.c:1626 +#: commands/extension.c:1639 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "zyklische Abhängigkeit zwischen Erweiterungen »%s« und »%s« entdeckt" -#: commands/extension.c:1631 +#: commands/extension.c:1644 #, c-format msgid "installing required extension \"%s\"" msgstr "installiere benötigte Erweiterung »%s«" -#: commands/extension.c:1654 +#: commands/extension.c:1667 #, c-format msgid "required extension \"%s\" is not installed" msgstr "benötigte Erweiterung »%s« ist nicht installiert" -#: commands/extension.c:1657 +#: commands/extension.c:1670 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "Verwenden Sie CREATE EXTENSION ... CASCADE, um die benötigten Erweiterungen ebenfalls zu installieren." -#: commands/extension.c:1692 +#: commands/extension.c:1705 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "Erweiterung »%s« existiert bereits, wird übersprungen" -#: commands/extension.c:1699 +#: commands/extension.c:1712 #, c-format msgid "extension \"%s\" already exists" msgstr "Erweiterung »%s« existiert bereits" -#: commands/extension.c:1710 +#: commands/extension.c:1723 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "geschachteltes CREATE EXTENSION wird nicht unterstützt" -#: commands/extension.c:1883 +#: commands/extension.c:1896 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "Erweiterung »%s« kann nicht gelöscht werden, weil sie gerade geändert wird" -#: commands/extension.c:2444 +#: commands/extension.c:2457 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "%s kann nur von einem SQL-Skript aufgerufen werden, das von CREATE EXTENSION ausgeführt wird" -#: commands/extension.c:2456 +#: commands/extension.c:2469 #, c-format msgid "OID %u does not refer to a table" msgstr "OID %u bezieht sich nicht auf eine Tabelle" -#: commands/extension.c:2461 +#: commands/extension.c:2474 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "Tabelle »%s« ist kein Mitglied der anzulegenden Erweiterung" -#: commands/extension.c:2815 +#: commands/extension.c:2828 #, c-format msgid "cannot move extension \"%s\" into schema \"%s\" because the extension contains the schema" msgstr "kann Erweiterung »%s« nicht in Schema »%s« verschieben, weil die Erweiterung das Schema enthält" -#: commands/extension.c:2856 commands/extension.c:2919 +#: commands/extension.c:2869 commands/extension.c:2932 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "Erweiterung »%s« unterstützt SET SCHEMA nicht" -#: commands/extension.c:2921 +#: commands/extension.c:2934 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "%s ist nicht im Schema der Erweiterung (»%s«)" -#: commands/extension.c:2980 +#: commands/extension.c:2993 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "geschachteltes ALTER EXTENSION wird nicht unterstützt" -#: commands/extension.c:3072 +#: commands/extension.c:3085 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "Version »%s« von Erweiterung »%s« ist bereits installiert" -#: commands/extension.c:3323 +#: commands/extension.c:3297 +#, c-format +msgid "cannot add an object of this type to an extension" +msgstr "ein Objekt dieses Typs kann nicht zu einer Erweiterung hinzugefügt werden" + +#: commands/extension.c:3355 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "kann Schema »%s« nicht zu Erweiterung »%s« hinzufügen, weil das Schema die Erweiterung enthält" -#: commands/extension.c:3351 +#: commands/extension.c:3383 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s ist kein Mitglied der Erweiterung »%s«" -#: commands/extension.c:3417 +#: commands/extension.c:3449 #, c-format msgid "file \"%s\" is too large" msgstr "Datei »%s« ist zu groß" @@ -7348,694 +7548,699 @@ msgstr "das Ändern des Handlers des Fremddaten-Wrappers kann das Verhalten von msgid "changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid" msgstr "durch Ändern des Validators des Fremddaten-Wrappers können die Optionen von abhängigen Objekten ungültig werden" -#: commands/foreigncmds.c:895 +#: commands/foreigncmds.c:871 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "Server »%s« existiert bereits, wird übersprungen" -#: commands/foreigncmds.c:1183 +#: commands/foreigncmds.c:1135 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "Benutzerabbildung für »%s« existiert bereits für Server »%s«, wird übersprungen" -#: commands/foreigncmds.c:1193 +#: commands/foreigncmds.c:1145 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "Benutzerabbildung für »%s« existiert bereits für Server »%s«" -#: commands/foreigncmds.c:1293 commands/foreigncmds.c:1410 +#: commands/foreigncmds.c:1245 commands/foreigncmds.c:1365 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "Benutzerabbildung für »%s« existiert nicht für Server »%s«" -#: commands/foreigncmds.c:1415 +#: commands/foreigncmds.c:1370 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "Benutzerabbildung für »%s« existiert nicht für Server »%s«, wird übersprungen" -#: commands/foreigncmds.c:1566 foreign/foreign.c:389 +#: commands/foreigncmds.c:1498 foreign/foreign.c:389 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "Fremddaten-Wrapper »%s« hat keinen Handler" -#: commands/foreigncmds.c:1572 +#: commands/foreigncmds.c:1504 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "Fremddaten-Wrapper »%s« unterstützt IMPORT FOREIGN SCHEMA nicht" -#: commands/foreigncmds.c:1675 +#: commands/foreigncmds.c:1607 #, c-format msgid "importing foreign table \"%s\"" msgstr "importiere Fremdtabelle »%s«" -#: commands/functioncmds.c:104 +#: commands/functioncmds.c:107 #, c-format msgid "SQL function cannot return shell type %s" msgstr "SQL-Funktion kann keinen Hüllen-Rückgabetyp %s haben" -#: commands/functioncmds.c:109 +#: commands/functioncmds.c:112 #, c-format msgid "return type %s is only a shell" msgstr "Rückgabetyp %s ist nur eine Hülle" -#: commands/functioncmds.c:139 parser/parse_type.c:354 +#: commands/functioncmds.c:142 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "Typmodifikator kann für Hüllentyp »%s« nicht angegeben werden" -#: commands/functioncmds.c:145 +#: commands/functioncmds.c:148 #, c-format msgid "type \"%s\" is not yet defined" msgstr "Typ »%s« ist noch nicht definiert" -#: commands/functioncmds.c:146 +#: commands/functioncmds.c:149 #, c-format msgid "Creating a shell type definition." msgstr "Hüllentypdefinition wird erzeugt." -#: commands/functioncmds.c:238 +#: commands/functioncmds.c:243 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "SQL-Funktion kann keinen Hüllentyp %s annehmen" -#: commands/functioncmds.c:244 +#: commands/functioncmds.c:249 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "Aggregatfunktion kann keinen Hüllentyp %s annehmen" -#: commands/functioncmds.c:249 +#: commands/functioncmds.c:254 #, c-format msgid "argument type %s is only a shell" msgstr "Argumenttyp %s ist nur eine Hülle" -#: commands/functioncmds.c:259 +#: commands/functioncmds.c:264 #, c-format msgid "type %s does not exist" msgstr "Typ %s existiert nicht" -#: commands/functioncmds.c:273 +#: commands/functioncmds.c:278 #, c-format msgid "aggregates cannot accept set arguments" msgstr "Aggregatfunktionen können keine SETOF-Argumente haben" -#: commands/functioncmds.c:277 +#: commands/functioncmds.c:282 #, c-format msgid "procedures cannot accept set arguments" msgstr "Prozeduren können keine SETOF-Argumente haben" -#: commands/functioncmds.c:281 +#: commands/functioncmds.c:286 #, c-format msgid "functions cannot accept set arguments" msgstr "Funktionen können keine SETOF-Argumente haben" -#: commands/functioncmds.c:289 -#, c-format -msgid "procedures cannot have OUT arguments" -msgstr "Prozeduren können keine OUT-Argumente haben" - -#: commands/functioncmds.c:290 -#, c-format -msgid "INOUT arguments are permitted." -msgstr "INOUT-Argumente sind erlaubt." - -#: commands/functioncmds.c:300 +#: commands/functioncmds.c:306 #, c-format -msgid "VARIADIC parameter must be the last input parameter" -msgstr "VARIADIC-Parameter muss der letzte Eingabeparameter sein" +msgid "VARIADIC parameter must be the last signature parameter" +msgstr "VARIADIC-Parameter muss der letzte Signaturparameter sein" -#: commands/functioncmds.c:331 +#: commands/functioncmds.c:336 #, c-format msgid "VARIADIC parameter must be an array" msgstr "VARIADIC-Parameter muss ein Array sein" -#: commands/functioncmds.c:371 +#: commands/functioncmds.c:376 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "Parametername »%s« mehrmals angegeben" -#: commands/functioncmds.c:386 +#: commands/functioncmds.c:394 #, c-format msgid "only input parameters can have default values" msgstr "nur Eingabeparameter können Vorgabewerte haben" -#: commands/functioncmds.c:401 +#: commands/functioncmds.c:409 #, c-format msgid "cannot use table references in parameter default value" msgstr "Tabellenverweise können nicht in Parametervorgabewerten verwendet werden" -#: commands/functioncmds.c:425 +#: commands/functioncmds.c:433 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "Eingabeparameter hinter einem mit Vorgabewert müssen auch einen Vorgabewert haben" -#: commands/functioncmds.c:577 commands/functioncmds.c:768 +#: commands/functioncmds.c:585 commands/functioncmds.c:776 #, c-format msgid "invalid attribute in procedure definition" msgstr "ungültiges Attribut in Prozedurdefinition" -#: commands/functioncmds.c:673 +#: commands/functioncmds.c:681 #, c-format msgid "support function %s must return type %s" msgstr "Unterstützungsfunktion %s muss Rückgabetyp %s haben" -#: commands/functioncmds.c:684 -#, fuzzy, c-format -#| msgid "must be superuser to set grantor" +#: commands/functioncmds.c:692 +#, c-format msgid "must be superuser to specify a support function" -msgstr "nur Superuser können Grantor setzen" +msgstr "nur Superuser können eine Support-Funktion angeben" + +#: commands/functioncmds.c:825 commands/functioncmds.c:1429 +#, c-format +msgid "COST must be positive" +msgstr "COST muss positiv sein" -#: commands/functioncmds.c:800 +#: commands/functioncmds.c:833 commands/functioncmds.c:1437 +#, c-format +msgid "ROWS must be positive" +msgstr "ROWS muss positiv sein" + +#: commands/functioncmds.c:862 #, c-format msgid "no function body specified" msgstr "kein Funktionskörper angegeben" -#: commands/functioncmds.c:810 +#: commands/functioncmds.c:867 #, c-format -msgid "no language specified" -msgstr "keine Sprache angegeben" +msgid "duplicate function body specified" +msgstr "doppelter Funktionskörper angegeben" -#: commands/functioncmds.c:835 commands/functioncmds.c:1319 +#: commands/functioncmds.c:872 #, c-format -msgid "COST must be positive" -msgstr "COST muss positiv sein" +msgid "inline SQL function body only valid for language SQL" +msgstr "" -#: commands/functioncmds.c:843 commands/functioncmds.c:1327 -#, c-format -msgid "ROWS must be positive" -msgstr "ROWS muss positiv sein" +#: commands/functioncmds.c:914 +#, fuzzy, c-format +#| msgid "event trigger functions cannot have declared arguments" +msgid "SQL function with unquoted function body cannot have polymorphic arguments" +msgstr "Ereignistriggerfunktionen können keine deklarierten Argumente haben" -#: commands/functioncmds.c:897 +#: commands/functioncmds.c:940 commands/functioncmds.c:959 +#, fuzzy, c-format +#| msgid "%s is not allowed in a SQL function" +msgid "%s is not yet supported in unquoted SQL function body" +msgstr "%s ist in SQL-Funktionen nicht erlaubt" + +#: commands/functioncmds.c:987 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "nur ein AS-Element benötigt für Sprache »%s«" -#: commands/functioncmds.c:995 commands/functioncmds.c:2048 -#: commands/proclang.c:259 +#: commands/functioncmds.c:1092 +#, c-format +msgid "no language specified" +msgstr "keine Sprache angegeben" + +#: commands/functioncmds.c:1100 commands/functioncmds.c:2102 +#: commands/proclang.c:237 #, c-format msgid "language \"%s\" does not exist" msgstr "Sprache »%s« existiert nicht" -#: commands/functioncmds.c:997 commands/functioncmds.c:2050 +#: commands/functioncmds.c:1102 commands/functioncmds.c:2104 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "Verwenden Sie CREATE EXTENSION, um die Sprache in die Datenbank zu laden." -#: commands/functioncmds.c:1032 commands/functioncmds.c:1311 +#: commands/functioncmds.c:1137 commands/functioncmds.c:1421 #, c-format msgid "only superuser can define a leakproof function" msgstr "nur Superuser können eine »leakproof«-Funktion definieren" -#: commands/functioncmds.c:1081 +#: commands/functioncmds.c:1188 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "Ergebnistyp der Funktion muss %s sein wegen OUT-Parametern" -#: commands/functioncmds.c:1094 +#: commands/functioncmds.c:1201 #, c-format msgid "function result type must be specified" msgstr "Ergebnistyp der Funktion muss angegeben werden" -#: commands/functioncmds.c:1146 commands/functioncmds.c:1331 +#: commands/functioncmds.c:1255 commands/functioncmds.c:1441 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "ROWS ist nicht anwendbar, wenn die Funktion keine Ergebnismenge zurückgibt" -#: commands/functioncmds.c:1431 +#: commands/functioncmds.c:1541 #, c-format msgid "source data type %s is a pseudo-type" msgstr "Quelldatentyp %s ist ein Pseudotyp" -#: commands/functioncmds.c:1437 +#: commands/functioncmds.c:1547 #, c-format msgid "target data type %s is a pseudo-type" msgstr "Zieldatentyp %s ist ein Pseudotyp" -#: commands/functioncmds.c:1461 +#: commands/functioncmds.c:1571 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "Typumwandlung wird ignoriert werden, weil der Quelldatentyp eine Domäne ist" -#: commands/functioncmds.c:1466 +#: commands/functioncmds.c:1576 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "Typumwandlung wird ignoriert werden, weil der Zieldatentyp eine Domäne ist" -#: commands/functioncmds.c:1491 +#: commands/functioncmds.c:1601 #, c-format msgid "cast function must take one to three arguments" msgstr "Typumwandlungsfunktion muss ein bis drei Argumente haben" -#: commands/functioncmds.c:1495 +#: commands/functioncmds.c:1605 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "Argument der Typumwandlungsfunktion muss mit Quelldatentyp übereinstimmen oder in ihn binär-umwandelbar sein" -#: commands/functioncmds.c:1499 +#: commands/functioncmds.c:1609 #, c-format msgid "second argument of cast function must be type %s" msgstr "zweites Argument der Typumwandlungsfunktion muss Typ %s haben" -#: commands/functioncmds.c:1504 +#: commands/functioncmds.c:1614 #, c-format msgid "third argument of cast function must be type %s" msgstr "drittes Argument der Typumwandlungsfunktion muss Typ %s haben" -#: commands/functioncmds.c:1509 +#: commands/functioncmds.c:1619 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "Rückgabetyp der Typumwandlungsfunktion muss mit Zieldatentyp übereinstimmen oder in ihn binär-umwandelbar sein" -#: commands/functioncmds.c:1520 +#: commands/functioncmds.c:1630 #, c-format msgid "cast function must not be volatile" msgstr "Typumwandlungsfunktion darf nicht VOLATILE sein" -#: commands/functioncmds.c:1525 +#: commands/functioncmds.c:1635 #, c-format msgid "cast function must be a normal function" msgstr "Typumwandlungsfunktion muss eine normale Funktion sein" -#: commands/functioncmds.c:1529 +#: commands/functioncmds.c:1639 #, c-format msgid "cast function must not return a set" msgstr "Typumwandlungsfunktion darf keine Ergebnismenge zurückgeben" -#: commands/functioncmds.c:1555 +#: commands/functioncmds.c:1665 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "nur Superuser können Typumwandlungen mit WITHOUT FUNCTION erzeugen" -#: commands/functioncmds.c:1570 +#: commands/functioncmds.c:1680 #, c-format msgid "source and target data types are not physically compatible" msgstr "Quelldatentyp und Zieldatentyp sind nicht physikalisch kompatibel" -#: commands/functioncmds.c:1585 +#: commands/functioncmds.c:1695 #, c-format msgid "composite data types are not binary-compatible" msgstr "zusammengesetzte Datentypen sind nicht binärkompatibel" -#: commands/functioncmds.c:1591 +#: commands/functioncmds.c:1701 #, c-format msgid "enum data types are not binary-compatible" msgstr "Enum-Datentypen sind nicht binärkompatibel" -#: commands/functioncmds.c:1597 +#: commands/functioncmds.c:1707 #, c-format msgid "array data types are not binary-compatible" msgstr "Array-Datentypen sind nicht binärkompatibel" -#: commands/functioncmds.c:1614 +#: commands/functioncmds.c:1724 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "Domänendatentypen dürfen nicht als binärkompatibel markiert werden" -#: commands/functioncmds.c:1624 +#: commands/functioncmds.c:1734 #, c-format msgid "source data type and target data type are the same" msgstr "Quelldatentyp und Zieldatentyp sind der selbe" -#: commands/functioncmds.c:1682 +#: commands/functioncmds.c:1767 #, c-format msgid "transform function must not be volatile" msgstr "Transformationsfunktion darf nicht VOLATILE sein" -#: commands/functioncmds.c:1686 +#: commands/functioncmds.c:1771 #, c-format msgid "transform function must be a normal function" msgstr "Transformationsfunktion muss eine normale Funktion sein" -#: commands/functioncmds.c:1690 +#: commands/functioncmds.c:1775 #, c-format msgid "transform function must not return a set" msgstr "Transformationsfunktion darf keine Ergebnismenge zurückgeben" -#: commands/functioncmds.c:1694 +#: commands/functioncmds.c:1779 #, c-format msgid "transform function must take one argument" msgstr "Transformationsfunktion muss ein Argument haben" -#: commands/functioncmds.c:1698 +#: commands/functioncmds.c:1783 #, c-format msgid "first argument of transform function must be type %s" msgstr "erstes Argument der Transformationsfunktion muss Typ %s haben" -#: commands/functioncmds.c:1736 +#: commands/functioncmds.c:1822 #, c-format msgid "data type %s is a pseudo-type" msgstr "Datentyp %s ist ein Pseudotyp" -#: commands/functioncmds.c:1742 +#: commands/functioncmds.c:1828 #, c-format msgid "data type %s is a domain" msgstr "Datentyp %s ist eine Domäne" -#: commands/functioncmds.c:1782 +#: commands/functioncmds.c:1868 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "Rückgabetyp der FROM-SQL-Funktion muss %s sein" -#: commands/functioncmds.c:1808 +#: commands/functioncmds.c:1894 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "Rückgabetyp der TO-SQL-Funktion muss der zu transformierende Datentyp sein" -#: commands/functioncmds.c:1837 +#: commands/functioncmds.c:1923 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "Transformation für Typ %s Sprache »%s« existiert bereits" -#: commands/functioncmds.c:1929 +#: commands/functioncmds.c:2010 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "Transformation für Typ %s Sprache »%s« existiert nicht" -#: commands/functioncmds.c:1980 +#: commands/functioncmds.c:2034 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "Funktion %s existiert bereits in Schema »%s«" -#: commands/functioncmds.c:2035 +#: commands/functioncmds.c:2089 #, c-format msgid "no inline code specified" msgstr "kein Inline-Code angegeben" -#: commands/functioncmds.c:2081 +#: commands/functioncmds.c:2135 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "Sprache »%s« unterstützt das Ausführen von Inline-Code nicht" -#: commands/functioncmds.c:2193 +#: commands/functioncmds.c:2252 #, c-format msgid "cannot pass more than %d argument to a procedure" msgid_plural "cannot pass more than %d arguments to a procedure" msgstr[0] "kann nicht mehr als %d Argument an eine Prozedur übergeben" msgstr[1] "kann nicht mehr als %d Argumente an eine Prozedur übergeben" -#: commands/indexcmds.c:590 +#: commands/indexcmds.c:618 #, c-format msgid "must specify at least one column" msgstr "mindestens eine Spalte muss angegeben werden" -#: commands/indexcmds.c:594 +#: commands/indexcmds.c:622 #, c-format msgid "cannot use more than %d columns in an index" msgstr "Index kann nicht mehr als %d Spalten enthalten" -#: commands/indexcmds.c:633 +#: commands/indexcmds.c:661 #, c-format msgid "cannot create index on foreign table \"%s\"" msgstr "kann keinen Index für Fremdtabelle »%s« erzeugen" -#: commands/indexcmds.c:664 +#: commands/indexcmds.c:692 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "kann Index für partitionierte Tabelle »%s« nicht nebenläufig erzeugen" -#: commands/indexcmds.c:669 +#: commands/indexcmds.c:697 #, c-format msgid "cannot create exclusion constraints on partitioned table \"%s\"" msgstr "kann keinen Exclusion-Constraint für partitionierte Tabelle »%s« erzeugen" -#: commands/indexcmds.c:679 +#: commands/indexcmds.c:707 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "kann keine Indexe für temporäre Tabellen anderer Sitzungen erzeugen" -#: commands/indexcmds.c:717 commands/tablecmds.c:702 commands/tablespace.c:1173 -#, fuzzy, c-format -#| msgid "cannot assign new default tablespace \"%s\"" +#: commands/indexcmds.c:745 commands/tablecmds.c:748 commands/tablespace.c:1185 +#, c-format msgid "cannot specify default tablespace for partitioned relations" -msgstr "kann neuen Standard-Tablespace »%s« nicht setzen" +msgstr "für partitionierte Relationen kann kein Standard-Tablespace angegeben werden" -#: commands/indexcmds.c:749 commands/tablecmds.c:737 commands/tablecmds.c:12973 -#: commands/tablecmds.c:13087 +#: commands/indexcmds.c:777 commands/tablecmds.c:783 commands/tablecmds.c:3307 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "nur geteilte Relationen können in den Tablespace »pg_global« gelegt werden" -#: commands/indexcmds.c:782 +#: commands/indexcmds.c:810 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "ersetze Zugriffsmethode »gist« für obsolete Methode »rtree«" -#: commands/indexcmds.c:803 +#: commands/indexcmds.c:831 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "Zugriffsmethode »%s« unterstützt keine Unique Indexe" -#: commands/indexcmds.c:808 +#: commands/indexcmds.c:836 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "Zugriffsmethode »%s« unterstützt keine eingeschlossenen Spalten" -#: commands/indexcmds.c:813 +#: commands/indexcmds.c:841 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "Zugriffsmethode »%s« unterstützt keine mehrspaltigen Indexe" -#: commands/indexcmds.c:818 +#: commands/indexcmds.c:846 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "Zugriffsmethode »%s« unterstützt keine Exclusion-Constraints" -#: commands/indexcmds.c:941 -#, fuzzy, c-format -#| msgid "cannot create partitioned table as inheritance child" +#: commands/indexcmds.c:969 +#, c-format msgid "cannot match partition key to an index using access method \"%s\"" -msgstr "partitionierte Tabelle kann nicht als Vererbungskind erzeugt werden" +msgstr "Partitionierungsschlüssel kann nicht mit Zugriffsmethode »%s« mit einem Index gepaart werden" -#: commands/indexcmds.c:951 -#, fuzzy, c-format -#| msgid "merging constraint \"%s\" with inherited definition" +#: commands/indexcmds.c:979 +#, c-format msgid "unsupported %s constraint with partition key definition" -msgstr "Constraint »%s« wird mit geerbter Definition zusammengeführt" +msgstr "nicht unterstützter %s-Constraint mit Partitionierungsschlüsseldefinition" -#: commands/indexcmds.c:953 -#, fuzzy, c-format -#| msgid "cannot use subquery in partition key expression" +#: commands/indexcmds.c:981 +#, c-format msgid "%s constraints cannot be used when partition keys include expressions." -msgstr "Unteranfragen können nicht in Partitionierungsschlüsselausdrücken verwendet werden" +msgstr "%s-Constraints können nicht verwendet werden, wenn Partitionierungsschlüssel Ausdrücke enthalten." -#: commands/indexcmds.c:992 -#, fuzzy, c-format -#| msgid "duplicate column name in statistics definition" -msgid "insufficient columns in %s constraint definition" -msgstr "doppelter Spaltenname in Statistikdefinition" +#: commands/indexcmds.c:1020 +#, c-format +msgid "unique constraint on partitioned table must include all partitioning columns" +msgstr "Unique-Constraint für partitionierte Tabelle muss alle Partitionierungsspalten enthalten" -#: commands/indexcmds.c:994 +#: commands/indexcmds.c:1021 #, c-format msgid "%s constraint on table \"%s\" lacks column \"%s\" which is part of the partition key." -msgstr "" +msgstr "Im %s-Constraint in Tabelle »%s« fehlt Spalte »%s«, welche Teil des Partitionierungsschlüssels ist." -#: commands/indexcmds.c:1013 commands/indexcmds.c:1032 +#: commands/indexcmds.c:1040 commands/indexcmds.c:1059 #, c-format msgid "index creation on system columns is not supported" msgstr "Indexerzeugung für Systemspalten wird nicht unterstützt" -#: commands/indexcmds.c:1057 -#, c-format -msgid "%s %s will create implicit index \"%s\" for table \"%s\"" -msgstr "%s %s erstellt implizit einen Index »%s« für Tabelle »%s«" - -#: commands/indexcmds.c:1198 tcop/utility.c:1459 +#: commands/indexcmds.c:1231 tcop/utility.c:1477 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "kann keinen Unique Index für partitionierte Tabelle »%s« erzeugen" -#: commands/indexcmds.c:1200 tcop/utility.c:1461 +#: commands/indexcmds.c:1233 tcop/utility.c:1479 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "Tabelle »%s« enthält Partitionen, die Fremdtabellen sind." -#: commands/indexcmds.c:1629 +#: commands/indexcmds.c:1683 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "Funktionen im Indexprädikat müssen als IMMUTABLE markiert sein" -#: commands/indexcmds.c:1695 parser/parse_utilcmd.c:2352 -#: parser/parse_utilcmd.c:2487 +#: commands/indexcmds.c:1749 parser/parse_utilcmd.c:2525 +#: parser/parse_utilcmd.c:2660 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "Spalte »%s«, die im Schlüssel verwendet wird, existiert nicht" -#: commands/indexcmds.c:1719 parser/parse_utilcmd.c:1670 +#: commands/indexcmds.c:1773 parser/parse_utilcmd.c:1824 #, c-format msgid "expressions are not supported in included columns" msgstr "in eingeschlossenen Spalten werden keine Ausdrücke unterstützt" -#: commands/indexcmds.c:1760 +#: commands/indexcmds.c:1814 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "Funktionen im Indexausdruck müssen als IMMUTABLE markiert sein" -#: commands/indexcmds.c:1775 -#, fuzzy, c-format -#| msgid "identity columns are not supported on partitions" +#: commands/indexcmds.c:1829 +#, c-format msgid "including column does not support a collation" -msgstr "Identitätsspalten in partitionierten Tabellen werden nicht unterstützt" +msgstr "inkludierte Spalte unterstützt keine Sortierfolge" -#: commands/indexcmds.c:1779 -#, fuzzy, c-format -#| msgid "identity columns are not supported on partitions" +#: commands/indexcmds.c:1833 +#, c-format msgid "including column does not support an operator class" -msgstr "Identitätsspalten in partitionierten Tabellen werden nicht unterstützt" +msgstr "inkludierte Spalte unterstützt keine Operatorklasse" -#: commands/indexcmds.c:1783 -#, fuzzy, c-format -#| msgid "access method \"%s\" does not support ASC/DESC options" +#: commands/indexcmds.c:1837 +#, c-format msgid "including column does not support ASC/DESC options" -msgstr "Zugriffsmethode »%s« unterstützt die Optionen ASC/DESC nicht" +msgstr "inkludierte Spalte unterstützt die Optionen ASC/DESC nicht" -#: commands/indexcmds.c:1787 -#, fuzzy, c-format -#| msgid "access method \"%s\" does not support NULLS FIRST/LAST options" +#: commands/indexcmds.c:1841 +#, c-format msgid "including column does not support NULLS FIRST/LAST options" -msgstr "Zugriffsmethode »%s« unterstützt die Optionen NULLS FIRST/LAST nicht" +msgstr "inkludierte Spalte unterstützt die Optionen NULLS FIRST/LAST nicht" -#: commands/indexcmds.c:1814 +#: commands/indexcmds.c:1868 #, c-format msgid "could not determine which collation to use for index expression" msgstr "konnte die für den Indexausdruck zu verwendende Sortierfolge nicht bestimmen" -#: commands/indexcmds.c:1822 commands/tablecmds.c:15853 commands/typecmds.c:770 -#: parser/parse_expr.c:2850 parser/parse_type.c:566 parser/parse_utilcmd.c:3562 -#: parser/parse_utilcmd.c:4123 utils/adt/misc.c:502 +#: commands/indexcmds.c:1876 commands/tablecmds.c:16834 commands/typecmds.c:810 +#: parser/parse_expr.c:2680 parser/parse_type.c:566 parser/parse_utilcmd.c:3813 +#: utils/adt/misc.c:599 #, c-format msgid "collations are not supported by type %s" msgstr "Sortierfolgen werden von Typ %s nicht unterstützt" -#: commands/indexcmds.c:1860 +#: commands/indexcmds.c:1914 #, c-format msgid "operator %s is not commutative" msgstr "Operator %s ist nicht kommutativ" -#: commands/indexcmds.c:1862 +#: commands/indexcmds.c:1916 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "In Exclusion-Constraints können nur kommutative Operatoren verwendet werden." -#: commands/indexcmds.c:1888 +#: commands/indexcmds.c:1942 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "Operator %s ist kein Mitglied der Operatorfamilie »%s«" -#: commands/indexcmds.c:1891 +#: commands/indexcmds.c:1945 #, c-format msgid "The exclusion operator must be related to the index operator class for the constraint." msgstr "Der Exklusionsoperator muss in Beziehung zur Indexoperatorklasse des Constraints stehen." -#: commands/indexcmds.c:1926 +#: commands/indexcmds.c:1980 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "Zugriffsmethode »%s« unterstützt die Optionen ASC/DESC nicht" -#: commands/indexcmds.c:1931 +#: commands/indexcmds.c:1985 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "Zugriffsmethode »%s« unterstützt die Optionen NULLS FIRST/LAST nicht" -#: commands/indexcmds.c:1977 commands/tablecmds.c:15878 -#: commands/tablecmds.c:15884 commands/typecmds.c:1922 +#: commands/indexcmds.c:2031 commands/tablecmds.c:16859 +#: commands/tablecmds.c:16865 commands/typecmds.c:2318 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "Datentyp %s hat keine Standardoperatorklasse für Zugriffsmethode »%s«" -#: commands/indexcmds.c:1979 +#: commands/indexcmds.c:2033 #, c-format msgid "You must specify an operator class for the index or define a default operator class for the data type." msgstr "Sie müssen für den Index eine Operatorklasse angeben oder eine Standardoperatorklasse für den Datentyp definieren." -#: commands/indexcmds.c:2008 commands/indexcmds.c:2016 -#: commands/opclasscmds.c:208 +#: commands/indexcmds.c:2062 commands/indexcmds.c:2070 +#: commands/opclasscmds.c:205 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "Operatorklasse »%s« existiert nicht für Zugriffsmethode »%s«" -#: commands/indexcmds.c:2030 commands/typecmds.c:1910 +#: commands/indexcmds.c:2084 commands/typecmds.c:2306 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "Operatorklasse »%s« akzeptiert Datentyp %s nicht" -#: commands/indexcmds.c:2120 +#: commands/indexcmds.c:2174 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "es gibt mehrere Standardoperatorklassen für Datentyp %s" -#: commands/indexcmds.c:2569 +#: commands/indexcmds.c:2502 +#, c-format +msgid "unrecognized REINDEX option \"%s\"" +msgstr "unbekannte REINDEX-Option »%s«" + +#: commands/indexcmds.c:2726 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "Tabelle »%s« hat keine Indexe, die nebenläufig reindiziert werden können" -#: commands/indexcmds.c:2580 +#: commands/indexcmds.c:2740 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "Tabelle »%s« hat keine zu reindizierenden Indexe" -#: commands/indexcmds.c:2619 commands/indexcmds.c:2893 -#: commands/indexcmds.c:2986 +#: commands/indexcmds.c:2780 commands/indexcmds.c:3287 +#: commands/indexcmds.c:3415 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "Systemkataloge können nicht nebenläufig reindiziert werden" -#: commands/indexcmds.c:2642 +#: commands/indexcmds.c:2803 #, c-format msgid "can only reindex the currently open database" msgstr "nur die aktuell geöffnete Datenbank kann reindiziert werden" -#: commands/indexcmds.c:2733 +#: commands/indexcmds.c:2891 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "Systemkataloge können nicht nebenläufig reindiziert werden, werden alle übersprungen" -#: commands/indexcmds.c:2785 commands/indexcmds.c:3466 +#: commands/indexcmds.c:2924 +#, c-format +msgid "cannot move system relations, skipping all" +msgstr "Systemrelationen können nicht verschoben werden, werden alle übersprungen" + +#: commands/indexcmds.c:2971 +#, c-format +msgid "while reindexing partitioned table \"%s.%s\"" +msgstr "beim Reindizieren der partitionierten Tabelle »%s.%s«" + +#: commands/indexcmds.c:2974 +#, c-format +msgid "while reindexing partitioned index \"%s.%s\"" +msgstr "beim Reindizieren des partitionierten Index »%s.%s«" + +#: commands/indexcmds.c:3167 commands/indexcmds.c:4003 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "Tabelle »%s.%s« wurde neu indiziert" -#: commands/indexcmds.c:2908 commands/indexcmds.c:2954 +#: commands/indexcmds.c:3319 commands/indexcmds.c:3371 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "ungültiger Index »%s.%s« kann nicht nebenläufig reindizert werden, wird übersprungen" -#: commands/indexcmds.c:2914 +#: commands/indexcmds.c:3325 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "Exclusion-Constraint-Index »%s.%s« kann nicht nebenläufig reindizert werden, wird übersprungen" -#: commands/indexcmds.c:2996 -#, fuzzy, c-format -#| msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" -msgid "cannot reindex invalid index on TOAST table concurrently" -msgstr "ungültiger Index »%s.%s« kann nicht nebenläufig reindizert werden, wird übersprungen" - -#: commands/indexcmds.c:3024 +#: commands/indexcmds.c:3480 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "diese Art Relation kann nicht nebenläufig reindiziert werden" -#: commands/indexcmds.c:3448 commands/indexcmds.c:3459 +#: commands/indexcmds.c:3501 +#, fuzzy, c-format +#| msgid "cannot move system relation \"%s\"" +msgid "cannot move non-shared relation to tablespace \"%s\"" +msgstr "Systemrelation »%s« kann nicht verschoben werden" + +#: commands/indexcmds.c:3984 commands/indexcmds.c:3996 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "Index »%s.%s« wurde neu indiziert" -#: commands/indexcmds.c:3491 -#, c-format -msgid "REINDEX is not yet implemented for partitioned indexes" -msgstr "REINDEX ist für partitionierte Indexe noch nicht implementiert" - -#: commands/lockcmds.c:91 commands/tablecmds.c:5492 commands/trigger.c:295 -#: rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:928 +#: commands/lockcmds.c:92 commands/tablecmds.c:6024 commands/trigger.c:289 +#: rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:938 #, c-format msgid "\"%s\" is not a table or view" msgstr "»%s« ist keine Tabelle oder Sicht" -#: commands/lockcmds.c:213 rewrite/rewriteHandler.c:1977 -#: rewrite/rewriteHandler.c:3782 -#, c-format -msgid "infinite recursion detected in rules for relation \"%s\"" -msgstr "unendliche Rekursion entdeckt in Regeln für Relation »%s«" - #: commands/matview.c:182 #, c-format msgid "CONCURRENTLY cannot be used when the materialized view is not populated" @@ -8056,239 +8261,234 @@ msgstr "kann materialisierte Sicht »%s« nicht nebenläufig auffrischen" msgid "Create a unique index with no WHERE clause on one or more columns of the materialized view." msgstr "Erzeugen Sie einen Unique Index ohne WHERE-Klausel für eine oder mehrere Spalten der materialisierten Sicht." -#: commands/matview.c:641 +#: commands/matview.c:652 #, c-format msgid "new data for materialized view \"%s\" contains duplicate rows without any null columns" msgstr "neue Daten für materialisierte Sicht »%s« enthalten doppelte Zeilen ohne Spalten mit NULL-Werten" -#: commands/matview.c:643 +#: commands/matview.c:654 #, c-format msgid "Row: %s" msgstr "Zeile: %s" -#: commands/opclasscmds.c:127 +#: commands/opclasscmds.c:124 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\"" msgstr "Operatorfamilie »%s« existiert nicht für Zugriffsmethode »%s«" -#: commands/opclasscmds.c:269 +#: commands/opclasscmds.c:266 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "Operatorfamilie »%s« für Zugriffsmethode »%s« existiert bereits" -#: commands/opclasscmds.c:414 +#: commands/opclasscmds.c:411 #, c-format msgid "must be superuser to create an operator class" msgstr "nur Superuser können Operatorklassen erzeugen" -#: commands/opclasscmds.c:487 commands/opclasscmds.c:869 -#: commands/opclasscmds.c:993 +#: commands/opclasscmds.c:484 commands/opclasscmds.c:901 +#: commands/opclasscmds.c:1047 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "ungültige Operatornummer %d, muss zwischen 1 und %d sein" -#: commands/opclasscmds.c:531 commands/opclasscmds.c:913 -#: commands/opclasscmds.c:1008 +#: commands/opclasscmds.c:529 commands/opclasscmds.c:951 +#: commands/opclasscmds.c:1063 #, c-format msgid "invalid function number %d, must be between 1 and %d" msgstr "ungültige Funktionsnummer %d, muss zwischen 1 und %d sein" -#: commands/opclasscmds.c:559 +#: commands/opclasscmds.c:558 #, c-format msgid "storage type specified more than once" msgstr "Storage-Typ mehrmals angegeben" -#: commands/opclasscmds.c:586 +#: commands/opclasscmds.c:585 #, c-format msgid "storage type cannot be different from data type for access method \"%s\"" msgstr "Storage-Typ kann nicht vom Datentyp der Zugriffsmethode »%s« verschieden sein" -#: commands/opclasscmds.c:602 +#: commands/opclasscmds.c:601 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "Operatorklasse »%s« für Zugriffsmethode »%s« existiert bereits" -#: commands/opclasscmds.c:630 +#: commands/opclasscmds.c:629 #, c-format msgid "could not make operator class \"%s\" be default for type %s" msgstr "konnte Operatorklasse »%s« nicht zum Standard für Typ %s machen" -#: commands/opclasscmds.c:633 +#: commands/opclasscmds.c:632 #, c-format msgid "Operator class \"%s\" already is the default." msgstr "Operatorklasse »%s« ist bereits der Standard." -#: commands/opclasscmds.c:761 +#: commands/opclasscmds.c:792 #, c-format msgid "must be superuser to create an operator family" msgstr "nur Superuser können Operatorfamilien erzeugen" -#: commands/opclasscmds.c:821 +#: commands/opclasscmds.c:852 #, c-format msgid "must be superuser to alter an operator family" msgstr "nur Superuser können Operatorfamilien ändern" -#: commands/opclasscmds.c:878 +#: commands/opclasscmds.c:910 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "Operatorargumenttypen müssen in ALTER OPERATOR FAMILY angegeben werden" -#: commands/opclasscmds.c:941 +#: commands/opclasscmds.c:985 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "STORAGE kann in ALTER OPERATOR FAMILY nicht angegeben werden" -#: commands/opclasscmds.c:1063 +#: commands/opclasscmds.c:1119 #, c-format msgid "one or two argument types must be specified" msgstr "ein oder zwei Argumenttypen müssen angegeben werden" -#: commands/opclasscmds.c:1089 +#: commands/opclasscmds.c:1145 #, c-format msgid "index operators must be binary" msgstr "Indexoperatoren müssen binär sein" -#: commands/opclasscmds.c:1108 +#: commands/opclasscmds.c:1164 #, c-format msgid "access method \"%s\" does not support ordering operators" msgstr "Zugriffsmethode »%s« unterstützt keine Sortieroperatoren" -#: commands/opclasscmds.c:1119 +#: commands/opclasscmds.c:1175 #, c-format msgid "index search operators must return boolean" msgstr "Indexsuchoperatoren müssen Typ boolean zurückgeben" -#: commands/opclasscmds.c:1159 +#: commands/opclasscmds.c:1215 #, c-format -msgid "associated data types for opclass options parsing functions must match opclass input type" -msgstr "" +msgid "associated data types for operator class options parsing functions must match opclass input type" +msgstr "zugehörige Datentypen für Operatorklassenoptionsparsefunktionen müssen mit Operatorklasseneingabetyp übereinstimmen" -#: commands/opclasscmds.c:1166 -#, fuzzy, c-format -#| msgid "strictness of aggregate's forward and inverse transition functions must match" -msgid "left and right associated data types for opclass options parsing functions must match" -msgstr "Striktheit der vorwärtigen und inversen Übergangsfunktionen einer Aggregatfunktion müssen übereinstimmen" +#: commands/opclasscmds.c:1222 +#, c-format +msgid "left and right associated data types for operator class options parsing functions must match" +msgstr "linke und rechte zugehörige Datentypen für Operatorklassenoptionsparsefunktionen müssen übereinstimmen" -#: commands/opclasscmds.c:1174 -#, fuzzy, c-format -#| msgid "invalid XML processing instruction" -msgid "invalid opclass options parsing function" -msgstr "ungültige XML-Verarbeitungsanweisung" +#: commands/opclasscmds.c:1230 +#, c-format +msgid "invalid operator class options parsing function" +msgstr "ungültige Operatorklassenoptionsparsefunktion" -#: commands/opclasscmds.c:1175 +#: commands/opclasscmds.c:1231 #, c-format -msgid "Valid signature of opclass options parsing function is '%s'." -msgstr "" +msgid "Valid signature of operator class options parsing function is %s." +msgstr "Gültige Signatur einer Operatorklassenoptionsparsefunktion ist %s." -#: commands/opclasscmds.c:1194 +#: commands/opclasscmds.c:1250 #, c-format msgid "btree comparison functions must have two arguments" msgstr "btree-Vergleichsfunktionen müssen zwei Argumente haben" -#: commands/opclasscmds.c:1198 +#: commands/opclasscmds.c:1254 #, c-format msgid "btree comparison functions must return integer" msgstr "btree-Vergleichsfunktionen müssen Typ integer zurückgeben" -#: commands/opclasscmds.c:1215 +#: commands/opclasscmds.c:1271 #, c-format msgid "btree sort support functions must accept type \"internal\"" msgstr "btree-Sortierunterstützungsfunktionen müssen Typ »internal« akzeptieren" -#: commands/opclasscmds.c:1219 +#: commands/opclasscmds.c:1275 #, c-format msgid "btree sort support functions must return void" msgstr "btree-Sortierunterstützungsfunktionen müssen Typ void zurückgeben" -#: commands/opclasscmds.c:1230 +#: commands/opclasscmds.c:1286 #, c-format msgid "btree in_range functions must have five arguments" msgstr "btree-in_range-Funktionen müssen fünf Argumente haben" -#: commands/opclasscmds.c:1234 +#: commands/opclasscmds.c:1290 #, c-format msgid "btree in_range functions must return boolean" msgstr "btree-in_range-Funktionen müssen Typ boolean zurückgeben" -#: commands/opclasscmds.c:1250 -#, fuzzy, c-format -#| msgid "btree in_range functions must have five arguments" +#: commands/opclasscmds.c:1306 +#, c-format msgid "btree equal image functions must have one argument" -msgstr "btree-in_range-Funktionen müssen fünf Argumente haben" +msgstr "btree-equal-image-Funktionen müssen ein Argument haben" -#: commands/opclasscmds.c:1254 -#, fuzzy, c-format -#| msgid "btree in_range functions must return boolean" +#: commands/opclasscmds.c:1310 +#, c-format msgid "btree equal image functions must return boolean" -msgstr "btree-in_range-Funktionen müssen Typ boolean zurückgeben" +msgstr "btree-equal-image-Funktionen müssen Typ boolean zurückgeben" -#: commands/opclasscmds.c:1266 -#, fuzzy, c-format -#| msgid "btree in_range functions must return boolean" +#: commands/opclasscmds.c:1323 +#, c-format msgid "btree equal image functions must not be cross-type" -msgstr "btree-in_range-Funktionen müssen Typ boolean zurückgeben" +msgstr "btree-equal-image-Funktionen dürfen nicht typübergreifend sein" -#: commands/opclasscmds.c:1276 +#: commands/opclasscmds.c:1333 #, c-format msgid "hash function 1 must have one argument" msgstr "Hash-Funktion 1 muss ein Argument haben" -#: commands/opclasscmds.c:1280 +#: commands/opclasscmds.c:1337 #, c-format msgid "hash function 1 must return integer" msgstr "Hash-Funktion 1 muss Typ integer zurückgeben" -#: commands/opclasscmds.c:1287 +#: commands/opclasscmds.c:1344 #, c-format msgid "hash function 2 must have two arguments" msgstr "Hash-Funktion 2 muss zwei Argumente haben" -#: commands/opclasscmds.c:1291 +#: commands/opclasscmds.c:1348 #, c-format msgid "hash function 2 must return bigint" msgstr "Hash-Funktion 2 muss Typ bigint zurückgeben" -#: commands/opclasscmds.c:1316 +#: commands/opclasscmds.c:1373 #, c-format msgid "associated data types must be specified for index support function" msgstr "zugehörige Datentypen müssen für Indexunterstützungsfunktion angegeben werden" -#: commands/opclasscmds.c:1341 +#: commands/opclasscmds.c:1398 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "Funktionsnummer %d für (%s,%s) einscheint mehrmals" -#: commands/opclasscmds.c:1348 +#: commands/opclasscmds.c:1405 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "Operatornummer %d für (%s,%s) einscheint mehrmals" -#: commands/opclasscmds.c:1397 +#: commands/opclasscmds.c:1451 #, c-format msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "Operator %d(%s,%s) existiert bereits in Operatorfamilie »%s«" -#: commands/opclasscmds.c:1514 +#: commands/opclasscmds.c:1557 #, c-format msgid "function %d(%s,%s) already exists in operator family \"%s\"" msgstr "Funktion %d(%s,%s) existiert bereits in Operatorfamilie »%s«" -#: commands/opclasscmds.c:1605 +#: commands/opclasscmds.c:1638 #, c-format msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" msgstr "Operator %d(%s,%s) existiert nicht in Operatorfamilie »%s«" -#: commands/opclasscmds.c:1645 +#: commands/opclasscmds.c:1678 #, c-format msgid "function %d(%s,%s) does not exist in operator family \"%s\"" msgstr "Funktion %d(%s,%s) existiert nicht in Operatorfamilie »%s«" -#: commands/opclasscmds.c:1775 +#: commands/opclasscmds.c:1709 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "Operatorklasse »%s« für Zugriffsmethode »%s« existiert bereits in Schema »%s«" -#: commands/opclasscmds.c:1798 +#: commands/opclasscmds.c:1732 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "Operatorfamilie »%s« für Zugriffsmethode »%s« existiert bereits in Schema »%s«" @@ -8298,7 +8498,7 @@ msgstr "Operatorfamilie »%s« für Zugriffsmethode »%s« existiert bereits in msgid "SETOF type not allowed for operator argument" msgstr "SETOF-Typ nicht als Operatorargument erlaubt" -#: commands/operatorcmds.c:152 commands/operatorcmds.c:455 +#: commands/operatorcmds.c:152 commands/operatorcmds.c:479 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "Operator-Attribut »%s« unbekannt" @@ -8308,33 +8508,48 @@ msgstr "Operator-Attribut »%s« unbekannt" msgid "operator function must be specified" msgstr "Operatorfunktion muss angegeben werden" -#: commands/operatorcmds.c:174 +#: commands/operatorcmds.c:181 +#, c-format +msgid "operator argument types must be specified" +msgstr "Operatorargumenttypen müssen angegeben werden" + +#: commands/operatorcmds.c:185 #, c-format -msgid "at least one of leftarg or rightarg must be specified" -msgstr "entweder leftarg oder rightarg (oder beides) muss angegeben werden" +msgid "operator right argument type must be specified" +msgstr "rechtes Argument des Operators muss angegeben werden" -#: commands/operatorcmds.c:278 +#: commands/operatorcmds.c:186 +#, c-format +msgid "Postfix operators are not supported." +msgstr "Postfix-Operatoren werden nicht unterstützt." + +#: commands/operatorcmds.c:290 #, c-format msgid "restriction estimator function %s must return type %s" msgstr "Restriktionsschätzfunktion %s muss Typ %s zurückgeben" -#: commands/operatorcmds.c:324 +#: commands/operatorcmds.c:333 +#, c-format +msgid "join estimator function %s has multiple matches" +msgstr "Join-Schätzfunktion %s hat mehrere Übereinstimmungen" + +#: commands/operatorcmds.c:348 #, c-format msgid "join estimator function %s must return type %s" msgstr "Join-Schätzfunktion %s muss Typ %s zurückgeben" -#: commands/operatorcmds.c:449 +#: commands/operatorcmds.c:473 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "Operator-Attribut »%s« kann nicht geändert werden" -#: commands/policy.c:88 commands/policy.c:401 commands/policy.c:491 -#: commands/tablecmds.c:1499 commands/tablecmds.c:1981 -#: commands/tablecmds.c:2969 commands/tablecmds.c:5471 -#: commands/tablecmds.c:8151 commands/tablecmds.c:15443 -#: commands/tablecmds.c:15478 commands/trigger.c:301 commands/trigger.c:1206 -#: commands/trigger.c:1315 rewrite/rewriteDefine.c:277 -#: rewrite/rewriteDefine.c:933 rewrite/rewriteRemove.c:80 +#: commands/policy.c:88 commands/policy.c:381 commands/policy.c:471 +#: commands/statscmds.c:150 commands/tablecmds.c:1569 commands/tablecmds.c:2158 +#: commands/tablecmds.c:3417 commands/tablecmds.c:6003 +#: commands/tablecmds.c:8872 commands/tablecmds.c:16424 +#: commands/tablecmds.c:16459 commands/trigger.c:295 commands/trigger.c:1271 +#: commands/trigger.c:1380 rewrite/rewriteDefine.c:277 +#: rewrite/rewriteDefine.c:943 rewrite/rewriteRemove.c:80 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "keine Berechtigung: »%s« ist ein Systemkatalog" @@ -8349,42 +8564,47 @@ msgstr "angegebene Rollen außer PUBLIC werden ignoriert" msgid "All roles are members of the PUBLIC role." msgstr "Alle Rollen sind Mitglieder der Rolle PUBLIC." -#: commands/policy.c:515 +#: commands/policy.c:495 #, c-format msgid "role \"%s\" could not be removed from policy \"%s\" on \"%s\"" msgstr "Rolle »%s« konnte nicht aus Policy »%s« für »%s« entfernt werden" -#: commands/policy.c:724 +#: commands/policy.c:704 #, c-format msgid "WITH CHECK cannot be applied to SELECT or DELETE" msgstr "WITH CHECK kann nicht auf SELECT oder DELETE angewendet werden" -#: commands/policy.c:733 commands/policy.c:1038 +#: commands/policy.c:713 commands/policy.c:1018 #, c-format msgid "only WITH CHECK expression allowed for INSERT" msgstr "für INSERT sind nur WITH-CHECK-Ausdrücke erlaubt" -#: commands/policy.c:808 commands/policy.c:1261 +#: commands/policy.c:788 commands/policy.c:1241 #, c-format msgid "policy \"%s\" for table \"%s\" already exists" msgstr "Policy »%s« für Tabelle »%s« existiert bereits" -#: commands/policy.c:1010 commands/policy.c:1289 commands/policy.c:1360 +#: commands/policy.c:990 commands/policy.c:1269 commands/policy.c:1340 #, c-format msgid "policy \"%s\" for table \"%s\" does not exist" msgstr "Policy »%s« für Tabelle »%s« existiert nicht" -#: commands/policy.c:1028 +#: commands/policy.c:1008 #, c-format msgid "only USING expression allowed for SELECT, DELETE" msgstr "für SELECT und DELETE sind nur USING-Ausdrücke erlaubt" -#: commands/portalcmds.c:59 commands/portalcmds.c:182 commands/portalcmds.c:233 +#: commands/portalcmds.c:60 commands/portalcmds.c:187 commands/portalcmds.c:238 #, c-format msgid "invalid cursor name: must not be empty" msgstr "ungültiger Cursorname: darf nicht leer sein" -#: commands/portalcmds.c:190 commands/portalcmds.c:243 +#: commands/portalcmds.c:72 +#, c-format +msgid "cannot create a cursor WITH HOLD within security-restricted operation" +msgstr "kann WITH-HOLD-Cursor nicht in einer sicherheitsbeschränkten Operation erzeugen" + +#: commands/portalcmds.c:195 commands/portalcmds.c:248 #: executor/execCurrent.c:70 utils/adt/xml.c:2594 utils/adt/xml.c:2764 #, c-format msgid "cursor \"%s\" does not exist" @@ -8395,7 +8615,7 @@ msgstr "Cursor »%s« existiert nicht" msgid "invalid statement name: must not be empty" msgstr "ungültiger Anweisungsname: darf nicht leer sein" -#: commands/prepare.c:134 parser/parse_param.c:304 tcop/postgres.c:1498 +#: commands/prepare.c:134 parser/parse_param.c:313 tcop/postgres.c:1473 #, c-format msgid "could not determine data type of parameter $%d" msgstr "konnte Datentyp von Parameter $%d nicht ermitteln" @@ -8425,17 +8645,17 @@ msgstr "%d Parameter erwartet aber %d erhalten." msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "Parameter $%d mit Typ %s kann nicht in erwarteten Typ %s umgewandelt werden" -#: commands/prepare.c:449 +#: commands/prepare.c:447 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "vorbereitete Anweisung »%s« existiert bereits" -#: commands/prepare.c:488 +#: commands/prepare.c:486 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "vorbereitete Anweisung »%s« existiert nicht" -#: commands/proclang.c:67 +#: commands/proclang.c:68 #, c-format msgid "must be superuser to create custom procedural language" msgstr "nur Superuser können maßgeschneiderte prozedurale Sprachen erzeugen" @@ -8463,13 +8683,12 @@ msgstr "nur Superuser können eine Publikation FOR ALL TABLES erzeugen" #: commands/publicationcmds.c:248 #, c-format msgid "wal_level is insufficient to publish logical changes" -msgstr "" +msgstr "wal_level ist nicht ausreichend, um logische Veränderungen zu publizieren" #: commands/publicationcmds.c:249 -#, fuzzy, c-format -#| msgid "Change wal_level to be logical or higher." +#, c-format msgid "Set wal_level to logical before creating subscriptions." -msgstr "Ändern Sie wal_level in logical oder höher." +msgstr "Setzen Sie wal_level auf »logical« bevor Sie Subskriptionen erzeugen." #: commands/publicationcmds.c:369 #, c-format @@ -8481,27 +8700,27 @@ msgstr "Publikation »%s« ist als FOR ALL TABLES definiert" msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "In einer FOR-ALL-TABLES-Publikation können keine Tabellen hinzugefügt oder entfernt werden." -#: commands/publicationcmds.c:683 +#: commands/publicationcmds.c:660 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "Relation »%s« ist nicht Teil der Publikation" -#: commands/publicationcmds.c:726 +#: commands/publicationcmds.c:703 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "keine Berechtigung, um Eigentümer der Publikation »%s« zu ändern" -#: commands/publicationcmds.c:728 +#: commands/publicationcmds.c:705 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "Der Eigentümer einer FOR-ALL-TABLES-Publikation muss ein Superuser sein." -#: commands/schemacmds.c:105 commands/schemacmds.c:281 +#: commands/schemacmds.c:105 commands/schemacmds.c:258 #, c-format msgid "unacceptable schema name \"%s\"" msgstr "inakzeptabler Schemaname »%s«" -#: commands/schemacmds.c:106 commands/schemacmds.c:282 +#: commands/schemacmds.c:106 commands/schemacmds.c:259 #, c-format msgid "The prefix \"pg_\" is reserved for system schemas." msgstr "Der Präfix »pg_« ist für Systemschemas reserviert." @@ -8511,21 +8730,26 @@ msgstr "Der Präfix »pg_« ist für Systemschemas reserviert." msgid "schema \"%s\" already exists, skipping" msgstr "Schema »%s« existiert bereits, wird übersprungen" -#: commands/seclabel.c:60 +#: commands/seclabel.c:129 #, c-format msgid "no security label providers have been loaded" msgstr "es sind keine Security-Label-Provider geladen" -#: commands/seclabel.c:64 +#: commands/seclabel.c:133 #, c-format msgid "must specify provider when multiple security label providers have been loaded" msgstr "Provider muss angegeben werden, wenn mehrere Security-Label-Provider geladen sind" -#: commands/seclabel.c:82 +#: commands/seclabel.c:151 #, c-format msgid "security label provider \"%s\" is not loaded" msgstr "Security-Label-Provider »%s« ist nicht geladen" +#: commands/seclabel.c:158 +#, c-format +msgid "security labels are not supported for this type of object" +msgstr "Security-Labels werden für diese Art Objekt nicht unterstützt" + #: commands/sequence.c:140 #, c-format msgid "unlogged sequences are not supported" @@ -8556,1685 +8780,1771 @@ msgstr "lastval ist in dieser Sitzung noch nicht definiert" msgid "setval: value %s is out of bounds for sequence \"%s\" (%s..%s)" msgstr "setval: Wert %s ist außerhalb des gültigen Bereichs von Sequenz »%s« (%s..%s)" -#: commands/sequence.c:1360 +#: commands/sequence.c:1359 #, c-format msgid "invalid sequence option SEQUENCE NAME" msgstr "ungültige Sequenzoption SEQUENCE NAME" -#: commands/sequence.c:1386 +#: commands/sequence.c:1385 #, c-format msgid "identity column type must be smallint, integer, or bigint" msgstr "Typ von Identitätsspalte muss smallint, integer oder bigint sein" -#: commands/sequence.c:1387 +#: commands/sequence.c:1386 #, c-format msgid "sequence type must be smallint, integer, or bigint" msgstr "Sequenztyp muss smallint, integer oder bigint sein" -#: commands/sequence.c:1421 +#: commands/sequence.c:1420 #, c-format msgid "INCREMENT must not be zero" msgstr "INCREMENT darf nicht null sein" -#: commands/sequence.c:1474 +#: commands/sequence.c:1473 #, c-format msgid "MAXVALUE (%s) is out of range for sequence data type %s" msgstr "MAXVALUE (%s) ist außerhalb des gültigen Bereichs für Sequenzdatentyp %s" -#: commands/sequence.c:1511 +#: commands/sequence.c:1510 #, c-format msgid "MINVALUE (%s) is out of range for sequence data type %s" msgstr "MINVALUE (%s) ist außerhalb des gültigen Bereichs für Sequenzdatentyp %s" -#: commands/sequence.c:1525 +#: commands/sequence.c:1524 #, c-format msgid "MINVALUE (%s) must be less than MAXVALUE (%s)" msgstr "MINVALUE (%s) muss kleiner als MAXVALUE (%s) sein" -#: commands/sequence.c:1552 +#: commands/sequence.c:1551 #, c-format msgid "START value (%s) cannot be less than MINVALUE (%s)" msgstr "START-Wert (%s) kann nicht kleiner als MINVALUE (%s) sein" -#: commands/sequence.c:1564 +#: commands/sequence.c:1563 #, c-format msgid "START value (%s) cannot be greater than MAXVALUE (%s)" msgstr "START-Wert (%s) kann nicht größer als MAXVALUE (%s) sein" -#: commands/sequence.c:1594 +#: commands/sequence.c:1593 #, c-format msgid "RESTART value (%s) cannot be less than MINVALUE (%s)" msgstr "RESTART-Wert (%s) kann nicht kleiner als MINVALUE (%s) sein" -#: commands/sequence.c:1606 +#: commands/sequence.c:1605 #, c-format msgid "RESTART value (%s) cannot be greater than MAXVALUE (%s)" msgstr "RESTART-Wert (%s) kann nicht größer als MAXVALUE (%s) sein" -#: commands/sequence.c:1621 +#: commands/sequence.c:1620 #, c-format msgid "CACHE (%s) must be greater than zero" msgstr "CACHE (%s) muss größer als null sein" -#: commands/sequence.c:1658 +#: commands/sequence.c:1657 #, c-format msgid "invalid OWNED BY option" msgstr "ungültige OWNED BY Option" -#: commands/sequence.c:1659 +#: commands/sequence.c:1658 #, c-format msgid "Specify OWNED BY table.column or OWNED BY NONE." msgstr "Geben Sie OWNED BY tabelle.spalte oder OWNED BY NONE an." -#: commands/sequence.c:1684 +#: commands/sequence.c:1683 #, c-format msgid "referenced relation \"%s\" is not a table or foreign table" msgstr "Relation »%s«, auf die verwiesen wird, ist keine Tabelle oder Fremdtabelle" -#: commands/sequence.c:1691 +#: commands/sequence.c:1690 #, c-format msgid "sequence must have same owner as table it is linked to" msgstr "Sequenz muss selben Eigentümer wie die verknüpfte Tabelle haben" -#: commands/sequence.c:1695 +#: commands/sequence.c:1694 #, c-format msgid "sequence must be in same schema as table it is linked to" msgstr "Sequenz muss im selben Schema wie die verknüpfte Tabelle sein" -#: commands/sequence.c:1717 +#: commands/sequence.c:1716 #, c-format msgid "cannot change ownership of identity sequence" msgstr "kann Eigentümer einer Identitätssequenz nicht ändern" -#: commands/sequence.c:1718 commands/tablecmds.c:12355 -#: commands/tablecmds.c:14869 +#: commands/sequence.c:1717 commands/tablecmds.c:13216 +#: commands/tablecmds.c:15849 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "Sequenz »%s« ist mit Tabelle »%s« verknüpft." -#: commands/statscmds.c:104 commands/statscmds.c:113 +#: commands/statscmds.c:111 commands/statscmds.c:120 tcop/utility.c:1827 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "in CREATE STATISTICS ist nur eine einzelne Relation erlaubt" -#: commands/statscmds.c:131 +#: commands/statscmds.c:138 #, c-format msgid "relation \"%s\" is not a table, foreign table, or materialized view" msgstr "Relation »%s« ist keine Tabelle, Fremdtabelle oder materialisierte Sicht" -#: commands/statscmds.c:174 +#: commands/statscmds.c:188 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "Statistikobjekt »%s« existiert bereits, wird übersprungen" -#: commands/statscmds.c:182 +#: commands/statscmds.c:196 #, c-format msgid "statistics object \"%s\" already exists" msgstr "Statistikobjekt »%s« existiert bereits" -#: commands/statscmds.c:204 commands/statscmds.c:210 +#: commands/statscmds.c:207 +#, c-format +msgid "cannot have more than %d columns in statistics" +msgstr "Statistiken können nicht mehr als %d Spalten enthalten" + +#: commands/statscmds.c:236 #, c-format -msgid "only simple column references are allowed in CREATE STATISTICS" -msgstr "in CREATE STATISTICS sind nur einfache Spaltenverweise erlaubt" +msgid "only simple column references and expressions are allowed in CREATE STATISTICS" +msgstr "in CREATE STATISTICS sind nur einfache Spaltenverweise und Ausdrücke erlaubt" -#: commands/statscmds.c:225 +#: commands/statscmds.c:258 #, c-format msgid "statistics creation on system columns is not supported" msgstr "Statistikerzeugung für Systemspalten wird nicht unterstützt" -#: commands/statscmds.c:232 +#: commands/statscmds.c:265 #, c-format msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" msgstr "Spalte »%s« kann nicht in Statistiken verwendet werden, weil ihr Typ %s keine Standardoperatorklasse für btree hat" -#: commands/statscmds.c:239 +#: commands/statscmds.c:293 +#, fuzzy, c-format +#| msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" +msgid "expression cannot be used in multivariate statistics because its type %s has no default btree operator class" +msgstr "Spalte »%s« kann nicht in Statistiken verwendet werden, weil ihr Typ %s keine Standardoperatorklasse für btree hat" + +#: commands/statscmds.c:314 #, c-format -msgid "cannot have more than %d columns in statistics" -msgstr "Statistiken können nicht mehr als %d Spalten enthalten" +msgid "when building statistics on a single expression, statistics kinds may not be specified" +msgstr "" + +#: commands/statscmds.c:343 +#, c-format +msgid "unrecognized statistics kind \"%s\"" +msgstr "unbekannte Statistikart »%s«" -#: commands/statscmds.c:254 +#: commands/statscmds.c:372 #, c-format msgid "extended statistics require at least 2 columns" msgstr "erweiterte Statistiken benötigen mindestens 2 Spalten" -#: commands/statscmds.c:272 +#: commands/statscmds.c:390 #, c-format msgid "duplicate column name in statistics definition" msgstr "doppelter Spaltenname in Statistikdefinition" -#: commands/statscmds.c:306 +#: commands/statscmds.c:425 #, c-format -msgid "unrecognized statistics kind \"%s\"" -msgstr "unbekannte Statistikart »%s«" +msgid "duplicate expression in statistics definition" +msgstr "doppelter Ausdruck in Statistikdefinition" -#: commands/statscmds.c:442 commands/tablecmds.c:7219 +#: commands/statscmds.c:606 commands/tablecmds.c:7844 #, c-format msgid "statistics target %d is too low" msgstr "Statistikziel %d ist zu niedrig" -#: commands/statscmds.c:450 commands/tablecmds.c:7227 +#: commands/statscmds.c:614 commands/tablecmds.c:7852 #, c-format msgid "lowering statistics target to %d" msgstr "setze Statistikziel auf %d herab" -#: commands/statscmds.c:473 -#, fuzzy, c-format -#| msgid "statistics object \"%s\" does not exist, skipping" +#: commands/statscmds.c:637 +#, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" -msgstr "Statistikobjekt »%s« existiert nicht, wird übersprungen" +msgstr "Statistikobjekt »%s.%s« existiert nicht, wird übersprungen" -#: commands/subscriptioncmds.c:181 +#: commands/subscriptioncmds.c:221 #, c-format msgid "unrecognized subscription parameter: \"%s\"" msgstr "unbekannter Subskriptionsparameter: »%s«" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:201 -#: commands/subscriptioncmds.c:207 commands/subscriptioncmds.c:226 -#: commands/subscriptioncmds.c:232 +#: commands/subscriptioncmds.c:235 commands/subscriptioncmds.c:241 +#: commands/subscriptioncmds.c:247 commands/subscriptioncmds.c:266 +#: commands/subscriptioncmds.c:272 #, c-format msgid "%s and %s are mutually exclusive options" msgstr "die Optionen %s und %s schließen einander aus" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:239 commands/subscriptioncmds.c:245 +#: commands/subscriptioncmds.c:279 commands/subscriptioncmds.c:285 #, c-format msgid "subscription with %s must also set %s" msgstr "Subskription mit %s muss auch %s setzen" -#: commands/subscriptioncmds.c:287 -#, c-format -msgid "publication name \"%s\" used more than once" -msgstr "Publikationsname »%s« mehrmals angegeben" - -#: commands/subscriptioncmds.c:351 +#: commands/subscriptioncmds.c:378 #, c-format msgid "must be superuser to create subscriptions" msgstr "nur Superuser können Subskriptionen erzeugen" -#: commands/subscriptioncmds.c:442 commands/subscriptioncmds.c:530 -#: replication/logical/tablesync.c:857 replication/logical/worker.c:2085 +#: commands/subscriptioncmds.c:471 commands/subscriptioncmds.c:568 +#: replication/logical/tablesync.c:963 replication/logical/worker.c:3097 #, c-format msgid "could not connect to the publisher: %s" msgstr "konnte nicht mit dem Publikationsserver verbinden: %s" -#: commands/subscriptioncmds.c:484 +#: commands/subscriptioncmds.c:513 #, c-format msgid "created replication slot \"%s\" on publisher" msgstr "Replikations-Slot »%s« wurde auf dem Publikationsserver erzeugt" #. translator: %s is an SQL ALTER statement -#: commands/subscriptioncmds.c:497 +#: commands/subscriptioncmds.c:526 #, c-format msgid "tables were not subscribed, you will have to run %s to subscribe the tables" msgstr "keine Tabellen wurden zur Subskription hinzugefügt; Sie müssen %s ausführen, um Tabellen zur Subskription hinzuzufügen" -#: commands/subscriptioncmds.c:586 -#, c-format -msgid "table \"%s.%s\" added to subscription \"%s\"" -msgstr "Tabelle »%s.%s« wurde zur Subskription »%s« hinzugefügt" - -#: commands/subscriptioncmds.c:610 -#, c-format -msgid "table \"%s.%s\" removed from subscription \"%s\"" -msgstr "Tabelle »%s.%s« wurde aus Subskription »%s« entfernt" - -#: commands/subscriptioncmds.c:682 +#: commands/subscriptioncmds.c:824 #, c-format msgid "cannot set %s for enabled subscription" msgstr "für eine aktivierte Subskription kann nicht %s gesetzt werden" -#: commands/subscriptioncmds.c:717 +#: commands/subscriptioncmds.c:880 #, c-format msgid "cannot enable subscription that does not have a slot name" msgstr "eine Subskription ohne Slot-Name kann nicht aktiviert werden" -#: commands/subscriptioncmds.c:763 +#: commands/subscriptioncmds.c:932 commands/subscriptioncmds.c:980 #, c-format msgid "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION mit Refresh ist für deaktivierte Subskriptionen nicht erlaubt" -#: commands/subscriptioncmds.c:764 +#: commands/subscriptioncmds.c:933 commands/subscriptioncmds.c:981 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgstr "Verwenden Sie ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." -#: commands/subscriptioncmds.c:782 +#: commands/subscriptioncmds.c:1001 #, c-format msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH ist für eine deaktivierte Subskription nicht erlaubt" -#: commands/subscriptioncmds.c:862 +#: commands/subscriptioncmds.c:1089 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "Subskription »%s« existiert nicht, wird übersprungen" -#: commands/subscriptioncmds.c:988 +#: commands/subscriptioncmds.c:1341 #, c-format -msgid "could not connect to publisher when attempting to drop the replication slot \"%s\"" -msgstr "konnte beim Versuch den Replikations-Slot »%s« zu löschen nicht mit dem Publikationsserver verbinden" +msgid "dropped replication slot \"%s\" on publisher" +msgstr "Replikations-Slot »%s« auf dem Publikationsserver wurde gelöscht" + +#: commands/subscriptioncmds.c:1350 commands/subscriptioncmds.c:1357 +#, c-format +msgid "could not drop replication slot \"%s\" on publisher: %s" +msgstr "konnte Replikations-Slot »%s« auf dem Publikationsserver nicht löschen: %s" + +#: commands/subscriptioncmds.c:1391 +#, c-format +msgid "permission denied to change owner of subscription \"%s\"" +msgstr "keine Berechtigung, um Eigentümer der Subskription »%s« zu ändern" + +#: commands/subscriptioncmds.c:1393 +#, c-format +msgid "The owner of a subscription must be a superuser." +msgstr "Der Eigentümer einer Subskription muss ein Superuser sein." + +#: commands/subscriptioncmds.c:1508 +#, c-format +msgid "could not receive list of replicated tables from the publisher: %s" +msgstr "konnte Liste der replizierten Tabellen nicht vom Publikationsserver empfangen: %s" -#: commands/subscriptioncmds.c:990 commands/subscriptioncmds.c:1005 -#: replication/logical/tablesync.c:906 replication/logical/tablesync.c:928 +#: commands/subscriptioncmds.c:1572 #, c-format -msgid "The error was: %s" -msgstr "Der Fehler war: %s" +msgid "could not connect to publisher when attempting to drop replication slot \"%s\": %s" +msgstr "konnte beim Versuch den Replikations-Slot »%s« zu löschen nicht mit dem Publikationsserver verbinden: %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:992 +#: commands/subscriptioncmds.c:1575 #, c-format msgid "Use %s to disassociate the subscription from the slot." msgstr "Verwenden Sie %s, um die Subskription vom Slot zu trennen." -#: commands/subscriptioncmds.c:1003 +#: commands/subscriptioncmds.c:1605 #, c-format -msgid "could not drop the replication slot \"%s\" on publisher" -msgstr "konnte Replikations-Slot »%s« auf dem Publikationsserver nicht löschen" +msgid "publication name \"%s\" used more than once" +msgstr "Publikationsname »%s« mehrmals angegeben" -#: commands/subscriptioncmds.c:1008 +#: commands/subscriptioncmds.c:1649 #, c-format -msgid "dropped replication slot \"%s\" on publisher" -msgstr "Replikations-Slot »%s« auf dem Publikationsserver wurde gelöscht" +msgid "publication \"%s\" is already in subscription \"%s\"" +msgstr "Publikation »%s« ist bereits in Subskription »%s«" -#: commands/subscriptioncmds.c:1045 +#: commands/subscriptioncmds.c:1663 #, c-format -msgid "permission denied to change owner of subscription \"%s\"" -msgstr "keine Berechtigung, um Eigentümer der Subskription »%s« zu ändern" +msgid "publication \"%s\" is not in subscription \"%s\"" +msgstr "Publikation »%s« ist nicht in Subskription »%s«" -#: commands/subscriptioncmds.c:1047 +#: commands/subscriptioncmds.c:1674 #, c-format -msgid "The owner of a subscription must be a superuser." -msgstr "Der Eigentümer einer Subskription muss ein Superuser sein." +msgid "subscription must contain at least one publication" +msgstr "Subskription muss mindestens eine Publikation enthalten" -#: commands/subscriptioncmds.c:1162 -#, c-format -msgid "could not receive list of replicated tables from the publisher: %s" -msgstr "konnte Liste der replizierten Tabellen nicht vom Publikationsserver empfangen: %s" - -#: commands/tablecmds.c:228 commands/tablecmds.c:270 +#: commands/tablecmds.c:241 commands/tablecmds.c:283 #, c-format msgid "table \"%s\" does not exist" msgstr "Tabelle »%s« existiert nicht" -#: commands/tablecmds.c:229 commands/tablecmds.c:271 +#: commands/tablecmds.c:242 commands/tablecmds.c:284 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "Tabelle »%s« existiert nicht, wird übersprungen" -#: commands/tablecmds.c:231 commands/tablecmds.c:273 +#: commands/tablecmds.c:244 commands/tablecmds.c:286 msgid "Use DROP TABLE to remove a table." msgstr "Verwenden Sie DROP TABLE, um eine Tabelle zu löschen." -#: commands/tablecmds.c:234 +#: commands/tablecmds.c:247 #, c-format msgid "sequence \"%s\" does not exist" msgstr "Sequenz »%s« existiert nicht" -#: commands/tablecmds.c:235 +#: commands/tablecmds.c:248 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "Sequenz »%s« existiert nicht, wird übersprungen" -#: commands/tablecmds.c:237 +#: commands/tablecmds.c:250 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "Verwenden Sie DROP SEQUENCE, um eine Sequenz zu löschen." -#: commands/tablecmds.c:240 +#: commands/tablecmds.c:253 #, c-format msgid "view \"%s\" does not exist" msgstr "Sicht »%s« existiert nicht" -#: commands/tablecmds.c:241 +#: commands/tablecmds.c:254 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "Sicht »%s« existiert nicht, wird übersprungen" -#: commands/tablecmds.c:243 +#: commands/tablecmds.c:256 msgid "Use DROP VIEW to remove a view." msgstr "Verwenden Sie DROP VIEW, um eine Sicht zu löschen." -#: commands/tablecmds.c:246 +#: commands/tablecmds.c:259 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "materialisierte Sicht »%s« existiert nicht" -#: commands/tablecmds.c:247 +#: commands/tablecmds.c:260 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "materialisierte Sicht »%s« existiert nicht, wird übersprungen" -#: commands/tablecmds.c:249 +#: commands/tablecmds.c:262 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Verwenden Sie DROP MATERIALIZED VIEW, um eine materialisierte Sicht zu löschen." -#: commands/tablecmds.c:252 commands/tablecmds.c:276 commands/tablecmds.c:17042 -#: parser/parse_utilcmd.c:2084 +#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18270 +#: parser/parse_utilcmd.c:2257 #, c-format msgid "index \"%s\" does not exist" msgstr "Index »%s« existiert nicht" -#: commands/tablecmds.c:253 commands/tablecmds.c:277 +#: commands/tablecmds.c:266 commands/tablecmds.c:290 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "Index »%s« existiert nicht, wird übersprungen" -#: commands/tablecmds.c:255 commands/tablecmds.c:279 +#: commands/tablecmds.c:268 commands/tablecmds.c:292 msgid "Use DROP INDEX to remove an index." msgstr "Verwenden Sie DROP INDEX, um einen Index zu löschen." -#: commands/tablecmds.c:260 +#: commands/tablecmds.c:273 #, c-format msgid "\"%s\" is not a type" msgstr "»%s« ist kein Typ" -#: commands/tablecmds.c:261 +#: commands/tablecmds.c:274 msgid "Use DROP TYPE to remove a type." msgstr "Verwenden Sie DROP TYPE, um einen Typen zu löschen." -#: commands/tablecmds.c:264 commands/tablecmds.c:12194 -#: commands/tablecmds.c:14649 +#: commands/tablecmds.c:277 commands/tablecmds.c:13055 +#: commands/tablecmds.c:15548 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "Fremdtabelle »%s« existiert nicht" -#: commands/tablecmds.c:265 +#: commands/tablecmds.c:278 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "Fremdtabelle »%s« existiert nicht, wird übersprungen" -#: commands/tablecmds.c:267 +#: commands/tablecmds.c:280 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Verwenden Sie DROP FOREIGN TABLE, um eine Fremdtabelle zu löschen." -#: commands/tablecmds.c:618 +#: commands/tablecmds.c:664 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT kann nur mit temporären Tabellen verwendet werden" -#: commands/tablecmds.c:649 +#: commands/tablecmds.c:695 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "kann temporäre Tabelle nicht in einer sicherheitsbeschränkten Operation erzeugen" -#: commands/tablecmds.c:685 commands/tablecmds.c:13553 +#: commands/tablecmds.c:731 commands/tablecmds.c:14339 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "von der Relation »%s« würde mehrmals geerbt werden" -#: commands/tablecmds.c:866 +#: commands/tablecmds.c:924 #, c-format msgid "specifying a table access method is not supported on a partitioned table" msgstr "Angabe einer Tabellenzugriffsmethode wird für partitionierte Tabellen nicht unterstützt" -#: commands/tablecmds.c:962 +#: commands/tablecmds.c:1020 #, c-format msgid "\"%s\" is not partitioned" msgstr "»%s« ist nicht partitioniert" -#: commands/tablecmds.c:1056 +#: commands/tablecmds.c:1115 #, c-format msgid "cannot partition using more than %d columns" msgstr "Partitionierung kann nicht mehr als %d Spalten verwenden" -#: commands/tablecmds.c:1112 -#, fuzzy, c-format -#| msgid "cannot create index on partitioned table \"%s\"" +#: commands/tablecmds.c:1171 +#, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" -msgstr "kann keinen Index für partitionierte Tabelle »%s« erzeugen" +msgstr "kann keine Fremdpartition der partitionierten Tabelle »%s« erzeugen" -#: commands/tablecmds.c:1114 -#, fuzzy, c-format -#| msgid "\"%s\" is not a foreign table" +#: commands/tablecmds.c:1173 +#, c-format msgid "Table \"%s\" contains indexes that are unique." -msgstr "»%s« ist keine Fremdtabelle" +msgstr "Tabelle »%s« enthält Unique Indexe." -#: commands/tablecmds.c:1277 +#: commands/tablecmds.c:1336 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY unterstützt das Löschen von mehreren Objekten nicht" -#: commands/tablecmds.c:1281 +#: commands/tablecmds.c:1340 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY unterstützt kein CASCADE" -#: commands/tablecmds.c:1641 +#: commands/tablecmds.c:1441 +#, c-format +msgid "cannot drop partitioned index \"%s\" concurrently" +msgstr "kann partitionierten Index »%s« nicht nebenläufig löschen" + +#: commands/tablecmds.c:1713 #, c-format msgid "cannot truncate only a partitioned table" msgstr "kann nicht nur eine partitionierte Tabelle leeren" -#: commands/tablecmds.c:1642 +#: commands/tablecmds.c:1714 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "Lassen Sie das Schlüsselwort ONLY weg oder wenden Sie TRUNCATE ONLY direkt auf die Partitionen an." -#: commands/tablecmds.c:1711 +#: commands/tablecmds.c:1787 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "Truncate-Vorgang leert ebenfalls Tabelle »%s«" -#: commands/tablecmds.c:2018 +#: commands/tablecmds.c:2146 +#, c-format +msgid "cannot truncate foreign table \"%s\"" +msgstr "kann Fremdtabelle »%s« nicht leeren" + +#: commands/tablecmds.c:2195 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "kann temporäre Tabellen anderer Sitzungen nicht leeren" -#: commands/tablecmds.c:2242 commands/tablecmds.c:13450 +#: commands/tablecmds.c:2457 commands/tablecmds.c:14236 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "von partitionierter Tabelle »%s« kann nicht geerbt werden" -#: commands/tablecmds.c:2247 +#: commands/tablecmds.c:2462 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "von Partition »%s« kann nicht geerbt werden" -#: commands/tablecmds.c:2255 parser/parse_utilcmd.c:2314 -#: parser/parse_utilcmd.c:2456 +#: commands/tablecmds.c:2470 parser/parse_utilcmd.c:2487 +#: parser/parse_utilcmd.c:2629 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "geerbte Relation »%s« ist keine Tabelle oder Fremdtabelle" -#: commands/tablecmds.c:2267 +#: commands/tablecmds.c:2482 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "eine temporäre Relation kann nicht als Partition der permanenten Relation »%s« erzeugt werden" -#: commands/tablecmds.c:2276 commands/tablecmds.c:13429 +#: commands/tablecmds.c:2491 commands/tablecmds.c:14215 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "von temporärer Relation »%s« kann nicht geerbt werden" -#: commands/tablecmds.c:2286 commands/tablecmds.c:13437 +#: commands/tablecmds.c:2501 commands/tablecmds.c:14223 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "von temporärer Relation einer anderen Sitzung kann nicht geerbt werden" -#: commands/tablecmds.c:2337 +#: commands/tablecmds.c:2555 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "geerbte Definitionen von Spalte »%s« werden zusammengeführt" -#: commands/tablecmds.c:2345 +#: commands/tablecmds.c:2563 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "geerbte Spalte »%s« hat Typkonflikt" -#: commands/tablecmds.c:2347 commands/tablecmds.c:2370 -#: commands/tablecmds.c:2583 commands/tablecmds.c:2613 -#: parser/parse_coerce.c:1935 parser/parse_coerce.c:1955 -#: parser/parse_coerce.c:1975 parser/parse_coerce.c:2030 -#: parser/parse_coerce.c:2107 parser/parse_coerce.c:2141 -#: parser/parse_param.c:218 +#: commands/tablecmds.c:2565 commands/tablecmds.c:2588 +#: commands/tablecmds.c:2605 commands/tablecmds.c:2861 +#: commands/tablecmds.c:2891 commands/tablecmds.c:2905 +#: parser/parse_coerce.c:2090 parser/parse_coerce.c:2110 +#: parser/parse_coerce.c:2130 parser/parse_coerce.c:2150 +#: parser/parse_coerce.c:2205 parser/parse_coerce.c:2238 +#: parser/parse_coerce.c:2316 parser/parse_coerce.c:2348 +#: parser/parse_coerce.c:2382 parser/parse_coerce.c:2402 +#: parser/parse_param.c:227 #, c-format msgid "%s versus %s" msgstr "%s gegen %s" -#: commands/tablecmds.c:2356 +#: commands/tablecmds.c:2574 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "geerbte Spalte »%s« hat Sortierfolgenkonflikt" -#: commands/tablecmds.c:2358 commands/tablecmds.c:2595 -#: commands/tablecmds.c:5973 +#: commands/tablecmds.c:2576 commands/tablecmds.c:2873 +#: commands/tablecmds.c:6503 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "»%s« gegen »%s«" -#: commands/tablecmds.c:2368 +#: commands/tablecmds.c:2586 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "geerbte Spalte »%s« hat einen Konflikt bei einem Storage-Parameter" -#: commands/tablecmds.c:2384 +#: commands/tablecmds.c:2603 commands/tablecmds.c:2903 +#, c-format +msgid "column \"%s\" has a compression method conflict" +msgstr "für Spalte »%s« besteht ein Komprimierungsmethodenkonflikt" + +#: commands/tablecmds.c:2618 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "geerbte Spalte »%s« hat einen Generierungskonflikt" -#: commands/tablecmds.c:2489 commands/tablecmds.c:10999 -#: parser/parse_utilcmd.c:1094 parser/parse_utilcmd.c:1181 -#: parser/parse_utilcmd.c:1597 parser/parse_utilcmd.c:1706 +#: commands/tablecmds.c:2712 commands/tablecmds.c:2767 +#: commands/tablecmds.c:11784 parser/parse_utilcmd.c:1301 +#: parser/parse_utilcmd.c:1344 parser/parse_utilcmd.c:1752 +#: parser/parse_utilcmd.c:1860 #, c-format msgid "cannot convert whole-row table reference" msgstr "kann Verweis auf ganze Zeile der Tabelle nicht umwandeln" -#: commands/tablecmds.c:2490 parser/parse_utilcmd.c:1182 +#: commands/tablecmds.c:2713 parser/parse_utilcmd.c:1302 +#, c-format +msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." +msgstr "Generierungsausdruck für Spalte »%s« enthält einen Verweis auf die ganze Zeile der Tabelle »%s«." + +#: commands/tablecmds.c:2768 parser/parse_utilcmd.c:1345 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "Constraint »%s« enthält einen Verweis auf die ganze Zeile der Tabelle »%s«." -#: commands/tablecmds.c:2569 +#: commands/tablecmds.c:2847 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "Spalte »%s« wird mit geerbter Definition zusammengeführt" -#: commands/tablecmds.c:2573 +#: commands/tablecmds.c:2851 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "Spalte »%s« wird verschoben und mit geerbter Definition zusammengeführt" -#: commands/tablecmds.c:2574 +#: commands/tablecmds.c:2852 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "Benutzerdefinierte Spalte wurde auf die Position der geerbten Spalte verschoben." -#: commands/tablecmds.c:2581 +#: commands/tablecmds.c:2859 #, c-format msgid "column \"%s\" has a type conflict" msgstr "für Spalte »%s« besteht ein Typkonflikt" -#: commands/tablecmds.c:2593 +#: commands/tablecmds.c:2871 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "für Spalte »%s« besteht ein Sortierfolgenkonflikt" -#: commands/tablecmds.c:2611 +#: commands/tablecmds.c:2889 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "für Spalte »%s« besteht ein Konflikt bei einem Storage-Parameter" -#: commands/tablecmds.c:2714 +#: commands/tablecmds.c:2930 +#, c-format +msgid "child column \"%s\" specifies generation expression" +msgstr "abgeleitete Spalte »%s« gibt einen Generierungsausdruck an" + +#: commands/tablecmds.c:2932 +#, c-format +msgid "Omit the generation expression in the definition of the child table column to inherit the generation expression from the parent table." +msgstr "Lassen Sie den Generierungsausdruck in der Definition der abgeleiteten Spalte weg, um den Generierungsausdruck der Elterntabelle zu erben." + +#: commands/tablecmds.c:2936 +#, c-format +msgid "column \"%s\" inherits from generated column but specifies default" +msgstr "Spalte »%s« erbt von einer generierten Spalte aber hat einen Vorgabewert angegeben" + +#: commands/tablecmds.c:2941 +#, c-format +msgid "column \"%s\" inherits from generated column but specifies identity" +msgstr "Spalte »%s« erbt von einer generierten Spalte aber ist als Identitätsspalte definiert" + +#: commands/tablecmds.c:3050 +#, c-format +msgid "column \"%s\" inherits conflicting generation expressions" +msgstr "Spalte »%s« erbt widersprüchliche Generierungsausdrücke" + +#: commands/tablecmds.c:3055 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "Spalte »%s« erbt widersprüchliche Vorgabewerte" -#: commands/tablecmds.c:2716 +#: commands/tablecmds.c:3057 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Um den Konflikt zu lösen, geben Sie einen Vorgabewert ausdrücklich an." -#: commands/tablecmds.c:2761 +#: commands/tablecmds.c:3103 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "Check-Constraint-Name »%s« erscheint mehrmals, aber mit unterschiedlichen Ausdrücken" -#: commands/tablecmds.c:2938 +#: commands/tablecmds.c:3316 +#, c-format +msgid "cannot move temporary tables of other sessions" +msgstr "temporäre Tabellen anderer Sitzungen können nicht verschoben werden" + +#: commands/tablecmds.c:3386 #, c-format msgid "cannot rename column of typed table" msgstr "Spalte einer getypten Tabelle kann nicht umbenannt werden" -#: commands/tablecmds.c:2957 +#: commands/tablecmds.c:3405 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "»%s« ist weder Tabelle, Sicht, materialisierte Sicht, zusammengesetzter Typ, Index noch Fremdtabelle" -#: commands/tablecmds.c:3051 +#: commands/tablecmds.c:3499 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "vererbte Spalte »%s« muss ebenso in den abgeleiteten Tabellen umbenannt werden" -#: commands/tablecmds.c:3083 +#: commands/tablecmds.c:3531 #, c-format msgid "cannot rename system column \"%s\"" msgstr "Systemspalte »%s« kann nicht umbenannt werden" -#: commands/tablecmds.c:3098 +#: commands/tablecmds.c:3546 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "kann vererbte Spalte »%s« nicht umbenennen" -#: commands/tablecmds.c:3250 +#: commands/tablecmds.c:3698 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "vererbter Constraint »%s« muss ebenso in den abgeleiteten Tabellen umbenannt werden" -#: commands/tablecmds.c:3257 +#: commands/tablecmds.c:3705 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "kann vererbten Constraint »%s« nicht umbenennen" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3490 +#: commands/tablecmds.c:3938 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "%s mit Relation »%s« nicht möglich, weil sie von aktiven Anfragen in dieser Sitzung verwendet wird" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3499 +#: commands/tablecmds.c:3947 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "%s mit Relation »%s« nicht möglich, weil es anstehende Trigger-Ereignisse dafür gibt" -#: commands/tablecmds.c:4122 commands/tablecmds.c:4137 -#, fuzzy, c-format -#| msgid "cannot change inheritance of partitioned table" +#: commands/tablecmds.c:4411 +#, c-format +msgid "cannot alter partition \"%s\" with an incomplete detach" +msgstr "kann Partition »%s« mit einem unvollständigen Detach nicht ändern" + +#: commands/tablecmds.c:4413 +#, c-format +msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." +msgstr "Verwendet Sie ALTER TABLE ... DETACH PARTITION ... FINALIZE, um die unerledigte Detach-Operation zu vervollständigen." + +#: commands/tablecmds.c:4605 commands/tablecmds.c:4620 +#, c-format msgid "cannot change persistence setting twice" -msgstr "Vererbung einer partitionierten Tabelle kann nicht geändert werden" +msgstr "Persistenzeinstellung kann nicht zweimal geändert werden" -#: commands/tablecmds.c:4832 +#: commands/tablecmds.c:5363 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "Systemrelation »%s« kann nicht neu geschrieben werden" -#: commands/tablecmds.c:4838 +#: commands/tablecmds.c:5369 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "Tabelle »%s«, die als Katalogtabelle verwendet wird, kann nicht neu geschrieben werden" -#: commands/tablecmds.c:4848 +#: commands/tablecmds.c:5379 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "kann temporäre Tabellen anderer Sitzungen nicht neu schreiben" -#: commands/tablecmds.c:5137 +#: commands/tablecmds.c:5837 #, c-format -msgid "rewriting table \"%s\"" -msgstr "schreibe Tabelle »%s« neu" - -#: commands/tablecmds.c:5141 -#, c-format -msgid "verifying table \"%s\"" -msgstr "überprüfe Tabelle »%s«" - -#: commands/tablecmds.c:5306 -#, fuzzy, c-format -#| msgid "column \"%s\" of table \"%s\" contains null values" msgid "column \"%s\" of relation \"%s\" contains null values" -msgstr "Spalte »%s« von Tabelle »%s« enthält NULL-Werte" +msgstr "Spalte »%s« von Relation »%s« enthält NULL-Werte" -#: commands/tablecmds.c:5323 commands/tablecmds.c:10195 -#, fuzzy, c-format -#| msgid "check constraint \"%s\" is violated by some row" +#: commands/tablecmds.c:5854 +#, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" -msgstr "Check-Constraint »%s« wird von irgendeiner Zeile verletzt" +msgstr "Check-Constraint »%s« von Relation »%s« wird von irgendeiner Zeile verletzt" -#: commands/tablecmds.c:5342 partitioning/partbounds.c:3232 -#, fuzzy, c-format -#| msgid "partition constraint is violated by some row" +#: commands/tablecmds.c:5873 partitioning/partbounds.c:3279 +#, c-format msgid "updated partition constraint for default partition \"%s\" would be violated by some row" -msgstr "Partitions-Constraint wird von irgendeiner Zeile verletzt" +msgstr "aktualisierter Partitions-Constraint der Standardpartition »%s« würde von irgendeiner Zeile verletzt werden" -#: commands/tablecmds.c:5348 -#, fuzzy, c-format -#| msgid "partition constraint is violated by some row" +#: commands/tablecmds.c:5879 +#, c-format msgid "partition constraint of relation \"%s\" is violated by some row" -msgstr "Partitions-Constraint wird von irgendeiner Zeile verletzt" +msgstr "Partitions-Constraint von Relation »%s« wird von irgendeiner Zeile verletzt" -#: commands/tablecmds.c:5495 commands/trigger.c:1200 commands/trigger.c:1306 +#: commands/tablecmds.c:6027 commands/trigger.c:1265 commands/trigger.c:1371 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "»%s« ist keine Tabelle, Sicht oder Fremdtabelle" -#: commands/tablecmds.c:5498 +#: commands/tablecmds.c:6030 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "»%s« ist weder Tabelle, Sicht, materialisierte Sicht noch Index" -#: commands/tablecmds.c:5504 +#: commands/tablecmds.c:6036 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "»%s« ist weder Tabelle, materialisierte Sicht noch Index" -#: commands/tablecmds.c:5507 +#: commands/tablecmds.c:6039 #, c-format msgid "\"%s\" is not a table, materialized view, or foreign table" msgstr "»%s« ist weder Tabelle, materialisierte Sicht noch Fremdtabelle" -#: commands/tablecmds.c:5510 +#: commands/tablecmds.c:6042 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "»%s« ist keine Tabelle oder Fremdtabelle" -#: commands/tablecmds.c:5513 +#: commands/tablecmds.c:6045 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "»%s« ist weder Tabelle, zusammengesetzter Typ noch Fremdtabelle" -#: commands/tablecmds.c:5516 +#: commands/tablecmds.c:6048 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "»%s« ist weder Tabelle, materialisierte Sicht, Index noch Fremdtabelle" -#: commands/tablecmds.c:5526 +#: commands/tablecmds.c:6058 #, c-format msgid "\"%s\" is of the wrong type" msgstr "»%s« hat den falschen Typ" -#: commands/tablecmds.c:5733 commands/tablecmds.c:5740 +#: commands/tablecmds.c:6261 commands/tablecmds.c:6268 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "kann Typ »%s« nicht ändern, weil Spalte »%s.%s« ihn verwendet" -#: commands/tablecmds.c:5747 +#: commands/tablecmds.c:6275 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "kann Fremdtabelle »%s« nicht ändern, weil Spalte »%s.%s« ihren Zeilentyp verwendet" -#: commands/tablecmds.c:5754 +#: commands/tablecmds.c:6282 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "kann Tabelle »%s« nicht ändern, weil Spalte »%s.%s« ihren Zeilentyp verwendet" -#: commands/tablecmds.c:5810 +#: commands/tablecmds.c:6338 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "kann Typ »%s« nicht ändern, weil er der Typ einer getypten Tabelle ist" -#: commands/tablecmds.c:5812 +#: commands/tablecmds.c:6340 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Verwenden Sie ALTER ... CASCADE, um die getypten Tabellen ebenfalls zu ändern." -#: commands/tablecmds.c:5858 +#: commands/tablecmds.c:6386 #, c-format msgid "type %s is not a composite type" msgstr "Typ %s ist kein zusammengesetzter Typ" -#: commands/tablecmds.c:5885 +#: commands/tablecmds.c:6413 #, c-format msgid "cannot add column to typed table" msgstr "zu einer getypten Tabelle kann keine Spalte hinzugefügt werden" -#: commands/tablecmds.c:5936 +#: commands/tablecmds.c:6466 #, c-format msgid "cannot add column to a partition" msgstr "zu einer Partition kann keine Spalte hinzugefügt werden" -#: commands/tablecmds.c:5965 commands/tablecmds.c:13680 +#: commands/tablecmds.c:6495 commands/tablecmds.c:14466 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "abgeleitete Tabelle »%s« hat unterschiedlichen Typ für Spalte »%s«" -#: commands/tablecmds.c:5971 commands/tablecmds.c:13687 +#: commands/tablecmds.c:6501 commands/tablecmds.c:14473 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "abgeleitete Tabelle »%s« hat unterschiedliche Sortierfolge für Spalte »%s«" -#: commands/tablecmds.c:5985 +#: commands/tablecmds.c:6515 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "Definition von Spalte »%s« für abgeleitete Tabelle »%s« wird zusammengeführt" -#: commands/tablecmds.c:6028 +#: commands/tablecmds.c:6558 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "eine Identitätsspalte kann nicht rekursiv zu einer Tabelle hinzugefügt werden, die abgeleitete Tabellen hat" -#: commands/tablecmds.c:6265 +#: commands/tablecmds.c:6810 #, c-format msgid "column must be added to child tables too" msgstr "Spalte muss ebenso in den abgeleiteten Tabellen hinzugefügt werden" -#: commands/tablecmds.c:6343 +#: commands/tablecmds.c:6888 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "Spalte »%s« von Relation »%s« existiert bereits, wird übersprungen" -#: commands/tablecmds.c:6350 +#: commands/tablecmds.c:6895 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "Spalte »%s« von Relation »%s« existiert bereits" -#: commands/tablecmds.c:6416 commands/tablecmds.c:10637 +#: commands/tablecmds.c:6961 commands/tablecmds.c:11422 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "Constraint kann nicht nur von der partitionierten Tabelle entfernt werden, wenn Partitionen existieren" -#: commands/tablecmds.c:6417 commands/tablecmds.c:6686 -#: commands/tablecmds.c:7590 commands/tablecmds.c:10638 +#: commands/tablecmds.c:6962 commands/tablecmds.c:7266 +#: commands/tablecmds.c:8287 commands/tablecmds.c:11423 #, c-format msgid "Do not specify the ONLY keyword." msgstr "Lassen Sie das Schlüsselwort ONLY weg." -#: commands/tablecmds.c:6454 commands/tablecmds.c:6612 -#: commands/tablecmds.c:6754 commands/tablecmds.c:6839 -#: commands/tablecmds.c:6933 commands/tablecmds.c:6992 -#: commands/tablecmds.c:7094 commands/tablecmds.c:7260 -#: commands/tablecmds.c:7330 commands/tablecmds.c:7422 -#: commands/tablecmds.c:10792 commands/tablecmds.c:12217 +#: commands/tablecmds.c:6999 commands/tablecmds.c:7192 +#: commands/tablecmds.c:7334 commands/tablecmds.c:7448 +#: commands/tablecmds.c:7542 commands/tablecmds.c:7601 +#: commands/tablecmds.c:7719 commands/tablecmds.c:7885 +#: commands/tablecmds.c:7955 commands/tablecmds.c:8110 +#: commands/tablecmds.c:11577 commands/tablecmds.c:13078 +#: commands/tablecmds.c:15640 #, c-format msgid "cannot alter system column \"%s\"" msgstr "Systemspalte »%s« kann nicht geändert werden" -#: commands/tablecmds.c:6460 commands/tablecmds.c:6760 +#: commands/tablecmds.c:7005 commands/tablecmds.c:7340 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "Spalte »%s« von Relation »%s« ist eine Identitätsspalte" -#: commands/tablecmds.c:6496 +#: commands/tablecmds.c:7041 #, c-format msgid "column \"%s\" is in a primary key" msgstr "Spalte »%s« ist in einem Primärschlüssel" -#: commands/tablecmds.c:6518 +#: commands/tablecmds.c:7063 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "Spalte »%s« ist in Elterntabelle als NOT NULL markiert" -#: commands/tablecmds.c:6683 commands/tablecmds.c:8049 +#: commands/tablecmds.c:7263 commands/tablecmds.c:8770 #, c-format msgid "constraint must be added to child tables too" msgstr "Constraint muss ebenso in den abgeleiteten Tabellen hinzugefügt werden" -#: commands/tablecmds.c:6684 +#: commands/tablecmds.c:7264 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "Spalte »%s« von Relation »%s« ist nicht bereits NOT NULL." -#: commands/tablecmds.c:6719 -#, c-format -msgid "existing constraints on column \"%s\".\"%s\" are sufficient to prove that it does not contain nulls" -msgstr "" - -#: commands/tablecmds.c:6762 +#: commands/tablecmds.c:7342 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Verwenden Sie stattdessen ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY." -#: commands/tablecmds.c:6767 +#: commands/tablecmds.c:7347 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "Spalte »%s« von Relation »%s« ist eine generierte Spalte" -#: commands/tablecmds.c:6770 +#: commands/tablecmds.c:7350 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." msgstr "Verwenden Sie stattdessen ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION." -#: commands/tablecmds.c:6850 +#: commands/tablecmds.c:7459 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "Spalte »%s« von Relation »%s« muss als NOT NULL deklariert werden, bevor Sie Identitätsspalte werden kann" -#: commands/tablecmds.c:6856 +#: commands/tablecmds.c:7465 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "Spalte »%s« von Relation »%s« ist bereits eine Identitätsspalte" -#: commands/tablecmds.c:6862 +#: commands/tablecmds.c:7471 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "Spalte »%s« von Relation »%s« hat bereits einen Vorgabewert" -#: commands/tablecmds.c:6939 commands/tablecmds.c:7000 +#: commands/tablecmds.c:7548 commands/tablecmds.c:7609 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "Spalte »%s« von Relation »%s« ist keine Identitätsspalte" -#: commands/tablecmds.c:7005 +#: commands/tablecmds.c:7614 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "Spalte »%s« von Relation »%s« ist keine Identitätsspalte, wird übersprungen" -#: commands/tablecmds.c:7064 -#, fuzzy, c-format -#| msgid "cannot rename inherited column \"%s\"" +#: commands/tablecmds.c:7667 +#, c-format +msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" +msgstr "ALTER TABLE / DROP EXPRESSION muss auch auf abgeleitete Tabellen angewendet werden" + +#: commands/tablecmds.c:7689 +#, c-format msgid "cannot drop generation expression from inherited column" -msgstr "kann vererbte Spalte »%s« nicht umbenennen" +msgstr "Generierungsausdruck von vererbter Spalte kann nicht gelöscht werden" -#: commands/tablecmds.c:7102 -#, fuzzy, c-format -#| msgid "column \"%s\" of relation \"%s\" is a generated column" +#: commands/tablecmds.c:7727 +#, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" -msgstr "Spalte »%s« von Relation »%s« ist eine generierte Spalte" +msgstr "Spalte »%s« von Relation »%s« ist keine gespeicherte generierte Spalte" -#: commands/tablecmds.c:7107 -#, fuzzy, c-format -#| msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" +#: commands/tablecmds.c:7732 +#, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" -msgstr "Spalte »%s« von Relation »%s« ist keine Identitätsspalte, wird übersprungen" +msgstr "Spalte »%s« von Relation »%s« ist keine gespeicherte generierte Spalte, wird übersprungen" -#: commands/tablecmds.c:7207 +#: commands/tablecmds.c:7832 #, c-format msgid "cannot refer to non-index column by number" -msgstr "" +msgstr "auf eine Nicht-Index-Spalte kann nicht per Nummer verwiesen werden" -#: commands/tablecmds.c:7250 +#: commands/tablecmds.c:7875 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "Spalte Nummer %d von Relation »%s« existiert nicht" -#: commands/tablecmds.c:7269 +#: commands/tablecmds.c:7894 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "Statistiken von eingeschlossener Spalte »%s« von Index »%s« können nicht geändert werden" -#: commands/tablecmds.c:7274 -#, fuzzy, c-format -#| msgid "cannot insert into column \"%s\" of view \"%s\"" +#: commands/tablecmds.c:7899 +#, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" -msgstr "kann nicht in Spalte »%s« von Sicht »%s« einfügen" +msgstr "kann Statistiken von Spalte »%s« von Index »%s«, welche kein Ausdruck ist, nicht ändern" -#: commands/tablecmds.c:7276 -#, fuzzy, c-format -#| msgid "Collects statistics on database activity." +#: commands/tablecmds.c:7901 +#, c-format msgid "Alter statistics on table column instead." -msgstr "Sammelt Statistiken über Datenbankaktivität." +msgstr "Ändern Sie stattdessen die Statistiken für die Tabellenspalte." -#: commands/tablecmds.c:7402 +#: commands/tablecmds.c:8090 #, c-format msgid "invalid storage type \"%s\"" msgstr "ungültiger Storage-Typ »%s«" -#: commands/tablecmds.c:7434 +#: commands/tablecmds.c:8122 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "Spaltendatentyp %s kann nur Storage-Typ PLAIN" -#: commands/tablecmds.c:7470 +#: commands/tablecmds.c:8166 #, c-format msgid "cannot drop column from typed table" msgstr "aus einer getypten Tabelle können keine Spalten gelöscht werden" -#: commands/tablecmds.c:7529 +#: commands/tablecmds.c:8225 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "Spalte »%s« von Relation »%s« existiert nicht, wird übersprungen" -#: commands/tablecmds.c:7542 +#: commands/tablecmds.c:8238 #, c-format msgid "cannot drop system column \"%s\"" msgstr "Systemspalte »%s« kann nicht gelöscht werden" -#: commands/tablecmds.c:7552 +#: commands/tablecmds.c:8248 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "geerbte Spalte »%s« kann nicht gelöscht werden" -#: commands/tablecmds.c:7565 +#: commands/tablecmds.c:8261 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "Spalte »%s« kann nicht gelöscht werden, weil sie Teil des Partitionierungsschlüssels von Relation »%s« ist" -#: commands/tablecmds.c:7589 +#: commands/tablecmds.c:8286 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "Spalte kann nicht nur aus der partitionierten Tabelle gelöscht werden, wenn Partitionen existieren" -#: commands/tablecmds.c:7770 +#: commands/tablecmds.c:8490 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX wird für partitionierte Tabellen nicht unterstützt" -#: commands/tablecmds.c:7795 +#: commands/tablecmds.c:8515 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX benennt Index »%s« um in »%s«" -#: commands/tablecmds.c:8129 -#, fuzzy, c-format -#| msgid "cannot create index on partitioned table \"%s\"" +#: commands/tablecmds.c:8850 +#, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" -msgstr "kann keinen Index für partitionierte Tabelle »%s« erzeugen" +msgstr "ONLY nicht möglich für Fremdschlüssel für partitionierte Tabelle »%s« verweisend auf Relation »%s«" -#: commands/tablecmds.c:8135 -#, fuzzy, c-format -#| msgid "cannot rewrite system relation \"%s\"" +#: commands/tablecmds.c:8856 +#, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" -msgstr "Systemrelation »%s« kann nicht neu geschrieben werden" +msgstr "Hinzufügen von Fremdschlüssel mit NOT VALID nicht möglich für partitionierte Tabelle »%s« verweisend auf Relation »%s«" -#: commands/tablecmds.c:8138 +#: commands/tablecmds.c:8859 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Dieses Feature wird für partitionierte Tabellen noch nicht unterstützt." -#: commands/tablecmds.c:8145 commands/tablecmds.c:8550 +#: commands/tablecmds.c:8866 commands/tablecmds.c:9271 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "Relation »%s«, auf die verwiesen wird, ist keine Tabelle" -#: commands/tablecmds.c:8168 +#: commands/tablecmds.c:8889 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "Constraints für permanente Tabellen dürfen nur auf permanente Tabellen verweisen" -#: commands/tablecmds.c:8175 +#: commands/tablecmds.c:8896 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "Constraints für ungeloggte Tabellen dürfen nur auf permanente oder ungeloggte Tabellen verweisen" -#: commands/tablecmds.c:8181 +#: commands/tablecmds.c:8902 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "Constraints für temporäre Tabellen dürfen nur auf temporäre Tabellen verweisen" -#: commands/tablecmds.c:8185 +#: commands/tablecmds.c:8906 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "Constraints für temporäre Tabellen müssen temporäre Tabellen dieser Sitzung beinhalten" -#: commands/tablecmds.c:8251 commands/tablecmds.c:8257 +#: commands/tablecmds.c:8972 commands/tablecmds.c:8978 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "ungültige %s-Aktion für Fremdschlüssel-Constraint, der eine generierte Spalte enthält" -#: commands/tablecmds.c:8273 +#: commands/tablecmds.c:8994 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "Anzahl der Quell- und Zielspalten im Fremdschlüssel stimmt nicht überein" -#: commands/tablecmds.c:8380 +#: commands/tablecmds.c:9101 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "Fremdschlüssel-Constraint »%s« kann nicht implementiert werden" -#: commands/tablecmds.c:8382 +#: commands/tablecmds.c:9103 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Schlüsselspalten »%s« und »%s« haben inkompatible Typen: %s und %s." -#: commands/tablecmds.c:8745 commands/tablecmds.c:9138 -#: parser/parse_utilcmd.c:763 parser/parse_utilcmd.c:892 +#: commands/tablecmds.c:9466 commands/tablecmds.c:9859 +#: parser/parse_utilcmd.c:796 parser/parse_utilcmd.c:925 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "Fremdschlüssel-Constraints auf Fremdtabellen werden nicht unterstützt" -#: commands/tablecmds.c:9504 commands/tablecmds.c:9667 -#: commands/tablecmds.c:10594 commands/tablecmds.c:10669 +#: commands/tablecmds.c:10226 commands/tablecmds.c:10504 +#: commands/tablecmds.c:11379 commands/tablecmds.c:11454 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "Constraint »%s« von Relation »%s« existiert nicht" -#: commands/tablecmds.c:9511 +#: commands/tablecmds.c:10233 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "Constraint »%s« von Relation »%s« ist kein Fremdschlüssel-Constraint" -#: commands/tablecmds.c:9675 +#: commands/tablecmds.c:10271 +#, c-format +msgid "cannot alter constraint \"%s\" on relation \"%s\"" +msgstr "Constraint »%s« von Relation »%s« kann nicht geändert werden" + +#: commands/tablecmds.c:10274 +#, c-format +msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." +msgstr "Constraint »%s« ist von Constraint »%s« von Relation »%s« abgeleitet." + +#: commands/tablecmds.c:10276 +#, c-format +msgid "You may alter the constraint it derives from, instead." +msgstr "Sie können stattdessen den Constraint, von dem er abgeleitet ist, ändern." + +#: commands/tablecmds.c:10512 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "Constraint »%s« von Relation »%s« ist kein Fremdschlüssel- oder Check-Constraint" -#: commands/tablecmds.c:9745 +#: commands/tablecmds.c:10590 #, c-format msgid "constraint must be validated on child tables too" msgstr "Constraint muss ebenso in den abgeleiteten Tabellen validiert werden" -#: commands/tablecmds.c:9811 +#: commands/tablecmds.c:10674 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "Spalte »%s«, die im Fremdschlüssel verwendet wird, existiert nicht" -#: commands/tablecmds.c:9816 +#: commands/tablecmds.c:10679 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "Fremdschlüssel kann nicht mehr als %d Schlüssel haben" -#: commands/tablecmds.c:9881 +#: commands/tablecmds.c:10744 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "aufschiebbarer Primärschlüssel kann nicht für Tabelle »%s«, auf die verwiesen wird, verwendet werden" -#: commands/tablecmds.c:9898 +#: commands/tablecmds.c:10761 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "in Tabelle »%s«, auf die verwiesen wird, gibt es keinen Primärschlüssel" -#: commands/tablecmds.c:9963 +#: commands/tablecmds.c:10826 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "die Liste der Spalten, auf die ein Fremdschlüssel verweist, darf keine doppelten Einträge enthalten" -#: commands/tablecmds.c:10057 +#: commands/tablecmds.c:10920 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "aufschiebbarer Unique-Constraint kann nicht für Tabelle »%s«, auf die verwiesen wird, verwendet werden" -#: commands/tablecmds.c:10062 +#: commands/tablecmds.c:10925 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "in Tabelle »%s«, auf die verwiesen wird, gibt es keinen Unique-Constraint, der auf die angegebenen Schlüssel passt" -#: commands/tablecmds.c:10231 -#, c-format -msgid "validating foreign key constraint \"%s\"" -msgstr "validiere Fremdschlüssel-Constraint »%s«" - -#: commands/tablecmds.c:10550 +#: commands/tablecmds.c:11335 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "geerbter Constraint »%s« von Relation »%s« kann nicht gelöscht werden" -#: commands/tablecmds.c:10600 +#: commands/tablecmds.c:11385 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "Constraint »%s« von Relation »%s« existiert nicht, wird übersprungen" -#: commands/tablecmds.c:10776 +#: commands/tablecmds.c:11561 #, c-format msgid "cannot alter column type of typed table" msgstr "Spaltentyp einer getypten Tabelle kann nicht geändert werden" -#: commands/tablecmds.c:10803 +#: commands/tablecmds.c:11588 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "kann vererbte Spalte »%s« nicht ändern" -#: commands/tablecmds.c:10812 +#: commands/tablecmds.c:11597 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "Spalte »%s« kann nicht geändert werden, weil sie Teil des Partitionierungsschlüssels von Relation »%s« ist" -#: commands/tablecmds.c:10862 +#: commands/tablecmds.c:11647 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "Ergebnis der USING-Klausel für Spalte »%s« kann nicht automatisch in Typ %s umgewandelt werden" -#: commands/tablecmds.c:10865 +#: commands/tablecmds.c:11650 #, c-format msgid "You might need to add an explicit cast." msgstr "Sie müssen möglicherweise eine ausdrückliche Typumwandlung hinzufügen." -#: commands/tablecmds.c:10869 +#: commands/tablecmds.c:11654 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "Spalte »%s« kann nicht automatisch in Typ %s umgewandelt werden" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:10872 +#: commands/tablecmds.c:11657 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Sie müssen möglicherweise »USING %s::%s« angeben." -#: commands/tablecmds.c:10972 +#: commands/tablecmds.c:11757 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "geerbte Spalte »%s« von Relation »%s« kann nicht geändert werden" -#: commands/tablecmds.c:11000 +#: commands/tablecmds.c:11785 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "USING-Ausdruck enthält einen Verweis auf die ganze Zeile der Tabelle." -#: commands/tablecmds.c:11011 +#: commands/tablecmds.c:11796 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "Typ der vererbten Spalte »%s« muss ebenso in den abgeleiteten Tabellen geändert werden" -#: commands/tablecmds.c:11136 +#: commands/tablecmds.c:11921 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "Typ der Spalte »%s« kann nicht zweimal geändert werden" -#: commands/tablecmds.c:11174 +#: commands/tablecmds.c:11959 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "Generierungsausdruck der Spalte »%s« kann nicht automatisch in Typ %s umgewandelt werden" -#: commands/tablecmds.c:11179 +#: commands/tablecmds.c:11964 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "Vorgabewert der Spalte »%s« kann nicht automatisch in Typ %s umgewandelt werden" -#: commands/tablecmds.c:11257 +#: commands/tablecmds.c:12042 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "Typ einer Spalte, die von einer generierten Spalte verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:11258 +#: commands/tablecmds.c:12043 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "Spalte »%s« wird von generierter Spalte »%s« verwendet." -#: commands/tablecmds.c:11279 +#: commands/tablecmds.c:12064 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "Typ einer Spalte, die von einer Sicht oder Regel verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:11280 commands/tablecmds.c:11299 -#: commands/tablecmds.c:11317 +#: commands/tablecmds.c:12065 commands/tablecmds.c:12084 +#: commands/tablecmds.c:12102 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s hängt von Spalte »%s« ab" -#: commands/tablecmds.c:11298 +#: commands/tablecmds.c:12083 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "Typ einer Spalte, die in einer Trigger-Definition verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:11316 +#: commands/tablecmds.c:12101 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "Typ einer Spalte, die in einer Policy-Definition verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:12325 commands/tablecmds.c:12337 +#: commands/tablecmds.c:13186 commands/tablecmds.c:13198 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "kann Eigentümer des Index »%s« nicht ändern" -#: commands/tablecmds.c:12327 commands/tablecmds.c:12339 +#: commands/tablecmds.c:13188 commands/tablecmds.c:13200 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Ändern Sie stattdessen den Eigentümer der Tabelle des Index." -#: commands/tablecmds.c:12353 +#: commands/tablecmds.c:13214 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "kann Eigentümer der Sequenz »%s« nicht ändern" -#: commands/tablecmds.c:12367 commands/tablecmds.c:15554 +#: commands/tablecmds.c:13228 commands/tablecmds.c:16535 #, c-format msgid "Use ALTER TYPE instead." msgstr "Verwenden Sie stattdessen ALTER TYPE." -#: commands/tablecmds.c:12376 +#: commands/tablecmds.c:13237 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "»%s« ist keine Tabelle, Sicht, Sequenz oder Fremdtabelle" -#: commands/tablecmds.c:12716 +#: commands/tablecmds.c:13576 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "mehrere SET TABLESPACE Unterbefehle sind ungültig" -#: commands/tablecmds.c:12793 +#: commands/tablecmds.c:13653 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "»%s« ist weder Tabelle, Sicht, materialisierte Sicht, Index noch TOAST-Tabelle" -#: commands/tablecmds.c:12826 commands/view.c:494 +#: commands/tablecmds.c:13686 commands/view.c:494 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION wird nur für automatisch aktualisierbare Sichten unterstützt" -#: commands/tablecmds.c:12966 -#, c-format -msgid "cannot move system relation \"%s\"" -msgstr "Systemrelation »%s« kann nicht verschoben werden" - -#: commands/tablecmds.c:12982 -#, c-format -msgid "cannot move temporary tables of other sessions" -msgstr "temporäre Tabellen anderer Sitzungen können nicht verschoben werden" - -#: commands/tablecmds.c:13152 +#: commands/tablecmds.c:13938 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "nur Tabellen, Indexe und materialisierte Sichten existieren in Tablespaces" -#: commands/tablecmds.c:13164 +#: commands/tablecmds.c:13950 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "Relationen können nicht in den oder aus dem Tablespace »pg_global« verschoben werden" -#: commands/tablecmds.c:13256 +#: commands/tablecmds.c:14042 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "Abbruch weil Sperre für Relation »%s.%s« nicht verfügbar ist" -#: commands/tablecmds.c:13272 +#: commands/tablecmds.c:14058 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "keine passenden Relationen in Tablespace »%s« gefunden" -#: commands/tablecmds.c:13388 +#: commands/tablecmds.c:14174 #, c-format msgid "cannot change inheritance of typed table" msgstr "Vererbung einer getypten Tabelle kann nicht geändert werden" -#: commands/tablecmds.c:13393 commands/tablecmds.c:13889 +#: commands/tablecmds.c:14179 commands/tablecmds.c:14735 #, c-format msgid "cannot change inheritance of a partition" msgstr "Vererbung einer Partition kann nicht geändert werden" -#: commands/tablecmds.c:13398 +#: commands/tablecmds.c:14184 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "Vererbung einer partitionierten Tabelle kann nicht geändert werden" -#: commands/tablecmds.c:13444 +#: commands/tablecmds.c:14230 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "an temporäre Relation einer anderen Sitzung kann nicht vererbt werden" -#: commands/tablecmds.c:13457 +#: commands/tablecmds.c:14243 #, c-format msgid "cannot inherit from a partition" msgstr "von einer Partition kann nicht geerbt werden" -#: commands/tablecmds.c:13479 commands/tablecmds.c:16194 +#: commands/tablecmds.c:14265 commands/tablecmds.c:17179 #, c-format msgid "circular inheritance not allowed" msgstr "zirkuläre Vererbung ist nicht erlaubt" -#: commands/tablecmds.c:13480 commands/tablecmds.c:16195 +#: commands/tablecmds.c:14266 commands/tablecmds.c:17180 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "»%s« ist schon von »%s« abgeleitet." -#: commands/tablecmds.c:13493 +#: commands/tablecmds.c:14279 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "Trigger »%s« verhindert, dass Tabelle »%s« ein Vererbungskind werden kann" -#: commands/tablecmds.c:13495 +#: commands/tablecmds.c:14281 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "ROW-Trigger mit Übergangstabellen werden in Vererbungshierarchien nicht unterstützt." -#: commands/tablecmds.c:13698 +#: commands/tablecmds.c:14484 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "Spalte »%s« in abgeleiteter Tabelle muss als NOT NULL markiert sein" -#: commands/tablecmds.c:13725 +#: commands/tablecmds.c:14493 +#, c-format +msgid "column \"%s\" in child table must be a generated column" +msgstr "Spalte »%s« in abgeleiteter Tabelle muss eine generierte Spalte sein" + +#: commands/tablecmds.c:14543 +#, c-format +msgid "column \"%s\" in child table has a conflicting generation expression" +msgstr "Spalte »%s« in abgeleiteter Tabelle hat einen widersprüchlichen Generierungsausdruck" + +#: commands/tablecmds.c:14571 #, c-format msgid "child table is missing column \"%s\"" msgstr "Spalte »%s« fehlt in abgeleiteter Tabelle" -#: commands/tablecmds.c:13813 +#: commands/tablecmds.c:14659 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "abgeleitete Tabelle »%s« hat unterschiedliche Definition für Check-Constraint »%s«" -#: commands/tablecmds.c:13821 +#: commands/tablecmds.c:14667 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "Constraint »%s« kollidiert mit nicht vererbtem Constraint für abgeleitete Tabelle »%s«" -#: commands/tablecmds.c:13832 +#: commands/tablecmds.c:14678 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "Constraint »%s« kollidiert mit NOT-VALID-Constraint für abgeleitete Tabelle »%s«" -#: commands/tablecmds.c:13867 +#: commands/tablecmds.c:14713 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "Constraint »%s« fehlt in abgeleiteter Tabelle" -#: commands/tablecmds.c:13956 +#: commands/tablecmds.c:14801 +#, fuzzy, c-format +#| msgid "Unlogged partitioned table \"%s.%s\"" +msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" +msgstr "Ungeloggte partitionierte Tabelle »%s.%s«" + +#: commands/tablecmds.c:14805 +#, c-format +msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the detach operation." +msgstr "Verwenden Sie ALTER TABLE ... DETACH PARTITION ... FINALIZE, um die Detach-Operation zu vervollständigen." + +#: commands/tablecmds.c:14830 commands/tablecmds.c:14878 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "Relation »%s« ist keine Partition von Relation »%s«" -#: commands/tablecmds.c:13962 +#: commands/tablecmds.c:14884 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "Relation »%s« ist keine Basisrelation von Relation »%s«" -#: commands/tablecmds.c:14190 +#: commands/tablecmds.c:15112 #, c-format msgid "typed tables cannot inherit" msgstr "getypte Tabellen können nicht erben" -#: commands/tablecmds.c:14220 +#: commands/tablecmds.c:15142 #, c-format msgid "table is missing column \"%s\"" msgstr "Spalte »%s« fehlt in Tabelle" -#: commands/tablecmds.c:14231 +#: commands/tablecmds.c:15153 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "Tabelle hat Spalte »%s«, aber Typ benötigt »%s«" -#: commands/tablecmds.c:14240 +#: commands/tablecmds.c:15162 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "Tabelle »%s« hat unterschiedlichen Typ für Spalte »%s«" -#: commands/tablecmds.c:14254 +#: commands/tablecmds.c:15176 #, c-format msgid "table has extra column \"%s\"" msgstr "Tabelle hat zusätzliche Spalte »%s«" -#: commands/tablecmds.c:14306 +#: commands/tablecmds.c:15228 #, c-format msgid "\"%s\" is not a typed table" msgstr "»%s« ist keine getypte Tabelle" -#: commands/tablecmds.c:14488 +#: commands/tablecmds.c:15410 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "nicht eindeutiger Index »%s« kann nicht als Replik-Identität verwendet werden" -#: commands/tablecmds.c:14494 +#: commands/tablecmds.c:15416 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "Index »%s« kann nicht als Replik-Identität verwendet werden, weil er nicht IMMEDIATE ist" -#: commands/tablecmds.c:14500 +#: commands/tablecmds.c:15422 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "Ausdrucksindex »%s« kann nicht als Replik-Identität verwendet werden" -#: commands/tablecmds.c:14506 +#: commands/tablecmds.c:15428 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "partieller Index »%s« kann nicht als Replik-Identität verwendet werden" -#: commands/tablecmds.c:14512 +#: commands/tablecmds.c:15434 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "ungültiger Index »%s« kann nicht als Replik-Identität verwendet werden" -#: commands/tablecmds.c:14529 +#: commands/tablecmds.c:15451 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "Index »%s« kann nicht als Replik-Identität verwendet werden, weil Spalte %d eine Systemspalte ist" -#: commands/tablecmds.c:14536 +#: commands/tablecmds.c:15458 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "Index »%s« kann nicht als Replik-Identität verwendet werden, weil Spalte »%s« NULL-Werte akzeptiert" -#: commands/tablecmds.c:14729 +#: commands/tablecmds.c:15648 commands/tablecmds.c:18632 +#, c-format +msgid "column data type %s does not support compression" +msgstr "Spaltendatentyp %s unterstützt keine Komprimierung" + +#: commands/tablecmds.c:15709 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "kann den geloggten Status der Tabelle »%s« nicht ändern, weil sie temporär ist" -#: commands/tablecmds.c:14753 +#: commands/tablecmds.c:15733 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "kann Tabelle »%s« nicht in ungeloggt ändern, weil sie Teil einer Publikation ist" -#: commands/tablecmds.c:14755 +#: commands/tablecmds.c:15735 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Ungeloggte Relationen können nicht repliziert werden." -#: commands/tablecmds.c:14800 +#: commands/tablecmds.c:15780 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "konnte Tabelle »%s« nicht in geloggt ändern, weil sie auf die ungeloggte Tabelle »%s« verweist" -#: commands/tablecmds.c:14810 +#: commands/tablecmds.c:15790 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "konnte Tabelle »%s« nicht in ungeloggt ändern, weil sie auf die geloggte Tabelle »%s« verweist" -#: commands/tablecmds.c:14868 +#: commands/tablecmds.c:15848 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "einer Tabelle zugeordnete Sequenz kann nicht in ein anderes Schema verschoben werden" -#: commands/tablecmds.c:14974 +#: commands/tablecmds.c:15955 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "Relation »%s« existiert bereits in Schema »%s«" -#: commands/tablecmds.c:15537 +#: commands/tablecmds.c:16518 #, c-format msgid "\"%s\" is not a composite type" msgstr "»%s« ist kein zusammengesetzter Typ" -#: commands/tablecmds.c:15569 +#: commands/tablecmds.c:16550 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "»%s« ist weder Tabelle, Sicht, materialisierte Sicht, Sequenz noch Fremdtabelle" -#: commands/tablecmds.c:15604 +#: commands/tablecmds.c:16585 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "unbekannte Partitionierungsstrategie »%s«" -#: commands/tablecmds.c:15612 +#: commands/tablecmds.c:16593 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "Partitionierungsstrategie »list« kann nicht mit mehr als einer Spalte verwendet werden" -#: commands/tablecmds.c:15678 +#: commands/tablecmds.c:16659 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "Spalte »%s«, die im Partitionierungsschlüssel verwendet wird, existiert nicht" -#: commands/tablecmds.c:15686 +#: commands/tablecmds.c:16667 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "Systemspalte »%s« kann nicht im Partitionierungsschlüssel verwendet werden" -#: commands/tablecmds.c:15697 commands/tablecmds.c:15811 +#: commands/tablecmds.c:16678 commands/tablecmds.c:16792 #, c-format msgid "cannot use generated column in partition key" msgstr "generierte Spalte kann nicht im Partitionierungsschlüssel verwendet werden" -#: commands/tablecmds.c:15698 commands/tablecmds.c:15812 commands/trigger.c:641 -#: rewrite/rewriteHandler.c:829 rewrite/rewriteHandler.c:846 +#: commands/tablecmds.c:16679 commands/tablecmds.c:16793 commands/trigger.c:635 +#: rewrite/rewriteHandler.c:884 rewrite/rewriteHandler.c:919 #, c-format msgid "Column \"%s\" is a generated column." msgstr "Spalte »%s« ist eine generierte Spalte." -#: commands/tablecmds.c:15774 +#: commands/tablecmds.c:16755 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "Funktionen im Partitionierungsschlüsselausdruck müssen als IMMUTABLE markiert sein" -#: commands/tablecmds.c:15794 +#: commands/tablecmds.c:16775 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "Partitionierungsschlüsselausdruck kann nicht auf Systemspalten verweisen" -#: commands/tablecmds.c:15824 +#: commands/tablecmds.c:16805 #, c-format msgid "cannot use constant expression as partition key" msgstr "Partitionierungsschlüssel kann kein konstanter Ausdruck sein" -#: commands/tablecmds.c:15845 +#: commands/tablecmds.c:16826 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "konnte die für den Partitionierungsausdruck zu verwendende Sortierfolge nicht bestimmen" -#: commands/tablecmds.c:15880 +#: commands/tablecmds.c:16861 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "Sie müssen eine hash-Operatorklasse angeben oder eine hash-Standardoperatorklasse für den Datentyp definieren." -#: commands/tablecmds.c:15886 +#: commands/tablecmds.c:16867 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "Sie müssen eine btree-Operatorklasse angeben oder eine btree-Standardoperatorklasse für den Datentyp definieren." -#: commands/tablecmds.c:16031 -#, c-format -msgid "partition constraint for table \"%s\" is implied by existing constraints" -msgstr "Partitions-Constraint für Tabelle »%s« ist schon in bestehenden Constraints inbegriffen" - -#: commands/tablecmds.c:16035 partitioning/partbounds.c:3126 -#: partitioning/partbounds.c:3177 -#, fuzzy, c-format -#| msgid "partition constraint for table \"%s\" is implied by existing constraints" -msgid "updated partition constraint for default partition \"%s\" is implied by existing constraints" -msgstr "Partitions-Constraint für Tabelle »%s« ist schon in bestehenden Constraints inbegriffen" - -#: commands/tablecmds.c:16134 +#: commands/tablecmds.c:17119 #, c-format msgid "\"%s\" is already a partition" msgstr "»%s« ist bereits eine Partition" -#: commands/tablecmds.c:16140 +#: commands/tablecmds.c:17125 #, c-format msgid "cannot attach a typed table as partition" msgstr "eine getypte Tabelle kann nicht als Partition angefügt werden" -#: commands/tablecmds.c:16156 +#: commands/tablecmds.c:17141 #, c-format msgid "cannot attach inheritance child as partition" msgstr "ein Vererbungskind kann nicht als Partition angefügt werden" -#: commands/tablecmds.c:16170 +#: commands/tablecmds.c:17155 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "eine Tabelle mit abgeleiteten Tabellen kann nicht als Partition angefügt werden" -#: commands/tablecmds.c:16204 +#: commands/tablecmds.c:17189 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "eine temporäre Relation kann nicht als Partition an permanente Relation »%s« angefügt werden" -#: commands/tablecmds.c:16212 +#: commands/tablecmds.c:17197 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "eine permanente Relation kann nicht als Partition an temporäre Relation »%s« angefügt werden" -#: commands/tablecmds.c:16220 +#: commands/tablecmds.c:17205 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "kann nicht als Partition an temporäre Relation einer anderen Sitzung anfügen" -#: commands/tablecmds.c:16227 +#: commands/tablecmds.c:17212 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "temporäre Relation einer anderen Sitzung kann nicht als Partition angefügt werden" -#: commands/tablecmds.c:16247 +#: commands/tablecmds.c:17232 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "Tabelle »%s« enthält Spalte »%s«, die nicht in der Elterntabelle »%s« gefunden wurde" -#: commands/tablecmds.c:16250 +#: commands/tablecmds.c:17235 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "Die neue Partition darf nur Spalten enthalten, die auch die Elterntabelle hat." -#: commands/tablecmds.c:16262 +#: commands/tablecmds.c:17247 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "Trigger »%s« verhindert, dass Tabelle »%s« eine Partition werden kann" -#: commands/tablecmds.c:16264 commands/trigger.c:447 +#: commands/tablecmds.c:17249 commands/trigger.c:441 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "ROW-Trigger mit Übergangstabellen werden für Partitionen nicht unterstützt" -#: commands/tablecmds.c:16427 -#, fuzzy, c-format -#| msgid "cannot attach table \"%s\" without OIDs as partition of table \"%s\" with OIDs" +#: commands/tablecmds.c:17412 +#, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" -msgstr "kann Tabelle »%s« ohne OIDs nicht als Partition an Tabelle »%s« mit OIDs anfügen" +msgstr "kann Fremdtabelle »%s« nicht als Partition an partitionierte Tabelle »%s« anfügen" -#: commands/tablecmds.c:16430 +#: commands/tablecmds.c:17415 +#, c-format +msgid "Partitioned table \"%s\" contains unique indexes." +msgstr "Partitionierte Tabelle »%s« enthält Unique-Indexe." + +#: commands/tablecmds.c:17735 #, fuzzy, c-format -#| msgid "table \"%s\" has no indexes" -msgid "Table \"%s\" contains unique indexes." -msgstr "Tabelle »%s« hat keine Indexe" +#| msgid "a hash-partitioned table may not have a default partition" +msgid "cannot detach partitions concurrently when a default partition exists" +msgstr "eine hashpartitionierte Tabelle kann keine Standardpartition haben" -#: commands/tablecmds.c:17076 commands/tablecmds.c:17095 -#: commands/tablecmds.c:17115 commands/tablecmds.c:17134 -#: commands/tablecmds.c:17176 +#: commands/tablecmds.c:17844 #, fuzzy, c-format -#| msgid "cannot attach table \"%s\" without OIDs as partition of table \"%s\" with OIDs" -msgid "cannot attach index \"%s\" as a partition of index \"%s\"" -msgstr "kann Tabelle »%s« ohne OIDs nicht als Partition an Tabelle »%s« mit OIDs anfügen" +#| msgid "cannot create index on partitioned table \"%s\" concurrently" +msgid "partitioned table \"%s\" was removed concurrently" +msgstr "kann Index für partitionierte Tabelle »%s« nicht nebenläufig erzeugen" -#: commands/tablecmds.c:17079 +#: commands/tablecmds.c:17850 #, fuzzy, c-format -#| msgid "index \"%s\" is already associated with a constraint" +#| msgid "cannot drop partitioned index \"%s\" concurrently" +msgid "partition \"%s\" was removed concurrently" +msgstr "kann partitionierten Index »%s« nicht nebenläufig löschen" + +#: commands/tablecmds.c:18304 commands/tablecmds.c:18324 +#: commands/tablecmds.c:18344 commands/tablecmds.c:18363 +#: commands/tablecmds.c:18405 +#, c-format +msgid "cannot attach index \"%s\" as a partition of index \"%s\"" +msgstr "kann Index »%s« nicht als Partition an Index »%s« anfügen" + +#: commands/tablecmds.c:18307 +#, c-format msgid "Index \"%s\" is already attached to another index." -msgstr "Index »%s« gehört bereits zu einem Constraint" +msgstr "Index »%s« ist bereits an einen anderen Index angefügt." -#: commands/tablecmds.c:17098 -#, fuzzy, c-format -#| msgid "\"%s\" is not an index for table \"%s\"" +#: commands/tablecmds.c:18327 +#, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." -msgstr "»%s« ist kein Index für Tabelle »%s«" +msgstr "Index »%s« ist kein Index irgendeiner Partition von Tabelle »%s«." -#: commands/tablecmds.c:17118 +#: commands/tablecmds.c:18347 #, c-format msgid "The index definitions do not match." msgstr "Die Indexdefinitionen stimmen nicht überein." -#: commands/tablecmds.c:17137 +#: commands/tablecmds.c:18366 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "Der Index »%s« gehört zu einem Constraint in Tabelle »%s«, aber kein Constraint existiert für Index »%s«." -#: commands/tablecmds.c:17179 -#, fuzzy, c-format -#| msgid "cannot inherit from partition \"%s\"" +#: commands/tablecmds.c:18408 +#, c-format msgid "Another index is already attached for partition \"%s\"." -msgstr "von Partition »%s« kann nicht geerbt werden" +msgstr "Ein anderer Index ist bereits für Partition »%s« angefügt." + +#: commands/tablecmds.c:18644 +#, c-format +msgid "invalid compression method \"%s\"" +msgstr "ungültige Komprimierungsmethode »%s«" #: commands/tablespace.c:162 commands/tablespace.c:179 #: commands/tablespace.c:190 commands/tablespace.c:198 -#: commands/tablespace.c:638 replication/slot.c:1290 storage/file/copydir.c:47 +#: commands/tablespace.c:650 replication/slot.c:1409 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht erzeugen: %m" @@ -10279,750 +10589,795 @@ msgstr "Tablespace-Pfad »%s« ist zu lang" msgid "tablespace location should not be inside the data directory" msgstr "Tablespace-Pfad sollte nicht innerhalb des Datenverzeichnisses sein" -#: commands/tablespace.c:305 commands/tablespace.c:965 +#: commands/tablespace.c:305 commands/tablespace.c:977 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "inakzeptabler Tablespace-Name »%s«" -#: commands/tablespace.c:307 commands/tablespace.c:966 +#: commands/tablespace.c:307 commands/tablespace.c:978 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "Der Präfix »pg_« ist für System-Tablespaces reserviert." -#: commands/tablespace.c:326 commands/tablespace.c:987 +#: commands/tablespace.c:326 commands/tablespace.c:999 #, c-format msgid "tablespace \"%s\" already exists" msgstr "Tablespace »%s« existiert bereits" -#: commands/tablespace.c:442 commands/tablespace.c:948 -#: commands/tablespace.c:1037 commands/tablespace.c:1106 -#: commands/tablespace.c:1250 commands/tablespace.c:1450 +#: commands/tablespace.c:444 commands/tablespace.c:960 +#: commands/tablespace.c:1049 commands/tablespace.c:1118 +#: commands/tablespace.c:1264 commands/tablespace.c:1467 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "Tablespace »%s« existiert nicht" -#: commands/tablespace.c:448 +#: commands/tablespace.c:450 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "Tablespace »%s« existiert nicht, wird übersprungen" -#: commands/tablespace.c:525 +#: commands/tablespace.c:478 +#, c-format +msgid "tablespace \"%s\" cannot be dropped because some objects depend on it" +msgstr "kann Tablespace »%s« nicht löschen, weil andere Objekte davon abhängen" + +#: commands/tablespace.c:537 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "Tablespace »%s« ist nicht leer" -#: commands/tablespace.c:597 +#: commands/tablespace.c:609 #, c-format msgid "directory \"%s\" does not exist" msgstr "Verzeichnis »%s« existiert nicht" -#: commands/tablespace.c:598 +#: commands/tablespace.c:610 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "Erzeugen Sie dieses Verzeichnis für den Tablespace bevor Sie den Server neu starten." -#: commands/tablespace.c:603 +#: commands/tablespace.c:615 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "konnte Zugriffsrechte für Verzeichnis »%s« nicht setzen: %m" -#: commands/tablespace.c:633 +#: commands/tablespace.c:645 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "Verzeichnis »%s« ist bereits als Tablespace in Verwendung" -#: commands/tablespace.c:757 commands/tablespace.c:770 -#: commands/tablespace.c:806 commands/tablespace.c:898 storage/file/fd.c:3100 -#: storage/file/fd.c:3440 +#: commands/tablespace.c:769 commands/tablespace.c:782 +#: commands/tablespace.c:818 commands/tablespace.c:910 storage/file/fd.c:3161 +#: storage/file/fd.c:3557 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht löschen: %m" -#: commands/tablespace.c:819 commands/tablespace.c:907 +#: commands/tablespace.c:831 commands/tablespace.c:919 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht löschen: %m" -#: commands/tablespace.c:829 commands/tablespace.c:916 +#: commands/tablespace.c:841 commands/tablespace.c:928 #, c-format msgid "\"%s\" is not a directory or symbolic link" msgstr "»%s« ist kein Verzeichnis oder symbolische Verknüpfung" -#: commands/tablespace.c:1111 +#: commands/tablespace.c:1123 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "Tablespace »%s« existiert nicht." -#: commands/tablespace.c:1549 +#: commands/tablespace.c:1566 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "Verzeichnisse für Tablespace %u konnten nicht entfernt werden" -#: commands/tablespace.c:1551 +#: commands/tablespace.c:1568 #, c-format msgid "You can remove the directories manually if necessary." msgstr "Sie können die Verzeichnisse falls nötig manuell entfernen." -#: commands/trigger.c:204 commands/trigger.c:215 +#: commands/trigger.c:198 commands/trigger.c:209 #, c-format msgid "\"%s\" is a table" msgstr "»%s« ist eine Tabelle" -#: commands/trigger.c:206 commands/trigger.c:217 +#: commands/trigger.c:200 commands/trigger.c:211 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "Tabellen können keine INSTEAD OF-Trigger haben." -#: commands/trigger.c:238 +#: commands/trigger.c:232 #, c-format msgid "\"%s\" is a partitioned table" msgstr "»%s« ist eine partitionierte Tabelle" -#: commands/trigger.c:240 +#: commands/trigger.c:234 #, c-format msgid "Triggers on partitioned tables cannot have transition tables." msgstr "Trigger für partitionierte Tabellen können keine Übergangstabellen haben." -#: commands/trigger.c:252 commands/trigger.c:259 commands/trigger.c:429 +#: commands/trigger.c:246 commands/trigger.c:253 commands/trigger.c:423 #, c-format msgid "\"%s\" is a view" msgstr "»%s« ist eine Sicht" -#: commands/trigger.c:254 +#: commands/trigger.c:248 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "Sichten können keine BEFORE- oder AFTER-Trigger auf Zeilenebene haben." -#: commands/trigger.c:261 +#: commands/trigger.c:255 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "Sichten können keine TRUNCATE-Trigger haben." -#: commands/trigger.c:269 commands/trigger.c:276 commands/trigger.c:288 -#: commands/trigger.c:422 +#: commands/trigger.c:263 commands/trigger.c:270 commands/trigger.c:282 +#: commands/trigger.c:416 #, c-format msgid "\"%s\" is a foreign table" msgstr "»%s« ist eine Fremdtabelle" -#: commands/trigger.c:271 +#: commands/trigger.c:265 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "Fremdtabellen können keine INSTEAD OF-Trigger haben." -#: commands/trigger.c:278 +#: commands/trigger.c:272 #, c-format msgid "Foreign tables cannot have TRUNCATE triggers." msgstr "Fremdtabellen können keine TRUNCATE-Trigger haben." -#: commands/trigger.c:290 +#: commands/trigger.c:284 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "Fremdtabellen können keine Constraint-Trigger haben." -#: commands/trigger.c:365 +#: commands/trigger.c:359 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "TRUNCATE FOR EACH ROW-Trigger werden nicht unterstützt" -#: commands/trigger.c:373 +#: commands/trigger.c:367 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "INSTEAD OF-Trigger müssen FOR EACH ROW sein" -#: commands/trigger.c:377 +#: commands/trigger.c:371 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "INSTEAD OF-Trigger können keine WHEN-Bedingungen haben" -#: commands/trigger.c:381 +#: commands/trigger.c:375 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "INSTEAD OF-Trigger können keine Spaltenlisten haben" -#: commands/trigger.c:410 +#: commands/trigger.c:404 #, c-format msgid "ROW variable naming in the REFERENCING clause is not supported" msgstr "Benennung von ROW-Variablen in der REFERENCING-Klausel wird nicht unterstützt" -#: commands/trigger.c:411 +#: commands/trigger.c:405 #, c-format msgid "Use OLD TABLE or NEW TABLE for naming transition tables." msgstr "Verwenden Sie OLD TABLE und NEW TABLE, um Übergangstabellen zu benennen." -#: commands/trigger.c:424 +#: commands/trigger.c:418 #, c-format msgid "Triggers on foreign tables cannot have transition tables." msgstr "Trigger für Fremdtabellen können keine Übergangstabellen haben." -#: commands/trigger.c:431 +#: commands/trigger.c:425 #, c-format msgid "Triggers on views cannot have transition tables." msgstr "Trigger für Sichten können keine Übergangstabellen haben." -#: commands/trigger.c:451 +#: commands/trigger.c:445 #, c-format msgid "ROW triggers with transition tables are not supported on inheritance children" msgstr "ROW-Trigger mit Übergangstabellen werden für Vererbungskinder nicht unterstützt" -#: commands/trigger.c:457 +#: commands/trigger.c:451 #, c-format msgid "transition table name can only be specified for an AFTER trigger" msgstr "Übergangstabellenname kann nur für einen AFTER-Trigger angegeben werden" -#: commands/trigger.c:462 +#: commands/trigger.c:456 #, c-format msgid "TRUNCATE triggers with transition tables are not supported" msgstr "TRUNCATE-Trigger mit Übergangstabellen werden nicht unterstützt" -#: commands/trigger.c:479 +#: commands/trigger.c:473 #, c-format msgid "transition tables cannot be specified for triggers with more than one event" msgstr "Übergangstabellen können nicht für Trigger mit mehr als einem Ereignis angegeben werden" -#: commands/trigger.c:490 +#: commands/trigger.c:484 #, c-format msgid "transition tables cannot be specified for triggers with column lists" msgstr "Übergangstabellen können nicht für Trigger mit Spaltenlisten angegeben werden" -#: commands/trigger.c:507 +#: commands/trigger.c:501 #, c-format msgid "NEW TABLE can only be specified for an INSERT or UPDATE trigger" msgstr "NEW TABLE kann nur für INSERT- oder UPDATE-Trigger angegeben werden" -#: commands/trigger.c:512 +#: commands/trigger.c:506 #, c-format msgid "NEW TABLE cannot be specified multiple times" msgstr "NEW TABLE kann nicht mehrmals angegeben werden" -#: commands/trigger.c:522 +#: commands/trigger.c:516 #, c-format msgid "OLD TABLE can only be specified for a DELETE or UPDATE trigger" msgstr "OLD TABLE kann nur für DELETE- oder UPDATE-Trigger angegeben werden" -#: commands/trigger.c:527 +#: commands/trigger.c:521 #, c-format msgid "OLD TABLE cannot be specified multiple times" msgstr "OLD TABLE kann nicht mehrmals angegeben werden" -#: commands/trigger.c:537 +#: commands/trigger.c:531 #, c-format msgid "OLD TABLE name and NEW TABLE name cannot be the same" msgstr "Name für OLD TABLE und NEW TABLE kann nicht gleich sein" -#: commands/trigger.c:601 commands/trigger.c:614 +#: commands/trigger.c:595 commands/trigger.c:608 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "WHEN-Bedingung eines Statement-Triggers kann keine Verweise auf Spaltenwerte enthalten" -#: commands/trigger.c:606 +#: commands/trigger.c:600 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "WHEN-Bedingung eines INSERT-Triggers kann keine Verweise auf OLD-Werte enthalten" -#: commands/trigger.c:619 +#: commands/trigger.c:613 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "WHEN-Bedingung eines DELETE-Triggers kann keine Verweise auf NEW-Werte enthalten" -#: commands/trigger.c:624 +#: commands/trigger.c:618 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "WHEN-Bedingung eines BEFORE-Triggers kann keine Verweise auf Systemspalten in NEW enthalten" -#: commands/trigger.c:632 commands/trigger.c:640 +#: commands/trigger.c:626 commands/trigger.c:634 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW generated columns" msgstr "WHEN-Bedingung eines BEFORE-Triggers kann keine Verweise auf generierte Spalten in NEW enthalten" -#: commands/trigger.c:633 +#: commands/trigger.c:627 #, c-format msgid "A whole-row reference is used and the table contains generated columns." msgstr "Ein Verweis auf die ganze Zeile der Tabelle wird verwendet und die Tabelle enthält generierte Spalten." -#: commands/trigger.c:780 commands/trigger.c:1385 +#: commands/trigger.c:741 commands/trigger.c:1450 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "Trigger »%s« für Relation »%s« existiert bereits" -#: commands/trigger.c:1271 commands/trigger.c:1432 commands/trigger.c:1568 +#: commands/trigger.c:755 +#, c-format +msgid "trigger \"%s\" for relation \"%s\" is an internal trigger" +msgstr "Trigger »%s« für Relation »%s« ist ein interner Trigger" + +#: commands/trigger.c:774 +#, c-format +msgid "trigger \"%s\" for relation \"%s\" is a constraint trigger" +msgstr "Trigger »%s« für Relation »%s« ist ein Constraint-Trigger" + +#: commands/trigger.c:1336 commands/trigger.c:1497 commands/trigger.c:1612 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "Trigger »%s« für Tabelle »%s« existiert nicht" -#: commands/trigger.c:1515 +#: commands/trigger.c:1580 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "keine Berechtigung: »%s« ist ein Systemtrigger" -#: commands/trigger.c:2116 +#: commands/trigger.c:2160 #, c-format msgid "trigger function %u returned null value" msgstr "Triggerfunktion %u gab NULL-Wert zurück" -#: commands/trigger.c:2176 commands/trigger.c:2390 commands/trigger.c:2625 -#: commands/trigger.c:2933 +#: commands/trigger.c:2220 commands/trigger.c:2434 commands/trigger.c:2673 +#: commands/trigger.c:2977 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "Trigger für BEFORE STATEMENT kann keinen Wert zurückgeben" -#: commands/trigger.c:2250 +#: commands/trigger.c:2294 #, c-format msgid "moving row to another partition during a BEFORE FOR EACH ROW trigger is not supported" -msgstr "" +msgstr "Verschieben einer Zeile in eine andere Partition durch einen BEFORE-FOR-EACH-ROW-Trigger wird nicht unterstützt" -#: commands/trigger.c:2251 commands/trigger.c:2755 +#: commands/trigger.c:2295 #, c-format msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." -msgstr "" - -#: commands/trigger.c:2754 -#, c-format -msgid "moving row to another partition during a BEFORE trigger is not supported" -msgstr "" +msgstr "Vor der Ausführung von Trigger »%s« gehörte die Zeile in Partition »%s.%s«." -#: commands/trigger.c:2996 executor/nodeModifyTable.c:1380 -#: executor/nodeModifyTable.c:1449 +#: commands/trigger.c:3043 executor/nodeModifyTable.c:1798 +#: executor/nodeModifyTable.c:1880 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "das zu aktualisierende Tupel wurde schon durch eine vom aktuellen Befehl ausgelöste Operation verändert" -#: commands/trigger.c:2997 executor/nodeModifyTable.c:840 -#: executor/nodeModifyTable.c:914 executor/nodeModifyTable.c:1381 -#: executor/nodeModifyTable.c:1450 +#: commands/trigger.c:3044 executor/nodeModifyTable.c:1186 +#: executor/nodeModifyTable.c:1260 executor/nodeModifyTable.c:1799 +#: executor/nodeModifyTable.c:1881 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Verwenden Sie einen AFTER-Trigger anstelle eines BEFORE-Triggers, um Änderungen an andere Zeilen zu propagieren." -#: commands/trigger.c:3026 executor/nodeLockRows.c:225 -#: executor/nodeLockRows.c:234 executor/nodeModifyTable.c:220 -#: executor/nodeModifyTable.c:856 executor/nodeModifyTable.c:1397 -#: executor/nodeModifyTable.c:1613 +#: commands/trigger.c:3073 executor/nodeLockRows.c:225 +#: executor/nodeLockRows.c:234 executor/nodeModifyTable.c:228 +#: executor/nodeModifyTable.c:1202 executor/nodeModifyTable.c:1816 +#: executor/nodeModifyTable.c:2046 #, c-format msgid "could not serialize access due to concurrent update" -msgstr "kann Zugriff nicht serialisieren wegen gleichzeitiger Aktualisierung" +msgstr "konnte Zugriff nicht serialisieren wegen gleichzeitiger Aktualisierung" -#: commands/trigger.c:3034 executor/nodeModifyTable.c:946 -#: executor/nodeModifyTable.c:1467 executor/nodeModifyTable.c:1637 -#, fuzzy, c-format -#| msgid "could not serialize access due to concurrent update" +#: commands/trigger.c:3081 executor/nodeModifyTable.c:1292 +#: executor/nodeModifyTable.c:1898 executor/nodeModifyTable.c:2070 +#, c-format msgid "could not serialize access due to concurrent delete" -msgstr "kann Zugriff nicht serialisieren wegen gleichzeitiger Aktualisierung" +msgstr "konnte Zugriff nicht serialisieren wegen gleichzeitigem Löschen" + +#: commands/trigger.c:4142 +#, c-format +msgid "cannot fire deferred trigger within security-restricted operation" +msgstr "aufgeschobener Trigger kann nicht in einer sicherheitsbeschränkten Operation ausgelöst werden" -#: commands/trigger.c:5094 +#: commands/trigger.c:5183 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "Constraint »%s« ist nicht aufschiebbar" -#: commands/trigger.c:5117 +#: commands/trigger.c:5206 #, c-format msgid "constraint \"%s\" does not exist" msgstr "Constraint »%s« existiert nicht" -#: commands/tsearchcmds.c:118 commands/tsearchcmds.c:683 +#: commands/tsearchcmds.c:118 commands/tsearchcmds.c:635 #, c-format msgid "function %s should return type %s" msgstr "Funktion %s sollte Rückgabetyp %s haben" -#: commands/tsearchcmds.c:195 +#: commands/tsearchcmds.c:194 #, c-format msgid "must be superuser to create text search parsers" msgstr "nur Superuser können Textsucheparser anlegen" -#: commands/tsearchcmds.c:248 +#: commands/tsearchcmds.c:247 #, c-format msgid "text search parser parameter \"%s\" not recognized" msgstr "Textsucheparserparameter »%s« nicht erkannt" -#: commands/tsearchcmds.c:258 +#: commands/tsearchcmds.c:257 #, c-format msgid "text search parser start method is required" msgstr "Textsucheparserstartmethode muss angegeben werden" -#: commands/tsearchcmds.c:263 +#: commands/tsearchcmds.c:262 #, c-format msgid "text search parser gettoken method is required" msgstr "Gettoken-Methode für Textsucheparser muss angegeben werden" -#: commands/tsearchcmds.c:268 +#: commands/tsearchcmds.c:267 #, c-format msgid "text search parser end method is required" msgstr "Textsucheparserendemethode muss angegeben werden" -#: commands/tsearchcmds.c:273 +#: commands/tsearchcmds.c:272 #, c-format msgid "text search parser lextypes method is required" msgstr "Lextypes-Methode für Textsucheparser muss angegeben werden" -#: commands/tsearchcmds.c:390 +#: commands/tsearchcmds.c:366 #, c-format msgid "text search template \"%s\" does not accept options" msgstr "Textsuchevorlage »%s« akzeptiert keine Optionen" -#: commands/tsearchcmds.c:464 +#: commands/tsearchcmds.c:440 #, c-format msgid "text search template is required" msgstr "Textsuchevorlage muss angegeben werden" -#: commands/tsearchcmds.c:750 +#: commands/tsearchcmds.c:701 #, c-format msgid "must be superuser to create text search templates" msgstr "nur Superuser können Textsuchevorlagen erzeugen" -#: commands/tsearchcmds.c:792 +#: commands/tsearchcmds.c:743 #, c-format msgid "text search template parameter \"%s\" not recognized" msgstr "Textsuchevorlageparameter »%s« nicht erkannt" -#: commands/tsearchcmds.c:802 +#: commands/tsearchcmds.c:753 #, c-format msgid "text search template lexize method is required" msgstr "Lexize-Methode für Textsuchevorlage muss angegeben werden" -#: commands/tsearchcmds.c:1006 +#: commands/tsearchcmds.c:933 #, c-format msgid "text search configuration parameter \"%s\" not recognized" msgstr "Textsuchekonfigurationsparameter »%s« nicht erkannt" -#: commands/tsearchcmds.c:1013 +#: commands/tsearchcmds.c:940 #, c-format msgid "cannot specify both PARSER and COPY options" msgstr "Optionen PARSER und COPY können nicht beide angegeben werden" -#: commands/tsearchcmds.c:1049 +#: commands/tsearchcmds.c:976 #, c-format msgid "text search parser is required" msgstr "Textsucheparser muss angegeben werden" -#: commands/tsearchcmds.c:1273 +#: commands/tsearchcmds.c:1200 #, c-format msgid "token type \"%s\" does not exist" msgstr "Tokentyp »%s« existiert nicht" -#: commands/tsearchcmds.c:1500 +#: commands/tsearchcmds.c:1427 #, c-format msgid "mapping for token type \"%s\" does not exist" msgstr "Mapping für Tokentyp »%s« existiert nicht" -#: commands/tsearchcmds.c:1506 +#: commands/tsearchcmds.c:1433 #, c-format msgid "mapping for token type \"%s\" does not exist, skipping" msgstr "Mapping für Tokentyp »%s« existiert nicht, wird übersprungen" -#: commands/tsearchcmds.c:1669 commands/tsearchcmds.c:1784 +#: commands/tsearchcmds.c:1596 commands/tsearchcmds.c:1711 #, c-format msgid "invalid parameter list format: \"%s\"" msgstr "ungültiges Parameterlistenformat: »%s«" -#: commands/typecmds.c:205 +#: commands/typecmds.c:217 #, c-format msgid "must be superuser to create a base type" msgstr "nur Superuser können Basistypen anlegen" -#: commands/typecmds.c:263 +#: commands/typecmds.c:275 #, c-format msgid "Create the type as a shell type, then create its I/O functions, then do a full CREATE TYPE." -msgstr "" +msgstr "Erzeugen Sie den Typ als Shell-Typ, legen Sie dann die I/O-Funktionen an und führen Sie dann das volle CREATE TYPE aus." -#: commands/typecmds.c:313 commands/typecmds.c:1393 commands/typecmds.c:3809 +#: commands/typecmds.c:327 commands/typecmds.c:1465 commands/typecmds.c:4281 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "Typ-Attribut »%s« nicht erkannt" -#: commands/typecmds.c:369 +#: commands/typecmds.c:385 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "ungültige Typenkategorie »%s«: muss einfacher ASCII-Wert sein" -#: commands/typecmds.c:388 +#: commands/typecmds.c:404 #, c-format msgid "array element type cannot be %s" msgstr "Arrayelementtyp kann nicht %s sein" -#: commands/typecmds.c:420 +#: commands/typecmds.c:436 #, c-format msgid "alignment \"%s\" not recognized" msgstr "Ausrichtung »%s« nicht erkannt" -#: commands/typecmds.c:437 commands/typecmds.c:3695 +#: commands/typecmds.c:453 commands/typecmds.c:4155 #, c-format msgid "storage \"%s\" not recognized" msgstr "Storage-Typ »%s« nicht erkannt" -#: commands/typecmds.c:448 +#: commands/typecmds.c:464 #, c-format msgid "type input function must be specified" msgstr "Typeingabefunktion muss angegeben werden" -#: commands/typecmds.c:452 +#: commands/typecmds.c:468 #, c-format msgid "type output function must be specified" msgstr "Typausgabefunktion muss angegeben werden" -#: commands/typecmds.c:457 +#: commands/typecmds.c:473 #, c-format msgid "type modifier output function is useless without a type modifier input function" msgstr "Typmodifikatorausgabefunktion ist nutzlos ohne Typmodifikatoreingabefunktion" -#: commands/typecmds.c:744 +#: commands/typecmds.c:515 +#, c-format +msgid "element type cannot be specified without a valid subscripting procedure" +msgstr "" + +#: commands/typecmds.c:784 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "»%s« ist kein gültiger Basistyp für eine Domäne" -#: commands/typecmds.c:836 +#: commands/typecmds.c:882 #, c-format msgid "multiple default expressions" msgstr "mehrere Vorgabeausdrücke" -#: commands/typecmds.c:899 commands/typecmds.c:908 +#: commands/typecmds.c:945 commands/typecmds.c:954 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "wiedersprüchliche NULL/NOT NULL-Constraints" -#: commands/typecmds.c:924 +#: commands/typecmds.c:970 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "Check-Constraints für Domänen können nicht als NO INHERIT markiert werden" -#: commands/typecmds.c:933 commands/typecmds.c:2513 +#: commands/typecmds.c:979 commands/typecmds.c:2975 #, c-format msgid "unique constraints not possible for domains" msgstr "Unique-Constraints sind nicht für Domänen möglich" -#: commands/typecmds.c:939 commands/typecmds.c:2519 +#: commands/typecmds.c:985 commands/typecmds.c:2981 #, c-format msgid "primary key constraints not possible for domains" msgstr "Primärschlüssel-Constraints sind nicht fürDomänen möglich" -#: commands/typecmds.c:945 commands/typecmds.c:2525 +#: commands/typecmds.c:991 commands/typecmds.c:2987 #, c-format msgid "exclusion constraints not possible for domains" msgstr "Exclusion-Constraints sind nicht für Domänen möglich" -#: commands/typecmds.c:951 commands/typecmds.c:2531 +#: commands/typecmds.c:997 commands/typecmds.c:2993 #, c-format msgid "foreign key constraints not possible for domains" msgstr "Fremdschlüssel-Constraints sind nicht für Domänen möglich" -#: commands/typecmds.c:960 commands/typecmds.c:2540 +#: commands/typecmds.c:1006 commands/typecmds.c:3002 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "Setzen des Constraint-Modus wird für Domänen nicht unterstützt" -#: commands/typecmds.c:1270 utils/cache/typcache.c:2430 +#: commands/typecmds.c:1320 utils/cache/typcache.c:2545 #, c-format msgid "%s is not an enum" msgstr "»%s« ist kein Enum" -#: commands/typecmds.c:1401 +#: commands/typecmds.c:1473 #, c-format msgid "type attribute \"subtype\" is required" msgstr "Typ-Attribut »subtype« muss angegeben werden" -#: commands/typecmds.c:1406 +#: commands/typecmds.c:1478 #, c-format msgid "range subtype cannot be %s" msgstr "Bereichtsuntertyp kann nicht %s sein" -#: commands/typecmds.c:1425 +#: commands/typecmds.c:1497 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "Sortierfolge für Bereichstyp angegeben, aber Untertyp unterstützt keine Sortierfolgen" -#: commands/typecmds.c:1435 -#, fuzzy, c-format -#| msgid "range canonical function %s must return range type" +#: commands/typecmds.c:1507 +#, c-format msgid "cannot specify a canonical function without a pre-created shell type" -msgstr "Bereichstyp-Canonical-Funktion %s muss Bereichstyp zurückgeben" +msgstr "Canonical-Funktion kann nicht angegeben werden ohne einen vorher angelegten Shell-Typ" -#: commands/typecmds.c:1436 +#: commands/typecmds.c:1508 #, c-format msgid "Create the type as a shell type, then create its canonicalization function, then do a full CREATE TYPE." -msgstr "" +msgstr "Erzeugen Sie den Typ als Shell-Typ, legen Sie dann die Canonicalization-Funktion an und führen Sie dann das volle CREATE TYPE aus." -#: commands/typecmds.c:1654 +#: commands/typecmds.c:1982 +#, c-format +msgid "type input function %s has multiple matches" +msgstr "Typeingabefunktion %s hat mehrere Übereinstimmungen" + +#: commands/typecmds.c:2000 #, c-format msgid "type input function %s must return type %s" msgstr "Typeingabefunktion %s muss Typ %s zurückgeben" -#: commands/typecmds.c:1670 +#: commands/typecmds.c:2016 #, c-format msgid "type input function %s should not be volatile" msgstr "Typeingabefunktion %s sollte nicht VOLATILE sein" -#: commands/typecmds.c:1698 +#: commands/typecmds.c:2044 #, c-format msgid "type output function %s must return type %s" msgstr "Typausgabefunktion %s muss Typ %s zurückgeben" -#: commands/typecmds.c:1705 +#: commands/typecmds.c:2051 #, c-format msgid "type output function %s should not be volatile" msgstr "Typausgabefunktion %s sollte nicht VOLATILE sein" -#: commands/typecmds.c:1741 +#: commands/typecmds.c:2080 +#, c-format +msgid "type receive function %s has multiple matches" +msgstr "Typempfangsfunktion %s hat mehrere Übereinstimmungen" + +#: commands/typecmds.c:2098 #, c-format msgid "type receive function %s must return type %s" msgstr "Typempfangsfunktion %s muss Typ %s zurückgeben" -#: commands/typecmds.c:1748 +#: commands/typecmds.c:2105 #, c-format msgid "type receive function %s should not be volatile" msgstr "Typempfangsfunktion %s sollte nicht VOLATILE sein" -#: commands/typecmds.c:1776 +#: commands/typecmds.c:2133 #, c-format msgid "type send function %s must return type %s" msgstr "Typsendefunktion %s muss Typ %s zurückgeben" -#: commands/typecmds.c:1783 +#: commands/typecmds.c:2140 #, c-format msgid "type send function %s should not be volatile" msgstr "Typsendefunktion %s sollte nicht VOLATILE sein" -#: commands/typecmds.c:1810 +#: commands/typecmds.c:2167 #, c-format msgid "typmod_in function %s must return type %s" msgstr "typmod_in-Funktion %s muss Typ %s zurückgeben" -#: commands/typecmds.c:1817 +#: commands/typecmds.c:2174 #, c-format msgid "type modifier input function %s should not be volatile" msgstr "Typmodifikatoreingabefunktion %s sollte nicht VOLATILE sein" -#: commands/typecmds.c:1844 +#: commands/typecmds.c:2201 #, c-format msgid "typmod_out function %s must return type %s" msgstr "typmod_out-Funktion %s muss Typ %s zurückgeben" -#: commands/typecmds.c:1851 +#: commands/typecmds.c:2208 #, c-format msgid "type modifier output function %s should not be volatile" msgstr "Typmodifikatorausgabefunktion %s sollte nicht VOLATILE sein" -#: commands/typecmds.c:1878 +#: commands/typecmds.c:2235 #, c-format msgid "type analyze function %s must return type %s" msgstr "Typanalysefunktion %s muss Typ %s zurückgeben" -#: commands/typecmds.c:1924 +#: commands/typecmds.c:2264 +#, fuzzy, c-format +#| msgid "type input function %s must return type %s" +msgid "type subscripting function %s must return type %s" +msgstr "Typeingabefunktion %s muss Typ %s zurückgeben" + +#: commands/typecmds.c:2274 +#, c-format +msgid "user-defined types cannot use subscripting function %s" +msgstr "" + +#: commands/typecmds.c:2320 #, c-format msgid "You must specify an operator class for the range type or define a default operator class for the subtype." msgstr "Sie müssen für den Bereichstyp eine Operatorklasse angeben oder eine Standardoperatorklasse für den Untertyp definieren." -#: commands/typecmds.c:1955 +#: commands/typecmds.c:2351 #, c-format msgid "range canonical function %s must return range type" msgstr "Bereichstyp-Canonical-Funktion %s muss Bereichstyp zurückgeben" -#: commands/typecmds.c:1961 +#: commands/typecmds.c:2357 #, c-format msgid "range canonical function %s must be immutable" msgstr "Bereichstyp-Canonical-Funktion %s muss »immutable« sein" -#: commands/typecmds.c:1997 +#: commands/typecmds.c:2393 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "Bereichstyp-Untertyp-Diff-Funktion %s muss Typ %s zurückgeben" -#: commands/typecmds.c:2004 +#: commands/typecmds.c:2400 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "Bereichstyp-Untertyp-Diff-Funktion %s muss »immutable« sein" -#: commands/typecmds.c:2031 +#: commands/typecmds.c:2427 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "Array-OID-Wert für pg_type ist im Binary-Upgrade-Modus nicht gesetzt" -#: commands/typecmds.c:2329 +#: commands/typecmds.c:2460 +#, c-format +msgid "pg_type multirange OID value not set when in binary upgrade mode" +msgstr "Multirange-OID-Wert für pg_type ist im Binary-Upgrade-Modus nicht gesetzt" + +#: commands/typecmds.c:2493 +#, c-format +msgid "pg_type multirange array OID value not set when in binary upgrade mode" +msgstr "Multirange-Array-OID-Wert für pg_type ist im Binary-Upgrade-Modus nicht gesetzt" + +#: commands/typecmds.c:2791 #, c-format msgid "column \"%s\" of table \"%s\" contains null values" msgstr "Spalte »%s« von Tabelle »%s« enthält NULL-Werte" -#: commands/typecmds.c:2442 commands/typecmds.c:2644 +#: commands/typecmds.c:2904 commands/typecmds.c:3106 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "Constraint »%s« von Domäne »%s« existiert nicht" -#: commands/typecmds.c:2446 +#: commands/typecmds.c:2908 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "Constraint »%s« von Domäne »%s« existiert nicht, wird übersprungen" -#: commands/typecmds.c:2651 +#: commands/typecmds.c:3113 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "Constraint »%s« von Domäne »%s« ist kein Check-Constraint" -#: commands/typecmds.c:2757 +#: commands/typecmds.c:3219 #, c-format msgid "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "Spalte »%s« von Tabelle »%s« enthält Werte, die den neuen Constraint verletzen" -#: commands/typecmds.c:2986 commands/typecmds.c:3184 commands/typecmds.c:3266 -#: commands/typecmds.c:3453 +#: commands/typecmds.c:3448 commands/typecmds.c:3646 commands/typecmds.c:3727 +#: commands/typecmds.c:3913 #, c-format msgid "%s is not a domain" msgstr "%s ist keine Domäne" -#: commands/typecmds.c:3018 +#: commands/typecmds.c:3480 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "Constraint »%s« für Domäne »%s« existiert bereits" -#: commands/typecmds.c:3069 +#: commands/typecmds.c:3531 #, c-format msgid "cannot use table references in domain check constraint" msgstr "Tabellenverweise können in Domänen-Check-Constraints nicht verwendet werden" -#: commands/typecmds.c:3196 commands/typecmds.c:3278 commands/typecmds.c:3570 +#: commands/typecmds.c:3658 commands/typecmds.c:3739 commands/typecmds.c:4030 #, c-format msgid "%s is a table's row type" msgstr "%s ist der Zeilentyp einer Tabelle" -#: commands/typecmds.c:3198 commands/typecmds.c:3280 commands/typecmds.c:3572 +#: commands/typecmds.c:3660 commands/typecmds.c:3741 commands/typecmds.c:4032 #, c-format msgid "Use ALTER TABLE instead." msgstr "Verwenden Sie stattdessen ALTER TABLE." -#: commands/typecmds.c:3205 commands/typecmds.c:3287 commands/typecmds.c:3485 +#: commands/typecmds.c:3666 commands/typecmds.c:3747 commands/typecmds.c:3945 #, c-format msgid "cannot alter array type %s" msgstr "Array-Typ %s kann nicht verändert werden" -#: commands/typecmds.c:3207 commands/typecmds.c:3289 commands/typecmds.c:3487 +#: commands/typecmds.c:3668 commands/typecmds.c:3749 commands/typecmds.c:3947 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "Sie können den Typ %s ändern, wodurch der Array-Typ ebenfalls geändert wird." -#: commands/typecmds.c:3555 +#: commands/typecmds.c:4015 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "Typ %s existiert bereits in Schema »%s«" -#: commands/typecmds.c:3723 -#, fuzzy, c-format -#| msgid "cannot cast type %s to %s" +#: commands/typecmds.c:4183 +#, c-format msgid "cannot change type's storage to PLAIN" -msgstr "kann Typ %s nicht in Typ %s umwandeln" +msgstr "Storage-Typ eines Typs kann nicht in PLAIN geändert werden" -#: commands/typecmds.c:3804 -#, fuzzy, c-format -#| msgid "operator attribute \"%s\" cannot be changed" +#: commands/typecmds.c:4276 +#, c-format msgid "type attribute \"%s\" cannot be changed" -msgstr "Operator-Attribut »%s« kann nicht geändert werden" +msgstr "Typ-Attribut »%s« kann nicht geändert werden" -#: commands/typecmds.c:3822 -#, fuzzy, c-format -#| msgid "must be superuser to create a base type" +#: commands/typecmds.c:4294 +#, c-format msgid "must be superuser to alter a type" -msgstr "nur Superuser können Basistypen anlegen" +msgstr "nur Superuser können Typen ändern" -#: commands/typecmds.c:3843 commands/typecmds.c:3853 -#, fuzzy, c-format -#| msgid "\"%s\" is not a type" +#: commands/typecmds.c:4315 commands/typecmds.c:4324 +#, c-format msgid "%s is not a base type" -msgstr "»%s« ist kein Typ" +msgstr "%s ist kein Basistyp" #: commands/user.c:140 #, c-format @@ -11039,33 +11394,33 @@ msgstr "nur Superuser können Superuser anlegen" msgid "must be superuser to create replication users" msgstr "nur Superuser können Replikationsbenutzer anlegen" -#: commands/user.c:308 commands/user.c:734 +#: commands/user.c:308 #, c-format -msgid "must be superuser to change bypassrls attribute" -msgstr "nur Superuser können das Attribut »bypassrls« ändern" +msgid "must be superuser to create bypassrls users" +msgstr "nur Superuser können Benutzer mit »bypassrls« anlegen" #: commands/user.c:315 #, c-format msgid "permission denied to create role" msgstr "keine Berechtigung, um Rolle zu erzeugen" -#: commands/user.c:325 commands/user.c:1224 commands/user.c:1231 gram.y:15143 -#: gram.y:15181 utils/adt/acl.c:5327 utils/adt/acl.c:5333 +#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15281 +#: gram.y:15326 utils/adt/acl.c:5248 utils/adt/acl.c:5254 #, c-format msgid "role name \"%s\" is reserved" msgstr "Rollenname »%s« ist reserviert" -#: commands/user.c:327 commands/user.c:1226 commands/user.c:1233 +#: commands/user.c:327 commands/user.c:1228 commands/user.c:1235 #, c-format msgid "Role names starting with \"pg_\" are reserved." msgstr "Rollennamen, die mit »pg_« anfangen, sind reserviert." -#: commands/user.c:348 commands/user.c:1248 +#: commands/user.c:348 commands/user.c:1250 #, c-format msgid "role \"%s\" already exists" msgstr "Rolle »%s« existiert bereits" -#: commands/user.c:414 commands/user.c:843 +#: commands/user.c:414 commands/user.c:845 #, c-format msgid "empty string is not a valid password, clearing password" msgstr "leere Zeichenkette ist kein gültiges Passwort, Passwort wird entfernt" @@ -11075,232 +11430,259 @@ msgstr "leere Zeichenkette ist kein gültiges Passwort, Passwort wird entfernt" msgid "pg_authid OID value not set when in binary upgrade mode" msgstr "OID-Wert für pg_auth ist im Binary-Upgrade-Modus nicht gesetzt" -#: commands/user.c:720 commands/user.c:944 commands/user.c:1485 -#: commands/user.c:1627 -#, c-format -msgid "must be superuser to alter superusers" -msgstr "nur Superuser können Superuser ändern" +#: commands/user.c:722 +#, fuzzy, c-format +#| msgid "must be superuser to change bypassrls attribute" +msgid "must be superuser to alter superuser roles or change superuser attribute" +msgstr "nur Superuser können das Attribut »bypassrls« ändern" + +#: commands/user.c:729 +#, fuzzy, c-format +#| msgid "must be superuser or replication role to use replication slots" +msgid "must be superuser to alter replication roles or change replication attribute" +msgstr "nur Superuser und Replikationsrollen können Replikations-Slots verwenden" -#: commands/user.c:727 +#: commands/user.c:736 #, c-format -msgid "must be superuser to alter replication users" -msgstr "nur Superuser können Replikationsbenutzer ändern" +msgid "must be superuser to change bypassrls attribute" +msgstr "nur Superuser können das Attribut »bypassrls« ändern" -#: commands/user.c:750 commands/user.c:951 +#: commands/user.c:752 commands/user.c:953 #, c-format msgid "permission denied" msgstr "keine Berechtigung" -#: commands/user.c:981 +#: commands/user.c:946 commands/user.c:1487 commands/user.c:1665 +#, c-format +msgid "must be superuser to alter superusers" +msgstr "nur Superuser können Superuser ändern" + +#: commands/user.c:983 #, c-format msgid "must be superuser to alter settings globally" msgstr "nur Superuser können globale Einstellungen ändern" -#: commands/user.c:1003 +#: commands/user.c:1005 #, c-format msgid "permission denied to drop role" msgstr "keine Berechtigung, um Rolle zu entfernen" -#: commands/user.c:1028 +#: commands/user.c:1030 #, c-format msgid "cannot use special role specifier in DROP ROLE" msgstr "in DROP ROLE kann kein Rollenplatzhalter verwendet werden" -#: commands/user.c:1038 commands/user.c:1195 commands/variable.c:770 -#: commands/variable.c:844 utils/adt/acl.c:5184 utils/adt/acl.c:5231 -#: utils/adt/acl.c:5259 utils/adt/acl.c:5277 utils/init/miscinit.c:675 +#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:778 +#: commands/variable.c:781 commands/variable.c:865 commands/variable.c:868 +#: utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 +#: utils/adt/acl.c:5198 utils/init/miscinit.c:705 #, c-format msgid "role \"%s\" does not exist" msgstr "Rolle »%s« existiert nicht" -#: commands/user.c:1043 +#: commands/user.c:1045 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "Rolle »%s« existiert nicht, wird übersprungen" -#: commands/user.c:1056 commands/user.c:1060 +#: commands/user.c:1058 commands/user.c:1062 #, c-format msgid "current user cannot be dropped" msgstr "aktueller Benutzer kann nicht entfernt werden" -#: commands/user.c:1064 +#: commands/user.c:1066 #, c-format msgid "session user cannot be dropped" msgstr "aktueller Sitzungsbenutzer kann nicht entfernt werden" -#: commands/user.c:1074 +#: commands/user.c:1076 #, c-format msgid "must be superuser to drop superusers" msgstr "nur Superuser können Superuser löschen" -#: commands/user.c:1090 +#: commands/user.c:1092 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "kann Rolle »%s« nicht löschen, weil andere Objekte davon abhängen" -#: commands/user.c:1211 +#: commands/user.c:1213 #, c-format msgid "session user cannot be renamed" msgstr "aktueller Sitzungsbenutzer kann nicht umbenannt werden" -#: commands/user.c:1215 +#: commands/user.c:1217 #, c-format msgid "current user cannot be renamed" msgstr "aktueller Benutzer kann nicht umbenannt werden" -#: commands/user.c:1258 +#: commands/user.c:1260 #, c-format msgid "must be superuser to rename superusers" msgstr "nur Superuser können Superuser umbenennen" -#: commands/user.c:1265 +#: commands/user.c:1267 #, c-format msgid "permission denied to rename role" msgstr "keine Berechtigung, um Rolle umzubenennen" -#: commands/user.c:1286 +#: commands/user.c:1288 #, c-format msgid "MD5 password cleared because of role rename" msgstr "MD5-Passwort wegen Rollenumbenennung gelöscht" -#: commands/user.c:1346 +#: commands/user.c:1348 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "bei GRANT/REVOKE ROLE können keine Spaltennamen angegeben werden" -#: commands/user.c:1384 +#: commands/user.c:1386 #, c-format msgid "permission denied to drop objects" msgstr "keine Berechtigung, um Objekte zu löschen" -#: commands/user.c:1411 commands/user.c:1420 +#: commands/user.c:1413 commands/user.c:1422 #, c-format msgid "permission denied to reassign objects" msgstr "keine Berechtigung, um Objekte neu zuzuordnen" -#: commands/user.c:1493 commands/user.c:1635 +#: commands/user.c:1495 commands/user.c:1673 #, c-format msgid "must have admin option on role \"%s\"" msgstr "Admin-Option für Rolle »%s« wird benötigt" -#: commands/user.c:1510 +#: commands/user.c:1509 +#, fuzzy, c-format +#| msgid "table \"%s\" cannot be replicated" +msgid "role \"%s\" cannot have explicit members" +msgstr "Tabelle »%s« kann nicht repliziert werden" + +#: commands/user.c:1524 #, c-format msgid "must be superuser to set grantor" msgstr "nur Superuser können Grantor setzen" -#: commands/user.c:1535 +#: commands/user.c:1560 +#, fuzzy, c-format +#| msgid "role \"%s\" is not a member of role \"%s\"" +msgid "role \"%s\" cannot be a member of any role" +msgstr "Rolle »%s« ist kein Mitglied der Rolle »%s«" + +#: commands/user.c:1573 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "Rolle »%s« ist ein Mitglied der Rolle »%s«" -#: commands/user.c:1550 +#: commands/user.c:1588 #, c-format msgid "role \"%s\" is already a member of role \"%s\"" msgstr "Rolle »%s« ist schon Mitglied der Rolle »%s«" -#: commands/user.c:1657 +#: commands/user.c:1695 #, c-format msgid "role \"%s\" is not a member of role \"%s\"" msgstr "Rolle »%s« ist kein Mitglied der Rolle »%s«" -#: commands/vacuum.c:129 +#: commands/vacuum.c:132 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "unbekannte ANALYZE-Option »%s«" -#: commands/vacuum.c:151 -#, fuzzy, c-format -#| msgid "-X requires a power of two value between 1 MB and 1 GB" +#: commands/vacuum.c:156 +#, c-format msgid "parallel option requires a value between 0 and %d" -msgstr "-X benötigt eine Zweierpotenz zwischen 1 MB und 1 GB" +msgstr "Option PARALLEL benötigt einen Wert zwischen 0 und %d" -#: commands/vacuum.c:163 -#, fuzzy, c-format -#| msgid "keepalives parameter must be an integer\n" +#: commands/vacuum.c:168 +#, c-format msgid "parallel vacuum degree must be between 0 and %d" -msgstr "Parameter »keepalives« muss eine ganze Zahl sein\n" +msgstr "Grad für paralleles Vacuum muss zwischen 0 und %d sein" -#: commands/vacuum.c:180 +#: commands/vacuum.c:185 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "unbekannte VACUUM-Option »%s«" -#: commands/vacuum.c:203 +#: commands/vacuum.c:208 #, c-format msgid "VACUUM FULL cannot be performed in parallel" -msgstr "" +msgstr "VACUUM FULL kann nicht parallel ausgeführt werden" -#: commands/vacuum.c:219 +#: commands/vacuum.c:224 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "Option ANALYZE muss angegeben werden, wenn eine Spaltenliste angegeben ist" -#: commands/vacuum.c:309 +#: commands/vacuum.c:314 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s kann nicht aus VACUUM oder ANALYZE ausgeführt werden" -#: commands/vacuum.c:319 +#: commands/vacuum.c:324 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "VACUUM-Option DISABLE_PAGE_SKIPPING kann nicht zusammen mit FULL verwendet werden" -#: commands/vacuum.c:560 +#: commands/vacuum.c:331 +#, c-format +msgid "PROCESS_TOAST required with VACUUM FULL" +msgstr "PROCESS_TOAST benötigt VACUUM FULL" + +#: commands/vacuum.c:572 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "überspringe »%s« --- nur Superuser kann sie vacuumen" -#: commands/vacuum.c:564 +#: commands/vacuum.c:576 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "überspringe »%s« --- nur Superuser oder Eigentümer der Datenbank kann sie vacuumen" -#: commands/vacuum.c:568 +#: commands/vacuum.c:580 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "überspringe »%s« --- nur Eigentümer der Tabelle oder der Datenbank kann sie vacuumen" -#: commands/vacuum.c:583 +#: commands/vacuum.c:595 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "überspringe »%s« --- nur Superuser kann sie analysieren" -#: commands/vacuum.c:587 +#: commands/vacuum.c:599 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "überspringe »%s« --- nur Superuser oder Eigentümer der Datenbank kann sie analysieren" -#: commands/vacuum.c:591 +#: commands/vacuum.c:603 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "überspringe »%s« --- nur Eigentümer der Tabelle oder der Datenbank kann sie analysieren" -#: commands/vacuum.c:670 commands/vacuum.c:766 +#: commands/vacuum.c:682 commands/vacuum.c:778 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "überspringe Vacuum von »%s« --- Sperre nicht verfügbar" -#: commands/vacuum.c:675 +#: commands/vacuum.c:687 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "überspringe Vacuum von »%s« --- Relation existiert nicht mehr" -#: commands/vacuum.c:691 commands/vacuum.c:771 +#: commands/vacuum.c:703 commands/vacuum.c:783 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "überspringe Analyze von »%s« --- Sperre nicht verfügbar" -#: commands/vacuum.c:696 +#: commands/vacuum.c:708 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "überspringe Analyze von »%s« --- Relation existiert nicht mehr" -#: commands/vacuum.c:994 +#: commands/vacuum.c:1026 #, c-format msgid "oldest xmin is far in the past" msgstr "älteste xmin ist weit in der Vergangenheit" -#: commands/vacuum.c:995 +#: commands/vacuum.c:1027 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -11309,32 +11691,32 @@ msgstr "" "Schließen Sie bald alle offenen Transaktionen, um Überlaufprobleme zu vermeiden.\n" "Eventuell müssen Sie auch alte vorbereitete Transaktionen committen oder zurückrollen oder unbenutzte Replikations-Slots löschen." -#: commands/vacuum.c:1036 +#: commands/vacuum.c:1068 #, c-format msgid "oldest multixact is far in the past" msgstr "älteste Multixact ist weit in der Vergangenheit" -#: commands/vacuum.c:1037 +#: commands/vacuum.c:1069 #, c-format msgid "Close open transactions with multixacts soon to avoid wraparound problems." msgstr "Schließen Sie bald alle offenen Transaktionen mit Multixacts, um Überlaufprobleme zu vermeiden." -#: commands/vacuum.c:1612 +#: commands/vacuum.c:1726 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "einige Datenbanken sind seit über 2 Milliarden Transaktionen nicht gevacuumt worden" -#: commands/vacuum.c:1613 +#: commands/vacuum.c:1727 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "Sie haben möglicherweise bereits Daten wegen Transaktionsnummernüberlauf verloren." -#: commands/vacuum.c:1771 +#: commands/vacuum.c:1891 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "überspringe »%s« --- kann Nicht-Tabellen oder besondere Systemtabellen nicht vacuumen" -#: commands/variable.c:165 utils/misc/guc.c:11166 utils/misc/guc.c:11228 +#: commands/variable.c:165 utils/misc/guc.c:11658 utils/misc/guc.c:11720 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Unbekanntes Schlüsselwort: »%s«." @@ -11394,7 +11776,7 @@ msgstr "SET TRANSACTION ISOLATION LEVEL muss vor allen Anfragen aufgerufen werde msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" msgstr "SET TRANSACTION ISOLATION LEVEL kann nicht in einer Subtransaktion aufgerufen werden" -#: commands/variable.c:548 storage/lmgr/predicate.c:1623 +#: commands/variable.c:548 storage/lmgr/predicate.c:1693 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "kann serialisierbaren Modus nicht in einem Hot Standby verwenden" @@ -11429,7 +11811,12 @@ msgstr "»client_encoding« kann jetzt nicht geändert werden." msgid "cannot change client_encoding during a parallel operation" msgstr "client_encoding kann nicht während einer parallelen Operation geändert werden" -#: commands/variable.c:863 +#: commands/variable.c:890 +#, c-format +msgid "permission will be denied to set role \"%s\"" +msgstr "Berechtigung fehlt, um Rolle »%s« zu setzen" + +#: commands/variable.c:895 #, c-format msgid "permission denied to set role \"%s\"" msgstr "keine Berechtigung, um Rolle »%s« zu setzen" @@ -11452,7 +11839,7 @@ msgstr "kann Namen der Sichtspalte »%s« nicht in »%s« ändern" #: commands/view.c:284 #, c-format msgid "Use ALTER VIEW ... RENAME COLUMN ... to change name of view column instead." -msgstr "" +msgstr "Verwenden Sie stattdessen ALTER VIEW ... RENAME COLUMN ..., um den Namen einer Sichtspalte zu ändern." #: commands/view.c:290 #, c-format @@ -11515,392 +11902,419 @@ msgstr "Cursor »%s« ist nicht auf eine Zeile positioniert" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "Cursor »%s« ist kein einfach aktualisierbarer Scan der Tabelle »%s«" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2409 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2443 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "Typ von Parameter %d (%s) stimmt nicht mit dem überein, als der Plan vorbereitet worden ist (%s)" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2421 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2455 #, c-format msgid "no value found for parameter %d" msgstr "kein Wert für Parameter %d gefunden" -#: executor/execExpr.c:859 parser/parse_agg.c:816 +#: executor/execExpr.c:612 executor/execExpr.c:619 executor/execExpr.c:625 +#: executor/execExprInterp.c:4011 executor/execExprInterp.c:4028 +#: executor/execExprInterp.c:4129 executor/nodeModifyTable.c:117 +#: executor/nodeModifyTable.c:128 executor/nodeModifyTable.c:145 +#: executor/nodeModifyTable.c:153 +#, c-format +msgid "table row type and query-specified row type do not match" +msgstr "Zeilentyp der Tabelle und der von der Anfrage angegebene Zeilentyp stimmen nicht überein" + +#: executor/execExpr.c:613 executor/nodeModifyTable.c:118 +#, c-format +msgid "Query has too many columns." +msgstr "Anfrage hat zu viele Spalten." + +#: executor/execExpr.c:620 executor/nodeModifyTable.c:146 +#, c-format +msgid "Query provides a value for a dropped column at ordinal position %d." +msgstr "Anfrage liefert einen Wert für eine gelöschte Spalte auf Position %d." + +#: executor/execExpr.c:626 executor/execExprInterp.c:4029 +#: executor/nodeModifyTable.c:129 +#, c-format +msgid "Table has type %s at ordinal position %d, but query expects %s." +msgstr "Tabelle hat Typ %s auf Position %d, aber Anfrage erwartet %s." + +#: executor/execExpr.c:1056 parser/parse_agg.c:827 #, c-format msgid "window function calls cannot be nested" msgstr "Aufrufe von Fensterfunktionen können nicht geschachtelt werden" -#: executor/execExpr.c:1318 +#: executor/execExpr.c:1561 #, c-format msgid "target type is not an array" msgstr "Zieltyp ist kein Array" -#: executor/execExpr.c:1651 +#: executor/execExpr.c:1901 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "ROW()-Spalte hat Typ %s statt Typ %s" -#: executor/execExpr.c:2176 executor/execSRF.c:708 parser/parse_func.c:135 -#: parser/parse_func.c:646 parser/parse_func.c:1020 +#: executor/execExpr.c:2426 executor/execSRF.c:718 parser/parse_func.c:136 +#: parser/parse_func.c:654 parser/parse_func.c:1030 #, c-format msgid "cannot pass more than %d argument to a function" msgid_plural "cannot pass more than %d arguments to a function" msgstr[0] "kann nicht mehr als %d Argument an eine Funktion übergeben" msgstr[1] "kann nicht mehr als %d Argumente an eine Funktion übergeben" -#: executor/execExpr.c:2587 executor/execExpr.c:2593 -#: executor/execExprInterp.c:2735 utils/adt/arrayfuncs.c:262 -#: utils/adt/arrayfuncs.c:560 utils/adt/arrayfuncs.c:1302 -#: utils/adt/arrayfuncs.c:3348 utils/adt/arrayfuncs.c:5308 -#: utils/adt/arrayfuncs.c:5821 -#, c-format -msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" -msgstr "Anzahl der Arraydimensionen (%d) überschreitet erlaubtes Maximum (%d)" +#: executor/execExpr.c:2812 parser/parse_node.c:277 parser/parse_node.c:327 +#, fuzzy, c-format +#| msgid "cannot subscript type %s because it is not an array" +msgid "cannot subscript type %s because it does not support subscripting" +msgstr "kann aus Typ %s kein Element auswählen, weil er kein Array ist" + +#: executor/execExpr.c:2940 executor/execExpr.c:2962 +#, fuzzy, c-format +#| msgid "The server (version %s) does not support subscriptions." +msgid "type %s does not support subscripted assignment" +msgstr "Der Server (Version %s) unterstützt keine Subskriptionen." -#: executor/execExprInterp.c:1899 +#: executor/execExprInterp.c:1911 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "Attribut %d von Typ %s wurde gelöscht" -#: executor/execExprInterp.c:1905 +#: executor/execExprInterp.c:1917 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "Attribut %d von Typ %s hat falschen Typ" -#: executor/execExprInterp.c:1907 executor/execExprInterp.c:3007 -#: executor/execExprInterp.c:3054 +#: executor/execExprInterp.c:1919 executor/execExprInterp.c:3040 +#: executor/execExprInterp.c:3086 #, c-format msgid "Table has type %s, but query expects %s." msgstr "Tabelle hat Typ %s, aber Anfrage erwartet %s." -#: executor/execExprInterp.c:2499 +#: executor/execExprInterp.c:1998 utils/adt/expandedrecord.c:99 +#: utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1748 +#: utils/cache/typcache.c:1904 utils/cache/typcache.c:2033 +#: utils/fmgr/funcapi.c:458 +#, c-format +msgid "type %s is not composite" +msgstr "Typ %s ist kein zusammengesetzter Typ" + +#: executor/execExprInterp.c:2533 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF wird für diesen Tabellentyp nicht unterstützt" -#: executor/execExprInterp.c:2713 +#: executor/execExprInterp.c:2746 #, c-format msgid "cannot merge incompatible arrays" msgstr "kann inkompatible Arrays nicht verschmelzen" -#: executor/execExprInterp.c:2714 +#: executor/execExprInterp.c:2747 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "Arrayelement mit Typ %s kann nicht in ARRAY-Konstrukt mit Elementtyp %s verwendet werden." -#: executor/execExprInterp.c:2755 executor/execExprInterp.c:2785 +#: executor/execExprInterp.c:2768 utils/adt/arrayfuncs.c:262 +#: utils/adt/arrayfuncs.c:560 utils/adt/arrayfuncs.c:1302 +#: utils/adt/arrayfuncs.c:3374 utils/adt/arrayfuncs.c:5334 +#: utils/adt/arrayfuncs.c:5847 utils/adt/arraysubs.c:150 +#: utils/adt/arraysubs.c:488 +#, c-format +msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" +msgstr "Anzahl der Arraydimensionen (%d) überschreitet erlaubtes Maximum (%d)" + +#: executor/execExprInterp.c:2788 executor/execExprInterp.c:2818 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "mehrdimensionale Arrays müssen Arraysausdrücke mit gleicher Anzahl Dimensionen haben" -#: executor/execExprInterp.c:3006 executor/execExprInterp.c:3053 +#: executor/execExprInterp.c:3039 executor/execExprInterp.c:3085 #, c-format msgid "attribute %d has wrong type" msgstr "Attribut %d hat falschen Typ" -#: executor/execExprInterp.c:3163 -#, c-format -msgid "array subscript in assignment must not be null" -msgstr "Arrayindex in Zuweisung darf nicht NULL sein" - -#: executor/execExprInterp.c:3593 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3640 utils/adt/domains.c:149 #, c-format msgid "domain %s does not allow null values" msgstr "Domäne %s erlaubt keine NULL-Werte" -#: executor/execExprInterp.c:3608 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3655 utils/adt/domains.c:184 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "Wert für Domäne %s verletzt Check-Constraint »%s«" -#: executor/execExprInterp.c:3978 executor/execExprInterp.c:3995 -#: executor/execExprInterp.c:4096 executor/nodeModifyTable.c:109 -#: executor/nodeModifyTable.c:120 executor/nodeModifyTable.c:137 -#: executor/nodeModifyTable.c:145 -#, c-format -msgid "table row type and query-specified row type do not match" -msgstr "Zeilentyp der Tabelle und der von der Anfrage angegebene Zeilentyp stimmen nicht überein" - -#: executor/execExprInterp.c:3979 +#: executor/execExprInterp.c:4012 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." msgstr[0] "Tabellenzeile enthält %d Attribut, aber Anfrage erwartet %d." msgstr[1] "Tabellenzeile enthält %d Attribute, aber Anfrage erwartet %d." -#: executor/execExprInterp.c:3996 executor/nodeModifyTable.c:121 -#, c-format -msgid "Table has type %s at ordinal position %d, but query expects %s." -msgstr "Tabelle hat Typ %s auf Position %d, aber Anfrage erwartet %s." - -#: executor/execExprInterp.c:4097 executor/execSRF.c:967 +#: executor/execExprInterp.c:4130 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "Physischer Speicher stimmt nicht überein mit gelöschtem Attribut auf Position %d." -#: executor/execIndexing.c:550 +#: executor/execIndexing.c:571 #, c-format msgid "ON CONFLICT does not support deferrable unique constraints/exclusion constraints as arbiters" msgstr "ON CONFLICT unterstützt keine aufschiebbaren Unique-Constraints/Exclusion-Constraints als Arbiter" -#: executor/execIndexing.c:821 +#: executor/execIndexing.c:842 #, c-format msgid "could not create exclusion constraint \"%s\"" msgstr "konnte Exclusion-Constraint »%s« nicht erzeugen" -#: executor/execIndexing.c:824 +#: executor/execIndexing.c:845 #, c-format msgid "Key %s conflicts with key %s." msgstr "Schlüssel %s kollidiert mit Schlüssel %s." -#: executor/execIndexing.c:826 +#: executor/execIndexing.c:847 #, c-format msgid "Key conflicts exist." msgstr "Es bestehen Schlüsselkonflikte." -#: executor/execIndexing.c:832 +#: executor/execIndexing.c:853 #, c-format msgid "conflicting key value violates exclusion constraint \"%s\"" msgstr "kollidierender Schlüsselwert verletzt Exclusion-Constraint »%s«" -#: executor/execIndexing.c:835 +#: executor/execIndexing.c:856 #, c-format msgid "Key %s conflicts with existing key %s." msgstr "Schlüssel %s kollidiert mit vorhandenem Schlüssel %s." -#: executor/execIndexing.c:837 +#: executor/execIndexing.c:858 #, c-format msgid "Key conflicts with existing key." msgstr "Der Schlüssel kollidiert mit einem vorhandenen Schlüssel." -#: executor/execMain.c:1091 +#: executor/execMain.c:1007 #, c-format msgid "cannot change sequence \"%s\"" msgstr "kann Sequenz »%s« nicht ändern" -#: executor/execMain.c:1097 +#: executor/execMain.c:1013 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "kann TOAST-Relation »%s« nicht ändern" -#: executor/execMain.c:1115 rewrite/rewriteHandler.c:2934 -#: rewrite/rewriteHandler.c:3708 +#: executor/execMain.c:1031 rewrite/rewriteHandler.c:3041 +#: rewrite/rewriteHandler.c:3824 #, c-format msgid "cannot insert into view \"%s\"" msgstr "kann nicht in Sicht »%s« einfügen" -#: executor/execMain.c:1117 rewrite/rewriteHandler.c:2937 -#: rewrite/rewriteHandler.c:3711 +#: executor/execMain.c:1033 rewrite/rewriteHandler.c:3044 +#: rewrite/rewriteHandler.c:3827 #, c-format msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." msgstr "Um Einfügen in die Sicht zu ermöglichen, richten Sie einen INSTEAD OF INSERT Trigger oder eine ON INSERT DO INSTEAD Regel ohne Bedingung ein." -#: executor/execMain.c:1123 rewrite/rewriteHandler.c:2942 -#: rewrite/rewriteHandler.c:3716 +#: executor/execMain.c:1039 rewrite/rewriteHandler.c:3049 +#: rewrite/rewriteHandler.c:3832 #, c-format msgid "cannot update view \"%s\"" msgstr "kann Sicht »%s« nicht aktualisieren" -#: executor/execMain.c:1125 rewrite/rewriteHandler.c:2945 -#: rewrite/rewriteHandler.c:3719 +#: executor/execMain.c:1041 rewrite/rewriteHandler.c:3052 +#: rewrite/rewriteHandler.c:3835 #, c-format msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." msgstr "Um Aktualisieren der Sicht zu ermöglichen, richten Sie einen INSTEAD OF UPDATE Trigger oder eine ON UPDATE DO INSTEAD Regel ohne Bedingung ein." -#: executor/execMain.c:1131 rewrite/rewriteHandler.c:2950 -#: rewrite/rewriteHandler.c:3724 +#: executor/execMain.c:1047 rewrite/rewriteHandler.c:3057 +#: rewrite/rewriteHandler.c:3840 #, c-format msgid "cannot delete from view \"%s\"" msgstr "kann nicht aus Sicht »%s« löschen" -#: executor/execMain.c:1133 rewrite/rewriteHandler.c:2953 -#: rewrite/rewriteHandler.c:3727 +#: executor/execMain.c:1049 rewrite/rewriteHandler.c:3060 +#: rewrite/rewriteHandler.c:3843 #, c-format msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." msgstr "Um Löschen aus der Sicht zu ermöglichen, richten Sie einen INSTEAD OF DELETE Trigger oder eine ON DELETE DO INSTEAD Regel ohne Bedingung ein." -#: executor/execMain.c:1144 +#: executor/execMain.c:1060 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "kann materialisierte Sicht »%s« nicht ändern" -#: executor/execMain.c:1156 +#: executor/execMain.c:1072 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "kann nicht in Fremdtabelle »%s« einfügen" -#: executor/execMain.c:1162 +#: executor/execMain.c:1078 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "Fremdtabelle »%s« erlaubt kein Einfügen" -#: executor/execMain.c:1169 +#: executor/execMain.c:1085 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "kann Fremdtabelle »%s« nicht aktualisieren" -#: executor/execMain.c:1175 +#: executor/execMain.c:1091 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "Fremdtabelle »%s« erlaubt kein Aktualisieren" -#: executor/execMain.c:1182 +#: executor/execMain.c:1098 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "kann nicht aus Fremdtabelle »%s« löschen" -#: executor/execMain.c:1188 +#: executor/execMain.c:1104 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "Fremdtabelle »%s« erlaubt kein Löschen" -#: executor/execMain.c:1199 +#: executor/execMain.c:1115 #, c-format msgid "cannot change relation \"%s\"" msgstr "kann Relation »%s« nicht ändern" -#: executor/execMain.c:1226 +#: executor/execMain.c:1142 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "kann Zeilen in Sequenz »%s« nicht sperren" -#: executor/execMain.c:1233 +#: executor/execMain.c:1149 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "kann Zeilen in TOAST-Relation »%s« nicht sperren" -#: executor/execMain.c:1240 +#: executor/execMain.c:1156 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "kann Zeilen in Sicht »%s« nicht sperren" -#: executor/execMain.c:1248 +#: executor/execMain.c:1164 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "kann Zeilen in materialisierter Sicht »%s« nicht sperren" -#: executor/execMain.c:1257 executor/execMain.c:2627 +#: executor/execMain.c:1173 executor/execMain.c:2555 #: executor/nodeLockRows.c:132 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "kann Zeilen in Fremdtabelle »%s« nicht sperren" -#: executor/execMain.c:1263 +#: executor/execMain.c:1179 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "kann Zeilen in Relation »%s« nicht sperren" -#: executor/execMain.c:1879 +#: executor/execMain.c:1803 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "neue Zeile für Relation »%s« verletzt Partitions-Constraint" -#: executor/execMain.c:1881 executor/execMain.c:1964 executor/execMain.c:2012 -#: executor/execMain.c:2120 +#: executor/execMain.c:1805 executor/execMain.c:1888 executor/execMain.c:1938 +#: executor/execMain.c:2047 #, c-format msgid "Failing row contains %s." msgstr "Fehlgeschlagene Zeile enthält %s." -#: executor/execMain.c:1961 -#, fuzzy, c-format -#| msgid "null value in column \"%s\" violates not-null constraint" +#: executor/execMain.c:1885 +#, c-format msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" -msgstr "NULL-Wert in Spalte »%s« verletzt Not-Null-Constraint" +msgstr "NULL-Wert in Spalte »%s« von Relation »%s« verletzt Not-Null-Constraint" -#: executor/execMain.c:2010 +#: executor/execMain.c:1936 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "neue Zeile für Relation »%s« verletzt Check-Constraint »%s«" -#: executor/execMain.c:2118 +#: executor/execMain.c:2045 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "neue Zeile verletzt Check-Option für Sicht »%s«" -#: executor/execMain.c:2128 +#: executor/execMain.c:2055 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "neue Zeile verletzt Policy für Sicherheit auf Zeilenebene »%s« für Tabelle »%s«" -#: executor/execMain.c:2133 +#: executor/execMain.c:2060 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "neue Zeile verletzt Policy für Sicherheit auf Zeilenebene für Tabelle »%s«" -#: executor/execMain.c:2140 +#: executor/execMain.c:2067 #, c-format msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "neue Zeile verletzt Policy für Sicherheit auf Zeilenebene »%s« (USING-Ausdruck) für Tabelle »%s«" -#: executor/execMain.c:2145 +#: executor/execMain.c:2072 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "neue Zeile verletzt Policy für Sicherheit auf Zeilenebene (USING-Ausdruck) für Tabelle »%s«" -#: executor/execPartition.c:345 +#: executor/execPartition.c:322 #, c-format msgid "no partition of relation \"%s\" found for row" msgstr "keine Partition von Relation »%s« für die Zeile gefunden" -#: executor/execPartition.c:348 +#: executor/execPartition.c:325 #, c-format msgid "Partition key of the failing row contains %s." msgstr "Partitionierungsschlüssel der fehlgeschlagenen Zeile enthält %s." -#: executor/execReplication.c:195 executor/execReplication.c:372 +#: executor/execReplication.c:196 executor/execReplication.c:373 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update, retrying" msgstr "das zu sperrende Tupel wurde schon durch ein gleichzeitiges Update in eine andere Partition verschoben, versuche erneut" -#: executor/execReplication.c:199 executor/execReplication.c:376 +#: executor/execReplication.c:200 executor/execReplication.c:377 #, c-format msgid "concurrent update, retrying" msgstr "gleichzeitige Aktualisierung, versuche erneut" -#: executor/execReplication.c:205 executor/execReplication.c:382 +#: executor/execReplication.c:206 executor/execReplication.c:383 #, c-format msgid "concurrent delete, retrying" msgstr "gleichzeitiges Löschen, versuche erneut" -#: executor/execReplication.c:268 parser/parse_oper.c:228 -#: utils/adt/array_userfuncs.c:719 utils/adt/array_userfuncs.c:858 -#: utils/adt/arrayfuncs.c:3626 utils/adt/arrayfuncs.c:4146 -#: utils/adt/arrayfuncs.c:6132 utils/adt/rowtypes.c:1182 +#: executor/execReplication.c:269 parser/parse_cte.c:502 +#: parser/parse_oper.c:233 utils/adt/array_userfuncs.c:719 +#: utils/adt/array_userfuncs.c:858 utils/adt/arrayfuncs.c:3652 +#: utils/adt/arrayfuncs.c:4172 utils/adt/arrayfuncs.c:6158 +#: utils/adt/rowtypes.c:1203 #, c-format msgid "could not identify an equality operator for type %s" msgstr "konnte keinen Ist-Gleich-Operator für Typ %s ermitteln" -#: executor/execReplication.c:585 +#: executor/execReplication.c:590 #, c-format msgid "cannot update table \"%s\" because it does not have a replica identity and publishes updates" msgstr "Tabelle »%s« kann nicht aktualisiert werden, weil sie keine Replik-Identität hat und Updates publiziert" -#: executor/execReplication.c:587 +#: executor/execReplication.c:592 #, c-format msgid "To enable updating the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "Um Aktualisieren der Tabelle zu ermöglichen, setzen Sie REPLICA IDENTITY mit ALTER TABLE." -#: executor/execReplication.c:591 +#: executor/execReplication.c:596 #, c-format msgid "cannot delete from table \"%s\" because it does not have a replica identity and publishes deletes" msgstr "aus Tabelle »%s« kann nicht gelöscht werden, weil sie keine Replik-Identität hat und Deletes publiziert" -#: executor/execReplication.c:593 +#: executor/execReplication.c:598 #, c-format msgid "To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "Um Löschen in der Tabelle zu ermöglichen, setzen Sie REPLICA IDENTITY mit ALTER TABLE." -#: executor/execReplication.c:612 executor/execReplication.c:620 +#: executor/execReplication.c:617 executor/execReplication.c:625 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "Relation »%s.%s« kann nicht als Ziel für logische Replikation verwendet werden" -#: executor/execReplication.c:614 +#: executor/execReplication.c:619 #, c-format msgid "\"%s.%s\" is a foreign table." msgstr "»%s.%s« ist eine Fremdtabelle." -#: executor/execReplication.c:622 +#: executor/execReplication.c:627 #, c-format msgid "\"%s.%s\" is not a table." msgstr "»%s.%s« ist keine Tabelle." @@ -11910,138 +12324,149 @@ msgstr "»%s.%s« ist keine Tabelle." msgid "rows returned by function are not all of the same row type" msgstr "von Funktion zurückgegebene Zeilen haben nicht alle den selben Zeilentyp" -#: executor/execSRF.c:363 executor/execSRF.c:657 +#: executor/execSRF.c:365 +#, c-format +msgid "table-function protocol for value-per-call mode was not followed" +msgstr "Tabellenfunktionsprotokoll für Value-per-Call-Modus wurde nicht befolgt" + +#: executor/execSRF.c:373 executor/execSRF.c:667 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "Tabellenfunktionsprotokoll für Materialisierungsmodus wurde nicht befolgt" -#: executor/execSRF.c:370 executor/execSRF.c:675 +#: executor/execSRF.c:380 executor/execSRF.c:685 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "unbekannter returnMode von Tabellenfunktion: %d" -#: executor/execSRF.c:884 +#: executor/execSRF.c:894 #, c-format msgid "function returning setof record called in context that cannot accept type record" msgstr "Funktion mit Ergebnis SETOF RECORD in einem Zusammenhang aufgerufen, der den Typ RECORD nicht verarbeiten kann" -#: executor/execSRF.c:940 executor/execSRF.c:956 executor/execSRF.c:966 +#: executor/execSRF.c:950 executor/execSRF.c:966 executor/execSRF.c:976 #, c-format msgid "function return row and query-specified return row do not match" msgstr "von Funktion zurückgegebene Zeile und von der Anfrage angegebene zurückzugebende Zeile stimmen nicht überein" -#: executor/execSRF.c:941 +#: executor/execSRF.c:951 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." msgstr[0] "Zurückgegebene Zeile enthält %d Attribut, aber Anfrage erwartet %d." msgstr[1] "Zurückgegebene Zeile enthält %d Attribute, aber Anfrage erwartet %d." -#: executor/execSRF.c:957 +#: executor/execSRF.c:967 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "Rückgabetyp war %s auf Position %d, aber Anfrage erwartet %s." -#: executor/execUtils.c:750 +#: executor/execTuples.c:146 executor/execTuples.c:353 +#: executor/execTuples.c:521 executor/execTuples.c:712 +#, c-format +msgid "cannot retrieve a system column in this context" +msgstr "Systemspalte kann in diesem Kontext nicht ausgelesen werden" + +#: executor/execUtils.c:736 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "materialisierte Sicht »%s« wurde noch nicht befüllt" -#: executor/execUtils.c:752 +#: executor/execUtils.c:738 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "Verwenden Sie den Befehl REFRESH MATERIALIZED VIEW." -#: executor/functions.c:231 +#: executor/functions.c:217 #, c-format msgid "could not determine actual type of argument declared %s" msgstr "konnte tatsächlichen Typ von Argument mit deklarierten Typ %s nicht bestimmen" -#: executor/functions.c:528 +#: executor/functions.c:515 #, c-format msgid "cannot COPY to/from client in a SQL function" msgstr "COPY vom/zum Client funktioniert in einer SQL-Funktion nicht" #. translator: %s is a SQL statement name -#: executor/functions.c:534 +#: executor/functions.c:521 #, c-format msgid "%s is not allowed in a SQL function" msgstr "%s ist in SQL-Funktionen nicht erlaubt" #. translator: %s is a SQL statement name -#: executor/functions.c:542 executor/spi.c:1471 executor/spi.c:2257 +#: executor/functions.c:529 executor/spi.c:1634 executor/spi.c:2460 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s ist in als nicht »volatile« markierten Funktionen nicht erlaubt" -#: executor/functions.c:1430 +#: executor/functions.c:1442 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "SQL-Funktion »%s« Anweisung %d" -#: executor/functions.c:1456 +#: executor/functions.c:1468 #, c-format msgid "SQL function \"%s\" during startup" msgstr "SQL-Funktion »%s« beim Start" -#: executor/functions.c:1549 +#: executor/functions.c:1571 #, c-format msgid "calling procedures with output arguments is not supported in SQL functions" msgstr "Aufruf von Prozeduren mit Ausgabeargumenten wird in SQL-Funktionen nicht unterstützt" -#: executor/functions.c:1671 executor/functions.c:1708 -#: executor/functions.c:1722 executor/functions.c:1812 -#: executor/functions.c:1845 executor/functions.c:1859 +#: executor/functions.c:1705 executor/functions.c:1743 +#: executor/functions.c:1757 executor/functions.c:1847 +#: executor/functions.c:1880 executor/functions.c:1894 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "Rückgabetyp von Funktion stimmt nicht überein; deklariert als %s" -#: executor/functions.c:1673 +#: executor/functions.c:1707 #, c-format msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." msgstr "Die letzte Anweisung der Funktion muss ein SELECT oder INSERT/UPDATE/DELETE RETURNING sein." -#: executor/functions.c:1710 +#: executor/functions.c:1745 #, c-format msgid "Final statement must return exactly one column." msgstr "Die letzte Anweisung muss genau eine Spalte zurückgeben." -#: executor/functions.c:1724 +#: executor/functions.c:1759 #, c-format msgid "Actual return type is %s." msgstr "Eigentlicher Rückgabetyp ist %s." -#: executor/functions.c:1814 +#: executor/functions.c:1849 #, c-format msgid "Final statement returns too many columns." msgstr "Die letzte Anweisung gibt zu viele Spalten zurück." -#: executor/functions.c:1847 +#: executor/functions.c:1882 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "Die letzte Anweisung ergibt %s statt %s in Spalte %d." -#: executor/functions.c:1861 +#: executor/functions.c:1896 #, c-format msgid "Final statement returns too few columns." msgstr "Die letzte Anweisung gibt zu wenige Spalten zurück." -#: executor/functions.c:1889 +#: executor/functions.c:1924 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "Rückgabetyp %s wird von SQL-Funktionen nicht unterstützt" -#: executor/nodeAgg.c:3014 executor/nodeAgg.c:3023 executor/nodeAgg.c:3035 +#: executor/nodeAgg.c:3082 executor/nodeAgg.c:3091 executor/nodeAgg.c:3103 #, c-format msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" -msgstr "" +msgstr "unerwartetes EOF für Tape %d: %zu Bytes angefordert, %zu Bytes gelesen" -#: executor/nodeAgg.c:3947 parser/parse_agg.c:655 parser/parse_agg.c:685 +#: executor/nodeAgg.c:3976 parser/parse_agg.c:666 parser/parse_agg.c:696 #, c-format msgid "aggregate function calls cannot be nested" msgstr "Aufrufe von Aggregatfunktionen können nicht geschachtelt werden" -#: executor/nodeAgg.c:4155 executor/nodeWindowAgg.c:2836 +#: executor/nodeAgg.c:4184 executor/nodeWindowAgg.c:2836 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "Aggregatfunktion %u muss kompatiblen Eingabe- und Übergangstyp haben" @@ -12053,18 +12478,13 @@ msgstr "Custom-Scan »%s« unterstützt MarkPos nicht" #: executor/nodeHashjoin.c:1046 executor/nodeHashjoin.c:1076 #, c-format -msgid "could not rewind hash-join temporary file: %m" -msgstr "konnte Position in temporärer Datei für Hash-Verbund nicht auf Anfang setzen: %m" +msgid "could not rewind hash-join temporary file" +msgstr "konnte Position in temporärer Datei für Hash-Verbund nicht auf Anfang setzen" -#: executor/nodeHashjoin.c:1235 executor/nodeHashjoin.c:1241 +#: executor/nodeHashjoin.c:1272 executor/nodeHashjoin.c:1283 #, c-format -msgid "could not write to hash-join temporary file: %m" -msgstr "konnte nicht in temporäre Datei für Hash-Verbund schreiben: %m" - -#: executor/nodeHashjoin.c:1282 executor/nodeHashjoin.c:1292 -#, c-format -msgid "could not read from hash-join temporary file: %m" -msgstr "konnte nicht aus temporärer Datei für Hash-Verbund lesen: %m" +msgid "could not read from hash-join temporary file: read only %zu of %zu bytes" +msgstr "konnte nicht aus temporärer Datei für Hash-Verbund lesen: es wurden nur %zu von %zu Bytes gelesen" #: executor/nodeIndexonlyscan.c:242 #, c-format @@ -12091,42 +12511,32 @@ msgstr "RIGHT JOIN wird nur für Merge-Verbund-fähige Verbundbedingungen unters msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "FULL JOIN wird nur für Merge-Verbund-fähige Verbundbedingungen unterstützt" -#: executor/nodeModifyTable.c:110 -#, c-format -msgid "Query has too many columns." -msgstr "Anfrage hat zu viele Spalten." - -#: executor/nodeModifyTable.c:138 -#, c-format -msgid "Query provides a value for a dropped column at ordinal position %d." -msgstr "Anfrage liefert einen Wert für eine gelöschte Spalte auf Position %d." - -#: executor/nodeModifyTable.c:146 +#: executor/nodeModifyTable.c:154 #, c-format msgid "Query has too few columns." msgstr "Anfrage hat zu wenige Spalten." -#: executor/nodeModifyTable.c:839 executor/nodeModifyTable.c:913 +#: executor/nodeModifyTable.c:1185 executor/nodeModifyTable.c:1259 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "das zu löschende Tupel wurde schon durch eine vom aktuellen Befehl ausgelöste Operation verändert" -#: executor/nodeModifyTable.c:1220 +#: executor/nodeModifyTable.c:1434 #, c-format msgid "invalid ON UPDATE specification" msgstr "ungültige ON-UPDATE-Angabe" -#: executor/nodeModifyTable.c:1221 +#: executor/nodeModifyTable.c:1435 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "Das Ergebnistupel würde in einer anderen Partition erscheinen als das ursprüngliche Tupel." -#: executor/nodeModifyTable.c:1592 +#: executor/nodeModifyTable.c:2025 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "Befehl in ON CONFLICT DO UPDATE kann eine Zeile nicht ein zweites Mal ändern" -#: executor/nodeModifyTable.c:1593 +#: executor/nodeModifyTable.c:2026 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "Stellen Sie sicher, dass keine im selben Befehl fürs Einfügen vorgesehene Zeilen doppelte Werte haben, die einen Constraint verletzen würden." @@ -12142,7 +12552,7 @@ msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "Parameter von TABLESAMPLE REPEATABLE darf nicht NULL sein" #: executor/nodeSubplan.c:346 executor/nodeSubplan.c:385 -#: executor/nodeSubplan.c:1151 +#: executor/nodeSubplan.c:1159 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "als Ausdruck verwendete Unteranfrage ergab mehr als eine Zeile" @@ -12202,60 +12612,68 @@ msgstr "Frame-Ende-Offset darf nicht negativ sein" msgid "aggregate function %s does not support use as a window function" msgstr "Aggregatfunktion %s unterstützt die Verwendung als Fensterfunktion nicht" -#: executor/spi.c:228 executor/spi.c:297 +#: executor/spi.c:237 executor/spi.c:306 #, c-format msgid "invalid transaction termination" msgstr "ungültige Transaktionsbeendung" -#: executor/spi.c:242 -#, fuzzy, c-format -#| msgid "cannot commit subtransactions during a parallel operation" +#: executor/spi.c:251 +#, c-format msgid "cannot commit while a subtransaction is active" -msgstr "während einer parallelen Operation können keine Subtransaktionen committet werden" +msgstr "während eine Subtransaktion aktiv ist kann nicht committet werden" -#: executor/spi.c:303 -#, fuzzy, c-format -#| msgid "%s cannot run inside a subtransaction" +#: executor/spi.c:312 +#, c-format msgid "cannot roll back while a subtransaction is active" -msgstr "%s kann nicht in einer Subtransaktion laufen" +msgstr "während eine Subtransaktion aktiv ist kann nicht zurückgerollt werden" -#: executor/spi.c:372 +#: executor/spi.c:381 #, c-format msgid "transaction left non-empty SPI stack" msgstr "Transaktion ließ nicht-leeren SPI-Stack zurück" -#: executor/spi.c:373 executor/spi.c:435 +#: executor/spi.c:382 executor/spi.c:444 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "Prüfen Sie, ob Aufrufe von »SPI_finish« fehlen." -#: executor/spi.c:434 +#: executor/spi.c:443 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "Subtransaktion ließ nicht-leeren SPI-Stack zurück" -#: executor/spi.c:1335 +#: executor/spi.c:1496 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "Plan mit mehreren Anfragen kann nicht als Cursor geöffnet werden" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1340 +#: executor/spi.c:1501 #, c-format msgid "cannot open %s query as cursor" msgstr "%s kann nicht als Cursor geöffnet werden" -#: executor/spi.c:1445 +#: executor/spi.c:1608 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE wird nicht unterstützt" -#: executor/spi.c:1446 parser/analyze.c:2508 +#: executor/spi.c:1609 parser/analyze.c:2806 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Scrollbare Cursor müssen READ ONLY sein." -#: executor/spi.c:2560 +#: executor/spi.c:2784 +#, c-format +msgid "SQL expression \"%s\"" +msgstr "SQL-Ausdruck »%s«" + +#: executor/spi.c:2789 +#, c-format +msgid "PL/pgSQL assignment \"%s\"" +msgstr "PL/pgSQL-Zuweisung »%s«" + +#: executor/spi.c:2792 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL-Anweisung »%s«" @@ -12280,453 +12698,451 @@ msgstr "ungültige Option »%s«" msgid "Valid options in this context are: %s" msgstr "Gültige Optionen in diesem Zusammenhang sind: %s" -#: gram.y:1048 +#: gram.y:1107 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "UNENCRYPTED PASSWORD wird nicht mehr unterstützt" -#: gram.y:1049 +#: gram.y:1108 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "Lassen Sie UNENCRYPTED weg, um das Passwort stattdessen in verschlüsselter Form zu speichern." -#: gram.y:1111 +#: gram.y:1170 #, c-format msgid "unrecognized role option \"%s\"" msgstr "unbekannte Rollenoption »%s«" -#: gram.y:1358 gram.y:1373 +#: gram.y:1417 gram.y:1432 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTS kann keine Schemaelemente enthalten" -#: gram.y:1519 +#: gram.y:1578 #, c-format msgid "current database cannot be changed" msgstr "aktuelle Datenbank kann nicht geändert werden" -#: gram.y:1643 +#: gram.y:1702 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "Zeitzonenintervall muss HOUR oder HOUR TO MINUTE sein" -#: gram.y:2178 +#: gram.y:2270 #, c-format msgid "column number must be in range from 1 to %d" msgstr "Spaltennummer muss im Bereich 1 bis %d sein" -#: gram.y:2710 +#: gram.y:2811 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "Sequenzoption »%s« wird hier nicht unterstützt" -#: gram.y:2739 -#, fuzzy, c-format -#| msgid "option \"%s\" provided more than once" +#: gram.y:2840 +#, c-format msgid "modulus for hash partition provided more than once" -msgstr "Option »%s« mehrmals angegeben" +msgstr "Modulus für Hashpartition mehrmals angegeben" -#: gram.y:2748 -#, fuzzy, c-format -#| msgid "option \"%s\" provided more than once" +#: gram.y:2849 +#, c-format msgid "remainder for hash partition provided more than once" -msgstr "Option »%s« mehrmals angegeben" +msgstr "Rest für Hashpartition mehrmals angegeben" -#: gram.y:2755 -#, fuzzy, c-format -#| msgid "unrecognized exception condition \"%s\"" +#: gram.y:2856 +#, c-format msgid "unrecognized hash partition bound specification \"%s\"" -msgstr "unbekannte Ausnahmebedingung »%s«" +msgstr "unbekannte Hashpartitionsbegrenzungsangabe »%s«" -#: gram.y:2763 -#, fuzzy, c-format -#| msgid "type output function must be specified" +#: gram.y:2864 +#, c-format msgid "modulus for hash partition must be specified" -msgstr "Typausgabefunktion muss angegeben werden" +msgstr "Modulus für Hashpartition muss angegeben werden" -#: gram.y:2767 -#, fuzzy, c-format -#| msgid "one or two argument types must be specified" +#: gram.y:2868 +#, c-format msgid "remainder for hash partition must be specified" -msgstr "ein oder zwei Argumenttypen müssen angegeben werden" +msgstr "Rest für Hashpartition muss angegeben werden" -#: gram.y:2968 gram.y:3001 +#: gram.y:3069 gram.y:3102 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUT sind nicht mit PROGRAM erlaubt" -#: gram.y:2974 +#: gram.y:3075 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "mit COPY TO ist keine WHERE-Klausel erlaubt" -#: gram.y:3306 gram.y:3313 gram.y:11652 gram.y:11660 +#: gram.y:3407 gram.y:3414 gram.y:11687 gram.y:11695 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "die Verwendung von GLOBAL beim Erzeugen einer temporären Tabelle ist veraltet" -#: gram.y:3553 +#: gram.y:3663 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "für eine generierte Spalte muss GENERATED ALWAYS angegeben werden" -#: gram.y:3819 utils/adt/ri_triggers.c:1997 +#: gram.y:3931 utils/adt/ri_triggers.c:2032 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL ist noch nicht implementiert" -#: gram.y:4517 +#: gram.y:4632 #, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" msgstr "CREATE EXTENSION ... FROM wird nicht mehr unterstützt" -#: gram.y:5343 +#: gram.y:5295 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "unbekannte Zeilensicherheitsoption »%s«" -#: gram.y:5344 +#: gram.y:5296 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "Aktuell werden nur PERMISSIVE und RESTRICTIVE unterstützt." -#: gram.y:5457 +#: gram.y:5378 +#, c-format +msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" +msgstr "CREATE OR REPLACE CONSTRAINT TRIGGER wird nicht unterstützt" + +#: gram.y:5415 msgid "duplicate trigger events specified" msgstr "mehrere Trigger-Ereignisse angegeben" -#: gram.y:5598 parser/parse_utilcmd.c:3483 parser/parse_utilcmd.c:3509 +#: gram.y:5556 parser/parse_utilcmd.c:3734 parser/parse_utilcmd.c:3760 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "Constraint, der als INITIALLY DEFERRED deklariert wurde, muss DEFERRABLE sein" -#: gram.y:5605 +#: gram.y:5563 #, c-format msgid "conflicting constraint properties" msgstr "widersprüchliche Constraint-Eigentschaften" -#: gram.y:5701 +#: gram.y:5659 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION ist noch nicht implementiert" -#: gram.y:6084 +#: gram.y:6042 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK wird nicht mehr benötigt" -#: gram.y:6085 +#: gram.y:6043 #, c-format msgid "Update your data type." msgstr "Aktualisieren Sie Ihren Datentyp." -#: gram.y:7836 +#: gram.y:7768 #, c-format msgid "aggregates cannot have output arguments" msgstr "Aggregatfunktionen können keine OUT-Argumente haben" -#: gram.y:8228 utils/adt/regproc.c:692 utils/adt/regproc.c:733 +#: gram.y:8210 utils/adt/regproc.c:709 utils/adt/regproc.c:750 #, c-format msgid "missing argument" msgstr "Argument fehlt" -#: gram.y:8229 utils/adt/regproc.c:693 utils/adt/regproc.c:734 +#: gram.y:8211 utils/adt/regproc.c:710 utils/adt/regproc.c:751 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Verwenden Sie NONE, um das fehlende Argument eines unären Operators anzugeben." -#: gram.y:10158 gram.y:10176 +#: gram.y:10150 gram.y:10168 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION wird für rekursive Sichten nicht unterstützt" -#: gram.y:11784 +#: gram.y:11824 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "Syntax LIMIT x,y wird nicht unterstützt" -#: gram.y:11785 +#: gram.y:11825 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Verwenden Sie die getrennten Klauseln LIMIT und OFFSET." -#: gram.y:12103 gram.y:12128 +#: gram.y:12163 gram.y:12188 #, c-format msgid "VALUES in FROM must have an alias" msgstr "VALUES in FROM muss Aliasnamen erhalten" -#: gram.y:12104 gram.y:12129 +#: gram.y:12164 gram.y:12189 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "Zum Beispiel FROM (VALUES ...) [AS] xyz." -#: gram.y:12109 gram.y:12134 +#: gram.y:12169 gram.y:12194 #, c-format msgid "subquery in FROM must have an alias" msgstr "Unteranfrage in FROM muss Aliasnamen erhalten" -#: gram.y:12110 gram.y:12135 +#: gram.y:12170 gram.y:12195 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "Zum Beispiel FROM (SELECT ...) [AS] xyz." -#: gram.y:12588 +#: gram.y:12690 #, c-format msgid "only one DEFAULT value is allowed" msgstr "nur ein DEFAULT-Wert ist erlaubt" -#: gram.y:12597 +#: gram.y:12699 #, c-format msgid "only one PATH value per column is allowed" msgstr "nur ein PATH-Wert pro Spalte ist erlaubt" -#: gram.y:12606 +#: gram.y:12708 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "widersprüchliche oder überflüssige NULL/NOT NULL-Deklarationen für Spalte »%s«" -#: gram.y:12615 +#: gram.y:12717 #, c-format msgid "unrecognized column option \"%s\"" msgstr "unbekannte Spaltenoption »%s«" -#: gram.y:12869 +#: gram.y:12971 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "Präzision von Typ float muss mindestens 1 Bit sein" -#: gram.y:12878 +#: gram.y:12980 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "Präzision von Typ float muss weniger als 54 Bits sein" -#: gram.y:13369 +#: gram.y:13478 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "falsche Anzahl Parameter auf linker Seite von OVERLAPS-Ausdruck" -#: gram.y:13374 +#: gram.y:13483 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "falsche Anzahl Parameter auf rechter Seite von OVERLAPS-Ausdruck" -#: gram.y:13549 +#: gram.y:13651 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "UNIQUE-Prädikat ist noch nicht implementiert" -#: gram.y:13912 +#: gram.y:14010 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "in WITHIN GROUP können nicht mehrere ORDER-BY-Klauseln verwendet werden" -#: gram.y:13917 +#: gram.y:14015 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "DISTINCT kann nicht mit WITHIN GROUP verwendet werden" -#: gram.y:13922 +#: gram.y:14020 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "VARIADIC kann nicht mit WITHIN GROUP verwendet werden" -#: gram.y:14388 gram.y:14411 +#: gram.y:14544 gram.y:14567 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "Frame-Beginn kann nicht UNBOUNDED FOLLOWING sein" -#: gram.y:14393 +#: gram.y:14549 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "Frame der in der folgenden Zeile beginnt kann nicht in der aktuellen Zeile enden" -#: gram.y:14416 +#: gram.y:14572 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "Frame-Ende kann nicht UNBOUNDED PRECEDING sein" -#: gram.y:14422 +#: gram.y:14578 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "Frame der in der aktuellen Zeile beginnt kann keine vorhergehenden Zeilen haben" -#: gram.y:14429 +#: gram.y:14585 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "Frame der in der folgenden Zeile beginnt kann keine vorhergehenden Zeilen haben" -#: gram.y:15079 +#: gram.y:15217 #, c-format msgid "type modifier cannot have parameter name" msgstr "Typmodifikator kann keinen Parameternamen haben" -#: gram.y:15085 +#: gram.y:15223 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "Typmodifikator kann kein ORDER BY haben" -#: gram.y:15150 gram.y:15157 +#: gram.y:15288 gram.y:15295 gram.y:15302 #, c-format msgid "%s cannot be used as a role name here" msgstr "%s kann hier nicht als Rollenname verwendet werden" -#: gram.y:15838 gram.y:16027 +#: gram.y:15391 gram.y:16823 +#, c-format +msgid "WITH TIES cannot be specified without ORDER BY clause" +msgstr "WITH TIES kann nicht ohne ORDER-BY-Klausel angegeben werden" + +#: gram.y:16499 gram.y:16688 msgid "improper use of \"*\"" msgstr "unzulässige Verwendung von »*«" -#: gram.y:15990 gram.y:16007 tsearch/spell.c:956 tsearch/spell.c:973 -#: tsearch/spell.c:990 tsearch/spell.c:1007 tsearch/spell.c:1072 +#: gram.y:16651 gram.y:16668 tsearch/spell.c:982 tsearch/spell.c:999 +#: tsearch/spell.c:1016 tsearch/spell.c:1033 tsearch/spell.c:1098 #, c-format msgid "syntax error" msgstr "Syntaxfehler" -#: gram.y:16091 +#: gram.y:16753 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "eine Ordered-Set-Aggregatfunktion mit einem direkten VARIADIC-Argument muss ein aggregiertes VARIADIC-Argument des selben Datentyps haben" -#: gram.y:16128 +#: gram.y:16790 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "mehrere ORDER-BY-Klauseln sind nicht erlaubt" -#: gram.y:16139 +#: gram.y:16801 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "mehrere OFFSET-Klauseln sind nicht erlaubt" -#: gram.y:16148 +#: gram.y:16810 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "mehrere LIMIT-Klauseln sind nicht erlaubt" -#: gram.y:16157 -#, fuzzy, c-format -#| msgid "multiple WITH clauses not allowed" +#: gram.y:16819 +#, c-format msgid "multiple limit options not allowed" -msgstr "mehrere WITH-Klauseln sind nicht erlaubt" - -#: gram.y:16161 -#, fuzzy, c-format -#| msgid "option \"%s\" cannot be specified with other options" -msgid "WITH TIES options can not be specified without ORDER BY clause" -msgstr "Option »%s« kann nicht mit anderen Optionen angegeben werden" +msgstr "mehrere Limit-Optionen sind nicht erlaubt" -#: gram.y:16169 +#: gram.y:16831 #, c-format msgid "multiple WITH clauses not allowed" msgstr "mehrere WITH-Klauseln sind nicht erlaubt" -#: gram.y:16373 +#: gram.y:17023 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "OUT- und INOUT-Argumente sind in TABLE-Funktionen nicht erlaubt" -#: gram.y:16469 +#: gram.y:17119 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "mehrere COLLATE-Klauseln sind nicht erlaubt" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16507 gram.y:16520 +#: gram.y:17157 gram.y:17170 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "%s-Constraints können nicht als DEFERRABLE markiert werden" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16533 +#: gram.y:17183 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "%s-Constraints können nicht als NOT VALID markiert werden" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16546 +#: gram.y:17196 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "%s-Constraints können nicht als NO INHERIT markiert werden" -#: guc-file.l:315 +#: guc-file.l:314 #, c-format -msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %u" -msgstr "unbekannter Konfigurationsparameter »%s« in Datei »%s« Zeile %u" +msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" +msgstr "unbekannter Konfigurationsparameter »%s« in Datei »%s« Zeile %d" -#: guc-file.l:352 utils/misc/guc.c:7028 utils/misc/guc.c:7222 -#: utils/misc/guc.c:7312 utils/misc/guc.c:7402 utils/misc/guc.c:7510 -#: utils/misc/guc.c:7605 +#: guc-file.l:351 utils/misc/guc.c:7393 utils/misc/guc.c:7591 +#: utils/misc/guc.c:7685 utils/misc/guc.c:7779 utils/misc/guc.c:7899 +#: utils/misc/guc.c:7998 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "Parameter »%s« kann nicht geändert werden, ohne den Server neu zu starten" -#: guc-file.l:388 +#: guc-file.l:387 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "Parameter »%s« wurde aus Konfigurationsdatei entfernt, wird auf Standardwert zurückgesetzt" -#: guc-file.l:454 +#: guc-file.l:453 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "Parameter »%s« auf »%s« gesetzt" -#: guc-file.l:496 +#: guc-file.l:495 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "Konfigurationsdatei »%s« enthält Fehler" -#: guc-file.l:501 +#: guc-file.l:500 #, c-format msgid "configuration file \"%s\" contains errors; unaffected changes were applied" msgstr "Konfigurationsdatei »%s« enthält Fehler; nicht betroffene Änderungen wurden durchgeführt" -#: guc-file.l:506 +#: guc-file.l:505 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "Konfigurationsdatei »%s« enthält Fehler; keine Änderungen wurden durchgeführt" -#: guc-file.l:578 +#: guc-file.l:577 #, c-format msgid "empty configuration file name: \"%s\"" msgstr "leerer Konfigurationsdateiname: »%s«" -#: guc-file.l:595 +#: guc-file.l:594 #, c-format msgid "could not open configuration file \"%s\": maximum nesting depth exceeded" msgstr "konnte Konfigurationsdatei »%s« nicht öffnen: maximale Verschachtelungstiefe überschritten" -#: guc-file.l:615 +#: guc-file.l:614 #, c-format msgid "configuration file recursion in \"%s\"" msgstr "Konfigurationsdateirekursion in »%s«" -#: guc-file.l:631 libpq/hba.c:2199 libpq/hba.c:2613 +#: guc-file.l:630 libpq/hba.c:2245 libpq/hba.c:2659 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "konnte Konfigurationsdatei »%s« nicht öffnen: %m" -#: guc-file.l:642 +#: guc-file.l:641 #, c-format msgid "skipping missing configuration file \"%s\"" msgstr "fehlende Konfigurationsdatei »%s« wird übersprungen" -#: guc-file.l:896 +#: guc-file.l:895 #, c-format msgid "syntax error in file \"%s\" line %u, near end of line" msgstr "Syntaxfehler in Datei »%s«, Zeile %u, am Ende der Zeile" -#: guc-file.l:906 +#: guc-file.l:905 #, c-format msgid "syntax error in file \"%s\" line %u, near token \"%s\"" msgstr "Syntaxfehler in Datei »%s«, Zeile %u, bei »%s«" -#: guc-file.l:926 +#: guc-file.l:925 #, c-format msgid "too many syntax errors found, abandoning file \"%s\"" msgstr "zu viele Syntaxfehler gefunden, Datei »%s« wird aufgegeben" -#: guc-file.l:981 +#: guc-file.l:980 #, c-format msgid "empty configuration directory name: \"%s\"" msgstr "leerer Konfigurationsverzeichnisname: »%s«" -#: guc-file.l:1000 +#: guc-file.l:999 #, c-format msgid "could not open configuration directory \"%s\": %m" msgstr "konnte Konfigurationsverzeichnis »%s« nicht öffnen: %m" @@ -12737,45 +13153,37 @@ msgstr "konnte Konfigurationsverzeichnis »%s« nicht öffnen: %m" msgid "could not access file \"%s\": %m" msgstr "konnte nicht auf Datei »%s« zugreifen: %m" -#: jit/llvm/llvmjit.c:595 -#, c-format -msgid "time to inline: %.3fs, opt: %.3fs, emit: %.3fs" -msgstr "" - -#: jsonpath_gram.y:528 jsonpath_scan.l:515 jsonpath_scan.l:526 -#: jsonpath_scan.l:536 jsonpath_scan.l:578 utils/adt/encode.c:476 -#: utils/adt/encode.c:541 utils/adt/jsonfuncs.c:619 utils/adt/varlena.c:319 -#: utils/adt/varlena.c:360 +#: jsonpath_gram.y:528 jsonpath_scan.l:519 jsonpath_scan.l:530 +#: jsonpath_scan.l:540 jsonpath_scan.l:582 utils/adt/encode.c:435 +#: utils/adt/encode.c:501 utils/adt/jsonfuncs.c:623 utils/adt/varlena.c:339 +#: utils/adt/varlena.c:380 #, c-format msgid "invalid input syntax for type %s" msgstr "ungültige Eingabesyntax für Typ %s" #: jsonpath_gram.y:529 -#, fuzzy, c-format -#| msgid "unrecognized parameter \"%s\" in file \"%s\"" -msgid "unrecognized flag character \"%c\" in LIKE_REGEX predicate" -msgstr "unbekannter Parameter »%s« in Datei »%s«" +#, c-format +msgid "unrecognized flag character \"%.*s\" in LIKE_REGEX predicate" +msgstr "unbekanntes Flag-Zeichen »%.*s« in LIKE_REGEX-Prädikat" #: jsonpath_gram.y:583 #, c-format msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" -msgstr "" +msgstr "XQuery-Flag »x« (expanded regular expression) ist nicht implementiert" #. translator: %s is typically "syntax error" -#: jsonpath_scan.l:282 -#, fuzzy, c-format -#| msgid "%s at end of input" +#: jsonpath_scan.l:286 +#, c-format msgid "%s at end of jsonpath input" -msgstr "%s am Ende der Eingabe" +msgstr "%s am Ende der jsonpath-Eingabe" #. translator: first %s is typically "syntax error" -#: jsonpath_scan.l:289 -#, fuzzy, c-format -#| msgid "%s at or near \"%s\"" +#: jsonpath_scan.l:293 +#, c-format msgid "%s at or near \"%s\" of jsonpath input" -msgstr "%s bei »%s«" +msgstr "%s bei »%s« in jsonpath-Eingabe" -#: jsonpath_scan.l:494 utils/adt/jsonfuncs.c:613 +#: jsonpath_scan.l:498 utils/adt/jsonfuncs.c:617 #, c-format msgid "unsupported Unicode escape sequence" msgstr "nicht unterstützte Unicode-Escape-Sequenz" @@ -12786,723 +13194,723 @@ msgstr "nicht unterstützte Unicode-Escape-Sequenz" msgid "Failed on DSA request of size %zu." msgstr "Fehler bei DSA-Anfrage mit Größe %zu." -#: libpq/auth-scram.c:248 +#: libpq/auth-scram.c:249 #, c-format msgid "client selected an invalid SASL authentication mechanism" msgstr "Client hat einen ungültigen SASL-Authentifizierungsmechanismums gewählt" -#: libpq/auth-scram.c:269 libpq/auth-scram.c:509 libpq/auth-scram.c:520 +#: libpq/auth-scram.c:270 libpq/auth-scram.c:510 libpq/auth-scram.c:521 #, c-format msgid "invalid SCRAM secret for user \"%s\"" msgstr "ungültiges SCRAM-Geheimnis für Benutzer »%s«" -#: libpq/auth-scram.c:280 +#: libpq/auth-scram.c:281 #, c-format msgid "User \"%s\" does not have a valid SCRAM secret." msgstr "Benutzer »%s« hat kein gültiges SCRAM-Geheimnis." -#: libpq/auth-scram.c:358 libpq/auth-scram.c:363 libpq/auth-scram.c:693 -#: libpq/auth-scram.c:701 libpq/auth-scram.c:806 libpq/auth-scram.c:819 -#: libpq/auth-scram.c:829 libpq/auth-scram.c:937 libpq/auth-scram.c:944 -#: libpq/auth-scram.c:959 libpq/auth-scram.c:974 libpq/auth-scram.c:988 -#: libpq/auth-scram.c:1006 libpq/auth-scram.c:1021 libpq/auth-scram.c:1321 -#: libpq/auth-scram.c:1329 +#: libpq/auth-scram.c:359 libpq/auth-scram.c:364 libpq/auth-scram.c:701 +#: libpq/auth-scram.c:709 libpq/auth-scram.c:814 libpq/auth-scram.c:827 +#: libpq/auth-scram.c:837 libpq/auth-scram.c:945 libpq/auth-scram.c:952 +#: libpq/auth-scram.c:967 libpq/auth-scram.c:982 libpq/auth-scram.c:996 +#: libpq/auth-scram.c:1014 libpq/auth-scram.c:1029 libpq/auth-scram.c:1340 +#: libpq/auth-scram.c:1348 #, c-format msgid "malformed SCRAM message" msgstr "fehlerhafte SCRAM-Nachricht" -#: libpq/auth-scram.c:359 +#: libpq/auth-scram.c:360 #, c-format msgid "The message is empty." msgstr "Die Nachricht ist leer." -#: libpq/auth-scram.c:364 +#: libpq/auth-scram.c:365 #, c-format msgid "Message length does not match input length." msgstr "Länge der Nachricht stimmt nicht mit Länge der Eingabe überein." -#: libpq/auth-scram.c:396 +#: libpq/auth-scram.c:397 #, c-format msgid "invalid SCRAM response" msgstr "ungültige SCRAM-Antwort" -#: libpq/auth-scram.c:397 +#: libpq/auth-scram.c:398 #, c-format msgid "Nonce does not match." msgstr "Nonce stimmt nicht überein." -#: libpq/auth-scram.c:471 +#: libpq/auth-scram.c:472 #, c-format msgid "could not generate random salt" msgstr "konnte zufälliges Salt nicht erzeugen" -#: libpq/auth-scram.c:694 +#: libpq/auth-scram.c:702 #, c-format msgid "Expected attribute \"%c\" but found \"%s\"." msgstr "Attribut »%c« wurde erwartet, aber »%s« wurde gefunden." -#: libpq/auth-scram.c:702 libpq/auth-scram.c:830 +#: libpq/auth-scram.c:710 libpq/auth-scram.c:838 #, c-format msgid "Expected character \"=\" for attribute \"%c\"." msgstr "Zeichen »=« für Attribut »%c« wurde erwartet." -#: libpq/auth-scram.c:807 -#, fuzzy, c-format -#| msgid "Attribute expected, but found invalid character \"%s\"." +#: libpq/auth-scram.c:815 +#, c-format msgid "Attribute expected, but found end of string." -msgstr "Attribut wurde erwartet, aber ungültiges Zeichen »%s« wurde gefunden." +msgstr "Attribut wurde erwartet, aber Ende der Zeichenkette wurde gefunden." -#: libpq/auth-scram.c:820 +#: libpq/auth-scram.c:828 #, c-format msgid "Attribute expected, but found invalid character \"%s\"." msgstr "Attribut wurde erwartet, aber ungültiges Zeichen »%s« wurde gefunden." -#: libpq/auth-scram.c:938 libpq/auth-scram.c:960 +#: libpq/auth-scram.c:946 libpq/auth-scram.c:968 #, c-format msgid "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not include channel binding data." msgstr "Der Client hat SCRAM-SHA-256-PLUS gewählt, aber die SCRAM-Nachricht enthielt keine Channel-Binding-Daten." -#: libpq/auth-scram.c:945 libpq/auth-scram.c:975 +#: libpq/auth-scram.c:953 libpq/auth-scram.c:983 #, c-format msgid "Comma expected, but found character \"%s\"." msgstr "Komma wurde erwartet, aber Zeichen »%s« wurde gefunden." -#: libpq/auth-scram.c:966 +#: libpq/auth-scram.c:974 #, c-format msgid "SCRAM channel binding negotiation error" msgstr "Fehler bei der Aushandlung von SCRAM-Channel-Binding" -#: libpq/auth-scram.c:967 +#: libpq/auth-scram.c:975 #, c-format msgid "The client supports SCRAM channel binding but thinks the server does not. However, this server does support channel binding." msgstr "Der Client unterstützt SCRAM-Channel-Binding aber glaubt dass der Server es nicht tut. Dieser Server unterstützt jedoch Channel-Binding." -#: libpq/auth-scram.c:989 +#: libpq/auth-scram.c:997 #, c-format msgid "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM message includes channel binding data." msgstr "Der Client hat SCRAM-SHA-256 ohne Channel-Binding gewählt, aber die SCRAM-Nachricht enthält Channel-Binding-Daten." -#: libpq/auth-scram.c:1000 +#: libpq/auth-scram.c:1008 #, c-format msgid "unsupported SCRAM channel-binding type \"%s\"" msgstr "nicht unterstützter SCRAM-Channel-Binding-Typ »%s«" -#: libpq/auth-scram.c:1007 +#: libpq/auth-scram.c:1015 #, c-format msgid "Unexpected channel-binding flag \"%s\"." msgstr "Unerwartetes Channel-Binding-Flag »%s«." -#: libpq/auth-scram.c:1017 +#: libpq/auth-scram.c:1025 #, c-format msgid "client uses authorization identity, but it is not supported" msgstr "Client verwendet Autorisierungsidentität, was nicht unterstützt wird" -#: libpq/auth-scram.c:1022 +#: libpq/auth-scram.c:1030 #, c-format msgid "Unexpected attribute \"%s\" in client-first-message." msgstr "Unerwartetes Attribut »%s« in »client-first-message«." -#: libpq/auth-scram.c:1038 +#: libpq/auth-scram.c:1046 #, c-format msgid "client requires an unsupported SCRAM extension" msgstr "Client verlangt eine nicht unterstützte SCRAM-Erweiterung" -#: libpq/auth-scram.c:1052 +#: libpq/auth-scram.c:1060 #, c-format msgid "non-printable characters in SCRAM nonce" msgstr "nicht druckbare Zeichen in SCRAM-Nonce" -#: libpq/auth-scram.c:1169 +#: libpq/auth-scram.c:1188 #, c-format msgid "could not generate random nonce" msgstr "konnte zufällige Nonce nicht erzeugen" -#: libpq/auth-scram.c:1179 -#, fuzzy, c-format -#| msgid "could not generate random nonce" +#: libpq/auth-scram.c:1198 +#, c-format msgid "could not encode random nonce" -msgstr "konnte zufällige Nonce nicht erzeugen" +msgstr "konnte zufällige Nonce nicht kodieren" -#: libpq/auth-scram.c:1285 +#: libpq/auth-scram.c:1304 #, c-format msgid "SCRAM channel binding check failed" msgstr "SCRAM-Channel-Binding-Prüfung fehlgeschlagen" -#: libpq/auth-scram.c:1303 +#: libpq/auth-scram.c:1322 #, c-format msgid "unexpected SCRAM channel-binding attribute in client-final-message" msgstr "unerwartetes SCRAM-Channel-Binding-Attribut in »client-final-message«" -#: libpq/auth-scram.c:1322 +#: libpq/auth-scram.c:1341 #, c-format msgid "Malformed proof in client-final-message." msgstr "Fehlerhafter Proof in »client-final-message«." -#: libpq/auth-scram.c:1330 +#: libpq/auth-scram.c:1349 #, c-format msgid "Garbage found at the end of client-final-message." msgstr "Müll am Ende der »client-final-message« gefunden." -#: libpq/auth.c:280 +#: libpq/auth.c:284 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "Authentifizierung für Benutzer »%s« fehlgeschlagen: Host abgelehnt" -#: libpq/auth.c:283 +#: libpq/auth.c:287 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "»trust«-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:286 +#: libpq/auth.c:290 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "Ident-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:289 +#: libpq/auth.c:293 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "Peer-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:294 +#: libpq/auth.c:298 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "Passwort-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:299 +#: libpq/auth.c:303 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "GSSAPI-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:302 +#: libpq/auth.c:306 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "SSPI-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:305 +#: libpq/auth.c:309 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "PAM-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:308 +#: libpq/auth.c:312 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "BSD-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:311 +#: libpq/auth.c:315 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "LDAP-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:314 +#: libpq/auth.c:318 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "Zertifikatauthentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:317 +#: libpq/auth.c:321 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "RADIUS-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:320 +#: libpq/auth.c:324 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "Authentifizierung für Benutzer »%s« fehlgeschlagen: ungültige Authentifizierungsmethode" -#: libpq/auth.c:324 +#: libpq/auth.c:328 #, c-format msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "Verbindung stimmte mit pg_hba.conf-Zeile %d überein: »%s«" #: libpq/auth.c:371 +#, fuzzy, c-format +#| msgid "Connections and Authentication" +msgid "connection was re-authenticated" +msgstr "Verbindungen und Authentifizierung" + +#: libpq/auth.c:372 +#, c-format +msgid "previous ID: \"%s\"; new ID: \"%s\"" +msgstr "" + +#: libpq/auth.c:381 +#, c-format +msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" +msgstr "" + +#: libpq/auth.c:420 #, c-format msgid "client certificates can only be checked if a root certificate store is available" msgstr "Client-Zertifikate können nur überprüft werden, wenn Wurzelzertifikat verfügbar ist" -#: libpq/auth.c:382 +#: libpq/auth.c:431 #, c-format msgid "connection requires a valid client certificate" msgstr "Verbindung erfordert ein gültiges Client-Zertifikat" -#: libpq/auth.c:392 -#, c-format -msgid "GSSAPI encryption can only be used with gss, trust, or reject authentication methods" -msgstr "GSSAPI-Verschlüsselung kann nur mit den Authentifizierungsmethoden gss, trust oder reject verwendet werden" - -#: libpq/auth.c:426 -#, c-format -msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" -msgstr "pg_hba.conf lehnt Replikationsverbindung ab für Host »%s«, Benutzer »%s«, %s" +#: libpq/auth.c:462 libpq/auth.c:508 +msgid "GSS encryption" +msgstr "GSS-Verschlüsselung" -#: libpq/auth.c:428 libpq/auth.c:444 libpq/auth.c:502 libpq/auth.c:520 -msgid "SSL off" -msgstr "SSL aus" +#: libpq/auth.c:465 libpq/auth.c:511 +msgid "SSL encryption" +msgstr "SSL-Verschlüsselung" -#: libpq/auth.c:428 libpq/auth.c:444 libpq/auth.c:502 libpq/auth.c:520 -msgid "SSL on" -msgstr "SSL an" +#: libpq/auth.c:467 libpq/auth.c:513 +msgid "no encryption" +msgstr "keine Verschlüsselung" -#: libpq/auth.c:432 +#. translator: last %s describes encryption state +#: libpq/auth.c:473 #, c-format -msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\"" -msgstr "pg_hba.conf lehnt Replikationsverbindung ab für Host »%s«, Benutzer »%s«" +msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" +msgstr "pg_hba.conf lehnt Replikationsverbindung ab für Host »%s«, Benutzer »%s«, %s" -#: libpq/auth.c:441 +#. translator: last %s describes encryption state +#: libpq/auth.c:480 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "pg_hba.conf lehnt Verbindung ab für Host »%s«, Benutzer »%s«, Datenbank »%s«, %s" -#: libpq/auth.c:448 -#, c-format -msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\"" -msgstr "pg_hba.conf lehnt Verbindung ab für Host »%s«, Benutzer »%s«, Datenbank »%s«" - -#: libpq/auth.c:477 +#: libpq/auth.c:518 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "Auflösung der Client-IP-Adresse ergab »%s«, Vorwärtsauflösung stimmt überein." -#: libpq/auth.c:480 +#: libpq/auth.c:521 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "Auflösung der Client-IP-Adresse ergab »%s«, Vorwärtsauflösung nicht geprüft." -#: libpq/auth.c:483 +#: libpq/auth.c:524 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "Auflösung der Client-IP-Adresse ergab »%s«, Vorwärtsauflösung stimmt nicht überein." -#: libpq/auth.c:486 +#: libpq/auth.c:527 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "Konnte Client-Hostnamen »%s« nicht in IP-Adresse übersetzen: %s." -#: libpq/auth.c:491 +#: libpq/auth.c:532 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "Konnte Client-IP-Adresse nicht in einen Hostnamen auflösen: %s." -#: libpq/auth.c:500 +#. translator: last %s describes encryption state +#: libpq/auth.c:540 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" msgstr "kein pg_hba.conf-Eintrag für Replikationsverbindung von Host »%s«, Benutzer »%s«, %s" -#: libpq/auth.c:507 -#, c-format -msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\"" -msgstr "kein pg_hba.conf-Eintrag für Replikationsverbindung von Host »%s«, Benutzer »%s«" - -#: libpq/auth.c:517 +#. translator: last %s describes encryption state +#: libpq/auth.c:548 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "kein pg_hba.conf-Eintrag für Host »%s«, Benutzer »%s«, Datenbank »%s«, %s" -#: libpq/auth.c:525 -#, c-format -msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"" -msgstr "kein pg_hba.conf-Eintrag für Host »%s«, Benutzer »%s«, Datenbank »%s«" - -#: libpq/auth.c:688 +#: libpq/auth.c:722 #, c-format msgid "expected password response, got message type %d" msgstr "Passwort-Antwort erwartet, Message-Typ %d empfangen" -#: libpq/auth.c:716 +#: libpq/auth.c:743 #, c-format msgid "invalid password packet size" msgstr "ungültige Größe des Passwortpakets" -#: libpq/auth.c:734 +#: libpq/auth.c:761 #, c-format msgid "empty password returned by client" msgstr "Client gab leeres Passwort zurück" -#: libpq/auth.c:854 libpq/hba.c:1340 +#: libpq/auth.c:888 libpq/hba.c:1368 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "MD5-Authentifizierung wird nicht unterstützt, wenn »db_user_namespace« angeschaltet ist" -#: libpq/auth.c:860 +#: libpq/auth.c:894 #, c-format msgid "could not generate random MD5 salt" msgstr "konnte zufälliges MD5-Salt nicht erzeugen" -#: libpq/auth.c:906 -#, c-format -msgid "SASL authentication is not supported in protocol version 2" -msgstr "SASL-Authentifizierung wird in Protokollversion 2 nicht unterstützt" - -#: libpq/auth.c:939 +#: libpq/auth.c:960 #, c-format msgid "expected SASL response, got message type %d" msgstr "SASL-Antwort erwartet, Message-Typ %d empfangen" -#: libpq/auth.c:1068 +#: libpq/auth.c:1089 libpq/be-secure-gssapi.c:535 #, c-format -msgid "GSSAPI is not supported in protocol version 2" -msgstr "GSSAPI wird in Protokollversion 2 nicht unterstützt" +msgid "could not set environment: %m" +msgstr "konnte Umgebung nicht setzen: %m" -#: libpq/auth.c:1128 +#: libpq/auth.c:1125 #, c-format msgid "expected GSS response, got message type %d" msgstr "GSS-Antwort erwartet, Message-Typ %d empfangen" -#: libpq/auth.c:1189 +#: libpq/auth.c:1185 msgid "accepting GSS security context failed" msgstr "Annahme des GSS-Sicherheitskontexts fehlgeschlagen" -#: libpq/auth.c:1228 +#: libpq/auth.c:1225 msgid "retrieving GSS user name failed" msgstr "Abfrage des GSS-Benutzernamens fehlgeschlagen" -#: libpq/auth.c:1359 -#, c-format -msgid "SSPI is not supported in protocol version 2" -msgstr "SSL wird in Protokollversion 2 nicht unterstützt" - -#: libpq/auth.c:1374 +#: libpq/auth.c:1366 msgid "could not acquire SSPI credentials" msgstr "konnte SSPI-Credentials nicht erhalten" -#: libpq/auth.c:1399 +#: libpq/auth.c:1391 #, c-format msgid "expected SSPI response, got message type %d" msgstr "SSPI-Antwort erwartet, Message-Typ %d empfangen" -#: libpq/auth.c:1477 +#: libpq/auth.c:1469 msgid "could not accept SSPI security context" msgstr "konnte SSPI-Sicherheitskontext nicht akzeptieren" -#: libpq/auth.c:1539 +#: libpq/auth.c:1531 msgid "could not get token from SSPI security context" msgstr "konnte kein Token vom SSPI-Sicherheitskontext erhalten" -#: libpq/auth.c:1658 libpq/auth.c:1677 +#: libpq/auth.c:1670 libpq/auth.c:1689 #, c-format msgid "could not translate name" msgstr "konnte Namen nicht umwandeln" -#: libpq/auth.c:1690 +#: libpq/auth.c:1702 #, c-format msgid "realm name too long" msgstr "Realm-Name zu lang" -#: libpq/auth.c:1705 +#: libpq/auth.c:1717 #, c-format msgid "translated account name too long" msgstr "umgewandelter Account-Name zu lang" -#: libpq/auth.c:1886 +#: libpq/auth.c:1898 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "konnte Socket für Ident-Verbindung nicht erzeugen: %m" -#: libpq/auth.c:1901 +#: libpq/auth.c:1913 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "konnte nicht mit lokaler Adresse »%s« verbinden: %m" -#: libpq/auth.c:1913 +#: libpq/auth.c:1925 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "konnte nicht mit Ident-Server auf Adresse »%s«, Port %s verbinden: %m" -#: libpq/auth.c:1935 +#: libpq/auth.c:1947 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "konnte Anfrage an Ident-Server auf Adresse »%s«, Port %s nicht senden: %m" -#: libpq/auth.c:1952 +#: libpq/auth.c:1964 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "konnte Antwort von Ident-Server auf Adresse »%s«, Port %s nicht empfangen: %m" -#: libpq/auth.c:1962 +#: libpq/auth.c:1974 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "ungültig formatierte Antwort vom Ident-Server: »%s«" -#: libpq/auth.c:2009 +#: libpq/auth.c:2027 #, c-format msgid "peer authentication is not supported on this platform" msgstr "Peer-Authentifizierung wird auf dieser Plattform nicht unterstützt" -#: libpq/auth.c:2013 +#: libpq/auth.c:2031 #, c-format msgid "could not get peer credentials: %m" msgstr "konnte Credentials von Gegenstelle nicht ermitteln: %m" -#: libpq/auth.c:2025 +#: libpq/auth.c:2043 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "konnte lokale Benutzer-ID %ld nicht nachschlagen: %s" -#: libpq/auth.c:2124 +#: libpq/auth.c:2144 #, c-format msgid "error from underlying PAM layer: %s" msgstr "Fehler von der unteren PAM-Ebene: %s" -#: libpq/auth.c:2194 +#: libpq/auth.c:2155 +#, fuzzy, c-format +#| msgid "unsupported format code: %d" +msgid "unsupported PAM conversation %d/\"%s\"" +msgstr "nicht unterstützter Formatcode: %d" + +#: libpq/auth.c:2215 #, c-format msgid "could not create PAM authenticator: %s" msgstr "konnte PAM-Authenticator nicht erzeugen: %s" -#: libpq/auth.c:2205 +#: libpq/auth.c:2226 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) fehlgeschlagen: %s" -#: libpq/auth.c:2237 +#: libpq/auth.c:2258 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST) fehlgeschlagen: %s" -#: libpq/auth.c:2249 +#: libpq/auth.c:2270 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) fehlgeschlagen: %s" -#: libpq/auth.c:2262 +#: libpq/auth.c:2283 #, c-format msgid "pam_authenticate failed: %s" msgstr "pam_authenticate fehlgeschlagen: %s" -#: libpq/auth.c:2275 +#: libpq/auth.c:2296 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt fehlgeschlagen: %s" -#: libpq/auth.c:2286 +#: libpq/auth.c:2307 #, c-format msgid "could not release PAM authenticator: %s" msgstr "konnte PAM-Authenticator nicht freigeben: %s" -#: libpq/auth.c:2362 +#: libpq/auth.c:2387 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "konnte LDAP nicht initialisieren: Fehlercode %d" -#: libpq/auth.c:2399 -#, fuzzy, c-format -#| msgid "could not extract bytes from encoded string" +#: libpq/auth.c:2424 +#, c-format msgid "could not extract domain name from ldapbasedn" -msgstr "konnte kodierte Zeichenkette nicht in Bytes umwandeln" +msgstr "konnte keinen Domain-Namen aus ldapbasedn herauslesen" -#: libpq/auth.c:2407 -#, fuzzy, c-format -#| msgid "LDAP authentication failed for user \"%s\"" +#: libpq/auth.c:2432 +#, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" -msgstr "LDAP-Authentifizierung für Benutzer »%s« fehlgeschlagen" +msgstr "LDAP-Authentifizierung konnte keine DNS-SRV-Einträge für »%s« finden" -#: libpq/auth.c:2409 +#: libpq/auth.c:2434 #, c-format msgid "Set an LDAP server name explicitly." -msgstr "" +msgstr "Geben Sie einen LDAP-Servernamen explizit an." -#: libpq/auth.c:2461 +#: libpq/auth.c:2486 #, c-format msgid "could not initialize LDAP: %s" msgstr "konnte LDAP nicht initialisieren: %s" -#: libpq/auth.c:2471 +#: libpq/auth.c:2496 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "ldaps wird mit dieser LDAP-Bibliothek nicht unterstützt" -#: libpq/auth.c:2479 +#: libpq/auth.c:2504 #, c-format msgid "could not initialize LDAP: %m" msgstr "konnte LDAP nicht initialisieren: %m" -#: libpq/auth.c:2489 +#: libpq/auth.c:2514 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "konnte LDAP-Protokollversion nicht setzen: %s" -#: libpq/auth.c:2529 +#: libpq/auth.c:2554 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "konnte Funktion _ldap_start_tls_sA in wldap32.dll nicht laden" -#: libpq/auth.c:2530 +#: libpq/auth.c:2555 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "LDAP über SSL wird auf dieser Plattform nicht unterstützt." -#: libpq/auth.c:2546 +#: libpq/auth.c:2571 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "konnte LDAP-TLS-Sitzung nicht starten: %s" -#: libpq/auth.c:2617 -#, fuzzy, c-format -#| msgid "LDAP server not specified" +#: libpq/auth.c:2642 +#, c-format msgid "LDAP server not specified, and no ldapbasedn" -msgstr "LDAP-Server nicht angegeben" +msgstr "LDAP-Server nicht angegeben, und kein ldapbasedn" -#: libpq/auth.c:2624 +#: libpq/auth.c:2649 #, c-format msgid "LDAP server not specified" msgstr "LDAP-Server nicht angegeben" -#: libpq/auth.c:2686 +#: libpq/auth.c:2711 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "ungültiges Zeichen im Benutzernamen für LDAP-Authentifizierung" -#: libpq/auth.c:2703 +#: libpq/auth.c:2728 #, c-format msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" msgstr "erstes LDAP-Binden für ldapbinddn »%s« auf Server »%s« fehlgeschlagen: %s" -#: libpq/auth.c:2732 +#: libpq/auth.c:2757 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "konnte LDAP nicht mit Filter »%s« auf Server »%s« durchsuchen: %s" -#: libpq/auth.c:2746 +#: libpq/auth.c:2771 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "LDAP-Benutzer »%s« existiert nicht" -#: libpq/auth.c:2747 +#: libpq/auth.c:2772 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "LDAP-Suche nach Filter »%s« auf Server »%s« gab keine Einträge zurück." -#: libpq/auth.c:2751 +#: libpq/auth.c:2776 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "LDAP-Benutzer »%s« ist nicht eindeutig" -#: libpq/auth.c:2752 +#: libpq/auth.c:2777 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." msgstr[0] "LDAP-Suche nach Filter »%s« auf Server »%s« gab %d Eintrag zurück." msgstr[1] "LDAP-Suche nach Filter »%s« auf Server »%s« gab %d Einträge zurück." -#: libpq/auth.c:2772 +#: libpq/auth.c:2797 #, c-format msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "konnte DN fũr den ersten Treffer für »%s« auf Server »%s« nicht lesen: %s" -#: libpq/auth.c:2793 +#: libpq/auth.c:2818 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\"" msgstr "Losbinden fehlgeschlagen nach Suche nach Benutzer »%s« auf Server »%s«" -#: libpq/auth.c:2824 +#: libpq/auth.c:2849 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "LDAP-Login fehlgeschlagen für Benutzer »%s« auf Server »%s«: %s" -#: libpq/auth.c:2853 +#: libpq/auth.c:2881 #, c-format msgid "LDAP diagnostics: %s" msgstr "LDAP-Diagnostik: %s" -#: libpq/auth.c:2880 +#: libpq/auth.c:2919 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "Zertifikatauthentifizierung für Benutzer »%s« fehlgeschlagen: Client-Zertifikat enthält keinen Benutzernamen" -#: libpq/auth.c:2897 +#: libpq/auth.c:2940 #, fuzzy, c-format #| msgid "certificate authentication failed for user \"%s\"" -msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" +msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" msgstr "Zertifikatauthentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:2998 +#: libpq/auth.c:2963 +#, c-format +msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" +msgstr "Zertifikatüberprüfung (clientcert=verify=full) für Benutzer »%s« fehlgeschlagen: DN stimmt nicht überein" + +#: libpq/auth.c:2968 +#, c-format +msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" +msgstr "Zertifikatüberprüfung (clientcert=verify=full) für Benutzer »%s« fehlgeschlagen: CN stimmt nicht überein" + +#: libpq/auth.c:3070 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS-Server nicht angegeben" -#: libpq/auth.c:3005 +#: libpq/auth.c:3077 #, c-format msgid "RADIUS secret not specified" msgstr "RADIUS-Geheimnis nicht angegeben" -#: libpq/auth.c:3019 +#: libpq/auth.c:3091 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "RADIUS-Authentifizierung unterstützt keine Passwörter länger als %d Zeichen" -#: libpq/auth.c:3124 libpq/hba.c:1954 +#: libpq/auth.c:3198 libpq/hba.c:1998 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "konnte RADIUS-Servername »%s« nicht in Adresse übersetzen: %s" -#: libpq/auth.c:3138 +#: libpq/auth.c:3212 #, c-format msgid "could not generate random encryption vector" msgstr "konnte zufälligen Verschlüsselungsvektor nicht erzeugen" -#: libpq/auth.c:3172 +#: libpq/auth.c:3246 #, c-format msgid "could not perform MD5 encryption of password" msgstr "konnte MD5-Verschlüsselung des Passworts nicht durchführen" -#: libpq/auth.c:3198 +#: libpq/auth.c:3272 #, c-format msgid "could not create RADIUS socket: %m" msgstr "konnte RADIUS-Socket nicht erstellen: %m" -#: libpq/auth.c:3220 +#: libpq/auth.c:3294 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "konnte lokales RADIUS-Socket nicht binden: %m" -#: libpq/auth.c:3230 +#: libpq/auth.c:3304 #, c-format msgid "could not send RADIUS packet: %m" msgstr "konnte RADIUS-Paket nicht senden: %m" -#: libpq/auth.c:3263 libpq/auth.c:3289 +#: libpq/auth.c:3337 libpq/auth.c:3363 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "Zeitüberschreitung beim Warten auf RADIUS-Antwort von %s" -#: libpq/auth.c:3282 +#: libpq/auth.c:3356 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "konnte Status des RADIUS-Sockets nicht prüfen: %m" -#: libpq/auth.c:3312 +#: libpq/auth.c:3386 #, c-format msgid "could not read RADIUS response: %m" msgstr "konnte RADIUS-Antwort nicht lesen: %m" -#: libpq/auth.c:3325 libpq/auth.c:3329 +#: libpq/auth.c:3399 libpq/auth.c:3403 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "RADIUS-Antwort von %s wurde von falschem Port gesendet: %d" -#: libpq/auth.c:3338 +#: libpq/auth.c:3412 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "RADIUS-Antwort von %s zu kurz: %d" -#: libpq/auth.c:3345 +#: libpq/auth.c:3419 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "RADIUS-Antwort von %s hat verfälschte Länge: %d (tatsächliche Länge %d)" -#: libpq/auth.c:3353 +#: libpq/auth.c:3427 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "RADIUS-Antwort von %s unterscheidet sich von Anfrage: %d (sollte %d sein)" -#: libpq/auth.c:3378 +#: libpq/auth.c:3452 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "konnte MD5-Verschlüsselung des empfangenen Pakets nicht durchführen" -#: libpq/auth.c:3387 +#: libpq/auth.c:3461 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "RADIUS-Antwort von %s hat falsche MD5-Signatur" -#: libpq/auth.c:3405 +#: libpq/auth.c:3479 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "RADIUS-Antwort von %s hat ungültigen Code (%d) für Benutzer »%s«" @@ -13559,8 +13967,8 @@ msgstr "konnte Serverdatei »%s« nicht schreiben: %m" msgid "large object read request is too large" msgstr "Large-Object-Leseaufforderung ist zu groß" -#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:229 utils/adt/genfile.c:268 -#: utils/adt/genfile.c:304 +#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:268 utils/adt/genfile.c:307 +#: utils/adt/genfile.c:343 #, c-format msgid "requested length cannot be negative" msgstr "verlangte Länge darf nicht negativ sein" @@ -13573,10 +13981,9 @@ msgid "permission denied for large object %u" msgstr "keine Berechtigung für Large Object %u" #: libpq/be-secure-common.c:93 -#, fuzzy, c-format -#| msgid "could not read from file \"%s\": %m" +#, c-format msgid "could not read from command \"%s\": %m" -msgstr "konnte nicht aus Datei »%s« lesen: %m" +msgstr "konnte nicht von Befehl »%s« lesen: %m" #: libpq/be-secure-common.c:113 #, c-format @@ -13608,221 +14015,250 @@ msgstr "private Schlüsseldatei »%s« erlaubt Zugriff von Gruppe oder Welt" msgid "File must have permissions u=rw (0600) or less if owned by the database user, or permissions u=rw,g=r (0640) or less if owned by root." msgstr "Dateirechte müssen u=rw (0600) oder weniger sein, wenn der Eigentümer der Datenbankbenutzer ist, oder u=rw,g=r (0640) oder weniger, wenn der Eigentümer »root« ist." -#: libpq/be-secure-gssapi.c:195 +#: libpq/be-secure-gssapi.c:204 msgid "GSSAPI wrap error" msgstr "GSSAPI-Wrap-Fehler" -#: libpq/be-secure-gssapi.c:199 +#: libpq/be-secure-gssapi.c:211 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "ausgehende GSSAPI-Nachricht würde keine Vertraulichkeit verwenden" -#: libpq/be-secure-gssapi.c:203 libpq/be-secure-gssapi.c:570 +#: libpq/be-secure-gssapi.c:218 libpq/be-secure-gssapi.c:622 #, c-format msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" msgstr "Server versuchte übergroßes GSSAPI-Paket zu senden (%zu > %zu)" -#: libpq/be-secure-gssapi.c:327 +#: libpq/be-secure-gssapi.c:351 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" msgstr "übergroßes GSSAPI-Paket vom Client gesendet (%zu > %zu)" -#: libpq/be-secure-gssapi.c:361 +#: libpq/be-secure-gssapi.c:389 msgid "GSSAPI unwrap error" msgstr "GSSAPI-Unwrap-Fehler" -#: libpq/be-secure-gssapi.c:366 +#: libpq/be-secure-gssapi.c:396 #, c-format msgid "incoming GSSAPI message did not use confidentiality" msgstr "eingehende GSSAPI-Nachricht verwendete keine Vertraulichkeit" -#: libpq/be-secure-gssapi.c:521 +#: libpq/be-secure-gssapi.c:570 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %d)" msgstr "übergroßes GSSAPI-Paket vom Client gesendet (%zu > %d)" -#: libpq/be-secure-gssapi.c:543 +#: libpq/be-secure-gssapi.c:594 msgid "could not accept GSSAPI security context" msgstr "konnte GSSAPI-Sicherheitskontext nicht akzeptieren" -#: libpq/be-secure-gssapi.c:630 +#: libpq/be-secure-gssapi.c:689 msgid "GSSAPI size check error" msgstr "GSSAPI-Fehler bei der Größenprüfung" -#: libpq/be-secure-openssl.c:111 +#: libpq/be-secure-openssl.c:115 #, c-format msgid "could not create SSL context: %s" msgstr "konnte SSL-Kontext nicht erzeugen: %s" -#: libpq/be-secure-openssl.c:137 +#: libpq/be-secure-openssl.c:141 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "konnte Serverzertifikatsdatei »%s« nicht laden: %s" -#: libpq/be-secure-openssl.c:157 +#: libpq/be-secure-openssl.c:161 #, c-format msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "private Schlüsseldatei »%s« kann nicht neu geladen werden, weil sie eine Passphrase benötigt" -#: libpq/be-secure-openssl.c:162 +#: libpq/be-secure-openssl.c:166 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "konnte private Schlüsseldatei »%s« nicht laden: %s" -#: libpq/be-secure-openssl.c:171 +#: libpq/be-secure-openssl.c:175 #, c-format msgid "check of private key failed: %s" msgstr "Überprüfung des privaten Schlüssels fehlgeschlagen: %s" -#: libpq/be-secure-openssl.c:183 libpq/be-secure-openssl.c:205 -#, fuzzy, c-format -#| msgid "SSL is not supported by this build" +#. translator: first %s is a GUC option name, second %s is its value +#: libpq/be-secure-openssl.c:188 libpq/be-secure-openssl.c:211 +#, c-format msgid "\"%s\" setting \"%s\" not supported by this build" -msgstr "SSL wird von dieser Installation nicht unterstützt" +msgstr "»%s«-Wert »%s« wird von dieser Installation nicht unterstützt" -#: libpq/be-secure-openssl.c:193 +#: libpq/be-secure-openssl.c:198 #, c-format msgid "could not set minimum SSL protocol version" msgstr "konnte minimale SSL-Protokollversion nicht setzen" -#: libpq/be-secure-openssl.c:215 +#: libpq/be-secure-openssl.c:221 #, c-format msgid "could not set maximum SSL protocol version" msgstr "konnte maximale SSL-Protokollversion nicht setzen" -#: libpq/be-secure-openssl.c:230 -#, fuzzy, c-format -#| msgid "could not set LDAP protocol version: %s" +#: libpq/be-secure-openssl.c:237 +#, c-format msgid "could not set SSL protocol version range" -msgstr "konnte LDAP-Protokollversion nicht setzen: %s" +msgstr "konnte SSL-Protokollversionsbereich nicht setzen" -#: libpq/be-secure-openssl.c:231 -#, fuzzy, c-format -#| msgid "\"%s\" is not an index for table \"%s\"" +#: libpq/be-secure-openssl.c:238 +#, c-format msgid "\"%s\" cannot be higher than \"%s\"" -msgstr "»%s« ist kein Index für Tabelle »%s«" +msgstr "»%s« kann nicht höher als »%s« sein" -#: libpq/be-secure-openssl.c:254 +#: libpq/be-secure-openssl.c:265 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "konnte Cipher-Liste nicht setzen (keine gültigen Ciphers verfügbar)" -#: libpq/be-secure-openssl.c:272 +#: libpq/be-secure-openssl.c:285 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "konnte Root-Zertifikat-Datei »%s« nicht laden: %s" -#: libpq/be-secure-openssl.c:299 +#: libpq/be-secure-openssl.c:334 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "konnte SSL-Certificate-Revocation-List-Datei »%s« nicht laden: %s" -#: libpq/be-secure-openssl.c:374 +#: libpq/be-secure-openssl.c:342 +#, c-format +msgid "could not load SSL certificate revocation list directory \"%s\": %s" +msgstr "konnte SSL-Certificate-Revocation-List-Verzeichnis »%s« nicht laden: %s" + +#: libpq/be-secure-openssl.c:350 +#, c-format +msgid "could not load SSL certificate revocation list file \"%s\" or directory \"%s\": %s" +msgstr "konnte SSL-Certificate-Revocation-List-Datei »%s« oder -Verzeichnis »%s« nicht laden: %s" + +#: libpq/be-secure-openssl.c:408 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "konnte SSL-Verbindung nicht initialisieren: SSL-Kontext nicht eingerichtet" -#: libpq/be-secure-openssl.c:382 +#: libpq/be-secure-openssl.c:419 #, c-format msgid "could not initialize SSL connection: %s" msgstr "konnte SSL-Verbindung nicht initialisieren: %s" -#: libpq/be-secure-openssl.c:390 +#: libpq/be-secure-openssl.c:427 #, c-format msgid "could not set SSL socket: %s" msgstr "konnte SSL-Socket nicht setzen: %s" -#: libpq/be-secure-openssl.c:445 +#: libpq/be-secure-openssl.c:482 #, c-format msgid "could not accept SSL connection: %m" msgstr "konnte SSL-Verbindung nicht annehmen: %m" -#: libpq/be-secure-openssl.c:449 libpq/be-secure-openssl.c:460 +#: libpq/be-secure-openssl.c:486 libpq/be-secure-openssl.c:539 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "konnte SSL-Verbindung nicht annehmen: EOF entdeckt" -#: libpq/be-secure-openssl.c:454 +#: libpq/be-secure-openssl.c:525 #, c-format msgid "could not accept SSL connection: %s" msgstr "konnte SSL-Verbindung nicht annehmen: %s" -#: libpq/be-secure-openssl.c:465 libpq/be-secure-openssl.c:596 -#: libpq/be-secure-openssl.c:660 +#: libpq/be-secure-openssl.c:528 +#, c-format +msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." +msgstr "Das zeigt möglicherweise an, dass der Client keine SSL-Protokollversion zwischen %s und %s unterstützt." + +#: libpq/be-secure-openssl.c:544 libpq/be-secure-openssl.c:723 +#: libpq/be-secure-openssl.c:787 #, c-format msgid "unrecognized SSL error code: %d" msgstr "unbekannter SSL-Fehlercode: %d" -#: libpq/be-secure-openssl.c:507 +#: libpq/be-secure-openssl.c:590 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "Common-Name im SSL-Zertifikat enthält Null-Byte" -#: libpq/be-secure-openssl.c:585 libpq/be-secure-openssl.c:644 +#: libpq/be-secure-openssl.c:629 +#, c-format +msgid "SSL certificate's distinguished name contains embedded null" +msgstr "Distinguished Name im SSL-Zertifikat enthält Null-Byte" + +#: libpq/be-secure-openssl.c:712 libpq/be-secure-openssl.c:771 #, c-format msgid "SSL error: %s" msgstr "SSL-Fehler: %s" -#: libpq/be-secure-openssl.c:825 +#: libpq/be-secure-openssl.c:952 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "konnte DH-Parameterdatei »%s« nicht öffnen: %m" -#: libpq/be-secure-openssl.c:837 +#: libpq/be-secure-openssl.c:964 #, c-format msgid "could not load DH parameters file: %s" msgstr "konnte DH-Parameterdatei nicht laden: %s" -#: libpq/be-secure-openssl.c:847 +#: libpq/be-secure-openssl.c:974 #, c-format msgid "invalid DH parameters: %s" msgstr "ungültige DH-Parameter: %s" -#: libpq/be-secure-openssl.c:855 +#: libpq/be-secure-openssl.c:983 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "ungültige DH-Parameter: p ist keine Primzahl" -#: libpq/be-secure-openssl.c:863 +#: libpq/be-secure-openssl.c:992 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "ungültige DH-Parameter: weder geeigneter Generator noch sichere Primzahl" -#: libpq/be-secure-openssl.c:1018 +#: libpq/be-secure-openssl.c:1153 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: konnte DH-Parameter nicht laden" -#: libpq/be-secure-openssl.c:1026 +#: libpq/be-secure-openssl.c:1161 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: konnte DH-Parameter nicht setzen: %s" -#: libpq/be-secure-openssl.c:1053 +#: libpq/be-secure-openssl.c:1188 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: unbekannter Kurvenname: %s" -#: libpq/be-secure-openssl.c:1062 +#: libpq/be-secure-openssl.c:1197 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: konnte Schlüssel nicht erzeugen" -#: libpq/be-secure-openssl.c:1090 +#: libpq/be-secure-openssl.c:1225 msgid "no SSL error reported" msgstr "kein SSL-Fehler berichtet" -#: libpq/be-secure-openssl.c:1094 +#: libpq/be-secure-openssl.c:1229 #, c-format msgid "SSL error code %lu" msgstr "SSL-Fehlercode %lu" -#: libpq/be-secure.c:122 +#: libpq/be-secure-openssl.c:1383 #, c-format -msgid "SSL connection from \"%s\"" -msgstr "SSL-Verbindung von »%s«" +msgid "failed to create BIO" +msgstr "" + +#: libpq/be-secure-openssl.c:1393 +#, c-format +msgid "could not get NID for ASN1_OBJECT object" +msgstr "" -#: libpq/be-secure.c:207 libpq/be-secure.c:303 +#: libpq/be-secure-openssl.c:1401 +#, fuzzy, c-format +#| msgid "could not create LDAP structure\n" +msgid "could not convert NID %d to an ASN1_OBJECT structure" +msgstr "konnte LDAP-Struktur nicht erzeugen\n" + +#: libpq/be-secure.c:209 libpq/be-secure.c:305 #, c-format msgid "terminating connection due to unexpected postmaster exit" msgstr "Verbindung wird abgebrochen wegen unerwartetem Ende des Postmasters" @@ -13857,528 +14293,556 @@ msgstr "Passwort stimmt nicht überein für Benutzer »%s«." msgid "Password of user \"%s\" is in unrecognized format." msgstr "Passwort von Benutzer »%s« hat unbekanntes Format." -#: libpq/hba.c:235 +#: libpq/hba.c:243 #, c-format msgid "authentication file token too long, skipping: \"%s\"" msgstr "Token in Authentifizierungsdatei zu lang, wird übersprungen: »%s«" -#: libpq/hba.c:407 +#: libpq/hba.c:415 #, c-format msgid "could not open secondary authentication file \"@%s\" as \"%s\": %m" msgstr "konnte sekundäre Authentifizierungsdatei »@%s« nicht als »%s« öffnen: %m" -#: libpq/hba.c:509 -#, c-format -msgid "authentication file line too long" -msgstr "Zeile in Authentifizierungsdatei zu lang" - -#: libpq/hba.c:510 libpq/hba.c:867 libpq/hba.c:887 libpq/hba.c:925 -#: libpq/hba.c:975 libpq/hba.c:989 libpq/hba.c:1013 libpq/hba.c:1022 -#: libpq/hba.c:1035 libpq/hba.c:1056 libpq/hba.c:1069 libpq/hba.c:1089 -#: libpq/hba.c:1111 libpq/hba.c:1123 libpq/hba.c:1179 libpq/hba.c:1199 -#: libpq/hba.c:1213 libpq/hba.c:1232 libpq/hba.c:1243 libpq/hba.c:1258 -#: libpq/hba.c:1276 libpq/hba.c:1292 libpq/hba.c:1304 libpq/hba.c:1341 -#: libpq/hba.c:1382 libpq/hba.c:1395 libpq/hba.c:1417 libpq/hba.c:1430 -#: libpq/hba.c:1442 libpq/hba.c:1460 libpq/hba.c:1510 libpq/hba.c:1554 -#: libpq/hba.c:1565 libpq/hba.c:1581 libpq/hba.c:1598 libpq/hba.c:1608 -#: libpq/hba.c:1666 libpq/hba.c:1704 libpq/hba.c:1726 libpq/hba.c:1738 -#: libpq/hba.c:1825 libpq/hba.c:1843 libpq/hba.c:1937 libpq/hba.c:1956 -#: libpq/hba.c:1985 libpq/hba.c:1998 libpq/hba.c:2021 libpq/hba.c:2043 -#: libpq/hba.c:2057 tsearch/ts_locale.c:190 +#: libpq/hba.c:861 #, c-format -msgid "line %d of configuration file \"%s\"" -msgstr "Zeile %d in Konfigurationsdatei »%s«" +msgid "error enumerating network interfaces: %m" +msgstr "Fehler beim Aufzählen der Netzwerkschnittstellen: %m" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:865 +#: libpq/hba.c:888 #, c-format msgid "authentication option \"%s\" is only valid for authentication methods %s" msgstr "Authentifizierungsoption »%s« ist nur gültig für Authentifizierungsmethoden %s" -#: libpq/hba.c:885 +#: libpq/hba.c:890 libpq/hba.c:910 libpq/hba.c:948 libpq/hba.c:998 +#: libpq/hba.c:1012 libpq/hba.c:1036 libpq/hba.c:1045 libpq/hba.c:1058 +#: libpq/hba.c:1079 libpq/hba.c:1092 libpq/hba.c:1112 libpq/hba.c:1134 +#: libpq/hba.c:1146 libpq/hba.c:1205 libpq/hba.c:1225 libpq/hba.c:1239 +#: libpq/hba.c:1259 libpq/hba.c:1270 libpq/hba.c:1285 libpq/hba.c:1304 +#: libpq/hba.c:1320 libpq/hba.c:1332 libpq/hba.c:1369 libpq/hba.c:1410 +#: libpq/hba.c:1423 libpq/hba.c:1445 libpq/hba.c:1457 libpq/hba.c:1475 +#: libpq/hba.c:1525 libpq/hba.c:1569 libpq/hba.c:1580 libpq/hba.c:1596 +#: libpq/hba.c:1613 libpq/hba.c:1623 libpq/hba.c:1683 libpq/hba.c:1721 +#: libpq/hba.c:1738 libpq/hba.c:1751 libpq/hba.c:1763 libpq/hba.c:1782 +#: libpq/hba.c:1869 libpq/hba.c:1887 libpq/hba.c:1981 libpq/hba.c:2000 +#: libpq/hba.c:2029 libpq/hba.c:2042 libpq/hba.c:2065 libpq/hba.c:2087 +#: libpq/hba.c:2101 tsearch/ts_locale.c:232 +#, c-format +msgid "line %d of configuration file \"%s\"" +msgstr "Zeile %d in Konfigurationsdatei »%s«" + +#: libpq/hba.c:908 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "Authentifizierungsmethode »%s« benötigt Argument »%s«" -#: libpq/hba.c:913 +#: libpq/hba.c:936 #, c-format msgid "missing entry in file \"%s\" at end of line %d" msgstr "fehlender Eintrag in Datei »%s« am Ende von Zeile %d" -#: libpq/hba.c:924 +#: libpq/hba.c:947 #, c-format msgid "multiple values in ident field" msgstr "mehrere Werte in Ident-Feld" -#: libpq/hba.c:973 +#: libpq/hba.c:996 #, c-format msgid "multiple values specified for connection type" msgstr "mehrere Werte angegeben für Verbindungstyp" -#: libpq/hba.c:974 +#: libpq/hba.c:997 #, c-format msgid "Specify exactly one connection type per line." msgstr "Geben Sie genau einen Verbindungstyp pro Zeile an." -#: libpq/hba.c:988 +#: libpq/hba.c:1011 #, c-format msgid "local connections are not supported by this build" msgstr "lokale Verbindungen werden von dieser Installation nicht unterstützt" -#: libpq/hba.c:1011 +#: libpq/hba.c:1034 #, c-format msgid "hostssl record cannot match because SSL is disabled" msgstr "hostssl-Eintrag kann nicht angewendet werden, weil SSL deaktiviert ist" -#: libpq/hba.c:1012 +#: libpq/hba.c:1035 #, c-format msgid "Set ssl = on in postgresql.conf." msgstr "Setzen Sie ssl = on in postgresql.conf." -#: libpq/hba.c:1020 +#: libpq/hba.c:1043 #, c-format msgid "hostssl record cannot match because SSL is not supported by this build" msgstr "hostssl-Eintrag kann nicht angewendet werden, weil SSL von dieser Installation nicht unterstützt wird" -#: libpq/hba.c:1021 +#: libpq/hba.c:1044 #, c-format -msgid "Compile with --with-openssl to use SSL connections." -msgstr "Kompilieren Sie mit --with-openssl, um SSL-Verbindungen zu verwenden." +msgid "Compile with --with-ssl to use SSL connections." +msgstr "Kompilieren Sie mit --with-ssl, um SSL-Verbindungen zu verwenden." -#: libpq/hba.c:1033 +#: libpq/hba.c:1056 #, c-format msgid "hostgssenc record cannot match because GSSAPI is not supported by this build" msgstr "hostgssenc-Eintrag kann nicht angewendet werden, weil GSSAPI von dieser Installation nicht unterstützt wird" -#: libpq/hba.c:1034 +#: libpq/hba.c:1057 #, c-format msgid "Compile with --with-gssapi to use GSSAPI connections." msgstr "Kompilieren Sie mit --with-gssapi, um GSSAPI-Verbindungen zu verwenden." -#: libpq/hba.c:1054 +#: libpq/hba.c:1077 #, c-format msgid "invalid connection type \"%s\"" msgstr "ungültiger Verbindungstyp »%s«" -#: libpq/hba.c:1068 +#: libpq/hba.c:1091 #, c-format msgid "end-of-line before database specification" msgstr "Zeilenende vor Datenbankangabe" -#: libpq/hba.c:1088 +#: libpq/hba.c:1111 #, c-format msgid "end-of-line before role specification" msgstr "Zeilenende vor Rollenangabe" -#: libpq/hba.c:1110 +#: libpq/hba.c:1133 #, c-format msgid "end-of-line before IP address specification" msgstr "Zeilenende vor IP-Adressangabe" -#: libpq/hba.c:1121 +#: libpq/hba.c:1144 #, c-format msgid "multiple values specified for host address" msgstr "mehrere Werte für Hostadresse angegeben" -#: libpq/hba.c:1122 +#: libpq/hba.c:1145 #, c-format msgid "Specify one address range per line." msgstr "Geben Sie einen Adressbereich pro Zeile an." -#: libpq/hba.c:1177 +#: libpq/hba.c:1203 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "ungültige IP-Adresse »%s«: %s" -#: libpq/hba.c:1197 +#: libpq/hba.c:1223 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "Angabe von sowohl Hostname als auch CIDR-Maske ist ungültig: »%s«" -#: libpq/hba.c:1211 +#: libpq/hba.c:1237 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "ungültige CIDR-Maske in Adresse »%s«" -#: libpq/hba.c:1230 +#: libpq/hba.c:1257 #, c-format msgid "end-of-line before netmask specification" msgstr "Zeilenende vor Netzmaskenangabe" -#: libpq/hba.c:1231 +#: libpq/hba.c:1258 #, c-format msgid "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "Geben Sie einen Adressbereich in CIDR-Schreibweise oder eine separate Netzmaske an." -#: libpq/hba.c:1242 +#: libpq/hba.c:1269 #, c-format msgid "multiple values specified for netmask" msgstr "mehrere Werte für Netzmaske angegeben" -#: libpq/hba.c:1256 +#: libpq/hba.c:1283 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "ungültige IP-Maske »%s«: %s" -#: libpq/hba.c:1275 +#: libpq/hba.c:1303 #, c-format msgid "IP address and mask do not match" msgstr "IP-Adresse und -Maske passen nicht zusammen" -#: libpq/hba.c:1291 +#: libpq/hba.c:1319 #, c-format msgid "end-of-line before authentication method" msgstr "Zeilenende vor Authentifizierungsmethode" -#: libpq/hba.c:1302 +#: libpq/hba.c:1330 #, c-format msgid "multiple values specified for authentication type" msgstr "mehrere Werte für Authentifizierungstyp angegeben" -#: libpq/hba.c:1303 +#: libpq/hba.c:1331 #, c-format msgid "Specify exactly one authentication type per line." msgstr "Geben Sie genau einen Authentifizierungstyp pro Zeile an." -#: libpq/hba.c:1380 +#: libpq/hba.c:1408 #, c-format msgid "invalid authentication method \"%s\"" msgstr "ungültige Authentifizierungsmethode »%s«" -#: libpq/hba.c:1393 +#: libpq/hba.c:1421 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "ungültige Authentifizierungsmethode »%s«: von dieser Installation nicht unterstützt" -#: libpq/hba.c:1416 +#: libpq/hba.c:1444 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "gssapi-Authentifizierung wird auf lokalen Sockets nicht unterstützt" -#: libpq/hba.c:1429 -#, c-format -msgid "GSSAPI encryption only supports gss, trust, or reject authentication" -msgstr "GSSAPI-Verschlüsselung unterstützt nur die Authentifizierungsmethoden gss, trust und reject" - -#: libpq/hba.c:1441 +#: libpq/hba.c:1456 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "peer-Authentifizierung wird nur auf lokalen Sockets unterstützt" -#: libpq/hba.c:1459 +#: libpq/hba.c:1474 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "cert-Authentifizierung wird nur auf »hostssl«-Verbindungen unterstützt" -#: libpq/hba.c:1509 +#: libpq/hba.c:1524 #, c-format msgid "authentication option not in name=value format: %s" msgstr "Authentifizierungsoption nicht im Format name=wert: %s" -#: libpq/hba.c:1553 +#: libpq/hba.c:1568 #, c-format msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" msgstr "ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter oder ldapurl kann nicht zusammen mit ldapprefix verwendet werden" -#: libpq/hba.c:1564 +#: libpq/hba.c:1579 #, c-format msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" msgstr "Authentifizierungsmethode »ldap« benötigt Argument »ldapbasedn«, »ldapprefix« oder »ldapsuffix«" -#: libpq/hba.c:1580 +#: libpq/hba.c:1595 #, c-format msgid "cannot use ldapsearchattribute together with ldapsearchfilter" msgstr "ldapsearchattribute kann nicht zusammen mit ldapsearchfilter verwendet werden" -#: libpq/hba.c:1597 +#: libpq/hba.c:1612 #, c-format msgid "list of RADIUS servers cannot be empty" msgstr "List der RADIUS-Server darf nicht leer sein" -#: libpq/hba.c:1607 +#: libpq/hba.c:1622 #, c-format msgid "list of RADIUS secrets cannot be empty" msgstr "Liste der RADIUS-Geheimnisse darf nicht leer sein" -#: libpq/hba.c:1660 +#: libpq/hba.c:1677 #, c-format msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" msgstr "die Anzahl %s (%d) muss 1 oder gleich der Anzahl %s (%d) sein" -#: libpq/hba.c:1694 +#: libpq/hba.c:1711 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi und cert" -#: libpq/hba.c:1703 +#: libpq/hba.c:1720 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert kann nur für »hostssl«-Zeilen konfiguriert werden" -#: libpq/hba.c:1725 -#, fuzzy, c-format -#| msgid "clientcert can not be set to 0 when using \"cert\" authentication" -msgid "clientcert can not be set to \"no-verify\" when using \"cert\" authentication" -msgstr "clientcert kann nicht auf 0 gesetzt sein, wenn »cert«-Authentifizierung verwendet wird" - #: libpq/hba.c:1737 -#, fuzzy, c-format -#| msgid "invalid value for parameter \"%s\": \"%s\"" +#, c-format +msgid "clientcert only accepts \"verify-full\" when using \"cert\" authentication" +msgstr "clientcert akzeptiert »verify-full« nur, wenn »cert«-Authentifizierung verwendet wird" + +#: libpq/hba.c:1750 +#, c-format msgid "invalid value for clientcert: \"%s\"" -msgstr "ungültiger Wert für Parameter »%s«: »%s«" +msgstr "ungültiger Wert für clientcert: »%s«" + +#: libpq/hba.c:1762 +#, c-format +msgid "clientname can only be configured for \"hostssl\" rows" +msgstr "clientname kann nur für »hostssl«-Zeilen konfiguriert werden" + +#: libpq/hba.c:1781 +#, c-format +msgid "invalid value for clientname: \"%s\"" +msgstr "ungültiger Wert für clientname: »%s«" -#: libpq/hba.c:1771 +#: libpq/hba.c:1815 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "konnte LDAP-URL »%s« nicht interpretieren: %s" -#: libpq/hba.c:1782 +#: libpq/hba.c:1826 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "nicht unterstütztes LDAP-URL-Schema: %s" -#: libpq/hba.c:1806 +#: libpq/hba.c:1850 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "LDAP-URLs werden auf dieser Plattform nicht unterstützt" -#: libpq/hba.c:1824 +#: libpq/hba.c:1868 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "ungültiger ldapscheme-Wert: »%s«" -#: libpq/hba.c:1842 +#: libpq/hba.c:1886 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "ungültige LDAP-Portnummer: »%s«" -#: libpq/hba.c:1888 libpq/hba.c:1895 +#: libpq/hba.c:1932 libpq/hba.c:1939 msgid "gssapi and sspi" msgstr "gssapi und sspi" -#: libpq/hba.c:1904 libpq/hba.c:1913 +#: libpq/hba.c:1948 libpq/hba.c:1957 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:1935 +#: libpq/hba.c:1979 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "konnte RADIUS-Serverliste »%s« nicht parsen" -#: libpq/hba.c:1983 +#: libpq/hba.c:2027 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "konnte RADIUS-Portliste »%s« nicht parsen" -#: libpq/hba.c:1997 +#: libpq/hba.c:2041 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "ungültige RADIUS-Portnummer: »%s«" -#: libpq/hba.c:2019 +#: libpq/hba.c:2063 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "konnte RADIUS-Geheimnisliste »%s« nicht parsen" -#: libpq/hba.c:2041 +#: libpq/hba.c:2085 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "konnte RADIUS-Bezeichnerliste »%s« nicht parsen" -#: libpq/hba.c:2055 +#: libpq/hba.c:2099 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "unbekannter Authentifizierungsoptionsname: »%s«" -#: libpq/hba.c:2250 +#: libpq/hba.c:2296 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "Konfigurationsdatei »%s« enthält keine Einträge" -#: libpq/hba.c:2768 +#: libpq/hba.c:2814 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "ungültiger regulärer Ausdruck »%s«: %s" -#: libpq/hba.c:2828 +#: libpq/hba.c:2874 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "Suche nach regulärem Ausdruck für »%s« fehlgeschlagen: %s" -#: libpq/hba.c:2847 +#: libpq/hba.c:2893 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "regulärer Ausdruck »%s« hat keine Teilausdrücke wie von der Backreference in »%s« verlangt" -#: libpq/hba.c:2943 +#: libpq/hba.c:2989 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "angegebener Benutzername (%s) und authentifizierter Benutzername (%s) stimmen nicht überein" -#: libpq/hba.c:2963 +#: libpq/hba.c:3009 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "kein passender Eintrag in Usermap »%s« für Benutzer »%s«, authentifiziert als »%s«" -#: libpq/hba.c:2996 +#: libpq/hba.c:3042 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "konnte Usermap-Datei »%s« nicht öffnen: %m" -#: libpq/pqcomm.c:218 +#: libpq/pqcomm.c:204 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "konnte Socket nicht auf nicht-blockierenden Modus umstellen: %m" -#: libpq/pqcomm.c:372 +#: libpq/pqcomm.c:362 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "Unix-Domain-Socket-Pfad »%s« ist zu lang (maximal %d Bytes)" -#: libpq/pqcomm.c:393 +#: libpq/pqcomm.c:383 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "konnte Hostname »%s«, Dienst »%s« nicht in Adresse übersetzen: %s" -#: libpq/pqcomm.c:397 +#: libpq/pqcomm.c:387 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "konnte Dienst »%s« nicht in Adresse übersetzen: %s" -#: libpq/pqcomm.c:424 +#: libpq/pqcomm.c:414 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "konnte nicht an alle verlangten Adressen binden: MAXLISTEN (%d) überschritten" -#: libpq/pqcomm.c:433 +#: libpq/pqcomm.c:423 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:437 +#: libpq/pqcomm.c:427 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:442 +#: libpq/pqcomm.c:432 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:447 +#: libpq/pqcomm.c:437 #, c-format msgid "unrecognized address family %d" msgstr "unbekannte Adressfamilie %d" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:473 +#: libpq/pqcomm.c:463 #, c-format msgid "could not create %s socket for address \"%s\": %m" msgstr "konnte %s-Socket für Adresse »%s« nicht erzeugen: %m" -#. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:499 -#, c-format -msgid "setsockopt(SO_REUSEADDR) failed for %s address \"%s\": %m" -msgstr "setsockopt(SO_REUSEADDR) für %s-Adresse »%s« fehlgeschlagen: %m" - -#. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:516 +#. translator: third %s is IPv4, IPv6, or Unix +#: libpq/pqcomm.c:489 libpq/pqcomm.c:507 #, c-format -msgid "setsockopt(IPV6_V6ONLY) failed for %s address \"%s\": %m" -msgstr "setsockopt(IPV6_V6ONLY) für %s-Adresse »%s« fehlgeschlagen: %m" +msgid "%s(%s) failed for %s address \"%s\": %m" +msgstr "%s(%s) für %s-Adresse »%s« fehlgeschlagen: %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:536 +#: libpq/pqcomm.c:530 #, c-format msgid "could not bind %s address \"%s\": %m" msgstr "konnte %s-Adresse »%s« nicht binden: %m" -#: libpq/pqcomm.c:539 +#: libpq/pqcomm.c:534 #, c-format -msgid "Is another postmaster already running on port %d? If not, remove socket file \"%s\" and retry." -msgstr "Läuft bereits ein anderer Postmaster auf Port %d? Wenn nicht, entfernen Sie die Socketdatei »%s« und versuchen Sie erneut." +msgid "Is another postmaster already running on port %d?" +msgstr "Läuft bereits ein anderer Postmaster auf Port %d?" -#: libpq/pqcomm.c:542 +#: libpq/pqcomm.c:536 #, c-format msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." msgstr "Läuft bereits ein anderer Postmaster auf Port %d? Wenn nicht, warten Sie einige Sekunden und versuchen Sie erneut." #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:575 +#: libpq/pqcomm.c:569 #, c-format msgid "could not listen on %s address \"%s\": %m" msgstr "konnte nicht auf %s-Adresse »%s« hören: %m" -#: libpq/pqcomm.c:584 +#: libpq/pqcomm.c:578 #, c-format msgid "listening on Unix socket \"%s\"" msgstr "erwarte Verbindungen auf Unix-Socket »%s«" #. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:590 +#: libpq/pqcomm.c:584 #, c-format msgid "listening on %s address \"%s\", port %d" msgstr "erwarte Verbindungen auf %s-Adresse »%s«, Port %d" -#: libpq/pqcomm.c:673 +#: libpq/pqcomm.c:675 #, c-format msgid "group \"%s\" does not exist" msgstr "Gruppe »%s« existiert nicht" -#: libpq/pqcomm.c:683 +#: libpq/pqcomm.c:685 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "konnte Gruppe von Datei »%s« nicht setzen: %m" -#: libpq/pqcomm.c:694 +#: libpq/pqcomm.c:696 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "konnte Zugriffsrechte von Datei »%s« nicht setzen: %m" -#: libpq/pqcomm.c:724 +#: libpq/pqcomm.c:726 #, c-format msgid "could not accept new connection: %m" msgstr "konnte neue Verbindung nicht akzeptieren: %m" -#: libpq/pqcomm.c:914 +#: libpq/pqcomm.c:766 libpq/pqcomm.c:775 libpq/pqcomm.c:807 libpq/pqcomm.c:817 +#: libpq/pqcomm.c:1630 libpq/pqcomm.c:1675 libpq/pqcomm.c:1715 +#: libpq/pqcomm.c:1759 libpq/pqcomm.c:1798 libpq/pqcomm.c:1837 +#: libpq/pqcomm.c:1873 libpq/pqcomm.c:1912 postmaster/pgstat.c:621 +#: postmaster/pgstat.c:632 +#, c-format +msgid "%s(%s) failed: %m" +msgstr "%s(%s) fehlgeschlagen: %m" + +#: libpq/pqcomm.c:921 #, c-format msgid "there is no client connection" msgstr "es besteht keine Client-Verbindung" -#: libpq/pqcomm.c:965 libpq/pqcomm.c:1061 +#: libpq/pqcomm.c:972 libpq/pqcomm.c:1068 #, c-format msgid "could not receive data from client: %m" msgstr "konnte Daten vom Client nicht empfangen: %m" -#: libpq/pqcomm.c:1206 tcop/postgres.c:4142 +#: libpq/pqcomm.c:1161 tcop/postgres.c:4280 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "Verbindung wird abgebrochen, weil Protokollsynchronisierung verloren wurde" -#: libpq/pqcomm.c:1272 +#: libpq/pqcomm.c:1227 #, c-format msgid "unexpected EOF within message length word" msgstr "unerwartetes EOF im Message-Längenwort" -#: libpq/pqcomm.c:1283 +#: libpq/pqcomm.c:1237 #, c-format msgid "invalid message length" msgstr "ungültige Message-Länge" -#: libpq/pqcomm.c:1305 libpq/pqcomm.c:1318 +#: libpq/pqcomm.c:1259 libpq/pqcomm.c:1272 #, c-format msgid "incomplete message from client" msgstr "unvollständige Message vom Client" -#: libpq/pqcomm.c:1451 +#: libpq/pqcomm.c:1383 #, c-format msgid "could not send data to client: %m" msgstr "konnte Daten nicht an den Client senden: %m" +#: libpq/pqcomm.c:1598 +#, c-format +msgid "%s(%s) failed: error code %d" +msgstr "%s(%s) fehlgeschlagen: Fehlercode %d" + +#: libpq/pqcomm.c:1687 +#, fuzzy, c-format +#| msgid "using recovery command file \"%s\" is not supported" +msgid "setting the keepalive idle time is not supported" +msgstr "Verwendung von Recovery-Befehlsdatei »%s« wird nicht unterstützt" + +#: libpq/pqcomm.c:1771 libpq/pqcomm.c:1846 libpq/pqcomm.c:1921 +#, c-format +msgid "%s(%s) not supported" +msgstr "%s(%s) nicht unterstützt" + +#: libpq/pqcomm.c:1956 +#, fuzzy, c-format +#| msgid "could not set SSL socket: %s" +msgid "could not poll socket: %m" +msgstr "konnte SSL-Socket nicht setzen: %s" + #: libpq/pqformat.c:406 #, c-format msgid "no data left in message" msgstr "keine Daten in Message übrig" #: libpq/pqformat.c:517 libpq/pqformat.c:535 libpq/pqformat.c:556 -#: utils/adt/arrayfuncs.c:1471 utils/adt/rowtypes.c:567 +#: utils/adt/arrayfuncs.c:1492 utils/adt/rowtypes.c:588 #, c-format msgid "insufficient data left in message" msgstr "nicht genug Daten in Message übrig" @@ -14393,12 +14857,12 @@ msgstr "ungültige Zeichenkette in Message" msgid "invalid message format" msgstr "ungültiges Message-Format" -#: main/main.c:246 +#: main/main.c:245 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartup fehlgeschlagen: %d\n" -#: main/main.c:310 +#: main/main.c:309 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -14407,7 +14871,7 @@ msgstr "" "%s ist der PostgreSQL-Server.\n" "\n" -#: main/main.c:311 +#: main/main.c:310 #, c-format msgid "" "Usage:\n" @@ -14418,112 +14882,107 @@ msgstr "" " %s [OPTION]...\n" "\n" -#: main/main.c:312 +#: main/main.c:311 #, c-format msgid "Options:\n" msgstr "Optionen:\n" -#: main/main.c:313 +#: main/main.c:312 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B ZAHL Anzahl der geteilten Puffer\n" -#: main/main.c:314 +#: main/main.c:313 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c NAME=WERT setze Konfigurationsparameter\n" -#: main/main.c:315 +#: main/main.c:314 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C NAME Wert des Konfigurationsparameters ausgeben, dann beenden\n" -#: main/main.c:316 +#: main/main.c:315 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 Debug-Level\n" -#: main/main.c:317 +#: main/main.c:316 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D VERZEICHNIS Datenbankverzeichnis\n" -#: main/main.c:318 +#: main/main.c:317 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e verwende europäisches Datumseingabeformat (DMY)\n" -#: main/main.c:319 +#: main/main.c:318 #, c-format msgid " -F turn fsync off\n" msgstr " -F »fsync« ausschalten\n" -#: main/main.c:320 +#: main/main.c:319 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h HOSTNAME horche auf Hostname oder IP-Adresse\n" -#: main/main.c:321 +#: main/main.c:320 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i ermögliche TCP/IP-Verbindungen\n" -#: main/main.c:322 +#: main/main.c:321 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k VERZEICHNIS Ort der Unix-Domain-Socket\n" -#: main/main.c:324 +#: main/main.c:323 #, c-format msgid " -l enable SSL connections\n" msgstr " -l ermögliche SSL-Verbindungen\n" -#: main/main.c:326 +#: main/main.c:325 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N ZAHL Anzahl der erlaubten Verbindungen\n" -#: main/main.c:327 -#, c-format -msgid " -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n" -msgstr " -o OPTIONEN »OPTIONEN« an jeden Serverprozess weiterreichen (obsolet)\n" - -#: main/main.c:328 +#: main/main.c:326 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT auf dieser Portnummer horchen\n" -#: main/main.c:329 +#: main/main.c:327 #, c-format msgid " -s show statistics after each query\n" msgstr " -s zeige Statistiken nach jeder Anfrage\n" -#: main/main.c:330 +#: main/main.c:328 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S ZAHL setze Speicher für Sortiervorgänge (in kB)\n" -#: main/main.c:331 +#: main/main.c:329 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: main/main.c:332 +#: main/main.c:330 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NAME=WERT setze Konfigurationsparameter\n" -#: main/main.c:333 +#: main/main.c:331 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config zeige Konfigurationsparameter und beende\n" -#: main/main.c:334 +#: main/main.c:332 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: main/main.c:336 +#: main/main.c:334 #, c-format msgid "" "\n" @@ -14532,42 +14991,42 @@ msgstr "" "\n" "Entwickleroptionen:\n" -#: main/main.c:337 +#: main/main.c:335 #, c-format msgid " -f s|i|n|m|h forbid use of some plan types\n" msgstr " -f s|i|n|m|h verbiete Verwendung einiger Plantypen\n" -#: main/main.c:338 +#: main/main.c:336 #, c-format msgid " -n do not reinitialize shared memory after abnormal exit\n" msgstr " -n Shared Memory nach abnormalem Ende nicht neu initialisieren\n" -#: main/main.c:339 +#: main/main.c:337 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O erlaube Änderungen an Systemtabellenstruktur\n" -#: main/main.c:340 +#: main/main.c:338 #, c-format msgid " -P disable system indexes\n" msgstr " -P schalte Systemindexe aus\n" -#: main/main.c:341 +#: main/main.c:339 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex zeige Zeitmessung nach jeder Anfrage\n" -#: main/main.c:342 +#: main/main.c:340 #, c-format msgid " -T send SIGSTOP to all backend processes if one dies\n" msgstr " -T SIGSTOP an alle Backend-Prozesse senden wenn einer stirbt\n" -#: main/main.c:343 +#: main/main.c:341 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr " -W ZAHL warte ZAHL Sekunden, um Debugger starten zu können\n" -#: main/main.c:345 +#: main/main.c:343 #, c-format msgid "" "\n" @@ -14576,39 +15035,39 @@ msgstr "" "\n" "Optionen für Einzelbenutzermodus:\n" -#: main/main.c:346 +#: main/main.c:344 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr " --single wählt den Einzelbenutzermodus (muss erstes Argument sein)\n" -#: main/main.c:347 +#: main/main.c:345 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME Datenbankname (Vorgabe: Benutzername)\n" -#: main/main.c:348 +#: main/main.c:346 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 Debug-Level setzen\n" -#: main/main.c:349 +#: main/main.c:347 #, c-format msgid " -E echo statement before execution\n" msgstr " -E gebe Befehl vor der Ausführung aus\n" -#: main/main.c:350 +#: main/main.c:348 #, c-format msgid " -j do not use newline as interactive query delimiter\n" msgstr "" " -j verwende Zeilenende nicht als Anfrageende im interaktiven\n" " Modus\n" -#: main/main.c:351 main/main.c:356 +#: main/main.c:349 main/main.c:354 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r DATEINAME sende stdout und stderr in genannte Datei\n" -#: main/main.c:353 +#: main/main.c:351 #, c-format msgid "" "\n" @@ -14617,30 +15076,23 @@ msgstr "" "\n" "Optionen für Bootstrap-Modus:\n" -#: main/main.c:354 +#: main/main.c:352 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr " --boot wählt den Bootstrap-Modus (muss erstes Argument sein)\n" -#: main/main.c:355 +#: main/main.c:353 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr " DBNAME Datenbankname (Pflichtangabe im Bootstrap-Modus)\n" -#: main/main.c:357 +#: main/main.c:355 #, c-format msgid " -x NUM internal use\n" msgstr " -x NUM interne Verwendung\n" -#: main/main.c:359 -#, fuzzy, c-format -#| msgid "" -#| "\n" -#| "Please read the documentation for the complete list of run-time\n" -#| "configuration settings and how to set them on the command line or in\n" -#| "the configuration file.\n" -#| "\n" -#| "Report bugs to .\n" +#: main/main.c:357 +#, c-format msgid "" "\n" "Please read the documentation for the complete list of run-time\n" @@ -14654,14 +15106,14 @@ msgstr "" "parameter und Informationen wie man sie auf der Kommandozeile oder in der\n" "Konfiguratonsdatei setzen kann.\n" "\n" -"Berichten Sie Fehler an .\n" +"Berichten Sie Fehler an <%s>.\n" -#: main/main.c:363 +#: main/main.c:361 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: main/main.c:374 +#: main/main.c:372 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -14675,12 +15127,12 @@ msgstr "" "Dokumentation finden Sie weitere Informationen darüber, wie der\n" "Server richtig gestartet wird.\n" -#: main/main.c:391 +#: main/main.c:389 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: reelle und effektive Benutzer-IDs müssen übereinstimmen\n" -#: main/main.c:398 +#: main/main.c:396 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -14705,25 +15157,28 @@ msgstr "erweiterbarer Knotentyp »%s« existiert bereits" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods »%s« wurde nicht registriert" -#: nodes/nodeFuncs.c:122 nodes/nodeFuncs.c:153 parser/parse_coerce.c:2208 -#: parser/parse_coerce.c:2317 parser/parse_coerce.c:2352 -#: parser/parse_expr.c:2207 parser/parse_func.c:701 parser/parse_oper.c:967 -#: utils/fmgr/funcapi.c:528 +#: nodes/makefuncs.c:150 +#, c-format +msgid "relation \"%s\" does not have a composite type" +msgstr "Relation »%s« hat keinen zusammengesetzten Typ" + +#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2472 +#: parser/parse_coerce.c:2584 parser/parse_coerce.c:2630 +#: parser/parse_expr.c:2021 parser/parse_func.c:709 parser/parse_oper.c:883 +#: utils/fmgr/funcapi.c:558 #, c-format msgid "could not find array type for data type %s" msgstr "konnte Arraytyp für Datentyp %s nicht finden" -#: nodes/params.c:359 -#, fuzzy, c-format -#| msgid "invalid URI query parameter: \"%s\"\n" -msgid "extended query \"%s\" with parameters: %s" -msgstr "ungültiger URI-Query-Parameter: »%s«\n" +#: nodes/params.c:417 +#, c-format +msgid "portal \"%s\" with parameters: %s" +msgstr "Portal »%s« mit Parametern: %s" -#: nodes/params.c:362 -#, fuzzy, c-format -#| msgid "invalid URI query parameter: \"%s\"\n" -msgid "extended query with parameters: %s" -msgstr "ungültiger URI-Query-Parameter: »%s«\n" +#: nodes/params.c:420 +#, c-format +msgid "unnamed portal with parameters: %s" +msgstr "unbenanntes Portal mit Parametern: %s" #: optimizer/path/joinrels.c:855 #, c-format @@ -14731,76 +15186,76 @@ msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join con msgstr "FULL JOIN wird nur für Merge- oder Hash-Verbund-fähige Verbundbedingungen unterstützt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1193 +#: optimizer/plan/initsplan.c:1192 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s kann nicht auf die nullbare Seite eines äußeren Verbundes angewendet werden" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1922 parser/analyze.c:1639 parser/analyze.c:1855 -#: parser/analyze.c:2715 +#: optimizer/plan/planner.c:1315 parser/analyze.c:1675 parser/analyze.c:1919 +#: parser/analyze.c:3013 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s ist nicht in UNION/INTERSECT/EXCEPT erlaubt" -#: optimizer/plan/planner.c:2509 optimizer/plan/planner.c:4162 +#: optimizer/plan/planner.c:1978 optimizer/plan/planner.c:3634 #, c-format msgid "could not implement GROUP BY" msgstr "konnte GROUP BY nicht implementieren" -#: optimizer/plan/planner.c:2510 optimizer/plan/planner.c:4163 -#: optimizer/plan/planner.c:4897 optimizer/prep/prepunion.c:1045 +#: optimizer/plan/planner.c:1979 optimizer/plan/planner.c:3635 +#: optimizer/plan/planner.c:4392 optimizer/prep/prepunion.c:1046 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "Einige Datentypen unterstützen nur Hashing, während andere nur Sortieren unterstützen." -#: optimizer/plan/planner.c:4896 +#: optimizer/plan/planner.c:4391 #, c-format msgid "could not implement DISTINCT" msgstr "konnte DISTINCT nicht implementieren" -#: optimizer/plan/planner.c:5744 +#: optimizer/plan/planner.c:5239 #, c-format msgid "could not implement window PARTITION BY" msgstr "konnte PARTITION BY für Fenster nicht implementieren" -#: optimizer/plan/planner.c:5745 +#: optimizer/plan/planner.c:5240 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Fensterpartitionierungsspalten müssen sortierbare Datentypen haben." -#: optimizer/plan/planner.c:5749 +#: optimizer/plan/planner.c:5244 #, c-format msgid "could not implement window ORDER BY" msgstr "konnte ORDER BY für Fenster nicht implementieren" -#: optimizer/plan/planner.c:5750 +#: optimizer/plan/planner.c:5245 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Fenstersortierspalten müssen sortierbare Datentypen haben." -#: optimizer/plan/setrefs.c:451 +#: optimizer/plan/setrefs.c:479 #, c-format msgid "too many range table entries" msgstr "zu viele Range-Table-Einträge" -#: optimizer/prep/prepunion.c:508 +#: optimizer/prep/prepunion.c:509 #, c-format msgid "could not implement recursive UNION" msgstr "konnte rekursive UNION nicht implementieren" -#: optimizer/prep/prepunion.c:509 +#: optimizer/prep/prepunion.c:510 #, c-format msgid "All column datatypes must be hashable." msgstr "Alle Spaltendatentypen müssen hashbar sein." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1044 +#: optimizer/prep/prepunion.c:1045 #, c-format msgid "could not implement %s" msgstr "konnte %s nicht implementieren" -#: optimizer/util/clauses.c:4763 +#: optimizer/util/clauses.c:4670 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "SQL-Funktion »%s« beim Inlining" @@ -14810,229 +15265,244 @@ msgstr "SQL-Funktion »%s« beim Inlining" msgid "cannot access temporary or unlogged relations during recovery" msgstr "während der Wiederherstellung kann nicht auf temporäre oder ungeloggte Tabellen zugegriffen werden" -#: optimizer/util/plancat.c:662 +#: optimizer/util/plancat.c:672 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "Inferenzangaben mit Unique-Index über die gesamte Zeile werden nicht unterstützt" -#: optimizer/util/plancat.c:679 +#: optimizer/util/plancat.c:689 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "Constraint in der ON-CONFLICT-Klausel hat keinen zugehörigen Index" -#: optimizer/util/plancat.c:729 +#: optimizer/util/plancat.c:739 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "ON CONFLICT DO UPDATE nicht unterstützt mit Exclusion-Constraints" -#: optimizer/util/plancat.c:834 +#: optimizer/util/plancat.c:844 #, c-format msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "es gibt keinen Unique-Constraint oder Exclusion-Constraint, der auf die ON-CONFLICT-Angabe passt" -#: parser/analyze.c:705 parser/analyze.c:1401 +#: parser/analyze.c:735 parser/analyze.c:1449 #, c-format msgid "VALUES lists must all be the same length" msgstr "VALUES-Listen müssen alle die gleiche Länge haben" -#: parser/analyze.c:904 +#: parser/analyze.c:936 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT hat mehr Ausdrücke als Zielspalten" -#: parser/analyze.c:922 +#: parser/analyze.c:954 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERT hat mehr Zielspalten als Ausdrücke" -#: parser/analyze.c:926 +#: parser/analyze.c:958 #, c-format msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "Der einzufügende Wert ist ein Zeilenausdruck mit der gleichen Anzahl Spalten wie von INSERT erwartet. Haben Sie versehentlich zu viele Klammern gesetzt?" -#: parser/analyze.c:1210 parser/analyze.c:1612 +#: parser/analyze.c:1257 parser/analyze.c:1648 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO ist hier nicht erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1542 parser/analyze.c:2894 +#: parser/analyze.c:1578 parser/analyze.c:3192 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s kann nicht auf VALUES angewendet werden" -#: parser/analyze.c:1777 +#: parser/analyze.c:1814 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "ungültige ORDER-BY-Klausel mit UNION/INTERSECT/EXCEPT" -#: parser/analyze.c:1778 +#: parser/analyze.c:1815 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "Es können nur Ergebnisspaltennamen verwendet werden, keine Ausdrücke oder Funktionen." -#: parser/analyze.c:1779 +#: parser/analyze.c:1816 #, c-format msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." msgstr "Fügen Sie den Ausdrück/die Funktion jedem SELECT hinzu oder verlegen Sie die UNION in eine FROM-Klausel." -#: parser/analyze.c:1845 +#: parser/analyze.c:1909 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTO ist nur im ersten SELECT von UNION/INTERSECT/EXCEPT erlaubt" -#: parser/analyze.c:1917 +#: parser/analyze.c:1981 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "Teilanweisung von UNION/INTERSECT/EXCEPT kann nicht auf andere Relationen auf der selben Anfrageebene verweisen" -#: parser/analyze.c:2004 +#: parser/analyze.c:2068 #, c-format msgid "each %s query must have the same number of columns" msgstr "jede %s-Anfrage muss die gleiche Anzahl Spalten haben" -#: parser/analyze.c:2426 +#: parser/analyze.c:2468 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNING muss mindestens eine Spalte haben" -#: parser/analyze.c:2467 +#: parser/analyze.c:2571 +#, fuzzy, c-format +#| msgid "query \"%s\" returned %d column" +#| msgid_plural "query \"%s\" returned %d columns" +msgid "assignment source returned %d column" +msgid_plural "assignment source returned %d columns" +msgstr[0] "Anfrage »%s« hat %d Spalte zurückgegeben" +msgstr[1] "Anfrage »%s« hat %d Spalten zurückgegeben" + +#: parser/analyze.c:2632 +#, c-format +msgid "variable \"%s\" is of type %s but expression is of type %s" +msgstr "Variable »%s« hat Typ %s, aber der Ausdruck hat Typ %s" + +#. translator: %s is a SQL keyword +#: parser/analyze.c:2756 parser/analyze.c:2764 #, c-format -msgid "cannot specify both SCROLL and NO SCROLL" -msgstr "SCROLL und NO SCROLL können nicht beide angegeben werden" +msgid "cannot specify both %s and %s" +msgstr "%s und %s können nicht beide angegeben werden" -#: parser/analyze.c:2486 +#: parser/analyze.c:2784 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR darf keine datenmodifizierenden Anweisungen in WITH enthalten" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2494 +#: parser/analyze.c:2792 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s wird nicht unterstützt" -#: parser/analyze.c:2497 +#: parser/analyze.c:2795 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "Haltbare Cursor müssen READ ONLY sein." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2505 +#: parser/analyze.c:2803 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s wird nicht unterstützt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2516 +#: parser/analyze.c:2814 #, c-format -msgid "DECLARE INSENSITIVE CURSOR ... %s is not supported" -msgstr "DECLARE INSENSITIVE CURSOR ... %s wird nicht unterstützt" +msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" +msgstr "DECLARE INSENSITIVE CURSOR ... %s ist nicht gültig" -#: parser/analyze.c:2519 +#: parser/analyze.c:2817 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Insensitive Cursor müssen READ ONLY sein." -#: parser/analyze.c:2585 +#: parser/analyze.c:2883 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "materialisierte Sichten dürfen keine datenmodifizierenden Anweisungen in WITH verwenden" -#: parser/analyze.c:2595 +#: parser/analyze.c:2893 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "materialisierte Sichten dürfen keine temporären Tabellen oder Sichten verwenden" -#: parser/analyze.c:2605 +#: parser/analyze.c:2903 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "materialisierte Sichten können nicht unter Verwendung von gebundenen Parametern definiert werden" -#: parser/analyze.c:2617 +#: parser/analyze.c:2915 #, c-format msgid "materialized views cannot be unlogged" msgstr "materialisierte Sichten können nicht ungeloggt sein" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2722 +#: parser/analyze.c:3020 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s ist nicht mit DISTINCT-Klausel erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2729 +#: parser/analyze.c:3027 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s ist nicht mit GROUP-BY-Klausel erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2736 +#: parser/analyze.c:3034 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s ist nicht mit HAVING-Klausel erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2743 +#: parser/analyze.c:3041 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s ist nicht mit Aggregatfunktionen erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2750 +#: parser/analyze.c:3048 #, c-format msgid "%s is not allowed with window functions" msgstr "%s ist nicht mit Fensterfunktionen erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2757 +#: parser/analyze.c:3055 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "%s ist nicht mit Funktionen mit Ergebnismenge in der Targetliste erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2836 +#: parser/analyze.c:3134 #, c-format msgid "%s must specify unqualified relation names" msgstr "%s muss unqualifizierte Relationsnamen angeben" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2867 +#: parser/analyze.c:3165 #, c-format msgid "%s cannot be applied to a join" msgstr "%s kann nicht auf einen Verbund angewendet werden" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2876 +#: parser/analyze.c:3174 #, c-format msgid "%s cannot be applied to a function" msgstr "%s kann nicht auf eine Funktion angewendet werden" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2885 +#: parser/analyze.c:3183 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s kann nicht auf eine Tabellenfunktion angewendet werden" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2903 +#: parser/analyze.c:3201 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s kann nicht auf eine WITH-Anfrage angewendet werden" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2912 +#: parser/analyze.c:3210 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%s kann nicht auf einen benannten Tupelstore angewendet werden" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2932 +#: parser/analyze.c:3230 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "Relation »%s« in %s nicht in der FROM-Klausel gefunden" -#: parser/parse_agg.c:220 parser/parse_oper.c:222 +#: parser/parse_agg.c:220 parser/parse_oper.c:227 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "konnte keine Sortieroperator für Typ %s ermitteln" @@ -15136,219 +15606,225 @@ msgid "grouping operations are not allowed in index predicates" msgstr "Gruppieroperationen sind in Indexprädikaten nicht erlaubt" #: parser/parse_agg.c:490 +msgid "aggregate functions are not allowed in statistics expressions" +msgstr "Aggregatfunktionen sind in Statistikausdrücken nicht erlaubt" + +#: parser/parse_agg.c:492 +msgid "grouping operations are not allowed in statistics expressions" +msgstr "Gruppieroperationen sind in Statistikausdrücken nicht erlaubt" + +#: parser/parse_agg.c:497 msgid "aggregate functions are not allowed in transform expressions" msgstr "Aggregatfunktionen sind in Umwandlungsausdrücken nicht erlaubt" -#: parser/parse_agg.c:492 +#: parser/parse_agg.c:499 msgid "grouping operations are not allowed in transform expressions" msgstr "Gruppieroperationen sind in Umwandlungsausdrücken nicht erlaubt" -#: parser/parse_agg.c:497 +#: parser/parse_agg.c:504 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "Aggregatfunktionen sind in EXECUTE-Parametern nicht erlaubt" -#: parser/parse_agg.c:499 +#: parser/parse_agg.c:506 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "Gruppieroperationen sind in EXECUTE-Parametern nicht erlaubt" -#: parser/parse_agg.c:504 +#: parser/parse_agg.c:511 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "Aggregatfunktionen sind in der WHEN-Bedingung eines Triggers nicht erlaubt" -#: parser/parse_agg.c:506 +#: parser/parse_agg.c:513 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "Gruppieroperationen sind in der WHEN-Bedingung eines Triggers nicht erlaubt" -#: parser/parse_agg.c:511 -#, fuzzy -#| msgid "aggregate functions are not allowed in partition key expressions" +#: parser/parse_agg.c:518 msgid "aggregate functions are not allowed in partition bound" -msgstr "Aggregatfunktionen sind in Partitionierungsschlüsselausdrücken nicht erlaubt" +msgstr "Aggregatfunktionen sind in Partitionsbegrenzungen nicht erlaubt" -#: parser/parse_agg.c:513 -#, fuzzy -#| msgid "grouping operations are not allowed in partition key expressions" +#: parser/parse_agg.c:520 msgid "grouping operations are not allowed in partition bound" -msgstr "Gruppieroperationen sind in Partitionierungsschlüsselausdrücken nicht erlaubt" +msgstr "Gruppieroperationen sind in Partitionsbegrenzungen nicht erlaubt" -#: parser/parse_agg.c:518 +#: parser/parse_agg.c:525 msgid "aggregate functions are not allowed in partition key expressions" msgstr "Aggregatfunktionen sind in Partitionierungsschlüsselausdrücken nicht erlaubt" -#: parser/parse_agg.c:520 +#: parser/parse_agg.c:527 msgid "grouping operations are not allowed in partition key expressions" msgstr "Gruppieroperationen sind in Partitionierungsschlüsselausdrücken nicht erlaubt" -#: parser/parse_agg.c:526 +#: parser/parse_agg.c:533 msgid "aggregate functions are not allowed in column generation expressions" msgstr "Aggregatfunktionen sind in Spaltengenerierungsausdrücken nicht erlaubt" -#: parser/parse_agg.c:528 +#: parser/parse_agg.c:535 msgid "grouping operations are not allowed in column generation expressions" msgstr "Gruppieroperationen sind in Spaltengenerierungsausdrücken nicht erlaubt" -#: parser/parse_agg.c:534 +#: parser/parse_agg.c:541 msgid "aggregate functions are not allowed in CALL arguments" msgstr "Aggregatfunktionen sind in CALL-Argumenten nicht erlaubt" -#: parser/parse_agg.c:536 +#: parser/parse_agg.c:543 msgid "grouping operations are not allowed in CALL arguments" msgstr "Gruppieroperationen sind in CALL-Argumenten nicht erlaubt" -#: parser/parse_agg.c:542 +#: parser/parse_agg.c:549 msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" msgstr "Aggregatfunktionen sind in COPY-FROM-WHERE-Bedingungen nicht erlaubt" -#: parser/parse_agg.c:544 +#: parser/parse_agg.c:551 msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "Gruppieroperationen sind in COPY-FROM-WHERE-Bedingungen nicht erlaubt" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:567 parser/parse_clause.c:1828 +#: parser/parse_agg.c:578 parser/parse_clause.c:1847 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "Aggregatfunktionen sind in %s nicht erlaubt" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:570 +#: parser/parse_agg.c:581 #, c-format msgid "grouping operations are not allowed in %s" msgstr "Gruppieroperationen sind in %s nicht erlaubt" -#: parser/parse_agg.c:678 +#: parser/parse_agg.c:689 #, c-format msgid "outer-level aggregate cannot contain a lower-level variable in its direct arguments" msgstr "Aggregatfunktion auf äußerer Ebene kann keine Variable einer unteren Ebene in ihren direkten Argumenten haben" -#: parser/parse_agg.c:757 +#: parser/parse_agg.c:768 #, c-format msgid "aggregate function calls cannot contain set-returning function calls" msgstr "Aufrufe von Aggregatfunktionen können keine Aufrufe von Funktionen mit Ergebnismenge enthalten" -#: parser/parse_agg.c:758 parser/parse_expr.c:1845 parser/parse_expr.c:2332 -#: parser/parse_func.c:872 +#: parser/parse_agg.c:769 parser/parse_expr.c:1673 parser/parse_expr.c:2146 +#: parser/parse_func.c:882 #, c-format msgid "You might be able to move the set-returning function into a LATERAL FROM item." msgstr "Sie können möglicherweise die Funktion mit Ergebnismenge in ein LATERAL-FROM-Element verschieben." -#: parser/parse_agg.c:763 +#: parser/parse_agg.c:774 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "Aufrufe von Aggregatfunktionen können keine Aufrufe von Fensterfunktionen enthalten" -#: parser/parse_agg.c:842 +#: parser/parse_agg.c:853 msgid "window functions are not allowed in JOIN conditions" msgstr "Fensterfunktionen sind in JOIN-Bedingungen nicht erlaubt" -#: parser/parse_agg.c:849 +#: parser/parse_agg.c:860 msgid "window functions are not allowed in functions in FROM" msgstr "Fensterfunktionen sind in Funktionen in FROM nicht erlaubt" -#: parser/parse_agg.c:855 +#: parser/parse_agg.c:866 msgid "window functions are not allowed in policy expressions" msgstr "Fensterfunktionen sind in Policy-Ausdrücken nicht erlaubt" -#: parser/parse_agg.c:868 +#: parser/parse_agg.c:879 msgid "window functions are not allowed in window definitions" msgstr "Fensterfunktionen sind in Fensterdefinitionen nicht erlaubt" -#: parser/parse_agg.c:900 +#: parser/parse_agg.c:911 msgid "window functions are not allowed in check constraints" msgstr "Fensterfunktionen sind in Check-Constraints nicht erlaubt" -#: parser/parse_agg.c:904 +#: parser/parse_agg.c:915 msgid "window functions are not allowed in DEFAULT expressions" msgstr "Fensterfunktionen sind in DEFAULT-Ausdrücken nicht erlaubt" -#: parser/parse_agg.c:907 +#: parser/parse_agg.c:918 msgid "window functions are not allowed in index expressions" msgstr "Fensterfunktionen sind in Indexausdrücken nicht erlaubt" -#: parser/parse_agg.c:910 +#: parser/parse_agg.c:921 +msgid "window functions are not allowed in statistics expressions" +msgstr "Fensterfunktionen sind in Statistikausdrücken nicht erlaubt" + +#: parser/parse_agg.c:924 msgid "window functions are not allowed in index predicates" msgstr "Fensterfunktionen sind in Indexprädikaten nicht erlaubt" -#: parser/parse_agg.c:913 +#: parser/parse_agg.c:927 msgid "window functions are not allowed in transform expressions" msgstr "Fensterfunktionen sind in Umwandlungsausdrücken nicht erlaubt" -#: parser/parse_agg.c:916 +#: parser/parse_agg.c:930 msgid "window functions are not allowed in EXECUTE parameters" msgstr "Fensterfunktionen sind in EXECUTE-Parametern nicht erlaubt" -#: parser/parse_agg.c:919 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "Fensterfunktionen sind in der WHEN-Bedingung eines Triggers nicht erlaubt" -#: parser/parse_agg.c:922 -#, fuzzy -#| msgid "window functions are not allowed in partition key expressions" +#: parser/parse_agg.c:936 msgid "window functions are not allowed in partition bound" -msgstr "Fensterfunktionen sind in Partitionierungsschlüsselausdrücken nicht erlaubt" +msgstr "Fensterfunktionen sind in Partitionsbegrenzungen nicht erlaubt" -#: parser/parse_agg.c:925 +#: parser/parse_agg.c:939 msgid "window functions are not allowed in partition key expressions" msgstr "Fensterfunktionen sind in Partitionierungsschlüsselausdrücken nicht erlaubt" -#: parser/parse_agg.c:928 +#: parser/parse_agg.c:942 msgid "window functions are not allowed in CALL arguments" msgstr "Fensterfunktionen sind in CALL-Argumenten nicht erlaubt" -#: parser/parse_agg.c:931 +#: parser/parse_agg.c:945 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "Fensterfunktionen sind in COPY-FROM-WHERE-Bedingungen nicht erlaubt" -#: parser/parse_agg.c:934 +#: parser/parse_agg.c:948 msgid "window functions are not allowed in column generation expressions" msgstr "Fensterfunktionen sind in Spaltengenerierungsausdrücken nicht erlaubt" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:954 parser/parse_clause.c:1837 +#: parser/parse_agg.c:971 parser/parse_clause.c:1856 #, c-format msgid "window functions are not allowed in %s" msgstr "Fensterfunktionen sind in %s nicht erlaubt" -#: parser/parse_agg.c:988 parser/parse_clause.c:2671 +#: parser/parse_agg.c:1005 parser/parse_clause.c:2690 #, c-format msgid "window \"%s\" does not exist" msgstr "Fenster »%s« existiert nicht" -#: parser/parse_agg.c:1072 +#: parser/parse_agg.c:1089 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "zu viele Grouping-Sets vorhanden (maximal 4096)" -#: parser/parse_agg.c:1212 +#: parser/parse_agg.c:1229 #, c-format msgid "aggregate functions are not allowed in a recursive query's recursive term" msgstr "Aggregatfunktionen sind nicht im rekursiven Ausdruck einer rekursiven Anfrage erlaubt" -#: parser/parse_agg.c:1405 +#: parser/parse_agg.c:1422 #, c-format msgid "column \"%s.%s\" must appear in the GROUP BY clause or be used in an aggregate function" msgstr "Spalte »%s.%s« muss in der GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden" -#: parser/parse_agg.c:1408 +#: parser/parse_agg.c:1425 #, c-format msgid "Direct arguments of an ordered-set aggregate must use only grouped columns." msgstr "Direkte Argumente einer Ordered-Set-Aggregatfunktion dürfen nur gruppierte Spalten verwenden." -#: parser/parse_agg.c:1413 +#: parser/parse_agg.c:1430 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "Unteranfrage verwendet nicht gruppierte Spalte »%s.%s« aus äußerer Anfrage" -#: parser/parse_agg.c:1577 +#: parser/parse_agg.c:1594 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "Argumente von GROUPING müssen Gruppierausdrücke der zugehörigen Anfrageebene sein" -#: parser/parse_clause.c:191 +#: parser/parse_clause.c:190 #, c-format msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "Relation »%s« kann nicht das Ziel einer datenverändernden Anweisung sein" -#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2424 +#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2438 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "Funktionen mit Ergebnismenge müssen auf oberster Ebene von FROM erscheinen" @@ -15430,1095 +15906,1187 @@ msgstr "Tablesample-Methode %s unterstützt REPEATABLE nicht" msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "TABLESAMPLE-Klausel kann nur auf Tabellen und materialisierte Sichten angewendet werden" -#: parser/parse_clause.c:1318 +#: parser/parse_clause.c:1325 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "Spaltenname »%s« erscheint mehrmals in der USING-Klausel" -#: parser/parse_clause.c:1333 +#: parser/parse_clause.c:1340 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "gemeinsamer Spaltenname »%s« erscheint mehrmals in der linken Tabelle" -#: parser/parse_clause.c:1342 +#: parser/parse_clause.c:1349 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "Spalte »%s« aus der USING-Klausel existiert nicht in der linken Tabelle" -#: parser/parse_clause.c:1357 +#: parser/parse_clause.c:1364 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "gemeinsamer Spaltenname »%s« erscheint mehrmals in der rechten Tabelle" -#: parser/parse_clause.c:1366 +#: parser/parse_clause.c:1373 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "Spalte »%s« aus der USING-Klausel existiert nicht in der rechten Tabelle" -#: parser/parse_clause.c:1447 +#: parser/parse_clause.c:1452 #, c-format msgid "column alias list for \"%s\" has too many entries" msgstr "Spaltenaliasliste für »%s« hat zu viele Einträge" -#: parser/parse_clause.c:1773 +#: parser/parse_clause.c:1792 #, c-format -msgid "row count cannot be NULL in FETCH FIRST ... WITH TIES clause" -msgstr "" +msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" +msgstr "Zeilenzahl in FETCH FIRST ... WITH TIES darf nicht NULL sein" #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1798 +#: parser/parse_clause.c:1817 #, c-format msgid "argument of %s must not contain variables" msgstr "Argument von %s darf keine Variablen enthalten" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1963 +#: parser/parse_clause.c:1982 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "%s »%s« ist nicht eindeutig" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1992 +#: parser/parse_clause.c:2011 #, c-format msgid "non-integer constant in %s" msgstr "Konstante in %s ist keine ganze Zahl" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2014 +#: parser/parse_clause.c:2033 #, c-format msgid "%s position %d is not in select list" msgstr "%s Position %d ist nicht in der Select-Liste" -#: parser/parse_clause.c:2453 +#: parser/parse_clause.c:2472 #, c-format msgid "CUBE is limited to 12 elements" msgstr "CUBE ist auf 12 Elemente begrenzt" -#: parser/parse_clause.c:2659 +#: parser/parse_clause.c:2678 #, c-format msgid "window \"%s\" is already defined" msgstr "Fenster »%s« ist bereits definiert" -#: parser/parse_clause.c:2720 +#: parser/parse_clause.c:2739 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "PARTITION-BY-Klausel von Fenster »%s« kann nicht aufgehoben werden" -#: parser/parse_clause.c:2732 +#: parser/parse_clause.c:2751 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "ORDER-BY-Klausel von Fenster »%s« kann nicht aufgehoben werden" -#: parser/parse_clause.c:2762 parser/parse_clause.c:2768 +#: parser/parse_clause.c:2781 parser/parse_clause.c:2787 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "kann Fenster »%s« nicht kopieren, weil es eine Frame-Klausel hat" -#: parser/parse_clause.c:2770 +#: parser/parse_clause.c:2789 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Lassen Sie die Klammern in dieser OVER-Klausel weg." -#: parser/parse_clause.c:2790 +#: parser/parse_clause.c:2809 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" -msgstr "" +msgstr "RANGE mit Offset PRECEDING/FOLLOWING benötigt genau eine ORDER-BY-Spalte" -#: parser/parse_clause.c:2813 +#: parser/parse_clause.c:2832 #, c-format msgid "GROUPS mode requires an ORDER BY clause" msgstr "GROUPS-Modus erfordert eine ORDER-BY-Klausel" -#: parser/parse_clause.c:2883 +#: parser/parse_clause.c:2902 #, c-format msgid "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list" msgstr "in einer Aggregatfunktion mit DISTINCT müssen ORDER-BY-Ausdrücke in der Argumentliste erscheinen" -#: parser/parse_clause.c:2884 +#: parser/parse_clause.c:2903 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "bei SELECT DISTINCT müssen ORDER-BY-Ausdrücke in der Select-Liste erscheinen" -#: parser/parse_clause.c:2916 +#: parser/parse_clause.c:2935 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "eine Aggregatfunktion mit DISTINCT muss mindestens ein Argument haben" -#: parser/parse_clause.c:2917 +#: parser/parse_clause.c:2936 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCT muss mindestens eine Spalte haben" -#: parser/parse_clause.c:2983 parser/parse_clause.c:3015 +#: parser/parse_clause.c:3002 parser/parse_clause.c:3034 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "Ausdrücke in SELECT DISTINCT ON müssen mit den ersten Ausdrücken in ORDER BY übereinstimmen" -#: parser/parse_clause.c:3093 +#: parser/parse_clause.c:3112 #, c-format msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "ASC/DESC ist in der ON-CONFLICT-Klausel nicht erlaubt" -#: parser/parse_clause.c:3099 +#: parser/parse_clause.c:3118 #, c-format msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "NULLS FIRST/LAST ist in der ON-CONFLICT-Klausel nicht erlaubt" -#: parser/parse_clause.c:3178 +#: parser/parse_clause.c:3197 #, c-format msgid "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "ON CONFLICT DO UPDATE benötigt Inferenzangabe oder Constraint-Namen" -#: parser/parse_clause.c:3179 +#: parser/parse_clause.c:3198 #, c-format msgid "For example, ON CONFLICT (column_name)." msgstr "Zum Bespiel ON CONFLICT (Spaltenname)." -#: parser/parse_clause.c:3190 +#: parser/parse_clause.c:3209 #, c-format msgid "ON CONFLICT is not supported with system catalog tables" msgstr "ON CONFLICT wird nicht mit Systemkatalogtabellen unterstützt" -#: parser/parse_clause.c:3198 +#: parser/parse_clause.c:3217 #, c-format msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" msgstr "ON CONFLICT wird nicht unterstützt mit Tabelle »%s«, die als Katalogtabelle verwendet wird" -#: parser/parse_clause.c:3341 +#: parser/parse_clause.c:3347 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "Operator %s ist kein gültiger Sortieroperator" -#: parser/parse_clause.c:3343 +#: parser/parse_clause.c:3349 #, c-format msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "Sortieroperatoren müssen die Mitglieder »<« oder »>« einer »btree«-Operatorfamilie sein." -#: parser/parse_clause.c:3654 +#: parser/parse_clause.c:3660 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" -msgstr "" +msgstr "RANGE mit Offset PRECEDING/FOLLOWING wird für Spaltentyp %s nicht unterstützt" -#: parser/parse_clause.c:3660 +#: parser/parse_clause.c:3666 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s" -msgstr "" +msgstr "RANGE mit Offset PRECEDING/FOLLOWING wird für Spaltentyp %s und Offset-Typ %s nicht unterstützt" -#: parser/parse_clause.c:3663 +#: parser/parse_clause.c:3669 #, c-format msgid "Cast the offset value to an appropriate type." -msgstr "" +msgstr "Wandeln Sie den Offset-Wert in einen passenden Typ um." -#: parser/parse_clause.c:3668 +#: parser/parse_clause.c:3674 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s" -msgstr "" +msgstr "RANGE mit Offset PRECEDING/FOLLOWING hat mehrere Interpretationen für Spaltentyp %s und Offset-Typ %s" -#: parser/parse_clause.c:3671 +#: parser/parse_clause.c:3677 #, c-format msgid "Cast the offset value to the exact intended type." -msgstr "" +msgstr "Wandeln Sie den Offset-Wert in den genauen beabsichtigten Typ um." -#: parser/parse_coerce.c:1024 parser/parse_coerce.c:1062 -#: parser/parse_coerce.c:1080 parser/parse_coerce.c:1095 -#: parser/parse_expr.c:2241 parser/parse_expr.c:2819 parser/parse_target.c:967 +#: parser/parse_coerce.c:1034 parser/parse_coerce.c:1072 +#: parser/parse_coerce.c:1090 parser/parse_coerce.c:1105 +#: parser/parse_expr.c:2055 parser/parse_expr.c:2649 parser/parse_target.c:995 #, c-format msgid "cannot cast type %s to %s" msgstr "kann Typ %s nicht in Typ %s umwandeln" -#: parser/parse_coerce.c:1065 +#: parser/parse_coerce.c:1075 #, c-format msgid "Input has too few columns." msgstr "Eingabe hat zu wenige Spalten." -#: parser/parse_coerce.c:1083 +#: parser/parse_coerce.c:1093 #, c-format msgid "Cannot cast type %s to %s in column %d." msgstr "Kann in Spalte %3$d Typ %1$s nicht in Typ %2$s umwandeln." -#: parser/parse_coerce.c:1098 +#: parser/parse_coerce.c:1108 #, c-format msgid "Input has too many columns." msgstr "Eingabe hat zu viele Spalten." #. translator: first %s is name of a SQL construct, eg WHERE #. translator: first %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1153 parser/parse_coerce.c:1201 +#: parser/parse_coerce.c:1163 parser/parse_coerce.c:1211 #, c-format msgid "argument of %s must be type %s, not type %s" msgstr "Argument von %s muss Typ %s haben, nicht Typ %s" #. translator: %s is name of a SQL construct, eg WHERE #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1164 parser/parse_coerce.c:1213 +#: parser/parse_coerce.c:1174 parser/parse_coerce.c:1223 #, c-format msgid "argument of %s must not return a set" msgstr "Argument von %s darf keine Ergebnismenge zurückgeben" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1353 +#: parser/parse_coerce.c:1363 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "%s-Typen %s und %s passen nicht zusammen" -#: parser/parse_coerce.c:1465 -#, fuzzy, c-format -#| msgid "%s types %s and %s cannot be matched" +#: parser/parse_coerce.c:1475 +#, c-format msgid "argument types %s and %s cannot be matched" -msgstr "%s-Typen %s und %s passen nicht zusammen" +msgstr "Argumenttypen %s und %s passen nicht zusammen" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1517 +#: parser/parse_coerce.c:1527 #, c-format msgid "%s could not convert type %s to %s" msgstr "%s konnte Typ %s nicht in %s umwandeln" -#: parser/parse_coerce.c:1934 +#: parser/parse_coerce.c:2089 #, c-format msgid "arguments declared \"anyelement\" are not all alike" msgstr "als »anyelement« deklariert Argumente sind nicht alle gleich" -#: parser/parse_coerce.c:1954 +#: parser/parse_coerce.c:2109 #, c-format msgid "arguments declared \"anyarray\" are not all alike" msgstr "als »anyarray« deklarierte Argumente sind nicht alle gleich" -#: parser/parse_coerce.c:1974 +#: parser/parse_coerce.c:2129 #, c-format msgid "arguments declared \"anyrange\" are not all alike" msgstr "als »anyrange« deklarierte Argumente sind nicht alle gleich" -#: parser/parse_coerce.c:2008 parser/parse_coerce.c:2088 -#: utils/fmgr/funcapi.c:487 +#: parser/parse_coerce.c:2149 +#, c-format +msgid "arguments declared \"anymultirange\" are not all alike" +msgstr "als »anymultirange« deklarierte Argumente sind nicht alle gleich" + +#: parser/parse_coerce.c:2183 parser/parse_coerce.c:2297 +#: utils/fmgr/funcapi.c:489 #, c-format msgid "argument declared %s is not an array but type %s" msgstr "als %s deklariertes Argument ist kein Array sondern Typ %s" -#: parser/parse_coerce.c:2029 -#, fuzzy, c-format -#| msgid "arguments declared \"anyrange\" are not all alike" +#: parser/parse_coerce.c:2204 +#, c-format msgid "arguments declared \"anycompatiblerange\" are not all alike" -msgstr "als »anyrange« deklarierte Argumente sind nicht alle gleich" +msgstr "als »anycompatiblerange« deklarierte Argumente sind nicht alle gleich" -#: parser/parse_coerce.c:2041 parser/parse_coerce.c:2122 -#: utils/fmgr/funcapi.c:501 +#: parser/parse_coerce.c:2216 parser/parse_coerce.c:2329 +#: utils/fmgr/funcapi.c:503 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "als %s deklariertes Argument ist kein Bereichstyp sondern Typ %s" -#: parser/parse_coerce.c:2079 -#, fuzzy, c-format -#| msgid "cannot determine type of empty array" +#: parser/parse_coerce.c:2237 +#, c-format +msgid "arguments declared \"anycompatiblemultirange\" are not all alike" +msgstr "als »anycompatiblemultirange« deklarierte Argumente sind nicht alle gleich" + +#: parser/parse_coerce.c:2250 parser/parse_coerce.c:2363 +#: utils/fmgr/funcapi.c:521 utils/fmgr/funcapi.c:586 +#, c-format +msgid "argument declared %s is not a multirange type but type %s" +msgstr "als %s deklariertes Argument ist kein Multirange-Typ sondern Typ %s" + +#: parser/parse_coerce.c:2288 +#, c-format msgid "cannot determine element type of \"anyarray\" argument" -msgstr "kann Typ eines leeren Arrays nicht bestimmen" +msgstr "kann Elementtyp des Arguments mit Typ »anyarray« nicht bestimmen" -#: parser/parse_coerce.c:2105 parser/parse_coerce.c:2139 +#: parser/parse_coerce.c:2314 parser/parse_coerce.c:2346 +#: parser/parse_coerce.c:2380 parser/parse_coerce.c:2400 #, c-format msgid "argument declared %s is not consistent with argument declared %s" msgstr "als %s deklariertes Argument ist nicht mit als %s deklariertem Argument konsistent" -#: parser/parse_coerce.c:2163 +#: parser/parse_coerce.c:2427 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "konnte polymorphischen Typ nicht bestimmen, weil Eingabe Typ %s hat" -#: parser/parse_coerce.c:2177 +#: parser/parse_coerce.c:2441 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "mit »anynonarray« gepaarter Typ ist ein Array-Typ: %s" -#: parser/parse_coerce.c:2187 +#: parser/parse_coerce.c:2451 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "mit »anyenum« gepaarter Typ ist kein Enum-Typ: %s" -#: parser/parse_coerce.c:2218 parser/parse_coerce.c:2267 -#: parser/parse_coerce.c:2329 parser/parse_coerce.c:2365 -#, fuzzy, c-format -#| msgid "could not determine polymorphic type because input has type %s" +#: parser/parse_coerce.c:2482 parser/parse_coerce.c:2532 +#: parser/parse_coerce.c:2596 parser/parse_coerce.c:2643 +#, c-format msgid "could not determine polymorphic type %s because input has type %s" -msgstr "konnte polymorphischen Typ nicht bestimmen, weil Eingabe Typ %s hat" +msgstr "konnte polymorphischen Typ %s nicht bestimmen, weil Eingabe Typ %s hat" + +#: parser/parse_coerce.c:2492 +#, c-format +msgid "anycompatiblerange type %s does not match anycompatible type %s" +msgstr "anycompatiblerange-Typ %s stimmt nicht mit anycompatible-Typ %s überein" + +#: parser/parse_coerce.c:2506 +#, c-format +msgid "type matched to anycompatiblenonarray is an array type: %s" +msgstr "mit »anycompatiblenonarray« gepaarter Typ ist ein Array-Typ: %s" -#: parser/parse_coerce.c:2228 +#: parser/parse_coerce.c:2607 parser/parse_coerce.c:2658 +#: utils/fmgr/funcapi.c:614 #, fuzzy, c-format -#| msgid "Attribute \"%s\" of type %s does not match corresponding attribute of type %s." -msgid "anycompatiblerange type %s does not match anycompatible type %s" -msgstr "Attribut »%s« von Typ %s stimmt nicht mit dem entsprechenden Attribut von Typ %s überein." +#| msgid "could not find array type for data type %s" +msgid "could not find multirange type for data type %s" +msgstr "konnte Arraytyp für Datentyp %s nicht finden" -#: parser/parse_coerce.c:2242 +#: parser/parse_coerce.c:2739 #, fuzzy, c-format -#| msgid "type matched to anynonarray is an array type: %s" -msgid "type matched to anycompatiblenonarray is an array type: %s" -msgstr "mit »anynonarray« gepaarter Typ ist ein Array-Typ: %s" +#| msgid "A result of type %s requires at least one input of type %s." +msgid "A result of type %s requires at least one input of type anyrange or anymultirange." +msgstr "Ein Ergebnis mit Typ %s benötigt mindestens eine Eingabe mit Typ %s." -#: parser/parse_coerce.c:2433 +#: parser/parse_coerce.c:2756 #, fuzzy, c-format -#| msgid "Attribute \"%s\" of type %s does not exist in type %s." -msgid "A result of type %s requires at least one input of type %s." -msgstr "Attribut »%s« von Typ %s existiert nicht in Typ %s." +#| msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, or anycompatiblerange." +msgid "A result of type %s requires at least one input of type anycompatiblerange or anycompatiblemultirange." +msgstr "Ein Ergebnis mit Typ %s benötigt mindestens eine Eingabe mit Typ anycompatible, anycompatiblearray, anycompatiblenonarray oder anycompatiblerange." -#: parser/parse_coerce.c:2445 -#, c-format -msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, or anyrange." -msgstr "" +#: parser/parse_coerce.c:2768 +#, fuzzy, c-format +#| msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, or anyrange." +msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, anyrange, or anymultirange." +msgstr "Ein Ergebnis mit Typ %s benötigt mindestens eine Eingabe mit Typ anyelement, anyarray, anynonarray, anyenum oder anyrange." -#: parser/parse_coerce.c:2457 +#: parser/parse_coerce.c:2780 #, c-format msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, or anycompatiblerange." -msgstr "" +msgstr "Ein Ergebnis mit Typ %s benötigt mindestens eine Eingabe mit Typ anycompatible, anycompatiblearray, anycompatiblenonarray oder anycompatiblerange." -#: parser/parse_coerce.c:2487 +#: parser/parse_coerce.c:2810 msgid "A result of type internal requires at least one input of type internal." -msgstr "" +msgstr "Ein Ergebnis mit Typ internal benötigt mindestens eine Eingabe mit Typ internal." #: parser/parse_collate.c:228 parser/parse_collate.c:475 -#: parser/parse_collate.c:981 +#: parser/parse_collate.c:1004 #, c-format msgid "collation mismatch between implicit collations \"%s\" and \"%s\"" msgstr "implizite Sortierfolgen »%s« und »%s« stimmen nicht überein" #: parser/parse_collate.c:231 parser/parse_collate.c:478 -#: parser/parse_collate.c:984 +#: parser/parse_collate.c:1007 #, c-format msgid "You can choose the collation by applying the COLLATE clause to one or both expressions." msgstr "Sie können die Sortierfolge auswählen, indem Sie die COLLATE-Klausel auf einen oder beide Ausdrücke anwenden." -#: parser/parse_collate.c:831 +#: parser/parse_collate.c:854 #, c-format msgid "collation mismatch between explicit collations \"%s\" and \"%s\"" msgstr "explizite Sortierfolgen »%s« und »%s« stimmen nicht überein" -#: parser/parse_cte.c:42 +#: parser/parse_cte.c:46 #, c-format msgid "recursive reference to query \"%s\" must not appear within its non-recursive term" msgstr "rekursiver Verweis auf Anfrage »%s« darf nicht in ihrem nicht-rekursiven Teilausdruck erscheinen" -#: parser/parse_cte.c:44 +#: parser/parse_cte.c:48 #, c-format msgid "recursive reference to query \"%s\" must not appear within a subquery" msgstr "rekursiver Verweis auf Anfrage »%s« darf nicht in einer Unteranfrage erscheinen" -#: parser/parse_cte.c:46 +#: parser/parse_cte.c:50 #, c-format msgid "recursive reference to query \"%s\" must not appear within an outer join" msgstr "rekursiver Verweis auf Anfrage »%s« darf nicht in einem äußeren Verbund erscheinen" -#: parser/parse_cte.c:48 +#: parser/parse_cte.c:52 #, c-format msgid "recursive reference to query \"%s\" must not appear within INTERSECT" msgstr "rekursiver Verweis auf Anfrage »%s« darf nicht in INTERSECT erscheinen" -#: parser/parse_cte.c:50 +#: parser/parse_cte.c:54 #, c-format msgid "recursive reference to query \"%s\" must not appear within EXCEPT" msgstr "rekursiver Verweis auf Anfrage »%s« darf nicht in EXCEPT erscheinen" -#: parser/parse_cte.c:132 +#: parser/parse_cte.c:136 #, c-format msgid "WITH query name \"%s\" specified more than once" msgstr "WIHT-Anfragename »%s« mehrmals angegeben" -#: parser/parse_cte.c:264 +#: parser/parse_cte.c:268 #, c-format msgid "WITH clause containing a data-modifying statement must be at the top level" msgstr "WITH-Klausel mit datenmodifizierender Anweisung muss auf der obersten Ebene sein" -#: parser/parse_cte.c:313 +#: parser/parse_cte.c:317 #, c-format msgid "recursive query \"%s\" column %d has type %s in non-recursive term but type %s overall" msgstr "Spalte %2$d in rekursiver Anfrage »%1$s« hat Typ %3$s im nicht-rekursiven Teilausdruck aber Typ %4$s insgesamt" -#: parser/parse_cte.c:319 +#: parser/parse_cte.c:323 #, c-format msgid "Cast the output of the non-recursive term to the correct type." msgstr "Wandeln Sie die Ausgabe des nicht-rekursiven Teilausdrucks in den korrekten Typ um." -#: parser/parse_cte.c:324 +#: parser/parse_cte.c:328 #, c-format msgid "recursive query \"%s\" column %d has collation \"%s\" in non-recursive term but collation \"%s\" overall" msgstr "Spalte %2$d in rekursiver Anfrage »%1$s« hat Sortierfolge %3$s im nicht-rekursiven Teilausdruck aber Sortierfolge %4$s insgesamt" -#: parser/parse_cte.c:328 +#: parser/parse_cte.c:332 #, c-format msgid "Use the COLLATE clause to set the collation of the non-recursive term." msgstr "Verwenden Sie die COLLATE-Klausel, um die Sortierfolge des nicht-rekursiven Teilsausdrucks zu setzen." -#: parser/parse_cte.c:418 +#: parser/parse_cte.c:350 +#, c-format +msgid "WITH query is not recursive" +msgstr "WITH-Anfrage ist nicht rekursiv" + +#: parser/parse_cte.c:381 +#, c-format +msgid "with a SEARCH or CYCLE clause, the left side of the UNION must be a SELECT" +msgstr "mit einer SEARCH- oder CYCLE-Klausel muss die linke Seite von UNION ein SELECT sein" + +#: parser/parse_cte.c:386 +#, c-format +msgid "with a SEARCH or CYCLE clause, the right side of the UNION must be a SELECT" +msgstr "mit einer SEARCH- oder CYCLE-Klausel muss mit rechte Seite von UNION ein SELECT sein" + +#: parser/parse_cte.c:401 +#, c-format +msgid "search column \"%s\" not in WITH query column list" +msgstr "Search-Spalte »%s« ist nicht in der Spaltenliste der WITH-Anfrage" + +#: parser/parse_cte.c:408 +#, c-format +msgid "search column \"%s\" specified more than once" +msgstr "Search-Spalte »%s« mehrmals angegeben" + +#: parser/parse_cte.c:417 +#, c-format +msgid "search sequence column name \"%s\" already used in WITH query column list" +msgstr "Search-Sequenz-Spaltenname »%s« schon in Spaltenliste der WITH-Anfrage verwendet" + +#: parser/parse_cte.c:436 +#, c-format +msgid "cycle column \"%s\" not in WITH query column list" +msgstr "Cycle-Spalte »%s« ist nicht in der Spaltenliste der WITH-Anfrage" + +#: parser/parse_cte.c:443 +#, fuzzy, c-format +#| msgid "column \"%s\" specified more than once" +msgid "cycle column \"%s\" specified more than once" +msgstr "Spalte »%s« mehrmals angegeben" + +#: parser/parse_cte.c:452 +#, c-format +msgid "cycle mark column name \"%s\" already used in WITH query column list" +msgstr "Zyklusmarkierungsspaltenname »%s« schon in Spaltenliste der WITH-Anfrage verwendet" + +#: parser/parse_cte.c:464 +#, c-format +msgid "cycle path column name \"%s\" already used in WITH query column list" +msgstr "Zykluspfadspaltenname »%s« schon in Spaltenliste der WITH-Anfrage verwendet" + +#: parser/parse_cte.c:472 +#, c-format +msgid "cycle mark column name and cycle path column name are the same" +msgstr "Zyklusmarkierungsspaltenname und Zykluspfadspaltenname sind gleich" + +#: parser/parse_cte.c:508 +#, c-format +msgid "could not identify an inequality operator for type %s" +msgstr "konnte keinen Ist-Ungleich-Operator für Typ %s ermitteln" + +#: parser/parse_cte.c:520 +#, c-format +msgid "search sequence column name and cycle mark column name are the same" +msgstr "Search-Sequenz-Spaltenname und Zyklusmarkierungsspaltenname sind gleich" + +#: parser/parse_cte.c:527 +#, c-format +msgid "search_sequence column name and cycle path column name are the same" +msgstr "" + +#: parser/parse_cte.c:611 #, c-format msgid "WITH query \"%s\" has %d columns available but %d columns specified" msgstr "WITH-Anfrage »%s« hat %d Spalten verfügbar, aber %d Spalten wurden angegeben" -#: parser/parse_cte.c:598 +#: parser/parse_cte.c:791 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "gegenseitige Rekursion zwischen WITH-Elementen ist nicht implementiert" -#: parser/parse_cte.c:650 +#: parser/parse_cte.c:843 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "rekursive Anfrage »%s« darf keine datenmodifizierenden Anweisungen enthalten" -#: parser/parse_cte.c:658 +#: parser/parse_cte.c:851 #, c-format msgid "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] recursive-term" msgstr "rekursive Anfrage »%s« hat nicht die Form nicht-rekursiver-Ausdruck UNION [ALL] rekursiver-Ausdruck" -#: parser/parse_cte.c:702 +#: parser/parse_cte.c:895 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "ORDER BY in einer rekursiven Anfrage ist nicht implementiert" -#: parser/parse_cte.c:708 +#: parser/parse_cte.c:901 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "OFFSET in einer rekursiven Anfrage ist nicht implementiert" -#: parser/parse_cte.c:714 +#: parser/parse_cte.c:907 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "LIMIT in einer rekursiven Anfrage ist nicht implementiert" -#: parser/parse_cte.c:720 +#: parser/parse_cte.c:913 #, c-format msgid "FOR UPDATE/SHARE in a recursive query is not implemented" msgstr "FOR UPDATE/SHARE in einer rekursiven Anfrage ist nicht implementiert" -#: parser/parse_cte.c:777 +#: parser/parse_cte.c:970 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "rekursiver Verweis auf Anfrage »%s« darf nicht mehrmals erscheinen" -#: parser/parse_expr.c:349 +#: parser/parse_expr.c:287 #, c-format msgid "DEFAULT is not allowed in this context" msgstr "DEFAULT ist in diesem Zusammenhang nicht erlaubt" -#: parser/parse_expr.c:402 parser/parse_relation.c:3506 -#: parser/parse_relation.c:3526 +#: parser/parse_expr.c:340 parser/parse_relation.c:3592 +#: parser/parse_relation.c:3612 #, c-format msgid "column %s.%s does not exist" msgstr "Spalte %s.%s existiert nicht" -#: parser/parse_expr.c:414 +#: parser/parse_expr.c:352 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "Spalte »%s« nicht gefunden im Datentyp %s" -#: parser/parse_expr.c:420 +#: parser/parse_expr.c:358 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "konnte Spalte »%s« im Record-Datentyp nicht identifizieren" -#: parser/parse_expr.c:426 +#: parser/parse_expr.c:364 #, c-format msgid "column notation .%s applied to type %s, which is not a composite type" msgstr "Spaltenschreibweise .%s mit Typ %s verwendet, der kein zusammengesetzter Typ ist" -#: parser/parse_expr.c:457 parser/parse_target.c:729 +#: parser/parse_expr.c:395 parser/parse_target.c:740 #, c-format msgid "row expansion via \"*\" is not supported here" msgstr "Zeilenexpansion mit »*« wird hier nicht unterstützt" -#: parser/parse_expr.c:578 +#: parser/parse_expr.c:516 msgid "cannot use column reference in DEFAULT expression" msgstr "Spaltenverweise können nicht in DEFAULT-Ausdrücken verwendet werden" -#: parser/parse_expr.c:581 -#, fuzzy -#| msgid "cannot drop column referenced in partition key expression" +#: parser/parse_expr.c:519 msgid "cannot use column reference in partition bound expression" -msgstr "eine im Partitionierungsschlüsselausdruck verwendete Spalte kann nicht gelöscht werden" +msgstr "Spaltenverweise können nicht in Partitionsbegrenzungsausdrücken verwendet werden" -#: parser/parse_expr.c:850 parser/parse_relation.c:799 -#: parser/parse_relation.c:881 parser/parse_target.c:1207 +#: parser/parse_expr.c:788 parser/parse_relation.c:807 +#: parser/parse_relation.c:889 parser/parse_target.c:1235 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "Spaltenverweis »%s« ist nicht eindeutig" -#: parser/parse_expr.c:906 parser/parse_param.c:110 parser/parse_param.c:142 -#: parser/parse_param.c:199 parser/parse_param.c:298 +#: parser/parse_expr.c:844 parser/parse_param.c:110 parser/parse_param.c:142 +#: parser/parse_param.c:208 parser/parse_param.c:307 #, c-format msgid "there is no parameter $%d" msgstr "es gibt keinen Parameter $%d" -#: parser/parse_expr.c:1149 +#: parser/parse_expr.c:1044 #, c-format msgid "NULLIF requires = operator to yield boolean" msgstr "NULLIF erfordert, dass Operator = boolean ergibt" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1155 parser/parse_expr.c:3135 +#: parser/parse_expr.c:1050 parser/parse_expr.c:2965 #, c-format msgid "%s must not return a set" msgstr "%s darf keine Ergebnismenge zurückgeben" -#: parser/parse_expr.c:1603 parser/parse_expr.c:1635 +#: parser/parse_expr.c:1430 parser/parse_expr.c:1462 #, c-format msgid "number of columns does not match number of values" msgstr "Anzahl der Spalten stimmt nicht mit der Anzahl der Werte überein" -#: parser/parse_expr.c:1649 +#: parser/parse_expr.c:1476 #, c-format msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() expression" msgstr "die Quelle für ein UPDATE-Element mit mehreren Spalten muss ein Sub-SELECT oder ein ROW()-Ausdruck sein" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1843 parser/parse_expr.c:2330 parser/parse_func.c:2540 +#: parser/parse_expr.c:1671 parser/parse_expr.c:2144 parser/parse_func.c:2560 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "Funktionen mit Ergebnismenge sind in %s nicht erlaubt" -#: parser/parse_expr.c:1904 +#: parser/parse_expr.c:1733 msgid "cannot use subquery in check constraint" msgstr "Unteranfragen können nicht in Check-Constraints verwendet werden" -#: parser/parse_expr.c:1908 +#: parser/parse_expr.c:1737 msgid "cannot use subquery in DEFAULT expression" msgstr "Unteranfragen können nicht in DEFAULT-Ausdrücken verwendet werden" -#: parser/parse_expr.c:1911 +#: parser/parse_expr.c:1740 msgid "cannot use subquery in index expression" msgstr "Unteranfragen können nicht in Indexausdrücken verwendet werden" -#: parser/parse_expr.c:1914 +#: parser/parse_expr.c:1743 msgid "cannot use subquery in index predicate" msgstr "Unteranfragen können nicht im Indexprädikat verwendet werden" -#: parser/parse_expr.c:1917 +#: parser/parse_expr.c:1746 +#, fuzzy +#| msgid "cannot use subquery in partition key expression" +msgid "cannot use subquery in statistics expression" +msgstr "Unteranfragen können nicht in Partitionierungsschlüsselausdrücken verwendet werden" + +#: parser/parse_expr.c:1749 msgid "cannot use subquery in transform expression" msgstr "Unteranfragen können in Umwandlungsausdrücken nicht verwendet werden" -#: parser/parse_expr.c:1920 +#: parser/parse_expr.c:1752 msgid "cannot use subquery in EXECUTE parameter" msgstr "Unteranfragen können nicht in EXECUTE-Parameter verwendet werden" -#: parser/parse_expr.c:1923 +#: parser/parse_expr.c:1755 msgid "cannot use subquery in trigger WHEN condition" msgstr "Unteranfragen können nicht in der WHEN-Bedingung eines Triggers verwendet werden" -#: parser/parse_expr.c:1926 -#, fuzzy -#| msgid "cannot use subquery in partition key expression" +#: parser/parse_expr.c:1758 msgid "cannot use subquery in partition bound" -msgstr "Unteranfragen können nicht in Partitionierungsschlüsselausdrücken verwendet werden" +msgstr "Unteranfragen können nicht in Partitionsbegrenzungen verwendet werden" -#: parser/parse_expr.c:1929 +#: parser/parse_expr.c:1761 msgid "cannot use subquery in partition key expression" msgstr "Unteranfragen können nicht in Partitionierungsschlüsselausdrücken verwendet werden" -#: parser/parse_expr.c:1932 +#: parser/parse_expr.c:1764 msgid "cannot use subquery in CALL argument" msgstr "Unteranfragen können nicht in CALL-Argument verwendet werden" -#: parser/parse_expr.c:1935 +#: parser/parse_expr.c:1767 msgid "cannot use subquery in COPY FROM WHERE condition" msgstr "Unteranfragen können nicht in COPY-FROM-WHERE-Bedingungen verwendet werden" -#: parser/parse_expr.c:1938 +#: parser/parse_expr.c:1770 msgid "cannot use subquery in column generation expression" msgstr "Unteranfragen können nicht in Spaltengenerierungsausdrücken verwendet werden" -#: parser/parse_expr.c:1991 +#: parser/parse_expr.c:1823 #, c-format msgid "subquery must return only one column" msgstr "Unteranfrage darf nur eine Spalte zurückgeben" -#: parser/parse_expr.c:2075 +#: parser/parse_expr.c:1894 #, c-format msgid "subquery has too many columns" msgstr "Unteranfrage hat zu viele Spalten" -#: parser/parse_expr.c:2080 +#: parser/parse_expr.c:1899 #, c-format msgid "subquery has too few columns" msgstr "Unteranfrage hat zu wenige Spalten" -#: parser/parse_expr.c:2181 +#: parser/parse_expr.c:1995 #, c-format msgid "cannot determine type of empty array" msgstr "kann Typ eines leeren Arrays nicht bestimmen" -#: parser/parse_expr.c:2182 +#: parser/parse_expr.c:1996 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "Wandeln Sie ausdrücklich in den gewünschten Typ um, zum Beispiel ARRAY[]::integer[]." -#: parser/parse_expr.c:2196 +#: parser/parse_expr.c:2010 #, c-format msgid "could not find element type for data type %s" msgstr "konnte Elementtyp für Datentyp %s nicht finden" -#: parser/parse_expr.c:2481 +#: parser/parse_expr.c:2290 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "unbenannter XML-Attributwert muss ein Spaltenverweis sein" -#: parser/parse_expr.c:2482 +#: parser/parse_expr.c:2291 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "unbenannter XML-Elementwert muss ein Spaltenverweis sein" -#: parser/parse_expr.c:2497 +#: parser/parse_expr.c:2306 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "XML-Attributname »%s« einscheint mehrmals" -#: parser/parse_expr.c:2604 +#: parser/parse_expr.c:2413 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "kann das Ergebnis von XMLSERIALIZE nicht in Typ %s umwandeln" -#: parser/parse_expr.c:2892 parser/parse_expr.c:3088 +#: parser/parse_expr.c:2722 parser/parse_expr.c:2918 #, c-format msgid "unequal number of entries in row expressions" msgstr "ungleiche Anzahl Einträge in Zeilenausdrücken" -#: parser/parse_expr.c:2902 +#: parser/parse_expr.c:2732 #, c-format msgid "cannot compare rows of zero length" msgstr "kann Zeilen mit Länge null nicht vergleichen" -#: parser/parse_expr.c:2927 +#: parser/parse_expr.c:2757 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "Zeilenvergleichsoperator muss Typ boolean zurückgeben, nicht Typ %s" -#: parser/parse_expr.c:2934 +#: parser/parse_expr.c:2764 #, c-format msgid "row comparison operator must not return a set" msgstr "Zeilenvergleichsoperator darf keine Ergebnismenge zurückgeben" -#: parser/parse_expr.c:2993 parser/parse_expr.c:3034 +#: parser/parse_expr.c:2823 parser/parse_expr.c:2864 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "konnte Interpretation des Zeilenvergleichsoperators %s nicht bestimmen" -#: parser/parse_expr.c:2995 +#: parser/parse_expr.c:2825 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "Zeilenvergleichsoperatoren müssen einer »btree«-Operatorfamilie zugeordnet sein." -#: parser/parse_expr.c:3036 +#: parser/parse_expr.c:2866 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Es gibt mehrere gleichermaßen plausible Kandidaten." -#: parser/parse_expr.c:3129 +#: parser/parse_expr.c:2959 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROM erfordert, dass Operator = boolean ergibt" -#: parser/parse_expr.c:3448 parser/parse_expr.c:3466 -#, c-format -msgid "operator precedence change: %s is now lower precedence than %s" -msgstr "Änderung der Operatorrangfolge: %s hat jetzt niedrigere Priorität als %s" - -#: parser/parse_func.c:191 +#: parser/parse_func.c:192 #, c-format msgid "argument name \"%s\" used more than once" msgstr "Argumentname »%s« mehrmals angegeben" -#: parser/parse_func.c:202 +#: parser/parse_func.c:203 #, c-format msgid "positional argument cannot follow named argument" msgstr "Positionsargument kann nicht hinter benanntem Argument stehen" -#: parser/parse_func.c:284 parser/parse_func.c:2243 +#: parser/parse_func.c:286 parser/parse_func.c:2257 #, c-format msgid "%s is not a procedure" msgstr "%s ist keine Prozedur" -#: parser/parse_func.c:288 +#: parser/parse_func.c:290 #, c-format msgid "To call a function, use SELECT." msgstr "Um eine Funktion aufzurufen, verwenden Sie SELECT." -#: parser/parse_func.c:294 +#: parser/parse_func.c:296 #, c-format msgid "%s is a procedure" msgstr "%s ist eine Prozedur" -#: parser/parse_func.c:298 +#: parser/parse_func.c:300 #, c-format msgid "To call a procedure, use CALL." msgstr "Um eine Prozedur aufzurufen, verwenden Sie CALL." -#: parser/parse_func.c:312 +#: parser/parse_func.c:314 #, c-format msgid "%s(*) specified, but %s is not an aggregate function" msgstr "%s(*) angegeben, aber %s ist keine Aggregatfunktion" -#: parser/parse_func.c:319 +#: parser/parse_func.c:321 #, c-format msgid "DISTINCT specified, but %s is not an aggregate function" msgstr "DISTINCT wurde angegeben, aber %s ist keine Aggregatfunktion" -#: parser/parse_func.c:325 +#: parser/parse_func.c:327 #, c-format msgid "WITHIN GROUP specified, but %s is not an aggregate function" msgstr "WITHIN GROUP wurde angegeben, aber %s ist keine Aggregatfunktion" -#: parser/parse_func.c:331 +#: parser/parse_func.c:333 #, c-format msgid "ORDER BY specified, but %s is not an aggregate function" msgstr "ORDER BY angegeben, aber %s ist keine Aggregatfunktion" -#: parser/parse_func.c:337 +#: parser/parse_func.c:339 #, c-format msgid "FILTER specified, but %s is not an aggregate function" msgstr "FILTER wurde angegeben, aber %s ist keine Aggregatfunktion" -#: parser/parse_func.c:343 +#: parser/parse_func.c:345 #, c-format msgid "OVER specified, but %s is not a window function nor an aggregate function" msgstr "OVER angegeben, aber %s ist keine Fensterfunktion oder Aggregatfunktion" -#: parser/parse_func.c:381 +#: parser/parse_func.c:383 #, c-format msgid "WITHIN GROUP is required for ordered-set aggregate %s" msgstr "WITHIN GROUP muss angegeben werden für Ordered-Set-Aggregatfunktion %s" -#: parser/parse_func.c:387 +#: parser/parse_func.c:389 #, c-format msgid "OVER is not supported for ordered-set aggregate %s" msgstr "OVER wird für Ordered-Set-Aggregatfunktion %s nicht unterstützt" -#: parser/parse_func.c:418 parser/parse_func.c:447 +#: parser/parse_func.c:420 parser/parse_func.c:451 #, c-format -msgid "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." -msgstr "Es gibt eine Ordered-Set-Aggregatfunktion %s, aber sie benötigt %d direkte Argumente, nicht %d." +msgid "There is an ordered-set aggregate %s, but it requires %d direct argument, not %d." +msgid_plural "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." +msgstr[0] "Es gibt eine Ordered-Set-Aggregatfunktion %s, aber sie benötigt %d direktes Argument, nicht %d." +msgstr[1] "Es gibt eine Ordered-Set-Aggregatfunktion %s, aber sie benötigt %d direkte Argumente, nicht %d." -#: parser/parse_func.c:472 +#: parser/parse_func.c:478 #, c-format msgid "To use the hypothetical-set aggregate %s, the number of hypothetical direct arguments (here %d) must match the number of ordering columns (here %d)." msgstr "Um die Hypothetical-Set-Aggregatfunktion %s zu verwenden, muss die Anzahl der hypothetischen direkten Argumente (hier %d) mit der Anzahl der Sortierspalten (hier %d) übereinstimmen." -#: parser/parse_func.c:486 +#: parser/parse_func.c:492 #, c-format -msgid "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." -msgstr "Es gibt eine Ordered-Set-Aggregatfunktion %s, aber sie benötigt mindestens %d direkte Argumente." +msgid "There is an ordered-set aggregate %s, but it requires at least %d direct argument." +msgid_plural "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." +msgstr[0] "Es gibt eine Ordered-Set-Aggregatfunktion %s, aber sie benötigt mindestens %d direktes Argument." +msgstr[1] "Es gibt eine Ordered-Set-Aggregatfunktion %s, aber sie benötigt mindestens %d direkte Argumente." -#: parser/parse_func.c:505 +#: parser/parse_func.c:513 #, c-format msgid "%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP" msgstr "%s ist keine Ordered-Set-Aggregatfunktion und kann deshalb kein WITHIN GROUP haben" -#: parser/parse_func.c:518 +#: parser/parse_func.c:526 #, c-format msgid "window function %s requires an OVER clause" msgstr "Fensterfunktion %s erfordert eine OVER-Klausel" -#: parser/parse_func.c:525 +#: parser/parse_func.c:533 #, c-format msgid "window function %s cannot have WITHIN GROUP" msgstr "Fensterfunktion %s kann kein WITHIN GROUP haben" -#: parser/parse_func.c:554 +#: parser/parse_func.c:562 #, c-format msgid "procedure %s is not unique" msgstr "Prozedur %s ist nicht eindeutig" -#: parser/parse_func.c:557 +#: parser/parse_func.c:565 #, c-format msgid "Could not choose a best candidate procedure. You might need to add explicit type casts." msgstr "Konnte keine beste Kandidatprozedur auswählen. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen." -#: parser/parse_func.c:563 +#: parser/parse_func.c:571 #, c-format msgid "function %s is not unique" msgstr "Funktion %s ist nicht eindeutig" -#: parser/parse_func.c:566 +#: parser/parse_func.c:574 #, c-format msgid "Could not choose a best candidate function. You might need to add explicit type casts." msgstr "Konnte keine beste Kandidatfunktion auswählen. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen." -#: parser/parse_func.c:605 +#: parser/parse_func.c:613 #, c-format msgid "No aggregate function matches the given name and argument types. Perhaps you misplaced ORDER BY; ORDER BY must appear after all regular arguments of the aggregate." msgstr "Keine Aggregatfunktion stimmt mit dem angegebenen Namen und den Argumenttypen überein. Mõglicherweise steht ORDER BY an der falschen Stelle; ORDER BY muss hinter allen normalen Argumenten der Aggregatfunktion stehen." -#: parser/parse_func.c:613 parser/parse_func.c:2286 +#: parser/parse_func.c:621 parser/parse_func.c:2300 #, c-format msgid "procedure %s does not exist" msgstr "Prozedur %s existiert nicht" -#: parser/parse_func.c:616 +#: parser/parse_func.c:624 #, c-format msgid "No procedure matches the given name and argument types. You might need to add explicit type casts." msgstr "Keine Prozedur stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen." -#: parser/parse_func.c:625 +#: parser/parse_func.c:633 #, c-format msgid "No function matches the given name and argument types. You might need to add explicit type casts." msgstr "Keine Funktion stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen." -#: parser/parse_func.c:727 +#: parser/parse_func.c:735 #, c-format msgid "VARIADIC argument must be an array" msgstr "VARIADIC-Argument muss ein Array sein" -#: parser/parse_func.c:779 parser/parse_func.c:843 +#: parser/parse_func.c:789 parser/parse_func.c:853 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "beim Aufruf einer parameterlosen Aggregatfunktion muss %s(*) angegeben werden" -#: parser/parse_func.c:786 +#: parser/parse_func.c:796 #, c-format msgid "aggregates cannot return sets" msgstr "Aggregatfunktionen können keine Ergebnismengen zurückgeben" -#: parser/parse_func.c:801 +#: parser/parse_func.c:811 #, c-format msgid "aggregates cannot use named arguments" msgstr "Aggregatfunktionen können keine benannten Argumente verwenden" -#: parser/parse_func.c:833 +#: parser/parse_func.c:843 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "DISTINCT ist für Fensterfunktionen nicht implementiert" -#: parser/parse_func.c:853 +#: parser/parse_func.c:863 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "ORDER BY in Aggregatfunktion ist für Fensterfunktionen nicht implementiert" -#: parser/parse_func.c:862 +#: parser/parse_func.c:872 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "FILTER ist für Fensterfunktionen, die keine Aggregatfunktionen sind, nicht implementiert" -#: parser/parse_func.c:871 +#: parser/parse_func.c:881 #, c-format msgid "window function calls cannot contain set-returning function calls" msgstr "Aufrufe von Fensterfunktionen können keine Aufrufe von Funktionen mit Ergebnismenge enthalten" -#: parser/parse_func.c:879 +#: parser/parse_func.c:889 #, c-format msgid "window functions cannot return sets" msgstr "Fensterfunktionen können keine Ergebnismengen zurückgeben" -#: parser/parse_func.c:2124 parser/parse_func.c:2315 +#: parser/parse_func.c:2138 parser/parse_func.c:2329 #, c-format msgid "could not find a function named \"%s\"" msgstr "konnte keine Funktion namens »%s« finden" -#: parser/parse_func.c:2138 parser/parse_func.c:2333 +#: parser/parse_func.c:2152 parser/parse_func.c:2347 #, c-format msgid "function name \"%s\" is not unique" msgstr "Funktionsname »%s« ist nicht eindeutig" -#: parser/parse_func.c:2140 parser/parse_func.c:2335 +#: parser/parse_func.c:2154 parser/parse_func.c:2349 #, c-format msgid "Specify the argument list to select the function unambiguously." msgstr "Geben Sie eine Argumentliste an, um die Funktion eindeutig auszuwählen." -#: parser/parse_func.c:2184 +#: parser/parse_func.c:2198 #, c-format msgid "procedures cannot have more than %d argument" msgid_plural "procedures cannot have more than %d arguments" msgstr[0] "Prozeduren können nicht mehr als %d Argument haben" msgstr[1] "Prozeduren können nicht mehr als %d Argumente haben" -#: parser/parse_func.c:2233 +#: parser/parse_func.c:2247 #, c-format msgid "%s is not a function" msgstr "%s ist keine Funktion" -#: parser/parse_func.c:2253 +#: parser/parse_func.c:2267 #, c-format msgid "function %s is not an aggregate" msgstr "Funktion %s ist keine Aggregatfunktion" -#: parser/parse_func.c:2281 +#: parser/parse_func.c:2295 #, c-format msgid "could not find a procedure named \"%s\"" msgstr "konnte keine Prozedur namens »%s« finden" -#: parser/parse_func.c:2295 +#: parser/parse_func.c:2309 #, c-format msgid "could not find an aggregate named \"%s\"" msgstr "konnte keine Aggregatfunktion namens »%s« finden" -#: parser/parse_func.c:2300 +#: parser/parse_func.c:2314 #, c-format msgid "aggregate %s(*) does not exist" msgstr "Aggregatfunktion %s(*) existiert nicht" -#: parser/parse_func.c:2305 +#: parser/parse_func.c:2319 #, c-format msgid "aggregate %s does not exist" msgstr "Aggregatfunktion %s existiert nicht" -#: parser/parse_func.c:2340 +#: parser/parse_func.c:2354 #, c-format msgid "procedure name \"%s\" is not unique" msgstr "Prozedurname »%s« ist nicht eindeutig" -#: parser/parse_func.c:2342 +#: parser/parse_func.c:2356 #, c-format msgid "Specify the argument list to select the procedure unambiguously." msgstr "Geben Sie eine Argumentliste an, um die Prozedur eindeutig auszuwählen." -#: parser/parse_func.c:2347 +#: parser/parse_func.c:2361 #, c-format msgid "aggregate name \"%s\" is not unique" msgstr "Aggregatfunktionsname »%s« ist nicht eindeutig" -#: parser/parse_func.c:2349 +#: parser/parse_func.c:2363 #, c-format msgid "Specify the argument list to select the aggregate unambiguously." msgstr "Geben Sie eine Argumentliste an, um die Aggregatfunktion eindeutig auszuwählen." -#: parser/parse_func.c:2354 +#: parser/parse_func.c:2368 #, c-format msgid "routine name \"%s\" is not unique" msgstr "Routinenname »%s« ist nicht eindeutig" -#: parser/parse_func.c:2356 +#: parser/parse_func.c:2370 #, c-format msgid "Specify the argument list to select the routine unambiguously." msgstr "Geben Sie eine Argumentliste an, um die Routine eindeutig auszuwählen." -#: parser/parse_func.c:2411 +#: parser/parse_func.c:2425 msgid "set-returning functions are not allowed in JOIN conditions" msgstr "Funktionen mit Ergebnismenge sind in JOIN-Bedingungen nicht erlaubt" -#: parser/parse_func.c:2432 +#: parser/parse_func.c:2446 msgid "set-returning functions are not allowed in policy expressions" msgstr "Funktionen mit Ergebnismenge sind in Policy-Ausdrücken nicht erlaubt" -#: parser/parse_func.c:2448 +#: parser/parse_func.c:2462 msgid "set-returning functions are not allowed in window definitions" msgstr "Funktionen mit Ergebnismenge sind in Fensterdefinitionen nicht erlaubt" -#: parser/parse_func.c:2486 +#: parser/parse_func.c:2500 msgid "set-returning functions are not allowed in check constraints" msgstr "Funktionen mit Ergebnismenge sind in Check-Constraints nicht erlaubt" -#: parser/parse_func.c:2490 +#: parser/parse_func.c:2504 msgid "set-returning functions are not allowed in DEFAULT expressions" msgstr "Funktionen mit Ergebnismenge sind in DEFAULT-Ausdrücken nicht erlaubt" -#: parser/parse_func.c:2493 +#: parser/parse_func.c:2507 msgid "set-returning functions are not allowed in index expressions" msgstr "Funktionen mit Ergebnismenge sind in Indexausdrücken nicht erlaubt" -#: parser/parse_func.c:2496 +#: parser/parse_func.c:2510 msgid "set-returning functions are not allowed in index predicates" msgstr "Funktionen mit Ergebnismenge sind in Indexprädikaten nicht erlaubt" -#: parser/parse_func.c:2499 +#: parser/parse_func.c:2513 +#, fuzzy +#| msgid "set-returning functions are not allowed in policy expressions" +msgid "set-returning functions are not allowed in statistics expressions" +msgstr "Funktionen mit Ergebnismenge sind in Policy-Ausdrücken nicht erlaubt" + +#: parser/parse_func.c:2516 msgid "set-returning functions are not allowed in transform expressions" msgstr "Funktionen mit Ergebnismenge sind in Umwandlungsausdrücken nicht erlaubt" -#: parser/parse_func.c:2502 +#: parser/parse_func.c:2519 msgid "set-returning functions are not allowed in EXECUTE parameters" msgstr "Funktionen mit Ergebnismenge sind in EXECUTE-Parametern nicht erlaubt" -#: parser/parse_func.c:2505 +#: parser/parse_func.c:2522 msgid "set-returning functions are not allowed in trigger WHEN conditions" msgstr "Funktionen mit Ergebnismenge sind in der WHEN-Bedingung eines Triggers nicht erlaubt" -#: parser/parse_func.c:2508 -#, fuzzy -#| msgid "set-returning functions are not allowed in partition key expressions" +#: parser/parse_func.c:2525 msgid "set-returning functions are not allowed in partition bound" -msgstr "Funktionen mit Ergebnismenge sind in Partitionierungsschlüsselausdrücken nicht erlaubt" +msgstr "Funktionen mit Ergebnismenge sind in Partitionsbegrenzungen nicht erlaubt" -#: parser/parse_func.c:2511 +#: parser/parse_func.c:2528 msgid "set-returning functions are not allowed in partition key expressions" msgstr "Funktionen mit Ergebnismenge sind in Partitionierungsschlüsselausdrücken nicht erlaubt" -#: parser/parse_func.c:2514 +#: parser/parse_func.c:2531 msgid "set-returning functions are not allowed in CALL arguments" msgstr "Funktionen mit Ergebnismenge sind in CALL-Argumenten nicht erlaubt" -#: parser/parse_func.c:2517 +#: parser/parse_func.c:2534 msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" msgstr "Funktionen mit Ergebnismenge sind in COPY-FROM-WHERE-Bedingungen nicht erlaubt" -#: parser/parse_func.c:2520 +#: parser/parse_func.c:2537 msgid "set-returning functions are not allowed in column generation expressions" msgstr "Funktionen mit Ergebnismenge sind in Spaltengenerierungsausdrücken nicht erlaubt" -#: parser/parse_node.c:86 +#: parser/parse_node.c:87 #, c-format msgid "target lists can have at most %d entries" msgstr "Targetlisten können höchstens %d Einträge haben" -#: parser/parse_node.c:235 -#, c-format -msgid "cannot subscript type %s because it is not an array" -msgstr "kann aus Typ %s kein Element auswählen, weil er kein Array ist" - -#: parser/parse_node.c:340 parser/parse_node.c:377 -#, c-format -msgid "array subscript must have type integer" -msgstr "Arrayindex muss Typ integer haben" - -#: parser/parse_node.c:408 -#, c-format -msgid "array assignment requires type %s but expression is of type %s" -msgstr "Arrayzuweisung erfordert Typ %s, aber Ausdruck hat Typ %s" +#: parser/parse_oper.c:123 parser/parse_oper.c:690 +#, fuzzy, c-format +#| msgid "postfix operators are not supported anymore (operator \"%s\")" +msgid "postfix operators are not supported" +msgstr "Postfix-Operatoren werden nicht mehr unterstützt (Operator »%s«)" -#: parser/parse_oper.c:125 parser/parse_oper.c:724 utils/adt/regproc.c:521 -#: utils/adt/regproc.c:705 +#: parser/parse_oper.c:130 parser/parse_oper.c:649 utils/adt/regproc.c:538 +#: utils/adt/regproc.c:722 #, c-format msgid "operator does not exist: %s" msgstr "Operator existiert nicht: %s" -#: parser/parse_oper.c:224 +#: parser/parse_oper.c:229 #, c-format msgid "Use an explicit ordering operator or modify the query." msgstr "Verwenden Sie einen ausdrücklichen Sortieroperator oder ändern Sie die Anfrage." -#: parser/parse_oper.c:480 +#: parser/parse_oper.c:485 #, c-format msgid "operator requires run-time type coercion: %s" msgstr "Operator erfordert Typumwandlung zur Laufzeit: %s" -#: parser/parse_oper.c:716 +#: parser/parse_oper.c:641 #, c-format msgid "operator is not unique: %s" msgstr "Operator ist nicht eindeutig: %s" -#: parser/parse_oper.c:718 +#: parser/parse_oper.c:643 #, c-format msgid "Could not choose a best candidate operator. You might need to add explicit type casts." msgstr "Konnte keinen besten Kandidatoperator auswählen. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen." -#: parser/parse_oper.c:727 +#: parser/parse_oper.c:652 #, c-format msgid "No operator matches the given name and argument type. You might need to add an explicit type cast." msgstr "Kein Operator stimmt mit dem angegebenen Namen und Argumenttyp überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen." -#: parser/parse_oper.c:729 +#: parser/parse_oper.c:654 #, c-format msgid "No operator matches the given name and argument types. You might need to add explicit type casts." msgstr "Kein Operator stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen." -#: parser/parse_oper.c:790 parser/parse_oper.c:912 +#: parser/parse_oper.c:714 parser/parse_oper.c:828 #, c-format msgid "operator is only a shell: %s" msgstr "Operator ist nur eine Hülle: %s" -#: parser/parse_oper.c:900 +#: parser/parse_oper.c:816 #, c-format msgid "op ANY/ALL (array) requires array on right side" msgstr "op ANY/ALL (array) erfordert Array auf der rechten Seite" -#: parser/parse_oper.c:942 +#: parser/parse_oper.c:858 #, c-format msgid "op ANY/ALL (array) requires operator to yield boolean" msgstr "op ANY/ALL (array) erfordert, dass Operator boolean ergibt" -#: parser/parse_oper.c:947 +#: parser/parse_oper.c:863 #, c-format msgid "op ANY/ALL (array) requires operator not to return a set" msgstr "op ANY/ALL (array) erfordert, dass Operator keine Ergebnismenge zurückgibt" -#: parser/parse_param.c:216 +#: parser/parse_param.c:225 #, c-format msgid "inconsistent types deduced for parameter $%d" msgstr "inkonsistente Typen für Parameter $%d ermittelt" @@ -16533,153 +17101,166 @@ msgstr "Tabellenbezug »%s« ist nicht eindeutig" msgid "table reference %u is ambiguous" msgstr "Tabellenbezug %u ist nicht eindeutig" -#: parser/parse_relation.c:444 +#: parser/parse_relation.c:445 #, c-format msgid "table name \"%s\" specified more than once" msgstr "Tabellenname »%s« mehrmals angegeben" -#: parser/parse_relation.c:473 parser/parse_relation.c:3446 +#: parser/parse_relation.c:474 parser/parse_relation.c:3532 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "ungültiger Verweis auf FROM-Klausel-Eintrag für Tabelle »%s«" -#: parser/parse_relation.c:477 parser/parse_relation.c:3451 +#: parser/parse_relation.c:478 parser/parse_relation.c:3537 #, c-format msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." msgstr "Es gibt einen Eintrag für Tabelle »%s«, aber auf ihn kann aus diesem Teil der Anfrage nicht verwiesen werden." -#: parser/parse_relation.c:479 +#: parser/parse_relation.c:480 #, c-format msgid "The combining JOIN type must be INNER or LEFT for a LATERAL reference." msgstr "Der JOIN-Typ für LATERAL muss INNER oder LEFT sein." -#: parser/parse_relation.c:690 +#: parser/parse_relation.c:691 #, c-format msgid "system column \"%s\" reference in check constraint is invalid" msgstr "Verweis auf Systemspalte »%s« im Check-Constraint ist ungültig" -#: parser/parse_relation.c:699 +#: parser/parse_relation.c:700 #, c-format msgid "cannot use system column \"%s\" in column generation expression" msgstr "Systemspalte »%s« kann nicht in Spaltengenerierungsausdruck verwendet werden" -#: parser/parse_relation.c:1170 parser/parse_relation.c:1620 -#: parser/parse_relation.c:2262 +#: parser/parse_relation.c:1173 parser/parse_relation.c:1625 +#: parser/parse_relation.c:2302 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "Tabelle »%s« hat %d Spalten, aber %d Spalten wurden angegeben" -#: parser/parse_relation.c:1372 +#: parser/parse_relation.c:1377 #, c-format msgid "There is a WITH item named \"%s\", but it cannot be referenced from this part of the query." msgstr "Es gibt ein WITH-Element namens »%s«, aber darauf kann aus diesem Teil der Anfrage kein Bezug genommen werden." -#: parser/parse_relation.c:1374 +#: parser/parse_relation.c:1379 #, c-format msgid "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." msgstr "Verwenden Sie WITH RECURSIVE oder sortieren Sie die WITH-Ausdrücke um, um Vorwärtsreferenzen zu entfernen." -#: parser/parse_relation.c:1747 +#: parser/parse_relation.c:1767 +#, fuzzy, c-format +#| msgid "a column definition list is required for functions returning \"record\"" +msgid "a column definition list is redundant for a function with OUT parameters" +msgstr "eine Spaltendefinitionsliste ist erforderlich bei Funktionen, die »record« zurückgeben" + +#: parser/parse_relation.c:1773 +#, fuzzy, c-format +#| msgid "a column definition list is required for functions returning \"record\"" +msgid "a column definition list is redundant for a function returning a named composite type" +msgstr "eine Spaltendefinitionsliste ist erforderlich bei Funktionen, die »record« zurückgeben" + +#: parser/parse_relation.c:1780 #, c-format msgid "a column definition list is only allowed for functions returning \"record\"" msgstr "eine Spaltendefinitionsliste ist nur erlaubt bei Funktionen, die »record« zurückgeben" -#: parser/parse_relation.c:1756 +#: parser/parse_relation.c:1791 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "eine Spaltendefinitionsliste ist erforderlich bei Funktionen, die »record« zurückgeben" -#: parser/parse_relation.c:1845 +#: parser/parse_relation.c:1880 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "Funktion »%s« in FROM hat nicht unterstützten Rückgabetyp %s" -#: parser/parse_relation.c:2054 +#: parser/parse_relation.c:2089 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "VALUES-Liste »%s« hat %d Spalten verfügbar, aber %d Spalten wurden angegeben" -#: parser/parse_relation.c:2125 +#: parser/parse_relation.c:2161 #, c-format msgid "joins can have at most %d columns" msgstr "Verbunde können höchstens %d Spalten haben" -#: parser/parse_relation.c:2235 +#: parser/parse_relation.c:2275 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "WITH-Anfrage »%s« hat keine RETURNING-Klausel" -#: parser/parse_relation.c:3221 parser/parse_relation.c:3231 +#: parser/parse_relation.c:3307 parser/parse_relation.c:3317 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "Spalte %d von Relation »%s« existiert nicht" -#: parser/parse_relation.c:3449 +#: parser/parse_relation.c:3535 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "Vielleicht wurde beabsichtigt, auf den Tabellenalias »%s« zu verweisen." -#: parser/parse_relation.c:3457 +#: parser/parse_relation.c:3543 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "fehlender Eintrag in FROM-Klausel für Tabelle »%s«" -#: parser/parse_relation.c:3509 +#: parser/parse_relation.c:3595 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "Vielleicht wurde beabsichtigt, auf die Spalte »%s.%s« zu verweisen." -#: parser/parse_relation.c:3511 +#: parser/parse_relation.c:3597 #, c-format msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." msgstr "Es gibt eine Spalte namens »%s« in Tabelle »%s«, aber auf sie kann aus diesem Teil der Anfrage nicht verwiesen werden." -#: parser/parse_relation.c:3528 +#: parser/parse_relation.c:3614 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "Vielleicht wurde beabsichtigt, auf die Spalte »%s.%s« oder die Spalte »%s.%s« zu verweisen." -#: parser/parse_target.c:478 parser/parse_target.c:792 +#: parser/parse_target.c:483 parser/parse_target.c:804 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "kann Systemspalte »%s« keinen Wert zuweisen" -#: parser/parse_target.c:506 +#: parser/parse_target.c:511 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "kann Arrayelement nicht auf DEFAULT setzen" -#: parser/parse_target.c:511 +#: parser/parse_target.c:516 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "kann Subfeld nicht auf DEFAULT setzen" -#: parser/parse_target.c:584 +#: parser/parse_target.c:590 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "Spalte »%s« hat Typ %s, aber der Ausdruck hat Typ %s" -#: parser/parse_target.c:776 +#: parser/parse_target.c:788 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a composite type" msgstr "kann Feld »%s« in Spalte »%s« nicht setzen, weil ihr Typ %s kein zusammengesetzter Typ ist" -#: parser/parse_target.c:785 +#: parser/parse_target.c:797 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because there is no such column in data type %s" msgstr "kann Feld »%s« in Spalte »%s« nicht setzen, weil es keine solche Spalte in Datentyp %s gibt" -#: parser/parse_target.c:864 -#, c-format -msgid "array assignment to \"%s\" requires type %s but expression is of type %s" +#: parser/parse_target.c:878 +#, fuzzy, c-format +#| msgid "array assignment to \"%s\" requires type %s but expression is of type %s" +msgid "subscripted assignment to \"%s\" requires type %s but expression is of type %s" msgstr "Wertzuweisung für »%s« erfordert Typ %s, aber Ausdruck hat Typ %s" -#: parser/parse_target.c:874 +#: parser/parse_target.c:888 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "Subfeld »%s« hat Typ %s, aber der Ausdruck hat Typ %s" -#: parser/parse_target.c:1295 +#: parser/parse_target.c:1323 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "SELECT * ist nicht gültig, wenn keine Tabellen angegeben sind" @@ -16699,8 +17280,8 @@ msgstr "falscher %%TYPE-Verweis (zu viele Namensteile): %s" msgid "type reference %s converted to %s" msgstr "Typverweis %s in %s umgewandelt" -#: parser/parse_type.c:278 parser/parse_type.c:857 utils/cache/typcache.c:383 -#: utils/cache/typcache.c:437 +#: parser/parse_type.c:278 parser/parse_type.c:803 utils/cache/typcache.c:389 +#: utils/cache/typcache.c:444 #, c-format msgid "type \"%s\" is only a shell" msgstr "Typ »%s« ist nur eine Hülle" @@ -16715,459 +17296,458 @@ msgstr "Typmodifikator ist für Typ »%s« nicht erlaubt" msgid "type modifiers must be simple constants or identifiers" msgstr "Typmodifikatoren müssen einfache Konstanten oder Bezeichner sein" -#: parser/parse_type.c:721 parser/parse_type.c:820 +#: parser/parse_type.c:721 parser/parse_type.c:766 #, c-format msgid "invalid type name \"%s\"" msgstr "ungültiger Typname: »%s«" -#: parser/parse_utilcmd.c:263 +#: parser/parse_utilcmd.c:266 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "partitionierte Tabelle kann nicht als Vererbungskind erzeugt werden" -#: parser/parse_utilcmd.c:427 -#, c-format -msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" -msgstr "%s erstellt implizit eine Sequenz »%s« für die »serial«-Spalte »%s.%s«" - -#: parser/parse_utilcmd.c:558 +#: parser/parse_utilcmd.c:580 #, c-format msgid "array of serial is not implemented" msgstr "Array aus Typ serial ist nicht implementiert" -#: parser/parse_utilcmd.c:636 parser/parse_utilcmd.c:648 +#: parser/parse_utilcmd.c:659 parser/parse_utilcmd.c:671 +#: parser/parse_utilcmd.c:730 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "widersprüchliche NULL/NOT NULL-Deklarationen für Spalte »%s« von Tabelle »%s«" -#: parser/parse_utilcmd.c:660 +#: parser/parse_utilcmd.c:683 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "mehrere Vorgabewerte angegeben für Spalte »%s« von Tabelle »%s«" -#: parser/parse_utilcmd.c:677 +#: parser/parse_utilcmd.c:700 #, c-format msgid "identity columns are not supported on typed tables" msgstr "Identitätsspalten in getypten Tabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:681 +#: parser/parse_utilcmd.c:704 #, c-format msgid "identity columns are not supported on partitions" msgstr "Identitätsspalten in partitionierten Tabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:690 +#: parser/parse_utilcmd.c:713 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "mehrere Identitätsangaben für Spalte »%s« von Tabelle »%s«" -#: parser/parse_utilcmd.c:710 +#: parser/parse_utilcmd.c:743 #, c-format msgid "generated columns are not supported on typed tables" msgstr "generierte Spalten in getypten Tabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:714 +#: parser/parse_utilcmd.c:747 #, c-format msgid "generated columns are not supported on partitions" msgstr "generierte Spalten in partitionierten Tabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:719 -#, fuzzy, c-format -#| msgid "multiple default values specified for column \"%s\" of table \"%s\"" +#: parser/parse_utilcmd.c:752 +#, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" -msgstr "mehrere Vorgabewerte angegeben für Spalte »%s« von Tabelle »%s«" +msgstr "mehrere Generierungsklauseln angegeben für Spalte »%s« von Tabelle »%s«" -#: parser/parse_utilcmd.c:737 parser/parse_utilcmd.c:852 +#: parser/parse_utilcmd.c:770 parser/parse_utilcmd.c:885 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "Primärschlüssel für Fremdtabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:746 parser/parse_utilcmd.c:862 +#: parser/parse_utilcmd.c:779 parser/parse_utilcmd.c:895 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "Unique-Constraints auf Fremdtabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:791 +#: parser/parse_utilcmd.c:824 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "sowohl Vorgabewert als auch Identität angegeben für Spalte »%s« von Tabelle »%s«" -#: parser/parse_utilcmd.c:799 -#, fuzzy, c-format -#| msgid "both default and identity specified for column \"%s\" of table \"%s\"" +#: parser/parse_utilcmd.c:832 +#, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" -msgstr "sowohl Vorgabewert als auch Identität angegeben für Spalte »%s« von Tabelle »%s«" +msgstr "sowohl Vorgabewert als auch Generierungsausdruck angegeben für Spalte »%s« von Tabelle »%s«" -#: parser/parse_utilcmd.c:807 -#, fuzzy, c-format -#| msgid "both default and identity specified for column \"%s\" of table \"%s\"" +#: parser/parse_utilcmd.c:840 +#, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" -msgstr "sowohl Vorgabewert als auch Identität angegeben für Spalte »%s« von Tabelle »%s«" +msgstr "sowohl Identität als auch Generierungsausdruck angegeben für Spalte »%s« von Tabelle »%s«" -#: parser/parse_utilcmd.c:872 +#: parser/parse_utilcmd.c:905 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "Exclusion-Constraints auf Fremdtabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:878 +#: parser/parse_utilcmd.c:911 #, c-format msgid "exclusion constraints are not supported on partitioned tables" msgstr "Exclusion-Constraints auf partitionierten Tabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:943 +#: parser/parse_utilcmd.c:976 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE wird für das Erzeugen von Fremdtabellen nicht unterstützt" -#: parser/parse_utilcmd.c:1095 -#, c-format -msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." -msgstr "Generierungsausdruck für Spalte »%s« enthält einen Verweis auf die ganze Zeile der Tabelle »%s«." - -#: parser/parse_utilcmd.c:1598 parser/parse_utilcmd.c:1707 +#: parser/parse_utilcmd.c:1753 parser/parse_utilcmd.c:1861 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "Index »%s« enthält einen Verweis auf die ganze Zeile der Tabelle." -#: parser/parse_utilcmd.c:2075 +#: parser/parse_utilcmd.c:2248 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "bestehender Index kann nicht in CREATE TABLE verwendet werden" -#: parser/parse_utilcmd.c:2095 +#: parser/parse_utilcmd.c:2268 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "Index »%s« gehört bereits zu einem Constraint" -#: parser/parse_utilcmd.c:2110 +#: parser/parse_utilcmd.c:2283 #, c-format msgid "index \"%s\" is not valid" msgstr "Index »%s« ist nicht gültig" -#: parser/parse_utilcmd.c:2116 +#: parser/parse_utilcmd.c:2289 #, c-format msgid "\"%s\" is not a unique index" msgstr "»%s« ist kein Unique Index" -#: parser/parse_utilcmd.c:2117 parser/parse_utilcmd.c:2124 -#: parser/parse_utilcmd.c:2131 parser/parse_utilcmd.c:2208 +#: parser/parse_utilcmd.c:2290 parser/parse_utilcmd.c:2297 +#: parser/parse_utilcmd.c:2304 parser/parse_utilcmd.c:2381 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "Ein Primärschlüssel oder Unique-Constraint kann nicht mit einem solchen Index erzeugt werden." -#: parser/parse_utilcmd.c:2123 +#: parser/parse_utilcmd.c:2296 #, c-format msgid "index \"%s\" contains expressions" msgstr "Index »%s« enthält Ausdrücke" -#: parser/parse_utilcmd.c:2130 +#: parser/parse_utilcmd.c:2303 #, c-format msgid "\"%s\" is a partial index" msgstr "»%s« ist ein partieller Index" -#: parser/parse_utilcmd.c:2142 +#: parser/parse_utilcmd.c:2315 #, c-format msgid "\"%s\" is a deferrable index" msgstr "»%s« ist ein aufschiebbarer Index" -#: parser/parse_utilcmd.c:2143 +#: parser/parse_utilcmd.c:2316 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "Ein nicht aufschiebbarer Constraint kann nicht mit einem aufschiebbaren Index erzeugt werden." -#: parser/parse_utilcmd.c:2207 -#, fuzzy, c-format -#| msgid "index \"%s\" does not have default sorting behavior" +#: parser/parse_utilcmd.c:2380 +#, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" -msgstr "Index »%s« hat nicht das Standardsortierverhalten" +msgstr "Index »%s« Spalte Nummer %d hat nicht das Standardsortierverhalten" -#: parser/parse_utilcmd.c:2364 +#: parser/parse_utilcmd.c:2537 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "Spalte »%s« erscheint zweimal im Primärschlüssel-Constraint" -#: parser/parse_utilcmd.c:2370 +#: parser/parse_utilcmd.c:2543 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "Spalte »%s« erscheint zweimal im Unique-Constraint" -#: parser/parse_utilcmd.c:2723 +#: parser/parse_utilcmd.c:2896 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "Indexausdrücke und -prädikate können nur auf die zu indizierende Tabelle verweisen" -#: parser/parse_utilcmd.c:2769 +#: parser/parse_utilcmd.c:2974 +#, fuzzy, c-format +#| msgid "index expressions and predicates can refer only to the table being indexed" +msgid "statistics expressions can refer only to the table being indexed" +msgstr "Indexausdrücke und -prädikate können nur auf die zu indizierende Tabelle verweisen" + +#: parser/parse_utilcmd.c:3020 #, c-format msgid "rules on materialized views are not supported" msgstr "Regeln für materialisierte Sichten werden nicht unterstützt" -#: parser/parse_utilcmd.c:2832 +#: parser/parse_utilcmd.c:3083 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "WHERE-Bedingung einer Regel kann keine Verweise auf andere Relationen enthalten" -#: parser/parse_utilcmd.c:2906 +#: parser/parse_utilcmd.c:3157 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "Regeln mit WHERE-Bedingungen können als Aktion nur SELECT, INSERT, UPDATE oder DELETE haben" -#: parser/parse_utilcmd.c:2924 parser/parse_utilcmd.c:3025 -#: rewrite/rewriteHandler.c:502 rewrite/rewriteManip.c:1018 +#: parser/parse_utilcmd.c:3175 parser/parse_utilcmd.c:3276 +#: rewrite/rewriteHandler.c:508 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "UNION/INTERSECTION/EXCEPT mit Bedingung sind nicht implementiert" -#: parser/parse_utilcmd.c:2942 +#: parser/parse_utilcmd.c:3193 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "ON-SELECT-Regel kann nicht OLD verwenden" -#: parser/parse_utilcmd.c:2946 +#: parser/parse_utilcmd.c:3197 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "ON-SELECT-Regel kann nicht NEW verwenden" -#: parser/parse_utilcmd.c:2955 +#: parser/parse_utilcmd.c:3206 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "ON-INSERT-Regel kann nicht OLD verwenden" -#: parser/parse_utilcmd.c:2961 +#: parser/parse_utilcmd.c:3212 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "ON-DELETE-Regel kann nicht NEW verwenden" -#: parser/parse_utilcmd.c:2989 +#: parser/parse_utilcmd.c:3240 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "in WITH-Anfrage kann nicht auf OLD verweisen werden" -#: parser/parse_utilcmd.c:2996 +#: parser/parse_utilcmd.c:3247 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "in WITH-Anfrage kann nicht auf NEW verwiesen werden" -#: parser/parse_utilcmd.c:3455 +#: parser/parse_utilcmd.c:3706 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "falsch platzierte DEFERRABLE-Klausel" -#: parser/parse_utilcmd.c:3460 parser/parse_utilcmd.c:3475 +#: parser/parse_utilcmd.c:3711 parser/parse_utilcmd.c:3726 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "mehrere DEFERRABLE/NOT DEFERRABLE-Klauseln sind nicht erlaubt" -#: parser/parse_utilcmd.c:3470 +#: parser/parse_utilcmd.c:3721 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "falsch platzierte NOT DEFERRABLE-Klausel" -#: parser/parse_utilcmd.c:3491 +#: parser/parse_utilcmd.c:3742 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "falsch platzierte INITIALLY DEFERRED-Klausel" -#: parser/parse_utilcmd.c:3496 parser/parse_utilcmd.c:3522 +#: parser/parse_utilcmd.c:3747 parser/parse_utilcmd.c:3773 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "mehrere INITIALLY IMMEDIATE/DEFERRED-Klauseln sind nicht erlaubt" -#: parser/parse_utilcmd.c:3517 +#: parser/parse_utilcmd.c:3768 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "falsch platzierte INITIALLY IMMEDIATE-Klausel" -#: parser/parse_utilcmd.c:3708 +#: parser/parse_utilcmd.c:3959 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE gibt ein Schema an (%s) welches nicht gleich dem zu erzeugenden Schema ist (%s)" -#: parser/parse_utilcmd.c:3743 +#: parser/parse_utilcmd.c:3994 #, c-format msgid "\"%s\" is not a partitioned table" msgstr "»%s« ist keine partitionierte Tabelle" -#: parser/parse_utilcmd.c:3750 +#: parser/parse_utilcmd.c:4001 #, c-format msgid "table \"%s\" is not partitioned" msgstr "Tabelle »%s« ist nicht partitioniert" -#: parser/parse_utilcmd.c:3757 +#: parser/parse_utilcmd.c:4008 #, c-format msgid "index \"%s\" is not partitioned" msgstr "Index »%s« ist nicht partitioniert" -#: parser/parse_utilcmd.c:3797 -#, fuzzy, c-format -#| msgid "Partitioned tables cannot have ROW triggers." +#: parser/parse_utilcmd.c:4048 +#, c-format msgid "a hash-partitioned table may not have a default partition" -msgstr "Partitionierte Tabellen können keine ROW-Trigger haben." +msgstr "eine hashpartitionierte Tabelle kann keine Standardpartition haben" -#: parser/parse_utilcmd.c:3814 -#, fuzzy, c-format -#| msgid "invalid bound specification for a list partition" +#: parser/parse_utilcmd.c:4065 +#, c-format msgid "invalid bound specification for a hash partition" -msgstr "ungültige Begrenzungsangabe für eine Listenpartition" +msgstr "ungültige Begrenzungsangabe für eine Hash-Partition" -#: parser/parse_utilcmd.c:3820 partitioning/partbounds.c:4688 -#, fuzzy, c-format -#| msgid "%s: duration must be a positive integer (duration is \"%d\")\n" +#: parser/parse_utilcmd.c:4071 partitioning/partbounds.c:4698 +#, c-format msgid "modulus for hash partition must be a positive integer" -msgstr "%s: Dauer muss eine positive ganze Zahl sein (Dauer ist »%d«)\n" +msgstr "Modulus für Hashpartition muss eine positive ganze Zahl sein" -#: parser/parse_utilcmd.c:3827 partitioning/partbounds.c:4696 -#, fuzzy, c-format -#| msgid "precision for type float must be less than 54 bits" +#: parser/parse_utilcmd.c:4078 partitioning/partbounds.c:4706 +#, c-format msgid "remainder for hash partition must be less than modulus" -msgstr "Präzision von Typ float muss weniger als 54 Bits sein" +msgstr "Rest für Hashpartition muss kleiner als Modulus sein" -#: parser/parse_utilcmd.c:3840 +#: parser/parse_utilcmd.c:4091 #, c-format msgid "invalid bound specification for a list partition" msgstr "ungültige Begrenzungsangabe für eine Listenpartition" -#: parser/parse_utilcmd.c:3893 +#: parser/parse_utilcmd.c:4144 #, c-format msgid "invalid bound specification for a range partition" msgstr "ungültige Begrenzungsangabe für eine Bereichspartition" -#: parser/parse_utilcmd.c:3899 +#: parser/parse_utilcmd.c:4150 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM muss genau einen Wert pro Partitionierungsspalte angeben" -#: parser/parse_utilcmd.c:3903 +#: parser/parse_utilcmd.c:4154 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO muss genau einen Wert pro Partitionierungsspalte angeben" -#: parser/parse_utilcmd.c:4017 +#: parser/parse_utilcmd.c:4268 #, c-format msgid "cannot specify NULL in range bound" msgstr "NULL kann nicht in der Bereichsgrenze angegeben werden" -#: parser/parse_utilcmd.c:4066 +#: parser/parse_utilcmd.c:4317 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "jede Begrenzung, die auf MAXVALUE folgt, muss auch MAXVALUE sein" -#: parser/parse_utilcmd.c:4073 +#: parser/parse_utilcmd.c:4324 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "jede Begrenzung, die auf MINVALUE folgt, muss auch MINVALUE sein" -#: parser/parse_utilcmd.c:4115 -#, fuzzy, c-format -#| msgid "could not determine which collation to use for partition expression" -msgid "could not determine which collation to use for partition bound expression" -msgstr "konnte die für den Partitionierungsausdruck zu verwendende Sortierfolge nicht bestimmen" - -#: parser/parse_utilcmd.c:4132 -#, fuzzy, c-format -#| msgid "number of columns does not match number of values" -msgid "collation of partition bound value for column \"%s\" does not match partition key collation \"%s\"" -msgstr "Anzahl der Spalten stimmt nicht mit der Anzahl der Werte überein" - -#: parser/parse_utilcmd.c:4149 +#: parser/parse_utilcmd.c:4367 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "angegebener Wert kann nicht in Typ %s für Spalte »%s« umgewandelt werden" -#: parser/parser.c:302 scan.l:1329 +#: parser/parser.c:247 +msgid "UESCAPE must be followed by a simple string literal" +msgstr "auf UESCAPE muss eine einfache Zeichenkettenkonstante folgen" + +#: parser/parser.c:252 +msgid "invalid Unicode escape character" +msgstr "ungültiges Unicode-Escape-Zeichen" + +#: parser/parser.c:321 scan.l:1329 #, c-format msgid "invalid Unicode escape value" msgstr "ungültiger Unicode-Escape-Wert" -#: parser/parser.c:449 scan.l:677 +#: parser/parser.c:468 scan.l:677 utils/adt/varlena.c:6566 #, c-format msgid "invalid Unicode escape" msgstr "ungültiges Unicode-Escape" -#: parser/parser.c:450 -#, fuzzy, c-format -#| msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." +#: parser/parser.c:469 +#, c-format msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." -msgstr "Unicode-Escapes müssen \\uXXXX oder \\UXXXXXXXX sein." +msgstr "Unicode-Escapes müssen \\XXXX oder \\+XXXXXX sein." -#: parser/parser.c:478 scan.l:638 scan.l:654 scan.l:670 +#: parser/parser.c:497 scan.l:638 scan.l:654 scan.l:670 +#: utils/adt/varlena.c:6591 #, c-format msgid "invalid Unicode surrogate pair" msgstr "ungültiges Unicode-Surrogatpaar" -#: parser/scansup.c:203 +#: parser/scansup.c:101 #, c-format -msgid "identifier \"%s\" will be truncated to \"%s\"" -msgstr "Bezeichner »%s« wird auf »%s« gekürzt" +msgid "identifier \"%s\" will be truncated to \"%.*s\"" +msgstr "Bezeichner »%s« wird auf »%.*s« gekürzt" -#: partitioning/partbounds.c:2828 -#, fuzzy, c-format -#| msgid "partition \"%s\" would overlap partition \"%s\"" +#: partitioning/partbounds.c:2821 +#, c-format msgid "partition \"%s\" conflicts with existing default partition \"%s\"" -msgstr "Partition »%s« würde sich mit Partition »%s« überlappen" +msgstr "Partition »%s« kollidiert mit bestehender Standardpartition »%s«" -#: partitioning/partbounds.c:2887 +#: partitioning/partbounds.c:2870 partitioning/partbounds.c:2885 +#: partitioning/partbounds.c:2901 #, c-format msgid "every hash partition modulus must be a factor of the next larger modulus" -msgstr "" +msgstr "der Modulus jeder Hashpartition muss ein Faktor des nächstgrößeren Modulus sein" + +#: partitioning/partbounds.c:2871 partitioning/partbounds.c:2902 +#, c-format +msgid "The new modulus %d is not a factor of %d, the modulus of existing partition \"%s\"." +msgstr "Der neue Modulus %d ist kein Faktor von %d, dem Modulus der bestehenden Partition »%s«." + +#: partitioning/partbounds.c:2886 +#, c-format +msgid "The new modulus %d is not divisible by %d, the modulus of existing partition \"%s\"." +msgstr "Der neue Modulus %d ist nicht durch %d, den Modulus der bestehenden Parition »%s«, teilbar." -#: partitioning/partbounds.c:2983 +#: partitioning/partbounds.c:3015 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "leere Bereichsgrenze angegeben für Partition »%s«" -#: partitioning/partbounds.c:2985 +#: partitioning/partbounds.c:3017 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "Angegebene Untergrenze %s ist größer als oder gleich der Obergrenze %s." -#: partitioning/partbounds.c:3082 +#: partitioning/partbounds.c:3129 #, c-format msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "Partition »%s« würde sich mit Partition »%s« überlappen" -#: partitioning/partbounds.c:3199 -#, fuzzy, c-format -#| msgid "relation \"%s\" is not a partition of relation \"%s\"" +#: partitioning/partbounds.c:3246 +#, c-format msgid "skipped scanning foreign table \"%s\" which is a partition of default partition \"%s\"" -msgstr "Relation »%s« ist keine Partition von Relation »%s«" +msgstr "Scannen von Fremdtabelle »%s«, die eine Partition der Standardpartition »%s« ist, wurde übersprungen" -#: partitioning/partbounds.c:4692 +#: partitioning/partbounds.c:4702 #, c-format msgid "remainder for hash partition must be a non-negative integer" -msgstr "" +msgstr "Rest für Hashpartition muss eine nichtnegative ganze Zahl sein" -#: partitioning/partbounds.c:4719 +#: partitioning/partbounds.c:4726 #, c-format msgid "\"%s\" is not a hash partitioned table" msgstr "»%s« ist keine Hash-partitionierte Tabelle" -#: partitioning/partbounds.c:4730 partitioning/partbounds.c:4847 -#, fuzzy, c-format -#| msgid "number of columns does not match number of values" +#: partitioning/partbounds.c:4737 partitioning/partbounds.c:4854 +#, c-format msgid "number of partitioning columns (%d) does not match number of partition keys provided (%d)" -msgstr "Anzahl der Spalten stimmt nicht mit der Anzahl der Werte überein" +msgstr "Anzahl der Partitionierungsspalten (%d) stimmt nicht mit der Anzahl der angegebenen Partitionierungsschlüssel (%d) überein" -#: partitioning/partbounds.c:4752 partitioning/partbounds.c:4784 +#: partitioning/partbounds.c:4759 +#, fuzzy, c-format +#| msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" +msgid "column %d of the partition key has type %s, but supplied value is of type %s" +msgstr "Spalte %d des Partitionierungsschlüssels hat Typ »%s«, aber der angegebene Wert hat Typ »%s«" + +#: partitioning/partbounds.c:4791 #, c-format msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" msgstr "Spalte %d des Partitionierungsschlüssels hat Typ »%s«, aber der angegebene Wert hat Typ »%s«" -#: port/pg_sema.c:209 port/pg_shmem.c:640 port/posix_sema.c:209 -#: port/sysv_sema.c:327 port/sysv_shmem.c:640 +#: port/pg_sema.c:209 port/pg_shmem.c:668 port/posix_sema.c:209 +#: port/sysv_sema.c:327 port/sysv_shmem.c:668 #, c-format msgid "could not stat data directory \"%s\": %m" msgstr "konnte »stat« für Datenverzeichnis »%s« nicht ausführen: %m" -#: port/pg_shmem.c:216 port/sysv_shmem.c:216 +#: port/pg_shmem.c:217 port/sysv_shmem.c:217 #, c-format msgid "could not create shared memory segment: %m" msgstr "konnte Shared-Memory-Segment nicht erzeugen: %m" -#: port/pg_shmem.c:217 port/sysv_shmem.c:217 +#: port/pg_shmem.c:218 port/sysv_shmem.c:218 #, c-format msgid "Failed system call was shmget(key=%lu, size=%zu, 0%o)." msgstr "Fehlgeschlagener Systemaufruf war shmget(Key=%lu, Größe=%zu, 0%o)." -#: port/pg_shmem.c:221 port/sysv_shmem.c:221 +#: port/pg_shmem.c:222 port/sysv_shmem.c:222 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter, or possibly that it is less than your kernel's SHMMIN parameter.\n" @@ -17176,7 +17756,7 @@ msgstr "" "Dieser Fehler bedeutet gewöhnlich, dass das von PostgreSQL angeforderte Shared-Memory-Segment den Kernel-Parameter SHMMAX überschreitet, oder eventuell, dass es kleiner als der Kernel-Parameter SHMMIN ist.\n" "Die PostgreSQL-Dokumentation enthält weitere Informationen über die Konfiguration von Shared Memory." -#: port/pg_shmem.c:228 port/sysv_shmem.c:228 +#: port/pg_shmem.c:229 port/sysv_shmem.c:229 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMALL parameter. You might need to reconfigure the kernel with larger SHMALL.\n" @@ -17185,7 +17765,7 @@ msgstr "" "Dieser Fehler bedeutet gewöhnlich, dass das von PostgreSQL angeforderte Shared-Memory-Segment den Kernel-Parameter SHMALL überschreitet. Sie müssen eventuell den Kernel mit einem größeren SHMALL neu konfigurieren.\n" "Die PostgreSQL-Dokumentation enthält weitere Informationen über die Konfiguration von Shared Memory." -#: port/pg_shmem.c:234 port/sysv_shmem.c:234 +#: port/pg_shmem.c:235 port/sysv_shmem.c:235 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs either if all available shared memory IDs have been taken, in which case you need to raise the SHMMNI parameter in your kernel, or because the system's overall limit for shared memory has been reached.\n" @@ -17194,29 +17774,29 @@ msgstr "" "Dieser Fehler bedeutet *nicht*, dass kein Platz mehr auf der Festplatte ist. Er tritt auf, wenn entweder alle verfügbaren Shared-Memory-IDs aufgebraucht sind, dann müssen den Kernelparameter SHMMNI erhöhen, oder weil die Systemhöchstgrenze für Shared Memory insgesamt erreicht wurde.\n" "Die PostgreSQL-Dokumentation enthält weitere Informationen über die Konfiguration von Shared Memory." -#: port/pg_shmem.c:578 port/sysv_shmem.c:578 +#: port/pg_shmem.c:606 port/sysv_shmem.c:606 #, c-format msgid "could not map anonymous shared memory: %m" msgstr "konnte anonymes Shared Memory nicht mappen: %m" -#: port/pg_shmem.c:580 port/sysv_shmem.c:580 +#: port/pg_shmem.c:608 port/sysv_shmem.c:608 #, c-format msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently %zu bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections." msgstr "" "Dieser Fehler bedeutet gewöhnlich, dass das von PostgreSQL angeforderte Shared-Memory-Segment den verfügbaren Speicher, Swap-Space oder Huge Pages überschreitet. Um die benötigte Shared-Memory-Größe zu reduzieren (aktuell %zu Bytes), reduzieren Sie den Shared-Memory-Verbrauch von PostgreSQL, beispielsweise indem Sie »shared_buffers« oder »max_connections« reduzieren.\n" "Die PostgreSQL-Dokumentation enthält weitere Informationen über die Konfiguration von Shared Memory." -#: port/pg_shmem.c:648 port/sysv_shmem.c:648 +#: port/pg_shmem.c:676 port/sysv_shmem.c:676 #, c-format msgid "huge pages not supported on this platform" msgstr "Huge Pages werden auf dieser Plattform nicht unterstützt" -#: port/pg_shmem.c:709 port/sysv_shmem.c:709 utils/init/miscinit.c:1137 +#: port/pg_shmem.c:737 port/sysv_shmem.c:737 utils/init/miscinit.c:1167 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "bereits bestehender Shared-Memory-Block (Schlüssel %lu, ID %lu) wird noch benutzt" -#: port/pg_shmem.c:712 port/sysv_shmem.c:712 utils/init/miscinit.c:1139 +#: port/pg_shmem.c:740 port/sysv_shmem.c:740 utils/init/miscinit.c:1169 #, c-format msgid "Terminate any old server processes associated with data directory \"%s\"." msgstr "Beenden Sie alle alten Serverprozesse, die zum Datenverzeichnis »%s« gehören." @@ -17300,528 +17880,515 @@ msgstr "konnte Semaphore nicht entsperren: Fehlercode %lu" msgid "could not try-lock semaphore: error code %lu" msgstr "konnte Semaphore nicht versuchsweise sperren: Fehlercode %lu" -#: port/win32_shmem.c:144 port/win32_shmem.c:152 port/win32_shmem.c:164 -#: port/win32_shmem.c:179 -#, fuzzy, c-format -#| msgid "could not create shared memory segment: error code %lu" -msgid "could not enable Lock Pages in Memory user right: error code %lu" -msgstr "konnte Shared-Memory-Segment nicht erzeugen: Fehlercode %lu" +#: port/win32_shmem.c:144 port/win32_shmem.c:155 port/win32_shmem.c:167 +#: port/win32_shmem.c:183 +#, c-format +msgid "could not enable user right \"%s\": error code %lu" +msgstr "konnte Benutzerrecht »%s« nicht aktivieren: Fehlercode %lu" + +#. translator: This is a term from Windows and should be translated to match the Windows localization. +#: port/win32_shmem.c:146 port/win32_shmem.c:155 port/win32_shmem.c:167 +#: port/win32_shmem.c:178 port/win32_shmem.c:180 port/win32_shmem.c:183 +msgid "Lock pages in memory" +msgstr "Sperren von Seiten im Speicher" -#: port/win32_shmem.c:145 port/win32_shmem.c:153 port/win32_shmem.c:165 -#: port/win32_shmem.c:180 +#: port/win32_shmem.c:148 port/win32_shmem.c:156 port/win32_shmem.c:168 +#: port/win32_shmem.c:184 #, c-format msgid "Failed system call was %s." msgstr "Fehlgeschlagener Systemaufruf war %s." -#: port/win32_shmem.c:175 -#, fuzzy, c-format -#| msgid "could not create shared memory segment: %m" -msgid "could not enable Lock Pages in Memory user right" -msgstr "konnte Shared-Memory-Segment nicht erzeugen: %m" +#: port/win32_shmem.c:178 +#, c-format +msgid "could not enable user right \"%s\"" +msgstr "konnte Benutzerrecht »%s« nicht aktivieren" -#: port/win32_shmem.c:176 +#: port/win32_shmem.c:179 #, c-format -msgid "Assign Lock Pages in Memory user right to the Windows user account which runs PostgreSQL." -msgstr "" +msgid "Assign user right \"%s\" to the Windows user account which runs PostgreSQL." +msgstr "Weisen Sie dem Windows-Benutzerkonto, unter dem PostgreSQL läuft, das Benutzerrecht »%s« zu." -#: port/win32_shmem.c:233 -#, fuzzy, c-format -#| msgid "The server (version %s) does not support tablespaces.\n" +#: port/win32_shmem.c:237 +#, c-format msgid "the processor does not support large pages" -msgstr "Der Server (Version %s) unterstützt keine Tablespaces.\n" - -#: port/win32_shmem.c:235 port/win32_shmem.c:240 -#, fuzzy, c-format -#| msgid "disabling triggers for %s\n" -msgid "disabling huge pages" -msgstr "schalte Trigger für %s aus\n" +msgstr "der Prozessor unterstützt keine Large Pages" -#: port/win32_shmem.c:302 port/win32_shmem.c:338 port/win32_shmem.c:356 +#: port/win32_shmem.c:306 port/win32_shmem.c:342 port/win32_shmem.c:360 #, c-format msgid "could not create shared memory segment: error code %lu" msgstr "konnte Shared-Memory-Segment nicht erzeugen: Fehlercode %lu" -#: port/win32_shmem.c:303 +#: port/win32_shmem.c:307 #, c-format msgid "Failed system call was CreateFileMapping(size=%zu, name=%s)." msgstr "Fehlgeschlagener Systemaufruf war CreateFileMapping(Größe=%zu, Name=%s)." -#: port/win32_shmem.c:328 +#: port/win32_shmem.c:332 #, c-format msgid "pre-existing shared memory block is still in use" msgstr "bereits bestehender Shared-Memory-Block wird noch benutzt" -#: port/win32_shmem.c:329 +#: port/win32_shmem.c:333 #, c-format msgid "Check if there are any old server processes still running, and terminate them." msgstr "Prüfen Sie, ob irgendwelche alten Serverprozesse noch laufen und beenden Sie diese." -#: port/win32_shmem.c:339 +#: port/win32_shmem.c:343 #, c-format msgid "Failed system call was DuplicateHandle." msgstr "Fehlgeschlagener Systemaufruf war DuplicateHandle." -#: port/win32_shmem.c:357 +#: port/win32_shmem.c:361 #, c-format msgid "Failed system call was MapViewOfFileEx." msgstr "Fehlgeschlagener Systemaufruf war MapViewOfFileEx." -#: postmaster/autovacuum.c:406 +#: postmaster/autovacuum.c:411 #, c-format msgid "could not fork autovacuum launcher process: %m" msgstr "konnte Autovacuum-Launcher-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/autovacuum.c:442 -#, c-format -msgid "autovacuum launcher started" -msgstr "Autovacuum-Launcher startet" - -#: postmaster/autovacuum.c:840 -#, c-format -msgid "autovacuum launcher shutting down" -msgstr "Autovacuum-Launcher fährt herunter" - -#: postmaster/autovacuum.c:1478 +#: postmaster/autovacuum.c:1489 #, c-format msgid "could not fork autovacuum worker process: %m" msgstr "konnte Autovacuum-Worker-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/autovacuum.c:1687 -#, c-format -msgid "autovacuum: processing database \"%s\"" -msgstr "Autovacuum: bearbeite Datenbank »%s«" - -#: postmaster/autovacuum.c:2257 +#: postmaster/autovacuum.c:2326 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "Autovacuum: lösche verwaiste temporäre Tabelle »%s.%s.%s«" -#: postmaster/autovacuum.c:2486 +#: postmaster/autovacuum.c:2555 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "automatisches Vacuum der Tabelle »%s.%s.%s«" -#: postmaster/autovacuum.c:2489 +#: postmaster/autovacuum.c:2558 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "automatisches Analysieren der Tabelle »%s.%s.%s«" -#: postmaster/autovacuum.c:2682 +#: postmaster/autovacuum.c:2751 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "verarbeite Arbeitseintrag für Relation »%s.%s.%s«" -#: postmaster/autovacuum.c:3286 +#: postmaster/autovacuum.c:3432 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "Autovacuum wegen Fehlkonfiguration nicht gestartet" -#: postmaster/autovacuum.c:3287 +#: postmaster/autovacuum.c:3433 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Schalten Sie die Option »track_counts« ein." -#: postmaster/bgworker.c:394 postmaster/bgworker.c:834 -#, c-format -msgid "registering background worker \"%s\"" -msgstr "registriere Background-Worker »%s«" - -#: postmaster/bgworker.c:426 +#: postmaster/bgworker.c:256 #, c-format -msgid "unregistering background worker \"%s\"" -msgstr "deregistriere Background-Worker »%s«" +msgid "inconsistent background worker state (max_worker_processes=%d, total_slots=%d)" +msgstr "" -#: postmaster/bgworker.c:591 +#: postmaster/bgworker.c:650 #, c-format msgid "background worker \"%s\": must attach to shared memory in order to request a database connection" msgstr "Background-Worker »%s«: muss mit Shared Memory verbinden, um eine Datenbankverbindung anzufordern" -#: postmaster/bgworker.c:600 +#: postmaster/bgworker.c:659 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "Background-Worker »%s«: kann kein Datenbankzugriff anfordern, wenn er nach Postmaster-Start gestartet hat" -#: postmaster/bgworker.c:614 +#: postmaster/bgworker.c:673 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "Background-Worker »%s«: ungültiges Neustart-Intervall" -#: postmaster/bgworker.c:629 +#: postmaster/bgworker.c:688 #, c-format msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "Background-Worker »%s«: parallele Arbeitsprozesse dürfen nicht für Neustart konfiguriert sein" -#: postmaster/bgworker.c:653 +#: postmaster/bgworker.c:712 tcop/postgres.c:3182 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "Background-Worker »%s« wird abgebrochen aufgrund von Anweisung des Administrators" -#: postmaster/bgworker.c:842 +#: postmaster/bgworker.c:893 #, c-format msgid "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "Background-Worker »%s«: muss in shared_preload_libraries registriert sein" -#: postmaster/bgworker.c:854 +#: postmaster/bgworker.c:905 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "Background-Worker »%s«: nur dynamische Background-Worker können Benachrichtigung verlangen" -#: postmaster/bgworker.c:869 +#: postmaster/bgworker.c:920 #, c-format msgid "too many background workers" msgstr "zu viele Background-Worker" -#: postmaster/bgworker.c:870 +#: postmaster/bgworker.c:921 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." msgstr[0] "Mit den aktuellen Einstellungen können bis zu %d Background-Worker registriert werden." msgstr[1] "Mit den aktuellen Einstellungen können bis zu %d Background-Worker registriert werden." -#: postmaster/bgworker.c:874 +#: postmaster/bgworker.c:925 #, c-format msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Erhöhen Sie eventuell den Konfigurationsparameter »max_worker_processes«." -#: postmaster/checkpointer.c:418 +#: postmaster/checkpointer.c:428 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" msgstr[0] "Checkpoints passieren zu oft (alle %d Sekunde)" msgstr[1] "Checkpoints passieren zu oft (alle %d Sekunden)" -#: postmaster/checkpointer.c:422 +#: postmaster/checkpointer.c:432 #, c-format msgid "Consider increasing the configuration parameter \"max_wal_size\"." msgstr "Erhöhen Sie eventuell den Konfigurationsparameter »max_wal_size«." -#: postmaster/checkpointer.c:1025 +#: postmaster/checkpointer.c:1056 #, c-format msgid "checkpoint request failed" msgstr "Checkpoint-Anforderung fehlgeschlagen" -#: postmaster/checkpointer.c:1026 +#: postmaster/checkpointer.c:1057 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Einzelheiten finden Sie in den letzten Meldungen im Serverlog." -#: postmaster/checkpointer.c:1210 -#, c-format -msgid "compacted fsync request queue from %d entries to %d entries" -msgstr "fsync-Anfrageschlange von %d Einträgen auf %d Einträge zusammengefasst" - -#: postmaster/pgarch.c:156 -#, c-format -msgid "could not fork archiver: %m" -msgstr "konnte Archivierer nicht starten (fork-Fehler): %m" - -#: postmaster/pgarch.c:434 +#: postmaster/pgarch.c:372 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "archive_mode ist an, aber archive_command ist nicht gesetzt" -#: postmaster/pgarch.c:456 -#, fuzzy, c-format -#| msgid "could not create archive status file \"%s\": %m" +#: postmaster/pgarch.c:394 +#, c-format msgid "removed orphan archive status file \"%s\"" -msgstr "konnte Archivstatusdatei »%s« nicht erstellen: %m" +msgstr "verwaiste Archivstatusdatei »%s« wurde entfernt" -#: postmaster/pgarch.c:466 -#, fuzzy, c-format -#| msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" +#: postmaster/pgarch.c:404 +#, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" -msgstr "Archivieren der Write-Ahead-Log-Datei »%s« schlug zu oft fehl, wird später erneut versucht" +msgstr "Entfernen der verwaisten Archivstatusdatei »%s« schlug zu oft fehl, wird später erneut versucht" -#: postmaster/pgarch.c:502 +#: postmaster/pgarch.c:440 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "Archivieren der Write-Ahead-Log-Datei »%s« schlug zu oft fehl, wird später erneut versucht" -#: postmaster/pgarch.c:603 +#: postmaster/pgarch.c:541 #, c-format msgid "archive command failed with exit code %d" msgstr "Archivbefehl ist fehlgeschlagen mit Statuscode %d" -#: postmaster/pgarch.c:605 postmaster/pgarch.c:615 postmaster/pgarch.c:621 -#: postmaster/pgarch.c:630 +#: postmaster/pgarch.c:543 postmaster/pgarch.c:553 postmaster/pgarch.c:559 +#: postmaster/pgarch.c:568 #, c-format msgid "The failed archive command was: %s" msgstr "Der fehlgeschlagene Archivbefehl war: %s" -#: postmaster/pgarch.c:612 +#: postmaster/pgarch.c:550 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "Archivbefehl wurde durch Ausnahme 0x%X beendet" -#: postmaster/pgarch.c:614 postmaster/postmaster.c:3749 +#: postmaster/pgarch.c:552 postmaster/postmaster.c:3721 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "Sehen Sie die Beschreibung des Hexadezimalwerts in der C-Include-Datei »ntstatus.h« nach." -#: postmaster/pgarch.c:619 +#: postmaster/pgarch.c:557 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "Archivbefehl wurde von Signal %d beendet: %s" -#: postmaster/pgarch.c:628 +#: postmaster/pgarch.c:566 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "Archivbefehl hat mit unbekanntem Status %d beendet" -#: postmaster/pgstat.c:413 +#: postmaster/pgstat.c:420 #, c-format msgid "could not resolve \"localhost\": %s" msgstr "konnte »localhost« nicht auflösen: %s" -#: postmaster/pgstat.c:436 +#: postmaster/pgstat.c:443 #, c-format msgid "trying another address for the statistics collector" msgstr "andere Adresse für Statistiksammelprozess wird versucht" -#: postmaster/pgstat.c:445 +#: postmaster/pgstat.c:452 #, c-format msgid "could not create socket for statistics collector: %m" msgstr "konnte Socket für Statistiksammelprozess nicht erzeugen: %m" -#: postmaster/pgstat.c:457 +#: postmaster/pgstat.c:464 #, c-format msgid "could not bind socket for statistics collector: %m" msgstr "konnte Socket für Statistiksammelprozess nicht binden: %m" -#: postmaster/pgstat.c:468 +#: postmaster/pgstat.c:475 #, c-format msgid "could not get address of socket for statistics collector: %m" msgstr "konnte Adresse für Socket für Statistiksammelprozess nicht ermitteln: %m" -#: postmaster/pgstat.c:484 +#: postmaster/pgstat.c:491 #, c-format msgid "could not connect socket for statistics collector: %m" msgstr "konnte nicht mit Socket für Statistiksammelprozess verbinden: %m" -#: postmaster/pgstat.c:505 +#: postmaster/pgstat.c:512 #, c-format msgid "could not send test message on socket for statistics collector: %m" msgstr "konnte Testnachricht auf Socket für Statistiksammelprozess nicht senden: %m" -#: postmaster/pgstat.c:531 +#: postmaster/pgstat.c:538 #, c-format msgid "select() failed in statistics collector: %m" msgstr "select() im Statistiksammelprozess fehlgeschlagen: %m" -#: postmaster/pgstat.c:546 +#: postmaster/pgstat.c:553 #, c-format msgid "test message did not get through on socket for statistics collector" msgstr "Testnachricht auf Socket für Statistiksammelprozess kam nicht durch" -#: postmaster/pgstat.c:561 +#: postmaster/pgstat.c:568 #, c-format msgid "could not receive test message on socket for statistics collector: %m" msgstr "konnte Testnachricht auf Socket für Statistiksammelprozess nicht empfangen: %m" -#: postmaster/pgstat.c:571 +#: postmaster/pgstat.c:578 #, c-format msgid "incorrect test message transmission on socket for statistics collector" msgstr "fehlerhafte Übertragung der Testnachricht auf Socket für Statistiksammelprozess" -#: postmaster/pgstat.c:594 +#: postmaster/pgstat.c:601 #, c-format msgid "could not set statistics collector socket to nonblocking mode: %m" msgstr "konnte Socket von Statistiksammelprozess nicht auf nicht blockierenden Modus setzen: %m" -#: postmaster/pgstat.c:636 +#: postmaster/pgstat.c:645 #, c-format msgid "disabling statistics collector for lack of working socket" msgstr "Statistiksammelprozess abgeschaltet wegen nicht funkionierender Socket" -#: postmaster/pgstat.c:783 +#: postmaster/pgstat.c:792 #, c-format msgid "could not fork statistics collector: %m" msgstr "konnte Statistiksammelprozess nicht starten (fork-Fehler): %m" -#: postmaster/pgstat.c:1370 +#: postmaster/pgstat.c:1461 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "unbekanntes Reset-Ziel: »%s«" -#: postmaster/pgstat.c:1371 -#, c-format -msgid "Target must be \"archiver\" or \"bgwriter\"." +#: postmaster/pgstat.c:1462 +#, fuzzy, c-format +#| msgid "Target must be \"archiver\" or \"bgwriter\"." +msgid "Target must be \"archiver\", \"bgwriter\", \"wal\" or \"prefetch_recovery\"." msgstr "Das Reset-Ziel muss »archiver« oder »bgwriter« sein." -#: postmaster/pgstat.c:4557 +#: postmaster/pgstat.c:3330 #, c-format msgid "could not read statistics message: %m" msgstr "konnte Statistiknachricht nicht lesen: %m" -#: postmaster/pgstat.c:4879 postmaster/pgstat.c:5042 +#: postmaster/pgstat.c:3680 postmaster/pgstat.c:3872 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "konnte temporäre Statistikdatei »%s« nicht öffnen: %m" -#: postmaster/pgstat.c:4952 postmaster/pgstat.c:5087 +#: postmaster/pgstat.c:3782 postmaster/pgstat.c:3917 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "konnte temporäre Statistikdatei »%s« nicht schreiben: %m" -#: postmaster/pgstat.c:4961 postmaster/pgstat.c:5096 +#: postmaster/pgstat.c:3791 postmaster/pgstat.c:3926 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "konnte temporäre Statistikdatei »%s« nicht schließen: %m" -#: postmaster/pgstat.c:4969 postmaster/pgstat.c:5104 +#: postmaster/pgstat.c:3799 postmaster/pgstat.c:3934 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "konnte temporäre Statistikdatei »%s« nicht in »%s« umbenennen: %m" -#: postmaster/pgstat.c:5201 postmaster/pgstat.c:5418 postmaster/pgstat.c:5572 +#: postmaster/pgstat.c:4033 postmaster/pgstat.c:4311 postmaster/pgstat.c:4469 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "konnte Statistikdatei »%s« nicht öffnen: %m" -#: postmaster/pgstat.c:5213 postmaster/pgstat.c:5223 postmaster/pgstat.c:5244 -#: postmaster/pgstat.c:5255 postmaster/pgstat.c:5277 postmaster/pgstat.c:5292 -#: postmaster/pgstat.c:5355 postmaster/pgstat.c:5430 postmaster/pgstat.c:5450 -#: postmaster/pgstat.c:5468 postmaster/pgstat.c:5484 postmaster/pgstat.c:5502 -#: postmaster/pgstat.c:5518 postmaster/pgstat.c:5584 postmaster/pgstat.c:5596 -#: postmaster/pgstat.c:5608 postmaster/pgstat.c:5619 postmaster/pgstat.c:5644 -#: postmaster/pgstat.c:5666 +#: postmaster/pgstat.c:4045 postmaster/pgstat.c:4055 postmaster/pgstat.c:4076 +#: postmaster/pgstat.c:4087 postmaster/pgstat.c:4098 postmaster/pgstat.c:4110 +#: postmaster/pgstat.c:4132 postmaster/pgstat.c:4147 postmaster/pgstat.c:4217 +#: postmaster/pgstat.c:4248 postmaster/pgstat.c:4323 postmaster/pgstat.c:4343 +#: postmaster/pgstat.c:4361 postmaster/pgstat.c:4377 postmaster/pgstat.c:4395 +#: postmaster/pgstat.c:4411 postmaster/pgstat.c:4481 postmaster/pgstat.c:4493 +#: postmaster/pgstat.c:4505 postmaster/pgstat.c:4516 postmaster/pgstat.c:4527 +#: postmaster/pgstat.c:4539 postmaster/pgstat.c:4564 postmaster/pgstat.c:4591 +#: postmaster/pgstat.c:4604 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "verfälschte Statistikdatei »%s«" -#: postmaster/pgstat.c:5795 +#: postmaster/pgstat.c:4713 +#, c-format +msgid "statistics collector's time %s is later than backend local time %s" +msgstr "" + +#: postmaster/pgstat.c:4743 #, c-format msgid "using stale statistics instead of current ones because stats collector is not responding" msgstr "verwende veraltete Statistiken anstatt aktueller, weil der Statistiksammelprozess nicht antwortet" -#: postmaster/pgstat.c:6125 +#: postmaster/pgstat.c:4870 +#, c-format +msgid "stats_timestamp %s is later than collector's time %s for database %u" +msgstr "" + +#: postmaster/pgstat.c:5080 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "Datenbank-Hash-Tabelle beim Aufräumen verfälscht --- Abbruch" -#: postmaster/postmaster.c:721 +#: postmaster/postmaster.c:742 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: ungültiges Argument für Option -f: »%s«\n" -#: postmaster/postmaster.c:807 +#: postmaster/postmaster.c:821 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: ungültiges Argument für Option -t: »%s«\n" -#: postmaster/postmaster.c:858 +#: postmaster/postmaster.c:872 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: ungültiges Argument: »%s«\n" -#: postmaster/postmaster.c:900 +#: postmaster/postmaster.c:914 #, c-format msgid "%s: superuser_reserved_connections (%d) must be less than max_connections (%d)\n" msgstr "%s: superuser_reserved_connections (%d) muss kleiner als max_connections (%d) sein\n" -#: postmaster/postmaster.c:907 +#: postmaster/postmaster.c:921 #, c-format msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" msgstr "WAL-Archivierung kann nicht eingeschaltet werden, wenn wal_level »minimal« ist" -#: postmaster/postmaster.c:910 +#: postmaster/postmaster.c:924 #, c-format msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" msgstr "WAL-Streaming (max_wal_senders > 0) benötigt wal_level »replica« oder »logical«" -#: postmaster/postmaster.c:918 +#: postmaster/postmaster.c:932 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: ungültige datetoken-Tabellen, bitte reparieren\n" -#: postmaster/postmaster.c:1035 +#: postmaster/postmaster.c:1049 #, c-format msgid "could not create I/O completion port for child queue" msgstr "konnte Ein-/Ausgabe-Completion-Port für Child-Queue nicht erzeugen" -#: postmaster/postmaster.c:1101 +#: postmaster/postmaster.c:1114 #, c-format msgid "ending log output to stderr" msgstr "Logausgabe nach stderr endet" -#: postmaster/postmaster.c:1102 +#: postmaster/postmaster.c:1115 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "Die weitere Logausgabe geht an Logziel »%s«." -#: postmaster/postmaster.c:1113 -#, fuzzy, c-format -#| msgid "starting up" +#: postmaster/postmaster.c:1126 +#, c-format msgid "starting %s" -msgstr "startet" +msgstr "%s startet" -#: postmaster/postmaster.c:1142 postmaster/postmaster.c:1240 -#: utils/init/miscinit.c:1597 +#: postmaster/postmaster.c:1155 postmaster/postmaster.c:1254 +#: utils/init/miscinit.c:1627 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "ungültige Listensyntax für Parameter »%s«" -#: postmaster/postmaster.c:1173 +#: postmaster/postmaster.c:1186 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "konnte Listen-Socket für »%s« nicht erzeugen" -#: postmaster/postmaster.c:1179 +#: postmaster/postmaster.c:1192 #, c-format msgid "could not create any TCP/IP sockets" msgstr "konnte keine TCP/IP-Sockets erstellen" -#: postmaster/postmaster.c:1262 +#: postmaster/postmaster.c:1224 +#, c-format +msgid "DNSServiceRegister() failed: error code %ld" +msgstr "DNSServiceRegister() fehlgeschlagen: Fehlercode %ld" + +#: postmaster/postmaster.c:1276 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "konnte Unix-Domain-Socket in Verzeichnis »%s« nicht erzeugen" -#: postmaster/postmaster.c:1268 +#: postmaster/postmaster.c:1282 #, c-format msgid "could not create any Unix-domain sockets" msgstr "konnte keine Unix-Domain-Sockets erzeugen" -#: postmaster/postmaster.c:1280 +#: postmaster/postmaster.c:1294 #, c-format msgid "no socket created for listening" msgstr "keine Listen-Socket erzeugt" -#: postmaster/postmaster.c:1311 +#: postmaster/postmaster.c:1325 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: konnte Rechte der externen PID-Datei »%s« nicht ändern: %s\n" -#: postmaster/postmaster.c:1315 +#: postmaster/postmaster.c:1329 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: konnte externe PID-Datei »%s« nicht schreiben: %s\n" -#: postmaster/postmaster.c:1348 utils/init/postinit.c:215 +#: postmaster/postmaster.c:1362 utils/init/postinit.c:216 #, c-format msgid "could not load pg_hba.conf" msgstr "konnte pg_hba.conf nicht laden" -#: postmaster/postmaster.c:1374 +#: postmaster/postmaster.c:1388 #, c-format msgid "postmaster became multithreaded during startup" msgstr "Postmaster ist während des Starts multithreaded geworden" -#: postmaster/postmaster.c:1375 +#: postmaster/postmaster.c:1389 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Setzen Sie die Umgebungsvariable LC_ALL auf eine gültige Locale." -#: postmaster/postmaster.c:1476 +#: postmaster/postmaster.c:1484 +#, c-format +msgid "%s: could not locate my own executable path" +msgstr "%s: konnte Pfad des eigenen Programs nicht finden" + +#: postmaster/postmaster.c:1491 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: konnte kein passendes Programm »postgres« finden" -#: postmaster/postmaster.c:1499 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1514 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Dies kann auf eine unvollständige PostgreSQL-Installation hindeuten, oder darauf, dass die Datei »%s« von ihrer richtigen Stelle verschoben worden ist." -#: postmaster/postmaster.c:1526 +#: postmaster/postmaster.c:1541 #, c-format msgid "" "%s: could not find the database system\n" @@ -17832,452 +18399,510 @@ msgstr "" "Es wurde im Verzeichnis »%s« erwartet,\n" "aber die Datei »%s« konnte nicht geöffnet werden: %s\n" -#: postmaster/postmaster.c:1703 +#: postmaster/postmaster.c:1718 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() fehlgeschlagen im Postmaster: %m" -#: postmaster/postmaster.c:1858 +#: postmaster/postmaster.c:1854 +#, c-format +msgid "issuing SIGKILL to recalcitrant children" +msgstr "" + +#: postmaster/postmaster.c:1875 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "führe sofortiges Herunterfahren durch, weil Sperrdatei im Datenverzeichnis ungültig ist" -#: postmaster/postmaster.c:1957 postmaster/postmaster.c:1988 +#: postmaster/postmaster.c:1978 postmaster/postmaster.c:2006 #, c-format msgid "incomplete startup packet" msgstr "unvollständiges Startpaket" -#: postmaster/postmaster.c:1969 +#: postmaster/postmaster.c:1990 #, c-format msgid "invalid length of startup packet" msgstr "ungültige Länge des Startpakets" -#: postmaster/postmaster.c:2027 +#: postmaster/postmaster.c:2045 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "konnte SSL-Verhandlungsantwort nicht senden: %m" -#: postmaster/postmaster.c:2054 +#: postmaster/postmaster.c:2077 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "konnte GSSAPI-Verhandlungsantwort nicht senden: %m" -#: postmaster/postmaster.c:2079 +#: postmaster/postmaster.c:2107 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "nicht unterstütztes Frontend-Protokoll %u.%u: Server unterstützt %u.0 bis %u.%u" -#: postmaster/postmaster.c:2143 utils/misc/guc.c:6779 utils/misc/guc.c:6815 -#: utils/misc/guc.c:6885 utils/misc/guc.c:8208 utils/misc/guc.c:11054 -#: utils/misc/guc.c:11088 +#: postmaster/postmaster.c:2171 utils/misc/guc.c:7145 utils/misc/guc.c:7181 +#: utils/misc/guc.c:7251 utils/misc/guc.c:8583 utils/misc/guc.c:11539 +#: utils/misc/guc.c:11580 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "ungültiger Wert für Parameter »%s«: »%s«" -#: postmaster/postmaster.c:2146 +#: postmaster/postmaster.c:2174 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Gültige Werte sind: »false«, 0, »true«, 1, »database«." -#: postmaster/postmaster.c:2191 +#: postmaster/postmaster.c:2219 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "ungültiges Layout des Startpakets: Abschluss als letztes Byte erwartet" -#: postmaster/postmaster.c:2229 +#: postmaster/postmaster.c:2236 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "kein PostgreSQL-Benutzername im Startpaket angegeben" -#: postmaster/postmaster.c:2293 +#: postmaster/postmaster.c:2300 #, c-format msgid "the database system is starting up" msgstr "das Datenbanksystem startet" -#: postmaster/postmaster.c:2298 +#: postmaster/postmaster.c:2306 +#, fuzzy, c-format +#| msgid "database system is ready to accept connections" +msgid "the database system is not yet accepting connections" +msgstr "Datenbanksystem ist bereit, um Verbindungen anzunehmen" + +#: postmaster/postmaster.c:2307 +#, fuzzy, c-format +#| msgid "consistent recovery state reached at %X/%X" +msgid "Consistent recovery state has not been yet reached." +msgstr "konsistenter Wiederherstellungszustand erreicht bei %X/%X" + +#: postmaster/postmaster.c:2311 +#, fuzzy, c-format +#| msgid "database system is ready to accept connections" +msgid "the database system is not accepting connections" +msgstr "Datenbanksystem ist bereit, um Verbindungen anzunehmen" + +#: postmaster/postmaster.c:2312 +#, c-format +msgid "Hot standby mode is disabled." +msgstr "Hot-Standby-Modus ist deaktiviert." + +#: postmaster/postmaster.c:2317 #, c-format msgid "the database system is shutting down" msgstr "das Datenbanksystem fährt herunter" -#: postmaster/postmaster.c:2303 +#: postmaster/postmaster.c:2322 #, c-format msgid "the database system is in recovery mode" msgstr "das Datenbanksystem ist im Wiederherstellungsmodus" -#: postmaster/postmaster.c:2308 storage/ipc/procarray.c:295 -#: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:362 +#: postmaster/postmaster.c:2327 storage/ipc/procarray.c:463 +#: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "tut mir leid, schon zu viele Verbindungen" -#: postmaster/postmaster.c:2398 +#: postmaster/postmaster.c:2417 #, c-format msgid "wrong key in cancel request for process %d" msgstr "falscher Schlüssel in Stornierungsanfrage für Prozess %d" -#: postmaster/postmaster.c:2410 +#: postmaster/postmaster.c:2429 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "PID %d in Stornierungsanfrage stimmte mit keinem Prozess überein" -#: postmaster/postmaster.c:2676 +#: postmaster/postmaster.c:2683 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "SIGHUP empfangen, Konfigurationsdateien werden neu geladen" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2702 postmaster/postmaster.c:2706 +#: postmaster/postmaster.c:2709 postmaster/postmaster.c:2713 #, c-format msgid "%s was not reloaded" msgstr "%s wurde nicht neu geladen" -#: postmaster/postmaster.c:2716 +#: postmaster/postmaster.c:2723 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL-Konfiguration wurde nicht neu geladen" -#: postmaster/postmaster.c:2772 +#: postmaster/postmaster.c:2779 #, c-format msgid "received smart shutdown request" msgstr "intelligentes Herunterfahren verlangt" -#: postmaster/postmaster.c:2830 +#: postmaster/postmaster.c:2825 #, c-format msgid "received fast shutdown request" msgstr "schnelles Herunterfahren verlangt" -#: postmaster/postmaster.c:2863 +#: postmaster/postmaster.c:2843 #, c-format msgid "aborting any active transactions" msgstr "etwaige aktive Transaktionen werden abgebrochen" -#: postmaster/postmaster.c:2897 +#: postmaster/postmaster.c:2867 #, c-format msgid "received immediate shutdown request" msgstr "sofortiges Herunterfahren verlangt" -#: postmaster/postmaster.c:2972 +#: postmaster/postmaster.c:2944 #, c-format msgid "shutdown at recovery target" msgstr "Herunterfahren beim Wiederherstellungsziel" -#: postmaster/postmaster.c:2990 postmaster/postmaster.c:3026 +#: postmaster/postmaster.c:2962 postmaster/postmaster.c:2998 msgid "startup process" msgstr "Startprozess" -#: postmaster/postmaster.c:2993 +#: postmaster/postmaster.c:2965 #, c-format msgid "aborting startup due to startup process failure" msgstr "Serverstart abgebrochen wegen Startprozessfehler" -#: postmaster/postmaster.c:3067 +#: postmaster/postmaster.c:3040 #, c-format msgid "database system is ready to accept connections" msgstr "Datenbanksystem ist bereit, um Verbindungen anzunehmen" -#: postmaster/postmaster.c:3088 +#: postmaster/postmaster.c:3061 msgid "background writer process" msgstr "Background-Writer-Prozess" -#: postmaster/postmaster.c:3142 +#: postmaster/postmaster.c:3115 msgid "checkpointer process" msgstr "Checkpointer-Prozess" -#: postmaster/postmaster.c:3158 +#: postmaster/postmaster.c:3131 msgid "WAL writer process" msgstr "WAL-Schreibprozess" -#: postmaster/postmaster.c:3173 +#: postmaster/postmaster.c:3146 msgid "WAL receiver process" msgstr "WAL-Receiver-Prozess" -#: postmaster/postmaster.c:3188 +#: postmaster/postmaster.c:3161 msgid "autovacuum launcher process" msgstr "Autovacuum-Launcher-Prozess" -#: postmaster/postmaster.c:3203 +#: postmaster/postmaster.c:3179 msgid "archiver process" msgstr "Archivierprozess" -#: postmaster/postmaster.c:3219 +#: postmaster/postmaster.c:3194 msgid "statistics collector process" msgstr "Statistiksammelprozess" -#: postmaster/postmaster.c:3233 +#: postmaster/postmaster.c:3208 msgid "system logger process" msgstr "Systemlogger-Prozess" -#: postmaster/postmaster.c:3297 +#: postmaster/postmaster.c:3272 #, c-format msgid "background worker \"%s\"" msgstr "Background-Worker »%s«" -#: postmaster/postmaster.c:3381 postmaster/postmaster.c:3401 -#: postmaster/postmaster.c:3408 postmaster/postmaster.c:3426 +#: postmaster/postmaster.c:3356 postmaster/postmaster.c:3376 +#: postmaster/postmaster.c:3383 postmaster/postmaster.c:3401 msgid "server process" msgstr "Serverprozess" -#: postmaster/postmaster.c:3480 +#: postmaster/postmaster.c:3455 #, c-format msgid "terminating any other active server processes" msgstr "aktive Serverprozesse werden abgebrochen" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3736 +#: postmaster/postmaster.c:3708 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) beendete mit Status %d" -#: postmaster/postmaster.c:3738 postmaster/postmaster.c:3750 -#: postmaster/postmaster.c:3760 postmaster/postmaster.c:3771 +#: postmaster/postmaster.c:3710 postmaster/postmaster.c:3722 +#: postmaster/postmaster.c:3732 postmaster/postmaster.c:3743 #, c-format msgid "Failed process was running: %s" msgstr "Der fehlgeschlagene Prozess führte aus: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3747 +#: postmaster/postmaster.c:3719 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) wurde durch Ausnahme 0x%X beendet" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3757 +#: postmaster/postmaster.c:3729 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) wurde von Signal %d beendet: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3769 +#: postmaster/postmaster.c:3741 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) beendete mit unbekanntem Status %d" -#: postmaster/postmaster.c:3952 +#: postmaster/postmaster.c:3956 #, c-format msgid "abnormal database system shutdown" msgstr "abnormales Herunterfahren des Datenbanksystems" -#: postmaster/postmaster.c:3992 +#: postmaster/postmaster.c:3996 #, c-format msgid "all server processes terminated; reinitializing" msgstr "alle Serverprozesse beendet; initialisiere neu" -#: postmaster/postmaster.c:4162 postmaster/postmaster.c:5561 -#: postmaster/postmaster.c:5949 +#: postmaster/postmaster.c:4170 postmaster/postmaster.c:5530 +#: postmaster/postmaster.c:5921 #, c-format msgid "could not generate random cancel key" msgstr "konnte zufälligen Stornierungsschlüssel nicht erzeugen" -#: postmaster/postmaster.c:4216 +#: postmaster/postmaster.c:4224 #, c-format msgid "could not fork new process for connection: %m" msgstr "konnte neuen Prozess für Verbindung nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:4258 +#: postmaster/postmaster.c:4266 msgid "could not fork new process for connection: " msgstr "konnte neuen Prozess für Verbindung nicht starten (fork-Fehler): " -#: postmaster/postmaster.c:4367 +#: postmaster/postmaster.c:4372 #, c-format msgid "connection received: host=%s port=%s" msgstr "Verbindung empfangen: Host=%s Port=%s" -#: postmaster/postmaster.c:4372 +#: postmaster/postmaster.c:4377 #, c-format msgid "connection received: host=%s" msgstr "Verbindung empfangen: Host=%s" -#: postmaster/postmaster.c:4642 +#: postmaster/postmaster.c:4620 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "konnte Serverprozess »%s« nicht ausführen: %m" -#: postmaster/postmaster.c:4801 +#: postmaster/postmaster.c:4678 +#, fuzzy, c-format +#| msgid "could not close handle to backend parameter variables: error code %lu\n" +msgid "could not create backend parameter file mapping: error code %lu" +msgstr "konnte Handle für Backend-Parametervariablen nicht schließen: Fehlercode %lu\n" + +#: postmaster/postmaster.c:4687 +#, fuzzy, c-format +#| msgid "could not map view of backend variables: error code %lu\n" +msgid "could not map backend parameter memory: error code %lu" +msgstr "konnte Sicht der Backend-Variablen nicht mappen: Fehlercode %lu\n" + +#: postmaster/postmaster.c:4714 +#, fuzzy, c-format +#| msgid "command too long\n" +msgid "subprocess command line too long" +msgstr "Befehl zu lang\n" + +#: postmaster/postmaster.c:4732 +#, fuzzy, c-format +#| msgid "pgpipe: getsockname() failed: error code %d" +msgid "CreateProcess() call failed: %m (error code %lu)" +msgstr "pgpipe: getsockname() fehlgeschlagen: Fehlercode %d" + +#: postmaster/postmaster.c:4759 +#, fuzzy, c-format +#| msgid "could not unmap view of backend variables: error code %lu\n" +msgid "could not unmap view of backend parameter file: error code %lu" +msgstr "konnte Sicht der Backend-Variablen nicht unmappen: Fehlercode %lu\n" + +#: postmaster/postmaster.c:4763 +#, fuzzy, c-format +#| msgid "could not close handle to backend parameter variables: error code %lu\n" +msgid "could not close handle to backend parameter file: error code %lu" +msgstr "konnte Handle für Backend-Parametervariablen nicht schließen: Fehlercode %lu\n" + +#: postmaster/postmaster.c:4785 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "Aufgabe nach zu vielen Versuchen, Shared Memory zu reservieren" -#: postmaster/postmaster.c:4802 +#: postmaster/postmaster.c:4786 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Dies kann durch ASLR oder Antivirus-Software verursacht werden." -#: postmaster/postmaster.c:5008 +#: postmaster/postmaster.c:4976 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "SSL-Konfiguration konnte im Kindprozess nicht geladen werden" -#: postmaster/postmaster.c:5140 -#, fuzzy, c-format -#| msgid "Report bugs to <%s>.\n" +#: postmaster/postmaster.c:5102 +#, c-format msgid "Please report this to <%s>." -msgstr "Berichten Sie Fehler an <%s>.\n" +msgstr "Bitte berichten Sie dies an <%s>." -#: postmaster/postmaster.c:5233 +#: postmaster/postmaster.c:5189 #, c-format msgid "database system is ready to accept read only connections" msgstr "Datenbanksystem ist bereit, um lesende Verbindungen anzunehmen" -#: postmaster/postmaster.c:5489 +#: postmaster/postmaster.c:5454 #, c-format msgid "could not fork startup process: %m" msgstr "konnte Startprozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5493 +#: postmaster/postmaster.c:5458 +#, c-format +msgid "could not fork archiver process: %m" +msgstr "konnte Archivierer-Prozess nicht starten (fork-Fehler): %m" + +#: postmaster/postmaster.c:5462 #, c-format msgid "could not fork background writer process: %m" msgstr "konnte Background-Writer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5497 +#: postmaster/postmaster.c:5466 #, c-format msgid "could not fork checkpointer process: %m" msgstr "konnte Checkpointer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5501 +#: postmaster/postmaster.c:5470 #, c-format msgid "could not fork WAL writer process: %m" msgstr "konnte WAL-Writer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5505 +#: postmaster/postmaster.c:5474 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "konnte WAL-Receiver-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5509 +#: postmaster/postmaster.c:5478 #, c-format msgid "could not fork process: %m" msgstr "konnte Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5706 postmaster/postmaster.c:5729 +#: postmaster/postmaster.c:5679 postmaster/postmaster.c:5702 #, c-format msgid "database connection requirement not indicated during registration" msgstr "die Notwendigkeit, Datenbankverbindungen zu erzeugen, wurde bei der Registrierung nicht angezeigt" -#: postmaster/postmaster.c:5713 postmaster/postmaster.c:5736 +#: postmaster/postmaster.c:5686 postmaster/postmaster.c:5709 #, c-format msgid "invalid processing mode in background worker" msgstr "ungültiger Verarbeitungsmodus in Background-Worker" -#: postmaster/postmaster.c:5809 -#, c-format -msgid "starting background worker process \"%s\"" -msgstr "starte Background-Worker-Prozess »%s«" - -#: postmaster/postmaster.c:5821 +#: postmaster/postmaster.c:5794 #, c-format msgid "could not fork worker process: %m" msgstr "konnte Worker-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5935 +#: postmaster/postmaster.c:5907 #, c-format msgid "no slot available for new worker process" msgstr "kein Slot für neuen Worker-Prozess verfügbar" -#: postmaster/postmaster.c:6270 +#: postmaster/postmaster.c:6240 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "konnte Socket %d nicht für Verwendung in Backend duplizieren: Fehlercode %d" -#: postmaster/postmaster.c:6302 +#: postmaster/postmaster.c:6272 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "konnte geerbtes Socket nicht erzeugen: Fehlercode %d\n" -#: postmaster/postmaster.c:6331 +#: postmaster/postmaster.c:6301 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "konnte Servervariablendatei »%s« nicht öffnen: %s\n" -#: postmaster/postmaster.c:6338 +#: postmaster/postmaster.c:6308 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "konnte nicht aus Servervariablendatei »%s« lesen: %s\n" -#: postmaster/postmaster.c:6347 +#: postmaster/postmaster.c:6317 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "konnte Datei »%s« nicht löschen: %s\n" -#: postmaster/postmaster.c:6364 +#: postmaster/postmaster.c:6334 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "konnte Sicht der Backend-Variablen nicht mappen: Fehlercode %lu\n" -#: postmaster/postmaster.c:6373 +#: postmaster/postmaster.c:6343 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "konnte Sicht der Backend-Variablen nicht unmappen: Fehlercode %lu\n" -#: postmaster/postmaster.c:6380 +#: postmaster/postmaster.c:6350 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "konnte Handle für Backend-Parametervariablen nicht schließen: Fehlercode %lu\n" -#: postmaster/postmaster.c:6558 +#: postmaster/postmaster.c:6526 #, c-format msgid "could not read exit code for process\n" msgstr "konnte Exitcode des Prozesses nicht lesen\n" -#: postmaster/postmaster.c:6563 +#: postmaster/postmaster.c:6531 #, c-format msgid "could not post child completion status\n" msgstr "konnte Child-Completion-Status nicht versenden\n" -#: postmaster/syslogger.c:474 postmaster/syslogger.c:1153 +#: postmaster/syslogger.c:473 postmaster/syslogger.c:1152 #, c-format msgid "could not read from logger pipe: %m" msgstr "konnte nicht aus Logger-Pipe lesen: %m" -#: postmaster/syslogger.c:522 -#, c-format -msgid "logger shutting down" -msgstr "Logger fährt herunter" - -#: postmaster/syslogger.c:571 postmaster/syslogger.c:585 +#: postmaster/syslogger.c:570 postmaster/syslogger.c:584 #, c-format msgid "could not create pipe for syslog: %m" msgstr "konnte Pipe für Syslog nicht erzeugen: %m" -#: postmaster/syslogger.c:636 +#: postmaster/syslogger.c:635 #, c-format msgid "could not fork system logger: %m" msgstr "konnte Systemlogger nicht starten (fork-Fehler): %m" -#: postmaster/syslogger.c:672 +#: postmaster/syslogger.c:671 #, c-format msgid "redirecting log output to logging collector process" msgstr "Logausgabe wird an Logsammelprozess umgeleitet" -#: postmaster/syslogger.c:673 +#: postmaster/syslogger.c:672 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "Die weitere Logausgabe wird im Verzeichnis »%s« erscheinen." -#: postmaster/syslogger.c:681 +#: postmaster/syslogger.c:680 #, c-format msgid "could not redirect stdout: %m" msgstr "konnte Standardausgabe nicht umleiten: %m" -#: postmaster/syslogger.c:686 postmaster/syslogger.c:703 +#: postmaster/syslogger.c:685 postmaster/syslogger.c:702 #, c-format msgid "could not redirect stderr: %m" msgstr "konnte Standardfehlerausgabe nicht umleiten: %m" -#: postmaster/syslogger.c:1108 +#: postmaster/syslogger.c:1107 #, c-format msgid "could not write to log file: %s\n" msgstr "konnte nicht in Logdatei schreiben: %s\n" -#: postmaster/syslogger.c:1225 +#: postmaster/syslogger.c:1224 #, c-format msgid "could not open log file \"%s\": %m" msgstr "konnte Logdatei »%s« nicht öffnen: %m" -#: postmaster/syslogger.c:1287 postmaster/syslogger.c:1337 +#: postmaster/syslogger.c:1286 postmaster/syslogger.c:1336 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "automatische Rotation abgeschaltet (SIGHUP zum Wiederanschalten verwenden)" @@ -18305,365 +18930,390 @@ msgstr "ungültige Streaming-Startposition" msgid "unterminated quoted string" msgstr "Zeichenkette in Anführungszeichen nicht abgeschlossen" -#: replication/backup_manifest.c:231 -#, fuzzy, c-format -#| msgid "server reported unexpected next timeline %u, following timeline %u" +#: replication/backup_manifest.c:255 +#, c-format msgid "expected end timeline %u but found timeline %u" -msgstr "Server berichtete unerwartete nächste Zeitleiste %u, folgend auf Zeitleiste %u" +msgstr "End-Zeitleiste %u wurde erwartet, aber Zeitleiste %u wurde gefunden" -#: replication/backup_manifest.c:248 -#, fuzzy, c-format -#| msgid "server reported unexpected next timeline %u, following timeline %u" +#: replication/backup_manifest.c:272 +#, c-format msgid "expected start timeline %u but found timeline %u" -msgstr "Server berichtete unerwartete nächste Zeitleiste %u, folgend auf Zeitleiste %u" - -#: replication/backup_manifest.c:275 -#, fuzzy, c-format -#| msgid "crash recovery starts in timeline %u and has target timeline %u" -msgid "start timeline %u not found history of timeline %u" -msgstr "Wiederherstellung nach Absturz beginnt in Zeitleiste %u und hat Zielzeitleiste %u" - -#: replication/backup_manifest.c:322 -#, fuzzy, c-format -#| msgid "could not rewind hash-join temporary file: %m" -msgid "could not rewind temporary file: %m" -msgstr "konnte Position in temporärer Datei für Hash-Verbund nicht auf Anfang setzen: %m" +msgstr "Start-Zeitleiste %u wurde erwartet, aber Zeitleiste %u wurde gefunden" -#: replication/backup_manifest.c:349 -#, fuzzy, c-format -#| msgid "could not read from hash-join temporary file: %m" -msgid "could not read from temporary file: %m" -msgstr "konnte nicht aus temporärer Datei für Hash-Verbund lesen: %m" +#: replication/backup_manifest.c:299 +#, c-format +msgid "start timeline %u not found in history of timeline %u" +msgstr "Start-Zeitleiste %u nicht in der History der Zeitleiste %u gefunden" -#: replication/backup_manifest.c:377 utils/sort/sharedtuplestore.c:206 -#, fuzzy, c-format -#| msgid "could not write to hash-join temporary file: %m" -msgid "could not write to temporary file: %m" -msgstr "konnte nicht in temporäre Datei für Hash-Verbund schreiben: %m" +#: replication/backup_manifest.c:352 +#, c-format +msgid "could not rewind temporary file" +msgstr "konnte Position in temporärer Datei nicht auf Anfang setzen" -#: replication/basebackup.c:108 +#: replication/backup_manifest.c:379 #, c-format -msgid "could not read from file \"%s\"" -msgstr "konnte nicht aus Datei »%s« lesen" +msgid "could not read from temporary file: %m" +msgstr "konnte nicht aus temporärer Datei lesen: %m" -#: replication/basebackup.c:551 +#: replication/basebackup.c:546 #, c-format msgid "could not find any WAL files" msgstr "konnte keine WAL-Dateien finden" -#: replication/basebackup.c:566 replication/basebackup.c:582 -#: replication/basebackup.c:591 +#: replication/basebackup.c:561 replication/basebackup.c:577 +#: replication/basebackup.c:586 #, c-format msgid "could not find WAL file \"%s\"" msgstr "konnte WAL-Datei »%s« nicht finden" -#: replication/basebackup.c:634 replication/basebackup.c:665 +#: replication/basebackup.c:629 replication/basebackup.c:659 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "unerwartete WAL-Dateigröße »%s«" -#: replication/basebackup.c:648 replication/basebackup.c:1749 +#: replication/basebackup.c:644 replication/basebackup.c:1771 #, c-format msgid "base backup could not send data, aborting backup" msgstr "Basissicherung konnte keine Daten senden, Sicherung abgebrochen" -#: replication/basebackup.c:724 -#, fuzzy, c-format -#| msgid " data checksum version\n" -msgid "%lld total checksum verification failures" -msgstr " Datenprüfsummenversion\n" +#: replication/basebackup.c:722 +#, c-format +msgid "%lld total checksum verification failure" +msgid_plural "%lld total checksum verification failures" +msgstr[0] "%lld Prüfsummenfehler insgesamt" +msgstr[1] "%lld Prüfsummenfehler insgesamt" -#: replication/basebackup.c:728 +#: replication/basebackup.c:729 #, c-format msgid "checksum verification failure during base backup" msgstr "Prüfsummenüberprüfung bei der Basissicherung fehlgeschlagen" -#: replication/basebackup.c:781 replication/basebackup.c:790 -#: replication/basebackup.c:799 replication/basebackup.c:808 -#: replication/basebackup.c:817 replication/basebackup.c:828 -#: replication/basebackup.c:845 replication/basebackup.c:854 -#: replication/basebackup.c:866 replication/basebackup.c:890 +#: replication/basebackup.c:789 replication/basebackup.c:798 +#: replication/basebackup.c:807 replication/basebackup.c:816 +#: replication/basebackup.c:825 replication/basebackup.c:836 +#: replication/basebackup.c:853 replication/basebackup.c:862 +#: replication/basebackup.c:874 replication/basebackup.c:898 #, c-format msgid "duplicate option \"%s\"" msgstr "doppelte Option »%s«" -#: replication/basebackup.c:834 +#: replication/basebackup.c:842 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d ist außerhalb des gültigen Bereichs für Parameter »%s« (%d ... %d)" -#: replication/basebackup.c:879 -#, fuzzy, c-format -#| msgid "unrecognized column option \"%s\"" +#: replication/basebackup.c:887 +#, c-format msgid "unrecognized manifest option: \"%s\"" -msgstr "unbekannte Spaltenoption »%s«" +msgstr "unbekannte Manifestoption: »%s«" -#: replication/basebackup.c:895 -#, fuzzy, c-format -#| msgid "unrecognized reset target: \"%s\"" +#: replication/basebackup.c:903 +#, c-format msgid "unrecognized checksum algorithm: \"%s\"" -msgstr "unbekanntes Reset-Ziel: »%s«" +msgstr "unbekannter Prüfsummenalgorithmus: »%s«" -#: replication/basebackup.c:910 +#: replication/basebackup.c:918 #, c-format msgid "manifest checksums require a backup manifest" -msgstr "" +msgstr "Manifest-Prüfsummen benötigen ein Backup-Manifest" -#: replication/basebackup.c:1501 +#: replication/basebackup.c:1519 #, c-format msgid "skipping special file \"%s\"" msgstr "überspringe besondere Datei »%s«" -#: replication/basebackup.c:1620 +#: replication/basebackup.c:1640 #, c-format msgid "invalid segment number %d in file \"%s\"" msgstr "ungültige Segmentnummer %d in Datei »%s«" -#: replication/basebackup.c:1639 +#: replication/basebackup.c:1678 #, c-format -msgid "could not verify checksum in file \"%s\", block %d: read buffer size %d and page size %d differ" -msgstr "" +msgid "could not verify checksum in file \"%s\", block %u: read buffer size %d and page size %d differ" +msgstr "konnte Prüfsumme in Datei »%s«, Block %u nicht überprüfen: gelesene Puffergröße %d und Seitengröße %d sind verschieden" -#: replication/basebackup.c:1683 replication/basebackup.c:1713 +#: replication/basebackup.c:1751 #, c-format -msgid "could not fseek in file \"%s\": %m" -msgstr "konnte Positionszeiger in Datei »%s« nicht setzen: %m" - -#: replication/basebackup.c:1705 -#, fuzzy, c-format -#| msgid "could not read block %u in file \"%s\": %m" -msgid "could not reread block %d of file \"%s\": %m" -msgstr "konnte Block %u in Datei »%s« nicht lesen: %m" - -#: replication/basebackup.c:1729 -#, fuzzy, c-format -#| msgid "page verification failed, calculated checksum %u but expected %u" -msgid "checksum verification failed in file \"%s\", block %d: calculated %X but expected %X" -msgstr "Seitenüberprüfung fehlgeschlagen, berechnete Prüfsumme %u, aber erwartet %u" +msgid "checksum verification failed in file \"%s\", block %u: calculated %X but expected %X" +msgstr "Prüfsummenüberprüfung fehlgeschlagen in Datei »%s«, Block %u: berechnet %X, aber erwartet %X" -#: replication/basebackup.c:1736 +#: replication/basebackup.c:1758 #, c-format msgid "further checksum verification failures in file \"%s\" will not be reported" msgstr "weitere Prüfsummenfehler in Datei »%s« werden nicht berichtet werden" -#: replication/basebackup.c:1804 -#, fuzzy, c-format -#| msgid " data checksum version\n" +#: replication/basebackup.c:1816 +#, c-format msgid "file \"%s\" has a total of %d checksum verification failure" msgid_plural "file \"%s\" has a total of %d checksum verification failures" -msgstr[0] " Datenprüfsummenversion\n" -msgstr[1] " Datenprüfsummenversion\n" +msgstr[0] "Datei »%s« hat insgesamt %d Prüfsummenfehler" +msgstr[1] "Datei »%s« hat insgesamt %d Prüfsummenfehler" -#: replication/basebackup.c:1840 +#: replication/basebackup.c:1852 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "Dateiname zu lang für Tar-Format: »%s«" -#: replication/basebackup.c:1845 +#: replication/basebackup.c:1857 #, c-format msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "Ziel der symbolischen Verknüpfung zu lang für Tar-Format: Dateiname »%s«, Ziel »%s«" -#: replication/libpqwalreceiver/libpqwalreceiver.c:234 +#: replication/libpqwalreceiver/libpqwalreceiver.c:227 +#, c-format +msgid "could not clear search path: %s" +msgstr "konnte Suchpfad nicht auf leer setzen: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:256 #, c-format msgid "invalid connection string syntax: %s" msgstr "ungültige Syntax für Verbindungszeichenkette: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:258 +#: replication/libpqwalreceiver/libpqwalreceiver.c:281 #, c-format msgid "could not parse connection string: %s" msgstr "konnte Verbindungsparameter nicht interpretieren: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:330 +#: replication/libpqwalreceiver/libpqwalreceiver.c:353 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "konnte Datenbanksystemidentifikator und Zeitleisten-ID nicht vom Primärserver empfangen: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:341 -#: replication/libpqwalreceiver/libpqwalreceiver.c:559 +#: replication/libpqwalreceiver/libpqwalreceiver.c:364 +#: replication/libpqwalreceiver/libpqwalreceiver.c:588 #, c-format msgid "invalid response from primary server" msgstr "ungültige Antwort vom Primärserver" -#: replication/libpqwalreceiver/libpqwalreceiver.c:342 +#: replication/libpqwalreceiver/libpqwalreceiver.c:365 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "Konnte System nicht identifizieren: %d Zeilen und %d Felder erhalten, %d Zeilen und %d oder mehr Felder erwartet." -#: replication/libpqwalreceiver/libpqwalreceiver.c:415 -#: replication/libpqwalreceiver/libpqwalreceiver.c:421 +#: replication/libpqwalreceiver/libpqwalreceiver.c:440 #: replication/libpqwalreceiver/libpqwalreceiver.c:446 +#: replication/libpqwalreceiver/libpqwalreceiver.c:475 #, c-format msgid "could not start WAL streaming: %s" msgstr "konnte WAL-Streaming nicht starten: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:469 +#: replication/libpqwalreceiver/libpqwalreceiver.c:498 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "konnte End-of-Streaming-Nachricht nicht an Primärserver senden: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:491 +#: replication/libpqwalreceiver/libpqwalreceiver.c:520 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "unerwartete Ergebnismenge nach End-of-Streaming" -#: replication/libpqwalreceiver/libpqwalreceiver.c:505 +#: replication/libpqwalreceiver/libpqwalreceiver.c:534 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "Fehler beim Beenden des COPY-Datenstroms: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:514 +#: replication/libpqwalreceiver/libpqwalreceiver.c:543 #, c-format msgid "error reading result of streaming command: %s" msgstr "Fehler beim Lesen des Ergebnisses von Streaming-Befehl: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:522 -#: replication/libpqwalreceiver/libpqwalreceiver.c:756 +#: replication/libpqwalreceiver/libpqwalreceiver.c:551 +#: replication/libpqwalreceiver/libpqwalreceiver.c:785 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "unerwartetes Ergebnis nach CommandComplete: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:548 +#: replication/libpqwalreceiver/libpqwalreceiver.c:577 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "konnte Zeitleisten-History-Datei nicht vom Primärserver empfangen: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:560 +#: replication/libpqwalreceiver/libpqwalreceiver.c:589 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "1 Tupel mit 2 Feldern erwartet, %d Tupel mit %d Feldern erhalten." -#: replication/libpqwalreceiver/libpqwalreceiver.c:720 -#: replication/libpqwalreceiver/libpqwalreceiver.c:771 -#: replication/libpqwalreceiver/libpqwalreceiver.c:777 +#: replication/libpqwalreceiver/libpqwalreceiver.c:749 +#: replication/libpqwalreceiver/libpqwalreceiver.c:800 +#: replication/libpqwalreceiver/libpqwalreceiver.c:806 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "konnte keine Daten vom WAL-Stream empfangen: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:796 +#: replication/libpqwalreceiver/libpqwalreceiver.c:825 #, c-format msgid "could not send data to WAL stream: %s" msgstr "konnte keine Daten an den WAL-Stream senden: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:849 +#: replication/libpqwalreceiver/libpqwalreceiver.c:878 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "konnte Replikations-Slot »%s« nicht erzeugen: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:894 +#: replication/libpqwalreceiver/libpqwalreceiver.c:923 #, c-format msgid "invalid query response" msgstr "ungültige Antwort auf Anfrage" -#: replication/libpqwalreceiver/libpqwalreceiver.c:895 +#: replication/libpqwalreceiver/libpqwalreceiver.c:924 #, c-format msgid "Expected %d fields, got %d fields." msgstr "%d Felder erwartet, %d Feldern erhalten." -#: replication/libpqwalreceiver/libpqwalreceiver.c:964 +#: replication/libpqwalreceiver/libpqwalreceiver.c:994 #, c-format msgid "the query interface requires a database connection" msgstr "Ausführen von Anfragen benötigt eine Datenbankverbindung" -#: replication/libpqwalreceiver/libpqwalreceiver.c:995 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1025 msgid "empty query" msgstr "leere Anfrage" -#: replication/logical/launcher.c:295 -#, c-format -msgid "starting logical replication worker for subscription \"%s\"" -msgstr "starte Arbeitsprozess für logische Replikation für Subskription »%s«" +#: replication/libpqwalreceiver/libpqwalreceiver.c:1031 +#, fuzzy +#| msgid "unexpected delimiter" +msgid "unexpected pipeline mode" +msgstr "unerwartetes Trennzeichen" -#: replication/logical/launcher.c:302 +#: replication/logical/launcher.c:292 #, c-format msgid "cannot start logical replication workers when max_replication_slots = 0" msgstr "Arbeitsprozesse für logische Replikation können nicht gestartet werden, wenn max_replication_slots = 0" -#: replication/logical/launcher.c:382 +#: replication/logical/launcher.c:372 #, c-format msgid "out of logical replication worker slots" msgstr "alle Slots für Arbeitsprozesse für logische Replikation belegt" -#: replication/logical/launcher.c:383 +#: replication/logical/launcher.c:373 #, c-format msgid "You might need to increase max_logical_replication_workers." msgstr "Sie müssen möglicherweise max_logical_replication_workers erhöhen." -#: replication/logical/launcher.c:438 +#: replication/logical/launcher.c:428 #, c-format msgid "out of background worker slots" msgstr "alle Slots für Background-Worker belegt" -#: replication/logical/launcher.c:439 +#: replication/logical/launcher.c:429 #, c-format msgid "You might need to increase max_worker_processes." msgstr "Sie müssen möglicherweise max_worker_processes erhöhen." -#: replication/logical/launcher.c:638 +#: replication/logical/launcher.c:583 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "Arbeitsprozess-Slot %d für logische Replikation ist leer, kann nicht zugeteilt werden" -#: replication/logical/launcher.c:647 +#: replication/logical/launcher.c:592 #, c-format msgid "logical replication worker slot %d is already used by another worker, cannot attach" msgstr "Arbeitsprozess-Slot %d für logische Replikation wird schon von einem anderen Arbeitsprozess verwendet, kann nicht zugeteilt werden" -#: replication/logical/launcher.c:951 -#, c-format -msgid "logical replication launcher started" -msgstr "Logical-Replication-Launcher startet" - -#: replication/logical/logical.c:87 +#: replication/logical/logical.c:115 #, c-format msgid "logical decoding requires wal_level >= logical" msgstr "logische Dekodierung erfordert wal_level >= logical" -#: replication/logical/logical.c:92 +#: replication/logical/logical.c:120 #, c-format msgid "logical decoding requires a database connection" msgstr "logische Dekodierung benötigt eine Datenbankverbindung" -#: replication/logical/logical.c:110 +#: replication/logical/logical.c:138 #, c-format msgid "logical decoding cannot be used while in recovery" msgstr "logische Dekodierung kann nicht während der Wiederherstellung verwendet werden" -#: replication/logical/logical.c:257 replication/logical/logical.c:395 +#: replication/logical/logical.c:350 replication/logical/logical.c:503 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "physischer Replikations-Slot kann nicht für logisches Dekodieren verwendet werden" -#: replication/logical/logical.c:262 replication/logical/logical.c:400 +#: replication/logical/logical.c:355 replication/logical/logical.c:508 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "Replikations-Slot »%s« wurde nicht in dieser Datenbank erzeugt" -#: replication/logical/logical.c:269 +#: replication/logical/logical.c:362 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "logischer Replikations-Slot kann nicht in einer Transaktion erzeugt werden, die Schreibvorgänge ausgeführt hat" -#: replication/logical/logical.c:440 +#: replication/logical/logical.c:553 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "starte logisches Dekodieren für Slot »%s«" -#: replication/logical/logical.c:442 +#: replication/logical/logical.c:555 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "Streaming beginnt bei Transaktionen, die nach %X/%X committen; lese WAL ab %X/%X." -#: replication/logical/logical.c:589 +#: replication/logical/logical.c:706 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "Slot »%s«, Ausgabe-Plugin »%s«, im Callback %s, zugehörige LSN %X/%X" -#: replication/logical/logical.c:596 +#: replication/logical/logical.c:712 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "Slot »%s«, Ausgabe-Plugin »%s«, im Callback %s" +#: replication/logical/logical.c:878 +#, c-format +msgid "logical replication at prepare time requires begin_prepare_cb callback" +msgstr "" + +#: replication/logical/logical.c:921 +#, c-format +msgid "logical replication at prepare time requires prepare_cb callback" +msgstr "" + +#: replication/logical/logical.c:964 +#, c-format +msgid "logical replication at prepare time requires commit_prepared_cb callback" +msgstr "" + +#: replication/logical/logical.c:1008 +#, c-format +msgid "logical replication at prepare time requires rollback_prepared_cb callback" +msgstr "" + +#: replication/logical/logical.c:1230 +#, fuzzy, c-format +#| msgid "logical decoding requires a database connection" +msgid "logical streaming requires a stream_start_cb callback" +msgstr "logische Dekodierung benötigt eine Datenbankverbindung" + +#: replication/logical/logical.c:1276 +#, fuzzy, c-format +#| msgid "logical decoding requires a database connection" +msgid "logical streaming requires a stream_stop_cb callback" +msgstr "logische Dekodierung benötigt eine Datenbankverbindung" + +#: replication/logical/logical.c:1315 +#, fuzzy, c-format +#| msgid "logical decoding requires a database connection" +msgid "logical streaming requires a stream_abort_cb callback" +msgstr "logische Dekodierung benötigt eine Datenbankverbindung" + +#: replication/logical/logical.c:1358 +#, c-format +msgid "logical streaming at prepare time requires a stream_prepare_cb callback" +msgstr "" + +#: replication/logical/logical.c:1397 +#, c-format +msgid "logical streaming requires a stream_commit_cb callback" +msgstr "" + +#: replication/logical/logical.c:1443 +#, fuzzy, c-format +#| msgid "logical decoding requires a database connection" +msgid "logical streaming requires a stream_change_cb callback" +msgstr "logische Dekodierung benötigt eine Datenbankverbindung" + #: replication/logical/logicalfuncs.c:104 replication/slotfuncs.c:34 #, c-format msgid "must be superuser or replication role to use replication slots" @@ -18697,362 +19347,404 @@ msgstr "Array muss eine gerade Anzahl Elemente haben" #: replication/logical/logicalfuncs.c:250 #, c-format -msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" -msgstr "Ausgabe-Plugin »%s« erzeugt binäre Ausgabe, aber Funktion »%s« erwartet Textdaten" +msgid "can no longer get changes from replication slot \"%s\"" +msgstr "aus Replikations-Slot »%s« können keine Änderungen mehr gelesen werden" + +#: replication/logical/logicalfuncs.c:252 replication/slotfuncs.c:654 +#, fuzzy, c-format +#| msgid "This slot has never previously reserved WAL, or has been invalidated." +msgid "This slot has never previously reserved WAL, or it has been invalidated." +msgstr "Diese Slot hat nie zuvor WAL reserviert oder er wurde ungültig gemacht." -#: replication/logical/origin.c:182 +#: replication/logical/logicalfuncs.c:264 #, c-format -msgid "only superusers can query or manipulate replication origins" -msgstr "nur Superuser können Replication-Origins abfragen oder ändern" +msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" +msgstr "Ausgabe-Plugin »%s« erzeugt binäre Ausgabe, aber Funktion »%s« erwartet Textdaten" -#: replication/logical/origin.c:187 +#: replication/logical/origin.c:188 #, c-format msgid "cannot query or manipulate replication origin when max_replication_slots = 0" msgstr "Replication-Origin kann nicht abgefragt oder geändert werden, wenn max_replication_slots = 0" -#: replication/logical/origin.c:192 +#: replication/logical/origin.c:193 #, c-format msgid "cannot manipulate replication origins during recovery" msgstr "Replication-Origins können nicht während der Wiederherstellung geändert werden" -#: replication/logical/origin.c:227 +#: replication/logical/origin.c:228 #, c-format msgid "replication origin \"%s\" does not exist" msgstr "Replication-Origin »%s« existiert nicht" -#: replication/logical/origin.c:318 +#: replication/logical/origin.c:319 #, c-format msgid "could not find free replication origin OID" msgstr "konnte keine freie Replication-Origin-OID finden" -#: replication/logical/origin.c:366 +#: replication/logical/origin.c:355 #, c-format msgid "could not drop replication origin with OID %d, in use by PID %d" msgstr "konnte Replication-Origin mit OID %d nicht löschen, wird von PID %d verwendet" -#: replication/logical/origin.c:458 +#: replication/logical/origin.c:476 #, c-format msgid "replication origin with OID %u does not exist" msgstr "Replication-Origin mit OID %u existiert nicht" -#: replication/logical/origin.c:726 +#: replication/logical/origin.c:741 #, c-format msgid "replication checkpoint has wrong magic %u instead of %u" msgstr "Replikations-Checkpoint hat falsche magische Zahl %u statt %u" -#: replication/logical/origin.c:767 +#: replication/logical/origin.c:782 #, c-format msgid "could not find free replication state, increase max_replication_slots" msgstr "konnte keinen freien Replication-State finden, erhöhen Sie max_replication_slots" -#: replication/logical/origin.c:785 +#: replication/logical/origin.c:790 +#, fuzzy, c-format +#| msgid "recovery restart point at %X/%X" +msgid "recovered replication state of node %u to %X/%X" +msgstr "Recovery-Restart-Punkt bei %X/%X" + +#: replication/logical/origin.c:800 #, c-format msgid "replication slot checkpoint has wrong checksum %u, expected %u" msgstr "Replikations-Slot-Checkpoint hat falsche Prüfsumme %u, erwartet wurde %u" -#: replication/logical/origin.c:913 replication/logical/origin.c:1099 +#: replication/logical/origin.c:928 replication/logical/origin.c:1114 #, c-format msgid "replication origin with OID %d is already active for PID %d" msgstr "Replication-Origin mit OID %d ist bereits aktiv für PID %d" -#: replication/logical/origin.c:924 replication/logical/origin.c:1111 +#: replication/logical/origin.c:939 replication/logical/origin.c:1126 #, c-format msgid "could not find free replication state slot for replication origin with OID %u" msgstr "konnte keinen freien Replication-State-Slot für Replication-Origin mit OID %u finden" -#: replication/logical/origin.c:926 replication/logical/origin.c:1113 -#: replication/slot.c:1679 +#: replication/logical/origin.c:941 replication/logical/origin.c:1128 +#: replication/slot.c:1798 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Erhöhen Sie max_replication_slots und versuchen Sie es erneut." -#: replication/logical/origin.c:1070 +#: replication/logical/origin.c:1085 #, c-format msgid "cannot setup replication origin when one is already setup" msgstr "kann Replication-Origin nicht einrichten, wenn schon einer eingerichtet ist" -#: replication/logical/origin.c:1150 replication/logical/origin.c:1366 -#: replication/logical/origin.c:1386 +#: replication/logical/origin.c:1165 replication/logical/origin.c:1377 +#: replication/logical/origin.c:1397 #, c-format msgid "no replication origin is configured" msgstr "kein Replication-Origin konfiguriert" -#: replication/logical/origin.c:1233 +#: replication/logical/origin.c:1248 #, c-format msgid "replication origin name \"%s\" is reserved" msgstr "Replication-Origin-Name »%s« ist reserviert" -#: replication/logical/origin.c:1235 +#: replication/logical/origin.c:1250 #, c-format msgid "Origin names starting with \"pg_\" are reserved." msgstr "Replication-Origin-Namen, die mit »pg_« anfangen, sind reserviert." -#: replication/logical/relation.c:272 +#: replication/logical/relation.c:248 #, c-format -msgid "logical replication target relation \"%s.%s\" does not exist" -msgstr "Zielrelation für logische Replikation »%s.%s« existiert nicht" +msgid "\"%s\"" +msgstr "" + +#: replication/logical/relation.c:251 +#, c-format +msgid ", \"%s\"" +msgstr "" -#: replication/logical/relation.c:329 +#: replication/logical/relation.c:257 +#, fuzzy, c-format +#| msgid "logical replication target relation \"%s.%s\" is missing some replicated columns" +msgid "logical replication target relation \"%s.%s\" is missing replicated column: %s" +msgid_plural "logical replication target relation \"%s.%s\" is missing replicated columns: %s" +msgstr[0] "in Zielrelation für logische Replikation »%s.%s« fehlen replizierte Spalten" +msgstr[1] "in Zielrelation für logische Replikation »%s.%s« fehlen replizierte Spalten" + +#: replication/logical/relation.c:337 #, c-format -msgid "logical replication target relation \"%s.%s\" is missing some replicated columns" -msgstr "in Zielrelation für logische Replikation »%s.%s« fehlen replizierte Spalten" +msgid "logical replication target relation \"%s.%s\" does not exist" +msgstr "Zielrelation für logische Replikation »%s.%s« existiert nicht" -#: replication/logical/relation.c:369 +#: replication/logical/relation.c:418 #, c-format msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "Zielrelation für logische Replikation »%s.%s« verwendet Systemspalten in REPLICA-IDENTITY-Index" -#: replication/logical/reorderbuffer.c:2671 +#: replication/logical/reorderbuffer.c:3773 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "konnte nicht in Datendatei für XID %u schreiben: %m" -#: replication/logical/reorderbuffer.c:2858 -#: replication/logical/reorderbuffer.c:2883 +#: replication/logical/reorderbuffer.c:4116 +#: replication/logical/reorderbuffer.c:4141 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "konnte nicht aus Reorder-Buffer-Spill-Datei lesen: %m" -#: replication/logical/reorderbuffer.c:2862 -#: replication/logical/reorderbuffer.c:2887 +#: replication/logical/reorderbuffer.c:4120 +#: replication/logical/reorderbuffer.c:4145 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "konnte nicht aus Reorder-Buffer-Spill-Datei lesen: %d statt %u Bytes gelesen" -#: replication/logical/reorderbuffer.c:3122 -#, fuzzy, c-format -#| msgid "could not read file \"%s\", read %d of %d: %m" +#: replication/logical/reorderbuffer.c:4393 +#, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" -msgstr "konnte Datei »%s« nicht lesen, %d von %d gelesen: %m" +msgstr "konnte Datei »%s« nicht löschen, bei Löschen von pg_replslot/%s/xid*: %m" -#: replication/logical/reorderbuffer.c:3614 +#: replication/logical/reorderbuffer.c:4883 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "konnte nicht aus Datei »%s« lesen: %d statt %d Bytes gelesen" -#: replication/logical/snapbuild.c:606 +#: replication/logical/snapbuild.c:588 #, c-format msgid "initial slot snapshot too large" msgstr "initialer Slot-Snapshot ist zu groß" -#: replication/logical/snapbuild.c:660 +#: replication/logical/snapbuild.c:642 #, c-format msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" msgid_plural "exported logical decoding snapshot: \"%s\" with %u transaction IDs" msgstr[0] "logischer Dekodierungs-Snapshot exportiert: »%s« mit %u Transaktions-ID" msgstr[1] "logischer Dekodierungs-Snapshot exportiert: »%s« mit %u Transaktions-IDs" -#: replication/logical/snapbuild.c:1265 replication/logical/snapbuild.c:1358 -#: replication/logical/snapbuild.c:1912 +#: replication/logical/snapbuild.c:1254 replication/logical/snapbuild.c:1347 +#: replication/logical/snapbuild.c:1878 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "logisches Dekodieren fand konsistenten Punkt bei %X/%X" -#: replication/logical/snapbuild.c:1267 +#: replication/logical/snapbuild.c:1256 #, c-format msgid "There are no running transactions." msgstr "Keine laufenden Transaktionen." -#: replication/logical/snapbuild.c:1309 +#: replication/logical/snapbuild.c:1298 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "logisches Dekodieren fand initialen Startpunkt bei %X/%X" -#: replication/logical/snapbuild.c:1311 replication/logical/snapbuild.c:1335 +#: replication/logical/snapbuild.c:1300 replication/logical/snapbuild.c:1324 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "Warten auf Abschluss der Transaktionen (ungefähr %d), die älter als %u sind." -#: replication/logical/snapbuild.c:1333 +#: replication/logical/snapbuild.c:1322 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "logisches Dekodieren fand initialen konsistenten Punkt bei %X/%X" -#: replication/logical/snapbuild.c:1360 +#: replication/logical/snapbuild.c:1349 #, c-format msgid "There are no old transactions anymore." msgstr "Es laufen keine alten Transaktionen mehr." -#: replication/logical/snapbuild.c:1754 +#: replication/logical/snapbuild.c:1746 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "Scanbuild-State-Datei »%s« hat falsche magische Zahl %u statt %u" -#: replication/logical/snapbuild.c:1760 +#: replication/logical/snapbuild.c:1752 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "Snapbuild-State-Datei »%s« hat nicht unterstützte Version: %u statt %u" -#: replication/logical/snapbuild.c:1859 +#: replication/logical/snapbuild.c:1823 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "Prüfsummenfehler bei Snapbuild-State-Datei »%s«: ist %u, sollte %u sein" -#: replication/logical/snapbuild.c:1914 +#: replication/logical/snapbuild.c:1880 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "Logische Dekodierung beginnt mit gespeichertem Snapshot." -#: replication/logical/snapbuild.c:1986 +#: replication/logical/snapbuild.c:1952 #, c-format msgid "could not parse file name \"%s\"" msgstr "konnte Dateinamen »%s« nicht parsen" -#: replication/logical/tablesync.c:132 +#: replication/logical/tablesync.c:144 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "Arbeitsprozess für logische Replikation für Tabellensynchronisation für Subskription »%s«, Tabelle »%s« hat abgeschlossen" -#: replication/logical/tablesync.c:664 +#: replication/logical/tablesync.c:722 replication/logical/tablesync.c:761 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "konnte Tabelleninformationen für Tabelle »%s.%s« nicht vom Publikationsserver holen: %s" -#: replication/logical/tablesync.c:670 +#: replication/logical/tablesync.c:728 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "Tabelle »%s.%s« nicht auf dem Publikationsserver gefunden" -#: replication/logical/tablesync.c:704 -#, c-format -msgid "could not fetch table info for table \"%s.%s\": %s" -msgstr "konnte Tabelleninformationen für Tabelle »%s.%s« nicht holen: %s" - -#: replication/logical/tablesync.c:791 +#: replication/logical/tablesync.c:848 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "konnte Kopieren des Anfangsinhalts für Tabelle »%s.%s« nicht starten: %s" -#: replication/logical/tablesync.c:905 -#, c-format -msgid "table copy could not start transaction on publisher" +#: replication/logical/tablesync.c:1046 +#, fuzzy, c-format +#| msgid "table copy could not start transaction on publisher" +msgid "table copy could not start transaction on publisher: %s" msgstr "beim Kopieren der Tabelle konnte die Transaktion auf dem Publikationsserver nicht gestartet werden" -#: replication/logical/tablesync.c:927 +#: replication/logical/tablesync.c:1094 #, c-format -msgid "table copy could not finish transaction on publisher" +msgid "replication origin \"%s\" already exists" +msgstr "Replication-Origin »%s« existiert bereits" + +#: replication/logical/tablesync.c:1106 +#, fuzzy, c-format +#| msgid "table copy could not finish transaction on publisher" +msgid "table copy could not finish transaction on publisher: %s" msgstr "beim Kopieren der Tabelle konnte die Transaktion auf dem Publikationsserver nicht beenden werden" -#: replication/logical/worker.c:313 +#: replication/logical/worker.c:490 #, c-format msgid "processing remote data for replication target relation \"%s.%s\" column \"%s\", remote type %s, local type %s" msgstr "Verarbeiten empfangener Daten für Replikationszielrelation »%s.%s« Spalte »%s«, entfernter Typ %s, lokaler Typ %s" -#: replication/logical/worker.c:552 +#: replication/logical/worker.c:570 replication/logical/worker.c:699 +#, fuzzy, c-format +#| msgid "incorrect binary data format in function argument %d" +msgid "incorrect binary data format in logical replication column %d" +msgstr "falsches Binärdatenformat in Funktionsargument %d" + +#: replication/logical/worker.c:778 #, c-format msgid "ORIGIN message sent out of order" msgstr "ORIGIN-Nachricht in falscher Reihenfolge gesendet" -#: replication/logical/worker.c:702 +#: replication/logical/worker.c:1037 replication/logical/worker.c:1049 +#, fuzzy, c-format +#| msgid "could not read from backend variables file \"%s\": %s\n" +msgid "could not read from streaming transaction's changes file \"%s\": %m" +msgstr "konnte nicht aus Servervariablendatei »%s« lesen: %s\n" + +#: replication/logical/worker.c:1274 #, c-format msgid "publisher did not send replica identity column expected by the logical replication target relation \"%s.%s\"" msgstr "Publikationsserver hat nicht die Replikidentitätsspalten gesendet, die von Replikationszielrelation »%s.%s« erwartet wurden" -#: replication/logical/worker.c:709 +#: replication/logical/worker.c:1281 #, c-format msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "Zielrelation für logische Replikation »%s.%s« hat weder REPLICA-IDENTITY-Index noch Primärschlüssel und die publizierte Relation hat kein REPLICA IDENTITY FULL" -#: replication/logical/worker.c:1387 +#: replication/logical/worker.c:1994 #, c-format msgid "invalid logical replication message type \"%c\"" msgstr "ungültiger Nachrichtentyp für logische Replikation »%c«" -#: replication/logical/worker.c:1529 +#: replication/logical/worker.c:2145 #, c-format msgid "data stream from publisher has ended" msgstr "Datenstrom vom Publikationsserver endete" -#: replication/logical/worker.c:1684 +#: replication/logical/worker.c:2295 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "Arbeitsprozess für logische Replikation wird abgebrochen wegen Zeitüberschreitung" -#: replication/logical/worker.c:1832 +#: replication/logical/worker.c:2442 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was removed" msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird anhalten, weil die Subskription entfernt wurde" -#: replication/logical/worker.c:1846 +#: replication/logical/worker.c:2456 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird anhalten, weil die Subskription deaktiviert wurde" -#: replication/logical/worker.c:1860 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because the connection information was changed" -msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird neu starten, weil die Verbindungsinformationen geändert wurden" - -#: replication/logical/worker.c:1874 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" +#: replication/logical/worker.c:2478 +#, fuzzy, c-format +#| msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" +msgid "logical replication apply worker for subscription \"%s\" will restart because of a parameter change" msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird neu starten, weil die Subskription umbenannt wurde" -#: replication/logical/worker.c:1891 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because the replication slot name was changed" -msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird neu starten, weil der Replikations-Slot-Name geändert wurde" - -#: replication/logical/worker.c:1905 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because subscription's publications were changed" -msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird neu starten, weil die Publikationen der Subskription geandert wurden" +#: replication/logical/worker.c:2641 replication/logical/worker.c:2663 +#, fuzzy, c-format +#| msgid "could not read from file \"%s\": %m" +msgid "could not read from streaming transaction's subxact file \"%s\": %m" +msgstr "konnte nicht aus Datei »%s« lesen: %m" -#: replication/logical/worker.c:1995 +#: replication/logical/worker.c:3009 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "Apply-Worker für logische Replikation für Subskription %u« wird nicht starten, weil die Subskription während des Starts deaktiviert wurde" -#: replication/logical/worker.c:2007 +#: replication/logical/worker.c:3021 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird nicht starten, weil die Subskription während des Starts deaktiviert wurde" -#: replication/logical/worker.c:2025 +#: replication/logical/worker.c:3039 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "Arbeitsprozess für logische Replikation für Tabellensynchronisation für Subskription »%s«, Tabelle »%s« hat gestartet" -#: replication/logical/worker.c:2029 +#: replication/logical/worker.c:3043 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "Apply-Worker für logische Replikation für Subskription »%s« hat gestartet" -#: replication/logical/worker.c:2068 +#: replication/logical/worker.c:3080 #, c-format msgid "subscription has no replication slot set" msgstr "für die Subskription ist kein Replikations-Slot gesetzt" -#: replication/pgoutput/pgoutput.c:147 +#: replication/pgoutput/pgoutput.c:198 #, c-format msgid "invalid proto_version" msgstr "ungültige proto_version" -#: replication/pgoutput/pgoutput.c:152 +#: replication/pgoutput/pgoutput.c:203 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version »%s« ist außerhalb des gültigen Bereichs" -#: replication/pgoutput/pgoutput.c:169 +#: replication/pgoutput/pgoutput.c:220 #, c-format msgid "invalid publication_names syntax" msgstr "ungültige Syntax für publication_names" -#: replication/pgoutput/pgoutput.c:211 +#: replication/pgoutput/pgoutput.c:290 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "Client sendete proto_version=%d, aber wir unterstützen nur Protokoll %d oder niedriger" -#: replication/pgoutput/pgoutput.c:217 +#: replication/pgoutput/pgoutput.c:296 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "Client sendete proto_version=%d, aber wir unterstützen nur Protokoll %d oder höher" -#: replication/pgoutput/pgoutput.c:223 +#: replication/pgoutput/pgoutput.c:302 #, c-format msgid "publication_names parameter missing" msgstr "Parameter »publication_names« fehlt" +#: replication/pgoutput/pgoutput.c:315 +#, fuzzy, c-format +#| msgid "client sent proto_version=%d but we only support protocol %d or higher" +msgid "requested proto_version=%d does not support streaming, need %d or higher" +msgstr "Client sendete proto_version=%d, aber wir unterstützen nur Protokoll %d oder höher" + +#: replication/pgoutput/pgoutput.c:320 +#, fuzzy, c-format +#| msgid "integer of size %lu not supported by pqPutInt" +msgid "streaming requested, but not supported by output plugin" +msgstr "Integer der Größe %lu wird von pqPutInt nicht unterstützt" + #: replication/slot.c:182 #, c-format msgid "replication slot name \"%s\" is too short" @@ -19073,396 +19765,385 @@ msgstr "Replikations-Slot-Name »%s« enthält ungültiges Zeichen" msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "Replikations-Slot-Namen dürfen nur Kleinbuchstaben, Zahlen und Unterstriche enthalten." -#: replication/slot.c:253 +#: replication/slot.c:260 #, c-format msgid "replication slot \"%s\" already exists" msgstr "Replikations-Slot »%s« existiert bereits" -#: replication/slot.c:263 +#: replication/slot.c:270 #, c-format msgid "all replication slots are in use" msgstr "alle Replikations-Slots sind in Benutzung" -#: replication/slot.c:264 +#: replication/slot.c:271 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Geben Sie einen frei oder erhöhen Sie max_replication_slots." -#: replication/slot.c:393 replication/slotfuncs.c:707 +#: replication/slot.c:424 replication/slotfuncs.c:765 +#: utils/adt/pgstatfuncs.c:2227 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "Replikations-Slot »%s« existiert nicht" -#: replication/slot.c:404 replication/slot.c:965 +#: replication/slot.c:462 replication/slot.c:1043 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "Replikations-Slot »%s« ist aktiv für PID %d" -#: replication/slot.c:642 replication/slot.c:1231 replication/slot.c:1614 +#: replication/slot.c:701 replication/slot.c:1350 replication/slot.c:1733 #, c-format msgid "could not remove directory \"%s\"" msgstr "konnte Verzeichnis »%s« nicht löschen" -#: replication/slot.c:1000 +#: replication/slot.c:1078 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "Replikations-Slots können nur verwendet werden, wenn max_replication_slots > 0" -#: replication/slot.c:1005 +#: replication/slot.c:1083 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "Replikations-Slots können nur verwendet werden, wenn wal_level >= replica" -#: replication/slot.c:1132 -#, fuzzy, c-format -#| msgid "terminating walsender process due to replication timeout" -msgid "terminating walsender %d because replication slot \"%s\" is too far behind" -msgstr "WAL-Sender-Prozess wird abgebrochen wegen Zeitüberschreitung bei der Replikation" +#: replication/slot.c:1239 +#, c-format +msgid "terminating process %d because replication slot \"%s\" is too far behind" +msgstr "Prozess %d wird beendet, weil Replikations-Slot »%s« zu weit zurück liegt" -#: replication/slot.c:1142 +#: replication/slot.c:1258 #, c-format msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" -msgstr "" +msgstr "Slot »%s« wird ungültig gemacht, weil seine restart_lsn %X/%X max_slot_wal_keep_size überschreitet" -#: replication/slot.c:1552 +#: replication/slot.c:1671 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "Replikations-Slot-Datei »%s« hat falsche magische Zahl: %u statt %u" -#: replication/slot.c:1559 +#: replication/slot.c:1678 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "Replikations-Slot-Datei »%s« hat nicht unterstützte Version %u" -#: replication/slot.c:1566 +#: replication/slot.c:1685 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "Replikations-Slot-Datei »%s« hat falsche Länge %u" -#: replication/slot.c:1602 +#: replication/slot.c:1721 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "Prüfsummenfehler bei Replikations-Slot-Datei »%s«: ist %u, sollte %u sein" -#: replication/slot.c:1636 +#: replication/slot.c:1755 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "logischer Replikations-Slot »%s« existiert, aber wal_level < logical" -#: replication/slot.c:1638 +#: replication/slot.c:1757 #, c-format msgid "Change wal_level to be logical or higher." msgstr "Ändern Sie wal_level in logical oder höher." -#: replication/slot.c:1642 +#: replication/slot.c:1761 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "physischer Replikations-Slot »%s« existiert, aber wal_level < replica" -#: replication/slot.c:1644 +#: replication/slot.c:1763 #, c-format msgid "Change wal_level to be replica or higher." msgstr "Ändern Sie wal_level in replica oder höher." -#: replication/slot.c:1678 +#: replication/slot.c:1797 #, c-format msgid "too many replication slots active before shutdown" msgstr "zu viele aktive Replikations-Slots vor dem Herunterfahren" -#: replication/slotfuncs.c:579 -#, fuzzy, c-format -#| msgid "invalid array flags" +#: replication/slotfuncs.c:630 +#, c-format msgid "invalid target WAL LSN" -msgstr "ungültige Array-Flags" +msgstr "ungültige Ziel-WAL-LSN" -#: replication/slotfuncs.c:601 +#: replication/slotfuncs.c:652 #, c-format -msgid "cannot advance replication slot that has not previously reserved WAL" -msgstr "" +msgid "replication slot \"%s\" cannot be advanced" +msgstr "Replikations-Slot »%s« kann nicht vorwärtsgesetzt werden" -#: replication/slotfuncs.c:617 +#: replication/slotfuncs.c:670 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" -msgstr "" +msgstr "Replikations-Slot kann nicht auf %X/%X vorwärtsgesetzt werden, Minimum ist %X/%X" -#: replication/slotfuncs.c:714 -#, fuzzy, c-format -#| msgid "cannot use physical replication slot for logical decoding" +#: replication/slotfuncs.c:777 +#, c-format msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" -msgstr "physischer Replikations-Slot kann nicht für logisches Dekodieren verwendet werden" +msgstr "physischer Replikations-Slot »%s« kann nicht als logischer Replikations-Slot kopiert werden" -#: replication/slotfuncs.c:716 -#, fuzzy, c-format -#| msgid "cannot use a logical replication slot for physical replication" +#: replication/slotfuncs.c:779 +#, c-format msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" -msgstr "logischer Replikations-Slot kann nicht für physische Replikation verwendet werden" +msgstr "logischer Replikations-Slot »%s« kann nicht als physischer Replikations-Slot kopiert werden" -#: replication/slotfuncs.c:725 -#, fuzzy, c-format -#| msgid "could not drop the replication slot \"%s\" on publisher" +#: replication/slotfuncs.c:786 +#, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" -msgstr "konnte Replikations-Slot »%s« auf dem Publikationsserver nicht löschen" +msgstr "ein Replikations-Slot, der kein WAL reserviert, kann nicht kopiert werden" -#: replication/slotfuncs.c:800 -#, fuzzy, c-format -#| msgid "could not create replication slot \"%s\": %s" +#: replication/slotfuncs.c:863 +#, c-format msgid "could not copy replication slot \"%s\"" -msgstr "konnte Replikations-Slot »%s« nicht erzeugen: %s" +msgstr "konnte Replikations-Slot »%s« nicht kopieren" -#: replication/slotfuncs.c:802 +#: replication/slotfuncs.c:865 #, c-format msgid "The source replication slot was modified incompatibly during the copy operation." -msgstr "" +msgstr "Der Quell-Replikations-Slot wurde während der Kopieroperation inkompatibel geändert." -#: replication/slotfuncs.c:808 -#, fuzzy, c-format -#| msgid "could not create replication slot \"%s\": %s" +#: replication/slotfuncs.c:871 +#, c-format msgid "cannot copy unfinished logical replication slot \"%s\"" -msgstr "konnte Replikations-Slot »%s« nicht erzeugen: %s" +msgstr "kann unfertigen Replikations-Slot »%s« nicht kopieren" -#: replication/slotfuncs.c:810 +#: replication/slotfuncs.c:873 #, c-format msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." -msgstr "" +msgstr "Versuchen Sie es erneut, wenn confirmed_flush_lsn des Quell-Replikations-Slots gültig ist." -#: replication/syncrep.c:257 +#: replication/syncrep.c:269 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "Warten auf synchrone Replikation wird storniert and Verbindung wird abgebrochen, aufgrund von Anweisung des Administrators" -#: replication/syncrep.c:258 replication/syncrep.c:275 +#: replication/syncrep.c:270 replication/syncrep.c:287 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "Die Transaktion wurde lokal bereits committet, aber möglicherweise noch nicht zum Standby repliziert." -#: replication/syncrep.c:274 +#: replication/syncrep.c:286 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "storniere Warten auf synchrone Replikation wegen Benutzeraufforderung" -#: replication/syncrep.c:416 -#, c-format -msgid "standby \"%s\" now has synchronous standby priority %u" -msgstr "Standby »%s« hat jetzt synchrone Standby-Priorität %u" - -#: replication/syncrep.c:483 +#: replication/syncrep.c:495 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "Standby »%s« ist jetzt ein synchroner Standby mit Priorität %u" -#: replication/syncrep.c:487 +#: replication/syncrep.c:499 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "Standby »%s« ist jetzt ein Kandidat für synchroner Standby mit Quorum" -#: replication/syncrep.c:1034 +#: replication/syncrep.c:1046 #, c-format msgid "synchronous_standby_names parser failed" msgstr "Parser für synchronous_standby_names fehlgeschlagen" -#: replication/syncrep.c:1040 +#: replication/syncrep.c:1052 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "Anzahl synchroner Standbys (%d) muss größer als null sein" -#: replication/walreceiver.c:171 +#: replication/walreceiver.c:160 #, c-format msgid "terminating walreceiver process due to administrator command" msgstr "WAL-Receiver-Prozess wird abgebrochen aufgrund von Anweisung des Administrators" -#: replication/walreceiver.c:297 +#: replication/walreceiver.c:285 #, c-format msgid "could not connect to the primary server: %s" msgstr "konnte nicht mit dem Primärserver verbinden: %s" -#: replication/walreceiver.c:343 +#: replication/walreceiver.c:331 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "Datenbanksystemidentifikator unterscheidet sich zwischen Primär- und Standby-Server" -#: replication/walreceiver.c:344 +#: replication/walreceiver.c:332 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "Identifikator des Primärservers ist %s, Identifikator des Standby ist %s." -#: replication/walreceiver.c:354 +#: replication/walreceiver.c:342 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "höchste Zeitleiste %u des primären Servers liegt hinter Wiederherstellungszeitleiste %u zurück" -#: replication/walreceiver.c:408 +#: replication/walreceiver.c:396 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "WAL-Streaming vom Primärserver gestartet bei %X/%X auf Zeitleiste %u" -#: replication/walreceiver.c:413 +#: replication/walreceiver.c:400 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "WAL-Streaming neu gestartet bei %X/%X auf Zeitleiste %u" -#: replication/walreceiver.c:442 +#: replication/walreceiver.c:428 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "kann WAL-Streaming nicht fortsetzen, Wiederherstellung ist bereits beendet" -#: replication/walreceiver.c:479 +#: replication/walreceiver.c:465 #, c-format msgid "replication terminated by primary server" msgstr "Replikation wurde durch Primärserver beendet" -#: replication/walreceiver.c:480 +#: replication/walreceiver.c:466 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "WAL-Ende erreicht auf Zeitleiste %u bei %X/%X." -#: replication/walreceiver.c:568 +#: replication/walreceiver.c:554 #, c-format msgid "terminating walreceiver due to timeout" msgstr "WAL-Receiver-Prozess wird abgebrochen wegen Zeitüberschreitung" -#: replication/walreceiver.c:606 +#: replication/walreceiver.c:592 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "Primärserver enthält kein WAL mehr auf angeforderter Zeitleiste %u" -#: replication/walreceiver.c:622 replication/walreceiver.c:929 +#: replication/walreceiver.c:608 replication/walreceiver.c:903 #, c-format msgid "could not close log segment %s: %m" msgstr "konnte Logsegment %s nicht schließen: %m" -#: replication/walreceiver.c:742 +#: replication/walreceiver.c:727 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "hole Zeitleisten-History-Datei für Zeitleiste %u vom Primärserver" -#: replication/walreceiver.c:976 +#: replication/walreceiver.c:950 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "konnte nicht in Logsegment %s bei Position %u, Länge %lu schreiben: %m" -#: replication/walsender.c:530 storage/smgr/md.c:1291 +#: replication/walsender.c:524 storage/smgr/md.c:1320 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "konnte Positionszeiger nicht ans Ende der Datei »%s« setzen: %m" -#: replication/walsender.c:534 +#: replication/walsender.c:528 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "konnte Positionszeiger nicht den Anfang der Datei »%s« setzen: %m" -#: replication/walsender.c:585 +#: replication/walsender.c:579 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "IDENTIFY_SYSTEM wurde nicht vor START_REPLICATION ausgeführt" -#: replication/walsender.c:602 +#: replication/walsender.c:605 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "logischer Replikations-Slot kann nicht für physische Replikation verwendet werden" -#: replication/walsender.c:665 +#: replication/walsender.c:674 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "angeforderter Startpunkt %X/%X auf Zeitleiste %u ist nicht in der History dieses Servers" -#: replication/walsender.c:669 +#: replication/walsender.c:677 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "Die History dieses Servers zweigte von Zeitleiste %u bei %X/%X ab." -#: replication/walsender.c:714 +#: replication/walsender.c:721 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "angeforderter Startpunkt %X/%X ist vor der WAL-Flush-Position dieses Servers %X/%X" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:966 +#: replication/walsender.c:977 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s darf nicht in einer Transaktion aufgerufen werden" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:976 +#: replication/walsender.c:987 #, c-format msgid "%s must be called inside a transaction" msgstr "%s muss in einer Transaktion aufgerufen werden" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:982 +#: replication/walsender.c:993 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s muss in einer Transaktion im Isolationsmodus REPEATABLE READ aufgerufen werden" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:988 +#: replication/walsender.c:999 #, c-format msgid "%s must be called before any query" msgstr "%s muss vor allen Anfragen aufgerufen werden" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:994 +#: replication/walsender.c:1005 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s darf nicht in einer Subtransaktion aufgerufen werden" -#: replication/walsender.c:1145 +#: replication/walsender.c:1147 +#, c-format +msgid "cannot read from logical replication slot \"%s\"" +msgstr "kann nicht aus logischem Replikations-Slot »%s« lesen" + +#: replication/walsender.c:1149 +#, c-format +msgid "This slot has been invalidated because it exceeded the maximum reserved size." +msgstr "Dieser Slot wurde ungültig gemacht, weil er die maximale reservierte Größe überschritten hat." + +#: replication/walsender.c:1159 #, c-format msgid "terminating walsender process after promotion" msgstr "WAL-Sender-Prozess wird nach Beförderung abgebrochen" -#: replication/walsender.c:1526 +#: replication/walsender.c:1524 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "während der WAL-Sender im Stoppmodus ist können keine neuen Befehle ausgeführt werden" -#: replication/walsender.c:1559 +#: replication/walsender.c:1561 +#, c-format +msgid "cannot execute SQL commands in WAL sender for physical replication" +msgstr "im WAL-Sender für physische Replikation können keine SQL-Befehle ausgeführt werden" + +#: replication/walsender.c:1584 #, c-format msgid "received replication command: %s" msgstr "Replikationsbefehl empfangen: %s" -#: replication/walsender.c:1575 tcop/fastpath.c:279 tcop/postgres.c:1103 -#: tcop/postgres.c:1455 tcop/postgres.c:1716 tcop/postgres.c:2174 -#: tcop/postgres.c:2535 tcop/postgres.c:2614 +#: replication/walsender.c:1592 tcop/fastpath.c:208 tcop/postgres.c:1078 +#: tcop/postgres.c:1430 tcop/postgres.c:1691 tcop/postgres.c:2176 +#: tcop/postgres.c:2586 tcop/postgres.c:2665 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "aktuelle Transaktion wurde abgebrochen, Befehle werden bis zum Ende der Transaktion ignoriert" -#: replication/walsender.c:1643 -#, c-format -msgid "cannot execute SQL commands in WAL sender for physical replication" -msgstr "im WAL-Sender für physische Replikation können keine SQL-Befehle ausgeführt werden" - -#: replication/walsender.c:1692 replication/walsender.c:1708 +#: replication/walsender.c:1727 replication/walsender.c:1762 #, c-format msgid "unexpected EOF on standby connection" msgstr "unerwartetes EOF auf Standby-Verbindung" -#: replication/walsender.c:1722 -#, c-format -msgid "unexpected standby message type \"%c\", after receiving CopyDone" -msgstr "unerwarteter Standby-Message-Typ »%c«, nach Empfang von CopyDone" - -#: replication/walsender.c:1760 +#: replication/walsender.c:1750 #, c-format msgid "invalid standby message type \"%c\"" msgstr "ungültiger Standby-Message-Typ »%c«" -#: replication/walsender.c:1801 +#: replication/walsender.c:1839 #, c-format msgid "unexpected message type \"%c\"" msgstr "unerwarteter Message-Typ »%c«" -#: replication/walsender.c:2219 +#: replication/walsender.c:2252 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "WAL-Sender-Prozess wird abgebrochen wegen Zeitüberschreitung bei der Replikation" -#: replication/walsender.c:2296 -#, c-format -msgid "\"%s\" has now caught up with upstream server" -msgstr "»%s« hat jetzt den Upstream-Server eingeholt" - -#: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:989 +#: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:999 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "Regel »%s« für Relation »%s« existiert bereits" @@ -19527,324 +20208,335 @@ msgstr "»%s« ist bereits eine Sicht" msgid "view rule for \"%s\" must be named \"%s\"" msgstr "Sicht-Regel für »%s« muss »%s« heißen" -#: rewrite/rewriteDefine.c:434 +#: rewrite/rewriteDefine.c:435 #, c-format msgid "cannot convert partitioned table \"%s\" to a view" msgstr "kann partitionierte Tabelle »%s« nicht in eine Sicht umwandeln" -#: rewrite/rewriteDefine.c:440 +#: rewrite/rewriteDefine.c:444 #, c-format msgid "cannot convert partition \"%s\" to a view" msgstr "kann Partition »%s« nicht in eine Sicht umwandeln" -#: rewrite/rewriteDefine.c:449 +#: rewrite/rewriteDefine.c:453 #, c-format msgid "could not convert table \"%s\" to a view because it is not empty" msgstr "konnte Tabelle »%s« nicht in Sicht umwandeln, weil sie nicht leer ist" -#: rewrite/rewriteDefine.c:458 +#: rewrite/rewriteDefine.c:462 #, c-format msgid "could not convert table \"%s\" to a view because it has triggers" msgstr "konnte Tabelle »%s« nicht in Sicht umwandeln, weil sie Trigger hat" -#: rewrite/rewriteDefine.c:460 +#: rewrite/rewriteDefine.c:464 #, c-format msgid "In particular, the table cannot be involved in any foreign key relationships." msgstr "Insbesondere darf die Tabelle nicht in Fremschlüsselverhältnisse eingebunden sein." -#: rewrite/rewriteDefine.c:465 +#: rewrite/rewriteDefine.c:469 #, c-format msgid "could not convert table \"%s\" to a view because it has indexes" msgstr "konnte Tabelle »%s« nicht in Sicht umwandeln, weil sie Indexe hat" -#: rewrite/rewriteDefine.c:471 +#: rewrite/rewriteDefine.c:475 #, c-format msgid "could not convert table \"%s\" to a view because it has child tables" msgstr "konnte Tabelle »%s« nicht in Sicht umwandeln, weil sie abgeleitete Tabellen hat" -#: rewrite/rewriteDefine.c:477 +#: rewrite/rewriteDefine.c:481 +#, c-format +msgid "could not convert table \"%s\" to a view because it has parent tables" +msgstr "konnte Tabelle »%s« nicht in Sicht umwandeln, weil sie Elterntabellen hat" + +#: rewrite/rewriteDefine.c:487 #, c-format msgid "could not convert table \"%s\" to a view because it has row security enabled" msgstr "konnte Tabelle »%s« nicht in Sicht umwandeln, weil sie Sicherheit auf Zeilenebene eingeschaltet hat" -#: rewrite/rewriteDefine.c:483 +#: rewrite/rewriteDefine.c:493 #, c-format msgid "could not convert table \"%s\" to a view because it has row security policies" msgstr "konnte Tabelle »%s« nicht in Sicht umwandeln, weil sie Policys für Sicherheit auf Zeilenebene hat" -#: rewrite/rewriteDefine.c:510 +#: rewrite/rewriteDefine.c:520 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "Regel kann nicht mehrere RETURNING-Listen enthalten" -#: rewrite/rewriteDefine.c:515 +#: rewrite/rewriteDefine.c:525 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "RETURNING-Listen werden in Regeln mit Bedingung nicht unterstützt" -#: rewrite/rewriteDefine.c:519 +#: rewrite/rewriteDefine.c:529 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "RETURNING-Listen werden nur in INSTEAD-Regeln unterstützt" -#: rewrite/rewriteDefine.c:683 +#: rewrite/rewriteDefine.c:693 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "Targetliste von SELECT-Regel hat zu viele Einträge" -#: rewrite/rewriteDefine.c:684 +#: rewrite/rewriteDefine.c:694 #, c-format msgid "RETURNING list has too many entries" msgstr "RETURNING-Liste hat zu viele Einträge" -#: rewrite/rewriteDefine.c:711 +#: rewrite/rewriteDefine.c:721 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "kann Relation mit gelöschten Spalten nicht in Sicht umwandeln" -#: rewrite/rewriteDefine.c:712 +#: rewrite/rewriteDefine.c:722 #, c-format msgid "cannot create a RETURNING list for a relation containing dropped columns" msgstr "für eine Relation mit gelöschten Spalten kann keine RETURNING-Liste erzeugt werden" -#: rewrite/rewriteDefine.c:718 +#: rewrite/rewriteDefine.c:728 #, c-format msgid "SELECT rule's target entry %d has different column name from column \"%s\"" msgstr "Spaltenname in Targeteintrag %d von SELECT-Regel unterscheidet sich von Spalte »%s«" -#: rewrite/rewriteDefine.c:720 +#: rewrite/rewriteDefine.c:730 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "SELECT-Targeteintrag heißt »%s«." -#: rewrite/rewriteDefine.c:729 +#: rewrite/rewriteDefine.c:739 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "Typ von Targeteintrag %d von SELECT-Regel unterscheidet sich von Spalte »%s«" -#: rewrite/rewriteDefine.c:731 +#: rewrite/rewriteDefine.c:741 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "Eintrag %d in RETURNING-Liste hat anderen Typ als Spalte »%s«" -#: rewrite/rewriteDefine.c:734 rewrite/rewriteDefine.c:758 +#: rewrite/rewriteDefine.c:744 rewrite/rewriteDefine.c:768 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "SELECT-Targeteintrag hat Typ %s, aber Spalte hat Typ %s." -#: rewrite/rewriteDefine.c:737 rewrite/rewriteDefine.c:762 +#: rewrite/rewriteDefine.c:747 rewrite/rewriteDefine.c:772 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "Eintrag in RETURNING-Liste hat Typ %s, aber Spalte hat Typ %s." -#: rewrite/rewriteDefine.c:753 +#: rewrite/rewriteDefine.c:763 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "Größe von Targeteintrag %d von SELECT-Regel unterscheidet sich von Spalte »%s«" -#: rewrite/rewriteDefine.c:755 +#: rewrite/rewriteDefine.c:765 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "Eintrag %d in RETURNING-Liste hat andere Größe als Spalte »%s«" -#: rewrite/rewriteDefine.c:772 +#: rewrite/rewriteDefine.c:782 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "Targetliste von SELECT-Regeln hat zu wenige Einträge" -#: rewrite/rewriteDefine.c:773 +#: rewrite/rewriteDefine.c:783 #, c-format msgid "RETURNING list has too few entries" msgstr "RETURNING-Liste hat zu wenige Einträge" -#: rewrite/rewriteDefine.c:866 rewrite/rewriteDefine.c:980 +#: rewrite/rewriteDefine.c:876 rewrite/rewriteDefine.c:990 #: rewrite/rewriteSupport.c:109 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "Regel »%s« für Relation »%s« existiert nicht" -#: rewrite/rewriteDefine.c:999 +#: rewrite/rewriteDefine.c:1009 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "Umbenennen einer ON-SELECT-Regel ist nicht erlaubt" -#: rewrite/rewriteHandler.c:545 +#: rewrite/rewriteHandler.c:551 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "WITH-Anfragename »%s« erscheint sowohl in der Regelaktion als auch in der umzuschreibenden Anfrage" -#: rewrite/rewriteHandler.c:605 +#: rewrite/rewriteHandler.c:611 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "RETURNING-Listen können nicht in mehreren Regeln auftreten" -#: rewrite/rewriteHandler.c:816 rewrite/rewriteHandler.c:828 -#, c-format -msgid "cannot insert into column \"%s\"" +#: rewrite/rewriteHandler.c:843 rewrite/rewriteHandler.c:882 +#, fuzzy, c-format +#| msgid "cannot insert into column \"%s\"" +msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "kann nicht in Spalte »%s« einfügen" -#: rewrite/rewriteHandler.c:817 rewrite/rewriteHandler.c:839 +#: rewrite/rewriteHandler.c:845 rewrite/rewriteHandler.c:911 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "Spalte »%s« ist eine Identitätsspalte, die als GENERATED ALWAYS definiert ist." -#: rewrite/rewriteHandler.c:819 +#: rewrite/rewriteHandler.c:847 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Verwenden Sie OVERRIDING SYSTEM VALUE, um diese Einschränkung außer Kraft zu setzen." -#: rewrite/rewriteHandler.c:838 rewrite/rewriteHandler.c:845 +#: rewrite/rewriteHandler.c:909 rewrite/rewriteHandler.c:917 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "Spalte »%s« kann nur auf DEFAULT aktualisiert werden" -#: rewrite/rewriteHandler.c:1014 rewrite/rewriteHandler.c:1032 +#: rewrite/rewriteHandler.c:1064 rewrite/rewriteHandler.c:1082 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "mehrere Zuweisungen zur selben Spalte »%s«" -#: rewrite/rewriteHandler.c:2062 +#: rewrite/rewriteHandler.c:2084 rewrite/rewriteHandler.c:3898 +#, c-format +msgid "infinite recursion detected in rules for relation \"%s\"" +msgstr "unendliche Rekursion entdeckt in Regeln für Relation »%s«" + +#: rewrite/rewriteHandler.c:2169 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "unendliche Rekursion entdeckt in Policys für Relation »%s«" -#: rewrite/rewriteHandler.c:2382 +#: rewrite/rewriteHandler.c:2489 msgid "Junk view columns are not updatable." msgstr "Junk-Sichtspalten sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2387 +#: rewrite/rewriteHandler.c:2494 msgid "View columns that are not columns of their base relation are not updatable." msgstr "Sichtspalten, die nicht Spalten ihrer Basisrelation sind, sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2390 +#: rewrite/rewriteHandler.c:2497 msgid "View columns that refer to system columns are not updatable." msgstr "Sichtspalten, die auf Systemspalten verweisen, sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2393 +#: rewrite/rewriteHandler.c:2500 msgid "View columns that return whole-row references are not updatable." msgstr "Sichtspalten, die Verweise auf ganze Zeilen zurückgeben, sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2454 +#: rewrite/rewriteHandler.c:2561 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Sichten, die DISTINCT enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2457 +#: rewrite/rewriteHandler.c:2564 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Sichten, die GROUP BY enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2460 +#: rewrite/rewriteHandler.c:2567 msgid "Views containing HAVING are not automatically updatable." msgstr "Sichten, die HAVING enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2463 +#: rewrite/rewriteHandler.c:2570 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "Sichten, die UNION, INTERSECT oder EXCEPT enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2466 +#: rewrite/rewriteHandler.c:2573 msgid "Views containing WITH are not automatically updatable." msgstr "Sichten, die WITH enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2469 +#: rewrite/rewriteHandler.c:2576 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Sichten, die LIMIT oder OFFSET enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2481 +#: rewrite/rewriteHandler.c:2588 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Sichten, die Aggregatfunktionen zurückgeben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2484 +#: rewrite/rewriteHandler.c:2591 msgid "Views that return window functions are not automatically updatable." msgstr "Sichten, die Fensterfunktionen zurückgeben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2487 +#: rewrite/rewriteHandler.c:2594 msgid "Views that return set-returning functions are not automatically updatable." msgstr "Sichten, die Funktionen mit Ergebnismenge zurückgeben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2494 rewrite/rewriteHandler.c:2498 -#: rewrite/rewriteHandler.c:2506 +#: rewrite/rewriteHandler.c:2601 rewrite/rewriteHandler.c:2605 +#: rewrite/rewriteHandler.c:2613 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "Sichten, die nicht aus einer einzigen Tabelle oder Sicht lesen, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2509 +#: rewrite/rewriteHandler.c:2616 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Sichten, die TABLESAMPLE enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2533 +#: rewrite/rewriteHandler.c:2640 msgid "Views that have no updatable columns are not automatically updatable." msgstr "Sichten, die keine aktualisierbaren Spalten haben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:3010 +#: rewrite/rewriteHandler.c:3117 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "kann nicht in Spalte »%s« von Sicht »%s« einfügen" -#: rewrite/rewriteHandler.c:3018 +#: rewrite/rewriteHandler.c:3125 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "kann Spalte »%s« von Sicht »%s« nicht aktualisieren" -#: rewrite/rewriteHandler.c:3496 +#: rewrite/rewriteHandler.c:3603 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "DO-INSTEAD-NOTHING-Regeln werden für datenmodifizierende Anweisungen in WITH nicht unterstützt" -#: rewrite/rewriteHandler.c:3510 +#: rewrite/rewriteHandler.c:3617 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "DO-INSTEAD-Regeln mit Bedingung werden für datenmodifizierende Anweisungen in WITH nicht unterstützt" -#: rewrite/rewriteHandler.c:3514 +#: rewrite/rewriteHandler.c:3621 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "DO-ALSO-Regeln werden für datenmodifizierende Anweisungen in WITH nicht unterstützt" -#: rewrite/rewriteHandler.c:3519 +#: rewrite/rewriteHandler.c:3626 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "DO-INSTEAD-Regeln mit mehreren Anweisungen werden für datenmodifizierende Anweisungen in WITH nicht unterstützt" -#: rewrite/rewriteHandler.c:3710 rewrite/rewriteHandler.c:3718 -#: rewrite/rewriteHandler.c:3726 +#: rewrite/rewriteHandler.c:3826 rewrite/rewriteHandler.c:3834 +#: rewrite/rewriteHandler.c:3842 #, c-format msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "Sichten mit DO-INSTEAD-Regeln mit Bedingung sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:3819 +#: rewrite/rewriteHandler.c:3935 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "INSERT RETURNING kann in Relation »%s« nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:3821 +#: rewrite/rewriteHandler.c:3937 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "Sie benötigen eine ON INSERT DO INSTEAD Regel ohne Bedingung, mit RETURNING-Klausel." -#: rewrite/rewriteHandler.c:3826 +#: rewrite/rewriteHandler.c:3942 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "UPDATE RETURNING kann in Relation »%s« nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:3828 +#: rewrite/rewriteHandler.c:3944 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "Sie benötigen eine ON UPDATE DO INSTEAD Regel ohne Bedingung, mit RETURNING-Klausel." -#: rewrite/rewriteHandler.c:3833 +#: rewrite/rewriteHandler.c:3949 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "DELETE RETURNING kann in Relation »%s« nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:3835 +#: rewrite/rewriteHandler.c:3951 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "Sie benötigen eine ON DELETE DO INSTEAD Regel ohne Bedingung, mit RETURNING-Klausel." -#: rewrite/rewriteHandler.c:3853 +#: rewrite/rewriteHandler.c:3969 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "INSERT mit ON-CONFLICT-Klausel kann nicht mit Tabelle verwendet werden, die INSERT- oder UPDATE-Regeln hat" -#: rewrite/rewriteHandler.c:3910 +#: rewrite/rewriteHandler.c:4026 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "WITH kann nicht in einer Anfrage verwendet werden, die durch Regeln in mehrere Anfragen umgeschrieben wird" @@ -19888,7 +20580,7 @@ msgstr "Zeichenketten mit Unicode-Escapes können nicht verwendet werden, wenn s #: scan.l:604 msgid "unhandled previous state in xqs" -msgstr "" +msgstr "unbehandelter vorheriger Zustand in xqs" #: scan.l:678 #, c-format @@ -19963,86 +20655,84 @@ msgstr "nicht standardkonforme Verwendung von Escape in Zeichenkettenkonstante" msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Verwenden Sie die Syntax für Escape-Zeichenketten, z.B. E'\\r\\n'." -#: snowball/dict_snowball.c:199 +#: snowball/dict_snowball.c:215 #, c-format msgid "no Snowball stemmer available for language \"%s\" and encoding \"%s\"" msgstr "kein Snowball-Stemmer für Sprache »%s« und Kodierung »%s« verfügbar" -#: snowball/dict_snowball.c:222 tsearch/dict_ispell.c:74 +#: snowball/dict_snowball.c:238 tsearch/dict_ispell.c:74 #: tsearch/dict_simple.c:49 #, c-format msgid "multiple StopWords parameters" msgstr "mehrere »StopWords«-Parameter" -#: snowball/dict_snowball.c:231 +#: snowball/dict_snowball.c:247 #, c-format msgid "multiple Language parameters" msgstr "mehrere »Language«-Parameter" -#: snowball/dict_snowball.c:238 +#: snowball/dict_snowball.c:254 #, c-format msgid "unrecognized Snowball parameter: \"%s\"" msgstr "unbekannter Snowball-Parameter: »%s«" -#: snowball/dict_snowball.c:246 +#: snowball/dict_snowball.c:262 #, c-format msgid "missing Language parameter" msgstr "Parameter »Language« fehlt" -#: statistics/dependencies.c:667 statistics/dependencies.c:720 -#: statistics/mcv.c:1475 statistics/mcv.c:1506 statistics/mvdistinct.c:348 -#: statistics/mvdistinct.c:401 utils/adt/pseudotypes.c:42 -#: utils/adt/pseudotypes.c:76 -#, c-format -msgid "cannot accept a value of type %s" -msgstr "kann keinen Wert vom Typ %s annehmen" - -#: statistics/extended_stats.c:145 +#: statistics/extended_stats.c:175 #, c-format msgid "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "Statistikobjekt »%s.%s« konnte für Relation »%s.%s« nicht berechnet werden" -#: statistics/mcv.c:1364 utils/adt/jsonfuncs.c:1800 +#: statistics/extended_stats.c:2277 +#, fuzzy, c-format +#| msgid "relation \"%s\" does not have a composite type" +msgid "relation \"pg_statistic\" does not have a composite type" +msgstr "Relation »%s« hat keinen zusammengesetzten Typ" + +#: statistics/mcv.c:1368 utils/adt/jsonfuncs.c:1941 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "Funktion, die einen Record zurückgibt, in einem Zusammenhang aufgerufen, der Typ record nicht verarbeiten kann" -#: storage/buffer/bufmgr.c:588 storage/buffer/bufmgr.c:669 +#: storage/buffer/bufmgr.c:601 storage/buffer/bufmgr.c:761 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "auf temporäre Tabellen anderer Sitzungen kann nicht zugegriffen werden" -#: storage/buffer/bufmgr.c:825 +#: storage/buffer/bufmgr.c:917 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "unerwartete Daten hinter Dateiende in Block %u von Relation %s" -#: storage/buffer/bufmgr.c:827 +#: storage/buffer/bufmgr.c:919 #, c-format msgid "This has been seen to occur with buggy kernels; consider updating your system." msgstr "Das scheint mit fehlerhaften Kernels vorzukommen; Sie sollten eine Systemaktualisierung in Betracht ziehen." -#: storage/buffer/bufmgr.c:925 +#: storage/buffer/bufmgr.c:1018 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "ungültige Seite in Block %u von Relation %s; fülle Seite mit Nullen" -#: storage/buffer/bufmgr.c:4211 +#: storage/buffer/bufmgr.c:4524 #, c-format msgid "could not write block %u of %s" msgstr "konnte Block %u von %s nicht schreiben" -#: storage/buffer/bufmgr.c:4213 +#: storage/buffer/bufmgr.c:4526 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Mehrere Fehlschläge --- Schreibfehler ist möglicherweise dauerhaft." -#: storage/buffer/bufmgr.c:4234 storage/buffer/bufmgr.c:4253 +#: storage/buffer/bufmgr.c:4547 storage/buffer/bufmgr.c:4566 #, c-format msgid "writing block %u of relation %s" msgstr "schreibe Block %u von Relation %s" -#: storage/buffer/bufmgr.c:4556 +#: storage/buffer/bufmgr.c:4870 #, c-format msgid "snapshot too old" msgstr "Snapshot zu alt" @@ -20057,221 +20747,246 @@ msgstr "kein leerer lokaler Puffer verfügbar" msgid "cannot access temporary tables during a parallel operation" msgstr "während einer parallelen Operation kann nicht auf temporäre Tabellen zugegriffen werden" -#: storage/file/buffile.c:319 -#, fuzzy, c-format -#| msgid "could not open temporary file \"%s\": %s\n" +#: storage/file/buffile.c:323 +#, c-format msgid "could not open temporary file \"%s\" from BufFile \"%s\": %m" -msgstr "konnte temporäre Datei »%s« nicht öffnen: %s\n" +msgstr "konnte temporäre Datei »%s« von BufFile »%s« nicht öffnen: %m" -#: storage/file/buffile.c:796 -#, fuzzy, c-format -#| msgid "could not open temporary file \"%s\": %s\n" +#: storage/file/buffile.c:684 storage/file/buffile.c:805 +#, c-format msgid "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" -msgstr "konnte temporäre Datei »%s« nicht öffnen: %s\n" +msgstr "konnte Größe von temporärer Datei »%s« von BufFile »%s« nicht bestimmen: %m" + +#: storage/file/buffile.c:884 +#, fuzzy, c-format +#| msgid "could not delete file \"%s\": %m" +msgid "could not delete shared fileset \"%s\": %m" +msgstr "konnte Datei »%s« nicht löschen: %m" + +#: storage/file/buffile.c:902 storage/smgr/md.c:306 storage/smgr/md.c:865 +#, c-format +msgid "could not truncate file \"%s\": %m" +msgstr "kann Datei »%s« nicht kürzen: %m" -#: storage/file/fd.c:506 storage/file/fd.c:578 storage/file/fd.c:614 +#: storage/file/fd.c:515 storage/file/fd.c:587 storage/file/fd.c:623 #, c-format msgid "could not flush dirty data: %m" msgstr "konnte schmutzige Daten nicht flushen: %m" -#: storage/file/fd.c:536 +#: storage/file/fd.c:545 #, c-format msgid "could not determine dirty data size: %m" msgstr "konnte Größe der schmutzigen Daten nicht bestimmen: %m" -#: storage/file/fd.c:588 +#: storage/file/fd.c:597 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "munmap() fehlgeschlagen beim Flushen von Daten: %m" -#: storage/file/fd.c:796 +#: storage/file/fd.c:836 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "konnte Datei »%s« nicht nach »%s« linken: %m" -#: storage/file/fd.c:879 +#: storage/file/fd.c:929 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit fehlgeschlagen: %m" -#: storage/file/fd.c:969 +#: storage/file/fd.c:1019 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "nicht genug Dateideskriptoren verfügbar, um Serverprozess zu starten" -#: storage/file/fd.c:970 +#: storage/file/fd.c:1020 #, c-format msgid "System allows %d, we need at least %d." msgstr "System erlaubt %d, wir benötigen mindestens %d." -#: storage/file/fd.c:1021 storage/file/fd.c:2355 storage/file/fd.c:2465 -#: storage/file/fd.c:2616 +#: storage/file/fd.c:1071 storage/file/fd.c:2408 storage/file/fd.c:2518 +#: storage/file/fd.c:2669 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "keine Dateideskriptoren mehr: %m; freigeben und nochmal versuchen" -#: storage/file/fd.c:1395 +#: storage/file/fd.c:1445 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "temporäre Datei: Pfad »%s«, Größe %lu" -#: storage/file/fd.c:1526 +#: storage/file/fd.c:1576 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "konnte temporäres Verzeichnis »%s« nicht erzeugen: %m" -#: storage/file/fd.c:1533 +#: storage/file/fd.c:1583 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "konnte temporäres Unterverzeichnis »%s« nicht erzeugen: %m" -#: storage/file/fd.c:1726 +#: storage/file/fd.c:1776 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "konnte temporäre Datei »%s« nicht erzeugen: %m" -#: storage/file/fd.c:1761 +#: storage/file/fd.c:1810 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "konnte temporäre Datei »%s« nicht öffnen: %m" -#: storage/file/fd.c:1802 -#, fuzzy, c-format -#| msgid "could not open temporary file \"%s\": %s\n" +#: storage/file/fd.c:1851 +#, c-format msgid "could not unlink temporary file \"%s\": %m" -msgstr "konnte temporäre Datei »%s« nicht öffnen: %s\n" +msgstr "konnte temporäre Datei »%s« nicht löschen: %m" + +#: storage/file/fd.c:1939 +#, c-format +msgid "could not delete file \"%s\": %m" +msgstr "konnte Datei »%s« nicht löschen: %m" -#: storage/file/fd.c:2066 +#: storage/file/fd.c:2119 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "Größe der temporären Datei überschreitet temp_file_limit (%dkB)" -#: storage/file/fd.c:2331 storage/file/fd.c:2390 +#: storage/file/fd.c:2384 storage/file/fd.c:2443 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "maxAllocatedDescs (%d) überschritten beim Versuch, die Datei »%s« zu öffnen" -#: storage/file/fd.c:2435 +#: storage/file/fd.c:2488 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "maxAllocatedDescs (%d) überschritten beim Versuch, den Befehl »%s« auszuführen" -#: storage/file/fd.c:2592 +#: storage/file/fd.c:2645 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "maxAllocatedDescs (%d) überschritten beim Versuch, das Verzeichnis »%s« zu öffnen" -#: storage/file/fd.c:3114 -#, fuzzy, c-format -#| msgid "could not locate temporary directory: %s\n" +#: storage/file/fd.c:3175 +#, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" -msgstr "konnte temporäres Verzeichnis nicht finden: %s\n" +msgstr "unerwartete Datei im Verzeichnis für temporäre Dateien gefunden: »%s«" -#: storage/file/sharedfileset.c:95 +#: storage/file/fd.c:3298 #, fuzzy, c-format -#| msgid "could not attach to dynamic shared area" +#| msgid "could not open file \"%s\": %m" +msgid "could not open %s: %m" +msgstr "konnte Datei »%s« nicht öffnen: %m" + +#: storage/file/fd.c:3304 +#, fuzzy, c-format +#| msgid "could not fsync file \"%s\": %m" +msgid "could not sync filesystem for \"%s\": %m" +msgstr "konnte Datei »%s« nicht fsyncen: %m" + +#: storage/file/sharedfileset.c:144 +#, c-format msgid "could not attach to a SharedFileSet that is already destroyed" -msgstr "konnte nicht an dynamische Shared Area anbinden" +msgstr "konnte nicht an ein SharedFileSet anbinden, das schon zerstört ist" -#: storage/ipc/dsm.c:338 +#: storage/ipc/dsm.c:351 #, c-format msgid "dynamic shared memory control segment is corrupt" msgstr "Kontrollsegment von dynamischem Shared Memory ist verfälscht" -#: storage/ipc/dsm.c:399 +#: storage/ipc/dsm.c:415 #, c-format msgid "dynamic shared memory control segment is not valid" msgstr "Kontrollsegment von dynamischem Shared Memory ist ungültig" -#: storage/ipc/dsm.c:494 +#: storage/ipc/dsm.c:592 #, c-format msgid "too many dynamic shared memory segments" msgstr "zu viele dynamische Shared-Memory-Segmente" -#: storage/ipc/dsm_impl.c:230 storage/ipc/dsm_impl.c:526 -#: storage/ipc/dsm_impl.c:630 storage/ipc/dsm_impl.c:801 +#: storage/ipc/dsm_impl.c:233 storage/ipc/dsm_impl.c:529 +#: storage/ipc/dsm_impl.c:633 storage/ipc/dsm_impl.c:804 #, c-format msgid "could not unmap shared memory segment \"%s\": %m" msgstr "konnte Shared-Memory-Segment »%s« nicht unmappen: %m" -#: storage/ipc/dsm_impl.c:240 storage/ipc/dsm_impl.c:536 -#: storage/ipc/dsm_impl.c:640 storage/ipc/dsm_impl.c:811 +#: storage/ipc/dsm_impl.c:243 storage/ipc/dsm_impl.c:539 +#: storage/ipc/dsm_impl.c:643 storage/ipc/dsm_impl.c:814 #, c-format msgid "could not remove shared memory segment \"%s\": %m" msgstr "konnte Shared-Memory-Segment »%s« nicht entfernen: %m" -#: storage/ipc/dsm_impl.c:264 storage/ipc/dsm_impl.c:711 -#: storage/ipc/dsm_impl.c:825 +#: storage/ipc/dsm_impl.c:267 storage/ipc/dsm_impl.c:714 +#: storage/ipc/dsm_impl.c:828 #, c-format msgid "could not open shared memory segment \"%s\": %m" msgstr "konnte Shared-Memory-Segment »%s« nicht öffnen: %m" -#: storage/ipc/dsm_impl.c:289 storage/ipc/dsm_impl.c:552 -#: storage/ipc/dsm_impl.c:756 storage/ipc/dsm_impl.c:849 +#: storage/ipc/dsm_impl.c:292 storage/ipc/dsm_impl.c:555 +#: storage/ipc/dsm_impl.c:759 storage/ipc/dsm_impl.c:852 #, c-format msgid "could not stat shared memory segment \"%s\": %m" msgstr "konnte »stat« für Shared-Memory-Segment »%s« nicht ausführen: %m" -#: storage/ipc/dsm_impl.c:316 storage/ipc/dsm_impl.c:900 +#: storage/ipc/dsm_impl.c:319 storage/ipc/dsm_impl.c:903 #, c-format msgid "could not resize shared memory segment \"%s\" to %zu bytes: %m" msgstr "konnte Größe des Shared-Memory-Segments »%s« nicht auf %zu Bytes ändern: %m" -#: storage/ipc/dsm_impl.c:338 storage/ipc/dsm_impl.c:573 -#: storage/ipc/dsm_impl.c:732 storage/ipc/dsm_impl.c:922 +#: storage/ipc/dsm_impl.c:341 storage/ipc/dsm_impl.c:576 +#: storage/ipc/dsm_impl.c:735 storage/ipc/dsm_impl.c:925 #, c-format msgid "could not map shared memory segment \"%s\": %m" msgstr "konnte Shared-Memory-Segment »%s« nicht mappen: %m" -#: storage/ipc/dsm_impl.c:508 +#: storage/ipc/dsm_impl.c:511 #, c-format msgid "could not get shared memory segment: %m" msgstr "konnte Shared-Memory-Segment nicht finden: %m" -#: storage/ipc/dsm_impl.c:696 +#: storage/ipc/dsm_impl.c:699 #, c-format msgid "could not create shared memory segment \"%s\": %m" msgstr "konnte Shared-Memory-Segment »%s« nicht erzeugen: %m" -#: storage/ipc/dsm_impl.c:933 +#: storage/ipc/dsm_impl.c:936 #, c-format msgid "could not close shared memory segment \"%s\": %m" msgstr "konnte Shared-Memory-Segment »%s« nicht schließen: %m" -#: storage/ipc/dsm_impl.c:972 storage/ipc/dsm_impl.c:1020 +#: storage/ipc/dsm_impl.c:975 storage/ipc/dsm_impl.c:1023 #, c-format msgid "could not duplicate handle for \"%s\": %m" msgstr "konnte Handle für »%s« nicht duplizieren: %m" -#. translator: %s is a syscall name, such as "poll()" -#: storage/ipc/latch.c:940 storage/ipc/latch.c:1094 storage/ipc/latch.c:1307 -#: storage/ipc/latch.c:1457 storage/ipc/latch.c:1570 +#: storage/ipc/procarray.c:3724 #, c-format -msgid "%s failed: %m" -msgstr "%s fehlgeschlagen: %m" - -#: storage/ipc/procarray.c:3016 -#, fuzzy, c-format -#| msgid "database \"%s\" is being used by logical replication subscription" -msgid "database \"%s\" is being used by prepared transaction" -msgstr "Datenbank »%s« wird von einer Subskription für logische Replikation verwendet" +msgid "database \"%s\" is being used by prepared transactions" +msgstr "Datenbank »%s« wird von vorbereiteten Transaktionen verwendet" -#: storage/ipc/procarray.c:3048 storage/ipc/signalfuncs.c:142 +#: storage/ipc/procarray.c:3756 storage/ipc/signalfuncs.c:218 #, c-format msgid "must be a superuser to terminate superuser process" msgstr "nur Superuser können Prozesse eines Superusers beenden" -#: storage/ipc/procarray.c:3055 storage/ipc/signalfuncs.c:147 +#: storage/ipc/procarray.c:3763 storage/ipc/signalfuncs.c:223 #, c-format msgid "must be a member of the role whose process is being terminated or member of pg_signal_backend" msgstr "muss Mitglied der Rolle sein, deren Prozess beendet wird, oder Mitglied von pg_signal_backend" -#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:982 -#: storage/lmgr/lock.c:1020 storage/lmgr/lock.c:2845 storage/lmgr/lock.c:4175 -#: storage/lmgr/lock.c:4240 storage/lmgr/lock.c:4532 -#: storage/lmgr/predicate.c:2401 storage/lmgr/predicate.c:2416 -#: storage/lmgr/predicate.c:3898 storage/lmgr/predicate.c:5006 -#: utils/hash/dynahash.c:1067 +#: storage/ipc/shm_mq.c:368 +#, c-format +msgid "cannot send a message of size %zu via shared memory queue" +msgstr "kann Nachricht mit Größe %zu nicht über Shared-Memory-Queue senden" + +#: storage/ipc/shm_mq.c:694 +#, c-format +msgid "invalid message size %zu in shared memory queue" +msgstr "ungültige Nachrichtengröße %zu in Shared-Memory-Queue" + +#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:981 +#: storage/lmgr/lock.c:1019 storage/lmgr/lock.c:2844 storage/lmgr/lock.c:4173 +#: storage/lmgr/lock.c:4238 storage/lmgr/lock.c:4545 +#: storage/lmgr/predicate.c:2470 storage/lmgr/predicate.c:2485 +#: storage/lmgr/predicate.c:3967 storage/lmgr/predicate.c:5078 +#: utils/hash/dynahash.c:1112 #, c-format msgid "out of shared memory" msgstr "Shared Memory aufgebraucht" @@ -20281,74 +20996,145 @@ msgstr "Shared Memory aufgebraucht" msgid "out of shared memory (%zu bytes requested)" msgstr "Shared Memory aufgebraucht (%zu Bytes angefordert)" -#: storage/ipc/shmem.c:441 +#: storage/ipc/shmem.c:445 #, c-format msgid "could not create ShmemIndex entry for data structure \"%s\"" msgstr "konnte ShmemIndex-Eintrag für Datenstruktur »%s« nicht erzeugen" -#: storage/ipc/shmem.c:456 +#: storage/ipc/shmem.c:460 #, c-format msgid "ShmemIndex entry size is wrong for data structure \"%s\": expected %zu, actual %zu" msgstr "ShmemIndex-Eintraggröße ist falsch für Datenstruktur »%s«: erwartet %zu, tatsächlich %zu" -#: storage/ipc/shmem.c:475 +#: storage/ipc/shmem.c:479 #, c-format msgid "not enough shared memory for data structure \"%s\" (%zu bytes requested)" msgstr "nicht genug Shared-Memory für Datenstruktur »%s« (%zu Bytes angefordert)" -#: storage/ipc/shmem.c:507 storage/ipc/shmem.c:526 +#: storage/ipc/shmem.c:511 storage/ipc/shmem.c:530 #, c-format msgid "requested shared memory size overflows size_t" msgstr "angeforderte Shared-Memory-Größe übersteigt Kapazität von size_t" -#: storage/ipc/signalfuncs.c:67 +#: storage/ipc/signalfuncs.c:68 storage/ipc/signalfuncs.c:260 +#: utils/adt/mcxtfuncs.c:196 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "PID %d ist kein PostgreSQL-Serverprozess" -#: storage/ipc/signalfuncs.c:98 storage/lmgr/proc.c:1366 +#: storage/ipc/signalfuncs.c:99 storage/lmgr/proc.c:1454 +#: utils/adt/mcxtfuncs.c:210 #, c-format msgid "could not send signal to process %d: %m" msgstr "konnte Signal nicht an Prozess %d senden: %m" -#: storage/ipc/signalfuncs.c:118 +#: storage/ipc/signalfuncs.c:119 #, c-format msgid "must be a superuser to cancel superuser query" msgstr "nur Superuser können Anfragen eines Superusers stornieren" -#: storage/ipc/signalfuncs.c:123 +#: storage/ipc/signalfuncs.c:124 #, c-format msgid "must be a member of the role whose query is being canceled or member of pg_signal_backend" msgstr "muss Mitglied der Rolle sein, deren Anfrage storniert wird, oder Mitglied von pg_signal_backend" -#: storage/ipc/signalfuncs.c:183 +#: storage/ipc/signalfuncs.c:164 +#, c-format +msgid "could not check the existence of the backend with PID %d: %m" +msgstr "" + +#: storage/ipc/signalfuncs.c:182 +#, fuzzy, c-format +#| msgid "server did not promote within %d seconds" +msgid "backend with PID %d did not terminate within %lld milliseconds" +msgstr "Befördern des Servers wurde nicht innerhalb von %d Sekunden abgeschlossen" + +#: storage/ipc/signalfuncs.c:211 #, fuzzy, c-format -#| msgid "Must be superuser to create a tablespace." +#| msgid "LIMIT must not be negative" +msgid "\"timeout\" must not be negative" +msgstr "LIMIT darf nicht negativ sein" + +#: storage/ipc/signalfuncs.c:253 +#, fuzzy, c-format +#| msgid "\"wait_seconds\" must not be negative or zero" +msgid "\"timeout\" must not be negative or zero" +msgstr "»wait_seconds« darf nicht negativ oder null sein" + +#: storage/ipc/signalfuncs.c:299 +#, c-format msgid "must be superuser to rotate log files with adminpack 1.0" -msgstr "Nur Superuser können Tablespaces anlegen." +msgstr "nur Superuser können mit adminpack 1.0 Logdateien rotieren" #. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:217 -#, fuzzy, c-format -#| msgid "Consider using tablespaces instead." +#: storage/ipc/signalfuncs.c:301 utils/adt/genfile.c:256 +#, c-format msgid "Consider using %s, which is part of core, instead." -msgstr "Verwenden Sie stattdessen Tablespaces." +msgstr "Verwenden Sie stattdessen %s, was im Kernsystem enthalten ist." -#: storage/ipc/signalfuncs.c:191 storage/ipc/signalfuncs.c:211 +#: storage/ipc/signalfuncs.c:307 storage/ipc/signalfuncs.c:327 #, c-format msgid "rotation not possible because log collection not active" msgstr "Rotierung nicht möglich, weil Logsammlung nicht aktiv ist" -#: storage/ipc/standby.c:580 tcop/postgres.c:3177 +#: storage/ipc/standby.c:305 +#, fuzzy, c-format +#| msgid "process %d still waiting for %s on %s after %ld.%03d ms" +msgid "recovery still waiting after %ld.%03d ms: %s" +msgstr "Prozess %d wartet immer noch auf %s-Sperre auf %s nach %ld,%03d ms" + +#: storage/ipc/standby.c:314 +#, fuzzy, c-format +#| msgid "process %d still waiting for %s on %s after %ld.%03d ms" +msgid "recovery finished waiting after %ld.%03d ms: %s" +msgstr "Prozess %d wartet immer noch auf %s-Sperre auf %s nach %ld,%03d ms" + +#: storage/ipc/standby.c:878 tcop/postgres.c:3307 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "storniere Anfrage wegen Konflikt mit der Wiederherstellung" -#: storage/ipc/standby.c:581 tcop/postgres.c:2469 +#: storage/ipc/standby.c:879 tcop/postgres.c:2471 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "Benutzertransaktion hat Verklemmung (Deadlock) mit Wiederherstellung verursacht." +#: storage/ipc/standby.c:1421 +#, fuzzy +#| msgid "unknown" +msgid "unknown reason" +msgstr "unbekannt" + +#: storage/ipc/standby.c:1426 +msgid "recovery conflict on buffer pin" +msgstr "" + +#: storage/ipc/standby.c:1429 +#, fuzzy +#| msgid "abort reason: recovery conflict" +msgid "recovery conflict on lock" +msgstr "Abbruchgrund: Konflikt bei Wiederherstellung" + +#: storage/ipc/standby.c:1432 +#, fuzzy +#| msgid "remove a tablespace" +msgid "recovery conflict on tablespace" +msgstr "entfernt einen Tablespace" + +#: storage/ipc/standby.c:1435 +msgid "recovery conflict on snapshot" +msgstr "" + +#: storage/ipc/standby.c:1438 +msgid "recovery conflict on buffer deadlock" +msgstr "" + +#: storage/ipc/standby.c:1441 +#, fuzzy +#| msgid "already connected to a database" +msgid "recovery conflict on database" +msgstr "bereits mit einer Datenbank verbunden" + #: storage/large_object/inv_api.c:191 #, c-format msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" @@ -20369,138 +21155,143 @@ msgstr "ungültige »whence«-Angabe: %d" msgid "invalid large object write request size: %d" msgstr "ungültige Größe der Large-Object-Schreibaufforderung: %d" -#: storage/lmgr/deadlock.c:1124 +#: storage/lmgr/deadlock.c:1122 #, c-format msgid "Process %d waits for %s on %s; blocked by process %d." msgstr "Prozess %d wartet auf %s-Sperre auf %s; blockiert von Prozess %d." -#: storage/lmgr/deadlock.c:1143 +#: storage/lmgr/deadlock.c:1141 #, c-format msgid "Process %d: %s" msgstr "Prozess %d: %s" -#: storage/lmgr/deadlock.c:1152 +#: storage/lmgr/deadlock.c:1150 #, c-format msgid "deadlock detected" msgstr "Verklemmung (Deadlock) entdeckt" -#: storage/lmgr/deadlock.c:1155 +#: storage/lmgr/deadlock.c:1153 #, c-format msgid "See server log for query details." msgstr "Einzelheiten zur Anfrage finden Sie im Serverlog." -#: storage/lmgr/lmgr.c:815 +#: storage/lmgr/lmgr.c:831 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "beim Aktualisieren von Tupel (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:818 +#: storage/lmgr/lmgr.c:834 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "beim Löschen von Tupel (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:821 +#: storage/lmgr/lmgr.c:837 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "beim Sperren von Tupel (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:824 +#: storage/lmgr/lmgr.c:840 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "beim Sperren von aktualisierter Version (%u,%u) von Tupel in Relation »%s«" -#: storage/lmgr/lmgr.c:827 +#: storage/lmgr/lmgr.c:843 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "beim Einfügen von Indextupel (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:830 +#: storage/lmgr/lmgr.c:846 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "beim Prüfen der Eindeutigkeit von Tupel (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:833 +#: storage/lmgr/lmgr.c:849 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "beim erneuten Prüfen des aktualisierten Tupels (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:836 +#: storage/lmgr/lmgr.c:852 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "beim Prüfen eines Exclusion-Constraints für Tupel (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:1091 +#: storage/lmgr/lmgr.c:1106 #, c-format msgid "relation %u of database %u" msgstr "Relation %u der Datenbank %u" -#: storage/lmgr/lmgr.c:1097 +#: storage/lmgr/lmgr.c:1112 #, c-format msgid "extension of relation %u of database %u" msgstr "Erweiterung von Relation %u in Datenbank %u" -#: storage/lmgr/lmgr.c:1103 +#: storage/lmgr/lmgr.c:1118 +#, c-format +msgid "pg_database.datfrozenxid of database %u" +msgstr "pg_database.datfrozenxid der Datenbank %u" + +#: storage/lmgr/lmgr.c:1123 #, c-format msgid "page %u of relation %u of database %u" msgstr "Seite %u von Relation %u von Datenbank %u" -#: storage/lmgr/lmgr.c:1110 +#: storage/lmgr/lmgr.c:1130 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "Tupel (%u, %u) von Relation %u von Datenbank %u" -#: storage/lmgr/lmgr.c:1118 +#: storage/lmgr/lmgr.c:1138 #, c-format msgid "transaction %u" msgstr "Transaktion %u" -#: storage/lmgr/lmgr.c:1123 +#: storage/lmgr/lmgr.c:1143 #, c-format msgid "virtual transaction %d/%u" msgstr "virtuelle Transaktion %d/%u" -#: storage/lmgr/lmgr.c:1129 +#: storage/lmgr/lmgr.c:1149 #, c-format msgid "speculative token %u of transaction %u" msgstr "spekulatives Token %u von Transaktion %u" -#: storage/lmgr/lmgr.c:1135 +#: storage/lmgr/lmgr.c:1155 #, c-format msgid "object %u of class %u of database %u" msgstr "Objekt %u von Klasse %u von Datenbank %u" -#: storage/lmgr/lmgr.c:1143 +#: storage/lmgr/lmgr.c:1163 #, c-format msgid "user lock [%u,%u,%u]" msgstr "Benutzersperre [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1150 +#: storage/lmgr/lmgr.c:1170 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "Benutzersperre [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1158 +#: storage/lmgr/lmgr.c:1178 #, c-format msgid "unrecognized locktag type %d" msgstr "unbekannter Locktag-Typ %d" -#: storage/lmgr/lock.c:803 +#: storage/lmgr/lock.c:802 #, c-format msgid "cannot acquire lock mode %s on database objects while recovery is in progress" msgstr "Sperrmodus %s kann während der Wiederherstellung nicht auf Datenbankobjekte gesetzt werden" -#: storage/lmgr/lock.c:805 +#: storage/lmgr/lock.c:804 #, c-format msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." msgstr "Nur Sperren gleich oder unter RowExclusiveLock können während der Wiederherstellung auf Datenbankobjekte gesetzt werden." -#: storage/lmgr/lock.c:983 storage/lmgr/lock.c:1021 storage/lmgr/lock.c:2846 -#: storage/lmgr/lock.c:4176 storage/lmgr/lock.c:4241 storage/lmgr/lock.c:4533 +#: storage/lmgr/lock.c:982 storage/lmgr/lock.c:1020 storage/lmgr/lock.c:2845 +#: storage/lmgr/lock.c:4174 storage/lmgr/lock.c:4239 storage/lmgr/lock.c:4546 #, c-format msgid "You might need to increase max_locks_per_transaction." msgstr "Sie müssen möglicherweise max_locks_per_transaction erhöhen." -#: storage/lmgr/lock.c:3292 storage/lmgr/lock.c:3408 +#: storage/lmgr/lock.c:3283 storage/lmgr/lock.c:3399 #, c-format msgid "cannot PREPARE while holding both session-level and transaction-level locks on the same object" msgstr "PREPARE kann nicht ausgeführt werden, wenn für das selbe Objekt Sperren auf Sitzungsebene und auf Transaktionsebene gehalten werden" @@ -20520,517 +21311,511 @@ msgstr "Sie müssten entweder weniger Transaktionen auf einmal ausführen oder m msgid "not enough elements in RWConflictPool to record a potential read/write conflict" msgstr "nicht genügend Elemente in RWConflictPool, um einen möglichen Lese-/Schreibkonflikt aufzuzeichnen" -#: storage/lmgr/predicate.c:1535 -#, c-format -msgid "deferrable snapshot was unsafe; trying a new one" -msgstr "aufschiebbarer Snapshot war unsicher; versuche einen neuen" - -#: storage/lmgr/predicate.c:1624 +#: storage/lmgr/predicate.c:1694 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "»default_transaction_isolation« ist auf »serializable« gesetzt." -#: storage/lmgr/predicate.c:1625 +#: storage/lmgr/predicate.c:1695 #, c-format msgid "You can use \"SET default_transaction_isolation = 'repeatable read'\" to change the default." msgstr "Mit »SET default_transaction_isolation = 'repeatable read'« können Sie die Voreinstellung ändern." -#: storage/lmgr/predicate.c:1676 +#: storage/lmgr/predicate.c:1746 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "eine Transaktion, die einen Snapshot importiert, must READ ONLY DEFERRABLE sein" -#: storage/lmgr/predicate.c:1755 utils/time/snapmgr.c:623 -#: utils/time/snapmgr.c:629 +#: storage/lmgr/predicate.c:1825 utils/time/snapmgr.c:567 +#: utils/time/snapmgr.c:573 #, c-format msgid "could not import the requested snapshot" msgstr "konnte den angeforderten Snapshot nicht importieren" -#: storage/lmgr/predicate.c:1756 utils/time/snapmgr.c:630 +#: storage/lmgr/predicate.c:1826 utils/time/snapmgr.c:574 #, c-format msgid "The source process with PID %d is not running anymore." msgstr "Der Ausgangsprozess mit PID %d läuft nicht mehr." -#: storage/lmgr/predicate.c:2402 storage/lmgr/predicate.c:2417 -#: storage/lmgr/predicate.c:3899 +#: storage/lmgr/predicate.c:2471 storage/lmgr/predicate.c:2486 +#: storage/lmgr/predicate.c:3968 #, c-format msgid "You might need to increase max_pred_locks_per_transaction." msgstr "Sie müssen möglicherweise max_pred_locks_per_transaction erhöhen." -#: storage/lmgr/predicate.c:4030 storage/lmgr/predicate.c:4063 -#: storage/lmgr/predicate.c:4096 storage/lmgr/predicate.c:4104 -#: storage/lmgr/predicate.c:4143 storage/lmgr/predicate.c:4385 -#: storage/lmgr/predicate.c:4722 storage/lmgr/predicate.c:4734 -#: storage/lmgr/predicate.c:4777 storage/lmgr/predicate.c:4815 +#: storage/lmgr/predicate.c:4099 storage/lmgr/predicate.c:4135 +#: storage/lmgr/predicate.c:4168 storage/lmgr/predicate.c:4176 +#: storage/lmgr/predicate.c:4215 storage/lmgr/predicate.c:4457 +#: storage/lmgr/predicate.c:4794 storage/lmgr/predicate.c:4806 +#: storage/lmgr/predicate.c:4849 storage/lmgr/predicate.c:4887 #, c-format msgid "could not serialize access due to read/write dependencies among transactions" msgstr "konnte Zugriff nicht serialisieren wegen Lese-/Schreib-Abhängigkeiten zwischen Transaktionen" -#: storage/lmgr/predicate.c:4032 storage/lmgr/predicate.c:4065 -#: storage/lmgr/predicate.c:4098 storage/lmgr/predicate.c:4106 -#: storage/lmgr/predicate.c:4145 storage/lmgr/predicate.c:4387 -#: storage/lmgr/predicate.c:4724 storage/lmgr/predicate.c:4736 -#: storage/lmgr/predicate.c:4779 storage/lmgr/predicate.c:4817 +#: storage/lmgr/predicate.c:4101 storage/lmgr/predicate.c:4137 +#: storage/lmgr/predicate.c:4170 storage/lmgr/predicate.c:4178 +#: storage/lmgr/predicate.c:4217 storage/lmgr/predicate.c:4459 +#: storage/lmgr/predicate.c:4796 storage/lmgr/predicate.c:4808 +#: storage/lmgr/predicate.c:4851 storage/lmgr/predicate.c:4889 #, c-format msgid "The transaction might succeed if retried." msgstr "Die Transaktion könnte erfolgreich sein, wenn sie erneut versucht würde." -#: storage/lmgr/proc.c:358 +#: storage/lmgr/proc.c:357 #, c-format msgid "number of requested standby connections exceeds max_wal_senders (currently %d)" msgstr "Anzahl angeforderter Standby-Verbindungen überschreitet max_wal_senders (aktuell %d)" -#: storage/lmgr/proc.c:1337 -#, c-format -msgid "Process %d waits for %s on %s." -msgstr "Prozess %d wartet auf %s-Sperre auf %s." - -#: storage/lmgr/proc.c:1348 -#, c-format -msgid "sending cancel to blocking autovacuum PID %d" -msgstr "sende Stornierung an blockierende Autovacuum-PID %d" - -#: storage/lmgr/proc.c:1468 +#: storage/lmgr/proc.c:1551 #, c-format msgid "process %d avoided deadlock for %s on %s by rearranging queue order after %ld.%03d ms" msgstr "Prozess %d vermied Verklemmung wegen %s-Sperre auf %s durch Umordnen der Queue nach %ld,%03d ms" -#: storage/lmgr/proc.c:1483 +#: storage/lmgr/proc.c:1566 #, c-format msgid "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "Prozess %d hat Verklemmung festgestellt beim Warten auf %s-Sperre auf %s nach %ld,%03d ms" -#: storage/lmgr/proc.c:1492 +#: storage/lmgr/proc.c:1575 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "Prozess %d wartet immer noch auf %s-Sperre auf %s nach %ld,%03d ms" -#: storage/lmgr/proc.c:1499 +#: storage/lmgr/proc.c:1582 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "Prozess %d erlangte %s-Sperre auf %s nach %ld,%03d ms" -#: storage/lmgr/proc.c:1515 +#: storage/lmgr/proc.c:1598 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "Prozess %d konnte %s-Sperre auf %s nach %ld,%03d ms nicht erlangen" -#: storage/page/bufpage.c:145 +#: storage/page/bufpage.c:152 #, c-format msgid "page verification failed, calculated checksum %u but expected %u" msgstr "Seitenüberprüfung fehlgeschlagen, berechnete Prüfsumme %u, aber erwartet %u" -#: storage/page/bufpage.c:209 storage/page/bufpage.c:503 -#: storage/page/bufpage.c:740 storage/page/bufpage.c:873 -#: storage/page/bufpage.c:969 storage/page/bufpage.c:1081 +#: storage/page/bufpage.c:217 storage/page/bufpage.c:739 +#: storage/page/bufpage.c:1066 storage/page/bufpage.c:1201 +#: storage/page/bufpage.c:1307 storage/page/bufpage.c:1419 #, c-format msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" msgstr "verfälschte Seitenzeiger: lower = %u, upper = %u, special = %u" -#: storage/page/bufpage.c:525 -#, fuzzy, c-format -#| msgid "corrupted item pointer: %u" +#: storage/page/bufpage.c:768 +#, c-format msgid "corrupted line pointer: %u" -msgstr "verfälschter Item-Zeiger: %u" +msgstr "verfälschter Line-Pointer: %u" -#: storage/page/bufpage.c:552 storage/page/bufpage.c:924 +#: storage/page/bufpage.c:795 storage/page/bufpage.c:1259 #, c-format -msgid "corrupted item lengths: total %u, available space %u" -msgstr "verfälschte Item-Längen: gesamt %u, verfügbarer Platz %u" - -#: storage/page/bufpage.c:759 storage/page/bufpage.c:897 -#: storage/page/bufpage.c:985 storage/page/bufpage.c:1097 -#, fuzzy, c-format -#| msgid "corrupted item pointer: offset = %u, size = %u" -msgid "corrupted line pointer: offset = %u, size = %u" -msgstr "verfälschter Item-Zeiger: offset = %u, size = %u" +msgid "corrupted item lengths: total %u, available space %u" +msgstr "verfälschte Item-Längen: gesamt %u, verfügbarer Platz %u" -#: storage/smgr/md.c:333 storage/smgr/md.c:836 +#: storage/page/bufpage.c:1085 storage/page/bufpage.c:1226 +#: storage/page/bufpage.c:1323 storage/page/bufpage.c:1435 #, c-format -msgid "could not truncate file \"%s\": %m" -msgstr "kann Datei »%s« nicht kürzen: %m" +msgid "corrupted line pointer: offset = %u, size = %u" +msgstr "verfälschter Line-Pointer: offset = %u, size = %u" -#: storage/smgr/md.c:407 +#: storage/smgr/md.c:434 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "kann Datei »%s« nicht auf über %u Blöcke erweitern" -#: storage/smgr/md.c:422 +#: storage/smgr/md.c:449 #, c-format msgid "could not extend file \"%s\": %m" msgstr "konnte Datei »%s« nicht erweitern: %m" -#: storage/smgr/md.c:424 storage/smgr/md.c:431 storage/smgr/md.c:719 +#: storage/smgr/md.c:451 storage/smgr/md.c:458 storage/smgr/md.c:746 #, c-format msgid "Check free disk space." msgstr "Prüfen Sie den freien Festplattenplatz." -#: storage/smgr/md.c:428 +#: storage/smgr/md.c:455 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "konnte Datei »%s« nicht erweitern: es wurden nur %d von %d Bytes bei Block %u geschrieben" -#: storage/smgr/md.c:640 +#: storage/smgr/md.c:667 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "konnte Block %u in Datei »%s« nicht lesen: %m" -#: storage/smgr/md.c:656 +#: storage/smgr/md.c:683 #, c-format msgid "could not read block %u in file \"%s\": read only %d of %d bytes" msgstr "konnte Block %u in Datei »%s« nicht lesen: es wurden nur %d von %d Bytes gelesen" -#: storage/smgr/md.c:710 +#: storage/smgr/md.c:737 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "konnte Block %u in Datei »%s« nicht schreiben: %m" -#: storage/smgr/md.c:715 +#: storage/smgr/md.c:742 #, c-format msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "konnte Block %u in Datei »%s« nicht schreiben: es wurden nur %d von %d Bytes geschrieben" -#: storage/smgr/md.c:807 +#: storage/smgr/md.c:836 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "konnte Datei »%s« nicht auf %u Blöcke kürzen: es sind jetzt nur %u Blöcke" -#: storage/smgr/md.c:862 +#: storage/smgr/md.c:891 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "konnte Datei »%s« nicht auf %u Blöcke kürzen: %m" -#: storage/smgr/md.c:957 -#, c-format -msgid "could not forward fsync request because request queue is full" -msgstr "konnte fsync-Anfrage nicht weiterleiten, weil Anfrageschlange voll ist" - -#: storage/smgr/md.c:1256 +#: storage/smgr/md.c:1285 #, c-format msgid "could not open file \"%s\" (target block %u): previous segment is only %u blocks" msgstr "konnte Datei »%s« nicht öffnen (Zielblock %u): vorhergehendes Segment hat nur %u Blöcke" -#: storage/smgr/md.c:1270 +#: storage/smgr/md.c:1299 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "konnte Datei »%s« nicht öffnen (Zielblock %u): %m" -#: storage/sync/sync.c:400 -#, c-format -msgid "could not fsync file \"%s\" but retrying: %m" -msgstr "konnte Datei »%s« nicht fsyncen, versuche erneut: %m" - -#: tcop/fastpath.c:109 tcop/fastpath.c:461 tcop/fastpath.c:591 +#: tcop/fastpath.c:148 #, c-format -msgid "invalid argument size %d in function call message" -msgstr "ungültige Argumentgröße %d in Funktionsaufruf-Message" +msgid "cannot call function %s via fastpath interface" +msgstr "Funktion %s kann nicht via Fastpath-Interface aufgerufen werden" -#: tcop/fastpath.c:307 +#: tcop/fastpath.c:233 #, c-format msgid "fastpath function call: \"%s\" (OID %u)" msgstr "Fastpath-Funktionsaufruf: »%s« (OID %u)" -#: tcop/fastpath.c:389 tcop/postgres.c:1323 tcop/postgres.c:1581 -#: tcop/postgres.c:2013 tcop/postgres.c:2250 +#: tcop/fastpath.c:312 tcop/postgres.c:1298 tcop/postgres.c:1556 +#: tcop/postgres.c:2015 tcop/postgres.c:2252 #, c-format msgid "duration: %s ms" msgstr "Dauer: %s ms" -#: tcop/fastpath.c:393 +#: tcop/fastpath.c:316 #, c-format msgid "duration: %s ms fastpath function call: \"%s\" (OID %u)" msgstr "Dauer: %s ms Fastpath-Funktionsaufruf: »%s« (OID %u)" -#: tcop/fastpath.c:429 tcop/fastpath.c:556 +#: tcop/fastpath.c:352 #, c-format msgid "function call message contains %d arguments but function requires %d" msgstr "Funktionsaufruf-Message enthält %d Argumente, aber Funktion benötigt %d" -#: tcop/fastpath.c:437 +#: tcop/fastpath.c:360 #, c-format msgid "function call message contains %d argument formats but %d arguments" msgstr "Funktionsaufruf-Message enthält %d Argumentformate aber %d Argumente" -#: tcop/fastpath.c:524 tcop/fastpath.c:607 +#: tcop/fastpath.c:384 #, c-format -msgid "incorrect binary data format in function argument %d" -msgstr "falsches Binärdatenformat in Funktionsargument %d" +msgid "invalid argument size %d in function call message" +msgstr "ungültige Argumentgröße %d in Funktionsaufruf-Message" -#: tcop/postgres.c:355 tcop/postgres.c:391 tcop/postgres.c:418 +#: tcop/fastpath.c:447 #, c-format -msgid "unexpected EOF on client connection" -msgstr "unerwartetes EOF auf Client-Verbindung" +msgid "incorrect binary data format in function argument %d" +msgstr "falsches Binärdatenformat in Funktionsargument %d" -#: tcop/postgres.c:441 tcop/postgres.c:453 tcop/postgres.c:464 -#: tcop/postgres.c:476 tcop/postgres.c:4539 +#: tcop/postgres.c:446 tcop/postgres.c:4706 #, c-format msgid "invalid frontend message type %d" msgstr "ungültiger Frontend-Message-Typ %d" -#: tcop/postgres.c:1042 +#: tcop/postgres.c:1015 #, c-format msgid "statement: %s" msgstr "Anweisung: %s" -#: tcop/postgres.c:1328 +#: tcop/postgres.c:1303 #, c-format msgid "duration: %s ms statement: %s" msgstr "Dauer: %s ms Anweisung: %s" -#: tcop/postgres.c:1377 -#, c-format -msgid "parse %s: %s" -msgstr "Parsen %s: %s" - -#: tcop/postgres.c:1434 +#: tcop/postgres.c:1409 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "kann nicht mehrere Befehle in vorbereitete Anweisung einfügen" -#: tcop/postgres.c:1586 +#: tcop/postgres.c:1561 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "Dauer: %s ms Parsen %s: %s" -#: tcop/postgres.c:1633 -#, c-format -msgid "bind %s to %s" -msgstr "Binden %s an %s" - -#: tcop/postgres.c:1652 tcop/postgres.c:2516 +#: tcop/postgres.c:1627 tcop/postgres.c:2567 #, c-format msgid "unnamed prepared statement does not exist" msgstr "unbenannte vorbereitete Anweisung existiert nicht" -#: tcop/postgres.c:1693 +#: tcop/postgres.c:1668 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "Binden-Nachricht hat %d Parameterformate aber %d Parameter" -#: tcop/postgres.c:1699 +#: tcop/postgres.c:1674 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "Binden-Nachricht enthält %d Parameter, aber vorbereitete Anweisung »%s« erfordert %d" -#: tcop/postgres.c:1897 +#: tcop/postgres.c:1893 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "falsches Binärdatenformat in Binden-Parameter %d" -#: tcop/postgres.c:2018 +#: tcop/postgres.c:2020 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "Dauer: %s ms Binden %s%s%s: %s" -#: tcop/postgres.c:2068 tcop/postgres.c:2600 +#: tcop/postgres.c:2070 tcop/postgres.c:2651 #, c-format msgid "portal \"%s\" does not exist" msgstr "Portal »%s« existiert nicht" -#: tcop/postgres.c:2153 +#: tcop/postgres.c:2155 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2155 tcop/postgres.c:2258 +#: tcop/postgres.c:2157 tcop/postgres.c:2260 msgid "execute fetch from" msgstr "Ausführen Fetch von" -#: tcop/postgres.c:2156 tcop/postgres.c:2259 +#: tcop/postgres.c:2158 tcop/postgres.c:2261 msgid "execute" msgstr "Ausführen" -#: tcop/postgres.c:2255 +#: tcop/postgres.c:2257 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "Dauer: %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2401 +#: tcop/postgres.c:2403 #, c-format msgid "prepare: %s" msgstr "Vorbereiten: %s" -#: tcop/postgres.c:2426 +#: tcop/postgres.c:2428 #, c-format msgid "parameters: %s" msgstr "Parameter: %s" -#: tcop/postgres.c:2441 +#: tcop/postgres.c:2443 #, c-format msgid "abort reason: recovery conflict" msgstr "Abbruchgrund: Konflikt bei Wiederherstellung" -#: tcop/postgres.c:2457 +#: tcop/postgres.c:2459 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "Benutzer hat Shared-Buffer-Pin zu lange gehalten." -#: tcop/postgres.c:2460 +#: tcop/postgres.c:2462 #, c-format msgid "User was holding a relation lock for too long." msgstr "Benutzer hat Relationssperre zu lange gehalten." -#: tcop/postgres.c:2463 +#: tcop/postgres.c:2465 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "Benutzer hat (möglicherweise) einen Tablespace verwendet, der gelöscht werden muss." -#: tcop/postgres.c:2466 +#: tcop/postgres.c:2468 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "Benutzeranfrage hat möglicherweise Zeilenversionen sehen müssen, die entfernt werden müssen." -#: tcop/postgres.c:2472 +#: tcop/postgres.c:2474 #, c-format msgid "User was connected to a database that must be dropped." msgstr "Benutzer war mit einer Datenbank verbunden, die gelöscht werden muss." -#: tcop/postgres.c:2796 +#: tcop/postgres.c:2513 +#, fuzzy, c-format +#| msgid "portal \"%s\" with parameters: %s" +msgid "portal \"%s\" parameter $%d = %s" +msgstr "Portal »%s« mit Parametern: %s" + +#: tcop/postgres.c:2516 +#, fuzzy, c-format +#| msgid "portal \"%s\" with parameters: %s" +msgid "portal \"%s\" parameter $%d" +msgstr "Portal »%s« mit Parametern: %s" + +#: tcop/postgres.c:2522 +#, fuzzy, c-format +#| msgid "unnamed portal with parameters: %s" +msgid "unnamed portal parameter $%d = %s" +msgstr "unbenanntes Portal mit Parametern: %s" + +#: tcop/postgres.c:2525 +#, fuzzy, c-format +#| msgid "unnamed portal with parameters: %s" +msgid "unnamed portal parameter $%d" +msgstr "unbenanntes Portal mit Parametern: %s" + +#: tcop/postgres.c:2871 +#, fuzzy, c-format +#| msgid "terminating connection due to unexpected postmaster exit" +msgid "terminating connection because of unexpected SIGQUIT signal" +msgstr "Verbindung wird abgebrochen wegen unerwartetem Ende des Postmasters" + +#: tcop/postgres.c:2877 #, c-format msgid "terminating connection because of crash of another server process" msgstr "Verbindung wird abgebrochen wegen Absturz eines anderen Serverprozesses" -#: tcop/postgres.c:2797 +#: tcop/postgres.c:2878 #, c-format msgid "The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory." msgstr "Der Postmaster hat diesen Serverprozess angewiesen, die aktuelle Transaktion zurückzurollen und die Sitzung zu beenden, weil ein anderer Serverprozess abnormal beendet wurde und möglicherweise das Shared Memory verfälscht hat." -#: tcop/postgres.c:2801 tcop/postgres.c:3107 +#: tcop/postgres.c:2882 tcop/postgres.c:3237 #, c-format msgid "In a moment you should be able to reconnect to the database and repeat your command." msgstr "In einem Moment sollten Sie wieder mit der Datenbank verbinden und Ihren Befehl wiederholen können." -#: tcop/postgres.c:2883 +#: tcop/postgres.c:2889 +#, fuzzy, c-format +#| msgid "terminating connection due to administrator command" +msgid "terminating connection due to immediate shutdown command" +msgstr "Verbindung wird abgebrochen aufgrund von Anweisung des Administrators" + +#: tcop/postgres.c:2975 #, c-format msgid "floating-point exception" msgstr "Fließkommafehler" -#: tcop/postgres.c:2884 +#: tcop/postgres.c:2976 #, c-format msgid "An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero." msgstr "Eine ungültige Fließkommaoperation wurde signalisiert. Das bedeutet wahrscheinlich ein Ergebnis außerhalb des gültigen Bereichs oder eine ungültige Operation, zum Beispiel Division durch null." -#: tcop/postgres.c:3037 +#: tcop/postgres.c:3141 #, c-format msgid "canceling authentication due to timeout" msgstr "storniere Authentifizierung wegen Zeitüberschreitung" -#: tcop/postgres.c:3041 +#: tcop/postgres.c:3145 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "Autovacuum-Prozess wird abgebrochen aufgrund von Anweisung des Administrators" -#: tcop/postgres.c:3045 +#: tcop/postgres.c:3149 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "Arbeitsprozess für logische Replikation wird abgebrochen aufgrund von Anweisung des Administrators" -#: tcop/postgres.c:3049 -#, c-format -msgid "logical replication launcher shutting down" -msgstr "Logical-Replication-Launcher fährt herunter" - -#: tcop/postgres.c:3062 tcop/postgres.c:3072 tcop/postgres.c:3105 +#: tcop/postgres.c:3166 tcop/postgres.c:3176 tcop/postgres.c:3235 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "Verbindung wird abgebrochen wegen Konflikt mit der Wiederherstellung" -#: tcop/postgres.c:3078 +#: tcop/postgres.c:3187 #, c-format msgid "terminating connection due to administrator command" msgstr "Verbindung wird abgebrochen aufgrund von Anweisung des Administrators" -#: tcop/postgres.c:3088 +#: tcop/postgres.c:3218 #, c-format msgid "connection to client lost" msgstr "Verbindung zum Client wurde verloren" -#: tcop/postgres.c:3154 +#: tcop/postgres.c:3284 #, c-format msgid "canceling statement due to lock timeout" msgstr "storniere Anfrage wegen Zeitüberschreitung einer Sperre" -#: tcop/postgres.c:3161 +#: tcop/postgres.c:3291 #, c-format msgid "canceling statement due to statement timeout" msgstr "storniere Anfrage wegen Zeitüberschreitung der Anfrage" -#: tcop/postgres.c:3168 +#: tcop/postgres.c:3298 #, c-format msgid "canceling autovacuum task" msgstr "storniere Autovacuum-Aufgabe" -#: tcop/postgres.c:3191 +#: tcop/postgres.c:3321 #, c-format msgid "canceling statement due to user request" msgstr "storniere Anfrage wegen Benutzeraufforderung" -#: tcop/postgres.c:3201 +#: tcop/postgres.c:3335 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "Verbindung wird abgebrochen wegen Zeitüberschreitung in inaktiver Transaktion" -#: tcop/postgres.c:3318 +#: tcop/postgres.c:3346 +#, fuzzy, c-format +#| msgid "terminating connection due to idle-in-transaction timeout" +msgid "terminating connection due to idle-session timeout" +msgstr "Verbindung wird abgebrochen wegen Zeitüberschreitung in inaktiver Transaktion" + +#: tcop/postgres.c:3465 #, c-format msgid "stack depth limit exceeded" msgstr "Grenze für Stacktiefe überschritten" -#: tcop/postgres.c:3319 +#: tcop/postgres.c:3466 #, c-format msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." msgstr "Erhöhen Sie den Konfigurationsparameter »max_stack_depth« (aktuell %dkB), nachdem Sie sichergestellt haben, dass die Stacktiefenbegrenzung Ihrer Plattform ausreichend ist." -#: tcop/postgres.c:3382 +#: tcop/postgres.c:3529 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "»max_stack_depth« darf %ldkB nicht überschreiten." -#: tcop/postgres.c:3384 +#: tcop/postgres.c:3531 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "Erhöhen Sie die Stacktiefenbegrenzung Ihrer Plattform mit »ulimit -s« oder der lokalen Entsprechung." -#: tcop/postgres.c:3744 +#: tcop/postgres.c:3887 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "ungültiges Kommandozeilenargument für Serverprozess: %s" -#: tcop/postgres.c:3745 tcop/postgres.c:3751 +#: tcop/postgres.c:3888 tcop/postgres.c:3894 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Versuchen Sie »%s --help« für weitere Informationen." -#: tcop/postgres.c:3749 +#: tcop/postgres.c:3892 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: ungültiges Kommandozeilenargument: %s" -#: tcop/postgres.c:3811 +#: tcop/postgres.c:3955 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: weder Datenbankname noch Benutzername angegeben" -#: tcop/postgres.c:4447 +#: tcop/postgres.c:4608 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "ungültiger Subtyp %d von CLOSE-Message" -#: tcop/postgres.c:4482 +#: tcop/postgres.c:4643 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "ungültiger Subtyp %d von DESCRIBE-Message" -#: tcop/postgres.c:4560 +#: tcop/postgres.c:4727 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "Fastpath-Funktionsaufrufe werden auf einer Replikationsverbindung nicht unterstützt" -#: tcop/postgres.c:4564 +#: tcop/postgres.c:4731 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "erweitertes Anfrageprotokoll wird nicht auf einer Replikationsverbindung unterstützt" -#: tcop/postgres.c:4741 +#: tcop/postgres.c:4908 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "Verbindungsende: Sitzungszeit: %d:%02d:%02d.%03d Benutzer=%s Datenbank=%s Host=%s%s%s" @@ -21051,35 +21836,35 @@ msgid "Declare it with SCROLL option to enable backward scan." msgstr "Deklarieren Sie ihn mit der Option SCROLL, um rückwarts scannen zu können." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:411 +#: tcop/utility.c:414 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "%s kann nicht in einer Read-Only-Transaktion ausgeführt werden" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:429 +#: tcop/utility.c:432 #, c-format msgid "cannot execute %s during a parallel operation" msgstr "%s kann nicht während einer parallelen Operation ausgeführt werden" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:448 +#: tcop/utility.c:451 #, c-format msgid "cannot execute %s during recovery" msgstr "%s kann nicht während der Wiederherstellung ausgeführt werden" #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:466 +#: tcop/utility.c:469 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "kann %s nicht in einer sicherheitsbeschränkten Operation ausführen" -#: tcop/utility.c:910 +#: tcop/utility.c:913 #, c-format msgid "must be superuser to do CHECKPOINT" msgstr "nur Superuser können CHECKPOINT ausführen" -#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:620 +#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:615 #, c-format msgid "multiple DictFile parameters" msgstr "mehrere DictFile-Parameter" @@ -21099,7 +21884,7 @@ msgstr "unbekannter Ispell-Parameter: »%s«" msgid "missing AffFile parameter" msgstr "Parameter »AffFile« fehlt" -#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:644 +#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:639 #, c-format msgid "missing DictFile parameter" msgstr "Parameter »DictFile« fehlt" @@ -21149,63 +21934,63 @@ msgstr "unerwartetes Ende der Zeile oder des Lexems" msgid "unexpected end of line" msgstr "unerwartetes Ende der Zeile" -#: tsearch/dict_thesaurus.c:297 +#: tsearch/dict_thesaurus.c:292 #, c-format msgid "too many lexemes in thesaurus entry" msgstr "zu viele Lexeme in Thesauruseintrag" -#: tsearch/dict_thesaurus.c:421 +#: tsearch/dict_thesaurus.c:416 #, c-format msgid "thesaurus sample word \"%s\" isn't recognized by subdictionary (rule %d)" msgstr "Thesaurus-Beispielwort »%s« wird nicht vom Unterwörterbuch erkannt (Regel %d)" -#: tsearch/dict_thesaurus.c:427 +#: tsearch/dict_thesaurus.c:422 #, c-format msgid "thesaurus sample word \"%s\" is a stop word (rule %d)" msgstr "Thesaurus-Beispielwort »%s« ist ein Stoppwort (Regel %d)" -#: tsearch/dict_thesaurus.c:430 +#: tsearch/dict_thesaurus.c:425 #, c-format msgid "Use \"?\" to represent a stop word within a sample phrase." msgstr "Verwenden Sie »?«, um ein Stoppwort in einem Beispielsatz darzustellen." -#: tsearch/dict_thesaurus.c:572 +#: tsearch/dict_thesaurus.c:567 #, c-format msgid "thesaurus substitute word \"%s\" is a stop word (rule %d)" msgstr "Thesaurus-Ersatzwort »%s« ist ein Stoppwort (Regel %d)" -#: tsearch/dict_thesaurus.c:579 +#: tsearch/dict_thesaurus.c:574 #, c-format msgid "thesaurus substitute word \"%s\" isn't recognized by subdictionary (rule %d)" msgstr "Thesaurus-Ersatzwort »%s« wird nicht vom Unterwörterbuch erkannt (Regel %d)" -#: tsearch/dict_thesaurus.c:591 +#: tsearch/dict_thesaurus.c:586 #, c-format msgid "thesaurus substitute phrase is empty (rule %d)" msgstr "Thesaurus-Ersatzausdruck ist leer (Regel %d)" -#: tsearch/dict_thesaurus.c:629 +#: tsearch/dict_thesaurus.c:624 #, c-format msgid "multiple Dictionary parameters" msgstr "mehrere »Dictionary«-Parameter" -#: tsearch/dict_thesaurus.c:636 +#: tsearch/dict_thesaurus.c:631 #, c-format msgid "unrecognized Thesaurus parameter: \"%s\"" msgstr "unbekannter Thesaurus-Parameter: »%s«" -#: tsearch/dict_thesaurus.c:648 +#: tsearch/dict_thesaurus.c:643 #, c-format msgid "missing Dictionary parameter" msgstr "Parameter »Dictionary« fehlt" #: tsearch/spell.c:380 tsearch/spell.c:397 tsearch/spell.c:406 -#: tsearch/spell.c:1036 +#: tsearch/spell.c:1062 #, c-format msgid "invalid affix flag \"%s\"" msgstr "ungültiges Affix-Flag »%s«" -#: tsearch/spell.c:384 tsearch/spell.c:1040 +#: tsearch/spell.c:384 tsearch/spell.c:1066 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "Affix-Flag »%s« ist außerhalb des gültigen Bereichs" @@ -21225,54 +22010,53 @@ msgstr "ungültiges Affix-Flag »%s« mit Flag-Wert »long«" msgid "could not open dictionary file \"%s\": %m" msgstr "konnte Wörterbuchdatei »%s« nicht öffnen: %m" -#: tsearch/spell.c:742 utils/adt/regexp.c:208 +#: tsearch/spell.c:763 utils/adt/regexp.c:208 #, c-format msgid "invalid regular expression: %s" msgstr "ungültiger regulärer Ausdruck: %s" -#: tsearch/spell.c:1163 tsearch/spell.c:1175 tsearch/spell.c:1734 -#: tsearch/spell.c:1739 tsearch/spell.c:1744 +#: tsearch/spell.c:1189 tsearch/spell.c:1201 tsearch/spell.c:1760 +#: tsearch/spell.c:1765 tsearch/spell.c:1770 #, c-format msgid "invalid affix alias \"%s\"" msgstr "ungültiges Affixalias »%s«" -#: tsearch/spell.c:1216 tsearch/spell.c:1287 tsearch/spell.c:1436 +#: tsearch/spell.c:1242 tsearch/spell.c:1313 tsearch/spell.c:1462 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "konnte Affixdatei »%s« nicht öffnen: %m" -#: tsearch/spell.c:1270 +#: tsearch/spell.c:1296 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "Ispell-Wörterbuch unterstützt nur die Flag-Werte »default«, »long« und »num«" -#: tsearch/spell.c:1314 +#: tsearch/spell.c:1340 #, c-format msgid "invalid number of flag vector aliases" msgstr "ungültige Anzahl Flag-Vektor-Aliasse" -#: tsearch/spell.c:1337 -#, fuzzy, c-format -#| msgid "number of aliases does not match number of columns" +#: tsearch/spell.c:1363 +#, c-format msgid "number of aliases exceeds specified number %d" -msgstr "Anzahl der Aliasnamen stimmt nicht mit der Anzahl der Spalten überein" +msgstr "Anzahl der Aliasse überschreitet angegebene Zahl %d" -#: tsearch/spell.c:1552 +#: tsearch/spell.c:1578 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "Affixdatei enthält Befehle im alten und im neuen Stil" -#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1116 +#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "Zeichenkette ist zu lang für tsvector (%d Bytes, maximal %d Bytes)" -#: tsearch/ts_locale.c:185 +#: tsearch/ts_locale.c:227 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "Zeile %d in Konfigurationsdatei »%s«: »%s«" -#: tsearch/ts_locale.c:302 +#: tsearch/ts_locale.c:307 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "Umwandlung von wchar_t in Serverkodierung fehlgeschlagen: %m" @@ -21304,7 +22088,7 @@ msgstr "konnte Stoppwortdatei »%s« nicht öffnen: %m" msgid "text search parser does not support headline creation" msgstr "Textsucheparser unterstützt das Erzeugen von Headlines nicht" -#: tsearch/wparser_def.c:2587 +#: tsearch/wparser_def.c:2578 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "unbekannter Headline-Parameter: »%s«" @@ -21329,120 +22113,120 @@ msgstr "»ShortWord« sollte >= 0 sein" msgid "MaxFragments should be >= 0" msgstr "»MaxFragments« sollte >= 0 sein" -#: utils/adt/acl.c:172 utils/adt/name.c:93 +#: utils/adt/acl.c:165 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "Bezeichner zu lang" -#: utils/adt/acl.c:173 utils/adt/name.c:94 +#: utils/adt/acl.c:166 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "Bezeichner muss weniger als %d Zeichen haben." -#: utils/adt/acl.c:256 +#: utils/adt/acl.c:249 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "unbekanntes Schlüsselwort: »%s«" -#: utils/adt/acl.c:257 +#: utils/adt/acl.c:250 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "ACL-Schlüsselwort muss »group« oder »user« sein." -#: utils/adt/acl.c:262 +#: utils/adt/acl.c:255 #, c-format msgid "missing name" msgstr "Name fehlt" -#: utils/adt/acl.c:263 +#: utils/adt/acl.c:256 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "Auf das Schlüsselwort »group« oder »user« muss ein Name folgen." -#: utils/adt/acl.c:269 +#: utils/adt/acl.c:262 #, c-format msgid "missing \"=\" sign" msgstr "»=«-Zeichen fehlt" -#: utils/adt/acl.c:322 +#: utils/adt/acl.c:315 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "ungültiges Moduszeichen: muss eines aus »%s« sein" -#: utils/adt/acl.c:344 +#: utils/adt/acl.c:337 #, c-format msgid "a name must follow the \"/\" sign" msgstr "auf das »/«-Zeichen muss ein Name folgen" -#: utils/adt/acl.c:352 +#: utils/adt/acl.c:345 #, c-format msgid "defaulting grantor to user ID %u" msgstr "nicht angegebener Grantor wird auf user ID %u gesetzt" -#: utils/adt/acl.c:538 +#: utils/adt/acl.c:531 #, c-format msgid "ACL array contains wrong data type" msgstr "ACL-Array enthält falschen Datentyp" -#: utils/adt/acl.c:542 +#: utils/adt/acl.c:535 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "ACL-Arrays müssen eindimensional sein" -#: utils/adt/acl.c:546 +#: utils/adt/acl.c:539 #, c-format msgid "ACL arrays must not contain null values" msgstr "ACL-Array darf keine NULL-Werte enthalten" -#: utils/adt/acl.c:570 +#: utils/adt/acl.c:563 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "überflüssiger Müll am Ende der ACL-Angabe" -#: utils/adt/acl.c:1205 +#: utils/adt/acl.c:1198 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "Grant-Optionen können nicht an den eigenen Grantor gegeben werden" -#: utils/adt/acl.c:1266 +#: utils/adt/acl.c:1259 #, c-format msgid "dependent privileges exist" msgstr "abhängige Privilegien existieren" -#: utils/adt/acl.c:1267 +#: utils/adt/acl.c:1260 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Verwenden Sie CASCADE, um diese auch zu entziehen." -#: utils/adt/acl.c:1521 +#: utils/adt/acl.c:1514 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert wird nicht mehr unterstützt" -#: utils/adt/acl.c:1531 +#: utils/adt/acl.c:1524 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove wird nicht mehr unterstützt" -#: utils/adt/acl.c:1617 utils/adt/acl.c:1671 +#: utils/adt/acl.c:1610 utils/adt/acl.c:1664 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "unbekannter Privilegtyp: »%s«" -#: utils/adt/acl.c:3471 utils/adt/regproc.c:103 utils/adt/regproc.c:278 +#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:276 #, c-format msgid "function \"%s\" does not exist" msgstr "Funktion »%s« existiert nicht" -#: utils/adt/acl.c:4943 +#: utils/adt/acl.c:4898 #, c-format msgid "must be member of role \"%s\"" msgstr "Berechtigung nur für Mitglied von Rolle »%s«" #: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:933 -#: utils/adt/arrayfuncs.c:1533 utils/adt/arrayfuncs.c:3236 -#: utils/adt/arrayfuncs.c:3376 utils/adt/arrayfuncs.c:5911 -#: utils/adt/arrayfuncs.c:6252 utils/adt/arrayutils.c:93 +#: utils/adt/arrayfuncs.c:1554 utils/adt/arrayfuncs.c:3262 +#: utils/adt/arrayfuncs.c:3402 utils/adt/arrayfuncs.c:5937 +#: utils/adt/arrayfuncs.c:6278 utils/adt/arrayutils.c:93 #: utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 #, c-format msgid "array size exceeds the maximum allowed (%d)" @@ -21462,16 +22246,16 @@ msgid "input data type is not an array" msgstr "Eingabedatentyp ist kein Array" #: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 -#: utils/adt/arrayfuncs.c:1336 utils/adt/float.c:1243 utils/adt/float.c:1317 -#: utils/adt/float.c:3925 utils/adt/float.c:3939 utils/adt/int.c:759 -#: utils/adt/int.c:781 utils/adt/int.c:795 utils/adt/int.c:809 -#: utils/adt/int.c:840 utils/adt/int.c:861 utils/adt/int.c:978 -#: utils/adt/int.c:992 utils/adt/int.c:1006 utils/adt/int.c:1039 -#: utils/adt/int.c:1053 utils/adt/int.c:1067 utils/adt/int.c:1098 -#: utils/adt/int.c:1180 utils/adt/int.c:1243 utils/adt/int.c:1311 -#: utils/adt/int.c:1317 utils/adt/int8.c:1291 utils/adt/numeric.c:1559 -#: utils/adt/numeric.c:3435 utils/adt/varbit.c:1188 utils/adt/varbit.c:1576 -#: utils/adt/varlena.c:1087 utils/adt/varlena.c:3377 +#: utils/adt/arrayfuncs.c:1357 utils/adt/float.c:1233 utils/adt/float.c:1307 +#: utils/adt/float.c:4052 utils/adt/float.c:4066 utils/adt/int.c:757 +#: utils/adt/int.c:779 utils/adt/int.c:793 utils/adt/int.c:807 +#: utils/adt/int.c:838 utils/adt/int.c:859 utils/adt/int.c:976 +#: utils/adt/int.c:990 utils/adt/int.c:1004 utils/adt/int.c:1037 +#: utils/adt/int.c:1051 utils/adt/int.c:1065 utils/adt/int.c:1096 +#: utils/adt/int.c:1178 utils/adt/int.c:1242 utils/adt/int.c:1310 +#: utils/adt/int.c:1316 utils/adt/int8.c:1299 utils/adt/numeric.c:1776 +#: utils/adt/numeric.c:4207 utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 +#: utils/adt/varlena.c:1121 utils/adt/varlena.c:3433 #, c-format msgid "integer out of range" msgstr "integer ist außerhalb des gültigen Bereichs" @@ -21549,8 +22333,8 @@ msgstr "Dimensionswert fehlt." msgid "Missing \"%s\" after array dimensions." msgstr "»%s« fehlt nach Arraydimensionen." -#: utils/adt/arrayfuncs.c:305 utils/adt/arrayfuncs.c:2884 -#: utils/adt/arrayfuncs.c:2916 utils/adt/arrayfuncs.c:2931 +#: utils/adt/arrayfuncs.c:305 utils/adt/arrayfuncs.c:2910 +#: utils/adt/arrayfuncs.c:2942 utils/adt/arrayfuncs.c:2957 #, c-format msgid "upper bound cannot be less than lower bound" msgstr "Obergrenze kann nicht kleiner als Untergrenze sein" @@ -21571,8 +22355,9 @@ msgid "Specified array dimensions do not match array contents." msgstr "Angegebene Array-Dimensionen stimmen nicht mit dem Array-Inhalt überein." #: utils/adt/arrayfuncs.c:491 utils/adt/arrayfuncs.c:518 -#: utils/adt/rangetypes.c:2181 utils/adt/rangetypes.c:2189 -#: utils/adt/rowtypes.c:210 utils/adt/rowtypes.c:218 +#: utils/adt/multirangetypes.c:162 utils/adt/rangetypes.c:2310 +#: utils/adt/rangetypes.c:2318 utils/adt/rowtypes.c:211 +#: utils/adt/rowtypes.c:219 #, c-format msgid "Unexpected end of input." msgstr "Unerwartetes Ende der Eingabe." @@ -21593,7 +22378,7 @@ msgstr "Unerwartetes Arrayelement." msgid "Unmatched \"%c\" character." msgstr "Zeichen »%c« ohne Gegenstück." -#: utils/adt/arrayfuncs.c:599 utils/adt/jsonfuncs.c:2452 +#: utils/adt/arrayfuncs.c:599 utils/adt/jsonfuncs.c:2593 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "Mehrdimensionale Arrays müssen Arraysausdrücke mit gleicher Anzahl Dimensionen haben." @@ -21603,8 +22388,8 @@ msgstr "Mehrdimensionale Arrays müssen Arraysausdrücke mit gleicher Anzahl Dim msgid "Junk after closing right brace." msgstr "Müll nach schließender rechter geschweifter Klammer." -#: utils/adt/arrayfuncs.c:1298 utils/adt/arrayfuncs.c:3344 -#: utils/adt/arrayfuncs.c:5817 +#: utils/adt/arrayfuncs.c:1298 utils/adt/arrayfuncs.c:3370 +#: utils/adt/arrayfuncs.c:5843 #, c-format msgid "invalid number of dimensions: %d" msgstr "ungültige Anzahl Dimensionen: %d" @@ -21614,153 +22399,169 @@ msgstr "ungültige Anzahl Dimensionen: %d" msgid "invalid array flags" msgstr "ungültige Array-Flags" -#: utils/adt/arrayfuncs.c:1317 +#: utils/adt/arrayfuncs.c:1331 #, c-format -msgid "wrong element type" -msgstr "falscher Elementtyp" +msgid "binary data has array element type %u (%s) instead of expected %u (%s)" +msgstr "" -#: utils/adt/arrayfuncs.c:1367 utils/adt/rangetypes.c:335 -#: utils/cache/lsyscache.c:2786 +#: utils/adt/arrayfuncs.c:1388 utils/adt/multirangetypes.c:443 +#: utils/adt/rangetypes.c:333 utils/cache/lsyscache.c:2905 #, c-format msgid "no binary input function available for type %s" msgstr "keine binäre Eingabefunktion verfügbar für Typ %s" -#: utils/adt/arrayfuncs.c:1507 +#: utils/adt/arrayfuncs.c:1528 #, c-format msgid "improper binary format in array element %d" msgstr "falsches Binärformat in Arrayelement %d" -#: utils/adt/arrayfuncs.c:1588 utils/adt/rangetypes.c:340 -#: utils/cache/lsyscache.c:2819 +#: utils/adt/arrayfuncs.c:1609 utils/adt/multirangetypes.c:448 +#: utils/adt/rangetypes.c:338 utils/cache/lsyscache.c:2938 #, c-format msgid "no binary output function available for type %s" msgstr "keine binäre Ausgabefunktion verfügbar für Typ %s" -#: utils/adt/arrayfuncs.c:2066 +#: utils/adt/arrayfuncs.c:2088 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "Auswählen von Stücken aus Arrays mit fester Länge ist nicht implementiert" -#: utils/adt/arrayfuncs.c:2244 utils/adt/arrayfuncs.c:2266 -#: utils/adt/arrayfuncs.c:2315 utils/adt/arrayfuncs.c:2551 -#: utils/adt/arrayfuncs.c:2862 utils/adt/arrayfuncs.c:5803 -#: utils/adt/arrayfuncs.c:5829 utils/adt/arrayfuncs.c:5840 +#: utils/adt/arrayfuncs.c:2266 utils/adt/arrayfuncs.c:2288 +#: utils/adt/arrayfuncs.c:2337 utils/adt/arrayfuncs.c:2573 +#: utils/adt/arrayfuncs.c:2888 utils/adt/arrayfuncs.c:5829 +#: utils/adt/arrayfuncs.c:5855 utils/adt/arrayfuncs.c:5866 #: utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 -#: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4340 utils/adt/jsonfuncs.c:4490 -#: utils/adt/jsonfuncs.c:4601 utils/adt/jsonfuncs.c:4647 +#: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4427 utils/adt/jsonfuncs.c:4580 +#: utils/adt/jsonfuncs.c:4692 utils/adt/jsonfuncs.c:4741 #, c-format msgid "wrong number of array subscripts" msgstr "falsche Anzahl Arrayindizes" -#: utils/adt/arrayfuncs.c:2249 utils/adt/arrayfuncs.c:2357 -#: utils/adt/arrayfuncs.c:2615 utils/adt/arrayfuncs.c:2921 +#: utils/adt/arrayfuncs.c:2271 utils/adt/arrayfuncs.c:2379 +#: utils/adt/arrayfuncs.c:2640 utils/adt/arrayfuncs.c:2947 #, c-format msgid "array subscript out of range" msgstr "Arrayindex außerhalb des gültigen Bereichs" -#: utils/adt/arrayfuncs.c:2254 +#: utils/adt/arrayfuncs.c:2276 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "Array mit fester Länge kann keinen NULL-Wert enthalten" -#: utils/adt/arrayfuncs.c:2809 +#: utils/adt/arrayfuncs.c:2835 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "Aktualisieren von Stücken aus Arrays mit fester Länge ist nicht implementiert" -#: utils/adt/arrayfuncs.c:2840 +#: utils/adt/arrayfuncs.c:2866 #, c-format msgid "array slice subscript must provide both boundaries" msgstr "Array-Slice-Index muss beide Begrenzungen angeben" -#: utils/adt/arrayfuncs.c:2841 +#: utils/adt/arrayfuncs.c:2867 #, c-format msgid "When assigning to a slice of an empty array value, slice boundaries must be fully specified." msgstr "Wenn ein Slice eines leeren Array-Wertes zugewiesen wird, dann müssen die Slice-Begrenzungen vollständig angegeben werden." -#: utils/adt/arrayfuncs.c:2852 utils/adt/arrayfuncs.c:2947 +#: utils/adt/arrayfuncs.c:2878 utils/adt/arrayfuncs.c:2973 #, c-format msgid "source array too small" msgstr "Quellarray ist zu klein" -#: utils/adt/arrayfuncs.c:3500 +#: utils/adt/arrayfuncs.c:3526 #, c-format msgid "null array element not allowed in this context" msgstr "NULL-Werte im Array sind in diesem Zusammenhang nicht erlaubt" -#: utils/adt/arrayfuncs.c:3602 utils/adt/arrayfuncs.c:3773 -#: utils/adt/arrayfuncs.c:4129 +#: utils/adt/arrayfuncs.c:3628 utils/adt/arrayfuncs.c:3799 +#: utils/adt/arrayfuncs.c:4155 #, c-format msgid "cannot compare arrays of different element types" msgstr "kann Arrays mit verschiedenen Elementtypen nicht vergleichen" -#: utils/adt/arrayfuncs.c:3951 utils/adt/rangetypes.c:1254 -#: utils/adt/rangetypes.c:1318 +#: utils/adt/arrayfuncs.c:3977 utils/adt/multirangetypes.c:2670 +#: utils/adt/multirangetypes.c:2742 utils/adt/rangetypes.c:1343 +#: utils/adt/rangetypes.c:1407 utils/adt/rowtypes.c:1858 #, c-format msgid "could not identify a hash function for type %s" msgstr "konnte keine Hash-Funktion für Typ %s ermitteln" -#: utils/adt/arrayfuncs.c:4044 -#, fuzzy, c-format -#| msgid "could not identify a hash function for type %s" +#: utils/adt/arrayfuncs.c:4070 utils/adt/rowtypes.c:1979 +#, c-format msgid "could not identify an extended hash function for type %s" -msgstr "konnte keine Hash-Funktion für Typ %s ermitteln" +msgstr "konnte keine erweiterte Hash-Funktion für Typ %s ermitteln" -#: utils/adt/arrayfuncs.c:5221 +#: utils/adt/arrayfuncs.c:5247 #, c-format msgid "data type %s is not an array type" msgstr "Datentyp %s ist kein Array-Typ" -#: utils/adt/arrayfuncs.c:5276 +#: utils/adt/arrayfuncs.c:5302 #, c-format msgid "cannot accumulate null arrays" msgstr "Arrays, die NULL sind, können nicht akkumuliert werden" -#: utils/adt/arrayfuncs.c:5304 +#: utils/adt/arrayfuncs.c:5330 #, c-format msgid "cannot accumulate empty arrays" msgstr "leere Arrays können nicht akkumuliert werden" -#: utils/adt/arrayfuncs.c:5331 utils/adt/arrayfuncs.c:5337 +#: utils/adt/arrayfuncs.c:5357 utils/adt/arrayfuncs.c:5363 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "Arrays unterschiedlicher Dimensionalität können nicht akkumuliert werden" -#: utils/adt/arrayfuncs.c:5701 utils/adt/arrayfuncs.c:5741 +#: utils/adt/arrayfuncs.c:5727 utils/adt/arrayfuncs.c:5767 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "Dimensions-Array oder Untergrenzen-Array darf nicht NULL sein" -#: utils/adt/arrayfuncs.c:5804 utils/adt/arrayfuncs.c:5830 +#: utils/adt/arrayfuncs.c:5830 utils/adt/arrayfuncs.c:5856 #, c-format msgid "Dimension array must be one dimensional." msgstr "Dimensions-Array muss eindimensional sein." -#: utils/adt/arrayfuncs.c:5809 utils/adt/arrayfuncs.c:5835 +#: utils/adt/arrayfuncs.c:5835 utils/adt/arrayfuncs.c:5861 #, c-format msgid "dimension values cannot be null" msgstr "Dimensionswerte dürfen nicht NULL sein" -#: utils/adt/arrayfuncs.c:5841 +#: utils/adt/arrayfuncs.c:5867 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "Untergrenzen-Array hat andere Größe als Dimensions-Array." -#: utils/adt/arrayfuncs.c:6117 +#: utils/adt/arrayfuncs.c:6143 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "Entfernen von Elementen aus mehrdimensionalen Arrays wird nicht unterstützt" -#: utils/adt/arrayfuncs.c:6394 +#: utils/adt/arrayfuncs.c:6420 #, c-format msgid "thresholds must be one-dimensional array" msgstr "Parameter »thresholds« muss ein eindimensionales Array sein" -#: utils/adt/arrayfuncs.c:6399 +#: utils/adt/arrayfuncs.c:6425 #, c-format msgid "thresholds array must not contain NULLs" msgstr "»thresholds«-Array darf keine NULL-Werte enthalten" +#: utils/adt/arrayfuncs.c:6658 +#, fuzzy, c-format +#| msgid "number of parameters must be between 0 and 65535\n" +msgid "number of elements to trim must be between 0 and %d" +msgstr "Anzahl der Parameter muss zwischen 0 und 65535 sein\n" + +#: utils/adt/arraysubs.c:93 utils/adt/arraysubs.c:130 +#, c-format +msgid "array subscript must have type integer" +msgstr "Arrayindex muss Typ integer haben" + +#: utils/adt/arraysubs.c:198 utils/adt/arraysubs.c:217 +#, c-format +msgid "array subscript in assignment must not be null" +msgstr "Arrayindex in Zuweisung darf nicht NULL sein" + #: utils/adt/arrayutils.c:209 #, c-format msgid "typmod array must be type cstring[]" @@ -21782,32 +22583,31 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "Kodierungsumwandlung zwischen %s und ASCII wird nicht unterstützt" #. translator: first %s is inet or cidr -#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3770 -#: utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:295 -#: utils/adt/float.c:412 utils/adt/float.c:497 utils/adt/float.c:525 +#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3802 +#: utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:283 +#: utils/adt/float.c:400 utils/adt/float.c:485 utils/adt/float.c:501 #: utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 #: utils/adt/geo_ops.c:274 utils/adt/geo_ops.c:316 utils/adt/geo_ops.c:326 -#: utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1378 utils/adt/geo_ops.c:1413 -#: utils/adt/geo_ops.c:1421 utils/adt/geo_ops.c:3476 utils/adt/geo_ops.c:4645 -#: utils/adt/geo_ops.c:4660 utils/adt/geo_ops.c:4667 utils/adt/int8.c:126 +#: utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1389 utils/adt/geo_ops.c:1424 +#: utils/adt/geo_ops.c:1432 utils/adt/geo_ops.c:3488 utils/adt/geo_ops.c:4657 +#: utils/adt/geo_ops.c:4672 utils/adt/geo_ops.c:4679 utils/adt/int8.c:126 #: utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 #: utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 -#: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:601 -#: utils/adt/numeric.c:628 utils/adt/numeric.c:6001 utils/adt/numeric.c:6025 -#: utils/adt/numeric.c:6049 utils/adt/numeric.c:6882 utils/adt/numeric.c:6908 -#: utils/adt/numutils.c:114 utils/adt/numutils.c:124 utils/adt/numutils.c:168 -#: utils/adt/numutils.c:244 utils/adt/numutils.c:320 utils/adt/oid.c:44 -#: utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 -#: utils/adt/pg_lsn.c:73 utils/adt/tid.c:73 utils/adt/tid.c:81 -#: utils/adt/tid.c:89 utils/adt/timestamp.c:493 utils/adt/uuid.c:136 -#: utils/adt/xid8funcs.c:346 +#: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:702 +#: utils/adt/numeric.c:721 utils/adt/numeric.c:6861 utils/adt/numeric.c:6885 +#: utils/adt/numeric.c:6909 utils/adt/numeric.c:7878 utils/adt/numutils.c:116 +#: utils/adt/numutils.c:126 utils/adt/numutils.c:170 utils/adt/numutils.c:246 +#: utils/adt/numutils.c:322 utils/adt/oid.c:44 utils/adt/oid.c:58 +#: utils/adt/oid.c:64 utils/adt/oid.c:86 utils/adt/pg_lsn.c:74 +#: utils/adt/tid.c:76 utils/adt/tid.c:84 utils/adt/tid.c:92 +#: utils/adt/timestamp.c:496 utils/adt/uuid.c:136 utils/adt/xid8funcs.c:346 #, c-format msgid "invalid input syntax for type %s: \"%s\"" msgstr "ungültige Eingabesyntax für Typ %s: »%s«" #: utils/adt/cash.c:215 utils/adt/cash.c:240 utils/adt/cash.c:250 -#: utils/adt/cash.c:290 utils/adt/int8.c:118 utils/adt/numutils.c:138 -#: utils/adt/numutils.c:145 utils/adt/numutils.c:238 utils/adt/numutils.c:314 +#: utils/adt/cash.c:290 utils/adt/int8.c:118 utils/adt/numutils.c:140 +#: utils/adt/numutils.c:147 utils/adt/numutils.c:240 utils/adt/numutils.c:316 #: utils/adt/oid.c:70 utils/adt/oid.c:109 #, c-format msgid "value \"%s\" is out of range for type %s" @@ -21815,12 +22615,14 @@ msgstr "Wert »%s« ist außerhalb des gültigen Bereichs für Typ %s" #: utils/adt/cash.c:652 utils/adt/cash.c:702 utils/adt/cash.c:753 #: utils/adt/cash.c:802 utils/adt/cash.c:854 utils/adt/cash.c:904 -#: utils/adt/float.c:104 utils/adt/int.c:824 utils/adt/int.c:940 -#: utils/adt/int.c:1020 utils/adt/int.c:1082 utils/adt/int.c:1120 -#: utils/adt/int.c:1148 utils/adt/int8.c:593 utils/adt/int8.c:651 -#: utils/adt/int8.c:977 utils/adt/int8.c:1057 utils/adt/int8.c:1119 -#: utils/adt/int8.c:1199 utils/adt/numeric.c:7446 utils/adt/numeric.c:7736 -#: utils/adt/numeric.c:9318 utils/adt/timestamp.c:3271 +#: utils/adt/float.c:104 utils/adt/int.c:822 utils/adt/int.c:938 +#: utils/adt/int.c:1018 utils/adt/int.c:1080 utils/adt/int.c:1118 +#: utils/adt/int.c:1146 utils/adt/int8.c:600 utils/adt/int8.c:658 +#: utils/adt/int8.c:985 utils/adt/int8.c:1065 utils/adt/int8.c:1127 +#: utils/adt/int8.c:1207 utils/adt/numeric.c:3032 utils/adt/numeric.c:3055 +#: utils/adt/numeric.c:3140 utils/adt/numeric.c:3158 utils/adt/numeric.c:3254 +#: utils/adt/numeric.c:8427 utils/adt/numeric.c:8717 utils/adt/numeric.c:10299 +#: utils/adt/timestamp.c:3281 #, c-format msgid "division by zero" msgstr "Division durch Null" @@ -21830,154 +22632,164 @@ msgstr "Division durch Null" msgid "\"char\" out of range" msgstr "\"char\" ist außerhalb des gültigen Bereichs" -#: utils/adt/date.c:60 utils/adt/timestamp.c:94 utils/adt/varbit.c:104 +#: utils/adt/date.c:62 utils/adt/timestamp.c:97 utils/adt/varbit.c:105 #: utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "ungültige Typmodifikation" -#: utils/adt/date.c:72 +#: utils/adt/date.c:74 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "Präzision von TIME(%d)%s darf nicht negativ sein" -#: utils/adt/date.c:78 +#: utils/adt/date.c:80 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "Präzision von TIME(%d)%s auf erlaubten Höchstwert %d reduziert" -#: utils/adt/date.c:157 utils/adt/date.c:165 utils/adt/formatting.c:4194 -#: utils/adt/formatting.c:4203 utils/adt/formatting.c:4309 -#: utils/adt/formatting.c:4319 +#: utils/adt/date.c:159 utils/adt/date.c:167 utils/adt/formatting.c:4252 +#: utils/adt/formatting.c:4261 utils/adt/formatting.c:4367 +#: utils/adt/formatting.c:4377 #, c-format msgid "date out of range: \"%s\"" msgstr "date ist außerhalb des gültigen Bereichs: »%s«" -#: utils/adt/date.c:212 utils/adt/date.c:524 utils/adt/date.c:548 +#: utils/adt/date.c:214 utils/adt/date.c:525 utils/adt/date.c:549 #: utils/adt/xml.c:2210 #, c-format msgid "date out of range" msgstr "date ist außerhalb des gültigen Bereichs" -#: utils/adt/date.c:258 utils/adt/timestamp.c:573 +#: utils/adt/date.c:260 utils/adt/timestamp.c:580 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "Datum-Feldwert ist außerhalb des gültigen Bereichs: %d-%02d-%02d" -#: utils/adt/date.c:265 utils/adt/date.c:274 utils/adt/timestamp.c:579 +#: utils/adt/date.c:267 utils/adt/date.c:276 utils/adt/timestamp.c:586 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "date ist außerhalb des gültigen Bereichs: %d-%02d-%02d" -#: utils/adt/date.c:312 utils/adt/date.c:335 utils/adt/date.c:361 -#: utils/adt/date.c:1169 utils/adt/date.c:1215 utils/adt/date.c:1716 -#: utils/adt/date.c:1747 utils/adt/date.c:1776 utils/adt/date.c:2608 -#: utils/adt/datetime.c:1660 utils/adt/formatting.c:4051 -#: utils/adt/formatting.c:4083 utils/adt/formatting.c:4163 -#: utils/adt/formatting.c:4285 utils/adt/json.c:418 utils/adt/json.c:457 -#: utils/adt/timestamp.c:221 utils/adt/timestamp.c:253 -#: utils/adt/timestamp.c:701 utils/adt/timestamp.c:710 -#: utils/adt/timestamp.c:788 utils/adt/timestamp.c:821 -#: utils/adt/timestamp.c:2850 utils/adt/timestamp.c:2871 -#: utils/adt/timestamp.c:2884 utils/adt/timestamp.c:2893 -#: utils/adt/timestamp.c:2901 utils/adt/timestamp.c:2956 -#: utils/adt/timestamp.c:2979 utils/adt/timestamp.c:2992 -#: utils/adt/timestamp.c:3003 utils/adt/timestamp.c:3011 -#: utils/adt/timestamp.c:3671 utils/adt/timestamp.c:3796 -#: utils/adt/timestamp.c:3837 utils/adt/timestamp.c:3927 -#: utils/adt/timestamp.c:3971 utils/adt/timestamp.c:4074 -#: utils/adt/timestamp.c:4559 utils/adt/timestamp.c:4755 -#: utils/adt/timestamp.c:5082 utils/adt/timestamp.c:5096 -#: utils/adt/timestamp.c:5101 utils/adt/timestamp.c:5115 -#: utils/adt/timestamp.c:5148 utils/adt/timestamp.c:5225 -#: utils/adt/timestamp.c:5266 utils/adt/timestamp.c:5270 -#: utils/adt/timestamp.c:5339 utils/adt/timestamp.c:5343 -#: utils/adt/timestamp.c:5357 utils/adt/timestamp.c:5391 utils/adt/xml.c:2232 -#: utils/adt/xml.c:2239 utils/adt/xml.c:2259 utils/adt/xml.c:2266 -#, c-format -msgid "timestamp out of range" -msgstr "timestamp ist außerhalb des gültigen Bereichs" - -#: utils/adt/date.c:499 +#: utils/adt/date.c:500 #, c-format msgid "cannot subtract infinite dates" msgstr "kann unendliche date-Werte nicht subtrahieren" -#: utils/adt/date.c:588 utils/adt/date.c:645 utils/adt/date.c:679 -#: utils/adt/date.c:2645 utils/adt/date.c:2655 +#: utils/adt/date.c:598 utils/adt/date.c:661 utils/adt/date.c:697 +#: utils/adt/date.c:2881 utils/adt/date.c:2891 #, c-format msgid "date out of range for timestamp" msgstr "Datum ist außerhalb des gültigen Bereichs für Typ »timestamp«" -#: utils/adt/date.c:1329 utils/adt/date.c:2103 utils/adt/formatting.c:4371 +#: utils/adt/date.c:1127 utils/adt/date.c:1210 utils/adt/date.c:1226 +#, fuzzy, c-format +#| msgid "interval units \"%s\" not supported" +msgid "date units \"%s\" not supported" +msgstr "»interval«-Einheit »%s« nicht unterstützt" + +#: utils/adt/date.c:1235 +#, fuzzy, c-format +#| msgid "\"time\" units \"%s\" not recognized" +msgid "date units \"%s\" not recognized" +msgstr "»time«-Einheit »%s« nicht erkannt" + +#: utils/adt/date.c:1318 utils/adt/date.c:1364 utils/adt/date.c:1920 +#: utils/adt/date.c:1951 utils/adt/date.c:1980 utils/adt/date.c:2844 +#: utils/adt/datetime.c:405 utils/adt/datetime.c:1700 +#: utils/adt/formatting.c:4109 utils/adt/formatting.c:4141 +#: utils/adt/formatting.c:4221 utils/adt/formatting.c:4343 utils/adt/json.c:418 +#: utils/adt/json.c:457 utils/adt/timestamp.c:224 utils/adt/timestamp.c:256 +#: utils/adt/timestamp.c:698 utils/adt/timestamp.c:707 +#: utils/adt/timestamp.c:785 utils/adt/timestamp.c:818 +#: utils/adt/timestamp.c:2860 utils/adt/timestamp.c:2881 +#: utils/adt/timestamp.c:2894 utils/adt/timestamp.c:2903 +#: utils/adt/timestamp.c:2911 utils/adt/timestamp.c:2966 +#: utils/adt/timestamp.c:2989 utils/adt/timestamp.c:3002 +#: utils/adt/timestamp.c:3013 utils/adt/timestamp.c:3021 +#: utils/adt/timestamp.c:3681 utils/adt/timestamp.c:3806 +#: utils/adt/timestamp.c:3891 utils/adt/timestamp.c:3981 +#: utils/adt/timestamp.c:4069 utils/adt/timestamp.c:4172 +#: utils/adt/timestamp.c:4674 utils/adt/timestamp.c:4948 +#: utils/adt/timestamp.c:5401 utils/adt/timestamp.c:5415 +#: utils/adt/timestamp.c:5420 utils/adt/timestamp.c:5434 +#: utils/adt/timestamp.c:5467 utils/adt/timestamp.c:5554 +#: utils/adt/timestamp.c:5595 utils/adt/timestamp.c:5599 +#: utils/adt/timestamp.c:5668 utils/adt/timestamp.c:5672 +#: utils/adt/timestamp.c:5686 utils/adt/timestamp.c:5720 utils/adt/xml.c:2232 +#: utils/adt/xml.c:2239 utils/adt/xml.c:2259 utils/adt/xml.c:2266 +#, c-format +msgid "timestamp out of range" +msgstr "timestamp ist außerhalb des gültigen Bereichs" + +#: utils/adt/date.c:1537 utils/adt/date.c:2339 utils/adt/formatting.c:4429 #, c-format msgid "time out of range" msgstr "time ist außerhalb des gültigen Bereichs" -#: utils/adt/date.c:1385 utils/adt/timestamp.c:598 +#: utils/adt/date.c:1589 utils/adt/timestamp.c:595 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "Zeit-Feldwert ist außerhalb des gültigen Bereichs: %d:%02d:%02g" -#: utils/adt/date.c:1905 utils/adt/date.c:2407 utils/adt/float.c:1071 -#: utils/adt/float.c:1140 utils/adt/int.c:616 utils/adt/int.c:663 -#: utils/adt/int.c:698 utils/adt/int8.c:492 utils/adt/numeric.c:2197 -#: utils/adt/timestamp.c:3320 utils/adt/timestamp.c:3351 -#: utils/adt/timestamp.c:3382 -#, fuzzy, c-format -#| msgid "window functions are not allowed in window definitions" +#: utils/adt/date.c:2109 utils/adt/date.c:2643 utils/adt/float.c:1047 +#: utils/adt/float.c:1123 utils/adt/int.c:614 utils/adt/int.c:661 +#: utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2443 +#: utils/adt/timestamp.c:3330 utils/adt/timestamp.c:3361 +#: utils/adt/timestamp.c:3392 +#, c-format msgid "invalid preceding or following size in window function" -msgstr "Fensterfunktionen sind in Fensterdefinitionen nicht erlaubt" +msgstr "ungültige vorhergehende oder folgende Größe in Fensterfunktion" -#: utils/adt/date.c:1990 utils/adt/date.c:2003 +#: utils/adt/date.c:2208 utils/adt/date.c:2224 #, c-format msgid "\"time\" units \"%s\" not recognized" msgstr "»time«-Einheit »%s« nicht erkannt" -#: utils/adt/date.c:2111 +#: utils/adt/date.c:2347 #, c-format msgid "time zone displacement out of range" msgstr "Zeitzonenunterschied ist außerhalb des gültigen Bereichs" -#: utils/adt/date.c:2740 utils/adt/date.c:2753 +#: utils/adt/date.c:2986 utils/adt/date.c:3006 #, c-format msgid "\"time with time zone\" units \"%s\" not recognized" msgstr "»time with time zone«-Einheit »%s« nicht erkannt" -#: utils/adt/date.c:2826 utils/adt/datetime.c:906 utils/adt/datetime.c:1818 -#: utils/adt/datetime.c:4614 utils/adt/timestamp.c:512 -#: utils/adt/timestamp.c:539 utils/adt/timestamp.c:4157 -#: utils/adt/timestamp.c:5107 utils/adt/timestamp.c:5349 +#: utils/adt/date.c:3095 utils/adt/datetime.c:951 utils/adt/datetime.c:1858 +#: utils/adt/datetime.c:4648 utils/adt/timestamp.c:515 +#: utils/adt/timestamp.c:542 utils/adt/timestamp.c:4255 +#: utils/adt/timestamp.c:5426 utils/adt/timestamp.c:5678 #, c-format msgid "time zone \"%s\" not recognized" msgstr "Zeitzone »%s« nicht erkannt" -#: utils/adt/date.c:2858 utils/adt/timestamp.c:5137 utils/adt/timestamp.c:5380 +#: utils/adt/date.c:3127 utils/adt/timestamp.c:5456 utils/adt/timestamp.c:5709 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "Intervall-Zeitzone »%s« darf keine Monate oder Tage enthalten" -#: utils/adt/datetime.c:3743 utils/adt/datetime.c:3750 +#: utils/adt/datetime.c:3775 utils/adt/datetime.c:3782 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "Datum/Zeit-Feldwert ist außerhalb des gültigen Bereichs: »%s«" -#: utils/adt/datetime.c:3752 +#: utils/adt/datetime.c:3784 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." msgstr "Möglicherweise benötigen Sie eine andere »datestyle«-Einstellung." -#: utils/adt/datetime.c:3757 +#: utils/adt/datetime.c:3789 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "»interval«-Feldwert ist außerhalb des gültigen Bereichs: »%s«" -#: utils/adt/datetime.c:3763 +#: utils/adt/datetime.c:3795 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "Zeitzonenunterschied ist außerhalb des gültigen Bereichs: »%s«" -#: utils/adt/datetime.c:4616 +#: utils/adt/datetime.c:4650 #, c-format msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "Dieser Zeitzonenname erscheint in der Konfigurationsdatei für Zeitzonenabkürzung »%s«." @@ -21987,17 +22799,17 @@ msgstr "Dieser Zeitzonenname erscheint in der Konfigurationsdatei für Zeitzonen msgid "invalid Datum pointer" msgstr "ungültiger »Datum«-Zeiger" -#: utils/adt/dbsize.c:759 utils/adt/dbsize.c:827 +#: utils/adt/dbsize.c:749 utils/adt/dbsize.c:817 #, c-format msgid "invalid size: \"%s\"" msgstr "ungültige Größe: »%s«" -#: utils/adt/dbsize.c:828 +#: utils/adt/dbsize.c:818 #, c-format msgid "Invalid size unit: \"%s\"." msgstr "Ungültige Größeneinheit: »%s«." -#: utils/adt/dbsize.c:829 +#: utils/adt/dbsize.c:819 #, c-format msgid "Valid units are \"bytes\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Gültige Einheiten sind »kB«, »MB«, »GB« und »TB«." @@ -22007,176 +22819,158 @@ msgstr "Gültige Einheiten sind »kB«, »MB«, »GB« und »TB«." msgid "type %s is not a domain" msgstr "Typ %s ist keine Domäne" -#: utils/adt/encode.c:64 utils/adt/encode.c:112 +#: utils/adt/encode.c:68 utils/adt/encode.c:112 #, c-format msgid "unrecognized encoding: \"%s\"" msgstr "unbekannte Kodierung: »%s«" -#: utils/adt/encode.c:78 -#, fuzzy, c-format -#| msgid "encoding conversion from %s to ASCII not supported" +#: utils/adt/encode.c:82 +#, c-format msgid "result of encoding conversion is too large" -msgstr "Kodierungsumwandlung zwischen %s und ASCII wird nicht unterstützt" +msgstr "Ergebnis der Kodierungsumwandlung ist zu groß" #: utils/adt/encode.c:126 #, c-format msgid "result of decoding conversion is too large" -msgstr "" - -#: utils/adt/encode.c:184 -#, c-format -msgid "invalid hexadecimal digit: \"%c\"" -msgstr "ungültige hexadezimale Ziffer: »%c«" - -#: utils/adt/encode.c:212 -#, c-format -msgid "invalid hexadecimal data: odd number of digits" -msgstr "ungültige hexadezimale Daten: ungerade Anzahl Ziffern" +msgstr "Ergebnis der Dekodierungsumwandlung ist zu groß" -#: utils/adt/encode.c:329 +#: utils/adt/encode.c:261 #, c-format msgid "unexpected \"=\" while decoding base64 sequence" msgstr "unerwartetes »=« beim Dekodieren von Base64-Sequenz" -#: utils/adt/encode.c:341 +#: utils/adt/encode.c:273 #, c-format -msgid "invalid symbol \"%c\" while decoding base64 sequence" -msgstr "ungültiges Symbol »%c« beim Dekodieren von Base64-Sequenz" +msgid "invalid symbol \"%.*s\" found while decoding base64 sequence" +msgstr "ungültiges Symbol »%.*s« beim Dekodieren von Base64-Sequenz" -#: utils/adt/encode.c:361 +#: utils/adt/encode.c:304 #, c-format msgid "invalid base64 end sequence" msgstr "ungültige Base64-Endsequenz" -#: utils/adt/encode.c:362 +#: utils/adt/encode.c:305 #, c-format msgid "Input data is missing padding, is truncated, or is otherwise corrupted." msgstr "Die Eingabedaten haben fehlendes Padding, sind zu kurz oder sind anderweitig verfälscht." -#: utils/adt/enum.c:100 +#: utils/adt/enum.c:99 #, c-format msgid "unsafe use of new value \"%s\" of enum type %s" msgstr "unsichere Verwendung des neuen Werts »%s« des Enum-Typs %s" -#: utils/adt/enum.c:103 +#: utils/adt/enum.c:102 #, c-format msgid "New enum values must be committed before they can be used." -msgstr "" +msgstr "Neue Enum-Werte müssen committet werden, bevor sie verwendet werden können." -#: utils/adt/enum.c:121 utils/adt/enum.c:131 utils/adt/enum.c:189 -#: utils/adt/enum.c:199 +#: utils/adt/enum.c:120 utils/adt/enum.c:130 utils/adt/enum.c:188 +#: utils/adt/enum.c:198 #, c-format msgid "invalid input value for enum %s: \"%s\"" msgstr "ungültiger Eingabewert für Enum %s: »%s«" -#: utils/adt/enum.c:161 utils/adt/enum.c:227 utils/adt/enum.c:286 +#: utils/adt/enum.c:160 utils/adt/enum.c:226 utils/adt/enum.c:285 #, c-format msgid "invalid internal value for enum: %u" msgstr "ungültiger interner Wert für Enum: %u" -#: utils/adt/enum.c:446 utils/adt/enum.c:475 utils/adt/enum.c:515 -#: utils/adt/enum.c:535 +#: utils/adt/enum.c:445 utils/adt/enum.c:474 utils/adt/enum.c:514 +#: utils/adt/enum.c:534 #, c-format msgid "could not determine actual enum type" msgstr "konnte tatsächlichen Enum-Typen nicht bestimmen" -#: utils/adt/enum.c:454 utils/adt/enum.c:483 +#: utils/adt/enum.c:453 utils/adt/enum.c:482 #, c-format msgid "enum %s contains no values" msgstr "Enum %s enthält keine Werte" -#: utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 -#: utils/cache/typcache.c:1632 utils/cache/typcache.c:1788 -#: utils/cache/typcache.c:1918 utils/fmgr/funcapi.c:456 -#, c-format -msgid "type %s is not composite" -msgstr "Typ %s ist kein zusammengesetzter Typ" - #: utils/adt/float.c:88 #, c-format msgid "value out of range: overflow" msgstr "Wert ist außerhalb des gültigen Bereichs: Überlauf" #: utils/adt/float.c:96 -#, fuzzy, c-format -#| msgid "value out of range: overflow" +#, c-format msgid "value out of range: underflow" -msgstr "Wert ist außerhalb des gültigen Bereichs: Überlauf" +msgstr "Wert ist außerhalb des gültigen Bereichs: Unterlauf" #: utils/adt/float.c:265 #, c-format msgid "\"%s\" is out of range for type real" msgstr "»%s« ist außerhalb des gültigen Bereichs für Typ real" -#: utils/adt/float.c:489 +#: utils/adt/float.c:477 #, c-format msgid "\"%s\" is out of range for type double precision" msgstr "»%s« ist außerhalb des gültigen Bereichs für Typ double precision" -#: utils/adt/float.c:1268 utils/adt/float.c:1342 utils/adt/int.c:336 -#: utils/adt/int.c:874 utils/adt/int.c:896 utils/adt/int.c:910 -#: utils/adt/int.c:924 utils/adt/int.c:956 utils/adt/int.c:1194 -#: utils/adt/int8.c:1312 utils/adt/numeric.c:3553 utils/adt/numeric.c:3562 +#: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:334 +#: utils/adt/int.c:872 utils/adt/int.c:894 utils/adt/int.c:908 +#: utils/adt/int.c:922 utils/adt/int.c:954 utils/adt/int.c:1192 +#: utils/adt/int8.c:1320 utils/adt/numeric.c:4317 utils/adt/numeric.c:4326 #, c-format msgid "smallint out of range" msgstr "smallint ist außerhalb des gültigen Bereichs" -#: utils/adt/float.c:1468 utils/adt/numeric.c:8329 +#: utils/adt/float.c:1458 utils/adt/numeric.c:3550 utils/adt/numeric.c:9310 #, c-format msgid "cannot take square root of a negative number" msgstr "Quadratwurzel von negativer Zahl kann nicht ermittelt werden" -#: utils/adt/float.c:1536 utils/adt/numeric.c:3239 +#: utils/adt/float.c:1526 utils/adt/numeric.c:3825 utils/adt/numeric.c:3935 #, c-format msgid "zero raised to a negative power is undefined" msgstr "null hoch eine negative Zahl ist undefiniert" -#: utils/adt/float.c:1540 utils/adt/numeric.c:3245 +#: utils/adt/float.c:1530 utils/adt/numeric.c:3829 utils/adt/numeric.c:3940 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "eine negative Zahl hoch eine nicht ganze Zahl ergibt ein komplexes Ergebnis" -#: utils/adt/float.c:1614 utils/adt/float.c:1647 utils/adt/numeric.c:8993 +#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3737 +#: utils/adt/numeric.c:9974 #, c-format msgid "cannot take logarithm of zero" msgstr "Logarithmus von null kann nicht ermittelt werden" -#: utils/adt/float.c:1618 utils/adt/float.c:1651 utils/adt/numeric.c:8997 +#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3675 +#: utils/adt/numeric.c:3732 utils/adt/numeric.c:9978 #, c-format msgid "cannot take logarithm of a negative number" msgstr "Logarithmus negativer Zahlen kann nicht ermittelt werden" -#: utils/adt/float.c:1684 utils/adt/float.c:1715 utils/adt/float.c:1810 -#: utils/adt/float.c:1837 utils/adt/float.c:1865 utils/adt/float.c:1892 -#: utils/adt/float.c:2039 utils/adt/float.c:2076 utils/adt/float.c:2246 -#: utils/adt/float.c:2302 utils/adt/float.c:2367 utils/adt/float.c:2424 -#: utils/adt/float.c:2615 utils/adt/float.c:2639 +#: utils/adt/float.c:1776 utils/adt/float.c:1807 utils/adt/float.c:1902 +#: utils/adt/float.c:1929 utils/adt/float.c:1957 utils/adt/float.c:1984 +#: utils/adt/float.c:2131 utils/adt/float.c:2168 utils/adt/float.c:2338 +#: utils/adt/float.c:2394 utils/adt/float.c:2459 utils/adt/float.c:2516 +#: utils/adt/float.c:2707 utils/adt/float.c:2731 #, c-format msgid "input is out of range" msgstr "Eingabe ist außerhalb des gültigen Bereichs" -#: utils/adt/float.c:2706 -#, fuzzy, c-format -#| msgid "transfer rate \"%s\" is out of range" +#: utils/adt/float.c:2798 +#, c-format msgid "setseed parameter %g is out of allowed range [-1,1]" -msgstr "Transferrate »%s« ist außerhalb des gültigen Bereichs" +msgstr "setseed-Parameter %g ist außerhalb des gültigen Bereichs [-1;-1]" -#: utils/adt/float.c:3903 utils/adt/numeric.c:1509 +#: utils/adt/float.c:4030 utils/adt/numeric.c:1716 #, c-format msgid "count must be greater than zero" msgstr "Anzahl muss größer als null sein" -#: utils/adt/float.c:3908 utils/adt/numeric.c:1516 +#: utils/adt/float.c:4035 utils/adt/numeric.c:1727 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "Operand, Untergrenze und Obergrenze dürfen nicht NaN sein" -#: utils/adt/float.c:3914 +#: utils/adt/float.c:4041 utils/adt/numeric.c:1732 #, c-format msgid "lower and upper bounds must be finite" msgstr "Untergrenze und Obergrenze müssen endlich sein" -#: utils/adt/float.c:3948 utils/adt/numeric.c:1529 +#: utils/adt/float.c:4075 utils/adt/numeric.c:1746 #, c-format msgid "lower bound cannot equal upper bound" msgstr "Untergrenze kann nicht gleich der Obergrenze sein" @@ -22261,293 +23055,297 @@ msgstr "»EEEE« ist mit anderen Formaten inkompatibel" msgid "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "»EEEE« kann nur zusammen mit Platzhaltern für Ziffern oder Dezimalpunkt verwendet werden." -#: utils/adt/formatting.c:1392 -#, fuzzy, c-format -#| msgid "invalid value for parameter \"%s\": \"%s\"" +#: utils/adt/formatting.c:1394 +#, c-format msgid "invalid datetime format separator: \"%s\"" -msgstr "ungültiger Wert für Parameter »%s«: »%s«" +msgstr "ungültiges Datum-/Zeit-Formattrennzeichen: »%s«" -#: utils/adt/formatting.c:1520 +#: utils/adt/formatting.c:1521 #, c-format msgid "\"%s\" is not a number" msgstr "»%s« ist keine Zahl" -#: utils/adt/formatting.c:1598 +#: utils/adt/formatting.c:1599 #, c-format msgid "case conversion failed: %s" msgstr "Groß/Klein-Umwandlung fehlgeschlagen: %s" -#: utils/adt/formatting.c:1663 utils/adt/formatting.c:1787 -#: utils/adt/formatting.c:1912 +#: utils/adt/formatting.c:1664 utils/adt/formatting.c:1788 +#: utils/adt/formatting.c:1913 #, c-format msgid "could not determine which collation to use for %s function" msgstr "konnte die für die Funktion %s zu verwendende Sortierfolge nicht bestimmen" -#: utils/adt/formatting.c:2284 +#: utils/adt/formatting.c:2285 #, c-format msgid "invalid combination of date conventions" msgstr "ungültige Kombination von Datumskonventionen" -#: utils/adt/formatting.c:2285 +#: utils/adt/formatting.c:2286 #, c-format msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr "Die Gregorianische und die ISO-Konvention für Wochendaten können nicht einer Formatvorlage gemischt werden." -#: utils/adt/formatting.c:2308 +#: utils/adt/formatting.c:2309 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "widersprüchliche Werte für das Feld »%s« in Formatzeichenkette" -#: utils/adt/formatting.c:2311 +#: utils/adt/formatting.c:2312 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "Der Wert widerspricht einer vorherigen Einstellung für den selben Feldtyp." -#: utils/adt/formatting.c:2382 +#: utils/adt/formatting.c:2383 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "Quellzeichenkette zu kurz für Formatfeld »%s»" -#: utils/adt/formatting.c:2385 +#: utils/adt/formatting.c:2386 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "Feld benötigt %d Zeichen, aber nur %d verbleiben." -#: utils/adt/formatting.c:2388 utils/adt/formatting.c:2403 +#: utils/adt/formatting.c:2389 utils/adt/formatting.c:2404 #, c-format msgid "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "Wenn die Quellzeichenkette keine feste Breite hat, versuchen Sie den Modifikator »FM«." -#: utils/adt/formatting.c:2398 utils/adt/formatting.c:2412 -#: utils/adt/formatting.c:2635 +#: utils/adt/formatting.c:2399 utils/adt/formatting.c:2413 +#: utils/adt/formatting.c:2636 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "ungültiger Wert »%s« für »%s«" -#: utils/adt/formatting.c:2400 +#: utils/adt/formatting.c:2401 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "Feld benötigt %d Zeichen, aber nur %d konnten geparst werden." -#: utils/adt/formatting.c:2414 +#: utils/adt/formatting.c:2415 #, c-format msgid "Value must be an integer." msgstr "Der Wert muss eine ganze Zahl sein." -#: utils/adt/formatting.c:2419 +#: utils/adt/formatting.c:2420 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "Wert für »%s« in der Eingabezeichenkette ist außerhalb des gültigen Bereichs" -#: utils/adt/formatting.c:2421 +#: utils/adt/formatting.c:2422 #, c-format msgid "Value must be in the range %d to %d." msgstr "Der Wert muss im Bereich %d bis %d sein." -#: utils/adt/formatting.c:2637 +#: utils/adt/formatting.c:2638 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "Der angegebene Wert stimmte mit keinem der für dieses Feld zulässigen Werte überein." -#: utils/adt/formatting.c:2852 utils/adt/formatting.c:2872 -#: utils/adt/formatting.c:2892 utils/adt/formatting.c:2912 -#: utils/adt/formatting.c:2931 utils/adt/formatting.c:2950 -#: utils/adt/formatting.c:2974 utils/adt/formatting.c:2992 -#: utils/adt/formatting.c:3010 utils/adt/formatting.c:3028 -#: utils/adt/formatting.c:3045 utils/adt/formatting.c:3062 +#: utils/adt/formatting.c:2855 utils/adt/formatting.c:2875 +#: utils/adt/formatting.c:2895 utils/adt/formatting.c:2915 +#: utils/adt/formatting.c:2934 utils/adt/formatting.c:2953 +#: utils/adt/formatting.c:2977 utils/adt/formatting.c:2995 +#: utils/adt/formatting.c:3013 utils/adt/formatting.c:3031 +#: utils/adt/formatting.c:3048 utils/adt/formatting.c:3065 #, c-format msgid "localized string format value too long" msgstr "lokalisierter Formatwert ist zu lang" -#: utils/adt/formatting.c:3296 +#: utils/adt/formatting.c:3342 #, c-format msgid "unmatched format separator \"%c\"" -msgstr "" +msgstr "Formattrennzeichen »%c« ohne passende Eingabe" + +#: utils/adt/formatting.c:3403 +#, c-format +msgid "unmatched format character \"%s\"" +msgstr "Formatzeichen »%s« ohne passende Eingabe" -#: utils/adt/formatting.c:3451 utils/adt/formatting.c:3795 +#: utils/adt/formatting.c:3509 utils/adt/formatting.c:3853 #, c-format msgid "formatting field \"%s\" is only supported in to_char" msgstr "Formatfeld »%s« wird nur in to_char unterstützt" -#: utils/adt/formatting.c:3626 +#: utils/adt/formatting.c:3684 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "ungültige Eingabe für »Y,YYY«" -#: utils/adt/formatting.c:3712 -#, fuzzy, c-format -#| msgid "source string too short for \"%s\" formatting field" +#: utils/adt/formatting.c:3770 +#, c-format msgid "input string is too short for datetime format" -msgstr "Quellzeichenkette zu kurz für Formatfeld »%s»" +msgstr "Eingabezeichenkette ist zu kurz für Datum-/Zeitformat" -#: utils/adt/formatting.c:3720 +#: utils/adt/formatting.c:3778 #, c-format msgid "trailing characters remain in input string after datetime format" -msgstr "" +msgstr "nach dem Datum-/Zeitformat bleiben noch Zeichen in der Eingabezeichenkette" -#: utils/adt/formatting.c:4265 +#: utils/adt/formatting.c:4323 #, c-format msgid "missing time zone in input string for type timestamptz" -msgstr "" +msgstr "Zeitzone fehlt in Eingabezeichenkette für Typ timestamptz" -#: utils/adt/formatting.c:4271 -#, fuzzy, c-format -#| msgid "timestamp out of range" +#: utils/adt/formatting.c:4329 +#, c-format msgid "timestamptz out of range" -msgstr "timestamp ist außerhalb des gültigen Bereichs" +msgstr "timestamptz ist außerhalb des gültigen Bereichs" -#: utils/adt/formatting.c:4299 +#: utils/adt/formatting.c:4357 #, c-format msgid "datetime format is zoned but not timed" -msgstr "" +msgstr "Datum-/Zeitformat hat Zeitzone aber keine Zeit" -#: utils/adt/formatting.c:4351 +#: utils/adt/formatting.c:4409 #, c-format msgid "missing time zone in input string for type timetz" -msgstr "" +msgstr "Zeitzone fehlt in Eingabezeichenkette für Typ timetz" -#: utils/adt/formatting.c:4357 -#, fuzzy, c-format -#| msgid "time out of range" +#: utils/adt/formatting.c:4415 +#, c-format msgid "timetz out of range" -msgstr "time ist außerhalb des gültigen Bereichs" +msgstr "timetz ist außerhalb des gültigen Bereichs" -#: utils/adt/formatting.c:4383 +#: utils/adt/formatting.c:4441 #, c-format msgid "datetime format is not dated and not timed" -msgstr "" +msgstr "Datum-/Zeitformat hat kein Datum und keine Zeit" -#: utils/adt/formatting.c:4516 +#: utils/adt/formatting.c:4574 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "Stunde »%d« ist bei einer 12-Stunden-Uhr ungültig" -#: utils/adt/formatting.c:4518 +#: utils/adt/formatting.c:4576 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Verwenden Sie die 24-Stunden-Uhr oder geben Sie eine Stunde zwischen 1 und 12 an." -#: utils/adt/formatting.c:4626 +#: utils/adt/formatting.c:4687 #, c-format msgid "cannot calculate day of year without year information" msgstr "kann Tag des Jahres nicht berechnen ohne Jahrinformationen" -#: utils/adt/formatting.c:5545 +#: utils/adt/formatting.c:5606 #, c-format msgid "\"EEEE\" not supported for input" msgstr "»E« wird nicht bei der Eingabe unterstützt" -#: utils/adt/formatting.c:5557 +#: utils/adt/formatting.c:5618 #, c-format msgid "\"RN\" not supported for input" msgstr "»RN« wird nicht bei der Eingabe unterstützt" -#: utils/adt/genfile.c:75 +#: utils/adt/genfile.c:78 #, c-format msgid "reference to parent directory (\"..\") not allowed" msgstr "Verweis auf übergeordnetes Verzeichnis (»..«) nicht erlaubt" -#: utils/adt/genfile.c:86 +#: utils/adt/genfile.c:89 #, c-format msgid "absolute path not allowed" msgstr "absoluter Pfad nicht erlaubt" -#: utils/adt/genfile.c:91 +#: utils/adt/genfile.c:94 #, c-format msgid "path must be in or below the current directory" msgstr "Pfad muss in oder unter aktuellem Verzeichnis sein" -#: utils/adt/genfile.c:138 utils/adt/oracle_compat.c:184 -#: utils/adt/oracle_compat.c:282 utils/adt/oracle_compat.c:758 -#: utils/adt/oracle_compat.c:1053 +#: utils/adt/genfile.c:119 utils/adt/oracle_compat.c:187 +#: utils/adt/oracle_compat.c:285 utils/adt/oracle_compat.c:833 +#: utils/adt/oracle_compat.c:1128 #, c-format msgid "requested length too large" msgstr "verlangte Länge zu groß" -#: utils/adt/genfile.c:155 +#: utils/adt/genfile.c:136 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "konnte Positionszeiger in Datei »%s« nicht setzen: %m" -#: utils/adt/genfile.c:215 -#, fuzzy, c-format -#| msgid "must be superuser to read files" +#: utils/adt/genfile.c:177 +#, c-format +msgid "file length too large" +msgstr "Dateilänge zu groß" + +#: utils/adt/genfile.c:254 +#, c-format msgid "must be superuser to read files with adminpack 1.0" -msgstr "nur Superuser können Dateien lesen" +msgstr "nur Superuser können mit adminpack 1.0 Dateien lesen" #: utils/adt/geo_ops.c:979 utils/adt/geo_ops.c:1025 #, c-format msgid "invalid line specification: A and B cannot both be zero" msgstr "ungültige »line«-Angabe: A und B können nicht beide null sein" -#: utils/adt/geo_ops.c:987 utils/adt/geo_ops.c:1090 +#: utils/adt/geo_ops.c:987 utils/adt/geo_ops.c:1097 #, c-format msgid "invalid line specification: must be two distinct points" msgstr "ungültige »line«-Angabe: es müssen zwei verschiedene Punkte angegeben werden" -#: utils/adt/geo_ops.c:1399 utils/adt/geo_ops.c:3486 utils/adt/geo_ops.c:4354 -#: utils/adt/geo_ops.c:5248 +#: utils/adt/geo_ops.c:1410 utils/adt/geo_ops.c:3498 utils/adt/geo_ops.c:4366 +#: utils/adt/geo_ops.c:5260 #, c-format msgid "too many points requested" msgstr "zu viele Punkte verlangt" -#: utils/adt/geo_ops.c:1461 +#: utils/adt/geo_ops.c:1472 #, c-format msgid "invalid number of points in external \"path\" value" msgstr "ungültige Anzahl Punkte in externem »path«-Wert" -#: utils/adt/geo_ops.c:2537 +#: utils/adt/geo_ops.c:2549 #, c-format msgid "function \"dist_lb\" not implemented" msgstr "Funktion »dist_lb« ist nicht implementiert" -#: utils/adt/geo_ops.c:2556 -#, fuzzy, c-format -#| msgid "function \"dist_lb\" not implemented" +#: utils/adt/geo_ops.c:2568 +#, c-format msgid "function \"dist_bl\" not implemented" -msgstr "Funktion »dist_lb« ist nicht implementiert" +msgstr "Funktion »dist_bl« ist nicht implementiert" -#: utils/adt/geo_ops.c:2975 +#: utils/adt/geo_ops.c:2987 #, c-format msgid "function \"close_sl\" not implemented" msgstr "Funktion »close_sl« ist nicht implementiert" -#: utils/adt/geo_ops.c:3122 +#: utils/adt/geo_ops.c:3134 #, c-format msgid "function \"close_lb\" not implemented" msgstr "Funktion »close_lb« ist nicht implementiert" -#: utils/adt/geo_ops.c:3533 +#: utils/adt/geo_ops.c:3545 #, c-format msgid "invalid number of points in external \"polygon\" value" msgstr "ungültige Anzahl Punkte in externem »polygon«-Wert" -#: utils/adt/geo_ops.c:4069 +#: utils/adt/geo_ops.c:4081 #, c-format msgid "function \"poly_distance\" not implemented" msgstr "Funktion »poly_distance« ist nicht implementiert" -#: utils/adt/geo_ops.c:4446 +#: utils/adt/geo_ops.c:4458 #, c-format msgid "function \"path_center\" not implemented" msgstr "Funktion »path_center« ist nicht implementiert" -#: utils/adt/geo_ops.c:4463 +#: utils/adt/geo_ops.c:4475 #, c-format msgid "open path cannot be converted to polygon" msgstr "offener Pfad kann nicht in Polygon umgewandelt werden" -#: utils/adt/geo_ops.c:4713 +#: utils/adt/geo_ops.c:4725 #, c-format msgid "invalid radius in external \"circle\" value" msgstr "ungültiger Radius in externem »circle«-Wert" -#: utils/adt/geo_ops.c:5234 +#: utils/adt/geo_ops.c:5246 #, c-format msgid "cannot convert circle with radius zero to polygon" msgstr "kann Kreis mit Radius null nicht in Polygon umwandeln" -#: utils/adt/geo_ops.c:5239 +#: utils/adt/geo_ops.c:5251 #, c-format msgid "must request at least 2 points" msgstr "mindestens 2 Punkte müssen angefordert werden" @@ -22557,38 +23355,38 @@ msgstr "mindestens 2 Punkte müssen angefordert werden" msgid "int2vector has too many elements" msgstr "int2vector-Wert hat zu viele Elemente" -#: utils/adt/int.c:239 +#: utils/adt/int.c:237 #, c-format msgid "invalid int2vector data" msgstr "ungültige int2vector-Daten" -#: utils/adt/int.c:245 utils/adt/oid.c:215 utils/adt/oid.c:296 +#: utils/adt/int.c:243 utils/adt/oid.c:215 utils/adt/oid.c:296 #, c-format msgid "oidvector has too many elements" msgstr "oidvector-Wert hat zu viele Elemente" -#: utils/adt/int.c:1509 utils/adt/int8.c:1438 utils/adt/numeric.c:1417 -#: utils/adt/timestamp.c:5442 utils/adt/timestamp.c:5522 +#: utils/adt/int.c:1508 utils/adt/int8.c:1446 utils/adt/numeric.c:1624 +#: utils/adt/timestamp.c:5771 utils/adt/timestamp.c:5851 #, c-format msgid "step size cannot equal zero" msgstr "Schrittgröße kann nicht gleich null sein" -#: utils/adt/int8.c:527 utils/adt/int8.c:550 utils/adt/int8.c:564 -#: utils/adt/int8.c:578 utils/adt/int8.c:609 utils/adt/int8.c:633 -#: utils/adt/int8.c:714 utils/adt/int8.c:782 utils/adt/int8.c:788 -#: utils/adt/int8.c:814 utils/adt/int8.c:828 utils/adt/int8.c:852 -#: utils/adt/int8.c:865 utils/adt/int8.c:934 utils/adt/int8.c:948 -#: utils/adt/int8.c:962 utils/adt/int8.c:993 utils/adt/int8.c:1015 -#: utils/adt/int8.c:1029 utils/adt/int8.c:1043 utils/adt/int8.c:1076 -#: utils/adt/int8.c:1090 utils/adt/int8.c:1104 utils/adt/int8.c:1135 -#: utils/adt/int8.c:1157 utils/adt/int8.c:1171 utils/adt/int8.c:1185 -#: utils/adt/int8.c:1347 utils/adt/int8.c:1382 utils/adt/numeric.c:3508 -#: utils/adt/varbit.c:1656 +#: utils/adt/int8.c:534 utils/adt/int8.c:557 utils/adt/int8.c:571 +#: utils/adt/int8.c:585 utils/adt/int8.c:616 utils/adt/int8.c:640 +#: utils/adt/int8.c:722 utils/adt/int8.c:790 utils/adt/int8.c:796 +#: utils/adt/int8.c:822 utils/adt/int8.c:836 utils/adt/int8.c:860 +#: utils/adt/int8.c:873 utils/adt/int8.c:942 utils/adt/int8.c:956 +#: utils/adt/int8.c:970 utils/adt/int8.c:1001 utils/adt/int8.c:1023 +#: utils/adt/int8.c:1037 utils/adt/int8.c:1051 utils/adt/int8.c:1084 +#: utils/adt/int8.c:1098 utils/adt/int8.c:1112 utils/adt/int8.c:1143 +#: utils/adt/int8.c:1165 utils/adt/int8.c:1179 utils/adt/int8.c:1193 +#: utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4276 +#: utils/adt/varbit.c:1676 #, c-format msgid "bigint out of range" msgstr "bigint ist außerhalb des gültigen Bereichs" -#: utils/adt/int8.c:1395 +#: utils/adt/int8.c:1403 #, c-format msgid "OID out of range" msgstr "OID ist außerhalb des gültigen Bereichs" @@ -22598,7 +23396,7 @@ msgstr "OID ist außerhalb des gültigen Bereichs" msgid "key value must be scalar, not array, composite, or json" msgstr "Schlüsselwert muss skalar sein, nicht Array, zusammengesetzt oder json" -#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:1812 +#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:1994 #, c-format msgid "could not determine data type for argument %d" msgstr "konnte Datentyp von Argument %d nicht ermitteln" @@ -22666,409 +23464,438 @@ msgid "object keys must be strings" msgstr "Objektschlüssel müssen Zeichenketten sein" #: utils/adt/jsonb.c:1944 -#, fuzzy, c-format -#| msgid "cannot accept a value of type %s" +#, c-format msgid "cannot cast jsonb null to type %s" -msgstr "kann keinen Wert vom Typ %s annehmen" +msgstr "kann jsonb-Null-Wert nicht in Typ %s umwandeln" #: utils/adt/jsonb.c:1945 -#, fuzzy, c-format -#| msgid "cannot cast type %s to %s" +#, c-format msgid "cannot cast jsonb string to type %s" -msgstr "kann Typ %s nicht in Typ %s umwandeln" +msgstr "kann jsonb-Zeichenkette nicht in Typ %s umwandeln" #: utils/adt/jsonb.c:1946 -#, fuzzy, c-format -#| msgid "cannot accept a value of type %s" +#, c-format msgid "cannot cast jsonb numeric to type %s" -msgstr "kann keinen Wert vom Typ %s annehmen" +msgstr "kann jsonb numerischen Wert nicht in Typ %s umwandeln" #: utils/adt/jsonb.c:1947 -#, fuzzy, c-format -#| msgid "cannot accept a value of type %s" +#, c-format msgid "cannot cast jsonb boolean to type %s" -msgstr "kann keinen Wert vom Typ %s annehmen" +msgstr "kann jsonb-boolean nicht in Typ %s umwandeln" #: utils/adt/jsonb.c:1948 -#, fuzzy, c-format -#| msgid "cannot alter array type %s" +#, c-format msgid "cannot cast jsonb array to type %s" -msgstr "Array-Typ %s kann nicht verändert werden" +msgstr "kann jsonb-Array nicht in Typ %s umwandeln" #: utils/adt/jsonb.c:1949 -#, fuzzy, c-format -#| msgid "cannot accept a value of type %s" +#, c-format msgid "cannot cast jsonb object to type %s" -msgstr "kann keinen Wert vom Typ %s annehmen" +msgstr "kann jsonb-Objekt nicht in Typ %s umwandeln" #: utils/adt/jsonb.c:1950 -#, fuzzy, c-format -#| msgid "cannot alter array type %s" +#, c-format msgid "cannot cast jsonb array or object to type %s" -msgstr "Array-Typ %s kann nicht verändert werden" +msgstr "kann jsonb-Array oder -Objekt nicht in Typ %s umwandeln" -#: utils/adt/jsonb_util.c:699 +#: utils/adt/jsonb_util.c:751 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "Anzahl der jsonb-Objekte-Paare überschreitet erlaubtes Maximum (%zu)" -#: utils/adt/jsonb_util.c:740 +#: utils/adt/jsonb_util.c:792 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "Anzahl der jsonb-Arrayelemente überschreitet erlaubtes Maximum (%zu)" -#: utils/adt/jsonb_util.c:1614 utils/adt/jsonb_util.c:1634 +#: utils/adt/jsonb_util.c:1666 utils/adt/jsonb_util.c:1686 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "Gesamtgröße der jsonb-Array-Elemente überschreitet die maximale Größe von %u Bytes" -#: utils/adt/jsonb_util.c:1695 utils/adt/jsonb_util.c:1730 -#: utils/adt/jsonb_util.c:1750 +#: utils/adt/jsonb_util.c:1747 utils/adt/jsonb_util.c:1782 +#: utils/adt/jsonb_util.c:1802 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "Gesamtgröße der jsonb-Objektelemente überschreitet die maximale Größe von %u Bytes" -#: utils/adt/jsonfuncs.c:551 utils/adt/jsonfuncs.c:796 -#: utils/adt/jsonfuncs.c:2330 utils/adt/jsonfuncs.c:2770 -#: utils/adt/jsonfuncs.c:3560 utils/adt/jsonfuncs.c:3891 +#: utils/adt/jsonbsubs.c:70 utils/adt/jsonbsubs.c:152 +#, fuzzy, c-format +#| msgid "this build does not support compression" +msgid "jsonb subscript does not support slices" +msgstr "diese Installation unterstützt keine Komprimierung" + +#: utils/adt/jsonbsubs.c:103 utils/adt/jsonbsubs.c:118 +#, fuzzy, c-format +#| msgid "log format \"%s\" is not supported" +msgid "subscript type is not supported" +msgstr "Logformat »%s« wird nicht unterstützt" + +#: utils/adt/jsonbsubs.c:104 +#, c-format +msgid "Jsonb subscript must be coerced only to one type, integer or text." +msgstr "" + +#: utils/adt/jsonbsubs.c:119 +#, c-format +msgid "Jsonb subscript must be coerced to either integer or text" +msgstr "" + +#: utils/adt/jsonbsubs.c:140 +#, fuzzy, c-format +#| msgid "array subscript must have type integer" +msgid "jsonb subscript must have text type" +msgstr "Arrayindex muss Typ integer haben" + +#: utils/adt/jsonbsubs.c:208 +#, fuzzy, c-format +#| msgid "array subscript in assignment must not be null" +msgid "jsonb subscript in assignment must not be null" +msgstr "Arrayindex in Zuweisung darf nicht NULL sein" + +#: utils/adt/jsonfuncs.c:555 utils/adt/jsonfuncs.c:789 +#: utils/adt/jsonfuncs.c:2471 utils/adt/jsonfuncs.c:2911 +#: utils/adt/jsonfuncs.c:3700 utils/adt/jsonfuncs.c:4030 #, c-format msgid "cannot call %s on a scalar" msgstr "%s kann nicht mit einem skalaren Wert aufgerufen werden" -#: utils/adt/jsonfuncs.c:556 utils/adt/jsonfuncs.c:783 -#: utils/adt/jsonfuncs.c:2772 utils/adt/jsonfuncs.c:3549 +#: utils/adt/jsonfuncs.c:560 utils/adt/jsonfuncs.c:776 +#: utils/adt/jsonfuncs.c:2913 utils/adt/jsonfuncs.c:3689 #, c-format msgid "cannot call %s on an array" msgstr "%s kann nicht mit einem Array aufgerufen werden" -#: utils/adt/jsonfuncs.c:692 +#: utils/adt/jsonfuncs.c:685 #, c-format msgid "JSON data, line %d: %s%s%s" msgstr "JSON-Daten, Zeile %d: %s%s%s" -#: utils/adt/jsonfuncs.c:1682 utils/adt/jsonfuncs.c:1717 +#: utils/adt/jsonfuncs.c:1823 utils/adt/jsonfuncs.c:1858 #, c-format msgid "cannot get array length of a scalar" msgstr "kann nicht die Arraylänge eines skalaren Wertes ermitteln" -#: utils/adt/jsonfuncs.c:1686 utils/adt/jsonfuncs.c:1705 +#: utils/adt/jsonfuncs.c:1827 utils/adt/jsonfuncs.c:1846 #, c-format msgid "cannot get array length of a non-array" msgstr "kann nicht die Arraylänge eines Nicht-Arrays ermitteln" -#: utils/adt/jsonfuncs.c:1782 +#: utils/adt/jsonfuncs.c:1923 #, c-format msgid "cannot call %s on a non-object" msgstr "%s kann nicht mit etwas aufgerufen werden, das kein Objekt ist" -#: utils/adt/jsonfuncs.c:2021 +#: utils/adt/jsonfuncs.c:2162 #, c-format msgid "cannot deconstruct an array as an object" msgstr "kann Array nicht in ein Objekt zerlegen" -#: utils/adt/jsonfuncs.c:2033 +#: utils/adt/jsonfuncs.c:2174 #, c-format msgid "cannot deconstruct a scalar" msgstr "kann skalaren Wert nicht zerlegen" -#: utils/adt/jsonfuncs.c:2079 +#: utils/adt/jsonfuncs.c:2220 #, c-format msgid "cannot extract elements from a scalar" msgstr "kann keine Elemente aus einem skalaren Wert auswählen" -#: utils/adt/jsonfuncs.c:2083 +#: utils/adt/jsonfuncs.c:2224 #, c-format msgid "cannot extract elements from an object" msgstr "kann keine Elemente aus einem Objekt auswählen" -#: utils/adt/jsonfuncs.c:2317 utils/adt/jsonfuncs.c:3775 +#: utils/adt/jsonfuncs.c:2458 utils/adt/jsonfuncs.c:3915 #, c-format msgid "cannot call %s on a non-array" msgstr "%s kann nicht mit etwas aufgerufen werden, das kein Array ist" -#: utils/adt/jsonfuncs.c:2387 utils/adt/jsonfuncs.c:2392 -#: utils/adt/jsonfuncs.c:2409 utils/adt/jsonfuncs.c:2415 +#: utils/adt/jsonfuncs.c:2528 utils/adt/jsonfuncs.c:2533 +#: utils/adt/jsonfuncs.c:2550 utils/adt/jsonfuncs.c:2556 #, c-format msgid "expected JSON array" msgstr "JSON-Array wurde erwartet" -#: utils/adt/jsonfuncs.c:2388 +#: utils/adt/jsonfuncs.c:2529 #, c-format msgid "See the value of key \"%s\"." msgstr "Prüfen Sie den Wert des Schlüssels »%s«." -#: utils/adt/jsonfuncs.c:2410 +#: utils/adt/jsonfuncs.c:2551 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "Prüfen Sie das Arrayelement %s des Schlüssels »%s«." -#: utils/adt/jsonfuncs.c:2416 +#: utils/adt/jsonfuncs.c:2557 #, c-format msgid "See the array element %s." msgstr "Prüfen Sie das Arrayelement %s." -#: utils/adt/jsonfuncs.c:2451 +#: utils/adt/jsonfuncs.c:2592 #, c-format msgid "malformed JSON array" msgstr "fehlerhaftes JSON-Array" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3278 +#: utils/adt/jsonfuncs.c:3419 #, c-format msgid "first argument of %s must be a row type" msgstr "erstes Argument von %s muss ein Zeilentyp sein" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3302 -#, fuzzy, c-format -#| msgid "could not determine data type for argument %d" +#: utils/adt/jsonfuncs.c:3443 +#, c-format msgid "could not determine row type for result of %s" -msgstr "konnte Datentyp von Argument %d nicht ermitteln" +msgstr "konnte Zeilentyp für Ergebnis von %s nicht ermitteln" -#: utils/adt/jsonfuncs.c:3304 -#, fuzzy, c-format -#| msgid "Try calling the function in the FROM clause using a column definition list." +#: utils/adt/jsonfuncs.c:3445 +#, c-format msgid "Provide a non-null record argument, or call the function in the FROM clause using a column definition list." -msgstr "Versuchen Sie, die Funktion in der FROM-Klausel mit einer Spaltendefinitionsliste aufzurufen." +msgstr "Geben Sie ein »record«-Argument, das nicht NULL ist, an oder rufen Sie die Funktion in der FROM-Klausel mit einer Spaltendefinitionsliste auf." -#: utils/adt/jsonfuncs.c:3792 utils/adt/jsonfuncs.c:3873 +#: utils/adt/jsonfuncs.c:3932 utils/adt/jsonfuncs.c:4012 #, c-format msgid "argument of %s must be an array of objects" msgstr "Argument von %s muss ein Array von Objekten sein" -#: utils/adt/jsonfuncs.c:3825 +#: utils/adt/jsonfuncs.c:3965 #, c-format msgid "cannot call %s on an object" msgstr "%s kann nicht mit einem Objekt aufgerufen werden" -#: utils/adt/jsonfuncs.c:4286 utils/adt/jsonfuncs.c:4345 -#: utils/adt/jsonfuncs.c:4425 +#: utils/adt/jsonfuncs.c:4373 utils/adt/jsonfuncs.c:4432 +#: utils/adt/jsonfuncs.c:4512 #, c-format msgid "cannot delete from scalar" msgstr "kann nicht aus skalarem Wert löschen" -#: utils/adt/jsonfuncs.c:4430 +#: utils/adt/jsonfuncs.c:4517 #, c-format msgid "cannot delete from object using integer index" msgstr "aus einem Objekt kann nicht per numerischem Index gelöscht werden" -#: utils/adt/jsonfuncs.c:4495 utils/adt/jsonfuncs.c:4652 +#: utils/adt/jsonfuncs.c:4585 utils/adt/jsonfuncs.c:4746 #, c-format msgid "cannot set path in scalar" msgstr "in einem skalaren Wert kann kein Pfad gesetzt werden" -#: utils/adt/jsonfuncs.c:4537 utils/adt/jsonfuncs.c:4578 +#: utils/adt/jsonfuncs.c:4627 utils/adt/jsonfuncs.c:4669 #, c-format msgid "null_value_treatment must be \"delete_key\", \"return_target\", \"use_json_null\", or \"raise_exception\"" -msgstr "" +msgstr "null_value_treatment muss »delete_key«, »return_target«, »use_json_null« oder »raise_exception« sein" -#: utils/adt/jsonfuncs.c:4550 -#, fuzzy, c-format -#| msgid "slot name must not be null" +#: utils/adt/jsonfuncs.c:4640 +#, c-format msgid "JSON value must not be null" -msgstr "Slot-Name darf nicht NULL sein" +msgstr "JSON-Wert darf nicht NULL sein" -#: utils/adt/jsonfuncs.c:4551 +#: utils/adt/jsonfuncs.c:4641 #, c-format msgid "Exception was raised because null_value_treatment is \"raise_exception\"." -msgstr "" +msgstr "Ausnahme wurde ausgelöst, weil null_value_treatment »raise_exception« ist." -#: utils/adt/jsonfuncs.c:4552 +#: utils/adt/jsonfuncs.c:4642 #, c-format msgid "To avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not passed." -msgstr "" +msgstr "Um dies zu vermeiden, ändern Sie das Argument null_value_treatment oder sorgen Sie dafür, dass kein SQL NULL übergeben wird." -#: utils/adt/jsonfuncs.c:4606 +#: utils/adt/jsonfuncs.c:4697 #, c-format msgid "cannot delete path in scalar" msgstr "in einem skalaren Wert kann kein Pfad gelöscht werden" -#: utils/adt/jsonfuncs.c:4775 -#, c-format -msgid "invalid concatenation of jsonb objects" -msgstr "ungültiges Aneinanderhängen von jsonb-Objekten" - -#: utils/adt/jsonfuncs.c:4809 +#: utils/adt/jsonfuncs.c:4913 #, c-format msgid "path element at position %d is null" msgstr "Pfadelement auf Position %d ist NULL" -#: utils/adt/jsonfuncs.c:4895 +#: utils/adt/jsonfuncs.c:4932 utils/adt/jsonfuncs.c:4963 +#: utils/adt/jsonfuncs.c:5030 #, c-format msgid "cannot replace existing key" msgstr "existierender Schlüssel kann nicht ersetzt werden" -#: utils/adt/jsonfuncs.c:4896 +#: utils/adt/jsonfuncs.c:4933 utils/adt/jsonfuncs.c:4964 +#, c-format +msgid "The path assumes key is a composite object, but it is a scalar value." +msgstr "" + +#: utils/adt/jsonfuncs.c:5031 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "Verwenden Sie die Funktion jsonb_set, um den Schlüsselwert zu ersetzen." -#: utils/adt/jsonfuncs.c:4978 +#: utils/adt/jsonfuncs.c:5135 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "Pfadelement auf Position %d ist keine ganze Zahl: »%s«" -#: utils/adt/jsonfuncs.c:5097 +#: utils/adt/jsonfuncs.c:5152 +#, fuzzy, c-format +#| msgid "path element at position %d is not an integer: \"%s\"" +msgid "path element at position %d is out of range: %d" +msgstr "Pfadelement auf Position %d ist keine ganze Zahl: »%s«" + +#: utils/adt/jsonfuncs.c:5304 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" -msgstr "" +msgstr "falscher Flag-Typ, nur Arrays und skalare Werte sind erlaubt" -#: utils/adt/jsonfuncs.c:5104 -#, fuzzy, c-format -#| msgid "array element type cannot be %s" +#: utils/adt/jsonfuncs.c:5311 +#, c-format msgid "flag array element is not a string" -msgstr "Arrayelementtyp kann nicht %s sein" +msgstr "Flag-Array-Element ist keine Zeichenkette" -#: utils/adt/jsonfuncs.c:5105 utils/adt/jsonfuncs.c:5127 +#: utils/adt/jsonfuncs.c:5312 utils/adt/jsonfuncs.c:5334 #, c-format msgid "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all\"." msgstr "Mögliche Werte sind: »string«, »numeric«, »boolean«, »key« und »all«." -#: utils/adt/jsonfuncs.c:5125 +#: utils/adt/jsonfuncs.c:5332 #, c-format msgid "wrong flag in flag array: \"%s\"" -msgstr "" +msgstr "falsche Flag im Flag-Array: »%s«" #: utils/adt/jsonpath.c:362 -#, fuzzy, c-format -#| msgid "window functions are not allowed in policy expressions" +#, c-format msgid "@ is not allowed in root expressions" -msgstr "Fensterfunktionen sind in Policy-Ausdrücken nicht erlaubt" +msgstr "@ ist nicht erlaubt in Wurzelausdrücken" #: utils/adt/jsonpath.c:368 -#, fuzzy, c-format -#| msgid "wrong number of array subscripts" +#, c-format msgid "LAST is allowed only in array subscripts" -msgstr "falsche Anzahl Arrayindizes" +msgstr "LAST ist nur in Arrayindizes erlaubt" #: utils/adt/jsonpath_exec.c:360 #, c-format msgid "single boolean result is expected" -msgstr "" +msgstr "ein einzelnes Ergebnis mit Typ boolean wird erwartet" #: utils/adt/jsonpath_exec.c:556 #, c-format msgid "\"vars\" argument is not an object" -msgstr "" +msgstr "Argument »vars« ist kein Objekt" #: utils/adt/jsonpath_exec.c:557 #, c-format msgid "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." -msgstr "" +msgstr "JSON-Path-Parameter sollten als Schüssel-Wert-Paare im »vars«-Objekt kodiert werden." #: utils/adt/jsonpath_exec.c:674 #, c-format msgid "JSON object does not contain key \"%s\"" -msgstr "" +msgstr "JSON-Objekt enthält Schlüssel »%s« nicht" #: utils/adt/jsonpath_exec.c:686 -#, fuzzy, c-format -#| msgid "define or change a security label applied to an object" +#, c-format msgid "jsonpath member accessor can only be applied to an object" -msgstr "definiert oder ändert ein Security-Label eines Objektes" +msgstr "JSON-Path-Member-Zugriff kann nur auf ein Objekt angewendet werden" #: utils/adt/jsonpath_exec.c:715 #, c-format msgid "jsonpath wildcard array accessor can only be applied to an array" -msgstr "" +msgstr "JSON-Path-Wildcard-Array-Indizierung kann nur auf ein Array angewendet werden" #: utils/adt/jsonpath_exec.c:763 -#, fuzzy, c-format -#| msgid "array subscript out of range" +#, c-format msgid "jsonpath array subscript is out of bounds" -msgstr "Arrayindex außerhalb des gültigen Bereichs" +msgstr "JSON-Path-Arrayindex ist außerhalb des gültigen Bereichs" #: utils/adt/jsonpath_exec.c:820 #, c-format msgid "jsonpath array accessor can only be applied to an array" -msgstr "" +msgstr "JSON-Path-Array-Indizierung kann nur auf ein Array angewendet werden" -#: utils/adt/jsonpath_exec.c:874 -#, fuzzy, c-format -#| msgid "define or change a security label applied to an object" +#: utils/adt/jsonpath_exec.c:872 +#, c-format msgid "jsonpath wildcard member accessor can only be applied to an object" -msgstr "definiert oder ändert ein Security-Label eines Objektes" +msgstr "JSON-Path-Wildcard-Member-Zugriff kann nur auf ein Objekt angwendet werden" -#: utils/adt/jsonpath_exec.c:1004 +#: utils/adt/jsonpath_exec.c:1002 #, c-format msgid "jsonpath item method .%s() can only be applied to an array" -msgstr "" +msgstr "Jsonpath-Item-Methode .%s() kann nur auf ein Array angewendet werden" -#: utils/adt/jsonpath_exec.c:1058 utils/adt/jsonpath_exec.c:1079 -#: utils/adt/jsonpath_exec.c:1755 +#: utils/adt/jsonpath_exec.c:1055 #, c-format -msgid "jsonpath item method .%s() can only be applied to a numeric value" -msgstr "" +msgid "numeric argument of jsonpath item method .%s() is out of range for type double precision" +msgstr "numerisches Argument der JSON-Path-Item-Methode .%s() ist außerhalb des gültigen Bereichs für Typ double precision" -#: utils/adt/jsonpath_exec.c:1092 +#: utils/adt/jsonpath_exec.c:1076 +#, c-format +msgid "string argument of jsonpath item method .%s() is not a valid representation of a double precision number" +msgstr "Zeichenkettenargument der JSON-Path-Item-Methode .%s() ist nicht gültig für Typ double precision" + +#: utils/adt/jsonpath_exec.c:1089 #, c-format msgid "jsonpath item method .%s() can only be applied to a string or numeric value" -msgstr "" +msgstr "JSON-Path-Item-Methode .%s() kann nur auf eine Zeichenkette oder einen numerischen Wert angewendet werden" -#: utils/adt/jsonpath_exec.c:1582 +#: utils/adt/jsonpath_exec.c:1579 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" -msgstr "" +msgstr "linker Operand des JSON-Path-Operators %s ist kein einzelner numerischer Wert" -#: utils/adt/jsonpath_exec.c:1589 +#: utils/adt/jsonpath_exec.c:1586 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" -msgstr "" +msgstr "rechter Operand des JSON-Path-Operators %s ist kein einzelner numerischer Wert" -#: utils/adt/jsonpath_exec.c:1657 +#: utils/adt/jsonpath_exec.c:1654 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" -msgstr "" +msgstr "Operand des unären JSON-Path-Operators %s ist kein numerischer Wert" -#: utils/adt/jsonpath_exec.c:1795 -#, fuzzy, c-format -#| msgid "define or change a security label applied to an object" +#: utils/adt/jsonpath_exec.c:1752 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a numeric value" +msgstr "JSON-Path-Item-Methode .%s() kann nur auf einen numerischen Wert angewendet werden" + +#: utils/adt/jsonpath_exec.c:1792 +#, c-format msgid "jsonpath item method .%s() can only be applied to a string" -msgstr "definiert oder ändert ein Security-Label eines Objektes" +msgstr "JSON-Path-Item-Methode .%s() kann nur auf eine Zeichenkette angewendet werden" -#: utils/adt/jsonpath_exec.c:1883 -#, fuzzy, c-format -#| msgid "COPY format \"%s\" not recognized" +#: utils/adt/jsonpath_exec.c:1886 +#, c-format msgid "datetime format is not recognized: \"%s\"" -msgstr "COPY-Format »%s« nicht erkannt" +msgstr "Datum-/Zeitformat nicht erkannt: »%s«" -#: utils/adt/jsonpath_exec.c:1885 +#: utils/adt/jsonpath_exec.c:1888 #, c-format msgid "Use a datetime template argument to specify the input data format." -msgstr "" +msgstr "Verwenden Sie das Template-Argument für .datetime(), um das Eingabeformat anzugeben." -#: utils/adt/jsonpath_exec.c:1953 -#, fuzzy, c-format -#| msgid "define or change a security label applied to an object" +#: utils/adt/jsonpath_exec.c:1956 +#, c-format msgid "jsonpath item method .%s() can only be applied to an object" -msgstr "definiert oder ändert ein Security-Label eines Objektes" +msgstr "JSON-Path-Item-Methode .%s() kann nur auf ein Objekt angewendet werden" -#: utils/adt/jsonpath_exec.c:2136 -#, fuzzy, c-format -#| msgid "could not find WAL file \"%s\"" +#: utils/adt/jsonpath_exec.c:2138 +#, c-format msgid "could not find jsonpath variable \"%s\"" -msgstr "konnte WAL-Datei »%s« nicht finden" +msgstr "konnte JSON-Path-Variable »%s« nicht finden" -#: utils/adt/jsonpath_exec.c:2400 +#: utils/adt/jsonpath_exec.c:2402 #, c-format msgid "jsonpath array subscript is not a single numeric value" -msgstr "" +msgstr "JSON-Path-Arrayindex ist kein einzelner numerischer Wert" -#: utils/adt/jsonpath_exec.c:2412 -#, fuzzy, c-format -#| msgid "array subscript out of range" +#: utils/adt/jsonpath_exec.c:2414 +#, c-format msgid "jsonpath array subscript is out of integer range" -msgstr "Arrayindex außerhalb des gültigen Bereichs" +msgstr "JSON-Path-Arrayindex außerhalb des gültigen Bereichs für ganze Zahlen" -#: utils/adt/jsonpath_exec.c:2589 +#: utils/adt/jsonpath_exec.c:2591 #, c-format -msgid "cannot convert value from %s to %s without timezone usage" -msgstr "" +msgid "cannot convert value from %s to %s without time zone usage" +msgstr "Wert kann nicht von %s nach %s konvertiert werden ohne Verwendung von Zeitzonen" -#: utils/adt/jsonpath_exec.c:2591 +#: utils/adt/jsonpath_exec.c:2593 #, c-format -msgid "Use *_tz() function for timezone support." -msgstr "" +msgid "Use *_tz() function for time zone support." +msgstr "Verwenden Sie die *_tz()-Funktion für Zeitzonenunterstützung." #: utils/adt/levenshtein.c:133 #, c-format @@ -23076,12 +23903,11 @@ msgid "levenshtein argument exceeds maximum length of %d characters" msgstr "Levenshtein-Argument überschreitet die maximale Länge von %d Zeichen" #: utils/adt/like.c:160 -#, fuzzy, c-format -#| msgid "could not determine which collation to use for ILIKE" +#, c-format msgid "nondeterministic collations are not supported for LIKE" -msgstr "konnte die für ILIKE zu verwendende Sortierfolge nicht bestimmen" +msgstr "nichtdeterministische Sortierfolgen werden von LIKE nicht unterstützt" -#: utils/adt/like.c:193 utils/adt/like_support.c:1004 +#: utils/adt/like.c:193 utils/adt/like_support.c:1002 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "konnte die für ILIKE zu verwendende Sortierfolge nicht bestimmen" @@ -23106,12 +23932,12 @@ msgstr "ungültige ESCAPE-Zeichenkette" msgid "Escape string must be empty or one character." msgstr "ESCAPE-Zeichenkette muss null oder ein Zeichen lang sein." -#: utils/adt/like_support.c:989 +#: utils/adt/like_support.c:987 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "Mustersuche ohne Rücksicht auf Groß-/Kleinschreibung wird für Typ bytea nicht unterstützt" -#: utils/adt/like_support.c:1091 +#: utils/adt/like_support.c:1089 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "Mustersuche mit regulären Ausdrücken wird für Typ bytea nicht unterstützt" @@ -23131,68 +23957,142 @@ msgstr "macaddr8-Daten außerhalb des gültigen Bereichs für Umwandlung in maca msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." msgstr "Nur Adressen, die FF und FE als Werte im 4. und 5. Byte von links haben, zum Beispiel xx:xx:xx:ff:fe:xx:xx:xx, kommen für eine Umwandlung von macaddr8 nach macaddr in Frage." -#: utils/adt/misc.c:239 +#: utils/adt/mcxtfuncs.c:204 +#, fuzzy, c-format +#| msgid "must be superuser to alter a type" +msgid "must be a superuser to log memory contexts" +msgstr "nur Superuser können Typen ändern" + +#: utils/adt/misc.c:243 #, c-format msgid "global tablespace never has databases" msgstr "globaler Tablespace hat niemals Datenbanken" -#: utils/adt/misc.c:261 +#: utils/adt/misc.c:265 #, c-format msgid "%u is not a tablespace OID" msgstr "%u ist keine Tablespace-OID" -#: utils/adt/misc.c:447 +#: utils/adt/misc.c:455 msgid "unreserved" msgstr "unreserviert" -#: utils/adt/misc.c:451 +#: utils/adt/misc.c:459 msgid "unreserved (cannot be function or type name)" msgstr "unreserviert (kann nicht Funktions- oder Typname sein)" -#: utils/adt/misc.c:455 +#: utils/adt/misc.c:463 msgid "reserved (can be function or type name)" msgstr "reserviert (kann Funktions- oder Typname sein)" -#: utils/adt/misc.c:459 +#: utils/adt/misc.c:467 msgid "reserved" msgstr "reserviert" -#: utils/adt/misc.c:633 utils/adt/misc.c:647 utils/adt/misc.c:686 -#: utils/adt/misc.c:692 utils/adt/misc.c:698 utils/adt/misc.c:721 +#: utils/adt/misc.c:478 +msgid "can be bare label" +msgstr "" + +#: utils/adt/misc.c:483 +msgid "requires AS" +msgstr "" + +#: utils/adt/misc.c:730 utils/adt/misc.c:744 utils/adt/misc.c:783 +#: utils/adt/misc.c:789 utils/adt/misc.c:795 utils/adt/misc.c:818 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "Zeichenkette ist kein gültiger Bezeichner: »%s«" -#: utils/adt/misc.c:635 +#: utils/adt/misc.c:732 #, c-format msgid "String has unclosed double quotes." msgstr "Zeichenkette hat nicht geschlossene doppelte Anführungszeichen." -#: utils/adt/misc.c:649 +#: utils/adt/misc.c:746 #, c-format msgid "Quoted identifier must not be empty." msgstr "Bezeichner in Anführungszeichen darf nicht leer sein." -#: utils/adt/misc.c:688 +#: utils/adt/misc.c:785 #, c-format msgid "No valid identifier before \".\"." msgstr "Kein gültiger Bezeichner vor ».«." -#: utils/adt/misc.c:694 +#: utils/adt/misc.c:791 #, c-format msgid "No valid identifier after \".\"." msgstr "Kein gültiger Bezeichner nach ».«." -#: utils/adt/misc.c:755 +#: utils/adt/misc.c:849 #, c-format msgid "log format \"%s\" is not supported" msgstr "Logformat »%s« wird nicht unterstützt" -#: utils/adt/misc.c:756 +#: utils/adt/misc.c:850 #, c-format msgid "The supported log formats are \"stderr\" and \"csvlog\"." msgstr "Die unterstützten Logformate sind »stderr« und »csvlog«." +#: utils/adt/multirangetypes.c:147 utils/adt/multirangetypes.c:160 +#: utils/adt/multirangetypes.c:189 utils/adt/multirangetypes.c:259 +#: utils/adt/multirangetypes.c:283 +#, fuzzy, c-format +#| msgid "malformed range literal: \"%s\"" +msgid "malformed multirange literal: \"%s\"" +msgstr "fehlerhafte Bereichskonstante: »%s«" + +#: utils/adt/multirangetypes.c:149 +#, fuzzy, c-format +#| msgid "Missing left parenthesis." +msgid "Missing left bracket." +msgstr "Linke Klammer fehlt." + +#: utils/adt/multirangetypes.c:191 +#, fuzzy, c-format +#| msgid "unexpected array start" +msgid "Expected range start." +msgstr "unerwarteter Array-Start" + +#: utils/adt/multirangetypes.c:261 +#, fuzzy, c-format +#| msgid "unexpected end of line" +msgid "Expected comma or end of multirange." +msgstr "unerwartetes Ende der Zeile" + +#: utils/adt/multirangetypes.c:285 +#, fuzzy, c-format +#| msgid "Junk after closing right brace." +msgid "Junk after right bracket." +msgstr "Müll nach schließender rechter geschweifter Klammer." + +#: utils/adt/multirangetypes.c:971 +#, fuzzy, c-format +#| msgid "thresholds must be one-dimensional array" +msgid "multiranges cannot be constructed from multi-dimensional arrays" +msgstr "Parameter »thresholds« muss ein eindimensionales Array sein" + +#: utils/adt/multirangetypes.c:977 utils/adt/multirangetypes.c:1042 +#, fuzzy, c-format +#| msgid "type %s is not a composite type" +msgid "type %u does not match constructor type" +msgstr "Typ %s ist kein zusammengesetzter Typ" + +#: utils/adt/multirangetypes.c:999 +#, c-format +msgid "multirange values cannot contain NULL members" +msgstr "" + +#: utils/adt/multirangetypes.c:1349 +#, fuzzy, c-format +#| msgid "%s must be called inside a transaction" +msgid "range_agg must be called with a range" +msgstr "%s muss in einer Transaktion aufgerufen werden" + +#: utils/adt/multirangetypes.c:1420 +#, c-format +msgid "range_intersect_agg must be called with a multirange" +msgstr "" + #: utils/adt/network.c:111 #, c-format msgid "invalid cidr value: \"%s\"" @@ -23267,89 +24167,150 @@ msgstr "Ergebnis ist außerhalb des gültigen Bereichs" msgid "cannot subtract inet values of different sizes" msgstr "Subtraktion von »inet«-Werten unterschiedlicher Größe nicht möglich" -#: utils/adt/numeric.c:827 +#: utils/adt/numeric.c:975 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "ungültiges Vorzeichen in externem »numeric«-Wert" -#: utils/adt/numeric.c:833 +#: utils/adt/numeric.c:981 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "ungültige Skala in externem »numeric«-Wert" -#: utils/adt/numeric.c:842 +#: utils/adt/numeric.c:990 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "ungültige Ziffer in externem »numeric«-Wert" -#: utils/adt/numeric.c:1040 utils/adt/numeric.c:1054 +#: utils/adt/numeric.c:1203 utils/adt/numeric.c:1217 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "Präzision von NUMERIC (%d) muss zwischen 1 und %d liegen" -#: utils/adt/numeric.c:1045 +#: utils/adt/numeric.c:1208 #, c-format msgid "NUMERIC scale %d must be between 0 and precision %d" msgstr "Skala von NUMERIC (%d) muss zwischen 0 und %d liegen" -#: utils/adt/numeric.c:1063 +#: utils/adt/numeric.c:1226 #, c-format msgid "invalid NUMERIC type modifier" msgstr "ungültiker Modifikator für Typ NUMERIC" -#: utils/adt/numeric.c:1395 +#: utils/adt/numeric.c:1584 #, c-format msgid "start value cannot be NaN" msgstr "Startwert kann nicht NaN sein" -#: utils/adt/numeric.c:1400 +#: utils/adt/numeric.c:1588 +#, fuzzy, c-format +#| msgid "start value cannot be NaN" +msgid "start value cannot be infinity" +msgstr "Startwert kann nicht NaN sein" + +#: utils/adt/numeric.c:1595 #, c-format msgid "stop value cannot be NaN" msgstr "Stoppwert kann nicht NaN sein" -#: utils/adt/numeric.c:1410 +#: utils/adt/numeric.c:1599 +#, fuzzy, c-format +#| msgid "stop value cannot be NaN" +msgid "stop value cannot be infinity" +msgstr "Stoppwert kann nicht NaN sein" + +#: utils/adt/numeric.c:1612 #, c-format msgid "step size cannot be NaN" msgstr "Schrittgröße kann nicht NaN sein" -#: utils/adt/numeric.c:2958 utils/adt/numeric.c:6064 utils/adt/numeric.c:6522 -#: utils/adt/numeric.c:8802 utils/adt/numeric.c:9240 utils/adt/numeric.c:9354 -#: utils/adt/numeric.c:9427 +#: utils/adt/numeric.c:1616 +#, fuzzy, c-format +#| msgid "step size cannot be NaN" +msgid "step size cannot be infinity" +msgstr "Schrittgröße kann nicht NaN sein" + +#: utils/adt/numeric.c:3490 +#, fuzzy, c-format +#| msgid "zero raised to a negative power is undefined" +msgid "factorial of a negative number is undefined" +msgstr "null hoch eine negative Zahl ist undefiniert" + +#: utils/adt/numeric.c:3500 utils/adt/numeric.c:6924 utils/adt/numeric.c:7408 +#: utils/adt/numeric.c:9783 utils/adt/numeric.c:10221 utils/adt/numeric.c:10335 +#: utils/adt/numeric.c:10408 #, c-format msgid "value overflows numeric format" msgstr "Wert verursacht Überlauf im »numeric«-Format" -#: utils/adt/numeric.c:3417 +#: utils/adt/numeric.c:4185 #, c-format msgid "cannot convert NaN to integer" msgstr "kann NaN nicht in integer umwandeln" -#: utils/adt/numeric.c:3500 +#: utils/adt/numeric.c:4189 +#, fuzzy, c-format +#| msgid "cannot convert infinity to numeric" +msgid "cannot convert infinity to integer" +msgstr "kann Unendlich nicht in numeric umwandeln" + +#: utils/adt/numeric.c:4263 #, c-format msgid "cannot convert NaN to bigint" msgstr "kann NaN nicht in bigint umwandeln" -#: utils/adt/numeric.c:3545 +#: utils/adt/numeric.c:4267 +#, fuzzy, c-format +#| msgid "cannot convert infinity to numeric" +msgid "cannot convert infinity to bigint" +msgstr "kann Unendlich nicht in numeric umwandeln" + +#: utils/adt/numeric.c:4304 #, c-format msgid "cannot convert NaN to smallint" msgstr "kann NaN nicht in smallint umwandeln" -#: utils/adt/numeric.c:3582 utils/adt/numeric.c:3653 -#, c-format -msgid "cannot convert infinity to numeric" +#: utils/adt/numeric.c:4308 +#, fuzzy, c-format +#| msgid "cannot convert infinity to numeric" +msgid "cannot convert infinity to smallint" +msgstr "kann Unendlich nicht in numeric umwandeln" + +#: utils/adt/numeric.c:4499 +#, fuzzy, c-format +#| msgid "cannot convert NaN to bigint" +msgid "cannot convert NaN to pg_lsn" +msgstr "kann NaN nicht in bigint umwandeln" + +#: utils/adt/numeric.c:4503 +#, fuzzy, c-format +#| msgid "cannot convert infinity to numeric" +msgid "cannot convert infinity to pg_lsn" msgstr "kann Unendlich nicht in numeric umwandeln" -#: utils/adt/numeric.c:6606 +#: utils/adt/numeric.c:4512 +#, fuzzy, c-format +#| msgid "bigint out of range" +msgid "pg_lsn out of range" +msgstr "bigint ist außerhalb des gültigen Bereichs" + +#: utils/adt/numeric.c:7492 utils/adt/numeric.c:7539 #, c-format msgid "numeric field overflow" msgstr "Feldüberlauf bei Typ »numeric«" -#: utils/adt/numeric.c:6607 +#: utils/adt/numeric.c:7493 #, c-format msgid "A field with precision %d, scale %d must round to an absolute value less than %s%d." msgstr "Ein Feld mit Präzision %d, Skala %d muss beim Runden einen Betrag von weniger als %s%d ergeben." -#: utils/adt/numutils.c:152 +#: utils/adt/numeric.c:7540 +#, fuzzy, c-format +#| msgid "A field with precision %d, scale %d must round to an absolute value less than %s%d." +msgid "A field with precision %d, scale %d cannot hold an infinite value." +msgstr "Ein Feld mit Präzision %d, Skala %d muss beim Runden einen Betrag von weniger als %s%d ergeben." + +#: utils/adt/numutils.c:154 #, c-format msgid "value \"%s\" is out of range for 8-bit integer" msgstr "Wert »%s« ist außerhalb des gültigen Bereichs für 8-Bit-Ganzzahl" @@ -23359,22 +24320,22 @@ msgstr "Wert »%s« ist außerhalb des gültigen Bereichs für 8-Bit-Ganzzahl" msgid "invalid oidvector data" msgstr "ungültige oidvector-Daten" -#: utils/adt/oracle_compat.c:895 +#: utils/adt/oracle_compat.c:970 #, c-format msgid "requested character too large" msgstr "verlangtes Zeichen zu groß" -#: utils/adt/oracle_compat.c:945 utils/adt/oracle_compat.c:1007 +#: utils/adt/oracle_compat.c:1020 utils/adt/oracle_compat.c:1082 #, c-format msgid "requested character too large for encoding: %d" msgstr "gewünschtes Zeichen ist zu groß für die Kodierung: %d" -#: utils/adt/oracle_compat.c:986 +#: utils/adt/oracle_compat.c:1061 #, c-format msgid "requested character not valid for encoding: %d" msgstr "gewünschtes Zeichen ist nicht gültig für die Kodierung: %d" -#: utils/adt/oracle_compat.c:1000 +#: utils/adt/oracle_compat.c:1075 #, c-format msgid "null character not permitted" msgstr "Null-Zeichen ist nicht erlaubt" @@ -23385,208 +24346,232 @@ msgstr "Null-Zeichen ist nicht erlaubt" msgid "percentile value %g is not between 0 and 1" msgstr "Perzentilwert %g ist nicht zwischen 0 und 1" -#: utils/adt/pg_locale.c:1092 +#: utils/adt/pg_locale.c:1228 #, c-format msgid "Apply system library package updates." msgstr "Aktualisieren Sie die Systembibliotheken." -#: utils/adt/pg_locale.c:1307 +#: utils/adt/pg_locale.c:1442 #, c-format msgid "could not create locale \"%s\": %m" msgstr "konnte Locale »%s« nicht erzeugen: %m" -#: utils/adt/pg_locale.c:1310 +#: utils/adt/pg_locale.c:1445 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "Das Betriebssystem konnte keine Locale-Daten für den Locale-Namen »%s« finden." -#: utils/adt/pg_locale.c:1412 +#: utils/adt/pg_locale.c:1547 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "Sortierfolgen mit unterschiedlichen »collate«- und »ctype«-Werten werden auf dieser Plattform nicht unterstützt" -#: utils/adt/pg_locale.c:1421 +#: utils/adt/pg_locale.c:1556 #, c-format msgid "collation provider LIBC is not supported on this platform" msgstr "Sortierfolgen-Provider LIBC wird auf dieser Plattform nicht unterstützt" -#: utils/adt/pg_locale.c:1433 +#: utils/adt/pg_locale.c:1568 #, c-format msgid "collations with different collate and ctype values are not supported by ICU" msgstr "Sortierfolgen mit unterschiedlichen »collate«- und »ctype«-Werten werden von ICU nicht unterstützt" -#: utils/adt/pg_locale.c:1439 utils/adt/pg_locale.c:1526 -#: utils/adt/pg_locale.c:1799 +#: utils/adt/pg_locale.c:1574 utils/adt/pg_locale.c:1661 +#: utils/adt/pg_locale.c:1940 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "konnte Collator für Locale »%s« nicht öffnen: %s" -#: utils/adt/pg_locale.c:1453 +#: utils/adt/pg_locale.c:1588 #, c-format msgid "ICU is not supported in this build" msgstr "ICU wird in dieser Installation nicht unterstützt" -#: utils/adt/pg_locale.c:1454 +#: utils/adt/pg_locale.c:1589 #, c-format msgid "You need to rebuild PostgreSQL using --with-icu." msgstr "Sie müssen PostgreSQL mit --with-icu neu bauen." -#: utils/adt/pg_locale.c:1474 -#, c-format +#: utils/adt/pg_locale.c:1609 +#, fuzzy, c-format +#| msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgid "collation \"%s\" has no actual version, but a version was specified" -msgstr "Sortierfolge »%s« hat keine tatsächliche Version, aber eine Version wurde angegeben" +msgstr "Erweiterung »%s« hat keinen Aktualisierungspfad von Version »%s« auf Version »%s«" -#: utils/adt/pg_locale.c:1481 -#, c-format +#: utils/adt/pg_locale.c:1616 +#, fuzzy, c-format +#| msgid "incompatible library \"%s\": version mismatch" msgid "collation \"%s\" has version mismatch" -msgstr "Version von Sortierfolge »%s« stimmt nicht überein" +msgstr "inkompatible Bibliothek »%s«: Version stimmt nicht überein" -#: utils/adt/pg_locale.c:1483 +#: utils/adt/pg_locale.c:1618 #, c-format msgid "The collation in the database was created using version %s, but the operating system provides version %s." -msgstr "Die Sortierfolge in der Datenbank wurde mit Version %s erzeugt, aber das Betriebssystem hat Version %s." +msgstr "" -#: utils/adt/pg_locale.c:1486 +#: utils/adt/pg_locale.c:1621 #, c-format msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." -msgstr "Bauen Sie alle von dieser Sortierfolge beinflussten Objekte neu und führen Sie ALTER COLLATION %s REFRESH VERSION aus, oder bauen Sie PostgreSQL mit der richtigen Bibliotheksversion." +msgstr "" -#: utils/adt/pg_locale.c:1577 +#: utils/adt/pg_locale.c:1692 #, fuzzy, c-format -#| msgid "could not start process for command \"%s\": error code %lu" +#| msgid "could not create locale \"%s\": %m" +msgid "could not load locale \"%s\"" +msgstr "konnte Locale »%s« nicht erzeugen: %m" + +#: utils/adt/pg_locale.c:1717 +#, c-format msgid "could not get collation version for locale \"%s\": error code %lu" -msgstr "konnte Prozess für Befehl »%s« nicht starten: Fehlercode %lu" +msgstr "konnte Sortierfolgenversion für Locale »%s« nicht ermitteln: Fehlercode %lu" -#: utils/adt/pg_locale.c:1614 +#: utils/adt/pg_locale.c:1755 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "Kodierung »%s« wird von ICU nicht unterstützt" -#: utils/adt/pg_locale.c:1621 +#: utils/adt/pg_locale.c:1762 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "konnte ICU-Konverter für Kodierung »%s« nicht öffnen: %s" -#: utils/adt/pg_locale.c:1652 utils/adt/pg_locale.c:1661 -#: utils/adt/pg_locale.c:1690 utils/adt/pg_locale.c:1700 +#: utils/adt/pg_locale.c:1793 utils/adt/pg_locale.c:1802 +#: utils/adt/pg_locale.c:1831 utils/adt/pg_locale.c:1841 #, c-format msgid "%s failed: %s" msgstr "%s fehlgeschlagen: %s" -#: utils/adt/pg_locale.c:1972 +#: utils/adt/pg_locale.c:2113 #, c-format msgid "invalid multibyte character for locale" msgstr "ungültiges Mehrbytezeichen für Locale" -#: utils/adt/pg_locale.c:1973 +#: utils/adt/pg_locale.c:2114 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "Die LC_CTYPE-Locale des Servers ist wahrscheinlich mit der Kodierung der Datenbank inkompatibel." +#: utils/adt/pg_lsn.c:263 +#, fuzzy, c-format +#| msgid "cannot convert NaN to bigint" +msgid "cannot add NaN to pg_lsn" +msgstr "kann NaN nicht in bigint umwandeln" + +#: utils/adt/pg_lsn.c:297 +#, fuzzy, c-format +#| msgid "cannot subtract infinite dates" +msgid "cannot subtract NaN from pg_lsn" +msgstr "kann unendliche date-Werte nicht subtrahieren" + #: utils/adt/pg_upgrade_support.c:29 #, c-format msgid "function can only be called when server is in binary upgrade mode" msgstr "Funktion kann nur aufgerufen werden, wenn der Server im Binary-Upgrade-Modus ist" -#: utils/adt/pgstatfuncs.c:500 +#: utils/adt/pgstatfuncs.c:503 #, c-format msgid "invalid command name: \"%s\"" msgstr "ungültiger Befehlsname: »%s«" -#: utils/adt/pseudotypes.c:57 utils/adt/pseudotypes.c:91 +#: utils/adt/pseudotypes.c:58 utils/adt/pseudotypes.c:92 #, c-format msgid "cannot display a value of type %s" msgstr "kann keinen Wert vom Typ %s anzeigen" -#: utils/adt/pseudotypes.c:283 +#: utils/adt/pseudotypes.c:321 #, c-format msgid "cannot accept a value of a shell type" msgstr "kann keinen Wert eines Hüllentyps annehmen" -#: utils/adt/pseudotypes.c:293 +#: utils/adt/pseudotypes.c:331 #, c-format msgid "cannot display a value of a shell type" msgstr "kann keinen Wert eines Hüllentyps anzeigen" -#: utils/adt/rangetypes.c:406 +#: utils/adt/rangetypes.c:404 #, c-format msgid "range constructor flags argument must not be null" msgstr "Flags-Argument des Bereichstyp-Konstruktors darf nicht NULL sein" -#: utils/adt/rangetypes.c:993 +#: utils/adt/rangetypes.c:1003 #, c-format msgid "result of range difference would not be contiguous" msgstr "Ergebnis von Bereichsdifferenz würde nicht zusammenhängend sein" -#: utils/adt/rangetypes.c:1054 +#: utils/adt/rangetypes.c:1064 #, c-format msgid "result of range union would not be contiguous" msgstr "Ergebnis von Bereichsvereinigung würde nicht zusammenhängend sein" -#: utils/adt/rangetypes.c:1600 +#: utils/adt/rangetypes.c:1214 +#, c-format +msgid "range_intersect_agg must be called with a range" +msgstr "" + +#: utils/adt/rangetypes.c:1689 #, c-format msgid "range lower bound must be less than or equal to range upper bound" msgstr "Bereichsuntergrenze muss kleiner als oder gleich der Bereichsobergrenze sein" -#: utils/adt/rangetypes.c:1983 utils/adt/rangetypes.c:1996 -#: utils/adt/rangetypes.c:2010 +#: utils/adt/rangetypes.c:2112 utils/adt/rangetypes.c:2125 +#: utils/adt/rangetypes.c:2139 #, c-format msgid "invalid range bound flags" msgstr "ungültige Markierungen für Bereichsgrenzen" -#: utils/adt/rangetypes.c:1984 utils/adt/rangetypes.c:1997 -#: utils/adt/rangetypes.c:2011 +#: utils/adt/rangetypes.c:2113 utils/adt/rangetypes.c:2126 +#: utils/adt/rangetypes.c:2140 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "Gültige Werte sind »[]«, »[)«, »(]« und »()«." -#: utils/adt/rangetypes.c:2076 utils/adt/rangetypes.c:2093 -#: utils/adt/rangetypes.c:2106 utils/adt/rangetypes.c:2124 -#: utils/adt/rangetypes.c:2135 utils/adt/rangetypes.c:2179 -#: utils/adt/rangetypes.c:2187 +#: utils/adt/rangetypes.c:2205 utils/adt/rangetypes.c:2222 +#: utils/adt/rangetypes.c:2235 utils/adt/rangetypes.c:2253 +#: utils/adt/rangetypes.c:2264 utils/adt/rangetypes.c:2308 +#: utils/adt/rangetypes.c:2316 #, c-format msgid "malformed range literal: \"%s\"" msgstr "fehlerhafte Bereichskonstante: »%s«" -#: utils/adt/rangetypes.c:2078 +#: utils/adt/rangetypes.c:2207 #, c-format msgid "Junk after \"empty\" key word." msgstr "Müll nach Schlüsselwort »empty«." -#: utils/adt/rangetypes.c:2095 +#: utils/adt/rangetypes.c:2224 #, c-format msgid "Missing left parenthesis or bracket." msgstr "Linke runde oder eckige Klammer fehlt." -#: utils/adt/rangetypes.c:2108 +#: utils/adt/rangetypes.c:2237 #, c-format msgid "Missing comma after lower bound." msgstr "Komma fehlt nach Untergrenze." -#: utils/adt/rangetypes.c:2126 +#: utils/adt/rangetypes.c:2255 #, c-format msgid "Too many commas." msgstr "Zu viele Kommas." -#: utils/adt/rangetypes.c:2137 +#: utils/adt/rangetypes.c:2266 #, c-format msgid "Junk after right parenthesis or bracket." msgstr "Müll nach rechter runder oder eckiger Klammer." -#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4493 +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4560 #, c-format msgid "regular expression failed: %s" msgstr "regulärer Ausdruck fehlgeschlagen: %s" #: utils/adt/regexp.c:426 #, c-format -msgid "invalid regular expression option: \"%c\"" -msgstr "ungültige Option für regulären Ausdruck: »%c«" +msgid "invalid regular expression option: \"%.*s\"" +msgstr "ungültige Option für regulären Ausdruck: »%.*s«" #: utils/adt/regexp.c:836 #, c-format msgid "SQL regular expression may not contain more than two escape-double-quote separators" -msgstr "" +msgstr "SQL regulärer Ausdruck darf nicht mehr als zwei Escape-Double-Quote-Separatoren enthalten" #. translator: %s is a SQL function name #: utils/adt/regexp.c:981 utils/adt/regexp.c:1363 utils/adt/regexp.c:1418 @@ -23604,313 +24589,310 @@ msgstr "Verwenden Sie stattdessen die Funktion regexp_matches." msgid "too many regular expression matches" msgstr "zu viele Treffer für regulären Ausdruck" -#: utils/adt/regproc.c:107 +#: utils/adt/regproc.c:105 #, c-format msgid "more than one function named \"%s\"" msgstr "es gibt mehrere Funktionen namens »%s«" -#: utils/adt/regproc.c:525 +#: utils/adt/regproc.c:542 #, c-format msgid "more than one operator named %s" msgstr "es gibt mehrere Operatoren namens %s" -#: utils/adt/regproc.c:697 utils/adt/regproc.c:738 utils/adt/regproc.c:2017 -#: utils/adt/ruleutils.c:9299 utils/adt/ruleutils.c:9468 +#: utils/adt/regproc.c:714 utils/adt/regproc.c:755 utils/adt/regproc.c:2054 +#: utils/adt/ruleutils.c:9641 utils/adt/ruleutils.c:9810 #, c-format msgid "too many arguments" msgstr "zu viele Argumente" -#: utils/adt/regproc.c:698 utils/adt/regproc.c:739 +#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 #, c-format msgid "Provide two argument types for operator." msgstr "Geben Sie zwei Argumente für den Operator an." -#: utils/adt/regproc.c:1601 utils/adt/regproc.c:1625 utils/adt/regproc.c:1726 -#: utils/adt/regproc.c:1750 utils/adt/regproc.c:1852 utils/adt/regproc.c:1857 -#: utils/adt/varlena.c:3642 utils/adt/varlena.c:3647 +#: utils/adt/regproc.c:1638 utils/adt/regproc.c:1662 utils/adt/regproc.c:1763 +#: utils/adt/regproc.c:1787 utils/adt/regproc.c:1889 utils/adt/regproc.c:1894 +#: utils/adt/varlena.c:3709 utils/adt/varlena.c:3714 #, c-format msgid "invalid name syntax" msgstr "ungültige Namenssyntax" -#: utils/adt/regproc.c:1915 +#: utils/adt/regproc.c:1952 #, c-format msgid "expected a left parenthesis" msgstr "linke Klammer erwartet" -#: utils/adt/regproc.c:1931 +#: utils/adt/regproc.c:1968 #, c-format msgid "expected a right parenthesis" msgstr "rechte Klammer erwartet" -#: utils/adt/regproc.c:1950 +#: utils/adt/regproc.c:1987 #, c-format msgid "expected a type name" msgstr "Typname erwartet" -#: utils/adt/regproc.c:1982 +#: utils/adt/regproc.c:2019 #, c-format msgid "improper type name" msgstr "falscher Typname" -#: utils/adt/ri_triggers.c:296 utils/adt/ri_triggers.c:1532 -#: utils/adt/ri_triggers.c:2460 +#: utils/adt/ri_triggers.c:300 utils/adt/ri_triggers.c:1545 +#: utils/adt/ri_triggers.c:2530 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "Einfügen oder Aktualisieren in Tabelle »%s« verletzt Fremdschlüssel-Constraint »%s«" -#: utils/adt/ri_triggers.c:299 utils/adt/ri_triggers.c:1535 +#: utils/adt/ri_triggers.c:303 utils/adt/ri_triggers.c:1548 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL erlaubt das Mischen von Schlüsseln, die NULL und nicht NULL sind, nicht." -#: utils/adt/ri_triggers.c:1930 +#: utils/adt/ri_triggers.c:1965 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "Funktion »%s« muss von INSERT ausgelöst werden" -#: utils/adt/ri_triggers.c:1936 +#: utils/adt/ri_triggers.c:1971 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "Funktion »%s« muss von UPDATE ausgelöst werden" -#: utils/adt/ri_triggers.c:1942 +#: utils/adt/ri_triggers.c:1977 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "Funktion »%s« muss von DELETE ausgelöst werden" -#: utils/adt/ri_triggers.c:1965 +#: utils/adt/ri_triggers.c:2000 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "kein »pg_constraint«-Eintrag für Trigger »%s« für Tabelle »%s«" -#: utils/adt/ri_triggers.c:1967 +#: utils/adt/ri_triggers.c:2002 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "Entfernen Sie diesen Referentielle-Integritäts-Trigger und seine Partner und führen Sie dann ALTER TABLE ADD CONSTRAINT aus." -#: utils/adt/ri_triggers.c:2285 +#: utils/adt/ri_triggers.c:2355 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "RI-Anfrage in Tabelle »%s« für Constraint »%s« von Tabelle »%s« ergab unerwartetes Ergebnis" -#: utils/adt/ri_triggers.c:2289 +#: utils/adt/ri_triggers.c:2359 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Das liegt höchstwahrscheinlich daran, dass eine Regel die Anfrage umgeschrieben hat." -#: utils/adt/ri_triggers.c:2450 -#, fuzzy, c-format -#| msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" +#: utils/adt/ri_triggers.c:2520 +#, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" -msgstr "Einfügen oder Aktualisieren in Tabelle »%s« verletzt Fremdschlüssel-Constraint »%s«" +msgstr "Entfernen der Partition »%s« verletzt Fremdschlüssel-Constraint »%s«" -#: utils/adt/ri_triggers.c:2453 utils/adt/ri_triggers.c:2478 +#: utils/adt/ri_triggers.c:2523 utils/adt/ri_triggers.c:2548 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "Auf Schlüssel (%s)=(%s) wird noch aus Tabelle »%s« verwiesen." -#: utils/adt/ri_triggers.c:2464 +#: utils/adt/ri_triggers.c:2534 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "Schlüssel (%s)=(%s) ist nicht in Tabelle »%s« vorhanden." -#: utils/adt/ri_triggers.c:2467 +#: utils/adt/ri_triggers.c:2537 #, c-format msgid "Key is not present in table \"%s\"." msgstr "Der Schlüssel ist nicht in Tabelle »%s« vorhanden." -#: utils/adt/ri_triggers.c:2473 +#: utils/adt/ri_triggers.c:2543 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "Aktualisieren oder Löschen in Tabelle »%s« verletzt Fremdschlüssel-Constraint »%s« von Tabelle »%s«" -#: utils/adt/ri_triggers.c:2481 +#: utils/adt/ri_triggers.c:2551 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "Auf den Schlüssel wird noch aus Tabelle »%s« verwiesen." -#: utils/adt/rowtypes.c:104 utils/adt/rowtypes.c:482 +#: utils/adt/rowtypes.c:105 utils/adt/rowtypes.c:483 #, c-format msgid "input of anonymous composite types is not implemented" msgstr "Eingabe anonymer zusammengesetzter Typen ist nicht implementiert" -#: utils/adt/rowtypes.c:156 utils/adt/rowtypes.c:185 utils/adt/rowtypes.c:208 -#: utils/adt/rowtypes.c:216 utils/adt/rowtypes.c:268 utils/adt/rowtypes.c:276 +#: utils/adt/rowtypes.c:157 utils/adt/rowtypes.c:186 utils/adt/rowtypes.c:209 +#: utils/adt/rowtypes.c:217 utils/adt/rowtypes.c:269 utils/adt/rowtypes.c:277 #, c-format msgid "malformed record literal: \"%s\"" msgstr "fehlerhafte Record-Konstante: »%s«" -#: utils/adt/rowtypes.c:157 +#: utils/adt/rowtypes.c:158 #, c-format msgid "Missing left parenthesis." msgstr "Linke Klammer fehlt." -#: utils/adt/rowtypes.c:186 +#: utils/adt/rowtypes.c:187 #, c-format msgid "Too few columns." msgstr "Zu wenige Spalten." -#: utils/adt/rowtypes.c:269 +#: utils/adt/rowtypes.c:270 #, c-format msgid "Too many columns." msgstr "Zu viele Spalten." -#: utils/adt/rowtypes.c:277 +#: utils/adt/rowtypes.c:278 #, c-format msgid "Junk after right parenthesis." msgstr "Müll nach rechter Klammer." -#: utils/adt/rowtypes.c:531 +#: utils/adt/rowtypes.c:532 #, c-format msgid "wrong number of columns: %d, expected %d" msgstr "falsche Anzahl der Spalten: %d, erwartet wurden %d" -#: utils/adt/rowtypes.c:559 +#: utils/adt/rowtypes.c:574 #, c-format -msgid "wrong data type: %u, expected %u" -msgstr "falscher Datentyp: %u, erwartet wurde %u" +msgid "binary data has type %u (%s) instead of expected %u (%s) in record column %d" +msgstr "" -#: utils/adt/rowtypes.c:620 +#: utils/adt/rowtypes.c:641 #, c-format msgid "improper binary format in record column %d" msgstr "falsches Binärformat in Record-Spalte %d" -#: utils/adt/rowtypes.c:911 utils/adt/rowtypes.c:1157 utils/adt/rowtypes.c:1415 -#: utils/adt/rowtypes.c:1661 +#: utils/adt/rowtypes.c:932 utils/adt/rowtypes.c:1178 utils/adt/rowtypes.c:1436 +#: utils/adt/rowtypes.c:1682 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "kann unterschiedliche Spaltentyp %s und %s in Record-Spalte %d nicht vergleichen" -#: utils/adt/rowtypes.c:1002 utils/adt/rowtypes.c:1227 -#: utils/adt/rowtypes.c:1512 utils/adt/rowtypes.c:1697 +#: utils/adt/rowtypes.c:1023 utils/adt/rowtypes.c:1248 +#: utils/adt/rowtypes.c:1533 utils/adt/rowtypes.c:1718 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "kann Record-Typen mit unterschiedlicher Anzahl Spalten nicht vergleichen" -#: utils/adt/ruleutils.c:4821 +#: utils/adt/ruleutils.c:5068 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "Regel »%s« hat nicht unterstützten Ereignistyp %d" -#: utils/adt/timestamp.c:106 +#: utils/adt/timestamp.c:109 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "Präzision von TIMESTAMP(%d)%s darf nicht negativ sein" -#: utils/adt/timestamp.c:112 +#: utils/adt/timestamp.c:115 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "Präzision von TIMESTAMP(%d)%s auf erlaubten Höchstwert %d reduziert" -#: utils/adt/timestamp.c:175 utils/adt/timestamp.c:433 utils/misc/guc.c:11911 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12458 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp ist außerhalb des gültigen Bereichs: »%s«" -#: utils/adt/timestamp.c:371 +#: utils/adt/timestamp.c:374 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "Präzision von timestamp(%d) muss zwischen %d und %d sein" -#: utils/adt/timestamp.c:495 +#: utils/adt/timestamp.c:498 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "Numerische Zeitzonen müssen »-« oder »+« als erstes Zeichen haben." -#: utils/adt/timestamp.c:508 +#: utils/adt/timestamp.c:511 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "numerische Zeitzone »%s« ist außerhalb des gültigen Bereichs" -#: utils/adt/timestamp.c:610 utils/adt/timestamp.c:620 -#: utils/adt/timestamp.c:628 +#: utils/adt/timestamp.c:607 utils/adt/timestamp.c:617 +#: utils/adt/timestamp.c:625 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestamp ist außerhalb des gültigen Bereichs: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:729 +#: utils/adt/timestamp.c:726 #, c-format msgid "timestamp cannot be NaN" msgstr "timestamp kann nicht NaN sein" -#: utils/adt/timestamp.c:747 utils/adt/timestamp.c:759 +#: utils/adt/timestamp.c:744 utils/adt/timestamp.c:756 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "timestamp ist außerhalb des gültigen Bereichs: »%g«" -#: utils/adt/timestamp.c:944 utils/adt/timestamp.c:1518 -#: utils/adt/timestamp.c:1951 utils/adt/timestamp.c:3049 -#: utils/adt/timestamp.c:3054 utils/adt/timestamp.c:3059 -#: utils/adt/timestamp.c:3109 utils/adt/timestamp.c:3116 -#: utils/adt/timestamp.c:3123 utils/adt/timestamp.c:3143 -#: utils/adt/timestamp.c:3150 utils/adt/timestamp.c:3157 -#: utils/adt/timestamp.c:3187 utils/adt/timestamp.c:3195 -#: utils/adt/timestamp.c:3239 utils/adt/timestamp.c:3666 -#: utils/adt/timestamp.c:3791 utils/adt/timestamp.c:4251 -#, c-format -msgid "interval out of range" -msgstr "interval-Wert ist außerhalb des gültigen Bereichs" - -#: utils/adt/timestamp.c:1071 utils/adt/timestamp.c:1104 +#: utils/adt/timestamp.c:1068 utils/adt/timestamp.c:1101 #, c-format msgid "invalid INTERVAL type modifier" msgstr "ungültiger Modifikator für Typ INTERVAL" -#: utils/adt/timestamp.c:1087 +#: utils/adt/timestamp.c:1084 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "INTERVAL(%d)-Präzision darf nicht negativ sein" -#: utils/adt/timestamp.c:1093 +#: utils/adt/timestamp.c:1090 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "INTERVAL(%d)-Präzision auf erlaubtes Maximum %d reduziert" -#: utils/adt/timestamp.c:1475 +#: utils/adt/timestamp.c:1472 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "Präzision von interval(%d) muss zwischen %d und %d sein" -#: utils/adt/timestamp.c:2650 +#: utils/adt/timestamp.c:2660 #, c-format msgid "cannot subtract infinite timestamps" msgstr "kann unendliche timestamp-Werte nicht subtrahieren" -#: utils/adt/timestamp.c:3919 utils/adt/timestamp.c:4512 -#: utils/adt/timestamp.c:4674 utils/adt/timestamp.c:4695 +#: utils/adt/timestamp.c:3837 utils/adt/timestamp.c:4015 +#, fuzzy, c-format +#| msgid "bigint out of range" +msgid "origin out of range" +msgstr "bigint ist außerhalb des gültigen Bereichs" + +#: utils/adt/timestamp.c:3842 utils/adt/timestamp.c:4020 +#, c-format +msgid "timestamps cannot be binned into intervals containing months or years" +msgstr "" + +#: utils/adt/timestamp.c:3973 utils/adt/timestamp.c:4610 +#: utils/adt/timestamp.c:4810 utils/adt/timestamp.c:4857 #, c-format msgid "timestamp units \"%s\" not supported" msgstr "»timestamp«-Einheit »%s« nicht unterstützt" -#: utils/adt/timestamp.c:3933 utils/adt/timestamp.c:4466 -#: utils/adt/timestamp.c:4705 +#: utils/adt/timestamp.c:3987 utils/adt/timestamp.c:4564 +#: utils/adt/timestamp.c:4867 #, c-format msgid "timestamp units \"%s\" not recognized" msgstr "»timestamp«-Einheit »%s« nicht erkannt" -#: utils/adt/timestamp.c:4063 utils/adt/timestamp.c:4507 -#: utils/adt/timestamp.c:4870 utils/adt/timestamp.c:4892 +#: utils/adt/timestamp.c:4161 utils/adt/timestamp.c:4605 +#: utils/adt/timestamp.c:5081 utils/adt/timestamp.c:5129 #, c-format msgid "timestamp with time zone units \"%s\" not supported" msgstr "»timestamp with time zone«-Einheit »%s« nicht unterstützt" -#: utils/adt/timestamp.c:4080 utils/adt/timestamp.c:4461 -#: utils/adt/timestamp.c:4901 +#: utils/adt/timestamp.c:4178 utils/adt/timestamp.c:4559 +#: utils/adt/timestamp.c:5138 #, c-format msgid "timestamp with time zone units \"%s\" not recognized" msgstr "»timestamp with time zone«-Einheit »%s« nicht erkannt" -#: utils/adt/timestamp.c:4238 +#: utils/adt/timestamp.c:4336 #, c-format msgid "interval units \"%s\" not supported because months usually have fractional weeks" msgstr "»interval«-Einheit »%s« wird nicht unterstützt, weil Monate gewöhnlich partielle Wochen haben" -#: utils/adt/timestamp.c:4244 utils/adt/timestamp.c:4995 +#: utils/adt/timestamp.c:4342 utils/adt/timestamp.c:5261 #, c-format msgid "interval units \"%s\" not supported" msgstr "»interval«-Einheit »%s« nicht unterstützt" -#: utils/adt/timestamp.c:4260 utils/adt/timestamp.c:5018 +#: utils/adt/timestamp.c:4358 utils/adt/timestamp.c:5322 #, c-format msgid "interval units \"%s\" not recognized" msgstr "»interval«-Einheit »%s« nicht erkannt" @@ -23940,43 +24922,43 @@ msgstr "suppress_redundant_updates_trigger: muss für jede Zeile aufgerufen werd msgid "gtsvector_in not implemented" msgstr "gtsvector_in ist nicht implementiert" -#: utils/adt/tsquery.c:200 +#: utils/adt/tsquery.c:199 #, c-format msgid "distance in phrase operator should not be greater than %d" msgstr "Abstand im Phrasenoperator sollte nicht größer als %d sein" -#: utils/adt/tsquery.c:310 utils/adt/tsquery.c:725 +#: utils/adt/tsquery.c:306 utils/adt/tsquery.c:691 #: utils/adt/tsvector_parser.c:133 #, c-format msgid "syntax error in tsquery: \"%s\"" msgstr "Syntaxfehler in tsquery: »%s«" -#: utils/adt/tsquery.c:334 +#: utils/adt/tsquery.c:330 #, c-format msgid "no operand in tsquery: \"%s\"" msgstr "kein Operand in tsquery: »%s«" -#: utils/adt/tsquery.c:568 +#: utils/adt/tsquery.c:534 #, c-format msgid "value is too big in tsquery: \"%s\"" msgstr "Wert ist zu groß in tsquery: »%s«" -#: utils/adt/tsquery.c:573 +#: utils/adt/tsquery.c:539 #, c-format msgid "operand is too long in tsquery: \"%s\"" msgstr "Operator ist zu lang in tsquery: »%s«" -#: utils/adt/tsquery.c:601 +#: utils/adt/tsquery.c:567 #, c-format msgid "word is too long in tsquery: \"%s\"" msgstr "Wort ist zu lang in tsquery: »%s«" -#: utils/adt/tsquery.c:870 +#: utils/adt/tsquery.c:835 #, c-format msgid "text-search query doesn't contain lexemes: \"%s\"" msgstr "Textsucheanfrage enthält keine Lexeme: »%s«" -#: utils/adt/tsquery.c:881 utils/adt/tsquery_util.c:375 +#: utils/adt/tsquery.c:846 utils/adt/tsquery_util.c:375 #, c-format msgid "tsquery is too large" msgstr "tsquery ist zu groß" @@ -24011,7 +24993,7 @@ msgstr "Gewichtungs-Array ist zu kurz" msgid "array of weight must not contain nulls" msgstr "Gewichtungs-Array darf keine NULL-Werte enthalten" -#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:868 +#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:871 #, c-format msgid "weight out of range" msgstr "Gewichtung ist außerhalb des gültigen Bereichs" @@ -24026,58 +25008,58 @@ msgstr "Wort ist zu lang (%ld Bytes, maximal %ld Bytes)" msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "Zeichenkette ist zu lang für tsvector (%ld Bytes, maximal %ld Bytes)" -#: utils/adt/tsvector_op.c:323 utils/adt/tsvector_op.c:603 -#: utils/adt/tsvector_op.c:765 +#: utils/adt/tsvector_op.c:328 utils/adt/tsvector_op.c:608 +#: utils/adt/tsvector_op.c:770 #, c-format msgid "lexeme array may not contain nulls" msgstr "Lexem-Array darf keine NULL-Werte enthalten" -#: utils/adt/tsvector_op.c:835 +#: utils/adt/tsvector_op.c:840 #, c-format msgid "weight array may not contain nulls" msgstr "Gewichtungs-Array darf keine NULL-Werte enthalten" -#: utils/adt/tsvector_op.c:859 +#: utils/adt/tsvector_op.c:864 #, c-format msgid "unrecognized weight: \"%c\"" msgstr "unbekannte Gewichtung: »%c«" -#: utils/adt/tsvector_op.c:2265 +#: utils/adt/tsvector_op.c:2426 #, c-format msgid "ts_stat query must return one tsvector column" msgstr "ts_stat-Anfrage muss eine tsvector-Spalte zurückgeben" -#: utils/adt/tsvector_op.c:2454 +#: utils/adt/tsvector_op.c:2615 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "tsvector-Spalte »%s« existiert nicht" -#: utils/adt/tsvector_op.c:2461 +#: utils/adt/tsvector_op.c:2622 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "Spalte »%s« hat nicht Typ tsvector" -#: utils/adt/tsvector_op.c:2473 +#: utils/adt/tsvector_op.c:2634 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "Konfigurationsspalte »%s« existiert nicht" -#: utils/adt/tsvector_op.c:2479 +#: utils/adt/tsvector_op.c:2640 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "Spalte »%s« hat nicht Typ regconfig" -#: utils/adt/tsvector_op.c:2486 +#: utils/adt/tsvector_op.c:2647 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "Konfigurationsspalte »%s« darf nicht NULL sein" -#: utils/adt/tsvector_op.c:2499 +#: utils/adt/tsvector_op.c:2660 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "Textsuchekonfigurationsname »%s« muss Schemaqualifikation haben" -#: utils/adt/tsvector_op.c:2524 +#: utils/adt/tsvector_op.c:2685 #, c-format msgid "column \"%s\" is not of a character type" msgstr "Spalte »%s« hat keinen Zeichentyp" @@ -24098,79 +25080,78 @@ msgid "wrong position info in tsvector: \"%s\"" msgstr "falsche Positionsinformationen in tsvector: »%s«" #: utils/adt/uuid.c:428 -#, fuzzy, c-format -#| msgid "could not generate random salt" +#, c-format msgid "could not generate random values" -msgstr "konnte zufälliges Salt nicht erzeugen" +msgstr "konnte keine Zufallswerte erzeugen" -#: utils/adt/varbit.c:109 utils/adt/varchar.c:53 +#: utils/adt/varbit.c:110 utils/adt/varchar.c:53 #, c-format msgid "length for type %s must be at least 1" msgstr "Länge von Typ %s muss mindestens 1 sein" -#: utils/adt/varbit.c:114 utils/adt/varchar.c:57 +#: utils/adt/varbit.c:115 utils/adt/varchar.c:57 #, c-format msgid "length for type %s cannot exceed %d" msgstr "Länge von Typ %s kann %d nicht überschreiten" -#: utils/adt/varbit.c:197 utils/adt/varbit.c:498 utils/adt/varbit.c:993 +#: utils/adt/varbit.c:198 utils/adt/varbit.c:499 utils/adt/varbit.c:994 #, c-format msgid "bit string length exceeds the maximum allowed (%d)" msgstr "Länge der Bitkette überschreitet erlaubtes Maximum (%d)" -#: utils/adt/varbit.c:211 utils/adt/varbit.c:355 utils/adt/varbit.c:405 +#: utils/adt/varbit.c:212 utils/adt/varbit.c:356 utils/adt/varbit.c:406 #, c-format msgid "bit string length %d does not match type bit(%d)" msgstr "Länge der Bitkette %d stimmt nicht mit Typ bit(%d) überein" -#: utils/adt/varbit.c:233 utils/adt/varbit.c:534 +#: utils/adt/varbit.c:234 utils/adt/varbit.c:535 #, c-format -msgid "\"%c\" is not a valid binary digit" -msgstr "»%c« ist keine gültige Binärziffer" +msgid "\"%.*s\" is not a valid binary digit" +msgstr "»%.*s« ist keine gültige Binärziffer" -#: utils/adt/varbit.c:258 utils/adt/varbit.c:559 +#: utils/adt/varbit.c:259 utils/adt/varbit.c:560 #, c-format -msgid "\"%c\" is not a valid hexadecimal digit" -msgstr "»%c« ist keine gültige Hexadezimalziffer" +msgid "\"%.*s\" is not a valid hexadecimal digit" +msgstr "»%.*s« ist keine gültige Hexadezimalziffer" -#: utils/adt/varbit.c:346 utils/adt/varbit.c:651 +#: utils/adt/varbit.c:347 utils/adt/varbit.c:652 #, c-format msgid "invalid length in external bit string" msgstr "ungültige Länge in externer Bitkette" -#: utils/adt/varbit.c:512 utils/adt/varbit.c:660 utils/adt/varbit.c:756 +#: utils/adt/varbit.c:513 utils/adt/varbit.c:661 utils/adt/varbit.c:757 #, c-format msgid "bit string too long for type bit varying(%d)" msgstr "Bitkette ist zu lang für Typ bit varying(%d)" -#: utils/adt/varbit.c:1086 utils/adt/varbit.c:1184 utils/adt/varlena.c:875 -#: utils/adt/varlena.c:939 utils/adt/varlena.c:1083 utils/adt/varlena.c:3306 -#: utils/adt/varlena.c:3373 +#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:897 +#: utils/adt/varlena.c:960 utils/adt/varlena.c:1117 utils/adt/varlena.c:3351 +#: utils/adt/varlena.c:3429 #, c-format msgid "negative substring length not allowed" msgstr "negative Teilzeichenkettenlänge nicht erlaubt" -#: utils/adt/varbit.c:1241 +#: utils/adt/varbit.c:1261 #, c-format msgid "cannot AND bit strings of different sizes" msgstr "binäres »Und« nicht mit Bitketten unterschiedlicher Länge möglich" -#: utils/adt/varbit.c:1282 +#: utils/adt/varbit.c:1302 #, c-format msgid "cannot OR bit strings of different sizes" msgstr "binäres »Oder« nicht mit Bitketten unterschiedlicher Länge möglich" -#: utils/adt/varbit.c:1322 +#: utils/adt/varbit.c:1342 #, c-format msgid "cannot XOR bit strings of different sizes" msgstr "binäres »Exklusiv-Oder« nicht mit Bitketten unterschiedlicher Länge möglich" -#: utils/adt/varbit.c:1804 utils/adt/varbit.c:1862 +#: utils/adt/varbit.c:1824 utils/adt/varbit.c:1882 #, c-format msgid "bit index %d out of valid range (0..%d)" msgstr "Bitindex %d ist außerhalb des gültigen Bereichs (0..%d)" -#: utils/adt/varbit.c:1813 utils/adt/varlena.c:3566 +#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3633 #, c-format msgid "new bit must be 0 or 1" msgstr "neues Bit muss 0 oder 1 sein" @@ -24185,103 +25166,112 @@ msgstr "Wert zu lang für Typ character(%d)" msgid "value too long for type character varying(%d)" msgstr "Wert zu lang für Typ character varying(%d)" -#: utils/adt/varchar.c:732 utils/adt/varlena.c:1475 +#: utils/adt/varchar.c:732 utils/adt/varlena.c:1523 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "konnte die für den Zeichenkettenvergleich zu verwendende Sortierfolge nicht bestimmen" -#: utils/adt/varlena.c:1182 utils/adt/varlena.c:1915 -#, fuzzy, c-format -#| msgid "could not determine which collation to use for string comparison" +#: utils/adt/varlena.c:1216 utils/adt/varlena.c:1963 +#, c-format msgid "nondeterministic collations are not supported for substring searches" -msgstr "konnte die für den Zeichenkettenvergleich zu verwendende Sortierfolge nicht bestimmen" +msgstr "nichtdeterministische Sortierfolgen werden für Teilzeichenkettensuchen nicht unterstützt" -#: utils/adt/varlena.c:1574 utils/adt/varlena.c:1587 +#: utils/adt/varlena.c:1622 utils/adt/varlena.c:1635 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "konnte Zeichenkette nicht in UTF-16 umwandeln: Fehlercode %lu" -#: utils/adt/varlena.c:1602 +#: utils/adt/varlena.c:1650 #, c-format msgid "could not compare Unicode strings: %m" msgstr "konnte Unicode-Zeichenketten nicht vergleichen: %m" -#: utils/adt/varlena.c:1653 utils/adt/varlena.c:2367 +#: utils/adt/varlena.c:1701 utils/adt/varlena.c:2415 #, c-format msgid "collation failed: %s" msgstr "Vergleichung fehlgeschlagen: %s" -#: utils/adt/varlena.c:2575 +#: utils/adt/varlena.c:2623 #, c-format msgid "sort key generation failed: %s" msgstr "Sortierschlüsselerzeugung fehlgeschlagen: %s" -#: utils/adt/varlena.c:3450 utils/adt/varlena.c:3517 +#: utils/adt/varlena.c:3517 utils/adt/varlena.c:3584 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "Index %d ist außerhalb des gültigen Bereichs, 0..%d" -#: utils/adt/varlena.c:3481 utils/adt/varlena.c:3553 -#, fuzzy, c-format -#| msgid "index %d out of valid range, 0..%d" +#: utils/adt/varlena.c:3548 utils/adt/varlena.c:3620 +#, c-format msgid "index %lld out of valid range, 0..%lld" -msgstr "Index %d ist außerhalb des gültigen Bereichs, 0..%d" +msgstr "Index %lld ist außerhalb des gültigen Bereichs, 0..%lld" -#: utils/adt/varlena.c:4590 -#, c-format -msgid "field position must be greater than zero" +#: utils/adt/varlena.c:4656 +#, fuzzy, c-format +#| msgid "field position must be greater than zero" +msgid "field position must not be zero" msgstr "Feldposition muss größer als null sein" -#: utils/adt/varlena.c:5456 +#: utils/adt/varlena.c:5697 #, c-format msgid "unterminated format() type specifier" msgstr "Typspezifikation in format() nicht abgeschlossen" -#: utils/adt/varlena.c:5457 utils/adt/varlena.c:5591 utils/adt/varlena.c:5712 +#: utils/adt/varlena.c:5698 utils/adt/varlena.c:5832 utils/adt/varlena.c:5953 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "Für ein einzelnes »%%« geben Sie »%%%%« an." -#: utils/adt/varlena.c:5589 utils/adt/varlena.c:5710 +#: utils/adt/varlena.c:5830 utils/adt/varlena.c:5951 #, c-format -msgid "unrecognized format() type specifier \"%c\"" -msgstr "unbekannte Typspezifikation in format(): »%c«" +msgid "unrecognized format() type specifier \"%.*s\"" +msgstr "unbekannte Typspezifikation in format(): »%.*s«" -#: utils/adt/varlena.c:5602 utils/adt/varlena.c:5659 +#: utils/adt/varlena.c:5843 utils/adt/varlena.c:5900 #, c-format msgid "too few arguments for format()" msgstr "zu wenige Argumente für format()" -#: utils/adt/varlena.c:5755 utils/adt/varlena.c:5937 +#: utils/adt/varlena.c:5996 utils/adt/varlena.c:6178 #, c-format msgid "number is out of range" msgstr "Zahl ist außerhalb des gültigen Bereichs" -#: utils/adt/varlena.c:5818 utils/adt/varlena.c:5846 +#: utils/adt/varlena.c:6059 utils/adt/varlena.c:6087 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "Format gibt Argument 0 an, aber die Argumente sind von 1 an nummeriert" -#: utils/adt/varlena.c:5839 +#: utils/adt/varlena.c:6080 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "Argumentposition der Breitenangabe muss mit »$« enden" -#: utils/adt/varlena.c:5884 +#: utils/adt/varlena.c:6125 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "NULL-Werte können nicht als SQL-Bezeichner formatiert werden" -#: utils/adt/varlena.c:6010 +#: utils/adt/varlena.c:6251 #, c-format msgid "Unicode normalization can only be performed if server encoding is UTF8" -msgstr "" +msgstr "Unicode-Normalisierung kann nur durchgeführt werden, wenn die Serverkodierung UTF8 ist" -#: utils/adt/varlena.c:6023 -#, fuzzy, c-format -#| msgid "invalid parameter list format: \"%s\"" +#: utils/adt/varlena.c:6264 +#, c-format msgid "invalid normalization form: %s" -msgstr "ungültiges Parameterlistenformat: »%s«" +msgstr "ungültige Normalisierungsform: %s" + +#: utils/adt/varlena.c:6467 utils/adt/varlena.c:6502 utils/adt/varlena.c:6537 +#, c-format +msgid "invalid Unicode code point: %04X" +msgstr "ungültiger Unicode-Codepunkt: %04X" + +#: utils/adt/varlena.c:6567 +#, fuzzy, c-format +#| msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." +msgid "Unicode escapes must be \\XXXX, \\+XXXXXX, \\uXXXX, or \\UXXXXXXXX." +msgstr "Unicode-Escapes müssen \\uXXXX oder \\UXXXXXXXX sein." #: utils/adt/windowfuncs.c:243 #, c-format @@ -24299,10 +25289,9 @@ msgid "transaction ID %s is in the future" msgstr "Transaktions-ID %s ist in der Zukunft" #: utils/adt/xid8funcs.c:547 -#, fuzzy, c-format -#| msgid "invalid external txid_snapshot data" +#, c-format msgid "invalid external pg_snapshot data" -msgstr "ungültige externe txid_snapshot-Daten" +msgstr "ungültige externe pg_snapshot-Daten" #: utils/adt/xml.c:222 #, c-format @@ -24319,7 +25308,7 @@ msgstr "Diese Funktionalität verlangt, dass der Server mit Libxml-Unterstützun msgid "You need to rebuild PostgreSQL using --with-libxml." msgstr "Sie müssen PostgreSQL mit --with-libxml neu bauen." -#: utils/adt/xml.c:243 utils/mb/mbutils.c:570 +#: utils/adt/xml.c:243 utils/mb/mbutils.c:627 #, c-format msgid "invalid encoding name \"%s\"" msgstr "ungültiger Kodierungsname »%s«" @@ -24458,28 +25447,28 @@ msgstr "Zeilenpfadfilter darf nicht leer sein" msgid "column path filter must not be empty string" msgstr "Spaltenpfadfilter darf nicht leer sein" -#: utils/adt/xml.c:4661 +#: utils/adt/xml.c:4655 #, c-format msgid "more than one value returned by column XPath expression" msgstr "XPath-Ausdruck für Spalte gab mehr als einen Wert zurück" -#: utils/cache/lsyscache.c:966 +#: utils/cache/lsyscache.c:1042 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "Typumwandlung von Typ %s in Typ %s existiert nicht" -#: utils/cache/lsyscache.c:2715 utils/cache/lsyscache.c:2748 -#: utils/cache/lsyscache.c:2781 utils/cache/lsyscache.c:2814 +#: utils/cache/lsyscache.c:2834 utils/cache/lsyscache.c:2867 +#: utils/cache/lsyscache.c:2900 utils/cache/lsyscache.c:2933 #, c-format msgid "type %s is only a shell" msgstr "Typ %s ist nur eine Hülle" -#: utils/cache/lsyscache.c:2720 +#: utils/cache/lsyscache.c:2839 #, c-format msgid "no input function available for type %s" msgstr "keine Eingabefunktion verfügbar für Typ %s" -#: utils/cache/lsyscache.c:2753 +#: utils/cache/lsyscache.c:2872 #, c-format msgid "no output function available for type %s" msgstr "keine Ausgabefunktion verfügbar für Typ %s" @@ -24489,22 +25478,22 @@ msgstr "keine Ausgabefunktion verfügbar für Typ %s" msgid "operator class \"%s\" of access method %s is missing support function %d for type %s" msgstr "in Operatorklasse »%s« für Zugriffsmethode %s fehlt Support-Funktion %d für Typ %s" -#: utils/cache/plancache.c:718 +#: utils/cache/plancache.c:720 #, c-format msgid "cached plan must not change result type" msgstr "gecachter Plan darf den Ergebnistyp nicht ändern" -#: utils/cache/relcache.c:6070 +#: utils/cache/relcache.c:6213 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "konnte Initialisierungsdatei für Relationscache »%s« nicht erzeugen: %m" -#: utils/cache/relcache.c:6072 +#: utils/cache/relcache.c:6215 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Setze trotzdem fort, aber irgendwas stimmt nicht." -#: utils/cache/relcache.c:6394 +#: utils/cache/relcache.c:6537 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "konnte Cache-Datei »%s« nicht löschen: %m" @@ -24524,114 +25513,114 @@ msgstr "Relation-Mapping-Datei »%s« enthält ungültige Daten" msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "Relation-Mapping-Datei »%s« enthält falsche Prüfsumme" -#: utils/cache/typcache.c:1692 utils/fmgr/funcapi.c:461 +#: utils/cache/typcache.c:1808 utils/fmgr/funcapi.c:463 #, c-format msgid "record type has not been registered" msgstr "Record-Typ wurde nicht registriert" -#: utils/error/assert.c:37 -#, c-format -msgid "TRAP: ExceptionalCondition: bad arguments\n" +#: utils/error/assert.c:39 +#, fuzzy, c-format +#| msgid "TRAP: ExceptionalCondition: bad arguments\n" +msgid "TRAP: ExceptionalCondition: bad arguments in PID %d\n" msgstr "TRAP: ExceptionalCondition: fehlerhafte Argumente\n" -#: utils/error/assert.c:40 -#, c-format -msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n" +#: utils/error/assert.c:42 +#, fuzzy, c-format +#| msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n" +msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d, PID: %d)\n" msgstr "TRAP: %s(»%s«, Datei: »%s«, Zeile: %d)\n" -#: utils/error/elog.c:322 -#, fuzzy, c-format -#| msgid "error occurred at %s:%d before error message processing is available\n" +#: utils/error/elog.c:409 +#, c-format msgid "error occurred before error message processing is available\n" -msgstr "Fehler geschah bei %s:%d bevor Fehlermeldungsverarbeitung bereit war\n" +msgstr "Fehler geschah bevor Fehlermeldungsverarbeitung bereit war\n" -#: utils/error/elog.c:1868 +#: utils/error/elog.c:1948 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "konnte Datei »%s« nicht als stderr neu öffnen: %m" -#: utils/error/elog.c:1881 +#: utils/error/elog.c:1961 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" -msgstr "konnte Datei »%s« nicht als stdou neu öffnen: %m" +msgstr "konnte Datei »%s« nicht als stdout neu öffnen: %m" -#: utils/error/elog.c:2373 utils/error/elog.c:2407 utils/error/elog.c:2423 +#: utils/error/elog.c:2456 utils/error/elog.c:2490 utils/error/elog.c:2506 msgid "[unknown]" msgstr "[unbekannt]" -#: utils/error/elog.c:2893 utils/error/elog.c:3203 utils/error/elog.c:3311 +#: utils/error/elog.c:3026 utils/error/elog.c:3344 utils/error/elog.c:3451 msgid "missing error text" msgstr "fehlender Fehlertext" -#: utils/error/elog.c:2896 utils/error/elog.c:2899 utils/error/elog.c:3314 -#: utils/error/elog.c:3317 +#: utils/error/elog.c:3029 utils/error/elog.c:3032 #, c-format msgid " at character %d" msgstr " bei Zeichen %d" -#: utils/error/elog.c:2909 utils/error/elog.c:2916 +#: utils/error/elog.c:3042 utils/error/elog.c:3049 msgid "DETAIL: " msgstr "DETAIL: " -#: utils/error/elog.c:2923 +#: utils/error/elog.c:3056 msgid "HINT: " msgstr "TIPP: " -#: utils/error/elog.c:2930 +#: utils/error/elog.c:3063 msgid "QUERY: " msgstr "ANFRAGE: " -#: utils/error/elog.c:2937 +#: utils/error/elog.c:3070 msgid "CONTEXT: " msgstr "ZUSAMMENHANG: " -#: utils/error/elog.c:2944 -msgid "BACKTRACE: " -msgstr "" - -#: utils/error/elog.c:2954 +#: utils/error/elog.c:3080 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "ORT: %s, %s:%d\n" -#: utils/error/elog.c:2961 +#: utils/error/elog.c:3087 #, c-format msgid "LOCATION: %s:%d\n" msgstr "ORT: %s:%d\n" -#: utils/error/elog.c:2975 +#: utils/error/elog.c:3094 +msgid "BACKTRACE: " +msgstr "BACKTRACE: " + +#: utils/error/elog.c:3108 msgid "STATEMENT: " msgstr "ANWEISUNG: " -#: utils/error/elog.c:3364 +#: utils/error/elog.c:3496 msgid "DEBUG" msgstr "DEBUG" -#: utils/error/elog.c:3368 +#: utils/error/elog.c:3500 msgid "LOG" msgstr "LOG" -#: utils/error/elog.c:3371 +#: utils/error/elog.c:3503 msgid "INFO" msgstr "INFO" -#: utils/error/elog.c:3374 +#: utils/error/elog.c:3506 msgid "NOTICE" msgstr "HINWEIS" -#: utils/error/elog.c:3377 +#: utils/error/elog.c:3510 msgid "WARNING" msgstr "WARNUNG" -#: utils/error/elog.c:3380 +#: utils/error/elog.c:3513 msgid "ERROR" msgstr "FEHLER" -#: utils/error/elog.c:3383 +#: utils/error/elog.c:3516 msgid "FATAL" msgstr "FATAL" -#: utils/error/elog.c:3386 +#: utils/error/elog.c:3519 msgid "PANIC" msgstr "PANIK" @@ -24719,409 +25708,401 @@ msgstr "eine Komponente im Parameter »dynamic_library_path« ist kein absoluter msgid "internal function \"%s\" is not in internal lookup table" msgstr "interne Funktion »%s« ist nicht in der internen Suchtabelle" -#: utils/fmgr/fmgr.c:487 +#: utils/fmgr/fmgr.c:484 #, c-format msgid "could not find function information for function \"%s\"" msgstr "konnte Funktionsinformationen für Funktion »%s« nicht finden" -#: utils/fmgr/fmgr.c:489 +#: utils/fmgr/fmgr.c:486 #, c-format msgid "SQL-callable functions need an accompanying PG_FUNCTION_INFO_V1(funcname)." msgstr "Von SQL aufrufbare Funktionen benötigen ein begleitendes PG_FUNCTION_INFO_V1(funkname)." -#: utils/fmgr/fmgr.c:507 +#: utils/fmgr/fmgr.c:504 #, c-format msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "Info-Funktion »%2$s« berichtete unbekannte API-Version %1$d" -#: utils/fmgr/fmgr.c:2003 +#: utils/fmgr/fmgr.c:1999 #, c-format -msgid "opclass options info is absent in function call context" -msgstr "" +msgid "operator class options info is absent in function call context" +msgstr "Operatorklassenoptionsinformationen fehlen im Funktionsaufrufkontext" -#: utils/fmgr/fmgr.c:2070 +#: utils/fmgr/fmgr.c:2066 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "Sprachvalidierungsfunktion %u wurde für Sprache %u statt %u aufgerufen" -#: utils/fmgr/funcapi.c:384 +#: utils/fmgr/funcapi.c:386 #, c-format msgid "could not determine actual result type for function \"%s\" declared to return type %s" msgstr "konnte tatsächlichen Ergebnistyp von Funktion »%s« mit deklarierten Rückgabetyp %s nicht bestimmen" -#: utils/fmgr/funcapi.c:1651 utils/fmgr/funcapi.c:1683 +#: utils/fmgr/funcapi.c:531 +#, fuzzy, c-format +#| msgid "argument declared %s is not a range type but type %s" +msgid "argument declared %s does not contain a range type but type %s" +msgstr "als %s deklariertes Argument ist kein Bereichstyp sondern Typ %s" + +#: utils/fmgr/funcapi.c:1833 utils/fmgr/funcapi.c:1865 #, c-format msgid "number of aliases does not match number of columns" msgstr "Anzahl der Aliasnamen stimmt nicht mit der Anzahl der Spalten überein" -#: utils/fmgr/funcapi.c:1677 +#: utils/fmgr/funcapi.c:1859 #, c-format msgid "no column alias was provided" msgstr "Spaltenalias fehlt" -#: utils/fmgr/funcapi.c:1701 +#: utils/fmgr/funcapi.c:1883 #, c-format msgid "could not determine row description for function returning record" msgstr "konnte Zeilenbeschreibung für Funktion, die »record« zurückgibt, nicht ermitteln" -#: utils/init/miscinit.c:285 +#: utils/init/miscinit.c:315 #, c-format msgid "data directory \"%s\" does not exist" msgstr "Datenverzeichnis »%s« existiert nicht" -#: utils/init/miscinit.c:290 +#: utils/init/miscinit.c:320 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "konnte Zugriffsrechte von Verzeichnis »%s« nicht lesen: %m" -#: utils/init/miscinit.c:298 +#: utils/init/miscinit.c:328 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "angegebenes Datenverzeichnis »%s« ist kein Verzeichnis" -#: utils/init/miscinit.c:314 +#: utils/init/miscinit.c:344 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "Datenverzeichnis »%s« hat falschen Eigentümer" -#: utils/init/miscinit.c:316 +#: utils/init/miscinit.c:346 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "Der Server muss von dem Benutzer gestartet werden, dem das Datenverzeichnis gehört." -#: utils/init/miscinit.c:334 +#: utils/init/miscinit.c:364 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "Datenverzeichnis »%s« hat ungültige Zugriffsrechte" -#: utils/init/miscinit.c:336 +#: utils/init/miscinit.c:366 #, c-format msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Rechte sollten u=rwx (0700) oder u=rwx,g=rx (0750) sein." -#: utils/init/miscinit.c:615 utils/misc/guc.c:7149 +#: utils/init/miscinit.c:645 utils/misc/guc.c:7514 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "kann Parameter »%s« nicht in einer sicherheitsbeschränkten Operation setzen" -#: utils/init/miscinit.c:683 +#: utils/init/miscinit.c:713 #, c-format msgid "role with OID %u does not exist" msgstr "Rolle mit OID %u existiert nicht" -#: utils/init/miscinit.c:713 +#: utils/init/miscinit.c:743 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "Rolle »%s« hat keine Berechtigung zum Einloggen" -#: utils/init/miscinit.c:731 +#: utils/init/miscinit.c:761 #, c-format msgid "too many connections for role \"%s\"" msgstr "zu viele Verbindungen von Rolle »%s«" -#: utils/init/miscinit.c:791 +#: utils/init/miscinit.c:821 #, c-format msgid "permission denied to set session authorization" msgstr "keine Berechtigung, um Sitzungsautorisierung zu setzen" -#: utils/init/miscinit.c:874 +#: utils/init/miscinit.c:904 #, c-format msgid "invalid role OID: %u" msgstr "ungültige Rollen-OID: %u" -#: utils/init/miscinit.c:928 +#: utils/init/miscinit.c:958 #, c-format msgid "database system is shut down" msgstr "Datenbanksystem ist heruntergefahren" -#: utils/init/miscinit.c:1015 +#: utils/init/miscinit.c:1045 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "konnte Sperrdatei »%s« nicht erstellen: %m" -#: utils/init/miscinit.c:1029 +#: utils/init/miscinit.c:1059 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "konnte Sperrdatei »%s« nicht öffnen: %m" -#: utils/init/miscinit.c:1036 +#: utils/init/miscinit.c:1066 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "konnte Sperrdatei »%s« nicht lesen: %m" -#: utils/init/miscinit.c:1045 +#: utils/init/miscinit.c:1075 #, c-format msgid "lock file \"%s\" is empty" msgstr "Sperrdatei »%s« ist leer" -#: utils/init/miscinit.c:1046 +#: utils/init/miscinit.c:1076 #, c-format msgid "Either another server is starting, or the lock file is the remnant of a previous server startup crash." msgstr "Entweder startet gerade ein anderer Server oder die Sperrdatei ist von einen Absturz übrig geblieben." -#: utils/init/miscinit.c:1090 +#: utils/init/miscinit.c:1120 #, c-format msgid "lock file \"%s\" already exists" msgstr "Sperrdatei »%s« existiert bereits" -#: utils/init/miscinit.c:1094 +#: utils/init/miscinit.c:1124 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "Läuft bereits ein anderer postgres-Prozess (PID %d) im Datenverzeichnis »%s«?" -#: utils/init/miscinit.c:1096 +#: utils/init/miscinit.c:1126 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "Läuft bereits ein anderer postmaster-Prozess (PID %d) im Datenverzeichnis »%s«?" -#: utils/init/miscinit.c:1099 +#: utils/init/miscinit.c:1129 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "Verwendet bereits ein anderer postgres-Prozess (PID %d) die Socketdatei »%s«?" -#: utils/init/miscinit.c:1101 +#: utils/init/miscinit.c:1131 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "Verwendet bereits ein anderer postmaster-Prozess (PID %d) die Socketdatei »%s«?" -#: utils/init/miscinit.c:1152 +#: utils/init/miscinit.c:1182 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "konnte alte Sperrdatei »%s« nicht löschen: %m" -#: utils/init/miscinit.c:1154 +#: utils/init/miscinit.c:1184 #, c-format msgid "The file seems accidentally left over, but it could not be removed. Please remove the file by hand and try again." msgstr "Die Datei ist anscheinend aus Versehen übrig geblieben, konnte aber nicht gelöscht werden. Bitte entfernen Sie die Datei von Hand und versuchen Sie es erneut." -#: utils/init/miscinit.c:1191 utils/init/miscinit.c:1205 -#: utils/init/miscinit.c:1216 +#: utils/init/miscinit.c:1221 utils/init/miscinit.c:1235 +#: utils/init/miscinit.c:1246 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "konnte Sperrdatei »%s« nicht schreiben: %m" -#: utils/init/miscinit.c:1327 utils/init/miscinit.c:1469 utils/misc/guc.c:10048 +#: utils/init/miscinit.c:1357 utils/init/miscinit.c:1499 utils/misc/guc.c:10410 #, c-format msgid "could not read from file \"%s\": %m" msgstr "konnte nicht aus Datei »%s« lesen: %m" -#: utils/init/miscinit.c:1457 +#: utils/init/miscinit.c:1487 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "konnte Datei »%s« nicht öffnen: %m; setze trotzdem fort" -#: utils/init/miscinit.c:1482 +#: utils/init/miscinit.c:1512 #, c-format msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" msgstr "Sperrdatei »%s« enthält falsche PID: %ld statt %ld" -#: utils/init/miscinit.c:1521 utils/init/miscinit.c:1537 +#: utils/init/miscinit.c:1551 utils/init/miscinit.c:1567 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "»%s« ist kein gültiges Datenverzeichnis" -#: utils/init/miscinit.c:1523 +#: utils/init/miscinit.c:1553 #, c-format msgid "File \"%s\" is missing." msgstr "Die Datei »%s« fehlt." -#: utils/init/miscinit.c:1539 +#: utils/init/miscinit.c:1569 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "Die Datei »%s« enthält keine gültigen Daten." -#: utils/init/miscinit.c:1541 +#: utils/init/miscinit.c:1571 #, c-format msgid "You might need to initdb." msgstr "Sie müssen möglicherweise initdb ausführen." -#: utils/init/miscinit.c:1549 +#: utils/init/miscinit.c:1579 #, c-format msgid "The data directory was initialized by PostgreSQL version %s, which is not compatible with this version %s." msgstr "Das Datenverzeichnis wurde von PostgreSQL Version %s initialisiert, welche nicht mit dieser Version %s kompatibel ist." -#: utils/init/miscinit.c:1616 +#: utils/init/postinit.c:254 #, c-format -msgid "loaded library \"%s\"" -msgstr "Bibliothek »%s« geladen" - -#: utils/init/postinit.c:255 -#, fuzzy, c-format -#| msgid "replication connection authorized: user=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgid "replication connection authorized: user=%s application_name=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "Replikationsverbindung autorisiert: Benutzer=%s SSL an (Protokoll=%s, Verschlüsselungsmethode=%s, Bits=%d, Komprimierung=%s)" - -#: utils/init/postinit.c:261 utils/init/postinit.c:267 -#: utils/init/postinit.c:289 utils/init/postinit.c:295 -msgid "off" -msgstr "aus" - -#: utils/init/postinit.c:261 utils/init/postinit.c:267 -#: utils/init/postinit.c:289 utils/init/postinit.c:295 -msgid "on" -msgstr "an" +msgid "replication connection authorized: user=%s" +msgstr "Replikationsverbindung autorisiert: Benutzer=%s" -#: utils/init/postinit.c:262 +#: utils/init/postinit.c:257 #, c-format -msgid "replication connection authorized: user=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "Replikationsverbindung autorisiert: Benutzer=%s SSL an (Protokoll=%s, Verschlüsselungsmethode=%s, Bits=%d, Komprimierung=%s)" +msgid "connection authorized: user=%s" +msgstr "Verbindung autorisiert: Benutzer=%s" -#: utils/init/postinit.c:272 -#, fuzzy, c-format -#| msgid "replication connection authorized: user=%s" -msgid "replication connection authorized: user=%s application_name=%s" -msgstr "Replikationsverbindung autorisiert: Benutzer=%s" +#: utils/init/postinit.c:260 +#, c-format +msgid " database=%s" +msgstr " Datenbank=%s" -#: utils/init/postinit.c:275 +#: utils/init/postinit.c:263 #, c-format -msgid "replication connection authorized: user=%s" -msgstr "Replikationsverbindung autorisiert: Benutzer=%s" +msgid " application_name=%s" +msgstr " application_name=%s" -#: utils/init/postinit.c:284 -#, fuzzy, c-format -#| msgid "connection authorized: user=%s database=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgid "connection authorized: user=%s database=%s application_name=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "Verbindung autorisiert: Benutzer=%s Datenbank=%s SSL an (Protokoll=%s, Verschlüsselungsmethode=%s, Bits=%d, Komprimierung=%s)" +#: utils/init/postinit.c:268 +#, c-format +msgid " SSL enabled (protocol=%s, cipher=%s, bits=%d)" +msgstr "SSL an (Protokoll=%s, Verschlüsselungsmethode=%s, Bits=%d)" -#: utils/init/postinit.c:290 +#: utils/init/postinit.c:280 #, c-format -msgid "connection authorized: user=%s database=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "Verbindung autorisiert: Benutzer=%s Datenbank=%s SSL an (Protokoll=%s, Verschlüsselungsmethode=%s, Bits=%d, Komprimierung=%s)" +msgid " GSS (authenticated=%s, encrypted=%s, principal=%s)" +msgstr " GSS (authentifiziert=%s, verschlüsselt=%s, Principal=%s)" -#: utils/init/postinit.c:300 -#, fuzzy, c-format -#| msgid "connection authorized: user=%s database=%s" -msgid "connection authorized: user=%s database=%s application_name=%s" -msgstr "Verbindung autorisiert: Benutzer=%s Datenbank=%s" +#: utils/init/postinit.c:281 utils/init/postinit.c:282 +#: utils/init/postinit.c:287 utils/init/postinit.c:288 +msgid "no" +msgstr "nein" -#: utils/init/postinit.c:302 +#: utils/init/postinit.c:281 utils/init/postinit.c:282 +#: utils/init/postinit.c:287 utils/init/postinit.c:288 +msgid "yes" +msgstr "ja" + +#: utils/init/postinit.c:286 #, c-format -msgid "connection authorized: user=%s database=%s" -msgstr "Verbindung autorisiert: Benutzer=%s Datenbank=%s" +msgid " GSS (authenticated=%s, encrypted=%s)" +msgstr " GSS (authentifiziert=%s, verschlüsselt=%s)" -#: utils/init/postinit.c:334 +#: utils/init/postinit.c:323 #, c-format msgid "database \"%s\" has disappeared from pg_database" msgstr "Datenbank »%s« ist aus pg_database verschwunden" -#: utils/init/postinit.c:336 +#: utils/init/postinit.c:325 #, c-format msgid "Database OID %u now seems to belong to \"%s\"." msgstr "Datenbank-OID %u gehört jetzt anscheinend zu »%s«." -#: utils/init/postinit.c:356 +#: utils/init/postinit.c:345 #, c-format msgid "database \"%s\" is not currently accepting connections" msgstr "Datenbank »%s« akzeptiert gegenwärtig keine Verbindungen" -#: utils/init/postinit.c:369 +#: utils/init/postinit.c:358 #, c-format msgid "permission denied for database \"%s\"" msgstr "keine Berechtigung für Datenbank »%s«" -#: utils/init/postinit.c:370 +#: utils/init/postinit.c:359 #, c-format msgid "User does not have CONNECT privilege." msgstr "Benutzer hat das CONNECT-Privileg nicht." -#: utils/init/postinit.c:387 +#: utils/init/postinit.c:376 #, c-format msgid "too many connections for database \"%s\"" msgstr "zu viele Verbindungen für Datenbank »%s«" -#: utils/init/postinit.c:409 utils/init/postinit.c:416 +#: utils/init/postinit.c:398 utils/init/postinit.c:405 #, c-format msgid "database locale is incompatible with operating system" msgstr "Datenbank-Locale ist inkompatibel mit Betriebssystem" -#: utils/init/postinit.c:410 +#: utils/init/postinit.c:399 #, c-format msgid "The database was initialized with LC_COLLATE \"%s\", which is not recognized by setlocale()." msgstr "Die Datenbank wurde mit LC_COLLATE »%s« initialisiert, was von setlocale() nicht erkannt wird." -#: utils/init/postinit.c:412 utils/init/postinit.c:419 +#: utils/init/postinit.c:401 utils/init/postinit.c:408 #, c-format msgid "Recreate the database with another locale or install the missing locale." msgstr "Erzeugen Sie die Datenbank neu mit einer anderen Locale oder installieren Sie die fehlende Locale." -#: utils/init/postinit.c:417 +#: utils/init/postinit.c:406 #, c-format msgid "The database was initialized with LC_CTYPE \"%s\", which is not recognized by setlocale()." msgstr "Die Datenbank wurde mit LC_CTYPE »%s« initialisiert, was von setlocale() nicht erkannt wird." -#: utils/init/postinit.c:762 +#: utils/init/postinit.c:761 #, c-format msgid "no roles are defined in this database system" msgstr "in diesem Datenbanksystem sind keine Rollen definiert" -#: utils/init/postinit.c:763 +#: utils/init/postinit.c:762 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Sie sollten sofort CREATE USER \"%s\" SUPERUSER; ausführen." -#: utils/init/postinit.c:799 +#: utils/init/postinit.c:798 #, c-format msgid "new replication connections are not allowed during database shutdown" msgstr "während des Herunterfahrens der Datenbank sind keine neuen Replikationsverbindungen erlaubt" -#: utils/init/postinit.c:803 +#: utils/init/postinit.c:802 #, c-format msgid "must be superuser to connect during database shutdown" msgstr "nur Superuser können während des Herunterfahrens der Datenbank verbinden" -#: utils/init/postinit.c:813 +#: utils/init/postinit.c:812 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "nur Superuser können im Binary-Upgrade-Modus verbinden" -#: utils/init/postinit.c:826 +#: utils/init/postinit.c:825 #, c-format msgid "remaining connection slots are reserved for non-replication superuser connections" msgstr "die verbleibenden Verbindungen sind für Superuser auf Nicht-Replikationsverbindungen reserviert" -#: utils/init/postinit.c:836 +#: utils/init/postinit.c:835 #, c-format msgid "must be superuser or replication role to start walsender" msgstr "nur Superuser und Replikationsrollen können WAL-Sender starten" -#: utils/init/postinit.c:905 +#: utils/init/postinit.c:904 #, c-format msgid "database %u does not exist" msgstr "Datenbank %u existiert nicht" -#: utils/init/postinit.c:994 +#: utils/init/postinit.c:993 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Sie wurde anscheinend gerade gelöscht oder umbenannt." -#: utils/init/postinit.c:1012 +#: utils/init/postinit.c:1011 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Das Datenbankunterverzeichnis »%s« fehlt." -#: utils/init/postinit.c:1017 +#: utils/init/postinit.c:1016 #, c-format msgid "could not access directory \"%s\": %m" msgstr "konnte nicht auf Verzeichnis »%s« zugreifen: %m" -#: utils/mb/conv.c:443 utils/mb/conv.c:635 +#: utils/mb/conv.c:522 utils/mb/conv.c:733 #, c-format msgid "invalid encoding number: %d" msgstr "ungültige Kodierungsnummer: %d" -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:122 -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:154 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:129 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:165 #, c-format msgid "unexpected encoding ID %d for ISO 8859 character sets" msgstr "unerwartete Kodierungs-ID %d für ISO-8859-Zeichensatz" -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:103 -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:135 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:110 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:146 #, c-format msgid "unexpected encoding ID %d for WIN character sets" msgstr "unerwartete Kodierungs-ID %d für WIN-Zeichensatz" -#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:842 +#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:900 #, c-format msgid "conversion between %s and %s is not supported" msgstr "Umwandlung zwischen %s und %s wird nicht unterstützt" @@ -25131,1982 +26112,2046 @@ msgstr "Umwandlung zwischen %s und %s wird nicht unterstützt" msgid "default conversion function for encoding \"%s\" to \"%s\" does not exist" msgstr "Standardumwandlung von Kodierung »%s« nach »%s« existiert nicht" -#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:429 utils/mb/mbutils.c:758 -#: utils/mb/mbutils.c:784 +#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 +#: utils/mb/mbutils.c:842 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "Zeichenkette mit %d Bytes ist zu lang für Kodierungsumwandlung." -#: utils/mb/mbutils.c:511 +#: utils/mb/mbutils.c:568 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "ungültiger Quellkodierungsname »%s«" -#: utils/mb/mbutils.c:516 +#: utils/mb/mbutils.c:573 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "ungültiger Zielkodierungsname »%s«" -#: utils/mb/mbutils.c:656 +#: utils/mb/mbutils.c:713 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "ungültiger Byte-Wert für Kodierung »%s«: 0x%02x" -#: utils/mb/mbutils.c:819 -#, fuzzy, c-format -#| msgid "invalid Unicode surrogate pair" +#: utils/mb/mbutils.c:877 +#, c-format msgid "invalid Unicode code point" -msgstr "ungültiges Unicode-Surrogatpaar" +msgstr "ungültiger Unicode-Codepunkt" -#: utils/mb/mbutils.c:1087 +#: utils/mb/mbutils.c:1146 #, c-format msgid "bind_textdomain_codeset failed" msgstr "bind_textdomain_codeset fehlgeschlagen" -#: utils/mb/mbutils.c:1595 +#: utils/mb/mbutils.c:1667 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "ungültige Byte-Sequenz für Kodierung »%s«: %s" -#: utils/mb/mbutils.c:1628 +#: utils/mb/mbutils.c:1700 #, c-format msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "Zeichen mit Byte-Folge %s in Kodierung »%s« hat keine Entsprechung in Kodierung »%s«" -#: utils/misc/guc.c:679 +#: utils/misc/guc.c:703 msgid "Ungrouped" msgstr "Ungruppiert" -#: utils/misc/guc.c:681 +#: utils/misc/guc.c:705 msgid "File Locations" msgstr "Dateipfade" -#: utils/misc/guc.c:683 +#: utils/misc/guc.c:707 msgid "Connections and Authentication" msgstr "Verbindungen und Authentifizierung" -#: utils/misc/guc.c:685 +#: utils/misc/guc.c:709 msgid "Connections and Authentication / Connection Settings" msgstr "Verbindungen und Authentifizierung / Verbindungseinstellungen" -#: utils/misc/guc.c:687 +#: utils/misc/guc.c:711 msgid "Connections and Authentication / Authentication" msgstr "Verbindungen und Authentifizierung / Authentifizierung" -#: utils/misc/guc.c:689 +#: utils/misc/guc.c:713 msgid "Connections and Authentication / SSL" msgstr "Verbindungen und Authentifizierung / SSL" -#: utils/misc/guc.c:691 +#: utils/misc/guc.c:715 msgid "Resource Usage" msgstr "Resourcenbenutzung" -#: utils/misc/guc.c:693 +#: utils/misc/guc.c:717 msgid "Resource Usage / Memory" msgstr "Resourcenbenutzung / Speicher" -#: utils/misc/guc.c:695 +#: utils/misc/guc.c:719 msgid "Resource Usage / Disk" msgstr "Resourcenbenutzung / Festplatte" -#: utils/misc/guc.c:697 +#: utils/misc/guc.c:721 msgid "Resource Usage / Kernel Resources" msgstr "Resourcenbenutzung / Kernelresourcen" -#: utils/misc/guc.c:699 +#: utils/misc/guc.c:723 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Resourcenbenutzung / Kostenbasierte Vacuum-Verzögerung" -#: utils/misc/guc.c:701 +#: utils/misc/guc.c:725 msgid "Resource Usage / Background Writer" msgstr "Resourcenbenutzung / Background-Writer" -#: utils/misc/guc.c:703 +#: utils/misc/guc.c:727 msgid "Resource Usage / Asynchronous Behavior" msgstr "Resourcenbenutzung / Asynchrones Verhalten" -#: utils/misc/guc.c:705 +#: utils/misc/guc.c:729 msgid "Write-Ahead Log" msgstr "Write-Ahead-Log" -#: utils/misc/guc.c:707 +#: utils/misc/guc.c:731 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead-Log / Einstellungen" -#: utils/misc/guc.c:709 +#: utils/misc/guc.c:733 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead-Log / Checkpoints" -#: utils/misc/guc.c:711 +#: utils/misc/guc.c:735 msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead-Log / Archivierung" -#: utils/misc/guc.c:713 +#: utils/misc/guc.c:737 msgid "Write-Ahead Log / Archive Recovery" msgstr "Write-Ahead-Log / Archivwiederherstellung" -#: utils/misc/guc.c:715 +#: utils/misc/guc.c:739 msgid "Write-Ahead Log / Recovery Target" msgstr "Write-Ahead-Log / Wiederherstellungsziele" -#: utils/misc/guc.c:717 +#: utils/misc/guc.c:741 msgid "Replication" msgstr "Replikation" -#: utils/misc/guc.c:719 +#: utils/misc/guc.c:743 msgid "Replication / Sending Servers" msgstr "Replikation / sendende Server" -#: utils/misc/guc.c:721 -msgid "Replication / Master Server" -msgstr "Replikation / Master-Server" +#: utils/misc/guc.c:745 +msgid "Replication / Primary Server" +msgstr "Replikation / Primärserver" -#: utils/misc/guc.c:723 +#: utils/misc/guc.c:747 msgid "Replication / Standby Servers" msgstr "Replikation / Standby-Server" -#: utils/misc/guc.c:725 +#: utils/misc/guc.c:749 msgid "Replication / Subscribers" msgstr "Replikation / Subskriptionsserver" -#: utils/misc/guc.c:727 +#: utils/misc/guc.c:751 msgid "Query Tuning" msgstr "Anfragetuning" -#: utils/misc/guc.c:729 +#: utils/misc/guc.c:753 msgid "Query Tuning / Planner Method Configuration" msgstr "Anfragetuning / Planermethoden" -#: utils/misc/guc.c:731 +#: utils/misc/guc.c:755 msgid "Query Tuning / Planner Cost Constants" msgstr "Anfragetuning / Planerkosten" -#: utils/misc/guc.c:733 +#: utils/misc/guc.c:757 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Anfragetuning / Genetischer Anfrageoptimierer" -#: utils/misc/guc.c:735 +#: utils/misc/guc.c:759 msgid "Query Tuning / Other Planner Options" msgstr "Anfragetuning / Andere Planeroptionen" -#: utils/misc/guc.c:737 +#: utils/misc/guc.c:761 msgid "Reporting and Logging" msgstr "Berichte und Logging" -#: utils/misc/guc.c:739 +#: utils/misc/guc.c:763 msgid "Reporting and Logging / Where to Log" msgstr "Berichte und Logging / Wohin geloggt wird" -#: utils/misc/guc.c:741 +#: utils/misc/guc.c:765 msgid "Reporting and Logging / When to Log" msgstr "Berichte und Logging / Wann geloggt wird" -#: utils/misc/guc.c:743 +#: utils/misc/guc.c:767 msgid "Reporting and Logging / What to Log" msgstr "Berichte und Logging / Was geloggt wird" -#: utils/misc/guc.c:745 +#: utils/misc/guc.c:769 msgid "Process Title" msgstr "Prozesstitel" -#: utils/misc/guc.c:747 +#: utils/misc/guc.c:771 msgid "Statistics" msgstr "Statistiken" -#: utils/misc/guc.c:749 +#: utils/misc/guc.c:773 msgid "Statistics / Monitoring" msgstr "Statistiken / Überwachung" -#: utils/misc/guc.c:751 +#: utils/misc/guc.c:775 msgid "Statistics / Query and Index Statistics Collector" msgstr "Statistiken / Statistiksammler für Anfragen und Indexe" -#: utils/misc/guc.c:753 +#: utils/misc/guc.c:777 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc.c:755 +#: utils/misc/guc.c:779 msgid "Client Connection Defaults" msgstr "Standardeinstellungen für Clientverbindungen" -#: utils/misc/guc.c:757 +#: utils/misc/guc.c:781 msgid "Client Connection Defaults / Statement Behavior" msgstr "Standardeinstellungen für Clientverbindungen / Anweisungsverhalten" -#: utils/misc/guc.c:759 +#: utils/misc/guc.c:783 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Standardeinstellungen für Clientverbindungen / Locale und Formatierung" -#: utils/misc/guc.c:761 +#: utils/misc/guc.c:785 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Standardeinstellungen für Clientverbindungen / Shared Library Preloading" -#: utils/misc/guc.c:763 +#: utils/misc/guc.c:787 msgid "Client Connection Defaults / Other Defaults" msgstr "Standardeinstellungen für Clientverbindungen / Andere" -#: utils/misc/guc.c:765 +#: utils/misc/guc.c:789 msgid "Lock Management" msgstr "Sperrenverwaltung" -#: utils/misc/guc.c:767 +#: utils/misc/guc.c:791 msgid "Version and Platform Compatibility" msgstr "Versions- und Plattformkompatibilität" -#: utils/misc/guc.c:769 +#: utils/misc/guc.c:793 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Versions- und Plattformkompatibilität / Frühere PostgreSQL-Versionen" -#: utils/misc/guc.c:771 +#: utils/misc/guc.c:795 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Versions- und Plattformkompatibilität / Andere Plattformen und Clients" -#: utils/misc/guc.c:773 +#: utils/misc/guc.c:797 msgid "Error Handling" msgstr "Fehlerbehandlung" -#: utils/misc/guc.c:775 +#: utils/misc/guc.c:799 msgid "Preset Options" msgstr "Voreingestellte Optionen" -#: utils/misc/guc.c:777 +#: utils/misc/guc.c:801 msgid "Customized Options" msgstr "Angepasste Optionen" -#: utils/misc/guc.c:779 +#: utils/misc/guc.c:803 msgid "Developer Options" msgstr "Entwickleroptionen" -#: utils/misc/guc.c:837 +#: utils/misc/guc.c:861 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Gültige Einheiten für diesen Parameter sind »B«, »kB«, »MB«, »GB« und »TB«." -#: utils/misc/guc.c:874 +#: utils/misc/guc.c:898 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "Gültige Einheiten für diesen Parameter sind »us«, »ms«, »s«, »min«, »h« und »d«." -#: utils/misc/guc.c:936 +#: utils/misc/guc.c:960 msgid "Enables the planner's use of sequential-scan plans." msgstr "Ermöglicht sequenzielle Scans in Planer." -#: utils/misc/guc.c:946 +#: utils/misc/guc.c:970 msgid "Enables the planner's use of index-scan plans." msgstr "Ermöglicht Index-Scans im Planer." -#: utils/misc/guc.c:956 +#: utils/misc/guc.c:980 msgid "Enables the planner's use of index-only-scan plans." msgstr "Ermöglicht Index-Only-Scans im Planer." -#: utils/misc/guc.c:966 +#: utils/misc/guc.c:990 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Ermöglicht Bitmap-Scans im Planer." -#: utils/misc/guc.c:976 +#: utils/misc/guc.c:1000 msgid "Enables the planner's use of TID scan plans." msgstr "Ermöglicht TID-Scans im Planer." -#: utils/misc/guc.c:986 +#: utils/misc/guc.c:1010 msgid "Enables the planner's use of explicit sort steps." msgstr "Ermöglicht Sortierschritte im Planer." -#: utils/misc/guc.c:996 -#, fuzzy -#| msgid "Enables the planner's use of explicit sort steps." +#: utils/misc/guc.c:1020 msgid "Enables the planner's use of incremental sort steps." -msgstr "Ermöglicht Sortierschritte im Planer." +msgstr "Ermöglicht inkrementelle Sortierschritte im Planer." -#: utils/misc/guc.c:1005 +#: utils/misc/guc.c:1029 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Ermöglicht Hash-Aggregierung im Planer." -#: utils/misc/guc.c:1015 -#, fuzzy -#| msgid "Enables the planner's use of hashed aggregation plans." -msgid "Enables the planner's use of hashed aggregation plans that are expected to exceed work_mem." -msgstr "Ermöglicht Hash-Aggregierung im Planer." - -#: utils/misc/guc.c:1025 -msgid "Enables the planner's use of hashed aggregation plans for groupingsets when the total size of the hash tables is expected to exceed work_mem." -msgstr "" - -#: utils/misc/guc.c:1035 +#: utils/misc/guc.c:1039 msgid "Enables the planner's use of materialization." msgstr "Ermöglicht Materialisierung im Planer." -#: utils/misc/guc.c:1045 +#: utils/misc/guc.c:1049 +#, fuzzy +#| msgid "Enables the planner's use of parallel hash plans." +msgid "Enables the planner's use of result caching." +msgstr "Ermöglicht parallele Hash-Pläne im Planer." + +#: utils/misc/guc.c:1059 msgid "Enables the planner's use of nested-loop join plans." msgstr "Ermöglicht Nested-Loop-Verbunde im Planer." -#: utils/misc/guc.c:1055 +#: utils/misc/guc.c:1069 msgid "Enables the planner's use of merge join plans." msgstr "Ermöglicht Merge-Verbunde im Planer." -#: utils/misc/guc.c:1065 +#: utils/misc/guc.c:1079 msgid "Enables the planner's use of hash join plans." msgstr "Ermöglicht Hash-Verbunde im Planer." -#: utils/misc/guc.c:1075 +#: utils/misc/guc.c:1089 msgid "Enables the planner's use of gather merge plans." msgstr "Ermöglicht Gather-Merge-Pläne im Planer." -#: utils/misc/guc.c:1085 +#: utils/misc/guc.c:1099 msgid "Enables partitionwise join." msgstr "Ermöglicht partitionsweise Verbunde." -#: utils/misc/guc.c:1095 +#: utils/misc/guc.c:1109 msgid "Enables partitionwise aggregation and grouping." msgstr "Ermöglicht partitionsweise Aggregierung und Gruppierung." -#: utils/misc/guc.c:1105 +#: utils/misc/guc.c:1119 msgid "Enables the planner's use of parallel append plans." msgstr "Ermöglicht parallele Append-Pläne im Planer." -#: utils/misc/guc.c:1115 +#: utils/misc/guc.c:1129 msgid "Enables the planner's use of parallel hash plans." msgstr "Ermöglicht parallele Hash-Pläne im Planer." -#: utils/misc/guc.c:1125 -msgid "Enables plan-time and run-time partition pruning." -msgstr "" +#: utils/misc/guc.c:1139 +#, fuzzy +#| msgid "Enables plan-time and run-time partition pruning." +msgid "Enables plan-time and execution-time partition pruning." +msgstr "Ermöglicht Partition-Pruning zur Planzeit und zur Laufzeit." -#: utils/misc/guc.c:1126 +#: utils/misc/guc.c:1140 msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." -msgstr "" +msgstr "Erlaubt es dem Planer und dem Executor, Partitionsbegrenzungen mit Bedingungen in der Anfrage zu vergleichen, um festzustellen, welche Partitionen gelesen werden müssen." + +#: utils/misc/guc.c:1151 +#, fuzzy +#| msgid "Enables the planner's use of parallel append plans." +msgid "Enables the planner's use of async append plans." +msgstr "Ermöglicht parallele Append-Pläne im Planer." -#: utils/misc/guc.c:1137 +#: utils/misc/guc.c:1161 msgid "Enables genetic query optimization." msgstr "Ermöglicht genetische Anfrageoptimierung." -#: utils/misc/guc.c:1138 +#: utils/misc/guc.c:1162 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Dieser Algorithmus versucht das Planen ohne erschöpfende Suche durchzuführen." -#: utils/misc/guc.c:1149 +#: utils/misc/guc.c:1173 msgid "Shows whether the current user is a superuser." msgstr "Zeigt, ob der aktuelle Benutzer ein Superuser ist." -#: utils/misc/guc.c:1159 +#: utils/misc/guc.c:1183 msgid "Enables advertising the server via Bonjour." msgstr "Ermöglicht die Bekanntgabe des Servers mit Bonjour." -#: utils/misc/guc.c:1168 +#: utils/misc/guc.c:1192 msgid "Collects transaction commit time." msgstr "Sammelt Commit-Timestamps von Transaktionen." -#: utils/misc/guc.c:1177 +#: utils/misc/guc.c:1201 msgid "Enables SSL connections." msgstr "Ermöglicht SSL-Verbindungen." -#: utils/misc/guc.c:1186 +#: utils/misc/guc.c:1210 msgid "Also use ssl_passphrase_command during server reload." msgstr "ssl_passphrase_command auch beim Neuladen des Servers verwenden." -#: utils/misc/guc.c:1195 +#: utils/misc/guc.c:1219 msgid "Give priority to server ciphersuite order." msgstr "Der Ciphersuite-Reihenfolge des Servers Vorrang geben." -#: utils/misc/guc.c:1204 +#: utils/misc/guc.c:1228 msgid "Forces synchronization of updates to disk." msgstr "Erzwingt die Synchronisierung von Aktualisierungen auf Festplatte." -#: utils/misc/guc.c:1205 +#: utils/misc/guc.c:1229 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "Der Server verwendet den Systemaufruf fsync() an mehreren Stellen, um sicherzustellen, dass Datenänderungen physikalisch auf die Festplatte geschrieben werden. Das stellt sicher, dass der Datenbankcluster nach einem Betriebssystemabsturz oder Hardwarefehler in einem korrekten Zustand wiederhergestellt werden kann." -#: utils/misc/guc.c:1216 +#: utils/misc/guc.c:1240 msgid "Continues processing after a checksum failure." msgstr "Setzt die Verarbeitung trotz Prüfsummenfehler fort." -#: utils/misc/guc.c:1217 +#: utils/misc/guc.c:1241 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "Wenn eine fehlerhafte Prüfsumme entdeckt wird, gibt PostgreSQL normalerweise ein Fehler aus und bricht die aktuelle Transaktion ab. Wenn »ignore_checksum_failure« an ist, dann wird der Fehler ignoriert (aber trotzdem eine Warnung ausgegeben) und die Verarbeitung geht weiter. Dieses Verhalten kann Abstürze und andere ernsthafte Probleme verursachen. Es hat keine Auswirkungen, wenn Prüfsummen nicht eingeschaltet sind." -#: utils/misc/guc.c:1231 +#: utils/misc/guc.c:1255 msgid "Continues processing past damaged page headers." msgstr "Setzt die Verarbeitung trotz kaputter Seitenköpfe fort." -#: utils/misc/guc.c:1232 +#: utils/misc/guc.c:1256 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "Wenn ein kaputter Seitenkopf entdeckt wird, gibt PostgreSQL normalerweise einen Fehler aus und bricht die aktuelle Transaktion ab. Wenn »zero_damaged_pages« an ist, dann wird eine Warnung ausgegeben, die kaputte Seite mit Nullen gefüllt und die Verarbeitung geht weiter. Dieses Verhalten zerstört Daten, nämlich alle Zeilen in der kaputten Seite." -#: utils/misc/guc.c:1245 -#, fuzzy -#| msgid "Continues processing after a checksum failure." +#: utils/misc/guc.c:1269 msgid "Continues recovery after an invalid pages failure." -msgstr "Setzt die Verarbeitung trotz Prüfsummenfehler fort." +msgstr "Setzt die Wiederherstellung trotz Fehler durch ungültige Seiten fort." -#: utils/misc/guc.c:1246 -#, fuzzy -#| msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." +#: utils/misc/guc.c:1270 msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." -msgstr "Wenn eine fehlerhafte Prüfsumme entdeckt wird, gibt PostgreSQL normalerweise ein Fehler aus und bricht die aktuelle Transaktion ab. Wenn »ignore_checksum_failure« an ist, dann wird der Fehler ignoriert (aber trotzdem eine Warnung ausgegeben) und die Verarbeitung geht weiter. Dieses Verhalten kann Abstürze und andere ernsthafte Probleme verursachen. Es hat keine Auswirkungen, wenn Prüfsummen nicht eingeschaltet sind." +msgstr "Wenn WAL-Einträge mit Verweisen auf ungültige Seiten bei der Wiederherstellung erkannt werden, verursacht das einen PANIC-Fehler, wodurch die Wiederherstellung abgebrochen wird. Wenn »ignore_invalid_pages« an ist, dann werden ungültige Seitenverweise in WAL-Einträgen ignoriert (aber trotzen eine Warnung ausgegeben) und die Wiederherstellung wird fortgesetzt. Dieses Verhalten kann Abstürze und Datenverlust verursachen, Datenverfälschung verbreiten oder verstecken sowie andere ernsthafte Probleme verursachen. Es hat nur Auswirkungen im Wiederherstellungs- oder Standby-Modus." -#: utils/misc/guc.c:1264 +#: utils/misc/guc.c:1288 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "Schreibt volle Seiten in den WAL, sobald sie nach einem Checkpoint geändert werden." -#: utils/misc/guc.c:1265 +#: utils/misc/guc.c:1289 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "Ein Seitenschreibvorgang während eines Betriebssystemabsturzes könnte eventuell nur teilweise geschrieben worden sein. Bei der Wiederherstellung sind die im WAL gespeicherten Zeilenänderungen nicht ausreichend. Diese Option schreibt Seiten, sobald sie nach einem Checkpoint geändert worden sind, damit eine volle Wiederherstellung möglich ist." -#: utils/misc/guc.c:1278 -msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications." -msgstr "Schreibt volle Seiten in den WAL, sobald sie nach einem Checkpoint geändert werden, auch für nicht kritische Änderungen." +#: utils/misc/guc.c:1301 +#, fuzzy +#| msgid "cannot execute %s during recovery" +msgid "Prefetch referenced blocks during recovery." +msgstr "%s kann nicht während der Wiederherstellung ausgeführt werden" + +#: utils/misc/guc.c:1302 +msgid "Read ahead of the current replay position to find uncached blocks." +msgstr "" -#: utils/misc/guc.c:1288 +#: utils/misc/guc.c:1310 +msgid "Prefetch blocks that have full page images in the WAL." +msgstr "" + +#: utils/misc/guc.c:1311 +msgid "On some systems, there is no benefit to prefetching pages that will be entirely overwritten, but if the logical page size of the filesystem is larger than PostgreSQL's, this can be beneficial. This option has no effect unless recovery_prefetch is enabled." +msgstr "" + +#: utils/misc/guc.c:1323 +msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification." +msgstr "Schreibt volle Seiten in den WAL, sobald sie nach einem Checkpoint geändert werden, auch für eine nicht kritische Änderung." + +#: utils/misc/guc.c:1333 msgid "Compresses full-page writes written in WAL file." msgstr "Komprimiert in WAL-Dateien geschriebene volle Seiten." -#: utils/misc/guc.c:1298 +#: utils/misc/guc.c:1343 msgid "Writes zeroes to new WAL files before first use." msgstr "Schreibt Nullen in neue WAL-Dateien vor der ersten Verwendung." -#: utils/misc/guc.c:1308 +#: utils/misc/guc.c:1353 msgid "Recycles WAL files by renaming them." msgstr "WAL-Dateien werden durch Umbenennen wiederverwendet." -#: utils/misc/guc.c:1318 +#: utils/misc/guc.c:1363 msgid "Logs each checkpoint." msgstr "Schreibt jeden Checkpoint in den Log." -#: utils/misc/guc.c:1327 +#: utils/misc/guc.c:1372 msgid "Logs each successful connection." msgstr "Schreibt jede erfolgreiche Verbindung in den Log." -#: utils/misc/guc.c:1336 +#: utils/misc/guc.c:1381 msgid "Logs end of a session, including duration." msgstr "Schreibt jedes Verbindungsende mit Sitzungszeit in den Log." -#: utils/misc/guc.c:1345 +#: utils/misc/guc.c:1390 msgid "Logs each replication command." msgstr "Schreibt jeden Replikationsbefehl in den Log." -#: utils/misc/guc.c:1354 +#: utils/misc/guc.c:1399 msgid "Shows whether the running server has assertion checks enabled." msgstr "Zeigt, ob der laufende Server Assertion-Prüfungen aktiviert hat." -#: utils/misc/guc.c:1369 +#: utils/misc/guc.c:1414 msgid "Terminate session on any error." msgstr "Sitzung bei jedem Fehler abbrechen." -#: utils/misc/guc.c:1378 +#: utils/misc/guc.c:1423 msgid "Reinitialize server after backend crash." msgstr "Server nach Absturz eines Serverprozesses reinitialisieren." -#: utils/misc/guc.c:1388 +#: utils/misc/guc.c:1432 +#, fuzzy +#| msgid "Reinitialize server after backend crash." +msgid "Remove temporary files after backend crash." +msgstr "Server nach Absturz eines Serverprozesses reinitialisieren." + +#: utils/misc/guc.c:1442 msgid "Logs the duration of each completed SQL statement." msgstr "Loggt die Dauer jeder abgeschlossenen SQL-Anweisung." -#: utils/misc/guc.c:1397 +#: utils/misc/guc.c:1451 msgid "Logs each query's parse tree." msgstr "Scheibt den Parsebaum jeder Anfrage in den Log." -#: utils/misc/guc.c:1406 +#: utils/misc/guc.c:1460 msgid "Logs each query's rewritten parse tree." msgstr "Schreibt den umgeschriebenen Parsebaum jeder Anfrage in den Log." -#: utils/misc/guc.c:1415 +#: utils/misc/guc.c:1469 msgid "Logs each query's execution plan." msgstr "Schreibt den Ausführungsplan jeder Anfrage in den Log." -#: utils/misc/guc.c:1424 +#: utils/misc/guc.c:1478 msgid "Indents parse and plan tree displays." msgstr "Rückt die Anzeige von Parse- und Planbäumen ein." -#: utils/misc/guc.c:1433 +#: utils/misc/guc.c:1487 +#, fuzzy +#| msgid "unterminated quoted identifier" +msgid "Compute query identifiers." +msgstr "Bezeichner in Anführungszeichen nicht abgeschlossen" + +#: utils/misc/guc.c:1496 msgid "Writes parser performance statistics to the server log." msgstr "Schreibt Parser-Leistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1442 +#: utils/misc/guc.c:1505 msgid "Writes planner performance statistics to the server log." msgstr "Schreibt Planer-Leistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1451 +#: utils/misc/guc.c:1514 msgid "Writes executor performance statistics to the server log." msgstr "Schreibt Executor-Leistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1460 +#: utils/misc/guc.c:1523 msgid "Writes cumulative performance statistics to the server log." msgstr "Schreibt Gesamtleistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1470 +#: utils/misc/guc.c:1533 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Loggt Statistiken über Systemressourcen (Speicher und CPU) während diverser B-Baum-Operationen." -#: utils/misc/guc.c:1482 +#: utils/misc/guc.c:1545 msgid "Collects information about executing commands." msgstr "Sammelt Informationen über ausgeführte Befehle." -#: utils/misc/guc.c:1483 +#: utils/misc/guc.c:1546 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "Schaltet die Sammlung von Informationen über den aktuell ausgeführten Befehl jeder Sitzung ein, einschließlich der Zeit, and dem die Befehlsausführung begann." -#: utils/misc/guc.c:1493 +#: utils/misc/guc.c:1556 msgid "Collects statistics on database activity." msgstr "Sammelt Statistiken über Datenbankaktivität." -#: utils/misc/guc.c:1502 +#: utils/misc/guc.c:1565 msgid "Collects timing statistics for database I/O activity." msgstr "Sammelt Zeitmessungsstatistiken über Datenbank-I/O-Aktivität." -#: utils/misc/guc.c:1512 +#: utils/misc/guc.c:1574 +#, fuzzy +#| msgid "Collects timing statistics for database I/O activity." +msgid "Collects timing statistics for WAL I/O activity." +msgstr "Sammelt Zeitmessungsstatistiken über Datenbank-I/O-Aktivität." + +#: utils/misc/guc.c:1584 msgid "Updates the process title to show the active SQL command." msgstr "Der Prozesstitel wird aktualisiert, um den aktuellen SQL-Befehl anzuzeigen." -#: utils/misc/guc.c:1513 +#: utils/misc/guc.c:1585 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "Ermöglicht das Aktualisieren des Prozesstitels bei jedem von Server empfangenen neuen SQL-Befehl." -#: utils/misc/guc.c:1526 +#: utils/misc/guc.c:1598 msgid "Starts the autovacuum subprocess." msgstr "Startet den Autovacuum-Prozess." -#: utils/misc/guc.c:1536 +#: utils/misc/guc.c:1608 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Erzeugt Debug-Ausgabe für LISTEN und NOTIFY." -#: utils/misc/guc.c:1548 +#: utils/misc/guc.c:1620 msgid "Emits information about lock usage." msgstr "Gibt Informationen über Sperrenverwendung aus." -#: utils/misc/guc.c:1558 +#: utils/misc/guc.c:1630 msgid "Emits information about user lock usage." msgstr "Gibt Informationen über Benutzersperrenverwendung aus." -#: utils/misc/guc.c:1568 +#: utils/misc/guc.c:1640 msgid "Emits information about lightweight lock usage." msgstr "Gibt Informationen über die Verwendung von Lightweight Locks aus." -#: utils/misc/guc.c:1578 +#: utils/misc/guc.c:1650 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Gibt Informationen über alle aktuellen Sperren aus, wenn eine Verklemmung auftritt." -#: utils/misc/guc.c:1590 +#: utils/misc/guc.c:1662 msgid "Logs long lock waits." msgstr "Schreibt Meldungen über langes Warten auf Sperren in den Log." -#: utils/misc/guc.c:1600 +#: utils/misc/guc.c:1671 +#, fuzzy +#| msgid "abort reason: recovery conflict" +msgid "Logs standby recovery conflict waits." +msgstr "Abbruchgrund: Konflikt bei Wiederherstellung" + +#: utils/misc/guc.c:1680 msgid "Logs the host name in the connection logs." msgstr "Schreibt den Hostnamen jeder Verbindung in den Log." -#: utils/misc/guc.c:1601 +#: utils/misc/guc.c:1681 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "In der Standardeinstellung zeigen die Verbindungslogs nur die IP-Adresse der Clienthosts. Wenn Sie den Hostnamen auch anzeigen wollen, dann können Sie diese Option anschalten, aber je nachdem, wie Ihr DNS eingerichtet ist, kann das die Leistung nicht unerheblich beeinträchtigen." -#: utils/misc/guc.c:1612 +#: utils/misc/guc.c:1692 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Behandelt »ausdruck=NULL« als »ausdruck IS NULL«." -#: utils/misc/guc.c:1613 +#: utils/misc/guc.c:1693 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "Wenn an, dann werden Ausdrücke der Form ausdruck = NULL (oder NULL = ausdruck) wie ausdruck IS NULL behandelt, das heißt, sie ergeben wahr, wenn das Ergebnis von ausdruck der NULL-Wert ist, und ansonsten falsch. Das korrekte Verhalten von ausdruck = NULL ist immer den NULL-Wert (für unbekannt) zurückzugeben." -#: utils/misc/guc.c:1625 +#: utils/misc/guc.c:1705 msgid "Enables per-database user names." msgstr "Ermöglicht Datenbank-lokale Benutzernamen." -#: utils/misc/guc.c:1634 +#: utils/misc/guc.c:1714 msgid "Sets the default read-only status of new transactions." msgstr "Setzt den Standardwert für die Read-Only-Einstellung einer neuen Transaktion." -#: utils/misc/guc.c:1643 +#: utils/misc/guc.c:1724 msgid "Sets the current transaction's read-only status." msgstr "Setzt die Read-Only-Einstellung der aktuellen Transaktion." -#: utils/misc/guc.c:1653 +#: utils/misc/guc.c:1734 msgid "Sets the default deferrable status of new transactions." msgstr "Setzt den Standardwert für die Deferrable-Einstellung einer neuen Transaktion." -#: utils/misc/guc.c:1662 +#: utils/misc/guc.c:1743 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "Ob eine serialisierbare Read-Only-Transaktion aufgeschoben werden soll, bis sie ohne mögliche Serialisierungsfehler ausgeführt werden kann." -#: utils/misc/guc.c:1672 +#: utils/misc/guc.c:1753 msgid "Enable row security." msgstr "Schaltet Sicherheit auf Zeilenebene ein." -#: utils/misc/guc.c:1673 +#: utils/misc/guc.c:1754 msgid "When enabled, row security will be applied to all users." msgstr "Wenn eingeschaltet, wird Sicherheit auf Zeilenebene auf alle Benutzer angewendet." -#: utils/misc/guc.c:1681 -msgid "Check function bodies during CREATE FUNCTION." -msgstr "Prüft Funktionskörper bei der Ausführung von CREATE FUNCTION." +#: utils/misc/guc.c:1762 +msgid "Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE." +msgstr "Prüft Funktionskörper bei der Ausführung von CREATE FUNCTION und CREATE PROCEDURE." -#: utils/misc/guc.c:1690 +#: utils/misc/guc.c:1771 msgid "Enable input of NULL elements in arrays." msgstr "Ermöglicht die Eingabe von NULL-Elementen in Arrays." -#: utils/misc/guc.c:1691 +#: utils/misc/guc.c:1772 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "Wenn dies eingeschaltet ist, wird ein nicht gequotetes NULL in einem Array-Eingabewert als NULL-Wert interpretiert, ansonsten als Zeichenkette." -#: utils/misc/guc.c:1707 +#: utils/misc/guc.c:1788 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS wird nicht mehr unterstützt; kann nur auf falsch gesetzt werden." -#: utils/misc/guc.c:1717 +#: utils/misc/guc.c:1798 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "Startet einen Subprozess, um die Stderr-Ausgabe und/oder CSV-Logs in Logdateien auszugeben." -#: utils/misc/guc.c:1726 +#: utils/misc/guc.c:1807 msgid "Truncate existing log files of same name during log rotation." msgstr "Kürzt existierende Logdateien mit dem selben Namen beim Rotieren." -#: utils/misc/guc.c:1737 +#: utils/misc/guc.c:1818 msgid "Emit information about resource usage in sorting." msgstr "Gibt Informationen über die Ressourcenverwendung beim Sortieren aus." -#: utils/misc/guc.c:1751 +#: utils/misc/guc.c:1832 msgid "Generate debugging output for synchronized scanning." msgstr "Erzeugt Debug-Ausgabe für synchronisiertes Scannen." -#: utils/misc/guc.c:1766 +#: utils/misc/guc.c:1847 msgid "Enable bounded sorting using heap sort." msgstr "Ermöglicht Bounded Sorting mittels Heap-Sort." -#: utils/misc/guc.c:1779 +#: utils/misc/guc.c:1860 msgid "Emit WAL-related debugging output." msgstr "Gibt diverse Debug-Meldungen über WAL aus." -#: utils/misc/guc.c:1791 +#: utils/misc/guc.c:1872 msgid "Datetimes are integer based." msgstr "Datum/Zeit verwendet intern ganze Zahlen." -#: utils/misc/guc.c:1802 +#: utils/misc/guc.c:1883 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "Bestimmt, ob Groß-/Kleinschreibung bei Kerberos- und GSSAPI-Benutzernamen ignoriert werden soll." -#: utils/misc/guc.c:1812 +#: utils/misc/guc.c:1893 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Warnt bei Backslash-Escapes in normalen Zeichenkettenkonstanten." -#: utils/misc/guc.c:1822 +#: utils/misc/guc.c:1903 msgid "Causes '...' strings to treat backslashes literally." msgstr "Bewirkt, dass Zeichenketten der Art '...' Backslashes als normales Zeichen behandeln." -#: utils/misc/guc.c:1833 +#: utils/misc/guc.c:1914 msgid "Enable synchronized sequential scans." msgstr "Ermöglicht synchronisierte sequenzielle Scans." -#: utils/misc/guc.c:1843 -#, fuzzy -#| msgid "Sets the current transaction's read-only status." +#: utils/misc/guc.c:1924 msgid "Sets whether to include or exclude transaction with recovery target." -msgstr "Setzt die Read-Only-Einstellung der aktuellen Transaktion." +msgstr "Setzt ob die Transaktion mit dem Wiederherstellungsziel einbezogen oder ausgeschlossen wird." -#: utils/misc/guc.c:1853 +#: utils/misc/guc.c:1934 msgid "Allows connections and queries during recovery." msgstr "Erlaubt Verbindungen und Anfragen während der Wiederherstellung." -#: utils/misc/guc.c:1863 +#: utils/misc/guc.c:1944 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Erlaubt Rückmeldungen von einem Hot Standby an den Primärserver, um Anfragekonflikte zu vermeiden." -#: utils/misc/guc.c:1873 +#: utils/misc/guc.c:1954 +msgid "Shows whether hot standby is currently active." +msgstr "Zeigt, ob Hot Standby aktuell aktiv ist." + +#: utils/misc/guc.c:1965 msgid "Allows modifications of the structure of system tables." msgstr "Erlaubt Änderungen an der Struktur von Systemtabellen." -#: utils/misc/guc.c:1884 +#: utils/misc/guc.c:1976 msgid "Disables reading from system indexes." msgstr "Schaltet das Lesen aus Systemindexen ab." -#: utils/misc/guc.c:1885 +#: utils/misc/guc.c:1977 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "Das Aktualisieren der Indexe wird nicht verhindert, also ist die Verwendung unbedenklich. Schlimmstenfalls wird alles langsamer." -#: utils/misc/guc.c:1896 +#: utils/misc/guc.c:1988 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Schaltet den rückwärtskompatiblen Modus für Privilegienprüfungen bei Large Objects ein." -#: utils/misc/guc.c:1897 +#: utils/misc/guc.c:1989 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "Überspringt Privilegienprüfungen beim Lesen oder Ändern von Large Objects, zur Kompatibilität mit PostgreSQL-Versionen vor 9.0." -#: utils/misc/guc.c:1907 -msgid "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." -msgstr "Warnung ausgeben für Konstrukte, deren Bedeutung sich seit PostgreSQL 9.4 geändert hat." - -#: utils/misc/guc.c:1917 +#: utils/misc/guc.c:1999 msgid "When generating SQL fragments, quote all identifiers." msgstr "Wenn SQL-Fragmente erzeugt werden, alle Bezeichner quoten." -#: utils/misc/guc.c:1927 +#: utils/misc/guc.c:2009 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Zeigt, ob Datenprüfsummen in diesem Cluster angeschaltet sind." -#: utils/misc/guc.c:1938 +#: utils/misc/guc.c:2020 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Syslog-Nachrichten mit Sequenznummern versehen, um Unterdrückung doppelter Nachrichten zu unterbinden." -#: utils/misc/guc.c:1948 +#: utils/misc/guc.c:2030 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "An Syslog gesendete Nachrichten nach Zeilen und in maximal 1024 Bytes aufteilen." -#: utils/misc/guc.c:1958 +#: utils/misc/guc.c:2040 msgid "Controls whether Gather and Gather Merge also run subplans." -msgstr "" +msgstr "Kontrolliert, ob Gather und Gather Merge auch Subpläne ausführen." -#: utils/misc/guc.c:1959 -msgid "Should gather nodes also run subplans, or just gather tuples?" -msgstr "" +#: utils/misc/guc.c:2041 +msgid "Should gather nodes also run subplans or just gather tuples?" +msgstr "Sollen Gather-Knoten auch Subpläne ausführen oder nur Tupel sammeln?" -#: utils/misc/guc.c:1969 +#: utils/misc/guc.c:2051 msgid "Allow JIT compilation." msgstr "Erlaubt JIT-Kompilierung." -#: utils/misc/guc.c:1980 -msgid "Register JIT compiled function with debugger." -msgstr "" +#: utils/misc/guc.c:2062 +msgid "Register JIT-compiled functions with debugger." +msgstr "JIT-kompilierte Funktionen im Debugger registrieren." -#: utils/misc/guc.c:1997 +#: utils/misc/guc.c:2079 msgid "Write out LLVM bitcode to facilitate JIT debugging." -msgstr "" +msgstr "LLVM-Bitcode in Dateien schreiben, um Debuggen von JIT zu erleichtern." -#: utils/misc/guc.c:2008 +#: utils/misc/guc.c:2090 msgid "Allow JIT compilation of expressions." msgstr "Erlaubt JIT-Kompilierung von Ausdrücken." -#: utils/misc/guc.c:2019 -msgid "Register JIT compiled function with perf profiler." -msgstr "" +#: utils/misc/guc.c:2101 +msgid "Register JIT-compiled functions with perf profiler." +msgstr "JIT-kompilierte Funktionen im Profiler perf registrieren." -#: utils/misc/guc.c:2036 +#: utils/misc/guc.c:2118 msgid "Allow JIT compilation of tuple deforming." -msgstr "" +msgstr "Erlaubt JIT-Kompilierung von Tuple-Deforming." -#: utils/misc/guc.c:2047 +#: utils/misc/guc.c:2129 msgid "Whether to continue running after a failure to sync data files." msgstr "Ob nach fehlgeschlagenem Synchronisieren von Datendateien fortgesetzt werden soll." -#: utils/misc/guc.c:2056 +#: utils/misc/guc.c:2138 msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." -msgstr "" +msgstr "Bestimmt, ob der WAL-Receiver einen temporären Replikations-Slot erzeugen soll, wenn kein permanenter Slot konfiguriert ist." -#: utils/misc/guc.c:2074 +#: utils/misc/guc.c:2156 msgid "Forces a switch to the next WAL file if a new file has not been started within N seconds." msgstr "Erzwingt das Umschalten zur nächsten WAL-Datei, wenn seit N Sekunden keine neue Datei begonnen worden ist." -#: utils/misc/guc.c:2085 +#: utils/misc/guc.c:2167 msgid "Waits N seconds on connection startup after authentication." msgstr "Wartet beim Starten einer Verbindung N Sekunden nach der Authentifizierung." -#: utils/misc/guc.c:2086 utils/misc/guc.c:2644 +#: utils/misc/guc.c:2168 utils/misc/guc.c:2766 msgid "This allows attaching a debugger to the process." msgstr "Das ermöglicht es, einen Debugger in den Prozess einzuhängen." -#: utils/misc/guc.c:2095 +#: utils/misc/guc.c:2177 msgid "Sets the default statistics target." msgstr "Setzt das voreingestellte Statistikziel." -#: utils/misc/guc.c:2096 +#: utils/misc/guc.c:2178 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "Diese Einstellung gilt für Tabellenspalten, für die kein spaltenspezifisches Ziel mit ALTER TABLE SET STATISTICS gesetzt worden ist." -#: utils/misc/guc.c:2105 +#: utils/misc/guc.c:2187 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Setzt die Größe der FROM-Liste, ab der Unteranfragen nicht kollabiert werden." -#: utils/misc/guc.c:2107 +#: utils/misc/guc.c:2189 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "Der Planer bindet Unteranfragen in die übergeordneten Anfragen ein, wenn die daraus resultierende FROM-Liste nicht mehr als so viele Elemente haben würde." -#: utils/misc/guc.c:2118 +#: utils/misc/guc.c:2200 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Setzt die Größe der FROM-Liste, ab der JOIN-Konstrukte nicht aufgelöst werden." -#: utils/misc/guc.c:2120 +#: utils/misc/guc.c:2202 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "Der Planer löst ausdrückliche JOIN-Konstrukte in FROM-Listen auf, wenn die daraus resultierende FROM-Liste nicht mehr als so viele Elemente haben würde." -#: utils/misc/guc.c:2131 +#: utils/misc/guc.c:2213 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Setzt die Anzahl der Elemente in der FROM-Liste, ab der GEQO verwendet wird." -#: utils/misc/guc.c:2141 +#: utils/misc/guc.c:2223 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: wird für die Berechnung der Vorgabewerte anderer GEQO-Parameter verwendet." -#: utils/misc/guc.c:2151 +#: utils/misc/guc.c:2233 msgid "GEQO: number of individuals in the population." msgstr "GEQO: Anzahl der Individien in der Bevölkerung." -#: utils/misc/guc.c:2152 utils/misc/guc.c:2162 +#: utils/misc/guc.c:2234 utils/misc/guc.c:2244 msgid "Zero selects a suitable default value." msgstr "Null wählt einen passenden Vorgabewert." -#: utils/misc/guc.c:2161 +#: utils/misc/guc.c:2243 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: Anzahl der Iterationen im Algorithmus." -#: utils/misc/guc.c:2173 +#: utils/misc/guc.c:2255 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Setzt die Zeit, die gewartet wird, bis auf Verklemmung geprüft wird." -#: utils/misc/guc.c:2184 +#: utils/misc/guc.c:2266 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Setzt die maximale Verzögerung bevor Anfragen storniert werden, wenn ein Hot-Standby-Server archivierte WAL-Daten verarbeitet." -#: utils/misc/guc.c:2195 +#: utils/misc/guc.c:2277 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "Setzt die maximale Verzögerung bevor Anfragen storniert werden, wenn ein Hot-Standby-Server gestreamte WAL-Daten verarbeitet." -#: utils/misc/guc.c:2206 -#, fuzzy -#| msgid "cannot manipulate replication origins during recovery" +#: utils/misc/guc.c:2288 msgid "Sets the minimum delay for applying changes during recovery." -msgstr "Replication-Origins können nicht während der Wiederherstellung geändert werden" +msgstr "Setzt die minimale Verzögerung für das Einspielen von Änderungen während der Wiederherstellung." -#: utils/misc/guc.c:2217 -#, fuzzy -#| msgid "Sets the maximum interval between WAL receiver status reports to the primary." +#: utils/misc/guc.c:2299 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." -msgstr "Setzt das maximale Intervall zwischen Statusberichten des WAL-Receivers an den Primärserver." +msgstr "Setzt das maximale Intervall zwischen Statusberichten des WAL-Receivers an den sendenden Server." -#: utils/misc/guc.c:2228 -#, fuzzy -#| msgid "Sets the maximum wait time to receive data from the primary." +#: utils/misc/guc.c:2310 msgid "Sets the maximum wait time to receive data from the sending server." -msgstr "Setzt die maximale Zeit, um auf den Empfang von Daten vom Primärserver zu warten." +msgstr "Setzt die maximale Zeit, um auf den Empfang von Daten vom sendenden Server zu warten." -#: utils/misc/guc.c:2239 +#: utils/misc/guc.c:2321 msgid "Sets the maximum number of concurrent connections." msgstr "Setzt die maximale Anzahl gleichzeitiger Verbindungen." -#: utils/misc/guc.c:2250 +#: utils/misc/guc.c:2332 msgid "Sets the number of connection slots reserved for superusers." msgstr "Setzt die Anzahl der für Superuser reservierten Verbindungen." -#: utils/misc/guc.c:2264 +#: utils/misc/guc.c:2342 +#, fuzzy +#| msgid "could not map dynamic shared memory segment" +msgid "Amount of dynamic shared memory reserved at startup." +msgstr "konnte dynamisches Shared-Memory-Segment nicht mappen" + +#: utils/misc/guc.c:2357 msgid "Sets the number of shared memory buffers used by the server." msgstr "Setzt die Anzahl der vom Server verwendeten Shared-Memory-Puffer." -#: utils/misc/guc.c:2275 +#: utils/misc/guc.c:2368 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Setzt die maximale Anzahl der von jeder Sitzung verwendeten temporären Puffer." -#: utils/misc/guc.c:2286 +#: utils/misc/guc.c:2379 msgid "Sets the TCP port the server listens on." msgstr "Setzt den TCP-Port, auf dem der Server auf Verbindungen wartet." -#: utils/misc/guc.c:2296 +#: utils/misc/guc.c:2389 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Setzt die Zugriffsrechte für die Unix-Domain-Socket." -#: utils/misc/guc.c:2297 +#: utils/misc/guc.c:2390 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Unix-Domain-Sockets verwenden die üblichen Zugriffsrechte für Unix-Dateisysteme. Der Wert dieser Option muss ein numerischer Wert in der von den Systemaufrufen chmod und umask verwendeten Form sein. (Um das gebräuchliche Oktalformat zu verwenden, muss die Zahl mit 0 (einer Null) anfangen.)" -#: utils/misc/guc.c:2311 +#: utils/misc/guc.c:2404 msgid "Sets the file permissions for log files." msgstr "Setzt die Dateizugriffsrechte für Logdateien." -#: utils/misc/guc.c:2312 +#: utils/misc/guc.c:2405 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Der Wert dieser Option muss ein numerischer Wert in der von den Systemaufrufen chmod und umask verwendeten Form sein. (Um das gebräuchliche Oktalformat zu verwenden, muss die Zahl mit 0 (einer Null) anfangen.)" -#: utils/misc/guc.c:2326 -#, fuzzy -#| msgid "Sets the server's data directory." +#: utils/misc/guc.c:2419 msgid "Mode of the data directory." -msgstr "Setzt das Datenverzeichnis des Servers." +msgstr "Zugriffsrechte des Datenverzeichnisses." -#: utils/misc/guc.c:2327 -#, fuzzy -#| msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" +#: utils/misc/guc.c:2420 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Der Wert dieser Option muss ein numerischer Wert in der von den Systemaufrufen chmod und umask verwendeten Form sein. (Um das gebräuchliche Oktalformat zu verwenden, muss die Zahl mit 0 (einer Null) anfangen.)" -#: utils/misc/guc.c:2340 +#: utils/misc/guc.c:2433 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Setzt die maximale Speichergröße für Anfrage-Arbeitsbereiche." -#: utils/misc/guc.c:2341 +#: utils/misc/guc.c:2434 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "Gibt die Speichermenge an, die für interne Sortiervorgänge und Hashtabellen verwendet werden kann, bevor auf temporäre Dateien umgeschaltet wird." -#: utils/misc/guc.c:2353 +#: utils/misc/guc.c:2446 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Setzt die maximale Speichergröße für Wartungsoperationen." -#: utils/misc/guc.c:2354 +#: utils/misc/guc.c:2447 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Das schließt Operationen wie VACUUM und CREATE INDEX ein." -#: utils/misc/guc.c:2364 -#, fuzzy -#| msgid "Sets the maximum memory to be used for maintenance operations." +#: utils/misc/guc.c:2457 msgid "Sets the maximum memory to be used for logical decoding." -msgstr "Setzt die maximale Speichergröße für Wartungsoperationen." +msgstr "Setzt die maximale Speichergröße für logische Dekodierung." -#: utils/misc/guc.c:2365 -#, fuzzy -#| msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." +#: utils/misc/guc.c:2458 msgid "This much memory can be used by each internal reorder buffer before spilling to disk." -msgstr "Gibt die Speichermenge an, die für interne Sortiervorgänge und Hashtabellen verwendet werden kann, bevor auf temporäre Dateien umgeschaltet wird." +msgstr "Gibt die Speichermenge an, die für jeden internen Reorder-Puffer verwendet werden kann, bevor auf Festplatte ausgelagert wird." -#: utils/misc/guc.c:2381 +#: utils/misc/guc.c:2474 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Setzt die maximale Stackgröße, in Kilobytes." -#: utils/misc/guc.c:2392 +#: utils/misc/guc.c:2485 msgid "Limits the total size of all temporary files used by each process." msgstr "Beschränkt die Gesamtgröße aller temporären Dateien, die von einem Prozess verwendet werden." -#: utils/misc/guc.c:2393 +#: utils/misc/guc.c:2486 msgid "-1 means no limit." msgstr "-1 bedeutet keine Grenze." -#: utils/misc/guc.c:2403 +#: utils/misc/guc.c:2496 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Vacuum-Kosten für eine im Puffer-Cache gefundene Seite." -#: utils/misc/guc.c:2413 +#: utils/misc/guc.c:2506 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Vacuum-Kosten für eine nicht im Puffer-Cache gefundene Seite." -#: utils/misc/guc.c:2423 +#: utils/misc/guc.c:2516 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Vacuum-Kosten für eine durch Vacuum schmutzig gemachte Seite." -#: utils/misc/guc.c:2433 +#: utils/misc/guc.c:2526 msgid "Vacuum cost amount available before napping." msgstr "Verfügbare Vacuum-Kosten vor Nickerchen." -#: utils/misc/guc.c:2443 +#: utils/misc/guc.c:2536 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Verfügbare Vacuum-Kosten vor Nickerchen, für Autovacuum." -#: utils/misc/guc.c:2453 +#: utils/misc/guc.c:2546 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "Setzt die maximale Zahl gleichzeitig geöffneter Dateien für jeden Serverprozess." -#: utils/misc/guc.c:2466 +#: utils/misc/guc.c:2559 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Setzt die maximale Anzahl von gleichzeitig vorbereiteten Transaktionen." -#: utils/misc/guc.c:2477 +#: utils/misc/guc.c:2570 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Setzt die minimale Tabellen-OID für das Verfolgen von Sperren." -#: utils/misc/guc.c:2478 +#: utils/misc/guc.c:2571 msgid "Is used to avoid output on system tables." msgstr "Wird verwendet, um Ausgabe für Systemtabellen zu vermeiden." -#: utils/misc/guc.c:2487 +#: utils/misc/guc.c:2580 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Setzt die OID der Tabelle mit bedingungsloser Sperrenverfolgung." -#: utils/misc/guc.c:2499 +#: utils/misc/guc.c:2592 msgid "Sets the maximum allowed duration of any statement." msgstr "Setzt die maximal erlaubte Dauer jeder Anweisung." -#: utils/misc/guc.c:2500 utils/misc/guc.c:2511 utils/misc/guc.c:2522 +#: utils/misc/guc.c:2593 utils/misc/guc.c:2604 utils/misc/guc.c:2615 +#: utils/misc/guc.c:2626 msgid "A value of 0 turns off the timeout." msgstr "Der Wert 0 schaltet die Zeitprüfung aus." -#: utils/misc/guc.c:2510 +#: utils/misc/guc.c:2603 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Setzt die maximal erlaubte Dauer, um auf eine Sperre zu warten." -#: utils/misc/guc.c:2521 -msgid "Sets the maximum allowed duration of any idling transaction." +#: utils/misc/guc.c:2614 +#, fuzzy +#| msgid "Sets the maximum allowed duration of any idling transaction." +msgid "Sets the maximum allowed idle time between queries, when in a transaction." +msgstr "Setzt die maximal erlaubte Dauer einer inaktiven Transaktion." + +#: utils/misc/guc.c:2625 +#, fuzzy +#| msgid "Sets the maximum allowed duration of any idling transaction." +msgid "Sets the maximum allowed idle time between queries, when not in a transaction." msgstr "Setzt die maximal erlaubte Dauer einer inaktiven Transaktion." -#: utils/misc/guc.c:2532 +#: utils/misc/guc.c:2636 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Mindestalter, bei dem VACUUM eine Tabellenzeile einfrieren soll." -#: utils/misc/guc.c:2542 +#: utils/misc/guc.c:2646 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." -#: utils/misc/guc.c:2552 +#: utils/misc/guc.c:2656 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Mindestalter, bei dem VACUUM eine MultiXactId in einer Tabellenzeile einfrieren soll." -#: utils/misc/guc.c:2562 +#: utils/misc/guc.c:2666 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Multixact-Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." -#: utils/misc/guc.c:2572 +#: utils/misc/guc.c:2676 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Anzahl Transaktionen, um die VACUUM- und HOT-Aufräumen aufgeschoben werden soll." -#: utils/misc/guc.c:2585 +#: utils/misc/guc.c:2685 +#, fuzzy +#| msgid "Age at which VACUUM should scan whole table to freeze tuples." +msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." +msgstr "Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." + +#: utils/misc/guc.c:2694 +#, fuzzy +#| msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." +msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." +msgstr "Multixact-Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." + +#: utils/misc/guc.c:2707 msgid "Sets the maximum number of locks per transaction." msgstr "Setzt die maximale Anzahl Sperren pro Transaktion." -#: utils/misc/guc.c:2586 +#: utils/misc/guc.c:2708 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "Die globale Sperrentabelle wird mit der Annahme angelegt, das höchstens max_locks_per_transaction * max_connections verschiedene Objekte gleichzeitig gesperrt werden müssen." -#: utils/misc/guc.c:2597 +#: utils/misc/guc.c:2719 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Setzt die maximale Anzahl Prädikatsperren pro Transaktion." -#: utils/misc/guc.c:2598 +#: utils/misc/guc.c:2720 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "Die globale Prädikatsperrentabelle wird mit der Annahme angelegt, das höchstens max_pred_locks_per_transaction * max_connections verschiedene Objekte gleichzeitig gesperrt werden müssen." -#: utils/misc/guc.c:2609 +#: utils/misc/guc.c:2731 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "Setzt die maximale Anzahl Prädikatsperren für Seiten und Tupel pro Relation." -#: utils/misc/guc.c:2610 +#: utils/misc/guc.c:2732 msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." msgstr "Wenn mehr als diese Gesamtzahl Seiten und Tupel in der selben Relation von einer Verbindung gesperrt sind, werden diese Sperren durch eine Sperre auf Relationsebene ersetzt." -#: utils/misc/guc.c:2620 +#: utils/misc/guc.c:2742 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Setzt die maximale Anzahl Prädikatsperren für Tupel pro Seite." -#: utils/misc/guc.c:2621 +#: utils/misc/guc.c:2743 msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." msgstr "Wenn mehr als diese Anzahl Tupel auf der selben Seite von einer Verbindung gesperrt sind, werden diese Sperren durch eine Sperre auf Seitenebene ersetzt." -#: utils/misc/guc.c:2631 +#: utils/misc/guc.c:2753 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Setzt die maximale Zeit, um die Client-Authentifizierung zu beenden." -#: utils/misc/guc.c:2643 +#: utils/misc/guc.c:2765 msgid "Waits N seconds on connection startup before authentication." msgstr "Wartet beim Starten einer Verbindung N Sekunden vor der Authentifizierung." -#: utils/misc/guc.c:2654 -msgid "Sets the number of WAL files held for standby servers." -msgstr "Setzt die maximale Anzahl der für Standby-Server vorgehaltenen WAL-Dateien." +#: utils/misc/guc.c:2776 +msgid "Maximum buffer size for reading ahead in the WAL during recovery." +msgstr "" + +#: utils/misc/guc.c:2777 +msgid "This controls the maximum distance we can read ahead in the WAL to prefetch referenced blocks." +msgstr "" + +#: utils/misc/guc.c:2787 +msgid "Sets the size of WAL files held for standby servers." +msgstr "Setzt die Größe der für Standby-Server vorgehaltenen WAL-Dateien." -#: utils/misc/guc.c:2664 +#: utils/misc/guc.c:2798 msgid "Sets the minimum size to shrink the WAL to." msgstr "Setzt die minimale Größe, auf die der WAL geschrumpft wird." -#: utils/misc/guc.c:2676 +#: utils/misc/guc.c:2810 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Setzt die WAL-Größe, die einen Checkpoint auslöst." -#: utils/misc/guc.c:2688 +#: utils/misc/guc.c:2822 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Setzt die maximale Zeit zwischen automatischen WAL-Checkpoints." -#: utils/misc/guc.c:2699 +#: utils/misc/guc.c:2833 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "Schreibt eine Logmeldung, wenn Checkpoint-Segmente häufiger als dieser Wert gefüllt werden." -#: utils/misc/guc.c:2701 +#: utils/misc/guc.c:2835 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "Schreibe Meldung in den Serverlog, wenn Checkpoints, die durch Füllen der Checkpoint-Segmente ausgelöst werden, häufiger als dieser Wert in Sekunden passieren. Null schaltet die Warnung ab." -#: utils/misc/guc.c:2713 utils/misc/guc.c:2929 utils/misc/guc.c:2976 +#: utils/misc/guc.c:2847 utils/misc/guc.c:3063 utils/misc/guc.c:3111 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "Anzahl der Seiten, nach denen getätigte Schreibvorgänge auf die Festplatte zurückgeschrieben werden." -#: utils/misc/guc.c:2724 +#: utils/misc/guc.c:2858 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Setzt die Anzahl Diskseitenpuffer für WAL im Shared Memory." -#: utils/misc/guc.c:2735 +#: utils/misc/guc.c:2869 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Zeit zwischen WAL-Flush-Operationen im WAL-Writer." -#: utils/misc/guc.c:2746 +#: utils/misc/guc.c:2880 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Ein Flush wird ausgelöst, wenn diese Menge WAL vom WAL-Writer geschrieben worden ist." -#: utils/misc/guc.c:2757 -msgid "Size of new file to fsync instead of writing WAL." -msgstr "" +#: utils/misc/guc.c:2891 +#, fuzzy +#| msgid "Size of new file to fsync instead of writing WAL." +msgid "Minimum size of new file to fsync instead of writing WAL." +msgstr "Größe ab der neue Datei gefsynct wird statt WAL zu schreiben." -#: utils/misc/guc.c:2768 +#: utils/misc/guc.c:2902 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "Setzt die maximale Anzahl gleichzeitig laufender WAL-Sender-Prozesse." -#: utils/misc/guc.c:2779 +#: utils/misc/guc.c:2913 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Setzt die maximale Anzahl von gleichzeitig definierten Replikations-Slots." -#: utils/misc/guc.c:2789 -#, fuzzy -#| msgid "Sets the maximum number of simultaneously defined replication slots." +#: utils/misc/guc.c:2923 msgid "Sets the maximum WAL size that can be reserved by replication slots." -msgstr "Setzt die maximale Anzahl von gleichzeitig definierten Replikations-Slots." +msgstr "Setzt die maximale WAL-Größe, die von Replikations-Slots reserviert werden kann." -#: utils/misc/guc.c:2790 +#: utils/misc/guc.c:2924 msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." -msgstr "" +msgstr "Replikations-Slots werden als fehlgeschlagen markiert, und Segmente zum Löschen oder Wiederverwenden freigegeben, wenn so viel Platz von WAL auf der Festplatte belegt wird." -#: utils/misc/guc.c:2802 +#: utils/misc/guc.c:2936 msgid "Sets the maximum time to wait for WAL replication." msgstr "Setzt die maximale Zeit, um auf WAL-Replikation zu warten." -#: utils/misc/guc.c:2813 +#: utils/misc/guc.c:2947 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Setzt die Verzögerung in Millisekunden zwischen Transaktionsabschluss und dem Schreiben von WAL auf die Festplatte." -#: utils/misc/guc.c:2825 +#: utils/misc/guc.c:2959 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "Setzt die minimale Anzahl gleichzeitig offener Transaktionen bevor »commit_delay« angewendet wird." -#: utils/misc/guc.c:2836 +#: utils/misc/guc.c:2970 msgid "Sets the number of digits displayed for floating-point values." msgstr "Setzt die Anzahl ausgegebener Ziffern für Fließkommawerte." -#: utils/misc/guc.c:2837 -#, fuzzy -#| msgid "This affects real, double precision, and geometric data types. The parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate)." +#: utils/misc/guc.c:2971 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." -msgstr "Diese Einstellung betrifft real, double precision und geometrische Datentypen. Der Parameterwert wird zur Standardziffernanzahl (FLT_DIG bzw. DBL_DIG) hinzuaddiert." +msgstr "Diese Einstellung betrifft real, double precision und geometrische Datentypen. Null oder ein negativer Parameterwert wird zur Standardziffernanzahl (FLT_DIG bzw. DBL_DIG) hinzuaddiert. Ein Wert größer als Null wählt präzisen Ausgabemodus." -#: utils/misc/guc.c:2849 -#, fuzzy -#| msgid "Sets the minimum execution time above which statements will be logged." +#: utils/misc/guc.c:2983 msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." -msgstr "Setzt die minimale Ausführungszeit, über der Anweisungen geloggt werden." +msgstr "Setzt die minimale Ausführungszeit, über der Stichproben aller Anweisungen geloggt werden. Die Stichproben werden durch log_statement_sample_rate bestimmt." -#: utils/misc/guc.c:2852 -#, fuzzy -#| msgid "Zero prints all queries. -1 turns this feature off." -msgid "Zero log a sample of all queries. -1 turns this feature off." -msgstr "Null zeigt alle Anfragen. -1 schaltet dieses Feature aus." +#: utils/misc/guc.c:2986 +msgid "Zero logs a sample of all queries. -1 turns this feature off." +msgstr "Null loggt eine Stichprobe aller Anfragen. -1 schaltet dieses Feature aus." -#: utils/misc/guc.c:2862 -#, fuzzy -#| msgid "Sets the minimum execution time above which statements will be logged." +#: utils/misc/guc.c:2996 msgid "Sets the minimum execution time above which all statements will be logged." -msgstr "Setzt die minimale Ausführungszeit, über der Anweisungen geloggt werden." +msgstr "Setzt die minimale Ausführungszeit, über der alle Anweisungen geloggt werden." -#: utils/misc/guc.c:2864 +#: utils/misc/guc.c:2998 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Null zeigt alle Anfragen. -1 schaltet dieses Feature aus." -#: utils/misc/guc.c:2874 +#: utils/misc/guc.c:3008 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "Setzt die minimale Ausführungszeit, über der Autovacuum-Aktionen geloggt werden." -#: utils/misc/guc.c:2876 +#: utils/misc/guc.c:3010 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Null gibt alls Aktionen aus. -1 schaltet die Log-Aufzeichnung über Autovacuum aus." -#: utils/misc/guc.c:2886 +#: utils/misc/guc.c:3020 msgid "When logging statements, limit logged parameter values to first N bytes." -msgstr "" +msgstr "Wenn Anweisungen geloggt werden, die geloggten Parameterwerte auf die ersten N Bytes begrenzen." -#: utils/misc/guc.c:2887 utils/misc/guc.c:2898 +#: utils/misc/guc.c:3021 utils/misc/guc.c:3032 msgid "-1 to print values in full." -msgstr "" +msgstr "-1 um die Werte vollständig auszugeben." -#: utils/misc/guc.c:2897 +#: utils/misc/guc.c:3031 msgid "When reporting an error, limit logged parameter values to first N bytes." -msgstr "" +msgstr "Wenn ein Fehler ausgegeben wird, die geloggten Parameterwerte auf die ersten N Bytes begrenzen." -#: utils/misc/guc.c:2908 +#: utils/misc/guc.c:3042 msgid "Background writer sleep time between rounds." msgstr "Schlafzeit zwischen Durchläufen des Background-Writers." -#: utils/misc/guc.c:2919 +#: utils/misc/guc.c:3053 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Maximale Anzahl der vom Background-Writer pro Durchlauf zu flushenden LRU-Seiten." -#: utils/misc/guc.c:2942 +#: utils/misc/guc.c:3076 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Anzahl simultaner Anfragen, die das Festplattensubsystem effizient bearbeiten kann." -#: utils/misc/guc.c:2943 -msgid "For RAID arrays, this should be approximately the number of drive spindles in the array." -msgstr "Für RAID-Arrays sollte dies ungefähr die Anzahl Spindeln im Array sein." - -#: utils/misc/guc.c:2960 +#: utils/misc/guc.c:3094 msgid "A variant of effective_io_concurrency that is used for maintenance work." -msgstr "" +msgstr "Eine Variante von effective_io_concurrency, die für Wartungsarbeiten verwendet wird." -#: utils/misc/guc.c:2989 +#: utils/misc/guc.c:3124 msgid "Maximum number of concurrent worker processes." msgstr "Maximale Anzahl gleichzeitiger Worker-Prozesse." -#: utils/misc/guc.c:3001 +#: utils/misc/guc.c:3136 msgid "Maximum number of logical replication worker processes." msgstr "Maximale Anzahl Arbeitsprozesse für logische Replikation." -#: utils/misc/guc.c:3013 +#: utils/misc/guc.c:3148 msgid "Maximum number of table synchronization workers per subscription." msgstr "Maximale Anzahl Arbeitsprozesse für Tabellensynchronisation pro Subskription." -#: utils/misc/guc.c:3023 +#: utils/misc/guc.c:3158 msgid "Automatic log file rotation will occur after N minutes." msgstr "Automatische Rotation der Logdateien geschieht nach N Minuten." -#: utils/misc/guc.c:3034 +#: utils/misc/guc.c:3169 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "Automatische Rotation der Logdateien geschieht nach N Kilobytes." -#: utils/misc/guc.c:3045 +#: utils/misc/guc.c:3180 msgid "Shows the maximum number of function arguments." msgstr "Setzt die maximale Anzahl von Funktionsargumenten." -#: utils/misc/guc.c:3056 +#: utils/misc/guc.c:3191 msgid "Shows the maximum number of index keys." msgstr "Zeigt die maximale Anzahl von Indexschlüsseln." -#: utils/misc/guc.c:3067 +#: utils/misc/guc.c:3202 msgid "Shows the maximum identifier length." msgstr "Zeigt die maximale Länge von Bezeichnern." -#: utils/misc/guc.c:3078 +#: utils/misc/guc.c:3213 msgid "Shows the size of a disk block." msgstr "Zeigt die Größe eines Diskblocks." -#: utils/misc/guc.c:3089 +#: utils/misc/guc.c:3224 msgid "Shows the number of pages per disk file." msgstr "Zeigt die Anzahl Seiten pro Diskdatei." -#: utils/misc/guc.c:3100 +#: utils/misc/guc.c:3235 msgid "Shows the block size in the write ahead log." msgstr "Zeigt die Blockgröße im Write-Ahead-Log." -#: utils/misc/guc.c:3111 +#: utils/misc/guc.c:3246 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Setzt die Zeit, die gewartet wird, bevor nach einem fehlgeschlagenen Versuch neue WAL-Daten angefordert werden." -#: utils/misc/guc.c:3123 -#, fuzzy -#| msgid "Shows the number of pages per write ahead log segment." +#: utils/misc/guc.c:3258 msgid "Shows the size of write ahead log segments." -msgstr "Zeit die Anzahl Seiten pro Write-Ahead-Log-Segment." +msgstr "Zeigt die Größe eines Write-Ahead-Log-Segments." -#: utils/misc/guc.c:3136 +#: utils/misc/guc.c:3271 msgid "Time to sleep between autovacuum runs." msgstr "Wartezeit zwischen Autovacuum-Durchläufen." -#: utils/misc/guc.c:3146 +#: utils/misc/guc.c:3281 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Mindestanzahl an geänderten oder gelöschten Tupeln vor einem Vacuum." -#: utils/misc/guc.c:3155 -#, fuzzy -#| msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." -msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums" -msgstr "Mindestanzahl an Einfüge-, Änderungs- oder Löschoperationen von einem Analyze." +#: utils/misc/guc.c:3290 +msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." +msgstr "Mindestanzahl an Einfügeoperationen vor einem Vacuum, oder -1 um auszuschalten." -#: utils/misc/guc.c:3164 +#: utils/misc/guc.c:3299 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." -msgstr "Mindestanzahl an Einfüge-, Änderungs- oder Löschoperationen von einem Analyze." +msgstr "Mindestanzahl an Einfüge-, Änderungs- oder Löschoperationen vor einem Analyze." -#: utils/misc/guc.c:3174 +#: utils/misc/guc.c:3309 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Alter, nach dem eine Tabelle automatisch gevacuumt wird, um Transaktionsnummernüberlauf zu verhindern." -#: utils/misc/guc.c:3185 +#: utils/misc/guc.c:3323 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Multixact-Alter, nach dem eine Tabelle automatisch gevacuumt wird, um Transaktionsnummernüberlauf zu verhindern." -#: utils/misc/guc.c:3195 +#: utils/misc/guc.c:3333 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Setzt die maximale Anzahl gleichzeitig laufender Autovacuum-Worker-Prozesse." -#: utils/misc/guc.c:3205 -#, fuzzy -#| msgid "Sets the maximum number of parallel processes per executor node." +#: utils/misc/guc.c:3343 msgid "Sets the maximum number of parallel processes per maintenance operation." -msgstr "Setzt die maximale Anzahl paralleler Prozesse pro Executor-Knoten." +msgstr "Setzt die maximale Anzahl paralleler Prozesse pro Wartungsoperation." -#: utils/misc/guc.c:3215 +#: utils/misc/guc.c:3353 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Setzt die maximale Anzahl paralleler Prozesse pro Executor-Knoten." -#: utils/misc/guc.c:3226 +#: utils/misc/guc.c:3364 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "Setzt die maximale Anzahl paralleler Arbeitsprozesse, die gleichzeitig aktiv sein können." -#: utils/misc/guc.c:3237 +#: utils/misc/guc.c:3375 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Setzt die maximale Speichergröße für jeden Autovacuum-Worker-Prozess." -#: utils/misc/guc.c:3248 +#: utils/misc/guc.c:3386 msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." msgstr "Zeit bevor ein Snapshot zu alt ist, um Seiten zu lesen, die geändert wurden, nachdem der Snapshot gemacht wurde." -#: utils/misc/guc.c:3249 +#: utils/misc/guc.c:3387 msgid "A value of -1 disables this feature." msgstr "Der Wert -1 schaltet dieses Feature aus." -#: utils/misc/guc.c:3259 +#: utils/misc/guc.c:3397 msgid "Time between issuing TCP keepalives." msgstr "Zeit zwischen TCP-Keepalive-Sendungen." -#: utils/misc/guc.c:3260 utils/misc/guc.c:3271 utils/misc/guc.c:3395 +#: utils/misc/guc.c:3398 utils/misc/guc.c:3409 utils/misc/guc.c:3533 msgid "A value of 0 uses the system default." msgstr "Der Wert 0 verwendet die Systemvoreinstellung." -#: utils/misc/guc.c:3270 +#: utils/misc/guc.c:3408 msgid "Time between TCP keepalive retransmits." msgstr "Zeit zwischen TCP-Keepalive-Neuübertragungen." -#: utils/misc/guc.c:3281 +#: utils/misc/guc.c:3419 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "SSL-Renegotiation wird nicht mehr unterstützt; kann nur auf 0 gesetzt werden." -#: utils/misc/guc.c:3292 +#: utils/misc/guc.c:3430 msgid "Maximum number of TCP keepalive retransmits." msgstr "Maximale Anzahl an TCP-Keepalive-Neuübertragungen." -#: utils/misc/guc.c:3293 +#: utils/misc/guc.c:3431 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "Dies bestimmt die Anzahl von aufeinanderfolgenden Keepalive-Neuübertragungen, die verloren gehen dürfen, bis die Verbindung als tot betrachtet wird. Der Wert 0 verwendet die Betriebssystemvoreinstellung." -#: utils/misc/guc.c:3304 +#: utils/misc/guc.c:3442 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Setzt die maximal erlaubte Anzahl Ergebnisse für eine genaue Suche mit GIN." -#: utils/misc/guc.c:3315 +#: utils/misc/guc.c:3453 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Setzt die Annahme des Planers über die Gesamtgröße der Daten-Caches." -#: utils/misc/guc.c:3316 +#: utils/misc/guc.c:3454 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "Das heißt, die Gesamtgröße der Caches (Kernel-Cache und Shared Buffers), die für Datendateien von PostgreSQL verwendet wird. Das wird in Diskseiten gemessen, welche normalerweise 8 kB groß sind." -#: utils/misc/guc.c:3327 +#: utils/misc/guc.c:3465 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Setzt die Mindestmenge an Tabellendaten für einen parallelen Scan." -#: utils/misc/guc.c:3328 +#: utils/misc/guc.c:3466 msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." msgstr "Wenn der Planer schätzt, dass zu wenige Tabellenseiten gelesen werden werden um diesen Wert zu erreichen, dann wird kein paralleler Scan in Erwägung gezogen werden." -#: utils/misc/guc.c:3338 +#: utils/misc/guc.c:3476 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Setzt die Mindestmenge an Indexdaten für einen parallelen Scan." -#: utils/misc/guc.c:3339 +#: utils/misc/guc.c:3477 msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." msgstr "Wenn der Planer schätzt, dass zu wenige Indexseiten gelesen werden werden um diesen Wert zu erreichen, dann wird kein paralleler Scan in Erwägung gezogen werden." -#: utils/misc/guc.c:3350 +#: utils/misc/guc.c:3488 msgid "Shows the server version as an integer." msgstr "Zeigt die Serverversion als Zahl." -#: utils/misc/guc.c:3361 +#: utils/misc/guc.c:3499 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "Schreibt Meldungen über die Verwendung von temporären Dateien in den Log, wenn sie größer als diese Anzahl an Kilobytes sind." -#: utils/misc/guc.c:3362 +#: utils/misc/guc.c:3500 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "Null loggt alle Dateien. Die Standardeinstellung ist -1 (wodurch dieses Feature ausgeschaltet wird)." -#: utils/misc/guc.c:3372 +#: utils/misc/guc.c:3510 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Setzt die für pg_stat_activity.query reservierte Größe, in Bytes." -#: utils/misc/guc.c:3383 +#: utils/misc/guc.c:3521 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Setzt die maximale Größe der Pending-Liste eines GIN-Index." -#: utils/misc/guc.c:3394 +#: utils/misc/guc.c:3532 msgid "TCP user timeout." +msgstr "TCP-User-Timeout." + +#: utils/misc/guc.c:3543 +msgid "The size of huge page that should be requested." msgstr "" -#: utils/misc/guc.c:3414 +#: utils/misc/guc.c:3554 +msgid "Aggressively invalidate system caches for debugging purposes." +msgstr "" + +#: utils/misc/guc.c:3577 +#, fuzzy +#| msgid "Sets the maximum interval between WAL receiver status reports to the sending server." +msgid "Sets the time interval between checks for disconnection while running queries." +msgstr "Setzt das maximale Intervall zwischen Statusberichten des WAL-Receivers an den sendenden Server." + +#: utils/misc/guc.c:3597 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "Setzt den vom Planer geschätzten Aufwand, um eine sequenzielle Diskseite zu lesen." -#: utils/misc/guc.c:3425 +#: utils/misc/guc.c:3608 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "Setzt den vom Planer geschätzten Aufwand, um eine nichtsequenzielle Diskseite zu lesen." -#: utils/misc/guc.c:3436 +#: utils/misc/guc.c:3619 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "Setzt den vom Planer geschätzten Aufwand für die Verarbeitung einer Zeile." -#: utils/misc/guc.c:3447 +#: utils/misc/guc.c:3630 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "Setzt den vom Planer geschätzten Aufwand für die Verarbeitung eines Indexeintrags während eines Index-Scans." -#: utils/misc/guc.c:3458 +#: utils/misc/guc.c:3641 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "Setzt den vom Planer geschätzten Aufwand für die Verarbeitung eines Operators oder Funktionsaufrufs." -#: utils/misc/guc.c:3469 -msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." +#: utils/misc/guc.c:3652 +#, fuzzy +#| msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." +msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to leader backend." msgstr "Setzt den vom Planer geschätzten Aufwand, um eine Zeile vom Arbeitsprozess and das Master-Backend zu senden." -#: utils/misc/guc.c:3480 +#: utils/misc/guc.c:3663 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "Setzt den vom Planer geschätzten Aufwand für das Starten von Arbeitsprozessen für parallele Anfragen." -#: utils/misc/guc.c:3492 +#: utils/misc/guc.c:3675 msgid "Perform JIT compilation if query is more expensive." -msgstr "" +msgstr "JIT-Kompilierung durchführen, wenn die Anfrage teurer ist." -#: utils/misc/guc.c:3493 +#: utils/misc/guc.c:3676 msgid "-1 disables JIT compilation." -msgstr "" +msgstr "-1 schaltet JIT-Kompilierung aus." -#: utils/misc/guc.c:3503 -msgid "Optimize JITed functions if query is more expensive." -msgstr "" +#: utils/misc/guc.c:3686 +msgid "Optimize JIT-compiled functions if query is more expensive." +msgstr "JIT-kompilierte Funktionen optimieren, wenn die Anfrage teurer ist." -#: utils/misc/guc.c:3504 -#, fuzzy -#| msgid "Enables genetic query optimization." +#: utils/misc/guc.c:3687 msgid "-1 disables optimization." -msgstr "Ermöglicht genetische Anfrageoptimierung." +msgstr "-1 schaltet Optimierung aus." -#: utils/misc/guc.c:3514 +#: utils/misc/guc.c:3697 msgid "Perform JIT inlining if query is more expensive." -msgstr "" +msgstr "JIT-Inlining durchführen, wenn die Anfrage teurer ist." -#: utils/misc/guc.c:3515 +#: utils/misc/guc.c:3698 msgid "-1 disables inlining." -msgstr "" +msgstr "-1 schaltet Inlining aus." -#: utils/misc/guc.c:3525 +#: utils/misc/guc.c:3708 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Setzt den vom Planer geschätzten Anteil der Cursor-Zeilen, die ausgelesen werden werden." -#: utils/misc/guc.c:3537 +#: utils/misc/guc.c:3720 msgid "GEQO: selective pressure within the population." msgstr "GEQO: selektiver Auswahldruck in der Bevölkerung." -#: utils/misc/guc.c:3548 +#: utils/misc/guc.c:3731 msgid "GEQO: seed for random path selection." msgstr "GEQO: Ausgangswert für die zufällige Pfadauswahl." -#: utils/misc/guc.c:3559 +#: utils/misc/guc.c:3742 +msgid "Multiple of work_mem to use for hash tables." +msgstr "Vielfaches von work_mem zur Verwendung bei Hash-Tabellen." + +#: utils/misc/guc.c:3753 msgid "Multiple of the average buffer usage to free per round." msgstr "Vielfaches der durchschnittlichen freizugebenden Pufferverwendung pro Runde." -#: utils/misc/guc.c:3569 +#: utils/misc/guc.c:3763 msgid "Sets the seed for random-number generation." msgstr "Setzt den Ausgangswert für die Zufallszahlenerzeugung." -#: utils/misc/guc.c:3580 +#: utils/misc/guc.c:3774 msgid "Vacuum cost delay in milliseconds." msgstr "Vacuum-Kosten-Verzögerung in Millisekunden." -#: utils/misc/guc.c:3591 +#: utils/misc/guc.c:3785 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Vacuum-Kosten-Verzögerung in Millisekunden, für Autovacuum." -#: utils/misc/guc.c:3602 +#: utils/misc/guc.c:3796 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Anzahl geänderter oder gelöschter Tupel vor einem Vacuum, relativ zu reltuples." -#: utils/misc/guc.c:3612 -#, fuzzy -#| msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." +#: utils/misc/guc.c:3806 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." -msgstr "Anzahl geänderter oder gelöschter Tupel vor einem Vacuum, relativ zu reltuples." +msgstr "Anzahl eingefügter Tupel vor einem Vacuum, relativ zu reltuples." -#: utils/misc/guc.c:3622 +#: utils/misc/guc.c:3816 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Anzahl eingefügter, geänderter oder gelöschter Tupel vor einem Analyze, relativ zu reltuples." -#: utils/misc/guc.c:3632 +#: utils/misc/guc.c:3826 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "Zeit, die damit verbracht wird, modifizierte Puffer während eines Checkpoints zurückzuschreiben, als Bruchteil des Checkpoint-Intervalls." -#: utils/misc/guc.c:3642 -#, fuzzy -#| msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." -msgid "Number of tuple inserts prior to index cleanup as a fraction of reltuples." -msgstr "Anzahl geänderter oder gelöschter Tupel vor einem Vacuum, relativ zu reltuples." - -#: utils/misc/guc.c:3652 +#: utils/misc/guc.c:3836 msgid "Fraction of statements exceeding log_min_duration_sample to be logged." -msgstr "" +msgstr "Anteil der zu loggenden Anweisungen, die log_min_duration_sample überschreiten." -#: utils/misc/guc.c:3653 +#: utils/misc/guc.c:3837 msgid "Use a value between 0.0 (never log) and 1.0 (always log)." -msgstr "" +msgstr "Verwenden Sie einen Wert zwischen 0.0 (nie loggen) und 1.0 (immer loggen)." -#: utils/misc/guc.c:3662 +#: utils/misc/guc.c:3846 #, fuzzy -#| msgid "Sets the transaction isolation level of each new transaction." -msgid "Set the fraction of transactions to log for new transactions." -msgstr "Setzt den Transaktionsisolationsgrad neuer Transaktionen." +#| msgid "Sets the fraction of transactions to log for new transactions." +msgid "Sets the fraction of transactions from which to log all statements." +msgstr "Setzt den Bruchteil zu loggender Transaktionen." -#: utils/misc/guc.c:3663 -msgid "Logs all statements from a fraction of transactions. Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." -msgstr "" +#: utils/misc/guc.c:3847 +#, fuzzy +#| msgid "Logs all statements from a fraction of transactions. Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." +msgid "Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." +msgstr "Loggt alle Anweisungen in einem Bruchteil der Transaktionen. Verwenden Sie einen Wert zwischen 0.0 (nie loggen) und 1.0 (alle Anweisungen für alle Transaktionen loggen)." -#: utils/misc/guc.c:3683 +#: utils/misc/guc.c:3866 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Setzt den Shell-Befehl, der aufgerufen wird, um eine WAL-Datei zu archivieren." -#: utils/misc/guc.c:3693 -#, fuzzy -#| msgid "Sets the shell command that will be called to archive a WAL file." -msgid "Sets the shell command that will retrieve an archived WAL file." -msgstr "Setzt den Shell-Befehl, der aufgerufen wird, um eine WAL-Datei zu archivieren." +#: utils/misc/guc.c:3876 +msgid "Sets the shell command that will be called to retrieve an archived WAL file." +msgstr "Setzt den Shell-Befehl, der aufgerufen wird, um eine archivierte WAL-Datei zurückzuholen." -#: utils/misc/guc.c:3703 -#, fuzzy -#| msgid "Sets the shell command that will be called to archive a WAL file." +#: utils/misc/guc.c:3886 msgid "Sets the shell command that will be executed at every restart point." -msgstr "Setzt den Shell-Befehl, der aufgerufen wird, um eine WAL-Datei zu archivieren." +msgstr "Setzt den Shell-Befehl, der bei jedem Restart-Punkt ausgeführt wird." -#: utils/misc/guc.c:3713 -#, fuzzy -#| msgid "Sets the shell command that will be called to archive a WAL file." +#: utils/misc/guc.c:3896 msgid "Sets the shell command that will be executed once at the end of recovery." -msgstr "Setzt den Shell-Befehl, der aufgerufen wird, um eine WAL-Datei zu archivieren." +msgstr "Setzt den Shell-Befehl, der einmal am Ende der Wiederherstellung ausgeführt wird." -#: utils/misc/guc.c:3723 +#: utils/misc/guc.c:3906 msgid "Specifies the timeline to recover into." -msgstr "" +msgstr "Gibt die Zeitleiste für die Wiederherstellung an." -#: utils/misc/guc.c:3733 +#: utils/misc/guc.c:3916 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." -msgstr "" +msgstr "Auf »immediate« setzen, um die Wiederherstellung zu beenden, sobald ein konsistenter Zustand erreicht ist." -#: utils/misc/guc.c:3742 +#: utils/misc/guc.c:3925 msgid "Sets the transaction ID up to which recovery will proceed." -msgstr "" +msgstr "Setzt die Transaktions-ID, bis zu der die Wiederherstellung voranschreiten wird." -#: utils/misc/guc.c:3751 +#: utils/misc/guc.c:3934 msgid "Sets the time stamp up to which recovery will proceed." -msgstr "" +msgstr "Setzt den Zeitstempel, bis zu dem die Wiederherstellung voranschreiten wird." -#: utils/misc/guc.c:3760 +#: utils/misc/guc.c:3943 msgid "Sets the named restore point up to which recovery will proceed." -msgstr "" +msgstr "Setzt den benannten Restore-Punkt, bis zu dem die Wiederherstellung voranschreiten wird." -#: utils/misc/guc.c:3769 +#: utils/misc/guc.c:3952 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." -msgstr "" +msgstr "Setzt die LSN der Write-Ahead-Log-Position, bis zu der die Wiederherstellung voranschreiten wird." -#: utils/misc/guc.c:3779 +#: utils/misc/guc.c:3962 msgid "Specifies a file name whose presence ends recovery in the standby." -msgstr "" +msgstr "Gibt einen Dateinamen an, dessen Präsenz die Wiederherstellung im Standby beendet." -#: utils/misc/guc.c:3789 +#: utils/misc/guc.c:3972 msgid "Sets the connection string to be used to connect to the sending server." -msgstr "" +msgstr "Setzt die Verbindungszeichenkette zur Verbindung mit dem sendenden Server." -#: utils/misc/guc.c:3800 -#, fuzzy -#| msgid "Sets the number of connection slots reserved for superusers." +#: utils/misc/guc.c:3983 msgid "Sets the name of the replication slot to use on the sending server." -msgstr "Setzt die Anzahl der für Superuser reservierten Verbindungen." +msgstr "Setzt den Namen des zu verwendenden Replikations-Slots auf dem sendenden Server." -#: utils/misc/guc.c:3810 +#: utils/misc/guc.c:3993 msgid "Sets the client's character set encoding." msgstr "Setzt die Zeichensatzkodierung des Clients." -#: utils/misc/guc.c:3821 +#: utils/misc/guc.c:4004 msgid "Controls information prefixed to each log line." msgstr "Bestimmt die Informationen, die vor jede Logzeile geschrieben werden." -#: utils/misc/guc.c:3822 +#: utils/misc/guc.c:4005 msgid "If blank, no prefix is used." msgstr "Wenn leer, dann wird kein Präfix verwendet." -#: utils/misc/guc.c:3831 +#: utils/misc/guc.c:4014 msgid "Sets the time zone to use in log messages." msgstr "Setzt die in Logmeldungen verwendete Zeitzone." -#: utils/misc/guc.c:3841 +#: utils/misc/guc.c:4024 msgid "Sets the display format for date and time values." msgstr "Setzt das Ausgabeformat für Datums- und Zeitwerte." -#: utils/misc/guc.c:3842 +#: utils/misc/guc.c:4025 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Kontrolliert auch die Interpretation von zweideutigen Datumseingaben." -#: utils/misc/guc.c:3853 -#, fuzzy -#| msgid "Sets the default tablespace to create tables and indexes in." +#: utils/misc/guc.c:4036 msgid "Sets the default table access method for new tables." -msgstr "Setzt den Standard-Tablespace für Tabellen und Indexe." +msgstr "Setzt die Standard-Tabellenzugriffsmethode für neue Tabellen." -#: utils/misc/guc.c:3864 +#: utils/misc/guc.c:4047 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Setzt den Standard-Tablespace für Tabellen und Indexe." -#: utils/misc/guc.c:3865 +#: utils/misc/guc.c:4048 msgid "An empty string selects the database's default tablespace." msgstr "Eine leere Zeichenkette wählt den Standard-Tablespace der Datenbank." -#: utils/misc/guc.c:3875 +#: utils/misc/guc.c:4058 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "Setzt den oder die Tablespaces für temporäre Tabellen und Sortierdateien." -#: utils/misc/guc.c:3886 +#: utils/misc/guc.c:4069 msgid "Sets the path for dynamically loadable modules." msgstr "Setzt den Pfad für ladbare dynamische Bibliotheken." -#: utils/misc/guc.c:3887 +#: utils/misc/guc.c:4070 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "Wenn ein dynamisch ladbares Modul geöffnet werden muss und der angegebene Name keine Verzeichniskomponente hat (das heißt er enthält keinen Schrägstrich), dann sucht das System in diesem Pfad nach der angegebenen Datei." -#: utils/misc/guc.c:3900 +#: utils/misc/guc.c:4083 msgid "Sets the location of the Kerberos server key file." msgstr "Setzt den Ort der Kerberos-Server-Schlüsseldatei." -#: utils/misc/guc.c:3911 +#: utils/misc/guc.c:4094 msgid "Sets the Bonjour service name." msgstr "Setzt den Bonjour-Servicenamen." -#: utils/misc/guc.c:3923 +#: utils/misc/guc.c:4106 msgid "Shows the collation order locale." msgstr "Zeigt die Locale für die Sortierreihenfolge." -#: utils/misc/guc.c:3934 +#: utils/misc/guc.c:4117 msgid "Shows the character classification and case conversion locale." msgstr "Zeigt die Locale für Zeichenklassifizierung und Groß-/Kleinschreibung." -#: utils/misc/guc.c:3945 +#: utils/misc/guc.c:4128 msgid "Sets the language in which messages are displayed." msgstr "Setzt die Sprache, in der Mitteilungen ausgegeben werden." -#: utils/misc/guc.c:3955 +#: utils/misc/guc.c:4138 msgid "Sets the locale for formatting monetary amounts." msgstr "Setzt die Locale für die Formatierung von Geldbeträgen." -#: utils/misc/guc.c:3965 +#: utils/misc/guc.c:4148 msgid "Sets the locale for formatting numbers." msgstr "Setzt die Locale für die Formatierung von Zahlen." -#: utils/misc/guc.c:3975 +#: utils/misc/guc.c:4158 msgid "Sets the locale for formatting date and time values." msgstr "Setzt die Locale für die Formatierung von Datums- und Zeitwerten." -#: utils/misc/guc.c:3985 +#: utils/misc/guc.c:4168 msgid "Lists shared libraries to preload into each backend." msgstr "Listet dynamische Bibliotheken, die vorab in jeden Serverprozess geladen werden." -#: utils/misc/guc.c:3996 +#: utils/misc/guc.c:4179 msgid "Lists shared libraries to preload into server." msgstr "Listet dynamische Bibliotheken, die vorab in den Server geladen werden." -#: utils/misc/guc.c:4007 +#: utils/misc/guc.c:4190 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Listet unprivilegierte dynamische Bibliotheken, die vorab in jeden Serverprozess geladen werden." -#: utils/misc/guc.c:4018 +#: utils/misc/guc.c:4201 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Setzt die Schemasuchreihenfolge für Namen ohne Schemaqualifikation." -#: utils/misc/guc.c:4030 +#: utils/misc/guc.c:4213 msgid "Sets the server (database) character set encoding." msgstr "Setzt die Zeichensatzkodierung des Servers (der Datenbank)." -#: utils/misc/guc.c:4042 +#: utils/misc/guc.c:4225 msgid "Shows the server version." msgstr "Zeigt die Serverversion." -#: utils/misc/guc.c:4054 +#: utils/misc/guc.c:4237 msgid "Sets the current role." msgstr "Setzt die aktuelle Rolle." -#: utils/misc/guc.c:4066 +#: utils/misc/guc.c:4249 msgid "Sets the session user name." msgstr "Setzt den Sitzungsbenutzernamen." -#: utils/misc/guc.c:4077 +#: utils/misc/guc.c:4260 msgid "Sets the destination for server log output." msgstr "Setzt das Ziel für die Serverlogausgabe." -#: utils/misc/guc.c:4078 +#: utils/misc/guc.c:4261 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "Gültige Werte sind Kombinationen von »stderr«, »syslog«, »csvlog« und »eventlog«, je nach Plattform." -#: utils/misc/guc.c:4089 +#: utils/misc/guc.c:4272 msgid "Sets the destination directory for log files." msgstr "Bestimmt das Zielverzeichnis für Logdateien." -#: utils/misc/guc.c:4090 +#: utils/misc/guc.c:4273 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Kann relativ zum Datenverzeichnis oder als absoluter Pfad angegeben werden." -#: utils/misc/guc.c:4100 +#: utils/misc/guc.c:4283 msgid "Sets the file name pattern for log files." msgstr "Bestimmt das Dateinamenmuster für Logdateien." -#: utils/misc/guc.c:4111 +#: utils/misc/guc.c:4294 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Setzt den Programmnamen, mit dem PostgreSQL-Meldungen im Syslog identifiziert werden." -#: utils/misc/guc.c:4122 +#: utils/misc/guc.c:4305 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "Setzt den Programmnamen, mit dem PostgreSQL-Meldungen im Ereignisprotokoll identifiziert werden." -#: utils/misc/guc.c:4133 +#: utils/misc/guc.c:4316 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Setzt die Zeitzone, in der Zeitangaben interpretiert und ausgegeben werden." -#: utils/misc/guc.c:4143 +#: utils/misc/guc.c:4326 msgid "Selects a file of time zone abbreviations." msgstr "Wählt eine Datei mit Zeitzonenabkürzungen." -#: utils/misc/guc.c:4153 +#: utils/misc/guc.c:4336 msgid "Sets the owning group of the Unix-domain socket." msgstr "Setzt die Eigentümergruppe der Unix-Domain-Socket." -#: utils/misc/guc.c:4154 +#: utils/misc/guc.c:4337 msgid "The owning user of the socket is always the user that starts the server." msgstr "Der Eigentümer ist immer der Benutzer, der den Server startet." -#: utils/misc/guc.c:4164 +#: utils/misc/guc.c:4347 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Setzt die Verzeichnisse, in denen Unix-Domain-Sockets erzeugt werden sollen." -#: utils/misc/guc.c:4179 +#: utils/misc/guc.c:4362 msgid "Sets the host name or IP address(es) to listen to." msgstr "Setzt den Hostnamen oder die IP-Adresse(n), auf der auf Verbindungen gewartet wird." -#: utils/misc/guc.c:4194 +#: utils/misc/guc.c:4377 msgid "Sets the server's data directory." msgstr "Setzt das Datenverzeichnis des Servers." -#: utils/misc/guc.c:4205 +#: utils/misc/guc.c:4388 msgid "Sets the server's main configuration file." msgstr "Setzt die Hauptkonfigurationsdatei des Servers." -#: utils/misc/guc.c:4216 +#: utils/misc/guc.c:4399 msgid "Sets the server's \"hba\" configuration file." msgstr "Setzt die »hba«-Konfigurationsdatei des Servers." -#: utils/misc/guc.c:4227 +#: utils/misc/guc.c:4410 msgid "Sets the server's \"ident\" configuration file." msgstr "Setzt die »ident«-Konfigurationsdatei des Servers." -#: utils/misc/guc.c:4238 +#: utils/misc/guc.c:4421 msgid "Writes the postmaster PID to the specified file." msgstr "Schreibt die Postmaster-PID in die angegebene Datei." -#: utils/misc/guc.c:4249 +#: utils/misc/guc.c:4432 msgid "Name of the SSL library." -msgstr "" +msgstr "Name der SSL-Bibliothek." -#: utils/misc/guc.c:4264 +#: utils/misc/guc.c:4447 msgid "Location of the SSL server certificate file." msgstr "Ort der SSL-Serverzertifikatsdatei." -#: utils/misc/guc.c:4274 +#: utils/misc/guc.c:4457 msgid "Location of the SSL server private key file." msgstr "Setzt den Ort der Datei mit dem privaten SSL-Server-Schlüssel." -#: utils/misc/guc.c:4284 +#: utils/misc/guc.c:4467 msgid "Location of the SSL certificate authority file." msgstr "Ort der SSL-Certificate-Authority-Datei." -#: utils/misc/guc.c:4294 +#: utils/misc/guc.c:4477 msgid "Location of the SSL certificate revocation list file." msgstr "Ort der SSL-Certificate-Revocation-List-Datei." -#: utils/misc/guc.c:4304 +#: utils/misc/guc.c:4487 +#, fuzzy +#| msgid "Location of the SSL certificate revocation list file." +msgid "Location of the SSL certificate revocation list directory." +msgstr "Ort der SSL-Certificate-Revocation-List-Datei." + +#: utils/misc/guc.c:4497 msgid "Writes temporary statistics files to the specified directory." msgstr "Schreibt temporäre Statistikdateien in das angegebene Verzeichnis." -#: utils/misc/guc.c:4315 +#: utils/misc/guc.c:4508 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "Anzahl synchroner Standbys und Liste der Namen der möglichen synchronen Standbys." -#: utils/misc/guc.c:4326 +#: utils/misc/guc.c:4519 msgid "Sets default text search configuration." msgstr "Setzt die vorgegebene Textsuchekonfiguration." -#: utils/misc/guc.c:4336 +#: utils/misc/guc.c:4529 msgid "Sets the list of allowed SSL ciphers." msgstr "Setzt die Liste der erlaubten SSL-Verschlüsselungsalgorithmen." -#: utils/misc/guc.c:4351 +#: utils/misc/guc.c:4544 msgid "Sets the curve to use for ECDH." msgstr "Setzt die für ECDH zu verwendende Kurve." -#: utils/misc/guc.c:4366 +#: utils/misc/guc.c:4559 msgid "Location of the SSL DH parameters file." msgstr "Setzt den Ort der SSL-DH-Parameter-Datei." -#: utils/misc/guc.c:4377 +#: utils/misc/guc.c:4570 msgid "Command to obtain passphrases for SSL." msgstr "Befehl zum Einlesen von Passphrasen für SSL." -#: utils/misc/guc.c:4388 +#: utils/misc/guc.c:4581 msgid "Sets the application name to be reported in statistics and logs." msgstr "Setzt den Anwendungsnamen, der in Statistiken und Logs verzeichnet wird." -#: utils/misc/guc.c:4399 +#: utils/misc/guc.c:4592 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Setzt den Namen des Clusters, welcher im Prozesstitel angezeigt wird." -#: utils/misc/guc.c:4410 +#: utils/misc/guc.c:4603 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Setzt die WAL-Resource-Manager, für die WAL-Konsistenzprüfungen durchgeführt werden." -#: utils/misc/guc.c:4411 +#: utils/misc/guc.c:4604 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "Volle Seitenabbilder werden für alle Datenblöcke geloggt und gegen die Resultate der WAL-Wiederherstellung geprüft." -#: utils/misc/guc.c:4421 +#: utils/misc/guc.c:4614 msgid "JIT provider to use." -msgstr "" +msgstr "Zu verwendender JIT-Provider." -#: utils/misc/guc.c:4432 -#, fuzzy -#| msgid "Logs the host name in the connection logs." +#: utils/misc/guc.c:4625 msgid "Log backtrace for errors in these functions." -msgstr "Schreibt den Hostnamen jeder Verbindung in den Log." +msgstr "Backtrace für Fehler in diesen Funktionen loggen." -#: utils/misc/guc.c:4452 +#: utils/misc/guc.c:4645 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Bestimmt, ob »\\'« in Zeichenkettenkonstanten erlaubt ist." -#: utils/misc/guc.c:4462 +#: utils/misc/guc.c:4655 msgid "Sets the output format for bytea." msgstr "Setzt das Ausgabeformat für bytea." -#: utils/misc/guc.c:4472 +#: utils/misc/guc.c:4665 msgid "Sets the message levels that are sent to the client." msgstr "Setzt die Meldungstypen, die an den Client gesendet werden." -#: utils/misc/guc.c:4473 utils/misc/guc.c:4538 utils/misc/guc.c:4549 -#: utils/misc/guc.c:4625 +#: utils/misc/guc.c:4666 utils/misc/guc.c:4742 utils/misc/guc.c:4753 +#: utils/misc/guc.c:4829 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "Jeder Wert schließt alle ihm folgenden Werte mit ein. Je weiter hinten der Wert steht, desto weniger Meldungen werden gesendet werden." -#: utils/misc/guc.c:4483 +#: utils/misc/guc.c:4676 msgid "Enables the planner to use constraints to optimize queries." msgstr "Ermöglicht dem Planer die Verwendung von Constraints, um Anfragen zu optimieren." -#: utils/misc/guc.c:4484 +#: utils/misc/guc.c:4677 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "Tabellen-Scans werden übersprungen, wenn deren Constraints garantieren, dass keine Zeile mit der Abfrage übereinstimmt." -#: utils/misc/guc.c:4495 +#: utils/misc/guc.c:4688 +#, fuzzy +#| msgid "Sets the default table access method for new tables." +msgid "Sets the default compression for new columns." +msgstr "Setzt die Standard-Tabellenzugriffsmethode für neue Tabellen." + +#: utils/misc/guc.c:4699 msgid "Sets the transaction isolation level of each new transaction." msgstr "Setzt den Transaktionsisolationsgrad neuer Transaktionen." -#: utils/misc/guc.c:4505 +#: utils/misc/guc.c:4709 msgid "Sets the current transaction's isolation level." msgstr "Zeigt den Isolationsgrad der aktuellen Transaktion." -#: utils/misc/guc.c:4516 +#: utils/misc/guc.c:4720 msgid "Sets the display format for interval values." msgstr "Setzt das Ausgabeformat für Intervallwerte." -#: utils/misc/guc.c:4527 +#: utils/misc/guc.c:4731 msgid "Sets the verbosity of logged messages." msgstr "Setzt den Detailgrad von geloggten Meldungen." -#: utils/misc/guc.c:4537 +#: utils/misc/guc.c:4741 msgid "Sets the message levels that are logged." msgstr "Setzt die Meldungstypen, die geloggt werden." -#: utils/misc/guc.c:4548 +#: utils/misc/guc.c:4752 msgid "Causes all statements generating error at or above this level to be logged." msgstr "Schreibt alle Anweisungen, die einen Fehler auf dieser Stufe oder höher verursachen, in den Log." -#: utils/misc/guc.c:4559 +#: utils/misc/guc.c:4763 msgid "Sets the type of statements logged." msgstr "Setzt die Anweisungsarten, die geloggt werden." -#: utils/misc/guc.c:4569 +#: utils/misc/guc.c:4773 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "Setzt die zu verwendende Syslog-»Facility«, wenn Syslog angeschaltet ist." -#: utils/misc/guc.c:4584 +#: utils/misc/guc.c:4788 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "Setzt das Sitzungsverhalten für Trigger und Regeln." -#: utils/misc/guc.c:4594 +#: utils/misc/guc.c:4798 msgid "Sets the current transaction's synchronization level." msgstr "Setzt den Synchronisationsgrad der aktuellen Transaktion." -#: utils/misc/guc.c:4604 +#: utils/misc/guc.c:4808 msgid "Allows archiving of WAL files using archive_command." msgstr "Erlaubt die Archivierung von WAL-Dateien mittels archive_command." -#: utils/misc/guc.c:4614 +#: utils/misc/guc.c:4818 msgid "Sets the action to perform upon reaching the recovery target." -msgstr "" +msgstr "Setzt die Aktion, die beim Erreichen des Wiederherstellungsziels durchgeführt wird." -#: utils/misc/guc.c:4624 +#: utils/misc/guc.c:4828 msgid "Enables logging of recovery-related debugging information." msgstr "Ermöglicht das Loggen von Debug-Informationen über die Wiederherstellung." -#: utils/misc/guc.c:4640 +#: utils/misc/guc.c:4844 msgid "Collects function-level statistics on database activity." msgstr "Sammelt Statistiken auf Funktionsebene über Datenbankaktivität." -#: utils/misc/guc.c:4650 -msgid "Set the level of information written to the WAL." +#: utils/misc/guc.c:4854 +#, fuzzy +#| msgid "Set the level of information written to the WAL." +msgid "Sets the level of information written to the WAL." msgstr "Setzt den Umfang der in den WAL geschriebenen Informationen." -#: utils/misc/guc.c:4660 +#: utils/misc/guc.c:4864 msgid "Selects the dynamic shared memory implementation used." msgstr "Wählt die zu verwendende Implementierung von dynamischem Shared Memory." -#: utils/misc/guc.c:4670 -#, fuzzy -#| msgid "Selects the dynamic shared memory implementation used." +#: utils/misc/guc.c:4874 msgid "Selects the shared memory implementation used for the main shared memory region." -msgstr "Wählt die zu verwendende Implementierung von dynamischem Shared Memory." +msgstr "Wählt die Shared-Memory-Implementierung, die für den Haupt-Shared-Memory-Bereich verwendet wird." -#: utils/misc/guc.c:4680 +#: utils/misc/guc.c:4884 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Wählt die Methode, um das Schreiben von WAL-Änderungen auf die Festplatte zu erzwingen." -#: utils/misc/guc.c:4690 +#: utils/misc/guc.c:4894 msgid "Sets how binary values are to be encoded in XML." msgstr "Setzt, wie binäre Werte in XML kodiert werden." -#: utils/misc/guc.c:4700 +#: utils/misc/guc.c:4904 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "Setzt, ob XML-Daten in impliziten Parse- und Serialisierungsoperationen als Dokument oder Fragment betrachtet werden sollen." -#: utils/misc/guc.c:4711 +#: utils/misc/guc.c:4915 msgid "Use of huge pages on Linux or Windows." msgstr "Huge Pages auf Linux oder Windows verwenden." -#: utils/misc/guc.c:4721 +#: utils/misc/guc.c:4925 msgid "Forces use of parallel query facilities." msgstr "Verwendung der Einrichtungen für parallele Anfragen erzwingen." -#: utils/misc/guc.c:4722 +#: utils/misc/guc.c:4926 msgid "If possible, run query using a parallel worker and with parallel restrictions." msgstr "Wenn möglich werden Anfragen in einem parallelen Arbeitsprozess und mit parallelen Beschränkungen ausgeführt." -#: utils/misc/guc.c:4732 -msgid "Encrypt passwords." -msgstr "Verschlüsselt Passwörter." +#: utils/misc/guc.c:4936 +msgid "Chooses the algorithm for encrypting passwords." +msgstr "Wählt den Algorithmus zum Verschlüsseln von Passwörtern." -#: utils/misc/guc.c:4733 -msgid "When a password is specified in CREATE USER or ALTER USER without writing either ENCRYPTED or UNENCRYPTED, this parameter determines whether the password is to be encrypted." -msgstr "Wenn in CREATE USER oder ALTER USER ein Passwort ohne ENCRYPTED oder UNENCRYPTED angegeben ist, bestimmt dieser Parameter, ob das Passwort verschlüsselt wird." - -#: utils/misc/guc.c:4744 -#, fuzzy -#| msgid "Enables the planner's use of merge join plans." +#: utils/misc/guc.c:4946 msgid "Controls the planner's selection of custom or generic plan." -msgstr "Ermöglicht Merge-Verbunde im Planer." +msgstr "Kontrolliert, ob der Planer einen maßgeschneiderten oder einen allgemeinen Plan verwendet." -#: utils/misc/guc.c:4745 +#: utils/misc/guc.c:4947 msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." -msgstr "" +msgstr "Vorbereitete Anweisungen können maßgeschneiderte oder allgemeine Pläne haben und der Planer wird versuchen, den besseren auszuwählen. Diese Einstellung kann das Standardverhalten außer Kraft setzen." -#: utils/misc/guc.c:4757 -#, fuzzy -#| msgid "Sets the minimum size to shrink the WAL to." +#: utils/misc/guc.c:4959 msgid "Sets the minimum SSL/TLS protocol version to use." -msgstr "Setzt die minimale Größe, auf die der WAL geschrumpft wird." +msgstr "Setzt die minimale zu verwendende SSL/TLS-Protokollversion." -#: utils/misc/guc.c:4769 +#: utils/misc/guc.c:4971 msgid "Sets the maximum SSL/TLS protocol version to use." +msgstr "Setzt die maximale zu verwendende SSL/TLS-Protokollversion." + +#: utils/misc/guc.c:4983 +msgid "Sets the method for synchronizing the data directory before crash recovery." +msgstr "" + +#: utils/misc/guc.c:5551 +#, fuzzy, c-format +#| msgid "unrecognized configuration parameter \"%s\"" +msgid "invalid configuration parameter name \"%s\"" +msgstr "unbekannter Konfigurationsparameter »%s«" + +#: utils/misc/guc.c:5553 +#, c-format +msgid "Custom parameter names must be of the form \"identifier.identifier\"." msgstr "" -#: utils/misc/guc.c:5572 +#: utils/misc/guc.c:5562 utils/misc/guc.c:9321 +#, c-format +msgid "unrecognized configuration parameter \"%s\"" +msgstr "unbekannter Konfigurationsparameter »%s«" + +#: utils/misc/guc.c:5855 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: konnte nicht auf Verzeichnis »%s« zugreifen: %s\n" -#: utils/misc/guc.c:5577 +#: utils/misc/guc.c:5860 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "Führen Sie initdb oder pg_basebackup aus, um ein PostgreSQL-Datenverzeichnis zu initialisieren.\n" -#: utils/misc/guc.c:5597 +#: utils/misc/guc.c:5880 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -27116,12 +28161,12 @@ msgstr "" "Sie müssen die Kommandozeilenoption --config-file oder -D angegeben oder\n" "die Umgebungsvariable PGDATA setzen.\n" -#: utils/misc/guc.c:5616 +#: utils/misc/guc.c:5899 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s: konnte nicht auf die Serverkonfigurationsdatei »%s« zugreifen: %s\n" -#: utils/misc/guc.c:5642 +#: utils/misc/guc.c:5925 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -27131,7 +28176,7 @@ msgstr "" "zu finden sind. Sie können dies mit »data_directory« in »%s«, mit der\n" "Kommandozeilenoption -D oder der Umgebungsvariable PGDATA angeben.\n" -#: utils/misc/guc.c:5690 +#: utils/misc/guc.c:5973 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -27141,7 +28186,7 @@ msgstr "" "Sie können dies mit »hba_file« in »%s«, mit der\n" "Kommandozeilenoption -D oder der Umgebungsvariable PGDATA angeben.\n" -#: utils/misc/guc.c:5713 +#: utils/misc/guc.c:5996 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -27151,180 +28196,183 @@ msgstr "" "Sie können dies mit »ident_file« in »%s«, mit der\n" "Kommandozeilenoption -D oder der Umgebungsvariable PGDATA angeben.\n" -#: utils/misc/guc.c:6555 +#: utils/misc/guc.c:6921 msgid "Value exceeds integer range." msgstr "Wert überschreitet Bereich für ganze Zahlen." -#: utils/misc/guc.c:6791 +#: utils/misc/guc.c:7157 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s ist außerhalb des gültigen Bereichs für Parameter »%s« (%d ... %d)" -#: utils/misc/guc.c:6827 +#: utils/misc/guc.c:7193 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s ist außerhalb des gültigen Bereichs für Parameter »%s« (%g ... %g)" -#: utils/misc/guc.c:6983 utils/misc/guc.c:8350 +#: utils/misc/guc.c:7353 utils/misc/guc.c:8725 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "während einer parallelen Operation können keine Parameter gesetzt werden" -#: utils/misc/guc.c:6990 utils/misc/guc.c:7742 utils/misc/guc.c:7795 -#: utils/misc/guc.c:7846 utils/misc/guc.c:8179 utils/misc/guc.c:8946 -#: utils/misc/guc.c:9208 utils/misc/guc.c:10874 -#, c-format -msgid "unrecognized configuration parameter \"%s\"" -msgstr "unbekannter Konfigurationsparameter »%s«" - -#: utils/misc/guc.c:7005 utils/misc/guc.c:8191 +#: utils/misc/guc.c:7370 utils/misc/guc.c:8566 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "Parameter »%s« kann nicht geändert werden" -#: utils/misc/guc.c:7038 +#: utils/misc/guc.c:7403 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "Parameter »%s« kann jetzt nicht geändert werden" -#: utils/misc/guc.c:7056 utils/misc/guc.c:7103 utils/misc/guc.c:10890 +#: utils/misc/guc.c:7421 utils/misc/guc.c:7468 utils/misc/guc.c:11366 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "keine Berechtigung, um Parameter »%s« zu setzen" -#: utils/misc/guc.c:7093 +#: utils/misc/guc.c:7458 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "Parameter »%s« kann nach Start der Verbindung nicht geändert werden" -#: utils/misc/guc.c:7141 +#: utils/misc/guc.c:7506 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "Parameter »%s« kann nicht in einer Security-Definer-Funktion gesetzt werden" -#: utils/misc/guc.c:7750 utils/misc/guc.c:7800 utils/misc/guc.c:9215 +#: utils/misc/guc.c:8139 utils/misc/guc.c:8186 utils/misc/guc.c:9583 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "nur Superuser oder Mitglieder von pg_read_all_settings können »%s« ansehen" -#: utils/misc/guc.c:7891 +#: utils/misc/guc.c:8270 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s darf nur ein Argument haben" -#: utils/misc/guc.c:8139 +#: utils/misc/guc.c:8518 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "nur Superuser können den Befehl ALTER SYSTEM ausführen" -#: utils/misc/guc.c:8224 +#: utils/misc/guc.c:8599 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "Parameterwert für ALTER SYSTEM darf keine Newline enthalten" -#: utils/misc/guc.c:8269 +#: utils/misc/guc.c:8644 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "konnte Inhalt der Datei »%s« nicht parsen" -#: utils/misc/guc.c:8426 +#: utils/misc/guc.c:8801 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT ist nicht implementiert" -#: utils/misc/guc.c:8510 +#: utils/misc/guc.c:8885 #, c-format msgid "SET requires parameter name" msgstr "SET benötigt Parameternamen" -#: utils/misc/guc.c:8643 +#: utils/misc/guc.c:9018 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "Versuch, den Parameter »%s« zu redefinieren" -#: utils/misc/guc.c:10436 +#: utils/misc/guc.c:10813 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "beim Setzen von Parameter »%s« auf »%s«" -#: utils/misc/guc.c:10504 +#: utils/misc/guc.c:10978 #, c-format msgid "parameter \"%s\" could not be set" msgstr "Parameter »%s« kann nicht gesetzt werden" -#: utils/misc/guc.c:10594 +#: utils/misc/guc.c:11070 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "konnte Wert von Parameter »%s« nicht lesen" -#: utils/misc/guc.c:10952 utils/misc/guc.c:10986 +#: utils/misc/guc.c:11428 utils/misc/guc.c:11462 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "ungültiger Wert für Parameter »%s«: %d" -#: utils/misc/guc.c:11020 +#: utils/misc/guc.c:11496 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "ungültiger Wert für Parameter »%s«: %g" -#: utils/misc/guc.c:11290 +#: utils/misc/guc.c:11783 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "»temp_buffers« kann nicht geändert werden, nachdem in der Sitzung auf temporäre Tabellen zugriffen wurde." -#: utils/misc/guc.c:11302 +#: utils/misc/guc.c:11795 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour wird von dieser Installation nicht unterstützt" -#: utils/misc/guc.c:11315 +#: utils/misc/guc.c:11808 #, c-format msgid "SSL is not supported by this build" msgstr "SSL wird von dieser Installation nicht unterstützt" -#: utils/misc/guc.c:11327 +#: utils/misc/guc.c:11820 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Kann Parameter nicht einschalten, wenn »log_statement_stats« an ist." -#: utils/misc/guc.c:11339 +#: utils/misc/guc.c:11832 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "Kann »log_statement_stats« nicht einschalten, wenn »log_parser_stats«, »log_planner_stats« oder »log_executor_stats« an ist." -#: utils/misc/guc.c:11569 +#: utils/misc/guc.c:12062 #, c-format msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." -msgstr "" +msgstr "effective_io_concurrency muss auf Plattformen ohne posix_fadvise() auf 0 gesetzt sein." -#: utils/misc/guc.c:11582 +#: utils/misc/guc.c:12075 #, c-format msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." -msgstr "" +msgstr "maintenance_io_concurrency muss auf Plattformen ohne posix_fadvise() auf 0 gesetzt sein." + +#: utils/misc/guc.c:12089 +#, fuzzy, c-format +#| msgid "huge pages not supported on this platform" +msgid "huge_page_size must be 0 on this platform." +msgstr "Huge Pages werden auf dieser Plattform nicht unterstützt" -#: utils/misc/guc.c:11698 +#: utils/misc/guc.c:12103 #, fuzzy, c-format -#| msgid "Invalid character value." +#| msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." +msgid "client_connection_check_interval must be set to 0 on platforms that lack POLLRDHUP." +msgstr "maintenance_io_concurrency muss auf Plattformen ohne posix_fadvise() auf 0 gesetzt sein." + +#: utils/misc/guc.c:12245 +#, c-format msgid "invalid character" -msgstr "Ungültiger Zeichenwert." +msgstr "ungültiges Zeichen" -#: utils/misc/guc.c:11758 +#: utils/misc/guc.c:12305 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline ist keine gültige Zahl." -#: utils/misc/guc.c:11798 -#, fuzzy, c-format -#| msgid "multiple values specified for netmask" +#: utils/misc/guc.c:12345 +#, c-format msgid "multiple recovery targets specified" -msgstr "mehrere Werte für Netzmaske angegeben" +msgstr "mehrere Wiederherstellungsziele angegeben" -#: utils/misc/guc.c:11799 +#: utils/misc/guc.c:12346 #, c-format msgid "At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set." -msgstr "" +msgstr "Höchstens eins aus recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid darf gesetzt sein." -#: utils/misc/guc.c:11807 +#: utils/misc/guc.c:12354 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "Der einzige erlaubte Wert ist »immediate«." @@ -27360,7 +28408,7 @@ msgstr "Policy für Sicherheit auf Zeilenebene für Tabelle »%s« würde Auswir msgid "To disable the policy for the table's owner, use ALTER TABLE NO FORCE ROW LEVEL SECURITY." msgstr "Um die Policy für den Tabelleneigentümer zu deaktivieren, verwenden Sie ALTER TABLE NO FORCE ROW LEVEL SECURITY." -#: utils/misc/timeout.c:395 +#: utils/misc/timeout.c:484 #, c-format msgid "cannot add more timeout reasons" msgstr "kann keine weiteren Gründe für Zeitüberschreitungen hinzufügen" @@ -27430,24 +28478,28 @@ msgstr "Zeile ist zu lang in Zeitzonendatei »%s«, Zeile %d" msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "@INCLUDE ohne Dateiname in Zeitzonendatei »%s«, Zeile %d" -#: utils/mmgr/aset.c:476 utils/mmgr/generation.c:234 utils/mmgr/slab.c:235 +#: utils/mmgr/aset.c:477 utils/mmgr/generation.c:235 utils/mmgr/slab.c:237 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "Fehler während der Erzeugung des Speicherkontexts »%s«." -#: utils/mmgr/dsa.c:519 utils/mmgr/dsa.c:1332 +#: utils/mmgr/dsa.c:519 utils/mmgr/dsa.c:1329 #, c-format msgid "could not attach to dynamic shared area" msgstr "konnte nicht an dynamische Shared Area anbinden" -#: utils/mmgr/mcxt.c:822 utils/mmgr/mcxt.c:858 utils/mmgr/mcxt.c:896 -#: utils/mmgr/mcxt.c:934 utils/mmgr/mcxt.c:970 utils/mmgr/mcxt.c:1001 -#: utils/mmgr/mcxt.c:1037 utils/mmgr/mcxt.c:1089 utils/mmgr/mcxt.c:1124 -#: utils/mmgr/mcxt.c:1159 -#, fuzzy, c-format -#| msgid "Failed on request of size %zu." +#: utils/mmgr/mcxt.c:889 utils/mmgr/mcxt.c:925 utils/mmgr/mcxt.c:963 +#: utils/mmgr/mcxt.c:1001 utils/mmgr/mcxt.c:1083 utils/mmgr/mcxt.c:1114 +#: utils/mmgr/mcxt.c:1150 utils/mmgr/mcxt.c:1202 utils/mmgr/mcxt.c:1237 +#: utils/mmgr/mcxt.c:1272 +#, c-format msgid "Failed on request of size %zu in memory context \"%s\"." -msgstr "Fehler bei Anfrage mit Größe %zu." +msgstr "Fehler bei Anfrage mit Größe %zu im Speicherkontext »%s«." + +#: utils/mmgr/mcxt.c:1046 +#, c-format +msgid "logging memory contexts of PID %d" +msgstr "" #: utils/mmgr/portalmem.c:187 #, c-format @@ -27465,10 +28517,9 @@ msgid "portal \"%s\" cannot be run" msgstr "Portal »%s« kann nicht ausgeführt werden" #: utils/mmgr/portalmem.c:478 -#, fuzzy, c-format -#| msgid "cannot drop active portal \"%s\"" +#, c-format msgid "cannot drop pinned portal \"%s\"" -msgstr "aktives Portal »%s« kann nicht gelöscht werden" +msgstr "gepinntes Portal »%s« kann nicht gelöscht werden" #: utils/mmgr/portalmem.c:486 #, c-format @@ -27485,42 +28536,54 @@ msgstr "PREPARE kann nicht in einer Transaktion ausgeführt werden, die einen Cu msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "in einer Cursor-Schleife, die nicht nur liest, können keine Transaktionsbefehle ausgeführt werden" -#: utils/sort/logtape.c:268 +#: utils/sort/logtape.c:268 utils/sort/logtape.c:291 #, c-format -msgid "could not read block %ld of temporary file: %m" -msgstr "konnte Block %ld von temporärer Datei nicht lesen: %m" +msgid "could not seek to block %ld of temporary file" +msgstr "konnte Positionszeiger in temporärer Datei nicht auf Block %ld setzen" -#: utils/sort/sharedtuplestore.c:435 utils/sort/sharedtuplestore.c:444 -#: utils/sort/sharedtuplestore.c:467 utils/sort/sharedtuplestore.c:484 -#: utils/sort/sharedtuplestore.c:501 utils/sort/sharedtuplestore.c:573 -#: utils/sort/sharedtuplestore.c:579 -#, fuzzy, c-format -#| msgid "could not read from tuplestore temporary file: %m" +#: utils/sort/logtape.c:297 +#, c-format +msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" +msgstr "konnte Block %ld von temporärer Datei nicht lesen: es wurden nur %zu von %zu Bytes gelesen" + +#: utils/sort/sharedtuplestore.c:430 utils/sort/sharedtuplestore.c:439 +#: utils/sort/sharedtuplestore.c:462 utils/sort/sharedtuplestore.c:479 +#: utils/sort/sharedtuplestore.c:496 +#, c-format msgid "could not read from shared tuplestore temporary file" -msgstr "konnte nicht aus temporärer Datei für Tuplestore lesen: %m" +msgstr "konnte nicht aus temporärer Datei für Shared-Tuplestore lesen" -#: utils/sort/sharedtuplestore.c:490 -#, fuzzy, c-format -#| msgid "could not seek in tuplestore temporary file: %m" +#: utils/sort/sharedtuplestore.c:485 +#, c-format msgid "unexpected chunk in shared tuplestore temporary file" -msgstr "konnte Positionszeiger in temporärer Datei für Tuplestore nicht setzen: %m" +msgstr "unerwarteter Chunk in temporärer Datei für Shared-Tuplestore" + +#: utils/sort/sharedtuplestore.c:569 +#, c-format +msgid "could not seek to block %u in shared tuplestore temporary file" +msgstr "konnte Positionszeiger in temporärer Datei für Shared-Tuplestore nicht auf Block %u setzen" + +#: utils/sort/sharedtuplestore.c:576 +#, c-format +msgid "could not read from shared tuplestore temporary file: read only %zu of %zu bytes" +msgstr "konnte nicht aus temporärer Datei für Shared-Tuplestore lesen: es wurden nur %zu von %zu Bytes gelesen" -#: utils/sort/tuplesort.c:3140 +#: utils/sort/tuplesort.c:3216 #, c-format msgid "cannot have more than %d runs for an external sort" msgstr "ein externer Sortiervorgang kann nicht mehr als %d Durchgänge haben" -#: utils/sort/tuplesort.c:4221 +#: utils/sort/tuplesort.c:4297 #, c-format msgid "could not create unique index \"%s\"" msgstr "konnte Unique Index »%s« nicht erstellen" -#: utils/sort/tuplesort.c:4223 +#: utils/sort/tuplesort.c:4299 #, c-format msgid "Key %s is duplicated." msgstr "Schlüssel %s ist doppelt vorhanden." -#: utils/sort/tuplesort.c:4224 +#: utils/sort/tuplesort.c:4300 #, c-format msgid "Duplicate keys exist." msgstr "Es existieren doppelte Schlüssel." @@ -27531,70 +28594,61 @@ msgstr "Es existieren doppelte Schlüssel." #: utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 #: utils/sort/tuplestore.c:1330 #, c-format -msgid "could not seek in tuplestore temporary file: %m" -msgstr "konnte Positionszeiger in temporärer Datei für Tuplestore nicht setzen: %m" - -#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1550 -#: utils/sort/tuplestore.c:1556 -#, c-format -msgid "could not read from tuplestore temporary file: %m" -msgstr "konnte nicht aus temporärer Datei für Tuplestore lesen: %m" +msgid "could not seek in tuplestore temporary file" +msgstr "konnte Positionszeiger in temporärer Datei für Tuplestore nicht setzen" -#: utils/sort/tuplestore.c:1518 utils/sort/tuplestore.c:1523 -#: utils/sort/tuplestore.c:1529 +#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1540 +#: utils/sort/tuplestore.c:1548 #, c-format -msgid "could not write to tuplestore temporary file: %m" -msgstr "konnte nicht in temporäre Datei für Tuplestore schreiben: %m" +msgid "could not read from tuplestore temporary file: read only %zu of %zu bytes" +msgstr "konnte nicht aus temporärer Datei für Tuplestore lesen: es wurden nur %zu von %zu Bytes gelesen" -#: utils/time/snapmgr.c:624 +#: utils/time/snapmgr.c:568 #, c-format msgid "The source transaction is not running anymore." msgstr "Die Quelltransaktion läuft nicht mehr." -#: utils/time/snapmgr.c:1232 +#: utils/time/snapmgr.c:1147 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "aus einer Subtransaktion kann kein Snapshot exportiert werden" -#: utils/time/snapmgr.c:1391 utils/time/snapmgr.c:1396 -#: utils/time/snapmgr.c:1401 utils/time/snapmgr.c:1416 -#: utils/time/snapmgr.c:1421 utils/time/snapmgr.c:1426 -#: utils/time/snapmgr.c:1441 utils/time/snapmgr.c:1446 -#: utils/time/snapmgr.c:1451 utils/time/snapmgr.c:1553 -#: utils/time/snapmgr.c:1569 utils/time/snapmgr.c:1594 +#: utils/time/snapmgr.c:1306 utils/time/snapmgr.c:1311 +#: utils/time/snapmgr.c:1316 utils/time/snapmgr.c:1331 +#: utils/time/snapmgr.c:1336 utils/time/snapmgr.c:1341 +#: utils/time/snapmgr.c:1356 utils/time/snapmgr.c:1361 +#: utils/time/snapmgr.c:1366 utils/time/snapmgr.c:1468 +#: utils/time/snapmgr.c:1484 utils/time/snapmgr.c:1509 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "ungültige Snapshot-Daten in Datei »%s«" -#: utils/time/snapmgr.c:1488 +#: utils/time/snapmgr.c:1403 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "SET TRANSACTION SNAPSHOT muss vor allen Anfragen aufgerufen werden" -#: utils/time/snapmgr.c:1497 +#: utils/time/snapmgr.c:1412 #, c-format msgid "a snapshot-importing transaction must have isolation level SERIALIZABLE or REPEATABLE READ" msgstr "eine Snapshot-importierende Transaktion muss Isolationsgrad SERIALIZABLE oder REPEATABLE READ haben" -#: utils/time/snapmgr.c:1506 utils/time/snapmgr.c:1515 +#: utils/time/snapmgr.c:1421 utils/time/snapmgr.c:1430 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "ungültiger Snapshot-Bezeichner: »%s«" -#: utils/time/snapmgr.c:1607 +#: utils/time/snapmgr.c:1522 #, c-format msgid "a serializable transaction cannot import a snapshot from a non-serializable transaction" msgstr "eine serialisierbare Transaktion kann keinen Snapshot aus einer nicht-serialisierbaren Transaktion importieren" -#: utils/time/snapmgr.c:1611 +#: utils/time/snapmgr.c:1526 #, c-format msgid "a non-read-only serializable transaction cannot import a snapshot from a read-only transaction" msgstr "eine serialisierbare Transaktion, die nicht im Read-Only-Modus ist, kann keinen Snapshot aus einer Read-Only-Transaktion importieren" -#: utils/time/snapmgr.c:1626 +#: utils/time/snapmgr.c:1541 #, c-format msgid "cannot import a snapshot from a different database" msgstr "kann keinen Snapshot aus einer anderen Datenbank importieren" - -#~ msgid "invalid Unicode escape character" -#~ msgstr "ungültiges Unicode-Escape-Zeichen" diff --git a/src/backend/po/es.po b/src/backend/po/es.po index 8b24205d3fd06..93d568da3a33e 100644 --- a/src/backend/po/es.po +++ b/src/backend/po/es.po @@ -61,8 +61,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL server 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:39+0000\n" -"PO-Revision-Date: 2020-04-02 13:22-0300\n" +"POT-Creation-Date: 2020-09-13 10:40+0000\n" +"PO-Revision-Date: 2020-10-16 16:47-0300\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -79,37 +79,37 @@ msgid "not recorded" msgstr "no registrado" #: ../common/controldata_utils.c:68 ../common/controldata_utils.c:73 -#: commands/copy.c:3495 commands/extension.c:3423 utils/adt/genfile.c:147 +#: commands/copy.c:3495 commands/extension.c:3436 utils/adt/genfile.c:125 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "no se pudo abrir archivo «%s» para lectura: %m" #: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1276 access/transam/xlog.c:3501 -#: access/transam/xlog.c:4726 access/transam/xlog.c:11098 -#: access/transam/xlog.c:11111 access/transam/xlog.c:11564 -#: access/transam/xlog.c:11644 access/transam/xlog.c:11683 -#: access/transam/xlog.c:11726 access/transam/xlogfuncs.c:662 -#: access/transam/xlogfuncs.c:681 commands/extension.c:3433 libpq/hba.c:499 +#: access/transam/twophase.c:1276 access/transam/xlog.c:3503 +#: access/transam/xlog.c:4728 access/transam/xlog.c:11121 +#: access/transam/xlog.c:11134 access/transam/xlog.c:11587 +#: access/transam/xlog.c:11667 access/transam/xlog.c:11706 +#: access/transam/xlog.c:11749 access/transam/xlogfuncs.c:662 +#: access/transam/xlogfuncs.c:681 commands/extension.c:3446 libpq/hba.c:499 #: replication/logical/origin.c:717 replication/logical/origin.c:753 -#: replication/logical/reorderbuffer.c:3607 +#: replication/logical/reorderbuffer.c:3599 #: replication/logical/snapbuild.c:1741 replication/logical/snapbuild.c:1783 #: replication/logical/snapbuild.c:1811 replication/logical/snapbuild.c:1838 -#: replication/slot.c:1537 replication/slot.c:1578 replication/walsender.c:560 -#: storage/file/copydir.c:195 utils/adt/genfile.c:164 utils/adt/misc.c:765 -#: utils/cache/relmapper.c:741 +#: replication/slot.c:1622 replication/slot.c:1663 replication/walsender.c:543 +#: storage/file/buffile.c:441 storage/file/copydir.c:195 +#: utils/adt/genfile.c:200 utils/adt/misc.c:763 utils/cache/relmapper.c:741 #, c-format msgid "could not read file \"%s\": %m" msgstr "no se pudo leer el archivo «%s»: %m" #: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 -#: access/transam/twophase.c:1279 access/transam/xlog.c:3506 -#: access/transam/xlog.c:4731 replication/logical/origin.c:722 +#: access/transam/twophase.c:1279 access/transam/xlog.c:3508 +#: access/transam/xlog.c:4733 replication/logical/origin.c:722 #: replication/logical/origin.c:761 replication/logical/snapbuild.c:1746 #: replication/logical/snapbuild.c:1788 replication/logical/snapbuild.c:1816 -#: replication/logical/snapbuild.c:1843 replication/slot.c:1541 -#: replication/slot.c:1582 replication/walsender.c:565 +#: replication/logical/snapbuild.c:1843 replication/slot.c:1626 +#: replication/slot.c:1667 replication/walsender.c:548 #: utils/cache/relmapper.c:745 #, c-format msgid "could not read file \"%s\": read %d of %zu" @@ -120,17 +120,17 @@ msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" #: access/heap/rewriteheap.c:1181 access/heap/rewriteheap.c:1284 #: access/transam/timeline.c:392 access/transam/timeline.c:438 #: access/transam/timeline.c:516 access/transam/twophase.c:1288 -#: access/transam/twophase.c:1676 access/transam/xlog.c:3373 -#: access/transam/xlog.c:3541 access/transam/xlog.c:3546 -#: access/transam/xlog.c:3874 access/transam/xlog.c:4696 -#: access/transam/xlog.c:5620 access/transam/xlogfuncs.c:687 +#: access/transam/twophase.c:1676 access/transam/xlog.c:3375 +#: access/transam/xlog.c:3543 access/transam/xlog.c:3548 +#: access/transam/xlog.c:3876 access/transam/xlog.c:4698 +#: access/transam/xlog.c:5622 access/transam/xlogfuncs.c:687 #: commands/copy.c:1810 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 #: replication/logical/origin.c:655 replication/logical/origin.c:794 -#: replication/logical/reorderbuffer.c:3665 +#: replication/logical/reorderbuffer.c:3657 #: replication/logical/snapbuild.c:1653 replication/logical/snapbuild.c:1851 -#: replication/slot.c:1428 replication/slot.c:1589 replication/walsender.c:575 -#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:702 -#: storage/file/fd.c:3417 storage/file/fd.c:3520 utils/cache/relmapper.c:753 +#: replication/slot.c:1513 replication/slot.c:1674 replication/walsender.c:558 +#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:704 +#: storage/file/fd.c:3425 storage/file/fd.c:3528 utils/cache/relmapper.c:753 #: utils/cache/relmapper.c:892 #, c-format msgid "could not close file \"%s\": %m" @@ -159,31 +159,31 @@ msgstr "" #: ../common/file_utils.c:357 access/heap/rewriteheap.c:1267 #: access/transam/timeline.c:111 access/transam/timeline.c:251 #: access/transam/timeline.c:348 access/transam/twophase.c:1232 -#: access/transam/xlog.c:3275 access/transam/xlog.c:3415 -#: access/transam/xlog.c:3456 access/transam/xlog.c:3654 -#: access/transam/xlog.c:3739 access/transam/xlog.c:3842 -#: access/transam/xlog.c:4716 access/transam/xlogutils.c:807 +#: access/transam/xlog.c:3277 access/transam/xlog.c:3417 +#: access/transam/xlog.c:3458 access/transam/xlog.c:3656 +#: access/transam/xlog.c:3741 access/transam/xlog.c:3844 +#: access/transam/xlog.c:4718 access/transam/xlogutils.c:807 #: postmaster/syslogger.c:1488 replication/basebackup.c:621 #: replication/basebackup.c:1590 replication/logical/origin.c:707 -#: replication/logical/reorderbuffer.c:2466 -#: replication/logical/reorderbuffer.c:2833 -#: replication/logical/reorderbuffer.c:3587 +#: replication/logical/reorderbuffer.c:2465 +#: replication/logical/reorderbuffer.c:2825 +#: replication/logical/reorderbuffer.c:3579 #: replication/logical/snapbuild.c:1608 replication/logical/snapbuild.c:1712 -#: replication/slot.c:1509 replication/walsender.c:533 -#: replication/walsender.c:2523 storage/file/copydir.c:161 -#: storage/file/fd.c:677 storage/file/fd.c:3404 storage/file/fd.c:3491 +#: replication/slot.c:1594 replication/walsender.c:516 +#: replication/walsender.c:2508 storage/file/copydir.c:161 +#: storage/file/fd.c:679 storage/file/fd.c:3412 storage/file/fd.c:3499 #: storage/smgr/md.c:475 utils/cache/relmapper.c:724 #: utils/cache/relmapper.c:836 utils/error/elog.c:1858 #: utils/init/miscinit.c:1316 utils/init/miscinit.c:1450 -#: utils/init/miscinit.c:1527 utils/misc/guc.c:8262 utils/misc/guc.c:8294 +#: utils/init/miscinit.c:1527 utils/misc/guc.c:8252 utils/misc/guc.c:8284 #, c-format msgid "could not open file \"%s\": %m" msgstr "no se pudo abrir el archivo «%s»: %m" #: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 #: access/transam/twophase.c:1649 access/transam/twophase.c:1658 -#: access/transam/xlog.c:10855 access/transam/xlog.c:10893 -#: access/transam/xlog.c:11306 access/transam/xlogfuncs.c:741 +#: access/transam/xlog.c:10878 access/transam/xlog.c:10916 +#: access/transam/xlog.c:11329 access/transam/xlogfuncs.c:741 #: postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 #: utils/cache/relmapper.c:870 #, c-format @@ -195,12 +195,12 @@ msgstr "no se pudo escribir el archivo «%s»: %m" #: access/heap/rewriteheap.c:961 access/heap/rewriteheap.c:1175 #: access/heap/rewriteheap.c:1278 access/transam/timeline.c:432 #: access/transam/timeline.c:510 access/transam/twophase.c:1670 -#: access/transam/xlog.c:3366 access/transam/xlog.c:3535 -#: access/transam/xlog.c:4689 access/transam/xlog.c:10363 -#: access/transam/xlog.c:10390 replication/logical/snapbuild.c:1646 -#: replication/slot.c:1414 replication/slot.c:1519 storage/file/fd.c:694 -#: storage/file/fd.c:3512 storage/smgr/md.c:921 storage/smgr/md.c:962 -#: storage/sync/sync.c:396 utils/cache/relmapper.c:885 utils/misc/guc.c:8045 +#: access/transam/xlog.c:3368 access/transam/xlog.c:3537 +#: access/transam/xlog.c:4691 access/transam/xlog.c:10386 +#: access/transam/xlog.c:10413 replication/logical/snapbuild.c:1646 +#: replication/slot.c:1499 replication/slot.c:1604 storage/file/fd.c:696 +#: storage/file/fd.c:3520 storage/smgr/md.c:921 storage/smgr/md.c:962 +#: storage/sync/sync.c:396 utils/cache/relmapper.c:885 utils/misc/guc.c:8035 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" @@ -230,8 +230,8 @@ msgstr "no se pudo encontrar un «%s» para ejecutar" msgid "could not change directory to \"%s\": %m" msgstr "no se pudo cambiar al directorio «%s»: %m" -#: ../common/exec.c:287 access/transam/xlog.c:10727 -#: replication/basebackup.c:1415 utils/adt/misc.c:336 +#: ../common/exec.c:287 access/transam/xlog.c:10750 +#: replication/basebackup.c:1415 utils/adt/misc.c:337 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "no se pudo leer el enlace simbólico «%s»: %m" @@ -244,17 +244,17 @@ msgstr "pclose falló: %m" #: ../common/exec.c:539 ../common/exec.c:584 ../common/exec.c:676 #: ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 #: ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1341 -#: access/transam/xlog.c:6491 lib/dshash.c:246 libpq/auth.c:1090 +#: access/transam/xlog.c:6493 lib/dshash.c:246 libpq/auth.c:1090 #: libpq/auth.c:1491 libpq/auth.c:1559 libpq/auth.c:2089 #: libpq/be-secure-gssapi.c:484 postmaster/bgworker.c:336 -#: postmaster/bgworker.c:886 postmaster/postmaster.c:2501 -#: postmaster/postmaster.c:2523 postmaster/postmaster.c:4161 -#: postmaster/postmaster.c:4855 postmaster/postmaster.c:4925 -#: postmaster/postmaster.c:5610 postmaster/postmaster.c:5971 -#: replication/libpqwalreceiver/libpqwalreceiver.c:259 -#: replication/logical/logical.c:176 storage/buffer/localbuf.c:442 -#: storage/file/fd.c:832 storage/file/fd.c:1302 storage/file/fd.c:1463 -#: storage/file/fd.c:2268 storage/ipc/procarray.c:1045 +#: postmaster/bgworker.c:893 postmaster/postmaster.c:2518 +#: postmaster/postmaster.c:2540 postmaster/postmaster.c:4166 +#: postmaster/postmaster.c:4868 postmaster/postmaster.c:4938 +#: postmaster/postmaster.c:5635 postmaster/postmaster.c:5995 +#: replication/libpqwalreceiver/libpqwalreceiver.c:276 +#: replication/logical/logical.c:176 replication/walsender.c:590 +#: storage/buffer/localbuf.c:442 storage/file/fd.c:834 storage/file/fd.c:1304 +#: storage/file/fd.c:1465 storage/file/fd.c:2270 storage/ipc/procarray.c:1045 #: storage/ipc/procarray.c:1541 storage/ipc/procarray.c:1548 #: storage/ipc/procarray.c:1972 storage/ipc/procarray.c:2597 #: utils/adt/cryptohashes.c:45 utils/adt/cryptohashes.c:65 @@ -263,8 +263,8 @@ msgstr "pclose falló: %m" #: utils/adt/pg_locale.c:648 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 #: utils/hash/dynahash.c:450 utils/hash/dynahash.c:559 #: utils/hash/dynahash.c:1071 utils/mb/mbutils.c:401 utils/mb/mbutils.c:428 -#: utils/mb/mbutils.c:757 utils/mb/mbutils.c:783 utils/misc/guc.c:4856 -#: utils/misc/guc.c:4872 utils/misc/guc.c:4885 utils/misc/guc.c:8023 +#: utils/mb/mbutils.c:757 utils/mb/mbutils.c:783 utils/misc/guc.c:4846 +#: utils/misc/guc.c:4862 utils/misc/guc.c:4875 utils/misc/guc.c:8013 #: utils/misc/tzparser.c:467 utils/mmgr/aset.c:475 utils/mmgr/dsa.c:701 #: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:233 #: utils/mmgr/mcxt.c:821 utils/mmgr/mcxt.c:857 utils/mmgr/mcxt.c:895 @@ -275,53 +275,6 @@ msgstr "pclose falló: %m" msgid "out of memory" msgstr "memoria agotada" -#: ../common/fe_archive.c:57 -#, fuzzy, c-format -#| msgid "could not send replication command \"%s\": %s" -msgid "could not use restore_command with %%r alias" -msgstr "no se pudo ejecutar la orden de replicación «%s»: %s" - -#: ../common/fe_archive.c:78 -#, fuzzy, c-format -#| msgid "archive file \"%s\" has wrong size: %lu instead of %lu" -msgid "unexpected file size for \"%s\": %lu instead of %lu" -msgstr "el archivo «%s» tiene tamaño erróneo: %lu en lugar de %lu" - -#: ../common/fe_archive.c:89 -#, fuzzy, c-format -#| msgid "could not restore file \"%s\" from archive: %s" -msgid "could not open file \"%s\" restored from archive: %m" -msgstr "no se pudo recuperar el archivo «%s»: %s" - -#: ../common/fe_archive.c:101 ../common/file_utils.c:79 -#: ../common/file_utils.c:181 access/transam/twophase.c:1244 -#: access/transam/xlog.c:10831 access/transam/xlog.c:10869 -#: access/transam/xlog.c:11086 access/transam/xlogarchive.c:110 -#: access/transam/xlogarchive.c:226 commands/copy.c:1938 commands/copy.c:3505 -#: commands/extension.c:3412 commands/tablespace.c:795 -#: commands/tablespace.c:886 replication/basebackup.c:444 -#: replication/basebackup.c:627 replication/basebackup.c:700 -#: replication/logical/snapbuild.c:1522 storage/file/copydir.c:68 -#: storage/file/copydir.c:107 storage/file/fd.c:1814 storage/file/fd.c:3088 -#: storage/file/fd.c:3270 storage/file/fd.c:3356 utils/adt/dbsize.c:70 -#: utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:127 -#: utils/adt/genfile.c:380 utils/adt/genfile.c:606 guc-file.l:1061 -#, c-format -msgid "could not stat file \"%s\": %m" -msgstr "no se pudo hacer stat al archivo «%s»: %m" - -#: ../common/fe_archive.c:116 -#, fuzzy, c-format -#| msgid "Restoring global objects in the new cluster" -msgid "restore_command failed due to the signal: %s" -msgstr "Restaurando objetos globales en el nuevo clúster" - -#: ../common/fe_archive.c:125 -#, fuzzy, c-format -#| msgid "could not restore file \"%s\" from archive: %s" -msgid "could not restore file \"%s\" from archive" -msgstr "no se pudo recuperar el archivo «%s»: %s" - #: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 #: ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 #: ../common/psprintf.c:145 ../port/path.c:632 ../port/path.c:670 @@ -336,23 +289,39 @@ msgstr "memoria agotada\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" +#: ../common/file_utils.c:79 ../common/file_utils.c:181 +#: access/transam/twophase.c:1244 access/transam/xlog.c:10854 +#: access/transam/xlog.c:10892 access/transam/xlog.c:11109 +#: access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:226 +#: commands/copy.c:1938 commands/copy.c:3505 commands/extension.c:3425 +#: commands/tablespace.c:795 commands/tablespace.c:886 +#: replication/basebackup.c:444 replication/basebackup.c:627 +#: replication/basebackup.c:700 replication/logical/snapbuild.c:1522 +#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1816 +#: storage/file/fd.c:3096 storage/file/fd.c:3278 storage/file/fd.c:3364 +#: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 +#: utils/adt/genfile.c:416 utils/adt/genfile.c:642 guc-file.l:1061 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "no se pudo hacer stat al archivo «%s»: %m" + #: ../common/file_utils.c:158 ../common/pgfnames.c:48 commands/tablespace.c:718 -#: commands/tablespace.c:728 postmaster/postmaster.c:1497 -#: storage/file/fd.c:2671 storage/file/reinit.c:122 utils/adt/misc.c:258 +#: commands/tablespace.c:728 postmaster/postmaster.c:1509 +#: storage/file/fd.c:2673 storage/file/reinit.c:122 utils/adt/misc.c:259 #: utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" -#: ../common/file_utils.c:192 ../common/pgfnames.c:69 storage/file/fd.c:2683 +#: ../common/file_utils.c:192 ../common/pgfnames.c:69 storage/file/fd.c:2685 #, c-format msgid "could not read directory \"%s\": %m" msgstr "no se pudo leer el directorio «%s»: %m" #: ../common/file_utils.c:375 access/transam/xlogarchive.c:411 #: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1665 -#: replication/slot.c:607 replication/slot.c:1300 replication/slot.c:1442 -#: storage/file/fd.c:712 utils/time/snapmgr.c:1350 +#: replication/slot.c:650 replication/slot.c:1385 replication/slot.c:1527 +#: storage/file/fd.c:714 utils/time/snapmgr.c:1350 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "no se pudo renombrar el archivo de «%s» a «%s»: %m" @@ -416,7 +385,7 @@ msgstr "Se esperaba una cadena, se encontró «%s»." msgid "Token \"%s\" is invalid." msgstr "El elemento «%s» no es válido." -#: ../common/jsonapi.c:1099 jsonpath_scan.l:495 +#: ../common/jsonapi.c:1099 jsonpath_scan.l:499 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 no puede ser convertido a text." @@ -427,15 +396,15 @@ msgstr "«\\u» debe ser seguido por cuatro dígitos hexadecimales." #: ../common/jsonapi.c:1104 msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." -msgstr "" +msgstr "Los valores de escape Unicode no se pueden utilizar para valores de código superiores a 007F cuando la codificación no es UTF8." -#: ../common/jsonapi.c:1106 jsonpath_scan.l:516 +#: ../common/jsonapi.c:1106 jsonpath_scan.l:520 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Un «high-surrogate» Unicode no puede venir después de un «high-surrogate»." -#: ../common/jsonapi.c:1108 jsonpath_scan.l:527 jsonpath_scan.l:537 -#: jsonpath_scan.l:579 +#: ../common/jsonapi.c:1108 jsonpath_scan.l:531 jsonpath_scan.l:541 +#: jsonpath_scan.l:583 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Un «low-surrogate» Unicode debe seguir a un «high-surrogate»." @@ -471,16 +440,14 @@ msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Los nombres de «fork» válidos son «main», «fsm», «vm» e «init»." #: ../common/restricted_token.c:64 libpq/auth.c:1521 libpq/auth.c:2520 -#, fuzzy, c-format -#| msgid "could not load library \"%s\": %s" +#, c-format msgid "could not load library \"%s\": error code %lu" -msgstr "no se pudo cargar la biblioteca «%s»: %s" +msgstr "no se pudo cargar la biblioteca «%s»: código de error %lu" #: ../common/restricted_token.c:73 -#, fuzzy, c-format -#| msgid "cannot create restricted tokens on this platform" +#, c-format msgid "cannot create restricted tokens on this platform: error code %lu" -msgstr "no se pueden crear tokens restrigidos en esta plataforma" +msgstr "no se pueden crear tokens restrigidos en esta plataforma: código de error %lu" #: ../common/restricted_token.c:82 #, c-format @@ -534,13 +501,15 @@ msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." msgstr "No se puede agrandar el búfer de cadena que ya tiene %d bytes en %d bytes adicionales." #: ../common/stringinfo.c:310 -#, fuzzy, c-format -#| msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." +#, c-format msgid "" "out of memory\n" "\n" "Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" -msgstr "No se puede agrandar el búfer de cadena que ya tiene %d bytes en %d bytes adicionales." +msgstr "" +"memoria agotada\n" +"\n" +"No se puede agrandar el búfer de cadena que ya tiene %d bytes en %d bytes adicionales.\n" #: ../common/username.c:43 #, c-format @@ -670,7 +639,7 @@ msgid "request for BRIN range summarization for index \"%s\" page %u was not rec msgstr "petición para sumarización BRIN de rango para el índice «%s» página %u no fue registrada" #: access/brin/brin.c:873 access/brin/brin.c:950 access/gin/ginfast.c:1035 -#: access/transam/xlog.c:10499 access/transam/xlog.c:11037 +#: access/transam/xlog.c:10522 access/transam/xlog.c:11060 #: access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 #: access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 #: access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 @@ -687,7 +656,7 @@ msgstr "Las funciones de control de BRIN no pueden ejecutarse durante la recuper #: access/brin/brin.c:882 access/brin/brin.c:959 #, c-format msgid "block number out of range: %s" -msgstr "el número de bloque está fuera de rango: %s" +msgstr "número de bloque fuera de rango: %s" #: access/brin/brin.c:905 access/brin/brin.c:982 #, c-format @@ -706,17 +675,12 @@ msgstr "no se pudo abrir la tabla padre del índice %s" msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "el tamaño de fila de índice %zu excede el máximo %zu para el índice «%s»" -#: access/brin/brin_revmap.c:382 access/brin/brin_revmap.c:388 +#: access/brin/brin_revmap.c:392 access/brin/brin_revmap.c:398 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "índice BRIN corrompido: mapa de rango inconsistente" -#: access/brin/brin_revmap.c:405 -#, c-format -msgid "leftover placeholder tuple detected in BRIN index \"%s\", deleting" -msgstr "se detectó una tupla tentativa abandonada en el índice BRIN «%s», eliminando" - -#: access/brin/brin_revmap.c:602 +#: access/brin/brin_revmap.c:601 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "tipo de página 0x%04X inesperado en el índice BRIN «%s» bloque %u" @@ -797,7 +761,7 @@ msgstr "no se pudo convertir el tipo de registro" #: access/common/attmap.c:230 #, c-format msgid "Attribute \"%s\" of type %s does not match corresponding attribute of type %s." -msgstr "El atributo «%s» de tipo %s no coincide el atributo correspondiente de tipo %s." +msgstr "El atributo «%s» de tipo %s no coincide con el atributo correspondiente de tipo %s." #: access/common/attmap.c:242 #, c-format @@ -848,7 +812,7 @@ msgstr "RESET no debe incluir valores de parámetros" msgid "unrecognized parameter namespace \"%s\"" msgstr "espacio de nombre de parámetro «%s» no reconocido" -#: access/common/reloptions.c:1277 utils/misc/guc.c:12014 +#: access/common/reloptions.c:1277 utils/misc/guc.c:12004 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "las tablas declaradas WITH OIDS no está soportado" @@ -894,10 +858,9 @@ msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Valores aceptables están entre «%f» y «%f»." #: access/common/reloptions.c:1637 -#, fuzzy, c-format -#| msgid "invalid value for boolean option \"%s\": %s" +#, c-format msgid "invalid value for enum option \"%s\": %s" -msgstr "valor no válido para la opción booleana «%s»: «%s»" +msgstr "valor no válido para la opción enum «%s»: %s" #: access/common/tupdesc.c:842 parser/parse_clause.c:772 #: parser/parse_relation.c:1803 @@ -930,6 +893,11 @@ msgstr "«%s» no es un índice GIN" msgid "cannot access temporary indexes of other sessions" msgstr "no se pueden acceder índices temporales de otras sesiones" +#: access/gin/ginget.c:270 access/nbtree/nbtinsert.c:745 +#, c-format +msgid "failed to re-find tuple within index \"%s\"" +msgstr "no se pudo volver a encontrar la tupla dentro del índice «%s»" + #: access/gin/ginscan.c:431 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" @@ -977,11 +945,6 @@ msgstr "Esto es causado por una división de página incompleta durante una recu msgid "Please REINDEX it." msgstr "Por favor aplíquele REINDEX." -#: access/gist/gistbuildbuffers.c:779 utils/sort/logtape.c:247 -#, c-format -msgid "could not write block %ld of temporary file: %m" -msgstr "no se pudo escribir el bloque %ld del archivo temporal: %m" - #: access/gist/gistsplit.c:446 #, c-format msgid "picksplit method for column %d of index \"%s\" failed" @@ -1022,11 +985,11 @@ msgstr "no se pudo determinar qué ordenamiento usar para el hashing de cadenas" #: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:702 #: catalog/heap.c:708 commands/createas.c:206 commands/createas.c:489 -#: commands/indexcmds.c:1815 commands/tablecmds.c:15945 commands/view.c:86 -#: parser/parse_utilcmd.c:4116 regex/regc_pg_locale.c:263 +#: commands/indexcmds.c:1815 commands/tablecmds.c:16004 commands/view.c:86 +#: parser/parse_utilcmd.c:4203 regex/regc_pg_locale.c:263 #: utils/adt/formatting.c:1665 utils/adt/formatting.c:1789 #: utils/adt/formatting.c:1914 utils/adt/like.c:194 -#: utils/adt/like_support.c:1005 utils/adt/varchar.c:733 +#: utils/adt/like_support.c:1003 utils/adt/varchar.c:733 #: utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1476 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." @@ -1126,11 +1089,11 @@ msgstr "no se pudo escribir al archivo «%s», se escribió %d de %d: %m" #: access/heap/rewriteheap.c:1015 access/heap/rewriteheap.c:1134 #: access/transam/timeline.c:329 access/transam/timeline.c:485 -#: access/transam/xlog.c:3298 access/transam/xlog.c:3470 -#: access/transam/xlog.c:4668 access/transam/xlog.c:10846 -#: access/transam/xlog.c:10884 access/transam/xlog.c:11289 -#: access/transam/xlogfuncs.c:735 postmaster/postmaster.c:4616 -#: replication/logical/origin.c:575 replication/slot.c:1361 +#: access/transam/xlog.c:3300 access/transam/xlog.c:3472 +#: access/transam/xlog.c:4670 access/transam/xlog.c:10869 +#: access/transam/xlog.c:10907 access/transam/xlog.c:11312 +#: access/transam/xlogfuncs.c:735 postmaster/postmaster.c:4629 +#: replication/logical/origin.c:575 replication/slot.c:1446 #: storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1329 #, c-format msgid "could not create file \"%s\": %m" @@ -1143,189 +1106,188 @@ msgstr "no se pudo truncar el archivo «%s» a %u: %m" #: access/heap/rewriteheap.c:1162 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:502 -#: access/transam/xlog.c:3354 access/transam/xlog.c:3526 -#: access/transam/xlog.c:4680 postmaster/postmaster.c:4626 -#: postmaster/postmaster.c:4636 replication/logical/origin.c:587 +#: access/transam/xlog.c:3356 access/transam/xlog.c:3528 +#: access/transam/xlog.c:4682 postmaster/postmaster.c:4639 +#: postmaster/postmaster.c:4649 replication/logical/origin.c:587 #: replication/logical/origin.c:629 replication/logical/origin.c:648 -#: replication/logical/snapbuild.c:1622 replication/slot.c:1396 -#: storage/file/copydir.c:207 utils/init/miscinit.c:1391 -#: utils/init/miscinit.c:1402 utils/init/miscinit.c:1410 utils/misc/guc.c:8006 -#: utils/misc/guc.c:8037 utils/misc/guc.c:9957 utils/misc/guc.c:9971 -#: utils/time/snapmgr.c:1334 utils/time/snapmgr.c:1341 +#: replication/logical/snapbuild.c:1622 replication/slot.c:1481 +#: storage/file/buffile.c:502 storage/file/copydir.c:207 +#: utils/init/miscinit.c:1391 utils/init/miscinit.c:1402 +#: utils/init/miscinit.c:1410 utils/misc/guc.c:7996 utils/misc/guc.c:8027 +#: utils/misc/guc.c:9947 utils/misc/guc.c:9961 utils/time/snapmgr.c:1334 +#: utils/time/snapmgr.c:1341 #, c-format msgid "could not write to file \"%s\": %m" msgstr "no se pudo escribir a archivo «%s»: %m" #: access/heap/rewriteheap.c:1252 access/transam/twophase.c:1609 #: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:421 -#: postmaster/postmaster.c:1080 postmaster/syslogger.c:1465 -#: replication/logical/origin.c:563 replication/logical/reorderbuffer.c:3087 +#: postmaster/postmaster.c:1092 postmaster/syslogger.c:1465 +#: replication/logical/origin.c:563 replication/logical/reorderbuffer.c:3079 #: replication/logical/snapbuild.c:1564 replication/logical/snapbuild.c:2006 -#: replication/slot.c:1493 storage/file/fd.c:752 storage/file/fd.c:3108 -#: storage/file/fd.c:3170 storage/file/reinit.c:255 storage/ipc/dsm.c:302 +#: replication/slot.c:1578 storage/file/fd.c:754 storage/file/fd.c:3116 +#: storage/file/fd.c:3178 storage/file/reinit.c:255 storage/ipc/dsm.c:302 #: storage/smgr/md.c:311 storage/smgr/md.c:367 storage/sync/sync.c:210 #: utils/time/snapmgr.c:1674 #, c-format msgid "could not remove file \"%s\": %m" msgstr "no se pudo eliminar el archivo «%s»: %m" -#: access/heap/vacuumlazy.c:640 +#: access/heap/vacuumlazy.c:648 #, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum agresivo automático para prevenir wraparound de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:642 -#, fuzzy, c-format -#| msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" +#: access/heap/vacuumlazy.c:650 +#, c-format msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" -msgstr "vacuum agresivo automático para prevenir wraparound de la tabla «%s.%s.%s»: recorridos de índice: %d\n" +msgstr "vacuum automático para prevenir wraparound de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:647 +#: access/heap/vacuumlazy.c:655 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum agresivo automático de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:649 +#: access/heap/vacuumlazy.c:657 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum automático de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:656 +#: access/heap/vacuumlazy.c:664 #, c-format msgid "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n" msgstr "páginas: %u eliminadas, %u quedan, %u saltadas debido a «pins», %u congeladas saltadas\n" -#: access/heap/vacuumlazy.c:662 +#: access/heap/vacuumlazy.c:670 #, c-format msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable, oldest xmin: %u\n" msgstr "tuplas: %.0f removidas, %.0f permanecen ,%.0f están muertas pero aún no se pueden quitar, el xmin más antiguo: %u\n" -#: access/heap/vacuumlazy.c:668 -#, fuzzy, c-format -#| msgid "buffer usage: %d hits, %d misses, %d dirtied\n" +#: access/heap/vacuumlazy.c:676 +#, c-format msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" -msgstr "uso de búfers: %d aciertos, %d fallas, %d ensuciados\n" +msgstr "uso de búfers: %lld aciertos, %lld fallos, %lld ensuciados\n" -#: access/heap/vacuumlazy.c:672 +#: access/heap/vacuumlazy.c:680 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "tasa lectura promedio: %.3f MB/s, tasa escritura promedio: %.3f MB/s\n" -#: access/heap/vacuumlazy.c:674 -#, fuzzy, c-format -#| msgid "system usage: %s" +#: access/heap/vacuumlazy.c:682 +#, c-format msgid "system usage: %s\n" -msgstr "uso de sistema: %s" +msgstr "uso de sistema: %s\n" -#: access/heap/vacuumlazy.c:676 +#: access/heap/vacuumlazy.c:684 #, c-format +#| msgid "WAL usage: %ld records, %ld full page images, %llu bytes" msgid "WAL usage: %ld records, %ld full page images, " -msgstr "" +msgstr "uso de WAL: %ld registros, %ld imágenes de página, " -#: access/heap/vacuumlazy.c:788 +#: access/heap/vacuumlazy.c:796 #, c-format msgid "aggressively vacuuming \"%s.%s\"" msgstr "haciendo vacuum agresivamente a «%s.%s»" -#: access/heap/vacuumlazy.c:793 commands/cluster.c:874 +#: access/heap/vacuumlazy.c:801 commands/cluster.c:874 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "haciendo vacuum a «%s.%s»" -#: access/heap/vacuumlazy.c:830 +#: access/heap/vacuumlazy.c:838 #, c-format msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" -msgstr "" +msgstr "desactivando el comportamiento paralelo de vacuum en «%s» --- no se puede hacer vacuum de tablas temporales en paralelo" -#: access/heap/vacuumlazy.c:1715 +#: access/heap/vacuumlazy.c:1726 #, c-format msgid "\"%s\": removed %.0f row versions in %u pages" msgstr "«%s»: se eliminaron %.0f versiones de filas en %u páginas" -#: access/heap/vacuumlazy.c:1725 +#: access/heap/vacuumlazy.c:1736 #, c-format msgid "%.0f dead row versions cannot be removed yet, oldest xmin: %u\n" msgstr "%.0f versiones muertas de filas no pueden ser eliminadas aún, xmin máx antiguo: %u\n" -#: access/heap/vacuumlazy.c:1727 +#: access/heap/vacuumlazy.c:1738 #, c-format msgid "There were %.0f unused item identifiers.\n" msgstr "Hubo %.0f identificadores de ítem sin usar.\n" -#: access/heap/vacuumlazy.c:1729 +#: access/heap/vacuumlazy.c:1740 #, c-format msgid "Skipped %u page due to buffer pins, " msgid_plural "Skipped %u pages due to buffer pins, " msgstr[0] "Omitiendo %u página debido a «pins» de página, " msgstr[1] "Omitiendo %u páginas debido a «pins» de página, " -#: access/heap/vacuumlazy.c:1733 +#: access/heap/vacuumlazy.c:1744 #, c-format msgid "%u frozen page.\n" msgid_plural "%u frozen pages.\n" msgstr[0] "%u página marcadas «frozen».\n" msgstr[1] "%u páginas marcadas «frozen».\n" -#: access/heap/vacuumlazy.c:1737 +#: access/heap/vacuumlazy.c:1748 #, c-format msgid "%u page is entirely empty.\n" msgid_plural "%u pages are entirely empty.\n" msgstr[0] "%u página está completamente vacía.\n" msgstr[1] "%u páginas están completamente vacías.\n" -#: access/heap/vacuumlazy.c:1741 commands/indexcmds.c:3450 +#: access/heap/vacuumlazy.c:1752 commands/indexcmds.c:3450 #: commands/indexcmds.c:3468 #, c-format msgid "%s." msgstr "%s." -#: access/heap/vacuumlazy.c:1744 +#: access/heap/vacuumlazy.c:1755 #, c-format msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" msgstr "«%s»: se encontraron %.0f versiones de filas eliminables y %.0f no eliminables en %u de %u páginas" -#: access/heap/vacuumlazy.c:1876 +#: access/heap/vacuumlazy.c:1889 #, c-format msgid "\"%s\": removed %d row versions in %d pages" msgstr "«%s»: se eliminaron %d versiones de filas en %d páginas" -#: access/heap/vacuumlazy.c:2138 +#: access/heap/vacuumlazy.c:2144 #, c-format msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index cleanup (planned: %d)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "se lanzó %d proceso asistente para «cleanup» de índices (planeados: %d)" +msgstr[1] "se lanzaron %d procesos asistentes para «cleanup» de índices (planeados: %d)" -#: access/heap/vacuumlazy.c:2144 +#: access/heap/vacuumlazy.c:2150 #, c-format msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "se lanzó %d proceso asistente para «vacuum» de índices (planeados: %d)" +msgstr[1] "se lanzaron %d procesos asistentes para «vacuum» índices (planeados: %d)" -#: access/heap/vacuumlazy.c:2431 +#: access/heap/vacuumlazy.c:2442 #, fuzzy, c-format #| msgid "scanned index \"%s\" to remove %d row versions" msgid "scanned index \"%s\" to remove %d row versions by parallel vacuum worker" msgstr "se recorrió el índice «%s» para eliminar %d versiones de filas" -#: access/heap/vacuumlazy.c:2433 +#: access/heap/vacuumlazy.c:2444 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "se recorrió el índice «%s» para eliminar %d versiones de filas" -#: access/heap/vacuumlazy.c:2493 +#: access/heap/vacuumlazy.c:2502 #, fuzzy, c-format #| msgid "index \"%s\" now contains %.0f row versions in %u pages" msgid "index \"%s\" now contains %.0f row versions in %u pages as reported by parallel vacuum worker" msgstr "el índice «%s» ahora contiene %.0f versiones de filas en %u páginas" -#: access/heap/vacuumlazy.c:2495 +#: access/heap/vacuumlazy.c:2504 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "el índice «%s» ahora contiene %.0f versiones de filas en %u páginas" -#: access/heap/vacuumlazy.c:2502 +#: access/heap/vacuumlazy.c:2511 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -1336,58 +1298,63 @@ msgstr "" "%u páginas de índice han sido eliminadas, %u son reusables.\n" "%s." -#: access/heap/vacuumlazy.c:2599 +#: access/heap/vacuumlazy.c:2614 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "«%s»: suspendiendo el truncado debido a una petición de candado en conflicto" -#: access/heap/vacuumlazy.c:2665 +#: access/heap/vacuumlazy.c:2680 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "«%s»: truncadas %u a %u páginas" -#: access/heap/vacuumlazy.c:2730 +#: access/heap/vacuumlazy.c:2745 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "«%s»: suspendiendo el truncado debido a una petición de candado en conflicto" -#: access/heap/vacuumlazy.c:3477 +#: access/heap/vacuumlazy.c:3492 #, fuzzy, c-format #| msgid "starting background worker process \"%s\"" msgid "starting parallel vacuum worker for %s" msgstr "iniciando el proceso ayudante «%s»" -#: access/heap/vacuumlazy.c:3568 -#, fuzzy, c-format -#| msgid "writing block %u of relation %s" +#: access/heap/vacuumlazy.c:3583 +#, c-format msgid "while scanning block %u of relation \"%s.%s\"" -msgstr "escribiendo el bloque %u de la relación %s" +msgstr "recorriendo el bloque %u de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3574 -#, fuzzy, c-format -#| msgid "writing block %u of relation %s" +#: access/heap/vacuumlazy.c:3586 +#, c-format +msgid "while scanning relation \"%s.%s\"" +msgstr "recorriendo la relación «%s.%s»" + +#: access/heap/vacuumlazy.c:3592 +#, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" -msgstr "escribiendo el bloque %u de la relación %s" +msgstr "haciendo «vacuum» al bloque %u de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3579 -#, fuzzy, c-format -#| msgid "while inserting index tuple (%u,%u) in relation \"%s\"" +#: access/heap/vacuumlazy.c:3595 +#, c-format +msgid "while vacuuming relation \"%s.%s\"" +msgstr "mientras se hacía «vacuum» a la relación «%s.%s»" + +#: access/heap/vacuumlazy.c:3600 +#, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" -msgstr "mientras se insertaba la tupla de índice (%u,%u) en la relación «%s»" +msgstr "mientras se hacía «vacuum» al índice «%s» de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3584 -#, fuzzy, c-format -#| msgid "while deleting tuple (%u,%u) in relation \"%s\"" +#: access/heap/vacuumlazy.c:3605 +#, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" -msgstr "mientras se borraba la tupla (%u,%u) en la relación «%s»" +msgstr "mientras se limpiaba el índice «%s» de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3590 -#, fuzzy, c-format -#| msgid "error while cloning relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" +#: access/heap/vacuumlazy.c:3611 +#, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" -msgstr "error mientras se clonaba la relación «%s.%s» («%s» a «%s»): %s\n" +msgstr "error mientras se truncaba la relación «%s.%s» a %u bloques" -#: access/index/amapi.c:83 commands/amcmds.c:167 +#: access/index/amapi.c:83 commands/amcmds.c:170 #, c-format msgid "access method \"%s\" is not of type %s" msgstr "el método de acceso «%s» no es de tipo %s" @@ -1399,39 +1366,33 @@ msgstr "el método de acceso «%s» no tiene manejador" #: access/index/indexam.c:142 catalog/objectaddress.c:1260 #: commands/indexcmds.c:2517 commands/tablecmds.c:254 commands/tablecmds.c:278 -#: commands/tablecmds.c:15643 commands/tablecmds.c:17098 +#: commands/tablecmds.c:15702 commands/tablecmds.c:17157 #, c-format msgid "\"%s\" is not an index" msgstr "«%s» no es un índice" #: access/index/indexam.c:970 -#, fuzzy, c-format -#| msgid "operator class %s for access method %s" +#, c-format msgid "operator class %s has no options" -msgstr "clase de operadores «%s» para el método de acceso «%s»" +msgstr "clase de operadores «%s» no tiene opciones" -#: access/nbtree/nbtinsert.c:650 +#: access/nbtree/nbtinsert.c:651 #, c-format msgid "duplicate key value violates unique constraint \"%s\"" msgstr "llave duplicada viola restricción de unicidad «%s»" -#: access/nbtree/nbtinsert.c:652 +#: access/nbtree/nbtinsert.c:653 #, c-format msgid "Key %s already exists." msgstr "Ya existe la llave %s." -#: access/nbtree/nbtinsert.c:744 -#, c-format -msgid "failed to re-find tuple within index \"%s\"" -msgstr "no se pudo volver a encontrar la tupla dentro del índice «%s»" - -#: access/nbtree/nbtinsert.c:746 +#: access/nbtree/nbtinsert.c:747 #, c-format msgid "This may be because of a non-immutable index expression." msgstr "Esto puede deberse a una expresión de índice no inmutable." #: access/nbtree/nbtpage.c:150 access/nbtree/nbtpage.c:538 -#: parser/parse_utilcmd.c:2156 +#: parser/parse_utilcmd.c:2244 #, c-format msgid "index \"%s\" is not a btree" msgstr "el índice «%s» no es un btree" @@ -1497,12 +1458,12 @@ msgid "\"%s\" is an index" msgstr "«%s» es un índice" #: access/table/table.c:54 access/table/table.c:83 access/table/table.c:116 -#: catalog/aclchk.c:1813 commands/tablecmds.c:12464 commands/tablecmds.c:15652 +#: catalog/aclchk.c:1813 commands/tablecmds.c:12523 commands/tablecmds.c:15711 #, c-format msgid "\"%s\" is a composite type" msgstr "«%s» es un tipo compuesto" -#: access/table/tableam.c:240 +#: access/table/tableam.c:244 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "el tid (%u, %u) no es válido para la relación «%s»" @@ -1512,7 +1473,7 @@ msgstr "el tid (%u, %u) no es válido para la relación «%s»" msgid "%s cannot be empty." msgstr "%s no puede ser vacío." -#: access/table/tableamapi.c:122 utils/misc/guc.c:11938 +#: access/table/tableamapi.c:122 utils/misc/guc.c:11928 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s es demasiado largo (máximo %d caracteres)." @@ -1763,12 +1724,12 @@ msgstr "No se pudo sincronizar (fsync) archivo «%s»: %m." msgid "Could not close file \"%s\": %m." msgstr "No se pudo cerrar el archivo «%s»: %m." -#: access/transam/slru.c:1246 +#: access/transam/slru.c:1254 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "no se pudo truncar el directorio «%s»: aparente problema por reciclaje de transacciones" -#: access/transam/slru.c:1301 access/transam/slru.c:1357 +#: access/transam/slru.c:1309 access/transam/slru.c:1365 #, c-format msgid "removing file \"%s\"" msgstr "eliminando el archivo «%s»" @@ -1905,7 +1866,7 @@ msgstr "tamaño no válido en archivo «%s»" msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "la suma de verificación calculada no coincide con el valor almacenado en el archivo «%s»" -#: access/transam/twophase.c:1342 access/transam/xlog.c:6492 +#: access/transam/twophase.c:1342 access/transam/xlog.c:6494 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Falló mientras se emplazaba un procesador de lectura de WAL." @@ -2115,437 +2076,433 @@ msgstr "no se pueden comprometer subtransacciones durante una operación paralel msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "no se pueden tener más de 2^32-1 subtransacciones en una transacción" -#: access/transam/xlog.c:2552 +#: access/transam/xlog.c:2554 #, c-format msgid "could not write to log file %s at offset %u, length %zu: %m" msgstr "no se pudo escribir archivo de registro %s en la posición %u, largo %zu: %m" -#: access/transam/xlog.c:2828 +#: access/transam/xlog.c:2830 #, c-format msgid "updated min recovery point to %X/%X on timeline %u" msgstr "el punto mínimo de recuperación fue actualizado a %X/%X en el timeline %u" -#: access/transam/xlog.c:3942 access/transam/xlogutils.c:802 -#: replication/walsender.c:2517 +#: access/transam/xlog.c:3944 access/transam/xlogutils.c:802 +#: replication/walsender.c:2502 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "el segmento de WAL solicitado %s ya ha sido eliminado" -#: access/transam/xlog.c:4185 +#: access/transam/xlog.c:4187 #, c-format msgid "recycled write-ahead log file \"%s\"" msgstr "reciclado archivo de WAL «%s»" -#: access/transam/xlog.c:4197 +#: access/transam/xlog.c:4199 #, c-format msgid "removing write-ahead log file \"%s\"" msgstr "eliminando archivo de WAL «%s»" -#: access/transam/xlog.c:4217 +#: access/transam/xlog.c:4219 #, c-format msgid "could not rename file \"%s\": %m" msgstr "no se pudo renombrar el archivo «%s»: %m" -#: access/transam/xlog.c:4259 access/transam/xlog.c:4269 +#: access/transam/xlog.c:4261 access/transam/xlog.c:4271 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "no existe el directorio WAL «%s»" -#: access/transam/xlog.c:4275 +#: access/transam/xlog.c:4277 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "creando el directorio WAL faltante «%s»" -#: access/transam/xlog.c:4278 +#: access/transam/xlog.c:4280 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "no se pudo crear el directorio faltante «%s»: %m" -#: access/transam/xlog.c:4381 +#: access/transam/xlog.c:4383 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "ID de timeline %u inesperado en archivo %s, posición %u" -#: access/transam/xlog.c:4519 +#: access/transam/xlog.c:4521 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "el nuevo timeline %u especificado no es hijo del timeline de sistema %u" -#: access/transam/xlog.c:4533 +#: access/transam/xlog.c:4535 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "el nuevo timeline %u bifurcó del timeline del sistema actual %u antes del punto re recuperación actual %X/%X" -#: access/transam/xlog.c:4552 +#: access/transam/xlog.c:4554 #, c-format msgid "new target timeline is %u" msgstr "el nuevo timeline destino es %u" -#: access/transam/xlog.c:4588 +#: access/transam/xlog.c:4590 #, c-format msgid "could not generate secret authorization token" msgstr "no se pudo generar un token de autorización secreto" -#: access/transam/xlog.c:4747 access/transam/xlog.c:4756 -#: access/transam/xlog.c:4780 access/transam/xlog.c:4787 -#: access/transam/xlog.c:4794 access/transam/xlog.c:4799 -#: access/transam/xlog.c:4806 access/transam/xlog.c:4813 -#: access/transam/xlog.c:4820 access/transam/xlog.c:4827 -#: access/transam/xlog.c:4834 access/transam/xlog.c:4841 -#: access/transam/xlog.c:4850 access/transam/xlog.c:4857 +#: access/transam/xlog.c:4749 access/transam/xlog.c:4758 +#: access/transam/xlog.c:4782 access/transam/xlog.c:4789 +#: access/transam/xlog.c:4796 access/transam/xlog.c:4801 +#: access/transam/xlog.c:4808 access/transam/xlog.c:4815 +#: access/transam/xlog.c:4822 access/transam/xlog.c:4829 +#: access/transam/xlog.c:4836 access/transam/xlog.c:4843 +#: access/transam/xlog.c:4852 access/transam/xlog.c:4859 #: utils/init/miscinit.c:1548 #, c-format msgid "database files are incompatible with server" msgstr "los archivos de base de datos son incompatibles con el servidor" -#: access/transam/xlog.c:4748 +#: access/transam/xlog.c:4750 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), but the server was compiled with PG_CONTROL_VERSION %d (0x%08x)." msgstr "Los archivos de base de datos fueron inicializados con PG_CONTROL_VERSION %d (0x%08x), pero el servidor fue compilado con PG_CONTROL_VERSION %d (0x%08x)." -#: access/transam/xlog.c:4752 +#: access/transam/xlog.c:4754 #, c-format msgid "This could be a problem of mismatched byte ordering. It looks like you need to initdb." msgstr "Este puede ser un problema de discordancia en el orden de bytes. Parece que necesitará ejecutar initdb." -#: access/transam/xlog.c:4757 +#: access/transam/xlog.c:4759 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d, but the server was compiled with PG_CONTROL_VERSION %d." msgstr "Los archivos de base de datos fueron inicializados con PG_CONTROL_VERSION %d, pero el servidor fue compilado con PG_CONTROL_VERSION %d." -#: access/transam/xlog.c:4760 access/transam/xlog.c:4784 -#: access/transam/xlog.c:4791 access/transam/xlog.c:4796 +#: access/transam/xlog.c:4762 access/transam/xlog.c:4786 +#: access/transam/xlog.c:4793 access/transam/xlog.c:4798 #, c-format msgid "It looks like you need to initdb." msgstr "Parece que necesita ejecutar initdb." -#: access/transam/xlog.c:4771 +#: access/transam/xlog.c:4773 #, c-format msgid "incorrect checksum in control file" msgstr "la suma de verificación es incorrecta en el archivo de control" -#: access/transam/xlog.c:4781 +#: access/transam/xlog.c:4783 #, c-format msgid "The database cluster was initialized with CATALOG_VERSION_NO %d, but the server was compiled with CATALOG_VERSION_NO %d." msgstr "Los archivos de base de datos fueron inicializados con CATALOG_VERSION_NO %d, pero el servidor fue compilado con CATALOG_VERSION_NO %d." -#: access/transam/xlog.c:4788 +#: access/transam/xlog.c:4790 #, c-format msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." msgstr "Los archivos de la base de datos fueron inicializados con MAXALIGN %d, pero el servidor fue compilado con MAXALIGN %d." -#: access/transam/xlog.c:4795 +#: access/transam/xlog.c:4797 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "Los archivos de la base de datos parecen usar un formato de número de coma flotante distinto al del ejecutable del servidor." -#: access/transam/xlog.c:4800 +#: access/transam/xlog.c:4802 #, c-format msgid "The database cluster was initialized with BLCKSZ %d, but the server was compiled with BLCKSZ %d." msgstr "Los archivos de base de datos fueron inicializados con BLCKSZ %d, pero el servidor fue compilado con BLCKSZ %d." -#: access/transam/xlog.c:4803 access/transam/xlog.c:4810 -#: access/transam/xlog.c:4817 access/transam/xlog.c:4824 -#: access/transam/xlog.c:4831 access/transam/xlog.c:4838 -#: access/transam/xlog.c:4845 access/transam/xlog.c:4853 -#: access/transam/xlog.c:4860 +#: access/transam/xlog.c:4805 access/transam/xlog.c:4812 +#: access/transam/xlog.c:4819 access/transam/xlog.c:4826 +#: access/transam/xlog.c:4833 access/transam/xlog.c:4840 +#: access/transam/xlog.c:4847 access/transam/xlog.c:4855 +#: access/transam/xlog.c:4862 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Parece que necesita recompilar o ejecutar initdb." -#: access/transam/xlog.c:4807 +#: access/transam/xlog.c:4809 #, c-format msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." msgstr "Los archivos de la base de datos fueron inicializados con RELSEG_SIZE %d, pero el servidor fue compilado con RELSEG_SIZE %d." -#: access/transam/xlog.c:4814 +#: access/transam/xlog.c:4816 #, c-format msgid "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was compiled with XLOG_BLCKSZ %d." msgstr "Los archivos de base de datos fueron inicializados con XLOG_BLCKSZ %d, pero el servidor fue compilado con XLOG_BLCKSZ %d." -#: access/transam/xlog.c:4821 +#: access/transam/xlog.c:4823 #, c-format msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." msgstr "Los archivos de la base de datos fueron inicializados con NAMEDATALEN %d, pero el servidor fue compilado con NAMEDATALEN %d." -#: access/transam/xlog.c:4828 +#: access/transam/xlog.c:4830 #, c-format msgid "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server was compiled with INDEX_MAX_KEYS %d." msgstr "Los archivos de la base de datos fueron inicializados con INDEX_MAX_KEYS %d, pero el servidor fue compilado con INDEX_MAX_KEYS %d." -#: access/transam/xlog.c:4835 +#: access/transam/xlog.c:4837 #, c-format msgid "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the server was compiled with TOAST_MAX_CHUNK_SIZE %d." msgstr "Los archivos de la base de datos fueron inicializados con TOAST_MAX_CHUNK_SIZE %d, pero el servidor fue compilado con TOAST_MAX_CHUNK_SIZE %d." -#: access/transam/xlog.c:4842 +#: access/transam/xlog.c:4844 #, c-format msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." msgstr "Los archivos de base de datos fueron inicializados con LOBLKSIZE %d, pero el servidor fue compilado con LOBLKSIZE %d." -#: access/transam/xlog.c:4851 +#: access/transam/xlog.c:4853 #, c-format msgid "The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL." msgstr "Los archivos de base de datos fueron inicializados sin USE_FLOAT8_BYVAL, pero el servidor fue compilado con USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4858 +#: access/transam/xlog.c:4860 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "Los archivos de base de datos fueron inicializados con USE_FLOAT8_BYVAL, pero el servidor fue compilado sin USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4867 +#: access/transam/xlog.c:4869 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "El tamaño del segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el archivo de control especifica %d byte" msgstr[1] "El tamaño del segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el archivo de control especifica %d bytes" -#: access/transam/xlog.c:4879 +#: access/transam/xlog.c:4881 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "«min_wal_size» debe ser al menos el doble de «wal_segment_size»" -#: access/transam/xlog.c:4883 +#: access/transam/xlog.c:4885 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "«max_wal_size» debe ser al menos el doble de «wal_segment_size»" -#: access/transam/xlog.c:5316 +#: access/transam/xlog.c:5318 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "no se pudo escribir el archivo WAL de boostrap: %m" -#: access/transam/xlog.c:5324 +#: access/transam/xlog.c:5326 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "no se pudo sincronizar (fsync) el archivo de WAL de bootstrap: %m" -#: access/transam/xlog.c:5330 +#: access/transam/xlog.c:5332 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "no se pudo cerrar el archivo WAL de bootstrap: %m" -#: access/transam/xlog.c:5391 +#: access/transam/xlog.c:5393 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "el uso del archivo de configuración de recuperación «%s» no está soportado" -#: access/transam/xlog.c:5456 +#: access/transam/xlog.c:5458 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "el modo standby no está soportado en el modo mono-usuario" -#: access/transam/xlog.c:5473 +#: access/transam/xlog.c:5475 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "no se especifica primary_conninfo ni restore_command" -#: access/transam/xlog.c:5474 +#: access/transam/xlog.c:5476 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "El servidor de bases de datos monitoreará el subdirectorio pg_wal con regularidad en búsqueda de archivos almacenados ahí." -#: access/transam/xlog.c:5482 +#: access/transam/xlog.c:5484 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "debe especificarse restore_command cuando el modo standby no está activo" -#: access/transam/xlog.c:5520 +#: access/transam/xlog.c:5522 #, c-format msgid "recovery target timeline %u does not exist" msgstr "no existe el timeline %u especificado como destino de recuperación" -#: access/transam/xlog.c:5642 +#: access/transam/xlog.c:5644 #, c-format msgid "archive recovery complete" msgstr "recuperación completa" -#: access/transam/xlog.c:5708 access/transam/xlog.c:5981 +#: access/transam/xlog.c:5710 access/transam/xlog.c:5983 #, c-format msgid "recovery stopping after reaching consistency" msgstr "deteniendo recuperación al alcanzar un estado consistente" -#: access/transam/xlog.c:5729 +#: access/transam/xlog.c:5731 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "deteniendo recuperación antes de la ubicación (LSN) de WAL «%X/%X»" -#: access/transam/xlog.c:5815 +#: access/transam/xlog.c:5817 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "deteniendo recuperación antes de comprometer la transacción %u, hora %s" -#: access/transam/xlog.c:5822 +#: access/transam/xlog.c:5824 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "deteniendo recuperación antes de abortar la transacción %u, hora %s" -#: access/transam/xlog.c:5875 +#: access/transam/xlog.c:5877 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "deteniendo recuperación en el punto de recuperación «%s», hora %s" -#: access/transam/xlog.c:5893 +#: access/transam/xlog.c:5895 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "deteniendo recuperación después de la ubicación (LSN) de WAL «%X/%X»" -#: access/transam/xlog.c:5961 +#: access/transam/xlog.c:5963 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "deteniendo recuperación de comprometer la transacción %u, hora %s" -#: access/transam/xlog.c:5969 +#: access/transam/xlog.c:5971 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "deteniendo recuperación después de abortar la transacción %u, hora %s" -#: access/transam/xlog.c:6018 -#, fuzzy, c-format -#| msgid "starting archive recovery" +#: access/transam/xlog.c:6020 +#, c-format msgid "pausing at the end of recovery" -msgstr "comenzando proceso de recuperación" +msgstr "pausando al final de la recuperación" -#: access/transam/xlog.c:6019 -#, fuzzy, c-format -#| msgid "Execute pg_wal_replay_resume() to continue." +#: access/transam/xlog.c:6021 +#, c-format msgid "Execute pg_wal_replay_resume() to promote." -msgstr "Ejecute pg_wal_replay_resume() para continuar." +msgstr "Ejecute pg_wal_replay_resume() para promover." -#: access/transam/xlog.c:6022 +#: access/transam/xlog.c:6024 #, c-format msgid "recovery has paused" msgstr "la recuperación está en pausa" -#: access/transam/xlog.c:6023 +#: access/transam/xlog.c:6025 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Ejecute pg_wal_replay_resume() para continuar." -#: access/transam/xlog.c:6240 +#: access/transam/xlog.c:6242 #, c-format msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" msgstr "hot standby no es posible puesto que %s = %d es una configuración menor que en el servidor maestro (su valor era %d)" -#: access/transam/xlog.c:6264 +#: access/transam/xlog.c:6266 #, c-format msgid "WAL was generated with wal_level=minimal, data may be missing" msgstr "WAL fue generado con wal_level=minimal, puede haber datos faltantes" -#: access/transam/xlog.c:6265 +#: access/transam/xlog.c:6267 #, c-format msgid "This happens if you temporarily set wal_level=minimal without taking a new base backup." msgstr "Esto sucede si temporalmente define wal_level=minimal sin tomar un nuevo respaldo base." -#: access/transam/xlog.c:6276 +#: access/transam/xlog.c:6278 #, c-format msgid "hot standby is not possible because wal_level was not set to \"replica\" or higher on the master server" msgstr "hot standby no es posible porque wal_level no estaba configurado como «replica» o superior en el servidor maestro" -#: access/transam/xlog.c:6277 +#: access/transam/xlog.c:6279 #, c-format msgid "Either set wal_level to \"replica\" on the master, or turn off hot_standby here." msgstr "Defina wal_level a «replica» en el maestro, o bien desactive hot_standby en este servidor." -#: access/transam/xlog.c:6339 -#, fuzzy, c-format -#| msgid "control file contains invalid data" +#: access/transam/xlog.c:6341 +#, c-format msgid "control file contains invalid checkpoint location" -msgstr "el archivo de control contiene datos no válidos" +msgstr "el archivo de control contiene una ubicación no válida de punto de control" -#: access/transam/xlog.c:6350 +#: access/transam/xlog.c:6352 #, c-format msgid "database system was shut down at %s" msgstr "el sistema de bases de datos fue apagado en %s" -#: access/transam/xlog.c:6356 +#: access/transam/xlog.c:6358 #, c-format msgid "database system was shut down in recovery at %s" msgstr "el sistema de bases de datos fue apagado durante la recuperación en %s" -#: access/transam/xlog.c:6362 +#: access/transam/xlog.c:6364 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "el apagado del sistema de datos fue interrumpido; última vez registrada en funcionamiento en %s" -#: access/transam/xlog.c:6368 +#: access/transam/xlog.c:6370 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "el sistema de bases de datos fue interrumpido durante la recuperación en %s" -#: access/transam/xlog.c:6370 +#: access/transam/xlog.c:6372 #, c-format msgid "This probably means that some data is corrupted and you will have to use the last backup for recovery." msgstr "Esto probablemente significa que algunos datos están corruptos y tendrá que usar el respaldo más reciente para la recuperación." -#: access/transam/xlog.c:6376 +#: access/transam/xlog.c:6378 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "el sistema de bases de datos fue interrumpido durante la recuperación en el instante de registro %s" -#: access/transam/xlog.c:6378 +#: access/transam/xlog.c:6380 #, c-format msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." msgstr "Si esto ha ocurrido más de una vez, algunos datos podrían estar corruptos y podría ser necesario escoger un punto de recuperación anterior." -#: access/transam/xlog.c:6384 +#: access/transam/xlog.c:6386 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "el sistema de bases de datos fue interrumpido; última vez en funcionamiento en %s" -#: access/transam/xlog.c:6390 -#, fuzzy, c-format -#| msgid "control file contains invalid data" +#: access/transam/xlog.c:6392 +#, c-format msgid "control file contains invalid database cluster state" -msgstr "el archivo de control contiene datos no válidos" +msgstr "el archivo de control contiene un estado no válido del clúster" -#: access/transam/xlog.c:6447 +#: access/transam/xlog.c:6449 #, c-format msgid "entering standby mode" msgstr "entrando al modo standby" -#: access/transam/xlog.c:6450 +#: access/transam/xlog.c:6452 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "comenzando el proceso de recuperación hasta el XID %u" -#: access/transam/xlog.c:6454 +#: access/transam/xlog.c:6456 #, c-format msgid "starting point-in-time recovery to %s" msgstr "comenzando el proceso de recuperación hasta %s" -#: access/transam/xlog.c:6458 +#: access/transam/xlog.c:6460 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "comenzando el proceso de recuperación hasta «%s»" -#: access/transam/xlog.c:6462 +#: access/transam/xlog.c:6464 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "comenzando el proceso de recuperación punto-en-el-tiempo a la ubicación (LSN) de WAL «%X/%X»" -#: access/transam/xlog.c:6467 +#: access/transam/xlog.c:6469 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "comenzando recuperación a un punto en el tiempo hasta alcanzar un estado consistente" -#: access/transam/xlog.c:6470 +#: access/transam/xlog.c:6472 #, c-format msgid "starting archive recovery" msgstr "comenzando proceso de recuperación" -#: access/transam/xlog.c:6529 access/transam/xlog.c:6662 +#: access/transam/xlog.c:6531 access/transam/xlog.c:6664 #, c-format msgid "checkpoint record is at %X/%X" msgstr "el registro del punto de control está en %X/%X" -#: access/transam/xlog.c:6544 +#: access/transam/xlog.c:6546 #, c-format msgid "could not find redo location referenced by checkpoint record" -msgstr "no se pudo encontrar la ubicación de redo referida por el registro de checkpoint" +msgstr "no se pudo encontrar la ubicación de redo referida por el registro de punto de control" # Purposefully deviate from quoting convention here, since argument is a shell command. -#: access/transam/xlog.c:6545 access/transam/xlog.c:6555 +#: access/transam/xlog.c:6547 access/transam/xlog.c:6557 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2556,278 +2513,278 @@ msgstr "" "Si no está restaurando de un respaldo, intente eliminar el archivo \"%s/backup_label\".\n" "Tenga cuidado: eliminar \"%s/backup_label\" resultará en un clúster corrupto si está restaurando de un respaldo." -#: access/transam/xlog.c:6554 +#: access/transam/xlog.c:6556 #, c-format msgid "could not locate required checkpoint record" msgstr "no se pudo localizar el registro del punto de control requerido" -#: access/transam/xlog.c:6583 commands/tablespace.c:654 +#: access/transam/xlog.c:6585 commands/tablespace.c:654 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "no se pudo crear el enlace simbólico «%s»: %m" -#: access/transam/xlog.c:6615 access/transam/xlog.c:6621 +#: access/transam/xlog.c:6617 access/transam/xlog.c:6623 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ignorando el archivo «%s» porque no existe un archivo «%s»" -#: access/transam/xlog.c:6617 access/transam/xlog.c:11805 +#: access/transam/xlog.c:6619 access/transam/xlog.c:11828 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "El archivo «%s» fue renombrado a «%s»." -#: access/transam/xlog.c:6623 +#: access/transam/xlog.c:6625 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "No se pudo renombrar el archivo de «%s» a «%s»: %m." -#: access/transam/xlog.c:6674 +#: access/transam/xlog.c:6676 #, c-format msgid "could not locate a valid checkpoint record" msgstr "no se pudo localizar un registro de punto de control válido" -#: access/transam/xlog.c:6712 +#: access/transam/xlog.c:6714 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "el timeline solicitado %u no es un hijo de la historia de este servidor" -#: access/transam/xlog.c:6714 +#: access/transam/xlog.c:6716 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "El punto de control más reciente está en %X/%X en el timeline %u, pero en la historia del timeline solicitado, el servidor se desvió desde ese timeline en %X/%X." -#: access/transam/xlog.c:6730 +#: access/transam/xlog.c:6732 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "el timeline solicitado %u no contiene el punto mínimo de recuperación %X/%X en el timeline %u" -#: access/transam/xlog.c:6761 +#: access/transam/xlog.c:6763 #, c-format msgid "invalid next transaction ID" msgstr "el siguiente ID de transacción no es válido" -#: access/transam/xlog.c:6855 +#: access/transam/xlog.c:6857 #, c-format msgid "invalid redo in checkpoint record" msgstr "redo no es válido en el registro de punto de control" -#: access/transam/xlog.c:6866 +#: access/transam/xlog.c:6868 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "registro redo no es válido en el punto de control de apagado" -#: access/transam/xlog.c:6900 +#: access/transam/xlog.c:6902 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "el sistema de bases de datos no fue apagado apropiadamente; se está efectuando la recuperación automática" -#: access/transam/xlog.c:6904 +#: access/transam/xlog.c:6906 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "la recuperación comienza en el timeline %u y tiene un timeline de destino %u" -#: access/transam/xlog.c:6951 +#: access/transam/xlog.c:6953 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label contiene datos inconsistentes con el archivo de control" -#: access/transam/xlog.c:6952 +#: access/transam/xlog.c:6954 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "Esto significa que el respaldo está corrupto y deberá usar otro respaldo para la recuperación." -#: access/transam/xlog.c:7043 +#: access/transam/xlog.c:7045 #, c-format msgid "initializing for hot standby" msgstr "inicializando para hot standby" -#: access/transam/xlog.c:7176 +#: access/transam/xlog.c:7178 #, c-format msgid "redo starts at %X/%X" msgstr "redo comienza en %X/%X" -#: access/transam/xlog.c:7400 +#: access/transam/xlog.c:7402 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "el punto de detención de recuperación pedido es antes del punto de recuperación consistente" -#: access/transam/xlog.c:7438 +#: access/transam/xlog.c:7440 #, c-format msgid "redo done at %X/%X" msgstr "redo listo en %X/%X" -#: access/transam/xlog.c:7443 +#: access/transam/xlog.c:7445 #, c-format msgid "last completed transaction was at log time %s" msgstr "última transacción completada al tiempo de registro %s" -#: access/transam/xlog.c:7452 +#: access/transam/xlog.c:7454 #, c-format msgid "redo is not required" msgstr "no se requiere redo" -#: access/transam/xlog.c:7464 +#: access/transam/xlog.c:7466 #, c-format msgid "recovery ended before configured recovery target was reached" -msgstr "" +msgstr "la recuperación terminó antes de alcanzar el punto configurado como destino de recuperación" -#: access/transam/xlog.c:7543 access/transam/xlog.c:7547 +#: access/transam/xlog.c:7545 access/transam/xlog.c:7549 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL termina antes del fin del respaldo en línea" -#: access/transam/xlog.c:7544 +#: access/transam/xlog.c:7546 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Todo el WAL generado durante el respaldo en línea debe estar disponible durante la recuperación." -#: access/transam/xlog.c:7548 +#: access/transam/xlog.c:7550 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "Un respaldo en línea iniciado con pg_start_backup() debe ser terminado con pg_stop_backup(), y todos los archivos WAL hasta ese punto deben estar disponibles durante la recuperación." -#: access/transam/xlog.c:7551 +#: access/transam/xlog.c:7553 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL termina antes del punto de recuperación consistente" -#: access/transam/xlog.c:7586 +#: access/transam/xlog.c:7588 #, c-format msgid "selected new timeline ID: %u" msgstr "seleccionado nuevo ID de timeline: %u" -#: access/transam/xlog.c:8034 +#: access/transam/xlog.c:8036 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "el estado de recuperación consistente fue alcanzado en %X/%X" -#: access/transam/xlog.c:8244 +#: access/transam/xlog.c:8246 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "el enlace de punto de control primario en archivo de control no es válido" -#: access/transam/xlog.c:8248 +#: access/transam/xlog.c:8250 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "el enlace del punto de control en backup_label no es válido" -#: access/transam/xlog.c:8266 +#: access/transam/xlog.c:8268 #, c-format msgid "invalid primary checkpoint record" msgstr "el registro del punto de control primario no es válido" -#: access/transam/xlog.c:8270 +#: access/transam/xlog.c:8272 #, c-format msgid "invalid checkpoint record" msgstr "el registro del punto de control no es válido" -#: access/transam/xlog.c:8281 +#: access/transam/xlog.c:8283 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "el ID de gestor de recursos en el registro del punto de control primario no es válido" -#: access/transam/xlog.c:8285 +#: access/transam/xlog.c:8287 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "el ID de gestor de recursos en el registro del punto de control no es válido" -#: access/transam/xlog.c:8298 +#: access/transam/xlog.c:8300 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "xl_info en el registro del punto de control primario no es válido" -#: access/transam/xlog.c:8302 +#: access/transam/xlog.c:8304 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "xl_info en el registro del punto de control no es válido" -#: access/transam/xlog.c:8313 +#: access/transam/xlog.c:8315 #, c-format msgid "invalid length of primary checkpoint record" msgstr "la longitud del registro del punto de control primario no es válida" -#: access/transam/xlog.c:8317 +#: access/transam/xlog.c:8319 #, c-format msgid "invalid length of checkpoint record" msgstr "la longitud del registro de punto de control no es válida" -#: access/transam/xlog.c:8497 +#: access/transam/xlog.c:8499 #, c-format msgid "shutting down" msgstr "apagando" -#: access/transam/xlog.c:8817 +#: access/transam/xlog.c:8819 #, c-format msgid "checkpoint skipped because system is idle" msgstr "omitiendo checkpoint porque el sistema está inactivo" -#: access/transam/xlog.c:9017 +#: access/transam/xlog.c:9019 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "hay actividad de WAL mientras el sistema se está apagando" -#: access/transam/xlog.c:9274 +#: access/transam/xlog.c:9276 #, c-format msgid "skipping restartpoint, recovery has already ended" msgstr "omitiendo el restartpoint, la recuperación ya ha terminado" -#: access/transam/xlog.c:9297 +#: access/transam/xlog.c:9299 #, c-format msgid "skipping restartpoint, already performed at %X/%X" msgstr "omitiendo el restartpoint, ya fue llevado a cabo en %X/%X" -#: access/transam/xlog.c:9465 +#: access/transam/xlog.c:9467 #, c-format msgid "recovery restart point at %X/%X" msgstr "restartpoint de recuperación en %X/%X" -#: access/transam/xlog.c:9467 +#: access/transam/xlog.c:9469 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Última transacción completada al tiempo de registro %s." -#: access/transam/xlog.c:9696 +#: access/transam/xlog.c:9711 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "punto de recuperación «%s» creado en %X/%X" -#: access/transam/xlog.c:9837 +#: access/transam/xlog.c:9856 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "ID de timeline previo %u inesperado (timeline actual %u) en el registro de punto de control" -#: access/transam/xlog.c:9846 +#: access/transam/xlog.c:9865 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "ID de timeline %u inesperado (después de %u) en el registro de punto de control" -#: access/transam/xlog.c:9862 +#: access/transam/xlog.c:9881 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "timeline ID %u inesperado en registro de checkpoint, antes de alcanzar el punto mínimo de recuperación %X/%X en el timeline %u" -#: access/transam/xlog.c:9938 +#: access/transam/xlog.c:9957 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "el respaldo en línea fue cancelado, la recuperación no puede continuar" -#: access/transam/xlog.c:9992 access/transam/xlog.c:10046 -#: access/transam/xlog.c:10069 +#: access/transam/xlog.c:10013 access/transam/xlog.c:10069 +#: access/transam/xlog.c:10092 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "ID de timeline %u inesperado (debería ser %u) en el registro de punto de control" -#: access/transam/xlog.c:10395 +#: access/transam/xlog.c:10418 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "no se pudo sincronizar (fsync write-through) el archivo «%s»: %m" -#: access/transam/xlog.c:10401 +#: access/transam/xlog.c:10424 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "no se pudo sincronizar (fdatasync) archivo «%s»: %m" -#: access/transam/xlog.c:10500 access/transam/xlog.c:11038 +#: access/transam/xlog.c:10523 access/transam/xlog.c:11061 #: access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 #: access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 #: access/transam/xlogfuncs.c:383 @@ -2835,204 +2792,204 @@ msgstr "no se pudo sincronizar (fdatasync) archivo «%s»: %m" msgid "WAL control functions cannot be executed during recovery." msgstr "Las funciones de control de WAL no pueden ejecutarse durante la recuperación." -#: access/transam/xlog.c:10509 access/transam/xlog.c:11047 +#: access/transam/xlog.c:10532 access/transam/xlog.c:11070 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "el nivel de WAL no es suficiente para hacer un respaldo en línea" -#: access/transam/xlog.c:10510 access/transam/xlog.c:11048 +#: access/transam/xlog.c:10533 access/transam/xlog.c:11071 #: access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "wal_level debe ser definido a «replica» o «logical» al inicio del servidor." -#: access/transam/xlog.c:10515 +#: access/transam/xlog.c:10538 #, c-format msgid "backup label too long (max %d bytes)" msgstr "la etiqueta de respaldo es demasiado larga (máximo %d bytes)" -#: access/transam/xlog.c:10552 access/transam/xlog.c:10837 -#: access/transam/xlog.c:10875 +#: access/transam/xlog.c:10575 access/transam/xlog.c:10860 +#: access/transam/xlog.c:10898 #, c-format msgid "a backup is already in progress" msgstr "ya hay un respaldo en curso" -#: access/transam/xlog.c:10553 +#: access/transam/xlog.c:10576 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Ejecute pg_stop_backup() e intente nuevamente." -#: access/transam/xlog.c:10649 +#: access/transam/xlog.c:10672 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "el WAL generado con full_page_writes=off fue restaurado desde el último restartpoint" -#: access/transam/xlog.c:10651 access/transam/xlog.c:11243 +#: access/transam/xlog.c:10674 access/transam/xlog.c:11266 #, c-format msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the master, and then try an online backup again." msgstr "Esto significa que el respaldo que estaba siendo tomado en el standby está corrupto y no debería usarse. Active full_page_writes y ejecute CHECKPOINT en el maestro, luego trate de ejecutar un respaldo en línea nuevamente." -#: access/transam/xlog.c:10734 replication/basebackup.c:1420 -#: utils/adt/misc.c:341 +#: access/transam/xlog.c:10757 replication/basebackup.c:1420 +#: utils/adt/misc.c:342 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "la ruta «%s» del enlace simbólico es demasiado larga" -#: access/transam/xlog.c:10787 commands/tablespace.c:402 -#: commands/tablespace.c:566 replication/basebackup.c:1435 utils/adt/misc.c:349 +#: access/transam/xlog.c:10810 commands/tablespace.c:402 +#: commands/tablespace.c:566 replication/basebackup.c:1435 utils/adt/misc.c:350 #, c-format msgid "tablespaces are not supported on this platform" msgstr "tablespaces no están soportados en esta plataforma" -#: access/transam/xlog.c:10838 access/transam/xlog.c:10876 +#: access/transam/xlog.c:10861 access/transam/xlog.c:10899 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "Si está seguro que no hay un respaldo en curso, elimine el archivo «%s» e intente nuevamente." -#: access/transam/xlog.c:11063 +#: access/transam/xlog.c:11086 #, c-format msgid "exclusive backup not in progress" msgstr "no hay un respaldo exclusivo en curso" -#: access/transam/xlog.c:11090 +#: access/transam/xlog.c:11113 #, c-format msgid "a backup is not in progress" msgstr "no hay un respaldo en curso" -#: access/transam/xlog.c:11176 access/transam/xlog.c:11189 -#: access/transam/xlog.c:11578 access/transam/xlog.c:11584 -#: access/transam/xlog.c:11632 access/transam/xlog.c:11705 +#: access/transam/xlog.c:11199 access/transam/xlog.c:11212 +#: access/transam/xlog.c:11601 access/transam/xlog.c:11607 +#: access/transam/xlog.c:11655 access/transam/xlog.c:11728 #: access/transam/xlogfuncs.c:692 #, c-format msgid "invalid data in file \"%s\"" msgstr "datos no válidos en archivo «%s»" -#: access/transam/xlog.c:11193 replication/basebackup.c:1268 +#: access/transam/xlog.c:11216 replication/basebackup.c:1268 #, c-format msgid "the standby was promoted during online backup" msgstr "el standby fue promovido durante el respaldo en línea" -#: access/transam/xlog.c:11194 replication/basebackup.c:1269 +#: access/transam/xlog.c:11217 replication/basebackup.c:1269 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "Esto significa que el respaldo que se estaba tomando está corrupto y no debería ser usado. Trate de ejecutar un nuevo respaldo en línea." -#: access/transam/xlog.c:11241 +#: access/transam/xlog.c:11264 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "el WAL generado con full_page_writes=off fue restaurado durante el respaldo en línea" -#: access/transam/xlog.c:11361 +#: access/transam/xlog.c:11384 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "respaldo base completo, esperando que se archiven los segmentos WAL requeridos" -#: access/transam/xlog.c:11373 +#: access/transam/xlog.c:11396 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "todavía en espera de que todos los segmentos WAL requeridos sean archivados (han pasado %d segundos)" -#: access/transam/xlog.c:11375 +#: access/transam/xlog.c:11398 #, c-format msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." msgstr "Verifique que su archive_command se esté ejecutando con normalidad. Puede cancelar este respaldo con confianza, pero el respaldo de la base de datos no será utilizable a menos que disponga de todos los segmentos de WAL." -#: access/transam/xlog.c:11382 +#: access/transam/xlog.c:11405 #, c-format msgid "all required WAL segments have been archived" msgstr "todos los segmentos de WAL requeridos han sido archivados" -#: access/transam/xlog.c:11386 +#: access/transam/xlog.c:11409 #, c-format msgid "WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup" msgstr "el archivado de WAL no está activo; debe asegurarse que todos los segmentos WAL requeridos se copian por algún otro mecanismo para completar el respaldo" -#: access/transam/xlog.c:11439 +#: access/transam/xlog.c:11462 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "abortando el backup porque el proceso servidor terminó antes de que pg_stop_backup fuera invocada" -#: access/transam/xlog.c:11615 +#: access/transam/xlog.c:11638 #, c-format msgid "backup time %s in file \"%s\"" msgstr "tiempo de respaldo %s en archivo «%s»" -#: access/transam/xlog.c:11620 +#: access/transam/xlog.c:11643 #, c-format msgid "backup label %s in file \"%s\"" msgstr "etiqueta de respaldo %s en archivo «%s»" -#: access/transam/xlog.c:11633 +#: access/transam/xlog.c:11656 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "El ID de timeline interpretado es %u, pero se esperaba %u." -#: access/transam/xlog.c:11637 +#: access/transam/xlog.c:11660 #, c-format msgid "backup timeline %u in file \"%s\"" msgstr "línea de tiempo %u en archivo «%s»" #. translator: %s is a WAL record description -#: access/transam/xlog.c:11745 +#: access/transam/xlog.c:11768 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "redo WAL en %X/%X para %s" -#: access/transam/xlog.c:11794 +#: access/transam/xlog.c:11817 #, c-format msgid "online backup mode was not canceled" msgstr "el modo de respaldo en línea no fue cancelado" -#: access/transam/xlog.c:11795 +#: access/transam/xlog.c:11818 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "El archivo «%s» no se pudo renombrar a «%s»: %m." -#: access/transam/xlog.c:11804 access/transam/xlog.c:11816 -#: access/transam/xlog.c:11826 +#: access/transam/xlog.c:11827 access/transam/xlog.c:11839 +#: access/transam/xlog.c:11849 #, c-format msgid "online backup mode canceled" msgstr "el modo de respaldo en línea fue cancelado" -#: access/transam/xlog.c:11817 +#: access/transam/xlog.c:11840 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "Los archivos «%s» y «%s» fueron renombrados a «%s» y «%s», respectivamente." -#: access/transam/xlog.c:11827 +#: access/transam/xlog.c:11850 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "El archivo «%s» fue renombrado a «%s», pero el archivo «%s» no pudo ser renombrado a «%s»: %m." # XXX why talk about "log segment" instead of "file"? -#: access/transam/xlog.c:11960 access/transam/xlogutils.c:971 +#: access/transam/xlog.c:11983 access/transam/xlogutils.c:971 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "no se pudo leer del archivo de segmento %s, posición %u: %m" # XXX why talk about "log segment" instead of "file"? -#: access/transam/xlog.c:11966 access/transam/xlogutils.c:978 +#: access/transam/xlog.c:11989 access/transam/xlogutils.c:978 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "no se pudo leer del archivo de segmento %s, posición %u: leídos %d de %zu" -#: access/transam/xlog.c:12495 +#: access/transam/xlog.c:12518 #, fuzzy, c-format -#| msgid "received fast shutdown request" +#| msgid "WAL receiver process shutdown requested" msgid "wal receiver process shutdown requested" -msgstr "se recibió petición de apagado rápido" +msgstr "se recibió una petición de apagado del proceso receptor de wal" -#: access/transam/xlog.c:12601 +#: access/transam/xlog.c:12624 #, c-format msgid "received promote request" msgstr "se recibió petición de promoción" -#: access/transam/xlog.c:12614 +#: access/transam/xlog.c:12637 #, c-format msgid "promote trigger file found: %s" msgstr "se encontró el archivo disparador de promoción: %s" -#: access/transam/xlog.c:12623 +#: access/transam/xlog.c:12646 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "no se pudo hacer stat al archivo disparador de promoción «%s»: %m" @@ -3086,33 +3043,33 @@ msgid "Did you mean to use pg_stop_backup('f')?" msgstr "¿Quiso usar pg_stop_backup('f')?" #: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1332 -#: commands/event_trigger.c:1884 commands/extension.c:1931 -#: commands/extension.c:2039 commands/extension.c:2324 commands/prepare.c:712 +#: commands/event_trigger.c:1884 commands/extension.c:1944 +#: commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:712 #: executor/execExpr.c:2203 executor/execSRF.c:728 executor/functions.c:1046 #: foreign/foreign.c:520 libpq/hba.c:2666 replication/logical/launcher.c:1086 #: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1486 -#: replication/slotfuncs.c:251 replication/walsender.c:3275 -#: storage/ipc/shmem.c:550 utils/adt/datetime.c:4778 utils/adt/genfile.c:469 -#: utils/adt/genfile.c:552 utils/adt/jsonfuncs.c:1792 +#: replication/slotfuncs.c:252 replication/walsender.c:3257 +#: storage/ipc/shmem.c:550 utils/adt/datetime.c:4765 utils/adt/genfile.c:505 +#: utils/adt/genfile.c:588 utils/adt/jsonfuncs.c:1792 #: utils/adt/jsonfuncs.c:1904 utils/adt/jsonfuncs.c:2092 -#: utils/adt/jsonfuncs.c:2201 utils/adt/jsonfuncs.c:3663 utils/adt/misc.c:214 +#: utils/adt/jsonfuncs.c:2201 utils/adt/jsonfuncs.c:3663 utils/adt/misc.c:215 #: utils/adt/pgstatfuncs.c:476 utils/adt/pgstatfuncs.c:584 -#: utils/adt/pgstatfuncs.c:1713 utils/fmgr/funcapi.c:72 utils/misc/guc.c:9658 +#: utils/adt/pgstatfuncs.c:1719 utils/fmgr/funcapi.c:72 utils/misc/guc.c:9648 #: utils/mmgr/portalmem.c:1136 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "se llamó una función que retorna un conjunto en un contexto que no puede aceptarlo" #: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1336 -#: commands/event_trigger.c:1888 commands/extension.c:1935 -#: commands/extension.c:2043 commands/extension.c:2328 commands/prepare.c:716 +#: commands/event_trigger.c:1888 commands/extension.c:1948 +#: commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:716 #: foreign/foreign.c:525 libpq/hba.c:2670 replication/logical/launcher.c:1090 #: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1490 -#: replication/slotfuncs.c:255 replication/walsender.c:3279 -#: storage/ipc/shmem.c:554 utils/adt/datetime.c:4782 utils/adt/genfile.c:473 -#: utils/adt/genfile.c:556 utils/adt/misc.c:218 utils/adt/pgstatfuncs.c:480 -#: utils/adt/pgstatfuncs.c:588 utils/adt/pgstatfuncs.c:1717 -#: utils/misc/guc.c:9662 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 +#: replication/slotfuncs.c:256 replication/walsender.c:3261 +#: storage/ipc/shmem.c:554 utils/adt/datetime.c:4769 utils/adt/genfile.c:509 +#: utils/adt/genfile.c:592 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:480 +#: utils/adt/pgstatfuncs.c:588 utils/adt/pgstatfuncs.c:1723 +#: utils/misc/guc.c:9652 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "se requiere un nodo «materialize», pero no está permitido en este contexto" @@ -3157,13 +3114,13 @@ msgstr "Las funciones de control de recuperación sólo pueden ejecutarse durant #: access/transam/xlogfuncs.c:537 access/transam/xlogfuncs.c:564 #, c-format msgid "standby promotion is ongoing" -msgstr "" +msgstr "la promoción del standby está en curso" #: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:565 #, fuzzy, c-format #| msgid "%s cannot be executed from a function" msgid "%s cannot be executed after promotion is triggered." -msgstr "%s no puede ser ejecutado desde una función" +msgstr "%s no puede ser ejecutado después que una promoción es solicitada." #: access/transam/xlogfuncs.c:728 #, c-format @@ -3180,138 +3137,137 @@ msgstr "no se pudo enviar señal a postmaster: %m" msgid "server did not promote within %d seconds" msgstr "el servidor no promovió en %d segundos" -#: access/transam/xlogreader.c:347 +#: access/transam/xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "posición de registro no válida en %X/%X" -#: access/transam/xlogreader.c:355 +#: access/transam/xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "contrecord solicitado por %X/%X" -#: access/transam/xlogreader.c:396 access/transam/xlogreader.c:693 +#: access/transam/xlogreader.c:398 access/transam/xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "largo de registro no válido en %X/%X: se esperaba %u, se obtuvo %u" -#: access/transam/xlogreader.c:420 +#: access/transam/xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "largo de registro %u en %X/%X demasiado largo" -#: access/transam/xlogreader.c:452 +#: access/transam/xlogreader.c:454 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "no hay bandera de contrecord en %X/%X" -#: access/transam/xlogreader.c:465 +#: access/transam/xlogreader.c:467 #, c-format msgid "invalid contrecord length %u at %X/%X" msgstr "largo de contrecord %u no válido en %X/%X" -#: access/transam/xlogreader.c:701 +#: access/transam/xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ID de gestor de recursos %u no válido en %X/%X" -#: access/transam/xlogreader.c:715 access/transam/xlogreader.c:732 +#: access/transam/xlogreader.c:717 access/transam/xlogreader.c:734 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "registro con prev-link %X/%X incorrecto en %X/%X" -#: access/transam/xlogreader.c:769 +#: access/transam/xlogreader.c:771 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "suma de verificación de los datos del gestor de recursos incorrecta en el registro en %X/%X" -#: access/transam/xlogreader.c:806 +#: access/transam/xlogreader.c:808 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "número mágico %04X no válido en archivo %s, posición %u" -#: access/transam/xlogreader.c:820 access/transam/xlogreader.c:861 +#: access/transam/xlogreader.c:822 access/transam/xlogreader.c:863 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "info bits %04X no válidos en archivo %s, posición %u" -#: access/transam/xlogreader.c:835 -#, fuzzy, c-format -#| msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" +#: access/transam/xlogreader.c:837 +#, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" -msgstr "archivo WAL es de un sistema de bases de datos distinto: identificador de sistema en archivo WAL es %s, identificador en pg_control es %s" +msgstr "archivo WAL es de un sistema de bases de datos distinto: identificador de sistema en archivo WAL es %llu, identificador en pg_control es %llu" -#: access/transam/xlogreader.c:843 +#: access/transam/xlogreader.c:845 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: tamaño de segmento incorrecto en cabecera de paǵina" -#: access/transam/xlogreader.c:849 +#: access/transam/xlogreader.c:851 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: XLOG_BLCKSZ incorrecto en cabecera de paǵina" -#: access/transam/xlogreader.c:880 +#: access/transam/xlogreader.c:882 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "pageaddr %X/%X inesperado en archivo %s, posición %u" -#: access/transam/xlogreader.c:905 +#: access/transam/xlogreader.c:907 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "ID de timeline %u fuera de secuencia (después de %u) en archivo %s, posición %u" -#: access/transam/xlogreader.c:1245 +#: access/transam/xlogreader.c:1247 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u fuera de orden en %X/%X" -#: access/transam/xlogreader.c:1268 +#: access/transam/xlogreader.c:1270 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA está definido, pero no hay datos en %X/%X" -#: access/transam/xlogreader.c:1275 +#: access/transam/xlogreader.c:1277 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA no está definido, pero el largo de los datos es %u en %X/%X" -#: access/transam/xlogreader.c:1311 +#: access/transam/xlogreader.c:1313 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE está definido, pero posición del agujero es %u largo %u largo de imagen %u en %X/%X" -#: access/transam/xlogreader.c:1327 +#: access/transam/xlogreader.c:1329 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE no está definido, pero posición del agujero es %u largo %u en %X/%X" -#: access/transam/xlogreader.c:1342 +#: access/transam/xlogreader.c:1344 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%X" -#: access/transam/xlogreader.c:1357 +#: access/transam/xlogreader.c:1359 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED está definido, pero largo de imagen de bloque es %u en %X/%X" -#: access/transam/xlogreader.c:1373 +#: access/transam/xlogreader.c:1375 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL está definido, pero no hay «rel» anterior en %X/%X " -#: access/transam/xlogreader.c:1385 +#: access/transam/xlogreader.c:1387 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "block_id %u no válido en %X/%X" -#: access/transam/xlogreader.c:1474 +#: access/transam/xlogreader.c:1476 #, c-format msgid "record with invalid length at %X/%X" msgstr "registro con largo no válido en %X/%X" -#: access/transam/xlogreader.c:1563 +#: access/transam/xlogreader.c:1565 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "imagen comprimida no válida en %X/%X, bloque %d" @@ -3321,18 +3277,18 @@ msgstr "imagen comprimida no válida en %X/%X, bloque %d" msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X require un valor potencia de dos entre 1 MB y 1 GB" -#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:830 tcop/postgres.c:3705 +#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:842 tcop/postgres.c:3705 #, c-format msgid "--%s requires a value" msgstr "--%s requiere un valor" -#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:835 tcop/postgres.c:3710 +#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:847 tcop/postgres.c:3710 #, c-format msgid "-c %s requires a value" msgstr "-c %s requiere un valor" -#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:847 -#: postmaster/postmaster.c:860 +#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:859 +#: postmaster/postmaster.c:872 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Pruebe «%s --help» para mayor información.\n" @@ -3481,9 +3437,9 @@ msgstr "no existe el objeto grande %u" #: commands/dbcommands.c:229 commands/dbcommands.c:238 #: commands/dbcommands.c:260 commands/dbcommands.c:1502 #: commands/dbcommands.c:1511 commands/dbcommands.c:1520 -#: commands/dbcommands.c:1529 commands/extension.c:1722 -#: commands/extension.c:1732 commands/extension.c:1742 -#: commands/extension.c:3042 commands/foreigncmds.c:539 +#: commands/dbcommands.c:1529 commands/extension.c:1735 +#: commands/extension.c:1745 commands/extension.c:1755 +#: commands/extension.c:3055 commands/foreigncmds.c:539 #: commands/foreigncmds.c:548 commands/functioncmds.c:570 #: commands/functioncmds.c:736 commands/functioncmds.c:745 #: commands/functioncmds.c:754 commands/functioncmds.c:763 @@ -3495,9 +3451,9 @@ msgstr "no existe el objeto grande %u" #: commands/subscriptioncmds.c:104 commands/subscriptioncmds.c:114 #: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 #: commands/subscriptioncmds.c:148 commands/subscriptioncmds.c:159 -#: commands/subscriptioncmds.c:173 commands/tablecmds.c:6957 -#: commands/typecmds.c:321 commands/typecmds.c:1354 commands/typecmds.c:1363 -#: commands/typecmds.c:1371 commands/typecmds.c:1379 commands/typecmds.c:1387 +#: commands/subscriptioncmds.c:173 commands/tablecmds.c:7071 +#: commands/typecmds.c:322 commands/typecmds.c:1355 commands/typecmds.c:1364 +#: commands/typecmds.c:1372 commands/typecmds.c:1380 commands/typecmds.c:1388 #: commands/user.c:133 commands/user.c:147 commands/user.c:156 #: commands/user.c:165 commands/user.c:174 commands/user.c:183 #: commands/user.c:192 commands/user.c:201 commands/user.c:210 @@ -3506,9 +3462,9 @@ msgstr "no existe el objeto grande %u" #: commands/user.c:598 commands/user.c:606 commands/user.c:614 #: commands/user.c:622 commands/user.c:630 commands/user.c:638 #: commands/user.c:647 commands/user.c:655 commands/user.c:663 -#: parser/parse_utilcmd.c:386 replication/pgoutput/pgoutput.c:141 -#: replication/pgoutput/pgoutput.c:162 replication/walsender.c:891 -#: replication/walsender.c:902 replication/walsender.c:912 +#: parser/parse_utilcmd.c:387 replication/pgoutput/pgoutput.c:141 +#: replication/pgoutput/pgoutput.c:162 replication/walsender.c:886 +#: replication/walsender.c:897 replication/walsender.c:907 #, c-format msgid "conflicting or redundant options" msgstr "opciones contradictorias o redundantes" @@ -3525,25 +3481,25 @@ msgstr "No puede utilizar la cláusula IN SCHEMA cuando se utiliza GRANT / REVOK #: catalog/aclchk.c:1558 catalog/catalog.c:506 catalog/objectaddress.c:1427 #: commands/analyze.c:389 commands/copy.c:5080 commands/sequence.c:1702 -#: commands/tablecmds.c:6497 commands/tablecmds.c:6655 -#: commands/tablecmds.c:6729 commands/tablecmds.c:6799 -#: commands/tablecmds.c:6882 commands/tablecmds.c:6976 -#: commands/tablecmds.c:7035 commands/tablecmds.c:7108 -#: commands/tablecmds.c:7137 commands/tablecmds.c:7292 -#: commands/tablecmds.c:7374 commands/tablecmds.c:7467 -#: commands/tablecmds.c:7622 commands/tablecmds.c:10882 -#: commands/tablecmds.c:11064 commands/tablecmds.c:11224 -#: commands/tablecmds.c:12307 commands/trigger.c:876 parser/analyze.c:2339 +#: commands/tablecmds.c:6582 commands/tablecmds.c:6740 +#: commands/tablecmds.c:6814 commands/tablecmds.c:6884 +#: commands/tablecmds.c:6996 commands/tablecmds.c:7090 +#: commands/tablecmds.c:7149 commands/tablecmds.c:7222 +#: commands/tablecmds.c:7251 commands/tablecmds.c:7406 +#: commands/tablecmds.c:7488 commands/tablecmds.c:7581 +#: commands/tablecmds.c:7736 commands/tablecmds.c:10941 +#: commands/tablecmds.c:11123 commands/tablecmds.c:11283 +#: commands/tablecmds.c:12366 commands/trigger.c:876 parser/analyze.c:2339 #: parser/parse_relation.c:713 parser/parse_target.c:1036 -#: parser/parse_type.c:144 parser/parse_utilcmd.c:3202 -#: parser/parse_utilcmd.c:3237 parser/parse_utilcmd.c:3279 utils/adt/acl.c:2870 +#: parser/parse_type.c:144 parser/parse_utilcmd.c:3289 +#: parser/parse_utilcmd.c:3324 parser/parse_utilcmd.c:3366 utils/adt/acl.c:2870 #: utils/adt/ruleutils.c:2535 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "no existe la columna «%s» en la relación «%s»" #: catalog/aclchk.c:1821 catalog/objectaddress.c:1267 commands/sequence.c:1140 -#: commands/tablecmds.c:236 commands/tablecmds.c:15616 utils/adt/acl.c:2060 +#: commands/tablecmds.c:236 commands/tablecmds.c:15675 utils/adt/acl.c:2060 #: utils/adt/acl.c:2090 utils/adt/acl.c:2122 utils/adt/acl.c:2154 #: utils/adt/acl.c:2182 utils/adt/acl.c:2212 #, c-format @@ -3963,7 +3919,7 @@ msgstr "no existe el lenguaje con OID %u" msgid "schema with OID %u does not exist" msgstr "no existe el esquema con OID %u" -#: catalog/aclchk.c:4239 catalog/aclchk.c:4936 utils/adt/genfile.c:650 +#: catalog/aclchk.c:4239 catalog/aclchk.c:4936 utils/adt/genfile.c:686 #, c-format msgid "tablespace with OID %u does not exist" msgstr "no existe el tablespace con OID %u" @@ -4054,7 +4010,7 @@ msgstr "debe ser superusuario para invocar pg_nextoid()" msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() sólo puede usarse en catálogos de sistema" -#: catalog/catalog.c:498 parser/parse_utilcmd.c:2103 +#: catalog/catalog.c:498 parser/parse_utilcmd.c:2191 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "el índice «%s» no pertenece a la tabla «%s»" @@ -4122,13 +4078,13 @@ msgstr "no se puede eliminar %s porque otros objetos dependen de él" #: catalog/dependency.c:1193 catalog/dependency.c:1194 #: catalog/dependency.c:1200 catalog/dependency.c:1201 #: catalog/dependency.c:1212 catalog/dependency.c:1213 -#: commands/tablecmds.c:1247 commands/tablecmds.c:12926 commands/user.c:1093 +#: commands/tablecmds.c:1249 commands/tablecmds.c:12985 commands/user.c:1093 #: commands/view.c:495 libpq/auth.c:334 replication/syncrep.c:1032 #: storage/lmgr/deadlock.c:1154 storage/lmgr/proc.c:1350 utils/adt/acl.c:5329 -#: utils/adt/jsonfuncs.c:614 utils/adt/jsonfuncs.c:620 utils/misc/guc.c:6781 -#: utils/misc/guc.c:6817 utils/misc/guc.c:6887 utils/misc/guc.c:10957 -#: utils/misc/guc.c:10991 utils/misc/guc.c:11025 utils/misc/guc.c:11059 -#: utils/misc/guc.c:11094 +#: utils/adt/jsonfuncs.c:614 utils/adt/jsonfuncs.c:620 utils/misc/guc.c:6771 +#: utils/misc/guc.c:6807 utils/misc/guc.c:6877 utils/misc/guc.c:10947 +#: utils/misc/guc.c:10981 utils/misc/guc.c:11015 utils/misc/guc.c:11049 +#: utils/misc/guc.c:11084 #, c-format msgid "%s" msgstr "%s" @@ -4166,13 +4122,13 @@ msgstr "se ha denegado el permiso para crear «%s.%s»" msgid "System catalog modifications are currently disallowed." msgstr "Las modificaciones al catálogo del sistema están actualmente deshabilitadas." -#: catalog/heap.c:500 commands/tablecmds.c:2132 commands/tablecmds.c:2690 -#: commands/tablecmds.c:6094 +#: catalog/heap.c:500 commands/tablecmds.c:2145 commands/tablecmds.c:2745 +#: commands/tablecmds.c:6179 #, c-format msgid "tables can have at most %d columns" msgstr "las tablas pueden tener a lo más %d columnas" -#: catalog/heap.c:518 commands/tablecmds.c:6387 +#: catalog/heap.c:518 commands/tablecmds.c:6472 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "el nombre de columna «%s» colisiona con nombre de una columna de sistema" @@ -4184,10 +4140,9 @@ msgstr "el nombre de columna «%s» fue especificado más de una vez" #. translator: first %s is an integer not a name #: catalog/heap.c:609 -#, fuzzy, c-format -#| msgid "column \"%s\" has pseudo-type %s" +#, c-format msgid "partition key column %s has pseudo-type %s" -msgstr "la columna «%s» tiene pseudotipo %s" +msgstr "la columna %s de la llave de partición tiene pseudotipo %s" #: catalog/heap.c:614 #, c-format @@ -4201,24 +4156,23 @@ msgstr "un tipo compuesto %s no puede ser hecho miembro de sí mismo" #. translator: first %s is an integer not a name #: catalog/heap.c:700 -#, fuzzy, c-format -#| msgid "no collation was derived for column \"%s\" with collatable type %s" +#, c-format msgid "no collation was derived for partition key column %s with collatable type %s" -msgstr "no se derivó ningún ordenamiento (collate) para la columna «%s» con tipo ordenable %s" +msgstr "no se derivó ningún ordenamiento (collate) para la columna %s de llave de partición con tipo ordenable %s" #: catalog/heap.c:706 commands/createas.c:203 commands/createas.c:486 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "no se derivó ningún ordenamiento (collate) para la columna «%s» con tipo ordenable %s" -#: catalog/heap.c:1155 catalog/index.c:865 commands/tablecmds.c:3465 +#: catalog/heap.c:1155 catalog/index.c:865 commands/tablecmds.c:3520 #, c-format msgid "relation \"%s\" already exists" msgstr "la relación «%s» ya existe" #: catalog/heap.c:1171 catalog/pg_type.c:428 catalog/pg_type.c:775 -#: commands/typecmds.c:237 commands/typecmds.c:249 commands/typecmds.c:718 -#: commands/typecmds.c:1124 commands/typecmds.c:1336 commands/typecmds.c:2101 +#: commands/typecmds.c:238 commands/typecmds.c:250 commands/typecmds.c:719 +#: commands/typecmds.c:1125 commands/typecmds.c:1337 commands/typecmds.c:2124 #, c-format msgid "type \"%s\" already exists" msgstr "ya existe un tipo «%s»" @@ -4244,7 +4198,7 @@ msgid "check constraint \"%s\" already exists" msgstr "la restricción «check» «%s» ya existe" #: catalog/heap.c:2840 catalog/index.c:879 catalog/pg_constraint.c:668 -#: commands/tablecmds.c:7972 +#: commands/tablecmds.c:8086 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "la restricción «%s» para la relación «%s» ya existe" @@ -4326,7 +4280,7 @@ msgstr "La tabla «%s» hace referencia a «%s»." msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Trunque la tabla «%s» al mismo tiempo, o utilice TRUNCATE ... CASCADE." -#: catalog/index.c:219 parser/parse_utilcmd.c:1910 parser/parse_utilcmd.c:2009 +#: catalog/index.c:219 parser/parse_utilcmd.c:2097 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "no se permiten múltiples llaves primarias para la tabla «%s»" @@ -4341,7 +4295,7 @@ msgstr "las llaves primarias no pueden ser expresiones" msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "columna de llave primaria «%s» no está marcada NOT NULL" -#: catalog/index.c:764 catalog/index.c:1839 +#: catalog/index.c:764 catalog/index.c:1843 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "los usuarios no pueden crear índices en tablas del sistema" @@ -4367,7 +4321,7 @@ msgid "shared indexes cannot be created after initdb" msgstr "no se pueden crear índices compartidos después de initdb" #: catalog/index.c:857 commands/createas.c:252 commands/sequence.c:154 -#: parser/parse_utilcmd.c:208 +#: parser/parse_utilcmd.c:210 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "la relación «%s» ya existe, omitiendo" @@ -4377,49 +4331,47 @@ msgstr "la relación «%s» ya existe, omitiendo" msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "el valor de OID de índice de pg_class no se definió en modo de actualización binaria" -#: catalog/index.c:2124 +#: catalog/index.c:2128 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY debe ser la primera acción en una transacción" -#: catalog/index.c:2855 +#: catalog/index.c:2859 #, c-format msgid "building index \"%s\" on table \"%s\" serially" msgstr "construyendo índice «%s» en la tabla «%s» en forma serial" -#: catalog/index.c:2860 +#: catalog/index.c:2864 #, c-format msgid "building index \"%s\" on table \"%s\" with request for %d parallel worker" msgid_plural "building index \"%s\" on table \"%s\" with request for %d parallel workers" msgstr[0] "construyendo índice «%s» en la tabla «%s» solicitando %d ayudante paralelo" msgstr[1] "construyendo índice «%s» en la tabla «%s» solicitando %d ayudantes paralelos" -#: catalog/index.c:3488 +#: catalog/index.c:3492 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "no se puede hacer reindex de tablas temporales de otras sesiones" -#: catalog/index.c:3499 -#, fuzzy, c-format -#| msgid "cannot reindex specific index(es) in all databases" +#: catalog/index.c:3503 +#, c-format msgid "cannot reindex invalid index on TOAST table" -msgstr "no es posible reindexar índices específicos en todas las bases de datos" +msgstr "no es posible reindexar un índice no válido en tabla TOAST" -#: catalog/index.c:3621 +#: catalog/index.c:3625 #, c-format msgid "index \"%s\" was reindexed" msgstr "el índice «%s» fue reindexado" -#: catalog/index.c:3697 commands/indexcmds.c:3017 +#: catalog/index.c:3701 commands/indexcmds.c:3017 #, c-format msgid "REINDEX of partitioned tables is not yet implemented, skipping \"%s\"" msgstr "REINDEX de tablas particionadas no está implementado aún, omitiendo «%s»" -#: catalog/index.c:3752 -#, fuzzy, c-format -#| msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" +#: catalog/index.c:3756 +#, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" -msgstr "no se puede reindexar el índice no válido «%s.%s» concurrentemente, omitiendo" +msgstr "no se puede reindexar el índice no válido «%s.%s» en tabla TOAST, omitiendo" #: catalog/namespace.c:257 catalog/namespace.c:461 catalog/namespace.c:553 #: commands/trigger.c:5043 @@ -4453,8 +4405,8 @@ msgstr "no existe la relación «%s.%s»" msgid "relation \"%s\" does not exist" msgstr "no existe la relación «%s»" -#: catalog/namespace.c:499 catalog/namespace.c:3030 commands/extension.c:1506 -#: commands/extension.c:1512 +#: catalog/namespace.c:499 catalog/namespace.c:3030 commands/extension.c:1519 +#: commands/extension.c:1525 #, c-format msgid "no schema has been selected to create in" msgstr "no se ha seleccionado ningún esquema dentro del cual crear" @@ -4506,7 +4458,7 @@ msgid "cross-database references are not implemented: %s" msgstr "no están implementadas las referencias entre bases de datos: %s" #: catalog/namespace.c:2843 parser/parse_expr.c:879 parser/parse_target.c:1235 -#: gram.y:14978 gram.y:16432 +#: gram.y:14981 gram.y:16435 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "el nombre no es válido (demasiados puntos): %s" @@ -4522,7 +4474,7 @@ msgid "cannot move objects into or out of TOAST schema" msgstr "no se puede mover objetos hacia o desde el esquema TOAST" #: catalog/namespace.c:3052 commands/schemacmds.c:256 commands/schemacmds.c:336 -#: commands/tablecmds.c:1192 +#: commands/tablecmds.c:1194 #, c-format msgid "schema \"%s\" does not exist" msgstr "no existe el esquema «%s»" @@ -4557,34 +4509,34 @@ msgstr "no se pueden crear tablas temporales durante la recuperación" msgid "cannot create temporary tables during a parallel operation" msgstr "no se pueden crear tablas temporales durante una operación paralela" -#: catalog/namespace.c:4286 commands/tablespace.c:1204 commands/variable.c:64 -#: utils/misc/guc.c:11126 utils/misc/guc.c:11204 +#: catalog/namespace.c:4286 commands/tablespace.c:1205 commands/variable.c:64 +#: utils/misc/guc.c:11116 utils/misc/guc.c:11194 #, c-format msgid "List syntax is invalid." msgstr "La sintaxis de lista no es válida." #: catalog/objectaddress.c:1275 catalog/pg_publication.c:57 #: commands/policy.c:95 commands/policy.c:395 commands/policy.c:485 -#: commands/tablecmds.c:230 commands/tablecmds.c:272 commands/tablecmds.c:1976 -#: commands/tablecmds.c:5541 commands/tablecmds.c:10999 +#: commands/tablecmds.c:230 commands/tablecmds.c:272 commands/tablecmds.c:1989 +#: commands/tablecmds.c:5626 commands/tablecmds.c:11058 #, c-format msgid "\"%s\" is not a table" msgstr "«%s» no es una tabla" #: catalog/objectaddress.c:1282 commands/tablecmds.c:242 -#: commands/tablecmds.c:5571 commands/tablecmds.c:15621 commands/view.c:119 +#: commands/tablecmds.c:5656 commands/tablecmds.c:15680 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "«%s» no es una vista" #: catalog/objectaddress.c:1289 commands/matview.c:175 commands/tablecmds.c:248 -#: commands/tablecmds.c:15626 +#: commands/tablecmds.c:15685 #, c-format msgid "\"%s\" is not a materialized view" msgstr "«%s» no es una vista materializada" #: catalog/objectaddress.c:1296 commands/tablecmds.c:266 -#: commands/tablecmds.c:5574 commands/tablecmds.c:15631 +#: commands/tablecmds.c:5659 commands/tablecmds.c:15690 #, c-format msgid "\"%s\" is not a foreign table" msgstr "«%s» no es una tabla foránea" @@ -4605,7 +4557,7 @@ msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "no existe el valor por omisión para la columna «%s» de la relación «%s»" #: catalog/objectaddress.c:1550 commands/functioncmds.c:133 -#: commands/tablecmds.c:258 commands/typecmds.c:262 commands/typecmds.c:3252 +#: commands/tablecmds.c:258 commands/typecmds.c:263 commands/typecmds.c:3275 #: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:845 #: utils/adt/acl.c:4436 #, c-format @@ -4628,7 +4580,7 @@ msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "no existe el mapeo para el usuario «%s» en el servidor «%s»" #: catalog/objectaddress.c:1766 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:1012 commands/foreigncmds.c:1392 +#: commands/foreigncmds.c:1012 commands/foreigncmds.c:1395 #: foreign/foreign.c:723 #, c-format msgid "server \"%s\" does not exist" @@ -5074,7 +5026,7 @@ msgstr "la función final con argumentos extra no debe declararse STRICT" msgid "return type of combine function %s is not %s" msgstr "el tipo de retorno de la función «combine» %s no es %s" -#: catalog/pg_aggregate.c:438 executor/nodeAgg.c:4099 +#: catalog/pg_aggregate.c:438 executor/nodeAgg.c:4173 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "la función «combine» con tipo de transición %s no debe declararse STRICT" @@ -5135,9 +5087,9 @@ msgid "cannot change number of direct arguments of an aggregate function" msgstr "no se puede cambiar cantidad de argumentos directos de una función de agregación" #: catalog/pg_aggregate.c:870 commands/functioncmds.c:667 -#: commands/typecmds.c:1647 commands/typecmds.c:1692 commands/typecmds.c:1734 -#: commands/typecmds.c:1770 commands/typecmds.c:1804 commands/typecmds.c:1838 -#: commands/typecmds.c:1872 commands/typecmds.c:1949 commands/typecmds.c:1991 +#: commands/typecmds.c:1658 commands/typecmds.c:1704 commands/typecmds.c:1756 +#: commands/typecmds.c:1793 commands/typecmds.c:1827 commands/typecmds.c:1861 +#: commands/typecmds.c:1895 commands/typecmds.c:1972 commands/typecmds.c:2014 #: parser/parse_func.c:414 parser/parse_func.c:443 parser/parse_func.c:468 #: parser/parse_func.c:482 parser/parse_func.c:602 parser/parse_func.c:622 #: parser/parse_func.c:2129 parser/parse_func.c:2320 @@ -5210,7 +5162,7 @@ msgstr "ya existe la conversión «%s»" msgid "default conversion for %s to %s already exists" msgstr "ya existe una conversión por omisión desde %s a %s" -#: catalog/pg_depend.c:162 commands/extension.c:3311 +#: catalog/pg_depend.c:162 commands/extension.c:3324 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "«%s» ya es un miembro de la extensión «%s»" @@ -5270,7 +5222,7 @@ msgstr "«%s» no es un nombre válido de operador" msgid "only binary operators can have commutators" msgstr "sólo los operadores binarios pueden tener conmutadores" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:483 +#: catalog/pg_operator.c:374 commands/operatorcmds.c:495 #, c-format msgid "only binary operators can have join selectivity" msgstr "sólo los operadores binarios pueden tener selectividad de join" @@ -5290,12 +5242,12 @@ msgstr "sólo los operadores binarios pueden ser usados en hash" msgid "only boolean operators can have negators" msgstr "sólo los operadores booleanos pueden tener negadores" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:491 +#: catalog/pg_operator.c:397 commands/operatorcmds.c:503 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "sólo los operadores booleanos pueden tener selectividad de restricción" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:495 +#: catalog/pg_operator.c:401 commands/operatorcmds.c:507 #, c-format msgid "only boolean operators can have join selectivity" msgstr "sólo los operadores booleanos pueden tener selectividad de join" @@ -5543,7 +5495,7 @@ msgstr "el tamaño interno %d no es válido para un tipo pasado por valor" msgid "alignment \"%c\" is invalid for variable-length type" msgstr "el alineamiento «%c» no es válido para un tipo de largo variable" -#: catalog/pg_type.c:321 commands/typecmds.c:3704 +#: catalog/pg_type.c:321 commands/typecmds.c:3727 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "los tipos de tamaño fijo deben tener almacenamiento PLAIN" @@ -5558,8 +5510,8 @@ msgstr "no se pudo formar un nombre de tipo de array para el tipo «%s»" msgid "invalid page in block %u of relation %s" msgstr "la página no es válida en el bloque %u de la relación %s" -#: catalog/toasting.c:106 commands/indexcmds.c:639 commands/tablecmds.c:5553 -#: commands/tablecmds.c:15486 +#: catalog/toasting.c:106 commands/indexcmds.c:639 commands/tablecmds.c:5638 +#: commands/tablecmds.c:15545 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "«%s» no es una tabla o vista materializada" @@ -5724,38 +5676,38 @@ msgstr "debe ser superusuario para cambiar el nombre de «%s»" msgid "must be superuser to set schema of %s" msgstr "debe ser superusuario para definir el esquema de %s" -#: commands/amcmds.c:59 +#: commands/amcmds.c:60 #, c-format msgid "permission denied to create access method \"%s\"" msgstr "se ha denegado el permiso para crear el método de acceso «%s»" -#: commands/amcmds.c:61 +#: commands/amcmds.c:62 #, c-format msgid "Must be superuser to create an access method." msgstr "Debe ser superusuario para crear un método de acceso." -#: commands/amcmds.c:70 +#: commands/amcmds.c:71 #, c-format msgid "access method \"%s\" already exists" msgstr "el método de acceso «%s» ya existe" -#: commands/amcmds.c:127 +#: commands/amcmds.c:130 #, c-format msgid "must be superuser to drop access methods" msgstr "debe ser superusuario para eliminar métodos de acceso" -#: commands/amcmds.c:178 commands/indexcmds.c:188 commands/indexcmds.c:790 +#: commands/amcmds.c:181 commands/indexcmds.c:188 commands/indexcmds.c:790 #: commands/opclasscmds.c:373 commands/opclasscmds.c:793 #, c-format msgid "access method \"%s\" does not exist" msgstr "no existe el método de acceso «%s»" -#: commands/amcmds.c:267 +#: commands/amcmds.c:270 #, c-format msgid "handler function is not specified" msgstr "no se ha especificado una función manejadora" -#: commands/amcmds.c:288 commands/event_trigger.c:183 +#: commands/amcmds.c:291 commands/event_trigger.c:183 #: commands/foreigncmds.c:489 commands/proclang.c:79 commands/trigger.c:687 #: parser/parse_clause.c:941 #, c-format @@ -5807,42 +5759,42 @@ msgstr "omitiendo el análisis del árbol de herencia «%s.%s» --- este árbol msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "omitiendo el análisis del árbol de herencia «%s.%s» --- este árbol no contiene tablas hijas analizables" -#: commands/async.c:631 +#: commands/async.c:634 #, c-format msgid "channel name cannot be empty" msgstr "el nombre de canal no puede ser vacío" -#: commands/async.c:637 +#: commands/async.c:640 #, c-format msgid "channel name too long" msgstr "el nombre de canal es demasiado largo" -#: commands/async.c:642 +#: commands/async.c:645 #, c-format msgid "payload string too long" msgstr "la cadena de carga es demasiado larga" -#: commands/async.c:861 +#: commands/async.c:864 #, c-format msgid "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" msgstr "no se puede hacer PREPARE de una transacción que ha ejecutado LISTEN, UNLISTEN o NOTIFY" -#: commands/async.c:967 +#: commands/async.c:970 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "demasiadas notificaciones en la cola NOTIFY" -#: commands/async.c:1633 +#: commands/async.c:1636 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "la cola NOTIFY está %.0f%% llena" -#: commands/async.c:1635 +#: commands/async.c:1638 #, c-format msgid "The server process with PID %d is among those with the oldest transactions." msgstr "El proceso servidor con PID %d está entre aquellos con transacciones más antiguas." -#: commands/async.c:1638 +#: commands/async.c:1641 #, c-format msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." msgstr "La cola NOTIFY no puede vaciarse hasta que ese proceso cierre su transacción actual." @@ -5862,7 +5814,7 @@ msgstr "no se puede hacer «cluster» a una tabla particionada" msgid "there is no previously clustered index for table \"%s\"" msgstr "no hay un índice de ordenamiento definido para la tabla «%s»" -#: commands/cluster.c:165 commands/tablecmds.c:12763 commands/tablecmds.c:14569 +#: commands/cluster.c:165 commands/tablecmds.c:12822 commands/tablecmds.c:14628 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "no existe el índice «%s» en la tabla «%s»" @@ -5877,7 +5829,7 @@ msgstr "no se puede reordenar un catálogo compartido" msgid "cannot vacuum temporary tables of other sessions" msgstr "no se puede hacer vacuum a tablas temporales de otras sesiones" -#: commands/cluster.c:432 commands/tablecmds.c:14579 +#: commands/cluster.c:432 commands/tablecmds.c:14638 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "«%s» no es un índice de la tabla «%s»" @@ -6006,17 +5958,17 @@ msgstr "no se encontraron locales de sistema utilizables" msgid "database \"%s\" does not exist" msgstr "no existe la base de datos «%s»" -#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:955 +#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:957 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" msgstr "«%s» no es una tabla, vista, vista materializada, tipo compuesto, o tabla foránea" -#: commands/constraint.c:63 utils/adt/ri_triggers.c:1913 +#: commands/constraint.c:63 utils/adt/ri_triggers.c:1923 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "la función «%s» no fue ejecutada por el manejador de triggers" -#: commands/constraint.c:70 utils/adt/ri_triggers.c:1922 +#: commands/constraint.c:70 utils/adt/ri_triggers.c:1932 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "la función «%s» debe ser ejecutada AFTER ROW" @@ -6037,10 +5989,9 @@ msgid "destination encoding \"%s\" does not exist" msgstr "no existe la codificación de destino «%s»" #: commands/conversioncmds.c:86 -#, fuzzy, c-format -#| msgid "encoding conversion from %s to ASCII not supported" +#, c-format msgid "encoding conversion to or from \"SQL_ASCII\" is not supported" -msgstr "la conversión de codificación de %s a ASCII no está soportada" +msgstr "la conversión de codificación desde o hacia a «SQL_ASCII» no está soportada" #: commands/conversioncmds.c:99 #, c-format @@ -6428,7 +6379,7 @@ msgstr "COPY FROM indica al proceso servidor de PostgreSQL leer un archivo. Pued #: commands/copy.c:3526 #, c-format msgid "COPY file signature not recognized" -msgstr "el identificador del archivo COPY no es reconocido" +msgstr "la signatura del archivo COPY no es reconocido" #: commands/copy.c:3531 #, c-format @@ -6556,14 +6507,14 @@ msgid "Generated columns cannot be used in COPY." msgstr "Las columnas generadas no pueden usarse en COPY." #: commands/copy.c:5085 commands/indexcmds.c:1700 commands/statscmds.c:217 -#: commands/tablecmds.c:2163 commands/tablecmds.c:2740 -#: commands/tablecmds.c:3127 parser/parse_relation.c:3507 -#: parser/parse_relation.c:3527 utils/adt/tsvector_op.c:2616 +#: commands/tablecmds.c:2176 commands/tablecmds.c:2795 +#: commands/tablecmds.c:3182 parser/parse_relation.c:3507 +#: parser/parse_relation.c:3527 utils/adt/tsvector_op.c:2668 #, c-format msgid "column \"%s\" does not exist" msgstr "no existe la columna «%s»" -#: commands/copy.c:5092 commands/tablecmds.c:2189 commands/trigger.c:885 +#: commands/copy.c:5092 commands/tablecmds.c:2202 commands/trigger.c:885 #: parser/parse_target.c:1052 parser/parse_target.c:1063 #, c-format msgid "column \"%s\" specified more than once" @@ -6592,7 +6543,7 @@ msgstr "Considere usar tablespaces." #: commands/dbcommands.c:261 #, c-format msgid "LOCALE cannot be specified together with LC_COLLATE or LC_CTYPE." -msgstr "" +msgstr "LOCALE no puede configurarse junto con LC_COLLATE o LC_CTYPE." #: commands/dbcommands.c:279 utils/adt/ascii.c:145 #, c-format @@ -6783,10 +6734,9 @@ msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "algunos archivos inútiles pueden haber quedado en el directorio \"%s\"" #: commands/dbcommands.c:1460 -#, fuzzy, c-format -#| msgid "unrecognized ANALYZE option \"%s\"" +#, c-format msgid "unrecognized DROP DATABASE option \"%s\"" -msgstr "opción de ANALYZE «%s» no reconocida" +msgstr "opción de DROP DATABASE «%s» no reconocida" #: commands/dbcommands.c:1550 #, c-format @@ -6870,14 +6820,14 @@ msgstr "«%s» es una función de agregación" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Use DROP AGGREGATE para eliminar funciones de agregación." -#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3211 -#: commands/tablecmds.c:3369 commands/tablecmds.c:3414 -#: commands/tablecmds.c:14948 tcop/utility.c:1276 +#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3266 +#: commands/tablecmds.c:3424 commands/tablecmds.c:3469 +#: commands/tablecmds.c:15007 tcop/utility.c:1298 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "no existe la relación «%s», omitiendo" -#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1197 +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1199 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "el esquema «%s» no existe, omitiendo" @@ -6902,7 +6852,7 @@ msgstr "no existe el ordenamiento (collation) «%s», omitiendo" msgid "conversion \"%s\" does not exist, skipping" msgstr "no existe la conversión «%s», omitiendo" -#: commands/dropcmds.c:293 commands/statscmds.c:477 +#: commands/dropcmds.c:293 commands/statscmds.c:479 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "no existe el objeto de estadísticas «%s», omitiendo" @@ -6997,7 +6947,7 @@ msgstr "la regla «%s» para la relación «%s» no existe, omitiendo" msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "no existe el conector de datos externos «%s», omitiendo" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1396 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1399 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "el servidor «%s» no existe, omitiendo" @@ -7084,33 +7034,27 @@ msgstr "%s sólo puede invocarse en una función de un disparador en el evento t msgid "%s can only be called in an event trigger function" msgstr "%s sólo puede invocarse en una función de un disparador por eventos" -#: commands/explain.c:212 +#: commands/explain.c:213 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "valor no reconocido para la opción de EXPLAIN «%s»: «%s»" -#: commands/explain.c:219 +#: commands/explain.c:220 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "opción de EXPLAIN «%s» no reconocida" -#: commands/explain.c:227 +#: commands/explain.c:228 #, c-format -msgid "EXPLAIN option BUFFERS requires ANALYZE" -msgstr "la opción BUFFERS de EXPLAIN requiere ANALYZE" - -#: commands/explain.c:232 -#, fuzzy, c-format -#| msgid "EXPLAIN option TIMING requires ANALYZE" msgid "EXPLAIN option WAL requires ANALYZE" -msgstr "la opción TIMING de EXPLAIN requiere ANALYZE" +msgstr "la opción WAL de EXPLAIN requiere ANALYZE" -#: commands/explain.c:241 +#: commands/explain.c:237 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "la opción TIMING de EXPLAIN requiere ANALYZE" -#: commands/extension.c:173 commands/extension.c:3000 +#: commands/extension.c:173 commands/extension.c:3013 #, c-format msgid "extension \"%s\" does not exist" msgstr "no existe la extensión «%s»" @@ -7178,7 +7122,7 @@ msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "el parámetro «%s» no se puede cambiar en un archivo control secundario de extensión" #: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 -#: utils/misc/guc.c:6759 +#: utils/misc/guc.c:6749 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "el parámetro «%s» requiere un valor lógico (booleano)" @@ -7214,10 +7158,9 @@ msgid "permission denied to create extension \"%s\"" msgstr "se ha denegado el permiso para crear la extensión «%s»" #: commands/extension.c:864 -#, fuzzy, c-format -#| msgid "Must be superuser to create this extension." +#, c-format msgid "Must have CREATE privilege on current database to create this extension." -msgstr "Debe ser superusuario para crear esta extensión." +msgstr "Debe tener privilegio CREATE en la base de datos actual para crear esta extensión." #: commands/extension.c:865 #, c-format @@ -7230,127 +7173,126 @@ msgid "permission denied to update extension \"%s\"" msgstr "se ha denegado el permiso para actualizar la extensión «%s»" #: commands/extension.c:872 -#, fuzzy, c-format -#| msgid "Must be superuser to update this extension." +#, c-format msgid "Must have CREATE privilege on current database to update this extension." -msgstr "Debe ser superusuario para actualizar esta extensión." +msgstr "Debe tener privilegio CREATE en la base de datos actual para actualizar esta extensión." #: commands/extension.c:873 #, c-format msgid "Must be superuser to update this extension." msgstr "Debe ser superusuario para actualizar esta extensión." -#: commands/extension.c:1187 +#: commands/extension.c:1200 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "la extensión «%s» no tiene ruta de actualización desde la versión «%s» hasta la versión «%s»" -#: commands/extension.c:1395 commands/extension.c:3061 +#: commands/extension.c:1408 commands/extension.c:3074 #, c-format msgid "version to install must be specified" msgstr "la versión a instalar debe ser especificada" -#: commands/extension.c:1432 +#: commands/extension.c:1445 #, c-format msgid "extension \"%s\" has no installation script nor update path for version \"%s\"" msgstr "la extensión «%s» no tiene script de instalación ni ruta de actualización para la versión «%s»" -#: commands/extension.c:1466 +#: commands/extension.c:1479 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "la extensión «%s» debe ser instalada en el esquema «%s»" -#: commands/extension.c:1626 +#: commands/extension.c:1639 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "detectada una dependencia cíclica entre las extensiones «%s» y «%s»" -#: commands/extension.c:1631 +#: commands/extension.c:1644 #, c-format msgid "installing required extension \"%s\"" msgstr "instalando la extensión requerida «%s»" -#: commands/extension.c:1654 +#: commands/extension.c:1667 #, c-format msgid "required extension \"%s\" is not installed" msgstr "la extensión requerida «%s» no está instalada" -#: commands/extension.c:1657 +#: commands/extension.c:1670 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "Use CREATE EXTENSION ... CASCADE para instalar además las extensiones requeridas." -#: commands/extension.c:1692 +#: commands/extension.c:1705 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "la extensión «%s» ya existe, omitiendo" -#: commands/extension.c:1699 +#: commands/extension.c:1712 #, c-format msgid "extension \"%s\" already exists" msgstr "la extensión «%s» ya existe" -#: commands/extension.c:1710 +#: commands/extension.c:1723 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "los CREATE EXTENSION anidados no están soportados" -#: commands/extension.c:1883 +#: commands/extension.c:1896 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "no se puede eliminar la extensión «%s» porque está siendo modificada" -#: commands/extension.c:2444 +#: commands/extension.c:2457 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "%s sólo puede invocarse desde un script SQL ejecutado por CREATE EXTENSION" -#: commands/extension.c:2456 +#: commands/extension.c:2469 #, c-format msgid "OID %u does not refer to a table" msgstr "el OID %u no hace referencia a una tabla" -#: commands/extension.c:2461 +#: commands/extension.c:2474 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "el tabla «%s» no es un miembro de la extensión que se está creando" -#: commands/extension.c:2815 +#: commands/extension.c:2828 #, c-format msgid "cannot move extension \"%s\" into schema \"%s\" because the extension contains the schema" msgstr "no se puede mover la extensión «%s» al esquema «%s» porque la extensión contiene al esquema" -#: commands/extension.c:2856 commands/extension.c:2919 +#: commands/extension.c:2869 commands/extension.c:2932 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "la extensión «%s» no soporta SET SCHEMA" -#: commands/extension.c:2921 +#: commands/extension.c:2934 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "%s no está en el esquema de la extensión, «%s»" -#: commands/extension.c:2980 +#: commands/extension.c:2993 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "los ALTER EXTENSION anidados no están soportados" -#: commands/extension.c:3072 +#: commands/extension.c:3085 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "la versión «%s» de la extensión «%s» ya está instalada" -#: commands/extension.c:3323 +#: commands/extension.c:3336 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "no se puede agregar el esquema «%s» a la extensión «%s» porque el esquema contiene la extensión" -#: commands/extension.c:3351 +#: commands/extension.c:3364 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s no es un miembro de la extensión «%s»" -#: commands/extension.c:3417 +#: commands/extension.c:3430 #, c-format msgid "file \"%s\" is too large" msgstr "el archivo «%s» es demasiado grande" @@ -7430,27 +7372,27 @@ msgstr "el mapeo de usuario «%s» ya existe para el servidor «%s», omitiendo" msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "el mapeo de usuario «%s» ya existe para el servidor «%s»" -#: commands/foreigncmds.c:1293 commands/foreigncmds.c:1410 +#: commands/foreigncmds.c:1293 commands/foreigncmds.c:1413 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "no existe el mapeo de usuario «%s» para el servidor «%s»" -#: commands/foreigncmds.c:1415 +#: commands/foreigncmds.c:1418 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "no existe el mapeo de usuario «%s» para el servidor «%s», omitiendo" -#: commands/foreigncmds.c:1566 foreign/foreign.c:389 +#: commands/foreigncmds.c:1569 foreign/foreign.c:389 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "el conector de datos externos «%s» no tiene manejador" -#: commands/foreigncmds.c:1572 +#: commands/foreigncmds.c:1575 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "el conector de datos externos «%s» no soporta IMPORT FOREIGN SCHEMA" -#: commands/foreigncmds.c:1675 +#: commands/foreigncmds.c:1678 #, c-format msgid "importing foreign table \"%s\"" msgstr "importando la tabla foránea «%s»" @@ -7828,13 +7770,13 @@ msgstr "no se pueden create restricciones de exclusión en la tabla particionada msgid "cannot create indexes on temporary tables of other sessions" msgstr "no se pueden crear índices en tablas temporales de otras sesiones" -#: commands/indexcmds.c:717 commands/tablecmds.c:702 commands/tablespace.c:1173 +#: commands/indexcmds.c:717 commands/tablecmds.c:704 commands/tablespace.c:1173 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "no se puede especificar el tablespace por omisión para las relaciones particionadas" -#: commands/indexcmds.c:749 commands/tablecmds.c:737 commands/tablecmds.c:13072 -#: commands/tablecmds.c:13186 +#: commands/indexcmds.c:749 commands/tablecmds.c:739 commands/tablecmds.c:13131 +#: commands/tablecmds.c:13245 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "sólo relaciones compartidas pueden ser puestas en el tablespace pg_global" @@ -7865,10 +7807,10 @@ msgid "access method \"%s\" does not support exclusion constraints" msgstr "el método de acceso «%s» no soporta restricciones de exclusión" #: commands/indexcmds.c:941 -#, fuzzy, c-format +#, c-format #| msgid "cannot create partitioned table as inheritance child" msgid "cannot match partition key to an index using access method \"%s\"" -msgstr "no se puede crear una tabla particionada como hija de herencia" +msgstr "no se puede hacer coincidir la llave de partición a un índice usando el método de acceso «%s»" #: commands/indexcmds.c:951 #, c-format @@ -7900,12 +7842,12 @@ msgstr "la creación de índices en columnas de sistema no está soportada" msgid "%s %s will create implicit index \"%s\" for table \"%s\"" msgstr "%s %s creará el índice implícito «%s» para la tabla «%s»" -#: commands/indexcmds.c:1198 tcop/utility.c:1461 +#: commands/indexcmds.c:1198 tcop/utility.c:1484 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "no se puede crear un índice único en la tabla particionada «%s»" -#: commands/indexcmds.c:1200 tcop/utility.c:1463 +#: commands/indexcmds.c:1200 tcop/utility.c:1486 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "La tabla «%s» contiene particiones que son tablas foráneas." @@ -7915,13 +7857,13 @@ msgstr "La tabla «%s» contiene particiones que son tablas foráneas." msgid "functions in index predicate must be marked IMMUTABLE" msgstr "las funciones utilizadas en predicados de índice deben estar marcadas IMMUTABLE" -#: commands/indexcmds.c:1695 parser/parse_utilcmd.c:2352 -#: parser/parse_utilcmd.c:2487 +#: commands/indexcmds.c:1695 parser/parse_utilcmd.c:2440 +#: parser/parse_utilcmd.c:2575 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "no existe la columna «%s» en la llave" -#: commands/indexcmds.c:1719 parser/parse_utilcmd.c:1670 +#: commands/indexcmds.c:1719 parser/parse_utilcmd.c:1776 #, c-format msgid "expressions are not supported in included columns" msgstr "las expresiones no están soportadas en columnas incluidas" @@ -7956,9 +7898,9 @@ msgstr "la columna incluida no permite las opciones NULLS FIRST/LAST" msgid "could not determine which collation to use for index expression" msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de índice" -#: commands/indexcmds.c:1822 commands/tablecmds.c:15952 commands/typecmds.c:770 -#: parser/parse_expr.c:2850 parser/parse_type.c:566 parser/parse_utilcmd.c:3562 -#: parser/parse_utilcmd.c:4123 utils/adt/misc.c:502 +#: commands/indexcmds.c:1822 commands/tablecmds.c:16011 commands/typecmds.c:771 +#: parser/parse_expr.c:2850 parser/parse_type.c:566 parser/parse_utilcmd.c:3649 +#: parser/parse_utilcmd.c:4210 utils/adt/misc.c:503 #, c-format msgid "collations are not supported by type %s" msgstr "los ordenamientos (collation) no están soportados por el tipo %s" @@ -7993,8 +7935,8 @@ msgstr "el método de acceso «%s» no soporta las opciones ASC/DESC" msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "el método de acceso «%s» no soporta las opciones NULLS FIRST/LAST" -#: commands/indexcmds.c:1977 commands/tablecmds.c:15977 -#: commands/tablecmds.c:15983 commands/typecmds.c:1922 +#: commands/indexcmds.c:1977 commands/tablecmds.c:16036 +#: commands/tablecmds.c:16042 commands/typecmds.c:1945 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "el tipo de dato %s no tiene una clase de operadores por omisión para el método de acceso «%s»" @@ -8010,7 +7952,7 @@ msgstr "Debe especificar una clase de operadores para el índice, o definir una msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "no existe la clase de operadores «%s» para el método de acceso «%s»" -#: commands/indexcmds.c:2030 commands/typecmds.c:1910 +#: commands/indexcmds.c:2030 commands/typecmds.c:1933 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "la clase de operadores «%s» no acepta el tipo de datos %s" @@ -8062,10 +8004,9 @@ msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skippin msgstr "no se puede reindexar el índice de restricción de exclusión «%s.%s» concurrentemente, omitiendo" #: commands/indexcmds.c:2996 -#, fuzzy, c-format -#| msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" +#, c-format msgid "cannot reindex invalid index on TOAST table concurrently" -msgstr "no se puede reindexar el índice no válido «%s.%s» concurrentemente, omitiendo" +msgstr "no se puede reindexar el índice no válido en una tabla TOAST concurrentemente" #: commands/indexcmds.c:3024 #, c-format @@ -8082,7 +8023,7 @@ msgstr "el índice «%s.%s» fue reindexado" msgid "REINDEX is not yet implemented for partitioned indexes" msgstr "REINDEX no está implementado aún para tablas particionadas" -#: commands/lockcmds.c:91 commands/tablecmds.c:5544 commands/trigger.c:295 +#: commands/lockcmds.c:91 commands/tablecmds.c:5629 commands/trigger.c:295 #: rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:928 #, c-format msgid "\"%s\" is not a table or view" @@ -8218,25 +8159,27 @@ msgstr "los operadores de búsqueda en índices deben retornar boolean" #: commands/opclasscmds.c:1159 #, c-format +#| msgid "associated data types for operator class options parsing functions must match opclass input type" msgid "associated data types for opclass options parsing functions must match opclass input type" -msgstr "" +msgstr "los tipos de dato asociados a las funciones de interpretación de opciones de la clase de operadores deben coincidir exactamente con el tipo de entrada de la clase de operadores" #: commands/opclasscmds.c:1166 -#, fuzzy, c-format -#| msgid "strictness of aggregate's forward and inverse transition functions must match" +#, c-format +#| msgid "left and right associated data types for operator class options parsing functions must match" msgid "left and right associated data types for opclass options parsing functions must match" -msgstr "la opción «strict» de las funciones de transición directa e inversa deben coincidir exactamente en la función de agregación" +msgstr "los tipos de dato izquierdo y derecho asociados a las funciones de interpretación de opciones de la clase de operadores deben coincidir" #: commands/opclasscmds.c:1174 -#, fuzzy, c-format -#| msgid "invalid XML processing instruction" +#, c-format +#| msgid "invalid operator class options parsing function" msgid "invalid opclass options parsing function" -msgstr "instrucción de procesamiento XML no válida" +msgstr "función de interpretación de opciones de la clase de operadores no válida" #: commands/opclasscmds.c:1175 #, c-format +#| msgid "Valid signature of operator class options parsing function is %s." msgid "Valid signature of opclass options parsing function is '%s'." -msgstr "" +msgstr "La signatura válida para la función de interpretación de opciones de una clase de operadores es '%s'." #: commands/opclasscmds.c:1194 #, c-format @@ -8269,22 +8212,19 @@ msgid "btree in_range functions must return boolean" msgstr "las funciones btree in_range deben retornar booleano" #: commands/opclasscmds.c:1250 -#, fuzzy, c-format -#| msgid "btree in_range functions must have five arguments" +#, c-format msgid "btree equal image functions must have one argument" -msgstr "las funciones btree in_range deben tener cinco argumentos" +msgstr "las funciones btree de igualdad de imagen deben tener un argumento" #: commands/opclasscmds.c:1254 -#, fuzzy, c-format -#| msgid "btree in_range functions must return boolean" +#, c-format msgid "btree equal image functions must return boolean" -msgstr "las funciones btree in_range deben retornar booleano" +msgstr "las funciones btree de igualdad de imagen deben retornar booleano" #: commands/opclasscmds.c:1267 -#, fuzzy, c-format -#| msgid "btree in_range functions must return boolean" +#, c-format msgid "btree equal image functions must not be cross-type" -msgstr "las funciones btree in_range deben retornar booleano" +msgstr "las funciones btree de igualdad de imagen no deben ser entre distintos tipos" #: commands/opclasscmds.c:1277 #, c-format @@ -8356,7 +8296,7 @@ msgstr "ya existe una familia de operadores «%s» para el método de acceso «% msgid "SETOF type not allowed for operator argument" msgstr "no se permite un tipo SETOF en los argumentos de un operador" -#: commands/operatorcmds.c:152 commands/operatorcmds.c:455 +#: commands/operatorcmds.c:152 commands/operatorcmds.c:467 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "el atributo de operador «%s» no es reconocido" @@ -8376,21 +8316,26 @@ msgstr "debe especificar al menos uno de los argumentos izquierdo o derecho" msgid "restriction estimator function %s must return type %s" msgstr "la función de estimación de restricción %s debe retornar tipo %s" -#: commands/operatorcmds.c:324 +#: commands/operatorcmds.c:321 +#, c-format +msgid "join estimator function %s has multiple matches" +msgstr "la función de estimación de join %s tiene múltiples coincidencias" + +#: commands/operatorcmds.c:336 #, c-format msgid "join estimator function %s must return type %s" msgstr "la función de estimación de join %s debe retornar tipo %s" -#: commands/operatorcmds.c:449 +#: commands/operatorcmds.c:461 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "el atributo de operador «%s» no puede ser cambiado" #: commands/policy.c:88 commands/policy.c:401 commands/policy.c:491 -#: commands/tablecmds.c:1499 commands/tablecmds.c:1981 -#: commands/tablecmds.c:3021 commands/tablecmds.c:5523 -#: commands/tablecmds.c:8250 commands/tablecmds.c:15542 -#: commands/tablecmds.c:15577 commands/trigger.c:301 commands/trigger.c:1206 +#: commands/tablecmds.c:1512 commands/tablecmds.c:1994 +#: commands/tablecmds.c:3076 commands/tablecmds.c:5608 +#: commands/tablecmds.c:8364 commands/tablecmds.c:15601 +#: commands/tablecmds.c:15636 commands/trigger.c:301 commands/trigger.c:1206 #: commands/trigger.c:1315 rewrite/rewriteDefine.c:277 #: rewrite/rewriteDefine.c:933 rewrite/rewriteRemove.c:80 #, c-format @@ -8521,13 +8466,12 @@ msgstr "debe ser superusuario para crear publicaciones FOR ALL TABLES" #: commands/publicationcmds.c:248 #, c-format msgid "wal_level is insufficient to publish logical changes" -msgstr "" +msgstr "wal_level es insuficiente para publicar cambios lógicos" #: commands/publicationcmds.c:249 -#, fuzzy, c-format -#| msgid "Change wal_level to be logical or higher." +#, c-format msgid "Set wal_level to logical before creating subscriptions." -msgstr "Cambie wal_level a logical o superior." +msgstr "Cambie wal_level a logical antes de crear suscripciones." #: commands/publicationcmds.c:369 #, c-format @@ -8704,8 +8648,8 @@ msgstr "la secuencia debe estar en el mismo esquema que la tabla a la que está msgid "cannot change ownership of identity sequence" msgstr "no se puede cambiar el dueño de la secuencia de identidad" -#: commands/sequence.c:1718 commands/tablecmds.c:12454 -#: commands/tablecmds.c:14968 +#: commands/sequence.c:1718 commands/tablecmds.c:12513 +#: commands/tablecmds.c:15027 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "La secuencia «%s» está enlazada a la tabla «%s»." @@ -8765,21 +8709,20 @@ msgstr "nombre de columna duplicado en definición de estadísticas" msgid "unrecognized statistics kind \"%s\"" msgstr "tipo de estadísticas «%s» no reconocido" -#: commands/statscmds.c:442 commands/tablecmds.c:7271 +#: commands/statscmds.c:444 commands/tablecmds.c:7385 #, c-format msgid "statistics target %d is too low" msgstr "el valor de estadísticas %d es demasiado bajo" -#: commands/statscmds.c:450 commands/tablecmds.c:7279 +#: commands/statscmds.c:452 commands/tablecmds.c:7393 #, c-format msgid "lowering statistics target to %d" msgstr "bajando el valor de estadísticas a %d" -#: commands/statscmds.c:473 -#, fuzzy, c-format -#| msgid "statistics object \"%s\" does not exist, skipping" +#: commands/statscmds.c:475 +#, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" -msgstr "no existe el objeto de estadísticas «%s», omitiendo" +msgstr "no existe el objeto de estadísticas «%s.%s», omitiendo" #: commands/subscriptioncmds.c:181 #, c-format @@ -8811,7 +8754,7 @@ msgid "must be superuser to create subscriptions" msgstr "debe ser superusuario para crear suscripciones" #: commands/subscriptioncmds.c:442 commands/subscriptioncmds.c:530 -#: replication/logical/tablesync.c:857 replication/logical/worker.c:2085 +#: replication/logical/tablesync.c:857 replication/logical/worker.c:2096 #, c-format msgid "could not connect to the publisher: %s" msgstr "no se pudo connectar con el editor (publisher): %s" @@ -8965,8 +8908,8 @@ msgstr "la vista materializada «%s» no existe, omitiendo" msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Use DROP MATERIALIZED VIEW para eliminar una vista materializada." -#: commands/tablecmds.c:252 commands/tablecmds.c:276 commands/tablecmds.c:17141 -#: parser/parse_utilcmd.c:2084 +#: commands/tablecmds.c:252 commands/tablecmds.c:276 commands/tablecmds.c:17200 +#: parser/parse_utilcmd.c:2172 #, c-format msgid "index \"%s\" does not exist" msgstr "no existe el índice «%s»" @@ -8989,8 +8932,8 @@ msgstr "«%s» no es un tipo" msgid "Use DROP TYPE to remove a type." msgstr "Use DROP TYPE para eliminar un tipo." -#: commands/tablecmds.c:264 commands/tablecmds.c:12293 -#: commands/tablecmds.c:14748 +#: commands/tablecmds.c:264 commands/tablecmds.c:12352 +#: commands/tablecmds.c:14807 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "no existe la tabla foránea «%s»" @@ -9004,119 +8947,124 @@ msgstr "la tabla foránea «%s» no existe, omitiendo" msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Use DROP FOREIGN TABLE para eliminar una tabla foránea." -#: commands/tablecmds.c:618 +#: commands/tablecmds.c:620 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT sólo puede ser usado en tablas temporales" -#: commands/tablecmds.c:649 +#: commands/tablecmds.c:651 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "no se puede crear una tabla temporal dentro una operación restringida por seguridad" -#: commands/tablecmds.c:685 commands/tablecmds.c:13652 +#: commands/tablecmds.c:687 commands/tablecmds.c:13711 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "se heredaría de la relación «%s» más de una vez" -#: commands/tablecmds.c:866 +#: commands/tablecmds.c:868 #, c-format msgid "specifying a table access method is not supported on a partitioned table" msgstr "especificar un método de acceso de tablas no está soportado en tablas particionadas." -#: commands/tablecmds.c:962 +#: commands/tablecmds.c:964 #, c-format msgid "\"%s\" is not partitioned" msgstr "«%s» no está particionada" -#: commands/tablecmds.c:1056 +#: commands/tablecmds.c:1058 #, c-format msgid "cannot partition using more than %d columns" msgstr "no se puede particionar usando más de %d columnas" -#: commands/tablecmds.c:1112 +#: commands/tablecmds.c:1114 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "no se puede crear una partición foránea en la tabla particionada «%s»" -#: commands/tablecmds.c:1114 +#: commands/tablecmds.c:1116 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "La tabla «%s» contiene índices que son únicos." -#: commands/tablecmds.c:1277 +#: commands/tablecmds.c:1279 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY no soporta eliminar múltiples objetos" -#: commands/tablecmds.c:1281 +#: commands/tablecmds.c:1283 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY no soporta CASCADE" -#: commands/tablecmds.c:1641 +#: commands/tablecmds.c:1384 +#, c-format +msgid "cannot drop partitioned index \"%s\" concurrently" +msgstr "no se puede eliminar el índice particionado «%s» concurrentemente" + +#: commands/tablecmds.c:1654 #, c-format msgid "cannot truncate only a partitioned table" msgstr "no se puede truncar ONLY una tabla particionada" -#: commands/tablecmds.c:1642 +#: commands/tablecmds.c:1655 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "No especifique la opción ONLY, o ejecute TRUNCATE ONLY en las particiones directamente." -#: commands/tablecmds.c:1711 +#: commands/tablecmds.c:1724 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "truncando además la tabla «%s»" -#: commands/tablecmds.c:2018 +#: commands/tablecmds.c:2031 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "no se pueden truncar tablas temporales de otras sesiones" -#: commands/tablecmds.c:2242 commands/tablecmds.c:13549 +#: commands/tablecmds.c:2259 commands/tablecmds.c:13608 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "no se puede heredar de la tabla particionada «%s»" -#: commands/tablecmds.c:2247 +#: commands/tablecmds.c:2264 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "no se puede heredar de la partición «%s»" -#: commands/tablecmds.c:2255 parser/parse_utilcmd.c:2314 -#: parser/parse_utilcmd.c:2456 +#: commands/tablecmds.c:2272 parser/parse_utilcmd.c:2402 +#: parser/parse_utilcmd.c:2544 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "la relación heredada «%s» no es una tabla o tabla foránea" -#: commands/tablecmds.c:2267 +#: commands/tablecmds.c:2284 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "no se puede crear una relación temporal como partición de la relación permanente «%s»" -#: commands/tablecmds.c:2276 commands/tablecmds.c:13528 +#: commands/tablecmds.c:2293 commands/tablecmds.c:13587 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "no se puede heredar de la tabla temporal «%s»" -#: commands/tablecmds.c:2286 commands/tablecmds.c:13536 +#: commands/tablecmds.c:2303 commands/tablecmds.c:13595 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "no se puede heredar de una tabla temporal de otra sesión" -#: commands/tablecmds.c:2337 +#: commands/tablecmds.c:2357 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "mezclando múltiples definiciones heredadas de la columna «%s»" -#: commands/tablecmds.c:2345 +#: commands/tablecmds.c:2365 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "columna heredada «%s» tiene conflicto de tipos" -#: commands/tablecmds.c:2347 commands/tablecmds.c:2370 -#: commands/tablecmds.c:2583 commands/tablecmds.c:2613 +#: commands/tablecmds.c:2367 commands/tablecmds.c:2390 +#: commands/tablecmds.c:2639 commands/tablecmds.c:2669 #: parser/parse_coerce.c:1935 parser/parse_coerce.c:1955 #: parser/parse_coerce.c:1975 parser/parse_coerce.c:2030 #: parser/parse_coerce.c:2107 parser/parse_coerce.c:2141 @@ -9125,1190 +9073,1185 @@ msgstr "columna heredada «%s» tiene conflicto de tipos" msgid "%s versus %s" msgstr "%s versus %s" -#: commands/tablecmds.c:2356 +#: commands/tablecmds.c:2376 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "columna heredada «%s» tiene conflicto de ordenamiento (collation)" -#: commands/tablecmds.c:2358 commands/tablecmds.c:2595 -#: commands/tablecmds.c:6025 +#: commands/tablecmds.c:2378 commands/tablecmds.c:2651 +#: commands/tablecmds.c:6110 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "«%s» versus «%s»" -#: commands/tablecmds.c:2368 +#: commands/tablecmds.c:2388 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "columna heredada «%s» tiene conflicto de parámetros de almacenamiento" -#: commands/tablecmds.c:2384 +#: commands/tablecmds.c:2404 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "columna heredada «%s» tiene conflicto de generación" -#: commands/tablecmds.c:2489 commands/tablecmds.c:11098 -#: parser/parse_utilcmd.c:1094 parser/parse_utilcmd.c:1181 -#: parser/parse_utilcmd.c:1597 parser/parse_utilcmd.c:1706 +#: commands/tablecmds.c:2490 commands/tablecmds.c:2545 +#: commands/tablecmds.c:11157 parser/parse_utilcmd.c:1252 +#: parser/parse_utilcmd.c:1295 parser/parse_utilcmd.c:1703 +#: parser/parse_utilcmd.c:1812 #, c-format msgid "cannot convert whole-row table reference" msgstr "no se puede convertir una referencia a la fila completa (whole-row)" -#: commands/tablecmds.c:2490 parser/parse_utilcmd.c:1182 +#: commands/tablecmds.c:2491 parser/parse_utilcmd.c:1253 +#, c-format +msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." +msgstr "La expresión de generación para la columna «%s» contiene una referencia a la fila completa (whole-row) de la tabla «%s»." + +#: commands/tablecmds.c:2546 parser/parse_utilcmd.c:1296 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "La restricción «%s» contiene una referencia a la fila completa (whole-row) de la tabla «%s»." -#: commands/tablecmds.c:2569 +#: commands/tablecmds.c:2625 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "mezclando la columna «%s» con la definición heredada" -#: commands/tablecmds.c:2573 +#: commands/tablecmds.c:2629 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "moviendo y mezclando la columna «%s» con la definición heredada" -#: commands/tablecmds.c:2574 +#: commands/tablecmds.c:2630 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "La columna especificada por el usuario fue movida a la posición de la columna heredada." -#: commands/tablecmds.c:2581 +#: commands/tablecmds.c:2637 #, c-format msgid "column \"%s\" has a type conflict" msgstr "la columna «%s» tiene conflicto de tipos" -#: commands/tablecmds.c:2593 +#: commands/tablecmds.c:2649 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "la columna «%s» tiene conflicto de ordenamientos (collation)" -#: commands/tablecmds.c:2611 +#: commands/tablecmds.c:2667 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "la columna «%s» tiene conflicto de parámetros de almacenamiento" -#: commands/tablecmds.c:2639 -#, fuzzy, c-format -#| msgid "cannot use system column \"%s\" in column generation expression" +#: commands/tablecmds.c:2695 +#, c-format msgid "child column \"%s\" specifies generation expression" -msgstr "no se puede usar la columna de sistema «%s» en una expresión de generación de columna" +msgstr "la columna hija «%s» especifica una expresión de generación de columna" -#: commands/tablecmds.c:2641 +#: commands/tablecmds.c:2697 #, c-format msgid "Omit the generation expression in the definition of the child table column to inherit the generation expression from the parent table." -msgstr "" +msgstr "Omita la expresión de generación en la definición de la columna en la tabla hija para heredar la expresión de generación de la tabla padre." -#: commands/tablecmds.c:2645 -#, fuzzy, c-format -#| msgid "column \"%s\" is a generated column" +#: commands/tablecmds.c:2701 +#, c-format msgid "column \"%s\" inherits from generated column but specifies default" -msgstr "la columna «%s» es una columna generada" +msgstr "la columna «%s» hereda de una columna generada pero especifica un valor por omisión" -#: commands/tablecmds.c:2650 -#, fuzzy, c-format -#| msgid "column \"%s\" is a generated column" +#: commands/tablecmds.c:2706 +#, c-format msgid "column \"%s\" inherits from generated column but specifies identity" -msgstr "la columna «%s» es una columna generada" +msgstr "la columna «%s» hereda de una columna generada pero especifica una identidad" -#: commands/tablecmds.c:2760 -#, fuzzy, c-format -#| msgid "column \"%s\" inherits conflicting default values" +#: commands/tablecmds.c:2815 +#, c-format msgid "column \"%s\" inherits conflicting generation expressions" -msgstr "la columna «%s» hereda valores por omisión no coincidentes" +msgstr "la columna «%s» hereda expresiones de generación en conflicto" -#: commands/tablecmds.c:2765 +#: commands/tablecmds.c:2820 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "la columna «%s» hereda valores por omisión no coincidentes" -#: commands/tablecmds.c:2767 +#: commands/tablecmds.c:2822 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Para resolver el conflicto, indique explícitamente un valor por omisión." -#: commands/tablecmds.c:2813 +#: commands/tablecmds.c:2868 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "la restricción «check» «%s» aparece más de una vez con diferentes expresiones" -#: commands/tablecmds.c:2990 +#: commands/tablecmds.c:3045 #, c-format msgid "cannot rename column of typed table" msgstr "no se puede cambiar el nombre a una columna de una tabla tipada" -#: commands/tablecmds.c:3009 +#: commands/tablecmds.c:3064 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "«%s» no es una tabla, vista, vista materializada, tipo compuesto, índice o tabla foránea" -#: commands/tablecmds.c:3103 +#: commands/tablecmds.c:3158 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "debe cambiar el nombre a la columna heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:3135 +#: commands/tablecmds.c:3190 #, c-format msgid "cannot rename system column \"%s\"" msgstr "no se puede cambiar el nombre a la columna de sistema «%s»" -#: commands/tablecmds.c:3150 +#: commands/tablecmds.c:3205 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "no se puede cambiar el nombre a la columna heredada «%s»" -#: commands/tablecmds.c:3302 +#: commands/tablecmds.c:3357 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "debe cambiar el nombre a la restricción heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:3309 +#: commands/tablecmds.c:3364 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "no se puede cambiar el nombre a la restricción heredada «%s»" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3542 +#: commands/tablecmds.c:3597 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "no se puede hacer %s en «%s» porque está siendo usada por consultas activas en esta sesión" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3551 +#: commands/tablecmds.c:3606 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "no se puede hacer %s en «%s» porque tiene eventos de disparador pendientes" -#: commands/tablecmds.c:4174 commands/tablecmds.c:4189 -#, fuzzy, c-format -#| msgid "cannot change inheritance of partitioned table" +#: commands/tablecmds.c:4237 commands/tablecmds.c:4252 +#, c-format msgid "cannot change persistence setting twice" -msgstr "no se puede cambiar la herencia de una tabla particionada" +msgstr "no se puede cambiar la opción de persistencia dos veces" -#: commands/tablecmds.c:4884 +#: commands/tablecmds.c:4969 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "no se puede reescribir la relación de sistema «%s»" -#: commands/tablecmds.c:4890 +#: commands/tablecmds.c:4975 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "no se puede reescribir la tabla «%s» que es usada como tabla de catálogo" -#: commands/tablecmds.c:4900 +#: commands/tablecmds.c:4985 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "no se puede reescribir tablas temporales de otras sesiones" -#: commands/tablecmds.c:5189 +#: commands/tablecmds.c:5274 #, c-format msgid "rewriting table \"%s\"" msgstr "reescribiendo tabla «%s»" -#: commands/tablecmds.c:5193 +#: commands/tablecmds.c:5278 #, c-format msgid "verifying table \"%s\"" msgstr "verificando tabla «%s»" -#: commands/tablecmds.c:5358 -#, fuzzy, c-format -#| msgid "column \"%s\" of table \"%s\" contains null values" +#: commands/tablecmds.c:5443 +#, c-format msgid "column \"%s\" of relation \"%s\" contains null values" -msgstr "la columna «%s» de la tabla «%s» contiene valores null" +msgstr "la columna «%s» de la relación «%s» contiene valores null" -#: commands/tablecmds.c:5375 commands/tablecmds.c:10294 -#, fuzzy, c-format -#| msgid "check constraint \"%s\" is violated by some row" +#: commands/tablecmds.c:5460 +#, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" -msgstr "la restricción «check» «%s» es violada por alguna fila" +msgstr "la restricción check «%s» de la relación «%s» es violada por alguna fila" -#: commands/tablecmds.c:5394 partitioning/partbounds.c:3237 +#: commands/tablecmds.c:5479 partitioning/partbounds.c:3235 #, c-format msgid "updated partition constraint for default partition \"%s\" would be violated by some row" msgstr "la restricción de partición actualizada para la partición default «%s» sería violada por alguna fila" -#: commands/tablecmds.c:5400 -#, fuzzy, c-format -#| msgid "partition constraint is violated by some row" +#: commands/tablecmds.c:5485 +#, c-format msgid "partition constraint of relation \"%s\" is violated by some row" -msgstr "la restricción de partición es violada por alguna fila" +msgstr "la restricción de partición de la relación «%s» es violada por alguna fila" -#: commands/tablecmds.c:5547 commands/trigger.c:1200 commands/trigger.c:1306 +#: commands/tablecmds.c:5632 commands/trigger.c:1200 commands/trigger.c:1306 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "«%s» no es una tabla, vista o tabla foránea" -#: commands/tablecmds.c:5550 +#: commands/tablecmds.c:5635 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "«%s» no es una tabla, vista, vista materializada, o índice" -#: commands/tablecmds.c:5556 +#: commands/tablecmds.c:5641 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "«%s» no es una tabla, vista materializada, o índice" -#: commands/tablecmds.c:5559 +#: commands/tablecmds.c:5644 #, c-format msgid "\"%s\" is not a table, materialized view, or foreign table" msgstr "«%s» no es una tabla, vista materializada o tabla foránea" -#: commands/tablecmds.c:5562 +#: commands/tablecmds.c:5647 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "«%s» no es una tabla o tabla foránea" -#: commands/tablecmds.c:5565 +#: commands/tablecmds.c:5650 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "«%s» no es una tabla, tipo compuesto, o tabla foránea" -#: commands/tablecmds.c:5568 +#: commands/tablecmds.c:5653 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "«%s» no es una tabla, vista materializada, índice o tabla foránea" -#: commands/tablecmds.c:5578 +#: commands/tablecmds.c:5663 #, c-format msgid "\"%s\" is of the wrong type" msgstr "«%s» es tipo equivocado" -#: commands/tablecmds.c:5785 commands/tablecmds.c:5792 +#: commands/tablecmds.c:5870 commands/tablecmds.c:5877 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "no se puede alterar el tipo «%s» porque la columna «%s.%s» lo usa" -#: commands/tablecmds.c:5799 +#: commands/tablecmds.c:5884 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "no se puede alterar la tabla foránea «%s» porque la columna «%s.%s» usa su tipo de registro" -#: commands/tablecmds.c:5806 +#: commands/tablecmds.c:5891 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "no se puede alterar la tabla «%s» porque la columna «%s.%s» usa su tipo de registro" -#: commands/tablecmds.c:5862 +#: commands/tablecmds.c:5947 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "no se puede cambiar el tipo «%s» porque es el tipo de una tabla tipada" -#: commands/tablecmds.c:5864 +#: commands/tablecmds.c:5949 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Use ALTER ... CASCADE para eliminar además las tablas tipadas." -#: commands/tablecmds.c:5910 +#: commands/tablecmds.c:5995 #, c-format msgid "type %s is not a composite type" msgstr "el tipo %s no es un tipo compuesto" -#: commands/tablecmds.c:5937 +#: commands/tablecmds.c:6022 #, c-format msgid "cannot add column to typed table" msgstr "no se puede agregar una columna a una tabla tipada" -#: commands/tablecmds.c:5988 +#: commands/tablecmds.c:6073 #, c-format msgid "cannot add column to a partition" msgstr "no se puede agregar una columna a una partición" -#: commands/tablecmds.c:6017 commands/tablecmds.c:13779 +#: commands/tablecmds.c:6102 commands/tablecmds.c:13838 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "la tabla hija «%s» tiene un tipo diferente para la columna «%s»" -#: commands/tablecmds.c:6023 commands/tablecmds.c:13786 +#: commands/tablecmds.c:6108 commands/tablecmds.c:13845 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "la tabla hija «%s» tiene un ordenamiento (collation) diferente para la columna «%s»" -#: commands/tablecmds.c:6037 +#: commands/tablecmds.c:6122 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "mezclando la definición de la columna «%s» en la tabla hija «%s»" -#: commands/tablecmds.c:6080 +#: commands/tablecmds.c:6165 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "no se puede agregar una columna de identidad recursivamente a una tabla que tiene tablas hijas" -#: commands/tablecmds.c:6317 +#: commands/tablecmds.c:6402 #, c-format msgid "column must be added to child tables too" msgstr "la columna debe ser agregada a las tablas hijas también" -#: commands/tablecmds.c:6395 +#: commands/tablecmds.c:6480 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "la columna «%s» de la relación «%s» ya existe, omitiendo" -#: commands/tablecmds.c:6402 +#: commands/tablecmds.c:6487 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "ya existe la columna «%s» en la relación «%s»" -#: commands/tablecmds.c:6468 commands/tablecmds.c:10736 +#: commands/tablecmds.c:6553 commands/tablecmds.c:10795 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "no se pueden eliminar restricciones sólo de la tabla particionada cuando existen particiones" -#: commands/tablecmds.c:6469 commands/tablecmds.c:6738 -#: commands/tablecmds.c:7689 commands/tablecmds.c:10737 +#: commands/tablecmds.c:6554 commands/tablecmds.c:6823 +#: commands/tablecmds.c:7803 commands/tablecmds.c:10796 #, c-format msgid "Do not specify the ONLY keyword." msgstr "No especifique la opción ONLY." -#: commands/tablecmds.c:6506 commands/tablecmds.c:6664 -#: commands/tablecmds.c:6806 commands/tablecmds.c:6891 -#: commands/tablecmds.c:6985 commands/tablecmds.c:7044 -#: commands/tablecmds.c:7146 commands/tablecmds.c:7312 -#: commands/tablecmds.c:7382 commands/tablecmds.c:7475 -#: commands/tablecmds.c:10891 commands/tablecmds.c:12316 +#: commands/tablecmds.c:6591 commands/tablecmds.c:6749 +#: commands/tablecmds.c:6891 commands/tablecmds.c:7005 +#: commands/tablecmds.c:7099 commands/tablecmds.c:7158 +#: commands/tablecmds.c:7260 commands/tablecmds.c:7426 +#: commands/tablecmds.c:7496 commands/tablecmds.c:7589 +#: commands/tablecmds.c:10950 commands/tablecmds.c:12375 #, c-format msgid "cannot alter system column \"%s\"" msgstr "no se puede alterar columna de sistema «%s»" -#: commands/tablecmds.c:6512 commands/tablecmds.c:6812 +#: commands/tablecmds.c:6597 commands/tablecmds.c:6897 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "la columna «%s» en la relación «%s» es una columna de identidad" -#: commands/tablecmds.c:6548 +#: commands/tablecmds.c:6633 #, c-format msgid "column \"%s\" is in a primary key" msgstr "la columna «%s» está en la llave primaria" -#: commands/tablecmds.c:6570 +#: commands/tablecmds.c:6655 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "columna «%s» está marcada NOT NULL en la tabla padre" -#: commands/tablecmds.c:6735 commands/tablecmds.c:8148 +#: commands/tablecmds.c:6820 commands/tablecmds.c:8262 #, c-format msgid "constraint must be added to child tables too" msgstr "la restricción debe ser agregada a las tablas hijas también" -#: commands/tablecmds.c:6736 +#: commands/tablecmds.c:6821 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "La columna «%s» de la relación «%s» no está previamente marcada NOT NULL." -#: commands/tablecmds.c:6771 +#: commands/tablecmds.c:6856 #, c-format +#| msgid "existing constraints on column \"%s.%s\" are sufficient to prove that it does not contain nulls" msgid "existing constraints on column \"%s\".\"%s\" are sufficient to prove that it does not contain nulls" msgstr "las restricciones existentes en la columna «%s.%s» son suficientes para demostrar que no contiene nulos" -#: commands/tablecmds.c:6814 +#: commands/tablecmds.c:6899 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY en su lugar." -#: commands/tablecmds.c:6819 +#: commands/tablecmds.c:6904 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "la columna «%s» en la relación «%s» es una columna generada" -#: commands/tablecmds.c:6822 -#, fuzzy, c-format -#| msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." +#: commands/tablecmds.c:6907 +#, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." -msgstr "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY en su lugar." +msgstr "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION en su lugar." -#: commands/tablecmds.c:6902 +#: commands/tablecmds.c:7016 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "la columna «%s» en la relación «%s» debe ser declarada NOT NULL antes de que una identidad pueda agregarse" -#: commands/tablecmds.c:6908 +#: commands/tablecmds.c:7022 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "la columna «%s» en la relación «%s» ya es una columna de identidad" -#: commands/tablecmds.c:6914 +#: commands/tablecmds.c:7028 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "la columna «%s» en la relación «%s» ya tiene un valor por omisión" -#: commands/tablecmds.c:6991 commands/tablecmds.c:7052 +#: commands/tablecmds.c:7105 commands/tablecmds.c:7166 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "la columna «%s» en la relación «%s» no es una columna identidad" -#: commands/tablecmds.c:7057 +#: commands/tablecmds.c:7171 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "la columna «%s» de la relación «%s» no es una columna identidad, omitiendo" -#: commands/tablecmds.c:7116 -#, fuzzy, c-format -#| msgid "cannot rename inherited column \"%s\"" +#: commands/tablecmds.c:7230 +#, c-format msgid "cannot drop generation expression from inherited column" -msgstr "no se puede cambiar el nombre a la columna heredada «%s»" +msgstr "no se puede eliminar la expresión de generación de una columna heredada" -#: commands/tablecmds.c:7154 -#, fuzzy, c-format -#| msgid "column \"%s\" of relation \"%s\" is a generated column" +#: commands/tablecmds.c:7268 +#, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" -msgstr "la columna «%s» en la relación «%s» es una columna generada" +msgstr "la columna «%s» en la relación «%s» no es una columna generada almacenada" -#: commands/tablecmds.c:7159 -#, fuzzy, c-format -#| msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" +#: commands/tablecmds.c:7273 +#, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" -msgstr "la columna «%s» de la relación «%s» no es una columna identidad, omitiendo" +msgstr "la columna «%s» de la relación «%s» no es una columna generada almacenada, omitiendo" -#: commands/tablecmds.c:7259 +#: commands/tablecmds.c:7373 #, c-format msgid "cannot refer to non-index column by number" msgstr "no se puede referir a columnas que no son de índice por número" -#: commands/tablecmds.c:7302 +#: commands/tablecmds.c:7416 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "no existe la columna número %d en la relación «%s»" -#: commands/tablecmds.c:7321 +#: commands/tablecmds.c:7435 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "no se puede alterar estadísticas en la columna incluida «%s» del índice «%s»" -#: commands/tablecmds.c:7326 +#: commands/tablecmds.c:7440 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "no se puede alterar estadísticas en la columna no-de-expresión «%s» del índice «%s»" -#: commands/tablecmds.c:7328 +#: commands/tablecmds.c:7442 #, c-format msgid "Alter statistics on table column instead." msgstr "Altere las estadísticas en la columna de la tabla en su lugar." -#: commands/tablecmds.c:7455 +#: commands/tablecmds.c:7569 #, c-format msgid "invalid storage type \"%s\"" msgstr "tipo de almacenamiento no válido «%s»" -#: commands/tablecmds.c:7487 +#: commands/tablecmds.c:7601 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "el tipo de datos %s de la columna sólo puede tener almacenamiento PLAIN" -#: commands/tablecmds.c:7569 +#: commands/tablecmds.c:7683 #, c-format msgid "cannot drop column from typed table" msgstr "no se pueden eliminar columnas de una tabla tipada" -#: commands/tablecmds.c:7628 +#: commands/tablecmds.c:7742 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "no existe la columna «%s» en la relación «%s», omitiendo" -#: commands/tablecmds.c:7641 +#: commands/tablecmds.c:7755 #, c-format msgid "cannot drop system column \"%s\"" msgstr "no se puede eliminar la columna de sistema «%s»" -#: commands/tablecmds.c:7651 +#: commands/tablecmds.c:7765 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "no se puede eliminar la columna heredada «%s»" -#: commands/tablecmds.c:7664 +#: commands/tablecmds.c:7778 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "no se puede eliminar la columna «%s» porque es parte de la llave de partición de la relación «%s»" -#: commands/tablecmds.c:7688 +#: commands/tablecmds.c:7802 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "no se pueden eliminar columnas sólo de una tabla particionada cuando existe particiones" -#: commands/tablecmds.c:7869 +#: commands/tablecmds.c:7983 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX no está soportado en tablas particionadas" -#: commands/tablecmds.c:7894 +#: commands/tablecmds.c:8008 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX renombrará el índice «%s» a «%s»" -#: commands/tablecmds.c:8228 +#: commands/tablecmds.c:8342 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "no se puede usar ONLY para una llave foránea en la tabla particionada «%s» haciendo referencia a la relación «%s»" -#: commands/tablecmds.c:8234 +#: commands/tablecmds.c:8348 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "no se puede agregar una llave foránea NOT VALID a la tabla particionada «%s» haciendo referencia a la relación «%s»" -#: commands/tablecmds.c:8237 +#: commands/tablecmds.c:8351 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Esta característica no está aún soportada en tablas particionadas." -#: commands/tablecmds.c:8244 commands/tablecmds.c:8649 +#: commands/tablecmds.c:8358 commands/tablecmds.c:8763 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "la relación referida «%s» no es una tabla" -#: commands/tablecmds.c:8267 +#: commands/tablecmds.c:8381 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "las restricciones en tablas permanentes sólo pueden hacer referencia a tablas permanentes" -#: commands/tablecmds.c:8274 +#: commands/tablecmds.c:8388 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "las restricciones en tablas «unlogged» sólo pueden hacer referencia a tablas permanentes o «unlogged»" -#: commands/tablecmds.c:8280 +#: commands/tablecmds.c:8394 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "las restricciones en tablas temporales sólo pueden hacer referencia a tablas temporales" -#: commands/tablecmds.c:8284 +#: commands/tablecmds.c:8398 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "las restricciones en tablas temporales sólo pueden hacer referencia a tablas temporales de esta sesión" -#: commands/tablecmds.c:8350 commands/tablecmds.c:8356 +#: commands/tablecmds.c:8464 commands/tablecmds.c:8470 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "acción %s no válida para restricción de llave foránea que contiene columnas generadas" -#: commands/tablecmds.c:8372 +#: commands/tablecmds.c:8486 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "el número de columnas referidas en la llave foránea no coincide con el número de columnas de referencia" -#: commands/tablecmds.c:8479 +#: commands/tablecmds.c:8593 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "la restricción de llave foránea «%s» no puede ser implementada" -#: commands/tablecmds.c:8481 +#: commands/tablecmds.c:8595 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Las columnas llave «%s» y «%s» son de tipos incompatibles: %s y %s" -#: commands/tablecmds.c:8844 commands/tablecmds.c:9237 -#: parser/parse_utilcmd.c:763 parser/parse_utilcmd.c:892 +#: commands/tablecmds.c:8958 commands/tablecmds.c:9351 +#: parser/parse_utilcmd.c:764 parser/parse_utilcmd.c:893 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "las restricciones de llave foránea no están soportadas en tablas foráneas" -#: commands/tablecmds.c:9603 commands/tablecmds.c:9766 -#: commands/tablecmds.c:10693 commands/tablecmds.c:10768 +#: commands/tablecmds.c:9717 commands/tablecmds.c:9880 +#: commands/tablecmds.c:10752 commands/tablecmds.c:10827 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "no existe la restricción «%s» en la relación «%s»" -#: commands/tablecmds.c:9610 +#: commands/tablecmds.c:9724 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "la restricción «%s» de la relación «%s» no es una restriccion de llave foránea" -#: commands/tablecmds.c:9774 +#: commands/tablecmds.c:9888 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "la restricción «%s» de la relación «%s» no es una llave foránea o restricción «check»" -#: commands/tablecmds.c:9844 +#: commands/tablecmds.c:9966 #, c-format msgid "constraint must be validated on child tables too" msgstr "la restricción debe ser validada en las tablas hijas también" -#: commands/tablecmds.c:9910 +#: commands/tablecmds.c:10050 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "no existe la columna «%s» referida en la llave foránea" -#: commands/tablecmds.c:9915 +#: commands/tablecmds.c:10055 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "no se puede tener más de %d columnas en una llave foránea" -#: commands/tablecmds.c:9980 +#: commands/tablecmds.c:10120 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "no se puede usar una llave primaria postergable para la tabla referenciada «%s»" -#: commands/tablecmds.c:9997 +#: commands/tablecmds.c:10137 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "no hay llave primaria para la tabla referida «%s»" -#: commands/tablecmds.c:10062 +#: commands/tablecmds.c:10202 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "la lista de columnas referidas en una llave foránea no debe contener duplicados" -#: commands/tablecmds.c:10156 +#: commands/tablecmds.c:10296 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "no se puede usar una restricción unique postergable para la tabla referenciada «%s»" -#: commands/tablecmds.c:10161 +#: commands/tablecmds.c:10301 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "no hay restricción unique que coincida con las columnas dadas en la tabla referida «%s»" -#: commands/tablecmds.c:10330 +#: commands/tablecmds.c:10389 #, c-format msgid "validating foreign key constraint \"%s\"" msgstr "validando restricción de llave foránea «%s»" -#: commands/tablecmds.c:10649 +#: commands/tablecmds.c:10708 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "no se puede eliminar la restricción «%s» heredada de la relación «%s»" -#: commands/tablecmds.c:10699 +#: commands/tablecmds.c:10758 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "no existe la restricción «%s» en la relación «%s», omitiendo" -#: commands/tablecmds.c:10875 +#: commands/tablecmds.c:10934 #, c-format msgid "cannot alter column type of typed table" msgstr "no se puede cambiar el tipo de una columna de una tabla tipada" -#: commands/tablecmds.c:10902 +#: commands/tablecmds.c:10961 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "no se puede alterar la columna heredada «%s»" -#: commands/tablecmds.c:10911 +#: commands/tablecmds.c:10970 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "no se puede alterar la columna «%s» porque es parte de la llave de partición de la relación «%s»" -#: commands/tablecmds.c:10961 +#: commands/tablecmds.c:11020 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "el resultado de la cláusula USING para la columna «%s» no puede ser convertido automáticamente al tipo %s" -#: commands/tablecmds.c:10964 +#: commands/tablecmds.c:11023 #, c-format msgid "You might need to add an explicit cast." msgstr "Puede ser necesario agregar un cast explícito." -#: commands/tablecmds.c:10968 +#: commands/tablecmds.c:11027 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "la columna «%s» no puede convertirse automáticamente al tipo %s" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:10971 +#: commands/tablecmds.c:11030 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Puede ser necesario especificar «USING %s::%s»." -#: commands/tablecmds.c:11071 +#: commands/tablecmds.c:11130 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "no se puede alterar la columna heredada «%s» de la relación «%s»" -#: commands/tablecmds.c:11099 +#: commands/tablecmds.c:11158 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "La expresión USING contiene una referencia a la fila completa (whole-row)." -#: commands/tablecmds.c:11110 +#: commands/tablecmds.c:11169 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "debe cambiar el tipo a la columna heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:11235 +#: commands/tablecmds.c:11294 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "no se puede alterar el tipo de la columna «%s» dos veces" -#: commands/tablecmds.c:11273 +#: commands/tablecmds.c:11332 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "la expresión de generación para la columna «%s» no puede ser convertido automáticamente al tipo %s" -#: commands/tablecmds.c:11278 +#: commands/tablecmds.c:11337 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "el valor por omisión para la columna «%s» no puede ser convertido automáticamente al tipo %s" -#: commands/tablecmds.c:11356 +#: commands/tablecmds.c:11415 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "no se puede alterar el tipo de una columna usada por una columna generada" -#: commands/tablecmds.c:11357 +#: commands/tablecmds.c:11416 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "La columna «%s» es usada por la columna generada «%s»." -#: commands/tablecmds.c:11378 +#: commands/tablecmds.c:11437 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "no se puede alterar el tipo de una columna usada en una regla o vista" -#: commands/tablecmds.c:11379 commands/tablecmds.c:11398 -#: commands/tablecmds.c:11416 +#: commands/tablecmds.c:11438 commands/tablecmds.c:11457 +#: commands/tablecmds.c:11475 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s depende de la columna «%s»" -#: commands/tablecmds.c:11397 +#: commands/tablecmds.c:11456 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "no se puede alterar el tipo de una columna usada en una definición de trigger" -#: commands/tablecmds.c:11415 +#: commands/tablecmds.c:11474 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "no se puede alterar el tipo de una columna usada en una definición de política" -#: commands/tablecmds.c:12424 commands/tablecmds.c:12436 +#: commands/tablecmds.c:12483 commands/tablecmds.c:12495 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "no se puede cambiar el dueño del índice «%s»" -#: commands/tablecmds.c:12426 commands/tablecmds.c:12438 +#: commands/tablecmds.c:12485 commands/tablecmds.c:12497 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Considere cambiar el dueño de la tabla en vez de cambiar el dueño del índice." -#: commands/tablecmds.c:12452 +#: commands/tablecmds.c:12511 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "no se puede cambiar el dueño de la secuencia «%s»" -#: commands/tablecmds.c:12466 commands/tablecmds.c:15653 +#: commands/tablecmds.c:12525 commands/tablecmds.c:15712 #, c-format msgid "Use ALTER TYPE instead." msgstr "Considere usar ALTER TYPE." -#: commands/tablecmds.c:12475 +#: commands/tablecmds.c:12534 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "«%s» no es una tabla, vista, secuencia o tabla foránea" -#: commands/tablecmds.c:12815 +#: commands/tablecmds.c:12874 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "no se pueden tener múltiples subórdenes SET TABLESPACE" -#: commands/tablecmds.c:12892 +#: commands/tablecmds.c:12951 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "«%s» no es una tabla, vista, tabla materializada, índice o tabla TOAST" -#: commands/tablecmds.c:12925 commands/view.c:494 +#: commands/tablecmds.c:12984 commands/view.c:494 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION sólo puede usarse en vistas automáticamente actualizables" -#: commands/tablecmds.c:13065 +#: commands/tablecmds.c:13124 #, c-format msgid "cannot move system relation \"%s\"" msgstr "no se puede mover la relación de sistema «%s»" -#: commands/tablecmds.c:13081 +#: commands/tablecmds.c:13140 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "no se pueden mover tablas temporales de otras sesiones" -#: commands/tablecmds.c:13251 +#: commands/tablecmds.c:13310 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "solamente tablas, índices y vistas materializadas existen en tablespaces" -#: commands/tablecmds.c:13263 +#: commands/tablecmds.c:13322 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "no se puede mover objetos hacia o desde el tablespace pg_global" -#: commands/tablecmds.c:13355 +#: commands/tablecmds.c:13414 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "cancelando porque el lock en la relación «%s.%s» no está disponible" -#: commands/tablecmds.c:13371 +#: commands/tablecmds.c:13430 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "no se encontraron relaciones coincidentes en el tablespace «%s»" -#: commands/tablecmds.c:13487 +#: commands/tablecmds.c:13546 #, c-format msgid "cannot change inheritance of typed table" msgstr "no se puede cambiar la herencia de una tabla tipada" -#: commands/tablecmds.c:13492 commands/tablecmds.c:13988 +#: commands/tablecmds.c:13551 commands/tablecmds.c:14047 #, c-format msgid "cannot change inheritance of a partition" msgstr "no puede cambiar la herencia de una partición" -#: commands/tablecmds.c:13497 +#: commands/tablecmds.c:13556 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "no se puede cambiar la herencia de una tabla particionada" -#: commands/tablecmds.c:13543 +#: commands/tablecmds.c:13602 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "no se puede agregar herencia a tablas temporales de otra sesión" -#: commands/tablecmds.c:13556 +#: commands/tablecmds.c:13615 #, c-format msgid "cannot inherit from a partition" msgstr "no se puede heredar de una partición" -#: commands/tablecmds.c:13578 commands/tablecmds.c:16293 +#: commands/tablecmds.c:13637 commands/tablecmds.c:16352 #, c-format msgid "circular inheritance not allowed" msgstr "la herencia circular no está permitida" -#: commands/tablecmds.c:13579 commands/tablecmds.c:16294 +#: commands/tablecmds.c:13638 commands/tablecmds.c:16353 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "«%s» ya es un hijo de «%s»." -#: commands/tablecmds.c:13592 +#: commands/tablecmds.c:13651 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "el trigger «%s» impide a la tabla «%s» convertirse en hija de herencia" -#: commands/tablecmds.c:13594 +#: commands/tablecmds.c:13653 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "Los triggers ROW con tablas de transición no están permitidos en jerarquías de herencia." -#: commands/tablecmds.c:13797 +#: commands/tablecmds.c:13856 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "columna «%s» en tabla hija debe marcarse como NOT NULL" -#: commands/tablecmds.c:13824 +#: commands/tablecmds.c:13883 #, c-format msgid "child table is missing column \"%s\"" msgstr "tabla hija no tiene la columna «%s»" -#: commands/tablecmds.c:13912 +#: commands/tablecmds.c:13971 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "la tabla hija «%s» tiene una definición diferente para la restricción «check» «%s»" -#: commands/tablecmds.c:13920 +#: commands/tablecmds.c:13979 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción no heredada en la tabla hija «%s»" -#: commands/tablecmds.c:13931 +#: commands/tablecmds.c:13990 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción NOT VALID en la tabla hija «%s»" -#: commands/tablecmds.c:13966 +#: commands/tablecmds.c:14025 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "tabla hija no tiene la restricción «%s»" -#: commands/tablecmds.c:14055 +#: commands/tablecmds.c:14114 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "relación «%s» no es una partición de la relación «%s»" -#: commands/tablecmds.c:14061 +#: commands/tablecmds.c:14120 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "relación «%s» no es un padre de la relación «%s»" -#: commands/tablecmds.c:14289 +#: commands/tablecmds.c:14348 #, c-format msgid "typed tables cannot inherit" msgstr "las tablas tipadas no pueden heredar" -#: commands/tablecmds.c:14319 +#: commands/tablecmds.c:14378 #, c-format msgid "table is missing column \"%s\"" msgstr "la tabla no tiene la columna «%s»" -#: commands/tablecmds.c:14330 +#: commands/tablecmds.c:14389 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "la tabla tiene columna «%s» en la posición en que el tipo requiere «%s»." -#: commands/tablecmds.c:14339 +#: commands/tablecmds.c:14398 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "la tabla «%s» tiene un tipo diferente para la columna «%s»" -#: commands/tablecmds.c:14353 +#: commands/tablecmds.c:14412 #, c-format msgid "table has extra column \"%s\"" msgstr "tabla tiene la columna extra «%s»" -#: commands/tablecmds.c:14405 +#: commands/tablecmds.c:14464 #, c-format msgid "\"%s\" is not a typed table" msgstr "«%s» no es una tabla tipada" -#: commands/tablecmds.c:14587 +#: commands/tablecmds.c:14646 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "no se puede usar el índice no-único «%s» como identidad de réplica" -#: commands/tablecmds.c:14593 +#: commands/tablecmds.c:14652 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "no puede usar el índice no-inmediato «%s» como identidad de réplica" -#: commands/tablecmds.c:14599 +#: commands/tablecmds.c:14658 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "no se puede usar el índice funcional «%s» como identidad de réplica" -#: commands/tablecmds.c:14605 +#: commands/tablecmds.c:14664 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "no se puede usar el índice parcial «%s» como identidad de réplica" -#: commands/tablecmds.c:14611 +#: commands/tablecmds.c:14670 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "no se puede usar el índice no válido «%s» como identidad de réplica" -#: commands/tablecmds.c:14628 +#: commands/tablecmds.c:14687 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "el índice «%s» no puede usarse como identidad de réplica porque la column %d es una columna de sistema" -#: commands/tablecmds.c:14635 +#: commands/tablecmds.c:14694 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "el índice «%s» no puede usarse como identidad de réplica porque la column «%s» acepta valores nulos" -#: commands/tablecmds.c:14828 +#: commands/tablecmds.c:14887 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "no se puede cambiar el estado «logged» de la tabla «%s» porque es temporal" -#: commands/tablecmds.c:14852 +#: commands/tablecmds.c:14911 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "no se pudo cambiar la tabla «%s» a «unlogged» porque es parte de una publicación" -#: commands/tablecmds.c:14854 +#: commands/tablecmds.c:14913 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Las tablas «unlogged» no pueden replicarse." -#: commands/tablecmds.c:14899 +#: commands/tablecmds.c:14958 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "no se pudo cambiar la tabla «%s» a «logged» porque hace referencia a la tabla «unlogged» «%s»" -#: commands/tablecmds.c:14909 +#: commands/tablecmds.c:14968 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "no se pudo cambiar la tabla «%s» a «unlogged» porque hace referencia a la tabla «logged» «%s»" -#: commands/tablecmds.c:14967 +#: commands/tablecmds.c:15026 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "no se puede mover una secuencia enlazada a una tabla hacia otro esquema" -#: commands/tablecmds.c:15073 +#: commands/tablecmds.c:15132 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "ya existe una relación llamada «%s» en el esquema «%s»" -#: commands/tablecmds.c:15636 +#: commands/tablecmds.c:15695 #, c-format msgid "\"%s\" is not a composite type" msgstr "«%s» no es un tipo compuesto" -#: commands/tablecmds.c:15668 +#: commands/tablecmds.c:15727 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "«%s» no es una tabla, vista, vista materializada, secuencia o tabla foránea" -#: commands/tablecmds.c:15703 +#: commands/tablecmds.c:15762 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "estrategia de particionamiento «%s» no reconocida" -#: commands/tablecmds.c:15711 +#: commands/tablecmds.c:15770 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "no se puede usar la estrategia de particionamiento «list» con más de una columna" -#: commands/tablecmds.c:15777 +#: commands/tablecmds.c:15836 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "la columna «%s» nombrada en llave de particionamiento no existe" -#: commands/tablecmds.c:15785 +#: commands/tablecmds.c:15844 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "no se puede usar la columna de sistema «%s» en llave de particionamiento" -#: commands/tablecmds.c:15796 commands/tablecmds.c:15910 +#: commands/tablecmds.c:15855 commands/tablecmds.c:15969 #, c-format msgid "cannot use generated column in partition key" msgstr "no se puede usar una columna generada en llave de particionamiento" -#: commands/tablecmds.c:15797 commands/tablecmds.c:15911 commands/trigger.c:641 +#: commands/tablecmds.c:15856 commands/tablecmds.c:15970 commands/trigger.c:641 #: rewrite/rewriteHandler.c:829 rewrite/rewriteHandler.c:846 #, c-format msgid "Column \"%s\" is a generated column." msgstr "La columna «%s» es una columna generada." -#: commands/tablecmds.c:15873 +#: commands/tablecmds.c:15932 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "las funciones utilizadas en expresiones de la llave de particionamiento deben estar marcadas IMMUTABLE" -#: commands/tablecmds.c:15893 +#: commands/tablecmds.c:15952 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "las expresiones en la llave de particionamiento no pueden contener referencias a columnas de sistema" -#: commands/tablecmds.c:15923 +#: commands/tablecmds.c:15982 #, c-format msgid "cannot use constant expression as partition key" msgstr "no se pueden usar expresiones constantes como llave de particionamiento" -#: commands/tablecmds.c:15944 +#: commands/tablecmds.c:16003 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de particionamiento" -#: commands/tablecmds.c:15979 +#: commands/tablecmds.c:16038 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "Debe especificar una clase de operadores hash, o definir una clase de operadores por omisión para hash para el tipo de datos." -#: commands/tablecmds.c:15985 +#: commands/tablecmds.c:16044 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "Debe especificar una clase de operadores btree, o definir una clase de operadores por omisión para btree para el tipo de datos." -#: commands/tablecmds.c:16130 +#: commands/tablecmds.c:16189 #, c-format msgid "partition constraint for table \"%s\" is implied by existing constraints" msgstr "la restricción de partición para la tabla \"%s\" está implícita en las restricciones existentes" -#: commands/tablecmds.c:16134 partitioning/partbounds.c:3131 -#: partitioning/partbounds.c:3182 +#: commands/tablecmds.c:16193 partitioning/partbounds.c:3129 +#: partitioning/partbounds.c:3180 #, c-format msgid "updated partition constraint for default partition \"%s\" is implied by existing constraints" msgstr "la restricción de partición actualizada para la partición por omisión \"%s\" está implícita en las restricciones existentes" -#: commands/tablecmds.c:16233 +#: commands/tablecmds.c:16292 #, c-format msgid "\"%s\" is already a partition" msgstr "«%s» ya es una partición" -#: commands/tablecmds.c:16239 +#: commands/tablecmds.c:16298 #, c-format msgid "cannot attach a typed table as partition" msgstr "no puede adjuntar tabla tipada como partición" -#: commands/tablecmds.c:16255 +#: commands/tablecmds.c:16314 #, c-format msgid "cannot attach inheritance child as partition" msgstr "no puede adjuntar hija de herencia como partición" -#: commands/tablecmds.c:16269 +#: commands/tablecmds.c:16328 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "no puede adjuntar ancestro de herencia como partición" -#: commands/tablecmds.c:16303 +#: commands/tablecmds.c:16362 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "no se puede adjuntar una relación temporal como partición de la relación permanente «%s»" -#: commands/tablecmds.c:16311 +#: commands/tablecmds.c:16370 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "no se puede adjuntar una relación permanente como partición de la relación temporal «%s»" -#: commands/tablecmds.c:16319 +#: commands/tablecmds.c:16378 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "no se puede adjuntar como partición de una relación temporal de otra sesión" -#: commands/tablecmds.c:16326 +#: commands/tablecmds.c:16385 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "no se adjuntar una relación temporal de otra sesión como partición" -#: commands/tablecmds.c:16346 +#: commands/tablecmds.c:16405 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "la tabla «%s» contiene la columna «%s» no encontrada en el padre «%s»" -#: commands/tablecmds.c:16349 +#: commands/tablecmds.c:16408 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "La nueva partición sólo puede contener las columnas presentes en el padre." -#: commands/tablecmds.c:16361 +#: commands/tablecmds.c:16420 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "el trigger «%s» impide a la tabla «%s» devenir partición" -#: commands/tablecmds.c:16363 commands/trigger.c:447 +#: commands/tablecmds.c:16422 commands/trigger.c:447 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "los triggers ROW con tablas de transición no están soportados en particiones" -#: commands/tablecmds.c:16526 +#: commands/tablecmds.c:16585 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "no se puede adjuntar la tabla foránea «%s» como partición de la tabla particionada «%s»" -#: commands/tablecmds.c:16529 +#: commands/tablecmds.c:16588 #, c-format msgid "Table \"%s\" contains unique indexes." msgstr "La tabla «%s» contiene índices únicos." -#: commands/tablecmds.c:17175 commands/tablecmds.c:17194 -#: commands/tablecmds.c:17214 commands/tablecmds.c:17233 -#: commands/tablecmds.c:17275 +#: commands/tablecmds.c:17234 commands/tablecmds.c:17254 +#: commands/tablecmds.c:17274 commands/tablecmds.c:17293 +#: commands/tablecmds.c:17335 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "no se puede adjuntar el índice «%s» como partición del índice «%s»" -#: commands/tablecmds.c:17178 +#: commands/tablecmds.c:17237 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "El índice «%s» ya está adjunto a otro índice." -#: commands/tablecmds.c:17197 +#: commands/tablecmds.c:17257 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "El índice «%s» no es un índice en una partición de la tabla «%s»." -#: commands/tablecmds.c:17217 +#: commands/tablecmds.c:17277 #, c-format msgid "The index definitions do not match." msgstr "Las definiciones de los índices no coinciden." -#: commands/tablecmds.c:17236 +#: commands/tablecmds.c:17296 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "El índice «%s» pertenece a una restricción en la tabla «%s», pero no existe una restricción para el índice «%s»." -#: commands/tablecmds.c:17278 +#: commands/tablecmds.c:17338 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "Otro índice ya está adjunto para la partición «%s»." #: commands/tablespace.c:162 commands/tablespace.c:179 #: commands/tablespace.c:190 commands/tablespace.c:198 -#: commands/tablespace.c:638 replication/slot.c:1288 storage/file/copydir.c:47 +#: commands/tablespace.c:638 replication/slot.c:1373 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "no se pudo crear el directorio «%s»: %m" @@ -10370,7 +10313,7 @@ msgstr "el tablespace «%s» ya existe" #: commands/tablespace.c:442 commands/tablespace.c:948 #: commands/tablespace.c:1037 commands/tablespace.c:1106 -#: commands/tablespace.c:1250 commands/tablespace.c:1450 +#: commands/tablespace.c:1252 commands/tablespace.c:1455 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "no existe el tablespace «%s»" @@ -10406,8 +10349,8 @@ msgid "directory \"%s\" already in use as a tablespace" msgstr "el directorio «%s» ya está siendo usado como tablespace" #: commands/tablespace.c:757 commands/tablespace.c:770 -#: commands/tablespace.c:806 commands/tablespace.c:898 storage/file/fd.c:3100 -#: storage/file/fd.c:3440 +#: commands/tablespace.c:806 commands/tablespace.c:898 storage/file/fd.c:3108 +#: storage/file/fd.c:3448 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "no se pudo eliminar el directorio «%s»: %m" @@ -10427,12 +10370,12 @@ msgstr "«%s» no es un directorio o enlace simbólico" msgid "Tablespace \"%s\" does not exist." msgstr "No existe el tablespace «%s»." -#: commands/tablespace.c:1549 +#: commands/tablespace.c:1554 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "algunos directorios para el tablespace %u no pudieron eliminarse" -#: commands/tablespace.c:1551 +#: commands/tablespace.c:1556 #, c-format msgid "You can remove the directories manually if necessary." msgstr "Puede eliminar los directorios manualmente, si es necesario." @@ -10642,17 +10585,17 @@ msgstr "un trigger BEFORE STATEMENT no puede retornar un valor" #: commands/trigger.c:2250 #, c-format msgid "moving row to another partition during a BEFORE FOR EACH ROW trigger is not supported" -msgstr "" +msgstr "mover registros a otra partición durante un trigger BEFORE FOR EACH ROW no está soportado" #: commands/trigger.c:2251 commands/trigger.c:2755 #, c-format msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." -msgstr "" +msgstr "Antes de ejecutar el trigger «%s», la fila iba a estar en la partición «%s.%s»." #: commands/trigger.c:2754 #, c-format msgid "moving row to another partition during a BEFORE trigger is not supported" -msgstr "" +msgstr "mover registros a otra partición durante un trigger BEFORE no está soportado" #: commands/trigger.c:2996 executor/nodeModifyTable.c:1380 #: executor/nodeModifyTable.c:1449 @@ -10786,316 +10729,321 @@ msgstr "el mapeo para el tipo de elemento «%s» no existe, omitiendo" msgid "invalid parameter list format: \"%s\"" msgstr "el formato de la lista de parámetros no es válido: «%s»" -#: commands/typecmds.c:205 +#: commands/typecmds.c:206 #, c-format msgid "must be superuser to create a base type" msgstr "debe ser superusuario para crear un tipo base" -#: commands/typecmds.c:263 +#: commands/typecmds.c:264 #, c-format msgid "Create the type as a shell type, then create its I/O functions, then do a full CREATE TYPE." -msgstr "" +msgstr "Cree el tipo como un tipo inconcluso, luego cree sus funciones de I/O, luego haga un CREATE TYPE completo." -#: commands/typecmds.c:313 commands/typecmds.c:1393 commands/typecmds.c:3809 +#: commands/typecmds.c:314 commands/typecmds.c:1394 commands/typecmds.c:3832 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "el atributo de tipo «%s» no es reconocido" -#: commands/typecmds.c:369 +#: commands/typecmds.c:370 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "la categoría de tipo «%s» no es válida: debe ser ASCII simple" -#: commands/typecmds.c:388 +#: commands/typecmds.c:389 #, c-format msgid "array element type cannot be %s" msgstr "el tipo de elemento de array no puede ser %s" -#: commands/typecmds.c:420 +#: commands/typecmds.c:421 #, c-format msgid "alignment \"%s\" not recognized" msgstr "el alineamiento «%s» no es reconocido" -#: commands/typecmds.c:437 commands/typecmds.c:3695 +#: commands/typecmds.c:438 commands/typecmds.c:3718 #, c-format msgid "storage \"%s\" not recognized" msgstr "el almacenamiento «%s» no es reconocido" -#: commands/typecmds.c:448 +#: commands/typecmds.c:449 #, c-format msgid "type input function must be specified" msgstr "debe especificarse la función de ingreso del tipo" -#: commands/typecmds.c:452 +#: commands/typecmds.c:453 #, c-format msgid "type output function must be specified" msgstr "debe especificarse la función de salida de tipo" -#: commands/typecmds.c:457 +#: commands/typecmds.c:458 #, c-format msgid "type modifier output function is useless without a type modifier input function" msgstr "la función de salida de modificadores de tipo es inútil sin una función de entrada de modificadores de tipo" -#: commands/typecmds.c:744 +#: commands/typecmds.c:745 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "«%s» no es un tipo de dato base válido para un dominio" -#: commands/typecmds.c:836 +#: commands/typecmds.c:837 #, c-format msgid "multiple default expressions" msgstr "múltiples expresiones default" -#: commands/typecmds.c:899 commands/typecmds.c:908 +#: commands/typecmds.c:900 commands/typecmds.c:909 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "las restricciones NULL/NOT NULL no coinciden" -#: commands/typecmds.c:924 +#: commands/typecmds.c:925 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "las restricciones «check» en dominios no pueden ser marcadas NO INHERIT" -#: commands/typecmds.c:933 commands/typecmds.c:2513 +#: commands/typecmds.c:934 commands/typecmds.c:2536 #, c-format msgid "unique constraints not possible for domains" msgstr "no se pueden poner restricciones de unicidad a un dominio" -#: commands/typecmds.c:939 commands/typecmds.c:2519 +#: commands/typecmds.c:940 commands/typecmds.c:2542 #, c-format msgid "primary key constraints not possible for domains" msgstr "no se pueden poner restricciones de llave primaria a un dominio" -#: commands/typecmds.c:945 commands/typecmds.c:2525 +#: commands/typecmds.c:946 commands/typecmds.c:2548 #, c-format msgid "exclusion constraints not possible for domains" msgstr "las restricciones de exclusión no son posibles para los dominios" -#: commands/typecmds.c:951 commands/typecmds.c:2531 +#: commands/typecmds.c:952 commands/typecmds.c:2554 #, c-format msgid "foreign key constraints not possible for domains" msgstr "no se pueden poner restricciones de llave foránea a un dominio" -#: commands/typecmds.c:960 commands/typecmds.c:2540 +#: commands/typecmds.c:961 commands/typecmds.c:2563 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "no se puede especificar la postergabilidad de las restricciones a un dominio" -#: commands/typecmds.c:1270 utils/cache/typcache.c:2430 +#: commands/typecmds.c:1271 utils/cache/typcache.c:2430 #, c-format msgid "%s is not an enum" msgstr "%s no es un enum" -#: commands/typecmds.c:1401 +#: commands/typecmds.c:1402 #, c-format msgid "type attribute \"subtype\" is required" msgstr "el atributo de tipo «subtype» es obligatorio" -#: commands/typecmds.c:1406 +#: commands/typecmds.c:1407 #, c-format msgid "range subtype cannot be %s" msgstr "el subtipo de rango no puede ser %s" -#: commands/typecmds.c:1425 +#: commands/typecmds.c:1426 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "se especificó un ordenamiento (collation) al rango, pero el subtipo no soporta ordenamiento" -#: commands/typecmds.c:1435 -#, fuzzy, c-format -#| msgid "range canonical function %s must return range type" +#: commands/typecmds.c:1436 +#, c-format msgid "cannot specify a canonical function without a pre-created shell type" -msgstr "la función canónica %s del rango debe retornar tipo de rango" +msgstr "no se puede especificar una función canónica sin antes crear un tipo inconcluso" -#: commands/typecmds.c:1436 +#: commands/typecmds.c:1437 #, c-format msgid "Create the type as a shell type, then create its canonicalization function, then do a full CREATE TYPE." -msgstr "" +msgstr "Cree el tipo como un tipo inconcluso, luego cree su función de canonicalización, luego haga un CREATE TYPE completo." + +#: commands/typecmds.c:1648 +#, c-format +msgid "type input function %s has multiple matches" +msgstr "la función de entrada %s del tipo tiene múltiples coincidencias" -#: commands/typecmds.c:1654 +#: commands/typecmds.c:1666 #, c-format msgid "type input function %s must return type %s" msgstr "la función de entrada %s del tipo debe retornar %s" -#: commands/typecmds.c:1670 +#: commands/typecmds.c:1682 #, c-format msgid "type input function %s should not be volatile" msgstr "la función de entrada %s no debe ser volatile" -#: commands/typecmds.c:1698 +#: commands/typecmds.c:1710 #, c-format msgid "type output function %s must return type %s" msgstr "la función de salida %s del tipo debe retornar %s" -#: commands/typecmds.c:1705 +#: commands/typecmds.c:1717 #, c-format msgid "type output function %s should not be volatile" msgstr "la función de salida %s no debe ser volatile" -#: commands/typecmds.c:1741 +#: commands/typecmds.c:1746 +#, c-format +msgid "type receive function %s has multiple matches" +msgstr "la función de recepción %s del tipo tiene múltiples coincidencias" + +#: commands/typecmds.c:1764 #, c-format msgid "type receive function %s must return type %s" msgstr "la función de recepción %s del tipo debe retornar %s" -#: commands/typecmds.c:1748 +#: commands/typecmds.c:1771 #, c-format msgid "type receive function %s should not be volatile" msgstr "la función «receive» %s del tipo no debe ser volatile" -#: commands/typecmds.c:1776 +#: commands/typecmds.c:1799 #, c-format msgid "type send function %s must return type %s" msgstr "la función «send» %s del tipo debe retornar %s" -#: commands/typecmds.c:1783 +#: commands/typecmds.c:1806 #, c-format msgid "type send function %s should not be volatile" msgstr "la función «send» %s no debe ser volatile" -#: commands/typecmds.c:1810 +#: commands/typecmds.c:1833 #, c-format msgid "typmod_in function %s must return type %s" msgstr "la función typmod_in %s debe retornar tipo %s" -#: commands/typecmds.c:1817 +#: commands/typecmds.c:1840 #, c-format msgid "type modifier input function %s should not be volatile" msgstr "la función de modificadores de tipo %s no debe ser volatile" -#: commands/typecmds.c:1844 +#: commands/typecmds.c:1867 #, c-format msgid "typmod_out function %s must return type %s" msgstr "la función typmod_out %s debe retornar tipo %s" -#: commands/typecmds.c:1851 +#: commands/typecmds.c:1874 #, c-format msgid "type modifier output function %s should not be volatile" msgstr "la función de salida de modificadores de tipo %s no debe ser volatile" -#: commands/typecmds.c:1878 +#: commands/typecmds.c:1901 #, c-format msgid "type analyze function %s must return type %s" msgstr "la función de análisis %s del tipo debe retornar %s" -#: commands/typecmds.c:1924 +#: commands/typecmds.c:1947 #, c-format msgid "You must specify an operator class for the range type or define a default operator class for the subtype." msgstr "Debe especificar una clase de operadores para el tipo de rango, o definir una clase de operadores por omisión para el subtipo." -#: commands/typecmds.c:1955 +#: commands/typecmds.c:1978 #, c-format msgid "range canonical function %s must return range type" msgstr "la función canónica %s del rango debe retornar tipo de rango" -#: commands/typecmds.c:1961 +#: commands/typecmds.c:1984 #, c-format msgid "range canonical function %s must be immutable" msgstr "la función canónica %s del rango debe ser inmutable" -#: commands/typecmds.c:1997 +#: commands/typecmds.c:2020 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "la función «diff» de subtipo, %s, debe retornar tipo %s" -#: commands/typecmds.c:2004 +#: commands/typecmds.c:2027 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "la función «diff» de subtipo, %s, debe ser inmutable" -#: commands/typecmds.c:2031 +#: commands/typecmds.c:2054 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "el valor de OID de pg_type no se definió en modo de actualización binaria" -#: commands/typecmds.c:2329 +#: commands/typecmds.c:2352 #, c-format msgid "column \"%s\" of table \"%s\" contains null values" msgstr "la columna «%s» de la tabla «%s» contiene valores null" -#: commands/typecmds.c:2442 commands/typecmds.c:2644 +#: commands/typecmds.c:2465 commands/typecmds.c:2667 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "no existe la restricción «%s» en el dominio «%s»" -#: commands/typecmds.c:2446 +#: commands/typecmds.c:2469 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "no existe la restricción «%s» en el dominio «%s», omitiendo" -#: commands/typecmds.c:2651 +#: commands/typecmds.c:2674 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "la restricción «%s» en el dominio «%s» no es una restricción «check»" -#: commands/typecmds.c:2757 +#: commands/typecmds.c:2780 #, c-format msgid "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "la columna «%s» de la relación «%s» contiene valores que violan la nueva restricción" -#: commands/typecmds.c:2986 commands/typecmds.c:3184 commands/typecmds.c:3266 -#: commands/typecmds.c:3453 +#: commands/typecmds.c:3009 commands/typecmds.c:3207 commands/typecmds.c:3289 +#: commands/typecmds.c:3476 #, c-format msgid "%s is not a domain" msgstr "%s no es un dominio" -#: commands/typecmds.c:3018 +#: commands/typecmds.c:3041 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "el dominio «%2$s» ya contiene una restricción llamada «%1$s»" -#: commands/typecmds.c:3069 +#: commands/typecmds.c:3092 #, c-format msgid "cannot use table references in domain check constraint" msgstr "no se pueden usar referencias a tablas en restricción «check» para un dominio" -#: commands/typecmds.c:3196 commands/typecmds.c:3278 commands/typecmds.c:3570 +#: commands/typecmds.c:3219 commands/typecmds.c:3301 commands/typecmds.c:3593 #, c-format msgid "%s is a table's row type" msgstr "%s es el tipo de registro de una tabla" -#: commands/typecmds.c:3198 commands/typecmds.c:3280 commands/typecmds.c:3572 +#: commands/typecmds.c:3221 commands/typecmds.c:3303 commands/typecmds.c:3595 #, c-format msgid "Use ALTER TABLE instead." msgstr "Considere usar ALTER TABLE." -#: commands/typecmds.c:3205 commands/typecmds.c:3287 commands/typecmds.c:3485 +#: commands/typecmds.c:3228 commands/typecmds.c:3310 commands/typecmds.c:3508 #, c-format msgid "cannot alter array type %s" msgstr "no se puede alterar el tipo de array «%s»" -#: commands/typecmds.c:3207 commands/typecmds.c:3289 commands/typecmds.c:3487 +#: commands/typecmds.c:3230 commands/typecmds.c:3312 commands/typecmds.c:3510 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "Puede alterar el tipo %s, lo cual alterará el tipo de array también." -#: commands/typecmds.c:3555 +#: commands/typecmds.c:3578 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "ya existe un tipo llamado «%s» en el esquema «%s»" -#: commands/typecmds.c:3723 -#, fuzzy, c-format -#| msgid "cannot cast type %s to %s" +#: commands/typecmds.c:3746 +#, c-format msgid "cannot change type's storage to PLAIN" -msgstr "no se puede convertir el tipo %s a %s" +msgstr "no se puede cambiar el almacenamiento del tipo a PLAIN" -#: commands/typecmds.c:3804 -#, fuzzy, c-format -#| msgid "operator attribute \"%s\" cannot be changed" +#: commands/typecmds.c:3827 +#, c-format msgid "type attribute \"%s\" cannot be changed" -msgstr "el atributo de operador «%s» no puede ser cambiado" +msgstr "el atributo de tipo «%s» no puede ser cambiado" -#: commands/typecmds.c:3822 -#, fuzzy, c-format -#| msgid "must be superuser to create a base type" +#: commands/typecmds.c:3845 +#, c-format msgid "must be superuser to alter a type" -msgstr "debe ser superusuario para crear un tipo base" +msgstr "debe ser superusuario para alterar un tipo" -#: commands/typecmds.c:3843 commands/typecmds.c:3853 -#, fuzzy, c-format -#| msgid "\"%s\" is not a type" +#: commands/typecmds.c:3866 commands/typecmds.c:3876 +#, c-format msgid "%s is not a base type" -msgstr "«%s» no es un tipo" +msgstr "«%s» no es un tipo base" #: commands/user.c:140 #, c-format @@ -11123,7 +11071,7 @@ msgid "permission denied to create role" msgstr "se ha denegado el permiso para crear el rol" #: commands/user.c:325 commands/user.c:1224 commands/user.c:1231 -#: utils/adt/acl.c:5327 utils/adt/acl.c:5333 gram.y:15143 gram.y:15181 +#: utils/adt/acl.c:5327 utils/adt/acl.c:5333 gram.y:15146 gram.y:15184 #, c-format msgid "role name \"%s\" is reserved" msgstr "el nombre de rol «%s» está reservado" @@ -11282,16 +11230,14 @@ msgid "unrecognized ANALYZE option \"%s\"" msgstr "opción de ANALYZE «%s» no reconocida" #: commands/vacuum.c:151 -#, fuzzy, c-format -#| msgid "-X requires a power of two value between 1 MB and 1 GB" +#, c-format msgid "parallel option requires a value between 0 and %d" -msgstr "-X require un valor potencia de dos entre 1 MB y 1 GB" +msgstr "la opción parallel requiere un valor entre 0 y %d" #: commands/vacuum.c:163 -#, fuzzy, c-format -#| msgid "remainder for hash partition must be a non-negative integer" +#, c-format msgid "parallel vacuum degree must be between 0 and %d" -msgstr "remanente en partición hash debe ser un entero no negativo" +msgstr "el grado de paralelismo de vacuum debe estar entre 0 y %d" #: commands/vacuum.c:180 #, c-format @@ -11301,7 +11247,7 @@ msgstr "opción de VACUUM «%s» no reconocida" #: commands/vacuum.c:203 #, c-format msgid "VACUUM FULL cannot be performed in parallel" -msgstr "" +msgstr "VACUUM FULL no puede ser ejecutado en paralelo" #: commands/vacuum.c:219 #, c-format @@ -11392,22 +11338,22 @@ msgstr "multixact más antiguo es demasiado antiguo" msgid "Close open transactions with multixacts soon to avoid wraparound problems." msgstr "Cierre transacciones con multixact pronto para prevenir problemas por reciclaje del contador." -#: commands/vacuum.c:1612 +#: commands/vacuum.c:1623 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "algunas bases de datos no han tenido VACUUM en más de 2 mil millones de transacciones" -#: commands/vacuum.c:1613 +#: commands/vacuum.c:1624 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "Puede haber sufrido ya problemas de pérdida de datos por reciclaje del contador de transacciones." -#: commands/vacuum.c:1771 +#: commands/vacuum.c:1784 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "omitiendo «%s»: no se puede aplicar VACUUM a objetos que no son tablas o a tablas especiales de sistema" -#: commands/variable.c:165 utils/misc/guc.c:11166 utils/misc/guc.c:11228 +#: commands/variable.c:165 utils/misc/guc.c:11156 utils/misc/guc.c:11218 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Palabra clave no reconocida: «%s»." @@ -11440,7 +11386,7 @@ msgstr "PostgreSQL no soporta segundos intercalares." #: commands/variable.c:354 #, c-format msgid "UTC timezone offset is out of range." -msgstr "desplazamiento de huso horario UTC fuera de rango" +msgstr "El desplazamiento de huso horario UTC está fuera de rango." #: commands/variable.c:494 #, c-format @@ -11525,7 +11471,7 @@ msgstr "no se puede cambiar el nombre de la columna «%s» de la vista a «%s»" #: commands/view.c:284 #, c-format msgid "Use ALTER VIEW ... RENAME COLUMN ... to change name of view column instead." -msgstr "" +msgstr "Use ALTER VIEW ... RENAME COLUMN ... para cambiar el nombre de una columna de una vista." #: commands/view.c:290 #, c-format @@ -11875,10 +11821,9 @@ msgid "Failing row contains %s." msgstr "La fila que falla contiene %s." #: executor/execMain.c:1961 -#, fuzzy, c-format -#| msgid "null value in column \"%s\" violates not-null constraint" +#, c-format msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" -msgstr "el valor null para la columna «%s» viola la restricción not null" +msgstr "el valor nulo en la columna «%s» de la relación «%s» viola la restricción de no nulo" #: executor/execMain.c:2010 #, c-format @@ -11910,12 +11855,12 @@ msgstr "el nuevo registro viola la política de seguridad de registros «%s» (e msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "el nuevo registro viola la política de seguridad de registros (expresión USING) para la tabla «%s»" -#: executor/execPartition.c:345 +#: executor/execPartition.c:341 #, c-format msgid "no partition of relation \"%s\" found for row" msgstr "no se encontró una partición de «%s» para el registro" -#: executor/execPartition.c:348 +#: executor/execPartition.c:344 #, c-format msgid "Partition key of the failing row contains %s." msgstr "La llave de particionamiento de la fila que falla contiene %s." @@ -12104,17 +12049,17 @@ msgstr "La sentencia final retorna muy pocas columnas." msgid "return type %s is not supported for SQL functions" msgstr "el tipo de retorno %s no es soportado en funciones SQL" -#: executor/nodeAgg.c:3012 executor/nodeAgg.c:3021 executor/nodeAgg.c:3033 +#: executor/nodeAgg.c:3076 executor/nodeAgg.c:3085 executor/nodeAgg.c:3097 #, c-format msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" -msgstr "" +msgstr "EOF inesperado para la cinta %d: se requerían %zu bytes, se leyeron %zu bytes" -#: executor/nodeAgg.c:3948 parser/parse_agg.c:655 parser/parse_agg.c:685 +#: executor/nodeAgg.c:4022 parser/parse_agg.c:655 parser/parse_agg.c:685 #, c-format msgid "aggregate function calls cannot be nested" msgstr "no se pueden anidar llamadas a funciones de agregación" -#: executor/nodeAgg.c:4156 executor/nodeWindowAgg.c:2836 +#: executor/nodeAgg.c:4230 executor/nodeWindowAgg.c:2836 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "la función de agregación %u necesita tener tipos de entrada y transición compatibles" @@ -12126,18 +12071,13 @@ msgstr "el scan personalizado «%s» no soporta MarkPos" #: executor/nodeHashjoin.c:1046 executor/nodeHashjoin.c:1076 #, c-format -msgid "could not rewind hash-join temporary file: %m" -msgstr "falló la búsqueda en el archivo temporal de hash-join: %m" +msgid "could not rewind hash-join temporary file" +msgstr "no se puede rebobinar el archivo temporal del hash-join" -#: executor/nodeHashjoin.c:1235 executor/nodeHashjoin.c:1241 +#: executor/nodeHashjoin.c:1272 executor/nodeHashjoin.c:1283 #, c-format -msgid "could not write to hash-join temporary file: %m" -msgstr "no se pudo escribir al archivo temporal de hash-join: %m" - -#: executor/nodeHashjoin.c:1282 executor/nodeHashjoin.c:1292 -#, c-format -msgid "could not read from hash-join temporary file: %m" -msgstr "no se pudo leer el archivo temporal de hash-join: %m" +msgid "could not read from hash-join temporary file: read only %zu of %zu bytes" +msgstr "no se pudo leer el archivo temporal de hash-join: se leyeron sólo %zu de %zu bytes" #: executor/nodeIndexonlyscan.c:242 #, c-format @@ -12374,16 +12314,14 @@ msgid "client selected an invalid SASL authentication mechanism" msgstr "cliente eligió un mecanismo de autentificación SASL no válido" #: libpq/auth-scram.c:269 libpq/auth-scram.c:509 libpq/auth-scram.c:520 -#, fuzzy, c-format -#| msgid "invalid SCRAM verifier for user \"%s\"" +#, c-format msgid "invalid SCRAM secret for user \"%s\"" -msgstr "verificador SCRAM no válido para el usuario «%s»" +msgstr "el secreto SCRAM para el usuario «%s» no es válido" #: libpq/auth-scram.c:280 -#, fuzzy, c-format -#| msgid "User \"%s\" does not have a valid SCRAM verifier." +#, c-format msgid "User \"%s\" does not have a valid SCRAM secret." -msgstr "Usuario «%s» no tiene un verificador SCRAM válido." +msgstr "El usuario «%s» no tiene un secreto SCRAM válido." #: libpq/auth-scram.c:358 libpq/auth-scram.c:363 libpq/auth-scram.c:693 #: libpq/auth-scram.c:701 libpq/auth-scram.c:806 libpq/auth-scram.c:819 @@ -12431,10 +12369,9 @@ msgid "Expected character \"=\" for attribute \"%c\"." msgstr "Se esperaba el carácter «=» para el atributo «%c»." #: libpq/auth-scram.c:807 -#, fuzzy, c-format -#| msgid "Attribute expected, but found invalid character \"%s\"." +#, c-format msgid "Attribute expected, but found end of string." -msgstr "Se esperaba un atributo, se encontró el carácter no válido «%s»." +msgstr "Se esperaba un atributo, se encontró el fin de la cadena." #: libpq/auth-scram.c:820 #, c-format @@ -12502,10 +12439,9 @@ msgid "could not generate random nonce" msgstr "no se pudo generar un «nonce» aleatorio" #: libpq/auth-scram.c:1179 -#, fuzzy, c-format -#| msgid "could not generate random nonce" +#, c-format msgid "could not encode random nonce" -msgstr "no se pudo generar un «nonce» aleatorio" +msgstr "no se pudo codificar un «nonce» aleatorio" #: libpq/auth-scram.c:1285 #, c-format @@ -13107,12 +13043,12 @@ msgstr "el descriptor de objeto grande %d no fue abierto para escritura" #: libpq/be-fsstubs.c:212 #, c-format msgid "lo_lseek result out of range for large-object descriptor %d" -msgstr "el resultado de lo_lseek está fuera de rango para el descriptor de objeto grande %d" +msgstr "resultado de lo_lseek fuera de rango para el descriptor de objeto grande %d" #: libpq/be-fsstubs.c:285 #, c-format msgid "lo_tell result out of range for large-object descriptor %d" -msgstr "el resultado de lo_tell está fuera de rango para el descriptor de objeto grande %d" +msgstr "resultado de lo_tell fuera de rango para el descriptor de objeto grande %d" #: libpq/be-fsstubs.c:432 #, c-format @@ -13139,8 +13075,8 @@ msgstr "no se pudo escribir el archivo del servidor «%s»: %m" msgid "large object read request is too large" msgstr "el tamaño de petición de lectura de objeto grande es muy grande" -#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:229 utils/adt/genfile.c:268 -#: utils/adt/genfile.c:304 +#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:265 utils/adt/genfile.c:304 +#: utils/adt/genfile.c:340 #, c-format msgid "requested length cannot be negative" msgstr "el tamaño solicitado no puede ser negativo" @@ -13228,170 +13164,172 @@ msgstr "no se pudo aceptar un contexto de seguridad GSSAPI" msgid "GSSAPI size check error" msgstr "error de verificación de tamaño GSSAPI" -#: libpq/be-secure-openssl.c:111 +#: libpq/be-secure-openssl.c:112 #, c-format msgid "could not create SSL context: %s" msgstr "no se pudo crear un contexto SSL: %s" -#: libpq/be-secure-openssl.c:137 +#: libpq/be-secure-openssl.c:138 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "no se pudo cargar el archivo de certificado de servidor «%s»: %s" -#: libpq/be-secure-openssl.c:157 +#: libpq/be-secure-openssl.c:158 #, c-format msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "el archivo de clave privada \"%s\" no se puede volver a cargar porque requiere una contraseña" -#: libpq/be-secure-openssl.c:162 +#: libpq/be-secure-openssl.c:163 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "no se pudo cargar el archivo de la llave privada «%s»: %s" -#: libpq/be-secure-openssl.c:171 +#: libpq/be-secure-openssl.c:172 #, c-format msgid "check of private key failed: %s" msgstr "falló la revisión de la llave privada: %s" -#: libpq/be-secure-openssl.c:183 libpq/be-secure-openssl.c:205 -#, fuzzy, c-format -#| msgid "%s setting %s not supported by this build" +#: libpq/be-secure-openssl.c:184 libpq/be-secure-openssl.c:206 +#, c-format msgid "\"%s\" setting \"%s\" not supported by this build" -msgstr "el valor de %s %s no está soportado en esta instalación" +msgstr "el valor «%2$s» para la opción «%1$s» no está soportado en este servidor" -#: libpq/be-secure-openssl.c:193 +#: libpq/be-secure-openssl.c:194 #, c-format msgid "could not set minimum SSL protocol version" msgstr "no se pudo definir la versión mínima de protocolo SSL" -#: libpq/be-secure-openssl.c:215 +#: libpq/be-secure-openssl.c:216 #, c-format msgid "could not set maximum SSL protocol version" msgstr "no se pudo definir la versión máxima de protocolo SSL" -#: libpq/be-secure-openssl.c:231 -#, fuzzy, c-format -#| msgid "could not set LDAP protocol version: %s" +#: libpq/be-secure-openssl.c:232 +#, c-format msgid "could not set SSL protocol version range" -msgstr "no se pudo definir la versión de protocolo LDAP: %s" +msgstr "no se pudo definir el rango de versión de protocolo SSL" -#: libpq/be-secure-openssl.c:232 -#, fuzzy, c-format -#| msgid "\"%s\" is not an index for table \"%s\"" +#: libpq/be-secure-openssl.c:233 +#, c-format msgid "\"%s\" cannot be higher than \"%s\"" -msgstr "«%s» no es un índice de la tabla «%s»" +msgstr "«%s» no puede ser más alto que «%s»" -#: libpq/be-secure-openssl.c:256 +#: libpq/be-secure-openssl.c:257 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "no se pudo establecer la lista de cifrado (no hay cifradores disponibles)" -#: libpq/be-secure-openssl.c:274 +#: libpq/be-secure-openssl.c:275 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "no se pudo cargar el archivo del certificado raíz «%s»: %s" -#: libpq/be-secure-openssl.c:301 +#: libpq/be-secure-openssl.c:302 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "no se pudo cargar el archivo de lista de revocación de certificados SSL «%s»: %s" -#: libpq/be-secure-openssl.c:376 +#: libpq/be-secure-openssl.c:378 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "no se pudo inicializar la conexión SSL: el contexto SSL no está instalado" -#: libpq/be-secure-openssl.c:384 +#: libpq/be-secure-openssl.c:386 #, c-format msgid "could not initialize SSL connection: %s" msgstr "no se pudo inicializar la conexión SSL: %s" -#: libpq/be-secure-openssl.c:392 +#: libpq/be-secure-openssl.c:394 #, c-format msgid "could not set SSL socket: %s" msgstr "no se definir un socket SSL: %s" -#: libpq/be-secure-openssl.c:447 +#: libpq/be-secure-openssl.c:449 #, c-format msgid "could not accept SSL connection: %m" msgstr "no se pudo aceptar una conexión SSL: %m" -#: libpq/be-secure-openssl.c:451 libpq/be-secure-openssl.c:462 +#: libpq/be-secure-openssl.c:453 libpq/be-secure-openssl.c:506 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "no se pudo aceptar una conexión SSL: se detectó EOF" -#: libpq/be-secure-openssl.c:456 +#: libpq/be-secure-openssl.c:492 #, c-format msgid "could not accept SSL connection: %s" msgstr "no se pudo aceptar una conexión SSL: %s" -#: libpq/be-secure-openssl.c:467 libpq/be-secure-openssl.c:598 -#: libpq/be-secure-openssl.c:662 +#: libpq/be-secure-openssl.c:495 +#, c-format +msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." +msgstr "Esto puede indicar que el cliente no soporta ninguna versión del protocolo SSL entre %s and %s." + +#: libpq/be-secure-openssl.c:511 libpq/be-secure-openssl.c:642 +#: libpq/be-secure-openssl.c:706 #, c-format msgid "unrecognized SSL error code: %d" msgstr "código de error SSL no reconocido: %d" -#: libpq/be-secure-openssl.c:509 +#: libpq/be-secure-openssl.c:553 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "el «common name» del certificado SSL contiene un carácter null" -#: libpq/be-secure-openssl.c:587 libpq/be-secure-openssl.c:646 +#: libpq/be-secure-openssl.c:631 libpq/be-secure-openssl.c:690 #, c-format msgid "SSL error: %s" msgstr "error de SSL: %s" -#: libpq/be-secure-openssl.c:827 +#: libpq/be-secure-openssl.c:871 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "no se pudo abrir el archivo de parámetros DH «%s»: %m" -#: libpq/be-secure-openssl.c:839 +#: libpq/be-secure-openssl.c:883 #, c-format msgid "could not load DH parameters file: %s" msgstr "no se pudo cargar el archivo de parámetros DH: %s" -#: libpq/be-secure-openssl.c:849 +#: libpq/be-secure-openssl.c:893 #, c-format msgid "invalid DH parameters: %s" msgstr "parámetros DH no válidos: %s" -#: libpq/be-secure-openssl.c:857 +#: libpq/be-secure-openssl.c:901 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "parámetros DH no válidos: p no es primo" -#: libpq/be-secure-openssl.c:865 +#: libpq/be-secure-openssl.c:909 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "parámetros DH no válidos: no hay generador apropiado o primo seguro" -#: libpq/be-secure-openssl.c:1020 +#: libpq/be-secure-openssl.c:1065 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: no se pudo cargar los parámetros DH" -#: libpq/be-secure-openssl.c:1028 +#: libpq/be-secure-openssl.c:1073 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: no se pudo definir los parámetros DH: %s" -#: libpq/be-secure-openssl.c:1055 +#: libpq/be-secure-openssl.c:1100 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: nombre de curva no reconocida: %s" -#: libpq/be-secure-openssl.c:1064 +#: libpq/be-secure-openssl.c:1109 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: no se pudo crear la llave" -#: libpq/be-secure-openssl.c:1092 +#: libpq/be-secure-openssl.c:1137 msgid "no SSL error reported" msgstr "código de error SSL no reportado" -#: libpq/be-secure-openssl.c:1096 +#: libpq/be-secure-openssl.c:1141 #, c-format msgid "SSL error code %lu" msgstr "código de error SSL %lu" @@ -13695,6 +13633,7 @@ msgstr "clientcert sólo puede ser configurado en líneas «hostssl»" #: libpq/hba.c:1725 #, c-format +#| msgid "clientcert cannot be set to \"no-verify\" when using \"cert\" authentication" msgid "clientcert can not be set to \"no-verify\" when using \"cert\" authentication" msgstr "clientcert no puede establecerse a «no-verify» cuando se emplea autentificación «cert»" @@ -14217,14 +14156,7 @@ msgid " -x NUM internal use\n" msgstr " -x NUM uso interno\n" #: main/main.c:359 -#, fuzzy, c-format -#| msgid "" -#| "\n" -#| "Please read the documentation for the complete list of run-time\n" -#| "configuration settings and how to set them on the command line or in\n" -#| "the configuration file.\n" -#| "\n" -#| "Report bugs to .\n" +#, c-format msgid "" "\n" "Please read the documentation for the complete list of run-time\n" @@ -14234,16 +14166,16 @@ msgid "" "Report bugs to <%s>.\n" msgstr "" "\n" -"Por favor lea la documentación para obtener la lista completa de\n" -"parámetros de configuración y cómo definirlos en la línea de órdenes\n" -"y en el archivo de configuración.\n" +"Por favor lea la documentación para obtener la lista de parámetros de\n" +"configuración y cómo definirlos en la línea de órdenes o en el archivo\n" +"de configuración.\n" "\n" -"Reporte errores a \n" +"Reporte errores a <%s>.\n" #: main/main.c:363 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" #: main/main.c:374 #, c-format @@ -14298,16 +14230,16 @@ msgid "could not find array type for data type %s" msgstr "no se pudo encontrar un tipo de array para el tipo de dato %s" #: nodes/params.c:359 -#, fuzzy, c-format -#| msgid "invalid URI query parameter: \"%s\"\n" +#, c-format +#| msgid "portal \"%s\" with parameters: %s" msgid "extended query \"%s\" with parameters: %s" -msgstr "parámetro de URI no válido: «%s»\n" +msgstr "consulta extendida «%s» con parámetros: %s" #: nodes/params.c:362 -#, fuzzy, c-format -#| msgid "invalid URI query parameter: \"%s\"\n" +#, c-format +#| msgid "unnamed portal with parameters: %s" msgid "extended query with parameters: %s" -msgstr "parámetro de URI no válido: «%s»\n" +msgstr "consulta extendida con parámetros: %s" #: optimizer/path/joinrels.c:855 #, c-format @@ -14333,32 +14265,32 @@ msgid "could not implement GROUP BY" msgstr "no se pudo implementar GROUP BY" #: optimizer/plan/planner.c:2510 optimizer/plan/planner.c:4163 -#: optimizer/plan/planner.c:4896 optimizer/prep/prepunion.c:1045 +#: optimizer/plan/planner.c:4890 optimizer/prep/prepunion.c:1045 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "Algunos de los tipos sólo soportan hashing, mientras que otros sólo soportan ordenamiento." -#: optimizer/plan/planner.c:4895 +#: optimizer/plan/planner.c:4889 #, c-format msgid "could not implement DISTINCT" msgstr "no se pudo implementar DISTINCT" -#: optimizer/plan/planner.c:5743 +#: optimizer/plan/planner.c:5737 #, c-format msgid "could not implement window PARTITION BY" msgstr "No se pudo implementar PARTITION BY de ventana" -#: optimizer/plan/planner.c:5744 +#: optimizer/plan/planner.c:5738 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Las columnas de particionamiento de ventana deben de tipos que se puedan ordenar." -#: optimizer/plan/planner.c:5748 +#: optimizer/plan/planner.c:5742 #, c-format msgid "could not implement window ORDER BY" msgstr "no se pudo implementar ORDER BY de ventana" -#: optimizer/plan/planner.c:5749 +#: optimizer/plan/planner.c:5743 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Las columnas de ordenamiento de ventana debe ser de tipos que se puedan ordenar." @@ -14384,7 +14316,7 @@ msgstr "Todos los tipos de dato de las columnas deben ser tipos de los que se pu msgid "could not implement %s" msgstr "no se pudo implementar %s" -#: optimizer/util/clauses.c:4763 +#: optimizer/util/clauses.c:4746 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "función SQL «%s», durante expansión en línea" @@ -15040,8 +14972,9 @@ msgstr "la lista de alias de columnas para «%s» tiene demasiadas entradas" #: parser/parse_clause.c:1773 #, c-format +#| msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" msgid "row count cannot be NULL in FETCH FIRST ... WITH TIES clause" -msgstr "" +msgstr "la cantidad de registros no puede ser nula en la cláusula FETCH FIRST ... WITH TIES" #. translator: %s is name of a SQL construct, eg LIMIT #: parser/parse_clause.c:1798 @@ -15240,10 +15173,9 @@ msgid "%s types %s and %s cannot be matched" msgstr "los tipos %2$s y %3$s no son coincidentes en %1$s" #: parser/parse_coerce.c:1465 -#, fuzzy, c-format -#| msgid "%s types %s and %s cannot be matched" +#, c-format msgid "argument types %s and %s cannot be matched" -msgstr "los tipos %2$s y %3$s no son coincidentes en %1$s" +msgstr "los tipos de argumento %s y %s no pueden hacerse coincidir" #. translator: first %s is name of a SQL construct, eg CASE #: parser/parse_coerce.c:1517 @@ -15273,10 +15205,9 @@ msgid "argument declared %s is not an array but type %s" msgstr "el argumento declarado %s no es un array sino de tipo %s" #: parser/parse_coerce.c:2029 -#, fuzzy, c-format -#| msgid "arguments declared \"anyrange\" are not all alike" +#, c-format msgid "arguments declared \"anycompatiblerange\" are not all alike" -msgstr "los argumentos declarados «anyrange» no son de tipos compatibles" +msgstr "los argumentos declarados «anycompatiblerange» no son todos parecidos" #: parser/parse_coerce.c:2041 parser/parse_coerce.c:2122 #: utils/fmgr/funcapi.c:501 @@ -15285,10 +15216,9 @@ msgid "argument declared %s is not a range type but type %s" msgstr "el argumento declarado %s no es un tipo de rango sino tipo %s" #: parser/parse_coerce.c:2079 -#, fuzzy, c-format -#| msgid "cannot determine type of empty array" +#, c-format msgid "cannot determine element type of \"anyarray\" argument" -msgstr "no se puede determinar el tipo de un array vacío" +msgstr "no se puede determinar el tipo del argumento «anyarray»" #: parser/parse_coerce.c:2105 parser/parse_coerce.c:2139 #, c-format @@ -15303,51 +15233,47 @@ msgstr "no se pudo determinar el tipo polimórfico porque la entrada es de tipo #: parser/parse_coerce.c:2177 #, c-format msgid "type matched to anynonarray is an array type: %s" -msgstr "el argumento coincidente con anynonarray es un array: %s" +msgstr "el argumento emparejado con anynonarray es un array: %s" #: parser/parse_coerce.c:2187 #, c-format msgid "type matched to anyenum is not an enum type: %s" -msgstr "el tipo coincidente con anyenum no es un tipo enum: %s" +msgstr "el tipo emparejado con anyenum no es un tipo enum: %s" #: parser/parse_coerce.c:2218 parser/parse_coerce.c:2267 #: parser/parse_coerce.c:2329 parser/parse_coerce.c:2365 -#, fuzzy, c-format -#| msgid "could not determine polymorphic type because input has type %s" +#, c-format msgid "could not determine polymorphic type %s because input has type %s" -msgstr "no se pudo determinar el tipo polimórfico porque la entrada es de tipo %s" +msgstr "no se pudo determinar el tipo polimórfico %s porque la entrada es de tipo %s" #: parser/parse_coerce.c:2228 -#, fuzzy, c-format -#| msgid "Attribute \"%s\" of type %s does not match corresponding attribute of type %s." +#, c-format msgid "anycompatiblerange type %s does not match anycompatible type %s" -msgstr "El atributo «%s» de tipo %s no coincide el atributo correspondiente de tipo %s." +msgstr "el tipo anycompatiblerange %s no coincide con el tipo anycompatible %s" #: parser/parse_coerce.c:2242 -#, fuzzy, c-format -#| msgid "type matched to anynonarray is an array type: %s" +#, c-format msgid "type matched to anycompatiblenonarray is an array type: %s" -msgstr "el argumento coincidente con anynonarray es un array: %s" +msgstr "el argumento emparejado a anycompatiblenonarray es un array: %s" #: parser/parse_coerce.c:2433 -#, fuzzy, c-format -#| msgid "Attribute \"%s\" of type %s does not exist in type %s." +#, c-format msgid "A result of type %s requires at least one input of type %s." -msgstr "El atributo «%s» de tipo %s no existe en el tipo %s." +msgstr "Un resultado de tipo %s requiere al menos un argumento de tipo %s." #: parser/parse_coerce.c:2445 #, c-format msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, or anyrange." -msgstr "" +msgstr "Un resultado de tipo %s requiere al menos una entrada de tipo anyelement, anyarray, anynonarray, anyenum, o anyrange." #: parser/parse_coerce.c:2457 #, c-format msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, or anycompatiblerange." -msgstr "" +msgstr "Un resultado de tipo %s requiere al menos una entrada de tipo anycompatible, anycompatiblearray, anycompatiblenonarray, o anycompatiblerange." #: parser/parse_coerce.c:2487 msgid "A result of type internal requires at least one input of type internal." -msgstr "" +msgstr "Un resultado de tipo internal requiere al menos una entrada de tipo internal." #: parser/parse_collate.c:228 parser/parse_collate.c:475 #: parser/parse_collate.c:981 @@ -16292,360 +16218,351 @@ msgstr "los modificadores de tipo deben ser constantes simples o identificadores msgid "invalid type name \"%s\"" msgstr "el nombre de tipo «%s» no es válido" -#: parser/parse_utilcmd.c:263 +#: parser/parse_utilcmd.c:264 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "no se puede crear una tabla particionada como hija de herencia" -#: parser/parse_utilcmd.c:427 +#: parser/parse_utilcmd.c:428 #, c-format msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" msgstr "%s creará una secuencia implícita «%s» para la columna serial «%s.%s»" -#: parser/parse_utilcmd.c:558 +#: parser/parse_utilcmd.c:559 #, c-format msgid "array of serial is not implemented" msgstr "array de serial no está implementado" -#: parser/parse_utilcmd.c:636 parser/parse_utilcmd.c:648 +#: parser/parse_utilcmd.c:637 parser/parse_utilcmd.c:649 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "las declaraciones NULL/NOT NULL no son coincidentes para la columna «%s» de la tabla «%s»" -#: parser/parse_utilcmd.c:660 +#: parser/parse_utilcmd.c:661 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "múltiples valores default especificados para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:677 +#: parser/parse_utilcmd.c:678 #, c-format msgid "identity columns are not supported on typed tables" msgstr "las columnas identidad no está soportadas en tablas tipadas" -#: parser/parse_utilcmd.c:681 +#: parser/parse_utilcmd.c:682 #, c-format msgid "identity columns are not supported on partitions" msgstr "las columnas identidad no están soportadas en particiones" -#: parser/parse_utilcmd.c:690 +#: parser/parse_utilcmd.c:691 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "múltiples especificaciones de identidad para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:710 +#: parser/parse_utilcmd.c:711 #, c-format msgid "generated columns are not supported on typed tables" msgstr "las columnas generadas no están soportadas en tablas tipadas" -#: parser/parse_utilcmd.c:714 +#: parser/parse_utilcmd.c:715 #, c-format msgid "generated columns are not supported on partitions" msgstr "las columnas generadas no están soportadas en particiones" -#: parser/parse_utilcmd.c:719 +#: parser/parse_utilcmd.c:720 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "múltiples cláusulas de generación especificadas para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:737 parser/parse_utilcmd.c:852 +#: parser/parse_utilcmd.c:738 parser/parse_utilcmd.c:853 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "las restricciones de llave primaria no están soportadas en tablas foráneas" -#: parser/parse_utilcmd.c:746 parser/parse_utilcmd.c:862 +#: parser/parse_utilcmd.c:747 parser/parse_utilcmd.c:863 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "las restricciones unique no están soportadas en tablas foráneas" -#: parser/parse_utilcmd.c:791 +#: parser/parse_utilcmd.c:792 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "tanto el valor por omisión como identidad especificados para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:799 +#: parser/parse_utilcmd.c:800 #, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" msgstr "tanto el valor por omisión como expresión de generación especificados para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:807 +#: parser/parse_utilcmd.c:808 #, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" msgstr "tanto identidad como expresión de generación especificados para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:872 +#: parser/parse_utilcmd.c:873 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "las restricciones de exclusión no están soportadas en tablas foráneas" -#: parser/parse_utilcmd.c:878 +#: parser/parse_utilcmd.c:879 #, c-format msgid "exclusion constraints are not supported on partitioned tables" msgstr "las restricciones de exclusión no están soportadas en tablas particionadas" -#: parser/parse_utilcmd.c:943 +#: parser/parse_utilcmd.c:944 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE no está soportado para la creación de tablas foráneas" -#: parser/parse_utilcmd.c:1095 -#, c-format -msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." -msgstr "La expresión de generación para la columna «%s» contiene una referencia a la fila completa (whole-row) de la tabla «%s»." - -#: parser/parse_utilcmd.c:1598 parser/parse_utilcmd.c:1707 +#: parser/parse_utilcmd.c:1704 parser/parse_utilcmd.c:1813 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "El índice «%s» contiene una referencia a la fila completa (whole-row)." -#: parser/parse_utilcmd.c:2075 +#: parser/parse_utilcmd.c:2163 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "no se puede usar un índice existente en CREATE TABLE" -#: parser/parse_utilcmd.c:2095 +#: parser/parse_utilcmd.c:2183 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "el índice «%s» ya está asociado a una restricción" -#: parser/parse_utilcmd.c:2110 +#: parser/parse_utilcmd.c:2198 #, c-format msgid "index \"%s\" is not valid" msgstr "el índice «%s» no es válido" -#: parser/parse_utilcmd.c:2116 +#: parser/parse_utilcmd.c:2204 #, c-format msgid "\"%s\" is not a unique index" msgstr "«%s» no es un índice único" -#: parser/parse_utilcmd.c:2117 parser/parse_utilcmd.c:2124 -#: parser/parse_utilcmd.c:2131 parser/parse_utilcmd.c:2208 +#: parser/parse_utilcmd.c:2205 parser/parse_utilcmd.c:2212 +#: parser/parse_utilcmd.c:2219 parser/parse_utilcmd.c:2296 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "No se puede crear una restricción de llave primaria o única usando un índice así." -#: parser/parse_utilcmd.c:2123 +#: parser/parse_utilcmd.c:2211 #, c-format msgid "index \"%s\" contains expressions" msgstr "el índice «%s» contiene expresiones" -#: parser/parse_utilcmd.c:2130 +#: parser/parse_utilcmd.c:2218 #, c-format msgid "\"%s\" is a partial index" msgstr "«%s» es un índice parcial" -#: parser/parse_utilcmd.c:2142 +#: parser/parse_utilcmd.c:2230 #, c-format msgid "\"%s\" is a deferrable index" msgstr "«%s» no es un índice postergable (deferrable)" -#: parser/parse_utilcmd.c:2143 +#: parser/parse_utilcmd.c:2231 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "No se puede crear una restricción no postergable usando un índice postergable." -#: parser/parse_utilcmd.c:2207 +#: parser/parse_utilcmd.c:2295 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "el índice «%s» columna número %d no tiene comportamiento de ordenamiento por omisión" -#: parser/parse_utilcmd.c:2364 +#: parser/parse_utilcmd.c:2452 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "la columna «%s» aparece dos veces en llave primaria" -#: parser/parse_utilcmd.c:2370 +#: parser/parse_utilcmd.c:2458 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "la columna «%s» aparece dos veces en restricción unique" -#: parser/parse_utilcmd.c:2723 +#: parser/parse_utilcmd.c:2811 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "las expresiones y predicados de índice sólo pueden referirse a la tabla en indexación" -#: parser/parse_utilcmd.c:2769 +#: parser/parse_utilcmd.c:2857 #, c-format msgid "rules on materialized views are not supported" msgstr "las reglas en vistas materializadas no están soportadas" -#: parser/parse_utilcmd.c:2832 +#: parser/parse_utilcmd.c:2920 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "la condición WHERE de la regla no puede contener referencias a otras relaciones" -#: parser/parse_utilcmd.c:2906 +#: parser/parse_utilcmd.c:2994 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "las reglas con condiciones WHERE sólo pueden tener acciones SELECT, INSERT, UPDATE o DELETE" -#: parser/parse_utilcmd.c:2924 parser/parse_utilcmd.c:3025 +#: parser/parse_utilcmd.c:3012 parser/parse_utilcmd.c:3113 #: rewrite/rewriteHandler.c:502 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "las sentencias UNION/INTERSECT/EXCEPT condicionales no están implementadas" -#: parser/parse_utilcmd.c:2942 +#: parser/parse_utilcmd.c:3030 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "una regla ON SELECT no puede usar OLD" -#: parser/parse_utilcmd.c:2946 +#: parser/parse_utilcmd.c:3034 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "una regla ON SELECT no puede usar NEW" -#: parser/parse_utilcmd.c:2955 +#: parser/parse_utilcmd.c:3043 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "una regla ON INSERT no puede usar OLD" -#: parser/parse_utilcmd.c:2961 +#: parser/parse_utilcmd.c:3049 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "una regla ON DELETE no puede usar NEW" -#: parser/parse_utilcmd.c:2989 +#: parser/parse_utilcmd.c:3077 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "no se puede hacer referencia a OLD dentro de una consulta WITH" -#: parser/parse_utilcmd.c:2996 +#: parser/parse_utilcmd.c:3084 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "no se puede hacer referencia a NEW dentro de una consulta WITH" -#: parser/parse_utilcmd.c:3455 +#: parser/parse_utilcmd.c:3542 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "cláusula DEFERRABLE mal puesta" -#: parser/parse_utilcmd.c:3460 parser/parse_utilcmd.c:3475 +#: parser/parse_utilcmd.c:3547 parser/parse_utilcmd.c:3562 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "no se permiten múltiples cláusulas DEFERRABLE/NOT DEFERRABLE" -#: parser/parse_utilcmd.c:3470 +#: parser/parse_utilcmd.c:3557 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "la cláusula NOT DEFERRABLE está mal puesta" -#: parser/parse_utilcmd.c:3483 parser/parse_utilcmd.c:3509 gram.y:5598 +#: parser/parse_utilcmd.c:3570 parser/parse_utilcmd.c:3596 gram.y:5593 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "una restricción declarada INITIALLY DEFERRED debe ser DEFERRABLE" -#: parser/parse_utilcmd.c:3491 +#: parser/parse_utilcmd.c:3578 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "la cláusula INITIALLY DEFERRED está mal puesta" -#: parser/parse_utilcmd.c:3496 parser/parse_utilcmd.c:3522 +#: parser/parse_utilcmd.c:3583 parser/parse_utilcmd.c:3609 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "no se permiten múltiples cláusulas INITIALLY IMMEDIATE/DEFERRED" -#: parser/parse_utilcmd.c:3517 +#: parser/parse_utilcmd.c:3604 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "la cláusula INITIALLY IMMEDIATE está mal puesta" -#: parser/parse_utilcmd.c:3708 +#: parser/parse_utilcmd.c:3795 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE especifica un esquema (%s) diferente del que se está creando (%s)" -#: parser/parse_utilcmd.c:3743 -#, fuzzy, c-format -#| msgid "\"%s\" is a partitioned table" +#: parser/parse_utilcmd.c:3830 +#, c-format msgid "\"%s\" is not a partitioned table" -msgstr "«%s» es una tabla particionada" +msgstr "«%s» no es una tabla particionada" -#: parser/parse_utilcmd.c:3750 +#: parser/parse_utilcmd.c:3837 #, c-format msgid "table \"%s\" is not partitioned" msgstr "«la tabla %s» no está particionada" -#: parser/parse_utilcmd.c:3757 +#: parser/parse_utilcmd.c:3844 #, c-format msgid "index \"%s\" is not partitioned" msgstr "el índice «%s» no está particionado" -#: parser/parse_utilcmd.c:3797 +#: parser/parse_utilcmd.c:3884 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "una tabla particionada por hash no puede tener una partición default" -#: parser/parse_utilcmd.c:3814 +#: parser/parse_utilcmd.c:3901 #, c-format msgid "invalid bound specification for a hash partition" msgstr "especificación de borde no válida para partición de hash" -#: parser/parse_utilcmd.c:3820 partitioning/partbounds.c:4693 +#: parser/parse_utilcmd.c:3907 partitioning/partbounds.c:4691 #, c-format msgid "modulus for hash partition must be a positive integer" msgstr "el módulo para una partición hash debe ser un entero positivo" -#: parser/parse_utilcmd.c:3827 partitioning/partbounds.c:4701 +#: parser/parse_utilcmd.c:3914 partitioning/partbounds.c:4699 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "remanente en partición hash debe ser menor que el módulo" -#: parser/parse_utilcmd.c:3840 +#: parser/parse_utilcmd.c:3927 #, c-format msgid "invalid bound specification for a list partition" msgstr "especificación de borde no válida para partición de lista" -#: parser/parse_utilcmd.c:3893 +#: parser/parse_utilcmd.c:3980 #, c-format msgid "invalid bound specification for a range partition" msgstr "especificación de borde no válida para partición de rango" -#: parser/parse_utilcmd.c:3899 +#: parser/parse_utilcmd.c:3986 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM debe especificar exactamente un valor por cada columna de particionado" -#: parser/parse_utilcmd.c:3903 +#: parser/parse_utilcmd.c:3990 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO debe especificar exactamente un valor por cada columna de particionado" -#: parser/parse_utilcmd.c:4017 +#: parser/parse_utilcmd.c:4104 #, c-format msgid "cannot specify NULL in range bound" msgstr "no se puede especificar NULL en borde de rango" -#: parser/parse_utilcmd.c:4066 +#: parser/parse_utilcmd.c:4153 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "cada borde que sigue a un MAXVALUE debe ser también MAXVALUE" -#: parser/parse_utilcmd.c:4073 +#: parser/parse_utilcmd.c:4160 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "cada borde que siga a un MINVALUE debe ser también MINVALUE" -#: parser/parse_utilcmd.c:4115 -#, fuzzy, c-format -#| msgid "could not determine which collation to use for partition expression" +#: parser/parse_utilcmd.c:4202 +#, c-format msgid "could not determine which collation to use for partition bound expression" -msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de particionamiento" +msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de borde de particionamiento" -#: parser/parse_utilcmd.c:4132 +#: parser/parse_utilcmd.c:4219 #, c-format msgid "collation of partition bound value for column \"%s\" does not match partition key collation \"%s\"" msgstr "el ordenamiento (collation) del valor de borde de partición para la columna «%s» no coincide con el ordenamiento de la llave de particionamiento «%s»" -#: parser/parse_utilcmd.c:4149 +#: parser/parse_utilcmd.c:4236 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "el valor especificado no puede ser convertido al tipo %s para la columna «%s»" #: parser/parser.c:228 -#, fuzzy -#| msgid "\"\\u\" must be followed by four hexadecimal digits." msgid "UESCAPE must be followed by a simple string literal" -msgstr "«\\u» debe ser seguido por cuatro dígitos hexadecimales." +msgstr "UESCAPE debe ser seguido por un literal de cadena simple" #: parser/parser.c:233 msgid "invalid Unicode escape character" @@ -16662,10 +16579,9 @@ msgid "invalid Unicode escape" msgstr "valor de escape Unicode no válido" #: parser/parser.c:450 -#, fuzzy, c-format -#| msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." +#, c-format msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." -msgstr "Los escapes Unicode deben ser \\uXXXX o \\UXXXXXXXX." +msgstr "Los escapes Unicode deben ser \\XXXX o \\+XXXXXX." #: parser/parser.c:478 scan.l:638 scan.l:654 scan.l:670 #, c-format @@ -16677,52 +16593,52 @@ msgstr "par sustituto (surrogate) Unicode no válido" msgid "identifier \"%s\" will be truncated to \"%s\"" msgstr "el identificador «%s» se truncará a «%s»" -#: partitioning/partbounds.c:2833 +#: partitioning/partbounds.c:2831 #, c-format msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "la partición «%s» está en conflicto con la partición default «%s» existente" -#: partitioning/partbounds.c:2892 +#: partitioning/partbounds.c:2890 #, c-format msgid "every hash partition modulus must be a factor of the next larger modulus" msgstr "cada módulo de partición hash debe ser un factor del próximo mayor módulo" -#: partitioning/partbounds.c:2988 +#: partitioning/partbounds.c:2986 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "borde de rango vació especificado para la partición «%s»" -#: partitioning/partbounds.c:2990 +#: partitioning/partbounds.c:2988 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "El límite inferior %s especificado es mayor o igual al límite superior %s." -#: partitioning/partbounds.c:3087 +#: partitioning/partbounds.c:3085 #, c-format msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "la partición «%s» traslaparía con la partición «%s»" -#: partitioning/partbounds.c:3204 +#: partitioning/partbounds.c:3202 #, c-format msgid "skipped scanning foreign table \"%s\" which is a partition of default partition \"%s\"" msgstr "se omitió recorrer la tabla foránea «%s» que es una partición de la partición default «%s»" -#: partitioning/partbounds.c:4697 +#: partitioning/partbounds.c:4695 #, c-format msgid "remainder for hash partition must be a non-negative integer" msgstr "remanente en partición hash debe ser un entero no negativo" -#: partitioning/partbounds.c:4724 +#: partitioning/partbounds.c:4722 #, c-format msgid "\"%s\" is not a hash partitioned table" msgstr "«%s» es una tabla particionada por hash" -#: partitioning/partbounds.c:4735 partitioning/partbounds.c:4852 +#: partitioning/partbounds.c:4733 partitioning/partbounds.c:4850 #, c-format msgid "number of partitioning columns (%d) does not match number of partition keys provided (%d)" msgstr "el número de columnas de particionamiento (%d) no coincide con el número de llaves de particionamiento provistas (%d)" -#: partitioning/partbounds.c:4757 partitioning/partbounds.c:4789 +#: partitioning/partbounds.c:4755 partitioning/partbounds.c:4787 #, c-format msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" msgstr "la columna %d de la llave de particionamiento tiene tipo «%s», pero el valor dado es de tipo «%s»" @@ -16947,52 +16863,52 @@ msgstr "no se pudo iniciar el lanzador autovacuum: %m" msgid "autovacuum launcher started" msgstr "lanzador de autovacuum iniciado" -#: postmaster/autovacuum.c:840 +#: postmaster/autovacuum.c:839 #, c-format msgid "autovacuum launcher shutting down" msgstr "lanzador de autovacuum apagándose" -#: postmaster/autovacuum.c:1478 +#: postmaster/autovacuum.c:1477 #, c-format msgid "could not fork autovacuum worker process: %m" msgstr "no se pudo lanzar el proceso «autovacuum worker»: %m" -#: postmaster/autovacuum.c:1687 +#: postmaster/autovacuum.c:1686 #, c-format msgid "autovacuum: processing database \"%s\"" msgstr "autovacuum: procesando la base de datos «%s»" -#: postmaster/autovacuum.c:2257 +#: postmaster/autovacuum.c:2256 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "autovacuum: eliminando tabla temporal huérfana «%s.%s.%s»" -#: postmaster/autovacuum.c:2486 +#: postmaster/autovacuum.c:2485 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "vacuum automático de la tabla «%s.%s.%s»" -#: postmaster/autovacuum.c:2489 +#: postmaster/autovacuum.c:2488 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "análisis automático de la tabla «%s.%s.%s»" -#: postmaster/autovacuum.c:2682 +#: postmaster/autovacuum.c:2681 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "procesando elemento de tarea de la tabla «%s.%s.%s»" -#: postmaster/autovacuum.c:3286 +#: postmaster/autovacuum.c:3285 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "autovacuum no fue iniciado debido a un error de configuración" -#: postmaster/autovacuum.c:3287 +#: postmaster/autovacuum.c:3286 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Active la opción «track_counts»." -#: postmaster/bgworker.c:394 postmaster/bgworker.c:834 +#: postmaster/bgworker.c:394 postmaster/bgworker.c:841 #, c-format msgid "registering background worker \"%s\"" msgstr "registrando el proceso ayudante «%s»" @@ -17027,22 +16943,22 @@ msgstr "proceso ayudante «%s»: los ayudantes paralelos no pueden ser configura msgid "terminating background worker \"%s\" due to administrator command" msgstr "terminando el proceso ayudante «%s» debido a una orden del administrador" -#: postmaster/bgworker.c:842 +#: postmaster/bgworker.c:849 #, c-format msgid "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "proceso ayudante «%s»: debe ser registrado en shared_preload_libraries" -#: postmaster/bgworker.c:854 +#: postmaster/bgworker.c:861 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "proceso ayudante «%s»: sólo los ayudantes dinámicos pueden pedir notificaciones" -#: postmaster/bgworker.c:869 +#: postmaster/bgworker.c:876 #, c-format msgid "too many background workers" msgstr "demasiados procesos ayudantes" -#: postmaster/bgworker.c:870 +#: postmaster/bgworker.c:877 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." @@ -17050,7 +16966,7 @@ msgstr[0] "Hasta %d proceso ayudante puede registrarse con la configuración act msgstr[1] "Hasta %d procesos ayudantes pueden registrarse con la configuración actual." # FIXME a %s would be nice here -#: postmaster/bgworker.c:874 +#: postmaster/bgworker.c:881 #, c-format msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Considere incrementar el parámetro de configuración «max_worker_processes»." @@ -17083,58 +16999,58 @@ msgstr "Vea los mensajes recientes en el registro del servidor para obtener más msgid "compacted fsync request queue from %d entries to %d entries" msgstr "la cola de peticiones de fsync fue compactada de %d a %d elementos" -#: postmaster/pgarch.c:156 +#: postmaster/pgarch.c:155 #, c-format msgid "could not fork archiver: %m" msgstr "no se pudo lanzar el proceso archivador: %m" -#: postmaster/pgarch.c:434 +#: postmaster/pgarch.c:425 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "archive_mode activado, pero archive_command no está definido" -#: postmaster/pgarch.c:456 +#: postmaster/pgarch.c:447 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "eliminando archivo de estado huérfano «%s»" -#: postmaster/pgarch.c:466 +#: postmaster/pgarch.c:457 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" msgstr "la eliminación del archivo de estado huérfano «%s» falló demasiadas veces, se tratará de nuevo después" -#: postmaster/pgarch.c:502 +#: postmaster/pgarch.c:493 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "el archivado del archivo de WAL «%s» falló demasiadas veces, se tratará de nuevo más tarde" -#: postmaster/pgarch.c:603 +#: postmaster/pgarch.c:594 #, c-format msgid "archive command failed with exit code %d" msgstr "la orden de archivado falló con código de retorno %d" -#: postmaster/pgarch.c:605 postmaster/pgarch.c:615 postmaster/pgarch.c:621 -#: postmaster/pgarch.c:630 +#: postmaster/pgarch.c:596 postmaster/pgarch.c:606 postmaster/pgarch.c:612 +#: postmaster/pgarch.c:621 #, c-format msgid "The failed archive command was: %s" msgstr "La orden fallida era: «%s»" -#: postmaster/pgarch.c:612 +#: postmaster/pgarch.c:603 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "la orden de archivado fue terminada por una excepción 0x%X" -#: postmaster/pgarch.c:614 postmaster/postmaster.c:3762 +#: postmaster/pgarch.c:605 postmaster/postmaster.c:3742 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "Vea el archivo «ntstatus.h» para una descripción del valor hexadecimal." -#: postmaster/pgarch.c:619 +#: postmaster/pgarch.c:610 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "la orden de archivado fue terminada por una señal %d: %s" -#: postmaster/pgarch.c:628 +#: postmaster/pgarch.c:619 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "la orden de archivado fue terminada con código %d no reconocido" @@ -17270,128 +17186,128 @@ msgstr "usando estadísticas añejas en vez de actualizadas porque el recolector msgid "database hash table corrupted during cleanup --- abort" msgstr "el hash de bases de datos se corrompió durante la finalización; abortando" -#: postmaster/postmaster.c:721 +#: postmaster/postmaster.c:733 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: argumento no válido para la opción -f: «%s»\n" -#: postmaster/postmaster.c:807 +#: postmaster/postmaster.c:819 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: argumento no válido para la opción -t: «%s»\n" -#: postmaster/postmaster.c:858 +#: postmaster/postmaster.c:870 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: argumento no válido: «%s»\n" -#: postmaster/postmaster.c:900 +#: postmaster/postmaster.c:912 #, c-format msgid "%s: superuser_reserved_connections (%d) must be less than max_connections (%d)\n" msgstr "%s: superuser_reserved_connections (%d) debe ser menor que max_connections (%d)\n" -#: postmaster/postmaster.c:907 +#: postmaster/postmaster.c:919 #, c-format msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" msgstr "el archivador de WAL no puede activarse cuando wal_level es «minimal»" -#: postmaster/postmaster.c:910 +#: postmaster/postmaster.c:922 #, c-format msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" msgstr "el flujo de WAL (max_wal_senders > 0) requiere wal_level «replica» o «logical»" -#: postmaster/postmaster.c:918 +#: postmaster/postmaster.c:930 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: las tablas de palabras clave de fecha no son válidas, arréglelas\n" -#: postmaster/postmaster.c:1035 +#: postmaster/postmaster.c:1047 #, c-format msgid "could not create I/O completion port for child queue" msgstr "no se pudo crear el port E/S de reporte de completitud para la cola de procesos hijos" -#: postmaster/postmaster.c:1101 +#: postmaster/postmaster.c:1113 #, c-format msgid "ending log output to stderr" msgstr "terminando la salida de registro a stderr" -#: postmaster/postmaster.c:1102 +#: postmaster/postmaster.c:1114 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "La salida futura del registro será enviada al destino de log «%s»." -#: postmaster/postmaster.c:1113 +#: postmaster/postmaster.c:1125 #, c-format msgid "starting %s" msgstr "iniciando %s" -#: postmaster/postmaster.c:1142 postmaster/postmaster.c:1240 +#: postmaster/postmaster.c:1154 postmaster/postmaster.c:1252 #: utils/init/miscinit.c:1597 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "la sintaxis de lista no es válida para el parámetro «%s»" -#: postmaster/postmaster.c:1173 +#: postmaster/postmaster.c:1185 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "no se pudo crear el socket de escucha para «%s»" -#: postmaster/postmaster.c:1179 +#: postmaster/postmaster.c:1191 #, c-format msgid "could not create any TCP/IP sockets" msgstr "no se pudo crear ningún socket TCP/IP" -#: postmaster/postmaster.c:1262 +#: postmaster/postmaster.c:1274 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "no se pudo crear el socket de dominio Unix en el directorio «%s»" -#: postmaster/postmaster.c:1268 +#: postmaster/postmaster.c:1280 #, c-format msgid "could not create any Unix-domain sockets" msgstr "no se pudo crear ningún socket de dominio Unix" -#: postmaster/postmaster.c:1280 +#: postmaster/postmaster.c:1292 #, c-format msgid "no socket created for listening" msgstr "no se creó el socket de atención" -#: postmaster/postmaster.c:1311 +#: postmaster/postmaster.c:1323 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: no se pudo cambiar los permisos del archivo de PID externo «%s»: %s\n" -#: postmaster/postmaster.c:1315 +#: postmaster/postmaster.c:1327 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: no pudo escribir en el archivo externo de PID «%s»: %s\n" -#: postmaster/postmaster.c:1348 utils/init/postinit.c:215 +#: postmaster/postmaster.c:1360 utils/init/postinit.c:215 #, c-format msgid "could not load pg_hba.conf" msgstr "no se pudo cargar pg_hba.conf" -#: postmaster/postmaster.c:1374 +#: postmaster/postmaster.c:1386 #, c-format msgid "postmaster became multithreaded during startup" msgstr "postmaster se volvió multi-hilo durante la partida" -#: postmaster/postmaster.c:1375 +#: postmaster/postmaster.c:1387 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Defina la variable de ambiente LC_ALL a un valor válido." -#: postmaster/postmaster.c:1476 +#: postmaster/postmaster.c:1488 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: no se pudo localizar el ejecutable postgres correspondiente" -#: postmaster/postmaster.c:1499 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1511 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Esto puede indicar una instalación de PostgreSQL incompleta, o que el archivo «%s» ha sido movido de la ubicación adecuada." -#: postmaster/postmaster.c:1526 +#: postmaster/postmaster.c:1538 #, c-format msgid "" "%s: could not find the database system\n" @@ -17402,398 +17318,396 @@ msgstr "" "Se esperaba encontrar en el directorio PGDATA «%s»,\n" "pero no se pudo abrir el archivo «%s»: %s\n" -#: postmaster/postmaster.c:1703 +#: postmaster/postmaster.c:1715 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() falló en postmaster: %m" -#: postmaster/postmaster.c:1858 +#: postmaster/postmaster.c:1870 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "ejecutando un apagado inmediato porque el archivo de bloqueo del directorio de datos no es válido" -#: postmaster/postmaster.c:1961 postmaster/postmaster.c:1992 +#: postmaster/postmaster.c:1973 postmaster/postmaster.c:2004 #, c-format msgid "incomplete startup packet" msgstr "el paquete de inicio está incompleto" -#: postmaster/postmaster.c:1973 +#: postmaster/postmaster.c:1985 #, c-format msgid "invalid length of startup packet" msgstr "el de paquete de inicio tiene largo incorrecto" -#: postmaster/postmaster.c:2031 +#: postmaster/postmaster.c:2043 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "no se pudo enviar la respuesta de negociación SSL: %m" -#: postmaster/postmaster.c:2062 +#: postmaster/postmaster.c:2074 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "no se pudo enviar la respuesta de negociación GSSAPI: %m" -#: postmaster/postmaster.c:2092 +#: postmaster/postmaster.c:2104 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "el protocolo %u.%u no está soportado: servidor soporta %u.0 hasta %u.%u" -#: postmaster/postmaster.c:2156 utils/misc/guc.c:6779 utils/misc/guc.c:6815 -#: utils/misc/guc.c:6885 utils/misc/guc.c:8208 utils/misc/guc.c:11054 -#: utils/misc/guc.c:11088 +#: postmaster/postmaster.c:2168 utils/misc/guc.c:6769 utils/misc/guc.c:6805 +#: utils/misc/guc.c:6875 utils/misc/guc.c:8198 utils/misc/guc.c:11044 +#: utils/misc/guc.c:11078 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "valor no válido para el parámetro «%s»: «%s»" -#: postmaster/postmaster.c:2159 +#: postmaster/postmaster.c:2171 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Los valores válidos son: «false», 0, «true», 1, «database»." -#: postmaster/postmaster.c:2204 +#: postmaster/postmaster.c:2216 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "el paquete de inicio no es válido: se esperaba un terminador en el último byte" -#: postmaster/postmaster.c:2242 +#: postmaster/postmaster.c:2254 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "no se especifica un nombre de usuario en el paquete de inicio" -#: postmaster/postmaster.c:2306 +#: postmaster/postmaster.c:2318 #, c-format msgid "the database system is starting up" msgstr "el sistema de base de datos está iniciándose" -#: postmaster/postmaster.c:2311 +#: postmaster/postmaster.c:2323 #, c-format msgid "the database system is shutting down" msgstr "el sistema de base de datos está apagándose" -#: postmaster/postmaster.c:2316 +#: postmaster/postmaster.c:2328 #, c-format msgid "the database system is in recovery mode" msgstr "el sistema de base de datos está en modo de recuperación" -#: postmaster/postmaster.c:2321 storage/ipc/procarray.c:293 +#: postmaster/postmaster.c:2333 storage/ipc/procarray.c:293 #: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:362 #, c-format msgid "sorry, too many clients already" msgstr "lo siento, ya tenemos demasiados clientes" -#: postmaster/postmaster.c:2411 +#: postmaster/postmaster.c:2423 #, c-format msgid "wrong key in cancel request for process %d" msgstr "llave incorrecta en la petición de cancelación para el proceso %d" -#: postmaster/postmaster.c:2423 +#: postmaster/postmaster.c:2435 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "el PID %d en la petición de cancelación no coincidió con ningún proceso" -#: postmaster/postmaster.c:2689 +#: postmaster/postmaster.c:2706 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "se recibió SIGHUP, volviendo a cargar archivos de configuración" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2715 postmaster/postmaster.c:2719 +#: postmaster/postmaster.c:2732 postmaster/postmaster.c:2736 #, c-format msgid "%s was not reloaded" msgstr "%s no fue vuelto a cargar" -#: postmaster/postmaster.c:2729 +#: postmaster/postmaster.c:2746 #, c-format msgid "SSL configuration was not reloaded" msgstr "la configuración SSL no fue vuelta a cargar" -#: postmaster/postmaster.c:2785 +#: postmaster/postmaster.c:2802 #, c-format msgid "received smart shutdown request" msgstr "se recibió petición de apagado inteligente" -#: postmaster/postmaster.c:2843 +#: postmaster/postmaster.c:2848 #, c-format msgid "received fast shutdown request" msgstr "se recibió petición de apagado rápido" -#: postmaster/postmaster.c:2876 +#: postmaster/postmaster.c:2866 #, c-format msgid "aborting any active transactions" msgstr "abortando transacciones activas" -#: postmaster/postmaster.c:2910 +#: postmaster/postmaster.c:2890 #, c-format msgid "received immediate shutdown request" msgstr "se recibió petición de apagado inmediato" -#: postmaster/postmaster.c:2985 +#: postmaster/postmaster.c:2965 #, c-format msgid "shutdown at recovery target" msgstr "apagándose al alcanzar el destino de recuperación" -#: postmaster/postmaster.c:3003 postmaster/postmaster.c:3039 +#: postmaster/postmaster.c:2983 postmaster/postmaster.c:3019 msgid "startup process" msgstr "proceso de inicio" -#: postmaster/postmaster.c:3006 +#: postmaster/postmaster.c:2986 #, c-format msgid "aborting startup due to startup process failure" msgstr "abortando el inicio debido a una falla en el procesamiento de inicio" -#: postmaster/postmaster.c:3080 +#: postmaster/postmaster.c:3061 #, c-format msgid "database system is ready to accept connections" msgstr "el sistema de bases de datos está listo para aceptar conexiones" -#: postmaster/postmaster.c:3101 +#: postmaster/postmaster.c:3082 msgid "background writer process" msgstr "proceso background writer" -#: postmaster/postmaster.c:3155 +#: postmaster/postmaster.c:3136 msgid "checkpointer process" msgstr "proceso checkpointer" -#: postmaster/postmaster.c:3171 +#: postmaster/postmaster.c:3152 msgid "WAL writer process" msgstr "proceso escritor de WAL" -#: postmaster/postmaster.c:3186 +#: postmaster/postmaster.c:3167 msgid "WAL receiver process" msgstr "proceso receptor de WAL" -#: postmaster/postmaster.c:3201 +#: postmaster/postmaster.c:3182 msgid "autovacuum launcher process" msgstr "proceso lanzador de autovacuum" -#: postmaster/postmaster.c:3216 +#: postmaster/postmaster.c:3197 msgid "archiver process" msgstr "proceso de archivado" -#: postmaster/postmaster.c:3232 +#: postmaster/postmaster.c:3213 msgid "statistics collector process" msgstr "recolector de estadísticas" -#: postmaster/postmaster.c:3246 +#: postmaster/postmaster.c:3227 msgid "system logger process" msgstr "proceso de log" -#: postmaster/postmaster.c:3310 +#: postmaster/postmaster.c:3291 #, c-format msgid "background worker \"%s\"" msgstr "proceso ayudante «%s»" -#: postmaster/postmaster.c:3394 postmaster/postmaster.c:3414 -#: postmaster/postmaster.c:3421 postmaster/postmaster.c:3439 +#: postmaster/postmaster.c:3375 postmaster/postmaster.c:3395 +#: postmaster/postmaster.c:3402 postmaster/postmaster.c:3420 msgid "server process" msgstr "proceso de servidor" -#: postmaster/postmaster.c:3493 +#: postmaster/postmaster.c:3474 #, c-format msgid "terminating any other active server processes" msgstr "terminando todos los otros procesos de servidor activos" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3749 +#: postmaster/postmaster.c:3729 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) terminó con código de salida %d" -#: postmaster/postmaster.c:3751 postmaster/postmaster.c:3763 -#: postmaster/postmaster.c:3773 postmaster/postmaster.c:3784 +#: postmaster/postmaster.c:3731 postmaster/postmaster.c:3743 +#: postmaster/postmaster.c:3753 postmaster/postmaster.c:3764 #, c-format msgid "Failed process was running: %s" msgstr "El proceso que falló estaba ejecutando: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3760 +#: postmaster/postmaster.c:3740 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) fue terminado por una excepción 0x%X" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3770 +#: postmaster/postmaster.c:3750 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) fue terminado por una señal %d: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3782 +#: postmaster/postmaster.c:3762 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) terminó con código %d no reconocido" -#: postmaster/postmaster.c:3965 +#: postmaster/postmaster.c:3970 #, c-format msgid "abnormal database system shutdown" msgstr "apagado anormal del sistema de bases de datos" -#: postmaster/postmaster.c:4005 +#: postmaster/postmaster.c:4010 #, c-format msgid "all server processes terminated; reinitializing" msgstr "todos los procesos fueron terminados; reinicializando" -#: postmaster/postmaster.c:4175 postmaster/postmaster.c:5574 -#: postmaster/postmaster.c:5962 +#: postmaster/postmaster.c:4180 postmaster/postmaster.c:5599 +#: postmaster/postmaster.c:5986 #, c-format msgid "could not generate random cancel key" msgstr "no se pudo generar una llave de cancelación aleatoria" -#: postmaster/postmaster.c:4229 +#: postmaster/postmaster.c:4234 #, c-format msgid "could not fork new process for connection: %m" msgstr "no se pudo lanzar el nuevo proceso para la conexión: %m" -#: postmaster/postmaster.c:4271 +#: postmaster/postmaster.c:4276 msgid "could not fork new process for connection: " msgstr "no se pudo lanzar el nuevo proceso para la conexión: " -#: postmaster/postmaster.c:4380 +#: postmaster/postmaster.c:4393 #, c-format msgid "connection received: host=%s port=%s" msgstr "conexión recibida: host=%s port=%s" -#: postmaster/postmaster.c:4385 +#: postmaster/postmaster.c:4398 #, c-format msgid "connection received: host=%s" msgstr "conexión recibida: host=%s" -#: postmaster/postmaster.c:4655 +#: postmaster/postmaster.c:4668 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "no se pudo lanzar el proceso servidor «%s»: %m" -#: postmaster/postmaster.c:4814 +#: postmaster/postmaster.c:4827 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "renunciar después de demasiados intentos de reservar memoria compartida" -#: postmaster/postmaster.c:4815 +#: postmaster/postmaster.c:4828 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Esto podría deberse a ASLR o un software antivirus." -#: postmaster/postmaster.c:5021 +#: postmaster/postmaster.c:5034 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "No se pudo cargar la configuración SSL en proceso secundario" -#: postmaster/postmaster.c:5153 -#, fuzzy, c-format -#| msgid "Please report this to ." +#: postmaster/postmaster.c:5166 +#, c-format msgid "Please report this to <%s>." -msgstr "Por favor, reporte esto a ." +msgstr "Por favor reporte esto a <%s>." -#: postmaster/postmaster.c:5246 +#: postmaster/postmaster.c:5259 #, c-format msgid "database system is ready to accept read only connections" msgstr "el sistema de bases de datos está listo para aceptar conexiones de sólo lectura" -#: postmaster/postmaster.c:5502 +#: postmaster/postmaster.c:5527 #, c-format msgid "could not fork startup process: %m" msgstr "no se pudo lanzar el proceso de inicio: %m" -#: postmaster/postmaster.c:5506 +#: postmaster/postmaster.c:5531 #, c-format msgid "could not fork background writer process: %m" msgstr "no se pudo lanzar el background writer: %m" -#: postmaster/postmaster.c:5510 +#: postmaster/postmaster.c:5535 #, c-format msgid "could not fork checkpointer process: %m" msgstr "no se pudo lanzar el checkpointer: %m" -#: postmaster/postmaster.c:5514 +#: postmaster/postmaster.c:5539 #, c-format msgid "could not fork WAL writer process: %m" msgstr "no se pudo lanzar el proceso escritor de WAL: %m" -#: postmaster/postmaster.c:5518 +#: postmaster/postmaster.c:5543 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "no se pudo lanzar el proceso receptor de WAL: %m" -#: postmaster/postmaster.c:5522 +#: postmaster/postmaster.c:5547 #, c-format msgid "could not fork process: %m" msgstr "no se pudo lanzar el proceso: %m" -#: postmaster/postmaster.c:5719 postmaster/postmaster.c:5742 +#: postmaster/postmaster.c:5744 postmaster/postmaster.c:5767 #, c-format msgid "database connection requirement not indicated during registration" msgstr "el requerimiento de conexión a base de datos no fue indicado durante el registro" -#: postmaster/postmaster.c:5726 postmaster/postmaster.c:5749 +#: postmaster/postmaster.c:5751 postmaster/postmaster.c:5774 #, c-format msgid "invalid processing mode in background worker" msgstr "modo de procesamiento no válido en proceso ayudante" -#: postmaster/postmaster.c:5822 +#: postmaster/postmaster.c:5847 #, c-format msgid "starting background worker process \"%s\"" msgstr "iniciando el proceso ayudante «%s»" -#: postmaster/postmaster.c:5834 +#: postmaster/postmaster.c:5859 #, c-format msgid "could not fork worker process: %m" msgstr "no se pudo lanzar el proceso ayudante: %m" -#: postmaster/postmaster.c:5948 -#, fuzzy, c-format -#| msgid "could not fork worker process: %m" +#: postmaster/postmaster.c:5972 +#, c-format msgid "no slot available for new worker process" -msgstr "no se pudo lanzar el proceso ayudante: %m" +msgstr "no hay slot disponible para un nuevo proceso ayudante" -#: postmaster/postmaster.c:6283 +#: postmaster/postmaster.c:6307 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "no se pudo duplicar el socket %d para su empleo en el backend: código de error %d" -#: postmaster/postmaster.c:6315 +#: postmaster/postmaster.c:6339 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "no se pudo crear el socket heradado: código de error %d\n" -#: postmaster/postmaster.c:6344 +#: postmaster/postmaster.c:6368 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "no se pudo abrir el archivo de variables de servidor «%s»: %s\n" -#: postmaster/postmaster.c:6351 +#: postmaster/postmaster.c:6375 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "no se pudo leer el archivo de variables de servidor «%s»: %s\n" -#: postmaster/postmaster.c:6360 +#: postmaster/postmaster.c:6384 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "no se pudo eliminar el archivo «%s»: %s\n" -#: postmaster/postmaster.c:6377 +#: postmaster/postmaster.c:6401 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "no se pudo mapear la vista del archivo de variables: código de error %lu\n" -#: postmaster/postmaster.c:6386 +#: postmaster/postmaster.c:6410 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "no se pudo desmapear la vista del archivo de variables: código de error %lu\n" -#: postmaster/postmaster.c:6393 +#: postmaster/postmaster.c:6417 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "no se pudo cerrar el archivo de variables de servidor: código de error %lu\n" -#: postmaster/postmaster.c:6571 +#: postmaster/postmaster.c:6595 #, c-format msgid "could not read exit code for process\n" msgstr "no se pudo leer el código de salida del proceso\n" -#: postmaster/postmaster.c:6576 +#: postmaster/postmaster.c:6600 #, c-format msgid "could not post child completion status\n" msgstr "no se pudo publicar el estado de completitud del proceso hijo\n" @@ -17864,39 +17778,29 @@ msgid "nondeterministic collations are not supported for regular expressions" msgstr "los ordenamientos no determinísticos no están soportados para expresiones regulares" #: replication/backup_manifest.c:231 -#, fuzzy, c-format -#| msgid "server reported unexpected next timeline %u, following timeline %u" +#, c-format msgid "expected end timeline %u but found timeline %u" -msgstr "el servidor reportó un timeline siguiente %u inesperado, a continuación del timeline %u" +msgstr "se esperaba el timeline de término %u pero se encontró el tieneline %u" #: replication/backup_manifest.c:248 -#, fuzzy, c-format -#| msgid "server reported unexpected next timeline %u, following timeline %u" +#, c-format msgid "expected start timeline %u but found timeline %u" -msgstr "el servidor reportó un timeline siguiente %u inesperado, a continuación del timeline %u" +msgstr "se esperaba el timeline de inicio %u pero se encontró el timeline %u" #: replication/backup_manifest.c:275 -#, fuzzy, c-format -#| msgid "crash recovery starts in timeline %u and has target timeline %u" -msgid "start timeline %u not found history of timeline %u" -msgstr "la recuperación comienza en el timeline %u y tiene un timeline de destino %u" +#, c-format +msgid "start timeline %u not found in history of timeline %u" +msgstr "el timeline de inicio %u no fue encontrado en la historia del timeline %u" #: replication/backup_manifest.c:322 -#, fuzzy, c-format -#| msgid "could not rewind hash-join temporary file: %m" -msgid "could not rewind temporary file: %m" -msgstr "falló la búsqueda en el archivo temporal de hash-join: %m" +#, c-format +msgid "could not rewind temporary file" +msgstr "no se puede rebobinar el archivo temporal" #: replication/backup_manifest.c:349 -#, fuzzy, c-format -#| msgid "could not read from hash-join temporary file: %m" -msgid "could not read from temporary file: %m" -msgstr "no se pudo leer el archivo temporal de hash-join: %m" - -#: replication/backup_manifest.c:377 utils/sort/sharedtuplestore.c:206 #, c-format -msgid "could not write to temporary file: %m" -msgstr "no se pudo escribir al archivo temporal: %m" +msgid "could not read from temporary file: %m" +msgstr "no se pudo leer del archivo temporal: %m" #: replication/basebackup.c:108 #, c-format @@ -17925,10 +17829,11 @@ msgid "base backup could not send data, aborting backup" msgstr "el respaldo base no pudo enviar datos, abortando el respaldo" #: replication/basebackup.c:724 -#, fuzzy, c-format -#| msgid "%s total checksum verification failures" +#, c-format +#| msgid "%lld total checksum verification failure" +#| msgid_plural "%lld total checksum verification failures" msgid "%lld total checksum verification failures" -msgstr "%s fallas de verificación de checksums en total" +msgstr "%lld fallas de verificación de suma de comprobación en total" #: replication/basebackup.c:728 #, c-format @@ -17950,20 +17855,20 @@ msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d está fuera del rango aceptable para el parámetro «%s» (%d .. %d)" #: replication/basebackup.c:879 -#, fuzzy, c-format -#| msgid "unrecognized column option \"%s\"" +#, c-format msgid "unrecognized manifest option: \"%s\"" -msgstr "opción de columna «%s» no reconocida" +msgstr "opción de manifiesto «%s» no reconocida" #: replication/basebackup.c:895 #, c-format msgid "unrecognized checksum algorithm: \"%s\"" -msgstr "" +msgstr "algoritmo de suma de comprobación no reconocido: \"%s\"" #: replication/basebackup.c:910 -#, c-format +#, fuzzy, c-format +#| msgid "manifest checksum mismatch" msgid "manifest checksums require a backup manifest" -msgstr "" +msgstr "discordancia en la suma de comprobación del manifiesto" #: replication/basebackup.c:1501 #, c-format @@ -18017,108 +17922,114 @@ msgstr "nombre de archivo demasiado largo para el formato tar: «%s»" msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "destino de enlace simbólico demasiado largo para el formato tar: nombre de archivo «%s», destino «%s»" -#: replication/libpqwalreceiver/libpqwalreceiver.c:234 +#: replication/libpqwalreceiver/libpqwalreceiver.c:227 +#, fuzzy, c-format +#| msgid "could not clear search_path: %s" +msgid "could not clear search path: %s" +msgstr "no se pudo limpiar search_path: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:251 #, c-format msgid "invalid connection string syntax: %s" msgstr "sintaxis de cadena de conexión no válida: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:258 +#: replication/libpqwalreceiver/libpqwalreceiver.c:275 #, c-format msgid "could not parse connection string: %s" msgstr "no se pudo interpretar la cadena de conexión: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:330 +#: replication/libpqwalreceiver/libpqwalreceiver.c:347 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "no se pudo recibir el identificador de sistema y el ID de timeline del servidor primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:341 -#: replication/libpqwalreceiver/libpqwalreceiver.c:559 +#: replication/libpqwalreceiver/libpqwalreceiver.c:358 +#: replication/libpqwalreceiver/libpqwalreceiver.c:576 #, c-format msgid "invalid response from primary server" msgstr "respuesta no válida del servidor primario" -#: replication/libpqwalreceiver/libpqwalreceiver.c:342 +#: replication/libpqwalreceiver/libpqwalreceiver.c:359 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "No se pudo identificar el sistema: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d o más campos." -#: replication/libpqwalreceiver/libpqwalreceiver.c:415 -#: replication/libpqwalreceiver/libpqwalreceiver.c:421 -#: replication/libpqwalreceiver/libpqwalreceiver.c:446 +#: replication/libpqwalreceiver/libpqwalreceiver.c:432 +#: replication/libpqwalreceiver/libpqwalreceiver.c:438 +#: replication/libpqwalreceiver/libpqwalreceiver.c:463 #, c-format msgid "could not start WAL streaming: %s" msgstr "no se pudo iniciar el flujo de WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:469 +#: replication/libpqwalreceiver/libpqwalreceiver.c:486 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "no se pudo enviar el mensaje fin-de-flujo al primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:491 +#: replication/libpqwalreceiver/libpqwalreceiver.c:508 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "conjunto de resultados inesperado después del fin-de-flujo" -#: replication/libpqwalreceiver/libpqwalreceiver.c:505 +#: replication/libpqwalreceiver/libpqwalreceiver.c:522 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "ocurrió un error mientras se apagaba el flujo COPY: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:514 +#: replication/libpqwalreceiver/libpqwalreceiver.c:531 #, c-format msgid "error reading result of streaming command: %s" msgstr "ocurrió un error mientras se leía la orden de flujo: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:522 -#: replication/libpqwalreceiver/libpqwalreceiver.c:756 +#: replication/libpqwalreceiver/libpqwalreceiver.c:539 +#: replication/libpqwalreceiver/libpqwalreceiver.c:773 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "resultado inesperado después de CommandComplete: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:548 +#: replication/libpqwalreceiver/libpqwalreceiver.c:565 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "no se pudo recibir el archivo de historia de timeline del servidor primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:560 +#: replication/libpqwalreceiver/libpqwalreceiver.c:577 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Se esperaba 1 tupla con 2 campos, se obtuvieron %d tuplas con %d campos." -#: replication/libpqwalreceiver/libpqwalreceiver.c:720 -#: replication/libpqwalreceiver/libpqwalreceiver.c:771 -#: replication/libpqwalreceiver/libpqwalreceiver.c:777 +#: replication/libpqwalreceiver/libpqwalreceiver.c:737 +#: replication/libpqwalreceiver/libpqwalreceiver.c:788 +#: replication/libpqwalreceiver/libpqwalreceiver.c:794 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "no se pudo recibir datos desde el flujo de WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:796 +#: replication/libpqwalreceiver/libpqwalreceiver.c:813 #, c-format msgid "could not send data to WAL stream: %s" msgstr "no se pudo enviar datos al flujo de WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:849 +#: replication/libpqwalreceiver/libpqwalreceiver.c:866 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "no se pudo create el slot de replicación «%s»: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:894 +#: replication/libpqwalreceiver/libpqwalreceiver.c:911 #, c-format msgid "invalid query response" msgstr "respuesta no válida a consulta" -#: replication/libpqwalreceiver/libpqwalreceiver.c:895 +#: replication/libpqwalreceiver/libpqwalreceiver.c:912 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Se esperaban %d campos, se obtuvieron %d campos." -#: replication/libpqwalreceiver/libpqwalreceiver.c:964 +#: replication/libpqwalreceiver/libpqwalreceiver.c:981 #, c-format msgid "the query interface requires a database connection" msgstr "la interfaz de consulta requiere una conexión a base de datos" -#: replication/libpqwalreceiver/libpqwalreceiver.c:995 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1012 msgid "empty query" msgstr "consulta vacía" @@ -18256,10 +18167,10 @@ msgstr "el array debe tener un número par de elementos" msgid "can no longer get changes from replication slot \"%s\"" msgstr "no se puede cambiar la relación «%s»" -#: replication/logical/logicalfuncs.c:253 replication/slotfuncs.c:606 +#: replication/logical/logicalfuncs.c:253 replication/slotfuncs.c:648 #, c-format msgid "This slot has never previously reserved WAL, or has been invalidated." -msgstr "" +msgstr "Este slot nunca ha reservado WAL previamente, o ha sido invalidado." #: replication/logical/logicalfuncs.c:265 #, c-format @@ -18327,7 +18238,7 @@ msgid "could not find free replication state slot for replication origin with OI msgstr "no se pudo encontrar un slot libre para el estado del origen de replicación con OID %u" #: replication/logical/origin.c:929 replication/logical/origin.c:1116 -#: replication/slot.c:1677 +#: replication/slot.c:1762 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Aumente max_replication_slots y reintente." @@ -18368,30 +18279,30 @@ msgstr "a la relación destino de replicación lógica «%s.%s» le faltan algun msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "la relación de destino de replicación lógica «%s.%s» usa columnas de sistemas en el índice REPLICA IDENTITY" -#: replication/logical/reorderbuffer.c:2671 +#: replication/logical/reorderbuffer.c:2663 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "no se pudo escribir al archivo de datos para el XID %u: %m" -#: replication/logical/reorderbuffer.c:2858 -#: replication/logical/reorderbuffer.c:2883 +#: replication/logical/reorderbuffer.c:2850 +#: replication/logical/reorderbuffer.c:2875 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "no se pudo leer desde el archivo de desborde de reorderbuffer: %m" -#: replication/logical/reorderbuffer.c:2862 -#: replication/logical/reorderbuffer.c:2887 +#: replication/logical/reorderbuffer.c:2854 +#: replication/logical/reorderbuffer.c:2879 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "no se pudo leer desde el archivo de desborde de reorderbuffer: se leyeron sólo %d en ve de %u bytes" -#: replication/logical/reorderbuffer.c:3122 +#: replication/logical/reorderbuffer.c:3114 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "no se pudo borrar el archivo «%s» durante la eliminación de pg_replslot/%s/xid*: %m" # FIXME almost duplicated again!? -#: replication/logical/reorderbuffer.c:3614 +#: replication/logical/reorderbuffer.c:3606 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "no se pudo leer del archivo «%s»: se leyeron %d en lugar de %d bytes" @@ -18521,72 +18432,72 @@ msgstr "el editor (publisher) no envía la columna identidad de réplica esperad msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "la relación destino de replicación lógica «%s.%s» no tiene índice REPLICA IDENTITY ni PRIMARY KEY y la relación publicada no tiene REPLICA IDENTITY FULL" -#: replication/logical/worker.c:1387 +#: replication/logical/worker.c:1394 #, c-format msgid "invalid logical replication message type \"%c\"" msgstr "tipo de mensaje de replicación lógica «%c» no válido" -#: replication/logical/worker.c:1529 +#: replication/logical/worker.c:1537 #, c-format msgid "data stream from publisher has ended" msgstr "el flujo de datos del publisher ha terminado" -#: replication/logical/worker.c:1684 +#: replication/logical/worker.c:1692 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "terminando el proceso de replicación lógica debido a que se agotó el tiempo de espera" -#: replication/logical/worker.c:1832 +#: replication/logical/worker.c:1837 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was removed" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se detendrá porque la suscripción fue eliminada" -#: replication/logical/worker.c:1846 +#: replication/logical/worker.c:1851 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se detendrá porque la suscripción fue inhabilitada" -#: replication/logical/worker.c:1860 +#: replication/logical/worker.c:1865 #, c-format msgid "logical replication apply worker for subscription \"%s\" will restart because the connection information was changed" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará porque la información de conexión fue cambiada" -#: replication/logical/worker.c:1874 +#: replication/logical/worker.c:1879 #, c-format msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará porque a la suscripción se le cambió el nombre" -#: replication/logical/worker.c:1891 +#: replication/logical/worker.c:1896 #, c-format msgid "logical replication apply worker for subscription \"%s\" will restart because the replication slot name was changed" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará porque el nombre del slot de replicación fue cambiado" -#: replication/logical/worker.c:1905 +#: replication/logical/worker.c:1910 #, c-format msgid "logical replication apply worker for subscription \"%s\" will restart because subscription's publications were changed" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará porque las publicaciones de la suscripción fueron cambiadas" -#: replication/logical/worker.c:1995 +#: replication/logical/worker.c:2006 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "el ayudante «apply» de replicación lógica para la suscripción %u no se iniciará porque la suscripción fue eliminada durante el inicio" -#: replication/logical/worker.c:2007 +#: replication/logical/worker.c:2018 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» no se iniciará porque la suscripción fue inhabilitada durante el inicio" -#: replication/logical/worker.c:2025 +#: replication/logical/worker.c:2036 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "el ayudante de sincronización de tabla de replicación lógica para la suscripción «%s», tabla «%s» ha iniciado" -#: replication/logical/worker.c:2029 +#: replication/logical/worker.c:2040 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» ha iniciado" -#: replication/logical/worker.c:2068 +#: replication/logical/worker.c:2079 #, c-format msgid "subscription has no replication slot set" msgstr "la suscripción no tiene un slot de replicación establecido" @@ -18599,7 +18510,7 @@ msgstr "proto_version no válido" #: replication/pgoutput/pgoutput.c:152 #, c-format msgid "proto_version \"%s\" out of range" -msgstr "proto_version «%s» está fuera de rango" +msgstr "proto_version «%s» fuera de rango" #: replication/pgoutput/pgoutput.c:169 #, c-format @@ -18621,177 +18532,177 @@ msgstr "el cliente envió proto_version=%d pero sólo soportamos el protocolo %d msgid "publication_names parameter missing" msgstr "parámetro publication_names faltante" -#: replication/slot.c:180 +#: replication/slot.c:183 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "el nombre de slot de replicación «%s» es demasiado corto" -#: replication/slot.c:189 +#: replication/slot.c:192 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "el nombre de slot de replicación «%s» es demasiado largo" -#: replication/slot.c:202 +#: replication/slot.c:205 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "el nombre de slot de replicación «%s» contiene caracteres no válidos" -#: replication/slot.c:204 +#: replication/slot.c:207 #, c-format msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "Los nombres de slots de replicación sólo pueden contener letras minúsculas, números y el carácter «_»." -#: replication/slot.c:251 +#: replication/slot.c:254 #, c-format msgid "replication slot \"%s\" already exists" msgstr "el slot de replicación «%s» ya existe" -#: replication/slot.c:261 +#: replication/slot.c:264 #, c-format msgid "all replication slots are in use" msgstr "todos los slots de replicación están en uso" -#: replication/slot.c:262 +#: replication/slot.c:265 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Libere uno o incremente max_replication_slots." -#: replication/slot.c:391 replication/slotfuncs.c:712 +#: replication/slot.c:407 replication/slotfuncs.c:760 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "no existe el slot de replicación «%s»" -#: replication/slot.c:402 replication/slot.c:963 +#: replication/slot.c:445 replication/slot.c:1006 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "el slot de replicación «%s» está activo para el PID %d" -#: replication/slot.c:640 replication/slot.c:1229 replication/slot.c:1612 +#: replication/slot.c:683 replication/slot.c:1314 replication/slot.c:1697 #, c-format msgid "could not remove directory \"%s\"" msgstr "no se pudo eliminar el directorio «%s»" -#: replication/slot.c:998 +#: replication/slot.c:1041 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "los slots de replicación sólo pueden usarse si max_replication_slots > 0" # FIXME see logical.c:81 -#: replication/slot.c:1003 +#: replication/slot.c:1046 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "los slots de replicación sólo pueden usarse si wal_level >= replica" -#: replication/slot.c:1130 +#: replication/slot.c:1202 #, fuzzy, c-format #| msgid "terminating walsender process due to replication timeout" -msgid "terminating walsender %d because replication slot \"%s\" is too far behind" +msgid "terminating process %d because replication slot \"%s\" is too far behind" msgstr "terminando el proceso walsender debido a que se agotó el tiempo de espera de replicación" -#: replication/slot.c:1140 +#: replication/slot.c:1221 #, c-format msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" -msgstr "" +msgstr "invalidando el slot «%s» porque su restart_lsn %X/%X excede max_slot_wal_keep_size" -#: replication/slot.c:1550 +#: replication/slot.c:1635 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "el archivo de slot de replicación «%s» tiene número mágico erróneo: %u en lugar de %u" -#: replication/slot.c:1557 +#: replication/slot.c:1642 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "el archivo de slot de replicación «%s» tiene versión no soportada %u" -#: replication/slot.c:1564 +#: replication/slot.c:1649 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "el archivo de slot de replicación «%s» tiene largo corrupto %u" -#: replication/slot.c:1600 +#: replication/slot.c:1685 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "suma de verificación no coincidenete en archivo de slot de replicación «%s»: es %u, debería ser %u" # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/slot.c:1634 +#: replication/slot.c:1719 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "existe el slot de replicación lógica «%s», pero wal_level < logical" -#: replication/slot.c:1636 +#: replication/slot.c:1721 #, c-format msgid "Change wal_level to be logical or higher." msgstr "Cambie wal_level a logical o superior." # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/slot.c:1640 +#: replication/slot.c:1725 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "existe el slot de replicación lógica «%s», pero wal_level < logical" # <> hello vim -#: replication/slot.c:1642 +#: replication/slot.c:1727 #, c-format msgid "Change wal_level to be replica or higher." msgstr "Cambie wal_level a replica o superior." -#: replication/slot.c:1676 +#: replication/slot.c:1761 #, c-format msgid "too many replication slots active before shutdown" msgstr "demasiados slots de replicacion activos antes del apagado" -#: replication/slotfuncs.c:582 +#: replication/slotfuncs.c:624 #, c-format msgid "invalid target WAL LSN" msgstr "el LSN de wal de destino no es válido" -#: replication/slotfuncs.c:604 +#: replication/slotfuncs.c:646 #, fuzzy, c-format #| msgid "replication slot \"%s\" does not exist" msgid "replication slot \"%s\" cannot be advanced" msgstr "no existe el slot de replicación «%s»" -#: replication/slotfuncs.c:622 +#: replication/slotfuncs.c:664 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "no puede avanzar un slot de replicación a %X/%X, el mínimo es %X/%X" -#: replication/slotfuncs.c:719 +#: replication/slotfuncs.c:772 #, c-format msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "no se puede copiar el slot de replicación física «%s» como slot de replicación lógica" -#: replication/slotfuncs.c:721 +#: replication/slotfuncs.c:774 #, c-format msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "no se puede copiar el slot de replicación lógica «%s» como slot de replicación física" -#: replication/slotfuncs.c:730 +#: replication/slotfuncs.c:781 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "no puede copiar un slot de replicación que no ha reservado WAL" -#: replication/slotfuncs.c:805 +#: replication/slotfuncs.c:857 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "no se pudo copiar el slot de replicación «%s»" -#: replication/slotfuncs.c:807 +#: replication/slotfuncs.c:859 #, c-format msgid "The source replication slot was modified incompatibly during the copy operation." msgstr "El slot de replicación de origen fue modificado incompatiblemente durante la operación de copia." -#: replication/slotfuncs.c:813 +#: replication/slotfuncs.c:865 #, fuzzy, c-format #| msgid "could not copy replication slot \"%s\"" msgid "cannot copy unfinished logical replication slot \"%s\"" msgstr "no se pudo copiar el slot de replicación «%s»" -#: replication/slotfuncs.c:815 +#: replication/slotfuncs.c:867 #, c-format msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." -msgstr "" +msgstr "Reintente cuando el confirmed_flush_lsn del slot de replicación de origen sea válido." #: replication/syncrep.c:257 #, c-format @@ -18908,135 +18819,135 @@ msgstr "trayendo el archivo de historia del timeline para el timeline %u desde e msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "no se pudo escribir al segmento de log %s en la posición %u, largo %lu: %m" -#: replication/walsender.c:540 storage/smgr/md.c:1291 +#: replication/walsender.c:523 storage/smgr/md.c:1291 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "no se pudo posicionar (seek) al fin del archivo «%s»: %m" -#: replication/walsender.c:544 +#: replication/walsender.c:527 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "no se pudo posicionar (seek) al comienzo del archivo «%s»: %m" -#: replication/walsender.c:595 +#: replication/walsender.c:578 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "IDENTIFY_SYSTEM no se ha ejecutado antes de START_REPLICATION" -#: replication/walsender.c:612 +#: replication/walsender.c:607 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "no se puede usar un slot de replicación lógica para replicación física" -#: replication/walsender.c:681 +#: replication/walsender.c:676 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "el punto de inicio solicitado %X/%X del timeline %u no está en la historia de este servidor" -#: replication/walsender.c:685 +#: replication/walsender.c:680 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "La historia de este servidor bifurcó desde el timeline %u en %X/%X." -#: replication/walsender.c:730 +#: replication/walsender.c:725 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "el punto de inicio solicitado %X/%X está más adelante que la posición de sincronización (flush) de WAL de este servidor %X/%X" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:981 +#: replication/walsender.c:976 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s no debe ser ejecutado dentro de una transacción" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:991 +#: replication/walsender.c:986 #, c-format msgid "%s must be called inside a transaction" msgstr "%s no debe ser ejecutado dentro de una transacción" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:997 +#: replication/walsender.c:992 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s debe llamarse en una transacción de modo de aislamiento REPEATABLE READ" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1003 +#: replication/walsender.c:998 #, c-format msgid "%s must be called before any query" msgstr "%s debe ser llamado antes de cualquier consulta" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1009 +#: replication/walsender.c:1004 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s no está permitido en una subtransacción" -#: replication/walsender.c:1157 +#: replication/walsender.c:1152 #, fuzzy, c-format #| msgid "created temporary replication slot \"%s\"" msgid "cannot read from logical replication slot \"%s\"" msgstr "se creó slot temporal de replicación «%s»" -#: replication/walsender.c:1159 +#: replication/walsender.c:1154 #, c-format msgid "This slot has been invalidated because it exceeded the maximum reserved size." -msgstr "" +msgstr "Este slot ha sido invalidado porque excedió el máximo del tamaño de reserva." -#: replication/walsender.c:1169 +#: replication/walsender.c:1164 #, c-format msgid "terminating walsender process after promotion" msgstr "terminando el proceso walsender luego de la promoción" -#: replication/walsender.c:1552 +#: replication/walsender.c:1538 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "no puede ejecutar nuevas órdenes mientras el «WAL sender» está en modo de apagarse" -#: replication/walsender.c:1585 +#: replication/walsender.c:1571 #, c-format msgid "received replication command: %s" msgstr "se recibió orden de replicación: %s" -#: replication/walsender.c:1601 tcop/fastpath.c:279 tcop/postgres.c:1103 +#: replication/walsender.c:1587 tcop/fastpath.c:279 tcop/postgres.c:1103 #: tcop/postgres.c:1455 tcop/postgres.c:1716 tcop/postgres.c:2174 #: tcop/postgres.c:2535 tcop/postgres.c:2614 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "transacción abortada, las órdenes serán ignoradas hasta el fin de bloque de transacción" -#: replication/walsender.c:1669 +#: replication/walsender.c:1657 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "no puede ejecutar órdenes SQL en el «WAL sender» para replicación física" -#: replication/walsender.c:1718 replication/walsender.c:1734 +#: replication/walsender.c:1706 replication/walsender.c:1722 #, c-format msgid "unexpected EOF on standby connection" msgstr "se encontró fin de archivo inesperado en la conexión standby" -#: replication/walsender.c:1748 +#: replication/walsender.c:1736 #, c-format msgid "unexpected standby message type \"%c\", after receiving CopyDone" msgstr "mensaje de standby de tipo «%c» inesperado, después de recibir CopyDone" -#: replication/walsender.c:1786 +#: replication/walsender.c:1774 #, c-format msgid "invalid standby message type \"%c\"" msgstr "el tipo «%c» de mensaje del standby no es válido" -#: replication/walsender.c:1827 +#: replication/walsender.c:1815 #, c-format msgid "unexpected message type \"%c\"" msgstr "mensaje de tipo «%c» inesperado" -#: replication/walsender.c:2245 +#: replication/walsender.c:2233 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "terminando el proceso walsender debido a que se agotó el tiempo de espera de replicación" -#: replication/walsender.c:2322 +#: replication/walsender.c:2310 #, c-format msgid "\"%s\" has now caught up with upstream server" msgstr "«%s» ha alcanzado al servidor de origen" @@ -19545,108 +19456,108 @@ msgstr "no se pueden acceder tablas temporales durante una operación paralela" msgid "could not open temporary file \"%s\" from BufFile \"%s\": %m" msgstr "no se pudo abrir archivo temporal «%s» del BufFile «%s»: %m" -#: storage/file/buffile.c:796 +#: storage/file/buffile.c:795 #, c-format msgid "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" msgstr "no se pudo determinar el tamaño del archivo temporal «%s» del BufFile «%s»: %m" -#: storage/file/fd.c:506 storage/file/fd.c:578 storage/file/fd.c:614 +#: storage/file/fd.c:508 storage/file/fd.c:580 storage/file/fd.c:616 #, c-format msgid "could not flush dirty data: %m" msgstr "no se pudo sincronizar (flush) datos «sucios»: %m" -#: storage/file/fd.c:536 +#: storage/file/fd.c:538 #, c-format msgid "could not determine dirty data size: %m" msgstr "no se pudo determinar el tamaño de los datos «sucios»: %m" -#: storage/file/fd.c:588 +#: storage/file/fd.c:590 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "no se pudo ejecutar munmap() mientras se sincronizaban (flush) datos: %m" -#: storage/file/fd.c:796 +#: storage/file/fd.c:798 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "no se pudo enlazar (link) el archivo «%s» a «%s»: %m" -#: storage/file/fd.c:879 +#: storage/file/fd.c:881 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit falló: %m" -#: storage/file/fd.c:969 +#: storage/file/fd.c:971 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "los descriptores de archivo disponibles son insuficientes para iniciar un proceso servidor" -#: storage/file/fd.c:970 +#: storage/file/fd.c:972 #, c-format msgid "System allows %d, we need at least %d." msgstr "El sistema permite %d, se requieren al menos %d." -#: storage/file/fd.c:1021 storage/file/fd.c:2355 storage/file/fd.c:2465 -#: storage/file/fd.c:2616 +#: storage/file/fd.c:1023 storage/file/fd.c:2357 storage/file/fd.c:2467 +#: storage/file/fd.c:2618 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "se agotaron los descriptores de archivo: %m; libere e intente nuevamente" -#: storage/file/fd.c:1395 +#: storage/file/fd.c:1397 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "archivo temporal: ruta «%s», tamaño %lu" -#: storage/file/fd.c:1526 +#: storage/file/fd.c:1528 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "no se pudo crear el directorio temporal «%s»: %m" -#: storage/file/fd.c:1533 +#: storage/file/fd.c:1535 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "no se pudo crear el subdirectorio temporal «%s»: %m" -#: storage/file/fd.c:1726 +#: storage/file/fd.c:1728 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "no se pudo crear el archivo temporal «%s»: %m" -#: storage/file/fd.c:1761 +#: storage/file/fd.c:1763 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "no se pudo abrir el archivo temporal «%s»: %m" -#: storage/file/fd.c:1802 +#: storage/file/fd.c:1804 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "no se pudo eliminar (unlink) el archivo temporal «%s»: %m" -#: storage/file/fd.c:2066 +#: storage/file/fd.c:2068 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "el tamaño del archivo temporal excede temp_file_limit permitido (%dkB)" -#: storage/file/fd.c:2331 storage/file/fd.c:2390 +#: storage/file/fd.c:2333 storage/file/fd.c:2392 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "se excedió maxAllocatedDescs (%d) mientras se trataba de abrir el archivo «%s»" -#: storage/file/fd.c:2435 +#: storage/file/fd.c:2437 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "se excedió maxAllocatedDescs (%d) mientras se trataba de ejecutar la orden «%s»" -#: storage/file/fd.c:2592 +#: storage/file/fd.c:2594 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "se excedió maxAllocatedDescs (%d) mientras se trataba de abrir el directorio «%s»" -#: storage/file/fd.c:3114 +#: storage/file/fd.c:3122 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "archivo inesperado en directorio de archivos temporales: «%s»" -#: storage/file/sharedfileset.c:95 +#: storage/file/sharedfileset.c:111 #, c-format msgid "could not attach to a SharedFileSet that is already destroyed" msgstr "no se puede adjuntar a un SharedFileSet que ya está destruido" @@ -19748,7 +19659,7 @@ msgstr "debe ser miembro del rol cuyo proceso se está terminando o ser miembro #: storage/lmgr/lock.c:1020 storage/lmgr/lock.c:2845 storage/lmgr/lock.c:4175 #: storage/lmgr/lock.c:4240 storage/lmgr/lock.c:4532 #: storage/lmgr/predicate.c:2401 storage/lmgr/predicate.c:2416 -#: storage/lmgr/predicate.c:3898 storage/lmgr/predicate.c:5006 +#: storage/lmgr/predicate.c:3898 storage/lmgr/predicate.c:5009 #: utils/hash/dynahash.c:1067 #, c-format msgid "out of shared memory" @@ -19805,7 +19716,7 @@ msgid "must be superuser to rotate log files with adminpack 1.0" msgstr "bebe ser superusuario para rotar archivos de log con adminpack 1.0" #. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:217 +#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:253 #, c-format msgid "Consider using %s, which is part of core, instead." msgstr "Considere usar %s, que es parte del servidor, en su lugar." @@ -19865,98 +19776,104 @@ msgstr "se ha detectado un deadlock" msgid "See server log for query details." msgstr "Vea el registro del servidor para obtener detalles de las consultas." -#: storage/lmgr/lmgr.c:815 +#: storage/lmgr/lmgr.c:830 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "mientras se actualizaba la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:818 +#: storage/lmgr/lmgr.c:833 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "mientras se borraba la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:821 +#: storage/lmgr/lmgr.c:836 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "mientras se bloqueaba la tupla (%u,%u) de la relación «%s»" -#: storage/lmgr/lmgr.c:824 +#: storage/lmgr/lmgr.c:839 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "mientras se bloqueaba la versión actualizada (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:827 +#: storage/lmgr/lmgr.c:842 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "mientras se insertaba la tupla de índice (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:830 +#: storage/lmgr/lmgr.c:845 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "mientras se verificaba la unicidad de la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:833 +#: storage/lmgr/lmgr.c:848 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "mientras se verificaba la tupla actualizada (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:836 +#: storage/lmgr/lmgr.c:851 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "mientras se verificaba una restricción de exclusión en la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:1091 +#: storage/lmgr/lmgr.c:1106 #, c-format msgid "relation %u of database %u" msgstr "relación %u de la base de datos %u" -#: storage/lmgr/lmgr.c:1097 +#: storage/lmgr/lmgr.c:1112 #, c-format msgid "extension of relation %u of database %u" msgstr "extensión de la relación %u de la base de datos %u" -#: storage/lmgr/lmgr.c:1103 +#: storage/lmgr/lmgr.c:1118 +#, fuzzy, c-format +#| msgid "relation %u of database %u" +msgid "pg_database.datfrozenxid of database %u" +msgstr "relación %u de la base de datos %u" + +#: storage/lmgr/lmgr.c:1123 #, c-format msgid "page %u of relation %u of database %u" msgstr "página %u de la relación %u de la base de datos %u" -#: storage/lmgr/lmgr.c:1110 +#: storage/lmgr/lmgr.c:1130 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "tupla (%u,%u) de la relación %u de la base de datos %u" -#: storage/lmgr/lmgr.c:1118 +#: storage/lmgr/lmgr.c:1138 #, c-format msgid "transaction %u" msgstr "transacción %u" -#: storage/lmgr/lmgr.c:1123 +#: storage/lmgr/lmgr.c:1143 #, c-format msgid "virtual transaction %d/%u" msgstr "transacción virtual %d/%u" -#: storage/lmgr/lmgr.c:1129 +#: storage/lmgr/lmgr.c:1149 #, c-format msgid "speculative token %u of transaction %u" msgstr "token especulativo %u de la transacción %u" -#: storage/lmgr/lmgr.c:1135 +#: storage/lmgr/lmgr.c:1155 #, c-format msgid "object %u of class %u of database %u" msgstr "objeto %u de clase %u de la base de datos %u" -#: storage/lmgr/lmgr.c:1143 +#: storage/lmgr/lmgr.c:1163 #, c-format msgid "user lock [%u,%u,%u]" msgstr "candado de usuario [%u,%u,%u]" # XXX is this a good translation? -#: storage/lmgr/lmgr.c:1150 +#: storage/lmgr/lmgr.c:1170 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "candado consultivo [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1158 +#: storage/lmgr/lmgr.c:1178 #, c-format msgid "unrecognized locktag type %d" msgstr "tipo de locktag %d no reconocido" @@ -20034,20 +19951,20 @@ msgstr "El proceso de origen con PID %d ya no está en ejecución." msgid "You might need to increase max_pred_locks_per_transaction." msgstr "Puede ser necesario incrementar max_pred_locks_per_transaction." -#: storage/lmgr/predicate.c:4030 storage/lmgr/predicate.c:4063 -#: storage/lmgr/predicate.c:4096 storage/lmgr/predicate.c:4104 -#: storage/lmgr/predicate.c:4143 storage/lmgr/predicate.c:4385 -#: storage/lmgr/predicate.c:4722 storage/lmgr/predicate.c:4734 -#: storage/lmgr/predicate.c:4777 storage/lmgr/predicate.c:4815 +#: storage/lmgr/predicate.c:4030 storage/lmgr/predicate.c:4066 +#: storage/lmgr/predicate.c:4099 storage/lmgr/predicate.c:4107 +#: storage/lmgr/predicate.c:4146 storage/lmgr/predicate.c:4388 +#: storage/lmgr/predicate.c:4725 storage/lmgr/predicate.c:4737 +#: storage/lmgr/predicate.c:4780 storage/lmgr/predicate.c:4818 #, c-format msgid "could not serialize access due to read/write dependencies among transactions" msgstr "no se pudo serializar el acceso debido a dependencias read/write entre transacciones" -#: storage/lmgr/predicate.c:4032 storage/lmgr/predicate.c:4065 -#: storage/lmgr/predicate.c:4098 storage/lmgr/predicate.c:4106 -#: storage/lmgr/predicate.c:4145 storage/lmgr/predicate.c:4387 -#: storage/lmgr/predicate.c:4724 storage/lmgr/predicate.c:4736 -#: storage/lmgr/predicate.c:4779 storage/lmgr/predicate.c:4817 +#: storage/lmgr/predicate.c:4032 storage/lmgr/predicate.c:4068 +#: storage/lmgr/predicate.c:4101 storage/lmgr/predicate.c:4109 +#: storage/lmgr/predicate.c:4148 storage/lmgr/predicate.c:4390 +#: storage/lmgr/predicate.c:4727 storage/lmgr/predicate.c:4739 +#: storage/lmgr/predicate.c:4782 storage/lmgr/predicate.c:4820 #, c-format msgid "The transaction might succeed if retried." msgstr "La transacción podría tener éxito si es reintentada." @@ -20686,7 +20603,7 @@ msgstr "marca de afijo «%s» no válida" #: tsearch/spell.c:384 tsearch/spell.c:1040 #, c-format msgid "affix flag \"%s\" is out of range" -msgstr "la marca de afijo «%s» está fuera de rango" +msgstr "la marca de afijo «%s» fuera de rango" #: tsearch/spell.c:414 #, c-format @@ -20709,7 +20626,7 @@ msgid "invalid regular expression: %s" msgstr "la expresión regular no es válida: %s" #: tsearch/spell.c:956 tsearch/spell.c:973 tsearch/spell.c:990 -#: tsearch/spell.c:1007 tsearch/spell.c:1072 gram.y:15990 gram.y:16007 +#: tsearch/spell.c:1007 tsearch/spell.c:1072 gram.y:15993 gram.y:16010 #, c-format msgid "syntax error" msgstr "error de sintaxis" @@ -20745,7 +20662,7 @@ msgstr "el número de aliases excede el número especificado %d" msgid "affix file contains both old-style and new-style commands" msgstr "el archivo de «affix» contiene órdenes en estilos antiguo y nuevo" -#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1129 +#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "la cadena es demasiado larga para tsvector (%d bytes, máximo %d bytes)" @@ -20787,27 +20704,27 @@ msgstr "no se pudo abrir el archivo de stopwords «%s»: %m" msgid "text search parser does not support headline creation" msgstr "el analizador de búsqueda en texto no soporta creación de encabezados (headline)" -#: tsearch/wparser_def.c:2587 +#: tsearch/wparser_def.c:2585 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "parámetro de encabezado (headline) no reconocido: «%s»" -#: tsearch/wparser_def.c:2597 +#: tsearch/wparser_def.c:2604 #, c-format msgid "MinWords should be less than MaxWords" msgstr "MinWords debería ser menor que MaxWords" -#: tsearch/wparser_def.c:2601 +#: tsearch/wparser_def.c:2608 #, c-format msgid "MinWords should be positive" msgstr "MinWords debería ser positivo" -#: tsearch/wparser_def.c:2605 +#: tsearch/wparser_def.c:2612 #, c-format msgid "ShortWord should be >= 0" msgstr "ShortWord debería ser >= 0" -#: tsearch/wparser_def.c:2609 +#: tsearch/wparser_def.c:2616 #, c-format msgid "MaxFragments should be >= 0" msgstr "MaxFragments debería ser >= 0" @@ -20946,7 +20863,7 @@ msgstr "el tipo de entrada no es un array" #: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 #: utils/adt/arrayfuncs.c:1336 utils/adt/float.c:1243 utils/adt/float.c:1317 -#: utils/adt/float.c:3925 utils/adt/float.c:3939 utils/adt/int.c:759 +#: utils/adt/float.c:3960 utils/adt/float.c:3974 utils/adt/int.c:759 #: utils/adt/int.c:781 utils/adt/int.c:795 utils/adt/int.c:809 #: utils/adt/int.c:840 utils/adt/int.c:861 utils/adt/int.c:978 #: utils/adt/int.c:992 utils/adt/int.c:1006 utils/adt/int.c:1039 @@ -20957,7 +20874,7 @@ msgstr "el tipo de entrada no es un array" #: utils/adt/varlena.c:1087 utils/adt/varlena.c:3377 #, c-format msgid "integer out of range" -msgstr "el entero está fuera de rango" +msgstr "entero fuera de rango" #: utils/adt/array_userfuncs.c:136 utils/adt/array_userfuncs.c:191 #, c-format @@ -21074,7 +20991,7 @@ msgstr "Elemento de array inesperado." #: utils/adt/arrayfuncs.c:591 #, c-format msgid "Unmatched \"%c\" character." -msgstr "Carácter «%c» sin pareja" +msgstr "Carácter «%c» desemparejado." #: utils/adt/arrayfuncs.c:599 utils/adt/jsonfuncs.c:2452 #, c-format @@ -21103,7 +21020,7 @@ msgid "wrong element type" msgstr "el tipo de elemento es erróneo" #: utils/adt/arrayfuncs.c:1367 utils/adt/rangetypes.c:335 -#: utils/cache/lsyscache.c:2786 +#: utils/cache/lsyscache.c:2835 #, c-format msgid "no binary input function available for type %s" msgstr "no hay una función binaria de entrada para el tipo %s" @@ -21114,7 +21031,7 @@ msgid "improper binary format in array element %d" msgstr "el formato binario no es válido en elemento %d de array" #: utils/adt/arrayfuncs.c:1588 utils/adt/rangetypes.c:340 -#: utils/cache/lsyscache.c:2819 +#: utils/cache/lsyscache.c:2868 #, c-format msgid "no binary output function available for type %s" msgstr "no hay una función binaria de salida para el tipo %s" @@ -21264,7 +21181,7 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "la conversión de codificación de %s a ASCII no está soportada" #. translator: first %s is inet or cidr -#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3770 +#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3757 #: utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:295 #: utils/adt/float.c:412 utils/adt/float.c:497 utils/adt/float.c:525 #: utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 @@ -21280,8 +21197,8 @@ msgstr "la conversión de codificación de %s a ASCII no está soportada" #: utils/adt/numutils.c:116 utils/adt/numutils.c:126 utils/adt/numutils.c:170 #: utils/adt/numutils.c:246 utils/adt/numutils.c:322 utils/adt/oid.c:44 #: utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 -#: utils/adt/pg_lsn.c:73 utils/adt/tid.c:73 utils/adt/tid.c:81 -#: utils/adt/tid.c:89 utils/adt/timestamp.c:493 utils/adt/uuid.c:136 +#: utils/adt/pg_lsn.c:73 utils/adt/tid.c:74 utils/adt/tid.c:82 +#: utils/adt/tid.c:90 utils/adt/timestamp.c:494 utils/adt/uuid.c:136 #: utils/adt/xid8funcs.c:346 #, c-format msgid "invalid input syntax for type %s: \"%s\"" @@ -21302,7 +21219,7 @@ msgstr "el valor «%s» está fuera de rango para el tipo %s" #: utils/adt/int.c:1148 utils/adt/int8.c:593 utils/adt/int8.c:651 #: utils/adt/int8.c:978 utils/adt/int8.c:1058 utils/adt/int8.c:1120 #: utils/adt/int8.c:1200 utils/adt/numeric.c:7446 utils/adt/numeric.c:7736 -#: utils/adt/numeric.c:9318 utils/adt/timestamp.c:3273 +#: utils/adt/numeric.c:9318 utils/adt/timestamp.c:3264 #, c-format msgid "division by zero" msgstr "división por cero" @@ -21310,155 +21227,155 @@ msgstr "división por cero" #: utils/adt/char.c:169 #, c-format msgid "\"char\" out of range" -msgstr "«char» está fuera de rango" +msgstr "«char» fuera de rango" -#: utils/adt/date.c:60 utils/adt/timestamp.c:94 utils/adt/varbit.c:104 +#: utils/adt/date.c:61 utils/adt/timestamp.c:95 utils/adt/varbit.c:104 #: utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "el modificador de tipo no es válido" -#: utils/adt/date.c:72 +#: utils/adt/date.c:73 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "la precisión de TIME(%d)%s no debe ser negativa" -#: utils/adt/date.c:78 +#: utils/adt/date.c:79 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "la precisión de TIME(%d)%s fue reducida al máximo permitido, %d" -#: utils/adt/date.c:157 utils/adt/date.c:165 utils/adt/formatting.c:4196 +#: utils/adt/date.c:158 utils/adt/date.c:166 utils/adt/formatting.c:4196 #: utils/adt/formatting.c:4205 utils/adt/formatting.c:4311 #: utils/adt/formatting.c:4321 #, c-format msgid "date out of range: \"%s\"" msgstr "fecha fuera de rango: «%s»" -#: utils/adt/date.c:212 utils/adt/date.c:524 utils/adt/date.c:548 +#: utils/adt/date.c:213 utils/adt/date.c:525 utils/adt/date.c:549 #: utils/adt/xml.c:2210 #, c-format msgid "date out of range" -msgstr "la fecha fuera de rango" +msgstr "fecha fuera de rango" -#: utils/adt/date.c:258 utils/adt/timestamp.c:573 +#: utils/adt/date.c:259 utils/adt/timestamp.c:574 #, c-format msgid "date field value out of range: %d-%02d-%02d" -msgstr "un valor en el campo de fecha está fuera de rango: %d-%02d-%02d" +msgstr "valor en campo de fecha fuera de rango: %d-%02d-%02d" -#: utils/adt/date.c:265 utils/adt/date.c:274 utils/adt/timestamp.c:579 +#: utils/adt/date.c:266 utils/adt/date.c:275 utils/adt/timestamp.c:580 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "fecha fuera de rango: %d-%02d-%02d" -#: utils/adt/date.c:312 utils/adt/date.c:335 utils/adt/date.c:361 -#: utils/adt/date.c:1169 utils/adt/date.c:1215 utils/adt/date.c:1716 -#: utils/adt/date.c:1747 utils/adt/date.c:1776 utils/adt/date.c:2608 -#: utils/adt/datetime.c:1660 utils/adt/formatting.c:4053 +#: utils/adt/date.c:313 utils/adt/date.c:336 utils/adt/date.c:362 +#: utils/adt/date.c:1170 utils/adt/date.c:1216 utils/adt/date.c:1772 +#: utils/adt/date.c:1803 utils/adt/date.c:1832 utils/adt/date.c:2664 +#: utils/adt/datetime.c:1655 utils/adt/formatting.c:4053 #: utils/adt/formatting.c:4085 utils/adt/formatting.c:4165 #: utils/adt/formatting.c:4287 utils/adt/json.c:418 utils/adt/json.c:457 -#: utils/adt/timestamp.c:221 utils/adt/timestamp.c:253 -#: utils/adt/timestamp.c:701 utils/adt/timestamp.c:710 -#: utils/adt/timestamp.c:788 utils/adt/timestamp.c:821 -#: utils/adt/timestamp.c:2852 utils/adt/timestamp.c:2873 -#: utils/adt/timestamp.c:2886 utils/adt/timestamp.c:2895 -#: utils/adt/timestamp.c:2903 utils/adt/timestamp.c:2958 -#: utils/adt/timestamp.c:2981 utils/adt/timestamp.c:2994 -#: utils/adt/timestamp.c:3005 utils/adt/timestamp.c:3013 -#: utils/adt/timestamp.c:3673 utils/adt/timestamp.c:3798 -#: utils/adt/timestamp.c:3839 utils/adt/timestamp.c:3929 -#: utils/adt/timestamp.c:3973 utils/adt/timestamp.c:4076 -#: utils/adt/timestamp.c:4561 utils/adt/timestamp.c:4757 -#: utils/adt/timestamp.c:5084 utils/adt/timestamp.c:5098 -#: utils/adt/timestamp.c:5103 utils/adt/timestamp.c:5117 -#: utils/adt/timestamp.c:5150 utils/adt/timestamp.c:5227 -#: utils/adt/timestamp.c:5268 utils/adt/timestamp.c:5272 -#: utils/adt/timestamp.c:5341 utils/adt/timestamp.c:5345 -#: utils/adt/timestamp.c:5359 utils/adt/timestamp.c:5393 utils/adt/xml.c:2232 +#: utils/adt/timestamp.c:222 utils/adt/timestamp.c:254 +#: utils/adt/timestamp.c:692 utils/adt/timestamp.c:701 +#: utils/adt/timestamp.c:779 utils/adt/timestamp.c:812 +#: utils/adt/timestamp.c:2843 utils/adt/timestamp.c:2864 +#: utils/adt/timestamp.c:2877 utils/adt/timestamp.c:2886 +#: utils/adt/timestamp.c:2894 utils/adt/timestamp.c:2949 +#: utils/adt/timestamp.c:2972 utils/adt/timestamp.c:2985 +#: utils/adt/timestamp.c:2996 utils/adt/timestamp.c:3004 +#: utils/adt/timestamp.c:3664 utils/adt/timestamp.c:3789 +#: utils/adt/timestamp.c:3830 utils/adt/timestamp.c:3920 +#: utils/adt/timestamp.c:3964 utils/adt/timestamp.c:4067 +#: utils/adt/timestamp.c:4552 utils/adt/timestamp.c:4748 +#: utils/adt/timestamp.c:5075 utils/adt/timestamp.c:5089 +#: utils/adt/timestamp.c:5094 utils/adt/timestamp.c:5108 +#: utils/adt/timestamp.c:5141 utils/adt/timestamp.c:5218 +#: utils/adt/timestamp.c:5259 utils/adt/timestamp.c:5263 +#: utils/adt/timestamp.c:5332 utils/adt/timestamp.c:5336 +#: utils/adt/timestamp.c:5350 utils/adt/timestamp.c:5384 utils/adt/xml.c:2232 #: utils/adt/xml.c:2239 utils/adt/xml.c:2259 utils/adt/xml.c:2266 #, c-format msgid "timestamp out of range" -msgstr "el timestamp está fuera de rango" +msgstr "timestamp fuera de rango" -#: utils/adt/date.c:499 +#: utils/adt/date.c:500 #, c-format msgid "cannot subtract infinite dates" msgstr "no se pueden restar fechas infinitas" -#: utils/adt/date.c:588 utils/adt/date.c:645 utils/adt/date.c:679 -#: utils/adt/date.c:2645 utils/adt/date.c:2655 +#: utils/adt/date.c:589 utils/adt/date.c:646 utils/adt/date.c:680 +#: utils/adt/date.c:2701 utils/adt/date.c:2711 #, c-format msgid "date out of range for timestamp" msgstr "fecha fuera de rango para timestamp" -#: utils/adt/date.c:1329 utils/adt/date.c:2103 utils/adt/formatting.c:4373 +#: utils/adt/date.c:1389 utils/adt/date.c:2159 utils/adt/formatting.c:4373 #, c-format msgid "time out of range" msgstr "hora fuera de rango" -#: utils/adt/date.c:1385 utils/adt/timestamp.c:598 +#: utils/adt/date.c:1441 utils/adt/timestamp.c:589 #, c-format msgid "time field value out of range: %d:%02d:%02g" -msgstr "un valor en el campo de hora está fuera de rango: %d:%02d:%02g" +msgstr "valor en campo de hora fuera de rango: %d:%02d:%02g" -#: utils/adt/date.c:1905 utils/adt/date.c:2407 utils/adt/float.c:1071 +#: utils/adt/date.c:1961 utils/adt/date.c:2463 utils/adt/float.c:1071 #: utils/adt/float.c:1140 utils/adt/int.c:616 utils/adt/int.c:663 #: utils/adt/int.c:698 utils/adt/int8.c:492 utils/adt/numeric.c:2197 -#: utils/adt/timestamp.c:3322 utils/adt/timestamp.c:3353 -#: utils/adt/timestamp.c:3384 +#: utils/adt/timestamp.c:3313 utils/adt/timestamp.c:3344 +#: utils/adt/timestamp.c:3375 #, c-format msgid "invalid preceding or following size in window function" msgstr "tamaño «preceding» o «following» no válido en ventana deslizante" -#: utils/adt/date.c:1990 utils/adt/date.c:2003 +#: utils/adt/date.c:2046 utils/adt/date.c:2059 #, c-format msgid "\"time\" units \"%s\" not recognized" msgstr "las unidades de «time» «%s» no son reconocidas" -#: utils/adt/date.c:2111 +#: utils/adt/date.c:2167 #, c-format msgid "time zone displacement out of range" msgstr "desplazamiento de huso horario fuera de rango" -#: utils/adt/date.c:2740 utils/adt/date.c:2753 +#: utils/adt/date.c:2796 utils/adt/date.c:2809 #, c-format msgid "\"time with time zone\" units \"%s\" not recognized" msgstr "las unidades de «timestamp with time zone» «%s» no son reconocidas" -#: utils/adt/date.c:2826 utils/adt/datetime.c:906 utils/adt/datetime.c:1818 -#: utils/adt/datetime.c:4614 utils/adt/timestamp.c:512 -#: utils/adt/timestamp.c:539 utils/adt/timestamp.c:4159 -#: utils/adt/timestamp.c:5109 utils/adt/timestamp.c:5351 +#: utils/adt/date.c:2882 utils/adt/datetime.c:906 utils/adt/datetime.c:1813 +#: utils/adt/datetime.c:4601 utils/adt/timestamp.c:513 +#: utils/adt/timestamp.c:540 utils/adt/timestamp.c:4150 +#: utils/adt/timestamp.c:5100 utils/adt/timestamp.c:5342 #, c-format msgid "time zone \"%s\" not recognized" msgstr "el huso horario «%s» no es reconocido" -#: utils/adt/date.c:2858 utils/adt/timestamp.c:5139 utils/adt/timestamp.c:5382 +#: utils/adt/date.c:2914 utils/adt/timestamp.c:5130 utils/adt/timestamp.c:5373 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "el intervalo de huso horario «%s» no debe especificar meses o días" -#: utils/adt/datetime.c:3743 utils/adt/datetime.c:3750 +#: utils/adt/datetime.c:3730 utils/adt/datetime.c:3737 #, c-format msgid "date/time field value out of range: \"%s\"" -msgstr "el valor de hora/fecha está fuera de rango: «%s»" +msgstr "valor de hora/fecha fuera de rango: «%s»" -#: utils/adt/datetime.c:3752 +#: utils/adt/datetime.c:3739 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." msgstr "Quizás necesite una configuración diferente de «datestyle»." -#: utils/adt/datetime.c:3757 +#: utils/adt/datetime.c:3744 #, c-format msgid "interval field value out of range: \"%s\"" -msgstr "el valor de interval está fuera de rango: «%s»" +msgstr "valor de interval fuera de rango: «%s»" -#: utils/adt/datetime.c:3763 +#: utils/adt/datetime.c:3750 #, c-format msgid "time zone displacement out of range: \"%s\"" -msgstr "el desplazamiento de huso horario está fuera de rango: «%s»" +msgstr "desplazamiento de huso horario fuera de rango: «%s»" -#: utils/adt/datetime.c:4616 +#: utils/adt/datetime.c:4603 #, c-format msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "Este nombre de huso horario aparece en el archivo de configuración para abreviaciones de husos horarios «%s»." @@ -21495,14 +21412,14 @@ msgstr "no se reconoce la codificación: «%s»" #: utils/adt/encode.c:78 #, fuzzy, c-format -#| msgid "encoding conversion from %s to ASCII not supported" +#| msgid "result of decoding conversion is too large" msgid "result of encoding conversion is too large" -msgstr "la conversión de codificación de %s a ASCII no está soportada" +msgstr "el resultado de la conversión de codificación es demasiado grande" #: utils/adt/encode.c:126 #, c-format msgid "result of decoding conversion is too large" -msgstr "" +msgstr "el resultado de la conversión de codificación es demasiado grande" #: utils/adt/encode.c:184 #, c-format @@ -21536,8 +21453,8 @@ msgstr "A los datos de entrada les falta relleno, o están truncados, o están c #: utils/adt/encode.c:476 utils/adt/encode.c:541 utils/adt/jsonfuncs.c:619 #: utils/adt/varlena.c:319 utils/adt/varlena.c:360 jsonpath_gram.y:528 -#: jsonpath_scan.l:515 jsonpath_scan.l:526 jsonpath_scan.l:536 -#: jsonpath_scan.l:578 +#: jsonpath_scan.l:519 jsonpath_scan.l:530 jsonpath_scan.l:540 +#: jsonpath_scan.l:582 #, c-format msgid "invalid input syntax for type %s" msgstr "sintaxis de entrada no válida para tipo %s" @@ -21587,10 +21504,10 @@ msgid "value out of range: overflow" msgstr "valor fuera de rango: desbordamiento" #: utils/adt/float.c:96 -#, fuzzy, c-format +#, c-format #| msgid "value out of range: overflow" msgid "value out of range: underflow" -msgstr "valor fuera de rango: desbordamiento" +msgstr "valor fuera de rango: desbordamiento por abajo" #: utils/adt/float.c:265 #, c-format @@ -21608,7 +21525,7 @@ msgstr "«%s» está fuera de rango para el tipo double precision" #: utils/adt/int8.c:1313 utils/adt/numeric.c:3553 utils/adt/numeric.c:3562 #, c-format msgid "smallint out of range" -msgstr "smallint está fuera de rango" +msgstr "smallint fuera de rango" #: utils/adt/float.c:1468 utils/adt/numeric.c:8329 #, c-format @@ -21649,22 +21566,22 @@ msgstr "la entrada está fuera de rango" msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "parámetro setseed %g fuera del rango permitido [-1,1]" -#: utils/adt/float.c:3903 utils/adt/numeric.c:1509 +#: utils/adt/float.c:3938 utils/adt/numeric.c:1509 #, c-format msgid "count must be greater than zero" msgstr "count debe ser mayor que cero" -#: utils/adt/float.c:3908 utils/adt/numeric.c:1516 +#: utils/adt/float.c:3943 utils/adt/numeric.c:1516 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "el operando, límite inferior y límite superior no pueden ser NaN" -#: utils/adt/float.c:3914 +#: utils/adt/float.c:3949 #, c-format msgid "lower and upper bounds must be finite" msgstr "los límites inferior y superior deben ser finitos" -#: utils/adt/float.c:3948 utils/adt/numeric.c:1529 +#: utils/adt/float.c:3983 utils/adt/numeric.c:1529 #, c-format msgid "lower bound cannot equal upper bound" msgstr "el límite superior no puede ser igual al límite inferior" @@ -21751,9 +21668,9 @@ msgstr "«EEEE» sólo puede ser usado en conjunción con patrones de dígitos y #: utils/adt/formatting.c:1392 #, fuzzy, c-format -#| msgid "invalid value for parameter \"%s\": \"%s\"" +#| msgid "unmatched format separator \"%c\"" msgid "invalid datetime format separator: \"%s\"" -msgstr "valor no válido para el parámetro «%s»: «%s»" +msgstr "separador de formato «%c» desemparejado" #: utils/adt/formatting.c:1520 #, c-format @@ -21850,7 +21767,7 @@ msgstr "cadena traducida en cadena de formato es demasiado larga" #: utils/adt/formatting.c:3298 #, c-format msgid "unmatched format separator \"%c\"" -msgstr "" +msgstr "separador de formato «%c» desemparejado" #: utils/adt/formatting.c:3453 utils/adt/formatting.c:3797 #, c-format @@ -21863,47 +21780,47 @@ msgid "invalid input string for \"Y,YYY\"" msgstr "cadena de entrada no válida para «Y,YYY»" #: utils/adt/formatting.c:3714 -#, fuzzy, c-format +#, c-format #| msgid "source string too short for \"%s\" formatting field" msgid "input string is too short for datetime format" -msgstr "cadena de texto fuente muy corta para campo formateado \"%s\" " +msgstr "cadena de entrada muy corta para formato de fecha/hora" #: utils/adt/formatting.c:3722 #, c-format msgid "trailing characters remain in input string after datetime format" -msgstr "" +msgstr "quedan caracteres al final de la cadena de entrada después del formato fecha/hora" #: utils/adt/formatting.c:4267 #, c-format msgid "missing time zone in input string for type timestamptz" -msgstr "" +msgstr "falta el huso horario en la cadena de entrada para el tipo timestamptz" #: utils/adt/formatting.c:4273 -#, fuzzy, c-format +#, c-format #| msgid "timestamp out of range" msgid "timestamptz out of range" -msgstr "el timestamp está fuera de rango" +msgstr "timestamptz fuera de rango" #: utils/adt/formatting.c:4301 #, c-format msgid "datetime format is zoned but not timed" -msgstr "" +msgstr "el formato de fecha/hora tiene huso horario pero no hora" #: utils/adt/formatting.c:4353 #, c-format msgid "missing time zone in input string for type timetz" -msgstr "" +msgstr "falta el huso horario en la cadena de entrada del tipo timetz" #: utils/adt/formatting.c:4359 -#, fuzzy, c-format +#, c-format #| msgid "time out of range" msgid "timetz out of range" -msgstr "hora fuera de rango" +msgstr "timetz fuera de rango" #: utils/adt/formatting.c:4385 #, c-format msgid "datetime format is not dated and not timed" -msgstr "" +msgstr "el formato de fecha/hora no tiene fecha ni hora" #: utils/adt/formatting.c:4518 #, c-format @@ -21945,19 +21862,25 @@ msgstr "no se permiten rutas absolutas" msgid "path must be in or below the current directory" msgstr "la ruta debe estar en o debajo del directorio actual" -#: utils/adt/genfile.c:138 utils/adt/oracle_compat.c:184 -#: utils/adt/oracle_compat.c:282 utils/adt/oracle_compat.c:758 -#: utils/adt/oracle_compat.c:1053 +#: utils/adt/genfile.c:116 utils/adt/oracle_compat.c:185 +#: utils/adt/oracle_compat.c:283 utils/adt/oracle_compat.c:759 +#: utils/adt/oracle_compat.c:1054 #, c-format msgid "requested length too large" msgstr "el tamaño solicitado es demasiado grande" -#: utils/adt/genfile.c:155 +#: utils/adt/genfile.c:133 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "no se pudo posicionar (seek) el archivo «%s»: %m" -#: utils/adt/genfile.c:215 +#: utils/adt/genfile.c:174 +#, fuzzy, c-format +#| msgid "requested length too large" +msgid "file length too large" +msgstr "el tamaño solicitado es demasiado grande" + +#: utils/adt/genfile.c:251 #, c-format msgid "must be superuser to read files with adminpack 1.0" msgstr "Debe ser superusuario leer archivos con adminpack 1.0." @@ -22055,7 +21978,7 @@ msgid "oidvector has too many elements" msgstr "el oidvector tiene demasiados elementos" #: utils/adt/int.c:1510 utils/adt/int8.c:1439 utils/adt/numeric.c:1417 -#: utils/adt/timestamp.c:5444 utils/adt/timestamp.c:5524 +#: utils/adt/timestamp.c:5435 utils/adt/timestamp.c:5515 #, c-format msgid "step size cannot equal zero" msgstr "el tamaño de paso no puede ser cero" @@ -22073,12 +21996,12 @@ msgstr "el tamaño de paso no puede ser cero" #: utils/adt/varbit.c:1656 #, c-format msgid "bigint out of range" -msgstr "bigint está fuera de rango" +msgstr "bigint fuera de rango" #: utils/adt/int8.c:1396 #, c-format msgid "OID out of range" -msgstr "OID está fuera de rango" +msgstr "OID fuera de rango" #: utils/adt/json.c:271 utils/adt/jsonb.c:757 #, c-format @@ -22221,7 +22144,7 @@ msgstr "no se puede invocar %s en un escalar" msgid "cannot call %s on an array" msgstr "no se puede invocar %s en un array" -#: utils/adt/jsonfuncs.c:613 jsonpath_scan.l:494 +#: utils/adt/jsonfuncs.c:613 jsonpath_scan.l:498 #, c-format msgid "unsupported Unicode escape sequence" msgstr "secuencia de escape Unicode no soportado" @@ -22343,7 +22266,7 @@ msgstr "no se puede definir una ruta en un escalar" #: utils/adt/jsonfuncs.c:4537 utils/adt/jsonfuncs.c:4579 #, c-format msgid "null_value_treatment must be \"delete_key\", \"return_target\", \"use_json_null\", or \"raise_exception\"" -msgstr "" +msgstr "null_value_treatment debe ser «delete_key», «return_target», «use_json_null», o «raise_exception»" #: utils/adt/jsonfuncs.c:4550 #, fuzzy, c-format @@ -22354,12 +22277,12 @@ msgstr "el nombre de slot no debe ser null" #: utils/adt/jsonfuncs.c:4551 #, c-format msgid "Exception was raised because null_value_treatment is \"raise_exception\"." -msgstr "" +msgstr "Una excepción fue lanzada porque null_value_treatment es «raise_exception»." #: utils/adt/jsonfuncs.c:4552 #, c-format msgid "To avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not passed." -msgstr "" +msgstr "Para impedir esto, puede cambiar el argumento null_value_treatment o asegurarse que no se pase un nulo SQL." #: utils/adt/jsonfuncs.c:4607 #, c-format @@ -22471,78 +22394,90 @@ msgstr "el método de acesso comodín de objeto jsonpath sólo puede aplicarse a msgid "jsonpath item method .%s() can only be applied to an array" msgstr "el método de ítem jsonpath .%s() sólo puede aplicase a un array" -#: utils/adt/jsonpath_exec.c:1058 utils/adt/jsonpath_exec.c:1079 -#: utils/adt/jsonpath_exec.c:1755 +#: utils/adt/jsonpath_exec.c:1059 +#, fuzzy, c-format +#| msgid "string argument of jsonpath item method .%s() is not a valid representation of a double precision number" +msgid "numeric argument of jsonpath item method .%s() is out of range for type double precision" +msgstr "el argumento cadena del método de item jsonpath .%s() no es una representación válida de un número de precisión doble" + +#: utils/adt/jsonpath_exec.c:1080 #, c-format -msgid "jsonpath item method .%s() can only be applied to a numeric value" -msgstr "el método de ítem jsonpath .%s() sólo puede aplicarse a un valor numérico" +msgid "string argument of jsonpath item method .%s() is not a valid representation of a double precision number" +msgstr "el argumento cadena del método de item jsonpath .%s() no es una representación válida de un número de precisión doble" -#: utils/adt/jsonpath_exec.c:1092 +#: utils/adt/jsonpath_exec.c:1093 #, c-format msgid "jsonpath item method .%s() can only be applied to a string or numeric value" msgstr "el método de ítem jsonpath .%s() sólo puede aplicarse a un valor numérico o de cadena" -#: utils/adt/jsonpath_exec.c:1582 +#: utils/adt/jsonpath_exec.c:1583 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "el operando izquiero del operador jsonpath %s no es un valor numérico escalar" -#: utils/adt/jsonpath_exec.c:1589 +#: utils/adt/jsonpath_exec.c:1590 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "el operando derecho del operador jsonpath %s no es un valor numérico escalar" -#: utils/adt/jsonpath_exec.c:1657 +#: utils/adt/jsonpath_exec.c:1658 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "el operando del operador jsonpath unario %s no es un valor numérico" -#: utils/adt/jsonpath_exec.c:1795 -#, fuzzy, c-format +#: utils/adt/jsonpath_exec.c:1756 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a numeric value" +msgstr "el método de ítem jsonpath .%s() sólo puede aplicarse a un valor numérico" + +#: utils/adt/jsonpath_exec.c:1796 +#, c-format #| msgid "jsonpath item method .%s() can only be applied to an array" msgid "jsonpath item method .%s() can only be applied to a string" -msgstr "el método de ítem jsonpath .%s() sólo puede aplicase a un array" +msgstr "el método de ítem jsonpath .%s() sólo puede aplicase a una cadena" -#: utils/adt/jsonpath_exec.c:1883 -#, fuzzy, c-format -#| msgid "COPY format \"%s\" not recognized" +#: utils/adt/jsonpath_exec.c:1884 +#, c-format +#| msgid "datetime format is not dated and not timed" msgid "datetime format is not recognized: \"%s\"" -msgstr "el formato de COPY «%s» no es reconocido" +msgstr "el formato de fecha/hora no se reconoce: «%s»" -#: utils/adt/jsonpath_exec.c:1885 +#: utils/adt/jsonpath_exec.c:1886 #, c-format msgid "Use a datetime template argument to specify the input data format." -msgstr "" +msgstr "Use un argumento de patrón fecha/hora para especificar el formato de entrada del dato." -#: utils/adt/jsonpath_exec.c:1953 +#: utils/adt/jsonpath_exec.c:1954 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "el método de ítem jsonpath .%s() sólo puede ser aplicado a un objeto" -#: utils/adt/jsonpath_exec.c:2136 +#: utils/adt/jsonpath_exec.c:2137 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "no se pudo encontrar la variable jsonpath «%s»" -#: utils/adt/jsonpath_exec.c:2400 +#: utils/adt/jsonpath_exec.c:2401 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "el subíndice de array jsonpath no es un único valor numérico" -#: utils/adt/jsonpath_exec.c:2412 +#: utils/adt/jsonpath_exec.c:2413 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "subíndice de array jsonpath fuera del rango entero" -#: utils/adt/jsonpath_exec.c:2589 +#: utils/adt/jsonpath_exec.c:2590 #, c-format +#| msgid "cannot convert value from %s to %s without time zone usage" msgid "cannot convert value from %s to %s without timezone usage" -msgstr "" +msgstr "no se puede convertir el valor de %s a %s sin uso de huso horario" -#: utils/adt/jsonpath_exec.c:2591 +#: utils/adt/jsonpath_exec.c:2592 #, c-format +#| msgid "Use *_tz() function for time zone support." msgid "Use *_tz() function for timezone support." -msgstr "" +msgstr "Utilice una función *_tz() para el soporte de huso horario." #: utils/adt/levenshtein.c:133 #, c-format @@ -22554,7 +22489,7 @@ msgstr "el argumento levenshtein excede el largo máximo de %d caracteres" msgid "nondeterministic collations are not supported for LIKE" msgstr "los ordenamientos no determinísticos no están soportados para LIKE" -#: utils/adt/like.c:193 utils/adt/like_support.c:1004 +#: utils/adt/like.c:193 utils/adt/like_support.c:1002 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "no se pudo determinar qué ordenamiento (collation) usar para ILIKE" @@ -22579,12 +22514,12 @@ msgstr "cadena de escape no válida" msgid "Escape string must be empty or one character." msgstr "La cadena de escape debe ser vacía o un carácter." -#: utils/adt/like_support.c:989 +#: utils/adt/like_support.c:987 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "no está soportada la comparación insensible a mayúsculas en bytea" -#: utils/adt/like_support.c:1091 +#: utils/adt/like_support.c:1089 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "no está soportada la comparación con expresiones regulares en bytea" @@ -22604,64 +22539,64 @@ msgstr "datos macaddr8 fuera de rango para convertir a macaddr" msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." msgstr "Sólo las direcciones que tienen FF y FF como valores en el cuarto y quinto bytes desde la izquierda, por ejemplo xx:xx:xx:ff:fe:xx:xx:xx se pueden convertir de macaddr8 a macaddr." -#: utils/adt/misc.c:239 +#: utils/adt/misc.c:240 #, c-format msgid "global tablespace never has databases" msgstr "el tablespace global nunca tiene bases de datos" -#: utils/adt/misc.c:261 +#: utils/adt/misc.c:262 #, c-format msgid "%u is not a tablespace OID" msgstr "%u no es un OID de tablespace" -#: utils/adt/misc.c:447 +#: utils/adt/misc.c:448 msgid "unreserved" msgstr "no reservado" -#: utils/adt/misc.c:451 +#: utils/adt/misc.c:452 msgid "unreserved (cannot be function or type name)" msgstr "no reservado (no puede ser nombre de función o de tipo)" -#: utils/adt/misc.c:455 +#: utils/adt/misc.c:456 msgid "reserved (can be function or type name)" msgstr "reservado (puede ser nombre de función o de tipo)" -#: utils/adt/misc.c:459 +#: utils/adt/misc.c:460 msgid "reserved" msgstr "reservado" -#: utils/adt/misc.c:633 utils/adt/misc.c:647 utils/adt/misc.c:686 -#: utils/adt/misc.c:692 utils/adt/misc.c:698 utils/adt/misc.c:721 +#: utils/adt/misc.c:634 utils/adt/misc.c:648 utils/adt/misc.c:687 +#: utils/adt/misc.c:693 utils/adt/misc.c:699 utils/adt/misc.c:722 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "la cadena no es un identificador válido: «%s»" -#: utils/adt/misc.c:635 +#: utils/adt/misc.c:636 #, c-format msgid "String has unclosed double quotes." msgstr "La cadena tiene comillas dobles sin cerrar." -#: utils/adt/misc.c:649 +#: utils/adt/misc.c:650 #, c-format msgid "Quoted identifier must not be empty." msgstr "El identificador en comillas no debe ser vacío." -#: utils/adt/misc.c:688 +#: utils/adt/misc.c:689 #, c-format msgid "No valid identifier before \".\"." msgstr "No hay un identificador válido antes de «.»." -#: utils/adt/misc.c:694 +#: utils/adt/misc.c:695 #, c-format msgid "No valid identifier after \".\"." msgstr "No hay un identificador válido después de «.»." -#: utils/adt/misc.c:755 +#: utils/adt/misc.c:753 #, c-format msgid "log format \"%s\" is not supported" msgstr "el formato de log «%s» no está soportado" -#: utils/adt/misc.c:756 +#: utils/adt/misc.c:754 #, c-format msgid "The supported log formats are \"stderr\" and \"csvlog\"." msgstr "Los formatos de registro admitidos son \"stderr\" y \"csvlog\"." @@ -22733,7 +22668,7 @@ msgstr "no se puede hacer OR entre valores inet de distintos tamaños" #: utils/adt/network.c:2009 utils/adt/network.c:2085 #, c-format msgid "result is out of range" -msgstr "resultado fuera de rango" +msgstr "el resultado está fuera de rango" #: utils/adt/network.c:2050 #, c-format @@ -22832,22 +22767,22 @@ msgstr "el valor «%s» está fuera de rango para un entero de 8 bits" msgid "invalid oidvector data" msgstr "datos de oidvector no válidos" -#: utils/adt/oracle_compat.c:895 +#: utils/adt/oracle_compat.c:896 #, c-format msgid "requested character too large" msgstr "el carácter solicitado es demasiado grande" -#: utils/adt/oracle_compat.c:945 utils/adt/oracle_compat.c:1007 +#: utils/adt/oracle_compat.c:946 utils/adt/oracle_compat.c:1008 #, c-format msgid "requested character too large for encoding: %d" msgstr "el carácter pedido es demasiado largo para el encoding: %d" -#: utils/adt/oracle_compat.c:986 +#: utils/adt/oracle_compat.c:987 #, c-format msgid "requested character not valid for encoding: %d" msgstr "el carácter pedido no es válido para el encoding: %d" -#: utils/adt/oracle_compat.c:1000 +#: utils/adt/oracle_compat.c:1001 #, c-format msgid "null character not permitted" msgstr "el carácter nulo no está permitido" @@ -22925,10 +22860,10 @@ msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s msgstr "Reconstruya todos los objetos afectados por este ordenamiento y ejecute ALTER COLLATION %s REFRESH VERSION, o construya PostgreSQL con la versión correcta de la biblioteca." #: utils/adt/pg_locale.c:1747 -#, fuzzy, c-format +#, c-format #| msgid "could not start process for command \"%s\": error code %lu" msgid "could not get collation version for locale \"%s\": error code %lu" -msgstr "no se pudo iniciar el proceso para la orden «%s»: código de error %lu" +msgstr "no se pudo obtener la versión de «collation» para la configuración regional «%s»: código de error %lu" #: utils/adt/pg_locale.c:1784 #, c-format @@ -23087,12 +23022,12 @@ msgstr "existe más de una función llamada «%s»" msgid "more than one operator named %s" msgstr "existe más de un operador llamado %s" -#: utils/adt/regproc.c:692 utils/adt/regproc.c:733 gram.y:8228 +#: utils/adt/regproc.c:692 utils/adt/regproc.c:733 gram.y:8223 #, c-format msgid "missing argument" msgstr "falta un argumento" -#: utils/adt/regproc.c:693 utils/adt/regproc.c:734 gram.y:8229 +#: utils/adt/regproc.c:693 utils/adt/regproc.c:734 gram.y:8224 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Use NONE para denotar el argumento faltante de un operador unario." @@ -23135,83 +23070,83 @@ msgstr "se esperaba un nombre de tipo" msgid "improper type name" msgstr "el nombre de tipo no es válido" -#: utils/adt/ri_triggers.c:296 utils/adt/ri_triggers.c:1532 -#: utils/adt/ri_triggers.c:2460 +#: utils/adt/ri_triggers.c:296 utils/adt/ri_triggers.c:1537 +#: utils/adt/ri_triggers.c:2470 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "inserción o actualización en la tabla «%s» viola la llave foránea «%s»" -#: utils/adt/ri_triggers.c:299 utils/adt/ri_triggers.c:1535 +#: utils/adt/ri_triggers.c:299 utils/adt/ri_triggers.c:1540 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL no permite la mezcla de valores de clave nulos y no nulos." -#: utils/adt/ri_triggers.c:1930 +#: utils/adt/ri_triggers.c:1940 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "la función «%s» debe ser ejecutada en INSERT" -#: utils/adt/ri_triggers.c:1936 +#: utils/adt/ri_triggers.c:1946 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "la función «%s» debe ser ejecutada en UPDATE" -#: utils/adt/ri_triggers.c:1942 +#: utils/adt/ri_triggers.c:1952 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "la función «%s» debe ser ejecutada en DELETE" -#: utils/adt/ri_triggers.c:1965 +#: utils/adt/ri_triggers.c:1975 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "no hay una entrada en pg_constraint para el trigger «%s» en tabla «%s»" -#: utils/adt/ri_triggers.c:1967 +#: utils/adt/ri_triggers.c:1977 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "Elimine este trigger de integridad referencial y sus pares, y utilice ALTER TABLE ADD CONSTRAINT." -#: utils/adt/ri_triggers.c:1997 gram.y:3819 +#: utils/adt/ri_triggers.c:2007 gram.y:3818 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL no está implementada" -#: utils/adt/ri_triggers.c:2285 +#: utils/adt/ri_triggers.c:2295 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "la consulta de integridad referencial en «%s» de la restricción «%s» en «%s» entregó un resultado inesperado" -#: utils/adt/ri_triggers.c:2289 +#: utils/adt/ri_triggers.c:2299 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Esto probablemente es causado por una regla que reescribió la consulta." -#: utils/adt/ri_triggers.c:2450 +#: utils/adt/ri_triggers.c:2460 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "eliminar la partición «%s» viola la llave foránea «%s»" -#: utils/adt/ri_triggers.c:2453 utils/adt/ri_triggers.c:2478 +#: utils/adt/ri_triggers.c:2463 utils/adt/ri_triggers.c:2488 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "La llave (%s)=(%s) todavía es referida desde la tabla «%s»." -#: utils/adt/ri_triggers.c:2464 +#: utils/adt/ri_triggers.c:2474 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "La llave (%s)=(%s) no está presente en la tabla «%s»." -#: utils/adt/ri_triggers.c:2467 +#: utils/adt/ri_triggers.c:2477 #, c-format msgid "Key is not present in table \"%s\"." msgstr "La llave no está presente en la tabla «%s»." -#: utils/adt/ri_triggers.c:2473 +#: utils/adt/ri_triggers.c:2483 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "update o delete en «%s» viola la llave foránea «%s» en la tabla «%s»" -#: utils/adt/ri_triggers.c:2481 +#: utils/adt/ri_triggers.c:2491 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "La llave todavía es referida desde la tabla «%s»." @@ -23279,125 +23214,125 @@ msgstr "no se pueden comparar registros con cantidad distinta de columnas" msgid "rule \"%s\" has unsupported event type %d" msgstr "la regla «%s» tiene el tipo de evento no soportado %d" -#: utils/adt/timestamp.c:106 +#: utils/adt/timestamp.c:107 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "la precisión de TIMESTAMP(%d)%s no debe ser negativa" -#: utils/adt/timestamp.c:112 +#: utils/adt/timestamp.c:113 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "la precisión de TIMESTAMP(%d)%s fue reducida al máximo permitido, %d" -#: utils/adt/timestamp.c:175 utils/adt/timestamp.c:433 utils/misc/guc.c:11911 +#: utils/adt/timestamp.c:176 utils/adt/timestamp.c:434 utils/misc/guc.c:11901 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp fuera de rango: «%s»" -#: utils/adt/timestamp.c:371 +#: utils/adt/timestamp.c:372 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "la precisión de timestamp(%d) debe estar entre %d y %d" -#: utils/adt/timestamp.c:495 +#: utils/adt/timestamp.c:496 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "Los husos horarios numéricos deben tener «-» o «+» como su primer carácter." -#: utils/adt/timestamp.c:508 +#: utils/adt/timestamp.c:509 #, c-format msgid "numeric time zone \"%s\" out of range" -msgstr "el huso horario numérico «%s» está fuera de rango" +msgstr "huso horario numérico «%s» fuera de rango" -#: utils/adt/timestamp.c:610 utils/adt/timestamp.c:620 -#: utils/adt/timestamp.c:628 +#: utils/adt/timestamp.c:601 utils/adt/timestamp.c:611 +#: utils/adt/timestamp.c:619 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestamp fuera de rango: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:729 +#: utils/adt/timestamp.c:720 #, c-format msgid "timestamp cannot be NaN" msgstr "el timestamp no puede ser NaN" -#: utils/adt/timestamp.c:747 utils/adt/timestamp.c:759 +#: utils/adt/timestamp.c:738 utils/adt/timestamp.c:750 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "timestamp fuera de rango: «%g»" -#: utils/adt/timestamp.c:944 utils/adt/timestamp.c:1518 -#: utils/adt/timestamp.c:1953 utils/adt/timestamp.c:3051 -#: utils/adt/timestamp.c:3056 utils/adt/timestamp.c:3061 -#: utils/adt/timestamp.c:3111 utils/adt/timestamp.c:3118 -#: utils/adt/timestamp.c:3125 utils/adt/timestamp.c:3145 -#: utils/adt/timestamp.c:3152 utils/adt/timestamp.c:3159 -#: utils/adt/timestamp.c:3189 utils/adt/timestamp.c:3197 -#: utils/adt/timestamp.c:3241 utils/adt/timestamp.c:3668 -#: utils/adt/timestamp.c:3793 utils/adt/timestamp.c:4253 +#: utils/adt/timestamp.c:935 utils/adt/timestamp.c:1509 +#: utils/adt/timestamp.c:1944 utils/adt/timestamp.c:3042 +#: utils/adt/timestamp.c:3047 utils/adt/timestamp.c:3052 +#: utils/adt/timestamp.c:3102 utils/adt/timestamp.c:3109 +#: utils/adt/timestamp.c:3116 utils/adt/timestamp.c:3136 +#: utils/adt/timestamp.c:3143 utils/adt/timestamp.c:3150 +#: utils/adt/timestamp.c:3180 utils/adt/timestamp.c:3188 +#: utils/adt/timestamp.c:3232 utils/adt/timestamp.c:3659 +#: utils/adt/timestamp.c:3784 utils/adt/timestamp.c:4244 #, c-format msgid "interval out of range" msgstr "interval fuera de rango" -#: utils/adt/timestamp.c:1071 utils/adt/timestamp.c:1104 +#: utils/adt/timestamp.c:1062 utils/adt/timestamp.c:1095 #, c-format msgid "invalid INTERVAL type modifier" msgstr "modificador de tipo INTERVAL no válido" -#: utils/adt/timestamp.c:1087 +#: utils/adt/timestamp.c:1078 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "la precisión de INTERVAL(%d) no debe ser negativa" -#: utils/adt/timestamp.c:1093 +#: utils/adt/timestamp.c:1084 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "la precisión de INTERVAL(%d) fue reducida al máximo permitido, %d" -#: utils/adt/timestamp.c:1475 +#: utils/adt/timestamp.c:1466 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "la precisión de interval(%d) debe estar entre %d y %d" -#: utils/adt/timestamp.c:2652 +#: utils/adt/timestamp.c:2643 #, c-format msgid "cannot subtract infinite timestamps" msgstr "no se pueden restar timestamps infinitos" -#: utils/adt/timestamp.c:3921 utils/adt/timestamp.c:4514 -#: utils/adt/timestamp.c:4676 utils/adt/timestamp.c:4697 +#: utils/adt/timestamp.c:3912 utils/adt/timestamp.c:4505 +#: utils/adt/timestamp.c:4667 utils/adt/timestamp.c:4688 #, c-format msgid "timestamp units \"%s\" not supported" msgstr "las unidades de timestamp «%s» no están soportadas" -#: utils/adt/timestamp.c:3935 utils/adt/timestamp.c:4468 -#: utils/adt/timestamp.c:4707 +#: utils/adt/timestamp.c:3926 utils/adt/timestamp.c:4459 +#: utils/adt/timestamp.c:4698 #, c-format msgid "timestamp units \"%s\" not recognized" msgstr "las unidades de timestamp «%s» no son reconocidas" -#: utils/adt/timestamp.c:4065 utils/adt/timestamp.c:4509 -#: utils/adt/timestamp.c:4872 utils/adt/timestamp.c:4894 +#: utils/adt/timestamp.c:4056 utils/adt/timestamp.c:4500 +#: utils/adt/timestamp.c:4863 utils/adt/timestamp.c:4885 #, c-format msgid "timestamp with time zone units \"%s\" not supported" msgstr "las unidades de timestamp with time zone «%s» no están soportadas" -#: utils/adt/timestamp.c:4082 utils/adt/timestamp.c:4463 -#: utils/adt/timestamp.c:4903 +#: utils/adt/timestamp.c:4073 utils/adt/timestamp.c:4454 +#: utils/adt/timestamp.c:4894 #, c-format msgid "timestamp with time zone units \"%s\" not recognized" msgstr "las unidades de timestamp with time zone «%s» no son reconocidas" -#: utils/adt/timestamp.c:4240 +#: utils/adt/timestamp.c:4231 #, c-format msgid "interval units \"%s\" not supported because months usually have fractional weeks" msgstr "las unidades de intervalo «%s» no están soportadas porque los meses normalmente tienen semanas fraccionales" -#: utils/adt/timestamp.c:4246 utils/adt/timestamp.c:4997 +#: utils/adt/timestamp.c:4237 utils/adt/timestamp.c:4988 #, c-format msgid "interval units \"%s\" not supported" msgstr "las unidades de interval «%s» no están soportadas" -#: utils/adt/timestamp.c:4262 utils/adt/timestamp.c:5020 +#: utils/adt/timestamp.c:4253 utils/adt/timestamp.c:5011 #, c-format msgid "interval units \"%s\" not recognized" msgstr "las unidades de interval «%s» no son reconocidas" @@ -23498,10 +23433,10 @@ msgstr "el array de pesos es muy corto" msgid "array of weight must not contain nulls" msgstr "los arrays de pesos no deben contener valores nulos" -#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:868 +#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:872 #, c-format msgid "weight out of range" -msgstr "el peso está fuera de rango" +msgstr "peso fuera de rango" #: utils/adt/tsvector.c:215 #, c-format @@ -23513,58 +23448,58 @@ msgstr "la palabra es demasiado larga (%ld, máximo %ld bytes)" msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "la cadena es demasiado larga para tsvector (%ld bytes, máximo %ld bytes)" -#: utils/adt/tsvector_op.c:336 utils/adt/tsvector_op.c:616 -#: utils/adt/tsvector_op.c:778 +#: utils/adt/tsvector_op.c:328 utils/adt/tsvector_op.c:608 +#: utils/adt/tsvector_op.c:770 #, c-format msgid "lexeme array may not contain nulls" msgstr "el array de lexemas no debe contener nulls" -#: utils/adt/tsvector_op.c:848 +#: utils/adt/tsvector_op.c:840 #, c-format msgid "weight array may not contain nulls" msgstr "el array de pesos no debe contener nulls" -#: utils/adt/tsvector_op.c:872 +#: utils/adt/tsvector_op.c:864 #, c-format msgid "unrecognized weight: \"%c\"" msgstr "no se reconoce el peso: «%c»" -#: utils/adt/tsvector_op.c:2362 +#: utils/adt/tsvector_op.c:2414 #, c-format msgid "ts_stat query must return one tsvector column" msgstr "la consulta ts_stat debe retornar una columna tsvector" -#: utils/adt/tsvector_op.c:2551 +#: utils/adt/tsvector_op.c:2603 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "la columna tsvector «%s» no existe" -#: utils/adt/tsvector_op.c:2558 +#: utils/adt/tsvector_op.c:2610 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "la columna «%s» no es de tipo tsvector" -#: utils/adt/tsvector_op.c:2570 +#: utils/adt/tsvector_op.c:2622 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "la columna de configuración «%s» no existe" -#: utils/adt/tsvector_op.c:2576 +#: utils/adt/tsvector_op.c:2628 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "la columna «%s» no es de tipo regconfig" -#: utils/adt/tsvector_op.c:2583 +#: utils/adt/tsvector_op.c:2635 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "la columna de configuración «%s» no debe ser nula" -#: utils/adt/tsvector_op.c:2596 +#: utils/adt/tsvector_op.c:2648 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "el nombre de la configuración de búsqueda «%s» debe ser calificada con esquema" -#: utils/adt/tsvector_op.c:2621 +#: utils/adt/tsvector_op.c:2673 #, c-format msgid "column \"%s\" is not of a character type" msgstr "la columna «%s» no es de un tipo textual" @@ -23585,10 +23520,10 @@ msgid "wrong position info in tsvector: \"%s\"" msgstr "información posicional incorrecta en tsvector: «%s»" #: utils/adt/uuid.c:428 -#, fuzzy, c-format +#, c-format #| msgid "could not generate random salt" msgid "could not generate random values" -msgstr "no se pudo generar una sal aleatoria" +msgstr "no se pudo generar valores aleatorios" #: utils/adt/varbit.c:109 utils/adt/varchar.c:53 #, c-format @@ -23708,10 +23643,10 @@ msgid "index %d out of valid range, 0..%d" msgstr "el índice %d está fuera de rango [0..%d]" #: utils/adt/varlena.c:3481 utils/adt/varlena.c:3553 -#, fuzzy, c-format +#, c-format #| msgid "index %d out of valid range, 0..%d" msgid "index %lld out of valid range, 0..%lld" -msgstr "el índice %d está fuera de rango [0..%d]" +msgstr "el índice %lld está fuera de rango, 0..%lld" #: utils/adt/varlena.c:4590 #, c-format @@ -23761,13 +23696,13 @@ msgstr "los valores nulos no pueden ser formateados como un identificador SQL" #: utils/adt/varlena.c:6010 #, c-format msgid "Unicode normalization can only be performed if server encoding is UTF8" -msgstr "" +msgstr "la normalización Unicode sólo puede ser hecha si la codificación de servidor es UTF8" #: utils/adt/varlena.c:6023 -#, fuzzy, c-format +#, c-format #| msgid "invalid parameter list format: \"%s\"" msgid "invalid normalization form: %s" -msgstr "el formato de la lista de parámetros no es válido: «%s»" +msgstr "forma de normalización no válida: %s" #: utils/adt/windowfuncs.c:243 #, c-format @@ -23785,10 +23720,10 @@ msgid "transaction ID %s is in the future" msgstr "el ID de transacción %s está en el futuro" #: utils/adt/xid8funcs.c:547 -#, fuzzy, c-format -#| msgid "invalid external txid_snapshot data" +#, c-format +#| msgid "invalid snapshot data in file \"%s\"" msgid "invalid external pg_snapshot data" -msgstr "valor externo txid_snapshot no válido" +msgstr "datos externos pg_snapshot no válidos" #: utils/adt/xml.c:222 #, c-format @@ -23949,23 +23884,23 @@ msgstr "el «path» de filtro de columna no debe ser la cadena vacía" msgid "more than one value returned by column XPath expression" msgstr "la expresión XPath de columna retornó más de un valor" -#: utils/cache/lsyscache.c:966 +#: utils/cache/lsyscache.c:1015 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "no existe la conversión del tipo %s al tipo %s" -#: utils/cache/lsyscache.c:2715 utils/cache/lsyscache.c:2748 -#: utils/cache/lsyscache.c:2781 utils/cache/lsyscache.c:2814 +#: utils/cache/lsyscache.c:2764 utils/cache/lsyscache.c:2797 +#: utils/cache/lsyscache.c:2830 utils/cache/lsyscache.c:2863 #, c-format msgid "type %s is only a shell" msgstr "el tipo %s está inconcluso" -#: utils/cache/lsyscache.c:2720 +#: utils/cache/lsyscache.c:2769 #, c-format msgid "no input function available for type %s" msgstr "no hay una función de entrada para el tipo %s" -#: utils/cache/lsyscache.c:2753 +#: utils/cache/lsyscache.c:2802 #, c-format msgid "no output function available for type %s" msgstr "no hay una función de salida para el tipo %s" @@ -23980,17 +23915,17 @@ msgstr "falta la función de soporte %3$d para el tipo %4$s de la clase de opera msgid "cached plan must not change result type" msgstr "el plan almacenado no debe cambiar el tipo de resultado" -#: utils/cache/relcache.c:6071 +#: utils/cache/relcache.c:6078 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "no se pudo crear el archivo de cache de catálogos de sistema «%s»: %m" -#: utils/cache/relcache.c:6073 +#: utils/cache/relcache.c:6080 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Prosiguiendo de todas maneras, pero hay algo mal." -#: utils/cache/relcache.c:6395 +#: utils/cache/relcache.c:6402 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "no se pudo eliminar el archivo de cache «%s»: %m" @@ -24026,10 +23961,9 @@ msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n" msgstr "TRAP: %s(«%s», Archivo: «%s», Línea: %d)\n" #: utils/error/elog.c:322 -#, fuzzy, c-format -#| msgid "error occurred at %s:%d before error message processing is available\n" +#, c-format msgid "error occurred before error message processing is available\n" -msgstr "ocurrió un error en %s:%d antes de que el procesamiento de mensajes de error esté disponible\n" +msgstr "ocurrió un error antes de que el procesamiento de errores esté disponible\n" #: utils/error/elog.c:1868 #, c-format @@ -24071,20 +24005,20 @@ msgstr "CONSULTA: " msgid "CONTEXT: " msgstr "CONTEXTO: " -#: utils/error/elog.c:2944 -msgid "BACKTRACE: " -msgstr "" - -#: utils/error/elog.c:2954 +#: utils/error/elog.c:2947 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "UBICACIÓN: %s, %s:%d\n" -#: utils/error/elog.c:2961 +#: utils/error/elog.c:2954 #, c-format msgid "LOCATION: %s:%d\n" msgstr "UBICACIÓN: %s:%d\n" +#: utils/error/elog.c:2961 +msgid "BACKTRACE: " +msgstr "BACKTRACE: " + #: utils/error/elog.c:2975 msgid "STATEMENT: " msgstr "SENTENCIA: " @@ -24221,9 +24155,10 @@ msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "la versión de API %d no reconocida fue reportada por la función «%s»" #: utils/fmgr/fmgr.c:2003 -#, c-format +#, fuzzy, c-format +#| msgid "operator class options info is absent in function call context" msgid "opclass options info is absent in function call context" -msgstr "" +msgstr "la información de opciones de la clase de operadores está ausente en el contexto de llamada a función" #: utils/fmgr/fmgr.c:2070 #, c-format @@ -24285,7 +24220,7 @@ msgstr "el directorio de datos «%s» tiene permisos no válidos" msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Los permisos deberían ser u=rwx (0700) o u=rwx,g=rx (0750)." -#: utils/init/miscinit.c:615 utils/misc/guc.c:7149 +#: utils/init/miscinit.c:615 utils/misc/guc.c:7139 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "no se puede definir el parámetro «%s» dentro de una operación restringida por seguridad" @@ -24386,7 +24321,7 @@ msgstr "El archivo parece accidentalmente abandonado, pero no pudo ser eliminado msgid "could not write lock file \"%s\": %m" msgstr "no se pudo escribir el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:1327 utils/init/miscinit.c:1469 utils/misc/guc.c:10048 +#: utils/init/miscinit.c:1327 utils/init/miscinit.c:1469 utils/misc/guc.c:10038 #, c-format msgid "could not read from file \"%s\": %m" msgstr "no se pudo leer el archivo «%s»: %m" @@ -24636,9 +24571,9 @@ msgstr "byte no válido para codificación «%s»: 0x%02x" #: utils/mb/mbutils.c:819 #, fuzzy, c-format -#| msgid "invalid Unicode surrogate pair" +#| msgid "invalid Unicode escape" msgid "invalid Unicode code point" -msgstr "par sustituto (surrogate) Unicode no válido" +msgstr "valor de escape Unicode no válido" #: utils/mb/mbutils.c:1087 #, c-format @@ -24902,1653 +24837,1647 @@ msgid "Enables the planner's use of hashed aggregation plans." msgstr "Permitir el uso de planes de agregación a través de hash." #: utils/misc/guc.c:1015 -#, fuzzy -#| msgid "Enables the planner's use of hashed aggregation plans." -msgid "Enables the planner's use of hashed aggregation plans that are expected to exceed work_mem." -msgstr "Permitir el uso de planes de agregación a través de hash." - -#: utils/misc/guc.c:1025 -msgid "Enables the planner's use of hashed aggregation plans for groupingsets when the total size of the hash tables is expected to exceed work_mem." -msgstr "" - -#: utils/misc/guc.c:1035 msgid "Enables the planner's use of materialization." msgstr "Permitir el uso de materialización de planes." -#: utils/misc/guc.c:1045 +#: utils/misc/guc.c:1025 msgid "Enables the planner's use of nested-loop join plans." msgstr "Permitir el uso de planes «nested-loop join»." -#: utils/misc/guc.c:1055 +#: utils/misc/guc.c:1035 msgid "Enables the planner's use of merge join plans." msgstr "Permitir el uso de planes «merge join»." -#: utils/misc/guc.c:1065 +#: utils/misc/guc.c:1045 msgid "Enables the planner's use of hash join plans." msgstr "Permitir el uso de planes «hash join»." -#: utils/misc/guc.c:1075 +#: utils/misc/guc.c:1055 msgid "Enables the planner's use of gather merge plans." msgstr "Permitir el uso de planes «gather merge»." -#: utils/misc/guc.c:1085 +#: utils/misc/guc.c:1065 msgid "Enables partitionwise join." msgstr "Permitir el uso de joins por particiones." -#: utils/misc/guc.c:1095 +#: utils/misc/guc.c:1075 msgid "Enables partitionwise aggregation and grouping." msgstr "Permitir el uso de agregación y agrupamiento por particiones." -#: utils/misc/guc.c:1105 +#: utils/misc/guc.c:1085 msgid "Enables the planner's use of parallel append plans." msgstr "Permitir el uso de planes «append» paralelos." -#: utils/misc/guc.c:1115 +#: utils/misc/guc.c:1095 msgid "Enables the planner's use of parallel hash plans." msgstr "Permitir el uso de planes «hash join» paralelos." -#: utils/misc/guc.c:1125 +#: utils/misc/guc.c:1105 msgid "Enables plan-time and run-time partition pruning." msgstr "Permitir el uso de poda de particiones en tiempo de plan y ejecución." -#: utils/misc/guc.c:1126 +#: utils/misc/guc.c:1106 msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." msgstr "Permite al optimizador de consultas y al ejecutor a comparar bordes de particiones a condiciones en las consultas para determinar qué particiones deben recorrerse." -#: utils/misc/guc.c:1137 +#: utils/misc/guc.c:1117 msgid "Enables genetic query optimization." msgstr "Permitir el uso del optimizador genético de consultas." -#: utils/misc/guc.c:1138 +#: utils/misc/guc.c:1118 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Este algoritmo intenta planear las consultas sin hacer búsqueda exhaustiva." -#: utils/misc/guc.c:1149 +#: utils/misc/guc.c:1129 msgid "Shows whether the current user is a superuser." msgstr "Indica si el usuario actual es superusuario." -#: utils/misc/guc.c:1159 +#: utils/misc/guc.c:1139 msgid "Enables advertising the server via Bonjour." msgstr "Permitir la publicación del servidor vía Bonjour." -#: utils/misc/guc.c:1168 +#: utils/misc/guc.c:1148 msgid "Collects transaction commit time." msgstr "Recolectar tiempo de compromiso de transacciones." -#: utils/misc/guc.c:1177 +#: utils/misc/guc.c:1157 msgid "Enables SSL connections." msgstr "Permitir conexiones SSL." -#: utils/misc/guc.c:1186 +#: utils/misc/guc.c:1166 msgid "Also use ssl_passphrase_command during server reload." msgstr "También usar ssl_passphrase_command durante la recarga del servidor." -#: utils/misc/guc.c:1195 +#: utils/misc/guc.c:1175 msgid "Give priority to server ciphersuite order." msgstr "Da prioridad al orden de algoritmos de cifrado especificado por el servidor." -#: utils/misc/guc.c:1204 +#: utils/misc/guc.c:1184 msgid "Forces synchronization of updates to disk." msgstr "Forzar la sincronización de escrituras a disco." -#: utils/misc/guc.c:1205 +#: utils/misc/guc.c:1185 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "El servidor usará la llamada a sistema fsync() en varios lugares para asegurarse que las actualizaciones son escritas físicamente a disco. Esto asegura que las bases de datos se recuperarán a un estado consistente después de una caída de hardware o sistema operativo." -#: utils/misc/guc.c:1216 +#: utils/misc/guc.c:1196 msgid "Continues processing after a checksum failure." msgstr "Continuar procesando después de una falla de suma de verificación." -#: utils/misc/guc.c:1217 +#: utils/misc/guc.c:1197 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "La detección de una suma de verificación que no coincide normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo ignore_checksum_failure a true hace que el sistema ignore la falla (pero aún así reporta un mensaje de warning), y continúe el procesamiento. Este comportamiento podría causar caídas del sistema u otros problemas serios. Sólo tiene efecto si las sumas de verificación están activadas." -#: utils/misc/guc.c:1231 +#: utils/misc/guc.c:1211 msgid "Continues processing past damaged page headers." msgstr "Continuar procesando después de detectar encabezados de página dañados." -#: utils/misc/guc.c:1232 +#: utils/misc/guc.c:1212 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "La detección de un encabezado de página dañado normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo zero_damaged_pages a true hace que el sistema reporte un mensaje de warning, escriba ceros en toda la página, y continúe el procesamiento. Este comportamiento destruirá datos; en particular, todas las tuplas en la página dañada." -#: utils/misc/guc.c:1245 +#: utils/misc/guc.c:1225 #, fuzzy #| msgid "Continues processing after a checksum failure." msgid "Continues recovery after an invalid pages failure." msgstr "Continuar procesando después de una falla de suma de verificación." -#: utils/misc/guc.c:1246 +#: utils/misc/guc.c:1226 #, fuzzy #| msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." msgstr "La detección de una suma de verificación que no coincide normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo ignore_checksum_failure a true hace que el sistema ignore la falla (pero aún así reporta un mensaje de warning), y continúe el procesamiento. Este comportamiento podría causar caídas del sistema u otros problemas serios. Sólo tiene efecto si las sumas de verificación están activadas." -#: utils/misc/guc.c:1264 +#: utils/misc/guc.c:1244 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "Escribe páginas completas a WAL cuando son modificadas después de un punto de control." -#: utils/misc/guc.c:1265 +#: utils/misc/guc.c:1245 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "Una escritura de página que está siendo procesada durante una caída del sistema operativo puede ser completada sólo parcialmente. Durante la recuperación, los cambios de registros (tuplas) almacenados en WAL no son suficientes para la recuperación. Esta opción activa la escritura de las páginas a WAL cuando son modificadas por primera vez después de un punto de control, de manera que una recuperación total es posible." -#: utils/misc/guc.c:1278 +#: utils/misc/guc.c:1258 msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications." msgstr "Escribir páginas completas a WAL cuando son modificadas después de un punto de control, incluso para modificaciones no críticas." -#: utils/misc/guc.c:1288 +#: utils/misc/guc.c:1268 msgid "Compresses full-page writes written in WAL file." msgstr "Comprimir las imágenes de páginas completas al escribirlas a WAL." -#: utils/misc/guc.c:1298 +#: utils/misc/guc.c:1278 msgid "Writes zeroes to new WAL files before first use." msgstr "Escribir ceros a nuevos archivos WAL antes del primer uso." -#: utils/misc/guc.c:1308 +#: utils/misc/guc.c:1288 msgid "Recycles WAL files by renaming them." msgstr "Reciclar archivos de WAL cambiándoles de nombre." -#: utils/misc/guc.c:1318 +#: utils/misc/guc.c:1298 msgid "Logs each checkpoint." msgstr "Registrar cada punto de control." -#: utils/misc/guc.c:1327 +#: utils/misc/guc.c:1307 msgid "Logs each successful connection." msgstr "Registrar cada conexión exitosa." -#: utils/misc/guc.c:1336 +#: utils/misc/guc.c:1316 msgid "Logs end of a session, including duration." msgstr "Registrar el fin de una sesión, incluyendo su duración." -#: utils/misc/guc.c:1345 +#: utils/misc/guc.c:1325 msgid "Logs each replication command." msgstr "Registrar cada orden de replicación." -#: utils/misc/guc.c:1354 +#: utils/misc/guc.c:1334 msgid "Shows whether the running server has assertion checks enabled." msgstr "Indica si el servidor actual tiene activas las aseveraciones (asserts) activas." -#: utils/misc/guc.c:1369 +#: utils/misc/guc.c:1349 msgid "Terminate session on any error." msgstr "Terminar sesión ante cualquier error." -#: utils/misc/guc.c:1378 +#: utils/misc/guc.c:1358 msgid "Reinitialize server after backend crash." msgstr "Reinicializar el servidor después de una caída de un proceso servidor." -#: utils/misc/guc.c:1388 +#: utils/misc/guc.c:1368 msgid "Logs the duration of each completed SQL statement." msgstr "Registrar la duración de cada sentencia SQL ejecutada." -#: utils/misc/guc.c:1397 +#: utils/misc/guc.c:1377 msgid "Logs each query's parse tree." msgstr "Registrar cada arbol analizado de consulta " -#: utils/misc/guc.c:1406 +#: utils/misc/guc.c:1386 msgid "Logs each query's rewritten parse tree." msgstr "Registrar cada reescritura del arból analizado de consulta" -#: utils/misc/guc.c:1415 +#: utils/misc/guc.c:1395 msgid "Logs each query's execution plan." msgstr "Registrar el plan de ejecución de cada consulta." -#: utils/misc/guc.c:1424 +#: utils/misc/guc.c:1404 msgid "Indents parse and plan tree displays." msgstr "Indentar los árboles de parse y plan." -#: utils/misc/guc.c:1433 +#: utils/misc/guc.c:1413 msgid "Writes parser performance statistics to the server log." msgstr "Escribir estadísticas de parser al registro del servidor." -#: utils/misc/guc.c:1442 +#: utils/misc/guc.c:1422 msgid "Writes planner performance statistics to the server log." msgstr "Escribir estadísticas de planner al registro del servidor." -#: utils/misc/guc.c:1451 +#: utils/misc/guc.c:1431 msgid "Writes executor performance statistics to the server log." msgstr "Escribir estadísticas del executor al registro del servidor." -#: utils/misc/guc.c:1460 +#: utils/misc/guc.c:1440 msgid "Writes cumulative performance statistics to the server log." msgstr "Escribir estadísticas acumulativas al registro del servidor." -#: utils/misc/guc.c:1470 +#: utils/misc/guc.c:1450 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Registrar uso de recursos de sistema (memoria y CPU) en varias operaciones B-tree." -#: utils/misc/guc.c:1482 +#: utils/misc/guc.c:1462 msgid "Collects information about executing commands." msgstr "Recolectar estadísticas sobre órdenes en ejecución." -#: utils/misc/guc.c:1483 +#: utils/misc/guc.c:1463 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "Activa la recolección de información sobre la orden actualmente en ejecución en cada sesión, junto con el momento en el cual esa orden comenzó la ejecución." -#: utils/misc/guc.c:1493 +#: utils/misc/guc.c:1473 msgid "Collects statistics on database activity." msgstr "Recolectar estadísticas de actividad de la base de datos." -#: utils/misc/guc.c:1502 +#: utils/misc/guc.c:1482 msgid "Collects timing statistics for database I/O activity." msgstr "Recolectar estadísticas de tiempos en las operaciones de I/O de la base de datos." -#: utils/misc/guc.c:1512 +#: utils/misc/guc.c:1492 msgid "Updates the process title to show the active SQL command." msgstr "Actualiza el título del proceso para mostrar la orden SQL activo." -#: utils/misc/guc.c:1513 +#: utils/misc/guc.c:1493 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "Habilita que se actualice el título del proceso cada vez que una orden SQL es recibido por el servidor." -#: utils/misc/guc.c:1526 +#: utils/misc/guc.c:1506 msgid "Starts the autovacuum subprocess." msgstr "Iniciar el subproceso de autovacuum." -#: utils/misc/guc.c:1536 +#: utils/misc/guc.c:1516 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Generar salida de depuración para LISTEN y NOTIFY." -#: utils/misc/guc.c:1548 +#: utils/misc/guc.c:1528 msgid "Emits information about lock usage." msgstr "Emitir información acerca del uso de locks." -#: utils/misc/guc.c:1558 +#: utils/misc/guc.c:1538 msgid "Emits information about user lock usage." msgstr "Emitir información acerca del uso de locks de usuario." -#: utils/misc/guc.c:1568 +#: utils/misc/guc.c:1548 msgid "Emits information about lightweight lock usage." msgstr "Emitir información acerca del uso de «lightweight locks»." -#: utils/misc/guc.c:1578 +#: utils/misc/guc.c:1558 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Volcar información acerca de los locks existentes cuando se agota el tiempo de deadlock." -#: utils/misc/guc.c:1590 +#: utils/misc/guc.c:1570 msgid "Logs long lock waits." msgstr "Registrar esperas largas de bloqueos." -#: utils/misc/guc.c:1600 +#: utils/misc/guc.c:1580 msgid "Logs the host name in the connection logs." msgstr "Registrar el nombre del host en la conexión." -#: utils/misc/guc.c:1601 +#: utils/misc/guc.c:1581 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "Por omisión, los registros de conexión sólo muestran la dirección IP del host que establece la conexión. Si desea que se despliegue el nombre del host puede activar esta opción, pero dependiendo de su configuración de resolución de nombres esto puede imponer una penalización de rendimiento no despreciable." -#: utils/misc/guc.c:1612 +#: utils/misc/guc.c:1592 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Tratar expr=NULL como expr IS NULL." -#: utils/misc/guc.c:1613 +#: utils/misc/guc.c:1593 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "Cuando está activado, expresiones de la forma expr = NULL (o NULL = expr) son tratadas como expr IS NULL, esto es, retornarán verdadero si expr es evaluada al valor nulo, y falso en caso contrario. El comportamiento correcto de expr = NULL es retornar siempre null (desconocido)." -#: utils/misc/guc.c:1625 +#: utils/misc/guc.c:1605 msgid "Enables per-database user names." msgstr "Activar el uso de nombre de usuario locales a cada base de datos." -#: utils/misc/guc.c:1634 +#: utils/misc/guc.c:1614 msgid "Sets the default read-only status of new transactions." msgstr "Estado por omisión de sólo lectura de nuevas transacciones." -#: utils/misc/guc.c:1643 +#: utils/misc/guc.c:1623 msgid "Sets the current transaction's read-only status." msgstr "Activa el estado de sólo lectura de la transacción en curso." -#: utils/misc/guc.c:1653 +#: utils/misc/guc.c:1633 msgid "Sets the default deferrable status of new transactions." msgstr "Estado por omisión de postergable de nuevas transacciones." -#: utils/misc/guc.c:1662 +#: utils/misc/guc.c:1642 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "Si está activo, las transacciones serializables de sólo lectura serán pausadas hasta que puedan ejecutarse sin posibles fallas de serialización." -#: utils/misc/guc.c:1672 +#: utils/misc/guc.c:1652 msgid "Enable row security." msgstr "Activar seguridad de registros." -#: utils/misc/guc.c:1673 +#: utils/misc/guc.c:1653 msgid "When enabled, row security will be applied to all users." msgstr "Cuando está activada, la seguridad de registros se aplicará a todos los usuarios." -#: utils/misc/guc.c:1681 +#: utils/misc/guc.c:1661 msgid "Check function bodies during CREATE FUNCTION." msgstr "Verificar definición de funciones durante CREATE FUNCTION." -#: utils/misc/guc.c:1690 +#: utils/misc/guc.c:1670 msgid "Enable input of NULL elements in arrays." msgstr "Habilita el ingreso de elementos nulos en arrays." -#: utils/misc/guc.c:1691 +#: utils/misc/guc.c:1671 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "Cuando está activo, un valor NULL sin comillas en la entrada de un array significa un valor nulo; en caso contrario es tomado literalmente." -#: utils/misc/guc.c:1707 +#: utils/misc/guc.c:1687 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS ya no está soportado; esto sólo puede ser false." -#: utils/misc/guc.c:1717 +#: utils/misc/guc.c:1697 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "Lanzar un subproceso para capturar stderr y/o logs CSV en archivos de log." -#: utils/misc/guc.c:1726 +#: utils/misc/guc.c:1706 msgid "Truncate existing log files of same name during log rotation." msgstr "Truncar archivos de log del mismo nombre durante la rotación." -#: utils/misc/guc.c:1737 +#: utils/misc/guc.c:1717 msgid "Emit information about resource usage in sorting." msgstr "Emitir información acerca de uso de recursos durante los ordenamientos." -#: utils/misc/guc.c:1751 +#: utils/misc/guc.c:1731 msgid "Generate debugging output for synchronized scanning." msgstr "Generar salida de depuración para recorrido sincronizado." -#: utils/misc/guc.c:1766 +#: utils/misc/guc.c:1746 msgid "Enable bounded sorting using heap sort." msgstr "Activar ordenamiento acotado usando «heap sort»." -#: utils/misc/guc.c:1779 +#: utils/misc/guc.c:1759 msgid "Emit WAL-related debugging output." msgstr "Activar salida de depuración de WAL." -#: utils/misc/guc.c:1791 +#: utils/misc/guc.c:1771 msgid "Datetimes are integer based." msgstr "Las fechas y horas se basan en tipos enteros." -#: utils/misc/guc.c:1802 +#: utils/misc/guc.c:1782 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "Define que los nombres de usuario Kerberos y GSSAPI deberían ser tratados sin distinción de mayúsculas." -#: utils/misc/guc.c:1812 +#: utils/misc/guc.c:1792 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Avisa acerca de escapes de backslash en literales de cadena corrientes." -#: utils/misc/guc.c:1822 +#: utils/misc/guc.c:1802 msgid "Causes '...' strings to treat backslashes literally." msgstr "Provoca que las cadenas '...' traten las barras inclinadas inversas (\\) en forma literal." -#: utils/misc/guc.c:1833 +#: utils/misc/guc.c:1813 msgid "Enable synchronized sequential scans." msgstr "Permitir la sincronización de recorridos secuenciales." -#: utils/misc/guc.c:1843 +#: utils/misc/guc.c:1823 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Define si incluir o excluir la transacción con el destino de recuperación." -#: utils/misc/guc.c:1853 +#: utils/misc/guc.c:1833 msgid "Allows connections and queries during recovery." msgstr "Permite conexiones y consultas durante la recuperación." -#: utils/misc/guc.c:1863 +#: utils/misc/guc.c:1843 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Permite retroalimentación desde un hot standby hacia el primario que evitará conflictos en consultas." -#: utils/misc/guc.c:1873 +#: utils/misc/guc.c:1853 msgid "Allows modifications of the structure of system tables." msgstr "Permite modificaciones de la estructura de las tablas del sistema." -#: utils/misc/guc.c:1884 +#: utils/misc/guc.c:1864 msgid "Disables reading from system indexes." msgstr "Deshabilita lectura de índices del sistema." -#: utils/misc/guc.c:1885 +#: utils/misc/guc.c:1865 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "No evita la actualización de índices, así que es seguro. Lo peor que puede ocurrir es lentitud del sistema." -#: utils/misc/guc.c:1896 +#: utils/misc/guc.c:1876 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Activa el modo de compatibilidad con versiones anteriores de las comprobaciones de privilegios de objetos grandes." -#: utils/misc/guc.c:1897 +#: utils/misc/guc.c:1877 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "Omite las comprobaciones de privilegios cuando se leen o modifican los objetos grandes, para compatibilidad con versiones de PostgreSQL anteriores a 9.0." -#: utils/misc/guc.c:1907 +#: utils/misc/guc.c:1887 msgid "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." msgstr "Emitir una advertencia en constructos que cambiaron significado desde PostgreSQL 9.4." -#: utils/misc/guc.c:1917 +#: utils/misc/guc.c:1897 msgid "When generating SQL fragments, quote all identifiers." msgstr "Al generar fragmentos SQL, entrecomillar todos los identificadores." -#: utils/misc/guc.c:1927 +#: utils/misc/guc.c:1907 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Indica si las sumas de verificación están activas en este cluster." -#: utils/misc/guc.c:1938 +#: utils/misc/guc.c:1918 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Agregar número de secuencia a mensajes syslog para evitar supresión de duplicados." -#: utils/misc/guc.c:1948 +#: utils/misc/guc.c:1928 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "Dividir mensajes enviados a syslog en líneas y que quepan en 1024 bytes." -#: utils/misc/guc.c:1958 +#: utils/misc/guc.c:1938 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Controla si los Gather y Gather Merge también ejecutan subplanes." -#: utils/misc/guc.c:1959 +#: utils/misc/guc.c:1939 msgid "Should gather nodes also run subplans, or just gather tuples?" msgstr "¿Deben los nodos de recolección ejecutar subplanes, o sólo recolectar tuplas?" -#: utils/misc/guc.c:1969 +#: utils/misc/guc.c:1949 msgid "Allow JIT compilation." msgstr "Permitir compilación JIT." -#: utils/misc/guc.c:1980 +#: utils/misc/guc.c:1960 msgid "Register JIT compiled function with debugger." msgstr "Registra la función JIT compilada con el depurador." -#: utils/misc/guc.c:1997 +#: utils/misc/guc.c:1977 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "Escribe el bitcode LLVM para facilitar depuración de JIT." -#: utils/misc/guc.c:2008 +#: utils/misc/guc.c:1988 msgid "Allow JIT compilation of expressions." msgstr "Permitir compilación JIT de expresiones." -#: utils/misc/guc.c:2019 +#: utils/misc/guc.c:1999 msgid "Register JIT compiled function with perf profiler." msgstr "Registrar funciones JIT-compiladas con el analizador «perf»." -#: utils/misc/guc.c:2036 +#: utils/misc/guc.c:2016 msgid "Allow JIT compilation of tuple deforming." msgstr "Permitir compilación JIT de deformación de tuplas." -#: utils/misc/guc.c:2047 +#: utils/misc/guc.c:2027 msgid "Whether to continue running after a failure to sync data files." msgstr "Si continuar ejecutando después de una falla al sincronizar archivos de datos." -#: utils/misc/guc.c:2056 +#: utils/misc/guc.c:2036 msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." -msgstr "" +msgstr "Definir si un receptor de WAL debe crear un slot de replicación temporal en caso de no haber configurado un slot permanente." -#: utils/misc/guc.c:2074 +#: utils/misc/guc.c:2054 msgid "Forces a switch to the next WAL file if a new file has not been started within N seconds." msgstr "Fuerza a que utilizar el siguiente archivo de WAL si no se ha comenzado un nuevo archivo de WAL dentro de N segundos." -#: utils/misc/guc.c:2085 +#: utils/misc/guc.c:2065 msgid "Waits N seconds on connection startup after authentication." msgstr "Espera N segundos al inicio de la conexión después de la autentificación." -#: utils/misc/guc.c:2086 utils/misc/guc.c:2644 +#: utils/misc/guc.c:2066 utils/misc/guc.c:2624 msgid "This allows attaching a debugger to the process." msgstr "Esto permite adjuntar un depurador al proceso." -#: utils/misc/guc.c:2095 +#: utils/misc/guc.c:2075 msgid "Sets the default statistics target." msgstr "Definir el valor por omisión de toma de estadísticas." -#: utils/misc/guc.c:2096 +#: utils/misc/guc.c:2076 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "Esto se aplica a columnas de tablas que no tienen un valor definido a través de ALTER TABLE SET STATISTICS." -#: utils/misc/guc.c:2105 +#: utils/misc/guc.c:2085 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Tamaño de lista de FROM a partir del cual subconsultas no serán colapsadas." -#: utils/misc/guc.c:2107 +#: utils/misc/guc.c:2087 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "El planner mezclará subconsultas en consultas de nivel superior si la lista FROM resultante es menor que esta cantidad de ítems." -#: utils/misc/guc.c:2118 +#: utils/misc/guc.c:2098 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Tamaño de lista de FROM a partir del cual constructos JOIN no serán aplanados." -#: utils/misc/guc.c:2120 +#: utils/misc/guc.c:2100 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "El planner aplanará constructos JOIN explícitos en listas de ítems FROM siempre que la lista resultante no tenga más que esta cantidad de ítems." -#: utils/misc/guc.c:2131 +#: utils/misc/guc.c:2111 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Umbral de ítems en FROM a partir del cual se usará GEQO." -#: utils/misc/guc.c:2141 +#: utils/misc/guc.c:2121 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: effort se usa para determinar los valores por defecto para otros parámetros." -#: utils/misc/guc.c:2151 +#: utils/misc/guc.c:2131 msgid "GEQO: number of individuals in the population." msgstr "GEQO: número de individuos en una población." -#: utils/misc/guc.c:2152 utils/misc/guc.c:2162 +#: utils/misc/guc.c:2132 utils/misc/guc.c:2142 msgid "Zero selects a suitable default value." msgstr "Cero selecciona un valor por omisión razonable." -#: utils/misc/guc.c:2161 +#: utils/misc/guc.c:2141 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: número de iteraciones del algoritmo." -#: utils/misc/guc.c:2173 +#: utils/misc/guc.c:2153 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Define el tiempo a esperar un lock antes de buscar un deadlock." -#: utils/misc/guc.c:2184 +#: utils/misc/guc.c:2164 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Define el máximo retardo antes de cancelar consultas cuando un servidor hot standby está procesando datos de WAL archivado." -#: utils/misc/guc.c:2195 +#: utils/misc/guc.c:2175 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "Define el máximo retardo antes de cancelar consultas cuando un servidor hot standby está procesando datos de WAL en flujo." -#: utils/misc/guc.c:2206 +#: utils/misc/guc.c:2186 msgid "Sets the minimum delay for applying changes during recovery." msgstr "Define el retraso mínimo para aplicar cambios durante la recuperación." -#: utils/misc/guc.c:2217 +#: utils/misc/guc.c:2197 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." -msgstr "Define el intervalo máximo entre reportes de estado que el receptor WAL envía al servidor origen." +msgstr "Define el intervalo máximo entre reportes de estado que el receptor de WAL envía al servidor origen." -#: utils/misc/guc.c:2228 +#: utils/misc/guc.c:2208 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "Define el máximo tiempo de espera para recibir datos desde el servidor origen." -#: utils/misc/guc.c:2239 +#: utils/misc/guc.c:2219 msgid "Sets the maximum number of concurrent connections." msgstr "Número máximo de conexiones concurrentes." -#: utils/misc/guc.c:2250 +#: utils/misc/guc.c:2230 msgid "Sets the number of connection slots reserved for superusers." msgstr "Número de conexiones reservadas para superusuarios." -#: utils/misc/guc.c:2264 +#: utils/misc/guc.c:2244 msgid "Sets the number of shared memory buffers used by the server." msgstr "Número de búfers de memoria compartida usados por el servidor." -#: utils/misc/guc.c:2275 +#: utils/misc/guc.c:2255 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Número de búfers de memoria temporal usados por cada sesión." -#: utils/misc/guc.c:2286 +#: utils/misc/guc.c:2266 msgid "Sets the TCP port the server listens on." msgstr "Puerto TCP en el cual escuchará el servidor." -#: utils/misc/guc.c:2296 +#: utils/misc/guc.c:2276 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Privilegios de acceso al socket Unix." -#: utils/misc/guc.c:2297 +#: utils/misc/guc.c:2277 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Los sockets de dominio Unix usan la funcionalidad de permisos de archivos estándar de Unix. Se espera que el valor de esta opción sea una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. Para usar el modo octal acostumbrado, comience el número con un 0 (cero)." -#: utils/misc/guc.c:2311 +#: utils/misc/guc.c:2291 msgid "Sets the file permissions for log files." msgstr "Define los privilegios para los archivos del registro del servidor." -#: utils/misc/guc.c:2312 +#: utils/misc/guc.c:2292 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Se espera que el valor de esta opción sea una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. Para usar el modo octal acostumbrado, comience el número con un 0 (cero)." -#: utils/misc/guc.c:2326 +#: utils/misc/guc.c:2306 msgid "Mode of the data directory." msgstr "Modo del directorio de datos." -#: utils/misc/guc.c:2327 +#: utils/misc/guc.c:2307 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "El valor del parámetro es una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. (Para usar el modo octal acostumbrado, comience el número con un 0 (cero).)" -#: utils/misc/guc.c:2340 +#: utils/misc/guc.c:2320 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Establece el límite de memoria que se usará para espacios de trabajo de consultas." -#: utils/misc/guc.c:2341 +#: utils/misc/guc.c:2321 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "Esta es la cantidad máxima de memoria que se usará para operaciones internas de ordenamiento y tablas de hashing, antes de comenzar a usar archivos temporales en disco." -#: utils/misc/guc.c:2353 +#: utils/misc/guc.c:2333 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Establece el límite de memoria que se usará para operaciones de mantención." -#: utils/misc/guc.c:2354 +#: utils/misc/guc.c:2334 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Esto incluye operaciones como VACUUM y CREATE INDEX." -#: utils/misc/guc.c:2364 +#: utils/misc/guc.c:2344 #, fuzzy #| msgid "Sets the maximum memory to be used for maintenance operations." msgid "Sets the maximum memory to be used for logical decoding." msgstr "Establece el límite de memoria que se usará para operaciones de mantención." -#: utils/misc/guc.c:2365 +#: utils/misc/guc.c:2345 #, fuzzy #| msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgid "This much memory can be used by each internal reorder buffer before spilling to disk." msgstr "Esta es la cantidad máxima de memoria que se usará para operaciones internas de ordenamiento y tablas de hashing, antes de comenzar a usar archivos temporales en disco." -#: utils/misc/guc.c:2381 +#: utils/misc/guc.c:2361 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Establece el tamaño máximo del stack, en kilobytes." -#: utils/misc/guc.c:2392 +#: utils/misc/guc.c:2372 msgid "Limits the total size of all temporary files used by each process." msgstr "Limita el tamaño total de todos los archivos temporales usados en cada proceso." -#: utils/misc/guc.c:2393 +#: utils/misc/guc.c:2373 msgid "-1 means no limit." msgstr "-1 significa sin límite." -#: utils/misc/guc.c:2403 +#: utils/misc/guc.c:2383 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Costo de Vacuum de una página encontrada en el buffer." -#: utils/misc/guc.c:2413 +#: utils/misc/guc.c:2393 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Costo de Vacuum de una página no encontrada en el cache." -#: utils/misc/guc.c:2423 +#: utils/misc/guc.c:2403 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Costo de Vacuum de una página ensuciada por vacuum." -#: utils/misc/guc.c:2433 +#: utils/misc/guc.c:2413 msgid "Vacuum cost amount available before napping." msgstr "Costo de Vacuum disponible antes de descansar." -#: utils/misc/guc.c:2443 +#: utils/misc/guc.c:2423 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Costo de Vacuum disponible antes de descansar, para autovacuum." -#: utils/misc/guc.c:2453 +#: utils/misc/guc.c:2433 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "Define la cantidad máxima de archivos abiertos por cada subproceso." -#: utils/misc/guc.c:2466 +#: utils/misc/guc.c:2446 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Define la cantidad máxima de transacciones preparadas simultáneas." -#: utils/misc/guc.c:2477 +#: utils/misc/guc.c:2457 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Define el OID mínimo para hacer seguimiento de locks." -#: utils/misc/guc.c:2478 +#: utils/misc/guc.c:2458 msgid "Is used to avoid output on system tables." msgstr "Se usa para evitar salida excesiva por tablas de sistema." -#: utils/misc/guc.c:2487 +#: utils/misc/guc.c:2467 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Define el OID de una tabla con trazado incondicional de locks." -#: utils/misc/guc.c:2499 +#: utils/misc/guc.c:2479 msgid "Sets the maximum allowed duration of any statement." msgstr "Define la duración máxima permitida de sentencias." -#: utils/misc/guc.c:2500 utils/misc/guc.c:2511 utils/misc/guc.c:2522 +#: utils/misc/guc.c:2480 utils/misc/guc.c:2491 utils/misc/guc.c:2502 msgid "A value of 0 turns off the timeout." msgstr "Un valor de 0 desactiva el máximo." -#: utils/misc/guc.c:2510 +#: utils/misc/guc.c:2490 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Define la duración máxima permitida de cualquier espera por un lock." -#: utils/misc/guc.c:2521 +#: utils/misc/guc.c:2501 msgid "Sets the maximum allowed duration of any idling transaction." msgstr "Define la duración máxima permitida de transacciones inactivas." -#: utils/misc/guc.c:2532 +#: utils/misc/guc.c:2512 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Mínima edad a la cual VACUUM debería congelar (freeze) una fila de una tabla." -#: utils/misc/guc.c:2542 +#: utils/misc/guc.c:2522 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Edad a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." -#: utils/misc/guc.c:2552 +#: utils/misc/guc.c:2532 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Mínima edad a la cual VACUUM debería congelar (freeze) el multixact en una fila." -#: utils/misc/guc.c:2562 +#: utils/misc/guc.c:2542 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Edad de multixact a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." -#: utils/misc/guc.c:2572 +#: utils/misc/guc.c:2552 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Número de transacciones por las cuales VACUUM y la limpieza HOT deberían postergarse." -#: utils/misc/guc.c:2585 +#: utils/misc/guc.c:2565 msgid "Sets the maximum number of locks per transaction." msgstr "Cantidad máxima de candados (locks) por transacción." -#: utils/misc/guc.c:2586 +#: utils/misc/guc.c:2566 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "El tamaño de la tabla compartida de candados se calcula usando la suposición de que a lo más max_locks_per_transaction * max_connections objetos necesitarán ser bloqueados simultáneamente." -#: utils/misc/guc.c:2597 +#: utils/misc/guc.c:2577 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Cantidad máxima de candados (locks) de predicado por transacción." -#: utils/misc/guc.c:2598 +#: utils/misc/guc.c:2578 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "El tamaño de la tabla compartida de candados se calcula usando la suposición de que a lo más max_pred_locks_per_transaction * max_connections objetos necesitarán ser bloqueados simultáneamente." -#: utils/misc/guc.c:2609 +#: utils/misc/guc.c:2589 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "Cantidad máxima de páginas y tuplas bloqueadas por predicado." -#: utils/misc/guc.c:2610 +#: utils/misc/guc.c:2590 msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." msgstr "Si más que este total de páginas y tuplas en la misma relación están bloqueadas por una conexión, esos locks son reemplazados por un lock a nivel de relación." -#: utils/misc/guc.c:2620 +#: utils/misc/guc.c:2600 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Cantidad máxima de locks de predicado por página." -#: utils/misc/guc.c:2621 +#: utils/misc/guc.c:2601 msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." msgstr "Si más que este número de tuplas de la misma página están bloqueadas por una conexión, esos locks son reemplazados por un lock a nivel de página." -#: utils/misc/guc.c:2631 +#: utils/misc/guc.c:2611 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Define el tiempo máximo para completar proceso de autentificación." -#: utils/misc/guc.c:2643 +#: utils/misc/guc.c:2623 msgid "Waits N seconds on connection startup before authentication." msgstr "Espera N segundos al inicio de la conexión antes de la autentificación." -#: utils/misc/guc.c:2654 -msgid "Sets the number of WAL files held for standby servers." -msgstr "Número de archivos WAL conservados para servidores standby." +#: utils/misc/guc.c:2634 +#, fuzzy +#| msgid "Shows the size of write ahead log segments." +msgid "Sets the size of WAL files held for standby servers." +msgstr "Muestra el tamaño de los segmentos de WAL." -#: utils/misc/guc.c:2664 +#: utils/misc/guc.c:2645 msgid "Sets the minimum size to shrink the WAL to." msgstr "Define el tamaño mínimo al cual reducir el WAL." -#: utils/misc/guc.c:2676 +#: utils/misc/guc.c:2657 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Define el tamaño de WAL que desencadena un checkpoint." -#: utils/misc/guc.c:2688 +#: utils/misc/guc.c:2669 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Define el tiempo máximo entre puntos de control de WAL automáticos." -#: utils/misc/guc.c:2699 +#: utils/misc/guc.c:2680 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "Registrar si el llenado de segmentos de WAL es más frecuente que esto." -#: utils/misc/guc.c:2701 +#: utils/misc/guc.c:2682 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "Envía un mensaje a los registros del servidor si los punto de control causados por el llenado de archivos de segmento sucede con más frecuencia que este número de segundos. Un valor de 0 (cero) desactiva la opción." -#: utils/misc/guc.c:2713 utils/misc/guc.c:2929 utils/misc/guc.c:2976 +#: utils/misc/guc.c:2694 utils/misc/guc.c:2910 utils/misc/guc.c:2957 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "Número de páginas después del cual las escrituras previamente ejecutadas se sincronizan a disco." -#: utils/misc/guc.c:2724 +#: utils/misc/guc.c:2705 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Búfers en memoria compartida para páginas de WAL." -#: utils/misc/guc.c:2735 +#: utils/misc/guc.c:2716 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Tiempo entre sincronizaciones de WAL ejecutadas por el proceso escritor de WAL." -#: utils/misc/guc.c:2746 +#: utils/misc/guc.c:2727 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Cantidad de WAL escrito por el proceso escritor de WAL que desencadena una sincronización (flush)." -#: utils/misc/guc.c:2757 +#: utils/misc/guc.c:2738 msgid "Size of new file to fsync instead of writing WAL." -msgstr "" +msgstr "Tamaño del nuevo archivo para hacer fsync en lugar de escribir WAL." -#: utils/misc/guc.c:2768 +#: utils/misc/guc.c:2749 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "Define la cantidad máxima de procesos «WAL sender» simultáneos." -#: utils/misc/guc.c:2779 +#: utils/misc/guc.c:2760 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Define la cantidad máxima de slots de replicación definidos simultáneamente." -#: utils/misc/guc.c:2789 +#: utils/misc/guc.c:2770 #, fuzzy #| msgid "Sets the maximum number of simultaneously defined replication slots." msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "Define la cantidad máxima de slots de replicación definidos simultáneamente." -#: utils/misc/guc.c:2790 +#: utils/misc/guc.c:2771 msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." -msgstr "" +msgstr "Los slots de replicación serán invalidados, y los segmentos de WAL eliminados o reciclados, si se usa esta cantidad de espacio de disco en WAL." -#: utils/misc/guc.c:2802 +#: utils/misc/guc.c:2783 msgid "Sets the maximum time to wait for WAL replication." msgstr "Define el tiempo máximo a esperar la replicación de WAL." -#: utils/misc/guc.c:2813 +#: utils/misc/guc.c:2794 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Retardo en microsegundos entre completar una transacción y escribir WAL a disco." -#: utils/misc/guc.c:2825 +#: utils/misc/guc.c:2806 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "Mínimo de transacciones concurrentes para esperar commit_delay." -#: utils/misc/guc.c:2836 +#: utils/misc/guc.c:2817 msgid "Sets the number of digits displayed for floating-point values." msgstr "Ajustar el número de dígitos mostrados para valores de coma flotante." -#: utils/misc/guc.c:2837 +#: utils/misc/guc.c:2818 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." msgstr "Esto afecta los tipos real, de doble precisión, y geométricos. Un valor del parámetro cero o negativo se agrega a la cantidad estándar de dígitos (FLT_DIG o DBL_DIG, según sea apropiado). Cualquier valor mayor que cero selecciona el modo de salida preciso." -#: utils/misc/guc.c:2849 +#: utils/misc/guc.c:2830 #, fuzzy -#| msgid "Sets the minimum execution time above which statements will be logged." +#| msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." -msgstr "Tiempo mínimo de ejecución a partir del cual se registran las consultas." +msgstr "Tiempo mínimo de ejecución a partir del cual se registran las acciones de autovacuum." -#: utils/misc/guc.c:2852 +#: utils/misc/guc.c:2833 #, fuzzy #| msgid "Zero prints all queries. -1 turns this feature off." msgid "Zero log a sample of all queries. -1 turns this feature off." msgstr "Cero imprime todas las consultas. -1 desactiva esta funcionalidad." -#: utils/misc/guc.c:2862 +#: utils/misc/guc.c:2843 #, fuzzy -#| msgid "Sets the minimum execution time above which statements will be logged." +#| msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgid "Sets the minimum execution time above which all statements will be logged." -msgstr "Tiempo mínimo de ejecución a partir del cual se registran las consultas." +msgstr "Tiempo mínimo de ejecución a partir del cual se registran las acciones de autovacuum." -#: utils/misc/guc.c:2864 +#: utils/misc/guc.c:2845 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Cero imprime todas las consultas. -1 desactiva esta funcionalidad." -#: utils/misc/guc.c:2874 +#: utils/misc/guc.c:2855 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "Tiempo mínimo de ejecución a partir del cual se registran las acciones de autovacuum." -#: utils/misc/guc.c:2876 +#: utils/misc/guc.c:2857 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Cero registra todas las acciones. -1 desactiva el registro de autovacuum." -#: utils/misc/guc.c:2886 +#: utils/misc/guc.c:2867 msgid "When logging statements, limit logged parameter values to first N bytes." -msgstr "" +msgstr "Cuando se registren sentencias, limitar los valores de parámetros registrados a los primeros N bytes." -#: utils/misc/guc.c:2887 utils/misc/guc.c:2898 +#: utils/misc/guc.c:2868 utils/misc/guc.c:2879 msgid "-1 to print values in full." -msgstr "" +msgstr "-1 para mostrar los valores completos." -#: utils/misc/guc.c:2897 +#: utils/misc/guc.c:2878 msgid "When reporting an error, limit logged parameter values to first N bytes." -msgstr "" +msgstr "Cuando se reporta un error, limitar los valores de parámetros registrados a los primeros N bytes." -#: utils/misc/guc.c:2908 +#: utils/misc/guc.c:2889 msgid "Background writer sleep time between rounds." msgstr "Tiempo de descanso entre rondas del background writer" -#: utils/misc/guc.c:2919 +#: utils/misc/guc.c:2900 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Número máximo de páginas LRU a escribir en cada ronda del background writer" -#: utils/misc/guc.c:2942 +#: utils/misc/guc.c:2923 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Cantidad máxima de peticiones simultáneas que pueden ser manejadas eficientemente por el sistema de disco." -#: utils/misc/guc.c:2943 +#: utils/misc/guc.c:2924 msgid "For RAID arrays, this should be approximately the number of drive spindles in the array." msgstr "Para arrays RAID, esto debería ser aproximadamente la cantidad de discos en el array." -#: utils/misc/guc.c:2960 +#: utils/misc/guc.c:2941 msgid "A variant of effective_io_concurrency that is used for maintenance work." -msgstr "" +msgstr "Una variante de effective_io_concurrency que se usa para tareas de mantención." -#: utils/misc/guc.c:2989 +#: utils/misc/guc.c:2970 msgid "Maximum number of concurrent worker processes." msgstr "Número máximo de procesos ayudantes concurrentes." -#: utils/misc/guc.c:3001 +#: utils/misc/guc.c:2982 msgid "Maximum number of logical replication worker processes." msgstr "Número máximo de procesos ayudantes de replicación lógica." -#: utils/misc/guc.c:3013 +#: utils/misc/guc.c:2994 msgid "Maximum number of table synchronization workers per subscription." msgstr "Número máximo de procesos ayudantes de sincronización por suscripción." -#: utils/misc/guc.c:3023 +#: utils/misc/guc.c:3004 msgid "Automatic log file rotation will occur after N minutes." msgstr "La rotación automática de archivos de log se efectuará después de N minutos." -#: utils/misc/guc.c:3034 +#: utils/misc/guc.c:3015 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "La rotación automática de archivos de log se efectuará después de N kilobytes." -#: utils/misc/guc.c:3045 +#: utils/misc/guc.c:3026 msgid "Shows the maximum number of function arguments." msgstr "Muestra la cantidad máxima de argumentos de funciones." -#: utils/misc/guc.c:3056 +#: utils/misc/guc.c:3037 msgid "Shows the maximum number of index keys." msgstr "Muestra la cantidad máxima de claves de índices." -#: utils/misc/guc.c:3067 +#: utils/misc/guc.c:3048 msgid "Shows the maximum identifier length." msgstr "Muestra el largo máximo de identificadores." -#: utils/misc/guc.c:3078 +#: utils/misc/guc.c:3059 msgid "Shows the size of a disk block." msgstr "Muestra el tamaño de un bloque de disco." -#: utils/misc/guc.c:3089 +#: utils/misc/guc.c:3070 msgid "Shows the number of pages per disk file." msgstr "Muestra el número de páginas por archivo en disco." -#: utils/misc/guc.c:3100 +#: utils/misc/guc.c:3081 msgid "Shows the block size in the write ahead log." msgstr "Muestra el tamaño de bloque en el write-ahead log." -#: utils/misc/guc.c:3111 +#: utils/misc/guc.c:3092 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Define el tiempo a esperar antes de reintentar obtener WAL después de un intento fallido." -#: utils/misc/guc.c:3123 +#: utils/misc/guc.c:3104 msgid "Shows the size of write ahead log segments." msgstr "Muestra el tamaño de los segmentos de WAL." -#: utils/misc/guc.c:3136 +#: utils/misc/guc.c:3117 msgid "Time to sleep between autovacuum runs." msgstr "Tiempo de descanso entre ejecuciones de autovacuum." -#: utils/misc/guc.c:3146 +#: utils/misc/guc.c:3127 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Número mínimo de updates o deletes antes de ejecutar vacuum." -#: utils/misc/guc.c:3155 +#: utils/misc/guc.c:3136 #, fuzzy #| msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." -msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums" +msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." msgstr "Número mínimo de inserciones, actualizaciones y eliminaciones de tuplas antes de ejecutar analyze." -#: utils/misc/guc.c:3164 +#: utils/misc/guc.c:3145 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Número mínimo de inserciones, actualizaciones y eliminaciones de tuplas antes de ejecutar analyze." -#: utils/misc/guc.c:3174 +#: utils/misc/guc.c:3155 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Edad a la cual aplicar VACUUM automáticamente a una tabla para prevenir problemas por reciclaje de ID de transacción." -#: utils/misc/guc.c:3185 +#: utils/misc/guc.c:3166 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Edad de multixact a la cual aplicar VACUUM automáticamente a una tabla para prevenir problemas por reciclaje de ID de multixacts." -#: utils/misc/guc.c:3195 +#: utils/misc/guc.c:3176 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Define la cantidad máxima de procesos «autovacuum worker» simultáneos." -#: utils/misc/guc.c:3205 +#: utils/misc/guc.c:3186 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "Cantidad máxima de procesos ayudantes paralelos por operación de mantención." -#: utils/misc/guc.c:3215 +#: utils/misc/guc.c:3196 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Cantidad máxima de locks de predicado por nodo de ejecución." -#: utils/misc/guc.c:3226 +#: utils/misc/guc.c:3207 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "Define la cantidad máxima de procesos ayudantes que pueden estar activos en un momento dado." -#: utils/misc/guc.c:3237 +#: utils/misc/guc.c:3218 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Establece el límite de memoria que cada proceso «autovacuum worker» usará." -#: utils/misc/guc.c:3248 +#: utils/misc/guc.c:3229 msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." msgstr "Tiempo antes de que un snapshot sea demasiado antiguo para leer páginas después de que el snapshot fue tomado." -#: utils/misc/guc.c:3249 +#: utils/misc/guc.c:3230 msgid "A value of -1 disables this feature." msgstr "El valor -1 desactiva esta característica." -#: utils/misc/guc.c:3259 +#: utils/misc/guc.c:3240 msgid "Time between issuing TCP keepalives." msgstr "Tiempo entre cada emisión de TCP keepalive." -#: utils/misc/guc.c:3260 utils/misc/guc.c:3271 utils/misc/guc.c:3395 +#: utils/misc/guc.c:3241 utils/misc/guc.c:3252 utils/misc/guc.c:3376 msgid "A value of 0 uses the system default." msgstr "Un valor 0 usa el valor por omisión del sistema." -#: utils/misc/guc.c:3270 +#: utils/misc/guc.c:3251 msgid "Time between TCP keepalive retransmits." msgstr "Tiempo entre retransmisiones TCP keepalive." -#: utils/misc/guc.c:3281 +#: utils/misc/guc.c:3262 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "La renegociación SSL ya no está soportada; esto sólo puede ser 0." -#: utils/misc/guc.c:3292 +#: utils/misc/guc.c:3273 msgid "Maximum number of TCP keepalive retransmits." msgstr "Cantidad máxima de retransmisiones TCP keepalive." -#: utils/misc/guc.c:3293 +#: utils/misc/guc.c:3274 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "Esto controla el número de retransmisiones consecutivas de keepalive que pueden ser perdidas antes que la conexión sea considerada muerta. Un valor 0 usa el valor por omisión del sistema." -#: utils/misc/guc.c:3304 +#: utils/misc/guc.c:3285 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Define el máximo de resultados permitidos por búsquedas exactas con GIN." -#: utils/misc/guc.c:3315 +#: utils/misc/guc.c:3296 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Define la suposición del optimizador sobre el tamaño total de los caches de datos." -#: utils/misc/guc.c:3316 +#: utils/misc/guc.c:3297 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "Esto es, el tamaño total de caches (cache del kernel y búfers compartidos) usados por archivos de datos de PostgreSQL. Esto se mide en páginas de disco, que normalmente son de 8 kB cada una." -#: utils/misc/guc.c:3327 +#: utils/misc/guc.c:3308 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Define la cantidad mínima de datos en una tabla para un recorrido paralelo." -#: utils/misc/guc.c:3328 +#: utils/misc/guc.c:3309 msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." msgstr "Si el planificador estima que leerá un número de páginas de tabla demasiado pequeñas para alcanzar este límite, no se considerará una búsqueda paralela." -#: utils/misc/guc.c:3338 +#: utils/misc/guc.c:3319 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Define la cantidad mínima de datos en un índice para un recorrido paralelo." -#: utils/misc/guc.c:3339 +#: utils/misc/guc.c:3320 msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." msgstr "Si el planificador estima que leerá un número de páginas de índice demasiado pequeñas para alcanzar este límite, no se considerará una búsqueda paralela." -#: utils/misc/guc.c:3350 +#: utils/misc/guc.c:3331 msgid "Shows the server version as an integer." msgstr "Muestra la versión del servidor como un número entero." -#: utils/misc/guc.c:3361 +#: utils/misc/guc.c:3342 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "Registra el uso de archivos temporales que crezcan más allá de este número de kilobytes." -#: utils/misc/guc.c:3362 +#: utils/misc/guc.c:3343 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "Cero registra todos los archivos. El valor por omisión es -1 (lo cual desactiva el registro)." -#: utils/misc/guc.c:3372 +#: utils/misc/guc.c:3353 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Tamaño reservado para pg_stat_activity.query, en bytes." -#: utils/misc/guc.c:3383 +#: utils/misc/guc.c:3364 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Define el tamaño máximo de la lista de pendientes de un índice GIN." -#: utils/misc/guc.c:3394 +#: utils/misc/guc.c:3375 msgid "TCP user timeout." msgstr "Tiempo de expiración de TCP." -#: utils/misc/guc.c:3414 +#: utils/misc/guc.c:3395 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "Estimación del costo de una página leída secuencialmente." -#: utils/misc/guc.c:3425 +#: utils/misc/guc.c:3406 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "Estimación del costo de una página leída no secuencialmente." -#: utils/misc/guc.c:3436 +#: utils/misc/guc.c:3417 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "Estimación del costo de procesar cada tupla (fila)." -#: utils/misc/guc.c:3447 +#: utils/misc/guc.c:3428 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "Estimación del costo de procesar cada fila de índice durante un recorrido de índice." -#: utils/misc/guc.c:3458 +#: utils/misc/guc.c:3439 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "Estimación del costo de procesar cada operador o llamada a función." -#: utils/misc/guc.c:3469 +#: utils/misc/guc.c:3450 msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." msgstr "Estimación del costo de pasar cada tupla (fila) desde un proceso ayudante al proceso servidor principal." -#: utils/misc/guc.c:3480 +#: utils/misc/guc.c:3461 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "Estimación del costo de lanzar procesos ayudantes para consultas en paralelo." -#: utils/misc/guc.c:3492 +#: utils/misc/guc.c:3473 msgid "Perform JIT compilation if query is more expensive." msgstr "Ejecutar compilación JIT si la consulta es más cara." -#: utils/misc/guc.c:3493 +#: utils/misc/guc.c:3474 msgid "-1 disables JIT compilation." msgstr "-1 inhabilita compilación JIT." -#: utils/misc/guc.c:3503 +#: utils/misc/guc.c:3484 msgid "Optimize JITed functions if query is more expensive." msgstr "Optimizar funciones JIT-compiladas si la consulta es más cara." -#: utils/misc/guc.c:3504 +#: utils/misc/guc.c:3485 msgid "-1 disables optimization." msgstr "-1 inhabilita la optimización." -#: utils/misc/guc.c:3514 +#: utils/misc/guc.c:3495 msgid "Perform JIT inlining if query is more expensive." msgstr "Ejecutar «inlining» JIT si la consulta es más cara." -#: utils/misc/guc.c:3515 +#: utils/misc/guc.c:3496 msgid "-1 disables inlining." msgstr "-1 inhabilita el «inlining»." -#: utils/misc/guc.c:3525 +#: utils/misc/guc.c:3506 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Estimación de la fracción de filas de un cursor que serán extraídas." -#: utils/misc/guc.c:3537 +#: utils/misc/guc.c:3518 msgid "GEQO: selective pressure within the population." msgstr "GEQO: presión selectiva dentro de la población." -#: utils/misc/guc.c:3548 +#: utils/misc/guc.c:3529 msgid "GEQO: seed for random path selection." msgstr "GEQO: semilla para la selección aleatoria de caminos." -#: utils/misc/guc.c:3559 +#: utils/misc/guc.c:3540 +msgid "Multiple of work_mem to use for hash tables." +msgstr "Múltiplo de work_mem para el uso de tablas de hash." + +#: utils/misc/guc.c:3551 msgid "Multiple of the average buffer usage to free per round." msgstr "Múltiplo del uso promedio de búfers que liberar en cada ronda." -#: utils/misc/guc.c:3569 +#: utils/misc/guc.c:3561 msgid "Sets the seed for random-number generation." msgstr "Semilla para la generación de números aleatorios." -#: utils/misc/guc.c:3580 +#: utils/misc/guc.c:3572 msgid "Vacuum cost delay in milliseconds." msgstr "Tiempo de descanso de vacuum en milisegundos." -#: utils/misc/guc.c:3591 +#: utils/misc/guc.c:3583 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Tiempo de descanso de vacuum en milisegundos, para autovacuum." -#: utils/misc/guc.c:3602 +#: utils/misc/guc.c:3594 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Número de updates o deletes de tuplas antes de ejecutar un vacuum, como fracción de reltuples." -#: utils/misc/guc.c:3612 +#: utils/misc/guc.c:3604 #, fuzzy #| msgid "Number of tuple inserts prior to index cleanup as a fraction of reltuples." msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "Número de inserts de tuplas antes de ejecutar una limpieza de índice, como fracción de reltuples." -#: utils/misc/guc.c:3622 +#: utils/misc/guc.c:3614 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Número mínimo de inserciones, actualizaciones y eliminaciones de tuplas antes de ejecutar analyze, como fracción de reltuples." -#: utils/misc/guc.c:3632 +#: utils/misc/guc.c:3624 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "Tiempo utilizado en escribir páginas «sucias» durante los puntos de control, medido como fracción del intervalo del punto de control." -#: utils/misc/guc.c:3642 +#: utils/misc/guc.c:3634 msgid "Number of tuple inserts prior to index cleanup as a fraction of reltuples." msgstr "Número de inserts de tuplas antes de ejecutar una limpieza de índice, como fracción de reltuples." -#: utils/misc/guc.c:3652 +#: utils/misc/guc.c:3644 msgid "Fraction of statements exceeding log_min_duration_sample to be logged." -msgstr "" +msgstr "Fracción de sentencias que duren más de log_min_duration_sample a ser registradas." -#: utils/misc/guc.c:3653 +#: utils/misc/guc.c:3645 msgid "Use a value between 0.0 (never log) and 1.0 (always log)." -msgstr "" +msgstr "Use un valor entre 0.0 (no registrar nunca) y 1.0 (registrar siempre)." -#: utils/misc/guc.c:3662 +#: utils/misc/guc.c:3654 msgid "Set the fraction of transactions to log for new transactions." msgstr "Define la fracción de transacciones que registrar en el log, para nuevas transacciones." -#: utils/misc/guc.c:3663 +#: utils/misc/guc.c:3655 msgid "Logs all statements from a fraction of transactions. Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgstr "Registra todas las sentencias de una fracción de transacciones. Use un valor entre 0.0 (nunca registrar) y 1.0 (registrar todas las sentencias de todas las transacciones)." -#: utils/misc/guc.c:3683 +#: utils/misc/guc.c:3675 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Orden de shell que se invocará para archivar un archivo WAL." -#: utils/misc/guc.c:3693 +#: utils/misc/guc.c:3685 +#, fuzzy +#| msgid "Sets the shell command that will be called to archive a WAL file." msgid "Sets the shell command that will retrieve an archived WAL file." -msgstr "Orden de shell que se invocará para obtener un archivo WAL archivado." +msgstr "Orden de shell que se invocará para archivar un archivo WAL." -#: utils/misc/guc.c:3703 +#: utils/misc/guc.c:3695 msgid "Sets the shell command that will be executed at every restart point." msgstr "Orden de shell que se invocará en cada «restart point»." -#: utils/misc/guc.c:3713 +#: utils/misc/guc.c:3705 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "Orden de shell que se invocará una vez al terminar la recuperación." -#: utils/misc/guc.c:3723 +#: utils/misc/guc.c:3715 msgid "Specifies the timeline to recover into." msgstr "Especifica la línea de tiempo a la cual recuperar." -#: utils/misc/guc.c:3733 +#: utils/misc/guc.c:3725 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "Defina a «immediate» para terminar la recuperación en cuando se alcance el estado consistente." -#: utils/misc/guc.c:3742 +#: utils/misc/guc.c:3734 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "Define el ID de transacción hasta el cual se ejecutará la recuperación." -#: utils/misc/guc.c:3751 +#: utils/misc/guc.c:3743 msgid "Sets the time stamp up to which recovery will proceed." msgstr "Define la marca de tiempo hasta la cual se ejecutará la recuperación." -#: utils/misc/guc.c:3760 +#: utils/misc/guc.c:3752 msgid "Sets the named restore point up to which recovery will proceed." msgstr "Define el nombre del punto de restauración hasta el cual se ejecutará la recuperación." -#: utils/misc/guc.c:3769 +#: utils/misc/guc.c:3761 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "Define el LSN de la ubicación de WAL hasta la cual se ejecutará la recuperación." -#: utils/misc/guc.c:3779 +#: utils/misc/guc.c:3771 msgid "Specifies a file name whose presence ends recovery in the standby." msgstr "Especifica un nombre de archivo cuya presencia termina la recuperación en el standby." -#: utils/misc/guc.c:3789 +#: utils/misc/guc.c:3781 msgid "Sets the connection string to be used to connect to the sending server." msgstr "Define la cadena de conexión que se usará para conectarse al servidor de origen." -#: utils/misc/guc.c:3800 +#: utils/misc/guc.c:3792 msgid "Sets the name of the replication slot to use on the sending server." msgstr "Define el nombre del slot de replicación a utilizar en el servidor de origen." -#: utils/misc/guc.c:3810 +#: utils/misc/guc.c:3802 msgid "Sets the client's character set encoding." msgstr "Codificación del juego de caracteres del cliente." -#: utils/misc/guc.c:3821 +#: utils/misc/guc.c:3813 msgid "Controls information prefixed to each log line." msgstr "Controla el prefijo que antecede cada línea registrada." -#: utils/misc/guc.c:3822 +#: utils/misc/guc.c:3814 msgid "If blank, no prefix is used." msgstr "si está en blanco, no se usa prefijo." -#: utils/misc/guc.c:3831 +#: utils/misc/guc.c:3823 msgid "Sets the time zone to use in log messages." msgstr "Define el huso horario usando en los mensajes registrados." -#: utils/misc/guc.c:3841 +#: utils/misc/guc.c:3833 msgid "Sets the display format for date and time values." msgstr "Formato de salida para valores de horas y fechas." -#: utils/misc/guc.c:3842 +#: utils/misc/guc.c:3834 msgid "Also controls interpretation of ambiguous date inputs." msgstr "También controla la interpretación de entradas ambiguas de fechas" -#: utils/misc/guc.c:3853 +#: utils/misc/guc.c:3845 msgid "Sets the default table access method for new tables." msgstr "Define el método de acceso a tablas por omisión para nuevas tablas." -#: utils/misc/guc.c:3864 +#: utils/misc/guc.c:3856 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Define el tablespace en el cual crear tablas e índices." -#: utils/misc/guc.c:3865 +#: utils/misc/guc.c:3857 msgid "An empty string selects the database's default tablespace." msgstr "Una cadena vacía especifica el tablespace por omisión de la base de datos." -#: utils/misc/guc.c:3875 +#: utils/misc/guc.c:3867 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "Define el/los tablespace/s en el cual crear tablas temporales y archivos de ordenamiento." -#: utils/misc/guc.c:3886 +#: utils/misc/guc.c:3878 msgid "Sets the path for dynamically loadable modules." msgstr "Ruta para módulos dinámicos." -#: utils/misc/guc.c:3887 +#: utils/misc/guc.c:3879 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "Si se necesita abrir un módulo dinámico y el nombre especificado no tiene un componente de directorio (es decir, no contiene un slash), el sistema buscará el archivo especificado en esta ruta." -#: utils/misc/guc.c:3900 +#: utils/misc/guc.c:3892 msgid "Sets the location of the Kerberos server key file." msgstr "Ubicación del archivo de llave del servidor Kerberos." -#: utils/misc/guc.c:3911 +#: utils/misc/guc.c:3903 msgid "Sets the Bonjour service name." msgstr "Nombre del servicio Bonjour." -#: utils/misc/guc.c:3923 +#: utils/misc/guc.c:3915 msgid "Shows the collation order locale." msgstr "Configuración regional de ordenamiento de cadenas (collation)." -#: utils/misc/guc.c:3934 +#: utils/misc/guc.c:3926 msgid "Shows the character classification and case conversion locale." msgstr "Configuración regional de clasificación de caracteres y conversión de mayúsculas." -#: utils/misc/guc.c:3945 +#: utils/misc/guc.c:3937 msgid "Sets the language in which messages are displayed." msgstr "Idioma en el que se despliegan los mensajes." -#: utils/misc/guc.c:3955 +#: utils/misc/guc.c:3947 msgid "Sets the locale for formatting monetary amounts." msgstr "Configuración regional para formatos de moneda." -#: utils/misc/guc.c:3965 +#: utils/misc/guc.c:3957 msgid "Sets the locale for formatting numbers." msgstr "Configuración regional para formatos de números." -#: utils/misc/guc.c:3975 +#: utils/misc/guc.c:3967 msgid "Sets the locale for formatting date and time values." msgstr "Configuración regional para formatos de horas y fechas." -#: utils/misc/guc.c:3985 +#: utils/misc/guc.c:3977 msgid "Lists shared libraries to preload into each backend." msgstr "Bibliotecas compartidas a precargar en cada proceso." -#: utils/misc/guc.c:3996 +#: utils/misc/guc.c:3988 msgid "Lists shared libraries to preload into server." msgstr "Bibliotecas compartidas a precargar en el servidor." -#: utils/misc/guc.c:4007 +#: utils/misc/guc.c:3999 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Bibliotecas compartidas no privilegiadas a precargar en cada proceso." -#: utils/misc/guc.c:4018 +#: utils/misc/guc.c:4010 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Orden de búsqueda en schemas para nombres que no especifican schema." -#: utils/misc/guc.c:4030 +#: utils/misc/guc.c:4022 msgid "Sets the server (database) character set encoding." msgstr "Codificación de caracteres del servidor (bases de datos)." -#: utils/misc/guc.c:4042 +#: utils/misc/guc.c:4034 msgid "Shows the server version." msgstr "Versión del servidor." -#: utils/misc/guc.c:4054 +#: utils/misc/guc.c:4046 msgid "Sets the current role." msgstr "Define el rol actual." -#: utils/misc/guc.c:4066 +#: utils/misc/guc.c:4058 msgid "Sets the session user name." msgstr "Define el nombre del usuario de sesión." -#: utils/misc/guc.c:4077 +#: utils/misc/guc.c:4069 msgid "Sets the destination for server log output." msgstr "Define el destino de la salida del registro del servidor." -#: utils/misc/guc.c:4078 +#: utils/misc/guc.c:4070 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "Los valores aceptables son combinaciones de «stderr», «syslog», «csvlog» y «eventlog», dependiendo de la plataforma." -#: utils/misc/guc.c:4089 +#: utils/misc/guc.c:4081 msgid "Sets the destination directory for log files." msgstr "Define el directorio de destino de los archivos del registro del servidor." -#: utils/misc/guc.c:4090 +#: utils/misc/guc.c:4082 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Puede ser una ruta relativa al directorio de datos o una ruta absoluta." -#: utils/misc/guc.c:4100 +#: utils/misc/guc.c:4092 msgid "Sets the file name pattern for log files." msgstr "Define el patrón para los nombres de archivo del registro del servidor." -#: utils/misc/guc.c:4111 +#: utils/misc/guc.c:4103 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Nombre de programa para identificar PostgreSQL en mensajes de syslog." -#: utils/misc/guc.c:4122 +#: utils/misc/guc.c:4114 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "Nombre de programa para identificar PostgreSQL en mensajes del log de eventos." -#: utils/misc/guc.c:4133 +#: utils/misc/guc.c:4125 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Huso horario para desplegar e interpretar valores de tiempo." -#: utils/misc/guc.c:4143 +#: utils/misc/guc.c:4135 msgid "Selects a file of time zone abbreviations." msgstr "Selecciona un archivo de abreviaciones de huso horario." -#: utils/misc/guc.c:4153 +#: utils/misc/guc.c:4145 msgid "Sets the owning group of the Unix-domain socket." msgstr "Grupo dueño del socket de dominio Unix." -#: utils/misc/guc.c:4154 +#: utils/misc/guc.c:4146 msgid "The owning user of the socket is always the user that starts the server." msgstr "El usuario dueño del socket siempre es el usuario que inicia el servidor." -#: utils/misc/guc.c:4164 +#: utils/misc/guc.c:4156 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Directorios donde se crearán los sockets de dominio Unix." -#: utils/misc/guc.c:4179 +#: utils/misc/guc.c:4171 msgid "Sets the host name or IP address(es) to listen to." msgstr "Define el nombre de anfitrión o dirección IP en la cual escuchar." -#: utils/misc/guc.c:4194 +#: utils/misc/guc.c:4186 msgid "Sets the server's data directory." msgstr "Define la ubicación del directorio de datos." -#: utils/misc/guc.c:4205 +#: utils/misc/guc.c:4197 msgid "Sets the server's main configuration file." msgstr "Define la ubicación del archivo principal de configuración del servidor." -#: utils/misc/guc.c:4216 +#: utils/misc/guc.c:4208 msgid "Sets the server's \"hba\" configuration file." msgstr "Define la ubicación del archivo de configuración «hba» del servidor." -#: utils/misc/guc.c:4227 +#: utils/misc/guc.c:4219 msgid "Sets the server's \"ident\" configuration file." msgstr "Define la ubicación del archivo de configuración «ident» del servidor." -#: utils/misc/guc.c:4238 +#: utils/misc/guc.c:4230 msgid "Writes the postmaster PID to the specified file." msgstr "Registra el PID de postmaster en el archivo especificado." -#: utils/misc/guc.c:4249 +#: utils/misc/guc.c:4241 msgid "Name of the SSL library." msgstr "Nombre de la biblioteca SSL." -#: utils/misc/guc.c:4264 +#: utils/misc/guc.c:4256 msgid "Location of the SSL server certificate file." msgstr "Ubicación del archivo de certificado SSL del servidor." -#: utils/misc/guc.c:4274 +#: utils/misc/guc.c:4266 msgid "Location of the SSL server private key file." msgstr "Ubicación del archivo de la llave SSL privada del servidor." -#: utils/misc/guc.c:4284 +#: utils/misc/guc.c:4276 msgid "Location of the SSL certificate authority file." msgstr "Ubicación del archivo de autoridad certificadora SSL." -#: utils/misc/guc.c:4294 +#: utils/misc/guc.c:4286 msgid "Location of the SSL certificate revocation list file." msgstr "Ubicación del archivo de lista de revocación de certificados SSL" -#: utils/misc/guc.c:4304 +#: utils/misc/guc.c:4296 msgid "Writes temporary statistics files to the specified directory." msgstr "Escribe los archivos temporales de estadísticas al directorio especificado." -#: utils/misc/guc.c:4315 +#: utils/misc/guc.c:4307 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "Número de standbys sincrónicos y lista de nombres de los potenciales sincrónicos." -#: utils/misc/guc.c:4326 +#: utils/misc/guc.c:4318 msgid "Sets default text search configuration." msgstr "Define la configuración de búsqueda en texto por omisión." -#: utils/misc/guc.c:4336 +#: utils/misc/guc.c:4328 msgid "Sets the list of allowed SSL ciphers." msgstr "Define la lista de cifrados SSL permitidos." -#: utils/misc/guc.c:4351 +#: utils/misc/guc.c:4343 msgid "Sets the curve to use for ECDH." msgstr "Define la curva a usar para ECDH." -#: utils/misc/guc.c:4366 +#: utils/misc/guc.c:4358 msgid "Location of the SSL DH parameters file." msgstr "Ubicación del archivo de parámetros DH para SSL." -#: utils/misc/guc.c:4377 +#: utils/misc/guc.c:4369 msgid "Command to obtain passphrases for SSL." msgstr "Orden para obtener frases clave para SSL." -#: utils/misc/guc.c:4388 +#: utils/misc/guc.c:4380 msgid "Sets the application name to be reported in statistics and logs." msgstr "Define el nombre de aplicación a reportarse en estadísticas y logs." -#: utils/misc/guc.c:4399 +#: utils/misc/guc.c:4391 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Define el nombre del clúster, el cual se incluye en el título de proceso." -#: utils/misc/guc.c:4410 +#: utils/misc/guc.c:4402 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Define los gestores de recursos WAL para los cuales hacer verificaciones de consistencia WAL." -#: utils/misc/guc.c:4411 +#: utils/misc/guc.c:4403 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "Se registrarán imágenes de página completa para todos los bloques de datos, y comparados con los resultados de la aplicación de WAL." -#: utils/misc/guc.c:4421 +#: utils/misc/guc.c:4413 msgid "JIT provider to use." msgstr "Proveedor JIT a usar." -#: utils/misc/guc.c:4432 +#: utils/misc/guc.c:4424 #, fuzzy #| msgid "Logs the host name in the connection logs." msgid "Log backtrace for errors in these functions." msgstr "Registrar el nombre del host en la conexión." -#: utils/misc/guc.c:4452 +#: utils/misc/guc.c:4444 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Define si «\\'» está permitido en literales de cadena." -#: utils/misc/guc.c:4462 +#: utils/misc/guc.c:4454 msgid "Sets the output format for bytea." msgstr "Formato de salida para bytea." -#: utils/misc/guc.c:4472 +#: utils/misc/guc.c:4464 msgid "Sets the message levels that are sent to the client." msgstr "Nivel de mensajes enviados al cliente." -#: utils/misc/guc.c:4473 utils/misc/guc.c:4538 utils/misc/guc.c:4549 -#: utils/misc/guc.c:4625 +#: utils/misc/guc.c:4465 utils/misc/guc.c:4530 utils/misc/guc.c:4541 +#: utils/misc/guc.c:4617 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "Cada nivel incluye todos los niveles que lo siguen. Mientras más posterior el nivel, menos mensajes se enviarán." -#: utils/misc/guc.c:4483 +#: utils/misc/guc.c:4475 msgid "Enables the planner to use constraints to optimize queries." msgstr "Permitir el uso de restricciones para limitar los accesos a tablas." -#: utils/misc/guc.c:4484 +#: utils/misc/guc.c:4476 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "Las tablas no serán recorridas si sus restricciones garantizan que ninguna fila coincidirá con la consulta." -#: utils/misc/guc.c:4495 +#: utils/misc/guc.c:4487 msgid "Sets the transaction isolation level of each new transaction." msgstr "Nivel de aislación (isolation level) de transacciones nuevas." -#: utils/misc/guc.c:4505 +#: utils/misc/guc.c:4497 msgid "Sets the current transaction's isolation level." msgstr "Define el nivel de aislación de la transacción en curso." -#: utils/misc/guc.c:4516 +#: utils/misc/guc.c:4508 msgid "Sets the display format for interval values." msgstr "Formato de salida para valores de intervalos." -#: utils/misc/guc.c:4527 +#: utils/misc/guc.c:4519 msgid "Sets the verbosity of logged messages." msgstr "Verbosidad de los mensajes registrados." -#: utils/misc/guc.c:4537 +#: utils/misc/guc.c:4529 msgid "Sets the message levels that are logged." msgstr "Nivel de mensajes registrados." -#: utils/misc/guc.c:4548 +#: utils/misc/guc.c:4540 msgid "Causes all statements generating error at or above this level to be logged." msgstr "Registrar sentencias que generan error de nivel superior o igual a éste." -#: utils/misc/guc.c:4559 +#: utils/misc/guc.c:4551 msgid "Sets the type of statements logged." msgstr "Define el tipo de sentencias que se registran." -#: utils/misc/guc.c:4569 +#: utils/misc/guc.c:4561 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "«Facility» de syslog que se usará cuando syslog esté habilitado." -#: utils/misc/guc.c:4584 +#: utils/misc/guc.c:4576 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "Define el comportamiento de la sesión con respecto a disparadores y reglas de reescritura." -#: utils/misc/guc.c:4594 +#: utils/misc/guc.c:4586 msgid "Sets the current transaction's synchronization level." msgstr "Define el nivel de sincronización de la transacción en curso." -#: utils/misc/guc.c:4604 +#: utils/misc/guc.c:4596 msgid "Allows archiving of WAL files using archive_command." msgstr "Permite el archivado de WAL usando archive_command." -#: utils/misc/guc.c:4614 +#: utils/misc/guc.c:4606 msgid "Sets the action to perform upon reaching the recovery target." msgstr "Acción a ejecutar al alcanzar el destino de recuperación." -#: utils/misc/guc.c:4624 +#: utils/misc/guc.c:4616 msgid "Enables logging of recovery-related debugging information." msgstr "Recolectar información de depuración relacionada con la recuperación." -#: utils/misc/guc.c:4640 +#: utils/misc/guc.c:4632 msgid "Collects function-level statistics on database activity." msgstr "Recolectar estadísticas de actividad de funciones en la base de datos." -#: utils/misc/guc.c:4650 +#: utils/misc/guc.c:4642 msgid "Set the level of information written to the WAL." msgstr "Nivel de información escrita a WAL." -#: utils/misc/guc.c:4660 +#: utils/misc/guc.c:4652 msgid "Selects the dynamic shared memory implementation used." msgstr "Escoge la implementación de memoria compartida dinámica que se usará." -#: utils/misc/guc.c:4670 +#: utils/misc/guc.c:4662 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "Escoge la implementación de memoria compartida dinámica que se usará para la región principal de memoria compartida." -#: utils/misc/guc.c:4680 +#: utils/misc/guc.c:4672 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Selecciona el método usado para forzar escritura de WAL a disco." -#: utils/misc/guc.c:4690 +#: utils/misc/guc.c:4682 msgid "Sets how binary values are to be encoded in XML." msgstr "Define cómo se codificarán los valores binarios en XML." -#: utils/misc/guc.c:4700 +#: utils/misc/guc.c:4692 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "Define si los datos XML implícitos en operaciones de análisis y serialización serán considerados documentos o fragmentos de contenido." -#: utils/misc/guc.c:4711 +#: utils/misc/guc.c:4703 msgid "Use of huge pages on Linux or Windows." msgstr "Usar páginas grandes (huge) en Linux o Windows." -#: utils/misc/guc.c:4721 +#: utils/misc/guc.c:4713 msgid "Forces use of parallel query facilities." msgstr "Obliga al uso de la funcionalidad de consultas paralelas." -#: utils/misc/guc.c:4722 +#: utils/misc/guc.c:4714 msgid "If possible, run query using a parallel worker and with parallel restrictions." msgstr "Si es posible, ejecuta cada consulta en un ayudante paralelo y con restricciones de paralelismo." -#: utils/misc/guc.c:4732 -msgid "Encrypt passwords." -msgstr "Cifrar contraseñas." +#: utils/misc/guc.c:4724 +msgid "Chooses the algorithm for encrypting passwords." +msgstr "Escoge el algoritmo para cifrar contraseñas." -#: utils/misc/guc.c:4733 -msgid "When a password is specified in CREATE USER or ALTER USER without writing either ENCRYPTED or UNENCRYPTED, this parameter determines whether the password is to be encrypted." -msgstr "Cuando se entrega una contraseña en CREATE USER o ALTER USER sin especificar ENCRYPTED ni UNENCRYPTED, esta opción determina si la password deberá ser encriptada." - -#: utils/misc/guc.c:4744 +#: utils/misc/guc.c:4734 msgid "Controls the planner's selection of custom or generic plan." msgstr "Controla la selección del optimizador de planes genéricos o «custom»." -#: utils/misc/guc.c:4745 +#: utils/misc/guc.c:4735 msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." msgstr "Las sentencias preparadas pueden tener planes genéricos y «custom», y el optimizador intentará escoger cuál es mejor. Esto puede usarse para controlar manualmente el comportamiento." -#: utils/misc/guc.c:4757 +#: utils/misc/guc.c:4747 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "Define la versión mínima del protocolo SSL/TLS a usar." -#: utils/misc/guc.c:4769 +#: utils/misc/guc.c:4759 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "Define la versión máxima del protocolo SSL/TLS a usar." -#: utils/misc/guc.c:5572 +#: utils/misc/guc.c:5562 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: no se pudo acceder al directorio «%s»: %s\n" -#: utils/misc/guc.c:5577 +#: utils/misc/guc.c:5567 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "Ejecute initdb o pg_basebackup para inicializar un directorio de datos de PostgreSQL.\n" -#: utils/misc/guc.c:5597 +#: utils/misc/guc.c:5587 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -26557,12 +26486,12 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración del servidor.\n" "Debe especificar la opción --config-file o -D o definir la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:5616 +#: utils/misc/guc.c:5606 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s: no se pudo acceder al archivo de configuración «%s»: %s\n" -#: utils/misc/guc.c:5642 +#: utils/misc/guc.c:5632 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -26571,7 +26500,7 @@ msgstr "" "%s no sabe dónde encontrar los archivos de sistema de la base de datos.\n" "Esto puede especificarse como «data_directory» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:5690 +#: utils/misc/guc.c:5680 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -26580,7 +26509,7 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración «hba».\n" "Esto puede especificarse como «hba_file» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:5713 +#: utils/misc/guc.c:5703 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -26589,188 +26518,188 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración «ident».\n" "Esto puede especificarse como «ident_file» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:6555 +#: utils/misc/guc.c:6545 msgid "Value exceeds integer range." msgstr "El valor excede el rango para enteros." -#: utils/misc/guc.c:6791 +#: utils/misc/guc.c:6781 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s está fuera del rango aceptable para el parámetro «%s» (%d .. %d)" -#: utils/misc/guc.c:6827 +#: utils/misc/guc.c:6817 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s está fuera del rango aceptable para el parámetro «%s» (%g .. %g)" -#: utils/misc/guc.c:6983 utils/misc/guc.c:8350 +#: utils/misc/guc.c:6973 utils/misc/guc.c:8340 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "no se puede definir parámetros durante una operación paralela" -#: utils/misc/guc.c:6990 utils/misc/guc.c:7742 utils/misc/guc.c:7795 -#: utils/misc/guc.c:7846 utils/misc/guc.c:8179 utils/misc/guc.c:8946 -#: utils/misc/guc.c:9208 utils/misc/guc.c:10874 +#: utils/misc/guc.c:6980 utils/misc/guc.c:7732 utils/misc/guc.c:7785 +#: utils/misc/guc.c:7836 utils/misc/guc.c:8169 utils/misc/guc.c:8936 +#: utils/misc/guc.c:9198 utils/misc/guc.c:10864 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "parámetro de configuración «%s» no reconocido" -#: utils/misc/guc.c:7005 utils/misc/guc.c:8191 +#: utils/misc/guc.c:6995 utils/misc/guc.c:8181 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "no se puede cambiar el parámetro «%s»" -#: utils/misc/guc.c:7028 utils/misc/guc.c:7222 utils/misc/guc.c:7312 -#: utils/misc/guc.c:7402 utils/misc/guc.c:7510 utils/misc/guc.c:7605 +#: utils/misc/guc.c:7018 utils/misc/guc.c:7212 utils/misc/guc.c:7302 +#: utils/misc/guc.c:7392 utils/misc/guc.c:7500 utils/misc/guc.c:7595 #: guc-file.l:352 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "el parámetro «%s» no se puede cambiar sin reiniciar el servidor" -#: utils/misc/guc.c:7038 +#: utils/misc/guc.c:7028 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "el parámetro «%s» no se puede cambiar en este momento" -#: utils/misc/guc.c:7056 utils/misc/guc.c:7103 utils/misc/guc.c:10890 +#: utils/misc/guc.c:7046 utils/misc/guc.c:7093 utils/misc/guc.c:10880 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "se ha denegado el permiso para cambiar la opción «%s»" -#: utils/misc/guc.c:7093 +#: utils/misc/guc.c:7083 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "el parámetro «%s» no se puede cambiar después de efectuar la conexión" -#: utils/misc/guc.c:7141 +#: utils/misc/guc.c:7131 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "no se puede definir el parámetro «%s» dentro una función security-definer" -#: utils/misc/guc.c:7750 utils/misc/guc.c:7800 utils/misc/guc.c:9215 +#: utils/misc/guc.c:7740 utils/misc/guc.c:7790 utils/misc/guc.c:9205 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "debe ser superusuario o miembro del rol pg_read_all settings para examinar «%s»" -#: utils/misc/guc.c:7891 +#: utils/misc/guc.c:7881 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s lleva sólo un argumento" -#: utils/misc/guc.c:8139 +#: utils/misc/guc.c:8129 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "debe ser superusuario para ejecutar la orden ALTER SYSTEM" -#: utils/misc/guc.c:8224 +#: utils/misc/guc.c:8214 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "los valores de parámetros para ALTER SYSTEM no deben contener saltos de línea" -#: utils/misc/guc.c:8269 +#: utils/misc/guc.c:8259 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "no se pudo interpretar el contenido del archivo «%s»" -#: utils/misc/guc.c:8426 +#: utils/misc/guc.c:8416 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT no está implementado" -#: utils/misc/guc.c:8510 +#: utils/misc/guc.c:8500 #, c-format msgid "SET requires parameter name" msgstr "SET requiere el nombre de un parámetro" -#: utils/misc/guc.c:8643 +#: utils/misc/guc.c:8633 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "intento de cambiar la opción «%s»" -#: utils/misc/guc.c:10436 +#: utils/misc/guc.c:10426 #, fuzzy, c-format #| msgid "parameter \"%s\" changed to \"%s\"" msgid "while setting parameter \"%s\" to \"%s\"" msgstr "el parámetro «%s» fue cambiado a «%s»" -#: utils/misc/guc.c:10504 +#: utils/misc/guc.c:10494 #, c-format msgid "parameter \"%s\" could not be set" msgstr "no se pudo cambiar el parámetro «%s»" -#: utils/misc/guc.c:10594 +#: utils/misc/guc.c:10584 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "no se pudo interpretar el valor de para el parámetro «%s»" -#: utils/misc/guc.c:10952 utils/misc/guc.c:10986 +#: utils/misc/guc.c:10942 utils/misc/guc.c:10976 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "valor no válido para el parámetro «%s»: %d" -#: utils/misc/guc.c:11020 +#: utils/misc/guc.c:11010 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "valor no válido para el parámetro «%s»: %g" -#: utils/misc/guc.c:11290 +#: utils/misc/guc.c:11280 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "«temp_buffers» no puede ser cambiado después de que cualquier tabla temporal haya sido accedida en la sesión." -#: utils/misc/guc.c:11302 +#: utils/misc/guc.c:11292 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour no está soportado en este servidor" -#: utils/misc/guc.c:11315 +#: utils/misc/guc.c:11305 #, c-format msgid "SSL is not supported by this build" msgstr "SSL no está soportado en este servidor" -#: utils/misc/guc.c:11327 +#: utils/misc/guc.c:11317 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "No se puede activar el parámetro cuando «log_statement_stats» está activo." -#: utils/misc/guc.c:11339 +#: utils/misc/guc.c:11329 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "No se puede activar «log_statement_stats» cuando «log_parser_stats», «log_planner_stats» o «log_executor_stats» están activos." -#: utils/misc/guc.c:11569 +#: utils/misc/guc.c:11559 #, c-format msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "effective_io_concurrency debe ser 0 en plataformas que no tienen posix_fadvise()." -#: utils/misc/guc.c:11582 +#: utils/misc/guc.c:11572 #, fuzzy, c-format #| msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "effective_io_concurrency debe ser 0 en plataformas que no tienen posix_fadvise()." -#: utils/misc/guc.c:11698 +#: utils/misc/guc.c:11688 #, fuzzy, c-format #| msgid "Invalid character value." msgid "invalid character" msgstr "Valor de carácter no válido." -#: utils/misc/guc.c:11758 +#: utils/misc/guc.c:11748 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline no es un número válido." -#: utils/misc/guc.c:11798 +#: utils/misc/guc.c:11788 #, c-format msgid "multiple recovery targets specified" msgstr "múltiples valores de destino de recuperación especificados" -#: utils/misc/guc.c:11799 +#: utils/misc/guc.c:11789 #, c-format msgid "At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set." msgstr "A lo más uno de recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid puede estar definido." -#: utils/misc/guc.c:11807 +#: utils/misc/guc.c:11797 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "El único valor permitido es «immediate»." @@ -26929,24 +26858,42 @@ msgstr "no se puede hacer PREPARE de una transacción que ha creado un cursor WI msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "no se pueden ejecutar órdenes de transacción dentro de un bucle de cursor que no es de sólo lectura" -#: utils/sort/logtape.c:268 -#, c-format -msgid "could not read block %ld of temporary file: %m" -msgstr "no se pudo leer el bloque %ld del archivo temporal: %m" +#: utils/sort/logtape.c:266 utils/sort/logtape.c:289 +#, fuzzy, c-format +#| msgid "could not rewind temporary file" +msgid "could not seek to block %ld of temporary file" +msgstr "no se puede rebobinar el archivo temporal" + +#: utils/sort/logtape.c:295 +#, fuzzy, c-format +#| msgid "could not read from hash-join temporary file: read only %zu of %zu bytes" +msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" +msgstr "no se pudo leer el archivo temporal de hash-join: se leyeron sólo %zu de %zu bytes" -#: utils/sort/sharedtuplestore.c:435 utils/sort/sharedtuplestore.c:444 -#: utils/sort/sharedtuplestore.c:467 utils/sort/sharedtuplestore.c:484 -#: utils/sort/sharedtuplestore.c:501 utils/sort/sharedtuplestore.c:573 -#: utils/sort/sharedtuplestore.c:579 +#: utils/sort/sharedtuplestore.c:430 utils/sort/sharedtuplestore.c:439 +#: utils/sort/sharedtuplestore.c:462 utils/sort/sharedtuplestore.c:479 +#: utils/sort/sharedtuplestore.c:496 #, c-format msgid "could not read from shared tuplestore temporary file" msgstr "no se pudo leer desde el archivo temporal del tuplestore compartido" -#: utils/sort/sharedtuplestore.c:490 +#: utils/sort/sharedtuplestore.c:485 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "trozo inesperado en archivo temporal del tuplestore compartido" +#: utils/sort/sharedtuplestore.c:569 +#, c-format +#| msgid "could not read from shared tuplestore temporary file" +msgid "could not seek block %u in shared tuplestore temporary file" +msgstr "no se pudo posicionar (seek) al bloque %u en el archivo temporal del tuplestore compartido" + +#: utils/sort/sharedtuplestore.c:576 +#, fuzzy, c-format +#| msgid "could not read from hash-join temporary file: read only %zu of %zu bytes" +msgid "could not read from shared tuplestore temporary file: read only %zu of %zu bytes" +msgstr "no se pudo leer el archivo temporal de hash-join: se leyeron sólo %zu de %zu bytes" + #: utils/sort/tuplesort.c:3140 #, c-format msgid "cannot have more than %d runs for an external sort" @@ -26973,20 +26920,16 @@ msgstr "Existe una llave duplicada." #: utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 #: utils/sort/tuplestore.c:1330 #, c-format -msgid "could not seek in tuplestore temporary file: %m" -msgstr "no se pudo posicionar (seek) en el archivo temporal de tuplestore: %m" - -#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1550 -#: utils/sort/tuplestore.c:1556 -#, c-format -msgid "could not read from tuplestore temporary file: %m" -msgstr "no se pudo leer el archivo temporal de tuplestore: %m" +#| msgid "could not read from shared tuplestore temporary file" +msgid "could not seek in tuplestore temporary file" +msgstr "no se pudo posicionar (seek) en el archivo temporal del tuplestore" -#: utils/sort/tuplestore.c:1518 utils/sort/tuplestore.c:1523 -#: utils/sort/tuplestore.c:1529 -#, c-format -msgid "could not write to tuplestore temporary file: %m" -msgstr "no se pudo escribir al archivo temporal de tuplestore: %m" +#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1540 +#: utils/sort/tuplestore.c:1548 +#, fuzzy, c-format +#| msgid "could not read from hash-join temporary file: read only %zu of %zu bytes" +msgid "could not read from tuplestore temporary file: read only %zu of %zu bytes" +msgstr "no se pudo leer el archivo temporal de hash-join: se leyeron sólo %zu de %zu bytes" #: utils/time/snapmgr.c:624 #, c-format @@ -27038,336 +26981,334 @@ msgstr "una transacción serializable que no es de sólo lectura no puede import msgid "cannot import a snapshot from a different database" msgstr "no se puede importar un snapshot desde una base de datos diferente" -#: gram.y:1048 +#: gram.y:1047 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "UNENCRYPTED PASSWORD ya no está soportado" -#: gram.y:1049 +#: gram.y:1048 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "Quite UNENCRYPTED para almacenar la contraseña en su lugar en forma cifrada." -#: gram.y:1111 +#: gram.y:1110 #, c-format msgid "unrecognized role option \"%s\"" msgstr "opción de rol «%s» no reconocida" -#: gram.y:1358 gram.y:1373 +#: gram.y:1357 gram.y:1372 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTS no puede incluir elementos de esquema" -#: gram.y:1519 +#: gram.y:1518 #, c-format msgid "current database cannot be changed" msgstr "no se puede cambiar la base de datos activa" -#: gram.y:1643 +#: gram.y:1642 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "el intervalo de huso horario debe ser HOUR o HOUR TO MINUTE" -#: gram.y:2178 +#: gram.y:2177 #, c-format msgid "column number must be in range from 1 to %d" msgstr "el número de columna debe estar en el rango de 1 a %d" -#: gram.y:2710 +#: gram.y:2709 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "la opción de secuencia «%s» no está soportado aquí" -#: gram.y:2739 +#: gram.y:2738 #, c-format msgid "modulus for hash partition provided more than once" msgstr "el módulo para partición de hash fue especificado más de una vez" -#: gram.y:2748 +#: gram.y:2747 #, c-format msgid "remainder for hash partition provided more than once" msgstr "el remanentde para partición de hash fue especificado más de una vez" -#: gram.y:2755 +#: gram.y:2754 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "especificación de borde de partición hash «%s» no reconocida" -#: gram.y:2763 +#: gram.y:2762 #, c-format msgid "modulus for hash partition must be specified" msgstr "el módulo para una partición hash debe ser especificado" -#: gram.y:2767 +#: gram.y:2766 #, c-format msgid "remainder for hash partition must be specified" msgstr "remanente en partición hash debe ser especificado" -#: gram.y:2968 gram.y:3001 +#: gram.y:2967 gram.y:3000 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUT no están permitidos con PROGRAM" -#: gram.y:2974 +#: gram.y:2973 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "la cláusula WHERE no está permitida con COPY TO" -#: gram.y:3306 gram.y:3313 gram.y:11652 gram.y:11660 +#: gram.y:3305 gram.y:3312 gram.y:11647 gram.y:11655 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "GLOBAL está obsoleto para la creación de tablas temporales" -#: gram.y:3553 +#: gram.y:3552 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "para una columna generada, GENERATED ALWAYS debe ser especificado" -#: gram.y:4517 -#, fuzzy, c-format -#| msgid "nested CREATE EXTENSION is not supported" +#: gram.y:4512 +#, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" -msgstr "los CREATE EXTENSION anidados no están soportados" +msgstr "CREATE EXTENSION ... FROM ya no está soportado" -#: gram.y:5343 +#: gram.y:5338 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "opción de seguridad de registro «%s» no reconocida" -#: gram.y:5344 +#: gram.y:5339 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "sólo se admiten actualmente políticas PERMISSIVE o RESTRICTIVE." -#: gram.y:5457 +#: gram.y:5452 msgid "duplicate trigger events specified" msgstr "se han especificado eventos de disparador duplicados" -#: gram.y:5605 +#: gram.y:5600 #, c-format msgid "conflicting constraint properties" msgstr "propiedades de restricción contradictorias" -#: gram.y:5701 +#: gram.y:5696 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION no está implementado" -#: gram.y:6084 +#: gram.y:6079 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK ya no es requerido" -#: gram.y:6085 +#: gram.y:6080 #, c-format msgid "Update your data type." msgstr "Actualice su tipo de datos." -#: gram.y:7836 +#: gram.y:7831 #, c-format msgid "aggregates cannot have output arguments" msgstr "las funciones de agregación no pueden tener argumentos de salida" -#: gram.y:10158 gram.y:10176 +#: gram.y:10153 gram.y:10171 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION no está soportado con vistas recursivas" -#: gram.y:11784 +#: gram.y:11779 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "la sintaxis LIMIT #,# no está soportada" -#: gram.y:11785 +#: gram.y:11780 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Use cláusulas LIMIT y OFFSET separadas." -#: gram.y:12103 gram.y:12128 +#: gram.y:12106 gram.y:12131 #, c-format msgid "VALUES in FROM must have an alias" msgstr "VALUES en FROM debe tener un alias" -#: gram.y:12104 gram.y:12129 +#: gram.y:12107 gram.y:12132 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "Por ejemplo, FROM (VALUES ...) [AS] foo." -#: gram.y:12109 gram.y:12134 +#: gram.y:12112 gram.y:12137 #, c-format msgid "subquery in FROM must have an alias" msgstr "las subconsultas en FROM deben tener un alias" -#: gram.y:12110 gram.y:12135 +#: gram.y:12113 gram.y:12138 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "Por ejemplo, FROM (SELECT ...) [AS] foo." -#: gram.y:12588 +#: gram.y:12591 #, c-format msgid "only one DEFAULT value is allowed" msgstr "Sólo se permite un valor DEFAULT" -#: gram.y:12597 +#: gram.y:12600 #, c-format msgid "only one PATH value per column is allowed" msgstr "sólo se permite un valor de PATH por columna" -#: gram.y:12606 +#: gram.y:12609 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "declaraciones NULL/NOT NULL en conflicto o redundantes para la columna «%s»" -#: gram.y:12615 +#: gram.y:12618 #, c-format msgid "unrecognized column option \"%s\"" msgstr "opción de columna «%s» no reconocida" -#: gram.y:12869 +#: gram.y:12872 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "la precisión para el tipo float debe ser al menos 1 bit" -#: gram.y:12878 +#: gram.y:12881 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "la precisión para el tipo float debe ser menor de 54 bits" -#: gram.y:13369 +#: gram.y:13372 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "el número de parámetros es incorrecto al lado izquierdo de la expresión OVERLAPS" -#: gram.y:13374 +#: gram.y:13377 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "el número de parámetros es incorrecto al lado derecho de la expresión OVERLAPS" -#: gram.y:13549 +#: gram.y:13552 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "el predicado UNIQUE no está implementado" -#: gram.y:13912 +#: gram.y:13915 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "no se permiten múltiples cláusulas ORDER BY con WITHIN GROUP" -#: gram.y:13917 +#: gram.y:13920 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "no se permite DISTINCT con WITHIN GROUP" -#: gram.y:13922 +#: gram.y:13925 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "no se permite VARIADIC con WITHIN GROUP" -#: gram.y:14388 gram.y:14411 +#: gram.y:14391 gram.y:14414 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "el inicio de «frame» no puede ser UNBOUNDED FOLLOWING" -#: gram.y:14393 +#: gram.y:14396 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "el «frame» que se inicia desde la siguiente fila no puede terminar en la fila actual" -#: gram.y:14416 +#: gram.y:14419 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "el fin de «frame» no puede ser UNBOUNDED PRECEDING" -#: gram.y:14422 +#: gram.y:14425 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "el «frame» que se inicia desde la fila actual no puede tener filas precedentes" -#: gram.y:14429 +#: gram.y:14432 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "el «frame» que se inicia desde la fila siguiente no puede tener filas precedentes" -#: gram.y:15079 +#: gram.y:15082 #, c-format msgid "type modifier cannot have parameter name" msgstr "el modificador de tipo no puede tener nombre de parámetro" -#: gram.y:15085 +#: gram.y:15088 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "el modificador de tipo no puede tener ORDER BY" -#: gram.y:15150 gram.y:15157 +#: gram.y:15153 gram.y:15160 #, c-format msgid "%s cannot be used as a role name here" msgstr "%s no puede ser usado como nombre de rol aquí" -#: gram.y:15838 gram.y:16027 +#: gram.y:15841 gram.y:16030 msgid "improper use of \"*\"" msgstr "uso impropio de «*»" -#: gram.y:16091 +#: gram.y:16094 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "una agregación de conjunto-ordenado con un argumento directo VARIADIC debe tener al menos un argumento agregado VARIADIC del mismo tipo de datos" -#: gram.y:16128 +#: gram.y:16131 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "no se permiten múltiples cláusulas ORDER BY" -#: gram.y:16139 +#: gram.y:16142 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "no se permiten múltiples cláusulas OFFSET" -#: gram.y:16148 +#: gram.y:16151 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "no se permiten múltiples cláusulas LIMIT" -#: gram.y:16157 -#, fuzzy, c-format -#| msgid "multiple WITH clauses not allowed" +#: gram.y:16160 +#, c-format msgid "multiple limit options not allowed" -msgstr "no se permiten múltiples cláusulas WITH" +msgstr "no se permiten múltiples opciones limit" -#: gram.y:16161 +#: gram.y:16164 #, fuzzy, c-format -#| msgid "option \"%s\" cannot be specified with other options" +#| msgid "WITH TIES cannot be specified without ORDER BY clause" msgid "WITH TIES options can not be specified without ORDER BY clause" -msgstr "la opción «%s» no puede ser especificada con otras opciones" +msgstr "la opción WITH TIES no puede ser especificada sin una cláusula ORDER BY" -#: gram.y:16169 +#: gram.y:16172 #, c-format msgid "multiple WITH clauses not allowed" msgstr "no se permiten múltiples cláusulas WITH" -#: gram.y:16373 +#: gram.y:16376 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "los argumentos OUT e INOUT no están permitidos en funciones TABLE" -#: gram.y:16469 +#: gram.y:16472 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "no se permiten múltiples cláusulas COLLATE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16507 gram.y:16520 +#: gram.y:16510 gram.y:16523 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "las restricciones %s no pueden ser marcadas DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16533 +#: gram.y:16536 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "las restricciones %s no pueden ser marcadas NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16546 +#: gram.y:16549 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "las restricciones %s no pueden ser marcadas NO INHERIT" @@ -27458,13 +27399,13 @@ msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" msgstr "la opción «x» de XQuery (expresiones regulares expandidas) no está implementada" #. translator: %s is typically "syntax error" -#: jsonpath_scan.l:282 +#: jsonpath_scan.l:286 #, c-format msgid "%s at end of jsonpath input" msgstr "%s al final de la entrada jsonpath" #. translator: first %s is typically "syntax error" -#: jsonpath_scan.l:289 +#: jsonpath_scan.l:293 #, c-format msgid "%s at or near \"%s\" of jsonpath input" msgstr "%s en o cerca de «%s» de la entrada jsonpath" @@ -27506,7 +27447,7 @@ msgstr "Los literales de cadena con escapes Unicode no pueden usarse cuando stan #: scan.l:604 msgid "unhandled previous state in xqs" -msgstr "" +msgstr "estado previo no manejado en xqs" #: scan.l:678 #, c-format @@ -27580,151 +27521,3 @@ msgstr "uso no estandar de escape en un literal de cadena" #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Use la sintaxis de escape para cadenas, por ej. E'\\r\\n'." - -#~ msgid "cannot create restricted tokens on this platform" -#~ msgstr "no se pueden crear tokens restrigidos en esta plataforma" - -#~ msgid "invalid value for \"buffering\" option" -#~ msgstr "valor no válido para la opción «buffering»" - -#~ msgid "skipping redundant vacuum to prevent wraparound of table \"%s.%s.%s\"" -#~ msgstr "omitiendo vacuum redundante para prevenir wraparound de la tabla «%s.%s.%s»" - -#~ msgid "The database cluster was initialized without USE_FLOAT4_BYVAL but the server was compiled with USE_FLOAT4_BYVAL." -#~ msgstr "Los archivos de base de datos fueron inicializados sin USE_FLOAT4_BYVAL, pero el servidor fue compilado con USE_FLOAT4_BYVAL." - -#~ msgid "The database cluster was initialized with USE_FLOAT4_BYVAL but the server was compiled without USE_FLOAT4_BYVAL." -#~ msgstr "Los archivos de base de datos fueron inicializados con USE_FLOAT4_BYVAL, pero el servidor fue compilado sin USE_FLOAT4_BYVAL." - -#~ msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" -#~ msgstr "archivo WAL es de un sistema de bases de datos distinto: identificador de sistema en archivo WAL es %s, identificador en pg_control es %s" - -# XXX why talk about "log segment" instead of "file"? -#~ msgid "could not seek in log segment %s to offset %u: %m" -#~ msgstr "no se pudo posicionar (seek) en segmento %s a la posición %u: %m" - -#~ msgid "could not read from log segment %s, offset %u, length %lu: %m" -#~ msgstr "no se pudo leer desde el segmento %s, posición %u, largo %lu: %m" - -#~ msgid "An aggregate using a polymorphic transition type must have at least one polymorphic argument." -#~ msgstr "Una función de agregación que use un tipo de dato de transición polimórfico debe tener al menos un argumento de tipo polimórfico." - -#~ msgid "An aggregate returning a polymorphic type must have at least one polymorphic argument." -#~ msgstr "Una función de agregación que retorne un tipo de datos polimórfico debe tener al menos un argumento de tipo polimórfico." - -#~ msgid "A function returning \"internal\" must have at least one \"internal\" argument." -#~ msgstr "Una función que retorne «internal» debe tener al menos un argumento de tipo «internal»." - -#~ msgid "A function returning a polymorphic type must have at least one polymorphic argument." -#~ msgstr "Una función que retorne un tipo polimórfico debe tener al menos un argumento de tipo polimórfico." - -#~ msgid "A function returning \"anyrange\" must have at least one \"anyrange\" argument." -#~ msgstr "Una función que retorne «anyrange» debe tener al menos un argumento de tipo «anyrange»." - -#~ msgid "Adding partitioned tables to publications is not supported." -#~ msgstr "Agregar tablas particionadas a publicaciones no está soportado." - -#~ msgid "You can add the table partitions individually." -#~ msgstr "Puede agregar las particiones de tabla de forma individual." - -#~ msgid "FROM version must be different from installation target version \"%s\"" -#~ msgstr "la versión FROM debe ser diferente de la versión destino de instalación «%s»" - -#~ msgid "using pg_pltemplate information instead of CREATE LANGUAGE parameters" -#~ msgstr "usando información de pg_pltemplate en vez de los parámetros de CREATE LANGUAGE" - -#~ msgid "must be superuser to create procedural language \"%s\"" -#~ msgstr "debe ser superusuario para crear el lenguaje procedural «%s»" - -#~ msgid "unsupported language \"%s\"" -#~ msgstr "lenguaje no soportado: «%s»" - -#~ msgid "The supported languages are listed in the pg_pltemplate system catalog." -#~ msgstr "Los lenguajes soportados están listados en el catálogo del sistema pg_pltemplate." - -#~ msgid "changing return type of function %s from %s to %s" -#~ msgstr "cambiando el tipo de retorno de la función %s de %s a %s" - -#~ msgid "column \"%s\" contains null values" -#~ msgstr "la columna «%s» contiene valores nulos" - -#~ msgid "updated partition constraint for default partition would be violated by some row" -#~ msgstr "la restricción de partición actualizada para la partición «default» sería violada por alguna fila" - -#~ msgid "partition key expressions cannot contain whole-row references" -#~ msgstr "las expresiones en la llave de particionamiento no pueden incluir referencias a la fila completa (whole-row)" - -#~ msgid "Partitioned tables cannot have BEFORE / FOR EACH ROW triggers." -#~ msgstr "Las tablas particionadas no pueden tener disparadores BEFORE / FOR EACH ROW." - -#~ msgid "Found referenced table's UPDATE trigger." -#~ msgstr "Se encontró el disparador UPDATE de la tabla referenciada." - -#~ msgid "Found referenced table's DELETE trigger." -#~ msgstr "Se encontró el disparador DELETE de la tabla referenciada." - -#~ msgid "Found referencing table's trigger." -#~ msgstr "Se encontró el disparador en la tabla que hace referencia." - -#~ msgid "ignoring incomplete trigger group for constraint \"%s\" %s" -#~ msgstr "ignorando el grupo de disparadores incompleto para la restricción «%s» %s" - -#~ msgid "converting trigger group into constraint \"%s\" %s" -#~ msgstr "convirtiendo el grupo de disparadores en la restricción «%s» %s" - -#~ msgid "changing argument type of function %s from \"opaque\" to \"cstring\"" -#~ msgstr "cambiando el tipo de argumento de la función %s de «opaque» a «cstring»" - -#~ msgid "changing argument type of function %s from \"opaque\" to %s" -#~ msgstr "cambiando el tipo de argumento de la función %s de «opaque» a %s" - -#~ msgid "invalid value for \"check_option\" option" -#~ msgstr "valor no válido para la opción «check_option»" - -#~ msgid "\"%s.%s\" is a partitioned table." -#~ msgstr "«%s.%s» es un índice particionado." - -#~ msgid "could not determine actual result type for function declared to return type %s" -#~ msgstr "no se pudo determinar el tipo de resultado para función declarada retornando tipo %s" - -#~ msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8." -#~ msgstr "Los valores de escape Unicode no pueden ser usados para valores de «code point» sobre 007F cuando la codificación de servidor no es UTF8." - -#~ msgid "could not load wldap32.dll" -#~ msgstr "no se pudo cargar wldap32.dll" - -#~ msgid "SSL certificate revocation list file \"%s\" ignored" -#~ msgstr "ignorando lista de revocación de certificados SSL «%s»" - -#~ msgid "SSL library does not support certificate revocation lists." -#~ msgstr "La libreria SSL no soporta listas de revocación de certificados." - -#~ msgid "could not find range type for data type %s" -#~ msgstr "no se pudo encontrar un tipo de rango para el tipo de dato %s" - -#~ msgid "could not create signal dispatch thread: error code %lu\n" -#~ msgstr "no se pudo crear thread de despacho de señales: código de error %lu\n" - -#~ msgid "replication origin %d is already active for PID %d" -#~ msgstr "el origen de replicación %d ya está activo para el PID %d" - -#~ msgid "cannot advance replication slot that has not previously reserved WAL" -#~ msgstr "no puede avanzar un slot de replicación que no ha reservado WAL previamente" - -#~ msgid "could not read from log segment %s, offset %u, length %zu: %m" -#~ msgstr "no se pudo leer desde el segmento %s, posición %u, largo %zu: %m" - -#~ msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8" -#~ msgstr "Los valores de escape Unicode no puede ser usados para valores de «code point» sobre 007F cuando la codificación de servidor no es UTF8" - -#~ msgid "cannot use advisory locks during a parallel operation" -#~ msgstr "no se pueden usar locks consultivos durante una operación paralela" - -#~ msgid "cannot output a value of type %s" -#~ msgstr "no se puede desplegar un valor de tipo %s" - -#~ msgid "Server has FLOAT4PASSBYVAL = %s, library has %s." -#~ msgstr "El servidor tiene FLOAT4PASSBYVAL = %s, la librería tiene %s" - -#~ msgid "encoding name too long" -#~ msgstr "el nombre de codificación es demasiado largo" diff --git a/src/backend/po/fr.po b/src/backend/po/fr.po index 925ad1780df0d..7dbb263808aa3 100644 --- a/src/backend/po/fr.po +++ b/src/backend/po/fr.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-10-02 07:09+0000\n" -"PO-Revision-Date: 2020-01-01 20:09+0100\n" +"POT-Creation-Date: 2021-04-29 07:40+0000\n" +"PO-Revision-Date: 2021-04-30 17:54+0200\n" "Last-Translator: Christophe Courtois \n" "Language-Team: French \n" "Language: fr\n" @@ -17,33 +17,30 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Poedit 2.4.2\n" -#: ../common/config_info.c:130 ../common/config_info.c:138 ../common/config_info.c:146 ../common/config_info.c:154 ../common/config_info.c:162 ../common/config_info.c:170 ../common/config_info.c:178 ../common/config_info.c:186 ../common/config_info.c:194 +#: ../common/config_info.c:134 ../common/config_info.c:142 ../common/config_info.c:150 ../common/config_info.c:158 ../common/config_info.c:166 ../common/config_info.c:174 ../common/config_info.c:182 ../common/config_info.c:190 msgid "not recorded" msgstr "non enregistré" -#: ../common/controldata_utils.c:68 ../common/controldata_utils.c:73 commands/copy.c:3549 commands/extension.c:3341 utils/adt/genfile.c:153 +#: ../common/controldata_utils.c:68 ../common/controldata_utils.c:73 commands/copyfrom.c:1516 commands/extension.c:3455 utils/adt/genfile.c:128 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %m" -#: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 access/transam/timeline.c:347 access/transam/twophase.c:1293 access/transam/xlog.c:3455 access/transam/xlog.c:4602 access/transam/xlog.c:10804 access/transam/xlog.c:10817 access/transam/xlog.c:11242 access/transam/xlog.c:11322 access/transam/xlog.c:11361 access/transam/xlog.c:11404 access/transam/xlogfuncs.c:663 access/transam/xlogfuncs.c:682 commands/extension.c:3351 -#: libpq/hba.c:499 replication/logical/origin.c:718 replication/logical/origin.c:754 replication/logical/reorderbuffer.c:3312 replication/logical/snapbuild.c:1746 replication/logical/snapbuild.c:1788 replication/logical/snapbuild.c:1816 replication/logical/snapbuild.c:1843 replication/slot.c:1426 replication/slot.c:1467 replication/walsender.c:513 storage/file/copydir.c:195 utils/adt/genfile.c:170 utils/adt/misc.c:753 -#: utils/cache/relmapper.c:741 +#: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1271 access/transam/xlog.c:3553 access/transam/xlog.c:4781 access/transam/xlog.c:11363 access/transam/xlog.c:11376 access/transam/xlog.c:11829 access/transam/xlog.c:11909 access/transam/xlog.c:11946 access/transam/xlog.c:12006 access/transam/xlogfuncs.c:703 access/transam/xlogfuncs.c:722 commands/extension.c:3465 libpq/hba.c:536 replication/basebackup.c:2020 replication/logical/origin.c:729 replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4862 replication/logical/snapbuild.c:1733 +#: replication/logical/snapbuild.c:1775 replication/logical/snapbuild.c:1802 replication/slot.c:1658 replication/slot.c:1699 replication/walsender.c:544 storage/file/buffile.c:445 storage/file/copydir.c:195 utils/adt/genfile.c:203 utils/adt/misc.c:859 utils/cache/relmapper.c:741 #, c-format msgid "could not read file \"%s\": %m" msgstr "n'a pas pu lire le fichier « %s » : %m" -#: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 access/transam/twophase.c:1296 access/transam/xlog.c:3460 access/transam/xlog.c:4607 replication/logical/origin.c:723 replication/logical/origin.c:762 replication/logical/snapbuild.c:1751 replication/logical/snapbuild.c:1793 replication/logical/snapbuild.c:1821 replication/logical/snapbuild.c:1848 replication/slot.c:1430 replication/slot.c:1471 replication/walsender.c:518 -#: utils/cache/relmapper.c:745 +#: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 access/transam/xlog.c:3558 access/transam/xlog.c:4786 replication/basebackup.c:2024 replication/logical/origin.c:734 replication/logical/origin.c:773 replication/logical/snapbuild.c:1738 replication/logical/snapbuild.c:1780 replication/logical/snapbuild.c:1807 replication/slot.c:1662 replication/slot.c:1703 replication/walsender.c:549 utils/cache/relmapper.c:745 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %zu" -#: ../common/controldata_utils.c:112 ../common/controldata_utils.c:117 ../common/controldata_utils.c:256 ../common/controldata_utils.c:259 access/heap/rewriteheap.c:1208 access/heap/rewriteheap.c:1310 access/transam/timeline.c:377 access/transam/timeline.c:421 access/transam/timeline.c:499 access/transam/twophase.c:1305 access/transam/twophase.c:1728 access/transam/xlog.c:3327 access/transam/xlog.c:3495 access/transam/xlog.c:3500 -#: access/transam/xlog.c:3797 access/transam/xlog.c:4572 access/transam/xlog.c:5532 access/transam/xlogfuncs.c:688 commands/copy.c:1814 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:535 replication/logical/origin.c:656 replication/logical/origin.c:795 replication/logical/reorderbuffer.c:3370 replication/logical/snapbuild.c:1658 replication/logical/snapbuild.c:1856 replication/slot.c:1322 replication/slot.c:1478 replication/walsender.c:528 -#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:654 storage/file/fd.c:3308 storage/file/fd.c:3411 utils/cache/relmapper.c:753 utils/cache/relmapper.c:892 +#: ../common/controldata_utils.c:112 ../common/controldata_utils.c:117 ../common/controldata_utils.c:256 ../common/controldata_utils.c:259 access/heap/rewriteheap.c:1185 access/heap/rewriteheap.c:1288 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:516 access/transam/twophase.c:1283 access/transam/twophase.c:1682 access/transam/xlog.c:3425 access/transam/xlog.c:3593 access/transam/xlog.c:3598 access/transam/xlog.c:3925 access/transam/xlog.c:4751 access/transam/xlog.c:5676 access/transam/xlogfuncs.c:728 commands/copyfrom.c:1576 commands/copyto.c:328 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 replication/logical/origin.c:667 +#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:4920 replication/logical/snapbuild.c:1642 replication/logical/snapbuild.c:1815 replication/slot.c:1549 replication/slot.c:1710 replication/walsender.c:559 storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 storage/file/fd.c:3534 storage/file/fd.c:3637 utils/cache/relmapper.c:753 utils/cache/relmapper.c:892 #, c-format msgid "could not close file \"%s\": %m" msgstr "n'a pas pu fermer le fichier « %s » : %m" @@ -66,110 +63,214 @@ msgstr "" "résultats ci-dessous sont incorrects, et l'installation de PostgreSQL\n" "est incompatible avec ce répertoire des données." -#: ../common/controldata_utils.c:197 ../common/controldata_utils.c:203 ../common/file_utils.c:226 ../common/file_utils.c:285 ../common/file_utils.c:359 access/heap/rewriteheap.c:1293 access/transam/timeline.c:111 access/transam/timeline.c:236 access/transam/timeline.c:333 access/transam/twophase.c:1249 access/transam/xlog.c:3229 access/transam/xlog.c:3369 access/transam/xlog.c:3410 access/transam/xlog.c:3608 access/transam/xlog.c:3693 -#: access/transam/xlog.c:3771 access/transam/xlog.c:4592 access/transam/xlogutils.c:708 postmaster/syslogger.c:1489 replication/basebackup.c:529 replication/basebackup.c:1408 replication/logical/origin.c:708 replication/logical/reorderbuffer.c:2308 replication/logical/reorderbuffer.c:2575 replication/logical/reorderbuffer.c:3292 replication/logical/snapbuild.c:1613 replication/logical/snapbuild.c:1717 replication/slot.c:1398 -#: replication/walsender.c:486 replication/walsender.c:2451 storage/file/copydir.c:161 storage/file/fd.c:629 storage/file/fd.c:3295 storage/file/fd.c:3382 storage/smgr/md.c:462 utils/cache/relmapper.c:724 utils/cache/relmapper.c:836 utils/error/elog.c:1861 utils/init/miscinit.c:1269 utils/init/miscinit.c:1404 utils/init/miscinit.c:1481 utils/misc/guc.c:8043 utils/misc/guc.c:8075 +#: ../common/controldata_utils.c:197 ../common/controldata_utils.c:203 ../common/file_utils.c:232 ../common/file_utils.c:291 ../common/file_utils.c:365 access/heap/rewriteheap.c:1271 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1227 access/transam/xlog.c:3311 access/transam/xlog.c:3467 access/transam/xlog.c:3508 access/transam/xlog.c:3706 access/transam/xlog.c:3790 access/transam/xlog.c:3893 access/transam/xlog.c:4771 access/transam/xlogutils.c:817 postmaster/syslogger.c:1487 replication/basebackup.c:616 replication/basebackup.c:1610 replication/logical/origin.c:719 replication/logical/reorderbuffer.c:3536 +#: replication/logical/reorderbuffer.c:4077 replication/logical/reorderbuffer.c:4842 replication/logical/snapbuild.c:1597 replication/logical/snapbuild.c:1704 replication/slot.c:1630 replication/walsender.c:517 replication/walsender.c:2527 storage/file/copydir.c:161 storage/file/fd.c:713 storage/file/fd.c:3521 storage/file/fd.c:3608 storage/smgr/md.c:502 utils/cache/relmapper.c:724 utils/cache/relmapper.c:836 utils/error/elog.c:1938 utils/init/miscinit.c:1346 utils/init/miscinit.c:1480 utils/init/miscinit.c:1557 utils/misc/guc.c:8638 utils/misc/guc.c:8670 #, c-format msgid "could not open file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier « %s » : %m" -#: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 access/transam/twophase.c:1701 access/transam/twophase.c:1710 access/transam/xlog.c:10561 access/transam/xlog.c:10599 access/transam/xlog.c:11012 access/transam/xlogfuncs.c:742 postmaster/syslogger.c:1500 postmaster/syslogger.c:1513 utils/cache/relmapper.c:870 +#: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 access/transam/twophase.c:1655 access/transam/twophase.c:1664 access/transam/xlog.c:11120 access/transam/xlog.c:11158 access/transam/xlog.c:11571 access/transam/xlogfuncs.c:782 postmaster/postmaster.c:5641 postmaster/syslogger.c:1498 postmaster/syslogger.c:1511 utils/cache/relmapper.c:870 #, c-format msgid "could not write file \"%s\": %m" msgstr "impossible d'écrire le fichier « %s » : %m" -#: ../common/controldata_utils.c:239 ../common/controldata_utils.c:245 ../common/file_utils.c:297 ../common/file_utils.c:367 access/heap/rewriteheap.c:981 access/heap/rewriteheap.c:1202 access/heap/rewriteheap.c:1304 access/transam/timeline.c:415 access/transam/timeline.c:493 access/transam/twophase.c:1722 access/transam/xlog.c:3320 access/transam/xlog.c:3489 access/transam/xlog.c:4565 access/transam/xlog.c:10079 access/transam/xlog.c:10105 -#: replication/logical/snapbuild.c:1651 replication/slot.c:1312 replication/slot.c:1408 storage/file/fd.c:646 storage/file/fd.c:3403 storage/smgr/md.c:885 storage/smgr/md.c:918 storage/sync/sync.c:395 utils/cache/relmapper.c:885 utils/misc/guc.c:7826 +#: ../common/controldata_utils.c:239 ../common/controldata_utils.c:245 ../common/file_utils.c:303 ../common/file_utils.c:373 access/heap/rewriteheap.c:967 access/heap/rewriteheap.c:1179 access/heap/rewriteheap.c:1282 access/transam/timeline.c:432 access/transam/timeline.c:510 access/transam/twophase.c:1676 access/transam/xlog.c:3418 access/transam/xlog.c:3587 access/transam/xlog.c:4744 access/transam/xlog.c:10611 access/transam/xlog.c:10652 replication/logical/snapbuild.c:1635 replication/slot.c:1535 replication/slot.c:1640 storage/file/fd.c:730 storage/file/fd.c:3629 storage/smgr/md.c:950 storage/smgr/md.c:991 storage/sync/sync.c:417 utils/cache/relmapper.c:885 +#: utils/misc/guc.c:8425 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m" -#: ../common/exec.c:138 ../common/exec.c:255 ../common/exec.c:301 +#: ../common/cryptohash_openssl.c:104 ../common/exec.c:522 ../common/exec.c:567 ../common/exec.c:659 ../common/hmac_openssl.c:103 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1338 access/transam/xlog.c:6633 lib/dshash.c:246 libpq/auth.c:1483 libpq/auth.c:1551 libpq/auth.c:2109 libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:347 postmaster/bgworker.c:937 postmaster/postmaster.c:2513 postmaster/postmaster.c:4156 postmaster/postmaster.c:4826 postmaster/postmaster.c:5566 postmaster/postmaster.c:5930 replication/libpqwalreceiver/libpqwalreceiver.c:282 replication/logical/logical.c:206 +#: replication/walsender.c:588 storage/buffer/localbuf.c:442 storage/file/fd.c:882 storage/file/fd.c:1352 storage/file/fd.c:1513 storage/file/fd.c:2321 storage/ipc/procarray.c:1388 storage/ipc/procarray.c:2182 storage/ipc/procarray.c:2189 storage/ipc/procarray.c:2678 storage/ipc/procarray.c:3302 utils/adt/cryptohashfuncs.c:46 utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 utils/adt/pg_locale.c:455 utils/adt/pg_locale.c:619 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 utils/mb/mbutils.c:814 +#: utils/mb/mbutils.c:841 utils/misc/guc.c:5070 utils/misc/guc.c:5086 utils/misc/guc.c:5099 utils/misc/guc.c:8403 utils/misc/tzparser.c:467 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:701 utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:234 utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1082 utils/mmgr/mcxt.c:1113 utils/mmgr/mcxt.c:1149 utils/mmgr/mcxt.c:1201 utils/mmgr/mcxt.c:1236 utils/mmgr/mcxt.c:1271 utils/mmgr/slab.c:236 +#, c-format +msgid "out of memory" +msgstr "mémoire épuisée" + +#: ../common/exec.c:136 ../common/exec.c:253 ../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "n'a pas pu identifier le répertoire courant : %m" -#: ../common/exec.c:157 +#: ../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "binaire « %s » invalide" -#: ../common/exec.c:207 +#: ../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "n'a pas pu lire le binaire « %s »" -#: ../common/exec.c:215 +#: ../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "n'a pas pu trouver un « %s » à exécuter" -#: ../common/exec.c:271 ../common/exec.c:310 utils/init/miscinit.c:220 +#: ../common/exec.c:269 ../common/exec.c:308 utils/init/miscinit.c:425 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "n'a pas pu modifier le répertoire par « %s » : %m" -#: ../common/exec.c:288 access/transam/xlog.c:10434 replication/basebackup.c:1246 utils/adt/misc.c:324 +#: ../common/exec.c:286 access/transam/xlog.c:10994 replication/basebackup.c:1428 utils/adt/misc.c:340 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "n'a pas pu lire le lien symbolique « %s » : %m" -#: ../common/exec.c:541 +#: ../common/exec.c:409 libpq/pqcomm.c:746 storage/ipc/latch.c:1064 storage/ipc/latch.c:1233 storage/ipc/latch.c:1462 storage/ipc/latch.c:1614 storage/ipc/latch.c:1730 #, c-format -msgid "pclose failed: %m" -msgstr "échec de pclose : %m" - -#: ../common/exec.c:670 ../common/exec.c:715 ../common/exec.c:807 ../common/psprintf.c:143 ../port/path.c:630 ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1394 access/transam/xlog.c:6359 lib/dshash.c:246 lib/stringinfo.c:283 libpq/auth.c:1092 libpq/auth.c:1482 libpq/auth.c:1550 libpq/auth.c:2068 postmaster/bgworker.c:337 postmaster/bgworker.c:907 postmaster/postmaster.c:2454 postmaster/postmaster.c:2476 -#: postmaster/postmaster.c:4068 postmaster/postmaster.c:4757 postmaster/postmaster.c:4832 postmaster/postmaster.c:5509 postmaster/postmaster.c:5856 replication/libpqwalreceiver/libpqwalreceiver.c:257 replication/logical/logical.c:179 storage/buffer/localbuf.c:436 storage/file/fd.c:795 storage/file/fd.c:1191 storage/file/fd.c:1352 storage/file/fd.c:2161 storage/ipc/procarray.c:1047 storage/ipc/procarray.c:1542 storage/ipc/procarray.c:1549 -#: storage/ipc/procarray.c:1973 storage/ipc/procarray.c:2600 utils/adt/cryptohashes.c:45 utils/adt/cryptohashes.c:65 utils/adt/formatting.c:1604 utils/adt/formatting.c:1728 utils/adt/formatting.c:1853 utils/adt/pg_locale.c:473 utils/adt/pg_locale.c:637 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:448 utils/hash/dynahash.c:557 utils/hash/dynahash.c:1069 utils/mb/mbutils.c:365 utils/mb/mbutils.c:698 utils/misc/guc.c:4620 -#: utils/misc/guc.c:4636 utils/misc/guc.c:4649 utils/misc/guc.c:7804 utils/misc/tzparser.c:468 utils/mmgr/aset.c:484 utils/mmgr/dsa.c:701 utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:249 utils/mmgr/mcxt.c:796 utils/mmgr/mcxt.c:832 utils/mmgr/mcxt.c:870 utils/mmgr/mcxt.c:908 utils/mmgr/mcxt.c:944 utils/mmgr/mcxt.c:975 utils/mmgr/mcxt.c:1011 utils/mmgr/mcxt.c:1063 utils/mmgr/mcxt.c:1098 utils/mmgr/mcxt.c:1133 -#: utils/mmgr/slab.c:239 -#, c-format -msgid "out of memory" -msgstr "mémoire épuisée" +msgid "%s() failed: %m" +msgstr "échec de %s() : %m" -#: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 ../common/fe_memutils.c:98 ../common/psprintf.c:145 ../port/path.c:632 ../port/path.c:670 ../port/path.c:687 utils/misc/ps_status.c:176 utils/misc/ps_status.c:184 utils/misc/ps_status.c:214 utils/misc/ps_status.c:222 +#: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 ../common/psprintf.c:145 ../port/path.c:632 ../port/path.c:670 ../port/path.c:687 utils/misc/ps_status.c:181 utils/misc/ps_status.c:189 utils/misc/ps_status.c:219 utils/misc/ps_status.c:227 #, c-format msgid "out of memory\n" msgstr "mémoire épuisée\n" -#: ../common/fe_memutils.c:92 +#: ../common/fe_memutils.c:92 ../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" -#: ../common/file_utils.c:81 ../common/file_utils.c:183 access/transam/twophase.c:1261 access/transam/xlog.c:10537 access/transam/xlog.c:10575 access/transam/xlog.c:10792 access/transam/xlogarchive.c:104 access/transam/xlogarchive.c:264 commands/copy.c:1944 commands/copy.c:3559 commands/extension.c:3330 commands/tablespace.c:796 commands/tablespace.c:887 guc-file.l:1062 replication/basebackup.c:355 replication/basebackup.c:535 -#: replication/basebackup.c:607 replication/logical/snapbuild.c:1527 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1703 storage/file/fd.c:2980 storage/file/fd.c:3162 storage/file/fd.c:3247 utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:133 utils/adt/genfile.c:386 +#: ../common/file_utils.c:87 ../common/file_utils.c:451 ../common/file_utils.c:455 access/transam/twophase.c:1239 access/transam/xlog.c:11096 access/transam/xlog.c:11134 access/transam/xlog.c:11351 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:227 commands/copyfrom.c:1526 commands/copyto.c:734 commands/extension.c:3444 commands/tablespace.c:807 commands/tablespace.c:898 guc-file.l:1060 replication/basebackup.c:439 replication/basebackup.c:622 replication/basebackup.c:698 replication/logical/snapbuild.c:1514 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1863 storage/file/fd.c:1949 storage/file/fd.c:3149 storage/file/fd.c:3353 +#: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:419 utils/adt/genfile.c:645 #, c-format msgid "could not stat file \"%s\": %m" msgstr "n'a pas pu tester le fichier « %s » : %m" -#: ../common/file_utils.c:160 ../common/pgfnames.c:48 commands/tablespace.c:719 commands/tablespace.c:729 postmaster/postmaster.c:1474 storage/file/fd.c:2562 storage/file/reinit.c:122 utils/adt/genfile.c:487 utils/adt/genfile.c:565 utils/adt/misc.c:243 utils/misc/tzparser.c:339 +#: ../common/file_utils.c:166 ../common/pgfnames.c:48 commands/tablespace.c:730 commands/tablespace.c:740 postmaster/postmaster.c:1512 storage/file/fd.c:2724 storage/file/reinit.c:122 utils/adt/misc.c:262 utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" -#: ../common/file_utils.c:194 ../common/pgfnames.c:69 storage/file/fd.c:2574 +#: ../common/file_utils.c:200 ../common/pgfnames.c:69 storage/file/fd.c:2736 #, c-format msgid "could not read directory \"%s\": %m" msgstr "n'a pas pu lire le répertoire « %s » : %m" -#: ../common/file_utils.c:377 access/transam/xlogarchive.c:449 postmaster/syslogger.c:1524 replication/logical/snapbuild.c:1670 replication/slot.c:598 replication/slot.c:1210 replication/slot.c:1332 storage/file/fd.c:664 storage/file/fd.c:759 utils/time/snapmgr.c:1350 +#: ../common/file_utils.c:383 access/transam/xlogarchive.c:412 postmaster/syslogger.c:1522 replication/logical/snapbuild.c:1654 replication/slot.c:668 replication/slot.c:1421 replication/slot.c:1563 storage/file/fd.c:748 storage/file/fd.c:846 utils/time/snapmgr.c:1265 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "n'a pas pu renommer le fichier « %s » en « %s » : %m" -#: ../common/logging.c:188 +#: ../common/hex.c:54 +#, c-format +msgid "invalid hexadecimal digit" +msgstr "chiffre hexadécimal invalide" + +#: ../common/hex.c:59 +#, c-format +msgid "invalid hexadecimal digit: \"%.*s\"" +msgstr "chiffre hexadécimal invalide : « %.*s »" + +#: ../common/hex.c:90 +#, c-format +msgid "overflow of destination buffer in hex encoding" +msgstr "Calcule les identifiants de requête" + +#: ../common/hex.c:136 ../common/hex.c:141 +#, c-format +msgid "invalid hexadecimal data: odd number of digits" +msgstr "donnée hexadécimale invalide : nombre pair de chiffres" + +#: ../common/hex.c:152 +#, c-format +msgid "overflow of destination buffer in hex decoding" +msgstr "" + +#: ../common/jsonapi.c:1066 +#, c-format +msgid "Escape sequence \"\\%s\" is invalid." +msgstr "La séquence d'échappement « \\%s » est invalide." + +#: ../common/jsonapi.c:1069 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "Le caractère de valeur 0x%02x doit être échappé." + +#: ../common/jsonapi.c:1072 +#, c-format +msgid "Expected end of input, but found \"%s\"." +msgstr "Attendait une fin de l'entrée, mais a trouvé « %s »." + +#: ../common/jsonapi.c:1075 +#, c-format +msgid "Expected array element or \"]\", but found \"%s\"." +msgstr "Élément de tableau ou « ] » attendu, mais trouvé « %s »." + +#: ../common/jsonapi.c:1078 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%s\"." +msgstr "« , » ou « ] » attendu, mais trouvé « %s »." + +#: ../common/jsonapi.c:1081 +#, c-format +msgid "Expected \":\", but found \"%s\"." +msgstr "« : » attendu, mais trouvé « %s »." + +#: ../common/jsonapi.c:1084 +#, c-format +msgid "Expected JSON value, but found \"%s\"." +msgstr "Valeur JSON attendue, mais « %s » trouvé." + +#: ../common/jsonapi.c:1087 +msgid "The input string ended unexpectedly." +msgstr "La chaîne en entrée se ferme de manière inattendue." + +#: ../common/jsonapi.c:1089 +#, c-format +msgid "Expected string or \"}\", but found \"%s\"." +msgstr "Chaîne ou « } » attendu, mais « %s » trouvé" + +#: ../common/jsonapi.c:1092 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%s\"." +msgstr "« , » ou « } » attendu, mais trouvé « %s »." + +#: ../common/jsonapi.c:1095 +#, c-format +msgid "Expected string, but found \"%s\"." +msgstr "Chaîne attendue, mais « %s » trouvé." + +#: ../common/jsonapi.c:1098 +#, c-format +msgid "Token \"%s\" is invalid." +msgstr "Le jeton « %s » n'est pas valide." + +#: ../common/jsonapi.c:1101 jsonpath_scan.l:499 +#, c-format +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 ne peut pas être converti en texte." + +#: ../common/jsonapi.c:1103 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "« \\u » doit être suivi par quatre chiffres hexadécimaux." + +#: ../common/jsonapi.c:1106 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "les valeurs d'échappement Unicode ne peuvent pas être utilisées pour des valeurs de point code au-dessus de 007F quand l'encodage n'est pas UTF8." + +#: ../common/jsonapi.c:1108 jsonpath_scan.l:520 +#, c-format +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "Une substitution unicode haute ne doit pas suivre une substitution haute." + +#: ../common/jsonapi.c:1110 jsonpath_scan.l:531 jsonpath_scan.l:541 jsonpath_scan.l:583 +#, c-format +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Une substitution unicode basse ne doit pas suivre une substitution haute." + +#: ../common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal : " -#: ../common/logging.c:195 +#: ../common/logging.c:266 #, c-format msgid "error: " msgstr "erreur : " -#: ../common/logging.c:202 +#: ../common/logging.c:273 #, c-format msgid "warning: " msgstr "attention : " @@ -179,52 +280,57 @@ msgstr "attention : " msgid "could not close directory \"%s\": %m" msgstr "n'a pas pu fermer le répertoire « %s » : %m" -#: ../common/relpath.c:58 +#: ../common/relpath.c:61 #, c-format msgid "invalid fork name" msgstr "nom du fork invalide" -#: ../common/relpath.c:59 +#: ../common/relpath.c:62 #, c-format msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Les noms de fork valides sont « main », « fsm », « vm » et « init »." -#: ../common/restricted_token.c:69 +#: ../common/restricted_token.c:64 libpq/auth.c:1513 libpq/auth.c:2545 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "ne peut pas créer les jetons restreints sur cette plateforme" +msgid "could not load library \"%s\": error code %lu" +msgstr "n'a pas pu charger la bibliothèque « %s » : code d'erreur %lu" -#: ../common/restricted_token.c:78 +#: ../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "ne peut pas créer les jetons restreints sur cette plateforme : code d'erreur %lu" + +#: ../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "n'a pas pu ouvrir le jeton du processus : code d'erreur %lu" -#: ../common/restricted_token.c:91 +#: ../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "n'a pas pu allouer les SID : code d'erreur %lu" -#: ../common/restricted_token.c:110 +#: ../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "n'a pas pu créer le jeton restreint : code d'erreur %lu" -#: ../common/restricted_token.c:131 +#: ../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "n'a pas pu démarrer le processus pour la commande « %s » : code d'erreur %lu" -#: ../common/restricted_token.c:169 +#: ../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "n'a pas pu ré-exécuter le jeton restreint : code d'erreur %lu" -#: ../common/restricted_token.c:185 +#: ../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "n'a pas pu récupérer le code de statut du sous-processus : code d'erreur %lu" -#: ../common/rmtree.c:79 replication/basebackup.c:1005 replication/basebackup.c:1175 +#: ../common/rmtree.c:79 replication/basebackup.c:1181 replication/basebackup.c:1357 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "" @@ -236,17 +342,28 @@ msgstr "" msgid "could not remove file or directory \"%s\": %m" msgstr "n'a pas pu supprimer le fichier ou répertoire « %s » : %m" -#: ../common/saslprep.c:1093 +#: ../common/stringinfo.c:306 +#, c-format +msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." +msgstr "Ne peut pas agrandir le tampon de chaîne, qui contient %d octets, de %d octets." + +#: ../common/stringinfo.c:310 #, c-format -msgid "password too long" -msgstr "mot de passe trop long" +msgid "" +"out of memory\n" +"\n" +"Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" +msgstr "" +"plus de mémoire\n" +"\n" +"Ne peut pas agrandir le tampon de chaîne, qui contient %d octets, de %d octets.\n" #: ../common/username.c:43 #, c-format msgid "could not look up effective user ID %ld: %s" msgstr "n'a pas pu trouver l'identifiant réel %ld de l'utilisateur : %s" -#: ../common/username.c:45 libpq/auth.c:2015 +#: ../common/username.c:45 libpq/auth.c:2045 msgid "user does not exist" msgstr "l'utilisateur n'existe pas" @@ -285,12 +402,12 @@ msgstr "le processus fils a été terminé par le signal %d : %s" msgid "child process exited with unrecognized status %d" msgstr "le processus fils a quitté avec un statut %d non reconnu" -#: ../port/chklocale.c:288 +#: ../port/chklocale.c:307 #, c-format msgid "could not determine encoding for codeset \"%s\"" msgstr "n'a pas pu déterminer l'encodage pour le codeset « %s »" -#: ../port/chklocale.c:409 ../port/chklocale.c:415 +#: ../port/chklocale.c:428 ../port/chklocale.c:434 #, c-format msgid "could not determine encoding for locale \"%s\": codeset is \"%s\"" msgstr "n'a pas pu déterminer l'encodage pour la locale « %s » : le codeset vaut « %s »" @@ -315,25 +432,25 @@ msgstr "n'a pas pu obtenir la jonction pour « %s » : %s" msgid "could not get junction for \"%s\": %s\n" msgstr "n'a pas pu obtenir la jonction pour « %s » : %s\n" -#: ../port/open.c:128 +#: ../port/open.c:126 #, c-format msgid "could not open file \"%s\": %s" msgstr "n'a pas pu ouvrir le fichier « %s » : %s" -#: ../port/open.c:129 +#: ../port/open.c:127 msgid "lock violation" msgstr "violation du verrou" -#: ../port/open.c:129 +#: ../port/open.c:127 msgid "sharing violation" msgstr "violation du partage" -#: ../port/open.c:130 +#: ../port/open.c:128 #, c-format msgid "Continuing to retry for 30 seconds." msgstr "Continue à tenter pendant 30 secondes." -#: ../port/open.c:131 +#: ../port/open.c:129 #, c-format msgid "You might have antivirus, backup, or similar software interfering with the database system." msgstr "" @@ -367,216 +484,254 @@ msgstr "" msgid "could not check access token membership: error code %lu\n" msgstr "n'a pas pu vérifier l'appartenance du jeton d'accès : code d'erreur %lu\n" -#: access/brin/brin.c:204 +#: access/brin/brin.c:214 #, c-format msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" msgstr "requête de résumé d'intervalle BRIN pour la page « %s » de l'index « %u » n'a pas été enregistrée" -#: access/brin/brin.c:881 access/brin/brin.c:958 access/gin/ginfast.c:1041 access/transam/xlog.c:10214 access/transam/xlog.c:10743 access/transam/xlogfuncs.c:289 access/transam/xlogfuncs.c:316 access/transam/xlogfuncs.c:355 access/transam/xlogfuncs.c:376 access/transam/xlogfuncs.c:397 access/transam/xlogfuncs.c:467 access/transam/xlogfuncs.c:524 +#: access/brin/brin.c:1015 access/brin/brin.c:1092 access/gin/ginfast.c:1035 access/transam/xlog.c:10773 access/transam/xlog.c:11302 access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 access/transam/xlogfuncs.c:509 #, c-format msgid "recovery is in progress" msgstr "restauration en cours" -#: access/brin/brin.c:882 access/brin/brin.c:959 +#: access/brin/brin.c:1016 access/brin/brin.c:1093 #, c-format msgid "BRIN control functions cannot be executed during recovery." msgstr "Les fonctions de contrôle BRIN ne peuvent pas être exécutées pendant la restauration." -#: access/brin/brin.c:890 access/brin/brin.c:967 +#: access/brin/brin.c:1024 access/brin/brin.c:1101 #, c-format msgid "block number out of range: %s" msgstr "numéro de bloc en dehors des limites : %s" -#: access/brin/brin.c:913 access/brin/brin.c:990 +#: access/brin/brin.c:1047 access/brin/brin.c:1124 #, c-format msgid "\"%s\" is not a BRIN index" msgstr "« %s » n'est pas un index BRIN" -#: access/brin/brin.c:929 access/brin/brin.c:1006 +#: access/brin/brin.c:1063 access/brin/brin.c:1140 +#, c-format +msgid "could not open parent table of index \"%s\"" +msgstr "n'a pas pu ouvrir la table parent de l'index « %s »" + +#: access/brin/brin_bloom.c:751 access/brin/brin_bloom.c:793 access/brin/brin_minmax_multi.c:2984 access/brin/brin_minmax_multi.c:3129 statistics/dependencies.c:651 statistics/dependencies.c:704 statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 utils/adt/pseudotypes.c:77 utils/adt/pseudotypes.c:252 +#, c-format +msgid "cannot accept a value of type %s" +msgstr "ne peut pas accepter une valeur de type %s" + +#: access/brin/brin_minmax_multi.c:2141 access/brin/brin_minmax_multi.c:2148 access/brin/brin_minmax_multi.c:2155 utils/adt/timestamp.c:941 utils/adt/timestamp.c:1515 utils/adt/timestamp.c:1982 utils/adt/timestamp.c:3059 utils/adt/timestamp.c:3064 utils/adt/timestamp.c:3069 utils/adt/timestamp.c:3119 utils/adt/timestamp.c:3126 utils/adt/timestamp.c:3133 utils/adt/timestamp.c:3153 utils/adt/timestamp.c:3160 utils/adt/timestamp.c:3167 utils/adt/timestamp.c:3197 utils/adt/timestamp.c:3205 utils/adt/timestamp.c:3249 utils/adt/timestamp.c:3676 utils/adt/timestamp.c:3801 utils/adt/timestamp.c:4349 #, c-format -msgid "could not open parent table of index %s" -msgstr "n'a pas pu ouvrir la table parent de l'index %s" +msgid "interval out of range" +msgstr "intervalle en dehors des limites" -#: access/brin/brin_pageops.c:77 access/brin/brin_pageops.c:363 access/brin/brin_pageops.c:844 access/gin/ginentrypage.c:110 access/gist/gist.c:1435 access/spgist/spgdoinsert.c:1957 +#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 access/brin/brin_pageops.c:843 access/gin/ginentrypage.c:110 access/gist/gist.c:1441 access/spgist/spgdoinsert.c:1995 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "la taille de la ligne index, %zu, dépasse le maximum, %zu, pour l'index « %s »" -#: access/brin/brin_revmap.c:382 access/brin/brin_revmap.c:388 +#: access/brin/brin_revmap.c:392 access/brin/brin_revmap.c:398 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "index BRIN corrompu : carte d'intervalle incohérente" -#: access/brin/brin_revmap.c:404 -#, c-format -msgid "leftover placeholder tuple detected in BRIN index \"%s\", deleting" -msgstr "reste d'espace de ligne réservé dans l'index BRIN « %s », suppression" - #: access/brin/brin_revmap.c:601 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "type de page 0x%04X dans l'index BRIN « %s », bloc %u" -#: access/brin/brin_validate.c:116 access/gin/ginvalidate.c:149 access/gist/gistvalidate.c:146 access/hash/hashvalidate.c:132 access/nbtree/nbtvalidate.c:110 access/spgist/spgvalidate.c:165 +#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:151 access/gist/gistvalidate.c:153 access/hash/hashvalidate.c:139 access/nbtree/nbtvalidate.c:120 access/spgist/spgvalidate.c:189 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with invalid support number %d" msgstr "" "la famille d'opérateur « %s » de la méthode d'accès %s contient la fonction %s avec\n" "le numéro de support invalide %d" -#: access/brin/brin_validate.c:132 access/gin/ginvalidate.c:161 access/gist/gistvalidate.c:158 access/hash/hashvalidate.c:115 access/nbtree/nbtvalidate.c:122 access/spgist/spgvalidate.c:177 +#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:163 access/gist/gistvalidate.c:165 access/hash/hashvalidate.c:118 access/nbtree/nbtvalidate.c:132 access/spgist/spgvalidate.c:201 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with wrong signature for support number %d" msgstr "" "la famille d'opérateur « %s » de la méthode d'accès %s contient la fonction %s avec une mauvaise\n" "signature pour le numéro de support %d" -#: access/brin/brin_validate.c:154 access/gin/ginvalidate.c:180 access/gist/gistvalidate.c:178 access/hash/hashvalidate.c:153 access/nbtree/nbtvalidate.c:142 access/spgist/spgvalidate.c:197 +#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:182 access/gist/gistvalidate.c:185 access/hash/hashvalidate.c:160 access/nbtree/nbtvalidate.c:152 access/spgist/spgvalidate.c:221 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with invalid strategy number %d" msgstr "" "la famille d'opérateur « %s » de la méthode d'accès %s contient l'opérateur %s avec le numéro\n" "de stratégie invalide %d" -#: access/brin/brin_validate.c:183 access/gin/ginvalidate.c:193 access/hash/hashvalidate.c:166 access/nbtree/nbtvalidate.c:155 access/spgist/spgvalidate.c:213 +#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:195 access/hash/hashvalidate.c:173 access/nbtree/nbtvalidate.c:165 access/spgist/spgvalidate.c:237 #, c-format msgid "operator family \"%s\" of access method %s contains invalid ORDER BY specification for operator %s" msgstr "" "la famille d'opérateur « %s » de la méthode d'accès %s contient la spécification ORDER BY\n" "invalide pour l'opérateur %s" -#: access/brin/brin_validate.c:196 access/gin/ginvalidate.c:206 access/gist/gistvalidate.c:226 access/hash/hashvalidate.c:179 access/nbtree/nbtvalidate.c:168 access/spgist/spgvalidate.c:229 +#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:208 access/gist/gistvalidate.c:233 access/hash/hashvalidate.c:186 access/nbtree/nbtvalidate.c:178 access/spgist/spgvalidate.c:253 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with wrong signature" msgstr "la famille d'opérateur « %s » de la méthode d'accès %s contient l'opérateur %s avec une mauvaise signature" -#: access/brin/brin_validate.c:234 access/hash/hashvalidate.c:219 access/nbtree/nbtvalidate.c:226 access/spgist/spgvalidate.c:256 +#: access/brin/brin_validate.c:236 access/hash/hashvalidate.c:226 access/nbtree/nbtvalidate.c:236 access/spgist/spgvalidate.c:280 #, c-format msgid "operator family \"%s\" of access method %s is missing operator(s) for types %s and %s" msgstr "" "la famille d'opérateur « %s » de la méthode d'accès %s nécessite des opérateurs supplémentaires\n" "pour les types %s et %s" -#: access/brin/brin_validate.c:244 +#: access/brin/brin_validate.c:246 #, c-format msgid "operator family \"%s\" of access method %s is missing support function(s) for types %s and %s" msgstr "" "la famille d'opérateur « %s » de la méthode d'accès %s nécessite des fonctions de support\n" "manquantes pour les types %s et %s" -#: access/brin/brin_validate.c:257 access/hash/hashvalidate.c:233 access/nbtree/nbtvalidate.c:250 access/spgist/spgvalidate.c:289 +#: access/brin/brin_validate.c:259 access/hash/hashvalidate.c:240 access/nbtree/nbtvalidate.c:260 access/spgist/spgvalidate.c:315 #, c-format msgid "operator class \"%s\" of access method %s is missing operator(s)" msgstr "il manque un ou des opérateurs à la classe d'opérateur « %s » de la méthode d'accès %s" -#: access/brin/brin_validate.c:268 access/gin/ginvalidate.c:247 access/gist/gistvalidate.c:266 +#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:250 access/gist/gistvalidate.c:274 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d" msgstr "la classe d'opérateur « %s » de la méthode d'accès %s nécessite la fonction de support manquante %d" +#: access/common/attmap.c:122 +#, c-format +msgid "Returned type %s does not match expected type %s in column %d." +msgstr "Le type %s renvoyé ne correspond pas au type %s attendu dans la colonne %d." + +#: access/common/attmap.c:150 +#, c-format +msgid "Number of returned columns (%d) does not match expected column count (%d)." +msgstr "" +"Le nombre de colonnes renvoyées (%d) ne correspond pas au nombre de colonnes\n" +"attendues (%d)." + +#: access/common/attmap.c:229 access/common/attmap.c:241 +#, c-format +msgid "could not convert row type" +msgstr "n'a pas pu convertir le type de ligne" + +#: access/common/attmap.c:230 +#, c-format +msgid "Attribute \"%s\" of type %s does not match corresponding attribute of type %s." +msgstr "L'attribut « %s » du type %s ne correspond pas à l'attribut correspondant de type %s." + +#: access/common/attmap.c:242 +#, c-format +msgid "Attribute \"%s\" of type %s does not exist in type %s." +msgstr "L'attribut « %s » du type %s n'existe pas dans le type %s." + #: access/common/heaptuple.c:1036 access/common/heaptuple.c:1371 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "le nombre de colonnes (%d) dépasse la limite (%d)" -#: access/common/indextuple.c:63 +#: access/common/indextuple.c:70 #, c-format msgid "number of index columns (%d) exceeds limit (%d)" msgstr "le nombre de colonnes indexées (%d) dépasse la limite (%d)" -#: access/common/indextuple.c:179 access/spgist/spgutils.c:691 +#: access/common/indextuple.c:199 access/spgist/spgutils.c:947 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "la ligne index requiert %zu octets, la taille maximum est %zu" -#: access/common/printtup.c:369 tcop/fastpath.c:180 tcop/fastpath.c:530 tcop/postgres.c:1834 +#: access/common/printtup.c:292 tcop/fastpath.c:106 tcop/fastpath.c:447 tcop/postgres.c:1900 #, c-format msgid "unsupported format code: %d" msgstr "code de format non supporté : %d" -#: access/common/reloptions.c:579 +#: access/common/reloptions.c:506 +msgid "Valid values are \"on\", \"off\", and \"auto\"." +msgstr "Les valeurs valides sont entre « on », « off » et « auto »." + +#: access/common/reloptions.c:517 +msgid "Valid values are \"local\" and \"cascaded\"." +msgstr "Les valeurs valides sont entre « local » et « cascaded »." + +#: access/common/reloptions.c:665 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "limite dépassée des types de paramètres de la relation définie par l'utilisateur" -#: access/common/reloptions.c:867 +#: access/common/reloptions.c:1208 #, c-format msgid "RESET must not include values for parameters" msgstr "RESET ne doit pas inclure de valeurs pour les paramètres" -#: access/common/reloptions.c:899 +#: access/common/reloptions.c:1240 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "espace de nom du paramètre « %s » non reconnu" -#: access/common/reloptions.c:936 utils/misc/guc.c:11710 +#: access/common/reloptions.c:1277 utils/misc/guc.c:12562 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "les tables avec WITH OIDS ne sont pas supportées" -#: access/common/reloptions.c:1154 +#: access/common/reloptions.c:1447 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "paramètre « %s » non reconnu" -#: access/common/reloptions.c:1184 +#: access/common/reloptions.c:1559 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "le paramètre « %s » est spécifié plus d'une fois" -#: access/common/reloptions.c:1200 +#: access/common/reloptions.c:1575 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "valeur invalide pour l'option booléenne « %s » : %s" -#: access/common/reloptions.c:1212 +#: access/common/reloptions.c:1587 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "valeur invalide pour l'option de type integer « %s » : %s" -#: access/common/reloptions.c:1218 access/common/reloptions.c:1238 +#: access/common/reloptions.c:1593 access/common/reloptions.c:1613 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "valeur %s en dehors des limites pour l'option « %s »" -#: access/common/reloptions.c:1220 +#: access/common/reloptions.c:1595 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Les valeurs valides sont entre « %d » et « %d »." -#: access/common/reloptions.c:1232 +#: access/common/reloptions.c:1607 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "valeur invalide pour l'option de type float « %s » : %s" -#: access/common/reloptions.c:1240 +#: access/common/reloptions.c:1615 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Les valeurs valides sont entre « %f » et « %f »." -#: access/common/tupconvert.c:107 +#: access/common/reloptions.c:1637 #, c-format -msgid "Returned type %s does not match expected type %s in column %d." -msgstr "Le type %s renvoyé ne correspond pas au type %s attendu dans la colonne %d." +msgid "invalid value for enum option \"%s\": %s" +msgstr "valeur invalide pour l'option enum « %s » : %s" -#: access/common/tupconvert.c:135 +#: access/common/toast_compression.c:32 #, c-format -msgid "Number of returned columns (%d) does not match expected column count (%d)." -msgstr "" -"Le nombre de colonnes renvoyées (%d) ne correspond pas au nombre de colonnes\n" -"attendues (%d)." +msgid "unsupported LZ4 compression method" +msgstr "méthode compression LZ4 non supportée" -#: access/common/tupconvert.c:303 +#: access/common/toast_compression.c:33 #, c-format -msgid "Attribute \"%s\" of type %s does not match corresponding attribute of type %s." -msgstr "L'attribut « %s » du type %s ne correspond pas à l'attribut correspondant de type %s." +msgid "This functionality requires the server to be built with lz4 support." +msgstr "Cette fonctionnalité nécessite que le serveur dispose du support de lz4." -#: access/common/tupconvert.c:315 +#: access/common/toast_compression.c:34 #, c-format -msgid "Attribute \"%s\" of type %s does not exist in type %s." -msgstr "L'attribut « %s » du type %s n'existe pas dans le type %s." +msgid "You need to rebuild PostgreSQL using --with-lz4." +msgstr "Vous devez recompiler PostgreSQL en utilisant --with-lz4." -#: access/common/tupdesc.c:842 parser/parse_clause.c:779 parser/parse_relation.c:1578 +#: access/common/tupdesc.c:822 parser/parse_clause.c:772 parser/parse_relation.c:1838 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "la colonne « %s » ne peut pas être déclarée SETOF" @@ -591,81 +746,82 @@ msgstr "la posting list est trop longue" msgid "Reduce maintenance_work_mem." msgstr "Réduisez le maintenance_work_mem." -#: access/gin/ginfast.c:1042 +#: access/gin/ginfast.c:1036 #, c-format msgid "GIN pending list cannot be cleaned up during recovery." msgstr "la pending list GIN ne peut pas être nettoyée lors de la restauration." -#: access/gin/ginfast.c:1049 +#: access/gin/ginfast.c:1043 #, c-format msgid "\"%s\" is not a GIN index" msgstr "« %s » n'est pas un index GIN" -#: access/gin/ginfast.c:1060 +#: access/gin/ginfast.c:1054 #, c-format msgid "cannot access temporary indexes of other sessions" msgstr "ne peut pas accéder aux index temporaires d'autres sessions" -#: access/gin/ginscan.c:402 +#: access/gin/ginget.c:270 access/nbtree/nbtinsert.c:759 +#, c-format +msgid "failed to re-find tuple within index \"%s\"" +msgstr "échec pour retrouver la ligne dans l'index « %s »" + +#: access/gin/ginscan.c:431 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" msgstr "" "les anciens index GIN ne supportent pas les parcours complets d'index et les\n" "recherches de valeurs NULL" -#: access/gin/ginscan.c:403 +#: access/gin/ginscan.c:432 #, c-format msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Pour corriger ceci, faites un REINDEX INDEX « %s »." -#: access/gin/ginutil.c:139 executor/execExpr.c:1860 utils/adt/arrayfuncs.c:3789 utils/adt/arrayfuncs.c:6416 utils/adt/rowtypes.c:936 +#: access/gin/ginutil.c:145 executor/execExpr.c:2112 utils/adt/arrayfuncs.c:3816 utils/adt/arrayfuncs.c:6444 utils/adt/rowtypes.c:957 #, c-format msgid "could not identify a comparison function for type %s" msgstr "n'a pas pu identifier une fonction de comparaison pour le type %s" -#: access/gin/ginvalidate.c:93 access/gist/gistvalidate.c:93 access/hash/hashvalidate.c:99 access/spgist/spgvalidate.c:99 +#: access/gin/ginvalidate.c:92 access/gist/gistvalidate.c:93 access/hash/hashvalidate.c:102 access/spgist/spgvalidate.c:102 #, c-format msgid "operator family \"%s\" of access method %s contains support function %s with different left and right input types" msgstr "" "la famille d'opérateur « %s » de la méthode d'accès %s contient la fonction de support\n" "%s avec des types en entrée gauche et droite différents" -#: access/gin/ginvalidate.c:257 +#: access/gin/ginvalidate.c:260 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d or %d" msgstr "la classe d'opérateur « %s » de la méthode d'accès %s nécessite la fonction de support manquante %d ou %d" -#: access/gist/gist.c:749 access/gist/gistvacuum.c:424 +#: access/gin/ginvalidate.c:333 access/gist/gistvalidate.c:350 access/spgist/spgvalidate.c:387 +#, fuzzy, c-format +#| msgid "operator family %s for access method %s" +msgid "support function number %d is invalid for access method %s" +msgstr "famille d'opérateur %s pour la méthode d'accès %s" + +#: access/gist/gist.c:758 access/gist/gistvacuum.c:420 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "l'index « %s » contient une ligne interne marquée comme invalide" -#: access/gist/gist.c:751 access/gist/gistvacuum.c:426 +#: access/gist/gist.c:760 access/gist/gistvacuum.c:422 #, c-format msgid "This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1." msgstr "" "Ceci est dû à la division d'une page incomplète à la restauration suite à un\n" "crash avant la mise à jour en 9.1." -#: access/gist/gist.c:752 access/gist/gistutil.c:787 access/gist/gistutil.c:798 access/gist/gistvacuum.c:427 access/hash/hashutil.c:241 access/hash/hashutil.c:252 access/hash/hashutil.c:264 access/hash/hashutil.c:285 access/nbtree/nbtpage.c:708 access/nbtree/nbtpage.c:719 +#: access/gist/gist.c:761 access/gist/gistutil.c:801 access/gist/gistutil.c:812 access/gist/gistvacuum.c:423 access/hash/hashutil.c:227 access/hash/hashutil.c:238 access/hash/hashutil.c:250 access/hash/hashutil.c:271 access/nbtree/nbtpage.c:810 access/nbtree/nbtpage.c:821 #, c-format msgid "Please REINDEX it." msgstr "Merci d'exécuter REINDEX sur cet objet." -#: access/gist/gistbuild.c:253 -#, c-format -msgid "invalid value for \"buffering\" option" -msgstr "valeur invalide pour l'option « buffering »" - -#: access/gist/gistbuild.c:254 -#, c-format -msgid "Valid values are \"on\", \"off\", and \"auto\"." -msgstr "Les valeurs valides sont entre « on », « off » et « auto »." - -#: access/gist/gistbuildbuffers.c:779 utils/sort/logtape.c:255 +#: access/gist/gist.c:1175 #, c-format -msgid "could not write block %ld of temporary file: %m" -msgstr "n'a pas pu écrire le bloc %ld du fichier temporaire : %m" +msgid "fixing incomplete split in index \"%s\", block %u" +msgstr "" #: access/gist/gistsplit.c:446 #, c-format @@ -680,37 +836,36 @@ msgstr "" "ou essayez d'utiliser la colonne comme second dans la commande\n" "CREATE INDEX." -#: access/gist/gistutil.c:784 access/hash/hashutil.c:238 access/nbtree/nbtpage.c:705 +#: access/gist/gistutil.c:798 access/hash/hashutil.c:224 access/nbtree/nbtpage.c:807 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "l'index « %s » contient une page zéro inattendue au bloc %u" -#: access/gist/gistutil.c:795 access/hash/hashutil.c:249 access/hash/hashutil.c:261 access/nbtree/nbtpage.c:716 +#: access/gist/gistutil.c:809 access/hash/hashutil.c:235 access/hash/hashutil.c:247 access/nbtree/nbtpage.c:818 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "l'index « %s » contient une page corrompue au bloc %u" -#: access/gist/gistvalidate.c:196 +#: access/gist/gistvalidate.c:203 #, c-format msgid "operator family \"%s\" of access method %s contains unsupported ORDER BY specification for operator %s" msgstr "" "la famille d'opérateur « %s » de la méthode d'accès %s contient une spécification ORDER BY\n" "non supportée pour l'opérateur %s" -#: access/gist/gistvalidate.c:207 +#: access/gist/gistvalidate.c:214 #, c-format msgid "operator family \"%s\" of access method %s contains incorrect ORDER BY opfamily specification for operator %s" msgstr "" "la famille d'opérateur « %s » de la méthode d'accès %s contient la spécification opfamily ORDER BY\n" "incorrecte pour l'opérateur %s" -#: access/hash/hashfunc.c:255 access/hash/hashfunc.c:311 utils/adt/varchar.c:992 utils/adt/varchar.c:1052 +#: access/hash/hashfunc.c:255 access/hash/hashfunc.c:311 utils/adt/varchar.c:993 utils/adt/varchar.c:1053 #, c-format msgid "could not determine which collation to use for string hashing" msgstr "n'a pas pu déterminer le collationnement à utiliser pour le hachage de chaîne" -#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:678 commands/createas.c:207 commands/createas.c:491 commands/indexcmds.c:1694 commands/tablecmds.c:15237 commands/view.c:105 regex/regc_pg_locale.c:263 utils/adt/formatting.c:1571 utils/adt/formatting.c:1695 utils/adt/formatting.c:1820 utils/adt/like.c:194 utils/adt/like_support.c:965 utils/adt/varchar.c:734 utils/adt/varchar.c:993 utils/adt/varchar.c:1053 -#: utils/adt/varlena.c:1456 +#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:712 catalog/heap.c:718 commands/createas.c:206 commands/createas.c:509 commands/indexcmds.c:1869 commands/tablecmds.c:16664 commands/view.c:86 regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 utils/adt/like_support.c:1003 utils/adt/varchar.c:733 utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1524 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Utilisez la clause COLLARE pour configurer explicitement le collationnement." @@ -720,7 +875,7 @@ msgstr "Utilisez la clause COLLARE pour configurer explicitement le collationnem msgid "index row size %zu exceeds hash maximum %zu" msgstr "la taille de la ligne index, %zu, dépasse le hachage maximum, %zu" -#: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:1961 access/spgist/spgutils.c:752 +#: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:1999 access/spgist/spgutils.c:1008 #, c-format msgid "Values larger than a buffer page cannot be indexed." msgstr "Les valeurs plus larges qu'une page de tampon ne peuvent pas être indexées." @@ -740,244 +895,386 @@ msgstr "en dehors des pages surchargées dans l'index haché « %s »" msgid "hash indexes do not support whole-index scans" msgstr "les index hâchés ne supportent pas les parcours complets d'index" -#: access/hash/hashutil.c:277 +#: access/hash/hashutil.c:263 #, c-format msgid "index \"%s\" is not a hash index" msgstr "l'index « %s » n'est pas un index haché" -#: access/hash/hashutil.c:283 +#: access/hash/hashutil.c:269 #, c-format msgid "index \"%s\" has wrong hash version" msgstr "l'index « %s » a la mauvaise version de hachage" -#: access/hash/hashvalidate.c:191 +#: access/hash/hashvalidate.c:198 #, c-format msgid "operator family \"%s\" of access method %s lacks support function for operator %s" msgstr "" "la famille d'opérateur « %s » de la méthode d'accès %s requiert la fonction de support\n" "pour l'opérateur %s" -#: access/hash/hashvalidate.c:249 access/nbtree/nbtvalidate.c:266 +#: access/hash/hashvalidate.c:256 access/nbtree/nbtvalidate.c:276 #, c-format msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "il manque un opérateur inter-type pour la famille d'opérateur « %s » de la méthode d'accès %s" -#: access/heap/heapam.c:2063 +#: access/heap/heapam.c:2324 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "ne peut pas insérer de lignes dans un processus parallèle" -#: access/heap/heapam.c:2473 +#: access/heap/heapam.c:2795 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "ne peut pas supprimer les lignes lors d'une opération parallèle" -#: access/heap/heapam.c:2519 +#: access/heap/heapam.c:2841 #, c-format msgid "attempted to delete invisible tuple" msgstr "tentative de supprimer une ligne invisible" -#: access/heap/heapam.c:2945 access/heap/heapam.c:5726 +#: access/heap/heapam.c:3266 access/heap/heapam.c:6067 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "ne peut pas mettre à jour les lignes lors d'une opération parallèle" -#: access/heap/heapam.c:3078 +#: access/heap/heapam.c:3399 #, c-format msgid "attempted to update invisible tuple" msgstr "tentative de mettre à jour une ligne invisible" -#: access/heap/heapam.c:4390 access/heap/heapam.c:4428 access/heap/heapam.c:4685 access/heap/heapam_handler.c:454 +#: access/heap/heapam.c:4720 access/heap/heapam.c:4758 access/heap/heapam.c:5014 access/heap/heapam_handler.c:454 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "n'a pas pu obtenir un verrou sur la relation « %s »" -#: access/heap/heapam_handler.c:405 +#: access/heap/heapam_handler.c:403 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update" msgstr "la ligne à verrouillée était déjà déplacée dans une autre partition du fait d'une mise à jour concurrente" -#: access/heap/hio.c:345 access/heap/rewriteheap.c:681 +#: access/heap/hio.c:360 access/heap/rewriteheap.c:665 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "la ligne est trop grande : taille %zu, taille maximale %zu" -#: access/heap/rewriteheap.c:941 +#: access/heap/rewriteheap.c:927 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "n'a pas pu écrire le fichier « %s », a écrit %d de %d : %m" -#: access/heap/rewriteheap.c:1035 access/heap/rewriteheap.c:1154 access/transam/timeline.c:314 access/transam/timeline.c:468 access/transam/xlog.c:3252 access/transam/xlog.c:3424 access/transam/xlog.c:4544 access/transam/xlog.c:10552 access/transam/xlog.c:10590 access/transam/xlog.c:10995 access/transam/xlogfuncs.c:736 postmaster/postmaster.c:4524 replication/logical/origin.c:576 replication/slot.c:1261 storage/file/copydir.c:167 -#: storage/smgr/md.c:204 utils/time/snapmgr.c:1329 +#: access/heap/rewriteheap.c:1020 access/heap/rewriteheap.c:1138 access/transam/timeline.c:329 access/transam/timeline.c:485 access/transam/xlog.c:3334 access/transam/xlog.c:3522 access/transam/xlog.c:4723 access/transam/xlog.c:11111 access/transam/xlog.c:11149 access/transam/xlog.c:11554 access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4581 postmaster/postmaster.c:5628 replication/logical/origin.c:587 replication/slot.c:1482 storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1244 #, c-format msgid "could not create file \"%s\": %m" msgstr "n'a pas pu créer le fichier « %s » : %m" -#: access/heap/rewriteheap.c:1164 +#: access/heap/rewriteheap.c:1148 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "n'a pas pu tronquer le fichier « %s » en %u : %m" -#: access/heap/rewriteheap.c:1172 replication/walsender.c:493 storage/smgr/md.c:1245 -#, c-format -msgid "could not seek to end of file \"%s\": %m" -msgstr "n'a pas pu trouver la fin du fichier « %s » : %m" - -#: access/heap/rewriteheap.c:1189 access/transam/timeline.c:369 access/transam/timeline.c:408 access/transam/timeline.c:485 access/transam/xlog.c:3308 access/transam/xlog.c:3480 access/transam/xlog.c:4556 postmaster/postmaster.c:4534 postmaster/postmaster.c:4544 replication/logical/origin.c:588 replication/logical/origin.c:630 replication/logical/origin.c:649 replication/logical/snapbuild.c:1627 replication/slot.c:1295 -#: storage/file/copydir.c:207 utils/init/miscinit.c:1345 utils/init/miscinit.c:1356 utils/init/miscinit.c:1364 utils/misc/guc.c:7787 utils/misc/guc.c:7818 utils/misc/guc.c:9743 utils/misc/guc.c:9757 utils/time/snapmgr.c:1334 utils/time/snapmgr.c:1341 +#: access/heap/rewriteheap.c:1166 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:502 access/transam/xlog.c:3406 access/transam/xlog.c:3578 access/transam/xlog.c:4735 postmaster/postmaster.c:4591 postmaster/postmaster.c:4601 replication/logical/origin.c:599 replication/logical/origin.c:641 replication/logical/origin.c:660 replication/logical/snapbuild.c:1611 replication/slot.c:1517 storage/file/buffile.c:506 storage/file/copydir.c:207 utils/init/miscinit.c:1421 utils/init/miscinit.c:1432 utils/init/miscinit.c:1440 utils/misc/guc.c:8386 utils/misc/guc.c:8417 utils/misc/guc.c:10326 utils/misc/guc.c:10340 utils/time/snapmgr.c:1249 +#: utils/time/snapmgr.c:1256 #, c-format msgid "could not write to file \"%s\": %m" msgstr "n'a pas pu écrire dans le fichier « %s » : %m" -#: access/heap/rewriteheap.c:1279 access/transam/twophase.c:1661 access/transam/xlogarchive.c:112 access/transam/xlogarchive.c:459 postmaster/postmaster.c:1277 postmaster/syslogger.c:1466 replication/logical/origin.c:564 replication/logical/reorderbuffer.c:2814 replication/logical/snapbuild.c:1569 replication/logical/snapbuild.c:2011 replication/slot.c:1383 storage/file/fd.c:704 storage/file/fd.c:3000 storage/file/fd.c:3062 -#: storage/file/reinit.c:255 storage/ipc/dsm.c:307 storage/smgr/md.c:298 storage/smgr/md.c:354 storage/sync/sync.c:210 utils/time/snapmgr.c:1674 +#: access/heap/rewriteheap.c:1256 access/transam/twophase.c:1615 access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 postmaster/postmaster.c:1093 postmaster/syslogger.c:1464 replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4344 replication/logical/snapbuild.c:1556 replication/logical/snapbuild.c:1972 replication/slot.c:1614 storage/file/fd.c:788 storage/file/fd.c:3169 storage/file/fd.c:3231 storage/file/reinit.c:250 storage/ipc/dsm.c:315 storage/smgr/md.c:344 storage/smgr/md.c:394 storage/sync/sync.c:231 utils/time/snapmgr.c:1589 #, c-format msgid "could not remove file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier « %s » : %m" -#: access/heap/vacuumlazy.c:267 -#, c-format -msgid "skipping redundant vacuum to prevent wraparound of table \"%s.%s.%s\"" -msgstr "ignore un VACUUM redondant pour éviter le rebouclage des identifiants dans la table \"%s.%s.%s\"" - -#: access/heap/vacuumlazy.c:405 +#: access/heap/vacuumlazy.c:746 #, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "VACUUM automatique agressif pour éviter un rebouclage des identifiants de transaction dans la table « %s.%s.%s » : %d parcours d'index\n" -#: access/heap/vacuumlazy.c:410 +#: access/heap/vacuumlazy.c:748 +#, c-format +msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" +msgstr "VACUUM automatique pour éviter un rebouclage des identifiants de transaction dans la table « %s.%s.%s » : parcours d'index : %d\n" + +#: access/heap/vacuumlazy.c:753 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "VACUUM automatique agressif de la table « %s.%s.%s » : %d parcours d'index\n" -#: access/heap/vacuumlazy.c:412 +#: access/heap/vacuumlazy.c:755 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "VACUUM automatique de la table « %s.%s.%s » : %d parcours d'index\n" -#: access/heap/vacuumlazy.c:419 +#: access/heap/vacuumlazy.c:762 #, c-format msgid "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n" msgstr "pages : %u supprimées, %u restants, %u ignorées à cause de verrous; %u ignorées car gelées\n" -#: access/heap/vacuumlazy.c:425 -#, c-format -msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable, oldest xmin: %u\n" +#: access/heap/vacuumlazy.c:768 +#, fuzzy, c-format +#| msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable, oldest xmin: %u\n" +msgid "tuples: %lld removed, %lld remain, %lld are dead but not yet removable, oldest xmin: %u\n" msgstr "lignes : %.0f supprimées, %.0f restantes, %.0f sont mortes mais pas encore supprimables, plus ancien xmin : %u\n" -#: access/heap/vacuumlazy.c:431 +#: access/heap/vacuumlazy.c:774 commands/analyze.c:795 +#, c-format +msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" +msgstr "utilisation du cache : %lld récupérés, %lld ratés, %lld modifiés\n" + +#: access/heap/vacuumlazy.c:782 +#, c-format +msgid " %u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n" +msgstr "" + +#: access/heap/vacuumlazy.c:785 +msgid "index scan not needed:" +msgstr "parcours d'index non nécessaire :" + +#: access/heap/vacuumlazy.c:787 +msgid "index scan needed:" +msgstr "parcours d'index nécessaire :" + +#: access/heap/vacuumlazy.c:791 #, c-format -msgid "buffer usage: %d hits, %d misses, %d dirtied\n" -msgstr "utilisation du tampon : %d récupérés, %d ratés, %d modifiés\n" +msgid " %u pages from table (%.2f%% of total) have %lld dead item identifiers\n" +msgstr "" + +#: access/heap/vacuumlazy.c:794 +msgid "index scan bypassed:" +msgstr "" + +#: access/heap/vacuumlazy.c:796 +msgid "index scan bypassed by failsafe:" +msgstr "" + +#: access/heap/vacuumlazy.c:811 +#, fuzzy, c-format +#| msgid "" +#| "%u index pages have been deleted, %u are currently reusable.\n" +#| "%s." +msgid "index \"%s\": pages: %u in total, %u newly deleted, %u currently deleted, %u reusable\n" +msgstr "" +"%u pages d'index ont été supprimées, %u sont actuellement réutilisables.\n" +"%s." -#: access/heap/vacuumlazy.c:435 +#: access/heap/vacuumlazy.c:818 commands/analyze.c:799 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "vitesse moyenne de lecture : %.3f Mo/s, vitesse moyenne d'écriture : %.3f Mo/s\n" -#: access/heap/vacuumlazy.c:437 +#: access/heap/vacuumlazy.c:822 commands/analyze.c:803 +msgid "I/O Timings:" +msgstr "" + +#: access/heap/vacuumlazy.c:824 commands/analyze.c:805 #, c-format -msgid "system usage: %s" -msgstr "utilisation du système : %s" +msgid " read=%.3f" +msgstr "" -#: access/heap/vacuumlazy.c:533 +#: access/heap/vacuumlazy.c:827 commands/analyze.c:808 +#, c-format +msgid " write=%.3f" +msgstr "" + +#: access/heap/vacuumlazy.c:831 +#, c-format +msgid "system usage: %s\n" +msgstr "utilisation du système : %s\n" + +#: access/heap/vacuumlazy.c:833 +#, c-format +msgid "WAL usage: %ld records, %ld full page images, %llu bytes" +msgstr "utilisation des WAL : %ld enregistrements, %ld images complètes de blocs, %llu octets" + +#: access/heap/vacuumlazy.c:908 #, c-format msgid "aggressively vacuuming \"%s.%s\"" msgstr "exécution d'un VACUUM agressif sur « %s.%s »" -#: access/heap/vacuumlazy.c:538 commands/cluster.c:910 +#: access/heap/vacuumlazy.c:913 commands/cluster.c:898 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "exécution du VACUUM sur « %s.%s »" -#: access/heap/vacuumlazy.c:1476 -#, c-format -msgid "\"%s\": removed %.0f row versions in %u pages" -msgstr "« %s » : %.0f versions de ligne supprimées dans %u pages" +#: access/heap/vacuumlazy.c:1615 +#, fuzzy, c-format +#| msgid "\"%s\": removed %d row versions in %d pages" +msgid "\"%s\": removed %lld dead item identifiers in %u pages" +msgstr "« %s »: %d versions de ligne supprimée dans %d pages" -#: access/heap/vacuumlazy.c:1486 -#, c-format -msgid "%.0f dead row versions cannot be removed yet, oldest xmin: %u\n" +#: access/heap/vacuumlazy.c:1621 +#, fuzzy, c-format +#| msgid "%.0f dead row versions cannot be removed yet, oldest xmin: %u\n" +msgid "%lld dead row versions cannot be removed yet, oldest xmin: %u\n" msgstr "%.0f versions de lignes mortes ne peuvent pas encore être supprimées, plus ancien xmin : %u\n" -#: access/heap/vacuumlazy.c:1488 +#: access/heap/vacuumlazy.c:1623 #, c-format -msgid "There were %.0f unused item identifiers.\n" -msgstr "Il y avait %.0f identifiants d'éléments inutilisés.\n" +msgid "%u page removed.\n" +msgid_plural "%u pages removed.\n" +msgstr[0] "" +msgstr[1] "" -#: access/heap/vacuumlazy.c:1490 +#: access/heap/vacuumlazy.c:1627 #, c-format msgid "Skipped %u page due to buffer pins, " msgid_plural "Skipped %u pages due to buffer pins, " msgstr[0] "Ignore %u page à cause des verrous de blocs, " msgstr[1] "Ignore %u pages à cause des verrous de blocs, " -#: access/heap/vacuumlazy.c:1494 +#: access/heap/vacuumlazy.c:1631 #, c-format msgid "%u frozen page.\n" msgid_plural "%u frozen pages.\n" msgstr[0] "%u page gelée.\n" msgstr[1] "%u pages gelées.\n" -#: access/heap/vacuumlazy.c:1498 -#, c-format -msgid "%u page is entirely empty.\n" -msgid_plural "%u pages are entirely empty.\n" -msgstr[0] "%u page est entièrement vide.\n" -msgstr[1] "%u pages sont entièrement vides.\n" - -#: access/heap/vacuumlazy.c:1502 commands/indexcmds.c:3287 commands/indexcmds.c:3305 +#: access/heap/vacuumlazy.c:1635 commands/indexcmds.c:3986 commands/indexcmds.c:4005 #, c-format msgid "%s." msgstr "%s." -#: access/heap/vacuumlazy.c:1505 -#, c-format -msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" +#: access/heap/vacuumlazy.c:1638 +#, fuzzy, c-format +#| msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" +msgid "\"%s\": found %lld removable, %lld nonremovable row versions in %u out of %u pages" msgstr "« %s » : trouvé %.0f versions de ligne supprimables, %.0f non supprimables, dans %u pages sur %u" -#: access/heap/vacuumlazy.c:1574 +#: access/heap/vacuumlazy.c:2143 #, c-format -msgid "\"%s\": removed %d row versions in %d pages" +msgid "\"%s\": index scan bypassed: %u pages from table (%.2f%% of total) have %lld dead item identifiers" +msgstr "" + +#: access/heap/vacuumlazy.c:2354 +#, fuzzy, c-format +#| msgid "\"%s\": removed %d row versions in %d pages" +msgid "\"%s\": removed %d dead item identifiers in %u pages" msgstr "« %s »: %d versions de ligne supprimée dans %d pages" -#: access/heap/vacuumlazy.c:1765 +#: access/heap/vacuumlazy.c:2601 +#, c-format +msgid "abandoned index vacuuming of table \"%s.%s.%s\" as a failsafe after %d index scans" +msgstr "" + +#: access/heap/vacuumlazy.c:2606 +#, fuzzy, c-format +#| msgid "oldest xmin is far in the past" +msgid "table's relfrozenxid or relminmxid is too far in the past" +msgstr "le plus ancien xmin est loin dans le passé" + +#: access/heap/vacuumlazy.c:2607 +#, c-format +msgid "" +"Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" +"You might also need to consider other ways for VACUUM to keep up with the allocation of transaction IDs." +msgstr "" + +#: access/heap/vacuumlazy.c:2747 +#, c-format +msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" +msgid_plural "launched %d parallel vacuum workers for index cleanup (planned: %d)" +msgstr[0] "a lancé %d worker parallélisé pour le nettoyage d'index du VACUUM (planifié : %d)" +msgstr[1] "a lancé %d workers parallélisés pour le nettoyage d'index du VACUUM (planifié : %d)" + +#: access/heap/vacuumlazy.c:2753 +#, c-format +msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" +msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" +msgstr[0] "a lancé %d worker parallélisé pour le vacuum d'index (planifié : %d)" +msgstr[1] "a lancé %d workers parallélisés pour le vacuum d'index (planifié : %d)" + +#: access/heap/vacuumlazy.c:3042 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "a parcouru l'index « %s » pour supprimer %d versions de lignes" -#: access/heap/vacuumlazy.c:1818 +#: access/heap/vacuumlazy.c:3099 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "l'index « %s » contient maintenant %.0f versions de ligne dans %u pages" -#: access/heap/vacuumlazy.c:1822 -#, c-format +#: access/heap/vacuumlazy.c:3103 +#, fuzzy, c-format +#| msgid "" +#| "%.0f index row versions were removed.\n" +#| "%u index pages have been deleted, %u are currently reusable.\n" +#| "%s." msgid "" "%.0f index row versions were removed.\n" -"%u index pages have been deleted, %u are currently reusable.\n" +"%u index pages were newly deleted.\n" +"%u index pages are currently deleted, of which %u are currently reusable.\n" "%s." msgstr "" "%.0f versions de ligne d'index ont été supprimées.\n" "%u pages d'index ont été supprimées, %u sont actuellement réutilisables.\n" "%s." -#: access/heap/vacuumlazy.c:1920 +#: access/heap/vacuumlazy.c:3215 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "« %s » : arrêt du TRUNCATE à cause d'un conflit dans la demande de verrou" -#: access/heap/vacuumlazy.c:1985 +#: access/heap/vacuumlazy.c:3281 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "« %s » : %u pages tronqués en %u" -#: access/heap/vacuumlazy.c:2050 +#: access/heap/vacuumlazy.c:3346 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "« %s » : mis en suspens du TRUNCATE à cause d'un conflit dans la demande de verrou" -#: access/index/amapi.c:83 commands/amcmds.c:167 +#: access/heap/vacuumlazy.c:3492 +#, c-format +msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" +msgstr "désactivation de l'option de parallélisation du VACUUM sur « %s » --- ne peut pas exécuter un VACUUM parallélisé sur des tables temporaires" + +#: access/heap/vacuumlazy.c:4247 +#, fuzzy, c-format +#| msgid "while scanning block %u of relation \"%s.%s\"" +msgid "while scanning block %u and offset %u of relation \"%s.%s\"" +msgstr "lors du parcours du bloc %u de la relation « %s.%s »" + +#: access/heap/vacuumlazy.c:4250 +#, c-format +msgid "while scanning block %u of relation \"%s.%s\"" +msgstr "lors du parcours du bloc %u de la relation « %s.%s »" + +#: access/heap/vacuumlazy.c:4254 +#, c-format +msgid "while scanning relation \"%s.%s\"" +msgstr "lors du parcours de la relation « %s.%s »" + +#: access/heap/vacuumlazy.c:4262 +#, fuzzy, c-format +#| msgid "while vacuuming block %u of relation \"%s.%s\"" +msgid "while vacuuming block %u and offset %u of relation \"%s.%s\"" +msgstr "lors du VACUUM du bloc %u de la relation « %s.%s »" + +#: access/heap/vacuumlazy.c:4265 +#, c-format +msgid "while vacuuming block %u of relation \"%s.%s\"" +msgstr "lors du VACUUM du bloc %u de la relation « %s.%s »" + +#: access/heap/vacuumlazy.c:4269 +#, c-format +msgid "while vacuuming relation \"%s.%s\"" +msgstr "lors du vacuum de la relation « %s.%s »" + +#: access/heap/vacuumlazy.c:4274 +#, c-format +msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" +msgstr "lors du nettoyage de l'index « %s » dans la relation « %s.%s »" + +#: access/heap/vacuumlazy.c:4279 +#, c-format +msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" +msgstr "lors du nettoyage de l'index « %s » dans la relation « %s.%s »" + +#: access/heap/vacuumlazy.c:4285 +#, c-format +msgid "while truncating relation \"%s.%s\" to %u blocks" +msgstr "lors du tronquage de la relation « %s.%s » à %u blocs" + +#: access/index/amapi.c:83 commands/amcmds.c:143 #, c-format msgid "access method \"%s\" is not of type %s" msgstr "la méthode d'accès « %s » n'est pas de type %s" @@ -987,62 +1284,67 @@ msgstr "la méthode d'accès « %s » n'est pas de type %s" msgid "index access method \"%s\" does not have a handler" msgstr "la méthode d'accès « %s » n'a pas de handler" -#: access/index/indexam.c:136 catalog/objectaddress.c:1259 commands/indexcmds.c:2405 commands/tablecmds.c:248 commands/tablecmds.c:272 commands/tablecmds.c:14944 commands/tablecmds.c:16334 +#: access/index/genam.c:486 +#, c-format +msgid "transaction aborted during system catalog scan" +msgstr "transaction annulée lors du parcours du catalogue système" + +#: access/index/indexam.c:142 catalog/objectaddress.c:1354 commands/indexcmds.c:2670 commands/tablecmds.c:268 commands/tablecmds.c:292 commands/tablecmds.c:16362 commands/tablecmds.c:18064 #, c-format msgid "\"%s\" is not an index" msgstr "« %s » n'est pas un index" -#: access/nbtree/nbtinsert.c:565 +#: access/index/indexam.c:973 +#, c-format +msgid "operator class %s has no options" +msgstr "la classe d'opérateur %s n'a pas d'options" + +#: access/nbtree/nbtinsert.c:665 #, c-format msgid "duplicate key value violates unique constraint \"%s\"" msgstr "la valeur d'une clé dupliquée rompt la contrainte unique « %s »" -#: access/nbtree/nbtinsert.c:567 +#: access/nbtree/nbtinsert.c:667 #, c-format msgid "Key %s already exists." msgstr "La clé « %s » existe déjà." -#: access/nbtree/nbtinsert.c:638 -#, c-format -msgid "failed to re-find tuple within index \"%s\"" -msgstr "échec pour retrouver la ligne dans l'index « %s »" - -#: access/nbtree/nbtinsert.c:640 +#: access/nbtree/nbtinsert.c:761 #, c-format msgid "This may be because of a non-immutable index expression." msgstr "Ceci peut être dû à une expression d'index immutable." -#: access/nbtree/nbtpage.c:135 access/nbtree/nbtpage.c:521 parser/parse_utilcmd.c:2117 +#: access/nbtree/nbtpage.c:159 access/nbtree/nbtpage.c:608 parser/parse_utilcmd.c:2327 #, c-format msgid "index \"%s\" is not a btree" msgstr "l'index « %s » n'est pas un btree" -#: access/nbtree/nbtpage.c:142 access/nbtree/nbtpage.c:528 +#: access/nbtree/nbtpage.c:166 access/nbtree/nbtpage.c:615 #, c-format msgid "version mismatch in index \"%s\": file version %d, current version %d, minimal supported version %d" msgstr "la version ne correspond pas dans l'index « %s » : version du fichier %d, version courante %d, version minimale supportée %d" -#: access/nbtree/nbtpage.c:1349 +#: access/nbtree/nbtpage.c:1875 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "l'index « %s » contient une page interne à moitié morte" -#: access/nbtree/nbtpage.c:1351 +#: access/nbtree/nbtpage.c:1877 #, c-format msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "Ceci peut être dû à un VACUUM interrompu en version 9.3 ou antérieure, avant la mise à jour. Merci d'utiliser REINDEX." -#: access/nbtree/nbtutils.c:2563 +#: access/nbtree/nbtutils.c:2665 #, c-format msgid "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" msgstr "la taille de la ligne d'index, %zu, dépasse le maximum pour un btree de version %u, soit %zu, pour l'index « %s »" -#: access/nbtree/nbtutils.c:2569 +#: access/nbtree/nbtutils.c:2671 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "La ligne d'index référence le tuple (%u,%u) dans la relation « %s »." -#: access/nbtree/nbtutils.c:2573 +#: access/nbtree/nbtutils.c:2675 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1053,41 +1355,47 @@ msgstr "" "Utilisez un index sur le hachage MD5 de la valeur ou passez à l'indexation\n" "de la recherche plein texte." -#: access/nbtree/nbtvalidate.c:236 +#: access/nbtree/nbtvalidate.c:246 #, c-format msgid "operator family \"%s\" of access method %s is missing support function for types %s and %s" msgstr "" "la famille d'opérateur « %s » de la méthode d'accès %s nécessite une fonction de support\n" "manquante pour les types %s et %s" -#: access/spgist/spgutils.c:142 +#: access/spgist/spgutils.c:232 #, c-format msgid "compress method must be defined when leaf type is different from input type" msgstr "la méthode de compression doit être définie quand le type feuille est différent du type d'entrée" -#: access/spgist/spgutils.c:749 +#: access/spgist/spgutils.c:1005 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "la taille de la ligne interne SP-GiST, %zu, dépasse le maximum %zu" -#: access/spgist/spgvalidate.c:276 +#: access/spgist/spgvalidate.c:136 +#, fuzzy, c-format +#| msgid "anycompatiblerange type %s does not match anycompatible type %s" +msgid "SP-GiST leaf data type %s does not match declared type %s" +msgstr "le type anycompatiblerange %s ne correspond pas au type anycompatible %s." + +#: access/spgist/spgvalidate.c:302 #, c-format msgid "operator family \"%s\" of access method %s is missing support function %d for type %s" msgstr "" "la famille d'opérateur « %s » de la méthode d'accès %s nécessite la fonction de support %d\n" "pour le type %s" -#: access/table/table.c:49 access/table/table.c:78 access/table/table.c:111 catalog/aclchk.c:1832 +#: access/table/table.c:49 access/table/table.c:83 access/table/table.c:112 access/table/table.c:145 catalog/aclchk.c:1792 #, c-format msgid "\"%s\" is an index" msgstr "« %s » est un index" -#: access/table/table.c:54 access/table/table.c:83 access/table/table.c:116 catalog/aclchk.c:1839 commands/tablecmds.c:11755 commands/tablecmds.c:14953 +#: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 access/table/table.c:150 catalog/aclchk.c:1799 commands/tablecmds.c:13123 commands/tablecmds.c:16371 #, c-format msgid "\"%s\" is a composite type" msgstr "« %s » est un type composite" -#: access/table/tableam.c:236 +#: access/table/tableam.c:266 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "le tid (%u, %u) n'est pas valide pour la relation « %s »" @@ -1097,7 +1405,7 @@ msgstr "le tid (%u, %u) n'est pas valide pour la relation « %s »" msgid "%s cannot be empty." msgstr "%s ne peut pas être vide." -#: access/table/tableamapi.c:122 utils/misc/guc.c:11634 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12486 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s est trop long (%d caractères maximum)." @@ -1117,32 +1425,33 @@ msgstr "La méthode d'accès « %s » n'existe pas." msgid "sample percentage must be between 0 and 100" msgstr "le pourcentage de l'échantillonnage doit être compris entre 0 et 100" -#: access/transam/commit_ts.c:295 +#: access/transam/commit_ts.c:278 #, c-format msgid "cannot retrieve commit timestamp for transaction %u" msgstr "ne peut pas récupérer l'horodatage de la validation pour la transaction %u" -#: access/transam/commit_ts.c:393 +#: access/transam/commit_ts.c:376 #, c-format msgid "could not get commit timestamp data" msgstr "n'a pas pu récupérer les données d'horodatage de la validation" -#: access/transam/commit_ts.c:395 -#, c-format -msgid "Make sure the configuration parameter \"%s\" is set on the master server." +#: access/transam/commit_ts.c:378 +#, fuzzy, c-format +#| msgid "Make sure the configuration parameter \"%s\" is set on the master server." +msgid "Make sure the configuration parameter \"%s\" is set on the primary server." msgstr "Assurez-vous que le paramètre de configuration « %s » soit configuré sur le serveur primaire." -#: access/transam/commit_ts.c:397 +#: access/transam/commit_ts.c:380 #, c-format msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Assurez-vous que le paramètre de configuration « %s » soit configuré." -#: access/transam/multixact.c:1000 +#: access/transam/multixact.c:1021 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database \"%s\"" msgstr "la base de données n'accepte pas de commandes qui génèrent de nouveaux MultiXactId pour éviter les pertes de données suite à une réinitialisation de l'identifiant de transaction dans la base de données « %s »" -#: access/transam/multixact.c:1002 access/transam/multixact.c:1009 access/transam/multixact.c:1033 access/transam/multixact.c:1042 +#: access/transam/multixact.c:1023 access/transam/multixact.c:1030 access/transam/multixact.c:1054 access/transam/multixact.c:1063 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1151,72 +1460,67 @@ msgstr "" "Exécutez un VACUUM sur toute cette base.\n" "Vous pourriez avoir besoin de valider ou d'annuler de vieilles transactions préparées, ou de supprimer les slots de réplication périmés." -#: access/transam/multixact.c:1007 +#: access/transam/multixact.c:1028 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database with OID %u" msgstr "" "la base de données n'accepte pas de commandes qui génèrent de nouveaux MultiXactId pour éviter des pertes de données à cause de la réinitialisation de l'identifiant de transaction dans\n" "la base de données d'OID %u" -#: access/transam/multixact.c:1028 access/transam/multixact.c:2318 +#: access/transam/multixact.c:1049 access/transam/multixact.c:2330 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "database \"%s\" must be vacuumed before %u more MultiXactIds are used" msgstr[0] "un VACUUM doit être exécuté sur la base de données « %s » dans un maximum de %u MultiXactId" msgstr[1] "un VACUUM doit être exécuté sur la base de données « %s » dans un maximum de %u MultiXactId" -#: access/transam/multixact.c:1037 access/transam/multixact.c:2327 +#: access/transam/multixact.c:1058 access/transam/multixact.c:2339 #, c-format msgid "database with OID %u must be vacuumed before %u more MultiXactId is used" msgid_plural "database with OID %u must be vacuumed before %u more MultiXactIds are used" msgstr[0] "un VACUUM doit être exécuté sur la base de données d'OID %u dans un maximum de %u MultiXactId" msgstr[1] "un VACUUM doit être exécuté sur la base de données d'OID %u dans un maximum de %u MultiXactId" -#: access/transam/multixact.c:1098 +#: access/transam/multixact.c:1119 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "dépassement de limite des membres du multixact" -#: access/transam/multixact.c:1099 +#: access/transam/multixact.c:1120 #, c-format msgid "This command would create a multixact with %u members, but the remaining space is only enough for %u member." msgid_plural "This command would create a multixact with %u members, but the remaining space is only enough for %u members." msgstr[0] "Cette commande créera un multixact avec %u membres, mais l'espace restant est seulement suffisant pour %u membre." msgstr[1] "Cette commande créera un multixact avec %u membres, mais l'espace restant est seulement suffisant pour %u membres." -#: access/transam/multixact.c:1104 +#: access/transam/multixact.c:1125 #, c-format msgid "Execute a database-wide VACUUM in database with OID %u with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "Exécute un VACUUM sur la base dans la base d'OID %u avec une configuration réduite pour vacuum_multixact_freeze_min_age et vacuum_multixact_freeze_table_age." -#: access/transam/multixact.c:1135 +#: access/transam/multixact.c:1156 #, c-format msgid "database with OID %u must be vacuumed before %d more multixact member is used" msgid_plural "database with OID %u must be vacuumed before %d more multixact members are used" msgstr[0] "un VACUUM doit être exécuté sur la base de données d'OID %u avant que %d MultiXactId supplémentaire ne soit utilisé" msgstr[1] "un VACUUM doit être exécuté sur la base de données d'OID %u avant que %d MultiXactId supplémentaires ne soient utilisés" -#: access/transam/multixact.c:1140 +#: access/transam/multixact.c:1161 #, c-format msgid "Execute a database-wide VACUUM in that database with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "Exécute un VACUUM sur la base dans cette base avec une configuration réduite pour vacuum_multixact_freeze_min_age et vacuum_multixact_freeze_table_age." -#: access/transam/multixact.c:1277 +#: access/transam/multixact.c:1298 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "le MultiXactId %u n'existe plus : wraparound apparent" -#: access/transam/multixact.c:1285 +#: access/transam/multixact.c:1306 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "le MultiXactId %u n'a pas encore été créé : wraparound apparent" -#: access/transam/multixact.c:2268 -#, c-format -msgid "MultiXactId wrap limit is %u, limited by database with OID %u" -msgstr "La limite de réinitialisation MultiXactId est %u, limité par la base de données d'OID %u" - -#: access/transam/multixact.c:2323 access/transam/multixact.c:2332 access/transam/varsup.c:149 access/transam/varsup.c:156 access/transam/varsup.c:447 access/transam/varsup.c:454 +#: access/transam/multixact.c:2335 access/transam/multixact.c:2344 access/transam/varsup.c:151 access/transam/varsup.c:158 access/transam/varsup.c:466 access/transam/varsup.c:473 #, c-format msgid "" "To avoid a database shutdown, execute a database-wide VACUUM in that database.\n" @@ -1226,338 +1530,328 @@ msgstr "" "base. Vous pourriez avoir besoin d'enregistrer ou d'annuler les slots de réplication\n" "trop anciens." -#: access/transam/multixact.c:2602 -#, c-format -msgid "oldest MultiXactId member is at offset %u" -msgstr "le membre le plus ancien du MultiXactId est au décalage %u" - -#: access/transam/multixact.c:2606 +#: access/transam/multixact.c:2618 #, c-format msgid "MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk" msgstr "Les protections sur la réutilisation d'un membre MultiXact sont désactivées car le plus ancien MultiXact géré par un checkpoint, %u, n'existe pas sur disque" -#: access/transam/multixact.c:2628 +#: access/transam/multixact.c:2640 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "Les protections sur la réutilisation d'un membre MultiXact sont maintenant activées" -#: access/transam/multixact.c:2631 -#, c-format -msgid "MultiXact member stop limit is now %u based on MultiXact %u" -msgstr "La limite d'arrêt d'un membre MultiXact est maintenant %u, basée sur le MultiXact %u" - -#: access/transam/multixact.c:3011 +#: access/transam/multixact.c:3027 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "plus ancien MultiXact introuvable %u, plus récent MultiXact %u, ignore le troncage" -#: access/transam/multixact.c:3029 +#: access/transam/multixact.c:3045 #, c-format msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" msgstr "ne peut pas tronquer jusqu'au MutiXact %u car il n'existe pas sur disque, ignore le troncage" -#: access/transam/multixact.c:3343 +#: access/transam/multixact.c:3359 #, c-format msgid "invalid MultiXactId: %u" msgstr "MultiXactId invalide : %u" -#: access/transam/parallel.c:673 access/transam/parallel.c:792 +#: access/transam/parallel.c:707 access/transam/parallel.c:826 #, c-format msgid "parallel worker failed to initialize" msgstr "échec de l'initialisation du worker parallèle" -#: access/transam/parallel.c:674 access/transam/parallel.c:793 +#: access/transam/parallel.c:708 access/transam/parallel.c:827 #, c-format msgid "More details may be available in the server log." msgstr "Plus de détails sont disponibles dans les traces du serveur." -#: access/transam/parallel.c:854 +#: access/transam/parallel.c:888 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster a quitté pendant une transaction parallèle" -#: access/transam/parallel.c:1041 +#: access/transam/parallel.c:1075 #, c-format msgid "lost connection to parallel worker" msgstr "perte de la connexion au processus parallèle" -#: access/transam/parallel.c:1107 access/transam/parallel.c:1109 +#: access/transam/parallel.c:1141 access/transam/parallel.c:1143 msgid "parallel worker" msgstr "processus parallèle" -#: access/transam/parallel.c:1259 +#: access/transam/parallel.c:1294 #, c-format msgid "could not map dynamic shared memory segment" msgstr "n'a pas pu mapper le segment de mémoire partagée dynamique" -#: access/transam/parallel.c:1264 +#: access/transam/parallel.c:1299 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "numéro magique invalide dans le segment de mémoire partagée dynamique" -#: access/transam/slru.c:674 +#: access/transam/slru.c:712 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "le fichier « %s » n'existe pas, contenu lu comme des zéros" -#: access/transam/slru.c:912 access/transam/slru.c:918 access/transam/slru.c:926 access/transam/slru.c:931 access/transam/slru.c:938 access/transam/slru.c:943 access/transam/slru.c:950 access/transam/slru.c:957 +#: access/transam/slru.c:944 access/transam/slru.c:950 access/transam/slru.c:958 access/transam/slru.c:963 access/transam/slru.c:970 access/transam/slru.c:975 access/transam/slru.c:982 access/transam/slru.c:989 #, c-format msgid "could not access status of transaction %u" msgstr "n'a pas pu accéder au statut de la transaction %u" -#: access/transam/slru.c:913 +#: access/transam/slru.c:945 #, c-format msgid "Could not open file \"%s\": %m." msgstr "N'a pas pu ouvrir le fichier « %s » : %m." -#: access/transam/slru.c:919 +#: access/transam/slru.c:951 #, c-format msgid "Could not seek in file \"%s\" to offset %u: %m." msgstr "N'a pas pu se déplacer dans le fichier « %s » au décalage %u : %m." -#: access/transam/slru.c:927 +#: access/transam/slru.c:959 #, c-format msgid "Could not read from file \"%s\" at offset %u: %m." msgstr "N'a pas pu lire le fichier « %s » au décalage %u : %m." -#: access/transam/slru.c:932 +#: access/transam/slru.c:964 #, c-format msgid "Could not read from file \"%s\" at offset %u: read too few bytes." msgstr "N'a pas pu lire le fichier « %s » au décalage %u : lu trop peu d'octets." -#: access/transam/slru.c:939 +#: access/transam/slru.c:971 #, c-format msgid "Could not write to file \"%s\" at offset %u: %m." msgstr "N'a pas pu écrire le fichier « %s » au décalage %u : %m." -#: access/transam/slru.c:944 +#: access/transam/slru.c:976 #, c-format msgid "Could not write to file \"%s\" at offset %u: wrote too few bytes." msgstr "N'a pas pu écrire dans le fichier « %s » au décalage %u : écrit trop peu d'octets." -#: access/transam/slru.c:951 +#: access/transam/slru.c:983 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "N'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m." -#: access/transam/slru.c:958 +#: access/transam/slru.c:990 #, c-format msgid "Could not close file \"%s\": %m." msgstr "N'a pas pu fermer le fichier « %s » : %m." -#: access/transam/slru.c:1215 +#: access/transam/slru.c:1251 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "n'a pas pu tronquer le répertoire « %s » : contournement apparent" -#: access/transam/slru.c:1270 access/transam/slru.c:1326 -#, c-format -msgid "removing file \"%s\"" -msgstr "suppression du fichier « %s »" - -#: access/transam/timeline.c:148 access/transam/timeline.c:153 +#: access/transam/timeline.c:163 access/transam/timeline.c:168 #, c-format msgid "syntax error in history file: %s" msgstr "erreur de syntaxe dans le fichier historique : %s" -#: access/transam/timeline.c:149 +#: access/transam/timeline.c:164 #, c-format msgid "Expected a numeric timeline ID." msgstr "Attendait un identifiant timeline numérique." -#: access/transam/timeline.c:154 +#: access/transam/timeline.c:169 #, c-format msgid "Expected a write-ahead log switchpoint location." msgstr "Attendait un emplacement de bascule de journal de transactions." -#: access/transam/timeline.c:158 +#: access/transam/timeline.c:173 #, c-format msgid "invalid data in history file: %s" msgstr "données invalides dans le fichier historique : %s" -#: access/transam/timeline.c:159 +#: access/transam/timeline.c:174 #, c-format msgid "Timeline IDs must be in increasing sequence." msgstr "Les identifiants timeline doivent être en ordre croissant." -#: access/transam/timeline.c:179 +#: access/transam/timeline.c:194 #, c-format msgid "invalid data in history file \"%s\"" msgstr "données invalides dans le fichier historique « %s »" -#: access/transam/timeline.c:180 +#: access/transam/timeline.c:195 #, c-format msgid "Timeline IDs must be less than child timeline's ID." msgstr "" "Les identifiants timeline doivent être plus petits que les enfants des\n" "identifiants timeline." -#: access/transam/timeline.c:580 +#: access/transam/timeline.c:597 #, c-format msgid "requested timeline %u is not in this server's history" msgstr "la timeline %u requise n'est pas dans l'historique de ce serveur" -#: access/transam/twophase.c:382 +#: access/transam/twophase.c:381 #, c-format msgid "transaction identifier \"%s\" is too long" msgstr "l'identifiant de la transaction « %s » est trop long" -#: access/transam/twophase.c:389 +#: access/transam/twophase.c:388 #, c-format msgid "prepared transactions are disabled" msgstr "les transactions préparées sont désactivées" -#: access/transam/twophase.c:390 +#: access/transam/twophase.c:389 #, c-format msgid "Set max_prepared_transactions to a nonzero value." msgstr "Configure max_prepared_transactions à une valeur différente de zéro." -#: access/transam/twophase.c:409 +#: access/transam/twophase.c:408 #, c-format msgid "transaction identifier \"%s\" is already in use" msgstr "l'identifiant de la transaction « %s » est déjà utilisé" -#: access/transam/twophase.c:418 access/transam/twophase.c:2420 +#: access/transam/twophase.c:417 access/transam/twophase.c:2387 #, c-format msgid "maximum number of prepared transactions reached" msgstr "nombre maximum de transactions préparées obtenu" -#: access/transam/twophase.c:419 access/transam/twophase.c:2421 +#: access/transam/twophase.c:418 access/transam/twophase.c:2388 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "Augmentez max_prepared_transactions (actuellement %d)." -#: access/transam/twophase.c:587 +#: access/transam/twophase.c:584 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "la transaction préparée d'identifiant « %s » est occupée" -#: access/transam/twophase.c:593 +#: access/transam/twophase.c:590 #, c-format msgid "permission denied to finish prepared transaction" msgstr "droit refusé pour terminer la transaction préparée" -#: access/transam/twophase.c:594 +#: access/transam/twophase.c:591 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "Doit être super-utilisateur ou l'utilisateur qui a préparé la transaction." -#: access/transam/twophase.c:605 +#: access/transam/twophase.c:602 #, c-format msgid "prepared transaction belongs to another database" msgstr "la transaction préparée appartient à une autre base de données" -#: access/transam/twophase.c:606 +#: access/transam/twophase.c:603 #, c-format msgid "Connect to the database where the transaction was prepared to finish it." msgstr "" "Connectez-vous à la base de données où la transaction a été préparée pour\n" "la terminer." -#: access/transam/twophase.c:621 +#: access/transam/twophase.c:618 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "la transaction préparée d'identifiant « %s » n'existe pas" -#: access/transam/twophase.c:1115 +#: access/transam/twophase.c:1093 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "" "longueur maximale dépassée pour le fichier de statut de la validation en\n" "deux phase" -#: access/transam/twophase.c:1269 +#: access/transam/twophase.c:1247 #, c-format -msgid "incorrect size of file \"%s\": %zu byte" -msgid_plural "incorrect size of file \"%s\": %zu bytes" -msgstr[0] "taille incorrecte du fichier « %s » : %zu octet" -msgstr[1] "taille incorrecte du fichier « %s » : %zu octets" +msgid "incorrect size of file \"%s\": %lld byte" +msgid_plural "incorrect size of file \"%s\": %lld bytes" +msgstr[0] "taille incorrecte du fichier « %s » : %lld octet" +msgstr[1] "taille incorrecte du fichier « %s » : %lld octets" -#: access/transam/twophase.c:1278 +#: access/transam/twophase.c:1256 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" msgstr "alignement incorrect du décalage CRC pour le fichier « %s »" -#: access/transam/twophase.c:1311 +#: access/transam/twophase.c:1274 +#, c-format +msgid "could not read file \"%s\": read %d of %lld" +msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %lld" + +#: access/transam/twophase.c:1289 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "nombre magique invalide dans le fichier « %s »" -#: access/transam/twophase.c:1317 +#: access/transam/twophase.c:1295 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "taille invalide stockée dans le fichier « %s »" -#: access/transam/twophase.c:1329 +#: access/transam/twophase.c:1307 #, c-format msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "la somme de contrôle CRC calculée ne correspond par à la valeur enregistrée dans le fichier « %s »" -#: access/transam/twophase.c:1395 access/transam/xlog.c:6360 +#: access/transam/twophase.c:1339 access/transam/xlog.c:6634 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Échec lors de l'allocation d'un processeur de lecture de journaux de transactions." -#: access/transam/twophase.c:1401 +#: access/transam/twophase.c:1359 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "n'a pas pu lire le fichier d'état de la validation en deux phases depuis les journaux de transactions à %X/%X" -#: access/transam/twophase.c:1409 +#: access/transam/twophase.c:1366 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "" "le fichier d'état de la validation en deux phases attendu n'est pas présent\n" "dans les journaux de transaction à %X/%X" -#: access/transam/twophase.c:1689 +#: access/transam/twophase.c:1643 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "n'a pas pu recréer le fichier « %s » : %m" -#: access/transam/twophase.c:1816 +#: access/transam/twophase.c:1770 #, c-format msgid "%u two-phase state file was written for a long-running prepared transaction" msgid_plural "%u two-phase state files were written for long-running prepared transactions" msgstr[0] "le fichier d'état de la validation en deux phases %u a été écrit pour une transaction préparée de longue durée" msgstr[1] "les fichiers d'état de la validation en deux phases %u ont été écrits pour des transactions préparées de longue durée" -#: access/transam/twophase.c:2050 +#: access/transam/twophase.c:2004 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "récupération de la transaction préparée %u à partir de la mémoire partagée" -#: access/transam/twophase.c:2141 +#: access/transam/twophase.c:2095 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "suppression du vieux fichier d'état de la validation en deux phases pour la transaction %u" -#: access/transam/twophase.c:2148 +#: access/transam/twophase.c:2102 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "suppression du vieux fichier d'état de la validation en deux phases de la mémoire pour la transaction %u" -#: access/transam/twophase.c:2161 +#: access/transam/twophase.c:2115 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "suppression du futur fichier d'état de la validation en deux phases pour la transaction %u" -#: access/transam/twophase.c:2168 +#: access/transam/twophase.c:2122 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "suppression du futur fichier d'état de la validation en deux phases en mémoire pour la transaction %u" -#: access/transam/twophase.c:2193 +#: access/transam/twophase.c:2147 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "fichier d'état de la validation en deux phases pour la transaction %u corrompu" -#: access/transam/twophase.c:2198 +#: access/transam/twophase.c:2152 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "mémoire d'état de la validation en deux phases pour la transaction %u corrompue" -#: access/transam/varsup.c:127 +#: access/transam/varsup.c:129 #, c-format msgid "database is not accepting commands to avoid wraparound data loss in database \"%s\"" msgstr "" @@ -1565,7 +1859,7 @@ msgstr "" "données à cause de la réinitialisation de l'identifiant de transaction dans\n" "la base de données « %s »" -#: access/transam/varsup.c:129 access/transam/varsup.c:136 +#: access/transam/varsup.c:131 access/transam/varsup.c:138 #, c-format msgid "" "Stop the postmaster and vacuum that database in single-user mode.\n" @@ -1576,7 +1870,7 @@ msgstr "" "Vous pouvez avoir besoin de valider ou d'annuler les anciennes transactions préparées,\n" "ou de supprimer les slots de réplication trop anciens." -#: access/transam/varsup.c:134 +#: access/transam/varsup.c:136 #, c-format msgid "database is not accepting commands to avoid wraparound data loss in database with OID %u" msgstr "" @@ -1584,214 +1878,194 @@ msgstr "" "données à cause de la réinitialisation de l'identifiant de transaction dans\n" "la base de données %u" -#: access/transam/varsup.c:146 access/transam/varsup.c:444 +#: access/transam/varsup.c:148 access/transam/varsup.c:463 #, c-format msgid "database \"%s\" must be vacuumed within %u transactions" msgstr "" "un VACUUM doit être exécuté sur la base de données « %s » dans un maximum de\n" "%u transactions" -#: access/transam/varsup.c:153 access/transam/varsup.c:451 +#: access/transam/varsup.c:155 access/transam/varsup.c:470 #, c-format msgid "database with OID %u must be vacuumed within %u transactions" msgstr "" "un VACUUM doit être exécuté sur la base de données d'OID %u dans un maximum de\n" "%u transactions" -#: access/transam/varsup.c:409 -#, c-format -msgid "transaction ID wrap limit is %u, limited by database with OID %u" -msgstr "" -"la limite de réinitialisation de l'identifiant de transaction est %u,\n" -"limité par la base de données d'OID %u" - -#: access/transam/xact.c:1027 +#: access/transam/xact.c:1045 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "ne peux pas avoir plus de 2^32-2 commandes dans une transaction" -#: access/transam/xact.c:1552 +#: access/transam/xact.c:1582 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "nombre maximum de sous-transactions validées (%d) dépassé" -#: access/transam/xact.c:2377 +#: access/transam/xact.c:2423 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "" "ne peut pas préparer (PREPARE) une transaction qui a travaillé sur des\n" "objets temporaires" -#: access/transam/xact.c:2387 +#: access/transam/xact.c:2433 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "ne peut pas préparer (PREPARE) une transaction qui a exporté des snapshots" -#: access/transam/xact.c:2396 -#, c-format -msgid "cannot PREPARE a transaction that has manipulated logical replication workers" -msgstr "" -"ne peut pas préparer (PREPARE) une transaction qui a travaillé sur des\n" -"workers de réplication logique" - #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3337 +#: access/transam/xact.c:3388 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s ne peut pas être exécuté dans un bloc de transaction" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3347 +#: access/transam/xact.c:3398 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s ne peut pas être exécuté dans une sous-transaction" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3357 +#: access/transam/xact.c:3408 #, c-format msgid "%s cannot be executed from a function" msgstr "%s ne peut pas être exécuté à partir d'une fonction" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3426 access/transam/xact.c:3733 access/transam/xact.c:3812 access/transam/xact.c:3935 access/transam/xact.c:4086 access/transam/xact.c:4155 access/transam/xact.c:4266 +#: access/transam/xact.c:3477 access/transam/xact.c:3783 access/transam/xact.c:3862 access/transam/xact.c:3985 access/transam/xact.c:4136 access/transam/xact.c:4205 access/transam/xact.c:4316 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s peut seulement être utilisé dans des blocs de transaction" -#: access/transam/xact.c:3619 +#: access/transam/xact.c:3669 #, c-format msgid "there is already a transaction in progress" msgstr "une transaction est déjà en cours" -#: access/transam/xact.c:3738 access/transam/xact.c:3817 access/transam/xact.c:3940 +#: access/transam/xact.c:3788 access/transam/xact.c:3867 access/transam/xact.c:3990 #, c-format msgid "there is no transaction in progress" msgstr "aucune transaction en cours" -#: access/transam/xact.c:3828 +#: access/transam/xact.c:3878 #, c-format msgid "cannot commit during a parallel operation" msgstr "ne peut pas valider pendant une opération parallèle" -#: access/transam/xact.c:3951 +#: access/transam/xact.c:4001 #, c-format msgid "cannot abort during a parallel operation" msgstr "ne peut pas annuler pendant une opération en parallèle" -#: access/transam/xact.c:4050 +#: access/transam/xact.c:4100 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "ne peut pas définir de points de sauvegarde lors d'une opération parallèle" -#: access/transam/xact.c:4137 +#: access/transam/xact.c:4187 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "ne peut pas relâcher de points de sauvegarde pendant une opération parallèle" -#: access/transam/xact.c:4147 access/transam/xact.c:4198 access/transam/xact.c:4258 access/transam/xact.c:4307 +#: access/transam/xact.c:4197 access/transam/xact.c:4248 access/transam/xact.c:4308 access/transam/xact.c:4357 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "le point de sauvegarde « %s » n'existe pas" -#: access/transam/xact.c:4204 access/transam/xact.c:4313 +#: access/transam/xact.c:4254 access/transam/xact.c:4363 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "le point de sauvegarde « %s » n'existe pas dans le niveau de point de sauvegarde actuel" -#: access/transam/xact.c:4246 +#: access/transam/xact.c:4296 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "ne peut pas retourner à un point de sauvegarde pendant un opération parallèle" -#: access/transam/xact.c:4374 +#: access/transam/xact.c:4424 #, c-format msgid "cannot start subtransactions during a parallel operation" msgstr "ne peut pas lancer de sous-transactions pendant une opération parallèle" -#: access/transam/xact.c:4442 +#: access/transam/xact.c:4492 #, c-format msgid "cannot commit subtransactions during a parallel operation" msgstr "ne peut pas valider de sous-transactions pendant une opération parallèle" -#: access/transam/xact.c:5080 +#: access/transam/xact.c:5133 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "ne peut pas avoir plus de 2^32-1 sous-transactions dans une transaction" -#: access/transam/xlog.c:2506 +#: access/transam/xlog.c:1831 #, c-format -msgid "could not write to log file %s at offset %u, length %zu: %m" -msgstr "n'a pas pu écrire le fichier de transactions %s au décalage %u, longueur %zu : %m" +msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" +msgstr "" -#: access/transam/xlog.c:2782 +#: access/transam/xlog.c:2592 #, c-format -msgid "updated min recovery point to %X/%X on timeline %u" -msgstr "mise à jour du point minimum de restauration sur %X/%X pour la timeline %u" +msgid "could not write to log file %s at offset %u, length %zu: %m" +msgstr "n'a pas pu écrire le fichier de transactions %s au décalage %u, longueur %zu : %m" -#: access/transam/xlog.c:3863 access/transam/xlogutils.c:703 replication/walsender.c:2446 +#: access/transam/xlog.c:3993 access/transam/xlogutils.c:812 replication/walsender.c:2521 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "le segment demandé du journal de transaction, %s, a déjà été supprimé" -#: access/transam/xlog.c:4105 -#, c-format -msgid "recycled write-ahead log file \"%s\"" -msgstr "recyclage du journal de transactions « %s »" - -#: access/transam/xlog.c:4117 -#, c-format -msgid "removing write-ahead log file \"%s\"" -msgstr "suppression du journal de transactions « %s »" - -#: access/transam/xlog.c:4137 +#: access/transam/xlog.c:4268 #, c-format msgid "could not rename file \"%s\": %m" msgstr "n'a pas pu renommer le fichier « %s » : %m" -#: access/transam/xlog.c:4179 access/transam/xlog.c:4189 +#: access/transam/xlog.c:4310 access/transam/xlog.c:4320 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "le répertoire « %s » requis pour les journaux de transactions n'existe pas" -#: access/transam/xlog.c:4195 +#: access/transam/xlog.c:4326 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "création du répertoire manquant pour les journaux de transactions « %s »" -#: access/transam/xlog.c:4198 +#: access/transam/xlog.c:4329 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "n'a pas pu créer le répertoire « %s » manquant : %m" -#: access/transam/xlog.c:4303 +#: access/transam/xlog.c:4436 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "identifiant timeline %u inattendu dans le journal de transactions %s, décalage %u" -#: access/transam/xlog.c:4431 +#: access/transam/xlog.c:4574 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "la nouvelle timeline %u n'est pas une enfant de la timeline %u du système" -#: access/transam/xlog.c:4445 +#: access/transam/xlog.c:4588 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "" "la nouvelle timeline %u a été créée à partir de la timeline de la base de données système %u\n" "avant le point de restauration courant %X/%X" -#: access/transam/xlog.c:4464 +#: access/transam/xlog.c:4607 #, c-format msgid "new target timeline is %u" msgstr "la nouvelle timeline cible est %u" -#: access/transam/xlog.c:4623 access/transam/xlog.c:4632 access/transam/xlog.c:4656 access/transam/xlog.c:4663 access/transam/xlog.c:4670 access/transam/xlog.c:4675 access/transam/xlog.c:4682 access/transam/xlog.c:4689 access/transam/xlog.c:4696 access/transam/xlog.c:4703 access/transam/xlog.c:4710 access/transam/xlog.c:4717 access/transam/xlog.c:4726 access/transam/xlog.c:4733 access/transam/xlog.c:4742 access/transam/xlog.c:4749 -#: utils/init/miscinit.c:1502 +#: access/transam/xlog.c:4643 +#, c-format +msgid "could not generate secret authorization token" +msgstr "n'a pas pu générer le jeton secret d'autorisation" + +#: access/transam/xlog.c:4802 access/transam/xlog.c:4811 access/transam/xlog.c:4835 access/transam/xlog.c:4842 access/transam/xlog.c:4849 access/transam/xlog.c:4854 access/transam/xlog.c:4861 access/transam/xlog.c:4868 access/transam/xlog.c:4875 access/transam/xlog.c:4882 access/transam/xlog.c:4889 access/transam/xlog.c:4896 access/transam/xlog.c:4905 access/transam/xlog.c:4912 utils/init/miscinit.c:1578 #, c-format msgid "database files are incompatible with server" msgstr "les fichiers de la base de données sont incompatibles avec le serveur" -#: access/transam/xlog.c:4624 +#: access/transam/xlog.c:4803 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), but the server was compiled with PG_CONTROL_VERSION %d (0x%08x)." msgstr "" @@ -1799,168 +2073,149 @@ msgstr "" "%d (0x%08x) alors que le serveur a été compilé avec un PG_CONTROL_VERSION à\n" "%d (0x%08x)." -#: access/transam/xlog.c:4628 +#: access/transam/xlog.c:4807 #, c-format msgid "This could be a problem of mismatched byte ordering. It looks like you need to initdb." msgstr "" "Ceci peut être un problème d'incohérence dans l'ordre des octets.\n" "Il se peut que vous ayez besoin d'initdb." -#: access/transam/xlog.c:4633 +#: access/transam/xlog.c:4812 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d, but the server was compiled with PG_CONTROL_VERSION %d." msgstr "" "Le cluster de base de données a été initialisé avec un PG_CONTROL_VERSION à\n" "%d alors que le serveur a été compilé avec un PG_CONTROL_VERSION à %d." -#: access/transam/xlog.c:4636 access/transam/xlog.c:4660 access/transam/xlog.c:4667 access/transam/xlog.c:4672 +#: access/transam/xlog.c:4815 access/transam/xlog.c:4839 access/transam/xlog.c:4846 access/transam/xlog.c:4851 #, c-format msgid "It looks like you need to initdb." msgstr "Il semble que vous avez besoin d'initdb." -#: access/transam/xlog.c:4647 +#: access/transam/xlog.c:4826 #, c-format msgid "incorrect checksum in control file" msgstr "somme de contrôle incorrecte dans le fichier de contrôle" -#: access/transam/xlog.c:4657 +#: access/transam/xlog.c:4836 #, c-format msgid "The database cluster was initialized with CATALOG_VERSION_NO %d, but the server was compiled with CATALOG_VERSION_NO %d." msgstr "" "Le cluster de base de données a été initialisé avec un CATALOG_VERSION_NO à\n" "%d alors que le serveur a été compilé avec un CATALOG_VERSION_NO à %d." -#: access/transam/xlog.c:4664 +#: access/transam/xlog.c:4843 #, c-format msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." msgstr "" "Le cluster de bases de données a été initialisé avec un MAXALIGN à %d alors\n" "que le serveur a été compilé avec un MAXALIGN à %d." -#: access/transam/xlog.c:4671 +#: access/transam/xlog.c:4850 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "" "Le cluster de bases de données semble utiliser un format différent pour les\n" "nombres à virgule flottante de celui de l'exécutable serveur." -#: access/transam/xlog.c:4676 +#: access/transam/xlog.c:4855 #, c-format msgid "The database cluster was initialized with BLCKSZ %d, but the server was compiled with BLCKSZ %d." msgstr "" "Le cluster de base de données a été initialisé avec un BLCKSZ à %d alors que\n" "le serveur a été compilé avec un BLCKSZ à %d." -#: access/transam/xlog.c:4679 access/transam/xlog.c:4686 access/transam/xlog.c:4693 access/transam/xlog.c:4700 access/transam/xlog.c:4707 access/transam/xlog.c:4714 access/transam/xlog.c:4721 access/transam/xlog.c:4729 access/transam/xlog.c:4736 access/transam/xlog.c:4745 access/transam/xlog.c:4752 +#: access/transam/xlog.c:4858 access/transam/xlog.c:4865 access/transam/xlog.c:4872 access/transam/xlog.c:4879 access/transam/xlog.c:4886 access/transam/xlog.c:4893 access/transam/xlog.c:4900 access/transam/xlog.c:4908 access/transam/xlog.c:4915 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Il semble que vous avez besoin de recompiler ou de relancer initdb." -#: access/transam/xlog.c:4683 +#: access/transam/xlog.c:4862 #, c-format msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." msgstr "" "Le cluster de bases de données a été initialisé avec un RELSEG_SIZE à %d\n" "alors que le serveur a été compilé avec un RELSEG_SIZE à %d." -#: access/transam/xlog.c:4690 +#: access/transam/xlog.c:4869 #, c-format msgid "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was compiled with XLOG_BLCKSZ %d." msgstr "" "Le cluster de base de données a été initialisé avec un XLOG_BLCKSZ à %d\n" "alors que le serveur a été compilé avec un XLOG_BLCKSZ à %d." -#: access/transam/xlog.c:4697 +#: access/transam/xlog.c:4876 #, c-format msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." msgstr "" "Le cluster de bases de données a été initialisé avec un NAMEDATALEN à %d\n" "alors que le serveur a été compilé avec un NAMEDATALEN à %d." -#: access/transam/xlog.c:4704 +#: access/transam/xlog.c:4883 #, c-format msgid "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server was compiled with INDEX_MAX_KEYS %d." msgstr "" "Le groupe de bases de données a été initialisé avec un INDEX_MAX_KEYS à %d\n" "alors que le serveur a été compilé avec un INDEX_MAX_KEYS à %d." -#: access/transam/xlog.c:4711 +#: access/transam/xlog.c:4890 #, c-format msgid "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the server was compiled with TOAST_MAX_CHUNK_SIZE %d." msgstr "" "Le cluster de bases de données a été initialisé avec un TOAST_MAX_CHUNK_SIZE\n" "à %d alors que le serveur a été compilé avec un TOAST_MAX_CHUNK_SIZE à %d." -#: access/transam/xlog.c:4718 +#: access/transam/xlog.c:4897 #, c-format msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." msgstr "" "Le cluster de base de données a été initialisé avec un LOBLKSIZE à %d alors que\n" "le serveur a été compilé avec un LOBLKSIZE à %d." -#: access/transam/xlog.c:4727 -#, c-format -msgid "The database cluster was initialized without USE_FLOAT4_BYVAL but the server was compiled with USE_FLOAT4_BYVAL." -msgstr "" -"Le cluster de base de données a été initialisé sans USE_FLOAT4_BYVAL\n" -"alors que le serveur a été compilé avec USE_FLOAT4_BYVAL." - -#: access/transam/xlog.c:4734 -#, c-format -msgid "The database cluster was initialized with USE_FLOAT4_BYVAL but the server was compiled without USE_FLOAT4_BYVAL." -msgstr "" -"Le cluster de base de données a été initialisé avec USE_FLOAT4_BYVAL\n" -"alors que le serveur a été compilé sans USE_FLOAT4_BYVAL." - -#: access/transam/xlog.c:4743 +#: access/transam/xlog.c:4906 #, c-format msgid "The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL." msgstr "" "Le cluster de base de données a été initialisé sans USE_FLOAT8_BYVAL\n" "alors que le serveur a été compilé avec USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4750 +#: access/transam/xlog.c:4913 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "" "Le cluster de base de données a été initialisé avec USE_FLOAT8_BYVAL\n" "alors que le serveur a été compilé sans USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4759 +#: access/transam/xlog.c:4922 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octet" msgstr[1] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octets" -#: access/transam/xlog.c:4771 +#: access/transam/xlog.c:4934 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "« min_wal_size » doit être au moins le double de « wal_segment_size »" -#: access/transam/xlog.c:4775 +#: access/transam/xlog.c:4938 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "« max_wal_size » doit être au moins le double de « wal_segment_size »" -#: access/transam/xlog.c:5127 -#, c-format -msgid "could not generate secret authorization token" -msgstr "n'a pas pu générer le jeton secret d'autorisation" - -#: access/transam/xlog.c:5217 +#: access/transam/xlog.c:5372 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "n'a pas pu écrire le « bootstrap » du journal des transactions : %m" -#: access/transam/xlog.c:5225 +#: access/transam/xlog.c:5380 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "" "n'a pas pu synchroniser sur disque (fsync) le « bootstrap » du journal des\n" "transactions : %m" -#: access/transam/xlog.c:5231 +#: access/transam/xlog.c:5386 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "n'a pas pu fermer le « bootstrap » du journal des transactions : %m" @@ -1968,224 +2223,266 @@ msgstr "n'a pas pu fermer le « bootstrap » du journal des transactions : %m" # /* # * Check for old recovery API file: recovery.conf # */ -#: access/transam/xlog.c:5310 +#: access/transam/xlog.c:5447 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "utiliser le fichier de commande de la restauration « %s » n'est plus supporté" -#: access/transam/xlog.c:5375 +#: access/transam/xlog.c:5512 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "le mode de restauration n'est pas supporté pour les serveurs mono-utilisateur" -#: access/transam/xlog.c:5392 +#: access/transam/xlog.c:5529 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "ni primary_conninfo ni restore_command n'est spécifié" -#: access/transam/xlog.c:5393 +#: access/transam/xlog.c:5530 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "" "Le serveur de la base de données va régulièrement interroger le sous-répertoire\n" "pg_wal pour vérifier les fichiers placés ici." -#: access/transam/xlog.c:5401 +#: access/transam/xlog.c:5538 #, c-format msgid "must specify restore_command when standby mode is not enabled" -msgstr "doir spécifier une restore_command quand standby_mode n'est pas activé" +msgstr "doit spécifier une restore_command quand standby_mode n'est pas activé" -#: access/transam/xlog.c:5439 +#: access/transam/xlog.c:5576 #, c-format msgid "recovery target timeline %u does not exist" msgstr "le timeline cible, %u, de la restauration n'existe pas" -#: access/transam/xlog.c:5554 +#: access/transam/xlog.c:5698 #, c-format msgid "archive recovery complete" msgstr "restauration de l'archive terminée" -#: access/transam/xlog.c:5620 access/transam/xlog.c:5893 +#: access/transam/xlog.c:5764 access/transam/xlog.c:6035 #, c-format msgid "recovery stopping after reaching consistency" msgstr "arrêt de la restauration après avoir atteint le point de cohérence" -#: access/transam/xlog.c:5641 +#: access/transam/xlog.c:5785 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "arrêt de la restauration avant l'emplacement WAL (LSN) « %X/%X »" -#: access/transam/xlog.c:5727 +#: access/transam/xlog.c:5870 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "arrêt de la restauration avant validation de la transaction %u, %s" -#: access/transam/xlog.c:5734 +#: access/transam/xlog.c:5877 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "arrêt de la restauration avant annulation de la transaction %u, %s" -#: access/transam/xlog.c:5787 +#: access/transam/xlog.c:5930 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "restauration en arrêt au point de restauration « %s », heure %s" -#: access/transam/xlog.c:5805 +#: access/transam/xlog.c:5948 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "arrêt de la restauration après l'emplacement WAL (LSN) « %X/%X »" -#: access/transam/xlog.c:5873 +#: access/transam/xlog.c:6015 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "arrêt de la restauration après validation de la transaction %u, %s" -#: access/transam/xlog.c:5881 +#: access/transam/xlog.c:6023 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "arrêt de la restauration après annulation de la transaction %u, %s" -#: access/transam/xlog.c:5921 +#: access/transam/xlog.c:6068 +#, c-format +msgid "pausing at the end of recovery" +msgstr "pause à la fin de la restauration" + +#: access/transam/xlog.c:6069 +#, c-format +msgid "Execute pg_wal_replay_resume() to promote." +msgstr "Exécuter pg_wal_replay_resume() pour promouvoir." + +#: access/transam/xlog.c:6072 access/transam/xlog.c:6345 #, c-format msgid "recovery has paused" msgstr "restauration en pause" -#: access/transam/xlog.c:5922 +#: access/transam/xlog.c:6073 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Exécuter pg_wal_replay_resume() pour continuer." -#: access/transam/xlog.c:6130 -#, c-format -msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" +#: access/transam/xlog.c:6336 +#, fuzzy, c-format +#| msgid "hot standby is not possible because wal_level was not set to \"replica\" or higher on the master server" +msgid "hot standby is not possible because of insufficient parameter settings" +msgstr "" +"les connexions en lecture seules ne sont pas possibles parce que le paramètre wal_level\n" +"n'a pas été positionné à « replica » ou plus sur le serveur maître" + +#: access/transam/xlog.c:6337 access/transam/xlog.c:6360 access/transam/xlog.c:6390 +#, fuzzy, c-format +#| msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" +msgid "%s = %d is a lower setting than on the primary server, where its value was %d." msgstr "" "les connexions en restauration ne sont pas possibles car %s = %d est un\n" "paramètrage plus bas que celui du serveur maître des journaux de transactions\n" "(la valeur était %d)" -#: access/transam/xlog.c:6156 +#: access/transam/xlog.c:6346 #, c-format -msgid "WAL was generated with wal_level=minimal, data may be missing" -msgstr "le journal de transactions a été généré avec le paramètre wal_level=minimal, des données peuvent manquer" +msgid "If recovery is unpaused, the server will shut down." +msgstr "" -#: access/transam/xlog.c:6157 +#: access/transam/xlog.c:6347 #, c-format -msgid "This happens if you temporarily set wal_level=minimal without taking a new base backup." +msgid "You can then restart the server after making the necessary configuration changes." msgstr "" -"Ceci peut arriver si vous configurez temporairement wal_level à minimal sans avoir\n" -"pris une nouvelle sauvegarde de base." -#: access/transam/xlog.c:6168 +#: access/transam/xlog.c:6358 +#, c-format +msgid "promotion is not possible because of insufficient parameter settings" +msgstr "la promotion n'est pas possible à cause d'une configuration insuffisante des paramètres" + +#: access/transam/xlog.c:6364 #, c-format -msgid "hot standby is not possible because wal_level was not set to \"replica\" or higher on the master server" +msgid "Restart the server after making the necessary configuration changes." +msgstr "Redémarre le serveur après avoir effectuer les changements nécessaires de configuration." + +#: access/transam/xlog.c:6388 +#, c-format +msgid "recovery aborted because of insufficient parameter settings" msgstr "" -"les connexions en lecture seules ne sont pas possibles parce que le paramètre wal_level\n" -"n'a pas été positionné à « replica » ou plus sur le serveur maître" -#: access/transam/xlog.c:6169 +#: access/transam/xlog.c:6394 #, c-format -msgid "Either set wal_level to \"replica\" on the master, or turn off hot_standby here." +msgid "You can restart the server after making the necessary configuration changes." msgstr "" -"Vous devez soit positionner le paramètre wal_level à « replica » sur le maître,\n" -"soit désactiver le hot_standby ici." -#: access/transam/xlog.c:6233 +#: access/transam/xlog.c:6416 +#, fuzzy, c-format +#| msgid "WAL was generated with wal_level=minimal, data may be missing" +msgid "WAL was generated with wal_level=minimal, cannot continue recovering" +msgstr "le journal de transactions a été généré avec le paramètre wal_level=minimal, des données peuvent manquer" + +#: access/transam/xlog.c:6417 +#, fuzzy, c-format +#| msgid "This happens if you temporarily set wal_level=minimal without taking a new base backup." +msgid "This happens if you temporarily set wal_level=minimal on the server." +msgstr "" +"Ceci peut arriver si vous configurez temporairement wal_level à minimal sans avoir\n" +"pris une nouvelle sauvegarde de base." + +#: access/transam/xlog.c:6418 #, c-format -msgid "control file contains invalid data" -msgstr "le fichier de contrôle contient des données invalides" +msgid "Use a backup taken after setting wal_level to higher than minimal." +msgstr "" -#: access/transam/xlog.c:6239 +#: access/transam/xlog.c:6486 +#, c-format +msgid "control file contains invalid checkpoint location" +msgstr "le fichier de contrôle contient un emplacement de checkpoint invalide" + +#: access/transam/xlog.c:6497 #, c-format msgid "database system was shut down at %s" msgstr "le système de bases de données a été arrêté à %s" -#: access/transam/xlog.c:6244 +#: access/transam/xlog.c:6503 #, c-format msgid "database system was shut down in recovery at %s" msgstr "le système de bases de données a été arrêté pendant la restauration à %s" -#: access/transam/xlog.c:6248 +#: access/transam/xlog.c:6509 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "le système de bases de données a été interrompu ; dernier lancement connu à %s" -#: access/transam/xlog.c:6252 +#: access/transam/xlog.c:6515 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "le système de bases de données a été interrompu lors d'une restauration à %s" -#: access/transam/xlog.c:6254 +#: access/transam/xlog.c:6517 #, c-format msgid "This probably means that some data is corrupted and you will have to use the last backup for recovery." msgstr "" "Ceci signifie probablement que des données ont été corrompues et que vous\n" "devrez utiliser la dernière sauvegarde pour la restauration." -#: access/transam/xlog.c:6258 +#: access/transam/xlog.c:6523 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "" "le système de bases de données a été interrompu lors d'une récupération à %s\n" "(moment de la journalisation)" -#: access/transam/xlog.c:6260 +#: access/transam/xlog.c:6525 #, c-format msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." msgstr "" "Si c'est arrivé plus d'une fois, des données ont pu être corrompues et vous\n" "pourriez avoir besoin de choisir une cible de récupération antérieure." -#: access/transam/xlog.c:6264 +#: access/transam/xlog.c:6531 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "le système de bases de données a été interrompu ; dernier lancement connu à %s" -#: access/transam/xlog.c:6320 +#: access/transam/xlog.c:6537 +#, c-format +msgid "control file contains invalid database cluster state" +msgstr "le fichier de contrôle contient un état invalide de l'instance" + +#: access/transam/xlog.c:6594 #, c-format msgid "entering standby mode" msgstr "entre en mode standby" -#: access/transam/xlog.c:6323 +#: access/transam/xlog.c:6597 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "début de la restauration de l'archive au XID %u" -#: access/transam/xlog.c:6327 +#: access/transam/xlog.c:6601 #, c-format msgid "starting point-in-time recovery to %s" msgstr "début de la restauration de l'archive à %s" -#: access/transam/xlog.c:6331 +#: access/transam/xlog.c:6605 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "début de la restauration PITR à « %s »" -#: access/transam/xlog.c:6335 +#: access/transam/xlog.c:6609 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "début de la restauration PITR à l'emplacement WAL (LSN) « %X/%X »" -#: access/transam/xlog.c:6340 +#: access/transam/xlog.c:6613 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "début de la restauration de l'archive jusqu'au point de cohérence le plus proche" -#: access/transam/xlog.c:6343 +#: access/transam/xlog.c:6616 #, c-format msgid "starting archive recovery" msgstr "début de la restauration de l'archive" -#: access/transam/xlog.c:6397 access/transam/xlog.c:6529 -#, c-format -msgid "checkpoint record is at %X/%X" -msgstr "l'enregistrement du point de vérification est à %X/%X" - -#: access/transam/xlog.c:6411 +#: access/transam/xlog.c:6692 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "n'a pas pu localiser l'enregistrement redo référencé par le point de vérification" -#: access/transam/xlog.c:6412 access/transam/xlog.c:6422 +#: access/transam/xlog.c:6693 access/transam/xlog.c:6703 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2196,133 +2493,133 @@ msgstr "" "Si vous ne restaurez pas depuis une sauvegarde, essayez de supprimer « %s/backup_label ».\n" "Attention : supprimer « %s/backup_label » lors d'une restauration de sauvegarde entraînera la corruption de l'instance." -#: access/transam/xlog.c:6421 +#: access/transam/xlog.c:6702 #, c-format msgid "could not locate required checkpoint record" msgstr "n'a pas pu localiser l'enregistrement d'un point de vérification requis" -#: access/transam/xlog.c:6450 commands/tablespace.c:655 +#: access/transam/xlog.c:6731 commands/tablespace.c:666 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "n'a pas pu créer le lien symbolique « %s » : %m" -#: access/transam/xlog.c:6482 access/transam/xlog.c:6488 +#: access/transam/xlog.c:6763 access/transam/xlog.c:6769 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ignore le fichier « %s » car le fichier « %s » n'existe pas" -#: access/transam/xlog.c:6484 access/transam/xlog.c:11483 +#: access/transam/xlog.c:6765 access/transam/xlog.c:12085 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Le fichier « %s » a été renommé en « %s »." -#: access/transam/xlog.c:6490 +#: access/transam/xlog.c:6771 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "N'a pas pu renommer le fichier « %s » en « %s » : %m." -#: access/transam/xlog.c:6541 +#: access/transam/xlog.c:6822 #, c-format msgid "could not locate a valid checkpoint record" msgstr "n'a pas pu localiser un enregistrement d'un point de vérification valide" -#: access/transam/xlog.c:6579 +#: access/transam/xlog.c:6860 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "la timeline requise %u n'est pas un fils de l'historique de ce serveur" -#: access/transam/xlog.c:6581 +#: access/transam/xlog.c:6862 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "Le dernier checkpoint est à %X/%X sur la timeline %u, mais dans l'historique de la timeline demandée, le serveur est sorti de cette timeline à %X/%X." -#: access/transam/xlog.c:6597 +#: access/transam/xlog.c:6876 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "la timeline requise, %u, ne contient pas le point de restauration minimum (%X/%X) sur la timeline %u" -#: access/transam/xlog.c:6628 +#: access/transam/xlog.c:6906 #, c-format msgid "invalid next transaction ID" msgstr "prochain ID de transaction invalide" -#: access/transam/xlog.c:6722 +#: access/transam/xlog.c:7007 #, c-format msgid "invalid redo in checkpoint record" msgstr "ré-exécution invalide dans l'enregistrement du point de vérification" -#: access/transam/xlog.c:6733 +#: access/transam/xlog.c:7018 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "enregistrement de ré-exécution invalide dans le point de vérification d'arrêt" -#: access/transam/xlog.c:6761 +#: access/transam/xlog.c:7052 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "" "le système de bases de données n'a pas été arrêté proprement ; restauration\n" "automatique en cours" -#: access/transam/xlog.c:6765 +#: access/transam/xlog.c:7056 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "la restauration après crash commence par la timeline %u et a la timeline %u en cible" -#: access/transam/xlog.c:6808 +#: access/transam/xlog.c:7103 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label contient des données incohérentes avec le fichier de contrôle" -#: access/transam/xlog.c:6809 +#: access/transam/xlog.c:7104 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "" "Ceci signifie que la sauvegarde a été corrompue et que vous devrez utiliser\n" "la dernière sauvegarde pour la restauration." -#: access/transam/xlog.c:6900 -#, c-format -msgid "initializing for hot standby" -msgstr "initialisation pour « Hot Standby »" - -#: access/transam/xlog.c:7032 +#: access/transam/xlog.c:7331 #, c-format msgid "redo starts at %X/%X" msgstr "la ré-exécution commence à %X/%X" -#: access/transam/xlog.c:7256 +#: access/transam/xlog.c:7572 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "" "le point d'arrêt de la restauration demandée se trouve avant le point\n" "cohérent de restauration" -#: access/transam/xlog.c:7294 +#: access/transam/xlog.c:7610 #, c-format -msgid "redo done at %X/%X" -msgstr "ré-exécution faite à %X/%X" +msgid "redo done at %X/%X system usage: %s" +msgstr "rejeu exécuté à %X/%X utilisation système : %s" -#: access/transam/xlog.c:7299 +#: access/transam/xlog.c:7616 #, c-format msgid "last completed transaction was at log time %s" msgstr "la dernière transaction a eu lieu à %s (moment de la journalisation)" -#: access/transam/xlog.c:7308 +#: access/transam/xlog.c:7625 #, c-format msgid "redo is not required" msgstr "la ré-exécution n'est pas nécessaire" -#: access/transam/xlog.c:7383 access/transam/xlog.c:7387 +#: access/transam/xlog.c:7637 +#, c-format +msgid "recovery ended before configured recovery target was reached" +msgstr "la restauration s'est terminée avant d'avoir atteint la cible configurée pour la restauration" + +#: access/transam/xlog.c:7716 access/transam/xlog.c:7720 #, c-format msgid "WAL ends before end of online backup" msgstr "le journal de transactions se termine avant la fin de la sauvegarde de base" -#: access/transam/xlog.c:7384 +#: access/transam/xlog.c:7717 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Tous les journaux de transactions générés pendant la sauvegarde en ligne doivent être disponibles pour la restauration." -#: access/transam/xlog.c:7388 +#: access/transam/xlog.c:7721 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "" @@ -2330,180 +2627,187 @@ msgstr "" "pg_stop_backup() et tous les journaux de transactions générés entre les deux\n" "doivent être disponibles pour la restauration." -#: access/transam/xlog.c:7391 +#: access/transam/xlog.c:7724 #, c-format msgid "WAL ends before consistent recovery point" msgstr "Le journal de transaction se termine avant un point de restauration cohérent" -#: access/transam/xlog.c:7426 +#: access/transam/xlog.c:7759 #, c-format msgid "selected new timeline ID: %u" msgstr "identifiant d'un timeline nouvellement sélectionné : %u" -#: access/transam/xlog.c:7874 +#: access/transam/xlog.c:8203 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "état de restauration cohérent atteint à %X/%X" -#: access/transam/xlog.c:8066 +#: access/transam/xlog.c:8412 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "lien du point de vérification primaire invalide dans le fichier de contrôle" -#: access/transam/xlog.c:8070 +#: access/transam/xlog.c:8416 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "lien du point de vérification invalide dans le fichier backup_label" -#: access/transam/xlog.c:8087 +#: access/transam/xlog.c:8434 #, c-format msgid "invalid primary checkpoint record" msgstr "enregistrement du point de vérification primaire invalide" -#: access/transam/xlog.c:8091 +#: access/transam/xlog.c:8438 #, c-format msgid "invalid checkpoint record" msgstr "enregistrement du point de vérification invalide" -#: access/transam/xlog.c:8102 +#: access/transam/xlog.c:8449 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "identifiant du gestionnaire de ressource invalide dans l'enregistrement primaire du point de vérification" -#: access/transam/xlog.c:8106 +#: access/transam/xlog.c:8453 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "identifiant du gestionnaire de ressource invalide dans l'enregistrement du point de vérification" -#: access/transam/xlog.c:8119 +#: access/transam/xlog.c:8466 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "xl_info invalide dans l'enregistrement du point de vérification primaire" -#: access/transam/xlog.c:8123 +#: access/transam/xlog.c:8470 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "xl_info invalide dans l'enregistrement du point de vérification" -#: access/transam/xlog.c:8134 +#: access/transam/xlog.c:8481 #, c-format msgid "invalid length of primary checkpoint record" msgstr "longueur invalide de l'enregistrement primaire du point de vérification" -#: access/transam/xlog.c:8138 +#: access/transam/xlog.c:8485 #, c-format msgid "invalid length of checkpoint record" msgstr "longueur invalide de l'enregistrement du point de vérification" -#: access/transam/xlog.c:8318 +#: access/transam/xlog.c:8666 #, c-format msgid "shutting down" msgstr "arrêt en cours" -#: access/transam/xlog.c:8638 +#. translator: the placeholders show checkpoint options +#: access/transam/xlog.c:8705 #, c-format -msgid "checkpoint skipped because system is idle" -msgstr "checkpoint ignoré car le système est inactif" +msgid "restartpoint starting:%s%s%s%s%s%s%s%s" +msgstr "" -#: access/transam/xlog.c:8838 +#. translator: the placeholders show checkpoint options +#: access/transam/xlog.c:8717 #, c-format -msgid "concurrent write-ahead log activity while database system is shutting down" +msgid "checkpoint starting:%s%s%s%s%s%s%s%s" msgstr "" -"activité en cours du journal de transactions alors que le système de bases\n" -"de données est en cours d'arrêt" -#: access/transam/xlog.c:9094 +#: access/transam/xlog.c:8777 #, c-format -msgid "skipping restartpoint, recovery has already ended" -msgstr "restartpoint ignoré, la récupération est déjà terminée" +msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" +msgstr "" -#: access/transam/xlog.c:9117 +#: access/transam/xlog.c:8797 #, c-format -msgid "skipping restartpoint, already performed at %X/%X" -msgstr "ignore le point de redémarrage, déjà réalisé à %X/%X" +msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" +msgstr "" -#: access/transam/xlog.c:9284 +#: access/transam/xlog.c:9230 +#, c-format +msgid "concurrent write-ahead log activity while database system is shutting down" +msgstr "" +"activité en cours du journal de transactions alors que le système de bases\n" +"de données est en cours d'arrêt" + +#: access/transam/xlog.c:9686 #, c-format msgid "recovery restart point at %X/%X" msgstr "la ré-exécution en restauration commence à %X/%X" -#: access/transam/xlog.c:9286 +#: access/transam/xlog.c:9688 #, c-format msgid "Last completed transaction was at log time %s." msgstr "La dernière transaction a eu lieu à %s (moment de la journalisation)." -#: access/transam/xlog.c:9420 +#: access/transam/xlog.c:9928 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "point de restauration « %s » créé à %X/%X" -#: access/transam/xlog.c:9561 +#: access/transam/xlog.c:10073 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "identifiant de timeline précédent %u inattendu (identifiant de la timeline courante %u) dans l'enregistrement du point de vérification" -#: access/transam/xlog.c:9570 +#: access/transam/xlog.c:10082 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "" "identifiant timeline %u inattendu (après %u) dans l'enregistrement du point\n" "de vérification" -#: access/transam/xlog.c:9586 +#: access/transam/xlog.c:10098 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "identifiant timeline %u inattendu dans l'enregistrement du checkpoint, avant d'atteindre le point de restauration minimum %X/%X sur la timeline %u" -#: access/transam/xlog.c:9662 +#: access/transam/xlog.c:10173 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "la sauvegarde en ligne a été annulée, la restauration ne peut pas continuer" -#: access/transam/xlog.c:9716 access/transam/xlog.c:9770 access/transam/xlog.c:9793 +#: access/transam/xlog.c:10229 access/transam/xlog.c:10285 access/transam/xlog.c:10308 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "" "identifiant timeline %u inattendu (devrait être %u) dans l'enregistrement du\n" "point de vérification" -#: access/transam/xlog.c:10113 +#: access/transam/xlog.c:10657 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier %s : %m" -#: access/transam/xlog.c:10122 +#: access/transam/xlog.c:10663 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fdatasync) le fichier « %s » : %m" -#: access/transam/xlog.c:10215 access/transam/xlog.c:10744 access/transam/xlogfuncs.c:290 access/transam/xlogfuncs.c:317 access/transam/xlogfuncs.c:356 access/transam/xlogfuncs.c:377 access/transam/xlogfuncs.c:398 +#: access/transam/xlog.c:10774 access/transam/xlog.c:11303 access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 access/transam/xlogfuncs.c:383 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "les fonctions de contrôle des journaux de transactions ne peuvent pas être exécutées lors de la restauration." -#: access/transam/xlog.c:10224 access/transam/xlog.c:10753 +#: access/transam/xlog.c:10783 access/transam/xlog.c:11312 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "Le niveau de journalisation n'est pas suffisant pour faire une sauvegarde en ligne" -#: access/transam/xlog.c:10225 access/transam/xlog.c:10754 access/transam/xlogfuncs.c:323 +#: access/transam/xlog.c:10784 access/transam/xlog.c:11313 access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "" "wal_level doit être configuré à « replica » ou « logical »\n" "au démarrage du serveur." -#: access/transam/xlog.c:10230 +#: access/transam/xlog.c:10789 #, c-format msgid "backup label too long (max %d bytes)" msgstr "label de sauvegarde trop long (%d octets maximum)" -#: access/transam/xlog.c:10267 access/transam/xlog.c:10543 access/transam/xlog.c:10581 +#: access/transam/xlog.c:10826 access/transam/xlog.c:11102 access/transam/xlog.c:11140 #, c-format msgid "a backup is already in progress" msgstr "une sauvegarde est déjà en cours" -#: access/transam/xlog.c:10268 +#: access/transam/xlog.c:10827 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Exécutez pg_stop_backup() et tentez de nouveau." @@ -2513,180 +2817,181 @@ msgstr "Exécutez pg_stop_backup() et tentez de nouveau." # * (i.e., since last restartpoint used as backup starting # * checkpoint) contain full-page writes. # */ -#: access/transam/xlog.c:10364 +#: access/transam/xlog.c:10923 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "Un journal de transaction généré avec full_page_writes=off a été rejoué depuis le dernier point de reprise (restartpoint)" -#: access/transam/xlog.c:10366 access/transam/xlog.c:10949 -#, c-format -msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the master, and then try an online backup again." +#: access/transam/xlog.c:10925 access/transam/xlog.c:11508 +#, fuzzy, c-format +#| msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the master, and then try an online backup again." +msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the primary, and then try an online backup again." msgstr "" "Cela signifie que la sauvegarde en cours de réalisation sur l'esclave est\n" "corrompue et ne doit pas être utilisée. Activez full_page_writes et lancez\n" "CHECKPOINT sur le maître, puis recommencez la sauvegarde." -#: access/transam/xlog.c:10441 replication/basebackup.c:1251 utils/adt/misc.c:329 +#: access/transam/xlog.c:11001 replication/basebackup.c:1433 utils/adt/misc.c:345 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "la cible du lien symbolique « %s » est trop long" -#: access/transam/xlog.c:10493 commands/tablespace.c:403 commands/tablespace.c:567 replication/basebackup.c:1266 utils/adt/misc.c:337 +#: access/transam/xlog.c:11051 commands/tablespace.c:402 commands/tablespace.c:578 replication/basebackup.c:1448 utils/adt/misc.c:353 #, c-format msgid "tablespaces are not supported on this platform" msgstr "les tablespaces ne sont pas supportés sur cette plateforme" -#: access/transam/xlog.c:10544 access/transam/xlog.c:10582 +#: access/transam/xlog.c:11103 access/transam/xlog.c:11141 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "" "Si vous êtes certain qu'aucune sauvegarde n'est en cours, supprimez le\n" "fichier « %s » et recommencez de nouveau." -#: access/transam/xlog.c:10769 +#: access/transam/xlog.c:11328 #, c-format msgid "exclusive backup not in progress" msgstr "une sauvegarde exclusive n'est pas en cours" -#: access/transam/xlog.c:10796 +#: access/transam/xlog.c:11355 #, c-format msgid "a backup is not in progress" msgstr "aucune sauvegarde n'est en cours" -#: access/transam/xlog.c:10882 access/transam/xlog.c:10895 access/transam/xlog.c:11256 access/transam/xlog.c:11262 access/transam/xlog.c:11310 access/transam/xlog.c:11383 access/transam/xlogfuncs.c:693 +#: access/transam/xlog.c:11441 access/transam/xlog.c:11454 access/transam/xlog.c:11843 access/transam/xlog.c:11849 access/transam/xlog.c:11897 access/transam/xlog.c:11977 access/transam/xlog.c:12001 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "données invalides dans le fichier « %s »" -#: access/transam/xlog.c:10899 replication/basebackup.c:1103 +#: access/transam/xlog.c:11458 replication/basebackup.c:1281 #, c-format msgid "the standby was promoted during online backup" msgstr "le standby a été promu lors de la sauvegarde en ligne" -#: access/transam/xlog.c:10900 replication/basebackup.c:1104 +#: access/transam/xlog.c:11459 replication/basebackup.c:1282 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "" "Cela signifie que la sauvegarde en cours de réalisation est corrompue et ne\n" "doit pas être utilisée. Recommencez la sauvegarde." -#: access/transam/xlog.c:10947 +#: access/transam/xlog.c:11506 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "Un journal de transaction généré avec full_page_writes=off a été rejoué pendant la sauvegarde en ligne" -#: access/transam/xlog.c:11067 +#: access/transam/xlog.c:11626 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "backup de base terminé, en attente de l'archivage des journaux de transactions nécessaires" -#: access/transam/xlog.c:11077 +#: access/transam/xlog.c:11638 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "toujours en attente de la fin de l'archivage de tous les segments de journaux de transactions requis (%d secondes passées)" -#: access/transam/xlog.c:11079 +#: access/transam/xlog.c:11640 #, c-format msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." msgstr "Vérifiez que votre archive_command s'exécute correctement. Vous pouvez annuler cette sauvegarde sans souci, mais elle ne sera pas utilisable sans tous les segments WAL." -#: access/transam/xlog.c:11086 +#: access/transam/xlog.c:11647 #, c-format msgid "all required WAL segments have been archived" msgstr "tous les journaux de transactions requis ont été archivés" -#: access/transam/xlog.c:11090 +#: access/transam/xlog.c:11651 #, c-format msgid "WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup" msgstr "L'archivage des journaux de transactions n'est pas activé ; vous devez vous assurer que tous les des journaux de transactions requis sont copiés par d'autres moyens pour terminer la sauvegarde" -#: access/transam/xlog.c:11293 +#: access/transam/xlog.c:11704 #, c-format -msgid "backup time %s in file \"%s\"" -msgstr "heure de sauvegarde %s dans le fichier « %s »" - -#: access/transam/xlog.c:11298 -#, c-format -msgid "backup label %s in file \"%s\"" -msgstr "label de sauvegarde %s dans le fichier « %s »" +msgid "aborting backup due to backend exiting before pg_stop_backup was called" +msgstr "annulation de la sauvegarde due à la déconnexion du processus serveur avant que pg_stop_backup ne soit appelé" -#: access/transam/xlog.c:11311 +#: access/transam/xlog.c:11898 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "L'identifiant de timeline parsé est %u, mais %u était attendu." -#: access/transam/xlog.c:11315 -#, c-format -msgid "backup timeline %u in file \"%s\"" -msgstr "timeline de sauvegarde %u dans le fichier « %s »" - #. translator: %s is a WAL record description -#: access/transam/xlog.c:11423 +#: access/transam/xlog.c:12026 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "rejeu des WAL à %X/%X pour %s" -#: access/transam/xlog.c:11472 +#: access/transam/xlog.c:12074 #, c-format msgid "online backup mode was not canceled" msgstr "le mode de sauvegarde en ligne n'a pas été annulé" -#: access/transam/xlog.c:11473 +#: access/transam/xlog.c:12075 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "Le fichier « %s » n'a pas pu être renommé en « %s » : %m." -#: access/transam/xlog.c:11482 access/transam/xlog.c:11494 access/transam/xlog.c:11504 +#: access/transam/xlog.c:12084 access/transam/xlog.c:12096 access/transam/xlog.c:12106 #, c-format msgid "online backup mode canceled" msgstr "mode de sauvegarde en ligne annulé" -#: access/transam/xlog.c:11495 +#: access/transam/xlog.c:12097 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "Les fichiers « %s » et « %s » sont renommés respectivement « %s » et « %s »." -#: access/transam/xlog.c:11505 +#: access/transam/xlog.c:12107 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "Le fichier « %s » a été renommé en « %s », mais le fichier « %s » n'a pas pu être renommé en « %s » : %m." -#: access/transam/xlog.c:11638 +#: access/transam/xlog.c:12246 access/transam/xlogutils.c:986 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "n'a pas pu lire le journal de transactions %s, décalage %u : %m" -#: access/transam/xlog.c:11644 replication/walsender.c:2490 +#: access/transam/xlog.c:12252 access/transam/xlogutils.c:993 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "n'a pas pu lire à partir du segment %s du journal de transactions, décalage %u: lu %d sur %zu" -#: access/transam/xlog.c:12177 +#: access/transam/xlog.c:12793 +#, c-format +msgid "WAL receiver process shutdown requested" +msgstr "le processus wal receiver a reçu une demande d'arrêt" + +#: access/transam/xlog.c:12880 #, c-format msgid "received promote request" msgstr "a reçu une demande de promotion" -#: access/transam/xlog.c:12190 +#: access/transam/xlog.c:12893 #, c-format msgid "promote trigger file found: %s" msgstr "fichier trigger de promotion trouvé : %s" -#: access/transam/xlog.c:12199 +#: access/transam/xlog.c:12901 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "n'a pas pu récupérer les propriétés du fichier trigger pour la promotion « %s » : %m" -#: access/transam/xlogarchive.c:243 +#: access/transam/xlogarchive.c:205 #, c-format -msgid "archive file \"%s\" has wrong size: %lu instead of %lu" -msgstr "le fichier d'archive « %s » a la mauvaise taille : %lu au lieu de %lu" +msgid "archive file \"%s\" has wrong size: %lld instead of %lld" +msgstr "le fichier d'archive « %s » a la mauvaise taille : %lld au lieu de %lld" -#: access/transam/xlogarchive.c:252 +#: access/transam/xlogarchive.c:214 #, c-format msgid "restored log file \"%s\" from archive" msgstr "restauration du journal de transactions « %s » à partir de l'archive" -#: access/transam/xlogarchive.c:297 +#: access/transam/xlogarchive.c:228 +#, c-format +msgid "restore_command returned a zero exit status, but stat() failed." +msgstr "" + +#: access/transam/xlogarchive.c:260 #, c-format msgid "could not restore file \"%s\" from archive: %s" msgstr "n'a pas pu restaurer le fichier « %s » à partir de l'archive : %s" @@ -2694,981 +2999,1010 @@ msgstr "n'a pas pu restaurer le fichier « %s » à partir de l'archive : %s" #. translator: First %s represents a postgresql.conf parameter name like #. "recovery_end_command", the 2nd is the value of that parameter, the #. third an already translated error message. -#: access/transam/xlogarchive.c:406 +#: access/transam/xlogarchive.c:369 #, c-format msgid "%s \"%s\": %s" msgstr "%s « %s »: %s" -#: access/transam/xlogarchive.c:516 access/transam/xlogarchive.c:580 +#: access/transam/xlogarchive.c:479 access/transam/xlogarchive.c:543 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "n'a pas pu créer le fichier de statut d'archivage « %s » : %m" -#: access/transam/xlogarchive.c:524 access/transam/xlogarchive.c:588 +#: access/transam/xlogarchive.c:487 access/transam/xlogarchive.c:551 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "n'a pas pu écrire le fichier de statut d'archivage « %s » : %m" -#: access/transam/xlogfuncs.c:57 -#, c-format -msgid "aborting backup due to backend exiting before pg_stop_backup was called" -msgstr "annulation de la sauvegarde due à la déconnexion du processus serveur avant que pg_stop_backup ne soit appelé" - -#: access/transam/xlogfuncs.c:87 +#: access/transam/xlogfuncs.c:74 #, c-format msgid "a backup is already in progress in this session" msgstr "une sauvegarde est déjà en cours dans cette session" -#: access/transam/xlogfuncs.c:145 access/transam/xlogfuncs.c:227 +#: access/transam/xlogfuncs.c:132 access/transam/xlogfuncs.c:213 #, c-format msgid "non-exclusive backup in progress" msgstr "une sauvegarde non exclusive est en cours" -#: access/transam/xlogfuncs.c:146 access/transam/xlogfuncs.c:228 +#: access/transam/xlogfuncs.c:133 access/transam/xlogfuncs.c:214 #, c-format msgid "Did you mean to use pg_stop_backup('f')?" msgstr "Souhaitiez-vous utiliser pg_stop_backup('f') ?" -#: access/transam/xlogfuncs.c:198 commands/event_trigger.c:1472 commands/event_trigger.c:2024 commands/extension.c:1908 commands/extension.c:2017 commands/extension.c:2241 commands/prepare.c:712 executor/execExpr.c:2201 executor/execSRF.c:720 executor/functions.c:1023 foreign/foreign.c:520 libpq/hba.c:2666 replication/logical/launcher.c:1112 replication/logical/logicalfuncs.c:176 replication/logical/origin.c:1487 replication/slotfuncs.c:236 -#: replication/walsender.c:3246 utils/adt/jsonfuncs.c:1700 utils/adt/jsonfuncs.c:1831 utils/adt/jsonfuncs.c:2019 utils/adt/jsonfuncs.c:2146 utils/adt/jsonfuncs.c:3608 utils/adt/pgstatfuncs.c:458 utils/adt/pgstatfuncs.c:563 utils/fmgr/funcapi.c:63 utils/misc/guc.c:9443 utils/mmgr/portalmem.c:1134 +#: access/transam/xlogfuncs.c:185 access/transam/xlogprefetch.c:720 commands/event_trigger.c:1311 commands/event_trigger.c:1869 commands/extension.c:1944 commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:712 executor/execExpr.c:2453 executor/execSRF.c:738 executor/functions.c:1058 foreign/foreign.c:520 libpq/hba.c:2712 replication/logical/launcher.c:943 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 replication/slotfuncs.c:254 replication/walsender.c:3297 storage/ipc/shmem.c:554 utils/adt/datetime.c:4811 utils/adt/genfile.c:508 utils/adt/genfile.c:591 utils/adt/jsonfuncs.c:1933 utils/adt/jsonfuncs.c:2045 utils/adt/jsonfuncs.c:2233 +#: utils/adt/jsonfuncs.c:2342 utils/adt/jsonfuncs.c:3803 utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:218 utils/adt/pgstatfuncs.c:477 utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 utils/adt/varlena.c:4832 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10027 utils/mmgr/portalmem.c:1136 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "" "la fonction avec set-value a été appelé dans un contexte qui n'accepte pas\n" "un ensemble" -#: access/transam/xlogfuncs.c:202 commands/event_trigger.c:1476 commands/event_trigger.c:2028 commands/extension.c:1912 commands/extension.c:2021 commands/extension.c:2245 commands/prepare.c:716 foreign/foreign.c:525 libpq/hba.c:2670 replication/logical/launcher.c:1116 replication/logical/logicalfuncs.c:180 replication/logical/origin.c:1491 replication/slotfuncs.c:240 replication/walsender.c:3250 utils/adt/pgstatfuncs.c:462 -#: utils/adt/pgstatfuncs.c:567 utils/misc/guc.c:9447 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1138 +#: access/transam/xlogfuncs.c:189 access/transam/xlogprefetch.c:724 commands/event_trigger.c:1315 commands/event_trigger.c:1873 commands/extension.c:1948 commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:716 foreign/foreign.c:525 libpq/hba.c:2716 replication/logical/launcher.c:947 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 replication/slotfuncs.c:258 replication/walsender.c:3301 storage/ipc/shmem.c:558 utils/adt/datetime.c:4815 utils/adt/genfile.c:512 utils/adt/genfile.c:595 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:222 utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4836 +#: utils/misc/guc.c:10031 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "mode matérialisé requis mais interdit dans ce contexte" -#: access/transam/xlogfuncs.c:244 +#: access/transam/xlogfuncs.c:230 #, c-format msgid "non-exclusive backup is not in progress" msgstr "une sauvegarde non exclusive n'est pas en cours" -#: access/transam/xlogfuncs.c:245 +#: access/transam/xlogfuncs.c:231 #, c-format msgid "Did you mean to use pg_stop_backup('t')?" msgstr "Souhaitiez-vous utiliser pg_stop_backup('t') ?" -#: access/transam/xlogfuncs.c:322 +#: access/transam/xlogfuncs.c:307 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "le niveau de journalisation n'est pas suffisant pour créer un point de restauration" -#: access/transam/xlogfuncs.c:330 +#: access/transam/xlogfuncs.c:315 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "valeur trop longue pour le point de restauration (%d caractères maximum)" -#: access/transam/xlogfuncs.c:468 access/transam/xlogfuncs.c:525 +#: access/transam/xlogfuncs.c:453 access/transam/xlogfuncs.c:510 #, c-format msgid "%s cannot be executed during recovery." msgstr "%s ne peut pas être exécuté lors de la restauration." -#: access/transam/xlogfuncs.c:546 access/transam/xlogfuncs.c:566 access/transam/xlogfuncs.c:583 access/transam/xlogfuncs.c:723 +#: access/transam/xlogfuncs.c:531 access/transam/xlogfuncs.c:561 access/transam/xlogfuncs.c:585 access/transam/xlogfuncs.c:608 access/transam/xlogfuncs.c:763 #, c-format msgid "recovery is not in progress" msgstr "la restauration n'est pas en cours" -#: access/transam/xlogfuncs.c:547 access/transam/xlogfuncs.c:567 access/transam/xlogfuncs.c:584 access/transam/xlogfuncs.c:724 +#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:562 access/transam/xlogfuncs.c:586 access/transam/xlogfuncs.c:609 access/transam/xlogfuncs.c:764 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "" "Les fonctions de contrôle de la restauration peuvent seulement être exécutées\n" "lors de la restauration." -#: access/transam/xlogfuncs.c:729 +#: access/transam/xlogfuncs.c:537 access/transam/xlogfuncs.c:567 +#, c-format +msgid "standby promotion is ongoing" +msgstr "la promotion du standby est en cours" + +#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:568 +#, c-format +msgid "%s cannot be executed after promotion is triggered." +msgstr "%s ne peut pas être exécuté une fois la promotion en cours d'exécution." + +#: access/transam/xlogfuncs.c:769 #, c-format msgid "\"wait_seconds\" must not be negative or zero" msgstr "« wait_seconds » ne doit pas être négatif ou nul" -#: access/transam/xlogfuncs.c:749 storage/ipc/signalfuncs.c:164 +#: access/transam/xlogfuncs.c:789 storage/ipc/signalfuncs.c:280 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "n'a pas pu envoyer le signal au postmaster : %m" -#: access/transam/xlogfuncs.c:785 +#: access/transam/xlogfuncs.c:825 #, c-format -msgid "server did not promote within %d seconds" -msgstr "le serveur ne s'est pas promu dans les %d secondes" +msgid "server did not promote within %d second" +msgid_plural "server did not promote within %d seconds" +msgstr[0] "le serveur ne s'est pas promu en %d seconde" +msgstr[1] "le serveur ne s'est pas promu dans les %d secondes" -#: access/transam/xlogreader.c:299 +#: access/transam/xlogprefetch.c:360 +#, c-format +msgid "recovery finished prefetching at %X/%X; prefetch = %llu, skip_hit = %llu, skip_new = %llu, skip_fpw = %llu, skip_seq = %llu, avg_distance = %f, avg_queue_depth = %f" +msgstr "" + +#: access/transam/xlogprefetch.c:462 +#, fuzzy, c-format +#| msgid "recovery stopping after reaching consistency" +msgid "recovery no longer prefetching: %s" +msgstr "arrêt de la restauration après avoir atteint le point de cohérence" + +#: access/transam/xlogprefetch.c:466 +#, fuzzy, c-format +#| msgid "aclremove is no longer supported" +msgid "recovery no longer prefetching" +msgstr "aclremove n'est plus supporté" + +#: access/transam/xlogreader.c:747 #, c-format msgid "invalid record offset at %X/%X" msgstr "décalage invalide de l'enregistrement %X/%X" -#: access/transam/xlogreader.c:307 +#: access/transam/xlogreader.c:756 #, c-format msgid "contrecord is requested by %X/%X" msgstr "« contrecord » est requis par %X/%X" -#: access/transam/xlogreader.c:348 access/transam/xlogreader.c:645 +#: access/transam/xlogreader.c:818 access/transam/xlogreader.c:1277 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "longueur invalide de l'enregistrement à %X/%X : voulait %u, a eu %u" -#: access/transam/xlogreader.c:372 +#: access/transam/xlogreader.c:909 #, c-format msgid "record length %u at %X/%X too long" msgstr "longueur trop importante de l'enregistrement %u à %X/%X" -#: access/transam/xlogreader.c:404 +#: access/transam/xlogreader.c:969 #, c-format -msgid "there is no contrecord flag at %X/%X" -msgstr "il n'existe pas de drapeau contrecord à %X/%X" +msgid "there is no contrecord flag at %X/%X reading %X/%X" +msgstr "il n'existe pas de drapeau contrecord à %X/%X en lisant %X/%X" -#: access/transam/xlogreader.c:417 +#: access/transam/xlogreader.c:984 #, c-format -msgid "invalid contrecord length %u at %X/%X" -msgstr "longueur %u invalide du contrecord à %X/%X" +msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" +msgstr "longueur %u invalide du contrecord à %X/%X en lisant %X/%X, attendait %u" -#: access/transam/xlogreader.c:653 +#: access/transam/xlogreader.c:1285 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "identifiant du gestionnaire de ressources invalide %u à %X/%X" -#: access/transam/xlogreader.c:667 access/transam/xlogreader.c:684 +#: access/transam/xlogreader.c:1298 access/transam/xlogreader.c:1314 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "enregistrement avec prev-link %X/%X incorrect à %X/%X" -#: access/transam/xlogreader.c:721 +#: access/transam/xlogreader.c:1350 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "" "somme de contrôle des données du gestionnaire de ressources incorrecte à\n" "l'enregistrement %X/%X" -#: access/transam/xlogreader.c:758 +#: access/transam/xlogreader.c:1387 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "numéro magique invalide %04X dans le segment %s, décalage %u" -#: access/transam/xlogreader.c:772 access/transam/xlogreader.c:823 +#: access/transam/xlogreader.c:1401 access/transam/xlogreader.c:1442 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "bits d'information %04X invalides dans le segment %s, décalage %u" -#: access/transam/xlogreader.c:798 +#: access/transam/xlogreader.c:1416 #, c-format -msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" -msgstr "le fichier WAL provient d'une instance différente : l'identifiant système de la base dans le fichier WAL est %s, alors que l'identifiant système de l'instance dans pg_control est %s" +msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" +msgstr "le fichier WAL provient d'un système différent : l'identifiant système de la base dans le fichier WAL est %llu, alors que l'identifiant système de la base dans pg_control est %llu" -#: access/transam/xlogreader.c:805 +#: access/transam/xlogreader.c:1424 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "Le fichier WAL provient d'un système différent : taille invalide du segment dans l'en-tête de page" -#: access/transam/xlogreader.c:811 +#: access/transam/xlogreader.c:1430 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "le fichier WAL provient d'une instance différente : XLOG_BLCKSZ incorrect dans l'en-tête de page" -#: access/transam/xlogreader.c:842 +#: access/transam/xlogreader.c:1461 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "pageaddr %X/%X inattendue dans le journal de transactions %s, segment %u" -#: access/transam/xlogreader.c:867 +#: access/transam/xlogreader.c:1486 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "identifiant timeline %u hors de la séquence (après %u) dans le segment %s, décalage %u" -#: access/transam/xlogreader.c:1112 +#: access/transam/xlogreader.c:1908 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u désordonné à %X/%X" -#: access/transam/xlogreader.c:1135 +#: access/transam/xlogreader.c:1932 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA configuré, mais aucune donnée inclus à %X/%X" -#: access/transam/xlogreader.c:1142 +#: access/transam/xlogreader.c:1939 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA non configuré, mais la longueur des données est %u à %X/%X" -#: access/transam/xlogreader.c:1178 +#: access/transam/xlogreader.c:1975 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE configué, mais du trou rencontré à l'offset %u longueur %u longueur de l'image du bloc %u à %X/%X" -#: access/transam/xlogreader.c:1194 +#: access/transam/xlogreader.c:1991 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE non configuré, mais trou rencontré à l'offset %u longueur %u à %X/%X" -#: access/transam/xlogreader.c:1209 +#: access/transam/xlogreader.c:2006 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X" -#: access/transam/xlogreader.c:1224 +#: access/transam/xlogreader.c:2021 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X" -#: access/transam/xlogreader.c:1240 +#: access/transam/xlogreader.c:2037 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL configuré, mais pas de relation précédente à %X/%X" -#: access/transam/xlogreader.c:1252 +#: access/transam/xlogreader.c:2049 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "block_id %u invalide à %X/%X" -#: access/transam/xlogreader.c:1341 +#: access/transam/xlogreader.c:2116 #, c-format msgid "record with invalid length at %X/%X" msgstr "enregistrement de longueur invalide à %X/%X" -#: access/transam/xlogreader.c:1430 +#: access/transam/xlogreader.c:2219 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "image compressée invalide à %X/%X, bloc %d" -#: access/transam/xlogutils.c:727 replication/walreceiver.c:959 replication/walsender.c:2463 -#, c-format -msgid "could not seek in log segment %s to offset %u: %m" -msgstr "n'a pas pu se déplacer dans le journal de transactions %s au décalage %u : %m" - -#: access/transam/xlogutils.c:751 -#, c-format -msgid "could not read from log segment %s, offset %u, length %lu: %m" -msgstr "n'a pas pu lire le journal de transactions %s, décalage %u, longueur %lu : %m" - -#: bootstrap/bootstrap.c:271 +#: bootstrap/bootstrap.c:270 #, c-format msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X nécessite une puissance de deux entre 1 MB et 1 GB" -#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:821 tcop/postgres.c:3635 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:844 tcop/postgres.c:3848 #, c-format msgid "--%s requires a value" msgstr "--%s requiert une valeur" -#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:826 tcop/postgres.c:3640 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:849 tcop/postgres.c:3853 #, c-format msgid "-c %s requires a value" msgstr "-c %s requiert une valeur" -#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:838 postmaster/postmaster.c:851 +#: bootstrap/bootstrap.c:303 postmaster/postmaster.c:861 postmaster/postmaster.c:874 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayez « %s --help » pour plus d'informations.\n" -#: bootstrap/bootstrap.c:313 +#: bootstrap/bootstrap.c:312 #, c-format msgid "%s: invalid command-line arguments\n" msgstr "%s : arguments invalides en ligne de commande\n" -#: catalog/aclchk.c:203 +#: catalog/aclchk.c:181 #, c-format msgid "grant options can only be granted to roles" msgstr "les options grant peuvent seulement être données aux rôles" -#: catalog/aclchk.c:326 +#: catalog/aclchk.c:300 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "aucun droit n'a pu être accordé pour la colonne « %s » de la relation « %s »" -#: catalog/aclchk.c:331 +#: catalog/aclchk.c:305 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "aucun droit n'a été accordé pour « %s »" -#: catalog/aclchk.c:339 +#: catalog/aclchk.c:313 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "certains droits n'ont pu être accordé pour la colonne « %s » de la relation « %s »" -#: catalog/aclchk.c:344 +#: catalog/aclchk.c:318 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "tous les droits n'ont pas été accordés pour « %s »" -#: catalog/aclchk.c:355 +#: catalog/aclchk.c:329 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "aucun droit n'a pu être révoqué pour la colonne « %s » de la relation « %s »" -#: catalog/aclchk.c:360 +#: catalog/aclchk.c:334 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "aucun droit n'a pu être révoqué pour « %s »" -#: catalog/aclchk.c:368 +#: catalog/aclchk.c:342 #, c-format msgid "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "certains droits n'ont pu être révoqué pour la colonne « %s » de la relation « %s »" -#: catalog/aclchk.c:373 +#: catalog/aclchk.c:347 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "certains droits n'ont pu être révoqué pour « %s »" -#: catalog/aclchk.c:456 catalog/aclchk.c:999 +#: catalog/aclchk.c:379 +#, fuzzy, c-format +#| msgid "must be superuser" +msgid "grantor must be current user" +msgstr "doit être super-utilisateur" + +#: catalog/aclchk.c:446 catalog/aclchk.c:989 #, c-format msgid "invalid privilege type %s for relation" msgstr "droit %s invalide pour la relation" -#: catalog/aclchk.c:460 catalog/aclchk.c:1003 +#: catalog/aclchk.c:450 catalog/aclchk.c:993 #, c-format msgid "invalid privilege type %s for sequence" msgstr "droit %s invalide pour la séquence" -#: catalog/aclchk.c:464 +#: catalog/aclchk.c:454 #, c-format msgid "invalid privilege type %s for database" msgstr "droit %s invalide pour la base de données" -#: catalog/aclchk.c:468 +#: catalog/aclchk.c:458 #, c-format msgid "invalid privilege type %s for domain" msgstr "type de droit %s invalide pour le domaine" -#: catalog/aclchk.c:472 catalog/aclchk.c:1007 +#: catalog/aclchk.c:462 catalog/aclchk.c:997 #, c-format msgid "invalid privilege type %s for function" msgstr "droit %s invalide pour la fonction" -#: catalog/aclchk.c:476 +#: catalog/aclchk.c:466 #, c-format msgid "invalid privilege type %s for language" msgstr "droit %s invalide pour le langage" -#: catalog/aclchk.c:480 +#: catalog/aclchk.c:470 #, c-format msgid "invalid privilege type %s for large object" msgstr "type de droit invalide, %s, pour le Large Object" -#: catalog/aclchk.c:484 catalog/aclchk.c:1023 +#: catalog/aclchk.c:474 catalog/aclchk.c:1013 #, c-format msgid "invalid privilege type %s for schema" msgstr "droit %s invalide pour le schéma" -#: catalog/aclchk.c:488 catalog/aclchk.c:1011 +#: catalog/aclchk.c:478 catalog/aclchk.c:1001 #, c-format msgid "invalid privilege type %s for procedure" msgstr "type de droit %s invalide pour la procédure " -#: catalog/aclchk.c:492 catalog/aclchk.c:1015 +#: catalog/aclchk.c:482 catalog/aclchk.c:1005 #, c-format msgid "invalid privilege type %s for routine" msgstr "droit %s invalide pour la routine" -#: catalog/aclchk.c:496 +#: catalog/aclchk.c:486 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "droit %s invalide pour le tablespace" -#: catalog/aclchk.c:500 catalog/aclchk.c:1019 +#: catalog/aclchk.c:490 catalog/aclchk.c:1009 #, c-format msgid "invalid privilege type %s for type" msgstr "type de droit %s invalide pour le type" -#: catalog/aclchk.c:504 +#: catalog/aclchk.c:494 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "type de droit %s invalide pour le wrapper de données distantes" -#: catalog/aclchk.c:508 +#: catalog/aclchk.c:498 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "type de droit %s invalide pour le serveur distant" -#: catalog/aclchk.c:547 +#: catalog/aclchk.c:537 #, c-format msgid "column privileges are only valid for relations" msgstr "les droits sur la colonne sont seulement valides pour les relations" -#: catalog/aclchk.c:707 catalog/aclchk.c:4135 catalog/aclchk.c:4917 catalog/objectaddress.c:964 catalog/pg_largeobject.c:116 storage/large_object/inv_api.c:283 +#: catalog/aclchk.c:697 catalog/aclchk.c:4164 catalog/aclchk.c:4985 catalog/objectaddress.c:1059 catalog/pg_largeobject.c:116 storage/large_object/inv_api.c:285 #, c-format msgid "large object %u does not exist" msgstr "le « Large Object » %u n'existe pas" -#: catalog/aclchk.c:936 catalog/aclchk.c:945 commands/collationcmds.c:117 commands/copy.c:1139 commands/copy.c:1159 commands/copy.c:1168 commands/copy.c:1177 commands/copy.c:1186 commands/copy.c:1195 commands/copy.c:1204 commands/copy.c:1213 commands/copy.c:1231 commands/copy.c:1247 commands/copy.c:1267 commands/copy.c:1284 commands/dbcommands.c:156 commands/dbcommands.c:165 commands/dbcommands.c:174 commands/dbcommands.c:183 -#: commands/dbcommands.c:192 commands/dbcommands.c:201 commands/dbcommands.c:210 commands/dbcommands.c:219 commands/dbcommands.c:228 commands/dbcommands.c:1448 commands/dbcommands.c:1457 commands/dbcommands.c:1466 commands/dbcommands.c:1475 commands/extension.c:1688 commands/extension.c:1698 commands/extension.c:1708 commands/extension.c:1718 commands/extension.c:2960 commands/foreigncmds.c:543 commands/foreigncmds.c:552 -#: commands/functioncmds.c:568 commands/functioncmds.c:734 commands/functioncmds.c:743 commands/functioncmds.c:752 commands/functioncmds.c:761 commands/functioncmds.c:2193 commands/functioncmds.c:2201 commands/publicationcmds.c:91 commands/sequence.c:1267 commands/sequence.c:1277 commands/sequence.c:1287 commands/sequence.c:1297 commands/sequence.c:1307 commands/sequence.c:1317 commands/sequence.c:1327 commands/sequence.c:1337 -#: commands/sequence.c:1347 commands/subscriptioncmds.c:111 commands/subscriptioncmds.c:121 commands/subscriptioncmds.c:131 commands/subscriptioncmds.c:141 commands/subscriptioncmds.c:155 commands/subscriptioncmds.c:166 commands/subscriptioncmds.c:180 commands/tablecmds.c:6553 commands/typecmds.c:299 commands/typecmds.c:1428 commands/typecmds.c:1437 commands/typecmds.c:1445 commands/typecmds.c:1453 commands/typecmds.c:1461 -#: commands/user.c:133 commands/user.c:147 commands/user.c:156 commands/user.c:165 commands/user.c:174 commands/user.c:183 commands/user.c:192 commands/user.c:201 commands/user.c:210 commands/user.c:219 commands/user.c:228 commands/user.c:237 commands/user.c:246 commands/user.c:571 commands/user.c:579 commands/user.c:587 commands/user.c:595 commands/user.c:603 commands/user.c:611 commands/user.c:619 commands/user.c:627 commands/user.c:636 -#: commands/user.c:644 commands/user.c:652 parser/parse_utilcmd.c:385 replication/pgoutput/pgoutput.c:111 replication/pgoutput/pgoutput.c:132 replication/walsender.c:817 replication/walsender.c:828 replication/walsender.c:838 +#: catalog/aclchk.c:926 catalog/aclchk.c:935 commands/collationcmds.c:115 commands/copy.c:362 commands/copy.c:382 commands/copy.c:392 commands/copy.c:401 commands/copy.c:410 commands/copy.c:420 commands/copy.c:429 commands/copy.c:438 commands/copy.c:456 commands/copy.c:472 commands/copy.c:492 commands/copy.c:509 commands/dbcommands.c:157 commands/dbcommands.c:166 commands/dbcommands.c:175 commands/dbcommands.c:184 commands/dbcommands.c:193 commands/dbcommands.c:202 commands/dbcommands.c:211 commands/dbcommands.c:220 commands/dbcommands.c:229 commands/dbcommands.c:238 commands/dbcommands.c:260 commands/dbcommands.c:1502 commands/dbcommands.c:1511 commands/dbcommands.c:1520 +#: commands/dbcommands.c:1529 commands/extension.c:1735 commands/extension.c:1745 commands/extension.c:1755 commands/extension.c:3055 commands/foreigncmds.c:539 commands/foreigncmds.c:548 commands/functioncmds.c:578 commands/functioncmds.c:744 commands/functioncmds.c:753 commands/functioncmds.c:762 commands/functioncmds.c:771 commands/functioncmds.c:2068 commands/functioncmds.c:2076 commands/publicationcmds.c:90 commands/publicationcmds.c:133 commands/sequence.c:1266 commands/sequence.c:1276 commands/sequence.c:1286 commands/sequence.c:1296 commands/sequence.c:1306 commands/sequence.c:1316 commands/sequence.c:1326 commands/sequence.c:1336 commands/sequence.c:1346 +#: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 commands/subscriptioncmds.c:168 commands/subscriptioncmds.c:179 commands/subscriptioncmds.c:193 commands/subscriptioncmds.c:203 commands/subscriptioncmds.c:213 commands/tablecmds.c:7527 commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 commands/user.c:156 commands/user.c:165 commands/user.c:174 commands/user.c:183 commands/user.c:192 commands/user.c:201 commands/user.c:210 commands/user.c:219 +#: commands/user.c:228 commands/user.c:237 commands/user.c:246 commands/user.c:582 commands/user.c:590 commands/user.c:598 commands/user.c:606 commands/user.c:614 commands/user.c:622 commands/user.c:630 commands/user.c:638 commands/user.c:647 commands/user.c:655 commands/user.c:663 parser/parse_utilcmd.c:405 replication/pgoutput/pgoutput.c:192 replication/pgoutput/pgoutput.c:213 replication/pgoutput/pgoutput.c:227 replication/pgoutput/pgoutput.c:237 replication/pgoutput/pgoutput.c:247 replication/walsender.c:885 replication/walsender.c:896 replication/walsender.c:906 #, c-format msgid "conflicting or redundant options" msgstr "options en conflit ou redondantes" -#: catalog/aclchk.c:1056 +#: catalog/aclchk.c:1046 #, c-format msgid "default privileges cannot be set for columns" msgstr "les droits par défaut ne peuvent pas être configurés pour les colonnes" -#: catalog/aclchk.c:1216 +#: catalog/aclchk.c:1206 #, c-format msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "ne peut pas utiliser la clause IN SCHEMA lors de l'utilisation de GRANT/REVOKE ON SCHEMAS" -#: catalog/aclchk.c:1584 catalog/catalog.c:519 catalog/objectaddress.c:1426 commands/analyze.c:383 commands/copy.c:5134 commands/sequence.c:1702 commands/tablecmds.c:6095 commands/tablecmds.c:6253 commands/tablecmds.c:6327 commands/tablecmds.c:6397 commands/tablecmds.c:6478 commands/tablecmds.c:6572 commands/tablecmds.c:6631 commands/tablecmds.c:6770 commands/tablecmds.c:6852 commands/tablecmds.c:6944 commands/tablecmds.c:7038 -#: commands/tablecmds.c:10271 commands/tablecmds.c:10452 commands/tablecmds.c:10613 commands/tablecmds.c:11598 commands/trigger.c:928 parser/analyze.c:2330 parser/parse_relation.c:2788 parser/parse_relation.c:2851 parser/parse_target.c:1031 parser/parse_type.c:145 utils/adt/acl.c:2885 utils/adt/ruleutils.c:2511 +#: catalog/aclchk.c:1544 catalog/catalog.c:553 catalog/objectaddress.c:1521 commands/analyze.c:390 commands/copy.c:741 commands/sequence.c:1701 commands/tablecmds.c:7003 commands/tablecmds.c:7146 commands/tablecmds.c:7196 commands/tablecmds.c:7270 commands/tablecmds.c:7340 commands/tablecmds.c:7452 commands/tablecmds.c:7546 commands/tablecmds.c:7605 commands/tablecmds.c:7694 commands/tablecmds.c:7723 commands/tablecmds.c:7878 commands/tablecmds.c:7960 commands/tablecmds.c:8115 commands/tablecmds.c:8232 commands/tablecmds.c:11465 commands/tablecmds.c:11647 commands/tablecmds.c:11807 commands/tablecmds.c:12966 commands/tablecmds.c:15468 commands/trigger.c:924 parser/analyze.c:2413 +#: parser/parse_relation.c:714 parser/parse_target.c:1064 parser/parse_type.c:144 parser/parse_utilcmd.c:3451 parser/parse_utilcmd.c:3486 parser/parse_utilcmd.c:3528 utils/adt/acl.c:2845 utils/adt/ruleutils.c:2708 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "la colonne « %s » de la relation « %s » n'existe pas" -#: catalog/aclchk.c:1847 catalog/objectaddress.c:1266 commands/sequence.c:1140 commands/tablecmds.c:230 commands/tablecmds.c:14917 utils/adt/acl.c:2075 utils/adt/acl.c:2105 utils/adt/acl.c:2137 utils/adt/acl.c:2169 utils/adt/acl.c:2197 utils/adt/acl.c:2227 +#: catalog/aclchk.c:1807 catalog/objectaddress.c:1361 commands/sequence.c:1139 commands/tablecmds.c:250 commands/tablecmds.c:16335 utils/adt/acl.c:2053 utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 utils/adt/acl.c:2175 utils/adt/acl.c:2205 #, c-format msgid "\"%s\" is not a sequence" msgstr "« %s » n'est pas une séquence" -#: catalog/aclchk.c:1885 +#: catalog/aclchk.c:1845 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "la séquence « %s » accepte seulement les droits USAGE, SELECT et UPDATE" -#: catalog/aclchk.c:1902 +#: catalog/aclchk.c:1862 #, c-format msgid "invalid privilege type %s for table" msgstr "type de droit %s invalide pour la table" -#: catalog/aclchk.c:2068 +#: catalog/aclchk.c:2028 #, c-format msgid "invalid privilege type %s for column" msgstr "type de droit %s invalide pour la colonne" -#: catalog/aclchk.c:2081 +#: catalog/aclchk.c:2041 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "la séquence « %s » accepte seulement le droit SELECT pour les colonnes" -#: catalog/aclchk.c:2663 +#: catalog/aclchk.c:2623 #, c-format msgid "language \"%s\" is not trusted" msgstr "le langage « %s » n'est pas de confiance" -#: catalog/aclchk.c:2665 +#: catalog/aclchk.c:2625 #, c-format msgid "GRANT and REVOKE are not allowed on untrusted languages, because only superusers can use untrusted languages." msgstr "GRANT et REVOKE ne sont pas autorisés sur des langages qui ne sont pas de confiance car seuls les super-utilisateurs peuvent utiliser ces langages." -#: catalog/aclchk.c:3179 +#: catalog/aclchk.c:3139 #, c-format msgid "cannot set privileges of array types" msgstr "ne peut pas configurer les droits des types tableau" -#: catalog/aclchk.c:3180 +#: catalog/aclchk.c:3140 #, c-format msgid "Set the privileges of the element type instead." msgstr "Configurez les droits du type élément à la place." -#: catalog/aclchk.c:3187 catalog/objectaddress.c:1560 +#: catalog/aclchk.c:3147 catalog/objectaddress.c:1655 #, c-format msgid "\"%s\" is not a domain" msgstr "« %s » n'est pas un domaine" -#: catalog/aclchk.c:3307 +#: catalog/aclchk.c:3267 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "type de droit « %s » non reconnu" -#: catalog/aclchk.c:3368 +#: catalog/aclchk.c:3328 #, c-format msgid "permission denied for aggregate %s" msgstr "droit refusé pour l'aggrégat %s" -#: catalog/aclchk.c:3371 +#: catalog/aclchk.c:3331 #, c-format msgid "permission denied for collation %s" msgstr "droit refusé pour le collationnement %s" -#: catalog/aclchk.c:3374 +#: catalog/aclchk.c:3334 #, c-format msgid "permission denied for column %s" msgstr "droit refusé pour la colonne %s" -#: catalog/aclchk.c:3377 +#: catalog/aclchk.c:3337 #, c-format msgid "permission denied for conversion %s" msgstr "droit refusé pour la conversion %s" -#: catalog/aclchk.c:3380 +#: catalog/aclchk.c:3340 #, c-format msgid "permission denied for database %s" msgstr "droit refusé pour la base de données %s" -#: catalog/aclchk.c:3383 +#: catalog/aclchk.c:3343 #, c-format msgid "permission denied for domain %s" msgstr "droit refusé pour le domaine %s" -#: catalog/aclchk.c:3386 +#: catalog/aclchk.c:3346 #, c-format msgid "permission denied for event trigger %s" msgstr "droit refusé pour le trigger sur événement %s" -#: catalog/aclchk.c:3389 +#: catalog/aclchk.c:3349 #, c-format msgid "permission denied for extension %s" msgstr "droit refusé pour l'extension %s" -#: catalog/aclchk.c:3392 +#: catalog/aclchk.c:3352 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "droit refusé pour le wrapper de données distantes %s" -#: catalog/aclchk.c:3395 +#: catalog/aclchk.c:3355 #, c-format msgid "permission denied for foreign server %s" msgstr "droit refusé pour le serveur distant %s" -#: catalog/aclchk.c:3398 +#: catalog/aclchk.c:3358 #, c-format msgid "permission denied for foreign table %s" msgstr "droit refusé pour la table distante %s" -#: catalog/aclchk.c:3401 +#: catalog/aclchk.c:3361 #, c-format msgid "permission denied for function %s" msgstr "droit refusé pour la fonction %s" -#: catalog/aclchk.c:3404 +#: catalog/aclchk.c:3364 #, c-format msgid "permission denied for index %s" msgstr "droit refusé pour l'index %s" -#: catalog/aclchk.c:3407 +#: catalog/aclchk.c:3367 #, c-format msgid "permission denied for language %s" msgstr "droit refusé pour le langage %s" -#: catalog/aclchk.c:3410 +#: catalog/aclchk.c:3370 #, c-format msgid "permission denied for large object %s" msgstr "droit refusé pour le Large Object %s" -#: catalog/aclchk.c:3413 +#: catalog/aclchk.c:3373 #, c-format msgid "permission denied for materialized view %s" msgstr "droit refusé pour la vue matérialisée %s" -#: catalog/aclchk.c:3416 +#: catalog/aclchk.c:3376 #, c-format msgid "permission denied for operator class %s" msgstr "droit refusé pour la classe d'opérateur %s" -#: catalog/aclchk.c:3419 +#: catalog/aclchk.c:3379 #, c-format msgid "permission denied for operator %s" msgstr "droit refusé pour l'opérateur %s" -#: catalog/aclchk.c:3422 +#: catalog/aclchk.c:3382 #, c-format msgid "permission denied for operator family %s" msgstr "droit refusé pour la famille d'opérateur %s" -#: catalog/aclchk.c:3425 +#: catalog/aclchk.c:3385 #, c-format msgid "permission denied for policy %s" msgstr "droit refusé pour la politique %s" -#: catalog/aclchk.c:3428 +#: catalog/aclchk.c:3388 #, c-format msgid "permission denied for procedure %s" msgstr "droit refusé pour la procédure %s" -#: catalog/aclchk.c:3431 +#: catalog/aclchk.c:3391 #, c-format msgid "permission denied for publication %s" msgstr "droit refusé pour la publication %s" -#: catalog/aclchk.c:3434 +#: catalog/aclchk.c:3394 #, c-format msgid "permission denied for routine %s" msgstr "droit refusé pour la routine %s" -#: catalog/aclchk.c:3437 +#: catalog/aclchk.c:3397 #, c-format msgid "permission denied for schema %s" msgstr "droit refusé pour le schéma %s" -#: catalog/aclchk.c:3440 commands/sequence.c:610 commands/sequence.c:844 commands/sequence.c:886 commands/sequence.c:927 commands/sequence.c:1800 commands/sequence.c:1864 +#: catalog/aclchk.c:3400 commands/sequence.c:610 commands/sequence.c:844 commands/sequence.c:886 commands/sequence.c:927 commands/sequence.c:1799 commands/sequence.c:1863 #, c-format msgid "permission denied for sequence %s" msgstr "droit refusé pour la séquence %s" -#: catalog/aclchk.c:3443 +#: catalog/aclchk.c:3403 #, c-format msgid "permission denied for statistics object %s" msgstr "droit refusé pour l'objet statistique %s" -#: catalog/aclchk.c:3446 +#: catalog/aclchk.c:3406 #, c-format msgid "permission denied for subscription %s" msgstr "droit refusé pour la souscription %s" -#: catalog/aclchk.c:3449 +#: catalog/aclchk.c:3409 #, c-format msgid "permission denied for table %s" msgstr "droit refusé pour la table %s" -#: catalog/aclchk.c:3452 +#: catalog/aclchk.c:3412 #, c-format msgid "permission denied for tablespace %s" msgstr "droit refusé pour le tablespace %s" -#: catalog/aclchk.c:3455 +#: catalog/aclchk.c:3415 #, c-format msgid "permission denied for text search configuration %s" msgstr "droit refusé pour la configuration de recherche plein texte %s" -#: catalog/aclchk.c:3458 +#: catalog/aclchk.c:3418 #, c-format msgid "permission denied for text search dictionary %s" msgstr "droit refusé pour le dictionnaire de recherche plein texte %s" -#: catalog/aclchk.c:3461 +#: catalog/aclchk.c:3421 #, c-format msgid "permission denied for type %s" msgstr "droit refusé pour le type %s" -#: catalog/aclchk.c:3464 +#: catalog/aclchk.c:3424 #, c-format msgid "permission denied for view %s" msgstr "droit refusé pour la vue %s" -#: catalog/aclchk.c:3499 +#: catalog/aclchk.c:3459 #, c-format msgid "must be owner of aggregate %s" msgstr "doit être le propriétaire de l'aggrégat %s" -#: catalog/aclchk.c:3502 +#: catalog/aclchk.c:3462 #, c-format msgid "must be owner of collation %s" msgstr "doit être le propriétaire du collationnement %s" -#: catalog/aclchk.c:3505 +#: catalog/aclchk.c:3465 #, c-format msgid "must be owner of conversion %s" msgstr "doit être le propriétaire de la conversion %s" -#: catalog/aclchk.c:3508 +#: catalog/aclchk.c:3468 #, c-format msgid "must be owner of database %s" msgstr "doit être le propriétaire de la base de données %s" -#: catalog/aclchk.c:3511 +#: catalog/aclchk.c:3471 #, c-format msgid "must be owner of domain %s" msgstr "doit être le propriétaire du domaine %s" -#: catalog/aclchk.c:3514 +#: catalog/aclchk.c:3474 #, c-format msgid "must be owner of event trigger %s" msgstr "doit être le propriétaire du trigger sur événement %s" -#: catalog/aclchk.c:3517 +#: catalog/aclchk.c:3477 #, c-format msgid "must be owner of extension %s" msgstr "doit être le propriétaire de l'extension %s" -#: catalog/aclchk.c:3520 +#: catalog/aclchk.c:3480 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "doit être le propriétaire du wrapper de données distantes %s" -#: catalog/aclchk.c:3523 +#: catalog/aclchk.c:3483 #, c-format msgid "must be owner of foreign server %s" msgstr "doit être le propriétaire de serveur distant %s" -#: catalog/aclchk.c:3526 +#: catalog/aclchk.c:3486 #, c-format msgid "must be owner of foreign table %s" msgstr "doit être le propriétaire de la table distante %s" -#: catalog/aclchk.c:3529 +#: catalog/aclchk.c:3489 #, c-format msgid "must be owner of function %s" msgstr "doit être le propriétaire de la fonction %s" -#: catalog/aclchk.c:3532 +#: catalog/aclchk.c:3492 #, c-format msgid "must be owner of index %s" msgstr "doit être le propriétaire de l'index %s" -#: catalog/aclchk.c:3535 +#: catalog/aclchk.c:3495 #, c-format msgid "must be owner of language %s" msgstr "doit être le propriétaire du langage %s" -#: catalog/aclchk.c:3538 +#: catalog/aclchk.c:3498 #, c-format msgid "must be owner of large object %s" msgstr "doit être le propriétaire du Large Object %s" -#: catalog/aclchk.c:3541 +#: catalog/aclchk.c:3501 #, c-format msgid "must be owner of materialized view %s" msgstr "doit être le propriétaire de la vue matérialisée %s" -#: catalog/aclchk.c:3544 +#: catalog/aclchk.c:3504 #, c-format msgid "must be owner of operator class %s" msgstr "doit être le propriétaire de la classe d'opérateur %s" -#: catalog/aclchk.c:3547 +#: catalog/aclchk.c:3507 #, c-format msgid "must be owner of operator %s" msgstr "doit être le prorpriétaire de l'opérateur %s" -#: catalog/aclchk.c:3550 +#: catalog/aclchk.c:3510 #, c-format msgid "must be owner of operator family %s" msgstr "doit être le prorpriétaire de la famille d'opérateur %s" -#: catalog/aclchk.c:3553 +#: catalog/aclchk.c:3513 #, c-format msgid "must be owner of procedure %s" msgstr "doit être le prorpriétaire de la procédure %s" -#: catalog/aclchk.c:3556 +#: catalog/aclchk.c:3516 #, c-format msgid "must be owner of publication %s" msgstr "doit être le propriétaire de la publication %s" -#: catalog/aclchk.c:3559 +#: catalog/aclchk.c:3519 #, c-format msgid "must be owner of routine %s" msgstr "doit être le propriétaire de la routine %s" -#: catalog/aclchk.c:3562 +#: catalog/aclchk.c:3522 #, c-format msgid "must be owner of sequence %s" msgstr "doit être le propriétaire de la séquence %s" -#: catalog/aclchk.c:3565 +#: catalog/aclchk.c:3525 #, c-format msgid "must be owner of subscription %s" msgstr "doit être le propriétaire de la souscription %s" -#: catalog/aclchk.c:3568 +#: catalog/aclchk.c:3528 #, c-format msgid "must be owner of table %s" msgstr "doit être le propriétaire de la table %s" -#: catalog/aclchk.c:3571 +#: catalog/aclchk.c:3531 #, c-format msgid "must be owner of type %s" msgstr "doit être le propriétaire du type %s" -#: catalog/aclchk.c:3574 +#: catalog/aclchk.c:3534 #, c-format msgid "must be owner of view %s" msgstr "doit être le propriétaire de la vue %s" -#: catalog/aclchk.c:3577 +#: catalog/aclchk.c:3537 #, c-format msgid "must be owner of schema %s" msgstr "doit être le propriétaire du schéma %s" -#: catalog/aclchk.c:3580 +#: catalog/aclchk.c:3540 #, c-format msgid "must be owner of statistics object %s" msgstr "doit être le propriétaire de l'objet statistique %s" -#: catalog/aclchk.c:3583 +#: catalog/aclchk.c:3543 #, c-format msgid "must be owner of tablespace %s" msgstr "doit être le propriétaire du tablespace %s" -#: catalog/aclchk.c:3586 +#: catalog/aclchk.c:3546 #, c-format msgid "must be owner of text search configuration %s" msgstr "doit être le propriétaire de la configuration de recherche plein texte %s" -#: catalog/aclchk.c:3589 +#: catalog/aclchk.c:3549 #, c-format msgid "must be owner of text search dictionary %s" msgstr "doit être le propriétaire du dictionnaire de recherche plein texte %s" -#: catalog/aclchk.c:3603 +#: catalog/aclchk.c:3563 #, c-format msgid "must be owner of relation %s" msgstr "doit être le propriétaire de la relation %s" -#: catalog/aclchk.c:3647 +#: catalog/aclchk.c:3607 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "droit refusé pour la colonne « %s » de la relation « %s »" -#: catalog/aclchk.c:3768 catalog/aclchk.c:3776 +#: catalog/aclchk.c:3750 catalog/aclchk.c:3769 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "l'attribut %d de la relation d'OID %u n'existe pas" -#: catalog/aclchk.c:3849 catalog/aclchk.c:4768 +#: catalog/aclchk.c:3864 catalog/aclchk.c:4836 #, c-format msgid "relation with OID %u does not exist" msgstr "la relation d'OID %u n'existe pas" -#: catalog/aclchk.c:3948 catalog/aclchk.c:5186 +#: catalog/aclchk.c:3977 catalog/aclchk.c:5254 #, c-format msgid "database with OID %u does not exist" msgstr "la base de données d'OID %u n'existe pas" -#: catalog/aclchk.c:4002 catalog/aclchk.c:4846 tcop/fastpath.c:221 utils/fmgr/fmgr.c:2017 +#: catalog/aclchk.c:4031 catalog/aclchk.c:4914 tcop/fastpath.c:144 utils/fmgr/fmgr.c:2051 #, c-format msgid "function with OID %u does not exist" msgstr "la fonction d'OID %u n'existe pas" -#: catalog/aclchk.c:4056 catalog/aclchk.c:4872 +#: catalog/aclchk.c:4085 catalog/aclchk.c:4940 #, c-format msgid "language with OID %u does not exist" msgstr "le langage d'OID %u n'existe pas" -#: catalog/aclchk.c:4220 catalog/aclchk.c:4944 +#: catalog/aclchk.c:4249 catalog/aclchk.c:5012 commands/collationcmds.c:418 #, c-format msgid "schema with OID %u does not exist" msgstr "le schéma d'OID %u n'existe pas" -#: catalog/aclchk.c:4274 catalog/aclchk.c:4971 utils/adt/genfile.c:637 +#: catalog/aclchk.c:4313 catalog/aclchk.c:5039 utils/adt/genfile.c:689 #, c-format msgid "tablespace with OID %u does not exist" msgstr "le tablespace d'OID %u n'existe pas" -#: catalog/aclchk.c:4333 catalog/aclchk.c:5105 commands/foreigncmds.c:328 +#: catalog/aclchk.c:4372 catalog/aclchk.c:5173 commands/foreigncmds.c:325 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "le wrapper de données distantes d'OID %u n'existe pas" -#: catalog/aclchk.c:4395 catalog/aclchk.c:5132 commands/foreigncmds.c:465 +#: catalog/aclchk.c:4434 catalog/aclchk.c:5200 commands/foreigncmds.c:462 #, c-format msgid "foreign server with OID %u does not exist" msgstr "le serveur distant d'OID %u n'existe pas" -#: catalog/aclchk.c:4455 catalog/aclchk.c:4794 utils/cache/typcache.c:369 +#: catalog/aclchk.c:4494 catalog/aclchk.c:4862 utils/cache/typcache.c:384 utils/cache/typcache.c:439 #, c-format msgid "type with OID %u does not exist" msgstr "le type d'OID %u n'existe pas" -#: catalog/aclchk.c:4820 +#: catalog/aclchk.c:4888 #, c-format msgid "operator with OID %u does not exist" msgstr "l'opérateur d'OID %u n'existe pas" -#: catalog/aclchk.c:4997 +#: catalog/aclchk.c:5065 #, c-format msgid "operator class with OID %u does not exist" msgstr "la classe d'opérateur d'OID %u n'existe pas" -#: catalog/aclchk.c:5024 +#: catalog/aclchk.c:5092 #, c-format msgid "operator family with OID %u does not exist" msgstr "la famille d'opérateur d'OID %u n'existe pas" -#: catalog/aclchk.c:5051 +#: catalog/aclchk.c:5119 #, c-format msgid "text search dictionary with OID %u does not exist" msgstr "le dictionnaire de recherche plein texte d'OID %u n'existe pas" -#: catalog/aclchk.c:5078 +#: catalog/aclchk.c:5146 #, c-format msgid "text search configuration with OID %u does not exist" msgstr "la configuration de recherche plein texte d'OID %u n'existe pas" -#: catalog/aclchk.c:5159 commands/event_trigger.c:595 +#: catalog/aclchk.c:5227 commands/event_trigger.c:453 #, c-format msgid "event trigger with OID %u does not exist" msgstr "le trigger sur événement d'OID %u n'existe pas" -#: catalog/aclchk.c:5212 commands/collationcmds.c:366 +#: catalog/aclchk.c:5280 #, c-format msgid "collation with OID %u does not exist" msgstr "le collationnement d'OID %u n'existe pas" -#: catalog/aclchk.c:5238 +#: catalog/aclchk.c:5306 #, c-format msgid "conversion with OID %u does not exist" msgstr "la conversion d'OID %u n'existe pas" -#: catalog/aclchk.c:5279 +#: catalog/aclchk.c:5347 #, c-format msgid "extension with OID %u does not exist" msgstr "l'extension d'OID %u n'existe pas" -#: catalog/aclchk.c:5306 commands/publicationcmds.c:759 +#: catalog/aclchk.c:5374 commands/publicationcmds.c:771 #, c-format msgid "publication with OID %u does not exist" msgstr "la publication d'OID %u n'existe pas" -#: catalog/aclchk.c:5332 commands/subscriptioncmds.c:1130 +#: catalog/aclchk.c:5400 commands/subscriptioncmds.c:1459 #, c-format msgid "subscription with OID %u does not exist" msgstr "la souscription d'OID %u n'existe pas" -#: catalog/aclchk.c:5358 +#: catalog/aclchk.c:5426 #, c-format msgid "statistics object with OID %u does not exist" msgstr "l'objet statistique d'OID %u n'existe pas" -#: catalog/catalog.c:498 +#: catalog/catalog.c:378 +#, fuzzy, c-format +#| msgid "while inserting index tuple (%u,%u) in relation \"%s\"" +msgid "still finding an unused OID within relation \"%s\"" +msgstr "lors de l'insertion de l'enregistrement (%u, %u) de l'index dans la relation « %s »" + +#: catalog/catalog.c:380 +#, c-format +msgid "OID candidates were checked \"%llu\" times, but no unused OID is yet found." +msgstr "" + +#: catalog/catalog.c:403 +#, c-format +msgid "new OID has been assigned in relation \"%s\" after \"%llu\" retries" +msgstr "" + +#: catalog/catalog.c:532 #, c-format msgid "must be superuser to call pg_nextoid()" msgstr "doit être un super-utilisateur pour appeller pg_nextoid()" -#: catalog/catalog.c:506 +#: catalog/catalog.c:540 #, c-format msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() ne peut être utilisé que pour les catalogues système" -#: catalog/catalog.c:511 parser/parse_utilcmd.c:2064 +#: catalog/catalog.c:545 parser/parse_utilcmd.c:2274 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "l'index « %s » n'appartient pas à la table « %s »" -#: catalog/catalog.c:528 +#: catalog/catalog.c:562 #, c-format msgid "column \"%s\" is not of type oid" msgstr "la colonne « %s » n'est pas de type oid" -#: catalog/catalog.c:535 +#: catalog/catalog.c:569 #, c-format msgid "index \"%s\" is not the index for column \"%s\"" msgstr "l'index « %s » n'est pas un index de la colonne « %s »" -#: catalog/dependency.c:824 catalog/dependency.c:1062 +#: catalog/dependency.c:900 catalog/dependency.c:1139 #, c-format msgid "cannot drop %s because %s requires it" msgstr "n'a pas pu supprimer %s car il est requis par %s" -#: catalog/dependency.c:826 catalog/dependency.c:1064 +#: catalog/dependency.c:902 catalog/dependency.c:1141 #, c-format msgid "You can drop %s instead." msgstr "Vous pouvez supprimer %s à la place." -#: catalog/dependency.c:934 catalog/pg_shdepend.c:641 +#: catalog/dependency.c:1010 catalog/pg_shdepend.c:696 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "n'a pas pu supprimer %s car il est requis par le système de bases de données" -#: catalog/dependency.c:1130 -#, c-format -msgid "drop auto-cascades to %s" -msgstr "DROP cascade automatiquement sur %s" - -#: catalog/dependency.c:1142 catalog/dependency.c:1151 +#: catalog/dependency.c:1214 catalog/dependency.c:1223 #, c-format msgid "%s depends on %s" msgstr "%s dépend de %s" -#: catalog/dependency.c:1163 catalog/dependency.c:1172 +#: catalog/dependency.c:1235 catalog/dependency.c:1244 #, c-format msgid "drop cascades to %s" msgstr "DROP cascade sur %s" -#: catalog/dependency.c:1180 catalog/pg_shdepend.c:770 +#: catalog/dependency.c:1252 catalog/pg_shdepend.c:825 #, c-format msgid "" "\n" @@ -3683,620 +4017,647 @@ msgstr[1] "" "\n" "et %d autres objets (voir le journal applicatif du serveur pour une liste)" -#: catalog/dependency.c:1192 +#: catalog/dependency.c:1264 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "n'a pas pu supprimer %s car d'autres objets en dépendent" -#: catalog/dependency.c:1194 catalog/dependency.c:1195 catalog/dependency.c:1201 catalog/dependency.c:1202 catalog/dependency.c:1213 catalog/dependency.c:1214 commands/tablecmds.c:1215 commands/tablecmds.c:12215 commands/user.c:1082 commands/view.c:505 libpq/auth.c:332 replication/syncrep.c:1163 storage/lmgr/deadlock.c:1145 storage/lmgr/proc.c:1347 utils/adt/acl.c:5344 utils/misc/guc.c:6562 utils/misc/guc.c:6598 utils/misc/guc.c:6668 -#: utils/misc/guc.c:10714 utils/misc/guc.c:10748 utils/misc/guc.c:10782 utils/misc/guc.c:10816 utils/misc/guc.c:10851 +#: catalog/dependency.c:1266 catalog/dependency.c:1267 catalog/dependency.c:1273 catalog/dependency.c:1274 catalog/dependency.c:1285 catalog/dependency.c:1286 commands/tablecmds.c:1305 commands/tablecmds.c:13584 commands/tablespace.c:481 commands/user.c:1095 commands/view.c:495 libpq/auth.c:338 replication/syncrep.c:1044 storage/lmgr/deadlock.c:1152 storage/lmgr/proc.c:1433 utils/adt/acl.c:5250 utils/adt/jsonfuncs.c:618 utils/adt/jsonfuncs.c:624 utils/misc/guc.c:7148 utils/misc/guc.c:7184 utils/misc/guc.c:7254 utils/misc/guc.c:11434 utils/misc/guc.c:11468 utils/misc/guc.c:11502 utils/misc/guc.c:11545 utils/misc/guc.c:11587 #, c-format msgid "%s" msgstr "%s" -#: catalog/dependency.c:1196 catalog/dependency.c:1203 +#: catalog/dependency.c:1268 catalog/dependency.c:1275 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Utilisez DROP ... CASCADE pour supprimer aussi les objets dépendants." -#: catalog/dependency.c:1200 +#: catalog/dependency.c:1272 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "ne peut pas supprimer les objets désirés car d'autres objets en dépendent" #. translator: %d always has a value larger than 1 -#: catalog/dependency.c:1209 +#: catalog/dependency.c:1281 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" msgstr[0] "DROP cascade sur %d autre objet" msgstr[1] "DROP cascade sur %d autres objets" -#: catalog/dependency.c:1886 +#: catalog/dependency.c:1979 #, c-format msgid "constant of the type %s cannot be used here" msgstr "la constante de type %s ne peut pas être utilisée ici" -#: catalog/heap.c:332 +#: catalog/heap.c:331 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "droit refusé pour créer « %s.%s »" -#: catalog/heap.c:334 +#: catalog/heap.c:333 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Les modifications du catalogue système sont actuellement interdites." -#: catalog/heap.c:502 commands/tablecmds.c:2066 commands/tablecmds.c:2583 commands/tablecmds.c:5700 +#: catalog/heap.c:510 commands/tablecmds.c:2342 commands/tablecmds.c:2979 commands/tablecmds.c:6585 #, c-format msgid "tables can have at most %d columns" msgstr "les tables peuvent avoir au plus %d colonnes" -#: catalog/heap.c:520 commands/tablecmds.c:5985 +#: catalog/heap.c:528 commands/tablecmds.c:6893 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "le nom de la colonne « %s » entre en conflit avec le nom d'une colonne système" -#: catalog/heap.c:536 +#: catalog/heap.c:544 #, c-format msgid "column name \"%s\" specified more than once" msgstr "colonne « %s » spécifiée plus d'une fois" -#: catalog/heap.c:604 +#. translator: first %s is an integer not a name +#: catalog/heap.c:619 +#, c-format +msgid "partition key column %s has pseudo-type %s" +msgstr "la colonne de clé de partitionnement %s a le pseudo type %s" + +#: catalog/heap.c:624 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "la colonne « %s » a le pseudo type %s" -#: catalog/heap.c:634 +#: catalog/heap.c:655 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "le type composite %s ne peut pas être membre de lui-même" -#: catalog/heap.c:676 commands/createas.c:204 commands/createas.c:488 +#. translator: first %s is an integer not a name +#: catalog/heap.c:710 +#, c-format +msgid "no collation was derived for partition key column %s with collatable type %s" +msgstr "aucun collationnement n'a été dérivé pour la colonne « %s » sur la clé de partitionnement et de type collationnable %s" + +#: catalog/heap.c:716 commands/createas.c:203 commands/createas.c:506 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "aucun collationnement n'a été dérivé pour la colonne « %s » de type collationnable %s" -#: catalog/heap.c:1122 catalog/index.c:864 commands/tablecmds.c:3350 +#: catalog/heap.c:1198 catalog/index.c:870 commands/createas.c:411 commands/tablecmds.c:3860 #, c-format msgid "relation \"%s\" already exists" msgstr "la relation « %s » existe déjà" -#: catalog/heap.c:1138 catalog/pg_type.c:427 catalog/pg_type.c:749 commands/typecmds.c:240 commands/typecmds.c:791 commands/typecmds.c:1191 commands/typecmds.c:1403 commands/typecmds.c:2160 +#: catalog/heap.c:1214 catalog/pg_type.c:436 catalog/pg_type.c:842 catalog/pg_type.c:989 commands/typecmds.c:249 commands/typecmds.c:261 commands/typecmds.c:757 commands/typecmds.c:1172 commands/typecmds.c:1398 commands/typecmds.c:1590 commands/typecmds.c:2563 #, c-format msgid "type \"%s\" already exists" msgstr "le type « %s » existe déjà" -#: catalog/heap.c:1139 +#: catalog/heap.c:1215 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "Une relation a un type associé du même nom, donc vous devez utiliser un nom qui n'entre pas en conflit avec un type existant." -#: catalog/heap.c:1168 +#: catalog/heap.c:1244 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "OID du heap de pg_class non configuré en mode de mise à jour binaire" -#: catalog/heap.c:2368 +#: catalog/heap.c:2451 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "ne peut pas ajouter une contrainte NO INHERIT pour la table partitionnée « %s »" -#: catalog/heap.c:2638 +#: catalog/heap.c:2723 #, c-format msgid "check constraint \"%s\" already exists" msgstr "la contrainte de vérification « %s » existe déjà" -#: catalog/heap.c:2808 catalog/index.c:878 catalog/pg_constraint.c:669 commands/tablecmds.c:7379 +#: catalog/heap.c:2893 catalog/index.c:884 catalog/pg_constraint.c:670 commands/tablecmds.c:8606 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "la contrainte « %s » de la relation « %s » existe déjà" -#: catalog/heap.c:2815 +#: catalog/heap.c:2900 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "la contrainte « %s » entre en conflit avec la constrainte non héritée sur la relation « %s »" -#: catalog/heap.c:2826 +#: catalog/heap.c:2911 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte héritée sur la relation « %s »" -#: catalog/heap.c:2836 +#: catalog/heap.c:2921 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte NOT VALID sur la relation « %s »" -#: catalog/heap.c:2841 +#: catalog/heap.c:2926 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "assemblage de la contrainte « %s » avec une définition héritée" -#: catalog/heap.c:2943 +#: catalog/heap.c:3028 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "ne peut pas utiliser la colonne générée « %s » dans une expression de génération de colonne" -#: catalog/heap.c:2945 +#: catalog/heap.c:3030 #, c-format msgid "A generated column cannot reference another generated column." msgstr "Une colonne générée ne peut référencer une autre colonne générée." -#: catalog/heap.c:2997 +#: catalog/heap.c:3082 #, c-format msgid "generation expression is not immutable" msgstr "l'expression de génération n'est pas immuable" -#: catalog/heap.c:3025 rewrite/rewriteHandler.c:1189 +#: catalog/heap.c:3110 rewrite/rewriteHandler.c:1247 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "la colonne « %s » est de type %s alors que l'expression par défaut est de type %s" -#: catalog/heap.c:3030 commands/prepare.c:384 parser/parse_node.c:434 parser/parse_target.c:591 parser/parse_target.c:866 parser/parse_target.c:876 rewrite/rewriteHandler.c:1194 +#: catalog/heap.c:3115 commands/prepare.c:367 parser/analyze.c:2637 parser/parse_target.c:595 parser/parse_target.c:883 parser/parse_target.c:893 rewrite/rewriteHandler.c:1252 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Vous devez réécrire l'expression ou lui appliquer une transformation de type." -#: catalog/heap.c:3077 +#: catalog/heap.c:3162 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "seule la table « %s » peut être référencée dans la contrainte de vérification" -#: catalog/heap.c:3327 +#: catalog/heap.c:3460 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "combinaison ON COMMIT et clé étrangère non supportée" -#: catalog/heap.c:3328 +#: catalog/heap.c:3461 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "" "La table « %s » référence « %s » mais elles n'ont pas la même valeur pour le\n" "paramètre ON COMMIT." -#: catalog/heap.c:3333 +#: catalog/heap.c:3466 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "ne peut pas tronquer une table référencée dans une contrainte de clé étrangère" -#: catalog/heap.c:3334 +#: catalog/heap.c:3467 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "La table « %s » référence « %s »." -#: catalog/heap.c:3336 +#: catalog/heap.c:3469 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Tronquez la table « %s » en même temps, ou utilisez TRUNCATE ... CASCADE." -#: catalog/index.c:219 parser/parse_utilcmd.c:1873 parser/parse_utilcmd.c:1972 +#: catalog/index.c:223 parser/parse_utilcmd.c:2180 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "les clés primaires multiples ne sont pas autorisées pour la table « %s »" -#: catalog/index.c:237 +#: catalog/index.c:241 #, c-format msgid "primary keys cannot be expressions" msgstr "les clés primaires ne peuvent pas être des expressions" -#: catalog/index.c:254 +#: catalog/index.c:258 #, c-format msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "la colonne de clé primaire « %s » n'est pas marquée NOT NULL" -#: catalog/index.c:763 catalog/index.c:1816 +#: catalog/index.c:769 catalog/index.c:2070 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "les index définis par l'utilisateur sur les tables du catalogue système ne sont pas supportés" -#: catalog/index.c:803 +#: catalog/index.c:809 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "les collationnements non-déterministes ne sont pas supportés pour la classe d'opérateurs « %s »" -#: catalog/index.c:818 +#: catalog/index.c:824 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "" "la création en parallèle d'un index sur les tables du catalogue système\n" "n'est pas supportée" -#: catalog/index.c:827 catalog/index.c:1272 +#: catalog/index.c:833 catalog/index.c:1445 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "la création de manière concurrente d'un index pour les contraintes d'exclusion n'est pas supportée" -#: catalog/index.c:836 +#: catalog/index.c:842 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "les index partagés ne peuvent pas être créés après initdb" -#: catalog/index.c:856 commands/createas.c:253 commands/sequence.c:154 parser/parse_utilcmd.c:208 +#: catalog/index.c:862 commands/createas.c:417 commands/sequence.c:154 parser/parse_utilcmd.c:212 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "la relation « %s » existe déjà, poursuite du traitement" -#: catalog/index.c:906 +#: catalog/index.c:912 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "OID de l'index de pg_class non configuré en mode de mise à jour binaire" -#: catalog/index.c:2092 +#: catalog/index.c:1324 +#, fuzzy, c-format +#| msgid "index \"%s\" contains %.0f row versions, but table contains %.0f row versions" +msgid "index \"%s\" depends on collation \"%s\" version \"%s\", but the current version is \"%s\"" +msgstr "" +"l'index « %s » contient %.0f versions de ligne, mais la table contient %.0f\n" +"versions de ligne" + +#: catalog/index.c:1329 #, c-format -msgid "DROP INDEX CONCURRENTLY must be first action in transaction" -msgstr "DROP INDEX CONCURRENTLY doit être la première action dans une transaction" +msgid "The index may be corrupted due to changes in sort order." +msgstr "" -#: catalog/index.c:2789 +#: catalog/index.c:1330 #, c-format -msgid "building index \"%s\" on table \"%s\" serially" -msgstr "construction de l'index « %s » sur la table « %s » séquentiellement" +msgid "REINDEX to avoid the risk of corruption." +msgstr "" -#: catalog/index.c:2794 +#: catalog/index.c:2356 #, c-format -msgid "building index \"%s\" on table \"%s\" with request for %d parallel worker" -msgid_plural "building index \"%s\" on table \"%s\" with request for %d parallel workers" -msgstr[0] "construction de l'index « %s » sur la table « %s » avec une demande de %d processus parallèle" -msgstr[1] "construction de l'index « %s » sur la table « %s » avec une demande de %d processus parallèles" +msgid "DROP INDEX CONCURRENTLY must be first action in transaction" +msgstr "DROP INDEX CONCURRENTLY doit être la première action dans une transaction" -#: catalog/index.c:3422 +#: catalog/index.c:3741 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "ne peut pas ré-indexer les tables temporaires des autres sessions" -#: catalog/index.c:3553 +#: catalog/index.c:3752 commands/indexcmds.c:3426 +#, c-format +msgid "cannot reindex invalid index on TOAST table" +msgstr "ne peut pas réindexer un index invalide sur une table TOAST" + +#: catalog/index.c:3768 commands/indexcmds.c:3306 commands/indexcmds.c:3450 commands/tablecmds.c:3299 +#, c-format +msgid "cannot move system relation \"%s\"" +msgstr "ne peut pas déplacer la colonne système « %s »" + +#: catalog/index.c:3913 #, c-format msgid "index \"%s\" was reindexed" msgstr "l'index « %s » a été réindexée" -#: catalog/index.c:3627 commands/indexcmds.c:2882 +#: catalog/index.c:4047 #, c-format -msgid "REINDEX of partitioned tables is not yet implemented, skipping \"%s\"" -msgstr "REINDEX n'est pas encore implémenté pour les tables partitionnées, « %s » ignoré" +msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" +msgstr "ne peut pas réindexer l'index invalide « %s.%s » sur une table TOAST, ignoré" -#: catalog/namespace.c:249 catalog/namespace.c:453 catalog/namespace.c:545 commands/trigger.c:5394 +#: catalog/namespace.c:257 catalog/namespace.c:461 catalog/namespace.c:553 commands/trigger.c:5132 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "les références entre bases de données ne sont pas implémentées : « %s.%s.%s »" -#: catalog/namespace.c:306 +#: catalog/namespace.c:314 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "les tables temporaires ne peuvent pas spécifier un nom de schéma" -#: catalog/namespace.c:387 +#: catalog/namespace.c:395 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "n'a pas pu obtenir un verrou sur la relation « %s.%s »" -#: catalog/namespace.c:392 commands/lockcmds.c:162 commands/lockcmds.c:249 +#: catalog/namespace.c:400 commands/lockcmds.c:143 commands/lockcmds.c:228 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "n'a pas pu obtenir un verrou sur la relation « %s »" -#: catalog/namespace.c:420 parser/parse_relation.c:1172 +#: catalog/namespace.c:428 parser/parse_relation.c:1362 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "la relation « %s.%s » n'existe pas" -#: catalog/namespace.c:425 parser/parse_relation.c:1185 parser/parse_relation.c:1193 +#: catalog/namespace.c:433 parser/parse_relation.c:1375 parser/parse_relation.c:1383 #, c-format msgid "relation \"%s\" does not exist" msgstr "la relation « %s » n'existe pas" -#: catalog/namespace.c:491 catalog/namespace.c:3022 commands/extension.c:1469 commands/extension.c:1475 +#: catalog/namespace.c:499 catalog/namespace.c:3029 commands/extension.c:1519 commands/extension.c:1525 #, c-format msgid "no schema has been selected to create in" msgstr "aucun schéma n'a été sélectionné pour cette création" -#: catalog/namespace.c:643 catalog/namespace.c:656 +#: catalog/namespace.c:651 catalog/namespace.c:664 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "ne peut pas créer les relations dans les schémas temporaires d'autres sessions" -#: catalog/namespace.c:647 +#: catalog/namespace.c:655 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "ne peut pas créer une relation temporaire dans un schéma non temporaire" -#: catalog/namespace.c:662 +#: catalog/namespace.c:670 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "seules les relations temporaires peuvent être créées dans des schémas temporaires" -#: catalog/namespace.c:2214 +#: catalog/namespace.c:2221 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "l'objet statistique « %s » n'existe pas" -#: catalog/namespace.c:2337 +#: catalog/namespace.c:2344 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "l'analyseur de recherche plein texte « %s » n'existe pas" -#: catalog/namespace.c:2463 +#: catalog/namespace.c:2470 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "le dictionnaire de recherche plein texte « %s » n'existe pas" -#: catalog/namespace.c:2590 +#: catalog/namespace.c:2597 #, c-format msgid "text search template \"%s\" does not exist" msgstr "le modèle de recherche plein texte « %s » n'existe pas" -#: catalog/namespace.c:2716 commands/tsearchcmds.c:1197 utils/cache/ts_cache.c:617 +#: catalog/namespace.c:2723 commands/tsearchcmds.c:1121 utils/cache/ts_cache.c:613 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "la configuration de recherche plein texte « %s » n'existe pas" -#: catalog/namespace.c:2829 parser/parse_expr.c:866 parser/parse_target.c:1221 +#: catalog/namespace.c:2836 parser/parse_expr.c:810 parser/parse_target.c:1256 #, c-format msgid "cross-database references are not implemented: %s" msgstr "les références entre bases de données ne sont pas implémentées : %s" -#: catalog/namespace.c:2835 gram.y:14731 gram.y:16165 parser/parse_expr.c:873 parser/parse_target.c:1228 +#: catalog/namespace.c:2842 gram.y:15116 gram.y:17074 parser/parse_expr.c:817 parser/parse_target.c:1263 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "mauvaise qualification du nom (trop de points entre les noms) : %s" -#: catalog/namespace.c:2965 +#: catalog/namespace.c:2972 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "ne peut pas déplacer les objets dans ou à partir des schémas temporaires" -#: catalog/namespace.c:2971 +#: catalog/namespace.c:2978 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "ne peut pas déplacer les objets dans ou à partir des schémas TOAST" -#: catalog/namespace.c:3044 commands/schemacmds.c:257 commands/schemacmds.c:337 commands/tablecmds.c:1160 +#: catalog/namespace.c:3051 commands/schemacmds.c:233 commands/schemacmds.c:313 commands/tablecmds.c:1250 #, c-format msgid "schema \"%s\" does not exist" msgstr "le schéma « %s » n'existe pas" -#: catalog/namespace.c:3075 +#: catalog/namespace.c:3082 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "nom de relation incorrecte (trop de points entre les noms) : %s" -#: catalog/namespace.c:3609 +#: catalog/namespace.c:3645 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "le collationnement « %s » pour l'encodage « %s » n'existe pas" -#: catalog/namespace.c:3664 +#: catalog/namespace.c:3700 #, c-format msgid "conversion \"%s\" does not exist" msgstr "la conversion « %s » n'existe pas" -#: catalog/namespace.c:3904 +#: catalog/namespace.c:3964 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "droit refusé pour la création de tables temporaires dans la base de données « %s »" -#: catalog/namespace.c:3920 +#: catalog/namespace.c:3980 #, c-format msgid "cannot create temporary tables during recovery" msgstr "ne peut pas créer des tables temporaires lors de la restauration" -#: catalog/namespace.c:3926 +#: catalog/namespace.c:3986 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "ne peut pas créer de tables temporaires pendant une opération parallèle" -#: catalog/namespace.c:4209 commands/tablespace.c:1205 commands/variable.c:64 utils/misc/guc.c:10883 utils/misc/guc.c:10961 +#: catalog/namespace.c:4285 commands/tablespace.c:1217 commands/variable.c:64 utils/misc/guc.c:11619 utils/misc/guc.c:11697 #, c-format msgid "List syntax is invalid." msgstr "La syntaxe de la liste est invalide." -#: catalog/objectaddress.c:1274 catalog/pg_publication.c:66 commands/policy.c:95 commands/policy.c:395 commands/policy.c:485 commands/tablecmds.c:224 commands/tablecmds.c:266 commands/tablecmds.c:1922 commands/tablecmds.c:5173 commands/tablecmds.c:10387 +#: catalog/objectaddress.c:1369 catalog/pg_publication.c:57 commands/policy.c:95 commands/policy.c:375 commands/policy.c:465 commands/tablecmds.c:244 commands/tablecmds.c:286 commands/tablecmds.c:2152 commands/tablecmds.c:6034 commands/tablecmds.c:11582 #, c-format msgid "\"%s\" is not a table" msgstr "« %s » n'est pas une table" -#: catalog/objectaddress.c:1281 commands/tablecmds.c:236 commands/tablecmds.c:5203 commands/tablecmds.c:14922 commands/view.c:138 +#: catalog/objectaddress.c:1376 commands/tablecmds.c:256 commands/tablecmds.c:6064 commands/tablecmds.c:16340 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "« %s » n'est pas une vue" -#: catalog/objectaddress.c:1288 commands/matview.c:175 commands/tablecmds.c:242 commands/tablecmds.c:14927 +#: catalog/objectaddress.c:1383 commands/matview.c:175 commands/tablecmds.c:262 commands/tablecmds.c:16345 #, c-format msgid "\"%s\" is not a materialized view" msgstr "« %s » n'est pas une vue matérialisée" -#: catalog/objectaddress.c:1295 commands/tablecmds.c:260 commands/tablecmds.c:5206 commands/tablecmds.c:14932 +#: catalog/objectaddress.c:1390 commands/tablecmds.c:280 commands/tablecmds.c:6067 commands/tablecmds.c:16350 #, c-format msgid "\"%s\" is not a foreign table" msgstr "« %s » n'est pas une table distante" -#: catalog/objectaddress.c:1336 +#: catalog/objectaddress.c:1431 #, c-format msgid "must specify relation and object name" msgstr "doit indiquer les noms de relation et d'objet" -#: catalog/objectaddress.c:1412 catalog/objectaddress.c:1465 +#: catalog/objectaddress.c:1507 catalog/objectaddress.c:1560 #, c-format msgid "column name must be qualified" msgstr "le nom de la colonne doit être qualifié" -#: catalog/objectaddress.c:1512 +#: catalog/objectaddress.c:1607 #, c-format msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "la valeur par défaut de la colonne « %s » de la relation « %s » n'existe pas" -#: catalog/objectaddress.c:1549 commands/functioncmds.c:132 commands/tablecmds.c:252 commands/typecmds.c:3321 parser/parse_type.c:244 parser/parse_type.c:273 parser/parse_type.c:846 utils/adt/acl.c:4451 +#: catalog/objectaddress.c:1644 commands/functioncmds.c:136 commands/tablecmds.c:272 commands/typecmds.c:274 commands/typecmds.c:3713 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 utils/adt/acl.c:4411 #, c-format msgid "type \"%s\" does not exist" msgstr "le type « %s » n'existe pas" -#: catalog/objectaddress.c:1668 +#: catalog/objectaddress.c:1763 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "l'opérateur %d (%s, %s) de %s n'existe pas" -#: catalog/objectaddress.c:1699 +#: catalog/objectaddress.c:1794 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "la fonction %d (%s, %s) de %s n'existe pas" -#: catalog/objectaddress.c:1750 catalog/objectaddress.c:1776 +#: catalog/objectaddress.c:1845 catalog/objectaddress.c:1871 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "la correspondance pour l'utilisateur « %s » sur le serveur « %s » n'existe pas" -#: catalog/objectaddress.c:1765 commands/foreigncmds.c:433 commands/foreigncmds.c:1016 commands/foreigncmds.c:1396 foreign/foreign.c:723 +#: catalog/objectaddress.c:1860 commands/foreigncmds.c:430 commands/foreigncmds.c:988 commands/foreigncmds.c:1347 foreign/foreign.c:723 #, c-format msgid "server \"%s\" does not exist" msgstr "le serveur « %s » n'existe pas" -#: catalog/objectaddress.c:1832 +#: catalog/objectaddress.c:1927 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "la relation de publication « %s » dans la publication « %s » n'existe pas" -#: catalog/objectaddress.c:1894 +#: catalog/objectaddress.c:1989 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "type d'objet de droits par défaut non reconnu « %c »" -#: catalog/objectaddress.c:1895 +#: catalog/objectaddress.c:1990 #, c-format msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." msgstr "Les types d'objet valides sont « %c », « %c », « %c », « %c », « %c »." -#: catalog/objectaddress.c:1946 +#: catalog/objectaddress.c:2041 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "le droit par défaut pour l'utilisateur « %s » dans le schéma « %s » de %s n'existe pas" -#: catalog/objectaddress.c:1951 +#: catalog/objectaddress.c:2046 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "le droit par défaut pour l'utilisateur « %s » sur %s n'existe pas" -#: catalog/objectaddress.c:1978 catalog/objectaddress.c:2036 catalog/objectaddress.c:2093 +#: catalog/objectaddress.c:2073 catalog/objectaddress.c:2131 catalog/objectaddress.c:2188 #, c-format msgid "name or argument lists may not contain nulls" msgstr "le nom ou les listes d'arguments ne peuvent pas contenir de valeurs NULL" -#: catalog/objectaddress.c:2012 +#: catalog/objectaddress.c:2107 #, c-format msgid "unsupported object type \"%s\"" msgstr "type d'objet « %s » non supporté" -#: catalog/objectaddress.c:2032 catalog/objectaddress.c:2050 catalog/objectaddress.c:2191 +#: catalog/objectaddress.c:2127 catalog/objectaddress.c:2145 catalog/objectaddress.c:2286 #, c-format msgid "name list length must be exactly %d" msgstr "la liste de nom doit être exactement de longueur %d" -#: catalog/objectaddress.c:2054 +#: catalog/objectaddress.c:2149 #, c-format msgid "large object OID may not be null" msgstr "l'OID du Large Object peut ne pas être NULL" -#: catalog/objectaddress.c:2063 catalog/objectaddress.c:2126 catalog/objectaddress.c:2133 +#: catalog/objectaddress.c:2158 catalog/objectaddress.c:2221 catalog/objectaddress.c:2228 #, c-format msgid "name list length must be at least %d" msgstr "la longueur de la liste de nom doit au moins être %d" -#: catalog/objectaddress.c:2119 catalog/objectaddress.c:2140 +#: catalog/objectaddress.c:2214 catalog/objectaddress.c:2235 #, c-format msgid "argument list length must be exactly %d" msgstr "la longueur de la liste d'arguments doit être %d exactement" -#: catalog/objectaddress.c:2392 libpq/be-fsstubs.c:321 +#: catalog/objectaddress.c:2487 libpq/be-fsstubs.c:321 #, c-format msgid "must be owner of large object %u" msgstr "doit être le propriétaire du Large Object %u" -#: catalog/objectaddress.c:2407 commands/functioncmds.c:1535 +#: catalog/objectaddress.c:2502 commands/functioncmds.c:1555 #, c-format msgid "must be owner of type %s or type %s" msgstr "doit être le propriétaire du type %s ou du type %s" -#: catalog/objectaddress.c:2457 catalog/objectaddress.c:2474 +#: catalog/objectaddress.c:2552 catalog/objectaddress.c:2569 #, c-format msgid "must be superuser" msgstr "doit être super-utilisateur" -#: catalog/objectaddress.c:2464 +#: catalog/objectaddress.c:2559 #, c-format msgid "must have CREATEROLE privilege" msgstr "doit avoir l'attribut CREATEROLE" -#: catalog/objectaddress.c:2543 +#: catalog/objectaddress.c:2638 #, c-format msgid "unrecognized object type \"%s\"" msgstr "type d'objet non reconnu « %s »" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2764 +#: catalog/objectaddress.c:2880 #, c-format msgid "column %s of %s" msgstr "colonne %s de %s" -#: catalog/objectaddress.c:2774 +#: catalog/objectaddress.c:2894 #, c-format msgid "function %s" msgstr "fonction %s" -#: catalog/objectaddress.c:2779 +#: catalog/objectaddress.c:2906 #, c-format msgid "type %s" msgstr "type %s" -#: catalog/objectaddress.c:2809 +#: catalog/objectaddress.c:2943 #, c-format msgid "cast from %s to %s" msgstr "conversion de %s en %s" -#: catalog/objectaddress.c:2837 +#: catalog/objectaddress.c:2976 #, c-format msgid "collation %s" msgstr "collationnement %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2863 +#: catalog/objectaddress.c:3007 #, c-format msgid "constraint %s on %s" msgstr "contrainte %s sur %s" -#: catalog/objectaddress.c:2869 +#: catalog/objectaddress.c:3013 #, c-format msgid "constraint %s" msgstr "contrainte %s" -#: catalog/objectaddress.c:2896 +#: catalog/objectaddress.c:3045 #, c-format msgid "conversion %s" msgstr "conversion %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:2935 +#: catalog/objectaddress.c:3091 #, c-format msgid "default value for %s" msgstr "valeur par défaut pour %s" -#: catalog/objectaddress.c:2944 +#: catalog/objectaddress.c:3105 #, c-format msgid "language %s" msgstr "langage %s" -#: catalog/objectaddress.c:2949 +#: catalog/objectaddress.c:3113 #, c-format msgid "large object %u" msgstr "« Large Object » %u" -#: catalog/objectaddress.c:2954 +#: catalog/objectaddress.c:3126 #, c-format msgid "operator %s" msgstr "opérateur %s" -#: catalog/objectaddress.c:2986 +#: catalog/objectaddress.c:3163 #, c-format msgid "operator class %s for access method %s" msgstr "classe d'opérateur %s pour la méthode d'accès %s" -#: catalog/objectaddress.c:3009 +#: catalog/objectaddress.c:3191 #, c-format msgid "access method %s" msgstr "méthode d'accès %s" @@ -4305,7 +4666,7 @@ msgstr "méthode d'accès %s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3051 +#: catalog/objectaddress.c:3240 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "opérateur %d (%s, %s) de %s : %s" @@ -4314,230 +4675,225 @@ msgstr "opérateur %d (%s, %s) de %s : %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3101 +#: catalog/objectaddress.c:3297 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "fonction %d (%s, %s) de %s : %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3145 +#: catalog/objectaddress.c:3349 #, c-format msgid "rule %s on %s" msgstr "règle %s sur %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3183 +#: catalog/objectaddress.c:3395 #, c-format msgid "trigger %s on %s" msgstr "trigger %s sur %s" -#: catalog/objectaddress.c:3199 +#: catalog/objectaddress.c:3415 #, c-format msgid "schema %s" msgstr "schéma %s" -#: catalog/objectaddress.c:3222 +#: catalog/objectaddress.c:3443 #, c-format msgid "statistics object %s" msgstr "objet statistique %s" -#: catalog/objectaddress.c:3249 +#: catalog/objectaddress.c:3474 #, c-format msgid "text search parser %s" msgstr "analyseur %s de la recherche plein texte" -#: catalog/objectaddress.c:3275 +#: catalog/objectaddress.c:3505 #, c-format msgid "text search dictionary %s" msgstr "dictionnaire %s de la recherche plein texte" -#: catalog/objectaddress.c:3301 +#: catalog/objectaddress.c:3536 #, c-format msgid "text search template %s" msgstr "modèle %s de la recherche plein texte" -#: catalog/objectaddress.c:3327 +#: catalog/objectaddress.c:3567 #, c-format msgid "text search configuration %s" msgstr "configuration %s de recherche plein texte" -#: catalog/objectaddress.c:3336 +#: catalog/objectaddress.c:3580 #, c-format msgid "role %s" msgstr "rôle %s" -#: catalog/objectaddress.c:3349 +#: catalog/objectaddress.c:3596 #, c-format msgid "database %s" msgstr "base de données %s" -#: catalog/objectaddress.c:3361 +#: catalog/objectaddress.c:3612 #, c-format msgid "tablespace %s" msgstr "tablespace %s" -#: catalog/objectaddress.c:3370 +#: catalog/objectaddress.c:3623 #, c-format msgid "foreign-data wrapper %s" msgstr "wrapper de données distantes %s" -#: catalog/objectaddress.c:3379 +#: catalog/objectaddress.c:3633 #, c-format msgid "server %s" msgstr "serveur %s" -#: catalog/objectaddress.c:3407 +#: catalog/objectaddress.c:3666 #, c-format msgid "user mapping for %s on server %s" msgstr "correspondance utilisateur pour %s sur le serveur %s" -#: catalog/objectaddress.c:3452 +#: catalog/objectaddress.c:3718 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "droits par défaut pour les nouvelles relations appartenant au rôle %s dans le schéma %s" -#: catalog/objectaddress.c:3456 +#: catalog/objectaddress.c:3722 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "droits par défaut pour les nouvelles relations appartenant au rôle %s" -#: catalog/objectaddress.c:3462 +#: catalog/objectaddress.c:3728 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "droits par défaut pour les nouvelles séquences appartenant au rôle %s dans le schéma %s" -#: catalog/objectaddress.c:3466 +#: catalog/objectaddress.c:3732 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "droits par défaut pour les nouvelles séquences appartenant au rôle %s" -#: catalog/objectaddress.c:3472 +#: catalog/objectaddress.c:3738 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "droits par défaut pour les nouvelles fonctions appartenant au rôle %s dans le schéma %s" -#: catalog/objectaddress.c:3476 +#: catalog/objectaddress.c:3742 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "droits par défaut pour les nouvelles fonctions appartenant au rôle %s" -#: catalog/objectaddress.c:3482 +#: catalog/objectaddress.c:3748 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "droits par défaut pour les nouveaux types appartenant au rôle %s dans le schéma %s" -#: catalog/objectaddress.c:3486 +#: catalog/objectaddress.c:3752 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "droits par défaut pour les nouveaux types appartenant au rôle %s" -#: catalog/objectaddress.c:3492 +#: catalog/objectaddress.c:3758 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "droits par défaut pour les nouveaux schémas appartenant au rôle %s" -#: catalog/objectaddress.c:3499 +#: catalog/objectaddress.c:3765 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "droits par défaut appartenant au rôle %s dans le schéma %s" -#: catalog/objectaddress.c:3503 +#: catalog/objectaddress.c:3769 #, c-format msgid "default privileges belonging to role %s" msgstr "droits par défaut appartenant au rôle %s" -#: catalog/objectaddress.c:3521 +#: catalog/objectaddress.c:3791 #, c-format msgid "extension %s" msgstr "extension %s" -#: catalog/objectaddress.c:3534 +#: catalog/objectaddress.c:3808 #, c-format msgid "event trigger %s" msgstr "trigger sur événement %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3570 +#: catalog/objectaddress.c:3852 #, c-format msgid "policy %s on %s" msgstr "politique %s sur %s" -#: catalog/objectaddress.c:3580 +#: catalog/objectaddress.c:3865 #, c-format msgid "publication %s" msgstr "publication %s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3606 +#: catalog/objectaddress.c:3893 #, c-format msgid "publication of %s in publication %s" msgstr "publication de %s dans la publication %s" -#: catalog/objectaddress.c:3615 +#: catalog/objectaddress.c:3905 #, c-format msgid "subscription %s" msgstr "souscription %s" -#: catalog/objectaddress.c:3634 +#: catalog/objectaddress.c:3926 #, c-format msgid "transform for %s language %s" msgstr "transformation pour %s langage %s" -#: catalog/objectaddress.c:3697 +#: catalog/objectaddress.c:3997 #, c-format msgid "table %s" msgstr "table %s" -#: catalog/objectaddress.c:3702 +#: catalog/objectaddress.c:4002 #, c-format msgid "index %s" msgstr "index %s" -#: catalog/objectaddress.c:3706 +#: catalog/objectaddress.c:4006 #, c-format msgid "sequence %s" msgstr "séquence %s" -#: catalog/objectaddress.c:3710 +#: catalog/objectaddress.c:4010 #, c-format msgid "toast table %s" msgstr "table TOAST %s" -#: catalog/objectaddress.c:3714 +#: catalog/objectaddress.c:4014 #, c-format msgid "view %s" msgstr "vue %s" -#: catalog/objectaddress.c:3718 +#: catalog/objectaddress.c:4018 #, c-format msgid "materialized view %s" msgstr "vue matérialisée %s" -#: catalog/objectaddress.c:3722 +#: catalog/objectaddress.c:4022 #, c-format msgid "composite type %s" msgstr "type composite %s" -#: catalog/objectaddress.c:3726 +#: catalog/objectaddress.c:4026 #, c-format msgid "foreign table %s" msgstr "table distante %s" -#: catalog/objectaddress.c:3731 +#: catalog/objectaddress.c:4031 #, c-format msgid "relation %s" msgstr "relation %s" -#: catalog/objectaddress.c:3768 +#: catalog/objectaddress.c:4072 #, c-format msgid "operator family %s for access method %s" msgstr "famille d'opérateur %s pour la méthode d'accès %s" -#: catalog/partition.c:214 commands/analyze.c:1359 commands/indexcmds.c:1090 commands/tablecmds.c:1091 commands/tablecmds.c:8176 commands/tablecmds.c:8319 commands/tablecmds.c:8510 commands/tablecmds.c:8647 commands/tablecmds.c:10478 commands/tablecmds.c:15865 commands/tablecmds.c:16442 executor/execExprInterp.c:3303 executor/execMain.c:1863 executor/execMain.c:1949 executor/execMain.c:1999 executor/execMain.c:2107 -#: executor/execPartition.c:590 executor/execPartition.c:650 executor/execPartition.c:794 executor/execPartition.c:908 executor/execPartition.c:941 executor/execPartition.c:1046 executor/nodeModifyTable.c:1960 -msgid "could not convert row type" -msgstr "n'a pas pu convertir le type de ligne" - #: catalog/pg_aggregate.c:129 #, c-format msgid "aggregates cannot have more than %d argument" @@ -4545,32 +4901,27 @@ msgid_plural "aggregates cannot have more than %d arguments" msgstr[0] "les agrégats ne peuvent avoir plus de %d argument" msgstr[1] "les agrégats ne peuvent avoir plus de %d arguments" -#: catalog/pg_aggregate.c:152 catalog/pg_aggregate.c:162 +#: catalog/pg_aggregate.c:144 catalog/pg_aggregate.c:158 #, c-format msgid "cannot determine transition data type" msgstr "n'a pas pu déterminer le type de données de transition" -#: catalog/pg_aggregate.c:153 catalog/pg_aggregate.c:163 -#, c-format -msgid "An aggregate using a polymorphic transition type must have at least one polymorphic argument." -msgstr "Un agrégat utilisant un type de transition polymorphique doit avoir au moins un argument polymorphique." - -#: catalog/pg_aggregate.c:176 +#: catalog/pg_aggregate.c:173 #, c-format msgid "a variadic ordered-set aggregate must use VARIADIC type ANY" msgstr "un agrégat à ensemble trié variadique doit être VARIADIC sur le type ANY" -#: catalog/pg_aggregate.c:202 +#: catalog/pg_aggregate.c:199 #, c-format msgid "a hypothetical-set aggregate must have direct arguments matching its aggregated arguments" msgstr "un agrégat d'ensemble hypothétique doit avoir des arguments directs correspondant aux arguments agrégés" -#: catalog/pg_aggregate.c:249 catalog/pg_aggregate.c:293 +#: catalog/pg_aggregate.c:246 catalog/pg_aggregate.c:290 #, c-format msgid "return type of transition function %s is not %s" msgstr "le type de retour de la fonction de transition %s n'est pas %s" -#: catalog/pg_aggregate.c:269 catalog/pg_aggregate.c:312 +#: catalog/pg_aggregate.c:266 catalog/pg_aggregate.c:309 #, c-format msgid "must not omit initial value when transition function is strict and transition type is not compatible with input type" msgstr "" @@ -4578,148 +4929,142 @@ msgstr "" "stricte et que le type de transition n'est pas compatible avec le type en\n" "entrée" -#: catalog/pg_aggregate.c:338 +#: catalog/pg_aggregate.c:335 #, c-format msgid "return type of inverse transition function %s is not %s" msgstr "le type de retour de la fonction de transition inverse %s n'est pas %s" -#: catalog/pg_aggregate.c:355 executor/nodeWindowAgg.c:2851 +#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:2852 #, c-format msgid "strictness of aggregate's forward and inverse transition functions must match" msgstr "la fonction de transition d'agrégat en déplacement ne doit pas renvoyer null" -#: catalog/pg_aggregate.c:399 catalog/pg_aggregate.c:552 +#: catalog/pg_aggregate.c:396 catalog/pg_aggregate.c:554 #, c-format msgid "final function with extra arguments must not be declared STRICT" msgstr "la fonction finale avec des arguments supplémentaires ne doit pas être déclarée avec la clause STRICT" -#: catalog/pg_aggregate.c:430 +#: catalog/pg_aggregate.c:427 #, c-format msgid "return type of combine function %s is not %s" msgstr "le type de retour de la fonction de d'unification %s n'est pas %s" -#: catalog/pg_aggregate.c:442 executor/nodeAgg.c:3003 +#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:4127 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "la fonction d'unification avec le type de transaction %s ne doit pas être déclaré STRICT" -#: catalog/pg_aggregate.c:461 +#: catalog/pg_aggregate.c:458 #, c-format msgid "return type of serialization function %s is not %s" msgstr "le type de retour de la fonction de sérialisation %s n'est pas %s" -#: catalog/pg_aggregate.c:482 +#: catalog/pg_aggregate.c:479 #, c-format msgid "return type of deserialization function %s is not %s" msgstr "le type de retour de la fonction de désérialisation %s n'est pas %s" -#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:243 catalog/pg_proc.c:250 +#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:189 catalog/pg_proc.c:223 #, c-format msgid "cannot determine result data type" msgstr "n'a pas pu déterminer le type de données en résultat" -#: catalog/pg_aggregate.c:499 -#, c-format -msgid "An aggregate returning a polymorphic type must have at least one polymorphic argument." -msgstr "Un agrégat renvoyant un type polymorphique doit avoir au moins un argument de type polymorphique." - -#: catalog/pg_aggregate.c:511 catalog/pg_proc.c:256 +#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:202 catalog/pg_proc.c:231 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "utilisation non sûre des pseudo-types « INTERNAL »" -#: catalog/pg_aggregate.c:512 catalog/pg_proc.c:257 -#, c-format -msgid "A function returning \"internal\" must have at least one \"internal\" argument." -msgstr "Une fonction renvoyant « internal » doit avoir au moins un argument du type « internal »." - -#: catalog/pg_aggregate.c:565 +#: catalog/pg_aggregate.c:567 #, c-format msgid "moving-aggregate implementation returns type %s, but plain implementation returns type %s" msgstr "l'impémentation d'aggrégat glissant retourne le type %s, mais l'implémentation standard retourne le type %s" -#: catalog/pg_aggregate.c:576 +#: catalog/pg_aggregate.c:578 #, c-format msgid "sort operator can only be specified for single-argument aggregates" msgstr "l'opérateur de tri peut seulement être indiqué pour des agrégats à un seul argument" -#: catalog/pg_aggregate.c:703 catalog/pg_proc.c:396 +#: catalog/pg_aggregate.c:706 catalog/pg_proc.c:384 #, c-format msgid "cannot change routine kind" msgstr "ne peut pas modifier le type de routine" -#: catalog/pg_aggregate.c:705 +#: catalog/pg_aggregate.c:708 #, c-format msgid "\"%s\" is an ordinary aggregate function." msgstr "« %s » est une fonction d'agrégat ordinaire." -#: catalog/pg_aggregate.c:707 +#: catalog/pg_aggregate.c:710 #, c-format msgid "\"%s\" is an ordered-set aggregate." msgstr "« %s » est un agrégat d'ensemble trié." -#: catalog/pg_aggregate.c:709 +#: catalog/pg_aggregate.c:712 #, c-format msgid "\"%s\" is a hypothetical-set aggregate." msgstr "« %s » est un agrégat d'ensemble hypothétique." -#: catalog/pg_aggregate.c:714 +#: catalog/pg_aggregate.c:717 #, c-format msgid "cannot change number of direct arguments of an aggregate function" msgstr "ne peut pas changer le nombre d'arguments directs d'une fonction d'agrégation" -#: catalog/pg_aggregate.c:869 commands/functioncmds.c:665 commands/typecmds.c:1751 commands/typecmds.c:1802 commands/typecmds.c:1833 commands/typecmds.c:1856 commands/typecmds.c:1877 commands/typecmds.c:1904 commands/typecmds.c:1931 commands/typecmds.c:2008 commands/typecmds.c:2050 parser/parse_func.c:418 parser/parse_func.c:447 parser/parse_func.c:472 parser/parse_func.c:486 parser/parse_func.c:606 parser/parse_func.c:626 -#: parser/parse_func.c:2144 parser/parse_func.c:2335 +#: catalog/pg_aggregate.c:858 commands/functioncmds.c:675 commands/typecmds.c:1992 commands/typecmds.c:2038 commands/typecmds.c:2090 commands/typecmds.c:2127 commands/typecmds.c:2161 commands/typecmds.c:2195 commands/typecmds.c:2229 commands/typecmds.c:2258 commands/typecmds.c:2345 commands/typecmds.c:2387 parser/parse_func.c:416 parser/parse_func.c:447 parser/parse_func.c:474 parser/parse_func.c:488 parser/parse_func.c:610 parser/parse_func.c:630 parser/parse_func.c:2143 parser/parse_func.c:2334 #, c-format msgid "function %s does not exist" msgstr "la fonction %s n'existe pas" -#: catalog/pg_aggregate.c:875 +#: catalog/pg_aggregate.c:864 #, c-format msgid "function %s returns a set" msgstr "la fonction %s renvoie un ensemble" -#: catalog/pg_aggregate.c:890 +#: catalog/pg_aggregate.c:879 #, c-format msgid "function %s must accept VARIADIC ANY to be used in this aggregate" msgstr "la fonction %s doit accepter VARIADIC ANY pour être utilisé dans cet agrégat" -#: catalog/pg_aggregate.c:914 +#: catalog/pg_aggregate.c:903 #, c-format msgid "function %s requires run-time type coercion" msgstr "la fonction %s requiert une coercion sur le type à l'exécution" -#: catalog/pg_collation.c:93 catalog/pg_collation.c:140 +#: catalog/pg_cast.c:68 +#, c-format +msgid "cast from type %s to type %s already exists" +msgstr "la conversion du type %s vers le type %s existe déjà" + +#: catalog/pg_collation.c:92 catalog/pg_collation.c:139 #, c-format msgid "collation \"%s\" already exists, skipping" msgstr "le collationnement « %s » existe déjà, poursuite du traitement" -#: catalog/pg_collation.c:95 +#: catalog/pg_collation.c:94 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists, skipping" msgstr "le collationnement « %s » pour l'encodage « %s » existe déjà, poursuite du traitement" -#: catalog/pg_collation.c:103 catalog/pg_collation.c:147 +#: catalog/pg_collation.c:102 catalog/pg_collation.c:146 #, c-format msgid "collation \"%s\" already exists" msgstr "le collationnement « %s » existe déjà" -#: catalog/pg_collation.c:105 +#: catalog/pg_collation.c:104 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists" msgstr "le collationnement « %s » pour l'encodage « %s » existe déjà" -#: catalog/pg_constraint.c:677 +#: catalog/pg_constraint.c:678 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "la contrainte « %s » du domaine %s existe déjà" -#: catalog/pg_constraint.c:875 catalog/pg_constraint.c:968 +#: catalog/pg_constraint.c:874 catalog/pg_constraint.c:967 #, c-format msgid "constraint \"%s\" for table \"%s\" does not exist" msgstr "la contrainte « %s » de la table « %s » n'existe pas" -#: catalog/pg_constraint.c:1057 +#: catalog/pg_constraint.c:1056 #, c-format msgid "constraint \"%s\" for domain %s does not exist" msgstr "la contrainte « %s » du domaine %s n'existe pas" @@ -4734,52 +5079,77 @@ msgstr "la conversion « %s » existe déjà" msgid "default conversion for %s to %s already exists" msgstr "la conversion par défaut de %s vers %s existe déjà" -#: catalog/pg_depend.c:162 commands/extension.c:3229 +#: catalog/pg_depend.c:235 commands/extension.c:3343 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s est déjà un membre de l'extension « %s »" -#: catalog/pg_depend.c:489 +#: catalog/pg_depend.c:611 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "ne peut pas supprimer la dépendance sur %s car il s'agit d'un objet système" -#: catalog/pg_enum.c:128 catalog/pg_enum.c:231 catalog/pg_enum.c:526 +#: catalog/pg_enum.c:128 catalog/pg_enum.c:230 catalog/pg_enum.c:525 #, c-format msgid "invalid enum label \"%s\"" msgstr "nom du label enum « %s » invalide" -#: catalog/pg_enum.c:129 catalog/pg_enum.c:232 catalog/pg_enum.c:527 +#: catalog/pg_enum.c:129 catalog/pg_enum.c:231 catalog/pg_enum.c:526 #, c-format -msgid "Labels must be %d characters or less." +msgid "Labels must be %d bytes or less." msgstr "Les labels doivent avoir au plus %d caractères." -#: catalog/pg_enum.c:260 +#: catalog/pg_enum.c:259 #, c-format msgid "enum label \"%s\" already exists, skipping" msgstr "le label « %s » existe déjà, poursuite du traitement" -#: catalog/pg_enum.c:267 catalog/pg_enum.c:570 +#: catalog/pg_enum.c:266 catalog/pg_enum.c:569 #, c-format msgid "enum label \"%s\" already exists" msgstr "le label « %s » existe déjà" -#: catalog/pg_enum.c:322 catalog/pg_enum.c:565 +#: catalog/pg_enum.c:321 catalog/pg_enum.c:564 #, c-format msgid "\"%s\" is not an existing enum label" msgstr "« %s » n'est pas un label d'enum existant" -#: catalog/pg_enum.c:380 +#: catalog/pg_enum.c:379 #, c-format msgid "pg_enum OID value not set when in binary upgrade mode" msgstr "OID de pg_enum non configuré en mode de mise à jour binaire" -#: catalog/pg_enum.c:390 +#: catalog/pg_enum.c:389 #, c-format msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" msgstr "ALTER TYPE ADD BEFORE/AFTER est incompatible avec la mise à jour binaire" -#: catalog/pg_namespace.c:64 commands/schemacmds.c:266 +#: catalog/pg_inherits.c:593 +#, c-format +msgid "cannot detach partition \"%s\"" +msgstr "ne peut pas détacher la partition « %s »" + +#: catalog/pg_inherits.c:595 +#, c-format +msgid "The partition is being detached concurrently or has an unfinished detach." +msgstr "" + +#: catalog/pg_inherits.c:596 +#, c-format +msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation" +msgstr "" + +#: catalog/pg_inherits.c:600 +#, c-format +msgid "cannot complete detaching partition \"%s\"" +msgstr "ne peut pas terminer le détachement de la partition « %s »" + +#: catalog/pg_inherits.c:602 +#, c-format +msgid "There's no pending concurrent detach." +msgstr "" + +#: catalog/pg_namespace.c:64 commands/schemacmds.c:242 #, c-format msgid "schema \"%s\" already exists" msgstr "le schéma « %s » existe déjà" @@ -4794,7 +5164,7 @@ msgstr "« %s » n'est pas un nom d'opérateur valide" msgid "only binary operators can have commutators" msgstr "seuls les opérateurs binaires peuvent avoir des commutateurs" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:485 +#: catalog/pg_operator.c:374 commands/operatorcmds.c:507 #, c-format msgid "only binary operators can have join selectivity" msgstr "seuls les opérateurs binaires peuvent avoir une sélectivité des jointures" @@ -4814,12 +5184,12 @@ msgstr "seuls les opérateurs binaires ont du hachage" msgid "only boolean operators can have negators" msgstr "seuls les opérateurs booléens peuvent avoir des négations" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:493 +#: catalog/pg_operator.c:397 commands/operatorcmds.c:515 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "seuls les opérateurs booléens peuvent avoir une sélectivité des restrictions" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:497 +#: catalog/pg_operator.c:401 commands/operatorcmds.c:519 #, c-format msgid "only boolean operators can have join selectivity" msgstr "seuls les opérateurs booléens peuvent avoir une sélectivité des jointures" @@ -4844,54 +5214,44 @@ msgstr "l'opérateur %s existe déjà" msgid "operator cannot be its own negator or sort operator" msgstr "l'opérateur ne peut pas être son propre opérateur de négation ou de tri" -#: catalog/pg_proc.c:131 parser/parse_func.c:2206 +#: catalog/pg_proc.c:130 parser/parse_func.c:2205 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" msgstr[0] "les fonctions ne peuvent avoir plus de %d argument" msgstr[1] "les fonctions ne peuvent avoir plus de %d arguments" -#: catalog/pg_proc.c:244 -#, c-format -msgid "A function returning a polymorphic type must have at least one polymorphic argument." -msgstr "Une fonction renvoyant un type polymorphique doit avoir au moins un argument de type polymorphique." - -#: catalog/pg_proc.c:251 -#, c-format -msgid "A function returning \"anyrange\" must have at least one \"anyrange\" argument." -msgstr "Une fonction renvoyant « anyrange » doit avoir au moins un argument du type « anyrange »." - -#: catalog/pg_proc.c:386 +#: catalog/pg_proc.c:374 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "la fonction « %s » existe déjà avec des types d'arguments identiques" -#: catalog/pg_proc.c:398 +#: catalog/pg_proc.c:386 #, c-format msgid "\"%s\" is an aggregate function." msgstr "« %s » est une fonction d'agrégat." -#: catalog/pg_proc.c:400 +#: catalog/pg_proc.c:388 #, c-format msgid "\"%s\" is a function." msgstr "« %s » est une fonction." -#: catalog/pg_proc.c:402 +#: catalog/pg_proc.c:390 #, c-format msgid "\"%s\" is a procedure." msgstr "« %s » est une procédure." -#: catalog/pg_proc.c:404 +#: catalog/pg_proc.c:392 #, c-format msgid "\"%s\" is a window function." msgstr "la fonction « %s » est une fonction window." -#: catalog/pg_proc.c:424 +#: catalog/pg_proc.c:412 #, c-format msgid "cannot change whether a procedure has output parameters" msgstr "ne peut pas changer le fait qu'une procédure ait des paramètres en sortie ou non" -#: catalog/pg_proc.c:425 catalog/pg_proc.c:455 +#: catalog/pg_proc.c:413 catalog/pg_proc.c:443 #, c-format msgid "cannot change return type of existing function" msgstr "ne peut pas modifier le type de retour d'une fonction existante" @@ -4900,106 +5260,91 @@ msgstr "ne peut pas modifier le type de retour d'une fonction existante" #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:431 catalog/pg_proc.c:458 catalog/pg_proc.c:503 catalog/pg_proc.c:529 catalog/pg_proc.c:557 +#: catalog/pg_proc.c:419 catalog/pg_proc.c:446 catalog/pg_proc.c:493 catalog/pg_proc.c:519 catalog/pg_proc.c:545 #, c-format msgid "Use %s %s first." msgstr "Utilisez tout d'abord %s %s." -#: catalog/pg_proc.c:456 +#: catalog/pg_proc.c:444 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "Le type de ligne défini par les paramètres OUT est différent." -#: catalog/pg_proc.c:500 +#: catalog/pg_proc.c:490 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "ne peut pas modifier le nom du paramètre en entrée « %s »" -#: catalog/pg_proc.c:527 +#: catalog/pg_proc.c:517 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "" "ne peut pas supprimer les valeurs par défaut des paramètres de la\n" "fonction existante" -#: catalog/pg_proc.c:555 +#: catalog/pg_proc.c:543 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "" "ne peut pas modifier le type de données d'un paramètre avec une valeur\n" "par défaut" -#: catalog/pg_proc.c:772 +#: catalog/pg_proc.c:753 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "il n'existe pas de fonction intégrée nommée « %s »" -#: catalog/pg_proc.c:870 +#: catalog/pg_proc.c:851 #, c-format msgid "SQL functions cannot return type %s" msgstr "les fonctions SQL ne peuvent pas renvoyer un type %s" -#: catalog/pg_proc.c:885 +#: catalog/pg_proc.c:866 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "les fonctions SQL ne peuvent avoir d'arguments du type %s" -#: catalog/pg_proc.c:973 executor/functions.c:1423 +#: catalog/pg_proc.c:978 executor/functions.c:1458 #, c-format msgid "SQL function \"%s\"" msgstr "Fonction SQL « %s »" -#: catalog/pg_publication.c:57 commands/trigger.c:238 commands/trigger.c:256 -#, c-format -msgid "\"%s\" is a partitioned table" -msgstr "« %s » est une table partitionnée" - #: catalog/pg_publication.c:59 #, c-format -msgid "Adding partitioned tables to publications is not supported." -msgstr "Ajouter des tables partitionnées à des publications n'est pas supporté." - -#: catalog/pg_publication.c:60 -#, c-format -msgid "You can add the table partitions individually." -msgstr "Vous pouvez ajouter les partitions de table individuellement." - -#: catalog/pg_publication.c:68 -#, c-format msgid "Only tables can be added to publications." msgstr "Seules des tables peuvent être ajoutées aux publications." -#: catalog/pg_publication.c:74 +#: catalog/pg_publication.c:65 #, c-format msgid "\"%s\" is a system table" msgstr "« %s » est une table système" -#: catalog/pg_publication.c:76 +#: catalog/pg_publication.c:67 #, c-format msgid "System tables cannot be added to publications." msgstr "Les tables systèmes ne peuvent pas être ajoutées à une publication." -#: catalog/pg_publication.c:82 +#: catalog/pg_publication.c:73 #, c-format msgid "table \"%s\" cannot be replicated" msgstr "la table « %s » ne peut pas être répliquée" -#: catalog/pg_publication.c:84 +#: catalog/pg_publication.c:75 #, c-format msgid "Temporary and unlogged relations cannot be replicated." msgstr "Les tables tremporaires et les tables non journalisées ne peuvent pas être répliquées." -#: catalog/pg_publication.c:182 +#: catalog/pg_publication.c:174 #, c-format msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "la relation « %s » est déjà un membre de la publication « %s »" -#: catalog/pg_publication.c:418 catalog/pg_publication.c:440 commands/publicationcmds.c:422 commands/publicationcmds.c:727 +#: catalog/pg_publication.c:470 commands/publicationcmds.c:451 commands/publicationcmds.c:739 #, c-format msgid "publication \"%s\" does not exist" msgstr "la publication « %s » n'existe pas" -#: catalog/pg_shdepend.c:777 +#: catalog/pg_shdepend.c:832 #, c-format msgid "" "\n" @@ -5014,307 +5359,336 @@ msgstr[1] "" "\n" "et des objets dans %d autres bases de données (voir le journal applicatif du serveur pour une liste)" -#: catalog/pg_shdepend.c:1083 +#: catalog/pg_shdepend.c:1176 #, c-format msgid "role %u was concurrently dropped" msgstr "le rôle %u a été supprimé simultanément" -#: catalog/pg_shdepend.c:1102 +#: catalog/pg_shdepend.c:1188 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "le tablespace %u a été supprimé simultanément" -#: catalog/pg_shdepend.c:1117 +#: catalog/pg_shdepend.c:1202 #, c-format msgid "database %u was concurrently dropped" msgstr "la base de données %u a été supprimé simultanément" -#: catalog/pg_shdepend.c:1162 +#: catalog/pg_shdepend.c:1247 #, c-format msgid "owner of %s" msgstr "propriétaire de %s" -#: catalog/pg_shdepend.c:1164 +#: catalog/pg_shdepend.c:1249 #, c-format msgid "privileges for %s" msgstr "droits pour %s" -#: catalog/pg_shdepend.c:1166 +#: catalog/pg_shdepend.c:1251 #, c-format msgid "target of %s" msgstr "cible de %s" +#: catalog/pg_shdepend.c:1253 +#, c-format +msgid "tablespace for %s" +msgstr "tablespace pour %s" + #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1174 +#: catalog/pg_shdepend.c:1261 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" msgstr[0] "%d objet dans %s" msgstr[1] "%d objets dans %s" -#: catalog/pg_shdepend.c:1285 +#: catalog/pg_shdepend.c:1372 #, c-format msgid "cannot drop objects owned by %s because they are required by the database system" msgstr "n'a pas pu supprimer les objets appartenant à %s car ils sont nécessaires au système de bases de données" -#: catalog/pg_shdepend.c:1408 +#: catalog/pg_shdepend.c:1519 #, c-format msgid "cannot reassign ownership of objects owned by %s because they are required by the database system" msgstr "" "ne peut pas réaffecter les objets appartenant à %s car ils sont nécessaires au\n" "système de bases de données" -#: catalog/pg_subscription.c:177 commands/subscriptioncmds.c:657 commands/subscriptioncmds.c:871 commands/subscriptioncmds.c:1098 +#: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:775 commands/subscriptioncmds.c:1085 commands/subscriptioncmds.c:1427 #, c-format msgid "subscription \"%s\" does not exist" msgstr "la souscription « %s » n'existe pas" -#: catalog/pg_type.c:131 catalog/pg_type.c:467 +#: catalog/pg_subscription.c:432 +#, c-format +msgid "could not drop relation mapping for subscription \"%s\"" +msgstr "n'a pas pu supprimer la correspondance des relations pour la souscription « %s »" + +#: catalog/pg_subscription.c:434 +#, c-format +msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." +msgstr "" + +#. translator: first %s is a SQL ALTER command and second %s is a +#. SQL DROP command +#. +#: catalog/pg_subscription.c:440 +#, c-format +msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." +msgstr "" + +#: catalog/pg_type.c:137 catalog/pg_type.c:476 #, c-format msgid "pg_type OID value not set when in binary upgrade mode" msgstr "OID de pg_type non configuré en mode de mise à jour binaire" -#: catalog/pg_type.c:249 +#: catalog/pg_type.c:256 #, c-format msgid "invalid type internal size %d" msgstr "taille interne de type invalide %d" -#: catalog/pg_type.c:265 catalog/pg_type.c:273 catalog/pg_type.c:281 catalog/pg_type.c:290 +#: catalog/pg_type.c:272 catalog/pg_type.c:280 catalog/pg_type.c:288 catalog/pg_type.c:297 #, c-format msgid "alignment \"%c\" is invalid for passed-by-value type of size %d" msgstr "l'alignement « %c » est invalide pour le type passé par valeur de taille %d" -#: catalog/pg_type.c:297 +#: catalog/pg_type.c:304 #, c-format msgid "internal size %d is invalid for passed-by-value type" msgstr "la taille interne %d est invalide pour le type passé par valeur" -#: catalog/pg_type.c:306 catalog/pg_type.c:312 +#: catalog/pg_type.c:314 catalog/pg_type.c:320 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "l'alignement « %c » est invalide pour le type de longueur variable" -#: catalog/pg_type.c:320 +#: catalog/pg_type.c:328 commands/typecmds.c:4164 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "les types de taille fixe doivent avoir un stockage de base" -#: catalog/pg_type.c:818 +#: catalog/pg_type.c:885 #, c-format msgid "could not form array type name for type \"%s\"" msgstr "n'a pas pu former le nom du type array pour le type de données « %s »" -#: catalog/storage.c:344 storage/buffer/bufmgr.c:922 +#: catalog/pg_type.c:990 +#, fuzzy, c-format +#| msgid "Failed while creating memory context \"%s\"." +msgid "Failed while creating a multirange type for type \"%s\"." +msgstr "Échec lors de la création du contexte mémoire « %s »." + +#: catalog/pg_type.c:991 +#, c-format +msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute" +msgstr "" + +#: catalog/storage.c:450 storage/buffer/bufmgr.c:1026 #, c-format msgid "invalid page in block %u of relation %s" msgstr "page invalide dans le bloc %u de la relation %s" -#: catalog/toasting.c:106 commands/indexcmds.c:575 commands/tablecmds.c:5185 commands/tablecmds.c:14788 +#: catalog/toasting.c:104 commands/indexcmds.c:667 commands/tablecmds.c:6046 commands/tablecmds.c:16205 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "« %s » n'est ni une table ni une vue matérialisée" -#: commands/aggregatecmds.c:171 +#: commands/aggregatecmds.c:170 #, c-format msgid "only ordered-set aggregates can be hypothetical" msgstr "seuls les agrégats à ensemble ordonné peuvent être hypothétiques" -#: commands/aggregatecmds.c:196 +#: commands/aggregatecmds.c:195 #, c-format msgid "aggregate attribute \"%s\" not recognized" msgstr "l'attribut de l'agrégat « %s » n'est pas reconnu" -#: commands/aggregatecmds.c:206 +#: commands/aggregatecmds.c:205 #, c-format msgid "aggregate stype must be specified" msgstr "l'agrégat stype doit être spécifié" -#: commands/aggregatecmds.c:210 +#: commands/aggregatecmds.c:209 #, c-format msgid "aggregate sfunc must be specified" msgstr "l'agrégat sfunc doit être spécifié" -#: commands/aggregatecmds.c:222 +#: commands/aggregatecmds.c:221 #, c-format msgid "aggregate msfunc must be specified when mstype is specified" msgstr "la fonction msfunc de l'agrégat doit être spécifiée quand mstype est spécifié" -#: commands/aggregatecmds.c:226 +#: commands/aggregatecmds.c:225 #, c-format msgid "aggregate minvfunc must be specified when mstype is specified" msgstr "la fonction minvfunc de l'agrégat doit être spécifiée quand mstype est spécifié" -#: commands/aggregatecmds.c:233 +#: commands/aggregatecmds.c:232 #, c-format msgid "aggregate msfunc must not be specified without mstype" msgstr "la fonction msfunc de l'agrégat ne doit pas être spécifiée sans mstype" -#: commands/aggregatecmds.c:237 +#: commands/aggregatecmds.c:236 #, c-format msgid "aggregate minvfunc must not be specified without mstype" msgstr "la fonction minvfunc de l'agrégat ne doit pas être spécifiée sans mstype" -#: commands/aggregatecmds.c:241 +#: commands/aggregatecmds.c:240 #, c-format msgid "aggregate mfinalfunc must not be specified without mstype" msgstr "la fonction mfinalfunc de l'agrégat ne doit pas être spécifiée sans mstype" -#: commands/aggregatecmds.c:245 +#: commands/aggregatecmds.c:244 #, c-format msgid "aggregate msspace must not be specified without mstype" msgstr "la fonction msspace de l'agrégat ne doit pas être spécifiée sans mstype" -#: commands/aggregatecmds.c:249 +#: commands/aggregatecmds.c:248 #, c-format msgid "aggregate minitcond must not be specified without mstype" msgstr "la fonction minitcond de l'agrégat ne doit pas être spécifiée sans mstype" -#: commands/aggregatecmds.c:278 +#: commands/aggregatecmds.c:277 #, c-format msgid "aggregate input type must be specified" msgstr "le type d'entrée de l'agrégat doit être précisé" -#: commands/aggregatecmds.c:308 +#: commands/aggregatecmds.c:307 #, c-format msgid "basetype is redundant with aggregate input type specification" msgstr "le type de base est redondant avec la spécification du type en entrée de l'agrégat" -#: commands/aggregatecmds.c:349 commands/aggregatecmds.c:390 +#: commands/aggregatecmds.c:350 commands/aggregatecmds.c:391 #, c-format msgid "aggregate transition data type cannot be %s" msgstr "le type de données de transition de l'agrégat ne peut pas être %s" -#: commands/aggregatecmds.c:361 +#: commands/aggregatecmds.c:362 #, c-format msgid "serialization functions may be specified only when the aggregate transition data type is %s" msgstr "les fonctions de sérialisation ne peuvent être spécifiées que quand le type de données des transitions d'aggrégat est %s" -#: commands/aggregatecmds.c:371 +#: commands/aggregatecmds.c:372 #, c-format msgid "must specify both or neither of serialization and deserialization functions" msgstr "doit spécifier soit toutes soit aucunes des fonctions de sérialisation et désérialisation" -#: commands/aggregatecmds.c:436 commands/functioncmds.c:613 +#: commands/aggregatecmds.c:437 commands/functioncmds.c:623 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "le paramètre « parallel » doit être SAFE, RESTRICTED ou UNSAFE" -#: commands/aggregatecmds.c:492 +#: commands/aggregatecmds.c:493 #, c-format msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "le paramètre « %s » doit être READ_ONLY, SHAREABLE, ou READ_WRITE" -#: commands/alter.c:85 commands/event_trigger.c:236 +#: commands/alter.c:84 commands/event_trigger.c:174 #, c-format msgid "event trigger \"%s\" already exists" msgstr "le trigger sur événement « %s » existe déjà" -#: commands/alter.c:88 commands/foreigncmds.c:601 +#: commands/alter.c:87 commands/foreigncmds.c:597 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "le wrapper de données distantes « %s » existe déjà" -#: commands/alter.c:91 commands/foreigncmds.c:907 +#: commands/alter.c:90 commands/foreigncmds.c:879 #, c-format msgid "server \"%s\" already exists" msgstr "le serveur « %s » existe déjà" -#: commands/alter.c:94 commands/proclang.c:368 +#: commands/alter.c:93 commands/proclang.c:133 #, c-format msgid "language \"%s\" already exists" msgstr "le langage « %s » existe déjà" -#: commands/alter.c:97 commands/publicationcmds.c:176 +#: commands/alter.c:96 commands/publicationcmds.c:183 #, c-format msgid "publication \"%s\" already exists" msgstr "la publication « %s » existe déjà" -#: commands/alter.c:100 commands/subscriptioncmds.c:378 +#: commands/alter.c:99 commands/subscriptioncmds.c:398 #, c-format msgid "subscription \"%s\" already exists" msgstr "la souscription « %s » existe déjà" -#: commands/alter.c:123 +#: commands/alter.c:122 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "la conversion « %s » existe déjà dans le schéma « %s »" -#: commands/alter.c:127 +#: commands/alter.c:126 #, c-format msgid "statistics object \"%s\" already exists in schema \"%s\"" msgstr "l'objet statistique « %s » existe déjà dans le schéma « %s »" -#: commands/alter.c:131 +#: commands/alter.c:130 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "l'analyseur de recherche plein texte « %s » existe déjà dans le schéma « %s »" -#: commands/alter.c:135 +#: commands/alter.c:134 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "le dictionnaire de recherche plein texte « %s » existe déjà dans le schéma « %s »" -#: commands/alter.c:139 +#: commands/alter.c:138 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "le modèle de recherche plein texte « %s » existe déjà dans le schéma « %s »" -#: commands/alter.c:143 +#: commands/alter.c:142 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "la configuration de recherche plein texte « %s » existe déjà dans le schéma « %s »" -#: commands/alter.c:217 +#: commands/alter.c:215 #, c-format msgid "must be superuser to rename %s" msgstr "doit être super-utilisateur pour renommer « %s »" -#: commands/alter.c:720 +#: commands/alter.c:744 #, c-format msgid "must be superuser to set schema of %s" msgstr "doit être super-utilisateur pour configurer le schéma de %s" -#: commands/amcmds.c:59 +#: commands/amcmds.c:60 #, c-format msgid "permission denied to create access method \"%s\"" msgstr "droit refusé pour créer la méthode d'accès « %s »" -#: commands/amcmds.c:61 +#: commands/amcmds.c:62 #, c-format msgid "Must be superuser to create an access method." msgstr "Doit être super-utilisateur pour créer une méthode d'accès." -#: commands/amcmds.c:70 +#: commands/amcmds.c:71 #, c-format msgid "access method \"%s\" already exists" msgstr "la méthode d'accès « %s » existe déjà" -#: commands/amcmds.c:127 -#, c-format -msgid "must be superuser to drop access methods" -msgstr "doit être super-utilisateur pour supprimer des méthodes d'accès" - -#: commands/amcmds.c:178 commands/indexcmds.c:187 commands/indexcmds.c:720 commands/opclasscmds.c:372 commands/opclasscmds.c:791 +#: commands/amcmds.c:154 commands/indexcmds.c:210 commands/indexcmds.c:818 commands/opclasscmds.c:370 commands/opclasscmds.c:824 #, c-format msgid "access method \"%s\" does not exist" msgstr "la méthode d'accès « %s » n'existe pas" -#: commands/amcmds.c:267 +#: commands/amcmds.c:243 #, c-format msgid "handler function is not specified" msgstr "la fonction handler n'est pas spécifiée" -#: commands/amcmds.c:288 commands/event_trigger.c:245 commands/foreigncmds.c:493 commands/proclang.c:115 commands/proclang.c:287 commands/trigger.c:719 parser/parse_clause.c:950 +#: commands/amcmds.c:264 commands/event_trigger.c:183 commands/foreigncmds.c:489 commands/proclang.c:80 commands/trigger.c:681 parser/parse_clause.c:941 #, c-format msgid "function %s must return type %s" msgstr "la fonction %s doit renvoyer le type %s" -#: commands/analyze.c:225 +#: commands/analyze.c:227 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "ignore « %s » --- ne peut pas analyser cette table distante" -#: commands/analyze.c:242 +#: commands/analyze.c:244 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "ignore « %s » --- ne peut pas analyser les objets autres que les tables et les tables système" @@ -5323,158 +5697,169 @@ msgstr "ignore « %s » --- ne peut pas analyser les objets autres que les table # (errmsg("analyzing \"%s.%s\" inheritance tree", # get_namespace_name(RelationGetNamespace(onerel)), # RelationGetRelationName(onerel)))); -#: commands/analyze.c:323 +#: commands/analyze.c:324 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "analyse de l'arbre d'héritage de « %s.%s »" -#: commands/analyze.c:328 +#: commands/analyze.c:329 #, c-format msgid "analyzing \"%s.%s\"" msgstr "analyse « %s.%s »" -#: commands/analyze.c:388 +#: commands/analyze.c:395 #, c-format msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "la colonne « %s » de la relation « %s » apparait plus d'une fois" -#: commands/analyze.c:674 +#: commands/analyze.c:791 +#, fuzzy, c-format +#| msgid "automatic analyze of table \"%s.%s.%s\"" +msgid "automatic analyze of table \"%s.%s.%s\"\n" +msgstr "ANALYZE automatique de la table « %s.%s.%s »" + +#: commands/analyze.c:812 #, c-format -msgid "automatic analyze of table \"%s.%s.%s\" system usage: %s" -msgstr "ANALYZE automatique de la table « %s.%s.%s » ; utilisation système : %s" +msgid "system usage: %s" +msgstr "utilisation du système : %s" -#: commands/analyze.c:1133 +#: commands/analyze.c:1351 #, c-format msgid "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead rows; %d rows in sample, %.0f estimated total rows" msgstr "« %s » : %d pages parcourues parmi %u, contenant %.0f lignes à conserver et %.0f lignes à supprimer ; %d lignes dans l'échantillon, %.0f lignes totales estimées" -#: commands/analyze.c:1213 +#: commands/analyze.c:1431 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" msgstr "ignore l'analyse de l'arbre d'héritage « %s.%s » --- cet arbre d'héritage ne contient pas de tables enfants" -#: commands/analyze.c:1311 +#: commands/analyze.c:1529 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "ignore l'analyse de l'arbre d'héritage « %s.%s » --- cet arbre d'héritage ne contient pas de tables enfants analysables" -#: commands/async.c:557 +#: commands/async.c:639 #, c-format msgid "channel name cannot be empty" msgstr "le nom du canal ne peut pas être vide" -#: commands/async.c:562 +#: commands/async.c:645 #, c-format msgid "channel name too long" msgstr "nom du canal trop long" -#: commands/async.c:569 +#: commands/async.c:650 #, c-format msgid "payload string too long" msgstr "chaîne de charge trop longue" -#: commands/async.c:755 +#: commands/async.c:869 #, c-format msgid "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" msgstr "" "ne peut pas exécuter PREPARE sur une transaction qui a exécuté LISTEN,\n" "UNLISTEN ou NOTIFY" -#: commands/async.c:858 +#: commands/async.c:975 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "trop de notifications dans la queue NOTIFY" -#: commands/async.c:1490 +#: commands/async.c:1646 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "la queue NOTIFY est pleine à %.0f%%" -#: commands/async.c:1492 +#: commands/async.c:1648 #, c-format msgid "The server process with PID %d is among those with the oldest transactions." msgstr "Le processus serveur de PID %d est parmi ceux qui ont les transactions les plus anciennes." -#: commands/async.c:1495 +#: commands/async.c:1651 #, c-format msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." msgstr "" "La queue NOTIFY ne peut pas être vidée jusqu'à ce que le processus finisse\n" "sa transaction en cours." -#: commands/cluster.c:126 commands/cluster.c:388 +#: commands/cluster.c:119 +#, c-format +msgid "unrecognized CLUSTER option \"%s\"" +msgstr "option de CLUSTER « %s » non reconnu" + +#: commands/cluster.c:147 commands/cluster.c:386 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "ne peut pas exécuter CLUSTER sur les tables temporaires des autres sessions" -#: commands/cluster.c:134 +#: commands/cluster.c:155 #, c-format msgid "cannot cluster a partitioned table" msgstr "ne peut pas exécuter CLUSTER sur une table partitionnée" -#: commands/cluster.c:164 +#: commands/cluster.c:173 #, c-format msgid "there is no previously clustered index for table \"%s\"" msgstr "il n'y a pas d'index CLUSTER précédent pour la table « %s »" -#: commands/cluster.c:178 commands/tablecmds.c:12054 commands/tablecmds.c:13856 +#: commands/cluster.c:187 commands/tablecmds.c:13421 commands/tablecmds.c:15229 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "l'index « %s » pour la table « %s » n'existe pas" -#: commands/cluster.c:377 +#: commands/cluster.c:375 #, c-format msgid "cannot cluster a shared catalog" msgstr "ne peut pas exécuter CLUSTER sur un catalogue partagé" -#: commands/cluster.c:392 +#: commands/cluster.c:390 #, c-format msgid "cannot vacuum temporary tables of other sessions" msgstr "ne peut pas exécuter VACUUM sur les tables temporaires des autres sessions" -#: commands/cluster.c:458 commands/tablecmds.c:13866 +#: commands/cluster.c:456 commands/tablecmds.c:15239 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "« %s » n'est pas un index de la table « %s »" -#: commands/cluster.c:466 +#: commands/cluster.c:464 #, c-format msgid "cannot cluster on index \"%s\" because access method does not support clustering" msgstr "" "ne peut pas exécuter CLUSTER sur l'index « %s » car la méthode d'accès de\n" "l'index ne gère pas cette commande" -#: commands/cluster.c:478 +#: commands/cluster.c:476 #, c-format msgid "cannot cluster on partial index \"%s\"" msgstr "ne peut pas exécuter CLUSTER sur l'index partiel « %s »" -#: commands/cluster.c:492 +#: commands/cluster.c:490 #, c-format msgid "cannot cluster on invalid index \"%s\"" msgstr "ne peut pas exécuter la commande CLUSTER sur l'index invalide « %s »" -#: commands/cluster.c:516 +#: commands/cluster.c:514 #, c-format msgid "cannot mark index clustered in partitioned table" msgstr "ne peut pas marquer un index comme CLUSTER sur une table partitionnée" -#: commands/cluster.c:899 +#: commands/cluster.c:887 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr "cluster sur « %s.%s » en utilisant un parcours d'index sur « %s »" -#: commands/cluster.c:905 +#: commands/cluster.c:893 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "cluster sur « %s.%s » en utilisant un parcours séquentiel puis un tri" -#: commands/cluster.c:936 +#: commands/cluster.c:924 #, c-format msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" msgstr "« %s » : %.0f versions de ligne supprimables, %.0f non supprimables, dans %u pages" -#: commands/cluster.c:940 +#: commands/cluster.c:928 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -5483,92 +5868,82 @@ msgstr "" "%.0f versions de lignes ne peuvent pas encore être supprimées.\n" "%s." -#: commands/collationcmds.c:104 +#: commands/collationcmds.c:102 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "attribut de collationnement « %s » non reconnu" -#: commands/collationcmds.c:147 +#: commands/collationcmds.c:145 #, c-format msgid "collation \"default\" cannot be copied" msgstr "le collationnement « default » ne peut pas être copié" -#: commands/collationcmds.c:180 +#: commands/collationcmds.c:175 #, c-format msgid "unrecognized collation provider: %s" msgstr "fournisseur de collationnement non reconnu : %s" -#: commands/collationcmds.c:189 +#: commands/collationcmds.c:184 #, c-format msgid "parameter \"lc_collate\" must be specified" msgstr "le paramètre « lc_collate » doit être spécifié" -#: commands/collationcmds.c:194 +#: commands/collationcmds.c:189 #, c-format msgid "parameter \"lc_ctype\" must be specified" msgstr "le paramètre « lc_ctype » doit être spécifié" -#: commands/collationcmds.c:204 +#: commands/collationcmds.c:199 #, c-format msgid "nondeterministic collations not supported with this provider" msgstr "les collationnements non déterministes ne sont pas supportés avec ce fournisseur" -#: commands/collationcmds.c:264 +#: commands/collationcmds.c:255 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "le collationnament « %s » pour l'encodage « %s » existe déjà dans le schéma « %s »" -#: commands/collationcmds.c:275 +#: commands/collationcmds.c:266 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "le collationnement « %s » existe déjà dans le schéma « %s »" -#: commands/collationcmds.c:323 -#, c-format -msgid "changing version from %s to %s" -msgstr "changement de version de %s à %s" - -#: commands/collationcmds.c:338 -#, c-format -msgid "version has not changed" -msgstr "la version n'a pas changé" - -#: commands/collationcmds.c:469 +#: commands/collationcmds.c:355 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "n'a pas pu convertir le nom de locale « %s » en balise de langage : %s" -#: commands/collationcmds.c:530 +#: commands/collationcmds.c:413 #, c-format msgid "must be superuser to import system collations" msgstr "doit être super-utilisateur pour importer les collationnements systèmes" -#: commands/collationcmds.c:553 commands/copy.c:1898 commands/copy.c:3534 libpq/be-secure-common.c:80 +#: commands/collationcmds.c:441 commands/copyfrom.c:1500 commands/copyto.c:688 libpq/be-secure-common.c:81 #, c-format msgid "could not execute command \"%s\": %m" msgstr "n'a pas pu exécuter la commande « %s » : %m" -#: commands/collationcmds.c:684 +#: commands/collationcmds.c:570 #, c-format msgid "no usable system locales were found" msgstr "aucune locale système utilisable n'a été trouvée" -#: commands/comment.c:61 commands/dbcommands.c:820 commands/dbcommands.c:1008 commands/dbcommands.c:1121 commands/dbcommands.c:1311 commands/dbcommands.c:1534 commands/dbcommands.c:1648 commands/dbcommands.c:2065 utils/init/postinit.c:890 utils/init/postinit.c:995 utils/init/postinit.c:1012 +#: commands/comment.c:61 commands/dbcommands.c:841 commands/dbcommands.c:1037 commands/dbcommands.c:1150 commands/dbcommands.c:1340 commands/dbcommands.c:1588 commands/dbcommands.c:1702 commands/dbcommands.c:2142 utils/init/postinit.c:887 utils/init/postinit.c:992 utils/init/postinit.c:1009 #, c-format msgid "database \"%s\" does not exist" msgstr "la base de données « %s » n'existe pas" -#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:944 +#: commands/comment.c:101 commands/seclabel.c:191 parser/parse_utilcmd.c:987 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni un type composite, ni une table distante" -#: commands/constraint.c:63 utils/adt/ri_triggers.c:1915 +#: commands/constraint.c:63 utils/adt/ri_triggers.c:1948 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "la fonction « %s » n'a pas été appelée par le gestionnaire de triggers" -#: commands/constraint.c:70 utils/adt/ri_triggers.c:1924 +#: commands/constraint.c:70 utils/adt/ri_triggers.c:1957 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "la fonction « %s » doit être exécutée pour l'instruction AFTER ROW" @@ -5578,790 +5953,801 @@ msgstr "la fonction « %s » doit être exécutée pour l'instruction AFTER ROW" msgid "function \"%s\" must be fired for INSERT or UPDATE" msgstr "la fonction « %s » doit être exécutée pour les instructions INSERT ou UPDATE" -#: commands/conversioncmds.c:65 +#: commands/conversioncmds.c:67 #, c-format msgid "source encoding \"%s\" does not exist" msgstr "le codage source « %s » n'existe pas" -#: commands/conversioncmds.c:72 +#: commands/conversioncmds.c:74 #, c-format msgid "destination encoding \"%s\" does not exist" msgstr "l'encodage de destination « %s » n'existe pas" -#: commands/conversioncmds.c:86 -#, c-format -msgid "encoding conversion function %s must return type %s" -msgstr "la fonction de conversion d'encodage %s doit renvoyer le type %s" - -#: commands/copy.c:427 commands/copy.c:461 +#: commands/conversioncmds.c:87 #, c-format -msgid "COPY BINARY is not supported to stdout or from stdin" -msgstr "COPY BINARY n'est pas supporté vers stdout ou à partir de stdin" +msgid "encoding conversion to or from \"SQL_ASCII\" is not supported" +msgstr "la conversion de l'encodage de ou vers « SQL_ASCII » n'est pas supportée" -#: commands/copy.c:561 +#: commands/conversioncmds.c:100 #, c-format -msgid "could not write to COPY program: %m" -msgstr "n'a pas pu écrire vers le programme COPY : %m" - -#: commands/copy.c:566 -#, c-format -msgid "could not write to COPY file: %m" -msgstr "n'a pas pu écrire dans le fichier COPY : %m" - -#: commands/copy.c:579 -#, c-format -msgid "connection lost during COPY to stdout" -msgstr "connexion perdue lors de l'opération COPY vers stdout" - -#: commands/copy.c:623 -#, c-format -msgid "could not read from COPY file: %m" -msgstr "n'a pas pu lire le fichier COPY : %m" - -#: commands/copy.c:641 commands/copy.c:662 commands/copy.c:666 tcop/postgres.c:348 tcop/postgres.c:384 tcop/postgres.c:411 -#, c-format -msgid "unexpected EOF on client connection with an open transaction" -msgstr "" -"fin de fichier (EOF) inattendue de la connexion du client avec une\n" -"transaction ouverte" - -#: commands/copy.c:679 -#, c-format -msgid "COPY from stdin failed: %s" -msgstr "échec de la commande COPY à partir de stdin : %s" +msgid "encoding conversion function %s must return type %s" +msgstr "la fonction de conversion d'encodage %s doit renvoyer le type %s" -#: commands/copy.c:695 -#, c-format -msgid "unexpected message type 0x%02X during COPY from stdin" -msgstr "type 0x%02X du message, inattendu, lors d'une opération COPY à partir de stdin" +#: commands/conversioncmds.c:130 +#, fuzzy, c-format +#| msgid "encoding conversion function %s must return type %s" +msgid "encoding conversion function %s returned incorrect result for empty input" +msgstr "la fonction de conversion d'encodage %s doit renvoyer le type %s" -#: commands/copy.c:862 +#: commands/copy.c:86 #, c-format msgid "must be superuser or a member of the pg_execute_server_program role to COPY to or from an external program" msgstr "doit être super-utilisateur ou membre du rôle pg_execute_server_program pour utiliser COPY avec un programme externe" -#: commands/copy.c:863 commands/copy.c:872 commands/copy.c:879 +#: commands/copy.c:87 commands/copy.c:96 commands/copy.c:103 #, c-format msgid "Anyone can COPY to stdout or from stdin. psql's \\copy command also works for anyone." msgstr "Tout le monde peut utiliser COPY vers stdout ou à partir de stdin. La commande \\copy de psql fonctionne aussi pour tout le monde." -#: commands/copy.c:871 +#: commands/copy.c:95 #, c-format msgid "must be superuser or a member of the pg_read_server_files role to COPY from a file" msgstr "doit être super-utilisateur ou membre du rôle pg_read_all_settings pour utiliser COPY depuis un fichier" -#: commands/copy.c:878 +#: commands/copy.c:102 #, c-format msgid "must be superuser or a member of the pg_write_server_files role to COPY to a file" msgstr "doit être super-utilisateur ou membre de pg_read_all_settings pour utiliser COPY vers un fichier" -#: commands/copy.c:962 +#: commands/copy.c:188 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM non supporté avec la sécurité niveau ligne" -#: commands/copy.c:963 +#: commands/copy.c:189 #, c-format msgid "Use INSERT statements instead." msgstr "Utilisez des instructions INSERT à la place." -#: commands/copy.c:1151 +#: commands/copy.c:374 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "format COPY « %s » non reconnu" -#: commands/copy.c:1222 commands/copy.c:1238 commands/copy.c:1253 commands/copy.c:1275 +#: commands/copy.c:447 commands/copy.c:463 commands/copy.c:478 commands/copy.c:500 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "l'argument de l'option « %s » doit être une liste de noms de colonnes" -#: commands/copy.c:1290 +#: commands/copy.c:515 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "l'argument de l'option « %s » doit être un nom d'encodage valide" -#: commands/copy.c:1297 commands/dbcommands.c:243 commands/dbcommands.c:1482 +#: commands/copy.c:522 commands/dbcommands.c:253 commands/dbcommands.c:1536 #, c-format msgid "option \"%s\" not recognized" msgstr "option « %s » non reconnu" -#: commands/copy.c:1309 +#: commands/copy.c:534 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "ne peut pas spécifier le délimiteur (DELIMITER) en mode binaire (BINARY)" -#: commands/copy.c:1314 +#: commands/copy.c:539 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "ne peut pas spécifier NULL en mode binaire (BINARY)" -#: commands/copy.c:1336 +#: commands/copy.c:561 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "le délimiteur COPY doit être un seul caractère d'un octet" -#: commands/copy.c:1343 +#: commands/copy.c:568 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "le délimiteur de COPY ne peut pas être un retour à la ligne ou un retour chariot" -#: commands/copy.c:1349 +#: commands/copy.c:574 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "la représentation du NULL dans COPY ne peut pas utiliser un retour à la ligne ou un retour chariot" -#: commands/copy.c:1366 +#: commands/copy.c:591 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "le délimiteur de COPY ne peut pas être « %s »" -#: commands/copy.c:1372 +#: commands/copy.c:597 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "COPY HEADER disponible uniquement en mode CSV" -#: commands/copy.c:1378 +#: commands/copy.c:603 #, c-format msgid "COPY quote available only in CSV mode" msgstr "le guillemet dans COPY n'est disponible que dans le mode CSV" -#: commands/copy.c:1383 +#: commands/copy.c:608 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "le guillemet dans COPY doit être un seul caractère d'un octet" -#: commands/copy.c:1388 +#: commands/copy.c:613 #, c-format msgid "COPY delimiter and quote must be different" msgstr "le délimiteur de COPY ne doit pas être un guillemet" -#: commands/copy.c:1394 +#: commands/copy.c:619 #, c-format msgid "COPY escape available only in CSV mode" msgstr "le caractère d'échappement COPY n'est disponible que dans le mode CSV" -#: commands/copy.c:1399 +#: commands/copy.c:624 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "le caractère d'échappement COPY doit être un seul caractère d'un octet" -#: commands/copy.c:1405 +#: commands/copy.c:630 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "le guillemet forcé COPY n'est disponible que dans le mode CSV" -#: commands/copy.c:1409 +#: commands/copy.c:634 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "le guillemet forcé pour COPY n'est disponible qu'en utilisant COPY TO" -#: commands/copy.c:1415 +#: commands/copy.c:640 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "« COPY force not null » n'est disponible que dans la version CSV" -#: commands/copy.c:1419 +#: commands/copy.c:644 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "« COPY force not null » n'est disponible qu'en utilisant COPY FROM" -#: commands/copy.c:1425 +#: commands/copy.c:650 #, c-format msgid "COPY force null available only in CSV mode" msgstr "« COPY force null » n'est disponible que dans le mode CSV" -#: commands/copy.c:1430 +#: commands/copy.c:655 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "« COPY force null » n'est disponible qu'en utilisant COPY FROM" -#: commands/copy.c:1436 +#: commands/copy.c:661 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "le délimiteur COPY ne doit pas apparaître dans la spécification de NULL" -#: commands/copy.c:1443 +#: commands/copy.c:668 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "le caractère guillemet pour CSV ne doit pas apparaître dans la spécification de NULL" -#: commands/copy.c:1529 +#: commands/copy.c:729 #, c-format -msgid "DO INSTEAD NOTHING rules are not supported for COPY" -msgstr "les règles DO INSTEAD NOTHING ne sont pas supportées pour COPY" - -#: commands/copy.c:1543 -#, c-format -msgid "conditional DO INSTEAD rules are not supported for COPY" -msgstr "les règles DO INSTEAD conditionnelles ne sont pas supportées par l'instruction COPY" - -#: commands/copy.c:1547 -#, c-format -msgid "DO ALSO rules are not supported for the COPY" -msgstr "les règles DO ALSO ne sont pas supportées pour COPY" - -#: commands/copy.c:1552 -#, c-format -msgid "multi-statement DO INSTEAD rules are not supported for COPY" -msgstr "les règles DO INSTEAD multi-instructions ne sont pas supportées par l'instruction COPY" - -#: commands/copy.c:1562 -#, c-format -msgid "COPY (SELECT INTO) is not supported" -msgstr "COPY (SELECT INTO) n'est pas supporté" - -#: commands/copy.c:1579 -#, c-format -msgid "COPY query must have a RETURNING clause" -msgstr "La requête COPY doit avoir une clause RETURNING" - -#: commands/copy.c:1607 -#, c-format -msgid "relation referenced by COPY statement has changed" -msgstr "la relation référencée par l'instruction COPY a changé" - -#: commands/copy.c:1666 -#, c-format -msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" -msgstr "la colonne « %s » FORCE_QUOTE n'est pas référencée par COPY" - -#: commands/copy.c:1689 -#, c-format -msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" -msgstr "la colonne « %s » FORCE_NOT_NULL n'est pas référencée par COPY" - -#: commands/copy.c:1712 -#, c-format -msgid "FORCE_NULL column \"%s\" not referenced by COPY" -msgstr "la colonne « %s » FORCE_NULL n'est pas référencée par COPY" - -#: commands/copy.c:1778 libpq/be-secure-common.c:102 -#, c-format -msgid "could not close pipe to external command: %m" -msgstr "n'a pas pu fermer le fichier pipe vers la commande externe : %m" - -#: commands/copy.c:1793 -#, c-format -msgid "program \"%s\" failed" -msgstr "le programme « %s » a échoué" - -#: commands/copy.c:1844 -#, c-format -msgid "cannot copy from view \"%s\"" -msgstr "ne peut pas copier à partir de la vue « %s »" - -#: commands/copy.c:1846 commands/copy.c:1852 commands/copy.c:1858 commands/copy.c:1869 -#, c-format -msgid "Try the COPY (SELECT ...) TO variant." -msgstr "Tentez la variante COPY (SELECT ...) TO." - -#: commands/copy.c:1850 -#, c-format -msgid "cannot copy from materialized view \"%s\"" -msgstr "ne peut pas copier à partir de la vue matérialisée « %s »" - -#: commands/copy.c:1856 -#, c-format -msgid "cannot copy from foreign table \"%s\"" -msgstr "ne peut pas copier à partir de la table distante « %s »" - -#: commands/copy.c:1862 -#, c-format -msgid "cannot copy from sequence \"%s\"" -msgstr "ne peut pas copier à partir de la séquence « %s »" - -#: commands/copy.c:1867 -#, c-format -msgid "cannot copy from partitioned table \"%s\"" -msgstr "ne peut pas copier à partir de la table partitionnée « %s »" - -#: commands/copy.c:1873 -#, c-format -msgid "cannot copy from non-table relation \"%s\"" -msgstr "ne peut pas copier depuis la relation « %s », qui n'est pas une table" - -#: commands/copy.c:1913 -#, c-format -msgid "relative path not allowed for COPY to file" -msgstr "un chemin relatif n'est pas autorisé à utiliser COPY vers un fichier" +msgid "column \"%s\" is a generated column" +msgstr "la colonne « %s » est une colonne générée" -#: commands/copy.c:1934 +#: commands/copy.c:731 #, c-format -msgid "could not open file \"%s\" for writing: %m" -msgstr "n'a pas pu ouvrir le fichier « %s » en écriture : %m" +msgid "Generated columns cannot be used in COPY." +msgstr "Les colonnes générées ne peuvent pas être utilisées dans COPY." -#: commands/copy.c:1937 +#: commands/copy.c:746 commands/indexcmds.c:1754 commands/statscmds.c:250 commands/tablecmds.c:2373 commands/tablecmds.c:3029 commands/tablecmds.c:3522 parser/parse_relation.c:3593 parser/parse_relation.c:3613 utils/adt/tsvector_op.c:2680 #, c-format -msgid "COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \\copy." -msgstr "COPY TO indique au serveur PostgreSQL d'écrire un fichier. Vous pourriez vouloir utiliser la fonctionnalité \\copy de psql pour écrire en local." +msgid "column \"%s\" does not exist" +msgstr "la colonne « %s » n'existe pas" -#: commands/copy.c:1950 commands/copy.c:3565 +#: commands/copy.c:753 commands/tablecmds.c:2399 commands/trigger.c:933 parser/parse_target.c:1080 parser/parse_target.c:1091 #, c-format -msgid "\"%s\" is a directory" -msgstr "« %s » est un répertoire" +msgid "column \"%s\" specified more than once" +msgstr "la colonne « %s » est spécifiée plus d'une fois" -#: commands/copy.c:2252 +#: commands/copyfrom.c:127 #, c-format msgid "COPY %s, line %s, column %s" msgstr "COPY %s, ligne %s, colonne %s" -#: commands/copy.c:2256 commands/copy.c:2303 +#: commands/copyfrom.c:131 commands/copyfrom.c:172 #, c-format msgid "COPY %s, line %s" msgstr "COPY %s, ligne %s" -#: commands/copy.c:2267 +#: commands/copyfrom.c:142 #, c-format msgid "COPY %s, line %s, column %s: \"%s\"" msgstr "COPY %s, ligne %s, colonne %s : « %s »" -#: commands/copy.c:2275 +#: commands/copyfrom.c:150 #, c-format msgid "COPY %s, line %s, column %s: null input" msgstr "COPY %s, ligne %s, colonne %s : NULL en entrée" -#: commands/copy.c:2297 +#: commands/copyfrom.c:166 #, c-format msgid "COPY %s, line %s: \"%s\"" msgstr "COPY %s, ligne %s : « %s »" -#: commands/copy.c:2698 +#: commands/copyfrom.c:566 #, c-format msgid "cannot copy to view \"%s\"" msgstr "ne peut pas copier vers la vue « %s »" -#: commands/copy.c:2700 +#: commands/copyfrom.c:568 #, c-format msgid "To enable copying to a view, provide an INSTEAD OF INSERT trigger." msgstr "Pour activer la copie d'une vue, fournissez un trigger INSTEAD OF INSERT." -#: commands/copy.c:2704 +#: commands/copyfrom.c:572 #, c-format msgid "cannot copy to materialized view \"%s\"" msgstr "ne peut pas copier vers la vue matérialisée « %s »" -#: commands/copy.c:2709 +#: commands/copyfrom.c:577 #, c-format msgid "cannot copy to sequence \"%s\"" msgstr "ne peut pas copier vers la séquence « %s »" -#: commands/copy.c:2714 +#: commands/copyfrom.c:582 #, c-format msgid "cannot copy to non-table relation \"%s\"" msgstr "ne peut pas copier vers la relation « %s », qui n'est pas une table" -#: commands/copy.c:2802 +#: commands/copyfrom.c:622 #, c-format msgid "cannot perform COPY FREEZE on a partitioned table" msgstr "ne peut pas exécuter COPY FREEZE sur une table partitionnée" -#: commands/copy.c:2817 +#: commands/copyfrom.c:637 #, c-format msgid "cannot perform COPY FREEZE because of prior transaction activity" msgstr "n'a pas pu exécuter un COPY FREEZE à cause d'une activité transactionnelle précédente" -#: commands/copy.c:2823 +#: commands/copyfrom.c:643 #, c-format msgid "cannot perform COPY FREEZE because the table was not created or truncated in the current subtransaction" msgstr "n'a pas pu exécuter un COPY FREEZE parce que la table n'a pas été créée ou tronquée dans la transaction en cours" -#: commands/copy.c:3552 +#: commands/copyfrom.c:1264 commands/copyto.c:618 +#, c-format +msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" +msgstr "la colonne « %s » FORCE_NOT_NULL n'est pas référencée par COPY" + +#: commands/copyfrom.c:1287 commands/copyto.c:641 +#, c-format +msgid "FORCE_NULL column \"%s\" not referenced by COPY" +msgstr "la colonne « %s » FORCE_NULL n'est pas référencée par COPY" + +#: commands/copyfrom.c:1519 #, c-format msgid "COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \\copy." msgstr "COPY TO indique au serveur PostgreSQL de lire un fichier. Vous pourriez vouloir utiliser la fonctionnalité \\copy de psql pour lire en local." -#: commands/copy.c:3580 +#: commands/copyfrom.c:1532 commands/copyto.c:740 +#, c-format +msgid "\"%s\" is a directory" +msgstr "« %s » est un répertoire" + +#: commands/copyfrom.c:1600 commands/copyto.c:302 libpq/be-secure-common.c:105 +#, c-format +msgid "could not close pipe to external command: %m" +msgstr "n'a pas pu fermer le fichier pipe vers la commande externe : %m" + +#: commands/copyfrom.c:1615 commands/copyto.c:307 +#, c-format +msgid "program \"%s\" failed" +msgstr "le programme « %s » a échoué" + +#: commands/copyfromparse.c:199 #, c-format msgid "COPY file signature not recognized" msgstr "la signature du fichier COPY n'est pas reconnue" -#: commands/copy.c:3585 +#: commands/copyfromparse.c:204 #, c-format msgid "invalid COPY file header (missing flags)" msgstr "en-tête du fichier COPY invalide (options manquantes)" -#: commands/copy.c:3589 +#: commands/copyfromparse.c:208 #, c-format msgid "invalid COPY file header (WITH OIDS)" msgstr "en-tête du fichier COPY invalide (WITH OIDS)" -#: commands/copy.c:3594 +#: commands/copyfromparse.c:213 #, c-format msgid "unrecognized critical flags in COPY file header" msgstr "options critiques non reconnues dans l'en-tête du fichier COPY" -#: commands/copy.c:3600 +#: commands/copyfromparse.c:219 #, c-format msgid "invalid COPY file header (missing length)" msgstr "en-tête du fichier COPY invalide (longueur manquante)" -#: commands/copy.c:3607 +#: commands/copyfromparse.c:226 #, c-format msgid "invalid COPY file header (wrong length)" msgstr "en-tête du fichier COPY invalide (mauvaise longueur)" -#: commands/copy.c:3726 commands/copy.c:4391 commands/copy.c:4621 +#: commands/copyfromparse.c:255 +#, c-format +msgid "could not read from COPY file: %m" +msgstr "n'a pas pu lire le fichier COPY : %m" + +#: commands/copyfromparse.c:277 commands/copyfromparse.c:302 tcop/postgres.c:360 +#, c-format +msgid "unexpected EOF on client connection with an open transaction" +msgstr "" +"fin de fichier (EOF) inattendue de la connexion du client avec une\n" +"transaction ouverte" + +#: commands/copyfromparse.c:293 +#, c-format +msgid "unexpected message type 0x%02X during COPY from stdin" +msgstr "type 0x%02X du message, inattendu, lors d'une opération COPY à partir de stdin" + +#: commands/copyfromparse.c:316 +#, c-format +msgid "COPY from stdin failed: %s" +msgstr "échec de la commande COPY à partir de stdin : %s" + +#: commands/copyfromparse.c:841 commands/copyfromparse.c:1451 commands/copyfromparse.c:1681 #, c-format msgid "extra data after last expected column" msgstr "données supplémentaires après la dernière colonne attendue" -#: commands/copy.c:3740 +#: commands/copyfromparse.c:855 #, c-format msgid "missing data for column \"%s\"" msgstr "données manquantes pour la colonne « %s »" -#: commands/copy.c:3823 +#: commands/copyfromparse.c:933 #, c-format msgid "received copy data after EOF marker" msgstr "a reçu des données de COPY après le marqueur de fin" -#: commands/copy.c:3830 +#: commands/copyfromparse.c:940 #, c-format msgid "row field count is %d, expected %d" msgstr "le nombre de champs de la ligne est %d, %d attendus" -#: commands/copy.c:4150 commands/copy.c:4167 +#: commands/copyfromparse.c:1233 commands/copyfromparse.c:1250 #, c-format msgid "literal carriage return found in data" msgstr "retour chariot trouvé dans les données" -#: commands/copy.c:4151 commands/copy.c:4168 +#: commands/copyfromparse.c:1234 commands/copyfromparse.c:1251 #, c-format msgid "unquoted carriage return found in data" msgstr "retour chariot sans guillemet trouvé dans les données" -#: commands/copy.c:4153 commands/copy.c:4170 +#: commands/copyfromparse.c:1236 commands/copyfromparse.c:1253 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "Utilisez « \\r » pour représenter un retour chariot." -#: commands/copy.c:4154 commands/copy.c:4171 +#: commands/copyfromparse.c:1237 commands/copyfromparse.c:1254 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "Utiliser le champ CSV entre guillemets pour représenter un retour chariot." -#: commands/copy.c:4183 +#: commands/copyfromparse.c:1266 #, c-format msgid "literal newline found in data" msgstr "retour à la ligne trouvé dans les données" -#: commands/copy.c:4184 +#: commands/copyfromparse.c:1267 #, c-format msgid "unquoted newline found in data" msgstr "retour à la ligne trouvé dans les données" -#: commands/copy.c:4186 +#: commands/copyfromparse.c:1269 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "Utilisez « \\n » pour représenter un retour à la ligne." -#: commands/copy.c:4187 +#: commands/copyfromparse.c:1270 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "Utiliser un champ CSV entre guillemets pour représenter un retour à la ligne." -#: commands/copy.c:4233 commands/copy.c:4269 +#: commands/copyfromparse.c:1316 commands/copyfromparse.c:1352 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "le marqueur fin-de-copie ne correspond pas à un précédent style de fin de ligne" -#: commands/copy.c:4242 commands/copy.c:4258 +#: commands/copyfromparse.c:1325 commands/copyfromparse.c:1341 #, c-format msgid "end-of-copy marker corrupt" msgstr "marqueur fin-de-copie corrompu" -#: commands/copy.c:4705 +#: commands/copyfromparse.c:1765 #, c-format msgid "unterminated CSV quoted field" msgstr "champ CSV entre guillemets non terminé" -#: commands/copy.c:4782 commands/copy.c:4801 +#: commands/copyfromparse.c:1841 commands/copyfromparse.c:1860 #, c-format msgid "unexpected EOF in COPY data" msgstr "fin de fichier (EOF) inattendu dans les données du COPY" -#: commands/copy.c:4791 +#: commands/copyfromparse.c:1850 #, c-format msgid "invalid field size" msgstr "taille du champ invalide" -#: commands/copy.c:4814 +#: commands/copyfromparse.c:1873 #, c-format msgid "incorrect binary data format" msgstr "format de données binaires incorrect" -#: commands/copy.c:5122 +#: commands/copyto.c:235 +#, c-format +msgid "could not write to COPY program: %m" +msgstr "n'a pas pu écrire vers le programme COPY : %m" + +#: commands/copyto.c:240 +#, c-format +msgid "could not write to COPY file: %m" +msgstr "n'a pas pu écrire dans le fichier COPY : %m" + +#: commands/copyto.c:370 +#, c-format +msgid "cannot copy from view \"%s\"" +msgstr "ne peut pas copier à partir de la vue « %s »" + +#: commands/copyto.c:372 commands/copyto.c:378 commands/copyto.c:384 commands/copyto.c:395 +#, c-format +msgid "Try the COPY (SELECT ...) TO variant." +msgstr "Tentez la variante COPY (SELECT ...) TO." + +#: commands/copyto.c:376 +#, c-format +msgid "cannot copy from materialized view \"%s\"" +msgstr "ne peut pas copier à partir de la vue matérialisée « %s »" + +#: commands/copyto.c:382 +#, c-format +msgid "cannot copy from foreign table \"%s\"" +msgstr "ne peut pas copier à partir de la table distante « %s »" + +#: commands/copyto.c:388 +#, c-format +msgid "cannot copy from sequence \"%s\"" +msgstr "ne peut pas copier à partir de la séquence « %s »" + +#: commands/copyto.c:393 +#, c-format +msgid "cannot copy from partitioned table \"%s\"" +msgstr "ne peut pas copier à partir de la table partitionnée « %s »" + +#: commands/copyto.c:399 +#, c-format +msgid "cannot copy from non-table relation \"%s\"" +msgstr "ne peut pas copier depuis la relation « %s », qui n'est pas une table" + +#: commands/copyto.c:457 +#, c-format +msgid "DO INSTEAD NOTHING rules are not supported for COPY" +msgstr "les règles DO INSTEAD NOTHING ne sont pas supportées pour COPY" + +#: commands/copyto.c:471 +#, c-format +msgid "conditional DO INSTEAD rules are not supported for COPY" +msgstr "les règles DO INSTEAD conditionnelles ne sont pas supportées par l'instruction COPY" + +#: commands/copyto.c:475 +#, c-format +msgid "DO ALSO rules are not supported for the COPY" +msgstr "les règles DO ALSO ne sont pas supportées pour COPY" + +#: commands/copyto.c:480 +#, c-format +msgid "multi-statement DO INSTEAD rules are not supported for COPY" +msgstr "les règles DO INSTEAD multi-instructions ne sont pas supportées par l'instruction COPY" + +#: commands/copyto.c:490 +#, c-format +msgid "COPY (SELECT INTO) is not supported" +msgstr "COPY (SELECT INTO) n'est pas supporté" + +#: commands/copyto.c:507 +#, c-format +msgid "COPY query must have a RETURNING clause" +msgstr "La requête COPY doit avoir une clause RETURNING" + +#: commands/copyto.c:536 +#, c-format +msgid "relation referenced by COPY statement has changed" +msgstr "la relation référencée par l'instruction COPY a changé" + +#: commands/copyto.c:595 #, c-format -msgid "column \"%s\" is a generated column" -msgstr "la colonne « %s » est une colonne générée" +msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" +msgstr "la colonne « %s » FORCE_QUOTE n'est pas référencée par COPY" -#: commands/copy.c:5124 +#: commands/copyto.c:705 #, c-format -msgid "Generated columns cannot be used in COPY." -msgstr "Les colonnes générées ne peuvent pas être utilisées dans COPY." +msgid "relative path not allowed for COPY to file" +msgstr "un chemin relatif n'est pas autorisé à utiliser COPY vers un fichier" -#: commands/copy.c:5139 commands/indexcmds.c:1579 commands/statscmds.c:214 commands/tablecmds.c:2092 commands/tablecmds.c:2633 commands/tablecmds.c:3012 parser/parse_relation.c:3353 parser/parse_relation.c:3373 utils/adt/tsvector_op.c:2559 +#: commands/copyto.c:724 #, c-format -msgid "column \"%s\" does not exist" -msgstr "la colonne « %s » n'existe pas" +msgid "could not open file \"%s\" for writing: %m" +msgstr "n'a pas pu ouvrir le fichier « %s » en écriture : %m" -#: commands/copy.c:5146 commands/tablecmds.c:2125 commands/trigger.c:937 parser/parse_target.c:1047 parser/parse_target.c:1058 +#: commands/copyto.c:727 #, c-format -msgid "column \"%s\" specified more than once" -msgstr "la colonne « %s » est spécifiée plus d'une fois" +msgid "COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \\copy." +msgstr "COPY TO indique au serveur PostgreSQL d'écrire un fichier. Vous pourriez vouloir utiliser la fonctionnalité \\copy de psql pour écrire en local." -#: commands/createas.c:216 commands/createas.c:499 +#: commands/createas.c:215 commands/createas.c:517 #, c-format msgid "too many column names were specified" msgstr "trop de noms de colonnes ont été spécifiés" -#: commands/createas.c:541 +#: commands/createas.c:540 #, c-format msgid "policies not yet implemented for this command" msgstr "politiques non encore implémentées pour cette commande" -#: commands/dbcommands.c:236 +#: commands/dbcommands.c:246 #, c-format msgid "LOCATION is not supported anymore" msgstr "LOCATION n'est plus supporté" -#: commands/dbcommands.c:237 +#: commands/dbcommands.c:247 #, c-format msgid "Consider using tablespaces instead." msgstr "Considérer l'utilisation de tablespaces." -#: commands/dbcommands.c:263 utils/adt/ascii.c:145 +#: commands/dbcommands.c:261 +#, c-format +msgid "LOCALE cannot be specified together with LC_COLLATE or LC_CTYPE." +msgstr "LOCALE ne peut pas être spécifié avec LC_COLLATE ou LC_CTYPE." + +#: commands/dbcommands.c:279 utils/adt/ascii.c:145 #, c-format msgid "%d is not a valid encoding code" msgstr "%d n'est pas un code d'encodage valide" -#: commands/dbcommands.c:274 utils/adt/ascii.c:127 +#: commands/dbcommands.c:290 utils/adt/ascii.c:127 #, c-format msgid "%s is not a valid encoding name" msgstr "%s n'est pas un nom d'encodage valide" -#: commands/dbcommands.c:293 commands/dbcommands.c:1515 commands/user.c:275 commands/user.c:680 +#: commands/dbcommands.c:314 commands/dbcommands.c:1569 commands/user.c:275 commands/user.c:691 #, c-format msgid "invalid connection limit: %d" msgstr "limite de connexion invalide : %d" -#: commands/dbcommands.c:312 +#: commands/dbcommands.c:333 #, c-format msgid "permission denied to create database" msgstr "droit refusé pour créer une base de données" -#: commands/dbcommands.c:335 +#: commands/dbcommands.c:356 #, c-format msgid "template database \"%s\" does not exist" msgstr "la base de données modèle « %s » n'existe pas" -#: commands/dbcommands.c:347 +#: commands/dbcommands.c:368 #, c-format msgid "permission denied to copy database \"%s\"" msgstr "droit refusé pour copier la base de données « %s »" -#: commands/dbcommands.c:363 +#: commands/dbcommands.c:384 #, c-format msgid "invalid server encoding %d" msgstr "encodage serveur %d invalide" -#: commands/dbcommands.c:369 commands/dbcommands.c:374 +#: commands/dbcommands.c:390 commands/dbcommands.c:395 #, c-format msgid "invalid locale name: \"%s\"" msgstr "nom de locale invalide : « %s »" -#: commands/dbcommands.c:394 +#: commands/dbcommands.c:415 #, c-format msgid "new encoding (%s) is incompatible with the encoding of the template database (%s)" msgstr "" "le nouvel encodage (%sà est incompatible avec l'encodage de la base de\n" "données modèle (%s)" -#: commands/dbcommands.c:397 +#: commands/dbcommands.c:418 #, c-format msgid "Use the same encoding as in the template database, or use template0 as template." msgstr "" "Utilisez le même encodage que celui de la base de données modèle,\n" "ou utilisez template0 comme modèle." -#: commands/dbcommands.c:402 +#: commands/dbcommands.c:423 #, c-format msgid "new collation (%s) is incompatible with the collation of the template database (%s)" msgstr "" "le nouveau tri (%s) est incompatible avec le tri de la base de\n" "données modèle (%s)" -#: commands/dbcommands.c:404 +#: commands/dbcommands.c:425 #, c-format msgid "Use the same collation as in the template database, or use template0 as template." msgstr "" "Utilisez le même tri que celui de la base de données modèle,\n" "ou utilisez template0 comme modèle." -#: commands/dbcommands.c:409 +#: commands/dbcommands.c:430 #, c-format msgid "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database (%s)" msgstr "" "le nouveau LC_CTYPE (%s) est incompatible avec le LC_CTYPE de la base de\n" "données modèle (%s)" -#: commands/dbcommands.c:411 +#: commands/dbcommands.c:432 #, c-format msgid "Use the same LC_CTYPE as in the template database, or use template0 as template." msgstr "" "Utilisez le même LC_CTYPE que celui de la base de données modèle,\n" "ou utilisez template0 comme modèle." -#: commands/dbcommands.c:433 commands/dbcommands.c:1167 +#: commands/dbcommands.c:454 commands/dbcommands.c:1196 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "pg_global ne peut pas être utilisé comme tablespace par défaut" -#: commands/dbcommands.c:459 +#: commands/dbcommands.c:480 #, c-format msgid "cannot assign new default tablespace \"%s\"" msgstr "ne peut pas affecter un nouveau tablespace par défaut « %s »" -#: commands/dbcommands.c:461 +#: commands/dbcommands.c:482 #, c-format msgid "There is a conflict because database \"%s\" already has some tables in this tablespace." msgstr "" "Il existe un conflit car la base de données « %s » a déjà quelques tables\n" "dans son tablespace." -#: commands/dbcommands.c:491 commands/dbcommands.c:1037 +#: commands/dbcommands.c:512 commands/dbcommands.c:1066 #, c-format msgid "database \"%s\" already exists" msgstr "la base de données « %s » existe déjà" -#: commands/dbcommands.c:505 +#: commands/dbcommands.c:526 #, c-format msgid "source database \"%s\" is being accessed by other users" msgstr "la base de données source « %s » est accédée par d'autres utilisateurs" -#: commands/dbcommands.c:748 commands/dbcommands.c:763 +#: commands/dbcommands.c:769 commands/dbcommands.c:784 #, c-format msgid "encoding \"%s\" does not match locale \"%s\"" msgstr "l'encodage « %s » ne correspond pas à la locale « %s »" -#: commands/dbcommands.c:751 +#: commands/dbcommands.c:772 #, c-format msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." msgstr "Le paramètre LC_CTYPE choisi nécessite l'encodage « %s »." -#: commands/dbcommands.c:766 +#: commands/dbcommands.c:787 #, c-format msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "Le paramètre LC_COLLATE choisi nécessite l'encodage « %s »." -#: commands/dbcommands.c:827 +#: commands/dbcommands.c:848 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "la base de données « %s » n'existe pas, poursuite du traitement" -#: commands/dbcommands.c:851 +#: commands/dbcommands.c:872 #, c-format msgid "cannot drop a template database" msgstr "ne peut pas supprimer une base de données modèle" -#: commands/dbcommands.c:857 +#: commands/dbcommands.c:878 #, c-format msgid "cannot drop the currently open database" msgstr "ne peut pas supprimer la base de données actuellement ouverte" -#: commands/dbcommands.c:870 +#: commands/dbcommands.c:891 #, c-format msgid "database \"%s\" is used by an active logical replication slot" msgstr "la base de données « %s » est utilisée par un slot de réplication logique actif" -#: commands/dbcommands.c:872 +#: commands/dbcommands.c:893 #, c-format msgid "There is %d active slot." msgid_plural "There are %d active slots." msgstr[0] "Il existe %d slot actif." msgstr[1] "Il existe %d slots actifs." -#: commands/dbcommands.c:886 commands/dbcommands.c:1059 commands/dbcommands.c:1189 -#, c-format -msgid "database \"%s\" is being accessed by other users" -msgstr "la base de données « %s » est en cours d'utilisation par d'autres utilisateurs" - -#: commands/dbcommands.c:899 +#: commands/dbcommands.c:907 #, c-format msgid "database \"%s\" is being used by logical replication subscription" msgstr "la base de données « %s » est utilisée par une souscription de réplication logique" -#: commands/dbcommands.c:901 +#: commands/dbcommands.c:909 #, c-format msgid "There is %d subscription." msgid_plural "There are %d subscriptions." msgstr[0] "Il existe %d souscription." msgstr[1] "Il existe %d souscriptions." -#: commands/dbcommands.c:1019 +#: commands/dbcommands.c:930 commands/dbcommands.c:1088 commands/dbcommands.c:1218 +#, c-format +msgid "database \"%s\" is being accessed by other users" +msgstr "la base de données « %s » est en cours d'utilisation par d'autres utilisateurs" + +#: commands/dbcommands.c:1048 #, c-format msgid "permission denied to rename database" msgstr "droit refusé pour le renommage de la base de données" -#: commands/dbcommands.c:1048 +#: commands/dbcommands.c:1077 #, c-format msgid "current database cannot be renamed" msgstr "la base de données actuelle ne peut pas être renommée" -#: commands/dbcommands.c:1145 +#: commands/dbcommands.c:1174 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "ne peut pas modifier le tablespace de la base de données actuellement ouverte" -#: commands/dbcommands.c:1248 +#: commands/dbcommands.c:1277 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "" "certaines relations de la base de données « %s » sont déjà dans le\n" "tablespace « %s »" -#: commands/dbcommands.c:1250 +#: commands/dbcommands.c:1279 #, c-format msgid "You must move them back to the database's default tablespace before using this command." msgstr "" "Vous devez d'abord les déplacer dans le tablespace par défaut de la base\n" "de données avant d'utiliser cette commande." -#: commands/dbcommands.c:1375 commands/dbcommands.c:1921 commands/dbcommands.c:2126 commands/dbcommands.c:2181 commands/tablespace.c:620 +#: commands/dbcommands.c:1404 commands/dbcommands.c:1980 commands/dbcommands.c:2203 commands/dbcommands.c:2261 commands/tablespace.c:631 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "" "certains fichiers inutiles pourraient se trouver dans l'ancien répertoire\n" "de la base de données « %s »" -#: commands/dbcommands.c:1496 +#: commands/dbcommands.c:1460 +#, c-format +msgid "unrecognized DROP DATABASE option \"%s\"" +msgstr "option de DROP DATABASE « %s » non reconnue" + +#: commands/dbcommands.c:1550 #, c-format msgid "option \"%s\" cannot be specified with other options" msgstr "l'option « %s » ne peut pas être spécifié avec d'autres options" -#: commands/dbcommands.c:1552 +#: commands/dbcommands.c:1606 #, c-format msgid "cannot disallow connections for current database" msgstr "ne peut pas désactiver les connexions pour la base de données courante" -#: commands/dbcommands.c:1688 +#: commands/dbcommands.c:1742 #, c-format msgid "permission denied to change owner of database" msgstr "droit refusé pour modifier le propriétaire de la base de données" -#: commands/dbcommands.c:2009 +#: commands/dbcommands.c:2086 #, c-format msgid "There are %d other session(s) and %d prepared transaction(s) using the database." msgstr "%d autres sessions et %d transactions préparées utilisent la base de données." -#: commands/dbcommands.c:2012 +#: commands/dbcommands.c:2089 #, c-format msgid "There is %d other session using the database." msgid_plural "There are %d other sessions using the database." msgstr[0] "%d autre session utilise la base de données." msgstr[1] "%d autres sessions utilisent la base de données." -#: commands/dbcommands.c:2017 +#: commands/dbcommands.c:2094 storage/ipc/procarray.c:3726 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." @@ -6403,1245 +6789,1274 @@ msgstr "l'argument de %s doit être un nom de type" msgid "invalid argument for %s: \"%s\"" msgstr "argument invalide pour %s : « %s »" -#: commands/dropcmds.c:99 commands/functioncmds.c:1272 utils/adt/ruleutils.c:2609 +#: commands/dropcmds.c:100 commands/functioncmds.c:1384 utils/adt/ruleutils.c:2806 #, c-format msgid "\"%s\" is an aggregate function" msgstr "« %s » est une fonction d'agrégat" -#: commands/dropcmds.c:101 +#: commands/dropcmds.c:102 #, c-format msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Utiliser DROP AGGREGATE pour supprimer les fonctions d'agrégat." -#: commands/dropcmds.c:157 commands/sequence.c:447 commands/tablecmds.c:3096 commands/tablecmds.c:3254 commands/tablecmds.c:3299 commands/tablecmds.c:14235 tcop/utility.c:1174 +#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3606 commands/tablecmds.c:3764 commands/tablecmds.c:3809 commands/tablecmds.c:15666 tcop/utility.c:1291 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "la relation « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:187 commands/dropcmds.c:286 commands/tablecmds.c:1165 +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1255 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "le schéma « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:227 commands/dropcmds.c:266 commands/tablecmds.c:253 +#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:273 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "le type « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:256 +#: commands/dropcmds.c:257 #, c-format msgid "access method \"%s\" does not exist, skipping" msgstr "la méthode d'accès « %s » n'existe pas, ignoré" -#: commands/dropcmds.c:274 +#: commands/dropcmds.c:275 #, c-format msgid "collation \"%s\" does not exist, skipping" msgstr "le collationnement « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:281 +#: commands/dropcmds.c:282 #, c-format msgid "conversion \"%s\" does not exist, skipping" msgstr "la conversion « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:292 +#: commands/dropcmds.c:293 commands/statscmds.c:641 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "l'objet statistique « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:299 +#: commands/dropcmds.c:300 #, c-format msgid "text search parser \"%s\" does not exist, skipping" msgstr "" "l'analyseur de recherche plein texte « %s » n'existe pas, poursuite du\n" "traitement" -#: commands/dropcmds.c:306 +#: commands/dropcmds.c:307 #, c-format msgid "text search dictionary \"%s\" does not exist, skipping" msgstr "" "le dictionnaire de recherche plein texte « %s » n'existe pas, poursuite du\n" "traitement" -#: commands/dropcmds.c:313 +#: commands/dropcmds.c:314 #, c-format msgid "text search template \"%s\" does not exist, skipping" msgstr "le modèle de recherche plein texte « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:320 +#: commands/dropcmds.c:321 #, c-format msgid "text search configuration \"%s\" does not exist, skipping" msgstr "" "la configuration de recherche plein texte « %s » n'existe pas, poursuite du\n" "traitement" -#: commands/dropcmds.c:325 +#: commands/dropcmds.c:326 #, c-format msgid "extension \"%s\" does not exist, skipping" msgstr "l'extension « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:335 +#: commands/dropcmds.c:336 #, c-format msgid "function %s(%s) does not exist, skipping" msgstr "la fonction %s(%s) n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:348 +#: commands/dropcmds.c:349 #, c-format msgid "procedure %s(%s) does not exist, skipping" msgstr "la procédure %s(%s) n'existe pas, ignoré" -#: commands/dropcmds.c:361 +#: commands/dropcmds.c:362 #, c-format msgid "routine %s(%s) does not exist, skipping" msgstr "la routine %s(%s) n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:374 +#: commands/dropcmds.c:375 #, c-format msgid "aggregate %s(%s) does not exist, skipping" msgstr "l'agrégat %s(%s) n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:387 +#: commands/dropcmds.c:388 #, c-format msgid "operator %s does not exist, skipping" msgstr "l'opérateur %s n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:393 +#: commands/dropcmds.c:394 #, c-format msgid "language \"%s\" does not exist, skipping" msgstr "le langage « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:402 +#: commands/dropcmds.c:403 #, c-format msgid "cast from type %s to type %s does not exist, skipping" msgstr "la conversion du type %s vers le type %s n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:411 +#: commands/dropcmds.c:412 #, c-format msgid "transform for type %s language \"%s\" does not exist, skipping" msgstr "la transformation pour le type %s et le langage « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:419 +#: commands/dropcmds.c:420 #, c-format msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" msgstr "le trigger « %s » de la relation « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:428 +#: commands/dropcmds.c:429 #, c-format msgid "policy \"%s\" for relation \"%s\" does not exist, skipping" msgstr "la politique « %s » de la relation « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:435 +#: commands/dropcmds.c:436 #, c-format msgid "event trigger \"%s\" does not exist, skipping" msgstr "le trigger sur événement « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:441 +#: commands/dropcmds.c:442 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist, skipping" msgstr "la règle « %s » de la relation « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:448 +#: commands/dropcmds.c:449 #, c-format msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "le wrapper de données distantes « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:452 commands/foreigncmds.c:1400 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1351 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "le serveur « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:461 +#: commands/dropcmds.c:462 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\", skipping" msgstr "la classe d'opérateur « %s » n'existe pas pour la méthode d'accès « %s », ignoré" -#: commands/dropcmds.c:473 +#: commands/dropcmds.c:474 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\", skipping" msgstr "la famille d'opérateur « %s » n'existe pas pour la méthode d'accès « %s », ignoré" -#: commands/dropcmds.c:480 +#: commands/dropcmds.c:481 #, c-format msgid "publication \"%s\" does not exist, skipping" msgstr "la publication « %s » n'existe pas, poursuite du traitement" -#: commands/event_trigger.c:187 +#: commands/event_trigger.c:125 #, c-format msgid "permission denied to create event trigger \"%s\"" msgstr "droit refusé pour créer le trigger sur événement « %s »" -#: commands/event_trigger.c:189 +#: commands/event_trigger.c:127 #, c-format msgid "Must be superuser to create an event trigger." msgstr "Doit être super-utilisateur pour créer un trigger sur événement." -#: commands/event_trigger.c:198 +#: commands/event_trigger.c:136 #, c-format msgid "unrecognized event name \"%s\"" msgstr "nom d'événement non reconnu : « %s »" -#: commands/event_trigger.c:215 +#: commands/event_trigger.c:153 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "variable « %s » du filtre non reconnu" -#: commands/event_trigger.c:270 +#: commands/event_trigger.c:207 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "valeur de filtre « %s » non reconnu pour la variable de filtre « %s »" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:276 commands/event_trigger.c:346 +#: commands/event_trigger.c:213 commands/event_trigger.c:235 #, c-format msgid "event triggers are not supported for %s" msgstr "les triggers sur événemenr ne sont pas supportés pour %s" -#: commands/event_trigger.c:369 +#: commands/event_trigger.c:248 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "variable « %s » du filtre spécifiée plus d'une fois" -#: commands/event_trigger.c:519 commands/event_trigger.c:563 commands/event_trigger.c:657 +#: commands/event_trigger.c:377 commands/event_trigger.c:421 commands/event_trigger.c:515 #, c-format msgid "event trigger \"%s\" does not exist" msgstr "le trigger sur événement « %s » n'existe pas" -#: commands/event_trigger.c:625 +#: commands/event_trigger.c:483 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "droit refusé pour modifier le propriétaire du trigger sur événement « %s »" -#: commands/event_trigger.c:627 +#: commands/event_trigger.c:485 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "Le propriétaire du trigger sur événement doit être un super-utilisateur." -#: commands/event_trigger.c:1465 +#: commands/event_trigger.c:1304 #, c-format msgid "%s can only be called in a sql_drop event trigger function" msgstr "%s peut seulement être appelé dans une fonction de trigger sur événement sql_drop" -#: commands/event_trigger.c:1585 commands/event_trigger.c:1606 +#: commands/event_trigger.c:1424 commands/event_trigger.c:1445 #, c-format msgid "%s can only be called in a table_rewrite event trigger function" msgstr "%s peut seulement être appelé dans une fonction de trigger sur événement table_rewrite" -#: commands/event_trigger.c:2017 +#: commands/event_trigger.c:1862 #, c-format msgid "%s can only be called in an event trigger function" msgstr "%s peut seulement être appelé dans une fonction de trigger sur événement" -#: commands/explain.c:193 +#: commands/explain.c:218 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "valeur non reconnue pour l'option « %s » d'EXPLAIN : « %s »" -#: commands/explain.c:200 +#: commands/explain.c:225 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "option d'EXPLAIN « %s » non reconnu" -#: commands/explain.c:208 +#: commands/explain.c:233 #, c-format -msgid "EXPLAIN option BUFFERS requires ANALYZE" -msgstr "l'option BUFFERS d'EXPLAIN nécessite ANALYZE" +msgid "EXPLAIN option WAL requires ANALYZE" +msgstr "l'option WAL d'EXPLAIN nécessite ANALYZE" -#: commands/explain.c:217 +#: commands/explain.c:242 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "l'option TIMING d'EXPLAIN nécessite ANALYZE" -#: commands/extension.c:171 commands/extension.c:2918 +#: commands/extension.c:173 commands/extension.c:3013 #, c-format msgid "extension \"%s\" does not exist" msgstr "l'extension « %s » n'existe pas" -#: commands/extension.c:270 commands/extension.c:279 commands/extension.c:291 commands/extension.c:301 +#: commands/extension.c:272 commands/extension.c:281 commands/extension.c:293 commands/extension.c:303 #, c-format msgid "invalid extension name: \"%s\"" msgstr "nom d'extension invalide : « %s »" -#: commands/extension.c:271 +#: commands/extension.c:273 #, c-format msgid "Extension names must not be empty." msgstr "Les noms d'extension ne doivent pas être vides." -#: commands/extension.c:280 +#: commands/extension.c:282 #, c-format msgid "Extension names must not contain \"--\"." msgstr "Les noms d'extension ne doivent pas contenir « -- »." -#: commands/extension.c:292 +#: commands/extension.c:294 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "Les noms des extensions ne doivent pas commencer ou finir avec un tiret (« - »)." -#: commands/extension.c:302 +#: commands/extension.c:304 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "Les noms des extensions ne doivent pas contenir des caractères séparateurs de répertoire." -#: commands/extension.c:317 commands/extension.c:326 commands/extension.c:335 commands/extension.c:345 +#: commands/extension.c:319 commands/extension.c:328 commands/extension.c:337 commands/extension.c:347 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "nom de version de l'extension invalide : « %s »" -#: commands/extension.c:318 +#: commands/extension.c:320 #, c-format msgid "Version names must not be empty." msgstr "Les noms de version ne doivent pas être vides." -#: commands/extension.c:327 +#: commands/extension.c:329 #, c-format msgid "Version names must not contain \"--\"." msgstr "Les noms de version ne doivent pas contenir « -- »." -#: commands/extension.c:336 +#: commands/extension.c:338 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "Les noms de version ne doivent ni commencer ni se terminer avec un tiret." -#: commands/extension.c:346 +#: commands/extension.c:348 #, c-format msgid "Version names must not contain directory separator characters." msgstr "" "Les noms de version ne doivent pas contenir de caractères séparateurs de\n" "répertoire." -#: commands/extension.c:496 +#: commands/extension.c:498 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier de contrôle d'extension « %s » : %m" -#: commands/extension.c:518 commands/extension.c:528 +#: commands/extension.c:520 commands/extension.c:530 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "" "le paramètre « %s » ne peut pas être configuré dans un fichier de contrôle\n" "secondaire de l'extension" -#: commands/extension.c:550 commands/extension.c:558 utils/misc/guc.c:6540 +#: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 utils/misc/guc.c:7126 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "le paramètre « %s » requiert une valeur booléenne" -#: commands/extension.c:567 +#: commands/extension.c:577 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "« %s » n'est pas un nom d'encodage valide" -#: commands/extension.c:581 +#: commands/extension.c:591 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "l'argument « %s » doit être une liste de noms d'extension" -#: commands/extension.c:588 +#: commands/extension.c:598 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "paramètre « %s » non reconnu dans le fichier « %s »" -#: commands/extension.c:597 +#: commands/extension.c:607 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "le paramètre « schema » ne peut pas être indiqué quand « relocatable » est vrai" -#: commands/extension.c:762 +#: commands/extension.c:785 #, c-format msgid "transaction control statements are not allowed within an extension script" msgstr "" "les instructions de contrôle des transactions ne sont pas autorisées dans un\n" "script d'extension" -#: commands/extension.c:808 +#: commands/extension.c:861 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "droit refusé pour créer l'extension « %s »" -#: commands/extension.c:810 +#: commands/extension.c:864 +#, c-format +msgid "Must have CREATE privilege on current database to create this extension." +msgstr "Doit avoir le droit CREATE sur la base actuelle pour créer cette extension." + +#: commands/extension.c:865 #, c-format msgid "Must be superuser to create this extension." msgstr "Doit être super-utilisateur pour créer cette extension." -#: commands/extension.c:814 +#: commands/extension.c:869 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "droit refusé pour mettre à jour l'extension « %s »" -#: commands/extension.c:816 +#: commands/extension.c:872 +#, c-format +msgid "Must have CREATE privilege on current database to update this extension." +msgstr "Doit avoir le droit CREATE sur la base actuelle pour mettre à jour cette extension." + +#: commands/extension.c:873 #, c-format msgid "Must be superuser to update this extension." msgstr "Doit être super-utilisateur pour mettre à jour cette extension." -#: commands/extension.c:1100 +#: commands/extension.c:1200 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "l'extension « %s » n'a pas de chemin de mise à jour pour aller de la version « %s » à la version « %s »" -#: commands/extension.c:1307 commands/extension.c:2979 +#: commands/extension.c:1408 commands/extension.c:3074 #, c-format msgid "version to install must be specified" msgstr "la version à installer doit être précisée" -#: commands/extension.c:1329 -#, c-format -msgid "FROM version must be different from installation target version \"%s\"" -msgstr "la version FROM doit être différente de la version cible d'installation « %s »" - -#: commands/extension.c:1394 +#: commands/extension.c:1445 #, c-format msgid "extension \"%s\" has no installation script nor update path for version \"%s\"" msgstr "l'extension « %s » n'a pas de script d'installation ou de chemin de mise à jour pour la version « %s »" -#: commands/extension.c:1429 +#: commands/extension.c:1479 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "l'extension « %s » doit être installée dans le schéma « %s »" -#: commands/extension.c:1589 +#: commands/extension.c:1639 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "dépendance cyclique détectée entre les extensions « %s » et « %s »" -#: commands/extension.c:1594 +#: commands/extension.c:1644 #, c-format msgid "installing required extension \"%s\"" msgstr "installation de l'extension requise « %s »" -#: commands/extension.c:1618 +#: commands/extension.c:1667 #, c-format msgid "required extension \"%s\" is not installed" msgstr "l'extension « %s » requise n'est pas installée" -#: commands/extension.c:1621 +#: commands/extension.c:1670 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "Utilisez CREATE EXTENSION ... CASCADE pour installer également les extensions requises." -#: commands/extension.c:1658 +#: commands/extension.c:1705 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "l'extension « %s » existe déjà, poursuite du traitement" -#: commands/extension.c:1665 +#: commands/extension.c:1712 #, c-format msgid "extension \"%s\" already exists" msgstr "l'extension « %s » existe déjà" -#: commands/extension.c:1676 +#: commands/extension.c:1723 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "le CREATE EXTENSION imbriqué n'est pas supporté" -#: commands/extension.c:1860 +#: commands/extension.c:1896 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "ne peut pas supprimer l'extension « %s » car il est en cours de modification" -#: commands/extension.c:2362 +#: commands/extension.c:2457 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "%s ne peut être appelé qu'à partir d'un script SQL exécuté par CREATE EXTENSION" -#: commands/extension.c:2374 +#: commands/extension.c:2469 #, c-format msgid "OID %u does not refer to a table" msgstr "l'OID %u ne fait pas référence à une table" -#: commands/extension.c:2379 +#: commands/extension.c:2474 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "la table « %s » n'est pas un membre de l'extension en cours de création" -#: commands/extension.c:2733 +#: commands/extension.c:2828 #, c-format msgid "cannot move extension \"%s\" into schema \"%s\" because the extension contains the schema" msgstr "" "ne peut pas déplacer l'extension « %s » dans le schéma « %s » car l'extension\n" "contient le schéma" -#: commands/extension.c:2774 commands/extension.c:2837 +#: commands/extension.c:2869 commands/extension.c:2932 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "l'extension « %s » ne supporte pas SET SCHEMA" -#: commands/extension.c:2839 +#: commands/extension.c:2934 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "%s n'est pas dans le schéma de l'extension « %s »" -#: commands/extension.c:2898 +#: commands/extension.c:2993 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "un ALTER EXTENSION imbriqué n'est pas supporté" -#: commands/extension.c:2990 +#: commands/extension.c:3085 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "la version « %s » de l'extension « %s » est déjà installée" -#: commands/extension.c:3241 +#: commands/extension.c:3297 +#, c-format +msgid "cannot add an object of this type to an extension" +msgstr "ne peut pas ajouter un objet de ce type à une extension" + +#: commands/extension.c:3355 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "" "ne peut pas ajouter le schéma « %s » à l'extension « %s » car le schéma\n" "contient l'extension" -#: commands/extension.c:3269 +#: commands/extension.c:3383 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s n'est pas un membre de l'extension « %s »" -#: commands/extension.c:3335 +#: commands/extension.c:3449 #, c-format msgid "file \"%s\" is too large" msgstr "le fichier « %s » est trop gros" -#: commands/foreigncmds.c:151 commands/foreigncmds.c:160 +#: commands/foreigncmds.c:148 commands/foreigncmds.c:157 #, c-format msgid "option \"%s\" not found" msgstr "option « %s » non trouvé" -#: commands/foreigncmds.c:170 +#: commands/foreigncmds.c:167 #, c-format msgid "option \"%s\" provided more than once" msgstr "option « %s » fournie plus d'une fois" -#: commands/foreigncmds.c:224 commands/foreigncmds.c:232 +#: commands/foreigncmds.c:221 commands/foreigncmds.c:229 #, c-format msgid "permission denied to change owner of foreign-data wrapper \"%s\"" msgstr "droit refusé pour modifier le propriétaire du wrapper de données distantes « %s »" -#: commands/foreigncmds.c:226 +#: commands/foreigncmds.c:223 #, c-format msgid "Must be superuser to change owner of a foreign-data wrapper." msgstr "" "Doit être super-utilisateur pour modifier le propriétaire du wrapper de\n" "données distantes." -#: commands/foreigncmds.c:234 +#: commands/foreigncmds.c:231 #, c-format msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "Le propriétaire du wrapper de données distantes doit être un super-utilisateur." -#: commands/foreigncmds.c:294 commands/foreigncmds.c:715 foreign/foreign.c:701 +#: commands/foreigncmds.c:291 commands/foreigncmds.c:711 foreign/foreign.c:701 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "le wrapper de données distantes « %s » n'existe pas" -#: commands/foreigncmds.c:588 +#: commands/foreigncmds.c:584 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "droit refusé pour la création du wrapper de données distantes « %s »" -#: commands/foreigncmds.c:590 +#: commands/foreigncmds.c:586 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "Doit être super-utilisateur pour créer un wrapper de données distantes." -#: commands/foreigncmds.c:705 +#: commands/foreigncmds.c:701 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "droit refusé pour modifier le wrapper de données distantes « %s »" -#: commands/foreigncmds.c:707 +#: commands/foreigncmds.c:703 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "Doit être super-utilisateur pour modifier un wrapper de données distantes." -#: commands/foreigncmds.c:738 +#: commands/foreigncmds.c:734 #, c-format msgid "changing the foreign-data wrapper handler can change behavior of existing foreign tables" msgstr "" "la modification du validateur de wrapper de données distantes peut modifier\n" "le comportement des tables distantes existantes" -#: commands/foreigncmds.c:753 +#: commands/foreigncmds.c:749 #, c-format msgid "changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid" msgstr "" "la modification du validateur du wrapper de données distantes peut faire en\n" "sorte que les options des objets dépendants deviennent invalides" -#: commands/foreigncmds.c:899 +#: commands/foreigncmds.c:871 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "le serveur « %s » existe déjà, poursuite du traitement" -#: commands/foreigncmds.c:1187 +#: commands/foreigncmds.c:1135 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "la correspondance d'utilisateur « %s » existe déjà pour le serveur « %s », poursuite du traitement" -#: commands/foreigncmds.c:1197 +#: commands/foreigncmds.c:1145 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "la correspondance d'utilisateur « %s » existe déjà pour le serveur « %s »" -#: commands/foreigncmds.c:1297 commands/foreigncmds.c:1414 +#: commands/foreigncmds.c:1245 commands/foreigncmds.c:1365 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "la correspondance d'utilisateur « %s » n'existe pas pour le serveur « %s »" -#: commands/foreigncmds.c:1419 +#: commands/foreigncmds.c:1370 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "la correspondance d'utilisateur « %s » n'existe pas pour le serveur « %s », poursuite du traitement" -#: commands/foreigncmds.c:1570 foreign/foreign.c:389 +#: commands/foreigncmds.c:1498 foreign/foreign.c:389 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "le wrapper de données distantes « %s » n'a pas de gestionnaire" -#: commands/foreigncmds.c:1576 +#: commands/foreigncmds.c:1504 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "le wrapper de données distantes « %s » ne supporte pas IMPORT FOREIGN SCHEMA" -#: commands/foreigncmds.c:1679 +#: commands/foreigncmds.c:1607 #, c-format msgid "importing foreign table \"%s\"" msgstr "import de la table distante « %s »" -#: commands/functioncmds.c:103 +#: commands/functioncmds.c:107 #, c-format msgid "SQL function cannot return shell type %s" msgstr "la fonction SQL ne peut pas retourner le type shell %s" -#: commands/functioncmds.c:108 +#: commands/functioncmds.c:112 #, c-format msgid "return type %s is only a shell" msgstr "le type de retour %s est seulement un shell" -#: commands/functioncmds.c:138 parser/parse_type.c:355 +#: commands/functioncmds.c:142 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "le modificateur de type ne peut pas être précisé pour le type shell « %s »" -#: commands/functioncmds.c:144 +#: commands/functioncmds.c:148 #, c-format msgid "type \"%s\" is not yet defined" msgstr "le type « %s » n'est pas encore défini" -#: commands/functioncmds.c:145 +#: commands/functioncmds.c:149 #, c-format msgid "Creating a shell type definition." msgstr "Création d'une définition d'un type shell." -#: commands/functioncmds.c:237 +#: commands/functioncmds.c:243 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "la fonction SQL ne peut pas accepter le type shell %s" -#: commands/functioncmds.c:243 +#: commands/functioncmds.c:249 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "l'agrégat ne peut pas accepter le type shell %s" -#: commands/functioncmds.c:248 +#: commands/functioncmds.c:254 #, c-format msgid "argument type %s is only a shell" msgstr "le type d'argument %s n'est qu'une enveloppe" -#: commands/functioncmds.c:258 +#: commands/functioncmds.c:264 #, c-format msgid "type %s does not exist" msgstr "le type %s n'existe pas" -#: commands/functioncmds.c:272 +#: commands/functioncmds.c:278 #, c-format msgid "aggregates cannot accept set arguments" msgstr "les agrégats ne peuvent pas utiliser des ensembles comme arguments" -#: commands/functioncmds.c:276 +#: commands/functioncmds.c:282 #, c-format msgid "procedures cannot accept set arguments" msgstr "les procédures ne peuvent pas utiliser des arguments d'ensemble" -#: commands/functioncmds.c:280 +#: commands/functioncmds.c:286 #, c-format msgid "functions cannot accept set arguments" msgstr "les fonctions ne peuvent pas accepter des arguments d'ensemble" -#: commands/functioncmds.c:288 -#, c-format -msgid "procedures cannot have OUT arguments" -msgstr "les procédures ne peuvent pas avoir d'argument OUT" - -#: commands/functioncmds.c:289 -#, c-format -msgid "INOUT arguments are permitted." -msgstr "les arguments INOUT ne sont pas autorisés." - -#: commands/functioncmds.c:299 -#, c-format -msgid "VARIADIC parameter must be the last input parameter" +#: commands/functioncmds.c:306 +#, fuzzy, c-format +#| msgid "VARIADIC parameter must be the last input parameter" +msgid "VARIADIC parameter must be the last signature parameter" msgstr "le paramètre VARIADIC doit être le dernier paramètre en entrée" -#: commands/functioncmds.c:329 +#: commands/functioncmds.c:336 #, c-format msgid "VARIADIC parameter must be an array" msgstr "le paramètre VARIADIC doit être un tableau" -#: commands/functioncmds.c:369 +#: commands/functioncmds.c:376 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "le nom du paramètre « %s » est utilisé plus d'une fois" -#: commands/functioncmds.c:384 +#: commands/functioncmds.c:394 #, c-format msgid "only input parameters can have default values" msgstr "seuls les paramètres en entrée peuvent avoir des valeurs par défaut" -#: commands/functioncmds.c:399 +#: commands/functioncmds.c:409 #, c-format msgid "cannot use table references in parameter default value" msgstr "" "ne peut pas utiliser les références de tables dans la valeur par défaut des\n" "paramètres" -#: commands/functioncmds.c:423 +#: commands/functioncmds.c:433 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "les paramètres en entrée suivant un paramètre avec valeur par défaut doivent aussi avoir des valeurs par défaut" -#: commands/functioncmds.c:575 commands/functioncmds.c:766 +#: commands/functioncmds.c:585 commands/functioncmds.c:776 #, c-format msgid "invalid attribute in procedure definition" msgstr "attribute invalide dans la définition de la procédure" -#: commands/functioncmds.c:671 +#: commands/functioncmds.c:681 #, c-format msgid "support function %s must return type %s" msgstr "la fonction de support %s doit renvoyer le type %s" -#: commands/functioncmds.c:682 +#: commands/functioncmds.c:692 #, c-format msgid "must be superuser to specify a support function" msgstr "doit être super-utilisateur pour spécifier une fonction de support" -#: commands/functioncmds.c:798 +#: commands/functioncmds.c:825 commands/functioncmds.c:1429 +#, c-format +msgid "COST must be positive" +msgstr "COST doit être positif" + +#: commands/functioncmds.c:833 commands/functioncmds.c:1437 +#, c-format +msgid "ROWS must be positive" +msgstr "ROWS doit être positif" + +#: commands/functioncmds.c:862 #, c-format msgid "no function body specified" msgstr "aucun corps de fonction spécifié" -#: commands/functioncmds.c:808 +#: commands/functioncmds.c:867 #, c-format -msgid "no language specified" -msgstr "aucun langage spécifié" +msgid "duplicate function body specified" +msgstr "corps de fonction dupliqué spécifié" -#: commands/functioncmds.c:833 commands/functioncmds.c:1317 +#: commands/functioncmds.c:872 #, c-format -msgid "COST must be positive" -msgstr "COST doit être positif" +msgid "inline SQL function body only valid for language SQL" +msgstr "" -#: commands/functioncmds.c:841 commands/functioncmds.c:1325 -#, c-format -msgid "ROWS must be positive" -msgstr "ROWS doit être positif" +#: commands/functioncmds.c:914 +#, fuzzy, c-format +#| msgid "event trigger functions cannot have declared arguments" +msgid "SQL function with unquoted function body cannot have polymorphic arguments" +msgstr "les fonctions triggers sur événement ne peuvent pas avoir des arguments déclarés" + +#: commands/functioncmds.c:940 commands/functioncmds.c:959 +#, fuzzy, c-format +#| msgid "%s is not allowed in a SQL function" +msgid "%s is not yet supported in unquoted SQL function body" +msgstr "%s n'est pas autorisé dans une fonction SQL" -#: commands/functioncmds.c:895 +#: commands/functioncmds.c:987 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "seul un élément AS est nécessaire pour le langage « %s »" -#: commands/functioncmds.c:993 commands/functioncmds.c:2227 commands/proclang.c:568 +#: commands/functioncmds.c:1092 +#, c-format +msgid "no language specified" +msgstr "aucun langage spécifié" + +#: commands/functioncmds.c:1100 commands/functioncmds.c:2102 commands/proclang.c:237 #, c-format msgid "language \"%s\" does not exist" msgstr "le langage « %s » n'existe pas" -#: commands/functioncmds.c:995 commands/functioncmds.c:2229 +#: commands/functioncmds.c:1102 commands/functioncmds.c:2104 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "Utiliser CREATE EXTENSION pour charger le langage dans la base de données." -#: commands/functioncmds.c:1030 commands/functioncmds.c:1309 +#: commands/functioncmds.c:1137 commands/functioncmds.c:1421 #, c-format msgid "only superuser can define a leakproof function" msgstr "seul un superutilisateur peut définir une fonction leakproof" -#: commands/functioncmds.c:1079 +#: commands/functioncmds.c:1188 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "le type de résultat de la fonction doit être %s à cause des paramètres OUT" -#: commands/functioncmds.c:1092 +#: commands/functioncmds.c:1201 #, c-format msgid "function result type must be specified" msgstr "le type de résultat de la fonction doit être spécifié" -#: commands/functioncmds.c:1144 commands/functioncmds.c:1329 +#: commands/functioncmds.c:1255 commands/functioncmds.c:1441 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "ROWS n'est pas applicable quand la fonction ne renvoie pas un ensemble" -#: commands/functioncmds.c:1521 +#: commands/functioncmds.c:1541 #, c-format msgid "source data type %s is a pseudo-type" msgstr "le type de données source %s est un pseudo-type" -#: commands/functioncmds.c:1527 +#: commands/functioncmds.c:1547 #, c-format msgid "target data type %s is a pseudo-type" msgstr "le type de données cible %s est un pseudo-type" -#: commands/functioncmds.c:1551 +#: commands/functioncmds.c:1571 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "la conversion sera ignorée car le type de données source est un domaine" -#: commands/functioncmds.c:1556 +#: commands/functioncmds.c:1576 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "la conversion sera ignorée car le type de données cible est un domaine" -#: commands/functioncmds.c:1581 +#: commands/functioncmds.c:1601 #, c-format msgid "cast function must take one to three arguments" msgstr "la fonction de conversion doit prendre de un à trois arguments" -#: commands/functioncmds.c:1585 +#: commands/functioncmds.c:1605 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "l'argument de la fonction de conversion doit correspondre ou être binary-coercible à partir du type de la donnée source" -#: commands/functioncmds.c:1589 +#: commands/functioncmds.c:1609 #, c-format msgid "second argument of cast function must be type %s" msgstr "le second argument de la fonction de conversion doit être de type %s" -#: commands/functioncmds.c:1594 +#: commands/functioncmds.c:1614 #, c-format msgid "third argument of cast function must be type %s" msgstr "le troisième argument de la fonction de conversion doit être de type %s" -#: commands/functioncmds.c:1599 +#: commands/functioncmds.c:1619 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "" "le type de donnée en retour de la fonction de conversion doit correspondre\n" "ou être coercible binairement au type de données cible" -#: commands/functioncmds.c:1610 +#: commands/functioncmds.c:1630 #, c-format msgid "cast function must not be volatile" msgstr "la fonction de conversion ne doit pas être volatile" -#: commands/functioncmds.c:1615 +#: commands/functioncmds.c:1635 #, c-format msgid "cast function must be a normal function" msgstr "la fonction de conversion doit être une fonction normale" -#: commands/functioncmds.c:1619 +#: commands/functioncmds.c:1639 #, c-format msgid "cast function must not return a set" msgstr "la fonction de conversion ne doit pas renvoyer un ensemble" -#: commands/functioncmds.c:1645 +#: commands/functioncmds.c:1665 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "doit être super-utilisateur pour créer une fonction de conversion SANS FONCTION" -#: commands/functioncmds.c:1660 +#: commands/functioncmds.c:1680 #, c-format msgid "source and target data types are not physically compatible" msgstr "les types de données source et cible ne sont pas physiquement compatibles" -#: commands/functioncmds.c:1675 +#: commands/functioncmds.c:1695 #, c-format msgid "composite data types are not binary-compatible" msgstr "les types de données composites ne sont pas compatibles binairement" -#: commands/functioncmds.c:1681 +#: commands/functioncmds.c:1701 #, c-format msgid "enum data types are not binary-compatible" msgstr "les types de données enum ne sont pas compatibles binairement" -#: commands/functioncmds.c:1687 +#: commands/functioncmds.c:1707 #, c-format msgid "array data types are not binary-compatible" msgstr "les types de données tableau ne sont pas compatibles binairement" -#: commands/functioncmds.c:1704 +#: commands/functioncmds.c:1724 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "les types de données domaines ne sont pas compatibles binairement" -#: commands/functioncmds.c:1714 +#: commands/functioncmds.c:1734 #, c-format msgid "source data type and target data type are the same" msgstr "les types de données source et cible sont identiques" -#: commands/functioncmds.c:1747 -#, c-format -msgid "cast from type %s to type %s already exists" -msgstr "la conversion du type %s vers le type %s existe déjà" - -#: commands/functioncmds.c:1822 -#, c-format -msgid "cast from type %s to type %s does not exist" -msgstr "la conversion du type %s vers le type %s n'existe pas" - -#: commands/functioncmds.c:1861 +#: commands/functioncmds.c:1767 #, c-format msgid "transform function must not be volatile" msgstr "la fonction de transformation ne doit pas être volatile" -#: commands/functioncmds.c:1865 +#: commands/functioncmds.c:1771 #, c-format msgid "transform function must be a normal function" msgstr "la fonction de transformation doit être une fonction normale" -#: commands/functioncmds.c:1869 +#: commands/functioncmds.c:1775 #, c-format msgid "transform function must not return a set" msgstr "la fonction de transformation ne doit pas renvoyer un ensemble" -#: commands/functioncmds.c:1873 +#: commands/functioncmds.c:1779 #, c-format msgid "transform function must take one argument" msgstr "la fonction de transformation doit prendre de un argument" -#: commands/functioncmds.c:1877 +#: commands/functioncmds.c:1783 #, c-format msgid "first argument of transform function must be type %s" msgstr "le premier argument de la fonction de transformation doit être de type %s" -#: commands/functioncmds.c:1915 +#: commands/functioncmds.c:1822 #, c-format msgid "data type %s is a pseudo-type" msgstr "le type de données %s est un pseudo-type" -#: commands/functioncmds.c:1921 +#: commands/functioncmds.c:1828 #, c-format msgid "data type %s is a domain" msgstr "le type de données %s est un domaine" -#: commands/functioncmds.c:1961 +#: commands/functioncmds.c:1868 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "le type de donnée en retour de la fonction FROM SQL doit être %s" -#: commands/functioncmds.c:1987 +#: commands/functioncmds.c:1894 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "le type de donnée en retour de la fonction TO SQL doit être du type de données de la transformation" -#: commands/functioncmds.c:2016 +#: commands/functioncmds.c:1923 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "la transformation pour le type %s et le langage « %s » existe déjà" -#: commands/functioncmds.c:2108 +#: commands/functioncmds.c:2010 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "la transformation pour le type %s et le langage « %s » n'existe pas" -#: commands/functioncmds.c:2159 +#: commands/functioncmds.c:2034 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "la fonction %s existe déjà dans le schéma « %s »" -#: commands/functioncmds.c:2214 +#: commands/functioncmds.c:2089 #, c-format msgid "no inline code specified" msgstr "aucun code en ligne spécifié" -#: commands/functioncmds.c:2260 +#: commands/functioncmds.c:2135 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "le langage « %s » ne supporte pas l'exécution de code en ligne" -#: commands/functioncmds.c:2372 +#: commands/functioncmds.c:2252 #, c-format msgid "cannot pass more than %d argument to a procedure" msgid_plural "cannot pass more than %d arguments to a procedure" msgstr[0] "ne peut pas passer plus de %d argument à une procédure" msgstr[1] "ne peut pas passer plus de %d arguments à une procédure" -#: commands/indexcmds.c:526 +#: commands/indexcmds.c:618 #, c-format msgid "must specify at least one column" msgstr "doit spécifier au moins une colonne" -#: commands/indexcmds.c:530 +#: commands/indexcmds.c:622 #, c-format msgid "cannot use more than %d columns in an index" msgstr "ne peut pas utiliser plus de %d colonnes dans un index" -#: commands/indexcmds.c:569 +#: commands/indexcmds.c:661 #, c-format msgid "cannot create index on foreign table \"%s\"" msgstr "ne peut pas créer un index sur la table distante « %s »" -#: commands/indexcmds.c:594 +#: commands/indexcmds.c:692 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "ne peut pas créer un index sur la table partitionnée « %s » de manière concurrente" -#: commands/indexcmds.c:599 +#: commands/indexcmds.c:697 #, c-format msgid "cannot create exclusion constraints on partitioned table \"%s\"" msgstr "ne peut pas créer de contraintes d'exclusion sur la table partitionnée « %s »" -#: commands/indexcmds.c:609 +#: commands/indexcmds.c:707 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "ne peut pas créer les index sur les tables temporaires des autres sessions" -#: commands/indexcmds.c:647 commands/tablecmds.c:676 commands/tablespace.c:1174 +#: commands/indexcmds.c:745 commands/tablecmds.c:747 commands/tablespace.c:1185 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "ne peut pas spécifier un tablespace par défaut pour les relations partitionnées" -#: commands/indexcmds.c:679 commands/tablecmds.c:711 commands/tablecmds.c:12361 commands/tablecmds.c:12473 +#: commands/indexcmds.c:777 commands/tablecmds.c:782 commands/tablecmds.c:3306 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "seules les relations partagées peuvent être placées dans le tablespace pg_global" -#: commands/indexcmds.c:712 +#: commands/indexcmds.c:810 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "substitution de la méthode d'accès obsolète « rtree » par « gist »" -#: commands/indexcmds.c:733 +#: commands/indexcmds.c:831 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "la méthode d'accès « %s » ne supporte pas les index uniques" -#: commands/indexcmds.c:738 +#: commands/indexcmds.c:836 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "la méthode d'accès « %s » ne supporte pas les colonnes incluses" -#: commands/indexcmds.c:743 +#: commands/indexcmds.c:841 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "la méthode d'accès « %s » ne supporte pas les index multi-colonnes" -#: commands/indexcmds.c:748 +#: commands/indexcmds.c:846 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "la méthode d'accès « %s » ne supporte pas les contraintes d'exclusion" -#: commands/indexcmds.c:850 +#: commands/indexcmds.c:969 +#, c-format +msgid "cannot match partition key to an index using access method \"%s\"" +msgstr "ne peut pas faire correspondre la clé de partitionnement à un index utilisant la méthode d'accès « %s »" + +#: commands/indexcmds.c:979 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "contrainte %s non supporée avec la définition de clé de partitionnement" -#: commands/indexcmds.c:852 +#: commands/indexcmds.c:981 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "les contraintes %s ne peuvent pas être utilisées quand les clés de partitionnement incluent des expressions." -#: commands/indexcmds.c:870 +#: commands/indexcmds.c:1020 #, c-format -msgid "insufficient columns in %s constraint definition" -msgstr "colonnes infuffisantes dans la définition de contrainte de %s" +msgid "unique constraint on partitioned table must include all partitioning columns" +msgstr "la contrainte unique sur la table partitionnée doit inclure toutes les colonnes de partitionnement" -#: commands/indexcmds.c:872 +#: commands/indexcmds.c:1021 #, c-format msgid "%s constraint on table \"%s\" lacks column \"%s\" which is part of the partition key." msgstr "la contrainte %s sur la table « %s » ne contient pas la colonne « %s » qui fait partie de la clé de partitionnement." -#: commands/indexcmds.c:891 commands/indexcmds.c:910 +#: commands/indexcmds.c:1040 commands/indexcmds.c:1059 #, c-format msgid "index creation on system columns is not supported" msgstr "la création d'un index sur les tables du catalogue système n'est pas supportée" -#: commands/indexcmds.c:935 -#, c-format -msgid "%s %s will create implicit index \"%s\" for table \"%s\"" -msgstr "%s %s créera un index implicite « %s » pour la table « %s »" - -#: commands/indexcmds.c:1077 tcop/utility.c:1359 +#: commands/indexcmds.c:1231 tcop/utility.c:1477 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "ne peut pas créer un index unique sur la table partitionnée « %s »" -#: commands/indexcmds.c:1079 tcop/utility.c:1361 +#: commands/indexcmds.c:1233 tcop/utility.c:1479 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "La table « %s » contient des partitionso qui ne sont pas des tables distantes." -#: commands/indexcmds.c:1508 +#: commands/indexcmds.c:1683 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "les fonctions dans un prédicat d'index doivent être marquées comme IMMUTABLE" -#: commands/indexcmds.c:1574 parser/parse_utilcmd.c:2307 parser/parse_utilcmd.c:2441 +#: commands/indexcmds.c:1749 parser/parse_utilcmd.c:2523 parser/parse_utilcmd.c:2658 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "la colonne « %s » nommée dans la clé n'existe pas" -#: commands/indexcmds.c:1598 parser/parse_utilcmd.c:1633 +#: commands/indexcmds.c:1773 parser/parse_utilcmd.c:1822 #, c-format msgid "expressions are not supported in included columns" msgstr "les expressions ne sont pas supportées dans les colonnes incluses" -#: commands/indexcmds.c:1639 +#: commands/indexcmds.c:1814 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "" "les fonctions dans l'expression de l'index doivent être marquées comme\n" "IMMUTABLE" -#: commands/indexcmds.c:1654 +#: commands/indexcmds.c:1829 #, c-format msgid "including column does not support a collation" msgstr "une colonne incluse ne supporte pas de collationnement" -#: commands/indexcmds.c:1658 +#: commands/indexcmds.c:1833 #, c-format msgid "including column does not support an operator class" msgstr "une colonne incluse ne supporte pas de classe d'opérateur" -#: commands/indexcmds.c:1662 +#: commands/indexcmds.c:1837 #, c-format msgid "including column does not support ASC/DESC options" msgstr "une colonne incluse ne supporte pas d'options ASC/DESC" -#: commands/indexcmds.c:1666 +#: commands/indexcmds.c:1841 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "une colonne incluse ne supporte pas d'options NULLS FIRST/LAST" -#: commands/indexcmds.c:1693 +#: commands/indexcmds.c:1868 #, c-format msgid "could not determine which collation to use for index expression" msgstr "n'a pas pu déterminer le collationnement à utiliser pour l'expression d'index" -#: commands/indexcmds.c:1701 commands/tablecmds.c:15244 commands/typecmds.c:837 parser/parse_expr.c:2854 parser/parse_type.c:567 parser/parse_utilcmd.c:3514 utils/adt/misc.c:490 +#: commands/indexcmds.c:1876 commands/tablecmds.c:16671 commands/typecmds.c:810 parser/parse_expr.c:2680 parser/parse_type.c:566 parser/parse_utilcmd.c:3811 utils/adt/misc.c:599 #, c-format msgid "collations are not supported by type %s" msgstr "les collationnements ne sont pas supportés par le type %s" -#: commands/indexcmds.c:1739 +#: commands/indexcmds.c:1914 #, c-format msgid "operator %s is not commutative" msgstr "l'opérateur %s n'est pas commutatif" -#: commands/indexcmds.c:1741 +#: commands/indexcmds.c:1916 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "Seuls les opérateurs commutatifs peuvent être utilisés dans les contraintes d'exclusion." -#: commands/indexcmds.c:1767 +#: commands/indexcmds.c:1942 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "l'opérateur %s n'est pas un membre de la famille d'opérateur « %s »" -#: commands/indexcmds.c:1770 +#: commands/indexcmds.c:1945 #, c-format msgid "The exclusion operator must be related to the index operator class for the constraint." msgstr "" "L'opérateur d'exclusion doit être en relation avec la classe d'opérateur de\n" "l'index pour la contrainte." -#: commands/indexcmds.c:1805 +#: commands/indexcmds.c:1980 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "la méthode d'accès « %s » ne supporte pas les options ASC/DESC" -#: commands/indexcmds.c:1810 +#: commands/indexcmds.c:1985 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "la méthode d'accès « %s » ne supporte pas les options NULLS FIRST/LAST" -#: commands/indexcmds.c:1870 commands/tablecmds.c:15269 commands/tablecmds.c:15275 commands/typecmds.c:1981 +#: commands/indexcmds.c:2031 commands/tablecmds.c:16696 commands/tablecmds.c:16702 commands/typecmds.c:2318 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "" "le type de données %s n'a pas de classe d'opérateurs par défaut pour la\n" "méthode d'accès « %s »" -#: commands/indexcmds.c:1872 +#: commands/indexcmds.c:2033 #, c-format msgid "You must specify an operator class for the index or define a default operator class for the data type." msgstr "" "Vous devez spécifier une classe d'opérateur pour l'index ou définir une\n" "classe d'opérateur par défaut pour le type de données." -#: commands/indexcmds.c:1901 commands/indexcmds.c:1909 commands/opclasscmds.c:208 +#: commands/indexcmds.c:2062 commands/indexcmds.c:2070 commands/opclasscmds.c:205 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "la classe d'opérateur « %s » n'existe pas pour la méthode d'accès « %s »" -#: commands/indexcmds.c:1923 commands/typecmds.c:1969 +#: commands/indexcmds.c:2084 commands/typecmds.c:2306 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "la classe d'opérateur « %s » n'accepte pas le type de données %s" -#: commands/indexcmds.c:2013 +#: commands/indexcmds.c:2174 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "" "il existe de nombreuses classes d'opérateur par défaut pour le type de\n" "données %s" -#: commands/indexcmds.c:2450 +#: commands/indexcmds.c:2502 +#, c-format +msgid "unrecognized REINDEX option \"%s\"" +msgstr "option de REINDEX « %s » non reconnu" + +#: commands/indexcmds.c:2726 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "la table « %s » n'a pas d'index qui puisse être réindexé concuremment" -#: commands/indexcmds.c:2461 +#: commands/indexcmds.c:2740 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "la table « %s » n'a pas d'index à réindexer" -#: commands/indexcmds.c:2500 commands/indexcmds.c:2768 commands/indexcmds.c:2861 +#: commands/indexcmds.c:2780 commands/indexcmds.c:3287 commands/indexcmds.c:3415 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "ne peut pas réindexer les catalogues système de manière concurrente" -#: commands/indexcmds.c:2523 +#: commands/indexcmds.c:2803 #, c-format msgid "can only reindex the currently open database" msgstr "peut seulement réindexer la base de données en cours" -#: commands/indexcmds.c:2614 +#: commands/indexcmds.c:2891 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "ne peut pas réindexer les catalogues système de manière concurrente, ignore tout" -#: commands/indexcmds.c:2666 commands/indexcmds.c:3303 +#: commands/indexcmds.c:2924 +#, c-format +msgid "cannot move system relations, skipping all" +msgstr "ne peut pas déplacer les relations systèmes, toutes ignorées" + +#: commands/indexcmds.c:2971 +#, c-format +msgid "while reindexing partitioned table \"%s.%s\"" +msgstr "lors de la réindexation de la table partitionnée « %s.%s »" + +#: commands/indexcmds.c:2974 +#, fuzzy, c-format +#| msgid "Unlogged partitioned index \"%s.%s\"" +msgid "while reindexing partitioned index \"%s.%s\"" +msgstr "Index partitionné non journalisé « %s.%s »" + +#: commands/indexcmds.c:3167 commands/indexcmds.c:4003 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "la table « %s.%s » a été réindexée" -#: commands/indexcmds.c:2783 commands/indexcmds.c:2829 +#: commands/indexcmds.c:3319 commands/indexcmds.c:3371 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "ne peut pas réindexer l'index invalide « %s.%s » de manière concurrente, ignoré" -#: commands/indexcmds.c:2789 +#: commands/indexcmds.c:3325 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "ne peut pas réindexer l'index de contrainte d'exclusion « %s.%s » de manière concurrente, ignoré" -#: commands/indexcmds.c:2889 +#: commands/indexcmds.c:3480 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "ne peut pas réindexer ce type de relation de manière concurrente" -#: commands/indexcmds.c:3285 commands/indexcmds.c:3296 +#: commands/indexcmds.c:3501 #, c-format -msgid "index \"%s.%s\" was reindexed" -msgstr "l'index « %s.%s » a été réindexé" +msgid "cannot move non-shared relation to tablespace \"%s\"" +msgstr "ne peut pas déplacer la relation non partagée dans le tablespace « %s »" -#: commands/indexcmds.c:3328 +#: commands/indexcmds.c:3984 commands/indexcmds.c:3996 #, c-format -msgid "REINDEX is not yet implemented for partitioned indexes" -msgstr "REINDEX n'est pas implémenté pour des index partitionnés" +msgid "index \"%s.%s\" was reindexed" +msgstr "l'index « %s.%s » a été réindexé" -#: commands/lockcmds.c:102 commands/tablecmds.c:5176 commands/trigger.c:313 rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:928 +#: commands/lockcmds.c:92 commands/tablecmds.c:6037 commands/trigger.c:289 rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:938 #, c-format msgid "\"%s\" is not a table or view" msgstr "« %s » n'est ni une table ni une vue" -#: commands/lockcmds.c:235 rewrite/rewriteHandler.c:1974 rewrite/rewriteHandler.c:3707 -#, c-format -msgid "infinite recursion detected in rules for relation \"%s\"" -msgstr "récursion infinie détectée dans les règles de la relation « %s »" - #: commands/matview.c:182 #, c-format msgid "CONCURRENTLY cannot be used when the materialized view is not populated" @@ -7662,37 +8077,37 @@ msgstr "ne peut pas rafraîchir de manière concurrente la vue matérialisée « msgid "Create a unique index with no WHERE clause on one or more columns of the materialized view." msgstr "Crée un index unique sans clause WHERE sur une ou plusieurs colonnes de la vue matérialisée." -#: commands/matview.c:645 +#: commands/matview.c:652 #, c-format msgid "new data for materialized view \"%s\" contains duplicate rows without any null columns" msgstr "les nouvelles données pour la vue matérialisée « %s » contiennent des lignes dupliquées sans colonnes NULL" -#: commands/matview.c:647 +#: commands/matview.c:654 #, c-format msgid "Row: %s" msgstr "Ligne : %s" -#: commands/opclasscmds.c:127 +#: commands/opclasscmds.c:124 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\"" msgstr "la famille d'opérateur « %s » n'existe pas pour la méthode d'accès « %s »" -#: commands/opclasscmds.c:269 +#: commands/opclasscmds.c:266 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "la famille d'opérateur « %s » existe déjà pour la méthode d'accès « %s »" -#: commands/opclasscmds.c:412 +#: commands/opclasscmds.c:411 #, c-format msgid "must be superuser to create an operator class" msgstr "doit être super-utilisateur pour créer une classe d'opérateur" -#: commands/opclasscmds.c:485 commands/opclasscmds.c:864 commands/opclasscmds.c:988 +#: commands/opclasscmds.c:484 commands/opclasscmds.c:901 commands/opclasscmds.c:1047 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "numéro d'opérateur %d invalide, doit être compris entre 1 et %d" -#: commands/opclasscmds.c:529 commands/opclasscmds.c:908 commands/opclasscmds.c:1003 +#: commands/opclasscmds.c:529 commands/opclasscmds.c:951 commands/opclasscmds.c:1063 #, c-format msgid "invalid function number %d, must be between 1 and %d" msgstr "numéro de fonction %d invalide, doit être compris entre 1 et %d" @@ -7724,187 +8139,237 @@ msgstr "n'a pas pu rendre la classe d'opérateur « %s » par défaut pour le ty msgid "Operator class \"%s\" already is the default." msgstr "La classe d'opérateur « %s » est déjà la classe par défaut." -#: commands/opclasscmds.c:760 +#: commands/opclasscmds.c:792 #, c-format msgid "must be superuser to create an operator family" msgstr "doit être super-utilisateur pour créer une famille d'opérateur" -#: commands/opclasscmds.c:818 +#: commands/opclasscmds.c:852 #, c-format msgid "must be superuser to alter an operator family" msgstr "doit être super-utilisateur pour modifier une famille d'opérateur" -#: commands/opclasscmds.c:873 +#: commands/opclasscmds.c:910 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "" "les types d'argument de l'opérateur doivent être indiqués dans ALTER\n" "OPERATOR FAMILY" -#: commands/opclasscmds.c:936 +#: commands/opclasscmds.c:985 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "STORAGE ne peut pas être spécifié dans ALTER OPERATOR FAMILY" -#: commands/opclasscmds.c:1058 +#: commands/opclasscmds.c:1119 #, c-format msgid "one or two argument types must be specified" msgstr "un ou deux types d'argument doit être spécifié" -#: commands/opclasscmds.c:1084 +#: commands/opclasscmds.c:1145 #, c-format msgid "index operators must be binary" msgstr "les opérateurs d'index doivent être binaires" -#: commands/opclasscmds.c:1103 +#: commands/opclasscmds.c:1164 #, c-format msgid "access method \"%s\" does not support ordering operators" msgstr "la méthode d'accès « %s » ne supporte pas les opérateurs de tri" -#: commands/opclasscmds.c:1114 +#: commands/opclasscmds.c:1175 #, c-format msgid "index search operators must return boolean" msgstr "les opérateurs de recherche d'index doivent renvoyer un booléen" -#: commands/opclasscmds.c:1158 +#: commands/opclasscmds.c:1215 +#, c-format +msgid "associated data types for operator class options parsing functions must match opclass input type" +msgstr "les types de données associés pour les fonctions d'analyses des options d'une classe d'opérateur doivent correspondre au type en entrée de la classe d'opérateur" + +#: commands/opclasscmds.c:1222 +#, c-format +msgid "left and right associated data types for operator class options parsing functions must match" +msgstr "les types de données associés gauche et droite pour les fonctions d'analyses des options d'une classe d'opérateur doivent correspondre" + +#: commands/opclasscmds.c:1230 +#, c-format +msgid "invalid operator class options parsing function" +msgstr "fonction d'analyse des options de classe d'opérateur invalide" + +#: commands/opclasscmds.c:1231 +#, c-format +msgid "Valid signature of operator class options parsing function is %s." +msgstr "La signature valide de la fonction d'analyse des options de la classe d'opérateur est « %s »." + +#: commands/opclasscmds.c:1250 #, c-format msgid "btree comparison functions must have two arguments" msgstr "les fonctions de comparaison btree doivent avoir deux arguments" -#: commands/opclasscmds.c:1162 +#: commands/opclasscmds.c:1254 #, c-format msgid "btree comparison functions must return integer" msgstr "les fonctions de comparaison btree doivent renvoyer un entier" -#: commands/opclasscmds.c:1179 +#: commands/opclasscmds.c:1271 #, c-format msgid "btree sort support functions must accept type \"internal\"" msgstr "les fonctions de support de tri btree doivent accepter le type « internal »" -#: commands/opclasscmds.c:1183 +#: commands/opclasscmds.c:1275 #, c-format msgid "btree sort support functions must return void" msgstr "les fonctions de support de tri btree doivent renvoyer void" -#: commands/opclasscmds.c:1194 +#: commands/opclasscmds.c:1286 #, c-format msgid "btree in_range functions must have five arguments" msgstr "les fonctions in_range btree doivent avoir cinq arguments" -#: commands/opclasscmds.c:1198 +#: commands/opclasscmds.c:1290 #, c-format msgid "btree in_range functions must return boolean" msgstr "les fonctions in_range btree doivent retourner un booléen" -#: commands/opclasscmds.c:1217 +#: commands/opclasscmds.c:1306 +#, c-format +msgid "btree equal image functions must have one argument" +msgstr "les fonctions d'égalité d'image btree doivent avoir un argument" + +#: commands/opclasscmds.c:1310 +#, c-format +msgid "btree equal image functions must return boolean" +msgstr "les fonctions d'égalité d'image btree doivent retourner un booléen" + +#: commands/opclasscmds.c:1323 +#, c-format +msgid "btree equal image functions must not be cross-type" +msgstr "les fonctions d'égalité d'image btree ne doivent pas être inter-types" + +#: commands/opclasscmds.c:1333 #, c-format msgid "hash function 1 must have one argument" msgstr "la fonctions de hashage 1 doit avoir un argument" -#: commands/opclasscmds.c:1221 +#: commands/opclasscmds.c:1337 #, c-format msgid "hash function 1 must return integer" msgstr "la fonctions de hashage 1 doit retourner un integer" -#: commands/opclasscmds.c:1228 +#: commands/opclasscmds.c:1344 #, c-format msgid "hash function 2 must have two arguments" msgstr "la fonctions de hashage 1 doit avoir deux argument" -#: commands/opclasscmds.c:1232 +#: commands/opclasscmds.c:1348 #, c-format msgid "hash function 2 must return bigint" msgstr "la fonctions de hashage 2 doit retourner un bigint" -#: commands/opclasscmds.c:1257 +#: commands/opclasscmds.c:1373 #, c-format msgid "associated data types must be specified for index support function" msgstr "les types de données associés doivent être indiqués pour la fonction de support de l'index" -#: commands/opclasscmds.c:1282 +#: commands/opclasscmds.c:1398 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "le numéro de fonction %d pour (%s, %s) apparaît plus d'une fois" -#: commands/opclasscmds.c:1289 +#: commands/opclasscmds.c:1405 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "le numéro d'opérateur %d pour (%s, %s) apparaît plus d'une fois" -#: commands/opclasscmds.c:1338 +#: commands/opclasscmds.c:1451 #, c-format msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "l'opérateur %d(%s, %s) existe déjà dans la famille d'opérateur « %s »" -#: commands/opclasscmds.c:1455 +#: commands/opclasscmds.c:1557 #, c-format msgid "function %d(%s,%s) already exists in operator family \"%s\"" msgstr "la fonction %d(%s, %s) existe déjà dans la famille d'opérateur « %s »" -#: commands/opclasscmds.c:1546 +#: commands/opclasscmds.c:1638 #, c-format msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" msgstr "l'opérateur %d(%s, %s) n'existe pas dans la famille d'opérateur « %s »" -#: commands/opclasscmds.c:1586 +#: commands/opclasscmds.c:1678 #, c-format msgid "function %d(%s,%s) does not exist in operator family \"%s\"" msgstr "la fonction %d(%s, %s) n'existe pas dans la famille d'opérateur « %s »" -#: commands/opclasscmds.c:1716 +#: commands/opclasscmds.c:1709 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "" "la classe d'opérateur « %s » de la méthode d'accès « %s » existe déjà dans\n" "le schéma « %s »" -#: commands/opclasscmds.c:1739 +#: commands/opclasscmds.c:1732 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "" "la famille d'opérateur « %s » de la méthode d'accès « %s » existe déjà dans\n" "le schéma « %s »" -#: commands/operatorcmds.c:113 commands/operatorcmds.c:121 +#: commands/operatorcmds.c:111 commands/operatorcmds.c:119 #, c-format msgid "SETOF type not allowed for operator argument" msgstr "type SETOF non autorisé pour l'argument de l'opérateur" -#: commands/operatorcmds.c:154 commands/operatorcmds.c:457 +#: commands/operatorcmds.c:152 commands/operatorcmds.c:479 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "l'attribut « %s » de l'opérateur n'est pas reconnu" -#: commands/operatorcmds.c:165 +#: commands/operatorcmds.c:163 #, c-format msgid "operator function must be specified" msgstr "la fonction d'opérateur doit être spécifiée" -#: commands/operatorcmds.c:176 +#: commands/operatorcmds.c:181 +#, c-format +msgid "operator argument types must be specified" +msgstr "le type des arguments de l'opérateur doit être spécifié" + +#: commands/operatorcmds.c:185 #, c-format -msgid "at least one of leftarg or rightarg must be specified" -msgstr "au moins un des arguments (le gauche ou le droit) doit être spécifié" +msgid "operator right argument type must be specified" +msgstr "le type de l'argument droit de l'opérateur doit être spécifié" -#: commands/operatorcmds.c:280 +#: commands/operatorcmds.c:186 +#, c-format +msgid "Postfix operators are not supported." +msgstr "Les opérateurs postfixes ne sont pas supportés." + +#: commands/operatorcmds.c:290 #, c-format msgid "restriction estimator function %s must return type %s" msgstr "" "la fonction d'estimation de la restriction, de nom %s, doit renvoyer le type\n" "%s" -#: commands/operatorcmds.c:326 +#: commands/operatorcmds.c:333 +#, c-format +msgid "join estimator function %s has multiple matches" +msgstr "la fonction d'estimation de la jointure, de nom %s, a plusieurs correspondances" + +#: commands/operatorcmds.c:348 #, c-format msgid "join estimator function %s must return type %s" msgstr "" "la fonction d'estimation de la jointure, de nom %s, doit renvoyer le type\n" "%s" -#: commands/operatorcmds.c:451 +#: commands/operatorcmds.c:473 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "l'attribut « %s » de l'opérateur ne peut pas être changé" -#: commands/policy.c:88 commands/policy.c:401 commands/policy.c:491 commands/tablecmds.c:1451 commands/tablecmds.c:1933 commands/tablecmds.c:2906 commands/tablecmds.c:5155 commands/tablecmds.c:7657 commands/tablecmds.c:14843 commands/tablecmds.c:14878 commands/trigger.c:319 commands/trigger.c:1544 commands/trigger.c:1653 rewrite/rewriteDefine.c:277 rewrite/rewriteDefine.c:933 +#: commands/policy.c:88 commands/policy.c:381 commands/policy.c:471 commands/statscmds.c:150 commands/tablecmds.c:1568 commands/tablecmds.c:2157 commands/tablecmds.c:3416 commands/tablecmds.c:6016 commands/tablecmds.c:8885 commands/tablecmds.c:16261 commands/tablecmds.c:16296 commands/trigger.c:295 commands/trigger.c:1271 commands/trigger.c:1380 rewrite/rewriteDefine.c:277 rewrite/rewriteDefine.c:943 rewrite/rewriteRemove.c:80 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "droit refusé : « %s » est un catalogue système" @@ -7919,200 +8384,193 @@ msgstr "ingore les rôles spécifiés autre que PUBLIC" msgid "All roles are members of the PUBLIC role." msgstr "Tous les rôles sont membres du rôle PUBLIC." -#: commands/policy.c:515 +#: commands/policy.c:495 #, c-format msgid "role \"%s\" could not be removed from policy \"%s\" on \"%s\"" msgstr "le rôle « %s » n'a pas pu être supprimé de la politique « %s » sur « %s »" -#: commands/policy.c:724 +#: commands/policy.c:704 #, c-format msgid "WITH CHECK cannot be applied to SELECT or DELETE" msgstr "WITH CHECK ne peut pas être appliqué à SELECT et DELETE" -#: commands/policy.c:733 commands/policy.c:1038 +#: commands/policy.c:713 commands/policy.c:1018 #, c-format msgid "only WITH CHECK expression allowed for INSERT" msgstr "seule une expression WITH CHECK est autorisée pour INSERT" -#: commands/policy.c:808 commands/policy.c:1260 +#: commands/policy.c:788 commands/policy.c:1241 #, c-format msgid "policy \"%s\" for table \"%s\" already exists" msgstr "la politique « %s » pour la table « %s » existe déjà" -#: commands/policy.c:1010 commands/policy.c:1288 commands/policy.c:1359 +#: commands/policy.c:990 commands/policy.c:1269 commands/policy.c:1340 #, c-format msgid "policy \"%s\" for table \"%s\" does not exist" msgstr "la politique « %s » pour la table « %s » n'existe pas" -#: commands/policy.c:1028 +#: commands/policy.c:1008 #, c-format msgid "only USING expression allowed for SELECT, DELETE" msgstr "seule une expression USING est autorisée pour SELECT, DELETE" -#: commands/portalcmds.c:58 commands/portalcmds.c:182 commands/portalcmds.c:234 +#: commands/portalcmds.c:60 commands/portalcmds.c:187 commands/portalcmds.c:238 #, c-format msgid "invalid cursor name: must not be empty" msgstr "nom de curseur invalide : il ne doit pas être vide" -#: commands/portalcmds.c:190 commands/portalcmds.c:244 executor/execCurrent.c:70 utils/adt/xml.c:2608 utils/adt/xml.c:2778 +#: commands/portalcmds.c:72 +#, c-format +msgid "cannot create a cursor WITH HOLD within security-restricted operation" +msgstr "ne peut pas créer un curseur WITH HOLD à l'intérieur d'une opération restreinte pour sécurité" + +#: commands/portalcmds.c:195 commands/portalcmds.c:248 executor/execCurrent.c:70 utils/adt/xml.c:2594 utils/adt/xml.c:2764 #, c-format msgid "cursor \"%s\" does not exist" msgstr "le curseur « %s » n'existe pas" -#: commands/prepare.c:75 +#: commands/prepare.c:76 #, c-format msgid "invalid statement name: must not be empty" msgstr "nom de l'instruction invalide : ne doit pas être vide" -#: commands/prepare.c:141 parser/parse_param.c:304 tcop/postgres.c:1468 +#: commands/prepare.c:134 parser/parse_param.c:313 tcop/postgres.c:1473 #, c-format msgid "could not determine data type of parameter $%d" msgstr "n'a pas pu déterminer le type de données du paramètre $%d" -#: commands/prepare.c:159 +#: commands/prepare.c:152 #, c-format msgid "utility statements cannot be prepared" msgstr "les instructions utilitaires ne peuvent pas être préparées" -#: commands/prepare.c:269 commands/prepare.c:274 +#: commands/prepare.c:256 commands/prepare.c:261 #, c-format msgid "prepared statement is not a SELECT" msgstr "l'instruction préparée n'est pas un SELECT" -#: commands/prepare.c:342 +#: commands/prepare.c:328 #, c-format msgid "wrong number of parameters for prepared statement \"%s\"" msgstr "mauvais nombre de paramètres pour l'instruction préparée « %s »" -#: commands/prepare.c:344 +#: commands/prepare.c:330 #, c-format msgid "Expected %d parameters but got %d." msgstr "%d paramètres attendus mais %d reçus." -#: commands/prepare.c:380 +#: commands/prepare.c:363 #, c-format msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "" "le paramètre $%d de type %s ne peut être utilisé dans la coercion à cause du\n" "type %s attendu" -#: commands/prepare.c:465 +#: commands/prepare.c:447 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "l'instruction préparée « %s » existe déjà" -#: commands/prepare.c:504 +#: commands/prepare.c:486 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "l'instruction préparée « %s » n'existe pas" -#: commands/proclang.c:85 -#, c-format -msgid "using pg_pltemplate information instead of CREATE LANGUAGE parameters" -msgstr "" -"utilisation des informations de pg_pltemplate au lieu des paramètres de\n" -"CREATE LANGUAGE" - -#: commands/proclang.c:95 -#, c-format -msgid "must be superuser to create procedural language \"%s\"" -msgstr "doit être super-utilisateur pour créer le langage de procédures « %s »" - -#: commands/proclang.c:250 -#, c-format -msgid "unsupported language \"%s\"" -msgstr "langage non supporté « %s »" - -#: commands/proclang.c:252 -#, c-format -msgid "The supported languages are listed in the pg_pltemplate system catalog." -msgstr "Les langages supportés sont listés dans le catalogue système pg_pltemplate." - -#: commands/proclang.c:260 +#: commands/proclang.c:68 #, c-format msgid "must be superuser to create custom procedural language" msgstr "doit être super-utilisateur pour créer un langage de procédures personnalisé" -#: commands/proclang.c:279 commands/trigger.c:711 commands/typecmds.c:458 commands/typecmds.c:475 -#, c-format -msgid "changing return type of function %s from %s to %s" -msgstr "changement du type de retour de la fonction %s de %s vers %s" - -#: commands/publicationcmds.c:108 +#: commands/publicationcmds.c:107 #, c-format msgid "invalid list syntax for \"publish\" option" msgstr "syntaxe de liste invalide pour l'option « publish »" -#: commands/publicationcmds.c:126 +#: commands/publicationcmds.c:125 #, c-format msgid "unrecognized \"publish\" value: \"%s\"" msgstr "type « publish » non reconnu : « %s »" -#: commands/publicationcmds.c:132 +#: commands/publicationcmds.c:140 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "paramètre de publication non reconnu : « %s »" -#: commands/publicationcmds.c:165 +#: commands/publicationcmds.c:172 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "doit être super-utilisateur pour créer une publication « FOR ALL TABLES »" -#: commands/publicationcmds.c:341 +#: commands/publicationcmds.c:248 +#, c-format +msgid "wal_level is insufficient to publish logical changes" +msgstr "la valeur de wal_level est insuffisante pour publier des modifications logiques" + +#: commands/publicationcmds.c:249 +#, c-format +msgid "Set wal_level to logical before creating subscriptions." +msgstr "Configurez wal_level à la valeur logical pour créer des souscriptions." + +#: commands/publicationcmds.c:369 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "la publication « %s » est définie avec FOR ALL TABLES" -#: commands/publicationcmds.c:343 +#: commands/publicationcmds.c:371 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "Les tables ne peuvent pas être ajoutées ou supprimées à des publications FOR ALL TABLES." -#: commands/publicationcmds.c:648 +#: commands/publicationcmds.c:660 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "la relation « %s » ne fait pas partie de la publication" -#: commands/publicationcmds.c:691 +#: commands/publicationcmds.c:703 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "droit refusé pour modifier le propriétaire de la publication « %s »" -#: commands/publicationcmds.c:693 +#: commands/publicationcmds.c:705 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "Le propriétaire d'une publication FOR ALL TABLES doit être un super-utilisateur." -#: commands/schemacmds.c:106 commands/schemacmds.c:282 +#: commands/schemacmds.c:105 commands/schemacmds.c:258 #, c-format msgid "unacceptable schema name \"%s\"" msgstr "nom de schéma « %s » inacceptable" -#: commands/schemacmds.c:107 commands/schemacmds.c:283 +#: commands/schemacmds.c:106 commands/schemacmds.c:259 #, c-format msgid "The prefix \"pg_\" is reserved for system schemas." msgstr "Le préfixe « pg_ » est réservé pour les schémas système." -#: commands/schemacmds.c:121 +#: commands/schemacmds.c:120 #, c-format msgid "schema \"%s\" already exists, skipping" msgstr "la schéma « %s » existe déjà, poursuite du traitement" -#: commands/seclabel.c:60 +#: commands/seclabel.c:129 #, c-format msgid "no security label providers have been loaded" msgstr "aucun fournisseur de label de sécurité n'a été chargé" -#: commands/seclabel.c:64 +#: commands/seclabel.c:133 #, c-format msgid "must specify provider when multiple security label providers have been loaded" msgstr "doit indiquer le fournisseur quand plusieurs fournisseurs de labels de sécurité sont chargés" -#: commands/seclabel.c:82 +#: commands/seclabel.c:151 #, c-format msgid "security label provider \"%s\" is not loaded" msgstr "le fournisseur « %s » de label de sécurité n'est pas chargé" +#: commands/seclabel.c:158 +#, c-format +msgid "security labels are not supported for this type of object" +msgstr "les labels de sécurité ne sont pas supportés pour ce type d'objet" + #: commands/sequence.c:140 #, c-format msgid "unlogged sequences are not supported" @@ -8145,604 +8603,686 @@ msgstr "la dernière valeur (lastval) n'est pas encore définie dans cette sessi msgid "setval: value %s is out of bounds for sequence \"%s\" (%s..%s)" msgstr "setval : la valeur %s est en dehors des limites de la séquence « %s » (%s..%s)" -#: commands/sequence.c:1360 +#: commands/sequence.c:1359 #, c-format msgid "invalid sequence option SEQUENCE NAME" msgstr "option SEQUENCE NAME invalide" -#: commands/sequence.c:1386 +#: commands/sequence.c:1385 #, c-format msgid "identity column type must be smallint, integer, or bigint" msgstr "le type de colonne identité doit être smallint, integer ou bigint" -#: commands/sequence.c:1387 +#: commands/sequence.c:1386 #, c-format msgid "sequence type must be smallint, integer, or bigint" msgstr "le type de séquence doit être smallint, integer ou bigint" -#: commands/sequence.c:1421 +#: commands/sequence.c:1420 #, c-format msgid "INCREMENT must not be zero" msgstr "la valeur INCREMENT ne doit pas être zéro" -#: commands/sequence.c:1474 +#: commands/sequence.c:1473 #, c-format msgid "MAXVALUE (%s) is out of range for sequence data type %s" msgstr "MAXVALUE (%s) est hors des limites pour le type de données séquence %s" -#: commands/sequence.c:1511 +#: commands/sequence.c:1510 #, c-format msgid "MINVALUE (%s) is out of range for sequence data type %s" msgstr "MINVALUE (%s) est hors des limites pour le type de données séquence %s" -#: commands/sequence.c:1525 +#: commands/sequence.c:1524 #, c-format msgid "MINVALUE (%s) must be less than MAXVALUE (%s)" msgstr "la valeur MINVALUE (%s) doit être moindre que la valeur MAXVALUE (%s)" -#: commands/sequence.c:1552 +#: commands/sequence.c:1551 #, c-format msgid "START value (%s) cannot be less than MINVALUE (%s)" msgstr "la valeur START (%s) ne peut pas être plus petite que MINVALUE (%s)" -#: commands/sequence.c:1564 +#: commands/sequence.c:1563 #, c-format msgid "START value (%s) cannot be greater than MAXVALUE (%s)" msgstr "la valeur START (%s) ne peut pas être plus grande que MAXVALUE (%s)" -#: commands/sequence.c:1594 +#: commands/sequence.c:1593 #, c-format msgid "RESTART value (%s) cannot be less than MINVALUE (%s)" msgstr "la valeur RESTART (%s) ne peut pas être plus petite que celle de MINVALUE (%s)" -#: commands/sequence.c:1606 +#: commands/sequence.c:1605 #, c-format msgid "RESTART value (%s) cannot be greater than MAXVALUE (%s)" msgstr "la valeur RESTART (%s) ne peut pas être plus grande que celle de MAXVALUE (%s)" -#: commands/sequence.c:1621 +#: commands/sequence.c:1620 #, c-format msgid "CACHE (%s) must be greater than zero" msgstr "la valeur CACHE (%s) doit être plus grande que zéro" -#: commands/sequence.c:1658 +#: commands/sequence.c:1657 #, c-format msgid "invalid OWNED BY option" msgstr "option OWNED BY invalide" -#: commands/sequence.c:1659 +#: commands/sequence.c:1658 #, c-format msgid "Specify OWNED BY table.column or OWNED BY NONE." msgstr "Indiquer OWNED BY table.colonne ou OWNED BY NONE." -#: commands/sequence.c:1684 +#: commands/sequence.c:1683 #, c-format msgid "referenced relation \"%s\" is not a table or foreign table" msgstr "la relation référencée « %s » n'est ni une table ni une table distante" -#: commands/sequence.c:1691 +#: commands/sequence.c:1690 #, c-format msgid "sequence must have same owner as table it is linked to" msgstr "la séquence doit avoir le même propriétaire que la table avec laquelle elle est liée" -#: commands/sequence.c:1695 +#: commands/sequence.c:1694 #, c-format msgid "sequence must be in same schema as table it is linked to" msgstr "la séquence doit être dans le même schéma que la table avec laquelle elle est liée" -#: commands/sequence.c:1717 +#: commands/sequence.c:1716 #, c-format msgid "cannot change ownership of identity sequence" msgstr "ne peut pas modifier le propriétaire de la séquence d'identité" -#: commands/sequence.c:1718 commands/tablecmds.c:11745 commands/tablecmds.c:14255 +#: commands/sequence.c:1717 commands/tablecmds.c:13113 commands/tablecmds.c:15686 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "La séquence « %s » est liée à la table « %s »." -#: commands/statscmds.c:101 commands/statscmds.c:110 +#: commands/statscmds.c:111 commands/statscmds.c:120 tcop/utility.c:1827 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "seule une relation seule est acceptée dans CREATE STATISTICS" -#: commands/statscmds.c:128 +#: commands/statscmds.c:138 #, c-format msgid "relation \"%s\" is not a table, foreign table, or materialized view" msgstr "la relation « %s » n'est pas une table, une table distante ou une vue matérialisée" -#: commands/statscmds.c:171 +#: commands/statscmds.c:188 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "l'objet statistique « %s » existe déjà, poursuite du traitement" -#: commands/statscmds.c:179 +#: commands/statscmds.c:196 #, c-format msgid "statistics object \"%s\" already exists" msgstr "l'objet statistique « %s » existe déjà" -#: commands/statscmds.c:201 commands/statscmds.c:207 +#: commands/statscmds.c:207 +#, c-format +msgid "cannot have more than %d columns in statistics" +msgstr "ne peut pas avoir plus de %d colonnes dans des statistiques" + +#: commands/statscmds.c:236 #, c-format -msgid "only simple column references are allowed in CREATE STATISTICS" -msgstr "seules des références à une seule colonne sont acceptées dans CREATE STATISTICS" +msgid "only simple column references and expressions are allowed in CREATE STATISTICS" +msgstr "seules des références et expressions à une seule colonne sont acceptées dans CREATE STATISTICS" -#: commands/statscmds.c:222 +#: commands/statscmds.c:258 #, c-format msgid "statistics creation on system columns is not supported" msgstr "la création de statistiques sur les colonnes systèmes n'est pas supportée" -#: commands/statscmds.c:229 +#: commands/statscmds.c:265 #, c-format msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" msgstr "la colonne « %s » ne peut pas être utilisé dans des statistiques parce que son type %s n'a pas de classe d'opérateur btree par défaut" -#: commands/statscmds.c:236 +#: commands/statscmds.c:293 +#, fuzzy, c-format +#| msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" +msgid "expression cannot be used in multivariate statistics because its type %s has no default btree operator class" +msgstr "la colonne « %s » ne peut pas être utilisé dans des statistiques parce que son type %s n'a pas de classe d'opérateur btree par défaut" + +#: commands/statscmds.c:314 #, c-format -msgid "cannot have more than %d columns in statistics" -msgstr "ne peut pas avoir plus de %d colonnes dans des statistiques" +msgid "when building statistics on a single expression, statistics kinds may not be specified" +msgstr "" + +#: commands/statscmds.c:343 +#, c-format +msgid "unrecognized statistics kind \"%s\"" +msgstr "type de statistique « %s » non reconnu" -#: commands/statscmds.c:251 +#: commands/statscmds.c:372 #, c-format msgid "extended statistics require at least 2 columns" msgstr "les statistiques étendues requièrent au moins 2 colonnes" -#: commands/statscmds.c:269 +#: commands/statscmds.c:390 #, c-format msgid "duplicate column name in statistics definition" msgstr "nom de colonne dupliqué dans la définition des statistiques" -#: commands/statscmds.c:303 +#: commands/statscmds.c:425 #, c-format -msgid "unrecognized statistics kind \"%s\"" -msgstr "type de statistique « %s » non reconnu" +msgid "duplicate expression in statistics definition" +msgstr "expression dupliquée dans la définition des statistiques" + +#: commands/statscmds.c:606 commands/tablecmds.c:7857 +#, c-format +msgid "statistics target %d is too low" +msgstr "la cible statistique %d est trop basse" -#: commands/subscriptioncmds.c:188 +#: commands/statscmds.c:614 commands/tablecmds.c:7865 +#, c-format +msgid "lowering statistics target to %d" +msgstr "abaissement de la cible statistique à %d" + +#: commands/statscmds.c:637 +#, c-format +msgid "statistics object \"%s.%s\" does not exist, skipping" +msgstr "l'objet statistique « %s.%s » n'existe pas, poursuite du traitement" + +#: commands/subscriptioncmds.c:221 #, c-format msgid "unrecognized subscription parameter: \"%s\"" msgstr "paramètre de souscription non reconnu : « %s »" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:202 commands/subscriptioncmds.c:208 commands/subscriptioncmds.c:214 commands/subscriptioncmds.c:233 commands/subscriptioncmds.c:239 +#: commands/subscriptioncmds.c:235 commands/subscriptioncmds.c:241 commands/subscriptioncmds.c:247 commands/subscriptioncmds.c:266 commands/subscriptioncmds.c:272 #, c-format msgid "%s and %s are mutually exclusive options" msgstr "%s et %s sont des options mutuellement exclusives" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:246 commands/subscriptioncmds.c:252 +#: commands/subscriptioncmds.c:279 commands/subscriptioncmds.c:285 #, c-format msgid "subscription with %s must also set %s" msgstr "la souscription avec %s doit aussi configurer %s" -#: commands/subscriptioncmds.c:294 -#, c-format -msgid "publication name \"%s\" used more than once" -msgstr "nom de publication « %s » utilisé plus d'une fois" - -#: commands/subscriptioncmds.c:358 +#: commands/subscriptioncmds.c:378 #, c-format msgid "must be superuser to create subscriptions" msgstr "doit être super-utilisateur pour créer des souscriptions" -#: commands/subscriptioncmds.c:450 commands/subscriptioncmds.c:543 replication/logical/tablesync.c:846 replication/logical/worker.c:1704 +#: commands/subscriptioncmds.c:471 commands/subscriptioncmds.c:569 replication/logical/tablesync.c:963 replication/logical/worker.c:3097 #, c-format msgid "could not connect to the publisher: %s" msgstr "n'a pas pu se connecter au publieur : %s" -#: commands/subscriptioncmds.c:492 +#: commands/subscriptioncmds.c:513 #, c-format msgid "created replication slot \"%s\" on publisher" msgstr "création du slot de réplication « %s » sur le publieur" #. translator: %s is an SQL ALTER statement -#: commands/subscriptioncmds.c:510 +#: commands/subscriptioncmds.c:526 #, c-format msgid "tables were not subscribed, you will have to run %s to subscribe the tables" msgstr "les tables n'étaient pas souscrites, vous devrez exécuter %s pour souscrire aux tables" -#: commands/subscriptioncmds.c:599 -#, c-format -msgid "table \"%s.%s\" added to subscription \"%s\"" -msgstr "table « %s.%s » ajoutée à la souscription « %s »" - -#: commands/subscriptioncmds.c:623 -#, c-format -msgid "table \"%s.%s\" removed from subscription \"%s\"" -msgstr "table « %s.%s » supprimée de la souscription « %s »" - -#: commands/subscriptioncmds.c:695 +#: commands/subscriptioncmds.c:824 #, c-format msgid "cannot set %s for enabled subscription" msgstr "ne peut définir %s pour une souscription active" -#: commands/subscriptioncmds.c:730 +#: commands/subscriptioncmds.c:880 #, c-format msgid "cannot enable subscription that does not have a slot name" msgstr "ne peut pas activer une souscription qui n'a pas de nom de slot" -#: commands/subscriptioncmds.c:776 +#: commands/subscriptioncmds.c:932 commands/subscriptioncmds.c:980 #, c-format msgid "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION avec rafraîchissement n'est pas autorisé pour les souscriptions désactivées" -#: commands/subscriptioncmds.c:777 +#: commands/subscriptioncmds.c:933 commands/subscriptioncmds.c:981 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgstr "Utilisez ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." -#: commands/subscriptioncmds.c:795 +#: commands/subscriptioncmds.c:1001 #, c-format msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH n'est pas autorisé pour les souscriptions désactivées" -#: commands/subscriptioncmds.c:875 +#: commands/subscriptioncmds.c:1089 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "la souscription « %s » n'existe pas, poursuite du traitement" -#: commands/subscriptioncmds.c:1001 +#: commands/subscriptioncmds.c:1341 #, c-format -msgid "could not connect to publisher when attempting to drop the replication slot \"%s\"" -msgstr "n'a pas pu se connecter au publieur pour supprimer le slot de réplication « %s »" +msgid "dropped replication slot \"%s\" on publisher" +msgstr "slot de réplication « %s » supprimé sur le publieur" + +#: commands/subscriptioncmds.c:1350 commands/subscriptioncmds.c:1357 +#, c-format +msgid "could not drop replication slot \"%s\" on publisher: %s" +msgstr "n'a pas pu supprimer le slot de réplication « %s » sur le publieur : %s" + +#: commands/subscriptioncmds.c:1391 +#, c-format +msgid "permission denied to change owner of subscription \"%s\"" +msgstr "droit refusé pour modifier le propriétaire de la souscription « %s »" + +#: commands/subscriptioncmds.c:1393 +#, c-format +msgid "The owner of a subscription must be a superuser." +msgstr "Le propriétaire d'une souscription doit être un super-utilisateur." -#: commands/subscriptioncmds.c:1003 commands/subscriptioncmds.c:1018 replication/logical/tablesync.c:895 replication/logical/tablesync.c:917 +#: commands/subscriptioncmds.c:1508 #, c-format -msgid "The error was: %s" -msgstr "L'erreur était : %s" +msgid "could not receive list of replicated tables from the publisher: %s" +msgstr "n'a pas pu recevoir la liste des tables répliquées à partir du publieur : %s" + +#: commands/subscriptioncmds.c:1572 +#, fuzzy, c-format +#| msgid "could not connect to publisher when attempting to drop the replication slot \"%s\"" +msgid "could not connect to publisher when attempting to drop replication slot \"%s\": %s" +msgstr "n'a pas pu se connecter au publieur pour supprimer le slot de réplication « %s »" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1005 +#: commands/subscriptioncmds.c:1575 #, c-format msgid "Use %s to disassociate the subscription from the slot." msgstr "Utilisez %s pour dissocier la souscription du slot." -#: commands/subscriptioncmds.c:1016 -#, c-format -msgid "could not drop the replication slot \"%s\" on publisher" -msgstr "n'a pas pu supprimer le slot de réplication « %s » sur le publieur" - -#: commands/subscriptioncmds.c:1021 +#: commands/subscriptioncmds.c:1605 #, c-format -msgid "dropped replication slot \"%s\" on publisher" -msgstr "slot de réplication « %s » supprimé sur le publieur" +msgid "publication name \"%s\" used more than once" +msgstr "nom de publication « %s » utilisé plus d'une fois" -#: commands/subscriptioncmds.c:1062 +#: commands/subscriptioncmds.c:1649 #, c-format -msgid "permission denied to change owner of subscription \"%s\"" -msgstr "droit refusé pour modifier le propriétaire de la souscription « %s »" +msgid "publication \"%s\" is already in subscription \"%s\"" +msgstr "la publication « %s » est déjà dans la souscription « %s »" -#: commands/subscriptioncmds.c:1064 +#: commands/subscriptioncmds.c:1663 #, c-format -msgid "The owner of a subscription must be a superuser." -msgstr "Le propriétaire d'une souscription doit être un super-utilisateur." +msgid "publication \"%s\" is not in subscription \"%s\"" +msgstr "la publication « %s » n'est pas dans la souscription « %s »" -#: commands/subscriptioncmds.c:1179 +#: commands/subscriptioncmds.c:1674 #, c-format -msgid "could not receive list of replicated tables from the publisher: %s" -msgstr "n'a pas pu recevoir la liste des tables répliquées à partir du publieur : %s" +msgid "subscription must contain at least one publication" +msgstr "la souscription doit contenir au moins une publication" -#: commands/tablecmds.c:222 commands/tablecmds.c:264 +#: commands/tablecmds.c:242 commands/tablecmds.c:284 #, c-format msgid "table \"%s\" does not exist" msgstr "la table « %s » n'existe pas" -#: commands/tablecmds.c:223 commands/tablecmds.c:265 +#: commands/tablecmds.c:243 commands/tablecmds.c:285 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "la table « %s » n'existe pas, poursuite du traitement" -#: commands/tablecmds.c:225 commands/tablecmds.c:267 +#: commands/tablecmds.c:245 commands/tablecmds.c:287 msgid "Use DROP TABLE to remove a table." msgstr "Utilisez DROP TABLE pour supprimer une table." -#: commands/tablecmds.c:228 +#: commands/tablecmds.c:248 #, c-format msgid "sequence \"%s\" does not exist" msgstr "la séquence « %s » n'existe pas" -#: commands/tablecmds.c:229 +#: commands/tablecmds.c:249 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "la séquence « %s » n'existe pas, poursuite du traitement" -#: commands/tablecmds.c:231 +#: commands/tablecmds.c:251 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "Utilisez DROP SEQUENCE pour supprimer une séquence." -#: commands/tablecmds.c:234 +#: commands/tablecmds.c:254 #, c-format msgid "view \"%s\" does not exist" msgstr "la vue « %s » n'existe pas" -#: commands/tablecmds.c:235 +#: commands/tablecmds.c:255 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "la vue « %s » n'existe pas, poursuite du traitement" -#: commands/tablecmds.c:237 +#: commands/tablecmds.c:257 msgid "Use DROP VIEW to remove a view." msgstr "Utilisez DROP VIEW pour supprimer une vue." -#: commands/tablecmds.c:240 +#: commands/tablecmds.c:260 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "la vue matérialisée « %s » n'existe pas" -#: commands/tablecmds.c:241 +#: commands/tablecmds.c:261 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "la vue matérialisée « %s » n'existe pas, poursuite du traitement" -#: commands/tablecmds.c:243 +#: commands/tablecmds.c:263 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Utilisez DROP MATERIALIZED VIEW pour supprimer une vue matérialisée." -#: commands/tablecmds.c:246 commands/tablecmds.c:270 commands/tablecmds.c:16377 parser/parse_utilcmd.c:2045 +#: commands/tablecmds.c:266 commands/tablecmds.c:290 commands/tablecmds.c:18107 parser/parse_utilcmd.c:2255 #, c-format msgid "index \"%s\" does not exist" msgstr "l'index « %s » n'existe pas" -#: commands/tablecmds.c:247 commands/tablecmds.c:271 +#: commands/tablecmds.c:267 commands/tablecmds.c:291 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "l'index « %s » n'existe pas, poursuite du traitement" -#: commands/tablecmds.c:249 commands/tablecmds.c:273 +#: commands/tablecmds.c:269 commands/tablecmds.c:293 msgid "Use DROP INDEX to remove an index." msgstr "Utilisez DROP INDEX pour supprimer un index." -#: commands/tablecmds.c:254 +#: commands/tablecmds.c:274 #, c-format msgid "\"%s\" is not a type" msgstr "« %s » n'est pas un type" -#: commands/tablecmds.c:255 +#: commands/tablecmds.c:275 msgid "Use DROP TYPE to remove a type." msgstr "Utilisez DROP TYPE pour supprimer un type." -#: commands/tablecmds.c:258 commands/tablecmds.c:11584 commands/tablecmds.c:14035 +#: commands/tablecmds.c:278 commands/tablecmds.c:12952 commands/tablecmds.c:15385 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "la table distante « %s » n'existe pas" -#: commands/tablecmds.c:259 +#: commands/tablecmds.c:279 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "la table distante « %s » n'existe pas, poursuite du traitement" -#: commands/tablecmds.c:261 +#: commands/tablecmds.c:281 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Utilisez DROP FOREIGN TABLE pour supprimer une table distante." -#: commands/tablecmds.c:592 +#: commands/tablecmds.c:663 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT peut seulement être utilisé sur des tables temporaires" -#: commands/tablecmds.c:623 +#: commands/tablecmds.c:694 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "" "ne peut pas créer une table temporaire à l'intérieur d'une fonction\n" "restreinte pour sécurité" -#: commands/tablecmds.c:659 commands/tablecmds.c:12939 +#: commands/tablecmds.c:730 commands/tablecmds.c:14236 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "la relation « %s » serait héritée plus d'une fois" -#: commands/tablecmds.c:833 +#: commands/tablecmds.c:923 #, c-format msgid "specifying a table access method is not supported on a partitioned table" msgstr "spécifier une méthode d'accès à la table n'est pas supporté sur une partitionnée" -#: commands/tablecmds.c:929 +#: commands/tablecmds.c:1019 #, c-format msgid "\"%s\" is not partitioned" msgstr "« %s » n'est pas partitionné" -#: commands/tablecmds.c:1022 +#: commands/tablecmds.c:1114 #, c-format msgid "cannot partition using more than %d columns" msgstr "ne peut pas partitionner en utilisant plus de %d colonnes" -#: commands/tablecmds.c:1078 +#: commands/tablecmds.c:1170 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "ne peut pas créer une partition distante sur la table partitionnée « %s »" -#: commands/tablecmds.c:1080 +#: commands/tablecmds.c:1172 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "La table « %s » contient des index qui sont uniques." -#: commands/tablecmds.c:1241 +#: commands/tablecmds.c:1335 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY ne permet pas de supprimer plusieurs objets" -#: commands/tablecmds.c:1245 +#: commands/tablecmds.c:1339 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY ne permet pas la CASCADE" -#: commands/tablecmds.c:1587 +#: commands/tablecmds.c:1440 +#, c-format +msgid "cannot drop partitioned index \"%s\" concurrently" +msgstr "ne peut pas supprimer l'index partitionné « %s » de manière concurrente" + +#: commands/tablecmds.c:1712 #, c-format msgid "cannot truncate only a partitioned table" msgstr "ne peut pas seulement tronquer une table partitionnée" -#: commands/tablecmds.c:1588 +#: commands/tablecmds.c:1713 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "Ne spécifiez pas le mot clé ONLY ou utilisez TRUNCATE ONLY directement sur les partitions." -#: commands/tablecmds.c:1657 +#: commands/tablecmds.c:1786 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "TRUNCATE cascade sur la table « %s »" -#: commands/tablecmds.c:1952 +#: commands/tablecmds.c:2145 +#, c-format +msgid "cannot truncate foreign table \"%s\"" +msgstr "ne peut pas tronquer la table distante « %s »" + +#: commands/tablecmds.c:2194 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "ne peut pas tronquer les tables temporaires des autres sessions" -#: commands/tablecmds.c:2178 commands/tablecmds.c:12836 +#: commands/tablecmds.c:2456 commands/tablecmds.c:14133 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "ne peut pas hériter de la table partitionnée « %s »" -#: commands/tablecmds.c:2183 +#: commands/tablecmds.c:2461 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "ne peut pas hériter de la partition « %s »" -#: commands/tablecmds.c:2191 parser/parse_utilcmd.c:2269 parser/parse_utilcmd.c:2410 +#: commands/tablecmds.c:2469 parser/parse_utilcmd.c:2485 parser/parse_utilcmd.c:2627 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "la relation héritée « %s » n'est ni une table ni une table distante" -#: commands/tablecmds.c:2203 +#: commands/tablecmds.c:2481 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "ne peut pas créer une relation temporaire comme partition de la relation permanente « %s »" -#: commands/tablecmds.c:2212 commands/tablecmds.c:12815 +#: commands/tablecmds.c:2490 commands/tablecmds.c:14112 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "ine peut pas hériter à partir d'une relation temporaire « %s »" -#: commands/tablecmds.c:2222 commands/tablecmds.c:12823 +#: commands/tablecmds.c:2500 commands/tablecmds.c:14120 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "ne peut pas hériter de la table temporaire d'une autre session" -#: commands/tablecmds.c:2274 +#: commands/tablecmds.c:2554 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "assemblage de plusieurs définitions d'héritage pour la colonne « %s »" -#: commands/tablecmds.c:2282 +#: commands/tablecmds.c:2562 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "la colonne héritée « %s » a un conflit de type" -#: commands/tablecmds.c:2284 commands/tablecmds.c:2307 commands/tablecmds.c:2520 commands/tablecmds.c:2550 parser/parse_coerce.c:1721 parser/parse_coerce.c:1741 parser/parse_coerce.c:1761 parser/parse_coerce.c:1807 parser/parse_coerce.c:1846 parser/parse_param.c:218 +#: commands/tablecmds.c:2564 commands/tablecmds.c:2587 commands/tablecmds.c:2604 commands/tablecmds.c:2860 commands/tablecmds.c:2890 commands/tablecmds.c:2904 parser/parse_coerce.c:2090 parser/parse_coerce.c:2110 parser/parse_coerce.c:2130 parser/parse_coerce.c:2150 parser/parse_coerce.c:2205 parser/parse_coerce.c:2238 parser/parse_coerce.c:2316 parser/parse_coerce.c:2348 parser/parse_coerce.c:2382 parser/parse_coerce.c:2402 parser/parse_param.c:227 #, c-format msgid "%s versus %s" msgstr "%s versus %s" -#: commands/tablecmds.c:2293 +#: commands/tablecmds.c:2573 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "la colonne héritée « %s » a un conflit sur le collationnement" -#: commands/tablecmds.c:2295 commands/tablecmds.c:2532 commands/tablecmds.c:5648 +#: commands/tablecmds.c:2575 commands/tablecmds.c:2872 commands/tablecmds.c:6516 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "« %s » versus « %s »" -#: commands/tablecmds.c:2305 +#: commands/tablecmds.c:2585 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "la colonne héritée « %s » a un conflit de paramètre de stockage" -#: commands/tablecmds.c:2321 +#: commands/tablecmds.c:2602 commands/tablecmds.c:2902 +#, c-format +msgid "column \"%s\" has a compression method conflict" +msgstr "la colonne « %s » a un conflit sur la méthode de compression" + +#: commands/tablecmds.c:2617 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "la colonne héritée « %s » a un conflit de génération" -#: commands/tablecmds.c:2426 commands/tablecmds.c:10487 parser/parse_utilcmd.c:1065 parser/parse_utilcmd.c:1149 parser/parse_utilcmd.c:1562 parser/parse_utilcmd.c:1669 +#: commands/tablecmds.c:2711 commands/tablecmds.c:2766 commands/tablecmds.c:11681 parser/parse_utilcmd.c:1299 parser/parse_utilcmd.c:1342 parser/parse_utilcmd.c:1750 parser/parse_utilcmd.c:1858 #, c-format msgid "cannot convert whole-row table reference" msgstr "ne peut pas convertir une référence de ligne complète de table" -#: commands/tablecmds.c:2427 parser/parse_utilcmd.c:1150 +#: commands/tablecmds.c:2712 parser/parse_utilcmd.c:1300 +#, c-format +msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." +msgstr "L'expression de génération de la colonne « %s » contient une référence de ligne complète vers la table « %s »." + +#: commands/tablecmds.c:2767 parser/parse_utilcmd.c:1343 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "La constrainte « %s » contient une référence de ligne complète vers la table « %s »." -#: commands/tablecmds.c:2506 +#: commands/tablecmds.c:2846 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "assemblage de la colonne « %s » avec une définition héritée" -#: commands/tablecmds.c:2510 +#: commands/tablecmds.c:2850 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "déplacement et assemblage de la colonne « %s » avec une définition héritée" -#: commands/tablecmds.c:2511 +#: commands/tablecmds.c:2851 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "Colonne utilisateur déplacée à la position de la colonne héritée." -#: commands/tablecmds.c:2518 +#: commands/tablecmds.c:2858 #, c-format msgid "column \"%s\" has a type conflict" msgstr "la colonne « %s » a un conflit de type" -#: commands/tablecmds.c:2530 +#: commands/tablecmds.c:2870 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "la colonne « %s » a un conflit sur le collationnement" -#: commands/tablecmds.c:2548 +#: commands/tablecmds.c:2888 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "la colonne « %s » a un conflit de paramètre de stockage" -#: commands/tablecmds.c:2651 +#: commands/tablecmds.c:2929 +#, c-format +msgid "child column \"%s\" specifies generation expression" +msgstr "la colonne enfant « %s » précise une expression de génération" + +#: commands/tablecmds.c:2931 +#, c-format +msgid "Omit the generation expression in the definition of the child table column to inherit the generation expression from the parent table." +msgstr "Omettre l'expression de génération dans la définition de la colonne de la table fille pour hériter de l'expression de génération de la table parent." + +#: commands/tablecmds.c:2935 +#, c-format +msgid "column \"%s\" inherits from generated column but specifies default" +msgstr "la colonne « %s » hérite d'une colonne générée mais indique une valeur par défaut" + +#: commands/tablecmds.c:2940 +#, c-format +msgid "column \"%s\" inherits from generated column but specifies identity" +msgstr "la colonne « %s » hérite d'une colonne générée mais précise une identité" + +#: commands/tablecmds.c:3049 +#, c-format +msgid "column \"%s\" inherits conflicting generation expressions" +msgstr "la colonne « %s » hérite d'expressions de génération en conflit" + +#: commands/tablecmds.c:3054 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "la colonne « %s » hérite de valeurs par défaut conflictuelles" -#: commands/tablecmds.c:2653 +#: commands/tablecmds.c:3056 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Pour résoudre le conflit, spécifiez explicitement une valeur par défaut." -#: commands/tablecmds.c:2698 +#: commands/tablecmds.c:3102 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "" "le nom de la contrainte de vérification, « %s », apparaît plusieurs fois\n" "mais avec des expressions différentes" -#: commands/tablecmds.c:2875 +#: commands/tablecmds.c:3315 +#, c-format +msgid "cannot move temporary tables of other sessions" +msgstr "ne peut pas déplacer les tables temporaires d'autres sessions" + +#: commands/tablecmds.c:3385 #, c-format msgid "cannot rename column of typed table" msgstr "ne peut pas renommer une colonne d'une table typée" -#: commands/tablecmds.c:2894 +#: commands/tablecmds.c:3404 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni un type composite, ni un index, ni une table distante" -#: commands/tablecmds.c:2988 +#: commands/tablecmds.c:3498 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "la colonne héritée « %s » doit aussi être renommée pour les tables filles" -#: commands/tablecmds.c:3020 +#: commands/tablecmds.c:3530 #, c-format msgid "cannot rename system column \"%s\"" msgstr "ne peut pas renommer la colonne système « %s »" -#: commands/tablecmds.c:3035 +#: commands/tablecmds.c:3545 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "ne peut pas renommer la colonne héritée « %s »" -#: commands/tablecmds.c:3187 +#: commands/tablecmds.c:3697 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "la contrainte héritée « %s » doit aussi être renommée pour les tables enfants" -#: commands/tablecmds.c:3194 +#: commands/tablecmds.c:3704 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "ne peut pas renommer la colonne héritée « %s »" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3427 +#: commands/tablecmds.c:3937 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "" @@ -8750,1793 +9290,1885 @@ msgstr "" "des requêtes actives dans cette session" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3436 +#: commands/tablecmds.c:3946 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "ne peut pas exécuter %s « %s » car il reste des événements sur les triggers" -#: commands/tablecmds.c:4567 +#: commands/tablecmds.c:4414 #, c-format -msgid "cannot rewrite system relation \"%s\"" -msgstr "ne peut pas ré-écrire la relation système « %s »" +msgid "cannot alter partition \"%s\" with an incomplete detach" +msgstr "ne peut pas modifier la partition « %s » avec un détachement incomplet" -#: commands/tablecmds.c:4573 +#: commands/tablecmds.c:4416 #, c-format -msgid "cannot rewrite table \"%s\" used as a catalog table" -msgstr "ne peut pas réécrire la table « %s » utilisée comme une table catalogue" +msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." +msgstr "" -#: commands/tablecmds.c:4583 +#: commands/tablecmds.c:4614 commands/tablecmds.c:4629 #, c-format -msgid "cannot rewrite temporary tables of other sessions" -msgstr "ne peut pas ré-écrire les tables temporaires des autres sessions" +msgid "cannot change persistence setting twice" +msgstr "ne peut pas modifier la configuration de la persistence deux fois" + +#: commands/tablecmds.c:5376 +#, c-format +msgid "cannot rewrite system relation \"%s\"" +msgstr "ne peut pas ré-écrire la relation système « %s »" -#: commands/tablecmds.c:4862 +#: commands/tablecmds.c:5382 #, c-format -msgid "rewriting table \"%s\"" -msgstr "ré-écriture de la table « %s »" +msgid "cannot rewrite table \"%s\" used as a catalog table" +msgstr "ne peut pas réécrire la table « %s » utilisée comme une table catalogue" -#: commands/tablecmds.c:4866 +#: commands/tablecmds.c:5392 #, c-format -msgid "verifying table \"%s\"" -msgstr "vérification de la table « %s »" +msgid "cannot rewrite temporary tables of other sessions" +msgstr "ne peut pas ré-écrire les tables temporaires des autres sessions" -#: commands/tablecmds.c:4996 +#: commands/tablecmds.c:5850 #, c-format -msgid "column \"%s\" contains null values" -msgstr "la colonne « %s » contient des valeurs NULL" +msgid "column \"%s\" of relation \"%s\" contains null values" +msgstr "la colonne « %s » de la table « %s » contient des valeurs NULL" -#: commands/tablecmds.c:5012 commands/tablecmds.c:9697 +#: commands/tablecmds.c:5867 #, c-format -msgid "check constraint \"%s\" is violated by some row" -msgstr "la contrainte de vérification « %s » est rompue par une ligne" +msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" +msgstr "la contrainte de vérification « %s » de la relation « %s » est violée par une ligne" -#: commands/tablecmds.c:5030 +#: commands/tablecmds.c:5886 partitioning/partbounds.c:3279 #, c-format -msgid "updated partition constraint for default partition would be violated by some row" -msgstr "la contrainte de partition mise à jour pour la partition par défaut serait transgressée par des lignes" +msgid "updated partition constraint for default partition \"%s\" would be violated by some row" +msgstr "la contrainte de partition mise à jour pour la partition par défaut « %s » serait transgressée par des lignes" -#: commands/tablecmds.c:5034 +#: commands/tablecmds.c:5892 #, c-format -msgid "partition constraint is violated by some row" -msgstr "la contrainte de partition est violée par une ligne" +msgid "partition constraint of relation \"%s\" is violated by some row" +msgstr "la contrainte de partition de la relation « %s » est violée par une ligne" -#: commands/tablecmds.c:5179 commands/trigger.c:1538 commands/trigger.c:1644 +#: commands/tablecmds.c:6040 commands/trigger.c:1265 commands/trigger.c:1371 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une table distante" -#: commands/tablecmds.c:5182 +#: commands/tablecmds.c:6043 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni une séquence, ni une table distante" -#: commands/tablecmds.c:5188 +#: commands/tablecmds.c:6049 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "« %s » n'est ni une table, ni une vue matérialisée, ni un index" -#: commands/tablecmds.c:5191 +#: commands/tablecmds.c:6052 #, c-format msgid "\"%s\" is not a table, materialized view, or foreign table" msgstr "« %s » n'est ni une table, ni une vue matérialisée, ni une table distante" -#: commands/tablecmds.c:5194 +#: commands/tablecmds.c:6055 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "« %s » n'est ni une table ni une table distante" -#: commands/tablecmds.c:5197 +#: commands/tablecmds.c:6058 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "« %s » n'est ni une table, ni un type composite, ni une table distante" -#: commands/tablecmds.c:5200 commands/tablecmds.c:6706 +#: commands/tablecmds.c:6061 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "« %s » n'est ni une table, ni une vue matérialisée, ni un index, ni une table distante" -#: commands/tablecmds.c:5210 +#: commands/tablecmds.c:6071 #, c-format msgid "\"%s\" is of the wrong type" msgstr "« %s » est du mauvais type" -#: commands/tablecmds.c:5416 commands/tablecmds.c:5423 +#: commands/tablecmds.c:6274 commands/tablecmds.c:6281 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "ne peux pas modifier le type « %s » car la colonne « %s.%s » l'utilise" -#: commands/tablecmds.c:5430 +#: commands/tablecmds.c:6288 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "" "ne peut pas modifier la table distante « %s » car la colonne « %s.%s » utilise\n" "son type de ligne" -#: commands/tablecmds.c:5437 +#: commands/tablecmds.c:6295 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "" "ne peut pas modifier la table « %s » car la colonne « %s.%s » utilise\n" "son type de ligne" -#: commands/tablecmds.c:5493 +#: commands/tablecmds.c:6351 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "ne peut pas modifier le type « %s » car il s'agit du type d'une table de type" -#: commands/tablecmds.c:5495 +#: commands/tablecmds.c:6353 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Utilisez ALTER ... CASCADE pour modifier aussi les tables de type." -#: commands/tablecmds.c:5541 +#: commands/tablecmds.c:6399 #, c-format msgid "type %s is not a composite type" msgstr "le type %s n'est pas un type composite" -#: commands/tablecmds.c:5567 +#: commands/tablecmds.c:6426 #, c-format msgid "cannot add column to typed table" msgstr "ne peut pas ajouter une colonne à une table typée" -#: commands/tablecmds.c:5611 +#: commands/tablecmds.c:6479 #, c-format msgid "cannot add column to a partition" msgstr "ne peut pas ajouter une colonne à une partition" -#: commands/tablecmds.c:5640 commands/tablecmds.c:13066 +#: commands/tablecmds.c:6508 commands/tablecmds.c:14363 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "la table fille « %s » a un type différent pour la colonne « %s »" -#: commands/tablecmds.c:5646 commands/tablecmds.c:13073 +#: commands/tablecmds.c:6514 commands/tablecmds.c:14370 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "la table fille « %s » a un collationnement différent pour la colonne « %s »" -#: commands/tablecmds.c:5660 +#: commands/tablecmds.c:6528 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "assemblage de la définition de la colonne « %s » pour le fils « %s »" -#: commands/tablecmds.c:5684 +#: commands/tablecmds.c:6571 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "ne peut pas ajouter récursivement la colonne identité à une table qui a des tables filles" -#: commands/tablecmds.c:5918 +#: commands/tablecmds.c:6823 #, c-format msgid "column must be added to child tables too" msgstr "la colonne doit aussi être ajoutée aux tables filles" -#: commands/tablecmds.c:5993 +#: commands/tablecmds.c:6901 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "la colonne « %s » de la relation « %s » existe déjà, poursuite du traitement" -#: commands/tablecmds.c:6000 +#: commands/tablecmds.c:6908 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "la colonne « %s » de la relation « %s » existe déjà" -#: commands/tablecmds.c:6066 commands/tablecmds.c:10140 +#: commands/tablecmds.c:6974 commands/tablecmds.c:11319 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "ne peut pas supprimer une contrainte uniquement d'une table partitionnée quand des partitions existent" -#: commands/tablecmds.c:6067 commands/tablecmds.c:6336 commands/tablecmds.c:7105 commands/tablecmds.c:10141 +#: commands/tablecmds.c:6975 commands/tablecmds.c:7279 commands/tablecmds.c:8300 commands/tablecmds.c:11320 #, c-format msgid "Do not specify the ONLY keyword." msgstr "Ne spécifiez pas le mot clé ONLY." -#: commands/tablecmds.c:6104 commands/tablecmds.c:6262 commands/tablecmds.c:6404 commands/tablecmds.c:6487 commands/tablecmds.c:6581 commands/tablecmds.c:6640 commands/tablecmds.c:6790 commands/tablecmds.c:6860 commands/tablecmds.c:6952 commands/tablecmds.c:10280 commands/tablecmds.c:11607 +#: commands/tablecmds.c:7012 commands/tablecmds.c:7205 commands/tablecmds.c:7347 commands/tablecmds.c:7461 commands/tablecmds.c:7555 commands/tablecmds.c:7614 commands/tablecmds.c:7732 commands/tablecmds.c:7898 commands/tablecmds.c:7968 commands/tablecmds.c:8123 commands/tablecmds.c:11474 commands/tablecmds.c:12975 commands/tablecmds.c:15477 #, c-format msgid "cannot alter system column \"%s\"" msgstr "n'a pas pu modifier la colonne système « %s »" -#: commands/tablecmds.c:6110 commands/tablecmds.c:6410 +#: commands/tablecmds.c:7018 commands/tablecmds.c:7353 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne d'identité" -#: commands/tablecmds.c:6146 +#: commands/tablecmds.c:7054 #, c-format msgid "column \"%s\" is in a primary key" msgstr "la colonne « %s » est dans une clé primaire" -#: commands/tablecmds.c:6168 +#: commands/tablecmds.c:7076 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "la colonne « %s » est marquée NOT NULL dans la table parent" -#: commands/tablecmds.c:6333 commands/tablecmds.c:7555 +#: commands/tablecmds.c:7276 commands/tablecmds.c:8783 #, c-format msgid "constraint must be added to child tables too" msgstr "la contrainte doit aussi être ajoutée aux tables filles" -#: commands/tablecmds.c:6334 +#: commands/tablecmds.c:7277 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "la colonne « %s » de la relation « %s » n'est pas déjà NOT NULL." -#: commands/tablecmds.c:6369 -#, c-format -msgid "existing constraints on column \"%s\".\"%s\" are sufficient to prove that it does not contain nulls" -msgstr "les contraintes existantes sur la colonne « %s.%s » sont suffisantes pour prouver qu'elle ne contient aucun NULL" - -#: commands/tablecmds.c:6412 +#: commands/tablecmds.c:7355 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Utilisez à la place ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY." -#: commands/tablecmds.c:6417 +#: commands/tablecmds.c:7360 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "la colonne « %s » de la relation « %s » est une colonne générée" -#: commands/tablecmds.c:6498 +#: commands/tablecmds.c:7363 +#, c-format +msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." +msgstr "Utilisez à la place ALTER TABLE ... ALTER COLUMN ... DROP EXTENSION." + +#: commands/tablecmds.c:7472 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "la colonne « %s » de la relation « %s » doit être déclarée NOT NULL avant que la colonne identité puisse être ajoutée" -#: commands/tablecmds.c:6504 +#: commands/tablecmds.c:7478 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "la colonne « %s » de la relation « %s » est déjà une colonne d'identité" -#: commands/tablecmds.c:6510 +#: commands/tablecmds.c:7484 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "la colonne « %s » de la relation « %s » a déjà une valeur par défaut" -#: commands/tablecmds.c:6587 commands/tablecmds.c:6648 +#: commands/tablecmds.c:7561 commands/tablecmds.c:7622 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne d'identité" -#: commands/tablecmds.c:6653 +#: commands/tablecmds.c:7627 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne d'identité, poursuite du traitement" -#: commands/tablecmds.c:6718 +#: commands/tablecmds.c:7680 #, c-format -msgid "cannot refer to non-index column by number" -msgstr "impossible de référence une colonne non liée à une table par un nombre" +msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" +msgstr "ALTER TABLE / DROP EXPRESSION doit aussi être appliqué aux tables filles" -#: commands/tablecmds.c:6749 +#: commands/tablecmds.c:7702 #, c-format -msgid "statistics target %d is too low" -msgstr "la cible statistique %d est trop basse" +msgid "cannot drop generation expression from inherited column" +msgstr "ne peut pas supprimer l'expression de génération à partir d'une colonne héritée" -#: commands/tablecmds.c:6757 +#: commands/tablecmds.c:7740 #, c-format -msgid "lowering statistics target to %d" -msgstr "abaissement de la cible statistique à %d" +msgid "column \"%s\" of relation \"%s\" is not a stored generated column" +msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne générée stockée" + +#: commands/tablecmds.c:7745 +#, c-format +msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" +msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne générée stockée, ignoré" + +#: commands/tablecmds.c:7845 +#, c-format +msgid "cannot refer to non-index column by number" +msgstr "impossible de référence une colonne non liée à une table par un nombre" -#: commands/tablecmds.c:6780 +#: commands/tablecmds.c:7888 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "la colonne numéro %d de la relation « %s » n'existe pas" -#: commands/tablecmds.c:6799 +#: commands/tablecmds.c:7907 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "ne peut modifier les statistiques sur la colonne incluse « %s » de l'index « %s »" -#: commands/tablecmds.c:6804 +#: commands/tablecmds.c:7912 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "ne peut modifier les statistiques sur la colonne « %s » de l'index « %s », qui n'est pas une expression" -#: commands/tablecmds.c:6806 +#: commands/tablecmds.c:7914 #, c-format msgid "Alter statistics on table column instead." msgstr "Modifie les statistiques sur la colonne de la table à la place." -#: commands/tablecmds.c:6932 +#: commands/tablecmds.c:8103 #, c-format msgid "invalid storage type \"%s\"" msgstr "type de stockage « %s » invalide" -#: commands/tablecmds.c:6964 +#: commands/tablecmds.c:8135 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "le type de données %s de la colonne peut seulement avoir un stockage PLAIN" -#: commands/tablecmds.c:6999 +#: commands/tablecmds.c:8179 #, c-format msgid "cannot drop column from typed table" msgstr "ne peut pas supprimer une colonne à une table typée" -#: commands/tablecmds.c:7044 +#: commands/tablecmds.c:8238 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "la colonne « %s » de la relation « %s » n'existe pas, ignore" -#: commands/tablecmds.c:7057 +#: commands/tablecmds.c:8251 #, c-format msgid "cannot drop system column \"%s\"" msgstr "ne peut pas supprimer la colonne système « %s »" -#: commands/tablecmds.c:7067 +#: commands/tablecmds.c:8261 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "ne peut pas supprimer la colonne héritée « %s »" -#: commands/tablecmds.c:7080 +#: commands/tablecmds.c:8274 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "ne peut supprimer la colonne « %s » car elle fait partie de la clé de partitionnement de la relation « %s »" -#: commands/tablecmds.c:7104 +#: commands/tablecmds.c:8299 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "ne peut pas supprimer une colonne sur une seule partition quand plusieurs partitions existent" -#: commands/tablecmds.c:7276 +#: commands/tablecmds.c:8503 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX n'est pas supporté sur les tables partitionnées" -#: commands/tablecmds.c:7301 +#: commands/tablecmds.c:8528 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX renommera l'index « %s » en « %s »" -#: commands/tablecmds.c:7635 +#: commands/tablecmds.c:8863 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "ne peut pas utiliser ONLY pour une clé étrangère sur la table partitionnée « %s » référençant la relation « %s »" -#: commands/tablecmds.c:7641 +#: commands/tablecmds.c:8869 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "ne peut pas ajouter de clé étrangère NOT VALID sur la table partitionnée « %s » référençant la relation « %s »" -#: commands/tablecmds.c:7644 +#: commands/tablecmds.c:8872 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Cette fonctionnalité n'est pas encore implémentée sur les tables partitionnées." -#: commands/tablecmds.c:7651 commands/tablecmds.c:8055 +#: commands/tablecmds.c:8879 commands/tablecmds.c:9284 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "la relation référencée « %s » n'est pas une table" -#: commands/tablecmds.c:7674 +#: commands/tablecmds.c:8902 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "les contraintes sur les tables permanentes peuvent seulement référencer des tables permanentes" -#: commands/tablecmds.c:7681 +#: commands/tablecmds.c:8909 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "les contraintes sur les tables non tracées peuvent seulement référencer des tables permanentes ou non tracées" -#: commands/tablecmds.c:7687 +#: commands/tablecmds.c:8915 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "" "les constraintes sur des tables temporaires ne peuvent référencer que des\n" "tables temporaires" -#: commands/tablecmds.c:7691 +#: commands/tablecmds.c:8919 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "" "les contraintes sur des tables temporaires doivent référencer les tables\n" "temporaires de cette session" -#: commands/tablecmds.c:7757 commands/tablecmds.c:7763 +#: commands/tablecmds.c:8985 commands/tablecmds.c:8991 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "action %s invalide pour une clé étrangère contenant une colonne générée" -#: commands/tablecmds.c:7779 +#: commands/tablecmds.c:9007 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "nombre de colonnes de référence et référencées pour la clé étrangère en désaccord" -#: commands/tablecmds.c:7886 +#: commands/tablecmds.c:9114 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "la contrainte de clé étrangère « %s » ne peut pas être implémentée" -#: commands/tablecmds.c:7888 +#: commands/tablecmds.c:9116 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Les colonnes clés « %s » et « %s » sont de types incompatibles : %s et %s." -#: commands/tablecmds.c:8251 commands/tablecmds.c:8639 parser/parse_utilcmd.c:753 parser/parse_utilcmd.c:882 +#: commands/tablecmds.c:9479 commands/tablecmds.c:9872 parser/parse_utilcmd.c:794 parser/parse_utilcmd.c:923 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "les clés étrangères ne sont pas supportées par les tables distantes" -#: commands/tablecmds.c:9006 commands/tablecmds.c:9169 commands/tablecmds.c:10097 commands/tablecmds.c:10172 +#: commands/tablecmds.c:10238 commands/tablecmds.c:10401 commands/tablecmds.c:11276 commands/tablecmds.c:11351 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "la contrainte « %s » de la relation « %s » n'existe pas" -#: commands/tablecmds.c:9013 +#: commands/tablecmds.c:10245 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "la contrainte « %s » de la relation « %s » n'est pas une clé étrangère" -#: commands/tablecmds.c:9177 +#: commands/tablecmds.c:10409 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "la contrainte « %s » de la relation « %s » n'est pas une clé étrangère ou une contrainte de vérification" -#: commands/tablecmds.c:9247 +#: commands/tablecmds.c:10487 #, c-format msgid "constraint must be validated on child tables too" msgstr "la contrainte doit aussi être validées sur les tables enfants" -#: commands/tablecmds.c:9313 +#: commands/tablecmds.c:10571 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "la colonne « %s » référencée dans la contrainte de clé étrangère n'existe pas" -#: commands/tablecmds.c:9318 +#: commands/tablecmds.c:10576 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "ne peut pas avoir plus de %d clés dans une clé étrangère" -#: commands/tablecmds.c:9383 +#: commands/tablecmds.c:10641 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "ne peut pas utiliser une clé primaire déferrable pour la table « %s » référencée" -#: commands/tablecmds.c:9400 +#: commands/tablecmds.c:10658 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "il n'y a pas de clé primaire pour la table « %s » référencée" -#: commands/tablecmds.c:9465 +#: commands/tablecmds.c:10723 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "la liste de colonnes référencées dans la clé étrangère ne doit pas contenir de duplicats" -#: commands/tablecmds.c:9559 +#: commands/tablecmds.c:10817 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "" "ne peut pas utiliser une contrainte unique déferrable pour la table\n" "référencée « %s »" -#: commands/tablecmds.c:9564 +#: commands/tablecmds.c:10822 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "il n'existe aucune contrainte unique correspondant aux clés données pour la table « %s » référencée" -#: commands/tablecmds.c:9732 -#, c-format -msgid "validating foreign key constraint \"%s\"" -msgstr "validation de la contraintes de clé étrangère « %s »" - -#: commands/tablecmds.c:10053 +#: commands/tablecmds.c:11232 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "ne peut pas supprimer la contrainte héritée « %s » de la relation « %s »" -#: commands/tablecmds.c:10103 +#: commands/tablecmds.c:11282 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "la contrainte « %s » de la relation « %s » n'existe pas, ignore" -#: commands/tablecmds.c:10264 +#: commands/tablecmds.c:11458 #, c-format msgid "cannot alter column type of typed table" msgstr "ne peut pas modifier le type d'une colonne appartenant à une table typée" -#: commands/tablecmds.c:10291 +#: commands/tablecmds.c:11485 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "ne peut pas modifier la colonne héritée « %s »" -#: commands/tablecmds.c:10300 +#: commands/tablecmds.c:11494 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "ne peut pas modifier la colonne « %s » car elle fait partie de la clé de partitionnement de la relation « %s »" -#: commands/tablecmds.c:10350 +#: commands/tablecmds.c:11544 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "le résultat de la clause USING pour la colonne « %s » ne peut pas être converti automatiquement vers le type %s" -#: commands/tablecmds.c:10353 +#: commands/tablecmds.c:11547 #, c-format msgid "You might need to add an explicit cast." msgstr "Vous pouvez avoir besoin d'ajouter une conversion explicite." -#: commands/tablecmds.c:10357 +#: commands/tablecmds.c:11551 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "la colonne « %s » ne peut pas être convertie vers le type %s" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:10360 +#: commands/tablecmds.c:11554 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Vous pouvez avoir besoin de spécifier \"USING %s::%s\"." -#: commands/tablecmds.c:10459 +#: commands/tablecmds.c:11654 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "ne peut pas modifier la colonne héritée « %s » de la relation « %s »" -#: commands/tablecmds.c:10488 +#: commands/tablecmds.c:11682 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "l'expression USING contient une référence de table de ligne complète." -#: commands/tablecmds.c:10499 +#: commands/tablecmds.c:11693 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "le type de colonne héritée « %s » doit aussi être renommée pour les tables filles" -#: commands/tablecmds.c:10624 +#: commands/tablecmds.c:11818 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "ne peut pas modifier la colonne « %s » deux fois" -#: commands/tablecmds.c:10662 +#: commands/tablecmds.c:11856 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "l'expression de génération de la colonne « %s » ne peut pas être convertie vers le type %s automatiquement" -#: commands/tablecmds.c:10667 +#: commands/tablecmds.c:11861 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "" "la valeur par défaut de la colonne « %s » ne peut pas être convertie vers le\n" "type %s automatiquement" -#: commands/tablecmds.c:10745 +#: commands/tablecmds.c:11939 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "ne peut pas modifier le type d'une colonne utilisée dans colonne générée" -#: commands/tablecmds.c:10746 +#: commands/tablecmds.c:11940 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "La colonne « %s » est utilisée par la colonne générée « %s »" -#: commands/tablecmds.c:10767 +#: commands/tablecmds.c:11961 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "ne peut pas modifier le type d'une colonne utilisée dans une vue ou une règle" -#: commands/tablecmds.c:10768 commands/tablecmds.c:10787 commands/tablecmds.c:10805 +#: commands/tablecmds.c:11962 commands/tablecmds.c:11981 commands/tablecmds.c:11999 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s dépend de la colonne « %s »" -#: commands/tablecmds.c:10786 +#: commands/tablecmds.c:11980 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "ne peut pas modifier le type d'une colonne utilisée dans la définition d'un trigger" -#: commands/tablecmds.c:10804 +#: commands/tablecmds.c:11998 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "ne peut pas modifier le type d'une colonne utilisée dans la définition d'une politique" -#: commands/tablecmds.c:11715 commands/tablecmds.c:11727 +#: commands/tablecmds.c:13083 commands/tablecmds.c:13095 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "ne peut pas modifier le propriétaire de l'index « %s »" -#: commands/tablecmds.c:11717 commands/tablecmds.c:11729 +#: commands/tablecmds.c:13085 commands/tablecmds.c:13097 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Modifier à la place le propriétaire de la table concernée par l'index." -#: commands/tablecmds.c:11743 +#: commands/tablecmds.c:13111 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "ne peut pas modifier le propriétaire de la séquence « %s »" -#: commands/tablecmds.c:11757 commands/tablecmds.c:14954 +#: commands/tablecmds.c:13125 commands/tablecmds.c:16372 #, c-format msgid "Use ALTER TYPE instead." msgstr "Utilisez ALTER TYPE à la place." -#: commands/tablecmds.c:11766 +#: commands/tablecmds.c:13134 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une séquence, ni une table distante" -#: commands/tablecmds.c:12106 +#: commands/tablecmds.c:13473 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "ne peut pas avoir de nombreuses sous-commandes SET TABLESPACE" -#: commands/tablecmds.c:12181 +#: commands/tablecmds.c:13550 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni un index, ni une table TOAST" -#: commands/tablecmds.c:12214 commands/view.c:504 +#: commands/tablecmds.c:13583 commands/view.c:494 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION est uniquement accepté pour les vues dont la mise à jour est automatique" -#: commands/tablecmds.c:12354 -#, c-format -msgid "cannot move system relation \"%s\"" -msgstr "ne peut pas déplacer la colonne système « %s »" - -#: commands/tablecmds.c:12370 -#, c-format -msgid "cannot move temporary tables of other sessions" -msgstr "ne peut pas déplacer les tables temporaires d'autres sessions" - -#: commands/tablecmds.c:12538 +#: commands/tablecmds.c:13835 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "seuls les tables, index et vues matérialisées existent dans les tablespaces" -#: commands/tablecmds.c:12550 +#: commands/tablecmds.c:13847 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "ne peut pas déplacer les relations dans ou à partir du tablespace pg_global" -#: commands/tablecmds.c:12642 +#: commands/tablecmds.c:13939 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "annulation car le verrou sur la relation « %s.%s » n'est pas disponible" -#: commands/tablecmds.c:12658 +#: commands/tablecmds.c:13955 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "aucune relation correspondante trouvée dans le tablespace « %s »" -#: commands/tablecmds.c:12774 +#: commands/tablecmds.c:14071 #, c-format msgid "cannot change inheritance of typed table" msgstr "ne peut pas modifier l'héritage d'une table typée" -#: commands/tablecmds.c:12779 commands/tablecmds.c:13275 +#: commands/tablecmds.c:14076 commands/tablecmds.c:14572 #, c-format msgid "cannot change inheritance of a partition" msgstr "ne peut pas modifier l'héritage d'une partition" -#: commands/tablecmds.c:12784 +#: commands/tablecmds.c:14081 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "ne peut pas modifier l'héritage d'une table partitionnée" -#: commands/tablecmds.c:12830 +#: commands/tablecmds.c:14127 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "ne peut pas hériter à partir d'une relation temporaire d'une autre session" -#: commands/tablecmds.c:12843 +#: commands/tablecmds.c:14140 #, c-format msgid "cannot inherit from a partition" msgstr "ne peut pas hériter d'une partition" -#: commands/tablecmds.c:12865 commands/tablecmds.c:15590 +#: commands/tablecmds.c:14162 commands/tablecmds.c:17016 #, c-format msgid "circular inheritance not allowed" msgstr "héritage circulaire interdit" -#: commands/tablecmds.c:12866 commands/tablecmds.c:15591 +#: commands/tablecmds.c:14163 commands/tablecmds.c:17017 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "« %s » est déjà un enfant de « %s »." -#: commands/tablecmds.c:12879 +#: commands/tablecmds.c:14176 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "le trigger « %s » empêche la table « %s » de devenir une fille dans l'héritage" -#: commands/tablecmds.c:12881 +#: commands/tablecmds.c:14178 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "les triggers ROW avec des tables de transition ne sont pas supportés dans les hiérarchies d'héritage." -#: commands/tablecmds.c:13084 +#: commands/tablecmds.c:14381 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "la colonne « %s » de la table enfant doit être marquée comme NOT NULL" -#: commands/tablecmds.c:13111 +#: commands/tablecmds.c:14408 #, c-format msgid "child table is missing column \"%s\"" msgstr "la table enfant n'a pas de colonne « %s »" -#: commands/tablecmds.c:13199 +#: commands/tablecmds.c:14496 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "la table fille « %s » a un type différent pour la contrainte de vérification « %s »" -#: commands/tablecmds.c:13207 +#: commands/tablecmds.c:14504 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte non héritée sur la table fille « %s »" -#: commands/tablecmds.c:13218 +#: commands/tablecmds.c:14515 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte NOT VALID sur la table fille « %s »" -#: commands/tablecmds.c:13253 +#: commands/tablecmds.c:14550 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "la table enfant n'a pas de contrainte « %s »" -#: commands/tablecmds.c:13342 +#: commands/tablecmds.c:14638 +#, fuzzy, c-format +#| msgid "partition \"%s\" would overlap partition \"%s\"" +msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" +msgstr "la partition « %s » surchargerait la partition « %s »" + +#: commands/tablecmds.c:14642 +#, c-format +msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the detach operation." +msgstr "" + +#: commands/tablecmds.c:14667 commands/tablecmds.c:14715 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "la relation « %s » n'est pas une partition de la relation « %s »" -#: commands/tablecmds.c:13348 +#: commands/tablecmds.c:14721 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "la relation « %s » n'est pas un parent de la relation « %s »" -#: commands/tablecmds.c:13576 +#: commands/tablecmds.c:14949 #, c-format msgid "typed tables cannot inherit" msgstr "les tables avec type ne peuvent pas hériter d'autres tables" -#: commands/tablecmds.c:13606 +#: commands/tablecmds.c:14979 #, c-format msgid "table is missing column \"%s\"" msgstr "la colonne « %s » manque à la table" -#: commands/tablecmds.c:13617 +#: commands/tablecmds.c:14990 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "la table a une colonne « %s » alors que le type impose « %s »" -#: commands/tablecmds.c:13626 +#: commands/tablecmds.c:14999 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "la table « %s » a un type différent pour la colonne « %s »" -#: commands/tablecmds.c:13640 +#: commands/tablecmds.c:15013 #, c-format msgid "table has extra column \"%s\"" msgstr "la table a une colonne supplémentaire « %s »" -#: commands/tablecmds.c:13692 +#: commands/tablecmds.c:15065 #, c-format msgid "\"%s\" is not a typed table" msgstr "« %s » n'est pas une table typée" -#: commands/tablecmds.c:13874 +#: commands/tablecmds.c:15247 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index non unique « %s » comme identité de réplicat" -#: commands/tablecmds.c:13880 +#: commands/tablecmds.c:15253 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index « %s » immédiat comme identité de réplicat" -#: commands/tablecmds.c:13886 +#: commands/tablecmds.c:15259 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "ne peut pas utiliser un index par expression « %s » comme identité de réplicat" -#: commands/tablecmds.c:13892 +#: commands/tablecmds.c:15265 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index partiel « %s » comme identité de réplicat" -#: commands/tablecmds.c:13898 +#: commands/tablecmds.c:15271 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index invalide « %s » comme identité de réplicat" -#: commands/tablecmds.c:13915 +#: commands/tablecmds.c:15288 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "l'index « %s » ne peut pas être utilisé comme identité de réplicat car la colonne %d est une colonne système" -#: commands/tablecmds.c:13922 +#: commands/tablecmds.c:15295 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "l'index « %s » ne peut pas être utilisé comme identité de réplicat car la colonne « %s » peut être NULL" -#: commands/tablecmds.c:14115 +#: commands/tablecmds.c:15485 commands/tablecmds.c:18483 +#, c-format +msgid "column data type %s does not support compression" +msgstr "le type de données %s ne supporte pas la compression" + +#: commands/tablecmds.c:15546 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "ne peut pas modifier le statut de journalisation de la table « %s » parce qu'elle est temporaire" -#: commands/tablecmds.c:14139 +#: commands/tablecmds.c:15570 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "ne peut pas modifier la table « %s » en non journalisée car elle fait partie d'une publication" -#: commands/tablecmds.c:14141 +#: commands/tablecmds.c:15572 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Les relations non journalisées ne peuvent pas être répliquées." -#: commands/tablecmds.c:14186 +#: commands/tablecmds.c:15617 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "n'a pas pu passer la table « %s » en journalisé car elle référence la table non journalisée « %s »" -#: commands/tablecmds.c:14196 +#: commands/tablecmds.c:15627 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "n'a pas pu passer la table « %s » en non journalisé car elle référence la table journalisée « %s »" -#: commands/tablecmds.c:14254 +#: commands/tablecmds.c:15685 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "ne peut pas déplacer une séquence OWNED BY dans un autre schéma" -#: commands/tablecmds.c:14360 +#: commands/tablecmds.c:15792 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "la relation « %s » existe déjà dans le schéma « %s »" -#: commands/tablecmds.c:14937 +#: commands/tablecmds.c:16355 #, c-format msgid "\"%s\" is not a composite type" msgstr "« %s » n'est pas un type composite" -#: commands/tablecmds.c:14969 +#: commands/tablecmds.c:16387 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni une séquence, ni une table distante" -#: commands/tablecmds.c:15004 +#: commands/tablecmds.c:16422 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "stratégie de partitionnement « %s » non reconnue" -#: commands/tablecmds.c:15012 +#: commands/tablecmds.c:16430 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "ne peut pas utiliser la stratégie de partitionnement « list » avec plus d'une colonne" -#: commands/tablecmds.c:15078 +#: commands/tablecmds.c:16496 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "la colonne « %s » nommée dans la clé de partitionnement n'existe pas" -#: commands/tablecmds.c:15086 +#: commands/tablecmds.c:16504 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "ne peut pas utiliser la colonne système « %s » comme clé de partitionnement" -#: commands/tablecmds.c:15097 commands/tablecmds.c:15202 +#: commands/tablecmds.c:16515 commands/tablecmds.c:16629 #, c-format msgid "cannot use generated column in partition key" msgstr "ne peut pas utiliser une colonne générée dans une clé de partitionnement" -#: commands/tablecmds.c:15098 commands/tablecmds.c:15203 commands/trigger.c:659 rewrite/rewriteHandler.c:826 rewrite/rewriteHandler.c:843 +#: commands/tablecmds.c:16516 commands/tablecmds.c:16630 commands/trigger.c:635 rewrite/rewriteHandler.c:886 rewrite/rewriteHandler.c:921 #, c-format msgid "Column \"%s\" is a generated column." msgstr "la colonne « %s » est une colonne générée." -#: commands/tablecmds.c:15162 +#: commands/tablecmds.c:16592 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "" "les fonctions dans une expression de clé de partitionnement doivent être marquées comme\n" "IMMUTABLE" -#: commands/tablecmds.c:15179 -#, c-format -msgid "partition key expressions cannot contain whole-row references" -msgstr "les expressions de clé de partitionnement ne peuvent pas contenir des références à des lignes complètes" - -#: commands/tablecmds.c:15186 +#: commands/tablecmds.c:16612 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "les expressions de la clé de partitionnement ne peuvent pas contenir des références aux colonnes systèmes" -#: commands/tablecmds.c:15215 +#: commands/tablecmds.c:16642 #, c-format msgid "cannot use constant expression as partition key" msgstr "ne peut pas utiliser une expression constante comme clé de partitionnement" -#: commands/tablecmds.c:15236 +#: commands/tablecmds.c:16663 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "n'a pas pu déterminer le collationnement à utiliser pour l'expression de partitionnement" -#: commands/tablecmds.c:15271 +#: commands/tablecmds.c:16698 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "" "Vous devez spécifier une classe d'opérateur hash ou définir une\n" "classe d'opérateur hash par défaut pour le type de données." -#: commands/tablecmds.c:15277 +#: commands/tablecmds.c:16704 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "" "Vous devez spécifier une classe d'opérateur btree ou définir une\n" "classe d'opérateur btree par défaut pour le type de données." -#: commands/tablecmds.c:15422 -#, c-format -msgid "partition constraint for table \"%s\" is implied by existing constraints" -msgstr "la contrainte de partitionnement pour la table « %s » provient des contraintes existantes" - -#: commands/tablecmds.c:15426 partitioning/partbounds.c:1257 partitioning/partbounds.c:1308 -#, c-format -msgid "updated partition constraint for default partition \"%s\" is implied by existing constraints" -msgstr "la contrainte de partitionnement pour la partition par défaut « %s » est implicite du fait de contraintes existantes" - -#: commands/tablecmds.c:15530 +#: commands/tablecmds.c:16956 #, c-format msgid "\"%s\" is already a partition" msgstr "« %s » est déjà une partition" -#: commands/tablecmds.c:15536 +#: commands/tablecmds.c:16962 #, c-format msgid "cannot attach a typed table as partition" msgstr "ne peut pas attacher une table typée à une partition" -#: commands/tablecmds.c:15552 +#: commands/tablecmds.c:16978 #, c-format msgid "cannot attach inheritance child as partition" msgstr "ne peut pas ajouter la table en héritage comme une partition" -#: commands/tablecmds.c:15566 +#: commands/tablecmds.c:16992 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "ne peut pas attacher le parent d'héritage comme partition" -#: commands/tablecmds.c:15600 +#: commands/tablecmds.c:17026 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "ne peut pas attacher une relation temporaire comme partition de la relation permanente « %s »" -#: commands/tablecmds.c:15608 +#: commands/tablecmds.c:17034 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "ne peut pas attacher une relation permanente comme partition de la relation temporaire « %s »" -#: commands/tablecmds.c:15616 +#: commands/tablecmds.c:17042 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "ne peut pas attacher comme partition d'une relation temporaire d'une autre session" -#: commands/tablecmds.c:15623 +#: commands/tablecmds.c:17049 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "ne peut pas attacher une relation temporaire d'une autre session comme partition" -#: commands/tablecmds.c:15643 +#: commands/tablecmds.c:17069 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "la table « %s » contient la colonne « %s » introuvable dans le parent « %s »" -#: commands/tablecmds.c:15646 +#: commands/tablecmds.c:17072 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "La nouvelle partition pourrait seulement contenir les colonnes présentes dans le parent." -#: commands/tablecmds.c:15658 +#: commands/tablecmds.c:17084 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "le trigger « %s » empêche la table « %s » de devenir une partition" -#: commands/tablecmds.c:15660 commands/trigger.c:465 +#: commands/tablecmds.c:17086 commands/trigger.c:441 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "les triggers ROW avec des tables de transition ne sont pas supportés sur les partitions" -#: commands/tablecmds.c:15827 +#: commands/tablecmds.c:17249 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "ne peut pas attacher la table distante « %s » comme partition de la table partitionnée « %s »" -#: commands/tablecmds.c:15830 +#: commands/tablecmds.c:17252 +#, c-format +msgid "Partitioned table \"%s\" contains unique indexes." +msgstr "La table partitionnée « %s » contient des index uniques." + +#: commands/tablecmds.c:17572 +#, c-format +msgid "cannot detach partitions concurrently when a default partition exists" +msgstr "ne peut pas détacher les partitions en parallèle quand une partition par défaut existe" + +#: commands/tablecmds.c:17681 +#, c-format +msgid "partitioned table \"%s\" was removed concurrently" +msgstr "la table partitionnée « %s » a été supprimée de manière concurrente" + +#: commands/tablecmds.c:17687 #, c-format -msgid "Table \"%s\" contains unique indexes." -msgstr "La table « %s » contient des index uniques." +msgid "partition \"%s\" was removed concurrently" +msgstr "la partition « %s » a été supprimée de façon concurrente" -#: commands/tablecmds.c:16411 commands/tablecmds.c:16430 commands/tablecmds.c:16452 commands/tablecmds.c:16471 commands/tablecmds.c:16513 +#: commands/tablecmds.c:18141 commands/tablecmds.c:18161 commands/tablecmds.c:18181 commands/tablecmds.c:18200 commands/tablecmds.c:18242 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "ne peut pas attacher l'index « %s » comme une partition de l'index « %s »" -#: commands/tablecmds.c:16414 +#: commands/tablecmds.c:18144 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "L'index « %s » est déjà attaché à un autre index." -#: commands/tablecmds.c:16433 +#: commands/tablecmds.c:18164 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "L'index « %s » n'est un index sur aucune des partitions de la table « %s »." -#: commands/tablecmds.c:16455 +#: commands/tablecmds.c:18184 #, c-format msgid "The index definitions do not match." msgstr "La définition de l'index correspond pas." -#: commands/tablecmds.c:16474 +#: commands/tablecmds.c:18203 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "L'index « %s » appartient à une contrainte dans la table « %s » mais aucune contrainte n'existe pour l'index « %s »." -#: commands/tablecmds.c:16516 +#: commands/tablecmds.c:18245 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "Un autre index est déjà attaché pour la partition « %s »." -#: commands/tablespace.c:163 commands/tablespace.c:180 commands/tablespace.c:191 commands/tablespace.c:199 commands/tablespace.c:639 replication/slot.c:1198 storage/file/copydir.c:47 +#: commands/tablecmds.c:18495 +#, c-format +msgid "invalid compression method \"%s\"" +msgstr "méthode de compression « %s » invalide" + +#: commands/tablespace.c:162 commands/tablespace.c:179 commands/tablespace.c:190 commands/tablespace.c:198 commands/tablespace.c:650 replication/slot.c:1409 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "n'a pas pu créer le répertoire « %s » : %m" -#: commands/tablespace.c:210 utils/adt/genfile.c:593 +#: commands/tablespace.c:209 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "n'a pas pu lire les informations sur le répertoire « %s » : %m" -#: commands/tablespace.c:219 +#: commands/tablespace.c:218 #, c-format msgid "\"%s\" exists but is not a directory" msgstr "« %s » existe mais n'est pas un répertoire" -#: commands/tablespace.c:250 +#: commands/tablespace.c:249 #, c-format msgid "permission denied to create tablespace \"%s\"" msgstr "droit refusé pour créer le tablespace « %s »" -#: commands/tablespace.c:252 +#: commands/tablespace.c:251 #, c-format msgid "Must be superuser to create a tablespace." msgstr "Doit être super-utilisateur pour créer un tablespace." -#: commands/tablespace.c:268 +#: commands/tablespace.c:267 #, c-format msgid "tablespace location cannot contain single quotes" msgstr "le chemin du tablespace ne peut pas contenir de guillemets simples" -#: commands/tablespace.c:278 +#: commands/tablespace.c:277 #, c-format msgid "tablespace location must be an absolute path" msgstr "le chemin du tablespace doit être un chemin absolu" -#: commands/tablespace.c:290 +#: commands/tablespace.c:289 #, c-format msgid "tablespace location \"%s\" is too long" msgstr "le chemin du tablespace « %s » est trop long" -#: commands/tablespace.c:297 +#: commands/tablespace.c:296 #, c-format msgid "tablespace location should not be inside the data directory" msgstr "l'emplacement du tablespace ne doit pas être dans le répertoire de données" -#: commands/tablespace.c:306 commands/tablespace.c:966 +#: commands/tablespace.c:305 commands/tablespace.c:977 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "nom inacceptable pour le tablespace « %s »" -#: commands/tablespace.c:308 commands/tablespace.c:967 +#: commands/tablespace.c:307 commands/tablespace.c:978 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "Le préfixe « pg_ » est réservé pour les tablespaces système." -#: commands/tablespace.c:327 commands/tablespace.c:988 +#: commands/tablespace.c:326 commands/tablespace.c:999 #, c-format msgid "tablespace \"%s\" already exists" msgstr "le tablespace « %s » existe déjà" -#: commands/tablespace.c:443 commands/tablespace.c:949 commands/tablespace.c:1038 commands/tablespace.c:1107 commands/tablespace.c:1251 commands/tablespace.c:1451 +#: commands/tablespace.c:444 commands/tablespace.c:960 commands/tablespace.c:1049 commands/tablespace.c:1118 commands/tablespace.c:1264 commands/tablespace.c:1467 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "le tablespace « %s » n'existe pas" -#: commands/tablespace.c:449 +#: commands/tablespace.c:450 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "le tablespace « %s » n'existe pas, poursuite du traitement" -#: commands/tablespace.c:526 +#: commands/tablespace.c:478 +#, c-format +msgid "tablespace \"%s\" cannot be dropped because some objects depend on it" +msgstr "le tablespace « %s » ne peut pas être supprimé car d'autres objets en dépendent" + +#: commands/tablespace.c:537 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "le tablespace « %s » n'est pas vide" -#: commands/tablespace.c:598 +#: commands/tablespace.c:609 #, c-format msgid "directory \"%s\" does not exist" msgstr "le répertoire « %s » n'existe pas" -#: commands/tablespace.c:599 +#: commands/tablespace.c:610 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "Créer le répertoire pour ce tablespace avant de redémarrer le serveur." -#: commands/tablespace.c:604 +#: commands/tablespace.c:615 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "n'a pas pu configurer les droits du répertoire « %s » : %m" -#: commands/tablespace.c:634 +#: commands/tablespace.c:645 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "répertoire « %s » déjà utilisé comme tablespace" -#: commands/tablespace.c:758 commands/tablespace.c:771 commands/tablespace.c:807 commands/tablespace.c:899 storage/file/fd.c:2992 storage/file/fd.c:3331 +#: commands/tablespace.c:769 commands/tablespace.c:782 commands/tablespace.c:818 commands/tablespace.c:910 storage/file/fd.c:3161 storage/file/fd.c:3557 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "n'a pas pu supprimer le répertoire « %s » : %m" -#: commands/tablespace.c:820 commands/tablespace.c:908 +#: commands/tablespace.c:831 commands/tablespace.c:919 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "n'a pas pu supprimer le lien symbolique « %s » : %m" -#: commands/tablespace.c:830 commands/tablespace.c:917 +#: commands/tablespace.c:841 commands/tablespace.c:928 #, c-format msgid "\"%s\" is not a directory or symbolic link" msgstr "« %s » n'est ni un répertoire ni un lien symbolique" -#: commands/tablespace.c:1112 +#: commands/tablespace.c:1123 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "Le tablespace « %s » n'existe pas." -#: commands/tablespace.c:1550 +#: commands/tablespace.c:1566 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "les répertoires du tablespace %u n'ont pas pu être supprimés" -#: commands/tablespace.c:1552 +#: commands/tablespace.c:1568 #, c-format msgid "You can remove the directories manually if necessary." msgstr "Vous pouvez supprimer les répertoires manuellement si nécessaire." -#: commands/trigger.c:210 commands/trigger.c:221 +#: commands/trigger.c:198 commands/trigger.c:209 #, c-format msgid "\"%s\" is a table" msgstr "« %s » est une table" -#: commands/trigger.c:212 commands/trigger.c:223 +#: commands/trigger.c:200 commands/trigger.c:211 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "Les tables ne peuvent pas avoir de triggers INSTEAD OF." -#: commands/trigger.c:240 +#: commands/trigger.c:232 #, c-format -msgid "Partitioned tables cannot have BEFORE / FOR EACH ROW triggers." -msgstr "Les tables partitionnées ne peuvent pas avoir de triggers BEFORE / FOR EACH ROW." +msgid "\"%s\" is a partitioned table" +msgstr "« %s » est une table partitionnée" -#: commands/trigger.c:258 +#: commands/trigger.c:234 #, c-format msgid "Triggers on partitioned tables cannot have transition tables." msgstr "Les triggers sur les tables partitionnées ne peuvent pas avoir de tables de transition." -#: commands/trigger.c:270 commands/trigger.c:277 commands/trigger.c:447 +#: commands/trigger.c:246 commands/trigger.c:253 commands/trigger.c:423 #, c-format msgid "\"%s\" is a view" msgstr "« %s » est une vue" -#: commands/trigger.c:272 +#: commands/trigger.c:248 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "Les vues ne peuvent pas avoir de trigger BEFORE ou AFTER au niveau ligne." -#: commands/trigger.c:279 +#: commands/trigger.c:255 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "Les vues ne peuvent pas avoir de triggers TRUNCATE." -#: commands/trigger.c:287 commands/trigger.c:294 commands/trigger.c:306 commands/trigger.c:440 +#: commands/trigger.c:263 commands/trigger.c:270 commands/trigger.c:282 commands/trigger.c:416 #, c-format msgid "\"%s\" is a foreign table" msgstr "« %s » est une table distante" -#: commands/trigger.c:289 +#: commands/trigger.c:265 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "Les tables distantes ne peuvent pas avoir de triggers INSTEAD OF." -#: commands/trigger.c:296 +#: commands/trigger.c:272 #, c-format msgid "Foreign tables cannot have TRUNCATE triggers." msgstr "Les tables distantes ne peuvent pas avoir de triggers TRUNCATE." -#: commands/trigger.c:308 +#: commands/trigger.c:284 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "Les tables distantes ne peuvent pas avoir de triggers de contrainte." -#: commands/trigger.c:383 +#: commands/trigger.c:359 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "les triggers TRUNCATE FOR EACH ROW ne sont pas supportés" -#: commands/trigger.c:391 +#: commands/trigger.c:367 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "les triggers INSTEAD OF doivent être FOR EACH ROW" -#: commands/trigger.c:395 +#: commands/trigger.c:371 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "les triggers INSTEAD OF ne peuvent pas avoir de conditions WHEN" -#: commands/trigger.c:399 +#: commands/trigger.c:375 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "les triggers INSTEAD OF ne peuvent pas avoir de liste de colonnes" -#: commands/trigger.c:428 +#: commands/trigger.c:404 #, c-format msgid "ROW variable naming in the REFERENCING clause is not supported" msgstr "le nommage de variable ROW dans la clause REFERENCING n'est pas supporté" -#: commands/trigger.c:429 +#: commands/trigger.c:405 #, c-format msgid "Use OLD TABLE or NEW TABLE for naming transition tables." msgstr "Utilisez OLD TABLE ou NEW TABLE pour nommer les tables de transition." -#: commands/trigger.c:442 +#: commands/trigger.c:418 #, c-format msgid "Triggers on foreign tables cannot have transition tables." msgstr "Les triggers sur les tables distantes ne peuvent pas avoir de tables de transition." -#: commands/trigger.c:449 +#: commands/trigger.c:425 #, c-format msgid "Triggers on views cannot have transition tables." msgstr "Les triggers sur les vues ne peuvent pas avoir de tables de transition." -#: commands/trigger.c:469 +#: commands/trigger.c:445 #, c-format msgid "ROW triggers with transition tables are not supported on inheritance children" msgstr "les triggers ROW avec des tables de transition ne sont pas supportés sur les filles en héritage" -#: commands/trigger.c:475 +#: commands/trigger.c:451 #, c-format msgid "transition table name can only be specified for an AFTER trigger" msgstr "le nom de la table de transition peut seulement être spécifié pour un trigger AFTER" -#: commands/trigger.c:480 +#: commands/trigger.c:456 #, c-format msgid "TRUNCATE triggers with transition tables are not supported" msgstr "les triggers TRUNCATE avec des tables de transition ne sont pas supportés" -#: commands/trigger.c:497 +#: commands/trigger.c:473 #, c-format msgid "transition tables cannot be specified for triggers with more than one event" msgstr "les tables de transition ne peuvent pas être spécifiées pour les triggers avec plus d'un événement" -#: commands/trigger.c:508 +#: commands/trigger.c:484 #, c-format msgid "transition tables cannot be specified for triggers with column lists" msgstr "les tables de transition ne peuvent pas être spécifiées pour les triggers avec des listes de colonnes" -#: commands/trigger.c:525 +#: commands/trigger.c:501 #, c-format msgid "NEW TABLE can only be specified for an INSERT or UPDATE trigger" msgstr "OLD TABLE peut seulement être spécifié pour un trigger INSERT ou UPDATE" -#: commands/trigger.c:530 +#: commands/trigger.c:506 #, c-format msgid "NEW TABLE cannot be specified multiple times" msgstr "NEW TABLE ne peut pas être spécifié plusieurs fois" -#: commands/trigger.c:540 +#: commands/trigger.c:516 #, c-format msgid "OLD TABLE can only be specified for a DELETE or UPDATE trigger" msgstr "OLD TABLE peut seulement être spécifié pour un trigger DELETE ou UPDATE" -#: commands/trigger.c:545 +#: commands/trigger.c:521 #, c-format msgid "OLD TABLE cannot be specified multiple times" msgstr "OLD TABLE ne peut pas être spécifié plusieurs fois" -#: commands/trigger.c:555 +#: commands/trigger.c:531 #, c-format msgid "OLD TABLE name and NEW TABLE name cannot be the same" msgstr "les noms de OLD TABLE et NEW TABLE ne peuvent pas être identiques" -#: commands/trigger.c:619 commands/trigger.c:632 +#: commands/trigger.c:595 commands/trigger.c:608 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "" "la condition WHEN de l'instruction du trigger ne peut pas référencer les valeurs\n" "des colonnes" -#: commands/trigger.c:624 +#: commands/trigger.c:600 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "la condition WHEN du trigger INSERT ne peut pas référencer les valeurs OLD" -#: commands/trigger.c:637 +#: commands/trigger.c:613 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "la condition WHEN du trigger DELETE ne peut pas référencer les valeurs NEW" -#: commands/trigger.c:642 +#: commands/trigger.c:618 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "la condition WHEN d'un trigger BEFORE ne doit pas référencer dans NEW les colonnes système" -#: commands/trigger.c:650 commands/trigger.c:658 +#: commands/trigger.c:626 commands/trigger.c:634 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW generated columns" msgstr "la condition WHEN d'un trigger BEFORE ne doit pas référencer dans NEW les colonnes générées" -#: commands/trigger.c:651 +#: commands/trigger.c:627 #, c-format msgid "A whole-row reference is used and the table contains generated columns." msgstr "Une référence comprenant toute une ligne est utilisée et la table contient des colonnes générées." -#: commands/trigger.c:833 commands/trigger.c:1723 +#: commands/trigger.c:741 commands/trigger.c:1450 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "le trigger « %s » de la relation « %s » existe déjà" -#: commands/trigger.c:1248 -msgid "Found referenced table's UPDATE trigger." -msgstr "Trigger UPDATE de la table référencée trouvé." - -#: commands/trigger.c:1249 -msgid "Found referenced table's DELETE trigger." -msgstr "Trigger DELETE de la table référencée trouvé." - -#: commands/trigger.c:1250 -msgid "Found referencing table's trigger." -msgstr "Trigger de la table référencée trouvé." - -#: commands/trigger.c:1359 commands/trigger.c:1375 +#: commands/trigger.c:755 #, c-format -msgid "ignoring incomplete trigger group for constraint \"%s\" %s" -msgstr "ignore le groupe de trigger incomplet pour la contrainte « %s » %s" +msgid "trigger \"%s\" for relation \"%s\" is an internal trigger" +msgstr "le trigger « %s » de la relation « %s » est un trigger interne" -#: commands/trigger.c:1388 +#: commands/trigger.c:774 #, c-format -msgid "converting trigger group into constraint \"%s\" %s" -msgstr "conversion du groupe de trigger en une contrainte « %s » %s" +msgid "trigger \"%s\" for relation \"%s\" is a constraint trigger" +msgstr "le trigger « %s » de la relation « %s » est un trigger de contrainte" -#: commands/trigger.c:1609 commands/trigger.c:1770 commands/trigger.c:1906 +#: commands/trigger.c:1336 commands/trigger.c:1497 commands/trigger.c:1612 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "le trigger « %s » de la table « %s » n'existe pas" -#: commands/trigger.c:1853 +#: commands/trigger.c:1580 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "droit refusé : « %s » est un trigger système" -#: commands/trigger.c:2453 +#: commands/trigger.c:2160 #, c-format msgid "trigger function %u returned null value" msgstr "la fonction trigger %u a renvoyé la valeur NULL" -#: commands/trigger.c:2519 commands/trigger.c:2736 commands/trigger.c:2988 commands/trigger.c:3292 +#: commands/trigger.c:2220 commands/trigger.c:2434 commands/trigger.c:2673 commands/trigger.c:2977 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "un trigger BEFORE STATEMENT ne peut pas renvoyer une valeur" -#: commands/trigger.c:3355 executor/nodeModifyTable.c:1349 executor/nodeModifyTable.c:1418 +#: commands/trigger.c:2294 +#, c-format +msgid "moving row to another partition during a BEFORE FOR EACH ROW trigger is not supported" +msgstr "le déplacement de la ligne vers une autre partition par un trigger BEFORE FOR EACH ROW n'est pas supporté" + +#: commands/trigger.c:2295 +#, c-format +msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." +msgstr "Avant d'exécuter le trigger « %s », la ligne devait aller dans la partition « %s.%s »." + +#: commands/trigger.c:3043 executor/nodeModifyTable.c:1798 executor/nodeModifyTable.c:1880 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "la ligne à mettre à jour était déjà modifiée par une opération déclenchée par la commande courante" -#: commands/trigger.c:3356 executor/nodeModifyTable.c:809 executor/nodeModifyTable.c:883 executor/nodeModifyTable.c:1350 executor/nodeModifyTable.c:1419 +#: commands/trigger.c:3044 executor/nodeModifyTable.c:1186 executor/nodeModifyTable.c:1260 executor/nodeModifyTable.c:1799 executor/nodeModifyTable.c:1881 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Considérez l'utilisation d'un trigger AFTER au lieu d'un trigger BEFORE pour propager les changements sur les autres lignes." -#: commands/trigger.c:3386 executor/nodeLockRows.c:225 executor/nodeLockRows.c:234 executor/nodeModifyTable.c:220 executor/nodeModifyTable.c:825 executor/nodeModifyTable.c:1366 executor/nodeModifyTable.c:1582 +#: commands/trigger.c:3073 executor/nodeLockRows.c:225 executor/nodeLockRows.c:234 executor/nodeModifyTable.c:228 executor/nodeModifyTable.c:1202 executor/nodeModifyTable.c:1816 executor/nodeModifyTable.c:2046 #, c-format msgid "could not serialize access due to concurrent update" msgstr "n'a pas pu sérialiser un accès à cause d'une mise à jour en parallèle" -#: commands/trigger.c:3394 executor/nodeModifyTable.c:915 executor/nodeModifyTable.c:1436 executor/nodeModifyTable.c:1606 +#: commands/trigger.c:3081 executor/nodeModifyTable.c:1292 executor/nodeModifyTable.c:1898 executor/nodeModifyTable.c:2070 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "n'a pas pu sérialiser un accès à cause d'une suppression en parallèle" -#: commands/trigger.c:5445 +#: commands/trigger.c:4142 +#, c-format +msgid "cannot fire deferred trigger within security-restricted operation" +msgstr "ne peut pas déclencher un trigger déferré à l'intérieur d'une opération restreinte pour sécurité" + +#: commands/trigger.c:5183 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "la contrainte « %s » n'est pas DEFERRABLE" -#: commands/trigger.c:5468 +#: commands/trigger.c:5206 #, c-format msgid "constraint \"%s\" does not exist" msgstr "la contrainte « %s » n'existe pas" -#: commands/tsearchcmds.c:115 commands/tsearchcmds.c:686 +#: commands/tsearchcmds.c:118 commands/tsearchcmds.c:635 #, c-format msgid "function %s should return type %s" msgstr "la fonction %s doit renvoyer le type %s" -#: commands/tsearchcmds.c:192 +#: commands/tsearchcmds.c:194 #, c-format msgid "must be superuser to create text search parsers" msgstr "doit être super-utilisateur pour créer des analyseurs de recherche plein texte" -#: commands/tsearchcmds.c:245 +#: commands/tsearchcmds.c:247 #, c-format msgid "text search parser parameter \"%s\" not recognized" msgstr "paramètre de l'analyseur de recherche plein texte « %s » non reconnu" -#: commands/tsearchcmds.c:255 +#: commands/tsearchcmds.c:257 #, c-format msgid "text search parser start method is required" msgstr "la méthode start de l'analyseur de recherche plein texte est requise" -#: commands/tsearchcmds.c:260 +#: commands/tsearchcmds.c:262 #, c-format msgid "text search parser gettoken method is required" msgstr "la méthode gettoken de l'analyseur de recherche plein texte est requise" -#: commands/tsearchcmds.c:265 +#: commands/tsearchcmds.c:267 #, c-format msgid "text search parser end method is required" msgstr "la méthode end l'analyseur de recherche de texte est requise" -#: commands/tsearchcmds.c:270 +#: commands/tsearchcmds.c:272 #, c-format msgid "text search parser lextypes method is required" msgstr "la méthode lextypes de l'analyseur de recherche plein texte est requise" -#: commands/tsearchcmds.c:387 +#: commands/tsearchcmds.c:366 #, c-format msgid "text search template \"%s\" does not accept options" msgstr "le modèle de recherche plein texte « %s » n'accepte pas d'options" -#: commands/tsearchcmds.c:461 +#: commands/tsearchcmds.c:440 #, c-format msgid "text search template is required" msgstr "le modèle de la recherche plein texte est requis" -#: commands/tsearchcmds.c:753 +#: commands/tsearchcmds.c:701 #, c-format msgid "must be superuser to create text search templates" msgstr "doit être super-utilisateur pour créer des modèles de recherche plein texte" -#: commands/tsearchcmds.c:795 +#: commands/tsearchcmds.c:743 #, c-format msgid "text search template parameter \"%s\" not recognized" msgstr "paramètre de modèle de recherche plein texte « %s » non reconnu" -#: commands/tsearchcmds.c:805 +#: commands/tsearchcmds.c:753 #, c-format msgid "text search template lexize method is required" msgstr "la méthode lexize du modèle de recherche plein texte est requise" -#: commands/tsearchcmds.c:1009 +#: commands/tsearchcmds.c:933 #, c-format msgid "text search configuration parameter \"%s\" not recognized" msgstr "paramètre de configuration de recherche plein texte « %s » non reconnu" -#: commands/tsearchcmds.c:1016 +#: commands/tsearchcmds.c:940 #, c-format msgid "cannot specify both PARSER and COPY options" msgstr "ne peut pas spécifier à la fois PARSER et COPY" -#: commands/tsearchcmds.c:1052 +#: commands/tsearchcmds.c:976 #, c-format msgid "text search parser is required" msgstr "l'analyseur de la recherche plein texte est requis" -#: commands/tsearchcmds.c:1276 +#: commands/tsearchcmds.c:1200 #, c-format msgid "token type \"%s\" does not exist" msgstr "le type de jeton « %s » n'existe pas" -#: commands/tsearchcmds.c:1503 +#: commands/tsearchcmds.c:1427 #, c-format msgid "mapping for token type \"%s\" does not exist" msgstr "la correspondance pour le type de jeton « %s » n'existe pas" -#: commands/tsearchcmds.c:1509 +#: commands/tsearchcmds.c:1433 #, c-format msgid "mapping for token type \"%s\" does not exist, skipping" msgstr "" "la correspondance pour le type de jeton « %s » n'existe pas, poursuite du\n" "traitement" -#: commands/tsearchcmds.c:1664 commands/tsearchcmds.c:1775 +#: commands/tsearchcmds.c:1596 commands/tsearchcmds.c:1711 #, c-format msgid "invalid parameter list format: \"%s\"" msgstr "format de liste de paramètres invalide : « %s »" -#: commands/typecmds.c:184 +#: commands/typecmds.c:217 #, c-format msgid "must be superuser to create a base type" msgstr "doit être super-utilisateur pour créer un type de base" -#: commands/typecmds.c:291 commands/typecmds.c:1467 +#: commands/typecmds.c:275 +#, c-format +msgid "Create the type as a shell type, then create its I/O functions, then do a full CREATE TYPE." +msgstr "Créez le type comme un type shell, puis créez ses fonctions I/O, puis faites un vrai CREATE TYPE." + +#: commands/typecmds.c:327 commands/typecmds.c:1465 commands/typecmds.c:4281 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "attribut du type « %s » non reconnu" -#: commands/typecmds.c:347 +#: commands/typecmds.c:385 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "catégorie de type « %s » invalide : doit être de l'ASCII pur" -#: commands/typecmds.c:366 +#: commands/typecmds.c:404 #, c-format msgid "array element type cannot be %s" msgstr "le type d'élément tableau ne peut pas être %s" -#: commands/typecmds.c:398 +#: commands/typecmds.c:436 #, c-format msgid "alignment \"%s\" not recognized" msgstr "alignement « %s » non reconnu" -#: commands/typecmds.c:415 +#: commands/typecmds.c:453 commands/typecmds.c:4155 #, c-format msgid "storage \"%s\" not recognized" msgstr "stockage « %s » non reconnu" -#: commands/typecmds.c:426 +#: commands/typecmds.c:464 #, c-format msgid "type input function must be specified" msgstr "le type d'entrée de la fonction doit être spécifié" -#: commands/typecmds.c:430 +#: commands/typecmds.c:468 #, c-format msgid "type output function must be specified" msgstr "le type de sortie de la fonction doit être spécifié" -#: commands/typecmds.c:435 +#: commands/typecmds.c:473 #, c-format msgid "type modifier output function is useless without a type modifier input function" msgstr "" "la fonction en sortie du modificateur de type est inutile sans une fonction\n" "en entrée du modificateur de type" -#: commands/typecmds.c:465 -#, c-format -msgid "type input function %s must return type %s" -msgstr "le type d'entrée de la fonction %s doit être %s" - -#: commands/typecmds.c:482 -#, c-format -msgid "type output function %s must return type %s" -msgstr "le type de sortie de la fonction %s doit être %s" - -#: commands/typecmds.c:491 -#, c-format -msgid "type receive function %s must return type %s" -msgstr "la fonction receive du type %s doit renvoyer le type %s" - -#: commands/typecmds.c:500 -#, c-format -msgid "type send function %s must return type %s" -msgstr "le type de sortie de la fonction d'envoi %s doit être %s" - -#: commands/typecmds.c:565 -#, c-format -msgid "type input function %s should not be volatile" -msgstr "la fonction en entrée du type %s ne doit pas être volatile" - -#: commands/typecmds.c:570 -#, c-format -msgid "type output function %s should not be volatile" -msgstr "la fonction en entrée du type %s ne doit pas être volatile" - -#: commands/typecmds.c:575 -#, c-format -msgid "type receive function %s should not be volatile" -msgstr "la fonction receive du type %s ne doit pas être volatile" - -#: commands/typecmds.c:580 -#, c-format -msgid "type send function %s should not be volatile" -msgstr "la fonction send du type %s ne doit pas être volatile" - -#: commands/typecmds.c:585 -#, c-format -msgid "type modifier input function %s should not be volatile" -msgstr "la fonction en entrée du modificateur de type %s ne devrait pas être volatile" - -#: commands/typecmds.c:590 +#: commands/typecmds.c:515 #, c-format -msgid "type modifier output function %s should not be volatile" -msgstr "la fonction en sortie du modificateur de type %s ne devrait pas être volatile" +msgid "element type cannot be specified without a valid subscripting procedure" +msgstr "" -#: commands/typecmds.c:817 +#: commands/typecmds.c:784 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "« %s » n'est pas un type de base valide pour un domaine" -#: commands/typecmds.c:903 +#: commands/typecmds.c:882 #, c-format msgid "multiple default expressions" msgstr "multiples expressions par défaut" -#: commands/typecmds.c:966 commands/typecmds.c:975 +#: commands/typecmds.c:945 commands/typecmds.c:954 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "contraintes NULL/NOT NULL en conflit" -#: commands/typecmds.c:991 +#: commands/typecmds.c:970 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "les contraintes CHECK pour les domaines ne peuvent pas être marquées NO INHERIT" -#: commands/typecmds.c:1000 commands/typecmds.c:2582 +#: commands/typecmds.c:979 commands/typecmds.c:2975 #, c-format msgid "unique constraints not possible for domains" msgstr "contraintes uniques impossible pour les domaines" -#: commands/typecmds.c:1006 commands/typecmds.c:2588 +#: commands/typecmds.c:985 commands/typecmds.c:2981 #, c-format msgid "primary key constraints not possible for domains" msgstr "contraintes de clé primaire impossible pour les domaines" -#: commands/typecmds.c:1012 commands/typecmds.c:2594 +#: commands/typecmds.c:991 commands/typecmds.c:2987 #, c-format msgid "exclusion constraints not possible for domains" msgstr "contraintes d'exclusion impossible pour les domaines" -#: commands/typecmds.c:1018 commands/typecmds.c:2600 +#: commands/typecmds.c:997 commands/typecmds.c:2993 #, c-format msgid "foreign key constraints not possible for domains" msgstr "contraintes de clé étrangère impossible pour les domaines" -#: commands/typecmds.c:1027 commands/typecmds.c:2609 +#: commands/typecmds.c:1006 commands/typecmds.c:3002 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "spécifier des contraintes déferrantes n'est pas supporté par les domaines" -#: commands/typecmds.c:1337 utils/cache/typcache.c:2340 +#: commands/typecmds.c:1320 utils/cache/typcache.c:2545 #, c-format msgid "%s is not an enum" msgstr "%s n'est pas un enum" -#: commands/typecmds.c:1475 +#: commands/typecmds.c:1473 #, c-format msgid "type attribute \"subtype\" is required" msgstr "l'attribut du sous-type est requis" -#: commands/typecmds.c:1480 +#: commands/typecmds.c:1478 #, c-format msgid "range subtype cannot be %s" msgstr "le sous-type de l'intervalle ne peut pas être %s" -#: commands/typecmds.c:1499 +#: commands/typecmds.c:1497 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "collationnement spécifié pour l'intervalle mais le sous-type ne supporte pas les collationnements" -#: commands/typecmds.c:1733 +#: commands/typecmds.c:1507 +#, c-format +msgid "cannot specify a canonical function without a pre-created shell type" +msgstr "ne peut pas spécifier une fonction canonique sans un type shell précédemment créé" + +#: commands/typecmds.c:1508 +#, c-format +msgid "Create the type as a shell type, then create its canonicalization function, then do a full CREATE TYPE." +msgstr "Créez le type comme un type shell, puis créez sa fonction canonisée, puis faites un vrai CREATE TYPE." + +#: commands/typecmds.c:1982 +#, c-format +msgid "type input function %s has multiple matches" +msgstr "la fonction d'entrée du type %s a plusieurs correspondances" + +#: commands/typecmds.c:2000 +#, c-format +msgid "type input function %s must return type %s" +msgstr "le type d'entrée de la fonction %s doit être %s" + +#: commands/typecmds.c:2016 +#, c-format +msgid "type input function %s should not be volatile" +msgstr "la fonction en entrée du type %s ne doit pas être volatile" + +#: commands/typecmds.c:2044 +#, c-format +msgid "type output function %s must return type %s" +msgstr "le type de sortie de la fonction %s doit être %s" + +#: commands/typecmds.c:2051 +#, c-format +msgid "type output function %s should not be volatile" +msgstr "la fonction en entrée du type %s ne doit pas être volatile" + +#: commands/typecmds.c:2080 +#, c-format +msgid "type receive function %s has multiple matches" +msgstr "la fonction receive du type %s a plusieurs correspondances" + +#: commands/typecmds.c:2098 +#, c-format +msgid "type receive function %s must return type %s" +msgstr "la fonction receive du type %s doit renvoyer le type %s" + +#: commands/typecmds.c:2105 #, c-format -msgid "changing argument type of function %s from \"opaque\" to \"cstring\"" -msgstr "changement du type d'argument de la fonction %s d'« opaque » à « cstring »" +msgid "type receive function %s should not be volatile" +msgstr "la fonction receive du type %s ne doit pas être volatile" + +#: commands/typecmds.c:2133 +#, c-format +msgid "type send function %s must return type %s" +msgstr "le type de sortie de la fonction d'envoi %s doit être %s" -#: commands/typecmds.c:1784 +#: commands/typecmds.c:2140 #, c-format -msgid "changing argument type of function %s from \"opaque\" to %s" -msgstr "changement du type d'argument de la fonction %s d'« opaque » à %s" +msgid "type send function %s should not be volatile" +msgstr "la fonction send du type %s ne doit pas être volatile" -#: commands/typecmds.c:1883 +#: commands/typecmds.c:2167 #, c-format msgid "typmod_in function %s must return type %s" msgstr "le type de sortie de la fonction typmod_in %s doit être %s" -#: commands/typecmds.c:1910 +#: commands/typecmds.c:2174 +#, c-format +msgid "type modifier input function %s should not be volatile" +msgstr "la fonction en entrée du modificateur de type %s ne devrait pas être volatile" + +#: commands/typecmds.c:2201 #, c-format msgid "typmod_out function %s must return type %s" msgstr "le type de sortie de la fonction typmod_out %s doit être %s" -#: commands/typecmds.c:1937 +#: commands/typecmds.c:2208 +#, c-format +msgid "type modifier output function %s should not be volatile" +msgstr "la fonction en sortie du modificateur de type %s ne devrait pas être volatile" + +#: commands/typecmds.c:2235 #, c-format msgid "type analyze function %s must return type %s" msgstr "la fonction analyze du type %s doit renvoyer le type %s" -#: commands/typecmds.c:1983 +#: commands/typecmds.c:2264 +#, fuzzy, c-format +#| msgid "type input function %s must return type %s" +msgid "type subscripting function %s must return type %s" +msgstr "le type d'entrée de la fonction %s doit être %s" + +#: commands/typecmds.c:2274 +#, c-format +msgid "user-defined types cannot use subscripting function %s" +msgstr "" + +#: commands/typecmds.c:2320 #, c-format msgid "You must specify an operator class for the range type or define a default operator class for the subtype." msgstr "" "Vous devez spécifier une classe d'opérateur pour le type range ou définir une\n" "classe d'opérateur par défaut pour le sous-type." -#: commands/typecmds.c:2014 +#: commands/typecmds.c:2351 #, c-format msgid "range canonical function %s must return range type" msgstr "la fonction canonical %s du range doit renvoyer le type range" -#: commands/typecmds.c:2020 +#: commands/typecmds.c:2357 #, c-format msgid "range canonical function %s must be immutable" msgstr "la fonction canonical %s du range doit être immutable" -#: commands/typecmds.c:2056 +#: commands/typecmds.c:2393 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "" "la fonction %s de calcul de différence pour le sous-type d'un intervalle de\n" "valeur doit renvoyer le type %s" -#: commands/typecmds.c:2063 +#: commands/typecmds.c:2400 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "" "la fonction %s de calcul de différence pour le sous-type d'un intervalle de\n" "valeur doit être immutable" -#: commands/typecmds.c:2090 +#: commands/typecmds.c:2427 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "les valeurs d'OID du tableau pgtype ne sont pas positionnées en mode de mise à jour binaire" -#: commands/typecmds.c:2398 +#: commands/typecmds.c:2460 +#, fuzzy, c-format +#| msgid "pg_type array OID value not set when in binary upgrade mode" +msgid "pg_type multirange OID value not set when in binary upgrade mode" +msgstr "les valeurs d'OID du tableau pgtype ne sont pas positionnées en mode de mise à jour binaire" + +#: commands/typecmds.c:2493 +#, fuzzy, c-format +#| msgid "pg_type array OID value not set when in binary upgrade mode" +msgid "pg_type multirange array OID value not set when in binary upgrade mode" +msgstr "les valeurs d'OID du tableau pgtype ne sont pas positionnées en mode de mise à jour binaire" + +#: commands/typecmds.c:2791 #, c-format msgid "column \"%s\" of table \"%s\" contains null values" msgstr "la colonne « %s » de la table « %s » contient des valeurs NULL" -#: commands/typecmds.c:2511 commands/typecmds.c:2713 +#: commands/typecmds.c:2904 commands/typecmds.c:3106 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "la contrainte « %s » du domaine « %s » n'existe pas" -#: commands/typecmds.c:2515 +#: commands/typecmds.c:2908 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "la contrainte « %s » du domaine « %s » n'existe pas, ignore" -#: commands/typecmds.c:2720 +#: commands/typecmds.c:3113 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "la contrainte « %s » du domaine « %s » n'est pas une contrainte de vérification" -#: commands/typecmds.c:2826 +#: commands/typecmds.c:3219 #, c-format msgid "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "" "la colonne « %s » de la table « %s » contient des valeurs violant la\n" "nouvelle contrainte" -#: commands/typecmds.c:3055 commands/typecmds.c:3253 commands/typecmds.c:3335 commands/typecmds.c:3522 +#: commands/typecmds.c:3448 commands/typecmds.c:3646 commands/typecmds.c:3727 commands/typecmds.c:3913 #, c-format msgid "%s is not a domain" msgstr "%s n'est pas un domaine" -#: commands/typecmds.c:3087 +#: commands/typecmds.c:3480 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "la contrainte « %s » du domaine « %s » existe déjà" -#: commands/typecmds.c:3138 +#: commands/typecmds.c:3531 #, c-format msgid "cannot use table references in domain check constraint" msgstr "" "ne peut pas utiliser les références de table dans la contrainte de\n" "vérification du domaine" -#: commands/typecmds.c:3265 commands/typecmds.c:3347 commands/typecmds.c:3639 +#: commands/typecmds.c:3658 commands/typecmds.c:3739 commands/typecmds.c:4030 #, c-format msgid "%s is a table's row type" msgstr "« %s » est du type ligne de table" -#: commands/typecmds.c:3267 commands/typecmds.c:3349 commands/typecmds.c:3641 +#: commands/typecmds.c:3660 commands/typecmds.c:3741 commands/typecmds.c:4032 #, c-format msgid "Use ALTER TABLE instead." msgstr "Utilisez ALTER TABLE à la place." -#: commands/typecmds.c:3274 commands/typecmds.c:3356 commands/typecmds.c:3554 +#: commands/typecmds.c:3666 commands/typecmds.c:3747 commands/typecmds.c:3945 #, c-format msgid "cannot alter array type %s" msgstr "ne peut pas modifier le type array %s" -#: commands/typecmds.c:3276 commands/typecmds.c:3358 commands/typecmds.c:3556 +#: commands/typecmds.c:3668 commands/typecmds.c:3749 commands/typecmds.c:3947 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "Vous pouvez modifier le type %s, ce qui va modifier aussi le type tableau." -#: commands/typecmds.c:3624 +#: commands/typecmds.c:4015 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "le type « %s » existe déjà dans le schéma « %s »" +#: commands/typecmds.c:4183 +#, c-format +msgid "cannot change type's storage to PLAIN" +msgstr "ne peut pas modifier le stockage du type en PLAIN" + +#: commands/typecmds.c:4276 +#, c-format +msgid "type attribute \"%s\" cannot be changed" +msgstr "l'attribut du type « %s » ne peut pas être changé" + +#: commands/typecmds.c:4294 +#, c-format +msgid "must be superuser to alter a type" +msgstr "doit être super-utilisateur pour modifier un type" + +#: commands/typecmds.c:4315 commands/typecmds.c:4324 +#, c-format +msgid "%s is not a base type" +msgstr "« %s » n'est pas un type de base" + #: commands/user.c:140 #, c-format msgid "SYSID can no longer be specified" @@ -10552,32 +11184,32 @@ msgstr "doit être super-utilisateur pour créer des super-utilisateurs" msgid "must be superuser to create replication users" msgstr "doit être super-utilisateur pour créer des utilisateurs avec l'attribut réplication" -#: commands/user.c:308 commands/user.c:723 +#: commands/user.c:308 #, c-format -msgid "must be superuser to change bypassrls attribute" -msgstr "doit être super-utilisateur pour modifier l'attribut bypassrls" +msgid "must be superuser to create bypassrls users" +msgstr "doit être super-utilisateur pour créer des utilisateurs avec l'attribut BYPASSRLS" #: commands/user.c:315 #, c-format msgid "permission denied to create role" msgstr "droit refusé pour créer un rôle" -#: commands/user.c:325 commands/user.c:1213 commands/user.c:1220 gram.y:14896 gram.y:14934 utils/adt/acl.c:5342 utils/adt/acl.c:5348 +#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15273 gram.y:15318 utils/adt/acl.c:5248 utils/adt/acl.c:5254 #, c-format msgid "role name \"%s\" is reserved" msgstr "le nom du rôle « %s » est réservé" -#: commands/user.c:327 commands/user.c:1215 commands/user.c:1222 +#: commands/user.c:327 commands/user.c:1228 commands/user.c:1235 #, c-format msgid "Role names starting with \"pg_\" are reserved." msgstr "Les noms de rôle commençant par « pg_ » sont réservés." -#: commands/user.c:348 commands/user.c:1237 +#: commands/user.c:348 commands/user.c:1250 #, c-format msgid "role \"%s\" already exists" msgstr "le rôle « %s » existe déjà" -#: commands/user.c:414 commands/user.c:832 +#: commands/user.c:414 commands/user.c:845 #, c-format msgid "empty string is not a valid password, clearing password" msgstr "une chaîne vide n'est pas un mot de passe valide, effacement du mot de passe" @@ -10587,220 +11219,260 @@ msgstr "une chaîne vide n'est pas un mot de passe valide, effacement du mot de msgid "pg_authid OID value not set when in binary upgrade mode" msgstr "la valeur d'OID de pg_authid n'est pas positionnée en mode de mise à jour binaire" -#: commands/user.c:709 commands/user.c:933 commands/user.c:1476 commands/user.c:1620 +#: commands/user.c:722 #, c-format -msgid "must be superuser to alter superusers" -msgstr "doit être super-utilisateur pour modifier des super-utilisateurs" +msgid "must be superuser to alter superuser roles or change superuser attribute" +msgstr "doit être super-utilisateur pour modifier les rôles ayant l'attribut SUPERUSER ou pour changer l'attribut SUPERUSER" + +#: commands/user.c:729 +#, c-format +msgid "must be superuser to alter replication roles or change replication attribute" +msgstr "doit être super-utilisateur pour modifier les rôles ayant l'attribut REPLICATION ou pour changer l'attribut REPLICATION" -#: commands/user.c:716 +#: commands/user.c:736 #, c-format -msgid "must be superuser to alter replication users" -msgstr "doit être super-utilisateur pour modifier des utilisateurs ayant l'attribut réplication" +msgid "must be superuser to change bypassrls attribute" +msgstr "doit être super-utilisateur pour modifier l'attribut bypassrls" -#: commands/user.c:739 commands/user.c:940 +#: commands/user.c:752 commands/user.c:953 #, c-format msgid "permission denied" msgstr "droit refusé" -#: commands/user.c:970 +#: commands/user.c:946 commands/user.c:1487 commands/user.c:1665 +#, c-format +msgid "must be superuser to alter superusers" +msgstr "doit être super-utilisateur pour modifier des super-utilisateurs" + +#: commands/user.c:983 #, c-format msgid "must be superuser to alter settings globally" msgstr "doit être super-utilisateur pour modifier globalement les configurations" -#: commands/user.c:992 +#: commands/user.c:1005 #, c-format msgid "permission denied to drop role" msgstr "droit refusé pour supprimer le rôle" -#: commands/user.c:1017 +#: commands/user.c:1030 #, c-format msgid "cannot use special role specifier in DROP ROLE" msgstr "ne peut pas être le spécificateur de rôle spécial dans DROP ROLE" -#: commands/user.c:1027 commands/user.c:1184 commands/variable.c:770 commands/variable.c:844 utils/adt/acl.c:5199 utils/adt/acl.c:5246 utils/adt/acl.c:5274 utils/adt/acl.c:5292 utils/init/miscinit.c:607 +#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:778 commands/variable.c:781 commands/variable.c:865 commands/variable.c:868 utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 utils/adt/acl.c:5198 utils/init/miscinit.c:705 #, c-format msgid "role \"%s\" does not exist" msgstr "le rôle « %s » n'existe pas" -#: commands/user.c:1032 +#: commands/user.c:1045 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "le rôle « %s » n'existe pas, poursuite du traitement" -#: commands/user.c:1045 commands/user.c:1049 +#: commands/user.c:1058 commands/user.c:1062 #, c-format msgid "current user cannot be dropped" msgstr "l'utilisateur actuel ne peut pas être supprimé" -#: commands/user.c:1053 +#: commands/user.c:1066 #, c-format msgid "session user cannot be dropped" msgstr "l'utilisateur de la session ne peut pas être supprimé" -#: commands/user.c:1063 +#: commands/user.c:1076 #, c-format msgid "must be superuser to drop superusers" msgstr "doit être super-utilisateur pour supprimer des super-utilisateurs" -#: commands/user.c:1079 +#: commands/user.c:1092 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "le rôle « %s » ne peut pas être supprimé car d'autres objets en dépendent" -#: commands/user.c:1200 +#: commands/user.c:1213 #, c-format msgid "session user cannot be renamed" msgstr "l'utilisateur de la session ne peut pas être renommé" -#: commands/user.c:1204 +#: commands/user.c:1217 #, c-format msgid "current user cannot be renamed" msgstr "l'utilisateur courant ne peut pas être renommé" -#: commands/user.c:1247 +#: commands/user.c:1260 #, c-format msgid "must be superuser to rename superusers" msgstr "doit être super-utilisateur pour renommer les super-utilisateurs" -#: commands/user.c:1254 +#: commands/user.c:1267 #, c-format msgid "permission denied to rename role" msgstr "droit refusé pour renommer le rôle" -#: commands/user.c:1275 +#: commands/user.c:1288 #, c-format msgid "MD5 password cleared because of role rename" msgstr "mot de passe MD5 effacé à cause du renommage du rôle" -#: commands/user.c:1335 +#: commands/user.c:1348 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "les noms de colonne ne peuvent pas être inclus dans GRANT/REVOKE ROLE" -#: commands/user.c:1373 +#: commands/user.c:1386 #, c-format msgid "permission denied to drop objects" msgstr "droit refusé pour supprimer les objets" -#: commands/user.c:1400 commands/user.c:1409 +#: commands/user.c:1413 commands/user.c:1422 #, c-format msgid "permission denied to reassign objects" msgstr "droit refusé pour ré-affecter les objets" -#: commands/user.c:1484 commands/user.c:1628 +#: commands/user.c:1495 commands/user.c:1673 #, c-format msgid "must have admin option on role \"%s\"" msgstr "doit avoir l'option admin sur le rôle « %s »" -#: commands/user.c:1501 +#: commands/user.c:1509 +#, c-format +msgid "role \"%s\" cannot have explicit members" +msgstr "le rôle « %s » ne peut pas avoir de membres explicites" + +#: commands/user.c:1524 #, c-format msgid "must be superuser to set grantor" msgstr "doit être super-utilisateur pour configurer le « donneur de droits »" -#: commands/user.c:1526 +#: commands/user.c:1560 +#, c-format +msgid "role \"%s\" cannot be a member of any role" +msgstr "le rôle « %s » n'est pas un membre de tout autre rôle" + +#: commands/user.c:1573 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "le rôle « %s » est un membre du rôle « %s »" -#: commands/user.c:1541 +#: commands/user.c:1588 #, c-format msgid "role \"%s\" is already a member of role \"%s\"" msgstr "le rôle « %s » est déjà un membre du rôle « %s »" -#: commands/user.c:1650 +#: commands/user.c:1695 #, c-format msgid "role \"%s\" is not a member of role \"%s\"" msgstr "le rôle « %s » n'est pas un membre du rôle « %s »" -#: commands/vacuum.c:116 +#: commands/vacuum.c:132 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "option d'ANALYZE « %s » non reconnue" -#: commands/vacuum.c:135 +#: commands/vacuum.c:156 +#, c-format +msgid "parallel option requires a value between 0 and %d" +msgstr "l'option parallel nécessite une valeur comprise entre 0 et %d" + +#: commands/vacuum.c:168 +#, c-format +msgid "parallel vacuum degree must be between 0 and %d" +msgstr "le degré de parallélisation du VACUUM doit être entre 0 et %d" + +#: commands/vacuum.c:185 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "option « %s » de la commande VACUUM non reconnue" -#: commands/vacuum.c:169 +#: commands/vacuum.c:208 +#, c-format +msgid "VACUUM FULL cannot be performed in parallel" +msgstr "Un VACUUM FULL ne peut être exécuté de façon parallélisé" + +#: commands/vacuum.c:224 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "l'option ANALYZE doit être spécifiée quand une liste de colonne est fournie" -#: commands/vacuum.c:259 +#: commands/vacuum.c:314 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s ne peut pas être exécuté dans un VACUUM ou un ANALYZE" -#: commands/vacuum.c:269 +#: commands/vacuum.c:324 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "l'option DISABLE_PAGE_SKIPPING de la commande VACUUM ne pas être utilisée en même temps que l'option FULL" -#: commands/vacuum.c:511 +#: commands/vacuum.c:331 +#, c-format +msgid "PROCESS_TOAST required with VACUUM FULL" +msgstr "" + +#: commands/vacuum.c:572 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "ignore « %s » --- seul le super-utilisateur peut exécuter un VACUUM" -#: commands/vacuum.c:515 +#: commands/vacuum.c:576 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "" "ignore « %s » --- seul le super-utilisateur ou le propriétaire de la base de données\n" "peuvent exécuter un VACUUM" -#: commands/vacuum.c:519 +#: commands/vacuum.c:580 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "" "ignore « %s » --- seul le propriétaire de la table ou de la base de données\n" "peut exécuter un VACUUM" -#: commands/vacuum.c:534 +#: commands/vacuum.c:595 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "ignore « %s » --- seul le super-utilisateur peut l'analyser" -#: commands/vacuum.c:538 +#: commands/vacuum.c:599 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "" "ignore « %s » --- seul le super-utilisateur ou le propriétaire de la base de\n" "données peut l'analyser" -#: commands/vacuum.c:542 +#: commands/vacuum.c:603 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "" "ignore « %s » --- seul le propriétaire de la table ou de la base de données\n" "peut l'analyser" -#: commands/vacuum.c:621 commands/vacuum.c:717 +#: commands/vacuum.c:682 commands/vacuum.c:778 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "ignore le vacuum de « %s » --- verrou non disponible" -#: commands/vacuum.c:626 +#: commands/vacuum.c:687 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "ignore le vacuum de « %s » --- la relation n'existe plus" -#: commands/vacuum.c:642 commands/vacuum.c:722 +#: commands/vacuum.c:703 commands/vacuum.c:783 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "ignore l'analyse de « %s » --- verrou non disponible" -#: commands/vacuum.c:647 +#: commands/vacuum.c:708 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "ignore l'analyse de « %s » --- la relation n'existe plus" -#: commands/vacuum.c:944 +#: commands/vacuum.c:1026 #, c-format msgid "oldest xmin is far in the past" msgstr "le plus ancien xmin est loin dans le passé" -#: commands/vacuum.c:945 +#: commands/vacuum.c:1027 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -10809,40 +11481,40 @@ msgstr "" "Fermer les transactions dès que possible pour éviter des problèmes de rebouclage d'identifiants de transaction.\n" "Vous pouvez avoir besoin de valider ou d'annuler les anciennes transactions préparées, ou de supprimer les slots de réplication trop anciens." -#: commands/vacuum.c:985 +#: commands/vacuum.c:1068 #, c-format msgid "oldest multixact is far in the past" msgstr "le plus ancien multixact est loin dans le passé" -#: commands/vacuum.c:986 +#: commands/vacuum.c:1069 #, c-format msgid "Close open transactions with multixacts soon to avoid wraparound problems." msgstr "" "Fermez les transactions ouvertes avec multixacts rapidement pour éviter des problèmes de\n" "réinitialisation." -#: commands/vacuum.c:1557 +#: commands/vacuum.c:1726 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "" "certaines bases de données n'ont pas eu droit à l'opération de maintenance\n" "VACUUM depuis plus de 2 milliards de transactions" -#: commands/vacuum.c:1558 +#: commands/vacuum.c:1727 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "" "Vous pouvez avoir déjà souffert de pertes de données suite à une\n" "réinitialisation de l'identifiant des transactions." -#: commands/vacuum.c:1716 +#: commands/vacuum.c:1891 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "" "ignore « %s » --- n'a pas pu exécuter un VACUUM sur les objets autres que\n" "des tables et les tables systèmes" -#: commands/variable.c:165 utils/misc/guc.c:10923 utils/misc/guc.c:10985 +#: commands/variable.c:165 utils/misc/guc.c:11659 utils/misc/guc.c:11721 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Mot clé non reconnu : « %s »." @@ -10910,7 +11582,7 @@ msgstr "" "SET TRANSACTION ISOLATION LEVEL ne doit pas être appelé dans une\n" "sous-transaction" -#: commands/variable.c:548 storage/lmgr/predicate.c:1626 +#: commands/variable.c:548 storage/lmgr/predicate.c:1693 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "ne peut pas utiliser le mode sérialisable sur un serveur en « Hot Standby »" @@ -10947,62 +11619,62 @@ msgstr "Ne peut pas modifier « client_encoding » maintenant." msgid "cannot change client_encoding during a parallel operation" msgstr "ne peut pas modifier le client_encoding lors d'une opération parallélisée" -#: commands/variable.c:863 -#, c-format -msgid "permission denied to set role \"%s\"" -msgstr "droit refusé pour configurer le rôle « %s »" - -#: commands/view.c:54 +#: commands/variable.c:890 #, c-format -msgid "invalid value for \"check_option\" option" -msgstr "valeur invalide pour l'option « check_option »" +msgid "permission will be denied to set role \"%s\"" +msgstr "le droit sera refusé pour configurer le rôle « %s »" -#: commands/view.c:55 +#: commands/variable.c:895 #, c-format -msgid "Valid values are \"local\" and \"cascaded\"." -msgstr "Les valeurs valides sont entre « local » et « cascaded »." +msgid "permission denied to set role \"%s\"" +msgstr "droit refusé pour configurer le rôle « %s »" -#: commands/view.c:103 +#: commands/view.c:84 #, c-format msgid "could not determine which collation to use for view column \"%s\"" msgstr "n'a pas pu déterminer le collationnement à utiliser pour la colonne « %s » de la vue" -#: commands/view.c:280 commands/view.c:291 +#: commands/view.c:265 commands/view.c:276 #, c-format msgid "cannot drop columns from view" msgstr "ne peut pas supprimer les colonnes d'une vue" -#: commands/view.c:296 +#: commands/view.c:281 #, c-format msgid "cannot change name of view column \"%s\" to \"%s\"" msgstr "ne peut pas modifier le nom de la colonne « %s » de la vue en « %s »" -#: commands/view.c:304 +#: commands/view.c:284 +#, c-format +msgid "Use ALTER VIEW ... RENAME COLUMN ... to change name of view column instead." +msgstr "À la place, utilisez ALTER VIEW ... RENAME COLUMN ... pour modifier le nom de la colonne d'une vue." + +#: commands/view.c:290 #, c-format msgid "cannot change data type of view column \"%s\" from %s to %s" msgstr "ne peut pas modifier le type de données de la colonne « %s » de la vue de %s à %s" -#: commands/view.c:451 +#: commands/view.c:441 #, c-format msgid "views must not contain SELECT INTO" msgstr "les vues ne peuvent pas contenir SELECT INTO" -#: commands/view.c:463 +#: commands/view.c:453 #, c-format msgid "views must not contain data-modifying statements in WITH" msgstr "les vues ne peuvent pas contenir d'instructions de modifications de données avec WITH" -#: commands/view.c:533 +#: commands/view.c:523 #, c-format msgid "CREATE VIEW specifies more column names than columns" msgstr "CREATE VIEW spécifie plus de noms de colonnes que de colonnes" -#: commands/view.c:541 +#: commands/view.c:531 #, c-format msgid "views cannot be unlogged because they do not have storage" msgstr "les vues ne peuvent pas être non tracées car elles n'ont pas de stockage" -#: commands/view.c:555 +#: commands/view.c:545 #, c-format msgid "view \"%s\" will be a temporary view" msgstr "la vue « %s » sera une vue temporaire" @@ -11037,560 +11709,581 @@ msgstr "le curseur « %s » n'est pas positionné sur une ligne" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "le curseur « %s » n'est pas un parcours modifiable de la table « %s »" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2312 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2443 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "le type de paramètre %d (%s) ne correspond pas à ce qui est préparé dans le plan (%s)" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2324 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2455 #, c-format msgid "no value found for parameter %d" msgstr "aucune valeur trouvée pour le paramètre %d" -#: executor/execExpr.c:857 parser/parse_agg.c:816 +#: executor/execExpr.c:612 executor/execExpr.c:619 executor/execExpr.c:625 executor/execExprInterp.c:4011 executor/execExprInterp.c:4028 executor/execExprInterp.c:4129 executor/nodeModifyTable.c:117 executor/nodeModifyTable.c:128 executor/nodeModifyTable.c:145 executor/nodeModifyTable.c:153 +#, c-format +msgid "table row type and query-specified row type do not match" +msgstr "le type de ligne de la table et celui spécifié par la requête ne correspondent pas" + +#: executor/execExpr.c:613 executor/nodeModifyTable.c:118 +#, c-format +msgid "Query has too many columns." +msgstr "La requête a trop de colonnes." + +#: executor/execExpr.c:620 executor/nodeModifyTable.c:146 +#, c-format +msgid "Query provides a value for a dropped column at ordinal position %d." +msgstr "" +"La requête fournit une valeur pour une colonne supprimée à la position\n" +"ordinale %d." + +#: executor/execExpr.c:626 executor/execExprInterp.c:4029 executor/nodeModifyTable.c:129 +#, c-format +msgid "Table has type %s at ordinal position %d, but query expects %s." +msgstr "La table a le type %s à la position ordinale %d alors que la requête attend %s." + +#: executor/execExpr.c:1056 parser/parse_agg.c:827 #, c-format msgid "window function calls cannot be nested" msgstr "les appels à la fonction window ne peuvent pas être imbriqués" -#: executor/execExpr.c:1316 +#: executor/execExpr.c:1561 #, c-format msgid "target type is not an array" msgstr "le type cible n'est pas un tableau" -#: executor/execExpr.c:1649 +#: executor/execExpr.c:1901 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "une colonne ROW() a le type %s au lieu du type %s" -#: executor/execExpr.c:2174 executor/execSRF.c:700 parser/parse_func.c:136 parser/parse_func.c:650 parser/parse_func.c:1024 +#: executor/execExpr.c:2426 executor/execSRF.c:718 parser/parse_func.c:136 parser/parse_func.c:654 parser/parse_func.c:1030 #, c-format msgid "cannot pass more than %d argument to a function" msgid_plural "cannot pass more than %d arguments to a function" msgstr[0] "ne peut pas passer plus de %d argument à une fonction" msgstr[1] "ne peut pas passer plus de %d arguments à une fonction" -#: executor/execExpr.c:2572 executor/execExpr.c:2578 executor/execExprInterp.c:2641 utils/adt/arrayfuncs.c:261 utils/adt/arrayfuncs.c:559 utils/adt/arrayfuncs.c:1301 utils/adt/arrayfuncs.c:3347 utils/adt/arrayfuncs.c:5302 utils/adt/arrayfuncs.c:5819 +#: executor/execExpr.c:2812 parser/parse_node.c:277 parser/parse_node.c:327 #, c-format -msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" -msgstr "le nombre de dimensions du tableau (%d) dépasse le maximum autorisé (%d)" +msgid "cannot subscript type %s because it does not support subscripting" +msgstr "ne peut pas indicer le type %s car il ne supporte pas les indices" -#: executor/execExprInterp.c:1862 +#: executor/execExpr.c:2940 executor/execExpr.c:2962 +#, c-format +msgid "type %s does not support subscripted assignment" +msgstr "le type %s ne supporte pas l'affectation avec indice" + +#: executor/execExprInterp.c:1911 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "l'attribut %d du type %s a été supprimé" -#: executor/execExprInterp.c:1868 +#: executor/execExprInterp.c:1917 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "l'attribut %d de type %s a un mauvais type" -#: executor/execExprInterp.c:1870 executor/execExprInterp.c:2914 executor/execExprInterp.c:2961 +#: executor/execExprInterp.c:1919 executor/execExprInterp.c:3040 executor/execExprInterp.c:3086 #, c-format msgid "Table has type %s, but query expects %s." msgstr "La table a le type %s alors que la requête attend %s." -#: executor/execExprInterp.c:2402 +#: executor/execExprInterp.c:1998 utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1748 utils/cache/typcache.c:1904 utils/cache/typcache.c:2033 utils/fmgr/funcapi.c:458 +#, c-format +msgid "type %s is not composite" +msgstr "le type %s n'est pas un type composite" + +#: executor/execExprInterp.c:2533 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF n'est pas supporté pour ce type de table" -#: executor/execExprInterp.c:2619 +#: executor/execExprInterp.c:2746 #, c-format msgid "cannot merge incompatible arrays" msgstr "ne peut pas fusionner les tableaux incompatibles" -#: executor/execExprInterp.c:2620 +#: executor/execExprInterp.c:2747 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "Le tableau avec le type d'élément %s ne peut pas être inclus dans la construction ARRAY avec le type d'élément %s." -#: executor/execExprInterp.c:2661 executor/execExprInterp.c:2691 +#: executor/execExprInterp.c:2768 utils/adt/arrayfuncs.c:262 utils/adt/arrayfuncs.c:560 utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3374 utils/adt/arrayfuncs.c:5334 utils/adt/arrayfuncs.c:5847 utils/adt/arraysubs.c:150 utils/adt/arraysubs.c:488 +#, c-format +msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" +msgstr "le nombre de dimensions du tableau (%d) dépasse le maximum autorisé (%d)" + +#: executor/execExprInterp.c:2788 executor/execExprInterp.c:2818 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "" "les tableaux multidimensionnels doivent avoir des expressions de tableaux\n" "avec les dimensions correspondantes" -#: executor/execExprInterp.c:2913 executor/execExprInterp.c:2960 +#: executor/execExprInterp.c:3039 executor/execExprInterp.c:3085 #, c-format msgid "attribute %d has wrong type" msgstr "l'attribut %d a un mauvais type" -#: executor/execExprInterp.c:3070 -#, c-format -msgid "array subscript in assignment must not be null" -msgstr "l'indice du tableau dans l'affectation ne doit pas être NULL" - -#: executor/execExprInterp.c:3503 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3640 utils/adt/domains.c:149 #, c-format msgid "domain %s does not allow null values" msgstr "le domaine %s n'autorise pas les valeurs NULL" -#: executor/execExprInterp.c:3518 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3655 utils/adt/domains.c:184 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "la valeur pour le domaine %s viole la contrainte de vérification « %s »" -#: executor/execExprInterp.c:3889 executor/execExprInterp.c:3906 executor/execExprInterp.c:4008 executor/nodeModifyTable.c:109 executor/nodeModifyTable.c:120 executor/nodeModifyTable.c:137 executor/nodeModifyTable.c:145 -#, c-format -msgid "table row type and query-specified row type do not match" -msgstr "le type de ligne de la table et celui spécifié par la requête ne correspondent pas" - -#: executor/execExprInterp.c:3890 +#: executor/execExprInterp.c:4012 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." -msgstr[0] "La ligne de la table contient %d attribut alors que la requête en attend %d." -msgstr[1] "La ligne de la table contient %d attributs alors que la requête en attend %d." - -#: executor/execExprInterp.c:3907 executor/nodeModifyTable.c:121 -#, c-format -msgid "Table has type %s at ordinal position %d, but query expects %s." -msgstr "La table a le type %s à la position ordinale %d alors que la requête attend %s." +msgstr[0] "La ligne de la table contient %d attribut alors que la requête en attend %d." +msgstr[1] "La ligne de la table contient %d attributs alors que la requête en attend %d." -#: executor/execExprInterp.c:4009 executor/execSRF.c:959 +#: executor/execExprInterp.c:4130 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "" "Le stockage physique ne correspond pas à l'attribut supprimé à la position\n" "ordinale %d." -#: executor/execIndexing.c:550 +#: executor/execIndexing.c:571 #, c-format msgid "ON CONFLICT does not support deferrable unique constraints/exclusion constraints as arbiters" msgstr "ON CONFLICT ne supporte pas les contraintes uniques diferrables et les contraintes d'exclusion différables comme arbitres" -#: executor/execIndexing.c:821 +#: executor/execIndexing.c:842 #, c-format msgid "could not create exclusion constraint \"%s\"" msgstr "n'a pas pu créer la contrainte d'exclusion « %s »" -#: executor/execIndexing.c:824 +#: executor/execIndexing.c:845 #, c-format msgid "Key %s conflicts with key %s." msgstr "La clé %s est en conflit avec la clé %s." -#: executor/execIndexing.c:826 +#: executor/execIndexing.c:847 #, c-format msgid "Key conflicts exist." msgstr "Un conflit de clés est présent." -#: executor/execIndexing.c:832 +#: executor/execIndexing.c:853 #, c-format msgid "conflicting key value violates exclusion constraint \"%s\"" msgstr "la valeur d'une clé en conflit rompt la contrainte d'exclusion « %s »" -#: executor/execIndexing.c:835 +#: executor/execIndexing.c:856 #, c-format msgid "Key %s conflicts with existing key %s." msgstr "La clé %s est en conflit avec la clé existante %s." -#: executor/execIndexing.c:837 +#: executor/execIndexing.c:858 #, c-format msgid "Key conflicts with existing key." msgstr "La clé est en conflit avec une clé existante." -#: executor/execMain.c:1091 +#: executor/execMain.c:1007 #, c-format msgid "cannot change sequence \"%s\"" msgstr "ne peut pas modifier la séquence « %s »" -#: executor/execMain.c:1097 +#: executor/execMain.c:1013 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "ne peut pas modifier la relation TOAST « %s »" -#: executor/execMain.c:1115 rewrite/rewriteHandler.c:2911 +#: executor/execMain.c:1031 rewrite/rewriteHandler.c:3043 rewrite/rewriteHandler.c:3830 #, c-format msgid "cannot insert into view \"%s\"" msgstr "ne peut pas insérer dans la vue « %s »" -#: executor/execMain.c:1117 rewrite/rewriteHandler.c:2914 +#: executor/execMain.c:1033 rewrite/rewriteHandler.c:3046 rewrite/rewriteHandler.c:3833 #, c-format msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." msgstr "Pour activer l'insertion dans la vue, fournissez un trigger INSTEAD OF INSERT ou une règle ON INSERT DO INSTEAD sans condition." -#: executor/execMain.c:1123 rewrite/rewriteHandler.c:2919 +#: executor/execMain.c:1039 rewrite/rewriteHandler.c:3051 rewrite/rewriteHandler.c:3838 #, c-format msgid "cannot update view \"%s\"" msgstr "ne peut pas mettre à jour la vue « %s »" -#: executor/execMain.c:1125 rewrite/rewriteHandler.c:2922 +#: executor/execMain.c:1041 rewrite/rewriteHandler.c:3054 rewrite/rewriteHandler.c:3841 #, c-format msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." msgstr "Pour activer la mise à jour dans la vue, fournissez un trigger INSTEAD OF UPDATE ou une règle ON UPDATE DO INSTEAD sans condition." -#: executor/execMain.c:1131 rewrite/rewriteHandler.c:2927 +#: executor/execMain.c:1047 rewrite/rewriteHandler.c:3059 rewrite/rewriteHandler.c:3846 #, c-format msgid "cannot delete from view \"%s\"" msgstr "ne peut pas supprimer à partir de la vue « %s »" -#: executor/execMain.c:1133 rewrite/rewriteHandler.c:2930 +#: executor/execMain.c:1049 rewrite/rewriteHandler.c:3062 rewrite/rewriteHandler.c:3849 #, c-format msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." msgstr "Pour activer la suppression dans la vue, fournissez un trigger INSTEAD OF DELETE ou une règle ON DELETE DO INSTEAD sans condition." -#: executor/execMain.c:1144 +#: executor/execMain.c:1060 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "ne peut pas modifier la vue matérialisée « %s »" -#: executor/execMain.c:1156 +#: executor/execMain.c:1072 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "ne peut pas insérer dans la table distante « %s »" -#: executor/execMain.c:1162 +#: executor/execMain.c:1078 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "la table distante « %s » n'autorise pas les insertions" -#: executor/execMain.c:1169 +#: executor/execMain.c:1085 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "ne peut pas modifier la table distante « %s »" -#: executor/execMain.c:1175 +#: executor/execMain.c:1091 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "la table distante « %s » n'autorise pas les modifications" -#: executor/execMain.c:1182 +#: executor/execMain.c:1098 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "ne peut pas supprimer à partir de la table distante « %s »" -#: executor/execMain.c:1188 +#: executor/execMain.c:1104 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "la table distante « %s » n'autorise pas les suppressions" -#: executor/execMain.c:1199 +#: executor/execMain.c:1115 #, c-format msgid "cannot change relation \"%s\"" msgstr "ne peut pas modifier la relation « %s »" -#: executor/execMain.c:1226 +#: executor/execMain.c:1142 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "ne peut pas verrouiller les lignes dans la séquence « %s »" -#: executor/execMain.c:1233 +#: executor/execMain.c:1149 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "ne peut pas verrouiller les lignes dans la relation TOAST « %s »" -#: executor/execMain.c:1240 +#: executor/execMain.c:1156 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "ne peut pas verrouiller les lignes dans la vue « %s »" -#: executor/execMain.c:1248 +#: executor/execMain.c:1164 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "ne peut pas verrouiller les lignes dans la vue matérialisée « %s »" -#: executor/execMain.c:1257 executor/execMain.c:2638 executor/nodeLockRows.c:132 +#: executor/execMain.c:1173 executor/execMain.c:2555 executor/nodeLockRows.c:132 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "ne peut pas verrouiller la table distante « %s »" -#: executor/execMain.c:1263 +#: executor/execMain.c:1179 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "n'a pas pu verrouiller les lignes dans la relation « %s »" -#: executor/execMain.c:1889 +#: executor/execMain.c:1803 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "la nouvelle ligne de la relation « %s » viole la contrainte de partitionnement" -#: executor/execMain.c:1891 executor/execMain.c:1973 executor/execMain.c:2022 executor/execMain.c:2131 +#: executor/execMain.c:1805 executor/execMain.c:1888 executor/execMain.c:1938 executor/execMain.c:2047 #, c-format msgid "Failing row contains %s." msgstr "La ligne en échec contient %s." -#: executor/execMain.c:1971 +#: executor/execMain.c:1885 #, c-format -msgid "null value in column \"%s\" violates not-null constraint" -msgstr "une valeur NULL viole la contrainte NOT NULL de la colonne « %s »" +msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" +msgstr "une valeur NULL viole la contrainte NOT NULL de la colonne « %s » dans la relation « %s »" -#: executor/execMain.c:2020 +#: executor/execMain.c:1936 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "la nouvelle ligne de la relation « %s » viole la contrainte de vérification « %s »" -#: executor/execMain.c:2129 +#: executor/execMain.c:2045 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "la nouvelle ligne viole la contrainte de vérification pour la vue « %s »" -#: executor/execMain.c:2139 +#: executor/execMain.c:2055 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "la nouvelle ligne viole la politique de sécurité au niveau ligne « %s » pour la table « %s »" -#: executor/execMain.c:2144 +#: executor/execMain.c:2060 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "la nouvelle ligne viole la politique de sécurité au niveau ligne pour la table « %s »" -#: executor/execMain.c:2151 +#: executor/execMain.c:2067 #, c-format msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "la nouvelle ligne viole la politique de sécurité au niveau ligne « %s » (expression USING) pour la table « %s »" -#: executor/execMain.c:2156 +#: executor/execMain.c:2072 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "la nouvelle ligne viole la politique de sécurité au niveau ligne (expression USING) pour la table « %s »" -#: executor/execPartition.c:345 +#: executor/execPartition.c:322 #, c-format msgid "no partition of relation \"%s\" found for row" msgstr "aucune partition de la relation « %s » trouvée pour la ligne" -#: executor/execPartition.c:348 +#: executor/execPartition.c:325 #, c-format msgid "Partition key of the failing row contains %s." msgstr "La clé de partitionnement de la ligne en échec contient %s." -#: executor/execReplication.c:195 executor/execReplication.c:359 +#: executor/execReplication.c:196 executor/execReplication.c:373 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update, retrying" msgstr "la ligne à verrouiller était déjà déplacée vers une autre partition du fait d'une mise à jour concurrente, nouvelle tentative" -#: executor/execReplication.c:199 executor/execReplication.c:363 +#: executor/execReplication.c:200 executor/execReplication.c:377 #, c-format msgid "concurrent update, retrying" msgstr "mise à jour concurrente, nouvelle tentative" -#: executor/execReplication.c:205 executor/execReplication.c:369 +#: executor/execReplication.c:206 executor/execReplication.c:383 #, c-format msgid "concurrent delete, retrying" msgstr "suppression concurrente, nouvelle tentative" -#: executor/execReplication.c:263 parser/parse_oper.c:228 utils/adt/array_userfuncs.c:719 utils/adt/array_userfuncs.c:858 utils/adt/arrayfuncs.c:3625 utils/adt/arrayfuncs.c:4140 utils/adt/arrayfuncs.c:6130 utils/adt/rowtypes.c:1180 +#: executor/execReplication.c:269 parser/parse_cte.c:502 parser/parse_oper.c:233 utils/adt/array_userfuncs.c:719 utils/adt/array_userfuncs.c:858 utils/adt/arrayfuncs.c:3652 utils/adt/arrayfuncs.c:4172 utils/adt/arrayfuncs.c:6158 utils/adt/rowtypes.c:1203 #, c-format msgid "could not identify an equality operator for type %s" msgstr "n'a pas pu identifier un opérateur d'égalité pour le type %s" -#: executor/execReplication.c:572 +#: executor/execReplication.c:590 #, c-format msgid "cannot update table \"%s\" because it does not have a replica identity and publishes updates" msgstr "ne peut pas mettre à jour la table « %s » car elle n'a pas d'identité de réplicat et publie des mises à jour" -#: executor/execReplication.c:574 +#: executor/execReplication.c:592 #, c-format msgid "To enable updating the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "Pour permettre les mises à jour sur la table, configurez REPLICA IDENTITY en utilisant ALTER TABLE." -#: executor/execReplication.c:578 +#: executor/execReplication.c:596 #, c-format msgid "cannot delete from table \"%s\" because it does not have a replica identity and publishes deletes" msgstr "ne peut pas supprimer à partir de la table « %s » car elle n'a pas d'identité de réplicat et publie des suppressions" -#: executor/execReplication.c:580 +#: executor/execReplication.c:598 #, c-format msgid "To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "Pour permettre les suppressions sur la table, configurez REPLICA IDENTITY en utilisant ALTER TABLE." -#: executor/execReplication.c:600 executor/execReplication.c:607 executor/execReplication.c:615 +#: executor/execReplication.c:617 executor/execReplication.c:625 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "ne peut pas utiliser la relation « %s.%s » comme cible d'une réplication logique" -#: executor/execReplication.c:602 -#, c-format -msgid "\"%s.%s\" is a partitioned table." -msgstr "« %s.%s » est une table partitionnée." - -#: executor/execReplication.c:609 +#: executor/execReplication.c:619 #, c-format msgid "\"%s.%s\" is a foreign table." msgstr "« %s.%s » est une table distante." -#: executor/execReplication.c:617 +#: executor/execReplication.c:627 #, c-format msgid "\"%s.%s\" is not a table." msgstr "« %s.%s » n'est pas une table." -#: executor/execSRF.c:310 +#: executor/execSRF.c:315 #, c-format msgid "rows returned by function are not all of the same row type" msgstr "les lignes renvoyées par la fonction ne sont pas toutes du même type ligne" -#: executor/execSRF.c:358 executor/execSRF.c:649 +#: executor/execSRF.c:365 +#, fuzzy, c-format +#| msgid "table-function protocol for materialize mode was not followed" +msgid "table-function protocol for value-per-call mode was not followed" +msgstr "le protocole de la fonction table pour le mode matérialisé n'a pas été respecté" + +#: executor/execSRF.c:373 executor/execSRF.c:667 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "le protocole de la fonction table pour le mode matérialisé n'a pas été respecté" -#: executor/execSRF.c:365 executor/execSRF.c:667 +#: executor/execSRF.c:380 executor/execSRF.c:685 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "returnMode de la fonction table non reconnu : %d" -#: executor/execSRF.c:876 +#: executor/execSRF.c:894 #, c-format msgid "function returning setof record called in context that cannot accept type record" msgstr "" "la fonction renvoyant des lignes a été appelée dans un contexte qui\n" "n'accepte pas un ensemble" -#: executor/execSRF.c:932 executor/execSRF.c:948 executor/execSRF.c:958 +#: executor/execSRF.c:950 executor/execSRF.c:966 executor/execSRF.c:976 #, c-format msgid "function return row and query-specified return row do not match" msgstr "la ligne de retour spécifiée par la requête et la ligne de retour de la fonction ne correspondent pas" -#: executor/execSRF.c:933 +#: executor/execSRF.c:951 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." msgstr[0] "La ligne renvoyée contient %d attribut mais la requête en attend %d." msgstr[1] "La ligne renvoyée contient %d attributs mais la requête en attend %d." -#: executor/execSRF.c:949 +#: executor/execSRF.c:967 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "A renvoyé le type %s à la position ordinale %d, mais la requête attend %s." -#: executor/execUtils.c:710 +#: executor/execTuples.c:146 executor/execTuples.c:353 executor/execTuples.c:521 executor/execTuples.c:712 +#, c-format +msgid "cannot retrieve a system column in this context" +msgstr "ne peut pas récupérer une colonne système dans ce contexte" + +#: executor/execUtils.c:736 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "la vue matérialisée « %s » n'a pas été peuplée" -#: executor/execUtils.c:712 +#: executor/execUtils.c:738 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "Utilisez la commande REFRESH MATERIALIZED VIEW." -#: executor/functions.c:225 +#: executor/functions.c:217 #, c-format msgid "could not determine actual type of argument declared %s" msgstr "n'a pas pu déterminer le type actuel de l'argument déclaré %s" -#: executor/functions.c:521 +#: executor/functions.c:515 #, c-format msgid "cannot COPY to/from client in a SQL function" msgstr "ne peut pas utiliser COPY TO/FROM dans une fonction SQL" #. translator: %s is a SQL statement name -#: executor/functions.c:527 +#: executor/functions.c:521 #, c-format msgid "%s is not allowed in a SQL function" msgstr "%s n'est pas autorisé dans une fonction SQL" #. translator: %s is a SQL statement name -#: executor/functions.c:535 executor/spi.c:1474 executor/spi.c:2262 +#: executor/functions.c:529 executor/spi.c:1634 executor/spi.c:2460 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s n'est pas autorisé dans une fonction non volatile" -#: executor/functions.c:656 -#, c-format -msgid "could not determine actual result type for function declared to return type %s" -msgstr "" -"n'a pas pu déterminer le type du résultat actuel pour la fonction déclarant\n" -"renvoyer le type %s" - -#: executor/functions.c:1407 +#: executor/functions.c:1442 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "fonction SQL « %s », instruction %d" -#: executor/functions.c:1433 +#: executor/functions.c:1468 #, c-format msgid "SQL function \"%s\" during startup" msgstr "fonction SQL « %s » lors du lancement" -#: executor/functions.c:1526 +#: executor/functions.c:1571 #, c-format msgid "calling procedures with output arguments is not supported in SQL functions" msgstr "l'appel à des procédures avec des arguments en sortie n'est pas supporté dans les fonctions SQL" -#: executor/functions.c:1646 executor/functions.c:1679 executor/functions.c:1691 executor/functions.c:1826 executor/functions.c:1859 executor/functions.c:1889 +#: executor/functions.c:1705 executor/functions.c:1743 executor/functions.c:1757 executor/functions.c:1847 executor/functions.c:1880 executor/functions.c:1894 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "le type de retour ne correspond pas à la fonction déclarant renvoyer %s" -#: executor/functions.c:1648 +#: executor/functions.c:1707 #, c-format msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." msgstr "" "L'instruction finale de la fonction doit être un SELECT ou un\n" "INSERT/UPDATE/DELETE RETURNING." -#: executor/functions.c:1681 +#: executor/functions.c:1745 #, c-format msgid "Final statement must return exactly one column." msgstr "L'instruction finale doit renvoyer exactement une colonne." -#: executor/functions.c:1693 +#: executor/functions.c:1759 #, c-format msgid "Actual return type is %s." msgstr "Le code de retour réel est %s." -#: executor/functions.c:1828 +#: executor/functions.c:1849 #, c-format msgid "Final statement returns too many columns." msgstr "L'instruction finale renvoie beaucoup trop de colonnes." -#: executor/functions.c:1861 +#: executor/functions.c:1882 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "L'instruction finale renvoie %s au lieu de %s pour la colonne %d." -#: executor/functions.c:1891 +#: executor/functions.c:1896 #, c-format msgid "Final statement returns too few columns." msgstr "L'instruction finale renvoie trop peu de colonnes." -#: executor/functions.c:1945 +#: executor/functions.c:1924 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "le type de retour %s n'est pas supporté pour les fonctions SQL" -#: executor/nodeAgg.c:2855 parser/parse_agg.c:655 parser/parse_agg.c:685 +#: executor/nodeAgg.c:3082 executor/nodeAgg.c:3091 executor/nodeAgg.c:3103 +#, c-format +msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" +msgstr "fin de fichier inattendu pour la cassette %d : attendait %zu octets, a lu %zu octets" + +#: executor/nodeAgg.c:3976 parser/parse_agg.c:666 parser/parse_agg.c:696 #, c-format msgid "aggregate function calls cannot be nested" msgstr "les appels à la fonction d'agrégat ne peuvent pas être imbriqués" -#: executor/nodeAgg.c:3060 executor/nodeWindowAgg.c:2835 +#: executor/nodeAgg.c:4184 executor/nodeWindowAgg.c:2836 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "l'agrégat %u a besoin d'avoir des types compatibles en entrée et en transition" -#: executor/nodeCustom.c:146 executor/nodeCustom.c:157 +#: executor/nodeCustom.c:145 executor/nodeCustom.c:156 #, c-format msgid "custom scan \"%s\" does not support MarkPos" msgstr "le parcours personnalisé « %s » ne supporte pas MarkPos" -#: executor/nodeHashjoin.c:1027 executor/nodeHashjoin.c:1057 -#, c-format -msgid "could not rewind hash-join temporary file: %m" -msgstr "n'a pas pu revenir au début du fichier temporaire de la jointure hâchée : %m" - -#: executor/nodeHashjoin.c:1216 executor/nodeHashjoin.c:1222 +#: executor/nodeHashjoin.c:1046 executor/nodeHashjoin.c:1076 #, c-format -msgid "could not write to hash-join temporary file: %m" -msgstr "n'a pas pu écrire le fichier temporaire de la jointure hâchée : %m" +msgid "could not rewind hash-join temporary file" +msgstr "n'a pas pu revenir au début du fichier temporaire pour la jointure de hachage" -#: executor/nodeHashjoin.c:1263 executor/nodeHashjoin.c:1273 +#: executor/nodeHashjoin.c:1272 executor/nodeHashjoin.c:1283 #, c-format -msgid "could not read from hash-join temporary file: %m" -msgstr "n'a pas pu lire le fichier temporaire contenant la jointure hâchée : %m" +msgid "could not read from hash-join temporary file: read only %zu of %zu bytes" +msgstr "n'a pas pu lire le fichier temporaire pour la jointure de hachage : a lu seulement %zu octets sur %zu" #: executor/nodeIndexonlyscan.c:242 #, c-format msgid "lossy distance functions are not supported in index-only scans" msgstr "les fonctions de distance à perte ne sont pas supportés dans les parcours d'index seul" -#: executor/nodeLimit.c:264 +#: executor/nodeLimit.c:374 #, c-format msgid "OFFSET must not be negative" msgstr "OFFSET ne doit pas être négatif" -#: executor/nodeLimit.c:290 +#: executor/nodeLimit.c:400 #, c-format msgid "LIMIT must not be negative" msgstr "LIMIT ne doit pas être négative" @@ -11605,44 +12298,32 @@ msgstr "RIGHT JOIN est supporté seulement avec les conditions de jointures MERG msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "FULL JOIN est supporté seulement avec les conditions de jointures MERGE" -#: executor/nodeModifyTable.c:110 -#, c-format -msgid "Query has too many columns." -msgstr "La requête a trop de colonnes." - -#: executor/nodeModifyTable.c:138 -#, c-format -msgid "Query provides a value for a dropped column at ordinal position %d." -msgstr "" -"La requête fournit une valeur pour une colonne supprimée à la position\n" -"ordinale %d." - -#: executor/nodeModifyTable.c:146 +#: executor/nodeModifyTable.c:154 #, c-format msgid "Query has too few columns." msgstr "La requête n'a pas assez de colonnes." -#: executor/nodeModifyTable.c:808 executor/nodeModifyTable.c:882 +#: executor/nodeModifyTable.c:1185 executor/nodeModifyTable.c:1259 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "la ligne à supprimer était déjà modifiée par une opération déclenchée par la commande courante" -#: executor/nodeModifyTable.c:1189 +#: executor/nodeModifyTable.c:1434 #, c-format msgid "invalid ON UPDATE specification" msgstr "spécification ON UPDATE invalide" -#: executor/nodeModifyTable.c:1190 +#: executor/nodeModifyTable.c:1435 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "La ligne résultante apparaîtrait dans une partition différente de la ligne originale." -#: executor/nodeModifyTable.c:1561 +#: executor/nodeModifyTable.c:2025 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "la commande ON CONFLICT DO UPDATE ne peut pas affecter une ligne la deuxième fois" -#: executor/nodeModifyTable.c:1562 +#: executor/nodeModifyTable.c:2026 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "S'assure qu'aucune ligne proposée à l'insertion dans la même commande n'a de valeurs contraintes dupliquées." @@ -11657,118 +12338,129 @@ msgstr "le paramètre de TABLESAMPLE ne peut pas être NULL" msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "le paramètre TABLESAMPLE REPEATABLE ne peut pas être NULL" -#: executor/nodeSubplan.c:347 executor/nodeSubplan.c:386 executor/nodeSubplan.c:1152 +#: executor/nodeSubplan.c:346 executor/nodeSubplan.c:385 executor/nodeSubplan.c:1159 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "plus d'une ligne renvoyée par une sous-requête utilisée comme une expression" -#: executor/nodeTableFuncscan.c:378 +#: executor/nodeTableFuncscan.c:375 #, c-format msgid "namespace URI must not be null" msgstr "l'URI de l'espace de nom ne doit pas être NULL" -#: executor/nodeTableFuncscan.c:392 +#: executor/nodeTableFuncscan.c:389 #, c-format msgid "row filter expression must not be null" msgstr "l'expression de filtre de lignes ne doit pas être NULL" -#: executor/nodeTableFuncscan.c:418 +#: executor/nodeTableFuncscan.c:415 #, c-format msgid "column filter expression must not be null" msgstr "l'expression de filtre de colonnes ne doit pas être NULL" -#: executor/nodeTableFuncscan.c:419 +#: executor/nodeTableFuncscan.c:416 #, c-format msgid "Filter for column \"%s\" is null." msgstr "Le filtre pour la colonne « %s » est NULL." -#: executor/nodeTableFuncscan.c:509 +#: executor/nodeTableFuncscan.c:506 #, c-format msgid "null is not allowed in column \"%s\"" msgstr "NULL n'est pas autorisé dans la colonne « %s »" -#: executor/nodeWindowAgg.c:354 +#: executor/nodeWindowAgg.c:355 #, c-format msgid "moving-aggregate transition function must not return null" msgstr "la fonction de conversion de l'agrégat en déplacement ne doit pas renvoyer null" -#: executor/nodeWindowAgg.c:2057 +#: executor/nodeWindowAgg.c:2058 #, c-format msgid "frame starting offset must not be null" msgstr "l'offset de début de frame ne doit pas être NULL" -#: executor/nodeWindowAgg.c:2070 +#: executor/nodeWindowAgg.c:2071 #, c-format msgid "frame starting offset must not be negative" msgstr "l'offset de début de frame ne doit pas être négatif" -#: executor/nodeWindowAgg.c:2082 +#: executor/nodeWindowAgg.c:2083 #, c-format msgid "frame ending offset must not be null" msgstr "l'offset de fin de frame ne doit pas être NULL" -#: executor/nodeWindowAgg.c:2095 +#: executor/nodeWindowAgg.c:2096 #, c-format msgid "frame ending offset must not be negative" msgstr "l'offset de fin de frame ne doit pas être négatif" -#: executor/nodeWindowAgg.c:2751 +#: executor/nodeWindowAgg.c:2752 #, c-format msgid "aggregate function %s does not support use as a window function" msgstr "la fonction d'agrégat %s ne supporte pas l'utilisation en tant que fonction de fenêtrage" -#: executor/spi.c:228 executor/spi.c:297 +#: executor/spi.c:237 executor/spi.c:306 #, c-format msgid "invalid transaction termination" msgstr "arrêt de transaction invalide" -#: executor/spi.c:242 +#: executor/spi.c:251 #, c-format msgid "cannot commit while a subtransaction is active" msgstr "ne peut pas valider la transaction pendant qu'une sous-transaction est active" -#: executor/spi.c:303 +#: executor/spi.c:312 #, c-format msgid "cannot roll back while a subtransaction is active" msgstr "ne peut pas annuler la transaction pendant qu'une sous-transaction est active" -#: executor/spi.c:372 +#: executor/spi.c:381 #, c-format msgid "transaction left non-empty SPI stack" msgstr "transaction gauche non vide dans la pile SPI" -#: executor/spi.c:373 executor/spi.c:435 +#: executor/spi.c:382 executor/spi.c:444 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "Vérifiez les appels manquants à « SPI_finish »." -#: executor/spi.c:434 +#: executor/spi.c:443 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "sous-transaction gauche non vide dans la pile SPI" -#: executor/spi.c:1335 +#: executor/spi.c:1496 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "ne peut pas ouvrir le plan à plusieurs requêtes comme curseur" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1340 +#: executor/spi.c:1501 #, c-format msgid "cannot open %s query as cursor" msgstr "ne peut pas ouvrir la requête %s comme curseur" -#: executor/spi.c:1445 +#: executor/spi.c:1608 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE n'est pas supporté" -#: executor/spi.c:1446 parser/analyze.c:2493 +#: executor/spi.c:1609 parser/analyze.c:2806 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Les curseurs déplaçables doivent être en lecture seule (READ ONLY)." -#: executor/spi.c:2570 +#: executor/spi.c:2784 +#, c-format +msgid "SQL expression \"%s\"" +msgstr "expression SQL « %s »" + +#: executor/spi.c:2789 +#, fuzzy, c-format +#| msgid "SQL statement \"%s\"" +msgid "PL/pgSQL assignment \"%s\"" +msgstr "instruction SQL « %s »" + +#: executor/spi.c:2792 #, c-format msgid "SQL statement \"%s\"" msgstr "instruction SQL « %s »" @@ -11793,1243 +12485,1235 @@ msgstr "option « %s » invalide" msgid "Valid options in this context are: %s" msgstr "Les options valides dans ce contexte sont %s" -#: gram.y:1030 +#: gram.y:1106 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "UNENCRYPTED PASSWORD n'est plus supporté" -#: gram.y:1031 +#: gram.y:1107 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "Supprimez UNENCRYPTED pour enregistrer le mot de passe dans sa forme chiffrée à la place." -#: gram.y:1093 +#: gram.y:1169 #, c-format msgid "unrecognized role option \"%s\"" msgstr "option « %s » du rôle non reconnue" -#: gram.y:1340 gram.y:1355 +#: gram.y:1416 gram.y:1431 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTS n'inclut pas les éléments du schéma" -#: gram.y:1501 +#: gram.y:1577 #, c-format msgid "current database cannot be changed" msgstr "la base de données actuelle ne peut pas être changée" -#: gram.y:1625 +#: gram.y:1701 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "l'intervalle de fuseau horaire doit être HOUR ou HOUR TO MINUTE" -#: gram.y:2143 +#: gram.y:2269 #, c-format msgid "column number must be in range from 1 to %d" msgstr "le numéro de colonne doit être dans l'intervalle entre 1 et %d" -#: gram.y:2675 +#: gram.y:2818 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "option de séquence « %s » non supportée ici" -#: gram.y:2704 +#: gram.y:2847 #, c-format msgid "modulus for hash partition provided more than once" msgstr "le modulus pour la partition hash est spécifié plus d'une fois" -#: gram.y:2713 +#: gram.y:2856 #, c-format msgid "remainder for hash partition provided more than once" msgstr "le reste pour la partition hash est spécifié plus d'une fois" -#: gram.y:2720 +#: gram.y:2863 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "spécification de limite de partition hash non reconnue « %s »" -#: gram.y:2728 +#: gram.y:2871 #, c-format msgid "modulus for hash partition must be specified" msgstr "le modulus pour les partition hash doit être spécifié" -#: gram.y:2732 +#: gram.y:2875 #, c-format msgid "remainder for hash partition must be specified" msgstr "le reste pour les partition hash doit être spécifié" -#: gram.y:2933 gram.y:2966 +#: gram.y:3076 gram.y:3109 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUT non autorisé dans PROGRAM" -#: gram.y:2939 +#: gram.y:3082 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "la clause WHERE n'est pas autorisée avec COPY TO" -#: gram.y:3271 gram.y:3278 gram.y:11480 gram.y:11488 +#: gram.y:3414 gram.y:3421 gram.y:11679 gram.y:11687 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "GLOBAL est obsolète dans la création de la table temporaire" -#: gram.y:3518 +#: gram.y:3670 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "pour une colonne générée, GENERATED ALWAYS doit toujours être spécifié" -#: gram.y:3784 utils/adt/ri_triggers.c:1999 +#: gram.y:3938 utils/adt/ri_triggers.c:2032 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL non implémenté" -#: gram.y:5274 +#: gram.y:4639 +#, c-format +msgid "CREATE EXTENSION ... FROM is no longer supported" +msgstr "CREATE EXTENSION ... FROM n'est plus supporté" + +#: gram.y:5302 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "option « %s » de sécurité de ligne non reconnue" -#: gram.y:5275 +#: gram.y:5303 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "Seules les politiques PERMISSIVE et RESTRICTIVE sont supportées actuellement." -#: gram.y:5388 +#: gram.y:5385 +#, c-format +msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" +msgstr "CREATE OR REPLACE CONSTRAINT TRIGGER n'est pas supporté" + +#: gram.y:5422 msgid "duplicate trigger events specified" msgstr "événements de trigger dupliqués spécifiés" -#: gram.y:5529 parser/parse_utilcmd.c:3435 parser/parse_utilcmd.c:3461 +#: gram.y:5563 parser/parse_utilcmd.c:3732 parser/parse_utilcmd.c:3758 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "la contrainte déclarée INITIALLY DEFERRED doit être DEFERRABLE" -#: gram.y:5536 +#: gram.y:5570 #, c-format msgid "conflicting constraint properties" msgstr "propriétés de contrainte en conflit" -#: gram.y:5632 +#: gram.y:5666 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION n'est pas encore implémenté" -#: gram.y:6015 +#: gram.y:6049 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK n'est plus nécessaire" -#: gram.y:6016 +#: gram.y:6050 #, c-format msgid "Update your data type." msgstr "Mettez à jour votre type de données." -#: gram.y:7753 +#: gram.y:7775 #, c-format msgid "aggregates cannot have output arguments" msgstr "les agrégats ne peuvent pas avoir d'arguments en sortie" -#: gram.y:8145 utils/adt/regproc.c:691 utils/adt/regproc.c:732 +#: gram.y:8217 utils/adt/regproc.c:709 utils/adt/regproc.c:750 #, c-format msgid "missing argument" msgstr "argument manquant" -#: gram.y:8146 utils/adt/regproc.c:692 utils/adt/regproc.c:733 +#: gram.y:8218 utils/adt/regproc.c:710 utils/adt/regproc.c:751 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Utilisez NONE pour dénoter l'argument manquant d'un opérateur unitaire." -#: gram.y:10025 gram.y:10043 +#: gram.y:10157 gram.y:10175 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION non supporté sur les vues récursives" -#: gram.y:11588 +#: gram.y:11816 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "la syntaxe LIMIT #,# n'est pas supportée" -#: gram.y:11589 +#: gram.y:11817 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Utilisez les clauses séparées LIMIT et OFFSET." -#: gram.y:11887 gram.y:11912 +#: gram.y:12155 gram.y:12180 #, c-format msgid "VALUES in FROM must have an alias" msgstr "VALUES dans FROM doit avoir un alias" -#: gram.y:11888 gram.y:11913 +#: gram.y:12156 gram.y:12181 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "Par exemple, FROM (VALUES ...) [AS] quelquechose." -#: gram.y:11893 gram.y:11918 +#: gram.y:12161 gram.y:12186 #, c-format msgid "subquery in FROM must have an alias" msgstr "la sous-requête du FROM doit avoir un alias" -#: gram.y:11894 gram.y:11919 +#: gram.y:12162 gram.y:12187 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "Par exemple, FROM (SELECT...) [AS] quelquechose." -#: gram.y:12372 +#: gram.y:12682 #, c-format msgid "only one DEFAULT value is allowed" msgstr "seule une valeur DEFAULT est autorisée" -#: gram.y:12381 +#: gram.y:12691 #, c-format msgid "only one PATH value per column is allowed" msgstr "seule une valeur PATH par colonne est autorisée" -#: gram.y:12390 +#: gram.y:12700 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "déclarations NULL/NOT NULL en conflit ou redondantes pour la colonne « %s »" -#: gram.y:12399 +#: gram.y:12709 #, c-format msgid "unrecognized column option \"%s\"" msgstr "option de colonne « %s » non reconnue" -#: gram.y:12653 +#: gram.y:12963 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "la précision du type float doit être d'au moins un bit" -#: gram.y:12662 +#: gram.y:12972 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "la précision du type float doit être inférieur à 54 bits" -#: gram.y:13153 +#: gram.y:13470 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "mauvais nombre de paramètres sur le côté gauche de l'expression OVERLAPS" -#: gram.y:13158 +#: gram.y:13475 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "mauvais nombre de paramètres sur le côté droit de l'expression OVERLAPS" -#: gram.y:13333 +#: gram.y:13643 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "prédicat UNIQUE non implémenté" -#: gram.y:13680 +#: gram.y:14002 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "ne peut pas utiliser des clauses ORDER BY multiples dans WITHIN GROUP" -#: gram.y:13685 +#: gram.y:14007 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "ne peut pas utiliser DISTINCT avec WITHIN GROUP" -#: gram.y:13690 +#: gram.y:14012 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "ne peut pas utiliser VARIADIC avec WITHIN GROUP" -#: gram.y:14148 gram.y:14171 +#: gram.y:14536 gram.y:14559 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "la fin du frame ne peut pas être UNBOUNDED FOLLOWING" -#: gram.y:14153 +#: gram.y:14541 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "la frame commençant après la ligne suivante ne peut pas se terminer avec la ligne actuelle" -#: gram.y:14176 +#: gram.y:14564 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "la fin du frame ne peut pas être UNBOUNDED PRECEDING" -#: gram.y:14182 +#: gram.y:14570 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "la frame commençant à la ligne courante ne peut pas avoir des lignes précédentes" -#: gram.y:14189 +#: gram.y:14577 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "la frame commençant à la ligne suivante ne peut pas avoir des lignes précédentes" -#: gram.y:14832 +#: gram.y:15209 #, c-format msgid "type modifier cannot have parameter name" msgstr "le modificateur de type ne peut pas avoir de nom de paramètre" -#: gram.y:14838 +#: gram.y:15215 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "le modificateur de type ne peut pas avoir de clause ORDER BY" -#: gram.y:14903 gram.y:14910 +#: gram.y:15280 gram.y:15287 gram.y:15294 #, c-format msgid "%s cannot be used as a role name here" msgstr "%s ne peut pas être utilisé comme nom de rôle ici" -#: gram.y:15583 gram.y:15772 +#: gram.y:15383 gram.y:16815 +#, c-format +msgid "WITH TIES cannot be specified without ORDER BY clause" +msgstr "WITH TIES ne peut pas être indiqué sans clause ORDER BY" + +#: gram.y:16491 gram.y:16680 msgid "improper use of \"*\"" msgstr "mauvaise utilisation de « * »" -#: gram.y:15735 gram.y:15752 tsearch/spell.c:954 tsearch/spell.c:971 tsearch/spell.c:988 tsearch/spell.c:1005 tsearch/spell.c:1070 +#: gram.y:16643 gram.y:16660 tsearch/spell.c:982 tsearch/spell.c:999 tsearch/spell.c:1016 tsearch/spell.c:1033 tsearch/spell.c:1098 #, c-format msgid "syntax error" msgstr "erreur de syntaxe" -#: gram.y:15836 +#: gram.y:16745 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "un agrégat par ensemble ordonné avec un argument VARIADIC direct doit avoir un argument VARIADIC agrégé du même type de données" -#: gram.y:15873 +#: gram.y:16782 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "clauses ORDER BY multiples non autorisées" -#: gram.y:15884 +#: gram.y:16793 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "clauses OFFSET multiples non autorisées" -#: gram.y:15893 +#: gram.y:16802 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "clauses LIMIT multiples non autorisées" -#: gram.y:15902 +#: gram.y:16811 +#, c-format +msgid "multiple limit options not allowed" +msgstr "options limite multiples non autorisées" + +#: gram.y:16823 #, c-format msgid "multiple WITH clauses not allowed" msgstr "clauses WITH multiples non autorisées" -#: gram.y:16106 +#: gram.y:17015 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "les arguments OUT et INOUT ne sont pas autorisés dans des fonctions TABLE" -#: gram.y:16207 +#: gram.y:17111 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "clauses COLLATE multiples non autorisées" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16245 gram.y:16258 +#: gram.y:17149 gram.y:17162 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "les contraintes %s ne peuvent pas être marquées comme DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16271 +#: gram.y:17175 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "les contraintes %s ne peuvent pas être marquées comme NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16284 +#: gram.y:17188 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "les contraintes %s ne peuvent pas être marquées NO INHERIT" -#: guc-file.l:316 +#: guc-file.l:314 #, c-format -msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %u" -msgstr "paramètre de configuration « %s » non reconnu dans le fichier « %s », ligne %u" +msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" +msgstr "paramètre de configuration « %s » non reconnu dans le fichier « %s », ligne %d" -#: guc-file.l:353 utils/misc/guc.c:6809 utils/misc/guc.c:7003 utils/misc/guc.c:7093 utils/misc/guc.c:7183 utils/misc/guc.c:7291 utils/misc/guc.c:7386 +#: guc-file.l:351 utils/misc/guc.c:7394 utils/misc/guc.c:7592 utils/misc/guc.c:7686 utils/misc/guc.c:7780 utils/misc/guc.c:7900 utils/misc/guc.c:7999 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "le paramètre « %s » ne peut pas être modifié sans redémarrer le serveur" -#: guc-file.l:389 +#: guc-file.l:387 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "" "paramètre « %s » supprimé du fichier de configuration ;\n" "réinitialisation à la valeur par défaut" -#: guc-file.l:455 +#: guc-file.l:453 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "paramètre « %s » modifié par « %s »" -#: guc-file.l:497 +#: guc-file.l:495 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "le fichier de configuration « %s » contient des erreurs" -#: guc-file.l:502 +#: guc-file.l:500 #, c-format msgid "configuration file \"%s\" contains errors; unaffected changes were applied" msgstr "le fichier de configuration « %s » contient des erreurs ; les modifications non affectées ont été appliquées" -#: guc-file.l:507 +#: guc-file.l:505 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "le fichier de configuration « %s » contient des erreurs ; aucune modification n'a été appliquée" -#: guc-file.l:579 +#: guc-file.l:577 #, c-format msgid "empty configuration file name: \"%s\"" msgstr "nom de fichier de configuration vide : « %s »" -#: guc-file.l:596 +#: guc-file.l:594 #, c-format msgid "could not open configuration file \"%s\": maximum nesting depth exceeded" msgstr "" "n'a pas pu ouvrir le fichier de configuration « %s » : profondeur\n" "d'imbrication dépassé" -#: guc-file.l:616 +#: guc-file.l:614 #, c-format msgid "configuration file recursion in \"%s\"" msgstr "le fichier de configuration « %s » contient une récursion" -#: guc-file.l:632 libpq/hba.c:2199 libpq/hba.c:2613 +#: guc-file.l:630 libpq/hba.c:2245 libpq/hba.c:2659 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier de configuration « %s » : %m" -#: guc-file.l:643 +#: guc-file.l:641 #, c-format msgid "skipping missing configuration file \"%s\"" msgstr "ignore le fichier de configuration « %s » manquant" -#: guc-file.l:897 +#: guc-file.l:895 #, c-format msgid "syntax error in file \"%s\" line %u, near end of line" msgstr "erreur de syntaxe dans le fichier « %s », ligne %u, près de la fin de ligne" -#: guc-file.l:907 +#: guc-file.l:905 #, c-format msgid "syntax error in file \"%s\" line %u, near token \"%s\"" msgstr "erreur de syntaxe dans le fichier « %s », ligne %u, près du mot clé « %s »" -#: guc-file.l:927 +#: guc-file.l:925 #, c-format msgid "too many syntax errors found, abandoning file \"%s\"" msgstr "trop d'erreurs de syntaxe trouvées, abandon du fichier « %s »" -#: guc-file.l:982 +#: guc-file.l:980 #, c-format msgid "empty configuration directory name: \"%s\"" msgstr "nom de répertoire de configuration vide : « %s »" -#: guc-file.l:1001 +#: guc-file.l:999 #, c-format msgid "could not open configuration directory \"%s\": %m" msgstr "n'a pas pu ouvrir le répertoire de configuration « %s » : %m" -#: jit/jit.c:208 utils/fmgr/dfmgr.c:209 utils/fmgr/dfmgr.c:426 utils/fmgr/dfmgr.c:474 +#: jit/jit.c:205 utils/fmgr/dfmgr.c:209 utils/fmgr/dfmgr.c:417 utils/fmgr/dfmgr.c:465 #, c-format msgid "could not access file \"%s\": %m" msgstr "n'a pas pu accéder au fichier « %s » : %m" -#: jit/llvm/llvmjit.c:601 -#, c-format -msgid "time to inline: %.3fs, opt: %.3fs, emit: %.3fs" -msgstr "temps pour inliner: %.3fs, opt: %.3fs, emit: %.3fs" - -#: jsonpath_gram.y:514 jsonpath_scan.l:526 jsonpath_scan.l:542 jsonpath_scan.l:553 jsonpath_scan.l:563 jsonpath_scan.l:605 utils/adt/encode.c:442 utils/adt/encode.c:507 utils/adt/json.c:786 utils/adt/json.c:826 utils/adt/json.c:842 utils/adt/json.c:854 utils/adt/json.c:864 utils/adt/json.c:915 utils/adt/json.c:947 utils/adt/json.c:966 utils/adt/json.c:978 utils/adt/json.c:990 utils/adt/json.c:1135 utils/adt/json.c:1149 utils/adt/json.c:1160 -#: utils/adt/json.c:1168 utils/adt/json.c:1176 utils/adt/json.c:1184 utils/adt/json.c:1192 utils/adt/json.c:1200 utils/adt/json.c:1208 utils/adt/json.c:1216 utils/adt/json.c:1246 utils/adt/varlena.c:318 utils/adt/varlena.c:359 +#: jsonpath_gram.y:528 jsonpath_scan.l:519 jsonpath_scan.l:530 jsonpath_scan.l:540 jsonpath_scan.l:582 utils/adt/encode.c:435 utils/adt/encode.c:501 utils/adt/jsonfuncs.c:623 utils/adt/varlena.c:339 utils/adt/varlena.c:380 #, c-format msgid "invalid input syntax for type %s" msgstr "syntaxe en entrée invalide pour le type %s" -#: jsonpath_gram.y:515 -#, c-format -msgid "unrecognized flag character \"%c\" in LIKE_REGEX predicate" +#: jsonpath_gram.y:529 +#, fuzzy, c-format +#| msgid "unrecognized flag character \"%c\" in LIKE_REGEX predicate" +msgid "unrecognized flag character \"%.*s\" in LIKE_REGEX predicate" msgstr "caractère d'état « %c » non reconnu dans un prédicat LIKE_REGEX" -#: jsonpath_gram.y:569 +#: jsonpath_gram.y:583 #, c-format msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" msgstr "le flag XQuery « x » (expression régulière étendue) n'est pas implémenté" #. translator: %s is typically "syntax error" -#: jsonpath_scan.l:283 +#: jsonpath_scan.l:286 #, c-format msgid "%s at end of jsonpath input" msgstr "%s à la fin de l'entrée jsonpath" #. translator: first %s is typically "syntax error" -#: jsonpath_scan.l:290 +#: jsonpath_scan.l:293 #, c-format msgid "%s at or near \"%s\" of jsonpath input" msgstr "%s sur ou près de « %s » de l'entrée jsonpath" -#: jsonpath_scan.l:501 utils/adt/json.c:880 utils/adt/json.c:903 +#: jsonpath_scan.l:498 utils/adt/jsonfuncs.c:617 #, c-format msgid "unsupported Unicode escape sequence" msgstr "séquence d'échappement Unicode non supportée" -#: jsonpath_scan.l:502 utils/adt/json.c:881 -#, c-format -msgid "\\u0000 cannot be converted to text." -msgstr "\\u0000 ne peut pas être converti en texte." - -#: jsonpath_scan.l:527 utils/adt/json.c:904 -#, c-format -msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8." -msgstr "" -"Les valeurs d'échappement unicode ne peuvent pas être utilisées pour les valeurs de point de code\n" -"au-dessus de 007F quand l'encodage serveur n'est pas UTF8." - -#: jsonpath_scan.l:543 utils/adt/json.c:844 -#, c-format -msgid "Unicode high surrogate must not follow a high surrogate." -msgstr "Une substitution unicode haute ne doit pas suivre une substitution haute." - -#: jsonpath_scan.l:554 jsonpath_scan.l:564 jsonpath_scan.l:606 utils/adt/json.c:855 utils/adt/json.c:865 utils/adt/json.c:917 utils/adt/json.c:979 utils/adt/json.c:991 -#, c-format -msgid "Unicode low surrogate must follow a high surrogate." -msgstr "Une substitution unicode basse ne doit pas suivre une substitution haute." - #: lib/dshash.c:247 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 #, c-format msgid "Failed on DSA request of size %zu." msgstr "Échec d'une requête DSA de taille %zu." -#: lib/stringinfo.c:284 -#, c-format -msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." -msgstr "Ne peut pas agrandir le tampon de chaîne, qui contient %d octets, de %d octets." - -#: libpq/auth-scram.c:248 +#: libpq/auth-scram.c:249 #, c-format msgid "client selected an invalid SASL authentication mechanism" msgstr "le client a sélectionné un mécanisme d'authentification SASL invalide" -#: libpq/auth-scram.c:269 libpq/auth-scram.c:509 libpq/auth-scram.c:518 +#: libpq/auth-scram.c:270 libpq/auth-scram.c:510 libpq/auth-scram.c:521 #, c-format -msgid "invalid SCRAM verifier for user \"%s\"" -msgstr "vérificateur SCRAM invalide pour l'utilisateur « %s »" +msgid "invalid SCRAM secret for user \"%s\"" +msgstr "secret SCRAM invalide pour l'utilisateur « %s »" -#: libpq/auth-scram.c:280 +#: libpq/auth-scram.c:281 #, c-format -msgid "User \"%s\" does not have a valid SCRAM verifier." -msgstr "L'utilisateur « %s » n'a pas de vérificateur SCRAM valide." +msgid "User \"%s\" does not have a valid SCRAM secret." +msgstr "L'utilisateur « %s » n'a pas de secret SCRAM valide." -#: libpq/auth-scram.c:358 libpq/auth-scram.c:363 libpq/auth-scram.c:676 libpq/auth-scram.c:684 libpq/auth-scram.c:795 libpq/auth-scram.c:805 libpq/auth-scram.c:913 libpq/auth-scram.c:920 libpq/auth-scram.c:935 libpq/auth-scram.c:950 libpq/auth-scram.c:964 libpq/auth-scram.c:982 libpq/auth-scram.c:997 libpq/auth-scram.c:1283 libpq/auth-scram.c:1291 +#: libpq/auth-scram.c:359 libpq/auth-scram.c:364 libpq/auth-scram.c:701 libpq/auth-scram.c:709 libpq/auth-scram.c:814 libpq/auth-scram.c:827 libpq/auth-scram.c:837 libpq/auth-scram.c:945 libpq/auth-scram.c:952 libpq/auth-scram.c:967 libpq/auth-scram.c:982 libpq/auth-scram.c:996 libpq/auth-scram.c:1014 libpq/auth-scram.c:1029 libpq/auth-scram.c:1340 libpq/auth-scram.c:1348 #, c-format msgid "malformed SCRAM message" msgstr "message SCRAM malformé" -#: libpq/auth-scram.c:359 +#: libpq/auth-scram.c:360 #, c-format msgid "The message is empty." msgstr "Le message est vide." -#: libpq/auth-scram.c:364 +#: libpq/auth-scram.c:365 #, c-format msgid "Message length does not match input length." msgstr "La longueur du message ne correspond pas à la longueur en entrée." -#: libpq/auth-scram.c:396 +#: libpq/auth-scram.c:397 #, c-format msgid "invalid SCRAM response" msgstr "réponse SCRAM invalide" -#: libpq/auth-scram.c:397 +#: libpq/auth-scram.c:398 #, c-format msgid "Nonce does not match." msgstr "Le nonce ne correspond pas." -#: libpq/auth-scram.c:471 +#: libpq/auth-scram.c:472 #, c-format msgid "could not generate random salt" msgstr "n'a pas pu générer le sel aléatoire" -#: libpq/auth-scram.c:677 +#: libpq/auth-scram.c:702 #, c-format msgid "Expected attribute \"%c\" but found \"%s\"." msgstr "Attribut attendu « %c », mais « %s » trouvé." -#: libpq/auth-scram.c:685 libpq/auth-scram.c:806 +#: libpq/auth-scram.c:710 libpq/auth-scram.c:838 #, c-format msgid "Expected character \"=\" for attribute \"%c\"." msgstr "Caractère « = » attendu pour l'attribut « %c »." -#: libpq/auth-scram.c:796 +#: libpq/auth-scram.c:815 +#, c-format +msgid "Attribute expected, but found end of string." +msgstr "Attribut attendu, mais a trouvé une fin de chaîne." + +#: libpq/auth-scram.c:828 #, c-format msgid "Attribute expected, but found invalid character \"%s\"." msgstr "Attribut attendu, mais a trouvé le caractère invalide « %s »." -#: libpq/auth-scram.c:914 libpq/auth-scram.c:936 +#: libpq/auth-scram.c:946 libpq/auth-scram.c:968 #, c-format msgid "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not include channel binding data." msgstr "Le client a sélectionné SCRAM-SHA-256-PLUS, mais le message SCRAM n'inclut pas de données de channel-binding." -#: libpq/auth-scram.c:921 libpq/auth-scram.c:951 +#: libpq/auth-scram.c:953 libpq/auth-scram.c:983 #, c-format msgid "Comma expected, but found character \"%s\"." msgstr "Virgule attendue, mais caractère « %s » trouvé." -#: libpq/auth-scram.c:942 +#: libpq/auth-scram.c:974 #, c-format msgid "SCRAM channel binding negotiation error" msgstr "Erreur de négociation de channel-binding SCRAM" -#: libpq/auth-scram.c:943 +#: libpq/auth-scram.c:975 #, c-format msgid "The client supports SCRAM channel binding but thinks the server does not. However, this server does support channel binding." msgstr "Le client supporte le channel binding SCRAM mais pense que le serveur ne le supporte pas. Cependant, ce serveur supporte vraiment le channel-binding." -#: libpq/auth-scram.c:965 +#: libpq/auth-scram.c:997 #, c-format msgid "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM message includes channel binding data." msgstr "Le client a sélectionné SCRAM-SHA-256 sans channel binding, mais le message SCRAM inclue des données de channel-binding." -#: libpq/auth-scram.c:976 +#: libpq/auth-scram.c:1008 #, c-format msgid "unsupported SCRAM channel-binding type \"%s\"" msgstr "type de channel-binding SCRAM « %s » non supporté" -#: libpq/auth-scram.c:983 +#: libpq/auth-scram.c:1015 #, c-format msgid "Unexpected channel-binding flag \"%s\"." msgstr "Drapeau du channel-binding inattendu « %s »." -#: libpq/auth-scram.c:993 +#: libpq/auth-scram.c:1025 #, c-format msgid "client uses authorization identity, but it is not supported" msgstr "le client utilise une identité d'autorisation, mais elle n'est pas supportée" -#: libpq/auth-scram.c:998 +#: libpq/auth-scram.c:1030 #, c-format msgid "Unexpected attribute \"%s\" in client-first-message." msgstr "Attribut « %s » inattendu dans client-first-message." -#: libpq/auth-scram.c:1014 +#: libpq/auth-scram.c:1046 #, c-format msgid "client requires an unsupported SCRAM extension" msgstr "le client requiert une extension SCRAM non supportée" -#: libpq/auth-scram.c:1028 +#: libpq/auth-scram.c:1060 #, c-format msgid "non-printable characters in SCRAM nonce" msgstr "caractères non affichables dans le nonce SCRAM" -#: libpq/auth-scram.c:1145 +#: libpq/auth-scram.c:1188 #, c-format msgid "could not generate random nonce" msgstr "n'a pas pu générer le nonce aléatoire" -#: libpq/auth-scram.c:1249 +#: libpq/auth-scram.c:1198 +#, c-format +msgid "could not encode random nonce" +msgstr "n'a pas pu chiffrer le nonce aléatoire" + +#: libpq/auth-scram.c:1304 #, c-format msgid "SCRAM channel binding check failed" msgstr "la vérification du channel-binding SCRAM a échoué" -#: libpq/auth-scram.c:1267 +#: libpq/auth-scram.c:1322 #, c-format msgid "unexpected SCRAM channel-binding attribute in client-final-message" msgstr "attribut du lien de canal SCRAM inattendu dans client-final-message" -#: libpq/auth-scram.c:1284 +#: libpq/auth-scram.c:1341 #, c-format msgid "Malformed proof in client-final-message." msgstr "Preuve malformée dans le client-final-message." -#: libpq/auth-scram.c:1292 +#: libpq/auth-scram.c:1349 #, c-format msgid "Garbage found at the end of client-final-message." msgstr "Problème trouvé à la fin de client-final-message." -#: libpq/auth.c:278 +#: libpq/auth.c:284 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "authentification échouée pour l'utilisateur « %s » : hôte rejeté" -#: libpq/auth.c:281 +#: libpq/auth.c:287 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "authentification « trust » échouée pour l'utilisateur « %s »" -#: libpq/auth.c:284 +#: libpq/auth.c:290 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "Échec de l'authentification Ident pour l'utilisateur « %s »" -#: libpq/auth.c:287 +#: libpq/auth.c:293 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "authentification peer échouée pour l'utilisateur « %s »" -#: libpq/auth.c:292 +#: libpq/auth.c:298 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "authentification par mot de passe échouée pour l'utilisateur « %s »" -#: libpq/auth.c:297 +#: libpq/auth.c:303 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "authentification GSSAPI échouée pour l'utilisateur « %s »" -#: libpq/auth.c:300 +#: libpq/auth.c:306 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "authentification SSPI échouée pour l'utilisateur « %s »" -#: libpq/auth.c:303 +#: libpq/auth.c:309 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "authentification PAM échouée pour l'utilisateur « %s »" -#: libpq/auth.c:306 +#: libpq/auth.c:312 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "authentification BSD échouée pour l'utilisateur « %s »" -#: libpq/auth.c:309 +#: libpq/auth.c:315 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "authentification LDAP échouée pour l'utilisateur « %s »" -#: libpq/auth.c:312 +#: libpq/auth.c:318 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "authentification par le certificat échouée pour l'utilisateur « %s »" -#: libpq/auth.c:315 +#: libpq/auth.c:321 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "authentification RADIUS échouée pour l'utilisateur « %s »" -#: libpq/auth.c:318 +#: libpq/auth.c:324 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "authentification échouée pour l'utilisateur « %s » : méthode d'authentification invalide" -#: libpq/auth.c:322 +#: libpq/auth.c:328 #, c-format msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "La connexion correspond à la ligne %d du pg_hba.conf : « %s »" -#: libpq/auth.c:369 +#: libpq/auth.c:371 +#, fuzzy, c-format +#| msgid "Connections and Authentication" +msgid "connection was re-authenticated" +msgstr "Connexions et authentification" + +#: libpq/auth.c:372 +#, c-format +msgid "previous ID: \"%s\"; new ID: \"%s\"" +msgstr "" + +#: libpq/auth.c:381 +#, c-format +msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" +msgstr "" + +#: libpq/auth.c:420 #, c-format msgid "client certificates can only be checked if a root certificate store is available" msgstr "" "les certificats cert peuvent seulement être vérifiés si un emplacement de\n" "certificat racine est disponible" -#: libpq/auth.c:380 +#: libpq/auth.c:431 #, c-format msgid "connection requires a valid client certificate" msgstr "la connexion requiert un certificat client valide" -#: libpq/auth.c:390 -#, c-format -msgid "GSSAPI encryption can only be used with gss, trust, or reject authentication methods" -msgstr "le chiffrement GSSAPI ne peut être utilisé qu'avec les méthodes d'authentification gss, trust ou reject" - -#: libpq/auth.c:424 -#, c-format -msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" -msgstr "" -"pg_hba.conf rejette la connexion de la réplication pour l'hôte « %s »,\n" -"utilisateur « %s », %s" +#: libpq/auth.c:462 libpq/auth.c:508 +msgid "GSS encryption" +msgstr "chiffrement GSS" -#: libpq/auth.c:426 libpq/auth.c:442 libpq/auth.c:500 libpq/auth.c:518 -msgid "SSL off" -msgstr "SSL inactif" +#: libpq/auth.c:465 libpq/auth.c:511 +msgid "SSL encryption" +msgstr "chiffrement SSL" -#: libpq/auth.c:426 libpq/auth.c:442 libpq/auth.c:500 libpq/auth.c:518 -msgid "SSL on" -msgstr "SSL actif" +#: libpq/auth.c:467 libpq/auth.c:513 +msgid "no encryption" +msgstr "aucun chiffrement" -#: libpq/auth.c:430 +#. translator: last %s describes encryption state +#: libpq/auth.c:473 #, c-format -msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\"" +msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" msgstr "" "pg_hba.conf rejette la connexion de la réplication pour l'hôte « %s »,\n" -"utilisateur « %s »" +"utilisateur « %s », %s" -#: libpq/auth.c:439 +#. translator: last %s describes encryption state +#: libpq/auth.c:480 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "" "pg_hba.conf rejette la connexion pour l'hôte « %s », utilisateur « %s », base\n" "de données « %s », %s" -#: libpq/auth.c:446 -#, c-format -msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\"" -msgstr "" -"pg_hba.conf rejette la connexion pour l'hôte « %s », utilisateur « %s », base\n" -"de données « %s »" - -#: libpq/auth.c:475 +#: libpq/auth.c:518 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "Adresse IP du client résolue en « %s », la recherche inverse correspond bien." -#: libpq/auth.c:478 +#: libpq/auth.c:521 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "Adresse IP du client résolue en « %s », la recherche inverse n'est pas vérifiée." -#: libpq/auth.c:481 +#: libpq/auth.c:524 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "Adresse IP du client résolue en « %s », la recherche inverse ne correspond pas." -#: libpq/auth.c:484 +#: libpq/auth.c:527 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "N'a pas pu traduire le nom d'hôte « %s » du client en adresse IP : %s." -#: libpq/auth.c:489 +#: libpq/auth.c:532 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "N'a pas pu résoudre l'adresse IP du client à partir du nom d'hôte : %s." -#: libpq/auth.c:498 +#. translator: last %s describes encryption state +#: libpq/auth.c:540 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" msgstr "" "aucune entrée dans pg_hba.conf pour la connexion de la réplication à partir de\n" "l'hôte « %s », utilisateur « %s », %s" -#: libpq/auth.c:505 -#, c-format -msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\"" -msgstr "" -"aucune entrée dans pg_hba.conf pour la connexion de la réplication à partir de\n" -"l'hôte « %s », utilisateur « %s »" - -#: libpq/auth.c:515 +#. translator: last %s describes encryption state +#: libpq/auth.c:548 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "" "aucune entrée dans pg_hba.conf pour l'hôte « %s », utilisateur « %s »,\n" "base de données « %s », %s" -#: libpq/auth.c:523 -#, c-format -msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"" -msgstr "" -"aucune entrée dans pg_hba.conf pour l'hôte « %s », utilisateur « %s »,\n" -"base de données « %s »" - -#: libpq/auth.c:690 +#: libpq/auth.c:722 #, c-format msgid "expected password response, got message type %d" msgstr "en attente du mot de passe, a reçu un type de message %d" -#: libpq/auth.c:718 +#: libpq/auth.c:743 #, c-format msgid "invalid password packet size" msgstr "taille du paquet du mot de passe invalide" -#: libpq/auth.c:736 +#: libpq/auth.c:761 #, c-format msgid "empty password returned by client" msgstr "mot de passe vide renvoyé par le client" -#: libpq/auth.c:856 libpq/hba.c:1340 +#: libpq/auth.c:888 libpq/hba.c:1368 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "l'authentification MD5 n'est pas supportée quand « db_user_namespace » est activé" -#: libpq/auth.c:862 +#: libpq/auth.c:894 #, c-format msgid "could not generate random MD5 salt" msgstr "n'a pas pu générer le sel MD5 aléatoire" -#: libpq/auth.c:908 -#, c-format -msgid "SASL authentication is not supported in protocol version 2" -msgstr "l'authentification SASL n'est pas supportée dans le protocole de version 2" - -#: libpq/auth.c:941 +#: libpq/auth.c:960 #, c-format msgid "expected SASL response, got message type %d" msgstr "attendait une réponse SASL, a reçu le type de message %d" -#: libpq/auth.c:1070 +#: libpq/auth.c:1089 libpq/be-secure-gssapi.c:535 #, c-format -msgid "GSSAPI is not supported in protocol version 2" -msgstr "GSSAPI n'est pas supporté dans le protocole de version 2" +msgid "could not set environment: %m" +msgstr "n'a pas pu configurer l'environnement : %m" -#: libpq/auth.c:1130 +#: libpq/auth.c:1125 #, c-format msgid "expected GSS response, got message type %d" msgstr "en attente d'une réponse GSS, a reçu un message de type %d" -#: libpq/auth.c:1192 +#: libpq/auth.c:1185 msgid "accepting GSS security context failed" msgstr "échec de l'acceptation du contexte de sécurité GSS" -#: libpq/auth.c:1231 +#: libpq/auth.c:1225 msgid "retrieving GSS user name failed" msgstr "échec lors de la récupération du nom de l'utilisateur avec GSS" -#: libpq/auth.c:1362 -#, c-format -msgid "SSPI is not supported in protocol version 2" -msgstr "SSPI n'est pas supporté dans le protocole de version 2" - -#: libpq/auth.c:1377 +#: libpq/auth.c:1366 msgid "could not acquire SSPI credentials" msgstr "n'a pas pu obtenir les pièces d'identité SSPI" -#: libpq/auth.c:1395 +#: libpq/auth.c:1391 #, c-format msgid "expected SSPI response, got message type %d" msgstr "en attente d'une réponse SSPI, a reçu un message de type %d" -#: libpq/auth.c:1468 +#: libpq/auth.c:1469 msgid "could not accept SSPI security context" msgstr "n'a pas pu accepter le contexte de sécurité SSPI" -#: libpq/auth.c:1530 +#: libpq/auth.c:1531 msgid "could not get token from SSPI security context" msgstr "n'a pas pu obtenir le jeton du contexte de sécurité SSPI" -#: libpq/auth.c:1649 libpq/auth.c:1668 +#: libpq/auth.c:1670 libpq/auth.c:1689 #, c-format msgid "could not translate name" msgstr "n'a pas pu traduit le nom" -#: libpq/auth.c:1681 +#: libpq/auth.c:1702 #, c-format msgid "realm name too long" msgstr "nom du royaume trop long" -#: libpq/auth.c:1696 +#: libpq/auth.c:1717 #, c-format msgid "translated account name too long" msgstr "traduction du nom de compte trop longue" -#: libpq/auth.c:1882 +#: libpq/auth.c:1898 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "n'a pas pu créer le socket pour la connexion Ident : %m" -#: libpq/auth.c:1897 +#: libpq/auth.c:1913 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "n'a pas pu se lier à l'adresse locale « %s » : %m" -#: libpq/auth.c:1909 +#: libpq/auth.c:1925 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "n'a pas pu se connecter au serveur Ident à l'adresse « %s », port %s : %m" -#: libpq/auth.c:1931 +#: libpq/auth.c:1947 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "n'a pas pu envoyer la requête au serveur Ident à l'adresse « %s », port %s : %m" -#: libpq/auth.c:1948 +#: libpq/auth.c:1964 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "" "n'a pas pu recevoir la réponse du serveur Ident à l'adresse « %s », port %s :\n" "%m" -#: libpq/auth.c:1958 +#: libpq/auth.c:1974 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "réponse mal formatée du serveur Ident : « %s »" -#: libpq/auth.c:1998 +#: libpq/auth.c:2027 #, c-format msgid "peer authentication is not supported on this platform" msgstr "la méthode d'authentification «peer n'est pas supportée sur cette plateforme" -#: libpq/auth.c:2002 +#: libpq/auth.c:2031 #, c-format msgid "could not get peer credentials: %m" msgstr "n'a pas pu obtenir l'authentification de l'autre : %m" -#: libpq/auth.c:2013 +#: libpq/auth.c:2043 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "n'a pas pu rechercher l'identifiant %ld de l'utilisateur local : %s" -#: libpq/auth.c:2101 +#: libpq/auth.c:2144 #, c-format msgid "error from underlying PAM layer: %s" msgstr "erreur provenant de la couche PAM : %s" -#: libpq/auth.c:2170 +#: libpq/auth.c:2155 +#, fuzzy, c-format +#| msgid "unsupported PAM conversation %d/%s" +msgid "unsupported PAM conversation %d/\"%s\"" +msgstr "conversation PAM %d/%s non supportée" + +#: libpq/auth.c:2215 #, c-format msgid "could not create PAM authenticator: %s" msgstr "n'a pas pu créer l'authenticateur PAM : %s" -#: libpq/auth.c:2181 +#: libpq/auth.c:2226 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) a échoué : %s" -#: libpq/auth.c:2213 +#: libpq/auth.c:2258 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST) a échoué : %s" -#: libpq/auth.c:2225 +#: libpq/auth.c:2270 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) a échoué : %s" -#: libpq/auth.c:2236 +#: libpq/auth.c:2283 #, c-format msgid "pam_authenticate failed: %s" msgstr "pam_authenticate a échoué : %s" -#: libpq/auth.c:2247 +#: libpq/auth.c:2296 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt a échoué : %s" -#: libpq/auth.c:2258 +#: libpq/auth.c:2307 #, c-format msgid "could not release PAM authenticator: %s" msgstr "n'a pas pu fermer l'authenticateur PAM : %s" -#: libpq/auth.c:2334 +#: libpq/auth.c:2387 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "n'a pas pu initialiser LDAP : code d'erreur %d" -#: libpq/auth.c:2371 +#: libpq/auth.c:2424 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "n'a pas pu extraire le nom de domaine depuis ldapbasedn" -#: libpq/auth.c:2379 +#: libpq/auth.c:2432 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "l'authentification LDAP n'a pu trouver les enregistrement DNS SRV pour « %s »" -#: libpq/auth.c:2381 +#: libpq/auth.c:2434 #, c-format msgid "Set an LDAP server name explicitly." msgstr "Définit un nom de serveur LDAP explicitement." -#: libpq/auth.c:2433 +#: libpq/auth.c:2486 #, c-format msgid "could not initialize LDAP: %s" msgstr "n'a pas pu initialiser LDAP : %s" -#: libpq/auth.c:2443 +#: libpq/auth.c:2496 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "ldaps non supporté avec cette bibliothèque LDAP" -#: libpq/auth.c:2451 +#: libpq/auth.c:2504 #, c-format msgid "could not initialize LDAP: %m" msgstr "n'a pas pu initialiser LDAP : %m" -#: libpq/auth.c:2461 +#: libpq/auth.c:2514 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "n'a pas pu initialiser la version du protocole LDAP : %s" -#: libpq/auth.c:2492 -#, c-format -msgid "could not load wldap32.dll" -msgstr "n'a pas pu charger wldap32.dll" - -#: libpq/auth.c:2500 +#: libpq/auth.c:2554 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "n'a pas pu charger la fonction _ldap_start_tls_sA de wldap32.dll" -#: libpq/auth.c:2501 +#: libpq/auth.c:2555 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "LDAP via SSL n'est pas supporté sur cette plateforme." -#: libpq/auth.c:2516 +#: libpq/auth.c:2571 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "n'a pas pu démarrer la session TLS LDAP : %s" -#: libpq/auth.c:2587 +#: libpq/auth.c:2642 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "serveur LDAP non précisé, et il n'y a pas de ldapbasedn" -#: libpq/auth.c:2594 +#: libpq/auth.c:2649 #, c-format msgid "LDAP server not specified" msgstr "serveur LDAP non précisé" -#: libpq/auth.c:2656 +#: libpq/auth.c:2711 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "caractère invalide dans le nom de l'utilisateur pour l'authentification LDAP" -#: libpq/auth.c:2673 +#: libpq/auth.c:2728 #, c-format msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" msgstr "n'a pas pu réaliser le lien LDAP initiale pour ldapbinddn « %s » sur le serveur « %s » : %s" -#: libpq/auth.c:2702 +#: libpq/auth.c:2757 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "n'a pas pu rechercher dans LDAP pour filtrer « %s » sur le serveur « %s » : %s" -#: libpq/auth.c:2716 +#: libpq/auth.c:2771 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "l'utilisateur LDAP « %s » n'existe pas" -#: libpq/auth.c:2717 +#: libpq/auth.c:2772 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "la recherche LDAP pour le filtre « %s » sur le serveur « %s » n'a renvoyé aucun enregistrement." -#: libpq/auth.c:2721 +#: libpq/auth.c:2776 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "l'utilisateur LDAP « %s » n'est pas unique" -#: libpq/auth.c:2722 +#: libpq/auth.c:2777 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." msgstr[0] "la recherche LDAP pour le filtre « %s » sur le serveur « %s » a renvoyé %d enregistrement." msgstr[1] "la recherche LDAP pour le filtre « %s » sur le serveur « %s » a renvoyé %d enregistrements." -#: libpq/auth.c:2742 +#: libpq/auth.c:2797 #, c-format msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "" "n'a pas pu obtenir le dn pour la première entrée correspondante « %s » sur\n" "le serveur « %s » : %s" -#: libpq/auth.c:2763 +#: libpq/auth.c:2818 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\"" msgstr "" "n'a pas pu exécuter le unbind après la recherche de l'utilisateur « %s »\n" "sur le serveur « %s »" -#: libpq/auth.c:2794 +#: libpq/auth.c:2849 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "échec de connexion LDAP pour l'utilisateur « %s » sur le serveur « %s » : %s" -#: libpq/auth.c:2823 +#: libpq/auth.c:2881 #, c-format msgid "LDAP diagnostics: %s" msgstr "diagnostique LDAP: %s" -#: libpq/auth.c:2850 +#: libpq/auth.c:2919 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "" "l'authentification par le certificat a échoué pour l'utilisateur « %s » :\n" "le certificat du client ne contient aucun nom d'utilisateur" -#: libpq/auth.c:2867 +#: libpq/auth.c:2940 +#, fuzzy, c-format +#| msgid "certificate authentication failed for user \"%s\"" +msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" +msgstr "authentification par le certificat échouée pour l'utilisateur « %s »" + +#: libpq/auth.c:2963 +#, fuzzy, c-format +#| msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" +msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" +msgstr "l'authentification par certificat (clientcert=verify-full) a échoué pour l'utilisateur « %s » : incohérence de CN" + +#: libpq/auth.c:2968 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" msgstr "l'authentification par certificat (clientcert=verify-full) a échoué pour l'utilisateur « %s » : incohérence de CN" -#: libpq/auth.c:2968 +#: libpq/auth.c:3070 #, c-format msgid "RADIUS server not specified" msgstr "serveur RADIUS non précisé" -#: libpq/auth.c:2975 +#: libpq/auth.c:3077 #, c-format msgid "RADIUS secret not specified" msgstr "secret RADIUS non précisé" -#: libpq/auth.c:2989 +#: libpq/auth.c:3091 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "l'authentification RADIUS ne supporte pas les mots de passe de plus de %d caractères" -#: libpq/auth.c:3094 libpq/hba.c:1954 +#: libpq/auth.c:3198 libpq/hba.c:1998 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "n'a pas pu traduire le nom du serveur RADIUS « %s » en une adresse : %s" -#: libpq/auth.c:3108 +#: libpq/auth.c:3212 #, c-format msgid "could not generate random encryption vector" msgstr "n'a pas pu générer le vecteur de chiffrement aléatoire" -#: libpq/auth.c:3142 +#: libpq/auth.c:3246 #, c-format msgid "could not perform MD5 encryption of password" msgstr "n'a pas pu réaliser le chiffrement MD5 du mot de passe" -#: libpq/auth.c:3168 +#: libpq/auth.c:3272 #, c-format msgid "could not create RADIUS socket: %m" msgstr "n'a pas pu créer le socket RADIUS : %m" -#: libpq/auth.c:3190 +#: libpq/auth.c:3294 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "n'a pas pu se lier à la socket RADIUS : %m" -#: libpq/auth.c:3200 +#: libpq/auth.c:3304 #, c-format msgid "could not send RADIUS packet: %m" msgstr "n'a pas pu transmettre le paquet RADIUS : %m" -#: libpq/auth.c:3233 libpq/auth.c:3259 +#: libpq/auth.c:3337 libpq/auth.c:3363 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "dépassement du délai pour la réponse du RADIUS à partir de %s" -#: libpq/auth.c:3252 +#: libpq/auth.c:3356 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "n'a pas pu vérifier le statut sur la socket RADIUS : %m" -#: libpq/auth.c:3282 +#: libpq/auth.c:3386 #, c-format msgid "could not read RADIUS response: %m" msgstr "n'a pas pu lire la réponse RADIUS : %m" -#: libpq/auth.c:3295 libpq/auth.c:3299 +#: libpq/auth.c:3399 libpq/auth.c:3403 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "la réponse RADIUS de %s a été envoyée à partir d'un mauvais port : %d" -#: libpq/auth.c:3308 +#: libpq/auth.c:3412 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "réponse RADIUS de %s trop courte : %d" -#: libpq/auth.c:3315 +#: libpq/auth.c:3419 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "la réponse RADIUS de %s a une longueur corrompue : %d (longueur réelle %d)" -#: libpq/auth.c:3323 +#: libpq/auth.c:3427 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "la réponse RADIUS de %s correspond à une demande différente : %d (devrait être %d)" -#: libpq/auth.c:3348 +#: libpq/auth.c:3452 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "n'a pas pu réaliser le chiffrement MD5 du paquet reçu" -#: libpq/auth.c:3357 +#: libpq/auth.c:3461 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "la réponse RADIUS de %s a une signature MD5 invalide" -#: libpq/auth.c:3375 +#: libpq/auth.c:3479 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "la réponse RADIUS de %s a un code invalide (%d) pour l'utilisateur « %s »" -#: libpq/be-fsstubs.c:119 libpq/be-fsstubs.c:150 libpq/be-fsstubs.c:178 libpq/be-fsstubs.c:204 libpq/be-fsstubs.c:229 libpq/be-fsstubs.c:277 libpq/be-fsstubs.c:300 libpq/be-fsstubs.c:555 +#: libpq/be-fsstubs.c:119 libpq/be-fsstubs.c:150 libpq/be-fsstubs.c:178 libpq/be-fsstubs.c:204 libpq/be-fsstubs.c:229 libpq/be-fsstubs.c:277 libpq/be-fsstubs.c:300 libpq/be-fsstubs.c:553 #, c-format msgid "invalid large-object descriptor: %d" msgstr "descripteur invalide de « Large Object » : %d" @@ -13039,7 +13723,7 @@ msgstr "descripteur invalide de « Large Object » : %d" msgid "large object descriptor %d was not opened for reading" msgstr "le descripteur %d du « Large Object » n'a pas été ouvert pour la lecture" -#: libpq/be-fsstubs.c:185 libpq/be-fsstubs.c:562 +#: libpq/be-fsstubs.c:185 libpq/be-fsstubs.c:560 #, c-format msgid "large object descriptor %d was not opened for writing" msgstr "le descripteur %d du « Large Object » n'a pas été ouvert pour l'écriture" @@ -13064,758 +13748,795 @@ msgstr "n'a pas pu ouvrir le fichier serveur « %s » : %m" msgid "could not read server file \"%s\": %m" msgstr "n'a pas pu lire le fichier serveur « %s » : %m" -#: libpq/be-fsstubs.c:516 +#: libpq/be-fsstubs.c:514 #, c-format msgid "could not create server file \"%s\": %m" msgstr "n'a pas pu créer le fichier serveur « %s » : %m" -#: libpq/be-fsstubs.c:528 +#: libpq/be-fsstubs.c:526 #, c-format msgid "could not write server file \"%s\": %m" msgstr "n'a pas pu écrire le fichier serveur « %s » : %m" -#: libpq/be-fsstubs.c:762 +#: libpq/be-fsstubs.c:760 #, c-format msgid "large object read request is too large" msgstr "la demande de lecture du Large Object est trop grande" -#: libpq/be-fsstubs.c:804 utils/adt/genfile.c:235 utils/adt/genfile.c:274 utils/adt/genfile.c:310 +#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:268 utils/adt/genfile.c:307 utils/adt/genfile.c:343 #, c-format msgid "requested length cannot be negative" msgstr "la longueur demandée ne peut pas être négative" -#: libpq/be-fsstubs.c:857 storage/large_object/inv_api.c:295 storage/large_object/inv_api.c:307 storage/large_object/inv_api.c:511 storage/large_object/inv_api.c:622 storage/large_object/inv_api.c:812 +#: libpq/be-fsstubs.c:855 storage/large_object/inv_api.c:297 storage/large_object/inv_api.c:309 storage/large_object/inv_api.c:513 storage/large_object/inv_api.c:624 storage/large_object/inv_api.c:814 #, c-format msgid "permission denied for large object %u" msgstr "droit refusé pour le Large Object %u" -#: libpq/be-secure-common.c:91 +#: libpq/be-secure-common.c:93 #, c-format msgid "could not read from command \"%s\": %m" msgstr "n'a pas pu lire à partir de la commande « %s » : %m" -#: libpq/be-secure-common.c:109 +#: libpq/be-secure-common.c:113 #, c-format msgid "command \"%s\" failed" msgstr "la commande « %s » a échoué" -#: libpq/be-secure-common.c:140 +#: libpq/be-secure-common.c:141 #, c-format msgid "could not access private key file \"%s\": %m" msgstr "n'a pas pu accéder au fichier de la clé privée « %s » : %m" -#: libpq/be-secure-common.c:149 +#: libpq/be-secure-common.c:150 #, c-format msgid "private key file \"%s\" is not a regular file" msgstr "le fichier de clé privée « %s » n'est pas un fichier" -#: libpq/be-secure-common.c:164 +#: libpq/be-secure-common.c:165 #, c-format msgid "private key file \"%s\" must be owned by the database user or root" msgstr "le fichier de clé privée « %s » doit avoir le même propriétaire que la base de donnée ou root" -#: libpq/be-secure-common.c:187 +#: libpq/be-secure-common.c:188 #, c-format msgid "private key file \"%s\" has group or world access" msgstr "" "le fichier de clé privé « %s » est accessible par le groupe et/ou par les\n" "autres" -#: libpq/be-secure-common.c:189 +#: libpq/be-secure-common.c:190 #, c-format msgid "File must have permissions u=rw (0600) or less if owned by the database user, or permissions u=rw,g=r (0640) or less if owned by root." msgstr "" "Le fichier doit avoir les permissions u=rw (0600) ou moins si le propriétaire est le même que la base de données,\n" "ou les permissions u=rw,g=r (0640) ou moins si le propriétaire est root." -#: libpq/be-secure-gssapi.c:177 +#: libpq/be-secure-gssapi.c:204 msgid "GSSAPI wrap error" msgstr "erreur d'empaquetage GSSAPI" -#: libpq/be-secure-gssapi.c:181 +#: libpq/be-secure-gssapi.c:211 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "le message sortant GSSAPI n'utilliserait pas la confidentialité" -#: libpq/be-secure-gssapi.c:185 libpq/be-secure-gssapi.c:551 +#: libpq/be-secure-gssapi.c:218 libpq/be-secure-gssapi.c:622 #, c-format msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" msgstr "le serveur a tenté d'envoyer un paquet GSSAPI surdimensionné (%zu > %zu)" -#: libpq/be-secure-gssapi.c:303 +#: libpq/be-secure-gssapi.c:351 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" msgstr "paquet GSSAPI surdimensionné envoyé par le client (%zu > %zu)" -#: libpq/be-secure-gssapi.c:345 +#: libpq/be-secure-gssapi.c:389 msgid "GSSAPI unwrap error" msgstr "erreur de dépaquetage GSSAPI" -#: libpq/be-secure-gssapi.c:350 +#: libpq/be-secure-gssapi.c:396 #, c-format msgid "incoming GSSAPI message did not use confidentiality" msgstr "le message GSSAPI en entrée n'a pas utilisé la confidentialité" -#: libpq/be-secure-gssapi.c:502 +#: libpq/be-secure-gssapi.c:570 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %d)" msgstr "paquet GSSAPI surdimensionné envoyé par le client (%zu > %d)" -#: libpq/be-secure-gssapi.c:524 +#: libpq/be-secure-gssapi.c:594 msgid "could not accept GSSAPI security context" msgstr "n'a pas pu accepter le contexte de sécurité GSSAPI" -#: libpq/be-secure-gssapi.c:597 +#: libpq/be-secure-gssapi.c:689 msgid "GSSAPI size check error" msgstr "erreur de vérification de taille GSSAPI" -#: libpq/be-secure-openssl.c:111 +#: libpq/be-secure-openssl.c:115 #, c-format msgid "could not create SSL context: %s" msgstr "n'a pas pu créer le contexte SSL : %s" -#: libpq/be-secure-openssl.c:154 +#: libpq/be-secure-openssl.c:141 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "n'a pas pu charger le fichier du certificat serveur « %s » : %s" -#: libpq/be-secure-openssl.c:174 +#: libpq/be-secure-openssl.c:161 #, c-format msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "le fichier de clé privée « %s » ne peut pas être rechargé car il nécessaire une phrase de passe" -#: libpq/be-secure-openssl.c:179 +#: libpq/be-secure-openssl.c:166 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "n'a pas pu charger le fichier de clé privée « %s » : %s" -#: libpq/be-secure-openssl.c:188 +#: libpq/be-secure-openssl.c:175 #, c-format msgid "check of private key failed: %s" msgstr "échec de la vérification de la clé privée : %s" -#: libpq/be-secure-openssl.c:204 +# (errmsg("%s setting %s not supported by this build", +# guc_name, +# GetConfigOption(guc_name, false, false)))); +#. translator: first %s is a GUC option name, second %s is its value +#: libpq/be-secure-openssl.c:188 libpq/be-secure-openssl.c:211 +#, c-format +msgid "\"%s\" setting \"%s\" not supported by this build" +msgstr "le paramètre %s ne supporte pas la valeur %s dans cette installation" + +#: libpq/be-secure-openssl.c:198 #, c-format msgid "could not set minimum SSL protocol version" msgstr "n'a pas pu mettre en place la version minimum de protocole SSL" -#: libpq/be-secure-openssl.c:220 +#: libpq/be-secure-openssl.c:221 #, c-format msgid "could not set maximum SSL protocol version" msgstr "n'a pas pu mettre en place la version maximum de protocole SSL" -#: libpq/be-secure-openssl.c:244 +#: libpq/be-secure-openssl.c:237 +#, c-format +msgid "could not set SSL protocol version range" +msgstr "n'a pas pu configurer l'intervalle de versions pour le protocole SSL" + +#: libpq/be-secure-openssl.c:238 +#, c-format +msgid "\"%s\" cannot be higher than \"%s\"" +msgstr "« %s » ne peut pas être supérieur à « %s »" + +#: libpq/be-secure-openssl.c:265 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "n'a pas pu configurer la liste des algorithmes de chiffrement (pas d'algorithmes valides disponibles)" -#: libpq/be-secure-openssl.c:262 +#: libpq/be-secure-openssl.c:285 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "n'a pas pu charger le fichier du certificat racine « %s » : %s" -#: libpq/be-secure-openssl.c:289 +#: libpq/be-secure-openssl.c:334 #, c-format -msgid "SSL certificate revocation list file \"%s\" ignored" -msgstr "liste de révocation des certificats SSL « %s » ignorée" +msgid "could not load SSL certificate revocation list file \"%s\": %s" +msgstr "n'a pas pu charger le fichier de liste de révocation des certificats SSL (« %s ») : %s" -#: libpq/be-secure-openssl.c:291 -#, c-format -msgid "SSL library does not support certificate revocation lists." -msgstr "La bibliothèque SSL ne supporte pas les listes de révocation des certificats." +#: libpq/be-secure-openssl.c:342 +#, fuzzy, c-format +#| msgid "could not load SSL certificate revocation list file \"%s\": %s" +msgid "could not load SSL certificate revocation list directory \"%s\": %s" +msgstr "n'a pas pu charger le fichier de liste de révocation des certificats SSL (« %s ») : %s" -#: libpq/be-secure-openssl.c:298 -#, c-format -msgid "could not load SSL certificate revocation list file \"%s\": %s" +#: libpq/be-secure-openssl.c:350 +#, fuzzy, c-format +#| msgid "could not load SSL certificate revocation list file \"%s\": %s" +msgid "could not load SSL certificate revocation list file \"%s\" or directory \"%s\": %s" msgstr "n'a pas pu charger le fichier de liste de révocation des certificats SSL (« %s ») : %s" -#: libpq/be-secure-openssl.c:373 +#: libpq/be-secure-openssl.c:408 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "n'a pas pu initialiser la connexion SSL : contexte SSL non configuré" -#: libpq/be-secure-openssl.c:381 +#: libpq/be-secure-openssl.c:419 #, c-format msgid "could not initialize SSL connection: %s" msgstr "n'a pas pu initialiser la connexion SSL : %s" -#: libpq/be-secure-openssl.c:389 +#: libpq/be-secure-openssl.c:427 #, c-format msgid "could not set SSL socket: %s" msgstr "n'a pas pu créer le socket SSL : %s" -#: libpq/be-secure-openssl.c:444 +#: libpq/be-secure-openssl.c:482 #, c-format msgid "could not accept SSL connection: %m" msgstr "n'a pas pu accepter la connexion SSL : %m" -#: libpq/be-secure-openssl.c:448 libpq/be-secure-openssl.c:459 +#: libpq/be-secure-openssl.c:486 libpq/be-secure-openssl.c:539 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "n'a pas pu accepter la connexion SSL : fin de fichier détecté" -#: libpq/be-secure-openssl.c:453 +#: libpq/be-secure-openssl.c:525 #, c-format msgid "could not accept SSL connection: %s" msgstr "n'a pas pu accepter la connexion SSL : %s" -#: libpq/be-secure-openssl.c:464 libpq/be-secure-openssl.c:595 libpq/be-secure-openssl.c:659 +#: libpq/be-secure-openssl.c:528 +#, c-format +msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." +msgstr "Ceci pourrait indiquer que le client ne supporte pas la version du protocole SSL entre %s et %s." + +#: libpq/be-secure-openssl.c:544 libpq/be-secure-openssl.c:723 libpq/be-secure-openssl.c:787 #, c-format msgid "unrecognized SSL error code: %d" msgstr "code d'erreur SSL inconnu : %d" -#: libpq/be-secure-openssl.c:506 +#: libpq/be-secure-openssl.c:590 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "le nom commun du certificat SSL contient des NULL" -#: libpq/be-secure-openssl.c:584 libpq/be-secure-openssl.c:643 +#: libpq/be-secure-openssl.c:629 +#, fuzzy, c-format +#| msgid "SSL certificate's name contains embedded null\n" +msgid "SSL certificate's distinguished name contains embedded null" +msgstr "le nom du certificat SSL contient des NULL\n" + +#: libpq/be-secure-openssl.c:712 libpq/be-secure-openssl.c:771 #, c-format msgid "SSL error: %s" msgstr "erreur SSL : %s" -#: libpq/be-secure-openssl.c:824 +#: libpq/be-secure-openssl.c:952 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier de paramètres DH « %s » : %m" -#: libpq/be-secure-openssl.c:836 +#: libpq/be-secure-openssl.c:964 #, c-format msgid "could not load DH parameters file: %s" msgstr "n'a pas pu charger le fichier de paramètres DH : %s" -#: libpq/be-secure-openssl.c:846 +#: libpq/be-secure-openssl.c:974 #, c-format msgid "invalid DH parameters: %s" msgstr "paramètres DH invalides : %s" -#: libpq/be-secure-openssl.c:854 +#: libpq/be-secure-openssl.c:983 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "paramètres DH invalides : p n'est pas premier" -#: libpq/be-secure-openssl.c:862 +#: libpq/be-secure-openssl.c:992 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "paramètres DH invalides : pas de générateur convenable ou de premier sûr" -#: libpq/be-secure-openssl.c:1017 +#: libpq/be-secure-openssl.c:1153 #, c-format msgid "DH: could not load DH parameters" msgstr "DH : n'a pas pu charger les paramètres DH" -#: libpq/be-secure-openssl.c:1025 +#: libpq/be-secure-openssl.c:1161 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH : n'a pas pu configurer les paramètres DH : %s" -#: libpq/be-secure-openssl.c:1049 +#: libpq/be-secure-openssl.c:1188 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH : nome de courbe non reconnu : %s" -#: libpq/be-secure-openssl.c:1058 +#: libpq/be-secure-openssl.c:1197 #, c-format msgid "ECDH: could not create key" msgstr "ECDH : n'a pas pu créer la clé" -#: libpq/be-secure-openssl.c:1086 +#: libpq/be-secure-openssl.c:1225 msgid "no SSL error reported" msgstr "aucune erreur SSL reportée" -#: libpq/be-secure-openssl.c:1090 +#: libpq/be-secure-openssl.c:1229 #, c-format msgid "SSL error code %lu" msgstr "erreur SSL de code %lu" -# (errmsg("%s setting %s not supported by this build", -# guc_name, -# GetConfigOption(guc_name, false, false)))); -#: libpq/be-secure-openssl.c:1320 -#, c-format -msgid "%s setting %s not supported by this build" -msgstr "le paramètre %s ne supporte pas la valeur %s dans cette installation" +#: libpq/be-secure-openssl.c:1383 +#, fuzzy, c-format +#| msgid "failed to generate nonce\n" +msgid "failed to create BIO" +msgstr "échec pour la génération de nonce\n" -#: libpq/be-secure.c:123 +#: libpq/be-secure-openssl.c:1393 #, c-format -msgid "SSL connection from \"%s\"" -msgstr "connexion SSL de « %s »" +msgid "could not get NID for ASN1_OBJECT object" +msgstr "" -#: libpq/be-secure.c:208 libpq/be-secure.c:304 +#: libpq/be-secure-openssl.c:1401 +#, fuzzy, c-format +#| msgid "could not create LDAP structure\n" +msgid "could not convert NID %d to an ASN1_OBJECT structure" +msgstr "n'a pas pu créer la structure LDAP\n" + +#: libpq/be-secure.c:209 libpq/be-secure.c:305 #, c-format msgid "terminating connection due to unexpected postmaster exit" msgstr "arrêt des connexions suite à un arrêt inatendu du postmaster" -#: libpq/crypt.c:52 +#: libpq/crypt.c:49 #, c-format msgid "Role \"%s\" does not exist." msgstr "Le rôle « %s » n'existe pas." -#: libpq/crypt.c:62 +#: libpq/crypt.c:59 #, c-format msgid "User \"%s\" has no password assigned." msgstr "L'utilisateur « %s » n'a pas de mot de passe affecté." -#: libpq/crypt.c:80 +#: libpq/crypt.c:77 #, c-format msgid "User \"%s\" has an expired password." msgstr "L'utilisateur « %s » a un mot de passe expiré." -#: libpq/crypt.c:182 +#: libpq/crypt.c:179 #, c-format msgid "User \"%s\" has a password that cannot be used with MD5 authentication." msgstr "L'utilisateur « %s » a un mot de passe qui ne peut pas être utilisé avec une authentification MD5." -#: libpq/crypt.c:206 libpq/crypt.c:247 libpq/crypt.c:271 +#: libpq/crypt.c:203 libpq/crypt.c:244 libpq/crypt.c:268 #, c-format msgid "Password does not match for user \"%s\"." msgstr "Le mot de passe ne correspond pas pour l'utilisateur %s." -#: libpq/crypt.c:290 +#: libpq/crypt.c:287 #, c-format msgid "Password of user \"%s\" is in unrecognized format." msgstr "Le mot de passe de l'utilisateur « %s » est dans un format non reconnu." -#: libpq/hba.c:235 +#: libpq/hba.c:243 #, c-format msgid "authentication file token too long, skipping: \"%s\"" msgstr "jeton du fichier d'authentification trop long, ignore : « %s »" -#: libpq/hba.c:407 +#: libpq/hba.c:415 #, c-format msgid "could not open secondary authentication file \"@%s\" as \"%s\": %m" msgstr "" "n'a pas pu ouvrir le fichier d'authentification secondaire « @%s » comme\n" "« %s » : %m" -#: libpq/hba.c:509 -#, c-format -msgid "authentication file line too long" -msgstr "ligne du fichier d'authentification trop longue" - -#: libpq/hba.c:510 libpq/hba.c:867 libpq/hba.c:887 libpq/hba.c:925 libpq/hba.c:975 libpq/hba.c:989 libpq/hba.c:1013 libpq/hba.c:1022 libpq/hba.c:1035 libpq/hba.c:1056 libpq/hba.c:1069 libpq/hba.c:1089 libpq/hba.c:1111 libpq/hba.c:1123 libpq/hba.c:1179 libpq/hba.c:1199 libpq/hba.c:1213 libpq/hba.c:1232 libpq/hba.c:1243 libpq/hba.c:1258 libpq/hba.c:1276 libpq/hba.c:1292 libpq/hba.c:1304 libpq/hba.c:1341 libpq/hba.c:1382 libpq/hba.c:1395 -#: libpq/hba.c:1417 libpq/hba.c:1430 libpq/hba.c:1442 libpq/hba.c:1460 libpq/hba.c:1510 libpq/hba.c:1554 libpq/hba.c:1565 libpq/hba.c:1581 libpq/hba.c:1598 libpq/hba.c:1608 libpq/hba.c:1666 libpq/hba.c:1704 libpq/hba.c:1726 libpq/hba.c:1738 libpq/hba.c:1825 libpq/hba.c:1843 libpq/hba.c:1937 libpq/hba.c:1956 libpq/hba.c:1985 libpq/hba.c:1998 libpq/hba.c:2021 libpq/hba.c:2043 libpq/hba.c:2057 tsearch/ts_locale.c:190 -#, c-format -msgid "line %d of configuration file \"%s\"" -msgstr "ligne %d du fichier de configuration « %s »" +#: libpq/hba.c:861 +#, fuzzy, c-format +#| msgid "error during file seek: %m" +msgid "error enumerating network interfaces: %m" +msgstr "erreur lors de la recherche dans le fichier : %m" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:865 +#: libpq/hba.c:888 #, c-format msgid "authentication option \"%s\" is only valid for authentication methods %s" msgstr "l'option d'authentification « %s » n'est valide que pour les méthodes d'authentification « %s »" -#: libpq/hba.c:885 +#: libpq/hba.c:890 libpq/hba.c:910 libpq/hba.c:948 libpq/hba.c:998 libpq/hba.c:1012 libpq/hba.c:1036 libpq/hba.c:1045 libpq/hba.c:1058 libpq/hba.c:1079 libpq/hba.c:1092 libpq/hba.c:1112 libpq/hba.c:1134 libpq/hba.c:1146 libpq/hba.c:1205 libpq/hba.c:1225 libpq/hba.c:1239 libpq/hba.c:1259 libpq/hba.c:1270 libpq/hba.c:1285 libpq/hba.c:1304 libpq/hba.c:1320 libpq/hba.c:1332 libpq/hba.c:1369 libpq/hba.c:1410 libpq/hba.c:1423 libpq/hba.c:1445 libpq/hba.c:1457 libpq/hba.c:1475 libpq/hba.c:1525 libpq/hba.c:1569 libpq/hba.c:1580 libpq/hba.c:1596 libpq/hba.c:1613 libpq/hba.c:1623 libpq/hba.c:1683 libpq/hba.c:1721 libpq/hba.c:1738 libpq/hba.c:1751 libpq/hba.c:1763 libpq/hba.c:1782 +#: libpq/hba.c:1869 libpq/hba.c:1887 libpq/hba.c:1981 libpq/hba.c:2000 libpq/hba.c:2029 libpq/hba.c:2042 libpq/hba.c:2065 libpq/hba.c:2087 libpq/hba.c:2101 tsearch/ts_locale.c:232 +#, c-format +msgid "line %d of configuration file \"%s\"" +msgstr "ligne %d du fichier de configuration « %s »" + +#: libpq/hba.c:908 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "la méthode d'authentification « %s » requiert un argument « %s » pour être mise en place" -#: libpq/hba.c:913 +#: libpq/hba.c:936 #, c-format msgid "missing entry in file \"%s\" at end of line %d" msgstr "entrée manquante dans le fichier « %s » à la fin de la ligne %d" -#: libpq/hba.c:924 +#: libpq/hba.c:947 #, c-format msgid "multiple values in ident field" msgstr "plusieurs valeurs dans le champ ident" -#: libpq/hba.c:973 +#: libpq/hba.c:996 #, c-format msgid "multiple values specified for connection type" msgstr "plusieurs valeurs indiquées pour le type de connexion" -#: libpq/hba.c:974 +#: libpq/hba.c:997 #, c-format msgid "Specify exactly one connection type per line." msgstr "Indiquez uniquement un type de connexion par ligne." -#: libpq/hba.c:988 +#: libpq/hba.c:1011 #, c-format msgid "local connections are not supported by this build" msgstr "les connexions locales ne sont pas supportées dans cette installation" -#: libpq/hba.c:1011 +#: libpq/hba.c:1034 #, c-format msgid "hostssl record cannot match because SSL is disabled" msgstr "l'enregistrement hostssl ne peut pas correspondre car SSL est désactivé" -#: libpq/hba.c:1012 +#: libpq/hba.c:1035 #, c-format msgid "Set ssl = on in postgresql.conf." msgstr "Configurez ssl = on dans le postgresql.conf." -#: libpq/hba.c:1020 +#: libpq/hba.c:1043 #, c-format msgid "hostssl record cannot match because SSL is not supported by this build" msgstr "l'enregistrement hostssl ne peut pas correspondre parce que SSL n'est pas supporté par cette installation" -#: libpq/hba.c:1021 -#, c-format -msgid "Compile with --with-openssl to use SSL connections." +#: libpq/hba.c:1044 +#, fuzzy, c-format +#| msgid "Compile with --with-openssl to use SSL connections." +msgid "Compile with --with-ssl to use SSL connections." msgstr "Compilez avec --with-openssl pour utiliser les connexions SSL." -#: libpq/hba.c:1033 +#: libpq/hba.c:1056 #, c-format msgid "hostgssenc record cannot match because GSSAPI is not supported by this build" msgstr "l'enregistrement hostgssenc ne peut pas correspondre parce que GSSAPI n'est pas supporté par cette installation" -#: libpq/hba.c:1034 +#: libpq/hba.c:1057 #, c-format msgid "Compile with --with-gssapi to use GSSAPI connections." msgstr "Compilez avec --with-gssapi pour utiliser les connexions GSSAPI." -#: libpq/hba.c:1054 +#: libpq/hba.c:1077 #, c-format msgid "invalid connection type \"%s\"" msgstr "type de connexion « %s » invalide" -#: libpq/hba.c:1068 +#: libpq/hba.c:1091 #, c-format msgid "end-of-line before database specification" msgstr "fin de ligne avant la spécification de la base de données" -#: libpq/hba.c:1088 +#: libpq/hba.c:1111 #, c-format msgid "end-of-line before role specification" msgstr "fin de ligne avant la spécification du rôle" -#: libpq/hba.c:1110 +#: libpq/hba.c:1133 #, c-format msgid "end-of-line before IP address specification" msgstr "fin de ligne avant la spécification de l'adresse IP" -#: libpq/hba.c:1121 +#: libpq/hba.c:1144 #, c-format msgid "multiple values specified for host address" msgstr "plusieurs valeurs indiquées pour l'adresse hôte" -#: libpq/hba.c:1122 +#: libpq/hba.c:1145 #, c-format msgid "Specify one address range per line." msgstr "Indiquez un sous-réseau par ligne." -#: libpq/hba.c:1177 +#: libpq/hba.c:1203 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "adresse IP « %s » invalide : %s" -#: libpq/hba.c:1197 +#: libpq/hba.c:1223 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "spécifier le nom d'hôte et le masque CIDR n'est pas valide : « %s »" -#: libpq/hba.c:1211 +#: libpq/hba.c:1237 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "masque CIDR invalide dans l'adresse « %s »" -#: libpq/hba.c:1230 +#: libpq/hba.c:1257 #, c-format msgid "end-of-line before netmask specification" msgstr "fin de ligne avant la spécification du masque réseau" -#: libpq/hba.c:1231 +#: libpq/hba.c:1258 #, c-format msgid "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "Indiquez un sous-réseau en notation CIDR ou donnez un masque réseau séparé." -#: libpq/hba.c:1242 +#: libpq/hba.c:1269 #, c-format msgid "multiple values specified for netmask" msgstr "plusieurs valeurs indiquées pour le masque réseau" -#: libpq/hba.c:1256 +#: libpq/hba.c:1283 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "masque IP « %s » invalide : %s" -#: libpq/hba.c:1275 +#: libpq/hba.c:1303 #, c-format msgid "IP address and mask do not match" msgstr "l'adresse IP et le masque ne correspondent pas" -#: libpq/hba.c:1291 +#: libpq/hba.c:1319 #, c-format msgid "end-of-line before authentication method" msgstr "fin de ligne avant la méthode d'authentification" -#: libpq/hba.c:1302 +#: libpq/hba.c:1330 #, c-format msgid "multiple values specified for authentication type" msgstr "plusieurs valeurs indiquées pour le type d'authentification" -#: libpq/hba.c:1303 +#: libpq/hba.c:1331 #, c-format msgid "Specify exactly one authentication type per line." msgstr "Indiquez uniquement un type d'authentification par ligne." -#: libpq/hba.c:1380 +#: libpq/hba.c:1408 #, c-format msgid "invalid authentication method \"%s\"" msgstr "méthode d'authentification « %s » invalide" -#: libpq/hba.c:1393 +#: libpq/hba.c:1421 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "" "méthode d'authentification « %s » invalide : non supportée sur cette\n" "installation" -#: libpq/hba.c:1416 +#: libpq/hba.c:1444 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "" "l'authentification gssapi n'est pas supportée sur les connexions locales par\n" "socket" -#: libpq/hba.c:1429 -#, c-format -msgid "GSSAPI encryption only supports gss, trust, or reject authentication" -msgstr "le chiffrement GSSAPI ne supporte que l'authentification gss, trust ou reject" - -#: libpq/hba.c:1441 +#: libpq/hba.c:1456 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "" "l'authentification peer est seulement supportée sur les connexions locales par\n" "socket" -#: libpq/hba.c:1459 +#: libpq/hba.c:1474 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "l'authentification cert est seulement supportée sur les connexions hostssl" -#: libpq/hba.c:1509 +#: libpq/hba.c:1524 #, c-format msgid "authentication option not in name=value format: %s" msgstr "l'option d'authentification n'est pas dans le format nom=valeur : %s" -#: libpq/hba.c:1553 +#: libpq/hba.c:1568 #, c-format msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" msgstr "ne peut pas utiliser ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchattribute ou ldapurl avec ldapprefix" -#: libpq/hba.c:1564 +#: libpq/hba.c:1579 #, c-format msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" msgstr "la méthode d'authentification « ldap » requiert un argument « ldapbasedn », « ldapprefix » ou « ldapsuffix » pour être mise en place" -#: libpq/hba.c:1580 +#: libpq/hba.c:1595 #, c-format msgid "cannot use ldapsearchattribute together with ldapsearchfilter" msgstr "ne peut pas utiliser ldapsearchattribute avec ldapsearchfilter" -#: libpq/hba.c:1597 +#: libpq/hba.c:1612 #, c-format msgid "list of RADIUS servers cannot be empty" msgstr "la liste de serveurs RADIUS ne peut pas être vide" -#: libpq/hba.c:1607 +#: libpq/hba.c:1622 #, c-format msgid "list of RADIUS secrets cannot be empty" msgstr "la liste des secrets RADIUS ne peut pas être vide" -#: libpq/hba.c:1660 +#: libpq/hba.c:1677 #, c-format msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" msgstr "le nombre de %s (%d) doit valoir 1 ou être identique au nombre de %s (%d)" -#: libpq/hba.c:1694 +#: libpq/hba.c:1711 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi et cert" -#: libpq/hba.c:1703 +#: libpq/hba.c:1720 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert ne peut être configuré que pour les lignes « hostssl »" -#: libpq/hba.c:1725 +#: libpq/hba.c:1737 #, c-format -msgid "clientcert can not be set to \"no-verify\" when using \"cert\" authentication" -msgstr "clientcert ne peut être positionné à « no-verify » si vous utilisez l'authentification « cert »" +msgid "clientcert only accepts \"verify-full\" when using \"cert\" authentication" +msgstr "clientcert accepte seulement « verify-full » lors de l'utilisation de l'authentification « cert »" -#: libpq/hba.c:1737 +#: libpq/hba.c:1750 #, c-format msgid "invalid value for clientcert: \"%s\"" msgstr "valeur invalide pour clientcert : « %s »" -#: libpq/hba.c:1771 +#: libpq/hba.c:1762 +#, c-format +msgid "clientname can only be configured for \"hostssl\" rows" +msgstr "clientname peut seulement être configuré pour les lignes « hostssl »" + +#: libpq/hba.c:1781 +#, c-format +msgid "invalid value for clientname: \"%s\"" +msgstr "valeur invalide pour clientname : « %s »" + +#: libpq/hba.c:1815 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "n'a pas pu analyser l'URL LDAP « %s » : %s" -#: libpq/hba.c:1782 +#: libpq/hba.c:1826 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "méthode URL LDAP non supporté : %s" -#: libpq/hba.c:1806 +#: libpq/hba.c:1850 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "URLs LDAP non supportées sur cette plateforme" -#: libpq/hba.c:1824 +#: libpq/hba.c:1868 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "valeur ldapscheme invalide : « %s »" -#: libpq/hba.c:1842 +#: libpq/hba.c:1886 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "numéro de port LDAP invalide : « %s »" -#: libpq/hba.c:1888 libpq/hba.c:1895 +#: libpq/hba.c:1932 libpq/hba.c:1939 msgid "gssapi and sspi" msgstr "gssapi et sspi" -#: libpq/hba.c:1904 libpq/hba.c:1913 +#: libpq/hba.c:1948 libpq/hba.c:1957 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:1935 +#: libpq/hba.c:1979 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "n'a pas pu analyser la liste de serveurs RADIUS « %s »" -#: libpq/hba.c:1983 +#: libpq/hba.c:2027 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "n'a pas pu analyser la liste de ports RADIUS « %s »" -#: libpq/hba.c:1997 +#: libpq/hba.c:2041 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "numéro de port RADIUS invalide : « %s »" -#: libpq/hba.c:2019 +#: libpq/hba.c:2063 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "n'a pas pu analyser la liste de secrets RADIUS « %s »" -#: libpq/hba.c:2041 +#: libpq/hba.c:2085 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "n'a pas pu analyser la liste des identifieurs RADIUS « %s »" -#: libpq/hba.c:2055 +#: libpq/hba.c:2099 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "nom d'option de l'authentification inconnu : « %s »" -#: libpq/hba.c:2250 +#: libpq/hba.c:2296 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "le fichier de configuration « %s » ne contient aucun enregistrement" -#: libpq/hba.c:2769 +#: libpq/hba.c:2814 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "expression rationnelle invalide « %s » : %s" -#: libpq/hba.c:2829 +#: libpq/hba.c:2874 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "la correspondance de l'expression rationnelle pour « %s » a échoué : %s" -#: libpq/hba.c:2848 +#: libpq/hba.c:2893 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "" "l'expression rationnelle « %s » n'a pas de sous-expressions comme celle\n" "demandée par la référence dans « %s »" -#: libpq/hba.c:2945 +#: libpq/hba.c:2989 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "" "le nom d'utilisateur (%s) et le nom d'utilisateur authentifié (%s) fournis ne\n" "correspondent pas" -#: libpq/hba.c:2965 +#: libpq/hba.c:3009 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "" "pas de correspondance dans la usermap « %s » pour l'utilisateur « %s »\n" "authentifié en tant que « %s »" -#: libpq/hba.c:2998 +#: libpq/hba.c:3042 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier usermap « %s » : %m" -#: libpq/pqcomm.c:220 +#: libpq/pqcomm.c:204 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "n'a pas pu activer le mode non-bloquant pour la socket : %m" -#: libpq/pqcomm.c:374 +#: libpq/pqcomm.c:362 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "Le chemin du socket de domaine Unix, « %s », est trop (maximum %d octets)" -#: libpq/pqcomm.c:395 +#: libpq/pqcomm.c:383 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "n'a pas pu résoudre le nom de l'hôte « %s », service « %s » par l'adresse : %s" -#: libpq/pqcomm.c:399 +#: libpq/pqcomm.c:387 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "n'a pas pu résoudre le service « %s » par l'adresse : %s" -#: libpq/pqcomm.c:426 +#: libpq/pqcomm.c:414 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "n'a pas pu se lier à toutes les adresses requises : MAXLISTEN (%d) dépassé" -#: libpq/pqcomm.c:435 +#: libpq/pqcomm.c:423 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:439 +#: libpq/pqcomm.c:427 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:444 +#: libpq/pqcomm.c:432 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:449 +#: libpq/pqcomm.c:437 #, c-format msgid "unrecognized address family %d" msgstr "famille d'adresse %d non reconnue" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:475 +#: libpq/pqcomm.c:463 #, c-format msgid "could not create %s socket for address \"%s\": %m" msgstr "n'a pas pu créer le socket %s pour l'adresse « %s » : %m" -#. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:501 -#, c-format -msgid "setsockopt(SO_REUSEADDR) failed for %s address \"%s\": %m" -msgstr "setsockopt(SO_REUSEADDR) a échoué pour %s, adresse « %s » : %m" - -#. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:518 +#. translator: third %s is IPv4, IPv6, or Unix +#: libpq/pqcomm.c:489 libpq/pqcomm.c:507 #, c-format -msgid "setsockopt(IPV6_V6ONLY) failed for %s address \"%s\": %m" -msgstr "setsockopt(IPV6_V6ONLY) a échoué pour %s, adresse « %s » : %m" +msgid "%s(%s) failed for %s address \"%s\": %m" +msgstr "%s(%s) a échoué pour %s, adresse « %s » : %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:538 +#: libpq/pqcomm.c:530 #, c-format msgid "could not bind %s address \"%s\": %m" msgstr "n'a pas pu lier %s à l'adresse « %s » : %m" -#: libpq/pqcomm.c:541 +#: libpq/pqcomm.c:534 #, c-format -msgid "Is another postmaster already running on port %d? If not, remove socket file \"%s\" and retry." -msgstr "Un autre postmaster fonctionne-t'il déjà sur le port %d ?Sinon, supprimez le fichier socket « %s » et réessayez." +msgid "Is another postmaster already running on port %d?" +msgstr "Un autre postmaster fonctionne-t'il déjà sur le port %d ?" -#: libpq/pqcomm.c:544 +#: libpq/pqcomm.c:536 #, c-format msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." msgstr "" @@ -13823,18 +14544,18 @@ msgstr "" "Sinon, attendez quelques secondes et réessayez." #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:577 +#: libpq/pqcomm.c:569 #, c-format msgid "could not listen on %s address \"%s\": %m" msgstr "n'a pas pu écouter sur « %s », adresse « %s » : %m" -#: libpq/pqcomm.c:586 +#: libpq/pqcomm.c:578 #, c-format msgid "listening on Unix socket \"%s\"" msgstr "écoute sur la socket Unix « %s »" #. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:592 +#: libpq/pqcomm.c:584 #, c-format msgid "listening on %s address \"%s\", port %d" msgstr "en écoute sur %s, adresse « %s », port %d" @@ -13859,47 +14580,75 @@ msgstr "n'a pas pu initialiser les droits du fichier « %s » : %m" msgid "could not accept new connection: %m" msgstr "n'a pas pu accepter la nouvelle connexion : %m" -#: libpq/pqcomm.c:928 +#: libpq/pqcomm.c:766 libpq/pqcomm.c:775 libpq/pqcomm.c:807 libpq/pqcomm.c:817 libpq/pqcomm.c:1630 libpq/pqcomm.c:1675 libpq/pqcomm.c:1715 libpq/pqcomm.c:1759 libpq/pqcomm.c:1798 libpq/pqcomm.c:1837 libpq/pqcomm.c:1873 libpq/pqcomm.c:1912 postmaster/pgstat.c:621 postmaster/pgstat.c:632 +#, c-format +msgid "%s(%s) failed: %m" +msgstr "échec de %s(%s) : %m" + +#: libpq/pqcomm.c:921 #, c-format msgid "there is no client connection" msgstr "il n'y a pas de connexion client" -#: libpq/pqcomm.c:979 libpq/pqcomm.c:1075 +#: libpq/pqcomm.c:972 libpq/pqcomm.c:1068 #, c-format msgid "could not receive data from client: %m" msgstr "n'a pas pu recevoir les données du client : %m" -#: libpq/pqcomm.c:1220 tcop/postgres.c:4074 +#: libpq/pqcomm.c:1161 tcop/postgres.c:4280 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "arrêt de la connexion à cause d'une perte de synchronisation du protocole" -#: libpq/pqcomm.c:1286 +#: libpq/pqcomm.c:1227 #, c-format msgid "unexpected EOF within message length word" msgstr "fin de fichier (EOF) inattendue à l'intérieur de la longueur du message" -#: libpq/pqcomm.c:1297 +#: libpq/pqcomm.c:1237 #, c-format msgid "invalid message length" msgstr "longueur du message invalide" -#: libpq/pqcomm.c:1319 libpq/pqcomm.c:1332 +#: libpq/pqcomm.c:1259 libpq/pqcomm.c:1272 #, c-format msgid "incomplete message from client" msgstr "message incomplet du client" -#: libpq/pqcomm.c:1465 +#: libpq/pqcomm.c:1383 #, c-format msgid "could not send data to client: %m" msgstr "n'a pas pu envoyer les données au client : %m" +#: libpq/pqcomm.c:1598 +#, c-format +msgid "%s(%s) failed: error code %d" +msgstr "échec de %s(%s) : code d'erreur %d" + +# /* +# * Check for old recovery API file: recovery.conf +# */ +#: libpq/pqcomm.c:1687 +#, c-format +msgid "setting the keepalive idle time is not supported" +msgstr "configurer le temps d'attente du keepalive n'est pas supporté" + +#: libpq/pqcomm.c:1771 libpq/pqcomm.c:1846 libpq/pqcomm.c:1921 +#, c-format +msgid "%s(%s) not supported" +msgstr "%s(%s) non supporté" + +#: libpq/pqcomm.c:1956 +#, c-format +msgid "could not poll socket: %m" +msgstr "n'a pas pu interroger la socket : %m" + #: libpq/pqformat.c:406 #, c-format msgid "no data left in message" msgstr "pas de données dans le message" -#: libpq/pqformat.c:517 libpq/pqformat.c:535 libpq/pqformat.c:556 utils/adt/arrayfuncs.c:1470 utils/adt/rowtypes.c:567 +#: libpq/pqformat.c:517 libpq/pqformat.c:535 libpq/pqformat.c:556 utils/adt/arrayfuncs.c:1492 utils/adt/rowtypes.c:588 #, c-format msgid "insufficient data left in message" msgstr "données insuffisantes laissées dans le message" @@ -13914,12 +14663,12 @@ msgstr "chaîne invalide dans le message" msgid "invalid message format" msgstr "format du message invalide" -#: main/main.c:264 +#: main/main.c:245 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s : WSAStartup a échoué : %d\n" -#: main/main.c:328 +#: main/main.c:309 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -13928,7 +14677,7 @@ msgstr "" "%s est le serveur PostgreSQL.\n" "\n" -#: main/main.c:329 +#: main/main.c:310 #, c-format msgid "" "Usage:\n" @@ -13939,114 +14688,109 @@ msgstr "" " %s [OPTION]...\n" "\n" -#: main/main.c:330 +#: main/main.c:311 #, c-format msgid "Options:\n" msgstr "Options :\n" -#: main/main.c:331 +#: main/main.c:312 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS nombre de tampons partagés (shared buffers)\n" -#: main/main.c:332 +#: main/main.c:313 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c NOM=VALEUR configure un paramètre d'exécution\n" -#: main/main.c:333 +#: main/main.c:314 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr "" " -C NOM affiche la valeur d'un paramètre en exécution,\n" " puis quitte\n" -#: main/main.c:334 +#: main/main.c:315 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 niveau de débogage\n" -#: main/main.c:335 +#: main/main.c:316 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D RÉPDONNEES répertoire de la base de données\n" -#: main/main.c:336 +#: main/main.c:317 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e utilise le format européen de saisie des dates (DMY)\n" -#: main/main.c:337 +#: main/main.c:318 #, c-format msgid " -F turn fsync off\n" msgstr " -F désactive fsync\n" -#: main/main.c:338 +#: main/main.c:319 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h NOMHÔTE nom d'hôte ou adresse IP à écouter\n" -#: main/main.c:339 +#: main/main.c:320 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i active les connexions TCP/IP\n" -#: main/main.c:340 +#: main/main.c:321 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k RÉPERTOIRE emplacement des sockets de domaine Unix\n" -#: main/main.c:342 +#: main/main.c:323 #, c-format msgid " -l enable SSL connections\n" msgstr " -l active les connexions SSL\n" -#: main/main.c:344 +#: main/main.c:325 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N MAX-CONNECT nombre maximum de connexions simultanées\n" -#: main/main.c:345 -#, c-format -msgid " -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n" -msgstr " -o OPTIONS passe « OPTIONS » à chaque processus serveur (obsolète)\n" - -#: main/main.c:346 +#: main/main.c:326 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT numéro du port à écouter\n" -#: main/main.c:347 +#: main/main.c:327 #, c-format msgid " -s show statistics after each query\n" msgstr " -s affiche les statistiques après chaque requête\n" -#: main/main.c:348 +#: main/main.c:328 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S WORK-MEM configure la mémoire pour les tris (en ko)\n" -#: main/main.c:349 +#: main/main.c:329 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version et quitte\n" -#: main/main.c:350 +#: main/main.c:330 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NOM=VALEUR configure un paramètre d'exécution\n" -#: main/main.c:351 +#: main/main.c:331 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config décrit les paramètres de configuration, puis quitte\n" -#: main/main.c:352 +#: main/main.c:332 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide et quitte\n" -#: main/main.c:354 +#: main/main.c:334 #, c-format msgid "" "\n" @@ -14055,50 +14799,50 @@ msgstr "" "\n" "Options pour le développeur :\n" -#: main/main.c:355 +#: main/main.c:335 #, c-format msgid " -f s|i|n|m|h forbid use of some plan types\n" msgstr " -f s|i|n|m|h interdit l'utilisation de certains types de plan\n" -#: main/main.c:356 +#: main/main.c:336 #, c-format msgid " -n do not reinitialize shared memory after abnormal exit\n" msgstr "" " -n ne réinitialise pas la mémoire partagée après un arrêt\n" " brutal\n" -#: main/main.c:357 +#: main/main.c:337 #, c-format msgid " -O allow system table structure changes\n" msgstr "" " -O autorise les modifications de structure des tables\n" " système\n" -#: main/main.c:358 +#: main/main.c:338 #, c-format msgid " -P disable system indexes\n" msgstr " -P désactive les index systèmes\n" -#: main/main.c:359 +#: main/main.c:339 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex affiche les horodatages pour chaque requête\n" -#: main/main.c:360 +#: main/main.c:340 #, c-format msgid " -T send SIGSTOP to all backend processes if one dies\n" msgstr "" " -T envoie SIGSTOP à tous les processus serveur si l'un\n" " d'entre eux meurt\n" -#: main/main.c:361 +#: main/main.c:341 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr "" " -W NUM attends NUM secondes pour permettre l'attache d'un\n" " débogueur\n" -#: main/main.c:363 +#: main/main.c:343 #, c-format msgid "" "\n" @@ -14107,41 +14851,41 @@ msgstr "" "\n" "Options pour le mode mono-utilisateur :\n" -#: main/main.c:364 +#: main/main.c:344 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr "" " --single sélectionne le mode mono-utilisateur (doit être le\n" " premier argument)\n" -#: main/main.c:365 +#: main/main.c:345 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " NOMBASE nom de la base (par défaut, le même que l'utilisateur)\n" -#: main/main.c:366 +#: main/main.c:346 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 surcharge le niveau de débogage\n" -#: main/main.c:367 +#: main/main.c:347 #, c-format msgid " -E echo statement before execution\n" msgstr " -E affiche la requête avant de l'exécuter\n" -#: main/main.c:368 +#: main/main.c:348 #, c-format msgid " -j do not use newline as interactive query delimiter\n" msgstr "" " -j n'utilise pas le retour à la ligne comme délimiteur de\n" " requête\n" -#: main/main.c:369 main/main.c:374 +#: main/main.c:349 main/main.c:354 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r FICHIER envoie stdout et stderr dans le fichier indiqué\n" -#: main/main.c:371 +#: main/main.c:351 #, c-format msgid "" "\n" @@ -14150,26 +14894,26 @@ msgstr "" "\n" "Options pour le mode « bootstrapping » :\n" -#: main/main.c:372 +#: main/main.c:352 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr "" " --boot sélectionne le mode « bootstrapping » (doit être le\n" " premier argument)\n" -#: main/main.c:373 +#: main/main.c:353 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr "" " NOMBASE nom de la base (argument obligatoire dans le mode\n" " « bootstrapping »)\n" -#: main/main.c:375 +#: main/main.c:355 #, c-format msgid " -x NUM internal use\n" msgstr " -x NUM utilisation interne\n" -#: main/main.c:377 +#: main/main.c:357 #, c-format msgid "" "\n" @@ -14177,16 +14921,21 @@ msgid "" "configuration settings and how to set them on the command line or in\n" "the configuration file.\n" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" "Merci de lire la documentation pour la liste complète des paramètres\n" "de configuration et pour savoir comment les configurer sur la\n" "ligne de commande ou dans le fichier de configuration.\n" "\n" -"Rapportez les bogues à .\n" +"Rapportez les bogues à <%s>.\n" + +#: main/main.c:361 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "page d'accueil de %s : <%s>\n" -#: main/main.c:391 +#: main/main.c:372 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -14199,12 +14948,12 @@ msgstr "" "tout problème possible de sécurité sur le serveur. Voir la documentation pour\n" "plus d'informations sur le lancement propre du serveur.\n" -#: main/main.c:408 +#: main/main.c:389 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s : les identifiants réel et effectif de l'utilisateur doivent correspondre\n" -#: main/main.c:415 +#: main/main.c:396 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -14228,12 +14977,27 @@ msgstr "le type de nœud extensible « %s » existe déjà" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods \"%s\" n'a pas été enregistré" -#: nodes/nodeFuncs.c:123 nodes/nodeFuncs.c:154 parser/parse_coerce.c:1915 parser/parse_coerce.c:1943 parser/parse_coerce.c:2019 parser/parse_expr.c:2201 parser/parse_func.c:705 parser/parse_oper.c:967 +#: nodes/makefuncs.c:150 +#, c-format +msgid "relation \"%s\" does not have a composite type" +msgstr "la relation « %s » n'a pas un type composite" + +#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2472 parser/parse_coerce.c:2584 parser/parse_coerce.c:2630 parser/parse_expr.c:2021 parser/parse_func.c:709 parser/parse_oper.c:883 utils/fmgr/funcapi.c:558 #, c-format msgid "could not find array type for data type %s" msgstr "n'a pas pu trouver de type tableau pour le type de données %s" -#: optimizer/path/joinrels.c:833 +#: nodes/params.c:417 +#, c-format +msgid "portal \"%s\" with parameters: %s" +msgstr "portail « %s » avec les paramètres : %s" + +#: nodes/params.c:420 +#, c-format +msgid "unnamed portal with parameters: %s" +msgstr "portail non nommé avec les paramètres : « %s »" + +#: optimizer/path/joinrels.c:855 #, c-format msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join conditions" msgstr "" @@ -14241,123 +15005,123 @@ msgstr "" "jointures HASH JOIN" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1195 +#: optimizer/plan/initsplan.c:1192 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s ne peut être appliqué sur le côté possiblement NULL d'une jointure externe" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1912 parser/analyze.c:1644 parser/analyze.c:1842 parser/analyze.c:2700 +#: optimizer/plan/planner.c:1315 parser/analyze.c:1675 parser/analyze.c:1919 parser/analyze.c:3013 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s n'est pas autorisé avec UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:2498 optimizer/plan/planner.c:4157 +#: optimizer/plan/planner.c:1978 optimizer/plan/planner.c:3634 #, c-format msgid "could not implement GROUP BY" msgstr "n'a pas pu implanter GROUP BY" -#: optimizer/plan/planner.c:2499 optimizer/plan/planner.c:4158 optimizer/plan/planner.c:4896 optimizer/prep/prepunion.c:1042 +#: optimizer/plan/planner.c:1979 optimizer/plan/planner.c:3635 optimizer/plan/planner.c:4392 optimizer/prep/prepunion.c:1046 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "" "Certains des types de données supportent seulement le hachage,\n" "alors que les autres supportent seulement le tri." -#: optimizer/plan/planner.c:4895 +#: optimizer/plan/planner.c:4391 #, c-format msgid "could not implement DISTINCT" msgstr "n'a pas pu implanter DISTINCT" -#: optimizer/plan/planner.c:5630 +#: optimizer/plan/planner.c:5239 #, c-format msgid "could not implement window PARTITION BY" msgstr "n'a pas pu implanter PARTITION BY de window" -#: optimizer/plan/planner.c:5631 +#: optimizer/plan/planner.c:5240 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "" "Les colonnes de partitionnement de window doivent être d'un type de données\n" "triables." -#: optimizer/plan/planner.c:5635 +#: optimizer/plan/planner.c:5244 #, c-format msgid "could not implement window ORDER BY" msgstr "n'a pas pu implanter ORDER BY dans le window" -#: optimizer/plan/planner.c:5636 +#: optimizer/plan/planner.c:5245 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Les colonnes de tri de la window doivent être d'un type de données triable." -#: optimizer/plan/setrefs.c:425 +#: optimizer/plan/setrefs.c:479 #, c-format msgid "too many range table entries" msgstr "trop d'enregistrements dans la table range" -#: optimizer/prep/prepunion.c:505 +#: optimizer/prep/prepunion.c:509 #, c-format msgid "could not implement recursive UNION" msgstr "n'a pas pu implanter le UNION récursif" -#: optimizer/prep/prepunion.c:506 +#: optimizer/prep/prepunion.c:510 #, c-format msgid "All column datatypes must be hashable." msgstr "Tous les types de données des colonnes doivent être hachables." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1041 +#: optimizer/prep/prepunion.c:1045 #, c-format msgid "could not implement %s" msgstr "n'a pas pu implanter %s" -#: optimizer/util/clauses.c:4781 +#: optimizer/util/clauses.c:4670 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "fonction SQL « %s » durant « inlining »" -#: optimizer/util/plancat.c:130 +#: optimizer/util/plancat.c:133 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "ne peut pas accéder à des tables temporaires et non tracées lors de la restauration" -#: optimizer/util/plancat.c:650 +#: optimizer/util/plancat.c:681 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "les spécifications d'inférence d'index unique pour une ligne entière ne sont pas supportées" -#: optimizer/util/plancat.c:667 +#: optimizer/util/plancat.c:698 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "la contrainte de la clause ON CONFLICT n'a pas d'index associé" -#: optimizer/util/plancat.c:717 +#: optimizer/util/plancat.c:748 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "ON CONFLICT DO UPDATE non supporté avec les contraintes d'exclusion" -#: optimizer/util/plancat.c:822 +#: optimizer/util/plancat.c:853 #, c-format msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "il n'existe aucune contrainte unique ou contrainte d'exclusion correspondant à la spécification ON CONFLICT" -#: parser/analyze.c:711 parser/analyze.c:1407 +#: parser/analyze.c:735 parser/analyze.c:1449 #, c-format msgid "VALUES lists must all be the same length" msgstr "les listes VALUES doivent être toutes de la même longueur" -#: parser/analyze.c:914 +#: parser/analyze.c:936 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT a plus d'expressions que les colonnes cibles" -#: parser/analyze.c:932 +#: parser/analyze.c:954 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERT a plus de colonnes cibles que d'expressions" -#: parser/analyze.c:936 +#: parser/analyze.c:958 #, c-format msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "" @@ -14365,193 +15129,206 @@ msgstr "" "de colonnes que celui attendu par INSERT. Auriez-vous utilisé des parenthèses\n" "supplémentaires ?" -#: parser/analyze.c:1218 parser/analyze.c:1617 +#: parser/analyze.c:1257 parser/analyze.c:1648 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO n'est pas autorisé ici" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1549 parser/analyze.c:2879 +#: parser/analyze.c:1578 parser/analyze.c:3192 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s ne peut pas être appliqué à VALUES" -#: parser/analyze.c:1767 +#: parser/analyze.c:1814 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "clause UNION/INTERSECT/EXCEPT ORDER BY invalide" -#: parser/analyze.c:1768 +#: parser/analyze.c:1815 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "" "Seuls les noms de colonnes résultats peuvent être utilisés, pas les\n" "expressions et les fonctions." -#: parser/analyze.c:1769 +#: parser/analyze.c:1816 #, c-format msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." msgstr "Ajouter l'expression/fonction à chaque SELECT, ou déplacer l'UNION dans une clause FROM." -#: parser/analyze.c:1832 +#: parser/analyze.c:1909 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTO est autorisé uniquement sur le premier SELECT d'un UNION/INTERSECT/EXCEPT" -#: parser/analyze.c:1904 +#: parser/analyze.c:1981 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "" "L'instruction membre UNION/INTERSECT/EXCEPT ne peut pas faire référence à\n" "d'autres relations que celles de la requête de même niveau" -#: parser/analyze.c:1993 +#: parser/analyze.c:2068 #, c-format msgid "each %s query must have the same number of columns" msgstr "chaque requête %s doit avoir le même nombre de colonnes" -#: parser/analyze.c:2411 +#: parser/analyze.c:2468 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNING doit avoir au moins une colonne" -#: parser/analyze.c:2452 +#: parser/analyze.c:2571 +#, c-format +msgid "assignment source returned %d column" +msgid_plural "assignment source returned %d columns" +msgstr[0] "la source d'affectation a renvoyé %d colonne" +msgstr[1] "la source d'affectation a renvoyé %d colonnes" + +#: parser/analyze.c:2632 #, c-format -msgid "cannot specify both SCROLL and NO SCROLL" -msgstr "ne peut pas spécifier à la fois SCROLL et NO SCROLL" +msgid "variable \"%s\" is of type %s but expression is of type %s" +msgstr "la variable « %s » est de type %s mais l'expression est de type %s" -#: parser/analyze.c:2471 +#. translator: %s is a SQL keyword +#: parser/analyze.c:2756 parser/analyze.c:2764 +#, c-format +msgid "cannot specify both %s and %s" +msgstr "ne peut pas spécifier à la fois %s et %s" + +#: parser/analyze.c:2784 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR ne doit pas contenir des instructions de modification de données dans WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2479 +#: parser/analyze.c:2792 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s n'est pas supporté" -#: parser/analyze.c:2482 +#: parser/analyze.c:2795 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "Les curseurs détenables doivent être en lecture seule (READ ONLY)." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2490 +#: parser/analyze.c:2803 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s n'est pas supporté" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2501 +#: parser/analyze.c:2814 #, c-format -msgid "DECLARE INSENSITIVE CURSOR ... %s is not supported" -msgstr "DECLARE INSENSITIVE CURSOR ... %s n'est pas supporté" +msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" +msgstr "DECLARE INSENSITIVE CURSOR ... %s n'est pas valide" -#: parser/analyze.c:2504 +#: parser/analyze.c:2817 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Les curseurs insensibles doivent être en lecture seule (READ ONLY)." -#: parser/analyze.c:2570 +#: parser/analyze.c:2883 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "les vues matérialisées ne peuvent pas contenir d'instructions de modifications de données avec WITH" -#: parser/analyze.c:2580 +#: parser/analyze.c:2893 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "les vues matérialisées ne doivent pas utiliser de tables temporaires ou de vues" -#: parser/analyze.c:2590 +#: parser/analyze.c:2903 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "les vues matérialisées ne peuvent pas être définies en utilisant des paramètres liés" -#: parser/analyze.c:2602 +#: parser/analyze.c:2915 #, c-format msgid "materialized views cannot be unlogged" msgstr "les vues matérialisées ne peuvent pas être non journalisées (UNLOGGED)" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2707 +#: parser/analyze.c:3020 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s n'est pas autorisé avec la clause DISTINCT" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2714 +#: parser/analyze.c:3027 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s n'est pas autorisé avec la clause GROUP BY" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2721 +#: parser/analyze.c:3034 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s n'est pas autorisé avec la clause HAVING" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2728 +#: parser/analyze.c:3041 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s n'est pas autorisé avec les fonctions d'agrégat" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2735 +#: parser/analyze.c:3048 #, c-format msgid "%s is not allowed with window functions" msgstr "%s n'est pas autorisé avec les fonctions de fenêtrage" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2742 +#: parser/analyze.c:3055 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "%s n'est pas autorisé avec les fonctions renvoyant plusieurs lignes dans la liste cible" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2821 +#: parser/analyze.c:3134 #, c-format msgid "%s must specify unqualified relation names" msgstr "%s doit indiquer les noms de relation non qualifiés" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2852 +#: parser/analyze.c:3165 #, c-format msgid "%s cannot be applied to a join" msgstr "%s ne peut pas être appliqué à une jointure" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2861 +#: parser/analyze.c:3174 #, c-format msgid "%s cannot be applied to a function" msgstr "%s ne peut pas être appliqué à une fonction" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2870 +#: parser/analyze.c:3183 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s ne peut pas être appliqué à une fonction de table" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2888 +#: parser/analyze.c:3201 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s ne peut pas être appliqué à une requête WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2897 +#: parser/analyze.c:3210 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%s ne peut pas être appliqué à une tuplestore nommé" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2917 +#: parser/analyze.c:3230 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "relation « %s » dans une clause %s introuvable dans la clause FROM" -#: parser/parse_agg.c:220 parser/parse_oper.c:222 +#: parser/parse_agg.c:220 parser/parse_oper.c:227 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "n'a pas pu identifier un opérateur de tri pour le type %s" @@ -14655,1067 +15432,1234 @@ msgid "grouping operations are not allowed in index predicates" msgstr "les fonctions de regroupement ne sont pas autorisés dans les prédicats d'index" #: parser/parse_agg.c:490 +msgid "aggregate functions are not allowed in statistics expressions" +msgstr "les fonctions d'agrégat ne sont pas autorisées dans les expressions statistiques" + +#: parser/parse_agg.c:492 +msgid "grouping operations are not allowed in statistics expressions" +msgstr "les fonctions de regroupement ne sont pas autorisées dans les expressions statistiques" + +#: parser/parse_agg.c:497 msgid "aggregate functions are not allowed in transform expressions" msgstr "les fonctions d'agrégat ne sont pas autorisées dans les expressions de transformation" -#: parser/parse_agg.c:492 +#: parser/parse_agg.c:499 msgid "grouping operations are not allowed in transform expressions" msgstr "les fonctions de regroupement ne sont pas autorisés dans les expressions de transformation" -#: parser/parse_agg.c:497 +#: parser/parse_agg.c:504 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "les fonctions d'agrégat ne sont pas autorisées dans les paramètres d'EXECUTE" -#: parser/parse_agg.c:499 +#: parser/parse_agg.c:506 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "les fonctions de regroupement ne sont pas autorisés dans les paramètres d'EXECUTE" -#: parser/parse_agg.c:504 +#: parser/parse_agg.c:511 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "les fonctions d'agrégat ne sont pas autorisées dans les conditions WHEN des triggers" -#: parser/parse_agg.c:506 +#: parser/parse_agg.c:513 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "les fonctions de regroupement ne sont pas autorisés dans les conditions WHEN des triggers" -#: parser/parse_agg.c:511 +#: parser/parse_agg.c:518 msgid "aggregate functions are not allowed in partition bound" msgstr "les fonctions d'agrégat ne sont pas autorisées dans les limites de partition" -#: parser/parse_agg.c:513 +#: parser/parse_agg.c:520 msgid "grouping operations are not allowed in partition bound" msgstr "les opérations de regroupement ne sont pas autorisées dans les limites de partition" -#: parser/parse_agg.c:518 +#: parser/parse_agg.c:525 msgid "aggregate functions are not allowed in partition key expressions" msgstr "les fonctions d'agrégat ne sont pas autorisées dans les expressions de clé de partitionnement" -#: parser/parse_agg.c:520 +#: parser/parse_agg.c:527 msgid "grouping operations are not allowed in partition key expressions" msgstr "les opérations de regroupement ne sont pas autorisées dans les expressions de clé de partitionnement" -#: parser/parse_agg.c:526 +#: parser/parse_agg.c:533 msgid "aggregate functions are not allowed in column generation expressions" msgstr "les fonctions d'agrégat ne sont pas autorisées dans les expressions de génération de colonne" -#: parser/parse_agg.c:528 +#: parser/parse_agg.c:535 msgid "grouping operations are not allowed in column generation expressions" msgstr "les fonctions de regroupement ne sont pas autorisées dans les expressions de génération de colonne" -#: parser/parse_agg.c:534 +#: parser/parse_agg.c:541 msgid "aggregate functions are not allowed in CALL arguments" msgstr "les fonctions d'agrégat ne sont pas autorisées dans les arguments de CALL" -#: parser/parse_agg.c:536 +#: parser/parse_agg.c:543 msgid "grouping operations are not allowed in CALL arguments" msgstr "les fonctions de regroupement ne sont pas autorisés dans les arguments de CALL" -#: parser/parse_agg.c:542 +#: parser/parse_agg.c:549 msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" msgstr "les fonctions d'agrégat ne sont pas autorisées dans les conditions de COPY FROM WHERE" -#: parser/parse_agg.c:544 +#: parser/parse_agg.c:551 msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "les fonctions de regroupement ne sont pas autorisées dans les conditions WHERE d'un COPY FROM" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:567 parser/parse_clause.c:1778 +#: parser/parse_agg.c:578 parser/parse_clause.c:1847 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "les fonctions d'agrégat ne sont pas autorisées dans %s" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:570 +#: parser/parse_agg.c:581 #, c-format msgid "grouping operations are not allowed in %s" msgstr "les fonctions de regroupement ne sont pas autorisés dans %s" -#: parser/parse_agg.c:678 +#: parser/parse_agg.c:689 #, c-format msgid "outer-level aggregate cannot contain a lower-level variable in its direct arguments" msgstr "un aggrégat de niveau externe ne peut pas contenir de variable de niveau inférieur dans ses arguments directs" -#: parser/parse_agg.c:757 +#: parser/parse_agg.c:768 #, c-format msgid "aggregate function calls cannot contain set-returning function calls" msgstr "les appels à la fonction d'agrégat ne peuvent pas contenir des appels à des fonctions retournant des ensembles" -#: parser/parse_agg.c:758 parser/parse_expr.c:1839 parser/parse_expr.c:2328 parser/parse_func.c:876 +#: parser/parse_agg.c:769 parser/parse_expr.c:1673 parser/parse_expr.c:2146 parser/parse_func.c:882 #, c-format msgid "You might be able to move the set-returning function into a LATERAL FROM item." msgstr "Vous devriez être capable de déplacer la fonction SETOF dans un élément LATERAL FROM." -#: parser/parse_agg.c:763 +#: parser/parse_agg.c:774 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "les appels à la fonction d'agrégat ne peuvent pas contenir des appels à une fonction de fenêtrage" -#: parser/parse_agg.c:842 +#: parser/parse_agg.c:853 msgid "window functions are not allowed in JOIN conditions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les conditions de jointure" -#: parser/parse_agg.c:849 +#: parser/parse_agg.c:860 msgid "window functions are not allowed in functions in FROM" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les fonctions contenues dans la clause FROM" -#: parser/parse_agg.c:855 +#: parser/parse_agg.c:866 msgid "window functions are not allowed in policy expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les expressions de politique" -#: parser/parse_agg.c:868 +#: parser/parse_agg.c:879 msgid "window functions are not allowed in window definitions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les définitions de fenêtres" -#: parser/parse_agg.c:900 +#: parser/parse_agg.c:911 msgid "window functions are not allowed in check constraints" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les contraintes CHECK" -#: parser/parse_agg.c:904 +#: parser/parse_agg.c:915 msgid "window functions are not allowed in DEFAULT expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les expressions par défaut" -#: parser/parse_agg.c:907 +#: parser/parse_agg.c:918 msgid "window functions are not allowed in index expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les expressions d'index" -#: parser/parse_agg.c:910 +#: parser/parse_agg.c:921 +msgid "window functions are not allowed in statistics expressions" +msgstr "les fonctions de fenêtrage ne sont pas autorisées dans les expressions statistiques" + +#: parser/parse_agg.c:924 msgid "window functions are not allowed in index predicates" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les prédicats d'index" -#: parser/parse_agg.c:913 +#: parser/parse_agg.c:927 msgid "window functions are not allowed in transform expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les expressions de transformation" -#: parser/parse_agg.c:916 +#: parser/parse_agg.c:930 msgid "window functions are not allowed in EXECUTE parameters" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les paramètres d'EXECUTE" -#: parser/parse_agg.c:919 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les conditions WHEN des triggers" -#: parser/parse_agg.c:922 +#: parser/parse_agg.c:936 msgid "window functions are not allowed in partition bound" msgstr "les fonctions de fenêtrage ne sont pas autorisées dans les limites de partition" -#: parser/parse_agg.c:925 +#: parser/parse_agg.c:939 msgid "window functions are not allowed in partition key expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les expressions de clé de partitionnement" -#: parser/parse_agg.c:928 +#: parser/parse_agg.c:942 msgid "window functions are not allowed in CALL arguments" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les arguments de CALL" -#: parser/parse_agg.c:931 +#: parser/parse_agg.c:945 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "les fonctions de fenêtrage ne sont pas autorisées dans les conditions WHERE d'un COPY FROM" -#: parser/parse_agg.c:934 +#: parser/parse_agg.c:948 msgid "window functions are not allowed in column generation expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisées dans les expressions de génération de colonne" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:954 parser/parse_clause.c:1787 +#: parser/parse_agg.c:971 parser/parse_clause.c:1856 #, c-format msgid "window functions are not allowed in %s" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans %s" -#: parser/parse_agg.c:988 parser/parse_clause.c:2623 +#: parser/parse_agg.c:1005 parser/parse_clause.c:2690 #, c-format msgid "window \"%s\" does not exist" msgstr "le window « %s » n'existe pas" -#: parser/parse_agg.c:1072 +#: parser/parse_agg.c:1089 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "trop d'ensembles de regroupement présents (4096 maximum)" -#: parser/parse_agg.c:1212 +#: parser/parse_agg.c:1229 #, c-format msgid "aggregate functions are not allowed in a recursive query's recursive term" msgstr "les fonctions d'agrégat ne sont pas autorisées dans le terme récursif d'une requête récursive" -#: parser/parse_agg.c:1405 +#: parser/parse_agg.c:1422 #, c-format msgid "column \"%s.%s\" must appear in the GROUP BY clause or be used in an aggregate function" msgstr "la colonne « %s.%s » doit apparaître dans la clause GROUP BY ou doit être utilisé dans une fonction d'agrégat" -#: parser/parse_agg.c:1408 +#: parser/parse_agg.c:1425 #, c-format msgid "Direct arguments of an ordered-set aggregate must use only grouped columns." msgstr "Les arguments directs d'un agégat par ensemble ordonné doivent seulement utiliser des colonnes groupées." -#: parser/parse_agg.c:1413 +#: parser/parse_agg.c:1430 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "" "la sous-requête utilise une colonne « %s.%s » non groupée dans la requête\n" "externe" -#: parser/parse_agg.c:1577 +#: parser/parse_agg.c:1594 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "les arguments de la clause GROUPING doivent être des expressions de regroupement du niveau associé de la requête" -#: parser/parse_clause.c:198 +#: parser/parse_clause.c:190 #, c-format msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "la relation « %s » ne peut pas être la cible d'une instruction modifiée" -#: parser/parse_clause.c:575 parser/parse_clause.c:603 parser/parse_func.c:2439 +#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2438 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "les fonctions renvoyant des ensembles doivent apparaître au niveau haut d'un FROM" -#: parser/parse_clause.c:615 +#: parser/parse_clause.c:611 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "plusieurs listes de définition de colonnes ne sont pas autorisées pour la même fonction" -#: parser/parse_clause.c:648 +#: parser/parse_clause.c:644 #, c-format msgid "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "ROWS FROM() avec plusieurs fonctions ne peut pas avoir une liste de définitions de colonnes" -#: parser/parse_clause.c:649 +#: parser/parse_clause.c:645 #, c-format msgid "Put a separate column definition list for each function inside ROWS FROM()." msgstr "Placer une liste de définitions de colonnes séparée pour chaque fonction à l'intérieur de ROWS FROM()." -#: parser/parse_clause.c:655 +#: parser/parse_clause.c:651 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "UNNEST() avec plusieurs arguments ne peut pas avoir de liste de définition de colonnes" -#: parser/parse_clause.c:656 +#: parser/parse_clause.c:652 #, c-format msgid "Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one." msgstr "Utiliser des appels séparés UNNEST() à l'intérieur de ROWS FROM(), et attacher une liste de définition des colonnes pour chaque." -#: parser/parse_clause.c:663 +#: parser/parse_clause.c:659 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY ne peut pas être utilisé avec une liste de définitions de colonnes" -#: parser/parse_clause.c:664 +#: parser/parse_clause.c:660 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "Placez la liste de définitions des colonnes dans ROWS FROM()." -#: parser/parse_clause.c:767 +#: parser/parse_clause.c:760 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "seule une colonne FOR ORDINALITY est autorisée" -#: parser/parse_clause.c:828 +#: parser/parse_clause.c:821 #, c-format msgid "column name \"%s\" is not unique" msgstr "le nom de colonne « %s » n'est pas unique" -#: parser/parse_clause.c:870 +#: parser/parse_clause.c:863 #, c-format msgid "namespace name \"%s\" is not unique" msgstr "l'espace de nom « %s » n'est pas unique" -#: parser/parse_clause.c:880 +#: parser/parse_clause.c:873 #, c-format msgid "only one default namespace is allowed" msgstr "seul un espace de nom par défaut est autorisé" -#: parser/parse_clause.c:942 +#: parser/parse_clause.c:933 #, c-format msgid "tablesample method %s does not exist" msgstr "la méthode d'échantillonage %s n'existe pas" -#: parser/parse_clause.c:964 +#: parser/parse_clause.c:955 #, c-format msgid "tablesample method %s requires %d argument, not %d" msgid_plural "tablesample method %s requires %d arguments, not %d" msgstr[0] "la méthode d'échantillonage %s requiert %d argument, et non pas %d" msgstr[1] "la méthode d'échantillonage %s requiert %d arguments, et non pas %d" -#: parser/parse_clause.c:998 +#: parser/parse_clause.c:989 #, c-format msgid "tablesample method %s does not support REPEATABLE" msgstr "la méthode d'échantillonage %s ne supporte pas REPEATABLE" -#: parser/parse_clause.c:1168 +#: parser/parse_clause.c:1135 #, c-format msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "la clause TABLESAMPLE n'est applicable qu'aux tables et vues matérialisées" -#: parser/parse_clause.c:1338 +#: parser/parse_clause.c:1325 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "le nom de la colonne « %s » apparaît plus d'une fois dans la clause USING" -#: parser/parse_clause.c:1353 +#: parser/parse_clause.c:1340 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "" "le nom commun de la colonne « %s » apparaît plus d'une fois dans la table de\n" "gauche" -#: parser/parse_clause.c:1362 +#: parser/parse_clause.c:1349 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "" "la colonne « %s » spécifiée dans la clause USING n'existe pas dans la table\n" "de gauche" -#: parser/parse_clause.c:1376 +#: parser/parse_clause.c:1364 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "" "le nom commun de la colonne « %s » apparaît plus d'une fois dans la table de\n" " droite" -#: parser/parse_clause.c:1385 +#: parser/parse_clause.c:1373 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "" "la colonne « %s » spécifiée dans la clause USING n'existe pas dans la table\n" "de droite" -#: parser/parse_clause.c:1439 +#: parser/parse_clause.c:1452 #, c-format msgid "column alias list for \"%s\" has too many entries" msgstr "la liste d'alias de colonnes pour « %s » a beaucoup trop d'entrées" +#: parser/parse_clause.c:1792 +#, c-format +msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" +msgstr "un nombre de lignes ne peut pas être NULL dans une clause FETCH FIRST ... WITH TIES" + #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1748 +#: parser/parse_clause.c:1817 #, c-format msgid "argument of %s must not contain variables" msgstr "l'argument de « %s » ne doit pas contenir de variables" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1913 +#: parser/parse_clause.c:1982 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "%s « %s » est ambigu" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1942 +#: parser/parse_clause.c:2011 #, c-format msgid "non-integer constant in %s" msgstr "constante non entière dans %s" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1964 +#: parser/parse_clause.c:2033 #, c-format msgid "%s position %d is not in select list" msgstr "%s, à la position %d, n'est pas dans la liste SELECT" -#: parser/parse_clause.c:2405 +#: parser/parse_clause.c:2472 #, c-format msgid "CUBE is limited to 12 elements" msgstr "CUBE est limité à 12 éléments" -#: parser/parse_clause.c:2611 +#: parser/parse_clause.c:2678 #, c-format msgid "window \"%s\" is already defined" msgstr "le window « %s » est déjà définie" -#: parser/parse_clause.c:2672 +#: parser/parse_clause.c:2739 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "n'a pas pu surcharger la clause PARTITION BY de window « %s »" -#: parser/parse_clause.c:2684 +#: parser/parse_clause.c:2751 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "n'a pas pu surcharger la clause ORDER BY de window « %s »" -#: parser/parse_clause.c:2714 parser/parse_clause.c:2720 +#: parser/parse_clause.c:2781 parser/parse_clause.c:2787 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "ne peut pas copier la fenêtre « %s » car il dispose d'une clause de portée" -#: parser/parse_clause.c:2722 +#: parser/parse_clause.c:2789 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Omettre les parenthèses dans cette clause OVER." -#: parser/parse_clause.c:2742 +#: parser/parse_clause.c:2809 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" msgstr "RANGE avec offset PRECEDING/FOLLOWING nécessite exactement une colonne ORDER BY" -#: parser/parse_clause.c:2765 +#: parser/parse_clause.c:2832 #, c-format msgid "GROUPS mode requires an ORDER BY clause" msgstr "le mode GROUPS nécessite une clause ORDER BY" -#: parser/parse_clause.c:2835 +#: parser/parse_clause.c:2902 #, c-format msgid "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list" msgstr "" "dans un agrégat avec DISTINCT, les expressions ORDER BY doivent apparaître\n" "dans la liste d'argument" -#: parser/parse_clause.c:2836 +#: parser/parse_clause.c:2903 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "" "pour SELECT DISTINCT, ORDER BY, les expressions doivent apparaître dans la\n" "liste SELECT" -#: parser/parse_clause.c:2868 +#: parser/parse_clause.c:2935 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "un agrégat avec DISTINCT doit avoir au moins un argument" -#: parser/parse_clause.c:2869 +#: parser/parse_clause.c:2936 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCT doit avoir au moins une colonne" -#: parser/parse_clause.c:2935 parser/parse_clause.c:2967 +#: parser/parse_clause.c:3002 parser/parse_clause.c:3034 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "les expressions SELECT DISTINCT ON doivent correspondre aux expressions ORDER BY initiales" -#: parser/parse_clause.c:3045 +#: parser/parse_clause.c:3112 #, c-format msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "ASC/DESC n'est pas autorisé avec la clause ON CONFLICT" -#: parser/parse_clause.c:3051 +#: parser/parse_clause.c:3118 #, c-format msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "NULLS FIRST/LAST n'est pas autorisé avec la clause ON CONFLICT" -#: parser/parse_clause.c:3130 +#: parser/parse_clause.c:3197 #, c-format msgid "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "ON CONFLICT DO UPDATE requiert une spécification d'inférence ou un nom de contrainte" -#: parser/parse_clause.c:3131 +#: parser/parse_clause.c:3198 #, c-format msgid "For example, ON CONFLICT (column_name)." msgstr "Par exemple, ON CONFLICT (nom_colonne)" -#: parser/parse_clause.c:3142 +#: parser/parse_clause.c:3209 #, c-format msgid "ON CONFLICT is not supported with system catalog tables" msgstr "ON CONFLICT n'est pas supporté avec les catalogues systèmes" -#: parser/parse_clause.c:3150 +#: parser/parse_clause.c:3217 #, c-format msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" msgstr "ON CONFLICT n'est pas supporté sur la table « %s » utilisée comme une table catalogue" -#: parser/parse_clause.c:3293 +#: parser/parse_clause.c:3347 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "l'opérateur %s n'est pas un opérateur de tri valide" -#: parser/parse_clause.c:3295 +#: parser/parse_clause.c:3349 #, c-format msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "" "Les opérateurs de tri doivent être les membres « < » ou « > » des familles\n" "d'opérateurs btree." -#: parser/parse_clause.c:3606 +#: parser/parse_clause.c:3660 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" msgstr "RANGE avec offset PRECEDING/FOLLOWING n'est pas supporté pour le type de collone %s" -#: parser/parse_clause.c:3612 +#: parser/parse_clause.c:3666 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s" msgstr "RANGE avec offset PRECEDING/FOLLOWING n'est pas supporté pour le type de colonne %s et le type d'ossfet %s" -#: parser/parse_clause.c:3615 +#: parser/parse_clause.c:3669 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "Transtypez la valeur d'offset vers un type approprié." -#: parser/parse_clause.c:3620 +#: parser/parse_clause.c:3674 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s" msgstr "RANGE avec offset PRECEDING/FOLLOWING a de multiples interprétations pour le type de colonne %s et le type d'offset %s" -#: parser/parse_clause.c:3623 +#: parser/parse_clause.c:3677 #, c-format msgid "Cast the offset value to the exact intended type." msgstr "Transtypez la valeur d'offset vers exactement le type attendu." -#: parser/parse_coerce.c:1022 parser/parse_coerce.c:1060 parser/parse_coerce.c:1078 parser/parse_coerce.c:1093 parser/parse_expr.c:2235 parser/parse_expr.c:2823 parser/parse_target.c:962 +#: parser/parse_coerce.c:1034 parser/parse_coerce.c:1072 parser/parse_coerce.c:1090 parser/parse_coerce.c:1105 parser/parse_expr.c:2055 parser/parse_expr.c:2649 parser/parse_target.c:995 #, c-format msgid "cannot cast type %s to %s" msgstr "ne peut pas convertir le type %s en %s" -#: parser/parse_coerce.c:1063 +#: parser/parse_coerce.c:1075 #, c-format msgid "Input has too few columns." msgstr "L'entrée n'a pas assez de colonnes." -#: parser/parse_coerce.c:1081 +#: parser/parse_coerce.c:1093 #, c-format msgid "Cannot cast type %s to %s in column %d." msgstr "Ne peut pas convertir le type %s en %s dans la colonne %d." -#: parser/parse_coerce.c:1096 +#: parser/parse_coerce.c:1108 #, c-format msgid "Input has too many columns." msgstr "L'entrée a trop de colonnes." #. translator: first %s is name of a SQL construct, eg WHERE #. translator: first %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1151 parser/parse_coerce.c:1199 +#: parser/parse_coerce.c:1163 parser/parse_coerce.c:1211 #, c-format msgid "argument of %s must be type %s, not type %s" msgstr "l'argument de %s doit être de type %s, et non du type %s" #. translator: %s is name of a SQL construct, eg WHERE #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1162 parser/parse_coerce.c:1211 +#: parser/parse_coerce.c:1174 parser/parse_coerce.c:1223 #, c-format msgid "argument of %s must not return a set" msgstr "l'argument de %s ne doit pas renvoyer un ensemble" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1351 +#: parser/parse_coerce.c:1363 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "les %s types %s et %s ne peuvent pas correspondre" +#: parser/parse_coerce.c:1475 +#, c-format +msgid "argument types %s and %s cannot be matched" +msgstr "les types d'argument %s et %s ne se correspondent pas" + #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1418 +#: parser/parse_coerce.c:1527 #, c-format msgid "%s could not convert type %s to %s" msgstr "%s n'a pas pu convertir le type %s en %s" -#: parser/parse_coerce.c:1720 +#: parser/parse_coerce.c:2089 #, c-format msgid "arguments declared \"anyelement\" are not all alike" msgstr "les arguments déclarés « anyelement » ne sont pas tous identiques" -#: parser/parse_coerce.c:1740 +#: parser/parse_coerce.c:2109 #, c-format msgid "arguments declared \"anyarray\" are not all alike" msgstr "les arguments déclarés « anyarray » ne sont pas tous identiques" -#: parser/parse_coerce.c:1760 +#: parser/parse_coerce.c:2129 #, c-format msgid "arguments declared \"anyrange\" are not all alike" msgstr "les arguments déclarés « anyrange » ne sont pas tous identiques" -#: parser/parse_coerce.c:1789 parser/parse_coerce.c:2004 parser/parse_coerce.c:2038 +#: parser/parse_coerce.c:2149 +#, fuzzy, c-format +#| msgid "arguments declared \"anyrange\" are not all alike" +msgid "arguments declared \"anymultirange\" are not all alike" +msgstr "les arguments déclarés « anyrange » ne sont pas tous identiques" + +#: parser/parse_coerce.c:2183 parser/parse_coerce.c:2297 utils/fmgr/funcapi.c:489 #, c-format msgid "argument declared %s is not an array but type %s" msgstr "l'argument déclaré %s n'est pas un tableau mais est du type %s" -#: parser/parse_coerce.c:1805 parser/parse_coerce.c:1844 +#: parser/parse_coerce.c:2204 #, c-format -msgid "argument declared %s is not consistent with argument declared %s" -msgstr "l'argument déclaré %s n'est pas cohérent avec l'argument déclaré %s" +msgid "arguments declared \"anycompatiblerange\" are not all alike" +msgstr "les arguments déclarés « anycompatiblerange » ne sont pas tous identiques" -#: parser/parse_coerce.c:1827 parser/parse_coerce.c:2051 +#: parser/parse_coerce.c:2216 parser/parse_coerce.c:2329 utils/fmgr/funcapi.c:503 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "l'argument déclaré %s n'est pas un type d'intervalle mais est du type %s" -#: parser/parse_coerce.c:1865 +#: parser/parse_coerce.c:2237 +#, fuzzy, c-format +#| msgid "arguments declared \"anycompatiblerange\" are not all alike" +msgid "arguments declared \"anycompatiblemultirange\" are not all alike" +msgstr "les arguments déclarés « anycompatiblerange » ne sont pas tous identiques" + +#: parser/parse_coerce.c:2250 parser/parse_coerce.c:2363 utils/fmgr/funcapi.c:521 utils/fmgr/funcapi.c:586 +#, fuzzy, c-format +#| msgid "argument declared %s is not a range type but type %s" +msgid "argument declared %s is not a multirange type but type %s" +msgstr "l'argument déclaré %s n'est pas un type d'intervalle mais est du type %s" + +#: parser/parse_coerce.c:2288 +#, c-format +msgid "cannot determine element type of \"anyarray\" argument" +msgstr "ne peut pas déterminer le type d'élément d'un argument « anyarray »" + +#: parser/parse_coerce.c:2314 parser/parse_coerce.c:2346 parser/parse_coerce.c:2380 parser/parse_coerce.c:2400 +#, c-format +msgid "argument declared %s is not consistent with argument declared %s" +msgstr "l'argument déclaré %s n'est pas cohérent avec l'argument déclaré %s" + +#: parser/parse_coerce.c:2427 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "" "n'a pas pu déterminer le type polymorphique car l'entrée dispose\n" "du type %s" -#: parser/parse_coerce.c:1876 +#: parser/parse_coerce.c:2441 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "le type déclaré anynonarray est un type tableau : %s" -#: parser/parse_coerce.c:1886 +#: parser/parse_coerce.c:2451 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "le type déclaré anyenum n'est pas un type enum : %s" -#: parser/parse_coerce.c:1926 parser/parse_coerce.c:1956 +#: parser/parse_coerce.c:2482 parser/parse_coerce.c:2532 parser/parse_coerce.c:2596 parser/parse_coerce.c:2643 +#, c-format +msgid "could not determine polymorphic type %s because input has type %s" +msgstr "n'a pas pu déterminer le type polymorphique %s car l'entrée dispose du type %s" + +#: parser/parse_coerce.c:2492 +#, c-format +msgid "anycompatiblerange type %s does not match anycompatible type %s" +msgstr "le type anycompatiblerange %s ne correspond pas au type anycompatible %s." + +#: parser/parse_coerce.c:2506 #, c-format -msgid "could not find range type for data type %s" -msgstr "n'a pas pu trouver le type range pour le type de données %s" +msgid "type matched to anycompatiblenonarray is an array type: %s" +msgstr "le type correspondant à anycompatiblenonarray est un type tableau : %s" -#: parser/parse_collate.c:228 parser/parse_collate.c:475 parser/parse_collate.c:981 +#: parser/parse_coerce.c:2607 parser/parse_coerce.c:2658 utils/fmgr/funcapi.c:614 +#, c-format +msgid "could not find multirange type for data type %s" +msgstr "n'a pas pu trouver le type multirange pour le type de données %s" + +#: parser/parse_coerce.c:2739 +#, c-format +msgid "A result of type %s requires at least one input of type anyrange or anymultirange." +msgstr "Un résultat de type %s nécessite au moins une entrée de type anyrange ou anymultirange." + +#: parser/parse_coerce.c:2756 +#, c-format +msgid "A result of type %s requires at least one input of type anycompatiblerange or anycompatiblemultirange." +msgstr "Un résultat de type %s requiert au moins une entrée de type anycompatiblerange ou anycompatiblemultirange." + +#: parser/parse_coerce.c:2768 +#, c-format +msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, anyrange, or anymultirange." +msgstr "Un résultat de type %s requiert au moins une entrée de type anyelement, anyarray, anynonarray, anyenum, anyrange ou anymultirange." + +#: parser/parse_coerce.c:2780 +#, c-format +msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, or anycompatiblerange." +msgstr "Un résultat de type %s requiert au moins une entrée de type anycompatible, anycompatiblearray, anycompatiblenonarray ou anycompatiblerange." + +#: parser/parse_coerce.c:2810 +msgid "A result of type internal requires at least one input of type internal." +msgstr "Un résultat de type internal nécessite au moins une entrée de type internal." + +#: parser/parse_collate.c:228 parser/parse_collate.c:475 parser/parse_collate.c:1004 #, c-format msgid "collation mismatch between implicit collations \"%s\" and \"%s\"" msgstr "le collationnement ne correspond pas aux collationnements implicites « %s » et « %s »" -#: parser/parse_collate.c:231 parser/parse_collate.c:478 parser/parse_collate.c:984 +#: parser/parse_collate.c:231 parser/parse_collate.c:478 parser/parse_collate.c:1007 #, c-format msgid "You can choose the collation by applying the COLLATE clause to one or both expressions." msgstr "Vous pouvez choisir le collationnement en appliquant la clause COLLATE à une ou aux deux expressions." -#: parser/parse_collate.c:831 +#: parser/parse_collate.c:854 #, c-format msgid "collation mismatch between explicit collations \"%s\" and \"%s\"" msgstr "le collationnement ne correspond pas aux collationnements explicites « %s » et « %s »" -#: parser/parse_cte.c:42 +#: parser/parse_cte.c:46 #, c-format msgid "recursive reference to query \"%s\" must not appear within its non-recursive term" msgstr "" "la référence récursive à la requête « %s » ne doit pas apparaître à\n" "l'intérieur de son terme non récursif" -#: parser/parse_cte.c:44 +#: parser/parse_cte.c:48 #, c-format msgid "recursive reference to query \"%s\" must not appear within a subquery" msgstr "" "la référence récursive à la requête « %s » ne doit pas apparaître à\n" "l'intérieur d'une sous-requête" -#: parser/parse_cte.c:46 +#: parser/parse_cte.c:50 #, c-format msgid "recursive reference to query \"%s\" must not appear within an outer join" msgstr "" "la référence récursive à la requête « %s » ne doit pas apparaître à\n" "l'intérieur d'une jointure externe" -#: parser/parse_cte.c:48 +#: parser/parse_cte.c:52 #, c-format msgid "recursive reference to query \"%s\" must not appear within INTERSECT" msgstr "" "la référence récursive à la requête « %s » ne doit pas apparaître à\n" "l'intérieur d'INTERSECT" -#: parser/parse_cte.c:50 +#: parser/parse_cte.c:54 #, c-format msgid "recursive reference to query \"%s\" must not appear within EXCEPT" msgstr "" "la référence récursive à la requête « %s » ne doit pas apparaître à\n" "l'intérieur d'EXCEPT" -#: parser/parse_cte.c:132 +#: parser/parse_cte.c:136 #, c-format msgid "WITH query name \"%s\" specified more than once" msgstr "le nom de la requête WITH « %s » est spécifié plus d'une fois" -#: parser/parse_cte.c:264 +#: parser/parse_cte.c:268 #, c-format msgid "WITH clause containing a data-modifying statement must be at the top level" msgstr "la clause WITH contenant une instruction de modification de données doit être au plus haut niveau" -#: parser/parse_cte.c:313 +#: parser/parse_cte.c:317 #, c-format msgid "recursive query \"%s\" column %d has type %s in non-recursive term but type %s overall" msgstr "" "dans la requête récursive « %s », la colonne %d a le type %s dans le terme non\n" "récursif mais le type global %s" -#: parser/parse_cte.c:319 +#: parser/parse_cte.c:323 #, c-format msgid "Cast the output of the non-recursive term to the correct type." msgstr "Convertit la sortie du terme non récursif dans le bon type." -#: parser/parse_cte.c:324 +#: parser/parse_cte.c:328 #, c-format msgid "recursive query \"%s\" column %d has collation \"%s\" in non-recursive term but collation \"%s\" overall" msgstr "requête récursive « %s » : la colonne %d a le collationnement « %s » dans un terme non récursifet un collationnement « %s » global" -#: parser/parse_cte.c:328 +#: parser/parse_cte.c:332 #, c-format msgid "Use the COLLATE clause to set the collation of the non-recursive term." msgstr "Utilisez la clause COLLATE pour configurer le collationnement du terme non récursif." -#: parser/parse_cte.c:418 +#: parser/parse_cte.c:350 +#, c-format +msgid "WITH query is not recursive" +msgstr "" + +#: parser/parse_cte.c:381 +#, c-format +msgid "with a SEARCH or CYCLE clause, the left side of the UNION must be a SELECT" +msgstr "" + +#: parser/parse_cte.c:386 +#, c-format +msgid "with a SEARCH or CYCLE clause, the right side of the UNION must be a SELECT" +msgstr "" + +#: parser/parse_cte.c:401 +#, c-format +msgid "search column \"%s\" not in WITH query column list" +msgstr "" + +#: parser/parse_cte.c:408 +#, fuzzy, c-format +#| msgid "column \"%s\" specified more than once" +msgid "search column \"%s\" specified more than once" +msgstr "la colonne « %s » est spécifiée plus d'une fois" + +#: parser/parse_cte.c:417 +#, c-format +msgid "search sequence column name \"%s\" already used in WITH query column list" +msgstr "" + +#: parser/parse_cte.c:436 +#, fuzzy, c-format +#| msgid "column \"%s\" named in key does not exist" +msgid "cycle column \"%s\" not in WITH query column list" +msgstr "la colonne « %s » nommée dans la clé n'existe pas" + +#: parser/parse_cte.c:443 +#, fuzzy, c-format +#| msgid "column \"%s\" specified more than once" +msgid "cycle column \"%s\" specified more than once" +msgstr "la colonne « %s » est spécifiée plus d'une fois" + +#: parser/parse_cte.c:452 +#, c-format +msgid "cycle mark column name \"%s\" already used in WITH query column list" +msgstr "" + +#: parser/parse_cte.c:464 +#, c-format +msgid "cycle path column name \"%s\" already used in WITH query column list" +msgstr "" + +#: parser/parse_cte.c:472 +#, c-format +msgid "cycle mark column name and cycle path column name are the same" +msgstr "" + +#: parser/parse_cte.c:508 +#, c-format +msgid "could not identify an inequality operator for type %s" +msgstr "n'a pas pu identifier un opérateur d'inégalité pour le type %s" + +#: parser/parse_cte.c:520 +#, c-format +msgid "search sequence column name and cycle mark column name are the same" +msgstr "" + +#: parser/parse_cte.c:527 +#, c-format +msgid "search_sequence column name and cycle path column name are the same" +msgstr "" + +#: parser/parse_cte.c:611 #, c-format msgid "WITH query \"%s\" has %d columns available but %d columns specified" msgstr "la requête WITH « %s » a %d colonnes disponibles mais %d colonnes spécifiées" -#: parser/parse_cte.c:598 +#: parser/parse_cte.c:791 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "la récursion mutuelle entre des éléments WITH n'est pas implantée" -#: parser/parse_cte.c:650 +#: parser/parse_cte.c:843 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "la requête récursive « %s » ne doit pas contenir des instructions de modification de données" -#: parser/parse_cte.c:658 +#: parser/parse_cte.c:851 #, c-format msgid "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] recursive-term" msgstr "" "la requête récursive « %s » n'a pas la forme terme-non-récursive UNION [ALL]\n" "terme-récursive" -#: parser/parse_cte.c:702 +#: parser/parse_cte.c:895 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "ORDER BY dans une requête récursive n'est pas implanté" -#: parser/parse_cte.c:708 +#: parser/parse_cte.c:901 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "OFFSET dans une requête récursive n'est pas implémenté" -#: parser/parse_cte.c:714 +#: parser/parse_cte.c:907 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "LIMIT dans une requête récursive n'est pas implémenté" -#: parser/parse_cte.c:720 +#: parser/parse_cte.c:913 #, c-format msgid "FOR UPDATE/SHARE in a recursive query is not implemented" msgstr "FOR UPDATE/SHARE dans une requête récursive n'est pas implémenté" -#: parser/parse_cte.c:777 +#: parser/parse_cte.c:970 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "la référence récursive à la requête « %s » ne doit pas apparaître plus d'une fois" -#: parser/parse_expr.c:349 +#: parser/parse_expr.c:287 #, c-format msgid "DEFAULT is not allowed in this context" msgstr "DEFAULT interdit dans ce contexte" -#: parser/parse_expr.c:402 parser/parse_relation.c:3352 parser/parse_relation.c:3372 +#: parser/parse_expr.c:340 parser/parse_relation.c:3592 parser/parse_relation.c:3612 #, c-format msgid "column %s.%s does not exist" msgstr "la colonne %s.%s n'existe pas" -#: parser/parse_expr.c:414 +#: parser/parse_expr.c:352 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "colonne « %s » introuvable pour le type de données %s" -#: parser/parse_expr.c:420 +#: parser/parse_expr.c:358 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "n'a pas pu identifier la colonne « %s » dans le type de données de l'enregistrement" -#: parser/parse_expr.c:426 +#: parser/parse_expr.c:364 #, c-format msgid "column notation .%s applied to type %s, which is not a composite type" msgstr "notation d'attribut .%s appliqué au type %s, qui n'est pas un type composé" -#: parser/parse_expr.c:457 parser/parse_target.c:729 +#: parser/parse_expr.c:395 parser/parse_target.c:740 #, c-format msgid "row expansion via \"*\" is not supported here" msgstr "l'expansion de ligne via « * » n'est pas supporté ici" -#: parser/parse_expr.c:578 +#: parser/parse_expr.c:516 msgid "cannot use column reference in DEFAULT expression" msgstr "ne peut pas utiliser une référence de colonne dans l'expression par défaut" -#: parser/parse_expr.c:581 +#: parser/parse_expr.c:519 msgid "cannot use column reference in partition bound expression" -msgstr "ne peut pas utiliser une référence de colonne dans une expression de limite de parition" +msgstr "ne peut pas utiliser une référence de colonne dans une expression de limite de partition" -#: parser/parse_expr.c:844 parser/parse_relation.c:692 parser/parse_relation.c:803 parser/parse_target.c:1200 +#: parser/parse_expr.c:788 parser/parse_relation.c:807 parser/parse_relation.c:889 parser/parse_target.c:1235 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "la référence à la colonne « %s » est ambigu" -#: parser/parse_expr.c:900 parser/parse_param.c:110 parser/parse_param.c:142 parser/parse_param.c:199 parser/parse_param.c:298 +#: parser/parse_expr.c:844 parser/parse_param.c:110 parser/parse_param.c:142 parser/parse_param.c:208 parser/parse_param.c:307 #, c-format msgid "there is no parameter $%d" msgstr "Il n'y a pas de paramètre $%d" -#: parser/parse_expr.c:1143 +#: parser/parse_expr.c:1044 #, c-format msgid "NULLIF requires = operator to yield boolean" msgstr "NULLIF requiert l'opérateur = pour comparer des booleéns" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1149 parser/parse_expr.c:3139 +#: parser/parse_expr.c:1050 parser/parse_expr.c:2965 #, c-format msgid "%s must not return a set" msgstr "%s ne doit pas renvoyer un ensemble" -#: parser/parse_expr.c:1597 parser/parse_expr.c:1629 +#: parser/parse_expr.c:1430 parser/parse_expr.c:1462 #, c-format msgid "number of columns does not match number of values" msgstr "le nombre de colonnes ne correspond pas au nombre de valeurs" -#: parser/parse_expr.c:1643 +#: parser/parse_expr.c:1476 #, c-format msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() expression" msgstr "la source d'un élément UPDATE multi-colonnes doit être un sous-SELECT ou une expression ROW()" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1837 parser/parse_expr.c:2326 parser/parse_func.c:2555 +#: parser/parse_expr.c:1671 parser/parse_expr.c:2144 parser/parse_func.c:2560 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "les fonctions renvoyant un ensemble ne sont pas autorisés dans %s" -#: parser/parse_expr.c:1898 +#: parser/parse_expr.c:1733 msgid "cannot use subquery in check constraint" msgstr "ne peut pas utiliser une sous-requête dans la contrainte de vérification" -#: parser/parse_expr.c:1902 +#: parser/parse_expr.c:1737 msgid "cannot use subquery in DEFAULT expression" msgstr "ne peut pas utiliser de sous-requête dans une expression DEFAULT" -#: parser/parse_expr.c:1905 +#: parser/parse_expr.c:1740 msgid "cannot use subquery in index expression" msgstr "ne peut pas utiliser la sous-requête dans l'expression de l'index" -#: parser/parse_expr.c:1908 +#: parser/parse_expr.c:1743 msgid "cannot use subquery in index predicate" msgstr "ne peut pas utiliser une sous-requête dans un prédicat d'index" -#: parser/parse_expr.c:1911 +#: parser/parse_expr.c:1746 +msgid "cannot use subquery in statistics expression" +msgstr "ne peut pas utiliser une sous-requête dans l'expression des statistiques" + +#: parser/parse_expr.c:1749 msgid "cannot use subquery in transform expression" msgstr "ne peut pas utiliser une sous-requête dans l'expression de transformation" -#: parser/parse_expr.c:1914 +#: parser/parse_expr.c:1752 msgid "cannot use subquery in EXECUTE parameter" msgstr "ne peut pas utiliser les sous-requêtes dans le paramètre EXECUTE" -#: parser/parse_expr.c:1917 +#: parser/parse_expr.c:1755 msgid "cannot use subquery in trigger WHEN condition" msgstr "ne peut pas utiliser une sous-requête dans la condition WHEN d'un trigger" -#: parser/parse_expr.c:1920 +#: parser/parse_expr.c:1758 msgid "cannot use subquery in partition bound" msgstr "ne peut pas utiliser de sous-requête dans une limite de partition" -#: parser/parse_expr.c:1923 +#: parser/parse_expr.c:1761 msgid "cannot use subquery in partition key expression" msgstr "ne peut pas utiliser de sous-requête dans l'expression de clé de partitionnement" -#: parser/parse_expr.c:1926 +#: parser/parse_expr.c:1764 msgid "cannot use subquery in CALL argument" msgstr "ne peut pas utiliser de sous-requête dans l'argument CALL" -#: parser/parse_expr.c:1929 +#: parser/parse_expr.c:1767 msgid "cannot use subquery in COPY FROM WHERE condition" msgstr "ne peut pas utiliser une sous-requête dans la condition WHERE d'un COPY FROM" -#: parser/parse_expr.c:1932 +#: parser/parse_expr.c:1770 msgid "cannot use subquery in column generation expression" msgstr "ne peut pas utiliser une sous-requête dans l'expression de génération d'une colonne" -#: parser/parse_expr.c:1985 +#: parser/parse_expr.c:1823 #, c-format msgid "subquery must return only one column" msgstr "la sous-requête doit renvoyer une seule colonne" -#: parser/parse_expr.c:2069 +#: parser/parse_expr.c:1894 #, c-format msgid "subquery has too many columns" msgstr "la sous-requête a trop de colonnes" -#: parser/parse_expr.c:2074 +#: parser/parse_expr.c:1899 #, c-format msgid "subquery has too few columns" msgstr "la sous-requête n'a pas assez de colonnes" -#: parser/parse_expr.c:2175 +#: parser/parse_expr.c:1995 #, c-format msgid "cannot determine type of empty array" msgstr "ne peut pas déterminer le type d'un tableau vide" -#: parser/parse_expr.c:2176 +#: parser/parse_expr.c:1996 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "Convertit explicitement vers le type désiré, par exemple ARRAY[]::integer[]." -#: parser/parse_expr.c:2190 +#: parser/parse_expr.c:2010 #, c-format msgid "could not find element type for data type %s" msgstr "n'a pas pu trouver le type d'élément pour le type de données %s" -#: parser/parse_expr.c:2477 +#: parser/parse_expr.c:2290 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "la valeur d'un attribut XML sans nom doit être une référence de colonne" -#: parser/parse_expr.c:2478 +#: parser/parse_expr.c:2291 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "la valeur d'un élément XML sans nom doit être une référence de colonne" -#: parser/parse_expr.c:2493 +#: parser/parse_expr.c:2306 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "le nom de l'attribut XML « %s » apparaît plus d'une fois" -#: parser/parse_expr.c:2600 +#: parser/parse_expr.c:2413 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "ne peut pas convertir le résultat XMLSERIALIZE en %s" -#: parser/parse_expr.c:2896 parser/parse_expr.c:3092 +#: parser/parse_expr.c:2722 parser/parse_expr.c:2918 #, c-format msgid "unequal number of entries in row expressions" msgstr "nombre différent d'entrées dans les expressions de ligne" -#: parser/parse_expr.c:2906 +#: parser/parse_expr.c:2732 #, c-format msgid "cannot compare rows of zero length" msgstr "n'a pas pu comparer des lignes de taille zéro" -#: parser/parse_expr.c:2931 +#: parser/parse_expr.c:2757 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "" "l'opérateur de comparaison de ligne doit renvoyer le type booléen, et non le\n" "type %s" -#: parser/parse_expr.c:2938 +#: parser/parse_expr.c:2764 #, c-format msgid "row comparison operator must not return a set" msgstr "l'opérateur de comparaison de ligne ne doit pas renvoyer un ensemble" -#: parser/parse_expr.c:2997 parser/parse_expr.c:3038 +#: parser/parse_expr.c:2823 parser/parse_expr.c:2864 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "n'a pas pu déterminer l'interprétation de l'opérateur de comparaison de ligne %s" -#: parser/parse_expr.c:2999 +#: parser/parse_expr.c:2825 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "" "Les opérateurs de comparaison de lignes doivent être associés à des familles\n" "d'opérateurs btree." -#: parser/parse_expr.c:3040 +#: parser/parse_expr.c:2866 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Il existe de nombreus candidats également plausibles." -#: parser/parse_expr.c:3133 +#: parser/parse_expr.c:2959 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROM requiert l'opérateur = pour comparer des booléens" -#: parser/parse_expr.c:3452 parser/parse_expr.c:3470 -#, c-format -msgid "operator precedence change: %s is now lower precedence than %s" -msgstr "la précédence d'opérateur change : %s a maintenant une précédence inférieure à %s" - -#: parser/parse_func.c:195 +#: parser/parse_func.c:192 #, c-format msgid "argument name \"%s\" used more than once" msgstr "nom « %s » de l'argument spécifié plus d'une fois" -#: parser/parse_func.c:206 +#: parser/parse_func.c:203 #, c-format msgid "positional argument cannot follow named argument" msgstr "l'argument positionné ne doit pas suivre l'argument nommé" -#: parser/parse_func.c:288 parser/parse_func.c:2258 +#: parser/parse_func.c:286 parser/parse_func.c:2257 #, c-format msgid "%s is not a procedure" msgstr "%s n'est pas une procédure" -#: parser/parse_func.c:292 +#: parser/parse_func.c:290 #, c-format msgid "To call a function, use SELECT." msgstr "Pour appeler une fonction, utilisez SELECT." -#: parser/parse_func.c:298 +#: parser/parse_func.c:296 #, c-format msgid "%s is a procedure" msgstr "%s est une procédure" -#: parser/parse_func.c:302 +#: parser/parse_func.c:300 #, c-format msgid "To call a procedure, use CALL." msgstr "Pour appeler une procédure, utilisez CALL." -#: parser/parse_func.c:316 +#: parser/parse_func.c:314 #, c-format msgid "%s(*) specified, but %s is not an aggregate function" msgstr "%s(*) spécifié, mais %s n'est pas une fonction d'agrégat" -#: parser/parse_func.c:323 +#: parser/parse_func.c:321 #, c-format msgid "DISTINCT specified, but %s is not an aggregate function" msgstr "DISTINCT spécifié mais %s n'est pas une fonction d'agrégat" -#: parser/parse_func.c:329 +#: parser/parse_func.c:327 #, c-format msgid "WITHIN GROUP specified, but %s is not an aggregate function" msgstr "WITHIN GROUP spécifié, mais %s n'est pas une fonction d'agrégat" -#: parser/parse_func.c:335 +#: parser/parse_func.c:333 #, c-format msgid "ORDER BY specified, but %s is not an aggregate function" msgstr "ORDER BY spécifié, mais %s n'est pas une fonction d'agrégat" -#: parser/parse_func.c:341 +#: parser/parse_func.c:339 #, c-format msgid "FILTER specified, but %s is not an aggregate function" msgstr "FILTER spécifié mais %s n'est pas une fonction d'agrégat" -#: parser/parse_func.c:347 +#: parser/parse_func.c:345 #, c-format msgid "OVER specified, but %s is not a window function nor an aggregate function" msgstr "OVER spécifié, mais %s n'est pas une fonction window ou une fonction d'agrégat" -#: parser/parse_func.c:385 +#: parser/parse_func.c:383 #, c-format msgid "WITHIN GROUP is required for ordered-set aggregate %s" msgstr "WITHIN GROUP est requis pour l'agrégat à ensemble ordonné %s" -#: parser/parse_func.c:391 +#: parser/parse_func.c:389 #, c-format msgid "OVER is not supported for ordered-set aggregate %s" msgstr "OVER n'est pas supporté pour l'agrégat %s à ensemble trié" -#: parser/parse_func.c:422 parser/parse_func.c:451 -#, c-format -msgid "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." -msgstr "Il existe un agrégat par ensemble trié nommé %s, mais il requiert au moins %d arguments directs, pas %d." +#: parser/parse_func.c:420 parser/parse_func.c:451 +#, fuzzy, c-format +#| msgid "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." +msgid "There is an ordered-set aggregate %s, but it requires %d direct argument, not %d." +msgid_plural "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." +msgstr[0] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert au moins %d arguments directs, pas %d." +msgstr[1] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert au moins %d arguments directs, pas %d." -#: parser/parse_func.c:476 +#: parser/parse_func.c:478 #, c-format msgid "To use the hypothetical-set aggregate %s, the number of hypothetical direct arguments (here %d) must match the number of ordering columns (here %d)." msgstr "Pour utiliser l'agrégat à ensemble hypothétique %s, le nombre d'arguments directs hypothétiques (ici %d) doit correspondre au nombre de colonnes de tri (ici %d)." -#: parser/parse_func.c:490 -#, c-format -msgid "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." -msgstr "Il existe un agrégat par ensemble trié nommé %s, mais il requiert au moins %d arguments directs." +#: parser/parse_func.c:492 +#, fuzzy, c-format +#| msgid "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." +msgid "There is an ordered-set aggregate %s, but it requires at least %d direct argument." +msgid_plural "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." +msgstr[0] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert au moins %d arguments directs." +msgstr[1] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert au moins %d arguments directs." -#: parser/parse_func.c:509 +#: parser/parse_func.c:513 #, c-format msgid "%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP" msgstr "%s n'est pas un agrégat par ensemble trié, donc il ne peut pas avoir WITHIN GROUP" -#: parser/parse_func.c:522 +#: parser/parse_func.c:526 #, c-format msgid "window function %s requires an OVER clause" msgstr "la fonction de fenêtrage %s nécessite une clause OVER" -#: parser/parse_func.c:529 +#: parser/parse_func.c:533 #, c-format msgid "window function %s cannot have WITHIN GROUP" msgstr "la fonction de fenêtrage %s ne peut avoir WITHIN GROUP" -#: parser/parse_func.c:558 +#: parser/parse_func.c:562 #, c-format msgid "procedure %s is not unique" msgstr "la procédure %s n'est pas unique" -#: parser/parse_func.c:561 +#: parser/parse_func.c:565 #, c-format msgid "Could not choose a best candidate procedure. You might need to add explicit type casts." msgstr "" "N'a pas pu choisir un meilleur candidat pour la procédure. Vous pourriez avoir besoin\n" "d'ajouter une conversion de type explicite." -#: parser/parse_func.c:567 +#: parser/parse_func.c:571 #, c-format msgid "function %s is not unique" msgstr "la fonction %s n'est pas unique" -#: parser/parse_func.c:570 +#: parser/parse_func.c:574 #, c-format msgid "Could not choose a best candidate function. You might need to add explicit type casts." msgstr "" "N'a pas pu choisir un meilleur candidat dans les fonctions. Vous pourriez\n" "avoir besoin d'ajouter des conversions explicites de type." -#: parser/parse_func.c:609 +#: parser/parse_func.c:613 #, c-format msgid "No aggregate function matches the given name and argument types. Perhaps you misplaced ORDER BY; ORDER BY must appear after all regular arguments of the aggregate." msgstr "" @@ -15723,211 +16667,215 @@ msgstr "" "Peut-être avez-vous mal placé la clause ORDER BY.\n" "Cette dernière doit apparaître après tous les arguments standards de l'agrégat." -#: parser/parse_func.c:617 parser/parse_func.c:2301 +#: parser/parse_func.c:621 parser/parse_func.c:2300 #, c-format msgid "procedure %s does not exist" msgstr "la procédure %s n'existe pas" -#: parser/parse_func.c:620 +#: parser/parse_func.c:624 #, c-format msgid "No procedure matches the given name and argument types. You might need to add explicit type casts." msgstr "" "Aucune procédure ne correspond au nom donné et aux types d'arguments.\n" "Vous pourriez avoir besoin d'ajouter des conversions de type explicites." -#: parser/parse_func.c:629 +#: parser/parse_func.c:633 #, c-format msgid "No function matches the given name and argument types. You might need to add explicit type casts." msgstr "" "Aucune fonction ne correspond au nom donné et aux types d'arguments.\n" "Vous devez ajouter des conversions explicites de type." -#: parser/parse_func.c:731 +#: parser/parse_func.c:735 #, c-format msgid "VARIADIC argument must be an array" msgstr "l'argument VARIADIC doit être un tableau" -#: parser/parse_func.c:783 parser/parse_func.c:847 +#: parser/parse_func.c:789 parser/parse_func.c:853 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "%s(*) doit être utilisé pour appeler une fonction d'agrégat sans paramètre" -#: parser/parse_func.c:790 +#: parser/parse_func.c:796 #, c-format msgid "aggregates cannot return sets" msgstr "les agrégats ne peuvent pas renvoyer des ensembles" -#: parser/parse_func.c:805 +#: parser/parse_func.c:811 #, c-format msgid "aggregates cannot use named arguments" msgstr "les agrégats ne peuvent pas utiliser des arguments nommés" -#: parser/parse_func.c:837 +#: parser/parse_func.c:843 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "DISTINCT n'est pas implémenté pour des fonctions window" -#: parser/parse_func.c:857 +#: parser/parse_func.c:863 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "l'agrégat ORDER BY n'est pas implémenté pour les fonctions de fenêtrage" -#: parser/parse_func.c:866 +#: parser/parse_func.c:872 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "FILTER n'est pas implémenté pour des fonctions de fenêtrage non agrégats" -#: parser/parse_func.c:875 +#: parser/parse_func.c:881 #, c-format msgid "window function calls cannot contain set-returning function calls" msgstr "" "les appels à la fonction de fenêtrage ne peuvent pas contenir des appels à des\n" "fonctions renvoyant des ensembles de lignes" -#: parser/parse_func.c:883 +#: parser/parse_func.c:889 #, c-format msgid "window functions cannot return sets" msgstr "les fonctions window ne peuvent pas renvoyer des ensembles" -#: parser/parse_func.c:2139 parser/parse_func.c:2330 +#: parser/parse_func.c:2138 parser/parse_func.c:2329 #, c-format msgid "could not find a function named \"%s\"" msgstr "n'a pas pu trouver une fonction nommée « %s »" -#: parser/parse_func.c:2153 parser/parse_func.c:2348 +#: parser/parse_func.c:2152 parser/parse_func.c:2347 #, c-format msgid "function name \"%s\" is not unique" msgstr "le nom de la fonction « %s » n'est pas unique" -#: parser/parse_func.c:2155 parser/parse_func.c:2350 +#: parser/parse_func.c:2154 parser/parse_func.c:2349 #, c-format msgid "Specify the argument list to select the function unambiguously." msgstr "Indiquez la liste d'arguments pour sélectionner la fonction sans ambiguïté." -#: parser/parse_func.c:2199 +#: parser/parse_func.c:2198 #, c-format msgid "procedures cannot have more than %d argument" msgid_plural "procedures cannot have more than %d arguments" msgstr[0] "les procédures ne peuvent avoir plus de %d argument" msgstr[1] "les procédures ne peuvent avoir plus de %d arguments" -#: parser/parse_func.c:2248 +#: parser/parse_func.c:2247 #, c-format msgid "%s is not a function" msgstr "%s n'est pas une fonction" -#: parser/parse_func.c:2268 +#: parser/parse_func.c:2267 #, c-format msgid "function %s is not an aggregate" msgstr "la fonction %s n'est pas un agrégat" -#: parser/parse_func.c:2296 +#: parser/parse_func.c:2295 #, c-format msgid "could not find a procedure named \"%s\"" msgstr "n'a pas pu trouver une procédure nommée « %s »" -#: parser/parse_func.c:2310 +#: parser/parse_func.c:2309 #, c-format msgid "could not find an aggregate named \"%s\"" msgstr "n'a pas pu trouver un aggrégat nommé « %s »" -#: parser/parse_func.c:2315 +#: parser/parse_func.c:2314 #, c-format msgid "aggregate %s(*) does not exist" msgstr "l'agrégat %s(*) n'existe pas" -#: parser/parse_func.c:2320 +#: parser/parse_func.c:2319 #, c-format msgid "aggregate %s does not exist" msgstr "l'agrégat %s n'existe pas" -#: parser/parse_func.c:2355 +#: parser/parse_func.c:2354 #, c-format msgid "procedure name \"%s\" is not unique" msgstr "le nom de la procédure « %s » n'est pas unique" -#: parser/parse_func.c:2357 +#: parser/parse_func.c:2356 #, c-format msgid "Specify the argument list to select the procedure unambiguously." msgstr "Définit la liste d'arguments pour sélectionner la procédure sans ambiguïté." -#: parser/parse_func.c:2362 +#: parser/parse_func.c:2361 #, c-format msgid "aggregate name \"%s\" is not unique" msgstr "le nom d'agrégat « %s » n'est pas unique" -#: parser/parse_func.c:2364 +#: parser/parse_func.c:2363 #, c-format msgid "Specify the argument list to select the aggregate unambiguously." msgstr "Définit la liste d'arguments pour sélectionner l'agrégat sans ambiguïté." -#: parser/parse_func.c:2369 +#: parser/parse_func.c:2368 #, c-format msgid "routine name \"%s\" is not unique" msgstr "le nom de la routine « %s » n'est pas unique" -#: parser/parse_func.c:2371 +#: parser/parse_func.c:2370 #, c-format msgid "Specify the argument list to select the routine unambiguously." msgstr "Définit la liste d'arguments pour sélectionner la routine sans ambiguïté." -#: parser/parse_func.c:2426 +#: parser/parse_func.c:2425 msgid "set-returning functions are not allowed in JOIN conditions" msgstr "les fonctions renvoyant un ensemble de lignes ne sont pas autorisées dans les conditions JOIN" -#: parser/parse_func.c:2447 +#: parser/parse_func.c:2446 msgid "set-returning functions are not allowed in policy expressions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les expressions de politique" -#: parser/parse_func.c:2463 +#: parser/parse_func.c:2462 msgid "set-returning functions are not allowed in window definitions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les définitions de fenêtres" -#: parser/parse_func.c:2501 +#: parser/parse_func.c:2500 msgid "set-returning functions are not allowed in check constraints" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les contraintes CHECK" -#: parser/parse_func.c:2505 +#: parser/parse_func.c:2504 msgid "set-returning functions are not allowed in DEFAULT expressions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les expressions par défaut" -#: parser/parse_func.c:2508 +#: parser/parse_func.c:2507 msgid "set-returning functions are not allowed in index expressions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les expressions d'index" -#: parser/parse_func.c:2511 +#: parser/parse_func.c:2510 msgid "set-returning functions are not allowed in index predicates" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les prédicats d'index" -#: parser/parse_func.c:2514 +#: parser/parse_func.c:2513 +msgid "set-returning functions are not allowed in statistics expressions" +msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les expressions statistiques" + +#: parser/parse_func.c:2516 msgid "set-returning functions are not allowed in transform expressions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les expressions de transformation" -#: parser/parse_func.c:2517 +#: parser/parse_func.c:2519 msgid "set-returning functions are not allowed in EXECUTE parameters" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les paramètres d'EXECUTE" -#: parser/parse_func.c:2520 +#: parser/parse_func.c:2522 msgid "set-returning functions are not allowed in trigger WHEN conditions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les conditions WHEN des triggers" -#: parser/parse_func.c:2523 +#: parser/parse_func.c:2525 msgid "set-returning functions are not allowed in partition bound" msgstr "les fonctions renvoyant un ensemble de lignes ne sont pas autorisées dans les limites de partition" -#: parser/parse_func.c:2526 +#: parser/parse_func.c:2528 msgid "set-returning functions are not allowed in partition key expressions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les expressions de clé de partitionnement" -#: parser/parse_func.c:2529 +#: parser/parse_func.c:2531 msgid "set-returning functions are not allowed in CALL arguments" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les arguments de CALL" -#: parser/parse_func.c:2532 +#: parser/parse_func.c:2534 msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" msgstr "les fonctions renvoyant un ensemble de lignes ne sont pas autorisées dans les conditions WHERE d'un COPY FROM" -#: parser/parse_func.c:2535 +#: parser/parse_func.c:2537 msgid "set-returning functions are not allowed in column generation expressions" msgstr "les fonctions renvoyant un ensemble de lignes ne sont pas autorisées dans les expressions de génération de colonne" @@ -15936,699 +16884,744 @@ msgstr "les fonctions renvoyant un ensemble de lignes ne sont pas autorisées da msgid "target lists can have at most %d entries" msgstr "les listes cibles peuvent avoir au plus %d colonnes" -#: parser/parse_node.c:257 -#, c-format -msgid "cannot subscript type %s because it is not an array" -msgstr "ne peut pas indicer le type %s car il ne s'agit pas d'un tableau" - -#: parser/parse_node.c:362 parser/parse_node.c:399 -#, c-format -msgid "array subscript must have type integer" -msgstr "l'indice d'un tableau doit être de type entier" - -#: parser/parse_node.c:430 +#: parser/parse_oper.c:123 parser/parse_oper.c:690 #, c-format -msgid "array assignment requires type %s but expression is of type %s" -msgstr "l'affectation de tableaux requiert le type %s mais l'expression est de type %s" +msgid "postfix operators are not supported" +msgstr "les opérateurs postfixes ne sont pas supportés" -#: parser/parse_oper.c:125 parser/parse_oper.c:724 utils/adt/regproc.c:520 utils/adt/regproc.c:704 +#: parser/parse_oper.c:130 parser/parse_oper.c:649 utils/adt/regproc.c:538 utils/adt/regproc.c:722 #, c-format msgid "operator does not exist: %s" msgstr "l'opérateur n'existe pas : %s" -#: parser/parse_oper.c:224 +#: parser/parse_oper.c:229 #, c-format msgid "Use an explicit ordering operator or modify the query." msgstr "Utilisez un opérateur explicite de tri ou modifiez la requête." -#: parser/parse_oper.c:480 +#: parser/parse_oper.c:485 #, c-format msgid "operator requires run-time type coercion: %s" msgstr "l'opérateur requiert la coercion du type à l'exécution : %s" -#: parser/parse_oper.c:716 +#: parser/parse_oper.c:641 #, c-format msgid "operator is not unique: %s" msgstr "l'opérateur n'est pas unique : %s" -#: parser/parse_oper.c:718 +#: parser/parse_oper.c:643 #, c-format msgid "Could not choose a best candidate operator. You might need to add explicit type casts." msgstr "" "N'a pas pu choisir un meilleur candidat pour l'opérateur. Vous devez ajouter une\n" "conversion explicite de type." -#: parser/parse_oper.c:727 +#: parser/parse_oper.c:652 #, c-format msgid "No operator matches the given name and argument type. You might need to add an explicit type cast." msgstr "" "Aucun opérateur ne correspond au nom donné et au type d'argument.\n" "Vous devez ajouter des conversions explicites de type." -#: parser/parse_oper.c:729 +#: parser/parse_oper.c:654 #, c-format msgid "No operator matches the given name and argument types. You might need to add explicit type casts." msgstr "" "Aucun opérateur ne correspond au nom donné et aux types d'arguments.\n" "Vous devez ajouter des conversions explicites de type." -#: parser/parse_oper.c:790 parser/parse_oper.c:912 +#: parser/parse_oper.c:714 parser/parse_oper.c:828 #, c-format msgid "operator is only a shell: %s" msgstr "l'opérateur est seulement un shell : %s" -#: parser/parse_oper.c:900 +#: parser/parse_oper.c:816 #, c-format msgid "op ANY/ALL (array) requires array on right side" msgstr "op ANY/ALL (tableau) requiert un tableau sur le côté droit" -#: parser/parse_oper.c:942 +#: parser/parse_oper.c:858 #, c-format msgid "op ANY/ALL (array) requires operator to yield boolean" msgstr "op ANY/ALL (tableau) requiert un opérateur pour comparer des booléens" -#: parser/parse_oper.c:947 +#: parser/parse_oper.c:863 #, c-format msgid "op ANY/ALL (array) requires operator not to return a set" msgstr "op ANY/ALL (tableau) requiert que l'opérateur ne renvoie pas un ensemble" -#: parser/parse_param.c:216 +#: parser/parse_param.c:225 #, c-format msgid "inconsistent types deduced for parameter $%d" msgstr "types incohérents déduit pour le paramètre $%d" -#: parser/parse_relation.c:179 +#: parser/parse_relation.c:201 #, c-format msgid "table reference \"%s\" is ambiguous" msgstr "la référence à la table « %s » est ambigu" -#: parser/parse_relation.c:223 +#: parser/parse_relation.c:245 #, c-format msgid "table reference %u is ambiguous" msgstr "la référence à la table %u est ambigu" -#: parser/parse_relation.c:422 +#: parser/parse_relation.c:445 #, c-format msgid "table name \"%s\" specified more than once" msgstr "le nom de la table « %s » est spécifié plus d'une fois" -#: parser/parse_relation.c:449 parser/parse_relation.c:3292 +#: parser/parse_relation.c:474 parser/parse_relation.c:3532 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "référence invalide d'une entrée de la clause FROM pour la table « %s »" -#: parser/parse_relation.c:452 parser/parse_relation.c:3297 +#: parser/parse_relation.c:478 parser/parse_relation.c:3537 #, c-format msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." msgstr "" "Il existe une entrée pour la table « %s » mais elle ne peut pas être\n" "référencée de cette partie de la requête." -#: parser/parse_relation.c:454 +#: parser/parse_relation.c:480 #, c-format msgid "The combining JOIN type must be INNER or LEFT for a LATERAL reference." msgstr "Le type JOIN combiné doit être INNER ou LEFT pour une référence LATERAL." -#: parser/parse_relation.c:730 +#: parser/parse_relation.c:691 #, c-format msgid "system column \"%s\" reference in check constraint is invalid" msgstr "la référence de la colonne système « %s » dans la contrainte CHECK est invalide" -#: parser/parse_relation.c:741 +#: parser/parse_relation.c:700 #, c-format msgid "cannot use system column \"%s\" in column generation expression" msgstr "ne peut pas utiliser la colonne système « %s » dans une expression de génération de colonne" -#: parser/parse_relation.c:1100 parser/parse_relation.c:1404 parser/parse_relation.c:1985 +#: parser/parse_relation.c:1173 parser/parse_relation.c:1625 parser/parse_relation.c:2302 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "la table « %s » a %d colonnes disponibles mais %d colonnes spécifiées" -#: parser/parse_relation.c:1187 +#: parser/parse_relation.c:1377 #, c-format msgid "There is a WITH item named \"%s\", but it cannot be referenced from this part of the query." msgstr "" "Il existe un élément WITH nommé « %s » mais il ne peut pas être\n" "référencée de cette partie de la requête." -#: parser/parse_relation.c:1189 +#: parser/parse_relation.c:1379 #, c-format msgid "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." msgstr "" "Utilisez WITH RECURSIVE ou ré-ordonnez les éléments WITH pour supprimer\n" "les références en avant." -#: parser/parse_relation.c:1525 +#: parser/parse_relation.c:1767 +#, c-format +msgid "a column definition list is redundant for a function with OUT parameters" +msgstr "une liste de définition de colonnes est redondante pour une fonction avec paramètres OUT" + +#: parser/parse_relation.c:1773 +#, c-format +msgid "a column definition list is redundant for a function returning a named composite type" +msgstr "une liste de définition de colonnes est redondante pour une fonction renvoyant un type composite nommé" + +#: parser/parse_relation.c:1780 #, c-format msgid "a column definition list is only allowed for functions returning \"record\"" msgstr "une liste de définition de colonnes n'autorisée que pour les fonctions renvoyant un « record »" -#: parser/parse_relation.c:1534 +#: parser/parse_relation.c:1791 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "une liste de définition de colonnes est requise pour les fonctions renvoyant un « record »" -#: parser/parse_relation.c:1620 +#: parser/parse_relation.c:1880 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "la fonction « %s » dans la clause FROM a un type de retour %s non supporté" -#: parser/parse_relation.c:1811 +#: parser/parse_relation.c:2089 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "les listes de VALUES « %s » ont %d colonnes disponibles mais %d colonnes spécifiées" -#: parser/parse_relation.c:1867 +#: parser/parse_relation.c:2161 #, c-format msgid "joins can have at most %d columns" msgstr "les jointures peuvent avoir au plus %d colonnes" -#: parser/parse_relation.c:1958 +#: parser/parse_relation.c:2275 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "La requête WITH « %s » n'a pas de clause RETURNING" -#: parser/parse_relation.c:2899 parser/parse_relation.c:2937 parser/parse_relation.c:2946 parser/parse_relation.c:3072 parser/parse_relation.c:3082 +#: parser/parse_relation.c:3307 parser/parse_relation.c:3317 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "la colonne %d de la relation « %s » n'existe pas" -#: parser/parse_relation.c:3295 +#: parser/parse_relation.c:3535 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "Peut-être que vous souhaitiez référencer l'alias de la table « %s »." -#: parser/parse_relation.c:3303 +#: parser/parse_relation.c:3543 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "entrée manquante de la clause FROM pour la table « %s »" -#: parser/parse_relation.c:3355 +#: parser/parse_relation.c:3595 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "Peut-être que vous souhaitiez référencer la colonne « %s.%s »." -#: parser/parse_relation.c:3357 +#: parser/parse_relation.c:3597 #, c-format msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." msgstr "Il existe une colonne nommée « %s » pour la table « %s » mais elle ne peut pas être référencée dans cette partie de la requête." -#: parser/parse_relation.c:3374 +#: parser/parse_relation.c:3614 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "Peut-être que vous souhaitiez référencer la colonne « %s.%s » ou la colonne « %s.%s »." -#: parser/parse_target.c:484 parser/parse_target.c:791 +#: parser/parse_target.c:483 parser/parse_target.c:804 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "ne peut pas affecter à une colonne système « %s »" -#: parser/parse_target.c:512 +#: parser/parse_target.c:511 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "ne peut pas initialiser un élément d'un tableau avec DEFAULT" -#: parser/parse_target.c:517 +#: parser/parse_target.c:516 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "ne peut pas initialiser un sous-champ avec DEFAULT" -#: parser/parse_target.c:586 +#: parser/parse_target.c:590 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "la colonne « %s » est de type %s mais l'expression est de type %s" -#: parser/parse_target.c:775 +#: parser/parse_target.c:788 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a composite type" msgstr "" "ne peut pas l'affecter au champ « %s » de la colonne « %s » parce que son\n" "type %s n'est pas un type composé" -#: parser/parse_target.c:784 +#: parser/parse_target.c:797 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because there is no such column in data type %s" msgstr "" "ne peut pas l'affecter au champ « %s » de la colonne « %s » parce qu'il n'existe\n" "pas une telle colonne dans le type de données %s" -#: parser/parse_target.c:861 -#, c-format -msgid "array assignment to \"%s\" requires type %s but expression is of type %s" +#: parser/parse_target.c:878 +#, fuzzy, c-format +#| msgid "array assignment to \"%s\" requires type %s but expression is of type %s" +msgid "subscripted assignment to \"%s\" requires type %s but expression is of type %s" msgstr "l'affectation d'un tableau avec « %s » requiert le type %s mais l'expression est de type %s" -#: parser/parse_target.c:871 +#: parser/parse_target.c:888 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "le sous-champ « %s » est de type %s mais l'expression est de type %s" -#: parser/parse_target.c:1290 +#: parser/parse_target.c:1323 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "Un SELECT * sans table spécifiée n'est pas valide" -#: parser/parse_type.c:101 +#: parser/parse_type.c:100 #, c-format msgid "improper %%TYPE reference (too few dotted names): %s" msgstr "référence %%TYPE invalide (trop peu de points entre les noms) : %s" -#: parser/parse_type.c:123 +#: parser/parse_type.c:122 #, c-format msgid "improper %%TYPE reference (too many dotted names): %s" msgstr "référence %%TYPE invalide (trop de points entre les noms) : %s" -#: parser/parse_type.c:158 +#: parser/parse_type.c:157 #, c-format msgid "type reference %s converted to %s" msgstr "référence de type %s convertie en %s" -#: parser/parse_type.c:279 parser/parse_type.c:858 utils/cache/typcache.c:374 +#: parser/parse_type.c:278 parser/parse_type.c:803 utils/cache/typcache.c:389 utils/cache/typcache.c:444 #, c-format msgid "type \"%s\" is only a shell" msgstr "le type « %s » est seulement un shell" -#: parser/parse_type.c:364 +#: parser/parse_type.c:363 #, c-format msgid "type modifier is not allowed for type \"%s\"" msgstr "le modificateur de type n'est pas autorisé pour le type « %s »" -#: parser/parse_type.c:406 +#: parser/parse_type.c:405 #, c-format msgid "type modifiers must be simple constants or identifiers" msgstr "les modificateurs de type doivent être des constantes ou des identifiants" -#: parser/parse_type.c:722 parser/parse_type.c:821 +#: parser/parse_type.c:721 parser/parse_type.c:766 #, c-format msgid "invalid type name \"%s\"" msgstr "nom de type « %s » invalide" -#: parser/parse_utilcmd.c:263 +#: parser/parse_utilcmd.c:267 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "ne peut pas créer une table partitionnée comme la fille d'un héritage" -#: parser/parse_utilcmd.c:426 -#, c-format -msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" -msgstr "%s créera des séquences implicites « %s » pour la colonne serial « %s.%s »" - -#: parser/parse_utilcmd.c:550 +#: parser/parse_utilcmd.c:578 #, c-format msgid "array of serial is not implemented" msgstr "le tableau de type serial n'est pas implémenté" -#: parser/parse_utilcmd.c:627 parser/parse_utilcmd.c:639 +#: parser/parse_utilcmd.c:657 parser/parse_utilcmd.c:669 parser/parse_utilcmd.c:728 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "déclarations NULL/NOT NULL en conflit pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:651 +#: parser/parse_utilcmd.c:681 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "" "plusieurs valeurs par défaut sont spécifiées pour la colonne « %s » de la table\n" "« %s »" -#: parser/parse_utilcmd.c:668 +#: parser/parse_utilcmd.c:698 #, c-format msgid "identity columns are not supported on typed tables" msgstr "les colonnes d'identité uniques ne sont pas supportées sur les tables typées" -#: parser/parse_utilcmd.c:672 +#: parser/parse_utilcmd.c:702 #, c-format msgid "identity columns are not supported on partitions" msgstr "les colonnes d'identité ne sont pas supportées sur les partitions" -#: parser/parse_utilcmd.c:681 +#: parser/parse_utilcmd.c:711 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "plusieurs spécifications d'identité pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:700 +#: parser/parse_utilcmd.c:741 #, c-format msgid "generated columns are not supported on typed tables" msgstr "les colonnes générées ne sont pas supportées sur les tables typées" -#: parser/parse_utilcmd.c:704 +#: parser/parse_utilcmd.c:745 #, c-format msgid "generated columns are not supported on partitions" msgstr "les colonnes générées ne sont pas supportées sur les partitions" -#: parser/parse_utilcmd.c:709 +#: parser/parse_utilcmd.c:750 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "plusieurs expressions de géénration sont spécifiées pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:727 parser/parse_utilcmd.c:842 +#: parser/parse_utilcmd.c:768 parser/parse_utilcmd.c:883 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "les clés primaires ne sont pas supportées par les tables distantes" -#: parser/parse_utilcmd.c:736 parser/parse_utilcmd.c:852 +#: parser/parse_utilcmd.c:777 parser/parse_utilcmd.c:893 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "les contraintes uniques ne sont pas supportées par les tables distantes" -#: parser/parse_utilcmd.c:781 +#: parser/parse_utilcmd.c:822 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "une valeur par défaut et une identité ont été spécifiées pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:789 +#: parser/parse_utilcmd.c:830 #, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" msgstr "une valeur par défaut et une expression de génération ont été spécifiées à la fois pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:797 +#: parser/parse_utilcmd.c:838 #, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" msgstr "une identité et une expression de génération ont été spécifiées à la fois pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:862 +#: parser/parse_utilcmd.c:903 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "les contraintes d'exclusion ne sont pas supportées par les tables distantes" -#: parser/parse_utilcmd.c:868 +#: parser/parse_utilcmd.c:909 #, c-format msgid "exclusion constraints are not supported on partitioned tables" msgstr "les contraintes d'exclusion ne sont pas supportées sur les tables partitionnées" -#: parser/parse_utilcmd.c:932 +#: parser/parse_utilcmd.c:974 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE n'est pas supporté pour la création de tables distantes" -#: parser/parse_utilcmd.c:1066 -#, c-format -msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." -msgstr "L'expression de génération de la colonne « %s » contient une référence de ligne complète vers la table « %s »." - -#: parser/parse_utilcmd.c:1563 parser/parse_utilcmd.c:1670 +#: parser/parse_utilcmd.c:1751 parser/parse_utilcmd.c:1859 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "l'index « %s » contient une référence de table de ligne complète" -#: parser/parse_utilcmd.c:2036 +#: parser/parse_utilcmd.c:2246 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "ne peut pas utiliser un index existant dans CREATE TABLE" -#: parser/parse_utilcmd.c:2056 +#: parser/parse_utilcmd.c:2266 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "l'index « %s » est déjà associé à une contrainte" -#: parser/parse_utilcmd.c:2071 +#: parser/parse_utilcmd.c:2281 #, c-format msgid "index \"%s\" is not valid" msgstr "l'index « %s » n'est pas valide" -#: parser/parse_utilcmd.c:2077 +#: parser/parse_utilcmd.c:2287 #, c-format msgid "\"%s\" is not a unique index" msgstr "« %s » n'est pas un index unique" -#: parser/parse_utilcmd.c:2078 parser/parse_utilcmd.c:2085 parser/parse_utilcmd.c:2092 parser/parse_utilcmd.c:2163 +#: parser/parse_utilcmd.c:2288 parser/parse_utilcmd.c:2295 parser/parse_utilcmd.c:2302 parser/parse_utilcmd.c:2379 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "Ne peut pas créer une clé primaire ou une contrainte unique avec cet index." -#: parser/parse_utilcmd.c:2084 +#: parser/parse_utilcmd.c:2294 #, c-format msgid "index \"%s\" contains expressions" msgstr "l'index « %s » contient des expressions" -#: parser/parse_utilcmd.c:2091 +#: parser/parse_utilcmd.c:2301 #, c-format msgid "\"%s\" is a partial index" msgstr "« %s » est un index partiel" -#: parser/parse_utilcmd.c:2103 +#: parser/parse_utilcmd.c:2313 #, c-format msgid "\"%s\" is a deferrable index" msgstr "« %s » est un index déferrable" -#: parser/parse_utilcmd.c:2104 +#: parser/parse_utilcmd.c:2314 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "Ne peut pas créer une contrainte non-déferrable utilisant un index déferrable." -#: parser/parse_utilcmd.c:2162 +#: parser/parse_utilcmd.c:2378 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "l'index « %s », colonne numéro %d, n'a pas de tri par défaut" -#: parser/parse_utilcmd.c:2319 +#: parser/parse_utilcmd.c:2535 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "la colonne « %s » apparaît deux fois dans la contrainte de la clé primaire" -#: parser/parse_utilcmd.c:2325 +#: parser/parse_utilcmd.c:2541 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "la colonne « %s » apparaît deux fois sur une contrainte unique" -#: parser/parse_utilcmd.c:2676 +#: parser/parse_utilcmd.c:2894 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "les expressions et prédicats d'index peuvent seulement faire référence à la table en cours d'indexage" -#: parser/parse_utilcmd.c:2722 +#: parser/parse_utilcmd.c:2972 +#, c-format +msgid "statistics expressions can refer only to the table being indexed" +msgstr "les expressions statistiques peuvent seulement faire référence à la table en cours d'indexage" + +#: parser/parse_utilcmd.c:3018 #, c-format msgid "rules on materialized views are not supported" msgstr "les règles ne sont pas supportés sur les vues matérialisées" -#: parser/parse_utilcmd.c:2785 +#: parser/parse_utilcmd.c:3081 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "" "la condition WHERE d'une règle ne devrait pas contenir de références à d'autres\n" "relations" -#: parser/parse_utilcmd.c:2859 +#: parser/parse_utilcmd.c:3155 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "les règles avec des conditions WHERE ne peuvent contenir que des actions SELECT, INSERT, UPDATE ou DELETE " -#: parser/parse_utilcmd.c:2877 parser/parse_utilcmd.c:2976 rewrite/rewriteHandler.c:501 rewrite/rewriteManip.c:1015 +#: parser/parse_utilcmd.c:3173 parser/parse_utilcmd.c:3274 rewrite/rewriteHandler.c:509 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "" "les instructions conditionnelles UNION/INTERSECT/EXCEPT ne sont pas\n" "implémentées" -#: parser/parse_utilcmd.c:2895 +#: parser/parse_utilcmd.c:3191 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "la règle ON SELECT ne peut pas utiliser OLD" -#: parser/parse_utilcmd.c:2899 +#: parser/parse_utilcmd.c:3195 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "la règle ON SELECT ne peut pas utiliser NEW" -#: parser/parse_utilcmd.c:2908 +#: parser/parse_utilcmd.c:3204 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "la règle ON INSERT ne peut pas utiliser OLD" -#: parser/parse_utilcmd.c:2914 +#: parser/parse_utilcmd.c:3210 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "la règle ON INSERT ne peut pas utiliser NEW" -#: parser/parse_utilcmd.c:2942 +#: parser/parse_utilcmd.c:3238 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "ne peut référencer OLD dans une requête WITH" -#: parser/parse_utilcmd.c:2949 +#: parser/parse_utilcmd.c:3245 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "ne peut référencer NEW dans une requête WITH" -#: parser/parse_utilcmd.c:3407 +#: parser/parse_utilcmd.c:3704 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "clause DEFERRABLE mal placée" -#: parser/parse_utilcmd.c:3412 parser/parse_utilcmd.c:3427 +#: parser/parse_utilcmd.c:3709 parser/parse_utilcmd.c:3724 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "clauses DEFERRABLE/NOT DEFERRABLE multiples non autorisées" -#: parser/parse_utilcmd.c:3422 +#: parser/parse_utilcmd.c:3719 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "clause NOT DEFERRABLE mal placée" -#: parser/parse_utilcmd.c:3443 +#: parser/parse_utilcmd.c:3740 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "clause INITIALLY DEFERRED mal placée" -#: parser/parse_utilcmd.c:3448 parser/parse_utilcmd.c:3474 +#: parser/parse_utilcmd.c:3745 parser/parse_utilcmd.c:3771 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "clauses INITIALLY IMMEDIATE/DEFERRED multiples non autorisées" -#: parser/parse_utilcmd.c:3469 +#: parser/parse_utilcmd.c:3766 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "clause INITIALLY IMMEDIATE mal placée" -#: parser/parse_utilcmd.c:3660 +#: parser/parse_utilcmd.c:3957 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE spécifie un schéma (%s) différent de celui tout juste créé (%s)" -#: parser/parse_utilcmd.c:3694 +#: parser/parse_utilcmd.c:3992 +#, c-format +msgid "\"%s\" is not a partitioned table" +msgstr "« %s » n'est pas une table partitionnée" + +#: parser/parse_utilcmd.c:3999 #, c-format msgid "table \"%s\" is not partitioned" msgstr "la table « %s » n'est pas partitionné" -#: parser/parse_utilcmd.c:3701 +#: parser/parse_utilcmd.c:4006 #, c-format msgid "index \"%s\" is not partitioned" msgstr "l'index « %s » n'est pas partitionné" -#: parser/parse_utilcmd.c:3735 +#: parser/parse_utilcmd.c:4046 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "une table partitionnées par hash ne peut pas avoir de partition par défaut" -#: parser/parse_utilcmd.c:3752 +#: parser/parse_utilcmd.c:4063 #, c-format msgid "invalid bound specification for a hash partition" msgstr "spécification de limite invalide pour une partition par hash" -#: parser/parse_utilcmd.c:3758 partitioning/partbounds.c:2817 +#: parser/parse_utilcmd.c:4069 partitioning/partbounds.c:4698 #, c-format msgid "modulus for hash partition must be a positive integer" msgstr "le modulus pour une partition par hash doit être un entier positif" -#: parser/parse_utilcmd.c:3765 partitioning/partbounds.c:2825 +#: parser/parse_utilcmd.c:4076 partitioning/partbounds.c:4706 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "le modulus pour une partition par hash doit être inférieur au modulus" -#: parser/parse_utilcmd.c:3778 +#: parser/parse_utilcmd.c:4089 #, c-format msgid "invalid bound specification for a list partition" msgstr "spécification de limite invalide pour une partition par liste" -#: parser/parse_utilcmd.c:3831 +#: parser/parse_utilcmd.c:4142 #, c-format msgid "invalid bound specification for a range partition" msgstr "spécification de limite invalide pour une partition par intervalle" -#: parser/parse_utilcmd.c:3837 +#: parser/parse_utilcmd.c:4148 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM doit spécifier exactement une valeur par colonne de partitionnement" -#: parser/parse_utilcmd.c:3841 +#: parser/parse_utilcmd.c:4152 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO doit spécifier exactement une valeur par colonne de partitionnement" -#: parser/parse_utilcmd.c:3955 +#: parser/parse_utilcmd.c:4266 #, c-format msgid "cannot specify NULL in range bound" msgstr "ne peut pas spécifier NULL dans la limite de l'intervalle" -#: parser/parse_utilcmd.c:4004 +#: parser/parse_utilcmd.c:4315 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "chaque limite suivant MAXVALUE doit aussi être MAXVALUE" -#: parser/parse_utilcmd.c:4011 +#: parser/parse_utilcmd.c:4322 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "chaque limite suivant MINVALUE doit aussi être MINVALUE" -#: parser/parse_utilcmd.c:4046 -#, c-format -msgid "collation of partition bound value for column \"%s\" does not match partition key collation \"%s\"" -msgstr "le collationnement de la valeur limite de partition de la colonne « %s » ne correspond pas à celui de la clé de partition « %s »" - -#: parser/parse_utilcmd.c:4063 +#: parser/parse_utilcmd.c:4365 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "la valeur spécifiée ne peut pas être convertie vers le type %s pour la colonne « %s »" -#: parser/scansup.c:204 +#: parser/parser.c:247 +msgid "UESCAPE must be followed by a simple string literal" +msgstr "UESCAPE doit être suivi par une simple chaîne litérale" + +#: parser/parser.c:252 +msgid "invalid Unicode escape character" +msgstr "chaîne d'échappement Unicode invalide" + +#: parser/parser.c:321 scan.l:1329 #, c-format -msgid "identifier \"%s\" will be truncated to \"%s\"" -msgstr "l'identifiant « %s » sera tronqué en « %s »" +msgid "invalid Unicode escape value" +msgstr "valeur d'échappement Unicode invalide" + +#: parser/parser.c:468 scan.l:677 utils/adt/varlena.c:6566 +#, c-format +msgid "invalid Unicode escape" +msgstr "échappement Unicode invalide" + +#: parser/parser.c:469 +#, c-format +msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." +msgstr "Les échappements Unicode doivent être de la forme \\XXXX ou \\+XXXXXX." -#: partitioning/partbounds.c:959 +#: parser/parser.c:497 scan.l:638 scan.l:654 scan.l:670 utils/adt/varlena.c:6591 +#, c-format +msgid "invalid Unicode surrogate pair" +msgstr "paire surrogate Unicode invalide" + +#: parser/scansup.c:101 +#, c-format +msgid "identifier \"%s\" will be truncated to \"%.*s\"" +msgstr "l'identifiant « %s » sera tronqué en « %.*s »" + +#: partitioning/partbounds.c:2821 #, c-format msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "la partition « %s » est en conflit avec la partition par défaut existante « %s »" -#: partitioning/partbounds.c:1018 +#: partitioning/partbounds.c:2870 partitioning/partbounds.c:2885 partitioning/partbounds.c:2901 #, c-format msgid "every hash partition modulus must be a factor of the next larger modulus" msgstr "chaque modulo de partition hash doit être un facteur du prochain plus gros modulo" -#: partitioning/partbounds.c:1114 +#: partitioning/partbounds.c:2871 +#, c-format +msgid "The new modulus %d is not a factor of %d, the modulus of existing partition \"%s\"." +msgstr "" + +#: partitioning/partbounds.c:2886 +#, c-format +msgid "The new modulus %d is not divisible by %d, the modulus of existing partition \"%s\"." +msgstr "" + +#: partitioning/partbounds.c:2902 +#, c-format +msgid "The new modulus %d is not factor of %d, the modulus of existing partition \"%s\"." +msgstr "" + +#: partitioning/partbounds.c:3015 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "limite d'intervalle vide indiquée pour la partition « %s »" -#: partitioning/partbounds.c:1116 +#: partitioning/partbounds.c:3017 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "La limite inférieure spécifiée %s est supérieure ou égale à la limite supérieure %s." -#: partitioning/partbounds.c:1213 +#: partitioning/partbounds.c:3129 #, c-format msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "la partition « %s » surchargerait la partition « %s »" -#: partitioning/partbounds.c:1330 +#: partitioning/partbounds.c:3246 #, c-format msgid "skipped scanning foreign table \"%s\" which is a partition of default partition \"%s\"" msgstr "parcours ignoré pour la table distante « %s » qui n'est pas une partition ou partition par défaut « %s »" -#: partitioning/partbounds.c:1363 -#, c-format -msgid "updated partition constraint for default partition \"%s\" would be violated by some row" -msgstr "la contrainte de partition mise à jour pour la partition par défaut « %s » serait transgressée par des lignes" - -#: partitioning/partbounds.c:2821 +#: partitioning/partbounds.c:4702 #, c-format msgid "remainder for hash partition must be a non-negative integer" msgstr "le reste pour une partition hash doit être un entier non négatif" -#: partitioning/partbounds.c:2848 +#: partitioning/partbounds.c:4726 #, c-format msgid "\"%s\" is not a hash partitioned table" msgstr "« %s » n'est pas une table partitionnée par hash" -#: partitioning/partbounds.c:2859 partitioning/partbounds.c:2976 +#: partitioning/partbounds.c:4737 partitioning/partbounds.c:4854 #, c-format msgid "number of partitioning columns (%d) does not match number of partition keys provided (%d)" msgstr "le nombre de colonnes de partitionnement (%d) ne correspond pas au nombre de clés de partitionnement fourni (%d)" -#: partitioning/partbounds.c:2881 partitioning/partbounds.c:2913 +#: partitioning/partbounds.c:4759 +#, fuzzy, c-format +#| msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" +msgid "column %d of the partition key has type %s, but supplied value is of type %s" +msgstr "la colonne %d de la clé de partitionnement a pour type « %s », mais la valeur fournie a pour type « %s »" + +#: partitioning/partbounds.c:4791 #, c-format msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" msgstr "la colonne %d de la clé de partitionnement a pour type « %s », mais la valeur fournie a pour type « %s »" -#: port/pg_shmem.c:216 port/sysv_shmem.c:216 +#: port/pg_sema.c:209 port/pg_shmem.c:668 port/posix_sema.c:209 port/sysv_sema.c:327 port/sysv_shmem.c:668 +#, c-format +msgid "could not stat data directory \"%s\": %m" +msgstr "n'a pas pu lire les informations sur le répertoire des données « %s » : %m" + +#: port/pg_shmem.c:217 port/sysv_shmem.c:217 #, c-format msgid "could not create shared memory segment: %m" msgstr "n'a pas pu créer le segment de mémoire partagée : %m" -#: port/pg_shmem.c:217 port/sysv_shmem.c:217 +#: port/pg_shmem.c:218 port/sysv_shmem.c:218 #, c-format msgid "Failed system call was shmget(key=%lu, size=%zu, 0%o)." msgstr "L'appel système qui a échoué était shmget(clé=%lu, taille=%zu, 0%o)." -#: port/pg_shmem.c:221 port/sysv_shmem.c:221 +#: port/pg_shmem.c:222 port/sysv_shmem.c:222 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter, or possibly that it is less than your kernel's SHMMIN parameter.\n" @@ -16637,7 +17630,7 @@ msgstr "" "Cette erreur signifie habituellement que la demande de PostgreSQL pour un segment de mémoire partagée dépasse la valeur du paramètre SHMMAX du noyau, ou est plus petite\n" "que votre paramètre SHMMIN du noyau. La documentation PostgreSQL contient plus d'information sur la configuration de la mémoire partagée." -#: port/pg_shmem.c:228 port/sysv_shmem.c:228 +#: port/pg_shmem.c:229 port/sysv_shmem.c:229 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMALL parameter. You might need to reconfigure the kernel with larger SHMALL.\n" @@ -16646,7 +17639,7 @@ msgstr "" "Cette erreur signifie habituellement que la demande de PostgreSQL pour un segment de mémoire partagée dépasse le paramètre SHMALL du noyau. Vous pourriez avoir besoin de reconfigurer\n" "le noyau avec un SHMALL plus important. La documentation PostgreSQL contient plus d'information sur la configuration de la mémoire partagée." -#: port/pg_shmem.c:234 port/sysv_shmem.c:234 +#: port/pg_shmem.c:235 port/sysv_shmem.c:235 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs either if all available shared memory IDs have been taken, in which case you need to raise the SHMMNI parameter in your kernel, or because the system's overall limit for shared memory has been reached.\n" @@ -16655,12 +17648,12 @@ msgstr "" "Cette erreur ne signifie *pas* que vous manquez d'espace disque. Elle survient si tous les identifiants de mémoire partagé disponibles ont été pris, auquel cas vous devez augmenter le paramètre SHMMNI de votre noyau, ou parce que la limite maximum de la mémoire partagée\n" "de votre système a été atteinte. La documentation de PostgreSQL contient plus d'informations sur la configuration de la mémoire partagée." -#: port/pg_shmem.c:577 port/sysv_shmem.c:577 +#: port/pg_shmem.c:606 port/sysv_shmem.c:606 #, c-format msgid "could not map anonymous shared memory: %m" msgstr "n'a pas pu créer le segment de mémoire partagée anonyme : %m" -#: port/pg_shmem.c:579 port/sysv_shmem.c:579 +#: port/pg_shmem.c:608 port/sysv_shmem.c:608 #, c-format msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently %zu bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections." msgstr "" @@ -16671,39 +17664,34 @@ msgstr "" "valeur du paramètre shared_buffers de PostgreSQL ou le paramètre\n" "max_connections." -#: port/pg_shmem.c:639 port/sysv_shmem.c:639 +#: port/pg_shmem.c:676 port/sysv_shmem.c:676 #, c-format msgid "huge pages not supported on this platform" msgstr "Huge Pages non supportées sur cette plateforme" -#: port/pg_shmem.c:700 port/sysv_shmem.c:700 utils/init/miscinit.c:1069 +#: port/pg_shmem.c:737 port/sysv_shmem.c:737 utils/init/miscinit.c:1167 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "" "le bloc de mémoire partagé pré-existant (clé %lu, ID %lu) est en cours\n" "d'utilisation" -#: port/pg_shmem.c:703 port/sysv_shmem.c:703 utils/init/miscinit.c:1071 +#: port/pg_shmem.c:740 port/sysv_shmem.c:740 utils/init/miscinit.c:1169 #, c-format msgid "Terminate any old server processes associated with data directory \"%s\"." msgstr "Termine les anciens processus serveurs associés avec le répertoire de données « %s »." -#: port/pg_shmem.c:754 port/sysv_shmem.c:754 -#, c-format -msgid "could not stat data directory \"%s\": %m" -msgstr "n'a pas pu lire les informations sur le répertoire des données « %s » : %m" - -#: port/sysv_sema.c:123 +#: port/sysv_sema.c:124 #, c-format msgid "could not create semaphores: %m" msgstr "n'a pas pu créer des sémaphores : %m" -#: port/sysv_sema.c:124 +#: port/sysv_sema.c:125 #, c-format msgid "Failed system call was semget(%lu, %d, 0%o)." msgstr "L'appel système qui a échoué était semget(%lu, %d, 0%o)." -#: port/sysv_sema.c:128 +#: port/sysv_sema.c:129 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs when either the system limit for the maximum number of semaphore sets (SEMMNI), or the system wide maximum number of semaphores (SEMMNS), would be exceeded. You need to raise the respective kernel parameter. Alternatively, reduce PostgreSQL's consumption of semaphores by reducing its max_connections parameter.\n" @@ -16718,7 +17706,7 @@ msgstr "" "La documentation de PostgreSQL contient plus d'informations sur la\n" "configuration de votre système avec PostgreSQL." -#: port/sysv_sema.c:158 +#: port/sysv_sema.c:159 #, c-format msgid "You possibly need to raise your kernel's SEMVMX value to be at least %d. Look into the PostgreSQL documentation for details." msgstr "" @@ -16757,216 +17745,193 @@ msgstr "" "n'a pas pu créer le tube d'écoute de signal pour l'identifiant de processus %d :\n" "code d'erreur %lu" -#: port/win32/signal.c:277 port/win32/signal.c:309 +#: port/win32/signal.c:251 #, c-format msgid "could not create signal listener pipe: error code %lu; retrying\n" msgstr "n'a pas pu créer le tube d'écoute de signal : code d'erreur %lu ; nouvelle tentative\n" -#: port/win32/signal.c:320 -#, c-format -msgid "could not create signal dispatch thread: error code %lu\n" -msgstr "n'a pas pu créer le thread de répartition des signaux : code d'erreur %lu\n" - #: port/win32_sema.c:104 #, c-format msgid "could not create semaphore: error code %lu" msgstr "n'a pas pu créer la sémaphore : code d'erreur %lu" -#: port/win32_sema.c:181 +#: port/win32_sema.c:180 #, c-format msgid "could not lock semaphore: error code %lu" msgstr "n'a pas pu verrouiller la sémaphore : code d'erreur %lu" -#: port/win32_sema.c:201 +#: port/win32_sema.c:200 #, c-format msgid "could not unlock semaphore: error code %lu" msgstr "n'a pas pu déverrouiller la sémaphore : code d'erreur %lu" -#: port/win32_sema.c:231 +#: port/win32_sema.c:230 #, c-format msgid "could not try-lock semaphore: error code %lu" msgstr "n'a pas pu tenter le verrouillage de la sémaphore : code d'erreur %lu" -#: port/win32_shmem.c:144 port/win32_shmem.c:152 port/win32_shmem.c:164 port/win32_shmem.c:179 -#, c-format -msgid "could not enable Lock Pages in Memory user right: error code %lu" -msgstr "n'a pas pu activer le Lock Pages in Memory user right : code d'erreur %lu" +#: port/win32_shmem.c:144 port/win32_shmem.c:155 port/win32_shmem.c:167 port/win32_shmem.c:183 +#, fuzzy, c-format +#| msgid "%s: could not open service \"%s\": error code %lu\n" +msgid "could not enable user right \"%s\": error code %lu" +msgstr "%s : n'a pas pu ouvrir le service « %s » : code d'erreur %lu\n" -#: port/win32_shmem.c:145 port/win32_shmem.c:153 port/win32_shmem.c:165 port/win32_shmem.c:180 +#. translator: This is a term from Windows and should be translated to match the Windows localization. +#: port/win32_shmem.c:146 port/win32_shmem.c:155 port/win32_shmem.c:167 port/win32_shmem.c:178 port/win32_shmem.c:180 port/win32_shmem.c:183 +msgid "Lock pages in memory" +msgstr "Verrouillage des pages en mémoire" + +#: port/win32_shmem.c:148 port/win32_shmem.c:156 port/win32_shmem.c:168 port/win32_shmem.c:184 #, c-format msgid "Failed system call was %s." msgstr "L'appel système qui a échoué était %s." -#: port/win32_shmem.c:175 +#: port/win32_shmem.c:178 #, c-format -msgid "could not enable Lock Pages in Memory user right" -msgstr "n'a pas pu activer le Lock Pages in Memory user right" +msgid "could not enable user right \"%s\"" +msgstr "n'a pas pu activer le droit utilisateur « %s »" -#: port/win32_shmem.c:176 -#, c-format -msgid "Assign Lock Pages in Memory user right to the Windows user account which runs PostgreSQL." +#: port/win32_shmem.c:179 +#, fuzzy, c-format +#| msgid "Assign Lock Pages in Memory user right to the Windows user account which runs PostgreSQL." +msgid "Assign user right \"%s\" to the Windows user account which runs PostgreSQL." msgstr "Assignez le droit d'utilisateur Lock Pages in Memory au compte d'utilisateur Windows qui fait tourner PostgreSQL." -#: port/win32_shmem.c:233 +#: port/win32_shmem.c:237 #, c-format msgid "the processor does not support large pages" msgstr "le processeur ne supporte pas les Large Pages" -#: port/win32_shmem.c:235 port/win32_shmem.c:240 -#, c-format -msgid "disabling huge pages" -msgstr "désactivation des Huge Pages" - -#: port/win32_shmem.c:302 port/win32_shmem.c:338 port/win32_shmem.c:356 +#: port/win32_shmem.c:306 port/win32_shmem.c:342 port/win32_shmem.c:360 #, c-format msgid "could not create shared memory segment: error code %lu" msgstr "n'a pas pu créer le segment de mémoire partagée : code d'erreur %lu" -#: port/win32_shmem.c:303 +#: port/win32_shmem.c:307 #, c-format msgid "Failed system call was CreateFileMapping(size=%zu, name=%s)." msgstr "L'appel système qui a échoué était CreateFileMapping(taille=%zu, nom=%s)." -#: port/win32_shmem.c:328 +#: port/win32_shmem.c:332 #, c-format msgid "pre-existing shared memory block is still in use" msgstr "le bloc de mémoire partagé pré-existant est toujours en cours d'utilisation" -#: port/win32_shmem.c:329 +#: port/win32_shmem.c:333 #, c-format msgid "Check if there are any old server processes still running, and terminate them." msgstr "" "Vérifier s'il n'y a pas de vieux processus serveur en cours d'exécution. Si c'est le\n" "cas, fermez-les." -#: port/win32_shmem.c:339 +#: port/win32_shmem.c:343 #, c-format msgid "Failed system call was DuplicateHandle." msgstr "L'appel système qui a échoué était DuplicateHandle." -#: port/win32_shmem.c:357 +#: port/win32_shmem.c:361 #, c-format msgid "Failed system call was MapViewOfFileEx." msgstr "L'appel système qui a échoué était MapViewOfFileEx." -#: postmaster/autovacuum.c:405 +#: postmaster/autovacuum.c:411 #, c-format msgid "could not fork autovacuum launcher process: %m" msgstr "n'a pas pu exécuter le processus autovacuum maître : %m" -#: postmaster/autovacuum.c:441 -#, c-format -msgid "autovacuum launcher started" -msgstr "démarrage du processus de lancement de l'autovacuum" - -#: postmaster/autovacuum.c:819 -#, c-format -msgid "autovacuum launcher shutting down" -msgstr "arrêt du processus de lancement de l'autovacuum" - -#: postmaster/autovacuum.c:1481 +#: postmaster/autovacuum.c:1489 #, c-format msgid "could not fork autovacuum worker process: %m" msgstr "n'a pas pu exécuter le processus autovacuum worker : %m" -#: postmaster/autovacuum.c:1687 -#, c-format -msgid "autovacuum: processing database \"%s\"" -msgstr "autovacuum : traitement de la base de données « %s »" - -#: postmaster/autovacuum.c:2256 +#: postmaster/autovacuum.c:2326 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "autovacuum : suppression de la table temporaire orpheline « %s.%s.%s »" -#: postmaster/autovacuum.c:2485 +#: postmaster/autovacuum.c:2555 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "VACUUM automatique de la table « %s.%s.%s »" -#: postmaster/autovacuum.c:2488 +#: postmaster/autovacuum.c:2558 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "ANALYZE automatique de la table « %s.%s.%s »" -#: postmaster/autovacuum.c:2681 +#: postmaster/autovacuum.c:2751 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "traitement de l'enregistrement de travail pour la relation « %s.%s.%s »" -#: postmaster/autovacuum.c:3262 +#: postmaster/autovacuum.c:3432 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "autovacuum non démarré à cause d'une mauvaise configuration" -#: postmaster/autovacuum.c:3263 +#: postmaster/autovacuum.c:3433 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Activez l'option « track_counts »." -#: postmaster/bgworker.c:395 postmaster/bgworker.c:855 +#: postmaster/bgworker.c:256 #, c-format -msgid "registering background worker \"%s\"" -msgstr "enregistrement du processus en tâche de fond « %s »" - -#: postmaster/bgworker.c:427 -#, c-format -msgid "unregistering background worker \"%s\"" -msgstr "désenregistrement du processus en tâche de fond « %s »" +msgid "inconsistent background worker state (max_worker_processes=%d, total_slots=%d)" +msgstr "" -#: postmaster/bgworker.c:592 +#: postmaster/bgworker.c:650 #, c-format msgid "background worker \"%s\": must attach to shared memory in order to request a database connection" msgstr "processus en tâche de fond « %s » : doit se lier à la mémoire partagée pour pouvoir demander une connexion à une base" -#: postmaster/bgworker.c:601 +#: postmaster/bgworker.c:659 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "processus en tâche de fond « %s » : ne peut pas réclamer un accès à la base s'il démarre au lancement du postmaster" -#: postmaster/bgworker.c:615 +#: postmaster/bgworker.c:673 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "processus en tâche de fond « %s »: intervalle de redémarrage invalide" -#: postmaster/bgworker.c:630 +#: postmaster/bgworker.c:688 #, c-format msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "processus en tâche de fond « %s »: les processus parallélisés ne sont peut-être pas être configurés pour redémarrer" -#: postmaster/bgworker.c:674 +#: postmaster/bgworker.c:712 tcop/postgres.c:3182 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "arrêt du processus en tâche de fond « %s » suite à la demande de l'administrateur" -#: postmaster/bgworker.c:863 +#: postmaster/bgworker.c:893 #, c-format msgid "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "processus en tâche de fond « %s » : doit être listé dans shared_preload_libraries" -#: postmaster/bgworker.c:875 +#: postmaster/bgworker.c:905 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "processus en tâche de fond « %s » : seuls les processus en tâche de fond dynamiques peuvent demander des notifications" -#: postmaster/bgworker.c:890 +#: postmaster/bgworker.c:920 #, c-format msgid "too many background workers" msgstr "trop de processus en tâche de fond" -#: postmaster/bgworker.c:891 +#: postmaster/bgworker.c:921 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." msgstr[0] "Un maximum de %d processus en tâche de fond peut être enregistré avec la configuration actuelle." msgstr[1] "Un maximum de %d processus en tâche de fond peuvent être enregistrés avec la configuration actuelle." -#: postmaster/bgworker.c:895 +#: postmaster/bgworker.c:925 #, c-format msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Considérez l'augmentation du paramètre « max_worker_processes »." -#: postmaster/checkpointer.c:458 +#: postmaster/checkpointer.c:428 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" @@ -16977,351 +17942,363 @@ msgstr[1] "" "les points de vérification (checkpoints) arrivent trop fréquemment\n" "(toutes les %d secondes)" -#: postmaster/checkpointer.c:462 +#: postmaster/checkpointer.c:432 #, c-format msgid "Consider increasing the configuration parameter \"max_wal_size\"." msgstr "Considérez l'augmentation du paramètre « max_wal_size »." -#: postmaster/checkpointer.c:1081 +#: postmaster/checkpointer.c:1056 #, c-format msgid "checkpoint request failed" msgstr "échec de la demande de point de vérification" -#: postmaster/checkpointer.c:1082 +#: postmaster/checkpointer.c:1057 #, c-format msgid "Consult recent messages in the server log for details." msgstr "" "Consultez les messages récents du serveur dans les journaux applicatifs pour\n" "plus de détails." -#: postmaster/checkpointer.c:1266 -#, c-format -msgid "compacted fsync request queue from %d entries to %d entries" -msgstr "a compacté la queue de requêtes fsync de %d entrées à %d" - -#: postmaster/pgarch.c:159 -#, c-format -msgid "could not fork archiver: %m" -msgstr "n'a pas pu lancer le processus fils correspondant au processus d'archivage : %m" - -#: postmaster/pgarch.c:470 +#: postmaster/pgarch.c:372 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "archive_mode activé, cependant archive_command n'est pas configuré" -#: postmaster/pgarch.c:492 +#: postmaster/pgarch.c:394 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "supprimé le fichier de statut d'archivage orphelin « %s »" -#: postmaster/pgarch.c:502 +#: postmaster/pgarch.c:404 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" msgstr "la suppression du fichier de statut d'archive orphelin « %s » a échoué trop de fois, une nouvelle tentative aura lieu plus tard" -#: postmaster/pgarch.c:538 +#: postmaster/pgarch.c:440 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "l'archivage du journal de transactions « %s » a échoué trop de fois, nouvelle tentative repoussée" -#: postmaster/pgarch.c:639 +#: postmaster/pgarch.c:541 #, c-format msgid "archive command failed with exit code %d" msgstr "échec de la commande d'archivage avec un code de retour %d" -#: postmaster/pgarch.c:641 postmaster/pgarch.c:651 postmaster/pgarch.c:657 postmaster/pgarch.c:666 +#: postmaster/pgarch.c:543 postmaster/pgarch.c:553 postmaster/pgarch.c:559 postmaster/pgarch.c:568 #, c-format msgid "The failed archive command was: %s" msgstr "La commande d'archivage qui a échoué était : %s" -#: postmaster/pgarch.c:648 +#: postmaster/pgarch.c:550 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "la commande d'archivage a été terminée par l'exception 0x%X" -#: postmaster/pgarch.c:650 postmaster/postmaster.c:3669 +#: postmaster/pgarch.c:552 postmaster/postmaster.c:3721 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "" "Voir le fichier d'en-tête C « ntstatus.h » pour une description de la valeur\n" "hexadécimale." -#: postmaster/pgarch.c:655 +#: postmaster/pgarch.c:557 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "la commande d'archivage a été terminée par le signal %d : %s" -#: postmaster/pgarch.c:664 +#: postmaster/pgarch.c:566 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "la commande d'archivage a quitté avec le statut non reconnu %d" -#: postmaster/pgstat.c:396 +#: postmaster/pgstat.c:420 #, c-format msgid "could not resolve \"localhost\": %s" msgstr "n'a pas pu résoudre « localhost » : %s" -#: postmaster/pgstat.c:419 +#: postmaster/pgstat.c:443 #, c-format msgid "trying another address for the statistics collector" msgstr "nouvelle tentative avec une autre adresse pour le récupérateur de statistiques" -#: postmaster/pgstat.c:428 +#: postmaster/pgstat.c:452 #, c-format msgid "could not create socket for statistics collector: %m" msgstr "n'a pas pu créer la socket pour le récupérateur de statistiques : %m" -#: postmaster/pgstat.c:440 +#: postmaster/pgstat.c:464 #, c-format msgid "could not bind socket for statistics collector: %m" msgstr "n'a pas pu lier la socket au récupérateur de statistiques : %m" -#: postmaster/pgstat.c:451 +#: postmaster/pgstat.c:475 #, c-format msgid "could not get address of socket for statistics collector: %m" msgstr "n'a pas pu obtenir l'adresse de la socket du récupérateur de statistiques : %m" -#: postmaster/pgstat.c:467 +#: postmaster/pgstat.c:491 #, c-format msgid "could not connect socket for statistics collector: %m" msgstr "n'a pas pu connecter la socket au récupérateur de statistiques : %m" -#: postmaster/pgstat.c:488 +#: postmaster/pgstat.c:512 #, c-format msgid "could not send test message on socket for statistics collector: %m" msgstr "" "n'a pas pu envoyer le message de tests sur la socket du récupérateur de\n" "statistiques : %m" -#: postmaster/pgstat.c:514 +#: postmaster/pgstat.c:538 #, c-format msgid "select() failed in statistics collector: %m" msgstr "échec du select() dans le récupérateur de statistiques : %m" -#: postmaster/pgstat.c:529 +#: postmaster/pgstat.c:553 #, c-format msgid "test message did not get through on socket for statistics collector" msgstr "" "le message de test n'a pas pu arriver sur la socket du récupérateur de\n" "statistiques : %m" -#: postmaster/pgstat.c:544 +#: postmaster/pgstat.c:568 #, c-format msgid "could not receive test message on socket for statistics collector: %m" msgstr "" "n'a pas pu recevoir le message de tests sur la socket du récupérateur de\n" "statistiques : %m" -#: postmaster/pgstat.c:554 +#: postmaster/pgstat.c:578 #, c-format msgid "incorrect test message transmission on socket for statistics collector" msgstr "" "transmission incorrecte du message de tests sur la socket du récupérateur de\n" "statistiques" -#: postmaster/pgstat.c:577 +#: postmaster/pgstat.c:601 #, c-format msgid "could not set statistics collector socket to nonblocking mode: %m" msgstr "" "n'a pas pu initialiser la socket du récupérateur de statistiques dans le mode\n" "non bloquant : %m" -#: postmaster/pgstat.c:616 +#: postmaster/pgstat.c:645 #, c-format msgid "disabling statistics collector for lack of working socket" msgstr "" "désactivation du récupérateur de statistiques à cause du manque de socket\n" "fonctionnel" -#: postmaster/pgstat.c:763 +#: postmaster/pgstat.c:792 #, c-format msgid "could not fork statistics collector: %m" msgstr "" "n'a pas pu lancer le processus fils correspondant au récupérateur de\n" "statistiques : %m" -#: postmaster/pgstat.c:1347 +#: postmaster/pgstat.c:1461 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "cible reset non reconnu : « %s »" -#: postmaster/pgstat.c:1348 -#, c-format -msgid "Target must be \"archiver\" or \"bgwriter\"." +#: postmaster/pgstat.c:1462 +#, fuzzy, c-format +#| msgid "Target must be \"archiver\" or \"bgwriter\"." +msgid "Target must be \"archiver\", \"bgwriter\", \"wal\" or \"prefetch_recovery\"." msgstr "La cible doit être « archiver » ou « bgwriter »." -#: postmaster/pgstat.c:4534 +#: postmaster/pgstat.c:3330 #, c-format msgid "could not read statistics message: %m" msgstr "n'a pas pu lire le message des statistiques : %m" -#: postmaster/pgstat.c:4875 postmaster/pgstat.c:5032 +#: postmaster/pgstat.c:3680 postmaster/pgstat.c:3872 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier temporaire des statistiques « %s » : %m" -#: postmaster/pgstat.c:4942 postmaster/pgstat.c:5077 +#: postmaster/pgstat.c:3782 postmaster/pgstat.c:3917 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "n'a pas pu écrire le fichier temporaire des statistiques « %s » : %m" -#: postmaster/pgstat.c:4951 postmaster/pgstat.c:5086 +#: postmaster/pgstat.c:3791 postmaster/pgstat.c:3926 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "n'a pas pu fermer le fichier temporaire des statistiques « %s » : %m" -#: postmaster/pgstat.c:4959 postmaster/pgstat.c:5094 +#: postmaster/pgstat.c:3799 postmaster/pgstat.c:3934 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "" "n'a pas pu renommer le fichier temporaire des statistiques « %s » en\n" "« %s » : %m" -#: postmaster/pgstat.c:5183 postmaster/pgstat.c:5389 postmaster/pgstat.c:5542 +#: postmaster/pgstat.c:4033 postmaster/pgstat.c:4311 postmaster/pgstat.c:4469 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier de statistiques « %s » : %m" -#: postmaster/pgstat.c:5195 postmaster/pgstat.c:5205 postmaster/pgstat.c:5226 postmaster/pgstat.c:5248 postmaster/pgstat.c:5263 postmaster/pgstat.c:5326 postmaster/pgstat.c:5401 postmaster/pgstat.c:5421 postmaster/pgstat.c:5439 postmaster/pgstat.c:5455 postmaster/pgstat.c:5473 postmaster/pgstat.c:5489 postmaster/pgstat.c:5554 postmaster/pgstat.c:5566 postmaster/pgstat.c:5578 postmaster/pgstat.c:5603 postmaster/pgstat.c:5625 +#: postmaster/pgstat.c:4045 postmaster/pgstat.c:4055 postmaster/pgstat.c:4076 postmaster/pgstat.c:4087 postmaster/pgstat.c:4098 postmaster/pgstat.c:4110 postmaster/pgstat.c:4132 postmaster/pgstat.c:4147 postmaster/pgstat.c:4217 postmaster/pgstat.c:4248 postmaster/pgstat.c:4323 postmaster/pgstat.c:4343 postmaster/pgstat.c:4361 postmaster/pgstat.c:4377 postmaster/pgstat.c:4395 postmaster/pgstat.c:4411 postmaster/pgstat.c:4481 postmaster/pgstat.c:4493 postmaster/pgstat.c:4505 postmaster/pgstat.c:4516 postmaster/pgstat.c:4527 postmaster/pgstat.c:4539 postmaster/pgstat.c:4564 postmaster/pgstat.c:4591 postmaster/pgstat.c:4604 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "fichier de statistiques « %s » corrompu" -#: postmaster/pgstat.c:5754 +#: postmaster/pgstat.c:4713 +#, c-format +msgid "statistics collector's time %s is later than backend local time %s" +msgstr "" + +#: postmaster/pgstat.c:4743 #, c-format msgid "using stale statistics instead of current ones because stats collector is not responding" msgstr "" "utilise de vieilles statistiques à la place des actuelles car le collecteur de\n" "statistiques ne répond pas" -#: postmaster/pgstat.c:6081 +#: postmaster/pgstat.c:4870 +#, c-format +msgid "stats_timestamp %s is later than collector's time %s for database %u" +msgstr "" + +#: postmaster/pgstat.c:5080 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "" "corruption de la table hachée de la base de données lors du lancement\n" "--- annulation" -#: postmaster/postmaster.c:712 +#: postmaster/postmaster.c:742 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s : argument invalide pour l'option -f : « %s »\n" -#: postmaster/postmaster.c:798 +#: postmaster/postmaster.c:821 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s : argument invalide pour l'option -t : « %s »\n" -#: postmaster/postmaster.c:849 +#: postmaster/postmaster.c:872 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s : argument invalide : « %s »\n" -#: postmaster/postmaster.c:891 +#: postmaster/postmaster.c:914 #, c-format msgid "%s: superuser_reserved_connections (%d) must be less than max_connections (%d)\n" msgstr "%s : superuser_reserved_connections (%d) doit être inférieur à max_connections (%d)\n" -#: postmaster/postmaster.c:898 +#: postmaster/postmaster.c:921 #, c-format msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" msgstr "L'archivage des journaux de transactions ne peut pas être activé quand wal_level vaut « minimal »" -#: postmaster/postmaster.c:901 +#: postmaster/postmaster.c:924 #, c-format msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" msgstr "l'envoi d'un flux de transactions (max_wal_senders > 0) nécessite que le paramètre wal_level à « replica » ou « logical »" -#: postmaster/postmaster.c:909 +#: postmaster/postmaster.c:932 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s : tables datetoken invalide, merci de corriger\n" -#: postmaster/postmaster.c:998 +#: postmaster/postmaster.c:1049 +#, c-format +msgid "could not create I/O completion port for child queue" +msgstr "n'a pas pu créer un port de terminaison I/O pour la queue" + +#: postmaster/postmaster.c:1114 +#, c-format +msgid "ending log output to stderr" +msgstr "arrêt des traces sur stderr" + +#: postmaster/postmaster.c:1115 +#, c-format +msgid "Future log output will go to log destination \"%s\"." +msgstr "Les traces suivantes iront sur « %s »." + +#: postmaster/postmaster.c:1126 #, c-format msgid "starting %s" msgstr "démarrage de %s" -#: postmaster/postmaster.c:1027 postmaster/postmaster.c:1125 utils/init/miscinit.c:1551 +#: postmaster/postmaster.c:1155 postmaster/postmaster.c:1254 utils/init/miscinit.c:1627 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "syntaxe de liste invalide pour le paramètre « %s »" -#: postmaster/postmaster.c:1058 +#: postmaster/postmaster.c:1186 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "n'a pas pu créer le socket d'écoute pour « %s »" -#: postmaster/postmaster.c:1064 +#: postmaster/postmaster.c:1192 #, c-format msgid "could not create any TCP/IP sockets" msgstr "n'a pas pu créer de socket TCP/IP" -#: postmaster/postmaster.c:1147 +#: postmaster/postmaster.c:1224 +#, c-format +msgid "DNSServiceRegister() failed: error code %ld" +msgstr "échec de DNSServiceRegister() : code d'erreur %ld" + +#: postmaster/postmaster.c:1276 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "n'a pas pu créer la socket de domaine Unix dans le répertoire « %s »" -#: postmaster/postmaster.c:1153 +#: postmaster/postmaster.c:1282 #, c-format msgid "could not create any Unix-domain sockets" msgstr "n'a pas pu créer les sockets de domaine Unix" -#: postmaster/postmaster.c:1165 +#: postmaster/postmaster.c:1294 #, c-format msgid "no socket created for listening" msgstr "pas de socket créé pour l'écoute" -#: postmaster/postmaster.c:1205 -#, c-format -msgid "could not create I/O completion port for child queue" -msgstr "n'a pas pu créer un port de terminaison I/O pour la queue" - -#: postmaster/postmaster.c:1234 +#: postmaster/postmaster.c:1325 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s : n'a pas pu modifier les droits du fichier PID externe « %s » : %s\n" -#: postmaster/postmaster.c:1238 +#: postmaster/postmaster.c:1329 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s : n'a pas pu écrire le fichier PID externe « %s » : %s\n" -#: postmaster/postmaster.c:1298 -#, c-format -msgid "ending log output to stderr" -msgstr "arrêt des traces sur stderr" - -#: postmaster/postmaster.c:1299 -#, c-format -msgid "Future log output will go to log destination \"%s\"." -msgstr "Les traces suivantes iront sur « %s »." - -#: postmaster/postmaster.c:1325 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1362 utils/init/postinit.c:216 #, c-format msgid "could not load pg_hba.conf" msgstr "n'a pas pu charger pg_hba.conf" -#: postmaster/postmaster.c:1351 +#: postmaster/postmaster.c:1388 #, c-format msgid "postmaster became multithreaded during startup" msgstr "le postmaster est devenu multithreadé lors du démarrage" -#: postmaster/postmaster.c:1352 +#: postmaster/postmaster.c:1389 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Configurez la variable d'environnement LC_ALL avec une locale valide." -#: postmaster/postmaster.c:1453 +#: postmaster/postmaster.c:1484 +#, fuzzy, c-format +#| msgid "%s: could not locate my own executable path\n" +msgid "%s: could not locate my own executable path" +msgstr "%s : n'a pas pu localiser mon propre exécutable\n" + +#: postmaster/postmaster.c:1491 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s : n'a pas pu localiser l'exécutable postgres correspondant" -#: postmaster/postmaster.c:1476 utils/misc/tzparser.c:341 +#: postmaster/postmaster.c:1514 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Ceci peut indiquer une installation PostgreSQL incomplète, ou que le fichier « %s » a été déplacé." -#: postmaster/postmaster.c:1503 +#: postmaster/postmaster.c:1541 #, c-format msgid "" "%s: could not find the database system\n" @@ -17332,454 +18309,522 @@ msgstr "" "S'attendait à le trouver dans le répertoire « %s »,\n" "mais n'a pas réussi à ouvrir le fichier « %s »: %s\n" -#: postmaster/postmaster.c:1680 +#: postmaster/postmaster.c:1718 #, c-format msgid "select() failed in postmaster: %m" msgstr "échec de select() dans postmaster : %m" -#: postmaster/postmaster.c:1835 +#: postmaster/postmaster.c:1854 +#, c-format +msgid "issuing SIGKILL to recalcitrant children" +msgstr "" + +#: postmaster/postmaster.c:1875 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "forçage d'un arrêt immédiat car le fichier de verrou du répertoire de données est invalide" -#: postmaster/postmaster.c:1934 postmaster/postmaster.c:1965 +#: postmaster/postmaster.c:1978 postmaster/postmaster.c:2006 #, c-format msgid "incomplete startup packet" msgstr "paquet de démarrage incomplet" -#: postmaster/postmaster.c:1946 +#: postmaster/postmaster.c:1990 #, c-format msgid "invalid length of startup packet" msgstr "longueur invalide du paquet de démarrage" -#: postmaster/postmaster.c:2004 +#: postmaster/postmaster.c:2045 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "échec lors de l'envoi de la réponse de négotiation SSL : %m" -#: postmaster/postmaster.c:2031 +#: postmaster/postmaster.c:2077 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "échec lors de l'envoi de la réponse à la négociation GSSAPI : %m" -#: postmaster/postmaster.c:2056 +#: postmaster/postmaster.c:2107 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "protocole frontal %u.%u non supporté : le serveur supporte de %u.0 à %u.%u" -#: postmaster/postmaster.c:2120 utils/misc/guc.c:6560 utils/misc/guc.c:6596 utils/misc/guc.c:6666 utils/misc/guc.c:7989 utils/misc/guc.c:10811 utils/misc/guc.c:10845 +#: postmaster/postmaster.c:2171 utils/misc/guc.c:7146 utils/misc/guc.c:7182 utils/misc/guc.c:7252 utils/misc/guc.c:8584 utils/misc/guc.c:11540 utils/misc/guc.c:11581 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "valeur invalide pour le paramètre « %s » : « %s »" -#: postmaster/postmaster.c:2123 +#: postmaster/postmaster.c:2174 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Les valeurs valides sont : « false », « 0 », « true », « 1 », « database »." -#: postmaster/postmaster.c:2168 +#: postmaster/postmaster.c:2219 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "" "configuration invalide du paquet de démarrage : terminaison attendue comme\n" "dernier octet" -#: postmaster/postmaster.c:2206 +#: postmaster/postmaster.c:2236 +#, c-format +msgid "no PostgreSQL user name specified in startup packet" +msgstr "aucun nom d'utilisateur PostgreSQL n'a été spécifié dans le paquet de démarrage" + +#: postmaster/postmaster.c:2300 +#, c-format +msgid "the database system is starting up" +msgstr "le système de bases de données se lance" + +#: postmaster/postmaster.c:2306 +#, c-format +msgid "the database system is not yet accepting connections" +msgstr "le système de bases de données n'accepte pas encore de connexions" + +#: postmaster/postmaster.c:2307 +#, fuzzy, c-format +#| msgid "consistent recovery state reached at %X/%X" +msgid "Consistent recovery state has not been yet reached." +msgstr "état de restauration cohérent atteint à %X/%X" + +#: postmaster/postmaster.c:2311 #, c-format -msgid "no PostgreSQL user name specified in startup packet" -msgstr "aucun nom d'utilisateur PostgreSQL n'a été spécifié dans le paquet de démarrage" +msgid "the database system is not accepting connections" +msgstr "le système de bases de données n'accepte pas de connexions" -#: postmaster/postmaster.c:2265 +#: postmaster/postmaster.c:2312 #, c-format -msgid "the database system is starting up" -msgstr "le système de bases de données se lance" +msgid "Hot standby mode is disabled." +msgstr "Le mode Hot Standby est désactivé" -#: postmaster/postmaster.c:2270 +#: postmaster/postmaster.c:2317 #, c-format msgid "the database system is shutting down" msgstr "le système de base de données s'arrête" -#: postmaster/postmaster.c:2275 +#: postmaster/postmaster.c:2322 #, c-format msgid "the database system is in recovery mode" msgstr "le système de bases de données est en cours de restauration" -#: postmaster/postmaster.c:2280 storage/ipc/procarray.c:293 storage/ipc/sinvaladt.c:298 storage/lmgr/proc.c:363 +#: postmaster/postmaster.c:2327 storage/ipc/procarray.c:463 storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "désolé, trop de clients sont déjà connectés" -#: postmaster/postmaster.c:2370 +#: postmaster/postmaster.c:2417 #, c-format msgid "wrong key in cancel request for process %d" msgstr "mauvaise clé dans la demande d'annulation pour le processus %d" -#: postmaster/postmaster.c:2382 +#: postmaster/postmaster.c:2429 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "le PID %d dans la demande d'annulation ne correspond à aucun processus" -#: postmaster/postmaster.c:2629 +#: postmaster/postmaster.c:2683 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "a reçu SIGHUP, rechargement des fichiers de configuration" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2655 postmaster/postmaster.c:2659 +#: postmaster/postmaster.c:2709 postmaster/postmaster.c:2713 #, c-format msgid "%s was not reloaded" msgstr "%s n'a pas été rechargé" -#: postmaster/postmaster.c:2669 +#: postmaster/postmaster.c:2723 #, c-format msgid "SSL configuration was not reloaded" msgstr "la configuration SSL n'a pas été rechargée" -#: postmaster/postmaster.c:2717 +#: postmaster/postmaster.c:2779 #, c-format msgid "received smart shutdown request" msgstr "a reçu une demande d'arrêt intelligent" -#: postmaster/postmaster.c:2775 +#: postmaster/postmaster.c:2825 #, c-format msgid "received fast shutdown request" msgstr "a reçu une demande d'arrêt rapide" -#: postmaster/postmaster.c:2808 +#: postmaster/postmaster.c:2843 #, c-format msgid "aborting any active transactions" msgstr "annulation des transactions actives" -#: postmaster/postmaster.c:2842 +#: postmaster/postmaster.c:2867 #, c-format msgid "received immediate shutdown request" msgstr "a reçu une demande d'arrêt immédiat" -#: postmaster/postmaster.c:2909 +#: postmaster/postmaster.c:2944 #, c-format msgid "shutdown at recovery target" msgstr "arrêt sur la cible de restauration" -#: postmaster/postmaster.c:2925 postmaster/postmaster.c:2948 +#: postmaster/postmaster.c:2962 postmaster/postmaster.c:2998 msgid "startup process" msgstr "processus de lancement" -#: postmaster/postmaster.c:2928 +#: postmaster/postmaster.c:2965 #, c-format msgid "aborting startup due to startup process failure" msgstr "annulation du démarrage à cause d'un échec dans le processus de lancement" -#: postmaster/postmaster.c:2989 +#: postmaster/postmaster.c:3040 #, c-format msgid "database system is ready to accept connections" msgstr "le système de bases de données est prêt pour accepter les connexions" -#: postmaster/postmaster.c:3010 +#: postmaster/postmaster.c:3061 msgid "background writer process" msgstr "processus d'écriture en tâche de fond" -#: postmaster/postmaster.c:3064 +#: postmaster/postmaster.c:3115 msgid "checkpointer process" msgstr "processus checkpointer" -#: postmaster/postmaster.c:3080 +#: postmaster/postmaster.c:3131 msgid "WAL writer process" msgstr "processus d'écriture des journaux de transaction" -#: postmaster/postmaster.c:3095 +#: postmaster/postmaster.c:3146 msgid "WAL receiver process" msgstr "processus de réception des journaux de transaction" -#: postmaster/postmaster.c:3110 +#: postmaster/postmaster.c:3161 msgid "autovacuum launcher process" msgstr "processus de lancement de l'autovacuum" -#: postmaster/postmaster.c:3125 +#: postmaster/postmaster.c:3179 msgid "archiver process" msgstr "processus d'archivage" -#: postmaster/postmaster.c:3141 +#: postmaster/postmaster.c:3194 msgid "statistics collector process" msgstr "processus de récupération des statistiques" -#: postmaster/postmaster.c:3155 +#: postmaster/postmaster.c:3208 msgid "system logger process" msgstr "processus des journaux applicatifs" -#: postmaster/postmaster.c:3217 +#: postmaster/postmaster.c:3272 #, c-format msgid "background worker \"%s\"" msgstr "processus en tâche de fond « %s »" -#: postmaster/postmaster.c:3301 postmaster/postmaster.c:3321 postmaster/postmaster.c:3328 postmaster/postmaster.c:3346 +#: postmaster/postmaster.c:3356 postmaster/postmaster.c:3376 postmaster/postmaster.c:3383 postmaster/postmaster.c:3401 msgid "server process" msgstr "processus serveur" -#: postmaster/postmaster.c:3400 +#: postmaster/postmaster.c:3455 #, c-format msgid "terminating any other active server processes" msgstr "arrêt des autres processus serveur actifs" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3656 +#: postmaster/postmaster.c:3708 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) a quitté avec le code de sortie %d" -#: postmaster/postmaster.c:3658 postmaster/postmaster.c:3670 postmaster/postmaster.c:3680 postmaster/postmaster.c:3691 +#: postmaster/postmaster.c:3710 postmaster/postmaster.c:3722 postmaster/postmaster.c:3732 postmaster/postmaster.c:3743 #, c-format msgid "Failed process was running: %s" msgstr "Le processus qui a échoué exécutait : %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3667 +#: postmaster/postmaster.c:3719 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) a été arrêté par l'exception 0x%X" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3677 +#: postmaster/postmaster.c:3729 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) a été arrêté par le signal %d : %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3689 +#: postmaster/postmaster.c:3741 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) a quitté avec le statut inattendu %d" -#: postmaster/postmaster.c:3872 +#: postmaster/postmaster.c:3956 #, c-format msgid "abnormal database system shutdown" msgstr "le système de base de données a été arrêté anormalement" -#: postmaster/postmaster.c:3912 +#: postmaster/postmaster.c:3996 #, c-format msgid "all server processes terminated; reinitializing" msgstr "tous les processus serveur sont arrêtés ; réinitialisation" -#: postmaster/postmaster.c:4082 postmaster/postmaster.c:5473 postmaster/postmaster.c:5847 +#: postmaster/postmaster.c:4170 postmaster/postmaster.c:5530 postmaster/postmaster.c:5921 #, c-format msgid "could not generate random cancel key" msgstr "n'a pas pu générer la clé d'annulation aléatoire" -#: postmaster/postmaster.c:4136 +#: postmaster/postmaster.c:4224 #, c-format msgid "could not fork new process for connection: %m" msgstr "n'a pas pu lancer le nouveau processus fils pour la connexion : %m" -#: postmaster/postmaster.c:4178 +#: postmaster/postmaster.c:4266 msgid "could not fork new process for connection: " msgstr "n'a pas pu lancer le nouveau processus fils pour la connexion : " -#: postmaster/postmaster.c:4288 +#: postmaster/postmaster.c:4372 #, c-format msgid "connection received: host=%s port=%s" msgstr "connexion reçue : hôte=%s port=%s" -#: postmaster/postmaster.c:4293 +#: postmaster/postmaster.c:4377 #, c-format msgid "connection received: host=%s" msgstr "connexion reçue : hôte=%s" -#: postmaster/postmaster.c:4563 +#: postmaster/postmaster.c:4620 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "n'a pas pu exécuter le processus serveur « %s » : %m" -#: postmaster/postmaster.c:4716 +#: postmaster/postmaster.c:4678 +#, fuzzy, c-format +#| msgid "could not close handle to backend parameter variables: error code %lu\n" +msgid "could not create backend parameter file mapping: error code %lu" +msgstr "" +"n'a pas pu fermer le lien vers les variables des paramètres du serveur :\n" +"code d'erreur %lu\n" + +#: postmaster/postmaster.c:4687 +#, fuzzy, c-format +#| msgid "could not map view of backend variables: error code %lu\n" +msgid "could not map backend parameter memory: error code %lu" +msgstr "" +"n'a pas pu exécuter \"map\" la vue des variables serveurs : code\n" +"d'erreur %lu\n" + +#: postmaster/postmaster.c:4714 +#, c-format +msgid "subprocess command line too long" +msgstr "ligne de commande du sous-processus trop longue" + +#: postmaster/postmaster.c:4732 +#, c-format +msgid "CreateProcess() call failed: %m (error code %lu)" +msgstr "échec de l'appel à CreateProcess() : %m (code d'erreur %lu)" + +#: postmaster/postmaster.c:4759 +#, fuzzy, c-format +#| msgid "could not unmap view of backend variables: error code %lu\n" +msgid "could not unmap view of backend parameter file: error code %lu" +msgstr "" +"n'a pas pu exécuter \"unmap\" sur la vue des variables serveurs : code\n" +"d'erreur %lu\n" + +#: postmaster/postmaster.c:4763 +#, fuzzy, c-format +#| msgid "could not close handle to backend parameter variables: error code %lu\n" +msgid "could not close handle to backend parameter file: error code %lu" +msgstr "" +"n'a pas pu fermer le lien vers les variables des paramètres du serveur :\n" +"code d'erreur %lu\n" + +#: postmaster/postmaster.c:4785 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "abandon après trop de tentatives pour réserver la mémoire partagée" -#: postmaster/postmaster.c:4717 +#: postmaster/postmaster.c:4786 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Ceci pourrait être causé par un logiciel ASLR ou un antivirus." -#: postmaster/postmaster.c:4928 +#: postmaster/postmaster.c:4976 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "la configuration SSL n'a pas pu être chargée dans le processus fils" -#: postmaster/postmaster.c:5060 +#: postmaster/postmaster.c:5102 #, c-format -msgid "Please report this to ." -msgstr "Veuillez rapporter ceci à ." +msgid "Please report this to <%s>." +msgstr "Merci de signaler ceci à <%s>." -#: postmaster/postmaster.c:5147 +#: postmaster/postmaster.c:5189 #, c-format msgid "database system is ready to accept read only connections" msgstr "le système de bases de données est prêt pour accepter les connexions en lecture seule" -#: postmaster/postmaster.c:5401 +#: postmaster/postmaster.c:5454 #, c-format msgid "could not fork startup process: %m" msgstr "n'a pas pu lancer le processus fils de démarrage : %m" -#: postmaster/postmaster.c:5405 +#: postmaster/postmaster.c:5458 +#, c-format +msgid "could not fork archiver process: %m" +msgstr "n'a pas pu créer un processus fils d'archivage des journaux de transactions : %m" + +#: postmaster/postmaster.c:5462 #, c-format msgid "could not fork background writer process: %m" msgstr "" "n'a pas pu créer un processus fils du processus d'écriture en tâche de\n" "fond : %m" -#: postmaster/postmaster.c:5409 +#: postmaster/postmaster.c:5466 #, c-format msgid "could not fork checkpointer process: %m" msgstr "n'a pas pu créer le processus checkpointer : %m" -#: postmaster/postmaster.c:5413 +#: postmaster/postmaster.c:5470 #, c-format msgid "could not fork WAL writer process: %m" msgstr "" "n'a pas pu créer un processus fils du processus d'écriture des journaux de\n" "transaction : %m" -#: postmaster/postmaster.c:5417 +#: postmaster/postmaster.c:5474 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "" "n'a pas pu créer un processus fils de réception des journaux de\n" "transactions : %m" -#: postmaster/postmaster.c:5421 +#: postmaster/postmaster.c:5478 #, c-format msgid "could not fork process: %m" msgstr "n'a pas pu lancer le processus fils : %m" -#: postmaster/postmaster.c:5618 postmaster/postmaster.c:5641 +#: postmaster/postmaster.c:5679 postmaster/postmaster.c:5702 #, c-format msgid "database connection requirement not indicated during registration" msgstr "pré-requis de la connexion à la base non indiqué lors de l'enregistrement" -#: postmaster/postmaster.c:5625 postmaster/postmaster.c:5648 +#: postmaster/postmaster.c:5686 postmaster/postmaster.c:5709 #, c-format msgid "invalid processing mode in background worker" msgstr "mode de traitement invalide dans le processus en tâche de fond" -#: postmaster/postmaster.c:5720 -#, c-format -msgid "starting background worker process \"%s\"" -msgstr "démarrage du processus d'écriture en tâche de fond « %s »" - -#: postmaster/postmaster.c:5732 +#: postmaster/postmaster.c:5794 #, c-format msgid "could not fork worker process: %m" msgstr "n'a pas pu créer un processus fils du processus en tâche de fond : %m" -#: postmaster/postmaster.c:6168 +#: postmaster/postmaster.c:5907 +#, c-format +msgid "no slot available for new worker process" +msgstr "aucun slot disponible pour le nouveau processus worker" + +#: postmaster/postmaster.c:6240 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "n'a pas pu dupliquer la socket %d pour le serveur : code d'erreur %d" -#: postmaster/postmaster.c:6200 +#: postmaster/postmaster.c:6272 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "n'a pas pu créer la socket héritée : code d'erreur %d\n" -#: postmaster/postmaster.c:6229 +#: postmaster/postmaster.c:6301 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "n'a pas pu ouvrir le fichier des variables moteurs « %s » : %s\n" -#: postmaster/postmaster.c:6236 +#: postmaster/postmaster.c:6308 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "n'a pas pu lire le fichier de configuration serveur « %s » : %s\n" -#: postmaster/postmaster.c:6245 +#: postmaster/postmaster.c:6317 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "n'a pas pu supprimer le fichier « %s » : %s\n" -#: postmaster/postmaster.c:6262 +#: postmaster/postmaster.c:6334 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "" "n'a pas pu exécuter \"map\" la vue des variables serveurs : code\n" "d'erreur %lu\n" -#: postmaster/postmaster.c:6271 +#: postmaster/postmaster.c:6343 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "" "n'a pas pu exécuter \"unmap\" sur la vue des variables serveurs : code\n" "d'erreur %lu\n" -#: postmaster/postmaster.c:6278 +#: postmaster/postmaster.c:6350 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "" "n'a pas pu fermer le lien vers les variables des paramètres du serveur :\n" "code d'erreur %lu\n" -#: postmaster/postmaster.c:6442 +#: postmaster/postmaster.c:6526 #, c-format msgid "could not read exit code for process\n" msgstr "n'a pas pu lire le code de sortie du processus\n" -#: postmaster/postmaster.c:6447 +#: postmaster/postmaster.c:6531 #, c-format msgid "could not post child completion status\n" msgstr "n'a pas pu poster le statut de fin de l'enfant\n" -#: postmaster/syslogger.c:480 postmaster/syslogger.c:1154 +#: postmaster/syslogger.c:473 postmaster/syslogger.c:1152 #, c-format msgid "could not read from logger pipe: %m" msgstr "n'a pas pu lire à partir du tube des journaux applicatifs : %m" -#: postmaster/syslogger.c:528 -#, c-format -msgid "logger shutting down" -msgstr "arrêt en cours des journaux applicatifs" - -#: postmaster/syslogger.c:572 postmaster/syslogger.c:586 +#: postmaster/syslogger.c:570 postmaster/syslogger.c:584 #, c-format msgid "could not create pipe for syslog: %m" msgstr "n'a pas pu créer un tube pour syslog : %m" -#: postmaster/syslogger.c:637 +#: postmaster/syslogger.c:635 #, c-format msgid "could not fork system logger: %m" msgstr "n'a pas pu lancer le processus des journaux applicatifs : %m" -#: postmaster/syslogger.c:673 +#: postmaster/syslogger.c:671 #, c-format msgid "redirecting log output to logging collector process" msgstr "redirection des traces vers le processus de récupération des traces" -#: postmaster/syslogger.c:674 +#: postmaster/syslogger.c:672 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "Les prochaines traces apparaîtront dans le répertoire « %s »." -#: postmaster/syslogger.c:682 +#: postmaster/syslogger.c:680 #, c-format msgid "could not redirect stdout: %m" msgstr "n'a pas pu rediriger la sortie (stdout) : %m" -#: postmaster/syslogger.c:687 postmaster/syslogger.c:704 +#: postmaster/syslogger.c:685 postmaster/syslogger.c:702 #, c-format msgid "could not redirect stderr: %m" msgstr "n'a pas pu rediriger la sortie des erreurs (stderr) : %m" -#: postmaster/syslogger.c:1109 +#: postmaster/syslogger.c:1107 #, c-format msgid "could not write to log file: %s\n" msgstr "n'a pas pu écrire dans le journal applicatif : %s\n" -#: postmaster/syslogger.c:1226 +#: postmaster/syslogger.c:1224 #, c-format msgid "could not open log file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier applicatif « %s » : %m" -#: postmaster/syslogger.c:1288 postmaster/syslogger.c:1338 +#: postmaster/syslogger.c:1286 postmaster/syslogger.c:1336 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "désactivation de la rotation automatique (utilisez SIGHUP pour la réactiver)" @@ -17794,707 +18839,824 @@ msgstr "n'a pas pu déterminer le collationnement à utiliser pour une expressio msgid "nondeterministic collations are not supported for regular expressions" msgstr "les collationnements non déterministes ne sont pas supportés pour les expressions rationnelles" -#: repl_gram.y:336 repl_gram.y:368 +#: repl_gram.y:349 repl_gram.y:381 #, c-format msgid "invalid timeline %u" msgstr "timeline %u invalide" -#: repl_scanner.l:129 +#: repl_scanner.l:131 msgid "invalid streaming start location" msgstr "emplacement de démarrage du flux de réplication invalide" -#: repl_scanner.l:180 scan.l:703 +#: repl_scanner.l:182 scan.l:717 msgid "unterminated quoted string" msgstr "chaîne entre guillemets non terminée" -#: replication/basebackup.c:102 +#: replication/backup_manifest.c:255 #, c-format -msgid "could not read from file \"%s\"" -msgstr "n'a pas pu lire à partir du fichier « %s »" +msgid "expected end timeline %u but found timeline %u" +msgstr "timeline de fin attendue %u mais a trouvé la timeline %u" -#: replication/basebackup.c:462 +#: replication/backup_manifest.c:272 +#, c-format +msgid "expected start timeline %u but found timeline %u" +msgstr "timeline de début attendue %u mais a trouvé la timeline %u" + +#: replication/backup_manifest.c:299 +#, c-format +msgid "start timeline %u not found in history of timeline %u" +msgstr "timeline de début %u non trouvée dans l'historique de la timeline %u" + +#: replication/backup_manifest.c:352 +#, c-format +msgid "could not rewind temporary file" +msgstr "n'a pas pu revenir au début du fichier temporaire" + +#: replication/backup_manifest.c:379 +#, c-format +msgid "could not read from temporary file: %m" +msgstr "n'a pas pu lire le fichier temporaire : %m" + +#: replication/basebackup.c:546 #, c-format msgid "could not find any WAL files" msgstr "n'a pas pu trouver un seul fichier WAL" -#: replication/basebackup.c:476 replication/basebackup.c:491 replication/basebackup.c:500 +#: replication/basebackup.c:561 replication/basebackup.c:577 replication/basebackup.c:586 #, c-format msgid "could not find WAL file \"%s\"" msgstr "n'a pas pu trouver le fichier WAL « %s »" -#: replication/basebackup.c:542 replication/basebackup.c:572 +#: replication/basebackup.c:629 replication/basebackup.c:659 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "taille du fichier WAL « %s » inattendue" -#: replication/basebackup.c:556 replication/basebackup.c:1567 +#: replication/basebackup.c:644 replication/basebackup.c:1771 #, c-format msgid "base backup could not send data, aborting backup" msgstr "la sauvegarde de base n'a pas pu envoyer les données, annulation de la sauvegarde" -#: replication/basebackup.c:630 +#: replication/basebackup.c:722 #, c-format -msgid "%s total checksum verification failures" -msgstr "%s erreurs de vérifications des sommes de contrôle" +msgid "%lld total checksum verification failure" +msgid_plural "%lld total checksum verification failures" +msgstr[0] "%lld erreur de vérifications des sommes de contrôle au total" +msgstr[1] "%lld erreurs de vérifications des sommes de contrôle au total" -#: replication/basebackup.c:634 +#: replication/basebackup.c:729 #, c-format msgid "checksum verification failure during base backup" msgstr "échec de la véffication de somme de controle durant la sauvegarde de base" -#: replication/basebackup.c:678 replication/basebackup.c:687 replication/basebackup.c:696 replication/basebackup.c:705 replication/basebackup.c:714 replication/basebackup.c:725 replication/basebackup.c:742 replication/basebackup.c:751 +#: replication/basebackup.c:789 replication/basebackup.c:798 replication/basebackup.c:807 replication/basebackup.c:816 replication/basebackup.c:825 replication/basebackup.c:836 replication/basebackup.c:853 replication/basebackup.c:862 replication/basebackup.c:874 replication/basebackup.c:898 #, c-format msgid "duplicate option \"%s\"" msgstr "option « %s » dupliquée" -#: replication/basebackup.c:731 +#: replication/basebackup.c:842 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d est en dehors des limites valides pour le paramètre « %s » (%d .. %d)" -#: replication/basebackup.c:1330 +#: replication/basebackup.c:887 #, c-format -msgid "skipping special file \"%s\"" -msgstr "ignore le fichier spécial « %s »" +msgid "unrecognized manifest option: \"%s\"" +msgstr "option de manifeste non reconnue : « %s »" -#: replication/basebackup.c:1438 +#: replication/basebackup.c:903 #, c-format -msgid "invalid segment number %d in file \"%s\"" -msgstr "numéro de segment %d invalide dans le fichier « %s »" +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "algorithme de somme de contrôle inconnu : « %s »" -#: replication/basebackup.c:1457 +#: replication/basebackup.c:918 #, c-format -msgid "could not verify checksum in file \"%s\", block %d: read buffer size %d and page size %d differ" -msgstr "n'a pas pu vérifier la somme de contrôle dans le fichier « %s », bloc %d : la taille de tampon de lecture %d et la taille de page %d diffèrent" +msgid "manifest checksums require a backup manifest" +msgstr "les sommes de contrôles du manifeste nécessitent un manifeste de sauvegarde" -#: replication/basebackup.c:1501 replication/basebackup.c:1531 +#: replication/basebackup.c:1519 #, c-format -msgid "could not fseek in file \"%s\": %m" -msgstr "n'a pas pu effectuer de fseek dans le fichier « %s » : %m" +msgid "skipping special file \"%s\"" +msgstr "ignore le fichier spécial « %s »" -#: replication/basebackup.c:1523 +#: replication/basebackup.c:1640 #, c-format -msgid "could not reread block %d of file \"%s\": %m" -msgstr "n'a pas pu relire le bloc %d dans le fichier « %s » : %m" +msgid "invalid segment number %d in file \"%s\"" +msgstr "numéro de segment %d invalide dans le fichier « %s »" -#: replication/basebackup.c:1547 +#: replication/basebackup.c:1678 #, c-format -msgid "checksum verification failed in file \"%s\", block %d: calculated %X but expected %X" +msgid "could not verify checksum in file \"%s\", block %u: read buffer size %d and page size %d differ" +msgstr "n'a pas pu vérifier la somme de contrôle dans le fichier « %s », bloc %u : la taille de tampon de lecture %d et la taille de bloc %d diffèrent" + +#: replication/basebackup.c:1751 +#, fuzzy, c-format +#| msgid "checksum verification failed in file \"%s\", block %d: calculated %X but expected %X" +msgid "checksum verification failed in file \"%s\", block %u: calculated %X but expected %X" msgstr "échec de la vérification de la somme de contrôle dans le fichier « %s », bloc %d : calculé %X, alors que le bloc contient %X" -#: replication/basebackup.c:1554 +#: replication/basebackup.c:1758 #, c-format msgid "further checksum verification failures in file \"%s\" will not be reported" msgstr "les prochains échec de vérification de somme de contrôle dans le fichier « %s » ne seront pas reportés" -#: replication/basebackup.c:1614 +#: replication/basebackup.c:1816 #, c-format msgid "file \"%s\" has a total of %d checksum verification failure" msgid_plural "file \"%s\" has a total of %d checksum verification failures" msgstr[0] "le fichier « %s » a un total de %d échec de vérification de somme de contrôle" msgstr[1] "le fichier « %s » a un total de %d échecs de vérification de somme de contrôle" -#: replication/basebackup.c:1647 +#: replication/basebackup.c:1852 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "nom du fichier trop long pour le format tar : « %s »" -#: replication/basebackup.c:1652 +#: replication/basebackup.c:1857 #, c-format msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "cible du lien symbolique trop long pour le format tar : nom de fichier « %s », cible « %s »" -#: replication/libpqwalreceiver/libpqwalreceiver.c:232 +#: replication/libpqwalreceiver/libpqwalreceiver.c:227 +#, c-format +msgid "could not clear search path: %s" +msgstr "n'a pas pu effacer le search_path : %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:256 #, c-format msgid "invalid connection string syntax: %s" msgstr "syntaxe de la chaîne de connexion invalide : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:256 +#: replication/libpqwalreceiver/libpqwalreceiver.c:281 #, c-format msgid "could not parse connection string: %s" msgstr "n'a pas pu analyser la chaîne de connexion : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:328 +#: replication/libpqwalreceiver/libpqwalreceiver.c:353 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "" "n'a pas pu recevoir l'identifiant du système de bases de données et\n" "l'identifiant de la timeline à partir du serveur principal : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:339 replication/libpqwalreceiver/libpqwalreceiver.c:557 +#: replication/libpqwalreceiver/libpqwalreceiver.c:364 replication/libpqwalreceiver/libpqwalreceiver.c:588 #, c-format msgid "invalid response from primary server" msgstr "réponse invalide du serveur principal" -#: replication/libpqwalreceiver/libpqwalreceiver.c:340 +#: replication/libpqwalreceiver/libpqwalreceiver.c:365 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "" "N'a pas pu identifier le système : a récupéré %d lignes et %d champs,\n" "attendait %d lignes et %d champs (ou plus)." -#: replication/libpqwalreceiver/libpqwalreceiver.c:413 replication/libpqwalreceiver/libpqwalreceiver.c:419 replication/libpqwalreceiver/libpqwalreceiver.c:444 +#: replication/libpqwalreceiver/libpqwalreceiver.c:440 replication/libpqwalreceiver/libpqwalreceiver.c:446 replication/libpqwalreceiver/libpqwalreceiver.c:475 #, c-format msgid "could not start WAL streaming: %s" msgstr "n'a pas pu démarrer l'envoi des WAL : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:467 +#: replication/libpqwalreceiver/libpqwalreceiver.c:498 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "n'a pas pu transmettre le message de fin d'envoi de flux au primaire : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:489 +#: replication/libpqwalreceiver/libpqwalreceiver.c:520 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "ensemble de résultats inattendu après la fin du flux de réplication" -#: replication/libpqwalreceiver/libpqwalreceiver.c:503 +#: replication/libpqwalreceiver/libpqwalreceiver.c:534 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "erreur lors de l'arrêt de la copie en flux : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:512 +#: replication/libpqwalreceiver/libpqwalreceiver.c:543 #, c-format msgid "error reading result of streaming command: %s" msgstr "erreur lors de la lecture de la commande de flux : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:520 replication/libpqwalreceiver/libpqwalreceiver.c:754 +#: replication/libpqwalreceiver/libpqwalreceiver.c:551 replication/libpqwalreceiver/libpqwalreceiver.c:785 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "résultat inattendu après CommandComplete : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:546 +#: replication/libpqwalreceiver/libpqwalreceiver.c:577 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "n'a pas pu recevoir le fichier historique à partir du serveur principal : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:558 +#: replication/libpqwalreceiver/libpqwalreceiver.c:589 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Attendait 1 ligne avec 2 champs, a obtenu %d lignes avec %d champs." -#: replication/libpqwalreceiver/libpqwalreceiver.c:718 replication/libpqwalreceiver/libpqwalreceiver.c:769 replication/libpqwalreceiver/libpqwalreceiver.c:775 +#: replication/libpqwalreceiver/libpqwalreceiver.c:749 replication/libpqwalreceiver/libpqwalreceiver.c:800 replication/libpqwalreceiver/libpqwalreceiver.c:806 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "n'a pas pu recevoir des données du flux de WAL : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:794 +#: replication/libpqwalreceiver/libpqwalreceiver.c:825 #, c-format msgid "could not send data to WAL stream: %s" msgstr "n'a pas pu transmettre les données au flux WAL : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:843 +#: replication/libpqwalreceiver/libpqwalreceiver.c:878 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "n'a pas pu créer le slot de réplication « %s » : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:877 +#: replication/libpqwalreceiver/libpqwalreceiver.c:923 #, c-format msgid "invalid query response" msgstr "réponse à la requête invalide" -#: replication/libpqwalreceiver/libpqwalreceiver.c:878 +#: replication/libpqwalreceiver/libpqwalreceiver.c:924 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Attendait %d champs, a obtenu %d champs." -#: replication/libpqwalreceiver/libpqwalreceiver.c:947 +#: replication/libpqwalreceiver/libpqwalreceiver.c:994 #, c-format msgid "the query interface requires a database connection" msgstr "l'interface de la requête requiert une connexion à une base" -#: replication/libpqwalreceiver/libpqwalreceiver.c:978 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1025 msgid "empty query" msgstr "requête vide" -#: replication/logical/launcher.c:307 -#, c-format -msgid "starting logical replication worker for subscription \"%s\"" -msgstr "lancement du processus worker de réplication logique pour la souscription « %s »" +#: replication/libpqwalreceiver/libpqwalreceiver.c:1031 +msgid "unexpected pipeline mode" +msgstr "mode pipeline inattendu" -#: replication/logical/launcher.c:314 +#: replication/logical/launcher.c:292 #, c-format msgid "cannot start logical replication workers when max_replication_slots = 0" msgstr "ne peut pas démarrer les processus worker de la réplication logique quand max_replication_slots = 0" -#: replication/logical/launcher.c:394 +#: replication/logical/launcher.c:372 #, c-format msgid "out of logical replication worker slots" msgstr "plus de slots de processus worker pour la réplication logique" -#: replication/logical/launcher.c:395 +#: replication/logical/launcher.c:373 #, c-format msgid "You might need to increase max_logical_replication_workers." msgstr "Vous pourriez avoir besoin d'augmenter max_logical_replication_workers." -#: replication/logical/launcher.c:450 +#: replication/logical/launcher.c:428 #, c-format msgid "out of background worker slots" msgstr "plus de slots de processus en tâche de fond" -#: replication/logical/launcher.c:451 +#: replication/logical/launcher.c:429 #, c-format msgid "You might need to increase max_worker_processes." msgstr "Vous pourriez avoir besoin d'augmenter max_worker_processes." -#: replication/logical/launcher.c:650 +#: replication/logical/launcher.c:583 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "le slot %d du processus de réplication logique est vide, ne peut pas s'y attacher" -#: replication/logical/launcher.c:659 +#: replication/logical/launcher.c:592 #, c-format msgid "logical replication worker slot %d is already used by another worker, cannot attach" msgstr "le slot %d du processus de réplication logique est déjà utilisé par un autre processus, ne peut pas s'attacher" -#: replication/logical/launcher.c:977 -#, c-format -msgid "logical replication launcher started" -msgstr "lancement du processus de lancement de la réplication logique" - -#: replication/logical/logical.c:90 +#: replication/logical/logical.c:115 #, c-format msgid "logical decoding requires wal_level >= logical" msgstr "le décodage logique requiert wal_level >= logical" -#: replication/logical/logical.c:95 +#: replication/logical/logical.c:120 #, c-format msgid "logical decoding requires a database connection" msgstr "le décodage logique requiert une connexion à une base" -#: replication/logical/logical.c:113 +#: replication/logical/logical.c:138 #, c-format msgid "logical decoding cannot be used while in recovery" msgstr "le décodage logique ne peut pas être utilisé lors de la restauration" -#: replication/logical/logical.c:258 replication/logical/logical.c:396 +#: replication/logical/logical.c:350 replication/logical/logical.c:503 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "ne peut pas utiliser un slot de réplication physique pour le décodage logique" -#: replication/logical/logical.c:263 replication/logical/logical.c:401 +#: replication/logical/logical.c:355 replication/logical/logical.c:508 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "le slot de réplication « %s » n'a pas été créé dans cette base de données" -#: replication/logical/logical.c:270 +#: replication/logical/logical.c:362 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "ne peut pas créer un slot de réplication logique dans une transaction qui a fait des écritures" -#: replication/logical/logical.c:441 +#: replication/logical/logical.c:553 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "début du décodage logique pour le slot « %s »" -#: replication/logical/logical.c:443 +#: replication/logical/logical.c:555 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "Envoi des transactions validées après %X/%X, lecture des journaux à partir de %X/%X." -#: replication/logical/logical.c:593 +#: replication/logical/logical.c:706 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "slot « %s », plugin de sortie « %s », dans la fonction d'appel %s, associé au LSN %X/%X" -#: replication/logical/logical.c:600 +#: replication/logical/logical.c:712 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "slot « %s », plugin de sortie « %s », dans la fonction d'appel %s" -#: replication/logical/logicalfuncs.c:114 replication/slotfuncs.c:34 +#: replication/logical/logical.c:878 +#, c-format +msgid "logical replication at prepare time requires begin_prepare_cb callback" +msgstr "" + +#: replication/logical/logical.c:921 +#, c-format +msgid "logical replication at prepare time requires prepare_cb callback" +msgstr "" + +#: replication/logical/logical.c:964 +#, c-format +msgid "logical replication at prepare time requires commit_prepared_cb callback" +msgstr "" + +#: replication/logical/logical.c:1008 +#, c-format +msgid "logical replication at prepare time requires rollback_prepared_cb callback" +msgstr "" + +#: replication/logical/logical.c:1230 +#, fuzzy, c-format +#| msgid "logical decoding requires a database connection" +msgid "logical streaming requires a stream_start_cb callback" +msgstr "le décodage logique requiert une connexion à une base" + +#: replication/logical/logical.c:1276 +#, fuzzy, c-format +#| msgid "logical decoding requires a database connection" +msgid "logical streaming requires a stream_stop_cb callback" +msgstr "le décodage logique requiert une connexion à une base" + +#: replication/logical/logical.c:1315 +#, fuzzy, c-format +#| msgid "logical decoding requires a database connection" +msgid "logical streaming requires a stream_abort_cb callback" +msgstr "le décodage logique requiert une connexion à une base" + +#: replication/logical/logical.c:1358 +#, c-format +msgid "logical streaming at prepare time requires a stream_prepare_cb callback" +msgstr "" + +#: replication/logical/logical.c:1397 +#, c-format +msgid "logical streaming requires a stream_commit_cb callback" +msgstr "" + +#: replication/logical/logical.c:1443 +#, fuzzy, c-format +#| msgid "logical decoding requires a database connection" +msgid "logical streaming requires a stream_change_cb callback" +msgstr "le décodage logique requiert une connexion à une base" + +#: replication/logical/logicalfuncs.c:104 replication/slotfuncs.c:34 #, c-format msgid "must be superuser or replication role to use replication slots" msgstr "" "doit être un superutilisateur ou un rôle ayant l'attribut de réplication\n" "pour utiliser des slots de réplication" -#: replication/logical/logicalfuncs.c:153 +#: replication/logical/logicalfuncs.c:134 #, c-format msgid "slot name must not be null" msgstr "le nom du slot ne doit pas être NULL" -#: replication/logical/logicalfuncs.c:169 +#: replication/logical/logicalfuncs.c:150 #, c-format msgid "options array must not be null" msgstr "le tableau options ne doit pas être NULL" -#: replication/logical/logicalfuncs.c:200 +#: replication/logical/logicalfuncs.c:181 #, c-format msgid "array must be one-dimensional" msgstr "le tableau doit avoir une dimension" -#: replication/logical/logicalfuncs.c:206 +#: replication/logical/logicalfuncs.c:187 #, c-format msgid "array must not contain nulls" msgstr "le tableau ne doit pas contenir de valeurs NULL" -#: replication/logical/logicalfuncs.c:222 utils/adt/json.c:2312 utils/adt/jsonb.c:1282 +#: replication/logical/logicalfuncs.c:203 utils/adt/json.c:1128 utils/adt/jsonb.c:1303 #, c-format msgid "array must have even number of elements" msgstr "le tableau doit avoir un nombre pair d'éléments" -#: replication/logical/logicalfuncs.c:269 +#: replication/logical/logicalfuncs.c:250 #, c-format -msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" -msgstr "le plugin de sortie « %s » pour le décodage logique produit une sortie binaire, mais la fonction « %s » attend des données texte" +msgid "can no longer get changes from replication slot \"%s\"" +msgstr "ne peut plus obtenir de modifications à partir du slot de réplication « %s »" -#: replication/logical/origin.c:186 +#: replication/logical/logicalfuncs.c:252 replication/slotfuncs.c:654 +#, fuzzy, c-format +#| msgid "This slot has never previously reserved WAL, or has been invalidated." +msgid "This slot has never previously reserved WAL, or it has been invalidated." +msgstr "Ce slot n'a jamais réservé de WAL précédemment, ou a été invalidé." + +#: replication/logical/logicalfuncs.c:264 #, c-format -msgid "only superusers can query or manipulate replication origins" -msgstr "seuls les super-utilisateurs peuvent lire ou manipuler les origines de réplication" +msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" +msgstr "le plugin de sortie « %s » pour le décodage logique produit une sortie binaire, mais la fonction « %s » attend des données texte" -#: replication/logical/origin.c:191 +#: replication/logical/origin.c:188 #, c-format msgid "cannot query or manipulate replication origin when max_replication_slots = 0" msgstr "ne peut pas lire ou manipuler une originie de réplication logique quand max_replication_slots = 0" -#: replication/logical/origin.c:196 +#: replication/logical/origin.c:193 #, c-format msgid "cannot manipulate replication origins during recovery" msgstr "ne peut pas manipuler les origines de réplication lors d'une restauration" -#: replication/logical/origin.c:231 +#: replication/logical/origin.c:228 #, c-format msgid "replication origin \"%s\" does not exist" msgstr "l'origine de réplication « %s » n'existe pas" -#: replication/logical/origin.c:322 +#: replication/logical/origin.c:319 #, c-format msgid "could not find free replication origin OID" msgstr "n'a pas pu trouver d'OID d'origine de réplication libre" -#: replication/logical/origin.c:370 +#: replication/logical/origin.c:355 #, c-format msgid "could not drop replication origin with OID %d, in use by PID %d" msgstr "ne peut pas supprimer l'origine de réplication d'OID %d, utilisée par le PID %d" -#: replication/logical/origin.c:462 +#: replication/logical/origin.c:476 #, c-format msgid "replication origin with OID %u does not exist" msgstr "l'origine de réplication d'OID %u n'existe pas" -#: replication/logical/origin.c:730 +#: replication/logical/origin.c:741 #, c-format msgid "replication checkpoint has wrong magic %u instead of %u" msgstr "le checkpoint de réplication a le mauvais nombre magique (%u au lieu de %u)" -#: replication/logical/origin.c:771 +#: replication/logical/origin.c:782 #, c-format msgid "could not find free replication state, increase max_replication_slots" msgstr "n'a pas pu trouver d'état de réplication libre, augmentez max_replication_slots" -#: replication/logical/origin.c:789 +#: replication/logical/origin.c:790 +#, fuzzy, c-format +#| msgid "recovery restart point at %X/%X" +msgid "recovered replication state of node %u to %X/%X" +msgstr "la ré-exécution en restauration commence à %X/%X" + +#: replication/logical/origin.c:800 #, c-format msgid "replication slot checkpoint has wrong checksum %u, expected %u" msgstr "le point de contrôle du slot de réplication à la mauvaise somme de contrôle %u, %u attendu" -#: replication/logical/origin.c:917 +#: replication/logical/origin.c:928 replication/logical/origin.c:1114 #, c-format msgid "replication origin with OID %d is already active for PID %d" msgstr "l'origine de réplication d'OID %d est déjà active pour le PID %d" -#: replication/logical/origin.c:928 replication/logical/origin.c:1115 +#: replication/logical/origin.c:939 replication/logical/origin.c:1126 #, c-format msgid "could not find free replication state slot for replication origin with OID %u" msgstr "n'a pas pu trouver de slot d'état de réplication libre pour l'origine de réplication d'OID %u" -#: replication/logical/origin.c:930 replication/logical/origin.c:1117 replication/slot.c:1566 +#: replication/logical/origin.c:941 replication/logical/origin.c:1128 replication/slot.c:1798 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Augmentez max_replication_slots et recommencez." -#: replication/logical/origin.c:1074 +#: replication/logical/origin.c:1085 #, c-format msgid "cannot setup replication origin when one is already setup" msgstr "ne peut pas configurer l'origine de réplication si une origine existe déjà" -#: replication/logical/origin.c:1103 -#, c-format -msgid "replication origin %d is already active for PID %d" -msgstr "l'origine de réplication %d est déjà active pour le PID %d" - -#: replication/logical/origin.c:1154 replication/logical/origin.c:1370 replication/logical/origin.c:1390 +#: replication/logical/origin.c:1165 replication/logical/origin.c:1377 replication/logical/origin.c:1397 #, c-format msgid "no replication origin is configured" msgstr "aucune origine de réplication n'est configurée" -#: replication/logical/origin.c:1237 +#: replication/logical/origin.c:1248 #, c-format msgid "replication origin name \"%s\" is reserved" msgstr "le nom d'origine de réplication « %s » est réservé" -#: replication/logical/origin.c:1239 +#: replication/logical/origin.c:1250 #, c-format msgid "Origin names starting with \"pg_\" are reserved." msgstr "Les noms d'origine commençant par « pg_ » sont réservés." -#: replication/logical/relation.c:255 +#: replication/logical/relation.c:248 #, c-format -msgid "logical replication target relation \"%s.%s\" does not exist" -msgstr "la relation cible de la réplication logique « %s.%s » n'existe pas" +msgid "\"%s\"" +msgstr "" -#: replication/logical/relation.c:297 +#: replication/logical/relation.c:251 #, c-format -msgid "logical replication target relation \"%s.%s\" is missing some replicated columns" -msgstr "il manque des colonnes répliquées dans la relation cible « %s.%s » de réplication logique" +msgid ", \"%s\"" +msgstr "" + +#: replication/logical/relation.c:257 +#, fuzzy, c-format +#| msgid "logical replication target relation \"%s.%s\" is missing some replicated columns" +msgid "logical replication target relation \"%s.%s\" is missing replicated column: %s" +msgid_plural "logical replication target relation \"%s.%s\" is missing replicated columns: %s" +msgstr[0] "il manque des colonnes répliquées dans la relation cible « %s.%s » de réplication logique" +msgstr[1] "il manque des colonnes répliquées dans la relation cible « %s.%s » de réplication logique" #: replication/logical/relation.c:337 #, c-format +msgid "logical replication target relation \"%s.%s\" does not exist" +msgstr "la relation cible de la réplication logique « %s.%s » n'existe pas" + +#: replication/logical/relation.c:418 +#, c-format msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "la relation cible « %s.%s » de réplication logique utilise des colonnes systèmes dans l'index REPLICA IDENTITY" -#: replication/logical/reorderbuffer.c:2507 +#: replication/logical/reorderbuffer.c:3762 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "n'a pas pu écrire dans le fichier pour le XID %u : %m" -#: replication/logical/reorderbuffer.c:2600 replication/logical/reorderbuffer.c:2622 +#: replication/logical/reorderbuffer.c:4102 replication/logical/reorderbuffer.c:4127 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "n'a pas pu lire le fichier « reorderbuffer spill » : %m" -#: replication/logical/reorderbuffer.c:2604 replication/logical/reorderbuffer.c:2626 +#: replication/logical/reorderbuffer.c:4106 replication/logical/reorderbuffer.c:4131 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "" "n'a pas pu lire à partir du fichier « reorderbuffer spill » : a lu seulement %d octets\n" "sur %u" -#: replication/logical/reorderbuffer.c:2849 +#: replication/logical/reorderbuffer.c:4379 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "n'a pas pu supprimer le fichier « %s » pendant la suppression de pg_replslot/%s/xid* : %m" -#: replication/logical/reorderbuffer.c:3319 +#: replication/logical/reorderbuffer.c:4869 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "n'a pas pu lire à partir du fichier « %s » : lu %d octets au lieu de %d octets" -#: replication/logical/snapbuild.c:611 +#: replication/logical/snapbuild.c:588 #, c-format msgid "initial slot snapshot too large" msgstr "snapshot du slot initial trop gros" -#: replication/logical/snapbuild.c:665 +#: replication/logical/snapbuild.c:642 #, c-format msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" msgid_plural "exported logical decoding snapshot: \"%s\" with %u transaction IDs" msgstr[0] "snapshot exporté pour le décodage logique : « %s » avec %u identifiant de transaction" msgstr[1] "snapshot exporté pour le décodage logique : « %s » avec %u identifiants de transaction" -#: replication/logical/snapbuild.c:1270 replication/logical/snapbuild.c:1363 replication/logical/snapbuild.c:1917 +#: replication/logical/snapbuild.c:1254 replication/logical/snapbuild.c:1347 replication/logical/snapbuild.c:1878 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "le décodage logique a trouvé le point de cohérence à %X/%X" -#: replication/logical/snapbuild.c:1272 +#: replication/logical/snapbuild.c:1256 #, c-format msgid "There are no running transactions." msgstr "Il n'existe pas de transactions en cours." -#: replication/logical/snapbuild.c:1314 +#: replication/logical/snapbuild.c:1298 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "le décodage logique a trouvé le point de démarrage à %X/%X" -#: replication/logical/snapbuild.c:1316 replication/logical/snapbuild.c:1340 +#: replication/logical/snapbuild.c:1300 replication/logical/snapbuild.c:1324 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "En attente de transactions (approximativement %d) plus anciennes que %u pour terminer." -#: replication/logical/snapbuild.c:1338 +#: replication/logical/snapbuild.c:1322 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "le décodage logique a trouvé le point de cohérence initial à %X/%X" -#: replication/logical/snapbuild.c:1365 +#: replication/logical/snapbuild.c:1349 #, c-format msgid "There are no old transactions anymore." msgstr "Il n'existe plus d'anciennes transactions." -#: replication/logical/snapbuild.c:1759 +#: replication/logical/snapbuild.c:1746 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "le fichier d'état snapbuild « %s » a le nombre magique: %u au lieu de %u" -#: replication/logical/snapbuild.c:1765 +#: replication/logical/snapbuild.c:1752 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "le fichier d'état snapbuild « %s » a une version non supportée : %u au lieu de %u" -#: replication/logical/snapbuild.c:1864 +#: replication/logical/snapbuild.c:1823 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "" "différence de somme de contrôle pour lefichier d'état snapbuild %s :\n" "est %u, devrait être %u" -#: replication/logical/snapbuild.c:1919 +#: replication/logical/snapbuild.c:1880 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "Le décodage logique commencera en utilisant un snapshot sauvegardé." -#: replication/logical/snapbuild.c:1991 +#: replication/logical/snapbuild.c:1952 #, c-format msgid "could not parse file name \"%s\"" msgstr "n'a pas pu analyser le mode du fichier « %s »" -#: replication/logical/tablesync.c:139 +#: replication/logical/tablesync.c:144 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "le worker de synchronisation de table en réplication logique pour la souscription « %s », table « %s », a terminé" -#: replication/logical/tablesync.c:672 +#: replication/logical/tablesync.c:722 replication/logical/tablesync.c:761 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "n'a pas pu récupérer l'information sur la table « %s.%s » à partir du publieur : %s" -#: replication/logical/tablesync.c:678 +#: replication/logical/tablesync.c:728 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "table « %s.%s » non trouvée sur le publieur" -#: replication/logical/tablesync.c:710 -#, c-format -msgid "could not fetch table info for table \"%s.%s\": %s" -msgstr "n'a pas pu récupérer les informations sur la table « %s.%s » : %s" - -#: replication/logical/tablesync.c:780 +#: replication/logical/tablesync.c:848 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "n'a pas pu lancer la copie initiale du contenu de la table « %s.%s » : %s" -#: replication/logical/tablesync.c:894 -#, c-format -msgid "table copy could not start transaction on publisher" +#: replication/logical/tablesync.c:1046 +#, fuzzy, c-format +#| msgid "table copy could not start transaction on publisher" +msgid "table copy could not start transaction on publisher: %s" msgstr "la copie de table n'a pas pu démarrer la transaction sur le publieur" -#: replication/logical/tablesync.c:916 +#: replication/logical/tablesync.c:1094 #, c-format -msgid "table copy could not finish transaction on publisher" +msgid "replication origin \"%s\" already exists" +msgstr "l'origine de réplication « %s » existe déjà" + +#: replication/logical/tablesync.c:1106 +#, fuzzy, c-format +#| msgid "table copy could not finish transaction on publisher" +msgid "table copy could not finish transaction on publisher: %s" msgstr "la copie de table n'a pas pu finir la transaction sur le publieur" -#: replication/logical/worker.c:290 +#: replication/logical/worker.c:490 #, c-format msgid "processing remote data for replication target relation \"%s.%s\" column \"%s\", remote type %s, local type %s" msgstr "traitement des données distantes pour la relation cible « %s.%s » de réplication logique, colonne « %s », type distant %s, type local %s" -#: replication/logical/worker.c:511 +#: replication/logical/worker.c:570 replication/logical/worker.c:699 +#, fuzzy, c-format +#| msgid "incorrect binary data format in function argument %d" +msgid "incorrect binary data format in logical replication column %d" +msgstr "format des données binaires incorrect dans l'argument de la fonction %d" + +#: replication/logical/worker.c:778 #, c-format msgid "ORIGIN message sent out of order" msgstr "message ORIGIN en désordre" -#: replication/logical/worker.c:645 +#: replication/logical/worker.c:1037 replication/logical/worker.c:1049 +#, c-format +msgid "could not read from streaming transaction's changes file \"%s\": %m" +msgstr "n'a pas pu lire à partir du fichier de changements de transaction en flux « %s » : %m" + +#: replication/logical/worker.c:1274 #, c-format msgid "publisher did not send replica identity column expected by the logical replication target relation \"%s.%s\"" msgstr "le publieur n'a pas envoyé la colonne d'identité du réplicat attendue par la relation cible « %s.%s » de la réplication logique" -#: replication/logical/worker.c:652 +#: replication/logical/worker.c:1281 #, c-format msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "la relation cible « %s.%s » de réplication logique n'a ni un index REPLICA IDENTITY ni une clé primaire, et la relation publiée n'a pas REPLICA IDENTITY FULL" -#: replication/logical/worker.c:993 +#: replication/logical/worker.c:1994 #, c-format msgid "invalid logical replication message type \"%c\"" msgstr "type de message « %c » de la réplication logique invalide" -#: replication/logical/worker.c:1134 +#: replication/logical/worker.c:2145 #, c-format msgid "data stream from publisher has ended" msgstr "le flux de données provenant du publieur s'est terminé" -#: replication/logical/worker.c:1289 +#: replication/logical/worker.c:2295 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "arrêt du processus worker de la réplication logique suite à l'expiration du délai de réplication" -#: replication/logical/worker.c:1437 +#: replication/logical/worker.c:2442 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was removed" msgstr "le processus apply de réplication logique pour la souscription « %s » s'arrêtera car la souscription a été supprimée" -#: replication/logical/worker.c:1451 +#: replication/logical/worker.c:2456 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "le processus apply de réplication logique pour la souscription « %s » s'arrêtera car la souscription a été désactivée" -#: replication/logical/worker.c:1465 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because the connection information was changed" -msgstr "le processus apply de réplication logique pour la souscription « %s » redémarrera car la souscription a été modifiée" - -#: replication/logical/worker.c:1479 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" +#: replication/logical/worker.c:2478 +#, fuzzy, c-format +#| msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" +msgid "logical replication apply worker for subscription \"%s\" will restart because of a parameter change" msgstr "le processus apply de réplication logique pour la souscription « %s » redémarrera car la souscription a été renommée" -#: replication/logical/worker.c:1496 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because the replication slot name was changed" -msgstr "le processus apply de réplication logique pour la souscription « %s » redémarrera car le nom du slot de réplication a été modifiée" - -#: replication/logical/worker.c:1510 +#: replication/logical/worker.c:2641 replication/logical/worker.c:2663 #, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because subscription's publications were changed" -msgstr "le processus apply de réplication logique pour la souscription « %s » redémarrera car les publications ont été modifiées" +msgid "could not read from streaming transaction's subxact file \"%s\": %m" +msgstr "n'a pas pu lire à partir du fichier subxact de transaction en flux « %s » : %m" -#: replication/logical/worker.c:1614 +#: replication/logical/worker.c:3009 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "le processus apply de réplication logique pour la souscription %u ne démarrera pas car la souscription a été désactivée au démarrage" -#: replication/logical/worker.c:1626 +#: replication/logical/worker.c:3021 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "le processus apply de réplication logique pour la souscription « %s » ne démarrera pas car la souscription a été désactivée au démarrage" -#: replication/logical/worker.c:1644 +#: replication/logical/worker.c:3039 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "le processus de synchronisation des tables en réplication logique pour la souscription « %s », table « %s » a démarré" -#: replication/logical/worker.c:1648 +#: replication/logical/worker.c:3043 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "le processus apply de réplication logique pour la souscription « %s » a démarré" -#: replication/logical/worker.c:1687 +#: replication/logical/worker.c:3080 #, c-format msgid "subscription has no replication slot set" msgstr "la souscription n'a aucun ensemble de slot de réplication" -#: replication/pgoutput/pgoutput.c:117 +#: replication/pgoutput/pgoutput.c:198 #, c-format msgid "invalid proto_version" msgstr "proto_version invalide" -#: replication/pgoutput/pgoutput.c:122 +#: replication/pgoutput/pgoutput.c:203 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version « %s » en dehors des limites" -#: replication/pgoutput/pgoutput.c:139 +#: replication/pgoutput/pgoutput.c:220 #, c-format msgid "invalid publication_names syntax" msgstr "syntaxe publication_names invalide" -#: replication/pgoutput/pgoutput.c:181 +#: replication/pgoutput/pgoutput.c:290 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "le client a envoyé proto_version=%d mais nous supportons seulement le protocole %d et les protocoles antérieurs" -#: replication/pgoutput/pgoutput.c:187 +#: replication/pgoutput/pgoutput.c:296 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "le client a envoyé proto_version=%d mais nous supportons seulement le protocole %d et les protocoles supérieurs" -#: replication/pgoutput/pgoutput.c:193 +#: replication/pgoutput/pgoutput.c:302 #, c-format msgid "publication_names parameter missing" msgstr "paramètre publication_names manquant" +#: replication/pgoutput/pgoutput.c:315 +#, fuzzy, c-format +#| msgid "client sent proto_version=%d but we only support protocol %d or higher" +msgid "requested proto_version=%d does not support streaming, need %d or higher" +msgstr "le client a envoyé proto_version=%d mais nous supportons seulement le protocole %d et les protocoles supérieurs" + +#: replication/pgoutput/pgoutput.c:320 +#, fuzzy, c-format +#| msgid "integer of size %lu not supported by pqPutInt" +msgid "streaming requested, but not supported by output plugin" +msgstr "entier de taille %lu non supporté par pqPutInt" + #: replication/slot.c:182 #, c-format msgid "replication slot name \"%s\" is too short" @@ -18515,173 +19677,186 @@ msgstr "le nom du slot de réplication « %s » contient un caractère invalide" msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "Les noms des slots de réplication peuvent seulement contenir des lettres, des nombres et des tirets bas." -#: replication/slot.c:253 +#: replication/slot.c:260 #, c-format msgid "replication slot \"%s\" already exists" msgstr "le slot de réplication « %s » existe déjà" -#: replication/slot.c:263 +#: replication/slot.c:270 #, c-format msgid "all replication slots are in use" msgstr "tous les slots de réplication sont utilisés" -#: replication/slot.c:264 +#: replication/slot.c:271 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Libérez un slot ou augmentez max_replication_slots." -#: replication/slot.c:387 replication/slotfuncs.c:663 +#: replication/slot.c:424 replication/slotfuncs.c:765 utils/adt/pgstatfuncs.c:2227 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "le slot de réplication « %s » n'existe pas" -#: replication/slot.c:398 replication/slot.c:947 +#: replication/slot.c:462 replication/slot.c:1043 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "le slot de réplication « %s » est actif pour le PID %d" -#: replication/slot.c:631 replication/slot.c:1139 replication/slot.c:1501 +#: replication/slot.c:701 replication/slot.c:1350 replication/slot.c:1733 #, c-format msgid "could not remove directory \"%s\"" msgstr "n'a pas pu supprimer le répertoire « %s »" -#: replication/slot.c:982 +#: replication/slot.c:1078 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "les slots de réplications peuvent seulement être utilisés si max_replication_slots > 0" -#: replication/slot.c:987 +#: replication/slot.c:1083 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "les slots de réplication peuvent seulement être utilisés si wal_level >= replica" -#: replication/slot.c:1439 +#: replication/slot.c:1239 +#, c-format +msgid "terminating process %d because replication slot \"%s\" is too far behind" +msgstr "arrêt du processus %d parce que le slot de réplication « %s » est trop en retard" + +#: replication/slot.c:1258 +#, c-format +msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" +msgstr "invalidation du slot « %s » parce que son restart_lsn %X/%X dépasse max_slot_wal_keep_size" + +#: replication/slot.c:1671 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "le fichier « %s » du slot de réplication a le nombre magique %u au lieu de %u" -#: replication/slot.c:1446 +#: replication/slot.c:1678 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "le fichier « %s » du slot de réplication a une version %u non supportée" -#: replication/slot.c:1453 +#: replication/slot.c:1685 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "le slot de réplication « %s » a une taille %u corrompue" -#: replication/slot.c:1489 +#: replication/slot.c:1721 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "différence de somme de contrôle pour le fichier de slot de réplication « %s » : est %u, devrait être %u" -#: replication/slot.c:1523 +#: replication/slot.c:1755 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "le slot de réplication logique « %s » existe mais, wal_level < logical" -#: replication/slot.c:1525 +#: replication/slot.c:1757 #, c-format msgid "Change wal_level to be logical or higher." msgstr "Modifiez wal_level pour valoir logical ou supérieur." -#: replication/slot.c:1529 +#: replication/slot.c:1761 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "le slot de réplication physique « %s » existe mais, wal_level < replica" -#: replication/slot.c:1531 +#: replication/slot.c:1763 #, c-format msgid "Change wal_level to be replica or higher." msgstr "Modifiez wal_level pour valoir replica ou supérieur." -#: replication/slot.c:1565 +#: replication/slot.c:1797 #, c-format msgid "too many replication slots active before shutdown" msgstr "trop de slots de réplication actifs avant l'arrêt" -#: replication/slotfuncs.c:526 +#: replication/slotfuncs.c:630 #, c-format msgid "invalid target WAL LSN" msgstr "WAL LSN cible invalide" -#: replication/slotfuncs.c:548 +#: replication/slotfuncs.c:652 #, c-format -msgid "cannot advance replication slot that has not previously reserved WAL" -msgstr "impossible d'avancer un slot de réplication qui n'a pas auparavant réservé de WAL" +msgid "replication slot \"%s\" cannot be advanced" +msgstr "le slot de réplication « %s » ne peut pas être avancé" -#: replication/slotfuncs.c:564 +#: replication/slotfuncs.c:670 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "impossible d'avancer le slot de réplication vers %X/%X, le minimum est %X/%X" -#: replication/slotfuncs.c:670 +#: replication/slotfuncs.c:777 #, c-format msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "ne peut pas copier le slot de réplication physique « %s » en tant que slot de réplication logique" -#: replication/slotfuncs.c:672 +#: replication/slotfuncs.c:779 #, c-format msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "ne peut pas copier le slot de réplication logique « %s » en tant que slot de réplication physique" -#: replication/slotfuncs.c:681 +#: replication/slotfuncs.c:786 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "ne peut pas copier un slot de réplication qui n'a pas auparavant réservé de WAL" -#: replication/slotfuncs.c:746 +#: replication/slotfuncs.c:863 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "n'a pas pu copier le slot de réplication « %s »" -#: replication/slotfuncs.c:748 +#: replication/slotfuncs.c:865 #, c-format msgid "The source replication slot was modified incompatibly during the copy operation." msgstr "Le slot de réplication source a été modifié de manière incompatible durant l'opération de copie." -#: replication/syncrep.c:248 +#: replication/slotfuncs.c:871 +#, c-format +msgid "cannot copy unfinished logical replication slot \"%s\"" +msgstr "ne peut pas copier le slot de réplication logique non terminé « %s »" + +#: replication/slotfuncs.c:873 +#, c-format +msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." +msgstr "Ré-essayez quand la valeur de confirmed_flush_lsn pour le slot de réplication source est valide." + +#: replication/syncrep.c:269 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "" "annulation de l'attente pour la réplication synchrone et arrêt des connexions\n" "suite à la demande de l'administrateur" -#: replication/syncrep.c:249 replication/syncrep.c:266 +#: replication/syncrep.c:270 replication/syncrep.c:287 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "" "La transaction a déjà enregistré les données localement, mais il se peut que\n" "cela n'ait pas été répliqué sur le serveur en standby." -#: replication/syncrep.c:265 +#: replication/syncrep.c:286 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "annulation de l'attente pour la réplication synchrone à la demande de l'utilisateur" -#: replication/syncrep.c:398 -#, c-format -msgid "standby \"%s\" now has synchronous standby priority %u" -msgstr "" -"le serveur « %s » en standby a maintenant une priorité %u en tant que standby\n" -"synchrone" - -#: replication/syncrep.c:461 +#: replication/syncrep.c:495 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "le serveur « %s » en standby est maintenant un serveur standby synchrone de priorité %u" -#: replication/syncrep.c:465 +#: replication/syncrep.c:499 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "le serveur standby « %s » est maintenant un candidat dans le quorum des standbys synchrones" -#: replication/syncrep.c:1165 +#: replication/syncrep.c:1046 #, c-format msgid "synchronous_standby_names parser failed" msgstr "l'analyseur du paramètre synchronous_standby_names a échoué" -#: replication/syncrep.c:1171 +#: replication/syncrep.c:1052 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "le nombre de standbys synchrones (%d) doit être supérieur à zéro" @@ -18691,203 +19866,203 @@ msgstr "le nombre de standbys synchrones (%d) doit être supérieur à zéro" msgid "terminating walreceiver process due to administrator command" msgstr "arrêt du processus walreceiver suite à la demande de l'administrateur" -#: replication/walreceiver.c:276 +#: replication/walreceiver.c:285 #, c-format msgid "could not connect to the primary server: %s" msgstr "n'a pas pu se connecter au serveur principal : %s" -#: replication/walreceiver.c:322 +#: replication/walreceiver.c:331 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "" "l'identifiant du système de bases de données diffère entre le serveur principal\n" "et le serveur en attente" -#: replication/walreceiver.c:323 +#: replication/walreceiver.c:332 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "" "L'identifiant du serveur principal est %s, l'identifiant du serveur en attente\n" "est %s." -#: replication/walreceiver.c:333 +#: replication/walreceiver.c:342 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "la plus grande timeline %u du serveur principal est derrière la timeline de restauration %u" -#: replication/walreceiver.c:369 +#: replication/walreceiver.c:396 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "démarré le flux des journaux depuis le principal à %X/%X sur la timeline %u" -#: replication/walreceiver.c:374 +#: replication/walreceiver.c:400 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "recommence le flux WAL à %X/%X sur la timeline %u" -#: replication/walreceiver.c:403 +#: replication/walreceiver.c:428 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "ne peut pas continuer le flux de journaux de transactions, la récupération est déjà terminée" -#: replication/walreceiver.c:440 +#: replication/walreceiver.c:465 #, c-format msgid "replication terminated by primary server" msgstr "réplication terminée par le serveur primaire" -#: replication/walreceiver.c:441 +#: replication/walreceiver.c:466 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "Fin du WAL atteint sur la timeline %u à %X/%X." -#: replication/walreceiver.c:529 +#: replication/walreceiver.c:554 #, c-format msgid "terminating walreceiver due to timeout" msgstr "arrêt du processus walreceiver suite à l'expiration du délai de réplication" -#: replication/walreceiver.c:567 +#: replication/walreceiver.c:592 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "le serveur principal ne contient plus de WAL sur la timeline %u demandée" -#: replication/walreceiver.c:582 replication/walreceiver.c:922 +#: replication/walreceiver.c:608 replication/walreceiver.c:903 #, c-format msgid "could not close log segment %s: %m" msgstr "n'a pas pu fermer le journal de transactions %s : %m" -#: replication/walreceiver.c:700 +#: replication/walreceiver.c:727 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "récupération du fichier historique pour la timeline %u à partir du serveur principal" -#: replication/walreceiver.c:976 +#: replication/walreceiver.c:950 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "n'a pas pu écrire le journal de transactions %s au décalage %u, longueur %lu : %m" -#: replication/walsender.c:497 +#: replication/walsender.c:524 storage/smgr/md.c:1320 +#, c-format +msgid "could not seek to end of file \"%s\": %m" +msgstr "n'a pas pu trouver la fin du fichier « %s » : %m" + +#: replication/walsender.c:528 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "n'a pas pu se déplacer au début du fichier « %s » : %m" -#: replication/walsender.c:548 +#: replication/walsender.c:579 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "IDENTIFY_SYSTEM n'a pas été exécuté avant START_REPLICATION" -#: replication/walsender.c:565 +#: replication/walsender.c:605 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "ne peut pas utiliser un slot de réplication logique pour une réplication physique" -#: replication/walsender.c:628 +#: replication/walsender.c:674 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "le point de reprise %X/%X de la timeline %u n'est pas dans l'historique du serveur" -#: replication/walsender.c:632 +#: replication/walsender.c:677 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "L'historique du serveur a changé à partir de la timeline %u à %X/%X." -#: replication/walsender.c:677 +#: replication/walsender.c:721 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "le point de reprise requis %X/%X est devant la position de vidage des WAL de ce serveur %X/%X" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:907 +#: replication/walsender.c:977 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s ne doit pas être appelé depuis une transaction" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:917 +#: replication/walsender.c:987 #, c-format msgid "%s must be called inside a transaction" msgstr "%s doit être appelé au sein d'une transaction" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:923 +#: replication/walsender.c:993 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s doit être appelé dans le niveau d'isolation REPEATABLE READ" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:929 +#: replication/walsender.c:999 #, c-format msgid "%s must be called before any query" msgstr "%s doit être appelé avant toute requête" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:935 +#: replication/walsender.c:1005 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s ne doit pas être appelé depuis une sous-transaction" -#: replication/walsender.c:1082 +#: replication/walsender.c:1147 +#, c-format +msgid "cannot read from logical replication slot \"%s\"" +msgstr "ne peut pas lire à partir du slot de réplication logique « %s »" + +#: replication/walsender.c:1149 +#, c-format +msgid "This slot has been invalidated because it exceeded the maximum reserved size." +msgstr "Ce slot a été invalidé parce qu'il dépassait la taille maximale réservée." + +#: replication/walsender.c:1159 #, c-format msgid "terminating walsender process after promotion" msgstr "arrêt du processus walreceiver suite promotion" -#: replication/walsender.c:1454 +#: replication/walsender.c:1524 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "ne peut pas exécuter de nouvelles commandes alors que le walsender est en mode d'arrêt" -#: replication/walsender.c:1487 +#: replication/walsender.c:1561 +#, c-format +msgid "cannot execute SQL commands in WAL sender for physical replication" +msgstr "ne peut pas exécuter des commandes SQL dans le walsender pour la réplication physique" + +#: replication/walsender.c:1584 #, c-format msgid "received replication command: %s" msgstr "commande de réplication reçu : %s" -#: replication/walsender.c:1503 tcop/fastpath.c:279 tcop/postgres.c:1103 tcop/postgres.c:1426 tcop/postgres.c:1684 tcop/postgres.c:2077 tcop/postgres.c:2450 tcop/postgres.c:2529 +#: replication/walsender.c:1592 tcop/fastpath.c:202 tcop/postgres.c:1078 tcop/postgres.c:1430 tcop/postgres.c:1691 tcop/postgres.c:2176 tcop/postgres.c:2586 tcop/postgres.c:2665 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "" "la transaction est annulée, les commandes sont ignorées jusqu'à la fin du bloc\n" "de la transaction" -#: replication/walsender.c:1571 -#, c-format -msgid "cannot execute SQL commands in WAL sender for physical replication" -msgstr "ne peut pas exécuter des commandes SQL dans le walsender pour la réplication physique" - -#: replication/walsender.c:1619 replication/walsender.c:1635 +#: replication/walsender.c:1727 replication/walsender.c:1762 #, c-format msgid "unexpected EOF on standby connection" msgstr "fin de fichier (EOF) inattendue de la connexion du serveur en attente" -#: replication/walsender.c:1649 -#, c-format -msgid "unexpected standby message type \"%c\", after receiving CopyDone" -msgstr "type de message standby « %c » inattendu, après avoir reçu CopyDone" - -#: replication/walsender.c:1687 +#: replication/walsender.c:1750 #, c-format msgid "invalid standby message type \"%c\"" msgstr "type de message « %c » invalide pour le serveur en standby" -#: replication/walsender.c:1728 +#: replication/walsender.c:1839 #, c-format msgid "unexpected message type \"%c\"" msgstr "type de message « %c » inattendu" -#: replication/walsender.c:2146 +#: replication/walsender.c:2252 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "arrêt du processus walreceiver suite à l'expiration du délai de réplication" -#: replication/walsender.c:2223 -#, c-format -msgid "\"%s\" has now caught up with upstream server" -msgstr "« %s » a maintenant rattrapé le serveur en amont" - -#: replication/walsender.c:2482 -#, c-format -msgid "could not read from log segment %s, offset %u, length %zu: %m" -msgstr "n'a pas pu lire le segment %s du journal de transactions, décalage %u, longueur %zu : %m" - -#: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:989 +#: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:999 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "la règle « %s » existe déjà pour la relation « %s »" @@ -18956,1104 +20131,1183 @@ msgstr "« %s » est déjà une vue" msgid "view rule for \"%s\" must be named \"%s\"" msgstr "la règle de la vue pour « %s » doit être nommée « %s »" -#: rewrite/rewriteDefine.c:434 +#: rewrite/rewriteDefine.c:435 #, c-format msgid "cannot convert partitioned table \"%s\" to a view" msgstr "ne peut pas convertir la table partitionnée « %s » en une vue" -#: rewrite/rewriteDefine.c:440 +#: rewrite/rewriteDefine.c:444 #, c-format msgid "cannot convert partition \"%s\" to a view" msgstr "ne peut pas convertir la partition « %s » en une vue" -#: rewrite/rewriteDefine.c:449 +#: rewrite/rewriteDefine.c:453 #, c-format msgid "could not convert table \"%s\" to a view because it is not empty" msgstr "n'a pas pu convertir la table « %s » en une vue car elle n'est pas vide" -#: rewrite/rewriteDefine.c:458 +#: rewrite/rewriteDefine.c:462 #, c-format msgid "could not convert table \"%s\" to a view because it has triggers" msgstr "n'a pas pu convertir la table « %s » en une vue parce qu'elle a des triggers" -#: rewrite/rewriteDefine.c:460 +#: rewrite/rewriteDefine.c:464 #, c-format msgid "In particular, the table cannot be involved in any foreign key relationships." msgstr "" "En particulier, la table ne peut pas être impliquée dans les relations des\n" "clés étrangères." -#: rewrite/rewriteDefine.c:465 +#: rewrite/rewriteDefine.c:469 #, c-format msgid "could not convert table \"%s\" to a view because it has indexes" msgstr "n'a pas pu convertir la table « %s » en une vue parce qu'elle a des index" -#: rewrite/rewriteDefine.c:471 +#: rewrite/rewriteDefine.c:475 #, c-format msgid "could not convert table \"%s\" to a view because it has child tables" msgstr "n'a pas pu convertir la table « %s » en une vue parce qu'elle a des tables filles" -#: rewrite/rewriteDefine.c:477 +#: rewrite/rewriteDefine.c:481 +#, c-format +msgid "could not convert table \"%s\" to a view because it has parent tables" +msgstr "n'a pas pu convertir la table « %s » en une vue parce qu'elle a des tables parents" + +#: rewrite/rewriteDefine.c:487 #, c-format msgid "could not convert table \"%s\" to a view because it has row security enabled" msgstr "n'a pas pu convertir la table « %s » en une vue parce que le mode sécurité des lignes est activé pour elle" -#: rewrite/rewriteDefine.c:483 +#: rewrite/rewriteDefine.c:493 #, c-format msgid "could not convert table \"%s\" to a view because it has row security policies" msgstr "n'a pas pu convertir la table « %s » en une vue parce qu'elle a des politiques de sécurité" -#: rewrite/rewriteDefine.c:510 +#: rewrite/rewriteDefine.c:520 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "ne peut pas avoir plusieurs listes RETURNING dans une règle" -#: rewrite/rewriteDefine.c:515 +#: rewrite/rewriteDefine.c:525 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "les listes RETURNING ne sont pas supportés dans des règles conditionnelles" -#: rewrite/rewriteDefine.c:519 +#: rewrite/rewriteDefine.c:529 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "les listes RETURNING ne sont pas supportées dans des règles autres que INSTEAD" -#: rewrite/rewriteDefine.c:683 +#: rewrite/rewriteDefine.c:693 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "la liste cible de la règle SELECT a trop d'entrées" -#: rewrite/rewriteDefine.c:684 +#: rewrite/rewriteDefine.c:694 #, c-format msgid "RETURNING list has too many entries" msgstr "la liste RETURNING a trop d'entrées" -#: rewrite/rewriteDefine.c:711 +#: rewrite/rewriteDefine.c:721 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "ne peut pas convertir la relation contenant les colonnes supprimées de la vue" -#: rewrite/rewriteDefine.c:712 +#: rewrite/rewriteDefine.c:722 #, c-format msgid "cannot create a RETURNING list for a relation containing dropped columns" msgstr "ne peut pas créer une liste RETURNING pour une relation contenant des colonnes supprimées" -#: rewrite/rewriteDefine.c:718 +#: rewrite/rewriteDefine.c:728 #, c-format msgid "SELECT rule's target entry %d has different column name from column \"%s\"" msgstr "l'entrée cible de la règle SELECT %d a un nom de colonne différent pour la colonne « %s »" -#: rewrite/rewriteDefine.c:720 +#: rewrite/rewriteDefine.c:730 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "l'entrée cible de la règle SELECT est nommée « %s »." -#: rewrite/rewriteDefine.c:729 +#: rewrite/rewriteDefine.c:739 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "l'entrée cible de la règle SELECT %d a un type différent de la colonne « %s »" -#: rewrite/rewriteDefine.c:731 +#: rewrite/rewriteDefine.c:741 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "l'entrée %d de la liste RETURNING a un type différent de la colonne « %s »" -#: rewrite/rewriteDefine.c:734 rewrite/rewriteDefine.c:758 +#: rewrite/rewriteDefine.c:744 rewrite/rewriteDefine.c:768 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "l'entrée de la liste SELECT a le type %s alors que la colonne a le type %s." -#: rewrite/rewriteDefine.c:737 rewrite/rewriteDefine.c:762 +#: rewrite/rewriteDefine.c:747 rewrite/rewriteDefine.c:772 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "l'entrée de la liste RETURNING a le type %s alors que la colonne a le type %s." -#: rewrite/rewriteDefine.c:753 +#: rewrite/rewriteDefine.c:763 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "l'entrée cible de la règle SELECT %d a un taille différente de la colonne « %s »" -#: rewrite/rewriteDefine.c:755 +#: rewrite/rewriteDefine.c:765 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "l'entrée %d de la liste RETURNING a une taille différente de la colonne « %s »" -#: rewrite/rewriteDefine.c:772 +#: rewrite/rewriteDefine.c:782 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "l'entrée cible de la règle SELECT n'a pas assez d'entrées" -#: rewrite/rewriteDefine.c:773 +#: rewrite/rewriteDefine.c:783 #, c-format msgid "RETURNING list has too few entries" msgstr "la liste RETURNING n'a pas assez d'entrées" -#: rewrite/rewriteDefine.c:866 rewrite/rewriteDefine.c:980 rewrite/rewriteSupport.c:109 +#: rewrite/rewriteDefine.c:876 rewrite/rewriteDefine.c:990 rewrite/rewriteSupport.c:109 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "la règle « %s » de la relation « %s » n'existe pas" -#: rewrite/rewriteDefine.c:999 +#: rewrite/rewriteDefine.c:1009 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "le renommage d'une règle ON SELECT n'est pas autorisé" -#: rewrite/rewriteHandler.c:544 +#: rewrite/rewriteHandler.c:552 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "Le nom de la requête WITH « %s » apparaît à la fois dans l'action d'une règle et dans la requête en cours de ré-écriture" -#: rewrite/rewriteHandler.c:604 +#: rewrite/rewriteHandler.c:612 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "ne peut pas avoir des listes RETURNING dans plusieurs règles" -#: rewrite/rewriteHandler.c:813 rewrite/rewriteHandler.c:825 +#: rewrite/rewriteHandler.c:845 rewrite/rewriteHandler.c:884 #, c-format -msgid "cannot insert into column \"%s\"" -msgstr "ne peut pas insérer dans la colonne « %s »" +msgid "cannot insert a non-DEFAULT value into column \"%s\"" +msgstr "ne peut pas insérer une valeur pas par défaut dans la colonne « %s »" -#: rewrite/rewriteHandler.c:814 rewrite/rewriteHandler.c:836 +#: rewrite/rewriteHandler.c:847 rewrite/rewriteHandler.c:913 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "La colonne « %s » est une colonne d'identité définie comme GENERATED ALWAYS." -#: rewrite/rewriteHandler.c:816 +#: rewrite/rewriteHandler.c:849 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Utilisez OVERRIDING SYSTEM VALUE pour surcharger." -#: rewrite/rewriteHandler.c:835 rewrite/rewriteHandler.c:842 +#: rewrite/rewriteHandler.c:911 rewrite/rewriteHandler.c:919 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "la colonne « %s » peut seulement être mise à jour en DEFAULT" -#: rewrite/rewriteHandler.c:1011 rewrite/rewriteHandler.c:1029 +#: rewrite/rewriteHandler.c:1066 rewrite/rewriteHandler.c:1084 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "affectations multiples pour la même colonne « %s »" -#: rewrite/rewriteHandler.c:2059 +#: rewrite/rewriteHandler.c:2086 rewrite/rewriteHandler.c:3904 +#, c-format +msgid "infinite recursion detected in rules for relation \"%s\"" +msgstr "récursion infinie détectée dans les règles de la relation « %s »" + +#: rewrite/rewriteHandler.c:2171 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "récursion infinie détectée dans la politique pour la relation « %s »" -#: rewrite/rewriteHandler.c:2379 +#: rewrite/rewriteHandler.c:2491 msgid "Junk view columns are not updatable." msgstr "Les colonnes « junk » des vues ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2384 +#: rewrite/rewriteHandler.c:2496 msgid "View columns that are not columns of their base relation are not updatable." msgstr "Les colonnes des vues qui ne font pas référence à des colonnes de la relation de base ne sont pas automatiquement modifiables." -#: rewrite/rewriteHandler.c:2387 +#: rewrite/rewriteHandler.c:2499 msgid "View columns that refer to system columns are not updatable." msgstr "Les colonnes des vues qui font référence à des colonnes systèmes ne sont pas automatiquement modifiables." -#: rewrite/rewriteHandler.c:2390 +#: rewrite/rewriteHandler.c:2502 msgid "View columns that return whole-row references are not updatable." msgstr "Les colonnes de vue qui font références à des lignes complètes ne sont pas automatiquement modifiables." -#: rewrite/rewriteHandler.c:2451 +#: rewrite/rewriteHandler.c:2563 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Les vues contenant DISTINCT ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2454 +#: rewrite/rewriteHandler.c:2566 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Les vues contenant GROUP BY ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2457 +#: rewrite/rewriteHandler.c:2569 msgid "Views containing HAVING are not automatically updatable." msgstr "Les vues contenant HAVING ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2460 +#: rewrite/rewriteHandler.c:2572 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "Les vues contenant UNION, INTERSECT ou EXCEPT ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2463 +#: rewrite/rewriteHandler.c:2575 msgid "Views containing WITH are not automatically updatable." msgstr "Les vues contenant WITH ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2466 +#: rewrite/rewriteHandler.c:2578 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Les vues contenant LIMIT ou OFFSET ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2478 +#: rewrite/rewriteHandler.c:2590 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Les vues qui renvoient des fonctions d'agrégat ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2481 +#: rewrite/rewriteHandler.c:2593 msgid "Views that return window functions are not automatically updatable." msgstr "Les vues qui renvoient des fonctions de fenêtrage ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2484 +#: rewrite/rewriteHandler.c:2596 msgid "Views that return set-returning functions are not automatically updatable." msgstr "Les vues qui renvoient des fonctions à plusieurs lignes ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2491 rewrite/rewriteHandler.c:2495 rewrite/rewriteHandler.c:2503 +#: rewrite/rewriteHandler.c:2603 rewrite/rewriteHandler.c:2607 rewrite/rewriteHandler.c:2615 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "Les vues qui lisent plusieurs tables ou vues ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2506 +#: rewrite/rewriteHandler.c:2618 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Les vues contenant TABLESAMPLE ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2530 +#: rewrite/rewriteHandler.c:2642 msgid "Views that have no updatable columns are not automatically updatable." msgstr "Les vues qui possèdent des colonnes non modifiables ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2987 +#: rewrite/rewriteHandler.c:3119 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "ne peut pas insérer dans la colonne « %s » de la vue « %s »" -#: rewrite/rewriteHandler.c:2995 +#: rewrite/rewriteHandler.c:3127 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "ne peut pas mettre à jour la colonne « %s » de la vue « %s »" -#: rewrite/rewriteHandler.c:3471 +#: rewrite/rewriteHandler.c:3605 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "les règles DO INSTEAD NOTHING ne sont pas supportées par les instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3485 +#: rewrite/rewriteHandler.c:3619 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "" "les règles DO INSTEAD conditionnelles ne sont pas supportées par les\n" "instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3489 +#: rewrite/rewriteHandler.c:3623 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "les règles DO ALSO ne sont pas supportées par les instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3494 +#: rewrite/rewriteHandler.c:3628 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "" "les règles DO INSTEAD multi-instructions ne sont pas supportées pour les\n" "instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3744 +#: rewrite/rewriteHandler.c:3832 rewrite/rewriteHandler.c:3840 rewrite/rewriteHandler.c:3848 +#, c-format +msgid "Views with conditional DO INSTEAD rules are not automatically updatable." +msgstr "Les vues contenant des règles DO INSTEAD conditionnelles ne sont pas automatiquement disponibles en écriture." + +#: rewrite/rewriteHandler.c:3941 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "ne peut pas exécuter INSERT RETURNING sur la relation « %s »" -#: rewrite/rewriteHandler.c:3746 +#: rewrite/rewriteHandler.c:3943 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "" "Vous avez besoin d'une règle ON INSERT DO INSTEAD sans condition avec une\n" "clause RETURNING." -#: rewrite/rewriteHandler.c:3751 +#: rewrite/rewriteHandler.c:3948 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "ne peut pas exécuter UPDATE RETURNING sur la relation « %s »" -#: rewrite/rewriteHandler.c:3753 +#: rewrite/rewriteHandler.c:3950 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "" "Vous avez besoin d'une règle ON UPDATE DO INSTEAD sans condition avec une\n" "clause RETURNING." -#: rewrite/rewriteHandler.c:3758 +#: rewrite/rewriteHandler.c:3955 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "ne peut pas exécuter DELETE RETURNING sur la relation « %s »" -#: rewrite/rewriteHandler.c:3760 +#: rewrite/rewriteHandler.c:3957 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "" "Vous avez besoin d'une règle ON DELETE DO INSTEAD sans condition avec une\n" "clause RETURNING." -#: rewrite/rewriteHandler.c:3778 +#: rewrite/rewriteHandler.c:3975 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "INSERT avec une clause ON CONFLICT ne peut pas être utilisée avec une table qui a des règles pour INSERT ou UPDATE" -#: rewrite/rewriteHandler.c:3835 +#: rewrite/rewriteHandler.c:4032 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "WITH ne peut pas être utilisé dans une requête réécrite par des règles en plusieurs requêtes" -#: rewrite/rewriteManip.c:1003 +#: rewrite/rewriteManip.c:1006 #, c-format msgid "conditional utility statements are not implemented" msgstr "les instructions conditionnelles ne sont pas implémentées" -#: rewrite/rewriteManip.c:1169 +#: rewrite/rewriteManip.c:1172 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "WHERE CURRENT OF n'est pas implémenté sur une vue" -#: rewrite/rewriteManip.c:1503 +#: rewrite/rewriteManip.c:1507 #, c-format msgid "NEW variables in ON UPDATE rules cannot reference columns that are part of a multiple assignment in the subject UPDATE command" msgstr "les variables NEW dans des règles ON UPDATE ne peuvent pas référencer des colonnes faisant partie d'une affectation multiple dans une commande UPDATE" -#: scan.l:463 +#: scan.l:458 msgid "unterminated /* comment" msgstr "commentaire /* non terminé" -#: scan.l:494 +#: scan.l:478 msgid "unterminated bit string literal" msgstr "chaîne littérale bit non terminée" -#: scan.l:515 +#: scan.l:492 msgid "unterminated hexadecimal string literal" msgstr "chaîne littérale hexadécimale non terminée" -#: scan.l:565 +#: scan.l:542 #, c-format msgid "unsafe use of string constant with Unicode escapes" msgstr "utilisation non sûre de la constante de chaîne avec des échappements Unicode" -#: scan.l:566 +#: scan.l:543 #, c-format msgid "String constants with Unicode escapes cannot be used when standard_conforming_strings is off." msgstr "" "Les constantes de chaîne avec des échappements Unicode ne peuvent pas être\n" "utilisées quand standard_conforming_strings est désactivé." -#: scan.l:612 scan.l:811 -msgid "invalid Unicode escape character" -msgstr "chaîne d'échappement Unicode invalide" - -#: scan.l:638 scan.l:646 scan.l:654 scan.l:655 scan.l:656 scan.l:1400 scan.l:1427 scan.l:1431 scan.l:1469 scan.l:1473 scan.l:1495 scan.l:1505 -msgid "invalid Unicode surrogate pair" -msgstr "paire surrogate Unicode invalide" - -#: scan.l:660 -#, c-format -msgid "invalid Unicode escape" -msgstr "échappement Unicode invalide" +#: scan.l:604 +msgid "unhandled previous state in xqs" +msgstr "état précédent non géré dans xqs" -#: scan.l:661 +#: scan.l:678 #, c-format msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." msgstr "Les échappements Unicode doivent être de la forme \\uXXXX ou \\UXXXXXXXX." -#: scan.l:672 +#: scan.l:689 #, c-format msgid "unsafe use of \\' in a string literal" msgstr "utilisation non sûre de \\' dans une chaîne littérale" -#: scan.l:673 +#: scan.l:690 #, c-format msgid "Use '' to write quotes in strings. \\' is insecure in client-only encodings." msgstr "" "Utilisez '' pour écrire des guillemets dans une chaîne. \\' n'est pas sécurisé\n" "pour les encodages clients." -#: scan.l:748 +#: scan.l:762 msgid "unterminated dollar-quoted string" msgstr "chaîne entre guillemets dollars non terminée" -#: scan.l:765 scan.l:791 scan.l:806 +#: scan.l:779 scan.l:789 msgid "zero-length delimited identifier" msgstr "identifiant délimité de longueur nulle" -#: scan.l:826 syncrep_scanner.l:91 +#: scan.l:800 syncrep_scanner.l:91 msgid "unterminated quoted identifier" msgstr "identifiant entre guillemets non terminé" -#: scan.l:989 +#: scan.l:963 msgid "operator too long" msgstr "opérateur trop long" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1141 +#: scan.l:1171 #, c-format msgid "%s at end of input" msgstr "%s à la fin de l'entrée" #. translator: first %s is typically the translation of "syntax error" -#: scan.l:1149 +#: scan.l:1179 #, c-format msgid "%s at or near \"%s\"" msgstr "%s sur ou près de « %s »" -#: scan.l:1314 scan.l:1346 -msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8" -msgstr "" -"Les valeurs d'échappement unicode ne peuvent pas être utilisées pour les\n" -"valeurs de point de code au-dessus de 007F quand l'encodage serveur n'est\n" -"pas UTF8" - -#: scan.l:1342 scan.l:1487 -msgid "invalid Unicode escape value" -msgstr "valeur d'échappement Unicode invalide" - -#: scan.l:1551 +#: scan.l:1373 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "utilisation non standard de \\' dans une chaîne littérale" -#: scan.l:1552 +#: scan.l:1374 #, c-format msgid "Use '' to write quotes in strings, or use the escape string syntax (E'...')." msgstr "" "Utilisez '' pour écrire des guillemets dans une chaîne ou utilisez la syntaxe de\n" "chaîne d'échappement (E'...')." -#: scan.l:1561 +#: scan.l:1383 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "utilisation non standard de \\\\ dans une chaîne littérale" -#: scan.l:1562 +#: scan.l:1384 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "Utilisez la syntaxe de chaîne d'échappement pour les antislashs, c'est-à-dire E'\\\\'." -#: scan.l:1576 +#: scan.l:1398 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "utilisation non standard d'un échappement dans une chaîne littérale" -#: scan.l:1577 +#: scan.l:1399 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "" "Utilisez la syntaxe de la chaîne d'échappement pour les échappements,\n" "c'est-à-dire E'\\r\\n'." -#: snowball/dict_snowball.c:197 +#: snowball/dict_snowball.c:215 #, c-format msgid "no Snowball stemmer available for language \"%s\" and encoding \"%s\"" msgstr "aucun stemmer Snowball disponible pour la langue « %s » et l'encodage « %s »" -#: snowball/dict_snowball.c:220 tsearch/dict_ispell.c:74 tsearch/dict_simple.c:49 +#: snowball/dict_snowball.c:238 tsearch/dict_ispell.c:74 tsearch/dict_simple.c:49 #, c-format msgid "multiple StopWords parameters" msgstr "plusieurs paramètres StopWords" -#: snowball/dict_snowball.c:229 +#: snowball/dict_snowball.c:247 #, c-format msgid "multiple Language parameters" msgstr "multiples paramètres Language" -#: snowball/dict_snowball.c:236 +#: snowball/dict_snowball.c:254 #, c-format msgid "unrecognized Snowball parameter: \"%s\"" msgstr "paramètre Snowball non reconnu : « %s »" -#: snowball/dict_snowball.c:244 +#: snowball/dict_snowball.c:262 #, c-format msgid "missing Language parameter" msgstr "paramètre Language manquant" -#: statistics/dependencies.c:674 statistics/dependencies.c:727 statistics/mcv.c:1477 statistics/mcv.c:1508 statistics/mvdistinct.c:349 statistics/mvdistinct.c:402 utils/adt/pseudotypes.c:94 utils/adt/pseudotypes.c:122 utils/adt/pseudotypes.c:147 utils/adt/pseudotypes.c:171 utils/adt/pseudotypes.c:282 utils/adt/pseudotypes.c:307 utils/adt/pseudotypes.c:335 utils/adt/pseudotypes.c:363 utils/adt/pseudotypes.c:393 -#, c-format -msgid "cannot accept a value of type %s" -msgstr "ne peut pas accepter une valeur de type %s" - -#: statistics/extended_stats.c:121 +#: statistics/extended_stats.c:175 #, c-format msgid "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "l'objet de statistiques « %s.%s » n'a pas pu être calculé pour la relation « %s.%s »" -#: statistics/mcv.c:1366 utils/adt/jsonfuncs.c:1708 +#: statistics/extended_stats.c:2277 +#, c-format +msgid "relation \"pg_statistic\" does not have a composite type" +msgstr "la relation « pg_statistic » n'a pas un type composite" + +#: statistics/mcv.c:1368 utils/adt/jsonfuncs.c:1941 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "" "fonction renvoyant le type record appelée dans un contexte qui ne peut pas\n" "accepter le type record" -#: storage/buffer/bufmgr.c:545 storage/buffer/bufmgr.c:658 +#: storage/buffer/bufmgr.c:601 storage/buffer/bufmgr.c:761 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "ne peut pas accéder aux tables temporaires d'autres sessions" -#: storage/buffer/bufmgr.c:814 +#: storage/buffer/bufmgr.c:917 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "" "données inattendues après la fin de fichier dans le bloc %u de la relation\n" "%s" -#: storage/buffer/bufmgr.c:816 +#: storage/buffer/bufmgr.c:919 #, c-format msgid "This has been seen to occur with buggy kernels; consider updating your system." msgstr "" "Ceci s'est déjà vu avec des noyaux buggés ; pensez à mettre à jour votre\n" "système." -#: storage/buffer/bufmgr.c:914 +#: storage/buffer/bufmgr.c:1018 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "page invalide dans le bloc %u de la relation %s ; remplacement de la page par des zéros" -#: storage/buffer/bufmgr.c:4056 +#: storage/buffer/bufmgr.c:4524 #, c-format msgid "could not write block %u of %s" msgstr "n'a pas pu écrire le bloc %u de %s" -#: storage/buffer/bufmgr.c:4058 +#: storage/buffer/bufmgr.c:4526 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Échecs multiples --- l'erreur d'écriture pourrait être permanent." -#: storage/buffer/bufmgr.c:4079 storage/buffer/bufmgr.c:4098 +#: storage/buffer/bufmgr.c:4547 storage/buffer/bufmgr.c:4566 #, c-format msgid "writing block %u of relation %s" msgstr "écriture du bloc %u de la relation %s" -#: storage/buffer/bufmgr.c:4401 +#: storage/buffer/bufmgr.c:4870 #, c-format msgid "snapshot too old" msgstr "snapshot trop ancien" -#: storage/buffer/localbuf.c:199 +#: storage/buffer/localbuf.c:205 #, c-format msgid "no empty local buffer available" msgstr "aucun tampon local vide disponible" -#: storage/buffer/localbuf.c:427 +#: storage/buffer/localbuf.c:433 #, c-format msgid "cannot access temporary tables during a parallel operation" msgstr "ne peut pas accéder à des tables temporaires pendant une opération parallèle" -#: storage/file/buffile.c:319 +#: storage/file/buffile.c:323 #, c-format msgid "could not open temporary file \"%s\" from BufFile \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier temporaire « %s » à partir de BufFile « %s » : %m" -#: storage/file/buffile.c:796 +#: storage/file/buffile.c:684 storage/file/buffile.c:805 #, c-format msgid "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" msgstr "n'a pas pu déterminer la taille du fichier temporaire « %s » à partir de BufFile « %s » : %m" -#: storage/file/fd.c:458 storage/file/fd.c:530 storage/file/fd.c:566 +#: storage/file/buffile.c:884 +#, c-format +msgid "could not delete shared fileset \"%s\": %m" +msgstr "n'a pas pu supprimer l'ensemble de fichiers partagés « %s » : %m" + +#: storage/file/buffile.c:902 storage/smgr/md.c:306 storage/smgr/md.c:865 +#, c-format +msgid "could not truncate file \"%s\": %m" +msgstr "n'a pas pu tronquer le fichier « %s » : %m" + +#: storage/file/fd.c:515 storage/file/fd.c:587 storage/file/fd.c:623 #, c-format msgid "could not flush dirty data: %m" msgstr "n'a pas pu vider les données modifiées : %m" -#: storage/file/fd.c:488 +#: storage/file/fd.c:545 #, c-format msgid "could not determine dirty data size: %m" msgstr "n'a pas pu déterminer la taille des données modifiées : %m" -#: storage/file/fd.c:540 +#: storage/file/fd.c:597 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "n'a pas exécuter munmap() durant la synchronisation des données : %m" -#: storage/file/fd.c:748 +#: storage/file/fd.c:836 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "n'a pas pu lier le fichier « %s » à « %s » : %m" -#: storage/file/fd.c:842 +#: storage/file/fd.c:929 #, c-format msgid "getrlimit failed: %m" msgstr "échec de getrlimit : %m" -#: storage/file/fd.c:932 +#: storage/file/fd.c:1019 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "nombre de descripteurs de fichier insuffisants pour lancer le processus serveur" -#: storage/file/fd.c:933 +#: storage/file/fd.c:1020 #, c-format msgid "System allows %d, we need at least %d." msgstr "Le système autorise %d, nous avons besoin d'au moins %d." -#: storage/file/fd.c:984 storage/file/fd.c:2246 storage/file/fd.c:2356 storage/file/fd.c:2507 +#: storage/file/fd.c:1071 storage/file/fd.c:2408 storage/file/fd.c:2518 storage/file/fd.c:2669 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "plus de descripteurs de fichiers : %m; quittez et ré-essayez" -#: storage/file/fd.c:1284 +#: storage/file/fd.c:1445 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "fichier temporaire : chemin « %s », taille %lu" -#: storage/file/fd.c:1415 +#: storage/file/fd.c:1576 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "ne peut pas créer le répertoire temporaire « %s » : %m" -#: storage/file/fd.c:1422 +#: storage/file/fd.c:1583 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "ne peut pas créer le sous-répertoire temporaire « %s » : %m" -#: storage/file/fd.c:1615 +#: storage/file/fd.c:1776 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "n'a pas pu créer le fichier temporaire « %s » : %m" -#: storage/file/fd.c:1650 +#: storage/file/fd.c:1810 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier temporaire « %s » : %m" -#: storage/file/fd.c:1691 +#: storage/file/fd.c:1851 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier temporaire « %s » : %m" -#: storage/file/fd.c:1955 +#: storage/file/fd.c:1939 +#, c-format +msgid "could not delete file \"%s\": %m" +msgstr "n'a pas pu supprimer le fichier « %s » : %m" + +#: storage/file/fd.c:2119 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "la taille du fichier temporaire dépasse temp_file_limit (%d Ko)" -#: storage/file/fd.c:2222 storage/file/fd.c:2281 +#: storage/file/fd.c:2384 storage/file/fd.c:2443 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "dépassement de maxAllocatedDescs (%d) lors de la tentative d'ouverture du fichier « %s »" -#: storage/file/fd.c:2326 +#: storage/file/fd.c:2488 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "dépassement de maxAllocatedDescs (%d) lors de la tentative d'exécution de la commande « %s »" -#: storage/file/fd.c:2483 +#: storage/file/fd.c:2645 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "dépassement de maxAllocatedDescs (%d) lors de la tentative d'ouverture du répertoire « %s »" -#: storage/file/fd.c:3006 +#: storage/file/fd.c:3175 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "fichier non attendu dans le répertoire des fichiers temporaires : « %s »" -#: storage/file/sharedfileset.c:95 +#: storage/file/fd.c:3298 +#, c-format +msgid "could not open %s: %m" +msgstr "n'a pas pu ouvrir %s : %m" + +#: storage/file/fd.c:3304 +#, c-format +msgid "could not sync filesystem for \"%s\": %m" +msgstr "n'a pas pu synchroniser sur disque (fsync) le système de fichiers pour « %s » : %m" + +#: storage/file/sharedfileset.c:144 #, c-format msgid "could not attach to a SharedFileSet that is already destroyed" msgstr "n'a pas pu s'attacher a un SharedFileSet qui est déjà détruit" -#: storage/ipc/dsm.c:343 +#: storage/ipc/dsm.c:351 #, c-format msgid "dynamic shared memory control segment is corrupt" msgstr "le segment contrôle de mémoire partagée dynamique est corrompu" -#: storage/ipc/dsm.c:404 +#: storage/ipc/dsm.c:415 #, c-format msgid "dynamic shared memory control segment is not valid" msgstr "le segment contrôle de mémoire partagée dynamique n'est pas valide" -#: storage/ipc/dsm.c:500 +#: storage/ipc/dsm.c:592 #, c-format msgid "too many dynamic shared memory segments" msgstr "trop de segments de mémoire partagée dynamique" -#: storage/ipc/dsm_impl.c:230 storage/ipc/dsm_impl.c:517 storage/ipc/dsm_impl.c:621 storage/ipc/dsm_impl.c:792 +#: storage/ipc/dsm_impl.c:233 storage/ipc/dsm_impl.c:529 storage/ipc/dsm_impl.c:633 storage/ipc/dsm_impl.c:804 #, c-format msgid "could not unmap shared memory segment \"%s\": %m" msgstr "n'a pas pu annuler le mappage du segment de mémoire partagée « %s » : %m" -#: storage/ipc/dsm_impl.c:240 storage/ipc/dsm_impl.c:527 storage/ipc/dsm_impl.c:631 storage/ipc/dsm_impl.c:802 +#: storage/ipc/dsm_impl.c:243 storage/ipc/dsm_impl.c:539 storage/ipc/dsm_impl.c:643 storage/ipc/dsm_impl.c:814 #, c-format msgid "could not remove shared memory segment \"%s\": %m" msgstr "n'a pas pu supprimer le segment de mémoire partagée « %s » : %m" -#: storage/ipc/dsm_impl.c:261 storage/ipc/dsm_impl.c:702 storage/ipc/dsm_impl.c:816 +#: storage/ipc/dsm_impl.c:267 storage/ipc/dsm_impl.c:714 storage/ipc/dsm_impl.c:828 #, c-format msgid "could not open shared memory segment \"%s\": %m" msgstr "n'a pas pu ouvrir le segment de mémoire partagée « %s » : %m" -#: storage/ipc/dsm_impl.c:285 storage/ipc/dsm_impl.c:543 storage/ipc/dsm_impl.c:747 storage/ipc/dsm_impl.c:840 +#: storage/ipc/dsm_impl.c:292 storage/ipc/dsm_impl.c:555 storage/ipc/dsm_impl.c:759 storage/ipc/dsm_impl.c:852 #, c-format msgid "could not stat shared memory segment \"%s\": %m" msgstr "n'a pas pu obtenir des informations sur le segment de mémoire partagée « %s » : %m" -#: storage/ipc/dsm_impl.c:311 storage/ipc/dsm_impl.c:891 +#: storage/ipc/dsm_impl.c:319 storage/ipc/dsm_impl.c:903 #, c-format msgid "could not resize shared memory segment \"%s\" to %zu bytes: %m" msgstr "n'a pas pu retailler le segment de mémoire partagée « %s » en %zu octets : %m" -#: storage/ipc/dsm_impl.c:332 storage/ipc/dsm_impl.c:564 storage/ipc/dsm_impl.c:723 storage/ipc/dsm_impl.c:913 +#: storage/ipc/dsm_impl.c:341 storage/ipc/dsm_impl.c:576 storage/ipc/dsm_impl.c:735 storage/ipc/dsm_impl.c:925 #, c-format msgid "could not map shared memory segment \"%s\": %m" msgstr "n'a pas pu mapper le segment de mémoire partagée « %s » : %m" -#: storage/ipc/dsm_impl.c:499 +#: storage/ipc/dsm_impl.c:511 #, c-format msgid "could not get shared memory segment: %m" msgstr "n'a pas pu obtenir le segment de mémoire partagée : %m" -#: storage/ipc/dsm_impl.c:687 +#: storage/ipc/dsm_impl.c:699 #, c-format msgid "could not create shared memory segment \"%s\": %m" msgstr "n'a pas pu créer le segment de mémoire partagée « %s » : %m" -#: storage/ipc/dsm_impl.c:924 +#: storage/ipc/dsm_impl.c:936 #, c-format msgid "could not close shared memory segment \"%s\": %m" msgstr "n'a pas pu fermer le segment de mémoire partagée « %s » : %m" -#: storage/ipc/dsm_impl.c:963 storage/ipc/dsm_impl.c:1011 +#: storage/ipc/dsm_impl.c:975 storage/ipc/dsm_impl.c:1023 #, c-format msgid "could not duplicate handle for \"%s\": %m" msgstr "n'a pas pu dupliquer le lien pour « %s » : %m" -#. translator: %s is a syscall name, such as "poll()" -#: storage/ipc/latch.c:860 storage/ipc/latch.c:1093 storage/ipc/latch.c:1219 +#: storage/ipc/procarray.c:3724 +#, c-format +msgid "database \"%s\" is being used by prepared transactions" +msgstr "la base de données « %s » est utilisée par des transactions préparées." + +#: storage/ipc/procarray.c:3756 storage/ipc/signalfuncs.c:218 +#, c-format +msgid "must be a superuser to terminate superuser process" +msgstr "doit être super-utilisateur pour terminer le processus d'un super-utilisateur" + +#: storage/ipc/procarray.c:3763 storage/ipc/signalfuncs.c:223 +#, c-format +msgid "must be a member of the role whose process is being terminated or member of pg_signal_backend" +msgstr "doit être un membre du rôle dont le processus est en cours d'arrêt ou membre de pg_signal_backend" + +#: storage/ipc/shm_mq.c:368 +#, c-format +msgid "cannot send a message of size %zu via shared memory queue" +msgstr "ne peut pas pu envoyer un message de taille %zu via la queue en mémoire partagée" + +#: storage/ipc/shm_mq.c:694 #, c-format -msgid "%s failed: %m" -msgstr "échec de %s : %m" +msgid "invalid message size %zu in shared memory queue" +msgstr "taille %zu invalide pour le message dans la queue de mémoire partagée" -#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:929 storage/lmgr/lock.c:967 storage/lmgr/lock.c:2754 storage/lmgr/lock.c:4084 storage/lmgr/lock.c:4149 storage/lmgr/lock.c:4441 storage/lmgr/predicate.c:2404 storage/lmgr/predicate.c:2419 storage/lmgr/predicate.c:3918 storage/lmgr/predicate.c:5075 utils/hash/dynahash.c:1065 +#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:981 storage/lmgr/lock.c:1019 storage/lmgr/lock.c:2844 storage/lmgr/lock.c:4173 storage/lmgr/lock.c:4238 storage/lmgr/lock.c:4545 storage/lmgr/predicate.c:2470 storage/lmgr/predicate.c:2485 storage/lmgr/predicate.c:3967 storage/lmgr/predicate.c:5078 utils/hash/dynahash.c:1112 #, c-format msgid "out of shared memory" msgstr "mémoire partagée épuisée" -#: storage/ipc/shmem.c:165 storage/ipc/shmem.c:246 +#: storage/ipc/shmem.c:170 storage/ipc/shmem.c:266 #, c-format msgid "out of shared memory (%zu bytes requested)" msgstr "pas assez de mémoire partagée (%zu octets demandés)" -#: storage/ipc/shmem.c:421 +#: storage/ipc/shmem.c:445 #, c-format msgid "could not create ShmemIndex entry for data structure \"%s\"" msgstr "n'a pas pu créer l'entrée ShmemIndex pour la structure de données « %s »" -#: storage/ipc/shmem.c:436 +#: storage/ipc/shmem.c:460 #, c-format msgid "ShmemIndex entry size is wrong for data structure \"%s\": expected %zu, actual %zu" msgstr "La taille de l'entrée ShmemIndex est mauvaise pour la structure de données « %s » : %zu attendu, %zu obtenu" -#: storage/ipc/shmem.c:453 +#: storage/ipc/shmem.c:479 #, c-format msgid "not enough shared memory for data structure \"%s\" (%zu bytes requested)" msgstr "pas assez de mémoire partagée pour la structure de données « %s » (%zu octets demandés)" -#: storage/ipc/shmem.c:484 storage/ipc/shmem.c:503 +#: storage/ipc/shmem.c:511 storage/ipc/shmem.c:530 #, c-format msgid "requested shared memory size overflows size_t" msgstr "la taille de la mémoire partagée demandée dépasse size_t" -#: storage/ipc/signalfuncs.c:67 +#: storage/ipc/signalfuncs.c:68 storage/ipc/signalfuncs.c:260 utils/adt/mcxtfuncs.c:196 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "le PID %d n'est pas un processus du serveur PostgreSQL" -#: storage/ipc/signalfuncs.c:98 storage/lmgr/proc.c:1363 +#: storage/ipc/signalfuncs.c:99 storage/lmgr/proc.c:1454 utils/adt/mcxtfuncs.c:210 #, c-format msgid "could not send signal to process %d: %m" msgstr "n'a pas pu envoyer le signal au processus %d : %m" -#: storage/ipc/signalfuncs.c:118 +#: storage/ipc/signalfuncs.c:119 #, c-format msgid "must be a superuser to cancel superuser query" msgstr "doit être super-utilisateur pour annuler la requête d'un super-utilisateur" -#: storage/ipc/signalfuncs.c:123 +#: storage/ipc/signalfuncs.c:124 #, c-format msgid "must be a member of the role whose query is being canceled or member of pg_signal_backend" msgstr "doit être un membre du rôle dont la requête est en cours d'annulation ou membre de pg_signal_backend" -#: storage/ipc/signalfuncs.c:142 +#: storage/ipc/signalfuncs.c:164 #, c-format -msgid "must be a superuser to terminate superuser process" -msgstr "doit être super-utilisateur pour terminer le processus d'un super-utilisateur" +msgid "could not check the existence of the backend with PID %d: %m" +msgstr "" -#: storage/ipc/signalfuncs.c:147 +#: storage/ipc/signalfuncs.c:182 #, c-format -msgid "must be a member of the role whose process is being terminated or member of pg_signal_backend" -msgstr "doit être un membre du rôle dont le processus est en cours d'arrêt ou membre de pg_signal_backend" +msgid "backend with PID %d did not terminate within %lld milliseconds" +msgstr "le processus serveur de PID %d ne s'est pas terminé dans les %lld secondes" + +#: storage/ipc/signalfuncs.c:211 +#, c-format +msgid "\"timeout\" must not be negative" +msgstr "« timeout » ne doit pas être négatif" + +#: storage/ipc/signalfuncs.c:253 +#, c-format +msgid "\"timeout\" must not be negative or zero" +msgstr "« timeout » ne doit pas être négatif ou nul" -#: storage/ipc/signalfuncs.c:183 +#: storage/ipc/signalfuncs.c:299 #, c-format msgid "must be superuser to rotate log files with adminpack 1.0" msgstr "doit être super-utilisateur pour exécuter la rotation des journaux applicatifs avec adminpack 1.0" #. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:223 +#: storage/ipc/signalfuncs.c:301 utils/adt/genfile.c:256 #, c-format msgid "Consider using %s, which is part of core, instead." msgstr "Considérer l'utilisation de %s, qui fait partie de l'installation par défaut, à la place." -#: storage/ipc/signalfuncs.c:191 storage/ipc/signalfuncs.c:211 +#: storage/ipc/signalfuncs.c:307 storage/ipc/signalfuncs.c:327 #, c-format msgid "rotation not possible because log collection not active" msgstr "rotation impossible car la récupération des journaux applicatifs n'est pas activée" -#: storage/ipc/standby.c:558 tcop/postgres.c:3110 +#: storage/ipc/standby.c:305 +#, fuzzy, c-format +#| msgid "process %d still waiting for %s on %s after %ld.%03d ms" +msgid "recovery still waiting after %ld.%03d ms: %s" +msgstr "le processus %d est toujours en attente de %s sur %s après %ld.%03d ms" + +#: storage/ipc/standby.c:314 +#, fuzzy, c-format +#| msgid "process %d still waiting for %s on %s after %ld.%03d ms" +msgid "recovery finished waiting after %ld.%03d ms: %s" +msgstr "le processus %d est toujours en attente de %s sur %s après %ld.%03d ms" + +#: storage/ipc/standby.c:878 tcop/postgres.c:3307 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "annulation de la requête à cause d'un conflit avec la restauration" -#: storage/ipc/standby.c:559 tcop/postgres.c:2384 +#: storage/ipc/standby.c:879 tcop/postgres.c:2471 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "La transaction de l'utilisateur causait un verrou mortel lors de la restauration." -#: storage/large_object/inv_api.c:189 +#: storage/ipc/standby.c:1421 +msgid "unknown reason" +msgstr "raison inconnue" + +#: storage/ipc/standby.c:1426 +msgid "recovery conflict on buffer pin" +msgstr "" + +#: storage/ipc/standby.c:1429 +msgid "recovery conflict on lock" +msgstr "conflit de restauration sur le verrou" + +#: storage/ipc/standby.c:1432 +msgid "recovery conflict on tablespace" +msgstr "conflit lors de la restauration sur un tablespace" + +#: storage/ipc/standby.c:1435 +msgid "recovery conflict on snapshot" +msgstr "" + +#: storage/ipc/standby.c:1438 +msgid "recovery conflict on buffer deadlock" +msgstr "" + +#: storage/ipc/standby.c:1441 +msgid "recovery conflict on database" +msgstr "conflit de restauration sur la base de données" + +#: storage/large_object/inv_api.c:191 #, c-format msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" msgstr "l'entrée du Large Object d'OID %u, en page %d, a une taille de champ de données invalide, %d" -#: storage/large_object/inv_api.c:270 +#: storage/large_object/inv_api.c:272 #, c-format msgid "invalid flags for opening a large object: %d" msgstr "drapeaux invalides pour l'ouverture d'un « Large Object » : %d" -#: storage/large_object/inv_api.c:460 +#: storage/large_object/inv_api.c:462 #, c-format msgid "invalid whence setting: %d" msgstr "paramètrage de « whence » invalide : %d" -#: storage/large_object/inv_api.c:632 +#: storage/large_object/inv_api.c:634 #, c-format msgid "invalid large object write request size: %d" msgstr "taille de la requête d'écriture du « Large Object » invalide : %d" -#: storage/lmgr/deadlock.c:1115 +#: storage/lmgr/deadlock.c:1122 #, c-format msgid "Process %d waits for %s on %s; blocked by process %d." msgstr "Le processus %d attend %s sur %s ; bloqué par le processus %d." -#: storage/lmgr/deadlock.c:1134 +#: storage/lmgr/deadlock.c:1141 #, c-format msgid "Process %d: %s" msgstr "Processus %d : %s" -#: storage/lmgr/deadlock.c:1143 +#: storage/lmgr/deadlock.c:1150 #, c-format msgid "deadlock detected" msgstr "interblocage (deadlock) détecté" -#: storage/lmgr/deadlock.c:1146 +#: storage/lmgr/deadlock.c:1153 #, c-format msgid "See server log for query details." msgstr "Voir les journaux applicatifs du serveur pour les détails sur la requête." -#: storage/lmgr/lmgr.c:815 +#: storage/lmgr/lmgr.c:831 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "lors de la mise à jour de la ligne (%u,%u) dans la relation « %s »" -#: storage/lmgr/lmgr.c:818 +#: storage/lmgr/lmgr.c:834 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "lors de la suppression de la ligne (%u,%u) dans la relation « %s »" -#: storage/lmgr/lmgr.c:821 +#: storage/lmgr/lmgr.c:837 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "lors du verrouillage de la ligne (%u,%u) dans la relation « %s »" -#: storage/lmgr/lmgr.c:824 +#: storage/lmgr/lmgr.c:840 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "lors du verrou de la version mise à jour (%u, %u) de la ligne de la relation « %s »" -#: storage/lmgr/lmgr.c:827 +#: storage/lmgr/lmgr.c:843 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "lors de l'insertion de l'enregistrement (%u, %u) de l'index dans la relation « %s »" -#: storage/lmgr/lmgr.c:830 +#: storage/lmgr/lmgr.c:846 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "lors de la vérification de l'unicité de l'enregistrement (%u,%u) dans la relation « %s »" -#: storage/lmgr/lmgr.c:833 +#: storage/lmgr/lmgr.c:849 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "lors de la re-vérification de l'enregistrement mis à jour (%u,%u) dans la relation « %s »" -#: storage/lmgr/lmgr.c:836 +#: storage/lmgr/lmgr.c:852 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "lors de la vérification de la contrainte d'exclusion sur l'enregistrement (%u,%u) dans la relation « %s »" -#: storage/lmgr/lmgr.c:1093 +#: storage/lmgr/lmgr.c:1106 #, c-format msgid "relation %u of database %u" msgstr "relation %u de la base de données %u" -#: storage/lmgr/lmgr.c:1099 +#: storage/lmgr/lmgr.c:1112 #, c-format msgid "extension of relation %u of database %u" msgstr "extension de la relation %u de la base de données %u" -#: storage/lmgr/lmgr.c:1105 +#: storage/lmgr/lmgr.c:1118 +#, c-format +msgid "pg_database.datfrozenxid of database %u" +msgstr "pg_database.datfrozenxid de la base %u" + +#: storage/lmgr/lmgr.c:1123 #, c-format msgid "page %u of relation %u of database %u" msgstr "page %u de la relation %u de la base de données %u" -#: storage/lmgr/lmgr.c:1112 +#: storage/lmgr/lmgr.c:1130 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "ligne (%u,%u) de la relation %u de la base de données %u" -#: storage/lmgr/lmgr.c:1120 +#: storage/lmgr/lmgr.c:1138 #, c-format msgid "transaction %u" msgstr "transaction %u" -#: storage/lmgr/lmgr.c:1125 +#: storage/lmgr/lmgr.c:1143 #, c-format msgid "virtual transaction %d/%u" msgstr "transaction virtuelle %d/%u" -#: storage/lmgr/lmgr.c:1131 +#: storage/lmgr/lmgr.c:1149 #, c-format msgid "speculative token %u of transaction %u" msgstr "jeton spéculatif %u de la transaction %u" -#: storage/lmgr/lmgr.c:1137 +#: storage/lmgr/lmgr.c:1155 #, c-format msgid "object %u of class %u of database %u" msgstr "objet %u de la classe %u de la base de données %u" -#: storage/lmgr/lmgr.c:1145 +#: storage/lmgr/lmgr.c:1163 #, c-format msgid "user lock [%u,%u,%u]" msgstr "verrou utilisateur [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1152 +#: storage/lmgr/lmgr.c:1170 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "verrou informatif [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1160 +#: storage/lmgr/lmgr.c:1178 #, c-format msgid "unrecognized locktag type %d" msgstr "type locktag non reconnu %d" -#: storage/lmgr/lock.c:764 +#: storage/lmgr/lock.c:802 #, c-format msgid "cannot acquire lock mode %s on database objects while recovery is in progress" msgstr "" "ne peut pas acquérir le mode de verrou %s sur les objets de base de données\n" "alors que la restauration est en cours" -#: storage/lmgr/lock.c:766 +#: storage/lmgr/lock.c:804 #, c-format msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." msgstr "" "Seuls RowExclusiveLock et les verrous inférieurs peuvent être acquis sur les\n" "objets d'une base pendant une restauration." -#: storage/lmgr/lock.c:930 storage/lmgr/lock.c:968 storage/lmgr/lock.c:2755 storage/lmgr/lock.c:4085 storage/lmgr/lock.c:4150 storage/lmgr/lock.c:4442 +#: storage/lmgr/lock.c:982 storage/lmgr/lock.c:1020 storage/lmgr/lock.c:2845 storage/lmgr/lock.c:4174 storage/lmgr/lock.c:4239 storage/lmgr/lock.c:4546 #, c-format msgid "You might need to increase max_locks_per_transaction." msgstr "Vous pourriez avoir besoin d'augmenter max_locks_per_transaction." -#: storage/lmgr/lock.c:3201 storage/lmgr/lock.c:3317 +#: storage/lmgr/lock.c:3283 storage/lmgr/lock.c:3399 #, c-format msgid "cannot PREPARE while holding both session-level and transaction-level locks on the same object" msgstr "ne peut pas utiliser PREPARE lorsque des verrous de niveau session et deniveau transaction sont détenus sur le même objet" -#: storage/lmgr/predicate.c:703 +#: storage/lmgr/predicate.c:700 #, c-format msgid "not enough elements in RWConflictPool to record a read/write conflict" msgstr "pas assez d'éléments dans RWConflictPool pour enregistrer un conflit en lecture/écriture" -#: storage/lmgr/predicate.c:704 storage/lmgr/predicate.c:732 +#: storage/lmgr/predicate.c:701 storage/lmgr/predicate.c:729 #, c-format msgid "You might need to run fewer transactions at a time or increase max_connections." msgstr "" "Il est possible que vous ayez à exécuter moins de transactions à la fois\n" "ou d'augmenter max_connections." -#: storage/lmgr/predicate.c:731 +#: storage/lmgr/predicate.c:728 #, c-format msgid "not enough elements in RWConflictPool to record a potential read/write conflict" msgstr "pas assez d'éléments dans RWConflictPool pour enregistrer un conflit en lecture/écriture potentiel" -#: storage/lmgr/predicate.c:1538 -#, c-format -msgid "deferrable snapshot was unsafe; trying a new one" -msgstr "l'image déferrable est non sûre ; tentative avec une nouvelle image" - -#: storage/lmgr/predicate.c:1627 +#: storage/lmgr/predicate.c:1694 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "« default_transaction_isolation » est configuré à « serializable »." -#: storage/lmgr/predicate.c:1628 +#: storage/lmgr/predicate.c:1695 #, c-format msgid "You can use \"SET default_transaction_isolation = 'repeatable read'\" to change the default." msgstr "" "Vous pouvez utiliser « SET default_transaction_isolation = 'repeatable read' »\n" "pour modifier la valeur par défaut." -#: storage/lmgr/predicate.c:1679 +#: storage/lmgr/predicate.c:1746 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "une transaction important un snapshot ne doit pas être READ ONLY DEFERRABLE" -#: storage/lmgr/predicate.c:1758 utils/time/snapmgr.c:623 utils/time/snapmgr.c:629 +#: storage/lmgr/predicate.c:1825 utils/time/snapmgr.c:567 utils/time/snapmgr.c:573 #, c-format msgid "could not import the requested snapshot" msgstr "n'a pas pu importer le snapshot demandé" -#: storage/lmgr/predicate.c:1759 utils/time/snapmgr.c:630 +#: storage/lmgr/predicate.c:1826 utils/time/snapmgr.c:574 #, c-format msgid "The source process with PID %d is not running anymore." msgstr "Le processus source de PID %d n'est plus en cours d'exécution." -#: storage/lmgr/predicate.c:2405 storage/lmgr/predicate.c:2420 storage/lmgr/predicate.c:3919 +#: storage/lmgr/predicate.c:2471 storage/lmgr/predicate.c:2486 storage/lmgr/predicate.c:3968 #, c-format msgid "You might need to increase max_pred_locks_per_transaction." msgstr "Vous pourriez avoir besoin d'augmenter max_pred_locks_per_transaction." -#: storage/lmgr/predicate.c:4075 storage/lmgr/predicate.c:4164 storage/lmgr/predicate.c:4172 storage/lmgr/predicate.c:4211 storage/lmgr/predicate.c:4454 storage/lmgr/predicate.c:4791 storage/lmgr/predicate.c:4803 storage/lmgr/predicate.c:4846 storage/lmgr/predicate.c:4884 +#: storage/lmgr/predicate.c:4099 storage/lmgr/predicate.c:4135 storage/lmgr/predicate.c:4168 storage/lmgr/predicate.c:4176 storage/lmgr/predicate.c:4215 storage/lmgr/predicate.c:4457 storage/lmgr/predicate.c:4794 storage/lmgr/predicate.c:4806 storage/lmgr/predicate.c:4849 storage/lmgr/predicate.c:4887 #, c-format msgid "could not serialize access due to read/write dependencies among transactions" msgstr "" "n'a pas pu sérialiser un accès à cause des dépendances de lecture/écriture\n" "parmi les transactions" -#: storage/lmgr/predicate.c:4077 storage/lmgr/predicate.c:4166 storage/lmgr/predicate.c:4174 storage/lmgr/predicate.c:4213 storage/lmgr/predicate.c:4456 storage/lmgr/predicate.c:4793 storage/lmgr/predicate.c:4805 storage/lmgr/predicate.c:4848 storage/lmgr/predicate.c:4886 +#: storage/lmgr/predicate.c:4101 storage/lmgr/predicate.c:4137 storage/lmgr/predicate.c:4170 storage/lmgr/predicate.c:4178 storage/lmgr/predicate.c:4217 storage/lmgr/predicate.c:4459 storage/lmgr/predicate.c:4796 storage/lmgr/predicate.c:4808 storage/lmgr/predicate.c:4851 storage/lmgr/predicate.c:4889 #, c-format msgid "The transaction might succeed if retried." msgstr "La transaction pourrait réussir après une nouvelle tentative." -#: storage/lmgr/proc.c:359 +#: storage/lmgr/proc.c:357 #, c-format msgid "number of requested standby connections exceeds max_wal_senders (currently %d)" msgstr "" "le nombre de connexions demandées par le serveur en attente dépasse\n" "max_wal_senders (actuellement %d)" -#: storage/lmgr/proc.c:1334 -#, c-format -msgid "Process %d waits for %s on %s." -msgstr "Le processus %d attend %s sur %s." - -#: storage/lmgr/proc.c:1345 -#, c-format -msgid "sending cancel to blocking autovacuum PID %d" -msgstr "envoi de l'annulation pour bloquer le PID %d de l'autovacuum" - -#: storage/lmgr/proc.c:1465 +#: storage/lmgr/proc.c:1551 #, c-format msgid "process %d avoided deadlock for %s on %s by rearranging queue order after %ld.%03d ms" msgstr "" "le processus %d a évité un verrou mortel pour %s sur %s en modifiant l'ordre\n" "de la queue après %ld.%03d ms" -#: storage/lmgr/proc.c:1480 +#: storage/lmgr/proc.c:1566 #, c-format msgid "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "" "le processus %d a détecté un verrou mortel alors qu'il était en attente de\n" "%s sur %s après %ld.%03d ms" -#: storage/lmgr/proc.c:1489 +#: storage/lmgr/proc.c:1575 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "le processus %d est toujours en attente de %s sur %s après %ld.%03d ms" -#: storage/lmgr/proc.c:1496 +#: storage/lmgr/proc.c:1582 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "le processus %d a acquis %s sur %s après %ld.%03d ms" -#: storage/lmgr/proc.c:1512 +#: storage/lmgr/proc.c:1598 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "le processus %d a échoué pour l'acquisition de %s sur %s après %ld.%03d ms" @@ -20063,284 +21317,278 @@ msgstr "le processus %d a échoué pour l'acquisition de %s sur %s après %ld.%0 msgid "page verification failed, calculated checksum %u but expected %u" msgstr "échec de la vérification de la page, somme de contrôle calculé %u, mais attendait %u" -#: storage/page/bufpage.c:216 storage/page/bufpage.c:510 storage/page/bufpage.c:747 storage/page/bufpage.c:880 storage/page/bufpage.c:976 storage/page/bufpage.c:1086 +#: storage/page/bufpage.c:217 storage/page/bufpage.c:739 storage/page/bufpage.c:1066 storage/page/bufpage.c:1201 storage/page/bufpage.c:1307 storage/page/bufpage.c:1419 #, c-format msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" msgstr "pointeurs de page corrompus : le plus bas = %u, le plus haut = %u, spécial = %u" -#: storage/page/bufpage.c:532 +#: storage/page/bufpage.c:768 #, c-format msgid "corrupted line pointer: %u" msgstr "pointeur de ligne corrompu : %u" -#: storage/page/bufpage.c:559 storage/page/bufpage.c:931 +#: storage/page/bufpage.c:795 storage/page/bufpage.c:1259 #, c-format msgid "corrupted item lengths: total %u, available space %u" msgstr "longueurs d'élément corrompus : total %u, espace disponible %u" -#: storage/page/bufpage.c:766 storage/page/bufpage.c:904 storage/page/bufpage.c:992 storage/page/bufpage.c:1102 +#: storage/page/bufpage.c:1085 storage/page/bufpage.c:1226 storage/page/bufpage.c:1323 storage/page/bufpage.c:1435 #, c-format msgid "corrupted line pointer: offset = %u, size = %u" msgstr "pointeur de ligne corrompu : décalage = %u, taille = %u" -#: storage/smgr/md.c:320 storage/smgr/md.c:815 -#, c-format -msgid "could not truncate file \"%s\": %m" -msgstr "n'a pas pu tronquer le fichier « %s » : %m" - -#: storage/smgr/md.c:394 +#: storage/smgr/md.c:434 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "ne peut pas étendre le fichier « %s » de plus de %u blocs" -#: storage/smgr/md.c:409 +#: storage/smgr/md.c:449 #, c-format msgid "could not extend file \"%s\": %m" msgstr "n'a pas pu étendre le fichier « %s » : %m" -#: storage/smgr/md.c:411 storage/smgr/md.c:418 storage/smgr/md.c:698 +#: storage/smgr/md.c:451 storage/smgr/md.c:458 storage/smgr/md.c:746 #, c-format msgid "Check free disk space." msgstr "Vérifiez l'espace disque disponible." -#: storage/smgr/md.c:415 +#: storage/smgr/md.c:455 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "" "n'a pas pu étendre le fichier « %s » : a écrit seulement %d octets sur %d\n" "au bloc %u" -#: storage/smgr/md.c:619 +#: storage/smgr/md.c:667 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "n'a pas pu lire le bloc %u dans le fichier « %s » : %m" -#: storage/smgr/md.c:635 +#: storage/smgr/md.c:683 #, c-format msgid "could not read block %u in file \"%s\": read only %d of %d bytes" msgstr "" "n'a pas pu lire le bloc %u du fichier « %s » : a lu seulement %d octets\n" "sur %d" -#: storage/smgr/md.c:689 +#: storage/smgr/md.c:737 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "n'a pas pu écrire le bloc %u dans le fichier « %s » : %m" -#: storage/smgr/md.c:694 +#: storage/smgr/md.c:742 #, c-format msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "" "n'a pas pu écrire le bloc %u du fichier « %s » : a seulement écrit %d\n" "octets sur %d" -#: storage/smgr/md.c:786 +#: storage/smgr/md.c:836 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "n'a pas pu tronquer le fichier « %s » en %u blocs : il y a seulement %u blocs" -#: storage/smgr/md.c:841 +#: storage/smgr/md.c:891 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "n'a pas pu tronquer le fichier « %s » en %u blocs : %m" -#: storage/smgr/md.c:913 -#, c-format -msgid "could not forward fsync request because request queue is full" -msgstr "n'a pas pu envoyer la requête fsync car la queue des requêtes est pleine" - -#: storage/smgr/md.c:1210 +#: storage/smgr/md.c:1285 #, c-format msgid "could not open file \"%s\" (target block %u): previous segment is only %u blocks" msgstr "n'a pas pu ouvrir le fichier « %s » (bloc cible %u) : le segment précédent ne fait que %u blocs" -#: storage/smgr/md.c:1224 +#: storage/smgr/md.c:1299 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "n'a pas pu ouvrir le fichier « %s » (bloc cible %u) : %m" -#: storage/sync/sync.c:400 -#, c-format -msgid "could not fsync file \"%s\" but retrying: %m" -msgstr "" -"n'a pas pu synchroniser sur disque (fsync) le fichier « %s », nouvelle\n" -"tentative : %m" - -#: tcop/fastpath.c:109 tcop/fastpath.c:461 tcop/fastpath.c:591 -#, c-format -msgid "invalid argument size %d in function call message" -msgstr "taille de l'argument %d invalide dans le message d'appel de la fonction" - -#: tcop/fastpath.c:307 +#: tcop/fastpath.c:227 #, c-format msgid "fastpath function call: \"%s\" (OID %u)" msgstr "appel de fonction fastpath : « %s » (OID %u)" -#: tcop/fastpath.c:389 tcop/postgres.c:1288 tcop/postgres.c:1551 tcop/postgres.c:1918 tcop/postgres.c:2139 +#: tcop/fastpath.c:306 tcop/postgres.c:1298 tcop/postgres.c:1556 tcop/postgres.c:2015 tcop/postgres.c:2252 #, c-format msgid "duration: %s ms" msgstr "durée : %s ms" -#: tcop/fastpath.c:393 +#: tcop/fastpath.c:310 #, c-format msgid "duration: %s ms fastpath function call: \"%s\" (OID %u)" msgstr "durée : %s ms, appel de fonction fastpath : « %s » (OID %u)" -#: tcop/fastpath.c:429 tcop/fastpath.c:556 +#: tcop/fastpath.c:346 #, c-format msgid "function call message contains %d arguments but function requires %d" msgstr "" "le message d'appel de la fonction contient %d arguments mais la fonction en\n" "requiert %d" -#: tcop/fastpath.c:437 +#: tcop/fastpath.c:354 #, c-format msgid "function call message contains %d argument formats but %d arguments" msgstr "" "le message d'appel de la fonction contient %d formats d'argument mais %d\n" " arguments" -#: tcop/fastpath.c:524 tcop/fastpath.c:607 +#: tcop/fastpath.c:378 +#, c-format +msgid "invalid argument size %d in function call message" +msgstr "taille de l'argument %d invalide dans le message d'appel de la fonction" + +#: tcop/fastpath.c:441 #, c-format msgid "incorrect binary data format in function argument %d" msgstr "format des données binaires incorrect dans l'argument de la fonction %d" -#: tcop/postgres.c:359 tcop/postgres.c:395 tcop/postgres.c:422 -#, c-format -msgid "unexpected EOF on client connection" -msgstr "fin de fichier (EOF) inattendue de la connexion du client" - -#: tcop/postgres.c:445 tcop/postgres.c:457 tcop/postgres.c:468 tcop/postgres.c:480 tcop/postgres.c:4460 +#: tcop/postgres.c:446 tcop/postgres.c:4706 #, c-format msgid "invalid frontend message type %d" msgstr "type %d du message de l'interface invalide" -#: tcop/postgres.c:1043 +#: tcop/postgres.c:1015 #, c-format msgid "statement: %s" msgstr "instruction : %s" -#: tcop/postgres.c:1293 +#: tcop/postgres.c:1303 #, c-format msgid "duration: %s ms statement: %s" msgstr "durée : %s ms, instruction : %s" -#: tcop/postgres.c:1343 -#, c-format -msgid "parse %s: %s" -msgstr "analyse %s : %s" - -#: tcop/postgres.c:1400 +#: tcop/postgres.c:1409 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "ne peut pas insérer les commandes multiples dans une instruction préparée" -#: tcop/postgres.c:1556 +#: tcop/postgres.c:1561 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "durée : %s ms, analyse %s : %s" -#: tcop/postgres.c:1601 -#, c-format -msgid "bind %s to %s" -msgstr "lie %s à %s" - -#: tcop/postgres.c:1620 tcop/postgres.c:2431 +#: tcop/postgres.c:1627 tcop/postgres.c:2567 #, c-format msgid "unnamed prepared statement does not exist" msgstr "l'instruction préparée non nommée n'existe pas" -#: tcop/postgres.c:1661 +#: tcop/postgres.c:1668 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "le message bind a %d formats de paramètres mais %d paramètres" -#: tcop/postgres.c:1667 +#: tcop/postgres.c:1674 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "le message bind fournit %d paramètres, mais l'instruction préparée « %s » en requiert %d" -#: tcop/postgres.c:1827 +#: tcop/postgres.c:1893 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "format des données binaires incorrect dans le paramètre bind %d" -#: tcop/postgres.c:1923 +#: tcop/postgres.c:2020 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "durée : %s ms, lien %s%s%s : %s" -#: tcop/postgres.c:1971 tcop/postgres.c:2515 +#: tcop/postgres.c:2070 tcop/postgres.c:2651 #, c-format msgid "portal \"%s\" does not exist" msgstr "le portail « %s » n'existe pas" -#: tcop/postgres.c:2056 +#: tcop/postgres.c:2155 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2058 tcop/postgres.c:2147 +#: tcop/postgres.c:2157 tcop/postgres.c:2260 msgid "execute fetch from" msgstr "exécute fetch à partir de" -#: tcop/postgres.c:2059 tcop/postgres.c:2148 +#: tcop/postgres.c:2158 tcop/postgres.c:2261 msgid "execute" msgstr "exécute" -#: tcop/postgres.c:2144 +#: tcop/postgres.c:2257 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "durée : %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2272 +#: tcop/postgres.c:2403 #, c-format msgid "prepare: %s" msgstr "préparation : %s" -#: tcop/postgres.c:2337 +#: tcop/postgres.c:2428 #, c-format msgid "parameters: %s" msgstr "paramètres : %s" -#: tcop/postgres.c:2356 +#: tcop/postgres.c:2443 #, c-format msgid "abort reason: recovery conflict" msgstr "raison de l'annulation : conflit de restauration" -#: tcop/postgres.c:2372 +#: tcop/postgres.c:2459 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "L'utilisateur conservait des blocs disques en mémoire partagée depuis trop longtemps." -#: tcop/postgres.c:2375 +#: tcop/postgres.c:2462 #, c-format msgid "User was holding a relation lock for too long." msgstr "L'utilisateur conservait un verrou sur une relation depuis trop longtemps." -#: tcop/postgres.c:2378 +#: tcop/postgres.c:2465 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "L'utilisateur utilisait ou pouvait utiliser un tablespace qui doit être supprimé." -#: tcop/postgres.c:2381 +#: tcop/postgres.c:2468 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "" "La requête de l'utilisateur pourrait avoir eu besoin de voir des versions de\n" "lignes qui doivent être supprimées." -#: tcop/postgres.c:2387 +#: tcop/postgres.c:2474 #, c-format msgid "User was connected to a database that must be dropped." msgstr "L'utilisateur était connecté à une base de donnée qui doit être supprimé." -#: tcop/postgres.c:2711 +#: tcop/postgres.c:2513 +#, c-format +msgid "portal \"%s\" parameter $%d = %s" +msgstr "portail « %s » paramètre $%d = %s" + +#: tcop/postgres.c:2516 +#, c-format +msgid "portal \"%s\" parameter $%d" +msgstr "portail « %s » paramètre $%d" + +#: tcop/postgres.c:2522 +#, c-format +msgid "unnamed portal parameter $%d = %s" +msgstr "paramètre de portail non nommé $%d = %s" + +#: tcop/postgres.c:2525 +#, c-format +msgid "unnamed portal parameter $%d" +msgstr "paramètre de portail non nommé $%d" + +#: tcop/postgres.c:2871 +#, fuzzy, c-format +#| msgid "terminating connection due to unexpected postmaster exit" +msgid "terminating connection because of unexpected SIGQUIT signal" +msgstr "arrêt des connexions suite à un arrêt inatendu du postmaster" + +#: tcop/postgres.c:2877 #, c-format msgid "terminating connection because of crash of another server process" msgstr "arrêt de la connexion à cause de l'arrêt brutal d'un autre processus serveur" -#: tcop/postgres.c:2712 +#: tcop/postgres.c:2878 #, c-format msgid "The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory." msgstr "" @@ -20348,89 +21596,96 @@ msgstr "" "courante et de quitter car un autre processus serveur a quitté anormalement\n" "et qu'il existe probablement de la mémoire partagée corrompue." -#: tcop/postgres.c:2716 tcop/postgres.c:3040 +#: tcop/postgres.c:2882 tcop/postgres.c:3237 #, c-format msgid "In a moment you should be able to reconnect to the database and repeat your command." msgstr "" "Dans un moment, vous devriez être capable de vous reconnecter à la base de\n" "données et de relancer votre commande." -#: tcop/postgres.c:2798 +#: tcop/postgres.c:2889 +#, fuzzy, c-format +#| msgid "terminating connection due to administrator command" +msgid "terminating connection due to immediate shutdown command" +msgstr "arrêt des connexions suite à la demande de l'administrateur" + +#: tcop/postgres.c:2975 #, c-format msgid "floating-point exception" msgstr "exception dû à une virgule flottante" -#: tcop/postgres.c:2799 +#: tcop/postgres.c:2976 #, c-format msgid "An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero." msgstr "Une opération invalide sur les virgules flottantes a été signalée. Ceci signifie probablement un résultat en dehors de l'échelle ou une opération invalide telle qu'une division par zéro." -#: tcop/postgres.c:2970 +#: tcop/postgres.c:3141 #, c-format msgid "canceling authentication due to timeout" msgstr "annulation de l'authentification à cause du délai écoulé" -#: tcop/postgres.c:2974 +#: tcop/postgres.c:3145 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "arrêt du processus autovacuum suite à la demande de l'administrateur" -#: tcop/postgres.c:2978 +#: tcop/postgres.c:3149 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "arrêt des processus workers de réplication logique suite à la demande de l'administrateur" -#: tcop/postgres.c:2982 -#, c-format -msgid "logical replication launcher shutting down" -msgstr "arrêt du processus de lancement de la réplication logique" - -#: tcop/postgres.c:2995 tcop/postgres.c:3005 tcop/postgres.c:3038 +#: tcop/postgres.c:3166 tcop/postgres.c:3176 tcop/postgres.c:3235 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "arrêt de la connexion à cause d'un conflit avec la restauration" -#: tcop/postgres.c:3011 +#: tcop/postgres.c:3187 #, c-format msgid "terminating connection due to administrator command" msgstr "arrêt des connexions suite à la demande de l'administrateur" -#: tcop/postgres.c:3021 +#: tcop/postgres.c:3218 #, c-format msgid "connection to client lost" msgstr "connexion au client perdue" -#: tcop/postgres.c:3087 +#: tcop/postgres.c:3284 #, c-format msgid "canceling statement due to lock timeout" msgstr "annulation de la requête à cause du délai écoulé pour l'obtention des verrous" -#: tcop/postgres.c:3094 +#: tcop/postgres.c:3291 #, c-format msgid "canceling statement due to statement timeout" msgstr "annulation de la requête à cause du délai écoulé pour l'exécution de l'instruction" -#: tcop/postgres.c:3101 +#: tcop/postgres.c:3298 #, c-format msgid "canceling autovacuum task" msgstr "annulation de la tâche d'autovacuum" -#: tcop/postgres.c:3124 +#: tcop/postgres.c:3321 #, c-format msgid "canceling statement due to user request" msgstr "annulation de la requête à la demande de l'utilisateur" -#: tcop/postgres.c:3134 +#: tcop/postgres.c:3335 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "arrêt des connexions suite à l'expiration du délai d'inactivité en transaction" -#: tcop/postgres.c:3248 +#: tcop/postgres.c:3346 +#, fuzzy, c-format +#| msgid "terminating connection due to idle-in-transaction timeout" +msgid "terminating connection due to idle-session timeout" +msgstr "arrêt des connexions suite à l'expiration du délai d'inactivité en transaction" + +#: tcop/postgres.c:3465 #, c-format msgid "stack depth limit exceeded" msgstr "dépassement de limite (en profondeur) de la pile" -#: tcop/postgres.c:3249 +#: tcop/postgres.c:3466 #, c-format msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." msgstr "" @@ -20438,112 +21693,112 @@ msgstr "" "être assuré que la limite de profondeur de la pile de la plateforme est\n" "adéquate." -#: tcop/postgres.c:3312 +#: tcop/postgres.c:3529 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "« max_stack_depth » ne doit pas dépasser %ld ko." -#: tcop/postgres.c:3314 +#: tcop/postgres.c:3531 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "" "Augmenter la limite de profondeur de la pile sur votre plateforme via\n" "« ulimit -s » ou l'équivalent local." -#: tcop/postgres.c:3674 +#: tcop/postgres.c:3887 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "argument invalide en ligne de commande pour le processus serveur : %s" -#: tcop/postgres.c:3675 tcop/postgres.c:3681 +#: tcop/postgres.c:3888 tcop/postgres.c:3894 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Essayez « %s --help » pour plus d'informations." -#: tcop/postgres.c:3679 +#: tcop/postgres.c:3892 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s : argument invalide en ligne de commande : %s" -#: tcop/postgres.c:3741 +#: tcop/postgres.c:3955 #, c-format msgid "%s: no database nor user name specified" msgstr "%s : ni base de données ni utilisateur spécifié" -#: tcop/postgres.c:4368 +#: tcop/postgres.c:4608 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "sous-type %d du message CLOSE invalide" -#: tcop/postgres.c:4403 +#: tcop/postgres.c:4643 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "sous-type %d du message DESCRIBE invalide" -#: tcop/postgres.c:4481 +#: tcop/postgres.c:4727 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "appels à la fonction fastpath non supportés dans une connexion de réplication" -#: tcop/postgres.c:4485 +#: tcop/postgres.c:4731 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "protocole étendu de requêtes non supporté dans une connexion de réplication" -#: tcop/postgres.c:4662 +#: tcop/postgres.c:4908 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "" "déconnexion : durée de la session : %d:%02d:%02d.%03d\n" "utilisateur=%s base=%s hôte=%s%s%s" -#: tcop/pquery.c:642 +#: tcop/pquery.c:629 #, c-format msgid "bind message has %d result formats but query has %d columns" msgstr "le message bind a %d formats de résultat mais la requête a %d colonnes" -#: tcop/pquery.c:949 +#: tcop/pquery.c:932 #, c-format msgid "cursor can only scan forward" msgstr "le curseur peut seulement parcourir en avant" -#: tcop/pquery.c:950 +#: tcop/pquery.c:933 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "Déclarez-le avec l'option SCROLL pour activer le parcours inverse." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:245 +#: tcop/utility.c:414 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "ne peut pas exécuter %s dans une transaction en lecture seule" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:263 +#: tcop/utility.c:432 #, c-format msgid "cannot execute %s during a parallel operation" msgstr "ne peut pas exécuté %s lors d'une opération parallèle" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:282 +#: tcop/utility.c:451 #, c-format msgid "cannot execute %s during recovery" msgstr "ne peut pas exécuté %s lors de la restauration" #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:300 +#: tcop/utility.c:469 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "" "ne peut pas exécuter %s à l'intérieur d'une fonction restreinte\n" "pour sécurité" -#: tcop/utility.c:760 +#: tcop/utility.c:913 #, c-format msgid "must be superuser to do CHECKPOINT" msgstr "doit être super-utilisateur pour exécuter un point de vérification (CHECKPOINT)" -#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:624 +#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:615 #, c-format msgid "multiple DictFile parameters" msgstr "multiples paramètres DictFile" @@ -20563,7 +21818,7 @@ msgstr "paramètre Ispell non reconnu : « %s »" msgid "missing AffFile parameter" msgstr "paramètre AffFile manquant" -#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:648 +#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:639 #, c-format msgid "missing DictFile parameter" msgstr "paramètre DictFile manquant" @@ -20613,66 +21868,66 @@ msgstr "fin de ligne ou lexeme inattendu" msgid "unexpected end of line" msgstr "fin de ligne inattendue" -#: tsearch/dict_thesaurus.c:297 +#: tsearch/dict_thesaurus.c:292 #, c-format msgid "too many lexemes in thesaurus entry" msgstr "trop de lexèmes dans l'entre du thésaurus" -#: tsearch/dict_thesaurus.c:421 +#: tsearch/dict_thesaurus.c:416 #, c-format msgid "thesaurus sample word \"%s\" isn't recognized by subdictionary (rule %d)" msgstr "" "le mot d'exemple « %s » du thésaurus n'est pas reconnu par le\n" "sous-dictionnaire (règle %d)" -#: tsearch/dict_thesaurus.c:427 +#: tsearch/dict_thesaurus.c:422 #, c-format msgid "thesaurus sample word \"%s\" is a stop word (rule %d)" msgstr "le mot d'exemple « %s » du thésaurus est un terme courant (règle %d)" -#: tsearch/dict_thesaurus.c:430 +#: tsearch/dict_thesaurus.c:425 #, c-format msgid "Use \"?\" to represent a stop word within a sample phrase." msgstr "Utilisez « ? » pour représenter un terme courant dans une phrase." -#: tsearch/dict_thesaurus.c:576 +#: tsearch/dict_thesaurus.c:567 #, c-format msgid "thesaurus substitute word \"%s\" is a stop word (rule %d)" msgstr "le mot substitut « %s » du thésaurus est un terme courant (règle %d)" -#: tsearch/dict_thesaurus.c:583 +#: tsearch/dict_thesaurus.c:574 #, c-format msgid "thesaurus substitute word \"%s\" isn't recognized by subdictionary (rule %d)" msgstr "" "le mot substitut « %s » du thésaurus n'est pas reconnu par le\n" "sous-dictionnaire (règle %d)" -#: tsearch/dict_thesaurus.c:595 +#: tsearch/dict_thesaurus.c:586 #, c-format msgid "thesaurus substitute phrase is empty (rule %d)" msgstr "la phrase substitut du thésaurus est vide (règle %d)" -#: tsearch/dict_thesaurus.c:633 +#: tsearch/dict_thesaurus.c:624 #, c-format msgid "multiple Dictionary parameters" msgstr "multiples paramètres Dictionary" -#: tsearch/dict_thesaurus.c:640 +#: tsearch/dict_thesaurus.c:631 #, c-format msgid "unrecognized Thesaurus parameter: \"%s\"" msgstr "paramètre Thesaurus non reconnu : « %s »" -#: tsearch/dict_thesaurus.c:652 +#: tsearch/dict_thesaurus.c:643 #, c-format msgid "missing Dictionary parameter" msgstr "paramètre Dictionary manquant" -#: tsearch/spell.c:380 tsearch/spell.c:397 tsearch/spell.c:406 tsearch/spell.c:1034 +#: tsearch/spell.c:380 tsearch/spell.c:397 tsearch/spell.c:406 tsearch/spell.c:1062 #, c-format msgid "invalid affix flag \"%s\"" msgstr "drapeau d'affixe invalide « %s »" -#: tsearch/spell.c:384 tsearch/spell.c:1038 +#: tsearch/spell.c:384 tsearch/spell.c:1066 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "le drapeau d'affixe « %s » est en dehors des limites" @@ -20687,67 +21942,67 @@ msgstr "données invalides dans le drapeau d'affixe « %s »" msgid "invalid affix flag \"%s\" with \"long\" flag value" msgstr "drapeau d'affixe invalide « %s » avec la valeur de drapeau « long »" -#: tsearch/spell.c:522 +#: tsearch/spell.c:524 #, c-format msgid "could not open dictionary file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier dictionnaire « %s » : %m" -#: tsearch/spell.c:740 utils/adt/regexp.c:208 +#: tsearch/spell.c:763 utils/adt/regexp.c:208 #, c-format msgid "invalid regular expression: %s" msgstr "expression rationnelle invalide : %s" -#: tsearch/spell.c:1161 tsearch/spell.c:1726 +#: tsearch/spell.c:1189 tsearch/spell.c:1201 tsearch/spell.c:1760 tsearch/spell.c:1765 tsearch/spell.c:1770 #, c-format msgid "invalid affix alias \"%s\"" msgstr "alias d'affixe invalide « %s »" -#: tsearch/spell.c:1211 tsearch/spell.c:1282 tsearch/spell.c:1431 +#: tsearch/spell.c:1242 tsearch/spell.c:1313 tsearch/spell.c:1462 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier affixe « %s » : %m" -#: tsearch/spell.c:1265 +#: tsearch/spell.c:1296 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "le dictionnaire Ispell supporte seulement les valeurs de drapeau « default », « long »et « num »" -#: tsearch/spell.c:1309 +#: tsearch/spell.c:1340 #, c-format msgid "invalid number of flag vector aliases" msgstr "nombre d'alias de vecteur de drapeau invalide" -#: tsearch/spell.c:1332 +#: tsearch/spell.c:1363 #, c-format msgid "number of aliases exceeds specified number %d" msgstr "le nombre d'alias excède le nombre %d spécifié" -#: tsearch/spell.c:1547 +#: tsearch/spell.c:1578 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "le fichier d'affixes contient des commandes ancien et nouveau style" -#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:271 utils/adt/tsvector_op.c:1132 +#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "la chaîne est trop longue (%d octets, max %d octets)" -#: tsearch/ts_locale.c:185 +#: tsearch/ts_locale.c:227 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "ligne %d du fichier de configuration « %s » : « %s »" -#: tsearch/ts_locale.c:302 +#: tsearch/ts_locale.c:307 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "échec de l'encodage de wchar_t vers l'encodage du serveur : %m" -#: tsearch/ts_parse.c:390 tsearch/ts_parse.c:397 tsearch/ts_parse.c:566 tsearch/ts_parse.c:573 +#: tsearch/ts_parse.c:386 tsearch/ts_parse.c:393 tsearch/ts_parse.c:562 tsearch/ts_parse.c:569 #, c-format msgid "word is too long to be indexed" msgstr "le mot est trop long pour être indexé" -#: tsearch/ts_parse.c:391 tsearch/ts_parse.c:398 tsearch/ts_parse.c:567 tsearch/ts_parse.c:574 +#: tsearch/ts_parse.c:387 tsearch/ts_parse.c:394 tsearch/ts_parse.c:563 tsearch/ts_parse.c:570 #, c-format msgid "Words longer than %d characters are ignored." msgstr "Les mots de plus de %d caractères sont ignorés." @@ -20762,152 +22017,152 @@ msgstr "nom du fichier de configuration de la recherche plein texte invalide : msgid "could not open stop-word file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier des termes courants « %s » : %m" -#: tsearch/wparser.c:322 tsearch/wparser.c:410 tsearch/wparser.c:487 +#: tsearch/wparser.c:313 tsearch/wparser.c:401 tsearch/wparser.c:478 #, c-format msgid "text search parser does not support headline creation" msgstr "l'analyseur de recherche plein texte ne supporte pas headline" -#: tsearch/wparser_def.c:2486 +#: tsearch/wparser_def.c:2578 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "paramètre headline non reconnu : « %s »" -#: tsearch/wparser_def.c:2495 +#: tsearch/wparser_def.c:2597 #, c-format msgid "MinWords should be less than MaxWords" msgstr "MinWords doit avoir une valeur plus petite que celle de MaxWords" -#: tsearch/wparser_def.c:2499 +#: tsearch/wparser_def.c:2601 #, c-format msgid "MinWords should be positive" msgstr "MinWords doit être positif" -#: tsearch/wparser_def.c:2503 +#: tsearch/wparser_def.c:2605 #, c-format msgid "ShortWord should be >= 0" msgstr "ShortWord devrait être positif ou nul" -#: tsearch/wparser_def.c:2507 +#: tsearch/wparser_def.c:2609 #, c-format msgid "MaxFragments should be >= 0" msgstr "MaxFragments devrait être positif ou nul" -#: utils/adt/acl.c:171 utils/adt/name.c:93 +#: utils/adt/acl.c:165 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "identifiant trop long" -#: utils/adt/acl.c:172 utils/adt/name.c:94 +#: utils/adt/acl.c:166 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "L'identifiant doit faire moins de %d caractères." -#: utils/adt/acl.c:258 +#: utils/adt/acl.c:249 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "mot clé non reconnu : « %s »" -#: utils/adt/acl.c:259 +#: utils/adt/acl.c:250 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "le mot clé ACL doit être soit « group » soit « user »." -#: utils/adt/acl.c:264 +#: utils/adt/acl.c:255 #, c-format msgid "missing name" msgstr "nom manquant" -#: utils/adt/acl.c:265 +#: utils/adt/acl.c:256 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "Un nom doit suivre le mot clé « group » ou « user »." -#: utils/adt/acl.c:271 +#: utils/adt/acl.c:262 #, c-format msgid "missing \"=\" sign" msgstr "signe « = » manquant" -#: utils/adt/acl.c:324 +#: utils/adt/acl.c:315 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "mode caractère invalide : doit faire partie de « %s »" -#: utils/adt/acl.c:346 +#: utils/adt/acl.c:337 #, c-format msgid "a name must follow the \"/\" sign" msgstr "un nom doit suivre le signe « / »" -#: utils/adt/acl.c:354 +#: utils/adt/acl.c:345 #, c-format msgid "defaulting grantor to user ID %u" msgstr "par défaut, le « donneur de droits » devient l'utilisateur d'identifiant %u" -#: utils/adt/acl.c:545 +#: utils/adt/acl.c:531 #, c-format msgid "ACL array contains wrong data type" msgstr "le tableau d'ACL contient un type de données incorrect" -#: utils/adt/acl.c:549 +#: utils/adt/acl.c:535 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "les tableaux d'ACL ne doivent avoir qu'une seule dimension" -#: utils/adt/acl.c:553 +#: utils/adt/acl.c:539 #, c-format msgid "ACL arrays must not contain null values" msgstr "les tableaux d'ACL ne doivent pas contenir de valeurs NULL" -#: utils/adt/acl.c:577 +#: utils/adt/acl.c:563 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "données superflues à la fin de la spécification de l'ACL" -#: utils/adt/acl.c:1212 +#: utils/adt/acl.c:1198 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "les options grant ne peuvent pas être rendues à votre propre donateur" -#: utils/adt/acl.c:1273 +#: utils/adt/acl.c:1259 #, c-format msgid "dependent privileges exist" msgstr "des privilèges dépendants existent" -#: utils/adt/acl.c:1274 +#: utils/adt/acl.c:1260 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Utilisez CASCADE pour les révoquer aussi." -#: utils/adt/acl.c:1536 +#: utils/adt/acl.c:1514 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert n'est plus supporté" -#: utils/adt/acl.c:1546 +#: utils/adt/acl.c:1524 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove n'est plus supporté" -#: utils/adt/acl.c:1632 utils/adt/acl.c:1686 +#: utils/adt/acl.c:1610 utils/adt/acl.c:1664 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "type de droit non reconnu : « %s »" -#: utils/adt/acl.c:3486 utils/adt/regproc.c:102 utils/adt/regproc.c:277 +#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:276 #, c-format msgid "function \"%s\" does not exist" msgstr "la fonction « %s » n'existe pas" -#: utils/adt/acl.c:4958 +#: utils/adt/acl.c:4898 #, c-format msgid "must be member of role \"%s\"" msgstr "doit être un membre du rôle « %s »" -#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:932 utils/adt/arrayfuncs.c:1532 utils/adt/arrayfuncs.c:3235 utils/adt/arrayfuncs.c:3375 utils/adt/arrayfuncs.c:5909 utils/adt/arrayfuncs.c:6250 utils/adt/arrayutils.c:93 utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 +#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:933 utils/adt/arrayfuncs.c:1554 utils/adt/arrayfuncs.c:3262 utils/adt/arrayfuncs.c:3402 utils/adt/arrayfuncs.c:5937 utils/adt/arrayfuncs.c:6278 utils/adt/arrayutils.c:93 utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 #, c-format msgid "array size exceeds the maximum allowed (%d)" msgstr "la taille du tableau dépasse le maximum permis (%d)" -#: utils/adt/array_userfuncs.c:80 utils/adt/array_userfuncs.c:466 utils/adt/array_userfuncs.c:546 utils/adt/json.c:1829 utils/adt/json.c:1924 utils/adt/json.c:1962 utils/adt/jsonb.c:1094 utils/adt/jsonb.c:1123 utils/adt/jsonb.c:1517 utils/adt/jsonb.c:1681 utils/adt/jsonb.c:1691 +#: utils/adt/array_userfuncs.c:80 utils/adt/array_userfuncs.c:466 utils/adt/array_userfuncs.c:546 utils/adt/json.c:645 utils/adt/json.c:740 utils/adt/json.c:778 utils/adt/jsonb.c:1115 utils/adt/jsonb.c:1144 utils/adt/jsonb.c:1538 utils/adt/jsonb.c:1702 utils/adt/jsonb.c:1712 #, c-format msgid "could not determine input data type" msgstr "n'a pas pu déterminer le type de données date en entrée" @@ -20917,8 +22172,8 @@ msgstr "n'a pas pu déterminer le type de données date en entrée" msgid "input data type is not an array" msgstr "le type de données en entrée n'est pas un tableau" -#: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 utils/adt/arrayfuncs.c:1335 utils/adt/float.c:1220 utils/adt/float.c:1308 utils/adt/float.c:3883 utils/adt/float.c:3897 utils/adt/int.c:759 utils/adt/int.c:781 utils/adt/int.c:795 utils/adt/int.c:809 utils/adt/int.c:840 utils/adt/int.c:861 utils/adt/int.c:978 utils/adt/int.c:992 utils/adt/int.c:1006 utils/adt/int.c:1039 utils/adt/int.c:1053 utils/adt/int.c:1067 -#: utils/adt/int.c:1098 utils/adt/int.c:1180 utils/adt/int8.c:1167 utils/adt/numeric.c:1565 utils/adt/numeric.c:3240 utils/adt/varbit.c:1188 utils/adt/varbit.c:1574 utils/adt/varlena.c:1075 utils/adt/varlena.c:3337 +#: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 utils/adt/arrayfuncs.c:1357 utils/adt/float.c:1233 utils/adt/float.c:1307 utils/adt/float.c:4052 utils/adt/float.c:4066 utils/adt/int.c:757 utils/adt/int.c:779 utils/adt/int.c:793 utils/adt/int.c:807 utils/adt/int.c:838 utils/adt/int.c:859 utils/adt/int.c:976 utils/adt/int.c:990 utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 utils/adt/int.c:1065 utils/adt/int.c:1096 utils/adt/int.c:1178 utils/adt/int.c:1242 utils/adt/int.c:1310 utils/adt/int.c:1316 utils/adt/int8.c:1299 utils/adt/numeric.c:1776 utils/adt/numeric.c:4207 utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1121 +#: utils/adt/varlena.c:3433 #, c-format msgid "integer out of range" msgstr "entier en dehors des limites" @@ -20963,224 +22218,238 @@ msgstr "la recherche d'éléments dans des tableaux multidimensionnels n'est pas msgid "initial position must not be null" msgstr "la position initiale ne doit pas être NULL" -#: utils/adt/arrayfuncs.c:269 utils/adt/arrayfuncs.c:283 utils/adt/arrayfuncs.c:294 utils/adt/arrayfuncs.c:316 utils/adt/arrayfuncs.c:331 utils/adt/arrayfuncs.c:345 utils/adt/arrayfuncs.c:351 utils/adt/arrayfuncs.c:358 utils/adt/arrayfuncs.c:489 utils/adt/arrayfuncs.c:505 utils/adt/arrayfuncs.c:516 utils/adt/arrayfuncs.c:531 utils/adt/arrayfuncs.c:552 utils/adt/arrayfuncs.c:582 utils/adt/arrayfuncs.c:589 utils/adt/arrayfuncs.c:597 -#: utils/adt/arrayfuncs.c:631 utils/adt/arrayfuncs.c:654 utils/adt/arrayfuncs.c:674 utils/adt/arrayfuncs.c:786 utils/adt/arrayfuncs.c:795 utils/adt/arrayfuncs.c:825 utils/adt/arrayfuncs.c:840 utils/adt/arrayfuncs.c:893 +#: utils/adt/arrayfuncs.c:270 utils/adt/arrayfuncs.c:284 utils/adt/arrayfuncs.c:295 utils/adt/arrayfuncs.c:317 utils/adt/arrayfuncs.c:332 utils/adt/arrayfuncs.c:346 utils/adt/arrayfuncs.c:352 utils/adt/arrayfuncs.c:359 utils/adt/arrayfuncs.c:490 utils/adt/arrayfuncs.c:506 utils/adt/arrayfuncs.c:517 utils/adt/arrayfuncs.c:532 utils/adt/arrayfuncs.c:553 utils/adt/arrayfuncs.c:583 utils/adt/arrayfuncs.c:590 utils/adt/arrayfuncs.c:598 utils/adt/arrayfuncs.c:632 utils/adt/arrayfuncs.c:655 utils/adt/arrayfuncs.c:675 utils/adt/arrayfuncs.c:787 utils/adt/arrayfuncs.c:796 utils/adt/arrayfuncs.c:826 utils/adt/arrayfuncs.c:841 utils/adt/arrayfuncs.c:894 #, c-format msgid "malformed array literal: \"%s\"" msgstr "tableau litéral mal formé : « %s »" -#: utils/adt/arrayfuncs.c:270 +#: utils/adt/arrayfuncs.c:271 #, c-format msgid "\"[\" must introduce explicitly-specified array dimensions." msgstr "« [ » doit introduire des dimensions explicites de tableau." -#: utils/adt/arrayfuncs.c:284 +#: utils/adt/arrayfuncs.c:285 #, c-format msgid "Missing array dimension value." msgstr "Valeur manquante de la dimension du tableau." -#: utils/adt/arrayfuncs.c:295 utils/adt/arrayfuncs.c:332 +#: utils/adt/arrayfuncs.c:296 utils/adt/arrayfuncs.c:333 #, c-format msgid "Missing \"%s\" after array dimensions." msgstr "« %s » manquant après les dimensions du tableau." -#: utils/adt/arrayfuncs.c:304 utils/adt/arrayfuncs.c:2883 utils/adt/arrayfuncs.c:2915 utils/adt/arrayfuncs.c:2930 +#: utils/adt/arrayfuncs.c:305 utils/adt/arrayfuncs.c:2910 utils/adt/arrayfuncs.c:2942 utils/adt/arrayfuncs.c:2957 #, c-format msgid "upper bound cannot be less than lower bound" msgstr "la limite supérieure ne peut pas être plus petite que la limite inférieure" -#: utils/adt/arrayfuncs.c:317 +#: utils/adt/arrayfuncs.c:318 #, c-format msgid "Array value must start with \"{\" or dimension information." msgstr "La valeur du tableau doit commencer par « { » ou par l'information de la dimension." -#: utils/adt/arrayfuncs.c:346 +#: utils/adt/arrayfuncs.c:347 #, c-format msgid "Array contents must start with \"{\"." msgstr "Le contenu du tableau doit commencer par « { »." -#: utils/adt/arrayfuncs.c:352 utils/adt/arrayfuncs.c:359 +#: utils/adt/arrayfuncs.c:353 utils/adt/arrayfuncs.c:360 #, c-format msgid "Specified array dimensions do not match array contents." msgstr "Les dimensions spécifiées du tableau ne correspondent pas au contenu du tableau." -#: utils/adt/arrayfuncs.c:490 utils/adt/arrayfuncs.c:517 utils/adt/rangetypes.c:2181 utils/adt/rangetypes.c:2189 utils/adt/rowtypes.c:210 utils/adt/rowtypes.c:218 +#: utils/adt/arrayfuncs.c:491 utils/adt/arrayfuncs.c:518 utils/adt/multirangetypes.c:162 utils/adt/rangetypes.c:2310 utils/adt/rangetypes.c:2318 utils/adt/rowtypes.c:211 utils/adt/rowtypes.c:219 #, c-format msgid "Unexpected end of input." msgstr "Fin de l'entrée inattendue." -#: utils/adt/arrayfuncs.c:506 utils/adt/arrayfuncs.c:553 utils/adt/arrayfuncs.c:583 utils/adt/arrayfuncs.c:632 +#: utils/adt/arrayfuncs.c:507 utils/adt/arrayfuncs.c:554 utils/adt/arrayfuncs.c:584 utils/adt/arrayfuncs.c:633 #, c-format msgid "Unexpected \"%c\" character." msgstr "Caractère « %c » inattendu." -#: utils/adt/arrayfuncs.c:532 utils/adt/arrayfuncs.c:655 +#: utils/adt/arrayfuncs.c:533 utils/adt/arrayfuncs.c:656 #, c-format msgid "Unexpected array element." msgstr "Élément de tableau inattendu." -#: utils/adt/arrayfuncs.c:590 +#: utils/adt/arrayfuncs.c:591 #, c-format msgid "Unmatched \"%c\" character." msgstr "Caractère « %c » sans correspondance." -#: utils/adt/arrayfuncs.c:598 utils/adt/jsonfuncs.c:2397 +#: utils/adt/arrayfuncs.c:599 utils/adt/jsonfuncs.c:2593 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "Les tableaux multidimensionnels doivent avoir des sous-tableaux avec les dimensions correspondantes" -#: utils/adt/arrayfuncs.c:675 +#: utils/adt/arrayfuncs.c:676 #, c-format msgid "Junk after closing right brace." msgstr "Problème après la parenthèse droite fermante." -#: utils/adt/arrayfuncs.c:1297 utils/adt/arrayfuncs.c:3343 utils/adt/arrayfuncs.c:5815 +#: utils/adt/arrayfuncs.c:1298 utils/adt/arrayfuncs.c:3370 utils/adt/arrayfuncs.c:5843 #, c-format msgid "invalid number of dimensions: %d" msgstr "nombre de dimensions invalides : %d" -#: utils/adt/arrayfuncs.c:1308 +#: utils/adt/arrayfuncs.c:1309 #, c-format msgid "invalid array flags" msgstr "drapeaux de tableau invalides" -#: utils/adt/arrayfuncs.c:1316 +#: utils/adt/arrayfuncs.c:1331 #, c-format -msgid "wrong element type" -msgstr "mauvais type d'élément" +msgid "binary data has array element type %u (%s) instead of expected %u (%s)" +msgstr "" -#: utils/adt/arrayfuncs.c:1366 utils/adt/rangetypes.c:335 utils/cache/lsyscache.c:2725 +#: utils/adt/arrayfuncs.c:1388 utils/adt/multirangetypes.c:443 utils/adt/rangetypes.c:333 utils/cache/lsyscache.c:2905 #, c-format msgid "no binary input function available for type %s" msgstr "aucune fonction d'entrée binaire disponible pour le type %s" -#: utils/adt/arrayfuncs.c:1506 +#: utils/adt/arrayfuncs.c:1528 #, c-format msgid "improper binary format in array element %d" msgstr "format binaire mal conçu dans l'élément du tableau %d" -#: utils/adt/arrayfuncs.c:1587 utils/adt/rangetypes.c:340 utils/cache/lsyscache.c:2758 +#: utils/adt/arrayfuncs.c:1609 utils/adt/multirangetypes.c:448 utils/adt/rangetypes.c:338 utils/cache/lsyscache.c:2938 #, c-format msgid "no binary output function available for type %s" msgstr "aucune fonction de sortie binaire disponible pour le type %s" -#: utils/adt/arrayfuncs.c:2065 +#: utils/adt/arrayfuncs.c:2088 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "les morceaux des tableaux à longueur fixe ne sont pas implémentés" -#: utils/adt/arrayfuncs.c:2243 utils/adt/arrayfuncs.c:2265 utils/adt/arrayfuncs.c:2314 utils/adt/arrayfuncs.c:2550 utils/adt/arrayfuncs.c:2861 utils/adt/arrayfuncs.c:5801 utils/adt/arrayfuncs.c:5827 utils/adt/arrayfuncs.c:5838 utils/adt/json.c:2325 utils/adt/json.c:2400 utils/adt/jsonb.c:1295 utils/adt/jsonb.c:1381 utils/adt/jsonfuncs.c:4301 utils/adt/jsonfuncs.c:4452 utils/adt/jsonfuncs.c:4497 utils/adt/jsonfuncs.c:4544 +#: utils/adt/arrayfuncs.c:2266 utils/adt/arrayfuncs.c:2288 utils/adt/arrayfuncs.c:2337 utils/adt/arrayfuncs.c:2573 utils/adt/arrayfuncs.c:2888 utils/adt/arrayfuncs.c:5829 utils/adt/arrayfuncs.c:5855 utils/adt/arrayfuncs.c:5866 utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4427 utils/adt/jsonfuncs.c:4580 utils/adt/jsonfuncs.c:4692 utils/adt/jsonfuncs.c:4741 #, c-format msgid "wrong number of array subscripts" msgstr "mauvais nombre d'indices du tableau" -#: utils/adt/arrayfuncs.c:2248 utils/adt/arrayfuncs.c:2356 utils/adt/arrayfuncs.c:2614 utils/adt/arrayfuncs.c:2920 +#: utils/adt/arrayfuncs.c:2271 utils/adt/arrayfuncs.c:2379 utils/adt/arrayfuncs.c:2640 utils/adt/arrayfuncs.c:2947 #, c-format msgid "array subscript out of range" msgstr "indice du tableau en dehors de l'intervalle" -#: utils/adt/arrayfuncs.c:2253 +#: utils/adt/arrayfuncs.c:2276 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "ne peut pas affecter une valeur NULL à un élément d'un tableau à longueur fixe" -#: utils/adt/arrayfuncs.c:2808 +#: utils/adt/arrayfuncs.c:2835 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "" "les mises à jour de morceaux des tableaux à longueur fixe ne sont pas\n" "implémentées" -#: utils/adt/arrayfuncs.c:2839 +#: utils/adt/arrayfuncs.c:2866 #, c-format msgid "array slice subscript must provide both boundaries" msgstr "la tranche d'indice de tableau doit fournir les deux limites" -#: utils/adt/arrayfuncs.c:2840 +#: utils/adt/arrayfuncs.c:2867 #, c-format msgid "When assigning to a slice of an empty array value, slice boundaries must be fully specified." msgstr "Les limites de tranches doivent être entièrement spécifiées lors de l'assignation d'une valeur d'un tableau vide à une tranche." -#: utils/adt/arrayfuncs.c:2851 utils/adt/arrayfuncs.c:2946 +#: utils/adt/arrayfuncs.c:2878 utils/adt/arrayfuncs.c:2973 #, c-format msgid "source array too small" msgstr "tableau source trop petit" -#: utils/adt/arrayfuncs.c:3499 +#: utils/adt/arrayfuncs.c:3526 #, c-format msgid "null array element not allowed in this context" msgstr "élément NULL de tableau interdit dans ce contexte" -#: utils/adt/arrayfuncs.c:3601 utils/adt/arrayfuncs.c:3772 utils/adt/arrayfuncs.c:4123 +#: utils/adt/arrayfuncs.c:3628 utils/adt/arrayfuncs.c:3799 utils/adt/arrayfuncs.c:4155 #, c-format msgid "cannot compare arrays of different element types" msgstr "ne peut pas comparer des tableaux ayant des types d'éléments différents" -#: utils/adt/arrayfuncs.c:3948 utils/adt/rangetypes.c:1254 utils/adt/rangetypes.c:1318 +#: utils/adt/arrayfuncs.c:3977 utils/adt/multirangetypes.c:2670 utils/adt/multirangetypes.c:2742 utils/adt/rangetypes.c:1343 utils/adt/rangetypes.c:1407 utils/adt/rowtypes.c:1858 #, c-format msgid "could not identify a hash function for type %s" msgstr "n'a pas pu identifier une fonction de hachage pour le type %s" -#: utils/adt/arrayfuncs.c:4040 +#: utils/adt/arrayfuncs.c:4070 utils/adt/rowtypes.c:1979 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "n'a pas pu identifier une fonction de hachage étendue pour le type %s" -#: utils/adt/arrayfuncs.c:5215 +#: utils/adt/arrayfuncs.c:5247 #, c-format msgid "data type %s is not an array type" msgstr "le type de données %s n'est pas un type tableau" -#: utils/adt/arrayfuncs.c:5270 +#: utils/adt/arrayfuncs.c:5302 #, c-format msgid "cannot accumulate null arrays" msgstr "ne peut pas accumuler des tableaux NULL" -#: utils/adt/arrayfuncs.c:5298 +#: utils/adt/arrayfuncs.c:5330 #, c-format msgid "cannot accumulate empty arrays" msgstr "ne peut pas concaténer des tableaux vides" -#: utils/adt/arrayfuncs.c:5327 utils/adt/arrayfuncs.c:5333 +#: utils/adt/arrayfuncs.c:5357 utils/adt/arrayfuncs.c:5363 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "ne peut pas accumuler des tableaux de dimensions différentes" -#: utils/adt/arrayfuncs.c:5699 utils/adt/arrayfuncs.c:5739 +#: utils/adt/arrayfuncs.c:5727 utils/adt/arrayfuncs.c:5767 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "la dimension ou la limite basse du tableau ne peut pas être NULL" -#: utils/adt/arrayfuncs.c:5802 utils/adt/arrayfuncs.c:5828 +#: utils/adt/arrayfuncs.c:5830 utils/adt/arrayfuncs.c:5856 #, c-format msgid "Dimension array must be one dimensional." msgstr "Le tableau doit avoir une seule dimension." -#: utils/adt/arrayfuncs.c:5807 utils/adt/arrayfuncs.c:5833 +#: utils/adt/arrayfuncs.c:5835 utils/adt/arrayfuncs.c:5861 #, c-format msgid "dimension values cannot be null" msgstr "les valeurs de dimension ne peuvent pas être NULL" -#: utils/adt/arrayfuncs.c:5839 +#: utils/adt/arrayfuncs.c:5867 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "La limite basse du tableau a une taille différentes des dimensions du tableau." -#: utils/adt/arrayfuncs.c:6115 +#: utils/adt/arrayfuncs.c:6143 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "la suppression d'éléments de tableaux multidimensionnels n'est pas supportée" -#: utils/adt/arrayfuncs.c:6392 +#: utils/adt/arrayfuncs.c:6420 #, c-format msgid "thresholds must be one-dimensional array" msgstr "les limites doivent être un tableau à une dimension" -#: utils/adt/arrayfuncs.c:6397 +#: utils/adt/arrayfuncs.c:6425 #, c-format msgid "thresholds array must not contain NULLs" msgstr "le tableau de limites ne doit pas contenir de valeurs NULL" +#: utils/adt/arrayfuncs.c:6658 +#, c-format +msgid "number of elements to trim must be between 0 and %d" +msgstr "le nombre d'éléments à couper doit être compris entre 0 et %d" + +#: utils/adt/arraysubs.c:93 utils/adt/arraysubs.c:130 +#, c-format +msgid "array subscript must have type integer" +msgstr "l'indice d'un tableau doit être de type entier" + +#: utils/adt/arraysubs.c:198 utils/adt/arraysubs.c:217 +#, c-format +msgid "array subscript in assignment must not be null" +msgstr "l'indice du tableau dans l'affectation ne doit pas être NULL" + #: utils/adt/arrayutils.c:209 #, c-format msgid "typmod array must be type cstring[]" @@ -21202,20 +22471,18 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "la conversion de l'encodage de %s vers l'ASCII n'est pas supportée" #. translator: first %s is inet or cidr -#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3773 utils/adt/float.c:168 utils/adt/float.c:252 utils/adt/float.c:276 utils/adt/float.c:390 utils/adt/float.c:474 utils/adt/float.c:501 utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 utils/adt/geo_ops.c:274 utils/adt/geo_ops.c:316 utils/adt/geo_ops.c:326 utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1378 utils/adt/geo_ops.c:1413 utils/adt/geo_ops.c:1421 -#: utils/adt/geo_ops.c:3360 utils/adt/geo_ops.c:4526 utils/adt/geo_ops.c:4541 utils/adt/geo_ops.c:4548 utils/adt/int8.c:128 utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 utils/adt/mac8.c:221 utils/adt/network.c:74 utils/adt/numeric.c:607 utils/adt/numeric.c:634 utils/adt/numeric.c:5806 utils/adt/numeric.c:5830 utils/adt/numeric.c:5854 utils/adt/numeric.c:6684 -#: utils/adt/numeric.c:6710 utils/adt/numutils.c:52 utils/adt/numutils.c:62 utils/adt/numutils.c:106 utils/adt/numutils.c:182 utils/adt/numutils.c:258 utils/adt/oid.c:44 utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 utils/adt/pg_lsn.c:70 utils/adt/tid.c:73 utils/adt/tid.c:81 utils/adt/tid.c:89 utils/adt/timestamp.c:479 utils/adt/txid.c:410 utils/adt/uuid.c:136 +#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3802 utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:283 utils/adt/float.c:400 utils/adt/float.c:485 utils/adt/float.c:501 utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 utils/adt/geo_ops.c:274 utils/adt/geo_ops.c:316 utils/adt/geo_ops.c:326 utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1389 utils/adt/geo_ops.c:1424 utils/adt/geo_ops.c:1432 utils/adt/geo_ops.c:3488 utils/adt/geo_ops.c:4657 utils/adt/geo_ops.c:4672 utils/adt/geo_ops.c:4679 utils/adt/int8.c:126 utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 utils/adt/mac8.c:166 utils/adt/mac8.c:184 +#: utils/adt/mac8.c:202 utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:702 utils/adt/numeric.c:721 utils/adt/numeric.c:6861 utils/adt/numeric.c:6885 utils/adt/numeric.c:6909 utils/adt/numeric.c:7878 utils/adt/numutils.c:116 utils/adt/numutils.c:126 utils/adt/numutils.c:170 utils/adt/numutils.c:246 utils/adt/numutils.c:322 utils/adt/oid.c:44 utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 utils/adt/pg_lsn.c:74 utils/adt/tid.c:76 utils/adt/tid.c:84 utils/adt/tid.c:92 utils/adt/timestamp.c:496 utils/adt/uuid.c:136 utils/adt/xid8funcs.c:346 #, c-format msgid "invalid input syntax for type %s: \"%s\"" msgstr "syntaxe en entrée invalide pour le type %s : « %s »" -#: utils/adt/cash.c:215 utils/adt/cash.c:240 utils/adt/cash.c:250 utils/adt/cash.c:290 utils/adt/int8.c:120 utils/adt/numutils.c:76 utils/adt/numutils.c:83 utils/adt/numutils.c:176 utils/adt/numutils.c:252 utils/adt/oid.c:70 utils/adt/oid.c:109 +#: utils/adt/cash.c:215 utils/adt/cash.c:240 utils/adt/cash.c:250 utils/adt/cash.c:290 utils/adt/int8.c:118 utils/adt/numutils.c:140 utils/adt/numutils.c:147 utils/adt/numutils.c:240 utils/adt/numutils.c:316 utils/adt/oid.c:70 utils/adt/oid.c:109 #, c-format msgid "value \"%s\" is out of range for type %s" msgstr "la valeur « %s » est en dehors des limites pour le type %s" -#: utils/adt/cash.c:652 utils/adt/cash.c:702 utils/adt/cash.c:753 utils/adt/cash.c:802 utils/adt/cash.c:854 utils/adt/cash.c:904 utils/adt/int.c:824 utils/adt/int.c:940 utils/adt/int.c:1020 utils/adt/int.c:1082 utils/adt/int.c:1120 utils/adt/int.c:1148 utils/adt/int8.c:595 utils/adt/int8.c:653 utils/adt/int8.c:853 utils/adt/int8.c:933 utils/adt/int8.c:995 utils/adt/int8.c:1075 utils/adt/numeric.c:7248 utils/adt/numeric.c:7537 -#: utils/adt/numeric.c:8549 utils/adt/timestamp.c:3257 +#: utils/adt/cash.c:652 utils/adt/cash.c:702 utils/adt/cash.c:753 utils/adt/cash.c:802 utils/adt/cash.c:854 utils/adt/cash.c:904 utils/adt/float.c:104 utils/adt/int.c:822 utils/adt/int.c:938 utils/adt/int.c:1018 utils/adt/int.c:1080 utils/adt/int.c:1118 utils/adt/int.c:1146 utils/adt/int8.c:600 utils/adt/int8.c:658 utils/adt/int8.c:985 utils/adt/int8.c:1065 utils/adt/int8.c:1127 utils/adt/int8.c:1207 utils/adt/numeric.c:3032 utils/adt/numeric.c:3055 utils/adt/numeric.c:3140 utils/adt/numeric.c:3158 utils/adt/numeric.c:3254 utils/adt/numeric.c:8427 utils/adt/numeric.c:8717 utils/adt/numeric.c:10299 utils/adt/timestamp.c:3281 #, c-format msgid "division by zero" msgstr "division par zéro" @@ -21225,140 +22492,149 @@ msgstr "division par zéro" msgid "\"char\" out of range" msgstr "« char » hors des limites" -#: utils/adt/date.c:65 utils/adt/timestamp.c:95 utils/adt/varbit.c:104 utils/adt/varchar.c:49 +#: utils/adt/date.c:62 utils/adt/timestamp.c:97 utils/adt/varbit.c:105 utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "modifieur de type invalide" -#: utils/adt/date.c:77 +#: utils/adt/date.c:74 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "la précision de TIME(%d)%s ne doit pas être négative" -#: utils/adt/date.c:83 +#: utils/adt/date.c:80 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "la précision de TIME(%d)%s a été réduite au maximum autorisée, %d" -#: utils/adt/date.c:162 utils/adt/date.c:170 utils/adt/formatting.c:3736 utils/adt/formatting.c:3745 +#: utils/adt/date.c:159 utils/adt/date.c:167 utils/adt/formatting.c:4252 utils/adt/formatting.c:4261 utils/adt/formatting.c:4367 utils/adt/formatting.c:4377 #, c-format msgid "date out of range: \"%s\"" msgstr "date en dehors des limites : « %s »" -#: utils/adt/date.c:217 utils/adt/date.c:529 utils/adt/date.c:553 utils/adt/xml.c:2228 +#: utils/adt/date.c:214 utils/adt/date.c:525 utils/adt/date.c:549 utils/adt/xml.c:2210 #, c-format msgid "date out of range" msgstr "date en dehors des limites" -#: utils/adt/date.c:263 utils/adt/timestamp.c:559 +#: utils/adt/date.c:260 utils/adt/timestamp.c:580 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "valeur du champ date en dehors des limites : %d-%02d-%02d" -#: utils/adt/date.c:270 utils/adt/date.c:279 utils/adt/timestamp.c:565 +#: utils/adt/date.c:267 utils/adt/date.c:276 utils/adt/timestamp.c:586 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "date en dehors des limites : %d-%02d-%02d" -#: utils/adt/date.c:317 utils/adt/date.c:340 utils/adt/date.c:366 utils/adt/date.c:1110 utils/adt/date.c:1156 utils/adt/date.c:1657 utils/adt/date.c:1688 utils/adt/date.c:1717 utils/adt/date.c:2549 utils/adt/datetime.c:1663 utils/adt/formatting.c:3602 utils/adt/formatting.c:3634 utils/adt/formatting.c:3711 utils/adt/json.c:1621 utils/adt/json.c:1641 utils/adt/timestamp.c:222 utils/adt/timestamp.c:254 utils/adt/timestamp.c:687 -#: utils/adt/timestamp.c:696 utils/adt/timestamp.c:774 utils/adt/timestamp.c:807 utils/adt/timestamp.c:2836 utils/adt/timestamp.c:2857 utils/adt/timestamp.c:2870 utils/adt/timestamp.c:2879 utils/adt/timestamp.c:2887 utils/adt/timestamp.c:2942 utils/adt/timestamp.c:2965 utils/adt/timestamp.c:2978 utils/adt/timestamp.c:2989 utils/adt/timestamp.c:2997 utils/adt/timestamp.c:3657 utils/adt/timestamp.c:3782 utils/adt/timestamp.c:3823 -#: utils/adt/timestamp.c:3913 utils/adt/timestamp.c:3957 utils/adt/timestamp.c:4060 utils/adt/timestamp.c:4544 utils/adt/timestamp.c:4643 utils/adt/timestamp.c:4653 utils/adt/timestamp.c:4745 utils/adt/timestamp.c:4847 utils/adt/timestamp.c:4857 utils/adt/timestamp.c:5077 utils/adt/timestamp.c:5091 utils/adt/timestamp.c:5096 utils/adt/timestamp.c:5110 utils/adt/timestamp.c:5143 utils/adt/timestamp.c:5192 utils/adt/timestamp.c:5199 -#: utils/adt/timestamp.c:5232 utils/adt/timestamp.c:5236 utils/adt/timestamp.c:5305 utils/adt/timestamp.c:5309 utils/adt/timestamp.c:5323 utils/adt/timestamp.c:5357 utils/adt/xml.c:2250 utils/adt/xml.c:2257 utils/adt/xml.c:2277 utils/adt/xml.c:2284 -#, c-format -msgid "timestamp out of range" -msgstr "timestamp en dehors des limites" - -#: utils/adt/date.c:504 +#: utils/adt/date.c:500 #, c-format msgid "cannot subtract infinite dates" msgstr "ne peut pas soustraire les valeurs dates infinies" -#: utils/adt/date.c:582 utils/adt/date.c:613 utils/adt/date.c:631 utils/adt/date.c:2586 utils/adt/date.c:2596 +#: utils/adt/date.c:598 utils/adt/date.c:661 utils/adt/date.c:697 utils/adt/date.c:2881 utils/adt/date.c:2891 #, c-format msgid "date out of range for timestamp" msgstr "date en dehors des limites pour un timestamp" -#: utils/adt/date.c:1270 utils/adt/date.c:2044 +#: utils/adt/date.c:1127 utils/adt/date.c:1210 utils/adt/date.c:1226 +#, c-format +msgid "date units \"%s\" not supported" +msgstr "unités de date « %s » non supportées" + +#: utils/adt/date.c:1235 +#, c-format +msgid "date units \"%s\" not recognized" +msgstr "unités de date « %s » non reconnues" + +#: utils/adt/date.c:1318 utils/adt/date.c:1364 utils/adt/date.c:1920 utils/adt/date.c:1951 utils/adt/date.c:1980 utils/adt/date.c:2844 utils/adt/datetime.c:405 utils/adt/datetime.c:1700 utils/adt/formatting.c:4109 utils/adt/formatting.c:4141 utils/adt/formatting.c:4221 utils/adt/formatting.c:4343 utils/adt/json.c:418 utils/adt/json.c:457 utils/adt/timestamp.c:224 utils/adt/timestamp.c:256 utils/adt/timestamp.c:698 utils/adt/timestamp.c:707 utils/adt/timestamp.c:785 utils/adt/timestamp.c:818 utils/adt/timestamp.c:2860 utils/adt/timestamp.c:2881 utils/adt/timestamp.c:2894 utils/adt/timestamp.c:2903 utils/adt/timestamp.c:2911 utils/adt/timestamp.c:2966 utils/adt/timestamp.c:2989 +#: utils/adt/timestamp.c:3002 utils/adt/timestamp.c:3013 utils/adt/timestamp.c:3021 utils/adt/timestamp.c:3681 utils/adt/timestamp.c:3806 utils/adt/timestamp.c:3891 utils/adt/timestamp.c:3981 utils/adt/timestamp.c:4069 utils/adt/timestamp.c:4172 utils/adt/timestamp.c:4674 utils/adt/timestamp.c:4948 utils/adt/timestamp.c:5401 utils/adt/timestamp.c:5415 utils/adt/timestamp.c:5420 utils/adt/timestamp.c:5434 utils/adt/timestamp.c:5467 utils/adt/timestamp.c:5554 utils/adt/timestamp.c:5595 utils/adt/timestamp.c:5599 utils/adt/timestamp.c:5668 utils/adt/timestamp.c:5672 utils/adt/timestamp.c:5686 utils/adt/timestamp.c:5720 utils/adt/xml.c:2232 utils/adt/xml.c:2239 utils/adt/xml.c:2259 +#: utils/adt/xml.c:2266 +#, c-format +msgid "timestamp out of range" +msgstr "timestamp en dehors des limites" + +#: utils/adt/date.c:1537 utils/adt/date.c:2339 utils/adt/formatting.c:4429 #, c-format msgid "time out of range" msgstr "heure en dehors des limites" -#: utils/adt/date.c:1326 utils/adt/timestamp.c:584 +#: utils/adt/date.c:1589 utils/adt/timestamp.c:595 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "valeur du champ time en dehors des limites : %d:%02d:%02g" -#: utils/adt/date.c:1846 utils/adt/date.c:2348 utils/adt/float.c:1046 utils/adt/float.c:1115 utils/adt/int.c:616 utils/adt/int.c:663 utils/adt/int.c:698 utils/adt/int8.c:494 utils/adt/numeric.c:2203 utils/adt/timestamp.c:3306 utils/adt/timestamp.c:3337 utils/adt/timestamp.c:3368 +#: utils/adt/date.c:2109 utils/adt/date.c:2643 utils/adt/float.c:1047 utils/adt/float.c:1123 utils/adt/int.c:614 utils/adt/int.c:661 utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2443 utils/adt/timestamp.c:3330 utils/adt/timestamp.c:3361 utils/adt/timestamp.c:3392 #, c-format msgid "invalid preceding or following size in window function" msgstr "taille précédente ou suivante invalide dans la fonction de fenêtrage" -#: utils/adt/date.c:1931 utils/adt/date.c:1944 +#: utils/adt/date.c:2208 utils/adt/date.c:2224 #, c-format msgid "\"time\" units \"%s\" not recognized" msgstr "unités « %s » non reconnues pour le type « time »" -#: utils/adt/date.c:2052 +#: utils/adt/date.c:2347 #, c-format msgid "time zone displacement out of range" msgstr "déplacement du fuseau horaire en dehors des limites" -#: utils/adt/date.c:2681 utils/adt/date.c:2694 +#: utils/adt/date.c:2986 utils/adt/date.c:3006 #, c-format msgid "\"time with time zone\" units \"%s\" not recognized" msgstr "unités « %s » non reconnues pour le type « time with time zone »" -#: utils/adt/date.c:2767 utils/adt/datetime.c:909 utils/adt/datetime.c:1821 utils/adt/datetime.c:4617 utils/adt/timestamp.c:498 utils/adt/timestamp.c:525 utils/adt/timestamp.c:4143 utils/adt/timestamp.c:5102 utils/adt/timestamp.c:5315 +#: utils/adt/date.c:3095 utils/adt/datetime.c:951 utils/adt/datetime.c:1858 utils/adt/datetime.c:4647 utils/adt/timestamp.c:515 utils/adt/timestamp.c:542 utils/adt/timestamp.c:4255 utils/adt/timestamp.c:5426 utils/adt/timestamp.c:5678 #, c-format msgid "time zone \"%s\" not recognized" msgstr "le fuseau horaire « %s » n'est pas reconnu" -#: utils/adt/date.c:2799 utils/adt/timestamp.c:5132 utils/adt/timestamp.c:5346 +#: utils/adt/date.c:3127 utils/adt/timestamp.c:5456 utils/adt/timestamp.c:5709 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "l'intervalle de fuseau horaire « %s » ne doit pas spécifier de mois ou de jours" -#: utils/adt/datetime.c:3746 utils/adt/datetime.c:3753 +#: utils/adt/datetime.c:3775 utils/adt/datetime.c:3782 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "valeur du champ date/time en dehors des limites : « %s »" -#: utils/adt/datetime.c:3755 +#: utils/adt/datetime.c:3784 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." msgstr "Peut-être avez-vous besoin d'un paramètrage « datestyle » différent." -#: utils/adt/datetime.c:3760 +#: utils/adt/datetime.c:3789 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "valeur du champ interval en dehors des limites : « %s »" -#: utils/adt/datetime.c:3766 +#: utils/adt/datetime.c:3795 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "déplacement du fuseau horaire en dehors des limites : « %s »" -#: utils/adt/datetime.c:4619 +#: utils/adt/datetime.c:4649 #, c-format msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "Ce nom du fuseau horaire apparaît dans le fichier de configuration des abréviations de fuseaux horaires « %s »." -#: utils/adt/datum.c:88 utils/adt/datum.c:100 +#: utils/adt/datum.c:89 utils/adt/datum.c:101 #, c-format msgid "invalid Datum pointer" msgstr "pointeur Datum invalide" -#: utils/adt/dbsize.c:759 utils/adt/dbsize.c:827 +#: utils/adt/dbsize.c:749 utils/adt/dbsize.c:817 #, c-format msgid "invalid size: \"%s\"" msgstr "taille invalide : « %s »" -#: utils/adt/dbsize.c:828 +#: utils/adt/dbsize.c:818 #, c-format msgid "Invalid size unit: \"%s\"." msgstr "Unité invalide pour une taille : « %s »." -#: utils/adt/dbsize.c:829 +#: utils/adt/dbsize.c:819 #, c-format msgid "Valid units are \"bytes\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Les unités valides pour ce paramètre sont « bytes », « kB », « MB », « GB » et « TB »." @@ -21368,381 +22644,441 @@ msgstr "Les unités valides pour ce paramètre sont « bytes », « kB », « MB msgid "type %s is not a domain" msgstr "le type %s n'est pas un domaine" -#: utils/adt/encode.c:55 utils/adt/encode.c:91 +#: utils/adt/encode.c:68 utils/adt/encode.c:112 #, c-format msgid "unrecognized encoding: \"%s\"" msgstr "encodage non reconnu : « %s »" -#: utils/adt/encode.c:150 +#: utils/adt/encode.c:82 #, c-format -msgid "invalid hexadecimal digit: \"%c\"" -msgstr "chiffre hexadécimal invalide : « %c »" +msgid "result of encoding conversion is too large" +msgstr "la résultat de la conversion d'encodage est trop importante" -#: utils/adt/encode.c:178 +#: utils/adt/encode.c:126 #, c-format -msgid "invalid hexadecimal data: odd number of digits" -msgstr "donnée hexadécimale invalide : nombre pair de chiffres" +msgid "result of decoding conversion is too large" +msgstr "le résultat de la conversion du décodage est trop grand" -#: utils/adt/encode.c:295 +#: utils/adt/encode.c:261 #, c-format msgid "unexpected \"=\" while decoding base64 sequence" msgstr "« = » inattendu lors du décodage de la séquence en base64" -#: utils/adt/encode.c:307 +#: utils/adt/encode.c:273 #, c-format -msgid "invalid symbol \"%c\" while decoding base64 sequence" -msgstr "symbole « %c » invalide lors du décodage de la séquence en base64" +msgid "invalid symbol \"%.*s\" found while decoding base64 sequence" +msgstr "symbole « %.*s » invalide trouvé lors du décodage de la séquence en base64" -#: utils/adt/encode.c:327 +#: utils/adt/encode.c:304 #, c-format msgid "invalid base64 end sequence" msgstr "séquence base64 de fin invalide" -#: utils/adt/encode.c:328 +#: utils/adt/encode.c:305 #, c-format msgid "Input data is missing padding, is truncated, or is otherwise corrupted." msgstr "Les données en entrée manquent un alignement, sont tronquées ou ont une corruption autre." -#: utils/adt/enum.c:100 +#: utils/adt/enum.c:99 #, c-format msgid "unsafe use of new value \"%s\" of enum type %s" msgstr "utilisation non sûre de la nouvelle valeur « %s » du type enum %s" -#: utils/adt/enum.c:103 +#: utils/adt/enum.c:102 #, c-format msgid "New enum values must be committed before they can be used." msgstr "Les nouvelles valeurs enum doivent être validées (COMMIT) avant de pouvoir être utilisées." -#: utils/adt/enum.c:121 utils/adt/enum.c:131 utils/adt/enum.c:189 utils/adt/enum.c:199 +#: utils/adt/enum.c:120 utils/adt/enum.c:130 utils/adt/enum.c:188 utils/adt/enum.c:198 #, c-format msgid "invalid input value for enum %s: \"%s\"" msgstr "valeur en entrée invalide pour le enum %s : « %s »" -#: utils/adt/enum.c:161 utils/adt/enum.c:227 utils/adt/enum.c:286 +#: utils/adt/enum.c:160 utils/adt/enum.c:226 utils/adt/enum.c:285 #, c-format msgid "invalid internal value for enum: %u" msgstr "valeur interne invalide pour le enum : %u" -#: utils/adt/enum.c:446 utils/adt/enum.c:475 utils/adt/enum.c:515 utils/adt/enum.c:535 +#: utils/adt/enum.c:445 utils/adt/enum.c:474 utils/adt/enum.c:514 utils/adt/enum.c:534 #, c-format msgid "could not determine actual enum type" msgstr "n'a pas pu déterminer le type enum actuel" -#: utils/adt/enum.c:454 utils/adt/enum.c:483 +#: utils/adt/enum.c:453 utils/adt/enum.c:482 #, c-format msgid "enum %s contains no values" msgstr "l'énumération « %s » ne contient aucune valeur" -#: utils/adt/expandedrecord.c:98 utils/adt/expandedrecord.c:230 utils/cache/typcache.c:1574 utils/cache/typcache.c:1730 utils/cache/typcache.c:1860 utils/fmgr/funcapi.c:415 +#: utils/adt/float.c:88 #, c-format -msgid "type %s is not composite" -msgstr "le type %s n'est pas un type composite" +msgid "value out of range: overflow" +msgstr "valeur en dehors des limites : dépassement" + +#: utils/adt/float.c:96 +#, c-format +msgid "value out of range: underflow" +msgstr "valeur en dehors des limites : trop petit" -#: utils/adt/float.c:246 +#: utils/adt/float.c:265 #, c-format msgid "\"%s\" is out of range for type real" msgstr "« %s » est en dehors des limites du type real" -#: utils/adt/float.c:466 +#: utils/adt/float.c:477 #, c-format msgid "\"%s\" is out of range for type double precision" msgstr "« %s » est en dehors des limites du type double precision" -#: utils/adt/float.c:1252 utils/adt/float.c:1340 utils/adt/int.c:336 utils/adt/int.c:874 utils/adt/int.c:896 utils/adt/int.c:910 utils/adt/int.c:924 utils/adt/int.c:956 utils/adt/int.c:1194 utils/adt/int8.c:1188 utils/adt/numeric.c:3358 utils/adt/numeric.c:3367 +#: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:334 utils/adt/int.c:872 utils/adt/int.c:894 utils/adt/int.c:908 utils/adt/int.c:922 utils/adt/int.c:954 utils/adt/int.c:1192 utils/adt/int8.c:1320 utils/adt/numeric.c:4317 utils/adt/numeric.c:4326 #, c-format msgid "smallint out of range" msgstr "smallint en dehors des limites" -#: utils/adt/float.c:1466 utils/adt/numeric.c:7970 +#: utils/adt/float.c:1458 utils/adt/numeric.c:3550 utils/adt/numeric.c:9310 #, c-format msgid "cannot take square root of a negative number" msgstr "ne peut pas calculer la racine carré d'un nombre négatif" -#: utils/adt/float.c:1527 utils/adt/numeric.c:3138 +#: utils/adt/float.c:1526 utils/adt/numeric.c:3825 utils/adt/numeric.c:3935 #, c-format msgid "zero raised to a negative power is undefined" msgstr "zéro à une puissance négative est indéfini" -#: utils/adt/float.c:1531 utils/adt/numeric.c:3144 +#: utils/adt/float.c:1530 utils/adt/numeric.c:3829 utils/adt/numeric.c:3940 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "un nombre négatif élevé à une puissance non entière donne un résultat complexe" -#: utils/adt/float.c:1597 utils/adt/float.c:1627 utils/adt/numeric.c:8236 +#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3737 utils/adt/numeric.c:9974 #, c-format msgid "cannot take logarithm of zero" msgstr "ne peut pas calculer le logarithme de zéro" -#: utils/adt/float.c:1601 utils/adt/float.c:1631 utils/adt/numeric.c:8240 +#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3675 utils/adt/numeric.c:3732 utils/adt/numeric.c:9978 #, c-format msgid "cannot take logarithm of a negative number" msgstr "ne peut pas calculer le logarithme sur un nombre négatif" -#: utils/adt/float.c:1661 utils/adt/float.c:1691 utils/adt/float.c:1783 utils/adt/float.c:1809 utils/adt/float.c:1836 utils/adt/float.c:1862 utils/adt/float.c:2009 utils/adt/float.c:2044 utils/adt/float.c:2208 utils/adt/float.c:2262 utils/adt/float.c:2326 utils/adt/float.c:2381 utils/adt/float.c:2569 utils/adt/float.c:2594 +#: utils/adt/float.c:1776 utils/adt/float.c:1807 utils/adt/float.c:1902 utils/adt/float.c:1929 utils/adt/float.c:1957 utils/adt/float.c:1984 utils/adt/float.c:2131 utils/adt/float.c:2168 utils/adt/float.c:2338 utils/adt/float.c:2394 utils/adt/float.c:2459 utils/adt/float.c:2516 utils/adt/float.c:2707 utils/adt/float.c:2731 #, c-format msgid "input is out of range" msgstr "l'entrée est en dehors des limites" -#: utils/adt/float.c:2662 +#: utils/adt/float.c:2798 #, c-format msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "le paramètre setseed %g est en dehors de la fenêtre permise [-1,1]" -#: utils/adt/float.c:2880 utils/adt/float.c:2956 utils/adt/float.c:3179 -#, c-format -msgid "value out of range: overflow" -msgstr "valeur en dehors des limites : dépassement" - -#: utils/adt/float.c:3861 utils/adt/numeric.c:1515 +#: utils/adt/float.c:4030 utils/adt/numeric.c:1716 #, c-format msgid "count must be greater than zero" msgstr "le total doit être supérieur à zéro" -#: utils/adt/float.c:3866 utils/adt/numeric.c:1522 +#: utils/adt/float.c:4035 utils/adt/numeric.c:1727 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "la limite inférieure et supérieure de l'opérande ne peuvent pas être NaN" -#: utils/adt/float.c:3872 +#: utils/adt/float.c:4041 utils/adt/numeric.c:1732 #, c-format msgid "lower and upper bounds must be finite" msgstr "les limites basse et haute doivent être finies" -#: utils/adt/float.c:3906 utils/adt/numeric.c:1535 +#: utils/adt/float.c:4075 utils/adt/numeric.c:1746 #, c-format msgid "lower bound cannot equal upper bound" msgstr "la limite inférieure ne peut pas être plus égale à la limite supérieure" -#: utils/adt/formatting.c:504 +#: utils/adt/formatting.c:532 #, c-format msgid "invalid format specification for an interval value" msgstr "format de spécification invalide pour une valeur intervalle" -#: utils/adt/formatting.c:505 +#: utils/adt/formatting.c:533 #, c-format msgid "Intervals are not tied to specific calendar dates." msgstr "Les intervalles ne sont pas liés aux dates de calendriers spécifiques." -#: utils/adt/formatting.c:1086 +#: utils/adt/formatting.c:1157 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "« EEEE » doit être le dernier motif utilisé" -#: utils/adt/formatting.c:1094 +#: utils/adt/formatting.c:1165 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "« 9 » doit être avant « PR »" -#: utils/adt/formatting.c:1110 +#: utils/adt/formatting.c:1181 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "« 0 » doit être avant « PR »" -#: utils/adt/formatting.c:1137 +#: utils/adt/formatting.c:1208 #, c-format msgid "multiple decimal points" msgstr "multiples points décimaux" -#: utils/adt/formatting.c:1141 utils/adt/formatting.c:1224 +#: utils/adt/formatting.c:1212 utils/adt/formatting.c:1295 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "ne peut pas utiliser « V » et le point décimal ensemble" -#: utils/adt/formatting.c:1153 +#: utils/adt/formatting.c:1224 #, c-format msgid "cannot use \"S\" twice" msgstr "ne peut pas utiliser « S » deux fois" -#: utils/adt/formatting.c:1157 +#: utils/adt/formatting.c:1228 #, c-format msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" msgstr "ne peut pas utiliser « S » et « PL »/« MI »/« SG »/« PR » ensemble" -#: utils/adt/formatting.c:1177 +#: utils/adt/formatting.c:1248 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "ne peut pas utiliser « S » et « MI » ensemble" -#: utils/adt/formatting.c:1187 +#: utils/adt/formatting.c:1258 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "ne peut pas utiliser « S » et « PL » ensemble" -#: utils/adt/formatting.c:1197 +#: utils/adt/formatting.c:1268 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "ne peut pas utiliser « S » et « SG » ensemble" -#: utils/adt/formatting.c:1206 +#: utils/adt/formatting.c:1277 #, c-format msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" msgstr "ne peut pas utiliser « PR » et « S »/« PL »/« MI »/« SG » ensemble" -#: utils/adt/formatting.c:1232 +#: utils/adt/formatting.c:1303 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "ne peut pas utiliser « EEEE » deux fois" -#: utils/adt/formatting.c:1238 +#: utils/adt/formatting.c:1309 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "« EEEE » est incompatible avec les autres formats" -#: utils/adt/formatting.c:1239 +#: utils/adt/formatting.c:1310 #, c-format msgid "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "« EEEE » ne peut être utilisé qu'avec les motifs de chiffres et de points décimaux." -#: utils/adt/formatting.c:1426 +#: utils/adt/formatting.c:1394 +#, c-format +msgid "invalid datetime format separator: \"%s\"" +msgstr "séparateur de format datetime invalide : « %s »" + +#: utils/adt/formatting.c:1521 #, c-format msgid "\"%s\" is not a number" msgstr "« %s » n'est pas un nombre" -#: utils/adt/formatting.c:1504 +#: utils/adt/formatting.c:1599 #, c-format msgid "case conversion failed: %s" msgstr "échec de la conversion de casse : %s" -#: utils/adt/formatting.c:1569 utils/adt/formatting.c:1693 utils/adt/formatting.c:1818 +#: utils/adt/formatting.c:1664 utils/adt/formatting.c:1788 utils/adt/formatting.c:1913 #, c-format msgid "could not determine which collation to use for %s function" msgstr "n'a pas pu déterminer le collationnement à utiliser pour la fonction %s" -#: utils/adt/formatting.c:2188 +#: utils/adt/formatting.c:2285 #, c-format msgid "invalid combination of date conventions" msgstr "combinaison invalide des conventions de date" -#: utils/adt/formatting.c:2189 +#: utils/adt/formatting.c:2286 #, c-format msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr "" "Ne pas mixer les conventions de jour de semaine grégorien et ISO dans un\n" "modèle de formatage." -#: utils/adt/formatting.c:2206 +#: utils/adt/formatting.c:2309 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "valeur conflictuelle pour le champ « %s » dans la chaîne de formatage" -#: utils/adt/formatting.c:2208 +#: utils/adt/formatting.c:2312 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "Cette valeur contredit une configuration précédente pour le même type de champ." -#: utils/adt/formatting.c:2269 +#: utils/adt/formatting.c:2383 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "chaîne source trop petite pour le champ de formatage « %s »" -#: utils/adt/formatting.c:2271 +#: utils/adt/formatting.c:2386 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "Le champ requiert %d caractères, mais seuls %d restent." -#: utils/adt/formatting.c:2274 utils/adt/formatting.c:2288 +#: utils/adt/formatting.c:2389 utils/adt/formatting.c:2404 #, c-format msgid "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "" "Si votre chaîne source n'a pas une taille fixe, essayez d'utiliser le\n" "modifieur « FM »." -#: utils/adt/formatting.c:2284 utils/adt/formatting.c:2297 utils/adt/formatting.c:2427 +#: utils/adt/formatting.c:2399 utils/adt/formatting.c:2413 utils/adt/formatting.c:2636 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "valeur « %s » invalide pour « %s »" -#: utils/adt/formatting.c:2286 +#: utils/adt/formatting.c:2401 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "Le champ nécessite %d caractères, mais seulement %d ont pu être analysés." -#: utils/adt/formatting.c:2299 +#: utils/adt/formatting.c:2415 #, c-format msgid "Value must be an integer." msgstr "La valeur doit être un entier." -#: utils/adt/formatting.c:2304 +#: utils/adt/formatting.c:2420 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "la valeur pour « %s » dans la chaîne source est en dehors des limites" -#: utils/adt/formatting.c:2306 +#: utils/adt/formatting.c:2422 #, c-format msgid "Value must be in the range %d to %d." msgstr "La valeur doit être compris entre %d et %d." -#: utils/adt/formatting.c:2429 +#: utils/adt/formatting.c:2638 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "La valeur donnée ne correspond pas aux valeurs autorisées pour ce champ." -#: utils/adt/formatting.c:2627 utils/adt/formatting.c:2647 utils/adt/formatting.c:2667 utils/adt/formatting.c:2687 utils/adt/formatting.c:2706 utils/adt/formatting.c:2725 utils/adt/formatting.c:2749 utils/adt/formatting.c:2767 utils/adt/formatting.c:2785 utils/adt/formatting.c:2803 utils/adt/formatting.c:2820 utils/adt/formatting.c:2837 +#: utils/adt/formatting.c:2855 utils/adt/formatting.c:2875 utils/adt/formatting.c:2895 utils/adt/formatting.c:2915 utils/adt/formatting.c:2934 utils/adt/formatting.c:2953 utils/adt/formatting.c:2977 utils/adt/formatting.c:2995 utils/adt/formatting.c:3013 utils/adt/formatting.c:3031 utils/adt/formatting.c:3048 utils/adt/formatting.c:3065 #, c-format msgid "localized string format value too long" msgstr "chaîne localisée trop longue" -#: utils/adt/formatting.c:3179 +#: utils/adt/formatting.c:3342 +#, c-format +msgid "unmatched format separator \"%c\"" +msgstr "séparateur de format « %c » sans correspondance" + +#: utils/adt/formatting.c:3403 +#, c-format +msgid "unmatched format character \"%s\"" +msgstr "caractère de format « %s » sans correspondance" + +#: utils/adt/formatting.c:3509 utils/adt/formatting.c:3853 #, c-format msgid "formatting field \"%s\" is only supported in to_char" msgstr "le formatage du champ « %s » est seulement supporté dans to_char" -#: utils/adt/formatting.c:3320 +#: utils/adt/formatting.c:3684 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "chaîne invalide en entrée pour « Y,YYY »" -#: utils/adt/formatting.c:3854 +#: utils/adt/formatting.c:3770 +#, c-format +msgid "input string is too short for datetime format" +msgstr "la chaîne en entrée est trop courte pour le format datetime" + +#: utils/adt/formatting.c:3778 +#, c-format +msgid "trailing characters remain in input string after datetime format" +msgstr "les caractères en fin de chaîne restent dans la chaîne en entrée après le format datetime" + +#: utils/adt/formatting.c:4323 +#, c-format +msgid "missing time zone in input string for type timestamptz" +msgstr "manque du fuseau horaire dans la chaîne en entrée pour le type timestamptz" + +#: utils/adt/formatting.c:4329 +#, c-format +msgid "timestamptz out of range" +msgstr "timestamptz en dehors des limites" + +#: utils/adt/formatting.c:4357 +#, c-format +msgid "datetime format is zoned but not timed" +msgstr "le format datetime a une zone de fuseau horaire mais pas d'heure" + +#: utils/adt/formatting.c:4409 +#, c-format +msgid "missing time zone in input string for type timetz" +msgstr "manque du fuseau horaire dans la chaîne en entrée pour le type timetz" + +#: utils/adt/formatting.c:4415 +#, c-format +msgid "timetz out of range" +msgstr "timetz en dehors des limites" + +#: utils/adt/formatting.c:4441 +#, c-format +msgid "datetime format is not dated and not timed" +msgstr "le format datetime n'a ni date ni heure" + +#: utils/adt/formatting.c:4574 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "l'heure « %d » est invalide pour une horloge sur 12 heures" -#: utils/adt/formatting.c:3856 +#: utils/adt/formatting.c:4576 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Utilisez une horloge sur 24 heures ou donnez une heure entre 1 et 12." -#: utils/adt/formatting.c:3962 +#: utils/adt/formatting.c:4687 #, c-format msgid "cannot calculate day of year without year information" msgstr "ne peut pas calculer le jour de l'année sans information sur l'année" -#: utils/adt/formatting.c:4869 +#: utils/adt/formatting.c:5606 #, c-format msgid "\"EEEE\" not supported for input" msgstr "« EEEE » non supporté en entrée" -#: utils/adt/formatting.c:4881 +#: utils/adt/formatting.c:5618 #, c-format msgid "\"RN\" not supported for input" msgstr "« RN » non supporté en entrée" -#: utils/adt/genfile.c:81 +#: utils/adt/genfile.c:78 #, c-format msgid "reference to parent directory (\"..\") not allowed" msgstr "référence non autorisée au répertoire parent (« .. »)" -#: utils/adt/genfile.c:92 +#: utils/adt/genfile.c:89 #, c-format msgid "absolute path not allowed" msgstr "chemin absolu non autorisé" -#: utils/adt/genfile.c:97 +#: utils/adt/genfile.c:94 #, c-format msgid "path must be in or below the current directory" msgstr "le chemin doit être dans ou en-dessous du répertoire courant" -#: utils/adt/genfile.c:144 utils/adt/oracle_compat.c:185 utils/adt/oracle_compat.c:283 utils/adt/oracle_compat.c:759 utils/adt/oracle_compat.c:1054 +#: utils/adt/genfile.c:119 utils/adt/oracle_compat.c:187 utils/adt/oracle_compat.c:285 utils/adt/oracle_compat.c:833 utils/adt/oracle_compat.c:1128 #, c-format msgid "requested length too large" msgstr "longueur demandée trop importante" -#: utils/adt/genfile.c:161 +#: utils/adt/genfile.c:136 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "n'a pas pu parcourir le fichier « %s » : %m" -#: utils/adt/genfile.c:221 +#: utils/adt/genfile.c:177 +#, c-format +msgid "file length too large" +msgstr "longueur du fichier trop importante" + +#: utils/adt/genfile.c:254 #, c-format msgid "must be superuser to read files with adminpack 1.0" msgstr "doit être super-utilisateur pour lire des fichiers avec adminpack 1.0" @@ -21752,67 +23088,72 @@ msgstr "doit être super-utilisateur pour lire des fichiers avec adminpack 1.0" msgid "invalid line specification: A and B cannot both be zero" msgstr "spécification invalide de ligne : A et B ne peuvent pas être à zéro tous les deux" -#: utils/adt/geo_ops.c:987 utils/adt/geo_ops.c:1090 +#: utils/adt/geo_ops.c:987 utils/adt/geo_ops.c:1097 #, c-format msgid "invalid line specification: must be two distinct points" msgstr "spécification de ligne invalide : doit être deux points distincts" -#: utils/adt/geo_ops.c:1399 utils/adt/geo_ops.c:3370 utils/adt/geo_ops.c:4238 utils/adt/geo_ops.c:5129 +#: utils/adt/geo_ops.c:1410 utils/adt/geo_ops.c:3498 utils/adt/geo_ops.c:4366 utils/adt/geo_ops.c:5260 #, c-format msgid "too many points requested" msgstr "trop de points demandé" -#: utils/adt/geo_ops.c:1461 +#: utils/adt/geo_ops.c:1472 #, c-format msgid "invalid number of points in external \"path\" value" msgstr "nombre de points invalide dans la valeur externe de « path »" -#: utils/adt/geo_ops.c:2459 +#: utils/adt/geo_ops.c:2549 #, c-format msgid "function \"dist_lb\" not implemented" msgstr "la fonction « dist_lb » n'est pas implémentée" -#: utils/adt/geo_ops.c:2859 +#: utils/adt/geo_ops.c:2568 +#, c-format +msgid "function \"dist_bl\" not implemented" +msgstr "fonction « dist_lb » non implémentée" + +#: utils/adt/geo_ops.c:2987 #, c-format msgid "function \"close_sl\" not implemented" msgstr "la fonction « close_sl » n'est pas implémentée" -#: utils/adt/geo_ops.c:3006 +#: utils/adt/geo_ops.c:3134 #, c-format msgid "function \"close_lb\" not implemented" msgstr "la fonction « close_lb » n'est pas implémentée" -#: utils/adt/geo_ops.c:3417 +#: utils/adt/geo_ops.c:3545 #, c-format msgid "invalid number of points in external \"polygon\" value" msgstr "nombre de points invalide dans la valeur externe de « polygon »" -#: utils/adt/geo_ops.c:3953 +#: utils/adt/geo_ops.c:4081 #, c-format msgid "function \"poly_distance\" not implemented" msgstr "la fonction « poly_distance » n'est pas implémentée" -#: utils/adt/geo_ops.c:4330 +#: utils/adt/geo_ops.c:4458 #, c-format msgid "function \"path_center\" not implemented" msgstr "la fonction « path_center » n'est pas implémentée" -#: utils/adt/geo_ops.c:4347 +#: utils/adt/geo_ops.c:4475 #, c-format msgid "open path cannot be converted to polygon" msgstr "le chemin ouvert ne peut être converti en polygône" -#: utils/adt/geo_ops.c:4594 +#: utils/adt/geo_ops.c:4725 #, c-format msgid "invalid radius in external \"circle\" value" msgstr "diamètre invalide pour la valeur externe de « circle »" -#: utils/adt/geo_ops.c:5115 +#: utils/adt/geo_ops.c:5246 #, c-format msgid "cannot convert circle with radius zero to polygon" msgstr "ne peut pas convertir le cercle avec un diamètre zéro en un polygône" -#: utils/adt/geo_ops.c:5120 +#: utils/adt/geo_ops.c:5251 #, c-format msgid "must request at least 2 points" msgstr "doit demander au moins deux points" @@ -21822,500 +23163,529 @@ msgstr "doit demander au moins deux points" msgid "int2vector has too many elements" msgstr "int2vector a trop d'éléments" -#: utils/adt/int.c:239 +#: utils/adt/int.c:237 #, c-format msgid "invalid int2vector data" msgstr "données int2vector invalide" -#: utils/adt/int.c:245 utils/adt/oid.c:215 utils/adt/oid.c:296 +#: utils/adt/int.c:243 utils/adt/oid.c:215 utils/adt/oid.c:296 #, c-format msgid "oidvector has too many elements" msgstr "oidvector a trop d'éléments" -#: utils/adt/int.c:1383 utils/adt/int8.c:1328 utils/adt/numeric.c:1423 utils/adt/timestamp.c:5408 utils/adt/timestamp.c:5489 +#: utils/adt/int.c:1508 utils/adt/int8.c:1446 utils/adt/numeric.c:1624 utils/adt/timestamp.c:5771 utils/adt/timestamp.c:5851 #, c-format msgid "step size cannot equal zero" msgstr "la taille du pas ne peut pas valoir zéro" -#: utils/adt/int8.c:529 utils/adt/int8.c:552 utils/adt/int8.c:566 utils/adt/int8.c:580 utils/adt/int8.c:611 utils/adt/int8.c:635 utils/adt/int8.c:690 utils/adt/int8.c:704 utils/adt/int8.c:728 utils/adt/int8.c:741 utils/adt/int8.c:810 utils/adt/int8.c:824 utils/adt/int8.c:838 utils/adt/int8.c:869 utils/adt/int8.c:891 utils/adt/int8.c:905 utils/adt/int8.c:919 utils/adt/int8.c:952 utils/adt/int8.c:966 utils/adt/int8.c:980 utils/adt/int8.c:1011 -#: utils/adt/int8.c:1033 utils/adt/int8.c:1047 utils/adt/int8.c:1061 utils/adt/int8.c:1230 utils/adt/int8.c:1272 utils/adt/numeric.c:3313 utils/adt/varbit.c:1654 +#: utils/adt/int8.c:534 utils/adt/int8.c:557 utils/adt/int8.c:571 utils/adt/int8.c:585 utils/adt/int8.c:616 utils/adt/int8.c:640 utils/adt/int8.c:722 utils/adt/int8.c:790 utils/adt/int8.c:796 utils/adt/int8.c:822 utils/adt/int8.c:836 utils/adt/int8.c:860 utils/adt/int8.c:873 utils/adt/int8.c:942 utils/adt/int8.c:956 utils/adt/int8.c:970 utils/adt/int8.c:1001 utils/adt/int8.c:1023 utils/adt/int8.c:1037 utils/adt/int8.c:1051 utils/adt/int8.c:1084 utils/adt/int8.c:1098 utils/adt/int8.c:1112 utils/adt/int8.c:1143 utils/adt/int8.c:1165 utils/adt/int8.c:1179 utils/adt/int8.c:1193 utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4276 utils/adt/varbit.c:1676 #, c-format msgid "bigint out of range" msgstr "bigint en dehors des limites" -#: utils/adt/int8.c:1285 +#: utils/adt/int8.c:1403 #, c-format msgid "OID out of range" msgstr "OID en dehors des limites" -#: utils/adt/json.c:787 -#, c-format -msgid "Character with value 0x%02x must be escaped." -msgstr "Le caractère de valeur 0x%02x doit être échappé." - -#: utils/adt/json.c:828 -#, c-format -msgid "\"\\u\" must be followed by four hexadecimal digits." -msgstr "« \\u » doit être suivi par quatre chiffres hexadécimaux." - -#: utils/adt/json.c:949 utils/adt/json.c:967 -#, c-format -msgid "Escape sequence \"\\%s\" is invalid." -msgstr "La séquence d'échappement « \\%s » est invalide." - -#: utils/adt/json.c:1136 -#, c-format -msgid "The input string ended unexpectedly." -msgstr "La chaîne en entrée se ferme de manière inattendue." - -#: utils/adt/json.c:1150 -#, c-format -msgid "Expected end of input, but found \"%s\"." -msgstr "Attendait une fin de l'entrée, mais a trouvé « %s »." - -#: utils/adt/json.c:1161 -#, c-format -msgid "Expected JSON value, but found \"%s\"." -msgstr "Valeur JSON attendue, mais « %s » trouvé." - -#: utils/adt/json.c:1169 utils/adt/json.c:1217 -#, c-format -msgid "Expected string, but found \"%s\"." -msgstr "Chaîne attendue, mais « %s » trouvé." - -#: utils/adt/json.c:1177 -#, c-format -msgid "Expected array element or \"]\", but found \"%s\"." -msgstr "Élément de tableau ou « ] » attendu, mais trouvé « %s »." - -#: utils/adt/json.c:1185 -#, c-format -msgid "Expected \",\" or \"]\", but found \"%s\"." -msgstr "« , » ou « ] » attendu, mais trouvé « %s »." - -#: utils/adt/json.c:1193 -#, c-format -msgid "Expected string or \"}\", but found \"%s\"." -msgstr "Chaîne ou « } » attendu, mais « %s » trouvé" - -#: utils/adt/json.c:1201 -#, c-format -msgid "Expected \":\", but found \"%s\"." -msgstr "« : » attendu, mais trouvé « %s »." - -#: utils/adt/json.c:1209 -#, c-format -msgid "Expected \",\" or \"}\", but found \"%s\"." -msgstr "« , » ou « } » attendu, mais trouvé « %s »." - -#: utils/adt/json.c:1247 -#, c-format -msgid "Token \"%s\" is invalid." -msgstr "Le jeton « %s » n'est pas valide." - -#: utils/adt/json.c:1319 -#, c-format -msgid "JSON data, line %d: %s%s%s" -msgstr "données JSON, ligne %d : %s%s%s" - -#: utils/adt/json.c:1475 utils/adt/jsonb.c:739 +#: utils/adt/json.c:271 utils/adt/jsonb.c:757 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "la valeur clé doit être scalaire, et non pas un tableau ou une valeur composite ou un json" -#: utils/adt/json.c:2076 utils/adt/json.c:2086 utils/fmgr/funcapi.c:1549 +#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:1994 #, c-format msgid "could not determine data type for argument %d" msgstr "n'a pas pu déterminer le type de données pour l'argument %d" -#: utils/adt/json.c:2110 utils/adt/jsonb.c:1707 +#: utils/adt/json.c:926 utils/adt/jsonb.c:1728 #, c-format msgid "field name must not be null" msgstr "le nom du champ ne doit pas être NULL" -#: utils/adt/json.c:2194 utils/adt/jsonb.c:1157 +#: utils/adt/json.c:1010 utils/adt/jsonb.c:1178 #, c-format msgid "argument list must have even number of elements" msgstr "la liste d'arguments doit avoir un nombre pair d'éléments" #. translator: %s is a SQL function name -#: utils/adt/json.c:2196 utils/adt/jsonb.c:1159 +#: utils/adt/json.c:1012 utils/adt/jsonb.c:1180 #, c-format msgid "The arguments of %s must consist of alternating keys and values." msgstr "Les arguments de %s doivent consister en clés et valeurs alternées." -#: utils/adt/json.c:2212 +#: utils/adt/json.c:1028 #, c-format msgid "argument %d cannot be null" msgstr "l'argument %d ne peut pas être NULL" -#: utils/adt/json.c:2213 +#: utils/adt/json.c:1029 #, c-format msgid "Object keys should be text." msgstr "Les clés de l'objet doivent être du texte." -#: utils/adt/json.c:2319 utils/adt/jsonb.c:1289 +#: utils/adt/json.c:1135 utils/adt/jsonb.c:1310 #, c-format msgid "array must have two columns" msgstr "le tableau doit avoir deux colonnes" -#: utils/adt/json.c:2343 utils/adt/json.c:2427 utils/adt/jsonb.c:1313 utils/adt/jsonb.c:1408 +#: utils/adt/json.c:1159 utils/adt/json.c:1243 utils/adt/jsonb.c:1334 utils/adt/jsonb.c:1429 #, c-format msgid "null value not allowed for object key" msgstr "valeur NULL non autorisée pour une clé d'objet" -#: utils/adt/json.c:2416 utils/adt/jsonb.c:1397 +#: utils/adt/json.c:1232 utils/adt/jsonb.c:1418 #, c-format msgid "mismatched array dimensions" msgstr "dimensions du tableau non correspondantes" -#: utils/adt/jsonb.c:269 +#: utils/adt/jsonb.c:287 #, c-format msgid "string too long to represent as jsonb string" msgstr "chaîne trop longue pour être représentée en tant que chaîne jsonb" -#: utils/adt/jsonb.c:270 +#: utils/adt/jsonb.c:288 #, c-format msgid "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." msgstr "Dû à l'implémentation, les chaînes jsonb ne peuvent excéder %d octets." -#: utils/adt/jsonb.c:1172 +#: utils/adt/jsonb.c:1193 #, c-format msgid "argument %d: key must not be null" msgstr "argument %d : la clé ne doit pas être NULL" -#: utils/adt/jsonb.c:1760 +#: utils/adt/jsonb.c:1781 #, c-format msgid "object keys must be strings" msgstr "les clés de l'objet doivent être du texte" -#: utils/adt/jsonb.c:1923 +#: utils/adt/jsonb.c:1944 #, c-format msgid "cannot cast jsonb null to type %s" msgstr "ne peut pas convertir un jsonb NULL vers le type %s" -#: utils/adt/jsonb.c:1924 +#: utils/adt/jsonb.c:1945 #, c-format msgid "cannot cast jsonb string to type %s" msgstr "ne peut pas convertir la chaîne jsonb vers le type %s" -#: utils/adt/jsonb.c:1925 +#: utils/adt/jsonb.c:1946 #, c-format msgid "cannot cast jsonb numeric to type %s" msgstr "ne peut pas convertir le numeric jsonb vers le type %s" -#: utils/adt/jsonb.c:1926 +#: utils/adt/jsonb.c:1947 #, c-format msgid "cannot cast jsonb boolean to type %s" msgstr "ne peut pas convertir le booléen jsonb vers le type %s" -#: utils/adt/jsonb.c:1927 +#: utils/adt/jsonb.c:1948 #, c-format msgid "cannot cast jsonb array to type %s" msgstr "ne peut pas convertir le tableau jsonb vers le type %s" -#: utils/adt/jsonb.c:1928 +#: utils/adt/jsonb.c:1949 #, c-format msgid "cannot cast jsonb object to type %s" msgstr "ne peut pas convertir l'objet jsonb vers le type %s" -#: utils/adt/jsonb.c:1929 +#: utils/adt/jsonb.c:1950 #, c-format msgid "cannot cast jsonb array or object to type %s" msgstr "ne peut pas convertir le tableau ou l'objet jsonb vers le type %s" -#: utils/adt/jsonb_util.c:657 +#: utils/adt/jsonb_util.c:751 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "le nombre de paires d'objets jsonb dépasse le maximum autorisé (%zu)" -#: utils/adt/jsonb_util.c:698 +#: utils/adt/jsonb_util.c:792 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "le nombre d'éléments du tableau jsonb dépasse le maximum autorisé (%zu)" -#: utils/adt/jsonb_util.c:1569 utils/adt/jsonb_util.c:1589 +#: utils/adt/jsonb_util.c:1666 utils/adt/jsonb_util.c:1686 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "la taille totale des éléments du tableau jsonb dépasse le maximum de %u octets" -#: utils/adt/jsonb_util.c:1650 utils/adt/jsonb_util.c:1685 utils/adt/jsonb_util.c:1705 +#: utils/adt/jsonb_util.c:1747 utils/adt/jsonb_util.c:1782 utils/adt/jsonb_util.c:1802 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "la taille totale des éléments de l'objet JSON dépasse le maximum de %u octets" -#: utils/adt/jsonfuncs.c:522 utils/adt/jsonfuncs.c:687 utils/adt/jsonfuncs.c:2275 utils/adt/jsonfuncs.c:2715 utils/adt/jsonfuncs.c:3505 utils/adt/jsonfuncs.c:3836 +#: utils/adt/jsonbsubs.c:70 utils/adt/jsonbsubs.c:152 +#, fuzzy, c-format +#| msgid "this build does not support compression" +msgid "jsonb subscript does not support slices" +msgstr "cette construction ne supporte pas la compression" + +#: utils/adt/jsonbsubs.c:103 utils/adt/jsonbsubs.c:118 +#, fuzzy, c-format +#| msgid "log format \"%s\" is not supported" +msgid "subscript type is not supported" +msgstr "le format de trace « %s » n'est pas supporté" + +#: utils/adt/jsonbsubs.c:104 +#, c-format +msgid "Jsonb subscript must be coerced only to one type, integer or text." +msgstr "" + +#: utils/adt/jsonbsubs.c:119 +#, c-format +msgid "Jsonb subscript must be coerced to either integer or text" +msgstr "" + +#: utils/adt/jsonbsubs.c:140 +#, fuzzy, c-format +#| msgid "array subscript must have type integer" +msgid "jsonb subscript must have text type" +msgstr "l'indice d'un tableau doit être de type entier" + +#: utils/adt/jsonbsubs.c:208 +#, fuzzy, c-format +#| msgid "array subscript in assignment must not be null" +msgid "jsonb subscript in assignment must not be null" +msgstr "l'indice du tableau dans l'affectation ne doit pas être NULL" + +#: utils/adt/jsonfuncs.c:555 utils/adt/jsonfuncs.c:789 utils/adt/jsonfuncs.c:2471 utils/adt/jsonfuncs.c:2911 utils/adt/jsonfuncs.c:3700 utils/adt/jsonfuncs.c:4030 #, c-format msgid "cannot call %s on a scalar" msgstr "ne peut pas appeler %s sur un scalaire" -#: utils/adt/jsonfuncs.c:527 utils/adt/jsonfuncs.c:674 utils/adt/jsonfuncs.c:2717 utils/adt/jsonfuncs.c:3494 +#: utils/adt/jsonfuncs.c:560 utils/adt/jsonfuncs.c:776 utils/adt/jsonfuncs.c:2913 utils/adt/jsonfuncs.c:3689 #, c-format msgid "cannot call %s on an array" msgstr "ne peut pas appeler %s sur un tableau" -#: utils/adt/jsonfuncs.c:1590 utils/adt/jsonfuncs.c:1625 +#: utils/adt/jsonfuncs.c:685 +#, c-format +msgid "JSON data, line %d: %s%s%s" +msgstr "données JSON, ligne %d : %s%s%s" + +#: utils/adt/jsonfuncs.c:1823 utils/adt/jsonfuncs.c:1858 #, c-format msgid "cannot get array length of a scalar" msgstr "ne peut pas obtenir la longueur d'un scalaire" -#: utils/adt/jsonfuncs.c:1594 utils/adt/jsonfuncs.c:1613 +#: utils/adt/jsonfuncs.c:1827 utils/adt/jsonfuncs.c:1846 #, c-format msgid "cannot get array length of a non-array" msgstr "ne peut pas obtenir la longueur du tableau d'un objet qui n'est pas un tableau" -#: utils/adt/jsonfuncs.c:1690 +#: utils/adt/jsonfuncs.c:1923 #, c-format msgid "cannot call %s on a non-object" msgstr "ne peut pas appeler %s sur un non objet" -#: utils/adt/jsonfuncs.c:1948 +#: utils/adt/jsonfuncs.c:2162 #, c-format msgid "cannot deconstruct an array as an object" msgstr "ne peut pas déconstruire un tableau sous la forme d'un objet" -#: utils/adt/jsonfuncs.c:1960 +#: utils/adt/jsonfuncs.c:2174 #, c-format msgid "cannot deconstruct a scalar" msgstr "ne peut pas décomposer un scalaire" -#: utils/adt/jsonfuncs.c:2006 +#: utils/adt/jsonfuncs.c:2220 #, c-format msgid "cannot extract elements from a scalar" msgstr "ne peut pas extraire des éléments d'un scalaire" -#: utils/adt/jsonfuncs.c:2010 +#: utils/adt/jsonfuncs.c:2224 #, c-format msgid "cannot extract elements from an object" msgstr "ne peut pas extraire des éléments d'un objet" -#: utils/adt/jsonfuncs.c:2262 utils/adt/jsonfuncs.c:3720 +#: utils/adt/jsonfuncs.c:2458 utils/adt/jsonfuncs.c:3915 #, c-format msgid "cannot call %s on a non-array" msgstr "ne peut pas appeler %s sur un type non tableau" -#: utils/adt/jsonfuncs.c:2332 utils/adt/jsonfuncs.c:2337 utils/adt/jsonfuncs.c:2354 utils/adt/jsonfuncs.c:2360 +#: utils/adt/jsonfuncs.c:2528 utils/adt/jsonfuncs.c:2533 utils/adt/jsonfuncs.c:2550 utils/adt/jsonfuncs.c:2556 #, c-format msgid "expected JSON array" msgstr "attendait un tableau JSON" -#: utils/adt/jsonfuncs.c:2333 +#: utils/adt/jsonfuncs.c:2529 #, c-format msgid "See the value of key \"%s\"." msgstr "Voir la valeur de la clé « %s »." -#: utils/adt/jsonfuncs.c:2355 +#: utils/adt/jsonfuncs.c:2551 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "Voir l'élément de tableau %s de la clé « %s »." -#: utils/adt/jsonfuncs.c:2361 +#: utils/adt/jsonfuncs.c:2557 #, c-format msgid "See the array element %s." msgstr "Voir l'élément de tableau %s." -#: utils/adt/jsonfuncs.c:2396 +#: utils/adt/jsonfuncs.c:2592 #, c-format msgid "malformed JSON array" msgstr "tableau JSON mal formé" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3223 +#: utils/adt/jsonfuncs.c:3419 #, c-format msgid "first argument of %s must be a row type" msgstr "le premier argument de %s doit être un type row" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3247 +#: utils/adt/jsonfuncs.c:3443 #, c-format msgid "could not determine row type for result of %s" msgstr "n'a pas pu déterminer le type de ligne pour le résultat %s" -#: utils/adt/jsonfuncs.c:3249 +#: utils/adt/jsonfuncs.c:3445 #, c-format msgid "Provide a non-null record argument, or call the function in the FROM clause using a column definition list." msgstr "Fournissez comme argument un enregistrement non NULL, ou appelez la fonction dans la clause FROM en utilisant une liste de définition de colonnes." -#: utils/adt/jsonfuncs.c:3737 utils/adt/jsonfuncs.c:3818 +#: utils/adt/jsonfuncs.c:3932 utils/adt/jsonfuncs.c:4012 #, c-format msgid "argument of %s must be an array of objects" msgstr "l'argument de %s doit être un tableau d'objets" -#: utils/adt/jsonfuncs.c:3770 +#: utils/adt/jsonfuncs.c:3965 #, c-format msgid "cannot call %s on an object" msgstr "ne peut pas appeler %s sur un objet" -#: utils/adt/jsonfuncs.c:4247 utils/adt/jsonfuncs.c:4306 utils/adt/jsonfuncs.c:4386 +#: utils/adt/jsonfuncs.c:4373 utils/adt/jsonfuncs.c:4432 utils/adt/jsonfuncs.c:4512 #, c-format msgid "cannot delete from scalar" msgstr "ne peut pas supprimer à partir du scalaire" -#: utils/adt/jsonfuncs.c:4391 +#: utils/adt/jsonfuncs.c:4517 #, c-format msgid "cannot delete from object using integer index" msgstr "ne peut pas supprimer à partir de l'objet en utilisant l'index de l'entier" -#: utils/adt/jsonfuncs.c:4457 utils/adt/jsonfuncs.c:4549 +#: utils/adt/jsonfuncs.c:4585 utils/adt/jsonfuncs.c:4746 #, c-format msgid "cannot set path in scalar" msgstr "ne peut pas initialiser le chemin dans le scalaire" -#: utils/adt/jsonfuncs.c:4502 +#: utils/adt/jsonfuncs.c:4627 utils/adt/jsonfuncs.c:4669 #, c-format -msgid "cannot delete path in scalar" -msgstr "ne peut pas supprimer un chemin dans le scalaire" +msgid "null_value_treatment must be \"delete_key\", \"return_target\", \"use_json_null\", or \"raise_exception\"" +msgstr "null_value_treatment doit valoir \"delete_key\", \"return_target\", \"use_json_null\" ou \"raise_exception\"" + +#: utils/adt/jsonfuncs.c:4640 +#, c-format +msgid "JSON value must not be null" +msgstr "la valeur JSON ne doit pas être NULL" + +#: utils/adt/jsonfuncs.c:4641 +#, c-format +msgid "Exception was raised because null_value_treatment is \"raise_exception\"." +msgstr "Une exception a été levée parce que null_value_treatment vaut « raise_exception »." -#: utils/adt/jsonfuncs.c:4672 +#: utils/adt/jsonfuncs.c:4642 #, c-format -msgid "invalid concatenation of jsonb objects" -msgstr "concaténation invalide d'objets jsonb" +msgid "To avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not passed." +msgstr "Pour éviter cela, soit vous changez l'argument null_value_treatment soit vous vous assurez qu'un NULL SQL n'est pas fourni" -#: utils/adt/jsonfuncs.c:4706 +#: utils/adt/jsonfuncs.c:4697 +#, c-format +msgid "cannot delete path in scalar" +msgstr "ne peut pas supprimer un chemin dans le scalaire" + +#: utils/adt/jsonfuncs.c:4913 #, c-format msgid "path element at position %d is null" msgstr "l'élément de chemin à la position %d est nul" -#: utils/adt/jsonfuncs.c:4792 +#: utils/adt/jsonfuncs.c:4932 utils/adt/jsonfuncs.c:4963 utils/adt/jsonfuncs.c:5030 #, c-format msgid "cannot replace existing key" msgstr "ne peut pas remplacer une clé existante" -#: utils/adt/jsonfuncs.c:4793 +#: utils/adt/jsonfuncs.c:4933 utils/adt/jsonfuncs.c:4964 +#, c-format +msgid "The path assumes key is a composite object, but it is a scalar value." +msgstr "" + +#: utils/adt/jsonfuncs.c:5031 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "Essayez d'utiliser la fonction jsonb_set pour remplacer la valeur de la clé." -#: utils/adt/jsonfuncs.c:4875 +#: utils/adt/jsonfuncs.c:5135 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "l'élément du chemin à la position %d n'est pas un entier : « %s »" -#: utils/adt/jsonfuncs.c:4994 +#: utils/adt/jsonfuncs.c:5152 +#, fuzzy, c-format +#| msgid "path element at position %d is not an integer: \"%s\"" +msgid "path element at position %d is out of range: %d" +msgstr "l'élément du chemin à la position %d n'est pas un entier : « %s »" + +#: utils/adt/jsonfuncs.c:5304 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "mauvais type de drapeau, seuls les tableaux et scalaires sont autorisés" -#: utils/adt/jsonfuncs.c:5001 +#: utils/adt/jsonfuncs.c:5311 #, c-format msgid "flag array element is not a string" msgstr "le drapeau d'élément de tableau n'est pas une chaîne" -#: utils/adt/jsonfuncs.c:5002 utils/adt/jsonfuncs.c:5024 +#: utils/adt/jsonfuncs.c:5312 utils/adt/jsonfuncs.c:5334 #, c-format msgid "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all\"." msgstr "Les valeurs possibles sont : « string », « numeric », « boolean », « key » et « all »." -#: utils/adt/jsonfuncs.c:5022 +#: utils/adt/jsonfuncs.c:5332 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "mauvais drapeau dans le drapeau de tableau : « %s »" -#: utils/adt/jsonpath.c:360 +#: utils/adt/jsonpath.c:362 #, c-format msgid "@ is not allowed in root expressions" msgstr "@ n'est pas autorisé dans les expressions racine" -#: utils/adt/jsonpath.c:366 +#: utils/adt/jsonpath.c:368 #, c-format msgid "LAST is allowed only in array subscripts" msgstr "LAST n'est autorisé que dans les indices de tableau" -#: utils/adt/jsonpath_exec.c:340 +#: utils/adt/jsonpath_exec.c:360 #, c-format msgid "single boolean result is expected" msgstr "un résultat booléen unique est attendu" -#: utils/adt/jsonpath_exec.c:488 +#: utils/adt/jsonpath_exec.c:556 #, c-format msgid "\"vars\" argument is not an object" msgstr "l'argument « vars » n'est pas un objet" -#: utils/adt/jsonpath_exec.c:489 +#: utils/adt/jsonpath_exec.c:557 #, c-format msgid "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." msgstr "Les paramètres jsonpath doivent être encodés en paires clé-valeur d'objets « vars»" -#: utils/adt/jsonpath_exec.c:605 +#: utils/adt/jsonpath_exec.c:674 #, c-format msgid "JSON object does not contain key \"%s\"" msgstr "l'objet JSON ne contient pas la clé « %s »" -#: utils/adt/jsonpath_exec.c:617 +#: utils/adt/jsonpath_exec.c:686 #, c-format msgid "jsonpath member accessor can only be applied to an object" msgstr "l'accesseur du membre jsonpath ne peut être appliqué qu'à un objet" -#: utils/adt/jsonpath_exec.c:646 +#: utils/adt/jsonpath_exec.c:715 #, c-format msgid "jsonpath wildcard array accessor can only be applied to an array" msgstr "l'accesseur de tableau générique jsonpath ne peut être appliqué qu'à un tableau" -#: utils/adt/jsonpath_exec.c:694 +#: utils/adt/jsonpath_exec.c:763 #, c-format msgid "jsonpath array subscript is out of bounds" msgstr "indice du tableau jsonpath hors limites" -#: utils/adt/jsonpath_exec.c:751 +#: utils/adt/jsonpath_exec.c:820 #, c-format msgid "jsonpath array accessor can only be applied to an array" msgstr "l'accesseur de tableau jsonpath ne peut être appliqué qu'à un tableau" -#: utils/adt/jsonpath_exec.c:805 +#: utils/adt/jsonpath_exec.c:872 #, c-format msgid "jsonpath wildcard member accessor can only be applied to an object" msgstr "l'accesseur du membre générique jsonpath ne peut être appliqué qu'à un objet" -#: utils/adt/jsonpath_exec.c:935 +#: utils/adt/jsonpath_exec.c:1002 #, c-format msgid "jsonpath item method .%s() can only be applied to an array" msgstr "la méthode de l'objet jsonpath .%s() ne peut être appliquée qu'à un tableau" -#: utils/adt/jsonpath_exec.c:989 utils/adt/jsonpath_exec.c:1010 utils/adt/jsonpath_exec.c:1680 +#: utils/adt/jsonpath_exec.c:1055 #, c-format -msgid "jsonpath item method .%s() can only be applied to a numeric value" -msgstr "la méthode de l'objet jsonpath .%s() ne peut être appliquée qu'à une valeur numérique" +msgid "numeric argument of jsonpath item method .%s() is out of range for type double precision" +msgstr "l'argument numérique de la méthode jsonpath .%s() est en dehors des limites du type double precision" + +#: utils/adt/jsonpath_exec.c:1076 +#, c-format +msgid "string argument of jsonpath item method .%s() is not a valid representation of a double precision number" +msgstr "l'argument chaîne de la méthode jsonpath .%s() n'est pas une représentation valide d'un nombre à double précision" -#: utils/adt/jsonpath_exec.c:1023 +#: utils/adt/jsonpath_exec.c:1089 #, c-format msgid "jsonpath item method .%s() can only be applied to a string or numeric value" msgstr "la méthode de l'objet jsonpath .%s() ne peut être appliquée qu'à une chaîne ou une valeur numérique" -#: utils/adt/jsonpath_exec.c:1507 +#: utils/adt/jsonpath_exec.c:1579 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "l'opérande gauche de l'opérateur jsonpath %s n'est pas une valeur numérique unique" -#: utils/adt/jsonpath_exec.c:1514 +#: utils/adt/jsonpath_exec.c:1586 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "l'opérande droite de l'opérateur jsonpath %s n'est pas une valeur numérique unique" -#: utils/adt/jsonpath_exec.c:1582 +#: utils/adt/jsonpath_exec.c:1654 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "l'opérande de l'opérateur jsonpath unaire %s n'est pas une valeur numérique" -#: utils/adt/jsonpath_exec.c:1739 +#: utils/adt/jsonpath_exec.c:1752 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a numeric value" +msgstr "la méthode de l'objet jsonpath .%s() ne peut être appliquée qu'à une valeur numérique" + +#: utils/adt/jsonpath_exec.c:1792 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a string" +msgstr "la méthode de l'objet jsonpath .%s() ne peut être appliquée qu'à une chaîne" + +#: utils/adt/jsonpath_exec.c:1886 +#, c-format +msgid "datetime format is not recognized: \"%s\"" +msgstr "le format datetime n'est pas reconnu : « %s »" + +#: utils/adt/jsonpath_exec.c:1888 +#, c-format +msgid "Use a datetime template argument to specify the input data format." +msgstr "Utilisez un argument modèle de datetime pour indiquer le format de données en entrée." + +#: utils/adt/jsonpath_exec.c:1956 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "la méthode .%s() de l'entité jsonpath ne peut être appliquée qu'à un objet" -#: utils/adt/jsonpath_exec.c:1922 +#: utils/adt/jsonpath_exec.c:2138 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "n'a pas pu trouver la variable jsonpath « %s »" -#: utils/adt/jsonpath_exec.c:2169 +#: utils/adt/jsonpath_exec.c:2402 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "l'indice du tableau jsonpath n'est pas une valeur numérique unique" -#: utils/adt/jsonpath_exec.c:2181 +#: utils/adt/jsonpath_exec.c:2414 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "indice du tableau jsonpath hors des limites d'un entier" +#: utils/adt/jsonpath_exec.c:2591 +#, c-format +msgid "cannot convert value from %s to %s without time zone usage" +msgstr "ne peut pas convertir la valeur de %s à %s sans utilisation des fuseaux horaires" + +#: utils/adt/jsonpath_exec.c:2593 +#, c-format +msgid "Use *_tz() function for time zone support." +msgstr "Utilisez la fonction *_tz() pour le support des fuseaux horaires." + #: utils/adt/levenshtein.c:133 #, c-format msgid "levenshtein argument exceeds maximum length of %d characters" @@ -22326,7 +23696,7 @@ msgstr "l'argument levenshtein dépasse la longueur maximale de %d caractères" msgid "nondeterministic collations are not supported for LIKE" msgstr "les collationnements non déterministes ne sont pas supportés pour LIKE" -#: utils/adt/like.c:193 utils/adt/like_support.c:964 +#: utils/adt/like.c:193 utils/adt/like_support.c:1002 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "n'a pas pu déterminer le collationnement à utiliser pour ILIKE" @@ -22336,36 +23706,31 @@ msgstr "n'a pas pu déterminer le collationnement à utiliser pour ILIKE" msgid "nondeterministic collations are not supported for ILIKE" msgstr "les collationnements non déterministes ne sont pas supportés pour ILIKE" -#: utils/adt/like_match.c:107 utils/adt/like_match.c:167 +#: utils/adt/like_match.c:108 utils/adt/like_match.c:168 #, c-format msgid "LIKE pattern must not end with escape character" msgstr "le motif LIKE ne doit pas se terminer avec un caractère d'échappement" -#: utils/adt/like_match.c:292 utils/adt/regexp.c:702 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:700 #, c-format msgid "invalid escape string" msgstr "chaîne d'échappement invalide" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:703 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:701 #, c-format msgid "Escape string must be empty or one character." msgstr "La chaîne d'échappement doit être vide ou ne contenir qu'un caractère." -#: utils/adt/like_support.c:949 +#: utils/adt/like_support.c:987 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "la recherche insensible à la casse n'est pas supportée avec le type bytea" -#: utils/adt/like_support.c:1051 +#: utils/adt/like_support.c:1089 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "la recherche par expression rationnelle n'est pas supportée sur le type bytea" -#: utils/adt/lockfuncs.c:664 -#, c-format -msgid "cannot use advisory locks during a parallel operation" -msgstr "ne peut pas utiliser les verrous informatifs lors d'une opération parallèle" - #: utils/adt/mac.c:102 #, c-format msgid "invalid octet value in \"macaddr\" value: \"%s\"" @@ -22381,225 +23746,341 @@ msgstr "donnée macaddr8 hors de l'échelle pour être convertie en macaddr" msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." msgstr "Seules les adresses qui ont FF ou FE comme valeurs dans les 4è et 5è octets à partir de la gauche, par exemple xx:xx:xx:ff:fe:xx:xx:xx, , sont éligibles à être converties de macaddr8 à macaddr." -#: utils/adt/misc.c:225 +#: utils/adt/mcxtfuncs.c:204 +#, c-format +msgid "must be a superuser to log memory contexts" +msgstr "doit être super-utilisateur pour tracer les contextes mémoires" + +#: utils/adt/misc.c:243 #, c-format msgid "global tablespace never has databases" msgstr "le tablespace global n'a jamais de bases de données" -#: utils/adt/misc.c:246 +#: utils/adt/misc.c:265 #, c-format msgid "%u is not a tablespace OID" msgstr "%u n'est pas un OID de tablespace" -#: utils/adt/misc.c:435 +#: utils/adt/misc.c:455 msgid "unreserved" msgstr "non réservé" -#: utils/adt/misc.c:439 +#: utils/adt/misc.c:459 msgid "unreserved (cannot be function or type name)" msgstr "non réservé (ne peut pas être un nom de fonction ou de type)" -#: utils/adt/misc.c:443 +#: utils/adt/misc.c:463 msgid "reserved (can be function or type name)" msgstr "réservé (peut être un nom de fonction ou de type)" -#: utils/adt/misc.c:447 +#: utils/adt/misc.c:467 msgid "reserved" msgstr "réservé" -#: utils/adt/misc.c:621 utils/adt/misc.c:635 utils/adt/misc.c:674 utils/adt/misc.c:680 utils/adt/misc.c:686 utils/adt/misc.c:709 +#: utils/adt/misc.c:478 +msgid "can be bare label" +msgstr "" + +#: utils/adt/misc.c:483 +msgid "requires AS" +msgstr "" + +#: utils/adt/misc.c:730 utils/adt/misc.c:744 utils/adt/misc.c:783 utils/adt/misc.c:789 utils/adt/misc.c:795 utils/adt/misc.c:818 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "la chaîne n'est pas un identifiant valide : « %s »" -#: utils/adt/misc.c:623 +#: utils/adt/misc.c:732 #, c-format msgid "String has unclosed double quotes." msgstr "La chaîne des guillements doubles non fermés." -#: utils/adt/misc.c:637 +#: utils/adt/misc.c:746 #, c-format msgid "Quoted identifier must not be empty." msgstr "L'identifiant entre guillemets ne doit pas être vide." -#: utils/adt/misc.c:676 +#: utils/adt/misc.c:785 #, c-format msgid "No valid identifier before \".\"." msgstr "Pas d'identifiant valide avant « . »." -#: utils/adt/misc.c:682 +#: utils/adt/misc.c:791 #, c-format msgid "No valid identifier after \".\"." msgstr "Pas d'identifiant valide après « . »." -#: utils/adt/misc.c:743 +#: utils/adt/misc.c:849 #, c-format msgid "log format \"%s\" is not supported" msgstr "le format de trace « %s » n'est pas supporté" -#: utils/adt/misc.c:744 +#: utils/adt/misc.c:850 #, c-format msgid "The supported log formats are \"stderr\" and \"csvlog\"." msgstr "Les formats de traces supportés sont « stderr » et « csvlog »." -#: utils/adt/network.c:85 +#: utils/adt/multirangetypes.c:147 utils/adt/multirangetypes.c:160 utils/adt/multirangetypes.c:189 utils/adt/multirangetypes.c:259 utils/adt/multirangetypes.c:283 +#, fuzzy, c-format +#| msgid "malformed range literal: \"%s\"" +msgid "malformed multirange literal: \"%s\"" +msgstr "intervalle litéral mal formé : « %s »" + +#: utils/adt/multirangetypes.c:149 +#, c-format +msgid "Missing left bracket." +msgstr "Parenthèse gauche manquante." + +#: utils/adt/multirangetypes.c:191 +#, fuzzy, c-format +#| msgid "unexpected array start" +msgid "Expected range start." +msgstr "début de tableau inattendu" + +#: utils/adt/multirangetypes.c:261 +#, fuzzy, c-format +#| msgid "unexpected end of line" +msgid "Expected comma or end of multirange." +msgstr "fin de ligne inattendue" + +#: utils/adt/multirangetypes.c:285 +#, c-format +msgid "Junk after right bracket." +msgstr "Problème après la parenthèse droite." + +#: utils/adt/multirangetypes.c:971 +#, c-format +msgid "multiranges cannot be constructed from multi-dimensional arrays" +msgstr "des multiranges ne peuvent pas être construits à partir de tableaux multidimensionnels" + +#: utils/adt/multirangetypes.c:977 utils/adt/multirangetypes.c:1042 +#, c-format +msgid "type %u does not match constructor type" +msgstr "le type %u ne correspond pas un type constructeur" + +#: utils/adt/multirangetypes.c:999 +#, c-format +msgid "multirange values cannot contain NULL members" +msgstr "" + +#: utils/adt/multirangetypes.c:1349 +#, c-format +msgid "range_agg must be called with a range" +msgstr "range_agg doit être appelé avec un intervalle" + +#: utils/adt/multirangetypes.c:1420 +#, c-format +msgid "range_intersect_agg must be called with a multirange" +msgstr "" + +#: utils/adt/network.c:111 #, c-format msgid "invalid cidr value: \"%s\"" msgstr "valeur cidr invalide : « %s »" -#: utils/adt/network.c:86 utils/adt/network.c:216 +#: utils/adt/network.c:112 utils/adt/network.c:242 #, c-format msgid "Value has bits set to right of mask." msgstr "La valeur a des bits positionnés à la droite du masque." -#: utils/adt/network.c:127 utils/adt/network.c:800 utils/adt/network.c:825 utils/adt/network.c:850 +#: utils/adt/network.c:153 utils/adt/network.c:1199 utils/adt/network.c:1224 utils/adt/network.c:1249 #, c-format msgid "could not format inet value: %m" msgstr "n'a pas pu formater la valeur inet : %m" #. translator: %s is inet or cidr -#: utils/adt/network.c:184 +#: utils/adt/network.c:210 #, c-format msgid "invalid address family in external \"%s\" value" msgstr "famille d'adresses invalide dans la valeur externe « %s »" #. translator: %s is inet or cidr -#: utils/adt/network.c:191 +#: utils/adt/network.c:217 #, c-format msgid "invalid bits in external \"%s\" value" msgstr "bits invalides dans la valeur externe « %s »" #. translator: %s is inet or cidr -#: utils/adt/network.c:200 +#: utils/adt/network.c:226 #, c-format msgid "invalid length in external \"%s\" value" msgstr "longueur invalide dans la valeur externe « %s »" -#: utils/adt/network.c:215 +#: utils/adt/network.c:241 #, c-format msgid "invalid external \"cidr\" value" msgstr "valeur externe « cidr » invalide" -#: utils/adt/network.c:311 utils/adt/network.c:334 +#: utils/adt/network.c:337 utils/adt/network.c:360 #, c-format msgid "invalid mask length: %d" msgstr "longueur du masque invalide : %d" -#: utils/adt/network.c:868 +#: utils/adt/network.c:1267 #, c-format msgid "could not format cidr value: %m" msgstr "n'a pas pu formater la valeur cidr : %m" -#: utils/adt/network.c:1101 +#: utils/adt/network.c:1500 #, c-format msgid "cannot merge addresses from different families" msgstr "ne peut pas assembler les adresses de familles différentes" -#: utils/adt/network.c:1517 +#: utils/adt/network.c:1916 #, c-format msgid "cannot AND inet values of different sizes" msgstr "" "ne peut pas utiliser l'opérateur AND sur des champs de type inet de tailles\n" "différentes" -#: utils/adt/network.c:1549 +#: utils/adt/network.c:1948 #, c-format msgid "cannot OR inet values of different sizes" msgstr "" "ne peut pas utiliser l'opérateur OR sur des champs de type inet de tailles\n" "différentes" -#: utils/adt/network.c:1610 utils/adt/network.c:1686 +#: utils/adt/network.c:2009 utils/adt/network.c:2085 #, c-format msgid "result is out of range" msgstr "le résultat est en dehors des limites" -#: utils/adt/network.c:1651 +#: utils/adt/network.c:2050 #, c-format msgid "cannot subtract inet values of different sizes" msgstr "ne peut pas soustraire des valeurs inet de tailles différentes" -#: utils/adt/numeric.c:833 +#: utils/adt/numeric.c:975 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "signe invalide dans la valeur externe « numeric »" -#: utils/adt/numeric.c:839 +#: utils/adt/numeric.c:981 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "échelle invalide dans la valeur externe « numeric »" -#: utils/adt/numeric.c:848 +#: utils/adt/numeric.c:990 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "chiffre invalide dans la valeur externe « numeric »" -#: utils/adt/numeric.c:1046 utils/adt/numeric.c:1060 +#: utils/adt/numeric.c:1203 utils/adt/numeric.c:1217 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "la précision NUMERIC %d doit être comprise entre 1 et %d" -#: utils/adt/numeric.c:1051 +#: utils/adt/numeric.c:1208 #, c-format msgid "NUMERIC scale %d must be between 0 and precision %d" msgstr "l'échelle NUMERIC %d doit être comprise entre 0 et le précision %d" -#: utils/adt/numeric.c:1069 +#: utils/adt/numeric.c:1226 #, c-format msgid "invalid NUMERIC type modifier" msgstr "modificateur de type NUMERIC invalide" -#: utils/adt/numeric.c:1401 +#: utils/adt/numeric.c:1584 #, c-format msgid "start value cannot be NaN" msgstr "la valeur de démarrage ne peut pas être NaN" -#: utils/adt/numeric.c:1406 +#: utils/adt/numeric.c:1588 +#, c-format +msgid "start value cannot be infinity" +msgstr "la valeur de démarrage ne peut pas être infinity" + +#: utils/adt/numeric.c:1595 #, c-format msgid "stop value cannot be NaN" msgstr "la valeur d'arrêt ne peut pas être NaN" -#: utils/adt/numeric.c:1416 +#: utils/adt/numeric.c:1599 +#, c-format +msgid "stop value cannot be infinity" +msgstr "la valeur d'arrêt ne peut pas être infinity" + +#: utils/adt/numeric.c:1612 #, c-format msgid "step size cannot be NaN" msgstr "la taille du pas ne peut pas être NaN" -#: utils/adt/numeric.c:2857 utils/adt/numeric.c:5869 utils/adt/numeric.c:6324 utils/adt/numeric.c:8046 utils/adt/numeric.c:8471 utils/adt/numeric.c:8585 utils/adt/numeric.c:8658 +#: utils/adt/numeric.c:1616 +#, c-format +msgid "step size cannot be infinity" +msgstr "la taille du pas ne peut pas être infinity" + +#: utils/adt/numeric.c:3490 +#, c-format +msgid "factorial of a negative number is undefined" +msgstr "la factorielle d'un nombre négatif est indéfini" + +#: utils/adt/numeric.c:3500 utils/adt/numeric.c:6924 utils/adt/numeric.c:7408 utils/adt/numeric.c:9783 utils/adt/numeric.c:10221 utils/adt/numeric.c:10335 utils/adt/numeric.c:10408 #, c-format msgid "value overflows numeric format" msgstr "la valeur dépasse le format numeric" -#: utils/adt/numeric.c:3222 +#: utils/adt/numeric.c:4185 #, c-format msgid "cannot convert NaN to integer" msgstr "ne peut pas convertir NaN en un entier" -#: utils/adt/numeric.c:3305 +#: utils/adt/numeric.c:4189 +#, c-format +msgid "cannot convert infinity to integer" +msgstr "ne peut pas convertir infinity en integer" + +#: utils/adt/numeric.c:4263 #, c-format msgid "cannot convert NaN to bigint" msgstr "ne peut pas convertir NaN en un entier de type bigint" -#: utils/adt/numeric.c:3350 +#: utils/adt/numeric.c:4267 +#, c-format +msgid "cannot convert infinity to bigint" +msgstr "ne peut pas convertir infinity en bigint" + +#: utils/adt/numeric.c:4304 #, c-format msgid "cannot convert NaN to smallint" msgstr "ne peut pas convertir NaN en un entier de type smallint" -#: utils/adt/numeric.c:3387 utils/adt/numeric.c:3458 +#: utils/adt/numeric.c:4308 +#, c-format +msgid "cannot convert infinity to smallint" +msgstr "ne peut pas convertir infinity en smallint" + +#: utils/adt/numeric.c:4499 #, c-format -msgid "cannot convert infinity to numeric" -msgstr "ne peut pas convertir infinity en un type numeric" +msgid "cannot convert NaN to pg_lsn" +msgstr "ne peut pas convertir NaN en un pg_lsn" -#: utils/adt/numeric.c:6408 +#: utils/adt/numeric.c:4503 +#, c-format +msgid "cannot convert infinity to pg_lsn" +msgstr "ne peut pas convertir infinity en pg_lsn" + +#: utils/adt/numeric.c:4512 +#, c-format +msgid "pg_lsn out of range" +msgstr "pg_lsn hors des limites" + +#: utils/adt/numeric.c:7492 utils/adt/numeric.c:7539 #, c-format msgid "numeric field overflow" msgstr "champ numérique en dehors des limites" -#: utils/adt/numeric.c:6409 +#: utils/adt/numeric.c:7493 #, c-format msgid "A field with precision %d, scale %d must round to an absolute value less than %s%d." msgstr "Un champ de précision %d et d'échelle %d doit être arrondi à une valeur absolue inférieure à %s%d." -#: utils/adt/numutils.c:90 +#: utils/adt/numeric.c:7540 +#, c-format +msgid "A field with precision %d, scale %d cannot hold an infinite value." +msgstr "Un champ de précision %d et d'échelle %d ne peut pas contenir une valeur infinie." + +#: utils/adt/numutils.c:154 #, c-format msgid "value \"%s\" is out of range for 8-bit integer" msgstr "la valeur « %s » est en dehors des limites des entiers sur 8 bits" @@ -22609,22 +24090,22 @@ msgstr "la valeur « %s » est en dehors des limites des entiers sur 8 bits" msgid "invalid oidvector data" msgstr "donnée oidvector invalide" -#: utils/adt/oracle_compat.c:896 +#: utils/adt/oracle_compat.c:970 #, c-format msgid "requested character too large" msgstr "caractère demandé trop long" -#: utils/adt/oracle_compat.c:946 utils/adt/oracle_compat.c:1008 +#: utils/adt/oracle_compat.c:1020 utils/adt/oracle_compat.c:1082 #, c-format msgid "requested character too large for encoding: %d" msgstr "caractère demandé trop long pour l'encodage : %d" -#: utils/adt/oracle_compat.c:987 +#: utils/adt/oracle_compat.c:1061 #, c-format msgid "requested character not valid for encoding: %d" msgstr "caractère demandé invalide pour l'encodage : %d" -#: utils/adt/oracle_compat.c:1001 +#: utils/adt/oracle_compat.c:1075 #, c-format msgid "null character not permitted" msgstr "caractère nul interdit" @@ -22634,515 +24115,524 @@ msgstr "caractère nul interdit" msgid "percentile value %g is not between 0 and 1" msgstr "la valeur centile %g n'est pas entre 0 et 1" -#: utils/adt/pg_locale.c:1097 +#: utils/adt/pg_locale.c:1233 #, c-format msgid "Apply system library package updates." msgstr "Applique les mises à jour du paquet de bibliothèque système." -#: utils/adt/pg_locale.c:1312 +#: utils/adt/pg_locale.c:1447 #, c-format msgid "could not create locale \"%s\": %m" msgstr "n'a pas pu créer la locale « %s » : %m" -#: utils/adt/pg_locale.c:1315 +#: utils/adt/pg_locale.c:1450 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "Le système d'exploitation n'a pas pu trouver des données de locale pour la locale « %s »." -#: utils/adt/pg_locale.c:1417 +#: utils/adt/pg_locale.c:1550 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "" "les collationnements avec des valeurs différents pour le tri et le jeu de\n" "caractères ne sont pas supportés sur cette plateforme" -#: utils/adt/pg_locale.c:1426 +#: utils/adt/pg_locale.c:1559 #, c-format msgid "collation provider LIBC is not supported on this platform" msgstr "le fournisseur du collationnement, LIBC, n'est pas supporté sur cette plateforme" -#: utils/adt/pg_locale.c:1438 +#: utils/adt/pg_locale.c:1571 #, c-format msgid "collations with different collate and ctype values are not supported by ICU" msgstr "les collationnements avec des valeurs différentes pour le tri (collate) et le jeu de caractères (ctype) ne sont pas supportés par ICU" -#: utils/adt/pg_locale.c:1444 utils/adt/pg_locale.c:1535 utils/adt/pg_locale.c:1753 +#: utils/adt/pg_locale.c:1577 utils/adt/pg_locale.c:1629 utils/adt/pg_locale.c:1951 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "n'a pas pu ouvrir le collationneur pour la locale « %s » : %s" -#: utils/adt/pg_locale.c:1458 +#: utils/adt/pg_locale.c:1591 #, c-format msgid "ICU is not supported in this build" msgstr "ICU n'est pas supporté dans cette installation" -#: utils/adt/pg_locale.c:1459 +#: utils/adt/pg_locale.c:1592 #, c-format msgid "You need to rebuild PostgreSQL using --with-icu." msgstr "Vous devez recompiler PostgreSQL en utilisant --with-icu." -#: utils/adt/pg_locale.c:1479 -#, c-format -msgid "collation \"%s\" has no actual version, but a version was specified" -msgstr "le collationnement « %s » n'a pas de version réelle mais une version était indiquée" - -#: utils/adt/pg_locale.c:1486 +#: utils/adt/pg_locale.c:1660 #, c-format -msgid "collation \"%s\" has version mismatch" -msgstr "le collationnement « %s » a des versions différentes" +msgid "could not load locale \"%s\"" +msgstr "n'a pas pu charger la locale « %s »" -#: utils/adt/pg_locale.c:1488 +#: utils/adt/pg_locale.c:1685 #, c-format -msgid "The collation in the database was created using version %s, but the operating system provides version %s." -msgstr "Le collationnement dans la base de données a été créé en utilisant la version %s mais le système d'exploitation fournit la version %s." +msgid "could not get collation version for locale \"%s\": error code %lu" +msgstr "n'a pas obtenir la version du collationnement pour la locale « %s » : code d'erreur %lu" -#: utils/adt/pg_locale.c:1491 +#: utils/adt/pg_locale.c:1766 #, c-format -msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." -msgstr "Reconstruisez tous les objets affectés par ce collationnement, et lancez ALTER COLLATION %s REFRESH VERSION, ou construisez PostgreSQL avec la bonne version de bibliothèque." +msgid "encoding \"%s\" not supported by ICU" +msgstr "encodage « %s » non supporté par ICU" -#: utils/adt/pg_locale.c:1575 +#: utils/adt/pg_locale.c:1773 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "n'a pas pu ouvrir le convertisseur ICU pour l'encodage « %s » : %s" -#: utils/adt/pg_locale.c:1606 utils/adt/pg_locale.c:1615 utils/adt/pg_locale.c:1644 utils/adt/pg_locale.c:1654 +#: utils/adt/pg_locale.c:1804 utils/adt/pg_locale.c:1813 utils/adt/pg_locale.c:1842 utils/adt/pg_locale.c:1852 #, c-format msgid "%s failed: %s" msgstr "échec de %s : %s" -#: utils/adt/pg_locale.c:1926 +#: utils/adt/pg_locale.c:2124 #, c-format msgid "invalid multibyte character for locale" msgstr "caractère multi-octets invalide pour la locale" -#: utils/adt/pg_locale.c:1927 +#: utils/adt/pg_locale.c:2125 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "" "La locale LC_CTYPE du serveur est probablement incompatible avec l'encodage\n" "de la base de données." -#: utils/adt/pg_upgrade_support.c:29 +#: utils/adt/pg_lsn.c:263 +#, c-format +msgid "cannot add NaN to pg_lsn" +msgstr "ne peut pas ajouter NaN à pg_lsn" + +#: utils/adt/pg_lsn.c:297 +#, c-format +msgid "cannot subtract NaN from pg_lsn" +msgstr "ne peut pas soustraire NaN de pg_lsn" + +#: utils/adt/pg_upgrade_support.c:30 #, c-format msgid "function can only be called when server is in binary upgrade mode" msgstr "la fonction peut seulement être appelée quand le serveur est en mode de mise à jour binaire" -#: utils/adt/pgstatfuncs.c:479 +#: utils/adt/pgstatfuncs.c:503 #, c-format msgid "invalid command name: \"%s\"" msgstr "nom de commande invalide : « %s »" -#: utils/adt/pseudotypes.c:247 +#: utils/adt/pseudotypes.c:58 utils/adt/pseudotypes.c:92 +#, c-format +msgid "cannot display a value of type %s" +msgstr "ne peut pas afficher une valeur de type %s" + +#: utils/adt/pseudotypes.c:321 #, c-format msgid "cannot accept a value of a shell type" msgstr "ne peut pas accepter une valeur de type shell" -#: utils/adt/pseudotypes.c:260 +#: utils/adt/pseudotypes.c:331 #, c-format msgid "cannot display a value of a shell type" msgstr "ne peut pas afficher une valeur de type shell" -#: utils/adt/pseudotypes.c:350 utils/adt/pseudotypes.c:376 -#, c-format -msgid "cannot output a value of type %s" -msgstr "ne peut pas afficher une valeur de type %s" - -#: utils/adt/pseudotypes.c:403 -#, c-format -msgid "cannot display a value of type %s" -msgstr "ne peut pas afficher une valeur de type %s" - -#: utils/adt/rangetypes.c:406 +#: utils/adt/rangetypes.c:404 #, c-format msgid "range constructor flags argument must not be null" msgstr "l'argument flags du contructeur d'intervalle ne doit pas être NULL" -#: utils/adt/rangetypes.c:993 +#: utils/adt/rangetypes.c:1003 #, c-format msgid "result of range difference would not be contiguous" msgstr "le résultat de la différence d'intervalle de valeur ne sera pas contigu" -#: utils/adt/rangetypes.c:1054 +#: utils/adt/rangetypes.c:1064 #, c-format msgid "result of range union would not be contiguous" msgstr "le résultat de l'union d'intervalle pourrait ne pas être contigü" -#: utils/adt/rangetypes.c:1600 +#: utils/adt/rangetypes.c:1214 +#, c-format +msgid "range_intersect_agg must be called with a range" +msgstr "" + +#: utils/adt/rangetypes.c:1689 #, c-format msgid "range lower bound must be less than or equal to range upper bound" msgstr "" "la limite inférieure de l'intervalle de valeurs doit être inférieure ou égale\n" "à la limite supérieure de l'intervalle de valeurs" -#: utils/adt/rangetypes.c:1983 utils/adt/rangetypes.c:1996 utils/adt/rangetypes.c:2010 +#: utils/adt/rangetypes.c:2112 utils/adt/rangetypes.c:2125 utils/adt/rangetypes.c:2139 #, c-format msgid "invalid range bound flags" msgstr "drapeaux de limite de l'intervalle invalides" -#: utils/adt/rangetypes.c:1984 utils/adt/rangetypes.c:1997 utils/adt/rangetypes.c:2011 +#: utils/adt/rangetypes.c:2113 utils/adt/rangetypes.c:2126 utils/adt/rangetypes.c:2140 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "Les valeurs valides sont entre « [] », « [) », « (] » et « () »." -#: utils/adt/rangetypes.c:2076 utils/adt/rangetypes.c:2093 utils/adt/rangetypes.c:2106 utils/adt/rangetypes.c:2124 utils/adt/rangetypes.c:2135 utils/adt/rangetypes.c:2179 utils/adt/rangetypes.c:2187 +#: utils/adt/rangetypes.c:2205 utils/adt/rangetypes.c:2222 utils/adt/rangetypes.c:2235 utils/adt/rangetypes.c:2253 utils/adt/rangetypes.c:2264 utils/adt/rangetypes.c:2308 utils/adt/rangetypes.c:2316 #, c-format msgid "malformed range literal: \"%s\"" msgstr "intervalle litéral mal formé : « %s »" -#: utils/adt/rangetypes.c:2078 +#: utils/adt/rangetypes.c:2207 #, c-format msgid "Junk after \"empty\" key word." msgstr "Cochonnerie après le mot clé « empty »." -#: utils/adt/rangetypes.c:2095 +#: utils/adt/rangetypes.c:2224 #, c-format msgid "Missing left parenthesis or bracket." msgstr "Parenthèse gauche ou crochet manquant." -#: utils/adt/rangetypes.c:2108 +#: utils/adt/rangetypes.c:2237 #, c-format msgid "Missing comma after lower bound." msgstr "Virgule manquante après une limite basse." -#: utils/adt/rangetypes.c:2126 +#: utils/adt/rangetypes.c:2255 #, c-format msgid "Too many commas." msgstr "Trop de virgules." -#: utils/adt/rangetypes.c:2137 +#: utils/adt/rangetypes.c:2266 #, c-format msgid "Junk after right parenthesis or bracket." msgstr "Problème après la parenthèse droite ou le crochet droit." -#: utils/adt/regexp.c:289 utils/adt/regexp.c:1490 utils/adt/varlena.c:4451 +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4560 #, c-format msgid "regular expression failed: %s" msgstr "l'expression rationnelle a échoué : %s" #: utils/adt/regexp.c:426 #, c-format -msgid "invalid regular expression option: \"%c\"" -msgstr "option d'expression rationnelle invalide : « %c »" +msgid "invalid regular expression option: \"%.*s\"" +msgstr "option d'expression rationnelle invalide : « %.*s »" -#: utils/adt/regexp.c:838 +#: utils/adt/regexp.c:836 #, c-format msgid "SQL regular expression may not contain more than two escape-double-quote separators" msgstr "une expression régulière SQL ne peut contenir plus de deux guillemets doubles comme séparateur d'échappement" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:924 utils/adt/regexp.c:1307 utils/adt/regexp.c:1362 +#: utils/adt/regexp.c:981 utils/adt/regexp.c:1363 utils/adt/regexp.c:1418 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s ne supporte pas l'option « global »" -#: utils/adt/regexp.c:926 +#: utils/adt/regexp.c:983 #, c-format msgid "Use the regexp_matches function instead." msgstr "Utilisez la foncction regexp_matches à la place." -#: utils/adt/regexp.c:1108 +#: utils/adt/regexp.c:1165 #, c-format msgid "too many regular expression matches" msgstr "trop de correspondances pour l'expression rationnelle" -#: utils/adt/regproc.c:106 +#: utils/adt/regproc.c:105 #, c-format msgid "more than one function named \"%s\"" msgstr "il existe plus d'une fonction nommée « %s »" -#: utils/adt/regproc.c:524 +#: utils/adt/regproc.c:542 #, c-format msgid "more than one operator named %s" msgstr "il existe plus d'un opérateur nommé%s" -#: utils/adt/regproc.c:696 utils/adt/regproc.c:737 utils/adt/regproc.c:1865 utils/adt/ruleutils.c:9210 utils/adt/ruleutils.c:9378 +#: utils/adt/regproc.c:714 utils/adt/regproc.c:755 utils/adt/regproc.c:2054 utils/adt/ruleutils.c:9641 utils/adt/ruleutils.c:9810 #, c-format msgid "too many arguments" msgstr "trop d'arguments" -#: utils/adt/regproc.c:697 utils/adt/regproc.c:738 +#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 #, c-format msgid "Provide two argument types for operator." msgstr "Fournit deux types d'argument pour l'opérateur." -#: utils/adt/regproc.c:1449 utils/adt/regproc.c:1473 utils/adt/regproc.c:1574 utils/adt/regproc.c:1598 utils/adt/regproc.c:1700 utils/adt/regproc.c:1705 utils/adt/varlena.c:3600 utils/adt/varlena.c:3605 +#: utils/adt/regproc.c:1638 utils/adt/regproc.c:1662 utils/adt/regproc.c:1763 utils/adt/regproc.c:1787 utils/adt/regproc.c:1889 utils/adt/regproc.c:1894 utils/adt/varlena.c:3709 utils/adt/varlena.c:3714 #, c-format msgid "invalid name syntax" msgstr "syntaxe du nom invalide" -#: utils/adt/regproc.c:1763 +#: utils/adt/regproc.c:1952 #, c-format msgid "expected a left parenthesis" msgstr "attendait une parenthèse gauche" -#: utils/adt/regproc.c:1779 +#: utils/adt/regproc.c:1968 #, c-format msgid "expected a right parenthesis" msgstr "attendait une parenthèse droite" -#: utils/adt/regproc.c:1798 +#: utils/adt/regproc.c:1987 #, c-format msgid "expected a type name" msgstr "attendait un nom de type" -#: utils/adt/regproc.c:1830 +#: utils/adt/regproc.c:2019 #, c-format msgid "improper type name" msgstr "nom du type invalide" -#: utils/adt/ri_triggers.c:298 utils/adt/ri_triggers.c:1534 utils/adt/ri_triggers.c:2465 +#: utils/adt/ri_triggers.c:300 utils/adt/ri_triggers.c:1545 utils/adt/ri_triggers.c:2530 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "" "une instruction insert ou update sur la table « %s » viole la contrainte de clé\n" "étrangère « %s »" -#: utils/adt/ri_triggers.c:301 utils/adt/ri_triggers.c:1537 +#: utils/adt/ri_triggers.c:303 utils/adt/ri_triggers.c:1548 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL n'autorise pas le mixage de valeurs clés NULL et non NULL." -#: utils/adt/ri_triggers.c:1932 +#: utils/adt/ri_triggers.c:1965 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "la fonction « %s » doit être exécutée pour l'instruction INSERT" -#: utils/adt/ri_triggers.c:1938 +#: utils/adt/ri_triggers.c:1971 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "la fonction « %s » doit être exécutée pour l'instruction UPDATE" -#: utils/adt/ri_triggers.c:1944 +#: utils/adt/ri_triggers.c:1977 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "la fonction « %s » doit être exécutée pour l'instruction DELETE" -#: utils/adt/ri_triggers.c:1967 +#: utils/adt/ri_triggers.c:2000 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "aucune entrée pg_constraint pour le trigger « %s » sur la table « %s »" -#: utils/adt/ri_triggers.c:1969 +#: utils/adt/ri_triggers.c:2002 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "" "Supprimez ce trigger sur une intégrité référentielle et ses enfants,\n" "puis faites un ALTER TABLE ADD CONSTRAINT." -#: utils/adt/ri_triggers.c:2291 +#: utils/adt/ri_triggers.c:2355 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "" "la requête d'intégrité référentielle sur « %s » à partir de la contrainte « %s »\n" "sur « %s » donne des résultats inattendus" -#: utils/adt/ri_triggers.c:2295 +#: utils/adt/ri_triggers.c:2359 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Ceci est certainement dû à une règle qui a ré-écrit la requête." -#: utils/adt/ri_triggers.c:2456 +#: utils/adt/ri_triggers.c:2520 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "la suppression de la partition « %s » viole la contrainte de clé étrangère « %s »" -#: utils/adt/ri_triggers.c:2459 utils/adt/ri_triggers.c:2483 +#: utils/adt/ri_triggers.c:2523 utils/adt/ri_triggers.c:2548 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "La clé (%s)=(%s) est toujours référencée à partir de la table « %s »." -#: utils/adt/ri_triggers.c:2469 +#: utils/adt/ri_triggers.c:2534 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "La clé (%s)=(%s) n'est pas présente dans la table « %s »." -#: utils/adt/ri_triggers.c:2472 +#: utils/adt/ri_triggers.c:2537 #, c-format msgid "Key is not present in table \"%s\"." msgstr "La clé n'est pas présente dans la table « %s »." -#: utils/adt/ri_triggers.c:2478 +#: utils/adt/ri_triggers.c:2543 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "UPDATE ou DELETE sur la table « %s » viole la contrainte de clé étrangère « %s » de la table « %s »" -#: utils/adt/ri_triggers.c:2486 +#: utils/adt/ri_triggers.c:2551 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "La clé est toujours référencée à partir de la table « %s »." -#: utils/adt/rowtypes.c:104 utils/adt/rowtypes.c:482 +#: utils/adt/rowtypes.c:105 utils/adt/rowtypes.c:483 #, c-format msgid "input of anonymous composite types is not implemented" msgstr "l'ajout de colonnes ayant un type composé n'est pas implémenté" -#: utils/adt/rowtypes.c:156 utils/adt/rowtypes.c:185 utils/adt/rowtypes.c:208 utils/adt/rowtypes.c:216 utils/adt/rowtypes.c:268 utils/adt/rowtypes.c:276 +#: utils/adt/rowtypes.c:157 utils/adt/rowtypes.c:186 utils/adt/rowtypes.c:209 utils/adt/rowtypes.c:217 utils/adt/rowtypes.c:269 utils/adt/rowtypes.c:277 #, c-format msgid "malformed record literal: \"%s\"" msgstr "enregistrement litéral invalide : « %s »" -#: utils/adt/rowtypes.c:157 +#: utils/adt/rowtypes.c:158 #, c-format msgid "Missing left parenthesis." msgstr "Parenthèse gauche manquante." -#: utils/adt/rowtypes.c:186 +#: utils/adt/rowtypes.c:187 #, c-format msgid "Too few columns." msgstr "Pas assez de colonnes." -#: utils/adt/rowtypes.c:269 +#: utils/adt/rowtypes.c:270 #, c-format msgid "Too many columns." msgstr "Trop de colonnes." -#: utils/adt/rowtypes.c:277 +#: utils/adt/rowtypes.c:278 #, c-format msgid "Junk after right parenthesis." msgstr "Problème après la parenthèse droite." -#: utils/adt/rowtypes.c:531 +#: utils/adt/rowtypes.c:532 #, c-format msgid "wrong number of columns: %d, expected %d" msgstr "mauvais nombre de colonnes : %d, alors que %d attendu" -#: utils/adt/rowtypes.c:559 +#: utils/adt/rowtypes.c:574 #, c-format -msgid "wrong data type: %u, expected %u" -msgstr "mauvais type de données : %u, alors que %u attendu" +msgid "binary data has type %u (%s) instead of expected %u (%s) in record column %d" +msgstr "" -#: utils/adt/rowtypes.c:620 +#: utils/adt/rowtypes.c:641 #, c-format msgid "improper binary format in record column %d" msgstr "format binaire invalide dans l'enregistrement de la colonne %d" -#: utils/adt/rowtypes.c:911 utils/adt/rowtypes.c:1155 utils/adt/rowtypes.c:1414 utils/adt/rowtypes.c:1658 +#: utils/adt/rowtypes.c:932 utils/adt/rowtypes.c:1178 utils/adt/rowtypes.c:1436 utils/adt/rowtypes.c:1682 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "" "ne peut pas comparer les types de colonnes non similaires %s et %s pour la\n" "colonne %d de l'enregistrement" -#: utils/adt/rowtypes.c:1000 utils/adt/rowtypes.c:1226 utils/adt/rowtypes.c:1509 utils/adt/rowtypes.c:1694 +#: utils/adt/rowtypes.c:1023 utils/adt/rowtypes.c:1248 utils/adt/rowtypes.c:1533 utils/adt/rowtypes.c:1718 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "" "ne peut pas comparer les types d'enregistrement avec des numéros différents\n" "des colonnes" -#: utils/adt/ruleutils.c:4885 +#: utils/adt/ruleutils.c:5068 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "la règle « %s » a un type d'événement %d non supporté" -#: utils/adt/timestamp.c:107 +#: utils/adt/timestamp.c:109 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "la précision de TIMESTAMP(%d)%s ne doit pas être négative" -#: utils/adt/timestamp.c:113 +#: utils/adt/timestamp.c:115 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "la précision de TIMESTAMP(%d)%s est réduite au maximum autorisé, %d" -#: utils/adt/timestamp.c:176 utils/adt/timestamp.c:419 utils/misc/guc.c:11607 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12459 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp en dehors de limites : « %s »" -#: utils/adt/timestamp.c:365 +#: utils/adt/timestamp.c:374 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "la précision de timestamp(%d) doit être comprise entre %d et %d" -#: utils/adt/timestamp.c:481 +#: utils/adt/timestamp.c:498 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "Les fuseaux horaires numériques doivent avoir « - » ou « + » comme premier caractère." -#: utils/adt/timestamp.c:494 +#: utils/adt/timestamp.c:511 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "le fuseau horaire numérique « %s » est en dehors des limites" -#: utils/adt/timestamp.c:596 utils/adt/timestamp.c:606 utils/adt/timestamp.c:614 +#: utils/adt/timestamp.c:607 utils/adt/timestamp.c:617 utils/adt/timestamp.c:625 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestamp en dehors de limites : %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:715 +#: utils/adt/timestamp.c:726 #, c-format msgid "timestamp cannot be NaN" msgstr "timestamp ne peut pas valoir NaN" -#: utils/adt/timestamp.c:733 utils/adt/timestamp.c:745 +#: utils/adt/timestamp.c:744 utils/adt/timestamp.c:756 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "timestamp en dehors de limites : « %g »" -#: utils/adt/timestamp.c:930 utils/adt/timestamp.c:1504 utils/adt/timestamp.c:1937 utils/adt/timestamp.c:3035 utils/adt/timestamp.c:3040 utils/adt/timestamp.c:3045 utils/adt/timestamp.c:3095 utils/adt/timestamp.c:3102 utils/adt/timestamp.c:3109 utils/adt/timestamp.c:3129 utils/adt/timestamp.c:3136 utils/adt/timestamp.c:3143 utils/adt/timestamp.c:3173 utils/adt/timestamp.c:3181 utils/adt/timestamp.c:3225 utils/adt/timestamp.c:3652 -#: utils/adt/timestamp.c:3777 utils/adt/timestamp.c:4237 -#, c-format -msgid "interval out of range" -msgstr "intervalle en dehors des limites" - -#: utils/adt/timestamp.c:1057 utils/adt/timestamp.c:1090 +#: utils/adt/timestamp.c:1068 utils/adt/timestamp.c:1101 #, c-format msgid "invalid INTERVAL type modifier" msgstr "modificateur de type INTERVAL invalide" -#: utils/adt/timestamp.c:1073 +#: utils/adt/timestamp.c:1084 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "la précision de l'intervalle INTERVAL(%d) ne doit pas être négative" -#: utils/adt/timestamp.c:1079 +#: utils/adt/timestamp.c:1090 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "La précision de l'intervalle INTERVAL(%d) doit être réduit au maximum permis, %d" -#: utils/adt/timestamp.c:1461 +#: utils/adt/timestamp.c:1472 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "la précision de interval(%d) doit être comprise entre %d et %d" -#: utils/adt/timestamp.c:2636 +#: utils/adt/timestamp.c:2660 #, c-format msgid "cannot subtract infinite timestamps" msgstr "ne peut pas soustraire les valeurs timestamps infinies" -#: utils/adt/timestamp.c:3905 utils/adt/timestamp.c:4497 utils/adt/timestamp.c:4664 utils/adt/timestamp.c:4685 +#: utils/adt/timestamp.c:3837 utils/adt/timestamp.c:4015 +#, c-format +msgid "origin out of range" +msgstr "origine hors des limites" + +#: utils/adt/timestamp.c:3842 utils/adt/timestamp.c:4020 +#, c-format +msgid "timestamps cannot be binned into intervals containing months or years" +msgstr "" + +#: utils/adt/timestamp.c:3973 utils/adt/timestamp.c:4610 utils/adt/timestamp.c:4810 utils/adt/timestamp.c:4857 #, c-format msgid "timestamp units \"%s\" not supported" msgstr "les unités timestamp « %s » ne sont pas supportées" -#: utils/adt/timestamp.c:3919 utils/adt/timestamp.c:4451 utils/adt/timestamp.c:4695 +#: utils/adt/timestamp.c:3987 utils/adt/timestamp.c:4564 utils/adt/timestamp.c:4867 #, c-format msgid "timestamp units \"%s\" not recognized" msgstr "les unité « %s » ne sont pas reconnues pour le type timestamp" -#: utils/adt/timestamp.c:4049 utils/adt/timestamp.c:4492 utils/adt/timestamp.c:4865 utils/adt/timestamp.c:4887 +#: utils/adt/timestamp.c:4161 utils/adt/timestamp.c:4605 utils/adt/timestamp.c:5081 utils/adt/timestamp.c:5129 #, c-format msgid "timestamp with time zone units \"%s\" not supported" msgstr "les unités « %s » ne sont pas supportées pour le type « timestamp with time zone »" -#: utils/adt/timestamp.c:4066 utils/adt/timestamp.c:4446 utils/adt/timestamp.c:4896 +#: utils/adt/timestamp.c:4178 utils/adt/timestamp.c:4559 utils/adt/timestamp.c:5138 #, c-format msgid "timestamp with time zone units \"%s\" not recognized" msgstr "les unités « %s » ne sont pas reconnues pour le type « timestamp with time zone »" -#: utils/adt/timestamp.c:4224 +#: utils/adt/timestamp.c:4336 #, c-format msgid "interval units \"%s\" not supported because months usually have fractional weeks" msgstr "unités d'intervalle « %s » non supporté car les mois ont généralement des semaines fractionnaires" -#: utils/adt/timestamp.c:4230 utils/adt/timestamp.c:4990 +#: utils/adt/timestamp.c:4342 utils/adt/timestamp.c:5261 #, c-format msgid "interval units \"%s\" not supported" msgstr "les unités « %s » ne sont pas supportées pour le type interval" -#: utils/adt/timestamp.c:4246 utils/adt/timestamp.c:5013 +#: utils/adt/timestamp.c:4358 utils/adt/timestamp.c:5322 #, c-format msgid "interval units \"%s\" not recognized" msgstr "les unités « %s » ne sont pas reconnues pour le type interval" @@ -23167,7 +24657,7 @@ msgstr "suppress_redundant_updates_trigger : doit être appelé avant une mise msgid "suppress_redundant_updates_trigger: must be called for each row" msgstr "suppress_redundant_updates_trigger : doit être appelé pour chaque ligne" -#: utils/adt/tsgistidx.c:81 +#: utils/adt/tsgistidx.c:92 #, c-format msgid "gtsvector_in not implemented" msgstr "gtsvector_in n'est pas encore implémenté" @@ -23219,7 +24709,7 @@ msgstr "" "la requête de recherche plein texte ne contient que des termes courants\n" "ou ne contient pas de lexemes, ignoré" -#: utils/adt/tsquery_op.c:123 +#: utils/adt/tsquery_op.c:124 #, c-format msgid "distance in phrase operator should be non-negative and less than %d" msgstr "la distance dans l'opérateur de phrase devrait pas positif et inférieur à %d" @@ -23229,89 +24719,89 @@ msgstr "la distance dans l'opérateur de phrase devrait pas positif et inférieu msgid "ts_rewrite query must return two tsquery columns" msgstr "la requête ts_rewrite doit renvoyer deux colonnes tsquery" -#: utils/adt/tsrank.c:413 +#: utils/adt/tsrank.c:412 #, c-format msgid "array of weight must be one-dimensional" msgstr "le tableau de poids doit avoir une seule dimension" -#: utils/adt/tsrank.c:418 +#: utils/adt/tsrank.c:417 #, c-format msgid "array of weight is too short" msgstr "le tableau de poids est trop court" -#: utils/adt/tsrank.c:423 +#: utils/adt/tsrank.c:422 #, c-format msgid "array of weight must not contain nulls" msgstr "le tableau de poids ne doit pas contenir de valeurs NULL" -#: utils/adt/tsrank.c:432 utils/adt/tsrank.c:869 +#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:871 #, c-format msgid "weight out of range" msgstr "poids en dehors des limites" -#: utils/adt/tsvector.c:214 +#: utils/adt/tsvector.c:215 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "le mot est trop long (%ld octets, max %ld octets)" -#: utils/adt/tsvector.c:221 +#: utils/adt/tsvector.c:222 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "la chaîne est trop longue pour tsvector (%ld octets, max %ld octets)" -#: utils/adt/tsvector_op.c:321 utils/adt/tsvector_op.c:608 utils/adt/tsvector_op.c:776 +#: utils/adt/tsvector_op.c:328 utils/adt/tsvector_op.c:608 utils/adt/tsvector_op.c:770 #, c-format msgid "lexeme array may not contain nulls" msgstr "le tableau de lexème ne doit pas contenir de valeurs NULL" -#: utils/adt/tsvector_op.c:851 +#: utils/adt/tsvector_op.c:840 #, c-format msgid "weight array may not contain nulls" msgstr "le tableau de poids ne doit pas contenir de valeurs NULL" -#: utils/adt/tsvector_op.c:875 +#: utils/adt/tsvector_op.c:864 #, c-format msgid "unrecognized weight: \"%c\"" msgstr "poids non reconnu : « %c »" -#: utils/adt/tsvector_op.c:2312 +#: utils/adt/tsvector_op.c:2426 #, c-format msgid "ts_stat query must return one tsvector column" msgstr "la requête ts_stat doit renvoyer une colonne tsvector" -#: utils/adt/tsvector_op.c:2494 +#: utils/adt/tsvector_op.c:2615 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "la colonne tsvector « %s » n'existe pas" -#: utils/adt/tsvector_op.c:2501 +#: utils/adt/tsvector_op.c:2622 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "la colonne « %s » n'est pas de type tsvector" -#: utils/adt/tsvector_op.c:2513 +#: utils/adt/tsvector_op.c:2634 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "la colonne de configuration « %s » n'existe pas" -#: utils/adt/tsvector_op.c:2519 +#: utils/adt/tsvector_op.c:2640 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "la colonne « %s » n'est pas de type regconfig" -#: utils/adt/tsvector_op.c:2526 +#: utils/adt/tsvector_op.c:2647 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "la colonne de configuration « %s » ne doit pas être NULL" -#: utils/adt/tsvector_op.c:2539 +#: utils/adt/tsvector_op.c:2660 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "" "le nom de la configuration de la recherche plein texte « %s » doit être\n" "qualifié par son schéma" -#: utils/adt/tsvector_op.c:2564 +#: utils/adt/tsvector_op.c:2685 #, c-format msgid "column \"%s\" is not of a character type" msgstr "la colonne « %s » n'est pas de type caractère" @@ -23331,176 +24821,196 @@ msgstr "il n'existe pas de caractères d'échappement : « %s »" msgid "wrong position info in tsvector: \"%s\"" msgstr "mauvaise information de position dans tsvector : « %s »" -#: utils/adt/txid.c:140 -#, c-format -msgid "transaction ID %s is in the future" -msgstr "l'identifiant de transaction %s est dans le futur" - -#: utils/adt/txid.c:629 +#: utils/adt/uuid.c:428 #, c-format -msgid "invalid external txid_snapshot data" -msgstr "valeur externe « txid_snapshot » invalide" +msgid "could not generate random values" +msgstr "n'a pas pu générer de valeurs aléatoires" -#: utils/adt/varbit.c:109 utils/adt/varchar.c:54 +#: utils/adt/varbit.c:110 utils/adt/varchar.c:53 #, c-format msgid "length for type %s must be at least 1" msgstr "la longueur du type %s doit être d'au moins 1" -#: utils/adt/varbit.c:114 utils/adt/varchar.c:58 +#: utils/adt/varbit.c:115 utils/adt/varchar.c:57 #, c-format msgid "length for type %s cannot exceed %d" msgstr "la longueur du type %s ne peut pas excéder %d" -#: utils/adt/varbit.c:197 utils/adt/varbit.c:498 utils/adt/varbit.c:993 +#: utils/adt/varbit.c:198 utils/adt/varbit.c:499 utils/adt/varbit.c:994 #, c-format msgid "bit string length exceeds the maximum allowed (%d)" msgstr "la longueur de la chaîne de bits dépasse le maximum permis (%d)" -#: utils/adt/varbit.c:211 utils/adt/varbit.c:355 utils/adt/varbit.c:405 +#: utils/adt/varbit.c:212 utils/adt/varbit.c:356 utils/adt/varbit.c:406 #, c-format msgid "bit string length %d does not match type bit(%d)" msgstr "la longueur (en bits) de la chaîne %d ne correspond pas au type bit(%d)" -#: utils/adt/varbit.c:233 utils/adt/varbit.c:534 +#: utils/adt/varbit.c:234 utils/adt/varbit.c:535 #, c-format -msgid "\"%c\" is not a valid binary digit" -msgstr "« %c » n'est pas un chiffre binaire valide" +msgid "\"%.*s\" is not a valid binary digit" +msgstr "« %.*s » n'est pas un chiffre binaire valide" -#: utils/adt/varbit.c:258 utils/adt/varbit.c:559 +#: utils/adt/varbit.c:259 utils/adt/varbit.c:560 #, c-format -msgid "\"%c\" is not a valid hexadecimal digit" -msgstr "« %c » n'est pas un chiffre hexadécimal valide" +msgid "\"%.*s\" is not a valid hexadecimal digit" +msgstr "« %.*s » n'est pas un chiffre hexadécimal valide" -#: utils/adt/varbit.c:346 utils/adt/varbit.c:651 +#: utils/adt/varbit.c:347 utils/adt/varbit.c:652 #, c-format msgid "invalid length in external bit string" msgstr "longueur invalide dans la chaîne bit externe" -#: utils/adt/varbit.c:512 utils/adt/varbit.c:660 utils/adt/varbit.c:756 +#: utils/adt/varbit.c:513 utils/adt/varbit.c:661 utils/adt/varbit.c:757 #, c-format msgid "bit string too long for type bit varying(%d)" msgstr "la chaîne de bits est trop longue pour le type bit varying(%d)" -#: utils/adt/varbit.c:1086 utils/adt/varbit.c:1184 utils/adt/varlena.c:863 utils/adt/varlena.c:927 utils/adt/varlena.c:1071 utils/adt/varlena.c:3266 utils/adt/varlena.c:3333 +#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:897 utils/adt/varlena.c:960 utils/adt/varlena.c:1117 utils/adt/varlena.c:3351 utils/adt/varlena.c:3429 #, c-format msgid "negative substring length not allowed" msgstr "longueur de sous-chaîne négative non autorisée" -#: utils/adt/varbit.c:1241 +#: utils/adt/varbit.c:1261 #, c-format msgid "cannot AND bit strings of different sizes" msgstr "ne peut pas utiliser l'opérateur AND sur des chaînes bit de tailles différentes" -#: utils/adt/varbit.c:1282 +#: utils/adt/varbit.c:1302 #, c-format msgid "cannot OR bit strings of different sizes" msgstr "ne peut pas utiliser l'opérateur OR sur des chaînes bit de tailles différentes" -#: utils/adt/varbit.c:1322 +#: utils/adt/varbit.c:1342 #, c-format msgid "cannot XOR bit strings of different sizes" msgstr "ne peut pas utiliser l'opérateur XOR sur des chaînes bit de tailles différentes" -#: utils/adt/varbit.c:1802 utils/adt/varbit.c:1860 +#: utils/adt/varbit.c:1824 utils/adt/varbit.c:1882 #, c-format msgid "bit index %d out of valid range (0..%d)" msgstr "index de bit %d en dehors des limites valides (0..%d)" -#: utils/adt/varbit.c:1811 utils/adt/varlena.c:3524 +#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3633 #, c-format msgid "new bit must be 0 or 1" msgstr "le nouveau bit doit valoir soit 0 soit 1" -#: utils/adt/varchar.c:158 utils/adt/varchar.c:311 +#: utils/adt/varchar.c:157 utils/adt/varchar.c:310 #, c-format msgid "value too long for type character(%d)" msgstr "valeur trop longue pour le type character(%d)" -#: utils/adt/varchar.c:473 utils/adt/varchar.c:635 +#: utils/adt/varchar.c:472 utils/adt/varchar.c:634 #, c-format msgid "value too long for type character varying(%d)" msgstr "valeur trop longue pour le type character varying(%d)" -#: utils/adt/varchar.c:733 utils/adt/varlena.c:1455 +#: utils/adt/varchar.c:732 utils/adt/varlena.c:1523 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "n'a pas pu déterminer le collationnement à utiliser pour la comparaison de chaîne" -#: utils/adt/varlena.c:1165 utils/adt/varlena.c:1895 +#: utils/adt/varlena.c:1216 utils/adt/varlena.c:1963 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "les collationnements non déterministes ne sont pas supportés pour les recherches de sous-chaînes" -#: utils/adt/varlena.c:1554 utils/adt/varlena.c:1567 +#: utils/adt/varlena.c:1622 utils/adt/varlena.c:1635 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "n'a pas pu convertir la chaîne en UTF-16 : erreur %lu" -#: utils/adt/varlena.c:1582 +#: utils/adt/varlena.c:1650 #, c-format msgid "could not compare Unicode strings: %m" msgstr "n'a pas pu comparer les chaînes unicode : %m" -#: utils/adt/varlena.c:1633 utils/adt/varlena.c:2347 +#: utils/adt/varlena.c:1701 utils/adt/varlena.c:2415 #, c-format msgid "collation failed: %s" msgstr "échec du collationnement : %s" -#: utils/adt/varlena.c:2555 +#: utils/adt/varlena.c:2623 #, c-format msgid "sort key generation failed: %s" msgstr "échec de génération de la clé de tri : %s" -#: utils/adt/varlena.c:3410 utils/adt/varlena.c:3441 utils/adt/varlena.c:3476 utils/adt/varlena.c:3512 +#: utils/adt/varlena.c:3517 utils/adt/varlena.c:3584 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "index %d en dehors des limites valides, 0..%d" -#: utils/adt/varlena.c:4548 +#: utils/adt/varlena.c:3548 utils/adt/varlena.c:3620 +#, c-format +msgid "index %lld out of valid range, 0..%lld" +msgstr "index %lld en dehors des limites valides, 0..%lld" + +#: utils/adt/varlena.c:4656 #, c-format -msgid "field position must be greater than zero" -msgstr "la position du champ doit être plus grand que zéro" +msgid "field position must not be zero" +msgstr "la position du champ ne doit pas être zéro" -#: utils/adt/varlena.c:5414 +#: utils/adt/varlena.c:5697 #, c-format msgid "unterminated format() type specifier" msgstr "spécificateur de type pour format() non terminé" -#: utils/adt/varlena.c:5415 utils/adt/varlena.c:5549 utils/adt/varlena.c:5670 +#: utils/adt/varlena.c:5698 utils/adt/varlena.c:5832 utils/adt/varlena.c:5953 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "Pour un unique \"%%\" utilisez \"%%%%\"." -#: utils/adt/varlena.c:5547 utils/adt/varlena.c:5668 +#: utils/adt/varlena.c:5830 utils/adt/varlena.c:5951 #, c-format -msgid "unrecognized format() type specifier \"%c\"" -msgstr "spécificateur de type « %c » pour format() non reconnu" +msgid "unrecognized format() type specifier \"%.*s\"" +msgstr "spécificateur de type « %.*s » pour format() non reconnu" -#: utils/adt/varlena.c:5560 utils/adt/varlena.c:5617 +#: utils/adt/varlena.c:5843 utils/adt/varlena.c:5900 #, c-format msgid "too few arguments for format()" msgstr "trop peu d'arguments pour format()" -#: utils/adt/varlena.c:5713 utils/adt/varlena.c:5895 +#: utils/adt/varlena.c:5996 utils/adt/varlena.c:6178 #, c-format msgid "number is out of range" msgstr "le nombre est en dehors des limites" -#: utils/adt/varlena.c:5776 utils/adt/varlena.c:5804 +#: utils/adt/varlena.c:6059 utils/adt/varlena.c:6087 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "le format indique l'argument 0 mais les arguments sont numérotés à partir de 1" -#: utils/adt/varlena.c:5797 +#: utils/adt/varlena.c:6080 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "la position de l'argument width doit se terminer par « $ »" -#: utils/adt/varlena.c:5842 +#: utils/adt/varlena.c:6125 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "les valeurs NULL ne peuvent pas être formatés comme un identifiant SQL" +#: utils/adt/varlena.c:6251 +#, c-format +msgid "Unicode normalization can only be performed if server encoding is UTF8" +msgstr "La normalisation Unicode peut seulement être exécutée si l'encodage serveur est UTF8" + +#: utils/adt/varlena.c:6264 +#, c-format +msgid "invalid normalization form: %s" +msgstr "forme de normalisation invalide : %s" + +#: utils/adt/varlena.c:6467 utils/adt/varlena.c:6502 utils/adt/varlena.c:6537 +#, c-format +msgid "invalid Unicode code point: %04X" +msgstr "point code Unicode invalide : %04X" + +#: utils/adt/varlena.c:6567 +#, c-format +msgid "Unicode escapes must be \\XXXX, \\+XXXXXX, \\uXXXX, or \\UXXXXXXXX." +msgstr "Les échappements Unicode doivent être de la forme \\XXXX, \\+XXXXXX, \\uXXXX ou \\UXXXXXXXX." + #: utils/adt/windowfuncs.c:243 #, c-format msgid "argument of ntile must be greater than zero" @@ -23511,6 +25021,16 @@ msgstr "l'argument de ntile doit être supérieur à zéro" msgid "argument of nth_value must be greater than zero" msgstr "l'argument de nth_value doit être supérieur à zéro" +#: utils/adt/xid8funcs.c:116 +#, c-format +msgid "transaction ID %s is in the future" +msgstr "l'identifiant de transaction %s est dans le futur" + +#: utils/adt/xid8funcs.c:547 +#, c-format +msgid "invalid external pg_snapshot data" +msgstr "données pg_snapshot externes invalides" + #: utils/adt/xml.c:222 #, c-format msgid "unsupported XML feature" @@ -23526,7 +25046,7 @@ msgstr "Cette fonctionnalité nécessite que le serveur dispose du support de li msgid "You need to rebuild PostgreSQL using --with-libxml." msgstr "Vous devez recompiler PostgreSQL en utilisant --with-libxml." -#: utils/adt/xml.c:243 utils/mb/mbutils.c:512 +#: utils/adt/xml.c:243 utils/mb/mbutils.c:627 #, c-format msgid "invalid encoding name \"%s\"" msgstr "nom d'encodage « %s » invalide" @@ -23615,104 +25135,109 @@ msgstr "Analyse de la déclaration XML : « ?> » attendu." msgid "Unrecognized libxml error code: %d." msgstr "Code d'erreur libxml non reconnu : %d." -#: utils/adt/xml.c:2229 +#: utils/adt/xml.c:2211 #, c-format msgid "XML does not support infinite date values." msgstr "XML ne supporte pas les valeurs infinies de date." -#: utils/adt/xml.c:2251 utils/adt/xml.c:2278 +#: utils/adt/xml.c:2233 utils/adt/xml.c:2260 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML ne supporte pas les valeurs infinies de timestamp." -#: utils/adt/xml.c:2690 +#: utils/adt/xml.c:2676 #, c-format msgid "invalid query" msgstr "requête invalide" -#: utils/adt/xml.c:4037 +#: utils/adt/xml.c:4016 #, c-format msgid "invalid array for XML namespace mapping" msgstr "tableau invalide pour la correspondance de l'espace de nom XML" -#: utils/adt/xml.c:4038 +#: utils/adt/xml.c:4017 #, c-format msgid "The array must be two-dimensional with length of the second axis equal to 2." msgstr "" "Le tableau doit avoir deux dimensions avec une longueur de 2 pour le\n" "deuxième axe." -#: utils/adt/xml.c:4062 +#: utils/adt/xml.c:4041 #, c-format msgid "empty XPath expression" msgstr "expression XPath vide" -#: utils/adt/xml.c:4114 +#: utils/adt/xml.c:4093 #, c-format msgid "neither namespace name nor URI may be null" msgstr "ni le nom de l'espace de noms ni l'URI ne peuvent être NULL" -#: utils/adt/xml.c:4121 +#: utils/adt/xml.c:4100 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "n'a pas pu enregistrer l'espace de noms XML de nom « %s » et d'URI « %s »" -#: utils/adt/xml.c:4472 +#: utils/adt/xml.c:4451 #, c-format msgid "DEFAULT namespace is not supported" msgstr "l'espace de nom DEFAULT n'est pas supporté" -#: utils/adt/xml.c:4501 +#: utils/adt/xml.c:4480 #, c-format msgid "row path filter must not be empty string" msgstr "le filtre du chemin de ligne ne doit pas être une chaîne vide" -#: utils/adt/xml.c:4532 +#: utils/adt/xml.c:4511 #, c-format msgid "column path filter must not be empty string" msgstr "le filtre du chemin de colonne ne doit pas être une chaîne vide" -#: utils/adt/xml.c:4682 +#: utils/adt/xml.c:4655 #, c-format msgid "more than one value returned by column XPath expression" msgstr "plus d'une valeur renvoyée par l'expression XPath de colonne" -#: utils/cache/lsyscache.c:2654 utils/cache/lsyscache.c:2687 utils/cache/lsyscache.c:2720 utils/cache/lsyscache.c:2753 +#: utils/cache/lsyscache.c:1042 +#, c-format +msgid "cast from type %s to type %s does not exist" +msgstr "la conversion du type %s vers le type %s n'existe pas" + +#: utils/cache/lsyscache.c:2834 utils/cache/lsyscache.c:2867 utils/cache/lsyscache.c:2900 utils/cache/lsyscache.c:2933 #, c-format msgid "type %s is only a shell" msgstr "le type %s est seulement un shell" -#: utils/cache/lsyscache.c:2659 +#: utils/cache/lsyscache.c:2839 #, c-format msgid "no input function available for type %s" msgstr "aucune fonction en entrée disponible pour le type %s" -#: utils/cache/lsyscache.c:2692 +#: utils/cache/lsyscache.c:2872 #, c-format msgid "no output function available for type %s" msgstr "aucune fonction en sortie disponible pour le type %s" -#: utils/cache/partcache.c:195 +#: utils/cache/partcache.c:215 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d for type %s" msgstr "la classe d'opérateur « %s » de la méthode d'accès %s nécessite la fonction de support manquante %d pour le type %s" -#: utils/cache/plancache.c:718 +#: utils/cache/plancache.c:720 #, c-format msgid "cached plan must not change result type" msgstr "le plan en cache ne doit pas modifier le type en résultat" -#: utils/cache/relcache.c:5758 +#: utils/cache/relcache.c:6215 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "n'a pas pu créer le fichier d'initialisation relation-cache « %s » : %m" -#: utils/cache/relcache.c:5760 +#: utils/cache/relcache.c:6217 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Continue malgré tout, mais quelque chose s'est mal passé." -#: utils/cache/relcache.c:6072 +#: utils/cache/relcache.c:6539 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier cache « %s » : %m" @@ -23736,110 +25261,112 @@ msgstr "" "le fichier de correspondance des relations « %s » contient une somme de\n" "contrôle incorrecte" -#: utils/cache/typcache.c:1634 utils/fmgr/funcapi.c:420 +#: utils/cache/typcache.c:1808 utils/fmgr/funcapi.c:463 #, c-format msgid "record type has not been registered" msgstr "le type d'enregistrement n'a pas été enregistré" -#: utils/error/assert.c:34 +#: utils/error/assert.c:39 #, c-format -msgid "TRAP: ExceptionalCondition: bad arguments\n" -msgstr "TRAP : ExceptionalCondition : mauvais arguments\n" +msgid "TRAP: ExceptionalCondition: bad arguments in PID %d\n" +msgstr "TRAP : ExceptionalCondition : mauvais arguments dans le PID %d\n" -#: utils/error/assert.c:37 +#: utils/error/assert.c:42 #, c-format -msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n" -msgstr "TRAP : %s(« %s », fichier : « %s », ligne : %d)\n" +msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d, PID: %d)\n" +msgstr "TRAP : %s(« %s », Fichier : « %s », Ligne : %d, PID : %d)\n" -#: utils/error/elog.c:319 utils/error/elog.c:1293 +#: utils/error/elog.c:409 #, c-format -msgid "error occurred at %s:%d before error message processing is available\n" -msgstr "" -"erreur survenue à %s:%d avant que le traitement des messages d'erreurs ne\n" -"soit disponible\n" +msgid "error occurred before error message processing is available\n" +msgstr "erreur survenue avant que le traitement des messages d'erreurs ne soit disponible\n" -#: utils/error/elog.c:1871 +#: utils/error/elog.c:1948 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "n'a pas pu ré-ouvrir le fichier « %s » comme stderr : %m" -#: utils/error/elog.c:1884 +#: utils/error/elog.c:1961 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "n'a pas pu ré-ouvrir le fichier « %s » comme stdout : %m" -#: utils/error/elog.c:2376 utils/error/elog.c:2393 utils/error/elog.c:2409 +#: utils/error/elog.c:2456 utils/error/elog.c:2490 utils/error/elog.c:2506 msgid "[unknown]" msgstr "[inconnu]" -#: utils/error/elog.c:2869 utils/error/elog.c:3172 utils/error/elog.c:3280 +#: utils/error/elog.c:3026 utils/error/elog.c:3344 utils/error/elog.c:3451 msgid "missing error text" msgstr "texte d'erreur manquant" -#: utils/error/elog.c:2872 utils/error/elog.c:2875 utils/error/elog.c:3283 utils/error/elog.c:3286 +#: utils/error/elog.c:3029 utils/error/elog.c:3032 #, c-format msgid " at character %d" msgstr " au caractère %d" -#: utils/error/elog.c:2885 utils/error/elog.c:2892 +#: utils/error/elog.c:3042 utils/error/elog.c:3049 msgid "DETAIL: " msgstr "DÉTAIL: " -#: utils/error/elog.c:2899 +#: utils/error/elog.c:3056 msgid "HINT: " msgstr "ASTUCE : " -#: utils/error/elog.c:2906 +#: utils/error/elog.c:3063 msgid "QUERY: " msgstr "REQUÊTE : " -#: utils/error/elog.c:2913 +#: utils/error/elog.c:3070 msgid "CONTEXT: " msgstr "CONTEXTE : " -#: utils/error/elog.c:2923 +#: utils/error/elog.c:3080 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "EMPLACEMENT : %s, %s:%d\n" -#: utils/error/elog.c:2930 +#: utils/error/elog.c:3087 #, c-format msgid "LOCATION: %s:%d\n" msgstr "EMPLACEMENT : %s:%d\n" -#: utils/error/elog.c:2944 +#: utils/error/elog.c:3094 +msgid "BACKTRACE: " +msgstr "PILE D'APPEL : " + +#: utils/error/elog.c:3108 msgid "STATEMENT: " msgstr "INSTRUCTION : " -#: utils/error/elog.c:3333 +#: utils/error/elog.c:3496 msgid "DEBUG" msgstr "DEBUG" -#: utils/error/elog.c:3337 +#: utils/error/elog.c:3500 msgid "LOG" msgstr "LOG" -#: utils/error/elog.c:3340 +#: utils/error/elog.c:3503 msgid "INFO" msgstr "INFO" -#: utils/error/elog.c:3343 +#: utils/error/elog.c:3506 msgid "NOTICE" msgstr "NOTICE" -#: utils/error/elog.c:3346 +#: utils/error/elog.c:3510 msgid "WARNING" msgstr "ATTENTION" -#: utils/error/elog.c:3349 +#: utils/error/elog.c:3513 msgid "ERROR" msgstr "ERREUR" -#: utils/error/elog.c:3352 +#: utils/error/elog.c:3516 msgid "FATAL" msgstr "FATAL" -#: utils/error/elog.c:3355 +#: utils/error/elog.c:3519 msgid "PANIC" msgstr "PANIC" @@ -23892,846 +25419,855 @@ msgstr "Le serveur a NAMEDATALEN = %d, la bibliothèque a %d." #: utils/fmgr/dfmgr.c:373 #, c-format -msgid "Server has FLOAT4PASSBYVAL = %s, library has %s." -msgstr "Le serveur a FLOAT4PASSBYVAL = %s, la bibliothèque a %s." - -#: utils/fmgr/dfmgr.c:382 -#, c-format msgid "Server has FLOAT8PASSBYVAL = %s, library has %s." msgstr "Le serveur a FLOAT8PASSBYVAL = %s, la bibliothèque a %s." -#: utils/fmgr/dfmgr.c:389 +#: utils/fmgr/dfmgr.c:380 msgid "Magic block has unexpected length or padding difference." msgstr "Le bloc magique a une longueur inattendue ou une différence de padding." -#: utils/fmgr/dfmgr.c:392 +#: utils/fmgr/dfmgr.c:383 #, c-format msgid "incompatible library \"%s\": magic block mismatch" msgstr "bibliothèque « %s » incompatible : différences dans le bloc magique" -#: utils/fmgr/dfmgr.c:556 +#: utils/fmgr/dfmgr.c:547 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "l'accès à la bibliothèque « %s » n'est pas autorisé" -#: utils/fmgr/dfmgr.c:582 +#: utils/fmgr/dfmgr.c:573 #, c-format msgid "invalid macro name in dynamic library path: %s" msgstr "nom de macro invalide dans le chemin des bibliothèques partagées : %s" -#: utils/fmgr/dfmgr.c:622 +#: utils/fmgr/dfmgr.c:613 #, c-format msgid "zero-length component in parameter \"dynamic_library_path\"" msgstr "composant de longueur zéro dans le paramètre « dynamic_library_path »" -#: utils/fmgr/dfmgr.c:641 +#: utils/fmgr/dfmgr.c:632 #, c-format msgid "component in parameter \"dynamic_library_path\" is not an absolute path" msgstr "un composant du paramètre « dynamic_library_path » n'est pas un chemin absolu" -#: utils/fmgr/fmgr.c:236 +#: utils/fmgr/fmgr.c:238 #, c-format msgid "internal function \"%s\" is not in internal lookup table" msgstr "la fonction interne « %s » n'est pas dans une table de recherche interne" -#: utils/fmgr/fmgr.c:485 +#: utils/fmgr/fmgr.c:484 #, c-format msgid "could not find function information for function \"%s\"" msgstr "n'a pas pu trouver d'informations sur la fonction « %s »" -#: utils/fmgr/fmgr.c:487 +#: utils/fmgr/fmgr.c:486 #, c-format msgid "SQL-callable functions need an accompanying PG_FUNCTION_INFO_V1(funcname)." msgstr "Les fonctions appelables en SQL ont besoin d'un PG_FUNCTION_INFO_V1(nom_fonction)." -#: utils/fmgr/fmgr.c:505 +#: utils/fmgr/fmgr.c:504 #, c-format msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "version API %d non reconnue mais rapportée par la fonction info « %s »" -#: utils/fmgr/fmgr.c:2032 +#: utils/fmgr/fmgr.c:1999 +#, c-format +msgid "operator class options info is absent in function call context" +msgstr "les informations sur les options de la classe d'opérateur sont absentes dans le contexte d'appel à la fonction" + +#: utils/fmgr/fmgr.c:2066 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "fonction %u de validation du langage appelée pour le langage %u au lieu de %u" -#: utils/fmgr/funcapi.c:343 +#: utils/fmgr/funcapi.c:386 #, c-format msgid "could not determine actual result type for function \"%s\" declared to return type %s" msgstr "" "n'a pas pu déterminer le type du résultat actuel pour la fonction « %s »\n" "déclarant retourner le type %s" -#: utils/fmgr/funcapi.c:1388 utils/fmgr/funcapi.c:1420 +#: utils/fmgr/funcapi.c:531 +#, fuzzy, c-format +#| msgid "argument declared %s is not a range type but type %s" +msgid "argument declared %s does not contain a range type but type %s" +msgstr "l'argument déclaré %s n'est pas un type d'intervalle mais est du type %s" + +#: utils/fmgr/funcapi.c:1833 utils/fmgr/funcapi.c:1865 #, c-format msgid "number of aliases does not match number of columns" msgstr "le nombre d'alias ne correspond pas au nombre de colonnes" -#: utils/fmgr/funcapi.c:1414 +#: utils/fmgr/funcapi.c:1859 #, c-format msgid "no column alias was provided" msgstr "aucun alias de colonne n'a été fourni" -#: utils/fmgr/funcapi.c:1438 +#: utils/fmgr/funcapi.c:1883 #, c-format msgid "could not determine row description for function returning record" msgstr "" "n'a pas pu déterminer la description de la ligne pour la fonction renvoyant\n" "l'enregistrement" -#: utils/init/miscinit.c:110 +#: utils/init/miscinit.c:315 #, c-format msgid "data directory \"%s\" does not exist" msgstr "le répertoire des données « %s » n'existe pas" -#: utils/init/miscinit.c:115 +#: utils/init/miscinit.c:320 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "n'a pas pu lire les droits du répertoire « %s » : %m" -#: utils/init/miscinit.c:123 +#: utils/init/miscinit.c:328 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "le répertoire des données « %s » n'est pas un répertoire" -#: utils/init/miscinit.c:139 +#: utils/init/miscinit.c:344 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "le répertoire des données « %s » a un mauvais propriétaire" -#: utils/init/miscinit.c:141 +#: utils/init/miscinit.c:346 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "" "Le serveur doit être en cours d'exécution par l'utilisateur qui possède le\n" "répertoire des données." -#: utils/init/miscinit.c:159 +#: utils/init/miscinit.c:364 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "le répertoire des données « %s » a des permissions non valides" -#: utils/init/miscinit.c:161 +#: utils/init/miscinit.c:366 #, c-format msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Les droits devraient être u=rwx (0700) ou u=rwx,g=rx (0750)." -#: utils/init/miscinit.c:547 utils/misc/guc.c:6930 +#: utils/init/miscinit.c:645 utils/misc/guc.c:7515 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "" "ne peut pas configurer le paramètre « %s » à l'intérieur d'une fonction\n" "restreinte pour sécurité" -#: utils/init/miscinit.c:615 +#: utils/init/miscinit.c:713 #, c-format msgid "role with OID %u does not exist" msgstr "le rôle d'OID %u n'existe pas" -#: utils/init/miscinit.c:645 +#: utils/init/miscinit.c:743 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "le rôle « %s » n'est pas autorisé à se connecter" -#: utils/init/miscinit.c:663 +#: utils/init/miscinit.c:761 #, c-format msgid "too many connections for role \"%s\"" msgstr "trop de connexions pour le rôle « %s »" -#: utils/init/miscinit.c:723 +#: utils/init/miscinit.c:821 #, c-format msgid "permission denied to set session authorization" msgstr "droit refusé pour initialiser une autorisation de session" -#: utils/init/miscinit.c:806 +#: utils/init/miscinit.c:904 #, c-format msgid "invalid role OID: %u" msgstr "OID du rôle invalide : %u" -#: utils/init/miscinit.c:860 +#: utils/init/miscinit.c:958 #, c-format msgid "database system is shut down" msgstr "le système de base de données est arrêté" -#: utils/init/miscinit.c:947 +#: utils/init/miscinit.c:1045 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "n'a pas pu créer le fichier verrou « %s » : %m" -#: utils/init/miscinit.c:961 +#: utils/init/miscinit.c:1059 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier verrou « %s » : %m" -#: utils/init/miscinit.c:968 +#: utils/init/miscinit.c:1066 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "n'a pas pu lire le fichier verrou « %s » : %m" -#: utils/init/miscinit.c:977 +#: utils/init/miscinit.c:1075 #, c-format msgid "lock file \"%s\" is empty" msgstr "le fichier verrou « %s » est vide" -#: utils/init/miscinit.c:978 +#: utils/init/miscinit.c:1076 #, c-format msgid "Either another server is starting, or the lock file is the remnant of a previous server startup crash." msgstr "Soit un autre serveur est en cours de démarrage, soit le fichier verrou est un reste d'un précédent crash au démarrage du serveur." -#: utils/init/miscinit.c:1022 +#: utils/init/miscinit.c:1120 #, c-format msgid "lock file \"%s\" already exists" msgstr "le fichier verrou « %s » existe déjà" -#: utils/init/miscinit.c:1026 +#: utils/init/miscinit.c:1124 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "" "Un autre postgres (de PID %d) est-il déjà lancé avec comme répertoire de\n" "données « %s » ?" -#: utils/init/miscinit.c:1028 +#: utils/init/miscinit.c:1126 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "" "Un autre postmaster (de PID %d) est-il déjà lancé avec comme répertoire de\n" "données « %s » ?" -#: utils/init/miscinit.c:1031 +#: utils/init/miscinit.c:1129 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "Un autre postgres (de PID %d) est-il déjà lancé en utilisant la socket « %s » ?" -#: utils/init/miscinit.c:1033 +#: utils/init/miscinit.c:1131 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "Un autre postmaster (de PID %d) est-il déjà lancé en utilisant la socket « %s » ?" -#: utils/init/miscinit.c:1084 +#: utils/init/miscinit.c:1182 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "n'a pas pu supprimer le vieux fichier verrou « %s » : %m" -#: utils/init/miscinit.c:1086 +#: utils/init/miscinit.c:1184 #, c-format msgid "The file seems accidentally left over, but it could not be removed. Please remove the file by hand and try again." msgstr "" "Le fichier semble avoir été oublié accidentellement mais il ne peut pas être\n" "supprimé. Merci de supprimer ce fichier manuellement et de ré-essayer." -#: utils/init/miscinit.c:1123 utils/init/miscinit.c:1137 utils/init/miscinit.c:1148 +#: utils/init/miscinit.c:1221 utils/init/miscinit.c:1235 utils/init/miscinit.c:1246 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "n'a pas pu écrire le fichier verrou « %s » : %m" -#: utils/init/miscinit.c:1280 utils/init/miscinit.c:1423 utils/misc/guc.c:9834 +#: utils/init/miscinit.c:1357 utils/init/miscinit.c:1499 utils/misc/guc.c:10411 #, c-format msgid "could not read from file \"%s\": %m" msgstr "n'a pas pu lire à partir du fichier « %s » : %m" -#: utils/init/miscinit.c:1411 +#: utils/init/miscinit.c:1487 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "n'a pas pu ouvrir le fichier « %s » : %m ; poursuite du traitement" -#: utils/init/miscinit.c:1436 +#: utils/init/miscinit.c:1512 #, c-format msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" msgstr "le fichier de verrou « %s » contient le mauvais PID : %ld au lieu de %ld" -#: utils/init/miscinit.c:1475 utils/init/miscinit.c:1491 +#: utils/init/miscinit.c:1551 utils/init/miscinit.c:1567 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "« %s » n'est pas un répertoire de données valide" -#: utils/init/miscinit.c:1477 +#: utils/init/miscinit.c:1553 #, c-format msgid "File \"%s\" is missing." msgstr "Le fichier « %s » est manquant." -#: utils/init/miscinit.c:1493 +#: utils/init/miscinit.c:1569 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "Le fichier « %s » ne contient aucune donnée valide." -#: utils/init/miscinit.c:1495 +#: utils/init/miscinit.c:1571 #, c-format msgid "You might need to initdb." msgstr "Vous pouvez avoir besoin d'exécuter initdb." -#: utils/init/miscinit.c:1503 +#: utils/init/miscinit.c:1579 #, c-format msgid "The data directory was initialized by PostgreSQL version %s, which is not compatible with this version %s." msgstr "" "Le répertoire des données a été initialisé avec PostgreSQL version %s,\n" "qui est non compatible avec cette version %s." -#: utils/init/miscinit.c:1570 +#: utils/init/postinit.c:254 #, c-format -msgid "loaded library \"%s\"" -msgstr "bibliothèque « %s » chargée" +msgid "replication connection authorized: user=%s" +msgstr "connexion de réplication autorisée : utilisateur=%s" -#: utils/init/postinit.c:255 +#: utils/init/postinit.c:257 #, c-format -msgid "replication connection authorized: user=%s application_name=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "connexion de réplication autorisée : utilisateur=%s, nom d'application=%s, SSL activé (protocole=%s, chiffrement=%s, bits=%d, compression=%s)" +msgid "connection authorized: user=%s" +msgstr "connexion autorisée : utilisateur=%s" -#: utils/init/postinit.c:261 utils/init/postinit.c:267 utils/init/postinit.c:289 utils/init/postinit.c:295 -msgid "off" -msgstr "désactivé" - -#: utils/init/postinit.c:261 utils/init/postinit.c:267 utils/init/postinit.c:289 utils/init/postinit.c:295 -msgid "on" -msgstr "activé" - -#: utils/init/postinit.c:262 +#: utils/init/postinit.c:260 #, c-format -msgid "replication connection authorized: user=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "connexion autorisée : utilisateur=%s, SSL activé (protocole=%s, chiffrement=%s, bits=%d, compression=%s)" +msgid " database=%s" +msgstr " base de données %s" -#: utils/init/postinit.c:272 +#: utils/init/postinit.c:263 #, c-format -msgid "replication connection authorized: user=%s application_name=%s" -msgstr "connexion de réplication autorisée : utilisateur=%s nom d'application=%s" +msgid " application_name=%s" +msgstr " application_name=%s" -#: utils/init/postinit.c:275 +#: utils/init/postinit.c:268 #, c-format -msgid "replication connection authorized: user=%s" -msgstr "connexion de réplication autorisée : utilisateur=%s" +msgid " SSL enabled (protocol=%s, cipher=%s, bits=%d)" +msgstr "SSL activé (protocole : %s, chiffrement : %s, bits : %d)" -#: utils/init/postinit.c:284 +#: utils/init/postinit.c:280 #, c-format -msgid "connection authorized: user=%s database=%s application_name=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "connexion autorisée : utilisateur=%s base de données=%s nom d'application=%s SSL activé (protocole=%s, chiffrement=%s, bits=%d, compression=%s)" +msgid " GSS (authenticated=%s, encrypted=%s, principal=%s)" +msgstr " GSS (authentifié=%s, chiffré=%s, principal=%s)" -#: utils/init/postinit.c:290 -#, c-format -msgid "connection authorized: user=%s database=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "connexion autorisée : utilisateur=%s, base de données=%s, SSL activé (protocole=%s, chiffrement=%s, bits=%d, compression=%s)" +#: utils/init/postinit.c:281 utils/init/postinit.c:282 utils/init/postinit.c:287 utils/init/postinit.c:288 +msgid "no" +msgstr "non" -#: utils/init/postinit.c:300 -#, c-format -msgid "connection authorized: user=%s database=%s application_name=%s" -msgstr "connexion autorisée : utilisateur=%s base de données=%s nom d'application=%s" +#: utils/init/postinit.c:281 utils/init/postinit.c:282 utils/init/postinit.c:287 utils/init/postinit.c:288 +msgid "yes" +msgstr "oui" -#: utils/init/postinit.c:302 +#: utils/init/postinit.c:286 #, c-format -msgid "connection authorized: user=%s database=%s" -msgstr "connexion autorisée : utilisateur=%s, base de données=%s" +msgid " GSS (authenticated=%s, encrypted=%s)" +msgstr " GSS (authentifié=%s, chiffré=%s)" -#: utils/init/postinit.c:334 +#: utils/init/postinit.c:323 #, c-format msgid "database \"%s\" has disappeared from pg_database" msgstr "la base de données « %s » a disparu de pg_database" -#: utils/init/postinit.c:336 +#: utils/init/postinit.c:325 #, c-format msgid "Database OID %u now seems to belong to \"%s\"." msgstr "La base de données d'OID %u semble maintenant appartenir à « %s »." -#: utils/init/postinit.c:356 +#: utils/init/postinit.c:345 #, c-format msgid "database \"%s\" is not currently accepting connections" msgstr "la base de données « %s » n'accepte plus les connexions" -#: utils/init/postinit.c:369 +#: utils/init/postinit.c:358 #, c-format msgid "permission denied for database \"%s\"" msgstr "droit refusé pour la base de données « %s »" -#: utils/init/postinit.c:370 +#: utils/init/postinit.c:359 #, c-format msgid "User does not have CONNECT privilege." msgstr "L'utilisateur n'a pas le droit CONNECT." -#: utils/init/postinit.c:387 +#: utils/init/postinit.c:376 #, c-format msgid "too many connections for database \"%s\"" msgstr "trop de connexions pour la base de données « %s »" -#: utils/init/postinit.c:409 utils/init/postinit.c:416 +#: utils/init/postinit.c:398 utils/init/postinit.c:405 #, c-format msgid "database locale is incompatible with operating system" msgstr "la locale de la base de données est incompatible avec le système d'exploitation" -#: utils/init/postinit.c:410 +#: utils/init/postinit.c:399 #, c-format msgid "The database was initialized with LC_COLLATE \"%s\", which is not recognized by setlocale()." msgstr "" "La base de données a été initialisée avec un LC_COLLATE à « %s »,\n" "qui n'est pas reconnu par setlocale()." -#: utils/init/postinit.c:412 utils/init/postinit.c:419 +#: utils/init/postinit.c:401 utils/init/postinit.c:408 #, c-format msgid "Recreate the database with another locale or install the missing locale." msgstr "" "Recréez la base de données avec une autre locale ou installez la locale\n" "manquante." -#: utils/init/postinit.c:417 +#: utils/init/postinit.c:406 #, c-format msgid "The database was initialized with LC_CTYPE \"%s\", which is not recognized by setlocale()." msgstr "" "La base de données a été initialisée avec un LC_CTYPE à « %s »,\n" "qui n'est pas reconnu par setlocale()." -#: utils/init/postinit.c:764 +#: utils/init/postinit.c:761 #, c-format msgid "no roles are defined in this database system" msgstr "aucun rôle n'est défini dans le système de bases de données" -#: utils/init/postinit.c:765 +#: utils/init/postinit.c:762 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Vous devez immédiatement exécuter « CREATE USER \"%s\" CREATEUSER; »." -#: utils/init/postinit.c:801 +#: utils/init/postinit.c:798 #, c-format msgid "new replication connections are not allowed during database shutdown" msgstr "" "les nouvelles connexions pour la réplication ne sont pas autorisées pendant\n" "l'arrêt du serveur de base de données" -#: utils/init/postinit.c:805 +#: utils/init/postinit.c:802 #, c-format msgid "must be superuser to connect during database shutdown" msgstr "" "doit être super-utilisateur pour se connecter pendant un arrêt de la base de\n" "données" -#: utils/init/postinit.c:815 +#: utils/init/postinit.c:812 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "doit être super-utilisateur pour se connecter en mode de mise à jour binaire" -#: utils/init/postinit.c:828 +#: utils/init/postinit.c:825 #, c-format msgid "remaining connection slots are reserved for non-replication superuser connections" msgstr "" "les emplacements de connexions restants sont réservés pour les connexions\n" "superutilisateur non relatif à la réplication" -#: utils/init/postinit.c:838 +#: utils/init/postinit.c:835 #, c-format msgid "must be superuser or replication role to start walsender" msgstr "" "doit être un superutilisateur ou un rôle ayant l'attribut de réplication\n" "pour exécuter walsender" -#: utils/init/postinit.c:907 +#: utils/init/postinit.c:904 #, c-format msgid "database %u does not exist" msgstr "la base de données « %u » n'existe pas" -#: utils/init/postinit.c:996 +#: utils/init/postinit.c:993 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Cet objet semble avoir été tout juste supprimé ou renommé." -#: utils/init/postinit.c:1014 +#: utils/init/postinit.c:1011 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Le sous-répertoire de la base de données « %s » est manquant." -#: utils/init/postinit.c:1019 +#: utils/init/postinit.c:1016 #, c-format msgid "could not access directory \"%s\": %m" msgstr "n'a pas pu accéder au répertoire « %s » : %m" -#: utils/mb/conv.c:488 utils/mb/conv.c:680 +#: utils/mb/conv.c:522 utils/mb/conv.c:733 #, c-format msgid "invalid encoding number: %d" msgstr "numéro d'encodage invalide : %d" -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:122 utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:154 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:129 utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:165 #, c-format msgid "unexpected encoding ID %d for ISO 8859 character sets" msgstr "identifiant d'encodage %d inattendu pour les jeux de caractères ISO-8859" -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:103 utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:135 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:110 utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:146 #, c-format msgid "unexpected encoding ID %d for WIN character sets" msgstr "identifiant d'encodage %d inattendu pour les jeux de caractères WIN" -#: utils/mb/encnames.c:473 -#, c-format -msgid "encoding \"%s\" not supported by ICU" -msgstr "encodage « %s » non supporté par ICU" - -#: utils/mb/encnames.c:572 -#, c-format -msgid "encoding name too long" -msgstr "nom d'encodage trop long" - -#: utils/mb/mbutils.c:296 +#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:900 #, c-format msgid "conversion between %s and %s is not supported" msgstr "la conversion entre %s et %s n'est pas supportée" -#: utils/mb/mbutils.c:355 +#: utils/mb/mbutils.c:385 #, c-format msgid "default conversion function for encoding \"%s\" to \"%s\" does not exist" msgstr "" "la fonction de conversion par défaut pour l'encodage de « %s » en « %s »\n" "n'existe pas" -#: utils/mb/mbutils.c:366 utils/mb/mbutils.c:699 +#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 utils/mb/mbutils.c:842 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "Une chaîne de %d octets est trop longue pour la conversion d'encodage." -#: utils/mb/mbutils.c:453 +#: utils/mb/mbutils.c:568 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "nom de l'encodage source « %s » invalide" -#: utils/mb/mbutils.c:458 +#: utils/mb/mbutils.c:573 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "nom de l'encodage destination « %s » invalide" -#: utils/mb/mbutils.c:598 +#: utils/mb/mbutils.c:713 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "valeur d'octet invalide pour l'encodage « %s » : 0x%02x" -#: utils/mb/mbutils.c:940 +#: utils/mb/mbutils.c:877 +#, c-format +msgid "invalid Unicode code point" +msgstr "point code Unicode invalide" + +#: utils/mb/mbutils.c:1146 #, c-format msgid "bind_textdomain_codeset failed" msgstr "échec de bind_textdomain_codeset" -#: utils/mb/wchar.c:2063 +#: utils/mb/mbutils.c:1667 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "séquence d'octets invalide pour l'encodage « %s » : %s" -#: utils/mb/wchar.c:2096 +#: utils/mb/mbutils.c:1700 #, c-format msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "" "le caractère dont la séquence d'octets est %s dans l'encodage « %s » n'a pas\n" "d'équivalent dans l'encodage « %s »" -#: utils/misc/guc.c:634 +#: utils/misc/guc.c:703 msgid "Ungrouped" msgstr "Dégroupé" -#: utils/misc/guc.c:636 +#: utils/misc/guc.c:705 msgid "File Locations" msgstr "Emplacement des fichiers" -#: utils/misc/guc.c:638 +#: utils/misc/guc.c:707 msgid "Connections and Authentication" msgstr "Connexions et authentification" -#: utils/misc/guc.c:640 +#: utils/misc/guc.c:709 msgid "Connections and Authentication / Connection Settings" msgstr "Connexions et authentification / Paramètrages de connexion" -#: utils/misc/guc.c:642 +#: utils/misc/guc.c:711 msgid "Connections and Authentication / Authentication" msgstr "Connexions et authentification / Authentification" -#: utils/misc/guc.c:644 +#: utils/misc/guc.c:713 msgid "Connections and Authentication / SSL" msgstr "Connexions et authentification / SSL" -#: utils/misc/guc.c:646 +#: utils/misc/guc.c:715 msgid "Resource Usage" msgstr "Utilisation des ressources" -#: utils/misc/guc.c:648 +#: utils/misc/guc.c:717 msgid "Resource Usage / Memory" msgstr "Utilisation des ressources / Mémoire" -#: utils/misc/guc.c:650 +#: utils/misc/guc.c:719 msgid "Resource Usage / Disk" msgstr "Utilisation des ressources / Disques" -#: utils/misc/guc.c:652 +#: utils/misc/guc.c:721 msgid "Resource Usage / Kernel Resources" msgstr "Utilisation des ressources / Ressources noyau" -#: utils/misc/guc.c:654 +#: utils/misc/guc.c:723 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Utilisation des ressources / Délai du VACUUM basé sur le coût" -#: utils/misc/guc.c:656 +#: utils/misc/guc.c:725 msgid "Resource Usage / Background Writer" msgstr "Utilisation des ressources / Processus d'écriture en tâche de fond" -#: utils/misc/guc.c:658 +#: utils/misc/guc.c:727 msgid "Resource Usage / Asynchronous Behavior" msgstr "Utilisation des ressources / Comportement asynchrone" -#: utils/misc/guc.c:660 +#: utils/misc/guc.c:729 msgid "Write-Ahead Log" msgstr "Write-Ahead Log" -#: utils/misc/guc.c:662 +#: utils/misc/guc.c:731 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead Log / Paramètrages" -#: utils/misc/guc.c:664 +#: utils/misc/guc.c:733 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead Log / Points de vérification (Checkpoints)" -#: utils/misc/guc.c:666 +#: utils/misc/guc.c:735 msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead Log / Archivage" -#: utils/misc/guc.c:668 +#: utils/misc/guc.c:737 msgid "Write-Ahead Log / Archive Recovery" msgstr "Write-Ahead Log / Restauration d'archive" -#: utils/misc/guc.c:670 +#: utils/misc/guc.c:739 msgid "Write-Ahead Log / Recovery Target" msgstr "Write-Ahead Log / Cible de restauration" -#: utils/misc/guc.c:672 +#: utils/misc/guc.c:741 msgid "Replication" msgstr "Réplication" -#: utils/misc/guc.c:674 +#: utils/misc/guc.c:743 msgid "Replication / Sending Servers" msgstr "Réplication / Serveurs d'envoi" -#: utils/misc/guc.c:676 -msgid "Replication / Master Server" -msgstr "Réplication / Serveur maître" +#: utils/misc/guc.c:745 +msgid "Replication / Primary Server" +msgstr "Réplication / Serveur primaire" -#: utils/misc/guc.c:678 +#: utils/misc/guc.c:747 msgid "Replication / Standby Servers" msgstr "Réplication / Serveurs en attente" -#: utils/misc/guc.c:680 +#: utils/misc/guc.c:749 msgid "Replication / Subscribers" msgstr "Réplication / Abonnés" -#: utils/misc/guc.c:682 +#: utils/misc/guc.c:751 msgid "Query Tuning" msgstr "Optimisation des requêtes" -#: utils/misc/guc.c:684 +#: utils/misc/guc.c:753 msgid "Query Tuning / Planner Method Configuration" msgstr "Optimisation des requêtes / Configuration de la méthode du planificateur" -#: utils/misc/guc.c:686 +#: utils/misc/guc.c:755 msgid "Query Tuning / Planner Cost Constants" msgstr "Optimisation des requêtes / Constantes des coûts du planificateur" -#: utils/misc/guc.c:688 +#: utils/misc/guc.c:757 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Optimisation des requêtes / Optimiseur génétique de requêtes" -#: utils/misc/guc.c:690 +#: utils/misc/guc.c:759 msgid "Query Tuning / Other Planner Options" msgstr "Optimisation des requêtes / Autres options du planificateur" -#: utils/misc/guc.c:692 +#: utils/misc/guc.c:761 msgid "Reporting and Logging" msgstr "Rapports et traces" -#: utils/misc/guc.c:694 +#: utils/misc/guc.c:763 msgid "Reporting and Logging / Where to Log" msgstr "Rapports et traces / Où tracer" -#: utils/misc/guc.c:696 +#: utils/misc/guc.c:765 msgid "Reporting and Logging / When to Log" msgstr "Rapports et traces / Quand tracer" -#: utils/misc/guc.c:698 +#: utils/misc/guc.c:767 msgid "Reporting and Logging / What to Log" msgstr "Rapports et traces / Que tracer" -#: utils/misc/guc.c:700 +#: utils/misc/guc.c:769 msgid "Process Title" msgstr "Titre du processus" -#: utils/misc/guc.c:702 +#: utils/misc/guc.c:771 msgid "Statistics" msgstr "Statistiques" -#: utils/misc/guc.c:704 +#: utils/misc/guc.c:773 msgid "Statistics / Monitoring" msgstr "Statistiques / Surveillance" -#: utils/misc/guc.c:706 +#: utils/misc/guc.c:775 msgid "Statistics / Query and Index Statistics Collector" msgstr "Statistiques / Récupérateur des statistiques sur les requêtes et sur les index" -#: utils/misc/guc.c:708 +#: utils/misc/guc.c:777 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc.c:710 +#: utils/misc/guc.c:779 msgid "Client Connection Defaults" msgstr "Valeurs par défaut pour les connexions client" -#: utils/misc/guc.c:712 +#: utils/misc/guc.c:781 msgid "Client Connection Defaults / Statement Behavior" msgstr "Valeurs par défaut pour les connexions client / Comportement des instructions" -#: utils/misc/guc.c:714 +#: utils/misc/guc.c:783 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Valeurs par défaut pour les connexions client / Locale et formattage" -#: utils/misc/guc.c:716 +#: utils/misc/guc.c:785 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Valeurs par défaut pour les connexions des clients / Préchargement des bibliothèques partagées" -#: utils/misc/guc.c:718 +#: utils/misc/guc.c:787 msgid "Client Connection Defaults / Other Defaults" msgstr "Valeurs par défaut pour les connexions client / Autres valeurs par défaut" -#: utils/misc/guc.c:720 +#: utils/misc/guc.c:789 msgid "Lock Management" msgstr "Gestion des verrous" -#: utils/misc/guc.c:722 +#: utils/misc/guc.c:791 msgid "Version and Platform Compatibility" msgstr "Compatibilité des versions et des plateformes" -#: utils/misc/guc.c:724 +#: utils/misc/guc.c:793 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Compatibilité des versions et des plateformes / Anciennes versions de PostgreSQL" -#: utils/misc/guc.c:726 +#: utils/misc/guc.c:795 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Compatibilité des versions et des plateformes / Anciennes plateformes et anciens clients" -#: utils/misc/guc.c:728 +#: utils/misc/guc.c:797 msgid "Error Handling" msgstr "Gestion des erreurs" -#: utils/misc/guc.c:730 +#: utils/misc/guc.c:799 msgid "Preset Options" msgstr "Options pré-configurées" -#: utils/misc/guc.c:732 +#: utils/misc/guc.c:801 msgid "Customized Options" msgstr "Options personnalisées" -#: utils/misc/guc.c:734 +#: utils/misc/guc.c:803 msgid "Developer Options" msgstr "Options pour le développeur" -#: utils/misc/guc.c:786 +#: utils/misc/guc.c:861 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Les unités valides pour ce paramètre sont « B », « kB », « MB », « GB » et « TB »." -#: utils/misc/guc.c:823 +#: utils/misc/guc.c:898 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "Les unités valides pour ce paramètre sont «us », « ms », « s », « min », « h » et « d »." -#: utils/misc/guc.c:885 +#: utils/misc/guc.c:960 msgid "Enables the planner's use of sequential-scan plans." msgstr "Active l'utilisation des parcours séquentiels par le planificateur." -#: utils/misc/guc.c:895 +#: utils/misc/guc.c:970 msgid "Enables the planner's use of index-scan plans." msgstr "Active l'utilisation des parcours d'index par le planificateur." -#: utils/misc/guc.c:905 +#: utils/misc/guc.c:980 msgid "Enables the planner's use of index-only-scan plans." msgstr "Active l'utilisation des parcours d'index seul par le planificateur." -#: utils/misc/guc.c:915 +#: utils/misc/guc.c:990 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Active l'utilisation des parcours de bitmap par le planificateur." -#: utils/misc/guc.c:925 +#: utils/misc/guc.c:1000 msgid "Enables the planner's use of TID scan plans." msgstr "Active l'utilisation de plans de parcours TID par le planificateur." -#: utils/misc/guc.c:935 +#: utils/misc/guc.c:1010 msgid "Enables the planner's use of explicit sort steps." msgstr "Active l'utilisation des étapes de tris explicites par le planificateur." -#: utils/misc/guc.c:945 +#: utils/misc/guc.c:1020 +msgid "Enables the planner's use of incremental sort steps." +msgstr "Active l'utilisation des étapes de tris incrémentaux par le planificateur." + +#: utils/misc/guc.c:1029 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Active l'utilisation de plans d'agrégats hâchés par le planificateur." -#: utils/misc/guc.c:955 +#: utils/misc/guc.c:1039 msgid "Enables the planner's use of materialization." msgstr "Active l'utilisation de la matérialisation par le planificateur." -#: utils/misc/guc.c:965 +#: utils/misc/guc.c:1049 +#, fuzzy +#| msgid "Enables the planner's use of parallel hash plans." +msgid "Enables the planner's use of result caching." +msgstr "Active l'utilisation de plans de jointures hâchées parallèles par le planificateur." + +#: utils/misc/guc.c:1059 msgid "Enables the planner's use of nested-loop join plans." msgstr "Active l'utilisation de plans avec des jointures imbriquées par le planificateur." -#: utils/misc/guc.c:975 +#: utils/misc/guc.c:1069 msgid "Enables the planner's use of merge join plans." msgstr "Active l'utilisation de plans de jointures MERGE par le planificateur." -#: utils/misc/guc.c:985 +#: utils/misc/guc.c:1079 msgid "Enables the planner's use of hash join plans." msgstr "Active l'utilisation de plans de jointures hâchées par le planificateur." -#: utils/misc/guc.c:995 +#: utils/misc/guc.c:1089 msgid "Enables the planner's use of gather merge plans." msgstr "Active l'utilisation de plans GATHER MERGE par le planificateur." -#: utils/misc/guc.c:1005 +#: utils/misc/guc.c:1099 msgid "Enables partitionwise join." msgstr "Active l'utilisation de jointures entre partitions." -#: utils/misc/guc.c:1015 +#: utils/misc/guc.c:1109 msgid "Enables partitionwise aggregation and grouping." msgstr "Active les agrégations et regroupements par partition." -#: utils/misc/guc.c:1025 +#: utils/misc/guc.c:1119 msgid "Enables the planner's use of parallel append plans." msgstr "Active l'utilisation de plans Append parallèles par le planificateur." -#: utils/misc/guc.c:1035 +#: utils/misc/guc.c:1129 msgid "Enables the planner's use of parallel hash plans." msgstr "Active l'utilisation de plans de jointures hâchées parallèles par le planificateur." -#: utils/misc/guc.c:1045 -msgid "Enables plan-time and run-time partition pruning." +#: utils/misc/guc.c:1139 +#, fuzzy +#| msgid "Enables plan-time and run-time partition pruning." +msgid "Enables plan-time and execution-time partition pruning." msgstr "Active l'élagage de partition durant la planification et l'exécution." -#: utils/misc/guc.c:1046 +#: utils/misc/guc.c:1140 msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." msgstr "Autorise le planificateur de requête et l'exécuteur à comparer les limites des partitions avec les conditions des requêtes pour déterminer les partitions à parcourir." -#: utils/misc/guc.c:1057 +#: utils/misc/guc.c:1151 +#, fuzzy +#| msgid "Enables the planner's use of parallel append plans." +msgid "Enables the planner's use of async append plans." +msgstr "Active l'utilisation de plans Append parallèles par le planificateur." + +#: utils/misc/guc.c:1161 msgid "Enables genetic query optimization." msgstr "Active l'optimisation génétique des requêtes." -#: utils/misc/guc.c:1058 +#: utils/misc/guc.c:1162 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Cet algorithme essaie de faire une planification sans recherche exhaustive." -#: utils/misc/guc.c:1069 +#: utils/misc/guc.c:1173 msgid "Shows whether the current user is a superuser." msgstr "Affiche si l'utilisateur actuel est un super-utilisateur." -#: utils/misc/guc.c:1079 +#: utils/misc/guc.c:1183 msgid "Enables advertising the server via Bonjour." msgstr "Active la publication du serveur via Bonjour." -#: utils/misc/guc.c:1088 +#: utils/misc/guc.c:1192 msgid "Collects transaction commit time." msgstr "Récupère l'horodatage de la validation de la transaction." -#: utils/misc/guc.c:1097 +#: utils/misc/guc.c:1201 msgid "Enables SSL connections." msgstr "Active les connexions SSL." -#: utils/misc/guc.c:1106 +#: utils/misc/guc.c:1210 msgid "Also use ssl_passphrase_command during server reload." msgstr "Utilise également ssl_passphrase_command durant le rechargement du serveur." -#: utils/misc/guc.c:1115 +#: utils/misc/guc.c:1219 msgid "Give priority to server ciphersuite order." msgstr "Donne la priorité à l'ordre des chiffrements du serveur." -#: utils/misc/guc.c:1124 +#: utils/misc/guc.c:1228 msgid "Forces synchronization of updates to disk." msgstr "Force la synchronisation des mises à jour sur le disque." -#: utils/misc/guc.c:1125 +#: utils/misc/guc.c:1229 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "" "Le serveur utilisera l'appel système fsync() à différents endroits pour\n" @@ -24739,19 +26275,19 @@ msgstr "" "nous assure qu'un groupe de bases de données se retrouvera dans un état\n" "cohérent après un arrêt brutal dû au système d'exploitation ou au matériel." -#: utils/misc/guc.c:1136 +#: utils/misc/guc.c:1240 msgid "Continues processing after a checksum failure." msgstr "Continue le traitement après un échec de la somme de contrôle." -#: utils/misc/guc.c:1137 +#: utils/misc/guc.c:1241 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "La détection d'une erreur de somme de contrôle a normalement pour effet de rapporter une erreur, annulant la transaction en cours. Régler ignore_checksum_failure à true permet au système d'ignorer cette erreur (mais rapporte toujours un avertissement), et continue le traitement. Ce comportement pourrait causer un arrêt brutal ou d'autres problèmes sérieux. Cela a un effet seulement si les sommes de contrôle (checksums) sont activés." -#: utils/misc/guc.c:1151 +#: utils/misc/guc.c:1255 msgid "Continues processing past damaged page headers." msgstr "Continue le travail après les en-têtes de page endommagés." -#: utils/misc/guc.c:1152 +#: utils/misc/guc.c:1256 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "" "La détection d'une en-tête de page endommagée cause normalement le rapport\n" @@ -24760,181 +26296,223 @@ msgstr "" "message d'attention et continue à travailler. Ce comportement détruira des\n" "données, notamment toutes les lignes de la page endommagée." -#: utils/misc/guc.c:1165 +#: utils/misc/guc.c:1269 +msgid "Continues recovery after an invalid pages failure." +msgstr "Continue la restauration après un échec des pages invalides." + +#: utils/misc/guc.c:1270 +msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." +msgstr "La détection des enregistrements de journaux de transactions ayant des références à des blocs invalides lors de la restauration a pour effet que PostgreSQL lève une erreur de niveau PANIC, annulant la restauration. Configurer ignore_invalid_pages à true permet au système d'ignorer les références invalides de page dans les enregistrements des journaux de transactions (tout en rapportant toujours un message d'avertissement), et continue la restauration. Ce comportement pourrait causer des arrêts brutaux, des pertes de données, propager ou cacher une corruption, ainsi que d'autres problèmes sérieux. Ce paramètre a un effet seulement lors de la restauration et en mode standby." + +#: utils/misc/guc.c:1288 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "" "Écrit des pages complètes dans les WAL lors d'une première modification après\n" "un point de vérification." -#: utils/misc/guc.c:1166 +#: utils/misc/guc.c:1289 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "Une page écrite au moment d'un arrêt brutal du système d'exploitation pourrait n'être écrite sur le disque que partiellement. Lors de la récupération, les modifications stockées dans le journal de transaction ne sont pas suffisantes pour terminer la récupération. Cette option écrit les pages lors de la première modification après un checkpoint afin que la récupération complète soit possible." -#: utils/misc/guc.c:1179 -msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications." +#: utils/misc/guc.c:1301 +#, fuzzy +#| msgid "cannot execute %s during recovery" +msgid "Prefetch referenced blocks during recovery." +msgstr "ne peut pas exécuté %s lors de la restauration" + +#: utils/misc/guc.c:1302 +msgid "Read ahead of the current replay position to find uncached blocks." msgstr "" -"Écrit des pages complètes dans les WAL lors d'une première modification après\n" -"un point de vérification, y compris pour des modifications non critiques." -#: utils/misc/guc.c:1189 +#: utils/misc/guc.c:1310 +msgid "Prefetch blocks that have full page images in the WAL." +msgstr "" + +#: utils/misc/guc.c:1311 +msgid "On some systems, there is no benefit to prefetching pages that will be entirely overwritten, but if the logical page size of the filesystem is larger than PostgreSQL's, this can be beneficial. This option has no effect unless recovery_prefetch is enabled." +msgstr "" + +#: utils/misc/guc.c:1323 +msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification." +msgstr "Écrit des pages complètes dans les WAL lors d'une première modification après un point de vérification, y compris pour des modifications non critiques." + +#: utils/misc/guc.c:1333 msgid "Compresses full-page writes written in WAL file." msgstr "Compresse les blocs complets écrits dans les journaux de transactions." -#: utils/misc/guc.c:1199 +#: utils/misc/guc.c:1343 msgid "Writes zeroes to new WAL files before first use." msgstr "Écrit des zéros dans les nouveaux journaux de transaction avant leur première utilisation." -#: utils/misc/guc.c:1209 +#: utils/misc/guc.c:1353 msgid "Recycles WAL files by renaming them." msgstr "Recycle les journaux de transactions en les renommant." -#: utils/misc/guc.c:1219 +#: utils/misc/guc.c:1363 msgid "Logs each checkpoint." msgstr "Trace tous les points de vérification." -#: utils/misc/guc.c:1228 +#: utils/misc/guc.c:1372 msgid "Logs each successful connection." msgstr "Trace toutes les connexions réussies." -#: utils/misc/guc.c:1237 +#: utils/misc/guc.c:1381 msgid "Logs end of a session, including duration." msgstr "Trace la fin d'une session, avec sa durée." -#: utils/misc/guc.c:1246 +#: utils/misc/guc.c:1390 msgid "Logs each replication command." msgstr "Trace chaque commande de réplication." -#: utils/misc/guc.c:1255 +#: utils/misc/guc.c:1399 msgid "Shows whether the running server has assertion checks enabled." msgstr "Affiche si le serveur en cours d'exécution a les vérifications d'assertion activées." -#: utils/misc/guc.c:1270 +#: utils/misc/guc.c:1414 msgid "Terminate session on any error." msgstr "Termine la session sans erreur." -#: utils/misc/guc.c:1279 +#: utils/misc/guc.c:1423 msgid "Reinitialize server after backend crash." msgstr "Réinitialisation du serveur après un arrêt brutal d'un processus serveur." -#: utils/misc/guc.c:1289 +#: utils/misc/guc.c:1432 +msgid "Remove temporary files after backend crash." +msgstr "Suppression des fichiers temporaires après un arrêt brutal d'un processus serveur." + +#: utils/misc/guc.c:1442 msgid "Logs the duration of each completed SQL statement." msgstr "Trace la durée de chaque instruction SQL terminée." -#: utils/misc/guc.c:1298 +#: utils/misc/guc.c:1451 msgid "Logs each query's parse tree." msgstr "Trace l'arbre d'analyse de chaque requête." -#: utils/misc/guc.c:1307 +#: utils/misc/guc.c:1460 msgid "Logs each query's rewritten parse tree." msgstr "Trace l'arbre d'analyse réécrit de chaque requête." -#: utils/misc/guc.c:1316 +#: utils/misc/guc.c:1469 msgid "Logs each query's execution plan." msgstr "Trace le plan d'exécution de chaque requête." -#: utils/misc/guc.c:1325 +#: utils/misc/guc.c:1478 msgid "Indents parse and plan tree displays." msgstr "Indente l'affichage des arbres d'analyse et de planification." -#: utils/misc/guc.c:1334 +#: utils/misc/guc.c:1487 +#, fuzzy +#| msgid "unterminated quoted identifier" +msgid "Compute query identifiers." +msgstr "identifiant entre guillemets non terminé" + +#: utils/misc/guc.c:1496 msgid "Writes parser performance statistics to the server log." msgstr "" "Écrit les statistiques de performance de l'analyseur dans les journaux applicatifs\n" "du serveur." -#: utils/misc/guc.c:1343 +#: utils/misc/guc.c:1505 msgid "Writes planner performance statistics to the server log." msgstr "" "Écrit les statistiques de performance de planification dans les journaux\n" "applicatifs du serveur." -#: utils/misc/guc.c:1352 +#: utils/misc/guc.c:1514 msgid "Writes executor performance statistics to the server log." msgstr "" "Écrit les statistiques de performance de l'exécuteur dans les journaux applicatifs\n" "du serveur." -#: utils/misc/guc.c:1361 +#: utils/misc/guc.c:1523 msgid "Writes cumulative performance statistics to the server log." msgstr "" "Écrit les statistiques de performance cumulatives dans les journaux applicatifs\n" "du serveur." -#: utils/misc/guc.c:1371 +#: utils/misc/guc.c:1533 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Trace les statistiques d'utilisation des ressources systèmes (mémoire et CPU) sur les différentes opérations B-tree." -#: utils/misc/guc.c:1383 +#: utils/misc/guc.c:1545 msgid "Collects information about executing commands." msgstr "Récupère les statistiques sur les commandes en exécution." -#: utils/misc/guc.c:1384 +#: utils/misc/guc.c:1546 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "" "Active la récupération d'informations sur la commande en cours d'exécution\n" "pour chaque session, avec l'heure de début de l'exécution de la commande." -#: utils/misc/guc.c:1394 +#: utils/misc/guc.c:1556 msgid "Collects statistics on database activity." msgstr "Récupère les statistiques sur l'activité de la base de données." -#: utils/misc/guc.c:1403 +#: utils/misc/guc.c:1565 msgid "Collects timing statistics for database I/O activity." msgstr "Récupère les statistiques d'horodatage sur l'activité en entrées/sorties de la base de données." -#: utils/misc/guc.c:1413 +#: utils/misc/guc.c:1574 +msgid "Collects timing statistics for WAL I/O activity." +msgstr "Récupère les statistiques d'horodatage sur l'activité en entrées/sorties des journaux de transactions." + +#: utils/misc/guc.c:1584 msgid "Updates the process title to show the active SQL command." msgstr "" "Met à jour le titre du processus pour indiquer la commande SQL en cours\n" "d'exécution." -#: utils/misc/guc.c:1414 +#: utils/misc/guc.c:1585 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "" "Active la mise à jour du titre du processus chaque fois qu'une nouvelle\n" "commande SQL est reçue par le serveur." -#: utils/misc/guc.c:1427 +#: utils/misc/guc.c:1598 msgid "Starts the autovacuum subprocess." msgstr "Exécute le sous-processus de l'autovacuum." -#: utils/misc/guc.c:1437 +#: utils/misc/guc.c:1608 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Génère une sortie de débogage pour LISTEN et NOTIFY." -#: utils/misc/guc.c:1449 +#: utils/misc/guc.c:1620 msgid "Emits information about lock usage." msgstr "Émet des informations sur l'utilisation des verrous." -#: utils/misc/guc.c:1459 +#: utils/misc/guc.c:1630 msgid "Emits information about user lock usage." msgstr "Émet des informations sur l'utilisation des verrous utilisateurs." -#: utils/misc/guc.c:1469 +#: utils/misc/guc.c:1640 msgid "Emits information about lightweight lock usage." msgstr "Émet des informations sur l'utilisation des verrous légers." -#: utils/misc/guc.c:1479 +#: utils/misc/guc.c:1650 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Trace les informations sur les verrous actuels lorsqu'un délai sur le deadlock est dépassé." -#: utils/misc/guc.c:1491 +#: utils/misc/guc.c:1662 msgid "Logs long lock waits." msgstr "Trace les attentes longues de verrou." -#: utils/misc/guc.c:1501 +#: utils/misc/guc.c:1671 +msgid "Logs standby recovery conflict waits." +msgstr "" + +#: utils/misc/guc.c:1680 msgid "Logs the host name in the connection logs." msgstr "Trace le nom d'hôte dans les traces de connexion." -#: utils/misc/guc.c:1502 +#: utils/misc/guc.c:1681 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "Par défaut, une connexion ne trace que l'adresse IP de l'hôte se connectant. Si vous voulez que s'affiche le nom de l'hôte, vous pouvez activer cette option mais, selon la configuration de la résolution de noms de votre hôte, cela peut imposer un coût en performances non négligeable." -#: utils/misc/guc.c:1513 +#: utils/misc/guc.c:1692 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Traite « expr=NULL » comme « expr IS NULL »." -#: utils/misc/guc.c:1514 +#: utils/misc/guc.c:1693 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "" "Une fois activé, les expressions de la forme expr = NULL (ou NULL = expr)\n" @@ -24942,321 +26520,335 @@ msgstr "" "l'expression est évaluée comme étant NULL et false sinon. Le comportement\n" "correct de expr = NULL est de toujours renvoyer NULL (inconnu)." -#: utils/misc/guc.c:1526 +#: utils/misc/guc.c:1705 msgid "Enables per-database user names." msgstr "Active les noms d'utilisateur par base de données." -#: utils/misc/guc.c:1535 +#: utils/misc/guc.c:1714 msgid "Sets the default read-only status of new transactions." msgstr "Initialise le statut de lecture seule par défaut des nouvelles transactions." -#: utils/misc/guc.c:1544 +#: utils/misc/guc.c:1724 msgid "Sets the current transaction's read-only status." msgstr "Affiche le statut de lecture seule de la transaction actuelle." -#: utils/misc/guc.c:1554 +#: utils/misc/guc.c:1734 msgid "Sets the default deferrable status of new transactions." msgstr "Initialise le statut déferrable par défaut des nouvelles transactions." -#: utils/misc/guc.c:1563 +#: utils/misc/guc.c:1743 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "" "S'il faut repousser une transaction sérialisable en lecture seule jusqu'à ce qu'elle\n" "puisse être exécutée sans échecs possibles de sérialisation." -#: utils/misc/guc.c:1573 +#: utils/misc/guc.c:1753 msgid "Enable row security." msgstr "Active la sécurité niveau ligne." -#: utils/misc/guc.c:1574 +#: utils/misc/guc.c:1754 msgid "When enabled, row security will be applied to all users." msgstr "Lorsqu'il est activé, le mode de sécurité niveau ligne sera appliqué à tous les utilisateurs." -#: utils/misc/guc.c:1582 -msgid "Check function bodies during CREATE FUNCTION." -msgstr "Vérifie les corps de fonction lors du CREATE FUNCTION." +#: utils/misc/guc.c:1762 +msgid "Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE." +msgstr "Vérifie les corps de routine lors du CREATE FUNCTION et du CREATE PROCEDURE." -#: utils/misc/guc.c:1591 +#: utils/misc/guc.c:1771 msgid "Enable input of NULL elements in arrays." msgstr "Active la saisie d'éléments NULL dans les tableaux." -#: utils/misc/guc.c:1592 +#: utils/misc/guc.c:1772 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "" "Si activé, un NULL sans guillemets en tant que valeur d'entrée dans un\n" "tableau signifie une valeur NULL ; sinon, il sera pris littéralement." -#: utils/misc/guc.c:1608 +#: utils/misc/guc.c:1788 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OID n'est plus supporté ; ce paramètre ne peut être positionné qu'à false (faux)." -#: utils/misc/guc.c:1618 +#: utils/misc/guc.c:1798 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "" "Lance un sous-processus pour capturer la sortie d'erreurs (stderr) et/ou\n" "csvlogs dans des journaux applicatifs." -#: utils/misc/guc.c:1627 +#: utils/misc/guc.c:1807 msgid "Truncate existing log files of same name during log rotation." msgstr "" "Tronque les journaux applicatifs existants du même nom lors de la rotation\n" "des journaux applicatifs." -#: utils/misc/guc.c:1638 +#: utils/misc/guc.c:1818 msgid "Emit information about resource usage in sorting." msgstr "Émet des informations sur l'utilisation des ressources lors d'un tri." -#: utils/misc/guc.c:1652 +#: utils/misc/guc.c:1832 msgid "Generate debugging output for synchronized scanning." msgstr "Génère une sortie de débogage pour les parcours synchronisés." -#: utils/misc/guc.c:1667 +#: utils/misc/guc.c:1847 msgid "Enable bounded sorting using heap sort." msgstr "Active le tri limité en utilisant le tri de heap." -#: utils/misc/guc.c:1680 +#: utils/misc/guc.c:1860 msgid "Emit WAL-related debugging output." msgstr "Émet une sortie de débogage concernant les journaux de transactions." -#: utils/misc/guc.c:1692 +#: utils/misc/guc.c:1872 msgid "Datetimes are integer based." msgstr "Les types datetime sont basés sur des entiers." -#: utils/misc/guc.c:1703 +#: utils/misc/guc.c:1883 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "" "Indique si les noms d'utilisateurs Kerberos et GSSAPI devraient être traités\n" "sans se soucier de la casse." -#: utils/misc/guc.c:1713 +#: utils/misc/guc.c:1893 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Avertie sur les échappements par antislash dans les chaînes ordinaires." -#: utils/misc/guc.c:1723 +#: utils/misc/guc.c:1903 msgid "Causes '...' strings to treat backslashes literally." msgstr "Fait que les chaînes '...' traitent les antislashs littéralement." -#: utils/misc/guc.c:1734 +#: utils/misc/guc.c:1914 msgid "Enable synchronized sequential scans." msgstr "Active l'utilisation des parcours séquentiels synchronisés." -#: utils/misc/guc.c:1744 +#: utils/misc/guc.c:1924 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Définit s'il faut inclure ou exclure la transaction de la cible de restauration." -#: utils/misc/guc.c:1754 +#: utils/misc/guc.c:1934 msgid "Allows connections and queries during recovery." msgstr "Autorise les connexions et les requêtes pendant la restauration." -#: utils/misc/guc.c:1764 +#: utils/misc/guc.c:1944 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Permet l'envoi d'informations d'un serveur en hot standby vers le serveur principal pour éviter les conflits de requêtes." -#: utils/misc/guc.c:1774 +#: utils/misc/guc.c:1954 +msgid "Shows whether hot standby is currently active." +msgstr "" + +#: utils/misc/guc.c:1965 msgid "Allows modifications of the structure of system tables." msgstr "Permet les modifications de la structure des tables systèmes." -#: utils/misc/guc.c:1785 +#: utils/misc/guc.c:1976 msgid "Disables reading from system indexes." msgstr "Désactive la lecture des index système." -#: utils/misc/guc.c:1786 +#: utils/misc/guc.c:1977 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "" "Cela n'empêche pas la mise à jour des index, donc vous pouvez l'utiliser en\n" "toute sécurité. La pire conséquence est la lenteur." -#: utils/misc/guc.c:1797 +#: utils/misc/guc.c:1988 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "" "Active la compatibilité ascendante pour la vérification des droits sur les\n" "Large Objects." -#: utils/misc/guc.c:1798 +#: utils/misc/guc.c:1989 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "" "Ignore la vérification des droits lors de la lecture et de la modification\n" "des Larges Objects, pour la compatibilité avec les versions antérieures à la\n" "9.0." -#: utils/misc/guc.c:1808 -msgid "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." -msgstr "Émet un avertissement pour les constructions dont la signification a changé depuis PostgreSQL 9.4." - -#: utils/misc/guc.c:1818 +#: utils/misc/guc.c:1999 msgid "When generating SQL fragments, quote all identifiers." msgstr "Lors de la génération des rragments SQL, mettre entre guillemets tous les identifiants." -#: utils/misc/guc.c:1828 +#: utils/misc/guc.c:2009 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Affiche si les sommes de contrôle sont activées sur les données pour cette instance." -#: utils/misc/guc.c:1839 +#: utils/misc/guc.c:2020 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Ajoute un numéro de séquence aux messages syslog pour éviter des suppressions de doublons." -#: utils/misc/guc.c:1849 +#: utils/misc/guc.c:2030 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "Sépare les messages envoyés à syslog par lignes afin de les faire tenir dans 1024 octets." -#: utils/misc/guc.c:1859 +#: utils/misc/guc.c:2040 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Controle si les nœuds Gather et Gather Merge doivent également exécuter des sous-plans." -#: utils/misc/guc.c:1860 -msgid "Should gather nodes also run subplans, or just gather tuples?" +#: utils/misc/guc.c:2041 +#, fuzzy +#| msgid "Should gather nodes also run subplans, or just gather tuples?" +msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "Est-ce que les nœuds Gather devrait également exécuter des sous-plans, ou juste receuiller des lignes ?" -#: utils/misc/guc.c:1870 +#: utils/misc/guc.c:2051 msgid "Allow JIT compilation." msgstr "Autorise la compilation JIT." -#: utils/misc/guc.c:1881 -msgid "Register JIT compiled function with debugger." +#: utils/misc/guc.c:2062 +#, fuzzy +#| msgid "Register JIT compiled function with debugger." +msgid "Register JIT-compiled functions with debugger." msgstr "Enregister la fonction JIT compilée avec debugueur." -#: utils/misc/guc.c:1898 +#: utils/misc/guc.c:2079 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "Écrire le bitcode LLVM pour faciliter de débugage JIT." -#: utils/misc/guc.c:1909 +#: utils/misc/guc.c:2090 msgid "Allow JIT compilation of expressions." msgstr "Autorise la compilation JIT des expressions." -#: utils/misc/guc.c:1920 -msgid "Register JIT compiled function with perf profiler." +#: utils/misc/guc.c:2101 +#, fuzzy +#| msgid "Register JIT compiled function with perf profiler." +msgid "Register JIT-compiled functions with perf profiler." msgstr "Enregistrer la fonction compilée JIT avec le profiler perf." -#: utils/misc/guc.c:1937 +#: utils/misc/guc.c:2118 msgid "Allow JIT compilation of tuple deforming." msgstr "Autorise la compilation JIT de la décomposition des lignes." -#: utils/misc/guc.c:1948 +#: utils/misc/guc.c:2129 msgid "Whether to continue running after a failure to sync data files." msgstr "Soit de continuer à s'exécuter après un échec lors de la synchronisation des fichiers de données." -#: utils/misc/guc.c:1966 +#: utils/misc/guc.c:2138 +msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." +msgstr "Configure si un wal receiver doit créer un slot de réplication temporaire si aucun slot permanent n'est configuré." + +#: utils/misc/guc.c:2156 msgid "Forces a switch to the next WAL file if a new file has not been started within N seconds." msgstr "" "Force un changement du journal de transaction si un nouveau fichier n'a pas\n" "été créé depuis N secondes." -#: utils/misc/guc.c:1977 +#: utils/misc/guc.c:2167 msgid "Waits N seconds on connection startup after authentication." msgstr "Attends N secondes après l'authentification." -#: utils/misc/guc.c:1978 utils/misc/guc.c:2524 +#: utils/misc/guc.c:2168 utils/misc/guc.c:2766 msgid "This allows attaching a debugger to the process." msgstr "Ceci permet d'attacher un débogueur au processus." -#: utils/misc/guc.c:1987 +#: utils/misc/guc.c:2177 msgid "Sets the default statistics target." msgstr "Initialise la cible par défaut des statistiques." -#: utils/misc/guc.c:1988 +#: utils/misc/guc.c:2178 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "" "Ceci s'applique aux colonnes de tables qui n'ont pas de cible spécifique\n" "pour la colonne initialisée via ALTER TABLE SET STATISTICS." -#: utils/misc/guc.c:1997 +#: utils/misc/guc.c:2187 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "" "Initialise la taille de la liste FROM en dehors de laquelle les\n" "sous-requêtes ne sont pas rassemblées." -#: utils/misc/guc.c:1999 +#: utils/misc/guc.c:2189 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "" "Le planificateur fusionne les sous-requêtes dans des requêtes supérieures\n" "si la liste FROM résultante n'a pas plus de ce nombre d'éléments." -#: utils/misc/guc.c:2010 +#: utils/misc/guc.c:2200 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "" "Initialise la taille de la liste FROM en dehors de laquelle les contructions\n" "JOIN ne sont pas aplanies." -#: utils/misc/guc.c:2012 +#: utils/misc/guc.c:2202 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "" "La planificateur applanira les constructions JOIN explicites dans des listes\n" "d'éléments FROM lorsqu'une liste d'au plus ce nombre d'éléments en\n" "résulterait." -#: utils/misc/guc.c:2023 +#: utils/misc/guc.c:2213 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Initialise la limite des éléments FROM en dehors de laquelle GEQO est utilisé." -#: utils/misc/guc.c:2033 +#: utils/misc/guc.c:2223 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "" "GEQO : l'effort est utilisé pour initialiser une valeur par défaut pour les\n" "autres paramètres GEQO." -#: utils/misc/guc.c:2043 +#: utils/misc/guc.c:2233 msgid "GEQO: number of individuals in the population." msgstr "GEQO : nombre d'individus dans une population." -#: utils/misc/guc.c:2044 utils/misc/guc.c:2054 +#: utils/misc/guc.c:2234 utils/misc/guc.c:2244 msgid "Zero selects a suitable default value." msgstr "Zéro sélectionne une valeur par défaut convenable." -#: utils/misc/guc.c:2053 +#: utils/misc/guc.c:2243 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO : nombre d'itérations dans l'algorithme." -#: utils/misc/guc.c:2065 +#: utils/misc/guc.c:2255 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Temps d'attente du verrou avant de vérifier les verrous bloqués." -#: utils/misc/guc.c:2076 +#: utils/misc/guc.c:2266 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Définit le délai maximum avant d'annuler les requêtes lorsqu'un serveur « hot standby » traite les données des journaux de transactions archivés" -#: utils/misc/guc.c:2087 +#: utils/misc/guc.c:2277 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "" "Initialise le délai maximum avant d'annuler les requêtes lorsqu'un serveur en\n" "hotstandby traite les données des journaux de transactions envoyés en flux." -#: utils/misc/guc.c:2098 +#: utils/misc/guc.c:2288 msgid "Sets the minimum delay for applying changes during recovery." msgstr "Définit la durée minimale pour appliquer des changements lors de la restauration." -#: utils/misc/guc.c:2109 +#: utils/misc/guc.c:2299 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "Définit l'intervalle maximum entre les rapports du statut du walreceiver au serveur émetteur." -#: utils/misc/guc.c:2120 +#: utils/misc/guc.c:2310 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "Définit la durée maximale d'attente pour réceptionner des donnés du serveur émetteur." -#: utils/misc/guc.c:2131 +#: utils/misc/guc.c:2321 msgid "Sets the maximum number of concurrent connections." msgstr "Nombre maximum de connexions simultanées." -#: utils/misc/guc.c:2142 +#: utils/misc/guc.c:2332 msgid "Sets the number of connection slots reserved for superusers." msgstr "Nombre de connexions réservées aux super-utilisateurs." -#: utils/misc/guc.c:2156 +#: utils/misc/guc.c:2342 +msgid "Amount of dynamic shared memory reserved at startup." +msgstr "Quantité de mémoire partagée dynamique réservée au démarrage." + +#: utils/misc/guc.c:2357 msgid "Sets the number of shared memory buffers used by the server." msgstr "Nombre de tampons en mémoire partagée utilisé par le serveur." -#: utils/misc/guc.c:2167 +#: utils/misc/guc.c:2368 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Nombre maximum de tampons en mémoire partagée utilisés par chaque session." -#: utils/misc/guc.c:2178 +#: utils/misc/guc.c:2379 msgid "Sets the TCP port the server listens on." msgstr "Port TCP sur lequel le serveur écoutera." -#: utils/misc/guc.c:2188 +#: utils/misc/guc.c:2389 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Droits d'accès au socket domaine Unix." -#: utils/misc/guc.c:2189 +#: utils/misc/guc.c:2390 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "" "Les sockets de domaine Unix utilise l'ensemble des droits habituels du système\n" @@ -25264,211 +26856,249 @@ msgstr "" "mode numérique de la forme acceptée par les appels système chmod et umask\n" "(pour utiliser le format octal, le nombre doit commencer par un zéro)." -#: utils/misc/guc.c:2203 +#: utils/misc/guc.c:2404 msgid "Sets the file permissions for log files." msgstr "Initialise les droits des fichiers de trace." -#: utils/misc/guc.c:2204 +#: utils/misc/guc.c:2405 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "" "La valeur du paramètre est attendue dans le format numérique du mode accepté\n" "par les appels système chmod et umask (pour utiliser le format octal\n" "personnalisé, le numéro doit commencer par un zéro)." -#: utils/misc/guc.c:2218 +#: utils/misc/guc.c:2419 msgid "Mode of the data directory." msgstr "Mode du répertoire des données du serveur." -#: utils/misc/guc.c:2219 +#: utils/misc/guc.c:2420 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "" "La valeur du paramètre est une spécification numérique de mode dans la forme acceptée\n" "par les appels système chmod et umask (pour utiliser le format octal\n" "personnalisé, le numéro doit commencer par un 0 (zéro).)" -#: utils/misc/guc.c:2232 +#: utils/misc/guc.c:2433 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Initialise la mémoire maximum utilisée pour les espaces de travail des requêtes." -#: utils/misc/guc.c:2233 +#: utils/misc/guc.c:2434 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "" "Spécifie la mémoire à utiliser par les opérations de tris internes et par\n" "les tables de hachage avant de passer sur des fichiers temporaires sur disque." -#: utils/misc/guc.c:2245 +#: utils/misc/guc.c:2446 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Initialise la mémoire maximum utilisée pour les opérations de maintenance." -#: utils/misc/guc.c:2246 +#: utils/misc/guc.c:2447 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Ceci inclut les opérations comme VACUUM et CREATE INDEX." -#: utils/misc/guc.c:2261 +#: utils/misc/guc.c:2457 +msgid "Sets the maximum memory to be used for logical decoding." +msgstr "Initialise la mémoire maximum utilisée pour le décodage logique." + +#: utils/misc/guc.c:2458 +msgid "This much memory can be used by each internal reorder buffer before spilling to disk." +msgstr "Cette quantité de mémoire peut être utilisée par chaque cache de tri interne avant de passer sur des fichiers temporaires sur disque." + +#: utils/misc/guc.c:2474 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Initialise la profondeur maximale de la pile, en Ko." -#: utils/misc/guc.c:2272 +#: utils/misc/guc.c:2485 msgid "Limits the total size of all temporary files used by each process." msgstr "Limite la taille totale de tous les fichiers temporaires utilisés par chaque processus." -#: utils/misc/guc.c:2273 +#: utils/misc/guc.c:2486 msgid "-1 means no limit." msgstr "-1 signifie sans limite." -#: utils/misc/guc.c:2283 +#: utils/misc/guc.c:2496 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Coût d'un VACUUM pour une page trouvée dans le cache du tampon." -#: utils/misc/guc.c:2293 +#: utils/misc/guc.c:2506 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Coût d'un VACUUM pour une page introuvable dans le cache du tampon." -#: utils/misc/guc.c:2303 +#: utils/misc/guc.c:2516 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Coût d'un VACUUM pour une page modifiée par VACUUM." -#: utils/misc/guc.c:2313 +#: utils/misc/guc.c:2526 msgid "Vacuum cost amount available before napping." msgstr "Coût du VACUUM disponible avant un repos." -#: utils/misc/guc.c:2323 +#: utils/misc/guc.c:2536 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Coût du VACUUM disponible avant un repos, pour autovacuum." -#: utils/misc/guc.c:2333 +#: utils/misc/guc.c:2546 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "" "Initialise le nombre maximum de fichiers ouverts simultanément pour chaque\n" "processus serveur." -#: utils/misc/guc.c:2346 +#: utils/misc/guc.c:2559 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Initialise le nombre maximum de transactions préparées simultanément." -#: utils/misc/guc.c:2357 +#: utils/misc/guc.c:2570 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Initialise l'OID minimum des tables pour tracer les verrous." -#: utils/misc/guc.c:2358 +#: utils/misc/guc.c:2571 msgid "Is used to avoid output on system tables." msgstr "Est utilisé pour éviter la sortie sur des tables systèmes." -#: utils/misc/guc.c:2367 +#: utils/misc/guc.c:2580 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Configure l'OID de la table avec une trace des verrous sans condition." -#: utils/misc/guc.c:2379 +#: utils/misc/guc.c:2592 msgid "Sets the maximum allowed duration of any statement." msgstr "Initialise la durée maximum permise pour toute instruction." -#: utils/misc/guc.c:2380 utils/misc/guc.c:2391 utils/misc/guc.c:2402 +#: utils/misc/guc.c:2593 utils/misc/guc.c:2604 utils/misc/guc.c:2615 utils/misc/guc.c:2626 msgid "A value of 0 turns off the timeout." msgstr "Une valeur de 0 désactive le timeout." -#: utils/misc/guc.c:2390 +#: utils/misc/guc.c:2603 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Initialise la durée maximum permise pour toute attente d'un verrou." -#: utils/misc/guc.c:2401 -msgid "Sets the maximum allowed duration of any idling transaction." +#: utils/misc/guc.c:2614 +#, fuzzy +#| msgid "Sets the maximum allowed duration of any idling transaction." +msgid "Sets the maximum allowed idle time between queries, when in a transaction." +msgstr "Initialise la durée maximale autorisée pour toute transaction en attente." + +#: utils/misc/guc.c:2625 +#, fuzzy +#| msgid "Sets the maximum allowed duration of any idling transaction." +msgid "Sets the maximum allowed idle time between queries, when not in a transaction." msgstr "Initialise la durée maximale autorisée pour toute transaction en attente." -#: utils/misc/guc.c:2412 +#: utils/misc/guc.c:2636 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Âge minimum à partir duquel VACUUM devra geler une ligne de table." -#: utils/misc/guc.c:2422 +#: utils/misc/guc.c:2646 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Âge à partir duquel VACUUM devra parcourir une table complète pour geler les lignes." -#: utils/misc/guc.c:2432 +#: utils/misc/guc.c:2656 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Âge minimum à partir duquel VACUUM devra geler un MultiXactId dans une ligne de table." -#: utils/misc/guc.c:2442 +#: utils/misc/guc.c:2666 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "" "Âge Multixact à partir duquel VACUUM devra parcourir une table complète pour geler les\n" "lignes." -#: utils/misc/guc.c:2452 +#: utils/misc/guc.c:2676 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Nombre de transactions à partir duquel les nettoyages VACUUM et HOT doivent être déferrés." -#: utils/misc/guc.c:2465 +#: utils/misc/guc.c:2685 +#, fuzzy +#| msgid "Age at which VACUUM should scan whole table to freeze tuples." +msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." +msgstr "Âge à partir duquel VACUUM devra parcourir une table complète pour geler les lignes." + +#: utils/misc/guc.c:2694 +#, fuzzy +#| msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." +msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." +msgstr "" +"Âge Multixact à partir duquel VACUUM devra parcourir une table complète pour geler les\n" +"lignes." + +#: utils/misc/guc.c:2707 msgid "Sets the maximum number of locks per transaction." msgstr "Initialise le nombre maximum de verrous par transaction." -#: utils/misc/guc.c:2466 +#: utils/misc/guc.c:2708 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "" "La table des verrous partagés est dimensionnée sur l'idée qu'au plus\n" "max_locks_per_transaction * max_connections objets distincts auront besoin\n" "d'être verrouillés à tout moment." -#: utils/misc/guc.c:2477 +#: utils/misc/guc.c:2719 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Initialise le nombre maximum de verrous prédicats par transaction." -#: utils/misc/guc.c:2478 +#: utils/misc/guc.c:2720 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "" "La table des verrous de prédicat partagés est dimensionnée sur l'idée qu'au plus\n" "max_pred_locks_per_transaction * max_connections objets distincts auront besoin\n" "d'être verrouillés à tout moment." -#: utils/misc/guc.c:2489 +#: utils/misc/guc.c:2731 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "Initialise le nombre maximum de pages et lignes verrouillées avec prédicats par transaction." -#: utils/misc/guc.c:2490 +#: utils/misc/guc.c:2732 msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." msgstr "Si plus que ce nombre de pages et lignes dans la même relation sont verrouillées par une connexion, ces verrous sont remplacés par un verrou de niveau relation." -#: utils/misc/guc.c:2500 +#: utils/misc/guc.c:2742 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Initialise le nombre maximum de lignes verrouillées avec prédicat par transaction." -#: utils/misc/guc.c:2501 +#: utils/misc/guc.c:2743 msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." msgstr "Si plus que ce nombre de lignes sur la même page sont verrouillées par une connexion, ces verrous sont remplacés par un verrou de niveau de page." -#: utils/misc/guc.c:2511 +#: utils/misc/guc.c:2753 msgid "Sets the maximum allowed time to complete client authentication." msgstr "" "Initialise le temps maximum en secondes pour terminer l'authentification du\n" "client." -#: utils/misc/guc.c:2523 +#: utils/misc/guc.c:2765 msgid "Waits N seconds on connection startup before authentication." msgstr "Attends N secondes au lancement de la connexion avant l'authentification." -#: utils/misc/guc.c:2534 -msgid "Sets the number of WAL files held for standby servers." -msgstr "Initialise le nombre de journaux de transactions conservés tenus par les seveurs en attente." +#: utils/misc/guc.c:2776 +msgid "Maximum buffer size for reading ahead in the WAL during recovery." +msgstr "" + +#: utils/misc/guc.c:2777 +msgid "This controls the maximum distance we can read ahead in the WAL to prefetch referenced blocks." +msgstr "" + +#: utils/misc/guc.c:2787 +msgid "Sets the size of WAL files held for standby servers." +msgstr "Initialise la volumétrie de journaux de transactions conservés pour les serveurs standby." -#: utils/misc/guc.c:2544 +#: utils/misc/guc.c:2798 msgid "Sets the minimum size to shrink the WAL to." msgstr "Initialise la taille minimale à laquelle réduire l'espace des journaux de transaction." -#: utils/misc/guc.c:2556 +#: utils/misc/guc.c:2810 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Initialise la volumétrie de journaux de transaction qui déclenche un checkpoint." -#: utils/misc/guc.c:2568 +#: utils/misc/guc.c:2822 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "" "Initialise le temps maximum entre des points de vérification (checkpoints)\n" "pour les journaux de transactions." -#: utils/misc/guc.c:2579 +#: utils/misc/guc.c:2833 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "" "Active des messages d'avertissement si les segments des points de\n" "vérifications se remplissent plus fréquemment que cette durée." -#: utils/misc/guc.c:2581 +#: utils/misc/guc.c:2835 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "" "Écrit un message dans les journaux applicatifs du serveur si les points de\n" @@ -25476,891 +27106,977 @@ msgstr "" "des points de vérification qui arrivent plus fréquemment que ce nombre de\n" "secondes. Une valeur 0 désactive l'avertissement." -#: utils/misc/guc.c:2593 utils/misc/guc.c:2750 utils/misc/guc.c:2779 +#: utils/misc/guc.c:2847 utils/misc/guc.c:3063 utils/misc/guc.c:3111 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "Nombre de pages après lequel les précédentes écritures seront synchronisées sur disque." -#: utils/misc/guc.c:2604 +#: utils/misc/guc.c:2858 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "" "Initialise le nombre de tampons de pages disque dans la mémoire partagée\n" "pour les journaux de transactions." -#: utils/misc/guc.c:2615 +#: utils/misc/guc.c:2869 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Temps entre les synchronisations des WAL sur disque effectuées par le processus d'écriture des journaux de transaction." -#: utils/misc/guc.c:2626 +#: utils/misc/guc.c:2880 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Quantité de WAL écrits par le processus d'écriture des journaux de transaction devant déclencher une synchronisation sur disque." -#: utils/misc/guc.c:2637 +#: utils/misc/guc.c:2891 +msgid "Size of new file to fsync instead of writing WAL." +msgstr "Taille d'un nouveau fichier à synchroniser sur disque au lieu d'écrire dans les journaux de transactions." + +#: utils/misc/guc.c:2902 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "" "Initialise le nombre maximum de processus d'envoi des journaux de transactions\n" "exécutés simultanément." -#: utils/misc/guc.c:2648 +#: utils/misc/guc.c:2913 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Initialise le nombre maximum de slots de réplication définis simultanément." -#: utils/misc/guc.c:2658 +#: utils/misc/guc.c:2923 +msgid "Sets the maximum WAL size that can be reserved by replication slots." +msgstr "Initialise la volumétrie maximale des journaux de transactions pouvant être réservée pour les slots de réplication." + +#: utils/misc/guc.c:2924 +msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." +msgstr "Les slots de réplication seront marqués comme échoués, et les segments relâchés pour suppression ou recyclage si autant d'espace est occupé par les journaux sur disque." + +#: utils/misc/guc.c:2936 msgid "Sets the maximum time to wait for WAL replication." msgstr "Initialise le temps maximum à attendre pour la réplication des WAL." -#: utils/misc/guc.c:2669 +#: utils/misc/guc.c:2947 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "" "Initialise le délai en microsecondes entre l'acceptation de la transaction\n" "et le vidage du journal de transaction sur disque." -#: utils/misc/guc.c:2681 +#: utils/misc/guc.c:2959 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "" "Initialise le nombre minimum de transactions ouvertes simultanément avant le\n" "commit_delay." -#: utils/misc/guc.c:2692 +#: utils/misc/guc.c:2970 msgid "Sets the number of digits displayed for floating-point values." msgstr "Initialise le nombre de chiffres affichés pour les valeurs à virgule flottante." -#: utils/misc/guc.c:2693 +#: utils/misc/guc.c:2971 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." msgstr "Ceci affecte les types de données real, double precision et géométriques. Une valeur zéro ou négative du paramètre est ajoutée au nombre standard de chiffres (FLT_DIG ou DBL_DIG comme approprié). Toute valeur plus grande que zéro sélectionne le mode de sortie précis." -#: utils/misc/guc.c:2705 -msgid "Sets the minimum execution time above which statements will be logged." -msgstr "" -"Initialise le temps d'exécution minimum au-dessus de lequel les instructions\n" -"seront tracées." +#: utils/misc/guc.c:2983 +msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." +msgstr "Initialise le temps d'exécution minimum au-dessus duquel un échantillon de requêtes est tracé. L'échantillonnage est déterminé par log_statement_sample_rate." -#: utils/misc/guc.c:2707 +#: utils/misc/guc.c:2986 +msgid "Zero logs a sample of all queries. -1 turns this feature off." +msgstr "Zéro trace un échantillon de toutes les requêtes. -1 désactive cette fonctionnalité." + +#: utils/misc/guc.c:2996 +msgid "Sets the minimum execution time above which all statements will be logged." +msgstr "Initialise le temps d'exécution minimum au-dessus duquel toutes les requêtes seront tracées." + +#: utils/misc/guc.c:2998 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Zéro affiche toutes les requêtes. -1 désactive cette fonctionnalité." -#: utils/misc/guc.c:2717 +#: utils/misc/guc.c:3008 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "" "Initialise le temps d'exécution minimum au-dessus duquel les actions\n" "autovacuum seront tracées." -#: utils/misc/guc.c:2719 +#: utils/misc/guc.c:3010 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Zéro affiche toutes les requêtes. -1 désactive cette fonctionnalité." -#: utils/misc/guc.c:2729 +#: utils/misc/guc.c:3020 +msgid "When logging statements, limit logged parameter values to first N bytes." +msgstr "Lors de la trace des requêtes, limite les valeurs des paramètres tracés aux N premiers octets." + +#: utils/misc/guc.c:3021 utils/misc/guc.c:3032 +msgid "-1 to print values in full." +msgstr "-1 pour afficher les valeurs complètement." + +#: utils/misc/guc.c:3031 +msgid "When reporting an error, limit logged parameter values to first N bytes." +msgstr "Lors de la trace d'une erreur, limite les valeurs des paramètres tracés aux N premiers octets." + +#: utils/misc/guc.c:3042 msgid "Background writer sleep time between rounds." msgstr "Durée d'endormissement du processus d'écriture en tâche de fond (background writer) entre deux cycles." -#: utils/misc/guc.c:2740 +#: utils/misc/guc.c:3053 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Nombre maximum de pages LRU à nettoyer par le processus d'écriture en tâche de fond (background writer)" -#: utils/misc/guc.c:2763 +#: utils/misc/guc.c:3076 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Nombre de requêtes simultanées pouvant être gérées efficacement par le sous-système disque." -#: utils/misc/guc.c:2764 -msgid "For RAID arrays, this should be approximately the number of drive spindles in the array." -msgstr "" -"Pour les systèmes RAID, cela devrait être approximativement le nombre de\n" -"têtes de lecture du système." +#: utils/misc/guc.c:3094 +msgid "A variant of effective_io_concurrency that is used for maintenance work." +msgstr "Une variante de effective_io_concurrency pouvant être utilisée pour les travaux de maintenance." -#: utils/misc/guc.c:2792 +#: utils/misc/guc.c:3124 msgid "Maximum number of concurrent worker processes." msgstr "Nombre maximum de background workers simultanés." -#: utils/misc/guc.c:2804 +#: utils/misc/guc.c:3136 msgid "Maximum number of logical replication worker processes." msgstr "Nombre maximum de processus workers de réplication logique." -#: utils/misc/guc.c:2816 +#: utils/misc/guc.c:3148 msgid "Maximum number of table synchronization workers per subscription." msgstr "Nombre maximum de workers de synchronisation par souscription." -#: utils/misc/guc.c:2826 +#: utils/misc/guc.c:3158 msgid "Automatic log file rotation will occur after N minutes." msgstr "La rotation automatique des journaux applicatifs s'effectuera toutes les N minutes." -#: utils/misc/guc.c:2837 +#: utils/misc/guc.c:3169 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "La rotation automatique des journaux applicatifs s'effectuera après N kilooctets." -#: utils/misc/guc.c:2848 +#: utils/misc/guc.c:3180 msgid "Shows the maximum number of function arguments." msgstr "Affiche le nombre maximum d'arguments de fonction." -#: utils/misc/guc.c:2859 +#: utils/misc/guc.c:3191 msgid "Shows the maximum number of index keys." msgstr "Affiche le nombre maximum de clés d'index." -#: utils/misc/guc.c:2870 +#: utils/misc/guc.c:3202 msgid "Shows the maximum identifier length." msgstr "Affiche la longueur maximum d'un identifiant." -#: utils/misc/guc.c:2881 +#: utils/misc/guc.c:3213 msgid "Shows the size of a disk block." msgstr "Affiche la taille d'un bloc de disque." -#: utils/misc/guc.c:2892 +#: utils/misc/guc.c:3224 msgid "Shows the number of pages per disk file." msgstr "Affiche le nombre de pages par fichier." -#: utils/misc/guc.c:2903 +#: utils/misc/guc.c:3235 msgid "Shows the block size in the write ahead log." msgstr "Affiche la taille du bloc dans les journaux de transactions." -#: utils/misc/guc.c:2914 +#: utils/misc/guc.c:3246 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Initalise le temps à attendre avant de retenter de récupérer un WAL après une tentative infructueuse." -#: utils/misc/guc.c:2926 +#: utils/misc/guc.c:3258 msgid "Shows the size of write ahead log segments." msgstr "Affiche la taille des journaux de transactions." -#: utils/misc/guc.c:2939 +#: utils/misc/guc.c:3271 msgid "Time to sleep between autovacuum runs." msgstr "Durée d'endormissement entre deux exécutions d'autovacuum." -#: utils/misc/guc.c:2949 +#: utils/misc/guc.c:3281 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Nombre minimum de lignes mises à jour ou supprimées avant le VACUUM." -#: utils/misc/guc.c:2958 +#: utils/misc/guc.c:3290 +msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." +msgstr "Nombre minimum de lignes insérées avant un ANALYZE, ou -1 pour désactiver ce comportement" + +#: utils/misc/guc.c:3299 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Nombre minimum de lignes insérées, mises à jour ou supprimées avant un ANALYZE." -#: utils/misc/guc.c:2968 +#: utils/misc/guc.c:3309 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Âge à partir duquel l'autovacuum se déclenche sur une table pour empêcher un rebouclage des identifiants de transaction." -#: utils/misc/guc.c:2979 +#: utils/misc/guc.c:3323 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Âge multixact à partir duquel l'autovacuum se déclenche sur une table pour empêcher la réinitialisation du multixact" -#: utils/misc/guc.c:2989 +#: utils/misc/guc.c:3333 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Initialise le nombre maximum de processus autovacuum exécutés simultanément." -#: utils/misc/guc.c:2999 +#: utils/misc/guc.c:3343 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "Initialise le nombre maximum de processus parallèles par opération de maintenance." -#: utils/misc/guc.c:3009 +#: utils/misc/guc.c:3353 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Initialise le nombre maximum de processus parallèles par nœud d'exécution." -#: utils/misc/guc.c:3020 +#: utils/misc/guc.c:3364 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "Configure le nombre maximum de processus parallélisés pouvant être actifs en même temps." -#: utils/misc/guc.c:3031 +#: utils/misc/guc.c:3375 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Initialise la mémoire maximum utilisée par chaque processus autovacuum worker." -#: utils/misc/guc.c:3042 +#: utils/misc/guc.c:3386 msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." msgstr "Temps à partir duquel un snapshot est trop ancien pour lire des pages ayant changées après que le snapshot ait été effectué." -#: utils/misc/guc.c:3043 +#: utils/misc/guc.c:3387 msgid "A value of -1 disables this feature." msgstr "Une valeur de -1 désactive cette fonctionnalité." -#: utils/misc/guc.c:3053 +#: utils/misc/guc.c:3397 msgid "Time between issuing TCP keepalives." msgstr "Secondes entre l'exécution de « TCP keepalives »." -#: utils/misc/guc.c:3054 utils/misc/guc.c:3065 utils/misc/guc.c:3189 +#: utils/misc/guc.c:3398 utils/misc/guc.c:3409 utils/misc/guc.c:3533 msgid "A value of 0 uses the system default." msgstr "Une valeur de 0 utilise la valeur par défaut du système." -#: utils/misc/guc.c:3064 +#: utils/misc/guc.c:3408 msgid "Time between TCP keepalive retransmits." msgstr "Secondes entre les retransmissions de « TCP keepalive »." -#: utils/misc/guc.c:3075 +#: utils/misc/guc.c:3419 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "La renégociation SSL n'est plus supportée; ce paramètre ne peut être positionné qu'à 0." -#: utils/misc/guc.c:3086 +#: utils/misc/guc.c:3430 msgid "Maximum number of TCP keepalive retransmits." msgstr "Nombre maximum de retransmissions de « TCP keepalive »." -#: utils/misc/guc.c:3087 +#: utils/misc/guc.c:3431 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "" "Ceci contrôle le nombre de retransmissions keepalive consécutives qui\n" "peuvent être perdues avant qu'une connexion ne soit considérée morte. Une\n" "valeur de 0 utilise la valeur par défaut du système." -#: utils/misc/guc.c:3098 +#: utils/misc/guc.c:3442 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Configure le nombre maximum de résultats lors d'une recherche par GIN." -#: utils/misc/guc.c:3109 +#: utils/misc/guc.c:3453 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Initialise le sentiment du planificateur sur la taille des caches disques." -#: utils/misc/guc.c:3110 +#: utils/misc/guc.c:3454 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "" "C'est-à-dire, la portion des caches disques (noyau et PostgreSQL) qui sera utilisé pour les\n" "fichiers de données de PostgreSQL. C'est mesuré en pages disque, qui font\n" "normalement 8 Ko chaque." -#: utils/misc/guc.c:3121 +#: utils/misc/guc.c:3465 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Configure la quantité minimale de données de table pour un parcours parallèle." -#: utils/misc/guc.c:3122 +#: utils/misc/guc.c:3466 msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." msgstr "Si le planificateur estime qu'il lira un nombre de blocs de table trop petit pour atteindre cette limite, un parcours parallèle ne sera pas considéré." -#: utils/misc/guc.c:3132 +#: utils/misc/guc.c:3476 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Configure la quantité minimale de données d'index pour un parcours parallèle." -#: utils/misc/guc.c:3133 +#: utils/misc/guc.c:3477 msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." msgstr "Si le planificateur estime qu'il lira un nombre de blocs d'index trop petit pour atteindre cette limite, un parcours parallèle ne sera pas considéré." -#: utils/misc/guc.c:3144 +#: utils/misc/guc.c:3488 msgid "Shows the server version as an integer." msgstr "Affiche la version du serveur sous la forme d'un entier." -#: utils/misc/guc.c:3155 +#: utils/misc/guc.c:3499 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "" "Trace l'utilisation de fichiers temporaires plus gros que ce nombre de\n" "kilooctets." -#: utils/misc/guc.c:3156 +#: utils/misc/guc.c:3500 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "" "Zéro trace toutes les requêtes. La valeur par défaut est -1 (désactivant\n" "cette fonctionnalité)." -#: utils/misc/guc.c:3166 +#: utils/misc/guc.c:3510 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Configure la taille réservée pour pg_stat_activity.query, en octets." -#: utils/misc/guc.c:3177 +#: utils/misc/guc.c:3521 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Configure la taille maximale de la pending list d'un index GIN." -#: utils/misc/guc.c:3188 +#: utils/misc/guc.c:3532 msgid "TCP user timeout." msgstr "Délai d'attente maximal TCP utilisateur." -#: utils/misc/guc.c:3208 +#: utils/misc/guc.c:3543 +msgid "The size of huge page that should be requested." +msgstr "" + +#: utils/misc/guc.c:3554 +msgid "Aggressively invalidate system caches for debugging purposes." +msgstr "" + +#: utils/misc/guc.c:3577 +#, fuzzy +#| msgid "Sets the maximum interval between WAL receiver status reports to the sending server." +msgid "Sets the time interval between checks for disconnection while running queries." +msgstr "Définit l'intervalle maximum entre les rapports du statut du walreceiver au serveur émetteur." + +#: utils/misc/guc.c:3597 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "" "Initialise l'estimation du planificateur pour le coût d'une page disque\n" "récupérée séquentiellement." -#: utils/misc/guc.c:3219 +#: utils/misc/guc.c:3608 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "" "Initialise l'estimation du plnnificateur pour le coût d'une page disque\n" "récupérée non séquentiellement." -#: utils/misc/guc.c:3230 +#: utils/misc/guc.c:3619 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "" "Initialise l'estimation du planificateur pour le coût d'exécution sur chaque\n" "ligne." -#: utils/misc/guc.c:3241 +#: utils/misc/guc.c:3630 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "" "Initialise l'estimation du planificateur pour le coût de traitement de\n" "chaque ligne indexée lors d'un parcours d'index." -#: utils/misc/guc.c:3252 +#: utils/misc/guc.c:3641 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "" "Initialise l'estimation du planificateur pour le coût de traitement de\n" "chaque opérateur ou appel de fonction." -#: utils/misc/guc.c:3263 -msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." +#: utils/misc/guc.c:3652 +#, fuzzy +#| msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." +msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to leader backend." msgstr "Initialise l'estimation du planificateur pour le coût de passage de chaque ligne d'un processus fils vers le processus maître." -#: utils/misc/guc.c:3274 +#: utils/misc/guc.c:3663 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "Initialise l'estimation du planificateur pour le coût de démarrage des processus d'exécution de requêtes parallèles." -#: utils/misc/guc.c:3286 +#: utils/misc/guc.c:3675 msgid "Perform JIT compilation if query is more expensive." msgstr "Effectuer une compilation JIT si la requête est plus coûteuse." -#: utils/misc/guc.c:3287 +#: utils/misc/guc.c:3676 msgid "-1 disables JIT compilation." msgstr "-1 désactive la compilation JIT." -#: utils/misc/guc.c:3297 -msgid "Optimize JITed functions if query is more expensive." -msgstr "Optimise les fonctions JITées si la requête est plus coûteuse." +#: utils/misc/guc.c:3686 +msgid "Optimize JIT-compiled functions if query is more expensive." +msgstr "Optimise les fonctions compilées avec JIT si la requête est plus coûteuse." -#: utils/misc/guc.c:3298 +#: utils/misc/guc.c:3687 msgid "-1 disables optimization." msgstr "-1 désactive l'optimisation." -#: utils/misc/guc.c:3308 +#: utils/misc/guc.c:3697 msgid "Perform JIT inlining if query is more expensive." msgstr "Effectuer un inlining JIT si la requête est plus coûteuse." -#: utils/misc/guc.c:3309 +#: utils/misc/guc.c:3698 msgid "-1 disables inlining." msgstr "-1 désactive l'inlining." -#: utils/misc/guc.c:3319 +#: utils/misc/guc.c:3708 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Initialise l'estimation du planificateur de la fraction des lignes d'un curseur à récupérer." -#: utils/misc/guc.c:3331 +#: utils/misc/guc.c:3720 msgid "GEQO: selective pressure within the population." msgstr "GEQO : pression sélective dans la population." -#: utils/misc/guc.c:3342 +#: utils/misc/guc.c:3731 msgid "GEQO: seed for random path selection." msgstr "GEQO : graine pour la sélection du chemin aléatoire." -#: utils/misc/guc.c:3353 +#: utils/misc/guc.c:3742 +msgid "Multiple of work_mem to use for hash tables." +msgstr "Multiple de work_mem à utiliser pour les tables de hachage." + +#: utils/misc/guc.c:3753 msgid "Multiple of the average buffer usage to free per round." msgstr "Multiplede l'utilisation moyenne des tampons à libérer à chaque tour." -#: utils/misc/guc.c:3363 +#: utils/misc/guc.c:3763 msgid "Sets the seed for random-number generation." msgstr "Initialise la clé pour la génération de nombres aléatoires." -#: utils/misc/guc.c:3374 +#: utils/misc/guc.c:3774 msgid "Vacuum cost delay in milliseconds." msgstr "Délai d'un coût de VACUUM en millisecondes." -#: utils/misc/guc.c:3385 +#: utils/misc/guc.c:3785 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Délai d'un coût de VACUUM en millisecondes, pour autovacuum." -#: utils/misc/guc.c:3396 +#: utils/misc/guc.c:3796 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "" "Nombre de lignes modifiées ou supprimées avant d'exécuter un VACUUM\n" "(fraction de reltuples)." -#: utils/misc/guc.c:3405 +#: utils/misc/guc.c:3806 +msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." +msgstr "Nombre de lignes insérées avant d'effectuer un VACUUM (fraction de reltuples)." + +#: utils/misc/guc.c:3816 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "" "Nombre de lignes insérées, mises à jour ou supprimées avant d'analyser\n" "une fraction de reltuples." -#: utils/misc/guc.c:3415 +#: utils/misc/guc.c:3826 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "" "Temps passé à vider les tampons lors du point de vérification, en tant que\n" "fraction de l'intervalle du point de vérification." -#: utils/misc/guc.c:3425 -msgid "Number of tuple inserts prior to index cleanup as a fraction of reltuples." -msgstr "" -"Nombre de lignes insérées avant d'effectuer un nettoyage des index\n" -"(fraction de reltuples)." +#: utils/misc/guc.c:3836 +msgid "Fraction of statements exceeding log_min_duration_sample to be logged." +msgstr "Fraction de requêtes dépassant log_min_duration_sample à tracer" + +#: utils/misc/guc.c:3837 +msgid "Use a value between 0.0 (never log) and 1.0 (always log)." +msgstr "Utilisez une valeur entre 0,0 (pas de trace) et 1.0 (tracer tout)." -#: utils/misc/guc.c:3435 -msgid "Set the fraction of transactions to log for new transactions." +#: utils/misc/guc.c:3846 +msgid "Sets the fraction of transactions to log for new transactions." msgstr "Définit la fraction des transactions à tracer pour les nouvelles transactions." -#: utils/misc/guc.c:3436 +#: utils/misc/guc.c:3847 msgid "Logs all statements from a fraction of transactions. Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgstr "Trace tous les ordres d'une fraction des transactions. Utiliser une valeur entre 0.0 (aucune trace) et 1.0 (trace tous les ordres de toutes les transactions)." -#: utils/misc/guc.c:3456 +#: utils/misc/guc.c:3867 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "La commande shell qui sera appelée pour archiver un journal de transaction." -#: utils/misc/guc.c:3466 -msgid "Sets the shell command that will retrieve an archived WAL file." +#: utils/misc/guc.c:3877 +msgid "Sets the shell command that will be called to retrieve an archived WAL file." msgstr "Définit la commande shell qui sera appelée pour récupérer un fichier WAL archivé." -#: utils/misc/guc.c:3476 +#: utils/misc/guc.c:3887 msgid "Sets the shell command that will be executed at every restart point." msgstr "Définit la commande shell qui sera appelée à chaque point de reprise (restart point)." -#: utils/misc/guc.c:3486 +#: utils/misc/guc.c:3897 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "Définit la commande shell qui sera appelée une fois à la fin de la restauration." -#: utils/misc/guc.c:3496 +#: utils/misc/guc.c:3907 msgid "Specifies the timeline to recover into." msgstr "Définit la timeline cible de la restauration." -#: utils/misc/guc.c:3506 +#: utils/misc/guc.c:3917 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "Positionner à « immediate » pour arrêter la restauration dès qu'un état consistent est atteint." -#: utils/misc/guc.c:3515 +#: utils/misc/guc.c:3926 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "Définit l'identifiant de transaction jusqu'où la restauration s'effectuera." -#: utils/misc/guc.c:3524 +#: utils/misc/guc.c:3935 msgid "Sets the time stamp up to which recovery will proceed." msgstr "Définit le point dans le temps jusqu'où la restauration s'effectuera." -#: utils/misc/guc.c:3533 +#: utils/misc/guc.c:3944 msgid "Sets the named restore point up to which recovery will proceed." msgstr "Définit le point de restauration nommé jusqu'où la restauration va procéder." -#: utils/misc/guc.c:3542 +#: utils/misc/guc.c:3953 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "Définit le LSN des journaux de transactions jusqu'où la restauration s'effectuera." # trigger_file -#: utils/misc/guc.c:3552 +#: utils/misc/guc.c:3963 msgid "Specifies a file name whose presence ends recovery in the standby." msgstr "Définit un nom de fichier dont la présence termine la restauration du serveur secondaire." -#: utils/misc/guc.c:3562 +#: utils/misc/guc.c:3973 msgid "Sets the connection string to be used to connect to the sending server." msgstr "Définit la chaîne de connexion à utiliser pour se connecter au serveur émetteur." -#: utils/misc/guc.c:3573 +#: utils/misc/guc.c:3984 msgid "Sets the name of the replication slot to use on the sending server." msgstr "Définit le nom du slot de réplication à utiliser sur le serveur émetteur." -#: utils/misc/guc.c:3583 +#: utils/misc/guc.c:3994 msgid "Sets the client's character set encoding." msgstr "Initialise l'encodage du client." -#: utils/misc/guc.c:3594 +#: utils/misc/guc.c:4005 msgid "Controls information prefixed to each log line." msgstr "Contrôle l'information préfixée sur chaque ligne de trace." -#: utils/misc/guc.c:3595 +#: utils/misc/guc.c:4006 msgid "If blank, no prefix is used." msgstr "Si vide, aucun préfixe n'est utilisé." -#: utils/misc/guc.c:3604 +#: utils/misc/guc.c:4015 msgid "Sets the time zone to use in log messages." msgstr "Initialise le fuseau horaire à utiliser pour les journaux applicatifs." -#: utils/misc/guc.c:3614 +#: utils/misc/guc.c:4025 msgid "Sets the display format for date and time values." msgstr "Initialise le format d'affichage des valeurs date et time." -#: utils/misc/guc.c:3615 +#: utils/misc/guc.c:4026 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Contrôle aussi l'interprétation des dates ambiguës en entrée." -#: utils/misc/guc.c:3626 +#: utils/misc/guc.c:4037 msgid "Sets the default table access method for new tables." msgstr "Définit la méthode d'accès par défaut pour les nouvelles tables." -#: utils/misc/guc.c:3637 +#: utils/misc/guc.c:4048 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Initialise le tablespace par défaut pour créer les tables et index." -#: utils/misc/guc.c:3638 +#: utils/misc/guc.c:4049 msgid "An empty string selects the database's default tablespace." msgstr "Une chaîne vide sélectionne le tablespace par défaut de la base de données." -#: utils/misc/guc.c:3648 +#: utils/misc/guc.c:4059 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "" "Initialise le(s) tablespace(s) à utiliser pour les tables temporaires et les\n" "fichiers de tri." -#: utils/misc/guc.c:3659 +#: utils/misc/guc.c:4070 msgid "Sets the path for dynamically loadable modules." msgstr "Initialise le chemin des modules chargeables dynamiquement." -#: utils/misc/guc.c:3660 +#: utils/misc/guc.c:4071 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "" "Si un module chargeable dynamiquement a besoin d'être ouvert et que le nom\n" "spécifié n'a pas une composante répertoire (c'est-à-dire que le nom ne\n" "contient pas un '/'), le système cherche le fichier spécifié sur ce chemin." -#: utils/misc/guc.c:3673 +#: utils/misc/guc.c:4084 msgid "Sets the location of the Kerberos server key file." msgstr "Initalise l'emplacement du fichier de la clé serveur pour Kerberos." -#: utils/misc/guc.c:3684 +#: utils/misc/guc.c:4095 msgid "Sets the Bonjour service name." msgstr "Initialise le nom du service Bonjour." -#: utils/misc/guc.c:3696 +#: utils/misc/guc.c:4107 msgid "Shows the collation order locale." msgstr "Affiche la locale de tri et de groupement." -#: utils/misc/guc.c:3707 +#: utils/misc/guc.c:4118 msgid "Shows the character classification and case conversion locale." msgstr "Affiche la classification des caractères et la locale de conversions." -#: utils/misc/guc.c:3718 +#: utils/misc/guc.c:4129 msgid "Sets the language in which messages are displayed." msgstr "Initialise le langage dans lequel les messages sont affichés." -#: utils/misc/guc.c:3728 +#: utils/misc/guc.c:4139 msgid "Sets the locale for formatting monetary amounts." msgstr "Initialise la locale pour le formattage des montants monétaires." -#: utils/misc/guc.c:3738 +#: utils/misc/guc.c:4149 msgid "Sets the locale for formatting numbers." msgstr "Initialise la locale pour formater les nombres." -#: utils/misc/guc.c:3748 +#: utils/misc/guc.c:4159 msgid "Sets the locale for formatting date and time values." msgstr "Initialise la locale pour formater les valeurs date et time." -#: utils/misc/guc.c:3758 +#: utils/misc/guc.c:4169 msgid "Lists shared libraries to preload into each backend." msgstr "Liste les bibliothèques partagées à précharger dans chaque processus serveur." -#: utils/misc/guc.c:3769 +#: utils/misc/guc.c:4180 msgid "Lists shared libraries to preload into server." msgstr "Liste les bibliothèques partagées à précharger dans le serveur." -#: utils/misc/guc.c:3780 +#: utils/misc/guc.c:4191 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Liste les bibliothèques partagées non privilégiées à précharger dans chaque processus serveur." -#: utils/misc/guc.c:3791 +#: utils/misc/guc.c:4202 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "" "Initialise l'ordre de recherche des schémas pour les noms qui ne précisent\n" "pas le schéma." -#: utils/misc/guc.c:3803 +#: utils/misc/guc.c:4214 msgid "Sets the server (database) character set encoding." msgstr "Initialise le codage des caractères pour le serveur (base de données)." -#: utils/misc/guc.c:3815 +#: utils/misc/guc.c:4226 msgid "Shows the server version." msgstr "Affiche la version du serveur." -#: utils/misc/guc.c:3827 +#: utils/misc/guc.c:4238 msgid "Sets the current role." msgstr "Initialise le rôle courant." -#: utils/misc/guc.c:3839 +#: utils/misc/guc.c:4250 msgid "Sets the session user name." msgstr "Initialise le nom de l'utilisateur de la session." -#: utils/misc/guc.c:3850 +#: utils/misc/guc.c:4261 msgid "Sets the destination for server log output." msgstr "Initialise la destination des journaux applicatifs du serveur." -#: utils/misc/guc.c:3851 +#: utils/misc/guc.c:4262 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "" "Les valeurs valides sont une combinaison de « stderr », « syslog »,\n" "« csvlog » et « eventlog », suivant la plateforme." -#: utils/misc/guc.c:3862 +#: utils/misc/guc.c:4273 msgid "Sets the destination directory for log files." msgstr "Initialise le répertoire de destination pour les journaux applicatifs." -#: utils/misc/guc.c:3863 +#: utils/misc/guc.c:4274 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Accepte un chemin relatif ou absolu pour le répertoire des données." -#: utils/misc/guc.c:3873 +#: utils/misc/guc.c:4284 msgid "Sets the file name pattern for log files." msgstr "Initialise le modèle de nom de fichiers pour les journaux applicatifs." -#: utils/misc/guc.c:3884 +#: utils/misc/guc.c:4295 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "" "Initialise le nom du programme utilisé pour identifier les messages de\n" "PostgreSQL dans syslog." -#: utils/misc/guc.c:3895 +#: utils/misc/guc.c:4306 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "" "Initialise le nom de l'application, utilisé pour identifier les messages de\n" "PostgreSQL dans eventlog." -#: utils/misc/guc.c:3906 +#: utils/misc/guc.c:4317 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Initialise la zone horaire pour afficher et interpréter les dates/heures." -#: utils/misc/guc.c:3916 +#: utils/misc/guc.c:4327 msgid "Selects a file of time zone abbreviations." msgstr "Sélectionne un fichier contenant les abréviations des fuseaux horaires." -#: utils/misc/guc.c:3926 +#: utils/misc/guc.c:4337 msgid "Sets the owning group of the Unix-domain socket." msgstr "Initialise le groupe d'appartenance du socket domaine Unix." -#: utils/misc/guc.c:3927 +#: utils/misc/guc.c:4338 msgid "The owning user of the socket is always the user that starts the server." msgstr "Le propriétaire du socket est toujours l'utilisateur qui a lancé le serveur." -#: utils/misc/guc.c:3937 +#: utils/misc/guc.c:4348 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Initialise les répertoires où les sockets de domaine Unix seront créés." -#: utils/misc/guc.c:3952 +#: utils/misc/guc.c:4363 msgid "Sets the host name or IP address(es) to listen to." msgstr "Initialise le nom de l'hôte ou l'adresse IP à écouter." -#: utils/misc/guc.c:3967 +#: utils/misc/guc.c:4378 msgid "Sets the server's data directory." msgstr "Initialise le répertoire des données du serveur." -#: utils/misc/guc.c:3978 +#: utils/misc/guc.c:4389 msgid "Sets the server's main configuration file." msgstr "Voir le fichier de configuration principal du serveur." -#: utils/misc/guc.c:3989 +#: utils/misc/guc.c:4400 msgid "Sets the server's \"hba\" configuration file." msgstr "Initialise le fichier de configuration « hba » du serveur." -#: utils/misc/guc.c:4000 +#: utils/misc/guc.c:4411 msgid "Sets the server's \"ident\" configuration file." msgstr "Initialise le fichier de configuration « ident » du serveur." -#: utils/misc/guc.c:4011 +#: utils/misc/guc.c:4422 msgid "Writes the postmaster PID to the specified file." msgstr "Écrit le PID du postmaster PID dans le fichier spécifié." -#: utils/misc/guc.c:4022 +#: utils/misc/guc.c:4433 msgid "Name of the SSL library." msgstr "Nom de la librairie SSL." -#: utils/misc/guc.c:4037 +#: utils/misc/guc.c:4448 msgid "Location of the SSL server certificate file." msgstr "Emplacement du fichier du certificat serveur SSL." -#: utils/misc/guc.c:4047 +#: utils/misc/guc.c:4458 msgid "Location of the SSL server private key file." msgstr "Emplacement du fichier de la clé privée SSL du serveur." -#: utils/misc/guc.c:4057 +#: utils/misc/guc.c:4468 msgid "Location of the SSL certificate authority file." msgstr "Emplacement du fichier du certificat autorité SSL." -#: utils/misc/guc.c:4067 +#: utils/misc/guc.c:4478 msgid "Location of the SSL certificate revocation list file." msgstr "Emplacement du fichier de liste de révocation des certificats SSL." -#: utils/misc/guc.c:4077 +#: utils/misc/guc.c:4488 +#, fuzzy +#| msgid "Location of the SSL certificate revocation list file." +msgid "Location of the SSL certificate revocation list directory." +msgstr "Emplacement du fichier de liste de révocation des certificats SSL." + +#: utils/misc/guc.c:4498 msgid "Writes temporary statistics files to the specified directory." msgstr "Écrit les fichiers statistiques temporaires dans le répertoire indiqué." -#: utils/misc/guc.c:4088 +#: utils/misc/guc.c:4509 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "Nombre de standbys synchrones et liste des noms des synchrones potentiels." -#: utils/misc/guc.c:4099 +#: utils/misc/guc.c:4520 msgid "Sets default text search configuration." msgstr "Initialise la configuration par défaut de la recherche plein texte." -#: utils/misc/guc.c:4109 +#: utils/misc/guc.c:4530 msgid "Sets the list of allowed SSL ciphers." msgstr "Initialise la liste des chiffrements SSL autorisés." -#: utils/misc/guc.c:4124 +#: utils/misc/guc.c:4545 msgid "Sets the curve to use for ECDH." msgstr "Initialise la courbe à utiliser pour ECDH." -#: utils/misc/guc.c:4139 +#: utils/misc/guc.c:4560 msgid "Location of the SSL DH parameters file." msgstr "Emplacement du fichier des paramètres DH SSL." -#: utils/misc/guc.c:4150 +#: utils/misc/guc.c:4571 msgid "Command to obtain passphrases for SSL." msgstr "Commande pour obtenir la phrase de passe pour SSL." -#: utils/misc/guc.c:4160 +#: utils/misc/guc.c:4582 msgid "Sets the application name to be reported in statistics and logs." msgstr "Configure le nom de l'application à indiquer dans les statistiques et les journaux." -#: utils/misc/guc.c:4171 +#: utils/misc/guc.c:4593 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Configure le nom du cluster, qui est inclus dans le titre du processus." -#: utils/misc/guc.c:4182 +#: utils/misc/guc.c:4604 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Configure les gestionnaires de ressource des WAL pour lesquels des vérifications de cohérence sont effectuées." -#: utils/misc/guc.c:4183 +#: utils/misc/guc.c:4605 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "Des images complètes de bloc seront tracées pour tous les blocs de données et vérifiées avec le résultat du rejeu des journaux de transactions." -#: utils/misc/guc.c:4193 +#: utils/misc/guc.c:4615 msgid "JIT provider to use." msgstr "Fournisseur JIT à utiliser." -#: utils/misc/guc.c:4213 +#: utils/misc/guc.c:4626 +msgid "Log backtrace for errors in these functions." +msgstr "Trace la pile pour les erreurs dans ces fonctions." + +#: utils/misc/guc.c:4646 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Indique si « \\' » est autorisé dans une constante de chaîne." -#: utils/misc/guc.c:4223 +#: utils/misc/guc.c:4656 msgid "Sets the output format for bytea." msgstr "Initialise le format de sortie pour bytea." -#: utils/misc/guc.c:4233 +#: utils/misc/guc.c:4666 msgid "Sets the message levels that are sent to the client." msgstr "Initialise les niveaux de message envoyés au client." -#: utils/misc/guc.c:4234 utils/misc/guc.c:4299 utils/misc/guc.c:4310 utils/misc/guc.c:4386 +#: utils/misc/guc.c:4667 utils/misc/guc.c:4743 utils/misc/guc.c:4754 utils/misc/guc.c:4830 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "" "Chaque niveau inclut les niveaux qui suivent. Plus loin sera le niveau,\n" "moindre sera le nombre de messages envoyés." -#: utils/misc/guc.c:4244 +#: utils/misc/guc.c:4677 msgid "Enables the planner to use constraints to optimize queries." msgstr "Active l'utilisation des contraintes par le planificateur pour optimiser les requêtes." -#: utils/misc/guc.c:4245 +#: utils/misc/guc.c:4678 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "" "Les parcours de tables seront ignorés si leur contraintes garantissent\n" "qu'aucune ligne ne correspond à la requête." -#: utils/misc/guc.c:4256 +#: utils/misc/guc.c:4689 +msgid "Sets the default compression for new columns." +msgstr "Définit la compression par défaut pour les nouvelles colonnes." + +#: utils/misc/guc.c:4700 msgid "Sets the transaction isolation level of each new transaction." msgstr "Initialise le niveau d'isolation des transactions pour chaque nouvelle transaction." -#: utils/misc/guc.c:4266 +#: utils/misc/guc.c:4710 msgid "Sets the current transaction's isolation level." msgstr "Initialise le niveau d'isolation de la transaction courante." -#: utils/misc/guc.c:4277 +#: utils/misc/guc.c:4721 msgid "Sets the display format for interval values." msgstr "Initialise le format d'affichage des valeurs interval." -#: utils/misc/guc.c:4288 +#: utils/misc/guc.c:4732 msgid "Sets the verbosity of logged messages." msgstr "Initialise la verbosité des messages tracés." -#: utils/misc/guc.c:4298 +#: utils/misc/guc.c:4742 msgid "Sets the message levels that are logged." msgstr "Initialise les niveaux de messages tracés." -#: utils/misc/guc.c:4309 +#: utils/misc/guc.c:4753 msgid "Causes all statements generating error at or above this level to be logged." msgstr "" "Génère une trace pour toutes les instructions qui produisent une erreur de\n" "ce niveau ou de niveaux plus importants." -#: utils/misc/guc.c:4320 +#: utils/misc/guc.c:4764 msgid "Sets the type of statements logged." msgstr "Initialise le type d'instructions tracées." -#: utils/misc/guc.c:4330 +#: utils/misc/guc.c:4774 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "" "Initialise le niveau (« facility ») de syslog à utilisé lors de l'activation\n" "de syslog." -#: utils/misc/guc.c:4345 +#: utils/misc/guc.c:4789 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "" "Configure le comportement des sessions pour les triggers et les règles de\n" "ré-écriture." -#: utils/misc/guc.c:4355 +#: utils/misc/guc.c:4799 msgid "Sets the current transaction's synchronization level." msgstr "Initialise le niveau d'isolation de la transaction courante." -#: utils/misc/guc.c:4365 +#: utils/misc/guc.c:4809 msgid "Allows archiving of WAL files using archive_command." msgstr "Autorise l'archivage des journaux de transactions en utilisant archive_command." -#: utils/misc/guc.c:4375 +#: utils/misc/guc.c:4819 msgid "Sets the action to perform upon reaching the recovery target." msgstr "Définit l'action à exécuter à l'arrivée à la cible de la restauration." -#: utils/misc/guc.c:4385 +#: utils/misc/guc.c:4829 msgid "Enables logging of recovery-related debugging information." msgstr "Active les traces sur les informations de débogage relatives à la restauration." -#: utils/misc/guc.c:4401 +#: utils/misc/guc.c:4845 msgid "Collects function-level statistics on database activity." msgstr "Récupère les statistiques niveau fonction sur l'activité de la base de données." -#: utils/misc/guc.c:4411 -msgid "Set the level of information written to the WAL." +#: utils/misc/guc.c:4855 +#, fuzzy +#| msgid "Set the level of information written to the WAL." +msgid "Sets the level of information written to the WAL." msgstr "Configure le niveau des informations écrites dans les journaux de transactions." -#: utils/misc/guc.c:4421 +#: utils/misc/guc.c:4865 msgid "Selects the dynamic shared memory implementation used." msgstr "Sélectionne l'implémentation de la mémoire partagée dynamique." -#: utils/misc/guc.c:4431 +#: utils/misc/guc.c:4875 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "Sélectionne l'implémentation de mémoire partagée utilisée pour la principale région de mémoire partagée." -#: utils/misc/guc.c:4441 +#: utils/misc/guc.c:4885 msgid "Selects the method used for forcing WAL updates to disk." msgstr "" "Sélectionne la méthode utilisée pour forcer la mise à jour des journaux de\n" "transactions sur le disque." -#: utils/misc/guc.c:4451 +#: utils/misc/guc.c:4895 msgid "Sets how binary values are to be encoded in XML." msgstr "Configure comment les valeurs binaires seront codées en XML." -#: utils/misc/guc.c:4461 +#: utils/misc/guc.c:4905 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "" "Configure si les données XML dans des opérations d'analyse et de\n" "sérialisation implicite doivent être considérées comme des documents\n" "ou des fragments de contenu." -#: utils/misc/guc.c:4472 +#: utils/misc/guc.c:4916 msgid "Use of huge pages on Linux or Windows." msgstr "Utilisation des HugePages sur Linux ou Windows." -#: utils/misc/guc.c:4482 +#: utils/misc/guc.c:4926 msgid "Forces use of parallel query facilities." msgstr "Force l'utilisation des fonctionnalités de requête parallèle." -#: utils/misc/guc.c:4483 +#: utils/misc/guc.c:4927 msgid "If possible, run query using a parallel worker and with parallel restrictions." msgstr "Si possible, exécute des requêtes utilisant des processus parallèles et avec les restrictions parallèles." -#: utils/misc/guc.c:4493 -msgid "Encrypt passwords." -msgstr "Chiffre les mots de passe." - -#: utils/misc/guc.c:4494 -msgid "When a password is specified in CREATE USER or ALTER USER without writing either ENCRYPTED or UNENCRYPTED, this parameter determines whether the password is to be encrypted." -msgstr "" -"Lorsqu'un mot de passe est spécifié dans CREATE USER ou ALTER USER sans\n" -"indiquer ENCRYPTED ou UNENCRYPTED, ce paramètre détermine si le mot de passe\n" -"doit être chiffré." +#: utils/misc/guc.c:4937 +msgid "Chooses the algorithm for encrypting passwords." +msgstr "Choisit l'algorithme pour le chiffrement des mots de passe." -#: utils/misc/guc.c:4505 +#: utils/misc/guc.c:4947 msgid "Controls the planner's selection of custom or generic plan." msgstr "Contrôle le choix par le planificateur du plan personnalisé ou du plan générique." -#: utils/misc/guc.c:4506 +#: utils/misc/guc.c:4948 msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." msgstr "Les requêtes préparées peuvent avoir des plans particulier et générique, et le planificateur tentera de choisir le meilleur. Ceci peut être utilisé pour remplacer le comportement par défaut." -#: utils/misc/guc.c:4518 +#: utils/misc/guc.c:4960 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "Définit la version minimale du protocole SSL/TLS à utiliser." -#: utils/misc/guc.c:4530 +#: utils/misc/guc.c:4972 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "Définit la version maximum du protocole SSL/TLS à utiliser." -#: utils/misc/guc.c:5353 +#: utils/misc/guc.c:4984 +msgid "Sets the method for synchronizing the data directory before crash recovery." +msgstr "" + +#: utils/misc/guc.c:5552 +#, c-format +msgid "invalid configuration parameter name \"%s\"" +msgstr "paramètre de configuration « %s » invalide" + +#: utils/misc/guc.c:5554 +#, c-format +msgid "Custom parameter names must be of the form \"identifier.identifier\"." +msgstr "" + +#: utils/misc/guc.c:5563 utils/misc/guc.c:9322 +#, c-format +msgid "unrecognized configuration parameter \"%s\"" +msgstr "paramètre de configuration « %s » non reconnu" + +#: utils/misc/guc.c:5856 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s : n'a pas pu accéder au répertoire « %s » : %s\n" -#: utils/misc/guc.c:5358 +#: utils/misc/guc.c:5861 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "Lancer initdb ou pg_basebackup pour initialiser un répertoire de données PostgreSQL.\n" -#: utils/misc/guc.c:5378 +#: utils/misc/guc.c:5881 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -26369,12 +28085,12 @@ msgstr "" "%s ne sait pas où trouver le fichier de configuration du serveur.\n" "Vous devez soit spécifier l'option --config-file, soit spécifier l'option -D, soit initialiser la variable d'environnement PGDATA.\n" -#: utils/misc/guc.c:5397 +#: utils/misc/guc.c:5900 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s : n'a pas pu accéder au fichier de configuration « %s » : %s\n" -#: utils/misc/guc.c:5423 +#: utils/misc/guc.c:5926 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -26383,7 +28099,7 @@ msgstr "" "%s ne sait pas où trouver les données du système de bases de données.\n" "Il est configurable avec « data_directory » dans « %s » ou avec l'option -D ou encore avec la variable d'environnement PGDATA.\n" -#: utils/misc/guc.c:5471 +#: utils/misc/guc.c:5974 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -26392,7 +28108,7 @@ msgstr "" "%s ne sait pas où trouver le fichier de configuration « hba ».\n" "Il est configurable avec « hba_file » dans « %s » ou avec l'option -D ou encore avec la variable d'environnement PGDATA.\n" -#: utils/misc/guc.c:5494 +#: utils/misc/guc.c:5997 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -26401,165 +28117,187 @@ msgstr "" "%s ne sait pas où trouver le fichier de configuration « hba ».\n" "Il est configurable avec « ident_file » dans « %s » ou avec l'option -D ou encore avec la variable d'environnement PGDATA.\n" -#: utils/misc/guc.c:6336 +#: utils/misc/guc.c:6922 msgid "Value exceeds integer range." msgstr "La valeur dépasse l'échelle des entiers." -#: utils/misc/guc.c:6572 +#: utils/misc/guc.c:7158 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s est en dehors des limites valides pour le paramètre « %s » (%d .. %d)" -#: utils/misc/guc.c:6608 +#: utils/misc/guc.c:7194 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s est en dehors des limites valides pour le paramètre « %s » (%g .. %g)" -#: utils/misc/guc.c:6764 utils/misc/guc.c:8131 +#: utils/misc/guc.c:7354 utils/misc/guc.c:8726 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "ne peut pas configurer les paramètres lors d'une opération parallèle" -#: utils/misc/guc.c:6771 utils/misc/guc.c:7523 utils/misc/guc.c:7576 utils/misc/guc.c:7627 utils/misc/guc.c:7960 utils/misc/guc.c:8727 utils/misc/guc.c:8993 utils/misc/guc.c:10631 -#, c-format -msgid "unrecognized configuration parameter \"%s\"" -msgstr "paramètre de configuration « %s » non reconnu" - -#: utils/misc/guc.c:6786 utils/misc/guc.c:7972 +#: utils/misc/guc.c:7371 utils/misc/guc.c:8567 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "le paramètre « %s » ne peut pas être changé" -#: utils/misc/guc.c:6819 +#: utils/misc/guc.c:7404 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "le paramètre « %s » ne peut pas être modifié maintenant" -#: utils/misc/guc.c:6837 utils/misc/guc.c:6884 utils/misc/guc.c:10647 +#: utils/misc/guc.c:7422 utils/misc/guc.c:7469 utils/misc/guc.c:11367 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "droit refusé pour initialiser le paramètre « %s »" -#: utils/misc/guc.c:6874 +#: utils/misc/guc.c:7459 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "le paramètre « %s » ne peut pas être initialisé après le lancement du serveur" -#: utils/misc/guc.c:6922 +#: utils/misc/guc.c:7507 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "" "ne peut pas configurer le paramètre « %s » à l'intérieur d'une fonction\n" "SECURITY DEFINER" -#: utils/misc/guc.c:7531 utils/misc/guc.c:7581 utils/misc/guc.c:9000 +#: utils/misc/guc.c:8140 utils/misc/guc.c:8187 utils/misc/guc.c:9584 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "doit être super-utilisateur ou membre de pg_read_all_settings pour examiner « %s »" -#: utils/misc/guc.c:7672 +#: utils/misc/guc.c:8271 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s prend un seul argument" -#: utils/misc/guc.c:7920 +#: utils/misc/guc.c:8519 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "doit être super-utilisateur pour exécuter la commande ALTER SYSTEM" -#: utils/misc/guc.c:8005 +#: utils/misc/guc.c:8600 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "la valeur du paramètre pour ALTER SYSTEM ne doit pas contenir de caractère de retour à la ligne" -#: utils/misc/guc.c:8050 +#: utils/misc/guc.c:8645 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "n'a pas pu analyser le contenu du fichier « %s »" -#: utils/misc/guc.c:8207 +#: utils/misc/guc.c:8802 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT n'est pas implémenté" -#: utils/misc/guc.c:8291 +#: utils/misc/guc.c:8886 #, c-format msgid "SET requires parameter name" msgstr "SET requiert le nom du paramètre" -#: utils/misc/guc.c:8424 +#: utils/misc/guc.c:9019 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "tentative de redéfinition du paramètre « %s »" -#: utils/misc/guc.c:10264 +#: utils/misc/guc.c:10814 +#, c-format +msgid "while setting parameter \"%s\" to \"%s\"" +msgstr "lors de la configuration du paramètre « %s » en « %s »" + +#: utils/misc/guc.c:10979 #, c-format msgid "parameter \"%s\" could not be set" msgstr "le paramètre « %s » n'a pas pu être configuré" -#: utils/misc/guc.c:10351 +#: utils/misc/guc.c:11071 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "n'a pas pu analyser la configuration du paramètre « %s »" -#: utils/misc/guc.c:10709 utils/misc/guc.c:10743 +#: utils/misc/guc.c:11429 utils/misc/guc.c:11463 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "valeur invalide pour le paramètre « %s » : %d" -#: utils/misc/guc.c:10777 +#: utils/misc/guc.c:11497 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "valeur invalide pour le paramètre « %s » : %g" -#: utils/misc/guc.c:11047 +#: utils/misc/guc.c:11784 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "« temp_buffers » ne peut pas être modifié après que des tables temporaires aient été utilisées dans la session." -#: utils/misc/guc.c:11059 +#: utils/misc/guc.c:11796 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour n'est pas supporté dans cette installation" -#: utils/misc/guc.c:11072 +#: utils/misc/guc.c:11809 #, c-format msgid "SSL is not supported by this build" msgstr "SSL n'est pas supporté dans cette installation" -#: utils/misc/guc.c:11084 +#: utils/misc/guc.c:11821 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Ne peut pas activer le paramètre avec « log_statement_stats » à true." -#: utils/misc/guc.c:11096 +#: utils/misc/guc.c:11833 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "" "Ne peut pas activer « log_statement_stats » lorsque « log_parser_stats »,\n" "« log_planner_stats » ou « log_executor_stats » est true." -#: utils/misc/guc.c:11340 +#: utils/misc/guc.c:12063 #, c-format msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "effective_io_concurrency doit être positionné à 0 sur les plateformes où manque posix_fadvise()" -#: utils/misc/guc.c:11454 +#: utils/misc/guc.c:12076 +#, c-format +msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." +msgstr "maintenance_io_concurrency doit être positionné à 0 sur les plateformes où manque posix_fadvise()" + +#: utils/misc/guc.c:12090 +#, fuzzy, c-format +#| msgid "huge pages not supported on this platform" +msgid "huge_page_size must be 0 on this platform." +msgstr "Huge Pages non supportées sur cette plateforme" + +#: utils/misc/guc.c:12104 +#, fuzzy, c-format +#| msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." +msgid "client_connection_check_interval must be set to 0 on platforms that lack POLLRDHUP." +msgstr "maintenance_io_concurrency doit être positionné à 0 sur les plateformes où manque posix_fadvise()" + +#: utils/misc/guc.c:12246 +#, c-format +msgid "invalid character" +msgstr "caractère invalide" + +#: utils/misc/guc.c:12306 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline n'est pas un nombre valide ." -#: utils/misc/guc.c:11494 +#: utils/misc/guc.c:12346 #, c-format msgid "multiple recovery targets specified" msgstr "multiples cibles de restauration spécifiées" -#: utils/misc/guc.c:11495 +#: utils/misc/guc.c:12347 #, c-format msgid "At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set." msgstr "Une seule valeur peut être spécifiée, parmi recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid." -#: utils/misc/guc.c:11503 +#: utils/misc/guc.c:12355 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "La seule valeur autorisée est « immediate »." @@ -26574,7 +28312,7 @@ msgstr "erreur interne : type de paramètre d'exécution non reconnu\n" msgid "query-specified return tuple and function return type are not compatible" msgstr "une ligne de sortie spécifiée à la requête et un type de sortie de fonction ne sont pas compatibles" -#: utils/misc/pg_controldata.c:60 utils/misc/pg_controldata.c:138 utils/misc/pg_controldata.c:242 utils/misc/pg_controldata.c:309 +#: utils/misc/pg_controldata.c:60 utils/misc/pg_controldata.c:138 utils/misc/pg_controldata.c:241 utils/misc/pg_controldata.c:306 #, c-format msgid "calculated CRC checksum does not match value stored in file" msgstr "la somme de contrôle CRC calculée ne correspond par à la valeur enregistrée dans le fichier" @@ -26594,103 +28332,108 @@ msgstr "la requête pourrait être affectée par une politique de sécurité au msgid "To disable the policy for the table's owner, use ALTER TABLE NO FORCE ROW LEVEL SECURITY." msgstr "Pour désactiver la politique pour le propriétaire de la table, utilisez ALTER TABLE NO FORCE ROW LEVEL SECURITY." -#: utils/misc/timeout.c:388 +#: utils/misc/timeout.c:484 #, c-format msgid "cannot add more timeout reasons" msgstr "ne peut pas ajouter plus de raisons de timeout" -#: utils/misc/tzparser.c:61 +#: utils/misc/tzparser.c:60 #, c-format msgid "time zone abbreviation \"%s\" is too long (maximum %d characters) in time zone file \"%s\", line %d" msgstr "" "l'abréviation « %s » du fuseau horaire est trop long (maximum %d caractères)\n" "dans le fichier de fuseaux horaires « %s », ligne %d" -#: utils/misc/tzparser.c:73 +#: utils/misc/tzparser.c:72 #, c-format msgid "time zone offset %d is out of range in time zone file \"%s\", line %d" msgstr "" "le décalage %d du fuseau horaire est en dehors des limites dans le fichier\n" "des fuseaux horaires « %s », ligne %d" -#: utils/misc/tzparser.c:112 +#: utils/misc/tzparser.c:111 #, c-format msgid "missing time zone abbreviation in time zone file \"%s\", line %d" msgstr "abréviation du fuseau horaire manquant dans le fichier « %s », ligne %d" -#: utils/misc/tzparser.c:121 +#: utils/misc/tzparser.c:120 #, c-format msgid "missing time zone offset in time zone file \"%s\", line %d" msgstr "décalage du fuseau horaire manquant dans le fichier « %s », ligne %d" -#: utils/misc/tzparser.c:133 +#: utils/misc/tzparser.c:132 #, c-format msgid "invalid number for time zone offset in time zone file \"%s\", line %d" msgstr "" "nombre invalide pour le décalage du fuseau horaire dans le fichier des\n" "fuseaux horaires « %s », ligne %d" -#: utils/misc/tzparser.c:169 +#: utils/misc/tzparser.c:168 #, c-format msgid "invalid syntax in time zone file \"%s\", line %d" msgstr "syntaxe invalide dans le fichier des fuseaux horaires « %s », ligne %d" -#: utils/misc/tzparser.c:237 +#: utils/misc/tzparser.c:236 #, c-format msgid "time zone abbreviation \"%s\" is multiply defined" msgstr "l'abréviation « %s » du fuseau horaire est définie plusieurs fois" -#: utils/misc/tzparser.c:239 +#: utils/misc/tzparser.c:238 #, c-format msgid "Entry in time zone file \"%s\", line %d, conflicts with entry in file \"%s\", line %d." msgstr "" "L'entrée dans le fichier des fuseaux horaires « %s », ligne %d, est en\n" "conflit avec l'entrée du fichier « %s », ligne %d." -#: utils/misc/tzparser.c:301 +#: utils/misc/tzparser.c:300 #, c-format msgid "invalid time zone file name \"%s\"" msgstr "nom du fichier de fuseaux horaires invalide : « %s »" -#: utils/misc/tzparser.c:314 +#: utils/misc/tzparser.c:313 #, c-format msgid "time zone file recursion limit exceeded in file \"%s\"" msgstr "" "limite de récursion dépassée dans le fichier « %s » (fichier des fuseaux\n" "horaires)" -#: utils/misc/tzparser.c:353 utils/misc/tzparser.c:366 +#: utils/misc/tzparser.c:352 utils/misc/tzparser.c:365 #, c-format msgid "could not read time zone file \"%s\": %m" msgstr "n'a pas pu lire le fichier des fuseaux horaires « %s » : %m" -#: utils/misc/tzparser.c:376 +#: utils/misc/tzparser.c:375 #, c-format msgid "line is too long in time zone file \"%s\", line %d" msgstr "" "une ligne est trop longue dans le fichier des fuseaux horaires « %s »,\n" "ligne %d" -#: utils/misc/tzparser.c:399 +#: utils/misc/tzparser.c:398 #, c-format msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "@INCLUDE sans nom de fichier dans le fichier des fuseaux horaires « %s », ligne %d" -#: utils/mmgr/aset.c:485 utils/mmgr/generation.c:250 utils/mmgr/slab.c:240 +#: utils/mmgr/aset.c:477 utils/mmgr/generation.c:235 utils/mmgr/slab.c:237 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "Échec lors de la création du contexte mémoire « %s »." -#: utils/mmgr/dsa.c:519 utils/mmgr/dsa.c:1332 +#: utils/mmgr/dsa.c:519 utils/mmgr/dsa.c:1329 #, c-format msgid "could not attach to dynamic shared area" msgstr "n'a pas pu attacher le segment de mémoire partagée dynamique" -#: utils/mmgr/mcxt.c:797 utils/mmgr/mcxt.c:833 utils/mmgr/mcxt.c:871 utils/mmgr/mcxt.c:909 utils/mmgr/mcxt.c:945 utils/mmgr/mcxt.c:976 utils/mmgr/mcxt.c:1012 utils/mmgr/mcxt.c:1064 utils/mmgr/mcxt.c:1099 utils/mmgr/mcxt.c:1134 +#: utils/mmgr/mcxt.c:889 utils/mmgr/mcxt.c:925 utils/mmgr/mcxt.c:963 utils/mmgr/mcxt.c:1001 utils/mmgr/mcxt.c:1083 utils/mmgr/mcxt.c:1114 utils/mmgr/mcxt.c:1150 utils/mmgr/mcxt.c:1202 utils/mmgr/mcxt.c:1237 utils/mmgr/mcxt.c:1272 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "Échec d'une requête de taille %zu dans le contexte mémoire « %s »." +#: utils/mmgr/mcxt.c:1046 +#, c-format +msgid "logging memory contexts of PID %d" +msgstr "" + #: utils/mmgr/portalmem.c:187 #, c-format msgid "cursor \"%s\" already exists" @@ -26701,131 +28444,381 @@ msgstr "le curseur « %s » existe déjà" msgid "closing existing cursor \"%s\"" msgstr "fermeture du curseur existant « %s »" -#: utils/mmgr/portalmem.c:398 +#: utils/mmgr/portalmem.c:400 #, c-format msgid "portal \"%s\" cannot be run" msgstr "le portail « %s » ne peut pas être exécuté de nouveau" -#: utils/mmgr/portalmem.c:476 +#: utils/mmgr/portalmem.c:478 #, c-format msgid "cannot drop pinned portal \"%s\"" msgstr "ne peut pas supprimer le portail épinglé « %s »" -#: utils/mmgr/portalmem.c:484 +#: utils/mmgr/portalmem.c:486 #, c-format msgid "cannot drop active portal \"%s\"" msgstr "ne peut pas supprimer le portail actif « %s »" -#: utils/mmgr/portalmem.c:729 +#: utils/mmgr/portalmem.c:731 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "ne peut pas préparer une transaction qui a créé un curseur WITH HOLD" -#: utils/mmgr/portalmem.c:1269 +#: utils/mmgr/portalmem.c:1270 #, c-format msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "ne peut pas effectuer de commandes de transaction dans une boucle de curseur qui n'est pas en lecture seule" -#: utils/sort/logtape.c:276 +#: utils/sort/logtape.c:268 utils/sort/logtape.c:291 #, c-format -msgid "could not read block %ld of temporary file: %m" -msgstr "n'a pas pu lire le bloc %ld du fichier temporaire : %m" +msgid "could not seek to block %ld of temporary file" +msgstr "n'a pas pu se positionner sur le bloc %ld du fichier temporaire" -#: utils/sort/sharedtuplestore.c:208 +#: utils/sort/logtape.c:297 #, c-format -msgid "could not write to temporary file: %m" -msgstr "n'a pas pu écrire dans le fichier temporaire : %m" +msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" +msgstr "n'a pas pu lire le bloc %ld du fichier temporaire : a lu seulement %zu octets sur %zu" -#: utils/sort/sharedtuplestore.c:437 utils/sort/sharedtuplestore.c:446 utils/sort/sharedtuplestore.c:469 utils/sort/sharedtuplestore.c:486 utils/sort/sharedtuplestore.c:503 utils/sort/sharedtuplestore.c:575 utils/sort/sharedtuplestore.c:581 +#: utils/sort/sharedtuplestore.c:430 utils/sort/sharedtuplestore.c:439 utils/sort/sharedtuplestore.c:462 utils/sort/sharedtuplestore.c:479 utils/sort/sharedtuplestore.c:496 #, c-format msgid "could not read from shared tuplestore temporary file" msgstr "n'a pas pu lire le fichier temporaire tuplestore partagé : %m" -#: utils/sort/sharedtuplestore.c:492 +#: utils/sort/sharedtuplestore.c:485 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "tronçon non attendu dans le fichier temporaire tuplestore partagé" -#: utils/sort/tuplesort.c:2967 +#: utils/sort/sharedtuplestore.c:569 +#, c-format +msgid "could not seek to block %u in shared tuplestore temporary file" +msgstr "n'a pas pu lire le bloc %u dans le fichier temporaire tuplestore partagé" + +#: utils/sort/sharedtuplestore.c:576 +#, c-format +msgid "could not read from shared tuplestore temporary file: read only %zu of %zu bytes" +msgstr "n'a pas pu lire le fichier temporaire tuplestore partagé : a lu seulement %zu octets sur %zu" + +#: utils/sort/tuplesort.c:3216 #, c-format msgid "cannot have more than %d runs for an external sort" msgstr "ne peut pas avoir plus de %d exécutions pour un tri externe" -#: utils/sort/tuplesort.c:4051 +#: utils/sort/tuplesort.c:4297 #, c-format msgid "could not create unique index \"%s\"" msgstr "n'a pas pu créer l'index unique « %s »" -#: utils/sort/tuplesort.c:4053 +#: utils/sort/tuplesort.c:4299 #, c-format msgid "Key %s is duplicated." msgstr "La clé %s est dupliquée." -#: utils/sort/tuplesort.c:4054 +#: utils/sort/tuplesort.c:4300 #, c-format msgid "Duplicate keys exist." msgstr "Des clés dupliquées existent." #: utils/sort/tuplestore.c:518 utils/sort/tuplestore.c:528 utils/sort/tuplestore.c:869 utils/sort/tuplestore.c:973 utils/sort/tuplestore.c:1037 utils/sort/tuplestore.c:1054 utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 utils/sort/tuplestore.c:1330 #, c-format -msgid "could not seek in tuplestore temporary file: %m" -msgstr "n'a pas pu se déplacer dans le fichier temporaire tuplestore : %m" - -#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1550 utils/sort/tuplestore.c:1556 -#, c-format -msgid "could not read from tuplestore temporary file: %m" -msgstr "n'a pas pu lire le fichier temporaire tuplestore : %m" +msgid "could not seek in tuplestore temporary file" +msgstr "n'a pas pu se déplacer dans le fichier temporaire tuplestore" -#: utils/sort/tuplestore.c:1518 utils/sort/tuplestore.c:1523 utils/sort/tuplestore.c:1529 +#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1540 utils/sort/tuplestore.c:1548 #, c-format -msgid "could not write to tuplestore temporary file: %m" -msgstr "n'a pas pu écrire le fichier temporaire tuplestore : %m" +msgid "could not read from tuplestore temporary file: read only %zu of %zu bytes" +msgstr "n'a pas pu lire le fichier temporaire tuplestore : a lu seulement %zu octets sur %zu" -#: utils/time/snapmgr.c:624 +#: utils/time/snapmgr.c:568 #, c-format msgid "The source transaction is not running anymore." msgstr "La transaction source n'est plus en cours d'exécution." -#: utils/time/snapmgr.c:1232 +#: utils/time/snapmgr.c:1147 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "ne peut pas exporter un snapshot dans un sous-transaction" -#: utils/time/snapmgr.c:1391 utils/time/snapmgr.c:1396 utils/time/snapmgr.c:1401 utils/time/snapmgr.c:1416 utils/time/snapmgr.c:1421 utils/time/snapmgr.c:1426 utils/time/snapmgr.c:1441 utils/time/snapmgr.c:1446 utils/time/snapmgr.c:1451 utils/time/snapmgr.c:1553 utils/time/snapmgr.c:1569 utils/time/snapmgr.c:1594 +#: utils/time/snapmgr.c:1306 utils/time/snapmgr.c:1311 utils/time/snapmgr.c:1316 utils/time/snapmgr.c:1331 utils/time/snapmgr.c:1336 utils/time/snapmgr.c:1341 utils/time/snapmgr.c:1356 utils/time/snapmgr.c:1361 utils/time/snapmgr.c:1366 utils/time/snapmgr.c:1468 utils/time/snapmgr.c:1484 utils/time/snapmgr.c:1509 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "données invalides du snapshot dans le fichier « %s »" -#: utils/time/snapmgr.c:1488 +#: utils/time/snapmgr.c:1403 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "SET TRANSACTION SNAPSHOT doit être appelé avant toute requête" -#: utils/time/snapmgr.c:1497 +#: utils/time/snapmgr.c:1412 #, c-format msgid "a snapshot-importing transaction must have isolation level SERIALIZABLE or REPEATABLE READ" msgstr "une transaction important un snapshot doit avoir le niveau d'isolation SERIALIZABLE ou REPEATABLE READ" -#: utils/time/snapmgr.c:1506 utils/time/snapmgr.c:1515 +#: utils/time/snapmgr.c:1421 utils/time/snapmgr.c:1430 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "identifiant invalide du snapshot : « %s »" -#: utils/time/snapmgr.c:1607 +#: utils/time/snapmgr.c:1522 #, c-format msgid "a serializable transaction cannot import a snapshot from a non-serializable transaction" msgstr "une transaction sérialisable ne peut pas importer un snapshot provenant d'une transaction non sérialisable" -#: utils/time/snapmgr.c:1611 +#: utils/time/snapmgr.c:1526 #, c-format msgid "a non-read-only serializable transaction cannot import a snapshot from a read-only transaction" msgstr "une transaction sérialisable en écriture ne peut pas importer un snapshot provenant d'une transaction en lecture seule" -#: utils/time/snapmgr.c:1626 +#: utils/time/snapmgr.c:1541 #, c-format msgid "cannot import a snapshot from a different database" msgstr "ne peut pas importer un snapshot à partir d'une base de données différente" +#~ msgid "For RAID arrays, this should be approximately the number of drive spindles in the array." +#~ msgstr "" +#~ "Pour les systèmes RAID, cela devrait être approximativement le nombre de\n" +#~ "têtes de lecture du système." + +#~ msgid "GSSAPI encryption can only be used with gss, trust, or reject authentication methods" +#~ msgstr "le chiffrement GSSAPI ne peut être utilisé qu'avec les méthodes d'authentification gss, trust ou reject" + +#~ msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\"" +#~ msgstr "" +#~ "pg_hba.conf rejette la connexion de la réplication pour l'hôte « %s »,\n" +#~ "utilisateur « %s »" + +#~ msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\"" +#~ msgstr "" +#~ "pg_hba.conf rejette la connexion pour l'hôte « %s », utilisateur « %s », base\n" +#~ "de données « %s »" + +#~ msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\"" +#~ msgstr "" +#~ "aucune entrée dans pg_hba.conf pour la connexion de la réplication à partir de\n" +#~ "l'hôte « %s », utilisateur « %s »" + +#~ msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"" +#~ msgstr "" +#~ "aucune entrée dans pg_hba.conf pour l'hôte « %s », utilisateur « %s »,\n" +#~ "base de données « %s »" + +#~ msgid "GSSAPI encryption only supports gss, trust, or reject authentication" +#~ msgstr "le chiffrement GSSAPI ne supporte que l'authentification gss, trust ou reject" + +#~ msgid "unexpected standby message type \"%c\", after receiving CopyDone" +#~ msgstr "type de message standby « %c » inattendu, après avoir reçu CopyDone" + +#~ msgid "invalid concatenation of jsonb objects" +#~ msgstr "concaténation invalide d'objets jsonb" + +#~ msgid "replication connection authorized: user=%s application_name=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +#~ msgstr "connexion de réplication autorisée : utilisateur=%s, nom d'application=%s, SSL activé (protocole=%s, chiffrement=%s, bits=%d, compression=%s)" + +#~ msgid "replication connection authorized: user=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +#~ msgstr "connexion autorisée : utilisateur=%s, SSL activé (protocole=%s, chiffrement=%s, bits=%d, compression=%s)" + +#~ msgid "replication connection authorized: user=%s application_name=%s" +#~ msgstr "connexion de réplication autorisée : utilisateur=%s nom d'application=%s" + +#~ msgid "connection authorized: user=%s database=%s application_name=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +#~ msgstr "connexion autorisée : utilisateur=%s base de données=%s nom d'application=%s SSL activé (protocole=%s, chiffrement=%s, bits=%d, compression=%s)" + +#~ msgid "connection authorized: user=%s database=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +#~ msgstr "connexion autorisée : utilisateur=%s, base de données=%s, SSL activé (protocole=%s, chiffrement=%s, bits=%d, compression=%s)" + +#~ msgid "connection authorized: user=%s database=%s application_name=%s" +#~ msgstr "connexion autorisée : utilisateur=%s base de données=%s nom d'application=%s" + +#~ msgid "connection authorized: user=%s database=%s" +#~ msgstr "connexion autorisée : utilisateur=%s, base de données=%s" + +#~ msgid "cannot create restricted tokens on this platform" +#~ msgstr "ne peut pas créer les jetons restreints sur cette plateforme" + +#~ msgid "leftover placeholder tuple detected in BRIN index \"%s\", deleting" +#~ msgstr "reste d'espace de ligne réservé dans l'index BRIN « %s », suppression" + +#~ msgid "invalid value for \"buffering\" option" +#~ msgstr "valeur invalide pour l'option « buffering »" + +#~ msgid "could not write block %ld of temporary file: %m" +#~ msgstr "n'a pas pu écrire le bloc %ld du fichier temporaire : %m" + +#~ msgid "skipping redundant vacuum to prevent wraparound of table \"%s.%s.%s\"" +#~ msgstr "ignore un VACUUM redondant pour éviter le rebouclage des identifiants dans la table \"%s.%s.%s\"" + +#~ msgid "The database cluster was initialized without USE_FLOAT4_BYVAL but the server was compiled with USE_FLOAT4_BYVAL." +#~ msgstr "" +#~ "Le cluster de base de données a été initialisé sans USE_FLOAT4_BYVAL\n" +#~ "alors que le serveur a été compilé avec USE_FLOAT4_BYVAL." + +#~ msgid "The database cluster was initialized with USE_FLOAT4_BYVAL but the server was compiled without USE_FLOAT4_BYVAL." +#~ msgstr "" +#~ "Le cluster de base de données a été initialisé avec USE_FLOAT4_BYVAL\n" +#~ "alors que le serveur a été compilé sans USE_FLOAT4_BYVAL." + +#~ msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" +#~ msgstr "le fichier WAL provient d'une instance différente : l'identifiant système de la base dans le fichier WAL est %s, alors que l'identifiant système de l'instance dans pg_control est %s" + +#~ msgid "could not seek in log segment %s to offset %u: %m" +#~ msgstr "n'a pas pu se déplacer dans le journal de transactions %s au décalage %u : %m" + +#~ msgid "could not read from log segment %s, offset %u, length %lu: %m" +#~ msgstr "n'a pas pu lire le journal de transactions %s, décalage %u, longueur %lu : %m" + +#~ msgid "An aggregate using a polymorphic transition type must have at least one polymorphic argument." +#~ msgstr "Un agrégat utilisant un type de transition polymorphique doit avoir au moins un argument polymorphique." + +#~ msgid "An aggregate returning a polymorphic type must have at least one polymorphic argument." +#~ msgstr "Un agrégat renvoyant un type polymorphique doit avoir au moins un argument de type polymorphique." + +#~ msgid "A function returning \"internal\" must have at least one \"internal\" argument." +#~ msgstr "Une fonction renvoyant « internal » doit avoir au moins un argument du type « internal »." + +#~ msgid "A function returning a polymorphic type must have at least one polymorphic argument." +#~ msgstr "Une fonction renvoyant un type polymorphique doit avoir au moins un argument de type polymorphique." + +#~ msgid "A function returning \"anyrange\" must have at least one \"anyrange\" argument." +#~ msgstr "Une fonction renvoyant « anyrange » doit avoir au moins un argument du type « anyrange »." + +#~ msgid "Adding partitioned tables to publications is not supported." +#~ msgstr "Ajouter des tables partitionnées à des publications n'est pas supporté." + +#~ msgid "You can add the table partitions individually." +#~ msgstr "Vous pouvez ajouter les partitions de table individuellement." + +#~ msgid "EXPLAIN option BUFFERS requires ANALYZE" +#~ msgstr "l'option BUFFERS d'EXPLAIN nécessite ANALYZE" + +#~ msgid "FROM version must be different from installation target version \"%s\"" +#~ msgstr "la version FROM doit être différente de la version cible d'installation « %s »" + +#~ msgid "using pg_pltemplate information instead of CREATE LANGUAGE parameters" +#~ msgstr "" +#~ "utilisation des informations de pg_pltemplate au lieu des paramètres de\n" +#~ "CREATE LANGUAGE" + +#~ msgid "must be superuser to create procedural language \"%s\"" +#~ msgstr "doit être super-utilisateur pour créer le langage de procédures « %s »" + +#~ msgid "unsupported language \"%s\"" +#~ msgstr "langage non supporté « %s »" + +#~ msgid "The supported languages are listed in the pg_pltemplate system catalog." +#~ msgstr "Les langages supportés sont listés dans le catalogue système pg_pltemplate." + +#~ msgid "changing return type of function %s from %s to %s" +#~ msgstr "changement du type de retour de la fonction %s de %s vers %s" + +#~ msgid "column \"%s\" contains null values" +#~ msgstr "la colonne « %s » contient des valeurs NULL" + +#~ msgid "updated partition constraint for default partition would be violated by some row" +#~ msgstr "la contrainte de partition mise à jour pour la partition par défaut serait transgressée par des lignes" + +#~ msgid "partition key expressions cannot contain whole-row references" +#~ msgstr "les expressions de clé de partitionnement ne peuvent pas contenir des références à des lignes complètes" + +#~ msgid "Partitioned tables cannot have BEFORE / FOR EACH ROW triggers." +#~ msgstr "Les tables partitionnées ne peuvent pas avoir de triggers BEFORE / FOR EACH ROW." + +#~ msgid "Found referenced table's UPDATE trigger." +#~ msgstr "Trigger UPDATE de la table référencée trouvé." + +#~ msgid "Found referenced table's DELETE trigger." +#~ msgstr "Trigger DELETE de la table référencée trouvé." + +#~ msgid "Found referencing table's trigger." +#~ msgstr "Trigger de la table référencée trouvé." + +#~ msgid "ignoring incomplete trigger group for constraint \"%s\" %s" +#~ msgstr "ignore le groupe de trigger incomplet pour la contrainte « %s » %s" + +#~ msgid "converting trigger group into constraint \"%s\" %s" +#~ msgstr "conversion du groupe de trigger en une contrainte « %s » %s" + +#~ msgid "changing argument type of function %s from \"opaque\" to \"cstring\"" +#~ msgstr "changement du type d'argument de la fonction %s d'« opaque » à « cstring »" + +#~ msgid "changing argument type of function %s from \"opaque\" to %s" +#~ msgstr "changement du type d'argument de la fonction %s d'« opaque » à %s" + +#~ msgid "invalid value for \"check_option\" option" +#~ msgstr "valeur invalide pour l'option « check_option »" + +#~ msgid "\"%s.%s\" is a partitioned table." +#~ msgstr "« %s.%s » est une table partitionnée." + +#~ msgid "could not determine actual result type for function declared to return type %s" +#~ msgstr "" +#~ "n'a pas pu déterminer le type du résultat actuel pour la fonction déclarant\n" +#~ "renvoyer le type %s" + +#~ msgid "could not write to hash-join temporary file: %m" +#~ msgstr "n'a pas pu écrire le fichier temporaire de la jointure hâchée : %m" + +#~ msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8." +#~ msgstr "" +#~ "Les valeurs d'échappement unicode ne peuvent pas être utilisées pour les valeurs de point de code\n" +#~ "au-dessus de 007F quand l'encodage serveur n'est pas UTF8." + +#~ msgid "could not load wldap32.dll" +#~ msgstr "n'a pas pu charger wldap32.dll" + +#~ msgid "SSL certificate revocation list file \"%s\" ignored" +#~ msgstr "liste de révocation des certificats SSL « %s » ignorée" + +#~ msgid "SSL library does not support certificate revocation lists." +#~ msgstr "La bibliothèque SSL ne supporte pas les listes de révocation des certificats." + +#~ msgid "could not create signal dispatch thread: error code %lu\n" +#~ msgstr "n'a pas pu créer le thread de répartition des signaux : code d'erreur %lu\n" + +#~ msgid "Please report this to ." +#~ msgstr "Veuillez rapporter ceci à ." + +#~ msgid "replication origin %d is already active for PID %d" +#~ msgstr "l'origine de réplication %d est déjà active pour le PID %d" + +#~ msgid "cannot advance replication slot that has not previously reserved WAL" +#~ msgstr "impossible d'avancer un slot de réplication qui n'a pas auparavant réservé de WAL" + +#~ msgid "could not read from log segment %s, offset %u, length %zu: %m" +#~ msgstr "n'a pas pu lire le segment %s du journal de transactions, décalage %u, longueur %zu : %m" + +#~ msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8" +#~ msgstr "" +#~ "Les valeurs d'échappement unicode ne peuvent pas être utilisées pour les\n" +#~ "valeurs de point de code au-dessus de 007F quand l'encodage serveur n'est\n" +#~ "pas UTF8" + +#~ msgid "cannot use advisory locks during a parallel operation" +#~ msgstr "ne peut pas utiliser les verrous informatifs lors d'une opération parallèle" + +#~ msgid "cannot output a value of type %s" +#~ msgstr "ne peut pas afficher une valeur de type %s" + +#~ msgid "Server has FLOAT4PASSBYVAL = %s, library has %s." +#~ msgstr "Le serveur a FLOAT4PASSBYVAL = %s, la bibliothèque a %s." + +#~ msgid "encoding name too long" +#~ msgstr "nom d'encodage trop long" + +#~ msgid "Encrypt passwords." +#~ msgstr "Chiffre les mots de passe." + +#~ msgid "When a password is specified in CREATE USER or ALTER USER without writing either ENCRYPTED or UNENCRYPTED, this parameter determines whether the password is to be encrypted." +#~ msgstr "" +#~ "Lorsqu'un mot de passe est spécifié dans CREATE USER ou ALTER USER sans\n" +#~ "indiquer ENCRYPTED ou UNENCRYPTED, ce paramètre détermine si le mot de passe\n" +#~ "doit être chiffré." + +#~ msgid "could not write to temporary file: %m" +#~ msgstr "n'a pas pu écrire dans le fichier temporaire : %m" + +#~ msgid "could not write to tuplestore temporary file: %m" +#~ msgstr "n'a pas pu écrire le fichier temporaire tuplestore : %m" + #~ msgid "cannot PREPARE a transaction that has operated on temporary namespace" #~ msgstr "" #~ "ne peut pas préparer (PREPARE) une transaction qui a travaillé sur un\n" @@ -26885,9 +28878,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "brin operator family \"%s\" contains operator %s with wrong signature" #~ msgstr "la famille d'opérateur brin « %s » contient l'opérateur %s avec une mauvaise signature" -#~ msgid "brin operator class \"%s\" is missing support function %d" -#~ msgstr "la classe d'opérateur brin « %s » nécessite la fonction de support %d" - #~ msgid "gist operator family \"%s\" contains support procedure %s with cross-type registration" #~ msgstr "" #~ "la famille d'opérateur gist « %s » contient la procédure de support\n" @@ -26911,9 +28901,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "gist operator family \"%s\" contains operator %s with wrong signature" #~ msgstr "la famille d'opérateur gist « %s » contient l'opérateur %s avec une mauvaise signature" -#~ msgid "gist operator class \"%s\" is missing support function %d" -#~ msgstr "la famille d'opérateur gist « %s » nécessite la fonction de support %d" - #~ msgid "hash operator family \"%s\" contains support procedure %s with cross-type registration" #~ msgstr "" #~ "la famille d'opérateur hash « %s » contient la procédure de support\n" @@ -27023,9 +29010,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "Expected a transaction log switchpoint location." #~ msgstr "Attendait un emplacement de bascule dans le journal de transactions." -#~ msgid "could not open transaction log file \"%s\": %m" -#~ msgstr "n'a pas pu ouvrir le journal des transactions « %s » : %m" - #~ msgid "could not remove old transaction log file \"%s\": %m" #~ msgstr "n'a pas pu supprimer l'ancien journal de transaction « %s » : %m" @@ -27113,9 +29097,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "could not create %s socket: %m" #~ msgstr "n'a pas pu créer le socket %s : %m" -#~ msgid "could not bind %s socket: %m" -#~ msgstr "n'a pas pu se lier à la socket %s : %m" - #~ msgid "WHERE CURRENT OF is not supported on a view with no underlying relation" #~ msgstr "WHERE CURRENT OF n'est pas supporté pour une vue sans table sous-jacente" @@ -27678,9 +29659,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ "doit être super-utilisateur pour ajouter un commentaire sur un modèle de\n" #~ "recherche plein texte" -#~ msgid "function \"%s\" is already in schema \"%s\"" -#~ msgstr "la fonction « %s » existe déjà dans le schéma « %s »" - #~ msgid "cannot reference temporary table from permanent table constraint" #~ msgstr "" #~ "ne peut pas référencer une table temporaire à partir d'une contrainte de\n" @@ -27896,18 +29874,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "\"%s\": moved %u row versions, truncated %u to %u pages" #~ msgstr "« %s » : %u versions de ligne déplacées, %u pages tronquées sur %u" -#~ msgid "" -#~ "%u index pages have been deleted, %u are currently reusable.\n" -#~ "%s." -#~ msgstr "" -#~ "%u pages d'index ont été supprimées, %u sont actuellement réutilisables.\n" -#~ "%s." - -#~ msgid "index \"%s\" contains %.0f row versions, but table contains %.0f row versions" -#~ msgstr "" -#~ "l'index « %s » contient %.0f versions de ligne, mais la table contient %.0f\n" -#~ "versions de ligne" - #~ msgid "Rebuild the index with REINDEX." #~ msgstr "Reconstruisez l'index avec REINDEX." @@ -27997,9 +29963,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "could not seek to end of segment %u of relation %s: %m" #~ msgstr "n'a pas pu se déplacer à la fin du segment %u de la relation %s : %m" -#~ msgid "unsupported PAM conversation %d/%s" -#~ msgstr "conversation PAM %d/%s non supportée" - #~ msgid "SELECT FOR UPDATE/SHARE is not allowed in subqueries" #~ msgstr "SELECT FOR UPDATE/SHARE n'est pas autorisé dans les sous-requêtes" @@ -28178,9 +30141,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ "Considérez l'augmentation du paramètre de configuration « max_fsm_pages »\n" #~ "à une valeur supérieure à %.0f." -#~ msgid "string is too long for tsvector" -#~ msgstr "la chaîne est trop longue pour un tsvector" - #~ msgid "Prints the parse tree to the server log." #~ msgstr "Affiche l'arbre d'analyse dans les journaux applicatifs du serveur." @@ -29009,9 +30969,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "invalid input syntax for %s: \"%s\"" #~ msgstr "syntaxe en entrée invalide pour le type %s : « %s »" -#~ msgid "not connected to database" -#~ msgstr "non connecté à une base de données" - #~ msgid "User \"%s\" has an empty password." #~ msgstr "L'utilisateur « %s » a un mot de passe vide." @@ -29132,9 +31089,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "transform function must not be an aggregate function" #~ msgstr "la fonction de transformation ne doit pas être une fonction d'agrégat" -#~ msgid "cast function must not be an aggregate function" -#~ msgstr "la fonction de conversion ne doit pas être une fonction d'agrégat" - #~ msgid "unrecognized function attribute \"%s\" ignored" #~ msgstr "l'attribut « %s » non reconnu de la fonction a été ignoré" @@ -29229,9 +31183,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "could not read relation mapping file \"%s\": %m" #~ msgstr "n'a pas pu lire le fichier de correspondance des relations « %s » : %m" -#~ msgid "could not open relation mapping file \"%s\": %m" -#~ msgstr "n'a pas pu ouvrir le fichier de correspondance des relations « %s » : %m" - #~ msgid "invalid input syntax for numeric time zone: \"%s\"" #~ msgstr "syntaxe en entrée invalide pour le fuseau horaire numérique : « %s »" @@ -29286,9 +31237,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "could not determine which collation to use for upper() function" #~ msgstr "n'a pas pu déterminer le collationnement à utiliser pour la fonction upper()" -#~ msgid "value out of range: underflow" -#~ msgstr "valeur en dehors des limites : trop petit" - #~ msgid "abstime out of range for date" #~ msgstr "abstime en dehors des limites pour une date" @@ -29316,9 +31264,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "Set dynamic_shared_memory_type to a value other than \"none\"." #~ msgstr "Configurez dynamic_shared_memory_type à une valeur autre que « none »." -#~ msgid "dynamic shared memory is disabled" -#~ msgstr "la mémoire partagée dynamique est désactivée" - #~ msgid "could not rmdir directory \"%s\": %m" #~ msgstr "n'a pas pu supprimer le répertoire « %s » : %m" @@ -29418,9 +31363,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "cannot drop column named in partition key" #~ msgstr "ne peut pas supprimer une colonne nommée dans une clé de partitionnement" -#~ msgid "cannot add constraint to only the partitioned table when partitions exist" -#~ msgstr "ne peut pas ajouter la contrainte à la seule table partitionnée quand plusieurs partitions existent" - #~ msgid "child table \"%s\" has a conflicting \"%s\" column" #~ msgstr "la table fille « %s » a une colonne conflictuelle, « %s »" @@ -29680,3 +31622,367 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "%s: could not open file \"%s\" for reading: %s\n" #~ msgstr "%s : n'a pas pu ouvrir le fichier « %s » en lecture : %s\n" + +#~ msgid "insufficient columns in %s constraint definition" +#~ msgstr "colonnes infuffisantes dans la définition de contrainte de %s" + +#~ msgid "cannot reindex invalid index on TOAST table concurrently" +#~ msgstr "ne peut pas réindexer un index invalide sur une table TOAST de manière concurrente" + +#~ msgid "index \"%s\" now contains %.0f row versions in %u pages as reported by parallel vacuum worker" +#~ msgstr "l'index « %s » contient maintenant %.0f versions de lignes dans %u pages, comme indiqué par le worker parallélisé du VACUUM" + +#~ msgid "scanned index \"%s\" to remove %d row versions by parallel vacuum worker" +#~ msgstr "a parcouru l'index « %s » pour supprimer %d versions de lignes par le worker parallélisé du VACUUM" + +#~ msgid "moving row to another partition during a BEFORE trigger is not supported" +#~ msgstr "déplacer une ligne vers une autre partition lors de l'exécution d'un trigger BEFORE n'est pas supporté" + +#~ msgid "Number of tuple inserts prior to index cleanup as a fraction of reltuples." +#~ msgstr "" +#~ "Nombre de lignes insérées avant d'effectuer un nettoyage des index\n" +#~ "(fraction de reltuples)." + +#~ msgid "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." +#~ msgstr "Émet un avertissement pour les constructions dont la signification a changé depuis PostgreSQL 9.4." + +#~ msgid "on" +#~ msgstr "activé" + +#~ msgid "off" +#~ msgstr "désactivé" + +#~ msgid "loaded library \"%s\"" +#~ msgstr "bibliothèque « %s » chargée" + +#~ msgid "wrong data type: %u, expected %u" +#~ msgstr "mauvais type de données : %u, alors que %u attendu" + +#~ msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." +#~ msgstr "Reconstruisez tous les objets affectés par ce collationnement, et lancez ALTER COLLATION %s REFRESH VERSION, ou construisez PostgreSQL avec la bonne version de bibliothèque." + +#~ msgid "The collation in the database was created using version %s, but the operating system provides version %s." +#~ msgstr "Le collationnement dans la base de données a été créé en utilisant la version %s mais le système d'exploitation fournit la version %s." + +#~ msgid "collation \"%s\" has version mismatch" +#~ msgstr "le collationnement « %s » a des versions différentes" + +#~ msgid "collation \"%s\" has no actual version, but a version was specified" +#~ msgstr "le collationnement « %s » n'a pas de version réelle mais une version était indiquée" + +#~ msgid "wrong element type" +#~ msgstr "mauvais type d'élément" + +#~ msgid "logical replication launcher shutting down" +#~ msgstr "arrêt du processus de lancement de la réplication logique" + +#~ msgid "bind %s to %s" +#~ msgstr "lie %s à %s" + +#~ msgid "parse %s: %s" +#~ msgstr "analyse %s : %s" + +#~ msgid "unexpected EOF on client connection" +#~ msgstr "fin de fichier (EOF) inattendue de la connexion du client" + +#~ msgid "could not fsync file \"%s\" but retrying: %m" +#~ msgstr "" +#~ "n'a pas pu synchroniser sur disque (fsync) le fichier « %s », nouvelle\n" +#~ "tentative : %m" + +#~ msgid "could not forward fsync request because request queue is full" +#~ msgstr "n'a pas pu envoyer la requête fsync car la queue des requêtes est pleine" + +#~ msgid "sending cancel to blocking autovacuum PID %d" +#~ msgstr "envoi de l'annulation pour bloquer le PID %d de l'autovacuum" + +#~ msgid "Process %d waits for %s on %s." +#~ msgstr "Le processus %d attend %s sur %s." + +#~ msgid "deferrable snapshot was unsafe; trying a new one" +#~ msgstr "l'image déferrable est non sûre ; tentative avec une nouvelle image" + +#~ msgid "%s failed: %m" +#~ msgstr "échec de %s : %m" + +#~ msgid "\"%s\" has now caught up with upstream server" +#~ msgstr "« %s » a maintenant rattrapé le serveur en amont" + +#~ msgid "standby \"%s\" now has synchronous standby priority %u" +#~ msgstr "" +#~ "le serveur « %s » en standby a maintenant une priorité %u en tant que standby\n" +#~ "synchrone" + +#~ msgid "logical replication apply worker for subscription \"%s\" will restart because subscription's publications were changed" +#~ msgstr "le processus apply de réplication logique pour la souscription « %s » redémarrera car les publications ont été modifiées" + +#~ msgid "logical replication apply worker for subscription \"%s\" will restart because the replication slot name was changed" +#~ msgstr "le processus apply de réplication logique pour la souscription « %s » redémarrera car le nom du slot de réplication a été modifiée" + +#~ msgid "logical replication apply worker for subscription \"%s\" will restart because the connection information was changed" +#~ msgstr "le processus apply de réplication logique pour la souscription « %s » redémarrera car la souscription a été modifiée" + +#~ msgid "could not fetch table info for table \"%s.%s\": %s" +#~ msgstr "n'a pas pu récupérer les informations sur la table « %s.%s » : %s" + +#~ msgid "only superusers can query or manipulate replication origins" +#~ msgstr "seuls les super-utilisateurs peuvent lire ou manipuler les origines de réplication" + +#~ msgid "logical replication launcher started" +#~ msgstr "lancement du processus de lancement de la réplication logique" + +#~ msgid "starting logical replication worker for subscription \"%s\"" +#~ msgstr "lancement du processus worker de réplication logique pour la souscription « %s »" + +#~ msgid "could not reread block %d of file \"%s\": %m" +#~ msgstr "n'a pas pu relire le bloc %d dans le fichier « %s » : %m" + +#~ msgid "could not fseek in file \"%s\": %m" +#~ msgstr "n'a pas pu effectuer de fseek dans le fichier « %s » : %m" + +#~ msgid "could not read from file \"%s\"" +#~ msgstr "n'a pas pu lire à partir du fichier « %s »" + +#~ msgid "logger shutting down" +#~ msgstr "arrêt en cours des journaux applicatifs" + +#~ msgid "starting background worker process \"%s\"" +#~ msgstr "démarrage du processus d'écriture en tâche de fond « %s »" + +#~ msgid "could not fork archiver: %m" +#~ msgstr "n'a pas pu lancer le processus fils correspondant au processus d'archivage : %m" + +#~ msgid "compacted fsync request queue from %d entries to %d entries" +#~ msgstr "a compacté la queue de requêtes fsync de %d entrées à %d" + +#~ msgid "unregistering background worker \"%s\"" +#~ msgstr "désenregistrement du processus en tâche de fond « %s »" + +#~ msgid "registering background worker \"%s\"" +#~ msgstr "enregistrement du processus en tâche de fond « %s »" + +#~ msgid "autovacuum: processing database \"%s\"" +#~ msgstr "autovacuum : traitement de la base de données « %s »" + +#~ msgid "autovacuum launcher shutting down" +#~ msgstr "arrêt du processus de lancement de l'autovacuum" + +#~ msgid "autovacuum launcher started" +#~ msgstr "démarrage du processus de lancement de l'autovacuum" + +#~ msgid "disabling huge pages" +#~ msgstr "désactivation des Huge Pages" + +#~ msgid "could not enable Lock Pages in Memory user right" +#~ msgstr "n'a pas pu activer le Lock Pages in Memory user right" + +#~ msgid "could not enable Lock Pages in Memory user right: error code %lu" +#~ msgstr "n'a pas pu activer le Lock Pages in Memory user right : code d'erreur %lu" + +#~ msgid "collation of partition bound value for column \"%s\" does not match partition key collation \"%s\"" +#~ msgstr "le collationnement de la valeur limite de partition de la colonne « %s » ne correspond pas à celui de la clé de partition « %s »" + +#~ msgid "could not determine which collation to use for partition bound expression" +#~ msgstr "n'a pas pu déterminer le collationnement à utiliser pour l'expression de limites de partitionnement" + +#~ msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" +#~ msgstr "%s créera des séquences implicites « %s » pour la colonne serial « %s.%s »" + +#~ msgid "array assignment requires type %s but expression is of type %s" +#~ msgstr "l'affectation de tableaux requiert le type %s mais l'expression est de type %s" + +#~ msgid "operator precedence change: %s is now lower precedence than %s" +#~ msgstr "la précédence d'opérateur change : %s a maintenant une précédence inférieure à %s" + +#~ msgid " -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n" +#~ msgstr " -o OPTIONS passe « OPTIONS » à chaque processus serveur (obsolète)\n" + +#~ msgid "Is another postmaster already running on port %d? If not, remove socket file \"%s\" and retry." +#~ msgstr "Un autre postmaster fonctionne-t'il déjà sur le port %d ?Sinon, supprimez le fichier socket « %s » et réessayez." + +#~ msgid "setsockopt(SO_REUSEADDR) failed for %s address \"%s\": %m" +#~ msgstr "setsockopt(SO_REUSEADDR) a échoué pour %s, adresse « %s » : %m" + +#~ msgid "authentication file line too long" +#~ msgstr "ligne du fichier d'authentification trop longue" + +#~ msgid "SSL connection from \"%s\"" +#~ msgstr "connexion SSL de « %s »" + +#~ msgid "SSPI is not supported in protocol version 2" +#~ msgstr "SSPI n'est pas supporté dans le protocole de version 2" + +#~ msgid "GSSAPI is not supported in protocol version 2" +#~ msgstr "GSSAPI n'est pas supporté dans le protocole de version 2" + +#~ msgid "SASL authentication is not supported in protocol version 2" +#~ msgstr "l'authentification SASL n'est pas supportée dans le protocole de version 2" + +#~ msgid "SSL off" +#~ msgstr "SSL inactif" + +#~ msgid "SSL on" +#~ msgstr "SSL actif" + +#~ msgid "time to inline: %.3fs, opt: %.3fs, emit: %.3fs" +#~ msgstr "temps pour inliner: %.3fs, opt: %.3fs, emit: %.3fs" + +#~ msgid "must be superuser to alter replication users" +#~ msgstr "doit être super-utilisateur pour modifier des utilisateurs ayant l'attribut réplication" + +#~ msgid "updated partition constraint for default partition \"%s\" is implied by existing constraints" +#~ msgstr "la contrainte de partitionnement pour la partition par défaut « %s » est implicite du fait de contraintes existantes" + +#~ msgid "partition constraint for table \"%s\" is implied by existing constraints" +#~ msgstr "la contrainte de partitionnement pour la table « %s » provient des contraintes existantes" + +#~ msgid "validating foreign key constraint \"%s\"" +#~ msgstr "validation de la contraintes de clé étrangère « %s »" + +#~ msgid "existing constraints on column \"%s.%s\" are sufficient to prove that it does not contain nulls" +#~ msgstr "les contraintes existantes sur la colonne « %s.%s » sont suffisantes pour prouver qu'elle ne contient aucun NULL" + +#~ msgid "verifying table \"%s\"" +#~ msgstr "vérification de la table « %s »" + +#~ msgid "rewriting table \"%s\"" +#~ msgstr "ré-écriture de la table « %s »" + +#~ msgid "The error was: %s" +#~ msgstr "L'erreur était : %s" + +#~ msgid "table \"%s.%s\" removed from subscription \"%s\"" +#~ msgstr "table « %s.%s » supprimée de la souscription « %s »" + +#~ msgid "table \"%s.%s\" added to subscription \"%s\"" +#~ msgstr "table « %s.%s » ajoutée à la souscription « %s »" + +#~ msgid "at least one of leftarg or rightarg must be specified" +#~ msgstr "au moins un des arguments (le gauche ou le droit) doit être spécifié" + +#~ msgid "REINDEX is not yet implemented for partitioned indexes" +#~ msgstr "REINDEX n'est pas implémenté pour des index partitionnés" + +#~ msgid "%s %s will create implicit index \"%s\" for table \"%s\"" +#~ msgstr "%s %s créera un index implicite « %s » pour la table « %s »" + +#~ msgid "INOUT arguments are permitted." +#~ msgstr "les arguments INOUT ne sont pas autorisés." + +#~ msgid "procedures cannot have OUT arguments" +#~ msgstr "les procédures ne peuvent pas avoir d'argument OUT" + +#~ msgid "connection lost during COPY to stdout" +#~ msgstr "connexion perdue lors de l'opération COPY vers stdout" + +#~ msgid "COPY BINARY is not supported to stdout or from stdin" +#~ msgstr "COPY BINARY n'est pas supporté vers stdout ou à partir de stdin" + +#~ msgid "version has not changed" +#~ msgstr "la version n'a pas changé" + +#~ msgid "changing version from %s to %s" +#~ msgstr "changement de version de %s à %s" + +#~ msgid "automatic analyze of table \"%s.%s.%s\" system usage: %s" +#~ msgstr "ANALYZE automatique de la table « %s.%s.%s » ; utilisation système : %s" + +#~ msgid "must be superuser to drop access methods" +#~ msgstr "doit être super-utilisateur pour supprimer des méthodes d'accès" + +#~ msgid "REINDEX of partitioned tables is not yet implemented, skipping \"%s\"" +#~ msgstr "REINDEX n'est pas encore implémenté pour les tables partitionnées, « %s » ignoré" + +#~ msgid "building index \"%s\" on table \"%s\" with request for %d parallel worker" +#~ msgid_plural "building index \"%s\" on table \"%s\" with request for %d parallel workers" +#~ msgstr[0] "construction de l'index « %s » sur la table « %s » avec une demande de %d processus parallèle" +#~ msgstr[1] "construction de l'index « %s » sur la table « %s » avec une demande de %d processus parallèles" + +#~ msgid "building index \"%s\" on table \"%s\" serially" +#~ msgstr "construction de l'index « %s » sur la table « %s » séquentiellement" + +#~ msgid "drop auto-cascades to %s" +#~ msgstr "DROP cascade automatiquement sur %s" + +#~ msgid "invalid contrecord length %u at %X/%X" +#~ msgstr "longueur %u invalide du contrecord à %X/%X" + +#~ msgid "there is no contrecord flag at %X/%X" +#~ msgstr "il n'existe pas de drapeau contrecord à %X/%X" + +#~ msgid "backup timeline %u in file \"%s\"" +#~ msgstr "timeline de sauvegarde %u dans le fichier « %s »" + +#~ msgid "backup label %s in file \"%s\"" +#~ msgstr "label de sauvegarde %s dans le fichier « %s »" + +#~ msgid "backup time %s in file \"%s\"" +#~ msgstr "heure de sauvegarde %s dans le fichier « %s »" + +#~ msgid "skipping restartpoint, already performed at %X/%X" +#~ msgstr "ignore le point de redémarrage, déjà réalisé à %X/%X" + +#~ msgid "skipping restartpoint, recovery has already ended" +#~ msgstr "restartpoint ignoré, la récupération est déjà terminée" + +#~ msgid "checkpoint skipped because system is idle" +#~ msgstr "checkpoint ignoré car le système est inactif" + +#~ msgid "initializing for hot standby" +#~ msgstr "initialisation pour « Hot Standby »" + +#~ msgid "checkpoint record is at %X/%X" +#~ msgstr "l'enregistrement du point de vérification est à %X/%X" + +#~ msgid "Either set wal_level to \"replica\" on the master, or turn off hot_standby here." +#~ msgstr "" +#~ "Vous devez soit positionner le paramètre wal_level à « replica » sur le maître,\n" +#~ "soit désactiver le hot_standby ici." + +#~ msgid "removing write-ahead log file \"%s\"" +#~ msgstr "suppression du journal de transactions « %s »" + +#~ msgid "recycled write-ahead log file \"%s\"" +#~ msgstr "recyclage du journal de transactions « %s »" + +#~ msgid "updated min recovery point to %X/%X on timeline %u" +#~ msgstr "mise à jour du point minimum de restauration sur %X/%X pour la timeline %u" + +#~ msgid "cannot PREPARE a transaction that has manipulated logical replication workers" +#~ msgstr "" +#~ "ne peut pas préparer (PREPARE) une transaction qui a travaillé sur des\n" +#~ "workers de réplication logique" + +#~ msgid "transaction ID wrap limit is %u, limited by database with OID %u" +#~ msgstr "" +#~ "la limite de réinitialisation de l'identifiant de transaction est %u,\n" +#~ "limité par la base de données d'OID %u" + +#~ msgid "removing file \"%s\"" +#~ msgstr "suppression du fichier « %s »" + +#~ msgid "MultiXact member stop limit is now %u based on MultiXact %u" +#~ msgstr "La limite d'arrêt d'un membre MultiXact est maintenant %u, basée sur le MultiXact %u" + +#~ msgid "oldest MultiXactId member is at offset %u" +#~ msgstr "le membre le plus ancien du MultiXactId est au décalage %u" + +#~ msgid "MultiXactId wrap limit is %u, limited by database with OID %u" +#~ msgstr "La limite de réinitialisation MultiXactId est %u, limité par la base de données d'OID %u" + +#~ msgid "%u page is entirely empty.\n" +#~ msgid_plural "%u pages are entirely empty.\n" +#~ msgstr[0] "%u page est entièrement vide.\n" +#~ msgstr[1] "%u pages sont entièrement vides.\n" + +#~ msgid "There were %.0f unused item identifiers.\n" +#~ msgstr "Il y avait %.0f identifiants d'éléments inutilisés.\n" + +#~ msgid "\"%s\": removed %.0f row versions in %u pages" +#~ msgstr "« %s » : %.0f versions de ligne supprimées dans %u pages" + +#~ msgid "password too long" +#~ msgstr "mot de passe trop long" + +#~ msgid "pclose failed: %m" +#~ msgstr "échec de pclose : %m" diff --git a/src/backend/po/ja.po b/src/backend/po/ja.po index 974380e3e57a0..6c025aa917f6e 100644 --- a/src/backend/po/ja.po +++ b/src/backend/po/ja.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: postgres (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: postgres (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-11-05 01:40+0000\n" -"PO-Revision-Date: 2019-06-11 20:33+0900\n" +"POT-Creation-Date: 2020-08-21 15:51+0900\n" +"PO-Revision-Date: 2021-02-05 07:57+0100\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: jpug-doc \n" "Language: ja\n" @@ -16,69 +16,35 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" +"X-Poedit-Basepath: ..\n" +"X-Poedit-SearchPath-0: .\n" -#: ../common/config_info.c:130 ../common/config_info.c:138 -#: ../common/config_info.c:146 ../common/config_info.c:154 -#: ../common/config_info.c:162 ../common/config_info.c:170 -#: ../common/config_info.c:178 ../common/config_info.c:186 -#: ../common/config_info.c:194 +#: ../common/config_info.c:134 ../common/config_info.c:142 ../common/config_info.c:150 ../common/config_info.c:158 ../common/config_info.c:166 ../common/config_info.c:174 ../common/config_info.c:182 ../common/config_info.c:190 msgid "not recorded" msgstr "記録されていません" -#: ../common/controldata_utils.c:68 ../common/controldata_utils.c:73 -#: commands/copy.c:3549 commands/extension.c:3341 utils/adt/genfile.c:153 +#: ../common/controldata_utils.c:68 ../common/controldata_utils.c:73 commands/copy.c:3551 commands/extension.c:3455 utils/adt/genfile.c:125 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "ファイル\"%s\"を読み取り用にオープンできませんでした: %m" -#: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 -#: access/transam/timeline.c:347 access/transam/twophase.c:1293 -#: access/transam/xlog.c:3455 access/transam/xlog.c:4602 -#: access/transam/xlog.c:10808 access/transam/xlog.c:10821 -#: access/transam/xlog.c:11246 access/transam/xlog.c:11326 -#: access/transam/xlog.c:11365 access/transam/xlog.c:11408 -#: access/transam/xlogfuncs.c:663 access/transam/xlogfuncs.c:682 -#: commands/extension.c:3351 libpq/hba.c:499 replication/logical/origin.c:718 -#: replication/logical/origin.c:754 replication/logical/reorderbuffer.c:3312 -#: replication/logical/snapbuild.c:1746 replication/logical/snapbuild.c:1788 -#: replication/logical/snapbuild.c:1816 replication/logical/snapbuild.c:1843 -#: replication/slot.c:1427 replication/slot.c:1468 replication/walsender.c:513 -#: storage/file/copydir.c:195 utils/adt/genfile.c:170 utils/adt/misc.c:753 -#: utils/cache/relmapper.c:741 +#: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1270 access/transam/xlog.c:3501 access/transam/xlog.c:4726 access/transam/xlog.c:11110 access/transam/xlog.c:11123 access/transam/xlog.c:11576 access/transam/xlog.c:11656 access/transam/xlog.c:11695 access/transam/xlog.c:11738 access/transam/xlogfuncs.c:662 access/transam/xlogfuncs.c:681 +#: commands/extension.c:3465 libpq/hba.c:499 replication/basebackup.c:2001 replication/logical/origin.c:712 replication/logical/origin.c:748 replication/logical/reorderbuffer.c:4427 replication/logical/snapbuild.c:1742 replication/logical/snapbuild.c:1784 replication/logical/snapbuild.c:1812 replication/logical/snapbuild.c:1839 replication/slot.c:1623 replication/slot.c:1664 replication/walsender.c:543 storage/file/buffile.c:441 storage/file/copydir.c:195 +#: utils/adt/genfile.c:200 utils/adt/misc.c:763 utils/cache/relmapper.c:741 #, c-format msgid "could not read file \"%s\": %m" msgstr "ファイル\"%s\"の読み取りに失敗しました: %m" -#: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 -#: access/transam/twophase.c:1296 access/transam/xlog.c:3460 -#: access/transam/xlog.c:4607 replication/logical/origin.c:723 -#: replication/logical/origin.c:762 replication/logical/snapbuild.c:1751 -#: replication/logical/snapbuild.c:1793 replication/logical/snapbuild.c:1821 -#: replication/logical/snapbuild.c:1848 replication/slot.c:1431 -#: replication/slot.c:1472 replication/walsender.c:518 -#: utils/cache/relmapper.c:745 +#: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 access/transam/twophase.c:1273 access/transam/xlog.c:3506 access/transam/xlog.c:4731 replication/basebackup.c:2005 replication/logical/origin.c:717 replication/logical/origin.c:756 replication/logical/snapbuild.c:1747 replication/logical/snapbuild.c:1789 replication/logical/snapbuild.c:1817 replication/logical/snapbuild.c:1844 replication/slot.c:1627 replication/slot.c:1668 +#: replication/walsender.c:548 utils/cache/relmapper.c:745 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込みました" -#: ../common/controldata_utils.c:112 ../common/controldata_utils.c:117 -#: ../common/controldata_utils.c:256 ../common/controldata_utils.c:259 -#: access/heap/rewriteheap.c:1208 access/heap/rewriteheap.c:1311 -#: access/transam/timeline.c:377 access/transam/timeline.c:421 -#: access/transam/timeline.c:499 access/transam/twophase.c:1305 -#: access/transam/twophase.c:1728 access/transam/xlog.c:3327 -#: access/transam/xlog.c:3495 access/transam/xlog.c:3500 -#: access/transam/xlog.c:3797 access/transam/xlog.c:4572 -#: access/transam/xlog.c:5532 access/transam/xlogfuncs.c:688 -#: commands/copy.c:1814 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:535 -#: replication/logical/origin.c:656 replication/logical/origin.c:795 -#: replication/logical/reorderbuffer.c:3370 -#: replication/logical/snapbuild.c:1658 replication/logical/snapbuild.c:1856 -#: replication/slot.c:1322 replication/slot.c:1479 replication/walsender.c:528 -#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:654 -#: storage/file/fd.c:3308 storage/file/fd.c:3411 utils/cache/relmapper.c:753 -#: utils/cache/relmapper.c:892 +#: ../common/controldata_utils.c:112 ../common/controldata_utils.c:117 ../common/controldata_utils.c:256 ../common/controldata_utils.c:259 access/heap/rewriteheap.c:1181 access/heap/rewriteheap.c:1284 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:516 access/transam/twophase.c:1282 access/transam/twophase.c:1668 access/transam/xlog.c:3373 access/transam/xlog.c:3541 access/transam/xlog.c:3546 access/transam/xlog.c:3874 +#: access/transam/xlog.c:4696 access/transam/xlog.c:5620 access/transam/xlogfuncs.c:687 commands/copy.c:1860 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 replication/logical/origin.c:650 replication/logical/origin.c:789 replication/logical/reorderbuffer.c:4485 replication/logical/snapbuild.c:1654 replication/logical/snapbuild.c:1852 replication/slot.c:1514 replication/slot.c:1675 replication/walsender.c:558 storage/file/copydir.c:218 storage/file/copydir.c:223 +#: storage/file/fd.c:704 storage/file/fd.c:3425 storage/file/fd.c:3528 utils/cache/relmapper.c:753 utils/cache/relmapper.c:892 #, c-format msgid "could not close file \"%s\": %m" msgstr "ファイル\"%s\"をクローズできませんでした: %m" @@ -100,188 +66,192 @@ msgstr "" "されるものと一致しないようです。この場合以下の結果は不正確になります。また、\n" "PostgreSQLインストレーションはこのデータディレクトリと互換性がなくなります。" -#: ../common/controldata_utils.c:197 ../common/controldata_utils.c:203 -#: ../common/file_utils.c:226 ../common/file_utils.c:285 -#: ../common/file_utils.c:359 access/heap/rewriteheap.c:1294 -#: access/transam/timeline.c:111 access/transam/timeline.c:236 -#: access/transam/timeline.c:333 access/transam/twophase.c:1249 -#: access/transam/xlog.c:3229 access/transam/xlog.c:3369 -#: access/transam/xlog.c:3410 access/transam/xlog.c:3608 -#: access/transam/xlog.c:3693 access/transam/xlog.c:3771 -#: access/transam/xlog.c:4592 access/transam/xlogutils.c:708 -#: postmaster/syslogger.c:1489 replication/basebackup.c:529 -#: replication/basebackup.c:1408 replication/logical/origin.c:708 -#: replication/logical/reorderbuffer.c:2308 -#: replication/logical/reorderbuffer.c:2575 -#: replication/logical/reorderbuffer.c:3292 -#: replication/logical/snapbuild.c:1613 replication/logical/snapbuild.c:1717 -#: replication/slot.c:1399 replication/walsender.c:486 -#: replication/walsender.c:2450 storage/file/copydir.c:161 -#: storage/file/fd.c:629 storage/file/fd.c:3295 storage/file/fd.c:3382 -#: storage/smgr/md.c:462 utils/cache/relmapper.c:724 -#: utils/cache/relmapper.c:836 utils/error/elog.c:1861 -#: utils/init/miscinit.c:1269 utils/init/miscinit.c:1404 -#: utils/init/miscinit.c:1481 utils/misc/guc.c:8043 utils/misc/guc.c:8075 +#: ../common/controldata_utils.c:197 ../common/controldata_utils.c:203 ../common/file_utils.c:229 ../common/file_utils.c:288 ../common/file_utils.c:362 access/heap/rewriteheap.c:1267 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1226 access/transam/xlog.c:3275 access/transam/xlog.c:3415 access/transam/xlog.c:3456 access/transam/xlog.c:3654 access/transam/xlog.c:3739 access/transam/xlog.c:3842 +#: access/transam/xlog.c:4716 access/transam/xlogutils.c:806 postmaster/syslogger.c:1488 replication/basebackup.c:616 replication/basebackup.c:1593 replication/logical/origin.c:702 replication/logical/reorderbuffer.c:3163 replication/logical/reorderbuffer.c:3653 replication/logical/reorderbuffer.c:4407 replication/logical/snapbuild.c:1609 replication/logical/snapbuild.c:1713 replication/slot.c:1595 replication/walsender.c:516 replication/walsender.c:2509 +#: storage/file/copydir.c:161 storage/file/fd.c:679 storage/file/fd.c:3412 storage/file/fd.c:3499 storage/smgr/md.c:475 utils/cache/relmapper.c:724 utils/cache/relmapper.c:836 utils/error/elog.c:1858 utils/init/miscinit.c:1318 utils/init/miscinit.c:1452 utils/init/miscinit.c:1529 utils/misc/guc.c:8270 utils/misc/guc.c:8302 #, c-format msgid "could not open file \"%s\": %m" msgstr "ファイル\"%s\"をオープンできませんでした: %m" -#: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 -#: access/transam/twophase.c:1701 access/transam/twophase.c:1710 -#: access/transam/xlog.c:10565 access/transam/xlog.c:10603 -#: access/transam/xlog.c:11016 access/transam/xlogfuncs.c:742 -#: postmaster/syslogger.c:1500 postmaster/syslogger.c:1513 -#: utils/cache/relmapper.c:870 +#: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 access/transam/twophase.c:1641 access/transam/twophase.c:1650 access/transam/xlog.c:10867 access/transam/xlog.c:10905 access/transam/xlog.c:11318 access/transam/xlogfuncs.c:741 postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 utils/cache/relmapper.c:870 #, c-format msgid "could not write file \"%s\": %m" msgstr "ファイル\"%s\"を書き出せませんでした: %m" -#: ../common/controldata_utils.c:239 ../common/controldata_utils.c:245 -#: ../common/file_utils.c:297 ../common/file_utils.c:367 -#: access/heap/rewriteheap.c:981 access/heap/rewriteheap.c:1202 -#: access/heap/rewriteheap.c:1305 access/transam/timeline.c:415 -#: access/transam/timeline.c:493 access/transam/twophase.c:1722 -#: access/transam/xlog.c:3320 access/transam/xlog.c:3489 -#: access/transam/xlog.c:4565 access/transam/xlog.c:10083 -#: access/transam/xlog.c:10109 replication/logical/snapbuild.c:1651 -#: replication/slot.c:1312 replication/slot.c:1409 storage/file/fd.c:646 -#: storage/file/fd.c:3403 storage/smgr/md.c:885 storage/smgr/md.c:918 -#: storage/sync/sync.c:395 utils/cache/relmapper.c:885 utils/misc/guc.c:7826 +#: ../common/controldata_utils.c:239 ../common/controldata_utils.c:245 ../common/file_utils.c:300 ../common/file_utils.c:370 access/heap/rewriteheap.c:961 access/heap/rewriteheap.c:1175 access/heap/rewriteheap.c:1278 access/transam/timeline.c:432 access/transam/timeline.c:510 access/transam/twophase.c:1662 access/transam/xlog.c:3366 access/transam/xlog.c:3535 access/transam/xlog.c:4689 access/transam/xlog.c:10385 access/transam/xlog.c:10412 +#: replication/logical/snapbuild.c:1647 replication/slot.c:1500 replication/slot.c:1605 storage/file/fd.c:696 storage/file/fd.c:3520 storage/smgr/md.c:921 storage/smgr/md.c:962 storage/sync/sync.c:396 utils/cache/relmapper.c:885 utils/misc/guc.c:8053 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "ファイル\"%s\"をfsyncできませんでした: %m" -#: ../common/exec.c:138 ../common/exec.c:255 ../common/exec.c:301 +#: ../common/exec.c:137 ../common/exec.c:254 ../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "カレントディレクトリを識別できませんでした: %m" -#: ../common/exec.c:157 +#: ../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "バイナリ\"%s\"は不正です" -#: ../common/exec.c:207 +#: ../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "バイナリ\"%s\"を読み取れませんでした" -#: ../common/exec.c:215 +#: ../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "実行すべき\"%s\"がありませんでした" -#: ../common/exec.c:271 ../common/exec.c:310 utils/init/miscinit.c:220 +#: ../common/exec.c:270 ../common/exec.c:309 utils/init/miscinit.c:397 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "ディレクトリ\"%s\"に移動できませんでした: %m" -#: ../common/exec.c:288 access/transam/xlog.c:10438 -#: replication/basebackup.c:1246 utils/adt/misc.c:324 +#: ../common/exec.c:287 access/transam/xlog.c:10740 replication/basebackup.c:1413 utils/adt/misc.c:337 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を読めませんでした: %m" -#: ../common/exec.c:541 +#: ../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "pcloseが失敗しました: %m" -#: ../common/exec.c:670 ../common/exec.c:715 ../common/exec.c:807 -#: ../common/psprintf.c:143 ../port/path.c:630 ../port/path.c:668 -#: ../port/path.c:685 access/transam/twophase.c:1394 access/transam/xlog.c:6363 -#: lib/dshash.c:246 lib/stringinfo.c:283 libpq/auth.c:1092 libpq/auth.c:1482 -#: libpq/auth.c:1550 libpq/auth.c:2068 postmaster/bgworker.c:337 -#: postmaster/bgworker.c:907 postmaster/postmaster.c:2460 -#: postmaster/postmaster.c:2482 postmaster/postmaster.c:4074 -#: postmaster/postmaster.c:4763 postmaster/postmaster.c:4838 -#: postmaster/postmaster.c:5515 postmaster/postmaster.c:5876 -#: replication/libpqwalreceiver/libpqwalreceiver.c:257 -#: replication/logical/logical.c:179 storage/buffer/localbuf.c:436 -#: storage/file/fd.c:795 storage/file/fd.c:1191 storage/file/fd.c:1352 -#: storage/file/fd.c:2161 storage/ipc/procarray.c:1047 -#: storage/ipc/procarray.c:1542 storage/ipc/procarray.c:1549 -#: storage/ipc/procarray.c:1973 storage/ipc/procarray.c:2600 -#: utils/adt/cryptohashes.c:45 utils/adt/cryptohashes.c:65 -#: utils/adt/formatting.c:1604 utils/adt/formatting.c:1728 -#: utils/adt/formatting.c:1853 utils/adt/pg_locale.c:473 -#: utils/adt/pg_locale.c:637 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 -#: utils/hash/dynahash.c:448 utils/hash/dynahash.c:557 -#: utils/hash/dynahash.c:1069 utils/mb/mbutils.c:371 utils/mb/mbutils.c:398 -#: utils/mb/mbutils.c:727 utils/mb/mbutils.c:753 utils/misc/guc.c:4620 -#: utils/misc/guc.c:4636 utils/misc/guc.c:4649 utils/misc/guc.c:7804 -#: utils/misc/tzparser.c:468 utils/mmgr/aset.c:484 utils/mmgr/dsa.c:701 -#: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:249 -#: utils/mmgr/mcxt.c:796 utils/mmgr/mcxt.c:832 utils/mmgr/mcxt.c:870 -#: utils/mmgr/mcxt.c:908 utils/mmgr/mcxt.c:944 utils/mmgr/mcxt.c:975 -#: utils/mmgr/mcxt.c:1011 utils/mmgr/mcxt.c:1063 utils/mmgr/mcxt.c:1098 -#: utils/mmgr/mcxt.c:1133 utils/mmgr/slab.c:239 +#: ../common/exec.c:539 ../common/exec.c:584 ../common/exec.c:676 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1335 access/transam/xlog.c:6491 lib/dshash.c:246 libpq/auth.c:1090 libpq/auth.c:1491 libpq/auth.c:1559 libpq/auth.c:2089 libpq/be-secure-gssapi.c:484 postmaster/bgworker.c:336 postmaster/bgworker.c:886 postmaster/postmaster.c:2520 postmaster/postmaster.c:2542 +#: postmaster/postmaster.c:4168 postmaster/postmaster.c:4862 postmaster/postmaster.c:4941 postmaster/postmaster.c:5624 postmaster/postmaster.c:5984 replication/libpqwalreceiver/libpqwalreceiver.c:276 replication/logical/logical.c:195 replication/walsender.c:590 storage/buffer/localbuf.c:442 storage/file/fd.c:834 storage/file/fd.c:1304 storage/file/fd.c:1465 storage/file/fd.c:2270 storage/ipc/procarray.c:1368 storage/ipc/procarray.c:2106 +#: storage/ipc/procarray.c:2113 storage/ipc/procarray.c:2591 storage/ipc/procarray.c:3215 utils/adt/cryptohashes.c:45 utils/adt/cryptohashes.c:65 utils/adt/formatting.c:1698 utils/adt/formatting.c:1822 utils/adt/formatting.c:1947 utils/adt/pg_locale.c:475 utils/adt/pg_locale.c:639 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:469 utils/hash/dynahash.c:578 utils/hash/dynahash.c:1090 utils/mb/mbutils.c:401 utils/mb/mbutils.c:428 +#: utils/mb/mbutils.c:757 utils/mb/mbutils.c:783 utils/misc/guc.c:4864 utils/misc/guc.c:4880 utils/misc/guc.c:4893 utils/misc/guc.c:8031 utils/misc/tzparser.c:467 utils/mmgr/aset.c:475 utils/mmgr/dsa.c:701 utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:233 utils/mmgr/mcxt.c:829 utils/mmgr/mcxt.c:865 utils/mmgr/mcxt.c:903 utils/mmgr/mcxt.c:941 utils/mmgr/mcxt.c:977 utils/mmgr/mcxt.c:1008 utils/mmgr/mcxt.c:1044 utils/mmgr/mcxt.c:1096 +#: utils/mmgr/mcxt.c:1131 utils/mmgr/mcxt.c:1166 utils/mmgr/slab.c:235 #, c-format msgid "out of memory" msgstr "メモリ不足です" -#: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 -#: ../common/fe_memutils.c:98 ../common/psprintf.c:145 ../port/path.c:632 -#: ../port/path.c:670 ../port/path.c:687 utils/misc/ps_status.c:176 -#: utils/misc/ps_status.c:184 utils/misc/ps_status.c:214 -#: utils/misc/ps_status.c:222 +#: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 ../common/psprintf.c:145 ../port/path.c:632 ../port/path.c:670 ../port/path.c:687 utils/misc/ps_status.c:181 utils/misc/ps_status.c:189 utils/misc/ps_status.c:219 utils/misc/ps_status.c:227 #, c-format msgid "out of memory\n" msgstr "メモリ不足です\n" -#: ../common/fe_memutils.c:92 +#: ../common/fe_memutils.c:92 ../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "nullポインタは複製できません(内部エラー)\n" -#: ../common/file_utils.c:81 ../common/file_utils.c:183 -#: access/transam/twophase.c:1261 access/transam/xlog.c:10541 -#: access/transam/xlog.c:10579 access/transam/xlog.c:10796 -#: access/transam/xlogarchive.c:111 access/transam/xlogarchive.c:271 -#: commands/copy.c:1944 commands/copy.c:3559 commands/extension.c:3330 -#: commands/tablespace.c:796 commands/tablespace.c:887 guc-file.l:1062 -#: replication/basebackup.c:355 replication/basebackup.c:535 -#: replication/basebackup.c:607 replication/logical/snapbuild.c:1527 -#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1703 -#: storage/file/fd.c:2980 storage/file/fd.c:3162 storage/file/fd.c:3247 -#: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 -#: utils/adt/genfile.c:133 utils/adt/genfile.c:386 +#: ../common/file_utils.c:84 ../common/file_utils.c:186 access/transam/twophase.c:1238 access/transam/xlog.c:10843 access/transam/xlog.c:10881 access/transam/xlog.c:11098 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:226 commands/copy.c:1988 commands/copy.c:3561 commands/extension.c:3444 commands/tablespace.c:795 commands/tablespace.c:886 guc-file.l:1062 replication/basebackup.c:439 replication/basebackup.c:622 replication/basebackup.c:698 +#: replication/logical/snapbuild.c:1523 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1816 storage/file/fd.c:3096 storage/file/fd.c:3278 storage/file/fd.c:3364 utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:416 utils/adt/genfile.c:642 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ファイル\"%s\"のstatに失敗しました: %m" -#: ../common/file_utils.c:160 ../common/pgfnames.c:48 commands/tablespace.c:719 -#: commands/tablespace.c:729 postmaster/postmaster.c:1474 -#: storage/file/fd.c:2562 storage/file/reinit.c:122 utils/adt/genfile.c:487 -#: utils/adt/genfile.c:565 utils/adt/misc.c:243 utils/misc/tzparser.c:339 +#: ../common/file_utils.c:163 ../common/pgfnames.c:48 commands/tablespace.c:718 commands/tablespace.c:728 postmaster/postmaster.c:1511 storage/file/fd.c:2673 storage/file/reinit.c:122 utils/adt/misc.c:259 utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" -#: ../common/file_utils.c:194 ../common/pgfnames.c:69 storage/file/fd.c:2574 +#: ../common/file_utils.c:197 ../common/pgfnames.c:69 storage/file/fd.c:2685 #, c-format msgid "could not read directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を読み取れませんでした: %m" -#: ../common/file_utils.c:377 access/transam/xlogarchive.c:456 -#: postmaster/syslogger.c:1524 replication/logical/snapbuild.c:1670 -#: replication/slot.c:598 replication/slot.c:1210 replication/slot.c:1332 -#: storage/file/fd.c:664 storage/file/fd.c:759 utils/time/snapmgr.c:1350 +#: ../common/file_utils.c:380 access/transam/xlogarchive.c:411 postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1666 replication/slot.c:651 replication/slot.c:1386 replication/slot.c:1528 storage/file/fd.c:714 utils/time/snapmgr.c:1316 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m" -#: ../common/logging.c:188 +#: ../common/jsonapi.c:1064 +#, c-format +msgid "Escape sequence \"\\%s\" is invalid." +msgstr "エスケープシーケンス\"\\%s\"は不正です。" + +#: ../common/jsonapi.c:1067 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "0x%02x値を持つ文字はエスケープしなければなりません" + +#: ../common/jsonapi.c:1070 +#, c-format +msgid "Expected end of input, but found \"%s\"." +msgstr "入力の終端を想定していましたが、\"%s\"でした。" + +#: ../common/jsonapi.c:1073 +#, c-format +msgid "Expected array element or \"]\", but found \"%s\"." +msgstr "配列要素または\"]\"を想定していましたが、\"%s\"でした。" + +#: ../common/jsonapi.c:1076 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%s\"." +msgstr "\",\"または\"]\"を想定していましたが、\"%s\"でした。" + +#: ../common/jsonapi.c:1079 +#, c-format +msgid "Expected \":\", but found \"%s\"." +msgstr "\":\"を想定していましたが、\"%s\"でした。" + +#: ../common/jsonapi.c:1082 +#, c-format +msgid "Expected JSON value, but found \"%s\"." +msgstr "JSON値を想定していましたが、\"%s\"でした。" + +#: ../common/jsonapi.c:1085 +msgid "The input string ended unexpectedly." +msgstr "入力文字列が予期せず終了しました。" + +#: ../common/jsonapi.c:1087 +#, c-format +msgid "Expected string or \"}\", but found \"%s\"." +msgstr "文字列または\"}\"を想定していましたが、\"%s\"でした。" + +#: ../common/jsonapi.c:1090 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%s\"." +msgstr "\",\"または\"}\"を想定していましたが、\"%s\"でした。" + +#: ../common/jsonapi.c:1093 +#, c-format +msgid "Expected string, but found \"%s\"." +msgstr "文字列を想定していましたが、\"%s\"でした。" + +#: ../common/jsonapi.c:1096 +#, c-format +msgid "Token \"%s\" is invalid." +msgstr "トークン\"%s\"は不正です。" + +#: ../common/jsonapi.c:1099 jsonpath_scan.l:500 +#, c-format +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 はテキストに変換できません。" + +#: ../common/jsonapi.c:1101 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "\"\\u\"の後には16進数の4桁が続かなければなりません。" + +#: ../common/jsonapi.c:1104 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "エンコーディングがUTF-8ではない場合、コードポイントの値が 007F 以上についてはUnicodeエスケープの値は使用できません。" + +#: ../common/jsonapi.c:1106 jsonpath_scan.l:521 +#, c-format +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "Unicodeのハイサロゲートはハイサロゲートに続いてはいけません。" + +#: ../common/jsonapi.c:1108 jsonpath_scan.l:532 jsonpath_scan.l:542 jsonpath_scan.l:584 +#, c-format +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Unicodeのローサロゲートはハイサロゲートに続かなければなりません。" + +#: ../common/logging.c:241 #, c-format msgid "fatal: " msgstr "致命的エラー: " -#: ../common/logging.c:195 +#: ../common/logging.c:248 #, c-format msgid "error: " msgstr "エラー: " -#: ../common/logging.c:202 +#: ../common/logging.c:255 #, c-format msgid "warning: " msgstr "警告: " @@ -291,53 +261,57 @@ msgstr "警告: " msgid "could not close directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をクローズできませんでした: %m" -#: ../common/relpath.c:58 +#: ../common/relpath.c:61 #, c-format msgid "invalid fork name" msgstr "不正なフォーク名です" -#: ../common/relpath.c:59 +#: ../common/relpath.c:62 #, c-format msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "有効なフォーク名は\"main\"、\"fsm\"、\"vm\"および\"init\"です。" -#: ../common/restricted_token.c:69 +#: ../common/restricted_token.c:64 libpq/auth.c:1521 libpq/auth.c:2520 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "このプラットフォームでは制限付きトークンを生成できません" +msgid "could not load library \"%s\": error code %lu" +msgstr "ライブラリ\"%s\"をロードできませんでした: エラーコード %lu" -#: ../common/restricted_token.c:78 +#: ../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "このプラットフォームでは制限付きトークンを生成できません: エラーコード %lu" + +#: ../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "プロセストークンをオープンできませんでした: エラーコード %lu" -#: ../common/restricted_token.c:91 +#: ../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "SIDを割り当てられませんでした: エラーコード %lu" -#: ../common/restricted_token.c:110 +#: ../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "制限付きトークンを生成できませんでした: エラーコード %lu" -#: ../common/restricted_token.c:131 +#: ../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "コマンド\"%s\"のためのプロセスを起動できませんでした: エラーコード %lu" -#: ../common/restricted_token.c:169 +#: ../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "制限付きトークンで再実行できませんでした: %lu" -#: ../common/restricted_token.c:185 +#: ../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "サブプロセスの終了コードを取得できませんでした: エラーコード %lu" -#: ../common/rmtree.c:79 replication/basebackup.c:1005 -#: replication/basebackup.c:1175 +#: ../common/rmtree.c:79 replication/basebackup.c:1166 replication/basebackup.c:1342 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "\"%s\"というファイルまたはディレクトリの情報を取得できませんでした。: %m" @@ -347,17 +321,33 @@ msgstr "\"%s\"というファイルまたはディレクトリの情報を取得 msgid "could not remove file or directory \"%s\": %m" msgstr "\"%s\"というファイルまたはディレクトリを削除できませんでした: %m" -#: ../common/saslprep.c:1093 +#: ../common/saslprep.c:1087 #, c-format msgid "password too long" msgstr "パスワードが長すぎます" +#: ../common/stringinfo.c:306 +#, c-format +msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." +msgstr "%dバイトを持つ文字列バッファを%dバイト多く、大きくすることができません。" + +#: ../common/stringinfo.c:310 +#, c-format +msgid "" +"out of memory\n" +"\n" +"Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" +msgstr "" +"メモリが足りません\n" +"\n" +"%dバイトの文字列バッファを%dバイト拡げることができません。\n" + #: ../common/username.c:43 #, c-format msgid "could not look up effective user ID %ld: %s" msgstr "実効ユーザID %ld が見つかりませんでした: %s" -#: ../common/username.c:45 libpq/auth.c:2015 +#: ../common/username.c:45 libpq/auth.c:2027 msgid "user does not exist" msgstr "ユーザが存在しません" @@ -396,12 +386,12 @@ msgstr "子プロセスはシグナル%dにより終了しました: %s" msgid "child process exited with unrecognized status %d" msgstr "子プロセスは認識できないステータス%dで終了しました" -#: ../port/chklocale.c:288 +#: ../port/chklocale.c:307 #, c-format msgid "could not determine encoding for codeset \"%s\"" msgstr "コードセット\"%s\"用の符号化方式を特定できませんでした" -#: ../port/chklocale.c:409 ../port/chklocale.c:415 +#: ../port/chklocale.c:428 ../port/chklocale.c:434 #, c-format msgid "could not determine encoding for locale \"%s\": codeset is \"%s\"" msgstr "ロケール\"%s\"用の符号化方式を特定できませんでした: コードセットは\"%s\"です" @@ -426,25 +416,25 @@ msgstr "\"%s\"のジャンクションを取得できませんでした: %s" msgid "could not get junction for \"%s\": %s\n" msgstr "\"%s\"のジャンクションを取得できませんでした: %s\n" -#: ../port/open.c:128 +#: ../port/open.c:126 #, c-format msgid "could not open file \"%s\": %s" msgstr "ファイル\"%s\"をオープンできませんでした: %s" -#: ../port/open.c:129 +#: ../port/open.c:127 msgid "lock violation" msgstr "ロック違反" -#: ../port/open.c:129 +#: ../port/open.c:127 msgid "sharing violation" msgstr "共有違反" -#: ../port/open.c:130 +#: ../port/open.c:128 #, c-format msgid "Continuing to retry for 30 seconds." msgstr "再試行を30秒間続けます。" -#: ../port/open.c:131 +#: ../port/open.c:129 #, c-format msgid "You might have antivirus, backup, or similar software interfering with the database system." msgstr "データベースシステムに干渉するアンチウィルス、バックアップといったソフトウェアが存在する可能性があります。" @@ -474,224 +464,215 @@ msgstr "PowerUsersグループのSIDを取得できませんでした: エラー msgid "could not check access token membership: error code %lu\n" msgstr "アクセストークンのメンバーシップを確認できませんでした: エラーコード %lu\n" -#: access/brin/brin.c:204 +#: access/brin/brin.c:211 #, c-format msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" msgstr "インデックス\"%s\" ページ%uのBRIN範囲要約のリクエストは登録されていません" -#: access/brin/brin.c:881 access/brin/brin.c:958 access/gin/ginfast.c:1041 -#: access/transam/xlog.c:10218 access/transam/xlog.c:10747 -#: access/transam/xlogfuncs.c:289 access/transam/xlogfuncs.c:316 -#: access/transam/xlogfuncs.c:355 access/transam/xlogfuncs.c:376 -#: access/transam/xlogfuncs.c:397 access/transam/xlogfuncs.c:467 -#: access/transam/xlogfuncs.c:524 +#: access/brin/brin.c:874 access/brin/brin.c:951 access/gin/ginfast.c:1035 access/transam/xlog.c:10520 access/transam/xlog.c:11049 access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 access/transam/xlogfuncs.c:509 #, c-format msgid "recovery is in progress" msgstr "リカバリは現在進行中です" -#: access/brin/brin.c:882 access/brin/brin.c:959 +#: access/brin/brin.c:875 access/brin/brin.c:952 #, c-format msgid "BRIN control functions cannot be executed during recovery." msgstr "BRIN制御関数はリカバリ中は実行できません。" -#: access/brin/brin.c:890 access/brin/brin.c:967 +#: access/brin/brin.c:883 access/brin/brin.c:960 #, c-format msgid "block number out of range: %s" msgstr "ブロック番号が範囲外です: %s" -#: access/brin/brin.c:913 access/brin/brin.c:990 +#: access/brin/brin.c:906 access/brin/brin.c:983 #, c-format msgid "\"%s\" is not a BRIN index" msgstr "\"%s\"はBRINインデックスではありません" -#: access/brin/brin.c:929 access/brin/brin.c:1006 +#: access/brin/brin.c:922 access/brin/brin.c:999 #, c-format msgid "could not open parent table of index %s" msgstr "インデックス%sの親テーブルをオープンできませんでした" -#: access/brin/brin_pageops.c:77 access/brin/brin_pageops.c:363 -#: access/brin/brin_pageops.c:844 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1435 access/spgist/spgdoinsert.c:1957 +#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 access/brin/brin_pageops.c:843 access/gin/ginentrypage.c:110 access/gist/gist.c:1436 access/spgist/spgdoinsert.c:1957 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "インデックス行サイズ%1$zuはインデックス\"%3$s\"での最大値%2$zuを超えています" -#: access/brin/brin_revmap.c:382 access/brin/brin_revmap.c:388 +#: access/brin/brin_revmap.c:392 access/brin/brin_revmap.c:398 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "BRINインデックスが壊れています: 範囲マップの不整合" -#: access/brin/brin_revmap.c:404 -#, c-format -msgid "leftover placeholder tuple detected in BRIN index \"%s\", deleting" -msgstr "消されずに残ったプレースホルダータプルがBRINインデックス\"%s\"で見つかりました、削除します" - #: access/brin/brin_revmap.c:601 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "BRINインデックス\"%2$s\"のブロック %3$u のページタイプが予期しない値 0x%1$04X です" -#: access/brin/brin_validate.c:116 access/gin/ginvalidate.c:149 -#: access/gist/gistvalidate.c:146 access/hash/hashvalidate.c:132 -#: access/nbtree/nbtvalidate.c:110 access/spgist/spgvalidate.c:165 +#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:151 access/gist/gistvalidate.c:149 access/hash/hashvalidate.c:139 access/nbtree/nbtvalidate.c:120 access/spgist/spgvalidate.c:168 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with invalid support number %d" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は不正なサポート番号%4$dを持つ関数%3$sを含んでいます" -#: access/brin/brin_validate.c:132 access/gin/ginvalidate.c:161 -#: access/gist/gistvalidate.c:158 access/hash/hashvalidate.c:115 -#: access/nbtree/nbtvalidate.c:122 access/spgist/spgvalidate.c:177 +#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:163 access/gist/gistvalidate.c:161 access/hash/hashvalidate.c:118 access/nbtree/nbtvalidate.c:132 access/spgist/spgvalidate.c:180 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with wrong signature for support number %d" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"はサポート番号%4$dに対して間違ったシグネチャを持つ関数%3$sを含んでいます" -#: access/brin/brin_validate.c:154 access/gin/ginvalidate.c:180 -#: access/gist/gistvalidate.c:178 access/hash/hashvalidate.c:153 -#: access/nbtree/nbtvalidate.c:142 access/spgist/spgvalidate.c:197 +#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:182 access/gist/gistvalidate.c:181 access/hash/hashvalidate.c:160 access/nbtree/nbtvalidate.c:152 access/spgist/spgvalidate.c:200 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with invalid strategy number %d" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は不正なストラテジ番号%4$dを持つ演算子\"%3$s\"を含んでいます" -#: access/brin/brin_validate.c:183 access/gin/ginvalidate.c:193 -#: access/hash/hashvalidate.c:166 access/nbtree/nbtvalidate.c:155 -#: access/spgist/spgvalidate.c:213 +#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:195 access/hash/hashvalidate.c:173 access/nbtree/nbtvalidate.c:165 access/spgist/spgvalidate.c:216 #, c-format msgid "operator family \"%s\" of access method %s contains invalid ORDER BY specification for operator %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は演算子%3$sに対する不正なORDER BY指定を含んでいます" -#: access/brin/brin_validate.c:196 access/gin/ginvalidate.c:206 -#: access/gist/gistvalidate.c:226 access/hash/hashvalidate.c:179 -#: access/nbtree/nbtvalidate.c:168 access/spgist/spgvalidate.c:229 +#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:208 access/gist/gistvalidate.c:229 access/hash/hashvalidate.c:186 access/nbtree/nbtvalidate.c:178 access/spgist/spgvalidate.c:232 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with wrong signature" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は間違ったシグネチャを持つ演算子%3$sを含んでいます" -#: access/brin/brin_validate.c:234 access/hash/hashvalidate.c:219 -#: access/nbtree/nbtvalidate.c:226 access/spgist/spgvalidate.c:256 +#: access/brin/brin_validate.c:236 access/hash/hashvalidate.c:226 access/nbtree/nbtvalidate.c:236 access/spgist/spgvalidate.c:259 #, c-format msgid "operator family \"%s\" of access method %s is missing operator(s) for types %s and %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は%3$sと%4$sの型に対する演算子が含まれていません" -#: access/brin/brin_validate.c:244 +#: access/brin/brin_validate.c:246 #, c-format msgid "operator family \"%s\" of access method %s is missing support function(s) for types %s and %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は型%3$sと%4$sに対するサポート関数を含んでいません" -#: access/brin/brin_validate.c:257 access/hash/hashvalidate.c:233 -#: access/nbtree/nbtvalidate.c:250 access/spgist/spgvalidate.c:289 +#: access/brin/brin_validate.c:259 access/hash/hashvalidate.c:240 access/nbtree/nbtvalidate.c:260 access/spgist/spgvalidate.c:294 #, c-format msgid "operator class \"%s\" of access method %s is missing operator(s)" msgstr "アクセスメソッド\"%2$s\"の演算子クラス\"%1$s\"は演算子を含んでいません" -#: access/brin/brin_validate.c:268 access/gin/ginvalidate.c:247 -#: access/gist/gistvalidate.c:266 +#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:250 access/gist/gistvalidate.c:270 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d" msgstr "アクセスメソッド\"%2$s\"の演算子クラス\"%1$s\"はサポート関数%3$dを含んでいません" +#: access/common/attmap.c:122 +#, c-format +msgid "Returned type %s does not match expected type %s in column %d." +msgstr "列%3$dで返された%1$s型が、期待している%2$s型と一致しません。" + +#: access/common/attmap.c:150 +#, c-format +msgid "Number of returned columns (%d) does not match expected column count (%d)." +msgstr "返された列数(%d)が、期待する列数(%d)と一致しません。" + +#: access/common/attmap.c:229 access/common/attmap.c:241 +#, c-format +msgid "could not convert row type" +msgstr "行型に変換できませんでした" + +#: access/common/attmap.c:230 +#, c-format +msgid "Attribute \"%s\" of type %s does not match corresponding attribute of type %s." +msgstr "%2$s型の属性\"%1$s\"が%3$s型の対応する属性と合致しません。" + +#: access/common/attmap.c:242 +#, c-format +msgid "Attribute \"%s\" of type %s does not exist in type %s." +msgstr "%2$s型の属性\"%1$s\"が%3$s型の中に存在しません。" + #: access/common/heaptuple.c:1036 access/common/heaptuple.c:1371 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "列数(%d)が上限(%d)を超えています" -#: access/common/indextuple.c:63 +#: access/common/indextuple.c:70 #, c-format msgid "number of index columns (%d) exceeds limit (%d)" msgstr "インデックス列数(%d)が上限(%d)を超えています" -#: access/common/indextuple.c:179 access/spgist/spgutils.c:691 +#: access/common/indextuple.c:187 access/spgist/spgutils.c:704 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "インデックス行が%zuバイトを必要としますが最大値は%zuです" -#: access/common/printtup.c:369 tcop/fastpath.c:180 tcop/fastpath.c:530 -#: tcop/postgres.c:1834 +#: access/common/printtup.c:369 tcop/fastpath.c:180 tcop/fastpath.c:530 tcop/postgres.c:1904 #, c-format msgid "unsupported format code: %d" msgstr "非サポートの書式コード: %d" -#: access/common/reloptions.c:579 +#: access/common/reloptions.c:506 +msgid "Valid values are \"on\", \"off\", and \"auto\"." +msgstr "有効な値の範囲は\"on\"、\"off\"、\"auto\"です。" + +#: access/common/reloptions.c:517 +msgid "Valid values are \"local\" and \"cascaded\"." +msgstr "有効な値は\"local\"と\"cascaded\"です。" + +#: access/common/reloptions.c:665 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "ユーザ定義リレーションのパラメータ型の制限を超えました" -#: access/common/reloptions.c:867 +#: access/common/reloptions.c:1208 #, c-format msgid "RESET must not include values for parameters" msgstr "RESETにはパラメータの値を含めてはいけません" -#: access/common/reloptions.c:899 +#: access/common/reloptions.c:1240 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "認識できないパラメータ namaspace \"%s\"" -#: access/common/reloptions.c:936 utils/misc/guc.c:11739 +#: access/common/reloptions.c:1277 utils/misc/guc.c:12036 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "WITH OIDSと定義されたテーブルはサポートされません" -#: access/common/reloptions.c:1154 +#: access/common/reloptions.c:1447 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "認識できないラメータ \"%s\"" -#: access/common/reloptions.c:1184 +#: access/common/reloptions.c:1559 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "パラメータ\"%s\"が複数回指定されました" -#: access/common/reloptions.c:1200 +#: access/common/reloptions.c:1575 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "不正なブール型オプションの値 \"%s\": %s" -#: access/common/reloptions.c:1212 +#: access/common/reloptions.c:1587 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "不正な整数型オプションの値 \"%s\": %s" -#: access/common/reloptions.c:1218 access/common/reloptions.c:1238 +#: access/common/reloptions.c:1593 access/common/reloptions.c:1613 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "値%sはオプション\"%s\"の範囲外です" -#: access/common/reloptions.c:1220 +#: access/common/reloptions.c:1595 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "有効な値の範囲は\"%d\"~\"%d\"です。" -#: access/common/reloptions.c:1232 +#: access/common/reloptions.c:1607 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "不正な浮動小数点型オプションの値 \"%s\": %s" -#: access/common/reloptions.c:1240 +#: access/common/reloptions.c:1615 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "有効な値の範囲は\"%f\"~\"%f\"です。" -#: access/common/tupconvert.c:107 -#, c-format -msgid "Returned type %s does not match expected type %s in column %d." -msgstr "列%3$dで返された%1$s型が、期待している%2$s型と一致しません。" - -#: access/common/tupconvert.c:135 +#: access/common/reloptions.c:1637 #, c-format -msgid "Number of returned columns (%d) does not match expected column count (%d)." -msgstr "返された列数(%d)が、期待する列数(%d)と一致しません。" - -#: access/common/tupconvert.c:303 -#, c-format -msgid "Attribute \"%s\" of type %s does not match corresponding attribute of type %s." -msgstr "%2$s型の属性\"%1$s\"が%3$s型の対応する属性と合致しません。" +msgid "invalid value for enum option \"%s\": %s" +msgstr "不正な列挙型オプションの値 \"%s\": %s" -#: access/common/tupconvert.c:315 -#, c-format -msgid "Attribute \"%s\" of type %s does not exist in type %s." -msgstr "%2$s型の属性\"%1$s\"が%3$s型の中に存在しません。" - -#: access/common/tupdesc.c:842 parser/parse_clause.c:779 -#: parser/parse_relation.c:1578 +#: access/common/tupdesc.c:840 parser/parse_clause.c:772 parser/parse_relation.c:1803 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "列\"%s\"はSETOFとして宣言できません" @@ -706,83 +687,66 @@ msgstr "記録リストが長すぎます" msgid "Reduce maintenance_work_mem." msgstr "maintenance_work_mem を小さくしてください。" -#: access/gin/ginfast.c:1042 +#: access/gin/ginfast.c:1036 #, c-format msgid "GIN pending list cannot be cleaned up during recovery." msgstr "GIN保留リストはリカバリ中には処理できません。" -#: access/gin/ginfast.c:1049 +#: access/gin/ginfast.c:1043 #, c-format msgid "\"%s\" is not a GIN index" msgstr "\"%s\"はGINインデックスではありません" -#: access/gin/ginfast.c:1060 +#: access/gin/ginfast.c:1054 #, c-format msgid "cannot access temporary indexes of other sessions" msgstr "他のセッションの一時インデックスにはアクセスできません" -#: access/gin/ginscan.c:402 +#: access/gin/ginscan.c:431 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" msgstr "古いGINインデックスはインデックス全体のスキャンやnullの検索をサポートしていません" -#: access/gin/ginscan.c:403 +#: access/gin/ginscan.c:432 #, c-format msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "これを修復するには REINDEX INDEX \"%s\" をおこなってください。" -#: access/gin/ginutil.c:139 executor/execExpr.c:1860 -#: utils/adt/arrayfuncs.c:3789 utils/adt/arrayfuncs.c:6416 -#: utils/adt/rowtypes.c:936 +#: access/gin/ginutil.c:145 executor/execExpr.c:1862 utils/adt/arrayfuncs.c:3811 utils/adt/arrayfuncs.c:6439 utils/adt/rowtypes.c:956 #, c-format msgid "could not identify a comparison function for type %s" msgstr "%s型の比較関数が見つかりません" -#: access/gin/ginvalidate.c:93 access/gist/gistvalidate.c:93 -#: access/hash/hashvalidate.c:99 access/spgist/spgvalidate.c:99 +#: access/gin/ginvalidate.c:92 access/gist/gistvalidate.c:93 access/hash/hashvalidate.c:102 access/spgist/spgvalidate.c:99 #, c-format msgid "operator family \"%s\" of access method %s contains support function %s with different left and right input types" msgstr "アクセスメソッド %2$s の演算子族\"%1$s\"が左右辺の入力型が異なるサポート関数 %3$s を含んでいます" -#: access/gin/ginvalidate.c:257 +#: access/gin/ginvalidate.c:260 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d or %d" msgstr "アクセスメソッド\"%2$s\"の演算子クラス\"%1$s\"はサポート関数%3$dまたは%4$dを含んでいません" -#: access/gist/gist.c:749 access/gist/gistvacuum.c:434 +#: access/gin/ginvalidate.c:333 access/gist/gistvalidate.c:345 access/spgist/spgvalidate.c:366 +#, c-format +msgid "support function number %d is invalid for access method %s" +msgstr "サポート関数番号%dはアクセスメソッド%sに対して不正です" + +#: access/gist/gist.c:754 access/gist/gistvacuum.c:408 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "インデックス\"%s\"内に無効と判断されている内部タプルがあります" -#: access/gist/gist.c:751 access/gist/gistvacuum.c:436 +#: access/gist/gist.c:756 access/gist/gistvacuum.c:410 #, c-format msgid "This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1." msgstr "これは、PostgreSQL 9.1へアップグレードする前のクラッシュリカバリにおける不完全なページ分割が原因で発生します。" -#: access/gist/gist.c:752 access/gist/gistutil.c:787 access/gist/gistutil.c:798 -#: access/gist/gistvacuum.c:437 access/hash/hashutil.c:241 -#: access/hash/hashutil.c:252 access/hash/hashutil.c:264 -#: access/hash/hashutil.c:285 access/nbtree/nbtpage.c:708 -#: access/nbtree/nbtpage.c:719 +#: access/gist/gist.c:757 access/gist/gistutil.c:786 access/gist/gistutil.c:797 access/gist/gistvacuum.c:411 access/hash/hashutil.c:227 access/hash/hashutil.c:238 access/hash/hashutil.c:250 access/hash/hashutil.c:271 access/nbtree/nbtpage.c:742 access/nbtree/nbtpage.c:753 #, c-format msgid "Please REINDEX it." msgstr "REINDEXを行ってください。" -#: access/gist/gistbuild.c:253 -#, c-format -msgid "invalid value for \"buffering\" option" -msgstr "不正な\"buffering\"オプションの値" - -#: access/gist/gistbuild.c:254 -#, c-format -msgid "Valid values are \"on\", \"off\", and \"auto\"." -msgstr "有効な値の範囲は\"on\"、\"off\"、\"auto\"です。" - -#: access/gist/gistbuildbuffers.c:779 utils/sort/logtape.c:255 -#, c-format -msgid "could not write block %ld of temporary file: %m" -msgstr "一時ファイルのブロック%ldを書き込めませんでした: %m" - #: access/gist/gistsplit.c:446 #, c-format msgid "picksplit method for column %d of index \"%s\" failed" @@ -793,41 +757,33 @@ msgstr "インデックス\"%2$s\"の列%1$dに対するピックスプリット msgid "The index is not optimal. To optimize it, contact a developer, or try to use the column as the second one in the CREATE INDEX command." msgstr "インデックスは最適ではありません。最適化するためには開発者に連絡するか、この列をCREATE INDEXコマンドの2番目の列としてみてください。" -#: access/gist/gistutil.c:784 access/hash/hashutil.c:238 -#: access/nbtree/nbtpage.c:705 +#: access/gist/gistutil.c:783 access/hash/hashutil.c:224 access/nbtree/nbtpage.c:739 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "インデックス\"%s\"のブロック%uに予期していないゼロで埋められたページがあります" -#: access/gist/gistutil.c:795 access/hash/hashutil.c:249 -#: access/hash/hashutil.c:261 access/nbtree/nbtpage.c:716 +#: access/gist/gistutil.c:794 access/hash/hashutil.c:235 access/hash/hashutil.c:247 access/nbtree/nbtpage.c:750 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "インデックス\"%s\"のブロック%uに破損したページがあります" -#: access/gist/gistvalidate.c:196 +#: access/gist/gistvalidate.c:199 #, c-format msgid "operator family \"%s\" of access method %s contains unsupported ORDER BY specification for operator %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は演算子%3$sに対する非サポートのORDER BY指定を含んでいます" -#: access/gist/gistvalidate.c:207 +#: access/gist/gistvalidate.c:210 #, c-format msgid "operator family \"%s\" of access method %s contains incorrect ORDER BY opfamily specification for operator %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は演算子%3$sに対する正しくないORDER BY演算子族を含んでいます" -#: access/hash/hashfunc.c:255 access/hash/hashfunc.c:311 -#: utils/adt/varchar.c:992 utils/adt/varchar.c:1052 +#: access/hash/hashfunc.c:255 access/hash/hashfunc.c:311 utils/adt/varchar.c:993 utils/adt/varchar.c:1053 #, c-format msgid "could not determine which collation to use for string hashing" msgstr "文字列のハッシュ値計算で使用する照合順序を特定できませんでした" -#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:678 -#: commands/createas.c:207 commands/createas.c:491 commands/indexcmds.c:1696 -#: commands/tablecmds.c:15268 commands/view.c:105 regex/regc_pg_locale.c:263 -#: utils/adt/formatting.c:1571 utils/adt/formatting.c:1695 -#: utils/adt/formatting.c:1820 utils/adt/like.c:194 -#: utils/adt/like_support.c:965 utils/adt/varchar.c:734 utils/adt/varchar.c:993 -#: utils/adt/varchar.c:1053 utils/adt/varlena.c:1464 +#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:702 catalog/heap.c:708 commands/createas.c:206 commands/createas.c:489 commands/indexcmds.c:1815 commands/tablecmds.c:15892 commands/view.c:86 parser/parse_utilcmd.c:4116 regex/regc_pg_locale.c:263 utils/adt/formatting.c:1665 utils/adt/formatting.c:1789 utils/adt/formatting.c:1914 utils/adt/like.c:194 utils/adt/like_support.c:1003 utils/adt/varchar.c:733 utils/adt/varchar.c:994 +#: utils/adt/varchar.c:1054 utils/adt/varlena.c:1476 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "照合順序を明示するには COLLATE 句を使います。" @@ -837,8 +793,7 @@ msgstr "照合順序を明示するには COLLATE 句を使います。" msgid "index row size %zu exceeds hash maximum %zu" msgstr "インデックス行のサイズ%zuがハッシュでの最大値%zuを超えています" -#: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:1961 -#: access/spgist/spgutils.c:752 +#: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:1961 access/spgist/spgutils.c:765 #, c-format msgid "Values larger than a buffer page cannot be indexed." msgstr "バッファページよりも大きな値をインデックスすることはできません。" @@ -858,241 +813,245 @@ msgstr "ハッシュインデックス\"%s\"の中のオーバーフローペー msgid "hash indexes do not support whole-index scans" msgstr "ハッシュインデックスはインデックス全体のスキャンをサポートしていません" -#: access/hash/hashutil.c:277 +#: access/hash/hashutil.c:263 #, c-format msgid "index \"%s\" is not a hash index" msgstr "インデックス\"%s\"はハッシュインデックスではありません" -#: access/hash/hashutil.c:283 +#: access/hash/hashutil.c:269 #, c-format msgid "index \"%s\" has wrong hash version" msgstr "インデックス\"%s\"のハッシュバージョンが不正です" -#: access/hash/hashvalidate.c:191 +#: access/hash/hashvalidate.c:198 #, c-format msgid "operator family \"%s\" of access method %s lacks support function for operator %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は演算子%3$sに対するサポート関数を含んでいません" -#: access/hash/hashvalidate.c:249 access/nbtree/nbtvalidate.c:266 +#: access/hash/hashvalidate.c:256 access/nbtree/nbtvalidate.c:276 #, c-format msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は異なる型間に対応する演算子を含んでいません" -#: access/heap/heapam.c:2063 +#: access/heap/heapam.c:2057 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "並列ワーカではタプルの挿入はできません" -#: access/heap/heapam.c:2473 +#: access/heap/heapam.c:2475 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "並列処理中はタプルの削除はできません" -#: access/heap/heapam.c:2519 +#: access/heap/heapam.c:2521 #, c-format msgid "attempted to delete invisible tuple" msgstr "不可視のタプルを削除しようとしました" -#: access/heap/heapam.c:2945 access/heap/heapam.c:5726 +#: access/heap/heapam.c:2947 access/heap/heapam.c:5736 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "並列処理中はタプルの更新はできません" -#: access/heap/heapam.c:3078 +#: access/heap/heapam.c:3080 #, c-format msgid "attempted to update invisible tuple" msgstr "不可視のタプルを更新しようとしました" -#: access/heap/heapam.c:4390 access/heap/heapam.c:4428 -#: access/heap/heapam.c:4685 access/heap/heapam_handler.c:454 +#: access/heap/heapam.c:4391 access/heap/heapam.c:4429 access/heap/heapam.c:4686 access/heap/heapam_handler.c:452 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "リレーション\"%s\"の行ロックを取得できませんでした" -#: access/heap/heapam_handler.c:405 +#: access/heap/heapam_handler.c:401 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update" msgstr "ロック対象のタプルは同時に行われた更新によってすでに他の子テーブルに移動されています" -#: access/heap/hio.c:345 access/heap/rewriteheap.c:681 +#: access/heap/hio.c:345 access/heap/rewriteheap.c:662 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "行が大きすぎます: サイズは%zu、上限は%zu" -#: access/heap/rewriteheap.c:941 +#: access/heap/rewriteheap.c:921 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "ファイル\"%1$s\"に書き込めませんでした、%3$dバイト中%2$dバイト書き込みました: %m" -#: access/heap/rewriteheap.c:1035 access/heap/rewriteheap.c:1154 -#: access/transam/timeline.c:314 access/transam/timeline.c:468 -#: access/transam/xlog.c:3252 access/transam/xlog.c:3424 -#: access/transam/xlog.c:4544 access/transam/xlog.c:10556 -#: access/transam/xlog.c:10594 access/transam/xlog.c:10999 -#: access/transam/xlogfuncs.c:736 postmaster/postmaster.c:4530 -#: replication/logical/origin.c:576 replication/slot.c:1261 -#: storage/file/copydir.c:167 storage/smgr/md.c:204 utils/time/snapmgr.c:1329 +#: access/heap/rewriteheap.c:1015 access/heap/rewriteheap.c:1134 access/transam/timeline.c:329 access/transam/timeline.c:485 access/transam/xlog.c:3298 access/transam/xlog.c:3470 access/transam/xlog.c:4668 access/transam/xlog.c:10858 access/transam/xlog.c:10896 access/transam/xlog.c:11301 access/transam/xlogfuncs.c:735 postmaster/postmaster.c:4623 replication/logical/origin.c:570 replication/slot.c:1447 storage/file/copydir.c:167 storage/smgr/md.c:218 +#: utils/time/snapmgr.c:1295 #, c-format msgid "could not create file \"%s\": %m" msgstr "ファイル\"%s\"を作成できませんでした: %m" -#: access/heap/rewriteheap.c:1164 +#: access/heap/rewriteheap.c:1144 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "ファイル\"%s\"を%uバイトに切り詰められませんでした: %m" -#: access/heap/rewriteheap.c:1172 replication/walsender.c:493 -#: storage/smgr/md.c:1245 -#, c-format -msgid "could not seek to end of file \"%s\": %m" -msgstr "ファイル\"%s\"の終端へシークできませんでした: %m" - -#: access/heap/rewriteheap.c:1189 access/transam/timeline.c:369 -#: access/transam/timeline.c:408 access/transam/timeline.c:485 -#: access/transam/xlog.c:3308 access/transam/xlog.c:3480 -#: access/transam/xlog.c:4556 postmaster/postmaster.c:4540 -#: postmaster/postmaster.c:4550 replication/logical/origin.c:588 -#: replication/logical/origin.c:630 replication/logical/origin.c:649 -#: replication/logical/snapbuild.c:1627 replication/slot.c:1295 -#: storage/file/copydir.c:207 utils/init/miscinit.c:1345 -#: utils/init/miscinit.c:1356 utils/init/miscinit.c:1364 utils/misc/guc.c:7787 -#: utils/misc/guc.c:7818 utils/misc/guc.c:9743 utils/misc/guc.c:9757 -#: utils/time/snapmgr.c:1334 utils/time/snapmgr.c:1341 +#: access/heap/rewriteheap.c:1162 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:502 access/transam/xlog.c:3354 access/transam/xlog.c:3526 access/transam/xlog.c:4680 postmaster/postmaster.c:4633 postmaster/postmaster.c:4643 replication/logical/origin.c:582 replication/logical/origin.c:624 replication/logical/origin.c:643 replication/logical/snapbuild.c:1623 replication/slot.c:1482 storage/file/buffile.c:502 +#: storage/file/copydir.c:207 utils/init/miscinit.c:1393 utils/init/miscinit.c:1404 utils/init/miscinit.c:1412 utils/misc/guc.c:8014 utils/misc/guc.c:8045 utils/misc/guc.c:9965 utils/misc/guc.c:9979 utils/time/snapmgr.c:1300 utils/time/snapmgr.c:1307 #, c-format msgid "could not write to file \"%s\": %m" msgstr "ファイル\"%s\"を書き出せませんでした: %m" -#: access/heap/rewriteheap.c:1279 access/transam/twophase.c:1661 -#: access/transam/xlogarchive.c:119 access/transam/xlogarchive.c:466 -#: postmaster/postmaster.c:1277 postmaster/syslogger.c:1466 -#: replication/logical/origin.c:564 replication/logical/reorderbuffer.c:2814 -#: replication/logical/snapbuild.c:1569 replication/logical/snapbuild.c:2011 -#: replication/slot.c:1383 storage/file/fd.c:704 storage/file/fd.c:3000 -#: storage/file/fd.c:3062 storage/file/reinit.c:255 storage/ipc/dsm.c:307 -#: storage/smgr/md.c:298 storage/smgr/md.c:354 storage/sync/sync.c:210 -#: utils/time/snapmgr.c:1674 +#: access/heap/rewriteheap.c:1252 access/transam/twophase.c:1601 access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:421 postmaster/postmaster.c:1094 postmaster/syslogger.c:1465 replication/logical/origin.c:558 replication/logical/reorderbuffer.c:3907 replication/logical/snapbuild.c:1565 replication/logical/snapbuild.c:2007 replication/slot.c:1579 storage/file/fd.c:754 storage/file/fd.c:3116 storage/file/fd.c:3178 storage/file/reinit.c:255 +#: storage/ipc/dsm.c:315 storage/smgr/md.c:311 storage/smgr/md.c:367 storage/sync/sync.c:210 utils/time/snapmgr.c:1640 #, c-format msgid "could not remove file \"%s\": %m" msgstr "ファイル\"%s\"を削除できませんでした: %m" -#: access/heap/vacuumlazy.c:267 -#, c-format -msgid "skipping redundant vacuum to prevent wraparound of table \"%s.%s.%s\"" -msgstr "テーブル\"%s.%s.%s\"の周回防止vacuumは重複のためスキップします" - -#: access/heap/vacuumlazy.c:405 +#: access/heap/vacuumlazy.c:648 #, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "テーブル\"%s.%s.%s\"の周回防止のための積極的自動VACUUM: インデックススキャン: %d\n" -#: access/heap/vacuumlazy.c:410 +#: access/heap/vacuumlazy.c:650 +#, c-format +msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" +msgstr "テーブル\"%s.%s.%s\"の周回防止のための自動VACUUM: インデックススキャン: %d\n" + +#: access/heap/vacuumlazy.c:655 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "テーブル\"%s.%s.%s\"の積極的自動VACUUM: インデックススキャン: %d\n" -#: access/heap/vacuumlazy.c:412 +#: access/heap/vacuumlazy.c:657 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "テーブル\"%s.%s.%s\"の自動VACUUM: インデックススキャン: %d\n" -#: access/heap/vacuumlazy.c:419 +#: access/heap/vacuumlazy.c:664 #, c-format msgid "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n" msgstr "ページ: %uを削除、%uが残存、%uがピンによってスキップ、%uが凍結によってスキップ\n" -#: access/heap/vacuumlazy.c:425 +#: access/heap/vacuumlazy.c:670 #, c-format msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable, oldest xmin: %u\n" msgstr "タプル: %.0fを削除, %.0fが残存, %.0fが参照されていないがまだ削除できない, 最古のxmin: %u\n" -#: access/heap/vacuumlazy.c:431 +#: access/heap/vacuumlazy.c:676 #, c-format -msgid "buffer usage: %d hits, %d misses, %d dirtied\n" -msgstr "バッファ使用: %dヒット, %d失敗, %d ダーティ化\n" +msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" +msgstr "バッファ使用: %lldヒット, %lld失敗, %lld ダーティ化\n" -#: access/heap/vacuumlazy.c:435 +#: access/heap/vacuumlazy.c:680 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "平均読み取り速度: %.3f MB/s, 平均書き込み速度: %.3f MB/s\n" -#: access/heap/vacuumlazy.c:437 +#: access/heap/vacuumlazy.c:682 +#, c-format +msgid "system usage: %s\n" +msgstr "システム使用状況: %s\n" + +#: access/heap/vacuumlazy.c:684 #, c-format -msgid "system usage: %s" -msgstr "システム使用状況: %s" +msgid "WAL usage: %ld records, %ld full page images, " +msgstr "WAL出力: %ld レコード, %ld フルページイメージ" -#: access/heap/vacuumlazy.c:533 +#: access/heap/vacuumlazy.c:797 #, c-format msgid "aggressively vacuuming \"%s.%s\"" msgstr "\"%s.%s\"に対して積極的VACUUMを実行しています" -#: access/heap/vacuumlazy.c:538 commands/cluster.c:910 +#: access/heap/vacuumlazy.c:802 commands/cluster.c:874 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "\"%s.%s\"に対してVACUUMを実行しています" -#: access/heap/vacuumlazy.c:1476 +#: access/heap/vacuumlazy.c:841 +#, c-format +msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" +msgstr "\"%s\"のVACUUMに対するパラレルオプションを無効化します --- 一時テーブルは並列にVACUUMできません" + +#: access/heap/vacuumlazy.c:1736 #, c-format msgid "\"%s\": removed %.0f row versions in %u pages" msgstr "\"%s\": %.0f行バージョンを%uページから削除しました" -#: access/heap/vacuumlazy.c:1486 +#: access/heap/vacuumlazy.c:1746 #, c-format msgid "%.0f dead row versions cannot be removed yet, oldest xmin: %u\n" msgstr "%.0f 個の不要な行バージョンがまだ削除できません、最古のxmin: %u\n" -#: access/heap/vacuumlazy.c:1488 +#: access/heap/vacuumlazy.c:1748 #, c-format msgid "There were %.0f unused item identifiers.\n" msgstr "%.0f個の使われていないアイテム識別子がありました。\n" -#: access/heap/vacuumlazy.c:1490 +#: access/heap/vacuumlazy.c:1750 #, c-format msgid "Skipped %u page due to buffer pins, " msgid_plural "Skipped %u pages due to buffer pins, " msgstr[0] "バッファピンのため%uページが、" msgstr[1] "バッファピンのため%uページが、" -#: access/heap/vacuumlazy.c:1494 +#: access/heap/vacuumlazy.c:1754 #, c-format msgid "%u frozen page.\n" msgid_plural "%u frozen pages.\n" msgstr[0] "凍結のため%uページがスキップされました。\n" msgstr[1] "凍結のため%uページがスキップされました。\n" -#: access/heap/vacuumlazy.c:1498 +#: access/heap/vacuumlazy.c:1758 #, c-format msgid "%u page is entirely empty.\n" msgid_plural "%u pages are entirely empty.\n" msgstr[0] "%uページが完全に空です。\n" msgstr[1] "%uページが完全に空です。\n" -#: access/heap/vacuumlazy.c:1502 commands/indexcmds.c:3313 -#: commands/indexcmds.c:3331 +#: access/heap/vacuumlazy.c:1762 commands/indexcmds.c:3450 commands/indexcmds.c:3468 #, c-format msgid "%s." msgstr "%s。" -#: access/heap/vacuumlazy.c:1505 +#: access/heap/vacuumlazy.c:1765 #, c-format msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" msgstr "\"%1$s\": 全 %5$u ページ中の %4$u ページで見つかった行バージョン: 削除可能 %2$.0f 行、削除不可 %3$.0f 行" -#: access/heap/vacuumlazy.c:1574 +#: access/heap/vacuumlazy.c:1896 #, c-format msgid "\"%s\": removed %d row versions in %d pages" msgstr "\"%s\": %d行バージョンを%dページから削除しました" -#: access/heap/vacuumlazy.c:1765 +#: access/heap/vacuumlazy.c:2151 +#, c-format +msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" +msgid_plural "launched %d parallel vacuum workers for index cleanup (planned: %d)" +msgstr[0] "インデックスのクリーンアップのために%d個の並列VACUUMワーカを起動しました (計画値: %d)" +msgstr[1] "インデックスのクリーンアップのために%d個の並列VACUUMワーカを起動しました (計画値: %d)" + +#: access/heap/vacuumlazy.c:2157 +#, c-format +msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" +msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" +msgstr[0] "インデックスのVACUUMのために%d個の並列VACUUMワーカを起動しました (計画値: %d)" +msgstr[1] "インデックスのVACUUMのために%d個の並列VACUUMワーカを起動しました (計画値: %d)" + +#: access/heap/vacuumlazy.c:2449 +#, c-format +msgid "scanned index \"%s\" to remove %d row versions by parallel vacuum worker" +msgstr "%2$d行バージョンを削除するためインデックス\"%1$s\"を並列VACUUMワーカでスキャンしました" + +#: access/heap/vacuumlazy.c:2451 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "%2$d行バージョンを削除するためインデックス\"%1$s\"をスキャンしました" -#: access/heap/vacuumlazy.c:1818 +#: access/heap/vacuumlazy.c:2515 +#, c-format +msgid "index \"%s\" now contains %.0f row versions in %u pages as reported by parallel vacuum worker" +msgstr "並列VACUUMワーカからの報告では、現在インデックス\"%s\"は%.0f行バージョンを%uページで含んでいます" + +#: access/heap/vacuumlazy.c:2517 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "現在インデックス\"%s\"は%.0f行バージョンを%uページで含んでいます" -#: access/heap/vacuumlazy.c:1822 +#: access/heap/vacuumlazy.c:2524 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -1103,22 +1062,52 @@ msgstr "" "%uインデックスページが削除され、%uページが現在再利用可能です。\n" "%s。" -#: access/heap/vacuumlazy.c:1920 +#: access/heap/vacuumlazy.c:2621 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "\"%s\":競合するロックが存在するため切り詰めを中断します" -#: access/heap/vacuumlazy.c:1985 +#: access/heap/vacuumlazy.c:2687 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "\"%s\": %uページから%uページに切り詰められました" -#: access/heap/vacuumlazy.c:2050 +#: access/heap/vacuumlazy.c:2752 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "\"%s\": 競合するロック要求が存在するため、切り詰めを保留します" -#: access/index/amapi.c:83 commands/amcmds.c:167 +#: access/heap/vacuumlazy.c:3499 +#, c-format +msgid "starting parallel vacuum worker for %s" +msgstr "\"%s\"に対する並列VACUUMワーカを起動しています" + +#: access/heap/vacuumlazy.c:3590 +#, c-format +msgid "while scanning block %u of relation \"%s.%s\"" +msgstr "リレーション\\\"%2$s.%3$s\\\"のブロック%1$uのスキャン中" + +#: access/heap/vacuumlazy.c:3596 +#, c-format +msgid "while vacuuming block %u of relation \"%s.%s\"" +msgstr "リレーション\\\"%2$s.%3$s\\\"のブロック%1$uのVACUUM処理中" + +#: access/heap/vacuumlazy.c:3601 +#, c-format +msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" +msgstr "リレーション\\\"%2$s.%3$s\\\"のインデックス%1$sのVACUUM処理中" + +#: access/heap/vacuumlazy.c:3606 +#, c-format +msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" +msgstr "リレーション\\\"%2$s.%3$s\\\"のインデックス%1$sのクリーンアップ処理中" + +#: access/heap/vacuumlazy.c:3612 +#, c-format +msgid "while truncating relation \"%s.%s\" to %u blocks" +msgstr "リレーション \"%s.%s\"を%uブロックに切り詰め中" + +#: access/index/amapi.c:83 commands/amcmds.c:143 #, c-format msgid "access method \"%s\" is not of type %s" msgstr "アクセスメソッド\"%s\"のタイプが%sではありません" @@ -1128,65 +1117,72 @@ msgstr "アクセスメソッド\"%s\"のタイプが%sではありません" msgid "index access method \"%s\" does not have a handler" msgstr "インデックスアクセスメソッド\"%s\"はハンドラを持っていません" -#: access/index/indexam.c:136 catalog/objectaddress.c:1259 -#: commands/indexcmds.c:2407 commands/tablecmds.c:248 commands/tablecmds.c:272 -#: commands/tablecmds.c:14975 commands/tablecmds.c:16365 +#: access/index/genam.c:460 +#, c-format +msgid "transaction aborted during system catalog scan" +msgstr "システムカタログのスキャン中にトランザクションがアボートしました" + +#: access/index/indexam.c:142 catalog/objectaddress.c:1355 commands/indexcmds.c:2517 commands/tablecmds.c:254 commands/tablecmds.c:278 commands/tablecmds.c:15590 commands/tablecmds.c:17045 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\"はインデックスではありません" -#: access/nbtree/nbtinsert.c:565 +#: access/index/indexam.c:971 +#, c-format +msgid "operator class %s has no options" +msgstr "演算子クラス%sにはオプションはありません" + +#: access/nbtree/nbtinsert.c:651 #, c-format msgid "duplicate key value violates unique constraint \"%s\"" msgstr "重複したキー値は一意性制約\"%s\"違反となります" -#: access/nbtree/nbtinsert.c:567 +#: access/nbtree/nbtinsert.c:653 #, c-format msgid "Key %s already exists." msgstr "キー %s はすでに存在します。" -#: access/nbtree/nbtinsert.c:638 +#: access/nbtree/nbtinsert.c:745 #, c-format msgid "failed to re-find tuple within index \"%s\"" msgstr "インデックス\"%s\"内で行の再検索に失敗しました" -#: access/nbtree/nbtinsert.c:640 +#: access/nbtree/nbtinsert.c:747 #, c-format msgid "This may be because of a non-immutable index expression." msgstr "これは不変でないインデックス式が原因である可能性があります" -#: access/nbtree/nbtpage.c:135 access/nbtree/nbtpage.c:521 -#: parser/parse_utilcmd.c:2117 +#: access/nbtree/nbtpage.c:151 access/nbtree/nbtpage.c:539 parser/parse_utilcmd.c:2156 #, c-format msgid "index \"%s\" is not a btree" msgstr "インデックス\"%s\"はbtreeではありません" -#: access/nbtree/nbtpage.c:142 access/nbtree/nbtpage.c:528 +#: access/nbtree/nbtpage.c:158 access/nbtree/nbtpage.c:546 #, c-format msgid "version mismatch in index \"%s\": file version %d, current version %d, minimal supported version %d" msgstr "インデックス\"%s\"におけるバージョンの不整合: ファイルバージョン %d、現在のバージョン %d、サポートされる最小のバージョン %d" -#: access/nbtree/nbtpage.c:1349 +#: access/nbtree/nbtpage.c:1608 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "インデックス\"%s\"に削除処理中の内部ページがあります" -#: access/nbtree/nbtpage.c:1351 +#: access/nbtree/nbtpage.c:1610 #, c-format msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "これは9.3かそれ以前のバージョンで、アップグレード前にVACUUMが中断された際に起きた可能性があります。REINDEXしてください。" -#: access/nbtree/nbtutils.c:2563 +#: access/nbtree/nbtutils.c:2664 #, c-format msgid "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" msgstr "インデックス行サイズ%1$zuはインデックス\"%4$s\"でのbtreeバージョン %2$u の最大値%3$zuを超えています" -#: access/nbtree/nbtutils.c:2569 +#: access/nbtree/nbtutils.c:2670 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "インデックス行はリレーション\"%3$s\"のタプル(%1$u,%2$u)を参照しています。" -#: access/nbtree/nbtutils.c:2573 +#: access/nbtree/nbtutils.c:2674 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1195,50 +1191,47 @@ msgstr "" "バッファページの1/3を超える値はインデックス化できません。\n" "MD5ハッシュによる関数インデックスを検討するか、もしくは全文テキストインデックスを使用してください。" -#: access/nbtree/nbtvalidate.c:236 +#: access/nbtree/nbtvalidate.c:246 #, c-format msgid "operator family \"%s\" of access method %s is missing support function for types %s and %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は型%3$sと%4$sに対応するサポート関数を含んでいません" -#: access/spgist/spgutils.c:142 +#: access/spgist/spgutils.c:148 #, c-format msgid "compress method must be defined when leaf type is different from input type" msgstr "リーフ型が入力型と異なる場合は圧縮メソッドの定義が必要です" -#: access/spgist/spgutils.c:749 +#: access/spgist/spgutils.c:762 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "SP-GiST内部タプルのサイズ%zuが最大値%zuを超えています" -#: access/spgist/spgvalidate.c:276 +#: access/spgist/spgvalidate.c:281 #, c-format msgid "operator family \"%s\" of access method %s is missing support function %d for type %s" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は%4$s型に対するサポート関数%3$dを含んでいません" -#: access/table/table.c:49 access/table/table.c:78 access/table/table.c:111 -#: catalog/aclchk.c:1832 +#: access/table/table.c:49 access/table/table.c:78 access/table/table.c:111 catalog/aclchk.c:1773 #, c-format msgid "\"%s\" is an index" msgstr "\"%s\"はインデックスです" -#: access/table/table.c:54 access/table/table.c:83 access/table/table.c:116 -#: catalog/aclchk.c:1839 commands/tablecmds.c:11786 commands/tablecmds.c:14984 +#: access/table/table.c:54 access/table/table.c:83 access/table/table.c:116 catalog/aclchk.c:1780 commands/tablecmds.c:12411 commands/tablecmds.c:15599 #, c-format msgid "\"%s\" is a composite type" msgstr "\"%s\"は複合型です" -#: access/table/tableam.c:236 +#: access/table/tableam.c:266 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "tid (%u, %u) はリレーション\"%s\"に対して妥当ではありません" #: access/table/tableamapi.c:115 -#, fuzzy, c-format -#| msgid "channel name cannot be empty" +#, c-format msgid "%s cannot be empty." -msgstr "チャネル名が空であることはできません" +msgstr "%sは空にはできません。" -#: access/table/tableamapi.c:122 utils/misc/guc.c:11663 +#: access/table/tableamapi.c:122 utils/misc/guc.c:11960 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s が長過ぎます(最大%d文字)。" @@ -1270,21 +1263,20 @@ msgstr "コミットタイムスタンプ情報を取得できません" #: access/transam/commit_ts.c:395 #, c-format -msgid "Make sure the configuration parameter \"%s\" is set on the master server." -msgstr "マスタサーバで設定パラメータ\"%s\"がonに設定されていることを確認してください" +msgid "Make sure the configuration parameter \"%s\" is set on the primary server." +msgstr "プライマリサーバで設定パラメータ\"%s\"がonに設定されていることを確認してください。" #: access/transam/commit_ts.c:397 #, c-format msgid "Make sure the configuration parameter \"%s\" is set." msgstr "設定パラメータ\"%s\"が設定されていることを確認してください。" -#: access/transam/multixact.c:1000 +#: access/transam/multixact.c:1002 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database \"%s\"" msgstr "データベース\"%s\"におけるMultiXactIds周回によるデータ損失を防ぐために、データベースは新しくMultiXactIdsを生成するコマンドを受け付けません" -#: access/transam/multixact.c:1002 access/transam/multixact.c:1009 -#: access/transam/multixact.c:1033 access/transam/multixact.c:1042 +#: access/transam/multixact.c:1004 access/transam/multixact.c:1011 access/transam/multixact.c:1035 access/transam/multixact.c:1044 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1293,72 +1285,70 @@ msgstr "" "そのデータベース全体の VACUUM を実行してください。\n" "古い準備済みトランザクションのコミットまたはロールバック、もしくは古いレプリケーションスロットの削除も必要かもしれません。" -#: access/transam/multixact.c:1007 +#: access/transam/multixact.c:1009 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database with OID %u" msgstr "OID %u を持つデータベースは周回によるデータ損失を防ぐために、新しいMultiXactIdsを生成するコマンドを受け付けない状態になっています" -#: access/transam/multixact.c:1028 access/transam/multixact.c:2318 +#: access/transam/multixact.c:1030 access/transam/multixact.c:2316 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "database \"%s\" must be vacuumed before %u more MultiXactIds are used" msgstr[0] "データベース\"%s\"はあと%u個のMultiXactIdが使われる前にVACUUMする必要があります" msgstr[1] "データベース\"%s\"はあと%u個のMultiXactIdが使われる前にVACUUMする必要があります" -#: access/transam/multixact.c:1037 access/transam/multixact.c:2327 +#: access/transam/multixact.c:1039 access/transam/multixact.c:2325 #, c-format msgid "database with OID %u must be vacuumed before %u more MultiXactId is used" msgid_plural "database with OID %u must be vacuumed before %u more MultiXactIds are used" msgstr[0] "OID %u のデータベースはあと%u個のMultiXactIdが使われる前にVACUUMする必要があります" msgstr[1] "OID %u のデータベースはあと%u個のMultiXactIdが使われる前にVACUUMする必要があります" -#: access/transam/multixact.c:1098 +#: access/transam/multixact.c:1100 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "マルチトランザクションの\"メンバ\"が制限を超えました" -#: access/transam/multixact.c:1099 +#: access/transam/multixact.c:1101 #, c-format msgid "This command would create a multixact with %u members, but the remaining space is only enough for %u member." msgid_plural "This command would create a multixact with %u members, but the remaining space is only enough for %u members." msgstr[0] "このコマンドで%u個のメンバを持つマルチトランザクションが生成されますが、残りのスペースは %u 個のメンバ分しかありません。" msgstr[1] "このコマンドで%u個のメンバを持つマルチトランザクションが生成されますが、残りのスペースは %u 個のメンバ分しかありません。" -#: access/transam/multixact.c:1104 +#: access/transam/multixact.c:1106 #, c-format msgid "Execute a database-wide VACUUM in database with OID %u with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "vacuum_multixact_freeze_min_age と vacuum_multixact_freeze_table_age をより小さな値に設定してOID %u のデータベースでデータベース全体にVACUUMを実行してください。" -#: access/transam/multixact.c:1135 +#: access/transam/multixact.c:1137 #, c-format msgid "database with OID %u must be vacuumed before %d more multixact member is used" msgid_plural "database with OID %u must be vacuumed before %d more multixact members are used" msgstr[0] "OID %u のデータベースは更に%d個のマルチトランザクションメンバが使用される前にVACUUMを実行する必要があります" msgstr[1] "OID %u のデータベースは更に%d個のマルチトランザクションメンバが使用される前にVACUUMを実行する必要があります" -#: access/transam/multixact.c:1140 +#: access/transam/multixact.c:1142 #, c-format msgid "Execute a database-wide VACUUM in that database with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "vacuum_multixact_freeze_min_age と vacuum_multixact_freeze_table_age をより小さな値に設定した上で、そのデータベースでVACUUMを実行してください。" -#: access/transam/multixact.c:1277 +#: access/transam/multixact.c:1279 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %uはもう存在しません: 周回しているようです" -#: access/transam/multixact.c:1285 +#: access/transam/multixact.c:1287 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %uを作成できませんでした: 周回している様子" -#: access/transam/multixact.c:2268 +#: access/transam/multixact.c:2266 #, c-format msgid "MultiXactId wrap limit is %u, limited by database with OID %u" msgstr "MultiXactIdの周回制限は %u で、OID %u を持つデータベースにより制限されています" -#: access/transam/multixact.c:2323 access/transam/multixact.c:2332 -#: access/transam/varsup.c:149 access/transam/varsup.c:156 -#: access/transam/varsup.c:447 access/transam/varsup.c:454 +#: access/transam/multixact.c:2321 access/transam/multixact.c:2330 access/transam/varsup.c:151 access/transam/varsup.c:158 access/transam/varsup.c:466 access/transam/varsup.c:473 #, c-format msgid "" "To avoid a database shutdown, execute a database-wide VACUUM in that database.\n" @@ -1367,340 +1357,335 @@ msgstr "" "データベースの停止を防ぐために、データベース全体の VACUUM を実行してください。\n" "古い準備済みトランザクションのコミットまたはロールバック、もしくは古いレプリケーションスロットの削除も必要かもしれません。" -#: access/transam/multixact.c:2602 +#: access/transam/multixact.c:2600 #, c-format msgid "oldest MultiXactId member is at offset %u" msgstr "最古のMultiXactIdメンバはオフセット%uにあります" -#: access/transam/multixact.c:2606 +#: access/transam/multixact.c:2604 #, c-format msgid "MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk" msgstr "最古のチェックポイント済みのマルチトランザクション%uがディスク上に存在しないため、マルチトランザクションメンバーの周回防止機能を無効にしました" -#: access/transam/multixact.c:2628 +#: access/transam/multixact.c:2626 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "マルチトランザクションメンバーの周回防止機能が有効になりました" -#: access/transam/multixact.c:2631 +#: access/transam/multixact.c:2629 #, c-format msgid "MultiXact member stop limit is now %u based on MultiXact %u" msgstr "マルチトランザクションの停止上限がマルチトランザクション%2$uを起点にして%1$uになりました" -#: access/transam/multixact.c:3011 +#: access/transam/multixact.c:3009 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "最古のマルチトランザクション%uが見つかりません、アクセス可能な最古のものは%u、切り詰めをスキップします" -#: access/transam/multixact.c:3029 +#: access/transam/multixact.c:3027 #, c-format msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" msgstr "マルチトランザクション%uがディスク上に存在しないため、そこまでの切り詰めができません、切り詰めをスキップします" -#: access/transam/multixact.c:3343 +#: access/transam/multixact.c:3341 #, c-format msgid "invalid MultiXactId: %u" msgstr "不正なMultiXactId: %u" -#: access/transam/parallel.c:673 access/transam/parallel.c:792 +#: access/transam/parallel.c:706 access/transam/parallel.c:825 #, c-format msgid "parallel worker failed to initialize" msgstr "パラレルワーカの初期化に失敗しました" -#: access/transam/parallel.c:674 access/transam/parallel.c:793 +#: access/transam/parallel.c:707 access/transam/parallel.c:826 #, c-format msgid "More details may be available in the server log." msgstr "詳細な情報がはサーバログにあるかもしれません。" -#: access/transam/parallel.c:854 +#: access/transam/parallel.c:887 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "並列処理中にpostmasterが終了しました" -#: access/transam/parallel.c:1041 +#: access/transam/parallel.c:1074 #, c-format msgid "lost connection to parallel worker" msgstr "パラレルワーカへの接続を失いました" -#: access/transam/parallel.c:1107 access/transam/parallel.c:1109 +#: access/transam/parallel.c:1140 access/transam/parallel.c:1142 msgid "parallel worker" msgstr "パラレルワーカ" -#: access/transam/parallel.c:1259 +#: access/transam/parallel.c:1293 #, c-format msgid "could not map dynamic shared memory segment" msgstr "動的共有メモリセグメントをマップできませんでした" -#: access/transam/parallel.c:1264 +#: access/transam/parallel.c:1298 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "動的共有メモリセグメントのマジックナンバーが不正です" -#: access/transam/slru.c:674 +#: access/transam/slru.c:696 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "ファイル\"%s\"が存在しません。ゼロとして読み込みます" -#: access/transam/slru.c:912 access/transam/slru.c:918 -#: access/transam/slru.c:926 access/transam/slru.c:931 -#: access/transam/slru.c:938 access/transam/slru.c:943 -#: access/transam/slru.c:950 access/transam/slru.c:957 +#: access/transam/slru.c:920 access/transam/slru.c:926 access/transam/slru.c:934 access/transam/slru.c:939 access/transam/slru.c:946 access/transam/slru.c:951 access/transam/slru.c:958 access/transam/slru.c:965 #, c-format msgid "could not access status of transaction %u" msgstr "トランザクション%uのステータスにアクセスできませんでした" -#: access/transam/slru.c:913 +#: access/transam/slru.c:921 #, c-format msgid "Could not open file \"%s\": %m." msgstr "ファイル\"%s\"をオープンできませんでした: %m。" -#: access/transam/slru.c:919 +#: access/transam/slru.c:927 #, c-format msgid "Could not seek in file \"%s\" to offset %u: %m." msgstr "ファイル\"%s\"のオフセット%uにシークできませんでした: %m。" -#: access/transam/slru.c:927 +#: access/transam/slru.c:935 #, c-format msgid "Could not read from file \"%s\" at offset %u: %m." msgstr "ファイル\"%s\"のオフセット%uを読み取れませんでした: %m。" -#: access/transam/slru.c:932 -#, fuzzy, c-format -#| msgid "Could not read from file \"%s\" at offset %u: %m." +#: access/transam/slru.c:940 +#, c-format msgid "Could not read from file \"%s\" at offset %u: read too few bytes." -msgstr "ファイル\"%s\"のオフセット%uを読み取れませんでした: %m。" +msgstr "ファイル\"%s\"のオフセット%uを読み取れませんでした: 読み込んだバイト数が足りません。" -#: access/transam/slru.c:939 +#: access/transam/slru.c:947 #, c-format msgid "Could not write to file \"%s\" at offset %u: %m." msgstr "ファイル\"%s\"のオフセット%uに書き出せませんでした: %m。" -#: access/transam/slru.c:944 -#, fuzzy, c-format -#| msgid "Could not write to file \"%s\" at offset %u: %m." +#: access/transam/slru.c:952 +#, c-format msgid "Could not write to file \"%s\" at offset %u: wrote too few bytes." -msgstr "ファイル\"%s\"のオフセット%uに書き出せませんでした: %m。" +msgstr "ファイル\"%s\"のオフセット%uに書き出せませんでした: 書き込んだバイト数が足りません。" -#: access/transam/slru.c:951 +#: access/transam/slru.c:959 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "ファイル\"%s\"をfsyncできませんでした: %m。" -#: access/transam/slru.c:958 +#: access/transam/slru.c:966 #, c-format msgid "Could not close file \"%s\": %m." msgstr "ファイル\"%s\"をクローズできませんでした: %m。" -#: access/transam/slru.c:1215 +#: access/transam/slru.c:1237 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "ディレクトリ\"%s\"を切り詰めできませんでした: 明らかに周回しています" -#: access/transam/slru.c:1270 access/transam/slru.c:1326 +#: access/transam/slru.c:1292 access/transam/slru.c:1348 #, c-format msgid "removing file \"%s\"" msgstr "ファイル\"%s\"を削除しています" -#: access/transam/timeline.c:148 access/transam/timeline.c:153 +#: access/transam/timeline.c:163 access/transam/timeline.c:168 #, c-format msgid "syntax error in history file: %s" msgstr "履歴ファイル内の構文エラー: %s" -#: access/transam/timeline.c:149 +#: access/transam/timeline.c:164 #, c-format msgid "Expected a numeric timeline ID." msgstr "数字のタイムラインIDを想定しました。" -#: access/transam/timeline.c:154 +#: access/transam/timeline.c:169 #, c-format msgid "Expected a write-ahead log switchpoint location." msgstr "先行書き込みログの切り替え点の場所があるはずでした。" -#: access/transam/timeline.c:158 +#: access/transam/timeline.c:173 #, c-format msgid "invalid data in history file: %s" msgstr "履歴ファイル内の不正なデータ: %s" -#: access/transam/timeline.c:159 +#: access/transam/timeline.c:174 #, c-format msgid "Timeline IDs must be in increasing sequence." msgstr "タイムラインIDは昇順でなければなりません" -#: access/transam/timeline.c:179 +#: access/transam/timeline.c:194 #, c-format msgid "invalid data in history file \"%s\"" msgstr "履歴ファイル\"%s\"内に不正なデータがありました" -#: access/transam/timeline.c:180 +#: access/transam/timeline.c:195 #, c-format msgid "Timeline IDs must be less than child timeline's ID." msgstr "タイムラインIDは子のタイムラインIDより小さくなければなりません。" -#: access/transam/timeline.c:580 +#: access/transam/timeline.c:597 #, c-format msgid "requested timeline %u is not in this server's history" msgstr "要求されたタイムライン%uがサーバの履歴上に存在しません" -#: access/transam/twophase.c:382 +#: access/transam/twophase.c:381 #, c-format msgid "transaction identifier \"%s\" is too long" msgstr "トランザクション識別子\"%s\"は長すぎます" -#: access/transam/twophase.c:389 +#: access/transam/twophase.c:388 #, c-format msgid "prepared transactions are disabled" msgstr "トランザクションの準備は無効にされているためできません。" -#: access/transam/twophase.c:390 +#: access/transam/twophase.c:389 #, c-format msgid "Set max_prepared_transactions to a nonzero value." msgstr "max_prepared_transactionsを非ゼロに設定してください。" -#: access/transam/twophase.c:409 +#: access/transam/twophase.c:408 #, c-format msgid "transaction identifier \"%s\" is already in use" msgstr "トランザクション識別子\"%s\"はすでに存在します" -#: access/transam/twophase.c:418 access/transam/twophase.c:2420 +#: access/transam/twophase.c:417 access/transam/twophase.c:2360 #, c-format msgid "maximum number of prepared transactions reached" msgstr "準備済みのトランザクションの最大数に達しました" -#: access/transam/twophase.c:419 access/transam/twophase.c:2421 +#: access/transam/twophase.c:418 access/transam/twophase.c:2361 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "max_prepared_transactionsを増加してください(現状%d)。" -#: access/transam/twophase.c:587 +#: access/transam/twophase.c:583 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "識別子\"%s\"の準備されたトランザクションのロックが取得できません" -#: access/transam/twophase.c:593 +#: access/transam/twophase.c:589 #, c-format msgid "permission denied to finish prepared transaction" msgstr "準備されたトランザクションの終了が拒否されました" -#: access/transam/twophase.c:594 +#: access/transam/twophase.c:590 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "スーパユーザまたはこのトランザクションを準備したユーザである必要があります。" -#: access/transam/twophase.c:605 +#: access/transam/twophase.c:601 #, c-format msgid "prepared transaction belongs to another database" msgstr "準備されたトランザクションは別のデータベースに属しています" -#: access/transam/twophase.c:606 +#: access/transam/twophase.c:602 #, c-format msgid "Connect to the database where the transaction was prepared to finish it." msgstr "終了させるためにはこのトランザクションを準備したデータベースに接続してください。" -#: access/transam/twophase.c:621 +#: access/transam/twophase.c:617 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "識別子\"%s\"の準備されたトランザクションはありません" -#: access/transam/twophase.c:1115 +#: access/transam/twophase.c:1092 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "2相状態ファイルの最大長が制限を超えました" -#: access/transam/twophase.c:1269 +#: access/transam/twophase.c:1246 #, c-format msgid "incorrect size of file \"%s\": %zu byte" msgid_plural "incorrect size of file \"%s\": %zu bytes" msgstr[0] "ファイル\"%s\"のサイズが不正: %zu バイト" msgstr[1] "ファイル\"%s\"のサイズが不正: %zu バイト" -#: access/transam/twophase.c:1278 +#: access/transam/twophase.c:1255 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" msgstr "ファイル\"%s\"のCRCオフセットのアライメントが不正です" -#: access/transam/twophase.c:1311 +#: access/transam/twophase.c:1288 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "ファイル\"%s\"に格納されているマジックナンバーが不正です" -#: access/transam/twophase.c:1317 +#: access/transam/twophase.c:1294 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "ファイル\"%s\"内に格納されているサイズが不正です" -#: access/transam/twophase.c:1329 +#: access/transam/twophase.c:1306 #, c-format msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "算出されたCRCチェックサムがファイル\"%s\"に格納されている値と一致しません" -#: access/transam/twophase.c:1395 access/transam/xlog.c:6364 +#: access/transam/twophase.c:1336 access/transam/xlog.c:6492 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "WALリーダの割り当てに中に失敗しました。" -#: access/transam/twophase.c:1401 +#: access/transam/twophase.c:1343 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "WALの%X/%Xから2相状態を読み取れませんでした" -#: access/transam/twophase.c:1409 +#: access/transam/twophase.c:1351 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "WALの%X/%Xにあるはずの2相状態のデータがありません" -#: access/transam/twophase.c:1689 +#: access/transam/twophase.c:1629 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "ファイル\"%s\"を再作成できませんでした: %m" -#: access/transam/twophase.c:1816 +#: access/transam/twophase.c:1756 #, c-format msgid "%u two-phase state file was written for a long-running prepared transaction" msgid_plural "%u two-phase state files were written for long-running prepared transactions" msgstr[0] "長時間実行中の準備済みトランザクションのために%u個の2相状態ファイルが書き込まれました" msgstr[1] "長時間実行中の準備済みトランザクションのために%u個の2相状態ファイルが書き込まれました" -#: access/transam/twophase.c:2050 +#: access/transam/twophase.c:1990 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "共有メモリから準備済みトランザクション%uを復元します" -#: access/transam/twophase.c:2141 +#: access/transam/twophase.c:2081 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "不要になったトランザクション%uの2相状態ファイルを削除します" -#: access/transam/twophase.c:2148 +#: access/transam/twophase.c:2088 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "不要になったトランザクション%uの2相状態をメモリから削除します" -#: access/transam/twophase.c:2161 +#: access/transam/twophase.c:2101 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "未来のトランザクション%uの2相状態ファイルを削除します" -#: access/transam/twophase.c:2168 +#: access/transam/twophase.c:2108 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "未来のトランザクション%uの2相状態をメモリから削除します" -#: access/transam/twophase.c:2193 +#: access/transam/twophase.c:2133 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "トランザクション%uの2相状態ファイルが破損しています" -#: access/transam/twophase.c:2198 +#: access/transam/twophase.c:2138 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "メモリ上にあるトランザクション%uの2相状態が破損しています" -#: access/transam/varsup.c:127 +#: access/transam/varsup.c:129 #, c-format msgid "database is not accepting commands to avoid wraparound data loss in database \"%s\"" msgstr "データベース\"%s\"における周回によるデータ損失を防ぐために、データベースは問い合わせを受け付けていません" -#: access/transam/varsup.c:129 access/transam/varsup.c:136 +#: access/transam/varsup.c:131 access/transam/varsup.c:138 #, c-format msgid "" "Stop the postmaster and vacuum that database in single-user mode.\n" @@ -1709,563 +1694,548 @@ msgstr "" "postmaster を停止後、シングルユーザモードでデータベースをVACUUMを実行してください。\n" "古い準備済みトランザクションのコミットまたはロールバック、もしくは古いレプリケーションスロットの削除も必要かもしれません。" -#: access/transam/varsup.c:134 +#: access/transam/varsup.c:136 #, c-format msgid "database is not accepting commands to avoid wraparound data loss in database with OID %u" msgstr "OID %uのデータベースは周回によるデータ損失を防ぐために、データベースは問い合わせを受け付けていません" -#: access/transam/varsup.c:146 access/transam/varsup.c:444 +#: access/transam/varsup.c:148 access/transam/varsup.c:463 #, c-format msgid "database \"%s\" must be vacuumed within %u transactions" msgstr "データベース\"%s\"は%uトランザクション以内にVACUUMする必要があります" -#: access/transam/varsup.c:153 access/transam/varsup.c:451 +#: access/transam/varsup.c:155 access/transam/varsup.c:470 #, c-format msgid "database with OID %u must be vacuumed within %u transactions" msgstr "OID %uのデータベースは%uトランザクション以内にVACUUMを実行する必要があります" -#: access/transam/varsup.c:409 +#: access/transam/varsup.c:428 #, c-format msgid "transaction ID wrap limit is %u, limited by database with OID %u" msgstr "トランザクションIDの周回制限値はOID %uのデータベースにより%uに制限されています" -#: access/transam/xact.c:1027 +#: access/transam/xact.c:1045 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "1トランザクション内では 2^32-2 個より多くのコマンドを実行できません" -#: access/transam/xact.c:1552 +#: access/transam/xact.c:1582 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "コミットされたサブトランザクション数の最大値(%d)が制限を越えました" -#: access/transam/xact.c:2377 +#: access/transam/xact.c:2422 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "一時オブジェクトに対する操作を行ったトランザクションをPREPAREすることはできません" -#: access/transam/xact.c:2387 +#: access/transam/xact.c:2432 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "エクスポートされたスナップショットを持つトランザクションをPREPAREすることはできません" -#: access/transam/xact.c:2396 +#: access/transam/xact.c:2441 #, c-format msgid "cannot PREPARE a transaction that has manipulated logical replication workers" msgstr "論理レプリケーションワーカから操作されたトランザクションをPREPAREすることはできません" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3337 +#: access/transam/xact.c:3389 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%sはトランザクションブロックの内側では実行できません" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3347 +#: access/transam/xact.c:3399 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%sはサブトランザクションブロックの内側では実行できません" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3357 +#: access/transam/xact.c:3409 #, c-format msgid "%s cannot be executed from a function" msgstr "%s は関数内での実行はできません" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3426 access/transam/xact.c:3733 -#: access/transam/xact.c:3812 access/transam/xact.c:3935 -#: access/transam/xact.c:4086 access/transam/xact.c:4155 -#: access/transam/xact.c:4266 +#: access/transam/xact.c:3478 access/transam/xact.c:3784 access/transam/xact.c:3863 access/transam/xact.c:3986 access/transam/xact.c:4137 access/transam/xact.c:4206 access/transam/xact.c:4317 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%sはトランザクションブロック内でのみ使用できます" -#: access/transam/xact.c:3619 +#: access/transam/xact.c:3670 #, c-format msgid "there is already a transaction in progress" msgstr "すでにトランザクションが実行中です" -#: access/transam/xact.c:3738 access/transam/xact.c:3817 -#: access/transam/xact.c:3940 +#: access/transam/xact.c:3789 access/transam/xact.c:3868 access/transam/xact.c:3991 #, c-format msgid "there is no transaction in progress" msgstr "実行中のトランザクションがありません" -#: access/transam/xact.c:3828 +#: access/transam/xact.c:3879 #, c-format msgid "cannot commit during a parallel operation" msgstr "並列処理中にはコミットはできません" -#: access/transam/xact.c:3951 +#: access/transam/xact.c:4002 #, c-format msgid "cannot abort during a parallel operation" msgstr "パラレル処理中にロールバックはできません" -#: access/transam/xact.c:4050 +#: access/transam/xact.c:4101 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "パラレル処理中にセーブポイントは定義できません" -#: access/transam/xact.c:4137 +#: access/transam/xact.c:4188 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "並列処理中はセーブポイントの解放はできません" -#: access/transam/xact.c:4147 access/transam/xact.c:4198 -#: access/transam/xact.c:4258 access/transam/xact.c:4307 +#: access/transam/xact.c:4198 access/transam/xact.c:4249 access/transam/xact.c:4309 access/transam/xact.c:4358 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "セーブポイント\"%s\"は存在しません" -#: access/transam/xact.c:4204 access/transam/xact.c:4313 +#: access/transam/xact.c:4255 access/transam/xact.c:4364 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "セーブポイント\"%s\"は現在のセーブポイントレベルには存在しません" -#: access/transam/xact.c:4246 +#: access/transam/xact.c:4297 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "パラレル処理中にセーブポイントのロールバックはできません" -#: access/transam/xact.c:4374 +#: access/transam/xact.c:4425 #, c-format msgid "cannot start subtransactions during a parallel operation" msgstr "並列処理中はサブトランザクションを開始できません" -#: access/transam/xact.c:4442 +#: access/transam/xact.c:4493 #, c-format msgid "cannot commit subtransactions during a parallel operation" msgstr "並列処理中はサブトランザクションをコミットできません" -#: access/transam/xact.c:5080 +#: access/transam/xact.c:5136 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "1トランザクション内には 2^32-1 個より多くのサブトランザクションを作成できません" -#: access/transam/xlog.c:2506 +#: access/transam/xlog.c:2552 #, c-format msgid "could not write to log file %s at offset %u, length %zu: %m" msgstr "ログファイル%sのオフセット%uに長さ%zuの書き込みができませんでした: %m" -#: access/transam/xlog.c:2782 +#: access/transam/xlog.c:2828 #, c-format msgid "updated min recovery point to %X/%X on timeline %u" msgstr "最小リカバリポイントをタイムライン%3$uの%1$X/%2$Xに更新しました" -#: access/transam/xlog.c:3863 access/transam/xlogutils.c:703 -#: replication/walsender.c:2445 +#: access/transam/xlog.c:3942 access/transam/xlogutils.c:801 replication/walsender.c:2503 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "要求された WAL セグメント %s はすでに削除されています" -#: access/transam/xlog.c:4105 +#: access/transam/xlog.c:4185 #, c-format msgid "recycled write-ahead log file \"%s\"" msgstr "先行書き込みログファイル\"%s\"を再利用しました" -#: access/transam/xlog.c:4117 +#: access/transam/xlog.c:4197 #, c-format msgid "removing write-ahead log file \"%s\"" msgstr "先行書き込みログファイル\"%s\"を削除します" -#: access/transam/xlog.c:4137 +#: access/transam/xlog.c:4217 #, c-format msgid "could not rename file \"%s\": %m" msgstr "ファイル\"%s\"の名前を変更できませんでした: %m" -#: access/transam/xlog.c:4179 access/transam/xlog.c:4189 +#: access/transam/xlog.c:4259 access/transam/xlog.c:4269 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "WALディレクトリ\"%s\"は存在しません" -#: access/transam/xlog.c:4195 +#: access/transam/xlog.c:4275 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "なかったWALディレクトリ\"%s\"を作成しています" -#: access/transam/xlog.c:4198 +#: access/transam/xlog.c:4278 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "なかったディレクトリ\"%s\"の作成に失敗しました: %m" -#: access/transam/xlog.c:4303 +#: access/transam/xlog.c:4381 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "ログファイル%2$s、オフセット%3$uのタイムラインID%1$uは想定外です" -#: access/transam/xlog.c:4431 +#: access/transam/xlog.c:4519 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "新しいタイムライン%uはデータベースシステムのタイムライン%uの子ではありません" -#: access/transam/xlog.c:4445 +#: access/transam/xlog.c:4533 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "新しいタイムライン%uは現在のデータベースシステムのタイムライン%uから現在のリカバリポイント%X/%Xより前に分岐しています" -#: access/transam/xlog.c:4464 +#: access/transam/xlog.c:4552 #, c-format msgid "new target timeline is %u" msgstr "新しい目標タイムラインは%uです" -#: access/transam/xlog.c:4623 access/transam/xlog.c:4632 -#: access/transam/xlog.c:4656 access/transam/xlog.c:4663 -#: access/transam/xlog.c:4670 access/transam/xlog.c:4675 -#: access/transam/xlog.c:4682 access/transam/xlog.c:4689 -#: access/transam/xlog.c:4696 access/transam/xlog.c:4703 -#: access/transam/xlog.c:4710 access/transam/xlog.c:4717 -#: access/transam/xlog.c:4726 access/transam/xlog.c:4733 -#: access/transam/xlog.c:4742 access/transam/xlog.c:4749 -#: utils/init/miscinit.c:1502 +#: access/transam/xlog.c:4588 +#, c-format +msgid "could not generate secret authorization token" +msgstr "秘密の認証トークンを生成できませんでした" + +#: access/transam/xlog.c:4747 access/transam/xlog.c:4756 access/transam/xlog.c:4780 access/transam/xlog.c:4787 access/transam/xlog.c:4794 access/transam/xlog.c:4799 access/transam/xlog.c:4806 access/transam/xlog.c:4813 access/transam/xlog.c:4820 access/transam/xlog.c:4827 access/transam/xlog.c:4834 access/transam/xlog.c:4841 access/transam/xlog.c:4850 access/transam/xlog.c:4857 utils/init/miscinit.c:1550 #, c-format msgid "database files are incompatible with server" msgstr "データベースファイルがサーバと互換性がありません" -#: access/transam/xlog.c:4624 +#: access/transam/xlog.c:4748 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), but the server was compiled with PG_CONTROL_VERSION %d (0x%08x)." msgstr "データベースクラスタはPG_CONTROL_VERSION %d (0x%08x)で初期化されましたが、サーバはPG_CONTROL_VERSION %d (0x%08x)でコンパイルされています。" -#: access/transam/xlog.c:4628 +#: access/transam/xlog.c:4752 #, c-format msgid "This could be a problem of mismatched byte ordering. It looks like you need to initdb." msgstr "これはバイトオーダの不整合の可能性があります。initdbを実行する必要がありそうです。" -#: access/transam/xlog.c:4633 +#: access/transam/xlog.c:4757 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d, but the server was compiled with PG_CONTROL_VERSION %d." msgstr "データベースクラスタはPG_CONTROL_VERSION %d で初期化されましたが、サーバは PG_CONTROL_VERSION %d でコンパイルされています。" -#: access/transam/xlog.c:4636 access/transam/xlog.c:4660 -#: access/transam/xlog.c:4667 access/transam/xlog.c:4672 +#: access/transam/xlog.c:4760 access/transam/xlog.c:4784 access/transam/xlog.c:4791 access/transam/xlog.c:4796 #, c-format msgid "It looks like you need to initdb." msgstr "initdbが必要のようです。" -#: access/transam/xlog.c:4647 +#: access/transam/xlog.c:4771 #, c-format msgid "incorrect checksum in control file" msgstr "制御ファイル内のチェックサムが不正です" -#: access/transam/xlog.c:4657 +#: access/transam/xlog.c:4781 #, c-format msgid "The database cluster was initialized with CATALOG_VERSION_NO %d, but the server was compiled with CATALOG_VERSION_NO %d." msgstr "データベースクラスタは CATALOG_VERSION_NO %d で初期化されましたが、サーバは CATALOG_VERSION_NO %d でコンパイルされています。" -#: access/transam/xlog.c:4664 +#: access/transam/xlog.c:4788 #, c-format msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." msgstr "データベースクラスタは MAXALIGN %d で初期化されましたが、サーバは MAXALIGN %d でコンパイルされています。" -#: access/transam/xlog.c:4671 +#: access/transam/xlog.c:4795 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "データベースクラスタはサーバ実行ファイルと異なる浮動小数点書式を使用しているようです。" -#: access/transam/xlog.c:4676 +#: access/transam/xlog.c:4800 #, c-format msgid "The database cluster was initialized with BLCKSZ %d, but the server was compiled with BLCKSZ %d." msgstr "データベースクラスタは BLCKSZ %d で初期化されましたが、サーバは BLCKSZ %d でコンパイルされています。" -#: access/transam/xlog.c:4679 access/transam/xlog.c:4686 -#: access/transam/xlog.c:4693 access/transam/xlog.c:4700 -#: access/transam/xlog.c:4707 access/transam/xlog.c:4714 -#: access/transam/xlog.c:4721 access/transam/xlog.c:4729 -#: access/transam/xlog.c:4736 access/transam/xlog.c:4745 -#: access/transam/xlog.c:4752 +#: access/transam/xlog.c:4803 access/transam/xlog.c:4810 access/transam/xlog.c:4817 access/transam/xlog.c:4824 access/transam/xlog.c:4831 access/transam/xlog.c:4838 access/transam/xlog.c:4845 access/transam/xlog.c:4853 access/transam/xlog.c:4860 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "再コンパイルもしくは initdb が必要そうです。" -#: access/transam/xlog.c:4683 +#: access/transam/xlog.c:4807 #, c-format msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." msgstr "データベースクラスタは RELSEG_SIZE %d で初期化されましたが、サーバは RELSEG_SIZE %d でコンパイルされています。" -#: access/transam/xlog.c:4690 +#: access/transam/xlog.c:4814 #, c-format msgid "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was compiled with XLOG_BLCKSZ %d." msgstr "データベースクラスタは XLOG_BLCKSZ %d で初期化されましたが、サーバは XLOG_BLCKSZ %d でコンパイルされています。" -#: access/transam/xlog.c:4697 +#: access/transam/xlog.c:4821 #, c-format msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." msgstr "データベースクラスタは NAMEDATALEN %d で初期化されましたが、サーバは NAMEDATALEN %d でコンパイルされています。" -#: access/transam/xlog.c:4704 +#: access/transam/xlog.c:4828 #, c-format msgid "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server was compiled with INDEX_MAX_KEYS %d." msgstr "データベースクラスタは INDEX_MAX_KEYS %d で初期化されましたが、サーバは INDEX_MAX_KEYS %d でコンパイルされています。" -#: access/transam/xlog.c:4711 +#: access/transam/xlog.c:4835 #, c-format msgid "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the server was compiled with TOAST_MAX_CHUNK_SIZE %d." msgstr "データベースクラスタは TOAST_MAX_CHUNK_SIZE %d で初期化されましたが、サーバは TOAST_MAX_CHUNK_SIZE %d でコンパイルされています。" -#: access/transam/xlog.c:4718 +#: access/transam/xlog.c:4842 #, c-format msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." msgstr "データベースクラスタは LOBLKSIZE %d で初期化されましたが、サーバは LOBLKSIZE %d でコンパイルされています。" -#: access/transam/xlog.c:4727 -#, c-format -msgid "The database cluster was initialized without USE_FLOAT4_BYVAL but the server was compiled with USE_FLOAT4_BYVAL." -msgstr "データベースクラスタは USE_FLOAT4_BYVAL なしで初期化されましたが、サーバ側は USE_FLOAT4_BYVAL 付きでコンパイルされています。" - -#: access/transam/xlog.c:4734 -#, c-format -msgid "The database cluster was initialized with USE_FLOAT4_BYVAL but the server was compiled without USE_FLOAT4_BYVAL." -msgstr "データベースクラスタは USE_FLOAT4_BYVAL 付きで初期化されましたが、サーバ側は USE_FLOAT4_BYVAL なしでコンパイルされています。" - -#: access/transam/xlog.c:4743 +#: access/transam/xlog.c:4851 #, c-format msgid "The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL." msgstr "データベースクラスタは USE_FLOAT8_BYVAL なしで初期化されましたが、サーバ側は USE_FLOAT8_BYVAL 付きでコンパイルされています。" -#: access/transam/xlog.c:4750 +#: access/transam/xlog.c:4858 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "データベースクラスタは USE_FLOAT8_BYVAL 付きで初期化されましたが、サーバ側は USE_FLOAT8_BYVAL なしでコンパイルされています。" -#: access/transam/xlog.c:4759 +#: access/transam/xlog.c:4867 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "WALセグメントのサイズ指定は1MBと1GBの間の2の累乗でなければなりません、しかしコントロールファイルでは%dバイトとなっています" msgstr[1] "WALセグメントのサイズ指定は1MBと1GBの間の2の累乗でなければなりません、しかしコントロールファイルでは%dバイトとなっています" -#: access/transam/xlog.c:4771 +#: access/transam/xlog.c:4879 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "\"min_wal_size\"は最低でも\"wal_segment_size\"の2倍である必要があります。" -#: access/transam/xlog.c:4775 +#: access/transam/xlog.c:4883 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "\"max_wal_size\"は最低でも\"wal_segment_size\"の2倍である必要があります。" -#: access/transam/xlog.c:5127 -#, c-format -msgid "could not generate secret authorization token" -msgstr "秘密の認証トークンを生成できませんでした" - -#: access/transam/xlog.c:5217 +#: access/transam/xlog.c:5316 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "ブートストラップの先行書き込みログファイルに書き込めませんでした: %m" -#: access/transam/xlog.c:5225 +#: access/transam/xlog.c:5324 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "ブートストラップの先行書き込みログファイルをfsyncできませんでした: %m" -#: access/transam/xlog.c:5231 +#: access/transam/xlog.c:5330 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "ブートストラップの先行書き込みログファイルをクローズできませんでした: %m" -#: access/transam/xlog.c:5310 +#: access/transam/xlog.c:5391 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "リカバリコマンドファイル \"%s\"の使用はサポートされません" -#: access/transam/xlog.c:5375 +#: access/transam/xlog.c:5456 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "スタンバイモードはシングルユーザサーバではサポートされません" -#: access/transam/xlog.c:5392 +#: access/transam/xlog.c:5473 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "primary_conninfo と restore_command のどちらも指定されていません" -#: access/transam/xlog.c:5393 +#: access/transam/xlog.c:5474 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "データベースサーバはpg_walサブディレクトリに置かれたファイルを定期的に確認します。" -#: access/transam/xlog.c:5401 +#: access/transam/xlog.c:5482 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "スタンバイモードを有効にしない場合は、restore_command の指定が必要です" -#: access/transam/xlog.c:5439 +#: access/transam/xlog.c:5520 #, c-format msgid "recovery target timeline %u does not exist" msgstr "リカバリ目標タイムライン%uが存在しません" -#: access/transam/xlog.c:5554 +#: access/transam/xlog.c:5642 #, c-format msgid "archive recovery complete" msgstr "アーカイブリカバリが完了しました" -#: access/transam/xlog.c:5620 access/transam/xlog.c:5893 +#: access/transam/xlog.c:5708 access/transam/xlog.c:5981 #, c-format msgid "recovery stopping after reaching consistency" msgstr "リカバリ処理は一貫性確保後に停止します" -#: access/transam/xlog.c:5641 +#: access/transam/xlog.c:5729 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "リカバリ処理はWAL位置(LSN)\"%X/%X\"の前で停止します" -#: access/transam/xlog.c:5727 +#: access/transam/xlog.c:5815 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのコミット、時刻%sの前に停止します" -#: access/transam/xlog.c:5734 +#: access/transam/xlog.c:5822 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのアボート、時刻%sの前に停止します" -#: access/transam/xlog.c:5787 +#: access/transam/xlog.c:5875 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "リカバリ処理は復元ポイント\"%s\"、時刻%s に停止します" -#: access/transam/xlog.c:5805 +#: access/transam/xlog.c:5893 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "リカバリ処理はWAL位置(LSN)\"%X/%X\"の後で停止します" -#: access/transam/xlog.c:5873 +#: access/transam/xlog.c:5961 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのコミット、時刻%sの後に停止します" -#: access/transam/xlog.c:5881 +#: access/transam/xlog.c:5969 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのアボート、時刻%sの後に停止します" -#: access/transam/xlog.c:5921 +#: access/transam/xlog.c:6018 +#, c-format +msgid "pausing at the end of recovery" +msgstr "リカバリ完了位置で一時停止しています" + +#: access/transam/xlog.c:6019 +#, c-format +msgid "Execute pg_wal_replay_resume() to promote." +msgstr "再開するには pg_wal_replay_resume() を実行してください" + +#: access/transam/xlog.c:6022 #, c-format msgid "recovery has paused" msgstr "リカバリは一時停止中です" -#: access/transam/xlog.c:5922 +#: access/transam/xlog.c:6023 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "再開するには pg_xlog_replay_resume() を実行してください" -#: access/transam/xlog.c:6134 +#: access/transam/xlog.c:6240 #, c-format -msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" -msgstr "%s = %d がマスターサーバの設定値(%d)より小さいので、ホットスタンバイは利用できません" +msgid "hot standby is not possible because %s = %d is a lower setting than on the primary server (its value was %d)" +msgstr "%s = %d はプライマリサーバの設定値より小さいため、ホットスタンバイは利用できません (もとの値は%d)" -#: access/transam/xlog.c:6160 +#: access/transam/xlog.c:6264 #, c-format msgid "WAL was generated with wal_level=minimal, data may be missing" msgstr "wal_level=minimal でWALが生成されました。データが失われる可能性があります" -#: access/transam/xlog.c:6161 +#: access/transam/xlog.c:6265 #, c-format msgid "This happens if you temporarily set wal_level=minimal without taking a new base backup." msgstr "これは新しいベースバックアップを取らずに、一時的に wal_level=minimal にした場合に起こります。" -#: access/transam/xlog.c:6172 +#: access/transam/xlog.c:6276 #, c-format -msgid "hot standby is not possible because wal_level was not set to \"replica\" or higher on the master server" -msgstr "マスターサーバでwal_levelが\"replica\"に設定されていないため、ホットスタンバイを使用できません" +msgid "hot standby is not possible because wal_level was not set to \"replica\" or higher on the primary server" +msgstr "プライマリサーバでwal_levelが\"replica\"またはそれ以上に設定されていないため、ホットスタンバイを使用できません" -#: access/transam/xlog.c:6173 +#: access/transam/xlog.c:6277 #, c-format -msgid "Either set wal_level to \"replica\" on the master, or turn off hot_standby here." -msgstr "マスターでwal_levelを\"replica\"にするか、またはここでhot_standbyを無効にしてください。" +msgid "Either set wal_level to \"replica\" on the primary, or turn off hot_standby here." +msgstr "プライマリでwal_levelを\"replica\"にするか、またはここでhot_standbyを無効にしてください。" -#: access/transam/xlog.c:6237 +#: access/transam/xlog.c:6339 #, c-format -msgid "control file contains invalid data" -msgstr "制御ファイル内に不正なデータがあります" +msgid "control file contains invalid checkpoint location" +msgstr "制御ファイル内のチェックポイント位置が不正です" -#: access/transam/xlog.c:6243 +#: access/transam/xlog.c:6350 #, c-format msgid "database system was shut down at %s" msgstr "データベースシステムは %s にシャットダウンしました" -#: access/transam/xlog.c:6248 +#: access/transam/xlog.c:6356 #, c-format msgid "database system was shut down in recovery at %s" msgstr "データベースシステムはリカバリ中 %s にシャットダウンしました" -#: access/transam/xlog.c:6252 +#: access/transam/xlog.c:6362 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "データベースシステムはシャットダウン中に中断されました; %s まで動作していたことは確認できます" -#: access/transam/xlog.c:6256 +#: access/transam/xlog.c:6368 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "データベースシステムはリカバリ中 %s に中断されました" -#: access/transam/xlog.c:6258 +#: access/transam/xlog.c:6370 #, c-format msgid "This probably means that some data is corrupted and you will have to use the last backup for recovery." msgstr "これはおそらくデータ破損があり、リカバリのために直前のバックアップを使用しなければならないことを意味します。" -#: access/transam/xlog.c:6262 +#: access/transam/xlog.c:6376 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "データベースシステムはリカバリ中ログ時刻 %s に中断されました" -#: access/transam/xlog.c:6264 +#: access/transam/xlog.c:6378 #, c-format msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." msgstr "これが1回以上起きた場合はデータが破損している可能性があるため、より以前のリカバリ目標を選ぶ必要があるかもしれません。" -#: access/transam/xlog.c:6268 +#: access/transam/xlog.c:6384 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "データベースシステムは中断されました: %s まで動作していたことは確認できます" -#: access/transam/xlog.c:6324 +#: access/transam/xlog.c:6390 +#, c-format +msgid "control file contains invalid database cluster state" +msgstr "制御ファイル内のデータベース・クラスタ状態が不正です" + +#: access/transam/xlog.c:6447 #, c-format msgid "entering standby mode" msgstr "スタンバイモードに入ります" -#: access/transam/xlog.c:6327 +#: access/transam/xlog.c:6450 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "XID%uまでのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6331 +#: access/transam/xlog.c:6454 #, c-format msgid "starting point-in-time recovery to %s" msgstr "%sまでのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6335 +#: access/transam/xlog.c:6458 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "\"%s\"までのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6339 +#: access/transam/xlog.c:6462 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "WAL位置(LSN) \"%X/%X\"までのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6344 +#: access/transam/xlog.c:6467 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "最も古い一貫性確保点までのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6347 +#: access/transam/xlog.c:6470 #, c-format msgid "starting archive recovery" msgstr "アーカイブリカバリを開始しています" -#: access/transam/xlog.c:6401 access/transam/xlog.c:6533 +#: access/transam/xlog.c:6529 access/transam/xlog.c:6662 #, c-format msgid "checkpoint record is at %X/%X" msgstr "チェックポイントレコードは%X/%Xにあります" -#: access/transam/xlog.c:6415 +#: access/transam/xlog.c:6544 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "チェックポイントレコードが参照している redo 位置を見つけられませんでした" -#: access/transam/xlog.c:6416 access/transam/xlog.c:6426 +#: access/transam/xlog.c:6545 access/transam/xlog.c:6555 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2276,481 +2246,483 @@ msgstr "" "バックアップからの復旧でなければ、\"%s/backup_label\"の削除を試みてください。.\n" "バックアップから復旧で\"%s/backup_label\"を削除すると、クラスタは壊れた状態で復旧されることに注意してください。" -#: access/transam/xlog.c:6425 +#: access/transam/xlog.c:6554 #, c-format msgid "could not locate required checkpoint record" msgstr "必要なチェックポイントが見つかりませんでした" -#: access/transam/xlog.c:6454 commands/tablespace.c:655 +#: access/transam/xlog.c:6583 commands/tablespace.c:654 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を作成できませんでした: %m" -#: access/transam/xlog.c:6486 access/transam/xlog.c:6492 +#: access/transam/xlog.c:6615 access/transam/xlog.c:6621 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ファイル\"%2$s\"が存在しないためファイル\"%1$s\"を無視します" -#: access/transam/xlog.c:6488 access/transam/xlog.c:11487 +#: access/transam/xlog.c:6617 access/transam/xlog.c:11817 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "ファイル\"%s\"は\"%s\"にリネームされました。" -#: access/transam/xlog.c:6494 +#: access/transam/xlog.c:6623 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m。" -#: access/transam/xlog.c:6545 +#: access/transam/xlog.c:6674 #, c-format msgid "could not locate a valid checkpoint record" msgstr "有効なチェックポイントが見つかりませんでした" -#: access/transam/xlog.c:6583 +#: access/transam/xlog.c:6712 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "要求されたタイムライン%uはこのサーバの履歴からの子孫ではありません" -#: access/transam/xlog.c:6585 +#: access/transam/xlog.c:6714 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "タイムライン%3$uの最終チェックポイントは%1$X/%2$Xですが、要求されたタイムラインの履歴の中ではサーバはそのタイムラインから%4$X/%5$Xで分岐しています。" -#: access/transam/xlog.c:6601 +#: access/transam/xlog.c:6730 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "要求されたタイムライン%1$uはタイムライン%4$uの最小リカバリポイント%2$X/%3$Xを含みません" -#: access/transam/xlog.c:6632 +#: access/transam/xlog.c:6761 #, c-format msgid "invalid next transaction ID" msgstr "次のトランザクションIDが不正です" -#: access/transam/xlog.c:6726 +#: access/transam/xlog.c:6855 #, c-format msgid "invalid redo in checkpoint record" msgstr "チェックポイントレコード内の不正なREDO" -#: access/transam/xlog.c:6737 +#: access/transam/xlog.c:6866 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "シャットダウン・チェックポイントにおける不正なREDOレコード" -#: access/transam/xlog.c:6765 +#: access/transam/xlog.c:6900 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "データベースシステムは正しくシャットダウンされていません; 自動リカバリを実行中" -#: access/transam/xlog.c:6769 +#: access/transam/xlog.c:6904 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "タイムライン%uから、タイムライン%uを目標としてクラッシュリカバリを開始します" -#: access/transam/xlog.c:6812 +#: access/transam/xlog.c:6951 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_labelに制御ファイルと整合しないデータが含まれます" -#: access/transam/xlog.c:6813 +#: access/transam/xlog.c:6952 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "これはバックアップが破損しており、リカバリには他のバックアップを使用しなければならないことを意味します。" -#: access/transam/xlog.c:6904 +#: access/transam/xlog.c:7043 #, c-format msgid "initializing for hot standby" msgstr "ホットスタンバイのための初期化を行っています" -#: access/transam/xlog.c:7036 +#: access/transam/xlog.c:7176 #, c-format msgid "redo starts at %X/%X" msgstr "REDOを%X/%Xから開始します" -#: access/transam/xlog.c:7260 +#: access/transam/xlog.c:7400 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "要求されたリカバリ停止ポイントは、一貫性があるリカバリポイントより前にあります" -#: access/transam/xlog.c:7298 +#: access/transam/xlog.c:7438 #, c-format msgid "redo done at %X/%X" msgstr "REDOが%X/%Xで終了しました" -#: access/transam/xlog.c:7303 +#: access/transam/xlog.c:7443 #, c-format msgid "last completed transaction was at log time %s" msgstr "最後に完了したトランザクションのログ時刻は%sでした" -#: access/transam/xlog.c:7312 +#: access/transam/xlog.c:7452 #, c-format msgid "redo is not required" msgstr "REDOは必要ありません" -#: access/transam/xlog.c:7387 access/transam/xlog.c:7391 +#: access/transam/xlog.c:7464 +#, c-format +msgid "recovery ended before configured recovery target was reached" +msgstr "指定したリカバリターゲットに到達する前にリカバリが終了しました" + +#: access/transam/xlog.c:7543 access/transam/xlog.c:7547 #, c-format msgid "WAL ends before end of online backup" msgstr "オンラインバックアップの終了より前にWALが終了しました" -#: access/transam/xlog.c:7388 +#: access/transam/xlog.c:7544 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "オンラインバックアップ中に生成されたすべてのWALがリカバリで利用可能である必要があります。" -#: access/transam/xlog.c:7392 +#: access/transam/xlog.c:7548 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "pg_start_backup() を使ったオンラインバックアップは pg_stop_backup() で終了なければならず、かつその時点までのすべてのWALはリカバリで利用可能である必要があります" -#: access/transam/xlog.c:7395 +#: access/transam/xlog.c:7551 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WALが一貫性があるリカバリポイントより前で終了しました" -#: access/transam/xlog.c:7430 +#: access/transam/xlog.c:7586 #, c-format msgid "selected new timeline ID: %u" msgstr "新しいタイムラインIDを選択: %u" -#: access/transam/xlog.c:7878 +#: access/transam/xlog.c:8034 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "%X/%X でリカバリの一貫性が確保されました" -#: access/transam/xlog.c:8070 +#: access/transam/xlog.c:8244 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "制御ファイル内の最初のチェックポイントへのリンクが不正です" -#: access/transam/xlog.c:8074 +#: access/transam/xlog.c:8248 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "backup_labelファイル内のチェックポイントへのリンクが不正です" -#: access/transam/xlog.c:8091 +#: access/transam/xlog.c:8266 #, c-format msgid "invalid primary checkpoint record" msgstr "最初のチェックポイントレコードが不正です" -#: access/transam/xlog.c:8095 +#: access/transam/xlog.c:8270 #, c-format msgid "invalid checkpoint record" msgstr "チェックポイントレコードが不正です" -#: access/transam/xlog.c:8106 +#: access/transam/xlog.c:8281 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "プライマリチェックポイントレコード内のリソースマネージャIDが不正です" -#: access/transam/xlog.c:8110 +#: access/transam/xlog.c:8285 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "チェックポイントレコード内のリソースマネージャIDがで不正です" -#: access/transam/xlog.c:8123 +#: access/transam/xlog.c:8298 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "最初のチェックポイントレコード内のxl_infoが不正です" -#: access/transam/xlog.c:8127 +#: access/transam/xlog.c:8302 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "チェックポイントレコード内のxl_infoが不正です" -#: access/transam/xlog.c:8138 +#: access/transam/xlog.c:8313 #, c-format msgid "invalid length of primary checkpoint record" msgstr "最初のチェックポイントレコード長が不正です" -#: access/transam/xlog.c:8142 +#: access/transam/xlog.c:8317 #, c-format msgid "invalid length of checkpoint record" msgstr "チェックポイントレコード長が不正です" -#: access/transam/xlog.c:8322 +#: access/transam/xlog.c:8498 #, c-format msgid "shutting down" msgstr "シャットダウンしています" -#: access/transam/xlog.c:8642 +#: access/transam/xlog.c:8818 #, c-format msgid "checkpoint skipped because system is idle" msgstr "システムがアイドル状態なためチェックポイントがスキップされました" -#: access/transam/xlog.c:8842 +#: access/transam/xlog.c:9018 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "データベースのシャットダウンに並行して、先行書き込みログが発生しました" -#: access/transam/xlog.c:9098 +#: access/transam/xlog.c:9275 #, c-format msgid "skipping restartpoint, recovery has already ended" msgstr "再開ポイントをスキップします、リカバリはすでに終わっています" -#: access/transam/xlog.c:9121 +#: access/transam/xlog.c:9298 #, c-format msgid "skipping restartpoint, already performed at %X/%X" msgstr "%X/%X ですでに実行済みの再開ポイントをスキップします" -#: access/transam/xlog.c:9288 +#: access/transam/xlog.c:9466 #, c-format msgid "recovery restart point at %X/%X" msgstr "リカバリ再開ポイントは%X/%Xです" -#: access/transam/xlog.c:9290 +#: access/transam/xlog.c:9468 #, c-format msgid "Last completed transaction was at log time %s." msgstr "最後に完了したトランザクションはログ時刻 %s のものです" -#: access/transam/xlog.c:9424 +#: access/transam/xlog.c:9710 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "復帰ポイント\"%s\"が%X/%Xに作成されました" -#: access/transam/xlog.c:9565 +#: access/transam/xlog.c:9855 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "チェックポイントレコードにおいて想定外の前回のタイムラインID %u(現在のタイムラインIDは%u)がありました" -#: access/transam/xlog.c:9574 +#: access/transam/xlog.c:9864 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "チェックポイントレコードにおいて想定外のタイムラインID %u (%uの後)がありました" -#: access/transam/xlog.c:9590 +#: access/transam/xlog.c:9880 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "タイムライン%4$uの最小リカバリポイント%2$X/%3$Xに達する前のチェックポイントレコード内の想定外のタイムラインID%1$u。" -#: access/transam/xlog.c:9666 +#: access/transam/xlog.c:9956 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "オンラインバックアップはキャンセルされ、リカバリを継続できません" -#: access/transam/xlog.c:9720 access/transam/xlog.c:9774 -#: access/transam/xlog.c:9797 +#: access/transam/xlog.c:10012 access/transam/xlog.c:10068 access/transam/xlog.c:10091 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "チェックポイントレコードにおいて想定外のタイムラインID %u(%uのはず)がありました" -#: access/transam/xlog.c:10117 +#: access/transam/xlog.c:10417 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "ライトスルーファイル\"%s\"をfsyncできませんでした: %m" -#: access/transam/xlog.c:10126 +#: access/transam/xlog.c:10423 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "ファイル\"%s\"をfdatasyncできませんでした: %m" -#: access/transam/xlog.c:10219 access/transam/xlog.c:10748 -#: access/transam/xlogfuncs.c:290 access/transam/xlogfuncs.c:317 -#: access/transam/xlogfuncs.c:356 access/transam/xlogfuncs.c:377 -#: access/transam/xlogfuncs.c:398 +#: access/transam/xlog.c:10521 access/transam/xlog.c:11050 access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 access/transam/xlogfuncs.c:383 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "リカバリ中はWAL制御関数は実行できません。" -#: access/transam/xlog.c:10228 access/transam/xlog.c:10757 +#: access/transam/xlog.c:10530 access/transam/xlog.c:11059 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "オンラインバックアップを行うにはWALレベルが不十分です" -#: access/transam/xlog.c:10229 access/transam/xlog.c:10758 -#: access/transam/xlogfuncs.c:323 +#: access/transam/xlog.c:10531 access/transam/xlog.c:11060 access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "サーバの開始時にwal_levelを\"replica\"または \"logical\"にセットする必要があります。" -#: access/transam/xlog.c:10234 +#: access/transam/xlog.c:10536 #, c-format msgid "backup label too long (max %d bytes)" msgstr "バックアップラベルが長すぎます (最大%dバイト)" -#: access/transam/xlog.c:10271 access/transam/xlog.c:10547 -#: access/transam/xlog.c:10585 +#: access/transam/xlog.c:10573 access/transam/xlog.c:10849 access/transam/xlog.c:10887 #, c-format msgid "a backup is already in progress" msgstr "すでにバックアップが進行中です" -#: access/transam/xlog.c:10272 +#: access/transam/xlog.c:10574 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "pg_stop_backup()を実行後に再試行してください" -#: access/transam/xlog.c:10368 +#: access/transam/xlog.c:10670 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "full_page_writes=off で生成されたWALは最終リスタートポイントから再生されます" -#: access/transam/xlog.c:10370 access/transam/xlog.c:10953 +#: access/transam/xlog.c:10672 access/transam/xlog.c:11255 #, c-format -msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the master, and then try an online backup again." -msgstr "つまりスタンバイで取得されたバックアップが破損しているため使用してはいけません。マスタでfull_page_writesを有効にしCHECKPOINTを実行したのち、再度オンラインバックアップを試行してください。" +msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the primary, and then try an online backup again." +msgstr "つまりこのスタンバイで取得されたバックアップは破損しており、使用すべきではありません。プライマリでfull_page_writesを有効にしCHECKPOINTを実行したのち、再度オンラインバックアップを試行してください。" -#: access/transam/xlog.c:10445 replication/basebackup.c:1251 -#: utils/adt/misc.c:329 +#: access/transam/xlog.c:10747 replication/basebackup.c:1418 utils/adt/misc.c:342 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "シンボリックリンク\"%s\"の参照先が長すぎます" -#: access/transam/xlog.c:10497 commands/tablespace.c:403 -#: commands/tablespace.c:567 replication/basebackup.c:1266 utils/adt/misc.c:337 +#: access/transam/xlog.c:10799 commands/tablespace.c:402 commands/tablespace.c:566 replication/basebackup.c:1433 utils/adt/misc.c:350 #, c-format msgid "tablespaces are not supported on this platform" msgstr "このプラットフォームではテーブル空間はサポートしていません" -#: access/transam/xlog.c:10548 access/transam/xlog.c:10586 +#: access/transam/xlog.c:10850 access/transam/xlog.c:10888 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "バックアップが進行中でないことが確かであれば、ファイル\"%s\"を削除し再実行してください。" -#: access/transam/xlog.c:10773 +#: access/transam/xlog.c:11075 #, c-format msgid "exclusive backup not in progress" msgstr "排他バックアップは進行中ではありません" -#: access/transam/xlog.c:10800 +#: access/transam/xlog.c:11102 #, c-format msgid "a backup is not in progress" msgstr "バックアップが進行中ではありません" -#: access/transam/xlog.c:10886 access/transam/xlog.c:10899 -#: access/transam/xlog.c:11260 access/transam/xlog.c:11266 -#: access/transam/xlog.c:11314 access/transam/xlog.c:11387 -#: access/transam/xlogfuncs.c:693 +#: access/transam/xlog.c:11188 access/transam/xlog.c:11201 access/transam/xlog.c:11590 access/transam/xlog.c:11596 access/transam/xlog.c:11644 access/transam/xlog.c:11717 access/transam/xlogfuncs.c:692 #, c-format msgid "invalid data in file \"%s\"" msgstr "ファイル\"%s\"内の不正なデータ" -#: access/transam/xlog.c:10903 replication/basebackup.c:1103 +#: access/transam/xlog.c:11205 replication/basebackup.c:1266 #, c-format msgid "the standby was promoted during online backup" msgstr "オンラインバックアップ中にスタンバイが昇格しました" -#: access/transam/xlog.c:10904 replication/basebackup.c:1104 +#: access/transam/xlog.c:11206 replication/basebackup.c:1267 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "つまり取得中のバックアップは破損しているため使用してはいけません。再度オンラインバックアップを取得してください。" -#: access/transam/xlog.c:10951 +#: access/transam/xlog.c:11253 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "full_page_writes=offで生成されたWALはオンラインバックアップ中に再生されます" -#: access/transam/xlog.c:11071 +#: access/transam/xlog.c:11373 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "ベースバックアップ完了、必要な WAL セグメントがアーカイブされるのを待っています" -#: access/transam/xlog.c:11081 +#: access/transam/xlog.c:11385 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "まだ必要なすべての WAL セグメントがアーカイブされるのを待っています(%d 秒経過)" -#: access/transam/xlog.c:11083 +#: access/transam/xlog.c:11387 #, c-format msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." msgstr "archive_commandが適切に実行されていることを確認してください。バックアップ処理は安全に取り消すことができますが、全てのWALセグメントがそろわなければこのバックアップは利用できません。" -#: access/transam/xlog.c:11090 +#: access/transam/xlog.c:11394 #, c-format msgid "all required WAL segments have been archived" msgstr "必要なすべての WAL セグメントがアーカイブされました" -#: access/transam/xlog.c:11094 +#: access/transam/xlog.c:11398 #, c-format msgid "WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup" msgstr "WAL アーカイブが有効になっていません。バックアップを完了させるには、すべての必要なWALセグメントが他の方法でコピーされたことを確認してください。" -#: access/transam/xlog.c:11297 +#: access/transam/xlog.c:11451 +#, c-format +msgid "aborting backup due to backend exiting before pg_stop_backup was called" +msgstr "バックエンドが pg_stop_backup の呼び出し前に終了したため、バックアップは異常終了しました" + +#: access/transam/xlog.c:11627 #, c-format msgid "backup time %s in file \"%s\"" msgstr "ファイル\"%2$s\"内のバックアップ時刻は %1$s" -#: access/transam/xlog.c:11302 +#: access/transam/xlog.c:11632 #, c-format msgid "backup label %s in file \"%s\"" msgstr "ファイル\"%2$s\"内のバックアップラベルは %1$s" -#: access/transam/xlog.c:11315 -#, fuzzy, c-format -#| msgid "Timeline ID parsed is %u, but expected %u" +#: access/transam/xlog.c:11645 +#, c-format msgid "Timeline ID parsed is %u, but expected %u." -msgstr "読み取られたタイムラインIDは%uでしたが、%uであるはずです" +msgstr "読み取られたタイムラインIDは%uでしたが、%uであるはずです。" -#: access/transam/xlog.c:11319 +#: access/transam/xlog.c:11649 #, c-format msgid "backup timeline %u in file \"%s\"" msgstr "ファイル\"%2$s\"内のバックアップタイムラインは %1$u" #. translator: %s is a WAL record description -#: access/transam/xlog.c:11427 +#: access/transam/xlog.c:11757 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "%X/%Xにある%sのWAL再生" -#: access/transam/xlog.c:11476 +#: access/transam/xlog.c:11806 #, c-format msgid "online backup mode was not canceled" msgstr "オンラインバックアップモードはキャンセルされていません" -#: access/transam/xlog.c:11477 +#: access/transam/xlog.c:11807 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m。" -#: access/transam/xlog.c:11486 access/transam/xlog.c:11498 -#: access/transam/xlog.c:11508 +#: access/transam/xlog.c:11816 access/transam/xlog.c:11828 access/transam/xlog.c:11838 #, c-format msgid "online backup mode canceled" msgstr "オンラインバックアップモードがキャンセルされました" -#: access/transam/xlog.c:11499 +#: access/transam/xlog.c:11829 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "ファイル\"%s\"、\"%s\"の名前はそれぞれ\"%s\"、\"%s\"へと変更されました。" -#: access/transam/xlog.c:11509 +#: access/transam/xlog.c:11839 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "ファイル\"%s\"の名前は\"%s\"に変更できましたが、\"%s\"の名前は\"%s\"に変更できませんでした: %m" -#: access/transam/xlog.c:11642 +#: access/transam/xlog.c:11972 access/transam/xlogutils.c:970 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "ログセグメント%s、オフセット%uを読み取れませんでした: %m" -#: access/transam/xlog.c:11648 replication/walsender.c:2489 +#: access/transam/xlog.c:11978 access/transam/xlogutils.c:977 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "ログセグメント%1$s、オフセット%2$uを読み取れませんでした: %4$zu 中 %3$d の読み取り" -#: access/transam/xlog.c:12193 +#: access/transam/xlog.c:12507 +#, c-format +msgid "wal receiver process shutdown requested" +msgstr "wal receiverプロセスのシャットダウンが要求されました" + +#: access/transam/xlog.c:12594 #, c-format msgid "received promote request" msgstr "昇格要求を受信しました" -#: access/transam/xlog.c:12206 +#: access/transam/xlog.c:12607 #, c-format msgid "promote trigger file found: %s" msgstr "昇格トリガファイルがあります: %s" -#: access/transam/xlog.c:12215 +#: access/transam/xlog.c:12615 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "昇格トリガファイル\"%s\"のstatに失敗しました: %m" -#: access/transam/xlogarchive.c:250 +#: access/transam/xlogarchive.c:205 #, c-format msgid "archive file \"%s\" has wrong size: %lu instead of %lu" msgstr "アーカイブファイル\"%s\"のサイズが不正です: %lu、正しくは%lu" -#: access/transam/xlogarchive.c:259 +#: access/transam/xlogarchive.c:214 #, c-format msgid "restored log file \"%s\" from archive" msgstr "ログファイル\"%s\"をアーカイブからリストアしました" -#: access/transam/xlogarchive.c:304 +#: access/transam/xlogarchive.c:259 #, c-format msgid "could not restore file \"%s\" from archive: %s" msgstr "ファイル\"%s\"をアーカイブからリストアできませんでした: %s" @@ -2758,285 +2730,259 @@ msgstr "ファイル\"%s\"をアーカイブからリストアできませんで #. translator: First %s represents a postgresql.conf parameter name like #. "recovery_end_command", the 2nd is the value of that parameter, the #. third an already translated error message. -#: access/transam/xlogarchive.c:413 +#: access/transam/xlogarchive.c:368 #, c-format msgid "%s \"%s\": %s" msgstr "%s \"%s\": %s" -#: access/transam/xlogarchive.c:523 access/transam/xlogarchive.c:587 +#: access/transam/xlogarchive.c:478 access/transam/xlogarchive.c:542 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "アーカイブステータスファイル\"%s\"を作成できませんでした: %m" -#: access/transam/xlogarchive.c:531 access/transam/xlogarchive.c:595 +#: access/transam/xlogarchive.c:486 access/transam/xlogarchive.c:550 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "アーカイブステータスファイル\"%s\"に書き込めませんでした: %m" -#: access/transam/xlogfuncs.c:57 -#, c-format -msgid "aborting backup due to backend exiting before pg_stop_backup was called" -msgstr "バックエンドが pg_stop_backup の呼び出し前に終了したため、バックアップは異常終了しました" - -#: access/transam/xlogfuncs.c:87 +#: access/transam/xlogfuncs.c:74 #, c-format msgid "a backup is already in progress in this session" msgstr "このセッションではすでにバックアップが進行中です" -#: access/transam/xlogfuncs.c:145 access/transam/xlogfuncs.c:227 +#: access/transam/xlogfuncs.c:132 access/transam/xlogfuncs.c:213 #, c-format msgid "non-exclusive backup in progress" msgstr "非排他バックアップが進行中です" -#: access/transam/xlogfuncs.c:146 access/transam/xlogfuncs.c:228 +#: access/transam/xlogfuncs.c:133 access/transam/xlogfuncs.c:214 #, c-format msgid "Did you mean to use pg_stop_backup('f')?" msgstr "pg_stop_backup('f') を実行しようとしていたのではないですか?" -#: access/transam/xlogfuncs.c:198 commands/event_trigger.c:1472 -#: commands/event_trigger.c:2024 commands/extension.c:1908 -#: commands/extension.c:2017 commands/extension.c:2241 commands/prepare.c:712 -#: executor/execExpr.c:2201 executor/execSRF.c:720 executor/functions.c:1023 -#: foreign/foreign.c:520 libpq/hba.c:2666 replication/logical/launcher.c:1112 -#: replication/logical/logicalfuncs.c:176 replication/logical/origin.c:1487 -#: replication/slotfuncs.c:236 replication/walsender.c:3235 -#: utils/adt/jsonfuncs.c:1700 utils/adt/jsonfuncs.c:1831 -#: utils/adt/jsonfuncs.c:2019 utils/adt/jsonfuncs.c:2146 -#: utils/adt/jsonfuncs.c:3608 utils/adt/pgstatfuncs.c:458 -#: utils/adt/pgstatfuncs.c:563 utils/fmgr/funcapi.c:63 utils/misc/guc.c:9443 -#: utils/mmgr/portalmem.c:1134 +#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 commands/event_trigger.c:1863 commands/extension.c:1944 commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:713 executor/execExpr.c:2203 executor/execSRF.c:728 executor/functions.c:1046 foreign/foreign.c:520 libpq/hba.c:2668 replication/logical/launcher.c:1090 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1481 replication/slotfuncs.c:252 +#: replication/walsender.c:3258 storage/ipc/shmem.c:550 utils/adt/datetime.c:4766 utils/adt/genfile.c:505 utils/adt/genfile.c:588 utils/adt/jsonfuncs.c:1792 utils/adt/jsonfuncs.c:1904 utils/adt/jsonfuncs.c:2092 utils/adt/jsonfuncs.c:2201 utils/adt/jsonfuncs.c:3663 utils/adt/misc.c:215 utils/adt/pgstatfuncs.c:476 utils/adt/pgstatfuncs.c:584 utils/adt/pgstatfuncs.c:1719 utils/fmgr/funcapi.c:72 utils/misc/guc.c:9666 utils/mmgr/mcxt.c:1333 utils/mmgr/portalmem.c:1136 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "このコンテキストで集合値の関数は集合を受け付けられません" -#: access/transam/xlogfuncs.c:202 commands/event_trigger.c:1476 -#: commands/event_trigger.c:2028 commands/extension.c:1912 -#: commands/extension.c:2021 commands/extension.c:2245 commands/prepare.c:716 -#: foreign/foreign.c:525 libpq/hba.c:2670 replication/logical/launcher.c:1116 -#: replication/logical/logicalfuncs.c:180 replication/logical/origin.c:1491 -#: replication/slotfuncs.c:240 replication/walsender.c:3239 -#: utils/adt/pgstatfuncs.c:462 utils/adt/pgstatfuncs.c:567 -#: utils/misc/guc.c:9447 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1138 +#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 commands/event_trigger.c:1867 commands/extension.c:1948 commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:717 foreign/foreign.c:525 libpq/hba.c:2672 replication/logical/launcher.c:1094 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1485 replication/slotfuncs.c:256 replication/walsender.c:3262 storage/ipc/shmem.c:554 utils/adt/datetime.c:4770 +#: utils/adt/genfile.c:509 utils/adt/genfile.c:592 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:480 utils/adt/pgstatfuncs.c:588 utils/adt/pgstatfuncs.c:1723 utils/misc/guc.c:9670 utils/misc/pg_config.c:43 utils/mmgr/mcxt.c:1337 utils/mmgr/portalmem.c:1140 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "マテリアライズモードが必要ですが、現在のコンテクストで禁止されています" -#: access/transam/xlogfuncs.c:244 +#: access/transam/xlogfuncs.c:230 #, c-format msgid "non-exclusive backup is not in progress" msgstr "非排他バックアップは進行中ではありません" -#: access/transam/xlogfuncs.c:245 +#: access/transam/xlogfuncs.c:231 #, c-format msgid "Did you mean to use pg_stop_backup('t')?" msgstr "pg_stop_backup('t') を実行しようとしていたのではないですか?" -#: access/transam/xlogfuncs.c:322 +#: access/transam/xlogfuncs.c:307 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "リストアポイントを作るにはWALレベルが不足しています" -#: access/transam/xlogfuncs.c:330 +#: access/transam/xlogfuncs.c:315 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "リストアポイントとしては値が長すぎます(最大%d文字)" -#: access/transam/xlogfuncs.c:468 access/transam/xlogfuncs.c:525 +#: access/transam/xlogfuncs.c:453 access/transam/xlogfuncs.c:510 #, c-format msgid "%s cannot be executed during recovery." msgstr "リカバリ中は %s を実行できません。" -#: access/transam/xlogfuncs.c:546 access/transam/xlogfuncs.c:566 -#: access/transam/xlogfuncs.c:583 access/transam/xlogfuncs.c:723 +#: access/transam/xlogfuncs.c:531 access/transam/xlogfuncs.c:558 access/transam/xlogfuncs.c:582 access/transam/xlogfuncs.c:722 #, c-format msgid "recovery is not in progress" msgstr "リカバリが進行中ではありません" -#: access/transam/xlogfuncs.c:547 access/transam/xlogfuncs.c:567 -#: access/transam/xlogfuncs.c:584 access/transam/xlogfuncs.c:724 +#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:559 access/transam/xlogfuncs.c:583 access/transam/xlogfuncs.c:723 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "リカバリ制御関数リカバリ中にのみを実行可能です。" -#: access/transam/xlogfuncs.c:729 -#, fuzzy, c-format -#| msgid "\"wait_seconds\" cannot be negative or equal zero" +#: access/transam/xlogfuncs.c:537 access/transam/xlogfuncs.c:564 +#, c-format +msgid "standby promotion is ongoing" +msgstr "スタンバイの昇格を実行中です" + +#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:565 +#, c-format +msgid "%s cannot be executed after promotion is triggered." +msgstr "%sは昇格を開始した後には実行できません。" + +#: access/transam/xlogfuncs.c:728 +#, c-format msgid "\"wait_seconds\" must not be negative or zero" -msgstr "\"wait_seconds\"は負の値もしくはゼロにはできません。" +msgstr "\"wait_seconds\"は負の値もしくはゼロにはできません" -#: access/transam/xlogfuncs.c:749 storage/ipc/signalfuncs.c:164 +#: access/transam/xlogfuncs.c:748 storage/ipc/signalfuncs.c:164 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "postmasterにシグナルを送信できませんでした: %m" -#: access/transam/xlogfuncs.c:785 +#: access/transam/xlogfuncs.c:784 #, c-format msgid "server did not promote within %d seconds" msgstr "サーバは%d 秒以内に昇格しませんでした" -#: access/transam/xlogreader.c:299 +#: access/transam/xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "%X/%Xのレコードオフセットが不正です" -#: access/transam/xlogreader.c:307 +#: access/transam/xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "%X/%Xでは継続レコードが必要です" -#: access/transam/xlogreader.c:348 access/transam/xlogreader.c:645 +#: access/transam/xlogreader.c:398 access/transam/xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "%X/%Xのレコード長が不正です:長さは%uである必要がありますが、実際は%uでした" -#: access/transam/xlogreader.c:372 +#: access/transam/xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "%2$X/%3$Xのレコード長%1$uが大きすぎます" -#: access/transam/xlogreader.c:404 +#: access/transam/xlogreader.c:454 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "%X/%Xでcontrecordフラグがありません" -#: access/transam/xlogreader.c:417 +#: access/transam/xlogreader.c:467 #, c-format msgid "invalid contrecord length %u at %X/%X" msgstr "%2$X/%3$Xのcontrecordの長さ %1$u は不正です" -#: access/transam/xlogreader.c:653 +#: access/transam/xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "%2$X/%3$XのリソースマネージャID %1$uは不正です" -#: access/transam/xlogreader.c:667 access/transam/xlogreader.c:684 +#: access/transam/xlogreader.c:717 access/transam/xlogreader.c:734 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "%3$X/%4$Xのレコードの後方リンク%1$X/%2$Xが不正です" -#: access/transam/xlogreader.c:721 +#: access/transam/xlogreader.c:771 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "%X/%Xのレコード内のリソースマネージャデータのチェックサムが不正です" -#: access/transam/xlogreader.c:758 +#: access/transam/xlogreader.c:808 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "ログセグメント%2$s、オフセット%3$uのマジックナンバー%1$04Xは不正です" -#: access/transam/xlogreader.c:772 access/transam/xlogreader.c:823 +#: access/transam/xlogreader.c:822 access/transam/xlogreader.c:863 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "ログセグメント %2$s、オフセット%3$uの情報ビット%1$04Xは不正です" -#: access/transam/xlogreader.c:798 +#: access/transam/xlogreader.c:837 #, c-format -msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" -msgstr "WAL ファイルは異なるデータベースシステム由来のものです: WALファイルのデータベースシステム識別子は %s で、pg_control におけるデータベースシステムの識別子は %s です。" +msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" +msgstr "WALファイルは異なるデータベースシステム由来のものです: WALファイルのデータベースシステム識別子は %lluで、pg_control におけるデータベースシステム識別子は %lluです" -#: access/transam/xlogreader.c:805 +#: access/transam/xlogreader.c:845 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL ファイルは異なるデータベースシステム由来のものです: ページヘッダーのセグメントサイズが正しくありません" -#: access/transam/xlogreader.c:811 +#: access/transam/xlogreader.c:851 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL ファイルは異なるデータベースシステム由来のものです: ページヘッダーのXLOG_BLCKSZが正しくありません" -#: access/transam/xlogreader.c:842 +#: access/transam/xlogreader.c:882 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "ログセグメント%3$s、オフセット%4$uに想定外のページアドレス%1$X/%2$X" -#: access/transam/xlogreader.c:867 +#: access/transam/xlogreader.c:907 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "ログセグメント%3$s、オフセット%4$uのタイムラインID %1$u(%2$uの後)が順序通りではありません" -#: access/transam/xlogreader.c:1112 +#: access/transam/xlogreader.c:1252 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %uが%X/%Xで不正です" -#: access/transam/xlogreader.c:1135 +#: access/transam/xlogreader.c:1275 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATAが設定されていますが、%X/%Xにデータがありません" -#: access/transam/xlogreader.c:1142 +#: access/transam/xlogreader.c:1282 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATAが設定されていませんが、%2$X/%3$Xのデータ長は%1$uです" -#: access/transam/xlogreader.c:1178 +#: access/transam/xlogreader.c:1318 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLEが設定されていますが、%4$X/%5$Xでホールオフセット%1$u、長さ%2$u、ブロックイメージ長%3$uです" -#: access/transam/xlogreader.c:1194 +#: access/transam/xlogreader.c:1334 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLEが設定されていませんが、%3$X/%4$Xにおけるホールオフセット%1$uの長さが%2$uです" -#: access/transam/xlogreader.c:1209 +#: access/transam/xlogreader.c:1349 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSEDが設定されていますが、%2$X/%3$Xにおいてブロックイメージ長が%1$uです" -#: access/transam/xlogreader.c:1224 +#: access/transam/xlogreader.c:1364 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLEもBKPIMAGE_IS_COMPRESSEDも設定されていませんが、%2$X/%3$Xにおいてブロックイメージ長が%1$uです" -#: access/transam/xlogreader.c:1240 +#: access/transam/xlogreader.c:1380 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_RELが設定されていますが、%X/%Xにおいて以前のリレーションがありません" -#: access/transam/xlogreader.c:1252 +#: access/transam/xlogreader.c:1392 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "%2$X/%3$Xにおけるblock_id %1$uが不正です" -#: access/transam/xlogreader.c:1341 +#: access/transam/xlogreader.c:1481 #, c-format msgid "record with invalid length at %X/%X" msgstr "%X/%Xのレコードのサイズが不正です" -#: access/transam/xlogreader.c:1430 +#: access/transam/xlogreader.c:1570 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "%X/%X、ブロック %d での圧縮イメージが不正です" -#: access/transam/xlogutils.c:727 replication/walreceiver.c:959 -#: replication/walsender.c:2462 -#, c-format -msgid "could not seek in log segment %s to offset %u: %m" -msgstr "ログセグメント%sをオフセット%uまでシークできませんでした: %m" - -#: access/transam/xlogutils.c:751 -#, c-format -msgid "could not read from log segment %s, offset %u, length %lu: %m" -msgstr "ログセグメント %sのオフセット %uから長さ %lu で読み込めませんでした: %m" - #: bootstrap/bootstrap.c:271 #, c-format msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X オプションの値は1MBから1GBの間の2の累乗を指定します" -#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:821 tcop/postgres.c:3635 +#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:845 tcop/postgres.c:3705 #, c-format msgid "--%s requires a value" msgstr "--%sには値が必要です" -#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:826 tcop/postgres.c:3640 +#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:850 tcop/postgres.c:3710 #, c-format msgid "-c %s requires a value" msgstr "-c %sは値が必要です" -#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:838 -#: postmaster/postmaster.c:851 +#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:862 postmaster/postmaster.c:875 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細については\"%s --help\"を実行してください。\n" @@ -3046,760 +2992,708 @@ msgstr "詳細については\"%s --help\"を実行してください。\n" msgid "%s: invalid command-line arguments\n" msgstr "%s: コマンドライン引数が不正です\n" -#: catalog/aclchk.c:203 +#: catalog/aclchk.c:181 #, c-format msgid "grant options can only be granted to roles" msgstr "グラントオプションはロールにのみ付与できます" -#: catalog/aclchk.c:326 +#: catalog/aclchk.c:300 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "リレーション\"%2$s\"の列\"%1$s\"に付与された権限はありません" -#: catalog/aclchk.c:331 +#: catalog/aclchk.c:305 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "\"%s\"に付与された権限はありません" -#: catalog/aclchk.c:339 +#: catalog/aclchk.c:313 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "リレーション\"%2$s\"の列\"%1$s\"に対して一部の権限が付与されませんでした" -#: catalog/aclchk.c:344 +#: catalog/aclchk.c:318 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "\"%s\"に対して一部の権限が付与されませんでした" -#: catalog/aclchk.c:355 +#: catalog/aclchk.c:329 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "リレーション\"%2$s\"の列\"%1$s\"に対して取り消せた権限はありません" -#: catalog/aclchk.c:360 +#: catalog/aclchk.c:334 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "\"%s\"に対して取り消せた権限はありません" -#: catalog/aclchk.c:368 +#: catalog/aclchk.c:342 #, c-format msgid "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "リレーション\"%2$s\"の列\"%1$s\"に対して一部の権限が取り消せませんでした" -#: catalog/aclchk.c:373 +#: catalog/aclchk.c:347 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "\"%s\"に対して一部の権限が取り消せませんでした" -#: catalog/aclchk.c:456 catalog/aclchk.c:999 +#: catalog/aclchk.c:430 catalog/aclchk.c:973 #, c-format msgid "invalid privilege type %s for relation" msgstr "リレーションに対する不正な権限のタイプ %s" -#: catalog/aclchk.c:460 catalog/aclchk.c:1003 +#: catalog/aclchk.c:434 catalog/aclchk.c:977 #, c-format msgid "invalid privilege type %s for sequence" msgstr "シーケンスに対する不正な権限のタイプ %s" -#: catalog/aclchk.c:464 +#: catalog/aclchk.c:438 #, c-format msgid "invalid privilege type %s for database" msgstr "データベースに対する不正な権限タイプ %s" -#: catalog/aclchk.c:468 +#: catalog/aclchk.c:442 #, c-format msgid "invalid privilege type %s for domain" msgstr "ドメインに対する不正な権限タイプ %s" -#: catalog/aclchk.c:472 catalog/aclchk.c:1007 +#: catalog/aclchk.c:446 catalog/aclchk.c:981 #, c-format msgid "invalid privilege type %s for function" msgstr "関数に対する不正な権限タイプ %s" -#: catalog/aclchk.c:476 +#: catalog/aclchk.c:450 #, c-format msgid "invalid privilege type %s for language" msgstr "言語に対する不正な権限タイプ %s" -#: catalog/aclchk.c:480 +#: catalog/aclchk.c:454 #, c-format msgid "invalid privilege type %s for large object" msgstr "ラージオブジェクトに対する不正な権限タイプ %s" -#: catalog/aclchk.c:484 catalog/aclchk.c:1023 +#: catalog/aclchk.c:458 catalog/aclchk.c:997 #, c-format msgid "invalid privilege type %s for schema" msgstr "スキーマに対する不正な権限タイプ %s" -#: catalog/aclchk.c:488 catalog/aclchk.c:1011 +#: catalog/aclchk.c:462 catalog/aclchk.c:985 #, c-format msgid "invalid privilege type %s for procedure" msgstr "プロシージャに対する不正な権限タイプ %s" -#: catalog/aclchk.c:492 catalog/aclchk.c:1015 +#: catalog/aclchk.c:466 catalog/aclchk.c:989 #, c-format msgid "invalid privilege type %s for routine" msgstr "ルーチンに対する不正な権限のタイプ %s" -#: catalog/aclchk.c:496 +#: catalog/aclchk.c:470 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "テーブル空間に対する不正な権限タイプ %s" -#: catalog/aclchk.c:500 catalog/aclchk.c:1019 +#: catalog/aclchk.c:474 catalog/aclchk.c:993 #, c-format msgid "invalid privilege type %s for type" msgstr "型に対する不正な権限タイプ %s" -#: catalog/aclchk.c:504 +#: catalog/aclchk.c:478 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "外部データラッパーに対する不正な権限タイプ %s" -#: catalog/aclchk.c:508 +#: catalog/aclchk.c:482 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "外部サーバに対する不正な権限タイプ %s" -#: catalog/aclchk.c:547 +#: catalog/aclchk.c:521 #, c-format msgid "column privileges are only valid for relations" msgstr "列権限はリレーションに対してのみ有効です" -#: catalog/aclchk.c:707 catalog/aclchk.c:4135 catalog/aclchk.c:4917 -#: catalog/objectaddress.c:964 catalog/pg_largeobject.c:116 -#: storage/large_object/inv_api.c:283 +#: catalog/aclchk.c:681 catalog/aclchk.c:4067 catalog/aclchk.c:4849 catalog/objectaddress.c:1060 catalog/pg_largeobject.c:116 storage/large_object/inv_api.c:285 #, c-format msgid "large object %u does not exist" msgstr "ラージオブジェクト%uは存在しません" -#: catalog/aclchk.c:936 catalog/aclchk.c:945 commands/collationcmds.c:117 -#: commands/copy.c:1139 commands/copy.c:1159 commands/copy.c:1168 -#: commands/copy.c:1177 commands/copy.c:1186 commands/copy.c:1195 -#: commands/copy.c:1204 commands/copy.c:1213 commands/copy.c:1231 -#: commands/copy.c:1247 commands/copy.c:1267 commands/copy.c:1284 -#: commands/dbcommands.c:156 commands/dbcommands.c:165 -#: commands/dbcommands.c:174 commands/dbcommands.c:183 -#: commands/dbcommands.c:192 commands/dbcommands.c:201 -#: commands/dbcommands.c:210 commands/dbcommands.c:219 -#: commands/dbcommands.c:228 commands/dbcommands.c:1448 -#: commands/dbcommands.c:1457 commands/dbcommands.c:1466 -#: commands/dbcommands.c:1475 commands/extension.c:1688 -#: commands/extension.c:1698 commands/extension.c:1708 -#: commands/extension.c:1718 commands/extension.c:2960 -#: commands/foreigncmds.c:543 commands/foreigncmds.c:552 -#: commands/functioncmds.c:568 commands/functioncmds.c:734 -#: commands/functioncmds.c:743 commands/functioncmds.c:752 -#: commands/functioncmds.c:761 commands/functioncmds.c:2193 -#: commands/functioncmds.c:2201 commands/publicationcmds.c:91 -#: commands/sequence.c:1267 commands/sequence.c:1277 commands/sequence.c:1287 -#: commands/sequence.c:1297 commands/sequence.c:1307 commands/sequence.c:1317 -#: commands/sequence.c:1327 commands/sequence.c:1337 commands/sequence.c:1347 -#: commands/subscriptioncmds.c:111 commands/subscriptioncmds.c:121 -#: commands/subscriptioncmds.c:131 commands/subscriptioncmds.c:141 -#: commands/subscriptioncmds.c:155 commands/subscriptioncmds.c:166 -#: commands/subscriptioncmds.c:180 commands/tablecmds.c:6566 -#: commands/typecmds.c:299 commands/typecmds.c:1428 commands/typecmds.c:1437 -#: commands/typecmds.c:1445 commands/typecmds.c:1453 commands/typecmds.c:1461 -#: commands/user.c:133 commands/user.c:147 commands/user.c:156 -#: commands/user.c:165 commands/user.c:174 commands/user.c:183 -#: commands/user.c:192 commands/user.c:201 commands/user.c:210 -#: commands/user.c:219 commands/user.c:228 commands/user.c:237 -#: commands/user.c:246 commands/user.c:571 commands/user.c:579 -#: commands/user.c:587 commands/user.c:595 commands/user.c:603 -#: commands/user.c:611 commands/user.c:619 commands/user.c:627 -#: commands/user.c:636 commands/user.c:644 commands/user.c:652 -#: parser/parse_utilcmd.c:385 replication/pgoutput/pgoutput.c:111 -#: replication/pgoutput/pgoutput.c:132 replication/walsender.c:817 -#: replication/walsender.c:828 replication/walsender.c:838 +#: catalog/aclchk.c:910 catalog/aclchk.c:919 commands/collationcmds.c:118 commands/copy.c:1184 commands/copy.c:1204 commands/copy.c:1213 commands/copy.c:1222 commands/copy.c:1231 commands/copy.c:1240 commands/copy.c:1249 commands/copy.c:1258 commands/copy.c:1276 commands/copy.c:1292 commands/copy.c:1312 commands/copy.c:1329 commands/dbcommands.c:157 commands/dbcommands.c:166 commands/dbcommands.c:175 commands/dbcommands.c:184 commands/dbcommands.c:193 +#: commands/dbcommands.c:202 commands/dbcommands.c:211 commands/dbcommands.c:220 commands/dbcommands.c:229 commands/dbcommands.c:238 commands/dbcommands.c:260 commands/dbcommands.c:1502 commands/dbcommands.c:1511 commands/dbcommands.c:1520 commands/dbcommands.c:1529 commands/extension.c:1735 commands/extension.c:1745 commands/extension.c:1755 commands/extension.c:3055 commands/foreigncmds.c:539 commands/foreigncmds.c:548 commands/functioncmds.c:570 +#: commands/functioncmds.c:736 commands/functioncmds.c:745 commands/functioncmds.c:754 commands/functioncmds.c:763 commands/functioncmds.c:1961 commands/functioncmds.c:1969 commands/publicationcmds.c:90 commands/publicationcmds.c:133 commands/sequence.c:1267 commands/sequence.c:1277 commands/sequence.c:1287 commands/sequence.c:1297 commands/sequence.c:1307 commands/sequence.c:1317 commands/sequence.c:1327 commands/sequence.c:1337 commands/sequence.c:1347 +#: commands/subscriptioncmds.c:113 commands/subscriptioncmds.c:123 commands/subscriptioncmds.c:133 commands/subscriptioncmds.c:143 commands/subscriptioncmds.c:157 commands/subscriptioncmds.c:168 commands/subscriptioncmds.c:182 commands/subscriptioncmds.c:192 commands/tablecmds.c:6959 commands/typecmds.c:322 commands/typecmds.c:1355 commands/typecmds.c:1364 commands/typecmds.c:1372 commands/typecmds.c:1380 commands/typecmds.c:1388 commands/user.c:133 +#: commands/user.c:147 commands/user.c:156 commands/user.c:165 commands/user.c:174 commands/user.c:183 commands/user.c:192 commands/user.c:201 commands/user.c:210 commands/user.c:219 commands/user.c:228 commands/user.c:237 commands/user.c:246 commands/user.c:582 commands/user.c:590 commands/user.c:598 commands/user.c:606 commands/user.c:614 commands/user.c:622 commands/user.c:630 commands/user.c:638 commands/user.c:647 commands/user.c:655 commands/user.c:663 +#: parser/parse_utilcmd.c:386 replication/pgoutput/pgoutput.c:145 replication/pgoutput/pgoutput.c:166 replication/pgoutput/pgoutput.c:180 replication/walsender.c:886 replication/walsender.c:897 replication/walsender.c:907 #, c-format msgid "conflicting or redundant options" msgstr "競合するオプション、あるいは余計なオプションがあります" -#: catalog/aclchk.c:1056 +#: catalog/aclchk.c:1030 #, c-format msgid "default privileges cannot be set for columns" msgstr "デフォルト権限は列には設定できません" -#: catalog/aclchk.c:1216 +#: catalog/aclchk.c:1190 #, c-format msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "GRANT/REVOKE ON SCHEMAS を使っている時には IN SCHEMA 句は指定できません" -#: catalog/aclchk.c:1584 catalog/catalog.c:519 catalog/objectaddress.c:1426 -#: commands/analyze.c:383 commands/copy.c:5134 commands/sequence.c:1702 -#: commands/tablecmds.c:6108 commands/tablecmds.c:6266 -#: commands/tablecmds.c:6340 commands/tablecmds.c:6410 -#: commands/tablecmds.c:6491 commands/tablecmds.c:6585 -#: commands/tablecmds.c:6644 commands/tablecmds.c:6783 -#: commands/tablecmds.c:6865 commands/tablecmds.c:6957 -#: commands/tablecmds.c:7065 commands/tablecmds.c:10302 -#: commands/tablecmds.c:10483 commands/tablecmds.c:10644 -#: commands/tablecmds.c:11629 commands/trigger.c:928 parser/analyze.c:2330 -#: parser/parse_relation.c:2788 parser/parse_relation.c:2851 -#: parser/parse_target.c:1031 parser/parse_type.c:145 utils/adt/acl.c:2885 -#: utils/adt/ruleutils.c:2511 +#: catalog/aclchk.c:1525 catalog/catalog.c:506 catalog/objectaddress.c:1522 commands/analyze.c:378 commands/copy.c:5132 commands/sequence.c:1702 commands/tablecmds.c:6499 commands/tablecmds.c:6657 commands/tablecmds.c:6731 commands/tablecmds.c:6801 commands/tablecmds.c:6884 commands/tablecmds.c:6978 commands/tablecmds.c:7037 commands/tablecmds.c:7110 commands/tablecmds.c:7139 commands/tablecmds.c:7294 commands/tablecmds.c:7376 commands/tablecmds.c:7469 +#: commands/tablecmds.c:7624 commands/tablecmds.c:10829 commands/tablecmds.c:11011 commands/tablecmds.c:11171 commands/tablecmds.c:12254 commands/trigger.c:876 parser/analyze.c:2339 parser/parse_relation.c:713 parser/parse_target.c:1036 parser/parse_type.c:144 parser/parse_utilcmd.c:3202 parser/parse_utilcmd.c:3237 parser/parse_utilcmd.c:3279 utils/adt/acl.c:2870 utils/adt/ruleutils.c:2535 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "リレーション\"%2$s\"の列\"%1$s\"は存在しません" -#: catalog/aclchk.c:1847 catalog/objectaddress.c:1266 commands/sequence.c:1140 -#: commands/tablecmds.c:230 commands/tablecmds.c:14948 utils/adt/acl.c:2075 -#: utils/adt/acl.c:2105 utils/adt/acl.c:2137 utils/adt/acl.c:2169 -#: utils/adt/acl.c:2197 utils/adt/acl.c:2227 +#: catalog/aclchk.c:1788 catalog/objectaddress.c:1362 commands/sequence.c:1140 commands/tablecmds.c:236 commands/tablecmds.c:15563 utils/adt/acl.c:2060 utils/adt/acl.c:2090 utils/adt/acl.c:2122 utils/adt/acl.c:2154 utils/adt/acl.c:2182 utils/adt/acl.c:2212 #, c-format msgid "\"%s\" is not a sequence" msgstr "\"%s\"はシーケンスではありません" -#: catalog/aclchk.c:1885 +#: catalog/aclchk.c:1826 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "シーケンス \"%s\"では USAGE, SELECT, UPDATE 権限のみをサポートします" -#: catalog/aclchk.c:1902 +#: catalog/aclchk.c:1843 #, c-format msgid "invalid privilege type %s for table" msgstr "テーブルに対する権限タイプ%sは不正です" -#: catalog/aclchk.c:2068 +#: catalog/aclchk.c:2009 #, c-format msgid "invalid privilege type %s for column" msgstr "列では権限タイプ %s は無効です" -#: catalog/aclchk.c:2081 +#: catalog/aclchk.c:2022 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "シーケンス \"%s\"では USAGE, SELECT, UPDATE のみをサポートします" -#: catalog/aclchk.c:2663 +#: catalog/aclchk.c:2604 #, c-format msgid "language \"%s\" is not trusted" msgstr "言語\"%s\"は信頼されていません" -#: catalog/aclchk.c:2665 +#: catalog/aclchk.c:2606 #, c-format msgid "GRANT and REVOKE are not allowed on untrusted languages, because only superusers can use untrusted languages." msgstr "信頼されない言語はスーパユーザのみが使用可能なため、GRANTとREVOKEは信頼されない言語上では実行不可です。" -#: catalog/aclchk.c:3179 +#: catalog/aclchk.c:3120 #, c-format msgid "cannot set privileges of array types" msgstr "配列型の権限を設定できません" -#: catalog/aclchk.c:3180 +#: catalog/aclchk.c:3121 #, c-format msgid "Set the privileges of the element type instead." msgstr "代わりに要素型の権限を設定してください。" -#: catalog/aclchk.c:3187 catalog/objectaddress.c:1560 +#: catalog/aclchk.c:3128 catalog/objectaddress.c:1656 #, c-format msgid "\"%s\" is not a domain" msgstr "\"%s\"はドメインではありません" -#: catalog/aclchk.c:3307 +#: catalog/aclchk.c:3248 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "認識できない権限タイプ\"%s\"" -#: catalog/aclchk.c:3368 +#: catalog/aclchk.c:3309 #, c-format msgid "permission denied for aggregate %s" msgstr "集約 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3371 +#: catalog/aclchk.c:3312 #, c-format msgid "permission denied for collation %s" msgstr "照合順序 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3374 +#: catalog/aclchk.c:3315 #, c-format msgid "permission denied for column %s" msgstr "列 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3377 +#: catalog/aclchk.c:3318 #, c-format msgid "permission denied for conversion %s" msgstr "変換 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3380 +#: catalog/aclchk.c:3321 #, c-format msgid "permission denied for database %s" msgstr "データベース %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3383 +#: catalog/aclchk.c:3324 #, c-format msgid "permission denied for domain %s" msgstr "ドメイン %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3386 +#: catalog/aclchk.c:3327 #, c-format msgid "permission denied for event trigger %s" msgstr "イベントトリガ %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3389 +#: catalog/aclchk.c:3330 #, c-format msgid "permission denied for extension %s" msgstr "機能拡張 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3392 +#: catalog/aclchk.c:3333 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "外部データラッパ %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3395 +#: catalog/aclchk.c:3336 #, c-format msgid "permission denied for foreign server %s" msgstr "外部サーバ %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3398 +#: catalog/aclchk.c:3339 #, c-format msgid "permission denied for foreign table %s" msgstr "外部テーブル %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3401 +#: catalog/aclchk.c:3342 #, c-format msgid "permission denied for function %s" msgstr "関数 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3404 +#: catalog/aclchk.c:3345 #, c-format msgid "permission denied for index %s" msgstr "インデックス %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3407 +#: catalog/aclchk.c:3348 #, c-format msgid "permission denied for language %s" msgstr "言語 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3410 +#: catalog/aclchk.c:3351 #, c-format msgid "permission denied for large object %s" msgstr "ラージオブジェクト %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3413 +#: catalog/aclchk.c:3354 #, c-format msgid "permission denied for materialized view %s" msgstr "実体化ビュー %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3416 +#: catalog/aclchk.c:3357 #, c-format msgid "permission denied for operator class %s" msgstr "演算子クラス %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3419 +#: catalog/aclchk.c:3360 #, c-format msgid "permission denied for operator %s" msgstr "演算子 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3422 +#: catalog/aclchk.c:3363 #, c-format msgid "permission denied for operator family %s" msgstr "演算子族 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3425 +#: catalog/aclchk.c:3366 #, c-format msgid "permission denied for policy %s" msgstr "ポリシ %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3428 +#: catalog/aclchk.c:3369 #, c-format msgid "permission denied for procedure %s" msgstr "プロシージャ %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3431 +#: catalog/aclchk.c:3372 #, c-format msgid "permission denied for publication %s" msgstr "パブリケーション%sへのアクセスが拒否されました" -#: catalog/aclchk.c:3434 +#: catalog/aclchk.c:3375 #, c-format msgid "permission denied for routine %s" msgstr "ルーチン %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3437 +#: catalog/aclchk.c:3378 #, c-format msgid "permission denied for schema %s" msgstr "スキーマ %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3440 commands/sequence.c:610 commands/sequence.c:844 -#: commands/sequence.c:886 commands/sequence.c:927 commands/sequence.c:1800 -#: commands/sequence.c:1864 +#: catalog/aclchk.c:3381 commands/sequence.c:610 commands/sequence.c:844 commands/sequence.c:886 commands/sequence.c:927 commands/sequence.c:1800 commands/sequence.c:1864 #, c-format msgid "permission denied for sequence %s" msgstr "シーケンス %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3443 +#: catalog/aclchk.c:3384 #, c-format msgid "permission denied for statistics object %s" msgstr "統計情報オブジェクト %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3446 +#: catalog/aclchk.c:3387 #, c-format msgid "permission denied for subscription %s" msgstr "サブスクリプション %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3449 +#: catalog/aclchk.c:3390 #, c-format msgid "permission denied for table %s" msgstr "テーブル %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3452 +#: catalog/aclchk.c:3393 #, c-format msgid "permission denied for tablespace %s" msgstr "テーブル空間 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3455 +#: catalog/aclchk.c:3396 #, c-format msgid "permission denied for text search configuration %s" msgstr "テキスト検索設定 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3458 +#: catalog/aclchk.c:3399 #, c-format msgid "permission denied for text search dictionary %s" msgstr "テキスト検索辞書 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3461 +#: catalog/aclchk.c:3402 #, c-format msgid "permission denied for type %s" msgstr "型 %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3464 +#: catalog/aclchk.c:3405 #, c-format msgid "permission denied for view %s" msgstr "ビュー %s へのアクセスが拒否されました" -#: catalog/aclchk.c:3499 +#: catalog/aclchk.c:3440 #, c-format msgid "must be owner of aggregate %s" msgstr "集約 %s の所有者である必要があります" -#: catalog/aclchk.c:3502 +#: catalog/aclchk.c:3443 #, c-format msgid "must be owner of collation %s" msgstr "照合順序 %s の所有者である必要があります" -#: catalog/aclchk.c:3505 +#: catalog/aclchk.c:3446 #, c-format msgid "must be owner of conversion %s" msgstr "変換 %s の所有者である必要があります" -#: catalog/aclchk.c:3508 +#: catalog/aclchk.c:3449 #, c-format msgid "must be owner of database %s" msgstr "データベース %s の所有者である必要があります" -#: catalog/aclchk.c:3511 +#: catalog/aclchk.c:3452 #, c-format msgid "must be owner of domain %s" msgstr "ドメイン %s の所有者である必要があります" -#: catalog/aclchk.c:3514 +#: catalog/aclchk.c:3455 #, c-format msgid "must be owner of event trigger %s" msgstr "イベントトリガ %s の所有者である必要があります" -#: catalog/aclchk.c:3517 +#: catalog/aclchk.c:3458 #, c-format msgid "must be owner of extension %s" msgstr "機能拡張 %s の所有者である必要があります" -#: catalog/aclchk.c:3520 +#: catalog/aclchk.c:3461 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "外部データラッパー %s の所有者である必要があります" -#: catalog/aclchk.c:3523 +#: catalog/aclchk.c:3464 #, c-format msgid "must be owner of foreign server %s" msgstr "外部サーバ %s の所有者である必要があります" -#: catalog/aclchk.c:3526 +#: catalog/aclchk.c:3467 #, c-format msgid "must be owner of foreign table %s" msgstr "外部テーブル %s の所有者である必要があります" -#: catalog/aclchk.c:3529 +#: catalog/aclchk.c:3470 #, c-format msgid "must be owner of function %s" msgstr "関数 %s の所有者である必要があります" -#: catalog/aclchk.c:3532 +#: catalog/aclchk.c:3473 #, c-format msgid "must be owner of index %s" msgstr "インデックス %s の所有者である必要があります" -#: catalog/aclchk.c:3535 +#: catalog/aclchk.c:3476 #, c-format msgid "must be owner of language %s" msgstr "言語 %s の所有者である必要があります" -#: catalog/aclchk.c:3538 +#: catalog/aclchk.c:3479 #, c-format msgid "must be owner of large object %s" msgstr "ラージオブジェクト %s の所有者である必要があります" -#: catalog/aclchk.c:3541 +#: catalog/aclchk.c:3482 #, c-format msgid "must be owner of materialized view %s" msgstr "実体化ビュー %s の所有者である必要があります" -#: catalog/aclchk.c:3544 +#: catalog/aclchk.c:3485 #, c-format msgid "must be owner of operator class %s" msgstr "演算子クラス %s の所有者である必要があります" -#: catalog/aclchk.c:3547 +#: catalog/aclchk.c:3488 #, c-format msgid "must be owner of operator %s" msgstr "演算子 %s の所有者である必要があります" -#: catalog/aclchk.c:3550 +#: catalog/aclchk.c:3491 #, c-format msgid "must be owner of operator family %s" msgstr "演算子族 %s の所有者である必要があります" -#: catalog/aclchk.c:3553 +#: catalog/aclchk.c:3494 #, c-format msgid "must be owner of procedure %s" msgstr "プロシージャ %s の所有者である必要があります" -#: catalog/aclchk.c:3556 +#: catalog/aclchk.c:3497 #, c-format msgid "must be owner of publication %s" msgstr "パブリケーション %s の所有者である必要があります" -#: catalog/aclchk.c:3559 +#: catalog/aclchk.c:3500 #, c-format msgid "must be owner of routine %s" msgstr "ルーチン %s の所有者である必要があります" -#: catalog/aclchk.c:3562 +#: catalog/aclchk.c:3503 #, c-format msgid "must be owner of sequence %s" msgstr "シーケンス %s の所有者である必要があります" -#: catalog/aclchk.c:3565 +#: catalog/aclchk.c:3506 #, c-format msgid "must be owner of subscription %s" msgstr "サブスクリプション %s の所有者である必要があります" -#: catalog/aclchk.c:3568 +#: catalog/aclchk.c:3509 #, c-format msgid "must be owner of table %s" msgstr "テーブル %s の所有者である必要があります" -#: catalog/aclchk.c:3571 +#: catalog/aclchk.c:3512 #, c-format msgid "must be owner of type %s" msgstr "型 %s の所有者である必要があります" -#: catalog/aclchk.c:3574 +#: catalog/aclchk.c:3515 #, c-format msgid "must be owner of view %s" msgstr "ビュー %s の所有者である必要があります" -#: catalog/aclchk.c:3577 +#: catalog/aclchk.c:3518 #, c-format msgid "must be owner of schema %s" msgstr "スキーマ %s の所有者である必要があります" -#: catalog/aclchk.c:3580 +#: catalog/aclchk.c:3521 #, c-format msgid "must be owner of statistics object %s" msgstr "統計情報オブジェクト %s の所有者である必要があります" -#: catalog/aclchk.c:3583 +#: catalog/aclchk.c:3524 #, c-format msgid "must be owner of tablespace %s" msgstr "テーブル空間 %s の所有者である必要があります" -#: catalog/aclchk.c:3586 +#: catalog/aclchk.c:3527 #, c-format msgid "must be owner of text search configuration %s" msgstr "テキスト検索設定 %s の所有者である必要があります" -#: catalog/aclchk.c:3589 +#: catalog/aclchk.c:3530 #, c-format msgid "must be owner of text search dictionary %s" msgstr "テキスト検索辞書 %s の所有者である必要があります" -#: catalog/aclchk.c:3603 +#: catalog/aclchk.c:3544 #, c-format msgid "must be owner of relation %s" msgstr "リレーション %s の所有者である必要があります" -#: catalog/aclchk.c:3647 +#: catalog/aclchk.c:3588 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "リレーション\"%2$s\"の列\"%1$s\"へのアクセスが拒否されました" -#: catalog/aclchk.c:3768 catalog/aclchk.c:3776 +#: catalog/aclchk.c:3709 catalog/aclchk.c:3717 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "OID %2$uのリレーションに属性%1$dは存在しません" -#: catalog/aclchk.c:3849 catalog/aclchk.c:4768 +#: catalog/aclchk.c:3790 catalog/aclchk.c:4700 #, c-format msgid "relation with OID %u does not exist" msgstr "OID %uのリレーションは存在しません" -#: catalog/aclchk.c:3948 catalog/aclchk.c:5186 +#: catalog/aclchk.c:3880 catalog/aclchk.c:5118 #, c-format msgid "database with OID %u does not exist" msgstr "OID %uのデータベースは存在しません" -#: catalog/aclchk.c:4002 catalog/aclchk.c:4846 tcop/fastpath.c:221 -#: utils/fmgr/fmgr.c:2017 +#: catalog/aclchk.c:3934 catalog/aclchk.c:4778 tcop/fastpath.c:221 utils/fmgr/fmgr.c:2055 #, c-format msgid "function with OID %u does not exist" msgstr "OID %uの関数は存在しません" -#: catalog/aclchk.c:4056 catalog/aclchk.c:4872 +#: catalog/aclchk.c:3988 catalog/aclchk.c:4804 #, c-format msgid "language with OID %u does not exist" msgstr "OID %uの言語は存在しません" -#: catalog/aclchk.c:4220 catalog/aclchk.c:4944 +#: catalog/aclchk.c:4152 catalog/aclchk.c:4876 #, c-format msgid "schema with OID %u does not exist" msgstr "OID %uのスキーマは存在しません" -#: catalog/aclchk.c:4274 catalog/aclchk.c:4971 utils/adt/genfile.c:637 +#: catalog/aclchk.c:4206 catalog/aclchk.c:4903 utils/adt/genfile.c:686 #, c-format msgid "tablespace with OID %u does not exist" msgstr "OID %uのテーブル空間は存在しません" -#: catalog/aclchk.c:4333 catalog/aclchk.c:5105 commands/foreigncmds.c:328 +#: catalog/aclchk.c:4265 catalog/aclchk.c:5037 commands/foreigncmds.c:325 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "OID %uの外部データラッパーは存在しません" -#: catalog/aclchk.c:4395 catalog/aclchk.c:5132 commands/foreigncmds.c:465 +#: catalog/aclchk.c:4327 catalog/aclchk.c:5064 commands/foreigncmds.c:462 #, c-format msgid "foreign server with OID %u does not exist" msgstr "OID %uの外部サーバは存在しません" -#: catalog/aclchk.c:4455 catalog/aclchk.c:4794 utils/cache/typcache.c:369 +#: catalog/aclchk.c:4387 catalog/aclchk.c:4726 utils/cache/typcache.c:378 utils/cache/typcache.c:432 #, c-format msgid "type with OID %u does not exist" msgstr "OID %uの型は存在しません" -#: catalog/aclchk.c:4820 +#: catalog/aclchk.c:4752 #, c-format msgid "operator with OID %u does not exist" msgstr "OID %uの演算子は存在しません" -#: catalog/aclchk.c:4997 +#: catalog/aclchk.c:4929 #, c-format msgid "operator class with OID %u does not exist" msgstr "OID %uの演算子クラスは存在しません" -#: catalog/aclchk.c:5024 +#: catalog/aclchk.c:4956 #, c-format msgid "operator family with OID %u does not exist" msgstr "OID %uの演算子族は存在しません" -#: catalog/aclchk.c:5051 +#: catalog/aclchk.c:4983 #, c-format msgid "text search dictionary with OID %u does not exist" msgstr "OID %uのテキスト検索辞書は存在しません" -#: catalog/aclchk.c:5078 +#: catalog/aclchk.c:5010 #, c-format msgid "text search configuration with OID %u does not exist" msgstr "OID %uのテキスト検索設定は存在しません" -#: catalog/aclchk.c:5159 commands/event_trigger.c:595 +#: catalog/aclchk.c:5091 commands/event_trigger.c:453 #, c-format msgid "event trigger with OID %u does not exist" msgstr "OID %uのイベントトリガは存在しません" -#: catalog/aclchk.c:5212 commands/collationcmds.c:366 +#: catalog/aclchk.c:5144 commands/collationcmds.c:367 #, c-format msgid "collation with OID %u does not exist" msgstr "OID %uの照合順序は存在しません" -#: catalog/aclchk.c:5238 +#: catalog/aclchk.c:5170 #, c-format msgid "conversion with OID %u does not exist" msgstr "OID %uの変換は存在しません" -#: catalog/aclchk.c:5279 +#: catalog/aclchk.c:5211 #, c-format msgid "extension with OID %u does not exist" msgstr "OID %uの機能拡張は存在しません" -#: catalog/aclchk.c:5306 commands/publicationcmds.c:759 +#: catalog/aclchk.c:5238 commands/publicationcmds.c:771 #, c-format msgid "publication with OID %u does not exist" msgstr "OID %uのパブリケーションは存在しません" -#: catalog/aclchk.c:5332 commands/subscriptioncmds.c:1130 +#: catalog/aclchk.c:5264 commands/subscriptioncmds.c:1172 #, c-format msgid "subscription with OID %u does not exist" msgstr "OID %uのサブスクリプションは存在しません" -#: catalog/aclchk.c:5358 +#: catalog/aclchk.c:5290 #, c-format msgid "statistics object with OID %u does not exist" msgstr "OID %uの統計情報オブジェクトは存在しません" -#: catalog/catalog.c:498 +#: catalog/catalog.c:485 #, c-format msgid "must be superuser to call pg_nextoid()" msgstr "pg_nextoid() を呼び出すにはスーパユーザである必要があります" -#: catalog/catalog.c:506 +#: catalog/catalog.c:493 #, c-format msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() はシステムカタログでのみ使用できます" -#: catalog/catalog.c:511 parser/parse_utilcmd.c:2064 +#: catalog/catalog.c:498 parser/parse_utilcmd.c:2103 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "インデックス\"%s\"はテーブル\"%s\"には属していません" -#: catalog/catalog.c:528 +#: catalog/catalog.c:515 #, c-format msgid "column \"%s\" is not of type oid" msgstr "列\"%s\"はoid型ではありません" -#: catalog/catalog.c:535 +#: catalog/catalog.c:522 #, c-format msgid "index \"%s\" is not the index for column \"%s\"" msgstr "インデックス\"%s\"は列\"%s\"に対するインデックスではありません" -#: catalog/dependency.c:824 catalog/dependency.c:1062 +#: catalog/dependency.c:821 catalog/dependency.c:1060 #, c-format msgid "cannot drop %s because %s requires it" msgstr "%2$sが必要としているため%1$sを削除できません" -#: catalog/dependency.c:826 catalog/dependency.c:1064 +#: catalog/dependency.c:823 catalog/dependency.c:1062 #, c-format msgid "You can drop %s instead." msgstr "代わりに%sを削除できます" -#: catalog/dependency.c:934 catalog/pg_shdepend.c:641 +#: catalog/dependency.c:931 catalog/pg_shdepend.c:640 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "データベースシステムが必要としているため%sを削除できません" -#: catalog/dependency.c:1130 +#: catalog/dependency.c:1128 #, c-format msgid "drop auto-cascades to %s" msgstr "削除は自動で%sへ伝播します" -#: catalog/dependency.c:1142 catalog/dependency.c:1151 +#: catalog/dependency.c:1141 catalog/dependency.c:1150 #, c-format msgid "%s depends on %s" msgstr "%sは%sに依存しています" -#: catalog/dependency.c:1163 catalog/dependency.c:1172 +#: catalog/dependency.c:1162 catalog/dependency.c:1171 #, c-format msgid "drop cascades to %s" msgstr "削除は%sへ伝播します" -#: catalog/dependency.c:1180 catalog/pg_shdepend.c:770 +#: catalog/dependency.c:1179 catalog/pg_shdepend.c:769 #, c-format msgid "" "\n" @@ -3814,651 +3708,638 @@ msgstr[1] "" "\n" "および%d個のその他のオブジェクト(一覧についてはサーバログを参照してください)" -#: catalog/dependency.c:1192 +#: catalog/dependency.c:1191 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "他のオブジェクトが依存しているため%sを削除できません" -#: catalog/dependency.c:1194 catalog/dependency.c:1195 -#: catalog/dependency.c:1201 catalog/dependency.c:1202 -#: catalog/dependency.c:1213 catalog/dependency.c:1214 -#: commands/tablecmds.c:1216 commands/tablecmds.c:12246 commands/user.c:1082 -#: commands/view.c:505 libpq/auth.c:332 replication/syncrep.c:1171 -#: storage/lmgr/deadlock.c:1145 storage/lmgr/proc.c:1347 utils/adt/acl.c:5344 -#: utils/misc/guc.c:6562 utils/misc/guc.c:6598 utils/misc/guc.c:6668 -#: utils/misc/guc.c:10743 utils/misc/guc.c:10777 utils/misc/guc.c:10811 -#: utils/misc/guc.c:10845 utils/misc/guc.c:10880 +#: catalog/dependency.c:1193 catalog/dependency.c:1194 catalog/dependency.c:1200 catalog/dependency.c:1201 catalog/dependency.c:1212 catalog/dependency.c:1213 commands/tablecmds.c:1247 commands/tablecmds.c:12872 commands/user.c:1093 commands/view.c:495 libpq/auth.c:334 replication/syncrep.c:1032 storage/lmgr/deadlock.c:1152 storage/lmgr/proc.c:1346 utils/adt/acl.c:5329 utils/adt/jsonfuncs.c:614 utils/adt/jsonfuncs.c:620 utils/misc/guc.c:6789 utils/misc/guc.c:6825 +#: utils/misc/guc.c:6895 utils/misc/guc.c:10965 utils/misc/guc.c:10999 utils/misc/guc.c:11033 utils/misc/guc.c:11067 utils/misc/guc.c:11102 #, c-format msgid "%s" msgstr "%s" -#: catalog/dependency.c:1196 catalog/dependency.c:1203 +#: catalog/dependency.c:1195 catalog/dependency.c:1202 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "依存しているオブジェクトも削除するにはDROP ... CASCADEを使用してください" -#: catalog/dependency.c:1200 +#: catalog/dependency.c:1199 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "他のオブジェクトが依存しているため指定したオブジェクトを削除できません" #. translator: %d always has a value larger than 1 -#: catalog/dependency.c:1209 +#: catalog/dependency.c:1208 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" msgstr[0] "削除は他の%d個のオブジェクトに対しても行われます" msgstr[1] "削除は他の%d個のオブジェクトに対しても行われます" -#: catalog/dependency.c:1886 +#: catalog/dependency.c:1869 #, c-format msgid "constant of the type %s cannot be used here" msgstr "%s型の定数をここで使用することはできません" -#: catalog/heap.c:332 +#: catalog/heap.c:330 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "\"%s.%s\"を作成する権限がありません" -#: catalog/heap.c:334 +#: catalog/heap.c:332 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "システムカタログの更新は現在禁止されています" -#: catalog/heap.c:502 commands/tablecmds.c:2067 commands/tablecmds.c:2584 -#: commands/tablecmds.c:5713 +#: catalog/heap.c:500 commands/tablecmds.c:2132 commands/tablecmds.c:2690 commands/tablecmds.c:6094 #, c-format msgid "tables can have at most %d columns" msgstr "テーブルは最大で%d列までしか持てません" -#: catalog/heap.c:520 commands/tablecmds.c:5998 +#: catalog/heap.c:518 commands/tablecmds.c:6389 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "列名\"%s\"はシステム用の列名に使われています" -#: catalog/heap.c:536 +#: catalog/heap.c:534 #, c-format msgid "column name \"%s\" specified more than once" msgstr "列名\"%s\"が複数指定されました" -#: catalog/heap.c:604 +#. translator: first %s is an integer not a name +#: catalog/heap.c:609 +#, c-format +msgid "partition key column %s has pseudo-type %s" +msgstr "パーティションキー列%sは疑似型%sです" + +#: catalog/heap.c:614 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "列\"%s\"は疑似型%sです" -#: catalog/heap.c:634 +#: catalog/heap.c:645 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "複合型 %s がそれ自身のメンバーになることはできません" -#: catalog/heap.c:676 commands/createas.c:204 commands/createas.c:488 +#. translator: first %s is an integer not a name +#: catalog/heap.c:700 +#, c-format +msgid "no collation was derived for partition key column %s with collatable type %s" +msgstr "照合可能な型 %2$s のパーティションキー列%1$sのための照合順序を決定できませんでした" + +#: catalog/heap.c:706 commands/createas.c:203 commands/createas.c:486 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "照合可能な型 %2$s を持つ列\"%1$s\"のための照合順序を決定できませんでした" -#: catalog/heap.c:1122 catalog/index.c:864 commands/tablecmds.c:3351 +#: catalog/heap.c:1191 catalog/index.c:855 commands/tablecmds.c:3465 #, c-format msgid "relation \"%s\" already exists" msgstr "リレーション\"%s\"はすでに存在します" -#: catalog/heap.c:1138 catalog/pg_type.c:427 catalog/pg_type.c:749 -#: commands/typecmds.c:240 commands/typecmds.c:791 commands/typecmds.c:1191 -#: commands/typecmds.c:1403 commands/typecmds.c:2160 +#: catalog/heap.c:1207 catalog/pg_type.c:428 catalog/pg_type.c:750 commands/typecmds.c:238 commands/typecmds.c:250 commands/typecmds.c:719 commands/typecmds.c:1125 commands/typecmds.c:1337 commands/typecmds.c:2124 #, c-format msgid "type \"%s\" already exists" msgstr "型\"%s\"はすでに存在します" -#: catalog/heap.c:1139 +#: catalog/heap.c:1208 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "リレーションは同じ名前の関連する型を持ちます。このため既存の型と競合しない名前である必要があります。" -#: catalog/heap.c:1168 +#: catalog/heap.c:1237 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にpg_classのヒープOIDが設定されていません" -#: catalog/heap.c:2368 +#: catalog/heap.c:2438 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "パーティション親テーブル\"%s\"に NO INHERIT 制約は追加できません" -#: catalog/heap.c:2638 +#: catalog/heap.c:2708 #, c-format msgid "check constraint \"%s\" already exists" msgstr "検査制約\"%s\"はすでに存在します" -#: catalog/heap.c:2808 catalog/index.c:878 catalog/pg_constraint.c:669 -#: commands/tablecmds.c:7410 +#: catalog/heap.c:2878 catalog/index.c:869 catalog/pg_constraint.c:654 commands/tablecmds.c:7974 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "すでに制約\"%s\"はリレーション\"%s\"に存在します" -#: catalog/heap.c:2815 +#: catalog/heap.c:2885 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "制約\"%s\"は、リレーション\"%s\"上の継承されていない制約と競合します" -#: catalog/heap.c:2826 +#: catalog/heap.c:2896 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "制約\"%s\"は、リレーション\"%s\"上の継承された制約と競合します" -#: catalog/heap.c:2836 +#: catalog/heap.c:2906 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "制約\"%s\"は、リレーション\"%s\"上の NOT VALID 制約と競合します" -#: catalog/heap.c:2841 +#: catalog/heap.c:2911 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "継承された定義により制約\"%s\"をマージしています" -#: catalog/heap.c:2943 +#: catalog/heap.c:3013 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "生成カラム\"%s\"はカラム生成式中では使用できません" -#: catalog/heap.c:2945 +#: catalog/heap.c:3015 #, c-format msgid "A generated column cannot reference another generated column." msgstr "生成カラムは他の生成カラムを参照できません。" -#: catalog/heap.c:2997 +#: catalog/heap.c:3067 #, c-format msgid "generation expression is not immutable" msgstr "生成式は不変ではありません" -#: catalog/heap.c:3025 rewrite/rewriteHandler.c:1189 +#: catalog/heap.c:3095 rewrite/rewriteHandler.c:1192 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "列\"%s\"の型は%sですが、デフォルト式の型は%sです" -#: catalog/heap.c:3030 commands/prepare.c:384 parser/parse_node.c:434 -#: parser/parse_target.c:591 parser/parse_target.c:866 -#: parser/parse_target.c:876 rewrite/rewriteHandler.c:1194 +#: catalog/heap.c:3100 commands/prepare.c:367 parser/parse_node.c:412 parser/parse_target.c:589 parser/parse_target.c:869 parser/parse_target.c:879 rewrite/rewriteHandler.c:1197 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "式を書き換えるかキャストする必要があります。" -#: catalog/heap.c:3077 +#: catalog/heap.c:3147 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "検査制約ではテーブル\"%s\"のみを参照することができます" -#: catalog/heap.c:3327 +#: catalog/heap.c:3404 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "ON COMMITと外部キーの組み合わせはサポートされていません" -#: catalog/heap.c:3328 +#: catalog/heap.c:3405 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "テーブル\"%s\"は\"%s\"を参照します。しかし、これらのON COMMIT設定は同一ではありません。" -#: catalog/heap.c:3333 +#: catalog/heap.c:3410 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "外部キー制約で参照されているテーブルを削除できません" -#: catalog/heap.c:3334 +#: catalog/heap.c:3411 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "テーブル\"%s\"は\"%s\"を参照します。" -#: catalog/heap.c:3336 +#: catalog/heap.c:3413 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "同時にテーブル\"%s\"がtruncateされました。TRUNCATE ... CASCADEを使用してください。" -#: catalog/index.c:219 parser/parse_utilcmd.c:1873 parser/parse_utilcmd.c:1972 +#: catalog/index.c:218 parser/parse_utilcmd.c:1910 parser/parse_utilcmd.c:2009 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "テーブル\"%s\"に複数のプライマリキーを持たせることはできません" -#: catalog/index.c:237 +#: catalog/index.c:236 #, c-format msgid "primary keys cannot be expressions" msgstr "プライマリキーを式にすることはできません" -#: catalog/index.c:254 +#: catalog/index.c:253 #, c-format msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "主キー列\"%s\"がNOT NULL指定されていません" -#: catalog/index.c:763 catalog/index.c:1823 +#: catalog/index.c:754 catalog/index.c:1815 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "ユーザによるシステムカタログテーブルに対するインデックスの定義はサポートされていません" -#: catalog/index.c:803 +#: catalog/index.c:794 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "非決定的照合順序は演算子クラス \"%s\" ではサポートされません" -#: catalog/index.c:818 +#: catalog/index.c:809 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "システムカタログテーブルの並行的インデックス作成はサポートされていません" -#: catalog/index.c:827 catalog/index.c:1272 -#, fuzzy, c-format -#| msgid "concurrent index creation on system catalog tables is not supported" +#: catalog/index.c:818 catalog/index.c:1253 +#, c-format msgid "concurrent index creation for exclusion constraints is not supported" -msgstr "システムカタログテーブルの並行的インデックス作成はサポートされていません" +msgstr "排他制約のためのインデックスの並列的作成はサポートされていません" -#: catalog/index.c:836 +#: catalog/index.c:827 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "initdbの後に共有インデックスを作成できません" -#: catalog/index.c:856 commands/createas.c:253 commands/sequence.c:154 -#: parser/parse_utilcmd.c:208 +#: catalog/index.c:847 commands/createas.c:252 commands/sequence.c:154 parser/parse_utilcmd.c:208 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "リレーション\"%s\"はすでに存在します、スキップします" -#: catalog/index.c:906 +#: catalog/index.c:897 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にpg_classのインデックスOIDが設定されていません" -#: catalog/index.c:2099 +#: catalog/index.c:2100 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLYはトランザクション内で最初の操作でなければなりません" -#: catalog/index.c:2800 +#: catalog/index.c:2831 #, c-format msgid "building index \"%s\" on table \"%s\" serially" msgstr "テーブル\"%2$s\"のインデックス\"%1$s\"を非並列で構築しています" -#: catalog/index.c:2805 +#: catalog/index.c:2836 #, c-format msgid "building index \"%s\" on table \"%s\" with request for %d parallel worker" msgid_plural "building index \"%s\" on table \"%s\" with request for %d parallel workers" msgstr[0] "テーブル\"%2$s\"のインデックス\"%1$s\"を%3$d個のパラレルワーカを要求して構築しています" msgstr[1] "テーブル\"%2$s\"のインデックス\"%1$s\"を%3$d個のパラレルワーカを要求して構築しています" -#: catalog/index.c:3433 +#: catalog/index.c:3464 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "他のセッションの一時テーブルはインデクス再構築できません" -#: catalog/index.c:3564 +#: catalog/index.c:3475 +#, c-format +msgid "cannot reindex invalid index on TOAST table" +msgstr "TOASTテーブルの無効なインデックスの再作成はできません" + +#: catalog/index.c:3597 #, c-format msgid "index \"%s\" was reindexed" msgstr "インデックス\"%s\"のインデックス再構築が完了しました" -#: catalog/index.c:3638 commands/indexcmds.c:2884 +#: catalog/index.c:3673 commands/indexcmds.c:3017 #, c-format msgid "REINDEX of partitioned tables is not yet implemented, skipping \"%s\"" msgstr "パーティションテーブルの REINDEX は実装されていません、\"%s\"はスキップします" -#: catalog/namespace.c:249 catalog/namespace.c:453 catalog/namespace.c:545 -#: commands/trigger.c:5396 +#: catalog/index.c:3728 +#, c-format +msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" +msgstr "TOASTテーブルの無効なインデックス \"%s.%s\"の再作成はできません、スキップします " + +#: catalog/namespace.c:257 catalog/namespace.c:461 catalog/namespace.c:553 commands/trigger.c:5043 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "データベース間の参照は実装されていません: \"%s.%s.%s\"" -#: catalog/namespace.c:306 +#: catalog/namespace.c:314 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "一時テーブルにはスキーマ名を指定できません" -#: catalog/namespace.c:387 +#: catalog/namespace.c:395 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "リレーション\"%s.%s\"のロックを取得できませんでした" -#: catalog/namespace.c:392 commands/lockcmds.c:162 commands/lockcmds.c:249 +#: catalog/namespace.c:400 commands/lockcmds.c:142 commands/lockcmds.c:227 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "リレーション\"%s\"のロックを取得できませんでした" -#: catalog/namespace.c:420 parser/parse_relation.c:1172 +#: catalog/namespace.c:428 parser/parse_relation.c:1357 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "リレーション\"%s.%s\"は存在しません" -#: catalog/namespace.c:425 parser/parse_relation.c:1185 -#: parser/parse_relation.c:1193 +#: catalog/namespace.c:433 parser/parse_relation.c:1370 parser/parse_relation.c:1378 #, c-format msgid "relation \"%s\" does not exist" msgstr "リレーション\"%s\"は存在しません" -#: catalog/namespace.c:491 catalog/namespace.c:3022 commands/extension.c:1469 -#: commands/extension.c:1475 +#: catalog/namespace.c:499 catalog/namespace.c:3030 commands/extension.c:1519 commands/extension.c:1525 #, c-format msgid "no schema has been selected to create in" msgstr "作成先のスキーマが選択されていません" -#: catalog/namespace.c:643 catalog/namespace.c:656 +#: catalog/namespace.c:651 catalog/namespace.c:664 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "他のセッションの一時スキーマの中にリレーションを作成できません" -#: catalog/namespace.c:647 +#: catalog/namespace.c:655 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "非一時スキーマの中に一時リレーションを作成できません" -#: catalog/namespace.c:662 +#: catalog/namespace.c:670 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "一時スキーマの中には一時リレーションしか作成できません" -#: catalog/namespace.c:2214 +#: catalog/namespace.c:2222 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "統計情報オブジェクト\"%s\"は存在しません" -#: catalog/namespace.c:2337 +#: catalog/namespace.c:2345 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "テキスト検索パーサ\"%s\"は存在しません" -#: catalog/namespace.c:2463 +#: catalog/namespace.c:2471 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "テキスト検索辞書\"%s\"は存在しません" -#: catalog/namespace.c:2590 +#: catalog/namespace.c:2598 #, c-format msgid "text search template \"%s\" does not exist" msgstr "テキスト検索テンプレート\"%s\"は存在しません" -#: catalog/namespace.c:2716 commands/tsearchcmds.c:1197 -#: utils/cache/ts_cache.c:617 +#: catalog/namespace.c:2724 commands/tsearchcmds.c:1123 utils/cache/ts_cache.c:617 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "テキスト検索設定\"%s\"は存在しません" -#: catalog/namespace.c:2829 parser/parse_expr.c:866 parser/parse_target.c:1221 +#: catalog/namespace.c:2837 parser/parse_expr.c:872 parser/parse_target.c:1228 #, c-format msgid "cross-database references are not implemented: %s" msgstr "データベース間の参照は実装されていません: %s" -#: catalog/namespace.c:2835 gram.y:14731 gram.y:16165 parser/parse_expr.c:873 -#: parser/parse_target.c:1228 +#: catalog/namespace.c:2843 gram.y:14743 gram.y:16189 parser/parse_expr.c:879 parser/parse_target.c:1235 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "修飾名が不適切です(ドット区切りの名前が多すぎます): %s" -#: catalog/namespace.c:2965 +#: catalog/namespace.c:2973 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "一時スキーマへ、または一時スキーマからオブジェクトを移動できません" -#: catalog/namespace.c:2971 +#: catalog/namespace.c:2979 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "TOASTスキーマへ、またはTOASTスキーマからオブジェクトを移動できません" -#: catalog/namespace.c:3044 commands/schemacmds.c:257 commands/schemacmds.c:337 -#: commands/tablecmds.c:1161 +#: catalog/namespace.c:3052 commands/schemacmds.c:233 commands/schemacmds.c:313 commands/tablecmds.c:1192 #, c-format msgid "schema \"%s\" does not exist" msgstr "スキーマ\"%s\"は存在しません" -#: catalog/namespace.c:3075 +#: catalog/namespace.c:3083 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "リレーション名が不適切です(ドット区切りの名前が多すぎます): %s" -#: catalog/namespace.c:3609 +#: catalog/namespace.c:3646 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "エンコーディング\"%2$s\"の照合順序\"%1$s\"は存在しません" -#: catalog/namespace.c:3664 +#: catalog/namespace.c:3701 #, c-format msgid "conversion \"%s\" does not exist" msgstr "変換\"%sは存在しません" -#: catalog/namespace.c:3904 +#: catalog/namespace.c:3965 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "データベース\"%s\"に一時テーブルを作成する権限がありません" -#: catalog/namespace.c:3920 +#: catalog/namespace.c:3981 #, c-format msgid "cannot create temporary tables during recovery" msgstr "リカバリ中は一時テーブルを作成できません" -#: catalog/namespace.c:3926 +#: catalog/namespace.c:3987 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "並行処理中は一時テーブルを作成できません" -#: catalog/namespace.c:4209 commands/tablespace.c:1205 commands/variable.c:64 -#: utils/misc/guc.c:10912 utils/misc/guc.c:10990 +#: catalog/namespace.c:4286 commands/tablespace.c:1205 commands/variable.c:64 utils/misc/guc.c:11134 utils/misc/guc.c:11212 #, c-format msgid "List syntax is invalid." msgstr "リスト文法が無効です" -#: catalog/objectaddress.c:1274 catalog/pg_publication.c:66 -#: commands/policy.c:95 commands/policy.c:395 commands/policy.c:485 -#: commands/tablecmds.c:224 commands/tablecmds.c:266 commands/tablecmds.c:1923 -#: commands/tablecmds.c:5186 commands/tablecmds.c:10418 +#: catalog/objectaddress.c:1370 catalog/pg_publication.c:57 commands/policy.c:95 commands/policy.c:395 commands/policy.c:485 commands/tablecmds.c:230 commands/tablecmds.c:272 commands/tablecmds.c:1976 commands/tablecmds.c:5539 commands/tablecmds.c:10946 #, c-format msgid "\"%s\" is not a table" msgstr "\"%s\"はテーブルではありません" -#: catalog/objectaddress.c:1281 commands/tablecmds.c:236 -#: commands/tablecmds.c:5216 commands/tablecmds.c:14953 commands/view.c:138 +#: catalog/objectaddress.c:1377 commands/tablecmds.c:242 commands/tablecmds.c:5569 commands/tablecmds.c:15568 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "\"%s\"はビューではありません" -#: catalog/objectaddress.c:1288 commands/matview.c:175 commands/tablecmds.c:242 -#: commands/tablecmds.c:14958 +#: catalog/objectaddress.c:1384 commands/matview.c:175 commands/tablecmds.c:248 commands/tablecmds.c:15573 #, c-format msgid "\"%s\" is not a materialized view" msgstr "\"%s\"は実体化ビューではありません" -#: catalog/objectaddress.c:1295 commands/tablecmds.c:260 -#: commands/tablecmds.c:5219 commands/tablecmds.c:14963 +#: catalog/objectaddress.c:1391 commands/tablecmds.c:266 commands/tablecmds.c:5572 commands/tablecmds.c:15578 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\"は外部テーブルではありません" -#: catalog/objectaddress.c:1336 +#: catalog/objectaddress.c:1432 #, c-format msgid "must specify relation and object name" msgstr "リレーションとオブジェクトの名前の指定が必要です" -#: catalog/objectaddress.c:1412 catalog/objectaddress.c:1465 +#: catalog/objectaddress.c:1508 catalog/objectaddress.c:1561 #, c-format msgid "column name must be qualified" msgstr "列名を修飾する必要があります" -#: catalog/objectaddress.c:1512 +#: catalog/objectaddress.c:1608 #, c-format msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "リレーション\"%2$s\"の列\"%1$s\"に対するデフォルト値が存在しません" -#: catalog/objectaddress.c:1549 commands/functioncmds.c:132 -#: commands/tablecmds.c:252 commands/typecmds.c:3321 parser/parse_type.c:244 -#: parser/parse_type.c:273 parser/parse_type.c:846 utils/adt/acl.c:4451 +#: catalog/objectaddress.c:1645 commands/functioncmds.c:133 commands/tablecmds.c:258 commands/typecmds.c:263 commands/typecmds.c:3275 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:845 utils/adt/acl.c:4436 #, c-format msgid "type \"%s\" does not exist" msgstr "型\"%s\"は存在しません" -#: catalog/objectaddress.c:1668 +#: catalog/objectaddress.c:1764 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "%4$sの演算子 %1$d (%2$s, %3$s) がありません" -#: catalog/objectaddress.c:1699 +#: catalog/objectaddress.c:1795 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "%4$s の関数 %1$d (%2$s, %3$s) がありません" -#: catalog/objectaddress.c:1750 catalog/objectaddress.c:1776 +#: catalog/objectaddress.c:1846 catalog/objectaddress.c:1872 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "ユーザ\"%s\"に対するユーザマッピングがサーバ\"%s\"には存在しません" -#: catalog/objectaddress.c:1765 commands/foreigncmds.c:433 -#: commands/foreigncmds.c:1016 commands/foreigncmds.c:1396 -#: foreign/foreign.c:723 +#: catalog/objectaddress.c:1861 commands/foreigncmds.c:430 commands/foreigncmds.c:988 commands/foreigncmds.c:1347 foreign/foreign.c:723 #, c-format msgid "server \"%s\" does not exist" msgstr "サーバ\"%s\"は存在しません" -#: catalog/objectaddress.c:1832 +#: catalog/objectaddress.c:1928 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "パブリケーション\"%2$s\"の発行リレーション\"%1$s\"は存在しません" -#: catalog/objectaddress.c:1894 +#: catalog/objectaddress.c:1990 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "デフォルトのACLオブジェクトタイプ\"%c\"は認識できません" -#: catalog/objectaddress.c:1895 +#: catalog/objectaddress.c:1991 #, c-format msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." msgstr "有効な値は \"%c\", \"%c\", \"%c\", \"%c\", \"%c\" です。" -#: catalog/objectaddress.c:1946 +#: catalog/objectaddress.c:2042 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "ユーザ\"%s\"に対する、名前空間\"%s\"の%sへのデフォルトのACLはありません" -#: catalog/objectaddress.c:1951 +#: catalog/objectaddress.c:2047 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "ユーザ\"%s\"に対する%sへのデフォルトACLは存在しません" -#: catalog/objectaddress.c:1978 catalog/objectaddress.c:2036 -#: catalog/objectaddress.c:2093 +#: catalog/objectaddress.c:2074 catalog/objectaddress.c:2132 catalog/objectaddress.c:2189 #, c-format msgid "name or argument lists may not contain nulls" msgstr "名前または引数のリストはnullを含むことができません" -#: catalog/objectaddress.c:2012 +#: catalog/objectaddress.c:2108 #, c-format msgid "unsupported object type \"%s\"" msgstr "サポートされないオブジェクトタイプ\"%s\"" -#: catalog/objectaddress.c:2032 catalog/objectaddress.c:2050 -#: catalog/objectaddress.c:2191 +#: catalog/objectaddress.c:2128 catalog/objectaddress.c:2146 catalog/objectaddress.c:2287 #, c-format msgid "name list length must be exactly %d" msgstr "名前リストの長さは正確に%dでなくてはなりません" -#: catalog/objectaddress.c:2054 +#: catalog/objectaddress.c:2150 #, c-format msgid "large object OID may not be null" msgstr "ラージオブジェクトのOIDはnullにはなり得ません" -#: catalog/objectaddress.c:2063 catalog/objectaddress.c:2126 -#: catalog/objectaddress.c:2133 +#: catalog/objectaddress.c:2159 catalog/objectaddress.c:2222 catalog/objectaddress.c:2229 #, c-format msgid "name list length must be at least %d" msgstr "名前リストの長さは%d以上でなくてはなりません" -#: catalog/objectaddress.c:2119 catalog/objectaddress.c:2140 +#: catalog/objectaddress.c:2215 catalog/objectaddress.c:2236 #, c-format msgid "argument list length must be exactly %d" msgstr "引数リストの長さはちょうど%dである必要があります" -#: catalog/objectaddress.c:2392 libpq/be-fsstubs.c:321 +#: catalog/objectaddress.c:2488 libpq/be-fsstubs.c:321 #, c-format msgid "must be owner of large object %u" msgstr "ラージオブジェクト %u の所有者である必要があります" -#: catalog/objectaddress.c:2407 commands/functioncmds.c:1535 +#: catalog/objectaddress.c:2503 commands/functioncmds.c:1445 #, c-format msgid "must be owner of type %s or type %s" msgstr "型%sまたは型%sの所有者である必要があります" -#: catalog/objectaddress.c:2457 catalog/objectaddress.c:2474 +#: catalog/objectaddress.c:2553 catalog/objectaddress.c:2570 #, c-format msgid "must be superuser" msgstr "スーパユーザである必要があります" -#: catalog/objectaddress.c:2464 +#: catalog/objectaddress.c:2560 #, c-format msgid "must have CREATEROLE privilege" msgstr "CREATEROLE 権限が必要です" -#: catalog/objectaddress.c:2543 +#: catalog/objectaddress.c:2639 #, c-format msgid "unrecognized object type \"%s\"" msgstr "認識されないオブジェクトタイプ\"%s\"" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2764 +#: catalog/objectaddress.c:2881 #, c-format msgid "column %s of %s" msgstr "%2$s の列 %1$s" -#: catalog/objectaddress.c:2774 +#: catalog/objectaddress.c:2895 #, c-format msgid "function %s" msgstr "関数%s" -#: catalog/objectaddress.c:2779 +#: catalog/objectaddress.c:2907 #, c-format msgid "type %s" msgstr "型%s" -#: catalog/objectaddress.c:2809 +#: catalog/objectaddress.c:2944 #, c-format msgid "cast from %s to %s" msgstr "%sから%sへの型変換" -#: catalog/objectaddress.c:2837 +#: catalog/objectaddress.c:2977 #, c-format msgid "collation %s" msgstr "照合順序%s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2863 +#: catalog/objectaddress.c:3008 #, c-format msgid "constraint %s on %s" msgstr "%2$sに対する制約%1$s" -#: catalog/objectaddress.c:2869 +#: catalog/objectaddress.c:3014 #, c-format msgid "constraint %s" msgstr "制約%s" -#: catalog/objectaddress.c:2896 +#: catalog/objectaddress.c:3046 #, c-format msgid "conversion %s" msgstr "変換%s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:2935 +#: catalog/objectaddress.c:3092 #, c-format msgid "default value for %s" msgstr "%s のデフォルト値" -#: catalog/objectaddress.c:2944 +#: catalog/objectaddress.c:3106 #, c-format msgid "language %s" msgstr "言語%s" -#: catalog/objectaddress.c:2949 +#: catalog/objectaddress.c:3114 #, c-format msgid "large object %u" msgstr "ラージオブジェクト%u" -#: catalog/objectaddress.c:2954 +#: catalog/objectaddress.c:3127 #, c-format msgid "operator %s" msgstr "演算子%s" -#: catalog/objectaddress.c:2986 +#: catalog/objectaddress.c:3164 #, c-format msgid "operator class %s for access method %s" msgstr "アクセスメソッド%2$s用の演算子クラス%1$s" -#: catalog/objectaddress.c:3009 +#: catalog/objectaddress.c:3192 #, c-format msgid "access method %s" msgstr "アクセスメソッド%s" @@ -4467,7 +4348,7 @@ msgstr "アクセスメソッド%s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3051 +#: catalog/objectaddress.c:3241 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "%4$sの演算子%1$d (%2$s, %3$s): %5$s" @@ -4476,393 +4357,363 @@ msgstr "%4$sの演算子%1$d (%2$s, %3$s): %5$s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3101 +#: catalog/objectaddress.c:3298 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "%4$s の関数 %1$d (%2$s, %3$s): %5$s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3145 +#: catalog/objectaddress.c:3350 #, c-format msgid "rule %s on %s" msgstr "%2$s のルール %1$s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3183 +#: catalog/objectaddress.c:3396 #, c-format msgid "trigger %s on %s" msgstr "%2$s のトリガ %1$s" -#: catalog/objectaddress.c:3199 +#: catalog/objectaddress.c:3416 #, c-format msgid "schema %s" msgstr "スキーマ%s" -#: catalog/objectaddress.c:3222 +#: catalog/objectaddress.c:3444 #, c-format msgid "statistics object %s" msgstr "統計オブジェクト%s" -#: catalog/objectaddress.c:3249 +#: catalog/objectaddress.c:3475 #, c-format msgid "text search parser %s" msgstr "テキスト検索パーサ%s" -#: catalog/objectaddress.c:3275 +#: catalog/objectaddress.c:3506 #, c-format msgid "text search dictionary %s" msgstr "テキスト検索辞書%s" -#: catalog/objectaddress.c:3301 +#: catalog/objectaddress.c:3537 #, c-format msgid "text search template %s" msgstr "テキスト検索テンプレート%s" -#: catalog/objectaddress.c:3327 +#: catalog/objectaddress.c:3568 #, c-format msgid "text search configuration %s" msgstr "テキスト検索設定%s" -#: catalog/objectaddress.c:3336 +#: catalog/objectaddress.c:3581 #, c-format msgid "role %s" msgstr "ロール%s" -#: catalog/objectaddress.c:3349 +#: catalog/objectaddress.c:3597 #, c-format msgid "database %s" msgstr "データベース%s" -#: catalog/objectaddress.c:3361 +#: catalog/objectaddress.c:3613 #, c-format msgid "tablespace %s" msgstr "テーブル空間%s" -#: catalog/objectaddress.c:3370 +#: catalog/objectaddress.c:3624 #, c-format msgid "foreign-data wrapper %s" msgstr "外部データラッパー%s" -#: catalog/objectaddress.c:3379 +#: catalog/objectaddress.c:3634 #, c-format msgid "server %s" msgstr "サーバ%s" -#: catalog/objectaddress.c:3407 +#: catalog/objectaddress.c:3667 #, c-format msgid "user mapping for %s on server %s" msgstr "サーバ%2$s上のユーザマッピング%1$s" -#: catalog/objectaddress.c:3452 +#: catalog/objectaddress.c:3719 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "スキーマ %2$s のロール %1$s のものである新しいリレーションのデフォルト権限" -#: catalog/objectaddress.c:3456 +#: catalog/objectaddress.c:3723 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "新しいリレーションに関するデフォルトの権限は、ロール%sに属します。" -#: catalog/objectaddress.c:3462 +#: catalog/objectaddress.c:3729 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "スキーマ %2$s のロール %1$s のものである新しいシーケンスのデフォルト権限" -#: catalog/objectaddress.c:3466 +#: catalog/objectaddress.c:3733 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "新しいシーケンスに関するデフォルトの権限は、ロール%sに属します。" -#: catalog/objectaddress.c:3472 +#: catalog/objectaddress.c:3739 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "スキーマ %2$s のロール %1$s のものである新しい関数のデフォルト権限" -#: catalog/objectaddress.c:3476 +#: catalog/objectaddress.c:3743 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "新しい関数に関するデフォルトの権限は、ロール%sに属します。" -#: catalog/objectaddress.c:3482 +#: catalog/objectaddress.c:3749 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "スキーマ %2$s のロール %1$s のものである新しい型のデフォルト権限" -#: catalog/objectaddress.c:3486 +#: catalog/objectaddress.c:3753 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "新しい型に関するデフォルトの権限は、ロール%sに属します" -#: catalog/objectaddress.c:3492 +#: catalog/objectaddress.c:3759 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "ロール%sに属する新しいスキーマ上のデフォルト権限" -#: catalog/objectaddress.c:3499 +#: catalog/objectaddress.c:3766 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "スキーマ %2$s のロール %1$s に属するデフォルト権限" -#: catalog/objectaddress.c:3503 +#: catalog/objectaddress.c:3770 #, c-format msgid "default privileges belonging to role %s" msgstr "デフォルトの権限はロール%sに属します。" -#: catalog/objectaddress.c:3521 +#: catalog/objectaddress.c:3792 #, c-format msgid "extension %s" msgstr "機能拡張%s" -#: catalog/objectaddress.c:3534 +#: catalog/objectaddress.c:3809 #, c-format msgid "event trigger %s" msgstr "イベントトリガ%s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3570 +#: catalog/objectaddress.c:3853 #, c-format msgid "policy %s on %s" msgstr "%2$s のポリシ %1$s" -#: catalog/objectaddress.c:3580 +#: catalog/objectaddress.c:3866 #, c-format msgid "publication %s" msgstr "パブリケーション%s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3606 +#: catalog/objectaddress.c:3894 #, c-format msgid "publication of %s in publication %s" msgstr "パブリケーション %2$s での %1$s の発行" -#: catalog/objectaddress.c:3615 +#: catalog/objectaddress.c:3906 #, c-format msgid "subscription %s" msgstr "サブスクリプション%s" -#: catalog/objectaddress.c:3634 +#: catalog/objectaddress.c:3927 #, c-format msgid "transform for %s language %s" msgstr "言語%2$sの%1$s型に対する変換" -#: catalog/objectaddress.c:3697 +#: catalog/objectaddress.c:3998 #, c-format msgid "table %s" msgstr "テーブル%s" -#: catalog/objectaddress.c:3702 +#: catalog/objectaddress.c:4003 #, c-format msgid "index %s" msgstr "インデックス%s" -#: catalog/objectaddress.c:3706 +#: catalog/objectaddress.c:4007 #, c-format msgid "sequence %s" msgstr "シーケンス%s" -#: catalog/objectaddress.c:3710 +#: catalog/objectaddress.c:4011 #, c-format msgid "toast table %s" msgstr "TOASTテーブル%s" -#: catalog/objectaddress.c:3714 +#: catalog/objectaddress.c:4015 #, c-format msgid "view %s" msgstr "ビュー%s" -#: catalog/objectaddress.c:3718 +#: catalog/objectaddress.c:4019 #, c-format msgid "materialized view %s" msgstr "実体化ビュー%s" -#: catalog/objectaddress.c:3722 +#: catalog/objectaddress.c:4023 #, c-format msgid "composite type %s" msgstr "複合型%s" -#: catalog/objectaddress.c:3726 +#: catalog/objectaddress.c:4027 #, c-format msgid "foreign table %s" msgstr "外部テーブル%s" -#: catalog/objectaddress.c:3731 +#: catalog/objectaddress.c:4032 #, c-format msgid "relation %s" msgstr "リレーション%s" -#: catalog/objectaddress.c:3768 +#: catalog/objectaddress.c:4073 #, c-format msgid "operator family %s for access method %s" msgstr "アクセスメソッド%2$sの演算子族%1$s" -#: catalog/partition.c:214 commands/analyze.c:1359 commands/indexcmds.c:1092 -#: commands/tablecmds.c:1092 commands/tablecmds.c:8207 -#: commands/tablecmds.c:8350 commands/tablecmds.c:8541 -#: commands/tablecmds.c:8678 commands/tablecmds.c:10509 -#: commands/tablecmds.c:15896 commands/tablecmds.c:16473 -#: executor/execExprInterp.c:3303 executor/execMain.c:1863 -#: executor/execMain.c:1949 executor/execMain.c:1999 executor/execMain.c:2107 -#: executor/execPartition.c:590 executor/execPartition.c:650 -#: executor/execPartition.c:794 executor/execPartition.c:908 -#: executor/execPartition.c:941 executor/execPartition.c:1046 -#: executor/nodeModifyTable.c:1960 -msgid "could not convert row type" -msgstr "行型に変換できませんでした" - -#: catalog/pg_aggregate.c:129 +#: catalog/pg_aggregate.c:128 #, c-format msgid "aggregates cannot have more than %d argument" msgid_plural "aggregates cannot have more than %d arguments" msgstr[0] "集約は%d個以上の引数を取ることはできません" msgstr[1] "集約は%d個以上の引数を取ることはできません" -#: catalog/pg_aggregate.c:152 catalog/pg_aggregate.c:162 +#: catalog/pg_aggregate.c:143 catalog/pg_aggregate.c:157 #, c-format msgid "cannot determine transition data type" msgstr "遷移データ型を決定できません" -#: catalog/pg_aggregate.c:153 catalog/pg_aggregate.c:163 -#, c-format -msgid "An aggregate using a polymorphic transition type must have at least one polymorphic argument." -msgstr "遷移多様型を用いる集約は多様型の引数を少なくとも1つ取る必要があります。" - -#: catalog/pg_aggregate.c:176 +#: catalog/pg_aggregate.c:172 #, c-format msgid "a variadic ordered-set aggregate must use VARIADIC type ANY" msgstr "可変長引数の順序集合集約はVARIADIC型のANYを使う必要があります" -#: catalog/pg_aggregate.c:202 +#: catalog/pg_aggregate.c:198 #, c-format msgid "a hypothetical-set aggregate must have direct arguments matching its aggregated arguments" msgstr "仮説集合集約は集約された引数に適合する直接引数を持つ必要があります" -#: catalog/pg_aggregate.c:249 catalog/pg_aggregate.c:293 +#: catalog/pg_aggregate.c:245 catalog/pg_aggregate.c:289 #, c-format msgid "return type of transition function %s is not %s" msgstr "遷移関数の戻り値型%sは%sではありません" -#: catalog/pg_aggregate.c:269 catalog/pg_aggregate.c:312 +#: catalog/pg_aggregate.c:265 catalog/pg_aggregate.c:308 #, c-format msgid "must not omit initial value when transition function is strict and transition type is not compatible with input type" msgstr "遷移関数がSTRICTかつ遷移用の型が入力型とバイナリ互換がない場合初期値を省略してはなりません" -#: catalog/pg_aggregate.c:338 +#: catalog/pg_aggregate.c:334 #, c-format msgid "return type of inverse transition function %s is not %s" msgstr "逆遷移関数%sの戻り値の型が%sではありません" -#: catalog/pg_aggregate.c:355 executor/nodeWindowAgg.c:2851 +#: catalog/pg_aggregate.c:351 executor/nodeWindowAgg.c:2852 #, c-format msgid "strictness of aggregate's forward and inverse transition functions must match" msgstr "集約の前進と反転の遷移関数のSTRICT属性は一致している必要があります" -#: catalog/pg_aggregate.c:399 catalog/pg_aggregate.c:552 +#: catalog/pg_aggregate.c:395 catalog/pg_aggregate.c:553 #, c-format msgid "final function with extra arguments must not be declared STRICT" msgstr "追加の引数を持つ最終関数はSTRICT宣言できません" -#: catalog/pg_aggregate.c:430 +#: catalog/pg_aggregate.c:426 #, c-format msgid "return type of combine function %s is not %s" msgstr "結合関数%sの戻り値の型が%sではありません" -#: catalog/pg_aggregate.c:442 executor/nodeAgg.c:3003 +#: catalog/pg_aggregate.c:438 executor/nodeAgg.c:4173 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "遷移タイプ%sの結合関数はSTRICT宣言できません" -#: catalog/pg_aggregate.c:461 +#: catalog/pg_aggregate.c:457 #, c-format msgid "return type of serialization function %s is not %s" msgstr "直列化関数%sの戻り値の型が%sではありません" -#: catalog/pg_aggregate.c:482 +#: catalog/pg_aggregate.c:478 #, c-format msgid "return type of deserialization function %s is not %s" msgstr "復元関数%sの戻り値の型が%sではありません" -#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:243 catalog/pg_proc.c:250 +#: catalog/pg_aggregate.c:497 catalog/pg_proc.c:186 catalog/pg_proc.c:220 #, c-format msgid "cannot determine result data type" msgstr "結果のデータ型を決定できません" -#: catalog/pg_aggregate.c:499 -#, c-format -msgid "An aggregate returning a polymorphic type must have at least one polymorphic argument." -msgstr "多様型を返す集約は少なくとも1つの多様型の引数を取る必要があります。" - -#: catalog/pg_aggregate.c:511 catalog/pg_proc.c:256 +#: catalog/pg_aggregate.c:512 catalog/pg_proc.c:199 catalog/pg_proc.c:228 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "\"internal\"疑似型の安全ではない使用" -#: catalog/pg_aggregate.c:512 catalog/pg_proc.c:257 -#, c-format -msgid "A function returning \"internal\" must have at least one \"internal\" argument." -msgstr "\"internal\"\"を返す関数は少なくとも1つの\"internal\"型の引数を取る必要があります。" - -#: catalog/pg_aggregate.c:565 +#: catalog/pg_aggregate.c:566 #, c-format msgid "moving-aggregate implementation returns type %s, but plain implementation returns type %s" msgstr "移動集約の実装が%s型を返却しました、しかし普通の実装の方は%s型を返却しています" -#: catalog/pg_aggregate.c:576 +#: catalog/pg_aggregate.c:577 #, c-format msgid "sort operator can only be specified for single-argument aggregates" msgstr "ソート演算子は単一引数の集約でのみ指定可能です" -#: catalog/pg_aggregate.c:703 catalog/pg_proc.c:396 +#: catalog/pg_aggregate.c:704 catalog/pg_proc.c:374 #, c-format msgid "cannot change routine kind" msgstr "ルーチンの種別は変更できません" -#: catalog/pg_aggregate.c:705 +#: catalog/pg_aggregate.c:706 #, c-format msgid "\"%s\" is an ordinary aggregate function." msgstr "\"%s\"は通常の集約関数です。" -#: catalog/pg_aggregate.c:707 +#: catalog/pg_aggregate.c:708 #, c-format msgid "\"%s\" is an ordered-set aggregate." msgstr "\"%s\"は順序集合集約です。" -#: catalog/pg_aggregate.c:709 +#: catalog/pg_aggregate.c:710 #, c-format msgid "\"%s\" is a hypothetical-set aggregate." msgstr "\"%s\"は仮説集合集約です。" -#: catalog/pg_aggregate.c:714 -#, fuzzy, c-format -#| msgid "cannot change number of direct args of an aggregate function" +#: catalog/pg_aggregate.c:715 +#, c-format msgid "cannot change number of direct arguments of an aggregate function" msgstr "集約関数の直接引数の数は変更できません" -#: catalog/pg_aggregate.c:869 commands/functioncmds.c:665 -#: commands/typecmds.c:1751 commands/typecmds.c:1802 commands/typecmds.c:1833 -#: commands/typecmds.c:1856 commands/typecmds.c:1877 commands/typecmds.c:1904 -#: commands/typecmds.c:1931 commands/typecmds.c:2008 commands/typecmds.c:2050 -#: parser/parse_func.c:418 parser/parse_func.c:447 parser/parse_func.c:472 -#: parser/parse_func.c:486 parser/parse_func.c:606 parser/parse_func.c:626 -#: parser/parse_func.c:2144 parser/parse_func.c:2335 +#: catalog/pg_aggregate.c:852 commands/functioncmds.c:667 commands/typecmds.c:1658 commands/typecmds.c:1704 commands/typecmds.c:1756 commands/typecmds.c:1793 commands/typecmds.c:1827 commands/typecmds.c:1861 commands/typecmds.c:1895 commands/typecmds.c:1972 commands/typecmds.c:2014 parser/parse_func.c:414 parser/parse_func.c:443 parser/parse_func.c:468 parser/parse_func.c:482 parser/parse_func.c:602 parser/parse_func.c:622 parser/parse_func.c:2129 +#: parser/parse_func.c:2320 #, c-format msgid "function %s does not exist" msgstr "関数%sは存在しません" -#: catalog/pg_aggregate.c:875 +#: catalog/pg_aggregate.c:858 #, c-format msgid "function %s returns a set" msgstr "関数%sは集合を返します" -#: catalog/pg_aggregate.c:890 +#: catalog/pg_aggregate.c:873 #, c-format msgid "function %s must accept VARIADIC ANY to be used in this aggregate" msgstr "この集約で使うには関数%sは VARIADIC ANY を受け付ける必要があります" -#: catalog/pg_aggregate.c:914 +#: catalog/pg_aggregate.c:897 #, c-format msgid "function %s requires run-time type coercion" msgstr "関数%sは実行時の型強制が必要です" +#: catalog/pg_cast.c:67 +#, c-format +msgid "cast from type %s to type %s already exists" +msgstr "型%sから型%sへのキャストはすでに存在しています" + #: catalog/pg_collation.c:93 catalog/pg_collation.c:140 #, c-format msgid "collation \"%s\" already exists, skipping" @@ -4883,17 +4734,17 @@ msgstr "照合順序\"%s\"はすでに存在します" msgid "collation \"%s\" for encoding \"%s\" already exists" msgstr "エンコーディング\"%2$s\"の照合順序\"%1$s\"はすでに存在します" -#: catalog/pg_constraint.c:677 +#: catalog/pg_constraint.c:662 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "ドメイン\"%2$s\"の制約\"%1$s\"はすでに存在します" -#: catalog/pg_constraint.c:875 catalog/pg_constraint.c:968 +#: catalog/pg_constraint.c:858 catalog/pg_constraint.c:951 #, c-format msgid "constraint \"%s\" for table \"%s\" does not exist" msgstr "テーブル\"%2$s\"の制約\"%1$s\"は存在しません" -#: catalog/pg_constraint.c:1057 +#: catalog/pg_constraint.c:1040 #, c-format msgid "constraint \"%s\" for domain %s does not exist" msgstr "ドメイン\"%2$s\"に対する制約\"%1$s\"は存在しません" @@ -4908,52 +4759,52 @@ msgstr "変換\"%s\"はすでに存在します" msgid "default conversion for %s to %s already exists" msgstr "%sから%sへのデフォルトの変換はすでに存在します" -#: catalog/pg_depend.c:162 commands/extension.c:3229 +#: catalog/pg_depend.c:162 commands/extension.c:3343 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%sはすでに機能拡張\"%s\"のメンバです" -#: catalog/pg_depend.c:489 +#: catalog/pg_depend.c:538 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "システムオブジェクトであるため、%sの依存関係を削除できません。" -#: catalog/pg_enum.c:128 catalog/pg_enum.c:231 catalog/pg_enum.c:526 +#: catalog/pg_enum.c:127 catalog/pg_enum.c:230 catalog/pg_enum.c:525 #, c-format msgid "invalid enum label \"%s\"" msgstr "列挙ラベル\"%s\"は不正です" -#: catalog/pg_enum.c:129 catalog/pg_enum.c:232 catalog/pg_enum.c:527 +#: catalog/pg_enum.c:128 catalog/pg_enum.c:231 catalog/pg_enum.c:526 #, c-format msgid "Labels must be %d characters or less." msgstr "ラベルは%d文字数以内でなければなりません" -#: catalog/pg_enum.c:260 +#: catalog/pg_enum.c:259 #, c-format msgid "enum label \"%s\" already exists, skipping" msgstr "列挙ラベル\"%s\"はすでに存在します、スキップします" -#: catalog/pg_enum.c:267 catalog/pg_enum.c:570 +#: catalog/pg_enum.c:266 catalog/pg_enum.c:569 #, c-format msgid "enum label \"%s\" already exists" msgstr "列挙ラベル\"%s\"はすでに存在します" -#: catalog/pg_enum.c:322 catalog/pg_enum.c:565 +#: catalog/pg_enum.c:321 catalog/pg_enum.c:564 #, c-format msgid "\"%s\" is not an existing enum label" msgstr "\"%s\"は既存の列挙型ラベルではありません" -#: catalog/pg_enum.c:380 +#: catalog/pg_enum.c:379 #, c-format msgid "pg_enum OID value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中に pg_enum のOIDが設定されていません" -#: catalog/pg_enum.c:390 +#: catalog/pg_enum.c:389 #, c-format msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" msgstr "ALTER TYPE ADD BEFORE/AFTER はバイナリアップグレードでは互換性がありません" -#: catalog/pg_namespace.c:64 commands/schemacmds.c:266 +#: catalog/pg_namespace.c:64 commands/schemacmds.c:242 #, c-format msgid "schema \"%s\" already exists" msgstr "スキーマ\"%s\"はすでに存在します" @@ -4968,7 +4819,7 @@ msgstr "\"%s\"は有効な演算子名ではありません" msgid "only binary operators can have commutators" msgstr "二項演算子のみが交換子を持つことができます" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:485 +#: catalog/pg_operator.c:374 commands/operatorcmds.c:495 #, c-format msgid "only binary operators can have join selectivity" msgstr "二項演算子のみが結合選択性を持つことができます" @@ -4988,12 +4839,12 @@ msgstr "二項演算子のみがハッシュ可能です" msgid "only boolean operators can have negators" msgstr "ブール型演算子のみが否定演算子を持つことができます" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:493 +#: catalog/pg_operator.c:397 commands/operatorcmds.c:503 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "ブール型演算子のみが制限選択率を持つことができます" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:497 +#: catalog/pg_operator.c:401 commands/operatorcmds.c:507 #, c-format msgid "only boolean operators can have join selectivity" msgstr "ブール型演算子のみが結合選択率を持つことができます" @@ -5018,54 +4869,44 @@ msgstr "演算子%sはすでに存在します" msgid "operator cannot be its own negator or sort operator" msgstr "演算子は自身の否定子やソート演算子になることはできません" -#: catalog/pg_proc.c:131 parser/parse_func.c:2206 +#: catalog/pg_proc.c:127 parser/parse_func.c:2191 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" msgstr[0] "関数は%dを超える引数を取ることができません" msgstr[1] "関数は%d個を超える引数を取ることができません" -#: catalog/pg_proc.c:244 -#, c-format -msgid "A function returning a polymorphic type must have at least one polymorphic argument." -msgstr "多様型を返す関数は少なくとも1つの多様型の引数を取る必要があります。" - -#: catalog/pg_proc.c:251 -#, c-format -msgid "A function returning \"anyrange\" must have at least one \"anyrange\" argument." -msgstr "\"anyrange\"を返す関数は少なくとも1つの\"anyrange\"型の引数を取る必要があります。" - -#: catalog/pg_proc.c:386 +#: catalog/pg_proc.c:364 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "同じ引数型を持つ関数\"%s\"はすでに存在します" -#: catalog/pg_proc.c:398 +#: catalog/pg_proc.c:376 #, c-format msgid "\"%s\" is an aggregate function." msgstr "\"%s\"は集約関数です。" -#: catalog/pg_proc.c:400 +#: catalog/pg_proc.c:378 #, c-format msgid "\"%s\" is a function." msgstr "\"%s\"は関数です。" -#: catalog/pg_proc.c:402 +#: catalog/pg_proc.c:380 #, c-format msgid "\"%s\" is a procedure." msgstr "\"%s\"はプロシージャです。" -#: catalog/pg_proc.c:404 +#: catalog/pg_proc.c:382 #, c-format msgid "\"%s\" is a window function." msgstr "関数\"%s\"はウィンドウ関数です。" -#: catalog/pg_proc.c:424 +#: catalog/pg_proc.c:402 #, c-format msgid "cannot change whether a procedure has output parameters" msgstr "プロシージャの出力パラメータの有無は変更できません" -#: catalog/pg_proc.c:425 catalog/pg_proc.c:455 +#: catalog/pg_proc.c:403 catalog/pg_proc.c:433 #, c-format msgid "cannot change return type of existing function" msgstr "既存の関数の戻り値型を変更できません" @@ -5074,104 +4915,87 @@ msgstr "既存の関数の戻り値型を変更できません" #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:431 catalog/pg_proc.c:458 catalog/pg_proc.c:503 -#: catalog/pg_proc.c:529 catalog/pg_proc.c:557 +#: catalog/pg_proc.c:409 catalog/pg_proc.c:436 catalog/pg_proc.c:481 catalog/pg_proc.c:507 catalog/pg_proc.c:533 #, c-format msgid "Use %s %s first." msgstr "まず %s %s を使用してください。" -#: catalog/pg_proc.c:456 +#: catalog/pg_proc.c:434 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "OUTパラメータで定義された行型が異なります。" -#: catalog/pg_proc.c:500 +#: catalog/pg_proc.c:478 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "入力パラメーター\"%s\"の名称を変更できません" -#: catalog/pg_proc.c:527 +#: catalog/pg_proc.c:505 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "既存の関数からパラメータのデフォルト値を削除できません" -#: catalog/pg_proc.c:555 +#: catalog/pg_proc.c:531 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "既存のパラメータのデフォルト値のデータ型を変更できません" -#: catalog/pg_proc.c:772 +#: catalog/pg_proc.c:732 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "\"%s\"という名前の組み込み関数はありません" -#: catalog/pg_proc.c:870 +#: catalog/pg_proc.c:830 #, c-format msgid "SQL functions cannot return type %s" msgstr "SQL関数は型%sを返すことができません" -#: catalog/pg_proc.c:885 +#: catalog/pg_proc.c:845 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "SQL関数は型%sの引数と取ることができません" -#: catalog/pg_proc.c:973 executor/functions.c:1423 +#: catalog/pg_proc.c:938 executor/functions.c:1446 #, c-format msgid "SQL function \"%s\"" msgstr "SQL関数\"%s\"" -#: catalog/pg_publication.c:57 commands/trigger.c:238 commands/trigger.c:256 -#, c-format -msgid "\"%s\" is a partitioned table" -msgstr "\"%s\"はパーティションテーブルです" - #: catalog/pg_publication.c:59 #, c-format -msgid "Adding partitioned tables to publications is not supported." -msgstr "パブリケーションへのパーティションテーブルの追加はサポートされていません。" - -#: catalog/pg_publication.c:60 -#, c-format -msgid "You can add the table partitions individually." -msgstr "各パーティション個別になら追加は可能です。" - -#: catalog/pg_publication.c:68 -#, c-format msgid "Only tables can be added to publications." msgstr "パブリケーションにはテーブルのみが追加できます" -#: catalog/pg_publication.c:74 +#: catalog/pg_publication.c:65 #, c-format msgid "\"%s\" is a system table" msgstr "\"%s\"はシステムテーブルです" -#: catalog/pg_publication.c:76 +#: catalog/pg_publication.c:67 #, c-format msgid "System tables cannot be added to publications." msgstr "システムテーブルをパブリケーションに追加することはできません" -#: catalog/pg_publication.c:82 +#: catalog/pg_publication.c:73 #, c-format msgid "table \"%s\" cannot be replicated" msgstr "テーブル\"%s\"はレプリケーションできません" -#: catalog/pg_publication.c:84 +#: catalog/pg_publication.c:75 #, c-format msgid "Temporary and unlogged relations cannot be replicated." msgstr "一時テーブルとUNLOGGEDテーブルはレプリケーションできません" -#: catalog/pg_publication.c:182 +#: catalog/pg_publication.c:174 #, c-format msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "リレーション\"%s\"はすでにパブリケーション\"%s\"のメンバです" -#: catalog/pg_publication.c:418 catalog/pg_publication.c:440 -#: commands/publicationcmds.c:422 commands/publicationcmds.c:727 +#: catalog/pg_publication.c:470 commands/publicationcmds.c:451 commands/publicationcmds.c:739 #, c-format msgid "publication \"%s\" does not exist" msgstr "パブリケーション\"%s\"は存在しません" -#: catalog/pg_shdepend.c:777 +#: catalog/pg_shdepend.c:776 #, c-format msgid "" "\n" @@ -5186,61 +5010,60 @@ msgstr[1] "" "\n" "および、他の%dのデータベース内のオブジェクト(一覧についてはサーバログを参照してください)" -#: catalog/pg_shdepend.c:1083 +#: catalog/pg_shdepend.c:1122 #, c-format msgid "role %u was concurrently dropped" msgstr "ロール%uの削除が同時に行われました" -#: catalog/pg_shdepend.c:1102 +#: catalog/pg_shdepend.c:1141 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "テーブル空間%uの削除が同時に行われました" -#: catalog/pg_shdepend.c:1117 +#: catalog/pg_shdepend.c:1156 #, c-format msgid "database %u was concurrently dropped" msgstr "データベース%uの削除が同時に行われました" -#: catalog/pg_shdepend.c:1162 +#: catalog/pg_shdepend.c:1201 #, c-format msgid "owner of %s" msgstr "%sの所有者" -#: catalog/pg_shdepend.c:1164 +#: catalog/pg_shdepend.c:1203 #, c-format msgid "privileges for %s" msgstr "%sの権限" -#: catalog/pg_shdepend.c:1166 +#: catalog/pg_shdepend.c:1205 #, c-format msgid "target of %s" msgstr "%sの対象" #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1174 +#: catalog/pg_shdepend.c:1213 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" msgstr[0] "%2$s内の%1$d個のオブジェクト" msgstr[1] "%2$s内の%1$d個のオブジェクト" -#: catalog/pg_shdepend.c:1285 +#: catalog/pg_shdepend.c:1324 #, c-format msgid "cannot drop objects owned by %s because they are required by the database system" msgstr "データベースシステムが必要としているため%sが所有するオブジェクトを削除できません" -#: catalog/pg_shdepend.c:1408 +#: catalog/pg_shdepend.c:1471 #, c-format msgid "cannot reassign ownership of objects owned by %s because they are required by the database system" msgstr "データベースシステムが必要としているため%sが所有するオブジェクトの所有者を再割り当てできません" -#: catalog/pg_subscription.c:177 commands/subscriptioncmds.c:657 -#: commands/subscriptioncmds.c:871 commands/subscriptioncmds.c:1098 +#: catalog/pg_subscription.c:172 commands/subscriptioncmds.c:671 commands/subscriptioncmds.c:918 commands/subscriptioncmds.c:1140 #, c-format msgid "subscription \"%s\" does not exist" msgstr "サブスクリプション\"%s\"は存在しません" -#: catalog/pg_type.c:131 catalog/pg_type.c:467 +#: catalog/pg_type.c:131 catalog/pg_type.c:468 #, c-format msgid "pg_type OID value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にpg_typeのOIDが設定されていません" @@ -5250,8 +5073,7 @@ msgstr "バイナリアップグレードモード中にpg_typeのOIDが設定 msgid "invalid type internal size %d" msgstr "型の内部サイズ%dは不正です" -#: catalog/pg_type.c:265 catalog/pg_type.c:273 catalog/pg_type.c:281 -#: catalog/pg_type.c:290 +#: catalog/pg_type.c:265 catalog/pg_type.c:273 catalog/pg_type.c:281 catalog/pg_type.c:290 #, c-format msgid "alignment \"%c\" is invalid for passed-by-value type of size %d" msgstr "値渡し型でサイズが%2$dの場合、アラインメント\"%1$c\"は不正です" @@ -5261,28 +5083,27 @@ msgstr "値渡し型でサイズが%2$dの場合、アラインメント\"%1$c\" msgid "internal size %d is invalid for passed-by-value type" msgstr "値渡し型の場合、内部サイズ%dは不正です" -#: catalog/pg_type.c:306 catalog/pg_type.c:312 +#: catalog/pg_type.c:307 catalog/pg_type.c:313 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "可変長型の場合、アラインメント\"%c\"は不正です" -#: catalog/pg_type.c:320 +#: catalog/pg_type.c:321 commands/typecmds.c:3727 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "固定長型の場合はPLAIN格納方式でなければなりません" -#: catalog/pg_type.c:818 +#: catalog/pg_type.c:814 #, c-format msgid "could not form array type name for type \"%s\"" msgstr "\"%s\"型向けの配列型の名前を形成できませんでした" -#: catalog/storage.c:344 storage/buffer/bufmgr.c:922 +#: catalog/storage.c:449 storage/buffer/bufmgr.c:934 #, c-format msgid "invalid page in block %u of relation %s" msgstr "リレーション%2$sのブロック%1$uに不正なページ" -#: catalog/toasting.c:106 commands/indexcmds.c:577 commands/tablecmds.c:5198 -#: commands/tablecmds.c:14819 +#: catalog/toasting.c:103 commands/indexcmds.c:639 commands/tablecmds.c:5551 commands/tablecmds.c:15433 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\"はテーブルや実体化ビューではありません" @@ -5367,7 +5188,7 @@ msgstr "直列化関数は集約遷移データの型が%sの場合にだけ指 msgid "must specify both or neither of serialization and deserialization functions" msgstr "直列化関数と復元関数は両方指定するか、両方指定しないかのどちらかである必要があります" -#: commands/aggregatecmds.c:436 commands/functioncmds.c:613 +#: commands/aggregatecmds.c:436 commands/functioncmds.c:615 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "パラメータ\"parallel\"はSAVE、RESTRICTEDまたはUNSAFEのいずれかでなければなりません" @@ -5377,270 +5198,262 @@ msgstr "パラメータ\"parallel\"はSAVE、RESTRICTEDまたはUNSAFEのいず msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "パラメータ\"%s\"は READ_ONLY、SHAREABLE または READ_WRITE でなくてはなりません" -#: commands/alter.c:85 commands/event_trigger.c:236 +#: commands/alter.c:84 commands/event_trigger.c:174 #, c-format msgid "event trigger \"%s\" already exists" msgstr "イベントトリガ\"%s\"はすでに存在します" -#: commands/alter.c:88 commands/foreigncmds.c:601 +#: commands/alter.c:87 commands/foreigncmds.c:597 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "外部データラッパー\"%s\"はすでに存在します" -#: commands/alter.c:91 commands/foreigncmds.c:907 +#: commands/alter.c:90 commands/foreigncmds.c:879 #, c-format msgid "server \"%s\" already exists" msgstr "サーバ\"%s\"はすでに存在します" -#: commands/alter.c:94 commands/proclang.c:368 +#: commands/alter.c:93 commands/proclang.c:132 #, c-format msgid "language \"%s\" already exists" msgstr "言語\"%s\"はすでに存在します" -#: commands/alter.c:97 commands/publicationcmds.c:176 +#: commands/alter.c:96 commands/publicationcmds.c:183 #, c-format msgid "publication \"%s\" already exists" msgstr "パブリケーション\"%s\"はすでに存在します" -#: commands/alter.c:100 commands/subscriptioncmds.c:378 +#: commands/alter.c:99 commands/subscriptioncmds.c:397 #, c-format msgid "subscription \"%s\" already exists" msgstr "サブスクリプション\"%s\"はすでに存在します" -#: commands/alter.c:123 +#: commands/alter.c:122 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "変換\"%s\"はスキーマ\"%s\"内にすでに存在します" -#: commands/alter.c:127 +#: commands/alter.c:126 #, c-format msgid "statistics object \"%s\" already exists in schema \"%s\"" msgstr "統計情報オブジェクト\"%s\"はスキーマ\"%s\"内にすでに存在します" -#: commands/alter.c:131 +#: commands/alter.c:130 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "テキスト検索パーサ\"%s\"はすでにスキーマ\"%s\"存在します" -#: commands/alter.c:135 +#: commands/alter.c:134 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "テキスト検索辞書\"%s\"はすでにスキーマ\"%s\"存在します" -#: commands/alter.c:139 +#: commands/alter.c:138 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "テキスト検索テンプレート\"%s\"はすでにスキーマ\"%s\"存在します" -#: commands/alter.c:143 +#: commands/alter.c:142 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "テキスト検索設定\"%s\"はすでにスキーマ\"%s\"存在します" -#: commands/alter.c:217 +#: commands/alter.c:215 #, c-format msgid "must be superuser to rename %s" msgstr "%sの名前を変更するにはスーパユーザである必要があります" -#: commands/alter.c:720 +#: commands/alter.c:744 #, c-format msgid "must be superuser to set schema of %s" msgstr "%sのスキーマを設定するにはスーパユーザである必要があります" -#: commands/amcmds.c:59 +#: commands/amcmds.c:60 #, c-format msgid "permission denied to create access method \"%s\"" msgstr "アクセスメソッド\"%s\"を作成する権限がありません" -#: commands/amcmds.c:61 +#: commands/amcmds.c:62 #, c-format msgid "Must be superuser to create an access method." msgstr "アクセスメソッドを作成するにはスーパユーザである必要があります" -#: commands/amcmds.c:70 +#: commands/amcmds.c:71 #, c-format msgid "access method \"%s\" already exists" msgstr "アクセスメソッド\"%s\"は存在しません" -#: commands/amcmds.c:127 -#, c-format -msgid "must be superuser to drop access methods" -msgstr "アクセスメソッドを削除するにはスーパユーザである必要があります" - -#: commands/amcmds.c:178 commands/indexcmds.c:187 commands/indexcmds.c:722 -#: commands/opclasscmds.c:372 commands/opclasscmds.c:791 +#: commands/amcmds.c:154 commands/indexcmds.c:188 commands/indexcmds.c:790 commands/opclasscmds.c:370 commands/opclasscmds.c:824 #, c-format msgid "access method \"%s\" does not exist" msgstr "アクセスメソッド\"%s\"は存在しません" -#: commands/amcmds.c:267 +#: commands/amcmds.c:243 #, c-format msgid "handler function is not specified" msgstr "ハンドラ関数の指定がありません" -#: commands/amcmds.c:288 commands/event_trigger.c:245 -#: commands/foreigncmds.c:493 commands/proclang.c:115 commands/proclang.c:287 -#: commands/trigger.c:719 parser/parse_clause.c:950 +#: commands/amcmds.c:264 commands/event_trigger.c:183 commands/foreigncmds.c:489 commands/proclang.c:79 commands/trigger.c:687 parser/parse_clause.c:941 #, c-format msgid "function %s must return type %s" msgstr "関数%sは型%sを返さなければなりません" -#: commands/analyze.c:225 +#: commands/analyze.c:226 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "\"%s\"をスキップしています --- この外部テーブルに対してANALYZEを実行することはできません" -#: commands/analyze.c:242 +#: commands/analyze.c:243 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "\"%s\"をスキップしています --- テーブルでないものや特別なシステムテーブルに対してANALYZEを実行することはできません" -#: commands/analyze.c:323 +#: commands/analyze.c:318 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "\"%s.%s\"継承ツリーを解析しています" -#: commands/analyze.c:328 +#: commands/analyze.c:323 #, c-format msgid "analyzing \"%s.%s\"" msgstr "\"%s.%s\"を解析しています" -#: commands/analyze.c:388 +#: commands/analyze.c:383 #, c-format msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "リレーション\"%2$s\"の列\"%1$s\"が2回以上現れます" -#: commands/analyze.c:674 +#: commands/analyze.c:689 #, c-format msgid "automatic analyze of table \"%s.%s.%s\" system usage: %s" msgstr "テーブル\"%s.%s.%s\"の自動ANALYZE システム使用状況: %s\"" -#: commands/analyze.c:1133 +#: commands/analyze.c:1158 #, c-format msgid "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead rows; %d rows in sample, %.0f estimated total rows" msgstr "\"%1$s\": %3$uページの内%2$dをスキャン。%4$.0fの有効な行と%5$.0fの不要な行が存在。%6$d行をサンプリング。推定総行数は%7$.0f" -#: commands/analyze.c:1213 +#: commands/analyze.c:1238 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" msgstr "継承ツリー\"%s.%s\"のANALYZEをスキップします --- このツリーには子テーブルがありません" -#: commands/analyze.c:1311 +#: commands/analyze.c:1336 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "継承ツリー\"%s.%s\"のANALYZEをスキップします --- このツリーにはアナライズ可能な子テーブルがありません" -#: commands/async.c:557 +#: commands/async.c:631 #, c-format msgid "channel name cannot be empty" msgstr "チャネル名が空であることはできません" -#: commands/async.c:562 +#: commands/async.c:637 #, c-format msgid "channel name too long" msgstr "チャネル名が長すぎます" -#: commands/async.c:569 +#: commands/async.c:642 #, c-format msgid "payload string too long" msgstr "ペイロード文字列が長すぎます" -#: commands/async.c:755 +#: commands/async.c:861 #, c-format msgid "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" msgstr "LISTEN / UNLISTEN / NOTIFY を実行しているトランザクションは PREPARE できません" -#: commands/async.c:858 +#: commands/async.c:967 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "NOTIFY キューで発生した通知イベントが多すぎます" -#: commands/async.c:1490 +#: commands/async.c:1633 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "NOTYFY キューが %.0f%% まで一杯になっています" -#: commands/async.c:1492 +#: commands/async.c:1635 #, c-format msgid "The server process with PID %d is among those with the oldest transactions." msgstr "PID %d のサーバプロセスは、この中で最も古いトランザクションを実行中です。" -#: commands/async.c:1495 +#: commands/async.c:1638 #, c-format msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." msgstr "このプロセスが現在のトランザクションを終了するまで NOTYFY キューを空にすることはできません" -#: commands/cluster.c:126 commands/cluster.c:388 +#: commands/cluster.c:125 commands/cluster.c:362 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "他のセッションの一時テーブルをクラスタ化できません" -#: commands/cluster.c:134 +#: commands/cluster.c:133 #, c-format msgid "cannot cluster a partitioned table" msgstr "パーティションテーブルに対して CLUSTER は実行できません" -#: commands/cluster.c:164 +#: commands/cluster.c:151 #, c-format msgid "there is no previously clustered index for table \"%s\"" msgstr "テーブル\"%s\"には事前にクラスタ化されたインデックスはありません" -#: commands/cluster.c:178 commands/tablecmds.c:12085 commands/tablecmds.c:13887 +#: commands/cluster.c:165 commands/tablecmds.c:12709 commands/tablecmds.c:14515 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "テーブル\"%2$s\"にはインデックス\"%1$s\"は存在しません" -#: commands/cluster.c:377 +#: commands/cluster.c:351 #, c-format msgid "cannot cluster a shared catalog" msgstr "共有カタログをクラスタ化できません" -#: commands/cluster.c:392 +#: commands/cluster.c:366 #, c-format msgid "cannot vacuum temporary tables of other sessions" msgstr "他のセッションの一時テーブルに対してはVACUUMを実行できません" -#: commands/cluster.c:458 commands/tablecmds.c:13897 +#: commands/cluster.c:432 commands/tablecmds.c:14525 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\"はテーブル\"%s\"のインデックスではありません" -#: commands/cluster.c:466 +#: commands/cluster.c:440 #, c-format msgid "cannot cluster on index \"%s\" because access method does not support clustering" msgstr "インデックス\"%s\"でクラスタ化できません。アクセスメソッドがクラスタ化をサポートしないためです" -#: commands/cluster.c:478 +#: commands/cluster.c:452 #, c-format msgid "cannot cluster on partial index \"%s\"" msgstr "部分インデックス\"%s\"をクラスタ化できません" -#: commands/cluster.c:492 +#: commands/cluster.c:466 #, c-format msgid "cannot cluster on invalid index \"%s\"" msgstr "無効なインデックス\"%s\"ではクラスタ化できません" -#: commands/cluster.c:516 +#: commands/cluster.c:490 #, c-format msgid "cannot mark index clustered in partitioned table" msgstr "パーティションテーブル内のインデックスは CLUSTER 済みとマークできません`" -#: commands/cluster.c:899 +#: commands/cluster.c:863 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr "\"%3$s\"に対するインデックススキャンを使って\"%1$s.%2$s\"をクラスタ化しています" -#: commands/cluster.c:905 +#: commands/cluster.c:869 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "シーケンシャルスキャンとソートを使って\"%s.%s\"をクラスタ化しています" -#: commands/cluster.c:936 +#: commands/cluster.c:900 #, c-format msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" msgstr "\"%1$s\": 全 %4$u ページ中に見つかった行バージョン: 移動可能 %2$.0f 行、削除不可 %3$.0f 行" -#: commands/cluster.c:940 +#: commands/cluster.c:904 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -5649,97 +5462,92 @@ msgstr "" "%.0f 個の無効な行が今はまだ削除できません。\n" "%s." -#: commands/collationcmds.c:104 +#: commands/collationcmds.c:105 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "照合順序の属性\"%s\"が認識できません" -#: commands/collationcmds.c:147 +#: commands/collationcmds.c:148 #, c-format msgid "collation \"default\" cannot be copied" msgstr "照合順序\"default\"は複製できません" -#: commands/collationcmds.c:180 +#: commands/collationcmds.c:181 #, c-format msgid "unrecognized collation provider: %s" msgstr "認識できないの照合順序プロバイダ: %s" -#: commands/collationcmds.c:189 +#: commands/collationcmds.c:190 #, c-format msgid "parameter \"lc_collate\" must be specified" msgstr "\"lc_collate\"パラメータの指定が必要です" -#: commands/collationcmds.c:194 +#: commands/collationcmds.c:195 #, c-format msgid "parameter \"lc_ctype\" must be specified" msgstr "\"lc_ctype\"パラメータの指定が必要です" -#: commands/collationcmds.c:204 +#: commands/collationcmds.c:205 #, c-format msgid "nondeterministic collations not supported with this provider" msgstr "非決定的照合順序はこのプロバイダではサポートされません" -#: commands/collationcmds.c:264 +#: commands/collationcmds.c:265 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "エンコーディング\"%2$s\"のための照合順序\"%1$s\"はすでにスキーマ\"%3$s\"内に存在します" -#: commands/collationcmds.c:275 +#: commands/collationcmds.c:276 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "照合順序\"%s\"はすでにスキーマ\"%s\"内に存在します" -#: commands/collationcmds.c:323 +#: commands/collationcmds.c:324 #, c-format msgid "changing version from %s to %s" msgstr "バージョン%sから%sへの変更" -#: commands/collationcmds.c:338 +#: commands/collationcmds.c:339 #, c-format msgid "version has not changed" msgstr "バージョンが変わっていません" -#: commands/collationcmds.c:469 +#: commands/collationcmds.c:470 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "ロケール名\"%s\"を、言語タグに変換できませんでした: %s" -#: commands/collationcmds.c:530 +#: commands/collationcmds.c:531 #, c-format msgid "must be superuser to import system collations" msgstr "システム照合順序をインポートするにはスーパユーザである必要があります" -#: commands/collationcmds.c:553 commands/copy.c:1898 commands/copy.c:3534 -#: libpq/be-secure-common.c:80 +#: commands/collationcmds.c:554 commands/copy.c:1944 commands/copy.c:3536 libpq/be-secure-common.c:81 #, c-format msgid "could not execute command \"%s\": %m" msgstr "コマンド\"%s\"を実行できませんでした: %m" -#: commands/collationcmds.c:684 +#: commands/collationcmds.c:685 #, c-format msgid "no usable system locales were found" msgstr "使用できるシステムロケールが見つかりません" -#: commands/comment.c:61 commands/dbcommands.c:820 commands/dbcommands.c:1008 -#: commands/dbcommands.c:1121 commands/dbcommands.c:1311 -#: commands/dbcommands.c:1534 commands/dbcommands.c:1648 -#: commands/dbcommands.c:2065 utils/init/postinit.c:890 -#: utils/init/postinit.c:995 utils/init/postinit.c:1012 +#: commands/comment.c:61 commands/dbcommands.c:841 commands/dbcommands.c:1037 commands/dbcommands.c:1150 commands/dbcommands.c:1340 commands/dbcommands.c:1588 commands/dbcommands.c:1702 commands/dbcommands.c:2142 utils/init/postinit.c:892 utils/init/postinit.c:997 utils/init/postinit.c:1014 #, c-format msgid "database \"%s\" does not exist" msgstr "データベース\"%s\"は存在しません" -#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:944 +#: commands/comment.c:101 commands/seclabel.c:191 parser/parse_utilcmd.c:955 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" msgstr "\"%s\"はテーブル、ビュー、実体化ビュー、複合型、外部テーブルのいずれでもありません" -#: commands/constraint.c:63 utils/adt/ri_triggers.c:1915 +#: commands/constraint.c:63 utils/adt/ri_triggers.c:1923 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "関数\"%s\"はトリガ関数として呼び出されていません" -#: commands/constraint.c:70 utils/adt/ri_triggers.c:1924 +#: commands/constraint.c:70 utils/adt/ri_triggers.c:1932 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "関数\"%s\"はAFTER ROWトリガで実行してください" @@ -5749,793 +5557,797 @@ msgstr "関数\"%s\"はAFTER ROWトリガで実行してください" msgid "function \"%s\" must be fired for INSERT or UPDATE" msgstr "関数\"%s\"はINSERTまたはUPDATEトリガで実行してください" -#: commands/conversioncmds.c:65 +#: commands/conversioncmds.c:66 #, c-format msgid "source encoding \"%s\" does not exist" msgstr "変換元符号化方式\"%s\"は存在しません" -#: commands/conversioncmds.c:72 +#: commands/conversioncmds.c:73 #, c-format msgid "destination encoding \"%s\" does not exist" msgstr "変換先符号化方式\"%s\"は存在しません" #: commands/conversioncmds.c:86 #, c-format +msgid "encoding conversion to or from \"SQL_ASCII\" is not supported" +msgstr "SQL_ASCIIとの間のエンコーディング変換はサポートされていません" + +#: commands/conversioncmds.c:99 +#, c-format msgid "encoding conversion function %s must return type %s" msgstr "エンコード変換関数%sは%s型を返す必要があります" -#: commands/copy.c:427 commands/copy.c:461 +#: commands/copy.c:434 commands/copy.c:468 #, c-format msgid "COPY BINARY is not supported to stdout or from stdin" msgstr "標準入出力を介したCOPY BINARYはサポートされていません" -#: commands/copy.c:561 +#: commands/copy.c:568 #, c-format msgid "could not write to COPY program: %m" msgstr "COPYプログラムに書き出せませんでした: %m" -#: commands/copy.c:566 +#: commands/copy.c:573 #, c-format msgid "could not write to COPY file: %m" msgstr "COPYファイルに書き出せませんでした: %m" -#: commands/copy.c:579 +#: commands/copy.c:586 #, c-format msgid "connection lost during COPY to stdout" msgstr "標準出力へのCOPY中に接続が失われました" -#: commands/copy.c:623 +#: commands/copy.c:630 #, c-format msgid "could not read from COPY file: %m" msgstr "COPYファイルから読み込めませんでした: %m" -#: commands/copy.c:641 commands/copy.c:662 commands/copy.c:666 -#: tcop/postgres.c:348 tcop/postgres.c:384 tcop/postgres.c:411 +#: commands/copy.c:648 commands/copy.c:669 commands/copy.c:673 tcop/postgres.c:344 tcop/postgres.c:380 tcop/postgres.c:407 #, c-format msgid "unexpected EOF on client connection with an open transaction" msgstr "トランザクションを実行中のクライアント接続で想定外のEOFがありました" -#: commands/copy.c:679 +#: commands/copy.c:686 #, c-format msgid "COPY from stdin failed: %s" msgstr "標準入力からのCOPYが失敗しました: %s" -#: commands/copy.c:695 +#: commands/copy.c:702 #, c-format msgid "unexpected message type 0x%02X during COPY from stdin" msgstr "標準入力からのCOPY中に想定外のメッセージタイプ0x%02Xがありました" -#: commands/copy.c:862 +#: commands/copy.c:911 #, c-format msgid "must be superuser or a member of the pg_execute_server_program role to COPY to or from an external program" msgstr "外部プログラムを入出力対象としたCOPYを行うにはスーパユーザまたは pg_execute_server_program ロールのメンバである必要があります" -#: commands/copy.c:863 commands/copy.c:872 commands/copy.c:879 +#: commands/copy.c:912 commands/copy.c:921 commands/copy.c:928 #, c-format msgid "Anyone can COPY to stdout or from stdin. psql's \\copy command also works for anyone." msgstr "標準入出力経由のCOPYは誰でも実行可能です。またpsqlの\\\\copyも誰でも実行できます" -#: commands/copy.c:871 +#: commands/copy.c:920 #, c-format msgid "must be superuser or a member of the pg_read_server_files role to COPY from a file" msgstr "ファイルからの COPY を行うにはスーパユーザまたは pg_read_server_files ロールのメンバである必要があります" -#: commands/copy.c:878 +#: commands/copy.c:927 #, c-format msgid "must be superuser or a member of the pg_write_server_files role to COPY to a file" msgstr "ファイルへの COPY を行うにはスーパユーザまたは pg_write_server_files ロールのメンバである必要があります" -#: commands/copy.c:962 +#: commands/copy.c:1013 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM で行レベルセキュリティはサポートされていません" -#: commands/copy.c:963 +#: commands/copy.c:1014 #, c-format msgid "Use INSERT statements instead." msgstr "代わりにINSERTを文使用してください。" -#: commands/copy.c:1151 +#: commands/copy.c:1196 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "COPY フォーマット\"%s\"を認識できません" -#: commands/copy.c:1222 commands/copy.c:1238 commands/copy.c:1253 -#: commands/copy.c:1275 +#: commands/copy.c:1267 commands/copy.c:1283 commands/copy.c:1298 commands/copy.c:1320 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "オプション\"%s\"の引数は列名のリストでなければなりません" -#: commands/copy.c:1290 +#: commands/copy.c:1335 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "オプション\"%s\"の引数は有効なエンコーディング名でなければなりません" -#: commands/copy.c:1297 commands/dbcommands.c:243 commands/dbcommands.c:1482 +#: commands/copy.c:1342 commands/dbcommands.c:253 commands/dbcommands.c:1536 #, c-format msgid "option \"%s\" not recognized" msgstr "タイムゾーン\"%s\"を認識できません" -#: commands/copy.c:1309 +#: commands/copy.c:1354 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "BINARYモードではDELIMITERを指定できません" -#: commands/copy.c:1314 +#: commands/copy.c:1359 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "BINARYモードではNULLを指定できません" -#: commands/copy.c:1336 +#: commands/copy.c:1381 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "COPYの区切り文字は単一の1バイト文字でなければなりません" -#: commands/copy.c:1343 +#: commands/copy.c:1388 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "COPYの区切り文字は改行や復帰記号とすることができません" -#: commands/copy.c:1349 +#: commands/copy.c:1394 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "COPYのNULL表現には改行や復帰記号を使用することはできません" -#: commands/copy.c:1366 +#: commands/copy.c:1411 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "COPYの区切り文字を\"%s\"とすることはできません" -#: commands/copy.c:1372 +#: commands/copy.c:1417 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "COPY HEADERはCSVモードでのみ使用できます" -#: commands/copy.c:1378 +#: commands/copy.c:1423 #, c-format msgid "COPY quote available only in CSV mode" msgstr "COPYの引用符はCSVモードでのみ使用できます" -#: commands/copy.c:1383 +#: commands/copy.c:1428 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "COPYの引用符は単一の1バイト文字でなければなりません" -#: commands/copy.c:1388 +#: commands/copy.c:1433 #, c-format msgid "COPY delimiter and quote must be different" msgstr "COPYの区切り文字と引用符は異なる文字でなければなりません" -#: commands/copy.c:1394 +#: commands/copy.c:1439 #, c-format msgid "COPY escape available only in CSV mode" msgstr "COPYのエスケープはCSVモードでのみ使用できます" -#: commands/copy.c:1399 +#: commands/copy.c:1444 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "COPYのエスケープは単一の1バイト文字でなければなりません" -#: commands/copy.c:1405 +#: commands/copy.c:1450 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "COPYのFORCE_QUOTEオプションはCSVモードでのみ使用できます" -#: commands/copy.c:1409 +#: commands/copy.c:1454 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "COPYのFORCE_QUOTEオプションはCOPY TOでのみ使用できます" -#: commands/copy.c:1415 +#: commands/copy.c:1460 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "COPYのFORCE_NOT_NULLオプションはCSVモードでのみ使用できます" -#: commands/copy.c:1419 +#: commands/copy.c:1464 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "COPYのFORCE_NOT_NULLオプションはCOPY FROMでのみ使用できます" -#: commands/copy.c:1425 +#: commands/copy.c:1470 #, c-format msgid "COPY force null available only in CSV mode" msgstr "COPYのFORCE_NULLオプションはCSVモードでのみ使用できます" -#: commands/copy.c:1430 +#: commands/copy.c:1475 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "COPYのFORCE_NOT_NULLオプションはCOPY FROMでのみ使用できます" -#: commands/copy.c:1436 +#: commands/copy.c:1481 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "COPYの区切り文字をNULLオプションの値に使用できません" -#: commands/copy.c:1443 +#: commands/copy.c:1488 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "COPYの引用符をNULLオプションの値に使用できません" -#: commands/copy.c:1529 +#: commands/copy.c:1574 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for COPY" msgstr "DO INSTEAD NOTHING ルールは COPY ではサポートされていません" -#: commands/copy.c:1543 +#: commands/copy.c:1588 #, c-format msgid "conditional DO INSTEAD rules are not supported for COPY" msgstr "条件付き DO INSTEAD ルールは COPY ではサポートされていません" -#: commands/copy.c:1547 +#: commands/copy.c:1592 #, c-format msgid "DO ALSO rules are not supported for the COPY" msgstr "DO ALSO ルールは COPY ではサポートされていません" -#: commands/copy.c:1552 +#: commands/copy.c:1597 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for COPY" msgstr "マルチステートメントの DO INSTEAD ルールは COPY ではサポートされていません" -#: commands/copy.c:1562 +#: commands/copy.c:1607 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO)はサポートされていません" -#: commands/copy.c:1579 +#: commands/copy.c:1624 #, c-format msgid "COPY query must have a RETURNING clause" msgstr "COPY文中の問い合わせではRETURNING句が必須です" -#: commands/copy.c:1607 +#: commands/copy.c:1653 #, c-format msgid "relation referenced by COPY statement has changed" msgstr "COPY文で参照されているリレーションが変更されました" -#: commands/copy.c:1666 +#: commands/copy.c:1712 #, c-format msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" msgstr "FORCE_QUOTE指定された列\"%s\"はCOPYで参照されません" -#: commands/copy.c:1689 +#: commands/copy.c:1735 #, c-format msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" msgstr "FORCE_NOT_NULL指定された列\"%s\"はCOPYで参照されません" -#: commands/copy.c:1712 +#: commands/copy.c:1758 #, c-format msgid "FORCE_NULL column \"%s\" not referenced by COPY" msgstr "FORCE_NULL指定された列\"%s\"はCOPYで参照されません" -#: commands/copy.c:1778 libpq/be-secure-common.c:102 +#: commands/copy.c:1824 libpq/be-secure-common.c:105 #, c-format msgid "could not close pipe to external command: %m" msgstr "外部コマンドに対するパイプをクローズできませんでした: %m" -#: commands/copy.c:1793 +#: commands/copy.c:1839 #, c-format msgid "program \"%s\" failed" msgstr "プログラム\"%s\"の実行に失敗しました" -#: commands/copy.c:1844 +#: commands/copy.c:1890 #, c-format msgid "cannot copy from view \"%s\"" msgstr "ビュー\"%s\"からのコピーはできません" -#: commands/copy.c:1846 commands/copy.c:1852 commands/copy.c:1858 -#: commands/copy.c:1869 +#: commands/copy.c:1892 commands/copy.c:1898 commands/copy.c:1904 commands/copy.c:1915 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "COPY (SELECT ...) TO構文を試してください" -#: commands/copy.c:1850 +#: commands/copy.c:1896 #, c-format msgid "cannot copy from materialized view \"%s\"" msgstr "実体化ビュー\"%s\"からのコピーはできません" -#: commands/copy.c:1856 +#: commands/copy.c:1902 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "外部テーブル \"%s\" からのコピーはできません" -#: commands/copy.c:1862 +#: commands/copy.c:1908 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "シーケンス\"%s\"からのコピーはできません" -#: commands/copy.c:1867 +#: commands/copy.c:1913 #, c-format msgid "cannot copy from partitioned table \"%s\"" msgstr "パーティションテーブル\"%s\"からのコピーはできません" -#: commands/copy.c:1873 +#: commands/copy.c:1919 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "テーブル以外のリレーション\"%s\"からのコピーはできません" -#: commands/copy.c:1913 +#: commands/copy.c:1959 #, c-format msgid "relative path not allowed for COPY to file" msgstr "ファイルへのCOPYでは相対パスは指定できません" -#: commands/copy.c:1934 +#: commands/copy.c:1978 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "ファイル\"%s\"を書き込み用にオープンできませんでした: %m" -#: commands/copy.c:1937 +#: commands/copy.c:1981 #, c-format msgid "COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \\copy." msgstr "COPY TOによってPostgreSQLサーバプロセスはファイルの書き込みを行います。psqlの \\copy のようなクライアント側の仕組みが必要かもしれません" -#: commands/copy.c:1950 commands/copy.c:3565 +#: commands/copy.c:1994 commands/copy.c:3567 #, c-format msgid "\"%s\" is a directory" msgstr "\"%s\"はディレクトリです" -#: commands/copy.c:2252 +#: commands/copy.c:2296 #, c-format msgid "COPY %s, line %s, column %s" msgstr "%sのCOPY、行 %s、列 %s" -#: commands/copy.c:2256 commands/copy.c:2303 +#: commands/copy.c:2300 commands/copy.c:2347 #, c-format msgid "COPY %s, line %s" msgstr "%sのCOPY、行 %s" -#: commands/copy.c:2267 +#: commands/copy.c:2311 #, c-format msgid "COPY %s, line %s, column %s: \"%s\"" msgstr "%sのCOPY、行 %s、列 %s: \"%s\"" -#: commands/copy.c:2275 +#: commands/copy.c:2319 #, c-format msgid "COPY %s, line %s, column %s: null input" msgstr "%sのCOPY、行 %s、列 %s: null が入力されました" -#: commands/copy.c:2297 +#: commands/copy.c:2341 #, c-format msgid "COPY %s, line %s: \"%s\"" msgstr "%sのCOPY、行 %s: \"%s\"" -#: commands/copy.c:2698 +#: commands/copy.c:2741 #, c-format msgid "cannot copy to view \"%s\"" msgstr "ビュー\"%s\"へのコピーはできません" -#: commands/copy.c:2700 +#: commands/copy.c:2743 #, c-format msgid "To enable copying to a view, provide an INSTEAD OF INSERT trigger." msgstr "ビューへのコピーを可能にするためには、INSTEAD OF INSERTトリガを作成してください。" -#: commands/copy.c:2704 +#: commands/copy.c:2747 #, c-format msgid "cannot copy to materialized view \"%s\"" msgstr "実体化ビュー\"%s\"へのコピーはできません" -#: commands/copy.c:2709 +#: commands/copy.c:2752 #, c-format msgid "cannot copy to sequence \"%s\"" msgstr "シーケンス\"%s\"へのコピーはできません" -#: commands/copy.c:2714 +#: commands/copy.c:2757 #, c-format msgid "cannot copy to non-table relation \"%s\"" msgstr "テーブル以外のリレーション\"%s\"へのコピーはできません" -#: commands/copy.c:2802 +#: commands/copy.c:2797 #, c-format msgid "cannot perform COPY FREEZE on a partitioned table" msgstr "パーティション親テーブルに対して CLUSTER は実行できません" -#: commands/copy.c:2817 +#: commands/copy.c:2812 #, c-format msgid "cannot perform COPY FREEZE because of prior transaction activity" msgstr "先行するトランザクション処理のためCOPY FREEZEを実行することができません" -#: commands/copy.c:2823 +#: commands/copy.c:2818 #, c-format msgid "cannot perform COPY FREEZE because the table was not created or truncated in the current subtransaction" msgstr "このテーブルは現在のサブトランザクションにおいて作成または切り詰めされていないため、COPY FREEZEを実行することができません" -#: commands/copy.c:3552 +#: commands/copy.c:3554 #, c-format msgid "COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \\copy." msgstr "COPY FROMによってPostgreSQLサーバプロセスはファイルを読み込みます。psqlの \\copy のようなクライアント側の仕組みが必要かもしれません" -#: commands/copy.c:3580 +#: commands/copy.c:3582 #, c-format msgid "COPY file signature not recognized" msgstr "COPYファイルのシグネチャが不明です" -#: commands/copy.c:3585 +#: commands/copy.c:3587 #, c-format msgid "invalid COPY file header (missing flags)" msgstr "COPYファイルのヘッダが不正です(フラグがありません)" -#: commands/copy.c:3589 +#: commands/copy.c:3591 #, c-format msgid "invalid COPY file header (WITH OIDS)" msgstr "COPYファイルのヘッダが不正です(WITH OIDS)" -#: commands/copy.c:3594 +#: commands/copy.c:3596 #, c-format msgid "unrecognized critical flags in COPY file header" msgstr "COPYファイルのヘッダ内の重要なフラグが不明です" -#: commands/copy.c:3600 +#: commands/copy.c:3602 #, c-format msgid "invalid COPY file header (missing length)" msgstr "COPYファイルのヘッダが不正です(サイズがありません)" -#: commands/copy.c:3607 +#: commands/copy.c:3609 #, c-format msgid "invalid COPY file header (wrong length)" msgstr "COPYファイルのヘッダが不正です(サイズが不正です)" -#: commands/copy.c:3726 commands/copy.c:4391 commands/copy.c:4621 +#: commands/copy.c:3728 commands/copy.c:4390 commands/copy.c:4620 #, c-format msgid "extra data after last expected column" msgstr "推定最終列の後に余計なデータがありました" -#: commands/copy.c:3740 +#: commands/copy.c:3742 #, c-format msgid "missing data for column \"%s\"" msgstr "列\"%s\"のデータがありません" -#: commands/copy.c:3823 +#: commands/copy.c:3825 #, c-format msgid "received copy data after EOF marker" msgstr "EOF マーカーの後ろでコピーデータを受信しました" -#: commands/copy.c:3830 +#: commands/copy.c:3832 #, c-format msgid "row field count is %d, expected %d" msgstr "行のフィールド数は%d、その期待値は%dです" -#: commands/copy.c:4150 commands/copy.c:4167 +#: commands/copy.c:4149 commands/copy.c:4166 #, c-format msgid "literal carriage return found in data" msgstr "データの中に復帰記号そのものがありました" -#: commands/copy.c:4151 commands/copy.c:4168 +#: commands/copy.c:4150 commands/copy.c:4167 #, c-format msgid "unquoted carriage return found in data" msgstr "データの中に引用符のない復帰記号がありました" -#: commands/copy.c:4153 commands/copy.c:4170 +#: commands/copy.c:4152 commands/copy.c:4169 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "復帰記号は\"\\r\"と表現してください" -#: commands/copy.c:4154 commands/copy.c:4171 +#: commands/copy.c:4153 commands/copy.c:4170 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "復帰記号を表現するにはCSVフィールドを引用符で括ってください" -#: commands/copy.c:4183 +#: commands/copy.c:4182 #, c-format msgid "literal newline found in data" msgstr "データの中に改行記号そのものがありました" -#: commands/copy.c:4184 +#: commands/copy.c:4183 #, c-format msgid "unquoted newline found in data" msgstr "データの中に引用符のない改行記号がありました" -#: commands/copy.c:4186 +#: commands/copy.c:4185 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "改行記号は\"\\n\"と表現してください" -#: commands/copy.c:4187 +#: commands/copy.c:4186 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "改行記号を表現するにはCSVフィールドを引用符で括ってください" -#: commands/copy.c:4233 commands/copy.c:4269 +#: commands/copy.c:4232 commands/copy.c:4268 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "コピー終端記号がこれまでの改行方式と一致しません" -#: commands/copy.c:4242 commands/copy.c:4258 +#: commands/copy.c:4241 commands/copy.c:4257 #, c-format msgid "end-of-copy marker corrupt" msgstr "コピー終端記号が破損しています" -#: commands/copy.c:4705 +#: commands/copy.c:4704 #, c-format msgid "unterminated CSV quoted field" msgstr "CSV引用符が閉じていません" -#: commands/copy.c:4782 commands/copy.c:4801 +#: commands/copy.c:4780 commands/copy.c:4799 #, c-format msgid "unexpected EOF in COPY data" msgstr "COPYデータの中に想定外のEOFがあります" -#: commands/copy.c:4791 +#: commands/copy.c:4789 #, c-format msgid "invalid field size" msgstr "フィールドサイズが不正です" -#: commands/copy.c:4814 +#: commands/copy.c:4812 #, c-format msgid "incorrect binary data format" msgstr "バイナリデータ書式が不正です" -#: commands/copy.c:5122 +#: commands/copy.c:5120 #, c-format msgid "column \"%s\" is a generated column" msgstr "列\"%s\"は生成カラムです" -#: commands/copy.c:5124 +#: commands/copy.c:5122 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "生成カラムはCOPYでは使えません。" -#: commands/copy.c:5139 commands/indexcmds.c:1581 commands/statscmds.c:214 -#: commands/tablecmds.c:2093 commands/tablecmds.c:2634 -#: commands/tablecmds.c:3013 parser/parse_relation.c:3353 -#: parser/parse_relation.c:3373 utils/adt/tsvector_op.c:2559 +#: commands/copy.c:5137 commands/indexcmds.c:1700 commands/statscmds.c:217 commands/tablecmds.c:2163 commands/tablecmds.c:2740 commands/tablecmds.c:3127 parser/parse_relation.c:3507 parser/parse_relation.c:3527 utils/adt/tsvector_op.c:2668 #, c-format msgid "column \"%s\" does not exist" msgstr "列\"%s\"は存在しません" -#: commands/copy.c:5146 commands/tablecmds.c:2126 commands/trigger.c:937 -#: parser/parse_target.c:1047 parser/parse_target.c:1058 +#: commands/copy.c:5144 commands/tablecmds.c:2189 commands/trigger.c:885 parser/parse_target.c:1052 parser/parse_target.c:1063 #, c-format msgid "column \"%s\" specified more than once" msgstr "列\"%s\"が複数指定されました" -#: commands/createas.c:216 commands/createas.c:499 +#: commands/createas.c:215 commands/createas.c:497 #, c-format msgid "too many column names were specified" msgstr "指定された列別名が多すぎます" -#: commands/createas.c:541 +#: commands/createas.c:539 #, c-format msgid "policies not yet implemented for this command" msgstr "このコマンドにはポリシは実装されていません" -#: commands/dbcommands.c:236 +#: commands/dbcommands.c:246 #, c-format msgid "LOCATION is not supported anymore" msgstr "LOCATIONはもはやサポートされません" -#: commands/dbcommands.c:237 +#: commands/dbcommands.c:247 #, c-format msgid "Consider using tablespaces instead." msgstr "代わりにテーブル空間の使用を検討してください" -#: commands/dbcommands.c:263 utils/adt/ascii.c:145 +#: commands/dbcommands.c:261 +#, c-format +msgid "LOCALE cannot be specified together with LC_COLLATE or LC_CTYPE." +msgstr "" +"LOCALE は LC_COLLATE または LC_CTYPE \n" +"と同時に指定することはできません" + +#: commands/dbcommands.c:279 utils/adt/ascii.c:145 #, c-format msgid "%d is not a valid encoding code" msgstr "%dは有効な符号化方式コードではありません" -#: commands/dbcommands.c:274 utils/adt/ascii.c:127 +#: commands/dbcommands.c:290 utils/adt/ascii.c:127 #, c-format msgid "%s is not a valid encoding name" msgstr "%sは有効な符号化方式名ではありません" -#: commands/dbcommands.c:293 commands/dbcommands.c:1515 commands/user.c:275 -#: commands/user.c:680 +#: commands/dbcommands.c:314 commands/dbcommands.c:1569 commands/user.c:275 commands/user.c:691 #, c-format msgid "invalid connection limit: %d" msgstr "不正な接続数制限: %d" -#: commands/dbcommands.c:312 +#: commands/dbcommands.c:333 #, c-format msgid "permission denied to create database" msgstr "データベースを作成する権限がありません" -#: commands/dbcommands.c:335 +#: commands/dbcommands.c:356 #, c-format msgid "template database \"%s\" does not exist" msgstr "テンプレートデータベース\"%s\"は存在しません" -#: commands/dbcommands.c:347 +#: commands/dbcommands.c:368 #, c-format msgid "permission denied to copy database \"%s\"" msgstr "データベース\"%s\"をコピーする権限がありません" -#: commands/dbcommands.c:363 +#: commands/dbcommands.c:384 #, c-format msgid "invalid server encoding %d" msgstr "サーバの符号化方式%dは不正です" -#: commands/dbcommands.c:369 commands/dbcommands.c:374 +#: commands/dbcommands.c:390 commands/dbcommands.c:395 #, c-format msgid "invalid locale name: \"%s\"" msgstr "ロケール名\"%s\"は不正です" -#: commands/dbcommands.c:394 +#: commands/dbcommands.c:415 #, c-format msgid "new encoding (%s) is incompatible with the encoding of the template database (%s)" msgstr "新しい符号化方式(%s)はテンプレートデータベースの符号化方式(%s)と互換性がありません" -#: commands/dbcommands.c:397 +#: commands/dbcommands.c:418 #, c-format msgid "Use the same encoding as in the template database, or use template0 as template." msgstr "テンプレートデータベースの符号化方式と同じものを使うか、もしくは template0 をテンプレートとして使用してください" -#: commands/dbcommands.c:402 +#: commands/dbcommands.c:423 #, c-format msgid "new collation (%s) is incompatible with the collation of the template database (%s)" msgstr "新しい照合順序(%s)はテンプレートデータベースの照合順序(%s)と互換性がありません" -#: commands/dbcommands.c:404 +#: commands/dbcommands.c:425 #, c-format msgid "Use the same collation as in the template database, or use template0 as template." msgstr "テンプレートデータベースの照合順序と同じものを使うか、もしくは template0 をテンプレートとして使用してください" -#: commands/dbcommands.c:409 +#: commands/dbcommands.c:430 #, c-format msgid "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database (%s)" msgstr "新しいLC_CTYPE(%s)はテンプレートデータベース(%s)のLC_CTYPEと互換性がありません" -#: commands/dbcommands.c:411 +#: commands/dbcommands.c:432 #, c-format msgid "Use the same LC_CTYPE as in the template database, or use template0 as template." msgstr "テンプレートデータベースのLC_CTYPEと同じものを使うか、もしくはtemplate0をテンプレートとして使用してください" -#: commands/dbcommands.c:433 commands/dbcommands.c:1167 +#: commands/dbcommands.c:454 commands/dbcommands.c:1196 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "デフォルトのテーブル空間としてpg_globalを使用できません" -#: commands/dbcommands.c:459 +#: commands/dbcommands.c:480 #, c-format msgid "cannot assign new default tablespace \"%s\"" msgstr "新しいデフォルトのテーブル空間\"%s\"を割り当てられません" -#: commands/dbcommands.c:461 +#: commands/dbcommands.c:482 #, c-format msgid "There is a conflict because database \"%s\" already has some tables in this tablespace." msgstr "データベース\"%s\"のいくつかテーブルはすでにこのテーブル空間にあるため、競合しています。" -#: commands/dbcommands.c:491 commands/dbcommands.c:1037 +#: commands/dbcommands.c:512 commands/dbcommands.c:1066 #, c-format msgid "database \"%s\" already exists" msgstr "データベース\"%s\"はすでに存在します" -#: commands/dbcommands.c:505 +#: commands/dbcommands.c:526 #, c-format msgid "source database \"%s\" is being accessed by other users" msgstr "元となるデータベース\"%s\"は他のユーザによってアクセスされています" -#: commands/dbcommands.c:748 commands/dbcommands.c:763 +#: commands/dbcommands.c:769 commands/dbcommands.c:784 #, c-format msgid "encoding \"%s\" does not match locale \"%s\"" msgstr "符号化方式\"%s\"がロケール\"%s\"に合いません" -#: commands/dbcommands.c:751 +#: commands/dbcommands.c:772 #, c-format msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." msgstr "選択されたLC_CTYPEを設定するには、符号化方式\"%s\"である必要があります。" -#: commands/dbcommands.c:766 +#: commands/dbcommands.c:787 #, c-format msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "選択されたLC_COLLATEを設定するには、符号化方式\"%s\"である必要があります。" -#: commands/dbcommands.c:827 +#: commands/dbcommands.c:848 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "データベース\"%s\"は存在しません、スキップします" -#: commands/dbcommands.c:851 +#: commands/dbcommands.c:872 #, c-format msgid "cannot drop a template database" msgstr "テンプレートデータベースを削除できません" -#: commands/dbcommands.c:857 +#: commands/dbcommands.c:878 #, c-format msgid "cannot drop the currently open database" msgstr "現在オープンしているデータベースを削除できません" -#: commands/dbcommands.c:870 +#: commands/dbcommands.c:891 #, c-format msgid "database \"%s\" is used by an active logical replication slot" msgstr "データベース\"%s\"は有効な論理レプリケーションスロットで使用中です" -#: commands/dbcommands.c:872 +#: commands/dbcommands.c:893 #, c-format msgid "There is %d active slot." msgid_plural "There are %d active slots." msgstr[0] "%d 個のアクティブなスロットがあります。" msgstr[1] "%d 個のアクティブなスロットがあります。" -#: commands/dbcommands.c:886 commands/dbcommands.c:1059 -#: commands/dbcommands.c:1189 -#, c-format -msgid "database \"%s\" is being accessed by other users" -msgstr "データベース\"%s\"は他のユーザからアクセスされています" - -#: commands/dbcommands.c:899 +#: commands/dbcommands.c:907 #, c-format msgid "database \"%s\" is being used by logical replication subscription" msgstr "データベース\"%s\"は論理レプリケーションのサブスクリプションで使用中です" -#: commands/dbcommands.c:901 +#: commands/dbcommands.c:909 #, c-format msgid "There is %d subscription." msgid_plural "There are %d subscriptions." msgstr[0] "%d個のサブスクリプションがあります" msgstr[1] "%d個のサブスクリプションがあります" -#: commands/dbcommands.c:1019 +#: commands/dbcommands.c:930 commands/dbcommands.c:1088 commands/dbcommands.c:1218 +#, c-format +msgid "database \"%s\" is being accessed by other users" +msgstr "データベース\"%s\"は他のユーザからアクセスされています" + +#: commands/dbcommands.c:1048 #, c-format msgid "permission denied to rename database" msgstr "データベースの名前を変更する権限がありません" -#: commands/dbcommands.c:1048 +#: commands/dbcommands.c:1077 #, c-format msgid "current database cannot be renamed" msgstr "現在のデータベースの名前を変更できません" -#: commands/dbcommands.c:1145 +#: commands/dbcommands.c:1174 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "現在オープン中のデータベースのテーブルスペースは変更できません" -#: commands/dbcommands.c:1248 +#: commands/dbcommands.c:1277 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "データベース\"%s\"のリレーションの中に、テーブルスペース\"%s\"にすでに存在するものがあります" -#: commands/dbcommands.c:1250 +#: commands/dbcommands.c:1279 #, c-format msgid "You must move them back to the database's default tablespace before using this command." msgstr "このコマンドを使う前に、データベースのデフォルトのテーブルスペースに戻す必要があります。" -#: commands/dbcommands.c:1375 commands/dbcommands.c:1921 -#: commands/dbcommands.c:2126 commands/dbcommands.c:2181 -#: commands/tablespace.c:620 +#: commands/dbcommands.c:1404 commands/dbcommands.c:1980 commands/dbcommands.c:2203 commands/dbcommands.c:2261 commands/tablespace.c:619 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "元のデータベースのディレクトリ\"%s\"に不要なファイルが残っているかもしれません" -#: commands/dbcommands.c:1496 +#: commands/dbcommands.c:1460 +#, c-format +msgid "unrecognized DROP DATABASE option \"%s\"" +msgstr "DROP DATABASEのオプション\"%s\"が認識できません" + +#: commands/dbcommands.c:1550 #, c-format msgid "option \"%s\" cannot be specified with other options" msgstr "オプション\"%s\"は他のオプションと一緒に指定はできません" -#: commands/dbcommands.c:1552 +#: commands/dbcommands.c:1606 #, c-format msgid "cannot disallow connections for current database" msgstr "現在のデータベースへの接続は禁止できません" -#: commands/dbcommands.c:1688 +#: commands/dbcommands.c:1742 #, c-format msgid "permission denied to change owner of database" msgstr "データベースの所有者を変更する権限がありません" -#: commands/dbcommands.c:2009 +#: commands/dbcommands.c:2086 #, c-format msgid "There are %d other session(s) and %d prepared transaction(s) using the database." msgstr "他にこのデータベースを使っている %d 個のセッションと %d 個の準備済みトランザクションがあります。" -#: commands/dbcommands.c:2012 +#: commands/dbcommands.c:2089 #, c-format msgid "There is %d other session using the database." msgid_plural "There are %d other sessions using the database." msgstr[0] "他にこのデータベースを使っている %d 個のセッションがあります。" msgstr[1] "他にこのデータベースを使っている %d 個のセッションがあります。" -#: commands/dbcommands.c:2017 +#: commands/dbcommands.c:2094 storage/ipc/procarray.c:3632 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." msgstr[0] "このデータベースを使用する準備されたトランザクションが%d存在します。" msgstr[1] "このデータベースを使用する準備されたトランザクションが%d存在します。" -#: commands/define.c:54 commands/define.c:228 commands/define.c:260 -#: commands/define.c:288 commands/define.c:334 +#: commands/define.c:54 commands/define.c:228 commands/define.c:260 commands/define.c:288 commands/define.c:334 #, c-format msgid "%s requires a parameter" msgstr "%sはパラメータが必要です" -#: commands/define.c:90 commands/define.c:101 commands/define.c:195 -#: commands/define.c:213 +#: commands/define.c:90 commands/define.c:101 commands/define.c:195 commands/define.c:213 #, c-format msgid "%s requires a numeric value" msgstr "%sは数値が必要です" @@ -6565,1226 +6377,1220 @@ msgstr "%sの引数は型名でなければなりません" msgid "invalid argument for %s: \"%s\"" msgstr "%sの引数が不正です: \"%s\"" -#: commands/dropcmds.c:99 commands/functioncmds.c:1272 -#: utils/adt/ruleutils.c:2609 +#: commands/dropcmds.c:100 commands/functioncmds.c:1274 utils/adt/ruleutils.c:2633 #, c-format msgid "\"%s\" is an aggregate function" msgstr "\"%s\"は集約関数です" -#: commands/dropcmds.c:101 +#: commands/dropcmds.c:102 #, c-format msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "集約関数を削除するにはDROP AGGREGATEを使用してください" -#: commands/dropcmds.c:157 commands/sequence.c:447 commands/tablecmds.c:3097 -#: commands/tablecmds.c:3255 commands/tablecmds.c:3300 -#: commands/tablecmds.c:14266 tcop/utility.c:1174 +#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3211 commands/tablecmds.c:3369 commands/tablecmds.c:3414 commands/tablecmds.c:14894 tcop/utility.c:1276 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "リレーション\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:187 commands/dropcmds.c:286 commands/tablecmds.c:1166 +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1197 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "スキーマ\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:227 commands/dropcmds.c:266 commands/tablecmds.c:253 +#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:259 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "型\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:256 +#: commands/dropcmds.c:257 #, c-format msgid "access method \"%s\" does not exist, skipping" msgstr "アクセスメソッド\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:274 +#: commands/dropcmds.c:275 #, c-format msgid "collation \"%s\" does not exist, skipping" msgstr "照合順序\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:281 +#: commands/dropcmds.c:282 #, c-format msgid "conversion \"%s\" does not exist, skipping" msgstr "変換\"%sは存在しません、スキップします" -#: commands/dropcmds.c:292 +#: commands/dropcmds.c:293 commands/statscmds.c:479 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "統計情報オブジェクト\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:299 +#: commands/dropcmds.c:300 #, c-format msgid "text search parser \"%s\" does not exist, skipping" msgstr "テキスト検索パーサ\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:306 +#: commands/dropcmds.c:307 #, c-format msgid "text search dictionary \"%s\" does not exist, skipping" msgstr "テキスト検索辞書\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:313 +#: commands/dropcmds.c:314 #, c-format msgid "text search template \"%s\" does not exist, skipping" msgstr "テキスト検索テンプレート\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:320 +#: commands/dropcmds.c:321 #, c-format msgid "text search configuration \"%s\" does not exist, skipping" msgstr "テキスト検索設定\"%sは存在しません、スキップします" -#: commands/dropcmds.c:325 +#: commands/dropcmds.c:326 #, c-format msgid "extension \"%s\" does not exist, skipping" msgstr "機能拡張\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:335 +#: commands/dropcmds.c:336 #, c-format msgid "function %s(%s) does not exist, skipping" msgstr "関数%s(%s)は存在しません、スキップします" -#: commands/dropcmds.c:348 +#: commands/dropcmds.c:349 #, c-format msgid "procedure %s(%s) does not exist, skipping" msgstr "プロシージャ %s(%s) は存在しません、スキップします" -#: commands/dropcmds.c:361 +#: commands/dropcmds.c:362 #, c-format msgid "routine %s(%s) does not exist, skipping" msgstr "ルーチン %s(%s) は存在しません、スキップします" -#: commands/dropcmds.c:374 +#: commands/dropcmds.c:375 #, c-format msgid "aggregate %s(%s) does not exist, skipping" msgstr "集約%s(%s)は存在しません、スキップします" -#: commands/dropcmds.c:387 +#: commands/dropcmds.c:388 #, c-format msgid "operator %s does not exist, skipping" msgstr "演算子%sは存在しません、スキップします" -#: commands/dropcmds.c:393 +#: commands/dropcmds.c:394 #, c-format msgid "language \"%s\" does not exist, skipping" msgstr "言語\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:402 +#: commands/dropcmds.c:403 #, c-format msgid "cast from type %s to type %s does not exist, skipping" msgstr "型%sから型%sへのキャストは存在しません、スキップします" -#: commands/dropcmds.c:411 +#: commands/dropcmds.c:412 #, c-format msgid "transform for type %s language \"%s\" does not exist, skipping" msgstr "型%s、言語\"%s\"に対する変換は存在しません、スキップします" -#: commands/dropcmds.c:419 +#: commands/dropcmds.c:420 #, c-format msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" msgstr "リレーション\"%2$s\"のトリガ\"%1$s\"は存在しません、スキップします" -#: commands/dropcmds.c:428 +#: commands/dropcmds.c:429 #, c-format msgid "policy \"%s\" for relation \"%s\" does not exist, skipping" msgstr "リレーション\"%2$s\"のポリシ\"%1$s\"は存在しません、スキップします" -#: commands/dropcmds.c:435 +#: commands/dropcmds.c:436 #, c-format msgid "event trigger \"%s\" does not exist, skipping" msgstr "イベントトリガ \"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:441 +#: commands/dropcmds.c:442 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist, skipping" msgstr "リレーション\"%2$s\"のルール\"%1$s\"は存在しません、スキップします" -#: commands/dropcmds.c:448 +#: commands/dropcmds.c:449 #, c-format msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "外部データラッパ\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:452 commands/foreigncmds.c:1400 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1351 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "外部データラッパ\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:461 +#: commands/dropcmds.c:462 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\", skipping" msgstr "アクセスメソッド\"%2$s\"に対する演算子クラス\"%1$s\"は存在しません、スキップします" -#: commands/dropcmds.c:473 +#: commands/dropcmds.c:474 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\", skipping" msgstr "アクセスメソッド\"%2$s\"に対する演算子族\"%1$s\"は存在しません、スキップします" -#: commands/dropcmds.c:480 +#: commands/dropcmds.c:481 #, c-format msgid "publication \"%s\" does not exist, skipping" msgstr "パブリケーション\"%s\"は存在しません、スキップします" -#: commands/event_trigger.c:187 +#: commands/event_trigger.c:125 #, c-format msgid "permission denied to create event trigger \"%s\"" msgstr "イベントトリガ \"%s\"を作成する権限がありません" -#: commands/event_trigger.c:189 +#: commands/event_trigger.c:127 #, c-format msgid "Must be superuser to create an event trigger." msgstr "イベントトリガを作成するにはスーパユーザである必要があります。" -#: commands/event_trigger.c:198 +#: commands/event_trigger.c:136 #, c-format msgid "unrecognized event name \"%s\"" msgstr "識別できないイベント名\"%s\"" -#: commands/event_trigger.c:215 +#: commands/event_trigger.c:153 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "識別できないフィルタ変数\"%s\"" -#: commands/event_trigger.c:270 +#: commands/event_trigger.c:207 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "フィルタの値\"%s\"はフィルタ変数\"%s\"では認識されません" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:276 commands/event_trigger.c:346 +#: commands/event_trigger.c:213 commands/event_trigger.c:235 #, c-format msgid "event triggers are not supported for %s" msgstr "%sではイベントトリガはサポートされません" -#: commands/event_trigger.c:369 +#: commands/event_trigger.c:248 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "フィルタ変数\"%s\"が複数指定されました" -#: commands/event_trigger.c:519 commands/event_trigger.c:563 -#: commands/event_trigger.c:657 +#: commands/event_trigger.c:377 commands/event_trigger.c:421 commands/event_trigger.c:515 #, c-format msgid "event trigger \"%s\" does not exist" msgstr "イベントトリガ\"%s\"は存在しません" -#: commands/event_trigger.c:625 +#: commands/event_trigger.c:483 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "イベントトリガ\"%s\"の所有者を変更する権限がありません" -#: commands/event_trigger.c:627 +#: commands/event_trigger.c:485 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "イベントトリガの所有者はスーパユーザでなければなりません" -#: commands/event_trigger.c:1465 +#: commands/event_trigger.c:1304 #, c-format msgid "%s can only be called in a sql_drop event trigger function" msgstr "%sはsql_dropイベントトリガ関数内でのみ呼び出すことができます" -#: commands/event_trigger.c:1585 commands/event_trigger.c:1606 +#: commands/event_trigger.c:1424 commands/event_trigger.c:1445 #, c-format msgid "%s can only be called in a table_rewrite event trigger function" msgstr "%sはtable_rewriteイベントトリガ関数でのみ呼び出すことができます" -#: commands/event_trigger.c:2017 +#: commands/event_trigger.c:1856 #, c-format msgid "%s can only be called in an event trigger function" msgstr "%sはイベントトリガ関数でのみ呼び出すことができます" -#: commands/explain.c:193 +#: commands/explain.c:212 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "EXPLAIN オプション\"%s\"が認識できない値です: \"%s\"" -#: commands/explain.c:200 +#: commands/explain.c:219 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "EXPLAIN オプション\"%s\"が認識できません" -#: commands/explain.c:208 +#: commands/explain.c:227 #, c-format msgid "EXPLAIN option BUFFERS requires ANALYZE" msgstr "EXPLAIN オプションの BUFFERS には ANALYZE 指定が必要です" -#: commands/explain.c:217 +#: commands/explain.c:232 +#, c-format +msgid "EXPLAIN option WAL requires ANALYZE" +msgstr "EXPLAINのオプションWALにはANALYZE指定が必要です" + +#: commands/explain.c:241 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "EXPLAINオプションのTIMINGにはANALYZE指定が必要です" -#: commands/extension.c:171 commands/extension.c:2918 +#: commands/extension.c:173 commands/extension.c:3013 #, c-format msgid "extension \"%s\" does not exist" msgstr "機能拡張\"%s\"は存在しません" -#: commands/extension.c:270 commands/extension.c:279 commands/extension.c:291 -#: commands/extension.c:301 +#: commands/extension.c:272 commands/extension.c:281 commands/extension.c:293 commands/extension.c:303 #, c-format msgid "invalid extension name: \"%s\"" msgstr "機能拡張名が不正です: \"%s\"" -#: commands/extension.c:271 +#: commands/extension.c:273 #, c-format msgid "Extension names must not be empty." msgstr "機能拡張名が無効です: 空であってはなりません" -#: commands/extension.c:280 +#: commands/extension.c:282 #, c-format msgid "Extension names must not contain \"--\"." msgstr "機能拡張名に\"--\"が含まれていてはなりません" -#: commands/extension.c:292 +#: commands/extension.c:294 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "機能拡張名が\"-\"で始まったり終わったりしてはなりません" -#: commands/extension.c:302 +#: commands/extension.c:304 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "機能拡張名にディレクトリの区切り文字が含まれていてはなりません" -#: commands/extension.c:317 commands/extension.c:326 commands/extension.c:335 -#: commands/extension.c:345 +#: commands/extension.c:319 commands/extension.c:328 commands/extension.c:337 commands/extension.c:347 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "機能拡張のバージョン名が不正す: \"%s\"" -#: commands/extension.c:318 +#: commands/extension.c:320 #, c-format msgid "Version names must not be empty." msgstr "バージョン名が無効です: 空であってはなりません" -#: commands/extension.c:327 +#: commands/extension.c:329 #, c-format msgid "Version names must not contain \"--\"." msgstr "バージョン名に\"--\"が含まれていてはなりません" -#: commands/extension.c:336 +#: commands/extension.c:338 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "バージョン名が\"-\"で始まったり終わったりしてはなりません" -#: commands/extension.c:346 +#: commands/extension.c:348 #, c-format msgid "Version names must not contain directory separator characters." msgstr "バージョン名にディレクトリの区切り文字が含まれていてはなりません" -#: commands/extension.c:496 +#: commands/extension.c:498 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "機能拡張の制御ファイル\"%s\"をオープンできませんでした: %m" -#: commands/extension.c:518 commands/extension.c:528 +#: commands/extension.c:520 commands/extension.c:530 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "セカンダリの機能拡張制御ファイルにパラメータ\"%s\"を設定できません" -#: commands/extension.c:550 commands/extension.c:558 utils/misc/guc.c:6540 +#: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 utils/misc/guc.c:6767 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "パラメータ\"%s\"にはbooleanを指定します" -#: commands/extension.c:567 +#: commands/extension.c:577 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\"は有効な符号化方式名ではありません" -#: commands/extension.c:581 +#: commands/extension.c:591 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "パラメータ\"%s\"は機能拡張名のリストでなければなりません" -#: commands/extension.c:588 +#: commands/extension.c:598 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "ファイル\"%2$s\"中に認識できないパラメータ\"%1$s\"があります" -#: commands/extension.c:597 +#: commands/extension.c:607 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "\"relocatable\"が真の場合はパラメータ\"schema\"は指定できません" -#: commands/extension.c:762 +#: commands/extension.c:785 #, c-format msgid "transaction control statements are not allowed within an extension script" msgstr "トランザクション制御ステートメントを機能拡張スクリプトの中に書くことはできません" -#: commands/extension.c:808 +#: commands/extension.c:861 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "機能拡張\"%s\"を作成する権限がありません" -#: commands/extension.c:810 +#: commands/extension.c:864 +#, c-format +msgid "Must have CREATE privilege on current database to create this extension." +msgstr "この機能拡張を生成するには現在のデータベースのCREATE権限が必要です。" + +#: commands/extension.c:865 #, c-format msgid "Must be superuser to create this extension." msgstr "この機能拡張を生成するにはスーパユーザである必要があります。" -#: commands/extension.c:814 +#: commands/extension.c:869 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "機能拡張\"%s\"を更新する権限がありません" -#: commands/extension.c:816 +#: commands/extension.c:872 +#, c-format +msgid "Must have CREATE privilege on current database to update this extension." +msgstr "この機能拡張を更新するには現在のデータベースのCREATE権限が必要です。" + +#: commands/extension.c:873 #, c-format msgid "Must be superuser to update this extension." msgstr "この機能拡張を更新するにはスーパユーザである必要があります。" -#: commands/extension.c:1100 +#: commands/extension.c:1200 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "機能拡張\"%s\"について、バージョン\"%s\"からバージョン\"%s\"へのアップデートパスがありません" -#: commands/extension.c:1307 commands/extension.c:2979 +#: commands/extension.c:1408 commands/extension.c:3074 #, c-format msgid "version to install must be specified" msgstr "インストールするバージョンを指定してください" -#: commands/extension.c:1329 -#, c-format -msgid "FROM version must be different from installation target version \"%s\"" -msgstr "FROM のバージョンはターゲットのバージョン\"%s\"と異なっていなければなりません" - -#: commands/extension.c:1394 +#: commands/extension.c:1445 #, c-format msgid "extension \"%s\" has no installation script nor update path for version \"%s\"" msgstr "機能拡張\"%s\"にはバージョン\"%s\"のインストールスクリプトもアップデートパスもありません" -#: commands/extension.c:1429 +#: commands/extension.c:1479 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "機能拡張\"%s\"はスキーマ\"%s\"内にインストールされていなければなりません" -#: commands/extension.c:1589 +#: commands/extension.c:1639 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "機能拡張\"%s\"と\"%s\"の間に循環依存関係が検出されました" -#: commands/extension.c:1594 +#: commands/extension.c:1644 #, c-format msgid "installing required extension \"%s\"" msgstr "必要な機能拡張をインストールします:\"%s\"" -#: commands/extension.c:1618 +#: commands/extension.c:1667 #, c-format msgid "required extension \"%s\" is not installed" msgstr "要求された機能拡張\"%s\"はインストールされていません" -#: commands/extension.c:1621 +#: commands/extension.c:1670 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "必要な機能拡張を一緒にインストールするには CREATE EXTENSION ... CASCADE を使ってください。" -#: commands/extension.c:1658 +#: commands/extension.c:1705 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "機能拡張\"%s\"はすでに存在します、スキップします" -#: commands/extension.c:1665 +#: commands/extension.c:1712 #, c-format msgid "extension \"%s\" already exists" msgstr "機能拡張\"%s\"はすでに存在します" -#: commands/extension.c:1676 +#: commands/extension.c:1723 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "入れ子の CREATE EXTENSION はサポートされません" -#: commands/extension.c:1860 +#: commands/extension.c:1896 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "変更されているため拡張\"%s\"を削除できません" -#: commands/extension.c:2362 +#: commands/extension.c:2457 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "%s はCREATE EXTENSIONにより実行されるSQLスクリプトからのみ呼び出すことができます" -#: commands/extension.c:2374 +#: commands/extension.c:2469 #, c-format msgid "OID %u does not refer to a table" msgstr "OID %u がテーブルを参照していません" -#: commands/extension.c:2379 +#: commands/extension.c:2474 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "テーブル\"%s\"は生成されようとしている機能拡張のメンバではありません" -#: commands/extension.c:2733 +#: commands/extension.c:2828 #, c-format msgid "cannot move extension \"%s\" into schema \"%s\" because the extension contains the schema" msgstr "機能拡張がそのスキーマを含んでいるため、機能拡張\"%s\"をスキーマ\"%s\"に移動できません" -#: commands/extension.c:2774 commands/extension.c:2837 +#: commands/extension.c:2869 commands/extension.c:2932 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "機能拡張\"%s\"は SET SCHEMA をサポートしていません" -#: commands/extension.c:2839 +#: commands/extension.c:2934 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "機能拡張のスキーマ\"%2$s\"に%1$sが見つかりません" -#: commands/extension.c:2898 +#: commands/extension.c:2993 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "入れ子になった ALTER EXTENSION はサポートされていません" -#: commands/extension.c:2990 +#: commands/extension.c:3085 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "機能拡張 \"%2$s\"のバージョン\"%1$s\"はすでにインストールされています" -#: commands/extension.c:3241 +#: commands/extension.c:3297 +#, c-format +msgid "cannot add an object of this type to an extension" +msgstr "この型のオブジェクトは機能拡張に追加できません" + +#: commands/extension.c:3355 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "スキーマ\"%s\"を拡張\"%s\"に追加できません。そのスキーマにその拡張が含まれているためです" -#: commands/extension.c:3269 +#: commands/extension.c:3383 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s は機能拡張\"%s\"のメンバではありません" -#: commands/extension.c:3335 +#: commands/extension.c:3449 #, c-format msgid "file \"%s\" is too large" msgstr "ファイル\"%s\"は大きすぎます" -#: commands/foreigncmds.c:151 commands/foreigncmds.c:160 +#: commands/foreigncmds.c:148 commands/foreigncmds.c:157 #, c-format msgid "option \"%s\" not found" msgstr "オプション\"%s\"が見つかりません" -#: commands/foreigncmds.c:170 -#, fuzzy, c-format -#| msgid "option\"%s\"provided more than once" +#: commands/foreigncmds.c:167 +#, c-format msgid "option \"%s\" provided more than once" msgstr "オプション\"%s\"が2回以上指定されました" -#: commands/foreigncmds.c:224 commands/foreigncmds.c:232 +#: commands/foreigncmds.c:221 commands/foreigncmds.c:229 #, c-format msgid "permission denied to change owner of foreign-data wrapper \"%s\"" msgstr "外部データラッパー\"%s\"の所有者を変更する権限がありません" -#: commands/foreigncmds.c:226 +#: commands/foreigncmds.c:223 #, c-format msgid "Must be superuser to change owner of a foreign-data wrapper." msgstr "外部データラッパーの所有者を変更するにはスーパユーザである必要があります。" -#: commands/foreigncmds.c:234 +#: commands/foreigncmds.c:231 #, c-format msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "外部データラッパーの所有者はスーパユーザでなければなりません" -#: commands/foreigncmds.c:294 commands/foreigncmds.c:715 foreign/foreign.c:701 +#: commands/foreigncmds.c:291 commands/foreigncmds.c:711 foreign/foreign.c:701 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "外部データラッパー\"%s\"は存在しません" -#: commands/foreigncmds.c:588 +#: commands/foreigncmds.c:584 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "外部データラッパー\"%s\"を作成する権限がありません" -#: commands/foreigncmds.c:590 +#: commands/foreigncmds.c:586 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "外部データラッパを作成するにはスーパユーザである必要があります。" -#: commands/foreigncmds.c:705 +#: commands/foreigncmds.c:701 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "外部データラッパー\"%s\"を変更する権限がありません" -#: commands/foreigncmds.c:707 +#: commands/foreigncmds.c:703 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "外部データラッパーを更新するにはスーパユーザである必要があります。" -#: commands/foreigncmds.c:738 +#: commands/foreigncmds.c:734 #, c-format msgid "changing the foreign-data wrapper handler can change behavior of existing foreign tables" msgstr "外部データラッパーのハンドラーを変更すると、既存の外部テーブルの振る舞いが変わることがあります" -#: commands/foreigncmds.c:753 +#: commands/foreigncmds.c:749 #, c-format msgid "changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid" msgstr "外部データラッパーのバリデータ(検証用関数)を変更すると、それに依存するオプションが不正になる場合があります" -#: commands/foreigncmds.c:899 +#: commands/foreigncmds.c:871 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "サーバ\"%s\"はすでに存在します、スキップします" -#: commands/foreigncmds.c:1187 +#: commands/foreigncmds.c:1135 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "\"%s\"のユーザマッピングはサーバ\"%s\"に対してすでに存在します、スキップします" -#: commands/foreigncmds.c:1197 +#: commands/foreigncmds.c:1145 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "\"%s\"のユーザマッピングはサーバ\"%s\"に対してすでに存在します" -#: commands/foreigncmds.c:1297 commands/foreigncmds.c:1414 +#: commands/foreigncmds.c:1245 commands/foreigncmds.c:1365 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "\"%s\"のユーザマッピングはサーバ\"%s\"に対しては存在しません" -#: commands/foreigncmds.c:1419 +#: commands/foreigncmds.c:1370 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "\"%s\"のユーザマッピングはサーバ\"%s\"に対しては存在しません、スキップします" -#: commands/foreigncmds.c:1570 foreign/foreign.c:389 +#: commands/foreigncmds.c:1498 foreign/foreign.c:389 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "外部データラッパー\"%s\"にはハンドラがありません" -#: commands/foreigncmds.c:1576 +#: commands/foreigncmds.c:1504 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "外部データラッパー\"%s\"は IMPORT FOREIGN SCHEMA をサポートしていません" -#: commands/foreigncmds.c:1679 +#: commands/foreigncmds.c:1607 #, c-format msgid "importing foreign table \"%s\"" msgstr "外部テーブル\"%s\"をインポートします" -#: commands/functioncmds.c:103 +#: commands/functioncmds.c:104 #, c-format msgid "SQL function cannot return shell type %s" msgstr "SQL関数はシェル型%sを返却することができません" -#: commands/functioncmds.c:108 +#: commands/functioncmds.c:109 #, c-format msgid "return type %s is only a shell" msgstr "戻り値型%sは単なるシェル型です" -#: commands/functioncmds.c:138 parser/parse_type.c:355 +#: commands/functioncmds.c:139 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "シェル型\"%s\"に型修正子を指定できません" -#: commands/functioncmds.c:144 +#: commands/functioncmds.c:145 #, c-format msgid "type \"%s\" is not yet defined" msgstr "型\"%s\"は未定義です" -#: commands/functioncmds.c:145 +#: commands/functioncmds.c:146 #, c-format msgid "Creating a shell type definition." msgstr "シェル型の定義を作成します" -#: commands/functioncmds.c:237 +#: commands/functioncmds.c:238 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "SQL関数はシェル型\"%s\"を受け付けられません" -#: commands/functioncmds.c:243 +#: commands/functioncmds.c:244 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "集約はシェル型\"%s\"を受け付けられません" -#: commands/functioncmds.c:248 +#: commands/functioncmds.c:249 #, c-format msgid "argument type %s is only a shell" msgstr "引数型%sは単なるシェルです" -#: commands/functioncmds.c:258 +#: commands/functioncmds.c:259 #, c-format msgid "type %s does not exist" msgstr "型%sは存在しません" -#: commands/functioncmds.c:272 +#: commands/functioncmds.c:273 #, c-format msgid "aggregates cannot accept set arguments" msgstr "集約は集合引数を受け付けられません" -#: commands/functioncmds.c:276 +#: commands/functioncmds.c:277 #, c-format msgid "procedures cannot accept set arguments" msgstr "プロシージャは集合引数を受け付けません" -#: commands/functioncmds.c:280 +#: commands/functioncmds.c:281 #, c-format msgid "functions cannot accept set arguments" msgstr "関数は集合を引数として受け付けられません" -#: commands/functioncmds.c:288 +#: commands/functioncmds.c:289 #, c-format msgid "procedures cannot have OUT arguments" msgstr "プロシージャは出力引数を持てません" -#: commands/functioncmds.c:289 +#: commands/functioncmds.c:290 #, c-format msgid "INOUT arguments are permitted." msgstr "INOUT 引数は指定可能です" -#: commands/functioncmds.c:299 +#: commands/functioncmds.c:300 #, c-format msgid "VARIADIC parameter must be the last input parameter" msgstr "VARIADIC パラメータは最後の入力パラメータでなければなりません" -#: commands/functioncmds.c:329 +#: commands/functioncmds.c:331 #, c-format msgid "VARIADIC parameter must be an array" msgstr "VARIADIC パラメータは配列でなければなりません" -#: commands/functioncmds.c:369 +#: commands/functioncmds.c:371 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "パラメータ\"%s\"が複数指定されました" -#: commands/functioncmds.c:384 +#: commands/functioncmds.c:386 #, c-format msgid "only input parameters can have default values" msgstr "入力パラメータのみがデフォルト値を持てます" -#: commands/functioncmds.c:399 +#: commands/functioncmds.c:401 #, c-format msgid "cannot use table references in parameter default value" msgstr "パラメータのデフォルト値としてテーブル参照を使用できません" -#: commands/functioncmds.c:423 +#: commands/functioncmds.c:425 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "デフォルト値を持つパラメータの後にある入力パラメータは、必ずデフォルト値を持たなければなりません" -#: commands/functioncmds.c:575 commands/functioncmds.c:766 +#: commands/functioncmds.c:577 commands/functioncmds.c:768 #, c-format msgid "invalid attribute in procedure definition" msgstr "プロシージャ定義内の不正な属性" -#: commands/functioncmds.c:671 +#: commands/functioncmds.c:673 #, c-format msgid "support function %s must return type %s" msgstr "サポート関数%sは%s型を返さなければなりません" -#: commands/functioncmds.c:682 +#: commands/functioncmds.c:684 #, c-format msgid "must be superuser to specify a support function" msgstr "サポート関数を指定するにはスーパユーザである必要があります" -#: commands/functioncmds.c:798 +#: commands/functioncmds.c:800 #, c-format msgid "no function body specified" msgstr "関数本体の指定がありません" -#: commands/functioncmds.c:808 +#: commands/functioncmds.c:810 #, c-format msgid "no language specified" msgstr "言語が指定されていません" -#: commands/functioncmds.c:833 commands/functioncmds.c:1317 +#: commands/functioncmds.c:835 commands/functioncmds.c:1319 #, c-format msgid "COST must be positive" msgstr "COSTは正数でなければなりません" -#: commands/functioncmds.c:841 commands/functioncmds.c:1325 +#: commands/functioncmds.c:843 commands/functioncmds.c:1327 #, c-format msgid "ROWS must be positive" msgstr "ROWSは正数でなければなりません" -#: commands/functioncmds.c:895 +#: commands/functioncmds.c:897 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "言語\"%s\"ではAS項目は1つだけ必要です" -#: commands/functioncmds.c:993 commands/functioncmds.c:2227 -#: commands/proclang.c:568 +#: commands/functioncmds.c:995 commands/functioncmds.c:1995 commands/proclang.c:237 #, c-format msgid "language \"%s\" does not exist" msgstr "言語\"%s\"は存在しません" -#: commands/functioncmds.c:995 commands/functioncmds.c:2229 +#: commands/functioncmds.c:997 commands/functioncmds.c:1997 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "言語をデータベースに読み込むためには CREATE EXTENSION を使用してください" -#: commands/functioncmds.c:1030 commands/functioncmds.c:1309 +#: commands/functioncmds.c:1032 commands/functioncmds.c:1311 #, c-format msgid "only superuser can define a leakproof function" msgstr "スーパユーザのみがリークプルーフ関数を定義することができます" -#: commands/functioncmds.c:1079 +#: commands/functioncmds.c:1081 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "OUTパラメータで定義されているため、関数の戻り値型は%sでなければなりません" -#: commands/functioncmds.c:1092 +#: commands/functioncmds.c:1094 #, c-format msgid "function result type must be specified" msgstr "関数の結果型を指定しなければなりません" -#: commands/functioncmds.c:1144 commands/functioncmds.c:1329 +#: commands/functioncmds.c:1146 commands/functioncmds.c:1331 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "関数が集合を返す場合にROWSは適していません" -#: commands/functioncmds.c:1521 +#: commands/functioncmds.c:1431 #, c-format msgid "source data type %s is a pseudo-type" msgstr "変換元データ型%sは疑似型です" -#: commands/functioncmds.c:1527 +#: commands/functioncmds.c:1437 #, c-format msgid "target data type %s is a pseudo-type" msgstr "変換先データ型%sは疑似型です" -#: commands/functioncmds.c:1551 +#: commands/functioncmds.c:1461 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "元のデータ型がドメインであるため、キャストは無視されます" -#: commands/functioncmds.c:1556 +#: commands/functioncmds.c:1466 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "対象のデータ型がドメインであるため、キャストは無視されます" -#: commands/functioncmds.c:1581 +#: commands/functioncmds.c:1491 #, c-format msgid "cast function must take one to three arguments" msgstr "キャスト関数の引数は1つから3つまでです" -#: commands/functioncmds.c:1585 +#: commands/functioncmds.c:1495 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "キャスト関数の引数は変換元データ型と同一であるか、変換元データ型からバイナリ変換可能である必要があります" -#: commands/functioncmds.c:1589 +#: commands/functioncmds.c:1499 #, c-format msgid "second argument of cast function must be type %s" msgstr "キャスト関数の第2引数は%s型でなければなりません" -#: commands/functioncmds.c:1594 +#: commands/functioncmds.c:1504 #, c-format msgid "third argument of cast function must be type %s" msgstr "キャスト関数の第3引数は%s型でなければなりません" -#: commands/functioncmds.c:1599 +#: commands/functioncmds.c:1509 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "キャスト関数の戻り値データ型は変換先データ型と一致するか、変換先データ型へバイナリ変換可能である必要があります" -#: commands/functioncmds.c:1610 +#: commands/functioncmds.c:1520 #, c-format msgid "cast function must not be volatile" msgstr "キャスト関数はvolatileではいけません" -#: commands/functioncmds.c:1615 +#: commands/functioncmds.c:1525 #, c-format msgid "cast function must be a normal function" msgstr "キャスト関数は通常の関数でなければなりません" -#: commands/functioncmds.c:1619 +#: commands/functioncmds.c:1529 #, c-format msgid "cast function must not return a set" msgstr "キャスト関数は集合を返してはいけません" -#: commands/functioncmds.c:1645 +#: commands/functioncmds.c:1555 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "WITHOUT FUNCTION指定のキャストを作成するにはスーパユーザである必要があります" -#: commands/functioncmds.c:1660 +#: commands/functioncmds.c:1570 #, c-format msgid "source and target data types are not physically compatible" msgstr "変換元と変換先のデータ型の間には物理的な互換性がありません" -#: commands/functioncmds.c:1675 +#: commands/functioncmds.c:1585 #, c-format msgid "composite data types are not binary-compatible" msgstr "複合データ型はバイナリ互換ではありません" -#: commands/functioncmds.c:1681 +#: commands/functioncmds.c:1591 #, c-format msgid "enum data types are not binary-compatible" msgstr "列挙データ型はバイナリ互換ではありません" -#: commands/functioncmds.c:1687 +#: commands/functioncmds.c:1597 #, c-format msgid "array data types are not binary-compatible" msgstr "配列データ型はバイナリ互換ではありません" -#: commands/functioncmds.c:1704 +#: commands/functioncmds.c:1614 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "ドメインデータ型はバイナリ互換としてマークされていてはなりません" -#: commands/functioncmds.c:1714 +#: commands/functioncmds.c:1624 #, c-format msgid "source data type and target data type are the same" msgstr "変換元と変換先のデータ型が同一です" -#: commands/functioncmds.c:1747 -#, c-format -msgid "cast from type %s to type %s already exists" -msgstr "型%sから型%sへのキャストはすでに存在しています" - -#: commands/functioncmds.c:1822 -#, c-format -msgid "cast from type %s to type %s does not exist" -msgstr "型%sから型%sへのキャストは存在しません" - -#: commands/functioncmds.c:1861 +#: commands/functioncmds.c:1656 #, c-format msgid "transform function must not be volatile" msgstr "変換関数はvolatileではいけません" -#: commands/functioncmds.c:1865 +#: commands/functioncmds.c:1660 #, c-format msgid "transform function must be a normal function" msgstr "変換関数は通常の関数でなければなりません" -#: commands/functioncmds.c:1869 +#: commands/functioncmds.c:1664 #, c-format msgid "transform function must not return a set" msgstr "変換関数は集合を返してはいけません" -#: commands/functioncmds.c:1873 +#: commands/functioncmds.c:1668 #, c-format msgid "transform function must take one argument" msgstr "変換関数は引数を1つとらなければなりません" -#: commands/functioncmds.c:1877 +#: commands/functioncmds.c:1672 #, c-format msgid "first argument of transform function must be type %s" msgstr "変換関数の第1引数は%s型でなければなりません" -#: commands/functioncmds.c:1915 +#: commands/functioncmds.c:1710 #, c-format msgid "data type %s is a pseudo-type" msgstr "データ型%sは擬似型です" -#: commands/functioncmds.c:1921 +#: commands/functioncmds.c:1716 #, c-format msgid "data type %s is a domain" msgstr "データ型%sはドメインです" -#: commands/functioncmds.c:1961 +#: commands/functioncmds.c:1756 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "FROM SQL関数の戻り値のデータ型は%sでなければなりません" -#: commands/functioncmds.c:1987 +#: commands/functioncmds.c:1782 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "TO SQL関数の戻り値データ型はこの変換関数のデータ型でなければなりません" -#: commands/functioncmds.c:2016 +#: commands/functioncmds.c:1811 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "型%s、言語\"%s\"の変換はすでに存在します" -#: commands/functioncmds.c:2108 +#: commands/functioncmds.c:1903 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "型%s、言語\"%s\"の変換は存在しません" -#: commands/functioncmds.c:2159 +#: commands/functioncmds.c:1927 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "関数%sはすでにスキーマ\"%s\"内に存在します" -#: commands/functioncmds.c:2214 +#: commands/functioncmds.c:1982 #, c-format msgid "no inline code specified" msgstr "インラインコードの指定がありません" -#: commands/functioncmds.c:2260 +#: commands/functioncmds.c:2028 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "言語\"%s\"ではインラインコード実行をサポートしていません" -#: commands/functioncmds.c:2372 +#: commands/functioncmds.c:2140 #, c-format msgid "cannot pass more than %d argument to a procedure" msgid_plural "cannot pass more than %d arguments to a procedure" msgstr[0] "プロシージャには %d 個以上の引数を渡すことはできません" msgstr[1] "プロシージャには %d 個以上の引数を渡すことはできません" -#: commands/indexcmds.c:528 +#: commands/indexcmds.c:590 #, c-format msgid "must specify at least one column" msgstr "少なくとも1つの列を指定しなければなりません" -#: commands/indexcmds.c:532 +#: commands/indexcmds.c:594 #, c-format msgid "cannot use more than %d columns in an index" msgstr "インデックスには%dを超える列を使用できません" -#: commands/indexcmds.c:571 +#: commands/indexcmds.c:633 #, c-format msgid "cannot create index on foreign table \"%s\"" msgstr "外部テーブル\"%s\"のインデックスを作成できません" -#: commands/indexcmds.c:596 +#: commands/indexcmds.c:664 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "パーティションテーブル\"%s\"には CREATE INDEX CONCURRENTLY は実行できません" -#: commands/indexcmds.c:601 +#: commands/indexcmds.c:669 #, c-format msgid "cannot create exclusion constraints on partitioned table \"%s\"" msgstr "パーティションテーブル\"%s\"には排他制約を作成できません" -#: commands/indexcmds.c:611 +#: commands/indexcmds.c:679 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "他のセッションの一時テーブルに対するインデックスを作成できません" -#: commands/indexcmds.c:649 commands/tablecmds.c:677 commands/tablespace.c:1174 +#: commands/indexcmds.c:717 commands/tablecmds.c:702 commands/tablespace.c:1173 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "パーティション親リレーションにはデフォルトテーブル空間は指定できません" -#: commands/indexcmds.c:681 commands/tablecmds.c:712 commands/tablecmds.c:12392 -#: commands/tablecmds.c:12504 +#: commands/indexcmds.c:749 commands/tablecmds.c:737 commands/tablecmds.c:13018 commands/tablecmds.c:13132 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "共有リレーションのみをpg_globalテーブル空間に格納することができます" -#: commands/indexcmds.c:714 +#: commands/indexcmds.c:782 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "古いメソッド\"rtree\"をアクセスメソッド\"gist\"に置換しています" -#: commands/indexcmds.c:735 +#: commands/indexcmds.c:803 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "アクセスメソッド\"%s\"では一意性インデックスをサポートしていません" -#: commands/indexcmds.c:740 +#: commands/indexcmds.c:808 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "アクセスメソッド\"%s\"では包含列をサポートしていません" -#: commands/indexcmds.c:745 +#: commands/indexcmds.c:813 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "アクセスメソッド\"%s\"は複数列インデックスをサポートしません" -#: commands/indexcmds.c:750 +#: commands/indexcmds.c:818 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "アクセスメソッド\"%s\"は排除制約をサポートしていません" -#: commands/indexcmds.c:852 +#: commands/indexcmds.c:941 +#, c-format +msgid "cannot match partition key to an index using access method \"%s\"" +msgstr "パーティションキーはアクセスメソッド\"%s\"を使っているインデックスには適合させられません" + +#: commands/indexcmds.c:951 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "パーティションキー定義では %s 制約はサポートしていません" -#: commands/indexcmds.c:854 +#: commands/indexcmds.c:953 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "%s 制約はパーティションキーが式を含む場合は使用できません" -#: commands/indexcmds.c:872 +#: commands/indexcmds.c:992 #, c-format msgid "insufficient columns in %s constraint definition" msgstr "%s 制約定義内の列が足りません" -#: commands/indexcmds.c:874 +#: commands/indexcmds.c:994 #, c-format msgid "%s constraint on table \"%s\" lacks column \"%s\" which is part of the partition key." msgstr "テーブル\"%2$s\"上の%1$s制約にパーティションキーの一部である列\"%3$s\"が含まれていません。" -#: commands/indexcmds.c:893 commands/indexcmds.c:912 +#: commands/indexcmds.c:1013 commands/indexcmds.c:1032 #, c-format msgid "index creation on system columns is not supported" msgstr "システム列へのインデックス作成はサポートされていません" -#: commands/indexcmds.c:937 +#: commands/indexcmds.c:1057 #, c-format msgid "%s %s will create implicit index \"%s\" for table \"%s\"" msgstr "%1$s %2$sはテーブル\"%4$s\"に暗黙的なインデックス\"%3$s\"を作成します" -#: commands/indexcmds.c:1079 tcop/utility.c:1359 -#, fuzzy, c-format -#| msgid "cannot create index on partitioned table \"%s\"" +#: commands/indexcmds.c:1198 tcop/utility.c:1461 +#, c-format msgid "cannot create unique index on partitioned table \"%s\"" -msgstr "パーティションテーブル\"%s\"にはインデックスを作成できません" +msgstr "パーティションテーブル\"%s\"にはユニークインデックスを構築できません" -#: commands/indexcmds.c:1081 tcop/utility.c:1361 +#: commands/indexcmds.c:1200 tcop/utility.c:1463 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "テーブル\"%s\"は外部テーブルを子テーブルとして含んでいます" -#: commands/indexcmds.c:1510 +#: commands/indexcmds.c:1629 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "インデックスの述部の関数はIMMUTABLEマークが必要です" -#: commands/indexcmds.c:1576 parser/parse_utilcmd.c:2307 -#: parser/parse_utilcmd.c:2441 +#: commands/indexcmds.c:1695 parser/parse_utilcmd.c:2352 parser/parse_utilcmd.c:2487 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "キーとして指名された列\"%s\"は存在しません" -#: commands/indexcmds.c:1600 parser/parse_utilcmd.c:1633 +#: commands/indexcmds.c:1719 parser/parse_utilcmd.c:1670 #, c-format msgid "expressions are not supported in included columns" msgstr "包含列では式はサポートされません" -#: commands/indexcmds.c:1641 +#: commands/indexcmds.c:1760 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "式インデックスの関数はIMMUTABLEマークが必要です" -#: commands/indexcmds.c:1656 +#: commands/indexcmds.c:1775 #, c-format msgid "including column does not support a collation" msgstr "包含列は照合順序をサポートしません" -#: commands/indexcmds.c:1660 +#: commands/indexcmds.c:1779 #, c-format msgid "including column does not support an operator class" msgstr "包含列は演算子クラスをサポートしません" -#: commands/indexcmds.c:1664 +#: commands/indexcmds.c:1783 #, c-format msgid "including column does not support ASC/DESC options" msgstr "包含列は ASC/DESC オプションをサポートしません" -#: commands/indexcmds.c:1668 +#: commands/indexcmds.c:1787 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "包含列は NULLS FIRST/LAST オプションをサポートしません" -#: commands/indexcmds.c:1695 +#: commands/indexcmds.c:1814 #, c-format msgid "could not determine which collation to use for index expression" msgstr "インデックス式で使用する照合順序を特定できませんでした" -#: commands/indexcmds.c:1703 commands/tablecmds.c:15275 commands/typecmds.c:837 -#: parser/parse_expr.c:2854 parser/parse_type.c:567 parser/parse_utilcmd.c:3514 -#: utils/adt/misc.c:490 +#: commands/indexcmds.c:1822 commands/tablecmds.c:15899 commands/typecmds.c:771 parser/parse_expr.c:2850 parser/parse_type.c:566 parser/parse_utilcmd.c:3562 parser/parse_utilcmd.c:4123 utils/adt/misc.c:503 #, c-format msgid "collations are not supported by type %s" msgstr "%s 型では照合順序はサポートされません" -#: commands/indexcmds.c:1741 +#: commands/indexcmds.c:1860 #, c-format msgid "operator %s is not commutative" msgstr "演算子 %s は可換ではありません" -#: commands/indexcmds.c:1743 +#: commands/indexcmds.c:1862 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "排除制約で使えるのは可換演算子だけです" -#: commands/indexcmds.c:1769 +#: commands/indexcmds.c:1888 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "演算子%sは演算子族\"%s\"のメンバーではありません" -#: commands/indexcmds.c:1772 +#: commands/indexcmds.c:1891 #, c-format msgid "The exclusion operator must be related to the index operator class for the constraint." msgstr "この排除に使用する演算子はこの制約に使用するインデックス演算子に関連付けられている必要があります。" -#: commands/indexcmds.c:1807 +#: commands/indexcmds.c:1926 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "アクセスメソッド\"%s\"はASC/DESCオプションをサポートしません" -#: commands/indexcmds.c:1812 +#: commands/indexcmds.c:1931 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "アクセスメソッド\"%s\"はNULLS FIRST/LASTオプションをサポートしません" -#: commands/indexcmds.c:1872 commands/tablecmds.c:15300 -#: commands/tablecmds.c:15306 commands/typecmds.c:1981 +#: commands/indexcmds.c:1977 commands/tablecmds.c:15924 commands/tablecmds.c:15930 commands/typecmds.c:1945 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "アクセスメソッド\"%2$s\"にはデータ型%1$s用のデフォルトの演算子クラスがありません" -#: commands/indexcmds.c:1874 +#: commands/indexcmds.c:1979 #, c-format msgid "You must specify an operator class for the index or define a default operator class for the data type." msgstr "このインデックスの演算子クラスを指定するか、あるいはこのデータ型のデフォルト演算子クラスを定義しなければなりません。" -#: commands/indexcmds.c:1903 commands/indexcmds.c:1911 -#: commands/opclasscmds.c:208 +#: commands/indexcmds.c:2008 commands/indexcmds.c:2016 commands/opclasscmds.c:205 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "アクセスメソッド\"%2$s\"用の演算子クラス\"%1$s\"は存在しません" -#: commands/indexcmds.c:1925 commands/typecmds.c:1969 +#: commands/indexcmds.c:2030 commands/typecmds.c:1933 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "演算子クラス\"%s\"はデータ型%sを受け付けません" -#: commands/indexcmds.c:2015 +#: commands/indexcmds.c:2120 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "データ型%sには複数のデフォルトの演算子クラスがあります" -#: commands/indexcmds.c:2452 +#: commands/indexcmds.c:2569 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" -msgstr "" +msgstr "テーブル\"%s\"には並行インデックス再作成が可能なインデックスがありません" -#: commands/indexcmds.c:2463 -#, fuzzy, c-format -#| msgid "table \"%s\" has no indexes" +#: commands/indexcmds.c:2580 +#, c-format msgid "table \"%s\" has no indexes to reindex" -msgstr "テーブル\"%s\"にはインデックスはありません" +msgstr "テーブル\"%s\"には再構築すべきインデックスはありません" -#: commands/indexcmds.c:2502 commands/indexcmds.c:2770 -#: commands/indexcmds.c:2863 -#, fuzzy, c-format -#| msgid "cannot reindex a system catalog concurrently" +#: commands/indexcmds.c:2619 commands/indexcmds.c:2893 commands/indexcmds.c:2986 +#, c-format msgid "cannot reindex system catalogs concurrently" -msgstr "システムカタログではインデックス並行再構築はできません" +msgstr "システムカタログではインデックスの並行再構築はできません" -#: commands/indexcmds.c:2525 +#: commands/indexcmds.c:2642 #, c-format msgid "can only reindex the currently open database" msgstr "現在オープンしているデータベースのみをインデックス再構築することができます" -#: commands/indexcmds.c:2616 -#, fuzzy, c-format -#| msgid "cannot reindex a system catalog concurrently" +#: commands/indexcmds.c:2733 +#, c-format msgid "cannot reindex system catalogs concurrently, skipping all" -msgstr "システムカタログではインデックス並行再構築はできません" +msgstr "システムカタログではインデックスの並行再構築はできません、全てスキップします" -#: commands/indexcmds.c:2668 commands/indexcmds.c:3329 +#: commands/indexcmds.c:2785 commands/indexcmds.c:3466 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "テーブル\"%s.%s\"のインデックス再構築が完了しました" -#: commands/indexcmds.c:2785 commands/indexcmds.c:2831 +#: commands/indexcmds.c:2908 commands/indexcmds.c:2954 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "無効なインデックス \"%s.%s\"の並行再構築はできません、スキップします " -#: commands/indexcmds.c:2791 +#: commands/indexcmds.c:2914 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "排他制約インデックス\"%s.%s\"を並行再構築することはできません、スキップします " -#: commands/indexcmds.c:2891 +#: commands/indexcmds.c:2996 +#, c-format +msgid "cannot reindex invalid index on TOAST table concurrently" +msgstr "TOASTテーブルの無効なインデックスの並行再構築はできません" + +#: commands/indexcmds.c:3024 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "このタイプのリレーションでインデックス並列再構築はできません" -#: commands/indexcmds.c:3311 commands/indexcmds.c:3322 +#: commands/indexcmds.c:3448 commands/indexcmds.c:3459 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr " インデックス\"%s.%s\"の再構築が完了しました " -#: commands/indexcmds.c:3354 +#: commands/indexcmds.c:3491 #, c-format msgid "REINDEX is not yet implemented for partitioned indexes" msgstr "パーティションインデックスに対する REINDEX は実装されていません" -#: commands/lockcmds.c:102 commands/tablecmds.c:5189 commands/trigger.c:313 -#: rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:928 +#: commands/lockcmds.c:91 commands/tablecmds.c:5542 commands/trigger.c:295 rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:928 #, c-format msgid "\"%s\" is not a table or view" msgstr "\"%s\"はテーブルやビューではありません" -#: commands/lockcmds.c:235 rewrite/rewriteHandler.c:1974 -#: rewrite/rewriteHandler.c:3707 +#: commands/lockcmds.c:213 rewrite/rewriteHandler.c:1977 rewrite/rewriteHandler.c:3782 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "リレーション\"%s\"のルールで無限再帰を検出しました" @@ -7809,39 +7615,37 @@ msgstr "実体化ビュー\"%s\"を平行的に最新化することはできま msgid "Create a unique index with no WHERE clause on one or more columns of the materialized view." msgstr "実体化ビュー上の1つ以上の列に対してWHERE句を持たないUNIQUEインデックスを作成してください。" -#: commands/matview.c:645 +#: commands/matview.c:641 #, c-format msgid "new data for materialized view \"%s\" contains duplicate rows without any null columns" msgstr "実体化ビュー\"%s\"に対する新しいデータにはNULL列を持たない重複行があります" -#: commands/matview.c:647 +#: commands/matview.c:643 #, c-format msgid "Row: %s" msgstr "行: %s" -#: commands/opclasscmds.c:127 +#: commands/opclasscmds.c:124 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\"" msgstr "アクセスメソッド\"%2$s\"用の演算子族\"%1$s\"は存在しません" -#: commands/opclasscmds.c:269 +#: commands/opclasscmds.c:266 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"はすでに存在します" -#: commands/opclasscmds.c:412 +#: commands/opclasscmds.c:411 #, c-format msgid "must be superuser to create an operator class" msgstr "演算子クラスを作成するにはスーパユーザである必要があります" -#: commands/opclasscmds.c:485 commands/opclasscmds.c:864 -#: commands/opclasscmds.c:988 +#: commands/opclasscmds.c:484 commands/opclasscmds.c:901 commands/opclasscmds.c:1047 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "演算子番号%dが不正です。1から%dまででなければなりません" -#: commands/opclasscmds.c:529 commands/opclasscmds.c:908 -#: commands/opclasscmds.c:1003 +#: commands/opclasscmds.c:529 commands/opclasscmds.c:951 commands/opclasscmds.c:1063 #, c-format msgid "invalid function number %d, must be between 1 and %d" msgstr "演算子番号%dが不正です、1と%dの間でなければなりません" @@ -7871,183 +7675,217 @@ msgstr "演算子クラス\"%s\"を型%sのデフォルトにすることがで msgid "Operator class \"%s\" already is the default." msgstr "演算子クラス\"%s\"はすでにデフォルトです。" -#: commands/opclasscmds.c:760 +#: commands/opclasscmds.c:792 #, c-format msgid "must be superuser to create an operator family" msgstr "演算子族を作成するにはスーパユーザである必要があります" -#: commands/opclasscmds.c:818 +#: commands/opclasscmds.c:852 #, c-format msgid "must be superuser to alter an operator family" msgstr "演算子族を更新するにはスーパユーザである必要があります" -#: commands/opclasscmds.c:873 +#: commands/opclasscmds.c:910 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "ALTER OPERATOR FAMILYでは演算子の引数型の指定が必要です" -#: commands/opclasscmds.c:936 +#: commands/opclasscmds.c:985 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "ALTER OPERATOR FAMILYではSTORAGEを指定できません" -#: commands/opclasscmds.c:1058 +#: commands/opclasscmds.c:1119 #, c-format msgid "one or two argument types must be specified" msgstr "1または2つの引数型が指定する必要があります" -#: commands/opclasscmds.c:1084 +#: commands/opclasscmds.c:1145 #, c-format msgid "index operators must be binary" msgstr "インデックス演算子は二項演算子でなければなりません" -#: commands/opclasscmds.c:1103 +#: commands/opclasscmds.c:1164 #, c-format msgid "access method \"%s\" does not support ordering operators" msgstr "アクセスメソッド\"%s\"は並べ替え演算子をサポートしていません" -#: commands/opclasscmds.c:1114 +#: commands/opclasscmds.c:1175 #, c-format msgid "index search operators must return boolean" msgstr "インデックス検索演算子はブール型を返す必要があります" -#: commands/opclasscmds.c:1158 +#: commands/opclasscmds.c:1215 +#, c-format +msgid "associated data types for opclass options parsing functions must match opclass input type" +msgstr "演算子クラスオプションのパース関数の対応するデータ型は演算子クラスの入力型と一致している必要があります" + +#: commands/opclasscmds.c:1222 +#, c-format +msgid "left and right associated data types for opclass options parsing functions must match" +msgstr "演算子クラスオプションのパース関数の左右の対応するデータ型一致している必要があります" + +#: commands/opclasscmds.c:1230 +#, c-format +msgid "invalid opclass options parsing function" +msgstr "不正な演算子クラスオプションのパース関数" + +#: commands/opclasscmds.c:1231 +#, c-format +msgid "Valid signature of opclass options parsing function is '%s'." +msgstr "演算子クラスオプションのパース関数の正しいシグネチャは '%s' です。" + +#: commands/opclasscmds.c:1250 #, c-format msgid "btree comparison functions must have two arguments" msgstr "btree比較関数は2つの引数を取る必要があります" -#: commands/opclasscmds.c:1162 +#: commands/opclasscmds.c:1254 #, c-format msgid "btree comparison functions must return integer" msgstr "btree比較関数は整数を返さなければなりません" -#: commands/opclasscmds.c:1179 +#: commands/opclasscmds.c:1271 #, c-format msgid "btree sort support functions must accept type \"internal\"" msgstr "btreeソートサポート関数は\"internal\"型を取らなければなりません" -#: commands/opclasscmds.c:1183 +#: commands/opclasscmds.c:1275 #, c-format msgid "btree sort support functions must return void" msgstr "btreeソートサポート関数はvoidを返さなければなりません" -#: commands/opclasscmds.c:1194 +#: commands/opclasscmds.c:1286 #, c-format msgid "btree in_range functions must have five arguments" msgstr "btree in_range 関数は5つの引数を取る必要があります" -#: commands/opclasscmds.c:1198 +#: commands/opclasscmds.c:1290 #, c-format msgid "btree in_range functions must return boolean" msgstr "btree in_range 関数はブール型を返す必要があります" -#: commands/opclasscmds.c:1217 +#: commands/opclasscmds.c:1306 +#, c-format +msgid "btree equal image functions must have one argument" +msgstr "btreeの equal image 関数は1つの引数を取る必要があります" + +#: commands/opclasscmds.c:1310 +#, c-format +msgid "btree equal image functions must return boolean" +msgstr "btreeの euqal image 関数はブール型を返す必要があります" + +#: commands/opclasscmds.c:1323 +#, c-format +msgid "btree equal image functions must not be cross-type" +msgstr "btreeの equal image 関数は同じ型の引数を取る必要があります" + +#: commands/opclasscmds.c:1333 #, c-format msgid "hash function 1 must have one argument" msgstr "ハッシュ関数1は引数を1つ取る必要があります" -#: commands/opclasscmds.c:1221 +#: commands/opclasscmds.c:1337 #, c-format msgid "hash function 1 must return integer" msgstr "ハッシュ関数1は整数を返す必要があります" -#: commands/opclasscmds.c:1228 +#: commands/opclasscmds.c:1344 #, c-format msgid "hash function 2 must have two arguments" msgstr "ハッシュ関数2は2つの引数を取る必要があります" -#: commands/opclasscmds.c:1232 +#: commands/opclasscmds.c:1348 #, c-format msgid "hash function 2 must return bigint" msgstr "ハッシュ関数2は bigint を返す必要があります" -#: commands/opclasscmds.c:1257 +#: commands/opclasscmds.c:1373 #, c-format msgid "associated data types must be specified for index support function" msgstr "インデックスサポート関数に対して関連データ型を指定する必要があります" -#: commands/opclasscmds.c:1282 +#: commands/opclasscmds.c:1398 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "(%2$s,%3$s)に対応する演算子番号%1$dが複数あります" -#: commands/opclasscmds.c:1289 +#: commands/opclasscmds.c:1405 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "(%2$s,%3$s)用の演算子番号%1$dが複数あります" -#: commands/opclasscmds.c:1338 +#: commands/opclasscmds.c:1451 #, c-format msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "演算子%d(%s,%s)はすでに演算子族\"%s\"に存在します" -#: commands/opclasscmds.c:1455 +#: commands/opclasscmds.c:1557 #, c-format msgid "function %d(%s,%s) already exists in operator family \"%s\"" msgstr "関数%d(%s,%s)はすでに演算子族\"%s\"内に存在します" -#: commands/opclasscmds.c:1546 +#: commands/opclasscmds.c:1638 #, c-format msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" msgstr "演算子%d(%s,%s)は演算子族\"%s\"内にありません" -#: commands/opclasscmds.c:1586 +#: commands/opclasscmds.c:1678 #, c-format msgid "function %d(%s,%s) does not exist in operator family \"%s\"" msgstr "関数%d(%s,%s)は演算子族\"%s\"内に存在しません" -#: commands/opclasscmds.c:1716 +#: commands/opclasscmds.c:1709 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "アクセスメソッド\"%2$s\"用の演算子クラス\"%1$s\"はスキーマ\"%3$s\"内にすでに存在します" -#: commands/opclasscmds.c:1739 +#: commands/opclasscmds.c:1732 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "アクセスメソッド\"%2$s\"用の演算子族\"%1$s\"はスキーマ\"%3$s\"内にすでに存在します" -#: commands/operatorcmds.c:113 commands/operatorcmds.c:121 +#: commands/operatorcmds.c:111 commands/operatorcmds.c:119 #, c-format msgid "SETOF type not allowed for operator argument" msgstr "演算子の引数にはSETOF型を使用できません" -#: commands/operatorcmds.c:154 commands/operatorcmds.c:457 +#: commands/operatorcmds.c:152 commands/operatorcmds.c:467 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "演算子の属性\"%s\"は不明です" -#: commands/operatorcmds.c:165 +#: commands/operatorcmds.c:163 #, c-format msgid "operator function must be specified" msgstr "演算子関数を指定する必要があります" -#: commands/operatorcmds.c:176 +#: commands/operatorcmds.c:174 #, c-format msgid "at least one of leftarg or rightarg must be specified" msgstr "左右辺のうち少なくともどちらか一方を指定する必要があります" -#: commands/operatorcmds.c:280 +#: commands/operatorcmds.c:278 #, c-format msgid "restriction estimator function %s must return type %s" msgstr "制約推定関数 %s は %s型を返す必要があります" -#: commands/operatorcmds.c:326 +#: commands/operatorcmds.c:321 +#, c-format +msgid "join estimator function %s has multiple matches" +msgstr "JOIN推定関数 %s が複数合致しました" + +#: commands/operatorcmds.c:336 #, c-format msgid "join estimator function %s must return type %s" msgstr "JOIN推定関数 %s は %s型を返す必要があります" -#: commands/operatorcmds.c:451 +#: commands/operatorcmds.c:461 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "演算子の属性\"%s\"は変更できません" -#: commands/policy.c:88 commands/policy.c:401 commands/policy.c:491 -#: commands/tablecmds.c:1452 commands/tablecmds.c:1934 -#: commands/tablecmds.c:2907 commands/tablecmds.c:5168 -#: commands/tablecmds.c:7688 commands/tablecmds.c:14874 -#: commands/tablecmds.c:14909 commands/trigger.c:319 commands/trigger.c:1544 -#: commands/trigger.c:1653 rewrite/rewriteDefine.c:277 -#: rewrite/rewriteDefine.c:933 +#: commands/policy.c:88 commands/policy.c:401 commands/policy.c:491 commands/tablecmds.c:1499 commands/tablecmds.c:1981 commands/tablecmds.c:3021 commands/tablecmds.c:5521 commands/tablecmds.c:8252 commands/tablecmds.c:15489 commands/tablecmds.c:15524 commands/trigger.c:301 commands/trigger.c:1206 commands/trigger.c:1315 rewrite/rewriteDefine.c:277 rewrite/rewriteDefine.c:933 rewrite/rewriteRemove.c:80 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "権限がありません: \"%s\"はシステムカタログです" @@ -8077,12 +7915,12 @@ msgstr "SELECTまたはDELETEには WITH CHECK を適用できません" msgid "only WITH CHECK expression allowed for INSERT" msgstr "INSERTではWITH CHECK式のみが指定可能です" -#: commands/policy.c:808 commands/policy.c:1260 +#: commands/policy.c:808 commands/policy.c:1261 #, c-format msgid "policy \"%s\" for table \"%s\" already exists" msgstr "テーブル\"%2$s\"に対するポリシ\"%1$s\"はすでに存在します" -#: commands/policy.c:1010 commands/policy.c:1288 commands/policy.c:1359 +#: commands/policy.c:1010 commands/policy.c:1289 commands/policy.c:1360 #, c-format msgid "policy \"%s\" for table \"%s\" does not exist" msgstr "テーブル\"%2$s\"に対するポリシ\"%1$s\"は存在しません" @@ -8092,168 +7930,156 @@ msgstr "テーブル\"%2$s\"に対するポリシ\"%1$s\"は存在しません" msgid "only USING expression allowed for SELECT, DELETE" msgstr "SELECT、DELETEにはUSING式のみが指定可能です" -#: commands/portalcmds.c:58 commands/portalcmds.c:182 commands/portalcmds.c:234 +#: commands/portalcmds.c:59 commands/portalcmds.c:182 commands/portalcmds.c:233 #, c-format msgid "invalid cursor name: must not be empty" msgstr "カーソル名が不正です: 空ではいけません" -#: commands/portalcmds.c:190 commands/portalcmds.c:244 -#: executor/execCurrent.c:70 utils/adt/xml.c:2608 utils/adt/xml.c:2778 +#: commands/portalcmds.c:190 commands/portalcmds.c:243 executor/execCurrent.c:70 utils/adt/xml.c:2594 utils/adt/xml.c:2764 #, c-format msgid "cursor \"%s\" does not exist" msgstr "カーソル\"%s\"は存在しません" -#: commands/prepare.c:75 +#: commands/prepare.c:76 #, c-format msgid "invalid statement name: must not be empty" msgstr "不正な文の名前: 空ではいけません" -#: commands/prepare.c:141 parser/parse_param.c:304 tcop/postgres.c:1468 +#: commands/prepare.c:134 parser/parse_param.c:304 tcop/postgres.c:1498 #, c-format msgid "could not determine data type of parameter $%d" msgstr "パラメータ$%dのデータ型が特定できませんでした" -#: commands/prepare.c:159 +#: commands/prepare.c:152 #, c-format msgid "utility statements cannot be prepared" msgstr "ユーティリティ文は準備できません" -#: commands/prepare.c:269 commands/prepare.c:274 +#: commands/prepare.c:256 commands/prepare.c:261 #, c-format msgid "prepared statement is not a SELECT" msgstr "準備された文はSELECTではありません" -#: commands/prepare.c:342 +#: commands/prepare.c:328 #, c-format msgid "wrong number of parameters for prepared statement \"%s\"" msgstr "準備された文\"%s\"のパラメータ数が間違っています" -#: commands/prepare.c:344 +#: commands/prepare.c:330 #, c-format msgid "Expected %d parameters but got %d." msgstr "%dパラメータを想定しましたが、%dパラメータでした" -#: commands/prepare.c:380 +#: commands/prepare.c:363 #, c-format msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "パラメータ$%dの型%sを想定している型%sに強制することができません" -#: commands/prepare.c:465 +#: commands/prepare.c:449 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "準備された文\"%s\"はすでに存在します" -#: commands/prepare.c:504 +#: commands/prepare.c:488 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "準備された文\"%s\"は存在しません" -#: commands/proclang.c:85 -#, c-format -msgid "using pg_pltemplate information instead of CREATE LANGUAGE parameters" -msgstr "CREATE LANGUAGEパラメータの代わりにpg_pltemplateの情報を使用しています" - -#: commands/proclang.c:95 -#, c-format -msgid "must be superuser to create procedural language \"%s\"" -msgstr "手続き言語\"%s\"を生成するにはスーパユーザである必要があります" - -#: commands/proclang.c:250 -#, c-format -msgid "unsupported language \"%s\"" -msgstr "言語\"%s\"はサポートされていません" - -#: commands/proclang.c:252 -#, c-format -msgid "The supported languages are listed in the pg_pltemplate system catalog." -msgstr "サポートされている言語はpg_pltemplateシステムカタログ内に列挙されています" - -#: commands/proclang.c:260 +#: commands/proclang.c:67 #, c-format msgid "must be superuser to create custom procedural language" msgstr "手続き言語を生成するためにはスーパユーザである必要があります" -#: commands/proclang.c:279 commands/trigger.c:711 commands/typecmds.c:458 -#: commands/typecmds.c:475 -#, c-format -msgid "changing return type of function %s from %s to %s" -msgstr "関数%sの戻り値型を%sから%sに変更します" - -#: commands/publicationcmds.c:108 +#: commands/publicationcmds.c:107 #, c-format msgid "invalid list syntax for \"publish\" option" msgstr "\"publish\"オプションのリスト構文が不正です" -#: commands/publicationcmds.c:126 +#: commands/publicationcmds.c:125 #, c-format msgid "unrecognized \"publish\" value: \"%s\"" msgstr "識別できない\"publish\"の値: \"%s\"" -#: commands/publicationcmds.c:132 +#: commands/publicationcmds.c:140 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "識別できないパブリケーションのパラメータ: \"%s\"" -#: commands/publicationcmds.c:165 +#: commands/publicationcmds.c:172 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "FOR ALL TABLE 指定のパブリケーションを生成するためにはスーパユーザである必要があります" -#: commands/publicationcmds.c:341 +#: commands/publicationcmds.c:248 +#, c-format +msgid "wal_level is insufficient to publish logical changes" +msgstr "wal_level が論理更新情報のパブリッシュには不十分です" + +#: commands/publicationcmds.c:249 +#, c-format +msgid "Set wal_level to logical before creating subscriptions." +msgstr "wal_levelをlogicalに設定にしてからサブスクリプションを作成してください。" + +#: commands/publicationcmds.c:369 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "パブリケーション\"%s\"は FOR ALL TABLES と定義されています" -#: commands/publicationcmds.c:343 +#: commands/publicationcmds.c:371 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "FOR ALL TABLES指定のパブリケーションではテーブルの追加や削除はできません。" -#: commands/publicationcmds.c:648 +#: commands/publicationcmds.c:660 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "リレーション\"%s\"はパブリケーションの一部ではありません" -#: commands/publicationcmds.c:691 +#: commands/publicationcmds.c:703 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "パブリケーション\"%s\"の所有者を変更する権限がありません" -#: commands/publicationcmds.c:693 +#: commands/publicationcmds.c:705 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "FOR ALL TABLES設定のパブリケーションの所有者はスーパユーザである必要があります" -#: commands/schemacmds.c:106 commands/schemacmds.c:282 +#: commands/schemacmds.c:105 commands/schemacmds.c:258 #, c-format msgid "unacceptable schema name \"%s\"" msgstr "スキーマ名\"%s\"は受け付けられません" -#: commands/schemacmds.c:107 commands/schemacmds.c:283 +#: commands/schemacmds.c:106 commands/schemacmds.c:259 #, c-format msgid "The prefix \"pg_\" is reserved for system schemas." msgstr "接頭辞\"pg_\"はシステムスキーマ用に予約されています" -#: commands/schemacmds.c:121 +#: commands/schemacmds.c:120 #, c-format msgid "schema \"%s\" already exists, skipping" msgstr "スキーマ\"%s\"はすでに存在します、スキップします" -#: commands/seclabel.c:60 +#: commands/seclabel.c:129 #, c-format msgid "no security label providers have been loaded" msgstr "セキュリティラベルのプロバイダがロードされませんでした" -#: commands/seclabel.c:64 +#: commands/seclabel.c:133 #, c-format msgid "must specify provider when multiple security label providers have been loaded" msgstr "複数のセキュリティラベルプロバイダがロードされた時は、プロバイダを指定する必要があります" -#: commands/seclabel.c:82 +#: commands/seclabel.c:151 #, c-format msgid "security label provider \"%s\" is not loaded" msgstr "セキュリティラベルプロバイダ\"%s\"はロードされていません" +#: commands/seclabel.c:158 +#, c-format +msgid "security labels are not supported for this type of object" +msgstr "このプラットフォームではこの型のオブジェクトに対するセキュリティラベルはサポートしていません" + #: commands/sequence.c:140 #, c-format msgid "unlogged sequences are not supported" @@ -8375,2319 +8201,2346 @@ msgstr "シーケンスは関連するテーブルと同じスキーマでなけ msgid "cannot change ownership of identity sequence" msgstr "識別シーケンスの所有者は変更できません" -#: commands/sequence.c:1718 commands/tablecmds.c:11776 -#: commands/tablecmds.c:14286 +#: commands/sequence.c:1718 commands/tablecmds.c:12401 commands/tablecmds.c:14914 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "シーケンス\"%s\"はテーブル\"%s\"にリンクされています" -#: commands/statscmds.c:101 commands/statscmds.c:110 +#: commands/statscmds.c:104 commands/statscmds.c:113 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "CREATE STATISTICSで指定可能なリレーションは一つのみです" -#: commands/statscmds.c:128 +#: commands/statscmds.c:131 #, c-format msgid "relation \"%s\" is not a table, foreign table, or materialized view" msgstr "リレーション\"%s\"はテーブルや外部テーブル、または実体化ビューではありません" -#: commands/statscmds.c:171 +#: commands/statscmds.c:174 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "統計情報オブジェクト\"%s\"はすでに存在します、スキップします" -#: commands/statscmds.c:179 +#: commands/statscmds.c:182 #, c-format msgid "statistics object \"%s\" already exists" msgstr "統計情報オブジェクト\"%s\"はすでに存在します" -#: commands/statscmds.c:201 commands/statscmds.c:207 +#: commands/statscmds.c:204 commands/statscmds.c:210 #, c-format msgid "only simple column references are allowed in CREATE STATISTICS" msgstr "CREATE STATISTICSでは単純な列参照のみが指定可能です" -#: commands/statscmds.c:222 +#: commands/statscmds.c:225 #, c-format msgid "statistics creation on system columns is not supported" msgstr "システム列に対する統計情報の作成はサポートされていません" -#: commands/statscmds.c:229 +#: commands/statscmds.c:232 #, c-format msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" msgstr "列\"%s\"の型%sはデフォルトのbtreeオペレータクラスを持たないため統計情報では利用できません" -#: commands/statscmds.c:236 +#: commands/statscmds.c:239 #, c-format msgid "cannot have more than %d columns in statistics" msgstr "統計情報は%dを超える列を使用できません" -#: commands/statscmds.c:251 +#: commands/statscmds.c:254 #, c-format msgid "extended statistics require at least 2 columns" msgstr "拡張統計情報には最低でも2つの列が必要です" -#: commands/statscmds.c:269 +#: commands/statscmds.c:272 #, c-format msgid "duplicate column name in statistics definition" msgstr "定形情報定義中の列名が重複しています" -#: commands/statscmds.c:303 +#: commands/statscmds.c:306 +#, c-format +msgid "unrecognized statistics kind \"%s\"" +msgstr "認識できない統計情報種別\"%s\"" + +#: commands/statscmds.c:444 commands/tablecmds.c:7273 +#, c-format +msgid "statistics target %d is too low" +msgstr "統計情報目標%dは小さすぎます" + +#: commands/statscmds.c:452 commands/tablecmds.c:7281 +#, c-format +msgid "lowering statistics target to %d" +msgstr "統計情報目標を%dに減らします" + +#: commands/statscmds.c:475 #, c-format -msgid "unrecognized statistics kind \"%s\"" -msgstr "認識できない統計情報種別\"%s\"" +msgid "statistics object \"%s.%s\" does not exist, skipping" +msgstr "統計情報オブジェクト\"%s.%s\"は存在しません、スキップします" -#: commands/subscriptioncmds.c:188 +#: commands/subscriptioncmds.c:200 #, c-format msgid "unrecognized subscription parameter: \"%s\"" msgstr "認識できないサブスクリプションパラメータ: \"%s\"" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:202 commands/subscriptioncmds.c:208 -#: commands/subscriptioncmds.c:214 commands/subscriptioncmds.c:233 -#: commands/subscriptioncmds.c:239 +#: commands/subscriptioncmds.c:214 commands/subscriptioncmds.c:220 commands/subscriptioncmds.c:226 commands/subscriptioncmds.c:245 commands/subscriptioncmds.c:251 #, c-format msgid "%s and %s are mutually exclusive options" msgstr "%s と %s は排他なオプションです" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:246 commands/subscriptioncmds.c:252 +#: commands/subscriptioncmds.c:258 commands/subscriptioncmds.c:264 #, c-format msgid "subscription with %s must also set %s" msgstr "%s としたサブスクリプションでは %s を設定する必要があります" -#: commands/subscriptioncmds.c:294 +#: commands/subscriptioncmds.c:306 #, c-format msgid "publication name \"%s\" used more than once" msgstr "パブリケーション名\"%s\"が2回以上使われています" -#: commands/subscriptioncmds.c:358 +#: commands/subscriptioncmds.c:377 #, c-format msgid "must be superuser to create subscriptions" msgstr "サブスクリプションを生成するにはスーパユーザである必要があります" -#: commands/subscriptioncmds.c:450 commands/subscriptioncmds.c:543 -#: replication/logical/tablesync.c:846 replication/logical/worker.c:1705 +#: commands/subscriptioncmds.c:469 commands/subscriptioncmds.c:557 replication/logical/tablesync.c:857 replication/logical/worker.c:2129 #, c-format msgid "could not connect to the publisher: %s" msgstr "発行サーバへの接続ができませんでした: %s" -#: commands/subscriptioncmds.c:492 +#: commands/subscriptioncmds.c:511 #, c-format msgid "created replication slot \"%s\" on publisher" msgstr "発行サーバでレプリケーションスロット\"%s\"を作成しました" #. translator: %s is an SQL ALTER statement -#: commands/subscriptioncmds.c:510 +#: commands/subscriptioncmds.c:524 #, c-format msgid "tables were not subscribed, you will have to run %s to subscribe the tables" msgstr "テーブルは購読されていません、テーブルを購読するためには %s を実行する必要があります" -#: commands/subscriptioncmds.c:599 +#: commands/subscriptioncmds.c:613 #, c-format msgid "table \"%s.%s\" added to subscription \"%s\"" msgstr "テーブル\"%s.%s\"がサブスクリプション\"%s\"に追加されました" -#: commands/subscriptioncmds.c:623 +#: commands/subscriptioncmds.c:637 #, c-format msgid "table \"%s.%s\" removed from subscription \"%s\"" msgstr "テーブル\"%s.%s\"がサブスクリプション\"%s\"から削除されました" -#: commands/subscriptioncmds.c:695 +#: commands/subscriptioncmds.c:717 #, c-format msgid "cannot set %s for enabled subscription" msgstr "有効にされているサブスクリプションには %s を指定できません" -#: commands/subscriptioncmds.c:730 +#: commands/subscriptioncmds.c:765 #, c-format msgid "cannot enable subscription that does not have a slot name" msgstr "スロット名を指定されていないサブスクリプションを有効にはできません" -#: commands/subscriptioncmds.c:776 +#: commands/subscriptioncmds.c:817 #, c-format msgid "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" msgstr "refresh指定された ALTER SUBSCRIPTION は無効化されているサブスクリプションには実行できません" -#: commands/subscriptioncmds.c:777 +#: commands/subscriptioncmds.c:818 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgstr "ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false) を使ってください。" -#: commands/subscriptioncmds.c:795 +#: commands/subscriptioncmds.c:836 #, c-format msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESHは無効化されているサブスクリプションには実行できません" -#: commands/subscriptioncmds.c:875 +#: commands/subscriptioncmds.c:922 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "サブスクリプション\"%s\"は存在しません、スキップします" -#: commands/subscriptioncmds.c:1001 +#: commands/subscriptioncmds.c:1047 #, c-format msgid "could not connect to publisher when attempting to drop the replication slot \"%s\"" msgstr "レプリケーションスロット\"%s\"を削除するための発行者サーバへの接続に失敗しました" -#: commands/subscriptioncmds.c:1003 commands/subscriptioncmds.c:1018 -#: replication/logical/tablesync.c:895 replication/logical/tablesync.c:917 +#: commands/subscriptioncmds.c:1049 commands/subscriptioncmds.c:1064 replication/logical/tablesync.c:906 replication/logical/tablesync.c:928 #, c-format msgid "The error was: %s" msgstr "発生したエラー: %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1005 +#: commands/subscriptioncmds.c:1051 #, c-format msgid "Use %s to disassociate the subscription from the slot." msgstr "サブスクリプションのスロットへの関連付けを解除するには %s を実行してください。" -#: commands/subscriptioncmds.c:1016 +#: commands/subscriptioncmds.c:1062 #, c-format msgid "could not drop the replication slot \"%s\" on publisher" msgstr "発行サーバ上のレプリケーションスロット\"%s\"の削除に失敗しました" -#: commands/subscriptioncmds.c:1021 +#: commands/subscriptioncmds.c:1067 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "発行サーバ上のレプリケーションスロット\"%s\"を削除しました" -#: commands/subscriptioncmds.c:1062 +#: commands/subscriptioncmds.c:1104 #, c-format msgid "permission denied to change owner of subscription \"%s\"" msgstr "サブスクリプション\"%s\"の所有者を変更する権限がありません" -#: commands/subscriptioncmds.c:1064 +#: commands/subscriptioncmds.c:1106 #, c-format msgid "The owner of a subscription must be a superuser." msgstr "サブスクリプションの所有者はスーパユーザでなければなりません。" -#: commands/subscriptioncmds.c:1179 +#: commands/subscriptioncmds.c:1221 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "発行テーブルの一覧を発行サーバから受け取れませんでした: %s" -#: commands/tablecmds.c:222 commands/tablecmds.c:264 +#: commands/tablecmds.c:228 commands/tablecmds.c:270 #, c-format msgid "table \"%s\" does not exist" msgstr "テーブル\"%s\"は存在しません" -#: commands/tablecmds.c:223 commands/tablecmds.c:265 +#: commands/tablecmds.c:229 commands/tablecmds.c:271 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "テーブル\"%s\"は存在しません、スキップします" -#: commands/tablecmds.c:225 commands/tablecmds.c:267 +#: commands/tablecmds.c:231 commands/tablecmds.c:273 msgid "Use DROP TABLE to remove a table." msgstr "テーブルを削除するにはDROP TABLEを使用してください。" -#: commands/tablecmds.c:228 +#: commands/tablecmds.c:234 #, c-format msgid "sequence \"%s\" does not exist" msgstr "シーケンス\"%s\"は存在しません" -#: commands/tablecmds.c:229 +#: commands/tablecmds.c:235 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "シーケンス\"%s\"は存在しません、スキップします" -#: commands/tablecmds.c:231 +#: commands/tablecmds.c:237 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "シーケンスを削除するにはDROP SEQUENCEを使用してください。" -#: commands/tablecmds.c:234 +#: commands/tablecmds.c:240 #, c-format msgid "view \"%s\" does not exist" msgstr "ビュー\"%s\"は存在しません" -#: commands/tablecmds.c:235 +#: commands/tablecmds.c:241 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "ビュー\"%s\"は存在しません、スキップします" -#: commands/tablecmds.c:237 +#: commands/tablecmds.c:243 msgid "Use DROP VIEW to remove a view." msgstr "ビューを削除するにはDROP VIEWを使用してください。" -#: commands/tablecmds.c:240 +#: commands/tablecmds.c:246 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "実体化ビュー\"%s\"は存在しません" -#: commands/tablecmds.c:241 +#: commands/tablecmds.c:247 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "実体化ビュー\"%s\"は存在しません、スキップします" -#: commands/tablecmds.c:243 +#: commands/tablecmds.c:249 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "実体化ビューを削除するにはDROP MATERIALIZED VIEWを使用してください。" -#: commands/tablecmds.c:246 commands/tablecmds.c:270 commands/tablecmds.c:16408 -#: parser/parse_utilcmd.c:2045 +#: commands/tablecmds.c:252 commands/tablecmds.c:276 commands/tablecmds.c:17088 parser/parse_utilcmd.c:2084 #, c-format msgid "index \"%s\" does not exist" msgstr "インデックス\"%s\"は存在しません" -#: commands/tablecmds.c:247 commands/tablecmds.c:271 +#: commands/tablecmds.c:253 commands/tablecmds.c:277 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "インデックス\"%s\"は存在しません、スキップします" -#: commands/tablecmds.c:249 commands/tablecmds.c:273 +#: commands/tablecmds.c:255 commands/tablecmds.c:279 msgid "Use DROP INDEX to remove an index." msgstr "インデックスを削除するにはDROP INDEXを使用してください" -#: commands/tablecmds.c:254 +#: commands/tablecmds.c:260 #, c-format msgid "\"%s\" is not a type" msgstr "\"%s\"は型ではありません" -#: commands/tablecmds.c:255 +#: commands/tablecmds.c:261 msgid "Use DROP TYPE to remove a type." msgstr "型を削除するにはDROP TYPEを使用してください" -#: commands/tablecmds.c:258 commands/tablecmds.c:11615 -#: commands/tablecmds.c:14066 +#: commands/tablecmds.c:264 commands/tablecmds.c:12240 commands/tablecmds.c:14694 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "外部テーブル\"%s\"は存在しません" -#: commands/tablecmds.c:259 +#: commands/tablecmds.c:265 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "外部テーブル\"%s\"は存在しません、スキップします" -#: commands/tablecmds.c:261 +#: commands/tablecmds.c:267 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "外部テーブルを削除するには DROP FOREIGN TABLE を使用してください。" -#: commands/tablecmds.c:593 +#: commands/tablecmds.c:618 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMITは一時テーブルでのみ使用できます" -#: commands/tablecmds.c:624 +#: commands/tablecmds.c:649 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "セキュリティー制限操作中は、一時テーブルを作成できません" -#: commands/tablecmds.c:660 commands/tablecmds.c:12970 +#: commands/tablecmds.c:685 commands/tablecmds.c:13598 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "リレーション\"%s\"が複数回継承されました" -#: commands/tablecmds.c:834 +#: commands/tablecmds.c:866 #, c-format msgid "specifying a table access method is not supported on a partitioned table" msgstr "パーティション親テーブルではテーブルアクセスメソッドの指定はサポートされていません" -#: commands/tablecmds.c:930 +#: commands/tablecmds.c:962 #, c-format msgid "\"%s\" is not partitioned" msgstr "\"%s\"はパーティションされていません" -#: commands/tablecmds.c:1023 +#: commands/tablecmds.c:1056 #, c-format msgid "cannot partition using more than %d columns" msgstr "%d以上の列を使ったパーティションはできません" -#: commands/tablecmds.c:1079 -#, fuzzy, c-format -#| msgid "cannot create index on partitioned table \"%s\"" +#: commands/tablecmds.c:1112 +#, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" -msgstr "パーティションテーブル\"%s\"にはインデックスを作成できません" +msgstr "パーティションテーブル\"%s\"では外部子テーブルを作成できません" -#: commands/tablecmds.c:1081 -#, fuzzy, c-format -#| msgid "Table \"%s\" contains partitions that are foreign tables." +#: commands/tablecmds.c:1114 +#, c-format msgid "Table \"%s\" contains indexes that are unique." -msgstr "テーブル\"%s\"は外部テーブルを子テーブルとして含んでいます" +msgstr "テーブル\"%s\"はユニークインデックスを持っています" -#: commands/tablecmds.c:1242 +#: commands/tablecmds.c:1277 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLYは複数オブジェクトの削除をサポートしていません" -#: commands/tablecmds.c:1246 +#: commands/tablecmds.c:1281 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLYはCASCADEをサポートしません" -#: commands/tablecmds.c:1588 +#: commands/tablecmds.c:1641 #, c-format msgid "cannot truncate only a partitioned table" msgstr "パーティションの親テーブルのみの切り詰めはできません" -#: commands/tablecmds.c:1589 +#: commands/tablecmds.c:1642 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "ONLY キーワードを指定しないでください、もしくは子テーブルに対して直接 TRUNCATE ONLY を実行してください。" -#: commands/tablecmds.c:1658 +#: commands/tablecmds.c:1711 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "テーブル\"%s\"へのカスケードを削除します" -#: commands/tablecmds.c:1953 +#: commands/tablecmds.c:2018 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "他のセッションの一時テーブルを削除できません" -#: commands/tablecmds.c:2179 commands/tablecmds.c:12867 +#: commands/tablecmds.c:2242 commands/tablecmds.c:13495 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "パーティションテーブル\"%s\"からの継承はできません" -#: commands/tablecmds.c:2184 +#: commands/tablecmds.c:2247 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "パーティション子テーブル\"%s\"からの継承はできません" -#: commands/tablecmds.c:2192 parser/parse_utilcmd.c:2269 -#: parser/parse_utilcmd.c:2410 +#: commands/tablecmds.c:2255 parser/parse_utilcmd.c:2314 parser/parse_utilcmd.c:2456 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "継承しようとしたリレーション\"%s\"はテーブルまたは外部テーブルではありません" -#: commands/tablecmds.c:2204 +#: commands/tablecmds.c:2267 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "一時リレーションを永続リレーション\"%s\"の子テーブルとして作ることはできません" -#: commands/tablecmds.c:2213 commands/tablecmds.c:12846 +#: commands/tablecmds.c:2276 commands/tablecmds.c:13474 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "一時リレーション\"%s\"から継承することはできません" -#: commands/tablecmds.c:2223 commands/tablecmds.c:12854 +#: commands/tablecmds.c:2286 commands/tablecmds.c:13482 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "他のセッションの一時リレーションから継承することはできません" -#: commands/tablecmds.c:2275 +#: commands/tablecmds.c:2337 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "複数の継承される列\"%s\"の定義をマージしています" -#: commands/tablecmds.c:2283 +#: commands/tablecmds.c:2345 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "継承される列\"%s\"の型が競合しています" -#: commands/tablecmds.c:2285 commands/tablecmds.c:2308 -#: commands/tablecmds.c:2521 commands/tablecmds.c:2551 -#: parser/parse_coerce.c:1721 parser/parse_coerce.c:1741 -#: parser/parse_coerce.c:1761 parser/parse_coerce.c:1807 -#: parser/parse_coerce.c:1846 parser/parse_param.c:218 +#: commands/tablecmds.c:2347 commands/tablecmds.c:2370 commands/tablecmds.c:2583 commands/tablecmds.c:2613 parser/parse_coerce.c:1935 parser/parse_coerce.c:1955 parser/parse_coerce.c:1975 parser/parse_coerce.c:2030 parser/parse_coerce.c:2107 parser/parse_coerce.c:2141 parser/parse_param.c:218 #, c-format msgid "%s versus %s" msgstr "%s対%s" -#: commands/tablecmds.c:2294 +#: commands/tablecmds.c:2356 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "継承される列 \"%s\"の照合順序が競合しています" -#: commands/tablecmds.c:2296 commands/tablecmds.c:2533 -#: commands/tablecmds.c:5661 +#: commands/tablecmds.c:2358 commands/tablecmds.c:2595 commands/tablecmds.c:6025 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "\"%s\"対\"%s\"" -#: commands/tablecmds.c:2306 +#: commands/tablecmds.c:2368 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "継承される列 \"%s\"の格納パラメーターが競合しています" -#: commands/tablecmds.c:2322 +#: commands/tablecmds.c:2384 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "継承された列 \"%s\"の生成が競合しています" -#: commands/tablecmds.c:2427 commands/tablecmds.c:10518 -#: parser/parse_utilcmd.c:1065 parser/parse_utilcmd.c:1149 -#: parser/parse_utilcmd.c:1562 parser/parse_utilcmd.c:1669 +#: commands/tablecmds.c:2489 commands/tablecmds.c:11045 parser/parse_utilcmd.c:1094 parser/parse_utilcmd.c:1181 parser/parse_utilcmd.c:1597 parser/parse_utilcmd.c:1706 #, c-format msgid "cannot convert whole-row table reference" msgstr "行全体テーブル参照を変換できません" -#: commands/tablecmds.c:2428 parser/parse_utilcmd.c:1150 +#: commands/tablecmds.c:2490 parser/parse_utilcmd.c:1182 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "制約\"%s\"はテーブル\"%s\"への行全体参照を含みます。" -#: commands/tablecmds.c:2507 +#: commands/tablecmds.c:2569 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "継承される定義で列\"%s\"をマージしています" -#: commands/tablecmds.c:2511 +#: commands/tablecmds.c:2573 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "継承される定義で列\"%s\"を移動してマージします" -#: commands/tablecmds.c:2512 +#: commands/tablecmds.c:2574 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "ユーザが指定した列が継承した列の位置に移動されました。" -#: commands/tablecmds.c:2519 +#: commands/tablecmds.c:2581 #, c-format msgid "column \"%s\" has a type conflict" msgstr "列\"%s\"の型が競合しています" -#: commands/tablecmds.c:2531 +#: commands/tablecmds.c:2593 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "列\"%s\"の照合順序が競合しています" -#: commands/tablecmds.c:2549 +#: commands/tablecmds.c:2611 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "列\"%s\"の格納パラメーターが競合しています" -#: commands/tablecmds.c:2652 +#: commands/tablecmds.c:2639 +#, c-format +msgid "child column \"%s\" specifies generation expression" +msgstr "子テーブルの列\"%s\"は生成式を指定しています" + +#: commands/tablecmds.c:2641 +#, c-format +msgid "Omit the generation expression in the definition of the child table column to inherit the generation expression from the parent table." +msgstr "親テーブルの生成式を継承するために、子テーブルのカラムの生成式定義を無視しました" + +#: commands/tablecmds.c:2645 +#, c-format +msgid "column \"%s\" inherits from generated column but specifies default" +msgstr "列\"%s\"は生成列を継承しますが、default 指定がされています" + +#: commands/tablecmds.c:2650 +#, c-format +msgid "column \"%s\" inherits from generated column but specifies identity" +msgstr "列\"%s\"は生成列を継承しますが、識別列と指定されています" + +#: commands/tablecmds.c:2760 +#, c-format +msgid "column \"%s\" inherits conflicting generation expressions" +msgstr "列\"%s\"は競合する生成式を継承します" + +#: commands/tablecmds.c:2765 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "列\"%s\"は競合するデフォルト値を継承します" -#: commands/tablecmds.c:2654 +#: commands/tablecmds.c:2767 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "競合を解消するには明示的にデフォルトを指定してください" -#: commands/tablecmds.c:2699 +#: commands/tablecmds.c:2813 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "異なる式を持つ検査制約名\"%s\"が複数あります。" -#: commands/tablecmds.c:2876 +#: commands/tablecmds.c:2990 #, c-format msgid "cannot rename column of typed table" msgstr "型付けされたテーブルの列をリネームできません" -#: commands/tablecmds.c:2895 +#: commands/tablecmds.c:3009 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "\"%s\" はテーブル、ビュー、実体化ビュー、複合型、インデックス、外部テーブルのいずれでもありません" -#: commands/tablecmds.c:2989 +#: commands/tablecmds.c:3103 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "継承される列\"%s\"の名前を子テーブルでも変更する必要があります" -#: commands/tablecmds.c:3021 +#: commands/tablecmds.c:3135 #, c-format msgid "cannot rename system column \"%s\"" msgstr "システム列%s\"の名前を変更できません" -#: commands/tablecmds.c:3036 +#: commands/tablecmds.c:3150 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "継承される列\"%s\"の名前を変更できません" -#: commands/tablecmds.c:3188 +#: commands/tablecmds.c:3302 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "継承される制約\"%s\"の名前を子テーブルでも変更する必要があります" -#: commands/tablecmds.c:3195 +#: commands/tablecmds.c:3309 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "継承される制約\"%s\"の名前を変更できません" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3428 +#: commands/tablecmds.c:3542 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "このセッションで実行中の問い合わせで使用されているため\"%2$s\"を%1$sできません" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3437 +#: commands/tablecmds.c:3551 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "保留中のトリガイベントがあるため\"%2$s\"を%1$sできません" -#: commands/tablecmds.c:4570 +#: commands/tablecmds.c:4174 commands/tablecmds.c:4189 +#, c-format +msgid "cannot change persistence setting twice" +msgstr "永続性設定の変更は2度はできません" + +#: commands/tablecmds.c:4882 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "システムリレーション\"%sを書き換えられません" -#: commands/tablecmds.c:4576 +#: commands/tablecmds.c:4888 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "カタログテーブルとして使用されているテーブル\"%s\"は書き換えられません" -#: commands/tablecmds.c:4586 +#: commands/tablecmds.c:4898 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "他のセッションの一時テーブルを書き換えられません" -#: commands/tablecmds.c:4865 +#: commands/tablecmds.c:5187 #, c-format msgid "rewriting table \"%s\"" msgstr "テーブル\"%s\"に再書込しています" -#: commands/tablecmds.c:4869 +#: commands/tablecmds.c:5191 #, c-format msgid "verifying table \"%s\"" msgstr "テーブル\"%s\"を検証しています" -#: commands/tablecmds.c:5009 +#: commands/tablecmds.c:5356 #, c-format -msgid "column \"%s\" contains null values" -msgstr "列\"%s\"にはNULL値があります" +msgid "column \"%s\" of relation \"%s\" contains null values" +msgstr "リレーション\"%2$s\"の列\"%1$s\"にNULL値があります" -#: commands/tablecmds.c:5025 commands/tablecmds.c:9728 +#: commands/tablecmds.c:5373 #, c-format -msgid "check constraint \"%s\" is violated by some row" -msgstr "一部の行が検査制約\"%s\"に違反してます" +msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" +msgstr "一部の行がリレーション\"%2$s\"の検査制約\"%1$s\"に違反してます" -#: commands/tablecmds.c:5043 +#: commands/tablecmds.c:5392 partitioning/partbounds.c:3237 #, c-format -msgid "updated partition constraint for default partition would be violated by some row" -msgstr "デフォルトパーティションの一部の行が更新後のパーティション制約に違反しています" +msgid "updated partition constraint for default partition \"%s\" would be violated by some row" +msgstr "デフォルトパーティション\"%s\"の一部の行が更新後のパーティション制約に違反しています" -#: commands/tablecmds.c:5047 +#: commands/tablecmds.c:5398 #, c-format -msgid "partition constraint is violated by some row" -msgstr "一部の行がパーティション制約に違反しています" +msgid "partition constraint of relation \"%s\" is violated by some row" +msgstr "一部の行がリレーション\"%s\"のパーティション制約に違反しています" -#: commands/tablecmds.c:5192 commands/trigger.c:1538 commands/trigger.c:1644 +#: commands/tablecmds.c:5545 commands/trigger.c:1200 commands/trigger.c:1306 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "\"%s\"はテーブルやビュー、または外部テーブルではありません" -#: commands/tablecmds.c:5195 +#: commands/tablecmds.c:5548 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "\"%s\"はテーブル、ビュー、実体化ビュー、インデックスではありません" -#: commands/tablecmds.c:5201 +#: commands/tablecmds.c:5554 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "\"%s\"はテーブルや実体化ビュー、インデックスではありません" -#: commands/tablecmds.c:5204 +#: commands/tablecmds.c:5557 #, c-format msgid "\"%s\" is not a table, materialized view, or foreign table" msgstr "\"%s\"はテーブルや実体化ビュー、または外部テーブルではありません" -#: commands/tablecmds.c:5207 +#: commands/tablecmds.c:5560 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "\"%s\"はテーブルや外部テーブルではありません" -#: commands/tablecmds.c:5210 +#: commands/tablecmds.c:5563 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "\"%s\"はテーブル、複合型、外部テーブルのいずれでもありません" -#: commands/tablecmds.c:5213 commands/tablecmds.c:6719 +#: commands/tablecmds.c:5566 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "\"%s\"はテーブルやインデックス、実体化ビュー、インデックス、外部テーブルではありません" -#: commands/tablecmds.c:5223 +#: commands/tablecmds.c:5576 #, c-format msgid "\"%s\" is of the wrong type" msgstr "\"%s\"は誤った型です" -#: commands/tablecmds.c:5429 commands/tablecmds.c:5436 +#: commands/tablecmds.c:5783 commands/tablecmds.c:5790 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "型\"%s\"を変更できません。列\"%s\".\"%s\"でその型を使用しているためです" -#: commands/tablecmds.c:5443 +#: commands/tablecmds.c:5797 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "列%2$s\".\"%3$s\"がその行型を使用しているため、外部テーブル\"%1$s\"を変更できません。" -#: commands/tablecmds.c:5450 +#: commands/tablecmds.c:5804 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "テーブル\"%s\"を変更できません。その行型を列\"%s\".\"%s\"で使用しているためです" -#: commands/tablecmds.c:5506 +#: commands/tablecmds.c:5860 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "型付けされたテーブルの型であるため、外部テーブル\"%s\"を変更できません。" -#: commands/tablecmds.c:5508 +#: commands/tablecmds.c:5862 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "型付けされたテーブルを変更する場合も ALTER .. CASCADE を使用してください" -#: commands/tablecmds.c:5554 +#: commands/tablecmds.c:5908 #, c-format msgid "type %s is not a composite type" msgstr "型 %s は複合型ではありません" -#: commands/tablecmds.c:5580 +#: commands/tablecmds.c:5935 #, c-format msgid "cannot add column to typed table" msgstr "型付けされたテーブルに列を追加できません" -#: commands/tablecmds.c:5624 +#: commands/tablecmds.c:5988 #, c-format msgid "cannot add column to a partition" msgstr "パーティションに列は追加できません" -#: commands/tablecmds.c:5653 commands/tablecmds.c:13097 +#: commands/tablecmds.c:6017 commands/tablecmds.c:13725 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "子テーブル\"%s\"に異なる型の列\"%s\"があります" -#: commands/tablecmds.c:5659 commands/tablecmds.c:13104 +#: commands/tablecmds.c:6023 commands/tablecmds.c:13732 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "子テーブル\"%s\"に異なる照合順序の列\"%s\"があります" -#: commands/tablecmds.c:5673 +#: commands/tablecmds.c:6037 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "子\"%2$s\"の列\"%1$s\"の定義をマージしています" -#: commands/tablecmds.c:5697 +#: commands/tablecmds.c:6080 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "子テーブルを持つテーブルに識別列を再帰的に追加することはできません" -#: commands/tablecmds.c:5931 +#: commands/tablecmds.c:6319 #, c-format msgid "column must be added to child tables too" msgstr "列は子テーブルでも追加する必要があります" -#: commands/tablecmds.c:6006 +#: commands/tablecmds.c:6397 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "リレーション\"%2$s\"の列\"%1$s\"はすでに存在します、スキップします" -#: commands/tablecmds.c:6013 +#: commands/tablecmds.c:6404 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "リレーション\"%2$s\"の列\"%1$s\"はすでに存在します" -#: commands/tablecmds.c:6079 commands/tablecmds.c:10171 +#: commands/tablecmds.c:6470 commands/tablecmds.c:10683 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "パーティションが存在する場合にはパーティションテーブルのみから制約を削除することはできません" -#: commands/tablecmds.c:6080 commands/tablecmds.c:6349 -#: commands/tablecmds.c:7132 commands/tablecmds.c:10172 +#: commands/tablecmds.c:6471 commands/tablecmds.c:6740 commands/tablecmds.c:7691 commands/tablecmds.c:10684 #, c-format msgid "Do not specify the ONLY keyword." msgstr "ONLYキーワードを指定しないでください。" -#: commands/tablecmds.c:6117 commands/tablecmds.c:6275 -#: commands/tablecmds.c:6417 commands/tablecmds.c:6500 -#: commands/tablecmds.c:6594 commands/tablecmds.c:6653 -#: commands/tablecmds.c:6803 commands/tablecmds.c:6873 -#: commands/tablecmds.c:6965 commands/tablecmds.c:10311 -#: commands/tablecmds.c:11638 +#: commands/tablecmds.c:6508 commands/tablecmds.c:6666 commands/tablecmds.c:6808 commands/tablecmds.c:6893 commands/tablecmds.c:6987 commands/tablecmds.c:7046 commands/tablecmds.c:7148 commands/tablecmds.c:7314 commands/tablecmds.c:7384 commands/tablecmds.c:7477 commands/tablecmds.c:10838 commands/tablecmds.c:12263 #, c-format msgid "cannot alter system column \"%s\"" msgstr "システム列\"%s\"を変更できません" -#: commands/tablecmds.c:6123 commands/tablecmds.c:6423 +#: commands/tablecmds.c:6514 commands/tablecmds.c:6814 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "リレーション\"%2$s\"の列\"%1$s\"は識別列です" -#: commands/tablecmds.c:6159 +#: commands/tablecmds.c:6550 #, c-format msgid "column \"%s\" is in a primary key" msgstr "列\"%s\"はプライマリキーで使用しています" -#: commands/tablecmds.c:6181 +#: commands/tablecmds.c:6572 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "列\"%s\"は親テーブルでNOT NULL指定されています" -#: commands/tablecmds.c:6346 commands/tablecmds.c:7586 +#: commands/tablecmds.c:6737 commands/tablecmds.c:8150 #, c-format msgid "constraint must be added to child tables too" msgstr "制約は子テーブルにも追加する必要があります" -#: commands/tablecmds.c:6347 +#: commands/tablecmds.c:6738 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "リレーション\"%2$s\"の列\"%1$s\"はすでにNOT NULLLではありません。" -#: commands/tablecmds.c:6382 +#: commands/tablecmds.c:6773 #, c-format msgid "existing constraints on column \"%s\".\"%s\" are sufficient to prove that it does not contain nulls" msgstr "カラム\"%s\".\"%s\"上の既存の制約はNULLを含まないことを照明するのに十分です" -#: commands/tablecmds.c:6425 +#: commands/tablecmds.c:6816 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "代わりに ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY を使ってください。" -#: commands/tablecmds.c:6430 +#: commands/tablecmds.c:6821 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "リレーション\"%2$s\"の列\"%1$s\"は生成カラムです" -#: commands/tablecmds.c:6511 +#: commands/tablecmds.c:6824 +#, c-format +msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." +msgstr "代わりに ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION を使ってください。" + +#: commands/tablecmds.c:6904 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "識別列を追加するにはリレーション\"%s\"の列\"%s\"はNOT NULLと宣言されている必要があります" -#: commands/tablecmds.c:6517 +#: commands/tablecmds.c:6910 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "リレーション\"%2$s\"の列\"%1$s\"はすでに識別列です" -#: commands/tablecmds.c:6523 +#: commands/tablecmds.c:6916 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "リレーション\"%2$s\"の列\"%1$s\"はすでにデフォルト値が指定されています" -#: commands/tablecmds.c:6600 commands/tablecmds.c:6661 +#: commands/tablecmds.c:6993 commands/tablecmds.c:7054 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "リレーション\"%2$s\"の列\"%1$s\"は識別列ではありません" -#: commands/tablecmds.c:6666 +#: commands/tablecmds.c:7059 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "リレーション\"%2$s\"の列\"%1$s\"は識別列ではありません、スキップします" -#: commands/tablecmds.c:6731 +#: commands/tablecmds.c:7118 #, c-format -msgid "cannot refer to non-index column by number" -msgstr "非インデックス列を番号で参照することはできません" +msgid "cannot drop generation expression from inherited column" +msgstr "継承列から生成式を削除することはできません" -#: commands/tablecmds.c:6762 +#: commands/tablecmds.c:7156 #, c-format -msgid "statistics target %d is too low" -msgstr "統計情報目標%dは小さすぎます" +msgid "column \"%s\" of relation \"%s\" is not a stored generated column" +msgstr "リレーション\"%2$s\"の列\"%1$s\"は格納生成列ではありません" -#: commands/tablecmds.c:6770 +#: commands/tablecmds.c:7161 #, c-format -msgid "lowering statistics target to %d" -msgstr "統計情報目標を%dに減らします" +msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" +msgstr "リレーション\"%2$s\"の列\"%1$s\"は格納生成列ではありません、スキップします" + +#: commands/tablecmds.c:7261 +#, c-format +msgid "cannot refer to non-index column by number" +msgstr "非インデックス列を番号で参照することはできません" -#: commands/tablecmds.c:6793 +#: commands/tablecmds.c:7304 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "リレーション \"%2$s\"の列 %1$d は存在しません" -#: commands/tablecmds.c:6812 +#: commands/tablecmds.c:7323 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "インデックス\"%2$s\"の包含列\"%1$s\"への統計情報の変更はできません" -#: commands/tablecmds.c:6817 +#: commands/tablecmds.c:7328 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "インデックス \"%2$s\"の非式列\"%1$s\"の統計情報の変更はできません" -#: commands/tablecmds.c:6819 +#: commands/tablecmds.c:7330 #, c-format msgid "Alter statistics on table column instead." msgstr "代わりにテーブルカラムの統計情報を変更してください。" -#: commands/tablecmds.c:6945 +#: commands/tablecmds.c:7457 #, c-format msgid "invalid storage type \"%s\"" msgstr "不正な格納タイプ\"%s\"" -#: commands/tablecmds.c:6977 +#: commands/tablecmds.c:7489 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "列のデータ型%sは格納タイプPLAINしか取ることができません" -#: commands/tablecmds.c:7012 +#: commands/tablecmds.c:7571 #, c-format msgid "cannot drop column from typed table" msgstr "型付けされたテーブルから列を削除できません" -#: commands/tablecmds.c:7071 +#: commands/tablecmds.c:7630 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "リレーション\"%2$s\"の列\"%1$s\"は存在しません、スキップします" -#: commands/tablecmds.c:7084 +#: commands/tablecmds.c:7643 #, c-format msgid "cannot drop system column \"%s\"" msgstr "システム列\"%s\"を削除できません" -#: commands/tablecmds.c:7094 +#: commands/tablecmds.c:7653 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "継承される列\"%s\"を削除できません" -#: commands/tablecmds.c:7107 -#, fuzzy, c-format -#| msgid "relation \"%s\" is not a partition of relation \"%s\"" +#: commands/tablecmds.c:7666 +#, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" -msgstr "リレーション\"%s\"はリレーション\"%s\"のパーティション子テーブルではありません" +msgstr "列\"%s\"はリレーション\"%s\"のパーティションキーの一部であるため、削除できません" -#: commands/tablecmds.c:7131 +#: commands/tablecmds.c:7690 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "子テーブルが存在する場合にはパーティションの親テーブルのみから列を削除することはできません" -#: commands/tablecmds.c:7307 +#: commands/tablecmds.c:7871 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX はパーティションテーブルではサポートされていません" -#: commands/tablecmds.c:7332 +#: commands/tablecmds.c:7896 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX はインデックス\"%s\"を\"%s\"にリネームします" -#: commands/tablecmds.c:7666 +#: commands/tablecmds.c:8230 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "パーティションテーブル\"%s\"で定義されているリレーション\"%s\"を参照する外部キーではONLY指定はできません" -#: commands/tablecmds.c:7672 +#: commands/tablecmds.c:8236 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "パーティションテーブル\"%1$s\"にリレーション\"%2$s\"を参照する NOT VALID 指定の外部キーは追加できません " -#: commands/tablecmds.c:7675 +#: commands/tablecmds.c:8239 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "この機能はパーティションテーブルに対してはサポートされていません。" -#: commands/tablecmds.c:7682 commands/tablecmds.c:8086 +#: commands/tablecmds.c:8246 commands/tablecmds.c:8651 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "参照先のリレーション\"%s\"はテーブルではありません" -#: commands/tablecmds.c:7705 +#: commands/tablecmds.c:8269 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "永続テーブルの制約は永続テーブルだけを参照できます" -#: commands/tablecmds.c:7712 +#: commands/tablecmds.c:8276 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "UNLOGGEDテーブルに対する制約は、永続テーブルまたはUNLOGGEDテーブルだけを参照する場合があります" -#: commands/tablecmds.c:7718 +#: commands/tablecmds.c:8282 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "一時テーブルに対する制約は一時テーブルだけを参照する場合があります" -#: commands/tablecmds.c:7722 +#: commands/tablecmds.c:8286 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "一時テーブルに対する制約にはこのセッションの一時テーブルを加える必要があります" -#: commands/tablecmds.c:7788 commands/tablecmds.c:7794 +#: commands/tablecmds.c:8352 commands/tablecmds.c:8358 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "生成カラムを含む外部キー制約に対する不正な %s 処理" -#: commands/tablecmds.c:7810 +#: commands/tablecmds.c:8374 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "外部キーの参照列数と非参照列数が合いません" -#: commands/tablecmds.c:7917 +#: commands/tablecmds.c:8481 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "外部キー制約\"%sは実装されていません" -#: commands/tablecmds.c:7919 +#: commands/tablecmds.c:8483 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "キーとなる列\"%s\"と\"%s\"との間で型に互換性がありません:%sと%s" -#: commands/tablecmds.c:8282 commands/tablecmds.c:8670 -#: parser/parse_utilcmd.c:753 parser/parse_utilcmd.c:882 +#: commands/tablecmds.c:8846 commands/tablecmds.c:9239 parser/parse_utilcmd.c:763 parser/parse_utilcmd.c:892 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "外部テーブルでは外部キー制約はサポートされていません" -#: commands/tablecmds.c:9037 commands/tablecmds.c:9200 -#: commands/tablecmds.c:10128 commands/tablecmds.c:10203 +#: commands/tablecmds.c:9605 commands/tablecmds.c:9768 commands/tablecmds.c:10640 commands/tablecmds.c:10715 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "リレーション\"%2$s\"の制約\"%1$s\"は存在しません" -#: commands/tablecmds.c:9044 +#: commands/tablecmds.c:9612 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "リレーション\"%2$s\"の制約\"%1$s\"は外部キー制約ではありません" -#: commands/tablecmds.c:9208 +#: commands/tablecmds.c:9776 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "リレーション\"%2$s\"の制約\"%1$s\"は外部キー制約でも検査制約でもありません" -#: commands/tablecmds.c:9278 +#: commands/tablecmds.c:9854 #, c-format msgid "constraint must be validated on child tables too" msgstr "制約は子テーブルでも検証される必要があります" -#: commands/tablecmds.c:9344 +#: commands/tablecmds.c:9938 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "外部キー制約で参照される列\"%s\"が存在しません" -#: commands/tablecmds.c:9349 +#: commands/tablecmds.c:9943 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "外部キーでは%dを超えるキーを持つことができません" -#: commands/tablecmds.c:9414 +#: commands/tablecmds.c:10008 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "被参照テーブル\"%s\"には遅延可能プライマリキーは使用できません" -#: commands/tablecmds.c:9431 +#: commands/tablecmds.c:10025 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "被参照テーブル\"%s\"にはプライマリキーがありません" -#: commands/tablecmds.c:9496 +#: commands/tablecmds.c:10090 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "外部キーの被参照列リストには重複があってはなりません" -#: commands/tablecmds.c:9590 +#: commands/tablecmds.c:10184 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "被参照テーブル\"%s\"に対しては、遅延可能な一意性制約は使用できません" -#: commands/tablecmds.c:9595 +#: commands/tablecmds.c:10189 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "被参照テーブル\"%s\"に、指定したキーに一致する一意性制約がありません" -#: commands/tablecmds.c:9763 +#: commands/tablecmds.c:10277 #, c-format msgid "validating foreign key constraint \"%s\"" msgstr "外部キー制約\"%s\"を検証しています" -#: commands/tablecmds.c:10084 +#: commands/tablecmds.c:10596 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "リレーション\"%2$s\"の継承された制約\"%1$s\"を削除できません" -#: commands/tablecmds.c:10134 +#: commands/tablecmds.c:10646 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "リレーション\"%2$s\"の制約\"%1$s\"は存在しません、スキップします" -#: commands/tablecmds.c:10295 +#: commands/tablecmds.c:10822 #, c-format msgid "cannot alter column type of typed table" msgstr "型付けされたテーブルの列の型を変更できません" -#: commands/tablecmds.c:10322 +#: commands/tablecmds.c:10849 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "継承される列\"%s\"を変更できません" -#: commands/tablecmds.c:10331 -#, fuzzy, c-format -#| msgid "collation of partition bound value for column \"%s\" does not match partition key collation \"%s\"" +#: commands/tablecmds.c:10858 +#, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" -msgstr "列\"%s\"に対するパーティション境界値の照合順序がパーティションキーの照合順序\"%s\"と合致しません" +msgstr "列\"%s\"はリレーション\"%s\"のパーティションキーの一部であるため、変更できません" -#: commands/tablecmds.c:10381 +#: commands/tablecmds.c:10908 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "列\"%s\"に対するUSING句の結果は自動的に%s型に型変換できません" -#: commands/tablecmds.c:10384 +#: commands/tablecmds.c:10911 #, c-format msgid "You might need to add an explicit cast." msgstr "必要に応じて明示的な型変換を追加してください。" -#: commands/tablecmds.c:10388 +#: commands/tablecmds.c:10915 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "列\"%s\"は型%sには自動的に型変換できません" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:10391 +#: commands/tablecmds.c:10918 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "必要に応じて\"USING %s::%s\"を追加してください。" -#: commands/tablecmds.c:10490 -#, fuzzy, c-format -#| msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" +#: commands/tablecmds.c:11018 +#, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" -msgstr "リレーション\"%2$s\"の継承された制約\"%1$s\"を削除できません" +msgstr "リレーション\"%2$s\"の継承列\"%1$s\"は変更できません" -#: commands/tablecmds.c:10519 +#: commands/tablecmds.c:11046 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "USING式が行全体テーブル参照を含んでいます。" -#: commands/tablecmds.c:10530 +#: commands/tablecmds.c:11057 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "継承される列\"%s\"の型を子テーブルで変更しなければなりません" -#: commands/tablecmds.c:10655 +#: commands/tablecmds.c:11182 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "列\"%s\"の型を2回変更することはできません" -#: commands/tablecmds.c:10693 +#: commands/tablecmds.c:11220 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "カラム\"%s\"に対する生成式は自動的に%s型にキャストできません" -#: commands/tablecmds.c:10698 +#: commands/tablecmds.c:11225 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "列\"%s\"のデフォルト値を自動的に%s型にキャストできません" -#: commands/tablecmds.c:10776 +#: commands/tablecmds.c:11303 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "生成カラムで使用される列の型は変更できません" -#: commands/tablecmds.c:10777 +#: commands/tablecmds.c:11304 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "カラム\"%s\"は生成カラム\"%s\"で使われています。" -#: commands/tablecmds.c:10798 +#: commands/tablecmds.c:11325 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "ビューまたはルールで使用される列の型は変更できません" -#: commands/tablecmds.c:10799 commands/tablecmds.c:10818 -#: commands/tablecmds.c:10836 +#: commands/tablecmds.c:11326 commands/tablecmds.c:11345 commands/tablecmds.c:11363 #, c-format msgid "%s depends on column \"%s\"" msgstr "%sは列\"%s\"に依存しています" -#: commands/tablecmds.c:10817 +#: commands/tablecmds.c:11344 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "トリガー定義で使用される列の型は変更できません" -#: commands/tablecmds.c:10835 +#: commands/tablecmds.c:11362 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "ポリシ定義で使用されている列の型は変更できません" -#: commands/tablecmds.c:11746 commands/tablecmds.c:11758 +#: commands/tablecmds.c:12371 commands/tablecmds.c:12383 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "インデックス\"%s\"の所有者を変更できません" -#: commands/tablecmds.c:11748 commands/tablecmds.c:11760 +#: commands/tablecmds.c:12373 commands/tablecmds.c:12385 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "代わりにインデックスのテーブルの所有者を変更してください" -#: commands/tablecmds.c:11774 +#: commands/tablecmds.c:12399 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "シーケンス\"%s\"の所有者を変更できません" -#: commands/tablecmds.c:11788 commands/tablecmds.c:14985 +#: commands/tablecmds.c:12413 commands/tablecmds.c:15600 #, c-format msgid "Use ALTER TYPE instead." msgstr "代わりにALTER TYPEを使用してください。" -#: commands/tablecmds.c:11797 +#: commands/tablecmds.c:12422 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "\"%s\"はテーブル、ビュー、シーケンス、外部テーブルではありません" -#: commands/tablecmds.c:12137 +#: commands/tablecmds.c:12761 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "SET TABLESPACEサブコマンドを複数指定できません" -#: commands/tablecmds.c:12212 +#: commands/tablecmds.c:12838 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "\"%s\"はテーブル、ビュー、実体化ビュー、インデックス、TOASTテーブルではありません" -#: commands/tablecmds.c:12245 commands/view.c:504 +#: commands/tablecmds.c:12871 commands/view.c:494 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTIONは自動更新可能ビューでのみサポートされます" -#: commands/tablecmds.c:12385 +#: commands/tablecmds.c:13011 #, c-format msgid "cannot move system relation \"%s\"" msgstr "システムリレーション\"%s\"を移動できません" -#: commands/tablecmds.c:12401 +#: commands/tablecmds.c:13027 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "他のセッションの一時テーブルを移動できません" -#: commands/tablecmds.c:12569 +#: commands/tablecmds.c:13197 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "テーブルスペースにはテーブル、インデックスおよび実体化ビューしかありません" -#: commands/tablecmds.c:12581 +#: commands/tablecmds.c:13209 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "pg_globalテーブルスペースとの間のリレーションの移動はできません" -#: commands/tablecmds.c:12673 +#: commands/tablecmds.c:13301 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "リレーション\"%s.%s\"のロックが獲得できなかったため中断します" -#: commands/tablecmds.c:12689 +#: commands/tablecmds.c:13317 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "テーブルスペース\"%s\"には合致するリレーションはありませんでした" -#: commands/tablecmds.c:12805 +#: commands/tablecmds.c:13433 #, c-format msgid "cannot change inheritance of typed table" msgstr "型付けされたテーブルの継承を変更できません" -#: commands/tablecmds.c:12810 commands/tablecmds.c:13306 +#: commands/tablecmds.c:13438 commands/tablecmds.c:13934 #, c-format msgid "cannot change inheritance of a partition" msgstr "パーティションの継承は変更できません" -#: commands/tablecmds.c:12815 +#: commands/tablecmds.c:13443 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "パーティションテーブルの継承は変更できません" -#: commands/tablecmds.c:12861 +#: commands/tablecmds.c:13489 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "他のセッションの一時テーブルを継承できません" -#: commands/tablecmds.c:12874 +#: commands/tablecmds.c:13502 #, c-format msgid "cannot inherit from a partition" msgstr "パーティションからの継承はできません" -#: commands/tablecmds.c:12896 commands/tablecmds.c:15621 +#: commands/tablecmds.c:13524 commands/tablecmds.c:16240 #, c-format msgid "circular inheritance not allowed" msgstr "循環継承を行うことはできません" -#: commands/tablecmds.c:12897 commands/tablecmds.c:15622 +#: commands/tablecmds.c:13525 commands/tablecmds.c:16241 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\"はすでに\"%s\"の子です" -#: commands/tablecmds.c:12910 +#: commands/tablecmds.c:13538 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "トリガ\"%s\"によってテーブル\"%s\"が継承子テーブルになることができません" -#: commands/tablecmds.c:12912 +#: commands/tablecmds.c:13540 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "遷移テーブルを使用したROWトリガは継承関係ではサポートされていません。" -#: commands/tablecmds.c:13115 +#: commands/tablecmds.c:13743 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "子テーブルの列\"%s\"はNOT NULLである必要があります" -#: commands/tablecmds.c:13142 +#: commands/tablecmds.c:13770 #, c-format msgid "child table is missing column \"%s\"" msgstr "子テーブルには列\"%s\"がありません" -#: commands/tablecmds.c:13230 +#: commands/tablecmds.c:13858 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "子テーブル\"%s\"では検査制約\"%s\"に異なった定義がされています" -#: commands/tablecmds.c:13238 +#: commands/tablecmds.c:13866 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "制約\"%s\"は子テーブル\"%s\"上の継承されない制約と競合します" -#: commands/tablecmds.c:13249 +#: commands/tablecmds.c:13877 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "制約\"%s\"は子テーブル\"%s\"のNOT VALID制約と衝突しています" -#: commands/tablecmds.c:13284 +#: commands/tablecmds.c:13912 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "子テーブルには制約\"%s\"がありません" -#: commands/tablecmds.c:13373 +#: commands/tablecmds.c:14001 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "リレーション\"%s\"はリレーション\"%s\"のパーティション子テーブルではありません" -#: commands/tablecmds.c:13379 +#: commands/tablecmds.c:14007 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "リレーション\"%s\"はリレーション\"%s\"の親ではありません" -#: commands/tablecmds.c:13607 +#: commands/tablecmds.c:14235 #, c-format msgid "typed tables cannot inherit" msgstr "型付けされたテーブルは継承できません" -#: commands/tablecmds.c:13637 +#: commands/tablecmds.c:14265 #, c-format msgid "table is missing column \"%s\"" msgstr "テーブルには列\"%s\"がありません" -#: commands/tablecmds.c:13648 +#: commands/tablecmds.c:14276 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "テーブルには列\"%s\"がありますが型は\"%s\"を必要としています" -#: commands/tablecmds.c:13657 +#: commands/tablecmds.c:14285 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "テーブル\"%s\"では列\"%s\"の型が異なっています" -#: commands/tablecmds.c:13671 +#: commands/tablecmds.c:14299 #, c-format msgid "table has extra column \"%s\"" msgstr "テーブルに余分な列\"%s\"があります" -#: commands/tablecmds.c:13723 +#: commands/tablecmds.c:14351 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\"は型付けされたテーブルではありません" -#: commands/tablecmds.c:13905 +#: commands/tablecmds.c:14533 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "非ユニークインデックス\"%s\"は複製識別としては使用できません" -#: commands/tablecmds.c:13911 +#: commands/tablecmds.c:14539 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "一意性を即時検査しないインデックス\"%s\"は複製識別には使用できません" -#: commands/tablecmds.c:13917 +#: commands/tablecmds.c:14545 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "式インデックス\"%s\"は複製識別としては使用できません" -#: commands/tablecmds.c:13923 +#: commands/tablecmds.c:14551 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "部分インデックス\"%s\"を複製識別としては使用できません" -#: commands/tablecmds.c:13929 +#: commands/tablecmds.c:14557 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "無効なインデックス\"%s\"は複製識別としては使用できません" -#: commands/tablecmds.c:13946 +#: commands/tablecmds.c:14574 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "列%2$dはシステム列であるためインデックス\"%1$s\"は複製識別には使えません" -#: commands/tablecmds.c:13953 +#: commands/tablecmds.c:14581 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "列\"%2$s\"はnull可であるためインデックス\"%1$s\"は複製識別には使えません" -#: commands/tablecmds.c:14146 +#: commands/tablecmds.c:14774 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "テーブル\"%s\"は一時テーブルであるため、ログ出力設定を変更できません" -#: commands/tablecmds.c:14170 +#: commands/tablecmds.c:14798 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "テーブル\"%s\"はパブリケーションの一部であるため、UNLOGGEDに変更できません" -#: commands/tablecmds.c:14172 +#: commands/tablecmds.c:14800 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "UNLOGGEDリレーションはレプリケーションできません。" -#: commands/tablecmds.c:14217 +#: commands/tablecmds.c:14845 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "テーブル\"%s\"はUNLOGGEDテーブル\"%s\"を参照しているためLOGGEDには設定できません" -#: commands/tablecmds.c:14227 +#: commands/tablecmds.c:14855 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "テーブル\"%s\"はLOGGEDテーブル\"%s\"を参照しているためUNLOGGEDには設定できません" -#: commands/tablecmds.c:14285 +#: commands/tablecmds.c:14913 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "所有するシーケンスを他のスキーマに移動することができません" -#: commands/tablecmds.c:14391 +#: commands/tablecmds.c:15020 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "リレーション\"%s\"はスキーマ\"%s\"内にすでに存在します" -#: commands/tablecmds.c:14968 +#: commands/tablecmds.c:15583 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\"は複合型ではありません" -#: commands/tablecmds.c:15000 +#: commands/tablecmds.c:15615 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "\"%s\"はテーブル、ビュー、実体化ビュー、シーケンス、外部テーブルではありません" -#: commands/tablecmds.c:15035 +#: commands/tablecmds.c:15650 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "識別できないパーティションストラテジ \"%s\"" -#: commands/tablecmds.c:15043 +#: commands/tablecmds.c:15658 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "\"list\"パーティションストラテジは2つ以上の列に対しては使えません" -#: commands/tablecmds.c:15109 +#: commands/tablecmds.c:15724 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "パーティションキーに指定されている列\"%s\"は存在しません" -#: commands/tablecmds.c:15117 +#: commands/tablecmds.c:15732 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "パーティションキーでシステム列\"%s\"は使用できません" -#: commands/tablecmds.c:15128 commands/tablecmds.c:15233 +#: commands/tablecmds.c:15743 commands/tablecmds.c:15857 #, c-format msgid "cannot use generated column in partition key" msgstr "パーティションキーで生成カラムは使用できません" -#: commands/tablecmds.c:15129 commands/tablecmds.c:15234 commands/trigger.c:659 -#: rewrite/rewriteHandler.c:826 rewrite/rewriteHandler.c:843 +#: commands/tablecmds.c:15744 commands/tablecmds.c:15858 commands/trigger.c:641 rewrite/rewriteHandler.c:829 rewrite/rewriteHandler.c:846 #, c-format msgid "Column \"%s\" is a generated column." msgstr "列\"%s\"は生成カラムです。" -#: commands/tablecmds.c:15193 +#: commands/tablecmds.c:15820 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "パーティションキー式で使われる関数はIMMUTABLE指定されている必要があります" -#: commands/tablecmds.c:15210 -#, c-format -msgid "partition key expressions cannot contain whole-row references" -msgstr "パーティションキー式は行全体参照を含むことはできません" - -#: commands/tablecmds.c:15217 +#: commands/tablecmds.c:15840 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "パーティションキー式はシステム列への参照を含むことができません" -#: commands/tablecmds.c:15246 +#: commands/tablecmds.c:15870 #, c-format msgid "cannot use constant expression as partition key" msgstr "定数式をパーティションキーとして使うことはできません" -#: commands/tablecmds.c:15267 +#: commands/tablecmds.c:15891 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "パーティション式で使用する照合順序を特定できませんでした" -#: commands/tablecmds.c:15302 +#: commands/tablecmds.c:15926 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "ハッシュ演算子クラスを指定するか、もしくはこのデータ型にデフォルトのハッシュ演算子クラスを定義する必要があります。" -#: commands/tablecmds.c:15308 +#: commands/tablecmds.c:15932 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "btree演算子クラスを指定するか、もしくはこのデータ型にデフォルトのbtree演算子クラスを定義するかする必要があります。" -#: commands/tablecmds.c:15453 +#: commands/tablecmds.c:16077 #, c-format msgid "partition constraint for table \"%s\" is implied by existing constraints" msgstr "テーブル\"%s\"のパーティション制約は既存の制約によって暗黙的に満たされています" -#: commands/tablecmds.c:15457 partitioning/partbounds.c:1256 -#: partitioning/partbounds.c:1307 +#: commands/tablecmds.c:16081 partitioning/partbounds.c:3131 partitioning/partbounds.c:3182 #, c-format msgid "updated partition constraint for default partition \"%s\" is implied by existing constraints" msgstr "デフォルトパーティション \"%s\" に対する更新されたパーティション制約は既存の制約によって暗黙的に満たされています" -#: commands/tablecmds.c:15561 +#: commands/tablecmds.c:16180 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\"はすでパーティションです" -#: commands/tablecmds.c:15567 +#: commands/tablecmds.c:16186 #, c-format msgid "cannot attach a typed table as partition" msgstr "型付けされたテーブルをパーティションにアタッチすることはできません" -#: commands/tablecmds.c:15583 +#: commands/tablecmds.c:16202 #, c-format msgid "cannot attach inheritance child as partition" msgstr "継承子テーブルをパーティションにアタッチすることはできません" -#: commands/tablecmds.c:15597 +#: commands/tablecmds.c:16216 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "継承親テーブルをパーティションにアタッチすることはできません" -#: commands/tablecmds.c:15631 +#: commands/tablecmds.c:16250 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "一時リレーションを永続リレーション \"%s\" の子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:15639 +#: commands/tablecmds.c:16258 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "永続リレーションを一時リレーション\"%s\"のパーティション子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:15647 +#: commands/tablecmds.c:16266 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "他セッションの一時リレーションのパーティション子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:15654 +#: commands/tablecmds.c:16273 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "他セッションの一時リレーションにパーティション子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:15674 +#: commands/tablecmds.c:16293 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "テーブル\"%1$s\"は親テーブル\"%3$s\"にない列\"%2$s\"を含んでいます" -#: commands/tablecmds.c:15677 +#: commands/tablecmds.c:16296 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "新しいパーティションは親に存在する列のみを含むことができます。" -#: commands/tablecmds.c:15689 +#: commands/tablecmds.c:16308 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "トリガ\"%s\"のため、テーブル\"%s\"はパーティション子テーブルにはなれません" -#: commands/tablecmds.c:15691 commands/trigger.c:465 +#: commands/tablecmds.c:16310 commands/trigger.c:447 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "遷移テーブルを使用するROWトリガはパーティションではサポートされません" -#: commands/tablecmds.c:15858 -#, fuzzy, c-format -#| msgid "cannot attach index \"%s\" as a partition of index \"%s\"" +#: commands/tablecmds.c:16473 +#, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" -msgstr "インデックス\"%s\"をインデックス\"%s\"の子インデックスとしてアタッチすることはできません" +msgstr "外部テーブル\"%s\"はパーティションテーブル\"%s\"の子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:15861 -#, fuzzy, c-format -#| msgid "table \"%s\" has no indexes" +#: commands/tablecmds.c:16476 +#, c-format msgid "Table \"%s\" contains unique indexes." -msgstr "テーブル\"%s\"にはインデックスはありません" +msgstr "テーブル\"%s\"はユニークインデックスを持っています。" -#: commands/tablecmds.c:16442 commands/tablecmds.c:16461 -#: commands/tablecmds.c:16483 commands/tablecmds.c:16502 -#: commands/tablecmds.c:16544 +#: commands/tablecmds.c:17122 commands/tablecmds.c:17142 commands/tablecmds.c:17162 commands/tablecmds.c:17181 commands/tablecmds.c:17223 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "インデックス\"%s\"をインデックス\"%s\"の子インデックスとしてアタッチすることはできません" -#: commands/tablecmds.c:16445 +#: commands/tablecmds.c:17125 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "インデックス\"%s\"はすでに別のインデックスにアタッチされています。" -#: commands/tablecmds.c:16464 +#: commands/tablecmds.c:17145 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "インデックス\"%s\"はテーブル\"%s\"のどの子テーブルのインデックスでもありません。" -#: commands/tablecmds.c:16486 +#: commands/tablecmds.c:17165 #, c-format msgid "The index definitions do not match." msgstr "インデックス定義が合致しません。" -#: commands/tablecmds.c:16505 +#: commands/tablecmds.c:17184 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "インデックス\"%s\"はテーブル\"%s\"の制約に属していますが、インデックス\"%s\"には制約がありません。" -#: commands/tablecmds.c:16547 +#: commands/tablecmds.c:17226 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "子テーブル\"%s\"にはすでに他のインデックスがアタッチされています。" -#: commands/tablespace.c:163 commands/tablespace.c:180 -#: commands/tablespace.c:191 commands/tablespace.c:199 -#: commands/tablespace.c:639 replication/slot.c:1198 storage/file/copydir.c:47 +#: commands/tablespace.c:162 commands/tablespace.c:179 commands/tablespace.c:190 commands/tablespace.c:198 commands/tablespace.c:638 replication/slot.c:1374 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を作成できませんでした: %m" -#: commands/tablespace.c:210 utils/adt/genfile.c:593 +#: commands/tablespace.c:209 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "ディレクトリ\"%s\"のstatができませんでした: %m" -#: commands/tablespace.c:219 +#: commands/tablespace.c:218 #, c-format msgid "\"%s\" exists but is not a directory" msgstr "\"%s\"は存在しますが、ディレクトリではありません" -#: commands/tablespace.c:250 +#: commands/tablespace.c:249 #, c-format msgid "permission denied to create tablespace \"%s\"" msgstr "テーブル空間\"%s\"を作成する権限がありません" -#: commands/tablespace.c:252 +#: commands/tablespace.c:251 #, c-format msgid "Must be superuser to create a tablespace." msgstr "テーブル空間を生成するにはスーパユーザである必要があります。" -#: commands/tablespace.c:268 +#: commands/tablespace.c:267 #, c-format msgid "tablespace location cannot contain single quotes" msgstr "テーブル空間の場所には単一引用符を含めることができません" -#: commands/tablespace.c:278 +#: commands/tablespace.c:277 #, c-format msgid "tablespace location must be an absolute path" msgstr "テーブル空間の場所は絶対パスでなければなりません" -#: commands/tablespace.c:290 +#: commands/tablespace.c:289 #, c-format msgid "tablespace location \"%s\" is too long" msgstr "テーブル空間の場所\"%s\"は長すぎます" -#: commands/tablespace.c:297 +#: commands/tablespace.c:296 #, c-format msgid "tablespace location should not be inside the data directory" msgstr "テーブル空間の場所はデータディレクトリの中に指定すべきではありません" -#: commands/tablespace.c:306 commands/tablespace.c:966 +#: commands/tablespace.c:305 commands/tablespace.c:965 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "テーブル空間名\"%s\"を受け付けられません" -#: commands/tablespace.c:308 commands/tablespace.c:967 +#: commands/tablespace.c:307 commands/tablespace.c:966 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "接頭辞\"pg_\"はシステムテーブル空間用に予約されています" -#: commands/tablespace.c:327 commands/tablespace.c:988 +#: commands/tablespace.c:326 commands/tablespace.c:987 #, c-format msgid "tablespace \"%s\" already exists" msgstr "テーブル空間\"%s\"はすでに存在します" -#: commands/tablespace.c:443 commands/tablespace.c:949 -#: commands/tablespace.c:1038 commands/tablespace.c:1107 -#: commands/tablespace.c:1251 commands/tablespace.c:1451 +#: commands/tablespace.c:442 commands/tablespace.c:948 commands/tablespace.c:1037 commands/tablespace.c:1106 commands/tablespace.c:1252 commands/tablespace.c:1455 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "テーブル空間\"%s\"は存在しません" -#: commands/tablespace.c:449 +#: commands/tablespace.c:448 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "テーブル空間\"%s\"は存在しません、スキップします" -#: commands/tablespace.c:526 +#: commands/tablespace.c:525 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "テーブル空間\"%s\"は空ではありません" -#: commands/tablespace.c:598 +#: commands/tablespace.c:597 #, c-format msgid "directory \"%s\" does not exist" msgstr "ディレクトリ\"%s\"は存在しません" -#: commands/tablespace.c:599 +#: commands/tablespace.c:598 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "サーバを再起動する前にテーブルスペース用のディレクトリを作成してください" -#: commands/tablespace.c:604 +#: commands/tablespace.c:603 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "ディレクトリ\"%s\"に権限を設定できませんでした: %m" -#: commands/tablespace.c:634 +#: commands/tablespace.c:633 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "ディレクトリ\"%s\"はすでにテーブルスペースとして使われています" -#: commands/tablespace.c:758 commands/tablespace.c:771 -#: commands/tablespace.c:807 commands/tablespace.c:899 storage/file/fd.c:2992 -#: storage/file/fd.c:3331 +#: commands/tablespace.c:757 commands/tablespace.c:770 commands/tablespace.c:806 commands/tablespace.c:898 storage/file/fd.c:3108 storage/file/fd.c:3448 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を削除できませんでした: %m" -#: commands/tablespace.c:820 commands/tablespace.c:908 +#: commands/tablespace.c:819 commands/tablespace.c:907 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を削除できませんでした: %m" -#: commands/tablespace.c:830 commands/tablespace.c:917 +#: commands/tablespace.c:829 commands/tablespace.c:916 #, c-format msgid "\"%s\" is not a directory or symbolic link" msgstr "\"%s\"はディレクトリでもシンボリックリンクでもありません" -#: commands/tablespace.c:1112 +#: commands/tablespace.c:1111 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "テーブル空間\"%s\"は存在しません" -#: commands/tablespace.c:1550 +#: commands/tablespace.c:1554 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "テーブル空間%u用のディレクトリを削除することができませんでした" -#: commands/tablespace.c:1552 +#: commands/tablespace.c:1556 #, c-format msgid "You can remove the directories manually if necessary." msgstr "必要ならば手作業でこのディレクトリを削除することができます" -#: commands/trigger.c:210 commands/trigger.c:221 +#: commands/trigger.c:204 commands/trigger.c:215 #, c-format msgid "\"%s\" is a table" -msgstr "\"%s\"はテーブルではありません" +msgstr "\"%s\"はテーブルです" -#: commands/trigger.c:212 commands/trigger.c:223 +#: commands/trigger.c:206 commands/trigger.c:217 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "テーブルは INSTEAD OF トリガーを持つことができません" -#: commands/trigger.c:240 +#: commands/trigger.c:238 #, c-format -msgid "Partitioned tables cannot have BEFORE / FOR EACH ROW triggers." -msgstr "パーティションテーブルは BEFORE / FOR EACH ROW トリガを持つことができません。" +msgid "\"%s\" is a partitioned table" +msgstr "\"%s\"はパーティションテーブルです" -#: commands/trigger.c:258 +#: commands/trigger.c:240 #, c-format msgid "Triggers on partitioned tables cannot have transition tables." msgstr "パーティションテーブルに対するトリガは遷移テーブルを持てません。" -#: commands/trigger.c:270 commands/trigger.c:277 commands/trigger.c:447 +#: commands/trigger.c:252 commands/trigger.c:259 commands/trigger.c:429 #, c-format msgid "\"%s\" is a view" msgstr "\"%s\"はビューです" -#: commands/trigger.c:272 +#: commands/trigger.c:254 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "ビューは行レベルの BEFORE / AFTER トリガーを持つことができません" -#: commands/trigger.c:279 +#: commands/trigger.c:261 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "ビューは TRUNCATE トリガーを持つことができません" -#: commands/trigger.c:287 commands/trigger.c:294 commands/trigger.c:306 -#: commands/trigger.c:440 +#: commands/trigger.c:269 commands/trigger.c:276 commands/trigger.c:288 commands/trigger.c:422 #, c-format msgid "\"%s\" is a foreign table" msgstr "\"%s\"は外部テーブルです" -#: commands/trigger.c:289 +#: commands/trigger.c:271 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "外部テーブルは INSTEAD OF トリガを持つことができません。" -#: commands/trigger.c:296 +#: commands/trigger.c:278 #, c-format msgid "Foreign tables cannot have TRUNCATE triggers." msgstr "外部テーブルは TRUNCATE トリガを持つことができません。" -#: commands/trigger.c:308 +#: commands/trigger.c:290 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "外部テーブルは制約トリガを持つことができません。" -#: commands/trigger.c:383 +#: commands/trigger.c:365 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "TRUNCATE FOR EACH ROW トリガはサポートされていません" -#: commands/trigger.c:391 +#: commands/trigger.c:373 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "INSTEAD OF トリガーは FOR EACH ROW でなければなりません" -#: commands/trigger.c:395 +#: commands/trigger.c:377 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "INSTEAD OF トリガーは WHEN 条件を持つことができません" -#: commands/trigger.c:399 +#: commands/trigger.c:381 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "INSTEAD OF トリガーは列リストを持つことができません" -#: commands/trigger.c:428 +#: commands/trigger.c:410 #, c-format msgid "ROW variable naming in the REFERENCING clause is not supported" msgstr "REFERENCING句でのROW変数の命名はサポートされていません" -#: commands/trigger.c:429 +#: commands/trigger.c:411 #, c-format msgid "Use OLD TABLE or NEW TABLE for naming transition tables." msgstr "遷移テーブルを指定するには OLD TABLE または NEW TABLE を使ってください" -#: commands/trigger.c:442 +#: commands/trigger.c:424 #, c-format msgid "Triggers on foreign tables cannot have transition tables." msgstr "外部テーブルに対するトリガは遷移テーブルを持てません。" -#: commands/trigger.c:449 +#: commands/trigger.c:431 #, c-format msgid "Triggers on views cannot have transition tables." msgstr "ビューに対するトリガは遷移テーブルを持てません。" -#: commands/trigger.c:469 +#: commands/trigger.c:451 #, c-format msgid "ROW triggers with transition tables are not supported on inheritance children" msgstr "遷移テーブルをもったROWトリガは継承子テーブルではサポートされません" -#: commands/trigger.c:475 +#: commands/trigger.c:457 #, c-format msgid "transition table name can only be specified for an AFTER trigger" msgstr "遷移テーブル名はAFTERトリガでの指定可能です" -#: commands/trigger.c:480 +#: commands/trigger.c:462 #, c-format msgid "TRUNCATE triggers with transition tables are not supported" msgstr "遷移テーブルを使用するTRUNCATEトリガはサポートされていません" -#: commands/trigger.c:497 +#: commands/trigger.c:479 #, c-format msgid "transition tables cannot be specified for triggers with more than one event" msgstr "2つ以上のイベントに対するトリガには遷移テーブルは指定できません" -#: commands/trigger.c:508 +#: commands/trigger.c:490 #, c-format msgid "transition tables cannot be specified for triggers with column lists" msgstr "列リストを指定したトリガに対しては遷移テーブルは指定できません" -#: commands/trigger.c:525 +#: commands/trigger.c:507 #, c-format msgid "NEW TABLE can only be specified for an INSERT or UPDATE trigger" msgstr "NEW TABLE はINSERTまたはUPDATEトリガに対してのみ指定可能です" -#: commands/trigger.c:530 +#: commands/trigger.c:512 #, c-format msgid "NEW TABLE cannot be specified multiple times" msgstr "NEW TABLE は複数回指定できません" -#: commands/trigger.c:540 +#: commands/trigger.c:522 #, c-format msgid "OLD TABLE can only be specified for a DELETE or UPDATE trigger" msgstr "OLD TABLE はDELETEまたはUPDATEトリガに対してのみ指定可能です" -#: commands/trigger.c:545 +#: commands/trigger.c:527 #, c-format msgid "OLD TABLE cannot be specified multiple times" msgstr "OLD TABLE は複数回指定できません" -#: commands/trigger.c:555 +#: commands/trigger.c:537 #, c-format msgid "OLD TABLE name and NEW TABLE name cannot be the same" msgstr "OLD TABLE の名前と NEW TABLE の名前は同じにはできません" -#: commands/trigger.c:619 commands/trigger.c:632 +#: commands/trigger.c:601 commands/trigger.c:614 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "ステートメントトリガーの WHEN 条件では列の値を参照できません" -#: commands/trigger.c:624 +#: commands/trigger.c:606 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "INSERT トリガーの WHEN 条件では OLD 値を参照できません" -#: commands/trigger.c:637 +#: commands/trigger.c:619 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "DELETE トリガーの WHEN 条件では NEW 値を参照できません" -#: commands/trigger.c:642 +#: commands/trigger.c:624 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "BEFORE トリガーの WHEN 条件では NEW システム列を参照できません" -#: commands/trigger.c:650 commands/trigger.c:658 +#: commands/trigger.c:632 commands/trigger.c:640 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW generated columns" msgstr "BEFORE トリガーの WHEN 条件では NEW の生成列を参照できません" -#: commands/trigger.c:651 +#: commands/trigger.c:633 #, c-format msgid "A whole-row reference is used and the table contains generated columns." msgstr "行全体参照が使われていてかつ、このテーブルは生成カラムを含んでいます。" -#: commands/trigger.c:833 commands/trigger.c:1723 +#: commands/trigger.c:780 commands/trigger.c:1385 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "リレーション\"%2$s\"用のトリガ\"%1$s\"はすでに存在します" -#: commands/trigger.c:1248 -msgid "Found referenced table's UPDATE trigger." -msgstr "被参照テーブルのUPDATEトリガが見つかりました。" - -#: commands/trigger.c:1249 -msgid "Found referenced table's DELETE trigger." -msgstr "被参照テーブルのDELETEトリガが見つかりました。" - -#: commands/trigger.c:1250 -msgid "Found referencing table's trigger." -msgstr "参照テーブルのトリガが見つかりました。" - -#: commands/trigger.c:1359 commands/trigger.c:1375 -#, c-format -msgid "ignoring incomplete trigger group for constraint \"%s\" %s" -msgstr "制約\"%s\"%sに対する不完全なトリガグループを無視します。" - -#: commands/trigger.c:1388 -#, c-format -msgid "converting trigger group into constraint \"%s\" %s" -msgstr "トリガグループを制約\"%s\"%sに変換しています" - -#: commands/trigger.c:1609 commands/trigger.c:1770 commands/trigger.c:1906 +#: commands/trigger.c:1271 commands/trigger.c:1432 commands/trigger.c:1568 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "テーブル\"%2$s\"のトリガ\"%1$s\"は存在しません" -#: commands/trigger.c:1853 +#: commands/trigger.c:1515 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "権限がありません: \"%s\"はシステムトリガです" -#: commands/trigger.c:2453 +#: commands/trigger.c:2116 #, c-format msgid "trigger function %u returned null value" msgstr "トリガ関数%uはNULL値を返しました" -#: commands/trigger.c:2519 commands/trigger.c:2736 commands/trigger.c:2988 -#: commands/trigger.c:3295 +#: commands/trigger.c:2176 commands/trigger.c:2390 commands/trigger.c:2625 commands/trigger.c:2933 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "BEFORE STATEMENTトリガは値を返すことができません" -#: commands/trigger.c:3358 executor/nodeModifyTable.c:1349 -#: executor/nodeModifyTable.c:1418 +#: commands/trigger.c:2250 +#, c-format +msgid "moving row to another partition during a BEFORE FOR EACH ROW trigger is not supported" +msgstr "BEFORE FOR EACH ROWトリガの実行では、他のパーティションへの行の移動はサポートされていません" + +#: commands/trigger.c:2251 commands/trigger.c:2755 +#, c-format +msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." +msgstr "トリガ\"%s\"の実行前には、この行はパーティション\"%s.%s\"に置かれるはずでした。" + +#: commands/trigger.c:2754 +#, c-format +msgid "moving row to another partition during a BEFORE trigger is not supported" +msgstr "BEFOREトリガの実行では、他のパーティションへの行の移動はサポートされません" + +#: commands/trigger.c:2996 executor/nodeModifyTable.c:1380 executor/nodeModifyTable.c:1449 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "更新対象のタプルはすでに現在のコマンドによって発行された操作によって変更されています" -#: commands/trigger.c:3359 executor/nodeModifyTable.c:809 -#: executor/nodeModifyTable.c:883 executor/nodeModifyTable.c:1350 -#: executor/nodeModifyTable.c:1419 +#: commands/trigger.c:2997 executor/nodeModifyTable.c:840 executor/nodeModifyTable.c:914 executor/nodeModifyTable.c:1381 executor/nodeModifyTable.c:1450 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "他の行への変更を伝搬させるためにBEFOREトリガではなくAFTERトリガの使用を検討してください" -#: commands/trigger.c:3388 executor/nodeLockRows.c:225 -#: executor/nodeLockRows.c:234 executor/nodeModifyTable.c:220 -#: executor/nodeModifyTable.c:825 executor/nodeModifyTable.c:1366 -#: executor/nodeModifyTable.c:1582 +#: commands/trigger.c:3026 executor/nodeLockRows.c:225 executor/nodeLockRows.c:234 executor/nodeModifyTable.c:220 executor/nodeModifyTable.c:856 executor/nodeModifyTable.c:1397 executor/nodeModifyTable.c:1613 #, c-format msgid "could not serialize access due to concurrent update" msgstr "更新が同時に行われたためアクセスの直列化ができませんでした" -#: commands/trigger.c:3396 executor/nodeModifyTable.c:915 -#: executor/nodeModifyTable.c:1436 executor/nodeModifyTable.c:1606 +#: commands/trigger.c:3034 executor/nodeModifyTable.c:946 executor/nodeModifyTable.c:1467 executor/nodeModifyTable.c:1637 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "削除が同時に行われたためアクセスの直列化ができませんでした" -#: commands/trigger.c:5447 +#: commands/trigger.c:5094 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "制約\"%s\"は遅延可能ではありません" -#: commands/trigger.c:5470 +#: commands/trigger.c:5117 #, c-format msgid "constraint \"%s\" does not exist" msgstr "制約\"%s\"は存在しません" -#: commands/tsearchcmds.c:115 commands/tsearchcmds.c:686 +#: commands/tsearchcmds.c:118 commands/tsearchcmds.c:636 #, c-format msgid "function %s should return type %s" msgstr "関数%sは型%sを返すことができません" -#: commands/tsearchcmds.c:192 +#: commands/tsearchcmds.c:195 #, c-format msgid "must be superuser to create text search parsers" msgstr "テキスト検索パーサを生成するにはスーパユーザである必要があります" -#: commands/tsearchcmds.c:245 +#: commands/tsearchcmds.c:248 #, c-format msgid "text search parser parameter \"%s\" not recognized" msgstr "テキスト検索パーサ\"%s\"は不明です" -#: commands/tsearchcmds.c:255 +#: commands/tsearchcmds.c:258 #, c-format msgid "text search parser start method is required" msgstr "テキスト検索パーサの開始メソッドが必要です" -#: commands/tsearchcmds.c:260 +#: commands/tsearchcmds.c:263 #, c-format msgid "text search parser gettoken method is required" msgstr "テキスト検索パーサのgettokenメソッドが必要です" -#: commands/tsearchcmds.c:265 +#: commands/tsearchcmds.c:268 #, c-format msgid "text search parser end method is required" msgstr "テキスト検索パーサの終了メソッドが必要です" -#: commands/tsearchcmds.c:270 +#: commands/tsearchcmds.c:273 #, c-format msgid "text search parser lextypes method is required" msgstr "テキスト検索パーサのlextypesメソッドが必要です" -#: commands/tsearchcmds.c:387 +#: commands/tsearchcmds.c:367 #, c-format msgid "text search template \"%s\" does not accept options" msgstr "テキスト検索テンプレート\"%s\"はオプションを受け付けません" -#: commands/tsearchcmds.c:461 +#: commands/tsearchcmds.c:441 #, c-format msgid "text search template is required" msgstr "テキスト検索テンプレートが必要です" -#: commands/tsearchcmds.c:753 +#: commands/tsearchcmds.c:703 #, c-format msgid "must be superuser to create text search templates" msgstr "テキスト検索テンプレートを生成するにはスーパユーザである必要があります" -#: commands/tsearchcmds.c:795 +#: commands/tsearchcmds.c:745 #, c-format msgid "text search template parameter \"%s\" not recognized" msgstr "テキスト検索テンプレートのパラメータ\"%sは不明です。" -#: commands/tsearchcmds.c:805 +#: commands/tsearchcmds.c:755 #, c-format msgid "text search template lexize method is required" msgstr "テキスト検索テンプレートのlexizeメソッドが必要です" -#: commands/tsearchcmds.c:1009 +#: commands/tsearchcmds.c:935 #, c-format msgid "text search configuration parameter \"%s\" not recognized" msgstr "テキスト検索設定のパラメータ\"%s\"は不明です" -#: commands/tsearchcmds.c:1016 +#: commands/tsearchcmds.c:942 #, c-format msgid "cannot specify both PARSER and COPY options" msgstr "PARSERとCOPYオプションをまとめて指定できません" -#: commands/tsearchcmds.c:1052 +#: commands/tsearchcmds.c:978 #, c-format msgid "text search parser is required" msgstr "テキスト検索パーサが必要です" -#: commands/tsearchcmds.c:1276 +#: commands/tsearchcmds.c:1202 #, c-format msgid "token type \"%s\" does not exist" msgstr "トークン型\"%s\"は存在しません" -#: commands/tsearchcmds.c:1503 +#: commands/tsearchcmds.c:1429 #, c-format msgid "mapping for token type \"%s\" does not exist" msgstr "トークン型\"%s\"に対するマップは存在しません" -#: commands/tsearchcmds.c:1509 +#: commands/tsearchcmds.c:1435 #, c-format msgid "mapping for token type \"%s\" does not exist, skipping" msgstr "トークン型\"%s\"に対するマップは存在しません、スキップします" -#: commands/tsearchcmds.c:1664 commands/tsearchcmds.c:1775 +#: commands/tsearchcmds.c:1598 commands/tsearchcmds.c:1713 #, c-format msgid "invalid parameter list format: \"%s\"" msgstr "不正パラメータリストの書式です: \"%s\"" -#: commands/typecmds.c:184 +#: commands/typecmds.c:206 #, c-format msgid "must be superuser to create a base type" msgstr "基本型を作成するにはスーパユーザである必要があります" -#: commands/typecmds.c:291 commands/typecmds.c:1467 +#: commands/typecmds.c:264 +#, c-format +msgid "Create the type as a shell type, then create its I/O functions, then do a full CREATE TYPE." +msgstr "最初に型をシェル型として生成して、続いてI/O関数を生成した後に完全な CREATE TYPE を実行してください。" + +#: commands/typecmds.c:314 commands/typecmds.c:1394 commands/typecmds.c:3832 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "型の属性\"%s\"は不明です" -#: commands/typecmds.c:347 +#: commands/typecmds.c:370 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "型カテゴリ\"%s\"が不正です。単純なASCIIでなければなりません" -#: commands/typecmds.c:366 +#: commands/typecmds.c:389 #, c-format msgid "array element type cannot be %s" msgstr "%sを配列要素の型にすることはできません" -#: commands/typecmds.c:398 +#: commands/typecmds.c:421 #, c-format msgid "alignment \"%s\" not recognized" msgstr "アライメント\"%s\"は不明です" -#: commands/typecmds.c:415 +#: commands/typecmds.c:438 commands/typecmds.c:3718 #, c-format msgid "storage \"%s\" not recognized" msgstr "格納方式\"%s\"は不明です" -#: commands/typecmds.c:426 +#: commands/typecmds.c:449 #, c-format msgid "type input function must be specified" msgstr "型の入力関数の指定が必要です" -#: commands/typecmds.c:430 +#: commands/typecmds.c:453 #, c-format msgid "type output function must be specified" msgstr "型の出力関数の指定が必要です" -#: commands/typecmds.c:435 +#: commands/typecmds.c:458 #, c-format msgid "type modifier output function is useless without a type modifier input function" msgstr "型修正入力関数がない場合の型修正出力関数は意味がありません" -#: commands/typecmds.c:465 -#, c-format -msgid "type input function %s must return type %s" -msgstr "型の入力関数%sは型%sを返す必要があります" - -#: commands/typecmds.c:482 -#, c-format -msgid "type output function %s must return type %s" -msgstr "型の出力関数%sは型%sを返す必要があります" - -#: commands/typecmds.c:491 -#, c-format -msgid "type receive function %s must return type %s" -msgstr "型の受信関数%sは型%sを返す必要があります" - -#: commands/typecmds.c:500 -#, c-format -msgid "type send function %s must return type %s" -msgstr "型の送信関数%sは型%sを返す必要があります" - -#: commands/typecmds.c:565 -#, c-format -msgid "type input function %s should not be volatile" -msgstr "型の入力関数%sはvolatileであってはなりません" - -#: commands/typecmds.c:570 -#, c-format -msgid "type output function %s should not be volatile" -msgstr "型の出力関数%sはvolatileであってはなりません" - -#: commands/typecmds.c:575 -#, c-format -msgid "type receive function %s should not be volatile" -msgstr "型の受信関数%sはvolatileであってはなりません" - -#: commands/typecmds.c:580 -#, c-format -msgid "type send function %s should not be volatile" -msgstr "型の送信関数%sはvolatileであってはなりません" - -#: commands/typecmds.c:585 -#, c-format -msgid "type modifier input function %s should not be volatile" -msgstr "型修正子の入力関数%sはvolatileであってはなりません" - -#: commands/typecmds.c:590 -#, c-format -msgid "type modifier output function %s should not be volatile" -msgstr "型修正子の出力関数%sはvolatileであってはなりません" - -#: commands/typecmds.c:817 +#: commands/typecmds.c:745 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "\"%s\"はドメインの基本型として無効です" -#: commands/typecmds.c:903 +#: commands/typecmds.c:837 #, c-format msgid "multiple default expressions" msgstr "デフォルト式が複数あります" -#: commands/typecmds.c:966 commands/typecmds.c:975 +#: commands/typecmds.c:900 commands/typecmds.c:909 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "NULL制約とNOT NULL制約が競合しています" -#: commands/typecmds.c:991 +#: commands/typecmds.c:925 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "ドメインに対する検査制約はNO INHERITとマークすることができません" -#: commands/typecmds.c:1000 commands/typecmds.c:2582 +#: commands/typecmds.c:934 commands/typecmds.c:2536 #, c-format msgid "unique constraints not possible for domains" msgstr "ドメインでは一意性制約は使用できません" -#: commands/typecmds.c:1006 commands/typecmds.c:2588 +#: commands/typecmds.c:940 commands/typecmds.c:2542 #, c-format msgid "primary key constraints not possible for domains" msgstr "ドメインではプライマリキー制約はできません" -#: commands/typecmds.c:1012 commands/typecmds.c:2594 +#: commands/typecmds.c:946 commands/typecmds.c:2548 #, c-format msgid "exclusion constraints not possible for domains" msgstr "ドメインでは排除制約は使用できません" -#: commands/typecmds.c:1018 commands/typecmds.c:2600 +#: commands/typecmds.c:952 commands/typecmds.c:2554 #, c-format msgid "foreign key constraints not possible for domains" msgstr "ドメイン用の外部キー制約はできません" -#: commands/typecmds.c:1027 commands/typecmds.c:2609 +#: commands/typecmds.c:961 commands/typecmds.c:2563 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "ドメインでは制約遅延の指定はサポートしていません" -#: commands/typecmds.c:1337 utils/cache/typcache.c:2340 +#: commands/typecmds.c:1271 utils/cache/typcache.c:2430 #, c-format msgid "%s is not an enum" msgstr "%s は数値ではありません" -#: commands/typecmds.c:1475 +#: commands/typecmds.c:1402 #, c-format msgid "type attribute \"subtype\" is required" msgstr "型の属性\"subtype\"が必要です" -#: commands/typecmds.c:1480 +#: commands/typecmds.c:1407 #, c-format msgid "range subtype cannot be %s" msgstr "範囲の派生元型を%sにすることはできません" -#: commands/typecmds.c:1499 +#: commands/typecmds.c:1426 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "範囲の照合順序が指定されましたが、派生もと型が照合順序をサポートしていません" -#: commands/typecmds.c:1733 +#: commands/typecmds.c:1436 +#, c-format +msgid "cannot specify a canonical function without a pre-created shell type" +msgstr "事前にシェル型を生成せずに正規化関数を指定することはできません" + +#: commands/typecmds.c:1437 +#, c-format +msgid "Create the type as a shell type, then create its canonicalization function, then do a full CREATE TYPE." +msgstr "最初に型をシェル型として生成して、続いて正規化関数を生成した後に完全な CREATE TYPE を実行してください。" + +#: commands/typecmds.c:1648 +#, c-format +msgid "type input function %s has multiple matches" +msgstr "型の入力関数%sが複数合致します" + +#: commands/typecmds.c:1666 +#, c-format +msgid "type input function %s must return type %s" +msgstr "型の入力関数%sは型%sを返す必要があります" + +#: commands/typecmds.c:1682 +#, c-format +msgid "type input function %s should not be volatile" +msgstr "型の入力関数%sはvolatileであってはなりません" + +#: commands/typecmds.c:1710 +#, c-format +msgid "type output function %s must return type %s" +msgstr "型の出力関数%sは型%sを返す必要があります" + +#: commands/typecmds.c:1717 +#, c-format +msgid "type output function %s should not be volatile" +msgstr "型の出力関数%sはvolatileであってはなりません" + +#: commands/typecmds.c:1746 +#, c-format +msgid "type receive function %s has multiple matches" +msgstr "型の受信関数 %s が複数合致しました" + +#: commands/typecmds.c:1764 +#, c-format +msgid "type receive function %s must return type %s" +msgstr "型の受信関数%sは型%sを返す必要があります" + +#: commands/typecmds.c:1771 #, c-format -msgid "changing argument type of function %s from \"opaque\" to \"cstring\"" -msgstr "関数%sの引数型を\"opaque\"から\"cstring\"に変更しています" +msgid "type receive function %s should not be volatile" +msgstr "型の受信関数%sはvolatileであってはなりません" + +#: commands/typecmds.c:1799 +#, c-format +msgid "type send function %s must return type %s" +msgstr "型の送信関数%sは型%sを返す必要があります" -#: commands/typecmds.c:1784 +#: commands/typecmds.c:1806 #, c-format -msgid "changing argument type of function %s from \"opaque\" to %s" -msgstr "関数%sの引数型を\"opaque\"から%sに変更しています" +msgid "type send function %s should not be volatile" +msgstr "型の送信関数%sはvolatileであってはなりません" -#: commands/typecmds.c:1883 +#: commands/typecmds.c:1833 #, c-format msgid "typmod_in function %s must return type %s" msgstr "typmod_in関数%sは型%sを返す必要があります" -#: commands/typecmds.c:1910 +#: commands/typecmds.c:1840 +#, c-format +msgid "type modifier input function %s should not be volatile" +msgstr "型修正子の入力関数%sはvolatileであってはなりません" + +#: commands/typecmds.c:1867 #, c-format msgid "typmod_out function %s must return type %s" msgstr "typmod_out関数%sは型%sを返す必要があります" -#: commands/typecmds.c:1937 +#: commands/typecmds.c:1874 +#, c-format +msgid "type modifier output function %s should not be volatile" +msgstr "型修正子の出力関数%sはvolatileであってはなりません" + +#: commands/typecmds.c:1901 #, c-format msgid "type analyze function %s must return type %s" msgstr "型のANALYZE関数%sは%s型を返す必要があります" -#: commands/typecmds.c:1983 +#: commands/typecmds.c:1947 #, c-format msgid "You must specify an operator class for the range type or define a default operator class for the subtype." msgstr "この範囲型に演算子クラスを指定するか、派生元の型でデフォルト演算子クラスを定義する必要があります。" -#: commands/typecmds.c:2014 +#: commands/typecmds.c:1978 #, c-format msgid "range canonical function %s must return range type" msgstr "範囲の正規化関数 %s は範囲型を返す必要があります" -#: commands/typecmds.c:2020 +#: commands/typecmds.c:1984 #, c-format msgid "range canonical function %s must be immutable" msgstr "範囲の正規化関数 %s は不変関数でなければなりません" -#: commands/typecmds.c:2056 +#: commands/typecmds.c:2020 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "範囲の派生元の型の差分関数 %s は %s型を返す必要があります" -#: commands/typecmds.c:2063 +#: commands/typecmds.c:2027 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "範囲の派生元の型の差分関数 %s は不変関数である必要があります" -#: commands/typecmds.c:2090 +#: commands/typecmds.c:2054 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にpg_typeの配列型OIDが設定されていません" -#: commands/typecmds.c:2398 +#: commands/typecmds.c:2352 #, c-format msgid "column \"%s\" of table \"%s\" contains null values" msgstr "テーブル\"%2$s\"の列\"%1$s\"にNULL値があります" -#: commands/typecmds.c:2511 commands/typecmds.c:2713 +#: commands/typecmds.c:2465 commands/typecmds.c:2667 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "ドメイン\"%2$s\"の制約\"%1$s\"は存在しません" -#: commands/typecmds.c:2515 +#: commands/typecmds.c:2469 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "ドメイン\"%2$s\"の制約\"%1$s\"は存在しません、スキップします" -#: commands/typecmds.c:2720 +#: commands/typecmds.c:2674 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "ドメイン\"%2$s\"の制約\"%1$s\"は検査制約ではありません" -#: commands/typecmds.c:2826 +#: commands/typecmds.c:2780 #, c-format msgid "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "テーブル\"%2$s\"の列\"%1$s\"に新しい制約に違反する値があります" -#: commands/typecmds.c:3055 commands/typecmds.c:3253 commands/typecmds.c:3335 -#: commands/typecmds.c:3522 +#: commands/typecmds.c:3009 commands/typecmds.c:3207 commands/typecmds.c:3289 commands/typecmds.c:3476 #, c-format msgid "%s is not a domain" msgstr "%s はドメインではありません" -#: commands/typecmds.c:3087 +#: commands/typecmds.c:3041 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "ドメイン\"%2$s\"の制約\"%1$s\"はすでに存在します" -#: commands/typecmds.c:3138 +#: commands/typecmds.c:3092 #, c-format msgid "cannot use table references in domain check constraint" msgstr "ドメインの検査制約ではテーブル参照を使用できません" -#: commands/typecmds.c:3265 commands/typecmds.c:3347 commands/typecmds.c:3639 +#: commands/typecmds.c:3219 commands/typecmds.c:3301 commands/typecmds.c:3593 #, c-format msgid "%s is a table's row type" msgstr "%sはテーブルの行型です" -#: commands/typecmds.c:3267 commands/typecmds.c:3349 commands/typecmds.c:3641 +#: commands/typecmds.c:3221 commands/typecmds.c:3303 commands/typecmds.c:3595 #, c-format msgid "Use ALTER TABLE instead." msgstr "代わりにALTER TABLEを使用してください" -#: commands/typecmds.c:3274 commands/typecmds.c:3356 commands/typecmds.c:3554 +#: commands/typecmds.c:3228 commands/typecmds.c:3310 commands/typecmds.c:3508 #, c-format msgid "cannot alter array type %s" msgstr "配列型%sを変更できません" -#: commands/typecmds.c:3276 commands/typecmds.c:3358 commands/typecmds.c:3556 +#: commands/typecmds.c:3230 commands/typecmds.c:3312 commands/typecmds.c:3510 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "型%sを変更することができます。これは同時にその配列型も変更します。" -#: commands/typecmds.c:3624 +#: commands/typecmds.c:3578 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "型\"%s\"はスキーマ\"%s\"内にすでに存在します" +#: commands/typecmds.c:3746 +#, c-format +msgid "cannot change type's storage to PLAIN" +msgstr "型の格納方式をPLAINには変更できません" + +#: commands/typecmds.c:3827 +#, c-format +msgid "type attribute \"%s\" cannot be changed" +msgstr "型の属性\"%s\"は変更できません" + +#: commands/typecmds.c:3845 +#, c-format +msgid "must be superuser to alter a type" +msgstr "型の変更を行うにはスーパユーザである必要があります" + +#: commands/typecmds.c:3866 commands/typecmds.c:3876 +#, c-format +msgid "%s is not a base type" +msgstr "\"%s\"は基本型ではありません" + #: commands/user.c:140 #, c-format msgid "SYSID can no longer be specified" @@ -10703,7 +10556,7 @@ msgstr "スーパユーザを生成するにはスーパユーザである必要 msgid "must be superuser to create replication users" msgstr "レプリケーションユーザを生成するにはスーパユーザである必要があります" -#: commands/user.c:308 commands/user.c:723 +#: commands/user.c:308 commands/user.c:734 #, c-format msgid "must be superuser to change bypassrls attribute" msgstr "bypassrls属性を変更するにはスーパユーザである必要があります" @@ -10713,23 +10566,22 @@ msgstr "bypassrls属性を変更するにはスーパユーザである必要が msgid "permission denied to create role" msgstr "ロールを作成する権限がありません" -#: commands/user.c:325 commands/user.c:1213 commands/user.c:1220 gram.y:14896 -#: gram.y:14934 utils/adt/acl.c:5342 utils/adt/acl.c:5348 +#: commands/user.c:325 commands/user.c:1224 commands/user.c:1231 gram.y:14900 gram.y:14938 utils/adt/acl.c:5327 utils/adt/acl.c:5333 #, c-format msgid "role name \"%s\" is reserved" msgstr "ロール名\"%s\"は予約されています" -#: commands/user.c:327 commands/user.c:1215 commands/user.c:1222 +#: commands/user.c:327 commands/user.c:1226 commands/user.c:1233 #, c-format msgid "Role names starting with \"pg_\" are reserved." msgstr "\"pg_\"で始まるロール名は予約されています。" -#: commands/user.c:348 commands/user.c:1237 +#: commands/user.c:348 commands/user.c:1248 #, c-format msgid "role \"%s\" already exists" msgstr "ロール\"%s\"はすでに存在します" -#: commands/user.c:414 commands/user.c:832 +#: commands/user.c:414 commands/user.c:843 #, c-format msgid "empty string is not a valid password, clearing password" msgstr "空の文字列はパスワードとして使えません、パスワードを消去します" @@ -10739,216 +10591,227 @@ msgstr "空の文字列はパスワードとして使えません、パスワー msgid "pg_authid OID value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にpg_authidのOIDが設定されていません" -#: commands/user.c:709 commands/user.c:933 commands/user.c:1476 -#: commands/user.c:1620 +#: commands/user.c:720 commands/user.c:944 commands/user.c:1485 commands/user.c:1627 #, c-format msgid "must be superuser to alter superusers" msgstr "スーパユーザを更新するにはスーパユーザである必要があります" -#: commands/user.c:716 +#: commands/user.c:727 #, c-format msgid "must be superuser to alter replication users" msgstr "レプリケーションユーザを更新するにはスーパユーザである必要があります" -#: commands/user.c:739 commands/user.c:940 +#: commands/user.c:750 commands/user.c:951 #, c-format msgid "permission denied" msgstr "権限がありません" -#: commands/user.c:970 +#: commands/user.c:981 #, c-format msgid "must be superuser to alter settings globally" msgstr "サーバ全体の設定を変更するにはスーパユーザである必要があります" -#: commands/user.c:992 +#: commands/user.c:1003 #, c-format msgid "permission denied to drop role" msgstr "ロールを削除する権限がありません" -#: commands/user.c:1017 +#: commands/user.c:1028 #, c-format msgid "cannot use special role specifier in DROP ROLE" msgstr "DROP ROLE で特殊ロールの識別子は使えません" -#: commands/user.c:1027 commands/user.c:1184 commands/variable.c:770 -#: commands/variable.c:844 utils/adt/acl.c:5199 utils/adt/acl.c:5246 -#: utils/adt/acl.c:5274 utils/adt/acl.c:5292 utils/init/miscinit.c:607 +#: commands/user.c:1038 commands/user.c:1195 commands/variable.c:770 commands/variable.c:844 utils/adt/acl.c:5184 utils/adt/acl.c:5231 utils/adt/acl.c:5259 utils/adt/acl.c:5277 utils/init/miscinit.c:677 #, c-format msgid "role \"%s\" does not exist" msgstr "ロール\"%s\"は存在しません" -#: commands/user.c:1032 +#: commands/user.c:1043 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "ロール\"%s\"は存在しません、スキップします" -#: commands/user.c:1045 commands/user.c:1049 +#: commands/user.c:1056 commands/user.c:1060 #, c-format msgid "current user cannot be dropped" msgstr "現在のユーザを削除できません" -#: commands/user.c:1053 +#: commands/user.c:1064 #, c-format msgid "session user cannot be dropped" msgstr "セッションのユーザを削除できません" -#: commands/user.c:1063 +#: commands/user.c:1074 #, c-format msgid "must be superuser to drop superusers" msgstr "スーパユーザを削除するにはスーパユーザである必要があります" -#: commands/user.c:1079 +#: commands/user.c:1090 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "他のオブジェクトが依存していますのでロール\"%s\"を削除できません" -#: commands/user.c:1200 +#: commands/user.c:1211 #, c-format msgid "session user cannot be renamed" msgstr "セッションユーザの名前を変更できません" -#: commands/user.c:1204 +#: commands/user.c:1215 #, c-format msgid "current user cannot be renamed" msgstr "現在のユーザの名前を変更できません" -#: commands/user.c:1247 +#: commands/user.c:1258 #, c-format msgid "must be superuser to rename superusers" msgstr "スーパユーザの名前を変更するにはスーパユーザである必要があります" -#: commands/user.c:1254 +#: commands/user.c:1265 #, c-format msgid "permission denied to rename role" msgstr "ロールの名前を変更する権限がありません" -#: commands/user.c:1275 +#: commands/user.c:1286 #, c-format msgid "MD5 password cleared because of role rename" msgstr "ロール名が変更されたためMD5パスワードがクリアされました" -#: commands/user.c:1335 +#: commands/user.c:1346 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "列名が GRANT/REVOKE ROLE に含まれていてはなりません" -#: commands/user.c:1373 +#: commands/user.c:1384 #, c-format msgid "permission denied to drop objects" msgstr "オブジェクトを削除する権限がありません" -#: commands/user.c:1400 commands/user.c:1409 +#: commands/user.c:1411 commands/user.c:1420 #, c-format msgid "permission denied to reassign objects" msgstr "オブジェクトを再割当てする権限がありません" -#: commands/user.c:1484 commands/user.c:1628 +#: commands/user.c:1493 commands/user.c:1635 #, c-format msgid "must have admin option on role \"%s\"" msgstr "ロール\"%s\"には ADMIN OPTION が必要です" -#: commands/user.c:1501 +#: commands/user.c:1510 #, c-format msgid "must be superuser to set grantor" msgstr "権限付与者を指定するにはスーパユーザである必要があります" -#: commands/user.c:1526 +#: commands/user.c:1535 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "ロール\"%s\"はロール\"%s\"のメンバです" -#: commands/user.c:1541 +#: commands/user.c:1550 #, c-format msgid "role \"%s\" is already a member of role \"%s\"" msgstr "ロール\"%s\"はすでにロール\"%s\"のメンバです" -#: commands/user.c:1650 +#: commands/user.c:1657 #, c-format msgid "role \"%s\" is not a member of role \"%s\"" msgstr "ロール\"%s\"はロール\"%s\"のメンバではありません" -#: commands/vacuum.c:116 +#: commands/vacuum.c:129 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "ANALYZEオプション\"%s\"が認識できません" -#: commands/vacuum.c:135 +#: commands/vacuum.c:151 +#, c-format +msgid "parallel option requires a value between 0 and %d" +msgstr "パラレルオプションには0から%dまでの値である必要があります" + +#: commands/vacuum.c:163 +#, c-format +msgid "parallel vacuum degree must be between 0 and %d" +msgstr "並列VACUUMの並列度は0から%dまでの値でなければなりません" + +#: commands/vacuum.c:180 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "認識できないVACUUMオプション \"%s\"" -#: commands/vacuum.c:169 +#: commands/vacuum.c:203 +#, c-format +msgid "VACUUM FULL cannot be performed in parallel" +msgstr "VACUUM FULLは並列実行できません" + +#: commands/vacuum.c:219 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "ANALYZE オプションは列リストが与えられているときのみ指定できます" -#: commands/vacuum.c:259 +#: commands/vacuum.c:309 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%sはVACUUMやANALYZEからは実行できません" -#: commands/vacuum.c:269 +#: commands/vacuum.c:319 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "VACUUM のオプションDISABLE_PAGE_SKIPPINGはFULLと同時には指定できません" -#: commands/vacuum.c:511 +#: commands/vacuum.c:560 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "\"%s\"をスキップしています --- スーパユーザのみがVACUUMを実行できます" -#: commands/vacuum.c:515 +#: commands/vacuum.c:564 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "\"%s\"をスキップしています --- スーパユーザもしくはデータベースの所有者のみがVACUUMを実行できます" -#: commands/vacuum.c:519 +#: commands/vacuum.c:568 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "\"%s\"を飛ばしています --- テーブルまたはデータベースの所有者のみがVACUUMを実行することができます" -#: commands/vacuum.c:534 +#: commands/vacuum.c:583 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "\"%s\"をスキップしています --- スーパユーザのみがANALYZEを実行できます" -#: commands/vacuum.c:538 +#: commands/vacuum.c:587 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "\"%s\"をスキップしています --- スーパユーザまたはデータベースの所有者のみがANALYZEを実行できます" -#: commands/vacuum.c:542 +#: commands/vacuum.c:591 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "\"%s\"をスキップしています --- テーブルまたはデータベースの所有者のみがANALYZEを実行できます" -#: commands/vacuum.c:621 commands/vacuum.c:717 +#: commands/vacuum.c:670 commands/vacuum.c:766 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "\"%s\"のVACUUM処理をスキップしています -- ロックを獲得できませんでした" -#: commands/vacuum.c:626 +#: commands/vacuum.c:675 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "\"%s\"のVACUUM処理をスキップしています -- リレーションはすでに存在しません" -#: commands/vacuum.c:642 commands/vacuum.c:722 +#: commands/vacuum.c:691 commands/vacuum.c:771 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "\"%s\"のANALYZEをスキップしています --- ロック獲得できませんでした" -#: commands/vacuum.c:647 -#, fuzzy, c-format -#| msgid "skipping analyze of \"%s\"--- relation no longer exists" +#: commands/vacuum.c:696 +#, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" -msgstr "\"%s\"のANALYZEをスキップしています --- リレーションはすでに存在しません" +msgstr "\"%s\"のANALYZEをスキップします --- リレーションはすでに存在しません" -#: commands/vacuum.c:945 +#: commands/vacuum.c:1011 #, c-format msgid "oldest xmin is far in the past" msgstr "最も古いxminが古すぎます" -#: commands/vacuum.c:946 +#: commands/vacuum.c:1012 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -10957,32 +10820,32 @@ msgstr "" "周回問題を回避するためにすぐに実行中のトランザクションを終了してください。\n" "古い準備済みトランザクションのコミットまたはロールバック、もしくは古いレプリケーションスロットの削除が必要な場合もあります。" -#: commands/vacuum.c:987 +#: commands/vacuum.c:1053 #, c-format msgid "oldest multixact is far in the past" msgstr "最古のマルチトランザクションが古すぎます" -#: commands/vacuum.c:988 +#: commands/vacuum.c:1054 #, c-format msgid "Close open transactions with multixacts soon to avoid wraparound problems." msgstr "周回問題を回避するために、マルチトランザクションを使用している実行中のトランザクションをすぐにクローズしてください。" -#: commands/vacuum.c:1563 +#: commands/vacuum.c:1641 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "データベースの一部は20億トランザクション以上の間にVACUUMを実行されていませんでした" -#: commands/vacuum.c:1564 +#: commands/vacuum.c:1642 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "トランザクションの周回によるデータ損失が発生している可能性があります" -#: commands/vacuum.c:1722 +#: commands/vacuum.c:1804 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "\"%s\"をスキップしています --- テーブルではないものや、特別なシステムテーブルに対してはVACUUMを実行できません" -#: commands/variable.c:165 utils/misc/guc.c:10952 utils/misc/guc.c:11014 +#: commands/variable.c:165 utils/misc/guc.c:11174 utils/misc/guc.c:11236 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "不明なキーワードです: \"%s\"" @@ -11042,7 +10905,7 @@ msgstr "SET TRANSACTION ISOLATION LEVEL は問い合わせより前に実行す msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" msgstr "SET TRANSACTION ISOLATION LEVELをサブトランザクションで呼び出してはなりません" -#: commands/variable.c:548 storage/lmgr/predicate.c:1626 +#: commands/variable.c:548 storage/lmgr/predicate.c:1623 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "ホットスタンバイ中はシリアライズモードを使用できません" @@ -11082,57 +10945,52 @@ msgstr "並列処理中は\"client_encoding\"を変更できません" msgid "permission denied to set role \"%s\"" msgstr "ロール\"%s\"を設定する権限がありません" -#: commands/view.c:54 -#, c-format -msgid "invalid value for \"check_option\" option" -msgstr "\"check_option\"オプションの値が不正です" - -#: commands/view.c:55 -#, c-format -msgid "Valid values are \"local\" and \"cascaded\"." -msgstr "有効な値は\"local\"と\"cascaded\"です。" - -#: commands/view.c:103 +#: commands/view.c:84 #, c-format msgid "could not determine which collation to use for view column \"%s\"" msgstr "ビューの列\"%s\"で使用する照合順序を特定できませんでした" -#: commands/view.c:280 commands/view.c:291 +#: commands/view.c:265 commands/view.c:276 #, c-format msgid "cannot drop columns from view" msgstr "ビューからは列を削除できません" -#: commands/view.c:296 +#: commands/view.c:281 #, c-format msgid "cannot change name of view column \"%s\" to \"%s\"" msgstr "ビューの列名を\"%s\"から\"%s\"に変更できません" -#: commands/view.c:304 +#: commands/view.c:284 +#, c-format +msgid "Use ALTER VIEW ... RENAME COLUMN ... to change name of view column instead." +msgstr "代わりに ALTER VIEW ... RENAME COLUMN ... を使用してビューカラムの名前を変更してください。" + +#: commands/view.c:290 #, c-format msgid "cannot change data type of view column \"%s\" from %s to %s" msgstr "ビューの列 \"%s\"のデータ型を %s から %s に変更できません" -#: commands/view.c:451 +#: commands/view.c:441 #, c-format msgid "views must not contain SELECT INTO" msgstr "ビューでは SELECT INTO を使用できません" -#: commands/view.c:463 +#: commands/view.c:453 #, c-format msgid "views must not contain data-modifying statements in WITH" msgstr "ビューでは WITH 句にデータを変更するステートメントを含むことはできません" -#: commands/view.c:533 +#: commands/view.c:523 #, c-format msgid "CREATE VIEW specifies more column names than columns" msgstr "CREATE VIEW で列よりも多くの列名が指定されています" -#: commands/view.c:541 +#: commands/view.c:531 #, c-format msgid "views cannot be unlogged because they do not have storage" msgstr "ビューは自身の格納領域を持たないので、UNLOGGEDにはできません" -#: commands/view.c:555 +#: commands/view.c:545 #, c-format msgid "view \"%s\" will be a temporary view" msgstr "ビュー\"%s\"は一時ビューとなります" @@ -11162,131 +11020,121 @@ msgstr "カーソル\"%s\"にはテーブル\"%s\"への FOR UPDATE/SHARE参照 msgid "cursor \"%s\" is not positioned on a row" msgstr "カーソル\"%s\"は行上に位置していません" -#: executor/execCurrent.c:169 executor/execCurrent.c:228 -#: executor/execCurrent.c:239 +#: executor/execCurrent.c:169 executor/execCurrent.c:228 executor/execCurrent.c:239 #, c-format msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "カーソル\"%s\"はテーブル\"%s\"を単純な更新可能スキャンではありません" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2312 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2404 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "パラメータの型%d(%s)が実行計画(%s)を準備する時点と一致しません" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2324 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2416 #, c-format msgid "no value found for parameter %d" msgstr "パラメータ%dの値がありません" -#: executor/execExpr.c:857 parser/parse_agg.c:816 +#: executor/execExpr.c:859 parser/parse_agg.c:816 #, c-format msgid "window function calls cannot be nested" msgstr "ウィンドウ関数の呼び出しを入れ子にすることはできません" -#: executor/execExpr.c:1316 +#: executor/execExpr.c:1318 #, c-format msgid "target type is not an array" msgstr "対象型は配列ではありません" -#: executor/execExpr.c:1649 +#: executor/execExpr.c:1651 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "ROW()列の型が%2$sではなく%1$sです" -#: executor/execExpr.c:2174 executor/execSRF.c:700 parser/parse_func.c:136 -#: parser/parse_func.c:650 parser/parse_func.c:1024 +#: executor/execExpr.c:2176 executor/execSRF.c:708 parser/parse_func.c:135 parser/parse_func.c:646 parser/parse_func.c:1020 #, c-format msgid "cannot pass more than %d argument to a function" msgid_plural "cannot pass more than %d arguments to a function" msgstr[0] "関数に%dを超える引数を渡せません" msgstr[1] "関数に%dを超える引数を渡せません" -#: executor/execExpr.c:2572 executor/execExpr.c:2578 -#: executor/execExprInterp.c:2641 utils/adt/arrayfuncs.c:261 -#: utils/adt/arrayfuncs.c:559 utils/adt/arrayfuncs.c:1301 -#: utils/adt/arrayfuncs.c:3347 utils/adt/arrayfuncs.c:5302 -#: utils/adt/arrayfuncs.c:5819 +#: executor/execExpr.c:2587 executor/execExpr.c:2593 executor/execExprInterp.c:2730 utils/adt/arrayfuncs.c:262 utils/adt/arrayfuncs.c:560 utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3369 utils/adt/arrayfuncs.c:5329 utils/adt/arrayfuncs.c:5842 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "配列の次数(%d)が上限(%d)を超えています" -#: executor/execExprInterp.c:1862 +#: executor/execExprInterp.c:1894 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "%2$s型の属性%1$dが削除されています" -#: executor/execExprInterp.c:1868 +#: executor/execExprInterp.c:1900 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "型%2$sの属性%1$dの型が間違っています" -#: executor/execExprInterp.c:1870 executor/execExprInterp.c:2914 -#: executor/execExprInterp.c:2961 +#: executor/execExprInterp.c:1902 executor/execExprInterp.c:3002 executor/execExprInterp.c:3049 #, c-format msgid "Table has type %s, but query expects %s." msgstr "テーブルの型は%sですが、問い合わせでは%sを想定しています。" -#: executor/execExprInterp.c:2402 +#: executor/execExprInterp.c:2494 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "このタイプのテーブルではWHERE CURRENT OFをサポートしません" -#: executor/execExprInterp.c:2619 +#: executor/execExprInterp.c:2708 #, c-format msgid "cannot merge incompatible arrays" msgstr "互換性がない配列をマージできません" -#: executor/execExprInterp.c:2620 +#: executor/execExprInterp.c:2709 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "要素型%sの配列を要素型%sのARRAY式に含められません" -#: executor/execExprInterp.c:2661 executor/execExprInterp.c:2691 +#: executor/execExprInterp.c:2750 executor/execExprInterp.c:2780 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "多次元配列の配列式の次数があっていなければなりません" -#: executor/execExprInterp.c:2913 executor/execExprInterp.c:2960 +#: executor/execExprInterp.c:3001 executor/execExprInterp.c:3048 #, c-format msgid "attribute %d has wrong type" msgstr "属性%dの型が間違っています" -#: executor/execExprInterp.c:3070 +#: executor/execExprInterp.c:3158 #, c-format msgid "array subscript in assignment must not be null" msgstr "代入における配列の添え字はnullにはできません" -#: executor/execExprInterp.c:3503 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3588 utils/adt/domains.c:149 #, c-format msgid "domain %s does not allow null values" msgstr "ドメイン%sはnull値を許しません" -#: executor/execExprInterp.c:3518 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3603 utils/adt/domains.c:184 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "ドメイン%sの値が検査制約\"%s\"に違反しています" -#: executor/execExprInterp.c:3889 executor/execExprInterp.c:3906 -#: executor/execExprInterp.c:4008 executor/nodeModifyTable.c:109 -#: executor/nodeModifyTable.c:120 executor/nodeModifyTable.c:137 -#: executor/nodeModifyTable.c:145 +#: executor/execExprInterp.c:3973 executor/execExprInterp.c:3990 executor/execExprInterp.c:4091 executor/nodeModifyTable.c:109 executor/nodeModifyTable.c:120 executor/nodeModifyTable.c:137 executor/nodeModifyTable.c:145 #, c-format msgid "table row type and query-specified row type do not match" msgstr "テーブルの行型と問い合わせで指定した行型が一致しません" -#: executor/execExprInterp.c:3890 +#: executor/execExprInterp.c:3974 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." msgstr[0] "テーブル行には%d属性ありますが、問い合わせでは%dを想定しています。" msgstr[1] "テーブル行には%d属性ありますが、問い合わせでは%dを想定しています。" -#: executor/execExprInterp.c:3907 executor/nodeModifyTable.c:121 +#: executor/execExprInterp.c:3991 executor/nodeModifyTable.c:121 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "テーブルでは %2$d 番目の型は %1$s ですが、問い合わせでは %3$s を想定しています。" -#: executor/execExprInterp.c:4009 executor/execSRF.c:959 +#: executor/execExprInterp.c:4092 executor/execSRF.c:967 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "序数位置%dの削除された属性における物理格納形式が一致しません。" @@ -11336,32 +11184,32 @@ msgstr "シーケンス\"%s\"を変更できません" msgid "cannot change TOAST relation \"%s\"" msgstr "TOASTリレーション\"%s\"を変更できません" -#: executor/execMain.c:1115 rewrite/rewriteHandler.c:2911 +#: executor/execMain.c:1115 rewrite/rewriteHandler.c:2934 rewrite/rewriteHandler.c:3708 #, c-format msgid "cannot insert into view \"%s\"" msgstr "ビュー\"%s\"へは挿入(INSERT)できません" -#: executor/execMain.c:1117 rewrite/rewriteHandler.c:2914 +#: executor/execMain.c:1117 rewrite/rewriteHandler.c:2937 rewrite/rewriteHandler.c:3711 #, c-format msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." msgstr "ビューへの挿入を可能にするために、INSTEAD OF INSERTトリガまたは無条件のON INSERT DO INSTEADルールを作成してください。" -#: executor/execMain.c:1123 rewrite/rewriteHandler.c:2919 +#: executor/execMain.c:1123 rewrite/rewriteHandler.c:2942 rewrite/rewriteHandler.c:3716 #, c-format msgid "cannot update view \"%s\"" msgstr "ビュー\"%s\"は更新できません" -#: executor/execMain.c:1125 rewrite/rewriteHandler.c:2922 +#: executor/execMain.c:1125 rewrite/rewriteHandler.c:2945 rewrite/rewriteHandler.c:3719 #, c-format msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." msgstr "ビューへの更新を可能にするために、INSTEAD OF UPDATEトリガまたは無条件のON UPDATE DO INSTEADルールを作成してください。" -#: executor/execMain.c:1131 rewrite/rewriteHandler.c:2927 +#: executor/execMain.c:1131 rewrite/rewriteHandler.c:2950 rewrite/rewriteHandler.c:3724 #, c-format msgid "cannot delete from view \"%s\"" msgstr "ビュー\"%s\"からは削除できません" -#: executor/execMain.c:1133 rewrite/rewriteHandler.c:2930 +#: executor/execMain.c:1133 rewrite/rewriteHandler.c:2953 rewrite/rewriteHandler.c:3727 #, c-format msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." msgstr "ビューからの削除を可能にするために、INSTEAD OF DELETEトリガまたは無条件のON DELETE DO INSTEADルールを作成してください。" @@ -11426,8 +11274,7 @@ msgstr "ビュー\"%s\"では行のロックはできません" msgid "cannot lock rows in materialized view \"%s\"" msgstr "実体化ビュー\"%s\"では行のロックはできません" -#: executor/execMain.c:1257 executor/execMain.c:2638 -#: executor/nodeLockRows.c:132 +#: executor/execMain.c:1257 executor/execMain.c:2627 executor/nodeLockRows.c:132 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "外部テーブル\"%s\"では行のロックはできません" @@ -11437,48 +11284,47 @@ msgstr "外部テーブル\"%s\"では行のロックはできません" msgid "cannot lock rows in relation \"%s\"" msgstr "リレーション\"%s\"では行のロックはできません" -#: executor/execMain.c:1889 +#: executor/execMain.c:1879 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "リレーション\"%s\"の新しい行はパーティション制約に違反しています" -#: executor/execMain.c:1891 executor/execMain.c:1973 executor/execMain.c:2022 -#: executor/execMain.c:2131 +#: executor/execMain.c:1881 executor/execMain.c:1964 executor/execMain.c:2012 executor/execMain.c:2120 #, c-format msgid "Failing row contains %s." msgstr "失敗した行は%sを含みます" -#: executor/execMain.c:1971 +#: executor/execMain.c:1961 #, c-format -msgid "null value in column \"%s\" violates not-null constraint" -msgstr "列\"%s\"内のNULL値はNOT NULL制約違反です" +msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" +msgstr "リレーション\"%2$s\"の列\"%1$s\"のNULL値がが非NULL制約に違反しています" -#: executor/execMain.c:2020 +#: executor/execMain.c:2010 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "リレーション\"%s\"の新しい行は検査制約\"%s\"に違反しています" -#: executor/execMain.c:2129 +#: executor/execMain.c:2118 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "新しい行はビュー\"%s\"のチェックオプションに違反しています" -#: executor/execMain.c:2139 +#: executor/execMain.c:2128 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "新しい行はテーブル\"%2$s\"行レベルセキュリティポリシ\"%1$s\"に違反しています" -#: executor/execMain.c:2144 +#: executor/execMain.c:2133 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "新しい行はテーブル\"%s\"の行レベルセキュリティポリシに違反しています" -#: executor/execMain.c:2151 +#: executor/execMain.c:2140 #, c-format msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "新しい行はテーブル\"%1$s\"の行レベルセキュリティポリシ\"%2$s\"(USING式)に違反しています" -#: executor/execMain.c:2156 +#: executor/execMain.c:2145 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "新しい行はテーブル\"%s\"の行レベルセキュリティポリシ(USING式)に違反しています" @@ -11493,242 +11339,226 @@ msgstr "行に対応するパーティションがリレーション\"%s\"に見 msgid "Partition key of the failing row contains %s." msgstr "失敗した行のパーティションキーは%sを含みます。" -#: executor/execReplication.c:195 executor/execReplication.c:359 +#: executor/execReplication.c:196 executor/execReplication.c:373 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update, retrying" msgstr "ロック対象のタプルは同時に行われた更新によって他の子テーブルに移動されています、再試行しています" -#: executor/execReplication.c:199 executor/execReplication.c:363 +#: executor/execReplication.c:200 executor/execReplication.c:377 #, c-format msgid "concurrent update, retrying" msgstr "同時更新がありました、リトライします" -#: executor/execReplication.c:205 executor/execReplication.c:369 +#: executor/execReplication.c:206 executor/execReplication.c:383 #, c-format msgid "concurrent delete, retrying" msgstr "並行する削除がありました、リトライします" -#: executor/execReplication.c:263 parser/parse_oper.c:228 -#: utils/adt/array_userfuncs.c:719 utils/adt/array_userfuncs.c:858 -#: utils/adt/arrayfuncs.c:3625 utils/adt/arrayfuncs.c:4140 -#: utils/adt/arrayfuncs.c:6130 utils/adt/rowtypes.c:1180 +#: executor/execReplication.c:269 parser/parse_oper.c:228 utils/adt/array_userfuncs.c:719 utils/adt/array_userfuncs.c:858 utils/adt/arrayfuncs.c:3647 utils/adt/arrayfuncs.c:4167 utils/adt/arrayfuncs.c:6153 utils/adt/rowtypes.c:1202 #, c-format msgid "could not identify an equality operator for type %s" msgstr "型%sの等価性演算子を識別できませんでした" -#: executor/execReplication.c:572 +#: executor/execReplication.c:586 #, c-format msgid "cannot update table \"%s\" because it does not have a replica identity and publishes updates" msgstr "テーブル\"%s\"は複製識別を持たずかつ更新を発行しているため、更新できません" -#: executor/execReplication.c:574 +#: executor/execReplication.c:588 #, c-format msgid "To enable updating the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "テーブルの更新を可能にするには ALTER TABLE で REPLICA IDENTITY を設定してください。" -#: executor/execReplication.c:578 +#: executor/execReplication.c:592 #, c-format msgid "cannot delete from table \"%s\" because it does not have a replica identity and publishes deletes" msgstr "テーブル\"%s\"は複製識別がなくかつ削除を発行しているため、このテーブルでは行の削除ができません" -#: executor/execReplication.c:580 +#: executor/execReplication.c:594 #, c-format msgid "To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "このテーブルでの行削除を可能にするには ALTER TABLE で REPLICA IDENTITY を設定してください。" -#: executor/execReplication.c:600 executor/execReplication.c:607 -#: executor/execReplication.c:615 +#: executor/execReplication.c:613 executor/execReplication.c:621 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "リレーション\"%s.%s\"は論理レプリケーション先としては使用できません" -#: executor/execReplication.c:602 -#, c-format -msgid "\"%s.%s\" is a partitioned table." -msgstr "\"%s.%s\"はパーティションテーブルです" - -#: executor/execReplication.c:609 +#: executor/execReplication.c:615 #, c-format msgid "\"%s.%s\" is a foreign table." msgstr "\"%s.%s\"は外部テーブルです。" -#: executor/execReplication.c:617 +#: executor/execReplication.c:623 #, c-format msgid "\"%s.%s\" is not a table." msgstr "\"%s.%s\"はテーブルではありません" -#: executor/execSRF.c:310 +#: executor/execSRF.c:315 #, c-format msgid "rows returned by function are not all of the same row type" msgstr "関数から戻された行はすべてが同じ行型ではありません" -#: executor/execSRF.c:358 executor/execSRF.c:649 +#: executor/execSRF.c:363 executor/execSRF.c:657 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "実体化モードのテーブル関数プロトコルに従っていません" -#: executor/execSRF.c:365 executor/execSRF.c:667 +#: executor/execSRF.c:370 executor/execSRF.c:675 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "識別できないテーブル関数のreturnMode: %d" -#: executor/execSRF.c:876 +#: executor/execSRF.c:884 #, c-format msgid "function returning setof record called in context that cannot accept type record" msgstr "レコード集合を返す関数が、レコード型が受け付けられない文脈で呼び出されました" -#: executor/execSRF.c:932 executor/execSRF.c:948 executor/execSRF.c:958 +#: executor/execSRF.c:940 executor/execSRF.c:956 executor/execSRF.c:966 #, c-format msgid "function return row and query-specified return row do not match" msgstr "問い合わせが指定した戻り値の行と実際の関数の戻り値の行が一致しません" -#: executor/execSRF.c:933 +#: executor/execSRF.c:941 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." msgstr[0] "%d属性を持つ行が返されました。問い合わせでは%d個を想定しています。" msgstr[1] "%d属性を持つ行が返されました。問い合わせでは%d個を想定しています。" -#: executor/execSRF.c:949 +#: executor/execSRF.c:957 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "序数位置%2$dの型%1$sが返されました。問い合わせでは%3$sを想定しています。" -#: executor/execUtils.c:710 +#: executor/execUtils.c:750 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "実体化ビュー\"%s\"にはデータが格納されていません" -#: executor/execUtils.c:712 +#: executor/execUtils.c:752 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "REFRESH MATERIALIZED VIEWコマンドを使用してください。" -#: executor/functions.c:225 +#: executor/functions.c:231 #, c-format msgid "could not determine actual type of argument declared %s" msgstr "%sと宣言された引数の型を特定できませんでした" -#: executor/functions.c:521 +#: executor/functions.c:528 #, c-format msgid "cannot COPY to/from client in a SQL function" msgstr "SQL関数の中ではクライアントとの間のCOPYはできません" #. translator: %s is a SQL statement name -#: executor/functions.c:527 +#: executor/functions.c:534 #, c-format msgid "%s is not allowed in a SQL function" msgstr "SQL関数では%sは許可されません" #. translator: %s is a SQL statement name -#: executor/functions.c:535 executor/spi.c:1474 executor/spi.c:2262 +#: executor/functions.c:542 executor/spi.c:1587 executor/spi.c:2381 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "volatile関数以外では%sは許可されません" -#: executor/functions.c:656 -#, c-format -msgid "could not determine actual result type for function declared to return type %s" -msgstr "戻り値型%sとして宣言された関数の実際の結果型を特定できませんでした" - -#: executor/functions.c:1407 +#: executor/functions.c:1430 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "SQL関数\"%s\"の行番号 %d" -#: executor/functions.c:1433 +#: executor/functions.c:1456 #, c-format msgid "SQL function \"%s\" during startup" msgstr "SQL関数\"%s\"の起動中" -#: executor/functions.c:1526 +#: executor/functions.c:1549 #, c-format msgid "calling procedures with output arguments is not supported in SQL functions" msgstr "出力引数を持つプロシージャの呼び出しはSQL関数ではサポートされていません" -#: executor/functions.c:1646 executor/functions.c:1679 -#: executor/functions.c:1691 executor/functions.c:1826 -#: executor/functions.c:1859 executor/functions.c:1889 +#: executor/functions.c:1671 executor/functions.c:1708 executor/functions.c:1722 executor/functions.c:1812 executor/functions.c:1845 executor/functions.c:1859 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "%sを返すと宣言された関数において戻り値型が一致しません" -#: executor/functions.c:1648 +#: executor/functions.c:1673 #, c-format msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." msgstr "関数の最後のステートメントは SELECT もしくは INSERT/UPDATE/DELETE RETURNING のいずれかである必要があります" -#: executor/functions.c:1681 +#: executor/functions.c:1710 #, c-format msgid "Final statement must return exactly one column." msgstr "最後のステートメントはちょうど1列を返さなければなりません。" -#: executor/functions.c:1693 +#: executor/functions.c:1724 #, c-format msgid "Actual return type is %s." msgstr "実際の戻り値型は%sです。" -#: executor/functions.c:1828 +#: executor/functions.c:1814 #, c-format msgid "Final statement returns too many columns." msgstr "最後のステートメントが返す列が多すぎます。" -#: executor/functions.c:1861 +#: executor/functions.c:1847 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "最後のステートメントが列%3$dで%2$sではなく%1$sを返しました。" -#: executor/functions.c:1891 +#: executor/functions.c:1861 #, c-format msgid "Final statement returns too few columns." msgstr "最後のステートメントが返す列が少なすぎます。" -#: executor/functions.c:1945 +#: executor/functions.c:1889 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "戻り値型%sはSQL関数でサポートされていません" -#: executor/nodeAgg.c:2855 parser/parse_agg.c:655 parser/parse_agg.c:685 +#: executor/nodeAgg.c:3076 executor/nodeAgg.c:3085 executor/nodeAgg.c:3097 +#, c-format +msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" +msgstr "テープ%dに対する予期しないEOF: %zuバイト要求しましたが、%zuバイト読み込みました" + +#: executor/nodeAgg.c:4022 parser/parse_agg.c:655 parser/parse_agg.c:685 #, c-format msgid "aggregate function calls cannot be nested" msgstr "集約関数の呼び出しを入れ子にすることはできません" -#: executor/nodeAgg.c:3060 executor/nodeWindowAgg.c:2835 +#: executor/nodeAgg.c:4230 executor/nodeWindowAgg.c:2836 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "集約%uは入力データ型と遷移用の型間で互換性が必要です" -#: executor/nodeCustom.c:146 executor/nodeCustom.c:157 +#: executor/nodeCustom.c:145 executor/nodeCustom.c:156 #, c-format msgid "custom scan \"%s\" does not support MarkPos" msgstr "カスタムスキャン\"%s\"はMarkPosをサポートしていません" -#: executor/nodeHashjoin.c:1027 executor/nodeHashjoin.c:1057 -#, c-format -msgid "could not rewind hash-join temporary file: %m" -msgstr "ハッシュ結合用一時ファイルを巻き戻しできません: %m" - -#: executor/nodeHashjoin.c:1216 executor/nodeHashjoin.c:1222 +#: executor/nodeHashjoin.c:1046 executor/nodeHashjoin.c:1076 #, c-format -msgid "could not write to hash-join temporary file: %m" -msgstr "ハッシュ結合用一時ファイルを書き出せません: %m" +msgid "could not rewind hash-join temporary file" +msgstr "ハッシュ結合用一時ファイルを巻き戻せませんでした" -#: executor/nodeHashjoin.c:1263 executor/nodeHashjoin.c:1273 +#: executor/nodeHashjoin.c:1272 executor/nodeHashjoin.c:1283 #, c-format -msgid "could not read from hash-join temporary file: %m" -msgstr "ハッシュ結合用一時ファイルから読み取れません: %m" +msgid "could not read from hash-join temporary file: read only %zu of %zu bytes" +msgstr "ハッシュ結合用一時ファイルから読み取れませんでした: %2$zuバイト中%1$zuバイトしか読み込んでいません" #: executor/nodeIndexonlyscan.c:242 #, c-format msgid "lossy distance functions are not supported in index-only scans" msgstr "概算距離関数はインデックスオンリースキャンではサポートされていません" -#: executor/nodeLimit.c:264 +#: executor/nodeLimit.c:374 #, c-format msgid "OFFSET must not be negative" msgstr "OFFSET は負数であってはなりません" -#: executor/nodeLimit.c:290 +#: executor/nodeLimit.c:400 #, c-format msgid "LIMIT must not be negative" msgstr "LIMIT は負数であってはなりません" @@ -11758,27 +11588,27 @@ msgstr "問い合わせで %d 番目に削除される列の値を指定して msgid "Query has too few columns." msgstr "問い合わせの列が少なすぎます。" -#: executor/nodeModifyTable.c:808 executor/nodeModifyTable.c:882 +#: executor/nodeModifyTable.c:839 executor/nodeModifyTable.c:913 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "削除対象のタプルはすでに現在のコマンドによって引き起こされた操作によって変更されています" -#: executor/nodeModifyTable.c:1189 +#: executor/nodeModifyTable.c:1220 #, c-format msgid "invalid ON UPDATE specification" msgstr "不正な ON UPDATE 指定です" -#: executor/nodeModifyTable.c:1190 +#: executor/nodeModifyTable.c:1221 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "結果タプルをもとのパーティションではなく異なるパーティションに追加しようとしました。" -#: executor/nodeModifyTable.c:1561 +#: executor/nodeModifyTable.c:1592 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "ON CONFLICT DO UPDATE コマンドは行に再度影響を与えることはできません" -#: executor/nodeModifyTable.c:1562 +#: executor/nodeModifyTable.c:1593 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "同じコマンドでの挿入候補の行が同じ制約値を持つことがないようにしてください" @@ -11793,119 +11623,118 @@ msgstr "TABLESAMPLEパラメータにnullは指定できません" msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "TABLESAMPLE REPEATABLE パラメータにnullは指定できません" -#: executor/nodeSubplan.c:347 executor/nodeSubplan.c:386 -#: executor/nodeSubplan.c:1152 +#: executor/nodeSubplan.c:346 executor/nodeSubplan.c:385 executor/nodeSubplan.c:1151 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "式として使用された副問い合わせが2行以上の行を返しました" -#: executor/nodeTableFuncscan.c:378 +#: executor/nodeTableFuncscan.c:375 #, c-format msgid "namespace URI must not be null" msgstr "名前空間URIにnullは指定できません" -#: executor/nodeTableFuncscan.c:392 +#: executor/nodeTableFuncscan.c:389 #, c-format msgid "row filter expression must not be null" msgstr "行フィルタ式はnullになってはなりません" -#: executor/nodeTableFuncscan.c:418 +#: executor/nodeTableFuncscan.c:415 #, c-format msgid "column filter expression must not be null" msgstr "列フィルタ式はnullになってはなりません" -#: executor/nodeTableFuncscan.c:419 +#: executor/nodeTableFuncscan.c:416 #, c-format msgid "Filter for column \"%s\" is null." msgstr "列\"%s\"のフィルタがnullです。" -#: executor/nodeTableFuncscan.c:509 +#: executor/nodeTableFuncscan.c:506 #, c-format msgid "null is not allowed in column \"%s\"" msgstr "列\"%s\"でnullは許可されません" -#: executor/nodeWindowAgg.c:354 +#: executor/nodeWindowAgg.c:355 #, c-format msgid "moving-aggregate transition function must not return null" msgstr "移動集約の推移関数はnullを返却してはなりません" -#: executor/nodeWindowAgg.c:2057 +#: executor/nodeWindowAgg.c:2058 #, c-format msgid "frame starting offset must not be null" msgstr "フレームの開始オフセットは NULL であってはなりません" -#: executor/nodeWindowAgg.c:2070 +#: executor/nodeWindowAgg.c:2071 #, c-format msgid "frame starting offset must not be negative" msgstr "フレームの開始オフセットは負数であってはなりません" -#: executor/nodeWindowAgg.c:2082 +#: executor/nodeWindowAgg.c:2083 #, c-format msgid "frame ending offset must not be null" msgstr "フレームの終了オフセットは NULL であってはなりません" -#: executor/nodeWindowAgg.c:2095 +#: executor/nodeWindowAgg.c:2096 #, c-format msgid "frame ending offset must not be negative" msgstr "フレームの終了オフセットは負数であってはなりません" -#: executor/nodeWindowAgg.c:2751 +#: executor/nodeWindowAgg.c:2752 #, c-format msgid "aggregate function %s does not support use as a window function" msgstr "集約関数 %s はウィンドウ関数としての使用をサポートしていません" -#: executor/spi.c:228 executor/spi.c:297 +#: executor/spi.c:229 executor/spi.c:298 #, c-format msgid "invalid transaction termination" msgstr "不正なトランザクション終了" -#: executor/spi.c:242 +#: executor/spi.c:243 #, c-format msgid "cannot commit while a subtransaction is active" msgstr "サブトランザクションの実行中はコミットできません" -#: executor/spi.c:303 +#: executor/spi.c:304 #, c-format msgid "cannot roll back while a subtransaction is active" msgstr "サブトランザクションの実行中はロールバックできません" -#: executor/spi.c:372 +#: executor/spi.c:373 #, c-format msgid "transaction left non-empty SPI stack" msgstr "トランザクションは空でないSPIスタックを残しました" -#: executor/spi.c:373 executor/spi.c:435 +#: executor/spi.c:374 executor/spi.c:436 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "\"SPI_finish\"呼出の抜けを確認ください" -#: executor/spi.c:434 +#: executor/spi.c:435 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "サブトランザクションが空でないSPIスタックを残しました" -#: executor/spi.c:1335 +#: executor/spi.c:1451 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "カーソルにマルチクエリの実行計画を開くことができません" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1340 +#: executor/spi.c:1456 #, c-format msgid "cannot open %s query as cursor" msgstr "カーソルで%s問い合わせを開くことができません" -#: executor/spi.c:1445 +#: executor/spi.c:1561 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHAREはサポートされていません" -#: executor/spi.c:1446 parser/analyze.c:2493 +#: executor/spi.c:1562 parser/analyze.c:2508 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "スクロール可能カーソルは読み取り専用である必要があります。" -#: executor/spi.c:2570 +#: executor/spi.c:2699 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL文 \"%s\"" @@ -11930,344 +11759,358 @@ msgstr "不正なオプション\"%s\"" msgid "Valid options in this context are: %s" msgstr "この文脈で有効なオプション: %s" -#: gram.y:1030 +#: gram.y:1043 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "UNENCRYPTED PASSWORD は今後サポートされません" -#: gram.y:1031 +#: gram.y:1044 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "UNENCRYPTED を削除してください。そうすれば替わりにパスワードを暗号化形式で格納します。" -#: gram.y:1093 +#: gram.y:1106 #, c-format msgid "unrecognized role option \"%s\"" msgstr "ロールオプション\"%s\"が認識できません" -#: gram.y:1340 gram.y:1355 +#: gram.y:1353 gram.y:1368 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTSんはスキーマ要素を含めることはできません" -#: gram.y:1501 +#: gram.y:1514 #, c-format msgid "current database cannot be changed" msgstr "現在のデータベースを変更できません" -#: gram.y:1625 +#: gram.y:1638 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "タイムゾーンの間隔はHOURまたはHOUR TO MINUTEでなければなりません" -#: gram.y:2143 +#: gram.y:2191 #, c-format msgid "column number must be in range from 1 to %d" msgstr "列番号は1から%dまでの範囲でなければなりません" -#: gram.y:2675 +#: gram.y:2723 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "シーケンスのオプション\"%s\"はここではサポートされていません" -#: gram.y:2704 +#: gram.y:2752 #, c-format msgid "modulus for hash partition provided more than once" msgstr "ハッシュパーティションで法(除数)が2回以上指定されています" -#: gram.y:2713 +#: gram.y:2761 #, c-format msgid "remainder for hash partition provided more than once" msgstr "ハッシュパーティションで剰余が2回以上指定されています" -#: gram.y:2720 +#: gram.y:2768 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "ハッシュパーティションの境界条件\"%s\"が認識できません" -#: gram.y:2728 +#: gram.y:2776 #, c-format msgid "modulus for hash partition must be specified" msgstr "ハッシュパーティションでは法(除数)の指定が必要です" -#: gram.y:2732 +#: gram.y:2780 #, c-format msgid "remainder for hash partition must be specified" msgstr "ハッシュパーティションでは剰余の指定が必要です" -#: gram.y:2933 gram.y:2966 +#: gram.y:2981 gram.y:3014 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUTはPROGRAMと同時に使用できません" -#: gram.y:2939 +#: gram.y:2987 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "COPY TO で WHERE 句は使用できません" -#: gram.y:3271 gram.y:3278 gram.y:11480 gram.y:11488 +#: gram.y:3319 gram.y:3326 gram.y:11411 gram.y:11419 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "一時テーブル作成におけるGLOBALは廃止予定です" -#: gram.y:3518 +#: gram.y:3566 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "生成カラムに対しては GENERATED ALWAYS の指定が必須です" -#: gram.y:3784 utils/adt/ri_triggers.c:1999 +#: gram.y:3832 utils/adt/ri_triggers.c:2007 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MMATCH PARTIAL はまだ実装されていません" -#: gram.y:5274 +#: gram.y:4503 +#, c-format +msgid "CREATE EXTENSION ... FROM is no longer supported" +msgstr "CREATE EXTENSION ... FROM はすでにサポートされていません" + +#: gram.y:5166 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "認識できない行セキュリティオプション \"%s\"" -#: gram.y:5275 +#: gram.y:5167 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "現時点ではPERMISSIVEもしくはRESTRICTIVEポリシのみがサポートされています" -#: gram.y:5388 +#: gram.y:5280 msgid "duplicate trigger events specified" msgstr "重複したトリガーイベントが指定されました" -#: gram.y:5529 parser/parse_utilcmd.c:3435 parser/parse_utilcmd.c:3461 +#: gram.y:5421 parser/parse_utilcmd.c:3483 parser/parse_utilcmd.c:3509 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "INITIALLY DEFERREDと宣言された制約はDEFERRABLEでなければなりません" -#: gram.y:5536 +#: gram.y:5428 #, c-format msgid "conflicting constraint properties" msgstr "制約属性の競合" -#: gram.y:5632 +#: gram.y:5524 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTIONはまだ実装されていません" -#: gram.y:6015 +#: gram.y:5907 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK はもはや必要とされません" -#: gram.y:6016 +#: gram.y:5908 #, c-format msgid "Update your data type." msgstr "データ型を更新してください" -#: gram.y:7753 +#: gram.y:7595 #, c-format msgid "aggregates cannot have output arguments" msgstr "集約は出力の引数を持つことができません" -#: gram.y:8145 utils/adt/regproc.c:691 utils/adt/regproc.c:732 +#: gram.y:7987 utils/adt/regproc.c:709 utils/adt/regproc.c:750 #, c-format msgid "missing argument" msgstr "引数が足りません" -#: gram.y:8146 utils/adt/regproc.c:692 utils/adt/regproc.c:733 +#: gram.y:7988 utils/adt/regproc.c:710 utils/adt/regproc.c:751 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "単項演算子の存在しない引数を表すにはNONEを使用してください。" -#: gram.y:10025 gram.y:10043 +#: gram.y:9917 gram.y:9935 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTIONは再帰ビューではサポートされていません" -#: gram.y:11588 +#: gram.y:11543 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "LIMIT #,#構文は実装されていません" -#: gram.y:11589 +#: gram.y:11544 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "分割してLIMITとOFFSET句を使用してください" -#: gram.y:11887 gram.y:11912 +#: gram.y:11870 gram.y:11895 #, c-format msgid "VALUES in FROM must have an alias" msgstr "FROM句のVALUESには別名が必要です" -#: gram.y:11888 gram.y:11913 +#: gram.y:11871 gram.y:11896 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "例えば、FROM (VALUES ...) [AS] foo。" -#: gram.y:11893 gram.y:11918 +#: gram.y:11876 gram.y:11901 #, c-format msgid "subquery in FROM must have an alias" msgstr "FROM句の副問い合わせには別名が必要です" -#: gram.y:11894 gram.y:11919 +#: gram.y:11877 gram.y:11902 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "例えば、FROM (SELECT ...) [AS] foo。" -#: gram.y:12372 +#: gram.y:12355 #, c-format msgid "only one DEFAULT value is allowed" msgstr "DEFAULT値は一つだけ指定可能です" -#: gram.y:12381 +#: gram.y:12364 #, c-format msgid "only one PATH value per column is allowed" msgstr "列一つにつきPATH値は一つだけ指定可能です" -#: gram.y:12390 +#: gram.y:12373 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "列\"%s\"でNULL / NOT NULL宣言が衝突しているか重複しています" -#: gram.y:12399 +#: gram.y:12382 #, c-format msgid "unrecognized column option \"%s\"" msgstr "認識できない列オプション \"%s\"" -#: gram.y:12653 +#: gram.y:12636 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "浮動小数点数の型の精度は最低でも1ビット必要です" -#: gram.y:12662 +#: gram.y:12645 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "浮動小数点型の精度は54ビットより低くなければなりません" -#: gram.y:13153 +#: gram.y:13136 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "OVERLAPS式の左辺のパラメータ数が間違っています" -#: gram.y:13158 +#: gram.y:13141 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "OVERLAPS式の右辺のパラメータ数が間違っています" -#: gram.y:13333 +#: gram.y:13316 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "UNIQUE 述部はまだ実装されていません" -#: gram.y:13680 +#: gram.y:13679 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "複数のORDER BY句はWITHIN GROUPと一緒には使用できません" -#: gram.y:13685 +#: gram.y:13684 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "DISTINCT は WITHIN GROUP と同時には使えません" -#: gram.y:13690 +#: gram.y:13689 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "VARIADIC は WITHIN GROUP と同時には使えません" -#: gram.y:14148 gram.y:14171 +#: gram.y:14150 gram.y:14173 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "フレームの開始は UNBOUNDED FOLLOWING であってはなりません" -#: gram.y:14153 +#: gram.y:14155 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "次の行から始まるフレームは、現在行では終了できません" -#: gram.y:14176 +#: gram.y:14178 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "フレームの終了は UNBOUNDED PRECEDING であってはなりません" -#: gram.y:14182 +#: gram.y:14184 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "現在行から始まるフレームは、先行する行を含むことができません" -#: gram.y:14189 +#: gram.y:14191 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "次の行から始まるフレームは、先行する行を含むことができません" -#: gram.y:14832 +#: gram.y:14836 #, c-format msgid "type modifier cannot have parameter name" msgstr "型修正子はパラメータ名を持つことはできません" -#: gram.y:14838 +#: gram.y:14842 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "型修正子はORDER BYを持つことはできません" -#: gram.y:14903 gram.y:14910 +#: gram.y:14907 gram.y:14914 #, c-format msgid "%s cannot be used as a role name here" msgstr "%sはここではロール名として使用できません" -#: gram.y:15583 gram.y:15772 +#: gram.y:15595 gram.y:15784 msgid "improper use of \"*\"" msgstr "\"*\"の使い方が不適切です" -#: gram.y:15735 gram.y:15752 tsearch/spell.c:956 tsearch/spell.c:973 -#: tsearch/spell.c:990 tsearch/spell.c:1007 tsearch/spell.c:1072 +#: gram.y:15747 gram.y:15764 tsearch/spell.c:956 tsearch/spell.c:973 tsearch/spell.c:990 tsearch/spell.c:1007 tsearch/spell.c:1072 #, c-format msgid "syntax error" msgstr "構文エラー" -#: gram.y:15836 +#: gram.y:15848 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "VARIADIC直接引数を使った順序集合集約は同じデータタイプのVARIADIC集約引数を一つ持つ必要があります" -#: gram.y:15873 +#: gram.y:15885 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "複数のORDER BY句は使用できません" -#: gram.y:15884 +#: gram.y:15896 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "複数のOFFSET句は使用できません" -#: gram.y:15893 +#: gram.y:15905 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "複数のLIMIT句は使用できません" -#: gram.y:15902 +#: gram.y:15914 +#, c-format +msgid "multiple limit options not allowed" +msgstr "複数のLIMITオプションは使用できません" + +#: gram.y:15918 +#, c-format +msgid "WITH TIES options can not be specified without ORDER BY clause" +msgstr "WITH TIESオプションORDER BY句と一緒に指定はできません" + +#: gram.y:15926 #, c-format msgid "multiple WITH clauses not allowed" msgstr "複数の WITH 句は使用できません" -#: gram.y:16106 +#: gram.y:16130 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "テーブル関数では OUT と INOUT 引数は使用できません" -#: gram.y:16207 +#: gram.y:16226 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "複数の COLLATE 句は使用できません" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16245 gram.y:16258 +#: gram.y:16264 gram.y:16277 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "%s制約は遅延可能にはできません" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16271 +#: gram.y:16290 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "%s制約をNOT VALIDとマークすることはできません" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16284 +#: gram.y:16303 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "%s制約をNO INHERITをマークすることはできません" @@ -12277,9 +12120,7 @@ msgstr "%s制約をNO INHERITをマークすることはできません" msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %u" msgstr "ファイル\"%2$s\"、%3$u行の設定パラメータ\"%1$s\"は不明です" -#: guc-file.l:353 utils/misc/guc.c:6809 utils/misc/guc.c:7003 -#: utils/misc/guc.c:7093 utils/misc/guc.c:7183 utils/misc/guc.c:7291 -#: utils/misc/guc.c:7386 +#: guc-file.l:353 utils/misc/guc.c:7036 utils/misc/guc.c:7230 utils/misc/guc.c:7320 utils/misc/guc.c:7410 utils/misc/guc.c:7518 utils/misc/guc.c:7613 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "パラメータ\"%s\"を変更するにはサーバの再起動が必要です" @@ -12310,10 +12151,9 @@ msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "設定ファイル\"%s\"にはエラーがあります。変更は適用されませんでした" #: guc-file.l:579 -#, fuzzy, c-format -#| msgid "invalid text search configuration file name \"%s\"" +#, c-format msgid "empty configuration file name: \"%s\"" -msgstr "テキスト検索設定ファイル名は%sは不正です" +msgstr "空の設定ファイル名: \"%s\"" #: guc-file.l:596 #, c-format @@ -12321,12 +12161,11 @@ msgid "could not open configuration file \"%s\": maximum nesting depth exceeded" msgstr "設定ファイル\"%s\"をオープンできませんでした: 入れ子長が上限を超えています" #: guc-file.l:616 -#, fuzzy, c-format -#| msgid "configuration file \"%s\" contains errors" +#, c-format msgid "configuration file recursion in \"%s\"" -msgstr "設定ファイル\"%s\"にはエラーがあります" +msgstr "設定ファイル\"%s\"が再帰しています" -#: guc-file.l:632 libpq/hba.c:2199 libpq/hba.c:2613 +#: guc-file.l:632 libpq/hba.c:2201 libpq/hba.c:2615 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "設定ファイル\"%s\"をオープンできませんでした: %m" @@ -12352,122 +12191,78 @@ msgid "too many syntax errors found, abandoning file \"%s\"" msgstr "多くの構文エラーがありました。ファイル\"%s\"を断念します" #: guc-file.l:982 -#, fuzzy, c-format -#| msgid "could not open configuration directory \"%s\": %m" +#, c-format msgid "empty configuration directory name: \"%s\"" -msgstr "設定ディレクトリ\"%s\"をオープンできませんでした: %m" +msgstr "空の設定ディレクトリ名: \"%s\"" #: guc-file.l:1001 #, c-format msgid "could not open configuration directory \"%s\": %m" msgstr "設定ディレクトリ\"%s\"をオープンできませんでした: %m" -#: jit/jit.c:208 utils/fmgr/dfmgr.c:209 utils/fmgr/dfmgr.c:426 -#: utils/fmgr/dfmgr.c:474 +#: jit/jit.c:205 utils/fmgr/dfmgr.c:209 utils/fmgr/dfmgr.c:417 utils/fmgr/dfmgr.c:465 #, c-format msgid "could not access file \"%s\": %m" msgstr "ファイル\"%s\"にアクセスできませんでした: %m" -#: jit/llvm/llvmjit.c:601 +#: jit/llvm/llvmjit.c:595 #, c-format msgid "time to inline: %.3fs, opt: %.3fs, emit: %.3fs" msgstr "所要時間: インライン化: %.3fs、最適化: %.3fs、出力: %.3fs" -#: jsonpath_gram.y:514 jsonpath_scan.l:526 jsonpath_scan.l:542 -#: jsonpath_scan.l:553 jsonpath_scan.l:563 jsonpath_scan.l:605 -#: utils/adt/encode.c:442 utils/adt/encode.c:507 utils/adt/json.c:786 -#: utils/adt/json.c:826 utils/adt/json.c:842 utils/adt/json.c:854 -#: utils/adt/json.c:864 utils/adt/json.c:915 utils/adt/json.c:947 -#: utils/adt/json.c:966 utils/adt/json.c:978 utils/adt/json.c:990 -#: utils/adt/json.c:1135 utils/adt/json.c:1149 utils/adt/json.c:1160 -#: utils/adt/json.c:1168 utils/adt/json.c:1176 utils/adt/json.c:1184 -#: utils/adt/json.c:1192 utils/adt/json.c:1200 utils/adt/json.c:1208 -#: utils/adt/json.c:1216 utils/adt/json.c:1246 utils/adt/varlena.c:318 -#: utils/adt/varlena.c:359 +#: jsonpath_gram.y:528 jsonpath_scan.l:520 jsonpath_scan.l:531 jsonpath_scan.l:541 jsonpath_scan.l:583 utils/adt/encode.c:482 utils/adt/encode.c:547 utils/adt/jsonfuncs.c:619 utils/adt/varlena.c:319 utils/adt/varlena.c:360 #, c-format msgid "invalid input syntax for type %s" msgstr "%s型に対する不正な入力構文" -#: jsonpath_gram.y:515 +#: jsonpath_gram.y:529 #, c-format -msgid "unrecognized flag character \"%c\" in LIKE_REGEX predicate" -msgstr "LIKE_REGEX 述語の中に認識できないフラグ文字 \"%c\"があります" +msgid "unrecognized flag character \"%.*s\" in LIKE_REGEX predicate" +msgstr "LIKE_REGEX 述語の中に認識できないフラグ文字\"%.*s\"があります" -#: jsonpath_gram.y:569 +#: jsonpath_gram.y:583 #, c-format msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" -msgstr "" +msgstr "XQueryの\"x\"フラグ(拡張正規表現)は実装されていません" #. translator: %s is typically "syntax error" -#: jsonpath_scan.l:283 +#: jsonpath_scan.l:287 #, c-format msgid "%s at end of jsonpath input" msgstr "jsonpath の最後に %s があります" #. translator: first %s is typically "syntax error" -#: jsonpath_scan.l:290 +#: jsonpath_scan.l:294 #, c-format msgid "%s at or near \"%s\" of jsonpath input" msgstr "jsonpath 入力の\"%2$s\"または近くに %1$s があります" -#: jsonpath_scan.l:501 utils/adt/json.c:880 utils/adt/json.c:903 +#: jsonpath_scan.l:499 utils/adt/jsonfuncs.c:613 #, c-format msgid "unsupported Unicode escape sequence" msgstr "サポートされないUnicodeエスケープシーケンス" -#: jsonpath_scan.l:502 utils/adt/json.c:881 -#, c-format -msgid "\\u0000 cannot be converted to text." -msgstr "\\u0000 はテキストに変換できません。" - -#: jsonpath_scan.l:527 utils/adt/json.c:904 -#, c-format -msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8." -msgstr "サーバのエンコーディングがUTF-8ではない場合、コードポイントの値が 007F 以上についてはUnicodeエスケープの値は使用できません。" - -#: jsonpath_scan.l:543 utils/adt/json.c:844 -#, c-format -msgid "Unicode high surrogate must not follow a high surrogate." -msgstr "Unicodeのハイサロゲートはハイサロゲートに続いてはいけません。" - -#: jsonpath_scan.l:554 jsonpath_scan.l:564 jsonpath_scan.l:606 -#: utils/adt/json.c:855 utils/adt/json.c:865 utils/adt/json.c:917 -#: utils/adt/json.c:979 utils/adt/json.c:991 -#, c-format -msgid "Unicode low surrogate must follow a high surrogate." -msgstr "Unicodeのローサロゲートはハイサロゲートに続かなければなりません。" - -#: lib/dshash.c:247 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 -#: utils/mmgr/dsa.c:805 +#: lib/dshash.c:247 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 #, c-format msgid "Failed on DSA request of size %zu." msgstr "サイズ%zuの動的共有エリアの要求に失敗しました。" -#: lib/stringinfo.c:284 -#, c-format -msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." -msgstr "%dバイトを持つ文字列バッファを%dバイト多く、大きくすることができません。" - #: libpq/auth-scram.c:248 #, c-format msgid "client selected an invalid SASL authentication mechanism" msgstr "クライアントが無効なSASL認証機構を選択しました" -#: libpq/auth-scram.c:269 libpq/auth-scram.c:509 libpq/auth-scram.c:518 +#: libpq/auth-scram.c:269 libpq/auth-scram.c:509 libpq/auth-scram.c:520 #, c-format -msgid "invalid SCRAM verifier for user \"%s\"" -msgstr "ユーザ\"%s\"に対する不正なSCRAMベリファイア" +msgid "invalid SCRAM secret for user \"%s\"" +msgstr "ユーザ\"%s\"に対する不正なSCRAMシークレット" #: libpq/auth-scram.c:280 #, c-format -msgid "User \"%s\" does not have a valid SCRAM verifier." -msgstr "ユーザ\"%s\"は有効なSCRAMベリファイアを持ちません。" +msgid "User \"%s\" does not have a valid SCRAM secret." +msgstr "ユーザ\"%s\"は有効なSCRAMシークレットを持ちません。" -#: libpq/auth-scram.c:358 libpq/auth-scram.c:363 libpq/auth-scram.c:676 -#: libpq/auth-scram.c:684 libpq/auth-scram.c:795 libpq/auth-scram.c:805 -#: libpq/auth-scram.c:913 libpq/auth-scram.c:920 libpq/auth-scram.c:935 -#: libpq/auth-scram.c:950 libpq/auth-scram.c:964 libpq/auth-scram.c:982 -#: libpq/auth-scram.c:997 libpq/auth-scram.c:1283 libpq/auth-scram.c:1291 +#: libpq/auth-scram.c:358 libpq/auth-scram.c:363 libpq/auth-scram.c:693 libpq/auth-scram.c:701 libpq/auth-scram.c:806 libpq/auth-scram.c:819 libpq/auth-scram.c:829 libpq/auth-scram.c:937 libpq/auth-scram.c:944 libpq/auth-scram.c:959 libpq/auth-scram.c:974 libpq/auth-scram.c:988 libpq/auth-scram.c:1006 libpq/auth-scram.c:1021 libpq/auth-scram.c:1321 libpq/auth-scram.c:1329 #, c-format msgid "malformed SCRAM message" msgstr "不正なフォーマットのSCRAMメッセージです" @@ -12497,670 +12292,672 @@ msgstr "Nonce が合致しません" msgid "could not generate random salt" msgstr "乱数ソルトを生成できませんでした" -#: libpq/auth-scram.c:677 +#: libpq/auth-scram.c:694 #, c-format msgid "Expected attribute \"%c\" but found \"%s\"." msgstr "属性\"%c\"を想定していましたが、\"%s\"でした。" -#: libpq/auth-scram.c:685 libpq/auth-scram.c:806 +#: libpq/auth-scram.c:702 libpq/auth-scram.c:830 #, c-format msgid "Expected character \"=\" for attribute \"%c\"." msgstr "属性\"%c\"としては文字\"=\"を想定していました。" -#: libpq/auth-scram.c:796 +#: libpq/auth-scram.c:807 +#, c-format +msgid "Attribute expected, but found end of string." +msgstr "属性を想定しましたが、文字列が終了しました。" + +#: libpq/auth-scram.c:820 #, c-format msgid "Attribute expected, but found invalid character \"%s\"." msgstr "属性を想定しましたが、不正な文字\"%s\"でした。" -#: libpq/auth-scram.c:914 libpq/auth-scram.c:936 +#: libpq/auth-scram.c:938 libpq/auth-scram.c:960 #, c-format msgid "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not include channel binding data." msgstr "クライアントは SCRAM-SHA-256-PLUS を選択しましたが、SCRAM メッセージにはチャネルバインディング情報が含まれていません。" -#: libpq/auth-scram.c:921 libpq/auth-scram.c:951 +#: libpq/auth-scram.c:945 libpq/auth-scram.c:975 #, c-format msgid "Comma expected, but found character \"%s\"." msgstr "カンマを想定していましたが、文字\"%s\"が見つかりました" -#: libpq/auth-scram.c:942 +#: libpq/auth-scram.c:966 #, c-format msgid "SCRAM channel binding negotiation error" msgstr "SCRAM チャネルバインディングのネゴシエーションエラー" -#: libpq/auth-scram.c:943 +#: libpq/auth-scram.c:967 #, c-format msgid "The client supports SCRAM channel binding but thinks the server does not. However, this server does support channel binding." msgstr "クライアントは SCRAM チャネルバインディングをサポートしていますが、サーバではサポートされていないと思っています。しかし実際にはサポートしています。" -#: libpq/auth-scram.c:965 +#: libpq/auth-scram.c:989 #, c-format msgid "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM message includes channel binding data." msgstr "クライアントはチャネルバインディングなしの SCRAM-SHA-256 を選択しましたが、SCRAM メッセージにはチャネルバインディング情報が含まれています。" -#: libpq/auth-scram.c:976 +#: libpq/auth-scram.c:1000 #, c-format msgid "unsupported SCRAM channel-binding type \"%s\"" msgstr "SCRAM チャネルバインディングタイプ \"%s\"はサポートされていません" -#: libpq/auth-scram.c:983 +#: libpq/auth-scram.c:1007 #, c-format msgid "Unexpected channel-binding flag \"%s\"." msgstr "予期しないチャネル割り当てフラグ \"%s\"" -#: libpq/auth-scram.c:993 +#: libpq/auth-scram.c:1017 #, c-format msgid "client uses authorization identity, but it is not supported" msgstr "クライアントは認証識別子を使っていますがサポートされていません" -#: libpq/auth-scram.c:998 +#: libpq/auth-scram.c:1022 #, c-format msgid "Unexpected attribute \"%s\" in client-first-message." msgstr "client-fist-message での想定外の属性\"%s\"" -#: libpq/auth-scram.c:1014 +#: libpq/auth-scram.c:1038 #, c-format msgid "client requires an unsupported SCRAM extension" msgstr "クライアントはサポート外のSCRAM拡張を要求しています" -#: libpq/auth-scram.c:1028 +#: libpq/auth-scram.c:1052 #, c-format msgid "non-printable characters in SCRAM nonce" msgstr "SCRAM nonce の中に表示不能な文字があります" -#: libpq/auth-scram.c:1145 +#: libpq/auth-scram.c:1169 #, c-format msgid "could not generate random nonce" msgstr "乱数nonceを生成できませんでした" -#: libpq/auth-scram.c:1249 +#: libpq/auth-scram.c:1179 +#, c-format +msgid "could not encode random nonce" +msgstr "乱数nonceをエンコードできませんでした" + +#: libpq/auth-scram.c:1285 #, c-format msgid "SCRAM channel binding check failed" msgstr "SCRAM チャネルバインディングの確認で失敗しました" -#: libpq/auth-scram.c:1267 +#: libpq/auth-scram.c:1303 #, c-format msgid "unexpected SCRAM channel-binding attribute in client-final-message" msgstr "client-final-message 中に想定外の SCRAM channel-binding 属性がありました" -#: libpq/auth-scram.c:1284 +#: libpq/auth-scram.c:1322 #, c-format msgid "Malformed proof in client-final-message." msgstr "client-final-message 中の proof の形式が不正です" -#: libpq/auth-scram.c:1292 +#: libpq/auth-scram.c:1330 #, c-format msgid "Garbage found at the end of client-final-message." msgstr "client-final-message の終端に不要なデータがあります。" -#: libpq/auth.c:278 +#: libpq/auth.c:280 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "ユーザ\"%s\"の認証に失敗しました: ホストを拒絶しました" -#: libpq/auth.c:281 +#: libpq/auth.c:283 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "ユーザ\"%s\"の\"trust\"認証に失敗しました" -#: libpq/auth.c:284 +#: libpq/auth.c:286 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "ユーザ\"%s\"のIdent認証に失敗しました" -#: libpq/auth.c:287 +#: libpq/auth.c:289 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "ユーザ\"%s\"で対向(peer)認証に失敗しました" -#: libpq/auth.c:292 +#: libpq/auth.c:294 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "ユーザ\"%s\"のパスワード認証に失敗しました" -#: libpq/auth.c:297 +#: libpq/auth.c:299 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "ユーザ\"%s\"のGSSAPI認証に失敗しました" -#: libpq/auth.c:300 +#: libpq/auth.c:302 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "ユーザ\"%s\"のSSPI認証に失敗しました" -#: libpq/auth.c:303 +#: libpq/auth.c:305 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "ユーザ\"%s\"のPAM認証に失敗しました" -#: libpq/auth.c:306 +#: libpq/auth.c:308 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "ユーザ\"%s\"のBSD認証に失敗しました" -#: libpq/auth.c:309 +#: libpq/auth.c:311 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "ユーザ\"%s\"のLDAP認証に失敗しました" -#: libpq/auth.c:312 +#: libpq/auth.c:314 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "ユーザ\"%s\"の証明書認証に失敗しました" -#: libpq/auth.c:315 +#: libpq/auth.c:317 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "ユーザ\"%s\"の RADIUS 認証に失敗しました" -#: libpq/auth.c:318 +#: libpq/auth.c:320 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "ユーザ\"%s\"の認証に失敗しました: 認証方式が不正です" -#: libpq/auth.c:322 +#: libpq/auth.c:324 #, c-format msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "接続はpg_hba.confの行%dに一致しました: \"%s\"" -#: libpq/auth.c:369 +#: libpq/auth.c:371 #, c-format msgid "client certificates can only be checked if a root certificate store is available" msgstr "クライアント証明書はルート証明書ストアが利用できる場合にのみ検証されます" -#: libpq/auth.c:380 +#: libpq/auth.c:382 #, c-format msgid "connection requires a valid client certificate" msgstr "この接続には有効なクライアント証明が必要です" -#: libpq/auth.c:390 +#: libpq/auth.c:392 #, c-format msgid "GSSAPI encryption can only be used with gss, trust, or reject authentication methods" msgstr "GSSAPI暗号化は gss、trust および reject 認証方式のみで使用できます" -#: libpq/auth.c:424 +#: libpq/auth.c:426 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" msgstr "pg_hba.conf の設定でホスト \"%s\"、ユーザ \"%s\", %s 用のレプリケーション接続を拒否しました" -#: libpq/auth.c:426 libpq/auth.c:442 libpq/auth.c:500 libpq/auth.c:518 +#: libpq/auth.c:428 libpq/auth.c:444 libpq/auth.c:502 libpq/auth.c:520 msgid "SSL off" msgstr "SSL無効" -#: libpq/auth.c:426 libpq/auth.c:442 libpq/auth.c:500 libpq/auth.c:518 +#: libpq/auth.c:428 libpq/auth.c:444 libpq/auth.c:502 libpq/auth.c:520 msgid "SSL on" msgstr "SSL有効" -#: libpq/auth.c:430 +#: libpq/auth.c:432 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\"" msgstr "pg_hba.conf の設定でホスト \"%s\"、ユーザ \"%s\"用のレプリケーション接続を拒否しました" -#: libpq/auth.c:439 +#: libpq/auth.c:441 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "pg_hba.conf の設定でホスト \"%s\"、ユーザ \"%s\"、データベース \"%s\", %sの接続を拒否しました" -#: libpq/auth.c:446 +#: libpq/auth.c:448 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\"" msgstr "pg_hba.conf の設定でホスト\"%s\"、ユーザ\"%s\"、データベース\"%s\"用のレプリケーション接続を拒否しました" -#: libpq/auth.c:475 +#: libpq/auth.c:477 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "クライアントIPアドレスは\"%s\"に解決され、前方検索と一致しました。" -#: libpq/auth.c:478 +#: libpq/auth.c:480 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "クライアントIPアドレスは\"%s\"に解決されました。前方検索は検査されません。" -#: libpq/auth.c:481 +#: libpq/auth.c:483 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "クライアントIPアドレスは\"%s\"に解決され、前方検索と一致しませんでした。" -#: libpq/auth.c:484 +#: libpq/auth.c:486 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "クライアントのホスト名\"%s\"をIPアドレスに変換できませんでした: %s。" -#: libpq/auth.c:489 +#: libpq/auth.c:491 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "クライアントのIPアドレスをホスト名に解決できませんでした: %s。" -#: libpq/auth.c:498 +#: libpq/auth.c:500 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" msgstr "pg_hba.conf にホスト\"%s\"、ユーザ\"%s\", %s用のエントリがありません" -#: libpq/auth.c:505 +#: libpq/auth.c:507 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\"" msgstr "pg_hba.conf にホスト\"%s\"、ユーザ\"%s\"用のエントリがありません" -#: libpq/auth.c:515 +#: libpq/auth.c:517 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "pg_hba.conf にホスト\"%s\"、ユーザ\"%s\"、データベース\"%s, %s用のエントリがありません" -#: libpq/auth.c:523 +#: libpq/auth.c:525 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"" msgstr "pg_hba.conf にホスト\"%s\"、ユーザ\"%s\"、データベース\"%s用のエントリがありません" -#: libpq/auth.c:690 +#: libpq/auth.c:688 #, c-format msgid "expected password response, got message type %d" msgstr "パスワード応答を想定しましたが、メッセージタイプ%dを受け取りました" -#: libpq/auth.c:718 +#: libpq/auth.c:716 #, c-format msgid "invalid password packet size" msgstr "パスワードパケットのサイズが不正です" -#: libpq/auth.c:736 +#: libpq/auth.c:734 #, c-format msgid "empty password returned by client" msgstr "クライアントから空のパスワードが返されました" -#: libpq/auth.c:856 libpq/hba.c:1340 +#: libpq/auth.c:854 libpq/hba.c:1340 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "\"db_user_namespace\"が有効の場合、MD5 認証はサポートされません" -#: libpq/auth.c:862 +#: libpq/auth.c:860 #, c-format msgid "could not generate random MD5 salt" msgstr "ランダムなMD5ソルトの生成に失敗しました" -#: libpq/auth.c:908 +#: libpq/auth.c:906 #, c-format msgid "SASL authentication is not supported in protocol version 2" msgstr "プロトコルバージョン2ではSASL認証はサポートされていません" -#: libpq/auth.c:941 +#: libpq/auth.c:939 #, c-format msgid "expected SASL response, got message type %d" msgstr "SASL応答を想定していましたが、メッセージタイプ%dを受け取りました" -#: libpq/auth.c:1070 +#: libpq/auth.c:1068 #, c-format msgid "GSSAPI is not supported in protocol version 2" msgstr "プロトコルバージョン 2 では GSSAPI はサポートされていません" -#: libpq/auth.c:1130 +#: libpq/auth.c:1128 #, c-format msgid "expected GSS response, got message type %d" msgstr "GSS応答を想定しましたが、メッセージタイプ %d を受け取りました" -#: libpq/auth.c:1192 +#: libpq/auth.c:1189 msgid "accepting GSS security context failed" msgstr "GSSセキュリティコンテキストの受け付けに失敗しました" -#: libpq/auth.c:1231 +#: libpq/auth.c:1228 msgid "retrieving GSS user name failed" msgstr "GSSユーザ名の受信に失敗しました" -#: libpq/auth.c:1362 +#: libpq/auth.c:1359 #, c-format msgid "SSPI is not supported in protocol version 2" msgstr "プロトコルバージョン 2 では SSPI はサポートされていません" -#: libpq/auth.c:1377 +#: libpq/auth.c:1374 msgid "could not acquire SSPI credentials" msgstr "SSPIの資格ハンドルを入手できませんでした" -#: libpq/auth.c:1395 +#: libpq/auth.c:1399 #, c-format msgid "expected SSPI response, got message type %d" msgstr "SSPI応答を想定しましたが、メッセージタイプ%dを受け取りました" -#: libpq/auth.c:1468 +#: libpq/auth.c:1477 msgid "could not accept SSPI security context" msgstr "SSPIセキュリティコンテキストを受け付けられませんでした" -#: libpq/auth.c:1530 +#: libpq/auth.c:1539 msgid "could not get token from SSPI security context" msgstr "SSPIセキュリティコンテキストからトークンを入手できませんでした" -#: libpq/auth.c:1649 libpq/auth.c:1668 +#: libpq/auth.c:1658 libpq/auth.c:1677 #, c-format msgid "could not translate name" msgstr "名前の変換ができませんでした" -#: libpq/auth.c:1681 +#: libpq/auth.c:1690 #, c-format msgid "realm name too long" msgstr "realm名が長すぎます" -#: libpq/auth.c:1696 +#: libpq/auth.c:1705 #, c-format msgid "translated account name too long" msgstr "変換後のアカウント名が長すぎます" -#: libpq/auth.c:1882 +#: libpq/auth.c:1886 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "Ident接続用のソケットを作成できませんでした: %m" -#: libpq/auth.c:1897 +#: libpq/auth.c:1901 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "ローカルアドレス\"%s\"にバインドできませんでした: %m" -#: libpq/auth.c:1909 +#: libpq/auth.c:1913 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "アドレス\"%s\"、ポート%sのIdentサーバに接続できませんでした: %m" -#: libpq/auth.c:1931 +#: libpq/auth.c:1935 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "アドレス\"%s\"、ポート%sのIdentサーバに問い合わせを送信できませんでした: %m" -#: libpq/auth.c:1948 +#: libpq/auth.c:1952 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "アドレス\"%s\"、ポート%sのIdentサーバからの応答を受信できませんでした: %m" -#: libpq/auth.c:1958 +#: libpq/auth.c:1962 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "Identサーバからの応答の書式が不正です: \"%s\"" -#: libpq/auth.c:1998 +#: libpq/auth.c:2009 #, c-format msgid "peer authentication is not supported on this platform" msgstr "このプラットフォームでは対向(peer)認証はサポートされていません" -#: libpq/auth.c:2002 +#: libpq/auth.c:2013 #, c-format msgid "could not get peer credentials: %m" msgstr "ピアの資格証明を入手できませんでした: %m" -#: libpq/auth.c:2013 +#: libpq/auth.c:2025 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "ローカルユーザID %ldの参照に失敗しました: %s" -#: libpq/auth.c:2101 +#: libpq/auth.c:2124 #, c-format msgid "error from underlying PAM layer: %s" msgstr "背後のPAM層でエラーがありました: %s" -#: libpq/auth.c:2170 +#: libpq/auth.c:2194 #, c-format msgid "could not create PAM authenticator: %s" msgstr "PAM authenticatorを作成できませんでした: %s" -#: libpq/auth.c:2181 +#: libpq/auth.c:2205 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER)が失敗しました: %s" -#: libpq/auth.c:2213 +#: libpq/auth.c:2237 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST)が失敗しました: %s" -#: libpq/auth.c:2225 +#: libpq/auth.c:2249 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "\"pam_set_item(PAM_CONV)が失敗しました: %s" -#: libpq/auth.c:2236 +#: libpq/auth.c:2262 #, c-format msgid "pam_authenticate failed: %s" msgstr "\"pam_authenticateが失敗しました: %s" -#: libpq/auth.c:2247 +#: libpq/auth.c:2275 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmtが失敗しました: %s" -#: libpq/auth.c:2258 +#: libpq/auth.c:2286 #, c-format msgid "could not release PAM authenticator: %s" msgstr "PAM authenticatorを解放できませんでした: %s" -#: libpq/auth.c:2334 +#: libpq/auth.c:2362 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "LDAPを初期化できませんでした: %d" -#: libpq/auth.c:2371 +#: libpq/auth.c:2399 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "ldapbasedn からドメイン名を抽出できませんでした" -#: libpq/auth.c:2379 +#: libpq/auth.c:2407 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "LDAP認証で\"%s\"に対する DNS SRV レコードが見つかりませんでした" -#: libpq/auth.c:2381 +#: libpq/auth.c:2409 #, c-format msgid "Set an LDAP server name explicitly." msgstr "LDAPサーバ名を明示的に指定してください。" -#: libpq/auth.c:2433 +#: libpq/auth.c:2461 #, c-format msgid "could not initialize LDAP: %s" msgstr "LDAPを初期化できませんでした: %s" -#: libpq/auth.c:2443 +#: libpq/auth.c:2471 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "この LDAP ライブラリでは ldaps はサポートされていません" -#: libpq/auth.c:2451 +#: libpq/auth.c:2479 #, c-format msgid "could not initialize LDAP: %m" msgstr "LDAPを初期化できませんでした: %m" -#: libpq/auth.c:2461 +#: libpq/auth.c:2489 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "LDAPプロトコルバージョンを設定できませんでした: %s" -#: libpq/auth.c:2492 -#, c-format -msgid "could not load wldap32.dll" -msgstr "wldap32.dllが読み込めません" - -#: libpq/auth.c:2500 +#: libpq/auth.c:2529 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "wldap32.dllの_ldap_start_tls_sA関数を読み込みできませんでした" -#: libpq/auth.c:2501 +#: libpq/auth.c:2530 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "このプラットフォームではLDAP over SSLをサポートしていません。" -#: libpq/auth.c:2516 +#: libpq/auth.c:2546 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "LDAP TLSセッションを開始できませんでした: %s" -#: libpq/auth.c:2587 +#: libpq/auth.c:2617 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "LDAP サーバも ldapbasedn も指定されていません" -#: libpq/auth.c:2594 +#: libpq/auth.c:2624 #, c-format msgid "LDAP server not specified" msgstr "LDAP サーバの指定がありません" -#: libpq/auth.c:2656 +#: libpq/auth.c:2686 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "LDAP 認証でユーザ名の中に不正な文字があります" -#: libpq/auth.c:2673 +#: libpq/auth.c:2703 #, c-format msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" msgstr "サーバ\"%2$s\"で、ldapbinddn \"%1$s\"によるLDAPバインドを実行できませんでした: %3$s" -#: libpq/auth.c:2702 +#: libpq/auth.c:2732 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "サーバ\"%2$s\"で、フィルタ\"%1$s\"によるLDAP検索ができませんでした: %3$s" -#: libpq/auth.c:2716 +#: libpq/auth.c:2746 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "LDAPサーバ\"%s\"は存在しません" -#: libpq/auth.c:2717 +#: libpq/auth.c:2747 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "サーバ\"%2$s\"で、フィルタ\"%1$s\"によるLDAP検索が何も返しませんでした。" -#: libpq/auth.c:2721 +#: libpq/auth.c:2751 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "LDAPユーザ\"%s\"は一意ではありません" -#: libpq/auth.c:2722 +#: libpq/auth.c:2752 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." msgstr[0] "サーバ\"%2$s\"で、フィルタ\"%1$s\"によるLDAP検索が%3$d項目返しました。" msgstr[1] "サーバ\"%2$s\"で、フィルタ\"%1$s\"によるLDAP検索が%3$d項目返しました。" -#: libpq/auth.c:2742 +#: libpq/auth.c:2772 #, c-format msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "サーバ\"%2$s\"で\"%1$s\"にマッチする最初のエントリの dn を取得できません: %3$s" -#: libpq/auth.c:2763 +#: libpq/auth.c:2793 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\"" msgstr "サーバ\"%2$s\"でユーザ\"%1$s\"の検索後、unbindできませんでした" -#: libpq/auth.c:2794 +#: libpq/auth.c:2824 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "サーバ\"%2$s\"でユーザ\"%1$s\"のLDAPログインが失敗しました: %3$s" -#: libpq/auth.c:2823 +#: libpq/auth.c:2853 #, c-format msgid "LDAP diagnostics: %s" msgstr "LDAP診断: %s" -#: libpq/auth.c:2850 +#: libpq/auth.c:2880 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "ユーザ \"%s\" の証明書認証に失敗しました: クライアント証明書にユーザ名が含まれていません" -#: libpq/auth.c:2867 -#, fuzzy, c-format -#| msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": cn mismatch" +#: libpq/auth.c:2897 +#, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" -msgstr "ユーザ\"%s\"に対する証明書の検証(clientcert=verify-full) に失敗しました: cn 不一致" +msgstr "ユーザ\"%s\"に対する証明書の検証(clientcert=verify-full) に失敗しました: CN 不一致" -#: libpq/auth.c:2968 +#: libpq/auth.c:2998 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS サーバが指定されていません" -#: libpq/auth.c:2975 +#: libpq/auth.c:3005 #, c-format msgid "RADIUS secret not specified" msgstr "RADIUS secret が指定されていません" -#: libpq/auth.c:2989 +#: libpq/auth.c:3019 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "RADIUS認証では%d文字より長いパスワードはサポートしていません" -#: libpq/auth.c:3094 libpq/hba.c:1954 +#: libpq/auth.c:3124 libpq/hba.c:1956 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "RADIUS サーバ名\"%s\"をアドレスに変換できませんでした: %s" -#: libpq/auth.c:3108 +#: libpq/auth.c:3138 #, c-format msgid "could not generate random encryption vector" msgstr "ランダムな暗号化ベクトルを生成できませんでした" -#: libpq/auth.c:3142 +#: libpq/auth.c:3172 #, c-format msgid "could not perform MD5 encryption of password" msgstr "パスワードのMD5暗号化に失敗しました" -#: libpq/auth.c:3168 +#: libpq/auth.c:3198 #, c-format msgid "could not create RADIUS socket: %m" msgstr "RADIUSのソケットを作成できませんでした: %m" -#: libpq/auth.c:3190 +#: libpq/auth.c:3220 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "ローカルの RADIUS ソケットをバインドできませんでした: %m" -#: libpq/auth.c:3200 +#: libpq/auth.c:3230 #, c-format msgid "could not send RADIUS packet: %m" msgstr "RADIUS パケットを送信できませんでした: %m" -#: libpq/auth.c:3233 libpq/auth.c:3259 +#: libpq/auth.c:3263 libpq/auth.c:3289 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "%sからのRADIUSの応答待ちがタイムアウトしました" -#: libpq/auth.c:3252 +#: libpq/auth.c:3282 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "RADIUSソケットの状態をチェックできませんでした: %m" -#: libpq/auth.c:3282 +#: libpq/auth.c:3312 #, c-format msgid "could not read RADIUS response: %m" msgstr "RADIUS応答を読めませんでした: %m" -#: libpq/auth.c:3295 libpq/auth.c:3299 +#: libpq/auth.c:3325 libpq/auth.c:3329 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "%sからのRADIUS応答が誤ったポートから送られてきました: %d" -#: libpq/auth.c:3308 +#: libpq/auth.c:3338 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "%sからのRADIUS応答が短すぎます: %d" -#: libpq/auth.c:3315 +#: libpq/auth.c:3345 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "%sからのRADIUS応答が間違った長さを保持しています: %d(実際の長さは%d)" -#: libpq/auth.c:3323 +#: libpq/auth.c:3353 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "%sからのRADIUS応答は異なるリクエストに対するものです: %d (%d であるはず)" -#: libpq/auth.c:3348 +#: libpq/auth.c:3378 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "受信パケットのMD5暗号化に失敗しました" -#: libpq/auth.c:3357 +#: libpq/auth.c:3387 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "%sからのRADIUS応答が間違ったMD5シグネチャを保持しています" -#: libpq/auth.c:3375 +#: libpq/auth.c:3405 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "%1$sからのRADIUS応答がユーザ\"%3$s\"にとって不正なコード(%2$d)を保持しています" -#: libpq/be-fsstubs.c:119 libpq/be-fsstubs.c:150 libpq/be-fsstubs.c:178 -#: libpq/be-fsstubs.c:204 libpq/be-fsstubs.c:229 libpq/be-fsstubs.c:277 -#: libpq/be-fsstubs.c:300 libpq/be-fsstubs.c:555 +#: libpq/be-fsstubs.c:119 libpq/be-fsstubs.c:150 libpq/be-fsstubs.c:178 libpq/be-fsstubs.c:204 libpq/be-fsstubs.c:229 libpq/be-fsstubs.c:277 libpq/be-fsstubs.c:300 libpq/be-fsstubs.c:553 #, c-format msgid "invalid large-object descriptor: %d" msgstr "ラージオブジェクト記述子が不正です: %d" @@ -13170,7 +12967,7 @@ msgstr "ラージオブジェクト記述子が不正です: %d" msgid "large object descriptor %d was not opened for reading" msgstr "ラージオブジェクト記述子 %d は読み込み用にオープンされていませんでした" -#: libpq/be-fsstubs.c:185 libpq/be-fsstubs.c:562 +#: libpq/be-fsstubs.c:185 libpq/be-fsstubs.c:560 #, c-format msgid "large object descriptor %d was not opened for writing" msgstr "ラージオブジェクト記述子%dは書き込み用に開かれていませんでした" @@ -13195,320 +12992,312 @@ msgstr "サーバファイル\"%s\"をオープンできませんでした: %m" msgid "could not read server file \"%s\": %m" msgstr "サーバファイル\"%s\"を読み取れませんでした: %m" -#: libpq/be-fsstubs.c:516 +#: libpq/be-fsstubs.c:514 #, c-format msgid "could not create server file \"%s\": %m" msgstr "サーバファイル\"%s\"を作成できませんでした: %m" -#: libpq/be-fsstubs.c:528 +#: libpq/be-fsstubs.c:526 #, c-format msgid "could not write server file \"%s\": %m" msgstr "サーバファイル\"%s\"を書き出せませんでした: %m" -#: libpq/be-fsstubs.c:762 +#: libpq/be-fsstubs.c:760 #, c-format msgid "large object read request is too large" msgstr "ラージオブジェクトの読み込み要求が大きすぎます" -#: libpq/be-fsstubs.c:804 utils/adt/genfile.c:235 utils/adt/genfile.c:274 -#: utils/adt/genfile.c:310 +#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:265 utils/adt/genfile.c:304 utils/adt/genfile.c:340 #, c-format msgid "requested length cannot be negative" msgstr "負の長さを指定することはできません" -#: libpq/be-fsstubs.c:857 storage/large_object/inv_api.c:295 -#: storage/large_object/inv_api.c:307 storage/large_object/inv_api.c:511 -#: storage/large_object/inv_api.c:622 storage/large_object/inv_api.c:812 +#: libpq/be-fsstubs.c:855 storage/large_object/inv_api.c:297 storage/large_object/inv_api.c:309 storage/large_object/inv_api.c:513 storage/large_object/inv_api.c:624 storage/large_object/inv_api.c:814 #, c-format msgid "permission denied for large object %u" msgstr "ラージオブジェクト %u に対する権限がありません" -#: libpq/be-secure-common.c:91 +#: libpq/be-secure-common.c:93 #, c-format msgid "could not read from command \"%s\": %m" msgstr "コマンド\"%s\"から読み取れませんでした: %m" -#: libpq/be-secure-common.c:109 +#: libpq/be-secure-common.c:113 #, c-format msgid "command \"%s\" failed" msgstr "コマンド\"%s\"の実行に失敗しました" -#: libpq/be-secure-common.c:140 +#: libpq/be-secure-common.c:141 #, c-format msgid "could not access private key file \"%s\": %m" msgstr "秘密キーファイル\"%s\"にアクセスできませんでした: %m" -#: libpq/be-secure-common.c:149 +#: libpq/be-secure-common.c:150 #, c-format msgid "private key file \"%s\" is not a regular file" msgstr "秘密キーファイル\"%s\"は通常のファイルではありません" -#: libpq/be-secure-common.c:164 +#: libpq/be-secure-common.c:165 #, c-format msgid "private key file \"%s\" must be owned by the database user or root" msgstr "秘密キーファイル\"%s\"はデータベースユーザもしくはrootの所有である必要があります" -#: libpq/be-secure-common.c:187 +#: libpq/be-secure-common.c:188 #, c-format msgid "private key file \"%s\" has group or world access" msgstr "秘密キーファイル\"%s\"はグループまたは全員からアクセス可能です" -#: libpq/be-secure-common.c:189 +#: libpq/be-secure-common.c:190 #, c-format msgid "File must have permissions u=rw (0600) or less if owned by the database user, or permissions u=rw,g=r (0640) or less if owned by root." msgstr "ファイルはデータベースユーザの所有の場合は u=rw (0600) かそれよりも低いパーミッション、root所有の場合は u=rw,g=r (0640) かそれよりも低いパーミッションである必要があります" -#: libpq/be-secure-gssapi.c:177 +#: libpq/be-secure-gssapi.c:195 msgid "GSSAPI wrap error" msgstr "GSSAPI名ラップエラー" -#: libpq/be-secure-gssapi.c:181 -#, fuzzy, c-format -#| msgid "GSSAPI did not provide confidentiality" +#: libpq/be-secure-gssapi.c:199 +#, c-format msgid "outgoing GSSAPI message would not use confidentiality" -msgstr "GSSAPI は気密性を提供しませんでした" +msgstr "送出されるGSSAPIメッセージに機密性が適用されません" -#: libpq/be-secure-gssapi.c:185 libpq/be-secure-gssapi.c:551 -#, fuzzy, c-format -#| msgid "server tried to send oversize GSSAPI packet: %zu bytes" +#: libpq/be-secure-gssapi.c:203 libpq/be-secure-gssapi.c:574 +#, c-format msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" -msgstr "サーバは過大なサイズのGSSAPIパケットを送信しようとしました: %zu バイト" +msgstr "サーバは過大なサイズのGSSAPIパケットを送信しようとしました: (%zu > %zu)" -#: libpq/be-secure-gssapi.c:303 -#, fuzzy, c-format -#| msgid "oversize GSSAPI packet sent by the client: %zu bytes" +#: libpq/be-secure-gssapi.c:330 +#, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" -msgstr "過大なサイズのGSSAPIパケットがクライアントから送出されました: %zu バイト" +msgstr "過大なサイズのGSSAPIパケットがクライアントから送出されました: (%zu > %zu)" -#: libpq/be-secure-gssapi.c:345 +#: libpq/be-secure-gssapi.c:364 msgid "GSSAPI unwrap error" msgstr "GSSAPIアンラップエラー" -#: libpq/be-secure-gssapi.c:350 -#, fuzzy, c-format -#| msgid "GSSAPI did not provide confidentiality" +#: libpq/be-secure-gssapi.c:369 +#, c-format msgid "incoming GSSAPI message did not use confidentiality" -msgstr "GSSAPI は気密性を提供しませんでした" +msgstr "到着したGSSAPIメッセージには機密性が適用されていません" -#: libpq/be-secure-gssapi.c:502 -#, fuzzy, c-format -#| msgid "oversize GSSAPI packet sent by the client: %zu bytes" +#: libpq/be-secure-gssapi.c:525 +#, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %d)" -msgstr "過大なサイズのGSSAPIパケットがクライアントから送出されました: %zu バイト" +msgstr "過大なサイズのGSSAPIパケットがクライアントから送出されました: (%zu > %d)" -#: libpq/be-secure-gssapi.c:524 -#, fuzzy -#| msgid "could not accept SSPI security context" +#: libpq/be-secure-gssapi.c:547 msgid "could not accept GSSAPI security context" -msgstr "SSPIセキュリティコンテキストを受け付けられませんでした" +msgstr "GSSAPIセキュリティコンテキストを受け入れられませんでした" -#: libpq/be-secure-gssapi.c:597 +#: libpq/be-secure-gssapi.c:637 msgid "GSSAPI size check error" msgstr "GSSAPIサイズチェックエラー" -#: libpq/be-secure-openssl.c:111 +#: libpq/be-secure-openssl.c:112 #, c-format msgid "could not create SSL context: %s" msgstr "SSLコンテキストを作成できませんでした: %s" -#: libpq/be-secure-openssl.c:154 +#: libpq/be-secure-openssl.c:138 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "サーバ証明書ファイル\"%s\"をロードできませんでした: %s" -#: libpq/be-secure-openssl.c:174 +#: libpq/be-secure-openssl.c:158 #, c-format msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "パスフレーズが要求されたため秘密キーファイル\"%s\"をリロードできませんでした" -#: libpq/be-secure-openssl.c:179 +#: libpq/be-secure-openssl.c:163 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "秘密キーファイル\"%s\"をロードできませんでした: %s" -#: libpq/be-secure-openssl.c:188 +#: libpq/be-secure-openssl.c:172 #, c-format msgid "check of private key failed: %s" msgstr "秘密キーの検査に失敗しました: %s" -#: libpq/be-secure-openssl.c:204 -#, fuzzy, c-format -#| msgid "could not set LDAP protocol version: %s" +#: libpq/be-secure-openssl.c:184 libpq/be-secure-openssl.c:206 +#, c-format +msgid "\"%s\" setting \"%s\" not supported by this build" +msgstr "このビルドでは\"%s\"を\"%s\"に設定することはできません" + +#: libpq/be-secure-openssl.c:194 +#, c-format msgid "could not set minimum SSL protocol version" -msgstr "LDAPプロトコルバージョンを設定できませんでした: %s" +msgstr "SSLプロトコルバージョンを設定できませんでした" -#: libpq/be-secure-openssl.c:220 -#, fuzzy, c-format -#| msgid "could not set LDAP protocol version: %s" +#: libpq/be-secure-openssl.c:216 +#, c-format msgid "could not set maximum SSL protocol version" -msgstr "LDAPプロトコルバージョンを設定できませんでした: %s" +msgstr "最大SSLプロトコルバージョンを設定できませんでした" -#: libpq/be-secure-openssl.c:244 +#: libpq/be-secure-openssl.c:232 #, c-format -msgid "could not set the cipher list (no valid ciphers available)" -msgstr "暗号方式リストがセットできません (利用可能な暗号方式がありません)" +msgid "could not set SSL protocol version range" +msgstr "SSLプロトコルバージョンの範囲を設定できませんでした" -#: libpq/be-secure-openssl.c:262 +#: libpq/be-secure-openssl.c:233 #, c-format -msgid "could not load root certificate file \"%s\": %s" -msgstr "ルート証明書ファイル\"%s\"をロードできませんでした: %s" +msgid "\"%s\" cannot be higher than \"%s\"" +msgstr "\"%s\"は\"%s\"より大きくできません" -#: libpq/be-secure-openssl.c:289 +#: libpq/be-secure-openssl.c:257 #, c-format -msgid "SSL certificate revocation list file \"%s\" ignored" -msgstr "SSL証明書失効リストファイル\"%s\"は無視されました" +msgid "could not set the cipher list (no valid ciphers available)" +msgstr "暗号方式リストがセットできません (利用可能な暗号方式がありません)" -#: libpq/be-secure-openssl.c:291 +#: libpq/be-secure-openssl.c:275 #, c-format -msgid "SSL library does not support certificate revocation lists." -msgstr "SSLライブラリが証明書失効リストをサポートしていません。" +msgid "could not load root certificate file \"%s\": %s" +msgstr "ルート証明書ファイル\"%s\"をロードできませんでした: %s" -#: libpq/be-secure-openssl.c:298 +#: libpq/be-secure-openssl.c:302 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "SSL証明失効リストファイル\"%s\"をロードできませんでした: %s" -#: libpq/be-secure-openssl.c:373 +#: libpq/be-secure-openssl.c:378 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "SSL接続を初期化できませんでした: SSLコンテクストが準備できていません" -#: libpq/be-secure-openssl.c:381 +#: libpq/be-secure-openssl.c:386 #, c-format msgid "could not initialize SSL connection: %s" msgstr "SSL接続を初期化できませんでした: %s" -#: libpq/be-secure-openssl.c:389 +#: libpq/be-secure-openssl.c:394 #, c-format msgid "could not set SSL socket: %s" msgstr "SSLソケットを設定できませんでした: %s" -#: libpq/be-secure-openssl.c:444 +#: libpq/be-secure-openssl.c:449 #, c-format msgid "could not accept SSL connection: %m" msgstr "SSL接続を受け付けられませんでした: %m" -#: libpq/be-secure-openssl.c:448 libpq/be-secure-openssl.c:459 +#: libpq/be-secure-openssl.c:453 libpq/be-secure-openssl.c:506 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "SSL接続を受け付けられませんでした: EOFを検出しました" -#: libpq/be-secure-openssl.c:453 +#: libpq/be-secure-openssl.c:492 #, c-format msgid "could not accept SSL connection: %s" msgstr "SSL接続を受け付けられませんでした: %s" -#: libpq/be-secure-openssl.c:464 libpq/be-secure-openssl.c:595 -#: libpq/be-secure-openssl.c:659 +#: libpq/be-secure-openssl.c:495 +#, c-format +msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." +msgstr "このことは、クライアントがSSLプロトコルのバージョン%sから%sのいずれもサポートしていないことを示唆しているかもしれません。" + +#: libpq/be-secure-openssl.c:511 libpq/be-secure-openssl.c:642 libpq/be-secure-openssl.c:706 #, c-format msgid "unrecognized SSL error code: %d" msgstr "認識できないSSLエラーコード: %d" -#: libpq/be-secure-openssl.c:506 +#: libpq/be-secure-openssl.c:553 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "SSL 証明書のコモンネームに null が含まれています" -#: libpq/be-secure-openssl.c:584 libpq/be-secure-openssl.c:643 +#: libpq/be-secure-openssl.c:631 libpq/be-secure-openssl.c:690 #, c-format msgid "SSL error: %s" msgstr "SSLエラー: %s" -#: libpq/be-secure-openssl.c:824 +#: libpq/be-secure-openssl.c:871 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "DHパラメータファイル\"%s\"をオープンできませんでした: %m" -#: libpq/be-secure-openssl.c:836 +#: libpq/be-secure-openssl.c:883 #, c-format msgid "could not load DH parameters file: %s" msgstr "DHパラメータをロードできませんでした: %s" -#: libpq/be-secure-openssl.c:846 +#: libpq/be-secure-openssl.c:893 #, c-format msgid "invalid DH parameters: %s" msgstr "不正なDHパラメータです: %s" -#: libpq/be-secure-openssl.c:854 +#: libpq/be-secure-openssl.c:901 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "不正なDHパラメータ: pは素数ではありません" -#: libpq/be-secure-openssl.c:862 +#: libpq/be-secure-openssl.c:909 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "不正なDHパラメータ: 適切な生成器も安全な素数もありません" -#: libpq/be-secure-openssl.c:1017 +#: libpq/be-secure-openssl.c:1065 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: DHパラメータをロードできませんでした" -#: libpq/be-secure-openssl.c:1025 +#: libpq/be-secure-openssl.c:1073 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: DHパラメータを設定できませんでした: %s" -#: libpq/be-secure-openssl.c:1049 +#: libpq/be-secure-openssl.c:1100 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: 認識できない曲線名: %s" -#: libpq/be-secure-openssl.c:1058 +#: libpq/be-secure-openssl.c:1109 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: キーを生成できませんでした" -#: libpq/be-secure-openssl.c:1086 +#: libpq/be-secure-openssl.c:1137 msgid "no SSL error reported" msgstr "SSLエラーはありませんでした" -#: libpq/be-secure-openssl.c:1090 +#: libpq/be-secure-openssl.c:1141 #, c-format msgid "SSL error code %lu" msgstr "SSLエラーコード: %lu" -#: libpq/be-secure-openssl.c:1320 -#, c-format -msgid "%s setting %s not supported by this build" -msgstr "このビルドでは %s を %s に設定することはできません" - -#: libpq/be-secure.c:123 +#: libpq/be-secure.c:122 #, c-format msgid "SSL connection from \"%s\"" msgstr "\"%s\"からのSSL接続" -#: libpq/be-secure.c:208 libpq/be-secure.c:304 +#: libpq/be-secure.c:207 libpq/be-secure.c:303 #, c-format msgid "terminating connection due to unexpected postmaster exit" msgstr "予期しないpostmasterの終了のため、コネクションを終了します" -#: libpq/crypt.c:52 +#: libpq/crypt.c:49 #, c-format msgid "Role \"%s\" does not exist." msgstr "ロール\"%s\"は存在しません。" -#: libpq/crypt.c:62 +#: libpq/crypt.c:59 #, c-format msgid "User \"%s\" has no password assigned." msgstr "ユーザ\"%s\"はパスワードが設定されていません。" -#: libpq/crypt.c:80 +#: libpq/crypt.c:77 #, c-format msgid "User \"%s\" has an expired password." msgstr "ユーザ\"%s\"のパスワードは期限切れです。" -#: libpq/crypt.c:182 +#: libpq/crypt.c:179 #, c-format msgid "User \"%s\" has a password that cannot be used with MD5 authentication." msgstr "ユーザ\"%s\"のパスワードはMD5認証で使用不能です。" -#: libpq/crypt.c:206 libpq/crypt.c:247 libpq/crypt.c:271 +#: libpq/crypt.c:203 libpq/crypt.c:244 libpq/crypt.c:268 #, c-format msgid "Password does not match for user \"%s\"." msgstr "ユーザ\"%s\"のパスワードが合致しません。" -#: libpq/crypt.c:290 +#: libpq/crypt.c:287 #, c-format msgid "Password of user \"%s\" is in unrecognized format." msgstr "ユーザ\"%s\"のパスワードは識別不能な形式です。" @@ -13528,19 +13317,8 @@ msgstr "セカンダリ認証ファイル\"@%s\"を\"%s\"としてオープン msgid "authentication file line too long" msgstr "認証ファイルが長すぎます" -#: libpq/hba.c:510 libpq/hba.c:867 libpq/hba.c:887 libpq/hba.c:925 -#: libpq/hba.c:975 libpq/hba.c:989 libpq/hba.c:1013 libpq/hba.c:1022 -#: libpq/hba.c:1035 libpq/hba.c:1056 libpq/hba.c:1069 libpq/hba.c:1089 -#: libpq/hba.c:1111 libpq/hba.c:1123 libpq/hba.c:1179 libpq/hba.c:1199 -#: libpq/hba.c:1213 libpq/hba.c:1232 libpq/hba.c:1243 libpq/hba.c:1258 -#: libpq/hba.c:1276 libpq/hba.c:1292 libpq/hba.c:1304 libpq/hba.c:1341 -#: libpq/hba.c:1382 libpq/hba.c:1395 libpq/hba.c:1417 libpq/hba.c:1430 -#: libpq/hba.c:1442 libpq/hba.c:1460 libpq/hba.c:1510 libpq/hba.c:1554 -#: libpq/hba.c:1565 libpq/hba.c:1581 libpq/hba.c:1598 libpq/hba.c:1608 -#: libpq/hba.c:1666 libpq/hba.c:1704 libpq/hba.c:1726 libpq/hba.c:1738 -#: libpq/hba.c:1825 libpq/hba.c:1843 libpq/hba.c:1937 libpq/hba.c:1956 -#: libpq/hba.c:1985 libpq/hba.c:1998 libpq/hba.c:2021 libpq/hba.c:2043 -#: libpq/hba.c:2057 tsearch/ts_locale.c:190 +#: libpq/hba.c:510 libpq/hba.c:867 libpq/hba.c:887 libpq/hba.c:925 libpq/hba.c:975 libpq/hba.c:989 libpq/hba.c:1013 libpq/hba.c:1022 libpq/hba.c:1035 libpq/hba.c:1056 libpq/hba.c:1069 libpq/hba.c:1089 libpq/hba.c:1111 libpq/hba.c:1123 libpq/hba.c:1179 libpq/hba.c:1199 libpq/hba.c:1213 libpq/hba.c:1232 libpq/hba.c:1243 libpq/hba.c:1258 libpq/hba.c:1276 libpq/hba.c:1292 libpq/hba.c:1304 libpq/hba.c:1341 libpq/hba.c:1382 libpq/hba.c:1395 libpq/hba.c:1417 +#: libpq/hba.c:1430 libpq/hba.c:1442 libpq/hba.c:1460 libpq/hba.c:1510 libpq/hba.c:1554 libpq/hba.c:1565 libpq/hba.c:1581 libpq/hba.c:1598 libpq/hba.c:1608 libpq/hba.c:1668 libpq/hba.c:1706 libpq/hba.c:1728 libpq/hba.c:1740 libpq/hba.c:1827 libpq/hba.c:1845 libpq/hba.c:1939 libpq/hba.c:1958 libpq/hba.c:1987 libpq/hba.c:2000 libpq/hba.c:2023 libpq/hba.c:2045 libpq/hba.c:2059 tsearch/ts_locale.c:190 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "設定ファイル \"%2$s\" の %1$d 行目" @@ -13756,111 +13534,111 @@ msgstr "RADIUSサーバのリストは空にはできません" msgid "list of RADIUS secrets cannot be empty" msgstr "RADIUSシークレットのリストは空にはできません" -#: libpq/hba.c:1660 +#: libpq/hba.c:1662 #, c-format msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" msgstr "%sの数(%d)は1または%sの数(%d)と同じである必要があります" # -#: libpq/hba.c:1694 +#: libpq/hba.c:1696 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident、peer、gssapi、sspiおよびcert" -#: libpq/hba.c:1703 +#: libpq/hba.c:1705 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "クライアント証明書は\"hostssl\"の行でのみ設定できます" -#: libpq/hba.c:1725 +#: libpq/hba.c:1727 #, c-format msgid "clientcert can not be set to \"no-verify\" when using \"cert\" authentication" msgstr "\"cert\"認証使用時はclientcertは\"no-verify\"には設定できません" -#: libpq/hba.c:1737 +#: libpq/hba.c:1739 #, c-format msgid "invalid value for clientcert: \"%s\"" msgstr "clientcertの値が不正です: \"%s\"" -#: libpq/hba.c:1771 +#: libpq/hba.c:1773 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "LDAP URL\"%s\"をパースできませんでした: %s" -#: libpq/hba.c:1782 +#: libpq/hba.c:1784 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "非サポートのLDAP URLコード: %s" -#: libpq/hba.c:1806 +#: libpq/hba.c:1808 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "このプラットフォームではLDAP URLをサポートしていません。" -#: libpq/hba.c:1824 +#: libpq/hba.c:1826 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "不正な ldapscheme の値: \"%s\"" -#: libpq/hba.c:1842 +#: libpq/hba.c:1844 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "不正なLDAPポート番号です: \"%s\"" # -#: libpq/hba.c:1888 libpq/hba.c:1895 +#: libpq/hba.c:1890 libpq/hba.c:1897 msgid "gssapi and sspi" msgstr "gssapiおよびsspi" -#: libpq/hba.c:1904 libpq/hba.c:1913 +#: libpq/hba.c:1906 libpq/hba.c:1915 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:1935 +#: libpq/hba.c:1937 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "RADIUSサーバのリスト\"%s\"のパースに失敗しました" -#: libpq/hba.c:1983 +#: libpq/hba.c:1985 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "RADIUSポートのリスト\"%s\"のパースに失敗しました" -#: libpq/hba.c:1997 +#: libpq/hba.c:1999 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "不正なRADIUSポート番号: \"%s\"" -#: libpq/hba.c:2019 +#: libpq/hba.c:2021 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "RADIUSシークレットのリスト\"%s\"のパースに失敗しました" -#: libpq/hba.c:2041 +#: libpq/hba.c:2043 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "RADIUS識別子のリスト\"%s\"のパースに失敗しました" -#: libpq/hba.c:2055 +#: libpq/hba.c:2057 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "認証オプション名を認識できません: \"%s\"" -#: libpq/hba.c:2250 +#: libpq/hba.c:2252 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "設定ファイル\"%s\"には何も含まれていません" -#: libpq/hba.c:2769 +#: libpq/hba.c:2770 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "不正な正規表現\"%s\": %s" -#: libpq/hba.c:2829 +#: libpq/hba.c:2830 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "正規表現\"%s\"で照合に失敗しました: %s" -#: libpq/hba.c:2848 +#: libpq/hba.c:2849 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "正規表現\"%s\"には\"%s\"における後方参照が要求する副表現が含まれていません" @@ -13880,150 +13658,150 @@ msgstr "\"%3$s\"として認証されたユーザ\"%2$s\"はユーザマップ\" msgid "could not open usermap file \"%s\": %m" msgstr "ユーザマップファイル\"%s\"をオープンできませんでした: %m" -#: libpq/pqcomm.c:220 +#: libpq/pqcomm.c:218 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "ソケットを非ブロッキングモードに設定できませんでした: %m" -#: libpq/pqcomm.c:374 +#: libpq/pqcomm.c:372 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "Unixドメインソケットのパス\"%s\"が長すぎます(最大 %d バイト)" -#: libpq/pqcomm.c:395 +#: libpq/pqcomm.c:393 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "ホスト名\"%s\"、サービス\"%s\"をアドレスに変換できませんでした: %s" -#: libpq/pqcomm.c:399 +#: libpq/pqcomm.c:397 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "サービス\"%s\"をアドレスに変換できませんでした: %s" -#: libpq/pqcomm.c:426 +#: libpq/pqcomm.c:424 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "要求されたアドレスを全てバインドできませんでした: MAXLISTEN (%d)を超えています" -#: libpq/pqcomm.c:435 +#: libpq/pqcomm.c:433 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:439 +#: libpq/pqcomm.c:437 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:444 +#: libpq/pqcomm.c:442 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:449 +#: libpq/pqcomm.c:447 #, c-format msgid "unrecognized address family %d" msgstr "アドレスファミリ %d を認識できません" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:475 +#: libpq/pqcomm.c:473 #, c-format msgid "could not create %s socket for address \"%s\": %m" msgstr "アドレス\"%s\"に対する%sソケットの作成に失敗しました: %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:501 +#: libpq/pqcomm.c:499 #, c-format msgid "setsockopt(SO_REUSEADDR) failed for %s address \"%s\": %m" msgstr "%sアドレス\"%s\"に対するsetsockopt(SO_REUSEADDR)が失敗しました: %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:518 +#: libpq/pqcomm.c:516 #, c-format msgid "setsockopt(IPV6_V6ONLY) failed for %s address \"%s\": %m" msgstr "%sアドレス\"%s\"に対するsetsockopt(IPV6_V6ONLY)が失敗しました: %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:538 +#: libpq/pqcomm.c:536 #, c-format msgid "could not bind %s address \"%s\": %m" msgstr "%sアドレス\"%s\"のbindに失敗しました: %m" -#: libpq/pqcomm.c:541 +#: libpq/pqcomm.c:539 #, c-format msgid "Is another postmaster already running on port %d? If not, remove socket file \"%s\" and retry." msgstr "すでに他にpostmasterがポート%dで稼動していませんか? 稼動していなければソケットファイル\"%s\"を削除して再試行してください。" -#: libpq/pqcomm.c:544 +#: libpq/pqcomm.c:542 #, c-format msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." msgstr "すでに他にpostmasterがポート%dで稼動していませんか? 稼動していなければ数秒待ってから再試行してください。" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:577 +#: libpq/pqcomm.c:575 #, c-format msgid "could not listen on %s address \"%s\": %m" msgstr "%sアドレス\"%s\"のlistenに失敗しました: %m" -#: libpq/pqcomm.c:586 +#: libpq/pqcomm.c:584 #, c-format msgid "listening on Unix socket \"%s\"" msgstr "Unixソケット\"%s\"で待ち受けています" #. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:592 +#: libpq/pqcomm.c:590 #, c-format msgid "listening on %s address \"%s\", port %d" msgstr "%sアドレス\"%s\"、ポート%dで待ち受けています" -#: libpq/pqcomm.c:675 +#: libpq/pqcomm.c:673 #, c-format msgid "group \"%s\" does not exist" msgstr "グループ\"%s\"は存在しません" -#: libpq/pqcomm.c:685 +#: libpq/pqcomm.c:683 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "ファイル\"%s\"のグループを設定できませんでした: %m" -#: libpq/pqcomm.c:696 +#: libpq/pqcomm.c:694 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "ファイル\"%s\"の権限を設定できませんでした: %m" -#: libpq/pqcomm.c:726 +#: libpq/pqcomm.c:724 #, c-format msgid "could not accept new connection: %m" msgstr "新しい接続を受け付けることができませんでした: %m" -#: libpq/pqcomm.c:928 +#: libpq/pqcomm.c:914 #, c-format msgid "there is no client connection" msgstr "クライアント接続がありません" -#: libpq/pqcomm.c:979 libpq/pqcomm.c:1075 +#: libpq/pqcomm.c:965 libpq/pqcomm.c:1061 #, c-format msgid "could not receive data from client: %m" msgstr "クライアントからデータを受信できませんでした: %m" -#: libpq/pqcomm.c:1220 tcop/postgres.c:4074 +#: libpq/pqcomm.c:1206 tcop/postgres.c:4142 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "プロトコルの同期が失われたためコネクションを終了します" -#: libpq/pqcomm.c:1286 +#: libpq/pqcomm.c:1272 #, c-format msgid "unexpected EOF within message length word" msgstr "メッセージ長ワード内のEOFは想定外です" -#: libpq/pqcomm.c:1297 +#: libpq/pqcomm.c:1283 #, c-format msgid "invalid message length" msgstr "メッセージ長が不正です" -#: libpq/pqcomm.c:1319 libpq/pqcomm.c:1332 +#: libpq/pqcomm.c:1305 libpq/pqcomm.c:1318 #, c-format msgid "incomplete message from client" msgstr "クライアントからのメッセージが不完全です" -#: libpq/pqcomm.c:1465 +#: libpq/pqcomm.c:1451 #, c-format msgid "could not send data to client: %m" msgstr "クライアントにデータを送信できませんでした: %m" @@ -14033,8 +13811,7 @@ msgstr "クライアントにデータを送信できませんでした: %m" msgid "no data left in message" msgstr "メッセージ内にデータが残っていません" -#: libpq/pqformat.c:517 libpq/pqformat.c:535 libpq/pqformat.c:556 -#: utils/adt/arrayfuncs.c:1470 utils/adt/rowtypes.c:567 +#: libpq/pqformat.c:517 libpq/pqformat.c:535 libpq/pqformat.c:556 utils/adt/arrayfuncs.c:1492 utils/adt/rowtypes.c:587 #, c-format msgid "insufficient data left in message" msgstr "メッセージ内に残るデータが不十分です" @@ -14049,12 +13826,12 @@ msgstr "メッセージ内の文字列が不正です" msgid "invalid message format" msgstr "メッセージの書式が不正です" -#: main/main.c:264 +#: main/main.c:245 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartupが失敗しました: %d\n" -#: main/main.c:328 +#: main/main.c:309 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -14063,7 +13840,7 @@ msgstr "" "%sはPostgreSQLサーバです\n" "\n" -#: main/main.c:329 +#: main/main.c:310 #, c-format msgid "" "Usage:\n" @@ -14074,112 +13851,112 @@ msgstr "" " %s [オプション]...\n" "\n" -#: main/main.c:330 +#: main/main.c:311 #, c-format msgid "Options:\n" msgstr "オプション:\n" -#: main/main.c:331 +#: main/main.c:312 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS 共有バッファの数\n" -#: main/main.c:332 +#: main/main.c:313 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c NAME=VALUE 実行時パラメータの設定\n" -#: main/main.c:333 +#: main/main.c:314 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C NAME 実行時パラメータの値を表示し、終了します\n" -#: main/main.c:334 +#: main/main.c:315 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 デバッグレベル\n" -#: main/main.c:335 +#: main/main.c:316 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D DATADIR データベースディレクトリ\n" -#: main/main.c:336 +#: main/main.c:317 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e ヨーロッパ式の日付フォーマットでの入力(DMY)\n" -#: main/main.c:337 +#: main/main.c:318 #, c-format msgid " -F turn fsync off\n" msgstr " -F fsyncを無効にします\n" -#: main/main.c:338 +#: main/main.c:319 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h HOSTNAME 接続を待ち受けるホスト名またはIPアドレス\n" -#: main/main.c:339 +#: main/main.c:320 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i TCP/IP接続を有効にします\n" -#: main/main.c:340 +#: main/main.c:321 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k DIRECTORY Unixドメインソケットの場所\n" -#: main/main.c:342 +#: main/main.c:323 #, c-format msgid " -l enable SSL connections\n" msgstr " -l SSL接続を有効にします\n" -#: main/main.c:344 +#: main/main.c:325 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N MAX-CONNECT 許容する最大接続数\n" -#: main/main.c:345 +#: main/main.c:326 #, c-format msgid " -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n" msgstr " -o OPTIONS 個々のサーバプロセスに\"OPTIONS\"を渡します(古い形式)\n" -#: main/main.c:346 +#: main/main.c:327 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT 接続を待ち受けるポート番号\n" -#: main/main.c:347 +#: main/main.c:328 #, c-format msgid " -s show statistics after each query\n" msgstr " -s 各問い合わせの後に統計情報を表示します\n" -#: main/main.c:348 +#: main/main.c:329 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S WORK-MEM ソート用のメモリ量 (KB単位)\n" -#: main/main.c:349 +#: main/main.c:330 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示し、終了します\n" -#: main/main.c:350 +#: main/main.c:331 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NAME=VALUE 実行時パラメータを設定します\n" -#: main/main.c:351 +#: main/main.c:332 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config 設定パラメータの説明を出力し、終了します\n" -#: main/main.c:352 +#: main/main.c:333 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示し、終了します\n" -#: main/main.c:354 +#: main/main.c:335 #, c-format msgid "" "\n" @@ -14188,42 +13965,42 @@ msgstr "" "\n" "開発者向けオプション:\n" -#: main/main.c:355 +#: main/main.c:336 #, c-format msgid " -f s|i|n|m|h forbid use of some plan types\n" msgstr " -f s|i|n|m|h いくつかのプランタイプを禁止します\n" -#: main/main.c:356 +#: main/main.c:337 #, c-format msgid " -n do not reinitialize shared memory after abnormal exit\n" msgstr " -n 異常終了後に共有メモリの再初期化を行いません\n" -#: main/main.c:357 +#: main/main.c:338 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O システムテーブル構造の変更を許可します\n" -#: main/main.c:358 +#: main/main.c:339 #, c-format msgid " -P disable system indexes\n" msgstr " -P システムインデックスを無効にします\n" -#: main/main.c:359 +#: main/main.c:340 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex 各問い合わせの後に時間情報を表示します\n" -#: main/main.c:360 +#: main/main.c:341 #, c-format msgid " -T send SIGSTOP to all backend processes if one dies\n" msgstr " -T 1つのバックエンドプロセス異常停止した時に全てのバックエンドプロセスSIGSTOPを送信します\n" -#: main/main.c:361 +#: main/main.c:342 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr " -W NUM デバッガをアタッチできるようにNUM秒待機します\n" -#: main/main.c:363 +#: main/main.c:344 #, c-format msgid "" "\n" @@ -14232,37 +14009,37 @@ msgstr "" "\n" "シングルユーザモード用のオプション:\n" -#: main/main.c:364 +#: main/main.c:345 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr " --single シングルユーザモードを選択します(最初の引数でなければなりません)\n" -#: main/main.c:365 +#: main/main.c:346 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME データベース名(デフォルトはユーザ名です)\n" -#: main/main.c:366 +#: main/main.c:347 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 1-5 デバッグレベルを上書きします\n" -#: main/main.c:367 +#: main/main.c:348 #, c-format msgid " -E echo statement before execution\n" msgstr " -E 実行前に文を表示します\n" -#: main/main.c:368 +#: main/main.c:349 #, c-format msgid " -j do not use newline as interactive query delimiter\n" msgstr " -j 対話式問い合わせの区切りとして改行を使用しません\n" -#: main/main.c:369 main/main.c:374 +#: main/main.c:350 main/main.c:355 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r FILENAME 標準出力と標準エラー出力を指定したファイルに出力します\n" -#: main/main.c:371 +#: main/main.c:352 #, c-format msgid "" "\n" @@ -14271,22 +14048,22 @@ msgstr "" "\n" "初期起動用のオプション:\n" -#: main/main.c:372 +#: main/main.c:353 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr " --boot 初期起動モードを選択します(最初の引数でなければなりません)\n" -#: main/main.c:373 +#: main/main.c:354 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr " DBNAME データベース名(初期起動モードでは必須の引数)\n" -#: main/main.c:375 +#: main/main.c:356 #, c-format msgid " -x NUM internal use\n" msgstr " -x NUM 内部使用\n" -#: main/main.c:377 +#: main/main.c:358 #, c-format msgid "" "\n" @@ -14294,15 +14071,20 @@ msgid "" "configuration settings and how to set them on the command line or in\n" "the configuration file.\n" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" "全ての実行時設定パラメータの一覧とコマンドラインや設定ファイルにおける\n" "設定方法についてはドキュメントを参照してください。\n" "\n" -"不具合はまで報告してください。\n" +"不具合は<%s>まで報告してください。\n" -#: main/main.c:391 +#: main/main.c:362 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" + +#: main/main.c:373 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -14315,12 +14097,12 @@ msgstr "" "する必要があります。適切なサーバの起動方法に関する詳細はドキュメントを\n" "参照してください\n" -#: main/main.c:408 +#: main/main.c:390 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: 実ユーザIDと実効ユーザIDは一致しなければなりません\n" -#: main/main.c:415 +#: main/main.c:397 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -14344,316 +14126,327 @@ msgstr "拡張可能ノードタイプ\"%s\"はすでに存在します" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods \"%s\"は登録されていません" -#: nodes/nodeFuncs.c:123 nodes/nodeFuncs.c:154 parser/parse_coerce.c:1915 -#: parser/parse_coerce.c:1943 parser/parse_coerce.c:2019 -#: parser/parse_expr.c:2201 parser/parse_func.c:705 parser/parse_oper.c:967 +#: nodes/makefuncs.c:150 +#, c-format +msgid "relation \"%s\" does not have a composite type" +msgstr "リレーション\"%s\"は複合型を持っていません" + +#: nodes/nodeFuncs.c:122 nodes/nodeFuncs.c:153 parser/parse_coerce.c:2208 parser/parse_coerce.c:2317 parser/parse_coerce.c:2352 parser/parse_expr.c:2207 parser/parse_func.c:701 parser/parse_oper.c:967 utils/fmgr/funcapi.c:528 #, c-format msgid "could not find array type for data type %s" msgstr "データ型%sの配列型がありませんでした" -#: optimizer/path/joinrels.c:833 +#: nodes/params.c:417 +#, c-format +msgid "extended query \"%s\" with parameters: %s" +msgstr "パラメータを持つ拡張問い合わせ\"%s\": %s" + +#: nodes/params.c:420 +#, c-format +msgid "extended query with parameters: %s" +msgstr "パラメータを持つ拡張問い合わせ: %s" + +#: optimizer/path/joinrels.c:855 #, c-format msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join conditions" msgstr "FULL JOIN はマージ結合可能もしくはハッシュ結合可能な場合のみサポートされています" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1195 +#: optimizer/plan/initsplan.c:1193 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "外部結合のNULL可な側では%sを適用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1912 parser/analyze.c:1644 parser/analyze.c:1842 -#: parser/analyze.c:2700 +#: optimizer/plan/planner.c:1922 parser/analyze.c:1639 parser/analyze.c:1855 parser/analyze.c:2715 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "UNION/INTERSECT/EXCEPTでは%sを使用できません" -#: optimizer/plan/planner.c:2498 optimizer/plan/planner.c:4157 +#: optimizer/plan/planner.c:2509 optimizer/plan/planner.c:4162 #, c-format msgid "could not implement GROUP BY" msgstr "GROUP BY を実行できませんでした" -#: optimizer/plan/planner.c:2499 optimizer/plan/planner.c:4158 -#: optimizer/plan/planner.c:4896 optimizer/prep/prepunion.c:1042 +#: optimizer/plan/planner.c:2510 optimizer/plan/planner.c:4163 optimizer/plan/planner.c:4890 optimizer/prep/prepunion.c:1045 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "一部のデータ型がハッシュのみをサポートする一方で、別の型はソートのみをサポートしています。" -#: optimizer/plan/planner.c:4895 +#: optimizer/plan/planner.c:4889 #, c-format msgid "could not implement DISTINCT" msgstr "DISTINCTを実行できませんでした" -#: optimizer/plan/planner.c:5630 +#: optimizer/plan/planner.c:5737 #, c-format msgid "could not implement window PARTITION BY" msgstr "ウィンドウの PARTITION BY を実行できませんでした" -#: optimizer/plan/planner.c:5631 +#: optimizer/plan/planner.c:5738 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "ウィンドウ分割に使用する列は、ソート可能なデータ型でなければなりません。" -#: optimizer/plan/planner.c:5635 +#: optimizer/plan/planner.c:5742 #, c-format msgid "could not implement window ORDER BY" msgstr "ウィンドウの ORDER BY を実行できませんでした" -#: optimizer/plan/planner.c:5636 +#: optimizer/plan/planner.c:5743 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "ウィンドウの順序付けをする列は、ソート可能なデータ型でなければなりません。" -#: optimizer/plan/setrefs.c:425 +#: optimizer/plan/setrefs.c:451 #, c-format msgid "too many range table entries" msgstr "レンジテーブルの数が多すぎます" -#: optimizer/prep/prepunion.c:505 +#: optimizer/prep/prepunion.c:508 #, c-format msgid "could not implement recursive UNION" msgstr "再帰UNIONを実行できませんでした" -#: optimizer/prep/prepunion.c:506 +#: optimizer/prep/prepunion.c:509 #, c-format msgid "All column datatypes must be hashable." msgstr "すべての列のデータ型はハッシュ可能でなければなりません。" #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1041 +#: optimizer/prep/prepunion.c:1044 #, c-format msgid "could not implement %s" msgstr "%sを実行できませんでした" -#: optimizer/util/clauses.c:4781 +#: optimizer/util/clauses.c:4746 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "SQL関数\"%s\"のインライン化処理中" -#: optimizer/util/plancat.c:130 +#: optimizer/util/plancat.c:132 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "リカバリ中は一時テーブルやUNLOGGEDテーブルにはアクセスできません" -#: optimizer/util/plancat.c:650 +#: optimizer/util/plancat.c:662 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "行全体に渡るユニークインデックスの推定指定はサポートされていません" -#: optimizer/util/plancat.c:667 +#: optimizer/util/plancat.c:679 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "ON CONFLICT句中の制約には関連付けられるインデックスがありません" -#: optimizer/util/plancat.c:717 +#: optimizer/util/plancat.c:729 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "ON CONFLICT DO UPDATEでの排除制約の使用はサポートされていません" -#: optimizer/util/plancat.c:822 +#: optimizer/util/plancat.c:834 #, c-format msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "ON CONFLICT 指定に合致するユニーク制約または排除制約がありません" -#: parser/analyze.c:711 parser/analyze.c:1407 +#: parser/analyze.c:705 parser/analyze.c:1401 #, c-format msgid "VALUES lists must all be the same length" msgstr "VALUESリストはすべて同じ長さでなければなりません" -#: parser/analyze.c:914 +#: parser/analyze.c:904 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERTに対象列よりも多くの式があります" -#: parser/analyze.c:932 +#: parser/analyze.c:922 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERTに式よりも多くの対象列があります" -#: parser/analyze.c:936 +#: parser/analyze.c:926 #, c-format msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "挿入ソースがINSERTが期待するのと同じ列数を含む行表現になっています。うっかり余計なカッコをつけたりしませんでしたか?" -#: parser/analyze.c:1218 parser/analyze.c:1617 +#: parser/analyze.c:1210 parser/analyze.c:1612 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "ここではSELECT ... INTOは許可されません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1549 parser/analyze.c:2879 +#: parser/analyze.c:1542 parser/analyze.c:2894 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%sをVALUESに使用できません" -#: parser/analyze.c:1767 +#: parser/analyze.c:1777 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "不正なUNION/INTERSECT/EXCEPT ORDER BY句です" -#: parser/analyze.c:1768 +#: parser/analyze.c:1778 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "式や関数ではなく、結果列の名前のみが使用できます。" -#: parser/analyze.c:1769 +#: parser/analyze.c:1779 #, c-format msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." msgstr "式/関数をすべてのSELECTにつけてください。またはこのUNIONをFROM句に移動してください。" -#: parser/analyze.c:1832 +#: parser/analyze.c:1845 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTOはUNION/INTERSECT/EXCEPTの最初のSELECTでのみ使用できます" -#: parser/analyze.c:1904 +#: parser/analyze.c:1917 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "UNION/INTERSECT/EXCEPTの要素となる文では同一問い合わせレベルの他のリレーションを参照できません" -#: parser/analyze.c:1993 +#: parser/analyze.c:2004 #, c-format msgid "each %s query must have the same number of columns" msgstr "すべての%s問い合わせは同じ列数を返す必要があります" -#: parser/analyze.c:2411 +#: parser/analyze.c:2426 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNINGには少なくとも1つの列が必要です" -#: parser/analyze.c:2452 +#: parser/analyze.c:2467 #, c-format msgid "cannot specify both SCROLL and NO SCROLL" msgstr "SCROLLとNO SCROLLの両方を同時には指定できません" -#: parser/analyze.c:2471 +#: parser/analyze.c:2486 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR では WITH にデータを変更する文を含んではなりません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2479 +#: parser/analyze.c:2494 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %sはサポートされていません" -#: parser/analyze.c:2482 +#: parser/analyze.c:2497 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "保持可能カーソルは読み取り専用である必要があります。" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2490 +#: parser/analyze.c:2505 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %sはサポートされていません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2501 +#: parser/analyze.c:2516 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not supported" msgstr "DECLARE INSENSITIVE CURSOR ... %sはサポートされていません" -#: parser/analyze.c:2504 +#: parser/analyze.c:2519 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "INSENSITIVEカーソルは読み取り専用である必要があります。" -#: parser/analyze.c:2570 +#: parser/analyze.c:2585 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "実体化ビューではWITH句にデータを変更する文を含んではなりません" -#: parser/analyze.c:2580 +#: parser/analyze.c:2595 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "実体化ビューでは一時テーブルやビューを使用してはいけません" -#: parser/analyze.c:2590 +#: parser/analyze.c:2605 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "実体化ビューは境界パラメータを用いて定義してはなりません" -#: parser/analyze.c:2602 +#: parser/analyze.c:2617 #, c-format msgid "materialized views cannot be unlogged" msgstr "実体化ビューをログ非取得にはできません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2707 +#: parser/analyze.c:2722 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "DISTINCT句では%sを使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2714 +#: parser/analyze.c:2729 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "GROUP BY句で%sを使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2721 +#: parser/analyze.c:2736 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "HAVING 句では%sを使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2728 +#: parser/analyze.c:2743 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "集約関数では%sは使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2735 +#: parser/analyze.c:2750 #, c-format msgid "%s is not allowed with window functions" msgstr "ウィンドウ関数では%sは使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2742 +#: parser/analyze.c:2757 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "ターゲットリストの中では%sを集合返却関数と一緒に使うことはできません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2821 +#: parser/analyze.c:2836 #, c-format msgid "%s must specify unqualified relation names" msgstr "%sでは非修飾のリレーション名を指定してください" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2852 +#: parser/analyze.c:2867 #, c-format msgid "%s cannot be applied to a join" msgstr "%sを結合に使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2861 +#: parser/analyze.c:2876 #, c-format msgid "%s cannot be applied to a function" msgstr "%sを関数に使用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2870 +#: parser/analyze.c:2885 #, c-format msgid "%s cannot be applied to a table function" msgstr "%sはテーブル関数には適用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2888 +#: parser/analyze.c:2903 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%sはWITH問い合わせには適用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2897 +#: parser/analyze.c:2912 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%sは名前付きタプルストアには適用できません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2917 +#: parser/analyze.c:2932 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "%2$s句のリレーション\"%1$s\"はFROM句にありません" @@ -14826,7 +14619,7 @@ msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "グルーピング演算は COPY FROM の WHERE 条件の中では使用できません" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:567 parser/parse_clause.c:1778 +#: parser/parse_agg.c:567 parser/parse_clause.c:1828 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "%sでは集約関数を使用できません" @@ -14847,8 +14640,7 @@ msgstr "アウタレベルの集約は直接引数に低位の変数を含むこ msgid "aggregate function calls cannot contain set-returning function calls" msgstr "集合返却関数の呼び出しに集約関数の呼び出しを含むことはできません" -#: parser/parse_agg.c:758 parser/parse_expr.c:1839 parser/parse_expr.c:2328 -#: parser/parse_func.c:876 +#: parser/parse_agg.c:758 parser/parse_expr.c:1845 parser/parse_expr.c:2332 parser/parse_func.c:872 #, c-format msgid "You might be able to move the set-returning function into a LATERAL FROM item." msgstr "この集合返却関数をLATERAL FROM項目に移動できるかもしれません。" @@ -14923,12 +14715,12 @@ msgid "window functions are not allowed in column generation expressions" msgstr "ウィンドウ関数はカラム生成式では使用できません" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:954 parser/parse_clause.c:1787 +#: parser/parse_agg.c:954 parser/parse_clause.c:1837 #, c-format msgid "window functions are not allowed in %s" msgstr "%sの中ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:988 parser/parse_clause.c:2623 +#: parser/parse_agg.c:988 parser/parse_clause.c:2671 #, c-format msgid "window \"%s\" does not exist" msgstr "ウィンドウ\"%s\"は存在しません" @@ -14963,384 +14755,428 @@ msgstr "外部問い合わせから副問い合わせがグループ化されて msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "GROUPINGの引数は関連するクエリレベルのグルーピング式でなければなりません" -#: parser/parse_clause.c:198 +#: parser/parse_clause.c:191 #, c-format msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "リレーション\"%s\"は更新文の対象にはなれません" -#: parser/parse_clause.c:575 parser/parse_clause.c:603 parser/parse_func.c:2439 +#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2424 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "集合返却関数はFROMの最上位レベルにある必要があります" -#: parser/parse_clause.c:615 +#: parser/parse_clause.c:611 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "同じ関数に対して複数の列定義リストを持つことができません" -#: parser/parse_clause.c:648 +#: parser/parse_clause.c:644 #, c-format msgid "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "複数の関数を伴った ROWS FROM() は列定義リストを持つことができません" -#: parser/parse_clause.c:649 +#: parser/parse_clause.c:645 #, c-format msgid "Put a separate column definition list for each function inside ROWS FROM()." msgstr "ROWS FROM() 内のそれぞれの関数ごとに個別の列定義リストを付けてください。" -#: parser/parse_clause.c:655 +#: parser/parse_clause.c:651 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "複数の引数をもつUNNEST()は列定義リストを持つことができません" -#: parser/parse_clause.c:656 +#: parser/parse_clause.c:652 #, c-format msgid "Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one." msgstr "ROWS FROM() の中で個別に UNNEST() をコールして、列定義リストをそれぞれに付加してください。" -#: parser/parse_clause.c:663 +#: parser/parse_clause.c:659 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY は列定義リストがあるときは使えません" -#: parser/parse_clause.c:664 +#: parser/parse_clause.c:660 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "ROWS FROM() の中に列定義リストをおいてください。" -#: parser/parse_clause.c:767 +#: parser/parse_clause.c:760 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "FOR ORDINALITY 列は一つまでです" -#: parser/parse_clause.c:828 +#: parser/parse_clause.c:821 #, c-format msgid "column name \"%s\" is not unique" msgstr "列名\"%s\"は一意ではありません" -#: parser/parse_clause.c:870 +#: parser/parse_clause.c:863 #, c-format msgid "namespace name \"%s\" is not unique" msgstr "名前空間名\"%s\"は一意ではありません" -#: parser/parse_clause.c:880 +#: parser/parse_clause.c:873 #, c-format msgid "only one default namespace is allowed" msgstr "デフォルト名前空間は一つのみ指定可能です" -#: parser/parse_clause.c:942 +#: parser/parse_clause.c:933 #, c-format msgid "tablesample method %s does not exist" msgstr "テーブルサンプルメソッド%sは存在しません" -#: parser/parse_clause.c:964 +#: parser/parse_clause.c:955 #, c-format msgid "tablesample method %s requires %d argument, not %d" msgid_plural "tablesample method %s requires %d arguments, not %d" msgstr[0] "テーブルサンプルメソッド%sは%d個の引数を必要とします、%d個ではありません" msgstr[1] "テーブルサンプルメソッド%sは%d個の引数を必要とします、%d個ではありません" -#: parser/parse_clause.c:998 +#: parser/parse_clause.c:989 #, c-format msgid "tablesample method %s does not support REPEATABLE" msgstr "テーブルサンプルメソッド%sはREPEATABLEをサポートしていません" -#: parser/parse_clause.c:1168 +#: parser/parse_clause.c:1135 #, c-format msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "TABLESAMPLE句はテーブルおよび実体化ビューのみに適用可能です" -#: parser/parse_clause.c:1338 +#: parser/parse_clause.c:1318 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "USING句に列名\"%s\"が複数あります" -#: parser/parse_clause.c:1353 +#: parser/parse_clause.c:1333 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "左テーブルに列名\"%s\"が複数あります" -#: parser/parse_clause.c:1362 +#: parser/parse_clause.c:1342 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "USING句で指定した列\"%sが左テーブルに存在しません" -#: parser/parse_clause.c:1376 +#: parser/parse_clause.c:1357 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "右テーブルに列名\"%s\"が複数あります" -#: parser/parse_clause.c:1385 +#: parser/parse_clause.c:1366 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "USING句で指定した列\"%sが右テーブルに存在しません" -#: parser/parse_clause.c:1439 +#: parser/parse_clause.c:1447 #, c-format msgid "column alias list for \"%s\" has too many entries" msgstr "列\"%s\"の別名リストのエントリが多すぎます" +#: parser/parse_clause.c:1773 +#, c-format +msgid "row count cannot be NULL in FETCH FIRST ... WITH TIES clause" +msgstr "FETCH FIRST ... WITH TIES 節で行数にNULLは指定できません" + #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1748 +#: parser/parse_clause.c:1798 #, c-format msgid "argument of %s must not contain variables" msgstr "%sの引数には変数を使用できません" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1913 +#: parser/parse_clause.c:1963 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "%s \"%s\"は曖昧です" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1942 +#: parser/parse_clause.c:1992 #, c-format msgid "non-integer constant in %s" msgstr "%sに整数以外の定数があります" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1964 +#: parser/parse_clause.c:2014 #, c-format msgid "%s position %d is not in select list" msgstr "%sの位置%dはSELECTリストにありません" -#: parser/parse_clause.c:2405 +#: parser/parse_clause.c:2453 #, c-format msgid "CUBE is limited to 12 elements" msgstr "CUBEは12要素に制限されています" -#: parser/parse_clause.c:2611 +#: parser/parse_clause.c:2659 #, c-format msgid "window \"%s\" is already defined" msgstr "ウィンドウ\"%s\"はすでに定義済みです" -#: parser/parse_clause.c:2672 +#: parser/parse_clause.c:2720 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "ウィンドウ\"%s\"のPARTITION BY句をオーバーライドできません" -#: parser/parse_clause.c:2684 +#: parser/parse_clause.c:2732 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "ウィンドウ\"%s\"のORDER BY句をオーバーライドできません" -#: parser/parse_clause.c:2714 parser/parse_clause.c:2720 +#: parser/parse_clause.c:2762 parser/parse_clause.c:2768 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "フレーム句をもっているため、ウィンドウ\"%s\"はコピーできません" -#: parser/parse_clause.c:2722 +#: parser/parse_clause.c:2770 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "このOVER句中の括弧を無視しました" -#: parser/parse_clause.c:2742 +#: parser/parse_clause.c:2790 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" msgstr "offset PRECEDING/FOLLOWING を伴った RANGE はただ一つの ORDER BY 列を必要とします" -#: parser/parse_clause.c:2765 +#: parser/parse_clause.c:2813 #, c-format msgid "GROUPS mode requires an ORDER BY clause" msgstr "GROUPSフレーム指定はORDER BY句を必要とします" -#: parser/parse_clause.c:2835 +#: parser/parse_clause.c:2883 #, c-format msgid "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list" msgstr "DISTINCT や ORDER BY 表現を伴なう集約は引数リストの中に現れなければなりません" -#: parser/parse_clause.c:2836 +#: parser/parse_clause.c:2884 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "SELECT DISTINCTではORDER BYの式はSELECTリスト内になければなりません" -#: parser/parse_clause.c:2868 +#: parser/parse_clause.c:2916 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "DISTINCTを伴った集約は、最低でも一つの引数を取る必要があります" -#: parser/parse_clause.c:2869 +#: parser/parse_clause.c:2917 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCTには少なくとも1つの列が必要です" -#: parser/parse_clause.c:2935 parser/parse_clause.c:2967 +#: parser/parse_clause.c:2983 parser/parse_clause.c:3015 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "SELECT DISTINCT ONの式はORDER BY式の先頭に一致しなければなりません" -#: parser/parse_clause.c:3045 +#: parser/parse_clause.c:3093 #, c-format msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "ASC/DESCはON CONFLICT句では指定できません" -#: parser/parse_clause.c:3051 +#: parser/parse_clause.c:3099 #, c-format msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "NULLS FIRST/LASTはON CONFLICT句では指定できません" -#: parser/parse_clause.c:3130 +#: parser/parse_clause.c:3178 #, c-format msgid "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "ON CONFLICT DO UPDATE は推定指定または制約名を必要とします" -#: parser/parse_clause.c:3131 +#: parser/parse_clause.c:3179 #, c-format msgid "For example, ON CONFLICT (column_name)." msgstr "例えば、 ON CONFLICT (column_name)。" -#: parser/parse_clause.c:3142 +#: parser/parse_clause.c:3190 #, c-format msgid "ON CONFLICT is not supported with system catalog tables" msgstr "システムカタログテーブルではON CONFLICTはサポートしていません" -#: parser/parse_clause.c:3150 +#: parser/parse_clause.c:3198 #, c-format msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" msgstr "ON CONFLICT はカタログテーブルとして使用中のテーブル\"%s\"ではサポートされません" -#: parser/parse_clause.c:3293 +#: parser/parse_clause.c:3341 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "演算子\"%s\"は有効な順序付け演算子名ではありません" -#: parser/parse_clause.c:3295 +#: parser/parse_clause.c:3343 #, c-format msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "順序付け演算子はB-Tree演算子族の\"<\"または\">\"要素でなければなりません。" -#: parser/parse_clause.c:3606 +#: parser/parse_clause.c:3654 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" msgstr "offset PRECEDING/FOLLOWING を伴った RANGE は列型 %s に対してはサポートされません" -#: parser/parse_clause.c:3612 +#: parser/parse_clause.c:3660 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s" msgstr "offset PRECEDING/FOLLOWING を伴った RANGE は列型 %s とオフセット型 %s に対してはサポートされません" -#: parser/parse_clause.c:3615 +#: parser/parse_clause.c:3663 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "オフセット値を適切な型にキャストしてください。" -#: parser/parse_clause.c:3620 +#: parser/parse_clause.c:3668 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s" msgstr "offset PRECEDING/FOLLOWING を伴った RANGE は列型 %s とオフセット型 %s に対して複数の解釈が可能になっています" -#: parser/parse_clause.c:3623 +#: parser/parse_clause.c:3671 #, c-format msgid "Cast the offset value to the exact intended type." msgstr "オフセット値を意図した型そのものにキャストしてください。" -#: parser/parse_coerce.c:1022 parser/parse_coerce.c:1060 -#: parser/parse_coerce.c:1078 parser/parse_coerce.c:1093 -#: parser/parse_expr.c:2235 parser/parse_expr.c:2823 parser/parse_target.c:962 +#: parser/parse_coerce.c:1024 parser/parse_coerce.c:1062 parser/parse_coerce.c:1080 parser/parse_coerce.c:1095 parser/parse_expr.c:2241 parser/parse_expr.c:2819 parser/parse_target.c:967 #, c-format msgid "cannot cast type %s to %s" msgstr "型%sから%sへの型変換ができません" -#: parser/parse_coerce.c:1063 +#: parser/parse_coerce.c:1065 #, c-format msgid "Input has too few columns." msgstr "入力列が少なすぎます。" -#: parser/parse_coerce.c:1081 +#: parser/parse_coerce.c:1083 #, c-format msgid "Cannot cast type %s to %s in column %d." msgstr "列%3$dで型%1$sから%2$sへの型変換ができません。" -#: parser/parse_coerce.c:1096 +#: parser/parse_coerce.c:1098 #, c-format msgid "Input has too many columns." msgstr "入力列が多すぎます。" #. translator: first %s is name of a SQL construct, eg WHERE #. translator: first %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1151 parser/parse_coerce.c:1199 +#: parser/parse_coerce.c:1153 parser/parse_coerce.c:1201 #, c-format msgid "argument of %s must be type %s, not type %s" msgstr "%1$sの引数は型%3$sではなく%2$s型でなければなりません" #. translator: %s is name of a SQL construct, eg WHERE #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1162 parser/parse_coerce.c:1211 +#: parser/parse_coerce.c:1164 parser/parse_coerce.c:1213 #, c-format msgid "argument of %s must not return a set" msgstr "%sの引数は集合を返してはなりません" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1351 +#: parser/parse_coerce.c:1353 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "%sの型%sと%sを一致させることができません" +#: parser/parse_coerce.c:1465 +#, c-format +msgid "argument types %s and %s cannot be matched" +msgstr "引数の型%sと%sは合致させられません" + #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1418 +#: parser/parse_coerce.c:1517 #, c-format msgid "%s could not convert type %s to %s" msgstr "%sで型%sから%sへ変換できませんでした" -#: parser/parse_coerce.c:1720 +#: parser/parse_coerce.c:1934 #, c-format msgid "arguments declared \"anyelement\" are not all alike" msgstr "\"anyelement\"と宣言された引数が全て同じでありません" -#: parser/parse_coerce.c:1740 +#: parser/parse_coerce.c:1954 #, c-format msgid "arguments declared \"anyarray\" are not all alike" msgstr "\"anyarray\"と宣言された引数が全て同じでありません" -#: parser/parse_coerce.c:1760 +#: parser/parse_coerce.c:1974 #, c-format msgid "arguments declared \"anyrange\" are not all alike" msgstr "\"anyrange\"と宣言された引数が全て同じでありません" -#: parser/parse_coerce.c:1789 parser/parse_coerce.c:2004 -#: parser/parse_coerce.c:2038 +#: parser/parse_coerce.c:2008 parser/parse_coerce.c:2088 utils/fmgr/funcapi.c:487 #, c-format msgid "argument declared %s is not an array but type %s" msgstr "%sと宣言された引数が配列ではなく%s型です" -#: parser/parse_coerce.c:1805 parser/parse_coerce.c:1844 +#: parser/parse_coerce.c:2029 #, c-format -msgid "argument declared %s is not consistent with argument declared %s" -msgstr "%sと宣言された引数と%sと宣言された引数とで整合性がありません" +msgid "arguments declared \"anycompatiblerange\" are not all alike" +msgstr "\"anycompatiblerange\"と宣言された引数が全て同じでありません" -#: parser/parse_coerce.c:1827 parser/parse_coerce.c:2051 +#: parser/parse_coerce.c:2041 parser/parse_coerce.c:2122 utils/fmgr/funcapi.c:501 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "%sと宣言された引数が範囲型ではなく型%sです" -#: parser/parse_coerce.c:1865 +#: parser/parse_coerce.c:2079 +#, c-format +msgid "cannot determine element type of \"anyarray\" argument" +msgstr "\"anyarray\"型の引数の要素型を決定できません" + +#: parser/parse_coerce.c:2105 parser/parse_coerce.c:2139 +#, c-format +msgid "argument declared %s is not consistent with argument declared %s" +msgstr "%sと宣言された引数と%sと宣言された引数とで整合性がありません" + +#: parser/parse_coerce.c:2163 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "入力型が%sであったため多様型が特定できませんでした" -#: parser/parse_coerce.c:1876 +#: parser/parse_coerce.c:2177 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "anynonarrayと照合されたは配列型です: %s" -#: parser/parse_coerce.c:1886 +#: parser/parse_coerce.c:2187 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "anyenumと照合された型は列挙型ではありません: %s" -#: parser/parse_coerce.c:1926 parser/parse_coerce.c:1956 +#: parser/parse_coerce.c:2218 parser/parse_coerce.c:2267 parser/parse_coerce.c:2329 parser/parse_coerce.c:2365 +#, c-format +msgid "could not determine polymorphic type %s because input has type %s" +msgstr "入力型が%2$sであるため多様型%1$sが特定できませんでした" + +#: parser/parse_coerce.c:2228 +#, c-format +msgid "anycompatiblerange type %s does not match anycompatible type %s" +msgstr "anycompatiblerange型%sはanycompatiblerange型%sと合致しません" + +#: parser/parse_coerce.c:2242 +#, c-format +msgid "type matched to anycompatiblenonarray is an array type: %s" +msgstr "anycompatiblenonarrayに対応する型が配列型です: %s" + +#: parser/parse_coerce.c:2433 +#, c-format +msgid "A result of type %s requires at least one input of type %s." +msgstr "%s型の結果には%s型の入力が最低でも一つ必要です。" + +#: parser/parse_coerce.c:2445 +#, c-format +msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, or anyrange." +msgstr "%s型の返却値には少なくとも一つの anyelement, anyarray, anynonarray, anyenum, または anyrange 型の入力が必要です。" + +#: parser/parse_coerce.c:2457 #, c-format -msgid "could not find range type for data type %s" -msgstr "データ型%sの範囲型がありませんでした" +msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, or anycompatiblerange." +msgstr "%s型の返却値には少なくとも一つの anycompatible, anycompatiblearray, anycompatiblenonarray, または anycompatiblerange型の入力が必要です。" + +#: parser/parse_coerce.c:2487 +msgid "A result of type internal requires at least one input of type internal." +msgstr "internal型の返却値には少なくとも1つのinternal型の入力が必要です。" -#: parser/parse_collate.c:228 parser/parse_collate.c:475 -#: parser/parse_collate.c:981 +#: parser/parse_collate.c:228 parser/parse_collate.c:475 parser/parse_collate.c:981 #, c-format msgid "collation mismatch between implicit collations \"%s\" and \"%s\"" msgstr "暗黙の照合順序\"%s\"と\"%s\"の間に照合順序のミスマッチがあります" -#: parser/parse_collate.c:231 parser/parse_collate.c:478 -#: parser/parse_collate.c:984 +#: parser/parse_collate.c:231 parser/parse_collate.c:478 parser/parse_collate.c:984 #, c-format msgid "You can choose the collation by applying the COLLATE clause to one or both expressions." msgstr "片方もしくは両方の式に対して COLLATE 句を適用することで照合順序を選択できます" @@ -15455,8 +15291,7 @@ msgstr "問い合わせ\"%s\"への再帰参照が2回以上現れてはなり msgid "DEFAULT is not allowed in this context" msgstr "この文脈ではDEFAULTは使えません" -#: parser/parse_expr.c:402 parser/parse_relation.c:3352 -#: parser/parse_relation.c:3372 +#: parser/parse_expr.c:402 parser/parse_relation.c:3506 parser/parse_relation.c:3526 #, c-format msgid "column %s.%s does not exist" msgstr "列%s.%sは存在しません" @@ -15489,537 +15324,534 @@ msgstr "列参照はDEFAULT式では使用できません" msgid "cannot use column reference in partition bound expression" msgstr "列参照はパーティション境界式では使用できません" -#: parser/parse_expr.c:844 parser/parse_relation.c:692 -#: parser/parse_relation.c:803 parser/parse_target.c:1200 +#: parser/parse_expr.c:850 parser/parse_relation.c:799 parser/parse_relation.c:881 parser/parse_target.c:1207 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "列参照\"%s\"は曖昧です" -#: parser/parse_expr.c:900 parser/parse_param.c:110 parser/parse_param.c:142 -#: parser/parse_param.c:199 parser/parse_param.c:298 +#: parser/parse_expr.c:906 parser/parse_param.c:110 parser/parse_param.c:142 parser/parse_param.c:199 parser/parse_param.c:298 #, c-format msgid "there is no parameter $%d" msgstr "パラメータ$%dがありません" -#: parser/parse_expr.c:1143 +#: parser/parse_expr.c:1149 #, c-format msgid "NULLIF requires = operator to yield boolean" msgstr "NULLIF では = 演算子が boolean を返す必要があります" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1149 parser/parse_expr.c:3139 +#: parser/parse_expr.c:1155 parser/parse_expr.c:3135 #, c-format msgid "%s must not return a set" msgstr "%sは集合を返してはなりません" -#: parser/parse_expr.c:1597 parser/parse_expr.c:1629 +#: parser/parse_expr.c:1603 parser/parse_expr.c:1635 #, c-format msgid "number of columns does not match number of values" msgstr "列の数がVALUESの数と一致しません" -#: parser/parse_expr.c:1643 +#: parser/parse_expr.c:1649 #, c-format msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() expression" msgstr "複数列のUPDATE項目のソースは副問合せまたはROW()式でなければなりません" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1837 parser/parse_expr.c:2326 parser/parse_func.c:2555 +#: parser/parse_expr.c:1843 parser/parse_expr.c:2330 parser/parse_func.c:2540 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "集合返却関数は%sでは使用できません" -#: parser/parse_expr.c:1898 +#: parser/parse_expr.c:1904 msgid "cannot use subquery in check constraint" msgstr "検査制約では副問い合わせを使用できません" -#: parser/parse_expr.c:1902 +#: parser/parse_expr.c:1908 msgid "cannot use subquery in DEFAULT expression" msgstr "DEFAULT式には副問い合わせを使用できません" -#: parser/parse_expr.c:1905 +#: parser/parse_expr.c:1911 msgid "cannot use subquery in index expression" msgstr "式インデックスには副問い合わせを使用できません" -#: parser/parse_expr.c:1908 +#: parser/parse_expr.c:1914 msgid "cannot use subquery in index predicate" msgstr "インデックスの述部に副問い合わせを使用できません" -#: parser/parse_expr.c:1911 +#: parser/parse_expr.c:1917 msgid "cannot use subquery in transform expression" msgstr "変換式では副問い合わせを使用できません" -#: parser/parse_expr.c:1914 +#: parser/parse_expr.c:1920 msgid "cannot use subquery in EXECUTE parameter" msgstr "EXECUTEのパラメータに副問い合わせを使用できません" -#: parser/parse_expr.c:1917 +#: parser/parse_expr.c:1923 msgid "cannot use subquery in trigger WHEN condition" msgstr "トリガーの WHEN 条件では副問い合わせを使用できません" -#: parser/parse_expr.c:1920 +#: parser/parse_expr.c:1926 msgid "cannot use subquery in partition bound" msgstr "副問い合わせはパーティション境界では使用できません" -#: parser/parse_expr.c:1923 +#: parser/parse_expr.c:1929 msgid "cannot use subquery in partition key expression" msgstr "パーティションキー式では副問い合わせを使用できません" -#: parser/parse_expr.c:1926 +#: parser/parse_expr.c:1932 msgid "cannot use subquery in CALL argument" msgstr "CALLの引数で副問い合わせは使用できません" -#: parser/parse_expr.c:1929 +#: parser/parse_expr.c:1935 msgid "cannot use subquery in COPY FROM WHERE condition" msgstr "副問い合わせは COPY FROM の WHERE 条件では使用できません" -#: parser/parse_expr.c:1932 +#: parser/parse_expr.c:1938 msgid "cannot use subquery in column generation expression" msgstr "副問い合わせはカラム生成式では使用できません" -#: parser/parse_expr.c:1985 +#: parser/parse_expr.c:1991 #, c-format msgid "subquery must return only one column" msgstr "副問い合わせは1列のみを返さなければなりません" -#: parser/parse_expr.c:2069 +#: parser/parse_expr.c:2075 #, c-format msgid "subquery has too many columns" msgstr "副問い合わせの列が多すぎます" -#: parser/parse_expr.c:2074 +#: parser/parse_expr.c:2080 #, c-format msgid "subquery has too few columns" msgstr "副問い合わせの列が少なすぎます" -#: parser/parse_expr.c:2175 +#: parser/parse_expr.c:2181 #, c-format msgid "cannot determine type of empty array" msgstr "空の配列のデータ型を決定できません" -#: parser/parse_expr.c:2176 +#: parser/parse_expr.c:2182 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "必要な型に明示的にキャストしてください。例: ARRAY[]::integer[]" -#: parser/parse_expr.c:2190 +#: parser/parse_expr.c:2196 #, c-format msgid "could not find element type for data type %s" msgstr "データ型%sの要素を見つけられませんでした" -#: parser/parse_expr.c:2477 +#: parser/parse_expr.c:2481 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "無名のXML属性値は列参照でなければなりません" -#: parser/parse_expr.c:2478 +#: parser/parse_expr.c:2482 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "無名のXML要素値は列参照でなければなりません" -#: parser/parse_expr.c:2493 +#: parser/parse_expr.c:2497 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "XML属性名\"%s\"が複数あります" -#: parser/parse_expr.c:2600 +#: parser/parse_expr.c:2604 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "XMLSERIALIZE の結果を %s へキャストできません" -#: parser/parse_expr.c:2896 parser/parse_expr.c:3092 +#: parser/parse_expr.c:2892 parser/parse_expr.c:3088 #, c-format msgid "unequal number of entries in row expressions" msgstr "行式において項目数が一致しません" -#: parser/parse_expr.c:2906 +#: parser/parse_expr.c:2902 #, c-format msgid "cannot compare rows of zero length" msgstr "長さ0の行を比較できません" -#: parser/parse_expr.c:2931 +#: parser/parse_expr.c:2927 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "行比較演算子は型%sではなくbooleanを返さなければなりません" -#: parser/parse_expr.c:2938 +#: parser/parse_expr.c:2934 #, c-format msgid "row comparison operator must not return a set" msgstr "行比較演算子は集合を返してはいけません" -#: parser/parse_expr.c:2997 parser/parse_expr.c:3038 +#: parser/parse_expr.c:2993 parser/parse_expr.c:3034 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "行比較演算子%sの解釈を特定できませんでした" -#: parser/parse_expr.c:2999 +#: parser/parse_expr.c:2995 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "行比較演算子はbtree演算子族と関連付けされなければなりません。" -#: parser/parse_expr.c:3040 +#: parser/parse_expr.c:3036 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "同程度の適合度の候補が複数存在します。" -#: parser/parse_expr.c:3133 +#: parser/parse_expr.c:3129 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROMでは=演算子はbooleanを返さなければなりません" -#: parser/parse_expr.c:3452 parser/parse_expr.c:3470 +#: parser/parse_expr.c:3448 parser/parse_expr.c:3466 #, c-format msgid "operator precedence change: %s is now lower precedence than %s" msgstr "演算子の優先順位の変更: %sは今では%sより低い優先順位です" -#: parser/parse_func.c:195 +#: parser/parse_func.c:191 #, c-format msgid "argument name \"%s\" used more than once" msgstr "引数名\"%s\"が複数回指定されました" -#: parser/parse_func.c:206 +#: parser/parse_func.c:202 #, c-format msgid "positional argument cannot follow named argument" msgstr "位置パラメーターの次には名前付きの引数を指定できません。" -#: parser/parse_func.c:288 parser/parse_func.c:2258 +#: parser/parse_func.c:284 parser/parse_func.c:2243 #, c-format msgid "%s is not a procedure" msgstr "%sはプロシージャではありません" -#: parser/parse_func.c:292 +#: parser/parse_func.c:288 #, c-format msgid "To call a function, use SELECT." msgstr "関数を呼び出すには SELECT を使用してください。" -#: parser/parse_func.c:298 +#: parser/parse_func.c:294 #, c-format msgid "%s is a procedure" msgstr "%sはプロシージャです" -#: parser/parse_func.c:302 +#: parser/parse_func.c:298 #, c-format msgid "To call a procedure, use CALL." msgstr "関数を呼び出すには CALL を使用してください。" -#: parser/parse_func.c:316 +#: parser/parse_func.c:312 #, c-format msgid "%s(*) specified, but %s is not an aggregate function" msgstr "%s(*)が指定されましたが%sは集約関数ではありません" -#: parser/parse_func.c:323 +#: parser/parse_func.c:319 #, c-format msgid "DISTINCT specified, but %s is not an aggregate function" msgstr "DISTINCTが指定されましたが%sは集約関数ではありません" -#: parser/parse_func.c:329 +#: parser/parse_func.c:325 #, c-format msgid "WITHIN GROUP specified, but %s is not an aggregate function" msgstr "WITHIN GROUPが指定されましたが%sは集約関数ではありません" -#: parser/parse_func.c:335 +#: parser/parse_func.c:331 #, c-format msgid "ORDER BY specified, but %s is not an aggregate function" msgstr "ORDER BY が指定されましたが、%sは集約関数ではありません" -#: parser/parse_func.c:341 +#: parser/parse_func.c:337 #, c-format msgid "FILTER specified, but %s is not an aggregate function" msgstr "FILTERが指定されましたが、%sは集約関数ではありません" -#: parser/parse_func.c:347 +#: parser/parse_func.c:343 #, c-format msgid "OVER specified, but %s is not a window function nor an aggregate function" msgstr "OVERが指定されましたが、%sはウィンドウ関数と集約関数のいずれでもありません" -#: parser/parse_func.c:385 +#: parser/parse_func.c:381 #, c-format msgid "WITHIN GROUP is required for ordered-set aggregate %s" msgstr "順序集合集約%sには WITHIN GROUP が必要です" -#: parser/parse_func.c:391 +#: parser/parse_func.c:387 #, c-format msgid "OVER is not supported for ordered-set aggregate %s" msgstr "OVERは順序集合集約%sではサポートされていません" -#: parser/parse_func.c:422 parser/parse_func.c:451 +#: parser/parse_func.c:418 parser/parse_func.c:447 #, c-format msgid "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." msgstr "順序集合集約%1$sはありますが、それは%3$d個ではなく%2$d個の直接引数を必要とします。" -#: parser/parse_func.c:476 +#: parser/parse_func.c:472 #, c-format msgid "To use the hypothetical-set aggregate %s, the number of hypothetical direct arguments (here %d) must match the number of ordering columns (here %d)." msgstr "仮説集合集約%sを使うには、仮説直接引数(今は%d)がソート列の数(今は%d)と一致する必要があります" -#: parser/parse_func.c:490 +#: parser/parse_func.c:486 #, c-format msgid "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." msgstr "順序集合集約%sはありますが、それは少なくとも%d個の直接引数を必要とします。" -#: parser/parse_func.c:509 +#: parser/parse_func.c:505 #, c-format msgid "%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP" msgstr "%sは順序集合集約ではないため、WITHIN GROUP を持つことができません" -#: parser/parse_func.c:522 +#: parser/parse_func.c:518 #, c-format msgid "window function %s requires an OVER clause" msgstr "ウィンドウ関数%sにはOVER句が必要です" -#: parser/parse_func.c:529 +#: parser/parse_func.c:525 #, c-format msgid "window function %s cannot have WITHIN GROUP" msgstr "ウィンドウ関数%sはWITHIN GROUPを持つことができません" -#: parser/parse_func.c:558 +#: parser/parse_func.c:554 #, c-format msgid "procedure %s is not unique" msgstr "プロシージャ %s は一意ではありません" -#: parser/parse_func.c:561 +#: parser/parse_func.c:557 #, c-format msgid "Could not choose a best candidate procedure. You might need to add explicit type casts." msgstr "最善の候補プロシージャを選択できませんでした。明示的な型キャストが必要かもしれません。" -#: parser/parse_func.c:567 +#: parser/parse_func.c:563 #, c-format msgid "function %s is not unique" msgstr "関数 %s は一意ではありません" -#: parser/parse_func.c:570 +#: parser/parse_func.c:566 #, c-format msgid "Could not choose a best candidate function. You might need to add explicit type casts." msgstr "最善の候補関数を選択できませんでした。明示的な型キャストが必要かもしれません" -#: parser/parse_func.c:609 +#: parser/parse_func.c:605 #, c-format msgid "No aggregate function matches the given name and argument types. Perhaps you misplaced ORDER BY; ORDER BY must appear after all regular arguments of the aggregate." msgstr "指定した名前と引数型に合致する集約関数がありません。おそらく ORDER BY の位置に誤りがあります。ORDER BY は集約関数のすべての通常の引数の後になければなりません。" -#: parser/parse_func.c:617 parser/parse_func.c:2301 +#: parser/parse_func.c:613 parser/parse_func.c:2286 #, c-format msgid "procedure %s does not exist" msgstr "プロシージャ %s は存在しません" -#: parser/parse_func.c:620 +#: parser/parse_func.c:616 #, c-format msgid "No procedure matches the given name and argument types. You might need to add explicit type casts." msgstr "指定した名称と引数の型に合う演算子がありません。明示的な型キャストが必要かもしれません。" -#: parser/parse_func.c:629 +#: parser/parse_func.c:625 #, c-format msgid "No function matches the given name and argument types. You might need to add explicit type casts." msgstr "指定した名前と引数型に合致する関数がありません。明示的な型変換が必要かもしれません。" -#: parser/parse_func.c:731 +#: parser/parse_func.c:727 #, c-format msgid "VARIADIC argument must be an array" msgstr "VARIADIC引数は配列でなければなりません" -#: parser/parse_func.c:783 parser/parse_func.c:847 +#: parser/parse_func.c:779 parser/parse_func.c:843 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "%s(*)はパラメータがない集約関数の呼び出しに使用しなければなりません" -#: parser/parse_func.c:790 +#: parser/parse_func.c:786 #, c-format msgid "aggregates cannot return sets" msgstr "集約は集合を返せません" -#: parser/parse_func.c:805 +#: parser/parse_func.c:801 #, c-format msgid "aggregates cannot use named arguments" msgstr "集約では名前付き引数は使えません" -#: parser/parse_func.c:837 +#: parser/parse_func.c:833 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "ウィンドウ関数に対するDISTINCTは実装されていません" -#: parser/parse_func.c:857 +#: parser/parse_func.c:853 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "ウィンドウ関数に対する集約の ORDER BY は実装されていません" -#: parser/parse_func.c:866 +#: parser/parse_func.c:862 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "非集約のウィンドウ関数に対するFILTERは実装されていません" -#: parser/parse_func.c:875 +#: parser/parse_func.c:871 #, c-format msgid "window function calls cannot contain set-returning function calls" msgstr "集約関数の呼び出しに集合返却関数の呼び出しを含むことはできません" -#: parser/parse_func.c:883 +#: parser/parse_func.c:879 #, c-format msgid "window functions cannot return sets" msgstr "ウィンドウ関数は集合を返すことができません" -#: parser/parse_func.c:2139 parser/parse_func.c:2330 +#: parser/parse_func.c:2124 parser/parse_func.c:2315 #, c-format msgid "could not find a function named \"%s\"" msgstr "\"%s\"という名前の関数は見つかりませんでした" -#: parser/parse_func.c:2153 parser/parse_func.c:2348 +#: parser/parse_func.c:2138 parser/parse_func.c:2333 #, c-format msgid "function name \"%s\" is not unique" msgstr "関数名\"%s\"は一意ではありません" -#: parser/parse_func.c:2155 parser/parse_func.c:2350 +#: parser/parse_func.c:2140 parser/parse_func.c:2335 #, c-format msgid "Specify the argument list to select the function unambiguously." msgstr "関数を曖昧さなく選択するには引数リストを指定してください。" -#: parser/parse_func.c:2199 +#: parser/parse_func.c:2184 #, c-format msgid "procedures cannot have more than %d argument" msgid_plural "procedures cannot have more than %d arguments" msgstr[0] "プロシージャは%d個以上の引数を取ることはできません" msgstr[1] "プロシージャは%d個以上の引数を取ることはできません" -#: parser/parse_func.c:2248 +#: parser/parse_func.c:2233 #, c-format msgid "%s is not a function" msgstr "%s は関数ではありません" -#: parser/parse_func.c:2268 +#: parser/parse_func.c:2253 #, c-format msgid "function %s is not an aggregate" msgstr "関数%sは集約ではありません" -#: parser/parse_func.c:2296 +#: parser/parse_func.c:2281 #, c-format msgid "could not find a procedure named \"%s\"" msgstr "\"%s\"という名前のプロシージャは見つかりませんでした" -#: parser/parse_func.c:2310 +#: parser/parse_func.c:2295 #, c-format msgid "could not find an aggregate named \"%s\"" msgstr "\"%s\"という名前の集約は見つかりませんでした" -#: parser/parse_func.c:2315 +#: parser/parse_func.c:2300 #, c-format msgid "aggregate %s(*) does not exist" msgstr "集約%s(*)は存在しません" -#: parser/parse_func.c:2320 +#: parser/parse_func.c:2305 #, c-format msgid "aggregate %s does not exist" msgstr "集約%sは存在しません" -#: parser/parse_func.c:2355 +#: parser/parse_func.c:2340 #, c-format msgid "procedure name \"%s\" is not unique" msgstr "プロシージャ名\"%s\"は一意ではありません" -#: parser/parse_func.c:2357 +#: parser/parse_func.c:2342 #, c-format msgid "Specify the argument list to select the procedure unambiguously." msgstr "プロシージャを曖昧さなく選択するには引数リストを指定してください。" -#: parser/parse_func.c:2362 +#: parser/parse_func.c:2347 #, c-format msgid "aggregate name \"%s\" is not unique" msgstr "集約名\"%s\"は一意ではありません" -#: parser/parse_func.c:2364 +#: parser/parse_func.c:2349 #, c-format msgid "Specify the argument list to select the aggregate unambiguously." msgstr "集約を曖昧さなく選択するには引数リストを指定してください。" -#: parser/parse_func.c:2369 +#: parser/parse_func.c:2354 #, c-format msgid "routine name \"%s\" is not unique" msgstr "ルーチン名\"%s\"は一意ではありません" -#: parser/parse_func.c:2371 +#: parser/parse_func.c:2356 #, c-format msgid "Specify the argument list to select the routine unambiguously." msgstr "ルーチンを曖昧さなく選択するには引数リストを指定してください。" -#: parser/parse_func.c:2426 +#: parser/parse_func.c:2411 msgid "set-returning functions are not allowed in JOIN conditions" msgstr "集合返却関数はJOIN条件では使用できません" -#: parser/parse_func.c:2447 +#: parser/parse_func.c:2432 msgid "set-returning functions are not allowed in policy expressions" msgstr "集合返却関数はポリシ式では使用できません" -#: parser/parse_func.c:2463 +#: parser/parse_func.c:2448 msgid "set-returning functions are not allowed in window definitions" msgstr "ウィンドウ定義では集合返却関数は使用できません" -#: parser/parse_func.c:2501 +#: parser/parse_func.c:2486 msgid "set-returning functions are not allowed in check constraints" msgstr "集合返却関数は検査制約の中では使用できません" -#: parser/parse_func.c:2505 +#: parser/parse_func.c:2490 msgid "set-returning functions are not allowed in DEFAULT expressions" msgstr "集合返却関数はDEFAULT式の中では使用できません" -#: parser/parse_func.c:2508 +#: parser/parse_func.c:2493 msgid "set-returning functions are not allowed in index expressions" msgstr "集合返却関数はインデックス式では使用できません" -#: parser/parse_func.c:2511 +#: parser/parse_func.c:2496 msgid "set-returning functions are not allowed in index predicates" msgstr "集合返却関数はインデックス述語では使用できません" -#: parser/parse_func.c:2514 +#: parser/parse_func.c:2499 msgid "set-returning functions are not allowed in transform expressions" msgstr "集合返却関数は変換式では使用できません" -#: parser/parse_func.c:2517 +#: parser/parse_func.c:2502 msgid "set-returning functions are not allowed in EXECUTE parameters" msgstr "集合返却関数はEXECUTEパラメータでは使用できません" -#: parser/parse_func.c:2520 +#: parser/parse_func.c:2505 msgid "set-returning functions are not allowed in trigger WHEN conditions" msgstr "集合返却関数はトリガのWHEN条件では使用できません" -#: parser/parse_func.c:2523 +#: parser/parse_func.c:2508 msgid "set-returning functions are not allowed in partition bound" msgstr "集合返却関数はパーティション境界では使用できません" -#: parser/parse_func.c:2526 +#: parser/parse_func.c:2511 msgid "set-returning functions are not allowed in partition key expressions" msgstr "集合返却関数はパーティションキー式では使用できません" -#: parser/parse_func.c:2529 +#: parser/parse_func.c:2514 msgid "set-returning functions are not allowed in CALL arguments" msgstr "CALLの引数に集合返却関数は使用できません" -#: parser/parse_func.c:2532 +#: parser/parse_func.c:2517 msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" msgstr "集合返却関数は COPY FROM の WHERE条件では使用できません" -#: parser/parse_func.c:2535 +#: parser/parse_func.c:2520 msgid "set-returning functions are not allowed in column generation expressions" msgstr "集合返却関数はカラム生成式では使用できません" -#: parser/parse_node.c:87 +#: parser/parse_node.c:86 #, c-format msgid "target lists can have at most %d entries" msgstr "ターゲットリストは最大でも%dエントリまでしか持てません" -#: parser/parse_node.c:257 +#: parser/parse_node.c:235 #, c-format msgid "cannot subscript type %s because it is not an array" msgstr "配列ではないため、型%sには添え字をつけられません" -#: parser/parse_node.c:362 parser/parse_node.c:399 +#: parser/parse_node.c:340 parser/parse_node.c:377 #, c-format msgid "array subscript must have type integer" msgstr "配列の添え字は整数型でなければなりません" -#: parser/parse_node.c:430 +#: parser/parse_node.c:408 #, c-format msgid "array assignment requires type %s but expression is of type %s" msgstr "配列の代入では型%sが必要でしたが、式は型%sでした" -#: parser/parse_oper.c:125 parser/parse_oper.c:724 utils/adt/regproc.c:520 -#: utils/adt/regproc.c:704 +#: parser/parse_oper.c:125 parser/parse_oper.c:724 utils/adt/regproc.c:538 utils/adt/regproc.c:722 #, c-format msgid "operator does not exist: %s" msgstr "演算子が存在しません: %s" @@ -16079,200 +15911,197 @@ msgstr "演算子 ANY/ALL (配列) 集合を返してはなりません" msgid "inconsistent types deduced for parameter $%d" msgstr "パラメータ$%dについて推定された型が不整合です" -#: parser/parse_relation.c:179 +#: parser/parse_relation.c:201 #, c-format msgid "table reference \"%s\" is ambiguous" msgstr "テーブル参照\"%s\"は曖昧です" -#: parser/parse_relation.c:223 +#: parser/parse_relation.c:245 #, c-format msgid "table reference %u is ambiguous" msgstr "テーブル参照%uは曖昧です" -#: parser/parse_relation.c:422 +#: parser/parse_relation.c:444 #, c-format msgid "table name \"%s\" specified more than once" msgstr "テーブル名\"%s\"が複数指定されました" -#: parser/parse_relation.c:449 parser/parse_relation.c:3292 +#: parser/parse_relation.c:473 parser/parse_relation.c:3446 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "テーブル\"%s\"用のFROM句に対する不正な参照" -#: parser/parse_relation.c:452 parser/parse_relation.c:3297 +#: parser/parse_relation.c:477 parser/parse_relation.c:3451 #, c-format msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." msgstr "テーブル\"%s\"の項目がありますが、問い合わせのこの部分からは参照できません。\"" -#: parser/parse_relation.c:454 +#: parser/parse_relation.c:479 #, c-format msgid "The combining JOIN type must be INNER or LEFT for a LATERAL reference." msgstr "LATERAL参照では組み合わせる結合のタイプはINNERまたはLEFTでなければなりません" -#: parser/parse_relation.c:730 +#: parser/parse_relation.c:690 #, c-format msgid "system column \"%s\" reference in check constraint is invalid" msgstr "検査制約で参照されるシステム列\"%s\"は不正です" -#: parser/parse_relation.c:741 +#: parser/parse_relation.c:699 #, c-format msgid "cannot use system column \"%s\" in column generation expression" msgstr "カラム生成式ではシステム列\"%s\"は使用できません" -#: parser/parse_relation.c:1100 parser/parse_relation.c:1404 -#: parser/parse_relation.c:1985 +#: parser/parse_relation.c:1170 parser/parse_relation.c:1620 parser/parse_relation.c:2262 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "テーブル\"%s\"では%d列使用できますが、%d列指定されました" -#: parser/parse_relation.c:1187 +#: parser/parse_relation.c:1372 #, c-format msgid "There is a WITH item named \"%s\", but it cannot be referenced from this part of the query." msgstr "\"%s\"というWITH項目はありますが、これは問い合わせのこの部分からは参照できません。" -#: parser/parse_relation.c:1189 +#: parser/parse_relation.c:1374 #, c-format msgid "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." msgstr "WITH RECURSIVE を使うか、もしくは WITH 項目の場所を変えて前方参照をなくしてください" -#: parser/parse_relation.c:1525 +#: parser/parse_relation.c:1747 #, c-format msgid "a column definition list is only allowed for functions returning \"record\"" msgstr "列定義リストは\"record\"を返す関数でのみ使用できます" -#: parser/parse_relation.c:1534 +#: parser/parse_relation.c:1756 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "\"record\"を返す関数では列定義リストが必要です" -#: parser/parse_relation.c:1620 +#: parser/parse_relation.c:1845 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "FROM句の関数\"%s\"の戻り値型%sはサポートされていません" -#: parser/parse_relation.c:1811 +#: parser/parse_relation.c:2054 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "VALUESリスト\"%s\"は%d列使用可能ですが、%d列が指定されました" -#: parser/parse_relation.c:1867 +#: parser/parse_relation.c:2125 #, c-format msgid "joins can have at most %d columns" msgstr "JOIN で指定できるのは、最大 %d 列です" -#: parser/parse_relation.c:1958 +#: parser/parse_relation.c:2235 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "WITH 問い合わせ\"%s\"にRETURNING句がありません" -#: parser/parse_relation.c:2899 parser/parse_relation.c:2937 -#: parser/parse_relation.c:2946 parser/parse_relation.c:3072 -#: parser/parse_relation.c:3082 +#: parser/parse_relation.c:3221 parser/parse_relation.c:3231 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "リレーション\"%2$s\"の列\"%1$d\"は存在しません" -#: parser/parse_relation.c:3295 +#: parser/parse_relation.c:3449 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "テーブル別名\"%s\"を参照しようとしていたようです。" -#: parser/parse_relation.c:3303 +#: parser/parse_relation.c:3457 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "テーブル\"%s\"用のFROM句エントリがありません" -#: parser/parse_relation.c:3355 +#: parser/parse_relation.c:3509 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "列\"%s.%s\"を参照しようとしていたようです。" -#: parser/parse_relation.c:3357 +#: parser/parse_relation.c:3511 #, c-format msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." msgstr "テーブル\"%2$s\"には\"%1$s\"という名前の列がありますが、問い合わせのこの部分からは参照できません。" -#: parser/parse_relation.c:3374 +#: parser/parse_relation.c:3528 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "列\"%s.%s\"または列\"%s.%s\"を参照しようとしていたようです。" -#: parser/parse_target.c:484 parser/parse_target.c:791 +#: parser/parse_target.c:478 parser/parse_target.c:792 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "システム列\"%s\"に代入できません" -#: parser/parse_target.c:512 +#: parser/parse_target.c:506 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "配列要素にDEFAULTを設定できません" -#: parser/parse_target.c:517 +#: parser/parse_target.c:511 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "サブフィールドにDEFAULTを設定できません" -#: parser/parse_target.c:586 +#: parser/parse_target.c:584 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "列\"%s\"は型%sですが、式は型%sでした" -#: parser/parse_target.c:775 +#: parser/parse_target.c:776 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a composite type" msgstr "型%3$sが複合型でありませんので、列\"%2$s\"のフィールド\"%1$s\"に代入できません。" -#: parser/parse_target.c:784 +#: parser/parse_target.c:785 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because there is no such column in data type %s" msgstr "データ型%3$sの列がありませんので、列\"%2$s\"のフィールド\"%1$s\"に代入できません。" -#: parser/parse_target.c:861 +#: parser/parse_target.c:864 #, c-format msgid "array assignment to \"%s\" requires type %s but expression is of type %s" msgstr "\"%s\"への配列代入には型%sが必要ですが、式は型%sでした" -#: parser/parse_target.c:871 +#: parser/parse_target.c:874 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "サブフィールド\"%s\"は型%sですが、式は型%sでした" -#: parser/parse_target.c:1290 +#: parser/parse_target.c:1295 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "テーブル指定のないSELECT *は無効です" -#: parser/parse_type.c:101 +#: parser/parse_type.c:100 #, c-format msgid "improper %%TYPE reference (too few dotted names): %s" msgstr "%%TYPE参照が不適切です(ドット区切りの名前が少なすぎます: %s" -#: parser/parse_type.c:123 +#: parser/parse_type.c:122 #, c-format msgid "improper %%TYPE reference (too many dotted names): %s" msgstr "%%TYPE参照が不適切です(ドット区切りの名前が多すぎます: %s" -#: parser/parse_type.c:158 +#: parser/parse_type.c:157 #, c-format msgid "type reference %s converted to %s" msgstr "型参照%sは%sに変換されました" -#: parser/parse_type.c:279 parser/parse_type.c:858 utils/cache/typcache.c:374 +#: parser/parse_type.c:278 parser/parse_type.c:857 utils/cache/typcache.c:383 utils/cache/typcache.c:437 #, c-format msgid "type \"%s\" is only a shell" msgstr "型\"%s\"は単なるシェルです" -#: parser/parse_type.c:364 +#: parser/parse_type.c:363 #, c-format msgid "type modifier is not allowed for type \"%s\"" msgstr "型\"%s\"では型修正子は許可されません" -#: parser/parse_type.c:406 +#: parser/parse_type.c:405 #, c-format msgid "type modifiers must be simple constants or identifiers" msgstr "型修正子は単純な定数または識別子でなければなりません" -#: parser/parse_type.c:722 parser/parse_type.c:821 +#: parser/parse_type.c:721 parser/parse_type.c:820 #, c-format msgid "invalid type name \"%s\"" msgstr "不正な型名\"%s\"" @@ -16282,404 +16111,440 @@ msgstr "不正な型名\"%s\"" msgid "cannot create partitioned table as inheritance child" msgstr "パーティションテーブルを継承の子テーブルとして作成はできません" -#: parser/parse_utilcmd.c:426 +#: parser/parse_utilcmd.c:427 #, c-format msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" msgstr "%1$sはシリアル列\"%3$s.%4$s\"用に暗黙的なシーケンス\"%2$s\"を作成します。" -#: parser/parse_utilcmd.c:550 +#: parser/parse_utilcmd.c:558 #, c-format msgid "array of serial is not implemented" msgstr "連番(SERIAL)の配列は実装されていません" -#: parser/parse_utilcmd.c:627 parser/parse_utilcmd.c:639 +#: parser/parse_utilcmd.c:636 parser/parse_utilcmd.c:648 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "テーブル\"%2$s\"の列\"%1$s\"でNULL宣言とNOT NULL宣言が競合しています" -#: parser/parse_utilcmd.c:651 +#: parser/parse_utilcmd.c:660 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "テーブル\"%2$s\"の列\"%1$s\"で複数のデフォルト値の指定があります" -#: parser/parse_utilcmd.c:668 +#: parser/parse_utilcmd.c:677 #, c-format msgid "identity columns are not supported on typed tables" msgstr "型付けされたテーブルでは識別列はサポートされていません" -#: parser/parse_utilcmd.c:672 +#: parser/parse_utilcmd.c:681 #, c-format msgid "identity columns are not supported on partitions" msgstr "パーティションでは識別列はサポートされていません" -#: parser/parse_utilcmd.c:681 +#: parser/parse_utilcmd.c:690 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "テーブル\"%2$s\"の列\"%1$s\"に複数の識別指定があります" -#: parser/parse_utilcmd.c:700 +#: parser/parse_utilcmd.c:710 #, c-format msgid "generated columns are not supported on typed tables" msgstr "型付けされたテーブルでは生成カラムはサポートされていません" -#: parser/parse_utilcmd.c:704 +#: parser/parse_utilcmd.c:714 #, c-format msgid "generated columns are not supported on partitions" msgstr "パーティションでは生成カラムはサポートされていません" -#: parser/parse_utilcmd.c:709 +#: parser/parse_utilcmd.c:719 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "テーブル\"%2$s\"の列\"%1$s\"に複数のGENERATED句の指定があります" -#: parser/parse_utilcmd.c:727 parser/parse_utilcmd.c:842 +#: parser/parse_utilcmd.c:737 parser/parse_utilcmd.c:852 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "外部テーブルでは主キー制約はサポートされていません" -#: parser/parse_utilcmd.c:736 parser/parse_utilcmd.c:852 +#: parser/parse_utilcmd.c:746 parser/parse_utilcmd.c:862 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "外部テーブルではユニーク制約はサポートされていません" -#: parser/parse_utilcmd.c:781 +#: parser/parse_utilcmd.c:791 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "デフォルト値と識別指定の両方がテーブル\"%2$s\"の列\"%1$s\"に指定されています" -#: parser/parse_utilcmd.c:789 +#: parser/parse_utilcmd.c:799 #, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" msgstr "テーブル\"%2$s\"の列\"%1$s\"にデフォルト値と生成式の両方が指定されています" -#: parser/parse_utilcmd.c:797 +#: parser/parse_utilcmd.c:807 #, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" msgstr "テーブル\"%2$s\"の列\"%1$s\"に識別指定と生成式の両方が指定されています" -#: parser/parse_utilcmd.c:862 +#: parser/parse_utilcmd.c:872 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "外部テーブルでは除外制約はサポートされていません" -#: parser/parse_utilcmd.c:868 +#: parser/parse_utilcmd.c:878 #, c-format msgid "exclusion constraints are not supported on partitioned tables" msgstr "パーティションテーブルでは除外制約はサポートされていません" -#: parser/parse_utilcmd.c:932 +#: parser/parse_utilcmd.c:943 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "外部テーブルの作成においてLIKEはサポートされていません" -#: parser/parse_utilcmd.c:1066 +#: parser/parse_utilcmd.c:1095 #, c-format msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." msgstr "制約\"%s\"はテーブル\"%s\"への行全体参照を含みます。" -#: parser/parse_utilcmd.c:1563 parser/parse_utilcmd.c:1670 +#: parser/parse_utilcmd.c:1598 parser/parse_utilcmd.c:1707 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "インデックス\"%s\"には行全体テーブル参照が含まれます" -#: parser/parse_utilcmd.c:2036 +#: parser/parse_utilcmd.c:2075 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "CREATE TABLE では既存のインデックスを使えません" -#: parser/parse_utilcmd.c:2056 +#: parser/parse_utilcmd.c:2095 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "インデックス\"%s\"はすでに1つの制約に割り当てられれいます" -#: parser/parse_utilcmd.c:2071 +#: parser/parse_utilcmd.c:2110 #, c-format msgid "index \"%s\" is not valid" msgstr "インデックス\"%s\"は有効ではありません" -#: parser/parse_utilcmd.c:2077 +#: parser/parse_utilcmd.c:2116 #, c-format msgid "\"%s\" is not a unique index" msgstr "\"%s\"はユニークインデックスではありません" -#: parser/parse_utilcmd.c:2078 parser/parse_utilcmd.c:2085 -#: parser/parse_utilcmd.c:2092 parser/parse_utilcmd.c:2163 +#: parser/parse_utilcmd.c:2117 parser/parse_utilcmd.c:2124 parser/parse_utilcmd.c:2131 parser/parse_utilcmd.c:2208 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "このようなインデックスを使ってプライマリキーや一意性制約を作成することはできません" -#: parser/parse_utilcmd.c:2084 +#: parser/parse_utilcmd.c:2123 #, c-format msgid "index \"%s\" contains expressions" msgstr "インデックス\"%s\"は式を含んでいます" -#: parser/parse_utilcmd.c:2091 +#: parser/parse_utilcmd.c:2130 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\"は部分インデックスです" -#: parser/parse_utilcmd.c:2103 +#: parser/parse_utilcmd.c:2142 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\"は遅延可能インデックスです" -#: parser/parse_utilcmd.c:2104 +#: parser/parse_utilcmd.c:2143 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "遅延可能インデックスを使った遅延不可制約は作れません。" -#: parser/parse_utilcmd.c:2162 +#: parser/parse_utilcmd.c:2207 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "インデックス\"%s\"の列番号%dにはデフォルトのソート動作がありません" -#: parser/parse_utilcmd.c:2319 +#: parser/parse_utilcmd.c:2364 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "列\"%s\"がプライマリキー制約内に2回出現します" -#: parser/parse_utilcmd.c:2325 +#: parser/parse_utilcmd.c:2370 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "列\"%s\"が一意性制約内に2回出現します" -#: parser/parse_utilcmd.c:2676 +#: parser/parse_utilcmd.c:2723 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "インデックス式と述語はインデックス付けされるテーブルのみを参照できます" -#: parser/parse_utilcmd.c:2722 +#: parser/parse_utilcmd.c:2769 #, c-format msgid "rules on materialized views are not supported" msgstr "実体化ビューに対するルールはサポートされません" -#: parser/parse_utilcmd.c:2785 +#: parser/parse_utilcmd.c:2832 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "ルールのWHERE条件に他のリレーションへの参照を持たせられません" -#: parser/parse_utilcmd.c:2859 +#: parser/parse_utilcmd.c:2906 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "ルールのWHERE条件はSELECT、INSERT、UPDATE、DELETE動作のみを持つことができます" -#: parser/parse_utilcmd.c:2877 parser/parse_utilcmd.c:2976 -#: rewrite/rewriteHandler.c:501 rewrite/rewriteManip.c:1015 +#: parser/parse_utilcmd.c:2924 parser/parse_utilcmd.c:3025 rewrite/rewriteHandler.c:502 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "条件付きのUNION/INTERSECT/EXCEPT文は実装されていません" -#: parser/parse_utilcmd.c:2895 +#: parser/parse_utilcmd.c:2942 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "ON SELECTルールではOLDを使用できません" -#: parser/parse_utilcmd.c:2899 +#: parser/parse_utilcmd.c:2946 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "ON SELECTルールではNEWを使用できません" -#: parser/parse_utilcmd.c:2908 +#: parser/parse_utilcmd.c:2955 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "ON INSERTルールではOLDを使用できません" -#: parser/parse_utilcmd.c:2914 +#: parser/parse_utilcmd.c:2961 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "ON DELETEルールではNEWを使用できません" -#: parser/parse_utilcmd.c:2942 +#: parser/parse_utilcmd.c:2989 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "WITH 問い合わせ内では OLD は参照できません" -#: parser/parse_utilcmd.c:2949 +#: parser/parse_utilcmd.c:2996 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "WITH 問い合わせ内では NEW は参照できません" -#: parser/parse_utilcmd.c:3407 +#: parser/parse_utilcmd.c:3455 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "DEFERRABLE句の場所が間違っています" -#: parser/parse_utilcmd.c:3412 parser/parse_utilcmd.c:3427 +#: parser/parse_utilcmd.c:3460 parser/parse_utilcmd.c:3475 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "複数のDEFERRABLE/NOT DEFERRABLE句を使用できません" -#: parser/parse_utilcmd.c:3422 +#: parser/parse_utilcmd.c:3470 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "NOT DEFERRABLE句の場所が間違っています" -#: parser/parse_utilcmd.c:3443 +#: parser/parse_utilcmd.c:3491 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "INITIALLY DEFERRED句の場所が間違っています<" -#: parser/parse_utilcmd.c:3448 parser/parse_utilcmd.c:3474 +#: parser/parse_utilcmd.c:3496 parser/parse_utilcmd.c:3522 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "複数のINITIALLY IMMEDIATE/DEFERRED句を使用できません" -#: parser/parse_utilcmd.c:3469 +#: parser/parse_utilcmd.c:3517 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "INITIALLY IMMEDIATE句の場所が間違っています<" -#: parser/parse_utilcmd.c:3660 +#: parser/parse_utilcmd.c:3708 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATEで指定したスキーマ(%s)が作成先のスキーマ(%s)と異なります" -#: parser/parse_utilcmd.c:3694 +#: parser/parse_utilcmd.c:3743 +#, c-format +msgid "\"%s\" is not a partitioned table" +msgstr "\"%s\"はパーティションテーブルではありません" + +#: parser/parse_utilcmd.c:3750 #, c-format msgid "table \"%s\" is not partitioned" msgstr "テーブル\"%s\"はパーティションされていません" -#: parser/parse_utilcmd.c:3701 +#: parser/parse_utilcmd.c:3757 #, c-format msgid "index \"%s\" is not partitioned" msgstr "インデックス\"%s\"はパーティションされていません" -#: parser/parse_utilcmd.c:3735 +#: parser/parse_utilcmd.c:3797 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "ハッシュパーティションテーブルはデフォルトパーティションを持つことができません" -#: parser/parse_utilcmd.c:3752 +#: parser/parse_utilcmd.c:3814 #, c-format msgid "invalid bound specification for a hash partition" msgstr "ハッシュパーティションに対する不正な境界指定" -#: parser/parse_utilcmd.c:3758 partitioning/partbounds.c:2816 +#: parser/parse_utilcmd.c:3820 partitioning/partbounds.c:4693 #, c-format msgid "modulus for hash partition must be a positive integer" msgstr "ハッシュパーティションの法は正の整数にする必要があります" -#: parser/parse_utilcmd.c:3765 partitioning/partbounds.c:2824 +#: parser/parse_utilcmd.c:3827 partitioning/partbounds.c:4701 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "ハッシュパーティションの剰余は法よりも小さくなければなりません" -#: parser/parse_utilcmd.c:3778 +#: parser/parse_utilcmd.c:3840 #, c-format msgid "invalid bound specification for a list partition" msgstr "リストパーティションに対する不正な境界指定" -#: parser/parse_utilcmd.c:3831 +#: parser/parse_utilcmd.c:3893 #, c-format msgid "invalid bound specification for a range partition" msgstr "範囲パーティションに対する不正な境界指定" -#: parser/parse_utilcmd.c:3837 +#: parser/parse_utilcmd.c:3899 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROMは全てのパーティション列ごとに一つの値を指定しなければなりません" -#: parser/parse_utilcmd.c:3841 +#: parser/parse_utilcmd.c:3903 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TOは全てのパーティション列ごとに一つの値を指定しなければなりません" -#: parser/parse_utilcmd.c:3955 +#: parser/parse_utilcmd.c:4017 #, c-format msgid "cannot specify NULL in range bound" msgstr "範囲境界でNULLは使用できません" -#: parser/parse_utilcmd.c:4004 +#: parser/parse_utilcmd.c:4066 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "MAXVALUEに続く境界値はMAXVALUEでなければなりません" -#: parser/parse_utilcmd.c:4011 +#: parser/parse_utilcmd.c:4073 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "MINVALUEに続く境界値はMINVALUEでなければなりません" -#: parser/parse_utilcmd.c:4046 +#: parser/parse_utilcmd.c:4115 +#, c-format +msgid "could not determine which collation to use for partition bound expression" +msgstr "パーティション境界式で使用する照合順序を特定できませんでした" + +#: parser/parse_utilcmd.c:4132 #, c-format msgid "collation of partition bound value for column \"%s\" does not match partition key collation \"%s\"" msgstr "列\"%s\"に対するパーティション境界値の照合順序がパーティションキーの照合順序\"%s\"と合致しません" -#: parser/parse_utilcmd.c:4063 +#: parser/parse_utilcmd.c:4149 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "指定した値は列\"%s\"の%s型に変換できません" -#: parser/scansup.c:204 +#: parser/parser.c:228 +msgid "UESCAPE must be followed by a simple string literal" +msgstr "UESCAPE の後には単純な文字列リテラルが続かなければなりません" + +#: parser/parser.c:233 +msgid "invalid Unicode escape character" +msgstr "不正なUnicodeエスケープ文字" + +#: parser/parser.c:302 scan.l:1330 +#, c-format +msgid "invalid Unicode escape value" +msgstr "不正なUnicodeエスケープシーケンスの値" + +#: parser/parser.c:449 scan.l:677 +#, c-format +msgid "invalid Unicode escape" +msgstr "不正なUnicodeエスケープ" + +#: parser/parser.c:450 +#, c-format +msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." +msgstr "Unicodeエスケープは\\XXXXまたは\\+XXXXXXでなければなりません。" + +#: parser/parser.c:478 scan.l:638 scan.l:654 scan.l:670 +#, c-format +msgid "invalid Unicode surrogate pair" +msgstr "不正なUnicodeサロゲートペア" + +#: parser/scansup.c:194 #, c-format -msgid "identifier \"%s\" will be truncated to \"%s\"" -msgstr "識別子\"%s\"は\"%s\"に切り詰められます" +msgid "identifier \"%s\" will be truncated to \"%.*s\"" +msgstr "識別子\"%s\"は\"%.*s\"に切り詰められます" -#: partitioning/partbounds.c:958 +#: partitioning/partbounds.c:2833 #, c-format msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "パーティション\"%s\"は既存のデフォルトパーティション\"%s\"と重複しています" -#: partitioning/partbounds.c:1017 +#: partitioning/partbounds.c:2892 #, c-format msgid "every hash partition modulus must be a factor of the next larger modulus" msgstr "ハッシュパーティションの法(除数)は次に大きな法の因数でなければなりません" -#: partitioning/partbounds.c:1113 +#: partitioning/partbounds.c:2988 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "リレーション\"%s\"に対して空の範囲境界が指定されました" -#: partitioning/partbounds.c:1115 +#: partitioning/partbounds.c:2990 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "指定された下限%sは上限%sより大きいか同じです。" -#: partitioning/partbounds.c:1212 +#: partitioning/partbounds.c:3087 #, c-format msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "パーティション\"%s\"はパーティション\"%s\"と重複があります" -#: partitioning/partbounds.c:1329 +#: partitioning/partbounds.c:3204 #, c-format msgid "skipped scanning foreign table \"%s\" which is a partition of default partition \"%s\"" msgstr "デフォルトパーティション\"%2$s\"の子テーブルであるためテーブル\"%1$s\"のスキャンをスキップします" -#: partitioning/partbounds.c:1362 -#, c-format -msgid "updated partition constraint for default partition \"%s\" would be violated by some row" -msgstr "デフォルトパーティション\"%s\"の一部の行が更新後のパーティション制約に違反しています" - -#: partitioning/partbounds.c:2820 +#: partitioning/partbounds.c:4697 #, c-format msgid "remainder for hash partition must be a non-negative integer" msgstr "ハッシュパーティションの剰余は非負の整数でなければなりません" -#: partitioning/partbounds.c:2847 +#: partitioning/partbounds.c:4724 #, c-format msgid "\"%s\" is not a hash partitioned table" msgstr "\"%s\"はハッシュパーティションテーブルではありません" -#: partitioning/partbounds.c:2858 partitioning/partbounds.c:2975 +#: partitioning/partbounds.c:4735 partitioning/partbounds.c:4852 #, c-format msgid "number of partitioning columns (%d) does not match number of partition keys provided (%d)" msgstr "パーティション列の数(%d)と与えられたキー値の数(%d)が一致していません" -#: partitioning/partbounds.c:2880 partitioning/partbounds.c:2912 +#: partitioning/partbounds.c:4757 partitioning/partbounds.c:4789 #, c-format msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" msgstr "パーティションキーの列 %d は \"%s\"型です、しかし与えられた値は \"%s\"型です" -#: port/pg_shmem.c:216 port/sysv_shmem.c:216 +#: port/pg_sema.c:209 port/pg_shmem.c:668 port/posix_sema.c:209 port/sysv_sema.c:327 port/sysv_shmem.c:668 +#, c-format +msgid "could not stat data directory \"%s\": %m" +msgstr "データディレクトリ\"%s\"のstatに失敗しました: %m" + +#: port/pg_shmem.c:217 port/sysv_shmem.c:217 #, c-format msgid "could not create shared memory segment: %m" msgstr "共有メモリセグメントを作成できませんでした: %m" -#: port/pg_shmem.c:217 port/sysv_shmem.c:217 +#: port/pg_shmem.c:218 port/sysv_shmem.c:218 #, c-format msgid "Failed system call was shmget(key=%lu, size=%zu, 0%o)." msgstr "失敗したシステムコールはshmget(key=%lu, size=%zu, 0%o)です。" -#: port/pg_shmem.c:221 port/sysv_shmem.c:221 +#: port/pg_shmem.c:222 port/sysv_shmem.c:222 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter, or possibly that it is less than your kernel's SHMMIN parameter.\n" @@ -16688,7 +16553,7 @@ msgstr "" "通常このエラーは、PostgreSQLが要求する共有メモリセグメントがカーネルのSHMMAXパラメータを超えた場合、または可能性としてはカーネルのSHMMINパラメータより小さい場合に発生します。\n" "共有メモリの設定に関する詳細情報は、PostgreSQL のドキュメントに記載されています。" -#: port/pg_shmem.c:228 port/sysv_shmem.c:228 +#: port/pg_shmem.c:229 port/sysv_shmem.c:229 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMALL parameter. You might need to reconfigure the kernel with larger SHMALL.\n" @@ -16697,7 +16562,7 @@ msgstr "" "通常このエラーは、PostgreSQLが要求する共有メモリセグメントがカーネルのSHMALLパラメータを超えた場合に発生します。より大きなSHMALLでカーネルを再設定する必要があるかもしれません。\n" "これ以上の共有メモリの設定に関する情報は、PostgreSQL のドキュメントに記載されています。" -#: port/pg_shmem.c:234 port/sysv_shmem.c:234 +#: port/pg_shmem.c:235 port/sysv_shmem.c:235 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs either if all available shared memory IDs have been taken, in which case you need to raise the SHMMNI parameter in your kernel, or because the system's overall limit for shared memory has been reached.\n" @@ -16706,47 +16571,42 @@ msgstr "" "このエラーはディスクの容量不足を意味していません。このエラーの要因の一つは共有メモリの識別子の枯渇です。この場合はカーネルのSHMMNIパラメータを増やす必要がありますが、そうでなければ要因はシステム全体の共有メモリの制限へ到達となります。\n" "これ以上の共有メモリの設定に関する情報は、PostgreSQLのドキュメントに記載されています。" -#: port/pg_shmem.c:577 port/sysv_shmem.c:577 +#: port/pg_shmem.c:606 port/sysv_shmem.c:606 #, c-format msgid "could not map anonymous shared memory: %m" msgstr "匿名共有メモリをマップできませんでした: %m" -#: port/pg_shmem.c:579 port/sysv_shmem.c:579 +#: port/pg_shmem.c:608 port/sysv_shmem.c:608 #, c-format msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently %zu bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections." msgstr "通常このエラーは、PostgreSQL が要求する共有メモリのサイズが利用可能なメモリやスワップ容量、ないしはヒュージページを超えた場合に発生します。要求サイズ(現在 %zu バイト)を減らすために、shared_buffers または max_connections を減らすことでPostgreSQLの共有メモリの使用量を減らしてください。" -#: port/pg_shmem.c:639 port/sysv_shmem.c:639 +#: port/pg_shmem.c:676 port/sysv_shmem.c:676 #, c-format msgid "huge pages not supported on this platform" msgstr "このプラットフォームではヒュージページをサポートしていません" -#: port/pg_shmem.c:700 port/sysv_shmem.c:700 utils/init/miscinit.c:1069 +#: port/pg_shmem.c:737 port/sysv_shmem.c:737 utils/init/miscinit.c:1139 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "既存の共有メモリブロック(キー%lu、ID %lu)がまだ使用中です" -#: port/pg_shmem.c:703 port/sysv_shmem.c:703 utils/init/miscinit.c:1071 +#: port/pg_shmem.c:740 port/sysv_shmem.c:740 utils/init/miscinit.c:1141 #, c-format msgid "Terminate any old server processes associated with data directory \"%s\"." msgstr "データディレクトリ \"%s\". に対応する古いサーバプロセスを終了させてください。" -#: port/pg_shmem.c:754 port/sysv_shmem.c:754 -#, c-format -msgid "could not stat data directory \"%s\": %m" -msgstr "データディレクトリ\"%s\"のstatに失敗しました: %m" - -#: port/sysv_sema.c:123 +#: port/sysv_sema.c:124 #, c-format msgid "could not create semaphores: %m" msgstr "セマフォを作成できませんでした: %m" -#: port/sysv_sema.c:124 +#: port/sysv_sema.c:125 #, c-format msgid "Failed system call was semget(%lu, %d, 0%o)." msgstr "失敗したシステムコールはsemget(%lu, %d, 0%o)です。" -#: port/sysv_sema.c:128 +#: port/sysv_sema.c:129 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs when either the system limit for the maximum number of semaphore sets (SEMMNI), or the system wide maximum number of semaphores (SEMMNS), would be exceeded. You need to raise the respective kernel parameter. Alternatively, reduce PostgreSQL's consumption of semaphores by reducing its max_connections parameter.\n" @@ -16755,7 +16615,7 @@ msgstr "" "このエラーは、ディスクが足りなくなったことを意味していません。この原因はセマフォセット数が上限(SEMMNI)に達したか、またはシステム全体でのセマフォ数を上限まで(SEMMNS)を使いきった場合です。対処としては、対応するカーネルのパラメータを増やす必要があります。もしくは PostgreSQLの max_connections を減らすことで、消費するセマフォの数を減らしてください。\n" "共有メモリの設定に関する詳細情報は、PostgreSQL のドキュメントに記載されています。" -#: port/sysv_sema.c:158 +#: port/sysv_sema.c:159 #, c-format msgid "You possibly need to raise your kernel's SEMVMX value to be at least %d. Look into the PostgreSQL documentation for details." msgstr "" @@ -16792,44 +16652,37 @@ msgstr "クラッシュダンプの\"%s\"への書き込みに失敗しました msgid "could not create signal listener pipe for PID %d: error code %lu" msgstr "pid %dに対するシグナル監視パイプを作成できませんでした: エラーコード %lu" -#: port/win32/signal.c:277 port/win32/signal.c:309 +#: port/win32/signal.c:251 #, c-format msgid "could not create signal listener pipe: error code %lu; retrying\n" msgstr "シグナル監視パイプを作成できませんでした: エラーコード %lu: 再実行します\n" -#: port/win32/signal.c:320 -#, c-format -msgid "could not create signal dispatch thread: error code %lu\n" -msgstr "シグナルディスパッチ用スレッドを作成できませんでした: エラーコード %lu\n" - #: port/win32_sema.c:104 #, c-format msgid "could not create semaphore: error code %lu" msgstr "セマフォを作成できませんでした: エラーコード %lu" -#: port/win32_sema.c:181 +#: port/win32_sema.c:180 #, c-format msgid "could not lock semaphore: error code %lu" msgstr "セマフォをロックできませんでした: エラーコード %lu" -#: port/win32_sema.c:201 +#: port/win32_sema.c:200 #, c-format msgid "could not unlock semaphore: error code %lu" msgstr "セマフォのロックを解除できませんでした: エラーコード %lu" -#: port/win32_sema.c:231 +#: port/win32_sema.c:230 #, c-format msgid "could not try-lock semaphore: error code %lu" msgstr "セマフォのロック試行に失敗しました: エラーコード %lu" -#: port/win32_shmem.c:144 port/win32_shmem.c:152 port/win32_shmem.c:164 -#: port/win32_shmem.c:179 +#: port/win32_shmem.c:144 port/win32_shmem.c:152 port/win32_shmem.c:164 port/win32_shmem.c:179 #, c-format msgid "could not enable Lock Pages in Memory user right: error code %lu" msgstr "Lock Pages in Memoryユーザ権限を有効にできませんでした: エラーコード %lu" -#: port/win32_shmem.c:145 port/win32_shmem.c:153 port/win32_shmem.c:165 -#: port/win32_shmem.c:180 +#: port/win32_shmem.c:145 port/win32_shmem.c:153 port/win32_shmem.c:165 port/win32_shmem.c:180 #, c-format msgid "Failed system call was %s." msgstr "失敗したシステムコールは %s です。" @@ -16884,458 +16737,452 @@ msgstr "失敗したシステムコールはMapViewOfFileExです。" msgid "Failed system call was MapViewOfFileEx." msgstr "失敗したシステムコールはMapViewOfFileExです。" -#: postmaster/autovacuum.c:405 +#: postmaster/autovacuum.c:406 #, c-format msgid "could not fork autovacuum launcher process: %m" msgstr "自動VACUUM起動プロセスを fork できませんでした: %m" -#: postmaster/autovacuum.c:441 +#: postmaster/autovacuum.c:442 #, c-format msgid "autovacuum launcher started" msgstr "自動VACUUM起動プロセス" -#: postmaster/autovacuum.c:819 +#: postmaster/autovacuum.c:839 #, c-format msgid "autovacuum launcher shutting down" msgstr "自動VACUUM起動プロセスを停止しています" -#: postmaster/autovacuum.c:1481 +#: postmaster/autovacuum.c:1477 #, c-format msgid "could not fork autovacuum worker process: %m" msgstr "自動VACUUMワーカープロセスをforkできませんでした: %m" -#: postmaster/autovacuum.c:1690 +#: postmaster/autovacuum.c:1686 #, c-format msgid "autovacuum: processing database \"%s\"" msgstr "自動VACUUM: データベース\"%s\"の処理中です" -#: postmaster/autovacuum.c:2259 +#: postmaster/autovacuum.c:2260 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "自動VACUUM: 孤立した一時テーブル\"%s.%s.%s\"を削除します" -#: postmaster/autovacuum.c:2488 +#: postmaster/autovacuum.c:2489 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "テーブル\"%s.%s.%s\"に対する自動VACUUM" -#: postmaster/autovacuum.c:2491 +#: postmaster/autovacuum.c:2492 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "テーブル\"%s.%s.%s\"に対する自動ANALYZE" -#: postmaster/autovacuum.c:2684 +#: postmaster/autovacuum.c:2685 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "リレーション\"%s.%s.%s\"の作業エントリを処理しています" -#: postmaster/autovacuum.c:3265 +#: postmaster/autovacuum.c:3289 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "誤設定のため自動VACUUMが起動できません" -#: postmaster/autovacuum.c:3266 +#: postmaster/autovacuum.c:3290 #, c-format msgid "Enable the \"track_counts\" option." msgstr "\"track_counts\"オプションを有効にしてください。" -#: postmaster/bgworker.c:395 postmaster/bgworker.c:855 +#: postmaster/bgworker.c:394 postmaster/bgworker.c:834 #, c-format msgid "registering background worker \"%s\"" msgstr "バックグラウンドワーカ\"%s\"を登録しています" -#: postmaster/bgworker.c:427 +#: postmaster/bgworker.c:426 #, c-format msgid "unregistering background worker \"%s\"" msgstr "バックグラウンドワーカ\"%s\"の登録を解除しています" -#: postmaster/bgworker.c:592 +#: postmaster/bgworker.c:591 #, c-format msgid "background worker \"%s\": must attach to shared memory in order to request a database connection" msgstr "バックグラウンドワーカ\"\"%s: データベース接続を要求するためには共有メモリにアタッチしなければなりません" -#: postmaster/bgworker.c:601 +#: postmaster/bgworker.c:600 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "バックグラウンドワーカ\"%s\": postmaster起動中に起動している場合にはデータベースアクセスを要求することはできません" -#: postmaster/bgworker.c:615 +#: postmaster/bgworker.c:614 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "バックグラウンドワーカ\"%s\": 不正な再起動間隔" -#: postmaster/bgworker.c:630 +#: postmaster/bgworker.c:629 #, c-format msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "バックグラウンドワーカ\"%s\": パラレルワーカは再起動するように設定してはいけません" -#: postmaster/bgworker.c:674 +#: postmaster/bgworker.c:653 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "管理者コマンドによりバックグラウンドワーカ\"%s\"を終了しています" -#: postmaster/bgworker.c:863 +#: postmaster/bgworker.c:842 #, c-format msgid "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "バックグラウンドワーカ\"%s\": shared_preload_librariesに登録しなければなりません" -#: postmaster/bgworker.c:875 +#: postmaster/bgworker.c:854 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "バックグラウンドワーカ\"%s\": 動的バックグラウンドワーカのみが通知を要求できます" -#: postmaster/bgworker.c:890 +#: postmaster/bgworker.c:869 #, c-format msgid "too many background workers" msgstr "バックグラウンドワーカが多すぎます" -#: postmaster/bgworker.c:891 +#: postmaster/bgworker.c:870 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." msgstr[0] "現在の設定では最大%dのバックグラウンドワーカを登録することができます。" msgstr[1] "現在の設定では最大%dのバックグラウンドワーカを登録することができます。" -#: postmaster/bgworker.c:895 +#: postmaster/bgworker.c:874 #, c-format msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "設定パラメータ\"max_worker_processes\"を増やすことを検討してください" -#: postmaster/checkpointer.c:458 +#: postmaster/checkpointer.c:418 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" msgstr[0] "チェックポイントの発生周期が短すぎます(%d秒間隔)" msgstr[1] "チェックポイントの発生周期が短すぎます(%d秒間隔)" -#: postmaster/checkpointer.c:462 +#: postmaster/checkpointer.c:422 #, c-format msgid "Consider increasing the configuration parameter \"max_wal_size\"." msgstr "設定パラメータ\"max_wal_size\"を増やすことを検討してください" -#: postmaster/checkpointer.c:1081 +#: postmaster/checkpointer.c:1032 #, c-format msgid "checkpoint request failed" msgstr "チェックポイント要求が失敗しました" -#: postmaster/checkpointer.c:1082 +#: postmaster/checkpointer.c:1033 #, c-format msgid "Consult recent messages in the server log for details." msgstr "詳細はサーバログの最近のメッセージを調査してください" -#: postmaster/checkpointer.c:1266 +#: postmaster/checkpointer.c:1217 #, c-format msgid "compacted fsync request queue from %d entries to %d entries" msgstr "ぎっしり詰まった fsync リクエストのキューのうち %d から %d までのエントリ" -#: postmaster/pgarch.c:159 +#: postmaster/pgarch.c:156 #, c-format msgid "could not fork archiver: %m" msgstr "アーカイバのforkに失敗しました: %m" -#: postmaster/pgarch.c:470 +#: postmaster/pgarch.c:434 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "archive_modeは有効ですが、archive_commandが設定されていません" -#: postmaster/pgarch.c:492 +#: postmaster/pgarch.c:456 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "孤立したアーカイブステータスファイル\"%s\"を削除しました" -#: postmaster/pgarch.c:502 +#: postmaster/pgarch.c:466 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" msgstr "孤立したアーカイブステータスファイル\"%s\"の削除の失敗回数が上限を超えました、あとでリトライします" -#: postmaster/pgarch.c:538 +#: postmaster/pgarch.c:502 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "先行書き込みログファイル\"%s\"のアーカイブ処理の失敗回数が超過しました、後で再度試します" -#: postmaster/pgarch.c:639 +#: postmaster/pgarch.c:603 #, c-format msgid "archive command failed with exit code %d" msgstr "アーカイブコマンドがリターンコード %dで失敗しました" -#: postmaster/pgarch.c:641 postmaster/pgarch.c:651 postmaster/pgarch.c:657 -#: postmaster/pgarch.c:666 +#: postmaster/pgarch.c:605 postmaster/pgarch.c:615 postmaster/pgarch.c:621 postmaster/pgarch.c:630 #, c-format msgid "The failed archive command was: %s" msgstr "失敗したアーカイブコマンドは次のとおりです: %s" -#: postmaster/pgarch.c:648 +#: postmaster/pgarch.c:612 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "アーカイブコマンドが例外0x%Xで終了しました" -#: postmaster/pgarch.c:650 postmaster/postmaster.c:3675 +#: postmaster/pgarch.c:614 postmaster/postmaster.c:3744 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "16進値の説明についてはC インクルードファイル\"ntstatus.h\"を参照してください。" -#: postmaster/pgarch.c:655 +#: postmaster/pgarch.c:619 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "アーカイブコマンドはシグナル%dにより終了しました: %s" -#: postmaster/pgarch.c:664 +#: postmaster/pgarch.c:628 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "アーカイブコマンドは不明のステータス%dで終了しました" -#: postmaster/pgstat.c:396 +#: postmaster/pgstat.c:419 #, c-format msgid "could not resolve \"localhost\": %s" msgstr "\"localhost\"を解決できませんでした: %s" -#: postmaster/pgstat.c:419 +#: postmaster/pgstat.c:442 #, c-format msgid "trying another address for the statistics collector" msgstr "統計情報コレクタ用の別のアドレスを試みています" -#: postmaster/pgstat.c:428 +#: postmaster/pgstat.c:451 #, c-format msgid "could not create socket for statistics collector: %m" msgstr "統計情報コレクタ用のソケットを作成できませんでした: %m" -#: postmaster/pgstat.c:440 +#: postmaster/pgstat.c:463 #, c-format msgid "could not bind socket for statistics collector: %m" msgstr "統計情報コレクタのソケットをバインドできませんでした: %m" -#: postmaster/pgstat.c:451 +#: postmaster/pgstat.c:474 #, c-format msgid "could not get address of socket for statistics collector: %m" msgstr "統計情報コレクタのソケットからアドレスを入手できませんでした: %m" -#: postmaster/pgstat.c:467 +#: postmaster/pgstat.c:490 #, c-format msgid "could not connect socket for statistics collector: %m" msgstr "統計情報コレクタのソケットに接続できませんでした: %m" -#: postmaster/pgstat.c:488 +#: postmaster/pgstat.c:511 #, c-format msgid "could not send test message on socket for statistics collector: %m" msgstr "統計情報コレクタのソケットに試験メッセージを送信できませんでした: %m" -#: postmaster/pgstat.c:514 +#: postmaster/pgstat.c:537 #, c-format msgid "select() failed in statistics collector: %m" msgstr "統計情報コレクタでselect()が失敗しました: %m" -#: postmaster/pgstat.c:529 +#: postmaster/pgstat.c:552 #, c-format msgid "test message did not get through on socket for statistics collector" msgstr "統計情報コレクタのソケットから試験メッセージを入手できませんでした" -#: postmaster/pgstat.c:544 +#: postmaster/pgstat.c:567 #, c-format msgid "could not receive test message on socket for statistics collector: %m" msgstr "統計情報コレクタのソケットから試験メッセージを受信できませんでした: %m" -#: postmaster/pgstat.c:554 +#: postmaster/pgstat.c:577 #, c-format msgid "incorrect test message transmission on socket for statistics collector" msgstr "統計情報コレクタのソケットでの試験メッセージの送信が不正です" -#: postmaster/pgstat.c:577 +#: postmaster/pgstat.c:600 #, c-format msgid "could not set statistics collector socket to nonblocking mode: %m" msgstr "統計情報コレクタのソケットを非ブロッキングモードに設定できませんでした: %m" -#: postmaster/pgstat.c:616 +#: postmaster/pgstat.c:642 #, c-format msgid "disabling statistics collector for lack of working socket" msgstr "作業用ソケットの欠落のため統計情報コレクタを無効にしています" -#: postmaster/pgstat.c:763 +#: postmaster/pgstat.c:789 #, c-format msgid "could not fork statistics collector: %m" msgstr "統計情報コレクタをforkできませんでした: %m" -#: postmaster/pgstat.c:1347 +#: postmaster/pgstat.c:1376 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "認識できないリセットターゲット: \"%s\"" -#: postmaster/pgstat.c:1348 +#: postmaster/pgstat.c:1377 #, c-format msgid "Target must be \"archiver\" or \"bgwriter\"." msgstr "対象は\"archiver\"または\"bgwriter\"でなければなりません" -#: postmaster/pgstat.c:4534 +#: postmaster/pgstat.c:4568 #, c-format msgid "could not read statistics message: %m" msgstr "統計情報メッセージを読み取れませんでした: %m" -#: postmaster/pgstat.c:4875 postmaster/pgstat.c:5032 +#: postmaster/pgstat.c:4886 postmaster/pgstat.c:5049 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "一時統計情報ファイル\"%s\"をオープンできませんでした: %m" -#: postmaster/pgstat.c:4942 postmaster/pgstat.c:5077 +#: postmaster/pgstat.c:4959 postmaster/pgstat.c:5094 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "一時統計情報ファイル\"%s\"に書き込みできませんでした: %m" -#: postmaster/pgstat.c:4951 postmaster/pgstat.c:5086 +#: postmaster/pgstat.c:4968 postmaster/pgstat.c:5103 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "一時統計情報ファイル\"%s\"をクローズできませんでした: %m" -#: postmaster/pgstat.c:4959 postmaster/pgstat.c:5094 +#: postmaster/pgstat.c:4976 postmaster/pgstat.c:5111 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "一時統計情報ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m" -#: postmaster/pgstat.c:5183 postmaster/pgstat.c:5389 postmaster/pgstat.c:5542 +#: postmaster/pgstat.c:5208 postmaster/pgstat.c:5425 postmaster/pgstat.c:5579 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "統計情報ファイル\"%s\"をオープンできませんでした: %m" -#: postmaster/pgstat.c:5195 postmaster/pgstat.c:5205 postmaster/pgstat.c:5226 -#: postmaster/pgstat.c:5248 postmaster/pgstat.c:5263 postmaster/pgstat.c:5326 -#: postmaster/pgstat.c:5401 postmaster/pgstat.c:5421 postmaster/pgstat.c:5439 -#: postmaster/pgstat.c:5455 postmaster/pgstat.c:5473 postmaster/pgstat.c:5489 -#: postmaster/pgstat.c:5554 postmaster/pgstat.c:5566 postmaster/pgstat.c:5578 -#: postmaster/pgstat.c:5603 postmaster/pgstat.c:5625 +#: postmaster/pgstat.c:5220 postmaster/pgstat.c:5230 postmaster/pgstat.c:5251 postmaster/pgstat.c:5262 postmaster/pgstat.c:5284 postmaster/pgstat.c:5299 postmaster/pgstat.c:5362 postmaster/pgstat.c:5437 postmaster/pgstat.c:5457 postmaster/pgstat.c:5475 postmaster/pgstat.c:5491 postmaster/pgstat.c:5509 postmaster/pgstat.c:5525 postmaster/pgstat.c:5591 postmaster/pgstat.c:5603 postmaster/pgstat.c:5615 postmaster/pgstat.c:5626 postmaster/pgstat.c:5651 +#: postmaster/pgstat.c:5673 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "統計情報ファイル\"%s\"が破損しています" -#: postmaster/pgstat.c:5754 +#: postmaster/pgstat.c:5802 #, c-format msgid "using stale statistics instead of current ones because stats collector is not responding" msgstr "統計情報コレクタが応答しないため、最新の統計値の替わりに古い値を使用します" -#: postmaster/pgstat.c:6081 +#: postmaster/pgstat.c:6132 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "整理処理においてデータベースハッシュテーブルが破損しました --- 中断します" -#: postmaster/postmaster.c:712 +#: postmaster/postmaster.c:736 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: -fオプションに対する不正な引数: \"%s\"\n" -#: postmaster/postmaster.c:798 +#: postmaster/postmaster.c:822 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: -tオプションに対する不正な引数: \"%s\"\n" -#: postmaster/postmaster.c:849 +#: postmaster/postmaster.c:873 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: 不正な引数: \"%s\"\n" -#: postmaster/postmaster.c:891 +#: postmaster/postmaster.c:915 #, c-format msgid "%s: superuser_reserved_connections (%d) must be less than max_connections (%d)\n" msgstr "%s: superuser_reserved_connections (%d) は max_connections (%d) より小さくなければなりません\n" -#: postmaster/postmaster.c:898 +#: postmaster/postmaster.c:922 #, c-format msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" msgstr "wal_levelが\"minimal\"の時はWALアーカイブは有効にできません" -#: postmaster/postmaster.c:901 +#: postmaster/postmaster.c:925 #, c-format msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" msgstr "WALストリーミング(max_wal_senders > 0)を行うには wal_levelを\"replica\"または\"logical\"にする必要があります" -#: postmaster/postmaster.c:909 +#: postmaster/postmaster.c:933 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: データトークンテーブルが不正です、修復してください\n" -#: postmaster/postmaster.c:998 +#: postmaster/postmaster.c:1050 +#, c-format +msgid "could not create I/O completion port for child queue" +msgstr "子キュー向けのI/O終了ポートを作成できませんでした" + +#: postmaster/postmaster.c:1115 +#, c-format +msgid "ending log output to stderr" +msgstr "標準エラー出力へのログ出力を終了しています" + +#: postmaster/postmaster.c:1116 +#, c-format +msgid "Future log output will go to log destination \"%s\"." +msgstr "この後のログ出力はログ配送先\"%s\"に出力されます。" + +#: postmaster/postmaster.c:1127 #, c-format msgid "starting %s" msgstr "%s を起動しています" -#: postmaster/postmaster.c:1027 postmaster/postmaster.c:1125 -#: utils/init/miscinit.c:1551 +#: postmaster/postmaster.c:1156 postmaster/postmaster.c:1254 utils/init/miscinit.c:1599 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "パラメータ\"%s\"のリスト構文が不正です" -#: postmaster/postmaster.c:1058 +#: postmaster/postmaster.c:1187 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "\"%s\"に関する監視用ソケットを作成できませんでした" -#: postmaster/postmaster.c:1064 +#: postmaster/postmaster.c:1193 #, c-format msgid "could not create any TCP/IP sockets" msgstr "TCP/IPソケットを作成できませんでした" -#: postmaster/postmaster.c:1147 +#: postmaster/postmaster.c:1276 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "ディレクトリ\"%s\"においてUnixドメインソケットを作成できませんでした" -#: postmaster/postmaster.c:1153 +#: postmaster/postmaster.c:1282 #, c-format msgid "could not create any Unix-domain sockets" msgstr "Unixドメインソケットを作成できませんでした" -#: postmaster/postmaster.c:1165 +#: postmaster/postmaster.c:1294 #, c-format msgid "no socket created for listening" msgstr "監視用に作成するソケットはありません" -#: postmaster/postmaster.c:1205 -#, c-format -msgid "could not create I/O completion port for child queue" -msgstr "子キュー向けのI/O終了ポートを作成できませんでした" - -#: postmaster/postmaster.c:1234 +#: postmaster/postmaster.c:1325 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: 外部PIDファイル\"%s\"の権限を変更できませんでした: %s\n" -#: postmaster/postmaster.c:1238 +#: postmaster/postmaster.c:1329 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: 外部PIDファイル\"%s\"に書き出せませんでした: %s\n" -#: postmaster/postmaster.c:1298 -#, c-format -msgid "ending log output to stderr" -msgstr "標準エラー出力へのログ出力を終了しています" - -#: postmaster/postmaster.c:1299 -#, c-format -msgid "Future log output will go to log destination \"%s\"." -msgstr "この後のログ出力はログ配送先\"%s\"に出力されます。" - -#: postmaster/postmaster.c:1325 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1362 utils/init/postinit.c:215 #, c-format msgid "could not load pg_hba.conf" msgstr "pg_hba.conf の読み込みができませんでした" -#: postmaster/postmaster.c:1351 +#: postmaster/postmaster.c:1388 #, c-format msgid "postmaster became multithreaded during startup" msgstr "postmasterは起動値処理中はマルチスレッドで動作します" -#: postmaster/postmaster.c:1352 +#: postmaster/postmaster.c:1389 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "LC_ALL環境変数を使用可能なロケールに設定してください。" -#: postmaster/postmaster.c:1453 +#: postmaster/postmaster.c:1490 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: 一致するpostgres実行ファイルがありませんでした" -#: postmaster/postmaster.c:1476 utils/misc/tzparser.c:341 +#: postmaster/postmaster.c:1513 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "これは、PostgreSQLのインストールが不完全であるかまたは、ファイル\"%s\"が本来の場所からなくなってしまったことを示しています。" -#: postmaster/postmaster.c:1503 +#: postmaster/postmaster.c:1540 #, c-format msgid "" "%s: could not find the database system\n" @@ -17346,452 +17193,445 @@ msgstr "" "ディレクトリ\"%s\"にあるものと想定していましたが、\n" "ファイル\"%s\"をオープンできませんでした: %s\n" -#: postmaster/postmaster.c:1680 +#: postmaster/postmaster.c:1717 #, c-format msgid "select() failed in postmaster: %m" msgstr "postmasterでselect()が失敗しました: %m" -#: postmaster/postmaster.c:1835 +#: postmaster/postmaster.c:1872 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "データディレクトリのロックファイルが不正なため、即時シャットダウンを実行中です" -#: postmaster/postmaster.c:1934 postmaster/postmaster.c:1965 +#: postmaster/postmaster.c:1975 postmaster/postmaster.c:2006 #, c-format msgid "incomplete startup packet" msgstr "開始パケットが不完全です" -#: postmaster/postmaster.c:1946 +#: postmaster/postmaster.c:1987 #, c-format msgid "invalid length of startup packet" msgstr "不正な開始パケット長" -#: postmaster/postmaster.c:2004 +#: postmaster/postmaster.c:2045 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "SSLネゴシエーション応答の送信に失敗しました: %m" -#: postmaster/postmaster.c:2031 +#: postmaster/postmaster.c:2076 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "GSSAPIネゴシエーション応答の送信に失敗しました: %m" -#: postmaster/postmaster.c:2056 +#: postmaster/postmaster.c:2106 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "フロントエンドプロトコル%u.%uをサポートしていません: サーバは%u.0から %u.%uまでをサポートします" -#: postmaster/postmaster.c:2120 utils/misc/guc.c:6560 utils/misc/guc.c:6596 -#: utils/misc/guc.c:6666 utils/misc/guc.c:7989 utils/misc/guc.c:10840 -#: utils/misc/guc.c:10874 +#: postmaster/postmaster.c:2170 utils/misc/guc.c:6787 utils/misc/guc.c:6823 utils/misc/guc.c:6893 utils/misc/guc.c:8216 utils/misc/guc.c:11062 utils/misc/guc.c:11096 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "パラメータ\"%s\"の値が不正です: \"%s\"" -#: postmaster/postmaster.c:2123 +#: postmaster/postmaster.c:2173 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "有効な値: \"false\", 0, \"true\", 1, \"database\"。" -#: postmaster/postmaster.c:2168 +#: postmaster/postmaster.c:2218 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "開始パケットの配置が不正です: 最終バイトはターミネータであるはずです" -#: postmaster/postmaster.c:2206 +#: postmaster/postmaster.c:2256 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "開始パケットで指定されたPostgreSQLユーザ名は存在しません" -#: postmaster/postmaster.c:2265 +#: postmaster/postmaster.c:2320 #, c-format msgid "the database system is starting up" msgstr "データベースシステムは起動処理中です" -#: postmaster/postmaster.c:2270 +#: postmaster/postmaster.c:2325 #, c-format msgid "the database system is shutting down" msgstr "データベースシステムはシャットダウンしています" -#: postmaster/postmaster.c:2275 +#: postmaster/postmaster.c:2330 #, c-format msgid "the database system is in recovery mode" msgstr "データベースシステムはリカバリモードです" -#: postmaster/postmaster.c:2280 storage/ipc/procarray.c:293 -#: storage/ipc/sinvaladt.c:298 storage/lmgr/proc.c:363 +#: postmaster/postmaster.c:2335 storage/ipc/procarray.c:452 storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:359 #, c-format msgid "sorry, too many clients already" msgstr "現在クライアント数が多すぎます" -#: postmaster/postmaster.c:2370 +#: postmaster/postmaster.c:2425 #, c-format msgid "wrong key in cancel request for process %d" msgstr "プロセス%dに対するキャンセル要求においてキーが間違っています" -#: postmaster/postmaster.c:2382 +#: postmaster/postmaster.c:2437 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "キャンセル要求内のPID %dがどのプロセスにも一致しません" -#: postmaster/postmaster.c:2635 +#: postmaster/postmaster.c:2708 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "SIGHUPを受け取りました。設定ファイルをリロードしています" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2661 postmaster/postmaster.c:2665 +#: postmaster/postmaster.c:2734 postmaster/postmaster.c:2738 #, c-format msgid "%s was not reloaded" msgstr "%s は再読み込みされていません" -#: postmaster/postmaster.c:2675 +#: postmaster/postmaster.c:2748 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL設定は再読み込みされていません" -#: postmaster/postmaster.c:2723 +#: postmaster/postmaster.c:2804 #, c-format msgid "received smart shutdown request" msgstr "スマートシャットダウン要求を受け取りました" -#: postmaster/postmaster.c:2781 +#: postmaster/postmaster.c:2850 #, c-format msgid "received fast shutdown request" msgstr "高速シャットダウン要求を受け取りました" -#: postmaster/postmaster.c:2814 +#: postmaster/postmaster.c:2868 #, c-format msgid "aborting any active transactions" msgstr "活動中の全トランザクションをアボートしています" -#: postmaster/postmaster.c:2848 +#: postmaster/postmaster.c:2892 #, c-format msgid "received immediate shutdown request" msgstr "即時シャットダウン要求を受け取りました" -#: postmaster/postmaster.c:2915 +#: postmaster/postmaster.c:2967 #, c-format msgid "shutdown at recovery target" msgstr "リカバリ目標でシャットダウンします" -#: postmaster/postmaster.c:2931 postmaster/postmaster.c:2954 +#: postmaster/postmaster.c:2985 postmaster/postmaster.c:3021 msgid "startup process" msgstr "起動プロセス" -#: postmaster/postmaster.c:2934 +#: postmaster/postmaster.c:2988 #, c-format msgid "aborting startup due to startup process failure" msgstr "起動プロセスの失敗のため起動を中断しています" -#: postmaster/postmaster.c:2995 +#: postmaster/postmaster.c:3063 #, c-format msgid "database system is ready to accept connections" msgstr "データベースシステムの接続受け付け準備が整いました" -#: postmaster/postmaster.c:3016 +#: postmaster/postmaster.c:3084 msgid "background writer process" msgstr "バックグランドライタプロセス" -#: postmaster/postmaster.c:3070 +#: postmaster/postmaster.c:3138 msgid "checkpointer process" msgstr "チェックポイント処理プロセス" -#: postmaster/postmaster.c:3086 +#: postmaster/postmaster.c:3154 msgid "WAL writer process" msgstr "WALライタプロセス" -#: postmaster/postmaster.c:3101 +#: postmaster/postmaster.c:3169 msgid "WAL receiver process" msgstr "WAL 受信プロセス" -#: postmaster/postmaster.c:3116 +#: postmaster/postmaster.c:3184 msgid "autovacuum launcher process" msgstr "自動VACUUM起動プロセス" -#: postmaster/postmaster.c:3131 +#: postmaster/postmaster.c:3199 msgid "archiver process" msgstr "アーカイバプロセス" -#: postmaster/postmaster.c:3147 +#: postmaster/postmaster.c:3215 msgid "statistics collector process" msgstr "統計情報収集プロセス" -#: postmaster/postmaster.c:3161 +#: postmaster/postmaster.c:3229 msgid "system logger process" msgstr "システムログ取得プロセス" -#: postmaster/postmaster.c:3223 +#: postmaster/postmaster.c:3293 #, c-format msgid "background worker \"%s\"" msgstr "バックグラウンドワーカ\"%s\"" -#: postmaster/postmaster.c:3307 postmaster/postmaster.c:3327 -#: postmaster/postmaster.c:3334 postmaster/postmaster.c:3352 +#: postmaster/postmaster.c:3377 postmaster/postmaster.c:3397 postmaster/postmaster.c:3404 postmaster/postmaster.c:3422 msgid "server process" msgstr "サーバプロセス" -#: postmaster/postmaster.c:3406 +#: postmaster/postmaster.c:3476 #, c-format msgid "terminating any other active server processes" msgstr "他の活動中のサーバプロセスを終了しています" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3662 +#: postmaster/postmaster.c:3731 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d)は終了コード%dで終了しました" -#: postmaster/postmaster.c:3664 postmaster/postmaster.c:3676 -#: postmaster/postmaster.c:3686 postmaster/postmaster.c:3697 +#: postmaster/postmaster.c:3733 postmaster/postmaster.c:3745 postmaster/postmaster.c:3755 postmaster/postmaster.c:3766 #, c-format msgid "Failed process was running: %s" msgstr "失敗したプロセスが実行していました: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3673 +#: postmaster/postmaster.c:3742 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d)は例外%Xで終了しました" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3683 +#: postmaster/postmaster.c:3752 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d)はシグナル%dで終了しました: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3695 +#: postmaster/postmaster.c:3764 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d)は認識できないステータス%dで終了しました" -#: postmaster/postmaster.c:3878 +#: postmaster/postmaster.c:3972 #, c-format msgid "abnormal database system shutdown" msgstr "データベースシステムは異常にシャットダウンしました" -#: postmaster/postmaster.c:3918 +#: postmaster/postmaster.c:4012 #, c-format msgid "all server processes terminated; reinitializing" msgstr "全てのサーバプロセスが終了しました: 再初期化しています" -#: postmaster/postmaster.c:4088 postmaster/postmaster.c:5479 -#: postmaster/postmaster.c:5867 +#: postmaster/postmaster.c:4182 postmaster/postmaster.c:5588 postmaster/postmaster.c:5975 #, c-format msgid "could not generate random cancel key" msgstr "ランダムなキャンセルキーを生成できませんでした" -#: postmaster/postmaster.c:4142 +#: postmaster/postmaster.c:4236 #, c-format msgid "could not fork new process for connection: %m" msgstr "接続用の新しいプロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:4184 +#: postmaster/postmaster.c:4278 msgid "could not fork new process for connection: " msgstr "接続用の新しいプロセスをforkできませんでした" -#: postmaster/postmaster.c:4294 +#: postmaster/postmaster.c:4387 #, c-format msgid "connection received: host=%s port=%s" msgstr "接続を受け付けました: ホスト=%s ポート番号=%s" -#: postmaster/postmaster.c:4299 +#: postmaster/postmaster.c:4392 #, c-format msgid "connection received: host=%s" msgstr "接続を受け付けました: ホスト=%s" -#: postmaster/postmaster.c:4569 +#: postmaster/postmaster.c:4662 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "サーバプロセス\"%s\"を実行できませんでした: %m" -#: postmaster/postmaster.c:4722 +#: postmaster/postmaster.c:4821 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "共有メモリの確保のリトライ回数が多すぎるため中断します" -#: postmaster/postmaster.c:4723 +#: postmaster/postmaster.c:4822 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "これはASLRまたはアンチウイルスソフトウェアが原因である可能性があります。" -#: postmaster/postmaster.c:4934 +#: postmaster/postmaster.c:5028 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "SSL構成は子プロセスでは読み込めません" -#: postmaster/postmaster.c:5066 +#: postmaster/postmaster.c:5160 #, c-format -msgid "Please report this to ." -msgstr "これをまで報告してください。" +msgid "Please report this to <%s>." +msgstr "これを<%s>まで報告してください。" -#: postmaster/postmaster.c:5153 +#: postmaster/postmaster.c:5253 #, c-format msgid "database system is ready to accept read only connections" msgstr "データベースシステムはリードオンリー接続の受け付け準備ができました" -#: postmaster/postmaster.c:5407 +#: postmaster/postmaster.c:5516 #, c-format msgid "could not fork startup process: %m" msgstr "起動プロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5411 +#: postmaster/postmaster.c:5520 #, c-format msgid "could not fork background writer process: %m" msgstr "バックグランドライタプロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5415 +#: postmaster/postmaster.c:5524 #, c-format msgid "could not fork checkpointer process: %m" msgstr "チェックポイント処理プロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5419 +#: postmaster/postmaster.c:5528 #, c-format msgid "could not fork WAL writer process: %m" msgstr "WALライタプロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5423 +#: postmaster/postmaster.c:5532 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "WAL 受信プロセスを fork できませんでした: %m" -#: postmaster/postmaster.c:5427 +#: postmaster/postmaster.c:5536 #, c-format msgid "could not fork process: %m" msgstr "プロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5624 postmaster/postmaster.c:5647 +#: postmaster/postmaster.c:5733 postmaster/postmaster.c:5756 #, c-format msgid "database connection requirement not indicated during registration" msgstr "登録時にデータベース接続の必要性が示されていません" -#: postmaster/postmaster.c:5631 postmaster/postmaster.c:5654 +#: postmaster/postmaster.c:5740 postmaster/postmaster.c:5763 #, c-format msgid "invalid processing mode in background worker" msgstr "バックグラウンドワーカ内の不正な処理モード" -#: postmaster/postmaster.c:5727 +#: postmaster/postmaster.c:5836 #, c-format msgid "starting background worker process \"%s\"" msgstr "バックグラウンドワーカプロセス\"%s\"を起動しています" -#: postmaster/postmaster.c:5739 +#: postmaster/postmaster.c:5848 #, c-format msgid "could not fork worker process: %m" msgstr "ワーカプロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5853 -#, fuzzy, c-format -#| msgid "could not fork worker process: %m" +#: postmaster/postmaster.c:5961 +#, c-format msgid "no slot available for new worker process" -msgstr "ワーカプロセスをforkできませんでした: %m" +msgstr "新しいワーカプロセスに割り当てられるスロットがありません" -#: postmaster/postmaster.c:6188 +#: postmaster/postmaster.c:6296 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "バックエンドで使用するためにソケット%dを複製できませんでした: エラーコード %d" -#: postmaster/postmaster.c:6220 +#: postmaster/postmaster.c:6328 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "継承したソケットを作成できませんでした: エラーコード %d\n" -#: postmaster/postmaster.c:6249 +#: postmaster/postmaster.c:6357 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "バックエンド変数ファイル\"%s\"をオープンできませんでした: %s\n" -#: postmaster/postmaster.c:6256 +#: postmaster/postmaster.c:6364 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "バックエンド変数ファイル\"%s\"から読み取れませんでした: %s\n" -#: postmaster/postmaster.c:6265 +#: postmaster/postmaster.c:6373 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "ファイル\"%s\"を削除できませんでした: %s\n" -#: postmaster/postmaster.c:6282 +#: postmaster/postmaster.c:6390 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "バックエンド変数のビューをマップできませんでした: エラーコード %lu\n" -#: postmaster/postmaster.c:6291 +#: postmaster/postmaster.c:6399 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "バックエンド変数のビューをアンマップできませんでした: エラーコード %lu\n" -#: postmaster/postmaster.c:6298 +#: postmaster/postmaster.c:6406 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "バックエンドパラメータ変数のハンドルをクローズできませんでした: エラーコード%lu\n" -#: postmaster/postmaster.c:6462 +#: postmaster/postmaster.c:6584 #, c-format msgid "could not read exit code for process\n" msgstr "子プロセスの終了コードの読み込みができませんでした\n" -#: postmaster/postmaster.c:6467 +#: postmaster/postmaster.c:6589 #, c-format msgid "could not post child completion status\n" msgstr "個プロセスの終了コードを投稿できませんでした\n" -#: postmaster/syslogger.c:480 postmaster/syslogger.c:1154 +#: postmaster/syslogger.c:474 postmaster/syslogger.c:1153 #, c-format msgid "could not read from logger pipe: %m" msgstr "ロガーパイプから読み取れませんでした: %m" -#: postmaster/syslogger.c:528 +#: postmaster/syslogger.c:522 #, c-format msgid "logger shutting down" msgstr "ロガーを停止しています" -#: postmaster/syslogger.c:572 postmaster/syslogger.c:586 +#: postmaster/syslogger.c:571 postmaster/syslogger.c:585 #, c-format msgid "could not create pipe for syslog: %m" msgstr "syslog用のパイプを作成できませんでした: %m" -#: postmaster/syslogger.c:637 +#: postmaster/syslogger.c:636 #, c-format msgid "could not fork system logger: %m" msgstr "システムロガーをforkできませんでした: %m" -#: postmaster/syslogger.c:673 +#: postmaster/syslogger.c:672 #, c-format msgid "redirecting log output to logging collector process" msgstr "ログ出力をログ収集プロセスにリダイレクトしています" -#: postmaster/syslogger.c:674 +#: postmaster/syslogger.c:673 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "ここからのログ出力はディレクトリ\"%s\"に現れます。" -#: postmaster/syslogger.c:682 +#: postmaster/syslogger.c:681 #, c-format msgid "could not redirect stdout: %m" msgstr "標準出力にリダイレクトできませんでした: %m" -#: postmaster/syslogger.c:687 postmaster/syslogger.c:704 +#: postmaster/syslogger.c:686 postmaster/syslogger.c:703 #, c-format msgid "could not redirect stderr: %m" msgstr "標準エラー出力にリダイレクトできませんでした: %m" -#: postmaster/syslogger.c:1109 +#: postmaster/syslogger.c:1108 #, c-format msgid "could not write to log file: %s\n" msgstr "ログファイルに書き出せませんでした: %s\n" -#: postmaster/syslogger.c:1226 +#: postmaster/syslogger.c:1225 #, c-format msgid "could not open log file \"%s\": %m" msgstr "ロックファイル\"%s\"をオープンできませんでした: %m" -#: postmaster/syslogger.c:1288 postmaster/syslogger.c:1338 +#: postmaster/syslogger.c:1287 postmaster/syslogger.c:1337 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "自動ローテーションを無効にしています(再度有効にするにはSIGHUPを使用してください)" @@ -17806,972 +17646,1014 @@ msgstr "正規表現で使用する照合規則を特定できませんでした msgid "nondeterministic collations are not supported for regular expressions" msgstr "非決定的照合順序は正規表現ではサポートされていません" -#: repl_gram.y:336 repl_gram.y:368 +#: repl_gram.y:349 repl_gram.y:381 #, c-format msgid "invalid timeline %u" msgstr "タイムライン%uは不正です" -#: repl_scanner.l:129 +#: repl_scanner.l:131 msgid "invalid streaming start location" msgstr "ストリーミングの開始位置が不正です" -#: repl_scanner.l:180 scan.l:703 +#: repl_scanner.l:182 scan.l:717 msgid "unterminated quoted string" msgstr "文字列の引用符が閉じていません" -#: replication/basebackup.c:102 -#, fuzzy, c-format -#| msgid "could not read from file \"%s\": %m" -msgid "could not read from file \"%s\"" -msgstr "ファイル\"%s\"から読み取れませんでした: %m" +#: replication/backup_manifest.c:231 +#, c-format +msgid "expected end timeline %u but found timeline %u" +msgstr "最終タイムライン%uを期待していましたがタイムライン%uが見つかりました" + +#: replication/backup_manifest.c:248 +#, c-format +msgid "expected start timeline %u but found timeline %u" +msgstr "開始タイムライン%uを期待していましたがタイムライン%uが見つかりました" -#: replication/basebackup.c:462 +#: replication/backup_manifest.c:275 +#, c-format +msgid "start timeline %u not found history of timeline %u" +msgstr "開始タイムライン%uからはタイムライン%uの履歴中にありません" + +#: replication/backup_manifest.c:322 +#, c-format +msgid "could not rewind temporary file" +msgstr "一時ファイルを巻き戻しに失敗しました" + +#: replication/backup_manifest.c:349 +#, c-format +msgid "could not read from temporary file: %m" +msgstr "一時ファイルから読み取りに失敗しました: %m" + +#: replication/basebackup.c:546 #, c-format msgid "could not find any WAL files" msgstr "WALファイルが全くありません" -#: replication/basebackup.c:476 replication/basebackup.c:491 -#: replication/basebackup.c:500 +#: replication/basebackup.c:561 replication/basebackup.c:577 replication/basebackup.c:586 #, c-format msgid "could not find WAL file \"%s\"" msgstr "WALファイル\"%s\"がありませんでした" -#: replication/basebackup.c:542 replication/basebackup.c:572 +#: replication/basebackup.c:629 replication/basebackup.c:659 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "想定しないWALファイルのサイズ\"%s\"" -#: replication/basebackup.c:556 replication/basebackup.c:1567 +#: replication/basebackup.c:644 replication/basebackup.c:1754 #, c-format msgid "base backup could not send data, aborting backup" msgstr "ベースバックアップがデータを送信できませんでした。バックアップを中止しています" -#: replication/basebackup.c:630 +#: replication/basebackup.c:722 #, c-format -msgid "%s total checksum verification failures" -msgstr " 合計で %s 個のデータチェックサムエラーを検出しました" +msgid "%lld total checksum verification failures" +msgstr " 合計で %lld 個のデータチェックサムエラー" -#: replication/basebackup.c:634 +#: replication/basebackup.c:726 #, c-format msgid "checksum verification failure during base backup" msgstr "ベースバックアップ中にチェックサム確認が失敗しました" -#: replication/basebackup.c:678 replication/basebackup.c:687 -#: replication/basebackup.c:696 replication/basebackup.c:705 -#: replication/basebackup.c:714 replication/basebackup.c:725 -#: replication/basebackup.c:742 replication/basebackup.c:751 +#: replication/basebackup.c:779 replication/basebackup.c:788 replication/basebackup.c:797 replication/basebackup.c:806 replication/basebackup.c:815 replication/basebackup.c:826 replication/basebackup.c:843 replication/basebackup.c:852 replication/basebackup.c:864 replication/basebackup.c:888 #, c-format msgid "duplicate option \"%s\"" msgstr "\"%s\"オプションは重複しています" -#: replication/basebackup.c:731 +#: replication/basebackup.c:832 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%dはパラメータ\"%s\"の有効範囲を超えています(%d .. %d)" -#: replication/basebackup.c:1330 +#: replication/basebackup.c:877 +#, c-format +msgid "unrecognized manifest option: \"%s\"" +msgstr "認識できない目録オプション: \"%s\"" + +#: replication/basebackup.c:893 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "認識できないチェックサムアルゴリズム: \"%s\"" + +#: replication/basebackup.c:908 +#, c-format +msgid "manifest checksums require a backup manifest" +msgstr "目録のチェックサムにはバックアップ目録が必要です" + +#: replication/basebackup.c:1504 #, c-format msgid "skipping special file \"%s\"" msgstr "スペシャルファイル\"%s\"をスキップしています" -#: replication/basebackup.c:1438 +#: replication/basebackup.c:1623 #, c-format msgid "invalid segment number %d in file \"%s\"" msgstr "ファイル\"%2$s\"セグメント番号%1$dは不正です" -#: replication/basebackup.c:1457 -#, fuzzy, c-format -#| msgid "cannot verify checksum in file \"%s\", block %d: read buffer size %d and page size %d differ" -msgid "could not verify checksum in file \"%s\", block %d: read buffer size %d and page size %d differ" -msgstr "ファイル \"%s\"、ブロック %d でチェックサムエラーが発生しました: 読み込みバッファサイズ %d とページサイズ %d が異なっています" - -#: replication/basebackup.c:1501 replication/basebackup.c:1531 -#, c-format -msgid "could not fseek in file \"%s\": %m" -msgstr "ファイル\"%s\"をfseekできませんでした: %m" - -#: replication/basebackup.c:1523 +#: replication/basebackup.c:1661 #, c-format -msgid "could not reread block %d of file \"%s\": %m" -msgstr "ファイル\"%2$s\"でブロック%1$dの再読み込みに失敗しました: %3$m" +msgid "could not verify checksum in file \"%s\", block %d: read buffer size %d and page size %d differ" +msgstr "ファイル\"%s\"、ブロック%d でチェックサム検証に失敗しました: 読み込みバッファサイズ%dとページサイズ%dが異なっています" -#: replication/basebackup.c:1547 +#: replication/basebackup.c:1734 #, c-format msgid "checksum verification failed in file \"%s\", block %d: calculated %X but expected %X" msgstr "ファイル\"%s\"のブロック%dでチェックサム検証が失敗しました: 計算されたチェックサムは%Xですが想定は%Xです" -#: replication/basebackup.c:1554 +#: replication/basebackup.c:1741 #, c-format msgid "further checksum verification failures in file \"%s\" will not be reported" msgstr "ファイル\"%s\"における以降のチェックサムエラーは報告されません" -#: replication/basebackup.c:1614 -#, fuzzy, c-format -#| msgid "file \"%s\" has a total of %d checksum verification failures" +#: replication/basebackup.c:1797 +#, c-format msgid "file \"%s\" has a total of %d checksum verification failure" msgid_plural "file \"%s\" has a total of %d checksum verification failures" msgstr[0] "ファイル\"%s\"では合計%d個のチェックサムエラーが発生しました" msgstr[1] "ファイル\"%s\"では合計%d個のチェックサムエラーが発生しました" -#: replication/basebackup.c:1647 +#: replication/basebackup.c:1833 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "ファイル名がtarフォーマットに対して長すぎます: \"%s\"" -#: replication/basebackup.c:1652 +#: replication/basebackup.c:1838 #, c-format msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "シンボリックリンクのリンク先tarのフォーマットにとって長すぎます: ファイル名 \"%s\", リンク先 \"%s\"" -#: replication/libpqwalreceiver/libpqwalreceiver.c:232 +#: replication/libpqwalreceiver/libpqwalreceiver.c:227 +#, c-format +msgid "could not clear search path: %s" +msgstr "search_pathを消去できませんでした: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:251 #, c-format msgid "invalid connection string syntax: %s" msgstr "不正な接続文字列の構文: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:256 +#: replication/libpqwalreceiver/libpqwalreceiver.c:275 #, c-format msgid "could not parse connection string: %s" msgstr "接続文字列をパースできませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:328 +#: replication/libpqwalreceiver/libpqwalreceiver.c:347 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "プライマリサーバからデータベースシステムの識別子とタイムライン ID を受信できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:339 -#: replication/libpqwalreceiver/libpqwalreceiver.c:557 +#: replication/libpqwalreceiver/libpqwalreceiver.c:358 replication/libpqwalreceiver/libpqwalreceiver.c:580 #, c-format msgid "invalid response from primary server" msgstr "プライマリサーバからの応答が不正です" -#: replication/libpqwalreceiver/libpqwalreceiver.c:340 +#: replication/libpqwalreceiver/libpqwalreceiver.c:359 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "システムを識別できませんでした: 受信したのは%d行で%d列、期待していたのは%d行で%d以上の列でした。" -#: replication/libpqwalreceiver/libpqwalreceiver.c:413 -#: replication/libpqwalreceiver/libpqwalreceiver.c:419 -#: replication/libpqwalreceiver/libpqwalreceiver.c:444 +#: replication/libpqwalreceiver/libpqwalreceiver.c:432 replication/libpqwalreceiver/libpqwalreceiver.c:438 replication/libpqwalreceiver/libpqwalreceiver.c:467 #, c-format msgid "could not start WAL streaming: %s" msgstr "WAL ストリーミングを開始できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:467 +#: replication/libpqwalreceiver/libpqwalreceiver.c:490 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "プライマリにストリーミングの終了メッセージを送信できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:489 +#: replication/libpqwalreceiver/libpqwalreceiver.c:512 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "ストリーミングの終了後の想定外の結果セット" -#: replication/libpqwalreceiver/libpqwalreceiver.c:503 +#: replication/libpqwalreceiver/libpqwalreceiver.c:526 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "ストリーミングCOPY終了中のエラー: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:512 +#: replication/libpqwalreceiver/libpqwalreceiver.c:535 #, c-format msgid "error reading result of streaming command: %s" msgstr "ストリーミングコマンドの結果読み取り中のエラー: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:520 -#: replication/libpqwalreceiver/libpqwalreceiver.c:754 +#: replication/libpqwalreceiver/libpqwalreceiver.c:543 replication/libpqwalreceiver/libpqwalreceiver.c:777 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "CommandComplete後の想定外の結果: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:546 +#: replication/libpqwalreceiver/libpqwalreceiver.c:569 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "プライマリサーバからタイムライン履歴ファイルを受信できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:558 +#: replication/libpqwalreceiver/libpqwalreceiver.c:581 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "2個のフィールドを持つ1個のタプルを期待していましたが、%2$d 個のフィールドを持つ %1$d 個のタプルを受信しました。" -#: replication/libpqwalreceiver/libpqwalreceiver.c:718 -#: replication/libpqwalreceiver/libpqwalreceiver.c:769 -#: replication/libpqwalreceiver/libpqwalreceiver.c:775 +#: replication/libpqwalreceiver/libpqwalreceiver.c:741 replication/libpqwalreceiver/libpqwalreceiver.c:792 replication/libpqwalreceiver/libpqwalreceiver.c:798 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "WAL ストリームからデータを受信できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:794 +#: replication/libpqwalreceiver/libpqwalreceiver.c:817 #, c-format msgid "could not send data to WAL stream: %s" msgstr "WAL ストリームにデータを送信できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:843 +#: replication/libpqwalreceiver/libpqwalreceiver.c:870 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "レプリケーションスロット\"%s\"を作成できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:877 +#: replication/libpqwalreceiver/libpqwalreceiver.c:915 #, c-format msgid "invalid query response" msgstr "不正な問い合わせ応答" -#: replication/libpqwalreceiver/libpqwalreceiver.c:878 +#: replication/libpqwalreceiver/libpqwalreceiver.c:916 #, c-format msgid "Expected %d fields, got %d fields." msgstr "%d個の列を期待していましたが、%d列を受信しました。" -#: replication/libpqwalreceiver/libpqwalreceiver.c:947 +#: replication/libpqwalreceiver/libpqwalreceiver.c:985 #, c-format msgid "the query interface requires a database connection" msgstr "クエリインタフェースの動作にはデータベースコネクションが必要です" -#: replication/libpqwalreceiver/libpqwalreceiver.c:978 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1016 msgid "empty query" msgstr "空の問い合わせ" -#: replication/logical/launcher.c:307 +#: replication/logical/launcher.c:299 #, c-format msgid "starting logical replication worker for subscription \"%s\"" msgstr "サブスクリプション\"%s\"に対応する論理レプリケーションワーカを起動します" -#: replication/logical/launcher.c:314 +#: replication/logical/launcher.c:306 #, c-format msgid "cannot start logical replication workers when max_replication_slots = 0" msgstr "max_replication_slots = 0 の時は論理レプリケーションワーカは起動できません" -#: replication/logical/launcher.c:394 +#: replication/logical/launcher.c:386 #, c-format msgid "out of logical replication worker slots" msgstr "論理レプリケーションワーカスロットは全て使用中です" -#: replication/logical/launcher.c:395 +#: replication/logical/launcher.c:387 #, c-format msgid "You might need to increase max_logical_replication_workers." msgstr "max_logical_replication_workersを増やす必要があるかもしれません。" -#: replication/logical/launcher.c:450 +#: replication/logical/launcher.c:442 #, c-format msgid "out of background worker slots" msgstr "バックグラウンドワーカスロットが足りません" -#: replication/logical/launcher.c:451 +#: replication/logical/launcher.c:443 #, c-format msgid "You might need to increase max_worker_processes." msgstr "max_worker_processesを増やす必要があるかもしれません" -#: replication/logical/launcher.c:650 +#: replication/logical/launcher.c:642 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "論理レプリケーションワーカスロット%dが空いていないため接続できません" -#: replication/logical/launcher.c:659 +#: replication/logical/launcher.c:651 #, c-format msgid "logical replication worker slot %d is already used by another worker, cannot attach" msgstr "論理レプリケーションワーカスロット%dが既に他のワーカに使用されているため接続できません" -#: replication/logical/launcher.c:977 +#: replication/logical/launcher.c:955 #, c-format msgid "logical replication launcher started" msgstr "論理レプリケーションランチャが起動しました" -#: replication/logical/logical.c:90 +#: replication/logical/logical.c:105 #, c-format msgid "logical decoding requires wal_level >= logical" msgstr "論理デコードを行うためには wal_level >= logical である必要があります" -#: replication/logical/logical.c:95 +#: replication/logical/logical.c:110 #, c-format msgid "logical decoding requires a database connection" msgstr "論理デコードを行うにはデータベース接続が必要です" -#: replication/logical/logical.c:113 +#: replication/logical/logical.c:128 #, c-format msgid "logical decoding cannot be used while in recovery" msgstr "リカバリ中は論理デコードは使用できません" -#: replication/logical/logical.c:258 replication/logical/logical.c:396 +#: replication/logical/logical.c:311 replication/logical/logical.c:457 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "物理レプリケーションスロットを論理デコードに使用するとはできません" -#: replication/logical/logical.c:263 replication/logical/logical.c:401 +#: replication/logical/logical.c:316 replication/logical/logical.c:462 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "レプリケーションスロット\"%s\"はこのデータベースでは作成されていません" -#: replication/logical/logical.c:270 +#: replication/logical/logical.c:323 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "論理レプリケーションスロットは書き込みを行ったトランザクションの中で生成することはできません" -#: replication/logical/logical.c:441 +#: replication/logical/logical.c:502 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "スロット\"%s\"の論理デコードを開始します" -#: replication/logical/logical.c:443 +#: replication/logical/logical.c:504 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "%3$X/%4$XからWALを読み取って、%1$X/%2$X以降にコミットされるトランザクションをストリーミングします。" -#: replication/logical/logical.c:593 +#: replication/logical/logical.c:651 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "スロット\"%s\", 出力プラグイン\"%s\", %sコールバックの処理中, 関連LSN %X/%X" -#: replication/logical/logical.c:600 +#: replication/logical/logical.c:658 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "スロット\"%s\", 出力プラグイン\"%s\", %sコールバックの処理中" -#: replication/logical/logicalfuncs.c:114 replication/slotfuncs.c:34 +#: replication/logical/logical.c:965 +#, c-format +msgid "logical streaming requires a stream_start_cb callback" +msgstr "論理ストリーミングを行うにはstream_start_cbコールバックが必要です" + +#: replication/logical/logical.c:1011 +#, c-format +msgid "logical streaming requires a stream_stop_cb callback" +msgstr "論理ストリーミングを行うにはstream_stop_cbコールバックが必要です" + +#: replication/logical/logical.c:1050 +#, c-format +msgid "logical streaming requires a stream_abort_cb callback" +msgstr "論理ストリーミングを行うにはstream_abort_cbコールバックが必要です" + +#: replication/logical/logical.c:1089 +#, c-format +msgid "logical streaming requires a stream_commit_cb callback" +msgstr "論理ストリーミングにはstream_commit_cbコールバックが必要です" + +#: replication/logical/logical.c:1135 +#, c-format +msgid "logical streaming requires a stream_change_cb callback" +msgstr "論理ストリーミングを行うにはstream_change_cbコールバックが必要です" + +#: replication/logical/logicalfuncs.c:104 replication/slotfuncs.c:34 #, c-format msgid "must be superuser or replication role to use replication slots" msgstr "レプリケーションスロットを使用するためにはスーパユーザまたはreplicationロールである必要があります" -#: replication/logical/logicalfuncs.c:153 +#: replication/logical/logicalfuncs.c:134 #, c-format msgid "slot name must not be null" msgstr "スロット名はnullではあってはなりません" -#: replication/logical/logicalfuncs.c:169 +#: replication/logical/logicalfuncs.c:150 #, c-format msgid "options array must not be null" msgstr "オプション配列はnullであってはなりません" -#: replication/logical/logicalfuncs.c:200 +#: replication/logical/logicalfuncs.c:181 #, c-format msgid "array must be one-dimensional" msgstr "配列は1次元でなければなりません" -#: replication/logical/logicalfuncs.c:206 +#: replication/logical/logicalfuncs.c:187 #, c-format msgid "array must not contain nulls" msgstr "配列にはNULL値を含めてはいけません" -#: replication/logical/logicalfuncs.c:222 utils/adt/json.c:2312 -#: utils/adt/jsonb.c:1282 +#: replication/logical/logicalfuncs.c:203 utils/adt/json.c:1128 utils/adt/jsonb.c:1303 #, c-format msgid "array must have even number of elements" msgstr "配列の要素数は偶数でなければなりません" -#: replication/logical/logicalfuncs.c:269 +#: replication/logical/logicalfuncs.c:251 #, c-format -msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" -msgstr "論理デコード出力プラグイン\"%s\"はバイナリ出力を生成します, しかし関数\"%s\"はテキストデータを期待しています" +msgid "can no longer get changes from replication slot \"%s\"" +msgstr "すでにレプリケーションスロット\"%s\"から変更を取り出すことはできません" + +#: replication/logical/logicalfuncs.c:253 replication/slotfuncs.c:648 +#, c-format +msgid "This slot has never previously reserved WAL, or has been invalidated." +msgstr "このスロットはWALを留保したことがないか、無効化さています。" -#: replication/logical/origin.c:186 +#: replication/logical/logicalfuncs.c:265 #, c-format -msgid "only superusers can query or manipulate replication origins" -msgstr "スーパユーザのみがレプリケーション基点の問い合わせや操作ができます" +msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" +msgstr "論理デコード出力プラグイン\"%s\"はバイナリ出力を生成します, しかし関数\"%s\"はテキストデータを期待しています" -#: replication/logical/origin.c:191 +#: replication/logical/origin.c:188 #, c-format msgid "cannot query or manipulate replication origin when max_replication_slots = 0" msgstr "max_replication_slots = 0 の時はレプリケーション起点の問い合わせは操作はできません" -#: replication/logical/origin.c:196 +#: replication/logical/origin.c:193 #, c-format msgid "cannot manipulate replication origins during recovery" msgstr "リカバリ中はレプリケーション基点を操作できません" -#: replication/logical/origin.c:231 +#: replication/logical/origin.c:228 #, c-format msgid "replication origin \"%s\" does not exist" msgstr "レプリケーション基点\"%s\"は存在しません" -#: replication/logical/origin.c:322 +#: replication/logical/origin.c:319 #, c-format msgid "could not find free replication origin OID" msgstr "複製基点OIDの空きがありません" -#: replication/logical/origin.c:370 +#: replication/logical/origin.c:367 #, c-format msgid "could not drop replication origin with OID %d, in use by PID %d" msgstr "OID%dのレプリケーション起点を削除できません, PID%dで使用中です" -#: replication/logical/origin.c:462 +#: replication/logical/origin.c:459 #, c-format msgid "replication origin with OID %u does not exist" msgstr "OIDが%uのレプリケーション基点がありません" -#: replication/logical/origin.c:730 +#: replication/logical/origin.c:724 #, c-format msgid "replication checkpoint has wrong magic %u instead of %u" msgstr "レプリケーションチェックポイントのマジックナンバー%uは不正です、正しい値は%u" -#: replication/logical/origin.c:771 +#: replication/logical/origin.c:765 #, c-format msgid "could not find free replication state, increase max_replication_slots" msgstr "使用可能なレプリケーションステートが見つかりません、max_replication_slotsを増やしてください" -#: replication/logical/origin.c:789 +#: replication/logical/origin.c:783 #, c-format msgid "replication slot checkpoint has wrong checksum %u, expected %u" msgstr "レプリケーションスロットチェックポイントのチェックサム%uは間違っています、正しくは%uです" -#: replication/logical/origin.c:917 +#: replication/logical/origin.c:911 replication/logical/origin.c:1097 #, c-format msgid "replication origin with OID %d is already active for PID %d" msgstr "OID%dのレプリケーション起点は既にPID%dで使用中です" -#: replication/logical/origin.c:928 replication/logical/origin.c:1115 +#: replication/logical/origin.c:922 replication/logical/origin.c:1109 #, c-format msgid "could not find free replication state slot for replication origin with OID %u" msgstr "OID%uのレプリケーション基点に対するレプリケーション状態スロットの空きがありません" -#: replication/logical/origin.c:930 replication/logical/origin.c:1117 -#: replication/slot.c:1567 +#: replication/logical/origin.c:924 replication/logical/origin.c:1111 replication/slot.c:1763 #, c-format msgid "Increase max_replication_slots and try again." msgstr "max_replication_slotsを増やして再度試してください" -#: replication/logical/origin.c:1074 +#: replication/logical/origin.c:1068 #, c-format msgid "cannot setup replication origin when one is already setup" msgstr "既に初期化されている場合はレプリケーション起点の初期化はできません" -#: replication/logical/origin.c:1103 -#, fuzzy, c-format -#| msgid "replication origin with OID %d is already active for PID %d" -msgid "replication origin %d is already active for PID %d" -msgstr "OID%dのレプリケーション起点は既にPID%dで使用中です" - -#: replication/logical/origin.c:1154 replication/logical/origin.c:1370 -#: replication/logical/origin.c:1390 +#: replication/logical/origin.c:1148 replication/logical/origin.c:1364 replication/logical/origin.c:1384 #, c-format msgid "no replication origin is configured" msgstr "レプリケーション起点が構成されていません" -#: replication/logical/origin.c:1237 -#, fuzzy, c-format -#| msgid "replication slot name \"%s\" is too short" +#: replication/logical/origin.c:1231 +#, c-format msgid "replication origin name \"%s\" is reserved" -msgstr "レプリケーションスロット名\"%s\"は短すぎます" +msgstr "レプリケーション起点名\"%s\"は予約されています" -#: replication/logical/origin.c:1239 -#, fuzzy, c-format -#| msgid "Role names starting with \"pg_\" are reserved." +#: replication/logical/origin.c:1233 +#, c-format msgid "Origin names starting with \"pg_\" are reserved." -msgstr "\"pg_\"で始まるロール名は予約されています。" +msgstr "\"pg_\"で始まる起点名は予約されています。" -#: replication/logical/relation.c:255 +#: replication/logical/relation.c:272 #, c-format msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "論理レプリケーション対象のリレーション\"%s.%s\"は存在しません" -#: replication/logical/relation.c:297 +#: replication/logical/relation.c:329 #, c-format msgid "logical replication target relation \"%s.%s\" is missing some replicated columns" msgstr "論理レプリケーションの対象リレーション\"%s.%s\"はレプリケートされた列の一部を失っています" -#: replication/logical/relation.c:337 +#: replication/logical/relation.c:369 #, c-format msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "論理レプリケーションのターゲットリレーション\"%s.%s\"がREPLICA IDENTITYインデックスでシステム列を使用しています" -#: replication/logical/reorderbuffer.c:2507 +#: replication/logical/reorderbuffer.c:3361 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "XID%uのためのデータファイルの書き出しに失敗しました: %m" -#: replication/logical/reorderbuffer.c:2600 -#: replication/logical/reorderbuffer.c:2622 +#: replication/logical/reorderbuffer.c:3678 replication/logical/reorderbuffer.c:3703 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "並べ替えバッファのあふれファイルの読み込みに失敗しました: %m" -#: replication/logical/reorderbuffer.c:2604 -#: replication/logical/reorderbuffer.c:2626 +#: replication/logical/reorderbuffer.c:3682 replication/logical/reorderbuffer.c:3707 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "並べ替えバッファのあふれファイルの読み込みに失敗しました: %2$uバイトのはずが%1$dバイトでした" -#: replication/logical/reorderbuffer.c:2849 +#: replication/logical/reorderbuffer.c:3942 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "pg_replslot/%2$s/xid* の削除中にファイル\"%1$s\"が削除できませんでした: %3$m" -#: replication/logical/reorderbuffer.c:3319 +#: replication/logical/reorderbuffer.c:4434 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "ファイル\"%1$s\"の読み込みに失敗しました: %3$dバイトのはずが%2$dバイトでした" -#: replication/logical/snapbuild.c:611 +#: replication/logical/snapbuild.c:607 #, c-format msgid "initial slot snapshot too large" msgstr "初期スロットスナップショットが大きすぎます" -#: replication/logical/snapbuild.c:665 +#: replication/logical/snapbuild.c:661 #, c-format msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" msgid_plural "exported logical decoding snapshot: \"%s\" with %u transaction IDs" msgstr[0] "エクスポートされた論理デコードスナップショット: \"%s\" (%u個のトランザクションID を含む)" msgstr[1] "エクスポートされた論理デコードスナップショット: \"%s\" (%u個のトランザクションID を含む)" -#: replication/logical/snapbuild.c:1270 replication/logical/snapbuild.c:1363 -#: replication/logical/snapbuild.c:1917 +#: replication/logical/snapbuild.c:1266 replication/logical/snapbuild.c:1359 replication/logical/snapbuild.c:1913 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "論理デコードは一貫性ポイントを%X/%Xで発見しました" -#: replication/logical/snapbuild.c:1272 +#: replication/logical/snapbuild.c:1268 #, c-format msgid "There are no running transactions." msgstr "実行中のトランザクションはありません。" -#: replication/logical/snapbuild.c:1314 +#: replication/logical/snapbuild.c:1310 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "論理デコードは初期開始点を%X/%Xで発見しました" -#: replication/logical/snapbuild.c:1316 replication/logical/snapbuild.c:1340 +#: replication/logical/snapbuild.c:1312 replication/logical/snapbuild.c:1336 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "%2$uより古いトランザクション(おおよそ%1$d個)の完了を待っています" -#: replication/logical/snapbuild.c:1338 +#: replication/logical/snapbuild.c:1334 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "論理デコードは初期の一貫性ポイントを%X/%Xで発見しました" -#: replication/logical/snapbuild.c:1365 +#: replication/logical/snapbuild.c:1361 #, c-format msgid "There are no old transactions anymore." msgstr "古いトランザクションはこれ以上はありません" -#: replication/logical/snapbuild.c:1759 +#: replication/logical/snapbuild.c:1755 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "スナップショット構築状態ファイル\"%1$s\"のマジックナンバーが不正です: %3$uのはずが%2$uでした" -#: replication/logical/snapbuild.c:1765 +#: replication/logical/snapbuild.c:1761 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "スナップショット状態ファイル\"%1$s\"のバージョン%2$uはサポート外です: %3$uのはずが%2$uでした" -#: replication/logical/snapbuild.c:1864 +#: replication/logical/snapbuild.c:1860 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "スナップショット生成状態ファイル\"%s\"のチェックサムが一致しません: %uですが、%uであるべきです" -#: replication/logical/snapbuild.c:1919 +#: replication/logical/snapbuild.c:1915 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "論理デコードは保存されたスナップショットを使って開始します。" -#: replication/logical/snapbuild.c:1991 +#: replication/logical/snapbuild.c:1987 #, c-format msgid "could not parse file name \"%s\"" msgstr "ファイル名\"%s\"をパースできませんでした" -#: replication/logical/tablesync.c:139 +#: replication/logical/tablesync.c:132 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "サブスクリプション\"%s\"、テーブル\"%s\"に対する論理レプリケーションテーブル同期ワーカが終了しました" -#: replication/logical/tablesync.c:672 +#: replication/logical/tablesync.c:664 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "テーブル\"%s.%s\"のテーブル情報を発行サーバから取得できませんでした: %s" -#: replication/logical/tablesync.c:678 +#: replication/logical/tablesync.c:670 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "テーブル\"%s.%s\"が発行サーバ上で見つかりませんでした" -#: replication/logical/tablesync.c:710 +#: replication/logical/tablesync.c:704 #, c-format msgid "could not fetch table info for table \"%s.%s\": %s" msgstr "テーブル\"%s.%s\"のテーブル情報の取得に失敗しました: %s" -#: replication/logical/tablesync.c:780 +#: replication/logical/tablesync.c:791 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "テーブル\"%s.%s\"の初期内容のコピーを開始できませんでした: %s" -#: replication/logical/tablesync.c:894 +#: replication/logical/tablesync.c:905 #, c-format msgid "table copy could not start transaction on publisher" msgstr "テーブルコピー中に発行サーバ上でのトランザクション開始に失敗しました" -#: replication/logical/tablesync.c:916 +#: replication/logical/tablesync.c:927 #, c-format msgid "table copy could not finish transaction on publisher" msgstr "テーブルコピー中に発行サーバ上でのトランザクション終了に失敗しました" -#: replication/logical/worker.c:290 +#: replication/logical/worker.c:313 #, c-format msgid "processing remote data for replication target relation \"%s.%s\" column \"%s\", remote type %s, local type %s" msgstr "レプリケーション対象リレーション\"%s.%s\" 列\"%s\"のリモートからのデータを処理中、リモートでの型 %s、ローカルでの型 %s" -#: replication/logical/worker.c:511 +#: replication/logical/worker.c:393 replication/logical/worker.c:522 +#, c-format +msgid "incorrect binary data format in logical replication column %d" +msgstr "論理レプリケーション列%dのバイナリデータ書式が不正です" + +#: replication/logical/worker.c:622 #, c-format msgid "ORIGIN message sent out of order" msgstr "ORIGINメッセージが間違った順序で送出されています" -#: replication/logical/worker.c:645 +#: replication/logical/worker.c:772 #, c-format msgid "publisher did not send replica identity column expected by the logical replication target relation \"%s.%s\"" msgstr "論理レプリケーションの対象リレーション\"%s.%s\"は複製の識別列を期待していましたが、発行サーバは送信しませんでした" -#: replication/logical/worker.c:652 +#: replication/logical/worker.c:779 #, c-format msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "論理レプリケーションの対象リレーション\"%s.%s\"が識別列インデックスも主キーをもっておらず、かつ発行されたリレーションがREPLICA IDENTITY FULLとなっていません" -#: replication/logical/worker.c:993 +#: replication/logical/worker.c:1464 #, c-format msgid "invalid logical replication message type \"%c\"" msgstr "不正な論理レプリケーションのメッセージタイプ\"%c\"" -#: replication/logical/worker.c:1135 +#: replication/logical/worker.c:1606 #, c-format msgid "data stream from publisher has ended" msgstr "発行サーバからのデータストリームが終了しました" -#: replication/logical/worker.c:1290 +#: replication/logical/worker.c:1761 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "タイムアウトにより論理レプリケーションワーカを終了しています" -#: replication/logical/worker.c:1438 +#: replication/logical/worker.c:1909 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was removed" msgstr "サブスクリプション\"%s\"が削除されたため、対応する論理レプリケーション適用ワーカが停止します" -#: replication/logical/worker.c:1452 +#: replication/logical/worker.c:1923 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "サブスクリプション\"%s\"が無効化されたため、対応する論理レプリケーション適用ワーカが停止します" -#: replication/logical/worker.c:1466 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because the connection information was changed" -msgstr "接続情報が変更されたため、サブスクリプション\"%s\"に対応する論理レプリケーション適用ワーカが再起動します" - -#: replication/logical/worker.c:1480 +#: replication/logical/worker.c:1944 #, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" -msgstr "サブスクリプション\"%s\"の名前が変更されたため、対応する論理レプリケーション適用ワーカが再起動します" +msgid "logical replication apply worker for subscription \"%s\" will restart because of a parameter change" +msgstr "パラメータの変更があったため、サブスクリプション\"%s\"に対応する論理レプリケーション適用ワーカが再起動します" -#: replication/logical/worker.c:1497 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because the replication slot name was changed" -msgstr "レプリケーションスロットの名前が変更されたため、サブスクリプション\"%s\"に対応する論理レプリケーション適用ワーカが再起動します" - -#: replication/logical/worker.c:1511 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because subscription's publications were changed" -msgstr "サブスクリプションが購読するパブリケーションが変更されたため、サブスクリプション\"%s\"に対応する論理レプリケーション適用ワーカが再起動します" - -#: replication/logical/worker.c:1615 +#: replication/logical/worker.c:2039 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "サブスクリプション%uが削除されたため、対応する論理レプリケーション適用ワーカの起動を中断します" -#: replication/logical/worker.c:1627 +#: replication/logical/worker.c:2051 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "サブスクリプション\"%s\"が起動中に無効化されたため、対応する論理レプリケーション適用ワーカは起動しません" -#: replication/logical/worker.c:1645 +#: replication/logical/worker.c:2069 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "サブスクリプション\"%s\"、テーブル\"%s\"に対応する論理レプリケーションテーブル同期ワーカが起動しました" -#: replication/logical/worker.c:1649 +#: replication/logical/worker.c:2073 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "サブスクリプション\"%s\"に対応する論理レプリケーション適用ワーカが起動しました" -#: replication/logical/worker.c:1688 +#: replication/logical/worker.c:2112 #, c-format msgid "subscription has no replication slot set" msgstr "サブスクリプションにレプリケーションスロットが設定されていません" -#: replication/pgoutput/pgoutput.c:117 +#: replication/pgoutput/pgoutput.c:151 #, c-format msgid "invalid proto_version" msgstr "不正なproto_version" -#: replication/pgoutput/pgoutput.c:122 +#: replication/pgoutput/pgoutput.c:156 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version \"%s\"は範囲外です" -#: replication/pgoutput/pgoutput.c:139 +#: replication/pgoutput/pgoutput.c:173 #, c-format msgid "invalid publication_names syntax" msgstr "publication_namesの構文が不正です" -#: replication/pgoutput/pgoutput.c:181 +#: replication/pgoutput/pgoutput.c:226 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "クライアントが proto_version=%d を送信してきましたが、バージョン%d以下のプロトコルのみしかサポートしていません" -#: replication/pgoutput/pgoutput.c:187 +#: replication/pgoutput/pgoutput.c:232 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "クライアントが proto_version=%d を送信してきましたが、バージョン%d以上のプロトコルのみしかサポートしていません" -#: replication/pgoutput/pgoutput.c:193 +#: replication/pgoutput/pgoutput.c:238 #, c-format msgid "publication_names parameter missing" msgstr "publication_namesパラメータが指定されていません" -#: replication/slot.c:182 +#: replication/slot.c:183 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "レプリケーションスロット名\"%s\"は短すぎます" -#: replication/slot.c:191 +#: replication/slot.c:192 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "レプリケーションスロット名\"%s\"は長すぎます" -#: replication/slot.c:204 +#: replication/slot.c:205 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "レプリケーションスロット名\"%s\"は不正な文字を含んでいます" -#: replication/slot.c:206 +#: replication/slot.c:207 #, c-format msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "レプリケーションスロット名は小文字、数字とアンダースコアのみを含むことができます。" -#: replication/slot.c:253 +#: replication/slot.c:254 #, c-format msgid "replication slot \"%s\" already exists" msgstr "レプリケーションスロット\"%s\"はすでに存在します" -#: replication/slot.c:263 +#: replication/slot.c:264 #, c-format msgid "all replication slots are in use" msgstr "レプリケーションスロットは全て使用中です" -#: replication/slot.c:264 +#: replication/slot.c:265 #, c-format msgid "Free one or increase max_replication_slots." msgstr "どれか一つを解放するか、max_replication_slots を大きくしてください。" -#: replication/slot.c:387 replication/slotfuncs.c:663 +#: replication/slot.c:407 replication/slotfuncs.c:760 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "レプリケーションスロット\"%s\"は存在しません" -#: replication/slot.c:398 replication/slot.c:947 +#: replication/slot.c:445 replication/slot.c:1007 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "レプリケーションスロット\"%s\"はPID%dで使用中です" -#: replication/slot.c:631 replication/slot.c:1139 replication/slot.c:1502 +#: replication/slot.c:684 replication/slot.c:1315 replication/slot.c:1698 #, c-format msgid "could not remove directory \"%s\"" msgstr "ディレクトリ\"%s\"を削除できませんでした" -#: replication/slot.c:982 +#: replication/slot.c:1042 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "レプリケーションスロットは max_replication_slots > 0 のときだけ使用できます" -#: replication/slot.c:987 +#: replication/slot.c:1047 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "レプリケーションスロットは wal_level >= replica のときだけ使用できます" -#: replication/slot.c:1440 +#: replication/slot.c:1203 +#, c-format +msgid "terminating process %d because replication slot \"%s\" is too far behind" +msgstr "レプリケーションスロット\"%2$s\"の遅れが大きすぎるため、プロセス%1$dを終了しています" + +#: replication/slot.c:1222 +#, c-format +msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" +msgstr "restart_lsnの値 %2$X/%3$X が max_slot_wal_keep_size の範囲を超えたため、スロット\"%1$s\"を無効化します" + +#: replication/slot.c:1636 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "レプリケーションスロットファイル\"%1$s\"のマジックナンバーが不正です: %3$uのはずが%2$uでした" -#: replication/slot.c:1447 +#: replication/slot.c:1643 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "レプリケーションスロットファイル\"%s\"はサポート外のバージョン%uです" -#: replication/slot.c:1454 +#: replication/slot.c:1650 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "レプリケーションスロットファイル\"%s\"のサイズ%uは異常です" -#: replication/slot.c:1490 +#: replication/slot.c:1686 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "レプリケーションスロットファイル\"%s\"のチェックサムが一致しません: %uですが、%uであるべきです" -#: replication/slot.c:1524 +#: replication/slot.c:1720 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "論理レプリケーションスロット\"%s\"がありますが、wal_level < logical です" -#: replication/slot.c:1526 +#: replication/slot.c:1722 #, c-format msgid "Change wal_level to be logical or higher." msgstr "wal_level を logical もしくはそれより上位の設定にしてください。" -#: replication/slot.c:1530 +#: replication/slot.c:1726 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "物理レプリケーションスロット\"%s\"がありますが、wal_level < replica です" -#: replication/slot.c:1532 +#: replication/slot.c:1728 #, c-format msgid "Change wal_level to be replica or higher." msgstr "wal_level を replica もしくはそれより上位の設定にしてください。" -#: replication/slot.c:1566 +#: replication/slot.c:1762 #, c-format msgid "too many replication slots active before shutdown" msgstr "シャットダウン前のアクティブなレプリケーションスロットの数が多すぎます" -#: replication/slotfuncs.c:526 -#, fuzzy, c-format -#| msgid "invalid target wal lsn" +#: replication/slotfuncs.c:624 +#, c-format msgid "invalid target WAL LSN" msgstr "不正な目標WAL LSN" -#: replication/slotfuncs.c:548 +#: replication/slotfuncs.c:646 #, c-format -msgid "cannot advance replication slot that has not previously reserved WAL" -msgstr "事前に WAL の留保をしていないレプリケーションスロットを進めることはできません" +msgid "replication slot \"%s\" cannot be advanced" +msgstr "レプリケーションスロット\"%s\"は進められません" -#: replication/slotfuncs.c:564 +#: replication/slotfuncs.c:664 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "レプリケーションスロットを %X/%X に進めることはできません、最小値は %X/%X" -#: replication/slotfuncs.c:670 +#: replication/slotfuncs.c:772 #, c-format msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "物理レプリケーションスロット\"%s\"を論理レプリケーションスロットとしてコピーすることはできません" -#: replication/slotfuncs.c:672 +#: replication/slotfuncs.c:774 #, c-format msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "論理レプリケーションスロット\"%s\"を物理レプリケーションスロットとしてコピーすることはできません" -#: replication/slotfuncs.c:681 +#: replication/slotfuncs.c:781 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "WAL の留保をしていないレプリケーションスロットはコピーできません" -#: replication/slotfuncs.c:746 +#: replication/slotfuncs.c:857 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "レプリケーションスロット\"%s\"をコピーできませんでした" -#: replication/slotfuncs.c:748 +#: replication/slotfuncs.c:859 #, c-format msgid "The source replication slot was modified incompatibly during the copy operation." msgstr "コピー処理中にコピー元のレプリケーションスロットが非互換的に変更されました。" -#: replication/syncrep.c:248 +#: replication/slotfuncs.c:865 +#, c-format +msgid "cannot copy unfinished logical replication slot \"%s\"" +msgstr "未完成の論理レプリケーションスロット\"%s\"はコピーできません" + +#: replication/slotfuncs.c:867 +#, c-format +msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." +msgstr "このソースレプリケーションスロットの confirmed_flush_lsn が有効値になってから再度実行してください。" + +#: replication/syncrep.c:257 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "管理者コマンドにより同期レプリケーションの待ち状態をキャンセルし、接続を終了しています" -#: replication/syncrep.c:249 replication/syncrep.c:266 +#: replication/syncrep.c:258 replication/syncrep.c:275 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "トランザクションはローカルではすでにコミット済みですが、スタンバイ側にはレプリケーションされていない可能性があります。" -#: replication/syncrep.c:265 +#: replication/syncrep.c:274 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "ユーザからの要求により同期レプリケーションの待ち状態をキャンセルしています" -#: replication/syncrep.c:406 +#: replication/syncrep.c:416 #, c-format msgid "standby \"%s\" now has synchronous standby priority %u" msgstr "スタンバイの\"%s\"には優先度%uで同期スタンバイが設定されています" # y, c-format -#: replication/syncrep.c:469 +#: replication/syncrep.c:483 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "スタンバイ\"%s\"は優先度%uの同期スタンバイになりました" -#: replication/syncrep.c:473 +#: replication/syncrep.c:487 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "スタンバイ\"%s\"は定足数同期スタンバイの候補になりました" -#: replication/syncrep.c:1173 +#: replication/syncrep.c:1034 #, c-format msgid "synchronous_standby_names parser failed" msgstr "synchronous_standby_names の読み取りに失敗しました" -#: replication/syncrep.c:1179 +#: replication/syncrep.c:1040 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "同期スタンバイの数(%d)は1以上である必要があります" -#: replication/walreceiver.c:160 +#: replication/walreceiver.c:171 #, c-format msgid "terminating walreceiver process due to administrator command" msgstr "管理者コマンドにより WAL 受信プロセスを終了しています" -#: replication/walreceiver.c:276 +#: replication/walreceiver.c:297 #, c-format msgid "could not connect to the primary server: %s" msgstr "プライマリサーバへの接続ができませんでした: %s" -#: replication/walreceiver.c:322 +#: replication/walreceiver.c:343 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "データベースシステムの識別子がプライマリサーバとスタンバイサーバ間で異なります" -#: replication/walreceiver.c:323 +#: replication/walreceiver.c:344 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "プライマリ側の識別子は %s ですが、スタンバイ側の識別子は %s です。" -#: replication/walreceiver.c:333 +#: replication/walreceiver.c:354 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "プライマリの最大のタイムライン%uが、リカバリのタイムライン %uより遅れています" -#: replication/walreceiver.c:369 +#: replication/walreceiver.c:408 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "プライマリのタイムライン%3$uの %1$X/%2$XからでWALストリーミングを始めます" -#: replication/walreceiver.c:374 +#: replication/walreceiver.c:413 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "タイムライン%3$uの %1$X/%2$XからでWALストリーミングを再開します" -#: replication/walreceiver.c:403 +#: replication/walreceiver.c:442 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "WAL ストリーミングを継続できません。リカバリはすでに終わっています。" -#: replication/walreceiver.c:440 +#: replication/walreceiver.c:479 #, c-format msgid "replication terminated by primary server" msgstr "プライマリサーバによりレプリケーションが打ち切られました" -#: replication/walreceiver.c:441 +#: replication/walreceiver.c:480 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "タイムライン%uの%X/%XでWALの最後に達しました" -#: replication/walreceiver.c:529 +#: replication/walreceiver.c:568 #, c-format msgid "terminating walreceiver due to timeout" msgstr "レプリケーションタイムアウトによりwalreceiverを終了しています" -#: replication/walreceiver.c:567 +#: replication/walreceiver.c:606 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "プライマリサーバには要求されたタイムライン%u上にこれ以上WALがありません" -#: replication/walreceiver.c:582 replication/walreceiver.c:922 +#: replication/walreceiver.c:622 replication/walreceiver.c:929 #, c-format msgid "could not close log segment %s: %m" msgstr "ログセグメント%sをクローズできませんでした: %m" -#: replication/walreceiver.c:700 +#: replication/walreceiver.c:742 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "プライマリサーバからライムライン%u用のタイムライン履歴ファイルを取り込みしています" @@ -18781,128 +18663,136 @@ msgstr "プライマリサーバからライムライン%u用のタイムライ msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "ログファイルセグメント%sのオフセット%uに長さ%luで書き出せませんでした: %m" -#: replication/walsender.c:497 +#: replication/walsender.c:523 storage/smgr/md.c:1291 +#, c-format +msgid "could not seek to end of file \"%s\": %m" +msgstr "ファイル\"%s\"の終端へシークできませんでした: %m" + +#: replication/walsender.c:527 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "ファイル\"%s\"の先頭にシークできませんでした: %m" -#: replication/walsender.c:548 +#: replication/walsender.c:578 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "IDENTIFY_SYSTEM が START_REPLICATION の前に実行されていません" -#: replication/walsender.c:565 +#: replication/walsender.c:607 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "論理レプリケーションスロットは物理レプリケーションには使用できません" -#: replication/walsender.c:628 +#: replication/walsender.c:676 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "タイムライン%3$u上の要求された開始ポイント%1$X/%2$Xはサーバの履歴にありません" -#: replication/walsender.c:632 +#: replication/walsender.c:680 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "サーバの履歴はタイムライン%uの%X/%Xからフォークしました。" -#: replication/walsender.c:677 +#: replication/walsender.c:725 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "要求された開始ポイント%X/%XはサーバのWALフラッシュ位置%X/%Xより進んでいます" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:907 +#: replication/walsender.c:976 #, c-format msgid "%s must not be called inside a transaction" msgstr "%sはトランザクション内では呼び出せません" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:917 +#: replication/walsender.c:986 #, c-format msgid "%s must be called inside a transaction" msgstr "%sはトランザクション内で呼び出さなければなりません" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:923 +#: replication/walsender.c:992 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s は REPEATABLE READ 分離レベルのトランザクションで呼び出されなければなりません" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:929 +#: replication/walsender.c:998 #, c-format msgid "%s must be called before any query" msgstr "%s は問い合わせの実行前に呼び出されなければなりません" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:935 +#: replication/walsender.c:1004 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s はサブトランザクション内では呼び出せません" -#: replication/walsender.c:1082 +#: replication/walsender.c:1152 +#, c-format +msgid "cannot read from logical replication slot \"%s\"" +msgstr "論理レプリケーションスロット\"%s\"は読み込めません" + +#: replication/walsender.c:1154 +#, c-format +msgid "This slot has been invalidated because it exceeded the maximum reserved size." +msgstr "最大留保量を超えたため、このスロットは無効化されています。" + +#: replication/walsender.c:1164 #, c-format msgid "terminating walsender process after promotion" msgstr "昇格後にWAL送信プロセスを終了します" -#: replication/walsender.c:1453 +#: replication/walsender.c:1538 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "WAL送信プロセスが停止モードの間は新しいコマンドを実行できません" -#: replication/walsender.c:1486 +#: replication/walsender.c:1571 #, c-format msgid "received replication command: %s" msgstr "レプリケーションコマンドを受信しました: %s" -#: replication/walsender.c:1502 tcop/fastpath.c:279 tcop/postgres.c:1103 -#: tcop/postgres.c:1426 tcop/postgres.c:1684 tcop/postgres.c:2077 -#: tcop/postgres.c:2450 tcop/postgres.c:2529 +#: replication/walsender.c:1587 tcop/fastpath.c:279 tcop/postgres.c:1103 tcop/postgres.c:1455 tcop/postgres.c:1716 tcop/postgres.c:2174 tcop/postgres.c:2535 tcop/postgres.c:2614 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "現在のトランザクションがアボートしました。トランザクションブロックが終わるまでコマンドは無視されます" -#: replication/walsender.c:1570 +#: replication/walsender.c:1657 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "物理レプリケーション用のWAL送信プロセスでSQLコマンドは実行できません" -#: replication/walsender.c:1618 replication/walsender.c:1634 +#: replication/walsender.c:1706 replication/walsender.c:1722 #, c-format msgid "unexpected EOF on standby connection" msgstr "スタンバイ接続で想定外のEOFがありました" -#: replication/walsender.c:1648 +#: replication/walsender.c:1736 #, c-format msgid "unexpected standby message type \"%c\", after receiving CopyDone" msgstr "CopyDoneを受信した後の想定しないスタンバイメッセージタイプ\"%c\"" -#: replication/walsender.c:1686 +#: replication/walsender.c:1774 #, c-format msgid "invalid standby message type \"%c\"" msgstr "スタンバイのメッセージタイプ\"%c\"は不正です" -#: replication/walsender.c:1727 +#: replication/walsender.c:1815 #, c-format msgid "unexpected message type \"%c\"" msgstr "想定しないメッセージタイプ\"%c\"" -#: replication/walsender.c:2145 +#: replication/walsender.c:2234 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "レプリケーションタイムアウトにより WAL 送信プロセスを終了しています" -#: replication/walsender.c:2222 +#: replication/walsender.c:2311 #, c-format msgid "\"%s\" has now caught up with upstream server" msgstr "\"%s\"は上流サーバに追いつきました" -#: replication/walsender.c:2481 -#, c-format -msgid "could not read from log segment %s, offset %u, length %zu: %m" -msgstr "ログセグメント %s、オフセット %uから長さ %zu が読み込めませんでした: %m" - #: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:989 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" @@ -19098,8 +18988,7 @@ msgstr "SELECTルールのターゲットリストの項目が少なすぎます msgid "RETURNING list has too few entries" msgstr "RETURNINGリストの項目が少なすぎます" -#: rewrite/rewriteDefine.c:866 rewrite/rewriteDefine.c:980 -#: rewrite/rewriteSupport.c:109 +#: rewrite/rewriteDefine.c:866 rewrite/rewriteDefine.c:980 rewrite/rewriteSupport.c:109 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "リレーション\"%2$s\"のルール\"%1$s\"は存在しません" @@ -19109,406 +18998,385 @@ msgstr "リレーション\"%2$s\"のルール\"%1$s\"は存在しません" msgid "renaming an ON SELECT rule is not allowed" msgstr "ON SELECTルールの名前を変更することはできません" -#: rewrite/rewriteHandler.c:544 +#: rewrite/rewriteHandler.c:545 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "WITH の問い合わせ名\"%s\"が、ルールのアクションと書き換えられようとしている問い合わせの両方に現れています" -#: rewrite/rewriteHandler.c:604 +#: rewrite/rewriteHandler.c:605 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "複数ルールではRETURNINGリストを持つことはできません" -#: rewrite/rewriteHandler.c:813 rewrite/rewriteHandler.c:825 +#: rewrite/rewriteHandler.c:816 rewrite/rewriteHandler.c:828 #, c-format msgid "cannot insert into column \"%s\"" msgstr "列\"%s\"への挿入はできません" -#: rewrite/rewriteHandler.c:814 rewrite/rewriteHandler.c:836 +#: rewrite/rewriteHandler.c:817 rewrite/rewriteHandler.c:839 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "列\"%s\"は GENERATED ALWAYS として定義されています。" -#: rewrite/rewriteHandler.c:816 +#: rewrite/rewriteHandler.c:819 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "OVERRIDING SYSTEM VALUE を指定することで挿入を強制できます。" -#: rewrite/rewriteHandler.c:835 rewrite/rewriteHandler.c:842 +#: rewrite/rewriteHandler.c:838 rewrite/rewriteHandler.c:845 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "列\"%s\"はDEFAULTにのみ更新可能です" -#: rewrite/rewriteHandler.c:1011 rewrite/rewriteHandler.c:1029 +#: rewrite/rewriteHandler.c:1014 rewrite/rewriteHandler.c:1032 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "同じ列\"%s\"に複数の代入があります" -#: rewrite/rewriteHandler.c:2059 +#: rewrite/rewriteHandler.c:2062 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "リレーション\"%s\"のポリシで無限再帰を検出しました" -#: rewrite/rewriteHandler.c:2379 +#: rewrite/rewriteHandler.c:2382 msgid "Junk view columns are not updatable." msgstr "ジャンクビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2384 +#: rewrite/rewriteHandler.c:2387 msgid "View columns that are not columns of their base relation are not updatable." msgstr "基底リレーションの列ではないビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2387 +#: rewrite/rewriteHandler.c:2390 msgid "View columns that refer to system columns are not updatable." msgstr "システム列を参照するビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2390 +#: rewrite/rewriteHandler.c:2393 msgid "View columns that return whole-row references are not updatable." msgstr "行全体参照を返すビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2451 +#: rewrite/rewriteHandler.c:2454 msgid "Views containing DISTINCT are not automatically updatable." msgstr "DISTINCTを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2454 +#: rewrite/rewriteHandler.c:2457 msgid "Views containing GROUP BY are not automatically updatable." msgstr "GROUP BYを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2457 +#: rewrite/rewriteHandler.c:2460 msgid "Views containing HAVING are not automatically updatable." msgstr "HAVINGを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2460 +#: rewrite/rewriteHandler.c:2463 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "UNION、INTERSECT、EXCEPTを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2463 +#: rewrite/rewriteHandler.c:2466 msgid "Views containing WITH are not automatically updatable." msgstr "WITHを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2466 +#: rewrite/rewriteHandler.c:2469 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "LIMIT、OFFSETを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2478 +#: rewrite/rewriteHandler.c:2481 msgid "Views that return aggregate functions are not automatically updatable." msgstr "集約関数を返すビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2481 +#: rewrite/rewriteHandler.c:2484 msgid "Views that return window functions are not automatically updatable." msgstr "ウィンドウ関数を返すビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2484 +#: rewrite/rewriteHandler.c:2487 msgid "Views that return set-returning functions are not automatically updatable." msgstr "集合返却関数を返すビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2491 rewrite/rewriteHandler.c:2495 -#: rewrite/rewriteHandler.c:2503 +#: rewrite/rewriteHandler.c:2494 rewrite/rewriteHandler.c:2498 rewrite/rewriteHandler.c:2506 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "単一のテーブルまたはビューからselectしていないビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2506 +#: rewrite/rewriteHandler.c:2509 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "TABLESAMPLEを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2530 +#: rewrite/rewriteHandler.c:2533 msgid "Views that have no updatable columns are not automatically updatable." msgstr "更新可能な列を持たないビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2987 +#: rewrite/rewriteHandler.c:3010 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "ビュー\"%2$s\"の列\"%1$s\"への挿入はできません" -#: rewrite/rewriteHandler.c:2995 +#: rewrite/rewriteHandler.c:3018 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "ビュー\"%2$s\"の列\"%1$s\"は更新できません" -#: rewrite/rewriteHandler.c:3471 +#: rewrite/rewriteHandler.c:3496 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "WITH にデータを変更するステートメントがある場合は DO INSTEAD NOTHING ルールはサポートされません" -#: rewrite/rewriteHandler.c:3485 +#: rewrite/rewriteHandler.c:3510 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "WITH にデータを変更するステートメントがある場合は、条件付き DO INSTEAD ルールはサポートされません" -#: rewrite/rewriteHandler.c:3489 +#: rewrite/rewriteHandler.c:3514 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "WITH にデータを変更するステートメントがある場合は DO ALSO ルールはサポートされません" -#: rewrite/rewriteHandler.c:3494 +#: rewrite/rewriteHandler.c:3519 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "WITH にデータを変更するステートメントがある場合はマルチステートメントの DO INSTEAD ルールはサポートされません" -#: rewrite/rewriteHandler.c:3744 +#: rewrite/rewriteHandler.c:3710 rewrite/rewriteHandler.c:3718 rewrite/rewriteHandler.c:3726 +#, c-format +msgid "Views with conditional DO INSTEAD rules are not automatically updatable." +msgstr "条件付きDO INSTEADルールを持つビューは自動更新できません。" + +#: rewrite/rewriteHandler.c:3819 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "リレーション\"%s\"へのINSERT RETURNINGを行うことはできません" -#: rewrite/rewriteHandler.c:3746 +#: rewrite/rewriteHandler.c:3821 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "RETURNING句を持つ無条件のON INSERT DO INSTEADルールが必要です。" -#: rewrite/rewriteHandler.c:3751 +#: rewrite/rewriteHandler.c:3826 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "リレーション\"%s\"へのUPDATE RETURNINGを行うことはできません" -#: rewrite/rewriteHandler.c:3753 +#: rewrite/rewriteHandler.c:3828 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "RETURNING句を持つ無条件のON UPDATE DO INSTEADルールが必要です。" -#: rewrite/rewriteHandler.c:3758 +#: rewrite/rewriteHandler.c:3833 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "リレーション\"%s\"へのDELETE RETURNINGを行うことはできません" -#: rewrite/rewriteHandler.c:3760 +#: rewrite/rewriteHandler.c:3835 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "RETURNING句を持つ無条件のON DELETE DO INSTEADルールが必要です。" -#: rewrite/rewriteHandler.c:3778 +#: rewrite/rewriteHandler.c:3853 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "ON CONFLICT句を伴うINSERTは、INSERTまたはUPDATEルールを持つテーブルでは使えません" -#: rewrite/rewriteHandler.c:3835 +#: rewrite/rewriteHandler.c:3910 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "複数問い合わせに対するルールにより書き換えられた問い合わせでは WITH を使用できません" -#: rewrite/rewriteManip.c:1003 +#: rewrite/rewriteManip.c:1006 #, c-format msgid "conditional utility statements are not implemented" msgstr "条件付きのユーティリティ文は実装されていません" -#: rewrite/rewriteManip.c:1169 +#: rewrite/rewriteManip.c:1172 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "ビューに対するWHERE CURRENT OFは実装されていません" -#: rewrite/rewriteManip.c:1503 +#: rewrite/rewriteManip.c:1507 #, c-format msgid "NEW variables in ON UPDATE rules cannot reference columns that are part of a multiple assignment in the subject UPDATE command" msgstr "ON UPDATE ルールのNEW変数は、対象のUPDATEコマンドでの複数列代入の一部となる列を参照することはできません" -#: scan.l:463 +#: scan.l:458 msgid "unterminated /* comment" msgstr "/*コメントが閉じていません" -#: scan.l:494 +#: scan.l:478 msgid "unterminated bit string literal" msgstr "ビット列リテラルの終端がありません" -#: scan.l:515 +#: scan.l:492 msgid "unterminated hexadecimal string literal" msgstr "16進数文字列リテラルの終端がありません" -#: scan.l:565 +#: scan.l:542 #, c-format msgid "unsafe use of string constant with Unicode escapes" msgstr "Unicodeエスケープを使った文字列定数の危険な使用" -#: scan.l:566 +#: scan.l:543 #, c-format msgid "String constants with Unicode escapes cannot be used when standard_conforming_strings is off." msgstr "Unicodeエスケープはstandard_conforming_stringsが無効な時に使用することはできません。" -#: scan.l:612 scan.l:811 -msgid "invalid Unicode escape character" -msgstr "不正なUnicodeエスケープ文字" - -#: scan.l:638 scan.l:646 scan.l:654 scan.l:655 scan.l:656 scan.l:1400 -#: scan.l:1427 scan.l:1431 scan.l:1469 scan.l:1473 scan.l:1495 scan.l:1505 -msgid "invalid Unicode surrogate pair" -msgstr "不正なUnicodeサロゲートペア" - -#: scan.l:660 -#, c-format -msgid "invalid Unicode escape" -msgstr "不正なUnicodeエスケープ" +#: scan.l:604 +msgid "unhandled previous state in xqs" +msgstr "xqsの中で処理されない前ステート" -#: scan.l:661 +#: scan.l:678 #, c-format msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." msgstr "Unicodeエスケープは\\uXXXXまたは\\UXXXXXXXXでなければなりません。" -#: scan.l:672 +#: scan.l:689 #, c-format msgid "unsafe use of \\' in a string literal" msgstr "文字列リテラルで安全ではない\\'が使用されました。" -#: scan.l:673 +#: scan.l:690 #, c-format msgid "Use '' to write quotes in strings. \\' is insecure in client-only encodings." msgstr "文字列内で引用符を記述するには''を使用してください。\\'はクライアントのみで有効な符号化形式では安全ではありません。" -#: scan.l:748 +#: scan.l:762 msgid "unterminated dollar-quoted string" msgstr "文字列のドル引用符が閉じていません" -#: scan.l:765 scan.l:791 scan.l:806 +#: scan.l:779 scan.l:789 msgid "zero-length delimited identifier" msgstr "二重引用符で囲まれた識別子の長さがゼロです" -#: scan.l:826 syncrep_scanner.l:91 +#: scan.l:800 syncrep_scanner.l:91 msgid "unterminated quoted identifier" msgstr "識別子の引用符が閉じていません" -#: scan.l:989 +#: scan.l:963 msgid "operator too long" msgstr "演算子が長すぎます" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1141 +#: scan.l:1172 #, c-format msgid "%s at end of input" msgstr "入力の最後で %s" #. translator: first %s is typically the translation of "syntax error" -#: scan.l:1149 +#: scan.l:1180 #, c-format msgid "%s at or near \"%s\"" msgstr "\"%2$s\"またはその近辺で%1$s" -#: scan.l:1314 scan.l:1346 -msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8" -msgstr "サーバのエンコーディングが UTF-8 ではない場合、コードポイントの値が 007F 以上については Unicode のエスケープ値は使用できません" - -#: scan.l:1342 scan.l:1487 -msgid "invalid Unicode escape value" -msgstr "不正なUnicodeエスケープシーケンスの値" - -#: scan.l:1551 +#: scan.l:1374 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "文字列リテラルないでの\\'の非標準的な使用" -#: scan.l:1552 +#: scan.l:1375 #, c-format msgid "Use '' to write quotes in strings, or use the escape string syntax (E'...')." msgstr "文字列内で単一引用符を記述するには''、またはエスケープ文字列構文(E'...')を使用してください。" -#: scan.l:1561 +#: scan.l:1384 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "文字列リテラル内での\\\\の非標準的な使用" -#: scan.l:1562 +#: scan.l:1385 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "バックスラッシュのエスケープ文字列構文、例えばE'\\\\'を使用してください。" -#: scan.l:1576 +#: scan.l:1399 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "文字列リテラル内でのエスケープの非標準的な使用" -#: scan.l:1577 +#: scan.l:1400 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "エスケープのエスケープ文字列構文、例えばE'\\r\\n'を使用してください。" -#: snowball/dict_snowball.c:197 +#: snowball/dict_snowball.c:209 #, c-format msgid "no Snowball stemmer available for language \"%s\" and encoding \"%s\"" msgstr "言語\"%s\"および符号化方式\"%s\"用に使用可能なSnowballステマがありません" -#: snowball/dict_snowball.c:220 tsearch/dict_ispell.c:74 -#: tsearch/dict_simple.c:49 +#: snowball/dict_snowball.c:232 tsearch/dict_ispell.c:74 tsearch/dict_simple.c:49 #, c-format msgid "multiple StopWords parameters" msgstr "重複したStopWordsパラメータ" -#: snowball/dict_snowball.c:229 +#: snowball/dict_snowball.c:241 #, c-format msgid "multiple Language parameters" msgstr "重複したLanguageパラメータ" -#: snowball/dict_snowball.c:236 +#: snowball/dict_snowball.c:248 #, c-format msgid "unrecognized Snowball parameter: \"%s\"" msgstr "認識できないSnowballパラメータ: \"%s\"" -#: snowball/dict_snowball.c:244 +#: snowball/dict_snowball.c:256 #, c-format msgid "missing Language parameter" msgstr "Languageパラメータがありません" -#: statistics/dependencies.c:674 statistics/dependencies.c:727 -#: statistics/mcv.c:1477 statistics/mcv.c:1508 statistics/mvdistinct.c:349 -#: statistics/mvdistinct.c:402 utils/adt/pseudotypes.c:94 -#: utils/adt/pseudotypes.c:122 utils/adt/pseudotypes.c:147 -#: utils/adt/pseudotypes.c:171 utils/adt/pseudotypes.c:282 -#: utils/adt/pseudotypes.c:307 utils/adt/pseudotypes.c:335 -#: utils/adt/pseudotypes.c:363 utils/adt/pseudotypes.c:393 +#: statistics/dependencies.c:667 statistics/dependencies.c:720 statistics/mcv.c:1477 statistics/mcv.c:1508 statistics/mvdistinct.c:348 statistics/mvdistinct.c:401 utils/adt/pseudotypes.c:42 utils/adt/pseudotypes.c:76 #, c-format msgid "cannot accept a value of type %s" msgstr "%s型の値は受け付けられません" -#: statistics/extended_stats.c:121 +#: statistics/extended_stats.c:145 #, c-format msgid "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "統計オブジェクト\"%s.%s\"がリレーション\"%s.%s\"に対して計算できませんでした" -#: statistics/mcv.c:1366 utils/adt/jsonfuncs.c:1708 +#: statistics/mcv.c:1365 utils/adt/jsonfuncs.c:1800 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "レコード型を受け付けられないコンテキストでレコードを返す関数が呼び出されました" -#: storage/buffer/bufmgr.c:545 storage/buffer/bufmgr.c:658 +#: storage/buffer/bufmgr.c:589 storage/buffer/bufmgr.c:670 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "他のセッションの一時テーブルにはアクセスできません" -#: storage/buffer/bufmgr.c:814 +#: storage/buffer/bufmgr.c:826 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "リレーション %2$s の %1$u ブロック目で、EOF の先に想定外のデータを検出しました" -#: storage/buffer/bufmgr.c:816 +#: storage/buffer/bufmgr.c:828 #, c-format msgid "This has been seen to occur with buggy kernels; consider updating your system." msgstr "これはカーネルの不具合で発生した模様です。システムの更新を検討してください。" -#: storage/buffer/bufmgr.c:914 +#: storage/buffer/bufmgr.c:926 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "リレーション %2$s の %1$u ブロック目のページが不正です: ページをゼロで埋めました" -#: storage/buffer/bufmgr.c:4056 +#: storage/buffer/bufmgr.c:4246 #, c-format msgid "could not write block %u of %s" msgstr "%u ブロックを %s に書き出せませんでした" -#: storage/buffer/bufmgr.c:4058 +#: storage/buffer/bufmgr.c:4248 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "複数回失敗しました ---ずっと書き込みエラーが続くかもしれません。" -#: storage/buffer/bufmgr.c:4079 storage/buffer/bufmgr.c:4098 +#: storage/buffer/bufmgr.c:4269 storage/buffer/bufmgr.c:4288 #, c-format msgid "writing block %u of relation %s" msgstr "ブロック %u を リレーション %s に書き込んでいます" -#: storage/buffer/bufmgr.c:4401 +#: storage/buffer/bufmgr.c:4591 #, c-format msgid "snapshot too old" msgstr "スナップショットが古すぎます" -#: storage/buffer/localbuf.c:199 +#: storage/buffer/localbuf.c:205 #, c-format msgid "no empty local buffer available" msgstr "利用できる、空のローカルバッファがありません" -#: storage/buffer/localbuf.c:427 +#: storage/buffer/localbuf.c:433 #, c-format msgid "cannot access temporary tables during a parallel operation" msgstr "並列処理中は一時テーブルにはアクセスできません" @@ -19518,220 +19386,223 @@ msgstr "並列処理中は一時テーブルにはアクセスできません" msgid "could not open temporary file \"%s\" from BufFile \"%s\": %m" msgstr "BufFile \"%2$s\"の一時ファイル\"%1$s\"をオープンできませんでした: %m" -#: storage/file/buffile.c:796 +#: storage/file/buffile.c:791 #, c-format msgid "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" msgstr "BufFile \"%s\"の一時ファイル\"%s\"のサイズの確認に失敗しました: %m" -#: storage/file/fd.c:458 storage/file/fd.c:530 storage/file/fd.c:566 +#: storage/file/fd.c:508 storage/file/fd.c:580 storage/file/fd.c:616 #, c-format msgid "could not flush dirty data: %m" msgstr "ダーティーデータを書き出しできませんでした: %m" -#: storage/file/fd.c:488 +#: storage/file/fd.c:538 #, c-format msgid "could not determine dirty data size: %m" msgstr "ダーティーデータのサイズを特定できませんでした: %m" -#: storage/file/fd.c:540 +#: storage/file/fd.c:590 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "データの書き出し中にmunmap()に失敗しました: %m" -#: storage/file/fd.c:748 +#: storage/file/fd.c:798 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "ファイル\"%s\"から\"%s\"へのリンクができませんでした: %m" -#: storage/file/fd.c:842 +#: storage/file/fd.c:881 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimitが失敗しました: %m" -#: storage/file/fd.c:932 +#: storage/file/fd.c:971 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "サーバプロセスを起動させるために利用できるファイル記述子が不足しています" -#: storage/file/fd.c:933 +#: storage/file/fd.c:972 #, c-format msgid "System allows %d, we need at least %d." msgstr "システムでは%d使用できますが、少なくとも%d必要です" -#: storage/file/fd.c:984 storage/file/fd.c:2246 storage/file/fd.c:2356 -#: storage/file/fd.c:2507 +#: storage/file/fd.c:1023 storage/file/fd.c:2357 storage/file/fd.c:2467 storage/file/fd.c:2618 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "ファイル記述子が不足しています: %m: 解放後再実行してください" -#: storage/file/fd.c:1284 +#: storage/file/fd.c:1397 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "一時ファイル: パス \"%s\"、サイズ %lu" -#: storage/file/fd.c:1415 +#: storage/file/fd.c:1528 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "一時ディレクトリ\"%s\"を作成できませんでした: %m" -#: storage/file/fd.c:1422 +#: storage/file/fd.c:1535 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "一時サブディレクトリ\"%s\"を作成できませんでした: %m" -#: storage/file/fd.c:1615 +#: storage/file/fd.c:1728 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "一時ファイル\"%s\"を作成できませんでした: %m" -#: storage/file/fd.c:1650 +#: storage/file/fd.c:1763 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "一時ファイル\"%s\"をオープンできませんでした: %m" -#: storage/file/fd.c:1691 -#, fuzzy, c-format -#| msgid "cannot unlink temporary file \"%s\": %m" +#: storage/file/fd.c:1804 +#, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "一時ファイル\"%s\"を unlink できませんでした: %m" -#: storage/file/fd.c:1955 +#: storage/file/fd.c:2068 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "一時ファイルのサイズがtemp_file_limit(%d KB)を超えています" -#: storage/file/fd.c:2222 storage/file/fd.c:2281 +#: storage/file/fd.c:2333 storage/file/fd.c:2392 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "ファイル\"%2$s\"をオープンしようとした時にmaxAllocatedDescs(%1$d)を超えました" -#: storage/file/fd.c:2326 +#: storage/file/fd.c:2437 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "コマンド\"%2$s\"を実行しようとした時にmaxAllocatedDescs(%1$d)を超えました" -#: storage/file/fd.c:2483 +#: storage/file/fd.c:2594 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "ディレクトリ\"%2$s\"をオープンしようとした時にmaxAllocatedDescs(%1$d)を超えました" -#: storage/file/fd.c:3006 +#: storage/file/fd.c:3122 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "一時ファイル用ディレクトリに想定外のファイルがありました: \"%s\"" -#: storage/file/sharedfileset.c:95 +#: storage/file/sharedfileset.c:111 #, c-format msgid "could not attach to a SharedFileSet that is already destroyed" msgstr "すでに破棄されているため SharedFileSet にアタッチできません" -#: storage/ipc/dsm.c:343 +#: storage/ipc/dsm.c:351 #, c-format msgid "dynamic shared memory control segment is corrupt" msgstr "動的共有メモリの制御セグメントが壊れています" -#: storage/ipc/dsm.c:404 +#: storage/ipc/dsm.c:415 #, c-format msgid "dynamic shared memory control segment is not valid" msgstr "動的共有メモリの制御セグメントの内容が不正です" -#: storage/ipc/dsm.c:500 +#: storage/ipc/dsm.c:592 #, c-format msgid "too many dynamic shared memory segments" msgstr "動的共有メモリセグメントが多すぎます" -#: storage/ipc/dsm_impl.c:230 storage/ipc/dsm_impl.c:517 -#: storage/ipc/dsm_impl.c:621 storage/ipc/dsm_impl.c:792 +#: storage/ipc/dsm_impl.c:233 storage/ipc/dsm_impl.c:529 storage/ipc/dsm_impl.c:633 storage/ipc/dsm_impl.c:804 #, c-format msgid "could not unmap shared memory segment \"%s\": %m" msgstr "共有メモリセグメント\"%s\"をアンマップできませんでした: %m" -#: storage/ipc/dsm_impl.c:240 storage/ipc/dsm_impl.c:527 -#: storage/ipc/dsm_impl.c:631 storage/ipc/dsm_impl.c:802 +#: storage/ipc/dsm_impl.c:243 storage/ipc/dsm_impl.c:539 storage/ipc/dsm_impl.c:643 storage/ipc/dsm_impl.c:814 #, c-format msgid "could not remove shared memory segment \"%s\": %m" msgstr "共有メモリセグメント\"%s\"を削除できませんでした: %m" -#: storage/ipc/dsm_impl.c:261 storage/ipc/dsm_impl.c:702 -#: storage/ipc/dsm_impl.c:816 +#: storage/ipc/dsm_impl.c:267 storage/ipc/dsm_impl.c:714 storage/ipc/dsm_impl.c:828 #, c-format msgid "could not open shared memory segment \"%s\": %m" msgstr "共有メモリセグメント\"%s\"をオープンできませんでした: %m" -#: storage/ipc/dsm_impl.c:285 storage/ipc/dsm_impl.c:543 -#: storage/ipc/dsm_impl.c:747 storage/ipc/dsm_impl.c:840 +#: storage/ipc/dsm_impl.c:292 storage/ipc/dsm_impl.c:555 storage/ipc/dsm_impl.c:759 storage/ipc/dsm_impl.c:852 #, c-format msgid "could not stat shared memory segment \"%s\": %m" msgstr "共有メモリセグメント\"%s\"へのstatが失敗しました: %m" -#: storage/ipc/dsm_impl.c:311 storage/ipc/dsm_impl.c:891 +#: storage/ipc/dsm_impl.c:319 storage/ipc/dsm_impl.c:903 #, c-format msgid "could not resize shared memory segment \"%s\" to %zu bytes: %m" msgstr "共有メモリセグメント\"%s\"の%zuバイトへのサイズ変更ができませんでした: %m" -#: storage/ipc/dsm_impl.c:332 storage/ipc/dsm_impl.c:564 -#: storage/ipc/dsm_impl.c:723 storage/ipc/dsm_impl.c:913 +#: storage/ipc/dsm_impl.c:341 storage/ipc/dsm_impl.c:576 storage/ipc/dsm_impl.c:735 storage/ipc/dsm_impl.c:925 #, c-format msgid "could not map shared memory segment \"%s\": %m" msgstr "共有メモリセグメント\"%s\"をマップできませんでした: %m" -#: storage/ipc/dsm_impl.c:499 +#: storage/ipc/dsm_impl.c:511 #, c-format msgid "could not get shared memory segment: %m" msgstr "共有メモリセグメントを取得できませんでした: %m" -#: storage/ipc/dsm_impl.c:687 +#: storage/ipc/dsm_impl.c:699 #, c-format msgid "could not create shared memory segment \"%s\": %m" msgstr "共有メモリセグメント\"%s\"を作成できませんでした: %m" -#: storage/ipc/dsm_impl.c:924 +#: storage/ipc/dsm_impl.c:936 #, c-format msgid "could not close shared memory segment \"%s\": %m" msgstr "共有メモリセグメント\"%s\"をクローズできませんでした: %m" -#: storage/ipc/dsm_impl.c:963 storage/ipc/dsm_impl.c:1011 +#: storage/ipc/dsm_impl.c:975 storage/ipc/dsm_impl.c:1023 #, c-format msgid "could not duplicate handle for \"%s\": %m" msgstr "\"%s\"のハンドルの複製ができませんでした: %m" #. translator: %s is a syscall name, such as "poll()" -#: storage/ipc/latch.c:860 storage/ipc/latch.c:1093 storage/ipc/latch.c:1219 +#: storage/ipc/latch.c:988 storage/ipc/latch.c:1142 storage/ipc/latch.c:1355 storage/ipc/latch.c:1505 storage/ipc/latch.c:1618 #, c-format msgid "%s failed: %m" msgstr "%s が失敗しました: %m" -#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:929 -#: storage/lmgr/lock.c:967 storage/lmgr/lock.c:2754 storage/lmgr/lock.c:4084 -#: storage/lmgr/lock.c:4149 storage/lmgr/lock.c:4441 -#: storage/lmgr/predicate.c:2404 storage/lmgr/predicate.c:2419 -#: storage/lmgr/predicate.c:3918 storage/lmgr/predicate.c:5075 -#: utils/hash/dynahash.c:1065 +#: storage/ipc/procarray.c:3630 +#, c-format +msgid "database \"%s\" is being used by prepared transaction" +msgstr "データベース\"%s\"は準備済みトランザクションで使用中です" + +#: storage/ipc/procarray.c:3662 storage/ipc/signalfuncs.c:142 +#, c-format +msgid "must be a superuser to terminate superuser process" +msgstr "スーパユーザのプロセスを終了させるにはスーパユーザである必要があります" + +#: storage/ipc/procarray.c:3669 storage/ipc/signalfuncs.c:147 +#, c-format +msgid "must be a member of the role whose process is being terminated or member of pg_signal_backend" +msgstr "終了しようとしているプロセスのロールまたはpg_signal_backendのメンバである必要があります。" + +#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:982 storage/lmgr/lock.c:1020 storage/lmgr/lock.c:2845 storage/lmgr/lock.c:4174 storage/lmgr/lock.c:4239 storage/lmgr/lock.c:4531 storage/lmgr/predicate.c:2401 storage/lmgr/predicate.c:2416 storage/lmgr/predicate.c:3898 storage/lmgr/predicate.c:5009 utils/hash/dynahash.c:1086 #, c-format msgid "out of shared memory" msgstr "共有メモリが足りません" -#: storage/ipc/shmem.c:165 storage/ipc/shmem.c:246 +#: storage/ipc/shmem.c:170 storage/ipc/shmem.c:266 #, c-format msgid "out of shared memory (%zu bytes requested)" msgstr "共有メモリが足りません (%zu バイト要求しました)" -#: storage/ipc/shmem.c:421 +#: storage/ipc/shmem.c:441 #, c-format msgid "could not create ShmemIndex entry for data structure \"%s\"" msgstr "データ構造体\"%s\"のためのShmemIndexエントリを作成できませんでした" -#: storage/ipc/shmem.c:436 +#: storage/ipc/shmem.c:456 #, c-format msgid "ShmemIndex entry size is wrong for data structure \"%s\": expected %zu, actual %zu" msgstr "データ構造体\"%s\"のためのShmemIndexエントリのサイズが誤っています: %zuバイトを期待しましたが、実際は%zuバイトでした" -#: storage/ipc/shmem.c:453 +#: storage/ipc/shmem.c:475 #, c-format msgid "not enough shared memory for data structure \"%s\" (%zu bytes requested)" msgstr "データ構造体\"%s\"のための共有メモリが不足しています ( %zu バイトが必要)" -#: storage/ipc/shmem.c:484 storage/ipc/shmem.c:503 +#: storage/ipc/shmem.c:507 storage/ipc/shmem.c:526 #, c-format msgid "requested shared memory size overflows size_t" msgstr "要求された共有メモリのサイズはsize_tを超えています" @@ -19741,7 +19612,7 @@ msgstr "要求された共有メモリのサイズはsize_tを超えています msgid "PID %d is not a PostgreSQL server process" msgstr "PID %dはPostgreSQLサーバプロセスではありません" -#: storage/ipc/signalfuncs.c:98 storage/lmgr/proc.c:1363 +#: storage/ipc/signalfuncs.c:98 storage/lmgr/proc.c:1362 #, c-format msgid "could not send signal to process %d: %m" msgstr "プロセス%dにシグナルを送信できませんでした: %m" @@ -19756,23 +19627,13 @@ msgstr "スーパユーザの問い合わせをキャンセルするにはスー msgid "must be a member of the role whose query is being canceled or member of pg_signal_backend" msgstr "キャンセルしようとしている問い合わせのロールまたはpg_signal_backendのメンバである必要があります" -#: storage/ipc/signalfuncs.c:142 -#, c-format -msgid "must be a superuser to terminate superuser process" -msgstr "スーパユーザのプロセスを終了させるにはスーパユーザである必要があります" - -#: storage/ipc/signalfuncs.c:147 -#, c-format -msgid "must be a member of the role whose process is being terminated or member of pg_signal_backend" -msgstr "終了しようとしているプロセスのロールまたはpg_signal_backendのメンバである必要があります。" - #: storage/ipc/signalfuncs.c:183 #, c-format msgid "must be superuser to rotate log files with adminpack 1.0" msgstr "adminpack 1.0 でログファイルをローテートするにはスーパユーザである必要があります" #. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:223 +#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:253 #, c-format msgid "Consider using %s, which is part of core, instead." msgstr "代わりにコアの一部である %s の使用を検討してください。" @@ -19782,381 +19643,372 @@ msgstr "代わりにコアの一部である %s の使用を検討してくだ msgid "rotation not possible because log collection not active" msgstr "ログ収集が活動していませんのでローテーションを行うことができません" -#: storage/ipc/standby.c:558 tcop/postgres.c:3110 +#: storage/ipc/standby.c:580 tcop/postgres.c:3177 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "リカバリで競合が発生したためステートメントをキャンセルしています" -#: storage/ipc/standby.c:559 tcop/postgres.c:2384 +#: storage/ipc/standby.c:581 tcop/postgres.c:2469 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "リカバリ時にユーザのトランザクションがバッファのデッドロックを引き起こしました。" -#: storage/large_object/inv_api.c:189 +#: storage/large_object/inv_api.c:191 #, c-format msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" msgstr "OID%u、ページ%dに対応するpg_largeobjectのエントリのデータフィールドの大きさ%dは不正です" -#: storage/large_object/inv_api.c:270 +#: storage/large_object/inv_api.c:272 #, c-format msgid "invalid flags for opening a large object: %d" msgstr "ラージオブジェクトを開くためのフラグが不正です: %d" -#: storage/large_object/inv_api.c:460 +#: storage/large_object/inv_api.c:462 #, c-format msgid "invalid whence setting: %d" msgstr "不正なwhence設定: %d" -#: storage/large_object/inv_api.c:632 +#: storage/large_object/inv_api.c:634 #, c-format msgid "invalid large object write request size: %d" msgstr "ラージオブジェクトの書き出し要求サイズが不正です: %d" -#: storage/lmgr/deadlock.c:1115 +#: storage/lmgr/deadlock.c:1122 #, c-format msgid "Process %d waits for %s on %s; blocked by process %d." msgstr "プロセス %d は %s を %s で待機していましたが、プロセス %d でブロックされました" -#: storage/lmgr/deadlock.c:1134 +#: storage/lmgr/deadlock.c:1141 #, c-format msgid "Process %d: %s" msgstr "プロセス %d: %s" -#: storage/lmgr/deadlock.c:1143 +#: storage/lmgr/deadlock.c:1150 #, c-format msgid "deadlock detected" msgstr "デッドロックを検出しました" -#: storage/lmgr/deadlock.c:1146 +#: storage/lmgr/deadlock.c:1153 #, c-format msgid "See server log for query details." msgstr "問い合わせの詳細はサーバログを参照してください" -#: storage/lmgr/lmgr.c:815 +#: storage/lmgr/lmgr.c:830 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)の更新中" -#: storage/lmgr/lmgr.c:818 +#: storage/lmgr/lmgr.c:833 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)の削除中" -#: storage/lmgr/lmgr.c:821 +#: storage/lmgr/lmgr.c:836 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)のロック中" -#: storage/lmgr/lmgr.c:824 +#: storage/lmgr/lmgr.c:839 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプルの更新後バージョン(%1$u,%2$u)のロック中" -#: storage/lmgr/lmgr.c:827 +#: storage/lmgr/lmgr.c:842 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のインデックスタプル(%1$u,%2$u)の挿入中" -#: storage/lmgr/lmgr.c:830 +#: storage/lmgr/lmgr.c:845 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)の一意性の確認中" -#: storage/lmgr/lmgr.c:833 +#: storage/lmgr/lmgr.c:848 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"の更新されたタプル(%1$u,%2$u)の再チェック中" -#: storage/lmgr/lmgr.c:836 +#: storage/lmgr/lmgr.c:851 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)に対する排除制約のチェック中" -#: storage/lmgr/lmgr.c:1091 +#: storage/lmgr/lmgr.c:1106 #, c-format msgid "relation %u of database %u" msgstr "データベース%2$uのリレーション%1$u" -#: storage/lmgr/lmgr.c:1097 +#: storage/lmgr/lmgr.c:1112 #, c-format msgid "extension of relation %u of database %u" msgstr "データベース%2$uのリレーション%1$uの拡張" -#: storage/lmgr/lmgr.c:1103 +#: storage/lmgr/lmgr.c:1118 +#, c-format +msgid "pg_database.datfrozenxid of database %u" +msgstr "データベース%uのpg_database.datfrozenxid" + +#: storage/lmgr/lmgr.c:1123 #, c-format msgid "page %u of relation %u of database %u" msgstr "データベース%3$uのリレーション%2$uのページ%1$u" -#: storage/lmgr/lmgr.c:1110 +#: storage/lmgr/lmgr.c:1130 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "データベース%4$uのリレーション%3$uのタプル(%2$u,%1$u)" -#: storage/lmgr/lmgr.c:1118 +#: storage/lmgr/lmgr.c:1138 #, c-format msgid "transaction %u" msgstr "トランザクション %u" -#: storage/lmgr/lmgr.c:1123 +#: storage/lmgr/lmgr.c:1143 #, c-format msgid "virtual transaction %d/%u" msgstr "仮想トランザクション %d/%u" -#: storage/lmgr/lmgr.c:1129 +#: storage/lmgr/lmgr.c:1149 #, c-format msgid "speculative token %u of transaction %u" msgstr "トランザクション%2$uの投機的書き込みトークン%1$u" -#: storage/lmgr/lmgr.c:1135 +#: storage/lmgr/lmgr.c:1155 #, c-format msgid "object %u of class %u of database %u" msgstr "データベース%3$uのリレーション%2$uのオブジェクト%1$u" -#: storage/lmgr/lmgr.c:1143 +#: storage/lmgr/lmgr.c:1163 #, c-format msgid "user lock [%u,%u,%u]" msgstr "ユーザロック[%u,%u,%u]" -#: storage/lmgr/lmgr.c:1150 +#: storage/lmgr/lmgr.c:1170 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "アドバイザリ・ロック[%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1158 +#: storage/lmgr/lmgr.c:1178 #, c-format msgid "unrecognized locktag type %d" msgstr "ロックタグタイプ%dは不明です" -#: storage/lmgr/lock.c:764 +#: storage/lmgr/lock.c:803 #, c-format msgid "cannot acquire lock mode %s on database objects while recovery is in progress" msgstr "リカバリの実行中はデータベースオブジェクトでロックモード %s を獲得できません" -#: storage/lmgr/lock.c:766 +#: storage/lmgr/lock.c:805 #, c-format msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." msgstr "リカバリの実行中は、データベースオブジェクトで RowExclusiveLock もしくはそれ以下だけが獲得できます" -#: storage/lmgr/lock.c:930 storage/lmgr/lock.c:968 storage/lmgr/lock.c:2755 -#: storage/lmgr/lock.c:4085 storage/lmgr/lock.c:4150 storage/lmgr/lock.c:4442 +#: storage/lmgr/lock.c:983 storage/lmgr/lock.c:1021 storage/lmgr/lock.c:2846 storage/lmgr/lock.c:4175 storage/lmgr/lock.c:4240 storage/lmgr/lock.c:4532 #, c-format msgid "You might need to increase max_locks_per_transaction." msgstr "max_locks_per_transactionを増やす必要があるかもしれません" -#: storage/lmgr/lock.c:3201 storage/lmgr/lock.c:3317 +#: storage/lmgr/lock.c:3292 storage/lmgr/lock.c:3408 #, c-format msgid "cannot PREPARE while holding both session-level and transaction-level locks on the same object" msgstr "同一オブジェクト上にセッションレベルとトランザクションレベルのロックの両方を保持している時にPREPAREすることはできません" -#: storage/lmgr/predicate.c:703 +#: storage/lmgr/predicate.c:700 #, c-format msgid "not enough elements in RWConflictPool to record a read/write conflict" msgstr "RWConflictPoolに読み書き競合を記録するための要素が不足しています" -#: storage/lmgr/predicate.c:704 storage/lmgr/predicate.c:732 +#: storage/lmgr/predicate.c:701 storage/lmgr/predicate.c:729 #, c-format msgid "You might need to run fewer transactions at a time or increase max_connections." msgstr "トランザクションの同時実行数を減らすか max_connections を増やす必要があるかもしれません" -#: storage/lmgr/predicate.c:731 +#: storage/lmgr/predicate.c:728 #, c-format msgid "not enough elements in RWConflictPool to record a potential read/write conflict" msgstr "RWConflictPoolに読み書き競合の可能性を記録するための要素が不足しています" -#: storage/lmgr/predicate.c:1538 +#: storage/lmgr/predicate.c:1535 #, c-format msgid "deferrable snapshot was unsafe; trying a new one" msgstr "遅延可能スナップショットは安全ではありません。新しいスナップショットを取得しようとしています。" -#: storage/lmgr/predicate.c:1627 +#: storage/lmgr/predicate.c:1624 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "\"default_transaction_isolation\"が\"serializable\"に設定されました。" -#: storage/lmgr/predicate.c:1628 +#: storage/lmgr/predicate.c:1625 #, c-format msgid "You can use \"SET default_transaction_isolation = 'repeatable read'\" to change the default." msgstr "このデフォルトを変更するためには\"SET default_transaction_isolation = 'repeatable read'\"を使用することができます。" -#: storage/lmgr/predicate.c:1679 +#: storage/lmgr/predicate.c:1676 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "スナップショットをインポートするトランザクションはREAD ONLY DEFERRABLEではいけません" -#: storage/lmgr/predicate.c:1758 utils/time/snapmgr.c:623 -#: utils/time/snapmgr.c:629 +#: storage/lmgr/predicate.c:1755 utils/time/snapmgr.c:618 utils/time/snapmgr.c:624 #, c-format msgid "could not import the requested snapshot" msgstr "要求したスナップショットをインポートできませんでした" -#: storage/lmgr/predicate.c:1759 utils/time/snapmgr.c:630 +#: storage/lmgr/predicate.c:1756 utils/time/snapmgr.c:625 #, c-format msgid "The source process with PID %d is not running anymore." msgstr "PID%dであるソースプロセスは既に実行中ではありません。" -#: storage/lmgr/predicate.c:2405 storage/lmgr/predicate.c:2420 -#: storage/lmgr/predicate.c:3919 +#: storage/lmgr/predicate.c:2402 storage/lmgr/predicate.c:2417 storage/lmgr/predicate.c:3899 #, c-format msgid "You might need to increase max_pred_locks_per_transaction." msgstr "max_pred_locks_per_transaction を増やす必要があるかもしれません" -#: storage/lmgr/predicate.c:4075 storage/lmgr/predicate.c:4164 -#: storage/lmgr/predicate.c:4172 storage/lmgr/predicate.c:4211 -#: storage/lmgr/predicate.c:4454 storage/lmgr/predicate.c:4791 -#: storage/lmgr/predicate.c:4803 storage/lmgr/predicate.c:4846 -#: storage/lmgr/predicate.c:4884 +#: storage/lmgr/predicate.c:4030 storage/lmgr/predicate.c:4066 storage/lmgr/predicate.c:4099 storage/lmgr/predicate.c:4107 storage/lmgr/predicate.c:4146 storage/lmgr/predicate.c:4388 storage/lmgr/predicate.c:4725 storage/lmgr/predicate.c:4737 storage/lmgr/predicate.c:4780 storage/lmgr/predicate.c:4818 #, c-format msgid "could not serialize access due to read/write dependencies among transactions" msgstr "トランザクション間で read/write の依存性があったため、アクセスの直列化ができませんでした" -#: storage/lmgr/predicate.c:4077 storage/lmgr/predicate.c:4166 -#: storage/lmgr/predicate.c:4174 storage/lmgr/predicate.c:4213 -#: storage/lmgr/predicate.c:4456 storage/lmgr/predicate.c:4793 -#: storage/lmgr/predicate.c:4805 storage/lmgr/predicate.c:4848 -#: storage/lmgr/predicate.c:4886 +#: storage/lmgr/predicate.c:4032 storage/lmgr/predicate.c:4068 storage/lmgr/predicate.c:4101 storage/lmgr/predicate.c:4109 storage/lmgr/predicate.c:4148 storage/lmgr/predicate.c:4390 storage/lmgr/predicate.c:4727 storage/lmgr/predicate.c:4739 storage/lmgr/predicate.c:4782 storage/lmgr/predicate.c:4820 #, c-format msgid "The transaction might succeed if retried." msgstr "リトライが行われた場合、このトランザクションは成功するかもしれません" -#: storage/lmgr/proc.c:359 +#: storage/lmgr/proc.c:355 #, c-format msgid "number of requested standby connections exceeds max_wal_senders (currently %d)" msgstr "要求されたスタンバイ接続が max_wal_senders を超えています(現在は %d)" -#: storage/lmgr/proc.c:1334 +#: storage/lmgr/proc.c:1333 #, c-format msgid "Process %d waits for %s on %s." msgstr "プロセス%dは%sを%sで待機しています。" -#: storage/lmgr/proc.c:1345 +#: storage/lmgr/proc.c:1344 #, c-format msgid "sending cancel to blocking autovacuum PID %d" msgstr "ブロックしている自動VACUUMプロセスのPID %dへキャンセルを送付しています" -#: storage/lmgr/proc.c:1465 +#: storage/lmgr/proc.c:1464 #, c-format msgid "process %d avoided deadlock for %s on %s by rearranging queue order after %ld.%03d ms" msgstr "プロセス%1$dは、%4$ld.%5$03d ms後にキューの順番を再調整することで、%3$s上の%2$sに対するデッドロックを防ぎました。" -#: storage/lmgr/proc.c:1480 +#: storage/lmgr/proc.c:1479 #, c-format msgid "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "プロセス%1$dは、%3$s上の%2$sに対し%4$ld.%5$03d ms待機するデッドロックを検知しました" -#: storage/lmgr/proc.c:1489 +#: storage/lmgr/proc.c:1488 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "プロセス%dは%sを%sで待機しています。%ld.%03dミリ秒後" -#: storage/lmgr/proc.c:1496 +#: storage/lmgr/proc.c:1495 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "プロセス%1$dは%4$ld.%5$03d ms後に%3$s上の%2$sを獲得しました" -#: storage/lmgr/proc.c:1512 +#: storage/lmgr/proc.c:1511 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "プロセス%1$dは%4$ld.%5$03d ms後に%3$s上で%2$sを獲得することに失敗しました" -#: storage/page/bufpage.c:152 +#: storage/page/bufpage.c:145 #, c-format msgid "page verification failed, calculated checksum %u but expected %u" msgstr "ページ検証が失敗しました。計算されたチェックサムは%uですが想定は%uです" -#: storage/page/bufpage.c:216 storage/page/bufpage.c:510 -#: storage/page/bufpage.c:747 storage/page/bufpage.c:880 -#: storage/page/bufpage.c:976 storage/page/bufpage.c:1086 +#: storage/page/bufpage.c:209 storage/page/bufpage.c:503 storage/page/bufpage.c:740 storage/page/bufpage.c:873 storage/page/bufpage.c:969 storage/page/bufpage.c:1081 #, c-format msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" msgstr "ページポインタが破損しています: lower = %u, upper = %u, special = %u\"" -#: storage/page/bufpage.c:532 +#: storage/page/bufpage.c:525 #, c-format msgid "corrupted line pointer: %u" msgstr "ラインポインタが破損しています: %u" -#: storage/page/bufpage.c:559 storage/page/bufpage.c:931 +#: storage/page/bufpage.c:552 storage/page/bufpage.c:924 #, c-format msgid "corrupted item lengths: total %u, available space %u" msgstr "アイテム長が破損しています: 合計 %u 利用可能空間 %u" -#: storage/page/bufpage.c:766 storage/page/bufpage.c:904 -#: storage/page/bufpage.c:992 storage/page/bufpage.c:1102 +#: storage/page/bufpage.c:759 storage/page/bufpage.c:897 storage/page/bufpage.c:985 storage/page/bufpage.c:1097 #, c-format msgid "corrupted line pointer: offset = %u, size = %u" msgstr "ラインポインタが破損しています: オフセット = %u サイズ = %u" -#: storage/smgr/md.c:320 storage/smgr/md.c:815 +#: storage/smgr/md.c:333 storage/smgr/md.c:836 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "ファイル\"%s\"の切り詰め処理ができませんでした: %m" -#: storage/smgr/md.c:394 +#: storage/smgr/md.c:407 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "ファイル\"%s\"を%uブロック以上に拡張できません" -#: storage/smgr/md.c:409 +#: storage/smgr/md.c:422 #, c-format msgid "could not extend file \"%s\": %m" msgstr "ファイル\"%s\"を拡張できませんでした: %m" -#: storage/smgr/md.c:411 storage/smgr/md.c:418 storage/smgr/md.c:698 +#: storage/smgr/md.c:424 storage/smgr/md.c:431 storage/smgr/md.c:719 #, c-format msgid "Check free disk space." msgstr "ディスクの空き容量をチェックしてください。" -#: storage/smgr/md.c:415 +#: storage/smgr/md.c:428 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "ファイル\"%1$s\"を拡張できませんでした: %4$uブロックで%3$dバイト中%2$dバイト分のみを書き出しました。" -#: storage/smgr/md.c:619 +#: storage/smgr/md.c:640 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "ファイル\"%2$s\"で%1$uブロックを読み取れませんでした: %3$m" -#: storage/smgr/md.c:635 +#: storage/smgr/md.c:656 #, c-format msgid "could not read block %u in file \"%s\": read only %d of %d bytes" msgstr "ファイル\"%2$s\"のブロック%1$uを読み取れませんでした: %4$dバイト中%3$dバイト分のみ読み取りました" -#: storage/smgr/md.c:689 +#: storage/smgr/md.c:710 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "ファイル\"%2$s\"で%1$uブロックが書き出せませんでした: %3$m" -#: storage/smgr/md.c:694 +#: storage/smgr/md.c:715 #, c-format msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "ファイル\"%2$s\"のブロック%1$uを書き込めませんでした: %4$dバイト中%3$dバイト分のみ書き込みました" -#: storage/smgr/md.c:786 +#: storage/smgr/md.c:807 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "ファイル\"%s\"を%uブロックに切り詰められませんでした: 現在は%uブロックのみとなりました" -#: storage/smgr/md.c:841 +#: storage/smgr/md.c:862 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "ファイル\"%s\"を%uブロックに切り詰められませんでした: %m" -#: storage/smgr/md.c:913 +#: storage/smgr/md.c:957 #, c-format msgid "could not forward fsync request because request queue is full" msgstr "リクエストキューが満杯につき fsync リクエストのフォワードができませんでした" -#: storage/smgr/md.c:1210 +#: storage/smgr/md.c:1256 #, c-format msgid "could not open file \"%s\" (target block %u): previous segment is only %u blocks" msgstr "ファイル\"%s\"(対象ブロック%u)をオープンできませんでした: 直前のセグメントは%uブロックだけでした" -#: storage/smgr/md.c:1224 +#: storage/smgr/md.c:1270 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "ファイル \"%s\"(対象ブロック %u)をオープンできませんでした: %m" -#: storage/sync/sync.c:400 +#: storage/sync/sync.c:401 #, c-format msgid "could not fsync file \"%s\" but retrying: %m" msgstr "ファイル\"%s\"をfsyncできませんでした: %m" @@ -20171,8 +20023,7 @@ msgstr "関数呼び出しメッセージ内の引数サイズ%dが不正です" msgid "fastpath function call: \"%s\" (OID %u)" msgstr "近道関数呼び出し: \"%s\"(OID %u))" -#: tcop/fastpath.c:389 tcop/postgres.c:1288 tcop/postgres.c:1551 -#: tcop/postgres.c:1918 tcop/postgres.c:2139 +#: tcop/fastpath.c:389 tcop/postgres.c:1323 tcop/postgres.c:1581 tcop/postgres.c:2013 tcop/postgres.c:2250 #, c-format msgid "duration: %s ms" msgstr "期間: %s ミリ秒" @@ -20197,141 +20048,140 @@ msgstr "関数呼び出しメッセージには%dの引数書式がありまし msgid "incorrect binary data format in function argument %d" msgstr "関数引数%dのバイナリデータ書式が不正です" -#: tcop/postgres.c:359 tcop/postgres.c:395 tcop/postgres.c:422 +#: tcop/postgres.c:355 tcop/postgres.c:391 tcop/postgres.c:418 #, c-format msgid "unexpected EOF on client connection" msgstr "クライアント接続に想定外のEOFがありました" -#: tcop/postgres.c:445 tcop/postgres.c:457 tcop/postgres.c:468 -#: tcop/postgres.c:480 tcop/postgres.c:4460 +#: tcop/postgres.c:441 tcop/postgres.c:453 tcop/postgres.c:464 tcop/postgres.c:476 tcop/postgres.c:4539 #, c-format msgid "invalid frontend message type %d" msgstr "フロントエンドメッセージタイプ%dが不正です" -#: tcop/postgres.c:1043 +#: tcop/postgres.c:1042 #, c-format msgid "statement: %s" msgstr "文: %s" -#: tcop/postgres.c:1293 +#: tcop/postgres.c:1328 #, c-format msgid "duration: %s ms statement: %s" msgstr "期間: %s ミリ秒 文: %s" -#: tcop/postgres.c:1343 +#: tcop/postgres.c:1377 #, c-format msgid "parse %s: %s" msgstr "パース %s: %s" -#: tcop/postgres.c:1400 +#: tcop/postgres.c:1434 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "準備された文に複数のコマンドを挿入できません" -#: tcop/postgres.c:1556 +#: tcop/postgres.c:1586 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "期間: %s ミリ秒 パース%s : %s" -#: tcop/postgres.c:1601 +#: tcop/postgres.c:1633 #, c-format msgid "bind %s to %s" msgstr "バインド%s: %s" -#: tcop/postgres.c:1620 tcop/postgres.c:2431 +#: tcop/postgres.c:1652 tcop/postgres.c:2516 #, c-format msgid "unnamed prepared statement does not exist" msgstr "無名の準備された文が存在しません" -#: tcop/postgres.c:1661 +#: tcop/postgres.c:1693 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "バインドメッセージは%dパラメータ書式ありましたがパラメータは%dでした" -#: tcop/postgres.c:1667 +#: tcop/postgres.c:1699 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "バインドメッセージは%dパラメータを提供しましたが、準備された文\"%s\"では%d必要でした" -#: tcop/postgres.c:1827 +#: tcop/postgres.c:1897 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "バインドパラメータ%dにおいてバイナリデータ書式が不正です" -#: tcop/postgres.c:1923 +#: tcop/postgres.c:2018 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "期間: %s ミリ秒 バインド %s%s%s: %s" -#: tcop/postgres.c:1971 tcop/postgres.c:2515 +#: tcop/postgres.c:2068 tcop/postgres.c:2600 #, c-format msgid "portal \"%s\" does not exist" msgstr "ポータル\"%s\"は存在しません" -#: tcop/postgres.c:2056 +#: tcop/postgres.c:2153 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2058 tcop/postgres.c:2147 +#: tcop/postgres.c:2155 tcop/postgres.c:2258 msgid "execute fetch from" msgstr "取り出し実行" -#: tcop/postgres.c:2059 tcop/postgres.c:2148 +#: tcop/postgres.c:2156 tcop/postgres.c:2259 msgid "execute" msgstr "実行" -#: tcop/postgres.c:2144 +#: tcop/postgres.c:2255 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "期間: %s ミリ秒 %s %s%s%s: %s" -#: tcop/postgres.c:2272 +#: tcop/postgres.c:2401 #, c-format msgid "prepare: %s" msgstr "準備: %s" -#: tcop/postgres.c:2337 +#: tcop/postgres.c:2426 #, c-format msgid "parameters: %s" msgstr "パラメータ: %s" -#: tcop/postgres.c:2356 +#: tcop/postgres.c:2441 #, c-format msgid "abort reason: recovery conflict" msgstr "異常終了の理由: リカバリが衝突したため" -#: tcop/postgres.c:2372 +#: tcop/postgres.c:2457 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "ユーザが共有バッファ・ピンを長く保持し過ぎていました" -#: tcop/postgres.c:2375 +#: tcop/postgres.c:2460 #, c-format msgid "User was holding a relation lock for too long." msgstr "ユーザリレーションのロックを長く保持し過ぎていました" -#: tcop/postgres.c:2378 +#: tcop/postgres.c:2463 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "削除されるべきテーブルスペースをユーザが使っていました(もしくはその可能性がありました)。" -#: tcop/postgres.c:2381 +#: tcop/postgres.c:2466 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "削除されるべきバージョンの行をユーザ問い合わせが参照しなければならなかった可能性がありました。" -#: tcop/postgres.c:2387 +#: tcop/postgres.c:2472 #, c-format msgid "User was connected to a database that must be dropped." msgstr "削除されるべきデータベースにユーザが接続していました。" -#: tcop/postgres.c:2711 +#: tcop/postgres.c:2796 #, c-format msgid "terminating connection because of crash of another server process" msgstr "他のサーバプロセスがクラッシュしたため接続を終了します" -#: tcop/postgres.c:2712 +#: tcop/postgres.c:2797 #, c-format msgid "The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory." msgstr "" @@ -20339,191 +20189,191 @@ msgstr "" "postmasterはこのサーバプロセスに対し、現在のトランザクションをロールバック\n" "し終了するよう指示しました。" -#: tcop/postgres.c:2716 tcop/postgres.c:3040 +#: tcop/postgres.c:2801 tcop/postgres.c:3107 #, c-format msgid "In a moment you should be able to reconnect to the database and repeat your command." msgstr "この後、データベースに再接続し、コマンドを繰り返さなければなりません。" -#: tcop/postgres.c:2798 +#: tcop/postgres.c:2883 #, c-format msgid "floating-point exception" msgstr "浮動小数点例外" -#: tcop/postgres.c:2799 +#: tcop/postgres.c:2884 #, c-format msgid "An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero." msgstr "不正な浮動小数点演算がシグナルされました。おそらくこれは、範囲外の結果もしくは0除算のような不正な演算によるものです。" -#: tcop/postgres.c:2970 +#: tcop/postgres.c:3037 #, c-format msgid "canceling authentication due to timeout" msgstr "タイムアウトにより認証処理をキャンセルしています" -#: tcop/postgres.c:2974 +#: tcop/postgres.c:3041 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "管理者コマンドにより自動VACUUM処理を終了しています" -#: tcop/postgres.c:2978 +#: tcop/postgres.c:3045 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "管理者コマンドにより、論理レプリケーションワーカを終了します" -#: tcop/postgres.c:2982 +#: tcop/postgres.c:3049 #, c-format msgid "logical replication launcher shutting down" msgstr "論理レプリケーションランチャを停止します" -#: tcop/postgres.c:2995 tcop/postgres.c:3005 tcop/postgres.c:3038 +#: tcop/postgres.c:3062 tcop/postgres.c:3072 tcop/postgres.c:3105 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "リカバリで競合が発生したため、接続を終了しています" -#: tcop/postgres.c:3011 +#: tcop/postgres.c:3078 #, c-format msgid "terminating connection due to administrator command" msgstr "管理者コマンドにより接続を終了しています" -#: tcop/postgres.c:3021 +#: tcop/postgres.c:3088 #, c-format msgid "connection to client lost" msgstr "クライアントへの接続が切れました。" -#: tcop/postgres.c:3087 +#: tcop/postgres.c:3154 #, c-format msgid "canceling statement due to lock timeout" msgstr "ロックのタイムアウトのためステートメントをキャンセルしています" -#: tcop/postgres.c:3094 +#: tcop/postgres.c:3161 #, c-format msgid "canceling statement due to statement timeout" msgstr "ステートメントのタイムアウトのためステートメントをキャンセルしています" -#: tcop/postgres.c:3101 +#: tcop/postgres.c:3168 #, c-format msgid "canceling autovacuum task" msgstr "自動VACUUM処理をキャンセルしています" -#: tcop/postgres.c:3124 +#: tcop/postgres.c:3191 #, c-format msgid "canceling statement due to user request" msgstr "ユーザからの要求により文をキャンセルしています" -#: tcop/postgres.c:3134 +#: tcop/postgres.c:3201 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "トランザクション中アイドルタイムアウトのため接続を終了します" -#: tcop/postgres.c:3248 +#: tcop/postgres.c:3318 #, c-format msgid "stack depth limit exceeded" msgstr "スタック長制限を越えました" -#: tcop/postgres.c:3249 +#: tcop/postgres.c:3319 #, c-format msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." msgstr "お使いのプラットフォームにおけるスタック長の制限に適合することを確認後、設定パラメータ \"max_stack_depth\"(現在 %dkB)を増やしてください。" -#: tcop/postgres.c:3312 +#: tcop/postgres.c:3382 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "\"max_stack_depth\"は%ldkBを越えてはなりません。" -#: tcop/postgres.c:3314 +#: tcop/postgres.c:3384 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "プラットフォームのスタック長制限を\"ulimit -s\"または同等の機能を使用して増加してください" -#: tcop/postgres.c:3674 +#: tcop/postgres.c:3744 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "サーバプロセスに対する不正なコマンドライン引数: %s" -#: tcop/postgres.c:3675 tcop/postgres.c:3681 +#: tcop/postgres.c:3745 tcop/postgres.c:3751 #, c-format msgid "Try \"%s --help\" for more information." msgstr "詳細は\"%s --help\"を実行してください。" -#: tcop/postgres.c:3679 +#: tcop/postgres.c:3749 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: 不正なコマンドライン引数: %s" -#: tcop/postgres.c:3741 +#: tcop/postgres.c:3811 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: データベース名もユーザ名も指定されていません" -#: tcop/postgres.c:4368 +#: tcop/postgres.c:4447 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "不正なCLOSEメッセージのサブタイプ%d" -#: tcop/postgres.c:4403 +#: tcop/postgres.c:4482 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "不正なDESCRIBEメッセージのサブタイプ%d" -#: tcop/postgres.c:4481 +#: tcop/postgres.c:4560 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "レプリケーション接続では高速関数呼び出しはサポートされていません" -#: tcop/postgres.c:4485 +#: tcop/postgres.c:4564 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "レプリケーション接続では拡張問い合わせプロトコルはサポートされていません" -#: tcop/postgres.c:4662 +#: tcop/postgres.c:4741 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "接続を切断: セッション時間: %d:%02d:%02d.%03d ユーザ=%s データベース=%s ホスト=%s%s%s" -#: tcop/pquery.c:642 +#: tcop/pquery.c:629 #, c-format msgid "bind message has %d result formats but query has %d columns" msgstr "バインドメッセージは%dの結果書式がありましたが、問い合わせは%d列でした" -#: tcop/pquery.c:949 +#: tcop/pquery.c:932 #, c-format msgid "cursor can only scan forward" msgstr "カーゾルは前方へのスキャンしかできません" -#: tcop/pquery.c:950 +#: tcop/pquery.c:933 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "後方スキャンを有効にするためにはSCROLLオプションを付けて宣言してください。" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:245 +#: tcop/utility.c:413 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "リードオンリーのトランザクションでは %s を実行できません" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:263 +#: tcop/utility.c:431 #, c-format msgid "cannot execute %s during a parallel operation" msgstr "並列処理中は%sを実行できません" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:282 +#: tcop/utility.c:450 #, c-format msgid "cannot execute %s during recovery" msgstr "リカバリ中は %s を実行できません" #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:300 +#: tcop/utility.c:468 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "セキュリティー制限操作の中では %s を実行できません" -#: tcop/utility.c:760 +#: tcop/utility.c:912 #, c-format msgid "must be superuser to do CHECKPOINT" msgstr "CHECKPOINTを実行するにはスーパユーザである必要があります" -#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:624 +#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:620 #, c-format msgid "multiple DictFile parameters" msgstr "重複するDictFileパラメータ" @@ -20543,7 +20393,7 @@ msgstr "認識不可のIspellパラメータ: \"%s\"" msgid "missing AffFile parameter" msgstr "AffFileパラメータがありません" -#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:648 +#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:644 #, c-format msgid "missing DictFile parameter" msgstr "DictFileパラメータがありません" @@ -20613,38 +20463,37 @@ msgstr "シソーラスサンプル単語\"%s\"はストップワードです( msgid "Use \"?\" to represent a stop word within a sample phrase." msgstr "サンプルフレーズ内のストップワードを表すには\"?\"を使用してください" -#: tsearch/dict_thesaurus.c:576 +#: tsearch/dict_thesaurus.c:572 #, c-format msgid "thesaurus substitute word \"%s\" is a stop word (rule %d)" msgstr "シソーラス置換単語\"%s\"はストップワードです(規則%d)" -#: tsearch/dict_thesaurus.c:583 +#: tsearch/dict_thesaurus.c:579 #, c-format msgid "thesaurus substitute word \"%s\" isn't recognized by subdictionary (rule %d)" msgstr "シソーラス置換単語\"%s\"は副辞書で認識されません(規則%d)" -#: tsearch/dict_thesaurus.c:595 +#: tsearch/dict_thesaurus.c:591 #, c-format msgid "thesaurus substitute phrase is empty (rule %d)" msgstr "シソーラス置換フレーズは空です(規則%d)" -#: tsearch/dict_thesaurus.c:633 +#: tsearch/dict_thesaurus.c:629 #, c-format msgid "multiple Dictionary parameters" msgstr "重複する辞書パラメータ" -#: tsearch/dict_thesaurus.c:640 +#: tsearch/dict_thesaurus.c:636 #, c-format msgid "unrecognized Thesaurus parameter: \"%s\"" msgstr "認識できないシソーラスパラメータ \"%s\"" -#: tsearch/dict_thesaurus.c:652 +#: tsearch/dict_thesaurus.c:648 #, c-format msgid "missing Dictionary parameter" msgstr "Dictionaryパラメータがありません" -#: tsearch/spell.c:380 tsearch/spell.c:397 tsearch/spell.c:406 -#: tsearch/spell.c:1036 +#: tsearch/spell.c:380 tsearch/spell.c:397 tsearch/spell.c:406 tsearch/spell.c:1036 #, c-format msgid "invalid affix flag \"%s\"" msgstr "不正な接辞フラグ\"%s\"" @@ -20674,8 +20523,7 @@ msgstr "辞書ファイル\"%s\"をオープンできませんでした: %m" msgid "invalid regular expression: %s" msgstr "正規表現が不正です: %s" -#: tsearch/spell.c:1163 tsearch/spell.c:1175 tsearch/spell.c:1734 -#: tsearch/spell.c:1739 tsearch/spell.c:1744 +#: tsearch/spell.c:1163 tsearch/spell.c:1175 tsearch/spell.c:1734 tsearch/spell.c:1739 tsearch/spell.c:1744 #, c-format msgid "invalid affix alias \"%s\"" msgstr "不正な接辞の別名 \"%s\"" @@ -20705,7 +20553,7 @@ msgstr "別名の数が指定された数 %d を超えています" msgid "affix file contains both old-style and new-style commands" msgstr "接辞ファイルが新旧両方の形式のコマンドを含んでいます" -#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:271 utils/adt/tsvector_op.c:1132 +#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "TSベクターのための文字列が長すぎます(%dバイト、最大は%dバイト)" @@ -20720,14 +20568,12 @@ msgstr "設定ファイル\"%2$s\"の%1$d行目: \"%3$s\"" msgid "conversion from wchar_t to server encoding failed: %m" msgstr "wchar_tからサーバ符号化方式への変換が失敗しました: %m" -#: tsearch/ts_parse.c:390 tsearch/ts_parse.c:397 tsearch/ts_parse.c:566 -#: tsearch/ts_parse.c:573 +#: tsearch/ts_parse.c:386 tsearch/ts_parse.c:393 tsearch/ts_parse.c:562 tsearch/ts_parse.c:569 #, c-format msgid "word is too long to be indexed" msgstr "インデックス付けするには単語が長すぎます" -#: tsearch/ts_parse.c:391 tsearch/ts_parse.c:398 tsearch/ts_parse.c:567 -#: tsearch/ts_parse.c:574 +#: tsearch/ts_parse.c:387 tsearch/ts_parse.c:394 tsearch/ts_parse.c:563 tsearch/ts_parse.c:570 #, c-format msgid "Words longer than %d characters are ignored." msgstr "%dより長い単語は無視されます。" @@ -20742,159 +20588,152 @@ msgstr "テキスト検索設定ファイル名は%sは不正です" msgid "could not open stop-word file \"%s\": %m" msgstr "ストップワードファイル\"%s\"をオープンできませんでした: %m" -#: tsearch/wparser.c:322 tsearch/wparser.c:410 tsearch/wparser.c:487 +#: tsearch/wparser.c:313 tsearch/wparser.c:401 tsearch/wparser.c:478 #, c-format msgid "text search parser does not support headline creation" msgstr "テキスト検索パーサは見出し作成をサポートしません" -#: tsearch/wparser_def.c:2486 +#: tsearch/wparser_def.c:2578 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "認識できない見出しパラメータ: \"%s\"" -#: tsearch/wparser_def.c:2495 +#: tsearch/wparser_def.c:2597 #, c-format msgid "MinWords should be less than MaxWords" msgstr "MinWordsはMaxWordsより小さくなければなりません" -#: tsearch/wparser_def.c:2499 +#: tsearch/wparser_def.c:2601 #, c-format msgid "MinWords should be positive" msgstr "MinWordsは正でなければなりません" -#: tsearch/wparser_def.c:2503 +#: tsearch/wparser_def.c:2605 #, c-format msgid "ShortWord should be >= 0" msgstr "ShortWordは>= 0でなければなりません" -#: tsearch/wparser_def.c:2507 +#: tsearch/wparser_def.c:2609 #, c-format msgid "MaxFragments should be >= 0" msgstr "MaxFragments は 0 以上でなければなりません" -#: utils/adt/acl.c:171 utils/adt/name.c:93 +#: utils/adt/acl.c:172 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "識別子が長すぎます" -#: utils/adt/acl.c:172 utils/adt/name.c:94 +#: utils/adt/acl.c:173 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "識別子は%d文字より短くなければなりません。" -#: utils/adt/acl.c:258 +#: utils/adt/acl.c:256 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "キーワードが不明です: \"%s\"" -#: utils/adt/acl.c:259 +#: utils/adt/acl.c:257 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "ACLキーワードは\"group\"または\"user\"でなければなりません。" -#: utils/adt/acl.c:264 +#: utils/adt/acl.c:262 #, c-format msgid "missing name" msgstr "名前がありません" -#: utils/adt/acl.c:265 +#: utils/adt/acl.c:263 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "\"group\"または\"user\"キーワードの後には名前が必要です。" -#: utils/adt/acl.c:271 +#: utils/adt/acl.c:269 #, c-format msgid "missing \"=\" sign" msgstr "\"=\"記号がありません" -#: utils/adt/acl.c:324 +#: utils/adt/acl.c:322 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "不正なモード文字: \"%s\"の一つでなければなりません" -#: utils/adt/acl.c:346 +#: utils/adt/acl.c:344 #, c-format msgid "a name must follow the \"/\" sign" msgstr "\"/\"記号の後には名前が必要です" -#: utils/adt/acl.c:354 +#: utils/adt/acl.c:352 #, c-format msgid "defaulting grantor to user ID %u" msgstr "権限付与者をデフォルトのユーザID %uにしています" -#: utils/adt/acl.c:545 +#: utils/adt/acl.c:538 #, c-format msgid "ACL array contains wrong data type" msgstr "ACL配列に不正なデータ型があります。" -#: utils/adt/acl.c:549 +#: utils/adt/acl.c:542 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "ACL配列は1次元の配列でなければなりません" -#: utils/adt/acl.c:553 +#: utils/adt/acl.c:546 #, c-format msgid "ACL arrays must not contain null values" msgstr "ACL配列にはNULL値を含めてはいけません" -#: utils/adt/acl.c:577 +#: utils/adt/acl.c:570 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "ACL指定の後に余計なごみがあります" -#: utils/adt/acl.c:1212 +#: utils/adt/acl.c:1205 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "グラントオプションでその権限付与者に権限を戻すことはできません" -#: utils/adt/acl.c:1273 +#: utils/adt/acl.c:1266 #, c-format msgid "dependent privileges exist" msgstr "依存する権限が存在します" -#: utils/adt/acl.c:1274 +#: utils/adt/acl.c:1267 #, c-format msgid "Use CASCADE to revoke them too." msgstr "これらも取り上げるにはCASCADEを使用してください" -#: utils/adt/acl.c:1536 +#: utils/adt/acl.c:1521 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsertはもうサポートされていません" -#: utils/adt/acl.c:1546 +#: utils/adt/acl.c:1531 #, c-format msgid "aclremove is no longer supported" msgstr "aclremoveはもうサポートされていません" -#: utils/adt/acl.c:1632 utils/adt/acl.c:1686 +#: utils/adt/acl.c:1617 utils/adt/acl.c:1671 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "権限タイプが不明です: \"%s\"" -#: utils/adt/acl.c:3486 utils/adt/regproc.c:102 utils/adt/regproc.c:277 +#: utils/adt/acl.c:3471 utils/adt/regproc.c:101 utils/adt/regproc.c:276 #, c-format msgid "function \"%s\" does not exist" msgstr "関数\"%s\"は存在しません" -#: utils/adt/acl.c:4958 +#: utils/adt/acl.c:4943 #, c-format msgid "must be member of role \"%s\"" msgstr "ロール\"%s\"のメンバでなければなりません" -#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:932 -#: utils/adt/arrayfuncs.c:1532 utils/adt/arrayfuncs.c:3235 -#: utils/adt/arrayfuncs.c:3375 utils/adt/arrayfuncs.c:5909 -#: utils/adt/arrayfuncs.c:6250 utils/adt/arrayutils.c:93 -#: utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 +#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:933 utils/adt/arrayfuncs.c:1554 utils/adt/arrayfuncs.c:3257 utils/adt/arrayfuncs.c:3397 utils/adt/arrayfuncs.c:5932 utils/adt/arrayfuncs.c:6273 utils/adt/arrayutils.c:93 utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 #, c-format msgid "array size exceeds the maximum allowed (%d)" msgstr "配列の次数が上限(%d)を超えています" -#: utils/adt/array_userfuncs.c:80 utils/adt/array_userfuncs.c:466 -#: utils/adt/array_userfuncs.c:546 utils/adt/json.c:1829 utils/adt/json.c:1924 -#: utils/adt/json.c:1962 utils/adt/jsonb.c:1094 utils/adt/jsonb.c:1123 -#: utils/adt/jsonb.c:1517 utils/adt/jsonb.c:1681 utils/adt/jsonb.c:1691 +#: utils/adt/array_userfuncs.c:80 utils/adt/array_userfuncs.c:466 utils/adt/array_userfuncs.c:546 utils/adt/json.c:645 utils/adt/json.c:740 utils/adt/json.c:778 utils/adt/jsonb.c:1115 utils/adt/jsonb.c:1144 utils/adt/jsonb.c:1538 utils/adt/jsonb.c:1702 utils/adt/jsonb.c:1712 #, c-format msgid "could not determine input data type" msgstr "入力データ型を特定できませんでした" @@ -20904,16 +20743,8 @@ msgstr "入力データ型を特定できませんでした" msgid "input data type is not an array" msgstr "入力データ型は配列ではありません" -#: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 -#: utils/adt/arrayfuncs.c:1335 utils/adt/float.c:1220 utils/adt/float.c:1308 -#: utils/adt/float.c:3883 utils/adt/float.c:3897 utils/adt/int.c:759 -#: utils/adt/int.c:781 utils/adt/int.c:795 utils/adt/int.c:809 -#: utils/adt/int.c:840 utils/adt/int.c:861 utils/adt/int.c:978 -#: utils/adt/int.c:992 utils/adt/int.c:1006 utils/adt/int.c:1039 -#: utils/adt/int.c:1053 utils/adt/int.c:1067 utils/adt/int.c:1098 -#: utils/adt/int.c:1180 utils/adt/int8.c:1167 utils/adt/numeric.c:1565 -#: utils/adt/numeric.c:3240 utils/adt/varbit.c:1188 utils/adt/varbit.c:1576 -#: utils/adt/varlena.c:1075 utils/adt/varlena.c:3345 +#: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 utils/adt/arrayfuncs.c:1357 utils/adt/float.c:1233 utils/adt/float.c:1307 utils/adt/float.c:4052 utils/adt/float.c:4066 utils/adt/int.c:757 utils/adt/int.c:779 utils/adt/int.c:793 utils/adt/int.c:807 utils/adt/int.c:838 utils/adt/int.c:859 utils/adt/int.c:976 utils/adt/int.c:990 utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 utils/adt/int.c:1065 utils/adt/int.c:1096 +#: utils/adt/int.c:1178 utils/adt/int.c:1242 utils/adt/int.c:1310 utils/adt/int.c:1316 utils/adt/int8.c:1299 utils/adt/numeric.c:1774 utils/adt/numeric.c:4138 utils/adt/varbit.c:1188 utils/adt/varbit.c:1576 utils/adt/varlena.c:1087 utils/adt/varlena.c:3377 #, c-format msgid "integer out of range" msgstr "integerの範囲外です" @@ -20923,9 +20754,7 @@ msgstr "integerの範囲外です" msgid "argument must be empty or one-dimensional array" msgstr "引数は空か1次元の配列でなければなりません" -#: utils/adt/array_userfuncs.c:273 utils/adt/array_userfuncs.c:312 -#: utils/adt/array_userfuncs.c:349 utils/adt/array_userfuncs.c:378 -#: utils/adt/array_userfuncs.c:406 +#: utils/adt/array_userfuncs.c:273 utils/adt/array_userfuncs.c:312 utils/adt/array_userfuncs.c:349 utils/adt/array_userfuncs.c:378 utils/adt/array_userfuncs.c:406 #, c-format msgid "cannot concatenate incompatible arrays" msgstr "互換性がない配列を連結できません" @@ -20960,244 +20789,218 @@ msgstr "多次元配列内の要素の検索はサポートされません" msgid "initial position must not be null" msgstr "初期位置nullであってはなりません" -#: utils/adt/arrayfuncs.c:269 utils/adt/arrayfuncs.c:283 -#: utils/adt/arrayfuncs.c:294 utils/adt/arrayfuncs.c:316 -#: utils/adt/arrayfuncs.c:331 utils/adt/arrayfuncs.c:345 -#: utils/adt/arrayfuncs.c:351 utils/adt/arrayfuncs.c:358 -#: utils/adt/arrayfuncs.c:489 utils/adt/arrayfuncs.c:505 -#: utils/adt/arrayfuncs.c:516 utils/adt/arrayfuncs.c:531 -#: utils/adt/arrayfuncs.c:552 utils/adt/arrayfuncs.c:582 -#: utils/adt/arrayfuncs.c:589 utils/adt/arrayfuncs.c:597 -#: utils/adt/arrayfuncs.c:631 utils/adt/arrayfuncs.c:654 -#: utils/adt/arrayfuncs.c:674 utils/adt/arrayfuncs.c:786 -#: utils/adt/arrayfuncs.c:795 utils/adt/arrayfuncs.c:825 -#: utils/adt/arrayfuncs.c:840 utils/adt/arrayfuncs.c:893 +#: utils/adt/arrayfuncs.c:270 utils/adt/arrayfuncs.c:284 utils/adt/arrayfuncs.c:295 utils/adt/arrayfuncs.c:317 utils/adt/arrayfuncs.c:332 utils/adt/arrayfuncs.c:346 utils/adt/arrayfuncs.c:352 utils/adt/arrayfuncs.c:359 utils/adt/arrayfuncs.c:490 utils/adt/arrayfuncs.c:506 utils/adt/arrayfuncs.c:517 utils/adt/arrayfuncs.c:532 utils/adt/arrayfuncs.c:553 utils/adt/arrayfuncs.c:583 utils/adt/arrayfuncs.c:590 utils/adt/arrayfuncs.c:598 utils/adt/arrayfuncs.c:632 +#: utils/adt/arrayfuncs.c:655 utils/adt/arrayfuncs.c:675 utils/adt/arrayfuncs.c:787 utils/adt/arrayfuncs.c:796 utils/adt/arrayfuncs.c:826 utils/adt/arrayfuncs.c:841 utils/adt/arrayfuncs.c:894 #, c-format msgid "malformed array literal: \"%s\"" msgstr "配列リテラルの書式が誤っています: \"%s\"" -#: utils/adt/arrayfuncs.c:270 +#: utils/adt/arrayfuncs.c:271 #, c-format msgid "\"[\" must introduce explicitly-specified array dimensions." msgstr "\"[\"は配列次元の明示的な指定の先頭である必要があります。" -#: utils/adt/arrayfuncs.c:284 +#: utils/adt/arrayfuncs.c:285 #, c-format msgid "Missing array dimension value." msgstr "配列の次元数の値がありません。" -#: utils/adt/arrayfuncs.c:295 utils/adt/arrayfuncs.c:332 +#: utils/adt/arrayfuncs.c:296 utils/adt/arrayfuncs.c:333 #, c-format msgid "Missing \"%s\" after array dimensions." msgstr "配列の次元の後に\"%s\"がありません。" -#: utils/adt/arrayfuncs.c:304 utils/adt/arrayfuncs.c:2883 -#: utils/adt/arrayfuncs.c:2915 utils/adt/arrayfuncs.c:2930 +#: utils/adt/arrayfuncs.c:305 utils/adt/arrayfuncs.c:2905 utils/adt/arrayfuncs.c:2937 utils/adt/arrayfuncs.c:2952 #, c-format msgid "upper bound cannot be less than lower bound" msgstr "上限を下限より小さくすることはできません" -#: utils/adt/arrayfuncs.c:317 +#: utils/adt/arrayfuncs.c:318 #, c-format msgid "Array value must start with \"{\" or dimension information." msgstr "配列値は\"{\"または次元情報から始まる必要があります。" -#: utils/adt/arrayfuncs.c:346 +#: utils/adt/arrayfuncs.c:347 #, c-format msgid "Array contents must start with \"{\"." msgstr "配列の内容は\"{\"で始まる必要があります。" -#: utils/adt/arrayfuncs.c:352 utils/adt/arrayfuncs.c:359 +#: utils/adt/arrayfuncs.c:353 utils/adt/arrayfuncs.c:360 #, c-format msgid "Specified array dimensions do not match array contents." msgstr "指定された配列の次元数が配列の内容と合致していません。" -#: utils/adt/arrayfuncs.c:490 utils/adt/arrayfuncs.c:517 -#: utils/adt/rangetypes.c:2181 utils/adt/rangetypes.c:2189 -#: utils/adt/rowtypes.c:210 utils/adt/rowtypes.c:218 +#: utils/adt/arrayfuncs.c:491 utils/adt/arrayfuncs.c:518 utils/adt/rangetypes.c:2181 utils/adt/rangetypes.c:2189 utils/adt/rowtypes.c:210 utils/adt/rowtypes.c:218 #, c-format msgid "Unexpected end of input." msgstr "想定外の入力の終端。" -#: utils/adt/arrayfuncs.c:506 utils/adt/arrayfuncs.c:553 -#: utils/adt/arrayfuncs.c:583 utils/adt/arrayfuncs.c:632 +#: utils/adt/arrayfuncs.c:507 utils/adt/arrayfuncs.c:554 utils/adt/arrayfuncs.c:584 utils/adt/arrayfuncs.c:633 #, c-format msgid "Unexpected \"%c\" character." msgstr "想定外の文字\"%c\"。" -#: utils/adt/arrayfuncs.c:532 utils/adt/arrayfuncs.c:655 +#: utils/adt/arrayfuncs.c:533 utils/adt/arrayfuncs.c:656 #, c-format msgid "Unexpected array element." msgstr "想定外の配列要素。" -#: utils/adt/arrayfuncs.c:590 +#: utils/adt/arrayfuncs.c:591 #, c-format msgid "Unmatched \"%c\" character." msgstr "対応しない\"%c\"文字。" -#: utils/adt/arrayfuncs.c:598 utils/adt/jsonfuncs.c:2397 +#: utils/adt/arrayfuncs.c:599 utils/adt/jsonfuncs.c:2452 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "多次元配列は合致する次元の副配列を持たなければなりません。" -#: utils/adt/arrayfuncs.c:675 +#: utils/adt/arrayfuncs.c:676 #, c-format msgid "Junk after closing right brace." msgstr "右括弧の後にごみがあります。" -#: utils/adt/arrayfuncs.c:1297 utils/adt/arrayfuncs.c:3343 -#: utils/adt/arrayfuncs.c:5815 +#: utils/adt/arrayfuncs.c:1298 utils/adt/arrayfuncs.c:3365 utils/adt/arrayfuncs.c:5838 #, c-format msgid "invalid number of dimensions: %d" msgstr "不正な次元数: %d" -#: utils/adt/arrayfuncs.c:1308 +#: utils/adt/arrayfuncs.c:1309 #, c-format msgid "invalid array flags" msgstr "不正な配列フラグ" -#: utils/adt/arrayfuncs.c:1316 +#: utils/adt/arrayfuncs.c:1331 #, c-format -msgid "wrong element type" -msgstr "間違った要素型" +msgid "binary data has array element type %u (%s) instead of expected %u (%s)" +msgstr "バイナリデータ中に期待される型%3$u(%4$s)の代わりに%1$u(%2$s)がありました" -#: utils/adt/arrayfuncs.c:1366 utils/adt/rangetypes.c:335 -#: utils/cache/lsyscache.c:2725 +#: utils/adt/arrayfuncs.c:1388 utils/adt/rangetypes.c:335 utils/cache/lsyscache.c:2835 #, c-format msgid "no binary input function available for type %s" msgstr "型%sにはバイナリ入力関数がありません" -#: utils/adt/arrayfuncs.c:1506 +#: utils/adt/arrayfuncs.c:1528 #, c-format msgid "improper binary format in array element %d" msgstr "配列要素%dのバイナリ書式が不適切です" -#: utils/adt/arrayfuncs.c:1587 utils/adt/rangetypes.c:340 -#: utils/cache/lsyscache.c:2758 +#: utils/adt/arrayfuncs.c:1609 utils/adt/rangetypes.c:340 utils/cache/lsyscache.c:2868 #, c-format msgid "no binary output function available for type %s" msgstr "型%sにはバイナリ出力関数がありません" -#: utils/adt/arrayfuncs.c:2065 +#: utils/adt/arrayfuncs.c:2087 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "固定長配列の部分配列は実装されていません" -#: utils/adt/arrayfuncs.c:2243 utils/adt/arrayfuncs.c:2265 -#: utils/adt/arrayfuncs.c:2314 utils/adt/arrayfuncs.c:2550 -#: utils/adt/arrayfuncs.c:2861 utils/adt/arrayfuncs.c:5801 -#: utils/adt/arrayfuncs.c:5827 utils/adt/arrayfuncs.c:5838 -#: utils/adt/json.c:2325 utils/adt/json.c:2400 utils/adt/jsonb.c:1295 -#: utils/adt/jsonb.c:1381 utils/adt/jsonfuncs.c:4301 utils/adt/jsonfuncs.c:4452 -#: utils/adt/jsonfuncs.c:4497 utils/adt/jsonfuncs.c:4544 +#: utils/adt/arrayfuncs.c:2265 utils/adt/arrayfuncs.c:2287 utils/adt/arrayfuncs.c:2336 utils/adt/arrayfuncs.c:2572 utils/adt/arrayfuncs.c:2883 utils/adt/arrayfuncs.c:5824 utils/adt/arrayfuncs.c:5850 utils/adt/arrayfuncs.c:5861 utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4340 utils/adt/jsonfuncs.c:4490 utils/adt/jsonfuncs.c:4602 utils/adt/jsonfuncs.c:4648 #, c-format msgid "wrong number of array subscripts" msgstr "配列の添え字が不正な数値です" -#: utils/adt/arrayfuncs.c:2248 utils/adt/arrayfuncs.c:2356 -#: utils/adt/arrayfuncs.c:2614 utils/adt/arrayfuncs.c:2920 +#: utils/adt/arrayfuncs.c:2270 utils/adt/arrayfuncs.c:2378 utils/adt/arrayfuncs.c:2636 utils/adt/arrayfuncs.c:2942 #, c-format msgid "array subscript out of range" msgstr "配列の添え字が範囲外です" -#: utils/adt/arrayfuncs.c:2253 +#: utils/adt/arrayfuncs.c:2275 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "固定長配列の要素にNULL値を代入できません" -#: utils/adt/arrayfuncs.c:2808 +#: utils/adt/arrayfuncs.c:2830 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "固定長配列の部分配列の更新は実装されていません" -#: utils/adt/arrayfuncs.c:2839 +#: utils/adt/arrayfuncs.c:2861 #, c-format msgid "array slice subscript must provide both boundaries" msgstr "配列のスライスの添え字は両方の境界を示す必要があります" -#: utils/adt/arrayfuncs.c:2840 +#: utils/adt/arrayfuncs.c:2862 #, c-format msgid "When assigning to a slice of an empty array value, slice boundaries must be fully specified." msgstr "空の配列値のスライスに代入するには、スライスの範囲は完全に指定する必要があります。" -#: utils/adt/arrayfuncs.c:2851 utils/adt/arrayfuncs.c:2946 +#: utils/adt/arrayfuncs.c:2873 utils/adt/arrayfuncs.c:2968 #, c-format msgid "source array too small" msgstr "元の配列が小さすぎます" -#: utils/adt/arrayfuncs.c:3499 +#: utils/adt/arrayfuncs.c:3521 #, c-format msgid "null array element not allowed in this context" msgstr "この文脈ではNULLの配列要素は許可されません" -#: utils/adt/arrayfuncs.c:3601 utils/adt/arrayfuncs.c:3772 -#: utils/adt/arrayfuncs.c:4123 +#: utils/adt/arrayfuncs.c:3623 utils/adt/arrayfuncs.c:3794 utils/adt/arrayfuncs.c:4150 #, c-format msgid "cannot compare arrays of different element types" msgstr "要素型の異なる配列を比較できません" -#: utils/adt/arrayfuncs.c:3948 utils/adt/rangetypes.c:1254 -#: utils/adt/rangetypes.c:1318 +#: utils/adt/arrayfuncs.c:3972 utils/adt/rangetypes.c:1254 utils/adt/rangetypes.c:1318 #, c-format msgid "could not identify a hash function for type %s" msgstr "型 %s のハッシュ関数を識別できません" -#: utils/adt/arrayfuncs.c:4040 +#: utils/adt/arrayfuncs.c:4065 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "型 %s の拡張ハッシュ関数を特定できませんでした" -#: utils/adt/arrayfuncs.c:5215 +#: utils/adt/arrayfuncs.c:5242 #, c-format msgid "data type %s is not an array type" msgstr "データ型%sは配列型ではありません" -#: utils/adt/arrayfuncs.c:5270 +#: utils/adt/arrayfuncs.c:5297 #, c-format msgid "cannot accumulate null arrays" msgstr "null配列は連結できません" -#: utils/adt/arrayfuncs.c:5298 +#: utils/adt/arrayfuncs.c:5325 #, c-format msgid "cannot accumulate empty arrays" msgstr "空の配列は連結できません" -#: utils/adt/arrayfuncs.c:5327 utils/adt/arrayfuncs.c:5333 +#: utils/adt/arrayfuncs.c:5352 utils/adt/arrayfuncs.c:5358 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "次元の異なる配列は結合できません" -#: utils/adt/arrayfuncs.c:5699 utils/adt/arrayfuncs.c:5739 +#: utils/adt/arrayfuncs.c:5722 utils/adt/arrayfuncs.c:5762 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "次元配列もしくは下限値配列が NULL であってはなりません" -#: utils/adt/arrayfuncs.c:5802 utils/adt/arrayfuncs.c:5828 +#: utils/adt/arrayfuncs.c:5825 utils/adt/arrayfuncs.c:5851 #, c-format msgid "Dimension array must be one dimensional." msgstr "次元配列は1次元でなければなりません" -#: utils/adt/arrayfuncs.c:5807 utils/adt/arrayfuncs.c:5833 +#: utils/adt/arrayfuncs.c:5830 utils/adt/arrayfuncs.c:5856 #, c-format msgid "dimension values cannot be null" msgstr "次元値にnullにはできません" -#: utils/adt/arrayfuncs.c:5839 +#: utils/adt/arrayfuncs.c:5862 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "下限配列が次元配列のサイズと異なっています" -#: utils/adt/arrayfuncs.c:6115 +#: utils/adt/arrayfuncs.c:6138 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "多次元配列からの要素削除はサポートされません" -#: utils/adt/arrayfuncs.c:6392 +#: utils/adt/arrayfuncs.c:6415 #, c-format msgid "thresholds must be one-dimensional array" msgstr "閾値は1次元の配列でなければなりません" -#: utils/adt/arrayfuncs.c:6397 +#: utils/adt/arrayfuncs.c:6420 #, c-format msgid "thresholds array must not contain NULLs" msgstr "閾値配列にはNULL値を含めてはいけません" @@ -21223,45 +21026,20 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "%s符号化方式からASCIIへの変換はサポートされていません" #. translator: first %s is inet or cidr -#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3773 -#: utils/adt/float.c:168 utils/adt/float.c:252 utils/adt/float.c:276 -#: utils/adt/float.c:390 utils/adt/float.c:474 utils/adt/float.c:501 -#: utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 -#: utils/adt/geo_ops.c:274 utils/adt/geo_ops.c:316 utils/adt/geo_ops.c:326 -#: utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1378 utils/adt/geo_ops.c:1413 -#: utils/adt/geo_ops.c:1421 utils/adt/geo_ops.c:3360 utils/adt/geo_ops.c:4526 -#: utils/adt/geo_ops.c:4541 utils/adt/geo_ops.c:4548 utils/adt/int8.c:128 -#: utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 -#: utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 -#: utils/adt/mac8.c:221 utils/adt/network.c:74 utils/adt/numeric.c:607 -#: utils/adt/numeric.c:634 utils/adt/numeric.c:5806 utils/adt/numeric.c:5830 -#: utils/adt/numeric.c:5854 utils/adt/numeric.c:6684 utils/adt/numeric.c:6710 -#: utils/adt/numutils.c:52 utils/adt/numutils.c:62 utils/adt/numutils.c:106 -#: utils/adt/numutils.c:182 utils/adt/numutils.c:258 utils/adt/oid.c:44 -#: utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 -#: utils/adt/pg_lsn.c:70 utils/adt/tid.c:73 utils/adt/tid.c:81 -#: utils/adt/tid.c:89 utils/adt/timestamp.c:479 utils/adt/txid.c:410 -#: utils/adt/uuid.c:136 +#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3757 utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:283 utils/adt/float.c:400 utils/adt/float.c:485 utils/adt/float.c:501 utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 utils/adt/geo_ops.c:274 utils/adt/geo_ops.c:316 utils/adt/geo_ops.c:326 utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1378 utils/adt/geo_ops.c:1413 utils/adt/geo_ops.c:1421 +#: utils/adt/geo_ops.c:3476 utils/adt/geo_ops.c:4645 utils/adt/geo_ops.c:4660 utils/adt/geo_ops.c:4667 utils/adt/int8.c:126 utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:701 utils/adt/numeric.c:720 utils/adt/numeric.c:6856 utils/adt/numeric.c:6880 utils/adt/numeric.c:6904 utils/adt/numeric.c:7873 +#: utils/adt/numutils.c:116 utils/adt/numutils.c:126 utils/adt/numutils.c:170 utils/adt/numutils.c:246 utils/adt/numutils.c:322 utils/adt/oid.c:44 utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 utils/adt/pg_lsn.c:74 utils/adt/tid.c:74 utils/adt/tid.c:82 utils/adt/tid.c:90 utils/adt/timestamp.c:494 utils/adt/uuid.c:136 utils/adt/xid8funcs.c:346 #, c-format msgid "invalid input syntax for type %s: \"%s\"" msgstr "\"%s\"型の入力構文が不正です: \"%s\"" -#: utils/adt/cash.c:215 utils/adt/cash.c:240 utils/adt/cash.c:250 -#: utils/adt/cash.c:290 utils/adt/int8.c:120 utils/adt/numutils.c:76 -#: utils/adt/numutils.c:83 utils/adt/numutils.c:176 utils/adt/numutils.c:252 -#: utils/adt/oid.c:70 utils/adt/oid.c:109 +#: utils/adt/cash.c:215 utils/adt/cash.c:240 utils/adt/cash.c:250 utils/adt/cash.c:290 utils/adt/int8.c:118 utils/adt/numutils.c:140 utils/adt/numutils.c:147 utils/adt/numutils.c:240 utils/adt/numutils.c:316 utils/adt/oid.c:70 utils/adt/oid.c:109 #, c-format msgid "value \"%s\" is out of range for type %s" msgstr "値\"%s\"は型%sの範囲外です" -#: utils/adt/cash.c:652 utils/adt/cash.c:702 utils/adt/cash.c:753 -#: utils/adt/cash.c:802 utils/adt/cash.c:854 utils/adt/cash.c:904 -#: utils/adt/int.c:824 utils/adt/int.c:940 utils/adt/int.c:1020 -#: utils/adt/int.c:1082 utils/adt/int.c:1120 utils/adt/int.c:1148 -#: utils/adt/int8.c:595 utils/adt/int8.c:653 utils/adt/int8.c:853 -#: utils/adt/int8.c:933 utils/adt/int8.c:995 utils/adt/int8.c:1075 -#: utils/adt/numeric.c:7248 utils/adt/numeric.c:7537 utils/adt/numeric.c:8549 -#: utils/adt/timestamp.c:3257 +#: utils/adt/cash.c:652 utils/adt/cash.c:702 utils/adt/cash.c:753 utils/adt/cash.c:802 utils/adt/cash.c:854 utils/adt/cash.c:904 utils/adt/float.c:104 utils/adt/int.c:822 utils/adt/int.c:938 utils/adt/int.c:1018 utils/adt/int.c:1080 utils/adt/int.c:1118 utils/adt/int.c:1146 utils/adt/int8.c:600 utils/adt/int8.c:658 utils/adt/int8.c:985 utils/adt/int8.c:1065 utils/adt/int8.c:1127 utils/adt/int8.c:1207 utils/adt/numeric.c:3030 utils/adt/numeric.c:3053 +#: utils/adt/numeric.c:3138 utils/adt/numeric.c:3156 utils/adt/numeric.c:3252 utils/adt/numeric.c:8411 utils/adt/numeric.c:8701 utils/adt/numeric.c:10283 utils/adt/timestamp.c:3264 #, c-format msgid "division by zero" msgstr "0 による除算が行われました" @@ -21271,159 +21049,125 @@ msgstr "0 による除算が行われました" msgid "\"char\" out of range" msgstr "\"char\"の範囲外です" -#: utils/adt/date.c:65 utils/adt/timestamp.c:95 utils/adt/varbit.c:104 -#: utils/adt/varchar.c:49 +#: utils/adt/date.c:61 utils/adt/timestamp.c:95 utils/adt/varbit.c:104 utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "不正な型修飾子です。" -#: utils/adt/date.c:77 +#: utils/adt/date.c:73 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "(%d)%sの精度は負ではいけません" -#: utils/adt/date.c:83 +#: utils/adt/date.c:79 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "TIME(%d)%sの位取りを許容最大値%dまで減らしました" -#: utils/adt/date.c:162 utils/adt/date.c:170 utils/adt/formatting.c:3736 -#: utils/adt/formatting.c:3745 +#: utils/adt/date.c:158 utils/adt/date.c:166 utils/adt/formatting.c:4196 utils/adt/formatting.c:4205 utils/adt/formatting.c:4311 utils/adt/formatting.c:4321 #, c-format msgid "date out of range: \"%s\"" msgstr "日付が範囲外です: \"%s\"" -#: utils/adt/date.c:217 utils/adt/date.c:529 utils/adt/date.c:553 -#: utils/adt/xml.c:2228 +#: utils/adt/date.c:213 utils/adt/date.c:525 utils/adt/date.c:549 utils/adt/xml.c:2210 #, c-format msgid "date out of range" msgstr "日付が範囲外です" -#: utils/adt/date.c:263 utils/adt/timestamp.c:559 +#: utils/adt/date.c:259 utils/adt/timestamp.c:574 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "日付フィールドの値が範囲外です: %d-%02d-%02d" -#: utils/adt/date.c:270 utils/adt/date.c:279 utils/adt/timestamp.c:565 +#: utils/adt/date.c:266 utils/adt/date.c:275 utils/adt/timestamp.c:580 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "日付が範囲外です: %d-%02d-%02d" -#: utils/adt/date.c:317 utils/adt/date.c:340 utils/adt/date.c:366 -#: utils/adt/date.c:1110 utils/adt/date.c:1156 utils/adt/date.c:1657 -#: utils/adt/date.c:1688 utils/adt/date.c:1717 utils/adt/date.c:2549 -#: utils/adt/datetime.c:1663 utils/adt/formatting.c:3602 -#: utils/adt/formatting.c:3634 utils/adt/formatting.c:3711 -#: utils/adt/json.c:1621 utils/adt/json.c:1641 utils/adt/timestamp.c:222 -#: utils/adt/timestamp.c:254 utils/adt/timestamp.c:687 -#: utils/adt/timestamp.c:696 utils/adt/timestamp.c:774 -#: utils/adt/timestamp.c:807 utils/adt/timestamp.c:2836 -#: utils/adt/timestamp.c:2857 utils/adt/timestamp.c:2870 -#: utils/adt/timestamp.c:2879 utils/adt/timestamp.c:2887 -#: utils/adt/timestamp.c:2942 utils/adt/timestamp.c:2965 -#: utils/adt/timestamp.c:2978 utils/adt/timestamp.c:2989 -#: utils/adt/timestamp.c:2997 utils/adt/timestamp.c:3657 -#: utils/adt/timestamp.c:3782 utils/adt/timestamp.c:3823 -#: utils/adt/timestamp.c:3913 utils/adt/timestamp.c:3957 -#: utils/adt/timestamp.c:4060 utils/adt/timestamp.c:4544 -#: utils/adt/timestamp.c:4643 utils/adt/timestamp.c:4653 -#: utils/adt/timestamp.c:4745 utils/adt/timestamp.c:4847 -#: utils/adt/timestamp.c:4857 utils/adt/timestamp.c:5077 -#: utils/adt/timestamp.c:5091 utils/adt/timestamp.c:5096 -#: utils/adt/timestamp.c:5110 utils/adt/timestamp.c:5143 -#: utils/adt/timestamp.c:5192 utils/adt/timestamp.c:5199 -#: utils/adt/timestamp.c:5232 utils/adt/timestamp.c:5236 -#: utils/adt/timestamp.c:5305 utils/adt/timestamp.c:5309 -#: utils/adt/timestamp.c:5323 utils/adt/timestamp.c:5357 utils/adt/xml.c:2250 -#: utils/adt/xml.c:2257 utils/adt/xml.c:2277 utils/adt/xml.c:2284 +#: utils/adt/date.c:313 utils/adt/date.c:336 utils/adt/date.c:362 utils/adt/date.c:1170 utils/adt/date.c:1216 utils/adt/date.c:1772 utils/adt/date.c:1803 utils/adt/date.c:1832 utils/adt/date.c:2664 utils/adt/datetime.c:1655 utils/adt/formatting.c:4053 utils/adt/formatting.c:4085 utils/adt/formatting.c:4165 utils/adt/formatting.c:4287 utils/adt/json.c:418 utils/adt/json.c:457 utils/adt/timestamp.c:222 utils/adt/timestamp.c:254 utils/adt/timestamp.c:692 +#: utils/adt/timestamp.c:701 utils/adt/timestamp.c:779 utils/adt/timestamp.c:812 utils/adt/timestamp.c:2843 utils/adt/timestamp.c:2864 utils/adt/timestamp.c:2877 utils/adt/timestamp.c:2886 utils/adt/timestamp.c:2894 utils/adt/timestamp.c:2949 utils/adt/timestamp.c:2972 utils/adt/timestamp.c:2985 utils/adt/timestamp.c:2996 utils/adt/timestamp.c:3004 utils/adt/timestamp.c:3664 utils/adt/timestamp.c:3789 utils/adt/timestamp.c:3830 utils/adt/timestamp.c:3920 +#: utils/adt/timestamp.c:3964 utils/adt/timestamp.c:4067 utils/adt/timestamp.c:4552 utils/adt/timestamp.c:4748 utils/adt/timestamp.c:5075 utils/adt/timestamp.c:5089 utils/adt/timestamp.c:5094 utils/adt/timestamp.c:5108 utils/adt/timestamp.c:5141 utils/adt/timestamp.c:5218 utils/adt/timestamp.c:5259 utils/adt/timestamp.c:5263 utils/adt/timestamp.c:5332 utils/adt/timestamp.c:5336 utils/adt/timestamp.c:5350 utils/adt/timestamp.c:5384 utils/adt/xml.c:2232 +#: utils/adt/xml.c:2239 utils/adt/xml.c:2259 utils/adt/xml.c:2266 #, c-format msgid "timestamp out of range" msgstr "timestampの範囲外です" -#: utils/adt/date.c:504 +#: utils/adt/date.c:500 #, c-format msgid "cannot subtract infinite dates" msgstr "無限大の日付は減算できません" -#: utils/adt/date.c:582 utils/adt/date.c:613 utils/adt/date.c:631 -#: utils/adt/date.c:2586 utils/adt/date.c:2596 +#: utils/adt/date.c:589 utils/adt/date.c:646 utils/adt/date.c:680 utils/adt/date.c:2701 utils/adt/date.c:2711 #, c-format msgid "date out of range for timestamp" msgstr "タイムスタンプで日付が範囲外です" -#: utils/adt/date.c:1270 utils/adt/date.c:2044 +#: utils/adt/date.c:1389 utils/adt/date.c:2159 utils/adt/formatting.c:4373 #, c-format msgid "time out of range" msgstr "時刻が範囲外です" -#: utils/adt/date.c:1326 utils/adt/timestamp.c:584 +#: utils/adt/date.c:1441 utils/adt/timestamp.c:589 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "時刻フィールドの値が範囲外です: %d:%02d:%02g" -#: utils/adt/date.c:1846 utils/adt/date.c:2348 utils/adt/float.c:1046 -#: utils/adt/float.c:1115 utils/adt/int.c:616 utils/adt/int.c:663 -#: utils/adt/int.c:698 utils/adt/int8.c:494 utils/adt/numeric.c:2203 -#: utils/adt/timestamp.c:3306 utils/adt/timestamp.c:3337 -#: utils/adt/timestamp.c:3368 +#: utils/adt/date.c:1961 utils/adt/date.c:2463 utils/adt/float.c:1047 utils/adt/float.c:1123 utils/adt/int.c:614 utils/adt/int.c:661 utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2441 utils/adt/timestamp.c:3313 utils/adt/timestamp.c:3344 utils/adt/timestamp.c:3375 #, c-format msgid "invalid preceding or following size in window function" msgstr "ウィンドウ関数での不正なサイズの PRECEDING または FOLLOWING 指定" -#: utils/adt/date.c:1931 utils/adt/date.c:1944 +#: utils/adt/date.c:2046 utils/adt/date.c:2059 #, c-format msgid "\"time\" units \"%s\" not recognized" msgstr "\"time\"の単位\"%s\"が不明です" -#: utils/adt/date.c:2052 +#: utils/adt/date.c:2167 #, c-format msgid "time zone displacement out of range" msgstr "タイムゾーンの置換が範囲外です" -#: utils/adt/date.c:2681 utils/adt/date.c:2694 +#: utils/adt/date.c:2796 utils/adt/date.c:2809 #, c-format msgid "\"time with time zone\" units \"%s\" not recognized" msgstr "\"time with time zone\"の単位\"%s\"が不明です" -#: utils/adt/date.c:2767 utils/adt/datetime.c:909 utils/adt/datetime.c:1821 -#: utils/adt/datetime.c:4617 utils/adt/timestamp.c:498 -#: utils/adt/timestamp.c:525 utils/adt/timestamp.c:4143 -#: utils/adt/timestamp.c:5102 utils/adt/timestamp.c:5315 +#: utils/adt/date.c:2882 utils/adt/datetime.c:906 utils/adt/datetime.c:1813 utils/adt/datetime.c:4602 utils/adt/timestamp.c:513 utils/adt/timestamp.c:540 utils/adt/timestamp.c:4150 utils/adt/timestamp.c:5100 utils/adt/timestamp.c:5342 #, c-format msgid "time zone \"%s\" not recognized" msgstr "タイムゾーン\"%s\"は不明です" -#: utils/adt/date.c:2799 utils/adt/timestamp.c:5132 utils/adt/timestamp.c:5346 +#: utils/adt/date.c:2914 utils/adt/timestamp.c:5130 utils/adt/timestamp.c:5373 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "intervalによるタイムゾーン\"%s\"には月または日を含めてはいけません" -#: utils/adt/datetime.c:3746 utils/adt/datetime.c:3753 +#: utils/adt/datetime.c:3730 utils/adt/datetime.c:3737 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "日付時刻のフィールドが範囲外です: \"%s\"" -#: utils/adt/datetime.c:3755 +#: utils/adt/datetime.c:3739 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." msgstr "他の\"datestyle\"設定が必要かもしれません。" -#: utils/adt/datetime.c:3760 +#: utils/adt/datetime.c:3744 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "intervalフィールドの値が範囲外です: \"%s\"" -#: utils/adt/datetime.c:3766 +#: utils/adt/datetime.c:3750 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "タイムゾーンの置換が範囲外です: \"%s\"" -#: utils/adt/datetime.c:4619 +#: utils/adt/datetime.c:4604 #, c-format msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "このタイムゾーンはタイムゾーン省略名\"%s\"の構成ファイルにあるようです。" -#: utils/adt/datum.c:88 utils/adt/datum.c:100 +#: utils/adt/datum.c:89 utils/adt/datum.c:101 #, c-format msgid "invalid Datum pointer" msgstr "不正なDatumポインタ" @@ -21448,37 +21192,47 @@ msgstr "有効な単位は \"bytes\"、\"kB\"、\"MB\"、\"GB\"そして\"TB\" msgid "type %s is not a domain" msgstr "型%sはドメインではありません" -#: utils/adt/encode.c:55 utils/adt/encode.c:91 +#: utils/adt/encode.c:65 utils/adt/encode.c:113 #, c-format msgid "unrecognized encoding: \"%s\"" msgstr "符号化方式が不明です: \"%s\"" -#: utils/adt/encode.c:150 +#: utils/adt/encode.c:79 +#, c-format +msgid "result of encoding conversion is too large" +msgstr "エンコーディング変換の結果が大きすぎです" + +#: utils/adt/encode.c:127 +#, c-format +msgid "result of decoding conversion is too large" +msgstr "デコード変換の結果が大きすぎます" + +#: utils/adt/encode.c:186 #, c-format -msgid "invalid hexadecimal digit: \"%c\"" -msgstr "不正な16進数表現: \"%c\"" +msgid "invalid hexadecimal digit: \"%.*s\"" +msgstr "不正な16進数表現: \"%.*s\"" -#: utils/adt/encode.c:178 +#: utils/adt/encode.c:216 #, c-format msgid "invalid hexadecimal data: odd number of digits" msgstr "不正な16進数データ: 桁数が奇数です" -#: utils/adt/encode.c:295 +#: utils/adt/encode.c:334 #, c-format msgid "unexpected \"=\" while decoding base64 sequence" msgstr "base64シーケンスのデコード中に想定外の\"=\"" -#: utils/adt/encode.c:307 +#: utils/adt/encode.c:346 #, c-format -msgid "invalid symbol \"%c\" while decoding base64 sequence" -msgstr "base64シーケンスのデコード中に不正なシンボル\"%c\"" +msgid "invalid symbol \"%.*s\" found while decoding base64 sequence" +msgstr "base64シーケンスのデコード中に検出された不正なシンボル\"%.*s\"" -#: utils/adt/encode.c:327 +#: utils/adt/encode.c:367 #, c-format msgid "invalid base64 end sequence" msgstr "不正なbase64終了シーケンス" -#: utils/adt/encode.c:328 +#: utils/adt/encode.c:368 #, c-format msgid "Input data is missing padding, is truncated, or is otherwise corrupted." msgstr "入力データにパディングがありません、切り詰められたかさもなければ壊れています。" @@ -21493,8 +21247,7 @@ msgstr "列挙型%2$sの新しい値\"%1$s\"の安全ではない使用" msgid "New enum values must be committed before they can be used." msgstr "新しい列挙値はコミットするまで使用できません。" -#: utils/adt/enum.c:121 utils/adt/enum.c:131 utils/adt/enum.c:189 -#: utils/adt/enum.c:199 +#: utils/adt/enum.c:121 utils/adt/enum.c:131 utils/adt/enum.c:189 utils/adt/enum.c:199 #, c-format msgid "invalid input value for enum %s: \"%s\"" msgstr "列挙型%sの不正な入力構文: \"%s\"" @@ -21504,8 +21257,7 @@ msgstr "列挙型%sの不正な入力構文: \"%s\"" msgid "invalid internal value for enum: %u" msgstr "列挙型用の不正な内部値: %u" -#: utils/adt/enum.c:446 utils/adt/enum.c:475 utils/adt/enum.c:515 -#: utils/adt/enum.c:535 +#: utils/adt/enum.c:446 utils/adt/enum.c:475 utils/adt/enum.c:515 utils/adt/enum.c:535 #, c-format msgid "could not determine actual enum type" msgstr "実際の列挙型を特定できませんでした" @@ -21515,330 +21267,372 @@ msgstr "実際の列挙型を特定できませんでした" msgid "enum %s contains no values" msgstr "列挙型 %s に値がありません" -#: utils/adt/expandedrecord.c:98 utils/adt/expandedrecord.c:230 -#: utils/cache/typcache.c:1574 utils/cache/typcache.c:1730 -#: utils/cache/typcache.c:1860 utils/fmgr/funcapi.c:415 +#: utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1632 utils/cache/typcache.c:1788 utils/cache/typcache.c:1918 utils/fmgr/funcapi.c:456 #, c-format msgid "type %s is not composite" msgstr "型%sは複合型ではありません" -#: utils/adt/float.c:246 +#: utils/adt/float.c:88 +#, c-format +msgid "value out of range: overflow" +msgstr "範囲外の値です: オーバーフロー" + +#: utils/adt/float.c:96 +#, c-format +msgid "value out of range: underflow" +msgstr "範囲外の値です: アンダーフロー" + +#: utils/adt/float.c:265 #, c-format msgid "\"%s\" is out of range for type real" msgstr "型realでは\"%s\"は範囲外です" -#: utils/adt/float.c:466 +#: utils/adt/float.c:477 #, c-format msgid "\"%s\" is out of range for type double precision" msgstr "型double precisionでは\"%s\"は範囲外です" -#: utils/adt/float.c:1252 utils/adt/float.c:1340 utils/adt/int.c:336 -#: utils/adt/int.c:874 utils/adt/int.c:896 utils/adt/int.c:910 -#: utils/adt/int.c:924 utils/adt/int.c:956 utils/adt/int.c:1194 -#: utils/adt/int8.c:1188 utils/adt/numeric.c:3358 utils/adt/numeric.c:3367 +#: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:334 utils/adt/int.c:872 utils/adt/int.c:894 utils/adt/int.c:908 utils/adt/int.c:922 utils/adt/int.c:954 utils/adt/int.c:1192 utils/adt/int8.c:1320 utils/adt/numeric.c:4268 utils/adt/numeric.c:4277 #, c-format msgid "smallint out of range" msgstr "smallintの範囲外です" -#: utils/adt/float.c:1466 utils/adt/numeric.c:7970 +#: utils/adt/float.c:1458 utils/adt/numeric.c:3548 utils/adt/numeric.c:9294 #, c-format msgid "cannot take square root of a negative number" msgstr "負の値の平方根を取ることができません" -#: utils/adt/float.c:1527 utils/adt/numeric.c:3138 +#: utils/adt/float.c:1526 utils/adt/numeric.c:3823 utils/adt/numeric.c:3933 #, c-format msgid "zero raised to a negative power is undefined" msgstr "0 の負数乗は定義されていません" -#: utils/adt/float.c:1531 utils/adt/numeric.c:3144 +#: utils/adt/float.c:1530 utils/adt/numeric.c:3827 utils/adt/numeric.c:3938 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "負数を整数でない数でべき乗すると、結果が複雑になります" -#: utils/adt/float.c:1597 utils/adt/float.c:1627 utils/adt/numeric.c:8236 +#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3735 utils/adt/numeric.c:9958 #, c-format msgid "cannot take logarithm of zero" msgstr "ゼロの対数を取ることができません" -#: utils/adt/float.c:1601 utils/adt/float.c:1631 utils/adt/numeric.c:8240 +#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3673 utils/adt/numeric.c:3730 utils/adt/numeric.c:9962 #, c-format msgid "cannot take logarithm of a negative number" msgstr "負の値の対数を取ることができません" -#: utils/adt/float.c:1661 utils/adt/float.c:1691 utils/adt/float.c:1783 -#: utils/adt/float.c:1809 utils/adt/float.c:1836 utils/adt/float.c:1862 -#: utils/adt/float.c:2009 utils/adt/float.c:2044 utils/adt/float.c:2208 -#: utils/adt/float.c:2262 utils/adt/float.c:2326 utils/adt/float.c:2381 -#: utils/adt/float.c:2569 utils/adt/float.c:2594 +#: utils/adt/float.c:1776 utils/adt/float.c:1807 utils/adt/float.c:1902 utils/adt/float.c:1929 utils/adt/float.c:1957 utils/adt/float.c:1984 utils/adt/float.c:2131 utils/adt/float.c:2168 utils/adt/float.c:2338 utils/adt/float.c:2394 utils/adt/float.c:2459 utils/adt/float.c:2516 utils/adt/float.c:2707 utils/adt/float.c:2731 #, c-format msgid "input is out of range" msgstr "入力が範囲外です" -#: utils/adt/float.c:2662 +#: utils/adt/float.c:2798 #, c-format msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "setseed のパラメータ %g は設定可能な範囲 [-1, 1] にありません" -#: utils/adt/float.c:2880 utils/adt/float.c:2956 utils/adt/float.c:3179 -#, c-format -msgid "value out of range: overflow" -msgstr "範囲外の値です: オーバーフロー" - -#: utils/adt/float.c:3861 utils/adt/numeric.c:1515 +#: utils/adt/float.c:4030 utils/adt/numeric.c:1715 #, c-format msgid "count must be greater than zero" msgstr "カウントは0より大きくなければなりません" -#: utils/adt/float.c:3866 utils/adt/numeric.c:1522 +#: utils/adt/float.c:4035 utils/adt/numeric.c:1726 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" -msgstr "オペランドの下限と上限をNaNにすることはできません" +msgstr "オペランド、下限、上限をNaNにすることはできません" -#: utils/adt/float.c:3872 +#: utils/adt/float.c:4041 #, c-format msgid "lower and upper bounds must be finite" msgstr "下限および上限は有限でなければなりません" -#: utils/adt/float.c:3906 utils/adt/numeric.c:1535 +#: utils/adt/float.c:4075 utils/adt/numeric.c:1744 #, c-format msgid "lower bound cannot equal upper bound" msgstr "下限を上限と同じにできません" -#: utils/adt/formatting.c:504 +#: utils/adt/formatting.c:532 #, c-format msgid "invalid format specification for an interval value" msgstr "\"tinterval\"値に対する不正な書式指定" -#: utils/adt/formatting.c:505 +#: utils/adt/formatting.c:533 #, c-format msgid "Intervals are not tied to specific calendar dates." msgstr "時間間隔が特定の暦日付に結びついていません" -#: utils/adt/formatting.c:1086 +#: utils/adt/formatting.c:1157 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "\"EEEE\"は最終パターンでなければなりません。" -#: utils/adt/formatting.c:1094 +#: utils/adt/formatting.c:1165 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "\"9\"は\"PR\"の前になければなりません" -#: utils/adt/formatting.c:1110 +#: utils/adt/formatting.c:1181 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "\"0\"は\"PR\"の前になければなりません" -#: utils/adt/formatting.c:1137 +#: utils/adt/formatting.c:1208 #, c-format msgid "multiple decimal points" msgstr "複数の小数点があります" -#: utils/adt/formatting.c:1141 utils/adt/formatting.c:1224 +#: utils/adt/formatting.c:1212 utils/adt/formatting.c:1295 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "\"V\"と小数点を混在できません" -#: utils/adt/formatting.c:1153 +#: utils/adt/formatting.c:1224 #, c-format msgid "cannot use \"S\" twice" msgstr "\"S\"は1回しか使用できません" -#: utils/adt/formatting.c:1157 +#: utils/adt/formatting.c:1228 #, c-format msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" msgstr "\"S\"と\"PL\"/\"MI\"/\"SG\"/\"PR\"を混在できません" -#: utils/adt/formatting.c:1177 +#: utils/adt/formatting.c:1248 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "\"S\"と\"MI\"を混在できません" -#: utils/adt/formatting.c:1187 +#: utils/adt/formatting.c:1258 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "\"S\"と\"PL\"を混在できません" -#: utils/adt/formatting.c:1197 +#: utils/adt/formatting.c:1268 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "\"S\"と\"SG\"を混在できません" -#: utils/adt/formatting.c:1206 +#: utils/adt/formatting.c:1277 #, c-format msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" msgstr "\"PR\"と\"S\"/\"PL\"/\"MI\"/\"SG\"を混在できません" -#: utils/adt/formatting.c:1232 +#: utils/adt/formatting.c:1303 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "\"EEEE\"は1回しか使用できません" -#: utils/adt/formatting.c:1238 +#: utils/adt/formatting.c:1309 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "\"EEEE\"が他のフォーマットと互換性がありません。" -#: utils/adt/formatting.c:1239 +#: utils/adt/formatting.c:1310 #, c-format msgid "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "\"EEEE\"は数値または小数点パターンと共に指定してください。" -#: utils/adt/formatting.c:1426 +#: utils/adt/formatting.c:1392 +#, c-format +msgid "invalid datetime format separator: \"%s\"" +msgstr "不正なdatetime書式のセパレータ: \"%s\"" + +#: utils/adt/formatting.c:1520 #, c-format msgid "\"%s\" is not a number" msgstr "\"%s\"は数値ではありません" -#: utils/adt/formatting.c:1504 +#: utils/adt/formatting.c:1598 #, c-format msgid "case conversion failed: %s" msgstr "文字ケースの変換に失敗しました: %s" -#: utils/adt/formatting.c:1569 utils/adt/formatting.c:1693 -#: utils/adt/formatting.c:1818 +#: utils/adt/formatting.c:1663 utils/adt/formatting.c:1787 utils/adt/formatting.c:1912 #, c-format msgid "could not determine which collation to use for %s function" msgstr "%s 関数に対して使用する照合順序を特定できませんでした" -#: utils/adt/formatting.c:2188 +#: utils/adt/formatting.c:2284 #, c-format msgid "invalid combination of date conventions" msgstr "不正な暦法の組み合わせ" -#: utils/adt/formatting.c:2189 +#: utils/adt/formatting.c:2285 #, c-format msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr "単一の書式テンプレートの中では、グレゴリオ暦とISO歴週日付を混在させないでください。" -#: utils/adt/formatting.c:2206 +#: utils/adt/formatting.c:2308 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "書式文字列中で\"%s\"フィールドの値が衝突しています" -#: utils/adt/formatting.c:2208 +#: utils/adt/formatting.c:2311 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "この値は同じフィールド型に対する以前の設定と矛盾しています" -#: utils/adt/formatting.c:2269 +#: utils/adt/formatting.c:2382 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "書式フィールド\"%s\"に対して元の文字列が短すぎます" -#: utils/adt/formatting.c:2271 +#: utils/adt/formatting.c:2385 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "フィールドには%d文字必要ですが、%d文字しか残っていません。" -#: utils/adt/formatting.c:2274 utils/adt/formatting.c:2288 +#: utils/adt/formatting.c:2388 utils/adt/formatting.c:2403 #, c-format msgid "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "元の文字列が固定長でない場合は、修飾子\"FM\"を試してみてください。" -#: utils/adt/formatting.c:2284 utils/adt/formatting.c:2297 -#: utils/adt/formatting.c:2427 +#: utils/adt/formatting.c:2398 utils/adt/formatting.c:2412 utils/adt/formatting.c:2635 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "\"%2$s\"に対する不正な値\"%1$s\"" -#: utils/adt/formatting.c:2286 +#: utils/adt/formatting.c:2400 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "このフィールドには%d文字必要ですが、%d文字しかパースされませんでした。" -#: utils/adt/formatting.c:2299 +#: utils/adt/formatting.c:2414 #, c-format msgid "Value must be an integer." msgstr "値は整数でなければなりません。" -#: utils/adt/formatting.c:2304 +#: utils/adt/formatting.c:2419 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "もとの文字列において\"%s\"に対応する値が範囲外です" -#: utils/adt/formatting.c:2306 +#: utils/adt/formatting.c:2421 #, c-format msgid "Value must be in the range %d to %d." msgstr "値は%dから%dまでの範囲でなければなりません。" -#: utils/adt/formatting.c:2429 +#: utils/adt/formatting.c:2637 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "与えられた値がこの項目に対して許されるいずれの値ともマッチしません。" -#: utils/adt/formatting.c:2627 utils/adt/formatting.c:2647 -#: utils/adt/formatting.c:2667 utils/adt/formatting.c:2687 -#: utils/adt/formatting.c:2706 utils/adt/formatting.c:2725 -#: utils/adt/formatting.c:2749 utils/adt/formatting.c:2767 -#: utils/adt/formatting.c:2785 utils/adt/formatting.c:2803 -#: utils/adt/formatting.c:2820 utils/adt/formatting.c:2837 +#: utils/adt/formatting.c:2854 utils/adt/formatting.c:2874 utils/adt/formatting.c:2894 utils/adt/formatting.c:2914 utils/adt/formatting.c:2933 utils/adt/formatting.c:2952 utils/adt/formatting.c:2976 utils/adt/formatting.c:2994 utils/adt/formatting.c:3012 utils/adt/formatting.c:3030 utils/adt/formatting.c:3047 utils/adt/formatting.c:3064 #, c-format msgid "localized string format value too long" msgstr "地域化した文字列のフォーマットが長すぎます" -#: utils/adt/formatting.c:3179 +#: utils/adt/formatting.c:3298 +#, c-format +msgid "unmatched format separator \"%c\"" +msgstr "合致しないフォーマットセパレータ \"%c\"" + +#: utils/adt/formatting.c:3453 utils/adt/formatting.c:3797 #, c-format msgid "formatting field \"%s\" is only supported in to_char" msgstr "形式指定フィールド\"%s\"はto_charの中でのみサポートされています" -#: utils/adt/formatting.c:3320 +#: utils/adt/formatting.c:3628 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr " \"Y,YYY\"に対応する入力文字列が不正です" -#: utils/adt/formatting.c:3854 +#: utils/adt/formatting.c:3714 +#, c-format +msgid "input string is too short for datetime format" +msgstr "datetime書式に対して入力文字列が短すぎます" + +#: utils/adt/formatting.c:3722 +#, c-format +msgid "trailing characters remain in input string after datetime format" +msgstr "datetimeフォーマット後に文字が入力文字列中に残っています" + +#: utils/adt/formatting.c:4267 +#, c-format +msgid "missing time zone in input string for type timestamptz" +msgstr "timestamptz型に対応する入力に時間帯がありません" + +#: utils/adt/formatting.c:4273 +#, c-format +msgid "timestamptz out of range" +msgstr "timestamptzの範囲外です" + +#: utils/adt/formatting.c:4301 +#, c-format +msgid "datetime format is zoned but not timed" +msgstr "datetimeフォーマットで時間帯は指定されていますが、時刻が指定されていません" + +#: utils/adt/formatting.c:4353 +#, c-format +msgid "missing time zone in input string for type timetz" +msgstr "timetz型に対する入力文字列中に時間帯がありません" + +#: utils/adt/formatting.c:4359 +#, c-format +msgid "timetz out of range" +msgstr "timetzの範囲外です" + +#: utils/adt/formatting.c:4385 +#, c-format +msgid "datetime format is not dated and not timed" +msgstr "datetimeフォーマットで日付は指定されていますが、時間が指定されていません" + +#: utils/adt/formatting.c:4518 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "12時間形式では\"%d\"時は不正です" -#: utils/adt/formatting.c:3856 +#: utils/adt/formatting.c:4520 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "24時間形式を使うか、もしくは 1 から 12 の間で指定してください。" -#: utils/adt/formatting.c:3962 +#: utils/adt/formatting.c:4628 #, c-format msgid "cannot calculate day of year without year information" msgstr "年の情報なしでは年内の日数は計算できません" -#: utils/adt/formatting.c:4869 +#: utils/adt/formatting.c:5547 #, c-format msgid "\"EEEE\" not supported for input" msgstr "\"EEEE\"は入力としてサポートしていません" -#: utils/adt/formatting.c:4881 +#: utils/adt/formatting.c:5559 #, c-format msgid "\"RN\" not supported for input" msgstr "\"RN\"は入力としてサポートしていません" -#: utils/adt/genfile.c:81 +#: utils/adt/genfile.c:75 #, c-format msgid "reference to parent directory (\"..\") not allowed" msgstr "親ディレクトリへの参照(\"..\")は許可されていません" -#: utils/adt/genfile.c:92 +#: utils/adt/genfile.c:86 #, c-format msgid "absolute path not allowed" msgstr "絶対パスは許可されていません" -#: utils/adt/genfile.c:97 +#: utils/adt/genfile.c:91 #, c-format msgid "path must be in or below the current directory" msgstr "パスはカレントディレクトリもしくはその下でなければなりません" -#: utils/adt/genfile.c:144 utils/adt/oracle_compat.c:185 -#: utils/adt/oracle_compat.c:283 utils/adt/oracle_compat.c:759 -#: utils/adt/oracle_compat.c:1054 +#: utils/adt/genfile.c:116 utils/adt/oracle_compat.c:185 utils/adt/oracle_compat.c:283 utils/adt/oracle_compat.c:759 utils/adt/oracle_compat.c:1054 #, c-format msgid "requested length too large" msgstr "要求した長さが長すぎます" -#: utils/adt/genfile.c:161 +#: utils/adt/genfile.c:133 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "ファイル\"%s\"をシークできませんでした: %m" -#: utils/adt/genfile.c:221 +#: utils/adt/genfile.c:174 +#, c-format +msgid "file length too large" +msgstr "ファイルが大きすぎます" + +#: utils/adt/genfile.c:251 #, c-format msgid "must be superuser to read files with adminpack 1.0" msgstr "adminpack 1.0 でファイルを読み込むにはスーパユーザである必要があります" @@ -21853,8 +21647,7 @@ msgstr "不正な直線の指定: AとBは同時に0にはできません" msgid "invalid line specification: must be two distinct points" msgstr "不正な直線の指定: 2つの点は異なっている必要があります" -#: utils/adt/geo_ops.c:1399 utils/adt/geo_ops.c:3370 utils/adt/geo_ops.c:4238 -#: utils/adt/geo_ops.c:5129 +#: utils/adt/geo_ops.c:1399 utils/adt/geo_ops.c:3486 utils/adt/geo_ops.c:4354 utils/adt/geo_ops.c:5248 #, c-format msgid "too many points requested" msgstr "要求された点が多すぎます" @@ -21864,52 +21657,57 @@ msgstr "要求された点が多すぎます" msgid "invalid number of points in external \"path\" value" msgstr "\"path\"の外部値における点の数が不正です" -#: utils/adt/geo_ops.c:2459 +#: utils/adt/geo_ops.c:2537 #, c-format msgid "function \"dist_lb\" not implemented" msgstr "関数\"dist_lb\"は実装されていません" -#: utils/adt/geo_ops.c:2859 +#: utils/adt/geo_ops.c:2556 +#, c-format +msgid "function \"dist_bl\" not implemented" +msgstr "関数\"dist_bl\"\"は実装されていません" + +#: utils/adt/geo_ops.c:2975 #, c-format msgid "function \"close_sl\" not implemented" msgstr "関数\"close_sl\"は実装されていません" -#: utils/adt/geo_ops.c:3006 +#: utils/adt/geo_ops.c:3122 #, c-format msgid "function \"close_lb\" not implemented" msgstr "関数\"close_lb\"は実装されていません" -#: utils/adt/geo_ops.c:3417 +#: utils/adt/geo_ops.c:3533 #, c-format msgid "invalid number of points in external \"polygon\" value" msgstr "\"polygon\"の外部値の点の数が不正です" -#: utils/adt/geo_ops.c:3953 +#: utils/adt/geo_ops.c:4069 #, c-format msgid "function \"poly_distance\" not implemented" msgstr "関数\"poly_distance\"は実装されていません" -#: utils/adt/geo_ops.c:4330 +#: utils/adt/geo_ops.c:4446 #, c-format msgid "function \"path_center\" not implemented" msgstr "関数\"path_center\"は実装されていません" -#: utils/adt/geo_ops.c:4347 +#: utils/adt/geo_ops.c:4463 #, c-format msgid "open path cannot be converted to polygon" msgstr "開経路を多角形に変換できません" -#: utils/adt/geo_ops.c:4594 +#: utils/adt/geo_ops.c:4713 #, c-format msgid "invalid radius in external \"circle\" value" msgstr "\"circle\"の外部値の半径が不正です" -#: utils/adt/geo_ops.c:5115 +#: utils/adt/geo_ops.c:5234 #, c-format msgid "cannot convert circle with radius zero to polygon" msgstr "半径0の円を多角形に返還できません" -#: utils/adt/geo_ops.c:5120 +#: utils/adt/geo_ops.c:5239 #, c-format msgid "must request at least 2 points" msgstr "少なくとも2ポイントを要求しなければなりません" @@ -21919,519 +21717,490 @@ msgstr "少なくとも2ポイントを要求しなければなりません" msgid "int2vector has too many elements" msgstr "int2vectorの要素数が多すぎます" -#: utils/adt/int.c:239 +#: utils/adt/int.c:237 #, c-format msgid "invalid int2vector data" msgstr "不正なint2vectorデータ" -#: utils/adt/int.c:245 utils/adt/oid.c:215 utils/adt/oid.c:296 +#: utils/adt/int.c:243 utils/adt/oid.c:215 utils/adt/oid.c:296 #, c-format msgid "oidvector has too many elements" msgstr "oidvectorの要素が多すぎます" -#: utils/adt/int.c:1383 utils/adt/int8.c:1328 utils/adt/numeric.c:1423 -#: utils/adt/timestamp.c:5408 utils/adt/timestamp.c:5489 +#: utils/adt/int.c:1508 utils/adt/int8.c:1446 utils/adt/numeric.c:1623 utils/adt/timestamp.c:5435 utils/adt/timestamp.c:5515 #, c-format msgid "step size cannot equal zero" msgstr "ステップ数をゼロにすることはできません" -#: utils/adt/int8.c:529 utils/adt/int8.c:552 utils/adt/int8.c:566 -#: utils/adt/int8.c:580 utils/adt/int8.c:611 utils/adt/int8.c:635 -#: utils/adt/int8.c:690 utils/adt/int8.c:704 utils/adt/int8.c:728 -#: utils/adt/int8.c:741 utils/adt/int8.c:810 utils/adt/int8.c:824 -#: utils/adt/int8.c:838 utils/adt/int8.c:869 utils/adt/int8.c:891 -#: utils/adt/int8.c:905 utils/adt/int8.c:919 utils/adt/int8.c:952 -#: utils/adt/int8.c:966 utils/adt/int8.c:980 utils/adt/int8.c:1011 -#: utils/adt/int8.c:1033 utils/adt/int8.c:1047 utils/adt/int8.c:1061 -#: utils/adt/int8.c:1230 utils/adt/int8.c:1272 utils/adt/numeric.c:3313 -#: utils/adt/varbit.c:1656 +#: utils/adt/int8.c:534 utils/adt/int8.c:557 utils/adt/int8.c:571 utils/adt/int8.c:585 utils/adt/int8.c:616 utils/adt/int8.c:640 utils/adt/int8.c:722 utils/adt/int8.c:790 utils/adt/int8.c:796 utils/adt/int8.c:822 utils/adt/int8.c:836 utils/adt/int8.c:860 utils/adt/int8.c:873 utils/adt/int8.c:942 utils/adt/int8.c:956 utils/adt/int8.c:970 utils/adt/int8.c:1001 utils/adt/int8.c:1023 utils/adt/int8.c:1037 utils/adt/int8.c:1051 utils/adt/int8.c:1084 +#: utils/adt/int8.c:1098 utils/adt/int8.c:1112 utils/adt/int8.c:1143 utils/adt/int8.c:1165 utils/adt/int8.c:1179 utils/adt/int8.c:1193 utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4217 utils/adt/varbit.c:1656 #, c-format msgid "bigint out of range" msgstr "bigintの範囲外です" -#: utils/adt/int8.c:1285 +#: utils/adt/int8.c:1403 #, c-format msgid "OID out of range" msgstr "OIDの範囲外です" -#: utils/adt/json.c:787 -#, c-format -msgid "Character with value 0x%02x must be escaped." -msgstr "0x%02x値を持つ文字はエスケープしなければなりません" - -#: utils/adt/json.c:828 -#, c-format -msgid "\"\\u\" must be followed by four hexadecimal digits." -msgstr "\"\\u\"の後には16進数の4桁が続かなければなりません。" - -#: utils/adt/json.c:949 utils/adt/json.c:967 -#, c-format -msgid "Escape sequence \"\\%s\" is invalid." -msgstr "エスケープシーケンス\"\\%s\"は不正です。" - -#: utils/adt/json.c:1136 -#, c-format -msgid "The input string ended unexpectedly." -msgstr "入力文字列が予期せず終了しました。" - -#: utils/adt/json.c:1150 -#, c-format -msgid "Expected end of input, but found \"%s\"." -msgstr "入力の終端を想定していましたが、\"%s\"でした。" - -#: utils/adt/json.c:1161 -#, c-format -msgid "Expected JSON value, but found \"%s\"." -msgstr "JSON値を想定していましたが、\"%s\"でした。" - -#: utils/adt/json.c:1169 utils/adt/json.c:1217 -#, c-format -msgid "Expected string, but found \"%s\"." -msgstr "文字列を想定していましたが、\"%s\"でした。" - -#: utils/adt/json.c:1177 -#, c-format -msgid "Expected array element or \"]\", but found \"%s\"." -msgstr "配列要素または\"]\"を想定していましたが、\"%s\"でした。" - -#: utils/adt/json.c:1185 -#, c-format -msgid "Expected \",\" or \"]\", but found \"%s\"." -msgstr "\",\"または\"]\"を想定していましたが、\"%s\"でした。" - -#: utils/adt/json.c:1193 -#, c-format -msgid "Expected string or \"}\", but found \"%s\"." -msgstr "文字列または\"}\"を想定していましたが、\"%s\"でした。" - -#: utils/adt/json.c:1201 -#, c-format -msgid "Expected \":\", but found \"%s\"." -msgstr "\":\"を想定していましたが、\"%s\"でした。" - -#: utils/adt/json.c:1209 -#, c-format -msgid "Expected \",\" or \"}\", but found \"%s\"." -msgstr "\",\"または\"}\"を想定していましたが、\"%s\"でした。" - -#: utils/adt/json.c:1247 -#, c-format -msgid "Token \"%s\" is invalid." -msgstr "トークン\"%s\"は不正です。" - -#: utils/adt/json.c:1319 -#, c-format -msgid "JSON data, line %d: %s%s%s" -msgstr "JSONデータ、%d行目: %s%s%s" - -#: utils/adt/json.c:1475 utils/adt/jsonb.c:739 +#: utils/adt/json.c:271 utils/adt/jsonb.c:757 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "キー値は配列でも複合型でもJSONでもなく、スカラでなくてはなりません" -#: utils/adt/json.c:2076 utils/adt/json.c:2086 utils/fmgr/funcapi.c:1549 +#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:1812 #, c-format msgid "could not determine data type for argument %d" msgstr "引数%dのデータ型が特定できませんでした" -#: utils/adt/json.c:2110 utils/adt/jsonb.c:1707 +#: utils/adt/json.c:926 utils/adt/jsonb.c:1728 #, c-format msgid "field name must not be null" msgstr "フィールド名はnullであってはなりません" -#: utils/adt/json.c:2194 utils/adt/jsonb.c:1157 +#: utils/adt/json.c:1010 utils/adt/jsonb.c:1178 #, c-format msgid "argument list must have even number of elements" msgstr "引数リストの要素数は偶数でなければなりません" #. translator: %s is a SQL function name -#: utils/adt/json.c:2196 utils/adt/jsonb.c:1159 +#: utils/adt/json.c:1012 utils/adt/jsonb.c:1180 #, c-format msgid "The arguments of %s must consist of alternating keys and values." msgstr "%s の引数ではキーと値が交互になっている必要があります。" -#: utils/adt/json.c:2212 +#: utils/adt/json.c:1028 #, c-format msgid "argument %d cannot be null" msgstr "引数%dはnullであってはなりません" -#: utils/adt/json.c:2213 +#: utils/adt/json.c:1029 #, c-format msgid "Object keys should be text." msgstr "オブジェクトキーはテキストでなければなりません。" -#: utils/adt/json.c:2319 utils/adt/jsonb.c:1289 +#: utils/adt/json.c:1135 utils/adt/jsonb.c:1310 #, c-format msgid "array must have two columns" msgstr "配列は最低でも2つの列が必要です" -#: utils/adt/json.c:2343 utils/adt/json.c:2427 utils/adt/jsonb.c:1313 -#: utils/adt/jsonb.c:1408 +#: utils/adt/json.c:1159 utils/adt/json.c:1243 utils/adt/jsonb.c:1334 utils/adt/jsonb.c:1429 #, c-format msgid "null value not allowed for object key" msgstr "オブジェクトキーにnullは使えません" -#: utils/adt/json.c:2416 utils/adt/jsonb.c:1397 +#: utils/adt/json.c:1232 utils/adt/jsonb.c:1418 #, c-format msgid "mismatched array dimensions" msgstr "配列の次元が合っていません" -#: utils/adt/jsonb.c:269 +#: utils/adt/jsonb.c:287 #, c-format msgid "string too long to represent as jsonb string" msgstr "文字列はjsonb文字列として表現するには長すぎます" -#: utils/adt/jsonb.c:270 +#: utils/adt/jsonb.c:288 #, c-format msgid "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." msgstr "実装上の制約のため、jsonb文字列は%dバイトまでである必要があります。" -#: utils/adt/jsonb.c:1172 +#: utils/adt/jsonb.c:1193 #, c-format msgid "argument %d: key must not be null" msgstr "引数%d: キーはnullであってはなりません" -#: utils/adt/jsonb.c:1760 +#: utils/adt/jsonb.c:1781 #, c-format msgid "object keys must be strings" msgstr "オブエクとキーは文字列である必要があります" -#: utils/adt/jsonb.c:1923 +#: utils/adt/jsonb.c:1944 #, c-format msgid "cannot cast jsonb null to type %s" msgstr "jsonb null は%s型にはキャストできません" -#: utils/adt/jsonb.c:1924 +#: utils/adt/jsonb.c:1945 #, c-format msgid "cannot cast jsonb string to type %s" msgstr "jsonb文字列は%s型へはキャストできません" -#: utils/adt/jsonb.c:1925 +#: utils/adt/jsonb.c:1946 #, c-format msgid "cannot cast jsonb numeric to type %s" msgstr "jsonb numericは%s型へはキャストできません" -#: utils/adt/jsonb.c:1926 +#: utils/adt/jsonb.c:1947 #, c-format msgid "cannot cast jsonb boolean to type %s" msgstr "jsonbブール型は%s型へはキャストできません" -#: utils/adt/jsonb.c:1927 +#: utils/adt/jsonb.c:1948 #, c-format msgid "cannot cast jsonb array to type %s" msgstr "jsonb配列は%s型へはキャストできません" -#: utils/adt/jsonb.c:1928 +#: utils/adt/jsonb.c:1949 #, c-format msgid "cannot cast jsonb object to type %s" msgstr "jsonbオブジェクトは%s型へはキャストできません" -#: utils/adt/jsonb.c:1929 +#: utils/adt/jsonb.c:1950 #, c-format msgid "cannot cast jsonb array or object to type %s" msgstr "jsonbの配列またはオブジェクトは%s型へはキャストできません" -#: utils/adt/jsonb_util.c:657 +#: utils/adt/jsonb_util.c:699 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "jsonbオブジェクトペア数が許された最大の値(%zu)を上回っています" -#: utils/adt/jsonb_util.c:698 +#: utils/adt/jsonb_util.c:740 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "jsonbの配列要素の数が許された最大の値(%zu)を上回っています" -#: utils/adt/jsonb_util.c:1569 utils/adt/jsonb_util.c:1589 +#: utils/adt/jsonb_util.c:1614 utils/adt/jsonb_util.c:1634 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "jsonbの配列要素の全体の大きさが許された最大値%uバイトを上回っています" -#: utils/adt/jsonb_util.c:1650 utils/adt/jsonb_util.c:1685 -#: utils/adt/jsonb_util.c:1705 +#: utils/adt/jsonb_util.c:1695 utils/adt/jsonb_util.c:1730 utils/adt/jsonb_util.c:1750 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "jsonbのオブジェクト要素全体のサイズが最大値である%uを超えています" -#: utils/adt/jsonfuncs.c:522 utils/adt/jsonfuncs.c:687 -#: utils/adt/jsonfuncs.c:2275 utils/adt/jsonfuncs.c:2715 -#: utils/adt/jsonfuncs.c:3505 utils/adt/jsonfuncs.c:3836 +#: utils/adt/jsonfuncs.c:551 utils/adt/jsonfuncs.c:796 utils/adt/jsonfuncs.c:2330 utils/adt/jsonfuncs.c:2770 utils/adt/jsonfuncs.c:3560 utils/adt/jsonfuncs.c:3891 #, c-format msgid "cannot call %s on a scalar" msgstr "スカラに対して%sを呼び出すことはできません" -#: utils/adt/jsonfuncs.c:527 utils/adt/jsonfuncs.c:674 -#: utils/adt/jsonfuncs.c:2717 utils/adt/jsonfuncs.c:3494 +#: utils/adt/jsonfuncs.c:556 utils/adt/jsonfuncs.c:783 utils/adt/jsonfuncs.c:2772 utils/adt/jsonfuncs.c:3549 #, c-format msgid "cannot call %s on an array" msgstr "配列に対して%sを呼び出すことはできません" -#: utils/adt/jsonfuncs.c:1590 utils/adt/jsonfuncs.c:1625 +#: utils/adt/jsonfuncs.c:692 +#, c-format +msgid "JSON data, line %d: %s%s%s" +msgstr "JSONデータ、%d行目: %s%s%s" + +#: utils/adt/jsonfuncs.c:1682 utils/adt/jsonfuncs.c:1717 #, c-format msgid "cannot get array length of a scalar" msgstr "スカラから配列長を得ることはできません" -#: utils/adt/jsonfuncs.c:1594 utils/adt/jsonfuncs.c:1613 +#: utils/adt/jsonfuncs.c:1686 utils/adt/jsonfuncs.c:1705 #, c-format msgid "cannot get array length of a non-array" msgstr "配列では無いものから配列長を得ることはできません" -#: utils/adt/jsonfuncs.c:1690 +#: utils/adt/jsonfuncs.c:1782 #, c-format msgid "cannot call %s on a non-object" msgstr "非オブジェクトに対して%sは呼び出せません" -#: utils/adt/jsonfuncs.c:1948 +#: utils/adt/jsonfuncs.c:2021 #, c-format msgid "cannot deconstruct an array as an object" msgstr "配列をオブジェクトとして再構築することはできません" -#: utils/adt/jsonfuncs.c:1960 +#: utils/adt/jsonfuncs.c:2033 #, c-format msgid "cannot deconstruct a scalar" msgstr "スカラを再構築することはできません" -#: utils/adt/jsonfuncs.c:2006 +#: utils/adt/jsonfuncs.c:2079 #, c-format msgid "cannot extract elements from a scalar" msgstr "スカラから要素を取り出すことはできません" -#: utils/adt/jsonfuncs.c:2010 +#: utils/adt/jsonfuncs.c:2083 #, c-format msgid "cannot extract elements from an object" msgstr "オブジェクトから要素を取り出すことはできません" -#: utils/adt/jsonfuncs.c:2262 utils/adt/jsonfuncs.c:3720 +#: utils/adt/jsonfuncs.c:2317 utils/adt/jsonfuncs.c:3775 #, c-format msgid "cannot call %s on a non-array" msgstr "非配列に対して%sを呼び出すことはできません" -#: utils/adt/jsonfuncs.c:2332 utils/adt/jsonfuncs.c:2337 -#: utils/adt/jsonfuncs.c:2354 utils/adt/jsonfuncs.c:2360 +#: utils/adt/jsonfuncs.c:2387 utils/adt/jsonfuncs.c:2392 utils/adt/jsonfuncs.c:2409 utils/adt/jsonfuncs.c:2415 #, c-format msgid "expected JSON array" msgstr "JSON配列を期待していました" -#: utils/adt/jsonfuncs.c:2333 +#: utils/adt/jsonfuncs.c:2388 #, c-format msgid "See the value of key \"%s\"." msgstr "キー\"%s\"の値を見てください。" -#: utils/adt/jsonfuncs.c:2355 +#: utils/adt/jsonfuncs.c:2410 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "キー\"%s\"の配列要素%sを見てください。" -#: utils/adt/jsonfuncs.c:2361 +#: utils/adt/jsonfuncs.c:2416 #, c-format msgid "See the array element %s." msgstr "配列要素%sを見てください。" -#: utils/adt/jsonfuncs.c:2396 +#: utils/adt/jsonfuncs.c:2451 #, c-format msgid "malformed JSON array" msgstr "不正な形式のJSON配列" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3223 +#: utils/adt/jsonfuncs.c:3278 #, c-format msgid "first argument of %s must be a row type" msgstr "%sの最初の引数は行型でなければなりません" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3247 -#, fuzzy, c-format -#| msgid "could not determine data type for argument %d" +#: utils/adt/jsonfuncs.c:3302 +#, c-format msgid "could not determine row type for result of %s" -msgstr "引数%dのデータ型が特定できませんでした" +msgstr "%sの結果に対応する行の型を決定できませんでした" -#: utils/adt/jsonfuncs.c:3249 -#, fuzzy, c-format -#| msgid "Try calling the function in the FROM clause using a column definition list." +#: utils/adt/jsonfuncs.c:3304 +#, c-format msgid "Provide a non-null record argument, or call the function in the FROM clause using a column definition list." -msgstr "FROM句で列定義リストを使ってこの関数を呼び出してみてください。" +msgstr "非NULLのレコード引数を与えるか、列定義リストを用いてこの関数をFROM句中で呼び出してください。" -#: utils/adt/jsonfuncs.c:3737 utils/adt/jsonfuncs.c:3818 +#: utils/adt/jsonfuncs.c:3792 utils/adt/jsonfuncs.c:3873 #, c-format msgid "argument of %s must be an array of objects" msgstr "%sの引数はオブジェクト配列でなければなりません" -#: utils/adt/jsonfuncs.c:3770 +#: utils/adt/jsonfuncs.c:3825 #, c-format msgid "cannot call %s on an object" msgstr "オブジェクトに対して%sを呼び出すことはできません" -#: utils/adt/jsonfuncs.c:4247 utils/adt/jsonfuncs.c:4306 -#: utils/adt/jsonfuncs.c:4386 +#: utils/adt/jsonfuncs.c:4286 utils/adt/jsonfuncs.c:4345 utils/adt/jsonfuncs.c:4425 #, c-format msgid "cannot delete from scalar" msgstr "スカラから削除することはできません" -#: utils/adt/jsonfuncs.c:4391 +#: utils/adt/jsonfuncs.c:4430 #, c-format msgid "cannot delete from object using integer index" msgstr "オブジェクトから整数添字を使って削除することはできません" -#: utils/adt/jsonfuncs.c:4457 utils/adt/jsonfuncs.c:4549 +#: utils/adt/jsonfuncs.c:4495 utils/adt/jsonfuncs.c:4653 #, c-format msgid "cannot set path in scalar" msgstr "スカラにパスを設定することはできません" -#: utils/adt/jsonfuncs.c:4502 +#: utils/adt/jsonfuncs.c:4537 utils/adt/jsonfuncs.c:4579 +#, c-format +msgid "null_value_treatment must be \"delete_key\", \"return_target\", \"use_json_null\", or \"raise_exception\"" +msgstr "null_value_treatment は \"delete_key\", \"return_target\", \"use_json_null\" または \"raise_exception\"である必要があります" + +#: utils/adt/jsonfuncs.c:4550 +#, c-format +msgid "JSON value must not be null" +msgstr "JSON値はnullではあってはなりません" + +#: utils/adt/jsonfuncs.c:4551 +#, c-format +msgid "Exception was raised because null_value_treatment is \"raise_exception\"." +msgstr "null_value_treatmentが\"raise_exception\"であるため、例外が出力されました" + +#: utils/adt/jsonfuncs.c:4552 +#, c-format +msgid "To avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not passed." +msgstr "これを避けるには、 null_value_treatment引数を変更するか、SQLのNULLを渡さないようにしてください。" + +#: utils/adt/jsonfuncs.c:4607 #, c-format msgid "cannot delete path in scalar" msgstr "スカラでパスを削除することはできません" -#: utils/adt/jsonfuncs.c:4672 +#: utils/adt/jsonfuncs.c:4776 #, c-format msgid "invalid concatenation of jsonb objects" msgstr "jsonbオブジェクト間の不正な結合" -#: utils/adt/jsonfuncs.c:4706 +#: utils/adt/jsonfuncs.c:4810 #, c-format msgid "path element at position %d is null" msgstr "位置%dのパス要素がnullです" -#: utils/adt/jsonfuncs.c:4792 +#: utils/adt/jsonfuncs.c:4896 #, c-format msgid "cannot replace existing key" msgstr "既存のキーを置き換えることはできません" -#: utils/adt/jsonfuncs.c:4793 +#: utils/adt/jsonfuncs.c:4897 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "jsonb_set関数を使ってキー値を置き換えることを試してください。" -#: utils/adt/jsonfuncs.c:4875 +#: utils/adt/jsonfuncs.c:4979 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "位置%dのパス要素が整数ではありません: \"%s\"" -#: utils/adt/jsonfuncs.c:4994 +#: utils/adt/jsonfuncs.c:5098 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "間違ったフラグのタイプ; 配列およびスカラのみ使用可能です" -#: utils/adt/jsonfuncs.c:5001 +#: utils/adt/jsonfuncs.c:5105 #, c-format msgid "flag array element is not a string" msgstr "フラグ配列の要素が文字列ではありません" -#: utils/adt/jsonfuncs.c:5002 utils/adt/jsonfuncs.c:5024 +#: utils/adt/jsonfuncs.c:5106 utils/adt/jsonfuncs.c:5128 #, c-format msgid "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all\"." msgstr "使用可能な値は: \"string\", \"numeric\", \"boolean\", \"key\"、および \"all\"。" -#: utils/adt/jsonfuncs.c:5022 +#: utils/adt/jsonfuncs.c:5126 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "フラグ配列内の間違ったフラグ値: \"%s\"" -#: utils/adt/jsonpath.c:360 +#: utils/adt/jsonpath.c:362 #, c-format msgid "@ is not allowed in root expressions" msgstr "ルート式では@を使用できません" -#: utils/adt/jsonpath.c:366 +#: utils/adt/jsonpath.c:368 #, c-format msgid "LAST is allowed only in array subscripts" msgstr "LAST は配列の添え字でのみ使用可能です" -#: utils/adt/jsonpath_exec.c:340 +#: utils/adt/jsonpath_exec.c:360 #, c-format msgid "single boolean result is expected" msgstr "単一のブール値の結果が必要です" -#: utils/adt/jsonpath_exec.c:488 +#: utils/adt/jsonpath_exec.c:556 #, c-format msgid "\"vars\" argument is not an object" msgstr "引数\"vars\"がオブジェクトではありません" -#: utils/adt/jsonpath_exec.c:489 +#: utils/adt/jsonpath_exec.c:557 #, c-format msgid "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." msgstr "Jsonpath パラメータは \"vars\"オブジェクトの key-value ペアの形にエンコードされていなければなりません。" -#: utils/adt/jsonpath_exec.c:605 +#: utils/adt/jsonpath_exec.c:674 #, c-format msgid "JSON object does not contain key \"%s\"" msgstr "JSONオブジェクトはキー\"%s\"を含んでいません" -#: utils/adt/jsonpath_exec.c:617 +#: utils/adt/jsonpath_exec.c:686 #, c-format msgid "jsonpath member accessor can only be applied to an object" msgstr "jsonpathメンバアクセサはオブジェクトに対してのみ適用可能です" -#: utils/adt/jsonpath_exec.c:646 +#: utils/adt/jsonpath_exec.c:715 #, c-format msgid "jsonpath wildcard array accessor can only be applied to an array" msgstr "jsonpath ワイルドカード配列アクセサは配列にのみ適用可能です" -#: utils/adt/jsonpath_exec.c:694 +#: utils/adt/jsonpath_exec.c:763 #, c-format msgid "jsonpath array subscript is out of bounds" msgstr "jsonpath配列の添え字が範囲外です" -#: utils/adt/jsonpath_exec.c:751 +#: utils/adt/jsonpath_exec.c:820 #, c-format msgid "jsonpath array accessor can only be applied to an array" msgstr "jsonpath 配列アクセサは配列にのみ適用可能です" -#: utils/adt/jsonpath_exec.c:805 +#: utils/adt/jsonpath_exec.c:874 #, c-format msgid "jsonpath wildcard member accessor can only be applied to an object" msgstr "jsonpathワイルドカードメンバアクセサはオブジェクトに対してのみ適用可能です" -#: utils/adt/jsonpath_exec.c:935 +#: utils/adt/jsonpath_exec.c:1004 #, c-format msgid "jsonpath item method .%s() can only be applied to an array" msgstr "jsonpath 項目メソッド .%s() は配列にのみ適用可能です" -#: utils/adt/jsonpath_exec.c:989 utils/adt/jsonpath_exec.c:1010 -#: utils/adt/jsonpath_exec.c:1680 +#: utils/adt/jsonpath_exec.c:1059 #, c-format -msgid "jsonpath item method .%s() can only be applied to a numeric value" -msgstr "jsonpath 項目メソッド .%s() は数値にのみ適用可能です" +msgid "numeric argument of jsonpath item method .%s() is out of range for type double precision" +msgstr "JSONパス項目メソッド .%s() のnumeric型の引数がdouble precisionの範囲外です" + +#: utils/adt/jsonpath_exec.c:1080 +#, c-format +msgid "string argument of jsonpath item method .%s() is not a valid representation of a double precision number" +msgstr "jsonpath項目メソッド .%s() の文字列引数はの有効な倍精度数表現ではありません" -#: utils/adt/jsonpath_exec.c:1023 +#: utils/adt/jsonpath_exec.c:1093 #, c-format msgid "jsonpath item method .%s() can only be applied to a string or numeric value" msgstr "jsonpath 項目メソッド .%s() は文字列または数値にのみ適用可能です" -#: utils/adt/jsonpath_exec.c:1507 +#: utils/adt/jsonpath_exec.c:1583 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "jsonpath演算子 %s の左辺値が単一の数値ではありません" -#: utils/adt/jsonpath_exec.c:1514 +#: utils/adt/jsonpath_exec.c:1590 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "jsonpath演算子 %s の右辺値が単一の数値ではありません" -#: utils/adt/jsonpath_exec.c:1582 +#: utils/adt/jsonpath_exec.c:1658 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "単項jsonpath演算子 %s のオペランドが数値ではありません" -#: utils/adt/jsonpath_exec.c:1739 +#: utils/adt/jsonpath_exec.c:1756 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a numeric value" +msgstr "jsonpath 項目メソッド .%s() は数値にのみ適用可能です" + +#: utils/adt/jsonpath_exec.c:1796 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a string" +msgstr "jsonpath 項目メソッド .%s() は文字列にのみ適用可能です" + +#: utils/adt/jsonpath_exec.c:1884 +#, c-format +msgid "datetime format is not recognized: \"%s\"" +msgstr "datetime書式を認識できません: \"%s\"" + +#: utils/adt/jsonpath_exec.c:1886 +#, c-format +msgid "Use a datetime template argument to specify the input data format." +msgstr "datetimeテンプレート引数を使って入力データフォーマットを指定してください。" + +#: utils/adt/jsonpath_exec.c:1954 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "jsonpath項目メソッド .%s() はオブジェクトに対してのみ適用可能です" -#: utils/adt/jsonpath_exec.c:1922 +#: utils/adt/jsonpath_exec.c:2137 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "jsonpath変数\"%s\"が見つかりませんでした" -#: utils/adt/jsonpath_exec.c:2169 +#: utils/adt/jsonpath_exec.c:2401 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "jsonpath配列添え字が単一の数値ではありません" -#: utils/adt/jsonpath_exec.c:2181 +#: utils/adt/jsonpath_exec.c:2413 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "jsonpath配列の添え字が整数の範囲外です" +#: utils/adt/jsonpath_exec.c:2590 +#, c-format +msgid "cannot convert value from %s to %s without timezone usage" +msgstr "時間帯を使用せずに %s から %s への値の変換はできません" + +#: utils/adt/jsonpath_exec.c:2592 +#, c-format +msgid "Use *_tz() function for timezone support." +msgstr "*_tz() 関数を使用することで時間帯がサポートされます" + #: utils/adt/levenshtein.c:133 #, c-format msgid "levenshtein argument exceeds maximum length of %d characters" @@ -22442,7 +22211,7 @@ msgstr "レーベンシュタイン距離関数の引数の長さが上限の%d msgid "nondeterministic collations are not supported for LIKE" msgstr "非決定的照合順序はLIKEではサポートされません" -#: utils/adt/like.c:193 utils/adt/like_support.c:964 +#: utils/adt/like.c:193 utils/adt/like_support.c:1002 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "ILIKE で使用する照合順序を特定できませんでした" @@ -22452,36 +22221,31 @@ msgstr "ILIKE で使用する照合順序を特定できませんでした" msgid "nondeterministic collations are not supported for ILIKE" msgstr "非決定的照合順序はILIKEではサポートされません" -#: utils/adt/like_match.c:107 utils/adt/like_match.c:167 +#: utils/adt/like_match.c:108 utils/adt/like_match.c:168 #, c-format msgid "LIKE pattern must not end with escape character" msgstr "LIKE パターンはエスケープ文字で終わってはなりません" -#: utils/adt/like_match.c:292 utils/adt/regexp.c:702 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:700 #, c-format msgid "invalid escape string" msgstr "不正なエスケープ文字列" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:703 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:701 #, c-format msgid "Escape string must be empty or one character." msgstr "エスケープ文字は空か1文字でなければなりません。" -#: utils/adt/like_support.c:949 +#: utils/adt/like_support.c:987 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "型byteaでは大文字小文字の区別をしないマッチをサポートしません" -#: utils/adt/like_support.c:1051 +#: utils/adt/like_support.c:1089 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "型byteaでは正規表現のマッチをサポートしません" -#: utils/adt/lockfuncs.c:664 -#, c-format -msgid "cannot use advisory locks during a parallel operation" -msgstr "並列処理中は勧告的ロックは使用できません" - #: utils/adt/mac.c:102 #, c-format msgid "invalid octet value in \"macaddr\" value: \"%s\"" @@ -22497,225 +22261,276 @@ msgstr "macaddr8データがmacaddr型に変換するには範囲外です" msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." msgstr "左から4、5バイト目にFFとFEがあるアドレス、具体的には xx:xx:xx:ff:fe:xx:xx:xx のみがmacaddr8からmacaddrに変換できます。" -#: utils/adt/misc.c:225 +#: utils/adt/misc.c:240 #, c-format msgid "global tablespace never has databases" msgstr "グローバルテーブル空間にデータベースがありません" -#: utils/adt/misc.c:246 +#: utils/adt/misc.c:262 #, c-format msgid "%u is not a tablespace OID" msgstr "%uはテーブル空間のOIDではありません" -#: utils/adt/misc.c:435 +#: utils/adt/misc.c:448 msgid "unreserved" msgstr "予約されていません" -#: utils/adt/misc.c:439 +#: utils/adt/misc.c:452 msgid "unreserved (cannot be function or type name)" msgstr "予約されていません(関数または型名にはできません)" -#: utils/adt/misc.c:443 +#: utils/adt/misc.c:456 msgid "reserved (can be function or type name)" msgstr "予約されています(関数または型名にできます)" -#: utils/adt/misc.c:447 +#: utils/adt/misc.c:460 msgid "reserved" msgstr "予約されています" -#: utils/adt/misc.c:621 utils/adt/misc.c:635 utils/adt/misc.c:674 -#: utils/adt/misc.c:680 utils/adt/misc.c:686 utils/adt/misc.c:709 +#: utils/adt/misc.c:634 utils/adt/misc.c:648 utils/adt/misc.c:687 utils/adt/misc.c:693 utils/adt/misc.c:699 utils/adt/misc.c:722 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "文字列は有効な識別子ではありません: \"%s\"" -#: utils/adt/misc.c:623 +#: utils/adt/misc.c:636 #, c-format msgid "String has unclosed double quotes." msgstr "文字列中に閉じられていない二重引用符があります。" -#: utils/adt/misc.c:637 +#: utils/adt/misc.c:650 #, c-format msgid "Quoted identifier must not be empty." msgstr "引用符で囲まれた識別子は空であってはなりません。" -#: utils/adt/misc.c:676 +#: utils/adt/misc.c:689 #, c-format msgid "No valid identifier before \".\"." msgstr "\".\"の前に有効な識別子がありません。" -#: utils/adt/misc.c:682 +#: utils/adt/misc.c:695 #, c-format msgid "No valid identifier after \".\"." msgstr "\".\"の後に有効な識別子がありません。" -#: utils/adt/misc.c:743 +#: utils/adt/misc.c:753 #, c-format msgid "log format \"%s\" is not supported" msgstr "ログ形式\"%s\"はサポートされていません" -#: utils/adt/misc.c:744 +#: utils/adt/misc.c:754 #, c-format msgid "The supported log formats are \"stderr\" and \"csvlog\"." msgstr "サポートされているログ形式は\"stderr\"と\"csvlog\"です。" -#: utils/adt/network.c:85 +#: utils/adt/network.c:111 #, c-format msgid "invalid cidr value: \"%s\"" msgstr "不正なCIDR値: \"%s\"" -#: utils/adt/network.c:86 utils/adt/network.c:216 +#: utils/adt/network.c:112 utils/adt/network.c:242 #, c-format msgid "Value has bits set to right of mask." msgstr "値ではマスクの右側のビットがセットされています。" -#: utils/adt/network.c:127 utils/adt/network.c:800 utils/adt/network.c:825 -#: utils/adt/network.c:850 +#: utils/adt/network.c:153 utils/adt/network.c:1199 utils/adt/network.c:1224 utils/adt/network.c:1249 #, c-format msgid "could not format inet value: %m" msgstr "inet値を整形できませんでした: %m" #. translator: %s is inet or cidr -#: utils/adt/network.c:184 +#: utils/adt/network.c:210 #, c-format msgid "invalid address family in external \"%s\" value" msgstr "外部の\"%s\"値内の不正なアドレスファミリ" #. translator: %s is inet or cidr -#: utils/adt/network.c:191 +#: utils/adt/network.c:217 #, c-format msgid "invalid bits in external \"%s\" value" msgstr "外部の\"%s\"値内の不正なビット列" #. translator: %s is inet or cidr -#: utils/adt/network.c:200 +#: utils/adt/network.c:226 #, c-format msgid "invalid length in external \"%s\" value" msgstr "外部の\"%s\"値内の不正な長さ" -#: utils/adt/network.c:215 +#: utils/adt/network.c:241 #, c-format msgid "invalid external \"cidr\" value" msgstr "\"cidr\"の外部値が不正です" -#: utils/adt/network.c:311 utils/adt/network.c:334 +#: utils/adt/network.c:337 utils/adt/network.c:360 #, c-format msgid "invalid mask length: %d" msgstr "不正なマスク長: %d" -#: utils/adt/network.c:868 +#: utils/adt/network.c:1267 #, c-format msgid "could not format cidr value: %m" msgstr "cidr値を整形できませんでした: %m" -#: utils/adt/network.c:1101 +#: utils/adt/network.c:1500 #, c-format msgid "cannot merge addresses from different families" msgstr "異なるファミリのアドレスは結合できません" -#: utils/adt/network.c:1517 +#: utils/adt/network.c:1916 #, c-format msgid "cannot AND inet values of different sizes" msgstr "サイズが異なるinet値のANDはできません" -#: utils/adt/network.c:1549 +#: utils/adt/network.c:1948 #, c-format msgid "cannot OR inet values of different sizes" msgstr "サイズが異なるinet値のORはできません" -#: utils/adt/network.c:1610 utils/adt/network.c:1686 +#: utils/adt/network.c:2009 utils/adt/network.c:2085 #, c-format msgid "result is out of range" msgstr "結果が範囲外です" -#: utils/adt/network.c:1651 +#: utils/adt/network.c:2050 #, c-format msgid "cannot subtract inet values of different sizes" msgstr "サイズが異なるinet値の引き算はできません" -#: utils/adt/numeric.c:833 +#: utils/adt/numeric.c:974 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "外部\"numeric\"の値の符号が不正です" -#: utils/adt/numeric.c:839 +#: utils/adt/numeric.c:980 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "外部\"numeric\"の値の位取りが不正です" -#: utils/adt/numeric.c:848 +#: utils/adt/numeric.c:989 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "外部\"numeric\"の値の桁が不正です" -#: utils/adt/numeric.c:1046 utils/adt/numeric.c:1060 +#: utils/adt/numeric.c:1202 utils/adt/numeric.c:1216 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "NUMERICの精度%dは1から%dまででなければなりません" -#: utils/adt/numeric.c:1051 +#: utils/adt/numeric.c:1207 #, c-format msgid "NUMERIC scale %d must be between 0 and precision %d" msgstr "NUMERICの位取り%dは0から精度%dまででなければなりません" -#: utils/adt/numeric.c:1069 +#: utils/adt/numeric.c:1225 #, c-format msgid "invalid NUMERIC type modifier" msgstr "不正なNUMERIC型の修正子" -#: utils/adt/numeric.c:1401 +#: utils/adt/numeric.c:1583 +#, c-format +msgid "start value cannot be NaN" +msgstr "開始値はNaNにはできません" + +#: utils/adt/numeric.c:1587 +#, c-format +msgid "start value cannot be infinity" +msgstr "開始値は無限大にはできません" + +#: utils/adt/numeric.c:1594 +#, c-format +msgid "stop value cannot be NaN" +msgstr "終了値はNaNにはできません" + +#: utils/adt/numeric.c:1598 +#, c-format +msgid "stop value cannot be infinity" +msgstr "終了値は無限大にはできません" + +#: utils/adt/numeric.c:1611 +#, c-format +msgid "step size cannot be NaN" +msgstr "加算量はNaNにはできません" + +#: utils/adt/numeric.c:1615 #, c-format -msgid "start value cannot be NaN" -msgstr "開始値はNaNにはできません" +msgid "step size cannot be infinity" +msgstr "加算量は無限大にはできません" -#: utils/adt/numeric.c:1406 +#: utils/adt/numeric.c:1730 #, c-format -msgid "stop value cannot be NaN" -msgstr "終了値はNaNにはできません" +msgid "operand, lower bound, and upper bound cannot be infinity" +msgstr "オペランド、下限、上限を無限大にすることはできません" -#: utils/adt/numeric.c:1416 +#: utils/adt/numeric.c:3488 #, c-format -msgid "step size cannot be NaN" -msgstr "加算量はNaNにはできません" +msgid "factorial of a negative number is undefined" +msgstr "負数の階乗は定義されていません" -#: utils/adt/numeric.c:2857 utils/adt/numeric.c:5869 utils/adt/numeric.c:6324 -#: utils/adt/numeric.c:8046 utils/adt/numeric.c:8471 utils/adt/numeric.c:8585 -#: utils/adt/numeric.c:8658 +#: utils/adt/numeric.c:3498 utils/adt/numeric.c:6919 utils/adt/numeric.c:7403 utils/adt/numeric.c:9767 utils/adt/numeric.c:10205 utils/adt/numeric.c:10319 utils/adt/numeric.c:10392 #, c-format msgid "value overflows numeric format" msgstr "値がnumericの形式でオーバフローします" -#: utils/adt/numeric.c:3222 +#: utils/adt/numeric.c:4116 #, c-format msgid "cannot convert NaN to integer" msgstr "NaNをintegerに変換できません" -#: utils/adt/numeric.c:3305 +#: utils/adt/numeric.c:4120 +#, c-format +msgid "cannot convert infinity to integer" +msgstr "無限大をintegerには変換できません" + +#: utils/adt/numeric.c:4204 #, c-format msgid "cannot convert NaN to bigint" msgstr "NaNをbigintに変換できません" -#: utils/adt/numeric.c:3350 +#: utils/adt/numeric.c:4208 +#, c-format +msgid "cannot convert infinity to bigint" +msgstr "無限大をbigintには変換できません" + +#: utils/adt/numeric.c:4255 #, c-format msgid "cannot convert NaN to smallint" msgstr "NaNをsmallintに変換できません" -#: utils/adt/numeric.c:3387 utils/adt/numeric.c:3458 +#: utils/adt/numeric.c:4259 +#, c-format +msgid "cannot convert infinity to smallint" +msgstr "無限大をsmallintに変換できません" + +#: utils/adt/numeric.c:4450 +#, c-format +msgid "cannot convert NaN to pg_lsn" +msgstr "NaNをpg_lsnには変換できません" + +#: utils/adt/numeric.c:4454 +#, c-format +msgid "cannot convert infinity to pg_lsn" +msgstr "無限大をpg_lsnに変換できません" + +#: utils/adt/numeric.c:4463 #, c-format -msgid "cannot convert infinity to numeric" -msgstr "infinityをnumericに変換できません" +msgid "pg_lsn out of range" +msgstr "pg_lsnの範囲外です" -#: utils/adt/numeric.c:6408 +#: utils/adt/numeric.c:7487 utils/adt/numeric.c:7534 #, c-format msgid "numeric field overflow" msgstr "numericフィールドのオーバーフロー" -#: utils/adt/numeric.c:6409 +#: utils/adt/numeric.c:7488 #, c-format msgid "A field with precision %d, scale %d must round to an absolute value less than %s%d." msgstr "精度%d、位取り%dを持つフィールドは、%s%dより小さな絶対値に丸められます。" -#: utils/adt/numutils.c:90 +#: utils/adt/numeric.c:7535 +#, c-format +msgid "A field with precision %d, scale %d cannot hold an infinite value." +msgstr "精度%d、位取り%dを持つフィールドは、無限大値を格納できません。" + +#: utils/adt/numutils.c:154 #, c-format msgid "value \"%s\" is out of range for 8-bit integer" msgstr "値\"%s\"は8ビット整数の範囲外です" @@ -22745,129 +22560,141 @@ msgstr "要求された文字は不正なため符号化することができま msgid "null character not permitted" msgstr "NULL文字は許可されません" -#: utils/adt/orderedsetaggs.c:442 utils/adt/orderedsetaggs.c:546 -#: utils/adt/orderedsetaggs.c:684 +#: utils/adt/orderedsetaggs.c:442 utils/adt/orderedsetaggs.c:546 utils/adt/orderedsetaggs.c:684 #, c-format msgid "percentile value %g is not between 0 and 1" msgstr "百分位数の値%gが0と1の間ではありません" -#: utils/adt/pg_locale.c:1097 +#: utils/adt/pg_locale.c:1253 #, c-format msgid "Apply system library package updates." msgstr "システムライブラリの更新を適用してください。" -#: utils/adt/pg_locale.c:1312 +#: utils/adt/pg_locale.c:1468 #, c-format msgid "could not create locale \"%s\": %m" msgstr "ロケール\"%s\"を作成できませんでした: %m" -#: utils/adt/pg_locale.c:1315 +#: utils/adt/pg_locale.c:1471 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "オペレーティングシステムはロケール名\"%s\"のロケールデータを見つけられませんでした。" -#: utils/adt/pg_locale.c:1417 +#: utils/adt/pg_locale.c:1573 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "このプラットフォームでは値が異なるcollateとctypeによる照合順序をサポートしていません" -#: utils/adt/pg_locale.c:1426 +#: utils/adt/pg_locale.c:1582 #, c-format msgid "collation provider LIBC is not supported on this platform" msgstr "照合順序プロバイダLIBCはこのプラットフォームではサポートされていません" -#: utils/adt/pg_locale.c:1438 +#: utils/adt/pg_locale.c:1594 #, c-format msgid "collations with different collate and ctype values are not supported by ICU" msgstr "ICUは値が異なるcollateとctypeによる照合順序をサポートしていません" -#: utils/adt/pg_locale.c:1444 utils/adt/pg_locale.c:1535 -#: utils/adt/pg_locale.c:1753 +#: utils/adt/pg_locale.c:1600 utils/adt/pg_locale.c:1687 utils/adt/pg_locale.c:1960 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "ロケール\"%s\"の照合器をオープンできませんでした: %s" -#: utils/adt/pg_locale.c:1458 +#: utils/adt/pg_locale.c:1614 #, c-format msgid "ICU is not supported in this build" msgstr "このビルドではICUはサポートされていません" -#: utils/adt/pg_locale.c:1459 +#: utils/adt/pg_locale.c:1615 #, c-format msgid "You need to rebuild PostgreSQL using --with-icu." msgstr "--with-icuを使用してPostgreSQLを再構築する必要があります。" -#: utils/adt/pg_locale.c:1479 +#: utils/adt/pg_locale.c:1635 #, c-format msgid "collation \"%s\" has no actual version, but a version was specified" msgstr "照合順序\"%s\"には実際のバージョンがありませんが、バージョンが指定されています" -#: utils/adt/pg_locale.c:1486 +#: utils/adt/pg_locale.c:1642 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "照合順序\"%s\"でバージョンの不一致が起きています" -#: utils/adt/pg_locale.c:1488 +#: utils/adt/pg_locale.c:1644 #, c-format msgid "The collation in the database was created using version %s, but the operating system provides version %s." msgstr "データベース中の照合順序はバージョン%sで作成されていますが、オペレーティングシステムはバージョン%sを提供しています。" -#: utils/adt/pg_locale.c:1491 +#: utils/adt/pg_locale.c:1647 #, c-format msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." msgstr "この照合順序の影響を受ける全てのオブジェクトを再構築して、ALTER COLLATION %s REFRESH VERSIONを実行するか、正しいバージョンのライブラリを用いてPostgreSQLをビルドしてください。" -#: utils/adt/pg_locale.c:1575 +#: utils/adt/pg_locale.c:1738 +#, c-format +msgid "could not get collation version for locale \"%s\": error code %lu" +msgstr "ロケール\"%s\"に対応する照合順序バージョンを取得できませんでした: エラーコード %lu" + +#: utils/adt/pg_locale.c:1775 +#, c-format +msgid "encoding \"%s\" not supported by ICU" +msgstr "エンコーディング\"%s\"はICUではサポートされていません" + +#: utils/adt/pg_locale.c:1782 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "エンコーディング\"%s\"のICU変換器をオープンできませんでした: %s" -#: utils/adt/pg_locale.c:1606 utils/adt/pg_locale.c:1615 -#: utils/adt/pg_locale.c:1644 utils/adt/pg_locale.c:1654 +#: utils/adt/pg_locale.c:1813 utils/adt/pg_locale.c:1822 utils/adt/pg_locale.c:1851 utils/adt/pg_locale.c:1861 #, c-format msgid "%s failed: %s" msgstr "%s が失敗しました: %s" -#: utils/adt/pg_locale.c:1926 +#: utils/adt/pg_locale.c:2133 #, c-format msgid "invalid multibyte character for locale" msgstr "ロケールに対する不正なマルチバイト文字" -#: utils/adt/pg_locale.c:1927 +#: utils/adt/pg_locale.c:2134 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "おそらくサーバのLC_CTYPEロケールはデータベースの符号化方式と互換性がありません" +#: utils/adt/pg_lsn.c:269 +#, c-format +msgid "cannot add NaN to pg_lsn" +msgstr "pg_lsnにNaNは加算できません" + +#: utils/adt/pg_lsn.c:303 +#, c-format +msgid "cannot subtract NaN from pg_lsn" +msgstr "pg_lsnからNaNは減算できません" + #: utils/adt/pg_upgrade_support.c:29 #, c-format msgid "function can only be called when server is in binary upgrade mode" msgstr "関数はサーバがバイナリアップグレードモードであるときのみ呼び出せます" -#: utils/adt/pgstatfuncs.c:479 +#: utils/adt/pgstatfuncs.c:500 #, c-format msgid "invalid command name: \"%s\"" msgstr "不正なコマンド名: \"%s\"" -#: utils/adt/pseudotypes.c:247 +#: utils/adt/pseudotypes.c:57 utils/adt/pseudotypes.c:91 +#, c-format +msgid "cannot display a value of type %s" +msgstr "%s型の値は表示できません" + +#: utils/adt/pseudotypes.c:283 #, c-format msgid "cannot accept a value of a shell type" msgstr "シェル型の値は受け付けられません" -#: utils/adt/pseudotypes.c:260 +#: utils/adt/pseudotypes.c:293 #, c-format msgid "cannot display a value of a shell type" msgstr "シェル型の値は表示できません" -#: utils/adt/pseudotypes.c:350 utils/adt/pseudotypes.c:376 -#, c-format -msgid "cannot output a value of type %s" -msgstr "%s型の値は出力できません" - -#: utils/adt/pseudotypes.c:403 -#, c-format -msgid "cannot display a value of type %s" -msgstr "%s型の値は表示できません" - #: utils/adt/rangetypes.c:406 #, c-format msgid "range constructor flags argument must not be null" @@ -22888,22 +22715,17 @@ msgstr "範囲の和が連続ではありません" msgid "range lower bound must be less than or equal to range upper bound" msgstr "範囲の下限は範囲の上限以下でなければなりません" -#: utils/adt/rangetypes.c:1983 utils/adt/rangetypes.c:1996 -#: utils/adt/rangetypes.c:2010 +#: utils/adt/rangetypes.c:1983 utils/adt/rangetypes.c:1996 utils/adt/rangetypes.c:2010 #, c-format msgid "invalid range bound flags" msgstr "不正な範囲境界フラグ" -#: utils/adt/rangetypes.c:1984 utils/adt/rangetypes.c:1997 -#: utils/adt/rangetypes.c:2011 +#: utils/adt/rangetypes.c:1984 utils/adt/rangetypes.c:1997 utils/adt/rangetypes.c:2011 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "有効な値は\"[]\"、\"[)\"、\"(]\"、\"()\"です" -#: utils/adt/rangetypes.c:2076 utils/adt/rangetypes.c:2093 -#: utils/adt/rangetypes.c:2106 utils/adt/rangetypes.c:2124 -#: utils/adt/rangetypes.c:2135 utils/adt/rangetypes.c:2179 -#: utils/adt/rangetypes.c:2187 +#: utils/adt/rangetypes.c:2076 utils/adt/rangetypes.c:2093 utils/adt/rangetypes.c:2106 utils/adt/rangetypes.c:2124 utils/adt/rangetypes.c:2135 utils/adt/rangetypes.c:2179 utils/adt/rangetypes.c:2187 #, c-format msgid "malformed range literal: \"%s\"" msgstr "不正な範囲リテラル: \"%s\"" @@ -22933,157 +22755,153 @@ msgstr "カンマが多すぎます" msgid "Junk after right parenthesis or bracket." msgstr "右括弧または右角括弧の後にごみがあります" -#: utils/adt/regexp.c:289 utils/adt/regexp.c:1490 utils/adt/varlena.c:4459 +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4493 #, c-format msgid "regular expression failed: %s" msgstr "正規表現が失敗しました: %s" #: utils/adt/regexp.c:426 #, c-format -msgid "invalid regular expression option: \"%c\"" -msgstr "不正な正規表現オプション: \"%c\"" +msgid "invalid regular expression option: \"%.*s\"" +msgstr "不正な正規表現オプション: \"%.*s\"" -#: utils/adt/regexp.c:838 +#: utils/adt/regexp.c:836 #, c-format msgid "SQL regular expression may not contain more than two escape-double-quote separators" msgstr "SQL正規表現はエスケープされたダブルクオートを2つより多く含むことはできません" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:924 utils/adt/regexp.c:1307 utils/adt/regexp.c:1362 +#: utils/adt/regexp.c:981 utils/adt/regexp.c:1363 utils/adt/regexp.c:1418 #, c-format msgid "%s does not support the \"global\" option" msgstr "%sは\"global\"オプションをサポートしません" -#: utils/adt/regexp.c:926 +#: utils/adt/regexp.c:983 #, c-format msgid "Use the regexp_matches function instead." msgstr "代わりにregexp_matchesを使ってください。" -#: utils/adt/regexp.c:1108 +#: utils/adt/regexp.c:1165 #, c-format msgid "too many regular expression matches" msgstr "正規表現のマッチが多過ぎます" -#: utils/adt/regproc.c:106 +#: utils/adt/regproc.c:105 #, c-format msgid "more than one function named \"%s\"" msgstr "\"%s\"という名前の関数が複数あります" -#: utils/adt/regproc.c:524 +#: utils/adt/regproc.c:542 #, c-format msgid "more than one operator named %s" msgstr "%sという名前の演算子が複数あります" -#: utils/adt/regproc.c:696 utils/adt/regproc.c:737 utils/adt/regproc.c:1865 -#: utils/adt/ruleutils.c:9210 utils/adt/ruleutils.c:9378 +#: utils/adt/regproc.c:714 utils/adt/regproc.c:755 utils/adt/regproc.c:2054 utils/adt/ruleutils.c:9289 utils/adt/ruleutils.c:9458 #, c-format msgid "too many arguments" msgstr "引数が多すぎます" -#: utils/adt/regproc.c:697 utils/adt/regproc.c:738 +#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 #, c-format msgid "Provide two argument types for operator." msgstr "演算子では2つの引数型を指定してください" -#: utils/adt/regproc.c:1449 utils/adt/regproc.c:1473 utils/adt/regproc.c:1574 -#: utils/adt/regproc.c:1598 utils/adt/regproc.c:1700 utils/adt/regproc.c:1705 -#: utils/adt/varlena.c:3608 utils/adt/varlena.c:3613 +#: utils/adt/regproc.c:1638 utils/adt/regproc.c:1662 utils/adt/regproc.c:1763 utils/adt/regproc.c:1787 utils/adt/regproc.c:1889 utils/adt/regproc.c:1894 utils/adt/varlena.c:3642 utils/adt/varlena.c:3647 #, c-format msgid "invalid name syntax" msgstr "不正な名前の構文" -#: utils/adt/regproc.c:1763 +#: utils/adt/regproc.c:1952 #, c-format msgid "expected a left parenthesis" msgstr "左括弧を想定していました" -#: utils/adt/regproc.c:1779 +#: utils/adt/regproc.c:1968 #, c-format msgid "expected a right parenthesis" msgstr "右括弧を想定していました" -#: utils/adt/regproc.c:1798 +#: utils/adt/regproc.c:1987 #, c-format msgid "expected a type name" msgstr "型の名前を想定していました" -#: utils/adt/regproc.c:1830 +#: utils/adt/regproc.c:2019 #, c-format msgid "improper type name" msgstr "型の名前が不適切です" -#: utils/adt/ri_triggers.c:298 utils/adt/ri_triggers.c:1534 -#: utils/adt/ri_triggers.c:2465 +#: utils/adt/ri_triggers.c:296 utils/adt/ri_triggers.c:1537 utils/adt/ri_triggers.c:2470 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "テーブル\"%s\"への挿入、更新は外部キー制約\"%s\"に違反しています" -#: utils/adt/ri_triggers.c:301 utils/adt/ri_triggers.c:1537 +#: utils/adt/ri_triggers.c:299 utils/adt/ri_triggers.c:1540 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MACTH FULLではNULLキー値と非NULLキー値を混在できません" -#: utils/adt/ri_triggers.c:1932 +#: utils/adt/ri_triggers.c:1940 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "関数\"%s\"をINSERTで発行しなければなりません" -#: utils/adt/ri_triggers.c:1938 +#: utils/adt/ri_triggers.c:1946 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "関数\"%s\"をUPDATEで発行しなければなりません" -#: utils/adt/ri_triggers.c:1944 +#: utils/adt/ri_triggers.c:1952 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "関数\"%s\"をDELETEで発行しなければなりません" -#: utils/adt/ri_triggers.c:1967 +#: utils/adt/ri_triggers.c:1975 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "テーブル\"%2$s\"のトリガ\"%1$s\"用のpg_constraint項目がありません" -#: utils/adt/ri_triggers.c:1969 +#: utils/adt/ri_triggers.c:1977 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "この参照整合性トリガとその対象を削除し、ALTER TABLE ADD CONSTRAINTを実行してください" -#: utils/adt/ri_triggers.c:2291 +#: utils/adt/ri_triggers.c:2295 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "\"%3$s\"の制約\"%2$s\"から\"%1$s\"に行われた参照整合性問い合わせが想定外の結果になりました" -#: utils/adt/ri_triggers.c:2295 +#: utils/adt/ri_triggers.c:2299 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "これは概ねこの問い合わせを書き換えるルールが原因です" -#: utils/adt/ri_triggers.c:2456 +#: utils/adt/ri_triggers.c:2460 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "子テーブル \"%s\"の削除は外部キー制約\"%s\"違反となります" -#: utils/adt/ri_triggers.c:2459 utils/adt/ri_triggers.c:2483 +#: utils/adt/ri_triggers.c:2463 utils/adt/ri_triggers.c:2488 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "キー(%s)=(%s)はまだテーブル\"%s\"から参照されています" -#: utils/adt/ri_triggers.c:2469 +#: utils/adt/ri_triggers.c:2474 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "テーブル\"%3$s\"にキー(%1$s)=(%2$s)がありません" -#: utils/adt/ri_triggers.c:2472 +#: utils/adt/ri_triggers.c:2477 #, c-format msgid "Key is not present in table \"%s\"." msgstr "テーブル\"%s\"にキーがありません。" -#: utils/adt/ri_triggers.c:2478 +#: utils/adt/ri_triggers.c:2483 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "テーブル\"%1$s\"の更新または削除は、テーブル\"%3$s\"の外部キー制約\"%2$s\"に違反します" -#: utils/adt/ri_triggers.c:2486 +#: utils/adt/ri_triggers.c:2491 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "テーブル\"%s\"からキーがまだ参照されています。" @@ -23093,8 +22911,7 @@ msgstr "テーブル\"%s\"からキーがまだ参照されています。" msgid "input of anonymous composite types is not implemented" msgstr "匿名複合型の入力は実装されていません" -#: utils/adt/rowtypes.c:156 utils/adt/rowtypes.c:185 utils/adt/rowtypes.c:208 -#: utils/adt/rowtypes.c:216 utils/adt/rowtypes.c:268 utils/adt/rowtypes.c:276 +#: utils/adt/rowtypes.c:156 utils/adt/rowtypes.c:185 utils/adt/rowtypes.c:208 utils/adt/rowtypes.c:216 utils/adt/rowtypes.c:268 utils/adt/rowtypes.c:276 #, c-format msgid "malformed record literal: \"%s\"" msgstr "おかしなレコードリテラルです: \"%s\"" @@ -23124,29 +22941,27 @@ msgstr "右括弧の後にごみがあります" msgid "wrong number of columns: %d, expected %d" msgstr "列数が間違っています: %d。%dを想定していました" -#: utils/adt/rowtypes.c:559 +#: utils/adt/rowtypes.c:573 #, c-format -msgid "wrong data type: %u, expected %u" -msgstr "データ型が間違っています: %u。%uを想定していました" +msgid "binary data has type %u (%s) instead of expected %u (%s) in record column %d" +msgstr "バイナリデータのレコードカラム%5$dで予期していた%3$u(%4$s)の代わりに%1$u(%2$s)がありました" -#: utils/adt/rowtypes.c:620 +#: utils/adt/rowtypes.c:640 #, c-format msgid "improper binary format in record column %d" msgstr "レコード列%dのバイナリ書式が不適切です" -#: utils/adt/rowtypes.c:911 utils/adt/rowtypes.c:1155 utils/adt/rowtypes.c:1414 -#: utils/adt/rowtypes.c:1660 +#: utils/adt/rowtypes.c:931 utils/adt/rowtypes.c:1177 utils/adt/rowtypes.c:1435 utils/adt/rowtypes.c:1681 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "レコードの列 %3$d において、全く異なる型 %1$s と %2$s では比較ができません" -#: utils/adt/rowtypes.c:1000 utils/adt/rowtypes.c:1226 -#: utils/adt/rowtypes.c:1511 utils/adt/rowtypes.c:1696 +#: utils/adt/rowtypes.c:1022 utils/adt/rowtypes.c:1247 utils/adt/rowtypes.c:1532 utils/adt/rowtypes.c:1717 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "個数が異なる列同士ではレコード型の比較ができません" -#: utils/adt/ruleutils.c:4885 +#: utils/adt/ruleutils.c:4811 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "ルール\"%s\"はサポートしていないイベントタイプ%dを持ちます" @@ -23161,115 +22976,103 @@ msgstr "TIMESTAMP(%d)%s の精度は負であってはなりません" msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "TIMESTAMP(%d)%sの位取りを許容最大値%dまで減らしました" -#: utils/adt/timestamp.c:176 utils/adt/timestamp.c:419 utils/misc/guc.c:11636 +#: utils/adt/timestamp.c:176 utils/adt/timestamp.c:434 utils/misc/guc.c:11933 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestampが範囲外です: \"%s\"" -#: utils/adt/timestamp.c:365 +#: utils/adt/timestamp.c:372 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "timestamp(%d)の精度は%dから%dまででなければなりません" -#: utils/adt/timestamp.c:481 +#: utils/adt/timestamp.c:496 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "数字タイムゾーンは先頭の文字が\"-\"または\"+\"でなければなりません。" -#: utils/adt/timestamp.c:494 +#: utils/adt/timestamp.c:509 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "数値タイムゾーン\"%s\"が範囲外です" -#: utils/adt/timestamp.c:596 utils/adt/timestamp.c:606 -#: utils/adt/timestamp.c:614 +#: utils/adt/timestamp.c:601 utils/adt/timestamp.c:611 utils/adt/timestamp.c:619 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestampが範囲外です: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:715 +#: utils/adt/timestamp.c:720 #, c-format msgid "timestamp cannot be NaN" msgstr "タイムスタンプは NaN にはできません" -#: utils/adt/timestamp.c:733 utils/adt/timestamp.c:745 +#: utils/adt/timestamp.c:738 utils/adt/timestamp.c:750 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "timestampが範囲外です: \"%g\"" -#: utils/adt/timestamp.c:930 utils/adt/timestamp.c:1504 -#: utils/adt/timestamp.c:1937 utils/adt/timestamp.c:3035 -#: utils/adt/timestamp.c:3040 utils/adt/timestamp.c:3045 -#: utils/adt/timestamp.c:3095 utils/adt/timestamp.c:3102 -#: utils/adt/timestamp.c:3109 utils/adt/timestamp.c:3129 -#: utils/adt/timestamp.c:3136 utils/adt/timestamp.c:3143 -#: utils/adt/timestamp.c:3173 utils/adt/timestamp.c:3181 -#: utils/adt/timestamp.c:3225 utils/adt/timestamp.c:3652 -#: utils/adt/timestamp.c:3777 utils/adt/timestamp.c:4237 +#: utils/adt/timestamp.c:935 utils/adt/timestamp.c:1509 utils/adt/timestamp.c:1944 utils/adt/timestamp.c:3042 utils/adt/timestamp.c:3047 utils/adt/timestamp.c:3052 utils/adt/timestamp.c:3102 utils/adt/timestamp.c:3109 utils/adt/timestamp.c:3116 utils/adt/timestamp.c:3136 utils/adt/timestamp.c:3143 utils/adt/timestamp.c:3150 utils/adt/timestamp.c:3180 utils/adt/timestamp.c:3188 utils/adt/timestamp.c:3232 utils/adt/timestamp.c:3659 utils/adt/timestamp.c:3784 +#: utils/adt/timestamp.c:4244 #, c-format msgid "interval out of range" msgstr "intervalが範囲外です" -#: utils/adt/timestamp.c:1057 utils/adt/timestamp.c:1090 +#: utils/adt/timestamp.c:1062 utils/adt/timestamp.c:1095 #, c-format msgid "invalid INTERVAL type modifier" msgstr "不正なINTERVAL型の修正子です" -#: utils/adt/timestamp.c:1073 +#: utils/adt/timestamp.c:1078 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "INTERVAL(%d)の精度は負ではいけません" -#: utils/adt/timestamp.c:1079 +#: utils/adt/timestamp.c:1084 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "INTERVAL(%d)の精度を許容最大値%dまで減らしました" -#: utils/adt/timestamp.c:1461 +#: utils/adt/timestamp.c:1466 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "interval(%d)の精度は%dから%dまででなければなりません" -#: utils/adt/timestamp.c:2636 +#: utils/adt/timestamp.c:2643 #, c-format msgid "cannot subtract infinite timestamps" msgstr "無限大のtimestampを減算できません" -#: utils/adt/timestamp.c:3905 utils/adt/timestamp.c:4497 -#: utils/adt/timestamp.c:4664 utils/adt/timestamp.c:4685 +#: utils/adt/timestamp.c:3912 utils/adt/timestamp.c:4505 utils/adt/timestamp.c:4667 utils/adt/timestamp.c:4688 #, c-format msgid "timestamp units \"%s\" not supported" msgstr "timestampの単位\"%s\"はサポートされていません" -#: utils/adt/timestamp.c:3919 utils/adt/timestamp.c:4451 -#: utils/adt/timestamp.c:4695 +#: utils/adt/timestamp.c:3926 utils/adt/timestamp.c:4459 utils/adt/timestamp.c:4698 #, c-format msgid "timestamp units \"%s\" not recognized" msgstr "timestampの単位\"%s\"は不明です" -#: utils/adt/timestamp.c:4049 utils/adt/timestamp.c:4492 -#: utils/adt/timestamp.c:4865 utils/adt/timestamp.c:4887 +#: utils/adt/timestamp.c:4056 utils/adt/timestamp.c:4500 utils/adt/timestamp.c:4863 utils/adt/timestamp.c:4885 #, c-format msgid "timestamp with time zone units \"%s\" not supported" msgstr "timestamp with time zoneの単位\"%s\"はサポートされていません" -#: utils/adt/timestamp.c:4066 utils/adt/timestamp.c:4446 -#: utils/adt/timestamp.c:4896 +#: utils/adt/timestamp.c:4073 utils/adt/timestamp.c:4454 utils/adt/timestamp.c:4894 #, c-format msgid "timestamp with time zone units \"%s\" not recognized" msgstr "timestamp with time zoneの単位\"%s\"は不明です" -#: utils/adt/timestamp.c:4224 +#: utils/adt/timestamp.c:4231 #, c-format msgid "interval units \"%s\" not supported because months usually have fractional weeks" msgstr "月は通常週を含んでいますので、intervalの単位\"%s\"はサポートされていません" -#: utils/adt/timestamp.c:4230 utils/adt/timestamp.c:4990 +#: utils/adt/timestamp.c:4237 utils/adt/timestamp.c:4988 #, c-format msgid "interval units \"%s\" not supported" msgstr "intervalの単位\"%s\"はサポートされていません" -#: utils/adt/timestamp.c:4246 utils/adt/timestamp.c:5013 +#: utils/adt/timestamp.c:4253 utils/adt/timestamp.c:5011 #, c-format msgid "interval units \"%s\" not recognized" msgstr "intervalの単位\"%s\"は不明です" @@ -23294,7 +23097,7 @@ msgstr "suppress_redundant_updates_trigger: update 前に呼ばれなければ msgid "suppress_redundant_updates_trigger: must be called for each row" msgstr "suppress_redundant_updates_trigger: 各行ごとに呼ばれなければなりません" -#: utils/adt/tsgistidx.c:81 +#: utils/adt/tsgistidx.c:92 #, c-format msgid "gtsvector_in not implemented" msgstr "gtsvector_inは実装されていません" @@ -23304,8 +23107,7 @@ msgstr "gtsvector_inは実装されていません" msgid "distance in phrase operator should not be greater than %d" msgstr "フレーズ演算子で指定する距離は%d以下でなくてはなりません" -#: utils/adt/tsquery.c:310 utils/adt/tsquery.c:725 -#: utils/adt/tsvector_parser.c:133 +#: utils/adt/tsquery.c:310 utils/adt/tsquery.c:725 utils/adt/tsvector_parser.c:133 #, c-format msgid "syntax error in tsquery: \"%s\"" msgstr "tsquery内の構文エラー: \"%s\"" @@ -23345,7 +23147,7 @@ msgstr "tsqueryが大きすぎます" msgid "text-search query contains only stop words or doesn't contain lexemes, ignored" msgstr "テキスト検索問い合わせはストップワードのみを含む、あるいは、字句要素を含みません。無視されます" -#: utils/adt/tsquery_op.c:123 +#: utils/adt/tsquery_op.c:124 #, c-format msgid "distance in phrase operator should be non-negative and less than %d" msgstr "フレーズ演算子で指定する距離は%dより小さい正の数でなければなりません" @@ -23355,88 +23157,87 @@ msgstr "フレーズ演算子で指定する距離は%dより小さい正の数 msgid "ts_rewrite query must return two tsquery columns" msgstr "ts_rewrite問い合わせは2列のtsquery列を返さなければなりません" -#: utils/adt/tsrank.c:413 +#: utils/adt/tsrank.c:412 #, c-format msgid "array of weight must be one-dimensional" msgstr "重み配列は1次元の配列でなければなりません" -#: utils/adt/tsrank.c:418 +#: utils/adt/tsrank.c:417 #, c-format msgid "array of weight is too short" msgstr "重み配列が短すぎます" -#: utils/adt/tsrank.c:423 +#: utils/adt/tsrank.c:422 #, c-format msgid "array of weight must not contain nulls" msgstr "重み配列にはNULL値を含めてはいけません" -#: utils/adt/tsrank.c:432 utils/adt/tsrank.c:869 +#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:872 #, c-format msgid "weight out of range" msgstr "重みが範囲外です" -#: utils/adt/tsvector.c:214 +#: utils/adt/tsvector.c:215 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "単語が長すぎます(%ldバイト、最大は%ldバイト)" -#: utils/adt/tsvector.c:221 +#: utils/adt/tsvector.c:222 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "tsベクターのための文字列が長すぎます(%ldバイト、最大は%ldバイト)" -#: utils/adt/tsvector_op.c:321 utils/adt/tsvector_op.c:608 -#: utils/adt/tsvector_op.c:776 +#: utils/adt/tsvector_op.c:328 utils/adt/tsvector_op.c:608 utils/adt/tsvector_op.c:770 #, c-format msgid "lexeme array may not contain nulls" msgstr "語彙素配列にはnullを含めてはいけません" -#: utils/adt/tsvector_op.c:851 +#: utils/adt/tsvector_op.c:840 #, c-format msgid "weight array may not contain nulls" msgstr "重み付け配列にはnullを含めてはいけません" -#: utils/adt/tsvector_op.c:875 +#: utils/adt/tsvector_op.c:864 #, c-format msgid "unrecognized weight: \"%c\"" msgstr "識別不能な重み付け: \"%c\"" -#: utils/adt/tsvector_op.c:2312 +#: utils/adt/tsvector_op.c:2414 #, c-format msgid "ts_stat query must return one tsvector column" msgstr "ts_statは1つのtsvector列のみを返さなければなりません" -#: utils/adt/tsvector_op.c:2494 +#: utils/adt/tsvector_op.c:2603 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "tsvector列\"%s\"は存在しません" -#: utils/adt/tsvector_op.c:2501 +#: utils/adt/tsvector_op.c:2610 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "値\"%s\"は型tsvectorではありません" -#: utils/adt/tsvector_op.c:2513 +#: utils/adt/tsvector_op.c:2622 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "設定列\"%s\"は存在しません" -#: utils/adt/tsvector_op.c:2519 +#: utils/adt/tsvector_op.c:2628 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "%s列はregconfig型ではありません" -#: utils/adt/tsvector_op.c:2526 +#: utils/adt/tsvector_op.c:2635 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "設定列\"%s\"をNULLにすることはできません" -#: utils/adt/tsvector_op.c:2539 +#: utils/adt/tsvector_op.c:2648 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "テキスト検索設定名称\"%s\"はスキーマ修飾しなけれナバりません" -#: utils/adt/tsvector_op.c:2564 +#: utils/adt/tsvector_op.c:2673 #, c-format msgid "column \"%s\" is not of a character type" msgstr "列\"%s\"は文字型ではありません" @@ -23456,22 +23257,17 @@ msgstr "エスケープ文字がありません: \"%s\"" msgid "wrong position info in tsvector: \"%s\"" msgstr "tsvector内の位置情報が間違っています: \"%s\"" -#: utils/adt/txid.c:140 +#: utils/adt/uuid.c:428 #, c-format -msgid "transaction ID %s is in the future" -msgstr "トランザクションID%sは未来の値です" - -#: utils/adt/txid.c:629 -#, c-format -msgid "invalid external txid_snapshot data" -msgstr "不正な外部txid_snapshotデータ" +msgid "could not generate random values" +msgstr "乱数値を生成できませんでした" -#: utils/adt/varbit.c:109 utils/adt/varchar.c:54 +#: utils/adt/varbit.c:109 utils/adt/varchar.c:53 #, c-format msgid "length for type %s must be at least 1" msgstr "型%sの長さは最低でも1です" -#: utils/adt/varbit.c:114 utils/adt/varchar.c:58 +#: utils/adt/varbit.c:114 utils/adt/varchar.c:57 #, c-format msgid "length for type %s cannot exceed %d" msgstr "型%sの長さは%dを超えられません" @@ -23488,13 +23284,13 @@ msgstr "ビット列長%dが型bit(%d)に一致しません" #: utils/adt/varbit.c:233 utils/adt/varbit.c:534 #, c-format -msgid "\"%c\" is not a valid binary digit" -msgstr "\"%c\"は有効な2進数表現ではありません" +msgid "\"%.*s\" is not a valid binary digit" +msgstr "\"%.*s\"は有効な2進数の数字ではありません" #: utils/adt/varbit.c:258 utils/adt/varbit.c:559 #, c-format -msgid "\"%c\" is not a valid hexadecimal digit" -msgstr "\"%c\"は有効な16進数表現ではありません" +msgid "\"%.*s\" is not a valid hexadecimal digit" +msgstr "\"%.*s\"は有効な16進数の数字ではありません" #: utils/adt/varbit.c:346 utils/adt/varbit.c:651 #, c-format @@ -23506,9 +23302,7 @@ msgstr "ビット列の外部値の不正な長さ" msgid "bit string too long for type bit varying(%d)" msgstr "ビット列は型bit varying(%d)には長すぎます" -#: utils/adt/varbit.c:1086 utils/adt/varbit.c:1184 utils/adt/varlena.c:863 -#: utils/adt/varlena.c:927 utils/adt/varlena.c:1071 utils/adt/varlena.c:3274 -#: utils/adt/varlena.c:3341 +#: utils/adt/varbit.c:1086 utils/adt/varbit.c:1184 utils/adt/varlena.c:875 utils/adt/varlena.c:939 utils/adt/varlena.c:1083 utils/adt/varlena.c:3306 utils/adt/varlena.c:3373 #, c-format msgid "negative substring length not allowed" msgstr "負の長さのsubstringは許可されません" @@ -23533,102 +23327,116 @@ msgstr "サイズが異なるビット列のXORはできません" msgid "bit index %d out of valid range (0..%d)" msgstr "ビットのインデックス%dが有効範囲0..%dの間にありません" -#: utils/adt/varbit.c:1813 utils/adt/varlena.c:3532 +#: utils/adt/varbit.c:1813 utils/adt/varlena.c:3566 #, c-format msgid "new bit must be 0 or 1" msgstr "新しいビットは0か1でなければなりません" -#: utils/adt/varchar.c:158 utils/adt/varchar.c:311 +#: utils/adt/varchar.c:157 utils/adt/varchar.c:310 #, c-format msgid "value too long for type character(%d)" msgstr "値は型character(%d)としては長すぎます" -#: utils/adt/varchar.c:473 utils/adt/varchar.c:635 +#: utils/adt/varchar.c:472 utils/adt/varchar.c:634 #, c-format msgid "value too long for type character varying(%d)" msgstr "値は型character varying(%d)としては長すぎます" -#: utils/adt/varchar.c:733 utils/adt/varlena.c:1463 +#: utils/adt/varchar.c:732 utils/adt/varlena.c:1475 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "文字列比較で使用する照合順序を特定できませんでした" -#: utils/adt/varlena.c:1170 utils/adt/varlena.c:1903 +#: utils/adt/varlena.c:1182 utils/adt/varlena.c:1915 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "非決定的照合順序は部分文字列探索ではサポートされません" -#: utils/adt/varlena.c:1562 utils/adt/varlena.c:1575 +#: utils/adt/varlena.c:1574 utils/adt/varlena.c:1587 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "文字列をUTF-16に変換できませんでした: エラーコード %lu" -#: utils/adt/varlena.c:1590 +#: utils/adt/varlena.c:1602 #, c-format msgid "could not compare Unicode strings: %m" msgstr "Unicode文字列を比較できませんでした: %m" -#: utils/adt/varlena.c:1641 utils/adt/varlena.c:2355 +#: utils/adt/varlena.c:1653 utils/adt/varlena.c:2367 #, c-format msgid "collation failed: %s" msgstr "照合順序による比較に失敗しました: %s" -#: utils/adt/varlena.c:2563 +#: utils/adt/varlena.c:2575 #, c-format msgid "sort key generation failed: %s" msgstr "ソートキーの生成に失敗しました: %s" -#: utils/adt/varlena.c:3418 utils/adt/varlena.c:3449 utils/adt/varlena.c:3484 -#: utils/adt/varlena.c:3520 +#: utils/adt/varlena.c:3450 utils/adt/varlena.c:3517 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "インデックス%dは有効範囲0..%dの間にありません" -#: utils/adt/varlena.c:4556 +#: utils/adt/varlena.c:3481 utils/adt/varlena.c:3553 +#, c-format +msgid "index %lld out of valid range, 0..%lld" +msgstr "インデックス%lldは有効範囲0..%lldの間にありません" + +#: utils/adt/varlena.c:4590 #, c-format msgid "field position must be greater than zero" msgstr "フィールド位置は0より大きくなければなりません" -#: utils/adt/varlena.c:5422 +#: utils/adt/varlena.c:5456 #, c-format msgid "unterminated format() type specifier" msgstr "終端されていないformat()型指定子" -#: utils/adt/varlena.c:5423 utils/adt/varlena.c:5557 utils/adt/varlena.c:5678 +#: utils/adt/varlena.c:5457 utils/adt/varlena.c:5591 utils/adt/varlena.c:5712 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "一つの\"%%\"には\"%%%%\"を使ってください。" -#: utils/adt/varlena.c:5555 utils/adt/varlena.c:5676 +#: utils/adt/varlena.c:5589 utils/adt/varlena.c:5710 #, c-format -msgid "unrecognized format() type specifier \"%c\"" -msgstr "認識できない変換型指示子: \"%c\"" +msgid "unrecognized format() type specifier \"%.*s\"" +msgstr "認識できない format() の型指定子\"%.*s\"" -#: utils/adt/varlena.c:5568 utils/adt/varlena.c:5625 +#: utils/adt/varlena.c:5602 utils/adt/varlena.c:5659 #, c-format msgid "too few arguments for format()" msgstr "format()の引数が少なすぎます" -#: utils/adt/varlena.c:5721 utils/adt/varlena.c:5903 +#: utils/adt/varlena.c:5755 utils/adt/varlena.c:5937 #, c-format msgid "number is out of range" msgstr "数値が範囲外です" -#: utils/adt/varlena.c:5784 utils/adt/varlena.c:5812 +#: utils/adt/varlena.c:5818 utils/adt/varlena.c:5846 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "書式は引数0を指定していますが、引数が1から始まっています" -#: utils/adt/varlena.c:5805 +#: utils/adt/varlena.c:5839 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "width引数の位置は\"$\"で終わらなければなりません" -#: utils/adt/varlena.c:5850 +#: utils/adt/varlena.c:5884 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "NULLはSQL識別子として書式付けできません" +#: utils/adt/varlena.c:6010 +#, c-format +msgid "Unicode normalization can only be performed if server encoding is UTF8" +msgstr "Unicode正規化はサーバエンコーディングがUTF-8の場合にのみ実行されます" + +#: utils/adt/varlena.c:6023 +#, c-format +msgid "invalid normalization form: %s" +msgstr "不正な正規化形式: %s" + #: utils/adt/windowfuncs.c:243 #, c-format msgid "argument of ntile must be greater than zero" @@ -23639,6 +23447,16 @@ msgstr "ntileの値は0より大きくなければなりません" msgid "argument of nth_value must be greater than zero" msgstr "nth_valueの値0より大きくなければなりません" +#: utils/adt/xid8funcs.c:116 +#, c-format +msgid "transaction ID %s is in the future" +msgstr "トランザクションID%sは未来の値です" + +#: utils/adt/xid8funcs.c:547 +#, c-format +msgid "invalid external pg_snapshot data" +msgstr "不正な外部pg_snapshotデータ" + #: utils/adt/xml.c:222 #, c-format msgid "unsupported XML feature" @@ -23654,7 +23472,7 @@ msgstr "この機能はlibxmlサポートを付けたサーバが必要です。 msgid "You need to rebuild PostgreSQL using --with-libxml." msgstr "--with-libxmlを使用してPostgreSQLを再構築する必要があります。" -#: utils/adt/xml.c:243 utils/mb/mbutils.c:540 +#: utils/adt/xml.c:243 utils/mb/mbutils.c:570 #, c-format msgid "invalid encoding name \"%s\"" msgstr "不正な符号化方式名\"%s\"" @@ -23738,103 +23556,107 @@ msgstr "XML 宣言のパース中: '>?' が必要です。" msgid "Unrecognized libxml error code: %d." msgstr "認識できないlibxml のエラーコード: %d" -#: utils/adt/xml.c:2229 +#: utils/adt/xml.c:2211 #, c-format msgid "XML does not support infinite date values." msgstr "XMLはデータ値として無限をサポートしません。" -#: utils/adt/xml.c:2251 utils/adt/xml.c:2278 +#: utils/adt/xml.c:2233 utils/adt/xml.c:2260 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XMLタイムスタンプ値としては無限をサポートしません。" -#: utils/adt/xml.c:2690 +#: utils/adt/xml.c:2676 #, c-format msgid "invalid query" msgstr "不正な無効な問い合わせ" -#: utils/adt/xml.c:4037 +#: utils/adt/xml.c:4016 #, c-format msgid "invalid array for XML namespace mapping" msgstr "XML名前空間マッピングに対する不正な配列" -#: utils/adt/xml.c:4038 +#: utils/adt/xml.c:4017 #, c-format msgid "The array must be two-dimensional with length of the second axis equal to 2." msgstr "この配列は第2軸の長さが2である2次元配列でなければなりません。" -#: utils/adt/xml.c:4062 +#: utils/adt/xml.c:4041 #, c-format msgid "empty XPath expression" msgstr "空のXPath式" -#: utils/adt/xml.c:4114 +#: utils/adt/xml.c:4093 #, c-format msgid "neither namespace name nor URI may be null" msgstr "名前空間名もURIもnullにはできません" -#: utils/adt/xml.c:4121 +#: utils/adt/xml.c:4100 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "\"%s\"という名前のXML名前空間およびURI\"%s\"を登録できませんでした" -#: utils/adt/xml.c:4472 +#: utils/adt/xml.c:4451 #, c-format msgid "DEFAULT namespace is not supported" msgstr "デフォルト名前空間は実装されていません" -#: utils/adt/xml.c:4501 +#: utils/adt/xml.c:4480 #, c-format msgid "row path filter must not be empty string" msgstr "行パスフィルタは空文字列であってはなりません" -#: utils/adt/xml.c:4532 +#: utils/adt/xml.c:4511 #, c-format msgid "column path filter must not be empty string" msgstr "列パスフィルタ空文字列であってはなりません" -#: utils/adt/xml.c:4682 +#: utils/adt/xml.c:4661 #, c-format msgid "more than one value returned by column XPath expression" msgstr "列XPath式が2つ以上の値を返却しました" -#: utils/cache/lsyscache.c:2654 utils/cache/lsyscache.c:2687 -#: utils/cache/lsyscache.c:2720 utils/cache/lsyscache.c:2753 +#: utils/cache/lsyscache.c:1015 +#, c-format +msgid "cast from type %s to type %s does not exist" +msgstr "型%sから型%sへのキャストは存在しません" + +#: utils/cache/lsyscache.c:2764 utils/cache/lsyscache.c:2797 utils/cache/lsyscache.c:2830 utils/cache/lsyscache.c:2863 #, c-format msgid "type %s is only a shell" msgstr "型%sは単なるシェルです" -#: utils/cache/lsyscache.c:2659 +#: utils/cache/lsyscache.c:2769 #, c-format msgid "no input function available for type %s" msgstr "型%sの利用可能な入力関数がありません" -#: utils/cache/lsyscache.c:2692 +#: utils/cache/lsyscache.c:2802 #, c-format msgid "no output function available for type %s" msgstr "型%sの利用可能な出力関数がありません" -#: utils/cache/partcache.c:195 +#: utils/cache/partcache.c:215 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d for type %s" msgstr "アクセスメソッド %2$s の演算子クラス\"%1$s\"は%4$s型に対応するサポート関数%3$dを含んでいません" -#: utils/cache/plancache.c:718 +#: utils/cache/plancache.c:720 #, c-format msgid "cached plan must not change result type" msgstr "キャッシュした実行計画は結果型を変更してはなりません" -#: utils/cache/relcache.c:5758 +#: utils/cache/relcache.c:6072 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "リレーションキャッシュ初期化ファイル\"%sを作成できません: %m" -#: utils/cache/relcache.c:5760 +#: utils/cache/relcache.c:6074 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "とりあえず続行しますが、何かがおかしいです。" -#: utils/cache/relcache.c:6072 +#: utils/cache/relcache.c:6396 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "キャッシュファイル\"%s\"を削除できませんでした: %m" @@ -23854,109 +23676,112 @@ msgstr "リレーションマッピングファイル\"%s\"に不正なデータ msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "リレーションマッピングファイル\"%s\"の中に不正なチェックサムがあります" -#: utils/cache/typcache.c:1634 utils/fmgr/funcapi.c:420 +#: utils/cache/typcache.c:1692 utils/fmgr/funcapi.c:461 #, c-format msgid "record type has not been registered" msgstr "レコード型は登録されていません" -#: utils/error/assert.c:34 +#: utils/error/assert.c:37 #, c-format msgid "TRAP: ExceptionalCondition: bad arguments\n" msgstr "TRAP: ExceptionalCondition: 不正な引数\n" -#: utils/error/assert.c:37 +#: utils/error/assert.c:40 #, c-format msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n" msgstr "TRAP: %s(\"%s\", ファイル: \"%s\", 行: %d)\n" -#: utils/error/elog.c:319 utils/error/elog.c:1293 +#: utils/error/elog.c:322 #, c-format -msgid "error occurred at %s:%d before error message processing is available\n" -msgstr "エラーメッセージの処理が可能になる前にエラーが%s:%dで発生しました\n" +msgid "error occurred before error message processing is available\n" +msgstr "エラーメッセージの処理が可能になる前にエラーが発生しました\n" -#: utils/error/elog.c:1871 +#: utils/error/elog.c:1868 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "ファイル\"%s\"の標準エラー出力としての再オープンに失敗しました: %m" -#: utils/error/elog.c:1884 +#: utils/error/elog.c:1881 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "ファイル\"%s\"の標準出力としての再オープンに失敗しました: %m" -#: utils/error/elog.c:2376 utils/error/elog.c:2393 utils/error/elog.c:2409 +#: utils/error/elog.c:2373 utils/error/elog.c:2407 utils/error/elog.c:2423 msgid "[unknown]" msgstr "[不明]" -#: utils/error/elog.c:2869 utils/error/elog.c:3172 utils/error/elog.c:3280 +#: utils/error/elog.c:2931 utils/error/elog.c:3241 utils/error/elog.c:3349 msgid "missing error text" msgstr "エラーテキストがありません" -#: utils/error/elog.c:2872 utils/error/elog.c:2875 utils/error/elog.c:3283 -#: utils/error/elog.c:3286 +#: utils/error/elog.c:2934 utils/error/elog.c:2937 utils/error/elog.c:3352 utils/error/elog.c:3355 #, c-format msgid " at character %d" msgstr "(%d文字目)" -#: utils/error/elog.c:2885 utils/error/elog.c:2892 +#: utils/error/elog.c:2947 utils/error/elog.c:2954 msgid "DETAIL: " msgstr "詳細: " -#: utils/error/elog.c:2899 +#: utils/error/elog.c:2961 msgid "HINT: " msgstr "ヒント: " -#: utils/error/elog.c:2906 +#: utils/error/elog.c:2968 msgid "QUERY: " msgstr "問い合わせ: " -#: utils/error/elog.c:2913 +#: utils/error/elog.c:2975 msgid "CONTEXT: " msgstr "文脈: " -#: utils/error/elog.c:2923 +#: utils/error/elog.c:2985 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "場所: %s, %s:%d\n" -#: utils/error/elog.c:2930 +#: utils/error/elog.c:2992 #, c-format msgid "LOCATION: %s:%d\n" msgstr "場所: %s:%d\n" -#: utils/error/elog.c:2944 +#: utils/error/elog.c:2999 +msgid "BACKTRACE: " +msgstr "バックトレース: " + +#: utils/error/elog.c:3013 msgid "STATEMENT: " msgstr "文: " -#: utils/error/elog.c:3333 +#: utils/error/elog.c:3402 msgid "DEBUG" msgstr "DEBUG" -#: utils/error/elog.c:3337 +#: utils/error/elog.c:3406 msgid "LOG" msgstr "LOG" -#: utils/error/elog.c:3340 +#: utils/error/elog.c:3409 msgid "INFO" msgstr "INFO" -#: utils/error/elog.c:3343 +#: utils/error/elog.c:3412 msgid "NOTICE" msgstr "NOTICE" -#: utils/error/elog.c:3346 +#: utils/error/elog.c:3415 msgid "WARNING" msgstr "WARNING" -#: utils/error/elog.c:3349 +#: utils/error/elog.c:3418 msgid "ERROR" msgstr "ERROR" -#: utils/error/elog.c:3352 +#: utils/error/elog.c:3421 msgid "FATAL" msgstr "FATAL" -#: utils/error/elog.c:3355 +#: utils/error/elog.c:3424 msgid "PANIC" msgstr "PANIC" @@ -24007,265 +23832,264 @@ msgstr "サーバ側は NAMEDATALEN = %d ですが、ライブラリ側は %d #: utils/fmgr/dfmgr.c:373 #, c-format -msgid "Server has FLOAT4PASSBYVAL = %s, library has %s." -msgstr "サーバ側はFLOAT4PASSBYVAL = %sですが、ライブラリ側は%sです。" - -#: utils/fmgr/dfmgr.c:382 -#, c-format msgid "Server has FLOAT8PASSBYVAL = %s, library has %s." msgstr "サーバ側はFLOAT8PASSBYVAL = %sですが、ライブラリ側は%sです。" -#: utils/fmgr/dfmgr.c:389 +#: utils/fmgr/dfmgr.c:380 msgid "Magic block has unexpected length or padding difference." msgstr "マジックブロックが意図しない長さであるか、またはパディングが異なります。" -#: utils/fmgr/dfmgr.c:392 +#: utils/fmgr/dfmgr.c:383 #, c-format msgid "incompatible library \"%s\": magic block mismatch" msgstr "\"%s\"は互換性がないライブラリです: マジックブロックの不一致" -#: utils/fmgr/dfmgr.c:556 +#: utils/fmgr/dfmgr.c:547 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "ライブラリ\"%s\"へのアクセスは許可されません" -#: utils/fmgr/dfmgr.c:582 +#: utils/fmgr/dfmgr.c:573 #, c-format msgid "invalid macro name in dynamic library path: %s" msgstr "ダイナミックライブラリパス内のマクロが不正です: %s" -#: utils/fmgr/dfmgr.c:622 +#: utils/fmgr/dfmgr.c:613 #, c-format msgid "zero-length component in parameter \"dynamic_library_path\"" msgstr "パラメータ\"dynamic_library_path\"内に長さが0の要素があります" -#: utils/fmgr/dfmgr.c:641 +#: utils/fmgr/dfmgr.c:632 #, c-format msgid "component in parameter \"dynamic_library_path\" is not an absolute path" msgstr "パラメータ\"dynamic_library_path\"内の要素が絶対パスでありません" -#: utils/fmgr/fmgr.c:236 +#: utils/fmgr/fmgr.c:238 #, c-format msgid "internal function \"%s\" is not in internal lookup table" msgstr "内部関数\"%s\"は内部用検索テーブルにありません" -#: utils/fmgr/fmgr.c:485 +#: utils/fmgr/fmgr.c:487 #, c-format msgid "could not find function information for function \"%s\"" msgstr "関数\"%s\"の関数情報が見つかりませんでした" -#: utils/fmgr/fmgr.c:487 +#: utils/fmgr/fmgr.c:489 #, c-format msgid "SQL-callable functions need an accompanying PG_FUNCTION_INFO_V1(funcname)." msgstr "SQL呼び出し可能な関数にはPG_FUNCTION_INFO_V1(funcname)宣言が必要です" -#: utils/fmgr/fmgr.c:505 +#: utils/fmgr/fmgr.c:507 #, c-format msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "info関数\"%2$s\"で報告されたAPIバージョン%1$dが不明です" -#: utils/fmgr/fmgr.c:2032 +#: utils/fmgr/fmgr.c:2003 +#, c-format +msgid "opclass options info is absent in function call context" +msgstr "関数呼び出しコンテクストに演算子オプション情報がありません" + +#: utils/fmgr/fmgr.c:2070 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "言語有効性検査関数%1$uが言語%3$uではなく%2$uに対して呼び出されました" -#: utils/fmgr/funcapi.c:343 +#: utils/fmgr/funcapi.c:384 #, c-format msgid "could not determine actual result type for function \"%s\" declared to return type %s" msgstr "戻り値型%2$sとして宣言された関数\"%1$s\"の実際の結果型を特定できませんでした" -#: utils/fmgr/funcapi.c:1388 utils/fmgr/funcapi.c:1420 +#: utils/fmgr/funcapi.c:1651 utils/fmgr/funcapi.c:1683 #, c-format msgid "number of aliases does not match number of columns" msgstr "別名の数が列の数と一致しません" -#: utils/fmgr/funcapi.c:1414 +#: utils/fmgr/funcapi.c:1677 #, c-format msgid "no column alias was provided" msgstr "列の別名が提供されていませんでした" -#: utils/fmgr/funcapi.c:1438 +#: utils/fmgr/funcapi.c:1701 #, c-format msgid "could not determine row description for function returning record" msgstr "レコードを返す関数についての行定義を特定できませんでした" -#: utils/init/miscinit.c:110 +#: utils/init/miscinit.c:287 #, c-format msgid "data directory \"%s\" does not exist" msgstr "データディレクトリ\"%s\"は存在しません" -#: utils/init/miscinit.c:115 +#: utils/init/miscinit.c:292 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "ディレクトリ\"%s\"の権限を読み取れませんでした: %m" -#: utils/init/miscinit.c:123 +#: utils/init/miscinit.c:300 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "指定されたデータディレクトリ\"%s\"はディレクトリではありません" -#: utils/init/miscinit.c:139 +#: utils/init/miscinit.c:316 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "データディレクトリ\"%s\"の所有者情報が間違っています" -#: utils/init/miscinit.c:141 +#: utils/init/miscinit.c:318 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "データディレクトリを所有するユーザがサーバを起動しなければなりません。" -#: utils/init/miscinit.c:159 +#: utils/init/miscinit.c:336 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "データディレクトリ\"%s\"の権限設定が不正です" -#: utils/init/miscinit.c:161 +#: utils/init/miscinit.c:338 #, c-format msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "権限は u=rwx(0700) または u=rwx,g=rx (0750) でなければなりません。" -#: utils/init/miscinit.c:547 utils/misc/guc.c:6930 +#: utils/init/miscinit.c:617 utils/misc/guc.c:7157 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "セキュリティー制限操作内でパラメーター\"%s\"を設定できません" -#: utils/init/miscinit.c:615 +#: utils/init/miscinit.c:685 #, c-format msgid "role with OID %u does not exist" msgstr "OID が %u であるロールは存在しません" -#: utils/init/miscinit.c:645 +#: utils/init/miscinit.c:715 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "ロール\"%s\"はログインが許可されません" -#: utils/init/miscinit.c:663 +#: utils/init/miscinit.c:733 #, c-format msgid "too many connections for role \"%s\"" msgstr "ロール\"%s\"からの接続が多すぎます" -#: utils/init/miscinit.c:723 +#: utils/init/miscinit.c:793 #, c-format msgid "permission denied to set session authorization" msgstr "set session authorization用の権限がありません" -#: utils/init/miscinit.c:806 +#: utils/init/miscinit.c:876 #, c-format msgid "invalid role OID: %u" msgstr "不正なロールID: %u" -#: utils/init/miscinit.c:860 +#: utils/init/miscinit.c:930 #, c-format msgid "database system is shut down" msgstr "データベースシステムはシャットダウンしました" -#: utils/init/miscinit.c:947 +#: utils/init/miscinit.c:1017 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "ロックファイル\"%s\"を作成できませんでした: %m" -#: utils/init/miscinit.c:961 +#: utils/init/miscinit.c:1031 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "ロックファイル\"%s\"をオープンできませんでした: %m" -#: utils/init/miscinit.c:968 +#: utils/init/miscinit.c:1038 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "ロックファイル\"%s\"を読み取れませんでした: %m" -#: utils/init/miscinit.c:977 +#: utils/init/miscinit.c:1047 #, c-format msgid "lock file \"%s\" is empty" msgstr "ロックファイル\"%s\"が空です" -#: utils/init/miscinit.c:978 +#: utils/init/miscinit.c:1048 #, c-format msgid "Either another server is starting, or the lock file is the remnant of a previous server startup crash." msgstr "他のサーバが稼働しているか、前回のサーバ起動失敗のためロックファイルが残っているかのいずれかです" -#: utils/init/miscinit.c:1022 +#: utils/init/miscinit.c:1092 #, c-format msgid "lock file \"%s\" already exists" msgstr "ロックファイル\"%s\"はすでに存在します" -#: utils/init/miscinit.c:1026 +#: utils/init/miscinit.c:1096 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "他のpostgres(PID %d)がデータディレクトリ\"%s\"で稼動していませんか?" -#: utils/init/miscinit.c:1028 +#: utils/init/miscinit.c:1098 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "他のpostmaster(PID %d)がデータディレクトリ\"%s\"で稼動していませんか?" -#: utils/init/miscinit.c:1031 +#: utils/init/miscinit.c:1101 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "他のpostgres(PID %d)がソケットファイル\"%s\"を使用していませんか?" -#: utils/init/miscinit.c:1033 +#: utils/init/miscinit.c:1103 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "他のpostmaster(PID %d)がソケットファイル\"%s\"を使用していませんか?" -#: utils/init/miscinit.c:1084 +#: utils/init/miscinit.c:1154 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "古いロックファイル\"%s\"を削除できませんでした: %m" -#: utils/init/miscinit.c:1086 +#: utils/init/miscinit.c:1156 #, c-format msgid "The file seems accidentally left over, but it could not be removed. Please remove the file by hand and try again." msgstr "このファイルは偶然残ってしまったようですが、削除できませんでした。手作業でこれを削除し再実行してください。" -#: utils/init/miscinit.c:1123 utils/init/miscinit.c:1137 -#: utils/init/miscinit.c:1148 +#: utils/init/miscinit.c:1193 utils/init/miscinit.c:1207 utils/init/miscinit.c:1218 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "ロックファイル\"%s\"に書き出せませんでした: %m" -#: utils/init/miscinit.c:1280 utils/init/miscinit.c:1423 utils/misc/guc.c:9834 +#: utils/init/miscinit.c:1329 utils/init/miscinit.c:1471 utils/misc/guc.c:10056 #, c-format msgid "could not read from file \"%s\": %m" msgstr "ファイル\"%s\"から読み取れませんでした: %m" -#: utils/init/miscinit.c:1411 +#: utils/init/miscinit.c:1459 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "ファイル\"%s\"をオープンできませんでした: %m; とりあえず続けます" -#: utils/init/miscinit.c:1436 +#: utils/init/miscinit.c:1484 #, c-format msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" msgstr "ロックファイル\"%s\"が誤ったPIDをもっています: %ld、正しくは%ld" -#: utils/init/miscinit.c:1475 utils/init/miscinit.c:1491 +#: utils/init/miscinit.c:1523 utils/init/miscinit.c:1539 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "\"%s\"は有効なデータディレクトリではありません" -#: utils/init/miscinit.c:1477 +#: utils/init/miscinit.c:1525 #, c-format msgid "File \"%s\" is missing." msgstr "ファイル\"%s\"が存在しません" -#: utils/init/miscinit.c:1493 +#: utils/init/miscinit.c:1541 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "ファイル\"%s\"に有効なデータがありません。" -#: utils/init/miscinit.c:1495 +#: utils/init/miscinit.c:1543 #, c-format msgid "You might need to initdb." msgstr "initdbする必要があるかもしれません" -#: utils/init/miscinit.c:1503 +#: utils/init/miscinit.c:1551 #, c-format msgid "The data directory was initialized by PostgreSQL version %s, which is not compatible with this version %s." msgstr "データディレクトリはPostgreSQLバージョン%sで初期化されましたが、これはバージョン%sとは互換性がありません" -#: utils/init/miscinit.c:1570 +#: utils/init/miscinit.c:1618 #, c-format msgid "loaded library \"%s\"" msgstr "ライブラリ\"%s\"をロードしました" @@ -24273,22 +24097,20 @@ msgstr "ライブラリ\"%s\"をロードしました" #: utils/init/postinit.c:255 #, c-format msgid "replication connection authorized: user=%s application_name=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "レプリケーション接続の認証完了: ユーザ=%s application_name=%s SLL有効 (プロトコル=%s、暗号方式=%s、ビット長=%d、圧縮=%s)" +msgstr "レプリケーション接続の認証完了: ユーザ=%s application_name=%s SSL有効 (プロトコル=%s、暗号方式=%s、ビット長=%d、圧縮=%s)" -#: utils/init/postinit.c:261 utils/init/postinit.c:267 -#: utils/init/postinit.c:289 utils/init/postinit.c:295 +#: utils/init/postinit.c:261 utils/init/postinit.c:267 utils/init/postinit.c:289 utils/init/postinit.c:295 msgid "off" msgstr "無効" -#: utils/init/postinit.c:261 utils/init/postinit.c:267 -#: utils/init/postinit.c:289 utils/init/postinit.c:295 +#: utils/init/postinit.c:261 utils/init/postinit.c:267 utils/init/postinit.c:289 utils/init/postinit.c:295 msgid "on" msgstr "有効" #: utils/init/postinit.c:262 #, c-format msgid "replication connection authorized: user=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "レプリケーション接続の認証完了: ユーザ=%s SLL有効 (プロトコル=%s、暗号方式=%s、ビット長=%d、圧縮=%s)" +msgstr "レプリケーション接続の認証完了: ユーザ=%s SSL有効 (プロトコル=%s、暗号方式=%s、ビット長=%d、圧縮=%s)" #: utils/init/postinit.c:272 #, c-format @@ -24370,1926 +24192,1997 @@ msgstr "データベースを別のロケールで再生成するか、または msgid "The database was initialized with LC_CTYPE \"%s\", which is not recognized by setlocale()." msgstr "データベースは LC_CTYPE \"%s\"で初期化されていますが、setlocale()でこれを認識されません" -#: utils/init/postinit.c:764 +#: utils/init/postinit.c:766 #, c-format msgid "no roles are defined in this database system" msgstr "データベースシステム内でロールが定義されていません" -#: utils/init/postinit.c:765 +#: utils/init/postinit.c:767 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "すぐに CREATE USER \"%s\" SUPERUSER; を実行してください。" -#: utils/init/postinit.c:801 +#: utils/init/postinit.c:803 #, c-format msgid "new replication connections are not allowed during database shutdown" msgstr "データベースのシャットダウン中は、新しいレプリケーション接続は許可されません" -#: utils/init/postinit.c:805 +#: utils/init/postinit.c:807 #, c-format msgid "must be superuser to connect during database shutdown" msgstr "データベースのシャットダウン中に接続するにはスーパユーザである必要があります" -#: utils/init/postinit.c:815 +#: utils/init/postinit.c:817 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "バイナリアップグレードモード中に接続するにはスーパユーザである必要があります" -#: utils/init/postinit.c:828 +#: utils/init/postinit.c:830 #, c-format msgid "remaining connection slots are reserved for non-replication superuser connections" msgstr "残りの接続スロットはレプリケーションユーザではないスーパユーザ用に予約されています" -#: utils/init/postinit.c:838 +#: utils/init/postinit.c:840 #, c-format msgid "must be superuser or replication role to start walsender" msgstr "walsenderを起動するにはスーパユーザまたはreplicationロールである必要があります" -#: utils/init/postinit.c:907 +#: utils/init/postinit.c:909 #, c-format msgid "database %u does not exist" msgstr "データベース %u は存在しません" -#: utils/init/postinit.c:996 +#: utils/init/postinit.c:998 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "削除またはリネームされたばかりのようです。" -#: utils/init/postinit.c:1014 +#: utils/init/postinit.c:1016 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "データベースのサブディレクトリ\"%s\"がありません。" -#: utils/init/postinit.c:1019 +#: utils/init/postinit.c:1021 #, c-format msgid "could not access directory \"%s\": %m" msgstr "ディレクトリ\"%s\"にアクセスできませんでした: %m" -#: utils/mb/conv.c:488 utils/mb/conv.c:680 +#: utils/mb/conv.c:443 utils/mb/conv.c:635 #, c-format msgid "invalid encoding number: %d" msgstr "不正な符号化方式番号: %d" -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:122 -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:154 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:122 utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:154 #, c-format msgid "unexpected encoding ID %d for ISO 8859 character sets" msgstr "ISO8859文字セットに対する符号化方式ID %dは想定外です" -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:103 -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:135 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:103 utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:135 #, c-format msgid "unexpected encoding ID %d for WIN character sets" msgstr "WIN文字セットに対する符号化方式ID %dは想定外です<" -#: utils/mb/encnames.c:473 -#, c-format -msgid "encoding \"%s\" not supported by ICU" -msgstr "エンコーディング\"%s\"はICUではサポートされていません" - -#: utils/mb/encnames.c:572 -#, c-format -msgid "encoding name too long" -msgstr "符号化方式名称が長すぎます" - -#: utils/mb/mbutils.c:296 +#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:842 #, c-format msgid "conversion between %s and %s is not supported" msgstr "%sと%s間の変換はサポートされていません" -#: utils/mb/mbutils.c:355 +#: utils/mb/mbutils.c:385 #, c-format msgid "default conversion function for encoding \"%s\" to \"%s\" does not exist" msgstr "符号化方式\"%s\"から\"%s\"用のデフォルト変換関数は存在しません" -#: utils/mb/mbutils.c:372 utils/mb/mbutils.c:399 utils/mb/mbutils.c:728 -#: utils/mb/mbutils.c:754 +#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:429 utils/mb/mbutils.c:758 utils/mb/mbutils.c:784 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "%dバイトの文字列は符号化変換では長すぎます。" -#: utils/mb/mbutils.c:481 +#: utils/mb/mbutils.c:511 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "不正な変換元符号化方式名: \"%s\"" -#: utils/mb/mbutils.c:486 +#: utils/mb/mbutils.c:516 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "不正な変換先符号化方式名: \"%s\"" -#: utils/mb/mbutils.c:626 +#: utils/mb/mbutils.c:656 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "符号化方式\"%s\"に対する不正なバイト値: 0x%02x" -#: utils/mb/mbutils.c:990 +#: utils/mb/mbutils.c:819 +#, c-format +msgid "invalid Unicode code point" +msgstr "不正なUnicodeコードポイント" + +#: utils/mb/mbutils.c:1087 #, c-format msgid "bind_textdomain_codeset failed" msgstr "bind_textdomain_codesetが失敗しました" -#: utils/mb/wchar.c:2063 +#: utils/mb/mbutils.c:1595 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "符号化方式\"%s\"に対する不正なバイト列です: %s" -#: utils/mb/wchar.c:2096 +#: utils/mb/mbutils.c:1628 #, c-format msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "符号化方式\"%2$s\"においてバイト列%1$sである文字は符号化方式\"%3$s\"で等価な文字を持ちません" -#: utils/misc/guc.c:634 +#: utils/misc/guc.c:675 msgid "Ungrouped" msgstr "その他" -#: utils/misc/guc.c:636 +#: utils/misc/guc.c:677 msgid "File Locations" msgstr "ファイルの位置" -#: utils/misc/guc.c:638 +#: utils/misc/guc.c:679 msgid "Connections and Authentication" msgstr "接続と認証" -#: utils/misc/guc.c:640 +#: utils/misc/guc.c:681 msgid "Connections and Authentication / Connection Settings" msgstr "接続と認証/接続設定" -#: utils/misc/guc.c:642 +#: utils/misc/guc.c:683 msgid "Connections and Authentication / Authentication" msgstr "接続と認証/認証" -#: utils/misc/guc.c:644 +#: utils/misc/guc.c:685 msgid "Connections and Authentication / SSL" msgstr "接続と認証/SSL" -#: utils/misc/guc.c:646 +#: utils/misc/guc.c:687 msgid "Resource Usage" msgstr "使用リソース" -#: utils/misc/guc.c:648 +#: utils/misc/guc.c:689 msgid "Resource Usage / Memory" msgstr "使用リソース/メモリ" -#: utils/misc/guc.c:650 +#: utils/misc/guc.c:691 msgid "Resource Usage / Disk" msgstr "使用リソース/ディスク" -#: utils/misc/guc.c:652 +#: utils/misc/guc.c:693 msgid "Resource Usage / Kernel Resources" msgstr "使用リソース/カーネルリソース" -#: utils/misc/guc.c:654 +#: utils/misc/guc.c:695 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "使用リソース / コストベースvacuum遅延" -#: utils/misc/guc.c:656 +#: utils/misc/guc.c:697 msgid "Resource Usage / Background Writer" msgstr "使用リソース / バックグラウンド・ライタ" -#: utils/misc/guc.c:658 +#: utils/misc/guc.c:699 msgid "Resource Usage / Asynchronous Behavior" msgstr "使用リソース / 非同期動作" -#: utils/misc/guc.c:660 +#: utils/misc/guc.c:701 msgid "Write-Ahead Log" msgstr "先行書き込みログ" -#: utils/misc/guc.c:662 +#: utils/misc/guc.c:703 msgid "Write-Ahead Log / Settings" msgstr "先行書き込みログ / 設定" -#: utils/misc/guc.c:664 +#: utils/misc/guc.c:705 msgid "Write-Ahead Log / Checkpoints" msgstr "先行書き込みログ / チェックポイント" -#: utils/misc/guc.c:666 +#: utils/misc/guc.c:707 msgid "Write-Ahead Log / Archiving" msgstr "先行書き込みログ / アーカイビング" -#: utils/misc/guc.c:668 +#: utils/misc/guc.c:709 msgid "Write-Ahead Log / Archive Recovery" msgstr "先行書き込みログ / アーカイブリカバリ" -#: utils/misc/guc.c:670 +#: utils/misc/guc.c:711 msgid "Write-Ahead Log / Recovery Target" msgstr "先行書き込みログ / チェックポイント" -#: utils/misc/guc.c:672 +#: utils/misc/guc.c:713 msgid "Replication" msgstr "レプリケーション" -#: utils/misc/guc.c:674 +#: utils/misc/guc.c:715 msgid "Replication / Sending Servers" msgstr "レプリケーション / 送信サーバ" -#: utils/misc/guc.c:676 -msgid "Replication / Master Server" -msgstr "レプリケーション / マスタサーバ" +#: utils/misc/guc.c:717 +msgid "Replication / Primary Server" +msgstr "レプリケーション / プライマリサーバ" -#: utils/misc/guc.c:678 +#: utils/misc/guc.c:719 msgid "Replication / Standby Servers" msgstr "レプリケーション / スタンバイサーバ" -#: utils/misc/guc.c:680 +#: utils/misc/guc.c:721 msgid "Replication / Subscribers" msgstr "レプリケーション / 購読サーバ" -#: utils/misc/guc.c:682 +#: utils/misc/guc.c:723 msgid "Query Tuning" msgstr "問い合わせのチューニング" -#: utils/misc/guc.c:684 +#: utils/misc/guc.c:725 msgid "Query Tuning / Planner Method Configuration" msgstr "問い合わせのチューニング / プランナ手法設定" -#: utils/misc/guc.c:686 +#: utils/misc/guc.c:727 msgid "Query Tuning / Planner Cost Constants" msgstr "問い合わせのチューニング / プランナコスト定数" -#: utils/misc/guc.c:688 +#: utils/misc/guc.c:729 msgid "Query Tuning / Genetic Query Optimizer" msgstr "問い合わせのチューニング / 遺伝的問い合わせオプティマイザ" -#: utils/misc/guc.c:690 +#: utils/misc/guc.c:731 msgid "Query Tuning / Other Planner Options" msgstr "問い合わせのチューニング / その他のプランオプション" -#: utils/misc/guc.c:692 +#: utils/misc/guc.c:733 msgid "Reporting and Logging" msgstr "レポートとログ出力" -#: utils/misc/guc.c:694 +#: utils/misc/guc.c:735 msgid "Reporting and Logging / Where to Log" msgstr "レポートとログ出力 / ログの出力先" -#: utils/misc/guc.c:696 +#: utils/misc/guc.c:737 msgid "Reporting and Logging / When to Log" msgstr "レポートとログ出力 / ログのタイミング" -#: utils/misc/guc.c:698 +#: utils/misc/guc.c:739 msgid "Reporting and Logging / What to Log" msgstr "レポートとログ出力 / ログの内容" -#: utils/misc/guc.c:700 +#: utils/misc/guc.c:741 msgid "Process Title" msgstr "プロセスタイトル" -#: utils/misc/guc.c:702 +#: utils/misc/guc.c:743 msgid "Statistics" msgstr "統計情報" -#: utils/misc/guc.c:704 +#: utils/misc/guc.c:745 msgid "Statistics / Monitoring" msgstr "統計情報 / 監視" -#: utils/misc/guc.c:706 +#: utils/misc/guc.c:747 msgid "Statistics / Query and Index Statistics Collector" msgstr "統計情報 / 問い合わせとインデックスの統計情報収集器" -#: utils/misc/guc.c:708 +#: utils/misc/guc.c:749 msgid "Autovacuum" msgstr "自動VACUUM" -#: utils/misc/guc.c:710 +#: utils/misc/guc.c:751 msgid "Client Connection Defaults" msgstr "クライアント接続のデフォルト設定" -#: utils/misc/guc.c:712 +#: utils/misc/guc.c:753 msgid "Client Connection Defaults / Statement Behavior" msgstr "クライアント接続のデフォルト設定 / 文の振舞い" -#: utils/misc/guc.c:714 +#: utils/misc/guc.c:755 msgid "Client Connection Defaults / Locale and Formatting" msgstr "クライアント接続のデフォルト設定 / ロケールと整形" -#: utils/misc/guc.c:716 +#: utils/misc/guc.c:757 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "クライアント接続のデフォルト設定 / ライブラリの事前読み込み" -#: utils/misc/guc.c:718 +#: utils/misc/guc.c:759 msgid "Client Connection Defaults / Other Defaults" msgstr "クライアント接続のデフォルト設定 / その他のデフォルト設定" -#: utils/misc/guc.c:720 +#: utils/misc/guc.c:761 msgid "Lock Management" msgstr "ロック管理" -#: utils/misc/guc.c:722 +#: utils/misc/guc.c:763 msgid "Version and Platform Compatibility" msgstr "バージョンおよびプラットフォーム間の互換性" -#: utils/misc/guc.c:724 +#: utils/misc/guc.c:765 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "バージョンおよびプラットフォーム間の互換性 / PostgreSQLの以前のバージョン" -#: utils/misc/guc.c:726 +#: utils/misc/guc.c:767 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "バージョンおよびプラットフォーム間の互換性 / 他のプラットフォームおよびクライアント" -#: utils/misc/guc.c:728 +#: utils/misc/guc.c:769 msgid "Error Handling" msgstr "エラーハンドリング" -#: utils/misc/guc.c:730 +#: utils/misc/guc.c:771 msgid "Preset Options" msgstr "事前設定オプション" -#: utils/misc/guc.c:732 +#: utils/misc/guc.c:773 msgid "Customized Options" msgstr "独自オプション" -#: utils/misc/guc.c:734 +#: utils/misc/guc.c:775 msgid "Developer Options" msgstr "開発者向けオプション" -#: utils/misc/guc.c:786 +#: utils/misc/guc.c:833 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "このパラメータで使用可能な単位は\"B\"、\"kB\"、\"MB\"、\"GB\"および\"TB\"です。" -#: utils/misc/guc.c:823 +#: utils/misc/guc.c:870 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "このパラメータの有効単位は \"us\"、\"ms\"、\"s\"、\"min\"、\"h\"そして\"d\"です。" -#: utils/misc/guc.c:885 +#: utils/misc/guc.c:932 msgid "Enables the planner's use of sequential-scan plans." msgstr "プランナでのシーケンシャルスキャンプランの使用を有効にします。" -#: utils/misc/guc.c:895 +#: utils/misc/guc.c:942 msgid "Enables the planner's use of index-scan plans." msgstr "プランナでのインデックススキャンプランの使用を有効にします。" -#: utils/misc/guc.c:905 +#: utils/misc/guc.c:952 msgid "Enables the planner's use of index-only-scan plans." msgstr "プランナでのインデックスオンリースキャンプランの使用を有効にします。" -#: utils/misc/guc.c:915 +#: utils/misc/guc.c:962 msgid "Enables the planner's use of bitmap-scan plans." msgstr "プランナでのビットマップスキャンプランの使用を有効にします。" -#: utils/misc/guc.c:925 +#: utils/misc/guc.c:972 msgid "Enables the planner's use of TID scan plans." msgstr "プランナでのTIDスキャンプランの使用を有効にします。" -#: utils/misc/guc.c:935 +#: utils/misc/guc.c:982 msgid "Enables the planner's use of explicit sort steps." msgstr "プランナでの明示的ソートの使用を有効にします。" -#: utils/misc/guc.c:945 +#: utils/misc/guc.c:992 +msgid "Enables the planner's use of incremental sort steps." +msgstr "プランナでの差分ソート処理の使用を有効にします。" + +#: utils/misc/guc.c:1001 msgid "Enables the planner's use of hashed aggregation plans." msgstr "プランナでのハッシュ集約プランの使用を有効にします。" -#: utils/misc/guc.c:955 +#: utils/misc/guc.c:1011 msgid "Enables the planner's use of materialization." msgstr "プランナでの実体化の使用を有効にします。" -#: utils/misc/guc.c:965 +#: utils/misc/guc.c:1021 msgid "Enables the planner's use of nested-loop join plans." msgstr "プランナでのネストループジョインプランの使用を有効にします。" -#: utils/misc/guc.c:975 +#: utils/misc/guc.c:1031 msgid "Enables the planner's use of merge join plans." msgstr "プランナでのマージジョインプランの使用を有効にします。" -#: utils/misc/guc.c:985 +#: utils/misc/guc.c:1041 msgid "Enables the planner's use of hash join plans." msgstr "プランナでのハッシュジョインプランの使用を有効にします。" -#: utils/misc/guc.c:995 +#: utils/misc/guc.c:1051 msgid "Enables the planner's use of gather merge plans." msgstr "プランナでのギャザーマージプランの使用を有効にします。" -#: utils/misc/guc.c:1005 +#: utils/misc/guc.c:1061 msgid "Enables partitionwise join." msgstr "パーティション単位ジョインを有効にします。" -#: utils/misc/guc.c:1015 +#: utils/misc/guc.c:1071 msgid "Enables partitionwise aggregation and grouping." msgstr "パーティション単位の集約およびグルーピングを有効にします。" -#: utils/misc/guc.c:1025 +#: utils/misc/guc.c:1081 msgid "Enables the planner's use of parallel append plans." msgstr "プランナでの並列アペンドプランの使用を有効にします。" -#: utils/misc/guc.c:1035 +#: utils/misc/guc.c:1091 msgid "Enables the planner's use of parallel hash plans." msgstr "プランナでの並列ハッシュプランの使用を有効にします。" -#: utils/misc/guc.c:1045 -#, fuzzy -#| msgid "Enable plan-time and run-time partition pruning." +#: utils/misc/guc.c:1101 msgid "Enables plan-time and run-time partition pruning." -msgstr "実行時のパーティション除外処理を有効にします。" +msgstr "実行計画作成時および実行時のパーティション除外処理を有効にします。" -#: utils/misc/guc.c:1046 +#: utils/misc/guc.c:1102 msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." msgstr "実行計画時と実行時の、クエリ中の条件とパーティション境界の比較に基づいたパーティション単位のスキャン除外処理を許可します。" -#: utils/misc/guc.c:1057 +#: utils/misc/guc.c:1113 msgid "Enables genetic query optimization." msgstr "遺伝的問い合わせ最適化を有効にします。" -#: utils/misc/guc.c:1058 +#: utils/misc/guc.c:1114 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "このアルゴリズムでは、全数探索を伴わずに行う実行計画の作成を試みます。" -#: utils/misc/guc.c:1069 +#: utils/misc/guc.c:1125 msgid "Shows whether the current user is a superuser." msgstr "現在のユーザがスーパユーザかどうかを表示します。" -#: utils/misc/guc.c:1079 +#: utils/misc/guc.c:1135 msgid "Enables advertising the server via Bonjour." msgstr "Bonjour を経由したサーバのアドバタイズを有効にします。" -#: utils/misc/guc.c:1088 +#: utils/misc/guc.c:1144 msgid "Collects transaction commit time." msgstr "トランザクションのコミット時刻を収集します。" -#: utils/misc/guc.c:1097 +#: utils/misc/guc.c:1153 msgid "Enables SSL connections." msgstr "SSL接続を有効にします。" -#: utils/misc/guc.c:1106 +#: utils/misc/guc.c:1162 msgid "Also use ssl_passphrase_command during server reload." msgstr "サーバリロード時にも ssl_passphrase_command を使用します。" -#: utils/misc/guc.c:1115 +#: utils/misc/guc.c:1171 msgid "Give priority to server ciphersuite order." msgstr "サーバ側の暗号スイート順序を優先します。" -#: utils/misc/guc.c:1124 +#: utils/misc/guc.c:1180 msgid "Forces synchronization of updates to disk." msgstr "強制的に更新をディスクに同期します。" -#: utils/misc/guc.c:1125 +#: utils/misc/guc.c:1181 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "サーバは、確実に更新が物理的にディスクに書き込まれるように複数の場所でfsync()システムコールを使用します。これにより、オペレーティングシステムやハードウェアがクラッシュした後でもデータベースクラスタは一貫した状態に復旧することができます。" -#: utils/misc/guc.c:1136 +#: utils/misc/guc.c:1192 msgid "Continues processing after a checksum failure." -msgstr "チェックサムエラーの後処理を継続します。" +msgstr "チェックサムエラーの発生時に処理を継続します。" -#: utils/misc/guc.c:1137 +#: utils/misc/guc.c:1193 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "チェックサムエラーを検知すると、通常PostgreSQLはエラーの報告を行ない、現在のトランザクションを中断させます。ignore_checksum_failureを真に設定することによりエラーを無視します(代わりに警告を報告します)この動作はクラッシュや他の深刻な問題を引き起こすかもしれません。チェックサムが有効な場合にのみ効果があります。" -#: utils/misc/guc.c:1151 +#: utils/misc/guc.c:1207 msgid "Continues processing past damaged page headers." msgstr "破損したページヘッダがあっても処理を継続します。" -#: utils/misc/guc.c:1152 +#: utils/misc/guc.c:1208 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "ページヘッダの障害が分かると、通常PostgreSQLはエラーの報告を行ない、現在のトランザクションを中断させます。zero_damaged_pagesを真に設定することにより、システムは代わりに警告を報告し、障害のあるページをゼロで埋め、処理を継続します。 この動作により、障害のあったページ上にある全ての行のデータを破壊されます。" -#: utils/misc/guc.c:1165 +#: utils/misc/guc.c:1221 +msgid "Continues recovery after an invalid pages failure." +msgstr "不正ページエラーの発生時に処理を継続します。" + +#: utils/misc/guc.c:1222 +msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." +msgstr "リカバリ中に不正なページへの参照を行うWALレコードを検出した場合、PostgreSQLはPANICレベルのエラーを出力してリカバリを中断します。ignore_invalid_pagesをtrueに設定するとシステムはWALレコード中の不正なページへの参照を無視してリカバリを継続します(ただし、引き続き警告は出力します)。この挙動はクラッシュ、データ損失、破壊の伝播ないしは隠蔽または他の深刻な問題を引き起こします。リカバリモードもしくはスタンバイモードでのみ有効となります。" + +#: utils/misc/guc.c:1240 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "チェックポイントの後最初に変更された際にページ全体をWALに出力します。" -#: utils/misc/guc.c:1166 +#: utils/misc/guc.c:1241 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "ページ書き込み処理中にオペレーティングシステムがクラッシュすると、ディスクへの書き込みが一部分のみ行われる可能性があります。リカバリでは、WALに保存された行の変更だけでは完全に復旧させることができません。このオプションにより、チェックポイントの後の最初の更新時にWALにページを出力するため、完全な復旧が可能になります。" -#: utils/misc/guc.c:1179 +#: utils/misc/guc.c:1254 msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications." msgstr "チェックポイントの後最初に更新された時に、重要な更新ではなくてもページ全体をWALに書き出します。" -#: utils/misc/guc.c:1189 +#: utils/misc/guc.c:1264 msgid "Compresses full-page writes written in WAL file." msgstr "WALファイルに出力される全ページ出力を圧縮します。" -#: utils/misc/guc.c:1199 +#: utils/misc/guc.c:1274 msgid "Writes zeroes to new WAL files before first use." msgstr "新しいWALファイルの使用前にゼロを書き込みます。" -#: utils/misc/guc.c:1209 +#: utils/misc/guc.c:1284 msgid "Recycles WAL files by renaming them." msgstr "WALファイルを名前を変更して再利用します。" -#: utils/misc/guc.c:1219 +#: utils/misc/guc.c:1294 msgid "Logs each checkpoint." msgstr "チェックポイントをログに記録します。" -#: utils/misc/guc.c:1228 +#: utils/misc/guc.c:1303 msgid "Logs each successful connection." msgstr "成功した接続を全てログに記録します。" -#: utils/misc/guc.c:1237 +#: utils/misc/guc.c:1312 msgid "Logs end of a session, including duration." msgstr "セッションの終了時刻とその期間をログに記録します。" -#: utils/misc/guc.c:1246 +#: utils/misc/guc.c:1321 msgid "Logs each replication command." msgstr "各レプリケーションコマンドをログに記録します。" -#: utils/misc/guc.c:1255 +#: utils/misc/guc.c:1330 msgid "Shows whether the running server has assertion checks enabled." msgstr "起動中のサーバがアサーションチェックを有効にしているかどうかを表示します。" -#: utils/misc/guc.c:1270 +#: utils/misc/guc.c:1345 msgid "Terminate session on any error." msgstr "何からのエラーがあればセッションを終了します" -#: utils/misc/guc.c:1279 +#: utils/misc/guc.c:1354 msgid "Reinitialize server after backend crash." msgstr "バックエンドがクラッシュした後サーバを再初期化します" -#: utils/misc/guc.c:1289 +#: utils/misc/guc.c:1364 msgid "Logs the duration of each completed SQL statement." msgstr "完了したSQL全ての実行時間をログに記録します。" -#: utils/misc/guc.c:1298 +#: utils/misc/guc.c:1373 msgid "Logs each query's parse tree." msgstr "問い合わせのパースツリーをログに記録します。" -#: utils/misc/guc.c:1307 +#: utils/misc/guc.c:1382 msgid "Logs each query's rewritten parse tree." msgstr "リライト後の問い合わせのパースツリーをログを記録します。" -#: utils/misc/guc.c:1316 +#: utils/misc/guc.c:1391 msgid "Logs each query's execution plan." msgstr "問い合わせの実行計画をログに記録します。" -#: utils/misc/guc.c:1325 +#: utils/misc/guc.c:1400 msgid "Indents parse and plan tree displays." msgstr "パースツリーと実行計画ツリーの表示をインデントします。" -#: utils/misc/guc.c:1334 +#: utils/misc/guc.c:1409 msgid "Writes parser performance statistics to the server log." msgstr "パーサの性能統計情報をサーバログに出力します。" -#: utils/misc/guc.c:1343 +#: utils/misc/guc.c:1418 msgid "Writes planner performance statistics to the server log." msgstr "プランナの性能統計情報をサーバログに出力します。" -#: utils/misc/guc.c:1352 +#: utils/misc/guc.c:1427 msgid "Writes executor performance statistics to the server log." msgstr "エグゼキュータの性能統計情報をサーバログに出力します。" -#: utils/misc/guc.c:1361 +#: utils/misc/guc.c:1436 msgid "Writes cumulative performance statistics to the server log." msgstr "累積の性能統計情報をサーバログに出力します。" -#: utils/misc/guc.c:1371 +#: utils/misc/guc.c:1446 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "B-treeの各種操作に関するシステムリソース(メモリとCPU)の使用統計をログに記録します。" -#: utils/misc/guc.c:1383 +#: utils/misc/guc.c:1458 msgid "Collects information about executing commands." msgstr "実行中のコマンドに関する情報を収集します。" -#: utils/misc/guc.c:1384 +#: utils/misc/guc.c:1459 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "そのコマンドが実行を開始した時刻を伴った、各セッションでの現時点で実行中のコマンドに関する情報の収集を有効にします。" -#: utils/misc/guc.c:1394 +#: utils/misc/guc.c:1469 msgid "Collects statistics on database activity." msgstr "データベースの活動について統計情報を収集します。" -#: utils/misc/guc.c:1403 +#: utils/misc/guc.c:1478 msgid "Collects timing statistics for database I/O activity." msgstr "データベースのI/O動作に関する時間測定統計情報を収集します。" -#: utils/misc/guc.c:1413 +#: utils/misc/guc.c:1488 msgid "Updates the process title to show the active SQL command." msgstr "活動中のSQLコマンドを表示するようプロセスタイトルを更新します。" -#: utils/misc/guc.c:1414 +#: utils/misc/guc.c:1489 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "新しいSQLコマンドをサーバが受信する度に行うプロセスタイトルの更新を有効にします。" -#: utils/misc/guc.c:1427 +#: utils/misc/guc.c:1502 msgid "Starts the autovacuum subprocess." msgstr "autovacuumサブプロセスを起動します。" -#: utils/misc/guc.c:1437 +#: utils/misc/guc.c:1512 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "LISTENとNOTIFYコマンドのためのデバッグ出力を生成します。" -#: utils/misc/guc.c:1449 +#: utils/misc/guc.c:1524 msgid "Emits information about lock usage." msgstr "ロック使用状況に関する情報を出力します。" -#: utils/misc/guc.c:1459 +#: utils/misc/guc.c:1534 msgid "Emits information about user lock usage." msgstr "ユーザロックの使用状況に関する情報を出力します。" -#: utils/misc/guc.c:1469 +#: utils/misc/guc.c:1544 msgid "Emits information about lightweight lock usage." msgstr "軽量ロックの使用状況に関する情報を出力します。" -#: utils/misc/guc.c:1479 +#: utils/misc/guc.c:1554 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "デッドロックの発生時点の全てのロックについての情報をダンプします。" -#: utils/misc/guc.c:1491 +#: utils/misc/guc.c:1566 msgid "Logs long lock waits." msgstr "長時間のロック待機をログに記録します。" -#: utils/misc/guc.c:1501 +#: utils/misc/guc.c:1576 msgid "Logs the host name in the connection logs." msgstr "接続ログ内でホスト名を出力します。" -#: utils/misc/guc.c:1502 +#: utils/misc/guc.c:1577 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "デフォルトでは、接続ログメッセージには接続ホストのIPアドレスのみが表示されます。 このオプションを有効にすることで、ホスト名もログに表示されるようになります。 ホスト名解決の設定によってはで、無視できないほどの性能の悪化が起きうることに注意してください。" -#: utils/misc/guc.c:1513 +#: utils/misc/guc.c:1588 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "\"expr=NULL\"という形の式は\"expr IS NULL\"として扱います。" -#: utils/misc/guc.c:1514 +#: utils/misc/guc.c:1589 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "有効にした場合、expr = NULL(またはNULL = expr)という形の式はexpr IS NULLとして扱われます。つまり、exprの評価がNULL値の場合に真を、さもなくば偽を返します。expr = NULLのSQL仕様に基づいた正しい動作は常にNULL(未知)を返すことです。" -#: utils/misc/guc.c:1526 +#: utils/misc/guc.c:1601 msgid "Enables per-database user names." msgstr "データベース毎のユーザ名を許可します。" -#: utils/misc/guc.c:1535 +#: utils/misc/guc.c:1610 msgid "Sets the default read-only status of new transactions." msgstr "新しいトランザクションのリードオンリー設定のデフォルト値を設定。" -#: utils/misc/guc.c:1544 +#: utils/misc/guc.c:1619 msgid "Sets the current transaction's read-only status." msgstr "現在のトランザクションのリードオンリー設定を設定。" -#: utils/misc/guc.c:1554 +#: utils/misc/guc.c:1629 msgid "Sets the default deferrable status of new transactions." msgstr "新しいトランザクションの遅延可否設定のデフォルト値を設定。" -#: utils/misc/guc.c:1563 +#: utils/misc/guc.c:1638 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "リードオンリーのシリアライズ可能なトランザクションを、シリアライズに失敗することなく実行できるまで遅延させるかどうか" -#: utils/misc/guc.c:1573 +#: utils/misc/guc.c:1648 msgid "Enable row security." msgstr "行セキュリティを有効にします。" -#: utils/misc/guc.c:1574 +#: utils/misc/guc.c:1649 msgid "When enabled, row security will be applied to all users." msgstr "有効にすると、行セキュリティが全てのユーザに適用されます。" -#: utils/misc/guc.c:1582 +#: utils/misc/guc.c:1657 msgid "Check function bodies during CREATE FUNCTION." msgstr "CREATE FUNCTION中に関数本体を検査します。" -#: utils/misc/guc.c:1591 +#: utils/misc/guc.c:1666 msgid "Enable input of NULL elements in arrays." msgstr "配列内のNULL要素入力を有効化。" -#: utils/misc/guc.c:1592 +#: utils/misc/guc.c:1667 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "有効にすると、配列入力値における引用符のないNULLはNULL値を意味するようになります。さもなくば文字通りに解釈されます。" -#: utils/misc/guc.c:1608 +#: utils/misc/guc.c:1683 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS は今後サポートされません; false のみに設定可能です。" -#: utils/misc/guc.c:1618 +#: utils/misc/guc.c:1693 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "標準エラー出力、CSVログ、またはその両方をログファイルに捕捉するための子プロセスを開始します。" -#: utils/misc/guc.c:1627 +#: utils/misc/guc.c:1702 msgid "Truncate existing log files of same name during log rotation." msgstr "ログローテーション時に既存の同一名称のログファイルを切り詰めます。" -#: utils/misc/guc.c:1638 +#: utils/misc/guc.c:1713 msgid "Emit information about resource usage in sorting." msgstr "ソート中にリソース使用状況に関する情報を発行します。" -#: utils/misc/guc.c:1652 +#: utils/misc/guc.c:1727 msgid "Generate debugging output for synchronized scanning." msgstr "同期スキャン処理のデバッグ出力を生成します。" -#: utils/misc/guc.c:1667 +#: utils/misc/guc.c:1742 msgid "Enable bounded sorting using heap sort." msgstr "ヒープソートを使用した境界のソート処理を有効にします" -#: utils/misc/guc.c:1680 +#: utils/misc/guc.c:1755 msgid "Emit WAL-related debugging output." msgstr "WAL関連のデバッグ出力を出力します。" -#: utils/misc/guc.c:1692 +#: utils/misc/guc.c:1767 msgid "Datetimes are integer based." msgstr "日付時刻は整数ベースです。" -#: utils/misc/guc.c:1703 +#: utils/misc/guc.c:1778 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "KerberosおよびGSSAPIユーザ名を大文字小文字を区別して扱うかどうかを設定します。" -#: utils/misc/guc.c:1713 +#: utils/misc/guc.c:1788 msgid "Warn about backslash escapes in ordinary string literals." msgstr "普通の文字列リテラル内のバックスラッシュエスケープを警告します。" -#: utils/misc/guc.c:1723 +#: utils/misc/guc.c:1798 msgid "Causes '...' strings to treat backslashes literally." msgstr "'...' 文字列はバックスラッシュをそのまま扱います。" -#: utils/misc/guc.c:1734 +#: utils/misc/guc.c:1809 msgid "Enable synchronized sequential scans." msgstr "同期シーケンシャルスキャンを有効にします。" -#: utils/misc/guc.c:1744 +#: utils/misc/guc.c:1819 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "リカバリ目標のトランザクションを含めるか除外するかを設定。" -#: utils/misc/guc.c:1754 +#: utils/misc/guc.c:1829 msgid "Allows connections and queries during recovery." msgstr "リカバリ中でも接続と問い合わせを受け付けます" -#: utils/misc/guc.c:1764 +#: utils/misc/guc.c:1839 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "問い合わせの衝突を避けるためのホットスタンバイからプライマリへのフィードバックを受け付けます" -#: utils/misc/guc.c:1774 +#: utils/misc/guc.c:1849 msgid "Allows modifications of the structure of system tables." msgstr "システムテーブル構造の変更を許可。" -#: utils/misc/guc.c:1785 +#: utils/misc/guc.c:1860 msgid "Disables reading from system indexes." msgstr "システムインデックスの読み取りを無効にします。" -#: utils/misc/guc.c:1786 +#: utils/misc/guc.c:1861 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "これはインデックスの更新は妨げないため使用しても安全です。最も大きな悪影響は低速化です。" -#: utils/misc/guc.c:1797 +#: utils/misc/guc.c:1872 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "ラージオブジェクトで権限チェックを行う際、後方互換性モードを有効にします。" -#: utils/misc/guc.c:1798 +#: utils/misc/guc.c:1873 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "9.0 より前のPostgreSQLとの互換のため、ラージオブジェクトを読んだり変更したりする際に権限チェックをスキップする。" -#: utils/misc/guc.c:1808 +#: utils/misc/guc.c:1883 msgid "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." msgstr "PostgreSQL 9.4以降意味が変わっている構文に対して警告を出します。" -#: utils/misc/guc.c:1818 +#: utils/misc/guc.c:1893 msgid "When generating SQL fragments, quote all identifiers." msgstr "SQL文を生成する時に、すべての識別子を引用符で囲みます。" -#: utils/misc/guc.c:1828 +#: utils/misc/guc.c:1903 msgid "Shows whether data checksums are turned on for this cluster." msgstr "データチェックサムがこのクラスタで有効になっているかどうかを表示します。" -#: utils/misc/guc.c:1839 +#: utils/misc/guc.c:1914 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "シーケンス番号を付加することでsyslogメッセージの重複を防ぎます。" -#: utils/misc/guc.c:1849 +#: utils/misc/guc.c:1924 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "syslogに送出するメッセージを行単位で分割して、1024バイトに収まるようにします。" -#: utils/misc/guc.c:1859 +#: utils/misc/guc.c:1934 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Gather および Gather Merge でも下位プランを実行するかどうかを制御します。" -#: utils/misc/guc.c:1860 +#: utils/misc/guc.c:1935 msgid "Should gather nodes also run subplans, or just gather tuples?" msgstr "Gather ノードでも下位プランを実行しますか、もしくはただタプルの収集のみを行いますか?" -#: utils/misc/guc.c:1870 +#: utils/misc/guc.c:1945 msgid "Allow JIT compilation." msgstr "JITコンパイルを許可します。" -#: utils/misc/guc.c:1881 +#: utils/misc/guc.c:1956 msgid "Register JIT compiled function with debugger." msgstr "JITコンパイルされた関数をデバッガに登録します。" -#: utils/misc/guc.c:1898 +#: utils/misc/guc.c:1973 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "LLVMビットコードを出力して、JITデバッグを容易にします。" -#: utils/misc/guc.c:1909 +#: utils/misc/guc.c:1984 msgid "Allow JIT compilation of expressions." msgstr "式のJITコンパイルを許可します。" -#: utils/misc/guc.c:1920 +#: utils/misc/guc.c:1995 msgid "Register JIT compiled function with perf profiler." msgstr "perfプロファイラにJITコンパイルされた関数を登録します。" -#: utils/misc/guc.c:1937 +#: utils/misc/guc.c:2012 msgid "Allow JIT compilation of tuple deforming." msgstr "タプル分解処理のJITコンパイルを許可します。" -#: utils/misc/guc.c:1948 +#: utils/misc/guc.c:2023 msgid "Whether to continue running after a failure to sync data files." msgstr "データファイルの同期失敗の後に処理を継続するかどうか。" -#: utils/misc/guc.c:1966 +#: utils/misc/guc.c:2032 +msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." +msgstr "永続レプリケーションスロットがない場合にWALレシーバが一時スロットを作成するかどうかを設定します。" + +#: utils/misc/guc.c:2050 msgid "Forces a switch to the next WAL file if a new file has not been started within N seconds." msgstr "N秒以内に新しいファイルが始まらない場合には、次のWALファイルへの切り替えを強制します。" -#: utils/misc/guc.c:1977 +#: utils/misc/guc.c:2061 msgid "Waits N seconds on connection startup after authentication." msgstr "認証後、接続開始までN秒待機します。" -#: utils/misc/guc.c:1978 utils/misc/guc.c:2524 +#: utils/misc/guc.c:2062 utils/misc/guc.c:2631 msgid "This allows attaching a debugger to the process." msgstr "これによりデバッガがプロセスに接続できます。" -#: utils/misc/guc.c:1987 +#: utils/misc/guc.c:2071 msgid "Sets the default statistics target." msgstr "デフォルトの統計情報収集目標を設定。" -#: utils/misc/guc.c:1988 +#: utils/misc/guc.c:2072 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "ALTER TABLE SET STATISTICS経由で列固有の目標値を持たないテーブル列についての統計情報収集目標を設定します。" -#: utils/misc/guc.c:1997 +#: utils/misc/guc.c:2081 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "副問い合わせを展開する上限のFROMリストのサイズを設定。" -#: utils/misc/guc.c:1999 +#: utils/misc/guc.c:2083 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "最終的なFROMリストがこの値より多くの要素を持たない時に、プランナは副問い合わせを上位問い合わせにマージします。" -#: utils/misc/guc.c:2010 +#: utils/misc/guc.c:2094 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "JOIN式を平坦化する上限のFROMリストのサイズを設定。" -#: utils/misc/guc.c:2012 +#: utils/misc/guc.c:2096 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "最終的にFROMリストの項目数がこの値を超えない時には常に、プランナは明示的なJOIN構文をFROM項目のリストに組み込みます。" -#: utils/misc/guc.c:2023 +#: utils/misc/guc.c:2107 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "この数を超えるとGEQOを使用するFROM項目数の閾値を設定。" -#: utils/misc/guc.c:2033 +#: utils/misc/guc.c:2117 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: effortは他のGEQOパラメータのデフォルトを設定するために使用されます。" -#: utils/misc/guc.c:2043 +#: utils/misc/guc.c:2127 msgid "GEQO: number of individuals in the population." msgstr "GEQO: 集団内の個体数。" -#: utils/misc/guc.c:2044 utils/misc/guc.c:2054 +#: utils/misc/guc.c:2128 utils/misc/guc.c:2138 msgid "Zero selects a suitable default value." msgstr "0は適切なデフォルト値を選択します。" -#: utils/misc/guc.c:2053 +#: utils/misc/guc.c:2137 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: アルゴリズムの反復回数です。" -#: utils/misc/guc.c:2065 +#: utils/misc/guc.c:2149 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "デッドロック状態があるかどうかを調べる前にロックを待つ時間を設定。" -#: utils/misc/guc.c:2076 +#: utils/misc/guc.c:2160 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "ホットスタンバイサーバがアーカイブされた WAL データを処理している場合は、問い合わせをキャンセルする前に遅延秒数の最大値を設定。" -#: utils/misc/guc.c:2087 +#: utils/misc/guc.c:2171 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "ホットスタンバイサーバがストリームの WAL データを処理している場合は、問い合わせをキャンセルする前に遅延秒数の最大値を設定。" -#: utils/misc/guc.c:2098 +#: utils/misc/guc.c:2182 msgid "Sets the minimum delay for applying changes during recovery." msgstr "リカバリ中の変更の適用の最小遅延時間を設定します。" -#: utils/misc/guc.c:2109 +#: utils/misc/guc.c:2193 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "WAL受信プロセスが送出側サーバへ行う状況報告の最大間隔を設定。" -#: utils/misc/guc.c:2120 +#: utils/misc/guc.c:2204 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "送出側サーバからのデータ受信を待機する最長時間を設定。" -#: utils/misc/guc.c:2131 +#: utils/misc/guc.c:2215 msgid "Sets the maximum number of concurrent connections." msgstr "同時接続数の最大値を設定。" -#: utils/misc/guc.c:2142 +#: utils/misc/guc.c:2226 msgid "Sets the number of connection slots reserved for superusers." msgstr "スーパユーザによる接続用に予約される接続スロットの数を設定。" -#: utils/misc/guc.c:2156 +#: utils/misc/guc.c:2236 +msgid "Amount of dynamic shared memory reserved at startup." +msgstr "起動時に予約される動的共有メモリの量。" + +#: utils/misc/guc.c:2251 msgid "Sets the number of shared memory buffers used by the server." msgstr "サーバで使用される共有メモリのバッファ数を設定。" -#: utils/misc/guc.c:2167 +#: utils/misc/guc.c:2262 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "各セッションで使用される一時バッファの最大数を設定。" -#: utils/misc/guc.c:2178 +#: utils/misc/guc.c:2273 msgid "Sets the TCP port the server listens on." msgstr "サーバが接続を監視するTCPポートを設定。" -#: utils/misc/guc.c:2188 +#: utils/misc/guc.c:2283 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Unixドメインソケットのアクセス権限を設定。" -#: utils/misc/guc.c:2189 +#: utils/misc/guc.c:2284 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Unixドメインソケットは、通常のUnixファイルシステム権限の設定を使います。 このパラメータ値は chmod と umask システムコールが受け付ける数値のモード指定を想定しています(慣習的な8進数書式を使うためには、0(ゼロ)で始めなくてはなりません)。 " -#: utils/misc/guc.c:2203 +#: utils/misc/guc.c:2298 msgid "Sets the file permissions for log files." msgstr "ログファイルのパーミッションを設定。" -#: utils/misc/guc.c:2204 +#: utils/misc/guc.c:2299 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "このパタメータ値は chmod や umask システムコールで使えるような数値モード指定であることが想定されます(慣習的な記法である8進数書式を使う場合は先頭に0(ゼロ) をつけてください)。 " -#: utils/misc/guc.c:2218 +#: utils/misc/guc.c:2313 msgid "Mode of the data directory." msgstr "データディレクトリのパーミッション値。" -#: utils/misc/guc.c:2219 +#: utils/misc/guc.c:2314 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "このパタメータ値は chmod や umask システムコールが受け付ける数値形式のモード指定です(慣習的な8進形式を使う場合は先頭に0(ゼロ) をつけてください)。 " -#: utils/misc/guc.c:2232 +#: utils/misc/guc.c:2327 msgid "Sets the maximum memory to be used for query workspaces." msgstr "問い合わせの作業用空間として使用されるメモリの最大値を設定。" -#: utils/misc/guc.c:2233 +#: utils/misc/guc.c:2328 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "内部ソート操作とハッシュテーブルで使われるメモリの量がこの量に達した時に一時ディスクファイルへの切替えを行います。" -#: utils/misc/guc.c:2245 +#: utils/misc/guc.c:2340 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "保守作業で使用される最大メモリ量を設定。" -#: utils/misc/guc.c:2246 +#: utils/misc/guc.c:2341 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "VACUUMやCREATE INDEXなどの作業が含まれます。" -#: utils/misc/guc.c:2261 +#: utils/misc/guc.c:2351 +msgid "Sets the maximum memory to be used for logical decoding." +msgstr "論理デコーディングで使用するメモリ量の上限を設定します。" + +#: utils/misc/guc.c:2352 +msgid "This much memory can be used by each internal reorder buffer before spilling to disk." +msgstr "個々の内部リオーダバッファはディスクに書き出す前にこれだけの量のメモリを使用することができます。" + +#: utils/misc/guc.c:2368 msgid "Sets the maximum stack depth, in kilobytes." msgstr "スタック長の最大値をキロバイト単位で設定。" -#: utils/misc/guc.c:2272 +#: utils/misc/guc.c:2379 msgid "Limits the total size of all temporary files used by each process." msgstr "各プロセスで使用される全ての一時ファイルの合計サイズを制限します。" -#: utils/misc/guc.c:2273 +#: utils/misc/guc.c:2380 msgid "-1 means no limit." msgstr "-1は無制限を意味します。" -#: utils/misc/guc.c:2283 +#: utils/misc/guc.c:2390 msgid "Vacuum cost for a page found in the buffer cache." msgstr "バッファキャッシュにある1つのページをVACUUM処理する際のコスト。" -#: utils/misc/guc.c:2293 +#: utils/misc/guc.c:2400 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "バッファキャッシュにない1つのページをVACUUM処理する際のコスト。" -#: utils/misc/guc.c:2303 +#: utils/misc/guc.c:2410 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "VACUUM処理が1つのページをダーティにした際に課すコスト。" -#: utils/misc/guc.c:2313 +#: utils/misc/guc.c:2420 msgid "Vacuum cost amount available before napping." msgstr "VACUUM処理を一時休止させるまでに使用できるコスト。" -#: utils/misc/guc.c:2323 +#: utils/misc/guc.c:2430 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "自動VACUUM用のVACUUM処理を一時休止させるまでに使用できるコスト。" -#: utils/misc/guc.c:2333 +#: utils/misc/guc.c:2440 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "各サーバプロセスで同時にオープンできるファイルの最大数を設定。" -#: utils/misc/guc.c:2346 +#: utils/misc/guc.c:2453 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "同時に準備状態にできるトランザクションの最大数を設定。" -#: utils/misc/guc.c:2357 +#: utils/misc/guc.c:2464 msgid "Sets the minimum OID of tables for tracking locks." msgstr "ロックの追跡を行うテーブルの最小のOIDを設定。" -#: utils/misc/guc.c:2358 +#: utils/misc/guc.c:2465 msgid "Is used to avoid output on system tables." msgstr "システムテーブルに関するの出力を避けるために使います。" -#: utils/misc/guc.c:2367 +#: utils/misc/guc.c:2474 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "無条件でロックの追跡を行うテーブルのOIDを設定。" -#: utils/misc/guc.c:2379 +#: utils/misc/guc.c:2486 msgid "Sets the maximum allowed duration of any statement." msgstr "あらゆる文に対して実行時間として許容する上限値を設定。" -#: utils/misc/guc.c:2380 utils/misc/guc.c:2391 utils/misc/guc.c:2402 +#: utils/misc/guc.c:2487 utils/misc/guc.c:2498 utils/misc/guc.c:2509 msgid "A value of 0 turns off the timeout." msgstr "0でこのタイムアウトは無効になります。 " -#: utils/misc/guc.c:2390 +#: utils/misc/guc.c:2497 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "ロックの待機の最大許容時間を設定。" -#: utils/misc/guc.c:2401 +#: utils/misc/guc.c:2508 msgid "Sets the maximum allowed duration of any idling transaction." msgstr "あらゆるアイドル状態のトランザクションの持続時間として許容する上限値を設定。" -#: utils/misc/guc.c:2412 +#: utils/misc/guc.c:2519 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "VACUUM にテーブル行の凍結をさせる最小のトランザクションID差分。" -#: utils/misc/guc.c:2422 +#: utils/misc/guc.c:2529 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "行の凍結のためのテーブル全体スキャンを強制させる時のトランザクションID差分。" -#: utils/misc/guc.c:2432 +#: utils/misc/guc.c:2539 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "テーブル行でのマルチトランザクションIDの凍結を強制する最小のマルチトランザクション差分。" -#: utils/misc/guc.c:2442 +#: utils/misc/guc.c:2549 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "行の凍結のためにテーブル全体スキャンを強制する時点のマルチトランザクション差分。" -#: utils/misc/guc.c:2452 +#: utils/misc/guc.c:2559 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "設定していれば、VACUUMやHOTのクリーンアップを遅延させるトランザクション数。" -#: utils/misc/guc.c:2465 +#: utils/misc/guc.c:2572 msgid "Sets the maximum number of locks per transaction." msgstr "1トランザクション当たりのロック数の上限を設定。" -#: utils/misc/guc.c:2466 +#: utils/misc/guc.c:2573 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "共有ロックテーブルの大きさは、最大max_locks_per_transaction * max_connections個の個別のオブジェクトがいかなる時点でもロックされる必要があるという仮定の下に決定されます。" -#: utils/misc/guc.c:2477 +#: utils/misc/guc.c:2584 msgid "Sets the maximum number of predicate locks per transaction." msgstr "1トランザクション当たりの述語ロック数の上限を設定。" -#: utils/misc/guc.c:2478 +#: utils/misc/guc.c:2585 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "共有ロックテーブルの大きさは、最大 max_pred_locks_per_transaction * max_connections 個の個別のオブジェクトがいかなる時点でもロックされる必要があるという仮定の下に決められます。" -#: utils/misc/guc.c:2489 +#: utils/misc/guc.c:2596 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "1リレーション当たりで述語ロックされるページとタプルの数の上限値を設定。" -#: utils/misc/guc.c:2490 +#: utils/misc/guc.c:2597 msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." msgstr "あるコネクションで、同じリレーション内でロックされるページ数とタプル数の合計がこの値を超えたときには、これらのロックはリレーションレベルのロックに置き換えられます。" -#: utils/misc/guc.c:2500 +#: utils/misc/guc.c:2607 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "1ページあたりで述語ロックされるタプル数の上限値を設定。" -#: utils/misc/guc.c:2501 +#: utils/misc/guc.c:2608 msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." msgstr "あるコネクションで 、同じページ上でロックされるタプルの数がこの値を超えたときには、これらのロックはページレベルのロックに置き換えられます。" -#: utils/misc/guc.c:2511 +#: utils/misc/guc.c:2618 msgid "Sets the maximum allowed time to complete client authentication." msgstr "クライアント認証の完了までの最大許容時間を設定。" -#: utils/misc/guc.c:2523 +#: utils/misc/guc.c:2630 msgid "Waits N seconds on connection startup before authentication." msgstr "接続開始の際、認証前にN秒待機します。" -#: utils/misc/guc.c:2534 -msgid "Sets the number of WAL files held for standby servers." -msgstr "スタンバイサーバのために保持するWALファイル数を設定。" +#: utils/misc/guc.c:2641 +msgid "Sets the size of WAL files held for standby servers." +msgstr "スタンバイサーバのために確保するWALの量を設定します。" -#: utils/misc/guc.c:2544 +#: utils/misc/guc.c:2652 msgid "Sets the minimum size to shrink the WAL to." msgstr "WALを縮小させる際の最小のサイズを設定。" -#: utils/misc/guc.c:2556 +#: utils/misc/guc.c:2664 msgid "Sets the WAL size that triggers a checkpoint." msgstr "チェックポイントの契機となるWALのサイズを指定。" -#: utils/misc/guc.c:2568 +#: utils/misc/guc.c:2676 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "自動WALチェックポイントの最大間隔を設定。" -#: utils/misc/guc.c:2579 +#: utils/misc/guc.c:2687 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "チェックポイントセグメントがこの値よりも短い時間で使い切られた時に警告します。" -#: utils/misc/guc.c:2581 +#: utils/misc/guc.c:2689 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "チェックポイントセグメントファイルを使い切ることが原因で起きるチェックポイントが、ここで指定した秒数よりも頻繁に発生する場合、サーバログにメッセージを書き出します。 デフォルトは30秒です。 ゼロはこの警告を無効にします。 " -#: utils/misc/guc.c:2593 utils/misc/guc.c:2750 utils/misc/guc.c:2779 +#: utils/misc/guc.c:2701 utils/misc/guc.c:2917 utils/misc/guc.c:2964 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "すでに実行された書き込みがディスクに書き出されるまでのページ数。" -#: utils/misc/guc.c:2604 +#: utils/misc/guc.c:2712 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "共有メモリ内に割り当てられた、WALデータ用のディスクページバッファ数を設定。" -#: utils/misc/guc.c:2615 +#: utils/misc/guc.c:2723 msgid "Time between WAL flushes performed in the WAL writer." msgstr "WALライタで実行する書き出しの時間間隔。" -#: utils/misc/guc.c:2626 +#: utils/misc/guc.c:2734 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "書き出しが実行されるまでにWALライタで出力するWALの量。" -#: utils/misc/guc.c:2637 +#: utils/misc/guc.c:2745 +msgid "Size of new file to fsync instead of writing WAL." +msgstr "新しいファイルでWALを出力する代わりにfsyncするサイズ。" + +#: utils/misc/guc.c:2756 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "WAL送信プロセスの最大同時実行数を設定。" -#: utils/misc/guc.c:2648 +#: utils/misc/guc.c:2767 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "同時に定義できるレプリケーションスロットの数の最大値を設定。" -#: utils/misc/guc.c:2658 +#: utils/misc/guc.c:2777 +msgid "Sets the maximum WAL size that can be reserved by replication slots." +msgstr "レプリケーションスロットで確保できるWALの量の最大値を設定します。" + +#: utils/misc/guc.c:2778 +msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." +msgstr "ディスク内のWALがこの量に達すると、レプリケーションスロットは停止とマークされ、セグメントは削除あるいは再利用のために解放されます。" + +#: utils/misc/guc.c:2790 msgid "Sets the maximum time to wait for WAL replication." msgstr "WALレプリケーションを待つ時間の最大値を設定。" -#: utils/misc/guc.c:2669 +#: utils/misc/guc.c:2801 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "トランザクションのコミットからWALのディスク書き出しまでの遅延時間をマイクロ秒単位で設定。" -#: utils/misc/guc.c:2681 +#: utils/misc/guc.c:2813 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "commit_delay の実行の契機となる、同時に開いているトランザクション数の最小値を設定。" -#: utils/misc/guc.c:2692 +#: utils/misc/guc.c:2824 msgid "Sets the number of digits displayed for floating-point values." msgstr "浮動小数点値の表示桁数を設定。" -#: utils/misc/guc.c:2693 +#: utils/misc/guc.c:2825 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." msgstr "このパラメータは、real、double precision、幾何データ型に影響します。ゼロまたは負のパラメータ値は標準的な桁数(FLT_DIG もしくは DBL_DIGどちらか適切な方)に追加されます。正の値は直接出力形式を指定します。" -#: utils/misc/guc.c:2705 -msgid "Sets the minimum execution time above which statements will be logged." -msgstr "文のログを記録する最小の実行時間を設定。" +#: utils/misc/guc.c:2837 +msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." +msgstr "文がログに出力される最小の実行時間を設定します。サンプリングについてはlog_statement_sample_rateで決定されます。" + +#: utils/misc/guc.c:2840 +msgid "Zero log a sample of all queries. -1 turns this feature off." +msgstr "ゼロにすると全ての問い合わせからサンプリングして記録します。-1はこの機能を無効にします。" -#: utils/misc/guc.c:2707 -#, fuzzy -#| msgid "Zero prints all queries, subject to log_statement_sample_rate. -1 turns this feature off." +#: utils/misc/guc.c:2850 +msgid "Sets the minimum execution time above which all statements will be logged." +msgstr "全ての文のログを記録する最小の実行時間を設定。" + +#: utils/misc/guc.c:2852 msgid "Zero prints all queries. -1 turns this feature off." -msgstr "ゼロにすると全ての問い合わせを log_statement_sample_rate に従い出力します。-1はこの機能を無効にします。" +msgstr "ゼロにすると全ての問い合わせを出力します。-1はこの機能を無効にします。" -#: utils/misc/guc.c:2717 +#: utils/misc/guc.c:2862 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "自動VACUUMの活動のログを記録する最小の実行時間を設定。" -#: utils/misc/guc.c:2719 +#: utils/misc/guc.c:2864 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "ゼロはすべての活動を出力します。-1は自動VACUUMのログ記録を無効にします。" -#: utils/misc/guc.c:2729 +#: utils/misc/guc.c:2874 +msgid "When logging statements, limit logged parameter values to first N bytes." +msgstr "ステートメントをログに出力する際に、記録するパラメータの値を最初のNバイトに制限します。" + +#: utils/misc/guc.c:2875 utils/misc/guc.c:2886 +msgid "-1 to print values in full." +msgstr "-1 で値を全て出力します。" + +#: utils/misc/guc.c:2885 +msgid "When reporting an error, limit logged parameter values to first N bytes." +msgstr "エラー報告の際に、記録するパラメータの値を最初のNバイトに制限します。" + +#: utils/misc/guc.c:2896 msgid "Background writer sleep time between rounds." msgstr "バックグランドライタの周期毎の待機時間" -#: utils/misc/guc.c:2740 +#: utils/misc/guc.c:2907 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "バックグランドライタが1周期で書き出すLRUページ数の最大値。" -#: utils/misc/guc.c:2763 +#: utils/misc/guc.c:2930 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "ディスクサブシステムが効率的に処理可能な同時並行リクエスト数" -#: utils/misc/guc.c:2764 +#: utils/misc/guc.c:2931 msgid "For RAID arrays, this should be approximately the number of drive spindles in the array." msgstr "RAIDアレイでは、これはおおむねアレイ中のドライブのスピンドル数になります。" -#: utils/misc/guc.c:2792 +#: utils/misc/guc.c:2948 +msgid "A variant of effective_io_concurrency that is used for maintenance work." +msgstr " effective_io_concurrency の保守作業に使用される変種。" + +#: utils/misc/guc.c:2977 msgid "Maximum number of concurrent worker processes." msgstr "同時に実行されるワーカプロセス数の最大値です。" -#: utils/misc/guc.c:2804 +#: utils/misc/guc.c:2989 msgid "Maximum number of logical replication worker processes." msgstr "レプリケーションワーカプロセス数の最大値です。" -#: utils/misc/guc.c:2816 +#: utils/misc/guc.c:3001 msgid "Maximum number of table synchronization workers per subscription." msgstr "サブスクリプション毎のテーブル同期ワーカ数の最大値です。" -#: utils/misc/guc.c:2826 +#: utils/misc/guc.c:3011 msgid "Automatic log file rotation will occur after N minutes." msgstr "ログファイルの自動ローテーションはN秒経過の際に行われます。" -#: utils/misc/guc.c:2837 +#: utils/misc/guc.c:3022 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "ログファイルの自動ローテーションはNキロバイト書き込んだ際に行われます。" -#: utils/misc/guc.c:2848 +#: utils/misc/guc.c:3033 msgid "Shows the maximum number of function arguments." msgstr "関数の引数の最大数を示します。" -#: utils/misc/guc.c:2859 +#: utils/misc/guc.c:3044 msgid "Shows the maximum number of index keys." msgstr "インデックスキーの最大数を示します。" -#: utils/misc/guc.c:2870 +#: utils/misc/guc.c:3055 msgid "Shows the maximum identifier length." msgstr "識別子の最大長を示します。" -#: utils/misc/guc.c:2881 +#: utils/misc/guc.c:3066 msgid "Shows the size of a disk block." msgstr "ディスクブロックサイズを示します。" -#: utils/misc/guc.c:2892 +#: utils/misc/guc.c:3077 msgid "Shows the number of pages per disk file." msgstr "ディスクファイルごとのページ数を表示します。" -#: utils/misc/guc.c:2903 +#: utils/misc/guc.c:3088 msgid "Shows the block size in the write ahead log." msgstr "先行書き込みログ(WAL)におけるブロックサイズを表示します" -#: utils/misc/guc.c:2914 +#: utils/misc/guc.c:3099 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "WALの取り出しの失敗後に再試行する回数を設定。" -#: utils/misc/guc.c:2926 +#: utils/misc/guc.c:3111 msgid "Shows the size of write ahead log segments." msgstr "先行書き込みログ(WAL)セグメントのサイズを表示します" -#: utils/misc/guc.c:2939 +#: utils/misc/guc.c:3124 msgid "Time to sleep between autovacuum runs." msgstr "自動VACUUMの実行開始間隔。" -#: utils/misc/guc.c:2949 +#: utils/misc/guc.c:3134 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "VACUUMを行うまでの、タプルを更新または削除した回数の最小値。" -#: utils/misc/guc.c:2958 +#: utils/misc/guc.c:3143 +msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums" +msgstr "VACUUMが実行されるまでの、タプル挿入回数の最小値、または-1で挿入VACUUMを無効化します" + +#: utils/misc/guc.c:3152 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "ANALYZEが実行されるまでの、タプルを挿入、更新、削除した回数の最小値。" -#: utils/misc/guc.c:2968 +#: utils/misc/guc.c:3162 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "トランザクションID周回を防ぐためにテーブルを自動VACUUMする時点のトランザクションID差分。" -#: utils/misc/guc.c:2979 +#: utils/misc/guc.c:3173 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "マルチトランザクション周回を防止するためにテーブルを自動VACUUMする、マルチトランザクション差分。" -#: utils/misc/guc.c:2989 +#: utils/misc/guc.c:3183 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "自動VACUUMのワーカプロセスの最大同時実行数を設定。" -#: utils/misc/guc.c:2999 +#: utils/misc/guc.c:3193 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "ひとつの保守作業に割り当てる並列処理プロセスの数の最大値を設定。" -#: utils/misc/guc.c:3009 +#: utils/misc/guc.c:3203 msgid "Sets the maximum number of parallel processes per executor node." msgstr "エグゼキュータノードあたりの並列処理プロセスの数の最大値を設定。" -#: utils/misc/guc.c:3020 +#: utils/misc/guc.c:3214 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "同時に活動可能な並列処理ワーカの数の最大値を設定。" -#: utils/misc/guc.c:3031 +#: utils/misc/guc.c:3225 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "自動VACUUMプロセスで使用するメモリ量の最大値を設定。" -#: utils/misc/guc.c:3042 +#: utils/misc/guc.c:3236 msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." msgstr "スナップショット取得後、更新されたページが読み取れなくなるまでの時間。" -#: utils/misc/guc.c:3043 +#: utils/misc/guc.c:3237 msgid "A value of -1 disables this feature." msgstr "-1でこの機能を無効にします。" -#: utils/misc/guc.c:3053 +#: utils/misc/guc.c:3247 msgid "Time between issuing TCP keepalives." msgstr "TCPキープアライブを発行する時間間隔。" -#: utils/misc/guc.c:3054 utils/misc/guc.c:3065 utils/misc/guc.c:3189 +#: utils/misc/guc.c:3248 utils/misc/guc.c:3259 utils/misc/guc.c:3383 msgid "A value of 0 uses the system default." msgstr "0でシステムのデフォルトを使用します。" -#: utils/misc/guc.c:3064 +#: utils/misc/guc.c:3258 msgid "Time between TCP keepalive retransmits." msgstr "TCPキープアライブの再送信の時間間隔。" -#: utils/misc/guc.c:3075 +#: utils/misc/guc.c:3269 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "SSLの再ネゴシエーションは今後サポートされません; 0のみに設定可能です。" -#: utils/misc/guc.c:3086 +#: utils/misc/guc.c:3280 msgid "Maximum number of TCP keepalive retransmits." msgstr "TCPキープアライブの再送信回数の最大値です。" -#: utils/misc/guc.c:3087 +#: utils/misc/guc.c:3281 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "これは、接続が失われると判断するまでに再送信される、ひとつづきのキープアライブの数を制御します。0の時はでシステムのデフォルトを使用します。" -#: utils/misc/guc.c:3098 +#: utils/misc/guc.c:3292 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "GINによる正確な検索に対して許容する結果数の最大値を設定。" -#: utils/misc/guc.c:3109 +#: utils/misc/guc.c:3303 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "プランナが想定するデータキャッシュサイズを設定。" -#: utils/misc/guc.c:3110 +#: utils/misc/guc.c:3304 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "つまり、PostgreSQLのデータファイルで使用されるキャッシュ(カーネルおよび共有バッファ)の量です。これは通常8KBのディスクページを単位とします。" -#: utils/misc/guc.c:3121 +#: utils/misc/guc.c:3315 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "並列スキャンを検討するテーブルデータの量の最小値を設定。" -#: utils/misc/guc.c:3122 +#: utils/misc/guc.c:3316 msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." msgstr "この限度に到達できないような少ないテーブルページ数しか読み取らないとプランナが見積もった場合、並列スキャンは検討されません。" -#: utils/misc/guc.c:3132 +#: utils/misc/guc.c:3326 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "並列スキャンを検討するインデックスデータの量の最小値を設定。" -#: utils/misc/guc.c:3133 +#: utils/misc/guc.c:3327 msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." msgstr "この限度に到達できないような少ないページ数しか読み取らないとプランナが見積もった場合、並列スキャンは検討されません。" -#: utils/misc/guc.c:3144 +#: utils/misc/guc.c:3338 msgid "Shows the server version as an integer." msgstr "サーバのバージョンを整数値で表示します。" -#: utils/misc/guc.c:3155 +#: utils/misc/guc.c:3349 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "このキロバイト数よりも大きな一時ファイルの使用をログに記録します。" -#: utils/misc/guc.c:3156 +#: utils/misc/guc.c:3350 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "ゼロにすると、全てのファイルを記録します。デフォルトは-1です(この機能を無効にします)。" -#: utils/misc/guc.c:3166 +#: utils/misc/guc.c:3360 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "pg_stat_activity.queryのために予約するサイズをバイト単位で設定。" -#: utils/misc/guc.c:3177 +#: utils/misc/guc.c:3371 msgid "Sets the maximum size of the pending list for GIN index." msgstr "GINインデックスの保留リストの最大サイズを設定。" -#: utils/misc/guc.c:3188 +#: utils/misc/guc.c:3382 msgid "TCP user timeout." msgstr "TCPユーザタイムアウト。" -#: utils/misc/guc.c:3208 +#: utils/misc/guc.c:3393 +msgid "The size of huge page that should be requested." +msgstr "要求が見込まれるヒュージページのサイズ。" + +#: utils/misc/guc.c:3413 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "ひと続きに読み込むディスクページについてプランナで使用する見積もりコストを設定。" -#: utils/misc/guc.c:3219 +#: utils/misc/guc.c:3424 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "ひと続きでは読み込めないディスクページについてプランナで使用する見積もりコストを設定。" -#: utils/misc/guc.c:3230 +#: utils/misc/guc.c:3435 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "一つのタプル(行)の処理についてプランナで使用する見積もりコストを設定。" -#: utils/misc/guc.c:3241 +#: utils/misc/guc.c:3446 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "インデックススキャンにおける一つのインデックスエントリの処理についてプランナで使用する見積もりコストを設定。 " -#: utils/misc/guc.c:3252 +#: utils/misc/guc.c:3457 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "一つの演算子または関数の処理についてプランナで使用する見積もりコストを設定。" -#: utils/misc/guc.c:3263 -msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." -msgstr "並列処理ワーカからマスタバックエンドへの一つのタプル(行)の受け渡しについてプランナが使用する見積もりコストを設定。" +#: utils/misc/guc.c:3468 +msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to leader backend." +msgstr "並列処理ワーカからリーダーバックエンドへの一つのタプル(行)の受け渡しについてプランナが使用する見積もりコストを設定。" -#: utils/misc/guc.c:3274 +#: utils/misc/guc.c:3479 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "並列問い合わせ実行のためのワーカプロセスの起動についてプランナで使用する見積もりコストを設定。" -#: utils/misc/guc.c:3286 +#: utils/misc/guc.c:3491 msgid "Perform JIT compilation if query is more expensive." msgstr "問い合わせがこの値より高コストであればJITコンパイルを実行します。" -#: utils/misc/guc.c:3287 +#: utils/misc/guc.c:3492 msgid "-1 disables JIT compilation." msgstr "-1 でJITコンパイルを禁止します。" -#: utils/misc/guc.c:3297 +#: utils/misc/guc.c:3502 msgid "Optimize JITed functions if query is more expensive." msgstr "問い合わせがこの値より高コストであればJITコンパイルされた関数を最適化します。" -#: utils/misc/guc.c:3298 +#: utils/misc/guc.c:3503 msgid "-1 disables optimization." msgstr "-1で最適化を行わなくなります。" -#: utils/misc/guc.c:3308 +#: utils/misc/guc.c:3513 msgid "Perform JIT inlining if query is more expensive." msgstr "問い合わせがこの値より高コストであればJITコンパイルされた関数をインライン化します。" -#: utils/misc/guc.c:3309 +#: utils/misc/guc.c:3514 msgid "-1 disables inlining." msgstr "-1 でインライン化を禁止します。" -#: utils/misc/guc.c:3319 +#: utils/misc/guc.c:3524 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "カーソルから取り出される行数の全行に対する割合についてプランナで使用する値を設定。" -#: utils/misc/guc.c:3331 +#: utils/misc/guc.c:3536 msgid "GEQO: selective pressure within the population." msgstr "GEQO: 集合内の選択圧力。" -#: utils/misc/guc.c:3342 +#: utils/misc/guc.c:3547 msgid "GEQO: seed for random path selection." msgstr "GEQO: ランダムパス選択用のシード" -#: utils/misc/guc.c:3353 +#: utils/misc/guc.c:3558 +msgid "Multiple of work_mem to use for hash tables." +msgstr "ハッシュテーブルで使用するwork_memの倍率。" + +#: utils/misc/guc.c:3569 msgid "Multiple of the average buffer usage to free per round." msgstr "周期ごとに解放するバッファ数の平均バッファ使用量に対する倍数" -#: utils/misc/guc.c:3363 +#: utils/misc/guc.c:3579 msgid "Sets the seed for random-number generation." msgstr "乱数生成用のシードを設定。" -#: utils/misc/guc.c:3374 +#: utils/misc/guc.c:3590 msgid "Vacuum cost delay in milliseconds." msgstr "ミリ秒単位のコストベースのVACUUM処理の遅延時間です。" -#: utils/misc/guc.c:3385 +#: utils/misc/guc.c:3601 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "自動VACUUM用のミリ秒単位のコストベースのVACUUM処理の遅延時間です。" -#: utils/misc/guc.c:3396 +#: utils/misc/guc.c:3612 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "VACUUMが実行されるまでのタプルの更新または削除回数のreltuplesに対する割合。" -#: utils/misc/guc.c:3405 +#: utils/misc/guc.c:3622 +msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." +msgstr "VACUUMが実行されるまでのタプルの挿入行数のreltuplesに対する割合。" + +#: utils/misc/guc.c:3632 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "ANALYZEが実行されるまでのタプルの更新または削除回数のreltuplesに対する割合。" -#: utils/misc/guc.c:3415 +#: utils/misc/guc.c:3642 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "チェックポイント中にダーティバッファの書き出しに使う時間のチェックポイント間隔に対する割合。" -#: utils/misc/guc.c:3425 +#: utils/misc/guc.c:3652 msgid "Number of tuple inserts prior to index cleanup as a fraction of reltuples." msgstr "インデックスクリーンアップが実行されるまでのインデックスタプルの挿入行数のreltuplesに対する割合。" -#: utils/misc/guc.c:3435 +#: utils/misc/guc.c:3662 +msgid "Fraction of statements exceeding log_min_duration_sample to be logged." +msgstr "log_min_duration_sampleを超過した文のうちログ出力を行う割合。" + +#: utils/misc/guc.c:3663 +msgid "Use a value between 0.0 (never log) and 1.0 (always log)." +msgstr "0.0(ログ出力しない)から1.0(すべてログ出力する)の間の値を指定してください。" + +#: utils/misc/guc.c:3672 msgid "Set the fraction of transactions to log for new transactions." msgstr "新規トランザクションのログを取得するトランザクションの割合を設定。" -#: utils/misc/guc.c:3436 +#: utils/misc/guc.c:3673 msgid "Logs all statements from a fraction of transactions. Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgstr "一部のトランザクションの全ての文をログ出力します。0.0 (ログ出力しない)から 1.0 (全てのトランザクションの全ての文をログ出力する)の間の値を指定してください。" # hoge -#: utils/misc/guc.c:3456 +#: utils/misc/guc.c:3693 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "WALファイルの保管のために呼び出されるシェルスクリプトを設定。" # hoge -#: utils/misc/guc.c:3466 +#: utils/misc/guc.c:3703 msgid "Sets the shell command that will retrieve an archived WAL file." msgstr "アーカイブされたWALファイルを取り出すシェルコマンドを設定。" # hoge -#: utils/misc/guc.c:3476 +#: utils/misc/guc.c:3713 msgid "Sets the shell command that will be executed at every restart point." msgstr "リスタートポイントの時に実行するシェルコマンドを設定。" # hoge -#: utils/misc/guc.c:3486 +#: utils/misc/guc.c:3723 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "リカバリ終了時に1度だけ実行されるシェルコマンドを設定。" -#: utils/misc/guc.c:3496 -#, fuzzy -#| msgid "Specifies the timeline to recovery into." +#: utils/misc/guc.c:3733 msgid "Specifies the timeline to recover into." -msgstr "リカバリの目標タイムラインを指定してください。" +msgstr "リカバリの目標タイムラインを指定します。" -#: utils/misc/guc.c:3506 -#, fuzzy -#| msgid "Set to 'immediate' to end recovery as soon as a consistent state is reached." +#: utils/misc/guc.c:3743 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." -msgstr "'immediate' を指定すると一貫性が確保できた時点でリカバリを終了します。" +msgstr "\"immediate\"を指定すると一貫性が確保できた時点でリカバリを終了します。" -#: utils/misc/guc.c:3515 +#: utils/misc/guc.c:3752 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "リカバリを指定したトランザクションIDまで進めます。" -#: utils/misc/guc.c:3524 +#: utils/misc/guc.c:3761 msgid "Sets the time stamp up to which recovery will proceed." msgstr "リカバリを指定したタイムスタンプの時刻まで進めます。" -#: utils/misc/guc.c:3533 +#: utils/misc/guc.c:3770 msgid "Sets the named restore point up to which recovery will proceed." msgstr "リカバリを指定した名前のリストアポイントまで進めます。" -#: utils/misc/guc.c:3542 +#: utils/misc/guc.c:3779 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "リカバリを先行書き込みログの指定したLSNまで進めます。" -#: utils/misc/guc.c:3552 +#: utils/misc/guc.c:3789 msgid "Specifies a file name whose presence ends recovery in the standby." msgstr "作成することでスタンバイでのリカバリを終了させるファイルの名前を指定します。" -#: utils/misc/guc.c:3562 +#: utils/misc/guc.c:3799 msgid "Sets the connection string to be used to connect to the sending server." msgstr "送出側サーバへの接続に使用する接続文字列をしています。" -#: utils/misc/guc.c:3573 +#: utils/misc/guc.c:3810 msgid "Sets the name of the replication slot to use on the sending server." msgstr "送出サーバで使用するレプリケーションスロットの名前を設定。" -#: utils/misc/guc.c:3583 +#: utils/misc/guc.c:3820 msgid "Sets the client's character set encoding." msgstr "クライアントの文字集合の符号化方式を設定。" -#: utils/misc/guc.c:3594 +#: utils/misc/guc.c:3831 msgid "Controls information prefixed to each log line." msgstr "各ログ行の前に付ける情報を制御します。" -#: utils/misc/guc.c:3595 +#: utils/misc/guc.c:3832 msgid "If blank, no prefix is used." msgstr "もし空であればなにも付加しません。" -#: utils/misc/guc.c:3604 +#: utils/misc/guc.c:3841 msgid "Sets the time zone to use in log messages." msgstr "ログメッセージ使用するタイムゾーンを設定。" -#: utils/misc/guc.c:3614 +#: utils/misc/guc.c:3851 msgid "Sets the display format for date and time values." msgstr "日付時刻値の表示用書式を設定。" -#: utils/misc/guc.c:3615 +#: utils/misc/guc.c:3852 msgid "Also controls interpretation of ambiguous date inputs." msgstr "曖昧な日付の入力の解釈も制御します。" -#: utils/misc/guc.c:3626 +#: utils/misc/guc.c:3863 msgid "Sets the default table access method for new tables." msgstr "新規テーブルで使用されるデフォルトテーブルアクセスメソッドを設定。" -#: utils/misc/guc.c:3637 +#: utils/misc/guc.c:3874 msgid "Sets the default tablespace to create tables and indexes in." msgstr "テーブルとインデックスの作成先となるデフォルトのテーブル空間を設定。" -#: utils/misc/guc.c:3638 +#: utils/misc/guc.c:3875 msgid "An empty string selects the database's default tablespace." msgstr "空文字列はデータベースのデフォルトのテーブル空間を選択します。" -#: utils/misc/guc.c:3648 +#: utils/misc/guc.c:3885 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "一時テーブルとファイルのソートで使用されるテーブル空間を設定。" -#: utils/misc/guc.c:3659 +#: utils/misc/guc.c:3896 msgid "Sets the path for dynamically loadable modules." msgstr "動的ロード可能モジュールのパスを設定。" -#: utils/misc/guc.c:3660 +#: utils/misc/guc.c:3897 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "オープンする必要がある動的ロード可能なモジュールについて、指定されたファイル名にディレクトリ要素がない(つまり、名前にスラッシュが含まれない)場合、システムは指定されたファイルをこのパスから検索します。 " -#: utils/misc/guc.c:3673 +#: utils/misc/guc.c:3910 msgid "Sets the location of the Kerberos server key file." msgstr "Kerberosサーバキーファイルの場所を設定。" -#: utils/misc/guc.c:3684 +#: utils/misc/guc.c:3921 msgid "Sets the Bonjour service name." msgstr "Bonjour サービス名を設定。" -#: utils/misc/guc.c:3696 +#: utils/misc/guc.c:3933 msgid "Shows the collation order locale." msgstr "テキストデータのソート時に使用されるロケールを表示します。" -#: utils/misc/guc.c:3707 +#: utils/misc/guc.c:3944 msgid "Shows the character classification and case conversion locale." msgstr "文字クラス分類、大文字小文字変換を決定するロケールを表示します。" -#: utils/misc/guc.c:3718 +#: utils/misc/guc.c:3955 msgid "Sets the language in which messages are displayed." msgstr "表示用メッセージの言語を設定。" -#: utils/misc/guc.c:3728 +#: utils/misc/guc.c:3965 msgid "Sets the locale for formatting monetary amounts." msgstr "通貨書式で使用するロケールを設定。 " -#: utils/misc/guc.c:3738 +#: utils/misc/guc.c:3975 msgid "Sets the locale for formatting numbers." msgstr "数字の書式で使用するロケールを設定。" -#: utils/misc/guc.c:3748 +#: utils/misc/guc.c:3985 msgid "Sets the locale for formatting date and time values." msgstr "日付と時間の書式で使用するロケールを設定。" -#: utils/misc/guc.c:3758 +#: utils/misc/guc.c:3995 msgid "Lists shared libraries to preload into each backend." msgstr "各バックエンドに事前ロードする共有ライブラリを列挙します。" -#: utils/misc/guc.c:3769 +#: utils/misc/guc.c:4006 msgid "Lists shared libraries to preload into server." msgstr "サーバに事前ロードする共有ライブラリを列挙します。" -#: utils/misc/guc.c:3780 +#: utils/misc/guc.c:4017 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "各バックエンドに事前読み込みする非特権共有ライブラリを列挙します。" -#: utils/misc/guc.c:3791 +#: utils/misc/guc.c:4028 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "スキーマ部を含まない名前に対するスキーマの検索順を設定。" -#: utils/misc/guc.c:3803 +#: utils/misc/guc.c:4040 msgid "Sets the server (database) character set encoding." msgstr "サーバ(データベース)文字セット符号化方式を設定。" -#: utils/misc/guc.c:3815 +#: utils/misc/guc.c:4052 msgid "Shows the server version." msgstr "サーバのバージョンを表示します。" -#: utils/misc/guc.c:3827 +#: utils/misc/guc.c:4064 msgid "Sets the current role." msgstr "現在のロールを設定。" -#: utils/misc/guc.c:3839 +#: utils/misc/guc.c:4076 msgid "Sets the session user name." msgstr "セッションユーザ名を設定。" -#: utils/misc/guc.c:3850 +#: utils/misc/guc.c:4087 msgid "Sets the destination for server log output." msgstr "サーバログの出力先を設定。" -#: utils/misc/guc.c:3851 +#: utils/misc/guc.c:4088 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "有効な値は、プラットフォームに依存しますが、\"stderr\"、\"syslog\"、\"csvlog\"、\"eventlog\"の組み合わせです。" -#: utils/misc/guc.c:3862 +#: utils/misc/guc.c:4099 msgid "Sets the destination directory for log files." msgstr "ログファイルの格納ディレクトリを設定。" -#: utils/misc/guc.c:3863 +#: utils/misc/guc.c:4100 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "データディレクトリからの相対パスでも絶対パスでも指定できます" -#: utils/misc/guc.c:3873 +#: utils/misc/guc.c:4110 msgid "Sets the file name pattern for log files." msgstr "ログファイルのファイル名パターンを設定。" -#: utils/misc/guc.c:3884 +#: utils/misc/guc.c:4121 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "syslog内でPostgreSQLのメッセージを識別するために使用されるプログラム名を設定。" -#: utils/misc/guc.c:3895 +#: utils/misc/guc.c:4132 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "イベントログ内でPostgreSQLのメッセージを識別するために使用されるアプリケーション名を設定。" -#: utils/misc/guc.c:3906 +#: utils/misc/guc.c:4143 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "タイムスタンプの表示と解釈に使用するタイムゾーンを設定。" -#: utils/misc/guc.c:3916 +#: utils/misc/guc.c:4153 msgid "Selects a file of time zone abbreviations." msgstr "タイムゾーン省略形用のファイルを選択します。" -#: utils/misc/guc.c:3926 +#: utils/misc/guc.c:4163 msgid "Sets the owning group of the Unix-domain socket." msgstr "Unixドメインソケットを所有するグループを設定。" -#: utils/misc/guc.c:3927 +#: utils/misc/guc.c:4164 msgid "The owning user of the socket is always the user that starts the server." msgstr "ソケットを所有するユーザは常にサーバを開始したユーザです。" -#: utils/misc/guc.c:3937 +#: utils/misc/guc.c:4174 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Unixドメインソケットの作成先ディレクトリを設定。" -#: utils/misc/guc.c:3952 +#: utils/misc/guc.c:4189 msgid "Sets the host name or IP address(es) to listen to." msgstr "接続を監視するホスト名またはIPアドレスを設定。" -#: utils/misc/guc.c:3967 +#: utils/misc/guc.c:4204 msgid "Sets the server's data directory." msgstr "サーバのデータディレクトリを設定。" -#: utils/misc/guc.c:3978 +#: utils/misc/guc.c:4215 msgid "Sets the server's main configuration file." msgstr "サーバのメイン設定ファイルを設定。" -#: utils/misc/guc.c:3989 +#: utils/misc/guc.c:4226 msgid "Sets the server's \"hba\" configuration file." msgstr "サーバの\"hba\"設定ファイルを設定。" -#: utils/misc/guc.c:4000 +#: utils/misc/guc.c:4237 msgid "Sets the server's \"ident\" configuration file." msgstr "サーバの\"ident\"設定ファイルを設定。" -#: utils/misc/guc.c:4011 +#: utils/misc/guc.c:4248 msgid "Writes the postmaster PID to the specified file." msgstr "postmasterのPIDを指定したファイルに書き込みます。" -#: utils/misc/guc.c:4022 +#: utils/misc/guc.c:4259 msgid "Name of the SSL library." msgstr "SSLライブラリの名前。" -#: utils/misc/guc.c:4037 +#: utils/misc/guc.c:4274 msgid "Location of the SSL server certificate file." msgstr "SSLサーバ証明書ファイルの場所です" -#: utils/misc/guc.c:4047 +#: utils/misc/guc.c:4284 msgid "Location of the SSL server private key file." msgstr "SSLサーバ秘密キーファイルの場所です。" -#: utils/misc/guc.c:4057 +#: utils/misc/guc.c:4294 msgid "Location of the SSL certificate authority file." msgstr "SSL認証局ファイルの場所です" -#: utils/misc/guc.c:4067 +#: utils/misc/guc.c:4304 msgid "Location of the SSL certificate revocation list file." msgstr "SSL証明書失効リストファイルの場所です。" -#: utils/misc/guc.c:4077 +#: utils/misc/guc.c:4314 msgid "Writes temporary statistics files to the specified directory." msgstr "一時的な統計情報ファイルを指定したディレクトリに書き込みます。" -#: utils/misc/guc.c:4088 +#: utils/misc/guc.c:4325 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "同期スタンバイの数と同期スタンバイ候補の名前の一覧。" -#: utils/misc/guc.c:4099 +#: utils/misc/guc.c:4336 msgid "Sets default text search configuration." msgstr "デフォルトのテキスト検索設定を設定します。" -#: utils/misc/guc.c:4109 +#: utils/misc/guc.c:4346 msgid "Sets the list of allowed SSL ciphers." msgstr "SSL暗号として許されるリストを設定。" -#: utils/misc/guc.c:4124 +#: utils/misc/guc.c:4361 msgid "Sets the curve to use for ECDH." msgstr "ECDHで使用する曲線を設定。" -#: utils/misc/guc.c:4139 +#: utils/misc/guc.c:4376 msgid "Location of the SSL DH parameters file." msgstr "SSLのDHパラメータファイルの場所です。" -#: utils/misc/guc.c:4150 +#: utils/misc/guc.c:4387 msgid "Command to obtain passphrases for SSL." msgstr "SSLのパスフレーズを取得するコマンド。" -#: utils/misc/guc.c:4160 +#: utils/misc/guc.c:4398 msgid "Sets the application name to be reported in statistics and logs." msgstr "統計やログで報告されるアプリケーション名を設定。" -#: utils/misc/guc.c:4171 +#: utils/misc/guc.c:4409 msgid "Sets the name of the cluster, which is included in the process title." msgstr "プロセスのタイトルに含まれるクラスタ名を指定。" -#: utils/misc/guc.c:4182 +#: utils/misc/guc.c:4420 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "WALの整合性チェックを行う対象とするリソースマネージャを設定。" -#: utils/misc/guc.c:4183 +#: utils/misc/guc.c:4421 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "全ページイメージが全てのデータブロックに対して記録され、WAL再生の結果とクロスチェックされます。" -#: utils/misc/guc.c:4193 +#: utils/misc/guc.c:4431 msgid "JIT provider to use." msgstr "使用するJITプロバイダ。" -#: utils/misc/guc.c:4213 +#: utils/misc/guc.c:4442 +msgid "Log backtrace for errors in these functions." +msgstr "これらの関数でエラーが起きた場合にはバックトレースをログに出力します。" + +#: utils/misc/guc.c:4462 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "文字列リテラルで\"\\'\"が許可されるかどうかを設定。" -#: utils/misc/guc.c:4223 +#: utils/misc/guc.c:4472 msgid "Sets the output format for bytea." msgstr "bytea の出力フォーマットを設定。" -#: utils/misc/guc.c:4233 +#: utils/misc/guc.c:4482 msgid "Sets the message levels that are sent to the client." msgstr "クライアントに送信される最小のメッセージレベルを設定。" -#: utils/misc/guc.c:4234 utils/misc/guc.c:4299 utils/misc/guc.c:4310 -#: utils/misc/guc.c:4386 +#: utils/misc/guc.c:4483 utils/misc/guc.c:4548 utils/misc/guc.c:4559 utils/misc/guc.c:4635 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr " 各レベルにはそのレベル以下の全てが含まれます。レベルを低くするほど、送信されるメッセージはより少なくなります。 " -#: utils/misc/guc.c:4244 +#: utils/misc/guc.c:4493 msgid "Enables the planner to use constraints to optimize queries." msgstr "問い合わせの最適化の際にプランナに制約を利用させる。" -#: utils/misc/guc.c:4245 +#: utils/misc/guc.c:4494 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "制約により、問い合わせに一致する行がないことが保証されているテーブルをスキップします。" -#: utils/misc/guc.c:4256 +#: utils/misc/guc.c:4505 msgid "Sets the transaction isolation level of each new transaction." msgstr "新規トランザクションのトランザクション分離レベルを設定。" -#: utils/misc/guc.c:4266 +#: utils/misc/guc.c:4515 msgid "Sets the current transaction's isolation level." msgstr "現在のトランザクションの分離レベルを設定。" -#: utils/misc/guc.c:4277 +#: utils/misc/guc.c:4526 msgid "Sets the display format for interval values." msgstr "インターバル値の表示フォーマットを設定。" -#: utils/misc/guc.c:4288 +#: utils/misc/guc.c:4537 msgid "Sets the verbosity of logged messages." msgstr "ログ出力メッセージの詳細度を設定。" -#: utils/misc/guc.c:4298 +#: utils/misc/guc.c:4547 msgid "Sets the message levels that are logged." msgstr "ログに出力するメッセージレベルを設定。" -#: utils/misc/guc.c:4309 +#: utils/misc/guc.c:4558 msgid "Causes all statements generating error at or above this level to be logged." msgstr "このレベル以上のエラーを発生させた全てのSQL文をログに記録します。" -#: utils/misc/guc.c:4320 +#: utils/misc/guc.c:4569 msgid "Sets the type of statements logged." msgstr "ログ出力する文の種類を設定。" -#: utils/misc/guc.c:4330 +#: utils/misc/guc.c:4579 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "syslogを有効にした場合に使用するsyslog \"facility\"を設定。" -#: utils/misc/guc.c:4345 +#: utils/misc/guc.c:4594 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "トリガと書き換えルールに関するセッションの動作を設定。" -#: utils/misc/guc.c:4355 +#: utils/misc/guc.c:4604 msgid "Sets the current transaction's synchronization level." msgstr "現在のトランザクションの同期レベルを設定。" -#: utils/misc/guc.c:4365 +#: utils/misc/guc.c:4614 msgid "Allows archiving of WAL files using archive_command." msgstr "archive_command を使用したWALファイルのアーカイブ処理を許可。" -#: utils/misc/guc.c:4375 +#: utils/misc/guc.c:4624 msgid "Sets the action to perform upon reaching the recovery target." msgstr "リカバリ目標に到達した際の動作を設定。" -#: utils/misc/guc.c:4385 +#: utils/misc/guc.c:4634 msgid "Enables logging of recovery-related debugging information." msgstr "リカバリ関連のデバッグ情報の記録を行う" -#: utils/misc/guc.c:4401 +#: utils/misc/guc.c:4650 msgid "Collects function-level statistics on database activity." msgstr "データベースの動作に関して、関数レベルの統計情報を収集します。" -#: utils/misc/guc.c:4411 +#: utils/misc/guc.c:4660 msgid "Set the level of information written to the WAL." msgstr "WALに書き出される情報のレベルを設定します。" -#: utils/misc/guc.c:4421 +#: utils/misc/guc.c:4670 msgid "Selects the dynamic shared memory implementation used." msgstr "動的共有メモリで使用する実装を選択します。" -#: utils/misc/guc.c:4431 +#: utils/misc/guc.c:4680 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "主共有メモリ領域に使用する共有メモリ実装を選択します。" -#: utils/misc/guc.c:4441 +#: utils/misc/guc.c:4690 msgid "Selects the method used for forcing WAL updates to disk." msgstr "WAL更新のディスクへの書き出しを強制するめの方法を選択します。" -#: utils/misc/guc.c:4451 +#: utils/misc/guc.c:4700 msgid "Sets how binary values are to be encoded in XML." msgstr "XMLでどのようにバイナリ値を符号化するかを設定します。" -#: utils/misc/guc.c:4461 +#: utils/misc/guc.c:4710 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "暗黙的なパースおよび直列化操作においてXMLデータを文書とみなすか断片とみなすかを設定します。" -#: utils/misc/guc.c:4472 +#: utils/misc/guc.c:4721 msgid "Use of huge pages on Linux or Windows." msgstr "LinuxおよびWindowsでヒュージページを使用。" -#: utils/misc/guc.c:4482 +#: utils/misc/guc.c:4731 msgid "Forces use of parallel query facilities." msgstr "並列問い合わせ機構を強制的に使用します。" -#: utils/misc/guc.c:4483 +#: utils/misc/guc.c:4732 msgid "If possible, run query using a parallel worker and with parallel restrictions." msgstr "可能であれば並列処理ワーカを使用し、問い合わせを並列処理による制限の下で実行します。" -#: utils/misc/guc.c:4493 -msgid "Encrypt passwords." -msgstr "パスワードを暗号化します。" - -#: utils/misc/guc.c:4494 -msgid "When a password is specified in CREATE USER or ALTER USER without writing either ENCRYPTED or UNENCRYPTED, this parameter determines whether the password is to be encrypted." -msgstr "ENCRYPTEDもしくはUNENCRYPTEDの指定無しにCREATE USERもしくはALTER USERでパスワードが指定された場合、このオプションがパスワードの暗号化を行なうかどうかを決定します。" +#: utils/misc/guc.c:4742 +msgid "Chooses the algorithm for encrypting passwords." +msgstr "パスワードの暗号化に使用するアルゴリズムを選択する。" -#: utils/misc/guc.c:4505 +#: utils/misc/guc.c:4752 msgid "Controls the planner's selection of custom or generic plan." msgstr "プランナでのカスタムプランと汎用プランの選択を制御。" -#: utils/misc/guc.c:4506 +#: utils/misc/guc.c:4753 msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." msgstr "プリペアド文は個別プランと一般プランを持ち、プランナはよりよいプランの選択を試みます。これを設定することでそのデフォルト動作を変更できます。" -#: utils/misc/guc.c:4518 +#: utils/misc/guc.c:4765 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "使用する SSL/TLSプロトコルの最小バージョンを設定。" -#: utils/misc/guc.c:4530 +#: utils/misc/guc.c:4777 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "使用可能な最大の SSL/TLS プロトコルバージョンを指定します。" -#: utils/misc/guc.c:5353 +#: utils/misc/guc.c:5580 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: ディレクトリ\"%s\"にアクセスできませんでした: %s\n" -#: utils/misc/guc.c:5358 +#: utils/misc/guc.c:5585 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "initdbまたはpg_basebackupを実行して、PostgreSQLデータディレクトリを初期化してください。\n" -#: utils/misc/guc.c:5378 +#: utils/misc/guc.c:5605 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -26299,12 +26192,12 @@ msgstr "" "--config-fileまたは-Dオプションを指定する、あるいはPGDATA環境変数を設\n" "定する必要があります。\n" -#: utils/misc/guc.c:5397 +#: utils/misc/guc.c:5624 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s: サーバ設定ファイル\"%s\"にアクセスできません: %s\n" -#: utils/misc/guc.c:5423 +#: utils/misc/guc.c:5650 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -26314,7 +26207,7 @@ msgstr "" "\"%s\"内で\"data_directory\"を指定する、-Dオプションを指定する、PGDATA環\n" "境変数で設定することができます。\n" -#: utils/misc/guc.c:5471 +#: utils/misc/guc.c:5698 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -26324,7 +26217,7 @@ msgstr "" "\"%s\"内で\"hba_directory\"を指定する、-Dオプションを指定する、PGDATA環\n" "境変数で設定することができます。\n" -#: utils/misc/guc.c:5494 +#: utils/misc/guc.c:5721 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -26334,169 +26227,181 @@ msgstr "" "\"%s\"内で\"ident_directory\"を指定する、-Dオプションを指定する、PGDATA環\n" "境変数で設定することができます。\n" -#: utils/misc/guc.c:6336 +#: utils/misc/guc.c:6563 msgid "Value exceeds integer range." msgstr "値が整数範囲を超えています。" -#: utils/misc/guc.c:6572 +#: utils/misc/guc.c:6799 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s はパラメータ\"%s\"の有効範囲 (%d .. %d) を超えています" -#: utils/misc/guc.c:6608 +#: utils/misc/guc.c:6835 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s はパラメータ\"%s\"の有効範囲 (%g .. %g) を超えています" -#: utils/misc/guc.c:6764 utils/misc/guc.c:8131 +#: utils/misc/guc.c:6991 utils/misc/guc.c:8358 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "並列処理中はパラメータの設定はできません" -#: utils/misc/guc.c:6771 utils/misc/guc.c:7523 utils/misc/guc.c:7576 -#: utils/misc/guc.c:7627 utils/misc/guc.c:7960 utils/misc/guc.c:8727 -#: utils/misc/guc.c:8993 utils/misc/guc.c:10660 +#: utils/misc/guc.c:6998 utils/misc/guc.c:7750 utils/misc/guc.c:7803 utils/misc/guc.c:7854 utils/misc/guc.c:8187 utils/misc/guc.c:8954 utils/misc/guc.c:9216 utils/misc/guc.c:10882 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "設定パラメータ\"%s\"は不明です" -#: utils/misc/guc.c:6786 utils/misc/guc.c:7972 +#: utils/misc/guc.c:7013 utils/misc/guc.c:8199 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "パラメータ\"%s\"を変更できません" -#: utils/misc/guc.c:6819 +#: utils/misc/guc.c:7046 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "現在パラメータ\"%s\"を変更できません" -#: utils/misc/guc.c:6837 utils/misc/guc.c:6884 utils/misc/guc.c:10676 +#: utils/misc/guc.c:7064 utils/misc/guc.c:7111 utils/misc/guc.c:10898 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "パラメータ\"%s\"を設定する権限がありません" -#: utils/misc/guc.c:6874 +#: utils/misc/guc.c:7101 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "接続開始後にパラメータ\"%s\"を変更できません" -#: utils/misc/guc.c:6922 +#: utils/misc/guc.c:7149 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "セキュリティー定義用関数内でパラメーター\"%s\"を設定できません" -#: utils/misc/guc.c:7531 utils/misc/guc.c:7581 utils/misc/guc.c:9000 +#: utils/misc/guc.c:7758 utils/misc/guc.c:7808 utils/misc/guc.c:9223 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "\"%s\"の内容を見るにはスーパユーザまたはpg_read_all_settingsロールである必要があります" -#: utils/misc/guc.c:7672 +#: utils/misc/guc.c:7899 #, c-format msgid "SET %s takes only one argument" msgstr "SET %sは1つの引数のみを取ります" -#: utils/misc/guc.c:7920 +#: utils/misc/guc.c:8147 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "ALTER SYSTEM コマンドを実行するにはスーパユーザである必要があります" -#: utils/misc/guc.c:8005 +#: utils/misc/guc.c:8232 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "ALTER SYSTEMでのパラメータ値は改行を含んではいけません" -#: utils/misc/guc.c:8050 +#: utils/misc/guc.c:8277 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "ファイル\"%s\"の内容をパースできませんでした" -#: utils/misc/guc.c:8207 +#: utils/misc/guc.c:8434 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOTはまだ実装されていません" -#: utils/misc/guc.c:8291 +#: utils/misc/guc.c:8518 #, c-format msgid "SET requires parameter name" msgstr "SETにはパラメータ名が必要です" -#: utils/misc/guc.c:8424 +#: utils/misc/guc.c:8651 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "パラメータ\"%s\"を再定義しようとしています" -#: utils/misc/guc.c:10222 -#, fuzzy, c-format -#| msgid "parameter \"%s\" changed to \"%s\"" +#: utils/misc/guc.c:10444 +#, c-format msgid "while setting parameter \"%s\" to \"%s\"" -msgstr "パラメータ\"%s\"は\"%s\"に変更されました" +msgstr "パラメータ\"%s\"の\"%s\"への変更中" -#: utils/misc/guc.c:10290 +#: utils/misc/guc.c:10512 #, c-format msgid "parameter \"%s\" could not be set" msgstr "パラメータ\"%s\"を設定できません" -#: utils/misc/guc.c:10380 +#: utils/misc/guc.c:10602 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "パラメータ\"%s\"の設定をパースできません" -#: utils/misc/guc.c:10738 utils/misc/guc.c:10772 +#: utils/misc/guc.c:10960 utils/misc/guc.c:10994 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "パラメータ\"%s\"の値が無効です: %d" -#: utils/misc/guc.c:10806 +#: utils/misc/guc.c:11028 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "パラメータ\"%s\"の値が無効です: %g" -#: utils/misc/guc.c:11076 +#: utils/misc/guc.c:11298 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "当該セッションで何らかの一時テーブルがアクセスされた後は \"temp_buffers\"を変更できません" -#: utils/misc/guc.c:11088 +#: utils/misc/guc.c:11310 #, c-format msgid "Bonjour is not supported by this build" msgstr "このビルドでは bonjour はサポートされていません" -#: utils/misc/guc.c:11101 +#: utils/misc/guc.c:11323 #, c-format msgid "SSL is not supported by this build" msgstr "このインストレーションではSSLはサポートされていません" -#: utils/misc/guc.c:11113 +#: utils/misc/guc.c:11335 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "\"log_statement_stats\"が真の場合、パラメータを有効にできません" -#: utils/misc/guc.c:11125 +#: utils/misc/guc.c:11347 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "\"log_parser_stats\"、\"log_planner_stats\"、\"log_executor_stats\"のいずれかが真の場合は\"log_statement_stats\"を有効にできません" -#: utils/misc/guc.c:11369 +#: utils/misc/guc.c:11577 #, c-format msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "posix_fadvise() をもたないプラットフォームではeffective_io_concurrencyは0に設定する必要があります。" -#: utils/misc/guc.c:11483 +#: utils/misc/guc.c:11590 +#, c-format +msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." +msgstr "posix_fadvise() をもたないプラットフォームではmaintenance_io_concurrencyは0に設定する必要があります。" + +#: utils/misc/guc.c:11604 +#, c-format +msgid "huge_page_size must be 0 on this platform." +msgstr "このプラットフォームではhuge_page_sizeを0に設定する必要があります。" + +#: utils/misc/guc.c:11720 +#, c-format +msgid "invalid character" +msgstr "不正な文字" + +#: utils/misc/guc.c:11780 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timelineが妥当な数値ではありません。" -#: utils/misc/guc.c:11523 +#: utils/misc/guc.c:11820 #, c-format msgid "multiple recovery targets specified" msgstr "複数のリカバリ目標が指定されています" -#: utils/misc/guc.c:11524 +#: utils/misc/guc.c:11821 #, c-format msgid "At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set." msgstr " recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid はこの中の1つまで設定可能です。" -#: utils/misc/guc.c:11532 +#: utils/misc/guc.c:11829 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "\"immediate\"のみが指定可能です。" @@ -26511,8 +26416,7 @@ msgstr "内部エラー: 実行時のパラメータ型が認識できません\ msgid "query-specified return tuple and function return type are not compatible" msgstr "問い合わせで指定された返却タプルと関数の返り値の型が互換ではありません" -#: utils/misc/pg_controldata.c:60 utils/misc/pg_controldata.c:138 -#: utils/misc/pg_controldata.c:242 utils/misc/pg_controldata.c:309 +#: utils/misc/pg_controldata.c:60 utils/misc/pg_controldata.c:138 utils/misc/pg_controldata.c:241 utils/misc/pg_controldata.c:306 #, c-format msgid "calculated CRC checksum does not match value stored in file" msgstr "算出されたCRCチェックサムがファイルに格納されている値と一致しません" @@ -26532,90 +26436,87 @@ msgstr "問い合わせはテーブル\"%s\"に対する行レベルセキュリ msgid "To disable the policy for the table's owner, use ALTER TABLE NO FORCE ROW LEVEL SECURITY." msgstr "テーブルの所有者に対するポリシを無効にするには、ALTER TABLE NO FORCE ROW LEVEL SECURITY を使ってください。" -#: utils/misc/timeout.c:388 +#: utils/misc/timeout.c:395 #, c-format msgid "cannot add more timeout reasons" msgstr "これ以上のタイムアウト要因を追加できません" -#: utils/misc/tzparser.c:61 +#: utils/misc/tzparser.c:60 #, c-format msgid "time zone abbreviation \"%s\" is too long (maximum %d characters) in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%3$s\"の%4$d行のタイムゾーン省略形\"%1$s\"が長すぎます(最大%2$d文字)" -#: utils/misc/tzparser.c:73 +#: utils/misc/tzparser.c:72 #, c-format msgid "time zone offset %d is out of range in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%2$s\"の%3$d行のタイムゾーンオフセット%1$dは範囲外です" -#: utils/misc/tzparser.c:112 +#: utils/misc/tzparser.c:111 #, c-format msgid "missing time zone abbreviation in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%s\"の行%dでタイムゾーン省略形がありません" -#: utils/misc/tzparser.c:121 +#: utils/misc/tzparser.c:120 #, c-format msgid "missing time zone offset in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%s\"の行%dでタイムゾーンオフセットがありません" -#: utils/misc/tzparser.c:133 +#: utils/misc/tzparser.c:132 #, c-format msgid "invalid number for time zone offset in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%s\"の行%dのタイムゾーンオフセット値が無効です" -#: utils/misc/tzparser.c:169 +#: utils/misc/tzparser.c:168 #, c-format msgid "invalid syntax in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%s\"の行%dで構文が無効です" -#: utils/misc/tzparser.c:237 +#: utils/misc/tzparser.c:236 #, c-format msgid "time zone abbreviation \"%s\" is multiply defined" msgstr "タイムゾーン省略形\"%s\"が複数定義されています" -#: utils/misc/tzparser.c:239 +#: utils/misc/tzparser.c:238 #, c-format msgid "Entry in time zone file \"%s\", line %d, conflicts with entry in file \"%s\", line %d." msgstr "タイムゾーンファイル\"%s\"の行%dの項目は、ファイル\"%s\"の行%dと競合します。" -#: utils/misc/tzparser.c:301 +#: utils/misc/tzparser.c:300 #, c-format msgid "invalid time zone file name \"%s\"" msgstr "タイムゾーンファイル名が無効です: \"%s\"" -#: utils/misc/tzparser.c:314 +#: utils/misc/tzparser.c:313 #, c-format msgid "time zone file recursion limit exceeded in file \"%s\"" msgstr "ファイル\"%s\"でタイムゾーンファイルの再帰の上限を超えました。" -#: utils/misc/tzparser.c:353 utils/misc/tzparser.c:366 +#: utils/misc/tzparser.c:352 utils/misc/tzparser.c:365 #, c-format msgid "could not read time zone file \"%s\": %m" msgstr "タイムゾーンファイル\"%s\"を読み込めませんでした: %m" -#: utils/misc/tzparser.c:376 +#: utils/misc/tzparser.c:375 #, c-format msgid "line is too long in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%s\"の行%dが長すぎます。" -#: utils/misc/tzparser.c:399 +#: utils/misc/tzparser.c:398 #, c-format msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "タイムゾーンファイル\"%s\"の行%dにファイル名がない@INCLUDEがあります" -#: utils/mmgr/aset.c:485 utils/mmgr/generation.c:250 utils/mmgr/slab.c:240 +#: utils/mmgr/aset.c:476 utils/mmgr/generation.c:234 utils/mmgr/slab.c:236 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "メモリコンテキスト\"%s\"の作成時に失敗しました" -#: utils/mmgr/dsa.c:519 utils/mmgr/dsa.c:1332 +#: utils/mmgr/dsa.c:519 utils/mmgr/dsa.c:1329 #, c-format msgid "could not attach to dynamic shared area" msgstr "動的共有エリアをアタッチできませんでした" -#: utils/mmgr/mcxt.c:797 utils/mmgr/mcxt.c:833 utils/mmgr/mcxt.c:871 -#: utils/mmgr/mcxt.c:909 utils/mmgr/mcxt.c:945 utils/mmgr/mcxt.c:976 -#: utils/mmgr/mcxt.c:1012 utils/mmgr/mcxt.c:1064 utils/mmgr/mcxt.c:1099 -#: utils/mmgr/mcxt.c:1134 +#: utils/mmgr/mcxt.c:830 utils/mmgr/mcxt.c:866 utils/mmgr/mcxt.c:904 utils/mmgr/mcxt.c:942 utils/mmgr/mcxt.c:978 utils/mmgr/mcxt.c:1009 utils/mmgr/mcxt.c:1045 utils/mmgr/mcxt.c:1097 utils/mmgr/mcxt.c:1132 utils/mmgr/mcxt.c:1167 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "メモリコンテクスト\"%2$s\"でサイズ%1$zuの要求が失敗しました。" @@ -26630,150 +26531,315 @@ msgstr "カーソル\"%s\"はすでに存在します" msgid "closing existing cursor \"%s\"" msgstr "既存のカーソル\"%s\"をクローズしています" -#: utils/mmgr/portalmem.c:398 +#: utils/mmgr/portalmem.c:400 #, c-format msgid "portal \"%s\" cannot be run" msgstr "ポータル\"%s\"を実行できません" -#: utils/mmgr/portalmem.c:476 +#: utils/mmgr/portalmem.c:478 #, c-format msgid "cannot drop pinned portal \"%s\"" msgstr "固定されたポータル\"%s\"は削除できません" -#: utils/mmgr/portalmem.c:484 +#: utils/mmgr/portalmem.c:486 #, c-format msgid "cannot drop active portal \"%s\"" msgstr "アクテイブなポータル\"%s\"を削除できません" -#: utils/mmgr/portalmem.c:729 +#: utils/mmgr/portalmem.c:731 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "WITH HOLD 付きのカーソルを作成したトランザクションは PREPARE できません" -#: utils/mmgr/portalmem.c:1269 +#: utils/mmgr/portalmem.c:1270 #, c-format msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "読み込み専用ではないカーソルのループ内ではトランザクション命令は実行できません" -#: utils/sort/logtape.c:276 +#: utils/sort/logtape.c:268 utils/sort/logtape.c:291 #, c-format -msgid "could not read block %ld of temporary file: %m" -msgstr "一時ファイルのブロック%ldを読み込めませんでした: %m" +msgid "could not seek to block %ld of temporary file" +msgstr "一時ファイルのブロック%ldへのシークに失敗しました" -#: utils/sort/sharedtuplestore.c:208 +#: utils/sort/logtape.c:297 #, c-format -msgid "could not write to temporary file: %m" -msgstr "一時ファイルへの書き出しに失敗しました: %m" +msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" +msgstr "一時ファイルのブロック%1$ldの読み取りに失敗しました: %3$zuバイト中%2$zuバイトのみ読み取りました" -#: utils/sort/sharedtuplestore.c:437 utils/sort/sharedtuplestore.c:446 -#: utils/sort/sharedtuplestore.c:469 utils/sort/sharedtuplestore.c:486 -#: utils/sort/sharedtuplestore.c:503 utils/sort/sharedtuplestore.c:575 -#: utils/sort/sharedtuplestore.c:581 +#: utils/sort/sharedtuplestore.c:430 utils/sort/sharedtuplestore.c:439 utils/sort/sharedtuplestore.c:462 utils/sort/sharedtuplestore.c:479 utils/sort/sharedtuplestore.c:496 #, c-format msgid "could not read from shared tuplestore temporary file" msgstr "タプルストア共有一時ファイルからの読み込みに失敗しました" -#: utils/sort/sharedtuplestore.c:492 +#: utils/sort/sharedtuplestore.c:485 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "タプルストア共有一時ファイル内に予期しないチャンクがありました" -#: utils/sort/tuplesort.c:2967 +#: utils/sort/sharedtuplestore.c:569 +#, c-format +msgid "could not seek block %u in shared tuplestore temporary file" +msgstr "共有タプルストア一時ファイルのブロック%uへのシークに失敗しました" + +#: utils/sort/sharedtuplestore.c:576 +#, c-format +msgid "could not read from shared tuplestore temporary file: read only %zu of %zu bytes" +msgstr "共有タプルストア一時ファイルからの読み込みに失敗しました: %2$zuバイト中%1$zuバイトのみ読み取りました" + +#: utils/sort/tuplesort.c:3140 #, c-format msgid "cannot have more than %d runs for an external sort" msgstr "外部ソートでは%d以上のラン数は扱えません" -#: utils/sort/tuplesort.c:4051 +#: utils/sort/tuplesort.c:4221 #, c-format msgid "could not create unique index \"%s\"" msgstr "一意インデックス\"%s\"を作成できませんでした" -#: utils/sort/tuplesort.c:4053 +#: utils/sort/tuplesort.c:4223 #, c-format msgid "Key %s is duplicated." msgstr "キー%sは重複しています。" -#: utils/sort/tuplesort.c:4054 +#: utils/sort/tuplesort.c:4224 #, c-format msgid "Duplicate keys exist." msgstr "重複したキーが存在します。" -#: utils/sort/tuplestore.c:518 utils/sort/tuplestore.c:528 -#: utils/sort/tuplestore.c:869 utils/sort/tuplestore.c:973 -#: utils/sort/tuplestore.c:1037 utils/sort/tuplestore.c:1054 -#: utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 -#: utils/sort/tuplestore.c:1330 +#: utils/sort/tuplestore.c:518 utils/sort/tuplestore.c:528 utils/sort/tuplestore.c:869 utils/sort/tuplestore.c:973 utils/sort/tuplestore.c:1037 utils/sort/tuplestore.c:1054 utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 utils/sort/tuplestore.c:1330 #, c-format -msgid "could not seek in tuplestore temporary file: %m" -msgstr "タプルストア一時ファイルのシークに失敗しました: %m" +msgid "could not seek in tuplestore temporary file" +msgstr "タプルストア一時ファイルのシークに失敗しました" -#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1550 -#: utils/sort/tuplestore.c:1556 +#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1540 utils/sort/tuplestore.c:1548 #, c-format -msgid "could not read from tuplestore temporary file: %m" -msgstr "タプルストア一時ファイルからの読み込みに失敗しました: %m" +msgid "could not read from tuplestore temporary file: read only %zu of %zu bytes" +msgstr "タプルストア一時ファイルからの読み込みに失敗しました: %2$zuバイト中%1$zuバイトのみ読み取りました" -#: utils/sort/tuplestore.c:1518 utils/sort/tuplestore.c:1523 -#: utils/sort/tuplestore.c:1529 -#, c-format -msgid "could not write to tuplestore temporary file: %m" -msgstr "タプルストア一時ファイルへの書き込みに失敗しました: %m" - -#: utils/time/snapmgr.c:624 +#: utils/time/snapmgr.c:619 #, c-format msgid "The source transaction is not running anymore." msgstr "元となるトランザクションはすでに実行中ではありません。" -#: utils/time/snapmgr.c:1232 +#: utils/time/snapmgr.c:1198 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "サブトランザクションからスナップショットをエクスポートすることはできません" -#: utils/time/snapmgr.c:1391 utils/time/snapmgr.c:1396 -#: utils/time/snapmgr.c:1401 utils/time/snapmgr.c:1416 -#: utils/time/snapmgr.c:1421 utils/time/snapmgr.c:1426 -#: utils/time/snapmgr.c:1441 utils/time/snapmgr.c:1446 -#: utils/time/snapmgr.c:1451 utils/time/snapmgr.c:1553 -#: utils/time/snapmgr.c:1569 utils/time/snapmgr.c:1594 +#: utils/time/snapmgr.c:1357 utils/time/snapmgr.c:1362 utils/time/snapmgr.c:1367 utils/time/snapmgr.c:1382 utils/time/snapmgr.c:1387 utils/time/snapmgr.c:1392 utils/time/snapmgr.c:1407 utils/time/snapmgr.c:1412 utils/time/snapmgr.c:1417 utils/time/snapmgr.c:1519 utils/time/snapmgr.c:1535 utils/time/snapmgr.c:1560 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "ファイル\"%s\"内のスナップショットデータが不正です" -#: utils/time/snapmgr.c:1488 +#: utils/time/snapmgr.c:1454 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "SET TRANSACTION SNAPSHOTを全ての問い合わせの前に呼び出さなければなりません" -#: utils/time/snapmgr.c:1497 +#: utils/time/snapmgr.c:1463 #, c-format msgid "a snapshot-importing transaction must have isolation level SERIALIZABLE or REPEATABLE READ" msgstr "スナップショットをインポートするトランザクションはSERIALIZABLEまたはREPEATABLE READ分離レベルでなければなりません" -#: utils/time/snapmgr.c:1506 utils/time/snapmgr.c:1515 +#: utils/time/snapmgr.c:1472 utils/time/snapmgr.c:1481 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "無効なスナップショット識別子: \"%s\"" -#: utils/time/snapmgr.c:1607 +#: utils/time/snapmgr.c:1573 #, c-format msgid "a serializable transaction cannot import a snapshot from a non-serializable transaction" msgstr "シリアライザブルトランザクションはシリアライザブルではないトランザクションからのスナップショットをインポートできません" -#: utils/time/snapmgr.c:1611 +#: utils/time/snapmgr.c:1577 #, c-format msgid "a non-read-only serializable transaction cannot import a snapshot from a read-only transaction" msgstr "読み取りのみのシリアライザブルトランザクションでは、読み取り専用トランザクションからスナップショットを読み込むことができません" -#: utils/time/snapmgr.c:1626 +#: utils/time/snapmgr.c:1592 #, c-format msgid "cannot import a snapshot from a different database" msgstr "異なるデータベースからのスナップショットを読み込むことはできません" -#~ msgid "If you only want a sample, use a value between 0.0 (never log) and 1.0 (always log)." -#~ msgstr "一部のサンプルのみが欲しければ、0.0(ログ出力しない)から1.0(すべてログ出力する)の間の値を指定してください。" +#~ msgid "leftover placeholder tuple detected in BRIN index \"%s\", deleting" +#~ msgstr "消されずに残ったプレースホルダータプルがBRINインデックス\"%s\"で見つかりました、削除します" + +#~ msgid "invalid value for \"buffering\" option" +#~ msgstr "不正な\"buffering\"オプションの値" + +#~ msgid "could not write block %ld of temporary file: %m" +#~ msgstr "一時ファイルのブロック%ldを書き込めませんでした: %m" + +#~ msgid "skipping redundant vacuum to prevent wraparound of table \"%s.%s.%s\"" +#~ msgstr "テーブル\"%s.%s.%s\"の周回防止vacuumは重複のためスキップします" + +#~ msgid "The database cluster was initialized without USE_FLOAT4_BYVAL but the server was compiled with USE_FLOAT4_BYVAL." +#~ msgstr "データベースクラスタは USE_FLOAT4_BYVAL なしで初期化されましたが、サーバ側は USE_FLOAT4_BYVAL 付きでコンパイルされています。" + +#~ msgid "The database cluster was initialized with USE_FLOAT4_BYVAL but the server was compiled without USE_FLOAT4_BYVAL." +#~ msgstr "データベースクラスタは USE_FLOAT4_BYVAL 付きで初期化されましたが、サーバ側は USE_FLOAT4_BYVAL なしでコンパイルされています。" + +#~ msgid "could not seek in log segment %s to offset %u: %m" +#~ msgstr "ログセグメント%sをオフセット%uまでシークできませんでした: %m" + +#~ msgid "could not read from log segment %s, offset %u, length %lu: %m" +#~ msgstr "ログセグメント %sのオフセット %uから長さ %lu で読み込めませんでした: %m" + +#~ msgid "An aggregate using a polymorphic transition type must have at least one polymorphic argument." +#~ msgstr "遷移多様型を用いる集約は多様型の引数を少なくとも1つ取る必要があります。" + +#~ msgid "An aggregate returning a polymorphic type must have at least one polymorphic argument." +#~ msgstr "多様型を返す集約は少なくとも1つの多様型の引数を取る必要があります。" + +#~ msgid "A function returning \"internal\" must have at least one \"internal\" argument." +#~ msgstr "\"internal\"\"を返す関数は少なくとも1つの\"internal\"型の引数を取る必要があります。" + +#~ msgid "A function returning a polymorphic type must have at least one polymorphic argument." +#~ msgstr "多様型を返す関数は少なくとも1つの多様型の引数を取る必要があります。" + +#~ msgid "A function returning \"anyrange\" must have at least one \"anyrange\" argument." +#~ msgstr "\"anyrange\"を返す関数は少なくとも1つの\"anyrange\"型の引数を取る必要があります。" + +#~ msgid "Adding partitioned tables to publications is not supported." +#~ msgstr "パブリケーションへのパーティションテーブルの追加はサポートされていません。" + +#~ msgid "You can add the table partitions individually." +#~ msgstr "各パーティション個別になら追加は可能です。" + +#~ msgid "must be superuser to drop access methods" +#~ msgstr "アクセスメソッドを削除するにはスーパユーザである必要があります" + +#~ msgid "FROM version must be different from installation target version \"%s\"" +#~ msgstr "FROM のバージョンはターゲットのバージョン\"%s\"と異なっていなければなりません" + +#~ msgid "using pg_pltemplate information instead of CREATE LANGUAGE parameters" +#~ msgstr "CREATE LANGUAGEパラメータの代わりにpg_pltemplateの情報を使用しています" + +#~ msgid "must be superuser to create procedural language \"%s\"" +#~ msgstr "手続き言語\"%s\"を生成するにはスーパユーザである必要があります" + +#~ msgid "unsupported language \"%s\"" +#~ msgstr "言語\"%s\"はサポートされていません" + +#~ msgid "The supported languages are listed in the pg_pltemplate system catalog." +#~ msgstr "サポートされている言語はpg_pltemplateシステムカタログ内に列挙されています" + +#~ msgid "changing return type of function %s from %s to %s" +#~ msgstr "関数%sの戻り値型を%sから%sに変更します" + +#~ msgid "column \"%s\" contains null values" +#~ msgstr "列\"%s\"にはNULL値があります" + +#~ msgid "updated partition constraint for default partition would be violated by some row" +#~ msgstr "デフォルトパーティションの一部の行が更新後のパーティション制約に違反しています" + +#~ msgid "partition key expressions cannot contain whole-row references" +#~ msgstr "パーティションキー式は行全体参照を含むことはできません" + +#~ msgid "Found referenced table's UPDATE trigger." +#~ msgstr "被参照テーブルのUPDATEトリガが見つかりました。" + +#~ msgid "Found referenced table's DELETE trigger." +#~ msgstr "被参照テーブルのDELETEトリガが見つかりました。" + +#~ msgid "Found referencing table's trigger." +#~ msgstr "参照テーブルのトリガが見つかりました。" + +#~ msgid "ignoring incomplete trigger group for constraint \"%s\" %s" +#~ msgstr "制約\"%s\"%sに対する不完全なトリガグループを無視します。" + +#~ msgid "converting trigger group into constraint \"%s\" %s" +#~ msgstr "トリガグループを制約\"%s\"%sに変換しています" + +#~ msgid "changing argument type of function %s from \"opaque\" to \"cstring\"" +#~ msgstr "関数%sの引数型を\"opaque\"から\"cstring\"に変更しています" + +#~ msgid "changing argument type of function %s from \"opaque\" to %s" +#~ msgstr "関数%sの引数型を\"opaque\"から%sに変更しています" + +#~ msgid "invalid value for \"check_option\" option" +#~ msgstr "\"check_option\"オプションの値が不正です" + +#~ msgid "\"%s.%s\" is a partitioned table." +#~ msgstr "\"%s.%s\"はパーティションテーブルです" + +#~ msgid "could not determine actual result type for function declared to return type %s" +#~ msgstr "戻り値型%sとして宣言された関数の実際の結果型を特定できませんでした" + +#~ msgid "could not write to hash-join temporary file: %m" +#~ msgstr "ハッシュ結合用一時ファイルを書き出せません: %m" + +#~ msgid "could not load wldap32.dll" +#~ msgstr "wldap32.dllが読み込めません" + +#~ msgid "SSL certificate revocation list file \"%s\" ignored" +#~ msgstr "SSL証明書失効リストファイル\"%s\"は無視されました" + +#~ msgid "SSL library does not support certificate revocation lists." +#~ msgstr "SSLライブラリが証明書失効リストをサポートしていません。" + +#~ msgid "could not find range type for data type %s" +#~ msgstr "データ型%sの範囲型がありませんでした" + +#~ msgid "could not create signal dispatch thread: error code %lu\n" +#~ msgstr "シグナルディスパッチ用スレッドを作成できませんでした: エラーコード %lu\n" + +#~ msgid "could not fseek in file \"%s\": %m" +#~ msgstr "ファイル\"%s\"をfseekできませんでした: %m" + +#~ msgid "could not reread block %d of file \"%s\": %m" +#~ msgstr "ファイル\"%2$s\"でブロック%1$dの再読み込みに失敗しました: %3$m" + +#~ msgid "only superusers can query or manipulate replication origins" +#~ msgstr "スーパユーザのみがレプリケーション基点の問い合わせや操作ができます" + +#~ msgid "logical replication apply worker for subscription \"%s\" will restart because the connection information was changed" +#~ msgstr "接続情報が変更されたため、サブスクリプション\"%s\"に対応する論理レプリケーション適用ワーカが再起動します" + +#~ msgid "logical replication apply worker for subscription \"%s\" will restart because the replication slot name was changed" +#~ msgstr "レプリケーションスロットの名前が変更されたため、サブスクリプション\"%s\"に対応する論理レプリケーション適用ワーカが再起動します" + +#~ msgid "logical replication apply worker for subscription \"%s\" will restart because subscription's publications were changed" +#~ msgstr "サブスクリプションが購読するパブリケーションが変更されたため、サブスクリプション\"%s\"に対応する論理レプリケーション適用ワーカが再起動します" + +#~ msgid "cannot advance replication slot that has not previously reserved WAL" +#~ msgstr "事前に WAL の留保をしていないレプリケーションスロットを進めることはできません" + +#~ msgid "could not read from log segment %s, offset %u, length %zu: %m" +#~ msgstr "ログセグメント %s、オフセット %uから長さ %zu が読み込めませんでした: %m" + +#~ msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8" +#~ msgstr "サーバのエンコーディングが UTF-8 ではない場合、コードポイントの値が 007F 以上については Unicode のエスケープ値は使用できません" + +#~ msgid "wrong element type" +#~ msgstr "間違った要素型" + +#~ msgid "cannot use advisory locks during a parallel operation" +#~ msgstr "並列処理中は勧告的ロックは使用できません" + +#~ msgid "cannot output a value of type %s" +#~ msgstr "%s型の値は出力できません" + +#~ msgid "wrong data type: %u, expected %u" +#~ msgstr "データ型が間違っています: %u。%uを想定していました" + +#~ msgid "Server has FLOAT4PASSBYVAL = %s, library has %s." +#~ msgstr "サーバ側はFLOAT4PASSBYVAL = %sですが、ライブラリ側は%sです。" + +#~ msgid "encoding name too long" +#~ msgstr "符号化方式名称が長すぎます" + +#~ msgid "Encrypt passwords." +#~ msgstr "パスワードを暗号化します。" + +#~ msgid "When a password is specified in CREATE USER or ALTER USER without writing either ENCRYPTED or UNENCRYPTED, this parameter determines whether the password is to be encrypted." +#~ msgstr "ENCRYPTEDもしくはUNENCRYPTEDの指定無しにCREATE USERもしくはALTER USERでパスワードが指定された場合、このオプションがパスワードの暗号化を行なうかどうかを決定します。" + +#~ msgid "could not write to temporary file: %m" +#~ msgstr "一時ファイルへの書き出しに失敗しました: %m" -#~ msgid "Fraction of statements exceeding log_min_duration_statement to be logged." -#~ msgstr "log_min_duration_statement を超過した文をログする割合。" +#~ msgid "could not write to tuplestore temporary file: %m" +#~ msgstr "タプルストア一時ファイルへの書き込みに失敗しました: %m" #~ msgid "date/time value \"%s\" is no longer supported" #~ msgstr "日付時刻の値\"%s\"はもうサポートされていません" diff --git a/src/backend/po/ko.po b/src/backend/po/ko.po index 7c873298119d4..f330f3da7e24a 100644 --- a/src/backend/po/ko.po +++ b/src/backend/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: postgres (PostgreSQL) 12\n" +"Project-Id-Version: postgres (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:09+0000\n" -"PO-Revision-Date: 2020-02-10 10:36+0900\n" +"POT-Creation-Date: 2020-10-05 20:39+0000\n" +"PO-Revision-Date: 2020-10-27 14:19+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean Team \n" "Language: ko\n" @@ -15,45 +15,45 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../common/config_info.c:130 ../common/config_info.c:138 -#: ../common/config_info.c:146 ../common/config_info.c:154 -#: ../common/config_info.c:162 ../common/config_info.c:170 -#: ../common/config_info.c:178 ../common/config_info.c:186 -#: ../common/config_info.c:194 +#: ../common/config_info.c:134 ../common/config_info.c:142 +#: ../common/config_info.c:150 ../common/config_info.c:158 +#: ../common/config_info.c:166 ../common/config_info.c:174 +#: ../common/config_info.c:182 ../common/config_info.c:190 msgid "not recorded" msgstr "기록되어 있지 않음" #: ../common/controldata_utils.c:68 ../common/controldata_utils.c:73 -#: commands/copy.c:3549 commands/extension.c:3341 utils/adt/genfile.c:153 +#: commands/copy.c:3495 commands/extension.c:3436 utils/adt/genfile.c:125 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "\"%s\" 파일 일기 모드로 열기 실패: %m" #: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 -#: access/transam/timeline.c:347 access/transam/twophase.c:1293 -#: access/transam/xlog.c:3455 access/transam/xlog.c:4602 -#: access/transam/xlog.c:10808 access/transam/xlog.c:10821 -#: access/transam/xlog.c:11246 access/transam/xlog.c:11326 -#: access/transam/xlog.c:11365 access/transam/xlog.c:11408 -#: access/transam/xlogfuncs.c:663 access/transam/xlogfuncs.c:682 -#: commands/extension.c:3351 libpq/hba.c:499 replication/logical/origin.c:718 -#: replication/logical/origin.c:754 replication/logical/reorderbuffer.c:3335 -#: replication/logical/snapbuild.c:1746 replication/logical/snapbuild.c:1788 -#: replication/logical/snapbuild.c:1816 replication/logical/snapbuild.c:1843 -#: replication/slot.c:1427 replication/slot.c:1468 replication/walsender.c:513 -#: storage/file/copydir.c:195 utils/adt/genfile.c:170 utils/adt/misc.c:753 -#: utils/cache/relmapper.c:741 +#: access/transam/timeline.c:143 access/transam/timeline.c:362 +#: access/transam/twophase.c:1276 access/transam/xlog.c:3503 +#: access/transam/xlog.c:4728 access/transam/xlog.c:11121 +#: access/transam/xlog.c:11134 access/transam/xlog.c:11587 +#: access/transam/xlog.c:11667 access/transam/xlog.c:11706 +#: access/transam/xlog.c:11749 access/transam/xlogfuncs.c:662 +#: access/transam/xlogfuncs.c:681 commands/extension.c:3446 libpq/hba.c:499 +#: replication/logical/origin.c:717 replication/logical/origin.c:753 +#: replication/logical/reorderbuffer.c:3599 +#: replication/logical/snapbuild.c:1741 replication/logical/snapbuild.c:1783 +#: replication/logical/snapbuild.c:1811 replication/logical/snapbuild.c:1838 +#: replication/slot.c:1622 replication/slot.c:1663 replication/walsender.c:543 +#: storage/file/buffile.c:441 storage/file/copydir.c:195 +#: utils/adt/genfile.c:200 utils/adt/misc.c:763 utils/cache/relmapper.c:741 #, c-format msgid "could not read file \"%s\": %m" msgstr "\"%s\" 파일을 읽을 수 없음: %m" #: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 -#: access/transam/twophase.c:1296 access/transam/xlog.c:3460 -#: access/transam/xlog.c:4607 replication/logical/origin.c:723 -#: replication/logical/origin.c:762 replication/logical/snapbuild.c:1751 -#: replication/logical/snapbuild.c:1793 replication/logical/snapbuild.c:1821 -#: replication/logical/snapbuild.c:1848 replication/slot.c:1431 -#: replication/slot.c:1472 replication/walsender.c:518 +#: access/transam/twophase.c:1279 access/transam/xlog.c:3508 +#: access/transam/xlog.c:4733 replication/logical/origin.c:722 +#: replication/logical/origin.c:761 replication/logical/snapbuild.c:1746 +#: replication/logical/snapbuild.c:1788 replication/logical/snapbuild.c:1816 +#: replication/logical/snapbuild.c:1843 replication/slot.c:1626 +#: replication/slot.c:1667 replication/walsender.c:548 #: utils/cache/relmapper.c:745 #, c-format msgid "could not read file \"%s\": read %d of %zu" @@ -61,20 +61,20 @@ msgstr "\"%s\" 파일을 읽을 수 없음: %d 읽음, 전체 %zu" #: ../common/controldata_utils.c:112 ../common/controldata_utils.c:117 #: ../common/controldata_utils.c:256 ../common/controldata_utils.c:259 -#: access/heap/rewriteheap.c:1208 access/heap/rewriteheap.c:1311 -#: access/transam/timeline.c:377 access/transam/timeline.c:421 -#: access/transam/timeline.c:499 access/transam/twophase.c:1305 -#: access/transam/twophase.c:1728 access/transam/xlog.c:3327 -#: access/transam/xlog.c:3495 access/transam/xlog.c:3500 -#: access/transam/xlog.c:3797 access/transam/xlog.c:4572 -#: access/transam/xlog.c:5532 access/transam/xlogfuncs.c:688 -#: commands/copy.c:1814 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:535 -#: replication/logical/origin.c:656 replication/logical/origin.c:795 -#: replication/logical/reorderbuffer.c:3393 -#: replication/logical/snapbuild.c:1658 replication/logical/snapbuild.c:1856 -#: replication/slot.c:1322 replication/slot.c:1479 replication/walsender.c:528 -#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:654 -#: storage/file/fd.c:3308 storage/file/fd.c:3411 utils/cache/relmapper.c:753 +#: access/heap/rewriteheap.c:1181 access/heap/rewriteheap.c:1284 +#: access/transam/timeline.c:392 access/transam/timeline.c:438 +#: access/transam/timeline.c:516 access/transam/twophase.c:1288 +#: access/transam/twophase.c:1676 access/transam/xlog.c:3375 +#: access/transam/xlog.c:3543 access/transam/xlog.c:3548 +#: access/transam/xlog.c:3876 access/transam/xlog.c:4698 +#: access/transam/xlog.c:5622 access/transam/xlogfuncs.c:687 +#: commands/copy.c:1810 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 +#: replication/logical/origin.c:655 replication/logical/origin.c:794 +#: replication/logical/reorderbuffer.c:3657 +#: replication/logical/snapbuild.c:1653 replication/logical/snapbuild.c:1851 +#: replication/slot.c:1513 replication/slot.c:1674 replication/walsender.c:558 +#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:704 +#: storage/file/fd.c:3425 storage/file/fd.c:3528 utils/cache/relmapper.c:753 #: utils/cache/relmapper.c:892 #, c-format msgid "could not close file \"%s\": %m" @@ -100,189 +100,276 @@ msgstr "" "현재 PostgreSQL 설치본과 이 데이터 디렉터리가 호환하지 않습니다." #: ../common/controldata_utils.c:197 ../common/controldata_utils.c:203 -#: ../common/file_utils.c:226 ../common/file_utils.c:285 -#: ../common/file_utils.c:359 access/heap/rewriteheap.c:1294 -#: access/transam/timeline.c:111 access/transam/timeline.c:236 -#: access/transam/timeline.c:333 access/transam/twophase.c:1249 -#: access/transam/xlog.c:3229 access/transam/xlog.c:3369 -#: access/transam/xlog.c:3410 access/transam/xlog.c:3608 -#: access/transam/xlog.c:3693 access/transam/xlog.c:3771 -#: access/transam/xlog.c:4592 access/transam/xlogutils.c:708 -#: postmaster/syslogger.c:1489 replication/basebackup.c:529 -#: replication/basebackup.c:1408 replication/logical/origin.c:708 -#: replication/logical/reorderbuffer.c:2311 -#: replication/logical/reorderbuffer.c:2593 -#: replication/logical/reorderbuffer.c:3315 -#: replication/logical/snapbuild.c:1613 replication/logical/snapbuild.c:1717 -#: replication/slot.c:1399 replication/walsender.c:486 -#: replication/walsender.c:2450 storage/file/copydir.c:161 -#: storage/file/fd.c:629 storage/file/fd.c:3295 storage/file/fd.c:3382 -#: storage/smgr/md.c:462 utils/cache/relmapper.c:724 -#: utils/cache/relmapper.c:836 utils/error/elog.c:1861 -#: utils/init/miscinit.c:1269 utils/init/miscinit.c:1404 -#: utils/init/miscinit.c:1481 utils/misc/guc.c:8023 utils/misc/guc.c:8055 +#: ../common/file_utils.c:224 ../common/file_utils.c:283 +#: ../common/file_utils.c:357 access/heap/rewriteheap.c:1267 +#: access/transam/timeline.c:111 access/transam/timeline.c:251 +#: access/transam/timeline.c:348 access/transam/twophase.c:1232 +#: access/transam/xlog.c:3277 access/transam/xlog.c:3417 +#: access/transam/xlog.c:3458 access/transam/xlog.c:3656 +#: access/transam/xlog.c:3741 access/transam/xlog.c:3844 +#: access/transam/xlog.c:4718 access/transam/xlogutils.c:807 +#: postmaster/syslogger.c:1488 replication/basebackup.c:621 +#: replication/basebackup.c:1593 replication/logical/origin.c:707 +#: replication/logical/reorderbuffer.c:2465 +#: replication/logical/reorderbuffer.c:2825 +#: replication/logical/reorderbuffer.c:3579 +#: replication/logical/snapbuild.c:1608 replication/logical/snapbuild.c:1712 +#: replication/slot.c:1594 replication/walsender.c:516 +#: replication/walsender.c:2516 storage/file/copydir.c:161 +#: storage/file/fd.c:679 storage/file/fd.c:3412 storage/file/fd.c:3499 +#: storage/smgr/md.c:475 utils/cache/relmapper.c:724 +#: utils/cache/relmapper.c:836 utils/error/elog.c:1858 +#: utils/init/miscinit.c:1316 utils/init/miscinit.c:1450 +#: utils/init/miscinit.c:1527 utils/misc/guc.c:8252 utils/misc/guc.c:8284 #, c-format msgid "could not open file \"%s\": %m" msgstr "\"%s\" 파일을 열 수 없음: %m" #: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 -#: access/transam/twophase.c:1701 access/transam/twophase.c:1710 -#: access/transam/xlog.c:10565 access/transam/xlog.c:10603 -#: access/transam/xlog.c:11016 access/transam/xlogfuncs.c:742 -#: postmaster/syslogger.c:1500 postmaster/syslogger.c:1513 +#: access/transam/twophase.c:1649 access/transam/twophase.c:1658 +#: access/transam/xlog.c:10878 access/transam/xlog.c:10916 +#: access/transam/xlog.c:11329 access/transam/xlogfuncs.c:741 +#: postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 #: utils/cache/relmapper.c:870 #, c-format msgid "could not write file \"%s\": %m" msgstr "\"%s\" 파일 쓰기 실패: %m" #: ../common/controldata_utils.c:239 ../common/controldata_utils.c:245 -#: ../common/file_utils.c:297 ../common/file_utils.c:367 -#: access/heap/rewriteheap.c:981 access/heap/rewriteheap.c:1202 -#: access/heap/rewriteheap.c:1305 access/transam/timeline.c:415 -#: access/transam/timeline.c:493 access/transam/twophase.c:1722 -#: access/transam/xlog.c:3320 access/transam/xlog.c:3489 -#: access/transam/xlog.c:4565 access/transam/xlog.c:10083 -#: access/transam/xlog.c:10109 replication/logical/snapbuild.c:1651 -#: replication/slot.c:1312 replication/slot.c:1409 storage/file/fd.c:646 -#: storage/file/fd.c:3403 storage/smgr/md.c:877 storage/smgr/md.c:910 -#: storage/sync/sync.c:395 utils/cache/relmapper.c:885 utils/misc/guc.c:7806 +#: ../common/file_utils.c:295 ../common/file_utils.c:365 +#: access/heap/rewriteheap.c:961 access/heap/rewriteheap.c:1175 +#: access/heap/rewriteheap.c:1278 access/transam/timeline.c:432 +#: access/transam/timeline.c:510 access/transam/twophase.c:1670 +#: access/transam/xlog.c:3368 access/transam/xlog.c:3537 +#: access/transam/xlog.c:4691 access/transam/xlog.c:10386 +#: access/transam/xlog.c:10413 replication/logical/snapbuild.c:1646 +#: replication/slot.c:1499 replication/slot.c:1604 storage/file/fd.c:696 +#: storage/file/fd.c:3520 storage/smgr/md.c:921 storage/smgr/md.c:962 +#: storage/sync/sync.c:396 utils/cache/relmapper.c:885 utils/misc/guc.c:8035 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "\"%s\" 파일 fsync 실패: %m" -#: ../common/exec.c:138 ../common/exec.c:255 ../common/exec.c:301 +#: ../common/exec.c:137 ../common/exec.c:254 ../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "현재 디렉터리를 파악할 수 없음: %m" -#: ../common/exec.c:157 +#: ../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "잘못된 바이너리 파일 \"%s\"" -#: ../common/exec.c:207 +#: ../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "\"%s\" 바이너리 파일을 읽을 수 없음" # translator: %s is IPv4, IPv6, or Unix -#: ../common/exec.c:215 +#: ../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "\"%s\" 실행 파일을 찾을 수 없음" -#: ../common/exec.c:271 ../common/exec.c:310 utils/init/miscinit.c:220 +#: ../common/exec.c:270 ../common/exec.c:309 utils/init/miscinit.c:395 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "\"%s\" 이름의 디렉터리로 이동할 수 없습니다: %m" -#: ../common/exec.c:288 access/transam/xlog.c:10438 -#: replication/basebackup.c:1246 utils/adt/misc.c:324 +#: ../common/exec.c:287 access/transam/xlog.c:10750 +#: replication/basebackup.c:1418 utils/adt/misc.c:337 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "\"%s\" 심볼릭 링크 파일을 읽을 수 없음: %m" -#: ../common/exec.c:541 +#: ../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "pclose 실패: %m" -#: ../common/exec.c:670 ../common/exec.c:715 ../common/exec.c:807 -#: ../common/psprintf.c:143 ../port/path.c:630 ../port/path.c:668 -#: ../port/path.c:685 access/transam/twophase.c:1394 access/transam/xlog.c:6363 -#: lib/dshash.c:246 lib/stringinfo.c:283 libpq/auth.c:1093 libpq/auth.c:1483 -#: libpq/auth.c:1551 libpq/auth.c:2069 libpq/be-secure-gssapi.c:480 -#: postmaster/bgworker.c:337 postmaster/bgworker.c:907 -#: postmaster/postmaster.c:2460 postmaster/postmaster.c:2482 -#: postmaster/postmaster.c:4074 postmaster/postmaster.c:4763 -#: postmaster/postmaster.c:4838 postmaster/postmaster.c:5515 -#: postmaster/postmaster.c:5876 -#: replication/libpqwalreceiver/libpqwalreceiver.c:257 -#: replication/logical/logical.c:179 storage/buffer/localbuf.c:436 -#: storage/file/fd.c:795 storage/file/fd.c:1191 storage/file/fd.c:1352 -#: storage/file/fd.c:2161 storage/ipc/procarray.c:1047 -#: storage/ipc/procarray.c:1542 storage/ipc/procarray.c:1549 -#: storage/ipc/procarray.c:1973 storage/ipc/procarray.c:2600 +#: ../common/exec.c:539 ../common/exec.c:584 ../common/exec.c:676 +#: ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 +#: ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1341 +#: access/transam/xlog.c:6493 lib/dshash.c:246 libpq/auth.c:1090 +#: libpq/auth.c:1491 libpq/auth.c:1559 libpq/auth.c:2089 +#: libpq/be-secure-gssapi.c:484 postmaster/bgworker.c:336 +#: postmaster/bgworker.c:893 postmaster/postmaster.c:2518 +#: postmaster/postmaster.c:2540 postmaster/postmaster.c:4166 +#: postmaster/postmaster.c:4868 postmaster/postmaster.c:4938 +#: postmaster/postmaster.c:5635 postmaster/postmaster.c:5995 +#: replication/libpqwalreceiver/libpqwalreceiver.c:276 +#: replication/logical/logical.c:176 replication/walsender.c:590 +#: storage/buffer/localbuf.c:442 storage/file/fd.c:834 storage/file/fd.c:1304 +#: storage/file/fd.c:1465 storage/file/fd.c:2270 storage/ipc/procarray.c:1045 +#: storage/ipc/procarray.c:1541 storage/ipc/procarray.c:1548 +#: storage/ipc/procarray.c:1972 storage/ipc/procarray.c:2597 #: utils/adt/cryptohashes.c:45 utils/adt/cryptohashes.c:65 -#: utils/adt/formatting.c:1595 utils/adt/formatting.c:1719 -#: utils/adt/formatting.c:1844 utils/adt/pg_locale.c:473 -#: utils/adt/pg_locale.c:637 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 -#: utils/hash/dynahash.c:448 utils/hash/dynahash.c:557 -#: utils/hash/dynahash.c:1069 utils/mb/mbutils.c:371 utils/mb/mbutils.c:398 -#: utils/mb/mbutils.c:727 utils/mb/mbutils.c:753 utils/misc/guc.c:4617 -#: utils/misc/guc.c:4633 utils/misc/guc.c:4646 utils/misc/guc.c:7784 -#: utils/misc/tzparser.c:468 utils/mmgr/aset.c:484 utils/mmgr/dsa.c:701 -#: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:249 -#: utils/mmgr/mcxt.c:796 utils/mmgr/mcxt.c:832 utils/mmgr/mcxt.c:870 -#: utils/mmgr/mcxt.c:908 utils/mmgr/mcxt.c:944 utils/mmgr/mcxt.c:975 -#: utils/mmgr/mcxt.c:1011 utils/mmgr/mcxt.c:1063 utils/mmgr/mcxt.c:1098 -#: utils/mmgr/mcxt.c:1133 utils/mmgr/slab.c:251 +#: utils/adt/formatting.c:1700 utils/adt/formatting.c:1824 +#: utils/adt/formatting.c:1949 utils/adt/pg_locale.c:484 +#: utils/adt/pg_locale.c:648 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 +#: utils/hash/dynahash.c:450 utils/hash/dynahash.c:559 +#: utils/hash/dynahash.c:1071 utils/mb/mbutils.c:401 utils/mb/mbutils.c:428 +#: utils/mb/mbutils.c:757 utils/mb/mbutils.c:783 utils/misc/guc.c:4846 +#: utils/misc/guc.c:4862 utils/misc/guc.c:4875 utils/misc/guc.c:8013 +#: utils/misc/tzparser.c:467 utils/mmgr/aset.c:475 utils/mmgr/dsa.c:701 +#: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:233 +#: utils/mmgr/mcxt.c:821 utils/mmgr/mcxt.c:857 utils/mmgr/mcxt.c:895 +#: utils/mmgr/mcxt.c:933 utils/mmgr/mcxt.c:969 utils/mmgr/mcxt.c:1000 +#: utils/mmgr/mcxt.c:1036 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1123 +#: utils/mmgr/mcxt.c:1158 utils/mmgr/slab.c:235 #, c-format msgid "out of memory" msgstr "메모리 부족" #: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 -#: ../common/fe_memutils.c:98 ../common/psprintf.c:145 ../port/path.c:632 -#: ../port/path.c:670 ../port/path.c:687 utils/misc/ps_status.c:176 -#: utils/misc/ps_status.c:184 utils/misc/ps_status.c:214 -#: utils/misc/ps_status.c:222 +#: ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 +#: ../common/psprintf.c:145 ../port/path.c:632 ../port/path.c:670 +#: ../port/path.c:687 utils/misc/ps_status.c:181 utils/misc/ps_status.c:189 +#: utils/misc/ps_status.c:219 utils/misc/ps_status.c:227 #, c-format msgid "out of memory\n" msgstr "메모리 부족\n" -#: ../common/fe_memutils.c:92 +#: ../common/fe_memutils.c:92 ../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "null 포인터를 중복할 수 없음 (내부 오류)\n" -#: ../common/file_utils.c:81 ../common/file_utils.c:183 -#: access/transam/twophase.c:1261 access/transam/xlog.c:10541 -#: access/transam/xlog.c:10579 access/transam/xlog.c:10796 -#: access/transam/xlogarchive.c:111 access/transam/xlogarchive.c:271 -#: commands/copy.c:1944 commands/copy.c:3559 commands/extension.c:3330 -#: commands/tablespace.c:796 commands/tablespace.c:887 -#: replication/basebackup.c:355 replication/basebackup.c:535 -#: replication/basebackup.c:607 replication/logical/snapbuild.c:1527 -#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1703 -#: storage/file/fd.c:2980 storage/file/fd.c:3162 storage/file/fd.c:3247 +#: ../common/file_utils.c:79 ../common/file_utils.c:181 +#: access/transam/twophase.c:1244 access/transam/xlog.c:10854 +#: access/transam/xlog.c:10892 access/transam/xlog.c:11109 +#: access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:226 +#: commands/copy.c:1938 commands/copy.c:3505 commands/extension.c:3425 +#: commands/tablespace.c:795 commands/tablespace.c:886 +#: replication/basebackup.c:444 replication/basebackup.c:627 +#: replication/basebackup.c:700 replication/logical/snapbuild.c:1522 +#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1816 +#: storage/file/fd.c:3096 storage/file/fd.c:3278 storage/file/fd.c:3364 #: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 -#: utils/adt/genfile.c:133 utils/adt/genfile.c:386 guc-file.l:1062 +#: utils/adt/genfile.c:416 utils/adt/genfile.c:642 guc-file.l:1061 #, c-format msgid "could not stat file \"%s\": %m" msgstr "\"%s\" 파일의 상태값을 알 수 없음: %m" -#: ../common/file_utils.c:160 ../common/pgfnames.c:48 commands/tablespace.c:719 -#: commands/tablespace.c:729 postmaster/postmaster.c:1474 -#: storage/file/fd.c:2562 storage/file/reinit.c:122 utils/adt/genfile.c:487 -#: utils/adt/genfile.c:565 utils/adt/misc.c:243 utils/misc/tzparser.c:339 +#: ../common/file_utils.c:158 ../common/pgfnames.c:48 commands/tablespace.c:718 +#: commands/tablespace.c:728 postmaster/postmaster.c:1509 +#: storage/file/fd.c:2673 storage/file/reinit.c:122 utils/adt/misc.c:259 +#: utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "\"%s\" 디렉터리 열 수 없음: %m" -#: ../common/file_utils.c:194 ../common/pgfnames.c:69 storage/file/fd.c:2574 +#: ../common/file_utils.c:192 ../common/pgfnames.c:69 storage/file/fd.c:2685 #, c-format msgid "could not read directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 읽을 수 없음: %m" -#: ../common/file_utils.c:377 access/transam/xlogarchive.c:456 -#: postmaster/syslogger.c:1524 replication/logical/snapbuild.c:1670 -#: replication/slot.c:598 replication/slot.c:1210 replication/slot.c:1332 -#: storage/file/fd.c:664 storage/file/fd.c:759 utils/time/snapmgr.c:1350 +#: ../common/file_utils.c:375 access/transam/xlogarchive.c:411 +#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1665 +#: replication/slot.c:650 replication/slot.c:1385 replication/slot.c:1527 +#: storage/file/fd.c:714 utils/time/snapmgr.c:1350 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m" -#: ../common/logging.c:188 +#: ../common/jsonapi.c:1064 +#, c-format +msgid "Escape sequence \"\\%s\" is invalid." +msgstr "잘못된 이스케이프 조합: \"\\%s\"" + +#: ../common/jsonapi.c:1067 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "0x%02x 값의 문자는 이스케이프 처리를 해야함." + +#: ../common/jsonapi.c:1070 +#, c-format +msgid "Expected end of input, but found \"%s\"." +msgstr "입력 자료의 끝을 기대했는데, \"%s\" 값이 더 있음." + +#: ../common/jsonapi.c:1073 +#, c-format +msgid "Expected array element or \"]\", but found \"%s\"." +msgstr "\"]\" 가 필요한데 \"%s\"이(가) 있음" + +#: ../common/jsonapi.c:1076 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%s\"." +msgstr "\",\" 또는 \"]\"가 필요한데 \"%s\"이(가) 있음" + +#: ../common/jsonapi.c:1079 +#, c-format +msgid "Expected \":\", but found \"%s\"." +msgstr "\":\"가 필요한데 \"%s\"이(가) 있음" + +#: ../common/jsonapi.c:1082 +#, c-format +msgid "Expected JSON value, but found \"%s\"." +msgstr "JSON 값을 기대했는데, \"%s\" 값임" + +#: ../common/jsonapi.c:1085 +msgid "The input string ended unexpectedly." +msgstr "입력 문자열이 예상치 않게 끝났음." + +#: ../common/jsonapi.c:1087 +#, c-format +msgid "Expected string or \"}\", but found \"%s\"." +msgstr "\"}\"가 필요한데 \"%s\"이(가) 있음" + +#: ../common/jsonapi.c:1090 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%s\"." +msgstr "\",\" 또는 \"}\"가 필요한데 \"%s\"이(가) 있음" + +#: ../common/jsonapi.c:1093 +#, c-format +msgid "Expected string, but found \"%s\"." +msgstr "문자열 값을 기대했는데, \"%s\" 값임" + +#: ../common/jsonapi.c:1096 +#, c-format +msgid "Token \"%s\" is invalid." +msgstr "잘못된 토큰: \"%s\"" + +#: ../common/jsonapi.c:1099 jsonpath_scan.l:499 +#, c-format +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 값은 text 형으로 변환할 수 없음." + +#: ../common/jsonapi.c:1101 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "\"\\u\" 표기법은 뒤에 4개의 16진수가 와야합니다." + +#: ../common/jsonapi.c:1104 +msgid "" +"Unicode escape values cannot be used for code point values above 007F when " +"the encoding is not UTF8." +msgstr "" +"서버 인코딩이 UTF8이 아닌 경우 007F보다 큰 코드 지점 값에는 유니코드 이스케이" +"프 값을 사용할 수 없음" + +#: ../common/jsonapi.c:1106 jsonpath_scan.l:520 +#, c-format +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "유니코드 상위 surrogate(딸림 코드)는 상위 딸림 코드 뒤에 오면 안됨." + +#: ../common/jsonapi.c:1108 jsonpath_scan.l:531 jsonpath_scan.l:541 +#: jsonpath_scan.l:583 +#, c-format +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "유니코드 상위 surrogate(딸림 코드) 뒤에는 하위 딸림 코드가 있어야 함." + +#: ../common/logging.c:236 #, c-format msgid "fatal: " msgstr "심각: " -#: ../common/logging.c:195 +#: ../common/logging.c:243 #, c-format msgid "error: " msgstr "오류: " -#: ../common/logging.c:202 +#: ../common/logging.c:250 #, c-format msgid "warning: " msgstr "경고: " @@ -292,53 +379,58 @@ msgstr "경고: " msgid "could not close directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 닫을 수 없음: %m" -#: ../common/relpath.c:58 +#: ../common/relpath.c:61 #, c-format msgid "invalid fork name" msgstr "잘못된 포크 이름" -#: ../common/relpath.c:59 +#: ../common/relpath.c:62 #, c-format msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "유효한 포크 이름은 \"main\", \"fsm\" 및 \"vm\"입니다." -#: ../common/restricted_token.c:69 +#: ../common/restricted_token.c:64 libpq/auth.c:1521 libpq/auth.c:2520 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "경고: 이 운영체제에서 restricted 토큰을 만들 수 없음" +msgid "could not load library \"%s\": error code %lu" +msgstr "\"%s\" 라이브러리를 불러 올 수 없음: 오류 코드 %lu" -#: ../common/restricted_token.c:78 +#: ../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "이 운영체제에서 restricted 토큰을 만들 수 없음: 오류 코드 %lu" + +#: ../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "프로세스 토큰을 열 수 없음: 오류 코드 %lu" -#: ../common/restricted_token.c:91 +#: ../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "SID를 할당할 수 없음: 오류 코드 %lu" -#: ../common/restricted_token.c:110 +#: ../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "restricted 토큰을 만들 수 없음: 오류 코드 %lu" -#: ../common/restricted_token.c:131 +#: ../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "\"%s\" 명령용 프로세스를 시작할 수 없음: 오류 코드 %lu" -#: ../common/restricted_token.c:169 +#: ../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "restricted 토큰으로 재실행할 수 없음: 오류 코드 %lu" -#: ../common/restricted_token.c:185 +#: ../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "하위 프로세스의 종료 코드를 구할 수 없음: 오류 코드 %lu" -#: ../common/rmtree.c:79 replication/basebackup.c:1005 -#: replication/basebackup.c:1175 +#: ../common/rmtree.c:79 replication/basebackup.c:1171 +#: replication/basebackup.c:1347 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "파일 또는 디렉터리 \"%s\"의 상태를 확인할 수 없음: %m" @@ -349,17 +441,33 @@ msgid "could not remove file or directory \"%s\": %m" msgstr "\"%s\" 디렉터리나 파일을 삭제할 수 없음: %m" # # nonun 부분 begin -#: ../common/saslprep.c:1093 +#: ../common/saslprep.c:1087 #, c-format msgid "password too long" msgstr "비밀번호가 너무 깁니다." +#: ../common/stringinfo.c:306 +#, c-format +msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." +msgstr "%d바이트가 포함된 문자열 버퍼를 %d바이트 더 확장할 수 없습니다." + +#: ../common/stringinfo.c:310 +#, c-format +msgid "" +"out of memory\n" +"\n" +"Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" +msgstr "" +"메모리 부족\n" +"\n" +"%d 바이트가 포함된 문자열 버퍼를 %d 바이트 더 확장할 수 없습니다.\n" + #: ../common/username.c:43 #, c-format msgid "could not look up effective user ID %ld: %s" msgstr "%ld UID를 찾을 수 없음: %s" -#: ../common/username.c:45 libpq/auth.c:2016 +#: ../common/username.c:45 libpq/auth.c:2027 msgid "user does not exist" msgstr "사용자 없음" @@ -398,12 +506,12 @@ msgstr "하위 프로그램은 %d 신호에 의해서 종료되었습니다: %s" msgid "child process exited with unrecognized status %d" msgstr "하위 프로그램 프로그램은 예상치 못한 %d 상태값으로 종료되었습니다" -#: ../port/chklocale.c:288 +#: ../port/chklocale.c:307 #, c-format msgid "could not determine encoding for codeset \"%s\"" msgstr "\"%s\" 코드 세트 환경에 사용할 인코딩을 결정할 수 없습니다" -#: ../port/chklocale.c:409 ../port/chklocale.c:415 +#: ../port/chklocale.c:428 ../port/chklocale.c:434 #, c-format msgid "could not determine encoding for locale \"%s\": codeset is \"%s\"" msgstr "" @@ -481,68 +589,63 @@ msgstr "PowerUsers 그룹의 SID를 가져올 수 없음: 오류 코드 %lu\n" msgid "could not check access token membership: error code %lu\n" msgstr "토큰 맴버쉽 접근을 확인 할 수 없음: 오류 코드 %lu\n" -#: access/brin/brin.c:204 +#: access/brin/brin.c:210 #, c-format msgid "" "request for BRIN range summarization for index \"%s\" page %u was not " "recorded" msgstr "\"%s\" 인덱스에서 BRIN 범위 요약 요청이 기록되지 못함, 해당 페이지: %u" -#: access/brin/brin.c:881 access/brin/brin.c:958 access/gin/ginfast.c:1041 -#: access/transam/xlog.c:10218 access/transam/xlog.c:10747 -#: access/transam/xlogfuncs.c:289 access/transam/xlogfuncs.c:316 -#: access/transam/xlogfuncs.c:355 access/transam/xlogfuncs.c:376 -#: access/transam/xlogfuncs.c:397 access/transam/xlogfuncs.c:467 -#: access/transam/xlogfuncs.c:524 +#: access/brin/brin.c:873 access/brin/brin.c:950 access/gin/ginfast.c:1035 +#: access/transam/xlog.c:10522 access/transam/xlog.c:11060 +#: access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 +#: access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 +#: access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 +#: access/transam/xlogfuncs.c:509 #, c-format msgid "recovery is in progress" msgstr "복구 작업 진행 중" -#: access/brin/brin.c:882 access/brin/brin.c:959 +#: access/brin/brin.c:874 access/brin/brin.c:951 #, c-format msgid "BRIN control functions cannot be executed during recovery." msgstr "BRIN 제어 함수는 복구 작업 중에는 실행 될 수 없음" -#: access/brin/brin.c:890 access/brin/brin.c:967 +#: access/brin/brin.c:882 access/brin/brin.c:959 #, c-format msgid "block number out of range: %s" msgstr "블록 번호가 범위를 벗어남: %s" -#: access/brin/brin.c:913 access/brin/brin.c:990 +#: access/brin/brin.c:905 access/brin/brin.c:982 #, c-format msgid "\"%s\" is not a BRIN index" msgstr "\"%s\" 개체는 BRIN 인덱스가 아닙니다" -#: access/brin/brin.c:929 access/brin/brin.c:1006 +#: access/brin/brin.c:921 access/brin/brin.c:998 #, c-format msgid "could not open parent table of index %s" msgstr "%s 인덱스에 대한 상위 테이블을 열 수 없음" -#: access/brin/brin_pageops.c:77 access/brin/brin_pageops.c:363 -#: access/brin/brin_pageops.c:844 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1443 access/spgist/spgdoinsert.c:1957 +#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 +#: access/brin/brin_pageops.c:843 access/gin/ginentrypage.c:110 +#: access/gist/gist.c:1435 access/spgist/spgdoinsert.c:1957 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "인덱스 행 크기 %zu이(가) 최대값 %zu(\"%s\" 인덱스)을(를) 초과함" -#: access/brin/brin_revmap.c:382 access/brin/brin_revmap.c:388 +#: access/brin/brin_revmap.c:392 access/brin/brin_revmap.c:398 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "BRIN 인덱스 속상: 범위 지도가 연결되지 않음" -#: access/brin/brin_revmap.c:404 -#, c-format -msgid "leftover placeholder tuple detected in BRIN index \"%s\", deleting" -msgstr "\"%s\" BRIN 인덱스에서 leftover placeholder 튜플이 발견되었음, 지움" - #: access/brin/brin_revmap.c:601 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "예상치 못한 0x%04X 페이지 타입: \"%s\" BRIN 인덱스 %u 블록" -#: access/brin/brin_validate.c:116 access/gin/ginvalidate.c:149 -#: access/gist/gistvalidate.c:146 access/hash/hashvalidate.c:132 -#: access/nbtree/nbtvalidate.c:110 access/spgist/spgvalidate.c:165 +#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:151 +#: access/gist/gistvalidate.c:149 access/hash/hashvalidate.c:136 +#: access/nbtree/nbtvalidate.c:117 access/spgist/spgvalidate.c:168 #, c-format msgid "" "operator family \"%s\" of access method %s contains function %s with invalid " @@ -551,9 +654,9 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 포함된 %s 함수가 잘못된 지원 번호 %d " "로 지정되었습니다." -#: access/brin/brin_validate.c:132 access/gin/ginvalidate.c:161 -#: access/gist/gistvalidate.c:158 access/hash/hashvalidate.c:115 -#: access/nbtree/nbtvalidate.c:122 access/spgist/spgvalidate.c:177 +#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:163 +#: access/gist/gistvalidate.c:161 access/hash/hashvalidate.c:115 +#: access/nbtree/nbtvalidate.c:129 access/spgist/spgvalidate.c:180 #, c-format msgid "" "operator family \"%s\" of access method %s contains function %s with wrong " @@ -562,9 +665,9 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 포함된 %s 함수가 잘못된 signature 지원 " "번호 %d 로 지정되었습니다." -#: access/brin/brin_validate.c:154 access/gin/ginvalidate.c:180 -#: access/gist/gistvalidate.c:178 access/hash/hashvalidate.c:153 -#: access/nbtree/nbtvalidate.c:142 access/spgist/spgvalidate.c:197 +#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:182 +#: access/gist/gistvalidate.c:181 access/hash/hashvalidate.c:157 +#: access/nbtree/nbtvalidate.c:149 access/spgist/spgvalidate.c:200 #, c-format msgid "" "operator family \"%s\" of access method %s contains operator %s with invalid " @@ -573,9 +676,9 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 포함된 %s 연산자의 %d 번 전략 번호가 잘" "못되었습니다." -#: access/brin/brin_validate.c:183 access/gin/ginvalidate.c:193 -#: access/hash/hashvalidate.c:166 access/nbtree/nbtvalidate.c:155 -#: access/spgist/spgvalidate.c:213 +#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:195 +#: access/hash/hashvalidate.c:170 access/nbtree/nbtvalidate.c:162 +#: access/spgist/spgvalidate.c:216 #, c-format msgid "" "operator family \"%s\" of access method %s contains invalid ORDER BY " @@ -584,9 +687,9 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 %s 연산자가 잘못된 ORDER BY 명세를 사용" "합니다." -#: access/brin/brin_validate.c:196 access/gin/ginvalidate.c:206 -#: access/gist/gistvalidate.c:226 access/hash/hashvalidate.c:179 -#: access/nbtree/nbtvalidate.c:168 access/spgist/spgvalidate.c:229 +#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:208 +#: access/gist/gistvalidate.c:229 access/hash/hashvalidate.c:183 +#: access/nbtree/nbtvalidate.c:175 access/spgist/spgvalidate.c:232 #, c-format msgid "" "operator family \"%s\" of access method %s contains operator %s with wrong " @@ -594,8 +697,8 @@ msgid "" msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 %s 연산자가 잘못된 기호를 사용합니다." -#: access/brin/brin_validate.c:234 access/hash/hashvalidate.c:219 -#: access/nbtree/nbtvalidate.c:226 access/spgist/spgvalidate.c:256 +#: access/brin/brin_validate.c:236 access/hash/hashvalidate.c:223 +#: access/nbtree/nbtvalidate.c:233 access/spgist/spgvalidate.c:259 #, c-format msgid "" "operator family \"%s\" of access method %s is missing operator(s) for types " @@ -603,7 +706,7 @@ msgid "" msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에는 %s, %s 자료형용 연산자가 없습니다" -#: access/brin/brin_validate.c:244 +#: access/brin/brin_validate.c:246 #, c-format msgid "" "operator family \"%s\" of access method %s is missing support function(s) " @@ -612,128 +715,146 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에는 %s, %s 자료형용으로 쓸 함수가 없습니" "다" -#: access/brin/brin_validate.c:257 access/hash/hashvalidate.c:233 -#: access/nbtree/nbtvalidate.c:250 access/spgist/spgvalidate.c:289 +#: access/brin/brin_validate.c:259 access/hash/hashvalidate.c:237 +#: access/nbtree/nbtvalidate.c:257 access/spgist/spgvalidate.c:294 #, c-format msgid "operator class \"%s\" of access method %s is missing operator(s)" msgstr "\"%s\" 연산자 클래스(접근 방법: %s)에 연산자가 빠졌습니다" -#: access/brin/brin_validate.c:268 access/gin/ginvalidate.c:247 -#: access/gist/gistvalidate.c:266 +#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:250 +#: access/gist/gistvalidate.c:270 #, c-format msgid "" "operator class \"%s\" of access method %s is missing support function %d" msgstr "\"%s\" 연산자 클래스(접근 방법: %s)에 %d 지원 함수가 빠졌습니다." +#: access/common/attmap.c:122 +#, c-format +msgid "Returned type %s does not match expected type %s in column %d." +msgstr "" +"반환 자료형으로 %s 형을 지정했지만, 칼럼은 %s 자료형입니다. 해당 칼럼: %d 번" +"째 칼럼" + +#: access/common/attmap.c:150 +#, c-format +msgid "" +"Number of returned columns (%d) does not match expected column count (%d)." +msgstr "반환할 칼럼 수(%d)와 예상되는 칼럼수(%d)가 다릅니다." + +#: access/common/attmap.c:229 access/common/attmap.c:241 +#, c-format +msgid "could not convert row type" +msgstr "로우 자료형을 변환 할 수 없음" + +#: access/common/attmap.c:230 +#, c-format +msgid "" +"Attribute \"%s\" of type %s does not match corresponding attribute of type " +"%s." +msgstr "" +" \"%s\" 속성(대상 자료형 %s)이 %s 자료형의 속성 가운데 관련된 것이 없습니다" + +#: access/common/attmap.c:242 +#, c-format +msgid "Attribute \"%s\" of type %s does not exist in type %s." +msgstr "\"%s\" 속성(대상 자료형 %s)이 %s 자료형에는 없습니다." + #: access/common/heaptuple.c:1036 access/common/heaptuple.c:1371 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "칼럼 개수(%d)가 최대값(%d)을 초과했습니다" -#: access/common/indextuple.c:63 +#: access/common/indextuple.c:70 #, c-format msgid "number of index columns (%d) exceeds limit (%d)" msgstr "인덱스 칼럼 개수(%d)가 최대값(%d)을 초과했습니다" -#: access/common/indextuple.c:179 access/spgist/spgutils.c:691 +#: access/common/indextuple.c:187 access/spgist/spgutils.c:703 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "인덱스 행(row)은 %zu 바이트를 필요로 함, 최대 크기는 %zu" #: access/common/printtup.c:369 tcop/fastpath.c:180 tcop/fastpath.c:530 -#: tcop/postgres.c:1834 +#: tcop/postgres.c:1904 #, c-format msgid "unsupported format code: %d" msgstr "지원하지 않는 포맷 코드: %d" -#: access/common/reloptions.c:579 +#: access/common/reloptions.c:506 +msgid "Valid values are \"on\", \"off\", and \"auto\"." +msgstr "유효한 값: \"on\", \"off\", \"auto\"" + +#: access/common/reloptions.c:517 +msgid "Valid values are \"local\" and \"cascaded\"." +msgstr "사용할 수 있는 값은 \"local\" 또는 \"cascaded\" 입니다" + +#: access/common/reloptions.c:665 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "사용자 정의 관계 매개 변수 형식 제한을 초과함" -#: access/common/reloptions.c:867 +#: access/common/reloptions.c:1208 #, c-format msgid "RESET must not include values for parameters" msgstr "매개 변수의 값으로 RESET은 올 수 없음" -#: access/common/reloptions.c:899 +#: access/common/reloptions.c:1240 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "\"%s\" 매개 변수 네임스페이스를 인식할 수 없음" -#: access/common/reloptions.c:936 utils/misc/guc.c:11715 +#: access/common/reloptions.c:1277 utils/misc/guc.c:12004 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "WITH OIDS 테이블을 지원하지 않음" -#: access/common/reloptions.c:1154 +#: access/common/reloptions.c:1447 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "알 수 없는 환경 설정 이름입니다 \"%s\"" -#: access/common/reloptions.c:1184 +#: access/common/reloptions.c:1559 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "\"%s\" 매개 변수가 여러 번 지정됨" -#: access/common/reloptions.c:1200 +#: access/common/reloptions.c:1575 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "\"%s\" 부울 옵션 값이 잘못됨: %s" -#: access/common/reloptions.c:1212 +#: access/common/reloptions.c:1587 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "\"%s\" 정수 옵션 값이 잘못됨: %s" -#: access/common/reloptions.c:1218 access/common/reloptions.c:1238 +#: access/common/reloptions.c:1593 access/common/reloptions.c:1613 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "값 %s은(는) \"%s\" 옵션 범위를 벗어남" -#: access/common/reloptions.c:1220 +#: access/common/reloptions.c:1595 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "유효한 값은 \"%d\"에서 \"%d\" 사이입니다." -#: access/common/reloptions.c:1232 +#: access/common/reloptions.c:1607 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "\"%s\" 부동 소수점 옵션 값이 잘못됨: %s" -#: access/common/reloptions.c:1240 +#: access/common/reloptions.c:1615 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "유효한 값은 \"%f\"에서 \"%f\" 사이입니다." -#: access/common/tupconvert.c:107 -#, c-format -msgid "Returned type %s does not match expected type %s in column %d." -msgstr "" -"반환 자료형으로 %s 형을 지정했지만, 칼럼은 %s 자료형입니다. 해당 칼럼: %d 번" -"째 칼럼" - -#: access/common/tupconvert.c:135 -#, c-format -msgid "" -"Number of returned columns (%d) does not match expected column count (%d)." -msgstr "반환할 칼럼 수(%d)와 예상되는 칼럼수(%d)가 다릅니다." - -#: access/common/tupconvert.c:311 -#, c-format -msgid "" -"Attribute \"%s\" of type %s does not match corresponding attribute of type " -"%s." -msgstr "" -" \"%s\" 속성(대상 자료형 %s)이 %s 자료형의 속성 가운데 관련된 것이 없습니다" - -#: access/common/tupconvert.c:323 +#: access/common/reloptions.c:1637 #, c-format -msgid "Attribute \"%s\" of type %s does not exist in type %s." -msgstr "\"%s\" 속성(대상 자료형 %s)이 %s 자료형에는 없습니다." +msgid "invalid value for enum option \"%s\": %s" +msgstr "\"%s\" enum 옵션 값이 잘못됨: %s" -#: access/common/tupdesc.c:842 parser/parse_clause.c:779 -#: parser/parse_relation.c:1578 +#: access/common/tupdesc.c:842 parser/parse_clause.c:772 +#: parser/parse_relation.c:1803 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "\"%s\" 칼럼은 SETOF를 지정할 수 없습니다" @@ -748,41 +869,46 @@ msgstr "포스팅 목록이 너무 깁니다" msgid "Reduce maintenance_work_mem." msgstr "maintenance_work_mem 설정값을 줄이세요." -#: access/gin/ginfast.c:1042 +#: access/gin/ginfast.c:1036 #, c-format msgid "GIN pending list cannot be cleaned up during recovery." msgstr "GIN 팬딩 목록은 복구 작업 중에는 정리될 수 없습니다." -#: access/gin/ginfast.c:1049 +#: access/gin/ginfast.c:1043 #, c-format msgid "\"%s\" is not a GIN index" msgstr "\"%s\" 개체는 GIN 인덱스가 아닙니다" -#: access/gin/ginfast.c:1060 +#: access/gin/ginfast.c:1054 #, c-format msgid "cannot access temporary indexes of other sessions" msgstr "다른 세션의 임시 인덱스는 접근할 수 없음" -#: access/gin/ginscan.c:402 +#: access/gin/ginget.c:270 access/nbtree/nbtinsert.c:745 +#, c-format +msgid "failed to re-find tuple within index \"%s\"" +msgstr "\"%s\" 인덱스에서 튜플 재검색 실패" + +#: access/gin/ginscan.c:431 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" msgstr "" "GIN 인덱스가 옛날 버전이어서 인덱스 전체 탐색, null 탐색 기능을 사용할 수 없" "습니다." -#: access/gin/ginscan.c:403 +#: access/gin/ginscan.c:432 #, c-format msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "이 문제를 고치려면, 다음 명령을 수행하세요: REINDEX INDEX \"%s\"" -#: access/gin/ginutil.c:139 executor/execExpr.c:1860 -#: utils/adt/arrayfuncs.c:3789 utils/adt/arrayfuncs.c:6416 +#: access/gin/ginutil.c:144 executor/execExpr.c:1862 +#: utils/adt/arrayfuncs.c:3790 utils/adt/arrayfuncs.c:6418 #: utils/adt/rowtypes.c:936 #, c-format msgid "could not identify a comparison function for type %s" msgstr "%s 자료형에서 사용할 비교함수를 찾을 수 없습니다." -#: access/gin/ginvalidate.c:93 access/gist/gistvalidate.c:93 +#: access/gin/ginvalidate.c:92 access/gist/gistvalidate.c:93 #: access/hash/hashvalidate.c:99 access/spgist/spgvalidate.c:99 #, c-format msgid "" @@ -792,7 +918,7 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 서로 다른 양쪽 입력 자료형 인자를 사용" "할 수 있는 %s 지원 함수가 포함되어 있음" -#: access/gin/ginvalidate.c:257 +#: access/gin/ginvalidate.c:260 #, c-format msgid "" "operator class \"%s\" of access method %s is missing support function %d or " @@ -800,12 +926,12 @@ msgid "" msgstr "" "\"%s\" 연산자 클래스(접근 방법: %s)에는 %d 또는 %d 지원 함수가 빠졌습니다" -#: access/gist/gist.c:749 access/gist/gistvacuum.c:434 +#: access/gist/gist.c:753 access/gist/gistvacuum.c:408 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "\"%s\" 인덱스에 잘못된 내부 튜플이 있다고 확인되었습니다." -#: access/gist/gist.c:751 access/gist/gistvacuum.c:436 +#: access/gist/gist.c:755 access/gist/gistvacuum.c:410 #, c-format msgid "" "This is caused by an incomplete page split at crash recovery before " @@ -814,30 +940,15 @@ msgstr "" "이 문제는 PostgreSQL 9.1 버전으로 업그레이드 하기 전에 장애 복구 처리에서 잘" "못된 페이지 분리 때문에 발생했습니다." -#: access/gist/gist.c:752 access/gist/gistutil.c:787 access/gist/gistutil.c:798 -#: access/gist/gistvacuum.c:437 access/hash/hashutil.c:241 -#: access/hash/hashutil.c:252 access/hash/hashutil.c:264 -#: access/hash/hashutil.c:285 access/nbtree/nbtpage.c:708 -#: access/nbtree/nbtpage.c:719 +#: access/gist/gist.c:756 access/gist/gistutil.c:786 access/gist/gistutil.c:797 +#: access/gist/gistvacuum.c:411 access/hash/hashutil.c:227 +#: access/hash/hashutil.c:238 access/hash/hashutil.c:250 +#: access/hash/hashutil.c:271 access/nbtree/nbtpage.c:741 +#: access/nbtree/nbtpage.c:752 #, c-format msgid "Please REINDEX it." msgstr "REINDEX 명령으로 다시 인덱스를 만드세요" -#: access/gist/gistbuild.c:253 -#, c-format -msgid "invalid value for \"buffering\" option" -msgstr "\"buffering\" 옵션 값이 올바르지 않습니다" - -#: access/gist/gistbuild.c:254 -#, c-format -msgid "Valid values are \"on\", \"off\", and \"auto\"." -msgstr "유효한 값: \"on\", \"off\", \"auto\"" - -#: access/gist/gistbuildbuffers.c:779 utils/sort/logtape.c:255 -#, c-format -msgid "could not write block %ld of temporary file: %m" -msgstr "임시파일의 %ld 블럭을 쓸 수 없음: %m" - #: access/gist/gistsplit.c:446 #, c-format msgid "picksplit method for column %d of index \"%s\" failed" @@ -852,19 +963,19 @@ msgstr "" "인덱스가 최적화되지 않았습니다. 최적화하려면 개발자에게 문의하거나, CREATE " "INDEX 명령에서 해당 칼럼을 두 번째 인덱스로 사용하십시오." -#: access/gist/gistutil.c:784 access/hash/hashutil.c:238 -#: access/nbtree/nbtpage.c:705 +#: access/gist/gistutil.c:783 access/hash/hashutil.c:224 +#: access/nbtree/nbtpage.c:738 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "\"%s\" 인덱스의 %u번째 블럭에서 예상치 않은 zero page가 있습니다" -#: access/gist/gistutil.c:795 access/hash/hashutil.c:249 -#: access/hash/hashutil.c:261 access/nbtree/nbtpage.c:716 +#: access/gist/gistutil.c:794 access/hash/hashutil.c:235 +#: access/hash/hashutil.c:247 access/nbtree/nbtpage.c:749 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "\"%s\" 인덱스트 %u번째 블럭이 속상되었습니다" -#: access/gist/gistvalidate.c:196 +#: access/gist/gistvalidate.c:199 #, c-format msgid "" "operator family \"%s\" of access method %s contains unsupported ORDER BY " @@ -873,7 +984,7 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에 %s 연산자가 지원하지 않는 ORDER BY 명세" "를 사용합니다." -#: access/gist/gistvalidate.c:207 +#: access/gist/gistvalidate.c:210 #, c-format msgid "" "operator family \"%s\" of access method %s contains incorrect ORDER BY " @@ -883,18 +994,19 @@ msgstr "" "합니다." #: access/hash/hashfunc.c:255 access/hash/hashfunc.c:311 -#: utils/adt/varchar.c:994 utils/adt/varchar.c:1054 +#: utils/adt/varchar.c:993 utils/adt/varchar.c:1053 #, c-format msgid "could not determine which collation to use for string hashing" msgstr "문자열 해시 작업에 사용할 정렬규칙(collation)을 결정할 수 없음" -#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:704 -#: catalog/heap.c:710 commands/createas.c:207 commands/createas.c:491 -#: commands/indexcmds.c:1715 commands/tablecmds.c:15331 commands/view.c:105 -#: regex/regc_pg_locale.c:263 utils/adt/formatting.c:1562 -#: utils/adt/formatting.c:1686 utils/adt/formatting.c:1811 utils/adt/like.c:194 -#: utils/adt/like_support.c:968 utils/adt/varchar.c:734 utils/adt/varchar.c:995 -#: utils/adt/varchar.c:1055 utils/adt/varlena.c:1464 +#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:702 +#: catalog/heap.c:708 commands/createas.c:206 commands/createas.c:489 +#: commands/indexcmds.c:1814 commands/tablecmds.c:16035 commands/view.c:86 +#: parser/parse_utilcmd.c:4203 regex/regc_pg_locale.c:263 +#: utils/adt/formatting.c:1667 utils/adt/formatting.c:1791 +#: utils/adt/formatting.c:1916 utils/adt/like.c:194 +#: utils/adt/like_support.c:1003 utils/adt/varchar.c:733 +#: utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1476 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "명시적으로 정렬 규칙을 지정하려면 COLLATE 절을 사용하세요." @@ -905,7 +1017,7 @@ msgid "index row size %zu exceeds hash maximum %zu" msgstr "인덱스 행 크기가 초과됨: 현재값 %zu, 최대값 %zu" #: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:1961 -#: access/spgist/spgutils.c:752 +#: access/spgist/spgutils.c:764 #, c-format msgid "Values larger than a buffer page cannot be indexed." msgstr "버퍼 페이지보다 큰 값은 인덱싱할 수 없습니다." @@ -925,134 +1037,124 @@ msgstr "\"%s\" 해시 인덱스에서 오버플로우 페이지 초과" msgid "hash indexes do not support whole-index scans" msgstr "해시 인덱스는 whole-index scan을 지원하지 않음" -#: access/hash/hashutil.c:277 +#: access/hash/hashutil.c:263 #, c-format msgid "index \"%s\" is not a hash index" msgstr "\"%s\" 인덱스는 해시 인덱스가 아님" -#: access/hash/hashutil.c:283 +#: access/hash/hashutil.c:269 #, c-format msgid "index \"%s\" has wrong hash version" msgstr "\"%s\" 인덱스는 잘못된 해시 버전임" -#: access/hash/hashvalidate.c:191 +#: access/hash/hashvalidate.c:195 #, c-format msgid "" "operator family \"%s\" of access method %s lacks support function for " "operator %s" msgstr "\"%s\" 연산자 패밀리(접근 방법: %s)에 %s 연산자용 지원 함수가 없음" -#: access/hash/hashvalidate.c:249 access/nbtree/nbtvalidate.c:266 +#: access/hash/hashvalidate.c:253 access/nbtree/nbtvalidate.c:273 #, c-format msgid "" "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "%s 연산자 패밀리(접근 방법: %s)에 cross-type 연산자가 빠졌음" -#: access/heap/heapam.c:2063 +#: access/heap/heapam.c:2024 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "병렬 작업자는 튜플을 추가 할 수 없음" -#: access/heap/heapam.c:2473 +#: access/heap/heapam.c:2442 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "병렬 작업 중에는 튜플을 지울 수 없음" -#: access/heap/heapam.c:2519 +#: access/heap/heapam.c:2488 #, c-format msgid "attempted to delete invisible tuple" msgstr "볼 수 없는 튜플을 삭제 하려고 함" -#: access/heap/heapam.c:2945 access/heap/heapam.c:5726 +#: access/heap/heapam.c:2914 access/heap/heapam.c:5703 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "병렬 작업 중에 튜플 갱신은 할 수 없음" -#: access/heap/heapam.c:3078 +#: access/heap/heapam.c:3047 #, c-format msgid "attempted to update invisible tuple" msgstr "볼 수 없는 튜플을 변경하려고 함" -#: access/heap/heapam.c:4390 access/heap/heapam.c:4428 -#: access/heap/heapam.c:4685 access/heap/heapam_handler.c:454 +#: access/heap/heapam.c:4358 access/heap/heapam.c:4396 +#: access/heap/heapam.c:4653 access/heap/heapam_handler.c:450 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "\"%s\" 릴레이션의 잠금 정보를 구할 수 없음" -#: access/heap/heapam_handler.c:405 +#: access/heap/heapam_handler.c:399 #, c-format msgid "" "tuple to be locked was already moved to another partition due to concurrent " "update" msgstr "잠글 튜플은 동시 업데이트로 다른 파티션으로 이미 옮겨졌음" -#: access/heap/hio.c:345 access/heap/rewriteheap.c:681 +#: access/heap/hio.c:345 access/heap/rewriteheap.c:662 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "로우가 너무 큽니다: 크기 %zu, 최대값 %zu" -#: access/heap/rewriteheap.c:941 +#: access/heap/rewriteheap.c:921 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "\"%s\" 파일 쓰기 실패, %d / %d 기록함: %m." -#: access/heap/rewriteheap.c:1035 access/heap/rewriteheap.c:1154 -#: access/transam/timeline.c:314 access/transam/timeline.c:468 -#: access/transam/xlog.c:3252 access/transam/xlog.c:3424 -#: access/transam/xlog.c:4544 access/transam/xlog.c:10556 -#: access/transam/xlog.c:10594 access/transam/xlog.c:10999 -#: access/transam/xlogfuncs.c:736 postmaster/postmaster.c:4530 -#: replication/logical/origin.c:576 replication/slot.c:1261 -#: storage/file/copydir.c:167 storage/smgr/md.c:204 utils/time/snapmgr.c:1329 +#: access/heap/rewriteheap.c:1015 access/heap/rewriteheap.c:1134 +#: access/transam/timeline.c:329 access/transam/timeline.c:485 +#: access/transam/xlog.c:3300 access/transam/xlog.c:3472 +#: access/transam/xlog.c:4670 access/transam/xlog.c:10869 +#: access/transam/xlog.c:10907 access/transam/xlog.c:11312 +#: access/transam/xlogfuncs.c:735 postmaster/postmaster.c:4629 +#: replication/logical/origin.c:575 replication/slot.c:1446 +#: storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1329 #, c-format msgid "could not create file \"%s\": %m" msgstr "\"%s\" 파일을 만들 수 없음: %m" -#: access/heap/rewriteheap.c:1164 +#: access/heap/rewriteheap.c:1144 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "\"%s\" 파일을 %u 크기로 정리할 수 없음: %m" -#: access/heap/rewriteheap.c:1172 replication/walsender.c:493 -#: storage/smgr/md.c:1237 -#, c-format -msgid "could not seek to end of file \"%s\": %m" -msgstr "\"%s\" 파일의 끝을 찾을 수 없음: %m" - -#: access/heap/rewriteheap.c:1189 access/transam/timeline.c:369 -#: access/transam/timeline.c:408 access/transam/timeline.c:485 -#: access/transam/xlog.c:3308 access/transam/xlog.c:3480 -#: access/transam/xlog.c:4556 postmaster/postmaster.c:4540 -#: postmaster/postmaster.c:4550 replication/logical/origin.c:588 -#: replication/logical/origin.c:630 replication/logical/origin.c:649 -#: replication/logical/snapbuild.c:1627 replication/slot.c:1295 -#: storage/file/copydir.c:207 utils/init/miscinit.c:1345 -#: utils/init/miscinit.c:1356 utils/init/miscinit.c:1364 utils/misc/guc.c:7767 -#: utils/misc/guc.c:7798 utils/misc/guc.c:9719 utils/misc/guc.c:9733 -#: utils/time/snapmgr.c:1334 utils/time/snapmgr.c:1341 +#: access/heap/rewriteheap.c:1162 access/transam/timeline.c:384 +#: access/transam/timeline.c:424 access/transam/timeline.c:502 +#: access/transam/xlog.c:3356 access/transam/xlog.c:3528 +#: access/transam/xlog.c:4682 postmaster/postmaster.c:4639 +#: postmaster/postmaster.c:4649 replication/logical/origin.c:587 +#: replication/logical/origin.c:629 replication/logical/origin.c:648 +#: replication/logical/snapbuild.c:1622 replication/slot.c:1481 +#: storage/file/buffile.c:502 storage/file/copydir.c:207 +#: utils/init/miscinit.c:1391 utils/init/miscinit.c:1402 +#: utils/init/miscinit.c:1410 utils/misc/guc.c:7996 utils/misc/guc.c:8027 +#: utils/misc/guc.c:9947 utils/misc/guc.c:9961 utils/time/snapmgr.c:1334 +#: utils/time/snapmgr.c:1341 #, c-format msgid "could not write to file \"%s\": %m" msgstr "\"%s\" 파일 쓰기 실패: %m" -#: access/heap/rewriteheap.c:1279 access/transam/twophase.c:1661 -#: access/transam/xlogarchive.c:119 access/transam/xlogarchive.c:466 -#: postmaster/postmaster.c:1277 postmaster/syslogger.c:1466 -#: replication/logical/origin.c:564 replication/logical/reorderbuffer.c:2837 -#: replication/logical/snapbuild.c:1569 replication/logical/snapbuild.c:2011 -#: replication/slot.c:1383 storage/file/fd.c:704 storage/file/fd.c:3000 -#: storage/file/fd.c:3062 storage/file/reinit.c:255 storage/ipc/dsm.c:307 -#: storage/smgr/md.c:298 storage/smgr/md.c:354 storage/sync/sync.c:210 +#: access/heap/rewriteheap.c:1252 access/transam/twophase.c:1609 +#: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:421 +#: postmaster/postmaster.c:1092 postmaster/syslogger.c:1465 +#: replication/logical/origin.c:563 replication/logical/reorderbuffer.c:3079 +#: replication/logical/snapbuild.c:1564 replication/logical/snapbuild.c:2006 +#: replication/slot.c:1578 storage/file/fd.c:754 storage/file/fd.c:3116 +#: storage/file/fd.c:3178 storage/file/reinit.c:255 storage/ipc/dsm.c:302 +#: storage/smgr/md.c:311 storage/smgr/md.c:367 storage/sync/sync.c:210 #: utils/time/snapmgr.c:1674 #, c-format msgid "could not remove file \"%s\": %m" msgstr "\"%s\" 파일을 삭제할 수 없음: %m" -#: access/heap/vacuumlazy.c:267 -#, c-format -msgid "skipping redundant vacuum to prevent wraparound of table \"%s.%s.%s\"" -msgstr "\"%s.%s.%s\" 테이블의 트랙젝션 ID 겹침 방지용 중복 청소를 건너 뜀" - -#: access/heap/vacuumlazy.c:405 +#: access/heap/vacuumlazy.c:648 #, c-format msgid "" "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": " @@ -1061,23 +1163,32 @@ msgstr "" "트랙젝션 ID 겹침 방지를 위한 적극적인 \"%s.%s.%s\" 테이블 자동 청소: 인덱스 " "탐색: %d\n" -#: access/heap/vacuumlazy.c:410 +#: access/heap/vacuumlazy.c:650 +#, c-format +msgid "" +"automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: " +"%d\n" +msgstr "" +"트랙젝션 ID 겹침 방지를 위한 \"%s.%s.%s\" 테이블 자동 청소: 인덱스 " +"탐색: %d\n" + +#: access/heap/vacuumlazy.c:655 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "적극적인 \"%s.%s.%s\" 테이블 자동 청소: 인덱스 탐색: %d\n" -#: access/heap/vacuumlazy.c:412 +#: access/heap/vacuumlazy.c:657 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "\"%s.%s.%s\" 테이블 자동 청소: 인덱스 탐색: %d\n" -#: access/heap/vacuumlazy.c:419 +#: access/heap/vacuumlazy.c:664 #, c-format msgid "" "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n" msgstr "페이지: %u 삭제됨, %u 남음, %u 핀닝으로 건너뜀, %u 동결되어 건너뜀\n" -#: access/heap/vacuumlazy.c:425 +#: access/heap/vacuumlazy.c:670 #, c-format msgid "" "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable, " @@ -1086,71 +1197,85 @@ msgstr "" "튜플: %.0f 삭제됨, %.0f 남음, %.0f 삭제할 수 없는 죽은 튜플, 제일 늙은 xmin: " "%u\n" -#: access/heap/vacuumlazy.c:431 +#: access/heap/vacuumlazy.c:676 #, c-format -msgid "buffer usage: %d hits, %d misses, %d dirtied\n" -msgstr "버퍼 사용량: %d 조회, %d 놓침, %d 변경됨\n" +msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" +msgstr "버퍼 사용량: %lld 조회, %lld 놓침, %lld 변경됨\n" -#: access/heap/vacuumlazy.c:435 +#: access/heap/vacuumlazy.c:680 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "평균 읽기 속도: %.3f MB/s, 평균 쓰기 속도: %.3f MB/s\n" -#: access/heap/vacuumlazy.c:437 +#: access/heap/vacuumlazy.c:682 #, c-format -msgid "system usage: %s" -msgstr "시스템 사용량: %s" +msgid "system usage: %s\n" +msgstr "시스템 사용량: %s\n" -#: access/heap/vacuumlazy.c:533 +#: access/heap/vacuumlazy.c:684 +#, c-format +msgid "WAL usage: %ld records, %ld full page images, %llu bytes" +msgstr "WAL 사용량: %ld 레코드, %ld 페이지 전체 이미지, %llu 바이트" + +#: access/heap/vacuumlazy.c:795 #, c-format msgid "aggressively vacuuming \"%s.%s\"" msgstr "적극적으로 \"%s.%s\" 청소 중" -#: access/heap/vacuumlazy.c:538 commands/cluster.c:910 +#: access/heap/vacuumlazy.c:800 commands/cluster.c:874 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "\"%s.%s\" 청소 중" -#: access/heap/vacuumlazy.c:1476 +#: access/heap/vacuumlazy.c:837 +#, c-format +msgid "" +"disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary " +"tables in parallel" +msgstr "" +"\"%s\" 청소 작업에서의 병렬 옵션은 무시함 --- 임시 테이블은 병렬 처리로 " +"청소 할 수 없음" + +#: access/heap/vacuumlazy.c:1725 #, c-format msgid "\"%s\": removed %.0f row versions in %u pages" msgstr "\"%s\": %.0f개의 행 버전을 %u개 페이지에서 삭제했습니다." -#: access/heap/vacuumlazy.c:1486 +#: access/heap/vacuumlazy.c:1735 #, c-format msgid "%.0f dead row versions cannot be removed yet, oldest xmin: %u\n" msgstr "%.0f개의 죽은 로우 버전을 아직 지울 수 없습니다, 제일 늙은 xmin: %u\n" -#: access/heap/vacuumlazy.c:1488 +#: access/heap/vacuumlazy.c:1737 #, c-format msgid "There were %.0f unused item identifiers.\n" msgstr "%.0f개의 사용되지 않은 아이템 식별자들이 있습니다.\n" -#: access/heap/vacuumlazy.c:1490 +#: access/heap/vacuumlazy.c:1739 #, c-format msgid "Skipped %u page due to buffer pins, " msgid_plural "Skipped %u pages due to buffer pins, " msgstr[0] "%u 페이지를 버퍼 핀닝으로 건너 뛰었습니다, " -#: access/heap/vacuumlazy.c:1494 +#: access/heap/vacuumlazy.c:1743 #, c-format msgid "%u frozen page.\n" msgid_plural "%u frozen pages.\n" msgstr[0] "" -#: access/heap/vacuumlazy.c:1498 +#: access/heap/vacuumlazy.c:1747 #, c-format msgid "%u page is entirely empty.\n" msgid_plural "%u pages are entirely empty.\n" msgstr[0] "" -#: access/heap/vacuumlazy.c:1502 commands/indexcmds.c:3354 -#: commands/indexcmds.c:3372 +#: access/heap/vacuumlazy.c:1751 commands/indexcmds.c:3487 +#: commands/indexcmds.c:3505 #, c-format msgid "%s." msgstr "%s." -#: access/heap/vacuumlazy.c:1505 +#: access/heap/vacuumlazy.c:1754 #, c-format msgid "" "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u " @@ -1159,22 +1284,52 @@ msgstr "" "\"%s\": 지울 수 있는 자료 %.0f개, 지울 수 없는 자료 %.0f개를 %u/%u개 페이지에" "서 찾았음" -#: access/heap/vacuumlazy.c:1574 +#: access/heap/vacuumlazy.c:1888 #, c-format msgid "\"%s\": removed %d row versions in %d pages" msgstr "\"%s\": %d 개 자료를 %d 페이지에서 삭제했음" -#: access/heap/vacuumlazy.c:1765 +#: access/heap/vacuumlazy.c:2143 +#, c-format +msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" +msgid_plural "" +"launched %d parallel vacuum workers for index cleanup (planned: %d)" +msgstr[0] "" + +#: access/heap/vacuumlazy.c:2149 +#, c-format +msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" +msgid_plural "" +"launched %d parallel vacuum workers for index vacuuming (planned: %d)" +msgstr[0] "" + +#: access/heap/vacuumlazy.c:2441 +#, c-format +msgid "" +"scanned index \"%s\" to remove %d row versions by parallel vacuum worker" +msgstr "" +"\"%s\" 인덱스를 스캔해서 %d개의 행 버전들을 병렬 vacuum 작업자가 지웠습니다" + +#: access/heap/vacuumlazy.c:2443 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "\"%s\" 인덱스를 스캔해서 %d개의 행 버전들을 지웠습니다" -#: access/heap/vacuumlazy.c:1818 +#: access/heap/vacuumlazy.c:2501 +#, c-format +msgid "" +"index \"%s\" now contains %.0f row versions in %u pages as reported by " +"parallel vacuum worker" +msgstr "" +"\"%s\" 인덱스는 %.0f 행 버전을 %u 페이지에서 포함있음을 " +"병렬 vacuum 작업자가 보고함" + +#: access/heap/vacuumlazy.c:2503 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "\"%s\" 인덱스는 %.0f 행 버전을 %u 페이지에서 포함하고 있습니다." -#: access/heap/vacuumlazy.c:1822 +#: access/heap/vacuumlazy.c:2510 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -1185,22 +1340,57 @@ msgstr "" "%u개 인덱스 페이지를 삭제해서, %u개 페이지를 다시 사용합니다.\n" "%s." -#: access/heap/vacuumlazy.c:1920 +#: access/heap/vacuumlazy.c:2613 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "\"%s\": 잠금 요청 충돌로 자료 비우기 작업을 중지합니다" -#: access/heap/vacuumlazy.c:1985 +#: access/heap/vacuumlazy.c:2679 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "\"%s\": %u 에서 %u 페이지로 정지했음" -#: access/heap/vacuumlazy.c:2050 +#: access/heap/vacuumlazy.c:2744 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "\"%s\": 잠금 요청 충돌로 자료 비우기 작업을 지연합니다" -#: access/index/amapi.c:83 commands/amcmds.c:167 +#: access/heap/vacuumlazy.c:3583 +#, c-format +msgid "while scanning block %u of relation \"%s.%s\"" +msgstr "%u 블록(해당 릴레이션: \"%s.%s\")을 탐색 중" + +#: access/heap/vacuumlazy.c:3586 +#, c-format +msgid "while scanning relation \"%s.%s\"" +msgstr "\"%s.%s\" 릴레이션을 탐색 중" + +#: access/heap/vacuumlazy.c:3592 +#, c-format +msgid "while vacuuming block %u of relation \"%s.%s\"" +msgstr "%u 블록(해당 릴레이션: \"%s.%s\")을 청소 중" + +#: access/heap/vacuumlazy.c:3595 +#, c-format +msgid "while vacuuming relation \"%s.%s\"" +msgstr "\"%s.%s\" 릴레이션 청소 중" + +#: access/heap/vacuumlazy.c:3600 +#, c-format +msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" +msgstr "\"%s\" 인덱스(해당 릴레이션 \"%s.%s\") 청소 중" + +#: access/heap/vacuumlazy.c:3605 +#, c-format +msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" +msgstr "\"%s\" 인덱스 (해당 릴레이션 \"%s.%s\")을 정돈(clean up) 중" + +#: access/heap/vacuumlazy.c:3611 +#, c-format +msgid "while truncating relation \"%s.%s\" to %u blocks" +msgstr "\"%s.%s\" 릴레이션을 %u 블럭으로 줄이는 중" + +#: access/index/amapi.c:83 commands/amcmds.c:170 #, c-format msgid "access method \"%s\" is not of type %s" msgstr "\"%s\" 접근 방법은 %s 자료형에는 쓸 수 없음" @@ -1210,40 +1400,40 @@ msgstr "\"%s\" 접근 방법은 %s 자료형에는 쓸 수 없음" msgid "index access method \"%s\" does not have a handler" msgstr "\"%s\" 인덱스 접근 방법에 대한 핸들러가 없음" -#: access/index/indexam.c:136 catalog/objectaddress.c:1259 -#: commands/indexcmds.c:2431 commands/tablecmds.c:250 commands/tablecmds.c:274 -#: commands/tablecmds.c:15026 commands/tablecmds.c:16489 +#: access/index/indexam.c:142 catalog/objectaddress.c:1260 +#: commands/indexcmds.c:2516 commands/tablecmds.c:254 commands/tablecmds.c:278 +#: commands/tablecmds.c:15733 commands/tablecmds.c:17188 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\" 개체는 인덱스가 아닙니다" -#: access/nbtree/nbtinsert.c:565 +#: access/index/indexam.c:970 +#, c-format +msgid "operator class %s has no options" +msgstr "%s 연산자 클래스는 옵션이 없습니다" + +#: access/nbtree/nbtinsert.c:651 #, c-format msgid "duplicate key value violates unique constraint \"%s\"" msgstr "중복된 키 값이 \"%s\" 고유 제약 조건을 위반함" -#: access/nbtree/nbtinsert.c:567 +#: access/nbtree/nbtinsert.c:653 #, c-format msgid "Key %s already exists." msgstr "%s 키가 이미 있습니다." -#: access/nbtree/nbtinsert.c:638 -#, c-format -msgid "failed to re-find tuple within index \"%s\"" -msgstr "\"%s\" 인덱스에서 튜플 재검색 실패" - -#: access/nbtree/nbtinsert.c:640 +#: access/nbtree/nbtinsert.c:747 #, c-format msgid "This may be because of a non-immutable index expression." msgstr "이 문제는 non-immutable 인덱스 표현식 때문인듯 합니다." -#: access/nbtree/nbtpage.c:135 access/nbtree/nbtpage.c:521 -#: parser/parse_utilcmd.c:2117 +#: access/nbtree/nbtpage.c:150 access/nbtree/nbtpage.c:538 +#: parser/parse_utilcmd.c:2244 #, c-format msgid "index \"%s\" is not a btree" msgstr "\"%s\" 인덱스는 btree 인덱스가 아닙니다" -#: access/nbtree/nbtpage.c:142 access/nbtree/nbtpage.c:528 +#: access/nbtree/nbtpage.c:157 access/nbtree/nbtpage.c:545 #, c-format msgid "" "version mismatch in index \"%s\": file version %d, current version %d, " @@ -1252,12 +1442,12 @@ msgstr "" "\"%s\" 인덱스의 버전이 틀립니다: 파일 버전 %d, 현재 버전 %d, 최소 지원 버전 " "%d" -#: access/nbtree/nbtpage.c:1349 +#: access/nbtree/nbtpage.c:1501 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "\"%s\" 인덱스에 반쯤 죽은(half-dead) 내부 페이지가 있음" -#: access/nbtree/nbtpage.c:1351 +#: access/nbtree/nbtpage.c:1503 #, c-format msgid "" "This can be caused by an interrupted VACUUM in version 9.3 or older, before " @@ -1266,7 +1456,7 @@ msgstr "" "이 문제는 9.3 버전 이하 환경에서 VACUUM 작업이 중지되고, 그 상태로 업그레이드" "되었을 가능성이 큽니다. 해당 인덱스를 다시 만드십시오." -#: access/nbtree/nbtutils.c:2563 +#: access/nbtree/nbtutils.c:2664 #, c-format msgid "" "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" @@ -1274,12 +1464,12 @@ msgstr "" "인덱스 행 크기(%zu)가 btree(%u 버전)의 최대값(%zu)을 초과함 (해당 인덱스: " "\"%s\")" -#: access/nbtree/nbtutils.c:2569 +#: access/nbtree/nbtutils.c:2670 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "인덱스 로우가 %u,%u 튜플(해당 릴레이션 \"%s\")을 참조함." -#: access/nbtree/nbtutils.c:2573 +#: access/nbtree/nbtutils.c:2674 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1289,7 +1479,7 @@ msgstr "" "버퍼 페이지의 1/3보다 큰 값은 인덱싱할 수 없습니다.\n" "값의 MD5 해시 함수 인덱스를 고려하거나 전체 텍스트 인덱싱을 사용하십시오." -#: access/nbtree/nbtvalidate.c:236 +#: access/nbtree/nbtvalidate.c:243 #, c-format msgid "" "operator family \"%s\" of access method %s is missing support function for " @@ -1298,18 +1488,18 @@ msgstr "" "\"%s\" 연산자 패밀리(접근 방법: %s)에는 %s 자료형과 %s 자료형용 지원 함수가 " "빠졌음" -#: access/spgist/spgutils.c:142 +#: access/spgist/spgutils.c:147 #, c-format msgid "" "compress method must be defined when leaf type is different from input type" msgstr "입력 자료형에서 리프 유형이 다를 때 압축 방법은 반드시 정의해야 함" -#: access/spgist/spgutils.c:749 +#: access/spgist/spgutils.c:761 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "SP-GiST 내부 튜플 크기가 초과됨: 현재값 %zu, 최대값 %zu" -#: access/spgist/spgvalidate.c:276 +#: access/spgist/spgvalidate.c:281 #, c-format msgid "" "operator family \"%s\" of access method %s is missing support function %d " @@ -1319,18 +1509,18 @@ msgstr "" "다." #: access/table/table.c:49 access/table/table.c:78 access/table/table.c:111 -#: catalog/aclchk.c:1832 +#: catalog/aclchk.c:1806 #, c-format msgid "\"%s\" is an index" msgstr "\"%s\" 개체는 인덱스임" #: access/table/table.c:54 access/table/table.c:83 access/table/table.c:116 -#: catalog/aclchk.c:1839 commands/tablecmds.c:11837 commands/tablecmds.c:15035 +#: catalog/aclchk.c:1813 commands/tablecmds.c:12554 commands/tablecmds.c:15742 #, c-format msgid "\"%s\" is a composite type" msgstr "\"%s\" 개체는 복합 자료형입니다" -#: access/table/tableam.c:236 +#: access/table/tableam.c:244 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "tid (%u, %u)가 바르지 않음, 해당 릴레이션: \"%s\"" @@ -1340,7 +1530,7 @@ msgstr "tid (%u, %u)가 바르지 않음, 해당 릴레이션: \"%s\"" msgid "%s cannot be empty." msgstr "%s 값은 비워 둘 수 없음" -#: access/table/tableamapi.c:122 utils/misc/guc.c:11639 +#: access/table/tableamapi.c:122 utils/misc/guc.c:11928 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s 설정값이 너무 깁니다 (최대 %d 문자)" @@ -1381,7 +1571,7 @@ msgstr "운영 서버에서 \"%s\" 환경 설정 매개 변수값을 지정 하 msgid "Make sure the configuration parameter \"%s\" is set." msgstr "\"%s\" 환경 설정 매개 변수를 지정하세요." -#: access/transam/multixact.c:1000 +#: access/transam/multixact.c:1002 #, c-format msgid "" "database is not accepting commands that generate new MultiXactIds to avoid " @@ -1390,8 +1580,8 @@ msgstr "" "\"%s\" 데이터베이스 자료 손실을 막기 위해 새로운 MultiXactId 만드는 작업을 " "더 이상 할 수 없습니다." -#: access/transam/multixact.c:1002 access/transam/multixact.c:1009 -#: access/transam/multixact.c:1033 access/transam/multixact.c:1042 +#: access/transam/multixact.c:1004 access/transam/multixact.c:1011 +#: access/transam/multixact.c:1035 access/transam/multixact.c:1044 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1402,7 +1592,7 @@ msgstr "" "또한 오래된 트랜잭션을 커밋또는 롤백하거나 잠긴 복제 슬롯을 지울 필요가 있습" "니다." -#: access/transam/multixact.c:1007 +#: access/transam/multixact.c:1009 #, c-format msgid "" "database is not accepting commands that generate new MultiXactIds to avoid " @@ -1411,7 +1601,7 @@ msgstr "" "%u OID 데이터베이스 자료 손실을 막기 위해 새로운 MultiXactId 만드는 작업을 " "더 이상 할 수 없습니다." -#: access/transam/multixact.c:1028 access/transam/multixact.c:2318 +#: access/transam/multixact.c:1030 access/transam/multixact.c:2320 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "" @@ -1420,7 +1610,7 @@ msgstr[0] "" "\"%s\" 데이터베이스는 %u번의 트랜잭션이 발생되기 전에 VACUUM 작업을 해야 합니" "다." -#: access/transam/multixact.c:1037 access/transam/multixact.c:2327 +#: access/transam/multixact.c:1039 access/transam/multixact.c:2329 #, c-format msgid "" "database with OID %u must be vacuumed before %u more MultiXactId is used" @@ -1430,12 +1620,12 @@ msgstr[0] "" "%u OID 데이터베이스는 %u번의 트랜잭션이 발생되기 전에 VACUUM 작업을 해야 합니" "다." -#: access/transam/multixact.c:1098 +#: access/transam/multixact.c:1100 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "multixact \"회수\" 초과" -#: access/transam/multixact.c:1099 +#: access/transam/multixact.c:1101 #, c-format msgid "" "This command would create a multixact with %u members, but the remaining " @@ -1446,7 +1636,7 @@ msgid_plural "" msgstr[0] "" "이 명령은 %u 개의 multixact를 써야하는데, 쓸 수 있는 공간은 %u 개 뿐입니다." -#: access/transam/multixact.c:1104 +#: access/transam/multixact.c:1106 #, c-format msgid "" "Execute a database-wide VACUUM in database with OID %u with reduced " @@ -1456,7 +1646,7 @@ msgstr "" "vacuum_multixact_freeze_min_age, vacuum_multixact_freeze_table_age 값을 조정" "하고, %u OID 데이터베이스 대상으로 VACUUM 작업을 하십시오." -#: access/transam/multixact.c:1135 +#: access/transam/multixact.c:1137 #, c-format msgid "" "database with OID %u must be vacuumed before %d more multixact member is used" @@ -1467,7 +1657,7 @@ msgstr[0] "" "%u OID 데이터베이스는 %d 개의 멀티트랜잭션을 사용하기 전에 vacuum 작업을 해" "야 합니다." -#: access/transam/multixact.c:1140 +#: access/transam/multixact.c:1142 #, c-format msgid "" "Execute a database-wide VACUUM in that database with reduced " @@ -1477,22 +1667,22 @@ msgstr "" "vacuum_multixact_freeze_min_age 설정값과 vacuum_multixact_freeze_table_age 값" "을 줄여서 데이터베이스 단위로 VACUUM 작업을 진행하세요." -#: access/transam/multixact.c:1277 +#: access/transam/multixact.c:1279 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "%u번 MultiXactId 더이상 없음 -- 번호 겹침 현상 발생" -#: access/transam/multixact.c:1285 +#: access/transam/multixact.c:1287 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "%u번 MultiXactId를 만들 수 없음 -- 번호 겹침 현상 발생" -#: access/transam/multixact.c:2268 +#: access/transam/multixact.c:2270 #, c-format msgid "MultiXactId wrap limit is %u, limited by database with OID %u" msgstr "MultiXactId 겹침 한계는 %u 입니다. %u OID 데이터베이스에서 제한됨" -#: access/transam/multixact.c:2323 access/transam/multixact.c:2332 +#: access/transam/multixact.c:2325 access/transam/multixact.c:2334 #: access/transam/varsup.c:149 access/transam/varsup.c:156 #: access/transam/varsup.c:447 access/transam/varsup.c:454 #, c-format @@ -1507,12 +1697,12 @@ msgstr "" "또한 오래된 트랜잭션을 커밋또는 롤백 하거나, 잠긴 복제 슬롯을 지울 필요가 있" "습니다." -#: access/transam/multixact.c:2602 +#: access/transam/multixact.c:2604 #, c-format msgid "oldest MultiXactId member is at offset %u" msgstr "제일 오래된 MultiXactId 값은 %u 위치에 있음" -#: access/transam/multixact.c:2606 +#: access/transam/multixact.c:2608 #, c-format msgid "" "MultiXact member wraparound protections are disabled because oldest " @@ -1521,24 +1711,24 @@ msgstr "" "가장 오래된 체크포인트 작업이 완료된 %u 멀티 트랜잭션 번호가 디스크에 없기 때" "문에, 멀티 트랜잭션 번호 겹침 방지 기능이 비활성화 되어 있습니다." -#: access/transam/multixact.c:2628 +#: access/transam/multixact.c:2630 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "멀티 트랜잭션 번호 겹침 방지 기능이 활성화 되었음" -#: access/transam/multixact.c:2631 +#: access/transam/multixact.c:2633 #, c-format msgid "MultiXact member stop limit is now %u based on MultiXact %u" msgstr "멀티 트랜잭션 중지 제한 번호는 %u 입니다. (%u 멀티트랜잭션에 기초함)" -#: access/transam/multixact.c:3011 +#: access/transam/multixact.c:3013 #, c-format msgid "" "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "" "가장 오래된 멀티 트랜잭션 번호는 %u, 가장 최신 것은 %u, truncate 작업 건너뜀" -#: access/transam/multixact.c:3029 +#: access/transam/multixact.c:3031 #, c-format msgid "" "cannot truncate up to MultiXact %u because it does not exist on disk, " @@ -1547,261 +1737,261 @@ msgstr "" "디스크에 해당 멀티 트랜잭션 번호가 없어, %u 멀티 트랜잭션 번호로 truncate 못" "함, truncate 작업 건너뜀" -#: access/transam/multixact.c:3343 +#: access/transam/multixact.c:3345 #, c-format msgid "invalid MultiXactId: %u" msgstr "잘못된 MultiXactId: %u" -#: access/transam/parallel.c:673 access/transam/parallel.c:792 +#: access/transam/parallel.c:706 access/transam/parallel.c:825 #, c-format msgid "parallel worker failed to initialize" msgstr "병렬 작업자 초기화 실패" -#: access/transam/parallel.c:674 access/transam/parallel.c:793 +#: access/transam/parallel.c:707 access/transam/parallel.c:826 #, c-format msgid "More details may be available in the server log." msgstr "보다 자세한 내용은 서버 로그에 남겨졌을 수 있습니다." -#: access/transam/parallel.c:854 +#: access/transam/parallel.c:887 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "병렬 트랜잭션 처리 중 postmaster 종료됨" -#: access/transam/parallel.c:1041 +#: access/transam/parallel.c:1074 #, c-format msgid "lost connection to parallel worker" msgstr "병렬 처리 작업자 프로세스 연결 끊김" -#: access/transam/parallel.c:1107 access/transam/parallel.c:1109 +#: access/transam/parallel.c:1140 access/transam/parallel.c:1142 msgid "parallel worker" msgstr "병렬 처리 작업자" -#: access/transam/parallel.c:1259 +#: access/transam/parallel.c:1293 #, c-format msgid "could not map dynamic shared memory segment" msgstr "동적 공유 메모리 세그먼트를 할당할 수 없음" -#: access/transam/parallel.c:1264 +#: access/transam/parallel.c:1298 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "동적 공유 메모리 세그먼트에 잘못된 매직 번호가 있음" -#: access/transam/slru.c:674 +#: access/transam/slru.c:696 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "\"%s\" 파일 없음, 0으로 읽음" -#: access/transam/slru.c:912 access/transam/slru.c:918 -#: access/transam/slru.c:926 access/transam/slru.c:931 -#: access/transam/slru.c:938 access/transam/slru.c:943 -#: access/transam/slru.c:950 access/transam/slru.c:957 +#: access/transam/slru.c:937 access/transam/slru.c:943 +#: access/transam/slru.c:951 access/transam/slru.c:956 +#: access/transam/slru.c:963 access/transam/slru.c:968 +#: access/transam/slru.c:975 access/transam/slru.c:982 #, c-format msgid "could not access status of transaction %u" msgstr "%u 트랜잭션의 상태를 액세스할 수 없음" -#: access/transam/slru.c:913 +#: access/transam/slru.c:938 #, c-format msgid "Could not open file \"%s\": %m." msgstr "\"%s\" 파일을 열 수 없음: %m." -#: access/transam/slru.c:919 +#: access/transam/slru.c:944 #, c-format msgid "Could not seek in file \"%s\" to offset %u: %m." msgstr "\"%s\" 파일에서 %u 위치를 찾을 수 없음: %m." -#: access/transam/slru.c:927 +#: access/transam/slru.c:952 #, c-format msgid "Could not read from file \"%s\" at offset %u: %m." msgstr "\"%s\" 파일에서 %u 위치를 읽을 수 없음: %m." -#: access/transam/slru.c:932 +#: access/transam/slru.c:957 #, c-format msgid "Could not read from file \"%s\" at offset %u: read too few bytes." msgstr "\"%s\" 파일에서 %u 위치를 읽을 수 없음: 너무 적은 바이트를 읽음." -#: access/transam/slru.c:939 +#: access/transam/slru.c:964 #, c-format msgid "Could not write to file \"%s\" at offset %u: %m." msgstr "\"%s\" 파일에서 %u 위치에 쓸 수 없음: %m." -#: access/transam/slru.c:944 +#: access/transam/slru.c:969 #, c-format msgid "Could not write to file \"%s\" at offset %u: wrote too few bytes." msgstr "\"%s\" 파일에서 %u 위치에 쓸 수 없음: 너무 적은 바이트를 씀." -#: access/transam/slru.c:951 +#: access/transam/slru.c:976 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "\"%s\" 파일 fsync 실패: %m." -#: access/transam/slru.c:958 +#: access/transam/slru.c:983 #, c-format msgid "Could not close file \"%s\": %m." msgstr "\"%s\" 파일을 닫을 수 없음: %m." -#: access/transam/slru.c:1215 +#: access/transam/slru.c:1258 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "\"%s\" 디렉터리를 비울 수 없음: 랩어라운드 발생" -#: access/transam/slru.c:1270 access/transam/slru.c:1326 +#: access/transam/slru.c:1313 access/transam/slru.c:1369 #, c-format msgid "removing file \"%s\"" msgstr "\"%s\" 파일 삭제 중" -#: access/transam/timeline.c:148 access/transam/timeline.c:153 +#: access/transam/timeline.c:163 access/transam/timeline.c:168 #, c-format msgid "syntax error in history file: %s" msgstr "히스토리 파일에서 문법오류: %s" -#: access/transam/timeline.c:149 +#: access/transam/timeline.c:164 #, c-format msgid "Expected a numeric timeline ID." msgstr "숫자 타임라인 ID가 필요합니다." -#: access/transam/timeline.c:154 +#: access/transam/timeline.c:169 #, c-format msgid "Expected a write-ahead log switchpoint location." msgstr "트랜잭션 로그 전환 위치 값이 있어야 함" -#: access/transam/timeline.c:158 +#: access/transam/timeline.c:173 #, c-format msgid "invalid data in history file: %s" msgstr "작업내역 파일에 잘못된 자료가 있음: %s" -#: access/transam/timeline.c:159 +#: access/transam/timeline.c:174 #, c-format msgid "Timeline IDs must be in increasing sequence." msgstr "타임라인 ID 값은 그 값이 증가하는 순번값이어야합니다." -#: access/transam/timeline.c:179 +#: access/transam/timeline.c:194 #, c-format msgid "invalid data in history file \"%s\"" msgstr "작업내역 파일에 잘못된 자료가 있음: \"%s\"" -#: access/transam/timeline.c:180 +#: access/transam/timeline.c:195 #, c-format msgid "Timeline IDs must be less than child timeline's ID." msgstr "타임라인 ID는 하위 타임라인 ID보다 작아야 합니다." -#: access/transam/timeline.c:580 +#: access/transam/timeline.c:597 #, c-format msgid "requested timeline %u is not in this server's history" msgstr "요청한 %u 타이라인이 이 서버 내역에는 없음" -#: access/transam/twophase.c:382 +#: access/transam/twophase.c:381 #, c-format msgid "transaction identifier \"%s\" is too long" msgstr "\"%s\" 트랜잭션 식별자가 너무 깁니다" -#: access/transam/twophase.c:389 +#: access/transam/twophase.c:388 #, c-format msgid "prepared transactions are disabled" msgstr "준비된 트랜잭션이 비활성화됨" -#: access/transam/twophase.c:390 +#: access/transam/twophase.c:389 #, c-format msgid "Set max_prepared_transactions to a nonzero value." msgstr "max_prepared_transactions 설정값을 0이 아닌 값으로 설정하십시오." -#: access/transam/twophase.c:409 +#: access/transam/twophase.c:408 #, c-format msgid "transaction identifier \"%s\" is already in use" msgstr "\"%s\" 이름의 트랜잭션 식별자가 이미 사용 중입니다" -#: access/transam/twophase.c:418 access/transam/twophase.c:2420 +#: access/transam/twophase.c:417 access/transam/twophase.c:2368 #, c-format msgid "maximum number of prepared transactions reached" msgstr "준비된 트랜잭션의 최대 개수를 모두 사용했습니다" -#: access/transam/twophase.c:419 access/transam/twophase.c:2421 +#: access/transam/twophase.c:418 access/transam/twophase.c:2369 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "max_prepared_transactions 값을 늘려주세요 (현재 %d)." -#: access/transam/twophase.c:587 +#: access/transam/twophase.c:586 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "\"%s\" 이름의 준비된 트랜잭션 식별자가 여러 곳에서 쓰이고 있습니다" -#: access/transam/twophase.c:593 +#: access/transam/twophase.c:592 #, c-format msgid "permission denied to finish prepared transaction" msgstr "준비된 트랜잭션 끝내기 작업 권한 없음" -#: access/transam/twophase.c:594 +#: access/transam/twophase.c:593 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "해당 준비된 트랜잭션의 소유주이거나 superuser여야합니다" -#: access/transam/twophase.c:605 +#: access/transam/twophase.c:604 #, c-format msgid "prepared transaction belongs to another database" msgstr "준비된 트랜잭션이 다른 데이터베이스에 속해 있음" -#: access/transam/twophase.c:606 +#: access/transam/twophase.c:605 #, c-format msgid "" "Connect to the database where the transaction was prepared to finish it." msgstr "작업을 마치려면 그 준비된 트랜잭션이 있는 데이터베이스에 연결하십시오." -#: access/transam/twophase.c:621 +#: access/transam/twophase.c:620 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "\"%s\" 이름의 준비된 트랜잭션이 없습니다" -#: access/transam/twophase.c:1115 +#: access/transam/twophase.c:1098 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "2단계 상태 파일 최대 길이를 초과함" -#: access/transam/twophase.c:1269 +#: access/transam/twophase.c:1252 #, c-format msgid "incorrect size of file \"%s\": %zu byte" msgid_plural "incorrect size of file \"%s\": %zu bytes" msgstr[0] "\"%s\" 파일 크기가 이상함: %zu 바이트" -#: access/transam/twophase.c:1278 +#: access/transam/twophase.c:1261 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" -msgstr "" +msgstr "\"%s\" 파일의 CRC 값 맞춤 실패" -#: access/transam/twophase.c:1311 +#: access/transam/twophase.c:1294 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "\"%s\" 파일에 잘못된 매직 번호가 저장되어 있음" -#: access/transam/twophase.c:1317 +#: access/transam/twophase.c:1300 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "\"%s\" 파일 크기가 이상함" -#: access/transam/twophase.c:1329 +#: access/transam/twophase.c:1312 #, c-format msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "계산된 CRC 체크섬 값이 파일에 \"%s\" 파일에 저장된 값과 다름" -#: access/transam/twophase.c:1395 access/transam/xlog.c:6364 +#: access/transam/twophase.c:1342 access/transam/xlog.c:6494 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "WAL 읽기 프로세서를 할당하는 중에 오류 발생" -#: access/transam/twophase.c:1401 +#: access/transam/twophase.c:1349 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "two-phase 상태정보을 읽을 수 없음 WAL 위치: %X/%X" -#: access/transam/twophase.c:1409 +#: access/transam/twophase.c:1357 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "WAL %X/%X 위치에 2단계 커밋 상태 자료가 없습니다" -#: access/transam/twophase.c:1689 +#: access/transam/twophase.c:1637 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "\"%s\" 파일을 다시 만들 수 없음: %m" -#: access/transam/twophase.c:1816 +#: access/transam/twophase.c:1764 #, c-format msgid "" "%u two-phase state file was written for a long-running prepared transaction" @@ -1810,32 +2000,42 @@ msgid_plural "" msgstr[0] "" "긴 실행 미리 준비된 트랜잭션 용 %u 개의 2단계 상태 파일이 저장되었음" -#: access/transam/twophase.c:2050 +#: access/transam/twophase.c:1998 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "공유 메모리에서 %u 준비된 트랜잭션을 복구함" -#: access/transam/twophase.c:2141 +#: access/transam/twophase.c:2089 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "%u 트랜잭션에서 사용하는 오래된 two-phase 상태정보 파일을 삭제함" -#: access/transam/twophase.c:2148 +#: access/transam/twophase.c:2096 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "" "%u 트랜잭션에서 사용하는 오래된 two-phase 상태정보를 공유 메모리에서 삭제함" -#: access/transam/twophase.c:2161 +#: access/transam/twophase.c:2109 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "%u 트랜잭션에서 사용하는 future two-phase 상태정보 파일을 삭제함" -#: access/transam/twophase.c:2168 +#: access/transam/twophase.c:2116 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "%u 트랜잭션에서 사용하는 future two-phase 상태정보를 메모리에서 삭제함" +#: access/transam/twophase.c:2141 +#, c-format +msgid "corrupted two-phase state file for transaction %u" +msgstr "%u 트랜잭션에서 사용하는 two-phase 상태정보 파일이 손상되었음" + +#: access/transam/twophase.c:2146 +#, c-format +msgid "corrupted two-phase state in memory for transaction %u" +msgstr "%u 트랜잭션에서 사용하는 메모리에 있는 two-phase 상태정보가 손상되었음" + #: access/transam/varsup.c:127 #, c-format msgid "" @@ -1881,203 +2081,207 @@ msgstr "%u OID 데이터베이스는 %u번의 트랜잭션이 발생되기 전 msgid "transaction ID wrap limit is %u, limited by database with OID %u" msgstr "트랜잭션 ID 겹침 제한은 %u번 입니다., %u OID 데이터베이스에서 제한됨" -#: access/transam/xact.c:1027 +#: access/transam/xact.c:1030 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "하나의 트랜잭션 안에서는 2^32-2 개의 명령을 초과할 수 없음" -#: access/transam/xact.c:1552 +#: access/transam/xact.c:1555 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "커밋된 하위 트랜잭션 수(%d)가 최대치를 초과함" -#: access/transam/xact.c:2378 +#: access/transam/xact.c:2395 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "임시 개체 대해 실행된 트랜잭션을 PREPARE할 수 없음" -#: access/transam/xact.c:2388 +#: access/transam/xact.c:2405 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "스냅샷으로 내보낸 트랜잭션은 PREPARE 작업을 할 수 없음" -#: access/transam/xact.c:2397 +#: access/transam/xact.c:2414 #, c-format msgid "" "cannot PREPARE a transaction that has manipulated logical replication workers" msgstr "논리 복제 작업자를 사용하는 트랜잭션은 PREPARE 할 수 없음" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3338 +#: access/transam/xact.c:3359 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s 명령은 트랜잭션 블럭안에서 실행할 수 없음" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3348 +#: access/transam/xact.c:3369 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s 명령은 서브트랜잭션 블럭안에서 실행할 수 없음" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3358 +#: access/transam/xact.c:3379 #, c-format msgid "%s cannot be executed from a function" -msgstr "%s 절은 함수에세ㅓ 실행될 수 없음" +msgstr "%s 절은 함수에서 실행될 수 없음" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3427 access/transam/xact.c:3734 -#: access/transam/xact.c:3813 access/transam/xact.c:3936 -#: access/transam/xact.c:4087 access/transam/xact.c:4156 -#: access/transam/xact.c:4267 +#: access/transam/xact.c:3448 access/transam/xact.c:3754 +#: access/transam/xact.c:3833 access/transam/xact.c:3956 +#: access/transam/xact.c:4107 access/transam/xact.c:4176 +#: access/transam/xact.c:4287 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s 명령은 트랜잭션 블럭에서만 사용될 수 있음" -#: access/transam/xact.c:3620 +#: access/transam/xact.c:3640 #, c-format msgid "there is already a transaction in progress" msgstr "이미 트랜잭션 작업이 진행 중입니다" -#: access/transam/xact.c:3739 access/transam/xact.c:3818 -#: access/transam/xact.c:3941 +#: access/transam/xact.c:3759 access/transam/xact.c:3838 +#: access/transam/xact.c:3961 #, c-format msgid "there is no transaction in progress" msgstr "현재 트랜잭션 작업을 하지 않고 있습니다" -#: access/transam/xact.c:3829 +#: access/transam/xact.c:3849 #, c-format msgid "cannot commit during a parallel operation" msgstr "데이터베이스 트랜잭션을 commit 할 수 없음" -#: access/transam/xact.c:3952 +#: access/transam/xact.c:3972 #, c-format msgid "cannot abort during a parallel operation" msgstr "병렬 작업 중에는 중지 할 수 없음" -#: access/transam/xact.c:4051 +#: access/transam/xact.c:4071 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "병렬 작업 중에는 savepoint 지정을 할 수 없음" -#: access/transam/xact.c:4138 +#: access/transam/xact.c:4158 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "병렬 작업 중에는 savepoint를 지울 수 없음" -#: access/transam/xact.c:4148 access/transam/xact.c:4199 -#: access/transam/xact.c:4259 access/transam/xact.c:4308 +#: access/transam/xact.c:4168 access/transam/xact.c:4219 +#: access/transam/xact.c:4279 access/transam/xact.c:4328 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "\"%s\" 이름의 저장위치가 없음" -#: access/transam/xact.c:4205 access/transam/xact.c:4314 +#: access/transam/xact.c:4225 access/transam/xact.c:4334 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "현재 저장위치 수준에서 \"%s\" 이름의 저장위치가 없음" -#: access/transam/xact.c:4247 +#: access/transam/xact.c:4267 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "병렬 작업 중에는 savepoint 지정 취소 작업을 할 수 없음" -#: access/transam/xact.c:4375 +#: access/transam/xact.c:4395 #, c-format msgid "cannot start subtransactions during a parallel operation" msgstr "병렬 처리 중에는 하위트랜잭션을 시작할 수 없음" -#: access/transam/xact.c:4443 +#: access/transam/xact.c:4463 #, c-format msgid "cannot commit subtransactions during a parallel operation" msgstr "병렬 처리 중에는 하위트랜잭션을 커밋할 수 없음" -#: access/transam/xact.c:5081 +#: access/transam/xact.c:5103 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "하나의 트랜잭션 안에서는 2^32-1 개의 하위트랜잭션을 초과할 수 없음" -#: access/transam/xlog.c:2506 +#: access/transam/xlog.c:2554 #, c-format msgid "could not write to log file %s at offset %u, length %zu: %m" msgstr "%s 로그 파일 쓰기 실패, 위치 %u, 길이 %zu: %m" -#: access/transam/xlog.c:2782 +#: access/transam/xlog.c:2830 #, c-format msgid "updated min recovery point to %X/%X on timeline %u" msgstr "최소 복구 지점: %X/%X, 타임라인: %u 변경 완료" -#: access/transam/xlog.c:3863 access/transam/xlogutils.c:703 -#: replication/walsender.c:2445 +#: access/transam/xlog.c:3944 access/transam/xlogutils.c:802 +#: replication/walsender.c:2510 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "요청한 %s WAL 조각 파일은 이미 지워졌음" -#: access/transam/xlog.c:4105 +#: access/transam/xlog.c:4187 #, c-format msgid "recycled write-ahead log file \"%s\"" msgstr "\"%s\" 트랜잭션 로그 파일 재활용함" -#: access/transam/xlog.c:4117 +#: access/transam/xlog.c:4199 #, c-format msgid "removing write-ahead log file \"%s\"" msgstr "\"%s\" 트랜잭션 로그 파일 삭제 중" -#: access/transam/xlog.c:4137 +#: access/transam/xlog.c:4219 #, c-format msgid "could not rename file \"%s\": %m" msgstr "\"%s\" 파일의 이름을 바꿀 수 없음: %m" -#: access/transam/xlog.c:4179 access/transam/xlog.c:4189 +#: access/transam/xlog.c:4261 access/transam/xlog.c:4271 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "필요한 WAL 디렉터리 \"%s\"이(가) 없음" -#: access/transam/xlog.c:4195 +#: access/transam/xlog.c:4277 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "누락된 WAL 디렉터리 \"%s\"을(를) 만드는 중" -#: access/transam/xlog.c:4198 +#: access/transam/xlog.c:4280 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "누락된 \"%s\" 디렉터리를 만들 수 없음: %m" -#: access/transam/xlog.c:4303 +#: access/transam/xlog.c:4383 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "예상치 못한 타임라인 ID %u, 로그 조각: %s, 위치: %u" -#: access/transam/xlog.c:4431 +#: access/transam/xlog.c:4521 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "요청한 %u 타임라인은 %u 데이터베이스 시스템 타임라인의 하위가 아님" -#: access/transam/xlog.c:4445 +#: access/transam/xlog.c:4535 #, c-format msgid "" "new timeline %u forked off current database system timeline %u before " "current recovery point %X/%X" msgstr "" -#: access/transam/xlog.c:4464 +#: access/transam/xlog.c:4554 #, c-format msgid "new target timeline is %u" msgstr "새 대상 타임라인: %u" -#: access/transam/xlog.c:4623 access/transam/xlog.c:4632 -#: access/transam/xlog.c:4656 access/transam/xlog.c:4663 -#: access/transam/xlog.c:4670 access/transam/xlog.c:4675 -#: access/transam/xlog.c:4682 access/transam/xlog.c:4689 -#: access/transam/xlog.c:4696 access/transam/xlog.c:4703 -#: access/transam/xlog.c:4710 access/transam/xlog.c:4717 -#: access/transam/xlog.c:4726 access/transam/xlog.c:4733 -#: access/transam/xlog.c:4742 access/transam/xlog.c:4749 -#: utils/init/miscinit.c:1502 +#: access/transam/xlog.c:4590 +#, c-format +msgid "could not generate secret authorization token" +msgstr "비밀 인증 토큰을 만들 수 없음" + +#: access/transam/xlog.c:4749 access/transam/xlog.c:4758 +#: access/transam/xlog.c:4782 access/transam/xlog.c:4789 +#: access/transam/xlog.c:4796 access/transam/xlog.c:4801 +#: access/transam/xlog.c:4808 access/transam/xlog.c:4815 +#: access/transam/xlog.c:4822 access/transam/xlog.c:4829 +#: access/transam/xlog.c:4836 access/transam/xlog.c:4843 +#: access/transam/xlog.c:4852 access/transam/xlog.c:4859 +#: utils/init/miscinit.c:1548 #, c-format msgid "database files are incompatible with server" msgstr "데이터베이스 파일들이 서버와 호환성이 없습니다" -#: access/transam/xlog.c:4624 +#: access/transam/xlog.c:4750 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), " @@ -2086,7 +2290,7 @@ msgstr "" "데이터베이스 클러스터는 PG_CONTROL_VERSION %d (0x%08x)(으)로 초기화되었지만 " "서버는 PG_CONTROL_VERSION %d (0x%08x)(으)로 컴파일되었습니다." -#: access/transam/xlog.c:4628 +#: access/transam/xlog.c:4754 #, c-format msgid "" "This could be a problem of mismatched byte ordering. It looks like you need " @@ -2094,7 +2298,7 @@ msgid "" msgstr "" "이것은 바이트 순서 불일치 문제일 수 있습니다. initdb 작업이 필요해 보입니다." -#: access/transam/xlog.c:4633 +#: access/transam/xlog.c:4759 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d, but the " @@ -2103,18 +2307,18 @@ msgstr "" "이 데이터베이스 클러스터는 PG_CONTROL_VERSION %d 버전으로 초기화 되었지만, 서" "버는 PG_CONTROL_VERSION %d 버전으로 컴파일 되어있습니다." -#: access/transam/xlog.c:4636 access/transam/xlog.c:4660 -#: access/transam/xlog.c:4667 access/transam/xlog.c:4672 +#: access/transam/xlog.c:4762 access/transam/xlog.c:4786 +#: access/transam/xlog.c:4793 access/transam/xlog.c:4798 #, c-format msgid "It looks like you need to initdb." msgstr "initdb 명령이 필요한 듯 합니다" -#: access/transam/xlog.c:4647 +#: access/transam/xlog.c:4773 #, c-format msgid "incorrect checksum in control file" msgstr "컨트롤 파일에 잘못된 체크섬 값이 있습니다" -#: access/transam/xlog.c:4657 +#: access/transam/xlog.c:4783 #, c-format msgid "" "The database cluster was initialized with CATALOG_VERSION_NO %d, but the " @@ -2123,7 +2327,7 @@ msgstr "" "이 데이터베이스 클러스터는 CATALOG_VERSION_NO %d 버전으로 초기화 되었지만, 서" "버는 CATALOG_VERSION_NO %d 버전으로 컴파일 되어있습니다." -#: access/transam/xlog.c:4664 +#: access/transam/xlog.c:4790 #, c-format msgid "" "The database cluster was initialized with MAXALIGN %d, but the server was " @@ -2132,7 +2336,7 @@ msgstr "" "이 데이터베이스 클러스터는 MAXALIGN %d (으)로 초기화 되었지만, 서버는 " "MAXALIGN %d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4671 +#: access/transam/xlog.c:4797 #, c-format msgid "" "The database cluster appears to use a different floating-point number format " @@ -2141,7 +2345,7 @@ msgstr "" "데이터베이스 클러스터와 서버 실행 파일이 서로 다른 부동 소수점 숫자 형식을 사" "용하고 있습니다." -#: access/transam/xlog.c:4676 +#: access/transam/xlog.c:4802 #, c-format msgid "" "The database cluster was initialized with BLCKSZ %d, but the server was " @@ -2150,19 +2354,18 @@ msgstr "" "이 데이터베이스 클러스터는 BLCKSZ %d (으)로 초기화 되었지만, 서버는 BLCKSZ " "%d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4679 access/transam/xlog.c:4686 -#: access/transam/xlog.c:4693 access/transam/xlog.c:4700 -#: access/transam/xlog.c:4707 access/transam/xlog.c:4714 -#: access/transam/xlog.c:4721 access/transam/xlog.c:4729 -#: access/transam/xlog.c:4736 access/transam/xlog.c:4745 -#: access/transam/xlog.c:4752 +#: access/transam/xlog.c:4805 access/transam/xlog.c:4812 +#: access/transam/xlog.c:4819 access/transam/xlog.c:4826 +#: access/transam/xlog.c:4833 access/transam/xlog.c:4840 +#: access/transam/xlog.c:4847 access/transam/xlog.c:4855 +#: access/transam/xlog.c:4862 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "" "서버를 새로 컴파일 하거나 initdb 명령을 사용해 새로 데이터베이스 클러스터를 " "다시 만들거나 해야할 것 같습니다." -#: access/transam/xlog.c:4683 +#: access/transam/xlog.c:4809 #, c-format msgid "" "The database cluster was initialized with RELSEG_SIZE %d, but the server was " @@ -2171,7 +2374,7 @@ msgstr "" "이 데이터베이스 클러스터는 RELSEG_SIZE %d (으)로 초기화 되었지만, 서버는 " "RELSEG_SIZE %d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4690 +#: access/transam/xlog.c:4816 #, c-format msgid "" "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was " @@ -2180,7 +2383,7 @@ msgstr "" "이 데이터베이스 클러스터는 XLOG_BLCKSZ %d (으)로 초기화 되었지만, 서버는 " "XLOG_BLCKSZ %d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4697 +#: access/transam/xlog.c:4823 #, c-format msgid "" "The database cluster was initialized with NAMEDATALEN %d, but the server was " @@ -2189,7 +2392,7 @@ msgstr "" "이 데이터베이스 클러스터는 NAMEDATALEN %d (으)로 초기화 되었지만, 서버는 " "NAMEDATALEN %d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4704 +#: access/transam/xlog.c:4830 #, c-format msgid "" "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server " @@ -2198,7 +2401,7 @@ msgstr "" "이 데이터베이스 클러스터는 INDEX_MAX_KEYS %d (으)로 초기화 되었지만, 서버는 " "INDEX_MAX_KEYS %d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4711 +#: access/transam/xlog.c:4837 #, c-format msgid "" "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the " @@ -2207,7 +2410,7 @@ msgstr "" "데이터베이스 클러스터는 TOAST_MAX_CHUNK_SIZE %d(으)로 초기화되었지만 서버는 " "TOAST_MAX_CHUNK_SIZE %d(으)로 컴파일 되었습니다." -#: access/transam/xlog.c:4718 +#: access/transam/xlog.c:4844 #, c-format msgid "" "The database cluster was initialized with LOBLKSIZE %d, but the server was " @@ -2216,25 +2419,7 @@ msgstr "" "이 데이터베이스 클러스터는 LOBLKSIZE %d(으)로 초기화 되었지만, 서버는 " "LOBLKSIZE %d (으)로 컴파일 되어있습니다." -#: access/transam/xlog.c:4727 -#, c-format -msgid "" -"The database cluster was initialized without USE_FLOAT4_BYVAL but the server " -"was compiled with USE_FLOAT4_BYVAL." -msgstr "" -"데이터베이스 클러스터는 USE_FLOAT4_BYVAL 없이 초기화되었지만, 서버는 " -"USE_FLOAT4_BYVAL을 사용하여 컴파일되었습니다." - -#: access/transam/xlog.c:4734 -#, c-format -msgid "" -"The database cluster was initialized with USE_FLOAT4_BYVAL but the server " -"was compiled without USE_FLOAT4_BYVAL." -msgstr "" -"데이터베이스 클러스터는 USE_FLOAT4_BYVAL을 사용하여 초기화되었지만, 서버는 " -"USE_FLOAT4_BYVAL 없이 컴파일되었습니다." - -#: access/transam/xlog.c:4743 +#: access/transam/xlog.c:4853 #, c-format msgid "" "The database cluster was initialized without USE_FLOAT8_BYVAL but the server " @@ -2243,7 +2428,7 @@ msgstr "" "데이터베이스 클러스터는 USE_FLOAT8_BYVAL 없이 초기화되었지만, 서버는 " "USE_FLOAT8_BYVAL을 사용하여 컴파일되었습니다." -#: access/transam/xlog.c:4750 +#: access/transam/xlog.c:4860 #, c-format msgid "" "The database cluster was initialized with USE_FLOAT8_BYVAL but the server " @@ -2252,7 +2437,7 @@ msgstr "" "데이터베이스 클러스터는 USE_FLOAT8_BYVAL을 사용하여 초기화되었지만, 서버는 " "USE_FLOAT8_BYVAL 없이 컴파일되었습니다." -#: access/transam/xlog.c:4759 +#: access/transam/xlog.c:4869 #, c-format msgid "" "WAL segment size must be a power of two between 1 MB and 1 GB, but the " @@ -2264,52 +2449,47 @@ msgstr[0] "" "WAL 조각 파일은 1MB부터 1GB 사이 2^n 크기여야 하지만, 컨트롤 파일에는 %d 바이" "트로 지정되었음" -#: access/transam/xlog.c:4771 +#: access/transam/xlog.c:4881 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "\"min_wal_size\" 값은 \"wal_segment_size\" 값의 최소 2배 이상이어야 함" -#: access/transam/xlog.c:4775 +#: access/transam/xlog.c:4885 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "\"max_wal_size\" 값은 \"wal_segment_size\" 값의 최소 2배 이상이어야 함" -#: access/transam/xlog.c:5127 -#, c-format -msgid "could not generate secret authorization token" -msgstr "비밀 인증 토큰을 만들 수 없음" - -#: access/transam/xlog.c:5217 +#: access/transam/xlog.c:5318 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "bootstrap 트랜잭션 로그 파일을 쓸 수 없음: %m" -#: access/transam/xlog.c:5225 +#: access/transam/xlog.c:5326 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "bootstrap 트랜잭션 로그 파일을 fsync할 수 없음: %m" -#: access/transam/xlog.c:5231 +#: access/transam/xlog.c:5332 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "bootstrap 트랜잭션 로그 파일을 닫을 수 없음: %m" -#: access/transam/xlog.c:5310 +#: access/transam/xlog.c:5393 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "\"%s\" 복구 명령 파일을 사용하는 것을 지원하지 않습니다" -#: access/transam/xlog.c:5375 +#: access/transam/xlog.c:5458 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "단일 사용자 서버를 대상으로 대기 모드를 사용할 수 없습니다." -#: access/transam/xlog.c:5392 +#: access/transam/xlog.c:5475 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "primary_conninfo 설정도, restore_command 설정도 없음" -#: access/transam/xlog.c:5393 +#: access/transam/xlog.c:5476 #, c-format msgid "" "The database server will regularly poll the pg_wal subdirectory to check for " @@ -2318,74 +2498,84 @@ msgstr "" "데이터베이스 서버는 일반적으로 주 서버에서 발생한 트랜잭션 로그를 반영하기 위" "해 pg_wal 하위 디렉터리를 조사할 것입니다." -#: access/transam/xlog.c:5401 +#: access/transam/xlog.c:5484 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "" "대기 모드를 활성화 하지 않았다면(standby_mode = off), restore_command 설정은 " "반드시 있어야 함" -#: access/transam/xlog.c:5439 +#: access/transam/xlog.c:5522 #, c-format msgid "recovery target timeline %u does not exist" msgstr "%u 복구 대상 타임라인이 없음" -#: access/transam/xlog.c:5554 +#: access/transam/xlog.c:5644 #, c-format msgid "archive recovery complete" msgstr "아카이브 복구 완료" -#: access/transam/xlog.c:5620 access/transam/xlog.c:5893 +#: access/transam/xlog.c:5710 access/transam/xlog.c:5983 #, c-format msgid "recovery stopping after reaching consistency" msgstr "일관성을 다 맞추어 복구 작업을 중지합니다." -#: access/transam/xlog.c:5641 +#: access/transam/xlog.c:5731 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "복구 중지 위치(LSN): \"%X/%X\" 이전" -#: access/transam/xlog.c:5727 +#: access/transam/xlog.c:5817 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "%u 트랜잭션 커밋 전 복구 중지함, 시간 %s" -#: access/transam/xlog.c:5734 +#: access/transam/xlog.c:5824 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "%u 트랜잭션 중단 전 복구 중지함, 시간 %s" -#: access/transam/xlog.c:5787 +#: access/transam/xlog.c:5877 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "복구 중지함, 복구 위치 \"%s\", 시간 %s" -#: access/transam/xlog.c:5805 +#: access/transam/xlog.c:5895 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "복구 중지 위치(LSN): \"%X/%X\" 이후" -#: access/transam/xlog.c:5873 +#: access/transam/xlog.c:5963 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "%u 트랜잭션 커밋 후 복구 중지함, 시간 %s" -#: access/transam/xlog.c:5881 +#: access/transam/xlog.c:5971 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "%u 트랜잭션 중단 후 복구 중지함, 시간 %s" -#: access/transam/xlog.c:5921 +#: access/transam/xlog.c:6020 +#, c-format +msgid "pausing at the end of recovery" +msgstr "복구 끝에 기다리는 중" + +#: access/transam/xlog.c:6021 +#, c-format +msgid "Execute pg_wal_replay_resume() to promote." +msgstr "운영 서버로 바꾸려면, pg_wal_replay_resume() 함수를 호출하세요." + +#: access/transam/xlog.c:6024 #, c-format msgid "recovery has paused" msgstr "복구 작업이 일시 중지 됨" -#: access/transam/xlog.c:5922 +#: access/transam/xlog.c:6025 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "계속 진행하려면, pg_wal_replay_resume() 함수를 호출하세요." -#: access/transam/xlog.c:6134 +#: access/transam/xlog.c:6242 #, c-format msgid "" "hot standby is not possible because %s = %d is a lower setting than on the " @@ -2394,14 +2584,14 @@ msgstr "" "읽기 전용 대기 서버로 운영이 불가능합니다. 현재 %s = %d 설정은 주 서버의 설정" "값(%d)보다 낮게 설정 되어 있기 때문입니다." -#: access/transam/xlog.c:6160 +#: access/transam/xlog.c:6266 #, c-format msgid "WAL was generated with wal_level=minimal, data may be missing" msgstr "" "WAL 내용이 wal_level=minimal 설정으로 만들여졌습니다. 자료가 손실 될 수 있습" "니다." -#: access/transam/xlog.c:6161 +#: access/transam/xlog.c:6267 #, c-format msgid "" "This happens if you temporarily set wal_level=minimal without taking a new " @@ -2410,7 +2600,7 @@ msgstr "" "이 문제는 새 베이스 백업을 받지 않은 상태에서 서버가 일시적으로 " "wal_level=minimal 설정으로 운영된 적이 있다면 발생합니다." -#: access/transam/xlog.c:6172 +#: access/transam/xlog.c:6278 #, c-format msgid "" "hot standby is not possible because wal_level was not set to \"replica\" or " @@ -2419,7 +2609,7 @@ msgstr "" "주 서버 wal_level 설정이 \"replica\" 또는 그 이상 수준으로 설정되지 않아, 읽" "기 전용 보조 서버로 운영될 수 없음" -#: access/transam/xlog.c:6173 +#: access/transam/xlog.c:6279 #, c-format msgid "" "Either set wal_level to \"replica\" on the master, or turn off hot_standby " @@ -2428,34 +2618,34 @@ msgstr "" "운영 서버의 환경 설정에서 wal_leve = \"replica\" 형태로 지정하든가 " "hot_standby = off 형태로 지정하십시오." -#: access/transam/xlog.c:6237 +#: access/transam/xlog.c:6341 #, c-format -msgid "control file contains invalid data" -msgstr "컨트롤 파일에 잘못된 데이터가 있습니다" +msgid "control file contains invalid checkpoint location" +msgstr "컨트롤 파일에 잘못된 체크포인트 위치가 있습니다" -#: access/transam/xlog.c:6243 +#: access/transam/xlog.c:6352 #, c-format msgid "database system was shut down at %s" msgstr "데이터베이스 시스템 마지막 가동 중지 시각: %s" -#: access/transam/xlog.c:6248 +#: access/transam/xlog.c:6358 #, c-format msgid "database system was shut down in recovery at %s" msgstr "복구 중 데이터베이스 시스템 마지막 가동 중지 시각: %s" -#: access/transam/xlog.c:6252 +#: access/transam/xlog.c:6364 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "" "데이터베이스 시스템 셧다운 작업이 비정상적으로 종료되었음; 마지막 운영시간: " "%s" -#: access/transam/xlog.c:6256 +#: access/transam/xlog.c:6370 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "데이터베이스 시스템 복구하는 도중 비정상적으로 가동 중지된 시각: %s" -#: access/transam/xlog.c:6258 +#: access/transam/xlog.c:6372 #, c-format msgid "" "This probably means that some data is corrupted and you will have to use the " @@ -2464,12 +2654,12 @@ msgstr "" "이 사태는 몇몇 데이터가 손상되었을 의미할 수도 있습니다. 확인해 보고, 필요하" "다면, 마지막 백업 자료로 복구해서 사용하세요." -#: access/transam/xlog.c:6262 +#: access/transam/xlog.c:6378 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "데이터베이스 시스템이 로그 시간 %s에 복구 도중 중지 되었음" -#: access/transam/xlog.c:6264 +#: access/transam/xlog.c:6380 #, c-format msgid "" "If this has occurred more than once some data might be corrupted and you " @@ -2478,57 +2668,62 @@ msgstr "" "이 사태로 몇몇 자료가 손상되었을 수도 있는데, 이런 경우라면,확인해 보고, 필요" "하다면, 마지막 백업 자료로 복구해서 사용하세요." -#: access/transam/xlog.c:6268 +#: access/transam/xlog.c:6386 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "데이터베이스 시스템이 비정상적으로 종료되었음; 마지막 운영시간: %s" -#: access/transam/xlog.c:6324 +#: access/transam/xlog.c:6392 +#, c-format +msgid "control file contains invalid database cluster state" +msgstr "컨트롤 파일에 잘못된 데이터베이스 클러스터 상태값이 있습니다" + +#: access/transam/xlog.c:6449 #, c-format msgid "entering standby mode" msgstr "대기 모드로 전환합니다" -#: access/transam/xlog.c:6327 +#: access/transam/xlog.c:6452 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "%u XID까지 시점 기반 복구 작업을 시작합니다" -#: access/transam/xlog.c:6331 +#: access/transam/xlog.c:6456 #, c-format msgid "starting point-in-time recovery to %s" msgstr "%s 까지 시점 복구 작업을 시작합니다" -#: access/transam/xlog.c:6335 +#: access/transam/xlog.c:6460 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "\"%s\" 복구 대상 이름까지 시점 복구 작업을 시작합니다" -#: access/transam/xlog.c:6339 +#: access/transam/xlog.c:6464 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "\"%X/%X\" 위치(LSN)까지 시점 복구 작업을 시작합니다" -#: access/transam/xlog.c:6344 +#: access/transam/xlog.c:6469 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "동기화 할 수 있는 마지막 지점까지 시점 복구 작업을 시작합니다" -#: access/transam/xlog.c:6347 +#: access/transam/xlog.c:6472 #, c-format msgid "starting archive recovery" msgstr "아카이브 복구 작업을 시작합니다" -#: access/transam/xlog.c:6401 access/transam/xlog.c:6533 +#: access/transam/xlog.c:6531 access/transam/xlog.c:6664 #, c-format msgid "checkpoint record is at %X/%X" msgstr "체크포인트 레코드 위치: %X/%X" -#: access/transam/xlog.c:6415 +#: access/transam/xlog.c:6546 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "체크포인트 기록으로 참조하는 재실행 위치를 찾을 수 없음" -#: access/transam/xlog.c:6416 access/transam/xlog.c:6426 +#: access/transam/xlog.c:6547 access/transam/xlog.c:6557 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add " @@ -2539,42 +2734,42 @@ msgid "" "restoring from a backup." msgstr "" -#: access/transam/xlog.c:6425 +#: access/transam/xlog.c:6556 #, c-format msgid "could not locate required checkpoint record" msgstr "요청된 체크포인트 레코드의 위치를 바르게 잡을 수 없음" -#: access/transam/xlog.c:6454 commands/tablespace.c:655 +#: access/transam/xlog.c:6585 commands/tablespace.c:654 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "\"%s\" 심벌릭 링크를 만들 수 없음: %m" -#: access/transam/xlog.c:6486 access/transam/xlog.c:6492 +#: access/transam/xlog.c:6617 access/transam/xlog.c:6623 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "\"%s\" 파일 무시함, \"%s\" 파일 없음" -#: access/transam/xlog.c:6488 access/transam/xlog.c:11487 +#: access/transam/xlog.c:6619 access/transam/xlog.c:11828 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿨습니다." -#: access/transam/xlog.c:6494 +#: access/transam/xlog.c:6625 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m" -#: access/transam/xlog.c:6545 +#: access/transam/xlog.c:6676 #, c-format msgid "could not locate a valid checkpoint record" msgstr "체크포인트 레코드의 위치를 바르게 잡을 수 없음" -#: access/transam/xlog.c:6583 +#: access/transam/xlog.c:6714 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "요청한 %u 타임라인은 서버 타임라인의 하위가 아님" -#: access/transam/xlog.c:6585 +#: access/transam/xlog.c:6716 #, c-format msgid "" "Latest checkpoint is at %X/%X on timeline %u, but in the history of the " @@ -2583,7 +2778,7 @@ msgstr "" "마지막 체크포인트 위치는 %X/%X (%u 타임라인)입니다. 하지만, 요청받은 타임라" "인 내역파일에는 그 타임라인 %X/%X 위치에서 분기되었습니다." -#: access/transam/xlog.c:6601 +#: access/transam/xlog.c:6732 #, c-format msgid "" "requested timeline %u does not contain minimum recovery point %X/%X on " @@ -2591,22 +2786,22 @@ msgid "" msgstr "" "요청한 %u 타임라인은 %X/%X 최소 복구 위치가 없습니다, 기존 타임라인: %u" -#: access/transam/xlog.c:6632 +#: access/transam/xlog.c:6763 #, c-format msgid "invalid next transaction ID" msgstr "잘못된 다음 트랜잭션 ID" -#: access/transam/xlog.c:6726 +#: access/transam/xlog.c:6857 #, c-format msgid "invalid redo in checkpoint record" msgstr "체크포인트 레코드 안에 잘못된 redo 정보가 있음" -#: access/transam/xlog.c:6737 +#: access/transam/xlog.c:6868 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "운영 중지 체크포인트에서 잘못된 재실행 정보 발견" -#: access/transam/xlog.c:6765 +#: access/transam/xlog.c:6902 #, c-format msgid "" "database system was not properly shut down; automatic recovery in progress" @@ -2614,18 +2809,18 @@ msgstr "" "데이터베이스 시스템이 정상적으로 종료되지 못했습니다, 자동 복구 작업을 진행합" "니다" -#: access/transam/xlog.c:6769 +#: access/transam/xlog.c:6906 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "" "%u 타임라인으로 비정상 중지에 대한 복구작업을 시작함, 기존 타임라인: %u" -#: access/transam/xlog.c:6812 +#: access/transam/xlog.c:6953 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label 파일 안에 컨트롤 파일과 일관성이 맞지 않는 자료가 있음" -#: access/transam/xlog.c:6813 +#: access/transam/xlog.c:6954 #, c-format msgid "" "This means that the backup is corrupted and you will have to use another " @@ -2634,42 +2829,47 @@ msgstr "" "이 문제는 백업 자료 자체가 손상 되었음을 말합니다. 다른 백업본으로 복구 작업" "을 진행해야 합니다." -#: access/transam/xlog.c:6904 +#: access/transam/xlog.c:7045 #, c-format msgid "initializing for hot standby" msgstr "읽기 전용 보조 서버로 초기화 중입니다." -#: access/transam/xlog.c:7036 +#: access/transam/xlog.c:7178 #, c-format msgid "redo starts at %X/%X" msgstr "%X/%X에서 redo 작업 시작됨" -#: access/transam/xlog.c:7260 +#: access/transam/xlog.c:7402 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "요청한 복구 중지 지점이 일치하는 복구 지점 앞에 있음" -#: access/transam/xlog.c:7298 +#: access/transam/xlog.c:7440 #, c-format msgid "redo done at %X/%X" msgstr "%X/%X에서 redo 작업 완료" -#: access/transam/xlog.c:7303 +#: access/transam/xlog.c:7445 #, c-format msgid "last completed transaction was at log time %s" msgstr "마지막 완료된 트랜잭션 기록 시간: %s" -#: access/transam/xlog.c:7312 +#: access/transam/xlog.c:7454 #, c-format msgid "redo is not required" msgstr "재반영해야 할 트랜잭션이 없음" -#: access/transam/xlog.c:7387 access/transam/xlog.c:7391 +#: access/transam/xlog.c:7466 +#, c-format +msgid "recovery ended before configured recovery target was reached" +msgstr "" + +#: access/transam/xlog.c:7545 access/transam/xlog.c:7549 #, c-format msgid "WAL ends before end of online backup" msgstr "온라인 백업 작업 끝나기전에 WAL 작업 종료됨" -#: access/transam/xlog.c:7388 +#: access/transam/xlog.c:7546 #, c-format msgid "" "All WAL generated while online backup was taken must be available at " @@ -2678,7 +2878,7 @@ msgstr "" "온라인 백업 중 만들어진 WAL 조각 파일은 복구 작업에서 반드시 모두 있어야 합니" "다." -#: access/transam/xlog.c:7392 +#: access/transam/xlog.c:7550 #, c-format msgid "" "Online backup started with pg_start_backup() must be ended with " @@ -2688,113 +2888,113 @@ msgstr "" "로 종료되어야 하며, 그 사이 만들어진 WAL 조각 파일은 복구 작업에서 모두 필요" "합니다." -#: access/transam/xlog.c:7395 +#: access/transam/xlog.c:7553 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL이 일치하는 복구 지점 앞에서 종료됨" -#: access/transam/xlog.c:7430 +#: access/transam/xlog.c:7588 #, c-format msgid "selected new timeline ID: %u" msgstr "지정한 새 타임라인 ID: %u" -#: access/transam/xlog.c:7878 +#: access/transam/xlog.c:8036 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "%X/%X 위치에서 복구 일관성을 맞춤" -#: access/transam/xlog.c:8070 +#: access/transam/xlog.c:8246 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "컨트롤 파일에서 잘못된 primary checkpoint 링크 발견" -#: access/transam/xlog.c:8074 +#: access/transam/xlog.c:8250 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "백업 라벨 파일에서 잘못된 체크포인트 링크 발견" -#: access/transam/xlog.c:8091 +#: access/transam/xlog.c:8268 #, c-format msgid "invalid primary checkpoint record" msgstr "잘못된 primary checkpoint 레코드" -#: access/transam/xlog.c:8095 +#: access/transam/xlog.c:8272 #, c-format msgid "invalid checkpoint record" msgstr "잘못된 checkpoint 레코드" -#: access/transam/xlog.c:8106 +#: access/transam/xlog.c:8283 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "primary checkpoint 레코드에서 잘못된 자원 관리자 ID 발견" -#: access/transam/xlog.c:8110 +#: access/transam/xlog.c:8287 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "checkpoint 레코드에서 잘못된 자원 관리자 ID 발견" -#: access/transam/xlog.c:8123 +#: access/transam/xlog.c:8300 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "primary checkpoint 레코드에서 잘못된 xl_info 발견" -#: access/transam/xlog.c:8127 +#: access/transam/xlog.c:8304 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "checkpoint 레코드에서 잘못된 xl_info 발견" -#: access/transam/xlog.c:8138 +#: access/transam/xlog.c:8315 #, c-format msgid "invalid length of primary checkpoint record" msgstr "primary checkpoint 레코드 길이가 잘못되었음" -#: access/transam/xlog.c:8142 +#: access/transam/xlog.c:8319 #, c-format msgid "invalid length of checkpoint record" msgstr "checkpoint 레코드 길이가 잘못되었음" -#: access/transam/xlog.c:8322 +#: access/transam/xlog.c:8499 #, c-format msgid "shutting down" msgstr "서비스를 멈추고 있습니다" -#: access/transam/xlog.c:8642 +#: access/transam/xlog.c:8819 #, c-format msgid "checkpoint skipped because system is idle" msgstr "시스템이 놀고 있어 체크포인트 작업 건너뜀" -#: access/transam/xlog.c:8842 +#: access/transam/xlog.c:9019 #, c-format msgid "" "concurrent write-ahead log activity while database system is shutting down" msgstr "데이터베이스 시스템이 중지되는 동안 동시 트랜잭션 로그가 활성화 되었음" -#: access/transam/xlog.c:9098 +#: access/transam/xlog.c:9276 #, c-format msgid "skipping restartpoint, recovery has already ended" msgstr "다시 시작 지점을 건너뜀, 복구가 이미 종료됨" -#: access/transam/xlog.c:9121 +#: access/transam/xlog.c:9299 #, c-format msgid "skipping restartpoint, already performed at %X/%X" msgstr "다시 시작 지점을 건너뜀, %X/%X에서 이미 수행됨" -#: access/transam/xlog.c:9288 +#: access/transam/xlog.c:9467 #, c-format msgid "recovery restart point at %X/%X" msgstr "%X/%X에서 복구 작업 시작함" -#: access/transam/xlog.c:9290 +#: access/transam/xlog.c:9469 #, c-format msgid "Last completed transaction was at log time %s." msgstr "마지막 완료된 트랜잭션 기록 시간은 %s 입니다." -#: access/transam/xlog.c:9424 +#: access/transam/xlog.c:9711 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "\"%s\" 이름의 복구 위치는 %X/%X에 만들었음" -#: access/transam/xlog.c:9565 +#: access/transam/xlog.c:9856 #, c-format msgid "" "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint " @@ -2802,12 +3002,12 @@ msgid "" msgstr "" "체크포인트 레코드에 예기치 않은 이전 타임라인ID %u(현재 타임라인ID: %u)" -#: access/transam/xlog.c:9574 +#: access/transam/xlog.c:9865 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "체크포인트 레코드에 예기치 않은 타임라인 ID %u이(가) 있음(%u 뒤)" -#: access/transam/xlog.c:9590 +#: access/transam/xlog.c:9881 #, c-format msgid "" "unexpected timeline ID %u in checkpoint record, before reaching minimum " @@ -2816,64 +3016,64 @@ msgstr "" "체크포인트 내역 안에 %u 타임라인 ID가 기대한 것과 다릅니다. 발생 위치: %X/%X " "(타임라인: %u) 최소 복구 위치 이전" -#: access/transam/xlog.c:9666 +#: access/transam/xlog.c:9957 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "온라인 백어이 취소되었음, 복구를 계속 할 수 없음" -#: access/transam/xlog.c:9720 access/transam/xlog.c:9774 -#: access/transam/xlog.c:9797 +#: access/transam/xlog.c:10013 access/transam/xlog.c:10069 +#: access/transam/xlog.c:10092 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "체크포인트 레코드에 예기치 않은 타임라인 ID %u이(가) 있음(%u이어야 함)" -#: access/transam/xlog.c:10117 +#: access/transam/xlog.c:10418 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "\"%s\" write-through 파일을 fsync할 수 없음: %m" -#: access/transam/xlog.c:10126 +#: access/transam/xlog.c:10424 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "\"%s\" 파일 fdatasync 실패: %m" -#: access/transam/xlog.c:10219 access/transam/xlog.c:10748 -#: access/transam/xlogfuncs.c:290 access/transam/xlogfuncs.c:317 -#: access/transam/xlogfuncs.c:356 access/transam/xlogfuncs.c:377 -#: access/transam/xlogfuncs.c:398 +#: access/transam/xlog.c:10523 access/transam/xlog.c:11061 +#: access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 +#: access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 +#: access/transam/xlogfuncs.c:383 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "WAL 제어 함수는 복구 작업 중에는 실행 될 수 없음" -#: access/transam/xlog.c:10228 access/transam/xlog.c:10757 +#: access/transam/xlog.c:10532 access/transam/xlog.c:11070 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "온라인 백업 작업을 하기 위한 WAL 수준이 충분치 않습니다." -#: access/transam/xlog.c:10229 access/transam/xlog.c:10758 -#: access/transam/xlogfuncs.c:323 +#: access/transam/xlog.c:10533 access/transam/xlog.c:11071 +#: access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "" "wal_level 값을 \"replica\" 또는 \"logical\"로 지정하고 서버를 실행하십시오." -#: access/transam/xlog.c:10234 +#: access/transam/xlog.c:10538 #, c-format msgid "backup label too long (max %d bytes)" msgstr "백업 라벨 이름이 너무 긺(최대 %d 바이트)" -#: access/transam/xlog.c:10271 access/transam/xlog.c:10547 -#: access/transam/xlog.c:10585 +#: access/transam/xlog.c:10575 access/transam/xlog.c:10860 +#: access/transam/xlog.c:10898 #, c-format msgid "a backup is already in progress" msgstr "이미 백업 작업이 진행 중입니다" -#: access/transam/xlog.c:10272 +#: access/transam/xlog.c:10576 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "pg_stop_backup() 함수를 실행하고 나서 다시 시도하세요." -#: access/transam/xlog.c:10368 +#: access/transam/xlog.c:10672 #, c-format msgid "" "WAL generated with full_page_writes=off was replayed since last restartpoint" @@ -2881,7 +3081,7 @@ msgstr "" "마지막 재시작 위치부터 재반영된 WAL 내용이 full_page_writes=off 설정으로 만들" "어진 내용입니다." -#: access/transam/xlog.c:10370 access/transam/xlog.c:10953 +#: access/transam/xlog.c:10674 access/transam/xlog.c:11266 #, c-format msgid "" "This means that the backup being taken on the standby is corrupt and should " @@ -2892,19 +3092,19 @@ msgstr "" "정을 활성화 하고, 주 서버에서 CHECKPOINT 명령을 실행하고, 온라인 백업을 다시 " "해서 사용하세요." -#: access/transam/xlog.c:10445 replication/basebackup.c:1251 -#: utils/adt/misc.c:329 +#: access/transam/xlog.c:10757 replication/basebackup.c:1423 +#: utils/adt/misc.c:342 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "\"%s\" 심볼릭 링크의 대상이 너무 긺" -#: access/transam/xlog.c:10497 commands/tablespace.c:403 -#: commands/tablespace.c:567 replication/basebackup.c:1266 utils/adt/misc.c:337 +#: access/transam/xlog.c:10810 commands/tablespace.c:402 +#: commands/tablespace.c:566 replication/basebackup.c:1438 utils/adt/misc.c:350 #, c-format msgid "tablespaces are not supported on this platform" msgstr "테이블스페이스 기능은 이 플랫폼에서는 지원하지 않습니다." -#: access/transam/xlog.c:10548 access/transam/xlog.c:10586 +#: access/transam/xlog.c:10861 access/transam/xlog.c:10899 #, c-format msgid "" "If you're sure there is no backup in progress, remove file \"%s\" and try " @@ -2913,30 +3113,30 @@ msgstr "" "실재로는 백업 작업을 안하고 있다고 확신한다면, \"%s\" 파일을 삭제하고 다시 시" "도해 보십시오." -#: access/transam/xlog.c:10773 +#: access/transam/xlog.c:11086 #, c-format msgid "exclusive backup not in progress" msgstr "exclusive 백업 작업을 하지 않고 있습니다" -#: access/transam/xlog.c:10800 +#: access/transam/xlog.c:11113 #, c-format msgid "a backup is not in progress" msgstr "현재 백업 작업을 하지 않고 있습니다" -#: access/transam/xlog.c:10886 access/transam/xlog.c:10899 -#: access/transam/xlog.c:11260 access/transam/xlog.c:11266 -#: access/transam/xlog.c:11314 access/transam/xlog.c:11387 -#: access/transam/xlogfuncs.c:693 +#: access/transam/xlog.c:11199 access/transam/xlog.c:11212 +#: access/transam/xlog.c:11601 access/transam/xlog.c:11607 +#: access/transam/xlog.c:11655 access/transam/xlog.c:11728 +#: access/transam/xlogfuncs.c:692 #, c-format msgid "invalid data in file \"%s\"" msgstr "\"%s\" 파일에 유효하지 않은 자료가 있습니다" -#: access/transam/xlog.c:10903 replication/basebackup.c:1103 +#: access/transam/xlog.c:11216 replication/basebackup.c:1271 #, c-format msgid "the standby was promoted during online backup" msgstr "대기 서버가 온라인 백업 중 주 서버로 전환되었습니다" -#: access/transam/xlog.c:10904 replication/basebackup.c:1104 +#: access/transam/xlog.c:11217 replication/basebackup.c:1272 #, c-format msgid "" "This means that the backup being taken is corrupt and should not be used. " @@ -2945,7 +3145,7 @@ msgstr "" "이런 경우, 해당 백업 자료가 손상되었을 가능성이 있습니다. 다른 백업본을 이용" "하세요." -#: access/transam/xlog.c:10951 +#: access/transam/xlog.c:11264 #, c-format msgid "" "WAL generated with full_page_writes=off was replayed during online backup" @@ -2953,14 +3153,14 @@ msgstr "" "온라인 백업 도중 full_page_writes=off 설정으로 만들어진 WAL 내용이 재반영되었" "습니다." -#: access/transam/xlog.c:11071 +#: access/transam/xlog.c:11384 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "" "베이스 백업이 끝났습니다. 필요한 WAL 조각 파일이 아카이브 되길 기다리고 있습" "니다." -#: access/transam/xlog.c:11081 +#: access/transam/xlog.c:11396 #, c-format msgid "" "still waiting for all required WAL segments to be archived (%d seconds " @@ -2968,7 +3168,7 @@ msgid "" msgstr "" "필요한 WAL 조각 파일 아카이빙이 완료되기를 계속 기다리고 있음 (%d초 경과)" -#: access/transam/xlog.c:11083 +#: access/transam/xlog.c:11398 #, c-format msgid "" "Check that your archive_command is executing properly. You can safely " @@ -2978,12 +3178,12 @@ msgstr "" "archive_command 설정을 살펴보세요. 이 백업 작업은 안전하게 취소 할 수 있지" "만, 데이터베이스 백업은 모든 WAL 조각 없이는 사용될 수 없습니다." -#: access/transam/xlog.c:11090 +#: access/transam/xlog.c:11405 #, c-format msgid "all required WAL segments have been archived" msgstr "모든 필요한 WAL 조각들이 아카이브 되었습니다." -#: access/transam/xlog.c:11094 +#: access/transam/xlog.c:11409 #, c-format msgid "" "WAL archiving is not enabled; you must ensure that all required WAL segments " @@ -2993,56 +3193,62 @@ msgstr "" "모든 WAL 조각 파일들을 직접 찾아서 따로 보관해 두어야 바르게 복구 할 수 있습" "니다." -#: access/transam/xlog.c:11297 +#: access/transam/xlog.c:11462 +#, c-format +msgid "aborting backup due to backend exiting before pg_stop_backup was called" +msgstr "" +"pg_stop_backup 작업이 호출되기 전에 백엔드가 종료되어 백업을 중지합니다." + +#: access/transam/xlog.c:11638 #, c-format msgid "backup time %s in file \"%s\"" msgstr "백업 시간: %s, 저장된 파일: \"%s\"" -#: access/transam/xlog.c:11302 +#: access/transam/xlog.c:11643 #, c-format msgid "backup label %s in file \"%s\"" msgstr "백업 라벨: %s, 저장된 파일: \"%s\"" -#: access/transam/xlog.c:11315 +#: access/transam/xlog.c:11656 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "타임라인 ID가 %u 값으로 분석했지만, 기대값은 %u 임" -#: access/transam/xlog.c:11319 +#: access/transam/xlog.c:11660 #, c-format msgid "backup timeline %u in file \"%s\"" msgstr "백업 타임라인: %u, 저장된 파일: \"%s\"" #. translator: %s is a WAL record description -#: access/transam/xlog.c:11427 +#: access/transam/xlog.c:11768 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "WAL redo 위치: %X/%X, 대상: %s" -#: access/transam/xlog.c:11476 +#: access/transam/xlog.c:11817 #, c-format msgid "online backup mode was not canceled" msgstr "온라인 백업 모드가 취소되지 않았음" -#: access/transam/xlog.c:11477 +#: access/transam/xlog.c:11818 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m." -#: access/transam/xlog.c:11486 access/transam/xlog.c:11498 -#: access/transam/xlog.c:11508 +#: access/transam/xlog.c:11827 access/transam/xlog.c:11839 +#: access/transam/xlog.c:11849 #, c-format msgid "online backup mode canceled" msgstr "온라인 백업 모드가 취소됨" -#: access/transam/xlog.c:11499 +#: access/transam/xlog.c:11840 #, c-format msgid "" "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "" "예상한 것처럼, \"%s\", \"%s\" 파일을 \"%s\", \"%s\" 이름으로 바꿨습니다." -#: access/transam/xlog.c:11509 +#: access/transam/xlog.c:11850 #, c-format msgid "" "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to " @@ -3051,42 +3257,47 @@ msgstr "" "\"%s\" 파일은 \"%s\" 이름으로 바꿨지만, \"%s\" 파일은 \"%s\" 이름으로 바꾸지 " "못했습니다: %m." -#: access/transam/xlog.c:11642 +#: access/transam/xlog.c:11983 access/transam/xlogutils.c:971 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "%s 로그 조각에서 읽기 실패, 위치: %u: %m" -#: access/transam/xlog.c:11648 replication/walsender.c:2489 +#: access/transam/xlog.c:11989 access/transam/xlogutils.c:978 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "%s 로그 조각에서 읽기 실패, 위치: %u, %d / %zu 읽음" -#: access/transam/xlog.c:12193 +#: access/transam/xlog.c:12518 +#, c-format +msgid "WAL receiver process shutdown requested" +msgstr "WAL receiver 프로세스가 중지 요청을 받았습니다." + +#: access/transam/xlog.c:12624 #, c-format msgid "received promote request" msgstr "운영 전환 신호를 받았습니다." -#: access/transam/xlog.c:12206 +#: access/transam/xlog.c:12637 #, c-format msgid "promote trigger file found: %s" msgstr "마스터 전환 트리거 파일이 있음: %s" -#: access/transam/xlog.c:12215 +#: access/transam/xlog.c:12646 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "\"%s\" 마스터 전환 트리거 파일의 상태값을 알 수 없음: %m" -#: access/transam/xlogarchive.c:250 +#: access/transam/xlogarchive.c:205 #, c-format msgid "archive file \"%s\" has wrong size: %lu instead of %lu" msgstr "\"%s\" 기록 파일의 크기가 이상합니다: 현재값 %lu, 원래값 %lu" -#: access/transam/xlogarchive.c:259 +#: access/transam/xlogarchive.c:214 #, c-format msgid "restored log file \"%s\" from archive" msgstr "아카이브에서 \"%s\" 로그파일을 복구했음" -#: access/transam/xlogarchive.c:304 +#: access/transam/xlogarchive.c:259 #, c-format msgid "could not restore file \"%s\" from archive: %s" msgstr "아카이브에서 \"%s\" 파일 복원 실패: %s" @@ -3094,189 +3305,197 @@ msgstr "아카이브에서 \"%s\" 파일 복원 실패: %s" #. translator: First %s represents a postgresql.conf parameter name like #. "recovery_end_command", the 2nd is the value of that parameter, the #. third an already translated error message. -#: access/transam/xlogarchive.c:413 +#: access/transam/xlogarchive.c:368 #, c-format msgid "%s \"%s\": %s" msgstr "%s \"%s\": %s" -#: access/transam/xlogarchive.c:523 access/transam/xlogarchive.c:587 +#: access/transam/xlogarchive.c:478 access/transam/xlogarchive.c:542 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "\"%s\" archive status 파일을 만들 수 없습니다: %m" -#: access/transam/xlogarchive.c:531 access/transam/xlogarchive.c:595 +#: access/transam/xlogarchive.c:486 access/transam/xlogarchive.c:550 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "\"%s\" archive status 파일에 쓸 수 없습니다: %m" -#: access/transam/xlogfuncs.c:57 -#, c-format -msgid "aborting backup due to backend exiting before pg_stop_backup was called" -msgstr "" -"pg_stop_backup 작업이 호출되기 전에 백엔드가 종료되어 백업을 중지합니다." - -#: access/transam/xlogfuncs.c:87 +#: access/transam/xlogfuncs.c:74 #, c-format msgid "a backup is already in progress in this session" msgstr "이미 이 세션에서 백업 작업이 진행 중입니다" -#: access/transam/xlogfuncs.c:145 access/transam/xlogfuncs.c:227 +#: access/transam/xlogfuncs.c:132 access/transam/xlogfuncs.c:213 #, c-format msgid "non-exclusive backup in progress" msgstr "non-exclusive 백업 진행 중입니다" -#: access/transam/xlogfuncs.c:146 access/transam/xlogfuncs.c:228 +#: access/transam/xlogfuncs.c:133 access/transam/xlogfuncs.c:214 #, c-format msgid "Did you mean to use pg_stop_backup('f')?" msgstr "pg_stop_backup('f') 형태로 함수를 호출했나요?" -#: access/transam/xlogfuncs.c:198 commands/event_trigger.c:1472 -#: commands/event_trigger.c:2024 commands/extension.c:1908 -#: commands/extension.c:2017 commands/extension.c:2241 commands/prepare.c:712 -#: executor/execExpr.c:2201 executor/execSRF.c:720 executor/functions.c:1023 -#: foreign/foreign.c:520 libpq/hba.c:2666 replication/logical/launcher.c:1112 -#: replication/logical/logicalfuncs.c:176 replication/logical/origin.c:1487 -#: replication/slotfuncs.c:236 replication/walsender.c:3246 -#: utils/adt/jsonfuncs.c:1700 utils/adt/jsonfuncs.c:1831 -#: utils/adt/jsonfuncs.c:2019 utils/adt/jsonfuncs.c:2146 -#: utils/adt/jsonfuncs.c:3608 utils/adt/pgstatfuncs.c:458 -#: utils/adt/pgstatfuncs.c:563 utils/fmgr/funcapi.c:63 utils/misc/guc.c:9419 -#: utils/mmgr/portalmem.c:1134 +#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1332 +#: commands/event_trigger.c:1890 commands/extension.c:1944 +#: commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:712 +#: executor/execExpr.c:2203 executor/execSRF.c:728 executor/functions.c:1046 +#: foreign/foreign.c:520 libpq/hba.c:2666 replication/logical/launcher.c:1086 +#: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1486 +#: replication/slotfuncs.c:252 replication/walsender.c:3265 +#: storage/ipc/shmem.c:550 utils/adt/datetime.c:4765 utils/adt/genfile.c:505 +#: utils/adt/genfile.c:588 utils/adt/jsonfuncs.c:1792 +#: utils/adt/jsonfuncs.c:1904 utils/adt/jsonfuncs.c:2092 +#: utils/adt/jsonfuncs.c:2201 utils/adt/jsonfuncs.c:3663 utils/adt/misc.c:215 +#: utils/adt/pgstatfuncs.c:476 utils/adt/pgstatfuncs.c:584 +#: utils/adt/pgstatfuncs.c:1719 utils/fmgr/funcapi.c:72 utils/misc/guc.c:9648 +#: utils/mmgr/portalmem.c:1136 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "" "set-values 함수(테이블 리턴 함수)가 set 정의 없이 사용되었습니다 (테이블과 해" "당 열 alias 지정하세요)" -#: access/transam/xlogfuncs.c:202 commands/event_trigger.c:1476 -#: commands/event_trigger.c:2028 commands/extension.c:1912 -#: commands/extension.c:2021 commands/extension.c:2245 commands/prepare.c:716 -#: foreign/foreign.c:525 libpq/hba.c:2670 replication/logical/launcher.c:1116 -#: replication/logical/logicalfuncs.c:180 replication/logical/origin.c:1491 -#: replication/slotfuncs.c:240 replication/walsender.c:3250 -#: utils/adt/pgstatfuncs.c:462 utils/adt/pgstatfuncs.c:567 -#: utils/misc/guc.c:9423 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1138 +#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1336 +#: commands/event_trigger.c:1894 commands/extension.c:1948 +#: commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:716 +#: foreign/foreign.c:525 libpq/hba.c:2670 replication/logical/launcher.c:1090 +#: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1490 +#: replication/slotfuncs.c:256 replication/walsender.c:3269 +#: storage/ipc/shmem.c:554 utils/adt/datetime.c:4769 utils/adt/genfile.c:509 +#: utils/adt/genfile.c:592 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:480 +#: utils/adt/pgstatfuncs.c:588 utils/adt/pgstatfuncs.c:1723 +#: utils/misc/guc.c:9652 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "materialize 모드가 필요합니다만, 이 구문에서는 허용되지 않습니다" -#: access/transam/xlogfuncs.c:244 +#: access/transam/xlogfuncs.c:230 #, c-format msgid "non-exclusive backup is not in progress" msgstr "non-exclusive 백업 상태가 아닙니다" -#: access/transam/xlogfuncs.c:245 +#: access/transam/xlogfuncs.c:231 #, c-format msgid "Did you mean to use pg_stop_backup('t')?" msgstr "pg_stop_backup('t') 형태로 함수를 호출했나요?" -#: access/transam/xlogfuncs.c:322 +#: access/transam/xlogfuncs.c:307 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "WAL 수준이 복원 위치를 만들 수 없는 수준입니다" -#: access/transam/xlogfuncs.c:330 +#: access/transam/xlogfuncs.c:315 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "복원 위치 이름이 너무 깁니다. (최대값, %d 글자)" -#: access/transam/xlogfuncs.c:468 access/transam/xlogfuncs.c:525 +#: access/transam/xlogfuncs.c:453 access/transam/xlogfuncs.c:510 #, c-format msgid "%s cannot be executed during recovery." msgstr "복구 작업 중에는 %s 명령을 실행할 수 없습니다." -#: access/transam/xlogfuncs.c:546 access/transam/xlogfuncs.c:566 -#: access/transam/xlogfuncs.c:583 access/transam/xlogfuncs.c:723 +#: access/transam/xlogfuncs.c:531 access/transam/xlogfuncs.c:558 +#: access/transam/xlogfuncs.c:582 access/transam/xlogfuncs.c:722 #, c-format msgid "recovery is not in progress" msgstr "현재 복구 작업 상태가 아닙니다" -#: access/transam/xlogfuncs.c:547 access/transam/xlogfuncs.c:567 -#: access/transam/xlogfuncs.c:584 access/transam/xlogfuncs.c:724 +#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:559 +#: access/transam/xlogfuncs.c:583 access/transam/xlogfuncs.c:723 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "복구 제어 함수는 복구 작업일 때만 실행할 수 있습니다." -#: access/transam/xlogfuncs.c:729 +#: access/transam/xlogfuncs.c:537 access/transam/xlogfuncs.c:564 +#, c-format +msgid "standby promotion is ongoing" +msgstr "대기 서버가 운영 서버로 전환 중입니다." + +#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:565 +#, c-format +msgid "%s cannot be executed after promotion is triggered." +msgstr "%s 함수는 운영 전환 중에는 실행될 수 없음." + +#: access/transam/xlogfuncs.c:728 #, c-format msgid "\"wait_seconds\" must not be negative or zero" msgstr "\"wait_seconds\" 값은 음수나 0을 사용할 수 없음" -#: access/transam/xlogfuncs.c:749 storage/ipc/signalfuncs.c:164 +#: access/transam/xlogfuncs.c:748 storage/ipc/signalfuncs.c:164 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "postmaster로 시그널 보내기 실패: %m" -#: access/transam/xlogfuncs.c:785 +#: access/transam/xlogfuncs.c:784 #, c-format msgid "server did not promote within %d seconds" -msgstr "" +msgstr "%d 초 이내에 운영 전환을 하지 못했습니다." -#: access/transam/xlogreader.c:299 +#: access/transam/xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "잘못된 레코드 위치: %X/%X" -#: access/transam/xlogreader.c:307 +#: access/transam/xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "%X/%X에서 contrecord를 필요로 함" -#: access/transam/xlogreader.c:348 access/transam/xlogreader.c:645 +#: access/transam/xlogreader.c:398 access/transam/xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "잘못된 레코드 길이: %X/%X, 기대값 %u, 실재값 %u" -#: access/transam/xlogreader.c:372 +#: access/transam/xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "너무 긴 길이(%u)의 레코드가 %X/%X에 있음" -#: access/transam/xlogreader.c:404 +#: access/transam/xlogreader.c:454 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "%X/%X 위치에 contrecord 플래그가 없음" -#: access/transam/xlogreader.c:417 +#: access/transam/xlogreader.c:467 #, c-format msgid "invalid contrecord length %u at %X/%X" msgstr "잘못된 contrecord 길이 %u, 위치 %X/%X" -#: access/transam/xlogreader.c:653 +#: access/transam/xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "잘못된 자원 관리 ID %u, 위치: %X/%X" -#: access/transam/xlogreader.c:667 access/transam/xlogreader.c:684 +#: access/transam/xlogreader.c:717 access/transam/xlogreader.c:734 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "레코드의 잘못된 프리링크 %X/%X, 해당 레코드 %X/%X" -#: access/transam/xlogreader.c:721 +#: access/transam/xlogreader.c:771 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "잘못된 자원관리자 데이터 체크섬, 위치: %X/%X 레코드" -#: access/transam/xlogreader.c:758 +#: access/transam/xlogreader.c:808 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "%04X 매직 번호가 잘못됨, 로그 파일 %s, 위치 %u" -#: access/transam/xlogreader.c:772 access/transam/xlogreader.c:823 +#: access/transam/xlogreader.c:822 access/transam/xlogreader.c:863 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "잘못된 정보 비트 %04X, 로그 파일 %s, 위치 %u" -#: access/transam/xlogreader.c:798 +#: access/transam/xlogreader.c:837 #, c-format msgid "" "WAL file is from different database system: WAL file database system " -"identifier is %s, pg_control database system identifier is %s" +"identifier is %llu, pg_control database system identifier is %llu" msgstr "" -"WAL 파일이 다른 시스템의 것입니다. WAL 파일의 시스템 식별자는 %s, pg_control " -"의 식별자는 %s" +"WAL 파일이 다른 시스템의 것입니다. WAL 파일의 시스템 식별자는 %llu, pg_control " +"의 식별자는 %llu" -#: access/transam/xlogreader.c:805 +#: access/transam/xlogreader.c:845 #, c-format msgid "" "WAL file is from different database system: incorrect segment size in page " @@ -3285,7 +3504,7 @@ msgstr "" "WAL 파일이 다른 데이터베이스 시스템의 것입니다: 페이지 헤더에 지정된 값이 잘" "못된 조각 크기임" -#: access/transam/xlogreader.c:811 +#: access/transam/xlogreader.c:851 #, c-format msgid "" "WAL file is from different database system: incorrect XLOG_BLCKSZ in page " @@ -3294,32 +3513,32 @@ msgstr "" "WAL 파일이 다른 데이터베이스 시스템의 것입니다: 페이지 헤더의 XLOG_BLCKSZ 값" "이 바르지 않음" -#: access/transam/xlogreader.c:842 +#: access/transam/xlogreader.c:882 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "잘못된 페이지 주소 %X/%X, 로그 파일 %s, 위치 %u" -#: access/transam/xlogreader.c:867 +#: access/transam/xlogreader.c:907 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "타임라인 범위 벗어남 %u (이전 번호 %u), 로그 파일 %s, 위치 %u" -#: access/transam/xlogreader.c:1112 +#: access/transam/xlogreader.c:1247 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "%u block_id는 범위를 벗어남, 위치 %X/%X" -#: access/transam/xlogreader.c:1135 +#: access/transam/xlogreader.c:1270 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA 지정했지만, %X/%X 에 자료가 없음" -#: access/transam/xlogreader.c:1142 +#: access/transam/xlogreader.c:1277 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA 지정 않았지만, %u 길이의 자료가 있음, 위치 %X/%X" -#: access/transam/xlogreader.c:1178 +#: access/transam/xlogreader.c:1313 #, c-format msgid "" "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at " @@ -3328,19 +3547,19 @@ msgstr "" "BKPIMAGE_HAS_HOLE 설정이 되어 있지만, 옵셋: %u, 길이: %u, 블록 이미지 길이: " "%u, 대상: %X/%X" -#: access/transam/xlogreader.c:1194 +#: access/transam/xlogreader.c:1329 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "" "BKPIMAGE_HAS_HOLE 설정이 안되어 있지만, 옵셋: %u, 길이: %u, 대상: %X/%X" -#: access/transam/xlogreader.c:1209 +#: access/transam/xlogreader.c:1344 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "" "BKPIMAGE_IS_COMPRESSED 설정이 되어 있지만, 블록 이미지 길이: %u, 대상: %X/%X" -#: access/transam/xlogreader.c:1224 +#: access/transam/xlogreader.c:1359 #, c-format msgid "" "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image " @@ -3349,54 +3568,43 @@ msgstr "" "BKPIMAGE_HAS_HOLE, BKPIMAGE_IS_COMPRESSED 지정 안되어 있으나, 블록 이미지 길" "이는 %u, 대상: %X/%X" -#: access/transam/xlogreader.c:1240 +#: access/transam/xlogreader.c:1375 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL 설정이 되어 있지만, %X/%X 에 이전 릴레이션 없음" -#: access/transam/xlogreader.c:1252 +#: access/transam/xlogreader.c:1387 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "잘못된 block_id %u, 위치 %X/%X" -#: access/transam/xlogreader.c:1341 +#: access/transam/xlogreader.c:1476 #, c-format msgid "record with invalid length at %X/%X" msgstr "잘못된 레코드 길이, 위치 %X/%X" -#: access/transam/xlogreader.c:1430 +#: access/transam/xlogreader.c:1565 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "잘못된 압축 이미지, 위치 %X/%X, 블록 %d" -#: access/transam/xlogutils.c:727 replication/walreceiver.c:959 -#: replication/walsender.c:2462 -#, c-format -msgid "could not seek in log segment %s to offset %u: %m" -msgstr "%s 로그 조각에서 해당 위치를 찾을 수 없음: %u: %m" - -#: access/transam/xlogutils.c:751 -#, c-format -msgid "could not read from log segment %s, offset %u, length %lu: %m" -msgstr "%s 로그 조각 읽기 실패, 위치 %u, 길이 %lu: %m" - #: bootstrap/bootstrap.c:271 #, c-format msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X 값은 1 MB ~ 1 GB 사이 2^n 값이어야 함" -#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:821 tcop/postgres.c:3635 +#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:842 tcop/postgres.c:3705 #, c-format msgid "--%s requires a value" msgstr "--%s 옵션은 해당 값을 지정해야합니다" -#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:826 tcop/postgres.c:3640 +#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:847 tcop/postgres.c:3710 #, c-format msgid "-c %s requires a value" msgstr "-c %s 옵션은 해당 값을 지정해야합니다" -#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:838 -#: postmaster/postmaster.c:851 +#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:859 +#: postmaster/postmaster.c:872 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "자제한 사항은 \"%s --help\" 명령으로 살펴보십시오.\n" @@ -3406,238 +3614,241 @@ msgstr "자제한 사항은 \"%s --help\" 명령으로 살펴보십시오.\n" msgid "%s: invalid command-line arguments\n" msgstr "%s: 잘못된 명령행 인자\n" -#: catalog/aclchk.c:203 +#: catalog/aclchk.c:181 #, c-format msgid "grant options can only be granted to roles" msgstr "grant 옵션들은 롤에서만 지정될 수 있습니다" -#: catalog/aclchk.c:326 +#: catalog/aclchk.c:300 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")에 대한 권한이 부여되지 않았음" -#: catalog/aclchk.c:331 +#: catalog/aclchk.c:305 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "\"%s\"에 대한 권한이 부여되지 않았음" -#: catalog/aclchk.c:339 +#: catalog/aclchk.c:313 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")에 대한 일부 권한이 부여되지 않았음" -#: catalog/aclchk.c:344 +#: catalog/aclchk.c:318 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "\"%s\"에 대한 일부 권한이 부여되지 않았음" -#: catalog/aclchk.c:355 +#: catalog/aclchk.c:329 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")에 대한 권한을 취소할 수 없음" -#: catalog/aclchk.c:360 +#: catalog/aclchk.c:334 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "\"%s\"에 대한 권한을 취소할 수 없음" -#: catalog/aclchk.c:368 +#: catalog/aclchk.c:342 #, c-format msgid "" "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")의 일부 권한을 박탈할 수 없음" -#: catalog/aclchk.c:373 +#: catalog/aclchk.c:347 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "\"%s\"에 대한 일부 권한을 취소할 수 없음" -#: catalog/aclchk.c:456 catalog/aclchk.c:999 +#: catalog/aclchk.c:430 catalog/aclchk.c:973 #, c-format msgid "invalid privilege type %s for relation" msgstr "릴레이션의 %s 권한은 잘못된 종류임" -#: catalog/aclchk.c:460 catalog/aclchk.c:1003 +#: catalog/aclchk.c:434 catalog/aclchk.c:977 #, c-format msgid "invalid privilege type %s for sequence" msgstr "시퀀스의 %s 권한은 잘못된 종류임" -#: catalog/aclchk.c:464 +#: catalog/aclchk.c:438 #, c-format msgid "invalid privilege type %s for database" msgstr "%s 권한은 데이터베이스에는 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:468 +#: catalog/aclchk.c:442 #, c-format msgid "invalid privilege type %s for domain" msgstr "%s 권한은 도메인에서 유효하지 않음" -#: catalog/aclchk.c:472 catalog/aclchk.c:1007 +#: catalog/aclchk.c:446 catalog/aclchk.c:981 #, c-format msgid "invalid privilege type %s for function" msgstr "%s 권한은 함수에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:476 +#: catalog/aclchk.c:450 #, c-format msgid "invalid privilege type %s for language" msgstr "%s 권한은 프로시주얼 언어에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:480 +#: catalog/aclchk.c:454 #, c-format msgid "invalid privilege type %s for large object" msgstr "%s 권한은 대형 개체에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:484 catalog/aclchk.c:1023 +#: catalog/aclchk.c:458 catalog/aclchk.c:997 #, c-format msgid "invalid privilege type %s for schema" msgstr "%s 권한은 스키마(schema)에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:488 catalog/aclchk.c:1011 +#: catalog/aclchk.c:462 catalog/aclchk.c:985 #, c-format msgid "invalid privilege type %s for procedure" msgstr "프로시져용 %s 권한 종류가 잘못됨" -#: catalog/aclchk.c:492 catalog/aclchk.c:1015 +#: catalog/aclchk.c:466 catalog/aclchk.c:989 #, c-format msgid "invalid privilege type %s for routine" msgstr "루틴용 %s 권한 종류가 잘못됨" -#: catalog/aclchk.c:496 +#: catalog/aclchk.c:470 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "%s 권한은 테이블스페이스에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:500 catalog/aclchk.c:1019 +#: catalog/aclchk.c:474 catalog/aclchk.c:993 #, c-format msgid "invalid privilege type %s for type" msgstr "%s 권한은 자료형에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:504 +#: catalog/aclchk.c:478 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "%s 권한 형식은 외부 데이터 래퍼에 유효하지 않음" -#: catalog/aclchk.c:508 +#: catalog/aclchk.c:482 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "%s 권한 형식은 외부 서버에 유효하지 않음" -#: catalog/aclchk.c:547 +#: catalog/aclchk.c:521 #, c-format msgid "column privileges are only valid for relations" msgstr "칼럼 권한은 릴레이션에서만 유효함" -#: catalog/aclchk.c:707 catalog/aclchk.c:4135 catalog/aclchk.c:4917 -#: catalog/objectaddress.c:964 catalog/pg_largeobject.c:116 -#: storage/large_object/inv_api.c:283 +#: catalog/aclchk.c:681 catalog/aclchk.c:4100 catalog/aclchk.c:4882 +#: catalog/objectaddress.c:965 catalog/pg_largeobject.c:116 +#: storage/large_object/inv_api.c:285 #, c-format msgid "large object %u does not exist" msgstr "%u large object 없음" -#: catalog/aclchk.c:936 catalog/aclchk.c:945 commands/collationcmds.c:117 -#: commands/copy.c:1139 commands/copy.c:1159 commands/copy.c:1168 -#: commands/copy.c:1177 commands/copy.c:1186 commands/copy.c:1195 -#: commands/copy.c:1204 commands/copy.c:1213 commands/copy.c:1231 -#: commands/copy.c:1247 commands/copy.c:1267 commands/copy.c:1284 -#: commands/dbcommands.c:156 commands/dbcommands.c:165 -#: commands/dbcommands.c:174 commands/dbcommands.c:183 -#: commands/dbcommands.c:192 commands/dbcommands.c:201 -#: commands/dbcommands.c:210 commands/dbcommands.c:219 -#: commands/dbcommands.c:228 commands/dbcommands.c:1448 -#: commands/dbcommands.c:1457 commands/dbcommands.c:1466 -#: commands/dbcommands.c:1475 commands/extension.c:1688 -#: commands/extension.c:1698 commands/extension.c:1708 -#: commands/extension.c:1718 commands/extension.c:2960 -#: commands/foreigncmds.c:543 commands/foreigncmds.c:552 -#: commands/functioncmds.c:568 commands/functioncmds.c:734 -#: commands/functioncmds.c:743 commands/functioncmds.c:752 -#: commands/functioncmds.c:761 commands/functioncmds.c:2193 -#: commands/functioncmds.c:2201 commands/publicationcmds.c:91 +#: catalog/aclchk.c:910 catalog/aclchk.c:919 commands/collationcmds.c:118 +#: commands/copy.c:1134 commands/copy.c:1154 commands/copy.c:1163 +#: commands/copy.c:1172 commands/copy.c:1181 commands/copy.c:1190 +#: commands/copy.c:1199 commands/copy.c:1208 commands/copy.c:1226 +#: commands/copy.c:1242 commands/copy.c:1262 commands/copy.c:1279 +#: commands/dbcommands.c:157 commands/dbcommands.c:166 +#: commands/dbcommands.c:175 commands/dbcommands.c:184 +#: commands/dbcommands.c:193 commands/dbcommands.c:202 +#: commands/dbcommands.c:211 commands/dbcommands.c:220 +#: commands/dbcommands.c:229 commands/dbcommands.c:238 +#: commands/dbcommands.c:260 commands/dbcommands.c:1502 +#: commands/dbcommands.c:1511 commands/dbcommands.c:1520 +#: commands/dbcommands.c:1529 commands/extension.c:1735 +#: commands/extension.c:1745 commands/extension.c:1755 +#: commands/extension.c:3055 commands/foreigncmds.c:539 +#: commands/foreigncmds.c:548 commands/functioncmds.c:570 +#: commands/functioncmds.c:736 commands/functioncmds.c:745 +#: commands/functioncmds.c:754 commands/functioncmds.c:763 +#: commands/functioncmds.c:2014 commands/functioncmds.c:2022 +#: commands/publicationcmds.c:90 commands/publicationcmds.c:133 #: commands/sequence.c:1267 commands/sequence.c:1277 commands/sequence.c:1287 #: commands/sequence.c:1297 commands/sequence.c:1307 commands/sequence.c:1317 #: commands/sequence.c:1327 commands/sequence.c:1337 commands/sequence.c:1347 -#: commands/subscriptioncmds.c:111 commands/subscriptioncmds.c:121 -#: commands/subscriptioncmds.c:131 commands/subscriptioncmds.c:141 -#: commands/subscriptioncmds.c:155 commands/subscriptioncmds.c:166 -#: commands/subscriptioncmds.c:180 commands/tablecmds.c:6610 -#: commands/typecmds.c:299 commands/typecmds.c:1428 commands/typecmds.c:1437 -#: commands/typecmds.c:1445 commands/typecmds.c:1453 commands/typecmds.c:1461 +#: commands/subscriptioncmds.c:104 commands/subscriptioncmds.c:114 +#: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 +#: commands/subscriptioncmds.c:148 commands/subscriptioncmds.c:159 +#: commands/subscriptioncmds.c:173 commands/tablecmds.c:7102 +#: commands/typecmds.c:322 commands/typecmds.c:1355 commands/typecmds.c:1364 +#: commands/typecmds.c:1372 commands/typecmds.c:1380 commands/typecmds.c:1388 #: commands/user.c:133 commands/user.c:147 commands/user.c:156 #: commands/user.c:165 commands/user.c:174 commands/user.c:183 #: commands/user.c:192 commands/user.c:201 commands/user.c:210 #: commands/user.c:219 commands/user.c:228 commands/user.c:237 -#: commands/user.c:246 commands/user.c:571 commands/user.c:579 -#: commands/user.c:587 commands/user.c:595 commands/user.c:603 -#: commands/user.c:611 commands/user.c:619 commands/user.c:627 -#: commands/user.c:636 commands/user.c:644 commands/user.c:652 -#: parser/parse_utilcmd.c:385 replication/pgoutput/pgoutput.c:111 -#: replication/pgoutput/pgoutput.c:132 replication/walsender.c:817 -#: replication/walsender.c:828 replication/walsender.c:838 +#: commands/user.c:246 commands/user.c:582 commands/user.c:590 +#: commands/user.c:598 commands/user.c:606 commands/user.c:614 +#: commands/user.c:622 commands/user.c:630 commands/user.c:638 +#: commands/user.c:647 commands/user.c:655 commands/user.c:663 +#: parser/parse_utilcmd.c:387 replication/pgoutput/pgoutput.c:141 +#: replication/pgoutput/pgoutput.c:162 replication/walsender.c:886 +#: replication/walsender.c:897 replication/walsender.c:907 #, c-format msgid "conflicting or redundant options" msgstr "상충하거나 중복된 옵션들" -#: catalog/aclchk.c:1056 +#: catalog/aclchk.c:1030 #, c-format msgid "default privileges cannot be set for columns" msgstr "default privileges 설정은 칼럼 대상으로 할 수 없음" -#: catalog/aclchk.c:1216 +#: catalog/aclchk.c:1190 #, c-format msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "GRANT/REVOKE ON SCHEMAS 구문을 쓸 때는 IN SCHEMA 구문을 쓸 수 없음" -#: catalog/aclchk.c:1584 catalog/catalog.c:519 catalog/objectaddress.c:1426 -#: commands/analyze.c:383 commands/copy.c:5134 commands/sequence.c:1702 -#: commands/tablecmds.c:6152 commands/tablecmds.c:6310 -#: commands/tablecmds.c:6384 commands/tablecmds.c:6454 -#: commands/tablecmds.c:6535 commands/tablecmds.c:6629 -#: commands/tablecmds.c:6688 commands/tablecmds.c:6827 -#: commands/tablecmds.c:6909 commands/tablecmds.c:7001 -#: commands/tablecmds.c:7109 commands/tablecmds.c:10352 -#: commands/tablecmds.c:10534 commands/tablecmds.c:10695 -#: commands/tablecmds.c:11680 commands/trigger.c:928 parser/analyze.c:2330 -#: parser/parse_relation.c:2788 parser/parse_relation.c:2851 -#: parser/parse_target.c:1031 parser/parse_type.c:145 utils/adt/acl.c:2885 -#: utils/adt/ruleutils.c:2511 +#: catalog/aclchk.c:1558 catalog/catalog.c:506 catalog/objectaddress.c:1427 +#: commands/analyze.c:389 commands/copy.c:5080 commands/sequence.c:1702 +#: commands/tablecmds.c:6578 commands/tablecmds.c:6721 +#: commands/tablecmds.c:6771 commands/tablecmds.c:6845 +#: commands/tablecmds.c:6915 commands/tablecmds.c:7027 +#: commands/tablecmds.c:7121 commands/tablecmds.c:7180 +#: commands/tablecmds.c:7253 commands/tablecmds.c:7282 +#: commands/tablecmds.c:7437 commands/tablecmds.c:7519 +#: commands/tablecmds.c:7612 commands/tablecmds.c:7767 +#: commands/tablecmds.c:10972 commands/tablecmds.c:11154 +#: commands/tablecmds.c:11314 commands/tablecmds.c:12397 commands/trigger.c:876 +#: parser/analyze.c:2339 parser/parse_relation.c:713 parser/parse_target.c:1036 +#: parser/parse_type.c:144 parser/parse_utilcmd.c:3289 +#: parser/parse_utilcmd.c:3324 parser/parse_utilcmd.c:3366 utils/adt/acl.c:2870 +#: utils/adt/ruleutils.c:2535 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "\"%s\" 칼럼은 \"%s\" 릴레이션(relation)에 없음" -#: catalog/aclchk.c:1847 catalog/objectaddress.c:1266 commands/sequence.c:1140 -#: commands/tablecmds.c:232 commands/tablecmds.c:14999 utils/adt/acl.c:2075 -#: utils/adt/acl.c:2105 utils/adt/acl.c:2137 utils/adt/acl.c:2169 -#: utils/adt/acl.c:2197 utils/adt/acl.c:2227 +#: catalog/aclchk.c:1821 catalog/objectaddress.c:1267 commands/sequence.c:1140 +#: commands/tablecmds.c:236 commands/tablecmds.c:15706 utils/adt/acl.c:2060 +#: utils/adt/acl.c:2090 utils/adt/acl.c:2122 utils/adt/acl.c:2154 +#: utils/adt/acl.c:2182 utils/adt/acl.c:2212 #, c-format msgid "\"%s\" is not a sequence" msgstr "\"%s\" 시퀀스가 아님" -#: catalog/aclchk.c:1885 +#: catalog/aclchk.c:1859 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "\"%s\" 시퀀스는 USAGE, SELECT 및 UPDATE 권한만 지원함" -#: catalog/aclchk.c:1902 +#: catalog/aclchk.c:1876 #, c-format msgid "invalid privilege type %s for table" msgstr "%s 권한은 테이블에서 사용할 수 없은 권한 형태임" -#: catalog/aclchk.c:2068 +#: catalog/aclchk.c:2042 #, c-format msgid "invalid privilege type %s for column" msgstr "%s 권한 형식은 칼럼에서 유효하지 않음" -#: catalog/aclchk.c:2081 +#: catalog/aclchk.c:2055 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "\"%s\" 시퀀스는 SELECT 열 권한만 지원함" -#: catalog/aclchk.c:2663 +#: catalog/aclchk.c:2637 #, c-format msgid "language \"%s\" is not trusted" msgstr "\"%s\" 프로시주얼 언어는 안전하지 못합니다" -#: catalog/aclchk.c:2665 +#: catalog/aclchk.c:2639 #, c-format msgid "" "GRANT and REVOKE are not allowed on untrusted languages, because only " @@ -3646,525 +3857,526 @@ msgstr "" "안전하지 않은 프로시져 언어에 대해서는 GRANT 또는 REVOKE 작업을 허용하지 않습" "니다, 안전하지 않은 프로시져 언어는 슈퍼유저만 사용할 수 있기 때문입니다." -#: catalog/aclchk.c:3179 +#: catalog/aclchk.c:3153 #, c-format msgid "cannot set privileges of array types" msgstr "배열형 자료형에 권한 설정을 할 수 없음" -#: catalog/aclchk.c:3180 +#: catalog/aclchk.c:3154 #, c-format msgid "Set the privileges of the element type instead." msgstr "그 배열 요소에 해당하는 자료형에 대해서 접근 권한 설정을 하세요." -#: catalog/aclchk.c:3187 catalog/objectaddress.c:1560 +#: catalog/aclchk.c:3161 catalog/objectaddress.c:1561 #, c-format msgid "\"%s\" is not a domain" msgstr "\"%s\" 이름의 개체는 도메인이 아닙니다" -#: catalog/aclchk.c:3307 +#: catalog/aclchk.c:3281 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "알 수 없는 권한 타입 \"%s\"" -#: catalog/aclchk.c:3368 +#: catalog/aclchk.c:3342 #, c-format msgid "permission denied for aggregate %s" msgstr "%s 집계함수에 대한 접근 권한 없음" -#: catalog/aclchk.c:3371 +#: catalog/aclchk.c:3345 #, c-format msgid "permission denied for collation %s" msgstr "%s 정렬정의(collation) 접근 권한 없음" -#: catalog/aclchk.c:3374 +#: catalog/aclchk.c:3348 #, c-format msgid "permission denied for column %s" msgstr "%s 칼럼에 대한 접근 권한 없음" -#: catalog/aclchk.c:3377 +#: catalog/aclchk.c:3351 #, c-format msgid "permission denied for conversion %s" msgstr "%s 문자코드변환규칙(conversion) 접근 권한 없음" -#: catalog/aclchk.c:3380 +#: catalog/aclchk.c:3354 #, c-format msgid "permission denied for database %s" msgstr "%s 데이터베이스 접근 권한 없음" -#: catalog/aclchk.c:3383 +#: catalog/aclchk.c:3357 #, c-format msgid "permission denied for domain %s" msgstr "%s 도메인에 대한 접근 권한 없음" -#: catalog/aclchk.c:3386 +#: catalog/aclchk.c:3360 #, c-format msgid "permission denied for event trigger %s" msgstr "%s 이벤트 트리거 접근 권한 없음" -#: catalog/aclchk.c:3389 +#: catalog/aclchk.c:3363 #, c-format msgid "permission denied for extension %s" msgstr "%s 확장 모듈 접근 권한 없음" -#: catalog/aclchk.c:3392 +#: catalog/aclchk.c:3366 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "%s 외부 데이터 래퍼 접근 권한 없음" -#: catalog/aclchk.c:3395 +#: catalog/aclchk.c:3369 #, c-format msgid "permission denied for foreign server %s" msgstr "%s 외부 서버 접근 권한 없음" -#: catalog/aclchk.c:3398 +#: catalog/aclchk.c:3372 #, c-format msgid "permission denied for foreign table %s" msgstr "%s 외부 테이블 접근 권한 없음" -#: catalog/aclchk.c:3401 +#: catalog/aclchk.c:3375 #, c-format msgid "permission denied for function %s" msgstr "%s 함수 접근 권한 없음" -#: catalog/aclchk.c:3404 +#: catalog/aclchk.c:3378 #, c-format msgid "permission denied for index %s" msgstr "%s 인덱스 접근 권한 없음" -#: catalog/aclchk.c:3407 +#: catalog/aclchk.c:3381 #, c-format msgid "permission denied for language %s" msgstr "%s 프로시주얼 언어 접근 권한 없음" -#: catalog/aclchk.c:3410 +#: catalog/aclchk.c:3384 #, c-format msgid "permission denied for large object %s" msgstr "%s 대형 개체 접근 권한 없음" -#: catalog/aclchk.c:3413 +#: catalog/aclchk.c:3387 #, c-format msgid "permission denied for materialized view %s" msgstr "%s 구체화된 뷰에 대한 접근 권한 없음" -#: catalog/aclchk.c:3416 +#: catalog/aclchk.c:3390 #, c-format msgid "permission denied for operator class %s" msgstr "%s 연산자 클래스 접근 권한 없음" -#: catalog/aclchk.c:3419 +#: catalog/aclchk.c:3393 #, c-format msgid "permission denied for operator %s" msgstr "%s 연산자 접근 권한 없음" -#: catalog/aclchk.c:3422 +#: catalog/aclchk.c:3396 #, c-format msgid "permission denied for operator family %s" msgstr "%s 연산자 패밀리 접근 권한 없음" -#: catalog/aclchk.c:3425 +#: catalog/aclchk.c:3399 #, c-format msgid "permission denied for policy %s" msgstr "%s 정책에 대한 접근 권한 없음" -#: catalog/aclchk.c:3428 +#: catalog/aclchk.c:3402 #, c-format msgid "permission denied for procedure %s" msgstr "%s 프로시져에 대한 접근 권한 없음" -#: catalog/aclchk.c:3431 +#: catalog/aclchk.c:3405 #, c-format msgid "permission denied for publication %s" msgstr "%s 발행 접근 권한 없음" -#: catalog/aclchk.c:3434 +#: catalog/aclchk.c:3408 #, c-format msgid "permission denied for routine %s" msgstr "%s 루틴에 대한 접근 권한 없음" -#: catalog/aclchk.c:3437 +#: catalog/aclchk.c:3411 #, c-format msgid "permission denied for schema %s" msgstr "%s 스키마(schema) 접근 권한 없음" -#: catalog/aclchk.c:3440 commands/sequence.c:610 commands/sequence.c:844 +#: catalog/aclchk.c:3414 commands/sequence.c:610 commands/sequence.c:844 #: commands/sequence.c:886 commands/sequence.c:927 commands/sequence.c:1800 #: commands/sequence.c:1864 #, c-format msgid "permission denied for sequence %s" msgstr "%s 시퀀스 접근 권한 없음" -#: catalog/aclchk.c:3443 +#: catalog/aclchk.c:3417 #, c-format msgid "permission denied for statistics object %s" msgstr "%s 개체 통계정보 접근 권한 없음" -#: catalog/aclchk.c:3446 +#: catalog/aclchk.c:3420 #, c-format msgid "permission denied for subscription %s" msgstr "%s 구독 접근 권한 없음" -#: catalog/aclchk.c:3449 +#: catalog/aclchk.c:3423 #, c-format msgid "permission denied for table %s" msgstr "%s 테이블에 대한 접근 권한 없음" -#: catalog/aclchk.c:3452 +#: catalog/aclchk.c:3426 #, c-format msgid "permission denied for tablespace %s" msgstr "%s 테이블스페이스 접근 권한 없음" -#: catalog/aclchk.c:3455 +#: catalog/aclchk.c:3429 #, c-format msgid "permission denied for text search configuration %s" msgstr "%s 전문 검색 구성 접근 권한 없음" -#: catalog/aclchk.c:3458 +#: catalog/aclchk.c:3432 #, c-format msgid "permission denied for text search dictionary %s" msgstr "%s 전문 검색 사전 접근 권한 없음" -#: catalog/aclchk.c:3461 +#: catalog/aclchk.c:3435 #, c-format msgid "permission denied for type %s" msgstr "%s 자료형 접근 권한 없음" -#: catalog/aclchk.c:3464 +#: catalog/aclchk.c:3438 #, c-format msgid "permission denied for view %s" msgstr "%s 뷰에 대한 접근 권한 없음" -#: catalog/aclchk.c:3499 +#: catalog/aclchk.c:3473 #, c-format msgid "must be owner of aggregate %s" msgstr "%s 집계함수의 소유주여야만 합니다" -#: catalog/aclchk.c:3502 +#: catalog/aclchk.c:3476 #, c-format msgid "must be owner of collation %s" msgstr "%s 정렬정의(collation)의 소유주여야만 합니다" -#: catalog/aclchk.c:3505 +#: catalog/aclchk.c:3479 #, c-format msgid "must be owner of conversion %s" msgstr "%s 문자코드변환규칙(conversion)의 소유주여야만 합니다" -#: catalog/aclchk.c:3508 +#: catalog/aclchk.c:3482 #, c-format msgid "must be owner of database %s" msgstr "%s 데이터베이스의 소유주여야만 합니다" -#: catalog/aclchk.c:3511 +#: catalog/aclchk.c:3485 #, c-format msgid "must be owner of domain %s" msgstr "%s 도메인의 소유주여야만 합니다" -#: catalog/aclchk.c:3514 +#: catalog/aclchk.c:3488 #, c-format msgid "must be owner of event trigger %s" msgstr "%s 이벤트 트리거의 소유주여야만 합니다" -#: catalog/aclchk.c:3517 +#: catalog/aclchk.c:3491 #, c-format msgid "must be owner of extension %s" msgstr "%s 확장 모듈의 소유주여야만 합니다" -#: catalog/aclchk.c:3520 +#: catalog/aclchk.c:3494 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "%s 외부 데이터 래퍼의 소유주여야 함" -#: catalog/aclchk.c:3523 +#: catalog/aclchk.c:3497 #, c-format msgid "must be owner of foreign server %s" msgstr "%s 외부 서버의 소유주여야 함" -#: catalog/aclchk.c:3526 +#: catalog/aclchk.c:3500 #, c-format msgid "must be owner of foreign table %s" msgstr "%s 외부 테이블의 소유주여야 함" -#: catalog/aclchk.c:3529 +#: catalog/aclchk.c:3503 #, c-format msgid "must be owner of function %s" msgstr "%s 함수의 소유주여야만 합니다" -#: catalog/aclchk.c:3532 +#: catalog/aclchk.c:3506 #, c-format msgid "must be owner of index %s" msgstr "%s 인덱스의 소유주여야만 합니다" -#: catalog/aclchk.c:3535 +#: catalog/aclchk.c:3509 #, c-format msgid "must be owner of language %s" msgstr "%s 프로시주얼 언어의 소유주여야만 합니다" -#: catalog/aclchk.c:3538 +#: catalog/aclchk.c:3512 #, c-format msgid "must be owner of large object %s" msgstr "%s 대형 개체의 소유주여야만 합니다" -#: catalog/aclchk.c:3541 +#: catalog/aclchk.c:3515 #, c-format msgid "must be owner of materialized view %s" msgstr "%s 구체화된 뷰의 소유주여야만 합니다" -#: catalog/aclchk.c:3544 +#: catalog/aclchk.c:3518 #, c-format msgid "must be owner of operator class %s" msgstr "%s 연산자 클래스의 소유주여야만 합니다" -#: catalog/aclchk.c:3547 +#: catalog/aclchk.c:3521 #, c-format msgid "must be owner of operator %s" msgstr "%s 연산자의 소유주여야만 합니다" -#: catalog/aclchk.c:3550 +#: catalog/aclchk.c:3524 #, c-format msgid "must be owner of operator family %s" msgstr "%s 연산자 패밀리의 소유주여야 함" -#: catalog/aclchk.c:3553 +#: catalog/aclchk.c:3527 #, c-format msgid "must be owner of procedure %s" msgstr "%s 프로시져의 소유주여야만 합니다" -#: catalog/aclchk.c:3556 +#: catalog/aclchk.c:3530 #, c-format msgid "must be owner of publication %s" msgstr "%s 발행의 소유주여야만 합니다" -#: catalog/aclchk.c:3559 +#: catalog/aclchk.c:3533 #, c-format msgid "must be owner of routine %s" msgstr "%s 루틴의 소유주여야만 합니다" -#: catalog/aclchk.c:3562 +#: catalog/aclchk.c:3536 #, c-format msgid "must be owner of sequence %s" msgstr "%s 시퀀스의 소유주여야만 합니다" -#: catalog/aclchk.c:3565 +#: catalog/aclchk.c:3539 #, c-format msgid "must be owner of subscription %s" msgstr "%s 구독의 소유주여야만 합니다" -#: catalog/aclchk.c:3568 +#: catalog/aclchk.c:3542 #, c-format msgid "must be owner of table %s" msgstr "%s 테이블의 소유주여야만 합니다" -#: catalog/aclchk.c:3571 +#: catalog/aclchk.c:3545 #, c-format msgid "must be owner of type %s" msgstr "%s 자료형의 소유주여야만 합니다" -#: catalog/aclchk.c:3574 +#: catalog/aclchk.c:3548 #, c-format msgid "must be owner of view %s" msgstr "%s 뷰의 소유주여야만 합니다" -#: catalog/aclchk.c:3577 +#: catalog/aclchk.c:3551 #, c-format msgid "must be owner of schema %s" msgstr "%s 스키마(schema)의 소유주여야만 합니다" -#: catalog/aclchk.c:3580 +#: catalog/aclchk.c:3554 #, c-format msgid "must be owner of statistics object %s" msgstr "%s 통계정보 개체의 소유주여야만 합니다" -#: catalog/aclchk.c:3583 +#: catalog/aclchk.c:3557 #, c-format msgid "must be owner of tablespace %s" msgstr "%s 테이블스페이스의 소유주여야만 합니다" -#: catalog/aclchk.c:3586 +#: catalog/aclchk.c:3560 #, c-format msgid "must be owner of text search configuration %s" msgstr "%s 전문 검색 구성의 소유주여야 함" -#: catalog/aclchk.c:3589 +#: catalog/aclchk.c:3563 #, c-format msgid "must be owner of text search dictionary %s" msgstr "%s 전문 검색 사전의 소유주여야 함" -#: catalog/aclchk.c:3603 +#: catalog/aclchk.c:3577 #, c-format msgid "must be owner of relation %s" msgstr "%s 릴레이션(relation)의 소유주여야만 합니다" -#: catalog/aclchk.c:3647 +#: catalog/aclchk.c:3621 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\") 접근 권한 없음" -#: catalog/aclchk.c:3768 catalog/aclchk.c:3776 +#: catalog/aclchk.c:3742 catalog/aclchk.c:3750 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "%d번째 속성(해당 릴레이션 OID: %u)이 없음" -#: catalog/aclchk.c:3849 catalog/aclchk.c:4768 +#: catalog/aclchk.c:3823 catalog/aclchk.c:4733 #, c-format msgid "relation with OID %u does not exist" msgstr "OID %u 릴레이션(relation) 없음" -#: catalog/aclchk.c:3948 catalog/aclchk.c:5186 +#: catalog/aclchk.c:3913 catalog/aclchk.c:5151 #, c-format msgid "database with OID %u does not exist" msgstr "OID %u 데이터베이스 없음" -#: catalog/aclchk.c:4002 catalog/aclchk.c:4846 tcop/fastpath.c:221 -#: utils/fmgr/fmgr.c:2017 +#: catalog/aclchk.c:3967 catalog/aclchk.c:4811 tcop/fastpath.c:221 +#: utils/fmgr/fmgr.c:2055 #, c-format msgid "function with OID %u does not exist" msgstr "OID %u 함수 없음" -#: catalog/aclchk.c:4056 catalog/aclchk.c:4872 +#: catalog/aclchk.c:4021 catalog/aclchk.c:4837 #, c-format msgid "language with OID %u does not exist" msgstr "OID %u 언어 없음" -#: catalog/aclchk.c:4220 catalog/aclchk.c:4944 +#: catalog/aclchk.c:4185 catalog/aclchk.c:4909 #, c-format msgid "schema with OID %u does not exist" msgstr "OID %u 스키마 없음" -#: catalog/aclchk.c:4274 catalog/aclchk.c:4971 utils/adt/genfile.c:637 +#: catalog/aclchk.c:4239 catalog/aclchk.c:4936 utils/adt/genfile.c:686 #, c-format msgid "tablespace with OID %u does not exist" msgstr "OID %u 테이블스페이스 없음" -#: catalog/aclchk.c:4333 catalog/aclchk.c:5105 commands/foreigncmds.c:328 +#: catalog/aclchk.c:4298 catalog/aclchk.c:5070 commands/foreigncmds.c:325 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "OID가 %u인 외부 데이터 래퍼가 없음" -#: catalog/aclchk.c:4395 catalog/aclchk.c:5132 commands/foreigncmds.c:465 +#: catalog/aclchk.c:4360 catalog/aclchk.c:5097 commands/foreigncmds.c:462 #, c-format msgid "foreign server with OID %u does not exist" msgstr "OID가 %u인 외부 서버가 없음" -#: catalog/aclchk.c:4455 catalog/aclchk.c:4794 utils/cache/typcache.c:369 +#: catalog/aclchk.c:4420 catalog/aclchk.c:4759 utils/cache/typcache.c:378 +#: utils/cache/typcache.c:432 #, c-format msgid "type with OID %u does not exist" msgstr "OID %u 자료형 없음" -#: catalog/aclchk.c:4820 +#: catalog/aclchk.c:4785 #, c-format msgid "operator with OID %u does not exist" msgstr "OID %u 연산자 없음" -#: catalog/aclchk.c:4997 +#: catalog/aclchk.c:4962 #, c-format msgid "operator class with OID %u does not exist" msgstr "OID %u 연산자 클래스 없음" -#: catalog/aclchk.c:5024 +#: catalog/aclchk.c:4989 #, c-format msgid "operator family with OID %u does not exist" msgstr "OID가 %u인 연산자 패밀리가 없음" -#: catalog/aclchk.c:5051 +#: catalog/aclchk.c:5016 #, c-format msgid "text search dictionary with OID %u does not exist" msgstr "OID가 %u인 전문 검색 사전이 없음" -#: catalog/aclchk.c:5078 +#: catalog/aclchk.c:5043 #, c-format msgid "text search configuration with OID %u does not exist" msgstr "OID가 %u인 텍스트 검색 구성이 없음" -#: catalog/aclchk.c:5159 commands/event_trigger.c:595 +#: catalog/aclchk.c:5124 commands/event_trigger.c:475 #, c-format msgid "event trigger with OID %u does not exist" msgstr "OID %u 이벤트 트리거가 없음" -#: catalog/aclchk.c:5212 commands/collationcmds.c:366 +#: catalog/aclchk.c:5177 commands/collationcmds.c:367 #, c-format msgid "collation with OID %u does not exist" msgstr "OID %u 정렬정의(collation) 없음" -#: catalog/aclchk.c:5238 +#: catalog/aclchk.c:5203 #, c-format msgid "conversion with OID %u does not exist" msgstr "OID %u 인코딩 변환규칙(conversion) 없음" -#: catalog/aclchk.c:5279 +#: catalog/aclchk.c:5244 #, c-format msgid "extension with OID %u does not exist" msgstr "OID %u 확장 모듈이 없음" -#: catalog/aclchk.c:5306 commands/publicationcmds.c:759 +#: catalog/aclchk.c:5271 commands/publicationcmds.c:794 #, c-format msgid "publication with OID %u does not exist" msgstr "OID %u 발행 없음" -#: catalog/aclchk.c:5332 commands/subscriptioncmds.c:1130 +#: catalog/aclchk.c:5297 commands/subscriptioncmds.c:1112 #, c-format msgid "subscription with OID %u does not exist" msgstr "OID %u 구독 없음" -#: catalog/aclchk.c:5358 +#: catalog/aclchk.c:5323 #, c-format msgid "statistics object with OID %u does not exist" msgstr "OID %u 통계정보 개체 없음" -#: catalog/catalog.c:498 +#: catalog/catalog.c:485 #, c-format msgid "must be superuser to call pg_nextoid()" msgstr "pg_nextoid() 함수를 호출 하려면 슈퍼유져여야함" -#: catalog/catalog.c:506 +#: catalog/catalog.c:493 #, c-format msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() 함수는 시스템 카탈로그 대상 전용임" -#: catalog/catalog.c:511 parser/parse_utilcmd.c:2064 +#: catalog/catalog.c:498 parser/parse_utilcmd.c:2191 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "\"%s\" 인덱스가 \"%s\" 테이블용이 아님" -#: catalog/catalog.c:528 +#: catalog/catalog.c:515 #, c-format msgid "column \"%s\" is not of type oid" msgstr "\"%s\" 칼럼은 oid 자료형이 아님" -#: catalog/catalog.c:535 +#: catalog/catalog.c:522 #, c-format msgid "index \"%s\" is not the index for column \"%s\"" msgstr "\"%s\" 인덱스는 \"%s\" 칼럼용 인덱스가 아님" -#: catalog/dependency.c:824 catalog/dependency.c:1062 +#: catalog/dependency.c:823 catalog/dependency.c:1061 #, c-format msgid "cannot drop %s because %s requires it" msgstr "%s 삭제할 수 없음, %s에서 필요로함" -#: catalog/dependency.c:826 catalog/dependency.c:1064 +#: catalog/dependency.c:825 catalog/dependency.c:1063 #, c-format msgid "You can drop %s instead." msgstr "대신에, drop %s 명령을 사용할 수 있음." -#: catalog/dependency.c:934 catalog/pg_shdepend.c:641 +#: catalog/dependency.c:933 catalog/pg_shdepend.c:640 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "%s 개체는 데이터베이스 시스템에서 필요하기 때문에 삭제 될 수 없음" -#: catalog/dependency.c:1130 +#: catalog/dependency.c:1129 #, c-format msgid "drop auto-cascades to %s" msgstr "%s 개체가 자동으로 덩달아 삭제됨" -#: catalog/dependency.c:1142 catalog/dependency.c:1151 +#: catalog/dependency.c:1141 catalog/dependency.c:1150 #, c-format msgid "%s depends on %s" msgstr "%s 의존대상: %s" -#: catalog/dependency.c:1163 catalog/dependency.c:1172 +#: catalog/dependency.c:1162 catalog/dependency.c:1171 #, c-format msgid "drop cascades to %s" msgstr "%s 개체가 덩달아 삭제됨" -#: catalog/dependency.c:1180 catalog/pg_shdepend.c:770 +#: catalog/dependency.c:1179 catalog/pg_shdepend.c:769 #, c-format msgid "" "\n" @@ -4176,114 +4388,114 @@ msgstr[0] "" "\n" "%d 개의 기타 개체들도 함께 처리함 (목록은 서버 로그에 기록됨)" -#: catalog/dependency.c:1192 +#: catalog/dependency.c:1191 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "기타 다른 개체들이 이 개체에 의존하고 있어, %s 삭제할 수 없음" -#: catalog/dependency.c:1194 catalog/dependency.c:1195 -#: catalog/dependency.c:1201 catalog/dependency.c:1202 -#: catalog/dependency.c:1213 catalog/dependency.c:1214 -#: commands/tablecmds.c:1218 commands/tablecmds.c:12297 commands/user.c:1082 -#: commands/view.c:505 libpq/auth.c:333 replication/syncrep.c:1171 -#: storage/lmgr/deadlock.c:1145 storage/lmgr/proc.c:1347 utils/adt/acl.c:5344 -#: utils/misc/guc.c:6542 utils/misc/guc.c:6578 utils/misc/guc.c:6648 -#: utils/misc/guc.c:10719 utils/misc/guc.c:10753 utils/misc/guc.c:10787 -#: utils/misc/guc.c:10821 utils/misc/guc.c:10856 +#: catalog/dependency.c:1193 catalog/dependency.c:1194 +#: catalog/dependency.c:1200 catalog/dependency.c:1201 +#: catalog/dependency.c:1212 catalog/dependency.c:1213 +#: commands/tablecmds.c:1249 commands/tablecmds.c:13016 commands/user.c:1093 +#: commands/view.c:495 libpq/auth.c:334 replication/syncrep.c:1032 +#: storage/lmgr/deadlock.c:1154 storage/lmgr/proc.c:1350 utils/adt/acl.c:5329 +#: utils/adt/jsonfuncs.c:614 utils/adt/jsonfuncs.c:620 utils/misc/guc.c:6771 +#: utils/misc/guc.c:6807 utils/misc/guc.c:6877 utils/misc/guc.c:10947 +#: utils/misc/guc.c:10981 utils/misc/guc.c:11015 utils/misc/guc.c:11049 +#: utils/misc/guc.c:11084 #, c-format msgid "%s" msgstr "%s" -#: catalog/dependency.c:1196 catalog/dependency.c:1203 +#: catalog/dependency.c:1195 catalog/dependency.c:1202 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "" "이 개체와 관계된 모든 개체들을 함께 삭제하려면 DROP ... CASCADE 명령을 사용하" "십시오" -#: catalog/dependency.c:1200 +#: catalog/dependency.c:1199 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "다른 개체가 원하는 개체를 사용하고 있으므로 해당 개체를 삭제할 수 없음" #. translator: %d always has a value larger than 1 -#: catalog/dependency.c:1209 +#: catalog/dependency.c:1208 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" msgstr[0] "%d개의 다른 개체에 대한 관련 항목 삭제" -#: catalog/dependency.c:1886 +#: catalog/dependency.c:1875 #, c-format msgid "constant of the type %s cannot be used here" msgstr "%s 자료형은 여기서 사용할 수 없음" -#: catalog/heap.c:332 +#: catalog/heap.c:330 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "\"%s.%s\" 만들 권한이 없음" -#: catalog/heap.c:334 +#: catalog/heap.c:332 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "시스템 카탈로그 변경은 현재 허용하지 않습니다." -#: catalog/heap.c:502 commands/tablecmds.c:2085 commands/tablecmds.c:2602 -#: commands/tablecmds.c:5756 +#: catalog/heap.c:500 commands/tablecmds.c:2145 commands/tablecmds.c:2745 +#: commands/tablecmds.c:6175 #, c-format msgid "tables can have at most %d columns" msgstr "한 테이블에 지정할 수 있는 최대 열 수는 %d입니다" -#: catalog/heap.c:520 commands/tablecmds.c:6042 +#: catalog/heap.c:518 commands/tablecmds.c:6468 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "\"%s\" 열 이름은 시스템 열 이름과 충돌합니다" -#: catalog/heap.c:536 +#: catalog/heap.c:534 #, c-format msgid "column name \"%s\" specified more than once" msgstr "\"%s\" 칼럼 이름이 여러 번 지정됨" #. translator: first %s is an integer not a name -#: catalog/heap.c:611 +#: catalog/heap.c:609 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "\"%s\" 파티션 키 칼럼은 %s 의사 자료형(pseudo-type)을 사용합니다" -#: catalog/heap.c:616 +#: catalog/heap.c:614 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "\"%s\" 칼럼은 %s 의사 자료형(pseudo-type)을 사용합니다" -#: catalog/heap.c:647 +#: catalog/heap.c:645 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "%s 복합 자료형은 자기 자신의 구성원으로 만들 수 없음" #. translator: first %s is an integer not a name -#: catalog/heap.c:702 +#: catalog/heap.c:700 #, c-format msgid "" "no collation was derived for partition key column %s with collatable type %s" msgstr "" -"\"%s\" 파티션 키 칼럼에 사용하는 %s 자료형에서 사용할 정렬규칙을 결정할 수" -"없습니다." +"\"%s\" 파티션 키 칼럼에 사용하는 %s 자료형에서 사용할 정렬규칙을 결정할 수없" +"습니다." -#: catalog/heap.c:708 commands/createas.c:204 commands/createas.c:488 +#: catalog/heap.c:706 commands/createas.c:203 commands/createas.c:486 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "" -"\"%s\" 칼럼에 사용하는 %s 자료형에서 사용할 정렬규칙을 결정할 수 없습" -"니다." +"\"%s\" 칼럼에 사용하는 %s 자료형에서 사용할 정렬규칙을 결정할 수 없습니다." -#: catalog/heap.c:1155 catalog/index.c:863 commands/tablecmds.c:3369 +#: catalog/heap.c:1155 catalog/index.c:865 commands/tablecmds.c:3520 #, c-format msgid "relation \"%s\" already exists" msgstr "\"%s\" 이름의 릴레이션(relation)이 이미 있습니다" -#: catalog/heap.c:1171 catalog/pg_type.c:427 catalog/pg_type.c:749 -#: commands/typecmds.c:240 commands/typecmds.c:791 commands/typecmds.c:1191 -#: commands/typecmds.c:1403 commands/typecmds.c:2160 +#: catalog/heap.c:1171 catalog/pg_type.c:428 catalog/pg_type.c:775 +#: commands/typecmds.c:238 commands/typecmds.c:250 commands/typecmds.c:719 +#: commands/typecmds.c:1125 commands/typecmds.c:1337 commands/typecmds.c:2124 #, c-format msgid "type \"%s\" already exists" msgstr "\"%s\" 자료형이 이미 있습니다" @@ -4302,87 +4514,87 @@ msgstr "" msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때, pg_class 자료 OID 값이 지정되지 않았습니다" -#: catalog/heap.c:2401 +#: catalog/heap.c:2400 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "\"%s\" 파티션 테이블에는 NO INHERIT 조건을 사용할 수 없음" -#: catalog/heap.c:2671 +#: catalog/heap.c:2670 #, c-format msgid "check constraint \"%s\" already exists" msgstr "\"%s\" 이름의 체크 제약 조건이 이미 있습니다" -#: catalog/heap.c:2841 catalog/index.c:877 catalog/pg_constraint.c:669 -#: commands/tablecmds.c:7454 +#: catalog/heap.c:2840 catalog/index.c:879 catalog/pg_constraint.c:668 +#: commands/tablecmds.c:8117 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "" "\"%s\" 제약 조건이 이미 \"%s\" 릴레이션(relation)에서 사용되고 있습니다" -#: catalog/heap.c:2848 +#: catalog/heap.c:2847 #, c-format msgid "" "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "" "\"%s\" 제약 조건이 비상속 제약 조건과 충돌합니다, 해당 릴레이션: \"%s\"" -#: catalog/heap.c:2859 +#: catalog/heap.c:2858 #, c-format msgid "" "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "\"%s\" 제약 조건이 상속 제약 조건과 충돌합니다, 해당 릴레이션: \"%s\"" -#: catalog/heap.c:2869 +#: catalog/heap.c:2868 #, c-format msgid "" "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "" "\"%s\" 제약 조건이 NOT VALID 제약 조건과 충돌합니다, 해당 릴레이션: \"%s\"" -#: catalog/heap.c:2874 +#: catalog/heap.c:2873 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "\"%s\" 제약 조건을 상속된 정의와 병합하는 중" -#: catalog/heap.c:2976 +#: catalog/heap.c:2975 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "\"%s\" 계산된 칼럼은 칼럼 생성 표현식에서는 사용될 수 없음" -#: catalog/heap.c:2978 +#: catalog/heap.c:2977 #, c-format msgid "A generated column cannot reference another generated column." msgstr "계산된 칼럼은 다른 계산된 칼럼을 참조할 수 없음" -#: catalog/heap.c:3030 +#: catalog/heap.c:3029 #, c-format msgid "generation expression is not immutable" msgstr "생성 표현식은 불변형일 수 없음" -#: catalog/heap.c:3058 rewrite/rewriteHandler.c:1190 +#: catalog/heap.c:3057 rewrite/rewriteHandler.c:1192 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "" "\"%s\" 칼럼의 자료형은 %s 인데, default 표현식에서는 %s 자료형을 사용했습니다" -#: catalog/heap.c:3063 commands/prepare.c:384 parser/parse_node.c:434 -#: parser/parse_target.c:591 parser/parse_target.c:866 -#: parser/parse_target.c:876 rewrite/rewriteHandler.c:1195 +#: catalog/heap.c:3062 commands/prepare.c:367 parser/parse_node.c:412 +#: parser/parse_target.c:589 parser/parse_target.c:869 +#: parser/parse_target.c:879 rewrite/rewriteHandler.c:1197 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "다시 정의하거나 형변화자를 사용해보십시오" -#: catalog/heap.c:3110 +#: catalog/heap.c:3109 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "\"%s\" 테이블만이 체크 제약 조건에서 참조될 수 있습니다" -#: catalog/heap.c:3367 +#: catalog/heap.c:3366 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "ON COMMIT 및 외래 키 조합이 지원되지 않음" -#: catalog/heap.c:3368 +#: catalog/heap.c:3367 #, c-format msgid "" "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT " @@ -4390,24 +4602,24 @@ msgid "" msgstr "" "\"%s\" 테이블에서 \"%s\" 테이블을 참조하는데 ON COMMIT 설정이 같지 않습니다." -#: catalog/heap.c:3373 +#: catalog/heap.c:3372 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "" "_^_ 테이블 내용을 모두 삭제할 수 없음, 참조키(foreign key) 제약 조건 안에서" -#: catalog/heap.c:3374 +#: catalog/heap.c:3373 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "\"%s\" 테이블은 \"%s\" 개체를 참조합니다." -#: catalog/heap.c:3376 +#: catalog/heap.c:3375 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "" "\"%s\" 테이블도 함께 자료를 지우거나, TRUNCATE ... CASCADE 구문을 사용하세요." -#: catalog/index.c:219 parser/parse_utilcmd.c:1873 parser/parse_utilcmd.c:1972 +#: catalog/index.c:219 parser/parse_utilcmd.c:2097 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "\"%s\" 테이블에는 이미 기본키가 있습니다" @@ -4422,55 +4634,55 @@ msgstr "기본기(primary key)를 표현할 수 없음" msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "\"%s\" 파티션 키 칼럼에 NOT NULL 속성을 지정해야 함" -#: catalog/index.c:762 catalog/index.c:1822 +#: catalog/index.c:764 catalog/index.c:1843 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "시스템 카탈로그 테이블에는 사용자 정의 인덱스를 지정할 수 없습니다" -#: catalog/index.c:802 +#: catalog/index.c:804 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "\"%s\" 연산자 클래스용으로 자동 결정 가능한 정렬 규칙은 지원하지 않음" -#: catalog/index.c:817 +#: catalog/index.c:819 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "시스템 카탈로그 테이블은 잠금 없는 인덱스 만들기는 지원하지 않습니다" -#: catalog/index.c:826 catalog/index.c:1271 +#: catalog/index.c:828 catalog/index.c:1281 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "exclusion 제약 조건용 잠금 없는 인덱스 만들기는 지원하지 않습니다" -#: catalog/index.c:835 +#: catalog/index.c:837 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "" "공유되는 인덱스들은 initdb 명령으로 데이터베이스 클러스터를 만든 다음에는 만" "들 수 없습니다" -#: catalog/index.c:855 commands/createas.c:253 commands/sequence.c:154 -#: parser/parse_utilcmd.c:208 +#: catalog/index.c:857 commands/createas.c:252 commands/sequence.c:154 +#: parser/parse_utilcmd.c:210 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "\"%s\" 이름의 릴레이션(relation)이 이미 있습니다, 건너뜀" -#: catalog/index.c:905 +#: catalog/index.c:907 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때, pg_class 인덱스 OID 값이 지정되지 않았습니다" -#: catalog/index.c:2107 +#: catalog/index.c:2128 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY 명령은 트랜잭션 내 가장 처음에 있어야 합니다" -#: catalog/index.c:2858 +#: catalog/index.c:2859 #, c-format msgid "building index \"%s\" on table \"%s\" serially" msgstr "\"%s\" 인덱스를 \"%s\" 테이블에 이어 만드는 중" -#: catalog/index.c:2863 +#: catalog/index.c:2864 #, c-format msgid "" "building index \"%s\" on table \"%s\" with request for %d parallel worker" @@ -4478,386 +4690,398 @@ msgid_plural "" "building index \"%s\" on table \"%s\" with request for %d parallel workers" msgstr[0] "\"%s\" 인덱스를 \"%s\" 테이블에서 만드는 중, 병렬 작업자수: %d" -#: catalog/index.c:3491 +#: catalog/index.c:3492 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "임시 테이블의 인덱스 재생성 작업은 다른 세션에서 할 수 없음" -#: catalog/index.c:3622 +#: catalog/index.c:3503 +#, c-format +msgid "cannot reindex invalid index on TOAST table" +msgstr "TOAST 테이블에 딸린 잘못된 인덱스에 대해 재색인 작업을 할 수 없음" + +#: catalog/index.c:3625 #, c-format msgid "index \"%s\" was reindexed" msgstr "\"%s\" 인덱스가 다시 만들어졌음" -#: catalog/index.c:3696 commands/indexcmds.c:2921 +#: catalog/index.c:3701 commands/indexcmds.c:3023 #, c-format msgid "REINDEX of partitioned tables is not yet implemented, skipping \"%s\"" msgstr "파티션된 테이블의 REINDEX 작업은 아직 구현되지 않았음, \"%s\" 건너뜀" -#: catalog/namespace.c:249 catalog/namespace.c:453 catalog/namespace.c:545 -#: commands/trigger.c:5406 +#: catalog/index.c:3756 +#, c-format +msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" +msgstr "" +"TOAST 테이블에 지정된 유효하지 않은 \"%s.%s\" 인덱스는 재색인 작업을 할 수 없음, 건너뜀" + +#: catalog/namespace.c:257 catalog/namespace.c:461 catalog/namespace.c:553 +#: commands/trigger.c:5043 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "서로 다른 데이터베이스간의 참조는 구현되어있지 않습니다: \"%s.%s.%s\"" -#: catalog/namespace.c:306 +#: catalog/namespace.c:314 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "임시 테이블은 스키마 이름을 지정할 수 없음" -#: catalog/namespace.c:387 +#: catalog/namespace.c:395 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "\"%s.%s\" 릴레이션의 잠금 정보를 구할 수 없음" -#: catalog/namespace.c:392 commands/lockcmds.c:162 commands/lockcmds.c:249 +#: catalog/namespace.c:400 commands/lockcmds.c:142 commands/lockcmds.c:227 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "\"%s\" 릴레이션의 잠금 정보를 구할 수 없음" -#: catalog/namespace.c:420 parser/parse_relation.c:1172 +#: catalog/namespace.c:428 parser/parse_relation.c:1357 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "\"%s.%s\" 이름의 릴레이션(relation)이 없습니다" -#: catalog/namespace.c:425 parser/parse_relation.c:1185 -#: parser/parse_relation.c:1193 +#: catalog/namespace.c:433 parser/parse_relation.c:1370 +#: parser/parse_relation.c:1378 #, c-format msgid "relation \"%s\" does not exist" msgstr "\"%s\" 이름의 릴레이션(relation)이 없습니다" -#: catalog/namespace.c:491 catalog/namespace.c:3022 commands/extension.c:1469 -#: commands/extension.c:1475 +#: catalog/namespace.c:499 catalog/namespace.c:3030 commands/extension.c:1519 +#: commands/extension.c:1525 #, c-format msgid "no schema has been selected to create in" msgstr "선택된 스키마 없음, 대상:" -#: catalog/namespace.c:643 catalog/namespace.c:656 +#: catalog/namespace.c:651 catalog/namespace.c:664 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "다른 세션의 임시 스키마 안에는 릴레이션을 만들 수 없음" -#: catalog/namespace.c:647 +#: catalog/namespace.c:655 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "임시 스키마가 아닌 스키마에 임시 릴레이션을 만들 수 없음" -#: catalog/namespace.c:662 +#: catalog/namespace.c:670 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "임시 스키마 안에는 임시 릴레이션만 만들 수 있음" -#: catalog/namespace.c:2214 +#: catalog/namespace.c:2222 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "\"%s\" 통계정보 개체가 없음" -#: catalog/namespace.c:2337 +#: catalog/namespace.c:2345 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "\"%s\" 전문 검색 파서가 없음" -#: catalog/namespace.c:2463 +#: catalog/namespace.c:2471 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "\"%s\" 전문 검색 사전이 없음" -#: catalog/namespace.c:2590 +#: catalog/namespace.c:2598 #, c-format msgid "text search template \"%s\" does not exist" msgstr "\"%s\" 전문 검색 템플릿이 없음" -#: catalog/namespace.c:2716 commands/tsearchcmds.c:1197 +#: catalog/namespace.c:2724 commands/tsearchcmds.c:1194 #: utils/cache/ts_cache.c:617 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "\"%s\" 전문 검색 구성이 없음" -#: catalog/namespace.c:2829 parser/parse_expr.c:866 parser/parse_target.c:1221 +#: catalog/namespace.c:2837 parser/parse_expr.c:872 parser/parse_target.c:1228 #, c-format msgid "cross-database references are not implemented: %s" msgstr "서로 다른 데이터베이스간의 참조는 구현되어있지 않습니다: %s" -#: catalog/namespace.c:2835 parser/parse_expr.c:873 parser/parse_target.c:1228 -#: gram.y:14731 gram.y:16165 +#: catalog/namespace.c:2843 parser/parse_expr.c:879 parser/parse_target.c:1235 +#: gram.y:14981 gram.y:16435 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "적당하지 않은 qualified 이름 입니다 (너무 많은 점이 있네요): %s" -#: catalog/namespace.c:2965 +#: catalog/namespace.c:2973 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "임시 스키마로(에서) 개체를 이동할 수 없습니다" -#: catalog/namespace.c:2971 +#: catalog/namespace.c:2979 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "TOAST 스키마로(에서) 개체를 이동할 수 없습니다" -#: catalog/namespace.c:3044 commands/schemacmds.c:257 commands/schemacmds.c:337 -#: commands/tablecmds.c:1163 +#: catalog/namespace.c:3052 commands/schemacmds.c:256 commands/schemacmds.c:336 +#: commands/tablecmds.c:1194 #, c-format msgid "schema \"%s\" does not exist" msgstr "\"%s\" 스키마(schema) 없음" -#: catalog/namespace.c:3075 +#: catalog/namespace.c:3083 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "" "적당하지 않은 릴레이션(relation) 이름 입니다 (너무 많은 점이 있네요): %s" -#: catalog/namespace.c:3609 +#: catalog/namespace.c:3646 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "\"%s\" 정렬정의(collation)가 \"%s\" 인코딩에서는 쓸 수 없음" -#: catalog/namespace.c:3664 +#: catalog/namespace.c:3701 #, c-format msgid "conversion \"%s\" does not exist" msgstr "\"%s\" 문자코드변환규칙(conversion) 없음" -#: catalog/namespace.c:3904 +#: catalog/namespace.c:3965 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "\"%s\" 데이터베이스에서 임시 파일을 만들 권한이 없음" -#: catalog/namespace.c:3920 +#: catalog/namespace.c:3981 #, c-format msgid "cannot create temporary tables during recovery" msgstr "복구 작업 중에는 임시 테이블을 만들 수 없음" -#: catalog/namespace.c:3926 +#: catalog/namespace.c:3987 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "병렬 작업 중에 임시 테이블을 만들 수 없음" -#: catalog/namespace.c:4209 commands/tablespace.c:1205 commands/variable.c:64 -#: utils/misc/guc.c:10888 utils/misc/guc.c:10966 +#: catalog/namespace.c:4286 commands/tablespace.c:1205 commands/variable.c:64 +#: utils/misc/guc.c:11116 utils/misc/guc.c:11194 #, c-format msgid "List syntax is invalid." msgstr "목록 문법이 틀렸습니다." -#: catalog/objectaddress.c:1274 catalog/pg_publication.c:66 -#: commands/policy.c:95 commands/policy.c:395 commands/policy.c:485 -#: commands/tablecmds.c:226 commands/tablecmds.c:268 commands/tablecmds.c:1941 -#: commands/tablecmds.c:5229 commands/tablecmds.c:10469 +#: catalog/objectaddress.c:1275 catalog/pg_publication.c:57 +#: commands/policy.c:95 commands/policy.c:375 commands/policy.c:465 +#: commands/tablecmds.c:230 commands/tablecmds.c:272 commands/tablecmds.c:1989 +#: commands/tablecmds.c:5626 commands/tablecmds.c:11089 #, c-format msgid "\"%s\" is not a table" msgstr "\"%s\" 개체는 테이블이 아님" -#: catalog/objectaddress.c:1281 commands/tablecmds.c:238 -#: commands/tablecmds.c:5259 commands/tablecmds.c:15004 commands/view.c:138 +#: catalog/objectaddress.c:1282 commands/tablecmds.c:242 +#: commands/tablecmds.c:5656 commands/tablecmds.c:15711 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "\"%s\" 개체는 뷰가 아님" -#: catalog/objectaddress.c:1288 commands/matview.c:175 commands/tablecmds.c:244 -#: commands/tablecmds.c:15009 +#: catalog/objectaddress.c:1289 commands/matview.c:175 commands/tablecmds.c:248 +#: commands/tablecmds.c:15716 #, c-format msgid "\"%s\" is not a materialized view" msgstr "\"%s\" 개체는 구체화된 뷰(materialized view)가 아닙니다" -#: catalog/objectaddress.c:1295 commands/tablecmds.c:262 -#: commands/tablecmds.c:5262 commands/tablecmds.c:15014 +#: catalog/objectaddress.c:1296 commands/tablecmds.c:266 +#: commands/tablecmds.c:5659 commands/tablecmds.c:15721 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" 개체는 외부 테이블이 아님" -#: catalog/objectaddress.c:1336 +#: catalog/objectaddress.c:1337 #, c-format msgid "must specify relation and object name" msgstr "릴레이션과 개체 이름을 지정해야 합니다" -#: catalog/objectaddress.c:1412 catalog/objectaddress.c:1465 +#: catalog/objectaddress.c:1413 catalog/objectaddress.c:1466 #, c-format msgid "column name must be qualified" msgstr "칼럼 이름으로 적당하지 않습니다" -#: catalog/objectaddress.c:1512 +#: catalog/objectaddress.c:1513 #, c-format msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")의 기본값을 지정하지 않았음" -#: catalog/objectaddress.c:1549 commands/functioncmds.c:132 -#: commands/tablecmds.c:254 commands/typecmds.c:3321 parser/parse_type.c:244 -#: parser/parse_type.c:273 parser/parse_type.c:846 utils/adt/acl.c:4451 +#: catalog/objectaddress.c:1550 commands/functioncmds.c:133 +#: commands/tablecmds.c:258 commands/typecmds.c:263 commands/typecmds.c:3275 +#: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:845 +#: utils/adt/acl.c:4436 #, c-format msgid "type \"%s\" does not exist" msgstr "\"%s\" 자료형 없음" -#: catalog/objectaddress.c:1668 +#: catalog/objectaddress.c:1669 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "%d (%s, %s) 연산자(대상 %s) 없음" -#: catalog/objectaddress.c:1699 +#: catalog/objectaddress.c:1700 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "%d (%s, %s) 함수(대상 %s) 없음" -#: catalog/objectaddress.c:1750 catalog/objectaddress.c:1776 +#: catalog/objectaddress.c:1751 catalog/objectaddress.c:1777 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "\"%s\" 사용자에 대한 사용자 맵핑 정보(대상 서버: \"%s\")가 없음" -#: catalog/objectaddress.c:1765 commands/foreigncmds.c:433 -#: commands/foreigncmds.c:1016 commands/foreigncmds.c:1396 +#: catalog/objectaddress.c:1766 commands/foreigncmds.c:430 +#: commands/foreigncmds.c:1012 commands/foreigncmds.c:1395 #: foreign/foreign.c:723 #, c-format msgid "server \"%s\" does not exist" msgstr "\"%s\" 이름의 서버가 없음" -#: catalog/objectaddress.c:1832 +#: catalog/objectaddress.c:1833 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "\"%s\" 발행 릴레이션은 \"%s\" 발행에 없습니다." -#: catalog/objectaddress.c:1894 +#: catalog/objectaddress.c:1895 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "알 수 없는 기본 ACL 개체 타입 \"%c\"" -#: catalog/objectaddress.c:1895 +#: catalog/objectaddress.c:1896 #, c-format msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." msgstr "유효한 개체 형태는 \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." -#: catalog/objectaddress.c:1946 +#: catalog/objectaddress.c:1947 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "\"%s\" 사용자용 기본 ACL 없음. (해당 스키마: \"%s\", 해당 개체: %s)" -#: catalog/objectaddress.c:1951 +#: catalog/objectaddress.c:1952 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "\"%s\" 사용자용 기본 ACL 없음. (해당 개체: %s)" -#: catalog/objectaddress.c:1978 catalog/objectaddress.c:2036 -#: catalog/objectaddress.c:2093 +#: catalog/objectaddress.c:1979 catalog/objectaddress.c:2037 +#: catalog/objectaddress.c:2094 #, c-format msgid "name or argument lists may not contain nulls" msgstr "이름이나 인자 목록에는 null이 포함되지 않아야 함" -#: catalog/objectaddress.c:2012 +#: catalog/objectaddress.c:2013 #, c-format msgid "unsupported object type \"%s\"" msgstr "\"%s\" 형 지원하지 않음" -#: catalog/objectaddress.c:2032 catalog/objectaddress.c:2050 -#: catalog/objectaddress.c:2191 +#: catalog/objectaddress.c:2033 catalog/objectaddress.c:2051 +#: catalog/objectaddress.c:2192 #, c-format msgid "name list length must be exactly %d" msgstr "이름 목록 길이는 %d 이어야 합니다." -#: catalog/objectaddress.c:2054 +#: catalog/objectaddress.c:2055 #, c-format msgid "large object OID may not be null" msgstr "대형 개체 OID는 null 값을 사용할 수 없음" -#: catalog/objectaddress.c:2063 catalog/objectaddress.c:2126 -#: catalog/objectaddress.c:2133 +#: catalog/objectaddress.c:2064 catalog/objectaddress.c:2127 +#: catalog/objectaddress.c:2134 #, c-format msgid "name list length must be at least %d" msgstr "이름 목록 길이는 적어도 %d 개 이상이어야 함" -#: catalog/objectaddress.c:2119 catalog/objectaddress.c:2140 +#: catalog/objectaddress.c:2120 catalog/objectaddress.c:2141 #, c-format msgid "argument list length must be exactly %d" msgstr "인자 목록은 %d 개여야 함" -#: catalog/objectaddress.c:2392 libpq/be-fsstubs.c:321 +#: catalog/objectaddress.c:2393 libpq/be-fsstubs.c:321 #, c-format msgid "must be owner of large object %u" msgstr "%u 대경 개체의 소유주여야만 합니다" -#: catalog/objectaddress.c:2407 commands/functioncmds.c:1535 +#: catalog/objectaddress.c:2408 commands/functioncmds.c:1445 #, c-format msgid "must be owner of type %s or type %s" msgstr "%s, %s 자료형의 소유주여야합니다" -#: catalog/objectaddress.c:2457 catalog/objectaddress.c:2474 +#: catalog/objectaddress.c:2458 catalog/objectaddress.c:2475 #, c-format msgid "must be superuser" msgstr "슈퍼유져여야함" -#: catalog/objectaddress.c:2464 +#: catalog/objectaddress.c:2465 #, c-format msgid "must have CREATEROLE privilege" msgstr "CREATEROLE 권한이 있어야 함" -#: catalog/objectaddress.c:2543 +#: catalog/objectaddress.c:2544 #, c-format msgid "unrecognized object type \"%s\"" msgstr "알 수 없는 개체 형태 \"%s\"" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2771 +#: catalog/objectaddress.c:2772 #, c-format msgid "column %s of %s" msgstr " %s 칼럼(%s 의)" -#: catalog/objectaddress.c:2781 +#: catalog/objectaddress.c:2782 #, c-format msgid "function %s" msgstr "%s 함수" -#: catalog/objectaddress.c:2786 +#: catalog/objectaddress.c:2787 #, c-format msgid "type %s" msgstr "%s 자료형" -#: catalog/objectaddress.c:2816 +#: catalog/objectaddress.c:2817 #, c-format msgid "cast from %s to %s" msgstr "%s 자료형을 %s 자료형으로 바꾸는 작업" -#: catalog/objectaddress.c:2844 +#: catalog/objectaddress.c:2845 #, c-format msgid "collation %s" msgstr "collation %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2870 +#: catalog/objectaddress.c:2871 #, c-format msgid "constraint %s on %s" msgstr "%s 제약 조건(해당 개체: %s)" -#: catalog/objectaddress.c:2876 +#: catalog/objectaddress.c:2877 #, c-format msgid "constraint %s" msgstr "%s 제약 조건" -#: catalog/objectaddress.c:2903 +#: catalog/objectaddress.c:2904 #, c-format msgid "conversion %s" msgstr "%s 문자코드변환규칙" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:2942 +#: catalog/objectaddress.c:2943 #, c-format msgid "default value for %s" msgstr "%s 용 기본값" -#: catalog/objectaddress.c:2951 +#: catalog/objectaddress.c:2952 #, c-format msgid "language %s" msgstr "프로시주얼 언어 %s" -#: catalog/objectaddress.c:2956 +#: catalog/objectaddress.c:2957 #, c-format msgid "large object %u" msgstr "%u 대형 개체" -#: catalog/objectaddress.c:2961 +#: catalog/objectaddress.c:2962 #, c-format msgid "operator %s" msgstr "%s 연산자" -#: catalog/objectaddress.c:2993 +#: catalog/objectaddress.c:2994 #, c-format msgid "operator class %s for access method %s" msgstr "%s 연산자 클래스, %s 인덱스 액세스 방법" -#: catalog/objectaddress.c:3016 +#: catalog/objectaddress.c:3017 #, c-format msgid "access method %s" msgstr "%s 접근 방법" @@ -4866,7 +5090,7 @@ msgstr "%s 접근 방법" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3058 +#: catalog/objectaddress.c:3059 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "%d (%s, %s) 연산자 (연산자 패밀리: %s): %s" @@ -4875,279 +5099,257 @@ msgstr "%d (%s, %s) 연산자 (연산자 패밀리: %s): %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3108 +#: catalog/objectaddress.c:3109 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "%d (%s, %s) 함수 (연산자 패밀리: %s): %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3152 +#: catalog/objectaddress.c:3153 #, c-format msgid "rule %s on %s" msgstr "%s 룰(rule), 해당 테이블: %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3190 +#: catalog/objectaddress.c:3191 #, c-format msgid "trigger %s on %s" msgstr "%s 트리거, 해당 테이블: %s" -#: catalog/objectaddress.c:3206 +#: catalog/objectaddress.c:3207 #, c-format msgid "schema %s" msgstr "%s 스키마" -#: catalog/objectaddress.c:3229 +#: catalog/objectaddress.c:3230 #, c-format msgid "statistics object %s" msgstr "%s 통계정보 개체" -#: catalog/objectaddress.c:3256 +#: catalog/objectaddress.c:3257 #, c-format msgid "text search parser %s" msgstr "%s 전문 검색 파서" -#: catalog/objectaddress.c:3282 +#: catalog/objectaddress.c:3283 #, c-format msgid "text search dictionary %s" msgstr "%s 전문 검색 사전" -#: catalog/objectaddress.c:3308 +#: catalog/objectaddress.c:3309 #, c-format msgid "text search template %s" msgstr "%s 전문 검색 템플릿" -#: catalog/objectaddress.c:3334 +#: catalog/objectaddress.c:3335 #, c-format msgid "text search configuration %s" msgstr "%s 전문 검색 구성" -#: catalog/objectaddress.c:3343 +#: catalog/objectaddress.c:3344 #, c-format msgid "role %s" msgstr "%s 롤" -#: catalog/objectaddress.c:3356 +#: catalog/objectaddress.c:3357 #, c-format msgid "database %s" msgstr "%s 데이터베이스" -#: catalog/objectaddress.c:3368 +#: catalog/objectaddress.c:3369 #, c-format msgid "tablespace %s" msgstr "%s 테이블스페이스" -#: catalog/objectaddress.c:3377 +#: catalog/objectaddress.c:3378 #, c-format msgid "foreign-data wrapper %s" msgstr "%s 외부 데이터 래퍼" -#: catalog/objectaddress.c:3386 +#: catalog/objectaddress.c:3387 #, c-format msgid "server %s" msgstr "%s 서버" -#: catalog/objectaddress.c:3414 +#: catalog/objectaddress.c:3415 #, c-format msgid "user mapping for %s on server %s" msgstr "%s에 대한 사용자 매핑, 해당 서버: %s" -#: catalog/objectaddress.c:3459 +#: catalog/objectaddress.c:3460 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "" "%s 롤(해당 스키마: %s)이 새 테이블을 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3463 +#: catalog/objectaddress.c:3464 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "%s 롤이 새 테이블을 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3469 +#: catalog/objectaddress.c:3470 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "" "%s 롤(해당 스키마: %s)이 새 시퀀스를 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3473 +#: catalog/objectaddress.c:3474 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "%s 롤이 새 시퀀스를 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3479 +#: catalog/objectaddress.c:3480 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "%s 롤(해당 스키마: %s)이 새 함수를 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3483 +#: catalog/objectaddress.c:3484 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "%s 롤이 새 함수를 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3489 +#: catalog/objectaddress.c:3490 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "" "%s 롤(해당 스키마: %s)이 새 자료형을 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3493 +#: catalog/objectaddress.c:3494 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "%s 롤이 새 자료형을 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3499 +#: catalog/objectaddress.c:3500 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "%s 롤이 새 시퀀스를 만들 때 기본적으로 지정할 접근 권한" -#: catalog/objectaddress.c:3506 +#: catalog/objectaddress.c:3507 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "%s 롤(해당 스키마: %s)의 기본 접근 권한" -#: catalog/objectaddress.c:3510 +#: catalog/objectaddress.c:3511 #, c-format msgid "default privileges belonging to role %s" msgstr "%s 롤의 기본 접근 권한" -#: catalog/objectaddress.c:3528 +#: catalog/objectaddress.c:3529 #, c-format msgid "extension %s" msgstr "%s 확장 모듈" -#: catalog/objectaddress.c:3541 +#: catalog/objectaddress.c:3542 #, c-format msgid "event trigger %s" msgstr "%s 이벤트 트리거" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3577 +#: catalog/objectaddress.c:3578 #, c-format msgid "policy %s on %s" msgstr "%s 정책(%s 의)" -#: catalog/objectaddress.c:3587 +#: catalog/objectaddress.c:3588 #, c-format msgid "publication %s" msgstr "%s 발행" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3613 +#: catalog/objectaddress.c:3614 #, c-format msgid "publication of %s in publication %s" msgstr "%s 발행 (해당 발행이름: %s)" -#: catalog/objectaddress.c:3622 +#: catalog/objectaddress.c:3623 #, c-format msgid "subscription %s" msgstr "%s 구독" -#: catalog/objectaddress.c:3641 +#: catalog/objectaddress.c:3642 #, c-format msgid "transform for %s language %s" msgstr "%s 형 변환자, 대상언어: %s" -#: catalog/objectaddress.c:3704 +#: catalog/objectaddress.c:3705 #, c-format msgid "table %s" msgstr "%s 테이블" -#: catalog/objectaddress.c:3709 +#: catalog/objectaddress.c:3710 #, c-format msgid "index %s" msgstr "%s 인덱스" -#: catalog/objectaddress.c:3713 +#: catalog/objectaddress.c:3714 #, c-format msgid "sequence %s" msgstr "%s 시퀀스" -#: catalog/objectaddress.c:3717 +#: catalog/objectaddress.c:3718 #, c-format msgid "toast table %s" msgstr "%s 토스트 테이블" -#: catalog/objectaddress.c:3721 +#: catalog/objectaddress.c:3722 #, c-format msgid "view %s" msgstr "%s 뷰" -#: catalog/objectaddress.c:3725 +#: catalog/objectaddress.c:3726 #, c-format msgid "materialized view %s" msgstr "%s 구체화된 뷰" -#: catalog/objectaddress.c:3729 +#: catalog/objectaddress.c:3730 #, c-format msgid "composite type %s" msgstr "%s 복합 자료형" -#: catalog/objectaddress.c:3733 +#: catalog/objectaddress.c:3734 #, c-format msgid "foreign table %s" msgstr "%s 외부 테이블" -#: catalog/objectaddress.c:3738 +#: catalog/objectaddress.c:3739 #, c-format msgid "relation %s" msgstr "%s 릴레이션" -#: catalog/objectaddress.c:3775 +#: catalog/objectaddress.c:3776 #, c-format msgid "operator family %s for access method %s" msgstr "%s 연산자 페밀리, 접근 방법: %s" -#: catalog/partition.c:214 commands/analyze.c:1359 commands/indexcmds.c:1111 -#: commands/tablecmds.c:1094 commands/tablecmds.c:8251 -#: commands/tablecmds.c:8394 commands/tablecmds.c:8581 -#: commands/tablecmds.c:8728 commands/tablecmds.c:10560 -#: commands/tablecmds.c:15959 commands/tablecmds.c:16597 -#: executor/execExprInterp.c:3312 executor/execMain.c:1854 -#: executor/execMain.c:1940 executor/execMain.c:1990 executor/execMain.c:2098 -#: executor/execPartition.c:590 executor/execPartition.c:650 -#: executor/execPartition.c:794 executor/execPartition.c:908 -#: executor/execPartition.c:941 executor/execPartition.c:1046 -#: executor/nodeModifyTable.c:1959 -msgid "could not convert row type" -msgstr "로우 자료형을 변환 할 수 없음" - -#: catalog/pg_aggregate.c:129 +#: catalog/pg_aggregate.c:128 #, c-format msgid "aggregates cannot have more than %d argument" msgid_plural "aggregates cannot have more than %d arguments" msgstr[0] "집계 함수에는 %d개 이상의 인자를 사용할 수 없음" -#: catalog/pg_aggregate.c:152 catalog/pg_aggregate.c:162 +#: catalog/pg_aggregate.c:143 catalog/pg_aggregate.c:157 #, c-format msgid "cannot determine transition data type" msgstr "처리할(변환할) 자료형을 결정할 수 없음" -#: catalog/pg_aggregate.c:153 catalog/pg_aggregate.c:163 -#, c-format -msgid "" -"An aggregate using a polymorphic transition type must have at least one " -"polymorphic argument." -msgstr "" -"다형 변환 형식을 사용하는 집계에는 다형 인자가 하나 이상 있어야 합니다." - -#: catalog/pg_aggregate.c:176 +#: catalog/pg_aggregate.c:172 #, c-format msgid "a variadic ordered-set aggregate must use VARIADIC type ANY" msgstr "variadic 순서있는 세트 집계함수는 VARIADIC ANY 형을 사용해야 합니다" -#: catalog/pg_aggregate.c:202 +#: catalog/pg_aggregate.c:198 #, c-format msgid "" "a hypothetical-set aggregate must have direct arguments matching its " "aggregated arguments" msgstr "" -#: catalog/pg_aggregate.c:249 catalog/pg_aggregate.c:293 +#: catalog/pg_aggregate.c:245 catalog/pg_aggregate.c:289 #, c-format msgid "return type of transition function %s is not %s" msgstr "%s 이름의 transition 함수의 리턴 자료형이 %s 형이 아닙니다" -#: catalog/pg_aggregate.c:269 catalog/pg_aggregate.c:312 +#: catalog/pg_aggregate.c:265 catalog/pg_aggregate.c:308 #, c-format msgid "" "must not omit initial value when transition function is strict and " @@ -5156,133 +5358,121 @@ msgstr "" "변환 함수가 엄격하고 변환 형식이 입력 형식과 호환되지 않는 경우 초기값을 생략" "하면 안됨" -#: catalog/pg_aggregate.c:338 +#: catalog/pg_aggregate.c:334 #, c-format msgid "return type of inverse transition function %s is not %s" msgstr "%s inverse transition 함수의 반환 자료형이 %s 형이 아닙니다." -#: catalog/pg_aggregate.c:355 executor/nodeWindowAgg.c:2851 +#: catalog/pg_aggregate.c:351 executor/nodeWindowAgg.c:2852 #, c-format msgid "" "strictness of aggregate's forward and inverse transition functions must match" msgstr "" -#: catalog/pg_aggregate.c:399 catalog/pg_aggregate.c:552 +#: catalog/pg_aggregate.c:395 catalog/pg_aggregate.c:553 #, c-format msgid "final function with extra arguments must not be declared STRICT" msgstr "부가 인자를 쓰는 마침 함수는 STRICT 옵션이 없어야 함" -#: catalog/pg_aggregate.c:430 +#: catalog/pg_aggregate.c:426 #, c-format msgid "return type of combine function %s is not %s" msgstr "%s combine 함수의 반환 자료형이 %s 형이 아닙니다" -#: catalog/pg_aggregate.c:442 executor/nodeAgg.c:2993 +#: catalog/pg_aggregate.c:438 executor/nodeAgg.c:4177 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "" "%s 자료형을 전달 값으로 사용하는 조합 함수는 STRICT 속성을 가져야 합니다" -#: catalog/pg_aggregate.c:461 +#: catalog/pg_aggregate.c:457 #, c-format msgid "return type of serialization function %s is not %s" msgstr "%s serialization 함수의 반환 자료형이 %s 형이 아닙니다." -#: catalog/pg_aggregate.c:482 +#: catalog/pg_aggregate.c:478 #, c-format msgid "return type of deserialization function %s is not %s" msgstr "%s deserialization 함수의 반환 자료형이 %s 형이 아닙니다" -#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:243 catalog/pg_proc.c:250 +#: catalog/pg_aggregate.c:497 catalog/pg_proc.c:186 catalog/pg_proc.c:220 #, c-format msgid "cannot determine result data type" msgstr "결과 자료형을 결정할 수 없음" -#: catalog/pg_aggregate.c:499 -#, c-format -msgid "" -"An aggregate returning a polymorphic type must have at least one polymorphic " -"argument." -msgstr "" -"다형 자료형을 반환하는 집계에는 다형 자료형 인자가 하나 이상 있어야 합니다." - -#: catalog/pg_aggregate.c:511 catalog/pg_proc.c:256 +#: catalog/pg_aggregate.c:512 catalog/pg_proc.c:199 catalog/pg_proc.c:228 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "\"internal\" 의사-자료형의 사용이 안전하지 않습니다" -#: catalog/pg_aggregate.c:512 catalog/pg_proc.c:257 -#, c-format -msgid "" -"A function returning \"internal\" must have at least one \"internal\" " -"argument." -msgstr "" -"\"internal\" 자료형을 리턴하는 함수는 적어도 하나 이상의 인자가 \"internal\" " -"자료형이어야합니다." - -#: catalog/pg_aggregate.c:565 +#: catalog/pg_aggregate.c:566 #, c-format msgid "" "moving-aggregate implementation returns type %s, but plain implementation " "returns type %s" msgstr "" -#: catalog/pg_aggregate.c:576 +#: catalog/pg_aggregate.c:577 #, c-format msgid "sort operator can only be specified for single-argument aggregates" msgstr "정렬 연산자는 단일 인자 집계에만 지정할 수 있음" -#: catalog/pg_aggregate.c:703 catalog/pg_proc.c:396 +#: catalog/pg_aggregate.c:704 catalog/pg_proc.c:374 #, c-format msgid "cannot change routine kind" msgstr "루틴 종류를 바꿀 수 없음" -#: catalog/pg_aggregate.c:705 +#: catalog/pg_aggregate.c:706 #, c-format msgid "\"%s\" is an ordinary aggregate function." msgstr "\"%s\" 개체는 ordinary 집계 함수입니다" -#: catalog/pg_aggregate.c:707 +#: catalog/pg_aggregate.c:708 #, c-format msgid "\"%s\" is an ordered-set aggregate." msgstr "\"%s\" 개체는 정렬된 집합 집계 함수입니다" -#: catalog/pg_aggregate.c:709 +#: catalog/pg_aggregate.c:710 #, c-format msgid "\"%s\" is a hypothetical-set aggregate." msgstr "" -#: catalog/pg_aggregate.c:714 +#: catalog/pg_aggregate.c:715 #, c-format msgid "cannot change number of direct arguments of an aggregate function" msgstr "집계 함수의 direct 인자 번호는 바꿀 수 없음" -#: catalog/pg_aggregate.c:869 commands/functioncmds.c:665 -#: commands/typecmds.c:1751 commands/typecmds.c:1802 commands/typecmds.c:1833 -#: commands/typecmds.c:1856 commands/typecmds.c:1877 commands/typecmds.c:1904 -#: commands/typecmds.c:1931 commands/typecmds.c:2008 commands/typecmds.c:2050 -#: parser/parse_func.c:418 parser/parse_func.c:447 parser/parse_func.c:472 -#: parser/parse_func.c:486 parser/parse_func.c:606 parser/parse_func.c:626 -#: parser/parse_func.c:2144 parser/parse_func.c:2335 +#: catalog/pg_aggregate.c:870 commands/functioncmds.c:667 +#: commands/typecmds.c:1658 commands/typecmds.c:1704 commands/typecmds.c:1756 +#: commands/typecmds.c:1793 commands/typecmds.c:1827 commands/typecmds.c:1861 +#: commands/typecmds.c:1895 commands/typecmds.c:1972 commands/typecmds.c:2014 +#: parser/parse_func.c:414 parser/parse_func.c:443 parser/parse_func.c:468 +#: parser/parse_func.c:482 parser/parse_func.c:602 parser/parse_func.c:622 +#: parser/parse_func.c:2129 parser/parse_func.c:2320 #, c-format msgid "function %s does not exist" msgstr "%s 이름의 함수가 없음" -#: catalog/pg_aggregate.c:875 +#: catalog/pg_aggregate.c:876 #, c-format msgid "function %s returns a set" msgstr "%s 함수는 한 set을 리턴함" -#: catalog/pg_aggregate.c:890 +#: catalog/pg_aggregate.c:891 #, c-format msgid "function %s must accept VARIADIC ANY to be used in this aggregate" msgstr "%s 함수가 이 집계작업에 사용되려면 VARIADIC ANY 형을 수용해야 합니다." -#: catalog/pg_aggregate.c:914 +#: catalog/pg_aggregate.c:915 #, c-format msgid "function %s requires run-time type coercion" msgstr "%s 함수는 run-time type coercion을 필요로 함" +#: catalog/pg_cast.c:67 +#, c-format +msgid "cast from type %s to type %s already exists" +msgstr "%s 형에서 %s 형으로 변환하는 형변환 규칙(cast)이 이미 있습니다" + #: catalog/pg_collation.c:93 catalog/pg_collation.c:140 #, c-format msgid "collation \"%s\" already exists, skipping" @@ -5303,17 +5493,17 @@ msgstr "\"%s\" 정렬규칙이 이미 있습니다" msgid "collation \"%s\" for encoding \"%s\" already exists" msgstr "\"%s\" 정렬규칙이 \"%s\" 인코딩에 이미 지정되어 있습니다" -#: catalog/pg_constraint.c:677 +#: catalog/pg_constraint.c:676 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "\"%s\" 제약 조건이 %s 도메인에 이미 지정되어 있습니다" -#: catalog/pg_constraint.c:875 catalog/pg_constraint.c:968 +#: catalog/pg_constraint.c:874 catalog/pg_constraint.c:967 #, c-format msgid "constraint \"%s\" for table \"%s\" does not exist" msgstr "\"%s\" 제약 조건은 \"%s\" 테이블에 없음" -#: catalog/pg_constraint.c:1057 +#: catalog/pg_constraint.c:1056 #, c-format msgid "constraint \"%s\" for domain %s does not exist" msgstr "\"%s\" 제약 조건은 %s 도메인에 없음" @@ -5328,53 +5518,53 @@ msgstr "\"%s\" 이름의 변환규칙(conversion)이 이미 있음" msgid "default conversion for %s to %s already exists" msgstr "%s 코드에서 %s 코드로 변환하는 기본 변환규칙(conversion)은 이미 있음" -#: catalog/pg_depend.c:162 commands/extension.c:3229 +#: catalog/pg_depend.c:162 commands/extension.c:3324 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s 개체는 \"%s\" 확장모듈에 이미 구성원입니다" -#: catalog/pg_depend.c:489 +#: catalog/pg_depend.c:538 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "%s 의존개체들은 시스템 개체이기 때문에 삭제 될 수 없습니다" -#: catalog/pg_enum.c:128 catalog/pg_enum.c:231 catalog/pg_enum.c:526 +#: catalog/pg_enum.c:127 catalog/pg_enum.c:230 catalog/pg_enum.c:525 #, c-format msgid "invalid enum label \"%s\"" msgstr "\"%s\" 열거형 라벨이 잘못됨" -#: catalog/pg_enum.c:129 catalog/pg_enum.c:232 catalog/pg_enum.c:527 +#: catalog/pg_enum.c:128 catalog/pg_enum.c:231 catalog/pg_enum.c:526 #, c-format msgid "Labels must be %d characters or less." msgstr "라벨은 %d자 이하여야 합니다." -#: catalog/pg_enum.c:260 +#: catalog/pg_enum.c:259 #, c-format msgid "enum label \"%s\" already exists, skipping" msgstr "\"%s\" 이름의 열거형 라벨이 이미 있음, 건너뜀" -#: catalog/pg_enum.c:267 catalog/pg_enum.c:570 +#: catalog/pg_enum.c:266 catalog/pg_enum.c:569 #, c-format msgid "enum label \"%s\" already exists" msgstr "\"%s\" 이름의 열거형 라벨이 이미 있음" -#: catalog/pg_enum.c:322 catalog/pg_enum.c:565 +#: catalog/pg_enum.c:321 catalog/pg_enum.c:564 #, c-format msgid "\"%s\" is not an existing enum label" msgstr "\"%s\" 열거형 라벨이 없음" -#: catalog/pg_enum.c:380 +#: catalog/pg_enum.c:379 #, c-format msgid "pg_enum OID value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때 pg_enum OID 값이 지정되지 않았습니다" -#: catalog/pg_enum.c:390 +#: catalog/pg_enum.c:389 #, c-format msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" msgstr "" "ALTER TYPE ADD BEFORE/AFTER 구문은 이진 업그레이드 작업에서 호환하지 않습니다" -#: catalog/pg_namespace.c:64 commands/schemacmds.c:266 +#: catalog/pg_namespace.c:64 commands/schemacmds.c:265 #, c-format msgid "schema \"%s\" already exists" msgstr "\"%s\" 이름의 스키마(schema)가 이미 있음" @@ -5389,7 +5579,7 @@ msgstr "\"%s\" 타당한 연산자 이름이 아님" msgid "only binary operators can have commutators" msgstr "_^_ 바이너리 연산자만이 commutator를 가질 수 있음" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:485 +#: catalog/pg_operator.c:374 commands/operatorcmds.c:495 #, c-format msgid "only binary operators can have join selectivity" msgstr "_^_ 바이너리 연산자만이 join selectivity를 가질 수 있음" @@ -5409,12 +5599,12 @@ msgstr "_^_ 바이너리 연산자만이 해시할 수 있음" msgid "only boolean operators can have negators" msgstr "부울 연산자만 부정어를 포함할 수 있음" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:493 +#: catalog/pg_operator.c:397 commands/operatorcmds.c:503 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "부울 연산자만 제한 선택을 포함할 수 있음" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:497 +#: catalog/pg_operator.c:401 commands/operatorcmds.c:507 #, c-format msgid "only boolean operators can have join selectivity" msgstr "부울 연산자만 조인 선택을 포함할 수 있음" @@ -5439,59 +5629,43 @@ msgstr "%s 연산자가 이미 있음" msgid "operator cannot be its own negator or sort operator" msgstr "연산자는 자신의 negator나 sort 연산자가 될 수 없습니다" -#: catalog/pg_proc.c:131 parser/parse_func.c:2206 +#: catalog/pg_proc.c:127 parser/parse_func.c:2191 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" msgstr[0] "함수는 %d개 이상의 인자를 사용할 수 없음" -#: catalog/pg_proc.c:244 -#, c-format -msgid "" -"A function returning a polymorphic type must have at least one polymorphic " -"argument." -msgstr "다형 형식을 반환하는 함수에는 다형 인자가 하나 이상 있어야 합니다." - -#: catalog/pg_proc.c:251 -#, c-format -msgid "" -"A function returning \"anyrange\" must have at least one \"anyrange\" " -"argument." -msgstr "" -"\"anyrange\" 자료형을 반환하는 함수는 적어도 하나 이상의 인자가 \"anyrange\" " -"자료형이어야합니다." - -#: catalog/pg_proc.c:386 +#: catalog/pg_proc.c:364 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "이미 같은 인자 자료형을 사용하는 \"%s\" 함수가 있습니다" -#: catalog/pg_proc.c:398 +#: catalog/pg_proc.c:376 #, c-format msgid "\"%s\" is an aggregate function." msgstr "\"%s\" 개체는 집계 함수입니다" -#: catalog/pg_proc.c:400 +#: catalog/pg_proc.c:378 #, c-format msgid "\"%s\" is a function." msgstr "\"%s\" 개체는 함수입니다." -#: catalog/pg_proc.c:402 +#: catalog/pg_proc.c:380 #, c-format msgid "\"%s\" is a procedure." msgstr "\"%s\" 개체는 프로시져입니다." -#: catalog/pg_proc.c:404 +#: catalog/pg_proc.c:382 #, c-format msgid "\"%s\" is a window function." msgstr "\"%s\" 개체는 윈도우 함수입니다." -#: catalog/pg_proc.c:424 +#: catalog/pg_proc.c:402 #, c-format msgid "cannot change whether a procedure has output parameters" msgstr "프로시져는 출력 매개 변수를 사용하도록 변경 할 수 없음" -#: catalog/pg_proc.c:425 catalog/pg_proc.c:455 +#: catalog/pg_proc.c:403 catalog/pg_proc.c:433 #, c-format msgid "cannot change return type of existing function" msgstr "이미 있는 함수의 리턴 자료형은 바꿀 수 없습니다" @@ -5500,104 +5674,89 @@ msgstr "이미 있는 함수의 리턴 자료형은 바꿀 수 없습니다" #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:431 catalog/pg_proc.c:458 catalog/pg_proc.c:503 -#: catalog/pg_proc.c:529 catalog/pg_proc.c:557 +#: catalog/pg_proc.c:409 catalog/pg_proc.c:436 catalog/pg_proc.c:481 +#: catalog/pg_proc.c:507 catalog/pg_proc.c:533 #, c-format msgid "Use %s %s first." msgstr "먼저 %s %s 명령을 사용하세요." -#: catalog/pg_proc.c:456 +#: catalog/pg_proc.c:434 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "OUT 매개 변수에 정의된 행 형식이 다릅니다." -#: catalog/pg_proc.c:500 +#: catalog/pg_proc.c:478 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "\"%s\" 입력 매개 변수 이름을 바꿀 수 없음" -#: catalog/pg_proc.c:527 +#: catalog/pg_proc.c:505 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "기존 함수에서 매개 변수 기본 값을 제거할 수 없음" -#: catalog/pg_proc.c:555 +#: catalog/pg_proc.c:531 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "기존 매개 변수 기본 값의 데이터 형식을 바꿀 수 없음" -#: catalog/pg_proc.c:772 +#: catalog/pg_proc.c:748 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "\"%s\" 이름의 내장 함수가 없음" -#: catalog/pg_proc.c:870 +#: catalog/pg_proc.c:846 #, c-format msgid "SQL functions cannot return type %s" msgstr "SQL 함수는 %s 자료형을 리턴할 수 없음" -#: catalog/pg_proc.c:885 +#: catalog/pg_proc.c:861 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "SQL 함수의 인자로 %s 자료형은 사용될 수 없습니다" -#: catalog/pg_proc.c:973 executor/functions.c:1423 +#: catalog/pg_proc.c:954 executor/functions.c:1446 #, c-format msgid "SQL function \"%s\"" msgstr "\"%s\" SQL 함수" -#: catalog/pg_publication.c:57 commands/trigger.c:238 commands/trigger.c:256 -#, c-format -msgid "\"%s\" is a partitioned table" -msgstr "\"%s\" 개체는 파티션된 테이블임" - #: catalog/pg_publication.c:59 #, c-format -msgid "Adding partitioned tables to publications is not supported." -msgstr "파티션된 테이블을 발행하는 것은 지원하지 않습니다" - -#: catalog/pg_publication.c:60 -#, c-format -msgid "You can add the table partitions individually." -msgstr "파티션 테이블을 각각 발행에 추가할 수는 있습니다." - -#: catalog/pg_publication.c:68 -#, c-format msgid "Only tables can be added to publications." msgstr "테이블 개체만 발행에 추가할 수 있습니다." -#: catalog/pg_publication.c:74 +#: catalog/pg_publication.c:65 #, c-format msgid "\"%s\" is a system table" msgstr "\"%s\" 개체는 시스템 테이블입니다." -#: catalog/pg_publication.c:76 +#: catalog/pg_publication.c:67 #, c-format msgid "System tables cannot be added to publications." msgstr "시스템 테이블은 발행에 추가할 수 없습니다." -#: catalog/pg_publication.c:82 +#: catalog/pg_publication.c:73 #, c-format msgid "table \"%s\" cannot be replicated" msgstr "\"%s\" 테이블은 복제될 수 없음" -#: catalog/pg_publication.c:84 +#: catalog/pg_publication.c:75 #, c-format msgid "Temporary and unlogged relations cannot be replicated." msgstr "임시 테이블, unlogged 테이블은 복제될 수 없음" -#: catalog/pg_publication.c:182 +#: catalog/pg_publication.c:174 #, c-format msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "\"%s\" 릴레이션은 이미 \"%s\" 발행에 포함되어 있습니다" -#: catalog/pg_publication.c:418 catalog/pg_publication.c:440 -#: commands/publicationcmds.c:422 commands/publicationcmds.c:727 +#: catalog/pg_publication.c:470 commands/publicationcmds.c:451 +#: commands/publicationcmds.c:762 #, c-format msgid "publication \"%s\" does not exist" msgstr "\"%s\" 이름의 발행은 없습니다" -#: catalog/pg_shdepend.c:777 +#: catalog/pg_shdepend.c:776 #, c-format msgid "" "\n" @@ -5607,44 +5766,44 @@ msgid_plural "" "and objects in %d other databases (see server log for list)" msgstr[0] "" -#: catalog/pg_shdepend.c:1083 +#: catalog/pg_shdepend.c:1082 #, c-format msgid "role %u was concurrently dropped" msgstr "%u 롤이 동시에 삭제되었음" -#: catalog/pg_shdepend.c:1102 +#: catalog/pg_shdepend.c:1101 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "%u 테이블스페이스는 현재 삭제되었습니다" -#: catalog/pg_shdepend.c:1117 +#: catalog/pg_shdepend.c:1116 #, c-format msgid "database %u was concurrently dropped" msgstr "%u 데이터베이스는 현재 삭제되었습니다" -#: catalog/pg_shdepend.c:1162 +#: catalog/pg_shdepend.c:1161 #, c-format msgid "owner of %s" msgstr "%s 개체의 소유주" -#: catalog/pg_shdepend.c:1164 +#: catalog/pg_shdepend.c:1163 #, c-format msgid "privileges for %s" msgstr "\"%s\"에 대한 권한" -#: catalog/pg_shdepend.c:1166 +#: catalog/pg_shdepend.c:1165 #, c-format msgid "target of %s" msgstr "%s 개체 대상" #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1174 +#: catalog/pg_shdepend.c:1173 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" msgstr[0] "%d 개체(데이터베이스: %s)" -#: catalog/pg_shdepend.c:1285 +#: catalog/pg_shdepend.c:1284 #, c-format msgid "" "cannot drop objects owned by %s because they are required by the database " @@ -5653,7 +5812,7 @@ msgstr "" "%s 소유주의 개체 삭제는 그 데이터베이스 시스템에서 필요하기 때문에 삭제 될 " "수 없음" -#: catalog/pg_shdepend.c:1408 +#: catalog/pg_shdepend.c:1431 #, c-format msgid "" "cannot reassign ownership of objects owned by %s because they are required " @@ -5662,13 +5821,13 @@ msgstr "" "%s 소유주의 개체 삭제는 그 데이터베이스 시스템에서 필요하기 때문에 삭제 될 " "수 없음" -#: catalog/pg_subscription.c:177 commands/subscriptioncmds.c:657 -#: commands/subscriptioncmds.c:871 commands/subscriptioncmds.c:1098 +#: catalog/pg_subscription.c:171 commands/subscriptioncmds.c:644 +#: commands/subscriptioncmds.c:858 commands/subscriptioncmds.c:1080 #, c-format msgid "subscription \"%s\" does not exist" msgstr "\"%s\" 이름의 구독은 없습니다." -#: catalog/pg_type.c:131 catalog/pg_type.c:467 +#: catalog/pg_type.c:131 catalog/pg_type.c:468 #, c-format msgid "pg_type OID value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때 pg_type OID 값이 지정되지 않았습니다" @@ -5689,28 +5848,28 @@ msgstr "\"%c\" 정렬은 크기가 %d인 전달 값 형식에 유효하지 않 msgid "internal size %d is invalid for passed-by-value type" msgstr "내부 크기 %d은(는) 전달 값 형식에 유효하지 않음" -#: catalog/pg_type.c:306 catalog/pg_type.c:312 +#: catalog/pg_type.c:307 catalog/pg_type.c:313 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "\"%c\" 정렬은 가변 길이 형식에 유효하지 않음" -#: catalog/pg_type.c:320 +#: catalog/pg_type.c:321 commands/typecmds.c:3727 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "_^_ 고정크기 자료형은 PLAIN 저장방법을 가져야만 합니다" -#: catalog/pg_type.c:818 +#: catalog/pg_type.c:839 #, c-format msgid "could not form array type name for type \"%s\"" msgstr "\"%s\" 형식의 배열 형식 이름을 생성할 수 없음" -#: catalog/storage.c:344 storage/buffer/bufmgr.c:922 +#: catalog/storage.c:449 storage/buffer/bufmgr.c:933 #, c-format msgid "invalid page in block %u of relation %s" msgstr "%u 블록(해당 릴레이션: %s)에 잘못된 페이지가 있음" -#: catalog/toasting.c:106 commands/indexcmds.c:590 commands/tablecmds.c:5241 -#: commands/tablecmds.c:14870 +#: catalog/toasting.c:106 commands/indexcmds.c:639 commands/tablecmds.c:5638 +#: commands/tablecmds.c:15576 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\" 개체는 테이블도 구체화된 뷰도 아닙니다" @@ -5798,7 +5957,7 @@ msgid "" "must specify both or neither of serialization and deserialization functions" msgstr "" -#: commands/aggregatecmds.c:436 commands/functioncmds.c:613 +#: commands/aggregatecmds.c:436 commands/functioncmds.c:615 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "\"parallel\" 옵션 값은 SAFE, RESTRICTED, UNSAFE 만 지정할 수 있음" @@ -5808,146 +5967,146 @@ msgstr "\"parallel\" 옵션 값은 SAFE, RESTRICTED, UNSAFE 만 지정할 수 msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "\"%s\" 인자값은 READ_ONLY, SHAREABLE, READ_WRITE 셋 중 하나여야 함" -#: commands/alter.c:85 commands/event_trigger.c:236 +#: commands/alter.c:84 commands/event_trigger.c:174 #, c-format msgid "event trigger \"%s\" already exists" msgstr "\"%s\" 이름의 이벤트 트리거가 이미 있음" -#: commands/alter.c:88 commands/foreigncmds.c:601 +#: commands/alter.c:87 commands/foreigncmds.c:597 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "\"%s\" 이름의 외부 자료 래퍼가 이미 있음" -#: commands/alter.c:91 commands/foreigncmds.c:907 +#: commands/alter.c:90 commands/foreigncmds.c:903 #, c-format msgid "server \"%s\" already exists" msgstr "\"%s\" 이름의 서버가 이미 있음" -#: commands/alter.c:94 commands/proclang.c:368 +#: commands/alter.c:93 commands/proclang.c:132 #, c-format msgid "language \"%s\" already exists" msgstr "\"%s\" 이름의 프로시주얼 언어가 이미 있습니다" -#: commands/alter.c:97 commands/publicationcmds.c:176 +#: commands/alter.c:96 commands/publicationcmds.c:183 #, c-format msgid "publication \"%s\" already exists" msgstr "\"%s\" 이름의 발행이 이미 있습니다" -#: commands/alter.c:100 commands/subscriptioncmds.c:378 +#: commands/alter.c:99 commands/subscriptioncmds.c:371 #, c-format msgid "subscription \"%s\" already exists" msgstr "\"%s\" 이름의 구독이 이미 있습니다" -#: commands/alter.c:123 +#: commands/alter.c:122 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 이름의 변환규칙(conversin)이 \"%s\" 스키마에 이미 있습니다" -#: commands/alter.c:127 +#: commands/alter.c:126 #, c-format msgid "statistics object \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 이름의 통계정보 개체는 \"%s\" 스키마에 이미 있습니다" -#: commands/alter.c:131 +#: commands/alter.c:130 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 전문 검색 파서가 \"%s\" 스키마 안에 이미 있음" -#: commands/alter.c:135 +#: commands/alter.c:134 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 전문 검색 사전이 \"%s\" 스키마 안에 이미 있음" -#: commands/alter.c:139 +#: commands/alter.c:138 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 전문 검색 템플릿이 \"%s\" 스키마 안에 이미 있음" -#: commands/alter.c:143 +#: commands/alter.c:142 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 전문 검색 구성이 \"%s\" 스키마 안에 이미 있음" -#: commands/alter.c:216 +#: commands/alter.c:215 #, c-format msgid "must be superuser to rename %s" msgstr "%s 이름 변경 작업은 슈퍼유저만 할 수 있음" -#: commands/alter.c:719 +#: commands/alter.c:744 #, c-format msgid "must be superuser to set schema of %s" msgstr "%s의 스키마 지정은 슈퍼유져여야합니다" -#: commands/amcmds.c:59 +#: commands/amcmds.c:60 #, c-format msgid "permission denied to create access method \"%s\"" msgstr "\"%s\" 접근 방법을 만들 권한이 없습니다." -#: commands/amcmds.c:61 +#: commands/amcmds.c:62 #, c-format msgid "Must be superuser to create an access method." msgstr "슈퍼유저만 접근 방법을 만들 수 있습니다." -#: commands/amcmds.c:70 +#: commands/amcmds.c:71 #, c-format msgid "access method \"%s\" already exists" msgstr "\"%s\" 이름의 인덱스 접근 방법이 이미 있습니다." -#: commands/amcmds.c:127 +#: commands/amcmds.c:130 #, c-format msgid "must be superuser to drop access methods" msgstr "접근 방법은 슈퍼유저만 삭제할 수 있습니다." -#: commands/amcmds.c:178 commands/indexcmds.c:187 commands/indexcmds.c:741 -#: commands/opclasscmds.c:372 commands/opclasscmds.c:791 +#: commands/amcmds.c:181 commands/indexcmds.c:188 commands/indexcmds.c:790 +#: commands/opclasscmds.c:373 commands/opclasscmds.c:793 #, c-format msgid "access method \"%s\" does not exist" msgstr "\"%s\" 인덱스 접근 방법이 없습니다" -#: commands/amcmds.c:267 +#: commands/amcmds.c:270 #, c-format msgid "handler function is not specified" msgstr "핸들러 함수 부분이 빠졌습니다" -#: commands/amcmds.c:288 commands/event_trigger.c:245 -#: commands/foreigncmds.c:493 commands/proclang.c:115 commands/proclang.c:287 -#: commands/trigger.c:719 parser/parse_clause.c:950 +#: commands/amcmds.c:291 commands/event_trigger.c:183 +#: commands/foreigncmds.c:489 commands/proclang.c:79 commands/trigger.c:687 +#: parser/parse_clause.c:941 #, c-format msgid "function %s must return type %s" msgstr "%s 함수는 %s 자료형을 반환해야 함" -#: commands/analyze.c:225 +#: commands/analyze.c:226 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "\"%s\" 건너뜀 --- 외부 테이블은 분석할 수 없음" -#: commands/analyze.c:242 +#: commands/analyze.c:243 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "" "\"%s\" 건너뜀 --- 테이블이 아니거나, 특수 시스템 테이블들은 분석할 수 없음" -#: commands/analyze.c:323 +#: commands/analyze.c:329 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "\"%s.%s\" 상속 관계 분석중" -#: commands/analyze.c:328 +#: commands/analyze.c:334 #, c-format msgid "analyzing \"%s.%s\"" msgstr "\"%s.%s\" 자료 통계 수집 중" -#: commands/analyze.c:388 +#: commands/analyze.c:394 #, c-format msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "\"%s\" 칼럼이 \"%s\" 릴레이션에서 두 번 이상 사용되었음" -#: commands/analyze.c:674 +#: commands/analyze.c:700 #, c-format msgid "automatic analyze of table \"%s.%s.%s\" system usage: %s" msgstr "\"%s.%s.%s\" 테이블의 시스템 사용 자동 분석: %s" -#: commands/analyze.c:1133 +#: commands/analyze.c:1169 #, c-format msgid "" "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead " @@ -5956,7 +6115,7 @@ msgstr "" "\"%s\": 탐색한 페이지: %d, 전체페이지: %u, 실자료: %.0f개, 쓰레기자료: %.0f" "개; 표본 추출 자료: %d개, 예상한 총 자료: %.0f개" -#: commands/analyze.c:1213 +#: commands/analyze.c:1249 #, c-format msgid "" "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree " @@ -5965,7 +6124,7 @@ msgstr "" "\"%s.%s\" 상속 나무의 통계 수집 건너뜀 --- 이 상속 나무에는 하위 테이블이 없" "음" -#: commands/analyze.c:1311 +#: commands/analyze.c:1347 #, c-format msgid "" "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree " @@ -5974,46 +6133,46 @@ msgstr "" "\"%s.%s\" 상속 나무의 통계 수집 건너뜀 --- 이 상속 나무에는 통계 수집할 하위 " "테이블이 없음" -#: commands/async.c:557 +#: commands/async.c:634 #, c-format msgid "channel name cannot be empty" msgstr "채널 이름은 비워둘 수 없음" -#: commands/async.c:562 +#: commands/async.c:640 #, c-format msgid "channel name too long" msgstr "채널 이름이 너무 긺" # # nonun 부분 begin -#: commands/async.c:569 +#: commands/async.c:645 #, c-format msgid "payload string too long" msgstr "payload 문자열이 너무 긺" -#: commands/async.c:755 +#: commands/async.c:864 #, c-format msgid "" "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" msgstr "" "LISTEN, UNLISTEN 또는 NOTIFY 옵션으로 실행된 트랜잭션을 PREPARE할 수 없음" -#: commands/async.c:858 +#: commands/async.c:970 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "NOTIFY 큐에 너무 많은 알림이 있습니다" -#: commands/async.c:1490 +#: commands/async.c:1636 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "NOTIFY 큐 사용률: %.0f%%" -#: commands/async.c:1492 +#: commands/async.c:1638 #, c-format msgid "" "The server process with PID %d is among those with the oldest transactions." msgstr "%d PID 서버 프로세스가 가장 오래된 트랜잭션을 사용하고 있습니다." -#: commands/async.c:1495 +#: commands/async.c:1641 #, c-format msgid "" "The NOTIFY queue cannot be emptied until that process ends its current " @@ -6021,42 +6180,42 @@ msgid "" msgstr "" "이 프로세스의 현재 트랜잭션을 종료하지 않으면, NOTIFY 큐를 비울 수 없습니다" -#: commands/cluster.c:126 commands/cluster.c:388 +#: commands/cluster.c:125 commands/cluster.c:362 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "다른 세션의 임시 테이블은 cluster 작업을 할 수 없습니다" -#: commands/cluster.c:134 +#: commands/cluster.c:133 #, c-format msgid "cannot cluster a partitioned table" msgstr "파티션 된 테이블은 클러스터 작업을 할 수 없음" -#: commands/cluster.c:164 +#: commands/cluster.c:151 #, c-format msgid "there is no previously clustered index for table \"%s\"" msgstr "\"%s\" 테이블을 위한 previously clustered 인덱스가 없음" -#: commands/cluster.c:178 commands/tablecmds.c:12136 commands/tablecmds.c:13938 +#: commands/cluster.c:165 commands/tablecmds.c:12853 commands/tablecmds.c:14659 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "\"%s\" 인덱스는 \"%s\" 테이블에 없음" -#: commands/cluster.c:377 +#: commands/cluster.c:351 #, c-format msgid "cannot cluster a shared catalog" msgstr "공유된 카탈로그는 클러스터 작업을 할 수 없음" -#: commands/cluster.c:392 +#: commands/cluster.c:366 #, c-format msgid "cannot vacuum temporary tables of other sessions" msgstr "다른 세션의 임시 테이블은 vacuum 작업을 할 수 없음" -#: commands/cluster.c:458 commands/tablecmds.c:13948 +#: commands/cluster.c:432 commands/tablecmds.c:14669 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\" 개체는 \"%s\" 테이블을 위한 인덱스가 아님" -#: commands/cluster.c:466 +#: commands/cluster.c:440 #, c-format msgid "" "cannot cluster on index \"%s\" because access method does not support " @@ -6064,33 +6223,33 @@ msgid "" msgstr "" "\"%s\" 인덱스는 자료 액세스 방법이 cluster 작업을 할 수 없는 방법입니다." -#: commands/cluster.c:478 +#: commands/cluster.c:452 #, c-format msgid "cannot cluster on partial index \"%s\"" msgstr "" "\"%s\" 인덱스가 부분인덱스(partial index)라서 cluster 작업을 할 수 없습니다" -#: commands/cluster.c:492 +#: commands/cluster.c:466 #, c-format msgid "cannot cluster on invalid index \"%s\"" msgstr "잘못된 \"%s\" 인덱스에 대해 클러스터링할 수 없음" -#: commands/cluster.c:516 +#: commands/cluster.c:490 #, c-format msgid "cannot mark index clustered in partitioned table" msgstr "파티션된 테이블 대상으로 인덱스 클러스터 표시를 할 수 없음" -#: commands/cluster.c:899 +#: commands/cluster.c:863 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr " \"%s.%s\" 클러스터링 중 (사용 인덱스: \"%s\")" -#: commands/cluster.c:905 +#: commands/cluster.c:869 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "순차 탐색과 정렬을 이용해서 \"%s.%s\" 개체 클러스터링 중" -#: commands/cluster.c:936 +#: commands/cluster.c:900 #, c-format msgid "" "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" @@ -6098,7 +6257,7 @@ msgstr "" "\"%s\": 삭제가능한 %.0f개, 삭제불가능한 %.0f개의 행 버전을 %u 페이지에서 발견" "했음." -#: commands/cluster.c:940 +#: commands/cluster.c:904 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -6107,87 +6266,87 @@ msgstr "" "%.0f 개의 사용하지 않는 로우 버전을 아직 지우지 못했음.\n" "%s." -#: commands/collationcmds.c:104 +#: commands/collationcmds.c:105 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "\"%s\" 연산자 속성을 처리할 수 없음" -#: commands/collationcmds.c:147 +#: commands/collationcmds.c:148 #, c-format msgid "collation \"default\" cannot be copied" msgstr "\"default\" 정렬규칙은 복사될 수 없음" -#: commands/collationcmds.c:180 +#: commands/collationcmds.c:181 #, c-format msgid "unrecognized collation provider: %s" msgstr "알 수 없는 정렬규칙 제공자 이름: %s" -#: commands/collationcmds.c:189 +#: commands/collationcmds.c:190 #, c-format msgid "parameter \"lc_collate\" must be specified" msgstr "\"lc_collate\" 옵션을 지정해야 함" -#: commands/collationcmds.c:194 +#: commands/collationcmds.c:195 #, c-format msgid "parameter \"lc_ctype\" must be specified" msgstr "\"lc_ctype\" 옵션을 지정해야 함" -#: commands/collationcmds.c:204 +#: commands/collationcmds.c:205 #, c-format msgid "nondeterministic collations not supported with this provider" msgstr "" -#: commands/collationcmds.c:264 +#: commands/collationcmds.c:265 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 정렬규칙(대상 인코딩: \"%s\")이 \"%s\" 스키마 안에 이미 있음" -#: commands/collationcmds.c:275 +#: commands/collationcmds.c:276 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 정렬규칙이 \"%s\" 스키마에 이미 있습니다" -#: commands/collationcmds.c:323 +#: commands/collationcmds.c:324 #, c-format msgid "changing version from %s to %s" msgstr "%s에서 %s 버전으로 바꿉니다" -#: commands/collationcmds.c:338 +#: commands/collationcmds.c:339 #, c-format msgid "version has not changed" msgstr "버전이 바뀌지 않았습니다" -#: commands/collationcmds.c:469 +#: commands/collationcmds.c:470 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "\"%s\" 로케일 이름을 언어 태그로 변환할 수 없음: %s" -#: commands/collationcmds.c:530 +#: commands/collationcmds.c:531 #, c-format msgid "must be superuser to import system collations" msgstr "시스템 정렬규칙을 가져오려면 슈퍼유저여야함" -#: commands/collationcmds.c:553 commands/copy.c:1898 commands/copy.c:3534 -#: libpq/be-secure-common.c:80 +#: commands/collationcmds.c:554 commands/copy.c:1894 commands/copy.c:3480 +#: libpq/be-secure-common.c:81 #, c-format msgid "could not execute command \"%s\": %m" msgstr "\"%s\" 명령을 실행할 수 없음: %m" -#: commands/collationcmds.c:684 +#: commands/collationcmds.c:685 #, c-format msgid "no usable system locales were found" msgstr "사용할 수 있는 시스템 로케일이 없음" -#: commands/comment.c:61 commands/dbcommands.c:820 commands/dbcommands.c:1008 -#: commands/dbcommands.c:1121 commands/dbcommands.c:1311 -#: commands/dbcommands.c:1534 commands/dbcommands.c:1648 -#: commands/dbcommands.c:2065 utils/init/postinit.c:890 -#: utils/init/postinit.c:995 utils/init/postinit.c:1012 +#: commands/comment.c:61 commands/dbcommands.c:841 commands/dbcommands.c:1037 +#: commands/dbcommands.c:1150 commands/dbcommands.c:1340 +#: commands/dbcommands.c:1588 commands/dbcommands.c:1702 +#: commands/dbcommands.c:2142 utils/init/postinit.c:888 +#: utils/init/postinit.c:993 utils/init/postinit.c:1010 #, c-format msgid "database \"%s\" does not exist" msgstr "\"%s\" 데이터베이스 없음" -#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:944 +#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:957 #, c-format msgid "" "\"%s\" is not a table, view, materialized view, composite type, or foreign " @@ -6196,12 +6355,12 @@ msgstr "" "\"%s\" 개체는 테이블도, 뷰도, 구체화된 뷰도, 복합 자료형도, 외부 테이블도 아" "닙니다." -#: commands/constraint.c:63 utils/adt/ri_triggers.c:1915 +#: commands/constraint.c:63 utils/adt/ri_triggers.c:1923 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "\"%s\" 함수가 트리거 관리자에서 호출되지 않았음" -#: commands/constraint.c:70 utils/adt/ri_triggers.c:1924 +#: commands/constraint.c:70 utils/adt/ri_triggers.c:1932 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "AFTER ROW에서 \"%s\" 함수를 실행해야 함" @@ -6211,65 +6370,70 @@ msgstr "AFTER ROW에서 \"%s\" 함수를 실행해야 함" msgid "function \"%s\" must be fired for INSERT or UPDATE" msgstr "INSERT 또는 UPDATE에 대해 \"%s\" 함수를 실행해야 함" -#: commands/conversioncmds.c:65 +#: commands/conversioncmds.c:66 #, c-format msgid "source encoding \"%s\" does not exist" msgstr "\"%s\" 원본 인코딩 없음" -#: commands/conversioncmds.c:72 +#: commands/conversioncmds.c:73 #, c-format msgid "destination encoding \"%s\" does not exist" msgstr "\"%s\" 대상 인코딩 없음" #: commands/conversioncmds.c:86 #, c-format +msgid "encoding conversion to or from \"SQL_ASCII\" is not supported" +msgstr "\"SQL_ASCII\" 인코딩 변환은 지원하지 않습니다." + +#: commands/conversioncmds.c:99 +#, c-format msgid "encoding conversion function %s must return type %s" msgstr "%s 인코딩 변환 함수는 %s 형을 반환해야 함" -#: commands/copy.c:427 commands/copy.c:461 +#: commands/copy.c:426 commands/copy.c:460 #, c-format msgid "COPY BINARY is not supported to stdout or from stdin" msgstr "COPY BINARY 명령은 stdout, stdin 입출력을 지원하지 않습니다" -#: commands/copy.c:561 +#: commands/copy.c:560 #, c-format msgid "could not write to COPY program: %m" msgstr "COPY 프로그램으로 파일을 쓸 수 없습니다: %m" -#: commands/copy.c:566 +#: commands/copy.c:565 #, c-format msgid "could not write to COPY file: %m" msgstr "COPY 파일로로 파일을 쓸 수 없습니다: %m" -#: commands/copy.c:579 +#: commands/copy.c:578 #, c-format msgid "connection lost during COPY to stdout" msgstr "COPY 명령에서 stdout으로 자료를 내보내는 동안 연결이 끊겼습니다" -#: commands/copy.c:623 +#: commands/copy.c:622 #, c-format msgid "could not read from COPY file: %m" msgstr "COPY 명령에 사용할 파일을 읽을 수 없습니다: %m" -#: commands/copy.c:641 commands/copy.c:662 commands/copy.c:666 -#: tcop/postgres.c:348 tcop/postgres.c:384 tcop/postgres.c:411 +#: commands/copy.c:640 commands/copy.c:661 commands/copy.c:665 +#: tcop/postgres.c:344 tcop/postgres.c:380 tcop/postgres.c:407 #, c-format msgid "unexpected EOF on client connection with an open transaction" msgstr "열린 트랜잭션과 함께 클라이언트 연결에서 예상치 않은 EOF 발견됨" -#: commands/copy.c:679 +#: commands/copy.c:678 #, c-format msgid "COPY from stdin failed: %s" msgstr "COPY 명령에서 stdin으로 자료 가져오기 실패: %s" -#: commands/copy.c:695 +#: commands/copy.c:694 #, c-format msgid "unexpected message type 0x%02X during COPY from stdin" msgstr "" "COPY 명령으로 stdin으로 자료를 가져오는 동안 예상치 않은 메시지 타입 0x%02X " "발견됨" -#: commands/copy.c:862 +#: commands/copy.c:861 #, c-format msgid "" "must be superuser or a member of the pg_execute_server_program role to COPY " @@ -6278,14 +6442,14 @@ msgstr "" "외부 프로그램을 이용하는 COPY 작업은 슈퍼유저와 pg_execute_server_program 롤 " "소속원만 허용합니다." -#: commands/copy.c:863 commands/copy.c:872 commands/copy.c:879 +#: commands/copy.c:862 commands/copy.c:871 commands/copy.c:878 #, c-format msgid "" "Anyone can COPY to stdout or from stdin. psql's \\copy command also works " "for anyone." msgstr "일반 사용자인데, 이 작업이 필요하면, psql의 \\copy 명령을 이용하세요" -#: commands/copy.c:871 +#: commands/copy.c:870 #, c-format msgid "" "must be superuser or a member of the pg_read_server_files role to COPY from " @@ -6294,7 +6458,7 @@ msgstr "" "파일을 읽어 COPY 명령으로 자료를 저장하려면, 슈퍼유저이거나 " "pg_read_server_files 롤 구성원이어야 합니다." -#: commands/copy.c:878 +#: commands/copy.c:877 #, c-format msgid "" "must be superuser or a member of the pg_write_server_files role to COPY to a " @@ -6303,246 +6467,246 @@ msgstr "" "COPY 명령 결과를 파일로 저장하려면, 슈퍼유저이거나 pg_write_server_files 롤 " "구성원이어야 합니다." -#: commands/copy.c:962 +#: commands/copy.c:963 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "로우 단위 보안 기능으로 COPY FROM 명령을 사용할 수 없음" -#: commands/copy.c:963 +#: commands/copy.c:964 #, c-format msgid "Use INSERT statements instead." msgstr "대신에 INSERT 구문을 사용하십시오." -#: commands/copy.c:1151 +#: commands/copy.c:1146 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "\"%s\" COPY 양식은 지원하지 않음" -#: commands/copy.c:1222 commands/copy.c:1238 commands/copy.c:1253 -#: commands/copy.c:1275 +#: commands/copy.c:1217 commands/copy.c:1233 commands/copy.c:1248 +#: commands/copy.c:1270 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "\"%s\" 옵션에 대한 인자는 칼럼 이름 목록이어야 합니다." -#: commands/copy.c:1290 +#: commands/copy.c:1285 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "\"%s\" 옵션에 대한 인자는 인코딩 이름이어야 합니다." -#: commands/copy.c:1297 commands/dbcommands.c:243 commands/dbcommands.c:1482 +#: commands/copy.c:1292 commands/dbcommands.c:253 commands/dbcommands.c:1536 #, c-format msgid "option \"%s\" not recognized" msgstr "\"%s\" 옵션은 타당하지 않습니다." -#: commands/copy.c:1309 +#: commands/copy.c:1304 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "BINARY 모드에서는 DELIMITER 값을 지정할 수 없음" -#: commands/copy.c:1314 +#: commands/copy.c:1309 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "BINARY 모드에서는 NULL 값을 지정할 수 없음" -#: commands/copy.c:1336 +#: commands/copy.c:1331 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "COPY 구분자는 1바이트의 단일 문자여야 함" -#: commands/copy.c:1343 +#: commands/copy.c:1338 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "COPY 명령에서 사용할 칼럼 구분자로 줄바꿈 문자들을 사용할 수 없습니다" -#: commands/copy.c:1349 +#: commands/copy.c:1344 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "COPY null 표현에서 줄바꿈 또는 캐리지 리턴을 사용할 수 없음" -#: commands/copy.c:1366 +#: commands/copy.c:1361 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "COPY 구분자는 \"%s\"일 수 없음" -#: commands/copy.c:1372 +#: commands/copy.c:1367 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "COPY HEADER는 CSV 모드에서만 사용할 수 있음" -#: commands/copy.c:1378 +#: commands/copy.c:1373 #, c-format msgid "COPY quote available only in CSV mode" msgstr "COPY 따옴표는 CSV 모드에서만 사용할 수 있음" -#: commands/copy.c:1383 +#: commands/copy.c:1378 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "COPY 따옴표는 1바이트의 단일 문자여야 함" -#: commands/copy.c:1388 +#: commands/copy.c:1383 #, c-format msgid "COPY delimiter and quote must be different" msgstr "COPY 구분자 및 따옴표는 서로 달라야 함" -#: commands/copy.c:1394 +#: commands/copy.c:1389 #, c-format msgid "COPY escape available only in CSV mode" msgstr "COPY 이스케이프는 CSV 모드에서만 사용할 수 있음" -#: commands/copy.c:1399 +#: commands/copy.c:1394 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "COPY 이스케이프는 1바이트의 단일 문자여야 함" -#: commands/copy.c:1405 +#: commands/copy.c:1400 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "COPY force quote는 CSV 모드에서만 사용할 수 있음" -#: commands/copy.c:1409 +#: commands/copy.c:1404 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "COPY force quote는 COPY TO에서만 사용할 수 있음" -#: commands/copy.c:1415 +#: commands/copy.c:1410 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "COPY force not null은 CSV 모드에서만 사용할 수 있음" -#: commands/copy.c:1419 +#: commands/copy.c:1414 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "COPY force not null은 COPY FROM에서만 사용할 수 있음" -#: commands/copy.c:1425 +#: commands/copy.c:1420 #, c-format msgid "COPY force null available only in CSV mode" msgstr "COPY force null은 CSV 모드에서만 사용할 수 있음" -#: commands/copy.c:1430 +#: commands/copy.c:1425 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "COPY force null은 COPY FROM에서만 사용할 수 있음" -#: commands/copy.c:1436 +#: commands/copy.c:1431 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "COPY 구분자는 NULL 지정에 표시되지 않아야 함" -#: commands/copy.c:1443 +#: commands/copy.c:1438 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "CSV 따옴표는 NULL 지정에 표시되지 않아야 함" -#: commands/copy.c:1529 +#: commands/copy.c:1524 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for COPY" msgstr "DO INSTEAD NOTHING 룰(rule)은 COPY 구문에서 지원하지 않습니다." -#: commands/copy.c:1543 +#: commands/copy.c:1538 #, c-format msgid "conditional DO INSTEAD rules are not supported for COPY" msgstr "선택적 DO INSTEAD 룰은 COPY 구문에서 지원하지 않음" -#: commands/copy.c:1547 +#: commands/copy.c:1542 #, c-format msgid "DO ALSO rules are not supported for the COPY" msgstr "DO ALSO 룰(rule)은 COPY 구문에서 지원하지 않습니다." -#: commands/copy.c:1552 +#: commands/copy.c:1547 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for COPY" msgstr "다중 구문 DO INSTEAD 룰은 COPY 구문에서 지원하지 않음" -#: commands/copy.c:1562 +#: commands/copy.c:1557 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) 지원하지 않음" -#: commands/copy.c:1579 +#: commands/copy.c:1574 #, c-format msgid "COPY query must have a RETURNING clause" msgstr "COPY 쿼리는 RETURNING 절이 있어야 합니다" -#: commands/copy.c:1607 +#: commands/copy.c:1603 #, c-format msgid "relation referenced by COPY statement has changed" msgstr "COPY 문에 의해 참조된 릴레이션이 변경 되었음" -#: commands/copy.c:1666 +#: commands/copy.c:1662 #, c-format msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" msgstr "\"%s\" FORCE_QUOTE 칼럼은 COPY에서 참조되지 않음" -#: commands/copy.c:1689 +#: commands/copy.c:1685 #, c-format msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" msgstr "\"%s\" FORCE_NOT_NULL 칼럼은 COPY에서 참조되지 않음" -#: commands/copy.c:1712 +#: commands/copy.c:1708 #, c-format msgid "FORCE_NULL column \"%s\" not referenced by COPY" msgstr "\"%s\" FORCE_NULL 칼럼은 COPY에서 참조되지 않음" -#: commands/copy.c:1778 libpq/be-secure-common.c:102 +#: commands/copy.c:1774 libpq/be-secure-common.c:105 #, c-format msgid "could not close pipe to external command: %m" msgstr "외부 명령으로 파이프를 닫을 수 없음: %m" -#: commands/copy.c:1793 +#: commands/copy.c:1789 #, c-format msgid "program \"%s\" failed" msgstr "\"%s\" 프로그램 실패" -#: commands/copy.c:1844 +#: commands/copy.c:1840 #, c-format msgid "cannot copy from view \"%s\"" msgstr "\"%s\" 이름의 개체는 뷰(view)입니다. 자료를 내보낼 수 없습니다" -#: commands/copy.c:1846 commands/copy.c:1852 commands/copy.c:1858 -#: commands/copy.c:1869 +#: commands/copy.c:1842 commands/copy.c:1848 commands/copy.c:1854 +#: commands/copy.c:1865 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "COPY (SELECT ...) TO 변형을 시도하십시오." -#: commands/copy.c:1850 +#: commands/copy.c:1846 #, c-format msgid "cannot copy from materialized view \"%s\"" msgstr "\"%s\" 이름의 개체는 구체화된 뷰입니다. 자료를 내보낼 수 없습니다" -#: commands/copy.c:1856 +#: commands/copy.c:1852 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "\"%s\" 이름의 개체는 외부 테이블입니다. 자료를 내보낼 수 없습니다" -#: commands/copy.c:1862 +#: commands/copy.c:1858 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "\"%s\" 이름의 개체는 시퀀스입니다. 자료를 내보낼 수 없습니다" -#: commands/copy.c:1867 +#: commands/copy.c:1863 #, c-format msgid "cannot copy from partitioned table \"%s\"" msgstr "\"%s\" 파티션 된 테이블에서 복사할 수 없음" -#: commands/copy.c:1873 +#: commands/copy.c:1869 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "" "\"%s\" 개체는 테이블이 아닌 릴레이션(relation)이기에 자료를 내보낼 수 없습니" "다" -#: commands/copy.c:1913 +#: commands/copy.c:1909 #, c-format msgid "relative path not allowed for COPY to file" msgstr "COPY 명령에 사용할 파일 이름으로 상대경로는 사용할 수 없습니다" -#: commands/copy.c:1934 +#: commands/copy.c:1928 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "\"%s\" 파일 열기 실패: %m" -#: commands/copy.c:1937 +#: commands/copy.c:1931 #, c-format msgid "" "COPY TO instructs the PostgreSQL server process to write a file. You may " @@ -6552,74 +6716,74 @@ msgstr "" "저장된다. 클라이언트 쪽에서 그 결과를 저장하려면, psql \\copy 명령으로 처리" "할 수 있다." -#: commands/copy.c:1950 commands/copy.c:3565 +#: commands/copy.c:1944 commands/copy.c:3511 #, c-format msgid "\"%s\" is a directory" msgstr "\"%s\" 디렉터리임" -#: commands/copy.c:2252 +#: commands/copy.c:2246 #, c-format msgid "COPY %s, line %s, column %s" msgstr "%s 복사, %s번째 줄, %s 열" -#: commands/copy.c:2256 commands/copy.c:2303 +#: commands/copy.c:2250 commands/copy.c:2297 #, c-format msgid "COPY %s, line %s" msgstr "%s 복사, %s번째 줄" -#: commands/copy.c:2267 +#: commands/copy.c:2261 #, c-format msgid "COPY %s, line %s, column %s: \"%s\"" msgstr "%s 복사, %s번째 줄, %s 열: \"%s\"" -#: commands/copy.c:2275 +#: commands/copy.c:2269 #, c-format msgid "COPY %s, line %s, column %s: null input" msgstr "COPY %s, %s행, %s 열: null 입력" -#: commands/copy.c:2297 +#: commands/copy.c:2291 #, c-format msgid "COPY %s, line %s: \"%s\"" msgstr "%s 복사, %s번째 줄: \"%s\"" -#: commands/copy.c:2698 +#: commands/copy.c:2692 #, c-format msgid "cannot copy to view \"%s\"" msgstr "\"%s\" 뷰로 복사할 수 없음" -#: commands/copy.c:2700 +#: commands/copy.c:2694 #, c-format msgid "To enable copying to a view, provide an INSTEAD OF INSERT trigger." msgstr "뷰를 통해 자료를 입력하려면, INSTEAD OF INSERT 트리거를 사용하세요" -#: commands/copy.c:2704 +#: commands/copy.c:2698 #, c-format msgid "cannot copy to materialized view \"%s\"" msgstr "\"%s\" 구체화된 뷰(view)에 복사할 수 없음" -#: commands/copy.c:2709 +#: commands/copy.c:2703 #, c-format msgid "cannot copy to sequence \"%s\"" msgstr "\"%s\" 시퀀스에 복사할 수 없음" -#: commands/copy.c:2714 +#: commands/copy.c:2708 #, c-format msgid "cannot copy to non-table relation \"%s\"" msgstr "\"%s\" 개체는 테이블이 아닌 릴레이션(relation)이기에 복사할 수 없음" -#: commands/copy.c:2802 +#: commands/copy.c:2748 #, c-format msgid "cannot perform COPY FREEZE on a partitioned table" msgstr "파티션 된 테이블에는 COPY FREEZE 수행할 수 없음" -#: commands/copy.c:2817 +#: commands/copy.c:2763 #, c-format msgid "cannot perform COPY FREEZE because of prior transaction activity" msgstr "" "먼저 시작한 다른 트랜잭션이 아직 활성 상태여서 COPY FREEZE 작업은 진행할 수 " "없음" -#: commands/copy.c:2823 +#: commands/copy.c:2769 #, c-format msgid "" "cannot perform COPY FREEZE because the table was not created or truncated in " @@ -6628,7 +6792,7 @@ msgstr "" "현재 하위 트랜잭션에서 만들어지거나 비워진 테이블이 아니기 때문에 COPY " "FREEZE 작업을 할 수 없음" -#: commands/copy.c:3552 +#: commands/copy.c:3498 #, c-format msgid "" "COPY FROM instructs the PostgreSQL server process to read a file. You may " @@ -6638,220 +6802,225 @@ msgstr "" "언트 쪽에 있는 파일을 읽어 처리 하려면, psql의 \\copy 내장 명령어를 사용하세" "요." -#: commands/copy.c:3580 +#: commands/copy.c:3526 #, c-format msgid "COPY file signature not recognized" msgstr "COPY 파일 signature 인식되지 않았음" -#: commands/copy.c:3585 +#: commands/copy.c:3531 #, c-format msgid "invalid COPY file header (missing flags)" msgstr "COPY 명령에서 잘못된 파일 헤더를 사용함(플래그 빠졌음)" -#: commands/copy.c:3589 +#: commands/copy.c:3535 #, c-format msgid "invalid COPY file header (WITH OIDS)" msgstr "COPY 파일 해더 잘못됨 (WITH OIDS)" -#: commands/copy.c:3594 +#: commands/copy.c:3540 #, c-format msgid "unrecognized critical flags in COPY file header" msgstr "COPY 파일 헤더안에 critical flags 값들을 인식할 수 없음" -#: commands/copy.c:3600 +#: commands/copy.c:3546 #, c-format msgid "invalid COPY file header (missing length)" msgstr "COPY 파일 헤더에 length 값이 빠졌음" -#: commands/copy.c:3607 +#: commands/copy.c:3553 #, c-format msgid "invalid COPY file header (wrong length)" msgstr "COPY 파일 헤더에 length 값이 잘못되었음" -#: commands/copy.c:3726 commands/copy.c:4391 commands/copy.c:4621 +#: commands/copy.c:3672 commands/copy.c:4337 commands/copy.c:4567 #, c-format msgid "extra data after last expected column" msgstr "마지막 칼럼을 초과해서 또 다른 데이터가 있음" -#: commands/copy.c:3740 +#: commands/copy.c:3686 #, c-format msgid "missing data for column \"%s\"" msgstr "\"%s\" 칼럼의 자료가 빠졌음" -#: commands/copy.c:3823 +#: commands/copy.c:3769 #, c-format msgid "received copy data after EOF marker" msgstr "EOF 표시 뒤에도 복사 데이터를 받았음" -#: commands/copy.c:3830 +#: commands/copy.c:3776 #, c-format msgid "row field count is %d, expected %d" msgstr "행(row) 필드 갯수가 %d 임, 예상값은 %d" -#: commands/copy.c:4150 commands/copy.c:4167 +#: commands/copy.c:4096 commands/copy.c:4113 #, c-format msgid "literal carriage return found in data" msgstr "데이터에 carriage return 값이 잘못되었음" -#: commands/copy.c:4151 commands/copy.c:4168 +#: commands/copy.c:4097 commands/copy.c:4114 #, c-format msgid "unquoted carriage return found in data" msgstr "데이터에 carriage return 값 표기가 잘못 되었음" -#: commands/copy.c:4153 commands/copy.c:4170 +#: commands/copy.c:4099 commands/copy.c:4116 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "carriage return값으로 \"\\r\" 문자를 사용하세요" -#: commands/copy.c:4154 commands/copy.c:4171 +#: commands/copy.c:4100 commands/copy.c:4117 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "" "carriage return 문자를 그대로 적용하려면, quoted CSV 필드를 사용하세요." -#: commands/copy.c:4183 +#: commands/copy.c:4129 #, c-format msgid "literal newline found in data" msgstr "데이터에 newline 값이 잘못되었음" -#: commands/copy.c:4184 +#: commands/copy.c:4130 #, c-format msgid "unquoted newline found in data" msgstr "데이터에 newline 값이 잘못 되었음" -#: commands/copy.c:4186 +#: commands/copy.c:4132 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "newline 값으로 \"\\n\" 문자를 사용하세요" -#: commands/copy.c:4187 +#: commands/copy.c:4133 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "newline 문자를 그대로 적용하려면, quoted CSV 필드를 사용하세요." -#: commands/copy.c:4233 commands/copy.c:4269 +#: commands/copy.c:4179 commands/copy.c:4215 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "end-of-copy 마크는 이전 newline 모양가 틀립니다" -#: commands/copy.c:4242 commands/copy.c:4258 +#: commands/copy.c:4188 commands/copy.c:4204 #, c-format msgid "end-of-copy marker corrupt" msgstr "end-of-copy 마크가 잘못되었음" -#: commands/copy.c:4705 +#: commands/copy.c:4651 #, c-format msgid "unterminated CSV quoted field" msgstr "종료되지 않은 CSV 따옴표 필드" -#: commands/copy.c:4782 commands/copy.c:4801 +#: commands/copy.c:4728 commands/copy.c:4747 #, c-format msgid "unexpected EOF in COPY data" msgstr "복사 자료 안에 예상치 않은 EOF 발견" -#: commands/copy.c:4791 +#: commands/copy.c:4737 #, c-format msgid "invalid field size" msgstr "잘못된 필드 크기" -#: commands/copy.c:4814 +#: commands/copy.c:4760 #, c-format msgid "incorrect binary data format" msgstr "잘못된 바이너리 자료 포맷" -#: commands/copy.c:5122 +#: commands/copy.c:5068 #, c-format msgid "column \"%s\" is a generated column" msgstr "\"%s\" 칼럼은 미리 계산된 칼럼임" -#: commands/copy.c:5124 +#: commands/copy.c:5070 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "미리 계산된 칼럼은 COPY 작업 대상이 아님" -#: commands/copy.c:5139 commands/indexcmds.c:1600 commands/statscmds.c:214 -#: commands/tablecmds.c:2111 commands/tablecmds.c:2652 -#: commands/tablecmds.c:3031 parser/parse_relation.c:3353 -#: parser/parse_relation.c:3373 utils/adt/tsvector_op.c:2559 +#: commands/copy.c:5085 commands/indexcmds.c:1699 commands/statscmds.c:217 +#: commands/tablecmds.c:2176 commands/tablecmds.c:2795 +#: commands/tablecmds.c:3182 parser/parse_relation.c:3507 +#: parser/parse_relation.c:3527 utils/adt/tsvector_op.c:2668 #, c-format msgid "column \"%s\" does not exist" msgstr "\"%s\" 이름의 칼럼은 없습니다" -#: commands/copy.c:5146 commands/tablecmds.c:2144 commands/trigger.c:937 -#: parser/parse_target.c:1047 parser/parse_target.c:1058 +#: commands/copy.c:5092 commands/tablecmds.c:2202 commands/trigger.c:885 +#: parser/parse_target.c:1052 parser/parse_target.c:1063 #, c-format msgid "column \"%s\" specified more than once" msgstr "\"%s\" 칼럼을 하나 이상 지정했음" -#: commands/createas.c:216 commands/createas.c:499 +#: commands/createas.c:215 commands/createas.c:497 #, c-format msgid "too many column names were specified" msgstr "너무 많은 칼럼 이름을 지정했습니다." -#: commands/createas.c:541 +#: commands/createas.c:539 #, c-format msgid "policies not yet implemented for this command" msgstr "이 명령을 위한 정책은 아직 구현되어 있지 않습니다" -#: commands/dbcommands.c:236 +#: commands/dbcommands.c:246 #, c-format msgid "LOCATION is not supported anymore" msgstr "LOCATION 예약어는 이제 더이상 지원하지 않습니다" -#: commands/dbcommands.c:237 +#: commands/dbcommands.c:247 #, c-format msgid "Consider using tablespaces instead." msgstr "대신에 테이블스페이스를 이용하세요." -#: commands/dbcommands.c:263 utils/adt/ascii.c:145 +#: commands/dbcommands.c:261 +#, c-format +msgid "LOCALE cannot be specified together with LC_COLLATE or LC_CTYPE." +msgstr "LOCALE 값은 LC_COLLATE 또는 LC_CTYPE 값과 함께 지정할 수 없음" + +#: commands/dbcommands.c:279 utils/adt/ascii.c:145 #, c-format msgid "%d is not a valid encoding code" msgstr "%d 값은 잘못된 인코딩 코드임" -#: commands/dbcommands.c:274 utils/adt/ascii.c:127 +#: commands/dbcommands.c:290 utils/adt/ascii.c:127 #, c-format msgid "%s is not a valid encoding name" msgstr "%s 이름은 잘못된 인코딩 이름임" -#: commands/dbcommands.c:293 commands/dbcommands.c:1515 commands/user.c:275 -#: commands/user.c:680 +#: commands/dbcommands.c:314 commands/dbcommands.c:1569 commands/user.c:275 +#: commands/user.c:691 #, c-format msgid "invalid connection limit: %d" msgstr "잘못된 연결 제한: %d" -#: commands/dbcommands.c:312 +#: commands/dbcommands.c:333 #, c-format msgid "permission denied to create database" msgstr "데이터베이스를 만들 권한이 없음" -#: commands/dbcommands.c:335 +#: commands/dbcommands.c:356 #, c-format msgid "template database \"%s\" does not exist" msgstr "\"%s\" 템플릿 데이터베이스 없음" -#: commands/dbcommands.c:347 +#: commands/dbcommands.c:368 #, c-format msgid "permission denied to copy database \"%s\"" msgstr "\"%s\" 데이터베이스를 복사할 권한이 없음" -#: commands/dbcommands.c:363 +#: commands/dbcommands.c:384 #, c-format msgid "invalid server encoding %d" msgstr "잘못된 서버 인코딩 %d" -#: commands/dbcommands.c:369 commands/dbcommands.c:374 +#: commands/dbcommands.c:390 commands/dbcommands.c:395 #, c-format msgid "invalid locale name: \"%s\"" msgstr "\"%s\" 로케일 이름이 잘못됨" -#: commands/dbcommands.c:394 +#: commands/dbcommands.c:415 #, c-format msgid "" "new encoding (%s) is incompatible with the encoding of the template database " "(%s)" msgstr "새 인코딩(%s)이 템플릿 데이터베이스의 인코딩(%s)과 호환되지 않음" -#: commands/dbcommands.c:397 +#: commands/dbcommands.c:418 #, c-format msgid "" "Use the same encoding as in the template database, or use template0 as " @@ -6860,7 +7029,7 @@ msgstr "" "템플릿 데이터베이스와 동일한 인코딩을 사용하거나 template0을 템플릿으로 사용" "하십시오." -#: commands/dbcommands.c:402 +#: commands/dbcommands.c:423 #, c-format msgid "" "new collation (%s) is incompatible with the collation of the template " @@ -6869,7 +7038,7 @@ msgstr "" "새 데이터 정렬 규칙 (%s)이 템플릿 데이터베이스의 데이터 정렬 규칙(%s)과 호환" "되지 않음" -#: commands/dbcommands.c:404 +#: commands/dbcommands.c:425 #, c-format msgid "" "Use the same collation as in the template database, or use template0 as " @@ -6878,14 +7047,14 @@ msgstr "" "템플릿 데이터베이스와 동일한 데이터 정렬 규칙을 사용하거나 template0을 템플릿" "으로 사용하십시오." -#: commands/dbcommands.c:409 +#: commands/dbcommands.c:430 #, c-format msgid "" "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database " "(%s)" msgstr "새 LC_CTYPE (%s)이 템플릿 데이터베이스의 LC_CTYPE (%s)과 호환되지 않음" -#: commands/dbcommands.c:411 +#: commands/dbcommands.c:432 #, c-format msgid "" "Use the same LC_CTYPE as in the template database, or use template0 as " @@ -6894,17 +7063,17 @@ msgstr "" "템플릿 데이터베이스와 동일한 LC_CTYPE을 사용하거나 template0을 템플릿으로 사" "용하십시오." -#: commands/dbcommands.c:433 commands/dbcommands.c:1167 +#: commands/dbcommands.c:454 commands/dbcommands.c:1196 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "pg_global을 기본 테이블스페이스로 사용할 수 없음" -#: commands/dbcommands.c:459 +#: commands/dbcommands.c:480 #, c-format msgid "cannot assign new default tablespace \"%s\"" msgstr "새 \"%s\" 테이블스페이스를 지정할 수 없습니다." -#: commands/dbcommands.c:461 +#: commands/dbcommands.c:482 #, c-format msgid "" "There is a conflict because database \"%s\" already has some tables in this " @@ -6913,96 +7082,96 @@ msgstr "" "\"%s\" 데이터베이스 소속 몇몇 테이블들이 이 테이블스페이스안에 있어서 충돌이 " "일어납니다." -#: commands/dbcommands.c:491 commands/dbcommands.c:1037 +#: commands/dbcommands.c:512 commands/dbcommands.c:1066 #, c-format msgid "database \"%s\" already exists" msgstr "\"%s\" 이름의 데이터베이스는 이미 있음" -#: commands/dbcommands.c:505 +#: commands/dbcommands.c:526 #, c-format msgid "source database \"%s\" is being accessed by other users" msgstr "\"%s\" 원본 데이터베이스를 다른 사용자가 액세스하기 시작했습니다" -#: commands/dbcommands.c:748 commands/dbcommands.c:763 +#: commands/dbcommands.c:769 commands/dbcommands.c:784 #, c-format msgid "encoding \"%s\" does not match locale \"%s\"" msgstr "\"%s\" 인코딩은 \"%s\" 로케일과 일치하지 않음" -#: commands/dbcommands.c:751 +#: commands/dbcommands.c:772 #, c-format msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." msgstr "선택한 LC_CTYPE 설정에는 \"%s\" 인코딩이 필요합니다." -#: commands/dbcommands.c:766 +#: commands/dbcommands.c:787 #, c-format msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "선택한 LC_COLLATE 설정에는 \"%s\" 인코딩이 필요합니다." -#: commands/dbcommands.c:827 +#: commands/dbcommands.c:848 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "\"%s\" 데이터베이스 없음, 건너 뜀" -#: commands/dbcommands.c:851 +#: commands/dbcommands.c:872 #, c-format msgid "cannot drop a template database" msgstr "템플릿 데이터베이스는 삭제할 수 없습니다" -#: commands/dbcommands.c:857 +#: commands/dbcommands.c:878 #, c-format msgid "cannot drop the currently open database" msgstr "현재 열려 있는 데이터베이스는 삭제할 수 없습니다" -#: commands/dbcommands.c:870 +#: commands/dbcommands.c:891 #, c-format msgid "database \"%s\" is used by an active logical replication slot" msgstr "\"%s\" 데이터베이스는 논리 복제 슬롯이 활성화 되어 있습니다" -#: commands/dbcommands.c:872 +#: commands/dbcommands.c:893 #, c-format msgid "There is %d active slot." msgid_plural "There are %d active slots." msgstr[0] "%d 개의 활성 슬롯이 있습니다." -#: commands/dbcommands.c:886 commands/dbcommands.c:1059 -#: commands/dbcommands.c:1189 -#, c-format -msgid "database \"%s\" is being accessed by other users" -msgstr "\"%s\" 데이터베이스를 다른 사용자가 액세스하기 시작했습니다" - -#: commands/dbcommands.c:899 +#: commands/dbcommands.c:907 #, c-format msgid "database \"%s\" is being used by logical replication subscription" msgstr "\"%s\" 데이터베이스가 논리 복제 구독으로 사용되었음" -#: commands/dbcommands.c:901 +#: commands/dbcommands.c:909 #, c-format msgid "There is %d subscription." msgid_plural "There are %d subscriptions." msgstr[0] "%d 개의 구독이 있습니다." -#: commands/dbcommands.c:1019 +#: commands/dbcommands.c:930 commands/dbcommands.c:1088 +#: commands/dbcommands.c:1218 +#, c-format +msgid "database \"%s\" is being accessed by other users" +msgstr "\"%s\" 데이터베이스를 다른 사용자가 액세스하기 시작했습니다" + +#: commands/dbcommands.c:1048 #, c-format msgid "permission denied to rename database" msgstr "데이터베이스 이름을 바꿀 권한이 없습니다" -#: commands/dbcommands.c:1048 +#: commands/dbcommands.c:1077 #, c-format msgid "current database cannot be renamed" msgstr "현재 데이터베이스의 이름을 바꿀 수 없음" -#: commands/dbcommands.c:1145 +#: commands/dbcommands.c:1174 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "현재 열려 있는 데이터베이스의 테이블스페이스를 바꿀 수 없음" -#: commands/dbcommands.c:1248 +#: commands/dbcommands.c:1277 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "" "\"%s\" 데이터베이스의 일부 릴레이션들이 \"%s\" 테이블스페이스에 이미 있음" -#: commands/dbcommands.c:1250 +#: commands/dbcommands.c:1279 #, c-format msgid "" "You must move them back to the database's default tablespace before using " @@ -7011,30 +7180,35 @@ msgstr "" "이 명령을 사용하기 전에 데이터베이스의 기본 테이블스페이스로 다시 이동해야 합" "니다." -#: commands/dbcommands.c:1375 commands/dbcommands.c:1921 -#: commands/dbcommands.c:2126 commands/dbcommands.c:2181 -#: commands/tablespace.c:620 +#: commands/dbcommands.c:1404 commands/dbcommands.c:1980 +#: commands/dbcommands.c:2203 commands/dbcommands.c:2261 +#: commands/tablespace.c:619 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "" "불필요한 일부 파일이 이전 데이터베이스 디렉터리 \"%s\"에 남아 있을 수 있음" -#: commands/dbcommands.c:1496 +#: commands/dbcommands.c:1460 +#, c-format +msgid "unrecognized DROP DATABASE option \"%s\"" +msgstr "알 수 없는 DROP DATABASE 옵션: \"%s\"" + +#: commands/dbcommands.c:1550 #, c-format msgid "option \"%s\" cannot be specified with other options" msgstr "\"%s\" 옵션은 다른 옵션들과 함께 사용할 수 없습니다." -#: commands/dbcommands.c:1552 +#: commands/dbcommands.c:1606 #, c-format msgid "cannot disallow connections for current database" msgstr "현재 데이터베이스 연결을 허용하지 않습니다." -#: commands/dbcommands.c:1688 +#: commands/dbcommands.c:1742 #, c-format msgid "permission denied to change owner of database" msgstr "데이터베이스 소유주를 바꿀 권한이 없습니다" -#: commands/dbcommands.c:2009 +#: commands/dbcommands.c:2086 #, c-format msgid "" "There are %d other session(s) and %d prepared transaction(s) using the " @@ -7042,13 +7216,13 @@ msgid "" msgstr "" "데이터베이스를 사용하는 %d개의 다른 세션과 %d개의 준비된 트랜잭션이 있습니다." -#: commands/dbcommands.c:2012 +#: commands/dbcommands.c:2089 #, c-format msgid "There is %d other session using the database." msgid_plural "There are %d other sessions using the database." msgstr[0] "데이터베이스를 사용하는 %d개의 다른 세션이 있습니다." -#: commands/dbcommands.c:2017 +#: commands/dbcommands.c:2094 storage/ipc/procarray.c:3016 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." @@ -7091,374 +7265,389 @@ msgstr "%s의 인자는 자료형 이름이어야합니다" msgid "invalid argument for %s: \"%s\"" msgstr "%s의 잘못된 인자: \"%s\"" -#: commands/dropcmds.c:99 commands/functioncmds.c:1272 -#: utils/adt/ruleutils.c:2609 +#: commands/dropcmds.c:100 commands/functioncmds.c:1274 +#: utils/adt/ruleutils.c:2633 #, c-format msgid "\"%s\" is an aggregate function" msgstr "\"%s\" 함수는 집계 함수입니다" -#: commands/dropcmds.c:101 +#: commands/dropcmds.c:102 #, c-format msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "집계 함수는 DROP AGGREGATE 명령으로 삭제할 수 있습니다" -#: commands/dropcmds.c:157 commands/sequence.c:447 commands/tablecmds.c:3115 -#: commands/tablecmds.c:3273 commands/tablecmds.c:3318 -#: commands/tablecmds.c:14317 tcop/utility.c:1174 +#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3266 +#: commands/tablecmds.c:3424 commands/tablecmds.c:3469 +#: commands/tablecmds.c:15038 tcop/utility.c:1309 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "\"%s\" 릴레이션 없음, 건너뜀" -#: commands/dropcmds.c:187 commands/dropcmds.c:286 commands/tablecmds.c:1168 +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1199 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "\"%s\" 스키마(schema) 없음, 건너뜀" -#: commands/dropcmds.c:227 commands/dropcmds.c:266 commands/tablecmds.c:255 +#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:259 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "\"%s\" 자료형 없음, 건너뜀" -#: commands/dropcmds.c:256 +#: commands/dropcmds.c:257 #, c-format msgid "access method \"%s\" does not exist, skipping" msgstr "\"%s\" 인덱스 접근 방법 없음, 건너뜀" -#: commands/dropcmds.c:274 +#: commands/dropcmds.c:275 #, c-format msgid "collation \"%s\" does not exist, skipping" msgstr "\"%s\" 정렬규칙 없음, 건너뜀" -#: commands/dropcmds.c:281 +#: commands/dropcmds.c:282 #, c-format msgid "conversion \"%s\" does not exist, skipping" msgstr "\"%s\" 문자코드변환규칙(conversion) 없음, 건너뜀" -#: commands/dropcmds.c:292 +#: commands/dropcmds.c:293 commands/statscmds.c:479 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "\"%s\" 통계정보 개체 없음, 무시함" -#: commands/dropcmds.c:299 +#: commands/dropcmds.c:300 #, c-format msgid "text search parser \"%s\" does not exist, skipping" msgstr "\"%s\" 전문 검색 파서가 없음, 건너뜀" -#: commands/dropcmds.c:306 +#: commands/dropcmds.c:307 #, c-format msgid "text search dictionary \"%s\" does not exist, skipping" msgstr "\"%s\" 전문 검색 사전이 없음, 건너뜀" -#: commands/dropcmds.c:313 +#: commands/dropcmds.c:314 #, c-format msgid "text search template \"%s\" does not exist, skipping" msgstr "\"%s\" 전문 검색 템플릿이 없음, 건너뜀" -#: commands/dropcmds.c:320 +#: commands/dropcmds.c:321 #, c-format msgid "text search configuration \"%s\" does not exist, skipping" msgstr "\"%s\" 전문 검색 구성이 없음, 건너뜀" -#: commands/dropcmds.c:325 +#: commands/dropcmds.c:326 #, c-format msgid "extension \"%s\" does not exist, skipping" msgstr "\"%s\" 확장 모듈 없음, 건너 뜀" -#: commands/dropcmds.c:335 +#: commands/dropcmds.c:336 #, c-format msgid "function %s(%s) does not exist, skipping" msgstr "%s(%s) 함수가 없음, 건너뜀" -#: commands/dropcmds.c:348 +#: commands/dropcmds.c:349 #, c-format msgid "procedure %s(%s) does not exist, skipping" msgstr "%s(%s) 프로시져 없음, 건너뜀" -#: commands/dropcmds.c:361 +#: commands/dropcmds.c:362 #, c-format msgid "routine %s(%s) does not exist, skipping" msgstr "%s(%s) 루틴 없음, 건너뜀" -#: commands/dropcmds.c:374 +#: commands/dropcmds.c:375 #, c-format msgid "aggregate %s(%s) does not exist, skipping" msgstr "%s(%s) 집계 함수 없음, 건너뜀" -#: commands/dropcmds.c:387 +#: commands/dropcmds.c:388 #, c-format msgid "operator %s does not exist, skipping" msgstr "%s 연산자가 없음, 건너뜀" -#: commands/dropcmds.c:393 +#: commands/dropcmds.c:394 #, c-format msgid "language \"%s\" does not exist, skipping" msgstr "\"%s\" 프로시주얼 언어 없음, 건너뜀" -#: commands/dropcmds.c:402 +#: commands/dropcmds.c:403 #, c-format msgid "cast from type %s to type %s does not exist, skipping" msgstr "%s 형에서 %s 형으로 바꾸는 형변환 규칙(cast)이 없음, 건너뜀" -#: commands/dropcmds.c:411 +#: commands/dropcmds.c:412 #, c-format msgid "transform for type %s language \"%s\" does not exist, skipping" msgstr "%s 형변환자 (사용언어 \"%s\") 없음, 건너뜀" -#: commands/dropcmds.c:419 +#: commands/dropcmds.c:420 #, c-format msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" msgstr " \"%s\" 트리거가 \"%s\" 릴레이션에 지정된 것이 없음, 건너뜀" -#: commands/dropcmds.c:428 +#: commands/dropcmds.c:429 #, c-format msgid "policy \"%s\" for relation \"%s\" does not exist, skipping" msgstr " \"%s\" 정책이 \"%s\" 릴레이션에 지정된 것이 없음, 건너뜀" -#: commands/dropcmds.c:435 +#: commands/dropcmds.c:436 #, c-format msgid "event trigger \"%s\" does not exist, skipping" msgstr "\"%s\" 이벤트 트리거 없음, 건너뜀" -#: commands/dropcmds.c:441 +#: commands/dropcmds.c:442 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist, skipping" msgstr " \"%s\" 룰(rule)이 \"%s\" 릴레이션에 지정된 것이 없음, 건너뜀" -#: commands/dropcmds.c:448 +#: commands/dropcmds.c:449 #, c-format msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "\"%s\" 외부 자료 래퍼가 없음, 건너뜀" -#: commands/dropcmds.c:452 commands/foreigncmds.c:1400 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1399 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "\"%s\" 서버가 없음, 건너뜀" -#: commands/dropcmds.c:461 +#: commands/dropcmds.c:462 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\", skipping" msgstr "" "\"%s\" 연산자 클래스는 \"%s\" 인덱스 접근 방법에서 사용할 수 없음, 건너뜀" -#: commands/dropcmds.c:473 +#: commands/dropcmds.c:474 #, c-format msgid "" "operator family \"%s\" does not exist for access method \"%s\", skipping" msgstr "\"%s\" 연산자 패밀리(\"%s\" 접근 방법)가 없음, 건너뜀" -#: commands/dropcmds.c:480 +#: commands/dropcmds.c:481 #, c-format msgid "publication \"%s\" does not exist, skipping" msgstr "\"%s\" 발행 없음, 건너뜀" -#: commands/event_trigger.c:187 +#: commands/event_trigger.c:125 #, c-format msgid "permission denied to create event trigger \"%s\"" msgstr "\"%s\" 이벤트 트리거를 만들 권한이 없음" -#: commands/event_trigger.c:189 +#: commands/event_trigger.c:127 #, c-format msgid "Must be superuser to create an event trigger." msgstr "슈퍼유저만 이벤트 트리거를 만들 수 있습니다." -#: commands/event_trigger.c:198 +#: commands/event_trigger.c:136 #, c-format msgid "unrecognized event name \"%s\"" msgstr "알 수 없는 이벤트 이름: \"%s\"" -#: commands/event_trigger.c:215 +#: commands/event_trigger.c:153 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "알 수 없는 필터 변수: \"%s\"" -#: commands/event_trigger.c:270 +#: commands/event_trigger.c:207 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "\"%s\" 필터값은 \"%s\" 필터 변수으로 쓸 수 없음" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:276 commands/event_trigger.c:346 +#: commands/event_trigger.c:213 commands/event_trigger.c:235 #, c-format msgid "event triggers are not supported for %s" msgstr "%s 용 이벤트 트리거는 지원하지 않음" -#: commands/event_trigger.c:369 +#: commands/event_trigger.c:248 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "\"%s\" 필터 변수가 한 번 이상 사용되었습니다." -#: commands/event_trigger.c:519 commands/event_trigger.c:563 -#: commands/event_trigger.c:657 +#: commands/event_trigger.c:399 commands/event_trigger.c:443 +#: commands/event_trigger.c:537 #, c-format msgid "event trigger \"%s\" does not exist" msgstr "\"%s\" 이벤트 트리거 없음" -#: commands/event_trigger.c:625 +#: commands/event_trigger.c:505 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "\"%s\" 이벤트 트리거 소유주를 변경할 권한이 없음" -#: commands/event_trigger.c:627 +#: commands/event_trigger.c:507 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "이벤트 트리거 소유주는 슈퍼유저여야 합니다." -#: commands/event_trigger.c:1465 +#: commands/event_trigger.c:1325 #, c-format msgid "%s can only be called in a sql_drop event trigger function" msgstr "%s 개체는 sql_drop 이벤트 트리거 함수 안에서만 호출 되어야 합니다." -#: commands/event_trigger.c:1585 commands/event_trigger.c:1606 +#: commands/event_trigger.c:1445 commands/event_trigger.c:1466 #, c-format msgid "%s can only be called in a table_rewrite event trigger function" msgstr "" "%s 개체는 table_rewrite 이벤트 트리거 함수 안에서만 호출 되어야 합니다." -#: commands/event_trigger.c:2017 +#: commands/event_trigger.c:1883 #, c-format msgid "%s can only be called in an event trigger function" msgstr "%s 개체는 이벤트 트리거 함수 안에서만 호출 되어야 합니다." -#: commands/explain.c:194 +#: commands/explain.c:213 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "\"%s\" EXPLAIN 옵션에서 쓸 수 없는 값: \"%s\"" -#: commands/explain.c:201 +#: commands/explain.c:220 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "잘못된 EXPLAIN 옵션: \"%s\"" -#: commands/explain.c:209 +#: commands/explain.c:228 #, c-format -msgid "EXPLAIN option BUFFERS requires ANALYZE" -msgstr "BUFFERS 옵션은 EXPLAIN ANALYZE에서만 쓸 수 있습니다." +msgid "EXPLAIN option WAL requires ANALYZE" +msgstr "WAL 옵션은 EXPLAIN ANALYZE에서만 쓸 수 있습니다." -#: commands/explain.c:218 +#: commands/explain.c:237 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "TIMING 옵션은 EXPLAIN ANALYZE에서만 쓸 수 있습니다." -#: commands/extension.c:171 commands/extension.c:2918 +#: commands/extension.c:173 commands/extension.c:3013 #, c-format msgid "extension \"%s\" does not exist" msgstr "\"%s\" 이름의 확장 모듈이 없습니다" -#: commands/extension.c:270 commands/extension.c:279 commands/extension.c:291 -#: commands/extension.c:301 +#: commands/extension.c:272 commands/extension.c:281 commands/extension.c:293 +#: commands/extension.c:303 #, c-format msgid "invalid extension name: \"%s\"" msgstr "잘못된 확장 모듈 이름: \"%s\"" -#: commands/extension.c:271 +#: commands/extension.c:273 #, c-format msgid "Extension names must not be empty." msgstr "확장 모듈 이름을 지정하세요." -#: commands/extension.c:280 +#: commands/extension.c:282 #, c-format msgid "Extension names must not contain \"--\"." msgstr "확장 모듈 이름에 \"--\" 문자가 포함될 수 없습니다." -#: commands/extension.c:292 +#: commands/extension.c:294 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "확장 모듈 이름의 시작과 끝에는 \"-\" 문자를 사용할 수 없습니다." -#: commands/extension.c:302 +#: commands/extension.c:304 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "확장 모듈 이름에는 디렉터리 구분 문자를 사용할 수 없습니다." -#: commands/extension.c:317 commands/extension.c:326 commands/extension.c:335 -#: commands/extension.c:345 +#: commands/extension.c:319 commands/extension.c:328 commands/extension.c:337 +#: commands/extension.c:347 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "잘못된 확장 모듈 버전 이름: \"%s\"" -#: commands/extension.c:318 +#: commands/extension.c:320 #, c-format msgid "Version names must not be empty." msgstr "버전 이름은 비어있으면 안됩니다" -#: commands/extension.c:327 +#: commands/extension.c:329 #, c-format msgid "Version names must not contain \"--\"." msgstr "버전 이름에 \"--\" 문자가 포함될 수 없습니다." -#: commands/extension.c:336 +#: commands/extension.c:338 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "버전 이름의 앞 뒤에 \"-\" 문자를 쓸 수 없습니다." -#: commands/extension.c:346 +#: commands/extension.c:348 #, c-format msgid "Version names must not contain directory separator characters." msgstr "버전 이름에는 디렉터리 분리 문자를 쓸 수 없습니다." -#: commands/extension.c:496 +#: commands/extension.c:498 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "\"%s\" 확장 모듈 제어 파일 열기 실패: %m" -#: commands/extension.c:518 commands/extension.c:528 +#: commands/extension.c:520 commands/extension.c:530 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "\"%s\" 매개 변수는 이차 확장 모듈 제어 파일에서는 사용할 수 없습니다." -#: commands/extension.c:550 commands/extension.c:558 utils/misc/guc.c:6520 +#: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 +#: utils/misc/guc.c:6749 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "\"%s\" 매개 변수의 값은 boolean 값이어야합니다." -#: commands/extension.c:567 +#: commands/extension.c:577 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\" 이름은 잘못된 인코딩 이름임" -#: commands/extension.c:581 +#: commands/extension.c:591 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "\"%s\" 매개 변수는 확장 모듈 이름 목록이어야 함" -#: commands/extension.c:588 +#: commands/extension.c:598 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "알 수 없는 \"%s\" 매개 변수가 \"%s\" 파일 안에 있습니다." -#: commands/extension.c:597 +#: commands/extension.c:607 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "" "\"relocatable\" 값이 true 인 경우 \"schema\" 매개 변수는 사용할 수 없습니다." -#: commands/extension.c:762 +#: commands/extension.c:785 #, c-format msgid "" "transaction control statements are not allowed within an extension script" msgstr "확장 모듈 스크립트 안에서는 트랜잭션 제어 구문은 사용할 수 없습니다." -#: commands/extension.c:808 +#: commands/extension.c:861 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "\"%s\" 확장 모듈을 만들 권한이 없습니다" -#: commands/extension.c:810 +#: commands/extension.c:864 +#, c-format +msgid "" +"Must have CREATE privilege on current database to create this extension." +msgstr "" +"이 확장 모듈을 설치하려면 현재 데이터베이스에 대해서 CREATE 권한이 있어야합니다." + +#: commands/extension.c:865 #, c-format msgid "Must be superuser to create this extension." msgstr "확장 모듈은 슈퍼유저만 만들 수 있습니다." -#: commands/extension.c:814 +#: commands/extension.c:869 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "\"%s\" 확장 모듈을 업데이트할 권한이 없습니다." -#: commands/extension.c:816 +#: commands/extension.c:872 +#, c-format +msgid "" +"Must have CREATE privilege on current database to update this extension." +msgstr "" +"이 확장 모듈을 업데이트 하려면 현재 데이터베이스에 대해서 CREATE 권한이 있어야합니다." + +#: commands/extension.c:873 #, c-format msgid "Must be superuser to update this extension." msgstr "슈퍼유저만 해당 모듈을 업데이트 할 수 있습니다." -#: commands/extension.c:1100 +#: commands/extension.c:1200 #, c-format msgid "" "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" @@ -7466,17 +7655,12 @@ msgstr "" "\"%s\" 확장 모듈을 \"%s\" 버전에서 \"%s\" 버전으로 업데이트할 방법이 없습니" "다." -#: commands/extension.c:1307 commands/extension.c:2979 +#: commands/extension.c:1408 commands/extension.c:3074 #, c-format msgid "version to install must be specified" msgstr "설치할 버전을 지정해야 합니다." -#: commands/extension.c:1329 -#, c-format -msgid "FROM version must be different from installation target version \"%s\"" -msgstr "FROM 절에 지정한 버전은 설치된 \"%s\" 버전과 달라야 합니다" - -#: commands/extension.c:1394 +#: commands/extension.c:1445 #, c-format msgid "" "extension \"%s\" has no installation script nor update path for version \"%s" @@ -7484,98 +7668,98 @@ msgid "" msgstr "" "\"%s\" 확장 모듈에는 \"%s\" 버전용 설치나 업데이트 스크립트가 없습니다." -#: commands/extension.c:1429 +#: commands/extension.c:1479 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "\"%s\" 확장 모듈은 \"%s\" 스키마 안에 설치되어야 합니다." -#: commands/extension.c:1589 +#: commands/extension.c:1639 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "\"%s\" 확장 모듈과 \"%s\" 확장 모듈이 서로 의존 관계입니다" -#: commands/extension.c:1594 +#: commands/extension.c:1644 #, c-format msgid "installing required extension \"%s\"" msgstr "\"%s\" 확장 모듈이 필요해서 실치 하는 중" -#: commands/extension.c:1618 +#: commands/extension.c:1667 #, c-format msgid "required extension \"%s\" is not installed" msgstr "\"%s\" 확장 모듈이 필요한데, 설치되어 있지 않습니다." -#: commands/extension.c:1621 +#: commands/extension.c:1670 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "" "필요한 모듈을 함께 설치하려면, CREATE EXTENSION ... CASCADE 구문을 사용하세" "요." -#: commands/extension.c:1658 +#: commands/extension.c:1705 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "\"%s\" 확장 모듈이 이미 있음, 건너뜀" -#: commands/extension.c:1665 +#: commands/extension.c:1712 #, c-format msgid "extension \"%s\" already exists" msgstr "\"%s\" 이름의 확장 모듈이 이미 있습니다" -#: commands/extension.c:1676 +#: commands/extension.c:1723 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "중첩된 CREATE EXTENSION 구문은 지원하지 않습니다." -#: commands/extension.c:1860 +#: commands/extension.c:1896 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "%s 의존개체들은 시스템 개체이기 때문에 삭제 될 수 없습니다" -#: commands/extension.c:2362 +#: commands/extension.c:2457 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "" "%s 함수는 CREATE EXTENSION 명령에서 내부적으로 사용하는 SQL 스크립트 내에서" "만 사용할 수 있습니다." -#: commands/extension.c:2374 +#: commands/extension.c:2469 #, c-format msgid "OID %u does not refer to a table" msgstr "%u OID 자료가 테이블에 없습니다" -#: commands/extension.c:2379 +#: commands/extension.c:2474 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "\"%s\" 테이블은 만들려고 하는 확장 모듈의 구성 요소가 아닙니다." -#: commands/extension.c:2733 +#: commands/extension.c:2828 #, c-format msgid "" "cannot move extension \"%s\" into schema \"%s\" because the extension " "contains the schema" msgstr "\"%s\" 확장 모듈이 \"%s\" 스키마에 이미 있어 옮길 수 없습니다." -#: commands/extension.c:2774 commands/extension.c:2837 +#: commands/extension.c:2869 commands/extension.c:2932 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "\"%s\" 확장 모듈은 SET SCHEMA 구문을 지원하지 않음" -#: commands/extension.c:2839 +#: commands/extension.c:2934 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "%s 개체가 확장 모듈 스키마인 \"%s\" 안에 없음" -#: commands/extension.c:2898 +#: commands/extension.c:2993 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "중첩된 ALTER EXTENSION 구문을 지원하지 않음" -#: commands/extension.c:2990 +#: commands/extension.c:3085 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "\"%s\" 버전의 \"%s\" 확장 모듈이 이미 설치 되어 있음" -#: commands/extension.c:3241 +#: commands/extension.c:3336 #, c-format msgid "" "cannot add schema \"%s\" to extension \"%s\" because the schema contains the " @@ -7584,67 +7768,67 @@ msgstr "" "\"%s\" 스키마에 \"%s\" 확장 모듈을 추가할 수 없음, 이미 해당 스키마 안에 포" "함되어 있음" -#: commands/extension.c:3269 +#: commands/extension.c:3364 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "\"%s\" 개체는 \"%s\" 확장 모듈의 구성 요소가 아닙니다" -#: commands/extension.c:3335 +#: commands/extension.c:3430 #, c-format msgid "file \"%s\" is too large" msgstr "\"%s\" 파일이 너무 큽니다." -#: commands/foreigncmds.c:151 commands/foreigncmds.c:160 +#: commands/foreigncmds.c:148 commands/foreigncmds.c:157 #, c-format msgid "option \"%s\" not found" msgstr "\"%s\" 옵션을 찾을 수 없음" -#: commands/foreigncmds.c:170 +#: commands/foreigncmds.c:167 #, c-format msgid "option \"%s\" provided more than once" msgstr "\"%s\" 옵션이 여러 번 제공되었음" -#: commands/foreigncmds.c:224 commands/foreigncmds.c:232 +#: commands/foreigncmds.c:221 commands/foreigncmds.c:229 #, c-format msgid "permission denied to change owner of foreign-data wrapper \"%s\"" msgstr "\"%s\" 외부 자료 래퍼의 소유주를 변경할 권한이 없음" -#: commands/foreigncmds.c:226 +#: commands/foreigncmds.c:223 #, c-format msgid "Must be superuser to change owner of a foreign-data wrapper." msgstr "슈퍼유저만 외부 자료 래퍼의 소유주를 바꿀 수 있습니다." -#: commands/foreigncmds.c:234 +#: commands/foreigncmds.c:231 #, c-format msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "외부 자료 래퍼의 소유주는 슈퍼유저여야 합니다." -#: commands/foreigncmds.c:294 commands/foreigncmds.c:715 foreign/foreign.c:701 +#: commands/foreigncmds.c:291 commands/foreigncmds.c:711 foreign/foreign.c:701 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "\"%s\" 외부 자료 래퍼가 없음" -#: commands/foreigncmds.c:588 +#: commands/foreigncmds.c:584 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "\"%s\" 외부 자료 래퍼를 만들 권한이 없음" -#: commands/foreigncmds.c:590 +#: commands/foreigncmds.c:586 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "슈퍼유저만 외부 자료 래퍼를 만들 수 있습니다." -#: commands/foreigncmds.c:705 +#: commands/foreigncmds.c:701 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "\"%s\" 외부 자료 래퍼를 변경할 권한이 없음" -#: commands/foreigncmds.c:707 +#: commands/foreigncmds.c:703 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "슈퍼유저만 외부 자료 래퍼를 변경할 수 있습니다." -#: commands/foreigncmds.c:738 +#: commands/foreigncmds.c:734 #, c-format msgid "" "changing the foreign-data wrapper handler can change behavior of existing " @@ -7653,7 +7837,7 @@ msgstr "" "외부 자료 랩퍼 핸들러를 바꾸면, 그것을 사용하는 외부 테이블의 내용이 바뀔 수 " "있습니다." -#: commands/foreigncmds.c:753 +#: commands/foreigncmds.c:749 #, c-format msgid "" "changing the foreign-data wrapper validator can cause the options for " @@ -7662,247 +7846,247 @@ msgstr "" "외부 자료 래퍼 유효성 검사기를 바꾸면 종속 개체에 대한 옵션이 유효하지 않을 " "수 있음" -#: commands/foreigncmds.c:899 +#: commands/foreigncmds.c:895 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "\"%s\" 이름의 외부 서버가 이미 있음, 건너뜀" -#: commands/foreigncmds.c:1187 +#: commands/foreigncmds.c:1183 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "\"%s\" 사용자 매핑이 \"%s\" 서버용으로 이미 있음, 건너뜀" -#: commands/foreigncmds.c:1197 +#: commands/foreigncmds.c:1193 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "\"%s\" 사용자 매핑이 \"%s\" 서버용으로 이미 있음" -#: commands/foreigncmds.c:1297 commands/foreigncmds.c:1414 +#: commands/foreigncmds.c:1293 commands/foreigncmds.c:1413 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "\"%s\" 사용자 매핑이 \"%s\" 서버용으로 없음" -#: commands/foreigncmds.c:1419 +#: commands/foreigncmds.c:1418 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "\"%s\" 사용자 매핑이 \"%s\" 서버용으로 없음, 건너뜀" -#: commands/foreigncmds.c:1570 foreign/foreign.c:389 +#: commands/foreigncmds.c:1569 foreign/foreign.c:389 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "\"%s\" 외부 자료 래퍼용 핸들러가 없음" -#: commands/foreigncmds.c:1576 +#: commands/foreigncmds.c:1575 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "\"%s\" 외부 자료 래퍼는 IMPORT FOREIGN SCHEMA 구문을 지원하지 않음" -#: commands/foreigncmds.c:1679 +#: commands/foreigncmds.c:1678 #, c-format msgid "importing foreign table \"%s\"" msgstr "\"%s\" 외부 테이블 가져 오는 중" -#: commands/functioncmds.c:103 +#: commands/functioncmds.c:104 #, c-format msgid "SQL function cannot return shell type %s" msgstr "SQL 함수는 shell type %s 리턴할 수 없음" -#: commands/functioncmds.c:108 +#: commands/functioncmds.c:109 #, c-format msgid "return type %s is only a shell" msgstr "_^_ %s 리턴 자료형은 하나의 shell만 있습니다" -#: commands/functioncmds.c:138 parser/parse_type.c:355 +#: commands/functioncmds.c:139 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "\"%s\" 셸 형식에 대해 형식 한정자를 지정할 수 없음" -#: commands/functioncmds.c:144 +#: commands/functioncmds.c:145 #, c-format msgid "type \"%s\" is not yet defined" msgstr "\"%s\" 자료형이 아직 정의되지 않았음" -#: commands/functioncmds.c:145 +#: commands/functioncmds.c:146 #, c-format msgid "Creating a shell type definition." msgstr "셸 타입 정의를 만들고 있습니다" -#: commands/functioncmds.c:237 +#: commands/functioncmds.c:238 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "SQL 함수는 셸 타입 %s 수용할 수 없음" -#: commands/functioncmds.c:243 +#: commands/functioncmds.c:244 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "집계 함수는 셸 타입 %s 수용할 수 없음" -#: commands/functioncmds.c:248 +#: commands/functioncmds.c:249 #, c-format msgid "argument type %s is only a shell" msgstr "%s 인자 자료형은 단지 셸입니다" -#: commands/functioncmds.c:258 +#: commands/functioncmds.c:259 #, c-format msgid "type %s does not exist" msgstr "%s 자료형 없음" -#: commands/functioncmds.c:272 +#: commands/functioncmds.c:273 #, c-format msgid "aggregates cannot accept set arguments" msgstr "집계 함수는 세트 인자를 입력 인자로 쓸 수 없음" -#: commands/functioncmds.c:276 +#: commands/functioncmds.c:277 #, c-format msgid "procedures cannot accept set arguments" msgstr "프로시져에서는 집합 인자를 입력 인자로 쓸 수 없음" -#: commands/functioncmds.c:280 +#: commands/functioncmds.c:281 #, c-format msgid "functions cannot accept set arguments" msgstr "함수는 세트 인자를 쓸 수 없음" -#: commands/functioncmds.c:288 +#: commands/functioncmds.c:289 #, c-format msgid "procedures cannot have OUT arguments" msgstr "프로시저는 OUT 인자를 쓸 수 없음" -#: commands/functioncmds.c:289 +#: commands/functioncmds.c:290 #, c-format msgid "INOUT arguments are permitted." msgstr "INOUT 인자가 허용됨" -#: commands/functioncmds.c:299 +#: commands/functioncmds.c:300 #, c-format msgid "VARIADIC parameter must be the last input parameter" msgstr "VARIADIC 매개 변수는 마지막 입력 매개 변수여야 함" -#: commands/functioncmds.c:329 +#: commands/functioncmds.c:331 #, c-format msgid "VARIADIC parameter must be an array" msgstr "VARIADIC 매개 변수는 배열이어야 함" -#: commands/functioncmds.c:369 +#: commands/functioncmds.c:371 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "\"%s\" 매개 변수가 여러 번 사용 됨" -#: commands/functioncmds.c:384 +#: commands/functioncmds.c:386 #, c-format msgid "only input parameters can have default values" msgstr "입력 매개 변수에서만 기본값을 사용할 수 있음" -#: commands/functioncmds.c:399 +#: commands/functioncmds.c:401 #, c-format msgid "cannot use table references in parameter default value" msgstr "입력 매개 변수 초기값으로 테이블 참조형은 사용할 수 없음" -#: commands/functioncmds.c:423 +#: commands/functioncmds.c:425 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "" "기본 값이 있는 입력 매개 변수 뒤에 오는 입력 매개 변수에도 기본 값이 있어야 " "함" -#: commands/functioncmds.c:575 commands/functioncmds.c:766 +#: commands/functioncmds.c:577 commands/functioncmds.c:768 #, c-format msgid "invalid attribute in procedure definition" msgstr "프로시져 정의에 잘못된 속성이 있음" -#: commands/functioncmds.c:671 +#: commands/functioncmds.c:673 #, c-format msgid "support function %s must return type %s" msgstr "%s support 함수는 %s 자료형을 반환해야 함" -#: commands/functioncmds.c:682 +#: commands/functioncmds.c:684 #, c-format msgid "must be superuser to specify a support function" msgstr "support 함수를 지정하려면 슈퍼유져여야합니다" -#: commands/functioncmds.c:798 +#: commands/functioncmds.c:800 #, c-format msgid "no function body specified" msgstr "함수 본문(body) 부분이 빠졌습니다" -#: commands/functioncmds.c:808 +#: commands/functioncmds.c:810 #, c-format msgid "no language specified" msgstr "처리할 프로시주얼 언어를 지정하지 않았습니다" -#: commands/functioncmds.c:833 commands/functioncmds.c:1317 +#: commands/functioncmds.c:835 commands/functioncmds.c:1319 #, c-format msgid "COST must be positive" msgstr "COST는 양수여야 함" -#: commands/functioncmds.c:841 commands/functioncmds.c:1325 +#: commands/functioncmds.c:843 commands/functioncmds.c:1327 #, c-format msgid "ROWS must be positive" msgstr "ROWS는 양수여야 함" -#: commands/functioncmds.c:895 +#: commands/functioncmds.c:897 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "\"%s\" 언어에는 하나의 AS 항목만 필요함" -#: commands/functioncmds.c:993 commands/functioncmds.c:2227 -#: commands/proclang.c:568 +#: commands/functioncmds.c:995 commands/functioncmds.c:2048 +#: commands/proclang.c:259 #, c-format msgid "language \"%s\" does not exist" msgstr "\"%s\" 프로시주얼 언어 없음" -#: commands/functioncmds.c:995 commands/functioncmds.c:2229 +#: commands/functioncmds.c:997 commands/functioncmds.c:2050 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "" "데이터베이스 내에서 프로시주얼 언어를 사용하려면 먼저 CREATE EXTENSION 명령으" "로 사용할 언어를 등록하세요." -#: commands/functioncmds.c:1030 commands/functioncmds.c:1309 +#: commands/functioncmds.c:1032 commands/functioncmds.c:1311 #, c-format msgid "only superuser can define a leakproof function" msgstr "슈퍼유저만 leakproof 함수를 만들 수 있습니다" -#: commands/functioncmds.c:1079 +#: commands/functioncmds.c:1081 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "OUT 매개 변수로 인해 함수 결과 형식은 %s이어야 함" -#: commands/functioncmds.c:1092 +#: commands/functioncmds.c:1094 #, c-format msgid "function result type must be specified" msgstr "함수의 리턴 자료형을 지정해야 합니다" -#: commands/functioncmds.c:1144 commands/functioncmds.c:1329 +#: commands/functioncmds.c:1146 commands/functioncmds.c:1331 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "함수에서 세트를 반환하지 않는 경우 ROWS를 적용할 수 없음" -#: commands/functioncmds.c:1521 +#: commands/functioncmds.c:1431 #, c-format msgid "source data type %s is a pseudo-type" msgstr "%s 원본 자료형이 의사자료형(pseudo-type) 입니다" -#: commands/functioncmds.c:1527 +#: commands/functioncmds.c:1437 #, c-format msgid "target data type %s is a pseudo-type" msgstr "%s 대상 자료형이 의사자료형(pseudo-type) 입니다" -#: commands/functioncmds.c:1551 +#: commands/functioncmds.c:1461 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "원본 자료형이 도메인이어서 자료형 변환을 무시합니다." -#: commands/functioncmds.c:1556 +#: commands/functioncmds.c:1466 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "대상 자료형이 도메인이어서 자료형 변환을 무시합니다." -#: commands/functioncmds.c:1581 +#: commands/functioncmds.c:1491 #, c-format msgid "cast function must take one to three arguments" msgstr "형변환 함수는 1-3개의 인자만 지정할 수 있습니다" -#: commands/functioncmds.c:1585 +#: commands/functioncmds.c:1495 #, c-format msgid "" "argument of cast function must match or be binary-coercible from source data " @@ -7911,17 +8095,17 @@ msgstr "" "형변환 함수의 인자로 쓸 자료형은 원본 자료형과 일치하거나 바이너리 차원으로 " "같은 자료형이어야 함" -#: commands/functioncmds.c:1589 +#: commands/functioncmds.c:1499 #, c-format msgid "second argument of cast function must be type %s" msgstr "형변화 함수의 두번째 인자 자료형은 반드시 %s 형이여야합니다" -#: commands/functioncmds.c:1594 +#: commands/functioncmds.c:1504 #, c-format msgid "third argument of cast function must be type %s" msgstr "형변화 함수의 세번째 인자 자료형은 반드시 %s 형이여야합니다" -#: commands/functioncmds.c:1599 +#: commands/functioncmds.c:1509 #, c-format msgid "" "return data type of cast function must match or be binary-coercible to " @@ -7930,322 +8114,318 @@ msgstr "" "형변환 함수의 반환 자료형은 대상 자료형과 일치하거나 바이너리 차원으로 같은 " "자료형이어야 함" -#: commands/functioncmds.c:1610 +#: commands/functioncmds.c:1520 #, c-format msgid "cast function must not be volatile" msgstr "형변환 함수는 volatile 특성이 없어야합니다" -#: commands/functioncmds.c:1615 +#: commands/functioncmds.c:1525 #, c-format msgid "cast function must be a normal function" msgstr "형변환 함수는 일반 함수여야 합니다" -#: commands/functioncmds.c:1619 +#: commands/functioncmds.c:1529 #, c-format msgid "cast function must not return a set" msgstr "형변환 함수는 세트(set)를 리턴할 수 없습니다" -#: commands/functioncmds.c:1645 +#: commands/functioncmds.c:1555 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "CREATE CAST ... WITHOUT FUNCTION 명령은 슈퍼유저만 실행할 수 있습니다" -#: commands/functioncmds.c:1660 +#: commands/functioncmds.c:1570 #, c-format msgid "source and target data types are not physically compatible" msgstr "원본 자료형과 대상 자료형이 서로 논리적인 호환성이 없습니다" -#: commands/functioncmds.c:1675 +#: commands/functioncmds.c:1585 #, c-format msgid "composite data types are not binary-compatible" msgstr "복합 자료형은 바이너리와 호환되지 않음" -#: commands/functioncmds.c:1681 +#: commands/functioncmds.c:1591 #, c-format msgid "enum data types are not binary-compatible" msgstr "열거 자료형은 바이너리와 호환되지 않음" -#: commands/functioncmds.c:1687 +#: commands/functioncmds.c:1597 #, c-format msgid "array data types are not binary-compatible" msgstr "배열 자료형은 바이너리와 호환되지 않음" -#: commands/functioncmds.c:1704 +#: commands/functioncmds.c:1614 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "도메인 자료형은 바이너리와 호환되지 않음" -#: commands/functioncmds.c:1714 +#: commands/functioncmds.c:1624 #, c-format msgid "source data type and target data type are the same" msgstr "원본 자료형과 대상 자료형의 형태가 같습니다" -#: commands/functioncmds.c:1747 -#, c-format -msgid "cast from type %s to type %s already exists" -msgstr "%s 형에서 %s 형으로 변환하는 형변환 규칙(cast)이 이미 있습니다" - -#: commands/functioncmds.c:1822 -#, c-format -msgid "cast from type %s to type %s does not exist" -msgstr "%s 형에서 %s 형으로 바꾸는 형변환 규칙(cast)가 없음" - -#: commands/functioncmds.c:1861 +#: commands/functioncmds.c:1682 #, c-format msgid "transform function must not be volatile" msgstr "형변환 함수는 volatile 특성이 없어야합니다" -#: commands/functioncmds.c:1865 +#: commands/functioncmds.c:1686 #, c-format msgid "transform function must be a normal function" msgstr "형변환 함수는 일반 함수여야합니다." -#: commands/functioncmds.c:1869 +#: commands/functioncmds.c:1690 #, c-format msgid "transform function must not return a set" msgstr "형변환 함수는 세트(set)를 리턴할 수 없습니다" -#: commands/functioncmds.c:1873 +#: commands/functioncmds.c:1694 #, c-format msgid "transform function must take one argument" msgstr "형변환 함수는 1개의 인자만 지정할 수 있습니다" -#: commands/functioncmds.c:1877 +#: commands/functioncmds.c:1698 #, c-format msgid "first argument of transform function must be type %s" msgstr "형변화 함수의 첫번째 인자 자료형은 반드시 %s 형이여야합니다" -#: commands/functioncmds.c:1915 +#: commands/functioncmds.c:1736 #, c-format msgid "data type %s is a pseudo-type" msgstr "%s 자료형은 의사자료형(pseudo-type) 입니다" -#: commands/functioncmds.c:1921 +#: commands/functioncmds.c:1742 #, c-format msgid "data type %s is a domain" msgstr "%s 자료형은 도메인입니다" -#: commands/functioncmds.c:1961 +#: commands/functioncmds.c:1782 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "FROM SQL 함수의 반환 자료형은 %s 형이어야 함" -#: commands/functioncmds.c:1987 +#: commands/functioncmds.c:1808 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "TO SQL 함수의 반환 자료형은 변환 자료형이어야 함" -#: commands/functioncmds.c:2016 +#: commands/functioncmds.c:1837 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "%s 자료형(대상 언어: \"%s\")을 위한 형변환 규칙은 이미 있습니다." -#: commands/functioncmds.c:2108 +#: commands/functioncmds.c:1929 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "%s 자료형(대상 언어: \"%s\")을 위한 형변환 규칙은 없습니다." -#: commands/functioncmds.c:2159 +#: commands/functioncmds.c:1980 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "%s 함수는 이미 \"%s\" 스키마안에 있습니다" -#: commands/functioncmds.c:2214 +#: commands/functioncmds.c:2035 #, c-format msgid "no inline code specified" msgstr "내장 코드가 빠졌습니다" -#: commands/functioncmds.c:2260 +#: commands/functioncmds.c:2081 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "\"%s\" 프로시주얼 언어는 내장 코드 실행 기능을 지원하지 않습니다" -#: commands/functioncmds.c:2372 +#: commands/functioncmds.c:2193 #, c-format msgid "cannot pass more than %d argument to a procedure" msgid_plural "cannot pass more than %d arguments to a procedure" msgstr[0] "프로시져에 %d개의 인자 이상을 전달할 수 없음" -#: commands/indexcmds.c:541 +#: commands/indexcmds.c:590 #, c-format msgid "must specify at least one column" msgstr "적어도 하나 이상의 칼럼을 지정해 주십시오" -#: commands/indexcmds.c:545 +#: commands/indexcmds.c:594 #, c-format msgid "cannot use more than %d columns in an index" msgstr "하나의 인덱스에서는 %d개보다 많은 칼럼을 사용할 수 없습니다" -#: commands/indexcmds.c:584 +#: commands/indexcmds.c:633 #, c-format msgid "cannot create index on foreign table \"%s\"" msgstr "\"%s\" 외부 테이블 대상으로 인덱스를 만들 수 없음" -#: commands/indexcmds.c:615 +#: commands/indexcmds.c:664 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "\"%s\" 파티션된 테이블 대상으로 동시에 인덱스를 만들 수 없음" -#: commands/indexcmds.c:620 +#: commands/indexcmds.c:669 #, c-format msgid "cannot create exclusion constraints on partitioned table \"%s\"" msgstr "\"%s\" 파티션된 테이블 대상으로 제외 제약조건을 만들 수 없음" -#: commands/indexcmds.c:630 +#: commands/indexcmds.c:679 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "다른 세션의 임시 테이블에 인덱스를 만들 수는 없습니다" -#: commands/indexcmds.c:668 commands/tablecmds.c:679 commands/tablespace.c:1174 +#: commands/indexcmds.c:717 commands/tablecmds.c:704 commands/tablespace.c:1173 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "파티션 테이블용 기본 테이블스페이스를 지정할 수 없습니다." -#: commands/indexcmds.c:700 commands/tablecmds.c:714 commands/tablecmds.c:12443 -#: commands/tablecmds.c:12555 +#: commands/indexcmds.c:749 commands/tablecmds.c:739 commands/tablecmds.c:13162 +#: commands/tablecmds.c:13276 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "공유 관계만 pg_global 테이블스페이스에 배치할 수 있음" -#: commands/indexcmds.c:733 +#: commands/indexcmds.c:782 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "사용하지 않는 \"rtree\" 방법을 \"gist\" 액세스 방법으로 대체하는 중" -#: commands/indexcmds.c:754 +#: commands/indexcmds.c:803 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "\"%s\" 인덱스 접근 방법은 고유 인덱스를 지원하지 않습니다" -#: commands/indexcmds.c:759 +#: commands/indexcmds.c:808 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "\"%s\" 인덱스 접근 방법은 포함된 칼럼을 지원하지 않습니다" -#: commands/indexcmds.c:764 +#: commands/indexcmds.c:813 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "\"%s\" 인덱스 접근 방법은 다중 열 인덱스를 지원하지 않습니다" -#: commands/indexcmds.c:769 +#: commands/indexcmds.c:818 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "\"%s\" 인덱스 접근 방법은 제외 제약 조건을 지원하지 않습니다" -#: commands/indexcmds.c:871 +#: commands/indexcmds.c:941 +#, c-format +msgid "cannot match partition key to an index using access method \"%s\"" +msgstr "\"%s\" 접근 방법을 사용하는 인덱스와 파티션 키가 일치하지 않습니다" + +#: commands/indexcmds.c:951 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "파티션 키 정의에는 %s 제약조건을 지원하지 않음" -#: commands/indexcmds.c:873 +#: commands/indexcmds.c:953 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "%s 제약조건은 파티션 키 포함 표현식에 사용할 수 없습니다" -#: commands/indexcmds.c:891 +#: commands/indexcmds.c:992 #, c-format -msgid "insufficient columns in %s constraint definition" -msgstr "%s 제약조건 정의에 불충분한 칼럼들" +msgid "" +"unique constraint on partitioned table must include all partitioning columns" +msgstr "하위 테이블 용 유니크 제약조건에는 모든 파티션 칼럼이 포함되어야 함" -#: commands/indexcmds.c:893 +#: commands/indexcmds.c:993 #, c-format msgid "" "%s constraint on table \"%s\" lacks column \"%s\" which is part of the " "partition key." msgstr "" -#: commands/indexcmds.c:912 commands/indexcmds.c:931 +#: commands/indexcmds.c:1012 commands/indexcmds.c:1031 #, c-format msgid "index creation on system columns is not supported" msgstr "시스템 카탈로그 테이블에 대한 인덱스 만들기는 지원하지 않습니다" -#: commands/indexcmds.c:956 +#: commands/indexcmds.c:1056 #, c-format msgid "%s %s will create implicit index \"%s\" for table \"%s\"" msgstr "%s %s 명령으로 \"%s\" 인덱스를 \"%s\" 테이블에 자동으로 만들었음" -#: commands/indexcmds.c:1098 tcop/utility.c:1359 +#: commands/indexcmds.c:1197 tcop/utility.c:1495 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "\"%s\" 파티션된 테이블 대상으로 유니크 인덱스를 만들 수 없음" -#: commands/indexcmds.c:1100 tcop/utility.c:1361 +#: commands/indexcmds.c:1199 tcop/utility.c:1497 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "\"%s\" 테이블은 하위 테이블로 외부 테이블을 사용함." -#: commands/indexcmds.c:1529 +#: commands/indexcmds.c:1628 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "" "인덱스 술어(predicate)에서 사용하는 함수는 IMMUTABLE 특성이 있어야합니다" -#: commands/indexcmds.c:1595 parser/parse_utilcmd.c:2307 -#: parser/parse_utilcmd.c:2441 +#: commands/indexcmds.c:1694 parser/parse_utilcmd.c:2440 +#: parser/parse_utilcmd.c:2575 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "키에서 지정한 \"%s\" 칼럼이 없습니다" -#: commands/indexcmds.c:1619 parser/parse_utilcmd.c:1633 +#: commands/indexcmds.c:1718 parser/parse_utilcmd.c:1776 #, c-format msgid "expressions are not supported in included columns" msgstr "포함된 칼럼에 쓰인 표현식을 지원하지 않음" -#: commands/indexcmds.c:1660 +#: commands/indexcmds.c:1759 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "인덱스 식(expression)에 사용하는 함수는 IMMUTABLE 특성이 있어야합니다" -#: commands/indexcmds.c:1675 +#: commands/indexcmds.c:1774 #, c-format msgid "including column does not support a collation" msgstr "포함된 칼럼은 문자정렬규칙을 지원하지 않음" -#: commands/indexcmds.c:1679 +#: commands/indexcmds.c:1778 #, c-format msgid "including column does not support an operator class" msgstr "포함된 칼럼은 연산자 클래스를 지원하지 않음" -#: commands/indexcmds.c:1683 +#: commands/indexcmds.c:1782 #, c-format msgid "including column does not support ASC/DESC options" msgstr "포함된 칼럼은 ASC/DESC 옵션을 지원하지 않음" -#: commands/indexcmds.c:1687 +#: commands/indexcmds.c:1786 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "포함된 칼럼은 NULLS FIRST/LAST 옵션을 지원하지 않음" -#: commands/indexcmds.c:1714 +#: commands/indexcmds.c:1813 #, c-format msgid "could not determine which collation to use for index expression" msgstr "해당 인덱스에서 사용할 정렬규칙(collation)을 결정할 수 없습니다." -#: commands/indexcmds.c:1722 commands/tablecmds.c:15338 commands/typecmds.c:837 -#: parser/parse_expr.c:2854 parser/parse_type.c:567 parser/parse_utilcmd.c:3514 -#: utils/adt/misc.c:490 +#: commands/indexcmds.c:1821 commands/tablecmds.c:16042 commands/typecmds.c:771 +#: parser/parse_expr.c:2850 parser/parse_type.c:566 parser/parse_utilcmd.c:3649 +#: parser/parse_utilcmd.c:4210 utils/adt/misc.c:503 #, c-format msgid "collations are not supported by type %s" msgstr "%s 자료형은 collation 지원 안함" -#: commands/indexcmds.c:1760 +#: commands/indexcmds.c:1859 #, c-format msgid "operator %s is not commutative" msgstr "%s 연산자는 교환법칙이 성립하지 않습니다" -#: commands/indexcmds.c:1762 +#: commands/indexcmds.c:1861 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "" "exclude 제약조건용 인덱스를 만들 때는 교환법칙이 성립하는 연산자만 사용할 수 " "있습니다." -#: commands/indexcmds.c:1788 +#: commands/indexcmds.c:1887 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "%s 연산자는 \"%s\" 연산자 패밀리 구성원이 아닙니다." -#: commands/indexcmds.c:1791 +#: commands/indexcmds.c:1890 #, c-format msgid "" "The exclusion operator must be related to the index operator class for the " @@ -8253,25 +8433,25 @@ msgid "" msgstr "" "제외 연산자는 해당 제약 조건용 인덱스 연산자 클래스의 소속이어야 합니다." -#: commands/indexcmds.c:1826 +#: commands/indexcmds.c:1925 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "\"%s\" 접근 방법은 ASC/DESC 옵션을 지원하지 않음" -#: commands/indexcmds.c:1831 +#: commands/indexcmds.c:1930 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "\"%s\" 접근 방법은 NULLS FIRST/LAST 옵션을 지원하지 않음" -#: commands/indexcmds.c:1891 commands/tablecmds.c:15363 -#: commands/tablecmds.c:15369 commands/typecmds.c:1981 +#: commands/indexcmds.c:1976 commands/tablecmds.c:16067 +#: commands/tablecmds.c:16073 commands/typecmds.c:1945 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "" "%s 자료형은 \"%s\" 인덱스 액세스 방법을 위한 기본 연산자 클래스(operator " "class)가 없습니다. " -#: commands/indexcmds.c:1893 +#: commands/indexcmds.c:1978 #, c-format msgid "" "You must specify an operator class for the index or define a default " @@ -8280,63 +8460,63 @@ msgstr "" "이 인덱스를 위한 연산자 클래스를 지정하거나 먼저 이 자료형을 위한 기본 연산" "자 클래스를 정의해 두어야합니다" -#: commands/indexcmds.c:1922 commands/indexcmds.c:1930 +#: commands/indexcmds.c:2007 commands/indexcmds.c:2015 #: commands/opclasscmds.c:208 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "" "\"%s\" 연산자 클래스는 \"%s\" 인덱스 액세스 방법에서 사용할 수 없습니다" -#: commands/indexcmds.c:1944 commands/typecmds.c:1969 +#: commands/indexcmds.c:2029 commands/typecmds.c:1933 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "\"%s\" 연산자 클래스는 %s 자료형을 사용할 수 없습니다" -#: commands/indexcmds.c:2034 +#: commands/indexcmds.c:2119 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "%s 자료형을 위한 기본 연산자 클래스가 여러개 있습니다" -#: commands/indexcmds.c:2483 +#: commands/indexcmds.c:2568 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" -msgstr "" +msgstr "\"%s\" 테이블에는 잠금 없는 재색인 작업을 할 대상 인덱스가 없음" -#: commands/indexcmds.c:2494 +#: commands/indexcmds.c:2579 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "\"%s\" 테이블에는 재색인 작업을 할 인덱스가 없습니다" -#: commands/indexcmds.c:2533 commands/indexcmds.c:2807 -#: commands/indexcmds.c:2900 +#: commands/indexcmds.c:2618 commands/indexcmds.c:2899 +#: commands/indexcmds.c:2992 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "시스템 카탈로그 테이블 대상으로 잠금 없는 인덱스를 만들 수 없음" -#: commands/indexcmds.c:2556 +#: commands/indexcmds.c:2641 #, c-format msgid "can only reindex the currently open database" msgstr "열려있는 현재 데이터베이스에서만 reindex 명령을 사용할 수 있습니다" -#: commands/indexcmds.c:2647 +#: commands/indexcmds.c:2732 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "" "시스템 카탈로그 테이블 대상으로 잠금 없는 재색인 작업을 할 수 없음, 모두 건너" "뜀" -#: commands/indexcmds.c:2699 commands/indexcmds.c:3370 +#: commands/indexcmds.c:2784 commands/indexcmds.c:3503 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "\"%s.%s\" 테이블의 인덱스들을 다시 만들었습니다." -#: commands/indexcmds.c:2822 commands/indexcmds.c:2868 +#: commands/indexcmds.c:2914 commands/indexcmds.c:2960 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "" "유효하지 않은 \"%s.%s\" 인덱스는 잠금 없는 재색인 작업을 할 수 없음, 건너뜀" -#: commands/indexcmds.c:2828 +#: commands/indexcmds.c:2920 #, c-format msgid "" "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" @@ -8344,29 +8524,35 @@ msgstr "" "\"%s.%s\" exclusion 제약조건을 대상으로 잠금 없는 재색인 작업을 할 수 없음, " "건너뜀" -#: commands/indexcmds.c:2928 +#: commands/indexcmds.c:3002 +#, c-format +msgid "cannot reindex invalid index on TOAST table concurrently" +msgstr "" +"TOAST 테이블에 지정된 유효하지 않은 인덱스는 잠금 없는 재색인 작업을 할 수 없음" + +#: commands/indexcmds.c:3030 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "해당 개체에 대해서는 잠금 없는 재색인 작업을 할 수 없음" -#: commands/indexcmds.c:3352 commands/indexcmds.c:3363 +#: commands/indexcmds.c:3485 commands/indexcmds.c:3496 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "\"%s.%s\" 인덱스가 다시 만들어졌음" -#: commands/indexcmds.c:3395 +#: commands/indexcmds.c:3528 #, c-format msgid "REINDEX is not yet implemented for partitioned indexes" msgstr "파티션 된 인덱스용 REINDEX 명령은 아직 구현되어 있지 않음" -#: commands/lockcmds.c:102 commands/tablecmds.c:5232 commands/trigger.c:313 +#: commands/lockcmds.c:91 commands/tablecmds.c:5629 commands/trigger.c:295 #: rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:928 #, c-format msgid "\"%s\" is not a table or view" msgstr "\"%s\" 개체는 테이블도 뷰도 아닙니다" -#: commands/lockcmds.c:235 rewrite/rewriteHandler.c:1975 -#: rewrite/rewriteHandler.c:3778 +#: commands/lockcmds.c:213 rewrite/rewriteHandler.c:1977 +#: rewrite/rewriteHandler.c:3782 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "" @@ -8398,7 +8584,7 @@ msgstr "" "구체화된 뷰의 하나 또는 하나 이상의 칼럼에 대한 WHERE 절 없는 고유 인덱스를 " "만드세요." -#: commands/matview.c:645 +#: commands/matview.c:641 #, c-format msgid "" "new data for materialized view \"%s\" contains duplicate rows without any " @@ -8407,7 +8593,7 @@ msgstr "" "\"%s\" 구체화된 뷰의 새 자료에 아무런 null 칼럼 없이 중복된 로우를 포함하고 " "있습니다" -#: commands/matview.c:647 +#: commands/matview.c:643 #, c-format msgid "Row: %s" msgstr "로우: %s" @@ -8422,176 +8608,215 @@ msgstr "\"%s\" 연산자 없음, 해당 접근 방법: \"%s\"" msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "\"%s\" 연산자 패밀리가 이미 있음, 해당 접근 방법: \"%s\"" -#: commands/opclasscmds.c:412 +#: commands/opclasscmds.c:414 #, c-format msgid "must be superuser to create an operator class" msgstr "연산자 클래스는 슈퍼유저만 만들 수 있습니다" -#: commands/opclasscmds.c:485 commands/opclasscmds.c:864 -#: commands/opclasscmds.c:988 +#: commands/opclasscmds.c:487 commands/opclasscmds.c:869 +#: commands/opclasscmds.c:993 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "잘못된 연산자 번호: %d, 타당한 번호는 1부터 %d까지 입니다" -#: commands/opclasscmds.c:529 commands/opclasscmds.c:908 -#: commands/opclasscmds.c:1003 +#: commands/opclasscmds.c:531 commands/opclasscmds.c:913 +#: commands/opclasscmds.c:1008 #, c-format msgid "invalid function number %d, must be between 1 and %d" msgstr "잘못된 함수 번호: %d, 타당한 번호는 1부터 %d까지 입니다" -#: commands/opclasscmds.c:558 +#: commands/opclasscmds.c:559 #, c-format msgid "storage type specified more than once" msgstr "저장 방법이 중복되었습니다" -#: commands/opclasscmds.c:585 +#: commands/opclasscmds.c:586 #, c-format msgid "" "storage type cannot be different from data type for access method \"%s\"" msgstr "스토리지 자료형은 \"%s\" 접근 방법의 자료형과 같아야 합니다." -#: commands/opclasscmds.c:601 +#: commands/opclasscmds.c:602 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "\"%s\" 연산자 클래스에는 이미 \"%s\" 액세스 방법이 사용되고 있습니다" -#: commands/opclasscmds.c:629 +#: commands/opclasscmds.c:630 #, c-format msgid "could not make operator class \"%s\" be default for type %s" msgstr "\"%s\" 연산자 클래스를 %s 자료형의 기본값으로 지정할 수 없습니다" -#: commands/opclasscmds.c:632 +#: commands/opclasscmds.c:633 #, c-format msgid "Operator class \"%s\" already is the default." msgstr "\"%s\" 연산자 클래스는 이미 기본 연산자 클래스입니다" -#: commands/opclasscmds.c:760 +#: commands/opclasscmds.c:761 #, c-format msgid "must be superuser to create an operator family" msgstr "슈퍼유저만 연산자 패밀리를 만들 수 있음" -#: commands/opclasscmds.c:818 +#: commands/opclasscmds.c:821 #, c-format msgid "must be superuser to alter an operator family" msgstr "슈퍼유저만 연산자 패밀리를 변경할 수 있음" -#: commands/opclasscmds.c:873 +#: commands/opclasscmds.c:878 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "연산자 인자 형식이 ALTER OPERATOR FAMILY에 지정되어 있어야 함" -#: commands/opclasscmds.c:936 +#: commands/opclasscmds.c:941 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "ALTER OPERATOR FAMILY에서 STORAGE를 지정할 수 없음" -#: commands/opclasscmds.c:1058 +#: commands/opclasscmds.c:1063 #, c-format msgid "one or two argument types must be specified" msgstr "한두 개의 인자 형식을 지정해야 함" -#: commands/opclasscmds.c:1084 +#: commands/opclasscmds.c:1089 #, c-format msgid "index operators must be binary" msgstr "인덱스 연산자는 바이너리여야 함" -#: commands/opclasscmds.c:1103 +#: commands/opclasscmds.c:1108 #, c-format msgid "access method \"%s\" does not support ordering operators" msgstr "\"%s\" 접근 방법은 정렬 작업을 지원하지 않음" -#: commands/opclasscmds.c:1114 +#: commands/opclasscmds.c:1119 #, c-format msgid "index search operators must return boolean" msgstr "인덱스 검색 연산자는 부울형을 반환해야 함" -#: commands/opclasscmds.c:1158 +#: commands/opclasscmds.c:1159 +#, c-format +msgid "" +"associated data types for operator class options parsing functions must " +"match opclass input type" +msgstr "" + +#: commands/opclasscmds.c:1166 +#, c-format +msgid "" +"left and right associated data types for operator class options parsing " +"functions must match" +msgstr "" + +#: commands/opclasscmds.c:1174 +#, c-format +msgid "invalid operator class options parsing function" +msgstr "잘못된 연산자 클래스 옵션 구문 분석 함수" + +#: commands/opclasscmds.c:1175 +#, c-format +msgid "Valid signature of operator class options parsing function is %s." +msgstr "바른 연산자 클래스 옵션 구문 분석 함수는 %s." + +#: commands/opclasscmds.c:1194 #, c-format msgid "btree comparison functions must have two arguments" msgstr "btree 비교 함수는 두 개의 인자가 있어야 함" -#: commands/opclasscmds.c:1162 +#: commands/opclasscmds.c:1198 #, c-format msgid "btree comparison functions must return integer" msgstr "btree 비교 함수는 반드시 integer 자료형을 반환해야 함" -#: commands/opclasscmds.c:1179 +#: commands/opclasscmds.c:1215 #, c-format msgid "btree sort support functions must accept type \"internal\"" msgstr "" "btree 정렬 지원 함수는 반드시 \"internal\" 자료형 입력 인자로 사용해야함" -#: commands/opclasscmds.c:1183 +#: commands/opclasscmds.c:1219 #, c-format msgid "btree sort support functions must return void" msgstr "btree 정렬 지원 함수는 반드시 void 값을 반환해야 함" -#: commands/opclasscmds.c:1194 +#: commands/opclasscmds.c:1230 #, c-format msgid "btree in_range functions must have five arguments" msgstr "btree in_range 함수는 다섯개의 인자가 필요합니다" -#: commands/opclasscmds.c:1198 +#: commands/opclasscmds.c:1234 #, c-format msgid "btree in_range functions must return boolean" msgstr "btree in_range 함수는 boolean 자료형을 반환해야합니다" -#: commands/opclasscmds.c:1217 +#: commands/opclasscmds.c:1250 +#, c-format +msgid "btree equal image functions must have one argument" +msgstr "btree equal image 함수는 한 개의 인자가 필요합니다" + +#: commands/opclasscmds.c:1254 +#, c-format +msgid "btree equal image functions must return boolean" +msgstr "btree equal image 함수는 boolean 자료형을 반환해야합니다" + +#: commands/opclasscmds.c:1267 +#, c-format +msgid "btree equal image functions must not be cross-type" +msgstr "btree equal image 함수는 교차형(cross-type)이 아니여야 합니다" + +#: commands/opclasscmds.c:1277 #, c-format msgid "hash function 1 must have one argument" msgstr "해시 함수는 1개의 인자만 지정할 수 있습니다" -#: commands/opclasscmds.c:1221 +#: commands/opclasscmds.c:1281 #, c-format msgid "hash function 1 must return integer" msgstr "해시 프로시저는 정수를 반환해야 함" -#: commands/opclasscmds.c:1228 +#: commands/opclasscmds.c:1288 #, c-format msgid "hash function 2 must have two arguments" msgstr "해시 함수 2는 2개의 인자만 지정할 수 있습니다" -#: commands/opclasscmds.c:1232 +#: commands/opclasscmds.c:1292 #, c-format msgid "hash function 2 must return bigint" msgstr "해시 함수 2는 bigint형을 반환해야 함" -#: commands/opclasscmds.c:1257 +#: commands/opclasscmds.c:1317 #, c-format msgid "associated data types must be specified for index support function" msgstr "인덱스 지원 함수에 대해 관련 데이터 형식을 지정해야 함" -#: commands/opclasscmds.c:1282 +#: commands/opclasscmds.c:1342 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "함수 번호 %d이(가) (%s,%s)에 대해 여러 번 표시됨" -#: commands/opclasscmds.c:1289 +#: commands/opclasscmds.c:1349 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "연산자 번호 %d이(가) (%s,%s)에 대해 여러 번 표시됨" -#: commands/opclasscmds.c:1338 +#: commands/opclasscmds.c:1398 #, c-format msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "%d(%s,%s) 연산자가 \"%s\" 연산자 패밀리에 이미 있음" -#: commands/opclasscmds.c:1455 +#: commands/opclasscmds.c:1515 #, c-format msgid "function %d(%s,%s) already exists in operator family \"%s\"" msgstr "%d(%s,%s) 함수가 \"%s\" 연산자 패밀리에 이미 있음" -#: commands/opclasscmds.c:1546 +#: commands/opclasscmds.c:1606 #, c-format msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" msgstr "%d(%s,%s) 연산자가 \"%s\" 연산자 패밀리에 없음" -#: commands/opclasscmds.c:1586 +#: commands/opclasscmds.c:1646 #, c-format msgid "function %d(%s,%s) does not exist in operator family \"%s\"" msgstr "%d(%s,%s) 함수가 \"%s\" 연산자 패밀리에 없음" -#: commands/opclasscmds.c:1716 +#: commands/opclasscmds.c:1776 #, c-format msgid "" "operator class \"%s\" for access method \"%s\" already exists in schema \"%s" @@ -8600,55 +8825,60 @@ msgstr "" "\"%s\" 연산자 클래스(\"%s\" 액세스 방법을 사용하는)는 이미 \"%s\" 스키마 안" "에 있습니다" -#: commands/opclasscmds.c:1739 +#: commands/opclasscmds.c:1799 #, c-format msgid "" "operator family \"%s\" for access method \"%s\" already exists in schema \"%s" "\"" msgstr "\"%s\" 연산자 패밀리(접근 방법: \"%s\")가 \"%s\" 스키마에 이미 있음" -#: commands/operatorcmds.c:113 commands/operatorcmds.c:121 +#: commands/operatorcmds.c:111 commands/operatorcmds.c:119 #, c-format msgid "SETOF type not allowed for operator argument" msgstr "SETOF 형식은 연산자 인자에 허용되지 않음" -#: commands/operatorcmds.c:154 commands/operatorcmds.c:457 +#: commands/operatorcmds.c:152 commands/operatorcmds.c:467 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "\"%s\" 연산자 속성을 처리할 수 없음" -#: commands/operatorcmds.c:165 +#: commands/operatorcmds.c:163 #, c-format msgid "operator function must be specified" msgstr "자료형 함수를 지정하십시오" -#: commands/operatorcmds.c:176 +#: commands/operatorcmds.c:174 #, c-format msgid "at least one of leftarg or rightarg must be specified" msgstr "왼쪽 이나 오른쪽 중 적어도 하나의 인자는 지정해야 합니다" -#: commands/operatorcmds.c:280 +#: commands/operatorcmds.c:278 #, c-format msgid "restriction estimator function %s must return type %s" msgstr "%s 제한 예상 함수는 %s 자료형을 반환해야 함" -#: commands/operatorcmds.c:326 +#: commands/operatorcmds.c:321 +#, c-format +msgid "join estimator function %s has multiple matches" +msgstr "%s 조인 예상 함수가 여러개 있습니다" + +#: commands/operatorcmds.c:336 #, c-format msgid "join estimator function %s must return type %s" msgstr "%s 조인 예상 함수는 %s 자료형을 반환해야 함" -#: commands/operatorcmds.c:451 +#: commands/operatorcmds.c:461 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "\"%s\" 연산자 속성 바꿀 수 없음" -#: commands/policy.c:88 commands/policy.c:401 commands/policy.c:491 -#: commands/tablecmds.c:1470 commands/tablecmds.c:1952 -#: commands/tablecmds.c:2925 commands/tablecmds.c:5211 -#: commands/tablecmds.c:7732 commands/tablecmds.c:14925 -#: commands/tablecmds.c:14960 commands/trigger.c:319 commands/trigger.c:1544 -#: commands/trigger.c:1653 rewrite/rewriteDefine.c:277 -#: rewrite/rewriteDefine.c:933 +#: commands/policy.c:88 commands/policy.c:381 commands/policy.c:471 +#: commands/tablecmds.c:1512 commands/tablecmds.c:1994 +#: commands/tablecmds.c:3076 commands/tablecmds.c:5608 +#: commands/tablecmds.c:8395 commands/tablecmds.c:15632 +#: commands/tablecmds.c:15667 commands/trigger.c:301 commands/trigger.c:1206 +#: commands/trigger.c:1315 rewrite/rewriteDefine.c:277 +#: rewrite/rewriteDefine.c:933 rewrite/rewriteRemove.c:80 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "액세스 권한 없음: \"%s\" 시스템 카탈로그임" @@ -8663,181 +8893,165 @@ msgstr "PUBLIC 아닌 지정한 모든 롤 무시함" msgid "All roles are members of the PUBLIC role." msgstr "모든 롤이 PUBLIC 롤의 소속입니다." -#: commands/policy.c:515 +#: commands/policy.c:495 #, c-format msgid "role \"%s\" could not be removed from policy \"%s\" on \"%s\"" msgstr "\"%s\" 롤을 \"%s\" 정책 (대상 릴레이션: \"%s\")에서 삭제될 수 없음" -#: commands/policy.c:724 +#: commands/policy.c:704 #, c-format msgid "WITH CHECK cannot be applied to SELECT or DELETE" msgstr "WITH CHECK 옵션은 SELECT나 DELETE 작업에 적용 될 수 없음" -#: commands/policy.c:733 commands/policy.c:1038 +#: commands/policy.c:713 commands/policy.c:1018 #, c-format msgid "only WITH CHECK expression allowed for INSERT" msgstr "INSERT 구문에 대해서만 WITH CHECK 옵션을 허용합니다" -#: commands/policy.c:808 commands/policy.c:1260 +#: commands/policy.c:788 commands/policy.c:1241 #, c-format msgid "policy \"%s\" for table \"%s\" already exists" msgstr "\"%s\" 정책이 \"%s\" 테이블에 이미 지정되어있습니다" -#: commands/policy.c:1010 commands/policy.c:1288 commands/policy.c:1359 +#: commands/policy.c:990 commands/policy.c:1269 commands/policy.c:1340 #, c-format msgid "policy \"%s\" for table \"%s\" does not exist" msgstr "\"%s\" 정책이 \"%s\" 테이블에 없음" -#: commands/policy.c:1028 +#: commands/policy.c:1008 #, c-format msgid "only USING expression allowed for SELECT, DELETE" msgstr "USING 구문만 SELECT, DELETE 작업에 쓸 수 있음" -#: commands/portalcmds.c:58 commands/portalcmds.c:182 commands/portalcmds.c:234 +#: commands/portalcmds.c:59 commands/portalcmds.c:182 commands/portalcmds.c:233 #, c-format msgid "invalid cursor name: must not be empty" msgstr "잘못된 커서 이름: 비어있으면 안됩니다" -#: commands/portalcmds.c:190 commands/portalcmds.c:244 -#: executor/execCurrent.c:70 utils/adt/xml.c:2608 utils/adt/xml.c:2778 +#: commands/portalcmds.c:190 commands/portalcmds.c:243 +#: executor/execCurrent.c:70 utils/adt/xml.c:2594 utils/adt/xml.c:2764 #, c-format msgid "cursor \"%s\" does not exist" msgstr "\"%s\" 이름의 커서가 없음" -#: commands/prepare.c:75 +#: commands/prepare.c:76 #, c-format msgid "invalid statement name: must not be empty" msgstr "잘못된 명령문 이름: 비어있으면 안됩니다" -#: commands/prepare.c:141 parser/parse_param.c:304 tcop/postgres.c:1468 +#: commands/prepare.c:134 parser/parse_param.c:304 tcop/postgres.c:1498 #, c-format msgid "could not determine data type of parameter $%d" msgstr "$%d 매개 변수의 자료형을 알수가 없습니다." -#: commands/prepare.c:159 +#: commands/prepare.c:152 #, c-format msgid "utility statements cannot be prepared" msgstr "utility 명령문들은 미리 준비할 수 없습니다" -#: commands/prepare.c:269 commands/prepare.c:274 +#: commands/prepare.c:256 commands/prepare.c:261 #, c-format msgid "prepared statement is not a SELECT" msgstr "준비된 명령문이 SELECT 구문이 아닙니다." -#: commands/prepare.c:342 +#: commands/prepare.c:328 #, c-format msgid "wrong number of parameters for prepared statement \"%s\"" msgstr "prepared statement \"%s\"에 매개 변수 수가 틀렸습니다" -#: commands/prepare.c:344 +#: commands/prepare.c:330 #, c-format msgid "Expected %d parameters but got %d." -msgstr "%d 개의 매개 변수가 요구되는데 %d 개만이 존재합니다" - -#: commands/prepare.c:380 -#, c-format -msgid "parameter $%d of type %s cannot be coerced to the expected type %s" -msgstr "??? parameter $%d of type %s 는 expected type %s 로 강요할 수 없다" - -#: commands/prepare.c:465 -#, c-format -msgid "prepared statement \"%s\" already exists" -msgstr "\"%s\" 이름의 준비된 명령문(prepared statement)이 이미 있습니다" - -#: commands/prepare.c:504 -#, c-format -msgid "prepared statement \"%s\" does not exist" -msgstr "\"%s\" 이름의 준비된 명령문(prepared statement) 없음" - -#: commands/proclang.c:85 -#, c-format -msgid "using pg_pltemplate information instead of CREATE LANGUAGE parameters" -msgstr "CREATE LANGUAGE 의 매개 변수 대신에 pg_pltemplate 정보를 이용하세요" +msgstr "%d 개의 매개 변수가 요구되는데 %d 개만이 존재합니다" -#: commands/proclang.c:95 +#: commands/prepare.c:363 #, c-format -msgid "must be superuser to create procedural language \"%s\"" -msgstr "슈퍼유저만 \"%s\" 프로시저 언어를 만들 수 있음" +msgid "parameter $%d of type %s cannot be coerced to the expected type %s" +msgstr "??? parameter $%d of type %s 는 expected type %s 로 강요할 수 없다" -#: commands/proclang.c:250 +#: commands/prepare.c:449 #, c-format -msgid "unsupported language \"%s\"" -msgstr "지원하지 않는 프로시저 언어 \"%s\"" +msgid "prepared statement \"%s\" already exists" +msgstr "\"%s\" 이름의 준비된 명령문(prepared statement)이 이미 있습니다" -#: commands/proclang.c:252 +#: commands/prepare.c:488 #, c-format -msgid "The supported languages are listed in the pg_pltemplate system catalog." -msgstr "지원하는 언어 목록은 pg_pltemplate 시스템 카탈로그에 있습니다." +msgid "prepared statement \"%s\" does not exist" +msgstr "\"%s\" 이름의 준비된 명령문(prepared statement) 없음" -#: commands/proclang.c:260 +#: commands/proclang.c:67 #, c-format msgid "must be superuser to create custom procedural language" msgstr "슈퍼유저만 사용자 지정 프로시저 언어를 만들 수 있음" -#: commands/proclang.c:279 commands/trigger.c:711 commands/typecmds.c:458 -#: commands/typecmds.c:475 -#, c-format -msgid "changing return type of function %s from %s to %s" -msgstr "%s 함수의 반환 자료형을 %s에서 %s 자료형으로 바꿉니다" - -#: commands/publicationcmds.c:108 +#: commands/publicationcmds.c:107 #, c-format msgid "invalid list syntax for \"publish\" option" msgstr "\"publish\" 옵션의 목록 문법이 잘못됨" -#: commands/publicationcmds.c:126 +#: commands/publicationcmds.c:125 #, c-format msgid "unrecognized \"publish\" value: \"%s\"" msgstr "알 수 없는 \"publish\" 값: \"%s\"" -#: commands/publicationcmds.c:132 +#: commands/publicationcmds.c:140 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "인식할 수 없는 발행 매개 변수: \"%s\"" -#: commands/publicationcmds.c:165 +#: commands/publicationcmds.c:172 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "FOR ALL TABLES 옵션의 발행을 만드려면 슈퍼유저여야만 합니다" -#: commands/publicationcmds.c:341 +#: commands/publicationcmds.c:248 +#, c-format +msgid "wal_level is insufficient to publish logical changes" +msgstr "wal_level 수준이 논리 변경 사항 발행을 하기에는 부족합니다" + +#: commands/publicationcmds.c:249 +#, c-format +msgid "Set wal_level to logical before creating subscriptions." +msgstr "wal_level 값을 logical로 바꾸고 구독을 만들세요" + +#: commands/publicationcmds.c:369 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "\"%s\" 발행은 FOR ALL TABLES 옵션으로 정의되어 있습니다." -#: commands/publicationcmds.c:343 +#: commands/publicationcmds.c:371 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "" "FOR ALL TABLES 발행에 새 테이블을 추가하거나 한 테이블을 뺄 수 없습니다." -#: commands/publicationcmds.c:648 +#: commands/publicationcmds.c:683 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "\"%s\" 릴레이션은 해당 발행에 포함되어 있지 않습니다" -#: commands/publicationcmds.c:691 +#: commands/publicationcmds.c:726 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "\"%s\" 발행의 소유주를 바꿀 권한이 없습니다" -#: commands/publicationcmds.c:693 +#: commands/publicationcmds.c:728 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "FOR ALL TABLES 옵션용 발행의 소유주는 슈퍼유저여야만 합니다" -#: commands/schemacmds.c:106 commands/schemacmds.c:282 +#: commands/schemacmds.c:105 commands/schemacmds.c:281 #, c-format msgid "unacceptable schema name \"%s\"" msgstr "\"%s\" 스키마 이름이 적당하지 못합니다" -#: commands/schemacmds.c:107 commands/schemacmds.c:283 +#: commands/schemacmds.c:106 commands/schemacmds.c:282 #, c-format msgid "The prefix \"pg_\" is reserved for system schemas." msgstr "" "\"pg_\" 문자로 시작하는 스키마는 시스템에서 사용하는 예약된 스키마입니다." -#: commands/schemacmds.c:121 +#: commands/schemacmds.c:120 #, c-format msgid "schema \"%s\" already exists, skipping" msgstr "\"%s\" 이름의 스키마(schema)가 이미 있음, 건너뜀" @@ -8978,43 +9192,43 @@ msgstr "시퀀스 및 이 시퀀스가 연결된 테이블이 같은 스키마 msgid "cannot change ownership of identity sequence" msgstr "식별 시퀀스의 소유주는 바꿀 수 없음" -#: commands/sequence.c:1718 commands/tablecmds.c:11827 -#: commands/tablecmds.c:14337 +#: commands/sequence.c:1718 commands/tablecmds.c:12544 +#: commands/tablecmds.c:15058 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "\"%s\" 시퀀스는 \"%s\" 테이블에 종속되어 있습니다." -#: commands/statscmds.c:101 commands/statscmds.c:110 +#: commands/statscmds.c:104 commands/statscmds.c:113 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "CREATE STATISTICS 명령에서는 하나의 릴레이션만 사용할 수 있음" -#: commands/statscmds.c:128 +#: commands/statscmds.c:131 #, c-format msgid "relation \"%s\" is not a table, foreign table, or materialized view" msgstr "\"%s\" 개체는 테이블도, 외부 테이블도, 구체화된 뷰도 아닙니다" -#: commands/statscmds.c:171 +#: commands/statscmds.c:174 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "\"%s\" 이름의 통계정보 개체가 이미 있습니다, 건너뜀" -#: commands/statscmds.c:179 +#: commands/statscmds.c:182 #, c-format msgid "statistics object \"%s\" already exists" msgstr "\"%s\" 이름의 통계정보 개체가 이미 있음" -#: commands/statscmds.c:201 commands/statscmds.c:207 +#: commands/statscmds.c:204 commands/statscmds.c:210 #, c-format msgid "only simple column references are allowed in CREATE STATISTICS" msgstr "CREATE STATISTICS 명령에서는 단순 칼럼 참조만 허용합니다." -#: commands/statscmds.c:222 +#: commands/statscmds.c:225 #, c-format msgid "statistics creation on system columns is not supported" msgstr "시스템 칼럼에 대한 통계정보 개체 만들기는 지원하지 않습니다" -#: commands/statscmds.c:229 +#: commands/statscmds.c:232 #, c-format msgid "" "column \"%s\" cannot be used in statistics because its type %s has no " @@ -9023,95 +9237,110 @@ msgstr "" "\"%s\" 칼럼은 사용자 통계정보 수집이 불가능합니다. %s 자료형은 기본 btree 연" "산자 클래스를 정의하지 않았습니다" -#: commands/statscmds.c:236 +#: commands/statscmds.c:239 #, c-format msgid "cannot have more than %d columns in statistics" msgstr "통계정보 개체에서는 %d개보다 많은 칼럼을 사용할 수 없습니다" -#: commands/statscmds.c:251 +#: commands/statscmds.c:254 #, c-format msgid "extended statistics require at least 2 columns" msgstr "확장된 통계정보는 두 개 이상의 칼럼이 필요합니다." -#: commands/statscmds.c:269 +#: commands/statscmds.c:272 #, c-format msgid "duplicate column name in statistics definition" msgstr "통계정보 정의에서 사용하는 칼럼이 중복되었습니다" -#: commands/statscmds.c:303 +#: commands/statscmds.c:306 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "알 수 없는 통계정보 종류 \"%s\"" -#: commands/subscriptioncmds.c:188 +#: commands/statscmds.c:444 commands/tablecmds.c:7416 +#, c-format +msgid "statistics target %d is too low" +msgstr "대상 통계값(%d)이 너무 낮습니다" + +#: commands/statscmds.c:452 commands/tablecmds.c:7424 +#, c-format +msgid "lowering statistics target to %d" +msgstr "%d 값으로 대상 통계값을 낮춥니다" + +#: commands/statscmds.c:475 +#, c-format +msgid "statistics object \"%s.%s\" does not exist, skipping" +msgstr "\"%s.%s\" 통계정보 개체 없음, 무시함" + +#: commands/subscriptioncmds.c:181 #, c-format msgid "unrecognized subscription parameter: \"%s\"" msgstr "알 수 없는 구독 매개 변수: \"%s\"" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:202 commands/subscriptioncmds.c:208 -#: commands/subscriptioncmds.c:214 commands/subscriptioncmds.c:233 -#: commands/subscriptioncmds.c:239 +#: commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:201 +#: commands/subscriptioncmds.c:207 commands/subscriptioncmds.c:226 +#: commands/subscriptioncmds.c:232 #, c-format msgid "%s and %s are mutually exclusive options" msgstr "%s 옵션과 %s 옵션은 함께 사용할 수 없음" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:246 commands/subscriptioncmds.c:252 +#: commands/subscriptioncmds.c:239 commands/subscriptioncmds.c:245 #, c-format msgid "subscription with %s must also set %s" msgstr "%s 구독하려면, %s 설정이 필요함" -#: commands/subscriptioncmds.c:294 +#: commands/subscriptioncmds.c:287 #, c-format msgid "publication name \"%s\" used more than once" msgstr "\"%s\" 발행 이름이 여러 번 사용 됨" -#: commands/subscriptioncmds.c:358 +#: commands/subscriptioncmds.c:351 #, c-format msgid "must be superuser to create subscriptions" msgstr "구독 만들기는 슈퍼유져 권한이 필요합니다" -#: commands/subscriptioncmds.c:450 commands/subscriptioncmds.c:543 -#: replication/logical/tablesync.c:846 replication/logical/worker.c:1737 +#: commands/subscriptioncmds.c:442 commands/subscriptioncmds.c:530 +#: replication/logical/tablesync.c:857 replication/logical/worker.c:2096 #, c-format msgid "could not connect to the publisher: %s" msgstr "발행 서버에 연결 할 수 없음: %s" -#: commands/subscriptioncmds.c:492 +#: commands/subscriptioncmds.c:484 #, c-format msgid "created replication slot \"%s\" on publisher" msgstr "\"%s\" 이름의 복제 슬롯이 없습니다" #. translator: %s is an SQL ALTER statement -#: commands/subscriptioncmds.c:510 +#: commands/subscriptioncmds.c:497 #, c-format msgid "" "tables were not subscribed, you will have to run %s to subscribe the tables" msgstr "" "구독하고 있는 테이블이 없습니다, %s 명령으로 테이블을 구독할 수 있습니다" -#: commands/subscriptioncmds.c:599 +#: commands/subscriptioncmds.c:586 #, c-format msgid "table \"%s.%s\" added to subscription \"%s\"" msgstr "\"%s.%s\" 테이블을 \"%s\" 구독에 추가했습니다" -#: commands/subscriptioncmds.c:623 +#: commands/subscriptioncmds.c:610 #, c-format msgid "table \"%s.%s\" removed from subscription \"%s\"" msgstr "\"%s.%s\" 테이블을 \"%s\" 구독에서 삭제했습니다" -#: commands/subscriptioncmds.c:695 +#: commands/subscriptioncmds.c:682 #, c-format msgid "cannot set %s for enabled subscription" msgstr "구독 활성화를 위해서는 %s 설정은 할 수 없음" -#: commands/subscriptioncmds.c:730 +#: commands/subscriptioncmds.c:717 #, c-format msgid "cannot enable subscription that does not have a slot name" msgstr "슬롯 이름 없이는 구독을 활성화 할 수 없음" -#: commands/subscriptioncmds.c:776 +#: commands/subscriptioncmds.c:763 #, c-format msgid "" "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" @@ -9119,12 +9348,14 @@ msgstr "" "비활성화 상태인 구독에 대해서는 ALTER SUBSCRIPTION 명령으로 갱신할 수 없습니" "다" -#: commands/subscriptioncmds.c:777 +#: commands/subscriptioncmds.c:764 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgstr "" +"ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false) 명령을 " +"사용하세요." -#: commands/subscriptioncmds.c:795 +#: commands/subscriptioncmds.c:782 #, c-format msgid "" "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" @@ -9132,207 +9363,212 @@ msgstr "" "비활성화 상태인 구독에 대해서는 ALTER SUBSCRIPTION ... REFRESH 명령을 허용하" "지 않습니다." -#: commands/subscriptioncmds.c:875 +#: commands/subscriptioncmds.c:862 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "\"%s\" 구독 없음, 건너뜀" -#: commands/subscriptioncmds.c:1001 +#: commands/subscriptioncmds.c:987 #, c-format msgid "" "could not connect to publisher when attempting to drop the replication slot " "\"%s\"" -msgstr "" +msgstr "\"%s\" 복제 슬롯을 삭제하는 중에는 발행 서버로 접속할 수 없음" -#: commands/subscriptioncmds.c:1003 commands/subscriptioncmds.c:1018 -#: replication/logical/tablesync.c:895 replication/logical/tablesync.c:917 +#: commands/subscriptioncmds.c:989 commands/subscriptioncmds.c:1004 +#: replication/logical/tablesync.c:906 replication/logical/tablesync.c:928 #, c-format msgid "The error was: %s" msgstr "해당 오류: %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1005 +#: commands/subscriptioncmds.c:991 #, c-format msgid "Use %s to disassociate the subscription from the slot." msgstr "구독과 슬롯을 분리할 때는 %s 명령을 사용하세요." -#: commands/subscriptioncmds.c:1016 +#: commands/subscriptioncmds.c:1002 #, c-format msgid "could not drop the replication slot \"%s\" on publisher" msgstr "발행용 \"%s\" 복제 슬롯을 삭제 할 수 없음" -#: commands/subscriptioncmds.c:1021 +#: commands/subscriptioncmds.c:1007 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "발행에서 \"%s\" 복제 슬롯을 삭제했음" -#: commands/subscriptioncmds.c:1062 +#: commands/subscriptioncmds.c:1044 #, c-format msgid "permission denied to change owner of subscription \"%s\"" msgstr "\"%s\" 구독 소유주를 변경할 권한이 없음" -#: commands/subscriptioncmds.c:1064 +#: commands/subscriptioncmds.c:1046 #, c-format msgid "The owner of a subscription must be a superuser." msgstr "구독 소유주는 슈퍼유저여야 합니다." -#: commands/subscriptioncmds.c:1179 +#: commands/subscriptioncmds.c:1161 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "구독에서 복제 테이블 목록을 구할 수 없음: %s" -#: commands/tablecmds.c:224 commands/tablecmds.c:266 +#: commands/tablecmds.c:228 commands/tablecmds.c:270 #, c-format msgid "table \"%s\" does not exist" msgstr "\"%s\" 테이블 없음" -#: commands/tablecmds.c:225 commands/tablecmds.c:267 +#: commands/tablecmds.c:229 commands/tablecmds.c:271 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "\"%s\" 테이블 없음, 무시함" -#: commands/tablecmds.c:227 commands/tablecmds.c:269 +#: commands/tablecmds.c:231 commands/tablecmds.c:273 msgid "Use DROP TABLE to remove a table." msgstr "테이블을 삭제하려면, DROP TABLE 명령을 사용하세요." -#: commands/tablecmds.c:230 +#: commands/tablecmds.c:234 #, c-format msgid "sequence \"%s\" does not exist" msgstr "\"%s\" 시퀀스 없음" -#: commands/tablecmds.c:231 +#: commands/tablecmds.c:235 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "\"%s\" 시퀀스 없음, 무시함" -#: commands/tablecmds.c:233 +#: commands/tablecmds.c:237 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "시퀀스를 삭제하려면 DROP SEQUENCE 명령을 사용하세요." -#: commands/tablecmds.c:236 +#: commands/tablecmds.c:240 #, c-format msgid "view \"%s\" does not exist" msgstr "\"%s\" 뷰(view) 없음" -#: commands/tablecmds.c:237 +#: commands/tablecmds.c:241 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "\"%s\" 뷰(view) 없음, 무시함" -#: commands/tablecmds.c:239 +#: commands/tablecmds.c:243 msgid "Use DROP VIEW to remove a view." msgstr "뷰를 삭제하려면, DROP VIEW 명령을 사용하세요." -#: commands/tablecmds.c:242 +#: commands/tablecmds.c:246 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "\"%s\" 이름의 구체화된 뷰가 없음" -#: commands/tablecmds.c:243 +#: commands/tablecmds.c:247 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "\"%s\" 구체화된 뷰 없음, 건너뜀" -#: commands/tablecmds.c:245 +#: commands/tablecmds.c:249 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "구체화된 뷰를 삭제하려면, DROP MATERIALIZED VIEW 명령을 사용하세요." -#: commands/tablecmds.c:248 commands/tablecmds.c:272 commands/tablecmds.c:16532 -#: parser/parse_utilcmd.c:2045 +#: commands/tablecmds.c:252 commands/tablecmds.c:276 commands/tablecmds.c:17231 +#: parser/parse_utilcmd.c:2172 #, c-format msgid "index \"%s\" does not exist" msgstr "\"%s\" 인덱스 없음" -#: commands/tablecmds.c:249 commands/tablecmds.c:273 +#: commands/tablecmds.c:253 commands/tablecmds.c:277 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "\"%s\" 인덱스 없음, 무시함" -#: commands/tablecmds.c:251 commands/tablecmds.c:275 +#: commands/tablecmds.c:255 commands/tablecmds.c:279 msgid "Use DROP INDEX to remove an index." msgstr "인덱스를 삭제하려면, DROP INDEX 명령을 사용하세요." -#: commands/tablecmds.c:256 +#: commands/tablecmds.c:260 #, c-format msgid "\"%s\" is not a type" msgstr "\"%s\" 개체는 자료형이 아님" -#: commands/tablecmds.c:257 +#: commands/tablecmds.c:261 msgid "Use DROP TYPE to remove a type." msgstr "자료형을 삭제하려면 DROP TYPE 명령을 사용하세요." -#: commands/tablecmds.c:260 commands/tablecmds.c:11666 -#: commands/tablecmds.c:14117 +#: commands/tablecmds.c:264 commands/tablecmds.c:12383 +#: commands/tablecmds.c:14838 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "\"%s\" 외부 테이블 없음" -#: commands/tablecmds.c:261 +#: commands/tablecmds.c:265 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "\"%s\" 외부 테이블 없음, 건너뜀" -#: commands/tablecmds.c:263 +#: commands/tablecmds.c:267 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "외부 테이블을 삭제하려면, DROP FOREIGN TABLE 명령을 사용하세요." -#: commands/tablecmds.c:595 +#: commands/tablecmds.c:620 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT 옵션은 임시 테이블에서만 사용될 수 있습니다" -#: commands/tablecmds.c:626 +#: commands/tablecmds.c:651 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "보안 제한 작업 내에서 임시 테이블을 만들 수 없음" -#: commands/tablecmds.c:662 commands/tablecmds.c:13021 +#: commands/tablecmds.c:687 commands/tablecmds.c:13742 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "\"%s\" 테이블이 여러 번 상속됨" -#: commands/tablecmds.c:836 +#: commands/tablecmds.c:868 #, c-format msgid "" "specifying a table access method is not supported on a partitioned table" msgstr "테이블 접근 방법은 파티션된 테이블에서는 사용할 수 없음" -#: commands/tablecmds.c:932 +#: commands/tablecmds.c:964 #, c-format msgid "\"%s\" is not partitioned" msgstr "\"%s\" 파티션 된 테이블 아님" -#: commands/tablecmds.c:1025 +#: commands/tablecmds.c:1058 #, c-format msgid "cannot partition using more than %d columns" msgstr "%d개보다 많은 칼럼을 이용해서 파티션할 수 없음" -#: commands/tablecmds.c:1081 +#: commands/tablecmds.c:1114 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "\"%s\" 파티션된 테이블의 외부 파티션을 만들 수 없음" -#: commands/tablecmds.c:1083 +#: commands/tablecmds.c:1116 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "\"%s\" 테이블은 유니크 인덱스를 포함 하고 있음." -#: commands/tablecmds.c:1248 +#: commands/tablecmds.c:1279 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY 명령은 하나의 인덱스만 지울 수 있습니다" -#: commands/tablecmds.c:1252 +#: commands/tablecmds.c:1283 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY 명령에서는 CASCADE 옵션을 사용할 수 없음" -#: commands/tablecmds.c:1606 +#: commands/tablecmds.c:1384 +#, c-format +msgid "cannot drop partitioned index \"%s\" concurrently" +msgstr "\"%s\" 파티션된 테이블의 인덱스에 대해서는 CONCURRENTLY 옵션을 사용할 수 없음" + +#: commands/tablecmds.c:1654 #, c-format msgid "cannot truncate only a partitioned table" msgstr "파티션 된 테이블만 truncate 할 수 없음" -#: commands/tablecmds.c:1607 +#: commands/tablecmds.c:1655 #, c-format msgid "" "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions " @@ -9341,33 +9577,33 @@ msgstr "" "ONLY 옵션을 빼고 사용하거나, 하위 파티션 테이블을 대상으로 직접 TRUNCATE " "ONLY 명령을 사용하세요." -#: commands/tablecmds.c:1676 +#: commands/tablecmds.c:1724 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "\"%s\" 개체의 자료도 함께 삭제됨" -#: commands/tablecmds.c:1971 +#: commands/tablecmds.c:2031 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "다른 세션의 임시 테이블 자료는 비울(truncate) 수 없습니다" -#: commands/tablecmds.c:2197 commands/tablecmds.c:12918 +#: commands/tablecmds.c:2259 commands/tablecmds.c:13639 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "\"%s\" 파티션 된 테이블로부터 상속할 수 없습니다" -#: commands/tablecmds.c:2202 +#: commands/tablecmds.c:2264 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "\"%s\" 파티션 테이블입니다, 그래서 상속 대상이 될 수 없습니다" -#: commands/tablecmds.c:2210 parser/parse_utilcmd.c:2269 -#: parser/parse_utilcmd.c:2410 +#: commands/tablecmds.c:2272 parser/parse_utilcmd.c:2402 +#: parser/parse_utilcmd.c:2544 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "상속할 \"%s\" 릴레이션(relation)은 테이블도, 외부 테이블도 아닙니다" -#: commands/tablecmds.c:2222 +#: commands/tablecmds.c:2284 #, c-format msgid "" "cannot create a temporary relation as partition of permanent relation \"%s\"" @@ -9375,111 +9611,148 @@ msgstr "" "\"%s\" 테이블은 일반 테이블입니다. 임시 테이블을 이것의 파티션 테이블로 만들 " "수 없습니다" -#: commands/tablecmds.c:2231 commands/tablecmds.c:12897 +#: commands/tablecmds.c:2293 commands/tablecmds.c:13618 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "\"%s\" 임시 테이블입니다, 그래서 상속 대상이 될 수 없습니다" -#: commands/tablecmds.c:2241 commands/tablecmds.c:12905 +#: commands/tablecmds.c:2303 commands/tablecmds.c:13626 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "다른 세션의 임시 테이블입니다, 그래서 상속 대상이 될 수 없습니다" -#: commands/tablecmds.c:2293 +#: commands/tablecmds.c:2357 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "\"%s\" 칼럼이 중복되어 상속됩니다." -#: commands/tablecmds.c:2301 +#: commands/tablecmds.c:2365 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "상위 테이블에서 지정한 \"%s\" 칼럼의 자료형들이 일치하지 않습니다" -#: commands/tablecmds.c:2303 commands/tablecmds.c:2326 -#: commands/tablecmds.c:2539 commands/tablecmds.c:2569 -#: parser/parse_coerce.c:1721 parser/parse_coerce.c:1741 -#: parser/parse_coerce.c:1761 parser/parse_coerce.c:1807 -#: parser/parse_coerce.c:1846 parser/parse_param.c:218 +#: commands/tablecmds.c:2367 commands/tablecmds.c:2390 +#: commands/tablecmds.c:2639 commands/tablecmds.c:2669 +#: parser/parse_coerce.c:1935 parser/parse_coerce.c:1955 +#: parser/parse_coerce.c:1975 parser/parse_coerce.c:2030 +#: parser/parse_coerce.c:2107 parser/parse_coerce.c:2141 +#: parser/parse_param.c:218 #, c-format msgid "%s versus %s" msgstr "%s 형과 %s 형" -#: commands/tablecmds.c:2312 +#: commands/tablecmds.c:2376 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "상속 받은 \"%s\" 칼럼의 정렬규칙에서 충돌합니다." -#: commands/tablecmds.c:2314 commands/tablecmds.c:2551 -#: commands/tablecmds.c:5704 +#: commands/tablecmds.c:2378 commands/tablecmds.c:2651 +#: commands/tablecmds.c:6106 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "\"%s\" 형과 \"%s\" 형" -#: commands/tablecmds.c:2324 +#: commands/tablecmds.c:2388 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "상속 받은 \"%s\" 칼럼의 스토리지 설정값에서 충돌합니다" -#: commands/tablecmds.c:2340 +#: commands/tablecmds.c:2404 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "" -#: commands/tablecmds.c:2445 commands/tablecmds.c:10569 -#: parser/parse_utilcmd.c:1065 parser/parse_utilcmd.c:1149 -#: parser/parse_utilcmd.c:1562 parser/parse_utilcmd.c:1669 +#: commands/tablecmds.c:2490 commands/tablecmds.c:2545 +#: commands/tablecmds.c:11188 parser/parse_utilcmd.c:1252 +#: parser/parse_utilcmd.c:1295 parser/parse_utilcmd.c:1703 +#: parser/parse_utilcmd.c:1812 #, c-format msgid "cannot convert whole-row table reference" msgstr "전체 로우 테이블 참조형으로 변환할 수 없음" -#: commands/tablecmds.c:2446 parser/parse_utilcmd.c:1150 +#: commands/tablecmds.c:2491 parser/parse_utilcmd.c:1253 +#, c-format +msgid "" +"Generation expression for column \"%s\" contains a whole-row reference to " +"table \"%s\"." +msgstr "\"%s\" 칼럼용 미리 계산된 칼럼 생성식에 \"%s\" 테이블 전체 로우 참조가 있습니다" + +#: commands/tablecmds.c:2546 parser/parse_utilcmd.c:1296 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "\"%s\" 제약조건에 \"%s\" 테이블 전체 로우 참조가 있습니다" -#: commands/tablecmds.c:2525 +#: commands/tablecmds.c:2625 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "\"%s\" 칼럼을 상속된 정의와 병합하는 중" -#: commands/tablecmds.c:2529 +#: commands/tablecmds.c:2629 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "\"%s\" 칼럼을 상속된 정의와 이동, 병합하는 중" -#: commands/tablecmds.c:2530 +#: commands/tablecmds.c:2630 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "사용자 지정 칼럼이 상속된 칼럼의 위치로 이동되었습니다" -#: commands/tablecmds.c:2537 +#: commands/tablecmds.c:2637 #, c-format msgid "column \"%s\" has a type conflict" msgstr "\"%s\" 칼럼의 자료형이 충돌합니다" -#: commands/tablecmds.c:2549 +#: commands/tablecmds.c:2649 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "\"%s\" 칼럼의 정렬규칙이 충돌합니다" -#: commands/tablecmds.c:2567 +#: commands/tablecmds.c:2667 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "\"%s\" 칼럼의 스토리지 설정값이 충돌합니다" -#: commands/tablecmds.c:2670 +#: commands/tablecmds.c:2695 #, c-format -msgid "column \"%s\" inherits conflicting default values" +msgid "child column \"%s\" specifies generation expression" +msgstr "" +"\"%s\" 칼럼은 상속 받은 칼럼임. 미리 계산된 칼럼의 생성식을 사용할 수 없음" + +#: commands/tablecmds.c:2697 +#, c-format +msgid "" +"Omit the generation expression in the definition of the child table column " +"to inherit the generation expression from the parent table." +msgstr "" + +#: commands/tablecmds.c:2701 +#, c-format +msgid "column \"%s\" inherits from generated column but specifies default" +msgstr "상속 받은 \"%s\" 칼럼은 미리 계산된 칼럼인데, 기본값이 설정되어 있음" + +#: commands/tablecmds.c:2706 +#, c-format +msgid "column \"%s\" inherits from generated column but specifies identity" +msgstr "상속 받은 \"%s\" 칼럼은 미리 계산된 칼럼인데, 일련번호 식별 옵션이 있음" + +#: commands/tablecmds.c:2815 +#, c-format +msgid "column \"%s\" inherits conflicting generation expressions" msgstr "" -"상속 받는 \"%s\" 열 자료형과 이 열에 지정한 default 값의 자료형이 서로 다릅니" +"상속 받는 \"%s\" 칼럼에 지정된 미리 계산된 생성식이 충돌함" "다" -#: commands/tablecmds.c:2672 +#: commands/tablecmds.c:2820 +#, c-format +msgid "column \"%s\" inherits conflicting default values" +msgstr "상속 받는 \"%s\" 칼럼의 default 값이 충돌함" + +#: commands/tablecmds.c:2822 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "이 충돌을 피하려면, default 값을 바르게 지정하십시오." -#: commands/tablecmds.c:2717 +#: commands/tablecmds.c:2868 #, c-format msgid "" "check constraint name \"%s\" appears multiple times but with different " @@ -9487,12 +9760,12 @@ msgid "" msgstr "" "\"%s\" 체크 제약 조건 이름이 여러 번 나타나지만, 각각 다른 식으로 되어있음" -#: commands/tablecmds.c:2894 +#: commands/tablecmds.c:3045 #, c-format msgid "cannot rename column of typed table" msgstr "칼럼 이름을 바꿀 수 없음" -#: commands/tablecmds.c:2913 +#: commands/tablecmds.c:3064 #, c-format msgid "" "\"%s\" is not a table, view, materialized view, composite type, index, or " @@ -9501,380 +9774,399 @@ msgstr "" "\"%s\" 개체는 테이블도, 뷰도, 구체화된 뷰도, 복합 자료형도, 인덱스도, 외부 테" "이블도 아닙니다." -#: commands/tablecmds.c:3007 +#: commands/tablecmds.c:3158 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "하위 테이블에서도 상속된 \"%s\" 칼럼의 이름을 바꾸어야 함" -#: commands/tablecmds.c:3039 +#: commands/tablecmds.c:3190 #, c-format msgid "cannot rename system column \"%s\"" msgstr "\"%s\" 이름의 칼럼은 시스템 칼럼입니다, 이름을 바꿀 수 없습니다" -#: commands/tablecmds.c:3054 +#: commands/tablecmds.c:3205 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "\"%s\" 이름의 칼럼은 상속 받은 칼럼입니다, 이름을 바꿀 수 없습니다" -#: commands/tablecmds.c:3206 +#: commands/tablecmds.c:3357 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "" "하위 테이블에서도 상속된 \"%s\" 제약조건은 하위 테이블에서도 이름이 바뀌어야 " "함" -#: commands/tablecmds.c:3213 +#: commands/tablecmds.c:3364 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "\"%s\" 상속된 제약조건은 이름을 바꿀 수 없습니다" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3446 +#: commands/tablecmds.c:3597 #, c-format msgid "" "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "이 세션의 활성 쿼리에서 사용 중이므로 %s \"%s\" 작업을 할 수 없음" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3455 +#: commands/tablecmds.c:3606 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "보류 중인 트리거 이벤트가 있으므로 %s \"%s\" 작업을 할 수 없음" -#: commands/tablecmds.c:4588 +#: commands/tablecmds.c:4237 commands/tablecmds.c:4252 +#, c-format +msgid "cannot change persistence setting twice" +msgstr "로그 사용/미사용 옵션을 중복 해서 지정했음" + +#: commands/tablecmds.c:4969 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "\"%s\" 시스템 릴레이션을 다시 쓰기(rewrite) 할 수 없음" -#: commands/tablecmds.c:4594 +#: commands/tablecmds.c:4975 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "카탈로그 테이블로 사용되어 \"%s\" 테이블을 rewrite 못함" -#: commands/tablecmds.c:4604 +#: commands/tablecmds.c:4985 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "다른 세션의 임시 테이블을 다시 쓰기(rewrite) 할 수 없음" -#: commands/tablecmds.c:4883 +#: commands/tablecmds.c:5274 #, c-format msgid "rewriting table \"%s\"" msgstr "\"%s\" 파일 다시 쓰는 중" -#: commands/tablecmds.c:4887 +#: commands/tablecmds.c:5278 #, c-format msgid "verifying table \"%s\"" msgstr "\"%s\" 파일 검사 중" -#: commands/tablecmds.c:5052 +#: commands/tablecmds.c:5443 #, c-format -msgid "column \"%s\" contains null values" -msgstr "\"%s\" 열에는 null 값 자료가 있습니다" +msgid "column \"%s\" of relation \"%s\" contains null values" +msgstr "\"%s\" 열(해당 릴레이션 \"%s\")의 자료 가운데 null 값이 있습니다" -#: commands/tablecmds.c:5068 commands/tablecmds.c:9778 +#: commands/tablecmds.c:5460 #, c-format -msgid "check constraint \"%s\" is violated by some row" -msgstr "\"%s\" 체크 제약 조건을 위반하는 몇몇 자료가 이미 있습니다" +msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" +msgstr "\"%s\" 체크 제약 조건(해당 릴레이션 \"%s\")을 위반하는 몇몇 자료가 있습니다" -#: commands/tablecmds.c:5086 +#: commands/tablecmds.c:5479 partitioning/partbounds.c:3235 #, c-format msgid "" -"updated partition constraint for default partition would be violated by some " -"row" +"updated partition constraint for default partition \"%s\" would be violated " +"by some row" msgstr "" -"기본 파티션용 바뀐 파티션 제약조건이 몇몇 자료에서 바르지 않아 사용할 수 없음" +"몇몇 자료가 \"%s\" 기본 파티션용에서 변경된 파티션 제약조건을 위배한 것 같음" -#: commands/tablecmds.c:5090 +#: commands/tablecmds.c:5485 #, c-format -msgid "partition constraint is violated by some row" -msgstr "파티션 제약 조건을 위반하는 몇몇 자료가 이미 있습니다" +msgid "partition constraint of relation \"%s\" is violated by some row" +msgstr "\"%s\" 릴레이션의 파티션 제약 조건을 위반하는 몇몇 자료가 있습니다" -#: commands/tablecmds.c:5235 commands/trigger.c:1538 commands/trigger.c:1644 +#: commands/tablecmds.c:5632 commands/trigger.c:1200 commands/trigger.c:1306 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "\"%s\" 개체는 테이블, 뷰, 외부 테이블 그 어느 것도 아닙니다" -#: commands/tablecmds.c:5238 +#: commands/tablecmds.c:5635 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "\"%s\" 개체는 테이블, 뷰, 구체화된 뷰, 인덱스 그 어느 것도 아닙니다" -#: commands/tablecmds.c:5244 +#: commands/tablecmds.c:5641 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "\"%s\" 개체는 테이블, 구체화된 뷰, 인덱스 그 어느 것도 아닙니다" -#: commands/tablecmds.c:5247 +#: commands/tablecmds.c:5644 #, c-format msgid "\"%s\" is not a table, materialized view, or foreign table" msgstr "\"%s\" 개체는 테이블, 구체화된 뷰, 외부 테이블 그 어느 것도 아닙니다." -#: commands/tablecmds.c:5250 +#: commands/tablecmds.c:5647 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "\"%s\" 개체는 테이블도 외부 테이블도 아닙니다" -#: commands/tablecmds.c:5253 +#: commands/tablecmds.c:5650 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "\"%s\" 개체는 테이블, 복합 자료형, 외부 테이블 그 어느 것도 아닙니다." -#: commands/tablecmds.c:5256 commands/tablecmds.c:6763 +#: commands/tablecmds.c:5653 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "" "\"%s\" 개체는 테이블, 구체화된 뷰, 인덱스, 외부 테이블 그 어느 것도 아닙니다." -#: commands/tablecmds.c:5266 +#: commands/tablecmds.c:5663 #, c-format msgid "\"%s\" is of the wrong type" msgstr "\"%s\" 개체는 잘못된 개체형입니다." -#: commands/tablecmds.c:5472 commands/tablecmds.c:5479 +#: commands/tablecmds.c:5866 commands/tablecmds.c:5873 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "\"%s\" 자료형 변경할 수 없음(\"%s.%s\" 칼럼에서 해당 형식을 사용함)" -#: commands/tablecmds.c:5486 +#: commands/tablecmds.c:5880 #, c-format msgid "" "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "" "\"%s\" 외부 테이블을 변경할 수 없음(\"%s.%s\" 칼럼에서 해당 로우 형을 사용함)" -#: commands/tablecmds.c:5493 +#: commands/tablecmds.c:5887 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "" "\"%s\" 테이블을 변경할 수 없음(\"%s.%s\" 칼럼에서 해당 로우 형식을 사용함)" -#: commands/tablecmds.c:5549 +#: commands/tablecmds.c:5943 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "" "\"%s\" 자료형을 변경할 수 없음, 이 자료형은 typed 테이블의 자료형이기 때문" -#: commands/tablecmds.c:5551 +#: commands/tablecmds.c:5945 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "" "이 개체와 관계된 모든 개체들을 함께 변경하려면 ALTER ... CASCADE 명령을 사용" "하십시오" -#: commands/tablecmds.c:5597 +#: commands/tablecmds.c:5991 #, c-format msgid "type %s is not a composite type" msgstr "%s 자료형은 복합 자료형이 아닙니다" -#: commands/tablecmds.c:5623 +#: commands/tablecmds.c:6018 #, c-format msgid "cannot add column to typed table" msgstr "typed 테이블에는 칼럼을 추가 할 수 없음" -#: commands/tablecmds.c:5667 +#: commands/tablecmds.c:6069 #, c-format msgid "cannot add column to a partition" msgstr "파티션 테이블에는 칼럼을 추가 할 수 없습니다" -#: commands/tablecmds.c:5696 commands/tablecmds.c:13148 +#: commands/tablecmds.c:6098 commands/tablecmds.c:13869 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "" "\"%s\" 상속된 테이블의 \"%s\" 열 자료형이 상위 테이블의 자료형과 틀립니다" -#: commands/tablecmds.c:5702 commands/tablecmds.c:13155 +#: commands/tablecmds.c:6104 commands/tablecmds.c:13876 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "" "\"%s\" 상속된 테이블의 \"%s\" 칼럼 정렬규칙이 상위 테이블의 정렬규칙과 틀립니" "다" -#: commands/tablecmds.c:5716 +#: commands/tablecmds.c:6118 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "\"%s\" 열(\"%s\" 하위)의 정의를 병합하는 중" -#: commands/tablecmds.c:5740 +#: commands/tablecmds.c:6161 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "하위 테이블에 재귀적으로 식별 칼럼을 추가할 수는 없음" -#: commands/tablecmds.c:5975 +#: commands/tablecmds.c:6398 #, c-format msgid "column must be added to child tables too" msgstr "하위 테이블에도 칼럼을 추가해야 함" -#: commands/tablecmds.c:6050 +#: commands/tablecmds.c:6476 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "\"%s\" 이름의 칼럼이 \"%s\" 릴레이션에 이미 있습니다, 건너뜀" -#: commands/tablecmds.c:6057 +#: commands/tablecmds.c:6483 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "\"%s\" 이름의 칼럼은 \"%s\" 릴레이션에 이미 있습니다" -#: commands/tablecmds.c:6123 commands/tablecmds.c:10221 +#: commands/tablecmds.c:6549 commands/tablecmds.c:10826 #, c-format msgid "" "cannot remove constraint from only the partitioned table when partitions " "exist" msgstr "하위 테이블이 있는 경우, 상위 테이블의 제약조건만 지울 수는 없음" -#: commands/tablecmds.c:6124 commands/tablecmds.c:6393 -#: commands/tablecmds.c:7176 commands/tablecmds.c:10222 +#: commands/tablecmds.c:6550 commands/tablecmds.c:6854 +#: commands/tablecmds.c:7834 commands/tablecmds.c:10827 #, c-format msgid "Do not specify the ONLY keyword." msgstr "ONLY 옵션을 빼고 사용하세요." -#: commands/tablecmds.c:6161 commands/tablecmds.c:6319 -#: commands/tablecmds.c:6461 commands/tablecmds.c:6544 -#: commands/tablecmds.c:6638 commands/tablecmds.c:6697 -#: commands/tablecmds.c:6847 commands/tablecmds.c:6917 -#: commands/tablecmds.c:7009 commands/tablecmds.c:10361 -#: commands/tablecmds.c:11689 +#: commands/tablecmds.c:6587 commands/tablecmds.c:6780 +#: commands/tablecmds.c:6922 commands/tablecmds.c:7036 +#: commands/tablecmds.c:7130 commands/tablecmds.c:7189 +#: commands/tablecmds.c:7291 commands/tablecmds.c:7457 +#: commands/tablecmds.c:7527 commands/tablecmds.c:7620 +#: commands/tablecmds.c:10981 commands/tablecmds.c:12406 #, c-format msgid "cannot alter system column \"%s\"" msgstr "\"%s\" 칼럼은 시스템 칼럼입니다. 그래서 변경될 수 없습니다" -#: commands/tablecmds.c:6167 commands/tablecmds.c:6467 +#: commands/tablecmds.c:6593 commands/tablecmds.c:6928 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "\"%s\" 칼럼(해당 테이블: \"%s\")은 식별 칼럼입니다." -#: commands/tablecmds.c:6203 +#: commands/tablecmds.c:6629 #, c-format msgid "column \"%s\" is in a primary key" msgstr "\"%s\" 칼럼은 기본키 칼럼입니다" -#: commands/tablecmds.c:6225 +#: commands/tablecmds.c:6651 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "파티션 테이블에서 \"%s\" 칼럼은 NOT NULL 속성으로 되어 있습니다" -#: commands/tablecmds.c:6390 commands/tablecmds.c:7630 +#: commands/tablecmds.c:6851 commands/tablecmds.c:8293 #, c-format msgid "constraint must be added to child tables too" msgstr "하위 테이블에도 제약 조건을 추가해야 함" -#: commands/tablecmds.c:6391 +#: commands/tablecmds.c:6852 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")은 이미 NOT NULL 속성이 없습니다." -#: commands/tablecmds.c:6426 +#: commands/tablecmds.c:6887 #, c-format msgid "" -"existing constraints on column \"%s\".\"%s\" are sufficient to prove that it " +"existing constraints on column \"%s.%s\" are sufficient to prove that it " "does not contain nulls" msgstr "" -#: commands/tablecmds.c:6469 +#: commands/tablecmds.c:6930 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "" "대신에, ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY 명령을 사용하세요." -#: commands/tablecmds.c:6474 +#: commands/tablecmds.c:6935 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "\"%s\" 칼럼(해당 테이블: \"%s\")은 계산된 칼럼입니다." -#: commands/tablecmds.c:6555 +#: commands/tablecmds.c:6938 +#, c-format +msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." +msgstr "" +"대신에, ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION 명령을 사용하세요." + +#: commands/tablecmds.c:7047 #, c-format msgid "" "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity " "can be added" msgstr "" +"식별자 옵션을 사용하려면, \"%s\" 칼럼(해당 릴레이션: \"%s\")에 NOT NULL " +"옵션이 있어야 합니다." -#: commands/tablecmds.c:6561 +#: commands/tablecmds.c:7053 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "\"%s\" 이름의 칼럼(해당 릴레이션: \"%s\")은 이미 식별 칼럼입니다" -#: commands/tablecmds.c:6567 +#: commands/tablecmds.c:7059 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "\"%s\" 이름의 칼럼(해당 릴레이션: \"%s\")은 이미 default 입니다" -#: commands/tablecmds.c:6644 commands/tablecmds.c:6705 +#: commands/tablecmds.c:7136 commands/tablecmds.c:7197 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "\"%s\" 이름의 칼럼(해당 릴레이션: \"%s\")은 식별 칼럼이 아닙니다" -#: commands/tablecmds.c:6710 +#: commands/tablecmds.c:7202 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "\"%s\" 이름의 칼럼(해당 릴레이션: \"%s\")은 식별 칼럼이 아님, 건너뜀" -#: commands/tablecmds.c:6775 +#: commands/tablecmds.c:7261 #, c-format -msgid "cannot refer to non-index column by number" -msgstr "" +msgid "cannot drop generation expression from inherited column" +msgstr "상속 받은 칼럼에서는 미리 계산된 표현식을 못 없앰" -#: commands/tablecmds.c:6806 +#: commands/tablecmds.c:7299 #, c-format -msgid "statistics target %d is too low" -msgstr "대상 통계값(%d)이 너무 낮습니다" +msgid "column \"%s\" of relation \"%s\" is not a stored generated column" +msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")은 미리 계산된 칼럼이 아님" -#: commands/tablecmds.c:6814 +#: commands/tablecmds.c:7304 #, c-format -msgid "lowering statistics target to %d" -msgstr "%d 값으로 대상 통계값을 낮춥니다" +msgid "" +"column \"%s\" of relation \"%s\" is not a stored generated column, skipping" +msgstr "\"%s\" 칼럼(해당 릴레이션: \"%s\")은 미리 계산된 칼럼이 아님, 건너뜀" + +#: commands/tablecmds.c:7404 +#, c-format +msgid "cannot refer to non-index column by number" +msgstr "" -#: commands/tablecmds.c:6837 +#: commands/tablecmds.c:7447 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "%d번째 칼럼이 없습니다. 해당 릴레이션: \"%s\"" -#: commands/tablecmds.c:6856 +#: commands/tablecmds.c:7466 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "" "\"%s\" 포함된 칼럼 (해당 인덱스: \"%s\") 관련 통계정보를 수정할 수 없음" -#: commands/tablecmds.c:6861 +#: commands/tablecmds.c:7471 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "" "\"%s\" 비표현식 칼럼 (해당 인덱스: \"%s\") 관련 통계정보를 수정할 수 없음" -#: commands/tablecmds.c:6863 +#: commands/tablecmds.c:7473 #, c-format msgid "Alter statistics on table column instead." msgstr "대신에 테이블 칼럼 대상으로 통계정보를 수정하세요." -#: commands/tablecmds.c:6989 +#: commands/tablecmds.c:7600 #, c-format msgid "invalid storage type \"%s\"" msgstr "잘못된 STORAGE 값: \"%s\"" -#: commands/tablecmds.c:7021 +#: commands/tablecmds.c:7632 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "%s 자료형의 column의 STORAGE 값은 반드시 PLAIN 이어야합니다" -#: commands/tablecmds.c:7056 +#: commands/tablecmds.c:7714 #, c-format msgid "cannot drop column from typed table" msgstr "typed 테이블에서 칼럼을 삭제할 수 없음" -#: commands/tablecmds.c:7115 +#: commands/tablecmds.c:7773 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "\"%s\" 칼럼은 \"%s\" 릴레이션에 없음, 건너뜀" -#: commands/tablecmds.c:7128 +#: commands/tablecmds.c:7786 #, c-format msgid "cannot drop system column \"%s\"" msgstr "\"%s\" 칼럼은 시스템 칼럼입니다, 삭제될 수 없습니다" -#: commands/tablecmds.c:7138 +#: commands/tablecmds.c:7796 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "\"%s\" 칼럼은 상속받은 칼럼입니다, 삭제될 수 없습니다" -#: commands/tablecmds.c:7151 +#: commands/tablecmds.c:7809 #, c-format msgid "" "cannot drop column \"%s\" because it is part of the partition key of " @@ -9882,14 +10174,14 @@ msgid "" msgstr "" "\"%s\" 칼럼은 \"%s\" 릴레이션의 파티션 키로 사용되고 있어 삭제 될 수 없음" -#: commands/tablecmds.c:7175 +#: commands/tablecmds.c:7833 #, c-format msgid "" "cannot drop column from only the partitioned table when partitions exist" msgstr "" "파티션 테이블이 있는 파티션된 테이블에서 그 테이블만 칼럼을 삭제 할 수 없음" -#: commands/tablecmds.c:7351 +#: commands/tablecmds.c:8014 #, c-format msgid "" "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned " @@ -9898,7 +10190,7 @@ msgstr "" "ALTER TABLE / ADD CONSTRAINT USING INDEX 작업은 파티션 된 테이블 대상으로는 " "지원하지 않음" -#: commands/tablecmds.c:7376 +#: commands/tablecmds.c:8039 #, c-format msgid "" "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" @@ -9906,14 +10198,14 @@ msgstr "" "ALTER TABLE / ADD CONSTRAINT USING INDEX 작업은 \"%s\" 인덱스를 \"%s\" 이름으" "로 바꿀 것입니다." -#: commands/tablecmds.c:7710 +#: commands/tablecmds.c:8373 #, c-format msgid "" "cannot use ONLY for foreign key on partitioned table \"%s\" referencing " "relation \"%s\"" msgstr "" -#: commands/tablecmds.c:7716 +#: commands/tablecmds.c:8379 #, c-format msgid "" "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing " @@ -9922,22 +10214,22 @@ msgstr "" "\"%s\" 파타션된 테이블에 NOT VALID 참조키를 추가할 수 없음 (참조 하는 테이" "블: \"%s\")" -#: commands/tablecmds.c:7719 +#: commands/tablecmds.c:8382 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "이 기능은 파티션 된 테이블 대상으로는 아직 지원하지 않습니다." -#: commands/tablecmds.c:7726 commands/tablecmds.c:8130 +#: commands/tablecmds.c:8389 commands/tablecmds.c:8794 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "참조된 \"%s\" 릴레이션은 테이블이 아닙니다" -#: commands/tablecmds.c:7749 +#: commands/tablecmds.c:8412 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "영구 저장용 테이블의 제약 조건은 영구 저장용 테이블을 참조 합니다." -#: commands/tablecmds.c:7756 +#: commands/tablecmds.c:8419 #, c-format msgid "" "constraints on unlogged tables may reference only permanent or unlogged " @@ -9946,132 +10238,132 @@ msgstr "" "unlogged 테이블의 제약 조건은 영구 저장용 테이블 또는 unlogged 테이블을 참조" "합니다." -#: commands/tablecmds.c:7762 +#: commands/tablecmds.c:8425 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "임시 테이블의 제약 조건은 임시 테이블에 대해서만 참조할 것입니다." -#: commands/tablecmds.c:7766 +#: commands/tablecmds.c:8429 #, c-format msgid "" "constraints on temporary tables must involve temporary tables of this session" msgstr "" "임시 테이블의 제약 조건은 이 세션용 임시 테이블에 대해서만 적용 됩니다." -#: commands/tablecmds.c:7832 commands/tablecmds.c:7838 +#: commands/tablecmds.c:8495 commands/tablecmds.c:8501 #, c-format msgid "" "invalid %s action for foreign key constraint containing generated column" msgstr "계산된 칼럼을 포함하는 참조키 제약조건용 %s 액션은 잘못 되었음" -#: commands/tablecmds.c:7854 +#: commands/tablecmds.c:8517 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "참조키(foreign key) disagree를 위한 참조하는, 또는 참조되는 열 수" -#: commands/tablecmds.c:7961 +#: commands/tablecmds.c:8624 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "\"%s\" 참조키(foreign key) 제약 조건은 구현되어질 수 없습니다" -#: commands/tablecmds.c:7963 +#: commands/tablecmds.c:8626 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "" "\"%s\" 열과 \"%s\" 열 인덱스는 함께 사용할 수 없는 자료형입니다: %s and %s." -#: commands/tablecmds.c:8326 commands/tablecmds.c:8720 -#: parser/parse_utilcmd.c:753 parser/parse_utilcmd.c:882 +#: commands/tablecmds.c:8989 commands/tablecmds.c:9382 +#: parser/parse_utilcmd.c:764 parser/parse_utilcmd.c:893 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "참조키 제약 조건은 외부 테이블에서는 사용할 수 없음" -#: commands/tablecmds.c:9087 commands/tablecmds.c:9250 -#: commands/tablecmds.c:10178 commands/tablecmds.c:10253 +#: commands/tablecmds.c:9748 commands/tablecmds.c:9911 +#: commands/tablecmds.c:10783 commands/tablecmds.c:10858 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "\"%s\" 제약 조건이 \"%s\" 릴레이션에 없습니다." -#: commands/tablecmds.c:9094 +#: commands/tablecmds.c:9755 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "\"%s\" 제약 조건(해당 테이블: \"%s\")은 참조키 제약조건이 아닙니다." -#: commands/tablecmds.c:9258 +#: commands/tablecmds.c:9919 #, c-format msgid "" "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "" "\"%s\" 제약 조건(해당 테이블: \"%s\")은 참조키도 체크 제약 조건도 아닙니다." -#: commands/tablecmds.c:9328 +#: commands/tablecmds.c:9997 #, c-format msgid "constraint must be validated on child tables too" msgstr "하위 테이블에도 제약 조건이 유효해야 함" -#: commands/tablecmds.c:9394 +#: commands/tablecmds.c:10081 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "참조키(foreign key) 제약 조건에서 참조하는 \"%s\" 칼럼이 없음" -#: commands/tablecmds.c:9399 +#: commands/tablecmds.c:10086 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "참조키(foreign key)에서 %d 키 개수보다 많이 가질 수 없음" -#: commands/tablecmds.c:9464 +#: commands/tablecmds.c:10151 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "참조되는 \"%s\" 테이블의 지연 가능한 기본키를 사용할 수 없음" -#: commands/tablecmds.c:9481 +#: commands/tablecmds.c:10168 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "참조되는 \"%s\" 테이블에는 기본키(primary key)가 없습니다" -#: commands/tablecmds.c:9546 +#: commands/tablecmds.c:10233 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "참조키의 참조 칼럼 목록에 칼럼이 중복되면 안됩니다" -#: commands/tablecmds.c:9640 +#: commands/tablecmds.c:10327 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "참조되는 \"%s\" 테이블의 지연 가능한 유니크 제약 조건을 사용할 수 없음" -#: commands/tablecmds.c:9645 +#: commands/tablecmds.c:10332 #, c-format msgid "" "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "" "참조되는 \"%s\" 테이블을 위한 주워진 키와 일치하는 고유 제약 조건이 없습니다" -#: commands/tablecmds.c:9813 +#: commands/tablecmds.c:10420 #, c-format msgid "validating foreign key constraint \"%s\"" msgstr "\"%s\" 참조키 제약 조건 검사 중" -#: commands/tablecmds.c:10134 +#: commands/tablecmds.c:10739 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "상속된 \"%s\" 제약 조건(해당 테이블: \"%s\")을 삭제할 수 없음" -#: commands/tablecmds.c:10184 +#: commands/tablecmds.c:10789 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "\"%s\" 제약 조건(해당 테이블: \"%s\")이 없음, 건너뜀" -#: commands/tablecmds.c:10345 +#: commands/tablecmds.c:10965 #, c-format msgid "cannot alter column type of typed table" msgstr "typed 테이블의 칼럼 자료형은 변경할 수 없음" -#: commands/tablecmds.c:10372 +#: commands/tablecmds.c:10992 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "\"%s\" 이름의 칼럼은 상속 받은 칼럼입니다, 이름을 바꿀 수 없습니다" -#: commands/tablecmds.c:10381 +#: commands/tablecmds.c:11001 #, c-format msgid "" "cannot alter column \"%s\" because it is part of the partition key of " @@ -10080,7 +10372,7 @@ msgstr "" "\"%s\" 칼럼은 \"%s\" 테이블의 파티션 키 가운데 하나이기 때문에, alter 작업" "을 할 수 없음" -#: commands/tablecmds.c:10431 +#: commands/tablecmds.c:11051 #, c-format msgid "" "result of USING clause for column \"%s\" cannot be cast automatically to " @@ -10088,203 +10380,203 @@ msgid "" msgstr "" "\"%s\" 칼럼에서 쓰인 USING 절의 결과가 %s 자료형으로 자동 형변환을 할 수 없음" -#: commands/tablecmds.c:10434 +#: commands/tablecmds.c:11054 #, c-format msgid "You might need to add an explicit cast." msgstr "명시적 형변환을 해야할 것 같습니다." -#: commands/tablecmds.c:10438 +#: commands/tablecmds.c:11058 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "\"%s\" 칼럼의 자료형을 %s 형으로 형변환할 수 없음" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:10441 +#: commands/tablecmds.c:11061 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "\"USING %s::%s\" 구문을 추가해야 할 것 같습니다." -#: commands/tablecmds.c:10541 +#: commands/tablecmds.c:11161 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "" "\"%s\" 칼럼은 \"%s\" 테이블의 상속된 칼럼이기에 alter 작업을 할 수 없음" -#: commands/tablecmds.c:10570 +#: commands/tablecmds.c:11189 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "USING 표현식에서 전체 로우 테이블 참조를 포함하고 있습니다." -#: commands/tablecmds.c:10581 +#: commands/tablecmds.c:11200 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "하위 테이블에서도 상속된 \"%s\" 칼럼의 형식을 바꾸어야 함" -#: commands/tablecmds.c:10706 +#: commands/tablecmds.c:11325 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "\"%s\" 칼럼은 시스템 칼럼입니다. 그래서 변경될 수 없습니다" -#: commands/tablecmds.c:10744 +#: commands/tablecmds.c:11363 #, c-format msgid "" "generation expression for column \"%s\" cannot be cast automatically to type " "%s" msgstr "\"%s\" 칼럼의 생성 구문은 %s 형으로 자동 형변환할 수 없음" -#: commands/tablecmds.c:10749 +#: commands/tablecmds.c:11368 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "\"%s\" 칼럼의 기본 값을 %s 형으로 형변환할 수 없음" -#: commands/tablecmds.c:10827 +#: commands/tablecmds.c:11446 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "미리 계산된 칼럼의 자료형을 바꿀 수 없음" -#: commands/tablecmds.c:10828 +#: commands/tablecmds.c:11447 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." -msgstr "" +msgstr "\"%s\" 칼럼은 미리 계산된 칼럼인 \"%s\"에서 사용되고 있음." -#: commands/tablecmds.c:10849 +#: commands/tablecmds.c:11468 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "뷰 또는 규칙에서 사용하는 칼럼의 형식을 변경할 수 없음" -#: commands/tablecmds.c:10850 commands/tablecmds.c:10869 -#: commands/tablecmds.c:10887 +#: commands/tablecmds.c:11469 commands/tablecmds.c:11488 +#: commands/tablecmds.c:11506 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s 의존대상 열: \"%s\"" -#: commands/tablecmds.c:10868 +#: commands/tablecmds.c:11487 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "트리거 정의에서 사용하는 칼럼의 자료형을 변경할 수 없음" -#: commands/tablecmds.c:10886 +#: commands/tablecmds.c:11505 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "정책 정의에서 사용하는 칼럼의 자료형을 변경할 수 없음" -#: commands/tablecmds.c:11797 commands/tablecmds.c:11809 +#: commands/tablecmds.c:12514 commands/tablecmds.c:12526 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "\"%s\" 인덱스의 소유주를 바꿀 수 없음" -#: commands/tablecmds.c:11799 commands/tablecmds.c:11811 +#: commands/tablecmds.c:12516 commands/tablecmds.c:12528 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "대신에 그 인덱스의 해당 테이블 소유자을 변경하세요." -#: commands/tablecmds.c:11825 +#: commands/tablecmds.c:12542 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "\"%s\" 시퀀스의 소유주를 바꿀 수 없음" -#: commands/tablecmds.c:11839 commands/tablecmds.c:15036 +#: commands/tablecmds.c:12556 commands/tablecmds.c:15743 #, c-format msgid "Use ALTER TYPE instead." msgstr "대신 ALTER TYPE을 사용하십시오." -#: commands/tablecmds.c:11848 +#: commands/tablecmds.c:12565 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "\"%s\" 개체는 테이블, 뷰, 시퀀스, 외부 테이블 그 어느 것도 아닙니다" -#: commands/tablecmds.c:12188 +#: commands/tablecmds.c:12905 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "SET TABLESPACE 구문이 중복 사용되었습니다" -#: commands/tablecmds.c:12263 +#: commands/tablecmds.c:12982 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "" "\"%s\" 개체는 테이블, 뷰, 구체화된 뷰, 인덱스, TOAST 테이블 그 어느 것도 아닙" "니다." -#: commands/tablecmds.c:12296 commands/view.c:504 +#: commands/tablecmds.c:13015 commands/view.c:494 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "" "WITH CHECK OPTION 옵션은 자동 갱신 가능한 뷰에 대해서만 사용할 수 있습니다" -#: commands/tablecmds.c:12436 +#: commands/tablecmds.c:13155 #, c-format msgid "cannot move system relation \"%s\"" msgstr "\"%s\" 시스템 릴레이션입니다. 이동할 수 없습니다" -#: commands/tablecmds.c:12452 +#: commands/tablecmds.c:13171 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "다른 세션의 임시 테이블들은 이동할 수 없습니다" -#: commands/tablecmds.c:12620 +#: commands/tablecmds.c:13341 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "테이블스페이스에 테이블과 인덱스와 구체화된 뷰만 있습니다." -#: commands/tablecmds.c:12632 +#: commands/tablecmds.c:13353 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "" "해당 개체를 pg_global 테이블스페이스로 옮기거나 그 반대로 작업할 수 없음" -#: commands/tablecmds.c:12724 +#: commands/tablecmds.c:13445 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "\"%s.%s\" 릴레이션을 잠글 수 없어 중지 중입니다" -#: commands/tablecmds.c:12740 +#: commands/tablecmds.c:13461 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "검색조건에 일치하는 릴레이션이 \"%s\" 테이블스페이스에 없음" -#: commands/tablecmds.c:12856 +#: commands/tablecmds.c:13577 #, c-format msgid "cannot change inheritance of typed table" msgstr "typed 테이블의 상속 정보는 변경할 수 없음" -#: commands/tablecmds.c:12861 commands/tablecmds.c:13357 +#: commands/tablecmds.c:13582 commands/tablecmds.c:14078 #, c-format msgid "cannot change inheritance of a partition" msgstr "파티션 테이블의 상속 정보는 바꿀 수 없음" -#: commands/tablecmds.c:12866 +#: commands/tablecmds.c:13587 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "파티션된 테이블의 상속 정보는 바꿀 수 없음" -#: commands/tablecmds.c:12912 +#: commands/tablecmds.c:13633 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "다른 세션의 임시 테이블을 상속할 수 없음" -#: commands/tablecmds.c:12925 +#: commands/tablecmds.c:13646 #, c-format msgid "cannot inherit from a partition" msgstr "파티션 테이블에서 상속 할 수 없음" -#: commands/tablecmds.c:12947 commands/tablecmds.c:15684 +#: commands/tablecmds.c:13668 commands/tablecmds.c:16383 #, c-format msgid "circular inheritance not allowed" msgstr "순환 되는 상속은 허용하지 않습니다" -#: commands/tablecmds.c:12948 commands/tablecmds.c:15685 +#: commands/tablecmds.c:13669 commands/tablecmds.c:16384 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\" 개체는 이미 \"%s\" 개체로부터 상속받은 상태입니다." -#: commands/tablecmds.c:12961 +#: commands/tablecmds.c:13682 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "" "\"%s\" 트리거(해당 테이블 \"%s\")은 하위테이블 상속과 관련되어 보호되고 있습" "니다." -#: commands/tablecmds.c:12963 +#: commands/tablecmds.c:13684 #, c-format msgid "" "ROW triggers with transition tables are not supported in inheritance " @@ -10292,22 +10584,22 @@ msgid "" msgstr "" "transition 테이블의 ROW 트리거들은 계층적 상속 테이블에서는 지원하지 않음" -#: commands/tablecmds.c:13166 +#: commands/tablecmds.c:13887 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "자식 테이블의 \"%s\" 칼럼은 NOT NULL 속성이 있어야합니다" -#: commands/tablecmds.c:13193 +#: commands/tablecmds.c:13914 #, c-format msgid "child table is missing column \"%s\"" msgstr "자식 테이블에는 \"%s\" 칼럼이 없습니다" -#: commands/tablecmds.c:13281 +#: commands/tablecmds.c:14002 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "\"%s\" 하위 테이블에 \"%s\" 체크 제약 조건에 대한 다른 정의가 있음" -#: commands/tablecmds.c:13289 +#: commands/tablecmds.c:14010 #, c-format msgid "" "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s" @@ -10315,85 +10607,85 @@ msgid "" msgstr "" "\"%s\" 제약 조건이 \"%s\" 하위 테이블에 있는 비 상속 제약 조건과 충돌합니다" -#: commands/tablecmds.c:13300 +#: commands/tablecmds.c:14021 #, c-format msgid "" "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "" "\"%s\" 제약 조건이 \"%s\" 하위 테이블에 있는 NOT VALID 제약 조건과 충돌합니다" -#: commands/tablecmds.c:13335 +#: commands/tablecmds.c:14056 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "자식 테이블에 \"%s\" 제약 조건이 없습니다" -#: commands/tablecmds.c:13424 +#: commands/tablecmds.c:14145 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "\"%s\" 릴레이션은 \"%s\" 릴레이션의 파티션이 아닙니다" -#: commands/tablecmds.c:13430 +#: commands/tablecmds.c:14151 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "\"%s\" 릴레이션은 \"%s\" 릴레이션의 부모가 아닙니다" -#: commands/tablecmds.c:13658 +#: commands/tablecmds.c:14379 #, c-format msgid "typed tables cannot inherit" msgstr "typed 테이블은 상속할 수 없음" -#: commands/tablecmds.c:13688 +#: commands/tablecmds.c:14409 #, c-format msgid "table is missing column \"%s\"" msgstr "테이블에는 \"%s\" 칼럼이 없습니다" -#: commands/tablecmds.c:13699 +#: commands/tablecmds.c:14420 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "\"%s\" 칼럼은 \"%s\" 자료형입니다." -#: commands/tablecmds.c:13708 +#: commands/tablecmds.c:14429 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "\"%s\" 테이블의 \"%s\" 칼럼 자료형 틀립니다" -#: commands/tablecmds.c:13722 +#: commands/tablecmds.c:14443 #, c-format msgid "table has extra column \"%s\"" msgstr "\"%s\" 칼럼은 확장형입니다" -#: commands/tablecmds.c:13774 +#: commands/tablecmds.c:14495 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\" 테이블은 typed 테이블이 아닙니다" -#: commands/tablecmds.c:13956 +#: commands/tablecmds.c:14677 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "\"%s\" 인덱스는 유니크 인덱스가 아니여서, 복제 식별자로 사용할 수 없음" -#: commands/tablecmds.c:13962 +#: commands/tablecmds.c:14683 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "\"%s\" non-immediate 인덱스는 복제 식별자로 사용할 수 없음" -#: commands/tablecmds.c:13968 +#: commands/tablecmds.c:14689 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "\"%s\" 인덱스는 expression 인덱스여서, 복제 식별자로 사용할 수 없음" -#: commands/tablecmds.c:13974 +#: commands/tablecmds.c:14695 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "\"%s\" 인덱스가 부분인덱스여서, 복제 식별자로 사용할 수 없음" -#: commands/tablecmds.c:13980 +#: commands/tablecmds.c:14701 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "" "\"%s\" 인덱스는 사용할 수 없는 인덱스여서, 복제 식별자로 사용할 수 없음" -#: commands/tablecmds.c:13997 +#: commands/tablecmds.c:14718 #, c-format msgid "" "index \"%s\" cannot be used as replica identity because column %d is a " @@ -10401,7 +10693,7 @@ msgid "" msgstr "" "\"%s\" 인덱스는 복제 식별자로 사용할 수 없음, %d 번째 칼럼이 시스템 칼럼임" -#: commands/tablecmds.c:14004 +#: commands/tablecmds.c:14725 #, c-format msgid "" "index \"%s\" cannot be used as replica identity because column \"%s\" is " @@ -10410,23 +10702,23 @@ msgstr "" "\"%s\" 인덱스는 복제 식별자로 사용할 수 없음, \"%s\" 칼럼이 null 값 사용가능 " "속성임" -#: commands/tablecmds.c:14197 +#: commands/tablecmds.c:14918 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "\"%s\" 테이블은 임시 테이블이기에, 통계 정보를 변경 할 수 없음" -#: commands/tablecmds.c:14221 +#: commands/tablecmds.c:14942 #, c-format msgid "" "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "\"%s\" 테이블은 발생에 사용하고 있어, unlogged 속성으로 바꿀 수 없음" -#: commands/tablecmds.c:14223 +#: commands/tablecmds.c:14944 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "unlogged 릴레이션 복제할 수 없습니다." -#: commands/tablecmds.c:14268 +#: commands/tablecmds.c:14989 #, c-format msgid "" "could not change table \"%s\" to logged because it references unlogged table " @@ -10435,7 +10727,7 @@ msgstr "" "\"%s\" 테이블이 \"%s\" unlogged 테이블을 참조하고 있어 logged 속성으로 바꿀 " "수 없음" -#: commands/tablecmds.c:14278 +#: commands/tablecmds.c:14999 #, c-format msgid "" "could not change table \"%s\" to unlogged because it references logged table " @@ -10444,22 +10736,22 @@ msgstr "" "\"%s\" 테이블이 \"%s\" logged 테이블을 참조하고 있어 unlogged 속성으로 바꿀 " "수 없음" -#: commands/tablecmds.c:14336 +#: commands/tablecmds.c:15057 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "소유된 시퀀스를 다른 스키마로 이동할 수 없음" -#: commands/tablecmds.c:14442 +#: commands/tablecmds.c:15163 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "\"%s\" 릴레이션이 \"%s\" 스키마에 이미 있습니다" -#: commands/tablecmds.c:15019 +#: commands/tablecmds.c:15726 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\" 개체는 복합 자료형입니다" -#: commands/tablecmds.c:15051 +#: commands/tablecmds.c:15758 #, c-format msgid "" "\"%s\" is not a table, view, materialized view, sequence, or foreign table" @@ -10467,63 +10759,58 @@ msgstr "" "\"%s\" 개체는 테이블, 뷰, 구체화된 뷰, 시퀀스, 외부 테이블 그 어느 것도 아닙" "니다" -#: commands/tablecmds.c:15086 +#: commands/tablecmds.c:15793 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "알 수 없는 파티션 규칙 \"%s\"" -#: commands/tablecmds.c:15094 +#: commands/tablecmds.c:15801 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "둘 이상의 칼럼을 사용할 \"list\" 파티션은 사용할 수 없습니다" -#: commands/tablecmds.c:15160 +#: commands/tablecmds.c:15867 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "\"%s\" 칼럼이 파티션 키로 사용되고 있지 않습니다" -#: commands/tablecmds.c:15168 +#: commands/tablecmds.c:15875 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "\"%s\" 칼럼은 시스템 칼럼입니다. 그래서 파티션 키로 사용될 수 없습니다" -#: commands/tablecmds.c:15179 commands/tablecmds.c:15296 +#: commands/tablecmds.c:15886 commands/tablecmds.c:16000 #, c-format msgid "cannot use generated column in partition key" msgstr "미리 계산된 칼럼은 파티션 키로 사용할 수 없음" -#: commands/tablecmds.c:15180 commands/tablecmds.c:15297 commands/trigger.c:659 -#: rewrite/rewriteHandler.c:827 rewrite/rewriteHandler.c:844 +#: commands/tablecmds.c:15887 commands/tablecmds.c:16001 commands/trigger.c:641 +#: rewrite/rewriteHandler.c:829 rewrite/rewriteHandler.c:846 #, c-format msgid "Column \"%s\" is a generated column." msgstr "\"%s\" 칼럼은 미리 계산된 칼럼입니다." -#: commands/tablecmds.c:15256 +#: commands/tablecmds.c:15963 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "파티션 키로 사용할 함수는 IMMUTABLE 특성이 있어야합니다" -#: commands/tablecmds.c:15273 -#, c-format -msgid "partition key expressions cannot contain whole-row references" -msgstr "파티션 키 표현식에서 전체 로우 참조를 포함할 수 없습니다" - -#: commands/tablecmds.c:15280 +#: commands/tablecmds.c:15983 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "파티션 키 표현식에서는 시스템 칼럼 참조를 포함할 수 없습니다" -#: commands/tablecmds.c:15309 +#: commands/tablecmds.c:16013 #, c-format msgid "cannot use constant expression as partition key" msgstr "파티션 키로 상수는 쓸 수 없습니다" -#: commands/tablecmds.c:15330 +#: commands/tablecmds.c:16034 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "파티션 표현식에 쓸 문자 정렬 규칙을 결정할 수 없습니다" -#: commands/tablecmds.c:15365 +#: commands/tablecmds.c:16069 #, c-format msgid "" "You must specify a hash operator class or define a default hash operator " @@ -10532,7 +10819,7 @@ msgstr "" "해당 자료형을 위한 해시 연산자 클래스를 지정하거나 기본 해시 연산자 클래스를 " "정의해 두어야합니다" -#: commands/tablecmds.c:15371 +#: commands/tablecmds.c:16075 #, c-format msgid "" "You must specify a btree operator class or define a default btree operator " @@ -10541,492 +10828,489 @@ msgstr "" "해당 자료형을 위한 btree 연산자 클래스를 지정하거나 기본 btree 연산자 클래스" "를 정의해 두어야합니다" -#: commands/tablecmds.c:15516 +#: commands/tablecmds.c:16220 #, c-format msgid "" "partition constraint for table \"%s\" is implied by existing constraints" msgstr "" -#: commands/tablecmds.c:15520 partitioning/partbounds.c:1256 -#: partitioning/partbounds.c:1307 +#: commands/tablecmds.c:16224 partitioning/partbounds.c:3129 +#: partitioning/partbounds.c:3180 #, c-format msgid "" "updated partition constraint for default partition \"%s\" is implied by " "existing constraints" msgstr "" -#: commands/tablecmds.c:15624 +#: commands/tablecmds.c:16323 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\" 이름의 파티션 테이블이 이미 있습니다" -#: commands/tablecmds.c:15630 +#: commands/tablecmds.c:16329 #, c-format msgid "cannot attach a typed table as partition" msgstr "파티션 테이블로 typed 테이블을 추가할 수 없음" -#: commands/tablecmds.c:15646 +#: commands/tablecmds.c:16345 #, c-format msgid "cannot attach inheritance child as partition" msgstr "파티션 테이블로 상속을 이용한 하위 테이블을 추가할 수 없음" -#: commands/tablecmds.c:15660 +#: commands/tablecmds.c:16359 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "파티션 테이블로 상속용 상위 테이블을 추가할 수 없음" -#: commands/tablecmds.c:15694 +#: commands/tablecmds.c:16393 #, c-format msgid "" "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "" "\"%s\" 테이블은 일반 테이블입니다, 임시 파티션 테이블을 추가할 수 없습니다" -#: commands/tablecmds.c:15702 +#: commands/tablecmds.c:16401 #, c-format msgid "" "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "" "\"%s\" 테이블은 임시 테이블입니다, 일반 파티션 테이블을 추가할 수 없습니다" -#: commands/tablecmds.c:15710 +#: commands/tablecmds.c:16409 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "다른 세션의 임시 테이블을 파티션 테이블로 추가할 수 없습니다" -#: commands/tablecmds.c:15717 +#: commands/tablecmds.c:16416 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "다른 세션의 임시 테이블을 파티션 테이블로 추가할 수 없습니다" -#: commands/tablecmds.c:15737 +#: commands/tablecmds.c:16436 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "\"%s\" 테이블의 \"%s\" 칼럼이 상위 테이블인 \"%s\"에 없음" -#: commands/tablecmds.c:15740 +#: commands/tablecmds.c:16439 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "새 파티션 테이블은 상위 테이블의 칼럼과 동일해야 합니다." -#: commands/tablecmds.c:15752 +#: commands/tablecmds.c:16451 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "" "\"%s\" 트리거가 \"%s\" 테이블에 있어 파티션 테이블로 포함 될 수 없습니다" -#: commands/tablecmds.c:15754 commands/trigger.c:465 +#: commands/tablecmds.c:16453 commands/trigger.c:447 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "" "ROW 트리거들이 있는 테이블을 파티션 테이블로 포함하는 기능은 지원하지 않습니" "다" -#: commands/tablecmds.c:15921 +#: commands/tablecmds.c:16616 #, c-format msgid "" "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "\"%s\" 외부 테이블을 파티션된 \"%s\" 테이블의 부분으로 추가 할 수 없음" -#: commands/tablecmds.c:15924 +#: commands/tablecmds.c:16619 #, c-format msgid "Table \"%s\" contains unique indexes." msgstr "\"%s\" 테이블에 유니크 인덱스가 있습니다." -#: commands/tablecmds.c:16566 commands/tablecmds.c:16585 -#: commands/tablecmds.c:16607 commands/tablecmds.c:16626 -#: commands/tablecmds.c:16668 +#: commands/tablecmds.c:17265 commands/tablecmds.c:17285 +#: commands/tablecmds.c:17305 commands/tablecmds.c:17324 +#: commands/tablecmds.c:17366 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "\"%s\" 인덱스를 \"%s\" 인덱스의 파티션으로 추가할 수 없음" -#: commands/tablecmds.c:16569 +#: commands/tablecmds.c:17268 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "\"%s\" 인덱스는 이미 다른 인덱스에 추가되어 있음." -#: commands/tablecmds.c:16588 +#: commands/tablecmds.c:17288 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "\"%s\" 인덱스는 \"%s\" 테이블의 하위 파티션 대상 인덱스가 아닙니다." -#: commands/tablecmds.c:16610 +#: commands/tablecmds.c:17308 #, c-format msgid "The index definitions do not match." msgstr "인덱스 정의가 일치하지 않습니다." -#: commands/tablecmds.c:16629 +#: commands/tablecmds.c:17327 #, c-format msgid "" "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint " "exists for index \"%s\"." msgstr "" -#: commands/tablecmds.c:16671 +#: commands/tablecmds.c:17369 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "\"%s\" 파티션 용으로 다른 인덱스가 추가되어 있습니다." -#: commands/tablespace.c:163 commands/tablespace.c:180 -#: commands/tablespace.c:191 commands/tablespace.c:199 -#: commands/tablespace.c:639 replication/slot.c:1198 storage/file/copydir.c:47 +#: commands/tablespace.c:162 commands/tablespace.c:179 +#: commands/tablespace.c:190 commands/tablespace.c:198 +#: commands/tablespace.c:638 replication/slot.c:1373 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 만들 수 없음: %m" -#: commands/tablespace.c:210 utils/adt/genfile.c:593 +#: commands/tablespace.c:209 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "\"%s\" 디렉터리 상태를 파악할 수 없음: %m" -#: commands/tablespace.c:219 +#: commands/tablespace.c:218 #, c-format msgid "\"%s\" exists but is not a directory" msgstr "\"%s\" 파일이 존재하지만 디렉터리가 아닙니다" -#: commands/tablespace.c:250 +#: commands/tablespace.c:249 #, c-format msgid "permission denied to create tablespace \"%s\"" msgstr "\"%s\" 테이블스페이스를 만들 권한이 없습니다" -#: commands/tablespace.c:252 +#: commands/tablespace.c:251 #, c-format msgid "Must be superuser to create a tablespace." msgstr "테이블스페이스는 슈퍼유저만 만들 수 있습니다." -#: commands/tablespace.c:268 +#: commands/tablespace.c:267 #, c-format msgid "tablespace location cannot contain single quotes" msgstr "테이블스페이스 위치에는 작은 따옴표를 사용할 수 없음" -#: commands/tablespace.c:278 +#: commands/tablespace.c:277 #, c-format msgid "tablespace location must be an absolute path" msgstr "테이블스페이스 경로는 절대경로여야합니다" -#: commands/tablespace.c:290 +#: commands/tablespace.c:289 #, c-format msgid "tablespace location \"%s\" is too long" msgstr "테이블스페이스 경로가 너무 깁니다: \"%s\"" -#: commands/tablespace.c:297 +#: commands/tablespace.c:296 #, c-format msgid "tablespace location should not be inside the data directory" msgstr "테이블스페이스 경로는 데이터 디렉터리 안에 있으면 안됩니다" -#: commands/tablespace.c:306 commands/tablespace.c:966 +#: commands/tablespace.c:305 commands/tablespace.c:965 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "\"%s\" 테이블스페이스 이름은 적당치 않습니다" -#: commands/tablespace.c:308 commands/tablespace.c:967 +#: commands/tablespace.c:307 commands/tablespace.c:966 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "\"pg_\" 문자로 시작하는 테이블스페이스는 시스템 테이블스페이스입니다." -#: commands/tablespace.c:327 commands/tablespace.c:988 +#: commands/tablespace.c:326 commands/tablespace.c:987 #, c-format msgid "tablespace \"%s\" already exists" msgstr "\"%s\" 이름의 테이블스페이스는 이미 있음" -#: commands/tablespace.c:443 commands/tablespace.c:949 -#: commands/tablespace.c:1038 commands/tablespace.c:1107 -#: commands/tablespace.c:1251 commands/tablespace.c:1451 +#: commands/tablespace.c:442 commands/tablespace.c:948 +#: commands/tablespace.c:1037 commands/tablespace.c:1106 +#: commands/tablespace.c:1252 commands/tablespace.c:1455 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "\"%s\" 테이블스페이스 없음" -#: commands/tablespace.c:449 +#: commands/tablespace.c:448 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "\"%s\" 테이블스페이스 없음, 건너 뜀" -#: commands/tablespace.c:526 +#: commands/tablespace.c:525 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "\"%s\" 테이블스페이스는 비어있지 않음" -#: commands/tablespace.c:598 +#: commands/tablespace.c:597 #, c-format msgid "directory \"%s\" does not exist" msgstr "\"%s\" 디렉터리 없음" -#: commands/tablespace.c:599 +#: commands/tablespace.c:598 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "이 서버를 재시작하기 전에 이 테이블스페이스 용 디렉터리를 만드세요." -#: commands/tablespace.c:604 +#: commands/tablespace.c:603 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "\"%s\" 디렉터리 액세스 권한을 지정할 수 없음: %m" -#: commands/tablespace.c:634 +#: commands/tablespace.c:633 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "\"%s\" 디렉터리는 이미 테이블스페이스로 사용 중임" -#: commands/tablespace.c:758 commands/tablespace.c:771 -#: commands/tablespace.c:807 commands/tablespace.c:899 storage/file/fd.c:2992 -#: storage/file/fd.c:3331 +#: commands/tablespace.c:757 commands/tablespace.c:770 +#: commands/tablespace.c:806 commands/tablespace.c:898 storage/file/fd.c:3108 +#: storage/file/fd.c:3448 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 삭제할 수 없음: %m" -#: commands/tablespace.c:820 commands/tablespace.c:908 +#: commands/tablespace.c:819 commands/tablespace.c:907 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "\"%s\" 심벌릭 링크를 삭제할 수 없음: %m" -#: commands/tablespace.c:830 commands/tablespace.c:917 +#: commands/tablespace.c:829 commands/tablespace.c:916 #, c-format msgid "\"%s\" is not a directory or symbolic link" msgstr "\"%s\" 디렉터리도, 심볼릭 링크도 아님" -#: commands/tablespace.c:1112 +#: commands/tablespace.c:1111 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "\"%s\" 테이블스페이스 없음" -#: commands/tablespace.c:1550 +#: commands/tablespace.c:1554 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "%u OID 테이블스페이스용 디렉터리는 삭제될 수 없음" -#: commands/tablespace.c:1552 +#: commands/tablespace.c:1556 #, c-format msgid "You can remove the directories manually if necessary." msgstr "필요하다면 OS 작업으로 그 디레터리를 삭제하세요" -#: commands/trigger.c:210 commands/trigger.c:221 +#: commands/trigger.c:204 commands/trigger.c:215 #, c-format msgid "\"%s\" is a table" msgstr "\"%s\" 개체는 테이블입니다." -#: commands/trigger.c:212 commands/trigger.c:223 +#: commands/trigger.c:206 commands/trigger.c:217 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "테이블에 INSTEAD OF 트리거는 설정할 수 없음" -#: commands/trigger.c:240 +#: commands/trigger.c:238 #, c-format -msgid "Partitioned tables cannot have BEFORE / FOR EACH ROW triggers." -msgstr "파티션된 테이블은 BEFORE / FOR EACH ROW 트리거를 사용할 수 없음" +msgid "\"%s\" is a partitioned table" +msgstr "\"%s\" 개체는 파티션된 테이블임" -#: commands/trigger.c:258 +#: commands/trigger.c:240 #, c-format msgid "Triggers on partitioned tables cannot have transition tables." msgstr "파티션된 테이블에 지정된 트리거는 전달 테이블을 가질 수 없음." -#: commands/trigger.c:270 commands/trigger.c:277 commands/trigger.c:447 +#: commands/trigger.c:252 commands/trigger.c:259 commands/trigger.c:429 #, c-format msgid "\"%s\" is a view" msgstr "\"%s\" 개체는 뷰입니다." -#: commands/trigger.c:272 +#: commands/trigger.c:254 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "뷰에 로우 단위 BEFORE, AFTER 트리거는 설정할 수 없음" -#: commands/trigger.c:279 +#: commands/trigger.c:261 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "뷰에 TRUNCATE 트리거는 설정할 수 없음" -#: commands/trigger.c:287 commands/trigger.c:294 commands/trigger.c:306 -#: commands/trigger.c:440 +#: commands/trigger.c:269 commands/trigger.c:276 commands/trigger.c:288 +#: commands/trigger.c:422 #, c-format msgid "\"%s\" is a foreign table" msgstr "\"%s\" 개체는 외부 테이블입니다." -#: commands/trigger.c:289 +#: commands/trigger.c:271 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "외부테이블에 INSTEAD OF 트리거는 설정할 수 없음" -#: commands/trigger.c:296 +#: commands/trigger.c:278 #, c-format msgid "Foreign tables cannot have TRUNCATE triggers." msgstr "외부 테이블에는 TRUNCATE 트리거를 사용할 수 없음" -#: commands/trigger.c:308 +#: commands/trigger.c:290 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "외부 테이블에 제약 조건 트리거는 설정할 수 없음" -#: commands/trigger.c:383 +#: commands/trigger.c:365 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "TRUNCATE FOR EACH ROW 트리거는 지원되지 않음" -#: commands/trigger.c:391 +#: commands/trigger.c:373 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "INSTEAD OF 트리거는 FOR EACH ROW 옵션으로 설정해야 함" -#: commands/trigger.c:395 +#: commands/trigger.c:377 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "INSTEAD OF 트리거는 WHEN 조건을 사용할 수 없음" -#: commands/trigger.c:399 +#: commands/trigger.c:381 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "INSTEAD OF 트리거는 칼럼 목록을 사용할 수 없음" -#: commands/trigger.c:428 +#: commands/trigger.c:410 #, c-format msgid "ROW variable naming in the REFERENCING clause is not supported" msgstr "" -#: commands/trigger.c:429 +#: commands/trigger.c:411 #, c-format msgid "Use OLD TABLE or NEW TABLE for naming transition tables." msgstr "" -#: commands/trigger.c:442 +#: commands/trigger.c:424 #, c-format msgid "Triggers on foreign tables cannot have transition tables." msgstr "외부 테이블의 트리거들은 전환 테이블을 가질 수 없음." -#: commands/trigger.c:449 +#: commands/trigger.c:431 #, c-format msgid "Triggers on views cannot have transition tables." msgstr "뷰에 정의한 트리거들은 전환 테이블을 가질 수 없음." -#: commands/trigger.c:469 +#: commands/trigger.c:451 #, c-format msgid "" "ROW triggers with transition tables are not supported on inheritance children" msgstr "" -#: commands/trigger.c:475 +#: commands/trigger.c:457 #, c-format msgid "transition table name can only be specified for an AFTER trigger" msgstr "" -#: commands/trigger.c:480 +#: commands/trigger.c:462 #, c-format msgid "TRUNCATE triggers with transition tables are not supported" msgstr "전환 테이블에서 TRUNCATE 트리거는 지원하지 않습니다" -#: commands/trigger.c:497 +#: commands/trigger.c:479 #, c-format msgid "" "transition tables cannot be specified for triggers with more than one event" msgstr "전환 테이블은 하나 이상의 이벤트에 대한 트리거를 지정할 수 없습니다" -#: commands/trigger.c:508 +#: commands/trigger.c:490 #, c-format msgid "transition tables cannot be specified for triggers with column lists" msgstr "전환 테이블은 칼럼 목록들에 대한 트리거를 지정할 수 없습니다" -#: commands/trigger.c:525 +#: commands/trigger.c:507 #, c-format msgid "NEW TABLE can only be specified for an INSERT or UPDATE trigger" msgstr "" -#: commands/trigger.c:530 +#: commands/trigger.c:512 #, c-format msgid "NEW TABLE cannot be specified multiple times" msgstr "" -#: commands/trigger.c:540 +#: commands/trigger.c:522 #, c-format msgid "OLD TABLE can only be specified for a DELETE or UPDATE trigger" msgstr "" -#: commands/trigger.c:545 +#: commands/trigger.c:527 #, c-format msgid "OLD TABLE cannot be specified multiple times" msgstr "" -#: commands/trigger.c:555 +#: commands/trigger.c:537 #, c-format msgid "OLD TABLE name and NEW TABLE name cannot be the same" msgstr "" -#: commands/trigger.c:619 commands/trigger.c:632 +#: commands/trigger.c:601 commands/trigger.c:614 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "트리거의 WHEN 조건에는 칼럼 값을 참조할 수는 없음" -#: commands/trigger.c:624 +#: commands/trigger.c:606 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "INSERT 트리거에서의 WHEN 조건에는 OLD 값을 참조할 수 없음" -#: commands/trigger.c:637 +#: commands/trigger.c:619 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "DELETE 트리거에서의 WHEN 조건에는 NEW 값을 참조할 수 없음" -#: commands/trigger.c:642 +#: commands/trigger.c:624 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "WHEN 조건절이 있는 BEFORE 트리거는 NEW 시스템 칼럼을 참조할 수 없음" -#: commands/trigger.c:650 commands/trigger.c:658 +#: commands/trigger.c:632 commands/trigger.c:640 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW generated columns" msgstr "" "WHEN 조건절이 있는 BEFORE 트리거는 NEW 미리 계산된 칼럼을 참조할 수 없음" -#: commands/trigger.c:651 +#: commands/trigger.c:633 #, c-format msgid "A whole-row reference is used and the table contains generated columns." msgstr "" -#: commands/trigger.c:833 commands/trigger.c:1723 +#: commands/trigger.c:780 commands/trigger.c:1385 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "\"%s\" 이름의 트리거가 \"%s\" 테이블에 이미 있습니다" -#: commands/trigger.c:1248 -msgid "Found referenced table's UPDATE trigger." -msgstr "참조된 테이블의 UPDATE 트리거를 찾았습니다." - -#: commands/trigger.c:1249 -msgid "Found referenced table's DELETE trigger." -msgstr "참조된 테이블의 DELETE 트리거를 찾았습니다." - -#: commands/trigger.c:1250 -msgid "Found referencing table's trigger." -msgstr "참조 테이블의 트리거를 찾았습니다." - -#: commands/trigger.c:1359 commands/trigger.c:1375 -#, c-format -msgid "ignoring incomplete trigger group for constraint \"%s\" %s" -msgstr "\"%s\" %s 제약 조건에 대한 불완전한 트리거 그룹을 무시하는 중" - -#: commands/trigger.c:1388 -#, c-format -msgid "converting trigger group into constraint \"%s\" %s" -msgstr "트리거 그룹을 \"%s\" %s 제약 조건으로 변환하는 중" - -#: commands/trigger.c:1609 commands/trigger.c:1770 commands/trigger.c:1906 +#: commands/trigger.c:1271 commands/trigger.c:1432 commands/trigger.c:1568 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "\"%s\" 트리거는 \"%s\" 테이블에 없음" -#: commands/trigger.c:1853 +#: commands/trigger.c:1515 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "액세스 권한 없음: \"%s\" 개체는 시스템 트리거임" -#: commands/trigger.c:2453 +#: commands/trigger.c:2116 #, c-format msgid "trigger function %u returned null value" msgstr "%u 트리거 함수가 null 값을 리턴했습니다" -#: commands/trigger.c:2519 commands/trigger.c:2736 commands/trigger.c:2988 -#: commands/trigger.c:3295 +#: commands/trigger.c:2176 commands/trigger.c:2390 commands/trigger.c:2625 +#: commands/trigger.c:2933 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "BEFORE STATEMENT 트리거는 리턴값이 있으면 안됩니다" -#: commands/trigger.c:3358 executor/nodeModifyTable.c:1348 -#: executor/nodeModifyTable.c:1417 +#: commands/trigger.c:2250 +#, c-format +msgid "" +"moving row to another partition during a BEFORE FOR EACH ROW trigger is not " +"supported" +msgstr "" + +#: commands/trigger.c:2251 commands/trigger.c:2755 +#, c-format +msgid "" +"Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." +msgstr "" + +#: commands/trigger.c:2754 +#, c-format +msgid "" +"moving row to another partition during a BEFORE trigger is not supported" +msgstr "" + +#: commands/trigger.c:2996 executor/nodeModifyTable.c:1380 +#: executor/nodeModifyTable.c:1449 #, c-format msgid "" "tuple to be updated was already modified by an operation triggered by the " @@ -11034,9 +11318,9 @@ msgid "" msgstr "" "현재 명령으로 실행된 트리거 작업으로 변경해야할 자료가 이미 바뀌었습니다." -#: commands/trigger.c:3359 executor/nodeModifyTable.c:808 -#: executor/nodeModifyTable.c:882 executor/nodeModifyTable.c:1349 -#: executor/nodeModifyTable.c:1418 +#: commands/trigger.c:2997 executor/nodeModifyTable.c:840 +#: executor/nodeModifyTable.c:914 executor/nodeModifyTable.c:1381 +#: executor/nodeModifyTable.c:1450 #, c-format msgid "" "Consider using an AFTER trigger instead of a BEFORE trigger to propagate " @@ -11045,315 +11329,334 @@ msgstr "" "다른 로우를 변경하는 일을 BEFORE 트리거 대신에 AFTER 트리거 사용을 고려해 보" "십시오" -#: commands/trigger.c:3388 executor/nodeLockRows.c:225 +#: commands/trigger.c:3026 executor/nodeLockRows.c:225 #: executor/nodeLockRows.c:234 executor/nodeModifyTable.c:220 -#: executor/nodeModifyTable.c:824 executor/nodeModifyTable.c:1365 -#: executor/nodeModifyTable.c:1581 +#: executor/nodeModifyTable.c:856 executor/nodeModifyTable.c:1397 +#: executor/nodeModifyTable.c:1613 #, c-format msgid "could not serialize access due to concurrent update" msgstr "동시 업데이트 때문에 순차적 액세스가 불가능합니다" -#: commands/trigger.c:3396 executor/nodeModifyTable.c:914 -#: executor/nodeModifyTable.c:1435 executor/nodeModifyTable.c:1605 +#: commands/trigger.c:3034 executor/nodeModifyTable.c:946 +#: executor/nodeModifyTable.c:1467 executor/nodeModifyTable.c:1637 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "동시 삭제 작업 때문에 순차적 액세스가 불가능합니다" -#: commands/trigger.c:5457 +#: commands/trigger.c:5094 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "\"%s\" 제약 조건은 DEFERRABLE 속성으로 만들어지지 않았습니다" -#: commands/trigger.c:5480 +#: commands/trigger.c:5117 #, c-format msgid "constraint \"%s\" does not exist" msgstr "\"%s\" 이름의 제약 조건이 없음" -#: commands/tsearchcmds.c:115 commands/tsearchcmds.c:686 +#: commands/tsearchcmds.c:118 commands/tsearchcmds.c:683 #, c-format msgid "function %s should return type %s" msgstr "%s 함수는 %s 자료형을 반환해야 함" -#: commands/tsearchcmds.c:192 +#: commands/tsearchcmds.c:195 #, c-format msgid "must be superuser to create text search parsers" msgstr "슈퍼유저만 전문 검색 파서를 만들 수 있음" -#: commands/tsearchcmds.c:245 +#: commands/tsearchcmds.c:248 #, c-format msgid "text search parser parameter \"%s\" not recognized" msgstr "\"%s\" 전문 검색 파서 매개 변수를 인식할 수 없음" -#: commands/tsearchcmds.c:255 +#: commands/tsearchcmds.c:258 #, c-format msgid "text search parser start method is required" msgstr "텍스트 검색 파서 start 메서드가 필요함" -#: commands/tsearchcmds.c:260 +#: commands/tsearchcmds.c:263 #, c-format msgid "text search parser gettoken method is required" msgstr "텍스트 검색 파서 gettoken 메서드가 필요함" -#: commands/tsearchcmds.c:265 +#: commands/tsearchcmds.c:268 #, c-format msgid "text search parser end method is required" msgstr "텍스트 검색 파서 end 메서드가 필요함" -#: commands/tsearchcmds.c:270 +#: commands/tsearchcmds.c:273 #, c-format msgid "text search parser lextypes method is required" msgstr "텍스트 검색 파서 lextypes 메서드가 필요함" -#: commands/tsearchcmds.c:387 +#: commands/tsearchcmds.c:390 #, c-format msgid "text search template \"%s\" does not accept options" msgstr "\"%s\" 전문 검색 템플릿이 옵션을 수락하지 않음" -#: commands/tsearchcmds.c:461 +#: commands/tsearchcmds.c:464 #, c-format msgid "text search template is required" msgstr "전문 검색 템플릿이 필요함" -#: commands/tsearchcmds.c:753 +#: commands/tsearchcmds.c:750 #, c-format msgid "must be superuser to create text search templates" msgstr "슈퍼유저만 전문 검색 템플릿을 만들 수 있음" -#: commands/tsearchcmds.c:795 +#: commands/tsearchcmds.c:792 #, c-format msgid "text search template parameter \"%s\" not recognized" msgstr "\"%s\" 전문 검색 템플릿 매개 변수를 인식할 수 없음" -#: commands/tsearchcmds.c:805 +#: commands/tsearchcmds.c:802 #, c-format msgid "text search template lexize method is required" msgstr "전문 검색 템플릿 lexize 메서드가 필요함" -#: commands/tsearchcmds.c:1009 +#: commands/tsearchcmds.c:1006 #, c-format msgid "text search configuration parameter \"%s\" not recognized" msgstr "\"%s\" 전문 검색 구성 매개 변수를 인식할 수 없음" -#: commands/tsearchcmds.c:1016 +#: commands/tsearchcmds.c:1013 #, c-format msgid "cannot specify both PARSER and COPY options" msgstr "PARSER 옵션과 COPY 옵션을 모두 지정할 수 없음" -#: commands/tsearchcmds.c:1052 +#: commands/tsearchcmds.c:1049 #, c-format msgid "text search parser is required" msgstr "전문 검색 파서가 필요함" -#: commands/tsearchcmds.c:1276 +#: commands/tsearchcmds.c:1273 #, c-format msgid "token type \"%s\" does not exist" msgstr "\"%s\" 토큰 형식이 없음" -#: commands/tsearchcmds.c:1503 +#: commands/tsearchcmds.c:1500 #, c-format msgid "mapping for token type \"%s\" does not exist" msgstr "\"%s\" 토큰 형식에 대한 매핑이 없음" -#: commands/tsearchcmds.c:1509 +#: commands/tsearchcmds.c:1506 #, c-format msgid "mapping for token type \"%s\" does not exist, skipping" msgstr "\"%s\" 토큰 형식에 대한 매핑이 없음, 건너뜀" -#: commands/tsearchcmds.c:1664 commands/tsearchcmds.c:1775 +#: commands/tsearchcmds.c:1669 commands/tsearchcmds.c:1784 #, c-format msgid "invalid parameter list format: \"%s\"" msgstr "잘못된 매개 변수 목록 형식: \"%s\"" -#: commands/typecmds.c:184 +#: commands/typecmds.c:206 #, c-format msgid "must be superuser to create a base type" msgstr "슈퍼유저만 기본 형식을 만들 수 있음" -#: commands/typecmds.c:291 commands/typecmds.c:1467 +#: commands/typecmds.c:264 +#, c-format +msgid "" +"Create the type as a shell type, then create its I/O functions, then do a " +"full CREATE TYPE." +msgstr "" + +#: commands/typecmds.c:314 commands/typecmds.c:1394 commands/typecmds.c:3832 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "잘못된 \"%s\" 속성의 자료형" -#: commands/typecmds.c:347 +#: commands/typecmds.c:370 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "\"%s\" 형식 범주가 잘못됨: 단순 ASCII여야 함" -#: commands/typecmds.c:366 +#: commands/typecmds.c:389 #, c-format msgid "array element type cannot be %s" msgstr "배열 요소의 자료형으로 %s 자료형을 사용할 수 없습니다" -#: commands/typecmds.c:398 +#: commands/typecmds.c:421 #, c-format msgid "alignment \"%s\" not recognized" msgstr "잘못된 ALIGNMENT 값: \"%s\"" -#: commands/typecmds.c:415 +#: commands/typecmds.c:438 commands/typecmds.c:3718 #, c-format msgid "storage \"%s\" not recognized" msgstr "잘못된 STORAGE 값: \"%s\"" -#: commands/typecmds.c:426 +#: commands/typecmds.c:449 #, c-format msgid "type input function must be specified" msgstr "자료형 입력 함수를 지정하십시오" -#: commands/typecmds.c:430 +#: commands/typecmds.c:453 #, c-format msgid "type output function must be specified" msgstr "자료형 출력 함수를 지정하십시오" -#: commands/typecmds.c:435 +#: commands/typecmds.c:458 #, c-format msgid "" "type modifier output function is useless without a type modifier input " "function" msgstr "형식 한정자 입력 함수가 없으면 형식 한정자 출력 함수는 의미가 없음" -#: commands/typecmds.c:465 -#, c-format -msgid "type input function %s must return type %s" -msgstr "자료형 %s 입력 함수의 %s 자료형을 반환해야합니다" - -#: commands/typecmds.c:482 -#, c-format -msgid "type output function %s must return type %s" -msgstr "%s 자료형 출력 함수는 %s 자료형을 반환해야합니다" - -#: commands/typecmds.c:491 -#, c-format -msgid "type receive function %s must return type %s" -msgstr "%s 자료형 receive 함수는 %s 자료형을 반환해야합니다" - -#: commands/typecmds.c:500 -#, c-format -msgid "type send function %s must return type %s" -msgstr "%s 자료형 전송 함수는 %s 자료형을 반환해야합니다" - -#: commands/typecmds.c:565 -#, c-format -msgid "type input function %s should not be volatile" -msgstr "%s 자료형 입력 함수는 volatile 특성이 없어야합니다" - -#: commands/typecmds.c:570 -#, c-format -msgid "type output function %s should not be volatile" -msgstr "%s 자료형 출력 함수는 volatile 특성이 없어야합니다" - -#: commands/typecmds.c:575 -#, c-format -msgid "type receive function %s should not be volatile" -msgstr "%s 자료형 수신 함수는 volatile 특성이 없어야합니다" - -#: commands/typecmds.c:580 -#, c-format -msgid "type send function %s should not be volatile" -msgstr "%s 자료형 송신 함수는 volatile 특성이 없어야합니다" - -#: commands/typecmds.c:585 -#, c-format -msgid "type modifier input function %s should not be volatile" -msgstr "%s 자료형 형변환 입력 함수는 volatile 특성이 없어야합니다" - -#: commands/typecmds.c:590 -#, c-format -msgid "type modifier output function %s should not be volatile" -msgstr "%s 자료형 형변환 출력 함수는 volatile 특성이 없어야합니다" - -#: commands/typecmds.c:817 +#: commands/typecmds.c:745 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "\"%s\" 자료형은 도메인의 기반 자료형이 아닙니다" -#: commands/typecmds.c:903 +#: commands/typecmds.c:837 #, c-format msgid "multiple default expressions" msgstr "default 표현식 여러개 있음" -#: commands/typecmds.c:966 commands/typecmds.c:975 +#: commands/typecmds.c:900 commands/typecmds.c:909 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "NULL/NOT NULL 조건이 함께 있음" -#: commands/typecmds.c:991 +#: commands/typecmds.c:925 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "도메인용 체크 제약 조건에는 NO INHERIT 옵션을 사용할 수 없음" -#: commands/typecmds.c:1000 commands/typecmds.c:2582 +#: commands/typecmds.c:934 commands/typecmds.c:2536 #, c-format msgid "unique constraints not possible for domains" msgstr "고유 제약 조건은 도메인 정의에 사용할 수 없음" -#: commands/typecmds.c:1006 commands/typecmds.c:2588 +#: commands/typecmds.c:940 commands/typecmds.c:2542 #, c-format msgid "primary key constraints not possible for domains" msgstr "기본키 제약 조건을 도메인 정의에 사용할 수 없음" -#: commands/typecmds.c:1012 commands/typecmds.c:2594 +#: commands/typecmds.c:946 commands/typecmds.c:2548 #, c-format msgid "exclusion constraints not possible for domains" msgstr "exclusion 제약 조건은 도메인에는 사용할 수 없음" -#: commands/typecmds.c:1018 commands/typecmds.c:2600 +#: commands/typecmds.c:952 commands/typecmds.c:2554 #, c-format msgid "foreign key constraints not possible for domains" msgstr "참조키(foreign key) 제약 조건은 도메인(domain) 정의에 사용할 수 없음" -#: commands/typecmds.c:1027 commands/typecmds.c:2609 +#: commands/typecmds.c:961 commands/typecmds.c:2563 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "도메인에 대해 제약 조건 지연을 지정할 수 없음" -#: commands/typecmds.c:1337 utils/cache/typcache.c:2340 +#: commands/typecmds.c:1271 utils/cache/typcache.c:2430 #, c-format msgid "%s is not an enum" msgstr "%s 개체는 나열형이 아님" -#: commands/typecmds.c:1475 +#: commands/typecmds.c:1402 #, c-format msgid "type attribute \"subtype\" is required" msgstr "\"subtype\" 속성이 필요함" -#: commands/typecmds.c:1480 +#: commands/typecmds.c:1407 #, c-format msgid "range subtype cannot be %s" msgstr "range subtype은 %s 아니여야 함" -#: commands/typecmds.c:1499 +#: commands/typecmds.c:1426 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "" "range 형에 정렬 규칙을 지정했지만, 소속 자료형이 그 정렬 규칙을 지원하지 않습" "니다" -#: commands/typecmds.c:1733 +#: commands/typecmds.c:1436 +#, c-format +msgid "cannot specify a canonical function without a pre-created shell type" +msgstr "미리 만들어진 쉘 타입 없는 canonical 함수를 지정할 수 없음" + +#: commands/typecmds.c:1437 +#, c-format +msgid "" +"Create the type as a shell type, then create its canonicalization function, " +"then do a full CREATE TYPE." +msgstr "" + +#: commands/typecmds.c:1648 +#, c-format +msgid "type input function %s has multiple matches" +msgstr "자료형 %s 입력 함수가 여러 개 있습니다" + +#: commands/typecmds.c:1666 +#, c-format +msgid "type input function %s must return type %s" +msgstr "자료형 %s 입력 함수의 %s 자료형을 반환해야합니다" + +#: commands/typecmds.c:1682 +#, c-format +msgid "type input function %s should not be volatile" +msgstr "%s 자료형 입력 함수는 volatile 특성이 없어야합니다" + +#: commands/typecmds.c:1710 +#, c-format +msgid "type output function %s must return type %s" +msgstr "%s 자료형 출력 함수는 %s 자료형을 반환해야합니다" + +#: commands/typecmds.c:1717 +#, c-format +msgid "type output function %s should not be volatile" +msgstr "%s 자료형 출력 함수는 volatile 특성이 없어야합니다" + +#: commands/typecmds.c:1746 +#, c-format +msgid "type receive function %s has multiple matches" +msgstr "%s 자료형 receive 함수가 여러 개 있습니다" + +#: commands/typecmds.c:1764 +#, c-format +msgid "type receive function %s must return type %s" +msgstr "%s 자료형 receive 함수는 %s 자료형을 반환해야합니다" + +#: commands/typecmds.c:1771 +#, c-format +msgid "type receive function %s should not be volatile" +msgstr "%s 자료형 수신 함수는 volatile 특성이 없어야합니다" + +#: commands/typecmds.c:1799 #, c-format -msgid "changing argument type of function %s from \"opaque\" to \"cstring\"" -msgstr "%s 함수의 인자 자료형을 \"opaque\"에서 \"cstring\"으로 바꿉니다" +msgid "type send function %s must return type %s" +msgstr "%s 자료형 전송 함수는 %s 자료형을 반환해야합니다" -#: commands/typecmds.c:1784 +#: commands/typecmds.c:1806 #, c-format -msgid "changing argument type of function %s from \"opaque\" to %s" -msgstr "%s 함수의 인자 자료형을 \"opaque\"에서 %s 자료형으로 바꿉니다" +msgid "type send function %s should not be volatile" +msgstr "%s 자료형 송신 함수는 volatile 특성이 없어야합니다" -#: commands/typecmds.c:1883 +#: commands/typecmds.c:1833 #, c-format msgid "typmod_in function %s must return type %s" msgstr "%s typmod_in 함수는 %s 자료형을 반환해야 함" -#: commands/typecmds.c:1910 +#: commands/typecmds.c:1840 +#, c-format +msgid "type modifier input function %s should not be volatile" +msgstr "%s 자료형 형변환 입력 함수는 volatile 특성이 없어야합니다" + +#: commands/typecmds.c:1867 #, c-format msgid "typmod_out function %s must return type %s" msgstr "%s typmod_out 함수는 %s 자료형을 반환해야 함" -#: commands/typecmds.c:1937 +#: commands/typecmds.c:1874 +#, c-format +msgid "type modifier output function %s should not be volatile" +msgstr "%s 자료형 형변환 출력 함수는 volatile 특성이 없어야합니다" + +#: commands/typecmds.c:1901 #, c-format msgid "type analyze function %s must return type %s" msgstr "%s 자료형 분석 함수는 %s 자료형을 반환해야 함" -#: commands/typecmds.c:1983 +#: commands/typecmds.c:1947 #, c-format msgid "" "You must specify an operator class for the range type or define a default " @@ -11362,52 +11665,52 @@ msgstr "" "subtype을 위한 기본 연산자 클래스나 range 자료형을 위한 하나의 연산자 클래스" "를 지정해야 합니다" -#: commands/typecmds.c:2014 +#: commands/typecmds.c:1978 #, c-format msgid "range canonical function %s must return range type" msgstr "%s 범위 기준 함수는 range 자료형을 반환해야합니다" -#: commands/typecmds.c:2020 +#: commands/typecmds.c:1984 #, c-format msgid "range canonical function %s must be immutable" msgstr "%s 범위 기준 함수는 immutable 속성이어야 합니다" -#: commands/typecmds.c:2056 +#: commands/typecmds.c:2020 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "%s 범위 하위 자료 비교 함수는 %s 자료형을 반환해야합니다" -#: commands/typecmds.c:2063 +#: commands/typecmds.c:2027 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "%s 범위 하위 자료 비교 함수는 immutable 속성이어야 합니다" -#: commands/typecmds.c:2090 +#: commands/typecmds.c:2054 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때 pg_type 배열 OID 값이 지정되지 않았습니다" -#: commands/typecmds.c:2398 +#: commands/typecmds.c:2352 #, c-format msgid "column \"%s\" of table \"%s\" contains null values" msgstr "\"%s\" 열(해당 테이블 \"%s\")의 자료 가운데 null 값이 있습니다" -#: commands/typecmds.c:2511 commands/typecmds.c:2713 +#: commands/typecmds.c:2465 commands/typecmds.c:2667 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "\"%s\" 제약 조건 \"%s\" 도메인에 포함되어 있지 않습니다." -#: commands/typecmds.c:2515 +#: commands/typecmds.c:2469 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "\"%s\" 제약 조건 \"%s\" 도메인에 포함되어 있지 않음, 건너뜀" -#: commands/typecmds.c:2720 +#: commands/typecmds.c:2674 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "\"%s\" 제약 조건(해당 도메인: \"%s\")은 check 제약조건이 아님" -#: commands/typecmds.c:2826 +#: commands/typecmds.c:2780 #, c-format msgid "" "column \"%s\" of table \"%s\" contains values that violate the new constraint" @@ -11415,47 +11718,67 @@ msgstr "" "\"%s\" 열(해당 테이블 \"%s\")의 자료 중에, 새 제약 조건을 위반하는 자료가 있" "습니다" -#: commands/typecmds.c:3055 commands/typecmds.c:3253 commands/typecmds.c:3335 -#: commands/typecmds.c:3522 +#: commands/typecmds.c:3009 commands/typecmds.c:3207 commands/typecmds.c:3289 +#: commands/typecmds.c:3476 #, c-format msgid "%s is not a domain" msgstr "\"%s\" 이름의 개체는 도메인이 아닙니다" -#: commands/typecmds.c:3087 +#: commands/typecmds.c:3041 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "\"%s\" 제약 조건이 \"%s\" 도메인에 이미 지정되어 있습니다" -#: commands/typecmds.c:3138 +#: commands/typecmds.c:3092 #, c-format msgid "cannot use table references in domain check constraint" msgstr "도메인 용 체크 제약 조건에서는 테이블 참조를 사용할 수 없습니다" -#: commands/typecmds.c:3265 commands/typecmds.c:3347 commands/typecmds.c:3639 +#: commands/typecmds.c:3219 commands/typecmds.c:3301 commands/typecmds.c:3593 #, c-format msgid "%s is a table's row type" msgstr "%s 자료형은 테이블의 행 자료형(row type)입니다" -#: commands/typecmds.c:3267 commands/typecmds.c:3349 commands/typecmds.c:3641 +#: commands/typecmds.c:3221 commands/typecmds.c:3303 commands/typecmds.c:3595 #, c-format msgid "Use ALTER TABLE instead." msgstr "대신 ALTER TABLE을 사용하십시오." -#: commands/typecmds.c:3274 commands/typecmds.c:3356 commands/typecmds.c:3554 +#: commands/typecmds.c:3228 commands/typecmds.c:3310 commands/typecmds.c:3508 #, c-format msgid "cannot alter array type %s" msgstr "%s 배열 형식을 변경할 수 없음" -#: commands/typecmds.c:3276 commands/typecmds.c:3358 commands/typecmds.c:3556 +#: commands/typecmds.c:3230 commands/typecmds.c:3312 commands/typecmds.c:3510 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "%s 형식을 변경할 수 있으며, 이렇게 하면 배열 형식도 변경됩니다." -#: commands/typecmds.c:3624 +#: commands/typecmds.c:3578 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "%s 자료형이 이미 \"%s\" 스키마 안에 있습니다" +#: commands/typecmds.c:3746 +#, c-format +msgid "cannot change type's storage to PLAIN" +msgstr "저장 옵션을 PLAIN으로 바꿀 수 없음" + +#: commands/typecmds.c:3827 +#, c-format +msgid "type attribute \"%s\" cannot be changed" +msgstr "\"%s\" 자료형 속성 바꿀 수 없음" + +#: commands/typecmds.c:3845 +#, c-format +msgid "must be superuser to alter a type" +msgstr "슈퍼유저만 자료형 속성을 바꿀 수 있음" + +#: commands/typecmds.c:3866 commands/typecmds.c:3876 +#, c-format +msgid "%s is not a base type" +msgstr "\"%s\" 개체는 기본 자료형이 아님" + #: commands/user.c:140 #, c-format msgid "SYSID can no longer be specified" @@ -11471,7 +11794,7 @@ msgstr "새 슈퍼유저를 만드려면 슈퍼유져여야만 합니다" msgid "must be superuser to create replication users" msgstr "새 복제작업용 사용자를 만드려면 슈퍼유저여야만 합니다" -#: commands/user.c:308 commands/user.c:723 +#: commands/user.c:308 commands/user.c:734 #, c-format msgid "must be superuser to change bypassrls attribute" msgstr "슈퍼유저만 bypassrls 속성을 바꿀 수 있음" @@ -11481,23 +11804,23 @@ msgstr "슈퍼유저만 bypassrls 속성을 바꿀 수 있음" msgid "permission denied to create role" msgstr "롤 만들 권한 없음" -#: commands/user.c:325 commands/user.c:1213 commands/user.c:1220 -#: utils/adt/acl.c:5342 utils/adt/acl.c:5348 gram.y:14896 gram.y:14934 +#: commands/user.c:325 commands/user.c:1224 commands/user.c:1231 +#: utils/adt/acl.c:5327 utils/adt/acl.c:5333 gram.y:15146 gram.y:15184 #, c-format msgid "role name \"%s\" is reserved" msgstr "\"%s\" 롤 이름은 내부적으로 사용되고 있습니다" -#: commands/user.c:327 commands/user.c:1215 commands/user.c:1222 +#: commands/user.c:327 commands/user.c:1226 commands/user.c:1233 #, c-format msgid "Role names starting with \"pg_\" are reserved." msgstr "\"pg_\"로 시작하는 롤 이름은 사용할 수 없습니다." -#: commands/user.c:348 commands/user.c:1237 +#: commands/user.c:348 commands/user.c:1248 #, c-format msgid "role \"%s\" already exists" msgstr "\"%s\" 롤 이름이 이미 있습니다" -#: commands/user.c:414 commands/user.c:832 +#: commands/user.c:414 commands/user.c:843 #, c-format msgid "empty string is not a valid password, clearing password" msgstr "비밀번호로 빈 문자열을 사용할 수 없습니다. 비밀번호를 없앱니다" @@ -11507,219 +11830,234 @@ msgstr "비밀번호로 빈 문자열을 사용할 수 없습니다. 비밀번 msgid "pg_authid OID value not set when in binary upgrade mode" msgstr "이진 업그레이드 작업 때 pg_authid OID 값이 지정되지 않았습니다" -#: commands/user.c:709 commands/user.c:933 commands/user.c:1476 -#: commands/user.c:1620 +#: commands/user.c:720 commands/user.c:944 commands/user.c:1485 +#: commands/user.c:1627 #, c-format msgid "must be superuser to alter superusers" msgstr "슈퍼유저의 속성을 변경하련 슈퍼유져여야만 합니다" -#: commands/user.c:716 +#: commands/user.c:727 #, c-format msgid "must be superuser to alter replication users" msgstr "복제작업용 사용자의 속성을 변경하련 슈퍼유져여야만 합니다" -#: commands/user.c:739 commands/user.c:940 +#: commands/user.c:750 commands/user.c:951 #, c-format msgid "permission denied" msgstr "권한 없음" -#: commands/user.c:970 +#: commands/user.c:981 #, c-format msgid "must be superuser to alter settings globally" msgstr "슈퍼유저만 전역 환경 설정을 바꿀 수 있습니다." -#: commands/user.c:992 +#: commands/user.c:1003 #, c-format msgid "permission denied to drop role" msgstr "롤을 삭제할 권한이 없습니다" -#: commands/user.c:1017 +#: commands/user.c:1028 #, c-format msgid "cannot use special role specifier in DROP ROLE" msgstr "DROP ROLE 명령으로 삭제할 수 없는 특별한 롤입니다" -#: commands/user.c:1027 commands/user.c:1184 commands/variable.c:770 -#: commands/variable.c:844 utils/adt/acl.c:5199 utils/adt/acl.c:5246 -#: utils/adt/acl.c:5274 utils/adt/acl.c:5292 utils/init/miscinit.c:607 +#: commands/user.c:1038 commands/user.c:1195 commands/variable.c:770 +#: commands/variable.c:844 utils/adt/acl.c:5184 utils/adt/acl.c:5231 +#: utils/adt/acl.c:5259 utils/adt/acl.c:5277 utils/init/miscinit.c:675 #, c-format msgid "role \"%s\" does not exist" msgstr "\"%s\" 롤(role) 없음" -#: commands/user.c:1032 +#: commands/user.c:1043 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "\"%s\" 룰(rule) 없음, 건너 뜀" -#: commands/user.c:1045 commands/user.c:1049 +#: commands/user.c:1056 commands/user.c:1060 #, c-format msgid "current user cannot be dropped" msgstr "현재 사용자는 삭제 될 수 없습니다" -#: commands/user.c:1053 +#: commands/user.c:1064 #, c-format msgid "session user cannot be dropped" msgstr "세션 사용자는 삭제 될 수 없습니다" -#: commands/user.c:1063 +#: commands/user.c:1074 #, c-format msgid "must be superuser to drop superusers" msgstr "superuser를 사용자를 삭제하려면 superuser여야만 합니다" -#: commands/user.c:1079 +#: commands/user.c:1090 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "기타 다른 개체들이 이 롤에 의존하고 있어, \"%s\" 롤을 삭제할 수 없음" -#: commands/user.c:1200 +#: commands/user.c:1211 #, c-format msgid "session user cannot be renamed" msgstr "세션 사용자의 이름은 바꿀 수 없습니다" -#: commands/user.c:1204 +#: commands/user.c:1215 #, c-format msgid "current user cannot be renamed" msgstr "현재 사용자의 이름은 바꿀 수 없습니다" -#: commands/user.c:1247 +#: commands/user.c:1258 #, c-format msgid "must be superuser to rename superusers" msgstr "superuser의 이름을 바꾸려면 superuser여야 합니다" -#: commands/user.c:1254 +#: commands/user.c:1265 #, c-format msgid "permission denied to rename role" msgstr "롤 이름 바꾸기 권한 없음" -#: commands/user.c:1275 +#: commands/user.c:1286 #, c-format msgid "MD5 password cleared because of role rename" msgstr "롤 이름이 변경 되어 MD5 암호를 지웠습니다" -#: commands/user.c:1335 +#: commands/user.c:1346 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "GRANT/REVOKE ROLE에 열 이름을 포함할 수 없음" -#: commands/user.c:1373 +#: commands/user.c:1384 #, c-format msgid "permission denied to drop objects" msgstr "개체를 삭제할 권한이 없음" -#: commands/user.c:1400 commands/user.c:1409 +#: commands/user.c:1411 commands/user.c:1420 #, c-format msgid "permission denied to reassign objects" msgstr "개체 권한을 재 지정할 권한이 없음" -#: commands/user.c:1484 commands/user.c:1628 +#: commands/user.c:1493 commands/user.c:1635 #, c-format msgid "must have admin option on role \"%s\"" msgstr "\"%s\" 역할에 admin 옵션이 있어야 함" -#: commands/user.c:1501 +#: commands/user.c:1510 #, c-format msgid "must be superuser to set grantor" msgstr "grantor(?)를 지정하려면 슈퍼유져여야합니다" -#: commands/user.c:1526 +#: commands/user.c:1535 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "\"%s\" 롤은 \"%s\" 롤의 구성원입니다" -#: commands/user.c:1541 +#: commands/user.c:1550 #, c-format msgid "role \"%s\" is already a member of role \"%s\"" msgstr "role \"%s\" is already a member of role \"%s\"" -#: commands/user.c:1650 +#: commands/user.c:1657 #, c-format msgid "role \"%s\" is not a member of role \"%s\"" msgstr "\"%s\" 롤은 \"%s\"롤의 구성원이 아닙니다" -#: commands/vacuum.c:116 +#: commands/vacuum.c:129 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "알 수 없는 ANALYZE 옵션: \"%s\"" -#: commands/vacuum.c:135 +#: commands/vacuum.c:151 +#, c-format +msgid "parallel option requires a value between 0 and %d" +msgstr "병렬 옵션은 0부터 %d까지 값만 사용할 수 있음" + +#: commands/vacuum.c:163 +#, c-format +msgid "parallel vacuum degree must be between 0 and %d" +msgstr "병렬 청소 작업수는 0부터 %d까지 값만 사용할 수 있음" + +#: commands/vacuum.c:180 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "알 수 없는 VACUUM 옵션 \"%s\"" -#: commands/vacuum.c:169 +#: commands/vacuum.c:203 +#, c-format +msgid "VACUUM FULL cannot be performed in parallel" +msgstr "" + +#: commands/vacuum.c:219 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "ANALYZE 옵션은 칼럼 목록이 제공될 때 사용할 수 있습니다" -#: commands/vacuum.c:259 +#: commands/vacuum.c:309 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s 명령은 VACUUM, ANALYZE 명령에서 실행 될 수 없음" -#: commands/vacuum.c:269 +#: commands/vacuum.c:319 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "" "VACUUM 명령에서 DISABLE_PAGE_SKIPPING 옵션과 FULL 옵션을 함께 사용할 수 없습" "니다." -#: commands/vacuum.c:511 +#: commands/vacuum.c:560 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "\"%s\" 건너뜀 --- 슈퍼유저만 청소할 수 있음" -#: commands/vacuum.c:515 +#: commands/vacuum.c:564 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "\"%s\" 건너뜀 --- 슈퍼유저 또는 데이터베이스 소유주만 청소할 수 있음" -#: commands/vacuum.c:519 +#: commands/vacuum.c:568 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "\"%s\" 건너뜀 --- 이 테이블이나 데이터베이스의 소유주만 청소할 수 있음" -#: commands/vacuum.c:534 +#: commands/vacuum.c:583 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "\"%s\" 분석 건너뜀 --- 슈퍼유저만 분석할 수 있음" -#: commands/vacuum.c:538 +#: commands/vacuum.c:587 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "" "\"%s\" 분석 건너뜀 --- 슈퍼유저 또는 데이터베이스 소유주만 분석할 수 있음" -#: commands/vacuum.c:542 +#: commands/vacuum.c:591 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "\"%s\" 건너뜀 --- 테이블이나 데이터베이스 소유주만이 분석할 수 있음" -#: commands/vacuum.c:621 commands/vacuum.c:717 +#: commands/vacuum.c:670 commands/vacuum.c:766 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "\"%s\" 개체 vacuum 건너뜀 --- 사용 가능한 잠금이 없음" -#: commands/vacuum.c:626 +#: commands/vacuum.c:675 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "\"%s\" 개체 vacuum 건너뜀 --- 해당 릴레이션 없음" -#: commands/vacuum.c:642 commands/vacuum.c:722 +#: commands/vacuum.c:691 commands/vacuum.c:771 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "\"%s\" 분석 건너뜀 --- 잠글 수 없음" -#: commands/vacuum.c:647 +#: commands/vacuum.c:696 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "\"%s\" 분석 건너뜀 --- 릴레이션어 없음" # # search5 부분 -#: commands/vacuum.c:945 +#: commands/vacuum.c:994 #, c-format msgid "oldest xmin is far in the past" msgstr "가장 오래된 xmin이 너무 옛날 것입니다." -#: commands/vacuum.c:946 +#: commands/vacuum.c:995 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -11732,12 +12070,12 @@ msgstr "" "합니다." # # search5 부분 -#: commands/vacuum.c:987 +#: commands/vacuum.c:1036 #, c-format msgid "oldest multixact is far in the past" msgstr "가장 오래된 multixact 값이 너무 옛날 것입니다." -#: commands/vacuum.c:988 +#: commands/vacuum.c:1037 #, c-format msgid "" "Close open transactions with multixacts soon to avoid wraparound problems." @@ -11745,26 +12083,26 @@ msgstr "" "멀티 트랜잭션 ID 겹침 사고를 막기 위해 빨리 열린 멀티 트랜잭션들을 닫으십시" "오." -#: commands/vacuum.c:1563 +#: commands/vacuum.c:1623 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "" "몇몇 데이터베이스가 20억 이상의 트랜잭션을 처리했음에도 불구하고 청소가되지 " "않았습니다" -#: commands/vacuum.c:1564 +#: commands/vacuum.c:1624 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "이미 트래잭션 ID 겹침 현상으로 자료 손실이 발생했을 수도 있습니다." -#: commands/vacuum.c:1722 +#: commands/vacuum.c:1784 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "" "\"%s\" 건너뜀 --- 테이블이 아닌 것 또는 특별 시스템 테이블 등은 청소할 수 없" "음" -#: commands/variable.c:165 utils/misc/guc.c:10928 utils/misc/guc.c:10990 +#: commands/variable.c:165 utils/misc/guc.c:11156 utils/misc/guc.c:11218 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "알 수 없는 키워드: \"%s\"" @@ -11824,7 +12162,7 @@ msgstr "쿼리보다 먼저 SET TRANSACTION ISOLATION LEVEL을 호출해야 함" msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" msgstr "하위 트랜잭션에서 SET TRANSACTION ISOLATION LEVEL을 호출하지 않아야 함" -#: commands/variable.c:548 storage/lmgr/predicate.c:1626 +#: commands/variable.c:548 storage/lmgr/predicate.c:1623 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "읽기 전용 보조 서버 상태에서는 serializable 모드를 사용할 수 없음" @@ -11866,58 +12204,54 @@ msgstr "병렬 작업 중에는 client_encoding 설정을 할 수 없음" msgid "permission denied to set role \"%s\"" msgstr "\"%s\" 롤 권한을 지정할 수 없음" -#: commands/view.c:54 -#, c-format -msgid "invalid value for \"check_option\" option" -msgstr "\"check_option\" 옵션값이 잘못됨" - -#: commands/view.c:55 -#, c-format -msgid "Valid values are \"local\" and \"cascaded\"." -msgstr "사용할 수 있는 값은 \"local\" 또는 \"cascaded\" 입니다" - -#: commands/view.c:103 +#: commands/view.c:84 #, c-format msgid "could not determine which collation to use for view column \"%s\"" msgstr "\"%s\" 칼럼 자료 처리를 위한 정렬 규칙을 결정할 수 없음" -#: commands/view.c:280 commands/view.c:291 +#: commands/view.c:265 commands/view.c:276 #, c-format msgid "cannot drop columns from view" msgstr "뷰에서 칼럼을 삭제할 수 없음" -#: commands/view.c:296 +#: commands/view.c:281 #, c-format msgid "cannot change name of view column \"%s\" to \"%s\"" msgstr "뷰에서 \"%s\" 칼럼 이름을 \"%s\"(으)로 바꿀 수 없음" -#: commands/view.c:304 +#: commands/view.c:284 +#, c-format +msgid "" +"Use ALTER VIEW ... RENAME COLUMN ... to change name of view column instead." +msgstr "" + +#: commands/view.c:290 #, c-format msgid "cannot change data type of view column \"%s\" from %s to %s" msgstr "뷰에서 \"%s\" 칼럼 자료형을을 %s에서 %s(으)로 바꿀 수 없음" -#: commands/view.c:451 +#: commands/view.c:441 #, c-format msgid "views must not contain SELECT INTO" msgstr "뷰에는 SELECT INTO 구문을 포함할 수 없음" -#: commands/view.c:463 +#: commands/view.c:453 #, c-format msgid "views must not contain data-modifying statements in WITH" msgstr "뷰로 사용될 쿼리의 WITH 절에는 자료 변경 구문이 있으면 안됩니다." -#: commands/view.c:533 +#: commands/view.c:523 #, c-format msgid "CREATE VIEW specifies more column names than columns" msgstr "CREATE VIEW 는 columns 보다는 좀더 많은 열 이름을 명시해야 한다" -#: commands/view.c:541 +#: commands/view.c:531 #, c-format msgid "views cannot be unlogged because they do not have storage" msgstr "" "뷰는 저장 공간을 사용하지 않기 때문에 unlogged 속성을 지정할 수 없습니다." -#: commands/view.c:555 +#: commands/view.c:545 #, c-format msgid "view \"%s\" will be a temporary view" msgstr "\"%s\" 뷰는 임시적인 뷰로 만들어집니다" @@ -11955,76 +12289,76 @@ msgstr "\"%s\" 커서가 로우에 놓여 있지 않음" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "\"%s\" 커서는 \"%s\" 테이블의 단순 업데이트 가능한 스캔이 아님" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2321 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2404 #, c-format msgid "" "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "" "%d번째 매개 변수의 자료형(%s)이 미리 준비된 실행계획의 자료형(%s)과 다릅니다" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2333 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2416 #, c-format msgid "no value found for parameter %d" msgstr "%d번째 매개 변수 값이 없습니다" -#: executor/execExpr.c:857 parser/parse_agg.c:816 +#: executor/execExpr.c:859 parser/parse_agg.c:816 #, c-format msgid "window function calls cannot be nested" msgstr "윈도우 함수 호출을 중첩할 수 없음" -#: executor/execExpr.c:1316 +#: executor/execExpr.c:1318 #, c-format msgid "target type is not an array" msgstr "대상 자료형이 배열이 아닙니다." -#: executor/execExpr.c:1649 +#: executor/execExpr.c:1651 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "ROW() 칼럼은 %s 자료형을 가집니다. %s 자료형 대신에" -#: executor/execExpr.c:2174 executor/execSRF.c:700 parser/parse_func.c:136 -#: parser/parse_func.c:650 parser/parse_func.c:1024 +#: executor/execExpr.c:2176 executor/execSRF.c:708 parser/parse_func.c:135 +#: parser/parse_func.c:646 parser/parse_func.c:1020 #, c-format msgid "cannot pass more than %d argument to a function" msgid_plural "cannot pass more than %d arguments to a function" msgstr[0] "함수에 최대 %d개의 인자를 전달할 수 있음" -#: executor/execExpr.c:2572 executor/execExpr.c:2578 -#: executor/execExprInterp.c:2650 utils/adt/arrayfuncs.c:261 -#: utils/adt/arrayfuncs.c:559 utils/adt/arrayfuncs.c:1301 -#: utils/adt/arrayfuncs.c:3347 utils/adt/arrayfuncs.c:5302 -#: utils/adt/arrayfuncs.c:5819 +#: executor/execExpr.c:2587 executor/execExpr.c:2593 +#: executor/execExprInterp.c:2730 utils/adt/arrayfuncs.c:262 +#: utils/adt/arrayfuncs.c:560 utils/adt/arrayfuncs.c:1302 +#: utils/adt/arrayfuncs.c:3348 utils/adt/arrayfuncs.c:5308 +#: utils/adt/arrayfuncs.c:5821 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "지정한 배열 크기(%d)가 최대치(%d)를 초과했습니다" -#: executor/execExprInterp.c:1871 +#: executor/execExprInterp.c:1894 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "%d 번째 속성(대상 자료형 %s)이 삭제되었음" -#: executor/execExprInterp.c:1877 +#: executor/execExprInterp.c:1900 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "%d 번째 속성(대상 자료형 %s)의 자료형이 잘못되었음" -#: executor/execExprInterp.c:1879 executor/execExprInterp.c:2923 -#: executor/execExprInterp.c:2970 +#: executor/execExprInterp.c:1902 executor/execExprInterp.c:3002 +#: executor/execExprInterp.c:3049 #, c-format msgid "Table has type %s, but query expects %s." msgstr "테이블에는 %s 자료형이지만, 쿼리에서는 %s 자료형입니다." -#: executor/execExprInterp.c:2411 +#: executor/execExprInterp.c:2494 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF 구문은 이 테이블 형 대상으로 지원하지 않습니다." -#: executor/execExprInterp.c:2628 +#: executor/execExprInterp.c:2708 #, c-format msgid "cannot merge incompatible arrays" msgstr "배열 형태가 서로 틀려 병합할 수 없습니다" -#: executor/execExprInterp.c:2629 +#: executor/execExprInterp.c:2709 #, c-format msgid "" "Array with element type %s cannot be included in ARRAY construct with " @@ -12033,54 +12367,54 @@ msgstr "" "%s 자료형의 요소로 구성된 배열은 %s 자료형의 요소로 구성된 ARRAY 구문에 포함" "될 수 없습니다." -#: executor/execExprInterp.c:2670 executor/execExprInterp.c:2700 +#: executor/execExprInterp.c:2750 executor/execExprInterp.c:2780 #, c-format msgid "" "multidimensional arrays must have array expressions with matching dimensions" msgstr "다차원 배열에는 일치하는 차원이 포함된 배열 식이 있어야 함" -#: executor/execExprInterp.c:2922 executor/execExprInterp.c:2969 +#: executor/execExprInterp.c:3001 executor/execExprInterp.c:3048 #, c-format msgid "attribute %d has wrong type" msgstr "%d 속성의 형식이 잘못됨" -#: executor/execExprInterp.c:3079 +#: executor/execExprInterp.c:3158 #, c-format msgid "array subscript in assignment must not be null" msgstr "배열 하위 스크립트로 지정하는 값으로 null 값을 사용할 수 없습니다" -#: executor/execExprInterp.c:3512 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3588 utils/adt/domains.c:149 #, c-format msgid "domain %s does not allow null values" msgstr "%s 도메인에서는 null 값을 허용하지 않습니다" -#: executor/execExprInterp.c:3527 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3603 utils/adt/domains.c:184 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "%s 도메인용 값이 \"%s\" 체크 제약 조건을 위반했습니다" -#: executor/execExprInterp.c:3898 executor/execExprInterp.c:3915 -#: executor/execExprInterp.c:4017 executor/nodeModifyTable.c:109 +#: executor/execExprInterp.c:3973 executor/execExprInterp.c:3990 +#: executor/execExprInterp.c:4091 executor/nodeModifyTable.c:109 #: executor/nodeModifyTable.c:120 executor/nodeModifyTable.c:137 #: executor/nodeModifyTable.c:145 #, c-format msgid "table row type and query-specified row type do not match" msgstr "테이블 행 형식과 쿼리 지정 행 형식이 일치하지 않음" -#: executor/execExprInterp.c:3899 +#: executor/execExprInterp.c:3974 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." msgstr[0] "" "테이블 행에는 %d개 속성이 포함되어 있는데 쿼리에는 %d개가 필요합니다." -#: executor/execExprInterp.c:3916 executor/nodeModifyTable.c:121 +#: executor/execExprInterp.c:3991 executor/nodeModifyTable.c:121 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "" "테이블에는 %s 형식이 있는데(서수 위치 %d) 쿼리에는 %s이(가) 필요합니다." -#: executor/execExprInterp.c:4018 executor/execSRF.c:959 +#: executor/execExprInterp.c:4092 executor/execSRF.c:967 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "서수 위치 %d의 삭제된 속성에서 실제 스토리지 불일치가 발생합니다." @@ -12134,14 +12468,14 @@ msgstr "\"%s\" 시퀀스를 바꿀 수 없음" msgid "cannot change TOAST relation \"%s\"" msgstr "\"%s\" TOAST 릴레이션을 바꿀 수 없음" -#: executor/execMain.c:1115 rewrite/rewriteHandler.c:2932 -#: rewrite/rewriteHandler.c:3704 +#: executor/execMain.c:1115 rewrite/rewriteHandler.c:2934 +#: rewrite/rewriteHandler.c:3708 #, c-format msgid "cannot insert into view \"%s\"" msgstr "\"%s\" 뷰에 자료를 입력할 수 없습니다" -#: executor/execMain.c:1117 rewrite/rewriteHandler.c:2935 -#: rewrite/rewriteHandler.c:3707 +#: executor/execMain.c:1117 rewrite/rewriteHandler.c:2937 +#: rewrite/rewriteHandler.c:3711 #, c-format msgid "" "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or " @@ -12150,14 +12484,14 @@ msgstr "" "뷰를 통해 자료를 입력하려면, INSTEAD OF INSERT 트리거나 ON INSERT DO INSTEAD " "룰을 사용하세요" -#: executor/execMain.c:1123 rewrite/rewriteHandler.c:2940 -#: rewrite/rewriteHandler.c:3712 +#: executor/execMain.c:1123 rewrite/rewriteHandler.c:2942 +#: rewrite/rewriteHandler.c:3716 #, c-format msgid "cannot update view \"%s\"" msgstr "\"%s\" 뷰로는 자료를 갱신할 수 없습니다" -#: executor/execMain.c:1125 rewrite/rewriteHandler.c:2943 -#: rewrite/rewriteHandler.c:3715 +#: executor/execMain.c:1125 rewrite/rewriteHandler.c:2945 +#: rewrite/rewriteHandler.c:3719 #, c-format msgid "" "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an " @@ -12166,14 +12500,14 @@ msgstr "" "뷰 자료 갱신 기능은 INSTEAD OF UPDATE 트리거를 사용하거나, ON UPDATE DO " "INSTEAD 속성으로 룰을 만들어서 사용해 보세요." -#: executor/execMain.c:1131 rewrite/rewriteHandler.c:2948 -#: rewrite/rewriteHandler.c:3720 +#: executor/execMain.c:1131 rewrite/rewriteHandler.c:2950 +#: rewrite/rewriteHandler.c:3724 #, c-format msgid "cannot delete from view \"%s\"" msgstr "\"%s\" 뷰로는 자료를 삭제할 수 없습니다" -#: executor/execMain.c:1133 rewrite/rewriteHandler.c:2951 -#: rewrite/rewriteHandler.c:3723 +#: executor/execMain.c:1133 rewrite/rewriteHandler.c:2953 +#: rewrite/rewriteHandler.c:3727 #, c-format msgid "" "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an " @@ -12242,7 +12576,7 @@ msgstr "\"%s\" 뷰에서 로우를 잠글 수 없음" msgid "cannot lock rows in materialized view \"%s\"" msgstr "\"%s\" 구체화된 뷰에서 로우를 잠글 수 없음" -#: executor/execMain.c:1257 executor/execMain.c:2629 +#: executor/execMain.c:1257 executor/execMain.c:2627 #: executor/nodeLockRows.c:132 #, c-format msgid "cannot lock rows in foreign table \"%s\"" @@ -12253,44 +12587,45 @@ msgstr "\"%s\" 외부 테이블에서 로우를 잠글 수 없음" msgid "cannot lock rows in relation \"%s\"" msgstr "\"%s\" 릴레이션에서 로우를 잠글 수 없음" -#: executor/execMain.c:1880 +#: executor/execMain.c:1879 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "새 자료가 \"%s\" 릴레이션의 파티션 제약 조건을 위반했습니다" -#: executor/execMain.c:1882 executor/execMain.c:1964 executor/execMain.c:2013 -#: executor/execMain.c:2122 +#: executor/execMain.c:1881 executor/execMain.c:1964 executor/execMain.c:2012 +#: executor/execMain.c:2120 #, c-format msgid "Failing row contains %s." msgstr "실패한 자료: %s" -#: executor/execMain.c:1962 +#: executor/execMain.c:1961 #, c-format -msgid "null value in column \"%s\" violates not-null constraint" -msgstr "\"%s\" 칼럼의 null 값이 not null 제약조건을 위반했습니다." +msgid "" +"null value in column \"%s\" of relation \"%s\" violates not-null constraint" +msgstr "\"%s\" 칼럼(해당 릴레이션 \"%s\")의 null 값이 not null 제약조건을 위반했습니다." -#: executor/execMain.c:2011 +#: executor/execMain.c:2010 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "새 자료가 \"%s\" 릴레이션의 \"%s\" 체크 제약 조건을 위반했습니다" -#: executor/execMain.c:2120 +#: executor/execMain.c:2118 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "새 자료가 \"%s\" 뷰의 체크 제약 조건을 위반했습니다" -#: executor/execMain.c:2130 +#: executor/execMain.c:2128 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "" "새 자료가 \"%s\" 로우 단위 보안 정책을 위반했습니다, 해당 테이블: \"%s\"" -#: executor/execMain.c:2135 +#: executor/execMain.c:2133 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "새 자료가 \"%s\" 테이블의 로우 단위 보안 정책을 위반했습니다." -#: executor/execMain.c:2142 +#: executor/execMain.c:2140 #, c-format msgid "" "new row violates row-level security policy \"%s\" (USING expression) for " @@ -12299,7 +12634,7 @@ msgstr "" "새 자료가 \"%s\" 로우 단위 보안 정책(USING 절 사용)을 위반했습니다, 해당 테이" "블: \"%s\"" -#: executor/execMain.c:2147 +#: executor/execMain.c:2145 #, c-format msgid "" "new row violates row-level security policy (USING expression) for table \"%s" @@ -12307,17 +12642,17 @@ msgid "" msgstr "" "새 자료가 \"%s\" 테이블의 로우 단위 보안 정책(USING 절 사용)을 위반했습니다." -#: executor/execPartition.c:345 +#: executor/execPartition.c:341 #, c-format msgid "no partition of relation \"%s\" found for row" msgstr "해당 로우를 위한 \"%s\" 릴레이션용 파티션이 없음" -#: executor/execPartition.c:348 +#: executor/execPartition.c:344 #, c-format msgid "Partition key of the failing row contains %s." msgstr "실패한 로우의 파티션 키 값: %s" -#: executor/execReplication.c:195 executor/execReplication.c:362 +#: executor/execReplication.c:196 executor/execReplication.c:373 #, c-format msgid "" "tuple to be locked was already moved to another partition due to concurrent " @@ -12325,26 +12660,26 @@ msgid "" msgstr "" "다른 업데이트 작업으로 잠굴 튜플이 이미 다른 파티션으로 이동되었음, 재시도함" -#: executor/execReplication.c:199 executor/execReplication.c:366 +#: executor/execReplication.c:200 executor/execReplication.c:377 #, c-format msgid "concurrent update, retrying" msgstr "동시 업데이트, 다시 시도 중" -#: executor/execReplication.c:205 executor/execReplication.c:372 +#: executor/execReplication.c:206 executor/execReplication.c:383 #, c-format msgid "concurrent delete, retrying" msgstr "동시 삭제, 다시 시도 중" -#: executor/execReplication.c:263 parser/parse_oper.c:228 +#: executor/execReplication.c:269 parser/parse_oper.c:228 #: utils/adt/array_userfuncs.c:719 utils/adt/array_userfuncs.c:858 -#: utils/adt/arrayfuncs.c:3625 utils/adt/arrayfuncs.c:4140 -#: utils/adt/arrayfuncs.c:6130 utils/adt/rowtypes.c:1180 +#: utils/adt/arrayfuncs.c:3626 utils/adt/arrayfuncs.c:4146 +#: utils/adt/arrayfuncs.c:6132 utils/adt/rowtypes.c:1182 #, c-format msgid "could not identify an equality operator for type %s" msgstr "" "%s 자료형에서 사용할 동등 연산자(equality operator)를 찾을 수 없습니다." -#: executor/execReplication.c:575 +#: executor/execReplication.c:586 #, c-format msgid "" "cannot update table \"%s\" because it does not have a replica identity and " @@ -12353,56 +12688,56 @@ msgstr "" "\"%s\" 테이블 업데이트 실패, 이 테이블에는 복제용 식별자를 지정하지 않았거" "나, updates 옵션 없이 발행했습니다" -#: executor/execReplication.c:577 +#: executor/execReplication.c:588 #, c-format msgid "To enable updating the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "" "업데이트를 하려면, ALTER TABLE 명령어에서 REPLICA IDENTITY 옵션을 사용하세요" -#: executor/execReplication.c:581 +#: executor/execReplication.c:592 #, c-format msgid "" "cannot delete from table \"%s\" because it does not have a replica identity " "and publishes deletes" msgstr "\"%s\" 테이블 자료 삭제 실패, 복제 식별자와 deletes 발행을 안함" -#: executor/execReplication.c:583 +#: executor/execReplication.c:594 #, c-format msgid "" "To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "삭제 하려면, ALTER TABLE 명령어에서 REPLICA IDENTITY 옵션을 사용하세요" -#: executor/execReplication.c:605 +#: executor/execReplication.c:613 executor/execReplication.c:621 #, c-format -msgid "\"%s.%s\" is a partitioned table." -msgstr "\"%s.%s\" 개체는 파티션된 테이블입니다." +msgid "cannot use relation \"%s.%s\" as logical replication target" +msgstr "\"%s.%s\" 릴레이션은 논리 복제 대상이 될 수 없음" -#: executor/execReplication.c:612 +#: executor/execReplication.c:615 #, c-format msgid "\"%s.%s\" is a foreign table." msgstr "\"%s.%s\" 개체는 외부 테이블입니다." -#: executor/execReplication.c:620 +#: executor/execReplication.c:623 #, c-format msgid "\"%s.%s\" is not a table." msgstr "\"%s.%s\" 개체는 테이블이 아닙니다." -#: executor/execSRF.c:310 +#: executor/execSRF.c:315 #, c-format msgid "rows returned by function are not all of the same row type" msgstr "함수 호출로 반환되는 로우가 같은 로우형의 전부가 아닙니다" -#: executor/execSRF.c:358 executor/execSRF.c:649 +#: executor/execSRF.c:363 executor/execSRF.c:657 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "materialize 모드를 위한 테이블 함수 프로토콜이 뒤이어 오지 않았습니다" -#: executor/execSRF.c:365 executor/execSRF.c:667 +#: executor/execSRF.c:370 executor/execSRF.c:675 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "알 수 없는 테이블-함수 리턴모드: %d" -#: executor/execSRF.c:876 +#: executor/execSRF.c:884 #, c-format msgid "" "function returning setof record called in context that cannot accept type " @@ -12410,88 +12745,79 @@ msgid "" msgstr "" "setof 레코드 반환 함수가 type 레코드를 허용하지 않는 컨텍스트에서 호출됨" -#: executor/execSRF.c:932 executor/execSRF.c:948 executor/execSRF.c:958 +#: executor/execSRF.c:940 executor/execSRF.c:956 executor/execSRF.c:966 #, c-format msgid "function return row and query-specified return row do not match" msgstr "함수 반환 행과 쿼리 지정 반환 행이 일치하지 않음" -#: executor/execSRF.c:933 +#: executor/execSRF.c:941 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." msgstr[0] "" "반환된 행에는 %d개 속성이 포함되어 있는데 쿼리에는 %d개가 필요합니다." -#: executor/execSRF.c:949 +#: executor/execSRF.c:957 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "반환된 형식은 %s인데(서수 위치 %d) 쿼리에는 %s이(가) 필요합니다." -#: executor/execUtils.c:710 +#: executor/execUtils.c:750 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "\"%s\" 구체화된 뷰가 아직 구체화되지 못했습니다." -#: executor/execUtils.c:712 +#: executor/execUtils.c:752 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "REFRESH MATERIALIZED VIEW 명령을 사용하세요." -#: executor/functions.c:225 +#: executor/functions.c:231 #, c-format msgid "could not determine actual type of argument declared %s" msgstr "%s 인자의 자료형으로 지정한 자료형의 기본 자료형을 찾을 수 없습니다" -#: executor/functions.c:521 +#: executor/functions.c:528 #, c-format msgid "cannot COPY to/from client in a SQL function" msgstr "SQL 함수에서 클라이언트 대상 COPY 작업을 할 수 없음" #. translator: %s is a SQL statement name -#: executor/functions.c:527 +#: executor/functions.c:534 #, c-format msgid "%s is not allowed in a SQL function" msgstr "SQL 함수에서 %s 지원되지 않음" #. translator: %s is a SQL statement name -#: executor/functions.c:535 executor/spi.c:1474 executor/spi.c:2262 +#: executor/functions.c:542 executor/spi.c:1471 executor/spi.c:2257 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s 구문은 비휘발성 함수(non-volatile function)에서 허용하지 않습니다" -#: executor/functions.c:656 -#, c-format -msgid "" -"could not determine actual result type for function declared to return type " -"%s" -msgstr "" -"%s 자료형을 반환한다고 정의한 함수인데, 실재 반환 자료형을 결정할 수 없습니" -"다." - -#: executor/functions.c:1407 +#: executor/functions.c:1430 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "SQL 함수 \"%s\"의 문 %d" -#: executor/functions.c:1433 +#: executor/functions.c:1456 #, c-format msgid "SQL function \"%s\" during startup" msgstr "시작 중 SQL 함수 \"%s\"" -#: executor/functions.c:1526 +#: executor/functions.c:1549 #, c-format msgid "" "calling procedures with output arguments is not supported in SQL functions" msgstr "출력 인자를 포함한 프로시져 호출은 SQL 함수에서 지원하지 않습니다." -#: executor/functions.c:1646 executor/functions.c:1679 -#: executor/functions.c:1691 executor/functions.c:1826 -#: executor/functions.c:1859 executor/functions.c:1889 +#: executor/functions.c:1671 executor/functions.c:1708 +#: executor/functions.c:1722 executor/functions.c:1812 +#: executor/functions.c:1845 executor/functions.c:1859 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "리턴 자료형이 함수 정의에서 지정한 %s 리턴 자료형과 틀립니다" -#: executor/functions.c:1648 +#: executor/functions.c:1673 #, c-format msgid "" "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." @@ -12499,79 +12825,80 @@ msgstr "" "함수 내용의 맨 마지막 구문은 SELECT 또는 INSERT/UPDATE/DELETE RETURNING이어" "야 합니다." -#: executor/functions.c:1681 +#: executor/functions.c:1710 #, c-format msgid "Final statement must return exactly one column." msgstr "맨 마지막 구문은 정확히 하나의 칼럼만 반환해야 합니다." -#: executor/functions.c:1693 +#: executor/functions.c:1724 #, c-format msgid "Actual return type is %s." msgstr "실재 반환 자료형은 %s" -#: executor/functions.c:1828 +#: executor/functions.c:1814 #, c-format msgid "Final statement returns too many columns." msgstr "맨 마지막 구문이 너무 많은 칼럼을 반환합니다." -#: executor/functions.c:1861 +#: executor/functions.c:1847 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "" "맨 마지막 구문이 %s(기대되는 자료형: %s) 자료형을 %d 번째 칼럼에서 반환합니" "다." -#: executor/functions.c:1891 +#: executor/functions.c:1861 #, c-format msgid "Final statement returns too few columns." msgstr "맨 마지막 구문이 너무 적은 칼럼을 반환합니다." -#: executor/functions.c:1945 +#: executor/functions.c:1889 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "반환 자료형인 %s 자료형은 SQL 함수에서 지원되지 않음" -#: executor/nodeAgg.c:2845 parser/parse_agg.c:655 parser/parse_agg.c:685 +#: executor/nodeAgg.c:3075 executor/nodeAgg.c:3084 executor/nodeAgg.c:3096 +#, c-format +msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" +msgstr "" + +#: executor/nodeAgg.c:4026 parser/parse_agg.c:655 parser/parse_agg.c:685 #, c-format msgid "aggregate function calls cannot be nested" msgstr "집계 함수는 중첩되어 호출 할 수 없음" -#: executor/nodeAgg.c:3050 executor/nodeWindowAgg.c:2835 +#: executor/nodeAgg.c:4234 executor/nodeWindowAgg.c:2836 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "%u OID 집계함수에 호환 가능한 입력 형식과 변환 형식이 있어야 함" -#: executor/nodeCustom.c:146 executor/nodeCustom.c:157 +#: executor/nodeCustom.c:145 executor/nodeCustom.c:156 #, c-format msgid "custom scan \"%s\" does not support MarkPos" msgstr "\"%s\" 이름의 칼럼 탐색은 MarkPos 기능을 지원하지 않음" #: executor/nodeHashjoin.c:1046 executor/nodeHashjoin.c:1076 #, c-format -msgid "could not rewind hash-join temporary file: %m" -msgstr "해시-조인 임시 파일을 되감을 수 없음: %m" +msgid "could not rewind hash-join temporary file" +msgstr "해시-조인 임시 파일을 되감을 수 없음" -#: executor/nodeHashjoin.c:1235 executor/nodeHashjoin.c:1241 +#: executor/nodeHashjoin.c:1272 executor/nodeHashjoin.c:1283 #, c-format -msgid "could not write to hash-join temporary file: %m" -msgstr "hash-join 임시 파일을 쓸 수 없습니다: %m" - -#: executor/nodeHashjoin.c:1282 executor/nodeHashjoin.c:1292 -#, c-format -msgid "could not read from hash-join temporary file: %m" -msgstr "해시-조인 임시 파일을 읽을 수 없음: %m" +msgid "" +"could not read from hash-join temporary file: read only %zu of %zu bytes" +msgstr "해시-조인 임시 파일을 읽을 수 없음: %zu / %zu 바이트만 읽음" #: executor/nodeIndexonlyscan.c:242 #, c-format msgid "lossy distance functions are not supported in index-only scans" msgstr "lossy distance 함수들은 인덱스 단독 탐색을 지원하지 않음" -#: executor/nodeLimit.c:262 +#: executor/nodeLimit.c:374 #, c-format msgid "OFFSET must not be negative" msgstr "OFFSET은 음수가 아니어야 함" -#: executor/nodeLimit.c:288 +#: executor/nodeLimit.c:400 #, c-format msgid "LIMIT must not be negative" msgstr "LIMIT는 음수가 아니어야 함" @@ -12601,31 +12928,31 @@ msgstr "쿼리에서 서수 위치 %d에 있는 삭제된 칼럼의 값을 제 msgid "Query has too few columns." msgstr "쿼리에 칼럼이 너무 적습니다." -#: executor/nodeModifyTable.c:807 executor/nodeModifyTable.c:881 +#: executor/nodeModifyTable.c:839 executor/nodeModifyTable.c:913 #, c-format msgid "" "tuple to be deleted was already modified by an operation triggered by the " "current command" msgstr "현재 명령으로 실행된 트리거 작업으로 지울 자료가 이미 바뀌었습니다." -#: executor/nodeModifyTable.c:1188 +#: executor/nodeModifyTable.c:1220 #, c-format msgid "invalid ON UPDATE specification" msgstr "잘못된 ON UPDATE 옵션" -#: executor/nodeModifyTable.c:1189 +#: executor/nodeModifyTable.c:1221 #, c-format msgid "" "The result tuple would appear in a different partition than the original " "tuple." msgstr "" -#: executor/nodeModifyTable.c:1560 +#: executor/nodeModifyTable.c:1592 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "" -#: executor/nodeModifyTable.c:1561 +#: executor/nodeModifyTable.c:1593 #, c-format msgid "" "Ensure that no rows proposed for insertion within the same command have " @@ -12642,63 +12969,63 @@ msgstr "TABLESAMPLE 절에는 반드시 부가 옵션값들이 있어야 합니 msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "TABLESAMPLE REPEATABLE 절은 더 이상의 부가 옵션을 쓰면 안됩니다." -#: executor/nodeSubplan.c:347 executor/nodeSubplan.c:386 -#: executor/nodeSubplan.c:1152 +#: executor/nodeSubplan.c:346 executor/nodeSubplan.c:385 +#: executor/nodeSubplan.c:1151 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "표현식에 사용된 서브쿼리 결과가 하나 이상의 행을 리턴했습니다" -#: executor/nodeTableFuncscan.c:378 +#: executor/nodeTableFuncscan.c:375 #, c-format msgid "namespace URI must not be null" msgstr "네임스페이스 URI 값은 null 일 수 없습니다." -#: executor/nodeTableFuncscan.c:392 +#: executor/nodeTableFuncscan.c:389 #, c-format msgid "row filter expression must not be null" msgstr "로우 필터 표현식은 null값이 아니여야 함" -#: executor/nodeTableFuncscan.c:418 +#: executor/nodeTableFuncscan.c:415 #, c-format msgid "column filter expression must not be null" msgstr "칼럼 필터 표현식은 null값이 아니여야 함" -#: executor/nodeTableFuncscan.c:419 +#: executor/nodeTableFuncscan.c:416 #, c-format msgid "Filter for column \"%s\" is null." msgstr "\"%s\" 칼럼용 필터가 null입니다." -#: executor/nodeTableFuncscan.c:509 +#: executor/nodeTableFuncscan.c:506 #, c-format msgid "null is not allowed in column \"%s\"" msgstr "\"%s\" 칼럼은 null 값을 허용하지 않습니다" -#: executor/nodeWindowAgg.c:354 +#: executor/nodeWindowAgg.c:355 #, c-format msgid "moving-aggregate transition function must not return null" msgstr "moving-aggregate transition 함수는 null 값을 반환하면 안됩니다." -#: executor/nodeWindowAgg.c:2057 +#: executor/nodeWindowAgg.c:2058 #, c-format msgid "frame starting offset must not be null" msgstr "프래임 시작 위치값으로 null 값을 사용할 수 없습니다." -#: executor/nodeWindowAgg.c:2070 +#: executor/nodeWindowAgg.c:2071 #, c-format msgid "frame starting offset must not be negative" msgstr "프래임 시작 위치으로 음수 값을 사용할 수 없습니다." -#: executor/nodeWindowAgg.c:2082 +#: executor/nodeWindowAgg.c:2083 #, c-format msgid "frame ending offset must not be null" msgstr "프래임 끝 위치값으로 null 값을 사용할 수 없습니다." -#: executor/nodeWindowAgg.c:2095 +#: executor/nodeWindowAgg.c:2096 #, c-format msgid "frame ending offset must not be negative" msgstr "프래임 끝 위치값으로 음수 값을 사용할 수 없습니다." -#: executor/nodeWindowAgg.c:2751 +#: executor/nodeWindowAgg.c:2752 #, c-format msgid "aggregate function %s does not support use as a window function" msgstr "%s 집계 함수는 윈도우 함수로 사용될 수 없습니다" @@ -12749,12 +13076,12 @@ msgstr "%s 쿼리로 커서를 열 수 없음." msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE는 지원되지 않음" -#: executor/spi.c:1446 parser/analyze.c:2493 +#: executor/spi.c:1446 parser/analyze.c:2508 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "스크롤 가능 커서는 READ ONLY여야 합니다." -#: executor/spi.c:2570 +#: executor/spi.c:2560 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL 구문: \"%s\"" @@ -12779,13 +13106,13 @@ msgstr "\"%s\" 옵션이 잘못됨" msgid "Valid options in this context are: %s" msgstr "이 컨텍스트에서 유효한 옵션: %s" -#: jit/jit.c:208 utils/fmgr/dfmgr.c:209 utils/fmgr/dfmgr.c:426 -#: utils/fmgr/dfmgr.c:474 +#: jit/jit.c:205 utils/fmgr/dfmgr.c:209 utils/fmgr/dfmgr.c:417 +#: utils/fmgr/dfmgr.c:465 #, c-format msgid "could not access file \"%s\": %m" msgstr "\"%s\" 파일에 액세스할 수 없음: %m" -#: jit/llvm/llvmjit.c:601 +#: jit/llvm/llvmjit.c:595 #, c-format msgid "time to inline: %.3fs, opt: %.3fs, emit: %.3fs" msgstr "" @@ -12796,31 +13123,27 @@ msgstr "" msgid "Failed on DSA request of size %zu." msgstr "크기가 %zu인 DSA 요청에서 오류가 발생했습니다." -#: lib/stringinfo.c:284 -#, c-format -msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." -msgstr "%d바이트가 포함된 문자열 버퍼를 %d바이트 더 확장할 수 없습니다." - #: libpq/auth-scram.c:248 #, c-format msgid "client selected an invalid SASL authentication mechanism" msgstr "클라이언트가 잘못된 SASL 인증 메카니즘을 선택했음" -#: libpq/auth-scram.c:269 libpq/auth-scram.c:509 libpq/auth-scram.c:518 +#: libpq/auth-scram.c:269 libpq/auth-scram.c:509 libpq/auth-scram.c:520 #, c-format -msgid "invalid SCRAM verifier for user \"%s\"" -msgstr "\"%s\" 사용자에 대한 잘못된 SCRAM 유요성 검사" +msgid "invalid SCRAM secret for user \"%s\"" +msgstr "\"%s\" 사용자에 대한 잘못된 SCRAM secret" #: libpq/auth-scram.c:280 #, c-format -msgid "User \"%s\" does not have a valid SCRAM verifier." -msgstr "\"%s\" 사용자용 바른 SCRAM 유효성 검사가 없습니다." +msgid "User \"%s\" does not have a valid SCRAM secret." +msgstr "\"%s\" 사용자용 바른 SCRAM secret이 없습니다." -#: libpq/auth-scram.c:358 libpq/auth-scram.c:363 libpq/auth-scram.c:676 -#: libpq/auth-scram.c:684 libpq/auth-scram.c:795 libpq/auth-scram.c:805 -#: libpq/auth-scram.c:913 libpq/auth-scram.c:920 libpq/auth-scram.c:935 -#: libpq/auth-scram.c:950 libpq/auth-scram.c:964 libpq/auth-scram.c:982 -#: libpq/auth-scram.c:997 libpq/auth-scram.c:1283 libpq/auth-scram.c:1291 +#: libpq/auth-scram.c:358 libpq/auth-scram.c:363 libpq/auth-scram.c:693 +#: libpq/auth-scram.c:701 libpq/auth-scram.c:806 libpq/auth-scram.c:819 +#: libpq/auth-scram.c:829 libpq/auth-scram.c:937 libpq/auth-scram.c:944 +#: libpq/auth-scram.c:959 libpq/auth-scram.c:974 libpq/auth-scram.c:988 +#: libpq/auth-scram.c:1006 libpq/auth-scram.c:1021 libpq/auth-scram.c:1321 +#: libpq/auth-scram.c:1329 #, c-format msgid "malformed SCRAM message" msgstr "SCRAM 메시지가 형식에 맞지 않습니다" @@ -12850,178 +13173,188 @@ msgstr "토큰 불일치" msgid "could not generate random salt" msgstr "무작위 솔트 생성 실패" -#: libpq/auth-scram.c:677 +#: libpq/auth-scram.c:694 #, c-format msgid "Expected attribute \"%c\" but found \"%s\"." msgstr "\"%c\" 속성이어야 하는데, \"%s\" 임." -#: libpq/auth-scram.c:685 libpq/auth-scram.c:806 +#: libpq/auth-scram.c:702 libpq/auth-scram.c:830 #, c-format msgid "Expected character \"=\" for attribute \"%c\"." msgstr "\"%c\" 속성에는 \"=\" 문자가 와야합니다." -#: libpq/auth-scram.c:796 +#: libpq/auth-scram.c:807 +#, c-format +msgid "Attribute expected, but found end of string." +msgstr "속성값이 와야하는데, 문자열 끝이 발견되었음." + +#: libpq/auth-scram.c:820 #, c-format msgid "Attribute expected, but found invalid character \"%s\"." msgstr "속성값이 와야하는데, \"%s\" 잘못된 문자가 발견되었음." -#: libpq/auth-scram.c:914 libpq/auth-scram.c:936 +#: libpq/auth-scram.c:938 libpq/auth-scram.c:960 #, c-format msgid "" "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not " "include channel binding data." msgstr "" -#: libpq/auth-scram.c:921 libpq/auth-scram.c:951 +#: libpq/auth-scram.c:945 libpq/auth-scram.c:975 #, c-format msgid "Comma expected, but found character \"%s\"." msgstr "쉼표가 와야하는데, \"%s\" 문자가 발견되었음." -#: libpq/auth-scram.c:942 +#: libpq/auth-scram.c:966 #, c-format msgid "SCRAM channel binding negotiation error" msgstr "" -#: libpq/auth-scram.c:943 +#: libpq/auth-scram.c:967 #, c-format msgid "" "The client supports SCRAM channel binding but thinks the server does not. " "However, this server does support channel binding." msgstr "" -#: libpq/auth-scram.c:965 +#: libpq/auth-scram.c:989 #, c-format msgid "" "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM " "message includes channel binding data." msgstr "" -#: libpq/auth-scram.c:976 +#: libpq/auth-scram.c:1000 #, c-format msgid "unsupported SCRAM channel-binding type \"%s\"" msgstr "지원하지 않는 SCRAM 채널 바인드 종류 \"%s\"" -#: libpq/auth-scram.c:983 +#: libpq/auth-scram.c:1007 #, c-format msgid "Unexpected channel-binding flag \"%s\"." msgstr "예상치 못한 채널 바인딩 플래그 \"%s\"." -#: libpq/auth-scram.c:993 +#: libpq/auth-scram.c:1017 #, c-format msgid "client uses authorization identity, but it is not supported" msgstr "" -#: libpq/auth-scram.c:998 +#: libpq/auth-scram.c:1022 #, c-format msgid "Unexpected attribute \"%s\" in client-first-message." msgstr "" -#: libpq/auth-scram.c:1014 +#: libpq/auth-scram.c:1038 #, c-format msgid "client requires an unsupported SCRAM extension" msgstr "" -#: libpq/auth-scram.c:1028 +#: libpq/auth-scram.c:1052 #, c-format msgid "non-printable characters in SCRAM nonce" msgstr "SCRAM 토큰에 인쇄할 수 없는 문자가 있음" -#: libpq/auth-scram.c:1145 +#: libpq/auth-scram.c:1169 #, c-format msgid "could not generate random nonce" msgstr "무작위 토큰을 만들 수 없음" -#: libpq/auth-scram.c:1249 +#: libpq/auth-scram.c:1179 +#, c-format +msgid "could not encode random nonce" +msgstr "임의 nonce를 인코드할 수 없음" + +#: libpq/auth-scram.c:1285 #, c-format msgid "SCRAM channel binding check failed" msgstr "" -#: libpq/auth-scram.c:1267 +#: libpq/auth-scram.c:1303 #, c-format msgid "unexpected SCRAM channel-binding attribute in client-final-message" msgstr "" -#: libpq/auth-scram.c:1284 +#: libpq/auth-scram.c:1322 #, c-format msgid "Malformed proof in client-final-message." msgstr "" -#: libpq/auth-scram.c:1292 +#: libpq/auth-scram.c:1330 #, c-format msgid "Garbage found at the end of client-final-message." msgstr "" -#: libpq/auth.c:279 +#: libpq/auth.c:280 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "사용자 \"%s\"의 인증을 실패했습니다: 호스트 거부됨" -#: libpq/auth.c:282 +#: libpq/auth.c:283 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 \"trust\" 인증을 실패했습니다." -#: libpq/auth.c:285 +#: libpq/auth.c:286 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 Ident 인증을 실패했습니다." -#: libpq/auth.c:288 +#: libpq/auth.c:289 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 peer 인증을 실패했습니다." -#: libpq/auth.c:293 +#: libpq/auth.c:294 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 password 인증을 실패했습니다" -#: libpq/auth.c:298 +#: libpq/auth.c:299 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "\"%s\" 사용자에 대한 GSSAPI 인증을 실패했습니다." -#: libpq/auth.c:301 +#: libpq/auth.c:302 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "\"%s\" 사용자에 대한 SSPI 인증을 실패했습니다." -#: libpq/auth.c:304 +#: libpq/auth.c:305 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 PAM 인증을 실패했습니다." -#: libpq/auth.c:307 +#: libpq/auth.c:308 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "\"%s\" 사용자에 대한 BSD 인증을 실패했습니다." -#: libpq/auth.c:310 +#: libpq/auth.c:311 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "\"%s\" 사용자의 LDAP 인증을 실패했습니다." -#: libpq/auth.c:313 +#: libpq/auth.c:314 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 인증서 인증을 실패했습니다" -#: libpq/auth.c:316 +#: libpq/auth.c:317 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "사용자 \"%s\"의 RADIUS 인증을 실패했습니다." -#: libpq/auth.c:319 +#: libpq/auth.c:320 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "사용자 \"%s\"의 인증을 실패했습니다: 잘못된 인증 방법" -#: libpq/auth.c:323 +#: libpq/auth.c:324 #, c-format msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "pg_hba.conf 파일의 %d번째 줄에 지정한 인증 설정이 사용됨: \"%s\"" -#: libpq/auth.c:370 +#: libpq/auth.c:371 #, c-format msgid "" "client certificates can only be checked if a root certificate store is " @@ -13029,19 +13362,19 @@ msgid "" msgstr "" "루트 인증서 저장소가 사용 가능한 경우에만 클라이언트 인증서를 검사할 수 있음" -#: libpq/auth.c:381 +#: libpq/auth.c:382 #, c-format msgid "connection requires a valid client certificate" msgstr "연결에 유효한 클라이언트 인증서가 필요함" -#: libpq/auth.c:391 +#: libpq/auth.c:392 #, c-format msgid "" "GSSAPI encryption can only be used with gss, trust, or reject authentication " "methods" msgstr "" -#: libpq/auth.c:425 +#: libpq/auth.c:426 #, c-format msgid "" "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" @@ -13049,22 +13382,22 @@ msgstr "" "호스트 \"%s\", 사용자 \"%s\", %s 연결이 복제용 연결로는 pg_hba.conf 파일 설정" "에 따라 거부됩니다" -#: libpq/auth.c:427 libpq/auth.c:443 libpq/auth.c:501 libpq/auth.c:519 +#: libpq/auth.c:428 libpq/auth.c:444 libpq/auth.c:502 libpq/auth.c:520 msgid "SSL off" msgstr "SSL 중지" -#: libpq/auth.c:427 libpq/auth.c:443 libpq/auth.c:501 libpq/auth.c:519 +#: libpq/auth.c:428 libpq/auth.c:444 libpq/auth.c:502 libpq/auth.c:520 msgid "SSL on" msgstr "SSL 동작" -#: libpq/auth.c:431 +#: libpq/auth.c:432 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\"" msgstr "" "호스트 \"%s\", 사용자 \"%s\" 연결이 복제용 연결로는 pg_hba.conf 파일 설정에 " "따라 거부됩니다" -#: libpq/auth.c:440 +#: libpq/auth.c:441 #, c-format msgid "" "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s" @@ -13073,7 +13406,7 @@ msgstr "" "호스트 \"%s\", 사용자 \"%s\", 데이터베이스 \"%s\", %s 연결이 pg_hba.conf 파" "일 설정에 따라 거부됩니다" -#: libpq/auth.c:447 +#: libpq/auth.c:448 #, c-format msgid "" "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\"" @@ -13081,35 +13414,35 @@ msgstr "" "호스트 \"%s\", 사용자 \"%s\", 데이터베이스 \"%s\" 연결이 pg_hba.conf 파일 설" "정에 따라 거부됩니다" -#: libpq/auth.c:476 +#: libpq/auth.c:477 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "" "클라이언트 IP 주소가 \"%s\" 이름으로 확인됨, 호스트 이름 확인 기능으로 맞음" -#: libpq/auth.c:479 +#: libpq/auth.c:480 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "" "클라이언트 IP 주소가 \"%s\" 이름으로 확인됨, 호스트 이름 확인 기능 사용안함" -#: libpq/auth.c:482 +#: libpq/auth.c:483 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "" "클라이언트 IP 주소가 \"%s\" 이름으로 확인됨, 호스트 이름 확인 기능으로 틀림" -#: libpq/auth.c:485 +#: libpq/auth.c:486 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "\"%s\" 클라이언트 호스트 이름을 %s IP 주소로 전환할 수 없음." -#: libpq/auth.c:490 +#: libpq/auth.c:491 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "클라이언트 IP 주소를 파악할 수 없음: 대상 호스트 이름: %s" -#: libpq/auth.c:499 +#: libpq/auth.c:500 #, c-format msgid "" "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s" @@ -13118,7 +13451,7 @@ msgstr "" "호스트 \"%s\", 사용자 \"%s\", %s 연결이 복제용 연결로 pg_hba.conf 파일에 설정" "되어 있지 않습니다" -#: libpq/auth.c:506 +#: libpq/auth.c:507 #, c-format msgid "" "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\"" @@ -13126,273 +13459,268 @@ msgstr "" "호스트 \"%s\", 사용자 \"%s\" 연결이 복제용 연결로 pg_hba.conf 파일에 설정되" "어 있지 않습니다" -#: libpq/auth.c:516 +#: libpq/auth.c:517 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "" "호스트 \"%s\", 사용자 \"%s\", 데이터베이스 \"%s\", %s 연결에 대한 설정이 " "pg_hba.conf 파일에 없습니다." -#: libpq/auth.c:524 +#: libpq/auth.c:525 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"" msgstr "" "호스트 \"%s\", 사용자 \"%s\", 데이터베이스 \"%s\" 연결에 대한 설정이 pg_hba." "conf 파일에 없습니다." -#: libpq/auth.c:691 +#: libpq/auth.c:688 #, c-format msgid "expected password response, got message type %d" msgstr "메시지 타입 %d를 얻는 예상된 암호 응답" -#: libpq/auth.c:719 +#: libpq/auth.c:716 #, c-format msgid "invalid password packet size" msgstr "유효하지 않은 암호 패킷 사이즈" -#: libpq/auth.c:737 +#: libpq/auth.c:734 #, c-format msgid "empty password returned by client" msgstr "비어있는 암호는 클라이언트에 의해 돌려보냈습니다" -#: libpq/auth.c:857 libpq/hba.c:1340 +#: libpq/auth.c:854 libpq/hba.c:1340 #, c-format msgid "" "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "\"db_user_namespace\"가 사용 가능한 경우 MD5 인증은 지원되지 않음" -#: libpq/auth.c:863 +#: libpq/auth.c:860 #, c-format msgid "could not generate random MD5 salt" msgstr "무작위 MD5 솔트 생성 실패" -#: libpq/auth.c:909 +#: libpq/auth.c:906 #, c-format msgid "SASL authentication is not supported in protocol version 2" msgstr "프로토콜 버전 2에서는 SASL 인증을 지원되지 않음" -#: libpq/auth.c:942 +#: libpq/auth.c:939 #, c-format msgid "expected SASL response, got message type %d" msgstr "SASL 응답이 필요한데 메시지 형식 %d을(를) 받음" -#: libpq/auth.c:1071 +#: libpq/auth.c:1068 #, c-format msgid "GSSAPI is not supported in protocol version 2" msgstr "프로토콜 버전 2에서는 GSSAPI가 지원되지 않음" -#: libpq/auth.c:1131 +#: libpq/auth.c:1128 #, c-format msgid "expected GSS response, got message type %d" msgstr "GSS 응답이 필요한데 메시지 형식 %d을(를) 받음" -#: libpq/auth.c:1193 +#: libpq/auth.c:1189 msgid "accepting GSS security context failed" msgstr "GSS 보안 컨텍스트를 수락하지 못함" -#: libpq/auth.c:1232 +#: libpq/auth.c:1228 msgid "retrieving GSS user name failed" msgstr "GSS 사용자 이름을 검색하지 못함" -#: libpq/auth.c:1363 +#: libpq/auth.c:1359 #, c-format msgid "SSPI is not supported in protocol version 2" msgstr "프로토콜 버전 2에서는 SSPI가 지원되지 않음" -#: libpq/auth.c:1378 +#: libpq/auth.c:1374 msgid "could not acquire SSPI credentials" msgstr "SSPI 자격 증명을 가져올 수 없음" -#: libpq/auth.c:1396 +#: libpq/auth.c:1399 #, c-format msgid "expected SSPI response, got message type %d" msgstr "SSPI 응답이 필요한데 메시지 형식 %d을(를) 받음" -#: libpq/auth.c:1469 +#: libpq/auth.c:1477 msgid "could not accept SSPI security context" msgstr "SSPI 보안 컨텍스트를 수락할 수 없음" -#: libpq/auth.c:1531 +#: libpq/auth.c:1539 msgid "could not get token from SSPI security context" msgstr "SSPI 보안 컨텍스트에서 토큰을 가져올 수 없음" -#: libpq/auth.c:1650 libpq/auth.c:1669 +#: libpq/auth.c:1658 libpq/auth.c:1677 #, c-format msgid "could not translate name" msgstr "이름을 변환할 수 없음" -#: libpq/auth.c:1682 +#: libpq/auth.c:1690 #, c-format msgid "realm name too long" msgstr "realm 이름이 너무 긺" -#: libpq/auth.c:1697 +#: libpq/auth.c:1705 #, c-format msgid "translated account name too long" msgstr "변환된 접속자 이름이 너무 깁니다" -#: libpq/auth.c:1883 +#: libpq/auth.c:1886 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "Ident 연결에 소켓을 생성할 수 없습니다: %m" -#: libpq/auth.c:1898 +#: libpq/auth.c:1901 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "로컬 주소 \"%s\"에 바인드할 수 없습니다: %m" -#: libpq/auth.c:1910 +#: libpq/auth.c:1913 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "주소 \"%s\", 포트 %s의 Ident 서버에게 연결할 수 없습니다: %m" -#: libpq/auth.c:1932 +#: libpq/auth.c:1935 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "주소 \"%s\", 포트 %s의 Ident 서버에게 질의를 보낼 수 없습니다: %m" -#: libpq/auth.c:1949 +#: libpq/auth.c:1952 #, c-format msgid "" "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "주소 \"%s\", 포트 %s의 Ident 서버로부터 응답을 받지 못했습니다: %m" -#: libpq/auth.c:1959 +#: libpq/auth.c:1962 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "Ident 서버로부터 잘못된 형태의 응답를 보냈습니다: \"%s\"" -#: libpq/auth.c:1999 +#: libpq/auth.c:2009 #, c-format msgid "peer authentication is not supported on this platform" msgstr "이 플랫폼에서는 peer 인증이 지원되지 않음" -#: libpq/auth.c:2003 +#: libpq/auth.c:2013 #, c-format msgid "could not get peer credentials: %m" msgstr "신뢰성 피어를 얻을 수 없습니다: %m" -#: libpq/auth.c:2014 +#: libpq/auth.c:2025 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "UID %ld 해당하는 사용자를 찾을 수 없음: %s" -#: libpq/auth.c:2104 +#: libpq/auth.c:2124 #, c-format msgid "error from underlying PAM layer: %s" msgstr "잠재적인 PAM 레이어에서의 에러: %s" -#: libpq/auth.c:2174 +#: libpq/auth.c:2194 #, c-format msgid "could not create PAM authenticator: %s" msgstr "PAM 인증자를 생성할 수 없습니다: %s" -#: libpq/auth.c:2185 +#: libpq/auth.c:2205 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) 실패: %s" -#: libpq/auth.c:2217 +#: libpq/auth.c:2237 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST) 실패: %s" -#: libpq/auth.c:2229 +#: libpq/auth.c:2249 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) 실패: %s" -#: libpq/auth.c:2242 +#: libpq/auth.c:2262 #, c-format msgid "pam_authenticate failed: %s" msgstr "PAM 인증 실패: %s" -#: libpq/auth.c:2255 +#: libpq/auth.c:2275 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt 실패: %s" -#: libpq/auth.c:2266 +#: libpq/auth.c:2286 #, c-format msgid "could not release PAM authenticator: %s" msgstr "PAM 인증자를 릴리즈할 수 없습니다: %s" -#: libpq/auth.c:2342 +#: libpq/auth.c:2362 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "LDAP 초기화 실패: 오류번호 %d" -#: libpq/auth.c:2379 +#: libpq/auth.c:2399 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "ldapbasedn에서 도메인 이름을 뽑을 수 없음" -#: libpq/auth.c:2387 +#: libpq/auth.c:2407 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "\"%s\"용 LDAP 인증 작업에서 DNS SRV 레코드를 찾을 수 없음" -#: libpq/auth.c:2389 +#: libpq/auth.c:2409 #, c-format msgid "Set an LDAP server name explicitly." msgstr "명시적으로 LDAP 서버 이름을 지정하세요." -#: libpq/auth.c:2441 +#: libpq/auth.c:2461 #, c-format msgid "could not initialize LDAP: %s" msgstr "LDAP 초기화 실패: %s" -#: libpq/auth.c:2451 +#: libpq/auth.c:2471 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "ldap 인증으로 사용할 수 없는 LDAP 라이브러리" -#: libpq/auth.c:2459 +#: libpq/auth.c:2479 #, c-format msgid "could not initialize LDAP: %m" msgstr "LDAP 초기화 실패: %m" -#: libpq/auth.c:2469 +#: libpq/auth.c:2489 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "LDAP 프로토콜 버전을 지정할 수 없음: %s" -#: libpq/auth.c:2500 -#, c-format -msgid "could not load wldap32.dll" -msgstr "could not load wldap32.dll" - -#: libpq/auth.c:2508 +#: libpq/auth.c:2529 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "could not load function _ldap_start_tls_sA in wldap32.dll" -#: libpq/auth.c:2509 +#: libpq/auth.c:2530 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "이 플랫폼에서는 SSL을 이용한 LDAP 기능을 지원하지 않음." -#: libpq/auth.c:2524 +#: libpq/auth.c:2546 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "LDAP TLS 세션을 시작할 수 없음: %s" -#: libpq/auth.c:2595 +#: libpq/auth.c:2617 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "LDAP 서버도 ldapbasedn도 지정하지 않았음" -#: libpq/auth.c:2602 +#: libpq/auth.c:2624 #, c-format msgid "LDAP server not specified" msgstr "LDAP 서버가 지정되지 않음" -#: libpq/auth.c:2664 +#: libpq/auth.c:2686 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "LDAP 인증을 위한 사용자 이름에 사용할 수 없는 문자가 있습니다" -#: libpq/auth.c:2681 +#: libpq/auth.c:2703 #, c-format msgid "" "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": " @@ -13401,55 +13729,55 @@ msgstr "" "\"%s\" ldapbinddn (해당 서버: \"%s\") 설정에 대한 LDAP 바인드 초기화를 할 수 " "없음: %s" -#: libpq/auth.c:2710 +#: libpq/auth.c:2732 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "\"%s\" 필터로 LDAP 검색 실패함, 대상 서버: \"%s\": %s" -#: libpq/auth.c:2724 +#: libpq/auth.c:2746 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "\"%s\" LDAP 사용자가 없음" -#: libpq/auth.c:2725 +#: libpq/auth.c:2747 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "\"%s\" 필터로 \"%s\" 서버에서 LDAP 검색을 했으나, 해당 자료가 없음" -#: libpq/auth.c:2729 +#: libpq/auth.c:2751 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "\"%s\" LDAP 사용자가 유일하지 않습니다" -#: libpq/auth.c:2730 +#: libpq/auth.c:2752 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "" "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." msgstr[0] "\"%s\" 필터로 \"%s\" 서버에서 LDAP 검색 결과 %d 항목을 반환함" -#: libpq/auth.c:2750 +#: libpq/auth.c:2772 #, c-format msgid "" "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "\"%s\" 첫번째 항목 조회용 dn 값을 \"%s\" 서버에서 찾을 수 없음: %s" -#: libpq/auth.c:2771 +#: libpq/auth.c:2793 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\"" msgstr "\"%s\" 사용자 검색 후 unbind 작업을 \"%s\" 서버에서 할 수 없음" -#: libpq/auth.c:2802 +#: libpq/auth.c:2824 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "\"%s\" 사용자의 \"%s\" LDAP 서버 로그인 실패: %s" -#: libpq/auth.c:2831 +#: libpq/auth.c:2853 #, c-format msgid "LDAP diagnostics: %s" msgstr "LDAP 진단: %s" -#: libpq/auth.c:2858 +#: libpq/auth.c:2880 #, c-format msgid "" "certificate authentication failed for user \"%s\": client certificate " @@ -13458,115 +13786,115 @@ msgstr "" "\"%s\" 사용자에 대한 인증서 로그인 실패: 클라이언트 인증서에 사용자 이름이 없" "음" -#: libpq/auth.c:2875 +#: libpq/auth.c:2897 #, c-format msgid "" "certificate validation (clientcert=verify-full) failed for user \"%s\": CN " "mismatch" msgstr "\"%s\" 사용자를 위한 인증서 유효성 검사를 실패 함: CN 같지 않음" -#: libpq/auth.c:2976 +#: libpq/auth.c:2998 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS 서버가 지정되지 않음" -#: libpq/auth.c:2983 +#: libpq/auth.c:3005 #, c-format msgid "RADIUS secret not specified" msgstr "RADIUS 비밀키가 지정되지 않음" -#: libpq/auth.c:2997 +#: libpq/auth.c:3019 #, c-format msgid "" "RADIUS authentication does not support passwords longer than %d characters" msgstr "RADIUS 인증은 %d 글자 보다 큰 비밀번호 인증을 지원하지 않습니다" -#: libpq/auth.c:3102 libpq/hba.c:1954 +#: libpq/auth.c:3124 libpq/hba.c:1954 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "\"%s\" RADIUS 서버 이름을 주소로 바꿀 수 없음: %s" -#: libpq/auth.c:3116 +#: libpq/auth.c:3138 #, c-format msgid "could not generate random encryption vector" msgstr "무작위 암호화 벡터를 만들 수 없음" -#: libpq/auth.c:3150 +#: libpq/auth.c:3172 #, c-format msgid "could not perform MD5 encryption of password" msgstr "비밀번호의 MD5 암호를 만들 수 없음" # translator: %s is IPv4, IPv6, or Unix -#: libpq/auth.c:3176 +#: libpq/auth.c:3198 #, c-format msgid "could not create RADIUS socket: %m" msgstr "RADIUS 소켓을 생성할 수 없습니다: %m" # translator: %s is IPv4, IPv6, or Unix -#: libpq/auth.c:3198 +#: libpq/auth.c:3220 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "RADIUS 소켓에 바인드할 수 없습니다: %m" -#: libpq/auth.c:3208 +#: libpq/auth.c:3230 #, c-format msgid "could not send RADIUS packet: %m" msgstr "RADIUS 패킷을 보낼 수 없음: %m" -#: libpq/auth.c:3241 libpq/auth.c:3267 +#: libpq/auth.c:3263 libpq/auth.c:3289 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "%s 에서 RADIUS 응답 대기 시간 초과" # translator: %s is IPv4, IPv6, or Unix -#: libpq/auth.c:3260 +#: libpq/auth.c:3282 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "RADIUS 소켓 상태를 확인할 수 없음: %m" -#: libpq/auth.c:3290 +#: libpq/auth.c:3312 #, c-format msgid "could not read RADIUS response: %m" msgstr "RADIUS 응답을 읽을 수 없음: %m" -#: libpq/auth.c:3303 libpq/auth.c:3307 +#: libpq/auth.c:3325 libpq/auth.c:3329 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "%s에서 RADIUS 응답이 바르지 않은 포트로부터 보내졌음: %d" -#: libpq/auth.c:3316 +#: libpq/auth.c:3338 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "%s에서 RADIUS 응답이 너무 짧음: %d" -#: libpq/auth.c:3323 +#: libpq/auth.c:3345 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "%s에서 RADIUS 응답 길이가 이상함: %d (실재 길이: %d)" -#: libpq/auth.c:3331 +#: libpq/auth.c:3353 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "%s에서 RADIUS 응답이 요청과 다름: %d (기대값: %d)" -#: libpq/auth.c:3356 +#: libpq/auth.c:3378 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "받은 패킷을 대상으로 MD5 암호화 작업할 수 없음" -#: libpq/auth.c:3365 +#: libpq/auth.c:3387 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "%s에서 RADIUS 응답의 MD5 값이 이상함" -#: libpq/auth.c:3383 +#: libpq/auth.c:3405 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "%s에서 RADIUS 응답이 바르지 않은 값임 (%d), 대상 사용자: \"%s\"" #: libpq/be-fsstubs.c:119 libpq/be-fsstubs.c:150 libpq/be-fsstubs.c:178 #: libpq/be-fsstubs.c:204 libpq/be-fsstubs.c:229 libpq/be-fsstubs.c:277 -#: libpq/be-fsstubs.c:300 libpq/be-fsstubs.c:555 +#: libpq/be-fsstubs.c:300 libpq/be-fsstubs.c:553 #, c-format msgid "invalid large-object descriptor: %d" msgstr "유효하지 않은 대형 개체 설명: %d" @@ -13576,7 +13904,7 @@ msgstr "유효하지 않은 대형 개체 설명: %d" msgid "large object descriptor %d was not opened for reading" msgstr "%d번 대형 개체 기술자가 읽기 모드로 열려있지 않습니다" -#: libpq/be-fsstubs.c:185 libpq/be-fsstubs.c:562 +#: libpq/be-fsstubs.c:185 libpq/be-fsstubs.c:560 #, c-format msgid "large object descriptor %d was not opened for writing" msgstr "%d번 대형 개체 기술자가 쓰기 모드로 열려있지 않습니다" @@ -13601,66 +13929,66 @@ msgstr "서버 파일 \"%s\"을 열 수 없습니다: %m" msgid "could not read server file \"%s\": %m" msgstr "서버 파일 \"%s\"을 읽을 수 없습니다: %m" -#: libpq/be-fsstubs.c:516 +#: libpq/be-fsstubs.c:514 #, c-format msgid "could not create server file \"%s\": %m" msgstr "서버 파일 \"%s\"의 생성을 할 수 없습니다: %m" -#: libpq/be-fsstubs.c:528 +#: libpq/be-fsstubs.c:526 #, c-format msgid "could not write server file \"%s\": %m" msgstr "서버 파일 \"%s\"에 쓸 수 없습니다: %m" -#: libpq/be-fsstubs.c:762 +#: libpq/be-fsstubs.c:760 #, c-format msgid "large object read request is too large" msgstr "대형 개체 읽기 요청이 너무 큽니다" -#: libpq/be-fsstubs.c:804 utils/adt/genfile.c:235 utils/adt/genfile.c:274 -#: utils/adt/genfile.c:310 +#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:265 utils/adt/genfile.c:304 +#: utils/adt/genfile.c:340 #, c-format msgid "requested length cannot be negative" msgstr "요청한 길이는 음수일 수 없음" -#: libpq/be-fsstubs.c:857 storage/large_object/inv_api.c:295 -#: storage/large_object/inv_api.c:307 storage/large_object/inv_api.c:511 -#: storage/large_object/inv_api.c:622 storage/large_object/inv_api.c:812 +#: libpq/be-fsstubs.c:855 storage/large_object/inv_api.c:297 +#: storage/large_object/inv_api.c:309 storage/large_object/inv_api.c:513 +#: storage/large_object/inv_api.c:624 storage/large_object/inv_api.c:814 #, c-format msgid "permission denied for large object %u" msgstr "%u 대형 개체에 대한 접근 권한 없음" -#: libpq/be-secure-common.c:91 +#: libpq/be-secure-common.c:93 #, c-format msgid "could not read from command \"%s\": %m" msgstr "\"%s\" 명령에서 읽을 수 없음: %m" -#: libpq/be-secure-common.c:109 +#: libpq/be-secure-common.c:113 #, c-format msgid "command \"%s\" failed" msgstr "\"%s\" 명령 실패" -#: libpq/be-secure-common.c:140 +#: libpq/be-secure-common.c:141 #, c-format msgid "could not access private key file \"%s\": %m" msgstr "비밀키 \"%s\"에 액세스할 수 없습니다: %m" -#: libpq/be-secure-common.c:149 +#: libpq/be-secure-common.c:150 #, c-format msgid "private key file \"%s\" is not a regular file" msgstr "\"%s\" 개인 키 파일은 일반 파일이 아님" -#: libpq/be-secure-common.c:164 +#: libpq/be-secure-common.c:165 #, c-format msgid "private key file \"%s\" must be owned by the database user or root" msgstr "" "\"%s\" 개인 키 파일의 소유주는 데이터베이스 사용자이거나 root 여야 합니다." -#: libpq/be-secure-common.c:187 +#: libpq/be-secure-common.c:188 #, c-format msgid "private key file \"%s\" has group or world access" msgstr "\"%s\" 개인 키 파일에 그룹 또는 익명 액세스 권한이 있음" -#: libpq/be-secure-common.c:189 +#: libpq/be-secure-common.c:190 #, c-format msgid "" "File must have permissions u=rw (0600) or less if owned by the database " @@ -13679,49 +14007,49 @@ msgstr "" msgid "outgoing GSSAPI message would not use confidentiality" msgstr "" -#: libpq/be-secure-gssapi.c:203 libpq/be-secure-gssapi.c:570 +#: libpq/be-secure-gssapi.c:203 libpq/be-secure-gssapi.c:574 #, c-format msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" msgstr "" -#: libpq/be-secure-gssapi.c:327 +#: libpq/be-secure-gssapi.c:330 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" msgstr "" -#: libpq/be-secure-gssapi.c:361 +#: libpq/be-secure-gssapi.c:364 msgid "GSSAPI unwrap error" msgstr "" -#: libpq/be-secure-gssapi.c:366 +#: libpq/be-secure-gssapi.c:369 #, c-format msgid "incoming GSSAPI message did not use confidentiality" msgstr "" -#: libpq/be-secure-gssapi.c:521 +#: libpq/be-secure-gssapi.c:525 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %d)" msgstr "" -#: libpq/be-secure-gssapi.c:543 +#: libpq/be-secure-gssapi.c:547 msgid "could not accept GSSAPI security context" msgstr "GSSAPI 보안 내용을 받아드릴 수 없음" -#: libpq/be-secure-gssapi.c:630 +#: libpq/be-secure-gssapi.c:637 msgid "GSSAPI size check error" msgstr "GSSAPI 크기 검사 오류" -#: libpq/be-secure-openssl.c:111 +#: libpq/be-secure-openssl.c:112 #, c-format msgid "could not create SSL context: %s" msgstr "SSL 컨텍스트 정보를 생성할 수 없습니다: %s" -#: libpq/be-secure-openssl.c:154 +#: libpq/be-secure-openssl.c:138 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "서버 인증서 파일 \"%s\"을 불러들일 수 없습니다: %s" -#: libpq/be-secure-openssl.c:174 +#: libpq/be-secure-openssl.c:158 #, c-format msgid "" "private key file \"%s\" cannot be reloaded because it requires a passphrase" @@ -13729,192 +14057,199 @@ msgstr "" "\"%s\" 개인 키 파일은 비밀번호를 입력해야 해서 자동으로 다시 불러올 수 없습니" "다." -#: libpq/be-secure-openssl.c:179 +#: libpq/be-secure-openssl.c:163 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "비밀키 파일 \"%s\"을 불러들일 수 없습니다: %s" -#: libpq/be-secure-openssl.c:188 +#: libpq/be-secure-openssl.c:172 #, c-format msgid "check of private key failed: %s" msgstr "비밀키의 확인 실패: %s" -#: libpq/be-secure-openssl.c:204 +#: libpq/be-secure-openssl.c:184 libpq/be-secure-openssl.c:206 +#, c-format +msgid "\"%s\" setting \"%s\" not supported by this build" +msgstr "\"%s\" 의 \"%s\" 설정 기능을 빼고 빌드 되었음" + +#: libpq/be-secure-openssl.c:194 #, c-format msgid "could not set minimum SSL protocol version" msgstr "최소 SSL 프로토콜 버전을 설정할 수 없음" -#: libpq/be-secure-openssl.c:220 +#: libpq/be-secure-openssl.c:216 #, c-format msgid "could not set maximum SSL protocol version" msgstr "최대 SSL 프로토콜 버전을 설정할 수 없음" -#: libpq/be-secure-openssl.c:244 +#: libpq/be-secure-openssl.c:232 #, c-format -msgid "could not set the cipher list (no valid ciphers available)" -msgstr "cipher 목록을 설정할 수 없음 (유요한 cipher가 없음)" +msgid "could not set SSL protocol version range" +msgstr "SSL 프로토콜 버전 범위를 지정할 수 없음" -#: libpq/be-secure-openssl.c:262 +#: libpq/be-secure-openssl.c:233 #, c-format -msgid "could not load root certificate file \"%s\": %s" -msgstr "root 인증서 파일 \"%s\"을 불러들일 수 없습니다: %s" +msgid "\"%s\" cannot be higher than \"%s\"" +msgstr "\"%s\" 값은 \"%s\" 보다 높을 수 없음" -#: libpq/be-secure-openssl.c:289 +#: libpq/be-secure-openssl.c:257 #, c-format -msgid "SSL certificate revocation list file \"%s\" ignored" -msgstr "\"%s\" SSL 인증서 파기 목록 파일이 무시되었음" +msgid "could not set the cipher list (no valid ciphers available)" +msgstr "cipher 목록을 설정할 수 없음 (유요한 cipher가 없음)" -#: libpq/be-secure-openssl.c:291 +#: libpq/be-secure-openssl.c:275 #, c-format -msgid "SSL library does not support certificate revocation lists." -msgstr "SSL 라이브러리가 인증서 파기 목록을 지원하지 않습니다." +msgid "could not load root certificate file \"%s\": %s" +msgstr "root 인증서 파일 \"%s\"을 불러들일 수 없습니다: %s" -#: libpq/be-secure-openssl.c:298 +#: libpq/be-secure-openssl.c:302 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "\"%s\" SSL 인증서 회수 목록 파일을 불러들일 수 없습니다: %s" -#: libpq/be-secure-openssl.c:373 +#: libpq/be-secure-openssl.c:378 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "SSL연결을 초기화할 수 없습니다: SSL 컨텍스트를 설정 못함" -#: libpq/be-secure-openssl.c:381 +#: libpq/be-secure-openssl.c:386 #, c-format msgid "could not initialize SSL connection: %s" msgstr "SSL연결을 초기화할 수 없습니다: %s" -#: libpq/be-secure-openssl.c:389 +#: libpq/be-secure-openssl.c:394 #, c-format msgid "could not set SSL socket: %s" msgstr "SSL 소켓을 지정할 수 없습니다: %s" -#: libpq/be-secure-openssl.c:444 +#: libpq/be-secure-openssl.c:449 #, c-format msgid "could not accept SSL connection: %m" msgstr "SSL 연결을 받아드릴 수 없습니다: %m" -#: libpq/be-secure-openssl.c:448 libpq/be-secure-openssl.c:459 +#: libpq/be-secure-openssl.c:453 libpq/be-secure-openssl.c:506 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "SSL 연결을 받아드릴 수 없습니다: EOF 감지됨" -#: libpq/be-secure-openssl.c:453 +#: libpq/be-secure-openssl.c:492 #, c-format msgid "could not accept SSL connection: %s" msgstr "SSL 연결을 받아드릴 수 없습니다: %s" -#: libpq/be-secure-openssl.c:464 libpq/be-secure-openssl.c:595 -#: libpq/be-secure-openssl.c:659 +#: libpq/be-secure-openssl.c:495 +#, c-format +msgid "" +"This may indicate that the client does not support any SSL protocol version " +"between %s and %s." +msgstr "" + +#: libpq/be-secure-openssl.c:511 libpq/be-secure-openssl.c:642 +#: libpq/be-secure-openssl.c:706 #, c-format msgid "unrecognized SSL error code: %d" msgstr "인식되지 않은 SSL 에러 코드 %d" -#: libpq/be-secure-openssl.c:506 +#: libpq/be-secure-openssl.c:553 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "SSL 인증서의 일반 이름에 포함된 null이 있음" -#: libpq/be-secure-openssl.c:584 libpq/be-secure-openssl.c:643 +#: libpq/be-secure-openssl.c:631 libpq/be-secure-openssl.c:690 #, c-format msgid "SSL error: %s" msgstr "SSL 에러: %s" -#: libpq/be-secure-openssl.c:824 +#: libpq/be-secure-openssl.c:871 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "\"%s\" DH 매개 변수 파일을 열 수 없습니다: %m" -#: libpq/be-secure-openssl.c:836 +#: libpq/be-secure-openssl.c:883 #, c-format msgid "could not load DH parameters file: %s" msgstr "DH 매개 변수 파일을 불러들일 수 없습니다: %s" -#: libpq/be-secure-openssl.c:846 +#: libpq/be-secure-openssl.c:893 #, c-format msgid "invalid DH parameters: %s" msgstr "잘못된 DH 매개 변수: %s" -#: libpq/be-secure-openssl.c:854 +#: libpq/be-secure-openssl.c:901 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "잘못된 DH 매개 변수값: p는 prime 아님" -#: libpq/be-secure-openssl.c:862 +#: libpq/be-secure-openssl.c:909 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "" -#: libpq/be-secure-openssl.c:1017 +#: libpq/be-secure-openssl.c:1065 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: DH 매개 변수 불러오기 실패" -#: libpq/be-secure-openssl.c:1025 +#: libpq/be-secure-openssl.c:1073 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: DH 매개 변수 설정 실패: %s" -#: libpq/be-secure-openssl.c:1049 +#: libpq/be-secure-openssl.c:1100 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: 알 수 없는 curve 이름: %s" -#: libpq/be-secure-openssl.c:1058 +#: libpq/be-secure-openssl.c:1109 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: 키 생성 실패" -#: libpq/be-secure-openssl.c:1086 +#: libpq/be-secure-openssl.c:1137 msgid "no SSL error reported" msgstr "SSL 오류 없음" -#: libpq/be-secure-openssl.c:1090 +#: libpq/be-secure-openssl.c:1141 #, c-format msgid "SSL error code %lu" msgstr "SSL 오류 번호 %lu" -#: libpq/be-secure-openssl.c:1320 -#, c-format -msgid "%s setting %s not supported by this build" -msgstr "%s 의 %s 설정 기능을 빼고 빌드 되었음" - -#: libpq/be-secure.c:123 +#: libpq/be-secure.c:122 #, c-format msgid "SSL connection from \"%s\"" msgstr "\"%s\" 로부터의 SSL 연결" -#: libpq/be-secure.c:208 libpq/be-secure.c:304 +#: libpq/be-secure.c:207 libpq/be-secure.c:303 #, c-format msgid "terminating connection due to unexpected postmaster exit" msgstr "postmaster의 예상치 못한 종료로 연결을 종료합니다" -#: libpq/crypt.c:52 +#: libpq/crypt.c:49 #, c-format msgid "Role \"%s\" does not exist." msgstr "\"%s\" 롤 없음" -#: libpq/crypt.c:62 +#: libpq/crypt.c:59 #, c-format msgid "User \"%s\" has no password assigned." msgstr "\"%s\" 사용자 비밀번호가 아직 할당되지 않음" -#: libpq/crypt.c:80 +#: libpq/crypt.c:77 #, c-format msgid "User \"%s\" has an expired password." msgstr "\"%s\" 사용자 비밀번호가 기한 만료되었습니다." -#: libpq/crypt.c:182 +#: libpq/crypt.c:179 #, c-format msgid "User \"%s\" has a password that cannot be used with MD5 authentication." msgstr "" -#: libpq/crypt.c:206 libpq/crypt.c:247 libpq/crypt.c:271 +#: libpq/crypt.c:203 libpq/crypt.c:244 libpq/crypt.c:268 #, c-format msgid "Password does not match for user \"%s\"." msgstr "\"%s\" 사용자의 비밀번호가 틀립니다." -#: libpq/crypt.c:290 +#: libpq/crypt.c:287 #, c-format msgid "Password of user \"%s\" is in unrecognized format." msgstr "" @@ -13946,7 +14281,7 @@ msgstr "인증 파일 줄이 너무 깁니다" #: libpq/hba.c:1666 libpq/hba.c:1704 libpq/hba.c:1726 libpq/hba.c:1738 #: libpq/hba.c:1825 libpq/hba.c:1843 libpq/hba.c:1937 libpq/hba.c:1956 #: libpq/hba.c:1985 libpq/hba.c:1998 libpq/hba.c:2021 libpq/hba.c:2043 -#: libpq/hba.c:2057 tsearch/ts_locale.c:190 +#: libpq/hba.c:2057 tsearch/ts_locale.c:217 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "%d번째 줄(\"%s\" 환경 설정 파일)" @@ -14196,7 +14531,7 @@ msgstr "clientcert는 \"hostssl\" 행에 대해서만 구성할 수 있음" #: libpq/hba.c:1725 #, c-format msgid "" -"clientcert can not be set to \"no-verify\" when using \"cert\" authentication" +"clientcert cannot be set to \"no-verify\" when using \"cert\" authentication" msgstr "" "\"cert\" 인증을 사용하는 경우 clientcert를 \"no-verify\"로 설정할 수 없음" @@ -14269,7 +14604,7 @@ msgstr "RADIUS 서버 식별자 목록 분석 실패: \"%s\"" msgid "unrecognized authentication option name: \"%s\"" msgstr "알 수 없는 인증 옵션 이름: \"%s\"" -#: libpq/hba.c:2199 libpq/hba.c:2613 guc-file.l:632 +#: libpq/hba.c:2199 libpq/hba.c:2613 guc-file.l:631 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "\"%s\" 설정 파일 을 열수 없습니다: %m" @@ -14279,106 +14614,106 @@ msgstr "\"%s\" 설정 파일 을 열수 없습니다: %m" msgid "configuration file \"%s\" contains no entries" msgstr "\"%s\" 설정 파일에 구성 항목이 없음" -#: libpq/hba.c:2769 +#: libpq/hba.c:2768 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "\"%s\" 정규식이 잘못됨: %s" -#: libpq/hba.c:2829 +#: libpq/hba.c:2828 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "\"%s\"에 대한 정규식 일치 실패: %s" -#: libpq/hba.c:2848 +#: libpq/hba.c:2847 #, c-format msgid "" "regular expression \"%s\" has no subexpressions as requested by " "backreference in \"%s\"" msgstr "\"%s\" 정규식에는 \"%s\"의 backreference에서 요청된 하위 식이 없음" -#: libpq/hba.c:2945 +#: libpq/hba.c:2943 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "제공된 사용자 이름(%s) 및 인증된 사용자 이름(%s)이 일치하지 않음" -#: libpq/hba.c:2965 +#: libpq/hba.c:2963 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "" "\"%s\" 사용자맵 파일에 \"%s\" 사용자를 \"%s\" 사용자로 인증할 설정이 없음" -#: libpq/hba.c:2998 +#: libpq/hba.c:2996 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "\"%s\" 사용자맵 파일을 열 수 없습니다: %m" -#: libpq/pqcomm.c:220 +#: libpq/pqcomm.c:218 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "소켓을 nonblocking 모드로 지정할 수 없음: %m" -#: libpq/pqcomm.c:374 +#: libpq/pqcomm.c:372 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "\"%s\" 유닉스 도메인 소켓 경로가 너무 깁니다 (최대 %d 바이트)" -#: libpq/pqcomm.c:395 +#: libpq/pqcomm.c:393 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "호스트 이름 \"%s\", 서비스 \"%s\"를 변환할 수 없습니다. 주소 : %s" -#: libpq/pqcomm.c:399 +#: libpq/pqcomm.c:397 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "서비스 \"%s\"를 변환할 수 없습니다. 주소 : %s" -#: libpq/pqcomm.c:426 +#: libpq/pqcomm.c:424 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "최대 접속자 수 MAXLISTEN (%d) 초과로 더 이상 접속이 불가능합니다" -#: libpq/pqcomm.c:435 +#: libpq/pqcomm.c:433 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:439 +#: libpq/pqcomm.c:437 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:444 +#: libpq/pqcomm.c:442 msgid "Unix" msgstr "유닉스" -#: libpq/pqcomm.c:449 +#: libpq/pqcomm.c:447 #, c-format msgid "unrecognized address family %d" msgstr "%d는 인식되지 않는 가족 주소입니다" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:475 +#: libpq/pqcomm.c:473 #, c-format msgid "could not create %s socket for address \"%s\": %m" msgstr "%s 소켓 만들기 실패, 대상 주소: \"%s\": %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:501 +#: libpq/pqcomm.c:499 #, c-format msgid "setsockopt(SO_REUSEADDR) failed for %s address \"%s\": %m" msgstr "%s setsockopt(SO_REUSEADDR) 실패, 대상 주소: \"%s\": %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:518 +#: libpq/pqcomm.c:516 #, c-format msgid "setsockopt(IPV6_V6ONLY) failed for %s address \"%s\": %m" msgstr "%s setsockopt(IPV6_V6ONLY) 실패, 대상 주소: \"%s\": %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:538 +#: libpq/pqcomm.c:536 #, c-format msgid "could not bind %s address \"%s\": %m" msgstr "%s 바인드 실패, 대상 주소: \"%s\": %m" -#: libpq/pqcomm.c:541 +#: libpq/pqcomm.c:539 #, c-format msgid "" "Is another postmaster already running on port %d? If not, remove socket file " @@ -14387,7 +14722,7 @@ msgstr "" "다른 postmaster 가 포트 %d에서 이미 실행중인것 같습니다? 그렇지 않다면 소켓 " "파일 \"%s\"을 제거하고 다시 시도해보십시오" -#: libpq/pqcomm.c:544 +#: libpq/pqcomm.c:542 #, c-format msgid "" "Is another postmaster already running on port %d? If not, wait a few seconds " @@ -14397,74 +14732,74 @@ msgstr "" "를 기다렸다가 다시 시도해보십시오." #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:577 +#: libpq/pqcomm.c:575 #, c-format msgid "could not listen on %s address \"%s\": %m" msgstr "%s 리슨 실패, 대상 주소: \"%s\": %m" # translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:586 +#: libpq/pqcomm.c:584 #, c-format msgid "listening on Unix socket \"%s\"" msgstr "\"%s\" 유닉스 도메인 소켓으로 접속을 허용합니다" #. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:592 +#: libpq/pqcomm.c:590 #, c-format msgid "listening on %s address \"%s\", port %d" msgstr "%s, 주소: \"%s\", 포트 %d 번으로 접속을 허용합니다" -#: libpq/pqcomm.c:675 +#: libpq/pqcomm.c:673 #, c-format msgid "group \"%s\" does not exist" msgstr "\"%s\" 그룹 없음" -#: libpq/pqcomm.c:685 +#: libpq/pqcomm.c:683 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "파일 \"%s\" 의 그룹을 세팅할 수 없습니다: %m" -#: libpq/pqcomm.c:696 +#: libpq/pqcomm.c:694 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "파일 \"%s\" 의 퍼미션을 세팅할 수 없습니다: %m" -#: libpq/pqcomm.c:726 +#: libpq/pqcomm.c:724 #, c-format msgid "could not accept new connection: %m" msgstr "새로운 연결을 생성할 수 없습니다: %m" -#: libpq/pqcomm.c:928 +#: libpq/pqcomm.c:914 #, c-format msgid "there is no client connection" msgstr "클라이언트 연결이 없음" -#: libpq/pqcomm.c:979 libpq/pqcomm.c:1075 +#: libpq/pqcomm.c:965 libpq/pqcomm.c:1061 #, c-format msgid "could not receive data from client: %m" msgstr "클라이언트에게 데이터를 받을 수 없습니다: %m" -#: libpq/pqcomm.c:1220 tcop/postgres.c:4074 +#: libpq/pqcomm.c:1206 tcop/postgres.c:4142 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "프로토콜 동기화 작업 실패로 연결을 종료합니다" -#: libpq/pqcomm.c:1286 +#: libpq/pqcomm.c:1272 #, c-format msgid "unexpected EOF within message length word" msgstr "예상치 못한 EOF가 메시지의 길이 워드안에서 발생했습니다." -#: libpq/pqcomm.c:1297 +#: libpq/pqcomm.c:1283 #, c-format msgid "invalid message length" msgstr "메시지의 길이가 유효하지 않습니다" -#: libpq/pqcomm.c:1319 libpq/pqcomm.c:1332 +#: libpq/pqcomm.c:1305 libpq/pqcomm.c:1318 #, c-format msgid "incomplete message from client" msgstr "클라이언트으로부터의 완전하지 못한 메시지입니다" -#: libpq/pqcomm.c:1465 +#: libpq/pqcomm.c:1451 #, c-format msgid "could not send data to client: %m" msgstr "클라이언트에게 데이터를 보낼 수 없습니다: %m" @@ -14475,7 +14810,7 @@ msgid "no data left in message" msgstr "메시지에 아무런 데이터가 없습니다" #: libpq/pqformat.c:517 libpq/pqformat.c:535 libpq/pqformat.c:556 -#: utils/adt/arrayfuncs.c:1470 utils/adt/rowtypes.c:567 +#: utils/adt/arrayfuncs.c:1471 utils/adt/rowtypes.c:567 #, c-format msgid "insufficient data left in message" msgstr "부족한 데이터는 메시지 안에 넣어져 있습니다" @@ -14492,12 +14827,12 @@ msgstr "메시지 포맷이 유효하지 않습니다." # # search5 끝 # # advance 부분 -#: main/main.c:264 +#: main/main.c:246 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartup 작업 실패: %d\n" -#: main/main.c:328 +#: main/main.c:310 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -14506,7 +14841,7 @@ msgstr "" "%s 프로그램은 PostgreSQL 서버입니다.\n" "\n" -#: main/main.c:329 +#: main/main.c:311 #, c-format msgid "" "Usage:\n" @@ -14517,72 +14852,72 @@ msgstr "" " %s [옵션]...\n" "\n" -#: main/main.c:330 +#: main/main.c:312 #, c-format msgid "Options:\n" msgstr "옵션들:\n" -#: main/main.c:331 +#: main/main.c:313 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS 공유 버퍼 개수\n" -#: main/main.c:332 +#: main/main.c:314 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c NAME=VALUE 실시간 매개 변수 지정\n" -#: main/main.c:333 +#: main/main.c:315 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C NAME 실시간 매개 변수 값을 보여주고 마침\n" -#: main/main.c:334 +#: main/main.c:316 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 디버깅 수준\n" -#: main/main.c:335 +#: main/main.c:317 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D DATADIR 데이터 디렉터리\n" -#: main/main.c:336 +#: main/main.c:318 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e 날짜 입력 양식이 유럽형(DMY)을 사용함\n" -#: main/main.c:337 +#: main/main.c:319 #, c-format msgid " -F turn fsync off\n" msgstr " -F fsync 기능 끔\n" -#: main/main.c:338 +#: main/main.c:320 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h HOSTNAME 서버로 사용할 호스트 이름 또는 IP\n" -#: main/main.c:339 +#: main/main.c:321 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i TCP/IP 연결 사용함\n" -#: main/main.c:340 +#: main/main.c:322 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k DIRECTORY 유닉스 도메인 소켓 위치\n" -#: main/main.c:342 +#: main/main.c:324 #, c-format msgid " -l enable SSL connections\n" msgstr " -l SSL 연결 기능 사용함\n" -#: main/main.c:344 +#: main/main.c:326 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N MAX-CONNECT 최대 동시 연결 개수\n" -#: main/main.c:345 +#: main/main.c:327 #, c-format msgid "" " -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n" @@ -14590,42 +14925,42 @@ msgstr "" " -o OPTIONS 개별 서버 프로세스를 \"OPTIONS\" 옵션으로 실행 (옛기" "능)\n" -#: main/main.c:346 +#: main/main.c:328 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT 서버 포트 번호\n" -#: main/main.c:347 +#: main/main.c:329 #, c-format msgid " -s show statistics after each query\n" msgstr " -s 각 쿼리 뒤에 통계정보를 보여줌\n" -#: main/main.c:348 +#: main/main.c:330 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S WORK-MEM 정렬작업에 사용할 메모리 크기(kb 단위)를 지정\n" -#: main/main.c:349 +#: main/main.c:331 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보 보여주고 마침\n" -#: main/main.c:350 +#: main/main.c:332 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NAME=VALUE 실시간 매개 변수 지정\n" -#: main/main.c:351 +#: main/main.c:333 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config 서버 환경 설정값에 대한 설명을 보여주고 마침\n" -#: main/main.c:352 +#: main/main.c:334 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: main/main.c:354 +#: main/main.c:336 #, c-format msgid "" "\n" @@ -14634,34 +14969,34 @@ msgstr "" "\n" "개발자 옵션들:\n" -#: main/main.c:355 +#: main/main.c:337 #, c-format msgid " -f s|i|n|m|h forbid use of some plan types\n" msgstr " -f s|i|n|m|h 쿼리최적화기의 기능을 제한 함\n" -#: main/main.c:356 +#: main/main.c:338 #, c-format msgid "" " -n do not reinitialize shared memory after abnormal exit\n" msgstr "" " -n 비정상적 종료 뒤에 공유 메모리를 초기화 하지 않음\n" -#: main/main.c:357 +#: main/main.c:339 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O 시스템 테이블의 구조를 바꿀 수 있도록 함\n" -#: main/main.c:358 +#: main/main.c:340 #, c-format msgid " -P disable system indexes\n" msgstr " -P 시스템 인덱스들을 사용하지 않음\n" -#: main/main.c:359 +#: main/main.c:341 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex 각 쿼리 다음 작업시간을 보여줌\n" -#: main/main.c:360 +#: main/main.c:342 #, c-format msgid "" " -T send SIGSTOP to all backend processes if one dies\n" @@ -14669,13 +15004,13 @@ msgstr "" " -T 하나의 하위 서버 프로세스가 비정상으로 마치며 모든\n" " 다른 서버 프로세스에게 SIGSTOP 신호를 보냄\n" -#: main/main.c:361 +#: main/main.c:343 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr "" " -W NUM 디버그 작업을 위해 지정한 숫자의 초만큼 기다린다\n" -#: main/main.c:363 +#: main/main.c:345 #, c-format msgid "" "\n" @@ -14684,28 +15019,28 @@ msgstr "" "\n" "단일사용자 모드에서 사용할 수 있는 옵션들:\n" -#: main/main.c:364 +#: main/main.c:346 #, c-format msgid "" " --single selects single-user mode (must be first argument)\n" msgstr " --single 단일 사용자 모드 선택 (인자의 첫번째로 와야함)\n" -#: main/main.c:365 +#: main/main.c:347 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME 데이터베이스 이름 (초기값: 사용자이름)\n" -#: main/main.c:366 +#: main/main.c:348 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 디버깅 수준\n" -#: main/main.c:367 +#: main/main.c:349 #, c-format msgid " -E echo statement before execution\n" msgstr " -E 실행하기 전에 작업명령을 출력함\n" -#: main/main.c:368 +#: main/main.c:350 #, c-format msgid "" " -j do not use newline as interactive query delimiter\n" @@ -14713,14 +15048,14 @@ msgstr "" " -j 대화형 쿼리의 명령 실행 구분 문자로 줄바꿈문자를 쓰지 않" "음\n" -#: main/main.c:369 main/main.c:374 +#: main/main.c:351 main/main.c:356 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr "" " -r FILENAME stdout, stderr 쪽으로 보내는 내용을 FILENAME 파일로 저장" "함\n" -#: main/main.c:371 +#: main/main.c:353 #, c-format msgid "" "\n" @@ -14729,25 +15064,25 @@ msgstr "" "\n" "부트스트랩 모드에서 사용할 수 있는 옵션들:\n" -#: main/main.c:372 +#: main/main.c:354 #, c-format msgid "" " --boot selects bootstrapping mode (must be first argument)\n" msgstr " --boot 부트스트랩 모드로 실행 (첫번째 인자로 와야함)\n" -#: main/main.c:373 +#: main/main.c:355 #, c-format msgid "" " DBNAME database name (mandatory argument in bootstrapping " "mode)\n" msgstr " DBNAME 데이터베이스 이름 (부트스트랩 모드에서 필수)\n" -#: main/main.c:375 +#: main/main.c:357 #, c-format msgid " -x NUM internal use\n" msgstr " -x NUM 내부적인 옵션\n" -#: main/main.c:377 +#: main/main.c:359 #, c-format msgid "" "\n" @@ -14755,16 +15090,21 @@ msgid "" "configuration settings and how to set them on the command line or in\n" "the configuration file.\n" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" "이 실시간 환경 변수용 설정값들의 자세한 사용법과\n" "서버 환경 설정 파일에 어떻게 지정하고 사용하는지에 대한 사항은\n" "PostgreSQL 문서를 참조하세요.\n" "\n" -"오류 보고: .\n" +"문제점 보고 주소: <%s>\n" -#: main/main.c:391 +#: main/main.c:363 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" + +#: main/main.c:374 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -14777,12 +15117,12 @@ msgstr "" "반드시 일반 사용자 ID(시스템 관리자 권한이 없는 ID)로 서버를 실행하십시오.\n" "Server를 어떻게 안전하게 기동하는가 하는 것은 문서를 참조하시기 바랍니다.\n" -#: main/main.c:408 +#: main/main.c:391 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: real 또는 effective user ID 들은 반드시 일치되어야 한다.\n" -#: main/main.c:415 +#: main/main.c:398 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -14806,14 +15146,25 @@ msgstr "\"%s\" 이름의 확장가능한 노드 형이 이미 있습니다" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "\"%s\" ExtensibleNodeMethods가 등록되어 있지 않음" -#: nodes/nodeFuncs.c:123 nodes/nodeFuncs.c:154 parser/parse_coerce.c:1915 -#: parser/parse_coerce.c:1943 parser/parse_coerce.c:2019 -#: parser/parse_expr.c:2201 parser/parse_func.c:705 parser/parse_oper.c:967 +#: nodes/nodeFuncs.c:122 nodes/nodeFuncs.c:153 parser/parse_coerce.c:2208 +#: parser/parse_coerce.c:2317 parser/parse_coerce.c:2352 +#: parser/parse_expr.c:2207 parser/parse_func.c:701 parser/parse_oper.c:967 +#: utils/fmgr/funcapi.c:528 #, c-format msgid "could not find array type for data type %s" msgstr "자료형 %s 에 대해서는 배열 자료형을 사용할 수 없습니다" -#: optimizer/path/joinrels.c:833 +#: nodes/params.c:359 +#, c-format +msgid "portal \"%s\" with parameters: %s" +msgstr "" + +#: nodes/params.c:362 +#, c-format +msgid "unnamed portal with parameters: %s" +msgstr "" + +#: optimizer/path/joinrels.c:855 #, c-format msgid "" "FULL JOIN is only supported with merge-joinable or hash-joinable join " @@ -14823,7 +15174,7 @@ msgstr "" "니다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1195 +#: optimizer/plan/initsplan.c:1193 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "" @@ -14831,97 +15182,97 @@ msgstr "" "다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1912 parser/analyze.c:1644 parser/analyze.c:1842 -#: parser/analyze.c:2700 +#: optimizer/plan/planner.c:1922 parser/analyze.c:1639 parser/analyze.c:1855 +#: parser/analyze.c:2715 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s 구문은 UNION/INTERSECT/EXCEPT 예약어들과 함께 사용할 수 없습니다." -#: optimizer/plan/planner.c:2498 optimizer/plan/planner.c:4157 +#: optimizer/plan/planner.c:2509 optimizer/plan/planner.c:4162 #, c-format msgid "could not implement GROUP BY" msgstr "GROUP BY를 구현할 수 없음" -#: optimizer/plan/planner.c:2499 optimizer/plan/planner.c:4158 -#: optimizer/plan/planner.c:4896 optimizer/prep/prepunion.c:1042 +#: optimizer/plan/planner.c:2510 optimizer/plan/planner.c:4163 +#: optimizer/plan/planner.c:4890 optimizer/prep/prepunion.c:1045 #, c-format msgid "" "Some of the datatypes only support hashing, while others only support " "sorting." msgstr "해싱만 지원하는 자료형도 있고, 정렬만 지원하는 자료형도 있습니다." -#: optimizer/plan/planner.c:4895 +#: optimizer/plan/planner.c:4889 #, c-format msgid "could not implement DISTINCT" msgstr "DISTINCT를 구현할 수 없음" -#: optimizer/plan/planner.c:5630 +#: optimizer/plan/planner.c:5737 #, c-format msgid "could not implement window PARTITION BY" msgstr "창 PARTITION BY를 구현할 수 없음" -#: optimizer/plan/planner.c:5631 +#: optimizer/plan/planner.c:5738 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "창 분할 칼럼은 정렬 가능한 데이터 형식이어야 합니다." -#: optimizer/plan/planner.c:5635 +#: optimizer/plan/planner.c:5742 #, c-format msgid "could not implement window ORDER BY" msgstr "창 ORDER BY를 구현할 수 없음" -#: optimizer/plan/planner.c:5636 +#: optimizer/plan/planner.c:5743 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "창 순서 지정 칼럼은 정렬 가능한 데이터 형식이어야 합니다." -#: optimizer/plan/setrefs.c:425 +#: optimizer/plan/setrefs.c:451 #, c-format msgid "too many range table entries" msgstr "너무 많은 테이블이 사용되었습니다" -#: optimizer/prep/prepunion.c:505 +#: optimizer/prep/prepunion.c:508 #, c-format msgid "could not implement recursive UNION" msgstr "재귀 UNION을 구현할 수 없음" -#: optimizer/prep/prepunion.c:506 +#: optimizer/prep/prepunion.c:509 #, c-format msgid "All column datatypes must be hashable." msgstr "모든 열 데이터 형식은 해시 가능해야 합니다." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1041 +#: optimizer/prep/prepunion.c:1044 #, c-format msgid "could not implement %s" msgstr "%s 구문은 구현할 수 없음" -#: optimizer/util/clauses.c:4781 +#: optimizer/util/clauses.c:4746 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "" -#: optimizer/util/plancat.c:130 +#: optimizer/util/plancat.c:132 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "복구 작업 중에는 임시 테이블이나, 언로그드 테이블을 접근할 수 없음" -#: optimizer/util/plancat.c:650 +#: optimizer/util/plancat.c:662 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "" -#: optimizer/util/plancat.c:667 +#: optimizer/util/plancat.c:679 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "ON CONFLICT 처리를 위해 관련된 인덱스가 없습니다" -#: optimizer/util/plancat.c:717 +#: optimizer/util/plancat.c:729 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "제외 제약 조건이 있어 ON CONFLICT DO UPDATE 작업은 할 수 없습니다" -#: optimizer/util/plancat.c:822 +#: optimizer/util/plancat.c:834 #, c-format msgid "" "there is no unique or exclusion constraint matching the ON CONFLICT " @@ -14929,63 +15280,63 @@ msgid "" msgstr "" "ON CONFLICT 절을 사용하는 경우, unique 나 exclude 제약 조건이 있어야 함" -#: parser/analyze.c:711 parser/analyze.c:1407 +#: parser/analyze.c:705 parser/analyze.c:1401 #, c-format msgid "VALUES lists must all be the same length" msgstr "VALUES 목록은 모두 같은 길이여야 함" -#: parser/analyze.c:914 +#: parser/analyze.c:904 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT 구문에 target columns 보다 더 많은 표현식이 존재하고 있다" -#: parser/analyze.c:932 +#: parser/analyze.c:922 #, c-format msgid "INSERT has more target columns than expressions" msgstr "" "INSERT 구문에 target columns 보다 더 많은 표현식(expressions)이 존재하고 있다" -#: parser/analyze.c:936 +#: parser/analyze.c:926 #, c-format msgid "" "The insertion source is a row expression containing the same number of " "columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "" -#: parser/analyze.c:1218 parser/analyze.c:1617 +#: parser/analyze.c:1210 parser/analyze.c:1612 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO 구문은 여기서는 사용할 수 없음" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1549 parser/analyze.c:2879 +#: parser/analyze.c:1542 parser/analyze.c:2894 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s 구문은 VALUES 에 적용할 수 없음" -#: parser/analyze.c:1767 +#: parser/analyze.c:1777 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "UNION/INTERSECT/EXCEPT ORDER BY 절이 잘못됨" -#: parser/analyze.c:1768 +#: parser/analyze.c:1778 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "결과 열 이름만 사용할 수 있고 식 또는 함수는 사용할 수 없습니다." -#: parser/analyze.c:1769 +#: parser/analyze.c:1779 #, c-format msgid "" "Add the expression/function to every SELECT, or move the UNION into a FROM " "clause." msgstr "모든 SELECT에 식/함수를 추가하거나 UNION을 FROM 절로 이동하십시오." -#: parser/analyze.c:1832 +#: parser/analyze.c:1845 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTO 는 UNION/INTERSECT/EXCEPT 의 첫번째 SELECT 에만 허용된다" -#: parser/analyze.c:1904 +#: parser/analyze.c:1917 #, c-format msgid "" "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of " @@ -14994,22 +15345,22 @@ msgstr "" "UNION/INTERSECT/EXCEPT 멤버 문에서 같은 쿼리 수준의 다른 관계를 참조할 수 없" "음" -#: parser/analyze.c:1993 +#: parser/analyze.c:2004 #, c-format msgid "each %s query must have the same number of columns" msgstr "각각의 %s query 는 같은 수의 columns 를 가져야 한다." -#: parser/analyze.c:2411 +#: parser/analyze.c:2426 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNING 절에는 적어도 하나 이상의 칼럼이 있어야 합니다" -#: parser/analyze.c:2452 +#: parser/analyze.c:2467 #, c-format msgid "cannot specify both SCROLL and NO SCROLL" msgstr "SCROLL 과 NO SCROLL 둘다를 명시할 수 없다" -#: parser/analyze.c:2471 +#: parser/analyze.c:2486 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "" @@ -15017,128 +15368,128 @@ msgstr "" "다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2479 +#: parser/analyze.c:2494 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s 구문은 지원되지 않음" -#: parser/analyze.c:2482 +#: parser/analyze.c:2497 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "보류 가능 커서는 READ ONLY여야 합니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2490 +#: parser/analyze.c:2505 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s 구문은 지원되지 않음" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2501 +#: parser/analyze.c:2516 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not supported" msgstr "DECLARE INSENSITIVE CURSOR ... %s 구문은 지원되지 않음" -#: parser/analyze.c:2504 +#: parser/analyze.c:2519 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "민감하지 않은 커서는 READ ONLY여야 합니다." -#: parser/analyze.c:2570 +#: parser/analyze.c:2585 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "" "구체화된 뷰 정의에 사용한 WITH 절 안에는 자료 변경 구문이 없어야 합니다" -#: parser/analyze.c:2580 +#: parser/analyze.c:2595 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "구체화된 뷰는 임시 테이블이나 뷰를 사용할 수 없습니다" -#: parser/analyze.c:2590 +#: parser/analyze.c:2605 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "" -#: parser/analyze.c:2602 +#: parser/analyze.c:2617 #, c-format msgid "materialized views cannot be unlogged" msgstr "구체화된 뷰는 UNLOGGED 옵션을 사용할 수 없습니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2707 +#: parser/analyze.c:2722 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s 절은 DISTINCT 절과 함께 사용할 수 없습니다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2714 +#: parser/analyze.c:2729 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s 절은 GROUP BY 절과 함께 사용할 수 없습니다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2721 +#: parser/analyze.c:2736 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s 절은 HAVING 절과 함께 사용할 수 없습니다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2728 +#: parser/analyze.c:2743 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s 절은 집계 함수와 함께 사용할 수 없습니다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2735 +#: parser/analyze.c:2750 #, c-format msgid "%s is not allowed with window functions" msgstr "%s 절은 윈도우 함수와 함께 사용할 수 없습니다" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2742 +#: parser/analyze.c:2757 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "%s 절은 대상 목록에서 세트 반환 함수와 함께 사용할 수 없습니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2821 +#: parser/analyze.c:2836 #, c-format msgid "%s must specify unqualified relation names" msgstr "%s 절에는 unqualified 릴레이션 이름을 지정해야 합니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2852 +#: parser/analyze.c:2867 #, c-format msgid "%s cannot be applied to a join" msgstr "%s 절은 조인을 적용할 수 없습니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2861 +#: parser/analyze.c:2876 #, c-format msgid "%s cannot be applied to a function" msgstr "%s 절은 함수에 적용할 수 없습니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2870 +#: parser/analyze.c:2885 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s 절은 테이블 함수에 적용할 수 없습니다." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2888 +#: parser/analyze.c:2903 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s 절은 WITH 쿼리에 적용할 수 없음" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2897 +#: parser/analyze.c:2912 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%s 절은 named tuplestore에 적용할 수 없음" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2917 +#: parser/analyze.c:2932 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "\"%s\" 릴레이션 (대상 구문: %s) 이 FROM 절 내에 없습니다" @@ -15314,7 +15665,7 @@ msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "COPY FROM WHERE 조건문에서는 그룹핑 연산이 허용되지 않습니다" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:567 parser/parse_clause.c:1778 +#: parser/parse_agg.c:567 parser/parse_clause.c:1828 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "집계 함수는 %s 절에서 사용할 수 없습니다." @@ -15337,8 +15688,8 @@ msgstr "" msgid "aggregate function calls cannot contain set-returning function calls" msgstr "집계 함수 호출은 집합 반환 함수 호출을 포함할 수 없음" -#: parser/parse_agg.c:758 parser/parse_expr.c:1839 parser/parse_expr.c:2328 -#: parser/parse_func.c:876 +#: parser/parse_agg.c:758 parser/parse_expr.c:1845 parser/parse_expr.c:2332 +#: parser/parse_func.c:872 #, c-format msgid "" "You might be able to move the set-returning function into a LATERAL FROM " @@ -15415,12 +15766,12 @@ msgid "window functions are not allowed in column generation expressions" msgstr "윈도우 함수는 미리 계산된 칼럼 생성 표현식에 사용할 수 없음" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:954 parser/parse_clause.c:1787 +#: parser/parse_agg.c:954 parser/parse_clause.c:1837 #, c-format msgid "window functions are not allowed in %s" msgstr "%s 안에서는 윈도우 함수를 사용할 수 없음" -#: parser/parse_agg.c:988 parser/parse_clause.c:2623 +#: parser/parse_agg.c:988 parser/parse_clause.c:2671 #, c-format msgid "window \"%s\" does not exist" msgstr "\"%s\" 윈도우 함수가 없음" @@ -15464,192 +15815,197 @@ msgid "" "level" msgstr "" -#: parser/parse_clause.c:198 +#: parser/parse_clause.c:191 #, c-format msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "\"%s\" 릴레이션은 자료 변경 구문의 대상이 될 수 없음" -#: parser/parse_clause.c:575 parser/parse_clause.c:603 parser/parse_func.c:2439 +#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2424 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "" -#: parser/parse_clause.c:615 +#: parser/parse_clause.c:611 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "다중 칼럼 정의 목록은 같은 함수용으로 허용하지 않음" -#: parser/parse_clause.c:648 +#: parser/parse_clause.c:644 #, c-format msgid "" "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "" -#: parser/parse_clause.c:649 +#: parser/parse_clause.c:645 #, c-format msgid "" "Put a separate column definition list for each function inside ROWS FROM()." msgstr "" -#: parser/parse_clause.c:655 +#: parser/parse_clause.c:651 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "" -#: parser/parse_clause.c:656 +#: parser/parse_clause.c:652 #, c-format msgid "" "Use separate UNNEST() calls inside ROWS FROM(), and attach a column " "definition list to each one." msgstr "" -#: parser/parse_clause.c:663 +#: parser/parse_clause.c:659 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY 구문은 칼럼 정의 목록과 함께 쓸 수 없습니다." -#: parser/parse_clause.c:664 +#: parser/parse_clause.c:660 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "ROWS FROM() 안에 칼럼 정의 목록을 넣으세요." -#: parser/parse_clause.c:767 +#: parser/parse_clause.c:760 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "" -#: parser/parse_clause.c:828 +#: parser/parse_clause.c:821 #, c-format msgid "column name \"%s\" is not unique" msgstr "\"%s\" 칼럼은 유일성을 가지지 못합니다(not unique)" -#: parser/parse_clause.c:870 +#: parser/parse_clause.c:863 #, c-format msgid "namespace name \"%s\" is not unique" msgstr "\"%s\" 네임스페이스는 유일성을 가지지 못합니다(not unique)" -#: parser/parse_clause.c:880 +#: parser/parse_clause.c:873 #, c-format msgid "only one default namespace is allowed" msgstr "기본 네임스페이스는 하나만 허용합니다" -#: parser/parse_clause.c:942 +#: parser/parse_clause.c:933 #, c-format msgid "tablesample method %s does not exist" msgstr "\"%s\" 테이블 샘플링 방법이 없습니다" -#: parser/parse_clause.c:964 +#: parser/parse_clause.c:955 #, c-format msgid "tablesample method %s requires %d argument, not %d" msgid_plural "tablesample method %s requires %d arguments, not %d" msgstr[0] "\"%s\" 테이블 샘플링 방법 %d개 인자를 지정해야함, (현재 %d개)" -#: parser/parse_clause.c:998 +#: parser/parse_clause.c:989 #, c-format msgid "tablesample method %s does not support REPEATABLE" msgstr "\"%s\" 테이블 샘플링 방법은 REPEATABLE 옵션을 지원하지 않음" -#: parser/parse_clause.c:1168 +#: parser/parse_clause.c:1135 #, c-format msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "TABLESAMPLE 절은 테이블과 구체화된 뷰에서만 사용할 수 있습니다" -#: parser/parse_clause.c:1338 +#: parser/parse_clause.c:1318 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "USING 절 내에 열 이름 \"%s\" 가 한번 이상 사용되었습니다" -#: parser/parse_clause.c:1353 +#: parser/parse_clause.c:1333 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "left table 내에 common column 이름 \"%s\" 가 한번 이상 사용되었다" -#: parser/parse_clause.c:1362 +#: parser/parse_clause.c:1342 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "USING 조건절에서 지정한 \"%s\" 칼럼이 왼쪽 테이블에 없음" -#: parser/parse_clause.c:1376 +#: parser/parse_clause.c:1357 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "common column name \"%s\"가 right table 에 한번 이상 사용되었다" -#: parser/parse_clause.c:1385 +#: parser/parse_clause.c:1366 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "USING 조건절에서 지정한 \"%s\" 칼럼이 오른쪽 테이블에 없음" -#: parser/parse_clause.c:1439 +#: parser/parse_clause.c:1447 #, c-format msgid "column alias list for \"%s\" has too many entries" msgstr " \"%s\" 를 위한 열 alias list 에 너무 많은 entry 가 포함되어 있다" +#: parser/parse_clause.c:1773 +#, c-format +msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" +msgstr "" + #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1748 +#: parser/parse_clause.c:1798 #, c-format msgid "argument of %s must not contain variables" msgstr "%s 의 인자로 변수를 포함할 수 없습니다." #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1913 +#: parser/parse_clause.c:1963 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "%s \"%s\" 가 명확하지 않은 표현입니다." #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1942 +#: parser/parse_clause.c:1992 #, c-format msgid "non-integer constant in %s" msgstr "정수가 아닌 상수가 %s 에 포함되어 있습니다" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1964 +#: parser/parse_clause.c:2014 #, c-format msgid "%s position %d is not in select list" msgstr "%s position %d 가 select list 에 포함되어 있지 않습니다" -#: parser/parse_clause.c:2405 +#: parser/parse_clause.c:2453 #, c-format msgid "CUBE is limited to 12 elements" msgstr "CUBE 인자로는 12개 이하의 인자만 허용합니다" -#: parser/parse_clause.c:2611 +#: parser/parse_clause.c:2659 #, c-format msgid "window \"%s\" is already defined" msgstr "\"%s\" 이름의 윈도우 함수가 이미 정의됨" -#: parser/parse_clause.c:2672 +#: parser/parse_clause.c:2720 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "\"%s\" 창의 PARTITION BY 절을 재정의할 수 없음" -#: parser/parse_clause.c:2684 +#: parser/parse_clause.c:2732 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "\"%s\" 창의 ORDER BY 절을 재정의할 수 없음" -#: parser/parse_clause.c:2714 parser/parse_clause.c:2720 +#: parser/parse_clause.c:2762 parser/parse_clause.c:2768 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "프래임 절이 있어, \"%s\" 윈도우를 복사할 수 없음." -#: parser/parse_clause.c:2722 +#: parser/parse_clause.c:2770 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "OVER 절에 괄호가 빠졌음" -#: parser/parse_clause.c:2742 +#: parser/parse_clause.c:2790 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" msgstr "" -#: parser/parse_clause.c:2765 +#: parser/parse_clause.c:2813 #, c-format msgid "GROUPS mode requires an ORDER BY clause" msgstr "GROUPS 모드는 ORDER BY 구문이 필요함" -#: parser/parse_clause.c:2835 +#: parser/parse_clause.c:2883 #, c-format msgid "" "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument " @@ -15658,204 +16014,255 @@ msgstr "" "DISTINCT, ORDER BY 표현식을 집계 함수와 쓸 때는, 반드시 select list 에 나타나" "야만 합니다" -#: parser/parse_clause.c:2836 +#: parser/parse_clause.c:2884 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "" "SELECT DISTINCT, ORDER BY 표현식을 위해서 반드시 select list 에 나타나야만 합" "니다" -#: parser/parse_clause.c:2868 +#: parser/parse_clause.c:2916 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "DISTINCT 예약어로 집계를 할 경우 적어도 하나의 인자는 있어야 함" -#: parser/parse_clause.c:2869 +#: parser/parse_clause.c:2917 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCT 구문은 적어도 한 개 이상의 칼럼이 있어야 합니다" -#: parser/parse_clause.c:2935 parser/parse_clause.c:2967 +#: parser/parse_clause.c:2983 parser/parse_clause.c:3015 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "" "SELECT DISTINCT ON 표현식은 반드시 초기 ORDER BY 표현식과 일치하여야 한다" -#: parser/parse_clause.c:3045 +#: parser/parse_clause.c:3093 #, c-format msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "ASC/DESC 예약어는 ON CONFLICT 절과 함께 사용할 수 없습니다." -#: parser/parse_clause.c:3051 +#: parser/parse_clause.c:3099 #, c-format msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "NULLS FIRST/LAST 절은 ON CONFLICT 절과 함께 사용할 수 없습니다." -#: parser/parse_clause.c:3130 +#: parser/parse_clause.c:3178 #, c-format msgid "" "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "" -#: parser/parse_clause.c:3131 +#: parser/parse_clause.c:3179 #, c-format msgid "For example, ON CONFLICT (column_name)." msgstr "사용예, ON CONFLICT (칼럼이름)." -#: parser/parse_clause.c:3142 +#: parser/parse_clause.c:3190 #, c-format msgid "ON CONFLICT is not supported with system catalog tables" msgstr "ON CONFLICT 절은 시스템 카탈로그 테이블에서는 사용할 수 없습니다" -#: parser/parse_clause.c:3150 +#: parser/parse_clause.c:3198 #, c-format msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" msgstr "" "\"%s\" 테이블에는 ON CONFLICT 기능을 사용할 수 없습니다. 이 테이블은 카탈로" "그 테이블로 사용됩니다." -#: parser/parse_clause.c:3293 +#: parser/parse_clause.c:3341 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "%s 연산자는 유효한 순서 지정 연산자가 아님" -#: parser/parse_clause.c:3295 +#: parser/parse_clause.c:3343 #, c-format msgid "" "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "" "순서 지정 연산자는 btree 연산자 패밀리의 \"<\" or \">\" 멤버여야 합니다." -#: parser/parse_clause.c:3606 +#: parser/parse_clause.c:3654 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" msgstr "" -#: parser/parse_clause.c:3612 +#: parser/parse_clause.c:3660 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s " "and offset type %s" msgstr "" -#: parser/parse_clause.c:3615 +#: parser/parse_clause.c:3663 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "" -#: parser/parse_clause.c:3620 +#: parser/parse_clause.c:3668 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for " "column type %s and offset type %s" msgstr "" -#: parser/parse_clause.c:3623 +#: parser/parse_clause.c:3671 #, c-format msgid "Cast the offset value to the exact intended type." msgstr "" -#: parser/parse_coerce.c:1022 parser/parse_coerce.c:1060 -#: parser/parse_coerce.c:1078 parser/parse_coerce.c:1093 -#: parser/parse_expr.c:2235 parser/parse_expr.c:2823 parser/parse_target.c:962 +#: parser/parse_coerce.c:1024 parser/parse_coerce.c:1062 +#: parser/parse_coerce.c:1080 parser/parse_coerce.c:1095 +#: parser/parse_expr.c:2241 parser/parse_expr.c:2819 parser/parse_target.c:967 #, c-format msgid "cannot cast type %s to %s" msgstr "%s 자료형을 %s 자료형으로 형변환할 수 없습니다." -#: parser/parse_coerce.c:1063 +#: parser/parse_coerce.c:1065 #, c-format msgid "Input has too few columns." msgstr "입력에 너무 적은 칼럼을 지정했습니다." -#: parser/parse_coerce.c:1081 +#: parser/parse_coerce.c:1083 #, c-format msgid "Cannot cast type %s to %s in column %d." msgstr "%s 자료형을 %s 자료형으로 형변환할 수 없습니다 해당 열 %d." -#: parser/parse_coerce.c:1096 +#: parser/parse_coerce.c:1098 #, c-format msgid "Input has too many columns." msgstr "입력에 너무 많은 칼럼을 지정했습니다." #. translator: first %s is name of a SQL construct, eg WHERE #. translator: first %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1151 parser/parse_coerce.c:1199 +#: parser/parse_coerce.c:1153 parser/parse_coerce.c:1201 #, c-format msgid "argument of %s must be type %s, not type %s" msgstr "%s의 인자는 %s 자료형이어야 함(%s 자료형이 아님)" #. translator: %s is name of a SQL construct, eg WHERE #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1162 parser/parse_coerce.c:1211 +#: parser/parse_coerce.c:1164 parser/parse_coerce.c:1213 #, c-format msgid "argument of %s must not return a set" msgstr "%s 의 인자는 set(집합) 을 return할수 없습니다." #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1351 +#: parser/parse_coerce.c:1353 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "%s 자료형 %s 와 %s 는 서로 매치되지 않습니다" +#: parser/parse_coerce.c:1465 +#, c-format +msgid "argument types %s and %s cannot be matched" +msgstr "인자 자료형으로 %s 와 %s 는 서로 매치되지 않습니다" + #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1418 +#: parser/parse_coerce.c:1517 #, c-format msgid "%s could not convert type %s to %s" msgstr "%s 는 자료형 %s 자료형에서 %s 자료형으로 변환될 수 없습니다." -#: parser/parse_coerce.c:1720 +#: parser/parse_coerce.c:1934 #, c-format msgid "arguments declared \"anyelement\" are not all alike" msgstr "\"anyelement\" 로 선언된 인자들이 모두 같지 않습니다" -#: parser/parse_coerce.c:1740 +#: parser/parse_coerce.c:1954 #, c-format msgid "arguments declared \"anyarray\" are not all alike" msgstr "\"anyarray\" 로 선언된 인자들이 모두 같지 않습니다." -#: parser/parse_coerce.c:1760 +#: parser/parse_coerce.c:1974 #, c-format msgid "arguments declared \"anyrange\" are not all alike" msgstr "\"anyarray\" 로 선언된 인자들이 모두 같지 않습니다." -#: parser/parse_coerce.c:1789 parser/parse_coerce.c:2004 -#: parser/parse_coerce.c:2038 +#: parser/parse_coerce.c:2008 parser/parse_coerce.c:2088 +#: utils/fmgr/funcapi.c:487 #, c-format msgid "argument declared %s is not an array but type %s" msgstr "%s 이름으로 선언된 인자가 array가 아니고, %s 자료형입니다" -#: parser/parse_coerce.c:1805 parser/parse_coerce.c:1844 +#: parser/parse_coerce.c:2029 #, c-format -msgid "argument declared %s is not consistent with argument declared %s" -msgstr "" -"%s 이름으로 선언된 인자가 %s 형으로 선언된 인자들과 일관성이 없습니다질 않습" -"니다" +msgid "arguments declared \"anycompatiblerange\" are not all alike" +msgstr "\"anycompatiblerange\" 로 선언된 인자들이 모두 같지 않습니다." -#: parser/parse_coerce.c:1827 parser/parse_coerce.c:2051 +#: parser/parse_coerce.c:2041 parser/parse_coerce.c:2122 +#: utils/fmgr/funcapi.c:501 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "%s 로 선언된 인자가 range 자료형이 아니고, %s 자료형입니다" -#: parser/parse_coerce.c:1865 +#: parser/parse_coerce.c:2079 +#, c-format +msgid "cannot determine element type of \"anyarray\" argument" +msgstr "\"anyarray\" 인자의 각 요소 자료형을 확인할 수 없음" + +#: parser/parse_coerce.c:2105 parser/parse_coerce.c:2139 +#, c-format +msgid "argument declared %s is not consistent with argument declared %s" +msgstr "" +"%s 이름으로 선언된 인자가 %s 형으로 선언된 인자들과 일관성이 없습니다질 않습" +"니다" + +#: parser/parse_coerce.c:2163 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "입력에 %s 형이 있어 다변 형식을 확인할 수 없음" -#: parser/parse_coerce.c:1876 +#: parser/parse_coerce.c:2177 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "anynonarray에 일치된 형식이 배열 형식임: %s" -#: parser/parse_coerce.c:1886 +#: parser/parse_coerce.c:2187 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "anyenum에 일치된 형식이 열거 형식이 아님: %s" -#: parser/parse_coerce.c:1926 parser/parse_coerce.c:1956 +#: parser/parse_coerce.c:2218 parser/parse_coerce.c:2267 +#: parser/parse_coerce.c:2329 parser/parse_coerce.c:2365 #, c-format -msgid "could not find range type for data type %s" -msgstr "자료형 %s 에 대해서는 배열 자료형을 사용할 수 없습니다" +msgid "could not determine polymorphic type %s because input has type %s" +msgstr "%s 다형 자료형을 결정할 수 없음, 입력 자료형이 %s 임" + +#: parser/parse_coerce.c:2228 +#, c-format +msgid "anycompatiblerange type %s does not match anycompatible type %s" +msgstr "" +"%s 자료형이 anycompatiblerange인데, 해당 %s anycompatible 자료형을 찾을 수 없음" + +#: parser/parse_coerce.c:2242 +#, c-format +msgid "type matched to anycompatiblenonarray is an array type: %s" +msgstr "일치한 anycompatiblenonarray 자료형이 배열 자료형임: %s" + +#: parser/parse_coerce.c:2433 +#, c-format +msgid "A result of type %s requires at least one input of type %s." +msgstr "%s 자료형의 결과가 적어도 하나의 %s 입력 자료형을 필요로 합니다." + +#: parser/parse_coerce.c:2445 +#, c-format +msgid "" +"A result of type %s requires at least one input of type anyelement, " +"anyarray, anynonarray, anyenum, or anyrange." +msgstr "" + +#: parser/parse_coerce.c:2457 +#, c-format +msgid "" +"A result of type %s requires at least one input of type anycompatible, " +"anycompatiblearray, anycompatiblenonarray, or anycompatiblerange." +msgstr "" + +#: parser/parse_coerce.c:2487 +msgid "A result of type internal requires at least one input of type internal." +msgstr "" #: parser/parse_collate.c:228 parser/parse_collate.c:475 #: parser/parse_collate.c:981 @@ -15998,8 +16405,8 @@ msgstr "\"%s\" 쿼리에 대한 재귀 참조가 여러 번 표시되지 않아 msgid "DEFAULT is not allowed in this context" msgstr "이 영역에서는 DEFAULT를 사용할 수 없습니다" -#: parser/parse_expr.c:402 parser/parse_relation.c:3352 -#: parser/parse_relation.c:3372 +#: parser/parse_expr.c:402 parser/parse_relation.c:3506 +#: parser/parse_relation.c:3526 #, c-format msgid "column %s.%s does not exist" msgstr "%s.%s 칼럼 없음" @@ -16033,35 +16440,35 @@ msgstr "DEFAULT 표현식에서는 열 reference를 사용할 수 없음" msgid "cannot use column reference in partition bound expression" msgstr "파티션 범위 표현식에서 칼럼 참조를 사용할 수 없음" -#: parser/parse_expr.c:844 parser/parse_relation.c:692 -#: parser/parse_relation.c:803 parser/parse_target.c:1200 +#: parser/parse_expr.c:850 parser/parse_relation.c:799 +#: parser/parse_relation.c:881 parser/parse_target.c:1207 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "칼럼 참조 \"%s\" 가 모호합니다." -#: parser/parse_expr.c:900 parser/parse_param.c:110 parser/parse_param.c:142 +#: parser/parse_expr.c:906 parser/parse_param.c:110 parser/parse_param.c:142 #: parser/parse_param.c:199 parser/parse_param.c:298 #, c-format msgid "there is no parameter $%d" msgstr "$%d 매개 변수가 없습니다" -#: parser/parse_expr.c:1143 +#: parser/parse_expr.c:1149 #, c-format msgid "NULLIF requires = operator to yield boolean" msgstr "NULIF 절은 boolean 값을 얻기 위해서 = 연산자를 필요로 합니다" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1149 parser/parse_expr.c:3139 +#: parser/parse_expr.c:1155 parser/parse_expr.c:3135 #, c-format msgid "%s must not return a set" msgstr "%s에서는 집합을 반환할 수 없습니다." -#: parser/parse_expr.c:1597 parser/parse_expr.c:1629 +#: parser/parse_expr.c:1603 parser/parse_expr.c:1635 #, c-format msgid "number of columns does not match number of values" msgstr "칼럼의 개수와, values의 개수가 틀립니다" -#: parser/parse_expr.c:1643 +#: parser/parse_expr.c:1649 #, c-format msgid "" "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() " @@ -16069,272 +16476,272 @@ msgid "" msgstr "" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1837 parser/parse_expr.c:2326 parser/parse_func.c:2555 +#: parser/parse_expr.c:1843 parser/parse_expr.c:2330 parser/parse_func.c:2540 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "%s 안에서는 집합 반환 함수를 사용할 수 없음" -#: parser/parse_expr.c:1898 +#: parser/parse_expr.c:1904 msgid "cannot use subquery in check constraint" msgstr "체크 제약 조건에서는 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1902 +#: parser/parse_expr.c:1908 msgid "cannot use subquery in DEFAULT expression" msgstr "DEFAULT 식에서는 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1905 +#: parser/parse_expr.c:1911 msgid "cannot use subquery in index expression" msgstr "인덱스 식(expression)에 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1908 +#: parser/parse_expr.c:1914 msgid "cannot use subquery in index predicate" msgstr "인덱스 술어(predicate)에 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1911 +#: parser/parse_expr.c:1917 msgid "cannot use subquery in transform expression" msgstr "transform 식(expression)에 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1914 +#: parser/parse_expr.c:1920 msgid "cannot use subquery in EXECUTE parameter" msgstr "EXECUTE 매개 변수로 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1917 +#: parser/parse_expr.c:1923 msgid "cannot use subquery in trigger WHEN condition" msgstr "트리거 WHEN 조건절에서는 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1920 +#: parser/parse_expr.c:1926 msgid "cannot use subquery in partition bound" msgstr "파티션 범위 표현식에 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1923 +#: parser/parse_expr.c:1929 msgid "cannot use subquery in partition key expression" msgstr "파티션 키 표현식에 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1926 +#: parser/parse_expr.c:1932 msgid "cannot use subquery in CALL argument" msgstr "CALL 매개 변수로 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1929 +#: parser/parse_expr.c:1935 msgid "cannot use subquery in COPY FROM WHERE condition" msgstr "COPY FROM WHERE 조건절에서는 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1932 +#: parser/parse_expr.c:1938 msgid "cannot use subquery in column generation expression" msgstr "미리 계산된 칼럼 생성 표현식에 서브쿼리를 사용할 수 없습니다" -#: parser/parse_expr.c:1985 +#: parser/parse_expr.c:1991 #, c-format msgid "subquery must return only one column" msgstr "subquery는 오로지 한개의 열만을 돌려 주어야 합니다." -#: parser/parse_expr.c:2069 +#: parser/parse_expr.c:2075 #, c-format msgid "subquery has too many columns" msgstr "subquery 에가 너무 많은 칼럼을 가집니다" -#: parser/parse_expr.c:2074 +#: parser/parse_expr.c:2080 #, c-format msgid "subquery has too few columns" msgstr "subquery 에 명시된 열 수가 너무 적다" -#: parser/parse_expr.c:2175 +#: parser/parse_expr.c:2181 #, c-format msgid "cannot determine type of empty array" msgstr "빈 배열의 자료형을 확인할 수 없음" -#: parser/parse_expr.c:2176 +#: parser/parse_expr.c:2182 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "원하는 형식으로 명시적으로 형변환하십시오(예: ARRAY[]::integer[])." -#: parser/parse_expr.c:2190 +#: parser/parse_expr.c:2196 #, c-format msgid "could not find element type for data type %s" msgstr "%s 자료형의 요소 자료형을 찾을 수 없음" -#: parser/parse_expr.c:2477 +#: parser/parse_expr.c:2481 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "이름이 지정되지 않은 XML 속성 값은 열 참조여야 함" -#: parser/parse_expr.c:2478 +#: parser/parse_expr.c:2482 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "이름이 지정되지 않은 XML 요소 값은 열 참조여야 함" -#: parser/parse_expr.c:2493 +#: parser/parse_expr.c:2497 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "\"%s\" XML 속성 이름이 여러 번 표시됨" -#: parser/parse_expr.c:2600 +#: parser/parse_expr.c:2604 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "XMLSERIALIZE 결과를 %s 형으로 바꿀 수 없음" -#: parser/parse_expr.c:2896 parser/parse_expr.c:3092 +#: parser/parse_expr.c:2892 parser/parse_expr.c:3088 #, c-format msgid "unequal number of entries in row expressions" msgstr "행 표현식에서 항목 수가 일치하지 않습니다" -#: parser/parse_expr.c:2906 +#: parser/parse_expr.c:2902 #, c-format msgid "cannot compare rows of zero length" msgstr "길이가 영(0)인 행들은 비교할 수 없습니다" -#: parser/parse_expr.c:2931 +#: parser/parse_expr.c:2927 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "" "행 비교 연산자는 boolean형을 리턴해야합니다. %s 자료형을 사용할 수 없습니다" -#: parser/parse_expr.c:2938 +#: parser/parse_expr.c:2934 #, c-format msgid "row comparison operator must not return a set" msgstr "행 비교 연산자는 set을 리턴할 수 없습니다" -#: parser/parse_expr.c:2997 parser/parse_expr.c:3038 +#: parser/parse_expr.c:2993 parser/parse_expr.c:3034 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "%s 행 비교 연산자의 구문을 분석할 수 없습니다" -#: parser/parse_expr.c:2999 +#: parser/parse_expr.c:2995 #, c-format msgid "" "Row comparison operators must be associated with btree operator families." msgstr "로우 비교 연산자를 btree 연산자 패밀리와 연결해야 함" -#: parser/parse_expr.c:3040 +#: parser/parse_expr.c:3036 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "여러 가지 등식들이 성립할 수 있는 가능성이 있습니다" -#: parser/parse_expr.c:3133 +#: parser/parse_expr.c:3129 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "" "IS DISTINCT FROM 절에서 boolean 값을 얻기 위해서 = 연산자를 필요로 합니다" -#: parser/parse_expr.c:3452 parser/parse_expr.c:3470 +#: parser/parse_expr.c:3448 parser/parse_expr.c:3466 #, c-format msgid "operator precedence change: %s is now lower precedence than %s" msgstr "연산자 우선순위 변경됨: %s 연산자 우선순위가 %s 연산보다 낮습니다" -#: parser/parse_func.c:195 +#: parser/parse_func.c:191 #, c-format msgid "argument name \"%s\" used more than once" msgstr "\"%s\" 이름의 매개 변수가 여러 번 사용 됨" -#: parser/parse_func.c:206 +#: parser/parse_func.c:202 #, c-format msgid "positional argument cannot follow named argument" msgstr "" -#: parser/parse_func.c:288 parser/parse_func.c:2258 +#: parser/parse_func.c:284 parser/parse_func.c:2243 #, c-format msgid "%s is not a procedure" msgstr "%s 개체는 프로시져가 아님" -#: parser/parse_func.c:292 +#: parser/parse_func.c:288 #, c-format msgid "To call a function, use SELECT." msgstr "" -#: parser/parse_func.c:298 +#: parser/parse_func.c:294 #, c-format msgid "%s is a procedure" msgstr "%s 개체는 프로시져임" -#: parser/parse_func.c:302 +#: parser/parse_func.c:298 #, c-format msgid "To call a procedure, use CALL." msgstr "" -#: parser/parse_func.c:316 +#: parser/parse_func.c:312 #, c-format msgid "%s(*) specified, but %s is not an aggregate function" msgstr "%s(*) 가 명시되어 있는데, 이 %s 함수는 집계 함수가 아닙니다." -#: parser/parse_func.c:323 +#: parser/parse_func.c:319 #, c-format msgid "DISTINCT specified, but %s is not an aggregate function" msgstr "DISTINCT 가 명시되어 있는데, 그러나 이 %s 함수는 집계 함수가 아닙니다" -#: parser/parse_func.c:329 +#: parser/parse_func.c:325 #, c-format msgid "WITHIN GROUP specified, but %s is not an aggregate function" msgstr "WITHIN GROUP 절이 명시되어 있는데, 이 %s 함수는 집계 함수가 아닙니다" -#: parser/parse_func.c:335 +#: parser/parse_func.c:331 #, c-format msgid "ORDER BY specified, but %s is not an aggregate function" msgstr "ORDER BY 절이 명시되어 있는데, 이 %s 함수는 집계 함수가 아닙니다." -#: parser/parse_func.c:341 +#: parser/parse_func.c:337 #, c-format msgid "FILTER specified, but %s is not an aggregate function" msgstr "FILTER 절이 명시되어 있는데, 이 %s 함수는 집계 함수가 아닙니다" -#: parser/parse_func.c:347 +#: parser/parse_func.c:343 #, c-format msgid "" "OVER specified, but %s is not a window function nor an aggregate function" msgstr "OVER 절이 지정되었는데 %s 함수는 윈도우 함수 또는 집계 함수가 아님" -#: parser/parse_func.c:385 +#: parser/parse_func.c:381 #, c-format msgid "WITHIN GROUP is required for ordered-set aggregate %s" msgstr "순서가 있는 집계함수인 %s 때문에 WITHIN GROUP 절이 필요합니다" -#: parser/parse_func.c:391 +#: parser/parse_func.c:387 #, c-format msgid "OVER is not supported for ordered-set aggregate %s" msgstr "OVER 절에서 정렬된 세트 집계 %s 함수를 지원하지 않음" -#: parser/parse_func.c:422 parser/parse_func.c:451 +#: parser/parse_func.c:418 parser/parse_func.c:447 #, c-format msgid "" "There is an ordered-set aggregate %s, but it requires %d direct arguments, " "not %d." msgstr "" -#: parser/parse_func.c:476 +#: parser/parse_func.c:472 #, c-format msgid "" "To use the hypothetical-set aggregate %s, the number of hypothetical direct " "arguments (here %d) must match the number of ordering columns (here %d)." msgstr "" -#: parser/parse_func.c:490 +#: parser/parse_func.c:486 #, c-format msgid "" "There is an ordered-set aggregate %s, but it requires at least %d direct " "arguments." msgstr "" -#: parser/parse_func.c:509 +#: parser/parse_func.c:505 #, c-format msgid "%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP" msgstr "" "%s 함수는 순사가 있는 세트 집계함수가 아니여서 WITHIN GROUP 절을 사용할 수 없" "습니다" -#: parser/parse_func.c:522 +#: parser/parse_func.c:518 #, c-format msgid "window function %s requires an OVER clause" msgstr "%s 윈도우 함수 호출에는 OVER 절이 필요함" -#: parser/parse_func.c:529 +#: parser/parse_func.c:525 #, c-format msgid "window function %s cannot have WITHIN GROUP" msgstr "%s 윈도우 함수는 WITHIN GROUP 절을 사용할 수 없음" -#: parser/parse_func.c:558 +#: parser/parse_func.c:554 #, c-format msgid "procedure %s is not unique" msgstr "%s 프로시져는 유일성을 가지지 못합니다(not unique)" -#: parser/parse_func.c:561 +#: parser/parse_func.c:557 #, c-format msgid "" "Could not choose a best candidate procedure. You might need to add explicit " @@ -16343,12 +16750,12 @@ msgstr "" "가장 적당한 프로시져를 선택할 수 없습니다. 명시적 형변환자를 추가해야 할 수" "도 있습니다." -#: parser/parse_func.c:567 +#: parser/parse_func.c:563 #, c-format msgid "function %s is not unique" msgstr "함수 %s 는 유일성을 가지지 못합니다(not unique)" -#: parser/parse_func.c:570 +#: parser/parse_func.c:566 #, c-format msgid "" "Could not choose a best candidate function. You might need to add explicit " @@ -16357,7 +16764,7 @@ msgstr "" "제일 적당한 함수를 선택할 수 없습니다. 명시적 형변환자를 추가해야 할 수도 있" "습니다." -#: parser/parse_func.c:609 +#: parser/parse_func.c:605 #, c-format msgid "" "No aggregate function matches the given name and argument types. Perhaps you " @@ -16368,12 +16775,12 @@ msgstr "" "른 위치에 쓰지 않은 것 같습니다. ORDER BY 절은 모든 집계용 인자들 맨 뒤에 있" "어야 합니다." -#: parser/parse_func.c:617 parser/parse_func.c:2301 +#: parser/parse_func.c:613 parser/parse_func.c:2286 #, c-format msgid "procedure %s does not exist" msgstr "\"%s\" 프로시져 없음" -#: parser/parse_func.c:620 +#: parser/parse_func.c:616 #, c-format msgid "" "No procedure matches the given name and argument types. You might need to " @@ -16382,7 +16789,7 @@ msgstr "" "지정된 이름 및 인자 형식과 일치하는 프로시져가 없습니다. 명시적 형변환자를 추" "가해야 할 수도 있습니다." -#: parser/parse_func.c:629 +#: parser/parse_func.c:625 #, c-format msgid "" "No function matches the given name and argument types. You might need to add " @@ -16391,216 +16798,216 @@ msgstr "" "지정된 이름 및 인자 자료형과 일치하는 함수가 없습니다. 명시적 형변환자를 추가" "해야 할 수도 있습니다." -#: parser/parse_func.c:731 +#: parser/parse_func.c:727 #, c-format msgid "VARIADIC argument must be an array" msgstr "VARIADIC 매개 변수는 배열이어야 함" -#: parser/parse_func.c:783 parser/parse_func.c:847 +#: parser/parse_func.c:779 parser/parse_func.c:843 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "%s(*) 사용할 때는 이 함수가 매개 변수 없는 집계 함수여야 합니다" -#: parser/parse_func.c:790 +#: parser/parse_func.c:786 #, c-format msgid "aggregates cannot return sets" msgstr "집계 함수는 세트를 반환할 수 없음" -#: parser/parse_func.c:805 +#: parser/parse_func.c:801 #, c-format msgid "aggregates cannot use named arguments" msgstr "집계 함수는 인자 이름을 사용할 수 없음" -#: parser/parse_func.c:837 +#: parser/parse_func.c:833 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "윈도우 함수에 대해 DISTINCT가 구현되지 않음" -#: parser/parse_func.c:857 +#: parser/parse_func.c:853 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "윈도우 함수에 대해 집계용 ORDER BY가 구현되지 않음" -#: parser/parse_func.c:866 +#: parser/parse_func.c:862 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "비집계 윈도우 함수에 대해 FILTER가 구현되지 않음" -#: parser/parse_func.c:875 +#: parser/parse_func.c:871 #, c-format msgid "window function calls cannot contain set-returning function calls" msgstr "윈도우 함수 호출에 집합 반환 함수 호출을 포함할 수 없음" -#: parser/parse_func.c:883 +#: parser/parse_func.c:879 #, c-format msgid "window functions cannot return sets" msgstr "윈도우 함수는 세트를 반환할 수 없음" -#: parser/parse_func.c:2139 parser/parse_func.c:2330 +#: parser/parse_func.c:2124 parser/parse_func.c:2315 #, c-format msgid "could not find a function named \"%s\"" msgstr "\"%s\" 함수를 찾을 수 없음" -#: parser/parse_func.c:2153 parser/parse_func.c:2348 +#: parser/parse_func.c:2138 parser/parse_func.c:2333 #, c-format msgid "function name \"%s\" is not unique" msgstr "\"%s\" 함수 이름은 유일성을 가지지 못합니다(not unique)" -#: parser/parse_func.c:2155 parser/parse_func.c:2350 +#: parser/parse_func.c:2140 parser/parse_func.c:2335 #, c-format msgid "Specify the argument list to select the function unambiguously." msgstr "입력 인자를 다르게 해서 이 모호함을 피하세요." -#: parser/parse_func.c:2199 +#: parser/parse_func.c:2184 #, c-format msgid "procedures cannot have more than %d argument" msgid_plural "procedures cannot have more than %d arguments" msgstr[0] "프로시져는 %d개 이상의 인자를 사용할 수 없음" -#: parser/parse_func.c:2248 +#: parser/parse_func.c:2233 #, c-format msgid "%s is not a function" msgstr "%s 이름의 개체는 함수가 아닙니다" -#: parser/parse_func.c:2268 +#: parser/parse_func.c:2253 #, c-format msgid "function %s is not an aggregate" msgstr "%s 함수는 집계 함수가 아닙니다" -#: parser/parse_func.c:2296 +#: parser/parse_func.c:2281 #, c-format msgid "could not find a procedure named \"%s\"" msgstr "\"%s\" 이름의 프로시져를 찾을 수 없음" -#: parser/parse_func.c:2310 +#: parser/parse_func.c:2295 #, c-format msgid "could not find an aggregate named \"%s\"" msgstr "\"%s\" 이름의 집계 함수를 찾을 수 없음" -#: parser/parse_func.c:2315 +#: parser/parse_func.c:2300 #, c-format msgid "aggregate %s(*) does not exist" msgstr "%s(*) 집계 함수 없음" -#: parser/parse_func.c:2320 +#: parser/parse_func.c:2305 #, c-format msgid "aggregate %s does not exist" msgstr "%s 집계 함수 없음" -#: parser/parse_func.c:2355 +#: parser/parse_func.c:2340 #, c-format msgid "procedure name \"%s\" is not unique" msgstr "\"%s\" 프로시져는 유일성을 가지지 못합니다(not unique)" -#: parser/parse_func.c:2357 +#: parser/parse_func.c:2342 #, c-format msgid "Specify the argument list to select the procedure unambiguously." msgstr "해당 프로시져의 입력 인자를 다르게 해서 이 모호함을 피하세요." -#: parser/parse_func.c:2362 +#: parser/parse_func.c:2347 #, c-format msgid "aggregate name \"%s\" is not unique" msgstr "\"%s\" 집계 함수가 유일성을 가지지 못합니다(not unique)" -#: parser/parse_func.c:2364 +#: parser/parse_func.c:2349 #, c-format msgid "Specify the argument list to select the aggregate unambiguously." msgstr "해당 집계 함수의 입력 인자를 다르게 해서 이 모호함을 피하세요." -#: parser/parse_func.c:2369 +#: parser/parse_func.c:2354 #, c-format msgid "routine name \"%s\" is not unique" msgstr "\"%s\" 루틴 이름은 유일성을 가지지 못합니다(not unique)" -#: parser/parse_func.c:2371 +#: parser/parse_func.c:2356 #, c-format msgid "Specify the argument list to select the routine unambiguously." msgstr "해당 루틴의 입력 인자를 다르게 해서 이 모호함을 피하세요." -#: parser/parse_func.c:2426 +#: parser/parse_func.c:2411 msgid "set-returning functions are not allowed in JOIN conditions" msgstr "집합 반환 함수는 JOIN 조건에 사용할 수 없음" -#: parser/parse_func.c:2447 +#: parser/parse_func.c:2432 msgid "set-returning functions are not allowed in policy expressions" msgstr "집합 반환 함수는 정책 식에 사용할 수 없음" -#: parser/parse_func.c:2463 +#: parser/parse_func.c:2448 msgid "set-returning functions are not allowed in window definitions" msgstr "집합 반환 함수는 윈도우 함수 정의에 사용할 수 없음" -#: parser/parse_func.c:2501 +#: parser/parse_func.c:2486 msgid "set-returning functions are not allowed in check constraints" msgstr "집합 반환 함수는 check 제약조건에 사용할 수 없음" -#: parser/parse_func.c:2505 +#: parser/parse_func.c:2490 msgid "set-returning functions are not allowed in DEFAULT expressions" msgstr "집합 반환 함수는 DEFAULT 식에서 사용할 수 없음" -#: parser/parse_func.c:2508 +#: parser/parse_func.c:2493 msgid "set-returning functions are not allowed in index expressions" msgstr "집합 반환 함수는 인덱스 식에서 사용할 수 없음" -#: parser/parse_func.c:2511 +#: parser/parse_func.c:2496 msgid "set-returning functions are not allowed in index predicates" msgstr "집합 반환 함수는 함수 기반 인덱스에서 사용할 수 없음" -#: parser/parse_func.c:2514 +#: parser/parse_func.c:2499 msgid "set-returning functions are not allowed in transform expressions" msgstr "집합 반환 함수는 transform 식에서 사용할 수 없음" -#: parser/parse_func.c:2517 +#: parser/parse_func.c:2502 msgid "set-returning functions are not allowed in EXECUTE parameters" msgstr "집합 반환 함수는 EXECUTE 매개 변수 설정 값으로 사용할 수 없음" -#: parser/parse_func.c:2520 +#: parser/parse_func.c:2505 msgid "set-returning functions are not allowed in trigger WHEN conditions" msgstr "집합 반환 함수는 트리거의 WHEN 조건절에서 사용할 수 없음" -#: parser/parse_func.c:2523 +#: parser/parse_func.c:2508 msgid "set-returning functions are not allowed in partition bound" msgstr "집합 반환 함수는 파티션 범위 식에서 사용할 수 없음" -#: parser/parse_func.c:2526 +#: parser/parse_func.c:2511 msgid "set-returning functions are not allowed in partition key expressions" msgstr "집합 반환 함수는 인덱스 식에서 사용할 수 없음" -#: parser/parse_func.c:2529 +#: parser/parse_func.c:2514 msgid "set-returning functions are not allowed in CALL arguments" msgstr "집합 반환 함수는 CALL 명령의 인자로 사용할 수 없음" -#: parser/parse_func.c:2532 +#: parser/parse_func.c:2517 msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" msgstr "집합 반환 함수는 COPY FROM WHERE 조건절에 사용할 수 없음" -#: parser/parse_func.c:2535 +#: parser/parse_func.c:2520 msgid "" "set-returning functions are not allowed in column generation expressions" msgstr "집합 반환 함수는 미리 계산된 칼럼의 생성식에 사용할 수 없음" -#: parser/parse_node.c:87 +#: parser/parse_node.c:86 #, c-format msgid "target lists can have at most %d entries" msgstr "대상 목록은 최대 %d 개의 항목을 지정할 수 있습니다" -#: parser/parse_node.c:257 +#: parser/parse_node.c:235 #, c-format msgid "cannot subscript type %s because it is not an array" msgstr "" "자료형 %s 는 배열이 아니기 때문에 배열 하위 스크립트를 기술할 수 없습니다." -#: parser/parse_node.c:362 parser/parse_node.c:399 +#: parser/parse_node.c:340 parser/parse_node.c:377 #, c-format msgid "array subscript must have type integer" msgstr "배열 하위 스크립트는 반드시 정수형이어야 합니다." -#: parser/parse_node.c:430 +#: parser/parse_node.c:408 #, c-format msgid "array assignment requires type %s but expression is of type %s" msgstr "배열할당은 자료형 %s 가 필요하지만, 현재 표현식이 %s 자료형입니다" -#: parser/parse_oper.c:125 parser/parse_oper.c:724 utils/adt/regproc.c:520 -#: utils/adt/regproc.c:704 +#: parser/parse_oper.c:125 parser/parse_oper.c:724 utils/adt/regproc.c:521 +#: utils/adt/regproc.c:705 #, c-format msgid "operator does not exist: %s" msgstr "연산자 없음: %s" @@ -16674,27 +17081,27 @@ msgstr "op ANY/ALL (array) 는 set 을 return 하지 않는 연산자가 요구 msgid "inconsistent types deduced for parameter $%d" msgstr "inconsistent types deduced for parameter $%d" -#: parser/parse_relation.c:179 +#: parser/parse_relation.c:201 #, c-format msgid "table reference \"%s\" is ambiguous" msgstr "테이블 참조 \"%s\" 가 명확하지 않습니다 (ambiguous)." -#: parser/parse_relation.c:223 +#: parser/parse_relation.c:245 #, c-format msgid "table reference %u is ambiguous" msgstr "테이블 참조 %u 가 명확하지 않습니다 (ambiguous)." -#: parser/parse_relation.c:422 +#: parser/parse_relation.c:444 #, c-format msgid "table name \"%s\" specified more than once" msgstr "테이블 이름 \"%s\" 가 한번 이상 명시되어 있습니다." -#: parser/parse_relation.c:449 parser/parse_relation.c:3292 +#: parser/parse_relation.c:473 parser/parse_relation.c:3446 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "\"%s\" 테이블을 사용하는 FROM 절에 대한 참조가 잘못 되었습니다." -#: parser/parse_relation.c:452 parser/parse_relation.c:3297 +#: parser/parse_relation.c:477 parser/parse_relation.c:3451 #, c-format msgid "" "There is an entry for table \"%s\", but it cannot be referenced from this " @@ -16702,37 +17109,37 @@ msgid "" msgstr "" "\"%s\" 테이블에 대한 항목이 있지만 이 쿼리 부분에서 참조할 수 없습니다." -#: parser/parse_relation.c:454 +#: parser/parse_relation.c:479 #, c-format msgid "The combining JOIN type must be INNER or LEFT for a LATERAL reference." msgstr "" -#: parser/parse_relation.c:730 +#: parser/parse_relation.c:690 #, c-format msgid "system column \"%s\" reference in check constraint is invalid" msgstr "제약 조건에서 참조하는 \"%s\" 시스템 칼럼이 없음" -#: parser/parse_relation.c:741 +#: parser/parse_relation.c:699 #, c-format msgid "cannot use system column \"%s\" in column generation expression" msgstr "" "\"%s\" 칼럼은 시스템 칼럼임. 미리 계산된 칼럼의 생성식에 사용할 수 없음" -#: parser/parse_relation.c:1100 parser/parse_relation.c:1404 -#: parser/parse_relation.c:1985 +#: parser/parse_relation.c:1170 parser/parse_relation.c:1620 +#: parser/parse_relation.c:2262 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "" "테이블 \"%s\" 에는 %d 개의 칼럼이 있는데, %d 개의 칼럼만 명시되었습니다." -#: parser/parse_relation.c:1187 +#: parser/parse_relation.c:1372 #, c-format msgid "" "There is a WITH item named \"%s\", but it cannot be referenced from this " "part of the query." msgstr "\"%s\"(이)라는 WITH 항목이 있지만 이 쿼리 부분에서 참조할 수 없습니다." -#: parser/parse_relation.c:1189 +#: parser/parse_relation.c:1374 #, c-format msgid "" "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." @@ -16740,7 +17147,7 @@ msgstr "" "WITH RECURSIVE를 사용하거나 WITH 항목의 순서를 변경하여 정방향 참조를 제거하" "십시오." -#: parser/parse_relation.c:1525 +#: parser/parse_relation.c:1747 #, c-format msgid "" "a column definition list is only allowed for functions returning \"record\"" @@ -16748,59 +17155,57 @@ msgstr "" "열 정의 리스트 (column definition list) 는 오로지 \"record\" 를 리턴하는 함" "수 내에서만 허용됩니다." -#: parser/parse_relation.c:1534 +#: parser/parse_relation.c:1756 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "" "열 정의 리스트(column definition list)는 \"record\" 를 리턴하는 함수를 필요" "로 합니다" -#: parser/parse_relation.c:1620 +#: parser/parse_relation.c:1845 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "" "FROM 절 내의 함수 \"%s\" 에 지원되지 않는 return 자료형 %s 이 있습니다." -#: parser/parse_relation.c:1811 +#: parser/parse_relation.c:2054 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "" "VALUES 뒤에 오는 \"%s\" 구문에는 %d개의 칼럼이 있는데, 지정한 칼럼은 %d개 입" "니다" -#: parser/parse_relation.c:1867 +#: parser/parse_relation.c:2125 #, c-format msgid "joins can have at most %d columns" msgstr "조인에는 최대 %d개의 칼럼을 포함할 수 있음" -#: parser/parse_relation.c:1958 +#: parser/parse_relation.c:2235 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "" -#: parser/parse_relation.c:2899 parser/parse_relation.c:2937 -#: parser/parse_relation.c:2946 parser/parse_relation.c:3072 -#: parser/parse_relation.c:3082 +#: parser/parse_relation.c:3221 parser/parse_relation.c:3231 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "%d번째 칼럼이 없습니다. 해당 릴레이션: \"%s\"" -#: parser/parse_relation.c:3295 +#: parser/parse_relation.c:3449 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "아 \"%s\" alias를 참조해야 할 것 같습니다." -#: parser/parse_relation.c:3303 +#: parser/parse_relation.c:3457 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "테이블 \"%s\"에 FROM 절이 빠져 있습니다." -#: parser/parse_relation.c:3355 +#: parser/parse_relation.c:3509 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "아마 \"%s.%s\" 칼럼을 참조하는 것 같습니다." -#: parser/parse_relation.c:3357 +#: parser/parse_relation.c:3511 #, c-format msgid "" "There is a column named \"%s\" in table \"%s\", but it cannot be referenced " @@ -16809,33 +17214,33 @@ msgstr "" "\"%s\" 이름의 칼럼이 \"%s\" 테이블에 있지만, 이 쿼리의 이 부분에서는 참조될 " "수 없습니다." -#: parser/parse_relation.c:3374 +#: parser/parse_relation.c:3528 #, c-format msgid "" "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "아마 \"%s.%s\" 칼럼이나 \"%s.%s\" 칼럼을 참조하는 것 같습니다." -#: parser/parse_target.c:484 parser/parse_target.c:791 +#: parser/parse_target.c:478 parser/parse_target.c:792 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "시스템 열 \"%s\"에 할당할 수 없습니다." -#: parser/parse_target.c:512 +#: parser/parse_target.c:506 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "배열 요소를 DEFAULT 로 설정할 수 없습니다." -#: parser/parse_target.c:517 +#: parser/parse_target.c:511 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "하위필드를 DEFAULT로 설정할 수 없습니다." -#: parser/parse_target.c:586 +#: parser/parse_target.c:584 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "열 \"%s\"은(는) %s 자료형인데 표현식은 %s 자료형입니다." -#: parser/parse_target.c:775 +#: parser/parse_target.c:776 #, c-format msgid "" "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a " @@ -16844,7 +17249,7 @@ msgstr "" "\"%s\" 필드 (대상 열 \"%s\")를 지정할 수 없음, %s 자료형은 복합자료형이 아니" "기 때문" -#: parser/parse_target.c:784 +#: parser/parse_target.c:785 #, c-format msgid "" "cannot assign to field \"%s\" of column \"%s\" because there is no such " @@ -16853,240 +17258,248 @@ msgstr "" "\"%s\" 필드 (대상 열 \"%s\")를 지정할 수 없음, %s 자료형에서 그런 칼럼을 찾" "을 수 없음" -#: parser/parse_target.c:861 +#: parser/parse_target.c:864 #, c-format msgid "" "array assignment to \"%s\" requires type %s but expression is of type %s" msgstr "" "\"%s\" 열에 사용된 자료형은 %s 가 필요하지만, 현재 표현식이 %s 자료형입니다" -#: parser/parse_target.c:871 +#: parser/parse_target.c:874 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "하위필드 \"%s\" 는 %s 자료형인데 표현식은 %s 자료형입니다." -#: parser/parse_target.c:1290 +#: parser/parse_target.c:1295 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "테이블이 명시되지 않은 SELECT * 구문은 유효하지 않습니다." -#: parser/parse_type.c:101 +#: parser/parse_type.c:100 #, c-format msgid "improper %%TYPE reference (too few dotted names): %s" msgstr "" "적절하지 않은 %%TYPE reference 입니다 (dotted name 이 너무 적습니다): %s" -#: parser/parse_type.c:123 +#: parser/parse_type.c:122 #, c-format msgid "improper %%TYPE reference (too many dotted names): %s" msgstr "" "적절하지 않은 %%TYPE reference 입니다 (dotted name 이 너무 많습니다): %s" -#: parser/parse_type.c:158 +#: parser/parse_type.c:157 #, c-format msgid "type reference %s converted to %s" msgstr "ype reference %s 가 %s 로 변환되었습니다." -#: parser/parse_type.c:279 parser/parse_type.c:858 utils/cache/typcache.c:374 +#: parser/parse_type.c:278 parser/parse_type.c:857 utils/cache/typcache.c:383 +#: utils/cache/typcache.c:437 #, c-format msgid "type \"%s\" is only a shell" msgstr "자료형 \"%s\" 는 오로지 shell 에만 있습니다. " -#: parser/parse_type.c:364 +#: parser/parse_type.c:363 #, c-format msgid "type modifier is not allowed for type \"%s\"" msgstr "\"%s\" 형식에는 형식 한정자를 사용할 수 없음" -#: parser/parse_type.c:406 +#: parser/parse_type.c:405 #, c-format msgid "type modifiers must be simple constants or identifiers" msgstr "자료형 한정자는 단순 상수 또는 식별자여야 함" -#: parser/parse_type.c:722 parser/parse_type.c:821 +#: parser/parse_type.c:721 parser/parse_type.c:820 #, c-format msgid "invalid type name \"%s\"" msgstr "\"%s\" 자료형 이름은 유효하지 않은 자료형입니다." -#: parser/parse_utilcmd.c:263 +#: parser/parse_utilcmd.c:264 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "상속 하위 테이블로 파티션된 테이블을 만들 수 없음" -#: parser/parse_utilcmd.c:426 +#: parser/parse_utilcmd.c:428 #, c-format msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" msgstr "" "%s 명령으로 \"%s\" 시퀀스가 자동으로 만들어짐 (\"%s.%s\" serial 열 때문)" -#: parser/parse_utilcmd.c:550 +#: parser/parse_utilcmd.c:559 #, c-format msgid "array of serial is not implemented" msgstr "serial 배열이 구현되지 않음" -#: parser/parse_utilcmd.c:627 parser/parse_utilcmd.c:639 +#: parser/parse_utilcmd.c:637 parser/parse_utilcmd.c:649 #, c-format msgid "" "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "NULL/NOT NULL 선언이 서로 충돌합니다 : column \"%s\" of table \"%s\"" -#: parser/parse_utilcmd.c:651 +#: parser/parse_utilcmd.c:661 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "\"%s\" 칼럼(\"%s\" 테이블)에 대해 여러 개의 기본 값이 지정됨" -#: parser/parse_utilcmd.c:668 +#: parser/parse_utilcmd.c:678 #, c-format msgid "identity columns are not supported on typed tables" msgstr "" "식별 칼럼은 타입드 테이블(typed table - 자료형으로써 테이블)에서는 쓸 수 없음" -#: parser/parse_utilcmd.c:672 +#: parser/parse_utilcmd.c:682 #, c-format msgid "identity columns are not supported on partitions" msgstr "식별 칼럼은 파티션된 테이블에서는 사용할 수 없음" -#: parser/parse_utilcmd.c:681 +#: parser/parse_utilcmd.c:691 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "\"%s\" 칼럼(\"%s\" 테이블)에 대해 여러 개의 식별자 지정이 사용되었음" -#: parser/parse_utilcmd.c:700 +#: parser/parse_utilcmd.c:711 #, c-format msgid "generated columns are not supported on typed tables" msgstr "" "미리 계산된 칼럼은 타입드 테이블(typed table - 자료형으로써 테이블)에서는 쓸 " "수 없음" -#: parser/parse_utilcmd.c:704 +#: parser/parse_utilcmd.c:715 #, c-format msgid "generated columns are not supported on partitions" msgstr "미리 계산된 칼럼은 파티션된 테이블에서는 사용할 수 없음" -#: parser/parse_utilcmd.c:709 +#: parser/parse_utilcmd.c:720 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "\"%s\" 칼럼(\"%s\" 테이블)에 대해 여러 개의 생성식이 지정됨" -#: parser/parse_utilcmd.c:727 parser/parse_utilcmd.c:842 +#: parser/parse_utilcmd.c:738 parser/parse_utilcmd.c:853 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "기본키 제약 조건을 외부 테이블에서는 사용할 수 없음" -#: parser/parse_utilcmd.c:736 parser/parse_utilcmd.c:852 +#: parser/parse_utilcmd.c:747 parser/parse_utilcmd.c:863 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "유니크 제약 조건은 외부 테이블에서는 사용할 수 없음" -#: parser/parse_utilcmd.c:781 +#: parser/parse_utilcmd.c:792 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "\"%s\" 칼럼(\"%s\" 테이블)에 대해 default와 식별자 정의가 함께 있음" -#: parser/parse_utilcmd.c:797 +#: parser/parse_utilcmd.c:800 +#, c-format +msgid "" +"both default and generation expression specified for column \"%s\" of table " +"\"%s\"" +msgstr "\"%s\" 칼럼(해당 테이블 \"%s\")에 대해 default 정의와 미리 계산된 표현식이 함께 있음" + +#: parser/parse_utilcmd.c:808 #, c-format msgid "" "both identity and generation expression specified for column \"%s\" of table " "\"%s\"" -msgstr "\"%s\" 칼럼(\"%s\" 테이블)에 대해 식별자 정의와 생성식이 함께 있음" +msgstr "\"%s\" 칼럼(해당 테이블 \"%s\")에 대해 identity 정의와 미리 계산된 표현식이 함께 있음" -#: parser/parse_utilcmd.c:862 +#: parser/parse_utilcmd.c:873 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "제외 제약 조건은 외부 테이블에서는 사용할 수 없음" -#: parser/parse_utilcmd.c:868 +#: parser/parse_utilcmd.c:879 #, c-format msgid "exclusion constraints are not supported on partitioned tables" msgstr "제외 제약 조건은 파티션된 테이블에서는 사용할 수 없음" -#: parser/parse_utilcmd.c:932 +#: parser/parse_utilcmd.c:944 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "외부 테이블을 만들 때는 LIKE 옵션을 쓸 수 없음" -#: parser/parse_utilcmd.c:1563 parser/parse_utilcmd.c:1670 +#: parser/parse_utilcmd.c:1704 parser/parse_utilcmd.c:1813 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "" -#: parser/parse_utilcmd.c:2036 +#: parser/parse_utilcmd.c:2163 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "" -#: parser/parse_utilcmd.c:2056 +#: parser/parse_utilcmd.c:2183 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "" -#: parser/parse_utilcmd.c:2071 +#: parser/parse_utilcmd.c:2198 #, c-format msgid "index \"%s\" is not valid" msgstr "\"%s\" 인덱스는 사용가능 상태가 아님" -#: parser/parse_utilcmd.c:2077 +#: parser/parse_utilcmd.c:2204 #, c-format msgid "\"%s\" is not a unique index" msgstr "\"%s\" 개체는 유니크 인덱스가 아닙니다" -#: parser/parse_utilcmd.c:2078 parser/parse_utilcmd.c:2085 -#: parser/parse_utilcmd.c:2092 parser/parse_utilcmd.c:2163 +#: parser/parse_utilcmd.c:2205 parser/parse_utilcmd.c:2212 +#: parser/parse_utilcmd.c:2219 parser/parse_utilcmd.c:2296 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "" -#: parser/parse_utilcmd.c:2084 +#: parser/parse_utilcmd.c:2211 #, c-format msgid "index \"%s\" contains expressions" msgstr "\"%s\" 인덱스에 표현식이 포함되어 있음" -#: parser/parse_utilcmd.c:2091 +#: parser/parse_utilcmd.c:2218 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\" 개체는 부분 인덱스임" -#: parser/parse_utilcmd.c:2103 +#: parser/parse_utilcmd.c:2230 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\" 개체는 지연가능한 인덱스임" -#: parser/parse_utilcmd.c:2104 +#: parser/parse_utilcmd.c:2231 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "" -#: parser/parse_utilcmd.c:2162 +#: parser/parse_utilcmd.c:2295 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "\"%s\" 인덱스 %d 번째 칼럼의 기본 정렬 방법이 없음" -#: parser/parse_utilcmd.c:2319 +#: parser/parse_utilcmd.c:2452 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "기본키 제약 조건에서 \"%s\" 칼럼이 두 번 지정되었습니다" -#: parser/parse_utilcmd.c:2325 +#: parser/parse_utilcmd.c:2458 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "고유 제약 조건에서 \"%s\" 칼럼이 두 번 지정되었습니다" -#: parser/parse_utilcmd.c:2676 +#: parser/parse_utilcmd.c:2811 #, c-format msgid "" "index expressions and predicates can refer only to the table being indexed" msgstr "인덱스 식 및 술어는 인덱싱되는 테이블만 참조할 수 있음" -#: parser/parse_utilcmd.c:2722 +#: parser/parse_utilcmd.c:2857 #, c-format msgid "rules on materialized views are not supported" msgstr "구체화된 뷰에서의 룰은 지원하지 않음" -#: parser/parse_utilcmd.c:2785 +#: parser/parse_utilcmd.c:2920 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "룰에서 지정한 WHERE 조건에 다른 릴레이션에 대한 참조를 포함할 수 없음" -#: parser/parse_utilcmd.c:2859 +#: parser/parse_utilcmd.c:2994 #, c-format msgid "" "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE " @@ -17095,149 +17508,160 @@ msgstr "" "룰에서 지정한 WHERE 조건이 있는 규칙에는 SELECT, INSERT, UPDATE 또는 DELETE " "작업만 포함할 수 있음" -#: parser/parse_utilcmd.c:2877 parser/parse_utilcmd.c:2976 -#: rewrite/rewriteHandler.c:502 rewrite/rewriteManip.c:1015 +#: parser/parse_utilcmd.c:3012 parser/parse_utilcmd.c:3113 +#: rewrite/rewriteHandler.c:502 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "conditional UNION/INTERSECT/EXCEPT 구문은 구현되어 있지 않다" -#: parser/parse_utilcmd.c:2895 +#: parser/parse_utilcmd.c:3030 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "ON SELECT 룰은 OLD를 사용할 수 없음" -#: parser/parse_utilcmd.c:2899 +#: parser/parse_utilcmd.c:3034 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "ON SELECT 룰은 NEW를 사용할 수 없음" -#: parser/parse_utilcmd.c:2908 +#: parser/parse_utilcmd.c:3043 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "ON INSERT 룰은 OLD를 사용할 수 없음" -#: parser/parse_utilcmd.c:2914 +#: parser/parse_utilcmd.c:3049 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "ON DELETE 룰은 NEW를 사용할 수 없음" -#: parser/parse_utilcmd.c:2942 +#: parser/parse_utilcmd.c:3077 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "" -#: parser/parse_utilcmd.c:2949 +#: parser/parse_utilcmd.c:3084 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "" -#: parser/parse_utilcmd.c:3407 +#: parser/parse_utilcmd.c:3542 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "DEFERABLE 절이 잘못 놓여져 있습니다" -#: parser/parse_utilcmd.c:3412 parser/parse_utilcmd.c:3427 +#: parser/parse_utilcmd.c:3547 parser/parse_utilcmd.c:3562 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "여러 개의 DEFERRABLE/NOT DEFERRABLE절은 사용할 수 없습니다" -#: parser/parse_utilcmd.c:3422 +#: parser/parse_utilcmd.c:3557 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "NOT DEFERABLE 절이 잘못 놓여 있습니다" -#: parser/parse_utilcmd.c:3435 parser/parse_utilcmd.c:3461 gram.y:5529 +#: parser/parse_utilcmd.c:3570 parser/parse_utilcmd.c:3596 gram.y:5593 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "INITIALLY DEFERRED 로 선언된 조건문은 반드시 DEFERABLE 여야만 한다" -#: parser/parse_utilcmd.c:3443 +#: parser/parse_utilcmd.c:3578 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "INITIALLY DEFERRED 절이 잘못 놓여 있습니다" -#: parser/parse_utilcmd.c:3448 parser/parse_utilcmd.c:3474 +#: parser/parse_utilcmd.c:3583 parser/parse_utilcmd.c:3609 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "여러 개의 INITIALLY IMMEDIATE/DEFERRED 절은 허용되지 않습니다" -#: parser/parse_utilcmd.c:3469 +#: parser/parse_utilcmd.c:3604 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "INITIALLY IMMEDIATE 절이 잘못 놓여 있습니다" -#: parser/parse_utilcmd.c:3660 +#: parser/parse_utilcmd.c:3795 #, c-format msgid "" "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE 구문에 명시된 schema (%s) 가 생성된 (%s) 의 것과 다릅니다" -#: parser/parse_utilcmd.c:3694 +#: parser/parse_utilcmd.c:3830 +#, c-format +msgid "\"%s\" is not a partitioned table" +msgstr "\"%s\" 개체는 파티션된 테이블이 아님" + +#: parser/parse_utilcmd.c:3837 #, c-format msgid "table \"%s\" is not partitioned" -msgstr "\"%s\" 테이블은 파티션 된 테이블이 아님" +msgstr "\"%s\" 테이블은 파티션되어 있지 않음" -#: parser/parse_utilcmd.c:3701 +#: parser/parse_utilcmd.c:3844 #, c-format msgid "index \"%s\" is not partitioned" msgstr "\"%s\" 인덱스는 파티션 된 인덱스가 아님" -#: parser/parse_utilcmd.c:3735 +#: parser/parse_utilcmd.c:3884 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "해시 파티션된 테이블은 기본 파티션을 가질 수 없음" -#: parser/parse_utilcmd.c:3752 +#: parser/parse_utilcmd.c:3901 #, c-format msgid "invalid bound specification for a hash partition" msgstr "해시 파티션용 범위 명세가 잘못됨" -#: parser/parse_utilcmd.c:3758 partitioning/partbounds.c:2816 +#: parser/parse_utilcmd.c:3907 partitioning/partbounds.c:4691 #, c-format msgid "modulus for hash partition must be a positive integer" msgstr "" -#: parser/parse_utilcmd.c:3765 partitioning/partbounds.c:2824 +#: parser/parse_utilcmd.c:3914 partitioning/partbounds.c:4699 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "해시 파티션용 나머지 처리기는 modulus 보다 작아야 함" -#: parser/parse_utilcmd.c:3778 +#: parser/parse_utilcmd.c:3927 #, c-format msgid "invalid bound specification for a list partition" msgstr "list 파티션을 위한 범위 설정이 잘못됨" -#: parser/parse_utilcmd.c:3831 +#: parser/parse_utilcmd.c:3980 #, c-format msgid "invalid bound specification for a range partition" msgstr "range 파티션을 위한 범위 설정이 잘못됨" -#: parser/parse_utilcmd.c:3837 +#: parser/parse_utilcmd.c:3986 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM에는 파티션 칼럼 당 딱 하나의 값만 지정해야 함" -#: parser/parse_utilcmd.c:3841 +#: parser/parse_utilcmd.c:3990 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO에는 파티션 칼럼 당 딱 하나의 값만 지정해야 함" -#: parser/parse_utilcmd.c:3955 +#: parser/parse_utilcmd.c:4104 #, c-format msgid "cannot specify NULL in range bound" msgstr "range 범위에는 NULL 값을 사용할 수 없음" -#: parser/parse_utilcmd.c:4004 +#: parser/parse_utilcmd.c:4153 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "" -#: parser/parse_utilcmd.c:4011 +#: parser/parse_utilcmd.c:4160 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "" -#: parser/parse_utilcmd.c:4046 +#: parser/parse_utilcmd.c:4202 +#, c-format +msgid "" +"could not determine which collation to use for partition bound expression" +msgstr "파티션 범위 표현식에 쓸 문자 정렬 규칙을 결정할 수 없습니다" + +#: parser/parse_utilcmd.c:4219 #, c-format msgid "" "collation of partition bound value for column \"%s\" does not match " @@ -17245,43 +17669,71 @@ msgid "" msgstr "" "\"%s\" 칼럼의 파티션 범위값 정렬 규칙과 파티션 키 정렬 규칙(\"%s\")이 다름" -#: parser/parse_utilcmd.c:4063 +#: parser/parse_utilcmd.c:4236 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "지정된 값은 %s 형으로 형변환 할 수 없음, 해당 칼럼: \"%s\"" -#: parser/scansup.c:204 +#: parser/parser.c:228 +msgid "UESCAPE must be followed by a simple string literal" +msgstr "" + +#: parser/parser.c:233 +msgid "invalid Unicode escape character" +msgstr "잘못된 유니코드 이스케이프 문자" + +#: parser/parser.c:302 scan.l:1329 +#, c-format +msgid "invalid Unicode escape value" +msgstr "잘못된 유니코드 이스케이프 값" + +#: parser/parser.c:449 scan.l:677 +#, c-format +msgid "invalid Unicode escape" +msgstr "잘못된 유니코드 이스케이프 값" + +#: parser/parser.c:450 +#, c-format +msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." +msgstr "유니코드 이스케이프는 \\XXXX 또는 \\+XXXXXX 형태여야 합니다." + +#: parser/parser.c:478 scan.l:638 scan.l:654 scan.l:670 +#, c-format +msgid "invalid Unicode surrogate pair" +msgstr "잘못된 유니코드 대리 쌍" + +#: parser/scansup.c:203 #, c-format msgid "identifier \"%s\" will be truncated to \"%s\"" msgstr "\"%s\" 식별자는 \"%s\"(으)로 잘림" -#: partitioning/partbounds.c:958 +#: partitioning/partbounds.c:2831 #, c-format msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "\"%s\" 파티션이 \"%s\" 기본 파티션과 겹칩니다." -#: partitioning/partbounds.c:1017 +#: partitioning/partbounds.c:2890 #, c-format msgid "" "every hash partition modulus must be a factor of the next larger modulus" msgstr "" -#: partitioning/partbounds.c:1113 +#: partitioning/partbounds.c:2986 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "" -#: partitioning/partbounds.c:1115 +#: partitioning/partbounds.c:2988 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "하한값(%s)은 상한값(%s)과 같거나 커야 합니다" -#: partitioning/partbounds.c:1212 +#: partitioning/partbounds.c:3085 #, c-format msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "\"%s\" 파티션이 \"%s\" 파티션과 겹칩니다." -#: partitioning/partbounds.c:1329 +#: partitioning/partbounds.c:3202 #, c-format msgid "" "skipped scanning foreign table \"%s\" which is a partition of default " @@ -17290,38 +17742,36 @@ msgstr "" "\"%s\" 외부 테이블 탐색은 생략함, 이 테이블은 \"%s\" 기본 파티션 테이블의 파" "티션이기 때문" -#: partitioning/partbounds.c:1362 -#, c-format -msgid "" -"updated partition constraint for default partition \"%s\" would be violated " -"by some row" -msgstr "" -"몇몇 자료가 \"%s\" 기본 파티션용에서 변경된 파티션 제약조건을 위배한 것 같음" - -#: partitioning/partbounds.c:2820 +#: partitioning/partbounds.c:4695 #, c-format msgid "remainder for hash partition must be a non-negative integer" msgstr "" -#: partitioning/partbounds.c:2847 +#: partitioning/partbounds.c:4722 #, c-format msgid "\"%s\" is not a hash partitioned table" msgstr "\"%s\" 개체는 해시 파티션된 테이블이 아님" -#: partitioning/partbounds.c:2858 partitioning/partbounds.c:2975 +#: partitioning/partbounds.c:4733 partitioning/partbounds.c:4850 #, c-format msgid "" "number of partitioning columns (%d) does not match number of partition keys " "provided (%d)" msgstr "파티션 칼럼 수: %d, 제공된 파티션 키 수: %d 서로 다름" -#: partitioning/partbounds.c:2880 partitioning/partbounds.c:2912 +#: partitioning/partbounds.c:4755 partitioning/partbounds.c:4787 #, c-format msgid "" "column %d of the partition key has type \"%s\", but supplied value is of " "type \"%s\"" msgstr "" +#: port/pg_sema.c:209 port/pg_shmem.c:640 port/posix_sema.c:209 +#: port/sysv_sema.c:327 port/sysv_shmem.c:640 +#, c-format +msgid "could not stat data directory \"%s\": %m" +msgstr "\"%s\" 데이터 디렉터리 상태를 파악할 수 없음: %m" + #: port/pg_shmem.c:216 port/sysv_shmem.c:216 #, c-format msgid "could not create shared memory segment: %m" @@ -17374,12 +17824,12 @@ msgstr "" "확보하세요.\n" "공유 메모리 설정에 대한 보다 자세한 내용은 PostgreSQL 문서를 참조하십시오." -#: port/pg_shmem.c:577 port/sysv_shmem.c:577 +#: port/pg_shmem.c:578 port/sysv_shmem.c:578 #, c-format msgid "could not map anonymous shared memory: %m" msgstr "가용 공유 메모리 확보 실패: %m" -#: port/pg_shmem.c:579 port/sysv_shmem.c:579 +#: port/pg_shmem.c:580 port/sysv_shmem.c:580 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory " @@ -17392,38 +17842,33 @@ msgstr "" "여 보십시오. 줄이는 방법은, shared_buffers 값을 줄이거나 max_connections 값" "을 줄여 보십시오." -#: port/pg_shmem.c:639 port/sysv_shmem.c:639 +#: port/pg_shmem.c:648 port/sysv_shmem.c:648 #, c-format msgid "huge pages not supported on this platform" msgstr "huge page 기능은 이 플랫폼에서 지원되지 않음" -#: port/pg_shmem.c:700 port/sysv_shmem.c:700 utils/init/miscinit.c:1069 +#: port/pg_shmem.c:709 port/sysv_shmem.c:709 utils/init/miscinit.c:1137 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "미리 확보된 공유 메모리 영역 (%lu 키, %lu ID)이 여전히 사용중입니다" -#: port/pg_shmem.c:703 port/sysv_shmem.c:703 utils/init/miscinit.c:1071 +#: port/pg_shmem.c:712 port/sysv_shmem.c:712 utils/init/miscinit.c:1139 #, c-format msgid "" "Terminate any old server processes associated with data directory \"%s\"." msgstr "" -#: port/pg_shmem.c:754 port/sysv_shmem.c:754 -#, c-format -msgid "could not stat data directory \"%s\": %m" -msgstr "\"%s\" 데이터 디렉터리 상태를 파악할 수 없음: %m" - -#: port/sysv_sema.c:123 +#: port/sysv_sema.c:124 #, c-format msgid "could not create semaphores: %m" msgstr "세마포어를 만들 수 없음: %m" -#: port/sysv_sema.c:124 +#: port/sysv_sema.c:125 #, c-format msgid "Failed system call was semget(%lu, %d, 0%o)." msgstr "semget(%lu, %d, 0%o) 호출에 의한 시스템 콜 실패" -#: port/sysv_sema.c:128 +#: port/sysv_sema.c:129 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs " @@ -17444,7 +17889,7 @@ msgstr "" "마포어 사용 수를 줄여보십시오.\n" "보다 자세한 내용은 PostgreSQL 관리자 메뉴얼을 참조 하십시오." -#: port/sysv_sema.c:158 +#: port/sysv_sema.c:159 #, c-format msgid "" "You possibly need to raise your kernel's SEMVMX value to be at least %d. " @@ -17484,32 +17929,27 @@ msgstr "\"%s\" 장애 덤프 파일을 쓰기 실패: 오류 번호 %lu\n" msgid "could not create signal listener pipe for PID %d: error code %lu" msgstr "%d pid를 위한 시그널 리슨너 파이프를 만들 수 없음: 오류 번호 %lu" -#: port/win32/signal.c:309 port/win32/signal.c:346 +#: port/win32/signal.c:251 #, c-format msgid "could not create signal listener pipe: error code %lu; retrying\n" msgstr "신호 수신기 파이프를 만들 수 없음: 오류 번호 %lu, 다시 시작 중\n" -#: port/win32/signal.c:357 -#, c-format -msgid "could not create signal dispatch thread: error code %lu\n" -msgstr "시그널 디스패치 쓰레드를 만들 수 없음: 오류 번호 %lu\n" - #: port/win32_sema.c:104 #, c-format msgid "could not create semaphore: error code %lu" msgstr "세마포어를 만들 수 없음: 오류 번호 %lu" -#: port/win32_sema.c:181 +#: port/win32_sema.c:180 #, c-format msgid "could not lock semaphore: error code %lu" msgstr "세마포어를 잠글 수 없음: 오류 번호 %lu" -#: port/win32_sema.c:201 +#: port/win32_sema.c:200 #, c-format msgid "could not unlock semaphore: error code %lu" msgstr "세마포어 잠금을 해제할 수 없음: 오류 번호 %lu" -#: port/win32_sema.c:231 +#: port/win32_sema.c:230 #, c-format msgid "could not try-lock semaphore: error code %lu" msgstr "세마포어 잠금 시도 실패: 오류 번호 %lu" @@ -17580,103 +18020,103 @@ msgstr "실패한 시스템 호출은 DuplicateHandle입니다." msgid "Failed system call was MapViewOfFileEx." msgstr "실패한 시스템 호출은 MapViewOfFileEx입니다." -#: postmaster/autovacuum.c:405 +#: postmaster/autovacuum.c:406 #, c-format msgid "could not fork autovacuum launcher process: %m" msgstr "autovacuum 실행기 프로세스를 실행할 수 없음: %m" -#: postmaster/autovacuum.c:441 +#: postmaster/autovacuum.c:442 #, c-format msgid "autovacuum launcher started" msgstr "autovacuum 실행기가 시작됨" -#: postmaster/autovacuum.c:819 +#: postmaster/autovacuum.c:839 #, c-format msgid "autovacuum launcher shutting down" msgstr "autovacuum 실행기를 종료하는 중" -#: postmaster/autovacuum.c:1481 +#: postmaster/autovacuum.c:1477 #, c-format msgid "could not fork autovacuum worker process: %m" msgstr "autovacuum 작업자 프로세스를 실행할 수 없음: %m" -#: postmaster/autovacuum.c:1690 +#: postmaster/autovacuum.c:1686 #, c-format msgid "autovacuum: processing database \"%s\"" msgstr "autovacuum: \"%s\" 데이터베이스 처리 중" -#: postmaster/autovacuum.c:2259 +#: postmaster/autovacuum.c:2256 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "" "autovacuum: 더 이상 사용하지 않는 \"%s.%s.%s\" 임시 테이블을 삭제하는 중" -#: postmaster/autovacuum.c:2488 +#: postmaster/autovacuum.c:2485 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "\"%s.%s.%s\" 테이블 대상으로 자동 vacuum 작업 함" -#: postmaster/autovacuum.c:2491 +#: postmaster/autovacuum.c:2488 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "\"%s.%s.%s\" 테이블 자동 분석" -#: postmaster/autovacuum.c:2684 +#: postmaster/autovacuum.c:2681 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "\"%s.%s.%s\" 릴레이션 작업 항목 작업 중" -#: postmaster/autovacuum.c:3265 +#: postmaster/autovacuum.c:3285 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "서버 설정 정보가 잘못되어 자동 청소 작업이 실행되지 못했습니다." -#: postmaster/autovacuum.c:3266 +#: postmaster/autovacuum.c:3286 #, c-format msgid "Enable the \"track_counts\" option." msgstr "\"track_counts\" 옵션을 사용하십시오." -#: postmaster/bgworker.c:395 postmaster/bgworker.c:855 +#: postmaster/bgworker.c:394 postmaster/bgworker.c:841 #, c-format msgid "registering background worker \"%s\"" msgstr "" -#: postmaster/bgworker.c:427 +#: postmaster/bgworker.c:426 #, c-format msgid "unregistering background worker \"%s\"" msgstr "" -#: postmaster/bgworker.c:592 +#: postmaster/bgworker.c:591 #, c-format msgid "" "background worker \"%s\": must attach to shared memory in order to request a " "database connection" msgstr "" -#: postmaster/bgworker.c:601 +#: postmaster/bgworker.c:600 #, c-format msgid "" "background worker \"%s\": cannot request database access if starting at " "postmaster start" msgstr "" -#: postmaster/bgworker.c:615 +#: postmaster/bgworker.c:614 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "\"%s\" 백그라운드 작업자: 잘못된 재실행 간격" -#: postmaster/bgworker.c:630 +#: postmaster/bgworker.c:629 #, c-format msgid "" "background worker \"%s\": parallel workers may not be configured for restart" msgstr "\"%s\" 백그라운드 작업자: 이 병렬 작업자는 재실행 설정이 없음" -#: postmaster/bgworker.c:674 +#: postmaster/bgworker.c:653 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "관리자 명령에 의해 \"%s\" 백그라운드 작업자를 종료합니다." -#: postmaster/bgworker.c:863 +#: postmaster/bgworker.c:849 #, c-format msgid "" "background worker \"%s\": must be registered in shared_preload_libraries" @@ -17684,7 +18124,7 @@ msgstr "" "\"%s\" 백그라운드 작업자: 먼저 shared_preload_libraries 설정값으로 등록되어" "야 합니다." -#: postmaster/bgworker.c:875 +#: postmaster/bgworker.c:861 #, c-format msgid "" "background worker \"%s\": only dynamic background workers can request " @@ -17692,66 +18132,66 @@ msgid "" msgstr "" "\"%s\" 백그라운드 작업자: 동적 백그라운드 작업자만 알림을 요청할 수 있음" -#: postmaster/bgworker.c:890 +#: postmaster/bgworker.c:876 #, c-format msgid "too many background workers" msgstr "백그라운드 작업자가 너무 많음" -#: postmaster/bgworker.c:891 +#: postmaster/bgworker.c:877 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "" "Up to %d background workers can be registered with the current settings." msgstr[0] "현재 설정으로는 %d개의 백그라운드 작업자를 사용할 수 있습니다." -#: postmaster/bgworker.c:895 +#: postmaster/bgworker.c:881 #, c-format msgid "" "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "\"max_worker_processes\" 환경 매개 변수 값을 좀 느려보십시오." -#: postmaster/checkpointer.c:458 +#: postmaster/checkpointer.c:418 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" msgstr[0] "체크포인트가 너무 자주 발생함 (%d초 간격)" -#: postmaster/checkpointer.c:462 +#: postmaster/checkpointer.c:422 #, c-format msgid "Consider increasing the configuration parameter \"max_wal_size\"." msgstr "\"max_wal_size\" 환경 매개 변수 값을 좀 느려보십시오." -#: postmaster/checkpointer.c:1081 +#: postmaster/checkpointer.c:1032 #, c-format msgid "checkpoint request failed" msgstr "체크포인트 요청 실패" -#: postmaster/checkpointer.c:1082 +#: postmaster/checkpointer.c:1033 #, c-format msgid "Consult recent messages in the server log for details." msgstr "더 자세한 것은 서버 로그 파일을 살펴보십시오." -#: postmaster/checkpointer.c:1266 +#: postmaster/checkpointer.c:1217 #, c-format msgid "compacted fsync request queue from %d entries to %d entries" msgstr "" -#: postmaster/pgarch.c:159 +#: postmaster/pgarch.c:155 #, c-format msgid "could not fork archiver: %m" msgstr "archiver 할당(fork) 실패: %m" -#: postmaster/pgarch.c:470 +#: postmaster/pgarch.c:425 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "archive_mode가 사용 설정되었는데 archive_command가 설정되지 않음" -#: postmaster/pgarch.c:492 +#: postmaster/pgarch.c:447 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "필요 없는 \"%s\" 아카이브 상태 파일이 삭제됨" -#: postmaster/pgarch.c:502 +#: postmaster/pgarch.c:457 #, c-format msgid "" "removal of orphan archive status file \"%s\" failed too many times, will try " @@ -17760,7 +18200,7 @@ msgstr "" "필요 없는 \"%s\" 아카이브 상태 파일 삭제 작업이 계속 실패하고 있습니다. 다음" "에 또 시도할 것입니다." -#: postmaster/pgarch.c:538 +#: postmaster/pgarch.c:493 #, c-format msgid "" "archiving write-ahead log file \"%s\" failed too many times, will try again " @@ -17769,161 +18209,162 @@ msgstr "" "\"%s\" 트랜잭션 로그 파일 아카이브 작업이 계속 실패하고 있습니다. 다음에 또 " "시도할 것입니다." -#: postmaster/pgarch.c:639 +#: postmaster/pgarch.c:594 #, c-format msgid "archive command failed with exit code %d" msgstr "아카이브 명령 실패, 종료 코드: %d" -#: postmaster/pgarch.c:641 postmaster/pgarch.c:651 postmaster/pgarch.c:657 -#: postmaster/pgarch.c:666 +#: postmaster/pgarch.c:596 postmaster/pgarch.c:606 postmaster/pgarch.c:612 +#: postmaster/pgarch.c:621 #, c-format msgid "The failed archive command was: %s" msgstr "실패한 아카이브 명령: %s" -#: postmaster/pgarch.c:648 +#: postmaster/pgarch.c:603 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "0x%X 예외로 인해 아카이브 명령이 종료됨" -#: postmaster/pgarch.c:650 postmaster/postmaster.c:3675 +#: postmaster/pgarch.c:605 postmaster/postmaster.c:3742 #, c-format msgid "" "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "16진수 값에 대한 설명은 C 포함 파일 \"ntstatus.h\"를 참조하십시오." -#: postmaster/pgarch.c:655 +#: postmaster/pgarch.c:610 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "%d번 시그널로 인해 아카이브 명령이 종료됨: %s" -#: postmaster/pgarch.c:664 +#: postmaster/pgarch.c:619 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "아카이브 명령이 인식할 수 없는 %d 상태로 종료됨" -#: postmaster/pgstat.c:396 +#: postmaster/pgstat.c:419 #, c-format msgid "could not resolve \"localhost\": %s" msgstr "\"localhost\" 이름의 호스트 IP를 구할 수 없습니다: %s" -#: postmaster/pgstat.c:419 +#: postmaster/pgstat.c:442 #, c-format msgid "trying another address for the statistics collector" msgstr "통계 수집기에서 사용할 다른 주소를 찾습니다" -#: postmaster/pgstat.c:428 +#: postmaster/pgstat.c:451 #, c-format msgid "could not create socket for statistics collector: %m" msgstr "통계 수집기에서 사용할 소켓을 만들 수 없습니다: %m" -#: postmaster/pgstat.c:440 +#: postmaster/pgstat.c:463 #, c-format msgid "could not bind socket for statistics collector: %m" msgstr "통계 수집기에서 사용할 소켓과 bind할 수 없습니다: %m" -#: postmaster/pgstat.c:451 +#: postmaster/pgstat.c:474 #, c-format msgid "could not get address of socket for statistics collector: %m" msgstr "통계 수집기에서 사용할 소켓의 주소를 구할 수 없습니다: %m" -#: postmaster/pgstat.c:467 +#: postmaster/pgstat.c:490 #, c-format msgid "could not connect socket for statistics collector: %m" msgstr "통계 수집기에서 사용할 소켓에 연결할 수 없습니다: %m" -#: postmaster/pgstat.c:488 +#: postmaster/pgstat.c:511 #, c-format msgid "could not send test message on socket for statistics collector: %m" msgstr "통계 수집기에서 사용할 소켓으로 테스트 메시지를 보낼 수 없습니다: %m" -#: postmaster/pgstat.c:514 +#: postmaster/pgstat.c:537 #, c-format msgid "select() failed in statistics collector: %m" msgstr "통계 수집기에서 select() 작업 오류: %m" -#: postmaster/pgstat.c:529 +#: postmaster/pgstat.c:552 #, c-format msgid "test message did not get through on socket for statistics collector" msgstr "통계 수집기에서 사용할 소켓으로 테스트 메시지를 처리할 수 없습니다" -#: postmaster/pgstat.c:544 +#: postmaster/pgstat.c:567 #, c-format msgid "could not receive test message on socket for statistics collector: %m" msgstr "통계 수집기에서 사용할 소켓으로 테스트 메시지를 받을 수 없습니다: %m" -#: postmaster/pgstat.c:554 +#: postmaster/pgstat.c:577 #, c-format msgid "incorrect test message transmission on socket for statistics collector" msgstr "통계 수집기에서 사용할 소켓으로 잘못된 테스트 메시지가 전달 되었습니다" -#: postmaster/pgstat.c:577 +#: postmaster/pgstat.c:600 #, c-format msgid "could not set statistics collector socket to nonblocking mode: %m" msgstr "" "통계 수집기에서 사용하는 소켓 모드를 nonblocking 모드로 지정할 수 없습니다: " "%m" -#: postmaster/pgstat.c:616 +#: postmaster/pgstat.c:642 #, c-format msgid "disabling statistics collector for lack of working socket" msgstr "현재 작업 소켓의 원할한 소통을 위해 통계 수집기 기능을 중지합니다" -#: postmaster/pgstat.c:763 +#: postmaster/pgstat.c:789 #, c-format msgid "could not fork statistics collector: %m" msgstr "통계 수집기를 fork할 수 없습니다: %m" -#: postmaster/pgstat.c:1347 +#: postmaster/pgstat.c:1376 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "알 수 없는 리셋 타겟: \"%s\"" -#: postmaster/pgstat.c:1348 +#: postmaster/pgstat.c:1377 #, c-format msgid "Target must be \"archiver\" or \"bgwriter\"." msgstr "사용 가능한 타겟은 \"archiver\" 또는 \"bgwriter\"" -#: postmaster/pgstat.c:4534 +#: postmaster/pgstat.c:4561 #, c-format msgid "could not read statistics message: %m" msgstr "통계 메시지를 읽을 수 없음: %m" -#: postmaster/pgstat.c:4875 postmaster/pgstat.c:5032 +#: postmaster/pgstat.c:4883 postmaster/pgstat.c:5046 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "\"%s\" 임시 통계 파일을 열 수 없음: %m" -#: postmaster/pgstat.c:4942 postmaster/pgstat.c:5077 +#: postmaster/pgstat.c:4956 postmaster/pgstat.c:5091 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "\"%s\" 임시 통계 파일에 쓰기 실패: %m" -#: postmaster/pgstat.c:4951 postmaster/pgstat.c:5086 +#: postmaster/pgstat.c:4965 postmaster/pgstat.c:5100 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "\"%s\" 임시 통계 파일을 닫을 수 없습니다: %m" -#: postmaster/pgstat.c:4959 postmaster/pgstat.c:5094 +#: postmaster/pgstat.c:4973 postmaster/pgstat.c:5108 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "\"%s\" 임시 통계 파일 이름을 \"%s\" (으)로 바꿀 수 없습니다: %m" -#: postmaster/pgstat.c:5183 postmaster/pgstat.c:5389 postmaster/pgstat.c:5542 +#: postmaster/pgstat.c:5205 postmaster/pgstat.c:5422 postmaster/pgstat.c:5576 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "\"%s\" 통계 파일을 열 수 없음: %m" -#: postmaster/pgstat.c:5195 postmaster/pgstat.c:5205 postmaster/pgstat.c:5226 -#: postmaster/pgstat.c:5248 postmaster/pgstat.c:5263 postmaster/pgstat.c:5326 -#: postmaster/pgstat.c:5401 postmaster/pgstat.c:5421 postmaster/pgstat.c:5439 -#: postmaster/pgstat.c:5455 postmaster/pgstat.c:5473 postmaster/pgstat.c:5489 -#: postmaster/pgstat.c:5554 postmaster/pgstat.c:5566 postmaster/pgstat.c:5578 -#: postmaster/pgstat.c:5603 postmaster/pgstat.c:5625 +#: postmaster/pgstat.c:5217 postmaster/pgstat.c:5227 postmaster/pgstat.c:5248 +#: postmaster/pgstat.c:5259 postmaster/pgstat.c:5281 postmaster/pgstat.c:5296 +#: postmaster/pgstat.c:5359 postmaster/pgstat.c:5434 postmaster/pgstat.c:5454 +#: postmaster/pgstat.c:5472 postmaster/pgstat.c:5488 postmaster/pgstat.c:5506 +#: postmaster/pgstat.c:5522 postmaster/pgstat.c:5588 postmaster/pgstat.c:5600 +#: postmaster/pgstat.c:5612 postmaster/pgstat.c:5623 postmaster/pgstat.c:5648 +#: postmaster/pgstat.c:5670 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "\"%s\" 통계 파일이 손상되었음" -#: postmaster/pgstat.c:5754 +#: postmaster/pgstat.c:5799 #, c-format msgid "" "using stale statistics instead of current ones because stats collector is " @@ -17931,27 +18372,27 @@ msgid "" msgstr "" "현재 통계 수집기가 반응하지 않아 부정확한 통계정보가 사용되고 있습니다." -#: postmaster/pgstat.c:6081 +#: postmaster/pgstat.c:6129 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "정리하는 동안 데이터베이스 해시 테이블이 손상 되었습니다 --- 중지함" -#: postmaster/postmaster.c:712 +#: postmaster/postmaster.c:733 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: -f 옵션의 잘못된 인자: \"%s\"\n" -#: postmaster/postmaster.c:798 +#: postmaster/postmaster.c:819 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: -t 옵션의 잘못된 인자: \"%s\"\n" -#: postmaster/postmaster.c:849 +#: postmaster/postmaster.c:870 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: 잘못된 인자: \"%s\"\n" -#: postmaster/postmaster.c:891 +#: postmaster/postmaster.c:912 #, c-format msgid "" "%s: superuser_reserved_connections (%d) must be less than max_connections " @@ -17960,12 +18401,12 @@ msgstr "" "%s: superuser_reserved_connections (%d) 값은 max_connections(%d) 값보다 작아" "야함\n" -#: postmaster/postmaster.c:898 +#: postmaster/postmaster.c:919 #, c-format msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" msgstr "wal_level 값이 \"minimal\"일 때는 아카이브 작업을 할 수 없습니다." -#: postmaster/postmaster.c:901 +#: postmaster/postmaster.c:922 #, c-format msgid "" "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or " @@ -17974,93 +18415,93 @@ msgstr "" "WAL 스트리밍 작업(max_wal_senders > 0 인경우)은 wal_level 값이 \"replica\" 또" "는 \"logical\" 이어야 합니다." -#: postmaster/postmaster.c:909 +#: postmaster/postmaster.c:930 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: 잘못된 datetoken 테이블들, 복구하십시오.\n" -#: postmaster/postmaster.c:998 +#: postmaster/postmaster.c:1047 +#, c-format +msgid "could not create I/O completion port for child queue" +msgstr "하위 대기열에 대해 I/O 완료 포트를 만들 수 없음" + +#: postmaster/postmaster.c:1113 +#, c-format +msgid "ending log output to stderr" +msgstr "stderr 쪽 로그 출력을 중지합니다." + +#: postmaster/postmaster.c:1114 +#, c-format +msgid "Future log output will go to log destination \"%s\"." +msgstr "자세한 로그는 \"%s\" 쪽으로 기록됩니다." + +#: postmaster/postmaster.c:1125 #, c-format msgid "starting %s" msgstr "" -#: postmaster/postmaster.c:1027 postmaster/postmaster.c:1125 -#: utils/init/miscinit.c:1551 +#: postmaster/postmaster.c:1154 postmaster/postmaster.c:1252 +#: utils/init/miscinit.c:1597 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "\"%s\" 매개 변수 구문이 잘못 되었습니다" -#: postmaster/postmaster.c:1058 +#: postmaster/postmaster.c:1185 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "\"%s\" 응당 소켓을 만들 수 없습니다" -#: postmaster/postmaster.c:1064 +#: postmaster/postmaster.c:1191 #, c-format msgid "could not create any TCP/IP sockets" msgstr "TCP/IP 소켓을 만들 수 없습니다." -#: postmaster/postmaster.c:1147 +#: postmaster/postmaster.c:1274 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "\"%s\" 디렉터리에 유닉스 도메인 소켓을 만들 수 없습니다" -#: postmaster/postmaster.c:1153 +#: postmaster/postmaster.c:1280 #, c-format msgid "could not create any Unix-domain sockets" msgstr "유닉스 도메인 소켓을 만들 수 없습니다" -#: postmaster/postmaster.c:1165 +#: postmaster/postmaster.c:1292 #, c-format msgid "no socket created for listening" msgstr "서버 접속 대기 작업을 위한 소켓을 만들 수 없음" -#: postmaster/postmaster.c:1205 -#, c-format -msgid "could not create I/O completion port for child queue" -msgstr "하위 대기열에 대해 I/O 완료 포트를 만들 수 없음" - -#: postmaster/postmaster.c:1234 +#: postmaster/postmaster.c:1323 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: \"%s\" 외부 PID 파일의 접근 권한을 바꿀 수 없음: %s\n" -#: postmaster/postmaster.c:1238 +#: postmaster/postmaster.c:1327 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: 외부 pid 파일 \"%s\" 를 쓸 수 없음: %s\n" -#: postmaster/postmaster.c:1298 -#, c-format -msgid "ending log output to stderr" -msgstr "stderr 쪽 로그 출력을 중지합니다." - -#: postmaster/postmaster.c:1299 -#, c-format -msgid "Future log output will go to log destination \"%s\"." -msgstr "자세한 로그는 \"%s\" 쪽으로 기록됩니다." - -#: postmaster/postmaster.c:1325 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1360 utils/init/postinit.c:215 #, c-format msgid "could not load pg_hba.conf" msgstr "pg_hba.conf를 로드할 수 없음" -#: postmaster/postmaster.c:1351 +#: postmaster/postmaster.c:1386 #, c-format msgid "postmaster became multithreaded during startup" msgstr "" -#: postmaster/postmaster.c:1352 +#: postmaster/postmaster.c:1387 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "LC_ALL 환경 설정값으로 알맞은 로케일 이름을 지정하세요." -#: postmaster/postmaster.c:1453 +#: postmaster/postmaster.c:1488 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: 실행가능한 postgres 프로그램을 찾을 수 없습니다" -#: postmaster/postmaster.c:1476 utils/misc/tzparser.c:341 +#: postmaster/postmaster.c:1511 utils/misc/tzparser.c:340 #, c-format msgid "" "This may indicate an incomplete PostgreSQL installation, or that the file " @@ -18069,7 +18510,7 @@ msgstr "" "이 문제는 PostgreSQL 설치가 불완전하게 되었거나, \"%s\" 파일이 올바른 위치에 " "있지 않아서 발생했습니다." -#: postmaster/postmaster.c:1503 +#: postmaster/postmaster.c:1538 #, c-format msgid "" "%s: could not find the database system\n" @@ -18080,454 +18521,454 @@ msgstr "" "\"%s\" 디렉터리 안에 해당 자료가 있기를 기대했는데,\n" "\"%s\" 파일을 열 수가 없었습니다: %s\n" -#: postmaster/postmaster.c:1680 +#: postmaster/postmaster.c:1715 #, c-format msgid "select() failed in postmaster: %m" msgstr "postmaster에서 select() 작동 실패: %m" -#: postmaster/postmaster.c:1835 +#: postmaster/postmaster.c:1870 #, c-format msgid "" "performing immediate shutdown because data directory lock file is invalid" msgstr "" -#: postmaster/postmaster.c:1934 postmaster/postmaster.c:1965 +#: postmaster/postmaster.c:1973 postmaster/postmaster.c:2004 #, c-format msgid "incomplete startup packet" msgstr "아직 완료되지 않은 시작 패킷" -#: postmaster/postmaster.c:1946 +#: postmaster/postmaster.c:1985 #, c-format msgid "invalid length of startup packet" msgstr "시작 패킷의 길이가 잘못 되었습니다" -#: postmaster/postmaster.c:2004 +#: postmaster/postmaster.c:2043 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "SSL 연결 작업에 오류가 발생했습니다: %m" -#: postmaster/postmaster.c:2031 +#: postmaster/postmaster.c:2074 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "GSSAPI 협상 응답을 보내지 못했습니다: %m" -#: postmaster/postmaster.c:2056 +#: postmaster/postmaster.c:2104 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "" "지원하지 않는 frontend 프로토콜 %u.%u: 서버에서 지원하는 프로토콜 %u.0 .. %u." "%u" -#: postmaster/postmaster.c:2120 utils/misc/guc.c:6540 utils/misc/guc.c:6576 -#: utils/misc/guc.c:6646 utils/misc/guc.c:7969 utils/misc/guc.c:10816 -#: utils/misc/guc.c:10850 +#: postmaster/postmaster.c:2168 utils/misc/guc.c:6769 utils/misc/guc.c:6805 +#: utils/misc/guc.c:6875 utils/misc/guc.c:8198 utils/misc/guc.c:11044 +#: utils/misc/guc.c:11078 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "잘못된 \"%s\" 매개 변수의 값: \"%s\"" -#: postmaster/postmaster.c:2123 +#: postmaster/postmaster.c:2171 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "" -#: postmaster/postmaster.c:2168 +#: postmaster/postmaster.c:2216 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "잘못된 시작 패킷 레이아웃: 마지막 바이트로 종결문자가 발견되었음" -#: postmaster/postmaster.c:2206 +#: postmaster/postmaster.c:2254 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "시작 패킷에서 지정한 사용자는 PostgreSQL 사용자 이름이 아닙니다" -#: postmaster/postmaster.c:2265 +#: postmaster/postmaster.c:2318 #, c-format msgid "the database system is starting up" msgstr "데이터베이스 시스템이 새로 가동 중입니다." -#: postmaster/postmaster.c:2270 +#: postmaster/postmaster.c:2323 #, c-format msgid "the database system is shutting down" msgstr "데이터베이스 시스템이 중지 중입니다" -#: postmaster/postmaster.c:2275 +#: postmaster/postmaster.c:2328 #, c-format msgid "the database system is in recovery mode" msgstr "데이터베이스 시스템이 자동 복구 작업 중입니다." -#: postmaster/postmaster.c:2280 storage/ipc/procarray.c:293 -#: storage/ipc/sinvaladt.c:298 storage/lmgr/proc.c:363 +#: postmaster/postmaster.c:2333 storage/ipc/procarray.c:293 +#: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:362 #, c-format msgid "sorry, too many clients already" msgstr "최대 동시 접속자 수를 초과했습니다." -#: postmaster/postmaster.c:2370 +#: postmaster/postmaster.c:2423 #, c-format msgid "wrong key in cancel request for process %d" msgstr "프로세스 %d에 대한 취소 요청에 잘못된 키가 있음" -#: postmaster/postmaster.c:2382 +#: postmaster/postmaster.c:2435 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "취소 요청의 PID %d과(와) 일치하는 프로세스가 없음" -#: postmaster/postmaster.c:2635 +#: postmaster/postmaster.c:2706 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "SIGHUP 신호를 받아서, 환경설정파일을 다시 읽고 있습니다." #. translator: %s is a configuration file -#: postmaster/postmaster.c:2661 postmaster/postmaster.c:2665 +#: postmaster/postmaster.c:2732 postmaster/postmaster.c:2736 #, c-format msgid "%s was not reloaded" msgstr "%s 파일을 다시 불러오지 않았음" -#: postmaster/postmaster.c:2675 +#: postmaster/postmaster.c:2746 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL 설정이 다시 로드되지 않았음" -#: postmaster/postmaster.c:2723 +#: postmaster/postmaster.c:2802 #, c-format msgid "received smart shutdown request" msgstr "smart 중지 요청을 받았습니다." -#: postmaster/postmaster.c:2781 +#: postmaster/postmaster.c:2848 #, c-format msgid "received fast shutdown request" msgstr "fast 중지 요청을 받았습니다." -#: postmaster/postmaster.c:2814 +#: postmaster/postmaster.c:2866 #, c-format msgid "aborting any active transactions" msgstr "모든 활성화 되어있는 트랜잭션을 중지하고 있습니다." -#: postmaster/postmaster.c:2848 +#: postmaster/postmaster.c:2890 #, c-format msgid "received immediate shutdown request" msgstr "immediate 중지 요청을 받았습니다." -#: postmaster/postmaster.c:2915 +#: postmaster/postmaster.c:2965 #, c-format msgid "shutdown at recovery target" msgstr "복구 타겟에서 중지함" -#: postmaster/postmaster.c:2931 postmaster/postmaster.c:2954 +#: postmaster/postmaster.c:2983 postmaster/postmaster.c:3019 msgid "startup process" msgstr "시작 프로세스" -#: postmaster/postmaster.c:2934 +#: postmaster/postmaster.c:2986 #, c-format msgid "aborting startup due to startup process failure" msgstr "시작 프로세스 실패 때문에 서버 시작이 중지 되었습니다" -#: postmaster/postmaster.c:2995 +#: postmaster/postmaster.c:3061 #, c-format msgid "database system is ready to accept connections" msgstr "이제 데이터베이스 서버로 접속할 수 있습니다" -#: postmaster/postmaster.c:3016 +#: postmaster/postmaster.c:3082 msgid "background writer process" msgstr "백그라운드 writer 프로세스" -#: postmaster/postmaster.c:3070 +#: postmaster/postmaster.c:3136 msgid "checkpointer process" msgstr "체크포인트 프로세스" -#: postmaster/postmaster.c:3086 +#: postmaster/postmaster.c:3152 msgid "WAL writer process" msgstr "WAL 쓰기 프로세스" -#: postmaster/postmaster.c:3101 +#: postmaster/postmaster.c:3167 msgid "WAL receiver process" msgstr "WAL 수신 프로세스" -#: postmaster/postmaster.c:3116 +#: postmaster/postmaster.c:3182 msgid "autovacuum launcher process" msgstr "autovacuum 실행기 프로세스" -#: postmaster/postmaster.c:3131 +#: postmaster/postmaster.c:3197 msgid "archiver process" msgstr "archiver 프로세스" -#: postmaster/postmaster.c:3147 +#: postmaster/postmaster.c:3213 msgid "statistics collector process" msgstr "통계 수집기 프로세스" -#: postmaster/postmaster.c:3161 +#: postmaster/postmaster.c:3227 msgid "system logger process" msgstr "시스템 로그 프로세스" -#: postmaster/postmaster.c:3223 +#: postmaster/postmaster.c:3291 #, c-format msgid "background worker \"%s\"" msgstr "백그라운드 작업자 \"%s\"" -#: postmaster/postmaster.c:3307 postmaster/postmaster.c:3327 -#: postmaster/postmaster.c:3334 postmaster/postmaster.c:3352 +#: postmaster/postmaster.c:3375 postmaster/postmaster.c:3395 +#: postmaster/postmaster.c:3402 postmaster/postmaster.c:3420 msgid "server process" msgstr "서버 프로세스" -#: postmaster/postmaster.c:3406 +#: postmaster/postmaster.c:3474 #, c-format msgid "terminating any other active server processes" msgstr "다른 활성화 되어있는 서버 프로세스를 마치고 있는 중입니다" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3662 +#: postmaster/postmaster.c:3729 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) 프로그램은 %d 코드로 마쳤습니다" -#: postmaster/postmaster.c:3664 postmaster/postmaster.c:3676 -#: postmaster/postmaster.c:3686 postmaster/postmaster.c:3697 +#: postmaster/postmaster.c:3731 postmaster/postmaster.c:3743 +#: postmaster/postmaster.c:3753 postmaster/postmaster.c:3764 #, c-format msgid "Failed process was running: %s" msgstr "" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3673 +#: postmaster/postmaster.c:3740 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) 프로세스가 0x%X 예외로 인해 종료됨" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3683 +#: postmaster/postmaster.c:3750 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) 프로세스가 %d번 시그널을 받아 종료됨: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3695 +#: postmaster/postmaster.c:3762 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) 프로세스가 인식할 수 없는 %d 상태로 종료됨" -#: postmaster/postmaster.c:3878 +#: postmaster/postmaster.c:3970 #, c-format msgid "abnormal database system shutdown" msgstr "비정상적인 데이터베이스 시스템 서비스를 중지" -#: postmaster/postmaster.c:3918 +#: postmaster/postmaster.c:4010 #, c-format msgid "all server processes terminated; reinitializing" msgstr "모든 서버 프로세스가 중지 되었습니다; 재 초기화 중" -#: postmaster/postmaster.c:4088 postmaster/postmaster.c:5479 -#: postmaster/postmaster.c:5867 +#: postmaster/postmaster.c:4180 postmaster/postmaster.c:5599 +#: postmaster/postmaster.c:5986 #, c-format msgid "could not generate random cancel key" msgstr "무작위 취소 키를 만들 수 없음" -#: postmaster/postmaster.c:4142 +#: postmaster/postmaster.c:4234 #, c-format msgid "could not fork new process for connection: %m" msgstr "연결을 위한 새 프로세스 할당(fork) 실패: %m" -#: postmaster/postmaster.c:4184 +#: postmaster/postmaster.c:4276 msgid "could not fork new process for connection: " msgstr "연결을 위한 새 프로세스 할당(fork) 실패: " -#: postmaster/postmaster.c:4294 +#: postmaster/postmaster.c:4393 #, c-format msgid "connection received: host=%s port=%s" msgstr "접속 수락: host=%s port=%s" -#: postmaster/postmaster.c:4299 +#: postmaster/postmaster.c:4398 #, c-format msgid "connection received: host=%s" msgstr "접속 수락: host=%s" -#: postmaster/postmaster.c:4569 +#: postmaster/postmaster.c:4668 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "\"%s\" 서버 프로세스를 실행할 수 없음: %m" -#: postmaster/postmaster.c:4722 +#: postmaster/postmaster.c:4827 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "공유 메모리 확보 작업을 여러 번 시도했으나 실패 함" -#: postmaster/postmaster.c:4723 +#: postmaster/postmaster.c:4828 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "이 현상은 ASLR 또는 바이러스 검사 소프트웨어 때문일 수 있습니다." -#: postmaster/postmaster.c:4934 +#: postmaster/postmaster.c:5034 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "하위 프로세스에서 SSL 환경 설정을 못했음" -#: postmaster/postmaster.c:5066 +#: postmaster/postmaster.c:5166 #, c-format -msgid "Please report this to ." -msgstr "이 내용을 주소로 보고하십시오." +msgid "Please report this to <%s>." +msgstr "이 내용을 <%s> 주소로 보고하십시오." -#: postmaster/postmaster.c:5153 +#: postmaster/postmaster.c:5259 #, c-format msgid "database system is ready to accept read only connections" msgstr "데이터베이스 시스템이 읽기 전용으로 연결을 수락할 준비가 되었습니다." -#: postmaster/postmaster.c:5407 +#: postmaster/postmaster.c:5527 #, c-format msgid "could not fork startup process: %m" msgstr "시작 프로세스 할당(fork) 실패: %m" -#: postmaster/postmaster.c:5411 +#: postmaster/postmaster.c:5531 #, c-format msgid "could not fork background writer process: %m" msgstr "백그라운 writer 프로세스를 할당(fork)할 수 없습니다: %m" -#: postmaster/postmaster.c:5415 +#: postmaster/postmaster.c:5535 #, c-format msgid "could not fork checkpointer process: %m" msgstr "체크포인트 프로세스를 할당(fork)할 수 없습니다: %m" -#: postmaster/postmaster.c:5419 +#: postmaster/postmaster.c:5539 #, c-format msgid "could not fork WAL writer process: %m" msgstr "WAL 쓰기 프로세스를 할당(fork)할 수 없음: %m" -#: postmaster/postmaster.c:5423 +#: postmaster/postmaster.c:5543 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "WAL 수신 프로세스를 할당(fork)할 수 없음: %m" -#: postmaster/postmaster.c:5427 +#: postmaster/postmaster.c:5547 #, c-format msgid "could not fork process: %m" msgstr "프로세스 할당(fork) 실패: %m" -#: postmaster/postmaster.c:5624 postmaster/postmaster.c:5647 +#: postmaster/postmaster.c:5744 postmaster/postmaster.c:5767 #, c-format msgid "database connection requirement not indicated during registration" msgstr "" -#: postmaster/postmaster.c:5631 postmaster/postmaster.c:5654 +#: postmaster/postmaster.c:5751 postmaster/postmaster.c:5774 #, c-format msgid "invalid processing mode in background worker" msgstr "백그라운드 작업자에서 잘못된 프로세싱 모드가 사용됨" -#: postmaster/postmaster.c:5727 +#: postmaster/postmaster.c:5847 #, c-format msgid "starting background worker process \"%s\"" msgstr "\"%s\" 백그라운드 작업자 프로세스를 시작합니다." -#: postmaster/postmaster.c:5739 +#: postmaster/postmaster.c:5859 #, c-format msgid "could not fork worker process: %m" msgstr "작업자 프로세스를 할당(fork)할 수 없음: %m" -#: postmaster/postmaster.c:5853 +#: postmaster/postmaster.c:5972 #, c-format msgid "no slot available for new worker process" msgstr "새 작업자 프로세스에서 쓸 슬롯이 없음" -#: postmaster/postmaster.c:6188 +#: postmaster/postmaster.c:6307 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "백엔드에서 사용하기 위해 %d 소켓을 복사할 수 없음: 오류 코드 %d" -#: postmaster/postmaster.c:6220 +#: postmaster/postmaster.c:6339 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "상속된 소켓을 만들 수 없음: 오류 코드 %d\n" -#: postmaster/postmaster.c:6249 +#: postmaster/postmaster.c:6368 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "\"%s\" 백엔드 변수 파일을 열 수 없음: %s\n" -#: postmaster/postmaster.c:6256 +#: postmaster/postmaster.c:6375 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "\"%s\" 백엔드 변수 파일을 읽을 수 없음: %s\n" -#: postmaster/postmaster.c:6265 +#: postmaster/postmaster.c:6384 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "\"%s\" 파일을 삭제할 수 없음: %s\n" -#: postmaster/postmaster.c:6282 +#: postmaster/postmaster.c:6401 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "백엔드 변수 파일의 view를 map할 수 없음: 오류 코드 %lu\n" -#: postmaster/postmaster.c:6291 +#: postmaster/postmaster.c:6410 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "백엔드 변수 파일의 view를 unmap할 수 없음: 오류 코드 %lu\n" -#: postmaster/postmaster.c:6298 +#: postmaster/postmaster.c:6417 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "백엔드 변수 파일을 닫을 수 없음: 오류 코드 %lu\n" -#: postmaster/postmaster.c:6462 +#: postmaster/postmaster.c:6595 #, c-format msgid "could not read exit code for process\n" msgstr "프로세스의 종료 코드를 읽을 수 없음\n" -#: postmaster/postmaster.c:6467 +#: postmaster/postmaster.c:6600 #, c-format msgid "could not post child completion status\n" msgstr "하위 완료 상태를 게시할 수 없음\n" -#: postmaster/syslogger.c:480 postmaster/syslogger.c:1154 +#: postmaster/syslogger.c:474 postmaster/syslogger.c:1153 #, c-format msgid "could not read from logger pipe: %m" msgstr "로그 파이프에서 읽기 실패: %m" -#: postmaster/syslogger.c:528 +#: postmaster/syslogger.c:522 #, c-format msgid "logger shutting down" msgstr "로그 작업 끝내는 중" -#: postmaster/syslogger.c:572 postmaster/syslogger.c:586 +#: postmaster/syslogger.c:571 postmaster/syslogger.c:585 #, c-format msgid "could not create pipe for syslog: %m" msgstr "syslog에서 사용할 파이프를 만들 수 없습니다: %m" -#: postmaster/syslogger.c:637 +#: postmaster/syslogger.c:636 #, c-format msgid "could not fork system logger: %m" msgstr "시스템 로거(logger)를 확보하질 못 했습니다: %m" -#: postmaster/syslogger.c:673 +#: postmaster/syslogger.c:672 #, c-format msgid "redirecting log output to logging collector process" msgstr "서버 로그를 로그 수집 프로세스로 보냅니다." -#: postmaster/syslogger.c:674 +#: postmaster/syslogger.c:673 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "이제부터 서버 로그는 \"%s\" 디렉터리에 보관됩니다." -#: postmaster/syslogger.c:682 +#: postmaster/syslogger.c:681 #, c-format msgid "could not redirect stdout: %m" msgstr "표준출력을 redirect 하지 못했습니다: %m" -#: postmaster/syslogger.c:687 postmaster/syslogger.c:704 +#: postmaster/syslogger.c:686 postmaster/syslogger.c:703 #, c-format msgid "could not redirect stderr: %m" msgstr "표준오류(stderr)를 redirect 하지 못했습니다: %m" -#: postmaster/syslogger.c:1109 +#: postmaster/syslogger.c:1108 #, c-format msgid "could not write to log file: %s\n" msgstr "로그파일 쓰기 실패: %s\n" -#: postmaster/syslogger.c:1226 +#: postmaster/syslogger.c:1225 #, c-format msgid "could not open log file \"%s\": %m" msgstr "\"%s\" 잠금파일을 열 수 없음: %m" -#: postmaster/syslogger.c:1288 postmaster/syslogger.c:1338 +#: postmaster/syslogger.c:1287 postmaster/syslogger.c:1337 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "" @@ -18543,84 +18984,128 @@ msgstr "정규식을 사용해서 사용할 정렬규칙(collation)을 찾을 msgid "nondeterministic collations are not supported for regular expressions" msgstr "정규식을 사용해서 사용할 정렬규칙(collation)을 찾을 수 없음" -#: replication/basebackup.c:102 +#: replication/backup_manifest.c:231 +#, c-format +msgid "expected end timeline %u but found timeline %u" +msgstr "%u 타임라인이 끝이어야하는데, %u 타임라인임" + +#: replication/backup_manifest.c:248 +#, c-format +msgid "expected start timeline %u but found timeline %u" +msgstr "" +"시작 타임라인이 %u 여야하는데, %u 타임라인임" + +#: replication/backup_manifest.c:275 +#, c-format +msgid "start timeline %u not found in history of timeline %u" +msgstr "" +"%u 시작 타임라인이 %u 타임라인 내역안에 없음" + +#: replication/backup_manifest.c:322 +#, c-format +msgid "could not rewind temporary file" +msgstr "임시 파일을 되감을 수 없음" + +#: replication/backup_manifest.c:349 +#, c-format +msgid "could not read from temporary file: %m" +msgstr "임시 파일을 읽을 수 없음: %m" + +#: replication/basebackup.c:108 #, c-format msgid "could not read from file \"%s\"" msgstr "\"%s\" 파일을 읽을 수 없음" -#: replication/basebackup.c:462 +#: replication/basebackup.c:551 #, c-format msgid "could not find any WAL files" msgstr "어떤 WAL 파일도 찾을 수 없음" -#: replication/basebackup.c:476 replication/basebackup.c:491 -#: replication/basebackup.c:500 +#: replication/basebackup.c:566 replication/basebackup.c:582 +#: replication/basebackup.c:591 #, c-format msgid "could not find WAL file \"%s\"" msgstr "\"%s\" WAL 파일 찾기 실패" -#: replication/basebackup.c:542 replication/basebackup.c:572 +#: replication/basebackup.c:634 replication/basebackup.c:665 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "\"%s\" WAL 파일의 크기가 알맞지 않음" -#: replication/basebackup.c:556 replication/basebackup.c:1567 +#: replication/basebackup.c:648 replication/basebackup.c:1752 #, c-format msgid "base backup could not send data, aborting backup" msgstr "베이스 백업에서 자료를 보낼 수 없음. 백업을 중지합니다." -#: replication/basebackup.c:630 +#: replication/basebackup.c:724 #, c-format -msgid "%s total checksum verification failures" -msgstr "%s 전체 체크섬 검사 실패" +msgid "%lld total checksum verification failure" +msgid_plural "%lld total checksum verification failures" +msgstr[0] "%lld 전체 체크섬 검사 실패" -#: replication/basebackup.c:634 +#: replication/basebackup.c:731 #, c-format msgid "checksum verification failure during base backup" -msgstr "" +msgstr "베이스 백업 중 체크섬 검사 실패" -#: replication/basebackup.c:678 replication/basebackup.c:687 -#: replication/basebackup.c:696 replication/basebackup.c:705 -#: replication/basebackup.c:714 replication/basebackup.c:725 -#: replication/basebackup.c:742 replication/basebackup.c:751 +#: replication/basebackup.c:784 replication/basebackup.c:793 +#: replication/basebackup.c:802 replication/basebackup.c:811 +#: replication/basebackup.c:820 replication/basebackup.c:831 +#: replication/basebackup.c:848 replication/basebackup.c:857 +#: replication/basebackup.c:869 replication/basebackup.c:893 #, c-format msgid "duplicate option \"%s\"" msgstr "\"%s\" 옵션을 두 번 지정했습니다" -#: replication/basebackup.c:731 +#: replication/basebackup.c:837 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "" "%d 값은 \"%s\" 매개 변수의 값으로 타당한 범위(%d .. %d)를 벗어났습니다." -#: replication/basebackup.c:1330 +#: replication/basebackup.c:882 +#, c-format +msgid "unrecognized manifest option: \"%s\"" +msgstr "인식할 수 없는 메니페스트 옵션 \"%s\"" + +#: replication/basebackup.c:898 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "알 수 없는 체크섬 알고리즘: \"%s\"" + +#: replication/basebackup.c:913 +#, c-format +msgid "manifest checksums require a backup manifest" +msgstr "" + +#: replication/basebackup.c:1504 #, c-format msgid "skipping special file \"%s\"" msgstr "\"%s\" 특수 파일을 건너뜀" -#: replication/basebackup.c:1438 +#: replication/basebackup.c:1623 #, c-format msgid "invalid segment number %d in file \"%s\"" msgstr "잘못된 조각 번호 %d, 해당 파일: \"%s\"" -#: replication/basebackup.c:1457 +#: replication/basebackup.c:1642 #, c-format msgid "" "could not verify checksum in file \"%s\", block %d: read buffer size %d and " "page size %d differ" msgstr "" -#: replication/basebackup.c:1501 replication/basebackup.c:1531 +#: replication/basebackup.c:1686 replication/basebackup.c:1716 #, c-format msgid "could not fseek in file \"%s\": %m" msgstr "\"%s\" 파일에서 fseek 작업을 할 수 없음: %m" -#: replication/basebackup.c:1523 +#: replication/basebackup.c:1708 #, c-format msgid "could not reread block %d of file \"%s\": %m" msgstr "%d 블럭을 \"%s\" 파일에서 다시 읽을 수 없음: %m" -#: replication/basebackup.c:1547 +#: replication/basebackup.c:1732 #, c-format msgid "" "checksum verification failed in file \"%s\", block %d: calculated %X but " @@ -18629,18 +19114,24 @@ msgstr "" "\"%s\" 파일 체크섬 검사 실패(해당 블럭 %d): 계산된 체크섬은 %X 값이지만, 기" "대값 %X" -#: replication/basebackup.c:1554 +#: replication/basebackup.c:1739 #, c-format msgid "" "further checksum verification failures in file \"%s\" will not be reported" msgstr "" -#: replication/basebackup.c:1647 +#: replication/basebackup.c:1807 +#, c-format +msgid "file \"%s\" has a total of %d checksum verification failure" +msgid_plural "file \"%s\" has a total of %d checksum verification failures" +msgstr[0] "\"%s\" 파일에서 전체 %d 건 체크섬 검사 실패" + +#: replication/basebackup.c:1843 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "tar 파일로 묶기에는 파일 이름이 너무 긺: \"%s\"" -#: replication/basebackup.c:1652 +#: replication/basebackup.c:1848 #, c-format msgid "" "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" @@ -18648,17 +19139,22 @@ msgstr "" "tar 포멧을 사용하기에는 심볼릭 링크의 대상 경로가 너무 깁니다: 파일 이름 \"%s" "\", 대상 \"%s\"" -#: replication/libpqwalreceiver/libpqwalreceiver.c:232 +#: replication/libpqwalreceiver/libpqwalreceiver.c:227 +#, c-format +msgid "could not clear search path: %s" +msgstr "search path를 지울 수 없음: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:251 #, c-format msgid "invalid connection string syntax: %s" msgstr "잘못된 연결 문자열 구문: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:256 +#: replication/libpqwalreceiver/libpqwalreceiver.c:275 #, c-format msgid "could not parse connection string: %s" msgstr "접속 문자열을 분석할 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:328 +#: replication/libpqwalreceiver/libpqwalreceiver.c:347 #, c-format msgid "" "could not receive database system identifier and timeline ID from the " @@ -18666,13 +19162,13 @@ msgid "" msgstr "" "주 서버에서 데이터베이스 시스템 식별번호와 타임라인 번호를 받을 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:339 -#: replication/libpqwalreceiver/libpqwalreceiver.c:557 +#: replication/libpqwalreceiver/libpqwalreceiver.c:358 +#: replication/libpqwalreceiver/libpqwalreceiver.c:576 #, c-format msgid "invalid response from primary server" msgstr "주 서버에서 잘못된 응답이 왔음" -#: replication/libpqwalreceiver/libpqwalreceiver.c:340 +#: replication/libpqwalreceiver/libpqwalreceiver.c:359 #, c-format msgid "" "Could not identify system: got %d rows and %d fields, expected %d rows and " @@ -18681,154 +19177,154 @@ msgstr "" "시스템을 식별할 수 없음: 로우수 %d, 필드수 %d, 예상값: 로우수 %d, 필드수 %d " "이상" -#: replication/libpqwalreceiver/libpqwalreceiver.c:413 -#: replication/libpqwalreceiver/libpqwalreceiver.c:419 -#: replication/libpqwalreceiver/libpqwalreceiver.c:444 +#: replication/libpqwalreceiver/libpqwalreceiver.c:432 +#: replication/libpqwalreceiver/libpqwalreceiver.c:438 +#: replication/libpqwalreceiver/libpqwalreceiver.c:463 #, c-format msgid "could not start WAL streaming: %s" msgstr "WAL 스트리밍 작업을 시작할 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:467 +#: replication/libpqwalreceiver/libpqwalreceiver.c:486 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "주 서버로 스트리밍 종료 메시지를 보낼 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:489 +#: replication/libpqwalreceiver/libpqwalreceiver.c:508 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "스트리밍 종료 요청에 대한 잘못된 응답을 받음" -#: replication/libpqwalreceiver/libpqwalreceiver.c:503 +#: replication/libpqwalreceiver/libpqwalreceiver.c:522 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "COPY 스트리밍 종료 중 오류 발생: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:512 +#: replication/libpqwalreceiver/libpqwalreceiver.c:531 #, c-format msgid "error reading result of streaming command: %s" msgstr "스트리밍 명령에 대한 결과 처리에서 오류 발생: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:520 -#: replication/libpqwalreceiver/libpqwalreceiver.c:754 +#: replication/libpqwalreceiver/libpqwalreceiver.c:539 +#: replication/libpqwalreceiver/libpqwalreceiver.c:773 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "CommandComplete 작업 후 예상치 못한 결과를 받음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:546 +#: replication/libpqwalreceiver/libpqwalreceiver.c:565 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "주 서버에서 타임라인 내역 파일을 받을 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:558 +#: replication/libpqwalreceiver/libpqwalreceiver.c:577 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "2개의 칼럼으로 된 하나의 튜플을 예상하지만, %d 튜플 (%d 칼럼)을 수신함" -#: replication/libpqwalreceiver/libpqwalreceiver.c:718 -#: replication/libpqwalreceiver/libpqwalreceiver.c:769 -#: replication/libpqwalreceiver/libpqwalreceiver.c:775 +#: replication/libpqwalreceiver/libpqwalreceiver.c:737 +#: replication/libpqwalreceiver/libpqwalreceiver.c:788 +#: replication/libpqwalreceiver/libpqwalreceiver.c:794 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "WAL 스트림에서 자료 받기 실패: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:794 +#: replication/libpqwalreceiver/libpqwalreceiver.c:813 #, c-format msgid "could not send data to WAL stream: %s" msgstr "WAL 스트림에 데이터를 보낼 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:843 +#: replication/libpqwalreceiver/libpqwalreceiver.c:866 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "\"%s\" 복제 슬롯을 만들 수 없음: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:877 +#: replication/libpqwalreceiver/libpqwalreceiver.c:911 #, c-format msgid "invalid query response" msgstr "잘못된 쿼리 응답" -#: replication/libpqwalreceiver/libpqwalreceiver.c:878 +#: replication/libpqwalreceiver/libpqwalreceiver.c:912 #, c-format msgid "Expected %d fields, got %d fields." msgstr "%d개의 칼럼을 예상하지만, %d개의 칼럼을 수신함" -#: replication/libpqwalreceiver/libpqwalreceiver.c:947 +#: replication/libpqwalreceiver/libpqwalreceiver.c:981 #, c-format msgid "the query interface requires a database connection" msgstr "이 쿼리 인터페이스는 데이터베이스 연결이 필요합니다" -#: replication/libpqwalreceiver/libpqwalreceiver.c:978 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1012 msgid "empty query" msgstr "빈 쿼리" -#: replication/logical/launcher.c:307 +#: replication/logical/launcher.c:295 #, c-format msgid "starting logical replication worker for subscription \"%s\"" msgstr "\"%s\" 구독을 위해 논리 복제 작업자를 시작합니다" -#: replication/logical/launcher.c:314 +#: replication/logical/launcher.c:302 #, c-format msgid "cannot start logical replication workers when max_replication_slots = 0" msgstr "" "max_replication_slots = 0 설정 때문에 논리 복제 작업자를 시작 할 수 없습니다" -#: replication/logical/launcher.c:394 +#: replication/logical/launcher.c:382 #, c-format msgid "out of logical replication worker slots" msgstr "더 이상의 논리 복제 작업자용 슬롯이 없습니다" -#: replication/logical/launcher.c:395 +#: replication/logical/launcher.c:383 #, c-format msgid "You might need to increase max_logical_replication_workers." msgstr "max_logical_replication_workers 값을 늘리세요." -#: replication/logical/launcher.c:450 +#: replication/logical/launcher.c:438 #, c-format msgid "out of background worker slots" msgstr "백그라운 작업자 슬롯이 모자랍니다" -#: replication/logical/launcher.c:451 +#: replication/logical/launcher.c:439 #, c-format msgid "You might need to increase max_worker_processes." msgstr "max_worker_processes 값을 늘리세요." -#: replication/logical/launcher.c:650 +#: replication/logical/launcher.c:638 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "" -#: replication/logical/launcher.c:659 +#: replication/logical/launcher.c:647 #, c-format msgid "" "logical replication worker slot %d is already used by another worker, cannot " "attach" msgstr "" -#: replication/logical/launcher.c:977 +#: replication/logical/launcher.c:951 #, c-format msgid "logical replication launcher started" msgstr "논리 복제 관리자가 시작됨" -#: replication/logical/logical.c:90 +#: replication/logical/logical.c:87 #, c-format msgid "logical decoding requires wal_level >= logical" msgstr "논리적 디코딩 기능은 wal_level 값이 logical 이상이어야 함" -#: replication/logical/logical.c:95 +#: replication/logical/logical.c:92 #, c-format msgid "logical decoding requires a database connection" msgstr "논리적 디코딩 기능은 데이터베이스 연결이 필요합니다" -#: replication/logical/logical.c:113 +#: replication/logical/logical.c:110 #, c-format msgid "logical decoding cannot be used while in recovery" msgstr "논리적 디코딩 기능은 복구 상태에서는 사용할 수 없음" -#: replication/logical/logical.c:258 replication/logical/logical.c:396 +#: replication/logical/logical.c:258 replication/logical/logical.c:399 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "논리적 디코딩에서는 물리적 복제 슬롯을 사용할 수 없음" -#: replication/logical/logical.c:263 replication/logical/logical.c:401 +#: replication/logical/logical.c:263 replication/logical/logical.c:404 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "\"%s\" 복제 슬롯이 이 데이터베이스 만들어져있지 않음" @@ -18841,12 +19337,12 @@ msgid "" msgstr "" "자료 변경 작업이 있는 트랜잭션 안에서는 논리적 복제 슬롯을 만들 수 없음" -#: replication/logical/logical.c:441 +#: replication/logical/logical.c:444 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "\"%s\" 이름의 논리적 복제 슬롯을 만드는 중" -#: replication/logical/logical.c:443 +#: replication/logical/logical.c:446 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "" @@ -18862,309 +19358,321 @@ msgstr "" msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "" -#: replication/logical/logicalfuncs.c:114 replication/slotfuncs.c:34 +#: replication/logical/logicalfuncs.c:104 replication/slotfuncs.c:34 #, c-format msgid "must be superuser or replication role to use replication slots" msgstr "" "복제 슬롯은 superuser 또는 replication 롤 옵션을 포함한 사용자만 사용할 수 있" "습니다." -#: replication/logical/logicalfuncs.c:153 +#: replication/logical/logicalfuncs.c:134 #, c-format msgid "slot name must not be null" msgstr "슬롯 이름으로 null 값을 사용할 수 없습니다" -#: replication/logical/logicalfuncs.c:169 +#: replication/logical/logicalfuncs.c:150 #, c-format msgid "options array must not be null" msgstr "옵션 배열은 null 값을 사용할 수 없습니다." -#: replication/logical/logicalfuncs.c:200 +#: replication/logical/logicalfuncs.c:181 #, c-format msgid "array must be one-dimensional" msgstr "배열은 일차원 배열이어야합니다" -#: replication/logical/logicalfuncs.c:206 +#: replication/logical/logicalfuncs.c:187 #, c-format msgid "array must not contain nulls" msgstr "배열에는 null 값을 포함할 수 없습니다" -#: replication/logical/logicalfuncs.c:222 utils/adt/json.c:2312 -#: utils/adt/jsonb.c:1282 +#: replication/logical/logicalfuncs.c:203 utils/adt/json.c:1128 +#: utils/adt/jsonb.c:1303 #, c-format msgid "array must have even number of elements" msgstr "배열은 그 요소의 개수가 짝수여야 함" -#: replication/logical/logicalfuncs.c:269 +#: replication/logical/logicalfuncs.c:251 +#, c-format +msgid "can no longer get changes from replication slot \"%s\"" +msgstr "\"%s\" 복제 슬롯에서 변경 사항을 더 찾을 수 없음" + +#: replication/logical/logicalfuncs.c:253 replication/slotfuncs.c:648 +#, c-format +msgid "This slot has never previously reserved WAL, or has been invalidated." +msgstr "이 슬롯은 한 번도 WAL를 예약한 적이 없거나, 잘못된 것임" + +#: replication/logical/logicalfuncs.c:265 #, c-format msgid "" "logical decoding output plugin \"%s\" produces binary output, but function " "\"%s\" expects textual data" msgstr "" +"\"%s\" 논리 복제 출력 플러그인은 이진 자료를 출력하지만, \"%s\" 함수는 " +"텍스트 자료를 사용함" -#: replication/logical/origin.c:186 +#: replication/logical/origin.c:188 #, c-format msgid "only superusers can query or manipulate replication origins" msgstr "슈퍼유저만 복제 원본에 대한 쿼리나, 관리를 할 수 있습니다." -#: replication/logical/origin.c:191 +#: replication/logical/origin.c:193 #, c-format msgid "" "cannot query or manipulate replication origin when max_replication_slots = 0" msgstr "" -#: replication/logical/origin.c:196 +#: replication/logical/origin.c:198 #, c-format msgid "cannot manipulate replication origins during recovery" msgstr "" -#: replication/logical/origin.c:231 +#: replication/logical/origin.c:233 #, c-format msgid "replication origin \"%s\" does not exist" msgstr "\"%s\" 이름의 복제 오리진이 없습니다" -#: replication/logical/origin.c:322 +#: replication/logical/origin.c:324 #, c-format msgid "could not find free replication origin OID" msgstr "비어있는 복제 오리진 OID를 찾을 수 없음" -#: replication/logical/origin.c:370 +#: replication/logical/origin.c:372 #, c-format msgid "could not drop replication origin with OID %d, in use by PID %d" msgstr "" -#: replication/logical/origin.c:462 +#: replication/logical/origin.c:464 #, c-format msgid "replication origin with OID %u does not exist" msgstr "OID %u 복제 오리진이 없음" -#: replication/logical/origin.c:730 +#: replication/logical/origin.c:729 #, c-format msgid "replication checkpoint has wrong magic %u instead of %u" msgstr "복제 체크포인트의 잘못된 매직 번호: %u, 기대값: %u" -#: replication/logical/origin.c:771 +#: replication/logical/origin.c:770 #, c-format msgid "could not find free replication state, increase max_replication_slots" msgstr "" "사용 가능한 복제 슬롯이 부족합니다. max_replication_slots 값을 늘리세요" -#: replication/logical/origin.c:789 +#: replication/logical/origin.c:788 #, c-format msgid "replication slot checkpoint has wrong checksum %u, expected %u" msgstr "복제 슬롯 체크포인트의 체크섬 값이 잘못됨: %u, 기대값 %u" -#: replication/logical/origin.c:917 replication/logical/origin.c:1103 +#: replication/logical/origin.c:916 replication/logical/origin.c:1102 #, c-format msgid "replication origin with OID %d is already active for PID %d" msgstr "" -#: replication/logical/origin.c:928 replication/logical/origin.c:1115 +#: replication/logical/origin.c:927 replication/logical/origin.c:1114 #, c-format msgid "" "could not find free replication state slot for replication origin with OID %u" msgstr "%u OID 복제 오리진을 위한 여유 복제 슬롯을 찾을 수 없음" -#: replication/logical/origin.c:930 replication/logical/origin.c:1117 -#: replication/slot.c:1567 +#: replication/logical/origin.c:929 replication/logical/origin.c:1116 +#: replication/slot.c:1762 #, c-format msgid "Increase max_replication_slots and try again." msgstr "max_replication_slots 값을 늘린 후 다시 시도해 보세요" -#: replication/logical/origin.c:1074 +#: replication/logical/origin.c:1073 #, c-format msgid "cannot setup replication origin when one is already setup" msgstr "하나가 이미 설정되어 더 이상 복제 오리진 설정을 할 수 없음" -#: replication/logical/origin.c:1154 replication/logical/origin.c:1370 -#: replication/logical/origin.c:1390 +#: replication/logical/origin.c:1153 replication/logical/origin.c:1369 +#: replication/logical/origin.c:1389 #, c-format msgid "no replication origin is configured" msgstr "복제 오리진 설정이 없습니다" -#: replication/logical/origin.c:1237 +#: replication/logical/origin.c:1236 #, c-format msgid "replication origin name \"%s\" is reserved" msgstr "\"%s\" 복제 오리진 이름은 사용할 수 없음" -#: replication/logical/origin.c:1239 +#: replication/logical/origin.c:1238 #, c-format msgid "Origin names starting with \"pg_\" are reserved." msgstr "\"pg_\"로 시작하는 오리진 이름은 사용할 수 없습니다." -#: replication/logical/relation.c:254 +#: replication/logical/relation.c:302 #, c-format msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "\"%s.%s\" 이름의 논리 복제 대상 릴레이션이 없습니다." -#: replication/logical/relation.c:311 +#: replication/logical/relation.c:345 #, c-format msgid "" "logical replication target relation \"%s.%s\" is missing some replicated " "columns" msgstr "" -#: replication/logical/relation.c:351 +#: replication/logical/relation.c:385 #, c-format msgid "" "logical replication target relation \"%s.%s\" uses system columns in REPLICA " "IDENTITY index" msgstr "" -#: replication/logical/reorderbuffer.c:2509 +#: replication/logical/reorderbuffer.c:2663 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "%u XID 내용을 데이터 파일에 쓸 수 없음: %m" -#: replication/logical/reorderbuffer.c:2618 -#: replication/logical/reorderbuffer.c:2643 +#: replication/logical/reorderbuffer.c:2850 +#: replication/logical/reorderbuffer.c:2875 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "reorderbuffer 처리용 파일에서 읽기 실패: %m" -#: replication/logical/reorderbuffer.c:2622 -#: replication/logical/reorderbuffer.c:2647 +#: replication/logical/reorderbuffer.c:2854 +#: replication/logical/reorderbuffer.c:2879 #, c-format msgid "" "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "" "reorderbuffer 처리용 파일에서 읽기 실패: %d 바이트 읽음, 기대값 %u 바이트" -#: replication/logical/reorderbuffer.c:2872 +#: replication/logical/reorderbuffer.c:3114 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "\"%s\" 파일을 지울 수 없음, pg_replslot/%s/xid* 삭제 작업 중: %m" -#: replication/logical/reorderbuffer.c:3342 +#: replication/logical/reorderbuffer.c:3606 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "\"%s\" 파일에서 읽기 실패: %d 바이트 읽음, 기대값 %d 바이트" -#: replication/logical/snapbuild.c:611 +#: replication/logical/snapbuild.c:606 #, c-format msgid "initial slot snapshot too large" msgstr "초기 슬롯 스냅샷이 너무 큽니다." -#: replication/logical/snapbuild.c:665 +#: replication/logical/snapbuild.c:660 #, c-format msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" msgid_plural "" "exported logical decoding snapshot: \"%s\" with %u transaction IDs" msgstr[0] "" -#: replication/logical/snapbuild.c:1270 replication/logical/snapbuild.c:1363 -#: replication/logical/snapbuild.c:1917 +#: replication/logical/snapbuild.c:1265 replication/logical/snapbuild.c:1358 +#: replication/logical/snapbuild.c:1912 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "논리적 디코딩 이어서 시작할 위치: %X/%X" -#: replication/logical/snapbuild.c:1272 +#: replication/logical/snapbuild.c:1267 #, c-format msgid "There are no running transactions." msgstr "실행할 트랜잭션이 없음" -#: replication/logical/snapbuild.c:1314 +#: replication/logical/snapbuild.c:1309 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "논리적 디코딩 시작 위치: %X/%X" -#: replication/logical/snapbuild.c:1316 replication/logical/snapbuild.c:1340 +#: replication/logical/snapbuild.c:1311 replication/logical/snapbuild.c:1335 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "" -#: replication/logical/snapbuild.c:1338 +#: replication/logical/snapbuild.c:1333 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "논리적 디코딩을 이어서 시작할 위치: %X/%X" -#: replication/logical/snapbuild.c:1365 +#: replication/logical/snapbuild.c:1360 #, c-format msgid "There are no old transactions anymore." msgstr "더이상 오래된 트랜잭션이 없습니다." -#: replication/logical/snapbuild.c:1759 +#: replication/logical/snapbuild.c:1754 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "\"%s\" snapbuild 상태 파일의 매직 번호가 이상함: 현재값 %u, 기대값 %u" -#: replication/logical/snapbuild.c:1765 +#: replication/logical/snapbuild.c:1760 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "\"%s\" snapbuild 상태 파일의 버전이 이상함: 현재값 %u, 기대값 %u" -#: replication/logical/snapbuild.c:1864 +#: replication/logical/snapbuild.c:1859 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "" -#: replication/logical/snapbuild.c:1919 +#: replication/logical/snapbuild.c:1914 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "" -#: replication/logical/snapbuild.c:1991 +#: replication/logical/snapbuild.c:1986 #, c-format msgid "could not parse file name \"%s\"" msgstr "\"%s\" 파일 이름을 분석할 수 없음" -#: replication/logical/tablesync.c:139 +#: replication/logical/tablesync.c:132 #, c-format msgid "" "logical replication table synchronization worker for subscription \"%s\", " "table \"%s\" has finished" msgstr "" -#: replication/logical/tablesync.c:672 +#: replication/logical/tablesync.c:664 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "\"%s.%s\" 테이블용 테이블 정보를 구할 수 없습니다, 해당 발행: %s" -#: replication/logical/tablesync.c:678 +#: replication/logical/tablesync.c:670 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "" -#: replication/logical/tablesync.c:710 +#: replication/logical/tablesync.c:704 #, c-format msgid "could not fetch table info for table \"%s.%s\": %s" msgstr "\"%s.%s\" 테이블용 테이블 정보를 구할 수 없습니다: %s" -#: replication/logical/tablesync.c:780 +#: replication/logical/tablesync.c:791 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "\"%s.%s\" 테이블용 초기 자료 복사를 시작할 수 없습니다: %s" -#: replication/logical/tablesync.c:894 +#: replication/logical/tablesync.c:905 #, c-format msgid "table copy could not start transaction on publisher" msgstr "발행 서버에서는 테이블 복사 트랜잭션을 시작할 수 없음" -#: replication/logical/tablesync.c:916 +#: replication/logical/tablesync.c:927 #, c-format msgid "table copy could not finish transaction on publisher" msgstr "" -#: replication/logical/worker.c:290 +#: replication/logical/worker.c:313 #, c-format msgid "" "processing remote data for replication target relation \"%s.%s\" column \"%s" "\", remote type %s, local type %s" msgstr "" -#: replication/logical/worker.c:527 +#: replication/logical/worker.c:552 #, c-format msgid "ORIGIN message sent out of order" msgstr "" -#: replication/logical/worker.c:661 +#: replication/logical/worker.c:702 #, c-format msgid "" "publisher did not send replica identity column expected by the logical " "replication target relation \"%s.%s\"" msgstr "" -#: replication/logical/worker.c:668 +#: replication/logical/worker.c:709 #, c-format msgid "" "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY " @@ -19172,140 +19680,140 @@ msgid "" "FULL" msgstr "" -#: replication/logical/worker.c:1025 +#: replication/logical/worker.c:1394 #, c-format msgid "invalid logical replication message type \"%c\"" msgstr "잘못된 논리 복제 메시지 형태 \"%c\"" -#: replication/logical/worker.c:1167 +#: replication/logical/worker.c:1537 #, c-format msgid "data stream from publisher has ended" msgstr "" -#: replication/logical/worker.c:1322 +#: replication/logical/worker.c:1692 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "시간 제한으로 논리 복제 작업자를 중지합니다." -#: replication/logical/worker.c:1470 +#: replication/logical/worker.c:1837 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will stop because " "the subscription was removed" msgstr "" -#: replication/logical/worker.c:1484 +#: replication/logical/worker.c:1851 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will stop because " "the subscription was disabled" msgstr "" -#: replication/logical/worker.c:1498 +#: replication/logical/worker.c:1865 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will restart " "because the connection information was changed" msgstr "" -#: replication/logical/worker.c:1512 +#: replication/logical/worker.c:1879 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will restart " "because subscription was renamed" msgstr "" -#: replication/logical/worker.c:1529 +#: replication/logical/worker.c:1896 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will restart " "because the replication slot name was changed" msgstr "" -#: replication/logical/worker.c:1543 +#: replication/logical/worker.c:1910 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will restart " "because subscription's publications were changed" msgstr "" -#: replication/logical/worker.c:1647 +#: replication/logical/worker.c:2006 #, c-format msgid "" "logical replication apply worker for subscription %u will not start because " "the subscription was removed during startup" msgstr "" -#: replication/logical/worker.c:1659 +#: replication/logical/worker.c:2018 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will not start " "because the subscription was disabled during startup" msgstr "" -#: replication/logical/worker.c:1677 +#: replication/logical/worker.c:2036 #, c-format msgid "" "logical replication table synchronization worker for subscription \"%s\", " "table \"%s\" has started" msgstr "" -#: replication/logical/worker.c:1681 +#: replication/logical/worker.c:2040 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "" -#: replication/logical/worker.c:1720 +#: replication/logical/worker.c:2079 #, c-format msgid "subscription has no replication slot set" msgstr "" -#: replication/pgoutput/pgoutput.c:117 +#: replication/pgoutput/pgoutput.c:147 #, c-format msgid "invalid proto_version" msgstr "잘못된 proto_version" -#: replication/pgoutput/pgoutput.c:122 +#: replication/pgoutput/pgoutput.c:152 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_verson \"%s\" 범위 벗어남" -#: replication/pgoutput/pgoutput.c:139 +#: replication/pgoutput/pgoutput.c:169 #, c-format msgid "invalid publication_names syntax" msgstr "잘못된 publication_names 구문" -#: replication/pgoutput/pgoutput.c:181 +#: replication/pgoutput/pgoutput.c:211 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "" -#: replication/pgoutput/pgoutput.c:187 +#: replication/pgoutput/pgoutput.c:217 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "" -#: replication/pgoutput/pgoutput.c:193 +#: replication/pgoutput/pgoutput.c:223 #, c-format msgid "publication_names parameter missing" msgstr "publication_names 매개 변수가 빠졌음" -#: replication/slot.c:182 +#: replication/slot.c:183 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "\"%s\" 복제 슬롯 이름이 너무 짧음" -#: replication/slot.c:191 +#: replication/slot.c:192 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "\"%s\" 복제 슬롯 이름이 너무 긺" -#: replication/slot.c:204 +#: replication/slot.c:205 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "\"%s\" 복제 슬롯 이름에 사용할 수 없는 문자가 있음" -#: replication/slot.c:206 +#: replication/slot.c:207 #, c-format msgid "" "Replication slot names may only contain lower case letters, numbers, and the " @@ -19314,136 +19822,161 @@ msgstr "" "복제 슬롯 이름으로 사용할 수 있는 문자는 영문 소문자, 숫자, 밑줄(_) 문자입니" "다." -#: replication/slot.c:253 +#: replication/slot.c:254 #, c-format msgid "replication slot \"%s\" already exists" msgstr "\"%s\" 이름의 복제 슬롯이 이미 있습니다." -#: replication/slot.c:263 +#: replication/slot.c:264 #, c-format msgid "all replication slots are in use" msgstr "모든 복제 슬롯이 사용 중입니다." -#: replication/slot.c:264 +#: replication/slot.c:265 #, c-format msgid "Free one or increase max_replication_slots." msgstr "하나를 비우든지, max_replication_slots 설정값을 늘리세요." -#: replication/slot.c:387 replication/slotfuncs.c:662 +#: replication/slot.c:407 replication/slotfuncs.c:760 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "\"%s\" 이름의 복제 슬롯이 없습니다" -#: replication/slot.c:398 replication/slot.c:947 +#: replication/slot.c:445 replication/slot.c:1006 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "\"%s\" 이름의 복제 슬롯을 %d PID 프로세스가 사용중입니다." -#: replication/slot.c:631 replication/slot.c:1139 replication/slot.c:1502 +#: replication/slot.c:683 replication/slot.c:1314 replication/slot.c:1697 #, c-format msgid "could not remove directory \"%s\"" msgstr "\"%s\" 디렉터리를 삭제할 수 없음" -#: replication/slot.c:982 +#: replication/slot.c:1041 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "복제 슬롯은 max_replication_slots > 0 상태에서 사용될 수 있습니다." -#: replication/slot.c:987 +#: replication/slot.c:1046 +#, c-format +msgid "replication slots can only be used if wal_level >= replica" +msgstr "복제 슬롯은 wal_level >= replica 상태에서 사용될 수 있습니다." + +#: replication/slot.c:1202 +#, c-format +msgid "" +"terminating process %d because replication slot \"%s\" is too far behind" +msgstr "%d번 프로세스를 중지합니다. \"%s\" 복제 슬롯이 너무 옛날 것입니다." + +#: replication/slot.c:1221 #, c-format -msgid "replication slots can only be used if wal_level >= replica" -msgstr "복제 슬롯은 wal_level >= replica 상태에서 사용될 수 있습니다." +msgid "" +"invalidating slot \"%s\" because its restart_lsn %X/%X exceeds " +"max_slot_wal_keep_size" +msgstr "" +"\"%s\" 슬롯이 바르지 않음. %X/%X restart_lsn 값이 " +"max_slot_wal_keep_size 값을 초과했음" -#: replication/slot.c:1440 +#: replication/slot.c:1635 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "\"%s\" 복제 슬롯 파일의 매직 번호가 이상합니다: 현재값 %u, 기대값 %u" -#: replication/slot.c:1447 +#: replication/slot.c:1642 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "\"%s\" 복제 슬롯 파일은 지원하지 않는 %u 버전 파일입니다" -#: replication/slot.c:1454 +#: replication/slot.c:1649 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "\"%s\" 복제 슬롯 파일이 %u 길이로 손상되었습니다." -#: replication/slot.c:1490 +#: replication/slot.c:1685 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "\"%s\" 복제 슬롯 파일의 체크섬 값이 이상합니다: 현재값 %u, 기대값 %u" -#: replication/slot.c:1524 +#: replication/slot.c:1719 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "\"%s\" 논리 복제 슬롯이 있지만, wal_level < logical" -#: replication/slot.c:1526 +#: replication/slot.c:1721 #, c-format msgid "Change wal_level to be logical or higher." msgstr "" -#: replication/slot.c:1530 +#: replication/slot.c:1725 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "\"%s\" 물리 복제 슬롯이 있지만, wal_level < replica " -#: replication/slot.c:1532 +#: replication/slot.c:1727 #, c-format msgid "Change wal_level to be replica or higher." msgstr "" -#: replication/slot.c:1566 +#: replication/slot.c:1761 #, c-format msgid "too many replication slots active before shutdown" msgstr "서버 중지 전에 너무 많은 복제 슬롯이 활성화 상태입니다" -#: replication/slotfuncs.c:534 +#: replication/slotfuncs.c:624 #, c-format msgid "invalid target WAL LSN" msgstr "잘못된 대상 WAL LSN" -#: replication/slotfuncs.c:556 +#: replication/slotfuncs.c:646 #, c-format -msgid "cannot advance replication slot that has not previously reserved WAL" -msgstr "" +msgid "replication slot \"%s\" cannot be advanced" +msgstr "\"%s\" 이름의 복제 슬롯은 사용할 수 없음" -#: replication/slotfuncs.c:572 +#: replication/slotfuncs.c:664 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "" -#: replication/slotfuncs.c:669 +#: replication/slotfuncs.c:772 #, c-format msgid "" "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "물리 복제 슬롯(\"%s\")을 논리 복제 슬롯으로 복사할 수 없음" -#: replication/slotfuncs.c:671 +#: replication/slotfuncs.c:774 #, c-format msgid "" "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "논리 복제 슬롯(\"%s\")을 물리 복제 슬롯으로 복사할 수 없음" -#: replication/slotfuncs.c:680 +#: replication/slotfuncs.c:781 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "WAL을 확보하지 않은 복제 슬롯은 복사할 수 없음" -#: replication/slotfuncs.c:745 +#: replication/slotfuncs.c:857 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "\"%s\" 복제 슬롯을 복사할 수 없음" -#: replication/slotfuncs.c:747 +#: replication/slotfuncs.c:859 #, c-format msgid "" "The source replication slot was modified incompatibly during the copy " "operation." msgstr "" -#: replication/syncrep.c:248 +#: replication/slotfuncs.c:865 +#, c-format +msgid "cannot copy unfinished logical replication slot \"%s\"" +msgstr "논리 복제가 끝나지 않은 \"%s\" 슬롯은 복사할 수 없음" + +#: replication/slotfuncs.c:867 +#, c-format +msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." +msgstr "" + +#: replication/syncrep.c:257 #, c-format msgid "" "canceling the wait for synchronous replication and terminating connection " @@ -19451,7 +19984,7 @@ msgid "" msgstr "" "관리자 명령에 의해 동기식 복제의 대기 작업과 접속 끊기 작업을 취소합니다." -#: replication/syncrep.c:249 replication/syncrep.c:266 +#: replication/syncrep.c:258 replication/syncrep.c:275 #, c-format msgid "" "The transaction has already committed locally, but might not have been " @@ -19460,139 +19993,144 @@ msgstr "" "주 서버에서는 이 트랜잭션이 커밋되었지만, 복제용 대기 서버에서는 아직 커밋 되" "지 않았을 가능성이 있습니다." -#: replication/syncrep.c:265 +#: replication/syncrep.c:274 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "사용자 요청에 의해 동기식 복제 작업을 취소합니다." -#: replication/syncrep.c:406 +#: replication/syncrep.c:416 #, c-format msgid "standby \"%s\" now has synchronous standby priority %u" msgstr "\"%s\" 대기 서버의 동기식 복제 우선순위가 %u 입니다" -#: replication/syncrep.c:469 +#: replication/syncrep.c:483 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "\"%s\" 대기 서버의 동기식 복제 우선순위가 %u 로 변경되었습니다." -#: replication/syncrep.c:473 +#: replication/syncrep.c:487 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "\"%s\" 대기 서버가 동기식 대기 서버 후보가 되었습니다" -#: replication/syncrep.c:1173 +#: replication/syncrep.c:1034 #, c-format msgid "synchronous_standby_names parser failed" msgstr "synchronous_standby_names 값을 분석할 수 없음" -#: replication/syncrep.c:1179 +#: replication/syncrep.c:1040 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "동기식 대기 서버 수 (%d)는 0보다 커야 합니다." -#: replication/walreceiver.c:160 +#: replication/walreceiver.c:171 #, c-format msgid "terminating walreceiver process due to administrator command" msgstr "관리자 명령으로 인해 WAL 수신기를 종료합니다." -#: replication/walreceiver.c:276 +#: replication/walreceiver.c:297 #, c-format msgid "could not connect to the primary server: %s" msgstr "주 서버에 연결 할 수 없음: %s" -#: replication/walreceiver.c:322 +#: replication/walreceiver.c:343 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "데이터베이스 시스템 식별번호가 주 서버와 대기 서버가 서로 다름" -#: replication/walreceiver.c:323 +#: replication/walreceiver.c:344 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "주 서버: %s, 대기 서버: %s." -#: replication/walreceiver.c:333 +#: replication/walreceiver.c:354 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "" "주 서버의 제일 최신의 타임라인은 %u 인데, 복구 타임라인 %u 보다 옛것입니다" -#: replication/walreceiver.c:369 +#: replication/walreceiver.c:408 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "주 서버의 WAL 스트리밍 시작 위치: %X/%X (타임라인 %u)" -#: replication/walreceiver.c:374 +#: replication/walreceiver.c:413 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "WAL 스트리밍 재시작 위치: %X/%X (타임라인 %u)" -#: replication/walreceiver.c:403 +#: replication/walreceiver.c:442 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "WAL 스트리밍 계속할 수 없음, 복구가 이미 종료됨" -#: replication/walreceiver.c:440 +#: replication/walreceiver.c:479 #, c-format msgid "replication terminated by primary server" msgstr "주 서버에 의해서 복제가 끝남" -#: replication/walreceiver.c:441 +#: replication/walreceiver.c:480 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "타임라인 %u, 위치 %X/%X 에서 WAL 끝에 도달함" -#: replication/walreceiver.c:529 +#: replication/walreceiver.c:568 #, c-format msgid "terminating walreceiver due to timeout" msgstr "시간 제한으로 wal 수신기를 중지합니다." -#: replication/walreceiver.c:567 +#: replication/walreceiver.c:606 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "주 서버에는 요청 받은 %u 타임라인의 WAL가 더 이상 없습니다." -#: replication/walreceiver.c:582 replication/walreceiver.c:922 +#: replication/walreceiver.c:622 replication/walreceiver.c:938 #, c-format msgid "could not close log segment %s: %m" msgstr "%s 로그 조각 파일을 닫을 수 없음: %m" -#: replication/walreceiver.c:700 +#: replication/walreceiver.c:742 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "주 서버에서 %u 타임라인용 타임라인 내역 파일을 가져옵니다." -#: replication/walreceiver.c:976 +#: replication/walreceiver.c:985 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "%s 로그 조각 파일 쓰기 실패: 위치 %u, 길이 %lu: %m" -#: replication/walsender.c:497 +#: replication/walsender.c:523 storage/smgr/md.c:1291 +#, c-format +msgid "could not seek to end of file \"%s\": %m" +msgstr "\"%s\" 파일의 끝을 찾을 수 없음: %m" + +#: replication/walsender.c:527 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "\"%s\" 파일에서 시작 위치를 찾을 수 없음: %m" -#: replication/walsender.c:548 +#: replication/walsender.c:578 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "" -#: replication/walsender.c:565 +#: replication/walsender.c:607 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "물리적 복제에서 논리적 복제 슬롯을 사용할 수 없음" -#: replication/walsender.c:628 +#: replication/walsender.c:676 #, c-format msgid "" "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "요청된 %X/%X 시작 위치(타임라인 %u)가 이 서버 내역에 없습니다." -#: replication/walsender.c:632 +#: replication/walsender.c:680 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "이 서버의 시작 위치: 타임라인 %u, 위치 %X/%X" -#: replication/walsender.c:677 +#: replication/walsender.c:725 #, c-format msgid "" "requested starting point %X/%X is ahead of the WAL flush position of this " @@ -19600,53 +20138,64 @@ msgid "" msgstr "" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:907 +#: replication/walsender.c:976 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s 명령은 트랜잭션 블럭안에서 실행할 수 없음" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:917 +#: replication/walsender.c:986 #, c-format msgid "%s must be called inside a transaction" msgstr "%s 명령은 트랜잭션 블럭안에서 실행할 수 있음" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:923 +#: replication/walsender.c:992 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s 구문은 격리 수준이 REPEATABLE READ 일때만 사용할 수 있습니다." #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:929 +#: replication/walsender.c:998 #, c-format msgid "%s must be called before any query" msgstr "어떤 쿼리보다 먼저 %s 명령을 호출해야 함" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:935 +#: replication/walsender.c:1004 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s 명령은 서브트랜잭션 블럭안에서 실행할 수 없음" -#: replication/walsender.c:1082 +#: replication/walsender.c:1148 +#, c-format +msgid "cannot read from logical replication slot \"%s\"" +msgstr "\"%s\" 논리 복제 슬롯에서 읽기 실패" + +#: replication/walsender.c:1150 +#, c-format +msgid "" +"This slot has been invalidated because it exceeded the maximum reserved size." +msgstr "" + +#: replication/walsender.c:1160 #, c-format msgid "terminating walsender process after promotion" msgstr "운영전환 뒤 wal 송신기 프로세스를 중지합니다." -#: replication/walsender.c:1453 +#: replication/walsender.c:1534 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "" -#: replication/walsender.c:1486 +#: replication/walsender.c:1567 #, c-format msgid "received replication command: %s" msgstr "수신된 복제 명령: %s" -#: replication/walsender.c:1502 tcop/fastpath.c:279 tcop/postgres.c:1103 -#: tcop/postgres.c:1426 tcop/postgres.c:1684 tcop/postgres.c:2077 -#: tcop/postgres.c:2450 tcop/postgres.c:2529 +#: replication/walsender.c:1583 tcop/fastpath.c:279 tcop/postgres.c:1103 +#: tcop/postgres.c:1455 tcop/postgres.c:1716 tcop/postgres.c:2174 +#: tcop/postgres.c:2535 tcop/postgres.c:2614 #, c-format msgid "" "current transaction is aborted, commands ignored until end of transaction " @@ -19655,46 +20204,41 @@ msgstr "" "현재 트랜잭션은 중지되어 있습니다. 이 트랜잭션을 종료하기 전까지는 모든 명령" "이 무시될 것입니다" -#: replication/walsender.c:1570 +#: replication/walsender.c:1669 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "물리적 복제를 위한 WAL 송신기에서 SQL 명령을 실행할 수 없음" -#: replication/walsender.c:1618 replication/walsender.c:1634 +#: replication/walsender.c:1714 replication/walsender.c:1730 #, c-format msgid "unexpected EOF on standby connection" msgstr "대기 서버 연결에서 예상치 못한 EOF 발견함" -#: replication/walsender.c:1648 +#: replication/walsender.c:1744 #, c-format msgid "unexpected standby message type \"%c\", after receiving CopyDone" msgstr "" -#: replication/walsender.c:1686 +#: replication/walsender.c:1782 #, c-format msgid "invalid standby message type \"%c\"" msgstr "잘못된 대기 서버 메시지 형태 \"%c\"" -#: replication/walsender.c:1727 +#: replication/walsender.c:1823 #, c-format msgid "unexpected message type \"%c\"" msgstr "예상치 못한 메시지 형태: \"%c\"" -#: replication/walsender.c:2145 +#: replication/walsender.c:2241 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "복제 시간 제한으로 wal 송신기 프로세스를 종료합니다." -#: replication/walsender.c:2222 +#: replication/walsender.c:2318 #, c-format msgid "\"%s\" has now caught up with upstream server" msgstr "\"%s\" 프로세스가 로그 전달 받을 서버와 접속했음" -#: replication/walsender.c:2481 -#, c-format -msgid "could not read from log segment %s, offset %u, length %zu: %m" -msgstr "%s 로그 조각 읽기 실패, 위치 %u, 길이 %zu: %m" - #: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:989 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" @@ -19922,156 +20466,156 @@ msgstr "" msgid "cannot have RETURNING lists in multiple rules" msgstr "multiple rule에 RETURNING 목록을 지정할 수 없습니다" -#: rewrite/rewriteHandler.c:814 rewrite/rewriteHandler.c:826 +#: rewrite/rewriteHandler.c:816 rewrite/rewriteHandler.c:828 #, c-format msgid "cannot insert into column \"%s\"" msgstr "\"%s\" 칼럼에 자료를 입력할 수 없습니다" -#: rewrite/rewriteHandler.c:815 rewrite/rewriteHandler.c:837 +#: rewrite/rewriteHandler.c:817 rewrite/rewriteHandler.c:839 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "" -#: rewrite/rewriteHandler.c:817 +#: rewrite/rewriteHandler.c:819 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "" -#: rewrite/rewriteHandler.c:836 rewrite/rewriteHandler.c:843 +#: rewrite/rewriteHandler.c:838 rewrite/rewriteHandler.c:845 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "\"%s\" 칼럼은 DEFAULT 로만 업데이트 가능합니다" -#: rewrite/rewriteHandler.c:1012 rewrite/rewriteHandler.c:1030 +#: rewrite/rewriteHandler.c:1014 rewrite/rewriteHandler.c:1032 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "같은 \"%s\" 열에 지정값(assignment)이 중복되었습니다" -#: rewrite/rewriteHandler.c:2060 +#: rewrite/rewriteHandler.c:2062 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "\"%s\" 릴레이션의 정책에서 무한 재귀 호출이 발견 됨" -#: rewrite/rewriteHandler.c:2380 +#: rewrite/rewriteHandler.c:2382 msgid "Junk view columns are not updatable." msgstr "정크 뷰 칼럼은 업데이트할 수 없습니다." -#: rewrite/rewriteHandler.c:2385 +#: rewrite/rewriteHandler.c:2387 msgid "" "View columns that are not columns of their base relation are not updatable." msgstr "" -#: rewrite/rewriteHandler.c:2388 +#: rewrite/rewriteHandler.c:2390 msgid "View columns that refer to system columns are not updatable." msgstr "" -#: rewrite/rewriteHandler.c:2391 +#: rewrite/rewriteHandler.c:2393 msgid "View columns that return whole-row references are not updatable." msgstr "" -#: rewrite/rewriteHandler.c:2452 +#: rewrite/rewriteHandler.c:2454 msgid "Views containing DISTINCT are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2455 +#: rewrite/rewriteHandler.c:2457 msgid "Views containing GROUP BY are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2458 +#: rewrite/rewriteHandler.c:2460 msgid "Views containing HAVING are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2461 +#: rewrite/rewriteHandler.c:2463 msgid "" "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2464 +#: rewrite/rewriteHandler.c:2466 msgid "Views containing WITH are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2467 +#: rewrite/rewriteHandler.c:2469 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2479 +#: rewrite/rewriteHandler.c:2481 msgid "Views that return aggregate functions are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2482 +#: rewrite/rewriteHandler.c:2484 msgid "Views that return window functions are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2485 +#: rewrite/rewriteHandler.c:2487 msgid "" "Views that return set-returning functions are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2492 rewrite/rewriteHandler.c:2496 -#: rewrite/rewriteHandler.c:2504 +#: rewrite/rewriteHandler.c:2494 rewrite/rewriteHandler.c:2498 +#: rewrite/rewriteHandler.c:2506 msgid "" "Views that do not select from a single table or view are not automatically " "updatable." msgstr "" -#: rewrite/rewriteHandler.c:2507 +#: rewrite/rewriteHandler.c:2509 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2531 +#: rewrite/rewriteHandler.c:2533 msgid "Views that have no updatable columns are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:3008 +#: rewrite/rewriteHandler.c:3010 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "\"%s\" 칼럼 (해당 뷰: \"%s\")에 자료를 입력할 수 없습니다" -#: rewrite/rewriteHandler.c:3016 +#: rewrite/rewriteHandler.c:3018 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "\"%s\" 칼럼 (해당 뷰: \"%s\")에 자료를 갱신할 수 없습니다" -#: rewrite/rewriteHandler.c:3492 +#: rewrite/rewriteHandler.c:3496 #, c-format msgid "" "DO INSTEAD NOTHING rules are not supported for data-modifying statements in " "WITH" msgstr "" -#: rewrite/rewriteHandler.c:3506 +#: rewrite/rewriteHandler.c:3510 #, c-format msgid "" "conditional DO INSTEAD rules are not supported for data-modifying statements " "in WITH" msgstr "" -#: rewrite/rewriteHandler.c:3510 +#: rewrite/rewriteHandler.c:3514 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "" -#: rewrite/rewriteHandler.c:3515 +#: rewrite/rewriteHandler.c:3519 #, c-format msgid "" "multi-statement DO INSTEAD rules are not supported for data-modifying " "statements in WITH" msgstr "" -#: rewrite/rewriteHandler.c:3706 rewrite/rewriteHandler.c:3714 -#: rewrite/rewriteHandler.c:3722 +#: rewrite/rewriteHandler.c:3710 rewrite/rewriteHandler.c:3718 +#: rewrite/rewriteHandler.c:3726 #, c-format msgid "" "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "" "선택적 DO INSTEAD 룰을 포함한 뷰는 자동 업데이트 기능을 사용할 수 없습니다." -#: rewrite/rewriteHandler.c:3815 +#: rewrite/rewriteHandler.c:3819 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "\"%s\" 릴레이션에서 INSERT RETURNING 관련을 구성할 수 없음" -#: rewrite/rewriteHandler.c:3817 +#: rewrite/rewriteHandler.c:3821 #, c-format msgid "" "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." @@ -20079,12 +20623,12 @@ msgstr "" "RETURNING 절에서는 무조건 ON INSERT DO INSTEAD 속성으로 rule이 사용되어야합니" "다." -#: rewrite/rewriteHandler.c:3822 +#: rewrite/rewriteHandler.c:3826 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "\"%s\" 릴레이션에서 UPDATE RETURNING 관련을 구성할 수 없습니다." -#: rewrite/rewriteHandler.c:3824 +#: rewrite/rewriteHandler.c:3828 #, c-format msgid "" "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." @@ -20092,149 +20636,146 @@ msgstr "" "RETURNING 절에서는 무조건 ON UPDATE DO INSTEAD 속성으로 rule이 사용되어야합니" "다." -#: rewrite/rewriteHandler.c:3829 +#: rewrite/rewriteHandler.c:3833 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "\"%s\" 릴레이션에서 DELETE RETURNING 관련을 구성할 수 없습니다." -#: rewrite/rewriteHandler.c:3831 +#: rewrite/rewriteHandler.c:3835 #, c-format msgid "" "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "" "TURNING 절에서는 무조건 ON DELETE DO INSTEAD 속성으로 rule이 사용되어야합니다" -#: rewrite/rewriteHandler.c:3849 +#: rewrite/rewriteHandler.c:3853 #, c-format msgid "" "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or " "UPDATE rules" msgstr "" -#: rewrite/rewriteHandler.c:3906 +#: rewrite/rewriteHandler.c:3910 #, c-format msgid "" "WITH cannot be used in a query that is rewritten by rules into multiple " "queries" msgstr "" -#: rewrite/rewriteManip.c:1003 +#: rewrite/rewriteManip.c:1006 #, c-format msgid "conditional utility statements are not implemented" msgstr "" "조건 유틸리티 명령 구문(conditional utility statement)은 구현되어있지 않습니" "다" -#: rewrite/rewriteManip.c:1169 +#: rewrite/rewriteManip.c:1172 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "뷰에 대한 WHERE CURRENT OF 구문이 구현되지 않음" -#: rewrite/rewriteManip.c:1503 +#: rewrite/rewriteManip.c:1507 #, c-format msgid "" "NEW variables in ON UPDATE rules cannot reference columns that are part of a " "multiple assignment in the subject UPDATE command" msgstr "" -#: snowball/dict_snowball.c:197 +#: snowball/dict_snowball.c:199 #, c-format msgid "no Snowball stemmer available for language \"%s\" and encoding \"%s\"" msgstr "\"%s\" 언어 및 \"%s\" 인코딩에 사용 가능한 Snowball stemmer가 없음" -#: snowball/dict_snowball.c:220 tsearch/dict_ispell.c:74 +#: snowball/dict_snowball.c:222 tsearch/dict_ispell.c:74 #: tsearch/dict_simple.c:49 #, c-format msgid "multiple StopWords parameters" msgstr "StopWords 매개 변수가 여러 개 있음" -#: snowball/dict_snowball.c:229 +#: snowball/dict_snowball.c:231 #, c-format msgid "multiple Language parameters" msgstr "여러 개의 언어 매개 변수가 있음" -#: snowball/dict_snowball.c:236 +#: snowball/dict_snowball.c:238 #, c-format msgid "unrecognized Snowball parameter: \"%s\"" msgstr "인식할 수 없는 Snowball 매개 변수: \"%s\"" -#: snowball/dict_snowball.c:244 +#: snowball/dict_snowball.c:246 #, c-format msgid "missing Language parameter" msgstr "Language 매개 변수가 누락됨" -#: statistics/dependencies.c:674 statistics/dependencies.c:727 -#: statistics/mcv.c:1477 statistics/mcv.c:1508 statistics/mvdistinct.c:349 -#: statistics/mvdistinct.c:402 utils/adt/pseudotypes.c:94 -#: utils/adt/pseudotypes.c:122 utils/adt/pseudotypes.c:147 -#: utils/adt/pseudotypes.c:171 utils/adt/pseudotypes.c:282 -#: utils/adt/pseudotypes.c:307 utils/adt/pseudotypes.c:335 -#: utils/adt/pseudotypes.c:363 utils/adt/pseudotypes.c:393 +#: statistics/dependencies.c:667 statistics/dependencies.c:720 +#: statistics/mcv.c:1477 statistics/mcv.c:1508 statistics/mvdistinct.c:348 +#: statistics/mvdistinct.c:401 utils/adt/pseudotypes.c:42 +#: utils/adt/pseudotypes.c:76 #, c-format msgid "cannot accept a value of type %s" msgstr "%s 형식의 값은 사용할 수 없음" -#: statistics/extended_stats.c:121 +#: statistics/extended_stats.c:145 #, c-format msgid "" "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "\"%s.%s\" 통계정보 개체를 계산 할 수 없음: 대상 릴레이션: \"%s.%s\"" -#: statistics/mcv.c:1366 utils/adt/jsonfuncs.c:1708 +#: statistics/mcv.c:1365 utils/adt/jsonfuncs.c:1800 #, c-format msgid "" "function returning record called in context that cannot accept type record" msgstr "반환 자료형이 record인데 함수가 그 자료형으로 반환하지 않음" -#: storage/buffer/bufmgr.c:545 storage/buffer/bufmgr.c:658 +#: storage/buffer/bufmgr.c:588 storage/buffer/bufmgr.c:669 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "다른 세션의 임시 테이블에 액세스할 수 없음" -#: storage/buffer/bufmgr.c:814 +#: storage/buffer/bufmgr.c:825 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "%u 블록(해당 릴레이션: %s)에 EOF 범위를 넘는 예기치 않은 데이터가 있음" -#: storage/buffer/bufmgr.c:816 +#: storage/buffer/bufmgr.c:827 #, c-format msgid "" "This has been seen to occur with buggy kernels; consider updating your " "system." msgstr "이 문제는 커널의 문제로 알려졌습니다. 시스템을 업데이트하십시오." -#: storage/buffer/bufmgr.c:914 +#: storage/buffer/bufmgr.c:925 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "" "%u 블록(해당 릴레이션: %s)에 잘못된 페이지 헤더가 있음, 페이지를 삭제하는 중" -#: storage/buffer/bufmgr.c:4056 +#: storage/buffer/bufmgr.c:4211 #, c-format msgid "could not write block %u of %s" msgstr "%u/%s 블록을 쓸 수 없음" -#: storage/buffer/bufmgr.c:4058 +#: storage/buffer/bufmgr.c:4213 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "여러 번 실패 --- 쓰기 오류가 영구적일 수 있습니다." -#: storage/buffer/bufmgr.c:4079 storage/buffer/bufmgr.c:4098 +#: storage/buffer/bufmgr.c:4234 storage/buffer/bufmgr.c:4253 #, c-format msgid "writing block %u of relation %s" msgstr "%u 블록(해당 릴레이션: %s)을 쓰는 중" -#: storage/buffer/bufmgr.c:4401 +#: storage/buffer/bufmgr.c:4556 #, c-format msgid "snapshot too old" msgstr "" -#: storage/buffer/localbuf.c:199 +#: storage/buffer/localbuf.c:205 #, c-format msgid "no empty local buffer available" msgstr "비어 있는 로컬 버퍼가 없습니다" -#: storage/buffer/localbuf.c:427 +#: storage/buffer/localbuf.c:433 #, c-format msgid "cannot access temporary tables during a parallel operation" msgstr "병렬 작업 중에 임시 테이블에 액세스할 수 없음" @@ -20244,38 +20785,38 @@ msgstr "병렬 작업 중에 임시 테이블에 액세스할 수 없음" msgid "could not open temporary file \"%s\" from BufFile \"%s\": %m" msgstr "\"%s\" 임시 파일을 열 수 없음, 버퍼파일: \"%s\": %m" -#: storage/file/buffile.c:796 +#: storage/file/buffile.c:795 #, c-format msgid "" "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" msgstr "\"%s\" 임시 파일의 크기를 알 수 없음, 버퍼파일: \"%s\": %m" -#: storage/file/fd.c:458 storage/file/fd.c:530 storage/file/fd.c:566 +#: storage/file/fd.c:508 storage/file/fd.c:580 storage/file/fd.c:616 #, c-format msgid "could not flush dirty data: %m" msgstr "dirty 자료를 flush 할 수 없음: %m" -#: storage/file/fd.c:488 +#: storage/file/fd.c:538 #, c-format msgid "could not determine dirty data size: %m" msgstr "dirty 자료 크기를 확인할 수 없음: %m" -#: storage/file/fd.c:540 +#: storage/file/fd.c:590 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "자료 flush 작업 도중 munmap() 호출 실패: %m" -#: storage/file/fd.c:748 +#: storage/file/fd.c:798 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "\"%s\" 파일을 \"%s\" 파일로 링크할 수 없음: %m" -#: storage/file/fd.c:842 +#: storage/file/fd.c:881 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit 실패: %m" -#: storage/file/fd.c:932 +#: storage/file/fd.c:971 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "" @@ -20283,176 +20824,196 @@ msgstr "" "그램에서 너무 많은 파일을 열어 두고 있습니다. 다른 프로그램들을 좀 닫고 다시 " "시도해 보십시오" -#: storage/file/fd.c:933 +#: storage/file/fd.c:972 #, c-format msgid "System allows %d, we need at least %d." msgstr "시스템 허용치 %d, 서버 최소 허용치 %d." -#: storage/file/fd.c:984 storage/file/fd.c:2246 storage/file/fd.c:2356 -#: storage/file/fd.c:2507 +#: storage/file/fd.c:1023 storage/file/fd.c:2357 storage/file/fd.c:2467 +#: storage/file/fd.c:2618 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "" "열려 있는 파일이 너무 많습니다: %m; 다른 프로그램들을 좀 닫고 다시 시도해 보" "십시오" -#: storage/file/fd.c:1284 +#: storage/file/fd.c:1397 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "임시 파일: 경로 \"%s\", 크기 %lu" -#: storage/file/fd.c:1415 +#: storage/file/fd.c:1528 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "\"%s\" 임시 디렉터리를 만들 수 없음: %m" -#: storage/file/fd.c:1422 +#: storage/file/fd.c:1535 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "\"%s\" 임시 하위 디렉터리를 만들 수 없음: %m" -#: storage/file/fd.c:1615 +#: storage/file/fd.c:1728 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "\"%s\" 임시 파일을 만들 수 없습니다: %m" -#: storage/file/fd.c:1650 +#: storage/file/fd.c:1763 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "\"%s\" 임시 파일을 열 수 없음: %m" -#: storage/file/fd.c:1691 +#: storage/file/fd.c:1804 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "\"%s\" 임시 파일을 지울 수 없음: %m" -#: storage/file/fd.c:1955 +#: storage/file/fd.c:2068 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "임시 파일 크기가 temp_file_limit (%dkB)를 초과했습니다" -#: storage/file/fd.c:2222 storage/file/fd.c:2281 +#: storage/file/fd.c:2333 storage/file/fd.c:2392 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "" -#: storage/file/fd.c:2326 +#: storage/file/fd.c:2437 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "" -#: storage/file/fd.c:2483 +#: storage/file/fd.c:2594 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "" -#: storage/file/fd.c:3006 +#: storage/file/fd.c:3122 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "임시 디렉터리에서 예상치 못한 파일 발견: \"%s\"" -#: storage/file/sharedfileset.c:95 +#: storage/file/sharedfileset.c:111 #, c-format msgid "could not attach to a SharedFileSet that is already destroyed" msgstr "SharedFileSet 확보 실패, 이미 삭제되었음" -#: storage/ipc/dsm.c:343 +#: storage/ipc/dsm.c:338 #, c-format msgid "dynamic shared memory control segment is corrupt" msgstr "동적 공유 메모리 제어 조각이 손상되었음" -#: storage/ipc/dsm.c:404 +#: storage/ipc/dsm.c:399 #, c-format msgid "dynamic shared memory control segment is not valid" msgstr "동적 공유 메모리 제어 조각이 타당하지 않음" -#: storage/ipc/dsm.c:499 +#: storage/ipc/dsm.c:494 #, c-format msgid "too many dynamic shared memory segments" msgstr "너무 많은 동적 공유 메모리 조각이 있음" -#: storage/ipc/dsm_impl.c:230 storage/ipc/dsm_impl.c:517 -#: storage/ipc/dsm_impl.c:621 storage/ipc/dsm_impl.c:792 +#: storage/ipc/dsm_impl.c:230 storage/ipc/dsm_impl.c:526 +#: storage/ipc/dsm_impl.c:630 storage/ipc/dsm_impl.c:801 #, c-format msgid "could not unmap shared memory segment \"%s\": %m" msgstr "\"%s\" 공유 메모리 조각을 unmap 할 수 없음: %m" -#: storage/ipc/dsm_impl.c:240 storage/ipc/dsm_impl.c:527 -#: storage/ipc/dsm_impl.c:631 storage/ipc/dsm_impl.c:802 +#: storage/ipc/dsm_impl.c:240 storage/ipc/dsm_impl.c:536 +#: storage/ipc/dsm_impl.c:640 storage/ipc/dsm_impl.c:811 #, c-format msgid "could not remove shared memory segment \"%s\": %m" msgstr "\"%s\" 공유 메모리 조각을 삭제할 수 없음: %m" -#: storage/ipc/dsm_impl.c:261 storage/ipc/dsm_impl.c:702 -#: storage/ipc/dsm_impl.c:816 +#: storage/ipc/dsm_impl.c:264 storage/ipc/dsm_impl.c:711 +#: storage/ipc/dsm_impl.c:825 #, c-format msgid "could not open shared memory segment \"%s\": %m" msgstr "\"%s\" 공유 메모리 조각을 열 수 없음: %m" -#: storage/ipc/dsm_impl.c:285 storage/ipc/dsm_impl.c:543 -#: storage/ipc/dsm_impl.c:747 storage/ipc/dsm_impl.c:840 +#: storage/ipc/dsm_impl.c:289 storage/ipc/dsm_impl.c:552 +#: storage/ipc/dsm_impl.c:756 storage/ipc/dsm_impl.c:849 #, c-format msgid "could not stat shared memory segment \"%s\": %m" msgstr "\"%s\" 공유 메모리 조각 파일의 상태를 알 수 없음: %m" -#: storage/ipc/dsm_impl.c:311 storage/ipc/dsm_impl.c:891 +#: storage/ipc/dsm_impl.c:316 storage/ipc/dsm_impl.c:900 #, c-format msgid "could not resize shared memory segment \"%s\" to %zu bytes: %m" msgstr "\"%s\" 공유 메모리 조각 파일을 %zu 바이트로 크기 조절 할 수 없음: %m" -#: storage/ipc/dsm_impl.c:332 storage/ipc/dsm_impl.c:564 -#: storage/ipc/dsm_impl.c:723 storage/ipc/dsm_impl.c:913 +#: storage/ipc/dsm_impl.c:338 storage/ipc/dsm_impl.c:573 +#: storage/ipc/dsm_impl.c:732 storage/ipc/dsm_impl.c:922 #, c-format msgid "could not map shared memory segment \"%s\": %m" msgstr "\"%s\" 공유 메모리 조각을 map 할 수 없음: %m" -#: storage/ipc/dsm_impl.c:499 +#: storage/ipc/dsm_impl.c:508 #, c-format msgid "could not get shared memory segment: %m" msgstr "공유 메모리 조각을 가져올 수 없음: %m" -#: storage/ipc/dsm_impl.c:687 +#: storage/ipc/dsm_impl.c:696 #, c-format msgid "could not create shared memory segment \"%s\": %m" msgstr "\"%s\" 공유 메모리 조각을 만들 수 없음: %m" -#: storage/ipc/dsm_impl.c:924 +#: storage/ipc/dsm_impl.c:933 #, c-format msgid "could not close shared memory segment \"%s\": %m" msgstr "\"%s\" 공유 메모리 조각을 닫을 수 없음: %m" -#: storage/ipc/dsm_impl.c:963 storage/ipc/dsm_impl.c:1011 +#: storage/ipc/dsm_impl.c:972 storage/ipc/dsm_impl.c:1020 #, c-format msgid "could not duplicate handle for \"%s\": %m" msgstr "\"%s\" 용 헨들러를 이중화 할 수 없음: %m" #. translator: %s is a syscall name, such as "poll()" -#: storage/ipc/latch.c:860 storage/ipc/latch.c:1093 storage/ipc/latch.c:1219 +#: storage/ipc/latch.c:940 storage/ipc/latch.c:1094 storage/ipc/latch.c:1307 +#: storage/ipc/latch.c:1457 storage/ipc/latch.c:1570 #, c-format msgid "%s failed: %m" msgstr "%s 실패: %m" -#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:929 -#: storage/lmgr/lock.c:967 storage/lmgr/lock.c:2754 storage/lmgr/lock.c:4084 -#: storage/lmgr/lock.c:4149 storage/lmgr/lock.c:4441 -#: storage/lmgr/predicate.c:2404 storage/lmgr/predicate.c:2419 -#: storage/lmgr/predicate.c:3918 storage/lmgr/predicate.c:5075 -#: utils/hash/dynahash.c:1065 +#: storage/ipc/procarray.c:3014 +#, c-format +msgid "database \"%s\" is being used by prepared transactions" +msgstr "\"%s\" 데이터베이스가 미리 준비된 트랜잭션에서 사용중임" + +#: storage/ipc/procarray.c:3046 storage/ipc/signalfuncs.c:142 +#, c-format +msgid "must be a superuser to terminate superuser process" +msgstr "슈퍼유저의 세션을 정리하려면 슈퍼유저여야 합니다." + +#: storage/ipc/procarray.c:3053 storage/ipc/signalfuncs.c:147 +#, c-format +msgid "" +"must be a member of the role whose process is being terminated or member of " +"pg_signal_backend" +msgstr "" +"세션을 종료하려면 접속자의 소속 맴버이거나 pg_signal_backend 소속 맴버여야 합" +"니다" + +#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:982 +#: storage/lmgr/lock.c:1020 storage/lmgr/lock.c:2845 storage/lmgr/lock.c:4175 +#: storage/lmgr/lock.c:4240 storage/lmgr/lock.c:4532 +#: storage/lmgr/predicate.c:2401 storage/lmgr/predicate.c:2416 +#: storage/lmgr/predicate.c:3898 storage/lmgr/predicate.c:5009 +#: utils/hash/dynahash.c:1067 #, c-format msgid "out of shared memory" msgstr "공유 메모리 부족" -#: storage/ipc/shmem.c:165 storage/ipc/shmem.c:246 +#: storage/ipc/shmem.c:170 storage/ipc/shmem.c:266 #, c-format msgid "out of shared memory (%zu bytes requested)" msgstr "공유 메모리가 부족함 (%zu 바이트가 필요함)" -#: storage/ipc/shmem.c:421 +#: storage/ipc/shmem.c:441 #, c-format msgid "could not create ShmemIndex entry for data structure \"%s\"" msgstr "\"%s\" 자료 구조체용 ShmemIndex 항목을 만들 수 없음" -#: storage/ipc/shmem.c:436 +#: storage/ipc/shmem.c:456 #, c-format msgid "" "ShmemIndex entry size is wrong for data structure \"%s\": expected %zu, " @@ -20460,13 +21021,13 @@ msgid "" msgstr "" "\"%s\" 자료 구조체용 ShmemIndex 항목 크기가 잘못됨: 기대값 %zu, 현재값 %zu" -#: storage/ipc/shmem.c:453 +#: storage/ipc/shmem.c:475 #, c-format msgid "" "not enough shared memory for data structure \"%s\" (%zu bytes requested)" msgstr "\"%s\" 자료 구조체용 공유 메모리가 부족함 (%zu 바이트가 필요함)" -#: storage/ipc/shmem.c:484 storage/ipc/shmem.c:503 +#: storage/ipc/shmem.c:507 storage/ipc/shmem.c:526 #, c-format msgid "requested shared memory size overflows size_t" msgstr "지정한 공유 메모리 사이즈가 size_t 크기를 초과했습니다" @@ -20476,7 +21037,7 @@ msgstr "지정한 공유 메모리 사이즈가 size_t 크기를 초과했습니 msgid "PID %d is not a PostgreSQL server process" msgstr "PID %d 프로그램은 PostgreSQL 서버 프로세스가 아닙니다" -#: storage/ipc/signalfuncs.c:98 storage/lmgr/proc.c:1363 +#: storage/ipc/signalfuncs.c:98 storage/lmgr/proc.c:1366 #, c-format msgid "could not send signal to process %d: %m" msgstr "%d 프로세스로 시스템신호(signal)를 보낼 수 없습니다: %m" @@ -20495,20 +21056,6 @@ msgstr "" "쿼리 작업 취소하려면 작업자의 소속 맴버이거나 pg_signal_backend 소속 맴버여" "야 합니다" -#: storage/ipc/signalfuncs.c:142 -#, c-format -msgid "must be a superuser to terminate superuser process" -msgstr "슈퍼유저의 세션을 정리하려면 슈퍼유저여야 합니다." - -#: storage/ipc/signalfuncs.c:147 -#, c-format -msgid "" -"must be a member of the role whose process is being terminated or member of " -"pg_signal_backend" -msgstr "" -"세션을 종료하려면 접속자의 소속 맴버이거나 pg_signal_backend 소속 맴버여야 합" -"니다" - #: storage/ipc/signalfuncs.c:183 #, c-format msgid "must be superuser to rotate log files with adminpack 1.0" @@ -20516,7 +21063,7 @@ msgstr "" "adminpack 1.0 확장 모듈을 사용하면 로그 전환하려면 슈퍼유저여야 합니다." #. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:223 +#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:253 #, c-format msgid "Consider using %s, which is part of core, instead." msgstr "대신에 %s 내장 함수를 사용할 것을 권고합니다." @@ -20526,275 +21073,280 @@ msgstr "대신에 %s 내장 함수를 사용할 것을 권고합니다." msgid "rotation not possible because log collection not active" msgstr "로그 수집이 활성 상태가 아니므로 회전할 수 없음" -#: storage/ipc/standby.c:558 tcop/postgres.c:3110 +#: storage/ipc/standby.c:580 tcop/postgres.c:3177 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "복구 작업 중 충돌이 발생해 작업을 중지합니다." -#: storage/ipc/standby.c:559 tcop/postgres.c:2384 +#: storage/ipc/standby.c:581 tcop/postgres.c:2469 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "복구 작업 중 사용자 트랜잭션이 버퍼 데드락을 만들었습니다." -#: storage/large_object/inv_api.c:189 +#: storage/large_object/inv_api.c:191 #, c-format msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" msgstr "" -#: storage/large_object/inv_api.c:270 +#: storage/large_object/inv_api.c:272 #, c-format msgid "invalid flags for opening a large object: %d" msgstr "대형 개체를 열기 위한 플래그가 잘못 됨: %d" -#: storage/large_object/inv_api.c:460 +#: storage/large_object/inv_api.c:462 #, c-format msgid "invalid whence setting: %d" msgstr "" -#: storage/large_object/inv_api.c:632 +#: storage/large_object/inv_api.c:634 #, c-format msgid "invalid large object write request size: %d" msgstr "유효하지 않은 대형 개체의 쓰기 요청된 크기: %d" -#: storage/lmgr/deadlock.c:1115 +#: storage/lmgr/deadlock.c:1124 #, c-format msgid "Process %d waits for %s on %s; blocked by process %d." msgstr "" "%d 프로세스가 %s 상태로 지연되고 있음(해당 작업: %s); %d 프로세스에 의해 블록" "킹되었음" -#: storage/lmgr/deadlock.c:1134 +#: storage/lmgr/deadlock.c:1143 #, c-format msgid "Process %d: %s" msgstr "프로세스 %d: %s" -#: storage/lmgr/deadlock.c:1143 +#: storage/lmgr/deadlock.c:1152 #, c-format msgid "deadlock detected" msgstr "deadlock 발생했음" -#: storage/lmgr/deadlock.c:1146 +#: storage/lmgr/deadlock.c:1155 #, c-format msgid "See server log for query details." msgstr "쿼리 상세 정보는 서버 로그를 참조하십시오." -#: storage/lmgr/lmgr.c:815 +#: storage/lmgr/lmgr.c:830 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "%u,%u 튜플(해당 릴레이션 \"%s\")을 갱신하는 중에 발생" -#: storage/lmgr/lmgr.c:818 +#: storage/lmgr/lmgr.c:833 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "%u,%u 튜플(해당 릴레이션 \"%s\")을 삭제하는 중에 발생" -#: storage/lmgr/lmgr.c:821 +#: storage/lmgr/lmgr.c:836 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "%u,%u 튜플을 \"%s\" 릴레이션에서 잠그는 중에 발생" -#: storage/lmgr/lmgr.c:824 +#: storage/lmgr/lmgr.c:839 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "%u,%u 업데이트된 버전 튜플(해당 릴레이션 \"%s\")을 잠그는 중에 발생" -#: storage/lmgr/lmgr.c:827 +#: storage/lmgr/lmgr.c:842 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "%u,%u 튜플 인덱스(해당 릴레이션 \"%s\")를 삽입하는 중에 발생" -#: storage/lmgr/lmgr.c:830 +#: storage/lmgr/lmgr.c:845 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "%u,%u 튜플(해당 릴레이션: \"%s\")의 고유성을 검사하는 중에 발생" -#: storage/lmgr/lmgr.c:833 +#: storage/lmgr/lmgr.c:848 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "%u,%u 갱신된 튜플(해당 릴레이션: \"%s\")을 재확인하는 중에 발생" -#: storage/lmgr/lmgr.c:836 +#: storage/lmgr/lmgr.c:851 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "" "%u,%u 튜플(해당 릴레이션: \"%s\")의 제외 제약 조건을 검사하는 중에 발생" -#: storage/lmgr/lmgr.c:1091 +#: storage/lmgr/lmgr.c:1106 #, c-format msgid "relation %u of database %u" msgstr "릴레이션 %u, 데이터베이스 %u" -#: storage/lmgr/lmgr.c:1097 +#: storage/lmgr/lmgr.c:1112 #, c-format msgid "extension of relation %u of database %u" msgstr "%u 관계(%u 데이터베이스) 확장" -#: storage/lmgr/lmgr.c:1103 +#: storage/lmgr/lmgr.c:1118 +#, c-format +msgid "pg_database.datfrozenxid of database %u" +msgstr "데이터베이스 %u의 pg_database.datfrozenxid" + +#: storage/lmgr/lmgr.c:1123 #, c-format msgid "page %u of relation %u of database %u" msgstr "페이지 %u, 릴레이션 %u, 데이터베이스 %u" -#: storage/lmgr/lmgr.c:1110 +#: storage/lmgr/lmgr.c:1130 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "튜플 (%u,%u), 릴레이션 %u, 데이터베이스 %u" -#: storage/lmgr/lmgr.c:1118 +#: storage/lmgr/lmgr.c:1138 #, c-format msgid "transaction %u" msgstr "트랜잭션 %u" -#: storage/lmgr/lmgr.c:1123 +#: storage/lmgr/lmgr.c:1143 #, c-format msgid "virtual transaction %d/%u" msgstr "가상 트랜잭션 %d/%u" -#: storage/lmgr/lmgr.c:1129 +#: storage/lmgr/lmgr.c:1149 #, c-format msgid "speculative token %u of transaction %u" msgstr "%u 위험한 토큰, 대상 트랜잭션 %u" -#: storage/lmgr/lmgr.c:1135 +#: storage/lmgr/lmgr.c:1155 #, c-format msgid "object %u of class %u of database %u" msgstr "개체 %u, 클래스 %u, 데이터베이스 %u" -#: storage/lmgr/lmgr.c:1143 +#: storage/lmgr/lmgr.c:1163 #, c-format msgid "user lock [%u,%u,%u]" msgstr "user lock [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1150 +#: storage/lmgr/lmgr.c:1170 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "advisory lock [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1158 +#: storage/lmgr/lmgr.c:1178 #, c-format msgid "unrecognized locktag type %d" msgstr "알 수 없는 locktag 형태 %d" -#: storage/lmgr/lock.c:764 +#: storage/lmgr/lock.c:803 #, c-format msgid "" "cannot acquire lock mode %s on database objects while recovery is in progress" msgstr "" -#: storage/lmgr/lock.c:766 +#: storage/lmgr/lock.c:805 #, c-format msgid "" "Only RowExclusiveLock or less can be acquired on database objects during " "recovery." msgstr "" -#: storage/lmgr/lock.c:930 storage/lmgr/lock.c:968 storage/lmgr/lock.c:2755 -#: storage/lmgr/lock.c:4085 storage/lmgr/lock.c:4150 storage/lmgr/lock.c:4442 +#: storage/lmgr/lock.c:983 storage/lmgr/lock.c:1021 storage/lmgr/lock.c:2846 +#: storage/lmgr/lock.c:4176 storage/lmgr/lock.c:4241 storage/lmgr/lock.c:4533 #, c-format msgid "You might need to increase max_locks_per_transaction." msgstr "max_locks_per_transaction을 늘려야 할 수도 있습니다." -#: storage/lmgr/lock.c:3201 storage/lmgr/lock.c:3317 +#: storage/lmgr/lock.c:3292 storage/lmgr/lock.c:3408 #, c-format msgid "" "cannot PREPARE while holding both session-level and transaction-level locks " "on the same object" msgstr "" -#: storage/lmgr/predicate.c:703 +#: storage/lmgr/predicate.c:700 #, c-format msgid "not enough elements in RWConflictPool to record a read/write conflict" msgstr "" -#: storage/lmgr/predicate.c:704 storage/lmgr/predicate.c:732 +#: storage/lmgr/predicate.c:701 storage/lmgr/predicate.c:729 #, c-format msgid "" "You might need to run fewer transactions at a time or increase " "max_connections." msgstr "" -#: storage/lmgr/predicate.c:731 +#: storage/lmgr/predicate.c:728 #, c-format msgid "" "not enough elements in RWConflictPool to record a potential read/write " "conflict" msgstr "" -#: storage/lmgr/predicate.c:1538 +#: storage/lmgr/predicate.c:1535 #, c-format msgid "deferrable snapshot was unsafe; trying a new one" msgstr "" -#: storage/lmgr/predicate.c:1627 +#: storage/lmgr/predicate.c:1624 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "" -#: storage/lmgr/predicate.c:1628 +#: storage/lmgr/predicate.c:1625 #, c-format msgid "" "You can use \"SET default_transaction_isolation = 'repeatable read'\" to " "change the default." msgstr "" -#: storage/lmgr/predicate.c:1679 +#: storage/lmgr/predicate.c:1676 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "" -#: storage/lmgr/predicate.c:1758 utils/time/snapmgr.c:623 +#: storage/lmgr/predicate.c:1755 utils/time/snapmgr.c:623 #: utils/time/snapmgr.c:629 #, c-format msgid "could not import the requested snapshot" msgstr "" -#: storage/lmgr/predicate.c:1759 utils/time/snapmgr.c:630 +#: storage/lmgr/predicate.c:1756 utils/time/snapmgr.c:630 #, c-format msgid "The source process with PID %d is not running anymore." msgstr "%d PID 소스 프로세스는 더이상 실행 중이지 않습니다." -#: storage/lmgr/predicate.c:2405 storage/lmgr/predicate.c:2420 -#: storage/lmgr/predicate.c:3919 +#: storage/lmgr/predicate.c:2402 storage/lmgr/predicate.c:2417 +#: storage/lmgr/predicate.c:3899 #, c-format msgid "You might need to increase max_pred_locks_per_transaction." msgstr "max_pred_locks_per_transaction 값을 늘려야 할 수도 있습니다." -#: storage/lmgr/predicate.c:4075 storage/lmgr/predicate.c:4164 -#: storage/lmgr/predicate.c:4172 storage/lmgr/predicate.c:4211 -#: storage/lmgr/predicate.c:4454 storage/lmgr/predicate.c:4791 -#: storage/lmgr/predicate.c:4803 storage/lmgr/predicate.c:4846 -#: storage/lmgr/predicate.c:4884 +#: storage/lmgr/predicate.c:4030 storage/lmgr/predicate.c:4066 +#: storage/lmgr/predicate.c:4099 storage/lmgr/predicate.c:4107 +#: storage/lmgr/predicate.c:4146 storage/lmgr/predicate.c:4388 +#: storage/lmgr/predicate.c:4725 storage/lmgr/predicate.c:4737 +#: storage/lmgr/predicate.c:4780 storage/lmgr/predicate.c:4818 #, c-format msgid "" "could not serialize access due to read/write dependencies among transactions" msgstr "트랜잭션간 읽기/쓰기 의존성 때문에 serialize 접근을 할 수 없음" -#: storage/lmgr/predicate.c:4077 storage/lmgr/predicate.c:4166 -#: storage/lmgr/predicate.c:4174 storage/lmgr/predicate.c:4213 -#: storage/lmgr/predicate.c:4456 storage/lmgr/predicate.c:4793 -#: storage/lmgr/predicate.c:4805 storage/lmgr/predicate.c:4848 -#: storage/lmgr/predicate.c:4886 +#: storage/lmgr/predicate.c:4032 storage/lmgr/predicate.c:4068 +#: storage/lmgr/predicate.c:4101 storage/lmgr/predicate.c:4109 +#: storage/lmgr/predicate.c:4148 storage/lmgr/predicate.c:4390 +#: storage/lmgr/predicate.c:4727 storage/lmgr/predicate.c:4739 +#: storage/lmgr/predicate.c:4782 storage/lmgr/predicate.c:4820 #, c-format msgid "The transaction might succeed if retried." msgstr "재시도하면 그 트랜잭션이 성공할 것입니다." -#: storage/lmgr/proc.c:359 +#: storage/lmgr/proc.c:358 #, c-format msgid "" "number of requested standby connections exceeds max_wal_senders (currently " "%d)" msgstr "대기 서버 연결 수가 max_wal_senders 설정값(현재 %d)을 초과했습니다" -#: storage/lmgr/proc.c:1334 +#: storage/lmgr/proc.c:1337 #, c-format msgid "Process %d waits for %s on %s." msgstr "%d 프로세스가 대기중, 잠금종류: %s, 내용: %s" -#: storage/lmgr/proc.c:1345 +#: storage/lmgr/proc.c:1348 #, c-format msgid "sending cancel to blocking autovacuum PID %d" msgstr "%d PID autovacuum 블럭킹하기 위해 취소 신호를 보냅니다" -#: storage/lmgr/proc.c:1465 +#: storage/lmgr/proc.c:1468 #, c-format msgid "" "process %d avoided deadlock for %s on %s by rearranging queue order after " @@ -20803,128 +21355,128 @@ msgstr "" "%d PID 프로세스는 %s(%s)에 대해 교착 상태가 발생하지 않도록 %ld.%03dms 후에 " "대기열 순서를 다시 조정함" -#: storage/lmgr/proc.c:1480 +#: storage/lmgr/proc.c:1483 #, c-format msgid "" "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "%d PID 프로세스에서 %s(%s) 대기중 %ld.%03dms 후에 교착 상태를 감지함" -#: storage/lmgr/proc.c:1489 +#: storage/lmgr/proc.c:1492 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "%d PID 프로세스에서 여전히 %s(%s) 작업을 기다리고 있음(%ld.%03dms 후)" -#: storage/lmgr/proc.c:1496 +#: storage/lmgr/proc.c:1499 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "%d PID 프로세스가 %s(%s) 작업을 위해 잠금 취득함(%ld.%03dms 후)" -#: storage/lmgr/proc.c:1512 +#: storage/lmgr/proc.c:1515 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "프로세스 %d에서 %s(%s)을(를) 취득하지 못함(%ld.%03dms 후)" -#: storage/page/bufpage.c:152 +#: storage/page/bufpage.c:145 #, c-format msgid "page verification failed, calculated checksum %u but expected %u" msgstr "페이지 검사 실패, 계산된 체크섬은 %u, 기대값은 %u" -#: storage/page/bufpage.c:216 storage/page/bufpage.c:510 -#: storage/page/bufpage.c:747 storage/page/bufpage.c:880 -#: storage/page/bufpage.c:976 storage/page/bufpage.c:1086 +#: storage/page/bufpage.c:209 storage/page/bufpage.c:503 +#: storage/page/bufpage.c:740 storage/page/bufpage.c:873 +#: storage/page/bufpage.c:969 storage/page/bufpage.c:1081 #, c-format msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" msgstr "손상된 페이지 위치: 하위값 = %u, 상위값 = %u, 특수값 = %u" -#: storage/page/bufpage.c:532 +#: storage/page/bufpage.c:525 #, c-format msgid "corrupted line pointer: %u" msgstr "손상된 줄 위치: %u" -#: storage/page/bufpage.c:559 storage/page/bufpage.c:931 +#: storage/page/bufpage.c:552 storage/page/bufpage.c:924 #, c-format msgid "corrupted item lengths: total %u, available space %u" msgstr "손상된 아이템 길이: 전체 %u, 사용가능한 공간 %u" -#: storage/page/bufpage.c:766 storage/page/bufpage.c:904 -#: storage/page/bufpage.c:992 storage/page/bufpage.c:1102 +#: storage/page/bufpage.c:759 storage/page/bufpage.c:897 +#: storage/page/bufpage.c:985 storage/page/bufpage.c:1097 #, c-format msgid "corrupted line pointer: offset = %u, size = %u" msgstr "손상된 줄 위치: 오프셋 = %u, 크기 = %u" -#: storage/smgr/md.c:320 storage/smgr/md.c:807 +#: storage/smgr/md.c:333 storage/smgr/md.c:836 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "\"%s\" 파일을 비울 수 없음: %m" -#: storage/smgr/md.c:394 +#: storage/smgr/md.c:407 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "\"%s\" 파일을 %u개 블록을 초과하여 확장할 수 없음" -#: storage/smgr/md.c:409 +#: storage/smgr/md.c:422 #, c-format msgid "could not extend file \"%s\": %m" msgstr "\"%s\" 파일을 확장할 수 없음: %m" -#: storage/smgr/md.c:411 storage/smgr/md.c:418 storage/smgr/md.c:690 +#: storage/smgr/md.c:424 storage/smgr/md.c:431 storage/smgr/md.c:719 #, c-format msgid "Check free disk space." msgstr "디스크 여유 공간을 확인해 주십시오." -#: storage/smgr/md.c:415 +#: storage/smgr/md.c:428 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "\"%s\" 파일을 확장할 수 없음: %d/%d바이트만 %u 블록에 썼음" -#: storage/smgr/md.c:611 +#: storage/smgr/md.c:640 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "%u 블럭을 \"%s\" 파일에서 읽을 수 없음: %m" -#: storage/smgr/md.c:627 +#: storage/smgr/md.c:656 #, c-format msgid "could not read block %u in file \"%s\": read only %d of %d bytes" msgstr "%u 블럭을 \"%s\" 파일에서 읽을 수 없음: %d / %d 바이트만 읽음" -#: storage/smgr/md.c:681 +#: storage/smgr/md.c:710 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "%u 블럭을 \"%s\" 파일에 쓸 수 없음: %m" -#: storage/smgr/md.c:686 +#: storage/smgr/md.c:715 #, c-format msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "%u 블럭을 \"%s\" 파일에 쓸 수 없음: %d / %d 바이트만 씀" -#: storage/smgr/md.c:778 +#: storage/smgr/md.c:807 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "\"%s\" 파일을 %u 블럭으로 비울 수 없음: 현재 %u 블럭 뿐 임" -#: storage/smgr/md.c:833 +#: storage/smgr/md.c:862 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "\"%s\" 파일을 %u 블럭으로 정리할 수 없음: %m" -#: storage/smgr/md.c:905 +#: storage/smgr/md.c:957 #, c-format msgid "could not forward fsync request because request queue is full" msgstr "요청 큐가 가득차 forward fsync 요청을 처리할 수 없음" -#: storage/smgr/md.c:1202 +#: storage/smgr/md.c:1256 #, c-format msgid "" "could not open file \"%s\" (target block %u): previous segment is only %u " "blocks" msgstr "\"%s\" 파일을 열기 실패(대상 블록: %u): 이전 조각은 %u 블럭 뿐임" -#: storage/smgr/md.c:1216 +#: storage/smgr/md.c:1270 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "\"%s\" 파일을 열기 실패(대상 블록: %u): %m" -#: storage/sync/sync.c:400 +#: storage/sync/sync.c:401 #, c-format msgid "could not fsync file \"%s\" but retrying: %m" msgstr "\"%s\" 파일 fsync 실패, 재시도함: %m" @@ -20939,8 +21491,8 @@ msgstr "함수 호출 메시지 안에 있는 잘못된 %d 인자 크기" msgid "fastpath function call: \"%s\" (OID %u)" msgstr "fastpath 함수 호출: \"%s\" (OID %u)" -#: tcop/fastpath.c:389 tcop/postgres.c:1288 tcop/postgres.c:1551 -#: tcop/postgres.c:1918 tcop/postgres.c:2139 +#: tcop/fastpath.c:389 tcop/postgres.c:1323 tcop/postgres.c:1581 +#: tcop/postgres.c:2013 tcop/postgres.c:2250 #, c-format msgid "duration: %s ms" msgstr "실행시간: %s ms" @@ -20965,58 +21517,58 @@ msgstr "함수 호출 메시지는 %d 인자를 사용하지만, 함수는 %d msgid "incorrect binary data format in function argument %d" msgstr "함수 인자 %d 안에 잘못된 바이너리 자료 형식 발견됨" -#: tcop/postgres.c:359 tcop/postgres.c:395 tcop/postgres.c:422 +#: tcop/postgres.c:355 tcop/postgres.c:391 tcop/postgres.c:418 #, c-format msgid "unexpected EOF on client connection" msgstr "클라이언트 연결에서 예상치 않은 EOF 발견됨" -#: tcop/postgres.c:445 tcop/postgres.c:457 tcop/postgres.c:468 -#: tcop/postgres.c:480 tcop/postgres.c:4471 +#: tcop/postgres.c:441 tcop/postgres.c:453 tcop/postgres.c:464 +#: tcop/postgres.c:476 tcop/postgres.c:4539 #, c-format msgid "invalid frontend message type %d" msgstr "잘못된 frontend 메시지 형태 %d" -#: tcop/postgres.c:1043 +#: tcop/postgres.c:1042 #, c-format msgid "statement: %s" msgstr "명령 구문: %s" -#: tcop/postgres.c:1293 +#: tcop/postgres.c:1328 #, c-format msgid "duration: %s ms statement: %s" msgstr "실행시간: %s ms 명령 구문: %s" -#: tcop/postgres.c:1343 +#: tcop/postgres.c:1377 #, c-format msgid "parse %s: %s" msgstr "구문 %s: %s" -#: tcop/postgres.c:1400 +#: tcop/postgres.c:1434 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "준비된 명령 구문에는 다중 명령을 삽입할 수 없습니다" -#: tcop/postgres.c:1556 +#: tcop/postgres.c:1586 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "실행시간: %s ms %s 구문분석: %s" -#: tcop/postgres.c:1601 +#: tcop/postgres.c:1633 #, c-format msgid "bind %s to %s" msgstr "바인드: %s -> %s" -#: tcop/postgres.c:1620 tcop/postgres.c:2431 +#: tcop/postgres.c:1652 tcop/postgres.c:2516 #, c-format msgid "unnamed prepared statement does not exist" msgstr "이름없는 준비된 명령 구문(unnamed prepared statement) 없음" -#: tcop/postgres.c:1661 +#: tcop/postgres.c:1693 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "바인드 메시지는 %d 매개 변수 형태지만, %d 매개 변수여야함" -#: tcop/postgres.c:1667 +#: tcop/postgres.c:1699 #, c-format msgid "" "bind message supplies %d parameters, but prepared statement \"%s\" requires " @@ -21025,85 +21577,85 @@ msgstr "" "바인드 메시지는 %d개의 매개 변수를 지원하지만, \"%s\" 준비된 명령 구문" "(prepared statement)에서는%d 개의 매개 변수가 필요합니다" -#: tcop/postgres.c:1827 +#: tcop/postgres.c:1897 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "바인드 매개 변수 %d 안에 잘못된 바이너리 자료 형태가 있음" -#: tcop/postgres.c:1923 +#: tcop/postgres.c:2018 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "실행시간: %s ms %s%s%s 접속: %s" -#: tcop/postgres.c:1971 tcop/postgres.c:2515 +#: tcop/postgres.c:2068 tcop/postgres.c:2600 #, c-format msgid "portal \"%s\" does not exist" msgstr "\"%s\" portal 없음" -#: tcop/postgres.c:2056 +#: tcop/postgres.c:2153 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2058 tcop/postgres.c:2147 +#: tcop/postgres.c:2155 tcop/postgres.c:2258 msgid "execute fetch from" msgstr "자료뽑기" -#: tcop/postgres.c:2059 tcop/postgres.c:2148 +#: tcop/postgres.c:2156 tcop/postgres.c:2259 msgid "execute" msgstr "쿼리실행" -#: tcop/postgres.c:2144 +#: tcop/postgres.c:2255 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "수행시간: %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2272 +#: tcop/postgres.c:2401 #, c-format msgid "prepare: %s" msgstr "prepare: %s" -#: tcop/postgres.c:2337 +#: tcop/postgres.c:2426 #, c-format msgid "parameters: %s" msgstr "매개 변수: %s" -#: tcop/postgres.c:2356 +#: tcop/postgres.c:2441 #, c-format msgid "abort reason: recovery conflict" msgstr "중지 이유: 복구 충돌" -#: tcop/postgres.c:2372 +#: tcop/postgres.c:2457 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "" -#: tcop/postgres.c:2375 +#: tcop/postgres.c:2460 #, c-format msgid "User was holding a relation lock for too long." msgstr "" -#: tcop/postgres.c:2378 +#: tcop/postgres.c:2463 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "" -#: tcop/postgres.c:2381 +#: tcop/postgres.c:2466 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "" -#: tcop/postgres.c:2387 +#: tcop/postgres.c:2472 #, c-format msgid "User was connected to a database that must be dropped." msgstr "삭제 되어져야할 데이터베이스 사용자 접속해 있습니다." -#: tcop/postgres.c:2711 +#: tcop/postgres.c:2796 #, c-format msgid "terminating connection because of crash of another server process" msgstr "다른 서버 프로세스가 손상을 입어 현재 연결을 중지합니다" -#: tcop/postgres.c:2712 +#: tcop/postgres.c:2797 #, c-format msgid "" "The postmaster has commanded this server process to roll back the current " @@ -21114,19 +21666,19 @@ msgstr "" "와의 연결을 끊으라는 명령을 보냈습니다. 왜냐하면, 다른 서버 프로세스가 비정상" "적으로 중지되어 공유 메모리가 손상되었을 가능성이 있기 때문입니다" -#: tcop/postgres.c:2716 tcop/postgres.c:3040 +#: tcop/postgres.c:2801 tcop/postgres.c:3107 #, c-format msgid "" "In a moment you should be able to reconnect to the database and repeat your " "command." msgstr "잠시 뒤에 다시 연결 해서 작업을 계속 하십시오" -#: tcop/postgres.c:2798 +#: tcop/postgres.c:2883 #, c-format msgid "floating-point exception" msgstr "부동소수점 예외발생" -#: tcop/postgres.c:2799 +#: tcop/postgres.c:2884 #, c-format msgid "" "An invalid floating-point operation was signaled. This probably means an out-" @@ -21135,72 +21687,72 @@ msgstr "" "잘못된 부동소수점 작업이 감지 되었습니다. 이것은 아마도 결과값 범위초과나 0으" "로 나누는 작업과 같은 잘못된 연산 때문에 발생한 것 같습니다" -#: tcop/postgres.c:2970 +#: tcop/postgres.c:3037 #, c-format msgid "canceling authentication due to timeout" msgstr "시간 초과로 인증 작업을 취소합니다." -#: tcop/postgres.c:2974 +#: tcop/postgres.c:3041 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "관리자 명령으로 인해 자동 청소 프로세스를 종료하는 중" -#: tcop/postgres.c:2978 +#: tcop/postgres.c:3045 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "관리자 요청에 의해서 논리 복제 작업자를 끝냅니다" -#: tcop/postgres.c:2982 +#: tcop/postgres.c:3049 #, c-format msgid "logical replication launcher shutting down" msgstr "논리 복제 관리자를 중지하고 있습니다" -#: tcop/postgres.c:2995 tcop/postgres.c:3005 tcop/postgres.c:3038 +#: tcop/postgres.c:3062 tcop/postgres.c:3072 tcop/postgres.c:3105 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "복구 작업 중 충돌로 연결을 종료합니다." -#: tcop/postgres.c:3011 +#: tcop/postgres.c:3078 #, c-format msgid "terminating connection due to administrator command" msgstr "관리자 요청에 의해서 연결을 끝냅니다" -#: tcop/postgres.c:3021 +#: tcop/postgres.c:3088 #, c-format msgid "connection to client lost" msgstr "서버로부터 연결이 끊어졌습니다." -#: tcop/postgres.c:3087 +#: tcop/postgres.c:3154 #, c-format msgid "canceling statement due to lock timeout" msgstr "잠금 대기 시간 초과로 작업을 취소합니다." -#: tcop/postgres.c:3094 +#: tcop/postgres.c:3161 #, c-format msgid "canceling statement due to statement timeout" msgstr "명령실행시간 초과로 작업을 취소합니다." -#: tcop/postgres.c:3101 +#: tcop/postgres.c:3168 #, c-format msgid "canceling autovacuum task" msgstr "자동 청소 작업을 취소하는 중" -#: tcop/postgres.c:3124 +#: tcop/postgres.c:3191 #, c-format msgid "canceling statement due to user request" msgstr "사용자 요청에 의해 작업을 취소합니다." -#: tcop/postgres.c:3134 +#: tcop/postgres.c:3201 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "idle-in-transaction 시간 초과로 연결을 끝냅니다" -#: tcop/postgres.c:3248 +#: tcop/postgres.c:3318 #, c-format msgid "stack depth limit exceeded" msgstr "스택 깊이를 초과했습니다" -#: tcop/postgres.c:3249 +#: tcop/postgres.c:3319 #, c-format msgid "" "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), " @@ -21209,59 +21761,59 @@ msgstr "" "먼저 OS에서 지원하는 스택 depth 최대값을 확인한 뒤, 허용범위 안에서 " "\"max_stack_depth\" (현재값: %dkB) 매개 변수 값의 설정치를 증가시키세요." -#: tcop/postgres.c:3312 +#: tcop/postgres.c:3382 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "\"max_stack_depth\" 값은 %ldkB를 초과할 수 없습니다" -#: tcop/postgres.c:3314 +#: tcop/postgres.c:3384 #, c-format msgid "" "Increase the platform's stack depth limit via \"ulimit -s\" or local " "equivalent." msgstr "OS의 \"ulimit -s\" 명령과 같은 것으로 스택 깊이를 늘려주십시오." -#: tcop/postgres.c:3674 +#: tcop/postgres.c:3744 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "서버 프로세스의 명령행 인자가 잘못되었습니다: %s" -#: tcop/postgres.c:3675 tcop/postgres.c:3681 +#: tcop/postgres.c:3745 tcop/postgres.c:3751 #, c-format msgid "Try \"%s --help\" for more information." msgstr "자세한 사항은 \"%s --help\" 명령으로 살펴보세요." -#: tcop/postgres.c:3679 +#: tcop/postgres.c:3749 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: 잘못된 명령행 인자: %s" -#: tcop/postgres.c:3741 +#: tcop/postgres.c:3811 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: 데이터베이스와 사용자를 지정하지 않았습니다" -#: tcop/postgres.c:4379 +#: tcop/postgres.c:4447 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "잘못된 CLOSE 메시지 서브타입 %d" -#: tcop/postgres.c:4414 +#: tcop/postgres.c:4482 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "잘못된 DESCRIBE 메시지 서브타입 %d" -#: tcop/postgres.c:4492 +#: tcop/postgres.c:4560 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "복제 연결에서는 fastpath 함수 호출을 지원하지 않습니다" -#: tcop/postgres.c:4496 +#: tcop/postgres.c:4564 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "" -#: tcop/postgres.c:4673 +#: tcop/postgres.c:4741 #, c-format msgid "" "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s" @@ -21270,53 +21822,53 @@ msgstr "" "연결종료: 세션 시간: %d:%02d:%02d.%03d 사용자=%s 데이터베이스=%s 호스트=%s%s" "%s" -#: tcop/pquery.c:642 +#: tcop/pquery.c:629 #, c-format msgid "bind message has %d result formats but query has %d columns" msgstr "" "바인드 메시지는 %d 결과 포멧을 가지고 있고, 쿼리는 %d 칼럼을 가지고 있습니다" -#: tcop/pquery.c:949 +#: tcop/pquery.c:932 #, c-format msgid "cursor can only scan forward" msgstr "이 커서는 앞으로 이동 전용입니다" -#: tcop/pquery.c:950 +#: tcop/pquery.c:933 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "" "뒤로 이동 가능한 커서를 만드려면 SCROLL 옵션을 추가해서 커서를 만드세요." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:245 +#: tcop/utility.c:413 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "읽기 전용 트랜잭션에서는 %s 명령을 실행할 수 없습니다." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:263 +#: tcop/utility.c:431 #, c-format msgid "cannot execute %s during a parallel operation" msgstr "병렬 처리 작업에서는 %s 명령을 실행할 수 없습니다." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:282 +#: tcop/utility.c:450 #, c-format msgid "cannot execute %s during recovery" msgstr "복구 작업 중에는 %s 명령을 실행할 수 없습니다." #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:300 +#: tcop/utility.c:468 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "보안 제한 작업 내에서 %s을(를) 실행할 수 없음" -#: tcop/utility.c:760 +#: tcop/utility.c:912 #, c-format msgid "must be superuser to do CHECKPOINT" msgstr "CHECKPOINT 명령은 슈퍼유저만 사용할 수 있습니다" -#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:624 +#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:620 #, c-format msgid "multiple DictFile parameters" msgstr "DictFile 매개 변수가 여러 개 있음" @@ -21336,7 +21888,7 @@ msgstr "인식할 수 없는 Ispell 매개 변수: \"%s\"" msgid "missing AffFile parameter" msgstr "AffFile 매개 변수가 누락됨" -#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:648 +#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:644 #, c-format msgid "missing DictFile parameter" msgstr "DictFile 매개 변수가 누락됨" @@ -21407,33 +21959,33 @@ msgstr "\"%s\" 동의어 사전 샘플 단어는 중지 단어임(규칙 %d)" msgid "Use \"?\" to represent a stop word within a sample phrase." msgstr "샘플 구 내에서 중지 단어를 나타내려면 \"?\"를 사용하십시오." -#: tsearch/dict_thesaurus.c:576 +#: tsearch/dict_thesaurus.c:572 #, c-format msgid "thesaurus substitute word \"%s\" is a stop word (rule %d)" msgstr "\"%s\" 동의어 사전 대체 단어는 중지 단어임(규칙 %d)" -#: tsearch/dict_thesaurus.c:583 +#: tsearch/dict_thesaurus.c:579 #, c-format msgid "" "thesaurus substitute word \"%s\" isn't recognized by subdictionary (rule %d)" msgstr "\"%s\" 동의어 사전 대체 단어는 하위 사전에서 인식할 수 없음(규칙 %d)" -#: tsearch/dict_thesaurus.c:595 +#: tsearch/dict_thesaurus.c:591 #, c-format msgid "thesaurus substitute phrase is empty (rule %d)" msgstr "동의어 사전 대체 구가 비어 있음(규칙 %d)" -#: tsearch/dict_thesaurus.c:633 +#: tsearch/dict_thesaurus.c:629 #, c-format msgid "multiple Dictionary parameters" msgstr "Dictionary 매개 변수가 여러 개 있음" -#: tsearch/dict_thesaurus.c:640 +#: tsearch/dict_thesaurus.c:636 #, c-format msgid "unrecognized Thesaurus parameter: \"%s\"" msgstr "인식할 수 없는 Thesaurus 매개 변수: \"%s\"" -#: tsearch/dict_thesaurus.c:652 +#: tsearch/dict_thesaurus.c:648 #, c-format msgid "missing Dictionary parameter" msgstr "Dictionary 매개 변수가 누락됨" @@ -21470,7 +22022,7 @@ msgid "invalid regular expression: %s" msgstr "잘못된 정규식: %s" #: tsearch/spell.c:956 tsearch/spell.c:973 tsearch/spell.c:990 -#: tsearch/spell.c:1007 tsearch/spell.c:1072 gram.y:15735 gram.y:15752 +#: tsearch/spell.c:1007 tsearch/spell.c:1072 gram.y:15993 gram.y:16010 #, c-format msgid "syntax error" msgstr "구문 오류" @@ -21508,30 +22060,30 @@ msgstr "alias 수가 지정한 %d 개수를 초과함" msgid "affix file contains both old-style and new-style commands" msgstr "affix 파일에 옛방식과 새방식 명령이 함께 있습니다" -#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:271 utils/adt/tsvector_op.c:1132 +#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "" "문자열이 너무 길어서 tsvector에 사용할 수 없음(%d바이트, 최대 %d바이트)" -#: tsearch/ts_locale.c:185 +#: tsearch/ts_locale.c:212 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "%d번째 줄(해당 파일: \"%s\"): \"%s\"" -#: tsearch/ts_locale.c:302 +#: tsearch/ts_locale.c:329 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "wchar_t에서 서버 인코딩으로 변환하지 못함: %m" -#: tsearch/ts_parse.c:390 tsearch/ts_parse.c:397 tsearch/ts_parse.c:566 -#: tsearch/ts_parse.c:573 +#: tsearch/ts_parse.c:386 tsearch/ts_parse.c:393 tsearch/ts_parse.c:562 +#: tsearch/ts_parse.c:569 #, c-format msgid "word is too long to be indexed" msgstr "단어가 너무 길어서 인덱싱할 수 없음" -#: tsearch/ts_parse.c:391 tsearch/ts_parse.c:398 tsearch/ts_parse.c:567 -#: tsearch/ts_parse.c:574 +#: tsearch/ts_parse.c:387 tsearch/ts_parse.c:394 tsearch/ts_parse.c:563 +#: tsearch/ts_parse.c:570 #, c-format msgid "Words longer than %d characters are ignored." msgstr "%d자보다 긴 단어는 무시됩니다." @@ -21546,160 +22098,160 @@ msgstr "\"%s\" 전문 검색 구성 파일 이름이 잘못됨" msgid "could not open stop-word file \"%s\": %m" msgstr "\"%s\" 중지 단어 파일을 열 수 없음: %m" -#: tsearch/wparser.c:322 tsearch/wparser.c:410 tsearch/wparser.c:487 +#: tsearch/wparser.c:313 tsearch/wparser.c:401 tsearch/wparser.c:478 #, c-format msgid "text search parser does not support headline creation" msgstr "전문 검색 분석기에서 헤드라인 작성을 지원하지 않음" -#: tsearch/wparser_def.c:2486 +#: tsearch/wparser_def.c:2585 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "인식할 수 없는 headline 매개 변수: \"%s\"" -#: tsearch/wparser_def.c:2495 +#: tsearch/wparser_def.c:2604 #, c-format msgid "MinWords should be less than MaxWords" msgstr "MinWords는 MaxWords보다 작아야 함" -#: tsearch/wparser_def.c:2499 +#: tsearch/wparser_def.c:2608 #, c-format msgid "MinWords should be positive" msgstr "MinWords는 양수여야 함" -#: tsearch/wparser_def.c:2503 +#: tsearch/wparser_def.c:2612 #, c-format msgid "ShortWord should be >= 0" msgstr "ShortWord는 0보다 크거나 같아야 함" -#: tsearch/wparser_def.c:2507 +#: tsearch/wparser_def.c:2616 #, c-format msgid "MaxFragments should be >= 0" msgstr "MaxFragments는 0보다 크거나 같아야 함" # # nonun 부분 begin -#: utils/adt/acl.c:171 utils/adt/name.c:93 +#: utils/adt/acl.c:172 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "식별자(identifier)가 너무 깁니다." -#: utils/adt/acl.c:172 utils/adt/name.c:94 +#: utils/adt/acl.c:173 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "식별자(Identifier)는 %d 글자 이상일 수 없습니다." -#: utils/adt/acl.c:258 +#: utils/adt/acl.c:256 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "알 수 없는 않은 키워드: \"%s\"" -#: utils/adt/acl.c:259 +#: utils/adt/acl.c:257 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "ACL 키워드는 \"group\" 또는 \"user\" 중에 하나여야 합니다." -#: utils/adt/acl.c:264 +#: utils/adt/acl.c:262 #, c-format msgid "missing name" msgstr "이름이 빠졌습니다." -#: utils/adt/acl.c:265 +#: utils/adt/acl.c:263 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "이름은 \"group\" 또는 \"user\" 키워드 뒤에 있어야 합니다." -#: utils/adt/acl.c:271 +#: utils/adt/acl.c:269 #, c-format msgid "missing \"=\" sign" msgstr "\"=\" 기호가 빠졌습니다." -#: utils/adt/acl.c:324 +#: utils/adt/acl.c:322 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "잘못된 조건: \"%s\" 중에 한 가지여야 합니다." -#: utils/adt/acl.c:346 +#: utils/adt/acl.c:344 #, c-format msgid "a name must follow the \"/\" sign" msgstr "이름은 \"/\"기호 뒤에 있어야 합니다." -#: utils/adt/acl.c:354 +#: utils/adt/acl.c:352 #, c-format msgid "defaulting grantor to user ID %u" msgstr "%u 사용자 ID에서 기본 권한자로 할당하고 있습니다" -#: utils/adt/acl.c:545 +#: utils/adt/acl.c:538 #, c-format msgid "ACL array contains wrong data type" msgstr "ACL 배열에 잘못된 자료형을 사용하고 있습니다" -#: utils/adt/acl.c:549 +#: utils/adt/acl.c:542 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "ACL 배열은 일차원 배열이어야합니다" -#: utils/adt/acl.c:553 +#: utils/adt/acl.c:546 #, c-format msgid "ACL arrays must not contain null values" msgstr "ACL 배열에는 null 값을 포함할 수 없습니다" -#: utils/adt/acl.c:577 +#: utils/adt/acl.c:570 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "ACL 설정 정보 끝에 끝에 쓸모 없는 내용들이 더 포함되어있습니다" -#: utils/adt/acl.c:1212 +#: utils/adt/acl.c:1205 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "부여 옵션을 해당 부여자에게 다시 부여할 수 없음" -#: utils/adt/acl.c:1273 +#: utils/adt/acl.c:1266 #, c-format msgid "dependent privileges exist" msgstr "???의존(적인) 권한이 존재합니다" -#: utils/adt/acl.c:1274 +#: utils/adt/acl.c:1267 #, c-format msgid "Use CASCADE to revoke them too." msgstr "그것들을 취소하려면 \"CASCADE\"를 사용하세요." -#: utils/adt/acl.c:1536 +#: utils/adt/acl.c:1521 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert 더이상 지원하지 않음" -#: utils/adt/acl.c:1546 +#: utils/adt/acl.c:1531 #, c-format msgid "aclremove is no longer supported" msgstr "aclremovie 더이상 지원하지 않음" -#: utils/adt/acl.c:1632 utils/adt/acl.c:1686 +#: utils/adt/acl.c:1617 utils/adt/acl.c:1671 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "알 수 없는 권한 타입: \"%s\"" -#: utils/adt/acl.c:3486 utils/adt/regproc.c:102 utils/adt/regproc.c:277 +#: utils/adt/acl.c:3471 utils/adt/regproc.c:103 utils/adt/regproc.c:278 #, c-format msgid "function \"%s\" does not exist" msgstr "\"%s\" 함수가 없습니다." -#: utils/adt/acl.c:4958 +#: utils/adt/acl.c:4943 #, c-format msgid "must be member of role \"%s\"" msgstr "\"%s\" 롤의 구성원이어야 함" -#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:932 -#: utils/adt/arrayfuncs.c:1532 utils/adt/arrayfuncs.c:3235 -#: utils/adt/arrayfuncs.c:3375 utils/adt/arrayfuncs.c:5909 -#: utils/adt/arrayfuncs.c:6250 utils/adt/arrayutils.c:93 +#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:933 +#: utils/adt/arrayfuncs.c:1533 utils/adt/arrayfuncs.c:3236 +#: utils/adt/arrayfuncs.c:3376 utils/adt/arrayfuncs.c:5911 +#: utils/adt/arrayfuncs.c:6252 utils/adt/arrayutils.c:93 #: utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 #, c-format msgid "array size exceeds the maximum allowed (%d)" msgstr "배열 크기가 최대치 (%d)를 초과했습니다" #: utils/adt/array_userfuncs.c:80 utils/adt/array_userfuncs.c:466 -#: utils/adt/array_userfuncs.c:546 utils/adt/json.c:1829 utils/adt/json.c:1924 -#: utils/adt/json.c:1962 utils/adt/jsonb.c:1094 utils/adt/jsonb.c:1123 -#: utils/adt/jsonb.c:1517 utils/adt/jsonb.c:1681 utils/adt/jsonb.c:1691 +#: utils/adt/array_userfuncs.c:546 utils/adt/json.c:645 utils/adt/json.c:740 +#: utils/adt/json.c:778 utils/adt/jsonb.c:1115 utils/adt/jsonb.c:1144 +#: utils/adt/jsonb.c:1538 utils/adt/jsonb.c:1702 utils/adt/jsonb.c:1712 #, c-format msgid "could not determine input data type" msgstr "입력 자료형을 결정할 수 없음" @@ -21710,15 +22262,16 @@ msgid "input data type is not an array" msgstr "입력 자료형이 배열이 아닙니다." #: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 -#: utils/adt/arrayfuncs.c:1335 utils/adt/float.c:1213 utils/adt/float.c:1287 -#: utils/adt/float.c:3855 utils/adt/float.c:3869 utils/adt/int.c:759 +#: utils/adt/arrayfuncs.c:1336 utils/adt/float.c:1243 utils/adt/float.c:1317 +#: utils/adt/float.c:3960 utils/adt/float.c:3974 utils/adt/int.c:759 #: utils/adt/int.c:781 utils/adt/int.c:795 utils/adt/int.c:809 #: utils/adt/int.c:840 utils/adt/int.c:861 utils/adt/int.c:978 #: utils/adt/int.c:992 utils/adt/int.c:1006 utils/adt/int.c:1039 #: utils/adt/int.c:1053 utils/adt/int.c:1067 utils/adt/int.c:1098 -#: utils/adt/int.c:1180 utils/adt/int8.c:1167 utils/adt/numeric.c:1565 -#: utils/adt/numeric.c:3240 utils/adt/varbit.c:1188 utils/adt/varbit.c:1576 -#: utils/adt/varlena.c:1075 utils/adt/varlena.c:3345 +#: utils/adt/int.c:1180 utils/adt/int.c:1244 utils/adt/int.c:1312 +#: utils/adt/int.c:1318 utils/adt/int8.c:1292 utils/adt/numeric.c:1559 +#: utils/adt/numeric.c:3435 utils/adt/varbit.c:1188 utils/adt/varbit.c:1576 +#: utils/adt/varlena.c:1087 utils/adt/varlena.c:3377 #, c-format msgid "integer out of range" msgstr "정수 범위를 벗어남" @@ -21768,246 +22321,246 @@ msgstr "다차원 배열에서 요소 검색 기능은 지원하지 않음" msgid "initial position must not be null" msgstr "초기 위치값은 null값이 아니여야 함" -#: utils/adt/arrayfuncs.c:269 utils/adt/arrayfuncs.c:283 -#: utils/adt/arrayfuncs.c:294 utils/adt/arrayfuncs.c:316 -#: utils/adt/arrayfuncs.c:331 utils/adt/arrayfuncs.c:345 -#: utils/adt/arrayfuncs.c:351 utils/adt/arrayfuncs.c:358 -#: utils/adt/arrayfuncs.c:489 utils/adt/arrayfuncs.c:505 -#: utils/adt/arrayfuncs.c:516 utils/adt/arrayfuncs.c:531 -#: utils/adt/arrayfuncs.c:552 utils/adt/arrayfuncs.c:582 -#: utils/adt/arrayfuncs.c:589 utils/adt/arrayfuncs.c:597 -#: utils/adt/arrayfuncs.c:631 utils/adt/arrayfuncs.c:654 -#: utils/adt/arrayfuncs.c:674 utils/adt/arrayfuncs.c:786 -#: utils/adt/arrayfuncs.c:795 utils/adt/arrayfuncs.c:825 -#: utils/adt/arrayfuncs.c:840 utils/adt/arrayfuncs.c:893 +#: utils/adt/arrayfuncs.c:270 utils/adt/arrayfuncs.c:284 +#: utils/adt/arrayfuncs.c:295 utils/adt/arrayfuncs.c:317 +#: utils/adt/arrayfuncs.c:332 utils/adt/arrayfuncs.c:346 +#: utils/adt/arrayfuncs.c:352 utils/adt/arrayfuncs.c:359 +#: utils/adt/arrayfuncs.c:490 utils/adt/arrayfuncs.c:506 +#: utils/adt/arrayfuncs.c:517 utils/adt/arrayfuncs.c:532 +#: utils/adt/arrayfuncs.c:553 utils/adt/arrayfuncs.c:583 +#: utils/adt/arrayfuncs.c:590 utils/adt/arrayfuncs.c:598 +#: utils/adt/arrayfuncs.c:632 utils/adt/arrayfuncs.c:655 +#: utils/adt/arrayfuncs.c:675 utils/adt/arrayfuncs.c:787 +#: utils/adt/arrayfuncs.c:796 utils/adt/arrayfuncs.c:826 +#: utils/adt/arrayfuncs.c:841 utils/adt/arrayfuncs.c:894 #, c-format msgid "malformed array literal: \"%s\"" msgstr "비정상적인 배열 문자: \"%s\"" -#: utils/adt/arrayfuncs.c:270 +#: utils/adt/arrayfuncs.c:271 #, c-format msgid "\"[\" must introduce explicitly-specified array dimensions." msgstr "배열 차원 정의는 \"[\" 문자로 시작해야 합니다." -#: utils/adt/arrayfuncs.c:284 +#: utils/adt/arrayfuncs.c:285 #, c-format msgid "Missing array dimension value." msgstr "배열 차원(배열 깊이) 값이 빠졌습니다." -#: utils/adt/arrayfuncs.c:295 utils/adt/arrayfuncs.c:332 +#: utils/adt/arrayfuncs.c:296 utils/adt/arrayfuncs.c:333 #, c-format msgid "Missing \"%s\" after array dimensions." msgstr "배열 차원(배열 깊이) 표현에서 \"%s\" 문자가 빠졌습니다." -#: utils/adt/arrayfuncs.c:304 utils/adt/arrayfuncs.c:2883 -#: utils/adt/arrayfuncs.c:2915 utils/adt/arrayfuncs.c:2930 +#: utils/adt/arrayfuncs.c:305 utils/adt/arrayfuncs.c:2884 +#: utils/adt/arrayfuncs.c:2916 utils/adt/arrayfuncs.c:2931 #, c-format msgid "upper bound cannot be less than lower bound" msgstr "상한값은 하한값보다 작을 수 없습니다" -#: utils/adt/arrayfuncs.c:317 +#: utils/adt/arrayfuncs.c:318 #, c-format msgid "Array value must start with \"{\" or dimension information." msgstr "배열값은 \"{\" 또는 배열 깊이 정보로 시작되어야 합니다" -#: utils/adt/arrayfuncs.c:346 +#: utils/adt/arrayfuncs.c:347 #, c-format msgid "Array contents must start with \"{\"." msgstr "배열형은 \"{\" 문자로 시작해야 합니다." -#: utils/adt/arrayfuncs.c:352 utils/adt/arrayfuncs.c:359 +#: utils/adt/arrayfuncs.c:353 utils/adt/arrayfuncs.c:360 #, c-format msgid "Specified array dimensions do not match array contents." msgstr "지정한 배열 차원에 해당하는 배열이 없습니다." -#: utils/adt/arrayfuncs.c:490 utils/adt/arrayfuncs.c:517 +#: utils/adt/arrayfuncs.c:491 utils/adt/arrayfuncs.c:518 #: utils/adt/rangetypes.c:2181 utils/adt/rangetypes.c:2189 #: utils/adt/rowtypes.c:210 utils/adt/rowtypes.c:218 #, c-format msgid "Unexpected end of input." msgstr "입력의 예상치 못한 종료." -#: utils/adt/arrayfuncs.c:506 utils/adt/arrayfuncs.c:553 -#: utils/adt/arrayfuncs.c:583 utils/adt/arrayfuncs.c:632 +#: utils/adt/arrayfuncs.c:507 utils/adt/arrayfuncs.c:554 +#: utils/adt/arrayfuncs.c:584 utils/adt/arrayfuncs.c:633 #, c-format msgid "Unexpected \"%c\" character." msgstr "예기치 않은 \"%c\" 문자" -#: utils/adt/arrayfuncs.c:532 utils/adt/arrayfuncs.c:655 +#: utils/adt/arrayfuncs.c:533 utils/adt/arrayfuncs.c:656 #, c-format msgid "Unexpected array element." msgstr "예기치 않은 배열 요소" -#: utils/adt/arrayfuncs.c:590 +#: utils/adt/arrayfuncs.c:591 #, c-format msgid "Unmatched \"%c\" character." msgstr "짝이 안 맞는 \"%c\" 문자" -#: utils/adt/arrayfuncs.c:598 utils/adt/jsonfuncs.c:2397 +#: utils/adt/arrayfuncs.c:599 utils/adt/jsonfuncs.c:2452 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "다차원 배열에는 일치하는 차원이 포함된 배열 식이 있어야 함" -#: utils/adt/arrayfuncs.c:675 +#: utils/adt/arrayfuncs.c:676 #, c-format msgid "Junk after closing right brace." msgstr "오른쪽 닫기 괄호 뒤에 정크" -#: utils/adt/arrayfuncs.c:1297 utils/adt/arrayfuncs.c:3343 -#: utils/adt/arrayfuncs.c:5815 +#: utils/adt/arrayfuncs.c:1298 utils/adt/arrayfuncs.c:3344 +#: utils/adt/arrayfuncs.c:5817 #, c-format msgid "invalid number of dimensions: %d" msgstr "잘못된 배열 차원(배열 깊이): %d" -#: utils/adt/arrayfuncs.c:1308 +#: utils/adt/arrayfuncs.c:1309 #, c-format msgid "invalid array flags" msgstr "잘못된 배열 플래그" -#: utils/adt/arrayfuncs.c:1316 +#: utils/adt/arrayfuncs.c:1317 #, c-format msgid "wrong element type" msgstr "잘못된 요소 타입" -#: utils/adt/arrayfuncs.c:1366 utils/adt/rangetypes.c:335 -#: utils/cache/lsyscache.c:2725 +#: utils/adt/arrayfuncs.c:1367 utils/adt/rangetypes.c:335 +#: utils/cache/lsyscache.c:2835 #, c-format msgid "no binary input function available for type %s" msgstr "%s 자료형에서 사용할 바이너리 입력 함수가 없습니다." -#: utils/adt/arrayfuncs.c:1506 +#: utils/adt/arrayfuncs.c:1507 #, c-format msgid "improper binary format in array element %d" msgstr "%d 번째 배열 요소의 포맷이 부적절합니다." -#: utils/adt/arrayfuncs.c:1587 utils/adt/rangetypes.c:340 -#: utils/cache/lsyscache.c:2758 +#: utils/adt/arrayfuncs.c:1588 utils/adt/rangetypes.c:340 +#: utils/cache/lsyscache.c:2868 #, c-format msgid "no binary output function available for type %s" msgstr "%s 자료형에서 사용할 바이너리 출력 함수가 없습니다." -#: utils/adt/arrayfuncs.c:2065 +#: utils/adt/arrayfuncs.c:2066 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "특정 크기로 배열을 절단하는 기능은 구현되지 않습니다." -#: utils/adt/arrayfuncs.c:2243 utils/adt/arrayfuncs.c:2265 -#: utils/adt/arrayfuncs.c:2314 utils/adt/arrayfuncs.c:2550 -#: utils/adt/arrayfuncs.c:2861 utils/adt/arrayfuncs.c:5801 -#: utils/adt/arrayfuncs.c:5827 utils/adt/arrayfuncs.c:5838 -#: utils/adt/json.c:2325 utils/adt/json.c:2400 utils/adt/jsonb.c:1295 -#: utils/adt/jsonb.c:1381 utils/adt/jsonfuncs.c:4301 utils/adt/jsonfuncs.c:4452 -#: utils/adt/jsonfuncs.c:4497 utils/adt/jsonfuncs.c:4544 +#: utils/adt/arrayfuncs.c:2244 utils/adt/arrayfuncs.c:2266 +#: utils/adt/arrayfuncs.c:2315 utils/adt/arrayfuncs.c:2551 +#: utils/adt/arrayfuncs.c:2862 utils/adt/arrayfuncs.c:5803 +#: utils/adt/arrayfuncs.c:5829 utils/adt/arrayfuncs.c:5840 +#: utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 +#: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4340 utils/adt/jsonfuncs.c:4490 +#: utils/adt/jsonfuncs.c:4602 utils/adt/jsonfuncs.c:4648 #, c-format msgid "wrong number of array subscripts" msgstr "잘못된 배열 하위 스크립트(1,2...차원 배열 표시 문제)" -#: utils/adt/arrayfuncs.c:2248 utils/adt/arrayfuncs.c:2356 -#: utils/adt/arrayfuncs.c:2614 utils/adt/arrayfuncs.c:2920 +#: utils/adt/arrayfuncs.c:2249 utils/adt/arrayfuncs.c:2357 +#: utils/adt/arrayfuncs.c:2615 utils/adt/arrayfuncs.c:2921 #, c-format msgid "array subscript out of range" msgstr "배열 하위 스크립트 범위를 초과했습니다" -#: utils/adt/arrayfuncs.c:2253 +#: utils/adt/arrayfuncs.c:2254 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "고정 길이 배열의 요소에 null 값을 지정할 수 없음" -#: utils/adt/arrayfuncs.c:2808 +#: utils/adt/arrayfuncs.c:2809 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "고정된 크기의 배열의 조각을 업데이트 하는 기능은 구현되지 않았습니다." -#: utils/adt/arrayfuncs.c:2839 +#: utils/adt/arrayfuncs.c:2840 #, c-format msgid "array slice subscript must provide both boundaries" msgstr "배열 나누기 서브스크립트는 반드시 둘다 범위안에 있어야 합니다" -#: utils/adt/arrayfuncs.c:2840 +#: utils/adt/arrayfuncs.c:2841 #, c-format msgid "" "When assigning to a slice of an empty array value, slice boundaries must be " "fully specified." msgstr "" -#: utils/adt/arrayfuncs.c:2851 utils/adt/arrayfuncs.c:2946 +#: utils/adt/arrayfuncs.c:2852 utils/adt/arrayfuncs.c:2947 #, c-format msgid "source array too small" msgstr "원본 배열이 너무 작습니다." -#: utils/adt/arrayfuncs.c:3499 +#: utils/adt/arrayfuncs.c:3500 #, c-format msgid "null array element not allowed in this context" msgstr "이 구문에서는 배열의 null 요소를 허용하지 않습니다" -#: utils/adt/arrayfuncs.c:3601 utils/adt/arrayfuncs.c:3772 -#: utils/adt/arrayfuncs.c:4123 +#: utils/adt/arrayfuncs.c:3602 utils/adt/arrayfuncs.c:3773 +#: utils/adt/arrayfuncs.c:4129 #, c-format msgid "cannot compare arrays of different element types" msgstr "배열 요소 자료형이 서로 틀린 배열은 비교할 수 없습니다." -#: utils/adt/arrayfuncs.c:3948 utils/adt/rangetypes.c:1254 +#: utils/adt/arrayfuncs.c:3951 utils/adt/rangetypes.c:1254 #: utils/adt/rangetypes.c:1318 #, c-format msgid "could not identify a hash function for type %s" msgstr "%s 자료형에서 사용할 해시 함수를 찾을 수 없습니다." -#: utils/adt/arrayfuncs.c:4040 +#: utils/adt/arrayfuncs.c:4044 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "%s 자료형에서 사용할 확장된 해시 함수를 찾을 수 없습니다." -#: utils/adt/arrayfuncs.c:5215 +#: utils/adt/arrayfuncs.c:5221 #, c-format msgid "data type %s is not an array type" msgstr "%s 자료형은 배열이 아닙니다." -#: utils/adt/arrayfuncs.c:5270 +#: utils/adt/arrayfuncs.c:5276 #, c-format msgid "cannot accumulate null arrays" msgstr "null 배열을 누적할 수 없음" -#: utils/adt/arrayfuncs.c:5298 +#: utils/adt/arrayfuncs.c:5304 #, c-format msgid "cannot accumulate empty arrays" msgstr "빈 배열을 누적할 수 없음" -#: utils/adt/arrayfuncs.c:5327 utils/adt/arrayfuncs.c:5333 +#: utils/adt/arrayfuncs.c:5331 utils/adt/arrayfuncs.c:5337 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "배열 차수가 서로 틀린 배열은 누적할 수 없음" -#: utils/adt/arrayfuncs.c:5699 utils/adt/arrayfuncs.c:5739 +#: utils/adt/arrayfuncs.c:5701 utils/adt/arrayfuncs.c:5741 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "차원 배열 또는 하한 배열은 NULL일 수 없음" -#: utils/adt/arrayfuncs.c:5802 utils/adt/arrayfuncs.c:5828 +#: utils/adt/arrayfuncs.c:5804 utils/adt/arrayfuncs.c:5830 #, c-format msgid "Dimension array must be one dimensional." msgstr "차원 배열은 일차원 배열이어야 합니다." -#: utils/adt/arrayfuncs.c:5807 utils/adt/arrayfuncs.c:5833 +#: utils/adt/arrayfuncs.c:5809 utils/adt/arrayfuncs.c:5835 #, c-format msgid "dimension values cannot be null" msgstr "차원 값은 null일 수 없음" -#: utils/adt/arrayfuncs.c:5839 +#: utils/adt/arrayfuncs.c:5841 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "하한 배열의 크기가 차원 배열과 다릅니다." -#: utils/adt/arrayfuncs.c:6115 +#: utils/adt/arrayfuncs.c:6117 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "다차원 배열에서 요소 삭제기능은 지원되지 않음" -#: utils/adt/arrayfuncs.c:6392 +#: utils/adt/arrayfuncs.c:6394 #, c-format msgid "thresholds must be one-dimensional array" msgstr "threshold 값은 1차원 배열이어야 합니다." -#: utils/adt/arrayfuncs.c:6397 +#: utils/adt/arrayfuncs.c:6399 #, c-format msgid "thresholds array must not contain NULLs" msgstr "threshold 배열에는 null이 포함되지 않아야 함" @@ -22033,32 +22586,32 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "%s 인코딩을 ASCII 인코딩으로의 변환은 지원하지 않습니다." #. translator: first %s is inet or cidr -#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3773 -#: utils/adt/float.c:168 utils/adt/float.c:252 utils/adt/float.c:276 -#: utils/adt/float.c:390 utils/adt/float.c:474 utils/adt/float.c:501 +#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3757 +#: utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:295 +#: utils/adt/float.c:412 utils/adt/float.c:497 utils/adt/float.c:525 #: utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 #: utils/adt/geo_ops.c:274 utils/adt/geo_ops.c:316 utils/adt/geo_ops.c:326 #: utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1378 utils/adt/geo_ops.c:1413 -#: utils/adt/geo_ops.c:1421 utils/adt/geo_ops.c:3360 utils/adt/geo_ops.c:4526 -#: utils/adt/geo_ops.c:4541 utils/adt/geo_ops.c:4548 utils/adt/int8.c:128 +#: utils/adt/geo_ops.c:1421 utils/adt/geo_ops.c:3476 utils/adt/geo_ops.c:4645 +#: utils/adt/geo_ops.c:4660 utils/adt/geo_ops.c:4667 utils/adt/int8.c:126 #: utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 #: utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 -#: utils/adt/mac8.c:221 utils/adt/network.c:74 utils/adt/numeric.c:607 -#: utils/adt/numeric.c:634 utils/adt/numeric.c:5806 utils/adt/numeric.c:5830 -#: utils/adt/numeric.c:5854 utils/adt/numeric.c:6684 utils/adt/numeric.c:6710 -#: utils/adt/numutils.c:52 utils/adt/numutils.c:62 utils/adt/numutils.c:106 -#: utils/adt/numutils.c:182 utils/adt/numutils.c:258 utils/adt/oid.c:44 +#: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:601 +#: utils/adt/numeric.c:628 utils/adt/numeric.c:6001 utils/adt/numeric.c:6025 +#: utils/adt/numeric.c:6049 utils/adt/numeric.c:6882 utils/adt/numeric.c:6908 +#: utils/adt/numutils.c:116 utils/adt/numutils.c:126 utils/adt/numutils.c:170 +#: utils/adt/numutils.c:246 utils/adt/numutils.c:322 utils/adt/oid.c:44 #: utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 -#: utils/adt/pg_lsn.c:70 utils/adt/tid.c:73 utils/adt/tid.c:81 -#: utils/adt/tid.c:89 utils/adt/timestamp.c:479 utils/adt/txid.c:410 -#: utils/adt/uuid.c:136 +#: utils/adt/pg_lsn.c:73 utils/adt/tid.c:74 utils/adt/tid.c:82 +#: utils/adt/tid.c:90 utils/adt/timestamp.c:494 utils/adt/uuid.c:136 +#: utils/adt/xid8funcs.c:346 #, c-format msgid "invalid input syntax for type %s: \"%s\"" msgstr "%s 자료형 대한 잘못된 입력: \"%s\"" #: utils/adt/cash.c:215 utils/adt/cash.c:240 utils/adt/cash.c:250 -#: utils/adt/cash.c:290 utils/adt/int8.c:120 utils/adt/numutils.c:76 -#: utils/adt/numutils.c:83 utils/adt/numutils.c:176 utils/adt/numutils.c:252 +#: utils/adt/cash.c:290 utils/adt/int8.c:118 utils/adt/numutils.c:140 +#: utils/adt/numutils.c:147 utils/adt/numutils.c:240 utils/adt/numutils.c:316 #: utils/adt/oid.c:70 utils/adt/oid.c:109 #, c-format msgid "value \"%s\" is out of range for type %s" @@ -22066,12 +22619,12 @@ msgstr "입력한 \"%s\" 값은 %s 자료형 범위를 초과했습니다" #: utils/adt/cash.c:652 utils/adt/cash.c:702 utils/adt/cash.c:753 #: utils/adt/cash.c:802 utils/adt/cash.c:854 utils/adt/cash.c:904 -#: utils/adt/int.c:824 utils/adt/int.c:940 utils/adt/int.c:1020 -#: utils/adt/int.c:1082 utils/adt/int.c:1120 utils/adt/int.c:1148 -#: utils/adt/int8.c:595 utils/adt/int8.c:653 utils/adt/int8.c:853 -#: utils/adt/int8.c:933 utils/adt/int8.c:995 utils/adt/int8.c:1075 -#: utils/adt/numeric.c:7248 utils/adt/numeric.c:7537 utils/adt/numeric.c:8549 -#: utils/adt/timestamp.c:3257 +#: utils/adt/float.c:104 utils/adt/int.c:824 utils/adt/int.c:940 +#: utils/adt/int.c:1020 utils/adt/int.c:1082 utils/adt/int.c:1120 +#: utils/adt/int.c:1148 utils/adt/int8.c:593 utils/adt/int8.c:651 +#: utils/adt/int8.c:978 utils/adt/int8.c:1058 utils/adt/int8.c:1120 +#: utils/adt/int8.c:1200 utils/adt/numeric.c:7446 utils/adt/numeric.c:7736 +#: utils/adt/numeric.c:9318 utils/adt/timestamp.c:3264 #, c-format msgid "division by zero" msgstr "0으로는 나눌수 없습니다." @@ -22081,161 +22634,162 @@ msgstr "0으로는 나눌수 없습니다." msgid "\"char\" out of range" msgstr "\"char\" 범위를 벗어났습니다." -#: utils/adt/date.c:65 utils/adt/timestamp.c:95 utils/adt/varbit.c:104 -#: utils/adt/varchar.c:49 +#: utils/adt/date.c:61 utils/adt/timestamp.c:95 utils/adt/varbit.c:104 +#: utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "잘못된 자료형 한정자" -#: utils/adt/date.c:77 +#: utils/adt/date.c:73 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "TIME(%d)%s 정밀도로 음수를 사용할 수 없습니다" -#: utils/adt/date.c:83 +#: utils/adt/date.c:79 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "TIME(%d)%s 정밀도는 최대값(%d)으로 줄였습니다" -#: utils/adt/date.c:162 utils/adt/date.c:170 utils/adt/formatting.c:3726 -#: utils/adt/formatting.c:3735 +#: utils/adt/date.c:158 utils/adt/date.c:166 utils/adt/formatting.c:4210 +#: utils/adt/formatting.c:4219 utils/adt/formatting.c:4325 +#: utils/adt/formatting.c:4335 #, c-format msgid "date out of range: \"%s\"" msgstr "날짜 범위가 벗어났음: \"%s\"" -#: utils/adt/date.c:217 utils/adt/date.c:529 utils/adt/date.c:553 -#: utils/adt/xml.c:2228 +#: utils/adt/date.c:213 utils/adt/date.c:525 utils/adt/date.c:549 +#: utils/adt/xml.c:2210 #, c-format msgid "date out of range" msgstr "날짜가 범위를 벗어남" -#: utils/adt/date.c:263 utils/adt/timestamp.c:559 +#: utils/adt/date.c:259 utils/adt/timestamp.c:574 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "날짜 필드의 값이 범위를 벗어남: %d-%02d-%02d" -#: utils/adt/date.c:270 utils/adt/date.c:279 utils/adt/timestamp.c:565 +#: utils/adt/date.c:266 utils/adt/date.c:275 utils/adt/timestamp.c:580 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "날짜 범위가 벗어났음: %d-%02d-%02d" -#: utils/adt/date.c:317 utils/adt/date.c:340 utils/adt/date.c:366 -#: utils/adt/date.c:1110 utils/adt/date.c:1156 utils/adt/date.c:1657 -#: utils/adt/date.c:1688 utils/adt/date.c:1717 utils/adt/date.c:2549 -#: utils/adt/datetime.c:1663 utils/adt/formatting.c:3592 -#: utils/adt/formatting.c:3624 utils/adt/formatting.c:3701 -#: utils/adt/json.c:1621 utils/adt/json.c:1641 utils/adt/timestamp.c:222 -#: utils/adt/timestamp.c:254 utils/adt/timestamp.c:687 -#: utils/adt/timestamp.c:696 utils/adt/timestamp.c:774 -#: utils/adt/timestamp.c:807 utils/adt/timestamp.c:2836 -#: utils/adt/timestamp.c:2857 utils/adt/timestamp.c:2870 -#: utils/adt/timestamp.c:2879 utils/adt/timestamp.c:2887 -#: utils/adt/timestamp.c:2942 utils/adt/timestamp.c:2965 -#: utils/adt/timestamp.c:2978 utils/adt/timestamp.c:2989 -#: utils/adt/timestamp.c:2997 utils/adt/timestamp.c:3657 -#: utils/adt/timestamp.c:3782 utils/adt/timestamp.c:3823 -#: utils/adt/timestamp.c:3913 utils/adt/timestamp.c:3957 -#: utils/adt/timestamp.c:4060 utils/adt/timestamp.c:4545 -#: utils/adt/timestamp.c:4741 utils/adt/timestamp.c:5068 -#: utils/adt/timestamp.c:5082 utils/adt/timestamp.c:5087 -#: utils/adt/timestamp.c:5101 utils/adt/timestamp.c:5134 -#: utils/adt/timestamp.c:5183 utils/adt/timestamp.c:5190 -#: utils/adt/timestamp.c:5223 utils/adt/timestamp.c:5227 -#: utils/adt/timestamp.c:5296 utils/adt/timestamp.c:5300 -#: utils/adt/timestamp.c:5314 utils/adt/timestamp.c:5348 utils/adt/xml.c:2250 -#: utils/adt/xml.c:2257 utils/adt/xml.c:2277 utils/adt/xml.c:2284 +#: utils/adt/date.c:313 utils/adt/date.c:336 utils/adt/date.c:362 +#: utils/adt/date.c:1170 utils/adt/date.c:1216 utils/adt/date.c:1772 +#: utils/adt/date.c:1803 utils/adt/date.c:1832 utils/adt/date.c:2664 +#: utils/adt/datetime.c:1655 utils/adt/formatting.c:4067 +#: utils/adt/formatting.c:4099 utils/adt/formatting.c:4179 +#: utils/adt/formatting.c:4301 utils/adt/json.c:418 utils/adt/json.c:457 +#: utils/adt/timestamp.c:222 utils/adt/timestamp.c:254 +#: utils/adt/timestamp.c:692 utils/adt/timestamp.c:701 +#: utils/adt/timestamp.c:779 utils/adt/timestamp.c:812 +#: utils/adt/timestamp.c:2843 utils/adt/timestamp.c:2864 +#: utils/adt/timestamp.c:2877 utils/adt/timestamp.c:2886 +#: utils/adt/timestamp.c:2894 utils/adt/timestamp.c:2949 +#: utils/adt/timestamp.c:2972 utils/adt/timestamp.c:2985 +#: utils/adt/timestamp.c:2996 utils/adt/timestamp.c:3004 +#: utils/adt/timestamp.c:3664 utils/adt/timestamp.c:3789 +#: utils/adt/timestamp.c:3830 utils/adt/timestamp.c:3920 +#: utils/adt/timestamp.c:3964 utils/adt/timestamp.c:4067 +#: utils/adt/timestamp.c:4552 utils/adt/timestamp.c:4748 +#: utils/adt/timestamp.c:5075 utils/adt/timestamp.c:5089 +#: utils/adt/timestamp.c:5094 utils/adt/timestamp.c:5108 +#: utils/adt/timestamp.c:5141 utils/adt/timestamp.c:5218 +#: utils/adt/timestamp.c:5259 utils/adt/timestamp.c:5263 +#: utils/adt/timestamp.c:5332 utils/adt/timestamp.c:5336 +#: utils/adt/timestamp.c:5350 utils/adt/timestamp.c:5384 utils/adt/xml.c:2232 +#: utils/adt/xml.c:2239 utils/adt/xml.c:2259 utils/adt/xml.c:2266 #, c-format msgid "timestamp out of range" msgstr "타임스탬프 범위를 벗어남" -#: utils/adt/date.c:504 +#: utils/adt/date.c:500 #, c-format msgid "cannot subtract infinite dates" msgstr "무한 날짜를 뺄 수 없음" -#: utils/adt/date.c:582 utils/adt/date.c:613 utils/adt/date.c:631 -#: utils/adt/date.c:2586 utils/adt/date.c:2596 +#: utils/adt/date.c:589 utils/adt/date.c:646 utils/adt/date.c:680 +#: utils/adt/date.c:2701 utils/adt/date.c:2711 #, c-format msgid "date out of range for timestamp" msgstr "날짜가 타임스탬프 범위를 벗어남" -#: utils/adt/date.c:1270 utils/adt/date.c:2044 +#: utils/adt/date.c:1389 utils/adt/date.c:2159 utils/adt/formatting.c:4387 #, c-format msgid "time out of range" msgstr "시간 범위를 벗어남" -#: utils/adt/date.c:1326 utils/adt/timestamp.c:584 +#: utils/adt/date.c:1441 utils/adt/timestamp.c:589 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "시간 필드의 값이 범위를 벗어남: %d:%02d:%02g" -#: utils/adt/date.c:1846 utils/adt/date.c:2348 utils/adt/float.c:1046 -#: utils/adt/float.c:1115 utils/adt/int.c:616 utils/adt/int.c:663 -#: utils/adt/int.c:698 utils/adt/int8.c:494 utils/adt/numeric.c:2203 -#: utils/adt/timestamp.c:3306 utils/adt/timestamp.c:3337 -#: utils/adt/timestamp.c:3368 +#: utils/adt/date.c:1961 utils/adt/date.c:2463 utils/adt/float.c:1071 +#: utils/adt/float.c:1140 utils/adt/int.c:616 utils/adt/int.c:663 +#: utils/adt/int.c:698 utils/adt/int8.c:492 utils/adt/numeric.c:2197 +#: utils/adt/timestamp.c:3313 utils/adt/timestamp.c:3344 +#: utils/adt/timestamp.c:3375 #, c-format msgid "invalid preceding or following size in window function" msgstr "윈도우 함수에서 앞에 오거나 뒤에 따라오는 크기가 잘못됨" -#: utils/adt/date.c:1931 utils/adt/date.c:1944 +#: utils/adt/date.c:2046 utils/adt/date.c:2059 #, c-format msgid "\"time\" units \"%s\" not recognized" msgstr "\"%s\" 는 \"time\" 자료형 단위가 아닙니다." -#: utils/adt/date.c:2052 +#: utils/adt/date.c:2167 #, c-format msgid "time zone displacement out of range" msgstr "타임 존 변위가 범위를 벗어남" -#: utils/adt/date.c:2681 utils/adt/date.c:2694 +#: utils/adt/date.c:2796 utils/adt/date.c:2809 #, c-format msgid "\"time with time zone\" units \"%s\" not recognized" msgstr "\"%s\" 는 \"time with time zone\" 자료형의 단위가 아닙니다." -#: utils/adt/date.c:2767 utils/adt/datetime.c:909 utils/adt/datetime.c:1821 -#: utils/adt/datetime.c:4617 utils/adt/timestamp.c:498 -#: utils/adt/timestamp.c:525 utils/adt/timestamp.c:4143 -#: utils/adt/timestamp.c:5093 utils/adt/timestamp.c:5306 +#: utils/adt/date.c:2882 utils/adt/datetime.c:906 utils/adt/datetime.c:1813 +#: utils/adt/datetime.c:4601 utils/adt/timestamp.c:513 +#: utils/adt/timestamp.c:540 utils/adt/timestamp.c:4150 +#: utils/adt/timestamp.c:5100 utils/adt/timestamp.c:5342 #, c-format msgid "time zone \"%s\" not recognized" msgstr "\"%s\" 이름의 시간대는 없습니다." -#: utils/adt/date.c:2799 utils/adt/timestamp.c:5123 utils/adt/timestamp.c:5337 +#: utils/adt/date.c:2914 utils/adt/timestamp.c:5130 utils/adt/timestamp.c:5373 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "" "\"%s\" 시간대 간격(interval time zone) 값으로 달(month) 또는 일(day)을 포함" "할 수 없습니다" -#: utils/adt/datetime.c:3746 utils/adt/datetime.c:3753 +#: utils/adt/datetime.c:3730 utils/adt/datetime.c:3737 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "날짜/시간 필드의 값이 범위를 벗어남: \"%s\"" -#: utils/adt/datetime.c:3755 +#: utils/adt/datetime.c:3739 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." msgstr "날짜 표현 방식(\"datestyle\")을 다른 것으로 사용하고 있는 듯 합니다." -#: utils/adt/datetime.c:3760 +#: utils/adt/datetime.c:3744 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "interval 필드의 값이 범위를 벗어남: \"%s\"" -#: utils/adt/datetime.c:3766 +#: utils/adt/datetime.c:3750 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "표준시간대 범위를 벗어남: \"%s\"" -#: utils/adt/datetime.c:4619 +#: utils/adt/datetime.c:4603 #, c-format msgid "" "This time zone name appears in the configuration file for time zone " "abbreviation \"%s\"." msgstr "" -#: utils/adt/datum.c:88 utils/adt/datum.c:100 +#: utils/adt/datum.c:89 utils/adt/datum.c:101 #, c-format msgid "invalid Datum pointer" msgstr "잘못된 Datum 포인터" @@ -22261,52 +22815,55 @@ msgstr "" msgid "type %s is not a domain" msgstr "%s 자료형은 도메인이 아닙니다" -#: utils/adt/encode.c:55 utils/adt/encode.c:91 +#: utils/adt/encode.c:64 utils/adt/encode.c:112 #, c-format msgid "unrecognized encoding: \"%s\"" msgstr "알 수 없는 인코딩: \"%s\"" -#: utils/adt/encode.c:150 +#: utils/adt/encode.c:78 +#, c-format +msgid "result of encoding conversion is too large" +msgstr "인코딩 변환 결과가 너무 깁니다" + +#: utils/adt/encode.c:126 +#, c-format +msgid "result of decoding conversion is too large" +msgstr "디코딩 변환 결과가 너무 깁니다" + +#: utils/adt/encode.c:184 #, c-format msgid "invalid hexadecimal digit: \"%c\"" msgstr "잘못된 16진수: \"%c\"" -#: utils/adt/encode.c:178 +#: utils/adt/encode.c:212 #, c-format msgid "invalid hexadecimal data: odd number of digits" msgstr "잘못된 16진수 데이터: 데이터의 길이가 홀수 입니다." -#: utils/adt/encode.c:295 +#: utils/adt/encode.c:329 #, c-format msgid "unexpected \"=\" while decoding base64 sequence" msgstr "base64 자료를 디코딩 하는 중 예상치 못한 \"=\" 문자 발견" -#: utils/adt/encode.c:307 +#: utils/adt/encode.c:341 #, c-format msgid "invalid symbol \"%c\" while decoding base64 sequence" msgstr "base64 자료를 디코딩 하는 중 잘못된 \"%c\" 기호 발견" -#: utils/adt/encode.c:327 +#: utils/adt/encode.c:361 #, c-format msgid "invalid base64 end sequence" msgstr "base64 마침 조합이 잘못되었음" -#: utils/adt/encode.c:328 +#: utils/adt/encode.c:362 #, c-format msgid "Input data is missing padding, is truncated, or is otherwise corrupted." msgstr "입력값에 여백 처리값이 빠졌거나, 자료가 손상되었습니다." -#: utils/adt/encode.c:442 utils/adt/encode.c:507 utils/adt/json.c:786 -#: utils/adt/json.c:826 utils/adt/json.c:842 utils/adt/json.c:854 -#: utils/adt/json.c:864 utils/adt/json.c:915 utils/adt/json.c:947 -#: utils/adt/json.c:966 utils/adt/json.c:978 utils/adt/json.c:990 -#: utils/adt/json.c:1135 utils/adt/json.c:1149 utils/adt/json.c:1160 -#: utils/adt/json.c:1168 utils/adt/json.c:1176 utils/adt/json.c:1184 -#: utils/adt/json.c:1192 utils/adt/json.c:1200 utils/adt/json.c:1208 -#: utils/adt/json.c:1216 utils/adt/json.c:1246 utils/adt/varlena.c:318 -#: utils/adt/varlena.c:359 jsonpath_gram.y:514 jsonpath_scan.l:526 -#: jsonpath_scan.l:542 jsonpath_scan.l:553 jsonpath_scan.l:563 -#: jsonpath_scan.l:605 +#: utils/adt/encode.c:476 utils/adt/encode.c:541 utils/adt/jsonfuncs.c:619 +#: utils/adt/varlena.c:319 utils/adt/varlena.c:360 jsonpath_gram.y:528 +#: jsonpath_scan.l:519 jsonpath_scan.l:530 jsonpath_scan.l:540 +#: jsonpath_scan.l:582 #, c-format msgid "invalid input syntax for type %s" msgstr "%s 자료형에 대한 잘못된 입력 구문" @@ -22343,334 +22900,399 @@ msgstr "실제 열거형의 자료형을 확인할 수 없음" msgid "enum %s contains no values" msgstr "\"%s\" 열거형 자료에 값이 없음" -#: utils/adt/expandedrecord.c:98 utils/adt/expandedrecord.c:230 -#: utils/cache/typcache.c:1574 utils/cache/typcache.c:1730 -#: utils/cache/typcache.c:1860 utils/fmgr/funcapi.c:415 +#: utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 +#: utils/cache/typcache.c:1632 utils/cache/typcache.c:1788 +#: utils/cache/typcache.c:1918 utils/fmgr/funcapi.c:456 #, c-format msgid "type %s is not composite" msgstr "%s 자료형은 복합 자료형이 아닙니다" -#: utils/adt/float.c:246 +#: utils/adt/float.c:88 +#, c-format +msgid "value out of range: overflow" +msgstr "값이 범위를 벗어남: 오버플로" + +#: utils/adt/float.c:96 +#, c-format +msgid "value out of range: underflow" +msgstr "값이 범위를 벗어남: 언더플로" + +#: utils/adt/float.c:265 #, c-format msgid "\"%s\" is out of range for type real" msgstr "\"%s\"는 real 자료형의 범위를 벗어납니다." -#: utils/adt/float.c:466 +#: utils/adt/float.c:489 #, c-format msgid "\"%s\" is out of range for type double precision" msgstr "\"%s\"는 double precision 자료형의 범위를 벗어납니다." -#: utils/adt/float.c:1238 utils/adt/float.c:1312 utils/adt/int.c:336 +#: utils/adt/float.c:1268 utils/adt/float.c:1342 utils/adt/int.c:336 #: utils/adt/int.c:874 utils/adt/int.c:896 utils/adt/int.c:910 #: utils/adt/int.c:924 utils/adt/int.c:956 utils/adt/int.c:1194 -#: utils/adt/int8.c:1188 utils/adt/numeric.c:3358 utils/adt/numeric.c:3367 +#: utils/adt/int8.c:1313 utils/adt/numeric.c:3553 utils/adt/numeric.c:3562 #, c-format msgid "smallint out of range" msgstr "smallint의 범위를 벗어났습니다." -#: utils/adt/float.c:1438 utils/adt/numeric.c:7970 +#: utils/adt/float.c:1468 utils/adt/numeric.c:8329 #, c-format msgid "cannot take square root of a negative number" msgstr "음수의 제곱근을 구할 수 없습니다." -#: utils/adt/float.c:1499 utils/adt/numeric.c:3138 +#: utils/adt/float.c:1536 utils/adt/numeric.c:3239 #, c-format msgid "zero raised to a negative power is undefined" msgstr "0의 음수 거듭제곱이 정의되어 있지 않음" -#: utils/adt/float.c:1503 utils/adt/numeric.c:3144 +#: utils/adt/float.c:1540 utils/adt/numeric.c:3245 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "음수의 비정수 거듭제곱을 계산하면 복잡한 결과가 생성됨" -#: utils/adt/float.c:1569 utils/adt/float.c:1599 utils/adt/numeric.c:8236 +#: utils/adt/float.c:1614 utils/adt/float.c:1647 utils/adt/numeric.c:8993 #, c-format msgid "cannot take logarithm of zero" msgstr "0의 대수를 구할 수 없습니다." -#: utils/adt/float.c:1573 utils/adt/float.c:1603 utils/adt/numeric.c:8240 +#: utils/adt/float.c:1618 utils/adt/float.c:1651 utils/adt/numeric.c:8997 #, c-format msgid "cannot take logarithm of a negative number" msgstr "음수의 대수를 구할 수 없습니다." -#: utils/adt/float.c:1633 utils/adt/float.c:1663 utils/adt/float.c:1755 -#: utils/adt/float.c:1781 utils/adt/float.c:1808 utils/adt/float.c:1834 -#: utils/adt/float.c:1981 utils/adt/float.c:2016 utils/adt/float.c:2180 -#: utils/adt/float.c:2234 utils/adt/float.c:2298 utils/adt/float.c:2353 -#: utils/adt/float.c:2541 utils/adt/float.c:2566 +#: utils/adt/float.c:1684 utils/adt/float.c:1715 utils/adt/float.c:1810 +#: utils/adt/float.c:1837 utils/adt/float.c:1865 utils/adt/float.c:1892 +#: utils/adt/float.c:2039 utils/adt/float.c:2076 utils/adt/float.c:2246 +#: utils/adt/float.c:2302 utils/adt/float.c:2367 utils/adt/float.c:2424 +#: utils/adt/float.c:2615 utils/adt/float.c:2639 #, c-format msgid "input is out of range" msgstr "입력값이 범위를 벗어났습니다." -#: utils/adt/float.c:2634 +#: utils/adt/float.c:2706 #, c-format msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "" -#: utils/adt/float.c:2852 utils/adt/float.c:2928 utils/adt/float.c:3151 -#, c-format -msgid "value out of range: overflow" -msgstr "값이 범위를 벗어남: 오버플로" - -#: utils/adt/float.c:3833 utils/adt/numeric.c:1515 +#: utils/adt/float.c:3938 utils/adt/numeric.c:1509 #, c-format msgid "count must be greater than zero" msgstr "카운트 값은 0 보다 커야합니다" -#: utils/adt/float.c:3838 utils/adt/numeric.c:1522 +#: utils/adt/float.c:3943 utils/adt/numeric.c:1516 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "피연산자, 하한 및 상한은 NaN일 수 없음" -#: utils/adt/float.c:3844 +#: utils/adt/float.c:3949 #, c-format msgid "lower and upper bounds must be finite" msgstr "하한 및 상한은 유한한 값이어야 함" -#: utils/adt/float.c:3878 utils/adt/numeric.c:1535 +#: utils/adt/float.c:3983 utils/adt/numeric.c:1529 #, c-format msgid "lower bound cannot equal upper bound" msgstr "하한값은 상한값과 같을 수 없습니다" -#: utils/adt/formatting.c:493 +#: utils/adt/formatting.c:532 #, c-format msgid "invalid format specification for an interval value" msgstr "간격 값에 대한 형식 지정이 잘못됨" -#: utils/adt/formatting.c:494 +#: utils/adt/formatting.c:533 #, c-format msgid "Intervals are not tied to specific calendar dates." msgstr "간격이 특정 달력 날짜에 연결되어 있지 않습니다." -#: utils/adt/formatting.c:1077 +#: utils/adt/formatting.c:1157 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "" -#: utils/adt/formatting.c:1085 +#: utils/adt/formatting.c:1165 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "???\"9\"는 \"PR\" 앞이어야 한다." -#: utils/adt/formatting.c:1101 +#: utils/adt/formatting.c:1181 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "???\"0\"은 \"PR\" 앞이어야 한다." -#: utils/adt/formatting.c:1128 +#: utils/adt/formatting.c:1208 #, c-format msgid "multiple decimal points" msgstr "???여러개의 소숫점" -#: utils/adt/formatting.c:1132 utils/adt/formatting.c:1215 +#: utils/adt/formatting.c:1212 utils/adt/formatting.c:1295 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "\"V\" 와 소숫점을 함께 쓸 수 없습니다." -#: utils/adt/formatting.c:1144 +#: utils/adt/formatting.c:1224 #, c-format msgid "cannot use \"S\" twice" msgstr "\"S\"를 두 번 사용할 수 없음" -#: utils/adt/formatting.c:1148 +#: utils/adt/formatting.c:1228 #, c-format msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" msgstr "\"S\" 와 \"PL\"/\"MI\"/\"SG\"/\"PR\" 를 함께 쓸 수 없습니다." -#: utils/adt/formatting.c:1168 +#: utils/adt/formatting.c:1248 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "\"S\" 와 \"MI\" 를 함께 쓸 수 없습니다." -#: utils/adt/formatting.c:1178 +#: utils/adt/formatting.c:1258 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "\"S\" 와 \"PL\" 를 함께 쓸 수 없습니다." -#: utils/adt/formatting.c:1188 +#: utils/adt/formatting.c:1268 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "\"S\" 와 \"SG\" 를 함께 쓸 수 없습니다." -#: utils/adt/formatting.c:1197 +#: utils/adt/formatting.c:1277 #, c-format msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" msgstr "\"PR\" 와 \"S\"/\"PL\"/\"MI\"/\"SG\" 를 함께 쓸 수 없습니다." -#: utils/adt/formatting.c:1223 +#: utils/adt/formatting.c:1303 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "\"EEEE\"를 두 번 사용할 수 없음" -#: utils/adt/formatting.c:1229 +#: utils/adt/formatting.c:1309 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "\"EEEE\"는 다른 포맷과 호환하지 않습니다" -#: utils/adt/formatting.c:1230 +#: utils/adt/formatting.c:1310 #, c-format msgid "" "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "" -#: utils/adt/formatting.c:1417 +#: utils/adt/formatting.c:1394 +#, c-format +msgid "invalid datetime format separator: \"%s\"" +msgstr "잘못된 datetime 양식 구분자: \"%s\"" + +#: utils/adt/formatting.c:1522 #, c-format msgid "\"%s\" is not a number" msgstr "\"%s\"는 숫자가 아닙니다." -#: utils/adt/formatting.c:1495 +#: utils/adt/formatting.c:1600 #, c-format msgid "case conversion failed: %s" msgstr "잘못된 형 변환 규칙: %s" -#: utils/adt/formatting.c:1560 utils/adt/formatting.c:1684 -#: utils/adt/formatting.c:1809 +#: utils/adt/formatting.c:1665 utils/adt/formatting.c:1789 +#: utils/adt/formatting.c:1914 #, c-format msgid "could not determine which collation to use for %s function" msgstr "%s 함수에서 사용할 정렬규칙(collation)을 결정할 수 없음" -#: utils/adt/formatting.c:2179 +#: utils/adt/formatting.c:2286 #, c-format msgid "invalid combination of date conventions" msgstr "날짜 변환을 위한 잘못된 조합" -#: utils/adt/formatting.c:2180 +#: utils/adt/formatting.c:2287 #, c-format msgid "" "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr "" "형식 템플릿에 그레고리오력과 ISO week date 변환을 함께 사용하지 마십시오." -#: utils/adt/formatting.c:2197 +#: utils/adt/formatting.c:2310 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "형식 문자열에서 \"%s\" 필드의 값이 충돌함" -#: utils/adt/formatting.c:2199 +#: utils/adt/formatting.c:2313 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "이 값은 동일한 필드 형식의 이전 설정과 모순됩니다." -#: utils/adt/formatting.c:2263 +#: utils/adt/formatting.c:2384 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "소스 문자열이 너무 짧아서 \"%s\" 형식 필드에 사용할 수 없음" -#: utils/adt/formatting.c:2265 +#: utils/adt/formatting.c:2387 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "필드에 %d자가 필요한데 %d자만 남았습니다." -#: utils/adt/formatting.c:2268 utils/adt/formatting.c:2282 +#: utils/adt/formatting.c:2390 utils/adt/formatting.c:2405 #, c-format msgid "" "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "소스 문자열이 고정 너비가 아닌 경우 \"FM\" 한정자를 사용해 보십시오." -#: utils/adt/formatting.c:2278 utils/adt/formatting.c:2291 -#: utils/adt/formatting.c:2421 +#: utils/adt/formatting.c:2400 utils/adt/formatting.c:2414 +#: utils/adt/formatting.c:2637 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "\"%s\" 값은 \"%s\"에 유효하지 않음" -#: utils/adt/formatting.c:2280 +#: utils/adt/formatting.c:2402 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "필드에 %d자가 필요한데 %d자만 구문 분석할 수 있습니다." -#: utils/adt/formatting.c:2293 +#: utils/adt/formatting.c:2416 #, c-format msgid "Value must be an integer." msgstr "값은 정수여야 합니다." -#: utils/adt/formatting.c:2298 +#: utils/adt/formatting.c:2421 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "소스 문자열의 \"%s\" 값이 범위를 벗어남" -#: utils/adt/formatting.c:2300 +#: utils/adt/formatting.c:2423 #, c-format msgid "Value must be in the range %d to %d." msgstr "값은 %d에서 %d 사이의 범위에 있어야 합니다." -#: utils/adt/formatting.c:2423 +#: utils/adt/formatting.c:2639 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "지정된 값이 이 필드에 허용되는 값과 일치하지 않습니다." -#: utils/adt/formatting.c:2621 utils/adt/formatting.c:2641 -#: utils/adt/formatting.c:2661 utils/adt/formatting.c:2681 -#: utils/adt/formatting.c:2700 utils/adt/formatting.c:2719 -#: utils/adt/formatting.c:2743 utils/adt/formatting.c:2761 -#: utils/adt/formatting.c:2779 utils/adt/formatting.c:2797 -#: utils/adt/formatting.c:2814 utils/adt/formatting.c:2831 +#: utils/adt/formatting.c:2856 utils/adt/formatting.c:2876 +#: utils/adt/formatting.c:2896 utils/adt/formatting.c:2916 +#: utils/adt/formatting.c:2935 utils/adt/formatting.c:2954 +#: utils/adt/formatting.c:2978 utils/adt/formatting.c:2996 +#: utils/adt/formatting.c:3014 utils/adt/formatting.c:3032 +#: utils/adt/formatting.c:3049 utils/adt/formatting.c:3066 #, c-format msgid "localized string format value too long" msgstr "" -#: utils/adt/formatting.c:3173 +#: utils/adt/formatting.c:3300 +#, c-format +msgid "unmatched format separator \"%c\"" +msgstr "" + +#: utils/adt/formatting.c:3361 +#, c-format +msgid "unmatched format character \"%s\"" +msgstr "짝이 안 맞는 \"%s\" 문자" + +#: utils/adt/formatting.c:3467 utils/adt/formatting.c:3811 #, c-format msgid "formatting field \"%s\" is only supported in to_char" msgstr "\"%s\" 필드 양식은 to_char 함수에서만 지원합니다." -#: utils/adt/formatting.c:3314 +#: utils/adt/formatting.c:3642 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "\"Y,YYY\"에 대한 입력 문자열이 잘못됨" -#: utils/adt/formatting.c:3844 +#: utils/adt/formatting.c:3728 +#, c-format +msgid "input string is too short for datetime format" +msgstr "입력 문자열이 datetime 양식용으로는 너무 짧습니다" + +#: utils/adt/formatting.c:3736 +#, c-format +msgid "trailing characters remain in input string after datetime format" +msgstr "" + +#: utils/adt/formatting.c:4281 +#, c-format +msgid "missing time zone in input string for type timestamptz" +msgstr "" + +#: utils/adt/formatting.c:4287 +#, c-format +msgid "timestamptz out of range" +msgstr "timestamptz 범위를 벗어남" + +#: utils/adt/formatting.c:4315 +#, c-format +msgid "datetime format is zoned but not timed" +msgstr "datetime 양식이 지역시간대값이 있는데, 시간값이 아님" + +#: utils/adt/formatting.c:4367 +#, c-format +msgid "missing time zone in input string for type timetz" +msgstr "" + +#: utils/adt/formatting.c:4373 +#, c-format +msgid "timetz out of range" +msgstr "timetz 범위를 벗어남" + +#: utils/adt/formatting.c:4399 +#, c-format +msgid "datetime format is not dated and not timed" +msgstr "" + +#: utils/adt/formatting.c:4532 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "시간 \"%d\"은(는) 12시간제에 유효하지 않음" -#: utils/adt/formatting.c:3846 +#: utils/adt/formatting.c:4534 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "24시간제를 사용하거나 1에서 12 사이의 시간을 지정하십시오." -#: utils/adt/formatting.c:3952 +#: utils/adt/formatting.c:4645 #, c-format msgid "cannot calculate day of year without year information" msgstr "연도 정보 없이 몇번째 날(day of year) 인지 계산할 수 없습니다." -#: utils/adt/formatting.c:4859 +#: utils/adt/formatting.c:5564 #, c-format msgid "\"EEEE\" not supported for input" msgstr "\"EEEE\" 입력 양식은 지원되지 않습니다." -#: utils/adt/formatting.c:4871 +#: utils/adt/formatting.c:5576 #, c-format msgid "\"RN\" not supported for input" msgstr "\"RN\" 입력 양식은 지원되지 않습니다." -#: utils/adt/genfile.c:81 +#: utils/adt/genfile.c:75 #, c-format msgid "reference to parent directory (\"..\") not allowed" msgstr "상위 디렉터리(\"..\") 참조는 허용되지 않음" -#: utils/adt/genfile.c:92 +#: utils/adt/genfile.c:86 #, c-format msgid "absolute path not allowed" msgstr "절대 경로는 허용하지 않음" -#: utils/adt/genfile.c:97 +#: utils/adt/genfile.c:91 #, c-format msgid "path must be in or below the current directory" msgstr "경로는 현재 디렉터리와 그 하위 디렉터리여야 합니다." -#: utils/adt/genfile.c:144 utils/adt/oracle_compat.c:185 +#: utils/adt/genfile.c:116 utils/adt/oracle_compat.c:185 #: utils/adt/oracle_compat.c:283 utils/adt/oracle_compat.c:759 #: utils/adt/oracle_compat.c:1054 #, c-format msgid "requested length too large" msgstr "요청된 길이가 너무 깁니다" -#: utils/adt/genfile.c:161 +#: utils/adt/genfile.c:133 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "\"%s\" 파일에서 seek 작업을 할 수 없음: %m" -#: utils/adt/genfile.c:221 +#: utils/adt/genfile.c:174 +#, c-format +msgid "file length too large" +msgstr "파일 길이가 너무 깁니다" + +#: utils/adt/genfile.c:251 #, c-format msgid "must be superuser to read files with adminpack 1.0" msgstr "adminpack 1.0 확장 모듈을 사용할 때는 파일을 읽으려면 슈퍼유져여야함" @@ -22685,8 +23307,8 @@ msgstr "선 정의가 잘못됨: A와 B 둘다 0일 수는 없음" msgid "invalid line specification: must be two distinct points" msgstr "선 정의가 잘못된: 두 점은 서로 다른 위치여야 함" -#: utils/adt/geo_ops.c:1399 utils/adt/geo_ops.c:3370 utils/adt/geo_ops.c:4238 -#: utils/adt/geo_ops.c:5129 +#: utils/adt/geo_ops.c:1399 utils/adt/geo_ops.c:3486 utils/adt/geo_ops.c:4354 +#: utils/adt/geo_ops.c:5248 #, c-format msgid "too many points requested" msgstr "너무 많은 점들이 요청되었습니다." @@ -22696,52 +23318,57 @@ msgstr "너무 많은 점들이 요청되었습니다." msgid "invalid number of points in external \"path\" value" msgstr "???\"path\" 의 값에 잘못된 갯수의 point들" -#: utils/adt/geo_ops.c:2459 +#: utils/adt/geo_ops.c:2537 #, c-format msgid "function \"dist_lb\" not implemented" msgstr "\"dist_lb\" 함수는 구현되지 않았습니다." -#: utils/adt/geo_ops.c:2859 +#: utils/adt/geo_ops.c:2556 +#, c-format +msgid "function \"dist_bl\" not implemented" +msgstr "\"dist_bl\" 함수는 구현되지 않았습니다." + +#: utils/adt/geo_ops.c:2975 #, c-format msgid "function \"close_sl\" not implemented" msgstr "\"close_sl\" 함수는 구현되지 않았습니다." -#: utils/adt/geo_ops.c:3006 +#: utils/adt/geo_ops.c:3122 #, c-format msgid "function \"close_lb\" not implemented" msgstr "\"close_lb\" 함수는 구현되지 않았습니다." -#: utils/adt/geo_ops.c:3417 +#: utils/adt/geo_ops.c:3533 #, c-format msgid "invalid number of points in external \"polygon\" value" msgstr "???\"polygon\" 값에 잘못된 갯수의 point들" -#: utils/adt/geo_ops.c:3953 +#: utils/adt/geo_ops.c:4069 #, c-format msgid "function \"poly_distance\" not implemented" msgstr "\"poly_distance\" 함수는 구현되지 않았습니다." -#: utils/adt/geo_ops.c:4330 +#: utils/adt/geo_ops.c:4446 #, c-format msgid "function \"path_center\" not implemented" msgstr "\"path_center\" 함수는 구현되지 않았습니다." -#: utils/adt/geo_ops.c:4347 +#: utils/adt/geo_ops.c:4463 #, c-format msgid "open path cannot be converted to polygon" msgstr "닫히지 않은 path 는 폴리곤으로 변환할 수 없습니다." -#: utils/adt/geo_ops.c:4594 +#: utils/adt/geo_ops.c:4713 #, c-format msgid "invalid radius in external \"circle\" value" msgstr "부적절한 \"circle\" 값의 반지름" -#: utils/adt/geo_ops.c:5115 +#: utils/adt/geo_ops.c:5234 #, c-format msgid "cannot convert circle with radius zero to polygon" msgstr "반지름이 0인 원은 폴리곤으로 변환할 수 없습니다." -#: utils/adt/geo_ops.c:5120 +#: utils/adt/geo_ops.c:5239 #, c-format msgid "must request at least 2 points" msgstr "적어도 2개의 point들이 필요합니다." @@ -22761,354 +23388,264 @@ msgstr "잘못된 int2vector 자료" msgid "oidvector has too many elements" msgstr "oidvector에 너무 많은 요소가 있습니다" -#: utils/adt/int.c:1383 utils/adt/int8.c:1314 utils/adt/numeric.c:1423 -#: utils/adt/timestamp.c:5399 utils/adt/timestamp.c:5480 +#: utils/adt/int.c:1510 utils/adt/int8.c:1439 utils/adt/numeric.c:1417 +#: utils/adt/timestamp.c:5435 utils/adt/timestamp.c:5515 #, c-format msgid "step size cannot equal zero" msgstr "단계 크기는 0일 수 없음" -#: utils/adt/int8.c:529 utils/adt/int8.c:552 utils/adt/int8.c:566 -#: utils/adt/int8.c:580 utils/adt/int8.c:611 utils/adt/int8.c:635 -#: utils/adt/int8.c:690 utils/adt/int8.c:704 utils/adt/int8.c:728 -#: utils/adt/int8.c:741 utils/adt/int8.c:810 utils/adt/int8.c:824 -#: utils/adt/int8.c:838 utils/adt/int8.c:869 utils/adt/int8.c:891 -#: utils/adt/int8.c:905 utils/adt/int8.c:919 utils/adt/int8.c:952 -#: utils/adt/int8.c:966 utils/adt/int8.c:980 utils/adt/int8.c:1011 -#: utils/adt/int8.c:1033 utils/adt/int8.c:1047 utils/adt/int8.c:1061 -#: utils/adt/int8.c:1223 utils/adt/int8.c:1258 utils/adt/numeric.c:3313 +#: utils/adt/int8.c:527 utils/adt/int8.c:550 utils/adt/int8.c:564 +#: utils/adt/int8.c:578 utils/adt/int8.c:609 utils/adt/int8.c:633 +#: utils/adt/int8.c:715 utils/adt/int8.c:783 utils/adt/int8.c:789 +#: utils/adt/int8.c:815 utils/adt/int8.c:829 utils/adt/int8.c:853 +#: utils/adt/int8.c:866 utils/adt/int8.c:935 utils/adt/int8.c:949 +#: utils/adt/int8.c:963 utils/adt/int8.c:994 utils/adt/int8.c:1016 +#: utils/adt/int8.c:1030 utils/adt/int8.c:1044 utils/adt/int8.c:1077 +#: utils/adt/int8.c:1091 utils/adt/int8.c:1105 utils/adt/int8.c:1136 +#: utils/adt/int8.c:1158 utils/adt/int8.c:1172 utils/adt/int8.c:1186 +#: utils/adt/int8.c:1348 utils/adt/int8.c:1383 utils/adt/numeric.c:3508 #: utils/adt/varbit.c:1656 #, c-format msgid "bigint out of range" msgstr "bigint의 범위를 벗어났습니다." -#: utils/adt/int8.c:1271 +#: utils/adt/int8.c:1396 #, c-format msgid "OID out of range" msgstr "OID의 범위를 벗어났습니다." -#: utils/adt/json.c:787 -#, c-format -msgid "Character with value 0x%02x must be escaped." -msgstr "" - -#: utils/adt/json.c:828 -#, c-format -msgid "\"\\u\" must be followed by four hexadecimal digits." -msgstr "\"\\u\" 표기법은 뒤에 4개의 16진수가 와야합니다." - -#: utils/adt/json.c:844 jsonpath_scan.l:543 -#, c-format -msgid "Unicode high surrogate must not follow a high surrogate." -msgstr "" - -#: utils/adt/json.c:855 utils/adt/json.c:865 utils/adt/json.c:917 -#: utils/adt/json.c:979 utils/adt/json.c:991 jsonpath_scan.l:554 -#: jsonpath_scan.l:564 jsonpath_scan.l:606 -#, c-format -msgid "Unicode low surrogate must follow a high surrogate." -msgstr "" - -#: utils/adt/json.c:880 utils/adt/json.c:903 jsonpath_scan.l:501 -#, c-format -msgid "unsupported Unicode escape sequence" -msgstr "지원하지 않는 유니코드 이스케이프 조합" - -#: utils/adt/json.c:881 jsonpath_scan.l:502 -#, c-format -msgid "\\u0000 cannot be converted to text." -msgstr "\\u0000 값은 text 형으로 변환할 수 없음." - -#: utils/adt/json.c:904 jsonpath_scan.l:527 -#, c-format -msgid "" -"Unicode escape values cannot be used for code point values above 007F when " -"the server encoding is not UTF8." -msgstr "" -"서버 인코딩이 UTF8이 아닌 경우 007F보다 큰 코드 지점 값에는 유니코드 이스케이" -"프 값을 사용할 수 없음" - -#: utils/adt/json.c:949 utils/adt/json.c:967 -#, c-format -msgid "Escape sequence \"\\%s\" is invalid." -msgstr "잘못된 이스케이프 조합: \"\\%s\"" - -#: utils/adt/json.c:1136 -#, c-format -msgid "The input string ended unexpectedly." -msgstr "입력 문자열이 예상치 않게 끝났음." - -#: utils/adt/json.c:1150 -#, c-format -msgid "Expected end of input, but found \"%s\"." -msgstr "입력 자료의 끝을 기대했는데, \"%s\" 값이 더 있음." - -#: utils/adt/json.c:1161 -#, c-format -msgid "Expected JSON value, but found \"%s\"." -msgstr "JSON 값을 기대했는데, \"%s\" 값임" - -#: utils/adt/json.c:1169 utils/adt/json.c:1217 -#, c-format -msgid "Expected string, but found \"%s\"." -msgstr "문자열 값을 기대했는데, \"%s\" 값임" - -#: utils/adt/json.c:1177 -#, c-format -msgid "Expected array element or \"]\", but found \"%s\"." -msgstr "\"]\" 가 필요한데 \"%s\"이(가) 있음" - -#: utils/adt/json.c:1185 -#, c-format -msgid "Expected \",\" or \"]\", but found \"%s\"." -msgstr "\",\" 또는 \"]\"가 필요한데 \"%s\"이(가) 있음" - -#: utils/adt/json.c:1193 -#, c-format -msgid "Expected string or \"}\", but found \"%s\"." -msgstr "\"}\"가 필요한데 \"%s\"이(가) 있음" - -#: utils/adt/json.c:1201 -#, c-format -msgid "Expected \":\", but found \"%s\"." -msgstr "\":\"가 필요한데 \"%s\"이(가) 있음" - -#: utils/adt/json.c:1209 -#, c-format -msgid "Expected \",\" or \"}\", but found \"%s\"." -msgstr "\",\" 또는 \"}\"가 필요한데 \"%s\"이(가) 있음" - -#: utils/adt/json.c:1247 -#, c-format -msgid "Token \"%s\" is invalid." -msgstr "잘못된 토큰: \"%s\"" - -#: utils/adt/json.c:1319 -#, c-format -msgid "JSON data, line %d: %s%s%s" -msgstr "JSON 자료, %d 번째 줄: %s%s%s" - -#: utils/adt/json.c:1475 utils/adt/jsonb.c:739 +#: utils/adt/json.c:271 utils/adt/jsonb.c:757 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "" "키 값은 스칼라 형이어야 함. 배열, 복합 자료형, json 형은 사용할 수 없음" -#: utils/adt/json.c:2076 utils/adt/json.c:2086 utils/fmgr/funcapi.c:1549 +#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:1812 #, c-format msgid "could not determine data type for argument %d" msgstr "%d번째 인자의 자료형을 알수가 없습니다." -#: utils/adt/json.c:2110 utils/adt/jsonb.c:1707 +#: utils/adt/json.c:926 utils/adt/jsonb.c:1728 #, c-format msgid "field name must not be null" msgstr "필드 이름이 null 이면 안됩니다" -#: utils/adt/json.c:2194 utils/adt/jsonb.c:1157 +#: utils/adt/json.c:1010 utils/adt/jsonb.c:1178 #, c-format msgid "argument list must have even number of elements" msgstr "인자 목록은 요소수의 짝수개여야 합니다." #. translator: %s is a SQL function name -#: utils/adt/json.c:2196 utils/adt/jsonb.c:1159 +#: utils/adt/json.c:1012 utils/adt/jsonb.c:1180 #, c-format msgid "The arguments of %s must consist of alternating keys and values." msgstr "%s 함수의 인자들은 각각 key, value 쌍으로 있어야 합니다." -#: utils/adt/json.c:2212 +#: utils/adt/json.c:1028 #, c-format msgid "argument %d cannot be null" msgstr "%d 번째 인자는 null 이면 안됩니다" -#: utils/adt/json.c:2213 +#: utils/adt/json.c:1029 #, c-format msgid "Object keys should be text." msgstr "개체 키는 문자열이어야 합니다." -#: utils/adt/json.c:2319 utils/adt/jsonb.c:1289 +#: utils/adt/json.c:1135 utils/adt/jsonb.c:1310 #, c-format msgid "array must have two columns" msgstr "배열은 두개의 칼럼이어야 함" -#: utils/adt/json.c:2343 utils/adt/json.c:2427 utils/adt/jsonb.c:1313 -#: utils/adt/jsonb.c:1408 +#: utils/adt/json.c:1159 utils/adt/json.c:1243 utils/adt/jsonb.c:1334 +#: utils/adt/jsonb.c:1429 #, c-format msgid "null value not allowed for object key" msgstr "개체 키 값으로 null 을 허용하지 않음" -#: utils/adt/json.c:2416 utils/adt/jsonb.c:1397 +#: utils/adt/json.c:1232 utils/adt/jsonb.c:1418 #, c-format msgid "mismatched array dimensions" msgstr "배열 차수가 안맞음" -#: utils/adt/jsonb.c:269 +#: utils/adt/jsonb.c:287 #, c-format msgid "string too long to represent as jsonb string" msgstr "jsonb 문자열로 길이를 초과함" -#: utils/adt/jsonb.c:270 +#: utils/adt/jsonb.c:288 #, c-format msgid "" "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." msgstr "구현상 제한으로 jsonb 문자열은 %d 바이트를 넘을 수 없습니다." -#: utils/adt/jsonb.c:1172 +#: utils/adt/jsonb.c:1193 #, c-format msgid "argument %d: key must not be null" msgstr "%d 번째 인자: 키 값은 null이면 안됩니다." -#: utils/adt/jsonb.c:1760 +#: utils/adt/jsonb.c:1781 #, c-format msgid "object keys must be strings" msgstr "개체 키는 문자열이어야 합니다" -#: utils/adt/jsonb.c:1923 +#: utils/adt/jsonb.c:1944 #, c-format msgid "cannot cast jsonb null to type %s" msgstr "jsonb null 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb.c:1924 +#: utils/adt/jsonb.c:1945 #, c-format msgid "cannot cast jsonb string to type %s" msgstr "jsonb 문자열 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb.c:1925 +#: utils/adt/jsonb.c:1946 #, c-format msgid "cannot cast jsonb numeric to type %s" msgstr "jsonb 숫자 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb.c:1926 +#: utils/adt/jsonb.c:1947 #, c-format msgid "cannot cast jsonb boolean to type %s" msgstr "jsonb 불린 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb.c:1927 +#: utils/adt/jsonb.c:1948 #, c-format msgid "cannot cast jsonb array to type %s" msgstr "jsonb 배열 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb.c:1928 +#: utils/adt/jsonb.c:1949 #, c-format msgid "cannot cast jsonb object to type %s" msgstr "jsonb object 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb.c:1929 +#: utils/adt/jsonb.c:1950 #, c-format msgid "cannot cast jsonb array or object to type %s" msgstr "jsonb object나 배열 값을 %s 자료형으로 형 변환 할 수 없음" -#: utils/adt/jsonb_util.c:657 +#: utils/adt/jsonb_util.c:699 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "jsonb 개체 쌍의 개수가 최대치를 초과함 (%zu)" -#: utils/adt/jsonb_util.c:698 +#: utils/adt/jsonb_util.c:740 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "jsonb 배열 요소 개수가 최대치를 초과함 (%zu)" -#: utils/adt/jsonb_util.c:1569 utils/adt/jsonb_util.c:1589 +#: utils/adt/jsonb_util.c:1614 utils/adt/jsonb_util.c:1634 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "jsonb 배열 요소 총 크기가 최대치를 초과함 (%u 바이트)" -#: utils/adt/jsonb_util.c:1650 utils/adt/jsonb_util.c:1685 -#: utils/adt/jsonb_util.c:1705 +#: utils/adt/jsonb_util.c:1695 utils/adt/jsonb_util.c:1730 +#: utils/adt/jsonb_util.c:1750 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "jsonb 개체 요소들의 총 크기가 최대치를 초과함 (%u 바이트)" -#: utils/adt/jsonfuncs.c:522 utils/adt/jsonfuncs.c:687 -#: utils/adt/jsonfuncs.c:2275 utils/adt/jsonfuncs.c:2715 -#: utils/adt/jsonfuncs.c:3505 utils/adt/jsonfuncs.c:3836 +#: utils/adt/jsonfuncs.c:551 utils/adt/jsonfuncs.c:796 +#: utils/adt/jsonfuncs.c:2330 utils/adt/jsonfuncs.c:2770 +#: utils/adt/jsonfuncs.c:3560 utils/adt/jsonfuncs.c:3891 #, c-format msgid "cannot call %s on a scalar" msgstr "스칼라형에서는 %s 호출 할 수 없음" -#: utils/adt/jsonfuncs.c:527 utils/adt/jsonfuncs.c:674 -#: utils/adt/jsonfuncs.c:2717 utils/adt/jsonfuncs.c:3494 +#: utils/adt/jsonfuncs.c:556 utils/adt/jsonfuncs.c:783 +#: utils/adt/jsonfuncs.c:2772 utils/adt/jsonfuncs.c:3549 #, c-format msgid "cannot call %s on an array" msgstr "배열형에서는 %s 호출 할 수 없음" -#: utils/adt/jsonfuncs.c:1590 utils/adt/jsonfuncs.c:1625 +#: utils/adt/jsonfuncs.c:613 jsonpath_scan.l:498 +#, c-format +msgid "unsupported Unicode escape sequence" +msgstr "지원하지 않는 유니코드 이스케이프 조합" + +#: utils/adt/jsonfuncs.c:692 +#, c-format +msgid "JSON data, line %d: %s%s%s" +msgstr "JSON 자료, %d 번째 줄: %s%s%s" + +#: utils/adt/jsonfuncs.c:1682 utils/adt/jsonfuncs.c:1717 #, c-format msgid "cannot get array length of a scalar" msgstr "스칼라형의 배열 길이를 구할 수 없음" -#: utils/adt/jsonfuncs.c:1594 utils/adt/jsonfuncs.c:1613 +#: utils/adt/jsonfuncs.c:1686 utils/adt/jsonfuncs.c:1705 #, c-format msgid "cannot get array length of a non-array" msgstr "비배열형 자료의 배열 길이를 구할 수 없음" -#: utils/adt/jsonfuncs.c:1690 +#: utils/adt/jsonfuncs.c:1782 #, c-format msgid "cannot call %s on a non-object" msgstr "비개체형에서 %s 호출 할 수 없음" -#: utils/adt/jsonfuncs.c:1948 +#: utils/adt/jsonfuncs.c:2021 #, c-format msgid "cannot deconstruct an array as an object" msgstr "" -#: utils/adt/jsonfuncs.c:1960 +#: utils/adt/jsonfuncs.c:2033 #, c-format msgid "cannot deconstruct a scalar" msgstr "스칼라형으로 재구축할 수 없음" -#: utils/adt/jsonfuncs.c:2006 +#: utils/adt/jsonfuncs.c:2079 #, c-format msgid "cannot extract elements from a scalar" msgstr "스칼라형에서 요소를 추출할 수 없음" -#: utils/adt/jsonfuncs.c:2010 +#: utils/adt/jsonfuncs.c:2083 #, c-format msgid "cannot extract elements from an object" msgstr "개체형에서 요소를 추출할 수 없음" -#: utils/adt/jsonfuncs.c:2262 utils/adt/jsonfuncs.c:3720 +#: utils/adt/jsonfuncs.c:2317 utils/adt/jsonfuncs.c:3775 #, c-format msgid "cannot call %s on a non-array" msgstr "비배열형에서 %s 호출 할 수 없음" -#: utils/adt/jsonfuncs.c:2332 utils/adt/jsonfuncs.c:2337 -#: utils/adt/jsonfuncs.c:2354 utils/adt/jsonfuncs.c:2360 +#: utils/adt/jsonfuncs.c:2387 utils/adt/jsonfuncs.c:2392 +#: utils/adt/jsonfuncs.c:2409 utils/adt/jsonfuncs.c:2415 #, c-format msgid "expected JSON array" msgstr "예기치 않은 json 배열" -#: utils/adt/jsonfuncs.c:2333 +#: utils/adt/jsonfuncs.c:2388 #, c-format msgid "See the value of key \"%s\"." msgstr "\"%s\" 키의 값을 지정하세요" -#: utils/adt/jsonfuncs.c:2355 +#: utils/adt/jsonfuncs.c:2410 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "%s 배열 요소, 해당 키: \"%s\" 참조" -#: utils/adt/jsonfuncs.c:2361 +#: utils/adt/jsonfuncs.c:2416 #, c-format msgid "See the array element %s." msgstr "배열 요소: %s 참조" -#: utils/adt/jsonfuncs.c:2396 +#: utils/adt/jsonfuncs.c:2451 #, c-format msgid "malformed JSON array" msgstr "잘못된 json 배열" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3223 +#: utils/adt/jsonfuncs.c:3278 #, c-format msgid "first argument of %s must be a row type" msgstr "%s의 첫번째 인자는 row 형이어야 합니다" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3247 +#: utils/adt/jsonfuncs.c:3302 #, c-format msgid "could not determine row type for result of %s" msgstr "%s 함수의 반환 로우 자료형을 알수가 없음" -#: utils/adt/jsonfuncs.c:3249 +#: utils/adt/jsonfuncs.c:3304 #, c-format msgid "" "Provide a non-null record argument, or call the function in the FROM clause " @@ -23117,192 +23654,257 @@ msgstr "" "non-null 레코드 인자를 지정하거나, 함수를 호출 할 때 FROM 절에서 칼럼 정의 목" "록도 함께 지정해야 합니다." -#: utils/adt/jsonfuncs.c:3737 utils/adt/jsonfuncs.c:3818 +#: utils/adt/jsonfuncs.c:3792 utils/adt/jsonfuncs.c:3873 #, c-format msgid "argument of %s must be an array of objects" msgstr "%s의 인자는 개체의 배열이어야 합니다" -#: utils/adt/jsonfuncs.c:3770 +#: utils/adt/jsonfuncs.c:3825 #, c-format msgid "cannot call %s on an object" msgstr "개체에서 %s 호출할 수 없음" -#: utils/adt/jsonfuncs.c:4247 utils/adt/jsonfuncs.c:4306 -#: utils/adt/jsonfuncs.c:4386 +#: utils/adt/jsonfuncs.c:4286 utils/adt/jsonfuncs.c:4345 +#: utils/adt/jsonfuncs.c:4425 #, c-format msgid "cannot delete from scalar" msgstr "스칼라형에서 삭제 할 수 없음" -#: utils/adt/jsonfuncs.c:4391 +#: utils/adt/jsonfuncs.c:4430 #, c-format msgid "cannot delete from object using integer index" msgstr "인덱스 번호를 사용해서 개체에서 삭제 할 수 없음" -#: utils/adt/jsonfuncs.c:4457 utils/adt/jsonfuncs.c:4549 +#: utils/adt/jsonfuncs.c:4495 utils/adt/jsonfuncs.c:4653 #, c-format msgid "cannot set path in scalar" msgstr "스칼라형에는 path 를 지정할 수 없음" -#: utils/adt/jsonfuncs.c:4502 +#: utils/adt/jsonfuncs.c:4537 utils/adt/jsonfuncs.c:4579 +#, c-format +msgid "" +"null_value_treatment must be \"delete_key\", \"return_target\", " +"\"use_json_null\", or \"raise_exception\"" +msgstr "" + +#: utils/adt/jsonfuncs.c:4550 +#, c-format +msgid "JSON value must not be null" +msgstr "JSON 값으로 null을 사용할 수 없음" + +#: utils/adt/jsonfuncs.c:4551 +#, c-format +msgid "" +"Exception was raised because null_value_treatment is \"raise_exception\"." +msgstr "" + +#: utils/adt/jsonfuncs.c:4552 +#, c-format +msgid "" +"To avoid, either change the null_value_treatment argument or ensure that an " +"SQL NULL is not passed." +msgstr "" + +#: utils/adt/jsonfuncs.c:4607 #, c-format msgid "cannot delete path in scalar" msgstr "스칼라형에서 path를 지울 수 없음" -#: utils/adt/jsonfuncs.c:4672 +#: utils/adt/jsonfuncs.c:4776 #, c-format msgid "invalid concatenation of jsonb objects" msgstr "jsonb 개체들의 잘못된 결합" -#: utils/adt/jsonfuncs.c:4706 +#: utils/adt/jsonfuncs.c:4810 #, c-format msgid "path element at position %d is null" msgstr "%d 위치의 path 요소는 null 입니다." -#: utils/adt/jsonfuncs.c:4792 +#: utils/adt/jsonfuncs.c:4896 #, c-format msgid "cannot replace existing key" msgstr "이미 있는 키로는 대체할 수 없음" -#: utils/adt/jsonfuncs.c:4793 +#: utils/adt/jsonfuncs.c:4897 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "키 값을 변경하려면, jsonb_set 함수를 사용하세요." -#: utils/adt/jsonfuncs.c:4875 +#: utils/adt/jsonfuncs.c:4979 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "%d 번째 위치의 path 요소는 정수가 아님: \"%s\"" -#: utils/adt/jsonfuncs.c:4994 +#: utils/adt/jsonfuncs.c:5098 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "" -#: utils/adt/jsonfuncs.c:5001 +#: utils/adt/jsonfuncs.c:5105 #, c-format msgid "flag array element is not a string" msgstr "플래그 배열 요소가 문자열이 아님" -#: utils/adt/jsonfuncs.c:5002 utils/adt/jsonfuncs.c:5024 +#: utils/adt/jsonfuncs.c:5106 utils/adt/jsonfuncs.c:5128 #, c-format msgid "" "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all" "\"." msgstr "" -#: utils/adt/jsonfuncs.c:5022 +#: utils/adt/jsonfuncs.c:5126 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "" -#: utils/adt/jsonpath.c:360 +#: utils/adt/jsonpath.c:362 #, c-format msgid "@ is not allowed in root expressions" msgstr "@ 기호는 루트 표현식에서는 사용할 수 없음" -#: utils/adt/jsonpath.c:366 +#: utils/adt/jsonpath.c:368 #, c-format msgid "LAST is allowed only in array subscripts" msgstr "LAST 키워드는 배열 하위 스크립트 전용임" -#: utils/adt/jsonpath_exec.c:340 +#: utils/adt/jsonpath_exec.c:360 #, c-format msgid "single boolean result is expected" msgstr "단일 불리언 반환값이 예상 됨" -#: utils/adt/jsonpath_exec.c:488 +#: utils/adt/jsonpath_exec.c:556 #, c-format msgid "\"vars\" argument is not an object" msgstr "" -#: utils/adt/jsonpath_exec.c:489 +#: utils/adt/jsonpath_exec.c:557 #, c-format msgid "" "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." msgstr "" -#: utils/adt/jsonpath_exec.c:605 +#: utils/adt/jsonpath_exec.c:674 #, c-format msgid "JSON object does not contain key \"%s\"" msgstr "" -#: utils/adt/jsonpath_exec.c:617 +#: utils/adt/jsonpath_exec.c:686 #, c-format msgid "jsonpath member accessor can only be applied to an object" msgstr "" -#: utils/adt/jsonpath_exec.c:646 +#: utils/adt/jsonpath_exec.c:715 #, c-format msgid "jsonpath wildcard array accessor can only be applied to an array" msgstr "" -#: utils/adt/jsonpath_exec.c:694 +#: utils/adt/jsonpath_exec.c:763 #, c-format msgid "jsonpath array subscript is out of bounds" msgstr "jsonpath 배열 하위 스크립트 범위를 초과했습니다" -#: utils/adt/jsonpath_exec.c:751 +#: utils/adt/jsonpath_exec.c:820 #, c-format msgid "jsonpath array accessor can only be applied to an array" msgstr "" -#: utils/adt/jsonpath_exec.c:805 +#: utils/adt/jsonpath_exec.c:874 #, c-format msgid "jsonpath wildcard member accessor can only be applied to an object" msgstr "" -#: utils/adt/jsonpath_exec.c:935 +#: utils/adt/jsonpath_exec.c:1004 #, c-format msgid "jsonpath item method .%s() can only be applied to an array" msgstr "" -#: utils/adt/jsonpath_exec.c:989 utils/adt/jsonpath_exec.c:1010 -#: utils/adt/jsonpath_exec.c:1680 +#: utils/adt/jsonpath_exec.c:1059 #, c-format -msgid "jsonpath item method .%s() can only be applied to a numeric value" +msgid "" +"numeric argument of jsonpath item method .%s() is out of range for type " +"double precision" msgstr "" +"jsonpath 아이템 메서드 .%s() 의 숫자 인자가 double precision 형의 " +"범위를 벗어남" -#: utils/adt/jsonpath_exec.c:1023 +#: utils/adt/jsonpath_exec.c:1080 +#, c-format +msgid "" +"string argument of jsonpath item method .%s() is not a valid representation " +"of a double precision number" +msgstr "" + +#: utils/adt/jsonpath_exec.c:1093 #, c-format msgid "" "jsonpath item method .%s() can only be applied to a string or numeric value" msgstr "" -#: utils/adt/jsonpath_exec.c:1507 +#: utils/adt/jsonpath_exec.c:1583 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "" -#: utils/adt/jsonpath_exec.c:1514 +#: utils/adt/jsonpath_exec.c:1590 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "" -#: utils/adt/jsonpath_exec.c:1582 +#: utils/adt/jsonpath_exec.c:1658 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "" -#: utils/adt/jsonpath_exec.c:1739 +#: utils/adt/jsonpath_exec.c:1756 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a numeric value" +msgstr "" + +#: utils/adt/jsonpath_exec.c:1796 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a string" +msgstr "" + +#: utils/adt/jsonpath_exec.c:1890 +#, c-format +msgid "datetime format is not recognized: \"%s\"" +msgstr "알 수 없는 datetime 양식: \"%s\"" + +#: utils/adt/jsonpath_exec.c:1892 +#, c-format +msgid "Use a datetime template argument to specify the input data format." +msgstr "" + +#: utils/adt/jsonpath_exec.c:1960 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "" -#: utils/adt/jsonpath_exec.c:1922 +#: utils/adt/jsonpath_exec.c:2143 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "\"%s\" jsonpath 변수 찾기 실패" -#: utils/adt/jsonpath_exec.c:2169 +#: utils/adt/jsonpath_exec.c:2407 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "" -#: utils/adt/jsonpath_exec.c:2181 +#: utils/adt/jsonpath_exec.c:2419 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "jsonpath 배열 하위 스크립트가 정수 범위를 초과했음" +#: utils/adt/jsonpath_exec.c:2596 +#, c-format +msgid "cannot convert value from %s to %s without time zone usage" +msgstr "" + +#: utils/adt/jsonpath_exec.c:2598 +#, c-format +msgid "Use *_tz() function for time zone support." +msgstr "" + #: utils/adt/levenshtein.c:133 #, c-format msgid "levenshtein argument exceeds maximum length of %d characters" @@ -23313,7 +23915,7 @@ msgstr "levenshtein 인자값으로 그 길이가 %d 문자의 최대 길이를 msgid "nondeterministic collations are not supported for LIKE" msgstr "LIKE 연산에서 사용할 비결정 정렬규칙(collation)은 지원하지 않음" -#: utils/adt/like.c:193 utils/adt/like_support.c:967 +#: utils/adt/like.c:193 utils/adt/like_support.c:1002 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "ILIKE 연산에서 사용할 정렬규칙(collation)을 결정할 수 없음" @@ -23323,36 +23925,31 @@ msgstr "ILIKE 연산에서 사용할 정렬규칙(collation)을 결정할 수 msgid "nondeterministic collations are not supported for ILIKE" msgstr "ILIKE 연산에서 사용할 비결정 정렬규칙(collation)은 지원하지 않음" -#: utils/adt/like_match.c:107 utils/adt/like_match.c:167 +#: utils/adt/like_match.c:108 utils/adt/like_match.c:168 #, c-format msgid "LIKE pattern must not end with escape character" msgstr "LIKE 패턴은 이스케이프 문자로 끝나지 않아야 함" -#: utils/adt/like_match.c:292 utils/adt/regexp.c:702 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:700 #, c-format msgid "invalid escape string" msgstr "잘못된 이스케이프 문자열" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:703 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:701 #, c-format msgid "Escape string must be empty or one character." msgstr "이스케이프 문자열은 비어있거나 한개의 문자여야 합니다." -#: utils/adt/like_support.c:952 +#: utils/adt/like_support.c:987 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "bytea 형식에서는 대/소문자를 구분하지 않는 일치가 지원되지 않음" -#: utils/adt/like_support.c:1054 +#: utils/adt/like_support.c:1089 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "bytea 형식에서는 정규식 일치가 지원되지 않음" -#: utils/adt/lockfuncs.c:664 -#, c-format -msgid "cannot use advisory locks during a parallel operation" -msgstr "병렬 작업 중에는 자문 자금을 사용할 없습니다" - #: utils/adt/mac.c:102 #, c-format msgid "invalid octet value in \"macaddr\" value: \"%s\"" @@ -23371,220 +23968,220 @@ msgid "" "from macaddr8 to macaddr." msgstr "" -#: utils/adt/misc.c:225 +#: utils/adt/misc.c:240 #, c-format msgid "global tablespace never has databases" msgstr "전역 테이블스페이스는 데이터베이스를 결코 포함하지 않습니다." -#: utils/adt/misc.c:246 +#: utils/adt/misc.c:262 #, c-format msgid "%u is not a tablespace OID" msgstr "%u 테이블스페이스 OID가 아님" -#: utils/adt/misc.c:435 +#: utils/adt/misc.c:448 msgid "unreserved" msgstr "예약되지 않음" -#: utils/adt/misc.c:439 +#: utils/adt/misc.c:452 msgid "unreserved (cannot be function or type name)" msgstr "예약되지 않음(함수, 자료형 이름일 수 없음)" -#: utils/adt/misc.c:443 +#: utils/adt/misc.c:456 msgid "reserved (can be function or type name)" msgstr "예약됨(함수, 자료형 이름일 수 있음)" -#: utils/adt/misc.c:447 +#: utils/adt/misc.c:460 msgid "reserved" msgstr "예약됨" -#: utils/adt/misc.c:621 utils/adt/misc.c:635 utils/adt/misc.c:674 -#: utils/adt/misc.c:680 utils/adt/misc.c:686 utils/adt/misc.c:709 +#: utils/adt/misc.c:634 utils/adt/misc.c:648 utils/adt/misc.c:687 +#: utils/adt/misc.c:693 utils/adt/misc.c:699 utils/adt/misc.c:722 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "문자열이 타당한 식별자가 아님: \"%s\"" -#: utils/adt/misc.c:623 +#: utils/adt/misc.c:636 #, c-format msgid "String has unclosed double quotes." msgstr "문자열 표기에서 큰따옴표 짝이 안맞습니다." -#: utils/adt/misc.c:637 +#: utils/adt/misc.c:650 #, c-format msgid "Quoted identifier must not be empty." msgstr "인용부호 있는 식별자: 비어있으면 안됩니다" -#: utils/adt/misc.c:676 +#: utils/adt/misc.c:689 #, c-format msgid "No valid identifier before \".\"." msgstr "\".\" 전에 타당한 식별자가 없음" -#: utils/adt/misc.c:682 +#: utils/adt/misc.c:695 #, c-format msgid "No valid identifier after \".\"." msgstr "\".\" 뒤에 타당한 식별자 없음" -#: utils/adt/misc.c:743 +#: utils/adt/misc.c:753 #, c-format msgid "log format \"%s\" is not supported" msgstr "\"%s\" 양식의 로그는 지원하지 않습니다" -#: utils/adt/misc.c:744 +#: utils/adt/misc.c:754 #, c-format msgid "The supported log formats are \"stderr\" and \"csvlog\"." msgstr "" -#: utils/adt/network.c:85 +#: utils/adt/network.c:111 #, c-format msgid "invalid cidr value: \"%s\"" msgstr "cidr 자료형에 대한 잘못된 입력: \"%s\"" -#: utils/adt/network.c:86 utils/adt/network.c:216 +#: utils/adt/network.c:112 utils/adt/network.c:242 #, c-format msgid "Value has bits set to right of mask." msgstr "마스크 오른쪽에 설정된 비트가 값에 포함되어 있습니다." -#: utils/adt/network.c:127 utils/adt/network.c:800 utils/adt/network.c:825 -#: utils/adt/network.c:850 +#: utils/adt/network.c:153 utils/adt/network.c:1199 utils/adt/network.c:1224 +#: utils/adt/network.c:1249 #, c-format msgid "could not format inet value: %m" msgstr "inet 값의 형식을 지정할 수 없음: %m" #. translator: %s is inet or cidr -#: utils/adt/network.c:184 +#: utils/adt/network.c:210 #, c-format msgid "invalid address family in external \"%s\" value" msgstr "잘못 된 주소군 \"%s\"" #. translator: %s is inet or cidr -#: utils/adt/network.c:191 +#: utils/adt/network.c:217 #, c-format msgid "invalid bits in external \"%s\" value" msgstr "\"%s\" 값에 잘못된 비트가 있음" #. translator: %s is inet or cidr -#: utils/adt/network.c:200 +#: utils/adt/network.c:226 #, c-format msgid "invalid length in external \"%s\" value" msgstr "외부 \"%s\" 값의 길이가 잘못 되었음" -#: utils/adt/network.c:215 +#: utils/adt/network.c:241 #, c-format msgid "invalid external \"cidr\" value" msgstr "외부 \"cidr\" 값이 잘못됨" -#: utils/adt/network.c:311 utils/adt/network.c:334 +#: utils/adt/network.c:337 utils/adt/network.c:360 #, c-format msgid "invalid mask length: %d" msgstr "잘못된 마스크 길이: %d" -#: utils/adt/network.c:868 +#: utils/adt/network.c:1267 #, c-format msgid "could not format cidr value: %m" msgstr "cidr 값을 처리할 수 없음: %m" -#: utils/adt/network.c:1101 +#: utils/adt/network.c:1500 #, c-format msgid "cannot merge addresses from different families" msgstr "서로 다른 페밀리에서는 주소를 병합할 수 없음" -#: utils/adt/network.c:1517 +#: utils/adt/network.c:1916 #, c-format msgid "cannot AND inet values of different sizes" msgstr "서로 크기가 틀린 inet 값들은 AND 연산을 할 수 없습니다." -#: utils/adt/network.c:1549 +#: utils/adt/network.c:1948 #, c-format msgid "cannot OR inet values of different sizes" msgstr "서로 크기가 틀린 inet 값들은 OR 연산을 할 수 없습니다." -#: utils/adt/network.c:1610 utils/adt/network.c:1686 +#: utils/adt/network.c:2009 utils/adt/network.c:2085 #, c-format msgid "result is out of range" msgstr "결과가 범위를 벗어났습니다." -#: utils/adt/network.c:1651 +#: utils/adt/network.c:2050 #, c-format msgid "cannot subtract inet values of different sizes" msgstr "inet 값에서 서로 크기가 틀리게 부분 추출(subtract)할 수 없음" -#: utils/adt/numeric.c:833 +#: utils/adt/numeric.c:827 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "외부 \"numeric\" 값의 부호가 잘못됨" -#: utils/adt/numeric.c:839 +#: utils/adt/numeric.c:833 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "외부 \"numeric\" 값의 잘못된 스케일" -#: utils/adt/numeric.c:848 +#: utils/adt/numeric.c:842 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "외부 \"numeric\" 값의 숫자가 잘못됨" -#: utils/adt/numeric.c:1046 utils/adt/numeric.c:1060 +#: utils/adt/numeric.c:1040 utils/adt/numeric.c:1054 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "NUMERIC 정밀도 %d 값은 범위(1 .. %d)를 벗어났습니다." -#: utils/adt/numeric.c:1051 +#: utils/adt/numeric.c:1045 #, c-format msgid "NUMERIC scale %d must be between 0 and precision %d" msgstr "NUMERIC 스케일 %d 값은 정밀도 범위(0 .. %d)를 벗어났습니다." -#: utils/adt/numeric.c:1069 +#: utils/adt/numeric.c:1063 #, c-format msgid "invalid NUMERIC type modifier" msgstr "잘못된 NUMERIC 형식 한정자" -#: utils/adt/numeric.c:1401 +#: utils/adt/numeric.c:1395 #, c-format msgid "start value cannot be NaN" msgstr "시작값은 NaN 일 수 없음" -#: utils/adt/numeric.c:1406 +#: utils/adt/numeric.c:1400 #, c-format msgid "stop value cannot be NaN" msgstr "종료값은 NaN 일 수 없음" -#: utils/adt/numeric.c:1416 +#: utils/adt/numeric.c:1410 #, c-format msgid "step size cannot be NaN" msgstr "단계 크기는 NaN 일 수 없음" -#: utils/adt/numeric.c:2857 utils/adt/numeric.c:5869 utils/adt/numeric.c:6324 -#: utils/adt/numeric.c:8046 utils/adt/numeric.c:8471 utils/adt/numeric.c:8585 -#: utils/adt/numeric.c:8658 +#: utils/adt/numeric.c:2958 utils/adt/numeric.c:6064 utils/adt/numeric.c:6522 +#: utils/adt/numeric.c:8802 utils/adt/numeric.c:9240 utils/adt/numeric.c:9354 +#: utils/adt/numeric.c:9427 #, c-format msgid "value overflows numeric format" msgstr "값이 수치 형식에 넘처남" -#: utils/adt/numeric.c:3222 +#: utils/adt/numeric.c:3417 #, c-format msgid "cannot convert NaN to integer" msgstr "NaN 값을 정수형으로 변환할 수 없습니다" -#: utils/adt/numeric.c:3305 +#: utils/adt/numeric.c:3500 #, c-format msgid "cannot convert NaN to bigint" msgstr "NaN 값을 bigint형으로 변환할 수 없습니다" -#: utils/adt/numeric.c:3350 +#: utils/adt/numeric.c:3545 #, c-format msgid "cannot convert NaN to smallint" msgstr "NaN 값을 smallint형으로 변환할 수 없습니다" -#: utils/adt/numeric.c:3387 utils/adt/numeric.c:3458 +#: utils/adt/numeric.c:3582 utils/adt/numeric.c:3653 #, c-format msgid "cannot convert infinity to numeric" msgstr "무한(infinity)은 숫자로 변환할 수 없음" -#: utils/adt/numeric.c:6408 +#: utils/adt/numeric.c:6606 #, c-format msgid "numeric field overflow" msgstr "수치 필드 오버플로우" -#: utils/adt/numeric.c:6409 +#: utils/adt/numeric.c:6607 #, c-format msgid "" "A field with precision %d, scale %d must round to an absolute value less " @@ -23593,7 +24190,7 @@ msgstr "" "전체 자릿수 %d, 소수 자릿수 %d의 필드는 %s%d보다 작은 절대 값으로 반올림해야 " "합니다." -#: utils/adt/numutils.c:90 +#: utils/adt/numutils.c:154 #, c-format msgid "value \"%s\" is out of range for 8-bit integer" msgstr "값 \"%s\"은(는) 8비트 정수의 범위를 벗어남" @@ -23629,24 +24226,24 @@ msgstr "null 문자는 허용되지 않음" msgid "percentile value %g is not between 0 and 1" msgstr "%g 퍼센트 값이 0과 1사이가 아닙니다." -#: utils/adt/pg_locale.c:1097 +#: utils/adt/pg_locale.c:1262 #, c-format msgid "Apply system library package updates." msgstr "OS 라이브러리 패키지를 업데이트 하세요." -#: utils/adt/pg_locale.c:1312 +#: utils/adt/pg_locale.c:1477 #, c-format msgid "could not create locale \"%s\": %m" msgstr "\"%s\" 로케일을 만들 수 없음: %m" -#: utils/adt/pg_locale.c:1315 +#: utils/adt/pg_locale.c:1480 #, c-format msgid "" "The operating system could not find any locale data for the locale name \"%s" "\"." msgstr "운영체제에서 \"%s\" 로케일 이름에 대한 로케일 파일을 찾을 수 없습니다." -#: utils/adt/pg_locale.c:1417 +#: utils/adt/pg_locale.c:1582 #, c-format msgid "" "collations with different collate and ctype values are not supported on this " @@ -23655,12 +24252,12 @@ msgstr "" "이 플랫폼에서는 서로 다른 정렬규칙(collation)과 문자집합(ctype)을 함께 쓸 수 " "없습니다." -#: utils/adt/pg_locale.c:1426 +#: utils/adt/pg_locale.c:1591 #, c-format msgid "collation provider LIBC is not supported on this platform" msgstr "이 플랫폼에서는 LIBC 문자 정렬 제공자 기능(ICU)을 지원하지 않음." -#: utils/adt/pg_locale.c:1438 +#: utils/adt/pg_locale.c:1603 #, c-format msgid "" "collations with different collate and ctype values are not supported by ICU" @@ -23668,63 +24265,73 @@ msgstr "" "ICU 지원 기능에서는 서로 다른 정렬규칙(collation)과 문자집합(ctype)을 함께 " "쓸 수 없습니다." -#: utils/adt/pg_locale.c:1444 utils/adt/pg_locale.c:1535 -#: utils/adt/pg_locale.c:1753 +#: utils/adt/pg_locale.c:1609 utils/adt/pg_locale.c:1696 +#: utils/adt/pg_locale.c:1969 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "\"%s\" 로케일용 문자 정렬 규칙 열기 실패: %s" -#: utils/adt/pg_locale.c:1458 +#: utils/adt/pg_locale.c:1623 #, c-format msgid "ICU is not supported in this build" msgstr "ICU 지원 기능을 뺀 채로 서버가 만들어졌습니다." -#: utils/adt/pg_locale.c:1459 +#: utils/adt/pg_locale.c:1624 #, c-format msgid "You need to rebuild PostgreSQL using --with-icu." msgstr "--with-icu 옵션을 사용하여 PostgreSQL을 다시 빌드해야 합니다." -#: utils/adt/pg_locale.c:1479 +#: utils/adt/pg_locale.c:1644 #, c-format msgid "collation \"%s\" has no actual version, but a version was specified" msgstr "\"%s\" 정렬규칙은 분명한 버전이 없는데 버전을 지정했음" -#: utils/adt/pg_locale.c:1486 +#: utils/adt/pg_locale.c:1651 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "\"%s\" 정렬규칙은 버전이 맞지 않음" -#: utils/adt/pg_locale.c:1488 +#: utils/adt/pg_locale.c:1653 #, c-format msgid "" "The collation in the database was created using version %s, but the " "operating system provides version %s." msgstr "" -#: utils/adt/pg_locale.c:1491 +#: utils/adt/pg_locale.c:1656 #, c-format msgid "" "Rebuild all objects affected by this collation and run ALTER COLLATION %s " "REFRESH VERSION, or build PostgreSQL with the right library version." msgstr "" -#: utils/adt/pg_locale.c:1575 +#: utils/adt/pg_locale.c:1747 +#, c-format +msgid "could not get collation version for locale \"%s\": error code %lu" +msgstr "\"%s\" 로케일용 정렬 변환 규칙을 구할 수 없음: 오류 코드 %lu" + +#: utils/adt/pg_locale.c:1784 +#, c-format +msgid "encoding \"%s\" not supported by ICU" +msgstr "\"%s\" 인코딩은 ICU 기능을 지원하지 않음" + +#: utils/adt/pg_locale.c:1791 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "\"%s\" 인코딩용 ICU 변환기 열기 실패: %s" -#: utils/adt/pg_locale.c:1606 utils/adt/pg_locale.c:1615 -#: utils/adt/pg_locale.c:1644 utils/adt/pg_locale.c:1654 +#: utils/adt/pg_locale.c:1822 utils/adt/pg_locale.c:1831 +#: utils/adt/pg_locale.c:1860 utils/adt/pg_locale.c:1870 #, c-format msgid "%s failed: %s" msgstr "%s 실패: %s" -#: utils/adt/pg_locale.c:1926 +#: utils/adt/pg_locale.c:2142 #, c-format msgid "invalid multibyte character for locale" msgstr "로케일을 위한 잘못된 멀티바이트 문자" -#: utils/adt/pg_locale.c:1927 +#: utils/adt/pg_locale.c:2143 #, c-format msgid "" "The server's LC_CTYPE locale is probably incompatible with the database " @@ -23736,31 +24343,26 @@ msgstr "서버의 LC_CTYPE 로케일은 이 데이터베이스 인코딩과 호 msgid "function can only be called when server is in binary upgrade mode" msgstr "함수는 서버가 이진 업그레이드 상태에서만 호출 될 수 있습니다" -#: utils/adt/pgstatfuncs.c:479 +#: utils/adt/pgstatfuncs.c:500 #, c-format msgid "invalid command name: \"%s\"" msgstr "잘못된 명령어 이름: \"%s\"" -#: utils/adt/pseudotypes.c:247 +#: utils/adt/pseudotypes.c:57 utils/adt/pseudotypes.c:91 +#, c-format +msgid "cannot display a value of type %s" +msgstr "%s 자료형의 값은 표시할 수 없음" + +#: utils/adt/pseudotypes.c:283 #, c-format msgid "cannot accept a value of a shell type" msgstr "셸 형태 값은 사용할 수 없음" -#: utils/adt/pseudotypes.c:260 +#: utils/adt/pseudotypes.c:293 #, c-format msgid "cannot display a value of a shell type" msgstr "shell 형식의 값은 표시할 수 없음" -#: utils/adt/pseudotypes.c:350 utils/adt/pseudotypes.c:376 -#, c-format -msgid "cannot output a value of type %s" -msgstr "%s 형식의 값은 출력할 수 없음" - -#: utils/adt/pseudotypes.c:403 -#, c-format -msgid "cannot display a value of type %s" -msgstr "%s 자료형의 값은 표시할 수 없음" - #: utils/adt/rangetypes.c:406 #, c-format msgid "range constructor flags argument must not be null" @@ -23826,7 +24428,7 @@ msgstr "칼럼이 너무 많습니다." msgid "Junk after right parenthesis or bracket." msgstr "오른쪽 괄호 다음에 정크가 있음" -#: utils/adt/regexp.c:289 utils/adt/regexp.c:1490 utils/adt/varlena.c:4459 +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4493 #, c-format msgid "regular expression failed: %s" msgstr "잘못된 정규식: %s" @@ -23836,7 +24438,7 @@ msgstr "잘못된 정규식: %s" msgid "invalid regular expression option: \"%c\"" msgstr "잘못된 정규식 옵션: \"%c\"" -#: utils/adt/regexp.c:838 +#: utils/adt/regexp.c:836 #, c-format msgid "" "SQL regular expression may not contain more than two escape-double-quote " @@ -23844,113 +24446,113 @@ msgid "" msgstr "" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:924 utils/adt/regexp.c:1307 utils/adt/regexp.c:1362 +#: utils/adt/regexp.c:981 utils/adt/regexp.c:1363 utils/adt/regexp.c:1418 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s 함수는 \"global\" 옵션을 지원하지 않음" -#: utils/adt/regexp.c:926 +#: utils/adt/regexp.c:983 #, c-format msgid "Use the regexp_matches function instead." msgstr "대신에 regexp_matches 함수를 사용하세요." -#: utils/adt/regexp.c:1108 +#: utils/adt/regexp.c:1165 #, c-format msgid "too many regular expression matches" msgstr "너무 많음 정규식 매치" -#: utils/adt/regproc.c:106 +#: utils/adt/regproc.c:107 #, c-format msgid "more than one function named \"%s\"" msgstr "\"%s\"(이)라는 함수가 두 개 이상 있음" -#: utils/adt/regproc.c:524 +#: utils/adt/regproc.c:525 #, c-format msgid "more than one operator named %s" msgstr "%s(이)라는 연산자가 두 개 이상 있음" -#: utils/adt/regproc.c:691 utils/adt/regproc.c:732 gram.y:8145 +#: utils/adt/regproc.c:692 utils/adt/regproc.c:733 gram.y:8223 #, c-format msgid "missing argument" msgstr "인자가 빠졌음" -#: utils/adt/regproc.c:692 utils/adt/regproc.c:733 gram.y:8146 +#: utils/adt/regproc.c:693 utils/adt/regproc.c:734 gram.y:8224 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "단항 연산자에서 인자 없음을 표시할 때는 NONE 인자를 사용하세요." -#: utils/adt/regproc.c:696 utils/adt/regproc.c:737 utils/adt/regproc.c:1865 -#: utils/adt/ruleutils.c:9224 utils/adt/ruleutils.c:9392 +#: utils/adt/regproc.c:697 utils/adt/regproc.c:738 utils/adt/regproc.c:2018 +#: utils/adt/ruleutils.c:9297 utils/adt/ruleutils.c:9466 #, c-format msgid "too many arguments" msgstr "인자가 너무 많습니다" -#: utils/adt/regproc.c:697 utils/adt/regproc.c:738 +#: utils/adt/regproc.c:698 utils/adt/regproc.c:739 #, c-format msgid "Provide two argument types for operator." msgstr "연산자를 위해서는 두개의 인자 자료형을 지정하십시오." -#: utils/adt/regproc.c:1449 utils/adt/regproc.c:1473 utils/adt/regproc.c:1574 -#: utils/adt/regproc.c:1598 utils/adt/regproc.c:1700 utils/adt/regproc.c:1705 -#: utils/adt/varlena.c:3608 utils/adt/varlena.c:3613 +#: utils/adt/regproc.c:1602 utils/adt/regproc.c:1626 utils/adt/regproc.c:1727 +#: utils/adt/regproc.c:1751 utils/adt/regproc.c:1853 utils/adt/regproc.c:1858 +#: utils/adt/varlena.c:3642 utils/adt/varlena.c:3647 #, c-format msgid "invalid name syntax" msgstr "잘못된 이름 구문" -#: utils/adt/regproc.c:1763 +#: utils/adt/regproc.c:1916 #, c-format msgid "expected a left parenthesis" msgstr "왼쪽 괄호가 필요합니다." -#: utils/adt/regproc.c:1779 +#: utils/adt/regproc.c:1932 #, c-format msgid "expected a right parenthesis" msgstr "오른쪽 괄호가 필요합니다." -#: utils/adt/regproc.c:1798 +#: utils/adt/regproc.c:1951 #, c-format msgid "expected a type name" msgstr "자료형 이름을 지정하십시오" -#: utils/adt/regproc.c:1830 +#: utils/adt/regproc.c:1983 #, c-format msgid "improper type name" msgstr "부적절한 형식 이름" -#: utils/adt/ri_triggers.c:298 utils/adt/ri_triggers.c:1534 -#: utils/adt/ri_triggers.c:2465 +#: utils/adt/ri_triggers.c:296 utils/adt/ri_triggers.c:1537 +#: utils/adt/ri_triggers.c:2470 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "" "\"%s\" 테이블에서 자료 추가, 갱신 작업이 \"%s\" 참조키(foreign key) 제약 조건" "을 위배했습니다" -#: utils/adt/ri_triggers.c:301 utils/adt/ri_triggers.c:1537 +#: utils/adt/ri_triggers.c:299 utils/adt/ri_triggers.c:1540 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL에 null 키 값과 nonnull 키 값을 함께 사용할 수 없습니다." -#: utils/adt/ri_triggers.c:1932 +#: utils/adt/ri_triggers.c:1940 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "INSERT에 대해 \"%s\" 함수를 실행해야 함" -#: utils/adt/ri_triggers.c:1938 +#: utils/adt/ri_triggers.c:1946 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "UPDATE에 대해 \"%s\" 함수를 실행해야 함" -#: utils/adt/ri_triggers.c:1944 +#: utils/adt/ri_triggers.c:1952 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "DELETE에 대해 \"%s\" 함수를 실행해야 함" -#: utils/adt/ri_triggers.c:1967 +#: utils/adt/ri_triggers.c:1975 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "\"%s\" 트리거(해당 테이블: \"%s\")에 대한 pg_constraint 항목이 없음" -#: utils/adt/ri_triggers.c:1969 +#: utils/adt/ri_triggers.c:1977 #, c-format msgid "" "Remove this referential integrity trigger and its mates, then do ALTER TABLE " @@ -23959,12 +24561,12 @@ msgstr "" "해당 트리거 관련 개체를 제거한 후 ALTER TABLE ADD CONSTRAINT 명령으로 추가하" "세요" -#: utils/adt/ri_triggers.c:1999 gram.y:3784 +#: utils/adt/ri_triggers.c:2007 gram.y:3818 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL 기능은 아직 구현 안되었습니다" -#: utils/adt/ri_triggers.c:2291 +#: utils/adt/ri_triggers.c:2295 #, c-format msgid "" "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave " @@ -23973,32 +24575,32 @@ msgstr "" "\"%s\"에 대한 참조 무결성 쿼리(제약조건: \"%s\", 해당 릴레이션: \"%s\")를 실" "행하면 예기치 않은 결과가 발생함" -#: utils/adt/ri_triggers.c:2295 +#: utils/adt/ri_triggers.c:2299 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "이 문제는 주로 룰이 재작성 되었을 때 발생합니다." -#: utils/adt/ri_triggers.c:2456 +#: utils/adt/ri_triggers.c:2460 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "\"%s\" 파티션 지우기는 \"%s\" 참조키 제약조건을 위반함" -#: utils/adt/ri_triggers.c:2459 utils/adt/ri_triggers.c:2483 +#: utils/adt/ri_triggers.c:2463 utils/adt/ri_triggers.c:2488 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "(%s)=(%s) 키가 \"%s\" 테이블에서 여전히 참조됩니다." -#: utils/adt/ri_triggers.c:2469 +#: utils/adt/ri_triggers.c:2474 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "(%s)=(%s) 키가 \"%s\" 테이블에 없습니다." -#: utils/adt/ri_triggers.c:2472 +#: utils/adt/ri_triggers.c:2477 #, c-format msgid "Key is not present in table \"%s\"." msgstr "\"%s\" 테이블에 키가 없습니다." -#: utils/adt/ri_triggers.c:2478 +#: utils/adt/ri_triggers.c:2483 #, c-format msgid "" "update or delete on table \"%s\" violates foreign key constraint \"%s\" on " @@ -24007,7 +24609,7 @@ msgstr "" "\"%s\" 테이블의 자료 갱신, 삭제 작업이 \"%s\" 참조키(foreign key) 제약 조건 " "- \"%s\" 테이블 - 을 위반했습니다" -#: utils/adt/ri_triggers.c:2486 +#: utils/adt/ri_triggers.c:2491 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "\"%s\" 테이블에서 키가 여전히 참조됩니다." @@ -24058,19 +24660,19 @@ msgstr "잘못된 자료형: %u, 예상되는 자료형 %u" msgid "improper binary format in record column %d" msgstr "%d 번째 레코드 열에서 잘못된 바이너리 포맷이 있습니다" -#: utils/adt/rowtypes.c:911 utils/adt/rowtypes.c:1155 utils/adt/rowtypes.c:1414 -#: utils/adt/rowtypes.c:1660 +#: utils/adt/rowtypes.c:911 utils/adt/rowtypes.c:1157 utils/adt/rowtypes.c:1415 +#: utils/adt/rowtypes.c:1661 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "서로 다른 열 형식 %s과(와) %s(레코드 열 %d)을(를) 비교할 수 없음" -#: utils/adt/rowtypes.c:1000 utils/adt/rowtypes.c:1226 -#: utils/adt/rowtypes.c:1511 utils/adt/rowtypes.c:1696 +#: utils/adt/rowtypes.c:1002 utils/adt/rowtypes.c:1227 +#: utils/adt/rowtypes.c:1512 utils/adt/rowtypes.c:1697 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "칼럼 수가 서로 다른 레코드 자료형을 비교할 수 없음" -#: utils/adt/ruleutils.c:4885 +#: utils/adt/ruleutils.c:4821 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "\"%s\" 룰은 %d 이벤트 형태를 지원하지 않습니다" @@ -24085,117 +24687,117 @@ msgstr "TIMESTAMP(%d)%s 정밀도로 음수를 사용할 수 없습니다" msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "TIMESTAMP(%d)%s 정밀도는 최대값(%d)으로 줄였습니다" -#: utils/adt/timestamp.c:176 utils/adt/timestamp.c:419 utils/misc/guc.c:11612 +#: utils/adt/timestamp.c:176 utils/adt/timestamp.c:434 utils/misc/guc.c:11901 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "타임스탬프 값이 범위를 벗어났음: \"%s\"" -#: utils/adt/timestamp.c:365 +#: utils/adt/timestamp.c:372 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "타임스탬프(%d) 정밀도는 %d에서 %d 사이여야 함" -#: utils/adt/timestamp.c:481 +#: utils/adt/timestamp.c:496 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "숫자형 타임 존 형식은 처음에 \"-\" 또는 \"+\" 문자가 있어야 합니다." -#: utils/adt/timestamp.c:494 +#: utils/adt/timestamp.c:509 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "\"%s\" 숫자형 타임 존 범위 벗어남" -#: utils/adt/timestamp.c:596 utils/adt/timestamp.c:606 -#: utils/adt/timestamp.c:614 +#: utils/adt/timestamp.c:601 utils/adt/timestamp.c:611 +#: utils/adt/timestamp.c:619 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "타임스탬프 값이 범위를 벗어났음: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:715 +#: utils/adt/timestamp.c:720 #, c-format msgid "timestamp cannot be NaN" msgstr "타임스탬프 값으로 NaN 값을 지정할 수 없음" -#: utils/adt/timestamp.c:733 utils/adt/timestamp.c:745 +#: utils/adt/timestamp.c:738 utils/adt/timestamp.c:750 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "타임스탬프 값이 범위를 벗어났음: \"%g\"" -#: utils/adt/timestamp.c:930 utils/adt/timestamp.c:1504 -#: utils/adt/timestamp.c:1937 utils/adt/timestamp.c:3035 -#: utils/adt/timestamp.c:3040 utils/adt/timestamp.c:3045 -#: utils/adt/timestamp.c:3095 utils/adt/timestamp.c:3102 -#: utils/adt/timestamp.c:3109 utils/adt/timestamp.c:3129 -#: utils/adt/timestamp.c:3136 utils/adt/timestamp.c:3143 -#: utils/adt/timestamp.c:3173 utils/adt/timestamp.c:3181 -#: utils/adt/timestamp.c:3225 utils/adt/timestamp.c:3652 -#: utils/adt/timestamp.c:3777 utils/adt/timestamp.c:4237 +#: utils/adt/timestamp.c:935 utils/adt/timestamp.c:1509 +#: utils/adt/timestamp.c:1944 utils/adt/timestamp.c:3042 +#: utils/adt/timestamp.c:3047 utils/adt/timestamp.c:3052 +#: utils/adt/timestamp.c:3102 utils/adt/timestamp.c:3109 +#: utils/adt/timestamp.c:3116 utils/adt/timestamp.c:3136 +#: utils/adt/timestamp.c:3143 utils/adt/timestamp.c:3150 +#: utils/adt/timestamp.c:3180 utils/adt/timestamp.c:3188 +#: utils/adt/timestamp.c:3232 utils/adt/timestamp.c:3659 +#: utils/adt/timestamp.c:3784 utils/adt/timestamp.c:4244 #, c-format msgid "interval out of range" msgstr "간격이 범위를 벗어남" -#: utils/adt/timestamp.c:1057 utils/adt/timestamp.c:1090 +#: utils/adt/timestamp.c:1062 utils/adt/timestamp.c:1095 #, c-format msgid "invalid INTERVAL type modifier" msgstr "잘못된 INTERVAL 형식 한정자" -#: utils/adt/timestamp.c:1073 +#: utils/adt/timestamp.c:1078 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "INTERVAL(%d) 정밀도로 음수값이 올 수 없습니다" -#: utils/adt/timestamp.c:1079 +#: utils/adt/timestamp.c:1084 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "INTERVAL(%d) 정밀도는 허용 최대치(%d)로 감소 되었습니다" -#: utils/adt/timestamp.c:1461 +#: utils/adt/timestamp.c:1466 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "간격(%d) 정밀도는 %d에서 %d 사이여야 함" -#: utils/adt/timestamp.c:2636 +#: utils/adt/timestamp.c:2643 #, c-format msgid "cannot subtract infinite timestamps" msgstr "타임스탬프 무한값을 추출 할 수 없음" -#: utils/adt/timestamp.c:3905 utils/adt/timestamp.c:4498 -#: utils/adt/timestamp.c:4660 utils/adt/timestamp.c:4681 +#: utils/adt/timestamp.c:3912 utils/adt/timestamp.c:4505 +#: utils/adt/timestamp.c:4667 utils/adt/timestamp.c:4688 #, c-format msgid "timestamp units \"%s\" not supported" msgstr "\"%s\" timestamp 유닛은 지원하지 않습니다" -#: utils/adt/timestamp.c:3919 utils/adt/timestamp.c:4452 -#: utils/adt/timestamp.c:4691 +#: utils/adt/timestamp.c:3926 utils/adt/timestamp.c:4459 +#: utils/adt/timestamp.c:4698 #, c-format msgid "timestamp units \"%s\" not recognized" msgstr "\"%s\" timestamp 유닛을 처리하지 못했습니다" -#: utils/adt/timestamp.c:4049 utils/adt/timestamp.c:4493 -#: utils/adt/timestamp.c:4856 utils/adt/timestamp.c:4878 +#: utils/adt/timestamp.c:4056 utils/adt/timestamp.c:4500 +#: utils/adt/timestamp.c:4863 utils/adt/timestamp.c:4885 #, c-format msgid "timestamp with time zone units \"%s\" not supported" msgstr "\"%s\" 시간대 유닛이 있는 timestamp 자료형은 지원하지 않습니다" -#: utils/adt/timestamp.c:4066 utils/adt/timestamp.c:4447 -#: utils/adt/timestamp.c:4887 +#: utils/adt/timestamp.c:4073 utils/adt/timestamp.c:4454 +#: utils/adt/timestamp.c:4894 #, c-format msgid "timestamp with time zone units \"%s\" not recognized" msgstr "\"%s\" 시간대 유닛이 있는 timestamp 값을 처리하지 못했습니다" -#: utils/adt/timestamp.c:4224 +#: utils/adt/timestamp.c:4231 #, c-format msgid "" "interval units \"%s\" not supported because months usually have fractional " "weeks" msgstr "" -#: utils/adt/timestamp.c:4230 utils/adt/timestamp.c:4981 +#: utils/adt/timestamp.c:4237 utils/adt/timestamp.c:4988 #, c-format msgid "interval units \"%s\" not supported" msgstr "\"%s\" 유닛 간격(interval units)은 지원하지 않습니다" -#: utils/adt/timestamp.c:4246 utils/adt/timestamp.c:5004 +#: utils/adt/timestamp.c:4253 utils/adt/timestamp.c:5011 #, c-format msgid "interval units \"%s\" not recognized" msgstr "\"%s\" 유닛 간격(interval units)을 처리하지 못했습니다" @@ -24220,7 +24822,7 @@ msgstr "suppress_redundant_updates_trigger: 업데이트 전에 호출되어야 msgid "suppress_redundant_updates_trigger: must be called for each row" msgstr "suppress_redundant_updates_trigger: 각 행에 대해 호출되어야 함" -#: utils/adt/tsgistidx.c:81 +#: utils/adt/tsgistidx.c:92 #, c-format msgid "gtsvector_in not implemented" msgstr "gtsvector_in이 구현되어 있지 않음" @@ -24275,7 +24877,7 @@ msgstr "" "텍스트 검색 쿼리에 중지 단어만 포함되어 있거나 어휘소가 포함되어 있지 않음, " "무시됨" -#: utils/adt/tsquery_op.c:123 +#: utils/adt/tsquery_op.c:124 #, c-format msgid "distance in phrase operator should be non-negative and less than %d" msgstr "분석 작업에서 사용한 거리값은 %d 보다 작고 양수값만 사용할 수 있습니다" @@ -24285,89 +24887,89 @@ msgstr "분석 작업에서 사용한 거리값은 %d 보다 작고 양수값만 msgid "ts_rewrite query must return two tsquery columns" msgstr "ts_rewrite 쿼리는 두 개의 tsquery 칼럼을 반환해야 함" -#: utils/adt/tsrank.c:413 +#: utils/adt/tsrank.c:412 #, c-format msgid "array of weight must be one-dimensional" msgstr "가중치 배열은 일차원 배열이어야 함" -#: utils/adt/tsrank.c:418 +#: utils/adt/tsrank.c:417 #, c-format msgid "array of weight is too short" msgstr "가중치 배열이 너무 짧음" -#: utils/adt/tsrank.c:423 +#: utils/adt/tsrank.c:422 #, c-format msgid "array of weight must not contain nulls" msgstr "가중치 배열에는 null이 포함되지 않아야 함" -#: utils/adt/tsrank.c:432 utils/adt/tsrank.c:869 +#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:872 #, c-format msgid "weight out of range" msgstr "가중치가 범위를 벗어남" -#: utils/adt/tsvector.c:214 +#: utils/adt/tsvector.c:215 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "단어가 너무 긺(%ld바이트, 최대 %ld바이트)" -#: utils/adt/tsvector.c:221 +#: utils/adt/tsvector.c:222 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "" "문자열이 너무 길어서 tsvector에 사용할 수 없음(%ld바이트, 최대 %ld바이트)" -#: utils/adt/tsvector_op.c:321 utils/adt/tsvector_op.c:608 -#: utils/adt/tsvector_op.c:776 +#: utils/adt/tsvector_op.c:328 utils/adt/tsvector_op.c:608 +#: utils/adt/tsvector_op.c:770 #, c-format msgid "lexeme array may not contain nulls" msgstr "어휘소 배열에는 null이 포함되지 않아야 함" -#: utils/adt/tsvector_op.c:851 +#: utils/adt/tsvector_op.c:840 #, c-format msgid "weight array may not contain nulls" msgstr "가중치 배열에는 null이 포함되지 않아야 함" -#: utils/adt/tsvector_op.c:875 +#: utils/adt/tsvector_op.c:864 #, c-format msgid "unrecognized weight: \"%c\"" msgstr "알 수 없는 가중치: \"%c\"" -#: utils/adt/tsvector_op.c:2312 +#: utils/adt/tsvector_op.c:2414 #, c-format msgid "ts_stat query must return one tsvector column" msgstr "ts_stat 쿼리는 하나의 tsvector 칼럼을 반환해야 함" -#: utils/adt/tsvector_op.c:2494 +#: utils/adt/tsvector_op.c:2603 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "\"%s\" tsvector 칼럼이 없음" -#: utils/adt/tsvector_op.c:2501 +#: utils/adt/tsvector_op.c:2610 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "\"%s\" 칼럼은 tsvector 형식이 아님" -#: utils/adt/tsvector_op.c:2513 +#: utils/adt/tsvector_op.c:2622 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "\"%s\" 구성 칼럼이 없음" -#: utils/adt/tsvector_op.c:2519 +#: utils/adt/tsvector_op.c:2628 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "\"%s\" 칼럼은 regconfig 형이 아님" -#: utils/adt/tsvector_op.c:2526 +#: utils/adt/tsvector_op.c:2635 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "\"%s\" 구성 칼럼은 null이 아니어야 함" -#: utils/adt/tsvector_op.c:2539 +#: utils/adt/tsvector_op.c:2648 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "\"%s\" 텍스트 검색 구성 이름이 스키마로 한정되어야 함" -#: utils/adt/tsvector_op.c:2564 +#: utils/adt/tsvector_op.c:2673 #, c-format msgid "column \"%s\" is not of a character type" msgstr "\"%s\" 칼럼은 문자형이 아님" @@ -24387,22 +24989,17 @@ msgstr "이스케이프 문자가 없음: \"%s\"" msgid "wrong position info in tsvector: \"%s\"" msgstr "tsvector에 잘못된 위치 정보가 있음: \"%s\"" -#: utils/adt/txid.c:140 -#, c-format -msgid "transaction ID %s is in the future" -msgstr "%s 트랜잭션 ID는 미래의 것입니다" - -#: utils/adt/txid.c:629 +#: utils/adt/uuid.c:428 #, c-format -msgid "invalid external txid_snapshot data" -msgstr "외부 txid_snapshot 값이 잘못됨" +msgid "could not generate random values" +msgstr "무작위 값 생성 실패" -#: utils/adt/varbit.c:109 utils/adt/varchar.c:54 +#: utils/adt/varbit.c:109 utils/adt/varchar.c:53 #, c-format msgid "length for type %s must be at least 1" msgstr "%s 자료형의 길이는 최소 1 이상이어야합니다" -#: utils/adt/varbit.c:114 utils/adt/varchar.c:58 +#: utils/adt/varbit.c:114 utils/adt/varchar.c:57 #, c-format msgid "length for type %s cannot exceed %d" msgstr "%s 자료형의 길이는 최대 %d 이하여야합니다" @@ -24438,9 +25035,9 @@ msgstr "외부 비트 문자열의 길이가 잘못되었습니다" msgid "bit string too long for type bit varying(%d)" msgstr "비트 문자열이 너무 깁니다(해당 자료형 bit varying(%d))" -#: utils/adt/varbit.c:1086 utils/adt/varbit.c:1184 utils/adt/varlena.c:863 -#: utils/adt/varlena.c:927 utils/adt/varlena.c:1071 utils/adt/varlena.c:3274 -#: utils/adt/varlena.c:3341 +#: utils/adt/varbit.c:1086 utils/adt/varbit.c:1184 utils/adt/varlena.c:875 +#: utils/adt/varlena.c:939 utils/adt/varlena.c:1083 utils/adt/varlena.c:3306 +#: utils/adt/varlena.c:3373 #, c-format msgid "negative substring length not allowed" msgstr "substring에서 음수 길이는 허용하지 않음" @@ -24465,103 +25062,117 @@ msgstr "서로 크기가 틀린 비트 문자열은 XOR 연산을 할 수 없습 msgid "bit index %d out of valid range (0..%d)" msgstr "비트 %d 인덱스의 범위를 벗어남 (0..%d)" -#: utils/adt/varbit.c:1813 utils/adt/varlena.c:3532 +#: utils/adt/varbit.c:1813 utils/adt/varlena.c:3566 #, c-format msgid "new bit must be 0 or 1" msgstr "새 비트값은 0 또는 1 이어야합니다" -#: utils/adt/varchar.c:158 utils/adt/varchar.c:311 +#: utils/adt/varchar.c:157 utils/adt/varchar.c:310 #, c-format msgid "value too long for type character(%d)" msgstr "character(%d) 자료형에 너무 긴 자료를 담으려고 합니다." -#: utils/adt/varchar.c:473 utils/adt/varchar.c:635 +#: utils/adt/varchar.c:472 utils/adt/varchar.c:634 #, c-format msgid "value too long for type character varying(%d)" msgstr "character varying(%d) 자료형에 너무 긴 자료를 담으려고 합니다." -#: utils/adt/varchar.c:733 utils/adt/varlena.c:1463 +#: utils/adt/varchar.c:732 utils/adt/varlena.c:1475 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "문자열 비교 작업에 사용할 정렬규칙(collation)을 결정할 수 없음" -#: utils/adt/varlena.c:1170 utils/adt/varlena.c:1903 +#: utils/adt/varlena.c:1182 utils/adt/varlena.c:1915 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "문자열 검색 작업에 사용할 비결정 정렬규칙(collation)을 지원하지 않음" -#: utils/adt/varlena.c:1562 utils/adt/varlena.c:1575 +#: utils/adt/varlena.c:1574 utils/adt/varlena.c:1587 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "UTF-16 인코딩으로 문자열을 변환할 수 없음: 오류번호 %lu" -#: utils/adt/varlena.c:1590 +#: utils/adt/varlena.c:1602 #, c-format msgid "could not compare Unicode strings: %m" msgstr "유니코드 문자열 비교 실패: %m" -#: utils/adt/varlena.c:1641 utils/adt/varlena.c:2355 +#: utils/adt/varlena.c:1653 utils/adt/varlena.c:2367 #, c-format msgid "collation failed: %s" msgstr "문자열 정렬: %s" -#: utils/adt/varlena.c:2563 +#: utils/adt/varlena.c:2575 #, c-format msgid "sort key generation failed: %s" msgstr "정렬 키 생성 실패: %s" -#: utils/adt/varlena.c:3418 utils/adt/varlena.c:3449 utils/adt/varlena.c:3484 -#: utils/adt/varlena.c:3520 +#: utils/adt/varlena.c:3450 utils/adt/varlena.c:3517 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "%d 인덱스의 범위를 벗어남, 0..%d" -#: utils/adt/varlena.c:4556 +#: utils/adt/varlena.c:3481 utils/adt/varlena.c:3553 +#, c-format +msgid "index %lld out of valid range, 0..%lld" +msgstr "%lld 인덱스의 범위를 벗어남, 0..%lld" + +#: utils/adt/varlena.c:4590 #, c-format msgid "field position must be greater than zero" msgstr "필드 위치 값은 0 보다 커야합니다" -#: utils/adt/varlena.c:5422 +#: utils/adt/varlena.c:5456 #, c-format msgid "unterminated format() type specifier" msgstr "마무리 안된 format() 형 식별자" -#: utils/adt/varlena.c:5423 utils/adt/varlena.c:5557 utils/adt/varlena.c:5678 +#: utils/adt/varlena.c:5457 utils/adt/varlena.c:5591 utils/adt/varlena.c:5712 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "하나의 \"%%\" 문자를 표시하려면, \"%%%%\" 형태로 사용하세요" -#: utils/adt/varlena.c:5555 utils/adt/varlena.c:5676 +#: utils/adt/varlena.c:5589 utils/adt/varlena.c:5710 #, c-format msgid "unrecognized format() type specifier \"%c\"" msgstr "인식할 수 없는 format() 형 식별자 \"%c\"" -#: utils/adt/varlena.c:5568 utils/adt/varlena.c:5625 +#: utils/adt/varlena.c:5602 utils/adt/varlena.c:5659 #, c-format msgid "too few arguments for format()" msgstr "format() 작업을 위한 인자가 너무 적음" -#: utils/adt/varlena.c:5721 utils/adt/varlena.c:5903 +#: utils/adt/varlena.c:5755 utils/adt/varlena.c:5937 #, c-format msgid "number is out of range" msgstr "수치 범위를 벗어남" -#: utils/adt/varlena.c:5784 utils/adt/varlena.c:5812 +#: utils/adt/varlena.c:5818 utils/adt/varlena.c:5846 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "" "format 함수에서 사용할 수 있는 인자 위치 번호는 0이 아니라, 1부터 시작합니다" -#: utils/adt/varlena.c:5805 +#: utils/adt/varlena.c:5839 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "넓이 인자 위치값은 \"$\" 문자로 끝나야 합니다" -#: utils/adt/varlena.c:5850 +#: utils/adt/varlena.c:5884 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "null 값은 SQL 식별자로 포멧될 수 없음" +#: utils/adt/varlena.c:6010 +#, c-format +msgid "Unicode normalization can only be performed if server encoding is UTF8" +msgstr "" + +#: utils/adt/varlena.c:6023 +#, c-format +msgid "invalid normalization form: %s" +msgstr "잘못된 normalization 형식: %s" + #: utils/adt/windowfuncs.c:243 #, c-format msgid "argument of ntile must be greater than zero" @@ -24572,6 +25183,16 @@ msgstr "ntile의 인자는 0보다 커야 함" msgid "argument of nth_value must be greater than zero" msgstr "nth_value의 인자는 0보다 커야 함" +#: utils/adt/xid8funcs.c:116 +#, c-format +msgid "transaction ID %s is in the future" +msgstr "%s 트랜잭션 ID는 미래의 것입니다" + +#: utils/adt/xid8funcs.c:547 +#, c-format +msgid "invalid external pg_snapshot data" +msgstr "외부 pg_snapshot 자료가 잘못됨" + #: utils/adt/xml.c:222 #, c-format msgid "unsupported XML feature" @@ -24587,7 +25208,7 @@ msgstr "이 기능을 사용하려면 libxml 지원으로 서버를 빌드해야 msgid "You need to rebuild PostgreSQL using --with-libxml." msgstr "--with-libxml을 사용하여 PostgreSQL을 다시 빌드해야 합니다." -#: utils/adt/xml.c:243 utils/mb/mbutils.c:540 +#: utils/adt/xml.c:243 utils/mb/mbutils.c:570 #, c-format msgid "invalid encoding name \"%s\"" msgstr "\"%s\" 인코딩 이름이 잘못됨" @@ -24677,87 +25298,92 @@ msgstr "XML 선언 구문 분석 중: '?>'가 필요합니다." msgid "Unrecognized libxml error code: %d." msgstr "인식할 수 없는 libxml 오류 코드: %d." -#: utils/adt/xml.c:2229 +#: utils/adt/xml.c:2211 #, c-format msgid "XML does not support infinite date values." msgstr "XML은 무한 날짜 값을 지원하지 않습니다." -#: utils/adt/xml.c:2251 utils/adt/xml.c:2278 +#: utils/adt/xml.c:2233 utils/adt/xml.c:2260 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML은 무한 타임스탬프 값을 지원하지 않습니다." -#: utils/adt/xml.c:2690 +#: utils/adt/xml.c:2676 #, c-format msgid "invalid query" msgstr "잘못된 쿼리" -#: utils/adt/xml.c:4037 +#: utils/adt/xml.c:4016 #, c-format msgid "invalid array for XML namespace mapping" msgstr "XML 네임스페이스 매핑에 사용할 배열이 잘못됨" -#: utils/adt/xml.c:4038 +#: utils/adt/xml.c:4017 #, c-format msgid "" "The array must be two-dimensional with length of the second axis equal to 2." msgstr "" "이 배열은 key, value로 구성된 배열을 요소로 하는 2차원 배열이어야 합니다." -#: utils/adt/xml.c:4062 +#: utils/adt/xml.c:4041 #, c-format msgid "empty XPath expression" msgstr "XPath 식이 비어 있음" -#: utils/adt/xml.c:4114 +#: utils/adt/xml.c:4093 #, c-format msgid "neither namespace name nor URI may be null" msgstr "네임스페이스 이름 및 URI는 null일 수 없음" -#: utils/adt/xml.c:4121 +#: utils/adt/xml.c:4100 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "" "이름 \"%s\" 및 URI \"%s\"을(를) 사용하여 XML 네임스페이스를 등록할 수 없음" -#: utils/adt/xml.c:4472 +#: utils/adt/xml.c:4451 #, c-format msgid "DEFAULT namespace is not supported" msgstr "DEFAULT 네임스페이스는 지원하지 않습니다." -#: utils/adt/xml.c:4501 +#: utils/adt/xml.c:4480 #, c-format msgid "row path filter must not be empty string" msgstr "로우 경로 필터는 비어있으면 안됩니다" -#: utils/adt/xml.c:4532 +#: utils/adt/xml.c:4511 #, c-format msgid "column path filter must not be empty string" msgstr "칼럼 경로 필터는 비어있으면 안됩니다" -#: utils/adt/xml.c:4682 +#: utils/adt/xml.c:4661 #, c-format msgid "more than one value returned by column XPath expression" msgstr "칼럼 XPath 표현식에 사용된 결과가 하나 이상의 값을 사용합니다" +#: utils/cache/lsyscache.c:1015 +#, c-format +msgid "cast from type %s to type %s does not exist" +msgstr "%s 형에서 %s 형으로 바꾸는 형변환 규칙(cast)가 없음" + # # nonun 부분 end -#: utils/cache/lsyscache.c:2654 utils/cache/lsyscache.c:2687 -#: utils/cache/lsyscache.c:2720 utils/cache/lsyscache.c:2753 +#: utils/cache/lsyscache.c:2764 utils/cache/lsyscache.c:2797 +#: utils/cache/lsyscache.c:2830 utils/cache/lsyscache.c:2863 #, c-format msgid "type %s is only a shell" msgstr "%s 형식은 셸일 뿐임" -#: utils/cache/lsyscache.c:2659 +#: utils/cache/lsyscache.c:2769 #, c-format msgid "no input function available for type %s" msgstr "%s 자료형을 위한 입력 함수가 없습니다" -#: utils/cache/lsyscache.c:2692 +#: utils/cache/lsyscache.c:2802 #, c-format msgid "no output function available for type %s" msgstr "%s 자료형을 위한 출력 함수가 없습니다" -#: utils/cache/partcache.c:195 +#: utils/cache/partcache.c:215 #, c-format msgid "" "operator class \"%s\" of access method %s is missing support function %d for " @@ -24771,17 +25397,17 @@ msgstr "" msgid "cached plan must not change result type" msgstr "캐시된 계획에서 결과 형식을 바꾸지 않아야 함" -#: utils/cache/relcache.c:5809 +#: utils/cache/relcache.c:6078 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "\"%s\" 릴레이션-캐시 초기화 파일을 만들 수 없음: %m" -#: utils/cache/relcache.c:5811 +#: utils/cache/relcache.c:6080 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "어쨌든 계속하는데, 뭔가 잘못 된 것이 있습니다." -#: utils/cache/relcache.c:6123 +#: utils/cache/relcache.c:6402 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "\"%s\" 캐쉬 파일을 삭제할 수 없음: %m" @@ -24801,109 +25427,113 @@ msgstr "\"%s\" 릴레이션 맵핑 파일에 잘못된 데이터가 있습니다 msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "\"%s\" 릴레이션 맵핑 파일에 잘못된 checksum 값이 있음" -#: utils/cache/typcache.c:1634 utils/fmgr/funcapi.c:420 +#: utils/cache/typcache.c:1692 utils/fmgr/funcapi.c:461 #, c-format msgid "record type has not been registered" msgstr "레코드 형식이 등록되지 않았음" -#: utils/error/assert.c:34 +#: utils/error/assert.c:37 #, c-format msgid "TRAP: ExceptionalCondition: bad arguments\n" msgstr "TRAP: ExceptionalCondition: 잘못된 인자\n" -#: utils/error/assert.c:37 +#: utils/error/assert.c:40 #, c-format msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n" msgstr "TRAP: %s(\"%s\", 파일: \"%s\", 줄: %d)\n" -#: utils/error/elog.c:319 utils/error/elog.c:1293 +#: utils/error/elog.c:322 #, c-format -msgid "error occurred at %s:%d before error message processing is available\n" -msgstr "오류 메시지 처리가 활성화 되기 전에 %s:%d 에서 오류가 발생했습니다\n" +msgid "error occurred before error message processing is available\n" +msgstr "오류 메시지 처리가 활성화 되기 전에 오류가 발생했습니다\n" -#: utils/error/elog.c:1871 +#: utils/error/elog.c:1868 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "stderr 로 사용하기 위해 \"%s\" 파일 다시 열기 실패: %m" -#: utils/error/elog.c:1884 +#: utils/error/elog.c:1881 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "표준출력(stdout)으로 사용하기 위해 \"%s\" 파일을 여는 도중 실패: %m" -#: utils/error/elog.c:2376 utils/error/elog.c:2393 utils/error/elog.c:2409 +#: utils/error/elog.c:2373 utils/error/elog.c:2407 utils/error/elog.c:2423 msgid "[unknown]" msgstr "[알수없음]" -#: utils/error/elog.c:2869 utils/error/elog.c:3172 utils/error/elog.c:3280 +#: utils/error/elog.c:2893 utils/error/elog.c:3203 utils/error/elog.c:3311 msgid "missing error text" msgstr "오류 내용을 뺍니다" -#: utils/error/elog.c:2872 utils/error/elog.c:2875 utils/error/elog.c:3283 -#: utils/error/elog.c:3286 +#: utils/error/elog.c:2896 utils/error/elog.c:2899 utils/error/elog.c:3314 +#: utils/error/elog.c:3317 #, c-format msgid " at character %d" msgstr " %d 번째 문자 부근" -#: utils/error/elog.c:2885 utils/error/elog.c:2892 +#: utils/error/elog.c:2909 utils/error/elog.c:2916 msgid "DETAIL: " msgstr "상세정보: " -#: utils/error/elog.c:2899 +#: utils/error/elog.c:2923 msgid "HINT: " msgstr "힌트: " -#: utils/error/elog.c:2906 +#: utils/error/elog.c:2930 msgid "QUERY: " msgstr "쿼리:" -#: utils/error/elog.c:2913 +#: utils/error/elog.c:2937 msgid "CONTEXT: " msgstr "내용: " -#: utils/error/elog.c:2923 +#: utils/error/elog.c:2947 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "위치: %s, %s:%d\n" -#: utils/error/elog.c:2930 +#: utils/error/elog.c:2954 #, c-format msgid "LOCATION: %s:%d\n" msgstr "위치: %s:%d\n" -#: utils/error/elog.c:2944 +#: utils/error/elog.c:2961 +msgid "BACKTRACE: " +msgstr "" + +#: utils/error/elog.c:2975 msgid "STATEMENT: " msgstr "명령 구문: " -#: utils/error/elog.c:3333 +#: utils/error/elog.c:3364 msgid "DEBUG" msgstr "디버그" -#: utils/error/elog.c:3337 +#: utils/error/elog.c:3368 msgid "LOG" msgstr "로그" -#: utils/error/elog.c:3340 +#: utils/error/elog.c:3371 msgid "INFO" msgstr "정보" -#: utils/error/elog.c:3343 +#: utils/error/elog.c:3374 msgid "NOTICE" msgstr "알림" -#: utils/error/elog.c:3346 +#: utils/error/elog.c:3377 msgid "WARNING" msgstr "경고" -#: utils/error/elog.c:3349 +#: utils/error/elog.c:3380 msgid "ERROR" msgstr "오류" -#: utils/error/elog.c:3352 +#: utils/error/elog.c:3383 msgid "FATAL" msgstr "치명적오류" -#: utils/error/elog.c:3355 +#: utils/error/elog.c:3386 msgid "PANIC" msgstr "손상" @@ -24954,227 +25584,227 @@ msgstr "서버의 경우 NAMEDATALEN = %d인데 라이브러리에 %d이(가) #: utils/fmgr/dfmgr.c:373 #, c-format -msgid "Server has FLOAT4PASSBYVAL = %s, library has %s." -msgstr "서버의 경우 FLOAT4PASSBYVAL = %s인데 라이브러리에 %s이(가) 있습니다." - -#: utils/fmgr/dfmgr.c:382 -#, c-format msgid "Server has FLOAT8PASSBYVAL = %s, library has %s." msgstr "서버의 경우 FLOAT8PASSBYVAL = %s인데 라이브러리에 %s이(가) 있습니다." -#: utils/fmgr/dfmgr.c:389 +#: utils/fmgr/dfmgr.c:380 msgid "Magic block has unexpected length or padding difference." msgstr "매직 블록에 예기치 않은 길이 또는 여백 차이가 있습니다." -#: utils/fmgr/dfmgr.c:392 +#: utils/fmgr/dfmgr.c:383 #, c-format msgid "incompatible library \"%s\": magic block mismatch" msgstr "\"%s\" 라이브러리는 사용할 수 없습니다: magic black 틀림" -#: utils/fmgr/dfmgr.c:556 +#: utils/fmgr/dfmgr.c:547 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "\"%s\" 라이브러리 사용이 금지되어있습니다" -#: utils/fmgr/dfmgr.c:582 +#: utils/fmgr/dfmgr.c:573 #, c-format msgid "invalid macro name in dynamic library path: %s" msgstr "동적 라이브러리 경로에서 잘못된 매크로 이름: %s" -#: utils/fmgr/dfmgr.c:622 +#: utils/fmgr/dfmgr.c:613 #, c-format msgid "zero-length component in parameter \"dynamic_library_path\"" msgstr "\"dynamic_library_path\" 매개 변수 값으로 길이가 0인 값을 사용했음" -#: utils/fmgr/dfmgr.c:641 +#: utils/fmgr/dfmgr.c:632 #, c-format msgid "component in parameter \"dynamic_library_path\" is not an absolute path" msgstr "\"dynamic_library_path\" 매개 변수 값으로 절대 경로를 사용할 수 없음" -#: utils/fmgr/fmgr.c:236 +#: utils/fmgr/fmgr.c:238 #, c-format msgid "internal function \"%s\" is not in internal lookup table" msgstr "\"%s\" 내부 함수를 내부 검색 테이블에서 찾을 수 없습니다" -#: utils/fmgr/fmgr.c:485 +#: utils/fmgr/fmgr.c:487 #, c-format msgid "could not find function information for function \"%s\"" msgstr "\"%s\" 함수의 함수 정보를 찾을 수 없음" -#: utils/fmgr/fmgr.c:487 +#: utils/fmgr/fmgr.c:489 #, c-format msgid "" "SQL-callable functions need an accompanying PG_FUNCTION_INFO_V1(funcname)." msgstr "" -#: utils/fmgr/fmgr.c:505 +#: utils/fmgr/fmgr.c:507 #, c-format msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "_^_ %d 알수 없는 API 버전이 \"%s\" 함수에 의해서 보고되었음" -#: utils/fmgr/fmgr.c:2032 +#: utils/fmgr/fmgr.c:2003 +#, c-format +msgid "operator class options info is absent in function call context" +msgstr "" + +#: utils/fmgr/fmgr.c:2070 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "" "%u OID 언어 유효성 검사 함수가 %u OID 프로시져 언어용으로 호출되었음, 원래 언" "어는 %u" -#: utils/fmgr/funcapi.c:343 +#: utils/fmgr/funcapi.c:384 #, c-format msgid "" "could not determine actual result type for function \"%s\" declared to " "return type %s" msgstr "\"%s\" 함수의 실재 리턴 자료형을 알 수 없음, 정의된 리턴 자료형: %s" -#: utils/fmgr/funcapi.c:1388 utils/fmgr/funcapi.c:1420 +#: utils/fmgr/funcapi.c:1651 utils/fmgr/funcapi.c:1683 #, c-format msgid "number of aliases does not match number of columns" msgstr "alias 수가 열 수와 틀립니다" -#: utils/fmgr/funcapi.c:1414 +#: utils/fmgr/funcapi.c:1677 #, c-format msgid "no column alias was provided" msgstr "열 별칭이 제공되지 않았음" -#: utils/fmgr/funcapi.c:1438 +#: utils/fmgr/funcapi.c:1701 #, c-format msgid "could not determine row description for function returning record" msgstr "레코드를 리턴하는 함수를 위한 행(row) 구성 정보를 구할 수 없음" -#: utils/init/miscinit.c:110 +#: utils/init/miscinit.c:285 #, c-format msgid "data directory \"%s\" does not exist" msgstr "\"%s\" 데이터 디렉터리 없음" -#: utils/init/miscinit.c:115 +#: utils/init/miscinit.c:290 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "\"%s\" 디렉터리 읽기 권한 없음: %m" -#: utils/init/miscinit.c:123 +#: utils/init/miscinit.c:298 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "지정한 \"%s\" 데이터 디렉터리는 디렉터리가 아님" -#: utils/init/miscinit.c:139 +#: utils/init/miscinit.c:314 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "\"%s\" 데이터 디렉터리 소유주가 잘못 되었습니다." -#: utils/init/miscinit.c:141 +#: utils/init/miscinit.c:316 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "서버는 지정한 데이터 디렉터리의 소유주 권한으로 시작되어야합니다." -#: utils/init/miscinit.c:159 +#: utils/init/miscinit.c:334 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "\"%s\" 데이터 디렉터리 접근 권한에 문제가 있습니다." -#: utils/init/miscinit.c:161 +#: utils/init/miscinit.c:336 #, c-format msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "액세스 권한은 u=rwx (0700) 또는 u=rwx,o=rx (0750) 값이어야 합니다." -#: utils/init/miscinit.c:547 utils/misc/guc.c:6910 +#: utils/init/miscinit.c:615 utils/misc/guc.c:7139 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "보안 제한 작업 내에서 \"%s\" 매개 변수를 설정할 수 없음" -#: utils/init/miscinit.c:615 +#: utils/init/miscinit.c:683 #, c-format msgid "role with OID %u does not exist" msgstr "%u OID 롤이 없음" -#: utils/init/miscinit.c:645 +#: utils/init/miscinit.c:713 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "\"%s\" 롤은 접속을 허용하지 않음" -#: utils/init/miscinit.c:663 +#: utils/init/miscinit.c:731 #, c-format msgid "too many connections for role \"%s\"" msgstr "\"%s\" 롤의 최대 동시 접속수를 초과했습니다" -#: utils/init/miscinit.c:723 +#: utils/init/miscinit.c:791 #, c-format msgid "permission denied to set session authorization" msgstr "세션 인증을 지정하기 위한 권한이 없음" -#: utils/init/miscinit.c:806 +#: utils/init/miscinit.c:874 #, c-format msgid "invalid role OID: %u" msgstr "잘못된 롤 OID: %u" -#: utils/init/miscinit.c:860 +#: utils/init/miscinit.c:928 #, c-format msgid "database system is shut down" msgstr "데이터베이스 시스템 서비스를 중지했습니다" -#: utils/init/miscinit.c:947 +#: utils/init/miscinit.c:1015 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "\"%s\" 잠금 파일을 만들 수 없음: %m" -#: utils/init/miscinit.c:961 +#: utils/init/miscinit.c:1029 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "\"%s\" 잠금파일을 열 수 없음: %m" -#: utils/init/miscinit.c:968 +#: utils/init/miscinit.c:1036 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "\"%s\" 잠금 파일을 읽을 수 없음: %m" -#: utils/init/miscinit.c:977 +#: utils/init/miscinit.c:1045 #, c-format msgid "lock file \"%s\" is empty" msgstr "\"%s\" 잠금 파일이 비었음" -#: utils/init/miscinit.c:978 +#: utils/init/miscinit.c:1046 #, c-format msgid "" "Either another server is starting, or the lock file is the remnant of a " "previous server startup crash." msgstr "" -#: utils/init/miscinit.c:1022 +#: utils/init/miscinit.c:1090 #, c-format msgid "lock file \"%s\" already exists" msgstr "\"%s\" 잠금 파일이 이미 있음" -#: utils/init/miscinit.c:1026 +#: utils/init/miscinit.c:1094 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "" "다른 postgres 프로그램(PID %d)이 \"%s\" 데이터 디렉터리를 사용해서 실행중입니" "까?" -#: utils/init/miscinit.c:1028 +#: utils/init/miscinit.c:1096 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "" "다른 postmaster 프로그램(PID %d)이 \"%s\" 데이터 디렉터리를 사용해서 실행중입" "니까?" -#: utils/init/miscinit.c:1031 +#: utils/init/miscinit.c:1099 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "" "다른 postgres 프로그램(PID %d)이 \"%s\" 소켓 파일을 사용해서 실행중입니까?" -#: utils/init/miscinit.c:1033 +#: utils/init/miscinit.c:1101 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "" "다른 postmaster 프로그램(PID %d)이 \"%s\" 소켓 파일을 사용해서 실행중입니까?" -#: utils/init/miscinit.c:1084 +#: utils/init/miscinit.c:1152 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "\"%s\" 옛 잠금 파일을 삭제할 수 없음: %m" -#: utils/init/miscinit.c:1086 +#: utils/init/miscinit.c:1154 #, c-format msgid "" "The file seems accidentally left over, but it could not be removed. Please " @@ -25184,48 +25814,48 @@ msgstr "" "셸 명령을 이용해서 파일을 삭제 하고 다시 시도해 보십시오. - 내용 참 거시기 하" "네" -#: utils/init/miscinit.c:1123 utils/init/miscinit.c:1137 -#: utils/init/miscinit.c:1148 +#: utils/init/miscinit.c:1191 utils/init/miscinit.c:1205 +#: utils/init/miscinit.c:1216 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "\"%s\" 잠금 파일에 쓸 수 없음: %m" -#: utils/init/miscinit.c:1280 utils/init/miscinit.c:1423 utils/misc/guc.c:9810 +#: utils/init/miscinit.c:1327 utils/init/miscinit.c:1469 utils/misc/guc.c:10038 #, c-format msgid "could not read from file \"%s\": %m" msgstr "\"%s\" 파일을 읽을 수 없음: %m" -#: utils/init/miscinit.c:1411 +#: utils/init/miscinit.c:1457 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "\"%s\" 파일을 열 수 없음: %m; 어째든 계속 진행함" -#: utils/init/miscinit.c:1436 +#: utils/init/miscinit.c:1482 #, c-format msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" msgstr "\"%s\" 잠금 파일에 있는 PID 값이 이상합니다: 현재값 %ld, 원래값 %ld" -#: utils/init/miscinit.c:1475 utils/init/miscinit.c:1491 +#: utils/init/miscinit.c:1521 utils/init/miscinit.c:1537 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "\"%s\" 값은 바른 데이터디렉터리가 아닙니다" -#: utils/init/miscinit.c:1477 +#: utils/init/miscinit.c:1523 #, c-format msgid "File \"%s\" is missing." msgstr "\"%s\" 파일이 없습니다." -#: utils/init/miscinit.c:1493 +#: utils/init/miscinit.c:1539 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "\"%s\" 파일에 잘못된 자료가 기록되어 있습니다." -#: utils/init/miscinit.c:1495 +#: utils/init/miscinit.c:1541 #, c-format msgid "You might need to initdb." msgstr "initdb 명령을 실행해 새 클러스터를 만들어야 할 수도 있습니다." -#: utils/init/miscinit.c:1503 +#: utils/init/miscinit.c:1549 #, c-format msgid "" "The data directory was initialized by PostgreSQL version %s, which is not " @@ -25234,7 +25864,7 @@ msgstr "" "이 데이터 디렉터리는 PostgreSQL %s 버전으로 초기화 되어있는데, 이 서버의 %s " "버전은 이 버전과 호환성이 없습니다." -#: utils/init/miscinit.c:1570 +#: utils/init/miscinit.c:1616 #, c-format msgid "loaded library \"%s\"" msgstr "\"%s\" 라이브러리 로드 완료" @@ -25365,66 +25995,66 @@ msgstr "" "setlocale()에서 인식할 수 없는 \"%s\" LC_CTYPE 값으로 데이터베이스가 초기화되" "었습니다." -#: utils/init/postinit.c:764 +#: utils/init/postinit.c:762 #, c-format msgid "no roles are defined in this database system" msgstr "이 데이터베이스에는 어떠한 롤 정의도 없습니다" -#: utils/init/postinit.c:765 +#: utils/init/postinit.c:763 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "다음 명령을 먼저 실행하십시오: CREATE USER \"%s\" SUPERUSER;." -#: utils/init/postinit.c:801 +#: utils/init/postinit.c:799 #, c-format msgid "new replication connections are not allowed during database shutdown" msgstr "데이터베이스 중지 중에는 새로운 복제 연결을 할 수 없습니다." -#: utils/init/postinit.c:805 +#: utils/init/postinit.c:803 #, c-format msgid "must be superuser to connect during database shutdown" msgstr "슈퍼유저만 데이터베이스 종료 중에 연결할 수 있음" -#: utils/init/postinit.c:815 +#: utils/init/postinit.c:813 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "슈퍼유저만 바이너리 업그레이드 모드 중에 연결 할 수 있음" -#: utils/init/postinit.c:828 +#: utils/init/postinit.c:826 #, c-format msgid "" "remaining connection slots are reserved for non-replication superuser " "connections" msgstr "남은 연결 슬롯은 non-replication 슈퍼유저 연결용으로 남겨 놓았음" -#: utils/init/postinit.c:838 +#: utils/init/postinit.c:836 #, c-format msgid "must be superuser or replication role to start walsender" msgstr "" "superuser 또는 replication 권한을 가진 롤만 walsender 프로세스를 시작할 수 있" "음" -#: utils/init/postinit.c:907 +#: utils/init/postinit.c:905 #, c-format msgid "database %u does not exist" msgstr "%u 데이터베이스가 없음" -#: utils/init/postinit.c:996 +#: utils/init/postinit.c:994 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "삭제되었거나 이름이 바뀐 것 같습니다." -#: utils/init/postinit.c:1014 +#: utils/init/postinit.c:1012 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "데이터베이스 디렉터리에 \"%s\" 하위 디렉터리가 없습니다" -#: utils/init/postinit.c:1019 +#: utils/init/postinit.c:1017 #, c-format msgid "could not access directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 액세스할 수 없습니다: %m" -#: utils/mb/conv.c:488 utils/mb/conv.c:680 +#: utils/mb/conv.c:443 utils/mb/conv.c:635 #, c-format msgid "invalid encoding number: %d" msgstr "잘못된 인코딩 번호: %d" @@ -25441,60 +26071,55 @@ msgstr "%d은(는) ISO 8859 문자 집합에 대한 예기치 않은 인코딩 I msgid "unexpected encoding ID %d for WIN character sets" msgstr "%d은(는) WIN 문자 집합에 대한 예기치 않은 인코딩 ID임" -#: utils/mb/encnames.c:473 -#, c-format -msgid "encoding \"%s\" not supported by ICU" -msgstr "\"%s\" 인코딩은 ICU 기능을 지원하지 않음" - -#: utils/mb/encnames.c:572 -#, c-format -msgid "encoding name too long" -msgstr "인코딩 이름이 너무 깁니다" - -#: utils/mb/mbutils.c:296 +#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:842 #, c-format msgid "conversion between %s and %s is not supported" msgstr "%s 인코딩과 %s 인코딩 사이의 변환은 지원하지 않습니다" -#: utils/mb/mbutils.c:355 +#: utils/mb/mbutils.c:385 #, c-format msgid "" "default conversion function for encoding \"%s\" to \"%s\" does not exist" msgstr "" "\"%s\" 인코딩을 \"%s\" 인코딩으로 변환할 기본 변환규칙(conversion)이 없음" -#: utils/mb/mbutils.c:372 utils/mb/mbutils.c:399 utils/mb/mbutils.c:728 -#: utils/mb/mbutils.c:754 +#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:429 utils/mb/mbutils.c:758 +#: utils/mb/mbutils.c:784 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "%d바이트의 문자열은 너무 길어서 인코딩 규칙에 맞지 않습니다." -#: utils/mb/mbutils.c:481 +#: utils/mb/mbutils.c:511 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "\"%s\" 원본 인코딩 이름이 타당치 못함" -#: utils/mb/mbutils.c:486 +#: utils/mb/mbutils.c:516 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "\"%s\" 대상 인코딩 이름이 타당치 못함" -#: utils/mb/mbutils.c:626 +#: utils/mb/mbutils.c:656 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "\"%s\" 인코딩에서 사용할 수 없는 바이트: 0x%02x" -#: utils/mb/mbutils.c:990 +#: utils/mb/mbutils.c:819 +#, c-format +msgid "invalid Unicode code point" +msgstr "잘못된 유니코드 코드 포인트" + +#: utils/mb/mbutils.c:1087 #, c-format msgid "bind_textdomain_codeset failed" msgstr "bind_textdomain_codeset 실패" -#: utils/mb/wchar.c:2063 +#: utils/mb/mbutils.c:1595 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "\"%s\" 인코딩에서 사용할 수 없는 문자가 있음: %s" -#: utils/mb/wchar.c:2096 +#: utils/mb/mbutils.c:1628 #, c-format msgid "" "character with byte sequence %s in encoding \"%s\" has no equivalent in " @@ -25503,217 +26128,217 @@ msgstr "" "%s 바이트로 조합된 문자(인코딩: \"%s\")와 대응되는 문자 코드가 \"%s\" 인코딩" "에는 없습니다" -#: utils/misc/guc.c:634 +#: utils/misc/guc.c:679 msgid "Ungrouped" msgstr "소속그룹없음" -#: utils/misc/guc.c:636 +#: utils/misc/guc.c:681 msgid "File Locations" msgstr "파일 위치" -#: utils/misc/guc.c:638 +#: utils/misc/guc.c:683 msgid "Connections and Authentication" msgstr "연결과 인증" -#: utils/misc/guc.c:640 +#: utils/misc/guc.c:685 msgid "Connections and Authentication / Connection Settings" msgstr "연결과 인증 / 연결 설정값" -#: utils/misc/guc.c:642 +#: utils/misc/guc.c:687 msgid "Connections and Authentication / Authentication" msgstr "연결과 인증 / 인증" -#: utils/misc/guc.c:644 +#: utils/misc/guc.c:689 msgid "Connections and Authentication / SSL" msgstr "연결과 인증 / SSL" -#: utils/misc/guc.c:646 +#: utils/misc/guc.c:691 msgid "Resource Usage" msgstr "자원 사용량" -#: utils/misc/guc.c:648 +#: utils/misc/guc.c:693 msgid "Resource Usage / Memory" msgstr "자원 사용량 / 메모리" -#: utils/misc/guc.c:650 +#: utils/misc/guc.c:695 msgid "Resource Usage / Disk" msgstr "자원 사용량 / 디스크" -#: utils/misc/guc.c:652 +#: utils/misc/guc.c:697 msgid "Resource Usage / Kernel Resources" msgstr "자원 사용량 / 커널 자원" -#: utils/misc/guc.c:654 +#: utils/misc/guc.c:699 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "자원 사용량 / 비용기반 청소 지연" -#: utils/misc/guc.c:656 +#: utils/misc/guc.c:701 msgid "Resource Usage / Background Writer" msgstr "자원 사용량 / 백그라운드 쓰기" -#: utils/misc/guc.c:658 +#: utils/misc/guc.c:703 msgid "Resource Usage / Asynchronous Behavior" msgstr "자원 사용량 / 비동기 기능" -#: utils/misc/guc.c:660 +#: utils/misc/guc.c:705 msgid "Write-Ahead Log" msgstr "Write-Ahead 로그" -#: utils/misc/guc.c:662 +#: utils/misc/guc.c:707 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead 로그 / 설정값" -#: utils/misc/guc.c:664 +#: utils/misc/guc.c:709 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead 로그 / 체크포인트" -#: utils/misc/guc.c:666 +#: utils/misc/guc.c:711 msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead 로그 / 아카이브" -#: utils/misc/guc.c:668 +#: utils/misc/guc.c:713 msgid "Write-Ahead Log / Archive Recovery" msgstr "Write-Ahead 로그 / 아카이브 복구" -#: utils/misc/guc.c:670 +#: utils/misc/guc.c:715 msgid "Write-Ahead Log / Recovery Target" msgstr "Write-Ahead 로그 / 복구 대상" -#: utils/misc/guc.c:672 +#: utils/misc/guc.c:717 msgid "Replication" msgstr "복제" -#: utils/misc/guc.c:674 +#: utils/misc/guc.c:719 msgid "Replication / Sending Servers" msgstr "복제 / 보내기 서버" -#: utils/misc/guc.c:676 +#: utils/misc/guc.c:721 msgid "Replication / Master Server" msgstr "복제 / 주 서버" -#: utils/misc/guc.c:678 +#: utils/misc/guc.c:723 msgid "Replication / Standby Servers" msgstr "복제 / 대기 서버" -#: utils/misc/guc.c:680 +#: utils/misc/guc.c:725 msgid "Replication / Subscribers" msgstr "복제 / 구독" -#: utils/misc/guc.c:682 +#: utils/misc/guc.c:727 msgid "Query Tuning" msgstr "쿼리 튜닝" -#: utils/misc/guc.c:684 +#: utils/misc/guc.c:729 msgid "Query Tuning / Planner Method Configuration" msgstr "쿼리 튜닝 / 실행계획기 메서드 설정" -#: utils/misc/guc.c:686 +#: utils/misc/guc.c:731 msgid "Query Tuning / Planner Cost Constants" msgstr "쿼리 튜닝 / 실행계획기 비용 상수" -#: utils/misc/guc.c:688 +#: utils/misc/guc.c:733 msgid "Query Tuning / Genetic Query Optimizer" msgstr "쿼리 튜닝 / 일반적인 쿼리 최적화기" -#: utils/misc/guc.c:690 +#: utils/misc/guc.c:735 msgid "Query Tuning / Other Planner Options" msgstr "쿼리 튜닝 / 기타 실행계획기 옵션들" -#: utils/misc/guc.c:692 +#: utils/misc/guc.c:737 msgid "Reporting and Logging" msgstr "보고와 로그" -#: utils/misc/guc.c:694 +#: utils/misc/guc.c:739 msgid "Reporting and Logging / Where to Log" msgstr "보고와 로그 / 로그 위치" -#: utils/misc/guc.c:696 +#: utils/misc/guc.c:741 msgid "Reporting and Logging / When to Log" msgstr "보고와 로그 / 로그 시점" -#: utils/misc/guc.c:698 +#: utils/misc/guc.c:743 msgid "Reporting and Logging / What to Log" msgstr "보고와 로그 / 로그 내용" -#: utils/misc/guc.c:700 +#: utils/misc/guc.c:745 msgid "Process Title" msgstr "프로세스 제목" -#: utils/misc/guc.c:702 +#: utils/misc/guc.c:747 msgid "Statistics" msgstr "통계" -#: utils/misc/guc.c:704 +#: utils/misc/guc.c:749 msgid "Statistics / Monitoring" msgstr "통계 / 모니터링" -#: utils/misc/guc.c:706 +#: utils/misc/guc.c:751 msgid "Statistics / Query and Index Statistics Collector" msgstr "통계 / 쿼리 및 인덱스 사용 통계 수집기" -#: utils/misc/guc.c:708 +#: utils/misc/guc.c:753 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc.c:710 +#: utils/misc/guc.c:755 msgid "Client Connection Defaults" msgstr "클라이언트 연결 초기값" -#: utils/misc/guc.c:712 +#: utils/misc/guc.c:757 msgid "Client Connection Defaults / Statement Behavior" msgstr "클라이언트 연결 초기값 / 구문 특성" -#: utils/misc/guc.c:714 +#: utils/misc/guc.c:759 msgid "Client Connection Defaults / Locale and Formatting" msgstr "클라이언트 연결 초기값 / 로케일과 출력양식" -#: utils/misc/guc.c:716 +#: utils/misc/guc.c:761 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "클라이언트 연결 초기값 / 공유 라이브러리 미리 로딩" -#: utils/misc/guc.c:718 +#: utils/misc/guc.c:763 msgid "Client Connection Defaults / Other Defaults" msgstr "클라이언트 연결 초기값 / 기타 초기값" -#: utils/misc/guc.c:720 +#: utils/misc/guc.c:765 msgid "Lock Management" msgstr "잠금 관리" -#: utils/misc/guc.c:722 +#: utils/misc/guc.c:767 msgid "Version and Platform Compatibility" msgstr "버전과 플랫폼 호환성" -#: utils/misc/guc.c:724 +#: utils/misc/guc.c:769 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "버전과 플랫폼 호환성 / 이전 PostgreSQL 버전" -#: utils/misc/guc.c:726 +#: utils/misc/guc.c:771 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "버전과 플랫폼 호환성 / 다른 플랫폼과 클라이언트" -#: utils/misc/guc.c:728 +#: utils/misc/guc.c:773 msgid "Error Handling" msgstr "오류 처리" -#: utils/misc/guc.c:730 +#: utils/misc/guc.c:775 msgid "Preset Options" msgstr "프리셋 옵션들" -#: utils/misc/guc.c:732 +#: utils/misc/guc.c:777 msgid "Customized Options" msgstr "사용자 정의 옵션들" -#: utils/misc/guc.c:734 +#: utils/misc/guc.c:779 msgid "Developer Options" msgstr "개발자 옵션들" -#: utils/misc/guc.c:786 +#: utils/misc/guc.c:837 msgid "" "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "" "이 매개 변수에 유효한 단위는 \"B\", \"kB\", \"MB\",\"GB\", \"TB\" 입니다." -#: utils/misc/guc.c:823 +#: utils/misc/guc.c:874 msgid "" "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", " "and \"d\"." @@ -25721,117 +26346,121 @@ msgstr "" "이 매개 변수에 유효한 단위는 \"us\", \"ms\", \"s\", \"min\", \"h\", \"d\" 입" "니다." -#: utils/misc/guc.c:885 +#: utils/misc/guc.c:936 msgid "Enables the planner's use of sequential-scan plans." msgstr "실행계획자가 순차적-스캔(sequential-sca) 계획을 사용함" -#: utils/misc/guc.c:895 +#: utils/misc/guc.c:946 msgid "Enables the planner's use of index-scan plans." msgstr "실행계획자가 인덱스-스캔 계획을 사용함." -#: utils/misc/guc.c:905 +#: utils/misc/guc.c:956 msgid "Enables the planner's use of index-only-scan plans." msgstr "실행계획자가 인덱스-전용-탐색 계획을 사용함." -#: utils/misc/guc.c:915 +#: utils/misc/guc.c:966 msgid "Enables the planner's use of bitmap-scan plans." msgstr "실행계획기가 bitmap-scan 계획을 사용하도록 함" -#: utils/misc/guc.c:925 +#: utils/misc/guc.c:976 msgid "Enables the planner's use of TID scan plans." msgstr "실행계획자가 TID 스캔 계획을 사용함" -#: utils/misc/guc.c:935 +#: utils/misc/guc.c:986 msgid "Enables the planner's use of explicit sort steps." msgstr "실행계획자가 명시 정렬 단계(explicit sort step)를 사용함" -#: utils/misc/guc.c:945 +#: utils/misc/guc.c:996 +msgid "Enables the planner's use of incremental sort steps." +msgstr "실행계획자가 증분 정렬 단계(incremental sort step)를 사용함" + +#: utils/misc/guc.c:1005 msgid "Enables the planner's use of hashed aggregation plans." msgstr "실행계획자가 해시된 집계 계획을 사용함" -#: utils/misc/guc.c:955 +#: utils/misc/guc.c:1015 msgid "Enables the planner's use of materialization." msgstr "실행계획자가 materialization 계획을 사용함" -#: utils/misc/guc.c:965 +#: utils/misc/guc.c:1025 msgid "Enables the planner's use of nested-loop join plans." msgstr "실행계획자가 근접순환 조인(nested-loop join) 계획을 사용함" -#: utils/misc/guc.c:975 +#: utils/misc/guc.c:1035 msgid "Enables the planner's use of merge join plans." msgstr "실행계획자가 병합 조인(merge join) 계획을 사용함" -#: utils/misc/guc.c:985 +#: utils/misc/guc.c:1045 msgid "Enables the planner's use of hash join plans." msgstr "실행계획자가 해시 조인(hash join) 계획을 사용함" -#: utils/misc/guc.c:995 +#: utils/misc/guc.c:1055 msgid "Enables the planner's use of gather merge plans." msgstr "실행계획자가 병합 수집(gather merge) 계획을 사용함" -#: utils/misc/guc.c:1005 +#: utils/misc/guc.c:1065 msgid "Enables partitionwise join." msgstr "" -#: utils/misc/guc.c:1015 +#: utils/misc/guc.c:1075 msgid "Enables partitionwise aggregation and grouping." msgstr "" -#: utils/misc/guc.c:1025 +#: utils/misc/guc.c:1085 msgid "Enables the planner's use of parallel append plans." msgstr "실행계획자가 병렬 추가 계획을 사용함" -#: utils/misc/guc.c:1035 +#: utils/misc/guc.c:1095 msgid "Enables the planner's use of parallel hash plans." msgstr "실행계획자가 병렬 해시 계획을 사용함" -#: utils/misc/guc.c:1045 +#: utils/misc/guc.c:1105 msgid "Enables plan-time and run-time partition pruning." msgstr "" -#: utils/misc/guc.c:1046 +#: utils/misc/guc.c:1106 msgid "" "Allows the query planner and executor to compare partition bounds to " "conditions in the query to determine which partitions must be scanned." msgstr "" -#: utils/misc/guc.c:1057 +#: utils/misc/guc.c:1117 msgid "Enables genetic query optimization." msgstr "유전적 쿼리 최적화(GEQO)를 사용함" -#: utils/misc/guc.c:1058 +#: utils/misc/guc.c:1118 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "이 알고리즘은 실행계획기의 과도한 작업 비용을 낮춥니다" -#: utils/misc/guc.c:1069 +#: utils/misc/guc.c:1129 msgid "Shows whether the current user is a superuser." msgstr "현재 사용자가 슈퍼유저인지 보여줍니다." -#: utils/misc/guc.c:1079 +#: utils/misc/guc.c:1139 msgid "Enables advertising the server via Bonjour." msgstr "Bonjour 서버 사용" -#: utils/misc/guc.c:1088 +#: utils/misc/guc.c:1148 msgid "Collects transaction commit time." msgstr "트랜잭션 커밋 시간을 수집함" -#: utils/misc/guc.c:1097 +#: utils/misc/guc.c:1157 msgid "Enables SSL connections." msgstr "SSL 연결을 가능하게 함." -#: utils/misc/guc.c:1106 +#: utils/misc/guc.c:1166 msgid "Also use ssl_passphrase_command during server reload." msgstr "" -#: utils/misc/guc.c:1115 +#: utils/misc/guc.c:1175 msgid "Give priority to server ciphersuite order." msgstr "SSL 인증 알고리즘 우선 순위를 정함" -#: utils/misc/guc.c:1124 +#: utils/misc/guc.c:1184 msgid "Forces synchronization of updates to disk." msgstr "강제로 변경된 버퍼 자료를 디스크와 동기화 시킴." -#: utils/misc/guc.c:1125 +#: utils/misc/guc.c:1185 msgid "" "The server will use the fsync() system call in several places to make sure " "that updates are physically written to disk. This insures that a database " @@ -25843,11 +26472,11 @@ msgstr "" "스템의 비정상적인 동작이나, 하드웨어에서 오류가 발생되었을 경우에도 자료를 안" "전하게 지킬 수 있도록 도와줄 것입니다." -#: utils/misc/guc.c:1136 +#: utils/misc/guc.c:1196 msgid "Continues processing after a checksum failure." msgstr "체크섬 실패 후 처리 계속 함" -#: utils/misc/guc.c:1137 +#: utils/misc/guc.c:1197 msgid "" "Detection of a checksum failure normally causes PostgreSQL to report an " "error, aborting the current transaction. Setting ignore_checksum_failure to " @@ -25862,11 +26491,11 @@ msgstr "" "니다. 이 설정은 데이터 클러스터에서 체크섬 기능이 활성화 되어 있는 경우에만 " "영향을 받습니다." -#: utils/misc/guc.c:1151 +#: utils/misc/guc.c:1211 msgid "Continues processing past damaged page headers." msgstr "손상된 자료 헤더 발견시 작업 진행 여부 선택" -#: utils/misc/guc.c:1152 +#: utils/misc/guc.c:1212 msgid "" "Detection of a damaged page header normally causes PostgreSQL to report an " "error, aborting the current transaction. Setting zero_damaged_pages to true " @@ -25875,16 +26504,37 @@ msgid "" "rows on the damaged page." msgstr "" "일반적으로 손상된 페이지 헤더를 발견하게 되면, PostgreSQL에서는 오류를 발생하" -"고, 현재 트랜잭션을 중지합니다. 이 값을 true로 지정하면, 이런 손상된 페이지" +"고, 현재 트랜잭션을 중지합니다. zero_damaged_pages 값을 true로 지정하면, 이런 손상된 페이지" "를 발견하면, 경고 메시지를 보여주고, 그 페이지의 크기를 0으로 만들고 작업을 " "계속 진행합니다. 이 기능을 사용한다 함은 손상된 자료를 없애겠다는 것을 의미합" "니다. 이것은 곧 저장되어있는 자료가 삭제 될 수도 있음을 의미하기도 합니다." -#: utils/misc/guc.c:1165 +#: utils/misc/guc.c:1225 +msgid "Continues recovery after an invalid pages failure." +msgstr "잘못된 페이지 실패 후 복구 계속 함" + +#: utils/misc/guc.c:1226 +msgid "" +"Detection of WAL records having references to invalid pages during recovery " +"causes PostgreSQL to raise a PANIC-level error, aborting the recovery. " +"Setting ignore_invalid_pages to true causes the system to ignore invalid " +"page references in WAL records (but still report a warning), and continue " +"recovery. This behavior may cause crashes, data loss, propagate or hide " +"corruption, or other serious problems. Only has an effect during recovery or " +"in standby mode." +msgstr "" +"PostgreSQL은 WAL 기반 복구 작업에서 해당 페이지가 잘못되어 있으면, " +"PANIC 오류를 내고 복구 작업을 중지하고 멈춥니다. ignore_invalid_pages 값을 " +" true로 지정하면, 이런 손상된 페이지가 있을 때, 경고 메시지를 보여주고, " +"복구 작업 계속 진행합니다. 이 기능을 사용하면 서버 비정상 종료나 자료 손실 " +"숨은 손상, 기타 심각한 문제가 일어 날 수 있습니다. 이 설정은 복구 작업 때나 " +"대기 모드 상태에서만 작동합니다." + +#: utils/misc/guc.c:1244 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "체크포인트 후 처음 수정할 때 전체 페이지를 WAL에 씁니다." -#: utils/misc/guc.c:1166 +#: utils/misc/guc.c:1245 msgid "" "A page write in process during an operating system crash might be only " "partially written to disk. During recovery, the row changes stored in WAL " @@ -25896,7 +26546,7 @@ msgstr "" "없을 수도 있습니다. 이 옵션은 안전하게 복구가 가능하도록 체크포인트 후 처음 " "수정한 페이지는 그 페이지 전체를 WAL에 씁니다." -#: utils/misc/guc.c:1179 +#: utils/misc/guc.c:1258 msgid "" "Writes full pages to WAL when first modified after a checkpoint, even for a " "non-critical modifications." @@ -25904,93 +26554,93 @@ msgstr "" "체크포인트 작업 후 자료 페이지에 첫 변경이 있는 경우, WAL에 변경된 내용만 기" "록하는 것이 아니라, 해당 페이지 전체를 기록합니다." -#: utils/misc/guc.c:1189 +#: utils/misc/guc.c:1268 msgid "Compresses full-page writes written in WAL file." msgstr "WAL 파일에 기록되는 전체 페이지를 압축함" -#: utils/misc/guc.c:1199 +#: utils/misc/guc.c:1278 msgid "Writes zeroes to new WAL files before first use." msgstr "" -#: utils/misc/guc.c:1209 +#: utils/misc/guc.c:1288 msgid "Recycles WAL files by renaming them." msgstr "" -#: utils/misc/guc.c:1219 +#: utils/misc/guc.c:1298 msgid "Logs each checkpoint." msgstr "체크포인트 관련 정보를 기록합니다." -#: utils/misc/guc.c:1228 +#: utils/misc/guc.c:1307 msgid "Logs each successful connection." msgstr "연결 성공한 정보들 모두를 기록함" -#: utils/misc/guc.c:1237 +#: utils/misc/guc.c:1316 msgid "Logs end of a session, including duration." msgstr "기간을 포함하여 세션의 끝을 기록합니다." -#: utils/misc/guc.c:1246 +#: utils/misc/guc.c:1325 msgid "Logs each replication command." msgstr "복제 관련 작업 내역을 기록합니다." -#: utils/misc/guc.c:1255 +#: utils/misc/guc.c:1334 msgid "Shows whether the running server has assertion checks enabled." msgstr "서버가 assertion 검사 기능이 활성화 되어 실행되는지 보여 줌" -#: utils/misc/guc.c:1270 +#: utils/misc/guc.c:1349 msgid "Terminate session on any error." msgstr "어떤 오류가 생기면 세션을 종료함" -#: utils/misc/guc.c:1279 +#: utils/misc/guc.c:1358 msgid "Reinitialize server after backend crash." msgstr "백엔드가 비정상 종료되면 서버를 재초기화함" -#: utils/misc/guc.c:1289 +#: utils/misc/guc.c:1368 msgid "Logs the duration of each completed SQL statement." msgstr "SQL 명령 구문의 실행완료 시간을 기록함" -#: utils/misc/guc.c:1298 +#: utils/misc/guc.c:1377 msgid "Logs each query's parse tree." msgstr "각 쿼리의 구문 분석 트리를 기록합니다." -#: utils/misc/guc.c:1307 +#: utils/misc/guc.c:1386 msgid "Logs each query's rewritten parse tree." msgstr "각 쿼리의 재작성된 구문 분석 트리를 기록합니다." -#: utils/misc/guc.c:1316 +#: utils/misc/guc.c:1395 msgid "Logs each query's execution plan." msgstr "각 쿼리의 실행 계획을 기록합니다." -#: utils/misc/guc.c:1325 +#: utils/misc/guc.c:1404 msgid "Indents parse and plan tree displays." msgstr "구문과 실행계획을 보여 줄때, 들여쓰기를 함." -#: utils/misc/guc.c:1334 +#: utils/misc/guc.c:1413 msgid "Writes parser performance statistics to the server log." msgstr "구문분석 성능 통계를 서버 로그에 기록함." -#: utils/misc/guc.c:1343 +#: utils/misc/guc.c:1422 msgid "Writes planner performance statistics to the server log." msgstr "실행계획자 성능 통계를 서버 로그에 기록함." -#: utils/misc/guc.c:1352 +#: utils/misc/guc.c:1431 msgid "Writes executor performance statistics to the server log." msgstr "실행자 성능 통계를 서버 로그에 기록함." -#: utils/misc/guc.c:1361 +#: utils/misc/guc.c:1440 msgid "Writes cumulative performance statistics to the server log." msgstr "누적 성능 통계를 서버 로그에 기록함." -#: utils/misc/guc.c:1371 +#: utils/misc/guc.c:1450 msgid "" "Logs system resource usage statistics (memory and CPU) on various B-tree " "operations." msgstr "다양한 B트리 작업에 자원(메모리, CPU) 사용 통계를 기록에 남기" -#: utils/misc/guc.c:1383 +#: utils/misc/guc.c:1462 msgid "Collects information about executing commands." msgstr "명령 실행에 대한 정보를 수집함" -#: utils/misc/guc.c:1384 +#: utils/misc/guc.c:1463 msgid "" "Enables the collection of information on the currently executing command of " "each session, along with the time at which that command began execution." @@ -25998,59 +26648,59 @@ msgstr "" "각 세션에서 사용하고 있는 현재 실행 중인 명령의 수행 시간, 명령 내용등에 대" "한 정보를 수집하도록 함" -#: utils/misc/guc.c:1394 +#: utils/misc/guc.c:1473 msgid "Collects statistics on database activity." msgstr "데이터베이스 활동에 대한 통계를 수집합니다." -#: utils/misc/guc.c:1403 +#: utils/misc/guc.c:1482 msgid "Collects timing statistics for database I/O activity." msgstr "데이터베이스 I/O 활동에 대한 통계를 수집합니다." -#: utils/misc/guc.c:1413 +#: utils/misc/guc.c:1492 msgid "Updates the process title to show the active SQL command." msgstr "활성 SQL 명령을 표시하도록 프로세스 제목을 업데이트합니다." -#: utils/misc/guc.c:1414 +#: utils/misc/guc.c:1493 msgid "" "Enables updating of the process title every time a new SQL command is " "received by the server." msgstr "" "서버가 새 SQL 명령을 받을 때마다 프로세스 제목이 업데이트될 수 있도록 합니다." -#: utils/misc/guc.c:1427 +#: utils/misc/guc.c:1506 msgid "Starts the autovacuum subprocess." msgstr "자동 청소 하위 프로세스를 실행함" -#: utils/misc/guc.c:1437 +#: utils/misc/guc.c:1516 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "LISTEN, NOTIFY 명령 사용을 위한 디버깅 출력을 만듦." -#: utils/misc/guc.c:1449 +#: utils/misc/guc.c:1528 msgid "Emits information about lock usage." msgstr "잠금 사용 정보를 로그로 남김" -#: utils/misc/guc.c:1459 +#: utils/misc/guc.c:1538 msgid "Emits information about user lock usage." msgstr "사용자 잠금 사용 정보를 로그로 남김" -#: utils/misc/guc.c:1469 +#: utils/misc/guc.c:1548 msgid "Emits information about lightweight lock usage." msgstr "가벼운 잠금 사용 정보를 로그로 남김" -#: utils/misc/guc.c:1479 +#: utils/misc/guc.c:1558 msgid "" "Dumps information about all current locks when a deadlock timeout occurs." msgstr "교착 잠금 시간 제한 상황이 발생하면 그 때의 모든 잠금 정보를 보여줌" -#: utils/misc/guc.c:1491 +#: utils/misc/guc.c:1570 msgid "Logs long lock waits." msgstr "긴 잠금 대기를 기록합니다." -#: utils/misc/guc.c:1501 +#: utils/misc/guc.c:1580 msgid "Logs the host name in the connection logs." msgstr "연결 기록에서 호스트 이름을 기록함." -#: utils/misc/guc.c:1502 +#: utils/misc/guc.c:1581 msgid "" "By default, connection logs only show the IP address of the connecting host. " "If you want them to show the host name you can turn this on, but depending " @@ -26061,11 +26711,11 @@ msgstr "" "true로 바꾼다면, 이 IP의 호스트 이름을 구해서 이 이름을 사용합니다 이것의 성" "능은 OS의 IP에서 이름구하기 성능과 관계됩니다." -#: utils/misc/guc.c:1513 +#: utils/misc/guc.c:1592 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "\"표현=NULL\" 식을 \"표현 IS NULL\"로 취급함." -#: utils/misc/guc.c:1514 +#: utils/misc/guc.c:1593 msgid "" "When turned on, expressions of the form expr = NULL (or NULL = expr) are " "treated as expr IS NULL, that is, they return true if expr evaluates to the " @@ -26076,23 +26726,23 @@ msgstr "" "expr = NULL 구문을 expr IS NULL 구문으로 바꾸어서 처리하도록 함이렇게하면, " "윗 구문은 true 를 리턴함" -#: utils/misc/guc.c:1526 +#: utils/misc/guc.c:1605 msgid "Enables per-database user names." msgstr "per-database 사용자 이름 활성화." -#: utils/misc/guc.c:1535 +#: utils/misc/guc.c:1614 msgid "Sets the default read-only status of new transactions." msgstr "새로운 트랜잭션의 상태를 초기값으로 읽기전용으로 설정합니다." -#: utils/misc/guc.c:1544 +#: utils/misc/guc.c:1623 msgid "Sets the current transaction's read-only status." msgstr "현재 트랜잭셕의 읽기 전용 상태를 지정합니다." -#: utils/misc/guc.c:1554 +#: utils/misc/guc.c:1633 msgid "Sets the default deferrable status of new transactions." msgstr "새 트랜잭션의 기본 지연 가능한 상태를 지정" -#: utils/misc/guc.c:1563 +#: utils/misc/guc.c:1642 msgid "" "Whether to defer a read-only serializable transaction until it can be " "executed with no possible serialization failures." @@ -26100,24 +26750,24 @@ msgstr "" "읽기 전용 직렬화 가능한 트랜잭션이 직렬 처리에서 오류가 없을 때까지 그 트랜잭" "션을 지연할 것이지 결정함" -#: utils/misc/guc.c:1573 +#: utils/misc/guc.c:1652 msgid "Enable row security." msgstr "로우 단위 보안 기능을 활성화" -#: utils/misc/guc.c:1574 +#: utils/misc/guc.c:1653 msgid "When enabled, row security will be applied to all users." msgstr "이 값이 활성화 되면 로우 단위 보안 기능이 모든 사용자 대상으로 적용됨" -#: utils/misc/guc.c:1582 +#: utils/misc/guc.c:1661 msgid "Check function bodies during CREATE FUNCTION." msgstr "" "CREATE FUNCTION 명령으로 함수를 만들 때, 함수 본문 부분의 구문을 검사합니다." -#: utils/misc/guc.c:1591 +#: utils/misc/guc.c:1670 msgid "Enable input of NULL elements in arrays." msgstr "배열에 NULL 요소가 입력될 수 있도록 합니다." -#: utils/misc/guc.c:1592 +#: utils/misc/guc.c:1671 msgid "" "When turned on, unquoted NULL in an array input value means a null value; " "otherwise it is taken literally." @@ -26125,42 +26775,42 @@ msgstr "" "이 값이 on이면 배열 입력 값에 따옴표 없이 입력된 NULL이 null 값을 의미하고, " "그렇지 않으면 문자 그대로 처리됩니다." -#: utils/misc/guc.c:1608 +#: utils/misc/guc.c:1687 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "" -#: utils/misc/guc.c:1618 +#: utils/misc/guc.c:1697 msgid "" "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "" "로그 기록 하위 프로세스를 시작하여 stderr 출력 및/또는 csvlog를 로그 파일에 " "씁니다." -#: utils/misc/guc.c:1627 +#: utils/misc/guc.c:1706 msgid "Truncate existing log files of same name during log rotation." msgstr "로그 회전 중 동일한 이름의 기존 로그 파일을 자릅니다." -#: utils/misc/guc.c:1638 +#: utils/misc/guc.c:1717 msgid "Emit information about resource usage in sorting." msgstr "정렬 시 리소스 사용 정보를 내보냅니다." -#: utils/misc/guc.c:1652 +#: utils/misc/guc.c:1731 msgid "Generate debugging output for synchronized scanning." msgstr "동기화된 스캔을 위해 디버깅 출력을 생성합니다." -#: utils/misc/guc.c:1667 +#: utils/misc/guc.c:1746 msgid "Enable bounded sorting using heap sort." msgstr "힙 정렬을 통해 제한적 정렬을 사용합니다." -#: utils/misc/guc.c:1680 +#: utils/misc/guc.c:1759 msgid "Emit WAL-related debugging output." msgstr "WAL 관련 디버깅 출력을 내보냅니다." -#: utils/misc/guc.c:1692 +#: utils/misc/guc.c:1771 msgid "Datetimes are integer based." msgstr "datetime 형을 정수형으로 사용함" -#: utils/misc/guc.c:1703 +#: utils/misc/guc.c:1782 msgid "" "Sets whether Kerberos and GSSAPI user names should be treated as case-" "insensitive." @@ -26168,42 +26818,42 @@ msgstr "" "Kerberos 및 GSSAPI 사용자 이름에서 대/소문자를 구분하지 않을지 여부를 설정합" "니다." -#: utils/misc/guc.c:1713 +#: utils/misc/guc.c:1792 msgid "Warn about backslash escapes in ordinary string literals." msgstr "일반 문자열 리터럴의 백슬래시 이스케이프에 대해 경고합니다." -#: utils/misc/guc.c:1723 +#: utils/misc/guc.c:1802 msgid "Causes '...' strings to treat backslashes literally." msgstr "'...' 문자열에서 백슬래시가 리터럴로 처리되도록 합니다." -#: utils/misc/guc.c:1734 +#: utils/misc/guc.c:1813 msgid "Enable synchronized sequential scans." msgstr "동기화된 순차적 스캔을 사용합니다." -#: utils/misc/guc.c:1744 +#: utils/misc/guc.c:1823 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "복구 대상에서 트랜잭션을 포함할지 제외할지 선택합니다." -#: utils/misc/guc.c:1754 +#: utils/misc/guc.c:1833 msgid "Allows connections and queries during recovery." msgstr "복구 중에서도 접속과 쿼리 사용을 허용함" -#: utils/misc/guc.c:1764 +#: utils/misc/guc.c:1843 msgid "" "Allows feedback from a hot standby to the primary that will avoid query " "conflicts." msgstr "" "읽기 전용 보조 서버가 보내는 쿼리 충돌을 피하기 위한 피드백을 주 서버가 받음" -#: utils/misc/guc.c:1774 +#: utils/misc/guc.c:1853 msgid "Allows modifications of the structure of system tables." msgstr "시스템 테이블의 구조를 수정할 수 있도록 합니다." -#: utils/misc/guc.c:1785 +#: utils/misc/guc.c:1864 msgid "Disables reading from system indexes." msgstr "시스템 인덱스 읽기를 금지함" -#: utils/misc/guc.c:1786 +#: utils/misc/guc.c:1865 msgid "" "It does not prevent updating the indexes, so it is safe to use. The worst " "consequence is slowness." @@ -26211,12 +26861,12 @@ msgstr "" "이 설정이 활성화 되어도 그 인덱스는 갱신되어 사용하는데는 안전합니다. 하지" "만 서버가 전체적으로 늦어질 수 있습니다." -#: utils/misc/guc.c:1797 +#: utils/misc/guc.c:1876 msgid "" "Enables backward compatibility mode for privilege checks on large objects." msgstr "대형 개체에 대한 접근 권한 검사를 위한 하위 호환성이 있게 함" -#: utils/misc/guc.c:1798 +#: utils/misc/guc.c:1877 msgid "" "Skips privilege checks when reading or modifying large objects, for " "compatibility with PostgreSQL releases prior to 9.0." @@ -26224,83 +26874,89 @@ msgstr "" "PostgreSQL 9.0 이전 버전의 호환성을 위해 대형 개체에 대한 읽기, 변경 시 접근 " "권한 검사를 안 하도록 설정함" -#: utils/misc/guc.c:1808 +#: utils/misc/guc.c:1887 msgid "" "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." msgstr "PostgreSQL 9.4 버전까지 사용되었던 우선 순위가 적용되면 경고를 보여줌" -#: utils/misc/guc.c:1818 +#: utils/misc/guc.c:1897 msgid "When generating SQL fragments, quote all identifiers." msgstr "SQL 구문을 만들 때, 모든 식별자는 따옴표를 사용함" -#: utils/misc/guc.c:1828 +#: utils/misc/guc.c:1907 msgid "Shows whether data checksums are turned on for this cluster." msgstr "" -#: utils/misc/guc.c:1839 +#: utils/misc/guc.c:1918 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "syslog 사용시 메시지 중복을 방지하기 위해 일련 번호를 매깁니다." -#: utils/misc/guc.c:1849 +#: utils/misc/guc.c:1928 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "syslog 사용시 메시지를 한 줄에 1024 바이트만 쓰도록 나눕니다" -#: utils/misc/guc.c:1859 +#: utils/misc/guc.c:1938 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "" -#: utils/misc/guc.c:1860 +#: utils/misc/guc.c:1939 msgid "Should gather nodes also run subplans, or just gather tuples?" msgstr "" -#: utils/misc/guc.c:1870 +#: utils/misc/guc.c:1949 msgid "Allow JIT compilation." msgstr "" -#: utils/misc/guc.c:1881 +#: utils/misc/guc.c:1960 msgid "Register JIT compiled function with debugger." msgstr "" -#: utils/misc/guc.c:1898 +#: utils/misc/guc.c:1977 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "" -#: utils/misc/guc.c:1909 +#: utils/misc/guc.c:1988 msgid "Allow JIT compilation of expressions." msgstr "" -#: utils/misc/guc.c:1920 +#: utils/misc/guc.c:1999 msgid "Register JIT compiled function with perf profiler." msgstr "" -#: utils/misc/guc.c:1937 +#: utils/misc/guc.c:2016 msgid "Allow JIT compilation of tuple deforming." msgstr "" -#: utils/misc/guc.c:1948 +#: utils/misc/guc.c:2027 msgid "Whether to continue running after a failure to sync data files." msgstr "" -#: utils/misc/guc.c:1966 +#: utils/misc/guc.c:2036 +msgid "" +"Sets whether a WAL receiver should create a temporary replication slot if no " +"permanent slot is configured." +msgstr "" + +#: utils/misc/guc.c:2054 msgid "" "Forces a switch to the next WAL file if a new file has not been started " "within N seconds." msgstr "" "새 파일이 N초 내에 시작되지 않은 경우 강제로 다음 WAL 파일로 전환합니다." -#: utils/misc/guc.c:1977 +#: utils/misc/guc.c:2065 msgid "Waits N seconds on connection startup after authentication." msgstr "연결 작업에서 인증이 끝난 뒤 N초 기다림" -#: utils/misc/guc.c:1978 utils/misc/guc.c:2524 +#: utils/misc/guc.c:2066 utils/misc/guc.c:2624 msgid "This allows attaching a debugger to the process." msgstr "이렇게 하면 디버거를 프로세스에 연결할 수 있습니다." -#: utils/misc/guc.c:1987 +#: utils/misc/guc.c:2075 msgid "Sets the default statistics target." msgstr "기본 통계 대상을 지정합니다." -#: utils/misc/guc.c:1988 +#: utils/misc/guc.c:2076 msgid "" "This applies to table columns that have not had a column-specific target set " "via ALTER TABLE SET STATISTICS." @@ -26308,12 +26964,12 @@ msgstr "" "특정 칼럼을 지정하지 않고 ALTER TABLE SET STATISTICS 명령을 사용했을 때, 통" "계 대상이 될 칼럼을 지정합니다." -#: utils/misc/guc.c:1997 +#: utils/misc/guc.c:2085 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "" "이 크기를 초과할 경우 하위 쿼리가 축소되지 않는 FROM 목록 크기를 설정합니다." -#: utils/misc/guc.c:1999 +#: utils/misc/guc.c:2087 msgid "" "The planner will merge subqueries into upper queries if the resulting FROM " "list would have no more than this many items." @@ -26321,12 +26977,12 @@ msgstr "" "결과 FROM 목록에 포함된 항목이 이 개수를 넘지 않는 경우 계획 관리자가 하" "위 쿼리를 상위 쿼리에 병합합니다." -#: utils/misc/guc.c:2010 +#: utils/misc/guc.c:2098 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "" "이 크기를 초과할 경우 JOIN 구문이 결합되지 않는 FROM 목록 크기를 설정합니다." -#: utils/misc/guc.c:2012 +#: utils/misc/guc.c:2100 msgid "" "The planner will flatten explicit JOIN constructs into lists of FROM items " "whenever a list of no more than this many items would result." @@ -26334,32 +26990,32 @@ msgstr "" "결과 목록에 포함된 항목이 이 개수를 넘지 않을 때마다 계획 관리자가 명시" "적 JOIN 구문을 FROM 항목 목록에 결합합니다." -#: utils/misc/guc.c:2023 +#: utils/misc/guc.c:2111 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "" "이 임계값을 초과할 경우 GEQO가 사용되는 FROM 항목의 임계값을 설정합니다." -#: utils/misc/guc.c:2033 +#: utils/misc/guc.c:2121 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: 다른 GEQO 매개 변수의 기본 값을 설정하는 데 사용됩니다." -#: utils/misc/guc.c:2043 +#: utils/misc/guc.c:2131 msgid "GEQO: number of individuals in the population." msgstr "GEQO: 모집단의 개인 수입니다." -#: utils/misc/guc.c:2044 utils/misc/guc.c:2054 +#: utils/misc/guc.c:2132 utils/misc/guc.c:2142 msgid "Zero selects a suitable default value." msgstr "0을 지정하면 적절한 기본 값이 선택됩니다." -#: utils/misc/guc.c:2053 +#: utils/misc/guc.c:2141 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: 알고리즘의 반복 수입니다." -#: utils/misc/guc.c:2065 +#: utils/misc/guc.c:2153 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "교착 상태를 확인하기 전에 잠금을 기다릴 시간을 설정합니다." -#: utils/misc/guc.c:2076 +#: utils/misc/guc.c:2164 msgid "" "Sets the maximum delay before canceling queries when a hot standby server is " "processing archived WAL data." @@ -26367,54 +27023,54 @@ msgstr "" "읽기 전용 보조 서버가 아카이브된 WAL 자료를 처리할 때, 지연될 수 있는 최대 시" "간" -#: utils/misc/guc.c:2087 +#: utils/misc/guc.c:2175 msgid "" "Sets the maximum delay before canceling queries when a hot standby server is " "processing streamed WAL data." msgstr "" "읽기 전용 보조 서버가 스트림 WAL 자료를 처리할 때, 지연될 수 있는 최대 시간" -#: utils/misc/guc.c:2098 +#: utils/misc/guc.c:2186 msgid "Sets the minimum delay for applying changes during recovery." msgstr "" -#: utils/misc/guc.c:2109 +#: utils/misc/guc.c:2197 msgid "" "Sets the maximum interval between WAL receiver status reports to the sending " "server." msgstr "WAL 정보를 보내는 서버에게 WAL 수신기 상태를 보고하는 최대 간격" -#: utils/misc/guc.c:2120 +#: utils/misc/guc.c:2208 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "" "WAL 정보를 보내는 서버로부터 보낸 자료를 받기위해 기다릴 수 있는 최대 허용 시" "간을 설정합니다." -#: utils/misc/guc.c:2131 +#: utils/misc/guc.c:2219 msgid "Sets the maximum number of concurrent connections." msgstr "최대 동시 접속수를 지정합니다." -#: utils/misc/guc.c:2142 +#: utils/misc/guc.c:2230 msgid "Sets the number of connection slots reserved for superusers." msgstr "superuser 동시 접속수를 지정합니다." -#: utils/misc/guc.c:2156 +#: utils/misc/guc.c:2244 msgid "Sets the number of shared memory buffers used by the server." msgstr "서버에서 사용할 공유 메모리의 개수를 지정함" -#: utils/misc/guc.c:2167 +#: utils/misc/guc.c:2255 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "각 세션에서 사용하는 임시 버퍼의 최대 개수를 지정" -#: utils/misc/guc.c:2178 +#: utils/misc/guc.c:2266 msgid "Sets the TCP port the server listens on." msgstr "TCP 포트 번호를 지정함." -#: utils/misc/guc.c:2188 +#: utils/misc/guc.c:2276 msgid "Sets the access permissions of the Unix-domain socket." msgstr "유닉스 도메인 소켓 파일의 액세스 권한을 지정함" -#: utils/misc/guc.c:2189 +#: utils/misc/guc.c:2277 msgid "" "Unix-domain sockets use the usual Unix file system permission set. The " "parameter value is expected to be a numeric mode specification in the form " @@ -26425,11 +27081,11 @@ msgstr "" "수 값은 chmod 및 umask 시스템 호출에서 수락되는 형태의 숫자 모드 지정이어야 " "합니다. (일반적인 8진수 형식을 사용하려면 숫자가 0으로 시작해야 합니다.)" -#: utils/misc/guc.c:2203 +#: utils/misc/guc.c:2291 msgid "Sets the file permissions for log files." msgstr "로그 파일의 파일 접근 권한을 지정합니다." -#: utils/misc/guc.c:2204 +#: utils/misc/guc.c:2292 msgid "" "The parameter value is expected to be a numeric mode specification in the " "form accepted by the chmod and umask system calls. (To use the customary " @@ -26439,11 +27095,11 @@ msgstr "" "이어야 합니다. (일반적인 8진수 형식을 사용하려면 숫자가 0으로 시작해야 합니" "다.)" -#: utils/misc/guc.c:2218 +#: utils/misc/guc.c:2306 msgid "Mode of the data directory." msgstr "데이터 디렉터리의 모드" -#: utils/misc/guc.c:2219 +#: utils/misc/guc.c:2307 msgid "" "The parameter value is a numeric mode specification in the form accepted by " "the chmod and umask system calls. (To use the customary octal format the " @@ -26453,11 +27109,11 @@ msgstr "" "이어야 합니다. (일반적인 8진수 형식을 사용하려면 숫자가 0으로 시작해야 합니" "다.)" -#: utils/misc/guc.c:2232 +#: utils/misc/guc.c:2320 msgid "Sets the maximum memory to be used for query workspaces." msgstr "쿼리 작업공간을 위해 사용될 메모리의 최대값을 지정함." -#: utils/misc/guc.c:2233 +#: utils/misc/guc.c:2321 msgid "" "This much memory can be used by each internal sort operation and hash table " "before switching to temporary disk files." @@ -26465,113 +27121,124 @@ msgstr "" "임시 디스크 파일로 전환하기 전에 각 내부 정렬 작업과 해시 테이블에서 이 크기" "의 메모리를 사용할 수 있습니다." -#: utils/misc/guc.c:2245 +#: utils/misc/guc.c:2333 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "관리 작업을 위해 사용될 메모리의 최대값을 지정함." -#: utils/misc/guc.c:2246 +#: utils/misc/guc.c:2334 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "관리작업은 VACUUM, CREATE INDEX 같은 작업을 뜻합니다." -#: utils/misc/guc.c:2261 +#: utils/misc/guc.c:2344 +msgid "Sets the maximum memory to be used for logical decoding." +msgstr "논리 디코딩 작업을 위해 사용될 메모리의 최대값을 지정함." + +#: utils/misc/guc.c:2345 +msgid "" +"This much memory can be used by each internal reorder buffer before spilling " +"to disk." +msgstr "" +"이 메모리는 디스크 기록 전에 각 내부 재정렬 버퍼로 사용될 수 있습니다." + +#: utils/misc/guc.c:2361 msgid "Sets the maximum stack depth, in kilobytes." msgstr "스택깊이(KB 단위) 최대값을 지정합니다." -#: utils/misc/guc.c:2272 +#: utils/misc/guc.c:2372 msgid "Limits the total size of all temporary files used by each process." msgstr "각 프로세스에서 사용하는 모든 임시 파일의 총 크기 제한" -#: utils/misc/guc.c:2273 +#: utils/misc/guc.c:2373 msgid "-1 means no limit." msgstr "-1은 제한 없음" -#: utils/misc/guc.c:2283 +#: utils/misc/guc.c:2383 msgid "Vacuum cost for a page found in the buffer cache." msgstr "버퍼 캐시에 있는 페이지의 청소 비용입니다." -#: utils/misc/guc.c:2293 +#: utils/misc/guc.c:2393 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "버퍼 캐시에 없는 페이지의 청소 비용입니다." -#: utils/misc/guc.c:2303 +#: utils/misc/guc.c:2403 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "청소로 페이지 변경 시 부과되는 비용입니다." -#: utils/misc/guc.c:2313 +#: utils/misc/guc.c:2413 msgid "Vacuum cost amount available before napping." msgstr "청소가 중지되는 청소 비용 합계입니다." -#: utils/misc/guc.c:2323 +#: utils/misc/guc.c:2423 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "자동 청소에 대한 청소가 중지되는 청소 비용 합계입니다." -#: utils/misc/guc.c:2333 +#: utils/misc/guc.c:2433 msgid "" "Sets the maximum number of simultaneously open files for each server process." msgstr "각각의 서버 프로세스에서 동시에 열릴 수 있는 최대 파일 갯수를 지정함." -#: utils/misc/guc.c:2346 +#: utils/misc/guc.c:2446 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "동시에 준비된 트랜잭션 최대 개수 지정" -#: utils/misc/guc.c:2357 +#: utils/misc/guc.c:2457 msgid "Sets the minimum OID of tables for tracking locks." msgstr "잠금 추적을 위한 테이블의 최소 OID 지정" -#: utils/misc/guc.c:2358 +#: utils/misc/guc.c:2458 msgid "Is used to avoid output on system tables." msgstr "" -#: utils/misc/guc.c:2367 +#: utils/misc/guc.c:2467 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "" -#: utils/misc/guc.c:2379 +#: utils/misc/guc.c:2479 msgid "Sets the maximum allowed duration of any statement." msgstr "모든 쿼리문에 적용되는 허용되는 최대 수행시간" -#: utils/misc/guc.c:2380 utils/misc/guc.c:2391 utils/misc/guc.c:2402 +#: utils/misc/guc.c:2480 utils/misc/guc.c:2491 utils/misc/guc.c:2502 msgid "A value of 0 turns off the timeout." msgstr "이 값이 0이면 이런 제한이 없음." -#: utils/misc/guc.c:2390 +#: utils/misc/guc.c:2490 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "모든 잠금에 적용되는 기다리는 최대 대기 시간" -#: utils/misc/guc.c:2401 +#: utils/misc/guc.c:2501 msgid "Sets the maximum allowed duration of any idling transaction." msgstr "idle-in-transaction 상태로 있을 수 있는 최대 시간" -#: utils/misc/guc.c:2412 +#: utils/misc/guc.c:2512 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "VACUUM에서 테이블 행을 동결할 때까지의 최소 기간입니다." -#: utils/misc/guc.c:2422 +#: utils/misc/guc.c:2522 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "" "VACUUM에서 튜플을 동결하기 위해 전체 테이블을 스캔할 때까지의 기간입니다." -#: utils/misc/guc.c:2432 +#: utils/misc/guc.c:2532 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "VACUUM에서 테이블 MultiXactId 동결할 때까지의 최소 기간입니다." -#: utils/misc/guc.c:2442 +#: utils/misc/guc.c:2542 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "" "VACUUM에서 튜플을 동결하기 위해 전체 테이블을 스캔할 때까지의 멀티트랜잭션 기" "간입니다." -#: utils/misc/guc.c:2452 +#: utils/misc/guc.c:2552 msgid "" "Number of transactions by which VACUUM and HOT cleanup should be deferred, " "if any." msgstr "" -#: utils/misc/guc.c:2465 +#: utils/misc/guc.c:2565 msgid "Sets the maximum number of locks per transaction." msgstr "하나의 트랜잭션에서 사용할 수 있는 최대 잠금 횟수를 지정함." -#: utils/misc/guc.c:2466 +#: utils/misc/guc.c:2566 msgid "" "The shared lock table is sized on the assumption that at most " "max_locks_per_transaction * max_connections distinct objects will need to be " @@ -26581,11 +27248,11 @@ msgstr "" "max_locks_per_transaction * max_connections를 넘지 않는다는 가정 하에 크기가 " "지정됩니다." -#: utils/misc/guc.c:2477 +#: utils/misc/guc.c:2577 msgid "Sets the maximum number of predicate locks per transaction." msgstr "하나의 트랜잭션에서 사용할 수 있는 최대 잠금 횟수를 지정함." -#: utils/misc/guc.c:2478 +#: utils/misc/guc.c:2578 msgid "" "The shared predicate lock table is sized on the assumption that at most " "max_pred_locks_per_transaction * max_connections distinct objects will need " @@ -26595,57 +27262,57 @@ msgstr "" "max_pred_locks_per_transaction * max_connections를 넘지 않는다는 가정 하에 크" "기가 지정됩니다." -#: utils/misc/guc.c:2489 +#: utils/misc/guc.c:2589 msgid "" "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "하나의 트랜잭션에서 사용할 수 있는 페이지와 튜플의 최대수 지정함." -#: utils/misc/guc.c:2490 +#: utils/misc/guc.c:2590 msgid "" "If more than this total of pages and tuples in the same relation are locked " "by a connection, those locks are replaced by a relation-level lock." msgstr "" -#: utils/misc/guc.c:2500 +#: utils/misc/guc.c:2600 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "페이지당 잠금 튜플 최대 수 지정." -#: utils/misc/guc.c:2501 +#: utils/misc/guc.c:2601 msgid "" "If more than this number of tuples on the same page are locked by a " "connection, those locks are replaced by a page-level lock." msgstr "" -#: utils/misc/guc.c:2511 +#: utils/misc/guc.c:2611 msgid "Sets the maximum allowed time to complete client authentication." msgstr "클라이언트 인증을 완료할 수 있는 최대 허용 시간을 설정합니다." -#: utils/misc/guc.c:2523 +#: utils/misc/guc.c:2623 msgid "Waits N seconds on connection startup before authentication." msgstr "인증 전에 연결이 시작되도록 N초 동안 기다립니다." -#: utils/misc/guc.c:2534 -msgid "Sets the number of WAL files held for standby servers." -msgstr "대기 서버를 위해 보관하고 있을 WAL 파일 개수 지정" +#: utils/misc/guc.c:2634 +msgid "Sets the size of WAL files held for standby servers." +msgstr "대기 서버를 위해 보관하고 있을 WAL 파일 크기를 지정" -#: utils/misc/guc.c:2544 +#: utils/misc/guc.c:2645 msgid "Sets the minimum size to shrink the WAL to." msgstr "WAL 최소 크기" -#: utils/misc/guc.c:2556 +#: utils/misc/guc.c:2657 msgid "Sets the WAL size that triggers a checkpoint." msgstr "체크포인트 작업을 할 WAL 크기 지정" -#: utils/misc/guc.c:2568 +#: utils/misc/guc.c:2669 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "자동 WAL 체크포인트 사이의 최대 간격을 설정합니다." -#: utils/misc/guc.c:2579 +#: utils/misc/guc.c:2680 msgid "" "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "지정 시간 안에 체크포인트 조각이 모두 채워지면 경고를 냄" -#: utils/misc/guc.c:2581 +#: utils/misc/guc.c:2682 msgid "" "Write a message to the server log if checkpoints caused by the filling of " "checkpoint segment files happens more frequently than this number of " @@ -26655,53 +27322,67 @@ msgstr "" "용이 꽉 차는 사태가 발생하면 경고 메시지를 서버 로그에 남깁니다. 이 값을 0으" "로 지정하면 이 기능 없음" -#: utils/misc/guc.c:2593 utils/misc/guc.c:2750 utils/misc/guc.c:2779 +#: utils/misc/guc.c:2694 utils/misc/guc.c:2910 utils/misc/guc.c:2957 msgid "" "Number of pages after which previously performed writes are flushed to disk." msgstr "" -#: utils/misc/guc.c:2604 +#: utils/misc/guc.c:2705 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "" "WAL 기능을 위해 공유 메모리에서 사용할 디스크 페이지 버퍼 개수를 지정함." -#: utils/misc/guc.c:2615 +#: utils/misc/guc.c:2716 msgid "Time between WAL flushes performed in the WAL writer." msgstr "WAL 기록자가 지정 시간 만큼 쉬고 쓰기 작업을 반복함" -#: utils/misc/guc.c:2626 +#: utils/misc/guc.c:2727 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "" -#: utils/misc/guc.c:2637 +#: utils/misc/guc.c:2738 +msgid "Size of new file to fsync instead of writing WAL." +msgstr "" + +#: utils/misc/guc.c:2749 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "동시에 작동할 WAL 송신 프로세스 최대 수 지정" -#: utils/misc/guc.c:2648 +#: utils/misc/guc.c:2760 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "동시에 사용할 수 있는 복제 슬롯 최대 수 지정" -#: utils/misc/guc.c:2658 +#: utils/misc/guc.c:2770 +msgid "Sets the maximum WAL size that can be reserved by replication slots." +msgstr "복제 슬롯을 위해 보관할 최대 WAL 크기 지정" + +#: utils/misc/guc.c:2771 +msgid "" +"Replication slots will be marked as failed, and segments released for " +"deletion or recycling, if this much space is occupied by WAL on disk." +msgstr "" + +#: utils/misc/guc.c:2783 msgid "Sets the maximum time to wait for WAL replication." msgstr "WAL 복제를 위해 기다릴 최대 시간 설정" -#: utils/misc/guc.c:2669 +#: utils/misc/guc.c:2794 msgid "" "Sets the delay in microseconds between transaction commit and flushing WAL " "to disk." msgstr "" "트랜잭션과 트랜잭션 로그의 적용 사이의 간격을 microsecond 단위로 지정함" -#: utils/misc/guc.c:2681 +#: utils/misc/guc.c:2806 msgid "" "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "commit_delay 처리하기 전에 있는 최소 동시 열려 있는 트랜잭션 개수." -#: utils/misc/guc.c:2692 +#: utils/misc/guc.c:2817 msgid "Sets the number of digits displayed for floating-point values." msgstr "부동소수형 값을 표기할 때 " -#: utils/misc/guc.c:2693 +#: utils/misc/guc.c:2818 msgid "" "This affects real, double precision, and geometric data types. A zero or " "negative parameter value is added to the standard number of digits (FLT_DIG " @@ -26712,17 +27393,30 @@ msgstr "" "은 정수여야합니다(FLT_DIG or DBL_DIG as appropriate - 무슨 말인지). 음수면 " "그 만큼 소숫점 자리를 더 많이 생략해서 정확도를 떨어뜨립니다." -#: utils/misc/guc.c:2705 -msgid "Sets the minimum execution time above which statements will be logged." +#: utils/misc/guc.c:2830 +msgid "" +"Sets the minimum execution time above which a sample of statements will be " +"logged. Sampling is determined by log_statement_sample_rate." +msgstr "" +"" + +#: utils/misc/guc.c:2833 +msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "" -"이 시간을 초과할 경우 쿼리문을 로그로 남길 최소 실행 시간을 설정합니다." +"0을 지정하면 모든 쿼리를 로깅하고, -1을 지정하면 이 기능이 해제됩니다." -#: utils/misc/guc.c:2707 +#: utils/misc/guc.c:2843 +msgid "" +"Sets the minimum execution time above which all statements will be logged." +msgstr "" +"모든 실행 쿼리문을 로그로 남길 최소 실행 시간을 설정합니다." + +#: utils/misc/guc.c:2845 msgid "Zero prints all queries. -1 turns this feature off." msgstr "" -"0을 지정하면 모든 쿼리가 인쇄됩니다. -1을 지정하면 이 기능이 해제됩니다." +"0을 지정하면 모든 쿼리를 로깅하고, -1을 지정하면 이 기능이 해제됩니다." -#: utils/misc/guc.c:2717 +#: utils/misc/guc.c:2855 msgid "" "Sets the minimum execution time above which autovacuum actions will be " "logged." @@ -26730,167 +27424,191 @@ msgstr "" "이 시간을 초과할 경우 자동 청소 작업 로그를 남길 최소 실행 시간을 설정합니" "다." -#: utils/misc/guc.c:2719 +#: utils/misc/guc.c:2857 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "" -"0을 지정하면 모든 작업이 인쇄됩니다. -1을 지정하면 자동 청소 기록이 해제됩니" -"다." +"0을 지정하면 모든 작업을 로깅하고, -1을 지정하면 자동 청소관련 로그를 남기지 않음" + +#: utils/misc/guc.c:2867 +msgid "" +"When logging statements, limit logged parameter values to first N bytes." +msgstr "" + +#: utils/misc/guc.c:2868 utils/misc/guc.c:2879 +msgid "-1 to print values in full." +msgstr "" + +#: utils/misc/guc.c:2878 +msgid "" +"When reporting an error, limit logged parameter values to first N bytes." +msgstr "" -#: utils/misc/guc.c:2729 +#: utils/misc/guc.c:2889 msgid "Background writer sleep time between rounds." msgstr "백그라운드 기록자의 잠자는 시간" -#: utils/misc/guc.c:2740 +#: utils/misc/guc.c:2900 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "라운드당 플러시할 백그라운드 작성기 최대 LRU 페이지 수입니다." -#: utils/misc/guc.c:2763 +#: utils/misc/guc.c:2923 msgid "" "Number of simultaneous requests that can be handled efficiently by the disk " "subsystem." msgstr "" "디스크 하위 시스템에서 효율적으로 처리할 수 있는 동시 요청 수입니다." -#: utils/misc/guc.c:2764 +#: utils/misc/guc.c:2924 msgid "" "For RAID arrays, this should be approximately the number of drive spindles " "in the array." msgstr "RAID 배열의 경우 이 값은 대략 배열의 드라이브 스핀들 수입니다." -#: utils/misc/guc.c:2792 +#: utils/misc/guc.c:2941 +msgid "" +"A variant of effective_io_concurrency that is used for maintenance work." +msgstr "" + +#: utils/misc/guc.c:2970 msgid "Maximum number of concurrent worker processes." msgstr "동시 작업자 프로세스의 최대 수" -#: utils/misc/guc.c:2804 +#: utils/misc/guc.c:2982 msgid "Maximum number of logical replication worker processes." msgstr "논리 복제 작업자 프로세스의 최대 수" -#: utils/misc/guc.c:2816 +#: utils/misc/guc.c:2994 msgid "Maximum number of table synchronization workers per subscription." msgstr "구독을 위한 테이블 동기화 작업자의 최대 수" -#: utils/misc/guc.c:2826 +#: utils/misc/guc.c:3004 msgid "Automatic log file rotation will occur after N minutes." msgstr "N분 후에 자동 로그 파일 회전이 발생합니다." -#: utils/misc/guc.c:2837 +#: utils/misc/guc.c:3015 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "N킬로바이트 후에 자동 로그 파일 회전이 발생합니다." -#: utils/misc/guc.c:2848 +#: utils/misc/guc.c:3026 msgid "Shows the maximum number of function arguments." msgstr "함수 인자의 최대 갯수를 보여줍니다" -#: utils/misc/guc.c:2859 +#: utils/misc/guc.c:3037 msgid "Shows the maximum number of index keys." msgstr "인덱스 키의 최대개수를 보여줍니다." -#: utils/misc/guc.c:2870 +#: utils/misc/guc.c:3048 msgid "Shows the maximum identifier length." msgstr "최대 식별자 길이를 표시합니다." -#: utils/misc/guc.c:2881 +#: utils/misc/guc.c:3059 msgid "Shows the size of a disk block." msgstr "디스크 블록의 크기를 표시합니다." -#: utils/misc/guc.c:2892 +#: utils/misc/guc.c:3070 msgid "Shows the number of pages per disk file." msgstr "디스크 파일당 페이지 수를 표시합니다." -#: utils/misc/guc.c:2903 +#: utils/misc/guc.c:3081 msgid "Shows the block size in the write ahead log." msgstr "미리 쓰기 로그의 블록 크기를 표시합니다." -#: utils/misc/guc.c:2914 +#: utils/misc/guc.c:3092 msgid "" "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "" -#: utils/misc/guc.c:2926 +#: utils/misc/guc.c:3104 msgid "Shows the size of write ahead log segments." msgstr "미리 쓰기 로그 세그먼트당 페이지 크기를 표시합니다." -#: utils/misc/guc.c:2939 +#: utils/misc/guc.c:3117 msgid "Time to sleep between autovacuum runs." msgstr "자동 청소 실행 사이의 절전 모드 시간입니다." -#: utils/misc/guc.c:2949 +#: utils/misc/guc.c:3127 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "청소 전의 최소 튜플 업데이트 또는 삭제 수입니다." -#: utils/misc/guc.c:2958 +#: utils/misc/guc.c:3136 +msgid "" +"Minimum number of tuple inserts prior to vacuum, or -1 to disable insert " +"vacuums." +msgstr "청소를 위한 최소 튜플 삽입 수입니다. -1은 insert는 vacuum에서 제외" + +#: utils/misc/guc.c:3145 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "통계 정보 수집을 위한 최소 튜플 삽입, 업데이트 또는 삭제 수입니다." -#: utils/misc/guc.c:2968 +#: utils/misc/guc.c:3155 msgid "" "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "" "트랜잭션 ID 겹침 방지를 위해 테이블에 대해 autovacuum 작업을 수행할 테이블 나" "이를 지정합니다." -#: utils/misc/guc.c:2979 +#: utils/misc/guc.c:3166 msgid "" "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "" "멀티 트랜잭션 ID 겹침 방지를 위해 테이블에 대해 autovacuum 작업을 수행할 트랜" "잭션 나이를 지정합니다." -#: utils/misc/guc.c:2989 +#: utils/misc/guc.c:3176 msgid "" "Sets the maximum number of simultaneously running autovacuum worker " "processes." msgstr "동시에 작업할 수 있는 autovacuum 작업자 최대 수 지정" -#: utils/misc/guc.c:2999 +#: utils/misc/guc.c:3186 msgid "" "Sets the maximum number of parallel processes per maintenance operation." msgstr "유지보수 작업에서 사용할 병렬 프로세스 최대 수를 지정" -#: utils/misc/guc.c:3009 +#: utils/misc/guc.c:3196 msgid "Sets the maximum number of parallel processes per executor node." msgstr "실행 노드당 최대 병렬 처리 수 지정" -#: utils/misc/guc.c:3020 +#: utils/misc/guc.c:3207 msgid "" "Sets the maximum number of parallel workers that can be active at one time." msgstr "한번에 작업할 수 있는 병렬 작업자 최대 수 지정" -#: utils/misc/guc.c:3031 +#: utils/misc/guc.c:3218 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "각 autovacuum 작업자 프로세스가 사용할 메모리 최대치" -#: utils/misc/guc.c:3042 +#: utils/misc/guc.c:3229 msgid "" "Time before a snapshot is too old to read pages changed after the snapshot " "was taken." msgstr "" -#: utils/misc/guc.c:3043 +#: utils/misc/guc.c:3230 msgid "A value of -1 disables this feature." msgstr "이 값이 -1 이면 이 기능 사용 안함" -#: utils/misc/guc.c:3053 +#: utils/misc/guc.c:3240 msgid "Time between issuing TCP keepalives." msgstr "TCP 연결 유지 실행 간격입니다." -#: utils/misc/guc.c:3054 utils/misc/guc.c:3065 utils/misc/guc.c:3189 +#: utils/misc/guc.c:3241 utils/misc/guc.c:3252 utils/misc/guc.c:3376 msgid "A value of 0 uses the system default." msgstr "이 값이 0이면 시스템 기본 값" -#: utils/misc/guc.c:3064 +#: utils/misc/guc.c:3251 msgid "Time between TCP keepalive retransmits." msgstr "TCP keepalive 시간 설정" -#: utils/misc/guc.c:3075 +#: utils/misc/guc.c:3262 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "" -#: utils/misc/guc.c:3086 +#: utils/misc/guc.c:3273 msgid "Maximum number of TCP keepalive retransmits." msgstr "TCP keepalive 확인 최대 횟수" -#: utils/misc/guc.c:3087 +#: utils/misc/guc.c:3274 msgid "" "This controls the number of consecutive keepalive retransmits that can be " "lost before a connection is considered dead. A value of 0 uses the system " @@ -26899,15 +27617,15 @@ msgstr "" "이 값은 연결이 중단된 것으로 간주되기 전에 손실될 수 있는 연속 연결 유" "지 재전송 수를 제어합니다. 값 0을 지정하면 시스템 기본 값이 사용됩니다." -#: utils/misc/guc.c:3098 +#: utils/misc/guc.c:3285 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "정확한 GIN 기준 검색에 허용되는 최대 결과 수를 설정합니다." -#: utils/misc/guc.c:3109 +#: utils/misc/guc.c:3296 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "디스크 캐시 총 크기에 대한 계획 관리자의 가정을 설정합니다." -#: utils/misc/guc.c:3110 +#: utils/misc/guc.c:3297 msgid "" "That is, the total size of the caches (kernel cache and shared buffers) used " "for PostgreSQL data files. This is measured in disk pages, which are " @@ -26916,59 +27634,59 @@ msgstr "" "즉, PostgreSQL에서 사용하는 총 캐시 크기입니다(커널 캐시와 공유 버퍼 모두 포" "함). 이 값은 디스크 페이지 단위로 측정되며, 일반적으로 각각 8kB입니다." -#: utils/misc/guc.c:3121 +#: utils/misc/guc.c:3308 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "병렬 조회를 위한 최소 테이블 자료량 지정" -#: utils/misc/guc.c:3122 +#: utils/misc/guc.c:3309 msgid "" "If the planner estimates that it will read a number of table pages too small " "to reach this limit, a parallel scan will not be considered." msgstr "" -#: utils/misc/guc.c:3132 +#: utils/misc/guc.c:3319 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "병렬 조회를 위한 최소 인덱스 자료량 지정" -#: utils/misc/guc.c:3133 +#: utils/misc/guc.c:3320 msgid "" "If the planner estimates that it will read a number of index pages too small " "to reach this limit, a parallel scan will not be considered." msgstr "" -#: utils/misc/guc.c:3144 +#: utils/misc/guc.c:3331 msgid "Shows the server version as an integer." msgstr "서버 버전을 정수형으로 보여줍니다" -#: utils/misc/guc.c:3155 +#: utils/misc/guc.c:3342 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "이 킬로바이트 수보다 큰 임시 파일의 사용을 기록합니다." -#: utils/misc/guc.c:3156 +#: utils/misc/guc.c:3343 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "" "0을 지정하면 모든 파일이 기록됩니다. 기본 값은 -1로, 이 기능이 해제됩니다." -#: utils/misc/guc.c:3166 +#: utils/misc/guc.c:3353 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "pg_stat_activity.query에 예약되는 크기(바이트)를 설정합니다." -#: utils/misc/guc.c:3177 +#: utils/misc/guc.c:3364 msgid "Sets the maximum size of the pending list for GIN index." msgstr "GIN 인덱스를 위한 팬딩(pending) 목록의 최대 크기 지정" -#: utils/misc/guc.c:3188 +#: utils/misc/guc.c:3375 msgid "TCP user timeout." msgstr "" -#: utils/misc/guc.c:3208 +#: utils/misc/guc.c:3395 msgid "" "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "" "순차적으로 접근하는 디스크 페이지에 대한 계획 관리자의 예상 비용을 설정합니" "다." -#: utils/misc/guc.c:3219 +#: utils/misc/guc.c:3406 msgid "" "Sets the planner's estimate of the cost of a nonsequentially fetched disk " "page." @@ -26976,11 +27694,11 @@ msgstr "" "비순차적으로 접근하는 디스크 페이지에 대한 계획 관리자의 예상 비용을 설정합니" "다." -#: utils/misc/guc.c:3230 +#: utils/misc/guc.c:3417 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "각 튜플(행)에 대한 계획 관리자의 예상 처리 비용을 설정합니다." -#: utils/misc/guc.c:3241 +#: utils/misc/guc.c:3428 msgid "" "Sets the planner's estimate of the cost of processing each index entry " "during an index scan." @@ -26988,7 +27706,7 @@ msgstr "" "실행 계획기의 비용 계산에 사용될 인덱스 스캔으로 각 인덱스 항목을 처리하는 예" "상 처리 비용을 설정합니다." -#: utils/misc/guc.c:3252 +#: utils/misc/guc.c:3439 msgid "" "Sets the planner's estimate of the cost of processing each operator or " "function call." @@ -26996,73 +27714,77 @@ msgstr "" "실행 계획기의 비용 계산에 사용될 함수 호출이나 연산자 연산 처리하는 예상 처" "리 비용을 설정합니다." -#: utils/misc/guc.c:3263 +#: utils/misc/guc.c:3450 msgid "" "Sets the planner's estimate of the cost of passing each tuple (row) from " "worker to master backend." msgstr "각 튜플(행)에 대한 계획 관리자의 예상 처리 비용을 설정합니다." -#: utils/misc/guc.c:3274 +#: utils/misc/guc.c:3461 msgid "" "Sets the planner's estimate of the cost of starting up worker processes for " "parallel query." msgstr "" -#: utils/misc/guc.c:3286 +#: utils/misc/guc.c:3473 msgid "Perform JIT compilation if query is more expensive." msgstr "" -#: utils/misc/guc.c:3287 +#: utils/misc/guc.c:3474 msgid "-1 disables JIT compilation." msgstr "" -#: utils/misc/guc.c:3297 +#: utils/misc/guc.c:3484 msgid "Optimize JITed functions if query is more expensive." msgstr "" -#: utils/misc/guc.c:3298 +#: utils/misc/guc.c:3485 msgid "-1 disables optimization." msgstr "-1 최적화 비활성화" -#: utils/misc/guc.c:3308 +#: utils/misc/guc.c:3495 msgid "Perform JIT inlining if query is more expensive." msgstr "" -#: utils/misc/guc.c:3309 +#: utils/misc/guc.c:3496 msgid "-1 disables inlining." msgstr "" -#: utils/misc/guc.c:3319 +#: utils/misc/guc.c:3506 msgid "" "Sets the planner's estimate of the fraction of a cursor's rows that will be " "retrieved." msgstr "검색될 커서 행에 대한 계획 관리자의 예상 분수 값을 설정합니다." -#: utils/misc/guc.c:3331 +#: utils/misc/guc.c:3518 msgid "GEQO: selective pressure within the population." msgstr "GEQO: 모집단 내의 선택 압력입니다." -#: utils/misc/guc.c:3342 +#: utils/misc/guc.c:3529 msgid "GEQO: seed for random path selection." msgstr "GEQO: 무작위 경로 선택을 위한 씨드" -#: utils/misc/guc.c:3353 +#: utils/misc/guc.c:3540 +msgid "Multiple of work_mem to use for hash tables." +msgstr "" + +#: utils/misc/guc.c:3551 msgid "Multiple of the average buffer usage to free per round." msgstr "라운드당 해제할 평균 버퍼 사용의 배수입니다." -#: utils/misc/guc.c:3363 +#: utils/misc/guc.c:3561 msgid "Sets the seed for random-number generation." msgstr "난수 생성 속도를 설정합니다." -#: utils/misc/guc.c:3374 +#: utils/misc/guc.c:3572 msgid "Vacuum cost delay in milliseconds." msgstr "청소 비용 지연(밀리초)입니다." -#: utils/misc/guc.c:3385 +#: utils/misc/guc.c:3583 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "자동 청소에 대한 청소 비용 지연(밀리초)입니다." -#: utils/misc/guc.c:3396 +#: utils/misc/guc.c:3594 msgid "" "Number of tuple updates or deletes prior to vacuum as a fraction of " "reltuples." @@ -27070,7 +27792,11 @@ msgstr "" "vacuum 작업을 진행할 update, delete 작업량을 전체 자료에 대한 분수값으로 지정" "합니다." -#: utils/misc/guc.c:3405 +#: utils/misc/guc.c:3604 +msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." +msgstr "" + +#: utils/misc/guc.c:3614 msgid "" "Number of tuple inserts, updates, or deletes prior to analyze as a fraction " "of reltuples." @@ -27078,131 +27804,139 @@ msgstr "" "통계 수집 작업을 진행할 insert, update, delete 작업량을 전체 자료에 대한 분수" "값으로 지정합니다." -#: utils/misc/guc.c:3415 +#: utils/misc/guc.c:3624 msgid "" "Time spent flushing dirty buffers during checkpoint, as fraction of " "checkpoint interval." msgstr "" -"체크포인트 도중 변경된 버퍼 플러시에 사용된 시간으로, 체크포인트 간격의 " -"분수 값입니다." +"체크포인트 반복 주기 안에 작업을 완료할 분수값(1=100%)" -#: utils/misc/guc.c:3425 +#: utils/misc/guc.c:3634 msgid "" "Number of tuple inserts prior to index cleanup as a fraction of reltuples." msgstr "" -#: utils/misc/guc.c:3435 +#: utils/misc/guc.c:3644 +msgid "Fraction of statements exceeding log_min_duration_sample to be logged." +msgstr "" + +#: utils/misc/guc.c:3645 +msgid "Use a value between 0.0 (never log) and 1.0 (always log)." +msgstr "" + +#: utils/misc/guc.c:3654 msgid "Set the fraction of transactions to log for new transactions." msgstr "새 트랜잭션에 대해서 로그에 남길 트랜잭션 비율을 설정합니다." -#: utils/misc/guc.c:3436 +#: utils/misc/guc.c:3655 msgid "" "Logs all statements from a fraction of transactions. Use a value between 0.0 " "(never log) and 1.0 (log all statements for all transactions)." msgstr "" -#: utils/misc/guc.c:3456 +#: utils/misc/guc.c:3675 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "WAL 파일을 아카이빙하기 위해 호출될 셸 명령을 설정합니다." -#: utils/misc/guc.c:3466 -msgid "Sets the shell command that will retrieve an archived WAL file." +#: utils/misc/guc.c:3685 +msgid "" +"Sets the shell command that will be called to retrieve an archived WAL file." msgstr "아카이브된 WAL 파일을 재 반영할 쉘 명령어를 설정합니다." -#: utils/misc/guc.c:3476 +#: utils/misc/guc.c:3695 msgid "Sets the shell command that will be executed at every restart point." msgstr "매 복구 작업이 끝난 다음 실행할 쉘 명령어를 설정합니다." -#: utils/misc/guc.c:3486 +#: utils/misc/guc.c:3705 msgid "" "Sets the shell command that will be executed once at the end of recovery." msgstr "복구 작업 끝에 한 번 실행될 쉘 명령어를 설정합니다." -#: utils/misc/guc.c:3496 +#: utils/misc/guc.c:3715 msgid "Specifies the timeline to recover into." msgstr "복구할 타임라인을 지정합니다." -#: utils/misc/guc.c:3506 +#: utils/misc/guc.c:3725 msgid "" "Set to \"immediate\" to end recovery as soon as a consistent state is " "reached." msgstr "" -#: utils/misc/guc.c:3515 +#: utils/misc/guc.c:3734 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "" -#: utils/misc/guc.c:3524 +#: utils/misc/guc.c:3743 msgid "Sets the time stamp up to which recovery will proceed." msgstr "" -#: utils/misc/guc.c:3533 +#: utils/misc/guc.c:3752 msgid "Sets the named restore point up to which recovery will proceed." msgstr "" -#: utils/misc/guc.c:3542 +#: utils/misc/guc.c:3761 msgid "" "Sets the LSN of the write-ahead log location up to which recovery will " "proceed." msgstr "" -#: utils/misc/guc.c:3552 +#: utils/misc/guc.c:3771 msgid "Specifies a file name whose presence ends recovery in the standby." msgstr "" -#: utils/misc/guc.c:3562 +#: utils/misc/guc.c:3781 msgid "Sets the connection string to be used to connect to the sending server." msgstr "" -#: utils/misc/guc.c:3573 +#: utils/misc/guc.c:3792 msgid "Sets the name of the replication slot to use on the sending server." msgstr "복제 슬롯 이름을 지정합니다." -#: utils/misc/guc.c:3583 +#: utils/misc/guc.c:3802 msgid "Sets the client's character set encoding." msgstr "클라이언트 문자 세트 인코딩을 지정함" -#: utils/misc/guc.c:3594 +#: utils/misc/guc.c:3813 msgid "Controls information prefixed to each log line." msgstr "각 로그 줄 앞에 추가할 정보를 제어합니다." -#: utils/misc/guc.c:3595 +#: utils/misc/guc.c:3814 msgid "If blank, no prefix is used." msgstr "비워 두면 접두사가 사용되지 않습니다." -#: utils/misc/guc.c:3604 +#: utils/misc/guc.c:3823 msgid "Sets the time zone to use in log messages." msgstr "로그 메시지에 사용할 표준 시간대를 설정합니다." -#: utils/misc/guc.c:3614 +#: utils/misc/guc.c:3833 msgid "Sets the display format for date and time values." msgstr "날짜와 시간 값을 나타내는 모양을 지정합니다." -#: utils/misc/guc.c:3615 +#: utils/misc/guc.c:3834 msgid "Also controls interpretation of ambiguous date inputs." msgstr "또한 모호한 날짜 입력의 해석을 제어합니다." -#: utils/misc/guc.c:3626 +#: utils/misc/guc.c:3845 msgid "Sets the default table access method for new tables." msgstr "새 테이블에서 사용할 기본 테이블 접근 방법을 지정합니다." -#: utils/misc/guc.c:3637 +#: utils/misc/guc.c:3856 msgid "Sets the default tablespace to create tables and indexes in." msgstr "테이블 및 인덱스를 만들 기본 테이블스페이스를 설정합니다." -#: utils/misc/guc.c:3638 +#: utils/misc/guc.c:3857 msgid "An empty string selects the database's default tablespace." msgstr "빈 문자열을 지정하면 데이터베이스의 기본 테이블스페이스가 선택됩니다." -#: utils/misc/guc.c:3648 +#: utils/misc/guc.c:3867 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "임시 테이블 및 정렬 파일에 사용할 테이블스페이스를 설정합니다." -#: utils/misc/guc.c:3659 +#: utils/misc/guc.c:3878 msgid "Sets the path for dynamically loadable modules." msgstr "동적으로 불러올 수 있는 모듈들이 있는 경로를 지정함." -#: utils/misc/guc.c:3660 +#: utils/misc/guc.c:3879 msgid "" "If a dynamically loadable module needs to be opened and the specified name " "does not have a directory component (i.e., the name does not contain a " @@ -27212,76 +27946,76 @@ msgstr "" "소가 없는 경우(즉, 이름에 슬래시가 없음) 시스템은 이 경로에서 지정한 파일을 " "검색합니다." -#: utils/misc/guc.c:3673 +#: utils/misc/guc.c:3892 msgid "Sets the location of the Kerberos server key file." msgstr "Kerberos 서버 키 파일의 위치를 지정함." -#: utils/misc/guc.c:3684 +#: utils/misc/guc.c:3903 msgid "Sets the Bonjour service name." msgstr "Bonjour 서비스 이름을 지정" -#: utils/misc/guc.c:3696 +#: utils/misc/guc.c:3915 msgid "Shows the collation order locale." msgstr "데이터 정렬 순서 로케일을 표시합니다." -#: utils/misc/guc.c:3707 +#: utils/misc/guc.c:3926 msgid "Shows the character classification and case conversion locale." msgstr "문자 분류 및 대/소문자 변환 로케일을 표시합니다." -#: utils/misc/guc.c:3718 +#: utils/misc/guc.c:3937 msgid "Sets the language in which messages are displayed." msgstr "보여질 메시지로 사용할 언어 지정." -#: utils/misc/guc.c:3728 +#: utils/misc/guc.c:3947 msgid "Sets the locale for formatting monetary amounts." msgstr "통화금액 표현 양식으로 사용할 로케일 지정." -#: utils/misc/guc.c:3738 +#: utils/misc/guc.c:3957 msgid "Sets the locale for formatting numbers." msgstr "숫자 표현 양식으로 사용할 로케일 지정." -#: utils/misc/guc.c:3748 +#: utils/misc/guc.c:3967 msgid "Sets the locale for formatting date and time values." msgstr "날짜와 시간 값을 표현할 양식으로 사용할 로케일 지정." -#: utils/misc/guc.c:3758 +#: utils/misc/guc.c:3977 msgid "Lists shared libraries to preload into each backend." msgstr "각각의 백엔드에 미리 불러올 공유 라이브러리들을 지정합니다" -#: utils/misc/guc.c:3769 +#: utils/misc/guc.c:3988 msgid "Lists shared libraries to preload into server." msgstr "서버에 미리 불러올 공유 라이브러리들을 지정합니다" -#: utils/misc/guc.c:3780 +#: utils/misc/guc.c:3999 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "" "각각의 백엔드에 미리 불러올 접근제한 없는 공유 라이브러리들을 지정합니다" -#: utils/misc/guc.c:3791 +#: utils/misc/guc.c:4010 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "스키마로 한정되지 않은 이름의 스키마 검색 순서를 설정합니다." -#: utils/misc/guc.c:3803 +#: utils/misc/guc.c:4022 msgid "Sets the server (database) character set encoding." msgstr "서버 문자 코드 세트 인코딩 지정." -#: utils/misc/guc.c:3815 +#: utils/misc/guc.c:4034 msgid "Shows the server version." msgstr "서버 버전 보임." -#: utils/misc/guc.c:3827 +#: utils/misc/guc.c:4046 msgid "Sets the current role." msgstr "현재 롤을 지정" -#: utils/misc/guc.c:3839 +#: utils/misc/guc.c:4058 msgid "Sets the session user name." msgstr "세션 사용자 이름 지정." -#: utils/misc/guc.c:3850 +#: utils/misc/guc.c:4069 msgid "Sets the destination for server log output." msgstr "서버 로그 출력을 위한 대상을 지정합니다." -#: utils/misc/guc.c:3851 +#: utils/misc/guc.c:4070 msgid "" "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and " "\"eventlog\", depending on the platform." @@ -27289,161 +28023,165 @@ msgstr "" "유효한 값은 플랫폼에 따라 \"stderr\", \"syslog\", \"csvlog\" 및 \"eventlog" "\"의 조합입니다." -#: utils/misc/guc.c:3862 +#: utils/misc/guc.c:4081 msgid "Sets the destination directory for log files." msgstr "로그 파일의 대상 디렉터리를 설정합니다." -#: utils/misc/guc.c:3863 +#: utils/misc/guc.c:4082 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "데이터 디렉터리의 상대 경로 또는 절대 경로로 지정할 수 있습니다." -#: utils/misc/guc.c:3873 +#: utils/misc/guc.c:4092 msgid "Sets the file name pattern for log files." msgstr "로그 파일의 파일 이름 패턴을 설정합니다." -#: utils/misc/guc.c:3884 +#: utils/misc/guc.c:4103 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "syslog에서 구분할 PostgreSQL 메시지에 사용될 프로그램 이름을 지정." -#: utils/misc/guc.c:3895 +#: utils/misc/guc.c:4114 msgid "" "Sets the application name used to identify PostgreSQL messages in the event " "log." msgstr "" "이벤트 로그에서 PostgreSQL 메시지 식별자로 사용할 응용프로그램 이름 지정" -#: utils/misc/guc.c:3906 +#: utils/misc/guc.c:4125 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "시간대(time zone)를 지정함." -#: utils/misc/guc.c:3916 +#: utils/misc/guc.c:4135 msgid "Selects a file of time zone abbreviations." msgstr "표준 시간대 약어 파일을 선택합니다." -#: utils/misc/guc.c:3926 +#: utils/misc/guc.c:4145 msgid "Sets the owning group of the Unix-domain socket." msgstr "유닉스 도메인 소켓의 소유주를 지정" -#: utils/misc/guc.c:3927 +#: utils/misc/guc.c:4146 msgid "" "The owning user of the socket is always the user that starts the server." msgstr "소켓 소유자는 항상 서버를 시작하는 사용자입니다." -#: utils/misc/guc.c:3937 +#: utils/misc/guc.c:4156 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "유닉스 도메인 소켓을 만들 디렉터리를 지정합니다." -#: utils/misc/guc.c:3952 +#: utils/misc/guc.c:4171 msgid "Sets the host name or IP address(es) to listen to." msgstr "서비스할 호스트이름이나, IP를 지정함." -#: utils/misc/guc.c:3967 +#: utils/misc/guc.c:4186 msgid "Sets the server's data directory." msgstr "서버의 데이터 디렉터리 위치를 지정합니다." -#: utils/misc/guc.c:3978 +#: utils/misc/guc.c:4197 msgid "Sets the server's main configuration file." msgstr "서버의 기본 환경설정 파일 경로를 지정합니다." -#: utils/misc/guc.c:3989 +#: utils/misc/guc.c:4208 msgid "Sets the server's \"hba\" configuration file." msgstr "서버의 \"hba\" 구성 파일을 설정합니다." -#: utils/misc/guc.c:4000 +#: utils/misc/guc.c:4219 msgid "Sets the server's \"ident\" configuration file." msgstr "서버의 \"ident\" 구성 파일을 설정합니다." -#: utils/misc/guc.c:4011 +#: utils/misc/guc.c:4230 msgid "Writes the postmaster PID to the specified file." msgstr "postmaster PID가 기록된 파일의 경로를 지정합니다." -#: utils/misc/guc.c:4022 +#: utils/misc/guc.c:4241 msgid "Name of the SSL library." msgstr "" -#: utils/misc/guc.c:4037 +#: utils/misc/guc.c:4256 msgid "Location of the SSL server certificate file." msgstr "서버 인증서 파일 위치를 지정함" -#: utils/misc/guc.c:4047 +#: utils/misc/guc.c:4266 msgid "Location of the SSL server private key file." msgstr "SSL 서버 개인 키 파일의 위치를 지정함." -#: utils/misc/guc.c:4057 +#: utils/misc/guc.c:4276 msgid "Location of the SSL certificate authority file." msgstr "" -#: utils/misc/guc.c:4067 +#: utils/misc/guc.c:4286 msgid "Location of the SSL certificate revocation list file." msgstr "SSL 인증서 파기 목록 파일의 위치" -#: utils/misc/guc.c:4077 +#: utils/misc/guc.c:4296 msgid "Writes temporary statistics files to the specified directory." msgstr "지정한 디렉터리에 임시 통계 파일을 씁니다." -#: utils/misc/guc.c:4088 +#: utils/misc/guc.c:4307 msgid "" "Number of synchronous standbys and list of names of potential synchronous " "ones." msgstr "" -#: utils/misc/guc.c:4099 +#: utils/misc/guc.c:4318 msgid "Sets default text search configuration." msgstr "기본 텍스트 검색 구성을 설정합니다." -#: utils/misc/guc.c:4109 +#: utils/misc/guc.c:4328 msgid "Sets the list of allowed SSL ciphers." msgstr "허용되는 SSL 암호 목록을 설정합니다." -#: utils/misc/guc.c:4124 +#: utils/misc/guc.c:4343 msgid "Sets the curve to use for ECDH." msgstr "ECDH에 사용할 curve 설정" -#: utils/misc/guc.c:4139 +#: utils/misc/guc.c:4358 msgid "Location of the SSL DH parameters file." msgstr "SSL DH 매개 변수 파일의 위치." -#: utils/misc/guc.c:4150 +#: utils/misc/guc.c:4369 msgid "Command to obtain passphrases for SSL." msgstr "" -#: utils/misc/guc.c:4160 +#: utils/misc/guc.c:4380 msgid "Sets the application name to be reported in statistics and logs." msgstr "" -#: utils/misc/guc.c:4171 +#: utils/misc/guc.c:4391 msgid "Sets the name of the cluster, which is included in the process title." msgstr "" -#: utils/misc/guc.c:4182 +#: utils/misc/guc.c:4402 msgid "" "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "" -#: utils/misc/guc.c:4183 +#: utils/misc/guc.c:4403 msgid "" "Full-page images will be logged for all data blocks and cross-checked " "against the results of WAL replay." msgstr "" -#: utils/misc/guc.c:4193 +#: utils/misc/guc.c:4413 msgid "JIT provider to use." -msgstr "" +msgstr "사용할 JIT 제공자" + +#: utils/misc/guc.c:4424 +msgid "Log backtrace for errors in these functions." +msgstr "이 함수들 안에 오류 추적용 로그를 남김" -#: utils/misc/guc.c:4213 +#: utils/misc/guc.c:4444 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "문자열에서 \"\\'\" 문자 사용을 허용할 것인지를 정하세요" -#: utils/misc/guc.c:4223 +#: utils/misc/guc.c:4454 msgid "Sets the output format for bytea." msgstr "bytea 값의 표시 형식을 설정합니다." -#: utils/misc/guc.c:4233 +#: utils/misc/guc.c:4464 msgid "Sets the message levels that are sent to the client." msgstr "클라이언트 측에 보여질 메시지 수준을 지정함." -#: utils/misc/guc.c:4234 utils/misc/guc.c:4299 utils/misc/guc.c:4310 -#: utils/misc/guc.c:4386 +#: utils/misc/guc.c:4465 utils/misc/guc.c:4530 utils/misc/guc.c:4541 +#: utils/misc/guc.c:4617 msgid "" "Each level includes all the levels that follow it. The later the level, the " "fewer messages are sent." @@ -27451,11 +28189,11 @@ msgstr "" "각 수준에는 이 수준 뒤에 있는 모든 수준이 포함됩니다. 수준이 뒤에 있을수" "록 전송되는 메시지 수가 적습니다." -#: utils/misc/guc.c:4244 +#: utils/misc/guc.c:4475 msgid "Enables the planner to use constraints to optimize queries." msgstr "실행계획기가 쿼리 최적화 작업에서 제약 조건을 사용하도록 함" -#: utils/misc/guc.c:4245 +#: utils/misc/guc.c:4476 msgid "" "Table scans will be skipped if their constraints guarantee that no rows " "match the query." @@ -27463,87 +28201,87 @@ msgstr "" "제약 조건에 의해 쿼리와 일치하는 행이 없는 경우 테이블 스캔을 건너뜁니" "다." -#: utils/misc/guc.c:4256 +#: utils/misc/guc.c:4487 msgid "Sets the transaction isolation level of each new transaction." msgstr "각 새 트랜잭션의 트랜잭션 격리 수준을 설정합니다." -#: utils/misc/guc.c:4266 +#: utils/misc/guc.c:4497 msgid "Sets the current transaction's isolation level." msgstr "현재 트랜잭션 독립성 수준(isolation level)을 지정함." -#: utils/misc/guc.c:4277 +#: utils/misc/guc.c:4508 msgid "Sets the display format for interval values." msgstr "간격 값의 표시 형식을 설정합니다." -#: utils/misc/guc.c:4288 +#: utils/misc/guc.c:4519 msgid "Sets the verbosity of logged messages." msgstr "기록되는 메시지의 상세 정도를 지정합니다." -#: utils/misc/guc.c:4298 +#: utils/misc/guc.c:4529 msgid "Sets the message levels that are logged." msgstr "서버 로그에 기록될 메시지 수준을 지정함." -#: utils/misc/guc.c:4309 +#: utils/misc/guc.c:4540 msgid "" "Causes all statements generating error at or above this level to be logged." msgstr "" "오류가 있는 모든 쿼리문이나 지정한 로그 레벨 이상의 쿼리문을 로그로 남김" -#: utils/misc/guc.c:4320 +#: utils/misc/guc.c:4551 msgid "Sets the type of statements logged." msgstr "서버로그에 기록될 구문 종류를 지정합니다." -#: utils/misc/guc.c:4330 +#: utils/misc/guc.c:4561 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "syslog 기능을 사용할 때, 사용할 syslog \"facility\" 값을 지정." -#: utils/misc/guc.c:4345 +#: utils/misc/guc.c:4576 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "트리거 및 다시 쓰기 규칙에 대한 세션의 동작을 설정합니다." -#: utils/misc/guc.c:4355 +#: utils/misc/guc.c:4586 msgid "Sets the current transaction's synchronization level." msgstr "현재 트랜잭션 격리 수준(isolation level)을 지정함." -#: utils/misc/guc.c:4365 +#: utils/misc/guc.c:4596 msgid "Allows archiving of WAL files using archive_command." msgstr "archive_command를 사용하여 WAL 파일을 따로 보관하도록 설정합니다." -#: utils/misc/guc.c:4375 +#: utils/misc/guc.c:4606 msgid "Sets the action to perform upon reaching the recovery target." msgstr "" -#: utils/misc/guc.c:4385 +#: utils/misc/guc.c:4616 msgid "Enables logging of recovery-related debugging information." msgstr "복구 작업과 관련된 디버깅 정보를 기록하도록 합니다." -#: utils/misc/guc.c:4401 +#: utils/misc/guc.c:4632 msgid "Collects function-level statistics on database activity." msgstr "데이터베이스 활동에 대한 함수 수준 통계를 수집합니다." -#: utils/misc/guc.c:4411 +#: utils/misc/guc.c:4642 msgid "Set the level of information written to the WAL." msgstr "WAL에 저장할 내용 수준을 지정합니다." -#: utils/misc/guc.c:4421 +#: utils/misc/guc.c:4652 msgid "Selects the dynamic shared memory implementation used." msgstr "사용할 동적 공유 메모리 관리방식을 선택합니다." -#: utils/misc/guc.c:4431 +#: utils/misc/guc.c:4662 msgid "" "Selects the shared memory implementation used for the main shared memory " "region." msgstr "사용할 동적 공유 메모리 관리방식을 선택합니다." -#: utils/misc/guc.c:4441 +#: utils/misc/guc.c:4672 msgid "Selects the method used for forcing WAL updates to disk." msgstr "디스크에 대한 강제 WAL 업데이트에 사용되는 방법을 선택합니다." -#: utils/misc/guc.c:4451 +#: utils/misc/guc.c:4682 msgid "Sets how binary values are to be encoded in XML." msgstr "XML에서 바이너리 값이 인코딩되는 방식을 설정합니다." -#: utils/misc/guc.c:4461 +#: utils/misc/guc.c:4692 msgid "" "Sets whether XML data in implicit parsing and serialization operations is to " "be considered as documents or content fragments." @@ -27551,59 +28289,49 @@ msgstr "" "암시적 구문 분석 및 직렬화 작업의 XML 데이터를 문서 또는 내용 조각으로 간주할" "지 여부를 설정합니다." -#: utils/misc/guc.c:4472 +#: utils/misc/guc.c:4703 msgid "Use of huge pages on Linux or Windows." msgstr "리눅스 또는 Windows huge 페이지 사용 여부" -#: utils/misc/guc.c:4482 +#: utils/misc/guc.c:4713 msgid "Forces use of parallel query facilities." msgstr "병렬 쿼리 기능을 활성화" -#: utils/misc/guc.c:4483 +#: utils/misc/guc.c:4714 msgid "" "If possible, run query using a parallel worker and with parallel " "restrictions." msgstr "" -#: utils/misc/guc.c:4493 -msgid "Encrypt passwords." -msgstr "암호를 암호화 해서 기록함" - -#: utils/misc/guc.c:4494 -msgid "" -"When a password is specified in CREATE USER or ALTER USER without writing " -"either ENCRYPTED or UNENCRYPTED, this parameter determines whether the " -"password is to be encrypted." +#: utils/misc/guc.c:4724 +msgid "Chooses the algorithm for encrypting passwords." msgstr "" -"CREATE USER 또는 ALTER USER 명령에서 ENCRYPTED 또는 UNENCRYPTED 속성을 특별" -"히 지정하지 않았고 사용자 암호를 지정했을 때, 그 암호를 암호화 해서 저장할 것" -"인지 아닌지를 지정함" -#: utils/misc/guc.c:4505 +#: utils/misc/guc.c:4734 msgid "Controls the planner's selection of custom or generic plan." msgstr "" -#: utils/misc/guc.c:4506 +#: utils/misc/guc.c:4735 msgid "" "Prepared statements can have custom and generic plans, and the planner will " "attempt to choose which is better. This can be set to override the default " "behavior." msgstr "" -#: utils/misc/guc.c:4518 +#: utils/misc/guc.c:4747 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "사용할 최소 SSL/TLS 프로토콜 버전을 지정합니다." -#: utils/misc/guc.c:4530 +#: utils/misc/guc.c:4759 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "사용할 최대 SSL/TLS 프로토콜 버전을 지정합니다." -#: utils/misc/guc.c:5333 +#: utils/misc/guc.c:5562 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: \"%s\" 디렉터리에 액세스할 수 없음: %s\n" -#: utils/misc/guc.c:5338 +#: utils/misc/guc.c:5567 #, c-format msgid "" "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" @@ -27611,7 +28339,7 @@ msgstr "" "initdb 명령이나, pg_basebackup 명령으로 PostgreSQL 데이터 디렉터리를 초기화 " "하세요.\n" -#: utils/misc/guc.c:5358 +#: utils/misc/guc.c:5587 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -27623,12 +28351,12 @@ msgstr "" "PGDATA 이름의 환경 변수를 만들고 그 값으로 해당 디렉터리를 지정한 뒤,\n" "이 프로그램을 다시 실행해 보십시오.\n" -#: utils/misc/guc.c:5377 +#: utils/misc/guc.c:5606 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s: \"%s\" 환경 설정 파일을 접근할 수 없습니다: %s\n" -#: utils/misc/guc.c:5403 +#: utils/misc/guc.c:5632 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -27641,7 +28369,7 @@ msgstr "" "PGDATA 이름의 환경 변수를 만들고 그 값으로 해당 디렉터리를 지정한 뒤,\n" "이 프로그램을 다시 실행해 보십시오.\n" -#: utils/misc/guc.c:5451 +#: utils/misc/guc.c:5680 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -27654,7 +28382,7 @@ msgstr "" "PGDATA 이름의 환경 변수를 만들고 그 값으로 해당 디렉터리를 지정한 뒤,\n" "이 프로그램을 다시 실행해 보십시오.\n" -#: utils/misc/guc.c:5474 +#: utils/misc/guc.c:5703 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -27667,131 +28395,131 @@ msgstr "" "PGDATA 이름의 환경 변수를 만들고 그 값으로 해당 디렉터리를 지정한 뒤,\n" "이 프로그램을 다시 실행해 보십시오.\n" -#: utils/misc/guc.c:6316 +#: utils/misc/guc.c:6545 msgid "Value exceeds integer range." msgstr "값이 정수 범위를 초과합니다." -#: utils/misc/guc.c:6552 +#: utils/misc/guc.c:6781 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s 값은 \"%s\" 매개 변수의 값으로 타당한 범위(%d .. %d)를 벗어남" -#: utils/misc/guc.c:6588 +#: utils/misc/guc.c:6817 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s 값은 \"%s\" 매개 변수의 값으로 타당한 범위(%g .. %g)를 벗어남" -#: utils/misc/guc.c:6744 utils/misc/guc.c:8111 +#: utils/misc/guc.c:6973 utils/misc/guc.c:8340 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "병렬 작업 중에는 매개 변수를 설정할 수 없음" -#: utils/misc/guc.c:6751 utils/misc/guc.c:7503 utils/misc/guc.c:7556 -#: utils/misc/guc.c:7607 utils/misc/guc.c:7940 utils/misc/guc.c:8707 -#: utils/misc/guc.c:8969 utils/misc/guc.c:10636 +#: utils/misc/guc.c:6980 utils/misc/guc.c:7732 utils/misc/guc.c:7785 +#: utils/misc/guc.c:7836 utils/misc/guc.c:8169 utils/misc/guc.c:8936 +#: utils/misc/guc.c:9198 utils/misc/guc.c:10864 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "알 수 없는 환경 매개 변수 이름: \"%s\"" -#: utils/misc/guc.c:6766 utils/misc/guc.c:7952 +#: utils/misc/guc.c:6995 utils/misc/guc.c:8181 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "\"%s\" 매개 변수는 변경될 수 없음" -#: utils/misc/guc.c:6789 utils/misc/guc.c:6983 utils/misc/guc.c:7073 -#: utils/misc/guc.c:7163 utils/misc/guc.c:7271 utils/misc/guc.c:7366 -#: guc-file.l:353 +#: utils/misc/guc.c:7018 utils/misc/guc.c:7212 utils/misc/guc.c:7302 +#: utils/misc/guc.c:7392 utils/misc/guc.c:7500 utils/misc/guc.c:7595 +#: guc-file.l:352 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "\"%s\" 매개 변수는 서버 재실행 없이 지금 변경 될 수 없음" -#: utils/misc/guc.c:6799 +#: utils/misc/guc.c:7028 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "\"%s\" 매개 변수는 지금 변경 될 수 없음" -#: utils/misc/guc.c:6817 utils/misc/guc.c:6864 utils/misc/guc.c:10652 +#: utils/misc/guc.c:7046 utils/misc/guc.c:7093 utils/misc/guc.c:10880 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "\"%s\" 매개 변수를 지정할 권한이 없습니다." -#: utils/misc/guc.c:6854 +#: utils/misc/guc.c:7083 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "\"%s\" 매개 변수값은 연결 시작한 뒤에는 변경할 수 없습니다" -#: utils/misc/guc.c:6902 +#: utils/misc/guc.c:7131 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "보안 정의자 함수 내에서 \"%s\" 매개 변수를 설정할 수 없음" -#: utils/misc/guc.c:7511 utils/misc/guc.c:7561 utils/misc/guc.c:8976 +#: utils/misc/guc.c:7740 utils/misc/guc.c:7790 utils/misc/guc.c:9205 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "\"%s\" 검사를 위한 pg_read_all_settings의 맴버는 superuser여야합니다" -#: utils/misc/guc.c:7652 +#: utils/misc/guc.c:7881 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s 명령은 하나의 값만 지정해야합니다" -#: utils/misc/guc.c:7900 +#: utils/misc/guc.c:8129 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "슈퍼유저만 ALTER SYSTEM 명령을 실행할 수 있음" -#: utils/misc/guc.c:7985 +#: utils/misc/guc.c:8214 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "" "ALTER SYSTEM 명령으로 지정하는 매개 변수 값에는 줄바꿈 문자가 없어야 합니다" -#: utils/misc/guc.c:8030 +#: utils/misc/guc.c:8259 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "\"%s\" 파일의 내용을 분석할 수 없음" -#: utils/misc/guc.c:8187 +#: utils/misc/guc.c:8416 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT 명령은 아직 구현 되지 않았습니다" -#: utils/misc/guc.c:8271 +#: utils/misc/guc.c:8500 #, c-format msgid "SET requires parameter name" msgstr "SET 명령은 매개 변수 이름이 필요합니다" -#: utils/misc/guc.c:8404 +#: utils/misc/guc.c:8633 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "\"%s\" 매개 변수를 다시 정의하려고 함" -#: utils/misc/guc.c:10198 +#: utils/misc/guc.c:10426 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "\"%s\" 매개 변수 값을 \"%s\" (으)로 바꾸는 중" -#: utils/misc/guc.c:10266 +#: utils/misc/guc.c:10494 #, c-format msgid "parameter \"%s\" could not be set" msgstr "\"%s\" 매개 변수는 설정할 수 없음" -#: utils/misc/guc.c:10356 +#: utils/misc/guc.c:10584 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "지정한 \"%s\" 매개 변수값의 구문분석을 실패했습니다." -#: utils/misc/guc.c:10714 utils/misc/guc.c:10748 +#: utils/misc/guc.c:10942 utils/misc/guc.c:10976 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "잘못된 \"%s\" 매개 변수의 값: %d" -#: utils/misc/guc.c:10782 +#: utils/misc/guc.c:11010 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "잘못된 \"%s\" 매개 변수의 값: %g" -#: utils/misc/guc.c:11052 +#: utils/misc/guc.c:11280 #, c-format msgid "" "\"temp_buffers\" cannot be changed after any temporary tables have been " @@ -27800,22 +28528,22 @@ msgstr "" "해당 세션에서 어떤 임시 테이블도 사용하고 있지 않아야 \"temp_buffers\" 설정" "을 변경할 수 있습니다." -#: utils/misc/guc.c:11064 +#: utils/misc/guc.c:11292 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour 기능을 뺀 채로 서버가 만들어졌습니다." -#: utils/misc/guc.c:11077 +#: utils/misc/guc.c:11305 #, c-format msgid "SSL is not supported by this build" msgstr "SSL 접속 기능을 뺀 채로 서버가 만들어졌습니다." -#: utils/misc/guc.c:11089 +#: utils/misc/guc.c:11317 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "\"log_statement_stats\" 값이 true 일 때는 이 값을 활성화할 수 없습니다" -#: utils/misc/guc.c:11101 +#: utils/misc/guc.c:11329 #, c-format msgid "" "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", " @@ -27824,31 +28552,43 @@ msgstr "" "\"log_parser_stats\", \"log_planner_stats\", \"log_executor_stats\" 설정값들 " "중 하나가 true 일 때는 \"log_statement_stats\" 설정을 활성화할 수 없습니다" -#: utils/misc/guc.c:11345 +#: utils/misc/guc.c:11559 #, c-format msgid "" "effective_io_concurrency must be set to 0 on platforms that lack " "posix_fadvise()." msgstr "" -#: utils/misc/guc.c:11459 +#: utils/misc/guc.c:11572 +#, c-format +msgid "" +"maintenance_io_concurrency must be set to 0 on platforms that lack " +"posix_fadvise()." +msgstr "" + +#: utils/misc/guc.c:11688 +#, c-format +msgid "invalid character" +msgstr "잘못된 문자" + +#: utils/misc/guc.c:11748 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline 값으로 잘못된 숫자입니다." -#: utils/misc/guc.c:11499 +#: utils/misc/guc.c:11788 #, c-format msgid "multiple recovery targets specified" msgstr "복구 대상을 다중 지정했음" -#: utils/misc/guc.c:11500 +#: utils/misc/guc.c:11789 #, c-format msgid "" "At most one of recovery_target, recovery_target_lsn, recovery_target_name, " "recovery_target_time, recovery_target_xid may be set." msgstr "" -#: utils/misc/guc.c:11508 +#: utils/misc/guc.c:11797 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "이 값으로는 \"immediate\" 만 허용합니다." @@ -27865,7 +28605,7 @@ msgid "" msgstr "" #: utils/misc/pg_controldata.c:60 utils/misc/pg_controldata.c:138 -#: utils/misc/pg_controldata.c:242 utils/misc/pg_controldata.c:309 +#: utils/misc/pg_controldata.c:241 utils/misc/pg_controldata.c:306 #, c-format msgid "calculated CRC checksum does not match value stored in file" msgstr "계산된 CRC 체크섬 값이 파일에 저장된 값과 다름" @@ -27889,12 +28629,12 @@ msgstr "" "테이블 소유주를 위해 정책을 비활성하려면, ALTER TABLE NO FORCE ROW LEVEL " "SECURITY 명령을 사용하세요" -#: utils/misc/timeout.c:388 +#: utils/misc/timeout.c:395 #, c-format msgid "cannot add more timeout reasons" msgstr "시간 초과로 더이상 추가할 수 없음" -#: utils/misc/tzparser.c:61 +#: utils/misc/tzparser.c:60 #, c-format msgid "" "time zone abbreviation \"%s\" is too long (maximum %d characters) in time " @@ -27903,40 +28643,40 @@ msgstr "" "\"%s\" 타임 존 이름이 너무 깁니다(최대 %d자) (\"%s\" 타임 존 파일의 %d번째 줄" "에 있음)." -#: utils/misc/tzparser.c:73 +#: utils/misc/tzparser.c:72 #, c-format msgid "time zone offset %d is out of range in time zone file \"%s\", line %d" msgstr "" "%d 타임 존 오프셋 값이 범위를 벗어났습니다(\"%s\" 타임 존 파일의 %d번째 줄에 " "있음)." -#: utils/misc/tzparser.c:112 +#: utils/misc/tzparser.c:111 #, c-format msgid "missing time zone abbreviation in time zone file \"%s\", line %d" msgstr "\"%s\" time zone 파일의 %d번째 줄에 time zone 생략형이 빠졌음" -#: utils/misc/tzparser.c:121 +#: utils/misc/tzparser.c:120 #, c-format msgid "missing time zone offset in time zone file \"%s\", line %d" msgstr "\"%s\" time zone 파일의 %d번째 줄에 time zone 옵셋이 빠졌음" -#: utils/misc/tzparser.c:133 +#: utils/misc/tzparser.c:132 #, c-format msgid "invalid number for time zone offset in time zone file \"%s\", line %d" msgstr "" "\"%s\" 표준 시간대 파일의 %d번째 줄에서 표준 시간대 오프셋 숫자가 잘못됨" -#: utils/misc/tzparser.c:169 +#: utils/misc/tzparser.c:168 #, c-format msgid "invalid syntax in time zone file \"%s\", line %d" msgstr "\"%s\" time zone 파일의 %d번째 줄에 구문 오류" -#: utils/misc/tzparser.c:237 +#: utils/misc/tzparser.c:236 #, c-format msgid "time zone abbreviation \"%s\" is multiply defined" msgstr "표준 시간대 약어 \"%s\"은(는) 배수로 정의됨" -#: utils/misc/tzparser.c:239 +#: utils/misc/tzparser.c:238 #, c-format msgid "" "Entry in time zone file \"%s\", line %d, conflicts with entry in file \"%s" @@ -27945,32 +28685,32 @@ msgstr "" "\"%s\" 타임 존 파일의 %d번째 줄에 있는 항목이 \"%s\" 파일의 %d번째 줄에 있는 " "항목과 충돌합니다." -#: utils/misc/tzparser.c:301 +#: utils/misc/tzparser.c:300 #, c-format msgid "invalid time zone file name \"%s\"" msgstr "잘못된 time zone 파일 이름: \"%s\"" -#: utils/misc/tzparser.c:314 +#: utils/misc/tzparser.c:313 #, c-format msgid "time zone file recursion limit exceeded in file \"%s\"" msgstr "\"%s\" 파일에서 time zone 파일 재귀호출 최대치를 초과했음" -#: utils/misc/tzparser.c:353 utils/misc/tzparser.c:366 +#: utils/misc/tzparser.c:352 utils/misc/tzparser.c:365 #, c-format msgid "could not read time zone file \"%s\": %m" msgstr "\"%s\" time zone 파일을 읽을 수 없음: %m" -#: utils/misc/tzparser.c:376 +#: utils/misc/tzparser.c:375 #, c-format msgid "line is too long in time zone file \"%s\", line %d" msgstr "\"%s\" 표준 시간대 파일의 %d번째 줄이 너무 깁니다." -#: utils/misc/tzparser.c:399 +#: utils/misc/tzparser.c:398 #, c-format msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "\"%s\" 표준 시간대 파일의 %d번째 줄에 파일 이름이 없는 @INCLUDE가 있음" -#: utils/mmgr/aset.c:485 utils/mmgr/generation.c:250 utils/mmgr/slab.c:252 +#: utils/mmgr/aset.c:476 utils/mmgr/generation.c:234 utils/mmgr/slab.c:236 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "\"%s\" 메모리 컨텍스트를 만드는 동안 오류가 발생했습니다." @@ -27980,10 +28720,10 @@ msgstr "\"%s\" 메모리 컨텍스트를 만드는 동안 오류가 발생했습 msgid "could not attach to dynamic shared area" msgstr "동적 공유 메모리 영역을 할당할 수 없음" -#: utils/mmgr/mcxt.c:797 utils/mmgr/mcxt.c:833 utils/mmgr/mcxt.c:871 -#: utils/mmgr/mcxt.c:909 utils/mmgr/mcxt.c:945 utils/mmgr/mcxt.c:976 -#: utils/mmgr/mcxt.c:1012 utils/mmgr/mcxt.c:1064 utils/mmgr/mcxt.c:1099 -#: utils/mmgr/mcxt.c:1134 +#: utils/mmgr/mcxt.c:822 utils/mmgr/mcxt.c:858 utils/mmgr/mcxt.c:896 +#: utils/mmgr/mcxt.c:934 utils/mmgr/mcxt.c:970 utils/mmgr/mcxt.c:1001 +#: utils/mmgr/mcxt.c:1037 utils/mmgr/mcxt.c:1089 utils/mmgr/mcxt.c:1124 +#: utils/mmgr/mcxt.c:1159 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "크기가 %zu인 요청에서 오류가 발생했습니다. 해당 메모리 컨텍스트 \"%s\"" @@ -27998,72 +28738,83 @@ msgstr "\"%s\" 이름의 커서가 이미 있음" msgid "closing existing cursor \"%s\"" msgstr "이미 있는 \"%s\" 커서를 닫습니다" -#: utils/mmgr/portalmem.c:398 +#: utils/mmgr/portalmem.c:400 #, c-format msgid "portal \"%s\" cannot be run" msgstr "\"%s\" portal 실행할 수 없음" -#: utils/mmgr/portalmem.c:476 +#: utils/mmgr/portalmem.c:478 #, c-format msgid "cannot drop pinned portal \"%s\"" msgstr "\"%s\" 선점된 포털을 삭제할 수 없음" -#: utils/mmgr/portalmem.c:484 +#: utils/mmgr/portalmem.c:486 #, c-format msgid "cannot drop active portal \"%s\"" msgstr "\"%s\" 활성 포털을 삭제할 수 없음" -#: utils/mmgr/portalmem.c:729 +#: utils/mmgr/portalmem.c:731 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "WITH HOLD 옵션으로 커서를 만든 트랜잭션을 PREPARE할 수 없음" -#: utils/mmgr/portalmem.c:1269 +#: utils/mmgr/portalmem.c:1270 #, c-format msgid "" "cannot perform transaction commands inside a cursor loop that is not read-" "only" msgstr "" -#: utils/sort/logtape.c:276 +#: utils/sort/logtape.c:266 utils/sort/logtape.c:289 #, c-format -msgid "could not read block %ld of temporary file: %m" -msgstr "임시 파일의 %ld 블럭을 읽을 수 없음: %m" +msgid "could not seek to block %ld of temporary file" +msgstr "임시 파일의 %ld 블럭을 찾을 수 없음" -#: utils/sort/sharedtuplestore.c:208 +#: utils/sort/logtape.c:295 #, c-format -msgid "could not write to temporary file: %m" -msgstr "임시 파일에 쓸 수 없습니다: %m" +msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" +msgstr "%ld 블럭을 임시 파일에서 읽을 수 없음: %zu / %zu 바이트만 읽음" -#: utils/sort/sharedtuplestore.c:437 utils/sort/sharedtuplestore.c:446 -#: utils/sort/sharedtuplestore.c:469 utils/sort/sharedtuplestore.c:486 -#: utils/sort/sharedtuplestore.c:503 utils/sort/sharedtuplestore.c:575 -#: utils/sort/sharedtuplestore.c:581 +#: utils/sort/sharedtuplestore.c:430 utils/sort/sharedtuplestore.c:439 +#: utils/sort/sharedtuplestore.c:462 utils/sort/sharedtuplestore.c:479 +#: utils/sort/sharedtuplestore.c:496 #, c-format msgid "could not read from shared tuplestore temporary file" msgstr "tuplestore 임시 파일을 읽을 수 없음" -#: utils/sort/sharedtuplestore.c:492 +#: utils/sort/sharedtuplestore.c:485 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "공유된 tuplestore 임시 파일에서 예상치 못한 청크" -#: utils/sort/tuplesort.c:2967 +#: utils/sort/sharedtuplestore.c:569 +#, c-format +msgid "could not seek to block %u in shared tuplestore temporary file" +msgstr "공유 tuplestore 임시 파일에서 %u 블록을 찾을 수 없음" + +#: utils/sort/sharedtuplestore.c:576 +#, c-format +msgid "" +"could not read from shared tuplestore temporary file: read only %zu of %zu " +"bytes" +msgstr "공유 tuplestore 임시 파일을 읽을 수 없음: %zu / %zu 바이트만 읽음" + +#: utils/sort/tuplesort.c:3140 #, c-format msgid "cannot have more than %d runs for an external sort" msgstr "외부 정렬을 위해 %d 개 이상의 런을 만들 수 없음" -#: utils/sort/tuplesort.c:4051 +#: utils/sort/tuplesort.c:4221 #, c-format msgid "could not create unique index \"%s\"" msgstr "\"%s\" 고유 인덱스를 만들 수 없음" -#: utils/sort/tuplesort.c:4053 +#: utils/sort/tuplesort.c:4223 #, c-format msgid "Key %s is duplicated." msgstr "%s 키가 중복됨" -#: utils/sort/tuplesort.c:4054 +#: utils/sort/tuplesort.c:4224 #, c-format msgid "Duplicate keys exist." msgstr "중복된 키가 있음" @@ -28074,20 +28825,15 @@ msgstr "중복된 키가 있음" #: utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 #: utils/sort/tuplestore.c:1330 #, c-format -msgid "could not seek in tuplestore temporary file: %m" -msgstr "tuplestore 파일에서 seek 작업을 할 수 없음: %m" - -#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1550 -#: utils/sort/tuplestore.c:1556 -#, c-format -msgid "could not read from tuplestore temporary file: %m" -msgstr "tuplestore 임시 파일을 읽을 수 없음: %m" +msgid "could not seek in tuplestore temporary file" +msgstr "tuplestore 임시 파일에서 seek 작업을 할 수 없음" -#: utils/sort/tuplestore.c:1518 utils/sort/tuplestore.c:1523 -#: utils/sort/tuplestore.c:1529 +#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1540 +#: utils/sort/tuplestore.c:1548 #, c-format -msgid "could not write to tuplestore temporary file: %m" -msgstr "tuplestore 임시 파일을 쓸 수 없습니다: %m" +msgid "" +"could not read from tuplestore temporary file: read only %zu of %zu bytes" +msgstr "tuplestore 임시 파일을 읽을 수 없음: %zu / %zu 바이트만 읽음" #: utils/time/snapmgr.c:624 #, c-format @@ -28150,458 +28896,473 @@ msgstr "" msgid "cannot import a snapshot from a different database" msgstr "서로 다른 데이터베이스를 대상으로는 스냅샷을 가져올 수 없음" -#: gram.y:1030 +#: gram.y:1047 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "UNENCRYPTED PASSWORD 옵션은 더이상 지원하지 않음" -#: gram.y:1031 +#: gram.y:1048 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "" -#: gram.y:1093 +#: gram.y:1110 #, c-format msgid "unrecognized role option \"%s\"" msgstr "인식할 수 없는 롤 옵션 \"%s\"" -#: gram.y:1340 gram.y:1355 +#: gram.y:1357 gram.y:1372 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "" "CREATE SCHEMA IF NOT EXISTS 구문에서는 스키마 요소들을 포함할 수 없습니다." -#: gram.y:1501 +#: gram.y:1518 #, c-format msgid "current database cannot be changed" msgstr "현재 데이터베이스를 바꿀 수 없음" -#: gram.y:1625 +#: gram.y:1642 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "" "지역시간대 간격(time zone interval) 값은 시(HOUR) 또는 시분(HOUR TO MINUTE) " "값이어야합니다" -#: gram.y:2143 +#: gram.y:2177 #, c-format msgid "column number must be in range from 1 to %d" msgstr "칼럼 번호는 1 - %d 사이의 범위에 있어야 합니다." -#: gram.y:2675 +#: gram.y:2709 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "\"%s\" 시퀀스 옵션은 지원되지 않음" -#: gram.y:2704 +#: gram.y:2738 #, c-format msgid "modulus for hash partition provided more than once" msgstr "해시 파티션용 모듈을 한 번 이상 지정했습니다" -#: gram.y:2713 +#: gram.y:2747 #, c-format msgid "remainder for hash partition provided more than once" msgstr "해시 파티션용 나머지 처리기를 한 번 이상 지정했습니다" -#: gram.y:2720 +#: gram.y:2754 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "잘못된 해시 파티션 범위 명세 \"%s\"" -#: gram.y:2728 +#: gram.y:2762 #, c-format msgid "modulus for hash partition must be specified" msgstr "해시 파티션용 모듈을 지정하세요" -#: gram.y:2732 +#: gram.y:2766 #, c-format msgid "remainder for hash partition must be specified" msgstr "해시 파티션용 나머지 처리기를 지정하세요" -#: gram.y:2933 gram.y:2966 +#: gram.y:2967 gram.y:3000 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "PROGRAM 옵션과 STDIN/STDOUT 옵션은 함께 쓸 수 없습니다" -#: gram.y:2939 +#: gram.y:2973 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "WHERE 절은 COPY TO 구문을 허용하지 않음" -#: gram.y:3271 gram.y:3278 gram.y:11480 gram.y:11488 +#: gram.y:3305 gram.y:3312 gram.y:11647 gram.y:11655 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "GLOBAL 예약어는 임시 테이블 만들기에서 더 이상 사용하지 않습니다" -#: gram.y:3518 +#: gram.y:3552 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "" -#: gram.y:5274 +#: gram.y:4512 +#, c-format +msgid "CREATE EXTENSION ... FROM is no longer supported" +msgstr "CREATE EXTENSION ... FROM 구문은 지원하지 않습니다." + +#: gram.y:5338 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "인식할 수 없는 로우 단위 보안 옵션 \"%s\"" -#: gram.y:5275 +#: gram.y:5339 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "" -#: gram.y:5388 +#: gram.y:5452 msgid "duplicate trigger events specified" msgstr "중복 트리거 이벤트가 지정됨" -#: gram.y:5536 +#: gram.y:5600 #, c-format msgid "conflicting constraint properties" msgstr "제약조건 속성이 충돌함" -#: gram.y:5632 +#: gram.y:5696 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION 명령은 아직 구현 되지 않았습니다" -#: gram.y:6015 +#: gram.y:6079 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK는 더 이상 필요하지 않음" -#: gram.y:6016 +#: gram.y:6080 #, c-format msgid "Update your data type." msgstr "자료형을 업데이트하십시오." -#: gram.y:7753 +#: gram.y:7831 #, c-format msgid "aggregates cannot have output arguments" msgstr "집계 함수는 output 인자를 지정할 수 없음" -#: gram.y:10025 gram.y:10043 +#: gram.y:10153 gram.y:10171 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION 구문은 재귀적인 뷰에서 지원하지 않습니다" -#: gram.y:11588 +#: gram.y:11779 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "LIMIT #,# 구문은 지원하지 않습니다." -#: gram.y:11589 +#: gram.y:11780 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "LIMIT # OFFSET # 구문을 사용하세요." -#: gram.y:11887 gram.y:11912 +#: gram.y:12106 gram.y:12131 #, c-format msgid "VALUES in FROM must have an alias" msgstr "FROM 안의 VALUES는 반드시 alias가 있어야합니다" -#: gram.y:11888 gram.y:11913 +#: gram.y:12107 gram.y:12132 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "예, FROM (VALUES ...) [AS] foo." -#: gram.y:11893 gram.y:11918 +#: gram.y:12112 gram.y:12137 #, c-format msgid "subquery in FROM must have an alias" msgstr "FROM 절 내의 subquery 에는 반드시 alias 를 가져야만 합니다" -#: gram.y:11894 gram.y:11919 +#: gram.y:12113 gram.y:12138 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "예, FROM (SELECT ...) [AS] foo." -#: gram.y:12372 +#: gram.y:12591 #, c-format msgid "only one DEFAULT value is allowed" msgstr "" -#: gram.y:12381 +#: gram.y:12600 #, c-format msgid "only one PATH value per column is allowed" msgstr "" -#: gram.y:12390 +#: gram.y:12609 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "NULL/NOT NULL 선언이 서로 충돌합니다 : \"%s\" 칼럼" -#: gram.y:12399 +#: gram.y:12618 #, c-format msgid "unrecognized column option \"%s\"" msgstr "인식할 수 없는 칼럼 옵션 \"%s\"" -#: gram.y:12653 +#: gram.y:12872 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "실수형 자료의 정밀도 값으로는 적어도 1 bit 이상을 지정해야합니다." -#: gram.y:12662 +#: gram.y:12881 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "실수형 자료의 정밀도 값으로 최대 54 bit 까지입니다." -#: gram.y:13153 +#: gram.y:13372 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "OVERLAPS 식의 왼쪽에 있는 매개 변수 수가 잘못됨" -#: gram.y:13158 +#: gram.y:13377 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "OVERLAPS 식의 오른쪽에 있는 매개 변수 수가 잘못됨" -#: gram.y:13333 +#: gram.y:13552 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "UNIQUE 술어는 아직 구현되지 못했습니다" -#: gram.y:13680 +#: gram.y:13915 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "WITHIN GROUP 구문 안에서 중복된 ORDER BY 구문은 허용하지 않습니다" -#: gram.y:13685 +#: gram.y:13920 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "DISTINCT과 WITHIN GROUP을 함께 쓸 수 없습니다" -#: gram.y:13690 +#: gram.y:13925 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "VARIADIC과 WITHIN GROUP을 함께 쓸 수 없습니다" -#: gram.y:14148 gram.y:14171 +#: gram.y:14391 gram.y:14414 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "프레임 시작은 UNBOUNDED FOLLOWING일 수 없음" -#: gram.y:14153 +#: gram.y:14396 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "따라오는 로우의 프레임 시작은 현재 로우의 끝일 수 없습니다" -#: gram.y:14176 +#: gram.y:14419 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "프레임 끝은 UNBOUNDED PRECEDING일 수 없음" -#: gram.y:14182 +#: gram.y:14425 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "현재 로우의 프레임 시작은 선행하는 로우를 가질 수 없습니다" -#: gram.y:14189 +#: gram.y:14432 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "따라오는 로우의 프레임 시작은 선행하는 로우를 가질 수 없습니다" -#: gram.y:14832 +#: gram.y:15082 #, c-format msgid "type modifier cannot have parameter name" msgstr "자료형 한정자는 매개 변수 이름을 사용할 수 없음" -#: gram.y:14838 +#: gram.y:15088 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "자료형 한정자는 ORDER BY 구문을 사용할 수 없음" -#: gram.y:14903 gram.y:14910 +#: gram.y:15153 gram.y:15160 #, c-format msgid "%s cannot be used as a role name here" msgstr "%s 이름은 여기서 롤 이름으로 사용할 수 없음" -#: gram.y:15583 gram.y:15772 +#: gram.y:15841 gram.y:16030 msgid "improper use of \"*\"" msgstr "\"*\" 사용이 잘못됨" -#: gram.y:15836 +#: gram.y:16094 #, c-format msgid "" "an ordered-set aggregate with a VARIADIC direct argument must have one " "VARIADIC aggregated argument of the same data type" msgstr "" -#: gram.y:15873 +#: gram.y:16131 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "중복된 ORDER BY 구문은 허용하지 않습니다" -#: gram.y:15884 +#: gram.y:16142 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "중복된 OFFSET 구문은 허용하지 않습니다" -#: gram.y:15893 +#: gram.y:16151 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "중복된 LIMIT 구문은 허용하지 않습니다" -#: gram.y:15902 +#: gram.y:16160 +#, c-format +msgid "multiple limit options not allowed" +msgstr "중복된 limit 옵션은 허용하지 않음" + +#: gram.y:16164 +#, c-format +msgid "WITH TIES cannot be specified without ORDER BY clause" +msgstr "" + +#: gram.y:16172 #, c-format msgid "multiple WITH clauses not allowed" msgstr "중복된 WITH 절은 허용하지 않음" -#: gram.y:16106 +#: gram.y:16376 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "OUT 및 INOUT 인자는 TABLE 함수에 사용할 수 없음" -#: gram.y:16207 +#: gram.y:16472 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "중복된 COLLATE 구문은 허용하지 않습니다" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16245 gram.y:16258 +#: gram.y:16510 gram.y:16523 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "%s 제약조건에는 DEFERRABLE 옵션을 쓸 수 없음" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16271 +#: gram.y:16536 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "%s 제약조건에는 NOT VALID 옵션을 쓸 수 없음" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16284 +#: gram.y:16549 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "%s 제약조건에는 NO INHERIT 옵션을 쓸 수 없음" -#: guc-file.l:316 +#: guc-file.l:315 #, c-format msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %u" msgstr "알 수 없는 환경 매개 변수 이름: \"%s\", 해당 파일: \"%s\", 줄번호: %u" -#: guc-file.l:389 +#: guc-file.l:388 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "환경설정 파일에 \"%s\" 매개 변수가 빠졌음, 초기값을 사용함" -#: guc-file.l:455 +#: guc-file.l:454 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "\"%s\" 매개 변수 값을 \"%s\"(으)로 바꿨음" -#: guc-file.l:497 +#: guc-file.l:496 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "\"%s\" 환경 설정파일에 오류가 있음" -#: guc-file.l:502 +#: guc-file.l:501 #, c-format msgid "" "configuration file \"%s\" contains errors; unaffected changes were applied" msgstr "\"%s\" 환경 설정 파일에 오류가 있어 새로 변경될 설정이 없습니다" -#: guc-file.l:507 +#: guc-file.l:506 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "\"%s\" 환경 설정 파일에 오류가 있어 아무 설정도 반영되지 않았습니다." -#: guc-file.l:579 +#: guc-file.l:578 #, c-format msgid "empty configuration file name: \"%s\"" msgstr "비어있는 환경 설정 파일 이름: \"%s\"" -#: guc-file.l:596 +#: guc-file.l:595 #, c-format msgid "" "could not open configuration file \"%s\": maximum nesting depth exceeded" msgstr "설정 파일 \"%s\"을 열 수 없습니다: 최대 디렉터리 깊이를 초과했음" -#: guc-file.l:616 +#: guc-file.l:615 #, c-format msgid "configuration file recursion in \"%s\"" msgstr "\"%s\" 안에 환경 설정파일이 서로 참조함" -#: guc-file.l:643 +#: guc-file.l:642 #, c-format msgid "skipping missing configuration file \"%s\"" msgstr "\"%s\" 환경 설정파일이 없으나 건너뜀" -#: guc-file.l:897 +#: guc-file.l:896 #, c-format msgid "syntax error in file \"%s\" line %u, near end of line" msgstr "\"%s\" 파일 %u 줄 끝부분에서 구문 오류 있음" -#: guc-file.l:907 +#: guc-file.l:906 #, c-format msgid "syntax error in file \"%s\" line %u, near token \"%s\"" msgstr "\"%s\" 파일 %u 줄에서 구문 오류 있음, \"%s\" 토큰 부근" -#: guc-file.l:927 +#: guc-file.l:926 #, c-format msgid "too many syntax errors found, abandoning file \"%s\"" msgstr "구문 오류가 너무 많습니다. \"%s\" 파일을 무시합니다" -#: guc-file.l:982 +#: guc-file.l:981 #, c-format msgid "empty configuration directory name: \"%s\"" msgstr "비어 있는 환경 설정 디렉터리 이름: \"%s\"" -#: guc-file.l:1001 +#: guc-file.l:1000 #, c-format msgid "could not open configuration directory \"%s\": %m" msgstr "\"%s\" 환경 설정 디렉터리를 열 수 없습니다: %m" -#: jsonpath_gram.y:515 +#: jsonpath_gram.y:529 #, c-format msgid "unrecognized flag character \"%c\" in LIKE_REGEX predicate" msgstr "LIKE_REGEX 한정자 안에, 알 수 없는 플래그 문자: \"%c\"" -#: jsonpath_gram.y:569 +#: jsonpath_gram.y:583 #, c-format msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" msgstr "" #. translator: %s is typically "syntax error" -#: jsonpath_scan.l:283 +#: jsonpath_scan.l:286 #, c-format msgid "%s at end of jsonpath input" msgstr "%s, jsonpath 입력 끝부분" #. translator: first %s is typically "syntax error" -#: jsonpath_scan.l:290 +#: jsonpath_scan.l:293 #, c-format msgid "%s at or near \"%s\" of jsonpath input" msgstr "%s, jsonpath 입력 \"%s\" 부근" -#: repl_gram.y:336 repl_gram.y:368 +#: repl_gram.y:349 repl_gram.y:381 #, c-format msgid "invalid timeline %u" msgstr "잘못된 타임라인: %u" -#: repl_scanner.l:129 +#: repl_scanner.l:131 msgid "invalid streaming start location" msgstr "잘못된 스트리밍 시작 위치" -#: repl_scanner.l:180 scan.l:703 +#: repl_scanner.l:182 scan.l:717 msgid "unterminated quoted string" msgstr "마무리 안된 따옴표 안의 문자열" # # advance 끝 -#: scan.l:463 +#: scan.l:458 msgid "unterminated /* comment" msgstr "마무리 안된 /* 주석" -#: scan.l:494 +#: scan.l:478 msgid "unterminated bit string literal" msgstr "마무리 안된 비트 문자열 문자" -#: scan.l:515 +#: scan.l:492 msgid "unterminated hexadecimal string literal" msgstr "마무리 안된 16진수 문자열 문자" -#: scan.l:565 +#: scan.l:542 #, c-format msgid "unsafe use of string constant with Unicode escapes" msgstr "유니코드 이스케이프와 함께 문자열 상수를 사용하는 것은 안전하지 않음" -#: scan.l:566 +#: scan.l:543 #, c-format msgid "" "String constants with Unicode escapes cannot be used when " @@ -28610,31 +29371,21 @@ msgstr "" "standard_conforming_strings = off 인 경우 문자열 상수 표기에서 유니코드 이스" "케이프를 사용할 수 없습니다." -#: scan.l:612 scan.l:811 -msgid "invalid Unicode escape character" -msgstr "잘못된 유니코드 이스케이프 문자" - -#: scan.l:638 scan.l:646 scan.l:654 scan.l:655 scan.l:656 scan.l:1400 -#: scan.l:1427 scan.l:1431 scan.l:1469 scan.l:1473 scan.l:1495 scan.l:1505 -msgid "invalid Unicode surrogate pair" -msgstr "잘못된 유니코드 대리 쌍" - -#: scan.l:660 -#, c-format -msgid "invalid Unicode escape" -msgstr "잘못된 유니코드 이스케이프 값" +#: scan.l:604 +msgid "unhandled previous state in xqs" +msgstr "" -#: scan.l:661 +#: scan.l:678 #, c-format msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." msgstr "유니코드 이스케이프는 \\uXXXX 또는 \\UXXXXXXXX 형태여야 합니다." -#: scan.l:672 +#: scan.l:689 #, c-format msgid "unsafe use of \\' in a string literal" msgstr "문자열 안에 \\' 사용이 안전하지 않습니다" -#: scan.l:673 +#: scan.l:690 #, c-format msgid "" "Use '' to write quotes in strings. \\' is insecure in client-only encodings." @@ -28642,77 +29393,62 @@ msgstr "" "작은 따옴표는 '' 형태로 사용하십시오. \\' 표기법은 클라이언트 전용 인코딩에" "서 안전하지 않습니다." -#: scan.l:748 +#: scan.l:762 msgid "unterminated dollar-quoted string" msgstr "마무리 안된 달러-따옴표 안의 문자열" -#: scan.l:765 scan.l:791 scan.l:806 +#: scan.l:779 scan.l:789 msgid "zero-length delimited identifier" msgstr "길이가 0인 구분 식별자" -#: scan.l:826 syncrep_scanner.l:91 +#: scan.l:800 syncrep_scanner.l:91 msgid "unterminated quoted identifier" msgstr "마무리 안된 따옴표 안의 식별자" # # nonun 부분 begin -#: scan.l:989 +#: scan.l:963 msgid "operator too long" msgstr "연산자가 너무 깁니다." #. translator: %s is typically the translation of "syntax error" -#: scan.l:1141 +#: scan.l:1171 #, c-format msgid "%s at end of input" msgstr "%s, 입력 끝부분" #. translator: first %s is typically the translation of "syntax error" -#: scan.l:1149 +#: scan.l:1179 #, c-format msgid "%s at or near \"%s\"" msgstr "%s, \"%s\" 부근" -#: scan.l:1314 scan.l:1346 -msgid "" -"Unicode escape values cannot be used for code point values above 007F when " -"the server encoding is not UTF8" -msgstr "" -"서버 인코딩이 UTF8이 아닌 경우 007F보다 큰 코드 지점 값에는 유니코드 이스케이" -"프 값을 사용할 수 없음" - -#: scan.l:1342 scan.l:1487 -msgid "invalid Unicode escape value" -msgstr "잘못된 유니코드 이스케이프 값" - -#: scan.l:1551 +#: scan.l:1373 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "문자열 안에 있는 \\' 문자는 표준이 아닙니다" -#: scan.l:1552 +#: scan.l:1374 #, c-format msgid "" "Use '' to write quotes in strings, or use the escape string syntax (E'...')." msgstr "작은 따옴표는 '' 형태니, 인용부호 표기법(E'...') 형태로 사용하십시오." -#: scan.l:1561 +#: scan.l:1383 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "문자열 안에 있는 \\\\ 문자는 표준이 아닙니다" -#: scan.l:1562 +#: scan.l:1384 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "백슬래시 표기는 인용부호 표기법으로 사용하세요, 예, E'\\\\'." -#: scan.l:1576 +#: scan.l:1398 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "문자열 안에 비표준 escape 문자를 사용하고 있습니다" -#: scan.l:1577 +#: scan.l:1399 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "인용부호 표기법을 사용하세요, 예, E'\\r\\n'." - -#~ msgid "replication origin %d is already active for PID %d" -#~ msgstr "%d번 복제 오리진이 %d PID에서 사용하고 있습니다." diff --git a/src/backend/po/ru.po b/src/backend/po/ru.po index 1b7d2b945f59d..700e66ba57add 100644 --- a/src/backend/po/ru.po +++ b/src/backend/po/ru.po @@ -4,13 +4,13 @@ # Serguei A. Mokhov , 2001-2005. # Oleg Bartunov , 2004-2005. # Dmitriy Olshevskiy , 2014. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021. msgid "" msgstr "" "Project-Id-Version: postgres (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-05 11:03+0300\n" -"PO-Revision-Date: 2020-02-06 07:28+0300\n" +"POT-Creation-Date: 2021-02-08 07:28+0300\n" +"PO-Revision-Date: 2021-02-08 08:35+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -20,45 +20,45 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../common/config_info.c:130 ../common/config_info.c:138 -#: ../common/config_info.c:146 ../common/config_info.c:154 -#: ../common/config_info.c:162 ../common/config_info.c:170 -#: ../common/config_info.c:178 ../common/config_info.c:186 -#: ../common/config_info.c:194 +#: ../common/config_info.c:134 ../common/config_info.c:142 +#: ../common/config_info.c:150 ../common/config_info.c:158 +#: ../common/config_info.c:166 ../common/config_info.c:174 +#: ../common/config_info.c:182 ../common/config_info.c:190 msgid "not recorded" msgstr "не записано" #: ../common/controldata_utils.c:68 ../common/controldata_utils.c:73 -#: commands/copy.c:3549 commands/extension.c:3341 utils/adt/genfile.c:153 +#: commands/copy.c:3495 commands/extension.c:3436 utils/adt/genfile.c:125 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "не удалось открыть файл \"%s\" для чтения: %m" #: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 -#: access/transam/timeline.c:347 access/transam/twophase.c:1293 -#: access/transam/xlog.c:3455 access/transam/xlog.c:4602 -#: access/transam/xlog.c:10808 access/transam/xlog.c:10821 -#: access/transam/xlog.c:11246 access/transam/xlog.c:11326 -#: access/transam/xlog.c:11365 access/transam/xlog.c:11408 -#: access/transam/xlogfuncs.c:663 access/transam/xlogfuncs.c:682 -#: commands/extension.c:3351 libpq/hba.c:499 replication/logical/origin.c:718 -#: replication/logical/origin.c:754 replication/logical/reorderbuffer.c:3335 -#: replication/logical/snapbuild.c:1746 replication/logical/snapbuild.c:1788 -#: replication/logical/snapbuild.c:1816 replication/logical/snapbuild.c:1843 -#: replication/slot.c:1427 replication/slot.c:1468 replication/walsender.c:513 -#: storage/file/copydir.c:195 utils/adt/genfile.c:170 utils/adt/misc.c:753 -#: utils/cache/relmapper.c:741 +#: access/transam/timeline.c:143 access/transam/timeline.c:362 +#: access/transam/twophase.c:1276 access/transam/xlog.c:3503 +#: access/transam/xlog.c:4728 access/transam/xlog.c:11101 +#: access/transam/xlog.c:11114 access/transam/xlog.c:11567 +#: access/transam/xlog.c:11647 access/transam/xlog.c:11686 +#: access/transam/xlog.c:11729 access/transam/xlogfuncs.c:662 +#: access/transam/xlogfuncs.c:681 commands/extension.c:3446 libpq/hba.c:499 +#: replication/logical/origin.c:717 replication/logical/origin.c:753 +#: replication/logical/reorderbuffer.c:3599 +#: replication/logical/snapbuild.c:1744 replication/logical/snapbuild.c:1786 +#: replication/logical/snapbuild.c:1814 replication/logical/snapbuild.c:1841 +#: replication/slot.c:1622 replication/slot.c:1663 replication/walsender.c:547 +#: storage/file/buffile.c:441 storage/file/copydir.c:195 +#: utils/adt/genfile.c:200 utils/adt/misc.c:763 utils/cache/relmapper.c:741 #, c-format msgid "could not read file \"%s\": %m" msgstr "не удалось прочитать файл \"%s\": %m" #: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 -#: access/transam/twophase.c:1296 access/transam/xlog.c:3460 -#: access/transam/xlog.c:4607 replication/logical/origin.c:723 -#: replication/logical/origin.c:762 replication/logical/snapbuild.c:1751 -#: replication/logical/snapbuild.c:1793 replication/logical/snapbuild.c:1821 -#: replication/logical/snapbuild.c:1848 replication/slot.c:1431 -#: replication/slot.c:1472 replication/walsender.c:518 +#: access/transam/twophase.c:1279 access/transam/xlog.c:3508 +#: access/transam/xlog.c:4733 replication/logical/origin.c:722 +#: replication/logical/origin.c:761 replication/logical/snapbuild.c:1749 +#: replication/logical/snapbuild.c:1791 replication/logical/snapbuild.c:1819 +#: replication/logical/snapbuild.c:1846 replication/slot.c:1626 +#: replication/slot.c:1667 replication/walsender.c:552 #: utils/cache/relmapper.c:745 #, c-format msgid "could not read file \"%s\": read %d of %zu" @@ -66,20 +66,20 @@ msgstr "не удалось прочитать файл \"%s\" (прочитан #: ../common/controldata_utils.c:112 ../common/controldata_utils.c:117 #: ../common/controldata_utils.c:256 ../common/controldata_utils.c:259 -#: access/heap/rewriteheap.c:1208 access/heap/rewriteheap.c:1311 -#: access/transam/timeline.c:377 access/transam/timeline.c:421 -#: access/transam/timeline.c:499 access/transam/twophase.c:1305 -#: access/transam/twophase.c:1728 access/transam/xlog.c:3327 -#: access/transam/xlog.c:3495 access/transam/xlog.c:3500 -#: access/transam/xlog.c:3797 access/transam/xlog.c:4572 -#: access/transam/xlog.c:5532 access/transam/xlogfuncs.c:688 -#: commands/copy.c:1814 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:535 -#: replication/logical/origin.c:656 replication/logical/origin.c:795 -#: replication/logical/reorderbuffer.c:3393 -#: replication/logical/snapbuild.c:1658 replication/logical/snapbuild.c:1856 -#: replication/slot.c:1322 replication/slot.c:1479 replication/walsender.c:528 -#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:654 -#: storage/file/fd.c:3308 storage/file/fd.c:3411 utils/cache/relmapper.c:753 +#: access/heap/rewriteheap.c:1181 access/heap/rewriteheap.c:1284 +#: access/transam/timeline.c:392 access/transam/timeline.c:438 +#: access/transam/timeline.c:516 access/transam/twophase.c:1288 +#: access/transam/twophase.c:1676 access/transam/xlog.c:3375 +#: access/transam/xlog.c:3543 access/transam/xlog.c:3548 +#: access/transam/xlog.c:3876 access/transam/xlog.c:4698 +#: access/transam/xlog.c:5622 access/transam/xlogfuncs.c:687 +#: commands/copy.c:1810 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 +#: replication/logical/origin.c:655 replication/logical/origin.c:794 +#: replication/logical/reorderbuffer.c:3657 +#: replication/logical/snapbuild.c:1653 replication/logical/snapbuild.c:1854 +#: replication/slot.c:1513 replication/slot.c:1674 replication/walsender.c:562 +#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:704 +#: storage/file/fd.c:3425 storage/file/fd.c:3528 utils/cache/relmapper.c:753 #: utils/cache/relmapper.c:892 #, c-format msgid "could not close file \"%s\": %m" @@ -104,188 +104,275 @@ msgstr "" "установленный PostgreSQL будет несовместим с этим каталогом данных." #: ../common/controldata_utils.c:197 ../common/controldata_utils.c:203 -#: ../common/file_utils.c:226 ../common/file_utils.c:285 -#: ../common/file_utils.c:359 access/heap/rewriteheap.c:1294 -#: access/transam/timeline.c:111 access/transam/timeline.c:236 -#: access/transam/timeline.c:333 access/transam/twophase.c:1249 -#: access/transam/xlog.c:3229 access/transam/xlog.c:3369 -#: access/transam/xlog.c:3410 access/transam/xlog.c:3608 -#: access/transam/xlog.c:3693 access/transam/xlog.c:3771 -#: access/transam/xlog.c:4592 access/transam/xlogutils.c:708 -#: postmaster/syslogger.c:1489 replication/basebackup.c:529 -#: replication/basebackup.c:1408 replication/logical/origin.c:708 -#: replication/logical/reorderbuffer.c:2311 -#: replication/logical/reorderbuffer.c:2593 -#: replication/logical/reorderbuffer.c:3315 -#: replication/logical/snapbuild.c:1613 replication/logical/snapbuild.c:1717 -#: replication/slot.c:1399 replication/walsender.c:486 -#: replication/walsender.c:2450 storage/file/copydir.c:161 -#: storage/file/fd.c:629 storage/file/fd.c:3295 storage/file/fd.c:3382 -#: storage/smgr/md.c:462 utils/cache/relmapper.c:724 -#: utils/cache/relmapper.c:836 utils/error/elog.c:1861 -#: utils/init/miscinit.c:1269 utils/init/miscinit.c:1404 -#: utils/init/miscinit.c:1481 utils/misc/guc.c:8027 utils/misc/guc.c:8059 +#: ../common/file_utils.c:224 ../common/file_utils.c:283 +#: ../common/file_utils.c:357 access/heap/rewriteheap.c:1267 +#: access/transam/timeline.c:111 access/transam/timeline.c:251 +#: access/transam/timeline.c:348 access/transam/twophase.c:1232 +#: access/transam/xlog.c:3277 access/transam/xlog.c:3417 +#: access/transam/xlog.c:3458 access/transam/xlog.c:3656 +#: access/transam/xlog.c:3741 access/transam/xlog.c:3844 +#: access/transam/xlog.c:4718 access/transam/xlogutils.c:807 +#: postmaster/syslogger.c:1488 replication/basebackup.c:621 +#: replication/basebackup.c:1593 replication/logical/origin.c:707 +#: replication/logical/reorderbuffer.c:2465 +#: replication/logical/reorderbuffer.c:2825 +#: replication/logical/reorderbuffer.c:3579 +#: replication/logical/snapbuild.c:1608 replication/logical/snapbuild.c:1715 +#: replication/slot.c:1594 replication/walsender.c:520 +#: replication/walsender.c:2509 storage/file/copydir.c:161 +#: storage/file/fd.c:679 storage/file/fd.c:3412 storage/file/fd.c:3499 +#: storage/smgr/md.c:513 utils/cache/relmapper.c:724 +#: utils/cache/relmapper.c:836 utils/error/elog.c:1858 +#: utils/init/miscinit.c:1316 utils/init/miscinit.c:1450 +#: utils/init/miscinit.c:1527 utils/misc/guc.c:8280 utils/misc/guc.c:8312 #, c-format msgid "could not open file \"%s\": %m" msgstr "не удалось открыть файл \"%s\": %m" #: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 -#: access/transam/twophase.c:1701 access/transam/twophase.c:1710 -#: access/transam/xlog.c:10565 access/transam/xlog.c:10603 -#: access/transam/xlog.c:11016 access/transam/xlogfuncs.c:742 -#: postmaster/syslogger.c:1500 postmaster/syslogger.c:1513 +#: access/transam/twophase.c:1649 access/transam/twophase.c:1658 +#: access/transam/xlog.c:10858 access/transam/xlog.c:10896 +#: access/transam/xlog.c:11309 access/transam/xlogfuncs.c:741 +#: postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 #: utils/cache/relmapper.c:870 #, c-format msgid "could not write file \"%s\": %m" msgstr "не удалось записать файл \"%s\": %m" #: ../common/controldata_utils.c:239 ../common/controldata_utils.c:245 -#: ../common/file_utils.c:297 ../common/file_utils.c:367 -#: access/heap/rewriteheap.c:981 access/heap/rewriteheap.c:1202 -#: access/heap/rewriteheap.c:1305 access/transam/timeline.c:415 -#: access/transam/timeline.c:493 access/transam/twophase.c:1722 -#: access/transam/xlog.c:3320 access/transam/xlog.c:3489 -#: access/transam/xlog.c:4565 access/transam/xlog.c:10083 -#: access/transam/xlog.c:10109 replication/logical/snapbuild.c:1651 -#: replication/slot.c:1312 replication/slot.c:1409 storage/file/fd.c:646 -#: storage/file/fd.c:3403 storage/smgr/md.c:877 storage/smgr/md.c:910 -#: storage/sync/sync.c:395 utils/cache/relmapper.c:885 utils/misc/guc.c:7810 +#: ../common/file_utils.c:295 ../common/file_utils.c:365 +#: access/heap/rewriteheap.c:961 access/heap/rewriteheap.c:1175 +#: access/heap/rewriteheap.c:1278 access/transam/timeline.c:432 +#: access/transam/timeline.c:510 access/transam/twophase.c:1670 +#: access/transam/xlog.c:3368 access/transam/xlog.c:3537 +#: access/transam/xlog.c:4691 access/transam/xlog.c:10366 +#: access/transam/xlog.c:10393 replication/logical/snapbuild.c:1646 +#: replication/slot.c:1499 replication/slot.c:1604 storage/file/fd.c:696 +#: storage/file/fd.c:3520 storage/smgr/md.c:959 storage/smgr/md.c:1000 +#: storage/sync/sync.c:396 utils/cache/relmapper.c:885 utils/misc/guc.c:8063 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" -#: ../common/exec.c:138 ../common/exec.c:255 ../common/exec.c:301 +#: ../common/exec.c:137 ../common/exec.c:254 ../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "не удалось определить текущий каталог: %m" -#: ../common/exec.c:157 +#: ../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "неверный исполняемый файл \"%s\"" -#: ../common/exec.c:207 +#: ../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "не удалось прочитать исполняемый файл \"%s\"" -#: ../common/exec.c:215 +#: ../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "не удалось найти запускаемый файл \"%s\"" -#: ../common/exec.c:271 ../common/exec.c:310 utils/init/miscinit.c:220 +#: ../common/exec.c:270 ../common/exec.c:309 utils/init/miscinit.c:395 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "не удалось перейти в каталог \"%s\": %m" -#: ../common/exec.c:288 access/transam/xlog.c:10438 -#: replication/basebackup.c:1246 utils/adt/misc.c:324 +#: ../common/exec.c:287 access/transam/xlog.c:10730 +#: replication/basebackup.c:1418 utils/adt/misc.c:337 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "не удалось прочитать символическую ссылку \"%s\": %m" -#: ../common/exec.c:541 +#: ../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "ошибка pclose: %m" -#: ../common/exec.c:670 ../common/exec.c:715 ../common/exec.c:807 -#: ../common/psprintf.c:143 ../port/path.c:630 ../port/path.c:668 -#: ../port/path.c:685 access/transam/twophase.c:1394 access/transam/xlog.c:6363 -#: lib/dshash.c:246 lib/stringinfo.c:283 libpq/auth.c:1093 libpq/auth.c:1483 -#: libpq/auth.c:1551 libpq/auth.c:2069 libpq/be-secure-gssapi.c:480 -#: postmaster/bgworker.c:337 postmaster/bgworker.c:907 -#: postmaster/postmaster.c:2460 postmaster/postmaster.c:2482 -#: postmaster/postmaster.c:4074 postmaster/postmaster.c:4763 -#: postmaster/postmaster.c:4838 postmaster/postmaster.c:5515 -#: postmaster/postmaster.c:5876 -#: replication/libpqwalreceiver/libpqwalreceiver.c:257 -#: replication/logical/logical.c:179 storage/buffer/localbuf.c:436 -#: storage/file/fd.c:795 storage/file/fd.c:1191 storage/file/fd.c:1352 -#: storage/file/fd.c:2161 storage/ipc/procarray.c:1047 -#: storage/ipc/procarray.c:1542 storage/ipc/procarray.c:1549 -#: storage/ipc/procarray.c:1973 storage/ipc/procarray.c:2600 +#: ../common/exec.c:539 ../common/exec.c:584 ../common/exec.c:676 +#: ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 +#: ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1341 +#: access/transam/xlog.c:6487 lib/dshash.c:246 libpq/auth.c:1469 +#: libpq/auth.c:1537 libpq/auth.c:2067 libpq/be-secure-gssapi.c:520 +#: postmaster/bgworker.c:347 postmaster/bgworker.c:952 +#: postmaster/postmaster.c:2519 postmaster/postmaster.c:4156 +#: postmaster/postmaster.c:4858 postmaster/postmaster.c:5615 +#: postmaster/postmaster.c:5975 +#: replication/libpqwalreceiver/libpqwalreceiver.c:276 +#: replication/logical/logical.c:176 replication/walsender.c:594 +#: storage/buffer/localbuf.c:442 storage/file/fd.c:834 storage/file/fd.c:1304 +#: storage/file/fd.c:1465 storage/file/fd.c:2270 storage/ipc/procarray.c:1045 +#: storage/ipc/procarray.c:1541 storage/ipc/procarray.c:1548 +#: storage/ipc/procarray.c:1972 storage/ipc/procarray.c:2597 #: utils/adt/cryptohashes.c:45 utils/adt/cryptohashes.c:65 -#: utils/adt/formatting.c:1595 utils/adt/formatting.c:1719 -#: utils/adt/formatting.c:1844 utils/adt/pg_locale.c:473 -#: utils/adt/pg_locale.c:637 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 -#: utils/hash/dynahash.c:448 utils/hash/dynahash.c:557 -#: utils/hash/dynahash.c:1069 utils/mb/mbutils.c:371 utils/mb/mbutils.c:398 -#: utils/mb/mbutils.c:727 utils/mb/mbutils.c:753 utils/misc/guc.c:4621 -#: utils/misc/guc.c:4637 utils/misc/guc.c:4650 utils/misc/guc.c:7788 -#: utils/misc/tzparser.c:468 utils/mmgr/aset.c:484 utils/mmgr/dsa.c:701 -#: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:249 -#: utils/mmgr/mcxt.c:796 utils/mmgr/mcxt.c:832 utils/mmgr/mcxt.c:870 -#: utils/mmgr/mcxt.c:908 utils/mmgr/mcxt.c:944 utils/mmgr/mcxt.c:975 -#: utils/mmgr/mcxt.c:1011 utils/mmgr/mcxt.c:1063 utils/mmgr/mcxt.c:1098 -#: utils/mmgr/mcxt.c:1133 utils/mmgr/slab.c:251 +#: utils/adt/formatting.c:1700 utils/adt/formatting.c:1824 +#: utils/adt/formatting.c:1949 utils/adt/pg_locale.c:484 +#: utils/adt/pg_locale.c:648 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 +#: utils/hash/dynahash.c:450 utils/hash/dynahash.c:559 +#: utils/hash/dynahash.c:1071 utils/mb/mbutils.c:401 utils/mb/mbutils.c:428 +#: utils/mb/mbutils.c:757 utils/mb/mbutils.c:783 utils/misc/guc.c:4846 +#: utils/misc/guc.c:4862 utils/misc/guc.c:4875 utils/misc/guc.c:8041 +#: utils/misc/tzparser.c:467 utils/mmgr/aset.c:475 utils/mmgr/dsa.c:701 +#: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:233 +#: utils/mmgr/mcxt.c:821 utils/mmgr/mcxt.c:857 utils/mmgr/mcxt.c:895 +#: utils/mmgr/mcxt.c:933 utils/mmgr/mcxt.c:969 utils/mmgr/mcxt.c:1000 +#: utils/mmgr/mcxt.c:1036 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1123 +#: utils/mmgr/mcxt.c:1158 utils/mmgr/slab.c:235 #, c-format msgid "out of memory" msgstr "нехватка памяти" #: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 -#: ../common/fe_memutils.c:98 ../common/psprintf.c:145 ../port/path.c:632 -#: ../port/path.c:670 ../port/path.c:687 utils/misc/ps_status.c:176 -#: utils/misc/ps_status.c:184 utils/misc/ps_status.c:214 -#: utils/misc/ps_status.c:222 +#: ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 +#: ../common/psprintf.c:145 ../port/path.c:632 ../port/path.c:670 +#: ../port/path.c:687 utils/misc/ps_status.c:181 utils/misc/ps_status.c:189 +#: utils/misc/ps_status.c:219 utils/misc/ps_status.c:227 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../common/fe_memutils.c:92 +#: ../common/fe_memutils.c:92 ../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" -#: ../common/file_utils.c:81 ../common/file_utils.c:183 -#: access/transam/twophase.c:1261 access/transam/xlog.c:10541 -#: access/transam/xlog.c:10579 access/transam/xlog.c:10796 -#: access/transam/xlogarchive.c:111 access/transam/xlogarchive.c:271 -#: commands/copy.c:1944 commands/copy.c:3559 commands/extension.c:3330 -#: commands/tablespace.c:796 commands/tablespace.c:887 -#: replication/basebackup.c:355 replication/basebackup.c:535 -#: replication/basebackup.c:607 replication/logical/snapbuild.c:1527 -#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1703 -#: storage/file/fd.c:2980 storage/file/fd.c:3162 storage/file/fd.c:3247 +#: ../common/file_utils.c:79 ../common/file_utils.c:181 +#: access/transam/twophase.c:1244 access/transam/xlog.c:10834 +#: access/transam/xlog.c:10872 access/transam/xlog.c:11089 +#: access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:226 +#: commands/copy.c:1938 commands/copy.c:3505 commands/extension.c:3425 +#: commands/tablespace.c:807 commands/tablespace.c:898 +#: replication/basebackup.c:444 replication/basebackup.c:627 +#: replication/basebackup.c:700 replication/logical/snapbuild.c:1522 +#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1816 +#: storage/file/fd.c:3096 storage/file/fd.c:3278 storage/file/fd.c:3364 #: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 -#: utils/adt/genfile.c:133 utils/adt/genfile.c:386 guc-file.l:1061 +#: utils/adt/genfile.c:416 utils/adt/genfile.c:642 guc-file.l:1061 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не удалось получить информацию о файле \"%s\": %m" -#: ../common/file_utils.c:160 ../common/pgfnames.c:48 commands/tablespace.c:719 -#: commands/tablespace.c:729 postmaster/postmaster.c:1474 -#: storage/file/fd.c:2562 storage/file/reinit.c:122 utils/adt/genfile.c:487 -#: utils/adt/genfile.c:565 utils/adt/misc.c:243 utils/misc/tzparser.c:339 +#: ../common/file_utils.c:158 ../common/pgfnames.c:48 commands/tablespace.c:730 +#: commands/tablespace.c:740 postmaster/postmaster.c:1509 +#: storage/file/fd.c:2673 storage/file/reinit.c:122 utils/adt/misc.c:259 +#: utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не удалось открыть каталог \"%s\": %m" -#: ../common/file_utils.c:194 ../common/pgfnames.c:69 storage/file/fd.c:2574 +#: ../common/file_utils.c:192 ../common/pgfnames.c:69 storage/file/fd.c:2685 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не удалось прочитать каталог \"%s\": %m" -#: ../common/file_utils.c:377 access/transam/xlogarchive.c:456 -#: postmaster/syslogger.c:1524 replication/logical/snapbuild.c:1670 -#: replication/slot.c:598 replication/slot.c:1210 replication/slot.c:1332 -#: storage/file/fd.c:664 storage/file/fd.c:759 utils/time/snapmgr.c:1350 +#: ../common/file_utils.c:375 access/transam/xlogarchive.c:411 +#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1665 +#: replication/slot.c:650 replication/slot.c:1385 replication/slot.c:1527 +#: storage/file/fd.c:714 utils/time/snapmgr.c:1350 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "не удалось переименовать файл \"%s\" в \"%s\": %m" -#: ../common/logging.c:188 +#: ../common/jsonapi.c:1064 +#, c-format +msgid "Escape sequence \"\\%s\" is invalid." +msgstr "Неверная спецпоследовательность: \"\\%s\"." + +#: ../common/jsonapi.c:1067 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "Символ с кодом 0x%02x необходимо экранировать." + +#: ../common/jsonapi.c:1070 +#, c-format +msgid "Expected end of input, but found \"%s\"." +msgstr "Ожидался конец текста, но обнаружено продолжение \"%s\"." + +#: ../common/jsonapi.c:1073 +#, c-format +msgid "Expected array element or \"]\", but found \"%s\"." +msgstr "Ожидался элемент массива или \"]\", но обнаружено \"%s\"." + +#: ../common/jsonapi.c:1076 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%s\"." +msgstr "Ожидалась \",\" или \"]\", но обнаружено \"%s\"." + +#: ../common/jsonapi.c:1079 +#, c-format +msgid "Expected \":\", but found \"%s\"." +msgstr "Ожидалось \":\", но обнаружено \"%s\"." + +#: ../common/jsonapi.c:1082 +#, c-format +msgid "Expected JSON value, but found \"%s\"." +msgstr "Ожидалось значение JSON, но обнаружено \"%s\"." + +#: ../common/jsonapi.c:1085 +msgid "The input string ended unexpectedly." +msgstr "Неожиданный конец входной строки." + +#: ../common/jsonapi.c:1087 +#, c-format +msgid "Expected string or \"}\", but found \"%s\"." +msgstr "Ожидалась строка или \"}\", но обнаружено \"%s\"." + +#: ../common/jsonapi.c:1090 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%s\"." +msgstr "Ожидалась \",\" или \"}\", но обнаружено \"%s\"." + +#: ../common/jsonapi.c:1093 +#, c-format +msgid "Expected string, but found \"%s\"." +msgstr "Ожидалась строка, но обнаружено \"%s\"." + +#: ../common/jsonapi.c:1096 +#, c-format +msgid "Token \"%s\" is invalid." +msgstr "Ошибочный элемент текста \"%s\"." + +#: ../common/jsonapi.c:1099 jsonpath_scan.l:499 +#, c-format +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 нельзя преобразовать в текст." + +#: ../common/jsonapi.c:1101 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "За \"\\u\" должны следовать четыре шестнадцатеричные цифры." + +#: ../common/jsonapi.c:1104 +msgid "" +"Unicode escape values cannot be used for code point values above 007F when " +"the encoding is not UTF8." +msgstr "" +"Спецкоды Unicode для значений выше 007F можно использовать только с " +"кодировкой UTF8." + +#: ../common/jsonapi.c:1106 jsonpath_scan.l:520 +#, c-format +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "" +"Старшее слово суррогата Unicode не может следовать за другим старшим словом." + +#: ../common/jsonapi.c:1108 jsonpath_scan.l:531 jsonpath_scan.l:541 +#: jsonpath_scan.l:583 +#, c-format +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Младшее слово суррогата Unicode должно следовать за старшим словом." + +#: ../common/logging.c:236 #, c-format msgid "fatal: " msgstr "важно: " -#: ../common/logging.c:195 +#: ../common/logging.c:243 #, c-format msgid "error: " msgstr "ошибка: " -#: ../common/logging.c:202 +#: ../common/logging.c:250 #, c-format msgid "warning: " msgstr "предупреждение: " @@ -295,53 +382,58 @@ msgstr "предупреждение: " msgid "could not close directory \"%s\": %m" msgstr "не удалось закрыть каталог \"%s\": %m" -#: ../common/relpath.c:58 +#: ../common/relpath.c:61 #, c-format msgid "invalid fork name" msgstr "неверное имя слоя" -#: ../common/relpath.c:59 +#: ../common/relpath.c:62 #, c-format msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Допустимые имена слоёв: \"main\", \"fsm\", \"vm\" и \"init\"." -#: ../common/restricted_token.c:69 +#: ../common/restricted_token.c:64 libpq/auth.c:1499 libpq/auth.c:2498 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "в этой ОС нельзя создавать ограниченные маркеры" +msgid "could not load library \"%s\": error code %lu" +msgstr "не удалось загрузить библиотеку \"%s\" (код ошибки: %lu)" -#: ../common/restricted_token.c:78 +#: ../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "в этой ОС нельзя создавать ограниченные маркеры (код ошибки: %lu)" + +#: ../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "не удалось открыть маркер процесса (код ошибки: %lu)" -#: ../common/restricted_token.c:91 +#: ../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "не удалось подготовить структуры SID (код ошибки: %lu)" -#: ../common/restricted_token.c:110 +#: ../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "не удалось создать ограниченный маркер (код ошибки: %lu)" -#: ../common/restricted_token.c:131 +#: ../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "не удалось запустить процесс для команды \"%s\" (код ошибки: %lu)" -#: ../common/restricted_token.c:169 +#: ../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "не удалось перезапуститься с ограниченным маркером (код ошибки: %lu)" -#: ../common/restricted_token.c:185 +#: ../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "не удалось получить код выхода от подпроцесса (код ошибки: %lu)" -#: ../common/rmtree.c:79 replication/basebackup.c:1005 -#: replication/basebackup.c:1175 +#: ../common/rmtree.c:79 replication/basebackup.c:1171 +#: replication/basebackup.c:1347 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "не удалось получить информацию о файле или каталоге \"%s\": %m" @@ -351,17 +443,35 @@ msgstr "не удалось получить информацию о файле msgid "could not remove file or directory \"%s\": %m" msgstr "ошибка при удалении файла или каталога \"%s\": %m" -#: ../common/saslprep.c:1093 +#: ../common/saslprep.c:1087 #, c-format msgid "password too long" msgstr "слишком длинный пароль" +#: ../common/stringinfo.c:306 +#, c-format +msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." +msgstr "" +"Не удалось увеличить строковый буфер (в буфере байт: %d, требовалось ещё %d)." + +#: ../common/stringinfo.c:310 +#, c-format +msgid "" +"out of memory\n" +"\n" +"Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" +msgstr "" +"нехватка памяти\n" +"\n" +"Не удалось увеличить строковый буфер (в буфере байт: %d, требовалось ещё " +"%d).\n" + #: ../common/username.c:43 #, c-format msgid "could not look up effective user ID %ld: %s" msgstr "выяснить эффективный идентификатор пользователя (%ld) не удалось: %s" -#: ../common/username.c:45 libpq/auth.c:2016 +#: ../common/username.c:45 libpq/auth.c:2005 msgid "user does not exist" msgstr "пользователь не существует" @@ -400,12 +510,12 @@ msgstr "дочерний процесс завершён по сигналу %d: msgid "child process exited with unrecognized status %d" msgstr "дочерний процесс завершился с нераспознанным состоянием %d" -#: ../port/chklocale.c:288 +#: ../port/chklocale.c:307 #, c-format msgid "could not determine encoding for codeset \"%s\"" msgstr "не удалось определить кодировку для набора символов \"%s\"" -#: ../port/chklocale.c:409 ../port/chklocale.c:415 +#: ../port/chklocale.c:428 ../port/chklocale.c:434 #, c-format msgid "could not determine encoding for locale \"%s\": codeset is \"%s\"" msgstr "" @@ -485,7 +595,7 @@ msgid "could not check access token membership: error code %lu\n" msgstr "" "не удалось проверить вхождение в маркере безопасности (код ошибки: %lu)\n" -#: access/brin/brin.c:204 +#: access/brin/brin.c:210 #, c-format msgid "" "request for BRIN range summarization for index \"%s\" page %u was not " @@ -494,64 +604,57 @@ msgstr "" "запрос на расчёт сводки диапазона BRIN для индекса \"%s\" страницы %u не был " "записан" -#: access/brin/brin.c:881 access/brin/brin.c:958 access/gin/ginfast.c:1041 -#: access/transam/xlog.c:10218 access/transam/xlog.c:10747 -#: access/transam/xlogfuncs.c:289 access/transam/xlogfuncs.c:316 -#: access/transam/xlogfuncs.c:355 access/transam/xlogfuncs.c:376 -#: access/transam/xlogfuncs.c:397 access/transam/xlogfuncs.c:467 -#: access/transam/xlogfuncs.c:524 +#: access/brin/brin.c:873 access/brin/brin.c:950 access/gin/ginfast.c:1035 +#: access/transam/xlog.c:10502 access/transam/xlog.c:11040 +#: access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 +#: access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 +#: access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 +#: access/transam/xlogfuncs.c:509 #, c-format msgid "recovery is in progress" msgstr "идёт процесс восстановления" -#: access/brin/brin.c:882 access/brin/brin.c:959 +#: access/brin/brin.c:874 access/brin/brin.c:951 #, c-format msgid "BRIN control functions cannot be executed during recovery." msgstr "Функции управления BRIN нельзя использовать в процессе восстановления." -#: access/brin/brin.c:890 access/brin/brin.c:967 +#: access/brin/brin.c:882 access/brin/brin.c:959 #, c-format msgid "block number out of range: %s" msgstr "номер блока вне диапазона: %s" -#: access/brin/brin.c:913 access/brin/brin.c:990 +#: access/brin/brin.c:905 access/brin/brin.c:982 #, c-format msgid "\"%s\" is not a BRIN index" msgstr "\"%s\" - это не индекс BRIN" -#: access/brin/brin.c:929 access/brin/brin.c:1006 +#: access/brin/brin.c:921 access/brin/brin.c:998 #, c-format msgid "could not open parent table of index %s" msgstr "не удалось родительскую таблицу индекса %s" -#: access/brin/brin_pageops.c:77 access/brin/brin_pageops.c:363 -#: access/brin/brin_pageops.c:844 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1443 access/spgist/spgdoinsert.c:1957 +#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 +#: access/brin/brin_pageops.c:843 access/gin/ginentrypage.c:110 +#: access/gist/gist.c:1438 access/spgist/spgdoinsert.c:1957 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "" "размер строки индекса (%zu) больше предельного размера (%zu) (индекс \"%s\")" -#: access/brin/brin_revmap.c:382 access/brin/brin_revmap.c:388 +#: access/brin/brin_revmap.c:392 access/brin/brin_revmap.c:398 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "испорченный индекс BRIN: несогласованность в карте диапазонов" -#: access/brin/brin_revmap.c:404 -#, c-format -msgid "leftover placeholder tuple detected in BRIN index \"%s\", deleting" -msgstr "" -"в BRIN-индексе \"%s\" обнаружен оставшийся кортеж-местозаполнитель, он " -"удаляется" - #: access/brin/brin_revmap.c:601 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "неожиданный тип страницы 0x%04X в BRIN-индексе \"%s\" (блок: %u)" -#: access/brin/brin_validate.c:116 access/gin/ginvalidate.c:149 -#: access/gist/gistvalidate.c:146 access/hash/hashvalidate.c:132 -#: access/nbtree/nbtvalidate.c:110 access/spgist/spgvalidate.c:165 +#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:151 +#: access/gist/gistvalidate.c:149 access/hash/hashvalidate.c:136 +#: access/nbtree/nbtvalidate.c:117 access/spgist/spgvalidate.c:168 #, c-format msgid "" "operator family \"%s\" of access method %s contains function %s with invalid " @@ -560,9 +663,9 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит функцию %s с " "неправильным опорным номером %d" -#: access/brin/brin_validate.c:132 access/gin/ginvalidate.c:161 -#: access/gist/gistvalidate.c:158 access/hash/hashvalidate.c:115 -#: access/nbtree/nbtvalidate.c:122 access/spgist/spgvalidate.c:177 +#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:163 +#: access/gist/gistvalidate.c:161 access/hash/hashvalidate.c:115 +#: access/nbtree/nbtvalidate.c:129 access/spgist/spgvalidate.c:180 #, c-format msgid "" "operator family \"%s\" of access method %s contains function %s with wrong " @@ -571,9 +674,9 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит функцию %s с " "неподходящим объявлением для опорного номера %d" -#: access/brin/brin_validate.c:154 access/gin/ginvalidate.c:180 -#: access/gist/gistvalidate.c:178 access/hash/hashvalidate.c:153 -#: access/nbtree/nbtvalidate.c:142 access/spgist/spgvalidate.c:197 +#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:182 +#: access/gist/gistvalidate.c:181 access/hash/hashvalidate.c:157 +#: access/nbtree/nbtvalidate.c:149 access/spgist/spgvalidate.c:200 #, c-format msgid "" "operator family \"%s\" of access method %s contains operator %s with invalid " @@ -582,9 +685,9 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит оператор %s с " "неправильным номером стратегии %d" -#: access/brin/brin_validate.c:183 access/gin/ginvalidate.c:193 -#: access/hash/hashvalidate.c:166 access/nbtree/nbtvalidate.c:155 -#: access/spgist/spgvalidate.c:213 +#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:195 +#: access/hash/hashvalidate.c:170 access/nbtree/nbtvalidate.c:162 +#: access/spgist/spgvalidate.c:216 #, c-format msgid "" "operator family \"%s\" of access method %s contains invalid ORDER BY " @@ -593,9 +696,9 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит некорректное " "определение ORDER BY для оператора %s" -#: access/brin/brin_validate.c:196 access/gin/ginvalidate.c:206 -#: access/gist/gistvalidate.c:226 access/hash/hashvalidate.c:179 -#: access/nbtree/nbtvalidate.c:168 access/spgist/spgvalidate.c:229 +#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:208 +#: access/gist/gistvalidate.c:229 access/hash/hashvalidate.c:183 +#: access/nbtree/nbtvalidate.c:175 access/spgist/spgvalidate.c:232 #, c-format msgid "" "operator family \"%s\" of access method %s contains operator %s with wrong " @@ -604,8 +707,8 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит оператор %s с " "неподходящим объявлением" -#: access/brin/brin_validate.c:234 access/hash/hashvalidate.c:219 -#: access/nbtree/nbtvalidate.c:226 access/spgist/spgvalidate.c:256 +#: access/brin/brin_validate.c:236 access/hash/hashvalidate.c:223 +#: access/nbtree/nbtvalidate.c:233 access/spgist/spgvalidate.c:259 #, c-format msgid "" "operator family \"%s\" of access method %s is missing operator(s) for types " @@ -614,7 +717,7 @@ msgstr "" "в семействе операторов \"%s\" метода доступа %s нет оператора(ов) для типов " "%s и %s" -#: access/brin/brin_validate.c:244 +#: access/brin/brin_validate.c:246 #, c-format msgid "" "operator family \"%s\" of access method %s is missing support function(s) " @@ -623,127 +726,145 @@ msgstr "" "в семействе операторов \"%s\" метода доступа %s нет опорных функций для " "типов %s и %s" -#: access/brin/brin_validate.c:257 access/hash/hashvalidate.c:233 -#: access/nbtree/nbtvalidate.c:250 access/spgist/spgvalidate.c:289 +#: access/brin/brin_validate.c:259 access/hash/hashvalidate.c:237 +#: access/nbtree/nbtvalidate.c:257 access/spgist/spgvalidate.c:294 #, c-format msgid "operator class \"%s\" of access method %s is missing operator(s)" msgstr "в классе операторов \"%s\" метода доступа %s нет оператора(ов)" -#: access/brin/brin_validate.c:268 access/gin/ginvalidate.c:247 -#: access/gist/gistvalidate.c:266 +#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:250 +#: access/gist/gistvalidate.c:270 #, c-format msgid "" "operator class \"%s\" of access method %s is missing support function %d" msgstr "в классе операторов \"%s\" метода доступа %s нет опорной функции %d" +#: access/common/attmap.c:122 +#, c-format +msgid "Returned type %s does not match expected type %s in column %d." +msgstr "Возвращаемый тип %s не соответствует ожидаемому типу %s в столбце %d." + +#: access/common/attmap.c:150 +#, c-format +msgid "" +"Number of returned columns (%d) does not match expected column count (%d)." +msgstr "" +"Число возвращённых столбцов (%d) не соответствует ожидаемому числу (%d)." + +#: access/common/attmap.c:229 access/common/attmap.c:241 +#, c-format +msgid "could not convert row type" +msgstr "не удалось преобразовать тип строки" + +#: access/common/attmap.c:230 +#, c-format +msgid "" +"Attribute \"%s\" of type %s does not match corresponding attribute of type " +"%s." +msgstr "" +"Атрибут \"%s\" типа %s несовместим с соответствующим атрибутом типа %s." + +#: access/common/attmap.c:242 +#, c-format +msgid "Attribute \"%s\" of type %s does not exist in type %s." +msgstr "Атрибут \"%s\" типа %s не существует в типе %s." + #: access/common/heaptuple.c:1036 access/common/heaptuple.c:1371 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "число столбцов (%d) превышает предел (%d)" -#: access/common/indextuple.c:63 +#: access/common/indextuple.c:70 #, c-format msgid "number of index columns (%d) exceeds limit (%d)" msgstr "число столбцов индекса (%d) превышает предел (%d)" -#: access/common/indextuple.c:179 access/spgist/spgutils.c:691 +#: access/common/indextuple.c:187 access/spgist/spgutils.c:703 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "строка индекса требует байт: %zu, при максимуме: %zu" #: access/common/printtup.c:369 tcop/fastpath.c:180 tcop/fastpath.c:530 -#: tcop/postgres.c:1834 +#: tcop/postgres.c:1904 #, c-format msgid "unsupported format code: %d" msgstr "неподдерживаемый код формата: %d" -#: access/common/reloptions.c:579 +#: access/common/reloptions.c:506 +msgid "Valid values are \"on\", \"off\", and \"auto\"." +msgstr "Допускаются только значения \"on\", \"off\" и \"auto\"." + +#: access/common/reloptions.c:517 +msgid "Valid values are \"local\" and \"cascaded\"." +msgstr "Допускаются только значения \"local\" и \"cascaded\"." + +#: access/common/reloptions.c:665 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "превышен предел пользовательских типов реляционных параметров" -#: access/common/reloptions.c:867 +#: access/common/reloptions.c:1208 #, c-format msgid "RESET must not include values for parameters" msgstr "В RESET не должно передаваться значение параметров" -#: access/common/reloptions.c:899 +#: access/common/reloptions.c:1240 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "нераспознанное пространство имён параметров \"%s\"" -#: access/common/reloptions.c:936 utils/misc/guc.c:11762 +#: access/common/reloptions.c:1277 utils/misc/guc.c:12032 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "таблицы со свойством WITH OIDS не поддерживаются" -#: access/common/reloptions.c:1154 +#: access/common/reloptions.c:1447 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "нераспознанный параметр \"%s\"" -#: access/common/reloptions.c:1184 +#: access/common/reloptions.c:1559 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "параметр \"%s\" указан неоднократно" -#: access/common/reloptions.c:1200 +#: access/common/reloptions.c:1575 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "неверное значение для логического параметра \"%s\": %s" -#: access/common/reloptions.c:1212 +#: access/common/reloptions.c:1587 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "неверное значение для целочисленного параметра \"%s\": %s" -#: access/common/reloptions.c:1218 access/common/reloptions.c:1238 +#: access/common/reloptions.c:1593 access/common/reloptions.c:1613 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "значение %s вне допустимых пределов параметра \"%s\"" -#: access/common/reloptions.c:1220 +#: access/common/reloptions.c:1595 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Допускаются значения только от \"%d\" до \"%d\"." -#: access/common/reloptions.c:1232 +#: access/common/reloptions.c:1607 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "неверное значение для численного параметра \"%s\": %s" -#: access/common/reloptions.c:1240 +#: access/common/reloptions.c:1615 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Допускаются значения только от \"%f\" до \"%f\"." -#: access/common/tupconvert.c:107 +#: access/common/reloptions.c:1637 #, c-format -msgid "Returned type %s does not match expected type %s in column %d." -msgstr "Возвращаемый тип %s не соответствует ожидаемому типу %s в столбце %d." - -#: access/common/tupconvert.c:135 -#, c-format -msgid "" -"Number of returned columns (%d) does not match expected column count (%d)." -msgstr "" -"Число возвращённых столбцов (%d) не соответствует ожидаемому числу (%d)." - -#: access/common/tupconvert.c:303 -#, c-format -msgid "" -"Attribute \"%s\" of type %s does not match corresponding attribute of type " -"%s." -msgstr "" -"Атрибут \"%s\" типа %s несовместим с соответствующим атрибутом типа %s." +msgid "invalid value for enum option \"%s\": %s" +msgstr "неверное значение для параметра-перечисления \"%s\": %s" -#: access/common/tupconvert.c:315 -#, c-format -msgid "Attribute \"%s\" of type %s does not exist in type %s." -msgstr "Атрибут \"%s\" типа %s не существует в типе %s." - -#: access/common/tupdesc.c:842 parser/parse_clause.c:779 -#: parser/parse_relation.c:1578 +#: access/common/tupdesc.c:842 parser/parse_clause.c:772 +#: parser/parse_relation.c:1803 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "столбец \"%s\" не может быть объявлен как SETOF" @@ -758,40 +879,45 @@ msgstr "слишком длинный список указателей" msgid "Reduce maintenance_work_mem." msgstr "Уменьшите maintenance_work_mem." -#: access/gin/ginfast.c:1042 +#: access/gin/ginfast.c:1036 #, c-format msgid "GIN pending list cannot be cleaned up during recovery." msgstr "Очередь записей GIN нельзя очистить в процессе восстановления." -#: access/gin/ginfast.c:1049 +#: access/gin/ginfast.c:1043 #, c-format msgid "\"%s\" is not a GIN index" msgstr "\"%s\" - это не индекс GIN" -#: access/gin/ginfast.c:1060 +#: access/gin/ginfast.c:1054 #, c-format msgid "cannot access temporary indexes of other sessions" msgstr "обращаться к временным индексам других сеансов нельзя" -#: access/gin/ginscan.c:402 +#: access/gin/ginget.c:270 access/nbtree/nbtinsert.c:745 +#, c-format +msgid "failed to re-find tuple within index \"%s\"" +msgstr "не удалось повторно найти кортеж в индексе \"%s\"" + +#: access/gin/ginscan.c:431 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" msgstr "" "старые GIN-индексы не поддерживают сканирование всего индекса и поиск NULL" -#: access/gin/ginscan.c:403 +#: access/gin/ginscan.c:432 #, c-format msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Для исправления выполните REINDEX INDEX \"%s\"." -#: access/gin/ginutil.c:139 executor/execExpr.c:1860 -#: utils/adt/arrayfuncs.c:3789 utils/adt/arrayfuncs.c:6416 +#: access/gin/ginutil.c:144 executor/execExpr.c:1862 +#: utils/adt/arrayfuncs.c:3790 utils/adt/arrayfuncs.c:6418 #: utils/adt/rowtypes.c:936 #, c-format msgid "could not identify a comparison function for type %s" msgstr "не удалось найти функцию сравнения для типа %s" -#: access/gin/ginvalidate.c:93 access/gist/gistvalidate.c:93 +#: access/gin/ginvalidate.c:92 access/gist/gistvalidate.c:93 #: access/hash/hashvalidate.c:99 access/spgist/spgvalidate.c:99 #, c-format msgid "" @@ -801,7 +927,7 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит опорную функцию %s с " "межтиповой регистрацией" -#: access/gin/ginvalidate.c:257 +#: access/gin/ginvalidate.c:260 #, c-format msgid "" "operator class \"%s\" of access method %s is missing support function %d or " @@ -809,12 +935,12 @@ msgid "" msgstr "" "в классе операторов \"%s\" метода доступа %s нет опорной функции %d или %d" -#: access/gist/gist.c:749 access/gist/gistvacuum.c:434 +#: access/gist/gist.c:756 access/gist/gistvacuum.c:408 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "индекс \"%s\" содержит внутренний кортеж, отмеченный как ошибочный" -#: access/gist/gist.c:751 access/gist/gistvacuum.c:436 +#: access/gist/gist.c:758 access/gist/gistvacuum.c:410 #, c-format msgid "" "This is caused by an incomplete page split at crash recovery before " @@ -823,30 +949,15 @@ msgstr "" "Это вызвано неполным разделением страницы при восстановлении после сбоя в " "PostgreSQL до версии 9.1." -#: access/gist/gist.c:752 access/gist/gistutil.c:787 access/gist/gistutil.c:798 -#: access/gist/gistvacuum.c:437 access/hash/hashutil.c:241 -#: access/hash/hashutil.c:252 access/hash/hashutil.c:264 -#: access/hash/hashutil.c:285 access/nbtree/nbtpage.c:708 -#: access/nbtree/nbtpage.c:719 +#: access/gist/gist.c:759 access/gist/gistutil.c:786 access/gist/gistutil.c:797 +#: access/gist/gistvacuum.c:411 access/hash/hashutil.c:227 +#: access/hash/hashutil.c:238 access/hash/hashutil.c:250 +#: access/hash/hashutil.c:271 access/nbtree/nbtpage.c:741 +#: access/nbtree/nbtpage.c:752 #, c-format msgid "Please REINDEX it." msgstr "Пожалуйста, выполните REINDEX для него." -#: access/gist/gistbuild.c:253 -#, c-format -msgid "invalid value for \"buffering\" option" -msgstr "неверное значение для параметра \"buffering\"" - -#: access/gist/gistbuild.c:254 -#, c-format -msgid "Valid values are \"on\", \"off\", and \"auto\"." -msgstr "Допускаются только значения \"on\", \"off\" и \"auto\"." - -#: access/gist/gistbuildbuffers.c:779 utils/sort/logtape.c:255 -#, c-format -msgid "could not write block %ld of temporary file: %m" -msgstr "не удалось записать блок %ld временного файла: %m" - #: access/gist/gistsplit.c:446 #, c-format msgid "picksplit method for column %d of index \"%s\" failed" @@ -862,19 +973,19 @@ msgstr "" "разработчиками или попробуйте указать этот столбец в команде CREATE INDEX " "вторым." -#: access/gist/gistutil.c:784 access/hash/hashutil.c:238 -#: access/nbtree/nbtpage.c:705 +#: access/gist/gistutil.c:783 access/hash/hashutil.c:224 +#: access/nbtree/nbtpage.c:738 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "в индексе \"%s\" неожиданно оказалась нулевая страница в блоке %u" -#: access/gist/gistutil.c:795 access/hash/hashutil.c:249 -#: access/hash/hashutil.c:261 access/nbtree/nbtpage.c:716 +#: access/gist/gistutil.c:794 access/hash/hashutil.c:235 +#: access/hash/hashutil.c:247 access/nbtree/nbtpage.c:749 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "индекс \"%s\" содержит испорченную страницу в блоке %u" -#: access/gist/gistvalidate.c:196 +#: access/gist/gistvalidate.c:199 #, c-format msgid "" "operator family \"%s\" of access method %s contains unsupported ORDER BY " @@ -883,7 +994,7 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит неподдерживаемое " "определение ORDER BY для оператора %s" -#: access/gist/gistvalidate.c:207 +#: access/gist/gistvalidate.c:210 #, c-format msgid "" "operator family \"%s\" of access method %s contains incorrect ORDER BY " @@ -893,20 +1004,21 @@ msgstr "" "определение ORDER BY для оператора %s" #: access/hash/hashfunc.c:255 access/hash/hashfunc.c:311 -#: utils/adt/varchar.c:994 utils/adt/varchar.c:1054 +#: utils/adt/varchar.c:993 utils/adt/varchar.c:1053 #, c-format msgid "could not determine which collation to use for string hashing" msgstr "" "не удалось определить, какое правило сортировки использовать для хеширования " "строк" -#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:704 -#: catalog/heap.c:710 commands/createas.c:207 commands/createas.c:491 -#: commands/indexcmds.c:1715 commands/tablecmds.c:15325 commands/view.c:105 -#: regex/regc_pg_locale.c:263 utils/adt/formatting.c:1562 -#: utils/adt/formatting.c:1686 utils/adt/formatting.c:1811 utils/adt/like.c:194 -#: utils/adt/like_support.c:968 utils/adt/varchar.c:734 utils/adt/varchar.c:995 -#: utils/adt/varchar.c:1055 utils/adt/varlena.c:1464 +#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:711 +#: catalog/heap.c:717 commands/createas.c:206 commands/createas.c:489 +#: commands/indexcmds.c:1816 commands/tablecmds.c:16057 commands/view.c:86 +#: parser/parse_utilcmd.c:4228 regex/regc_pg_locale.c:263 +#: utils/adt/formatting.c:1667 utils/adt/formatting.c:1791 +#: utils/adt/formatting.c:1916 utils/adt/like.c:194 +#: utils/adt/like_support.c:1003 utils/adt/varchar.c:733 +#: utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1486 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Задайте правило сортировки явно в предложении COLLATE." @@ -917,7 +1029,7 @@ msgid "index row size %zu exceeds hash maximum %zu" msgstr "размер строки индекса (%zu) больше предельного размера хеша (%zu)" #: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:1961 -#: access/spgist/spgutils.c:752 +#: access/spgist/spgutils.c:764 #, c-format msgid "Values larger than a buffer page cannot be indexed." msgstr "Значения, не умещающиеся в страницу буфера, нельзя проиндексировать." @@ -937,17 +1049,17 @@ msgstr "в хеш-индексе \"%s\" не хватает страниц пе msgid "hash indexes do not support whole-index scans" msgstr "хеш-индексы не поддерживают сканирование всего индекса" -#: access/hash/hashutil.c:277 +#: access/hash/hashutil.c:263 #, c-format msgid "index \"%s\" is not a hash index" msgstr "индекс \"%s\" не является хеш-индексом" -#: access/hash/hashutil.c:283 +#: access/hash/hashutil.c:269 #, c-format msgid "index \"%s\" has wrong hash version" msgstr "индекс \"%s\" имеет неправильную версию хеша" -#: access/hash/hashvalidate.c:191 +#: access/hash/hashvalidate.c:195 #, c-format msgid "" "operator family \"%s\" of access method %s lacks support function for " @@ -956,45 +1068,45 @@ msgstr "" "в семействе операторов \"%s\" метода доступа %s не хватает опорной функции " "для оператора %s" -#: access/hash/hashvalidate.c:249 access/nbtree/nbtvalidate.c:266 +#: access/hash/hashvalidate.c:253 access/nbtree/nbtvalidate.c:273 #, c-format msgid "" "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "" "в семействе операторов \"%s\" метода доступа %s нет межтипового оператора(ов)" -#: access/heap/heapam.c:2063 +#: access/heap/heapam.c:2036 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "вставлять кортежи в параллельном исполнителе нельзя" -#: access/heap/heapam.c:2473 +#: access/heap/heapam.c:2454 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "удалять кортежи во время параллельных операций нельзя" -#: access/heap/heapam.c:2519 +#: access/heap/heapam.c:2500 #, c-format msgid "attempted to delete invisible tuple" msgstr "попытка удаления невидимого кортежа" -#: access/heap/heapam.c:2945 access/heap/heapam.c:5726 +#: access/heap/heapam.c:2926 access/heap/heapam.c:5715 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "изменять кортежи во время параллельных операций нельзя" -#: access/heap/heapam.c:3078 +#: access/heap/heapam.c:3059 #, c-format msgid "attempted to update invisible tuple" msgstr "попытка изменения невидимого кортежа" -#: access/heap/heapam.c:4390 access/heap/heapam.c:4428 -#: access/heap/heapam.c:4685 access/heap/heapam_handler.c:454 +#: access/heap/heapam.c:4370 access/heap/heapam.c:4408 +#: access/heap/heapam.c:4665 access/heap/heapam_handler.c:450 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "не удалось получить блокировку строки в таблице \"%s\"" -#: access/heap/heapam_handler.c:405 +#: access/heap/heapam_handler.c:399 #, c-format msgid "" "tuple to be locked was already moved to another partition due to concurrent " @@ -1003,75 +1115,63 @@ msgstr "" "кортеж, подлежащий блокировке, был перемещён в другую секцию в результате " "параллельного изменения" -#: access/heap/hio.c:345 access/heap/rewriteheap.c:681 +#: access/heap/hio.c:345 access/heap/rewriteheap.c:662 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "размер строки (%zu) превышает предел (%zu)" -#: access/heap/rewriteheap.c:941 +#: access/heap/rewriteheap.c:921 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "не удалось записать в файл \"%s\" (записано байт: %d из %d): %m" -#: access/heap/rewriteheap.c:1035 access/heap/rewriteheap.c:1154 -#: access/transam/timeline.c:314 access/transam/timeline.c:468 -#: access/transam/xlog.c:3252 access/transam/xlog.c:3424 -#: access/transam/xlog.c:4544 access/transam/xlog.c:10556 -#: access/transam/xlog.c:10594 access/transam/xlog.c:10999 -#: access/transam/xlogfuncs.c:736 postmaster/postmaster.c:4530 -#: replication/logical/origin.c:576 replication/slot.c:1261 -#: storage/file/copydir.c:167 storage/smgr/md.c:204 utils/time/snapmgr.c:1329 +#: access/heap/rewriteheap.c:1015 access/heap/rewriteheap.c:1134 +#: access/transam/timeline.c:329 access/transam/timeline.c:485 +#: access/transam/xlog.c:3300 access/transam/xlog.c:3472 +#: access/transam/xlog.c:4670 access/transam/xlog.c:10849 +#: access/transam/xlog.c:10887 access/transam/xlog.c:11292 +#: access/transam/xlogfuncs.c:735 postmaster/postmaster.c:4619 +#: replication/logical/origin.c:575 replication/slot.c:1446 +#: storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1329 #, c-format msgid "could not create file \"%s\": %m" msgstr "создать файл \"%s\" не удалось: %m" -#: access/heap/rewriteheap.c:1164 +#: access/heap/rewriteheap.c:1144 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "не удалось обрезать файл \"%s\" до нужного размера (%u): %m" -#: access/heap/rewriteheap.c:1172 replication/walsender.c:493 -#: storage/smgr/md.c:1237 -#, c-format -msgid "could not seek to end of file \"%s\": %m" -msgstr "не удалось перейти к концу файла \"%s\": %m" - -#: access/heap/rewriteheap.c:1189 access/transam/timeline.c:369 -#: access/transam/timeline.c:408 access/transam/timeline.c:485 -#: access/transam/xlog.c:3308 access/transam/xlog.c:3480 -#: access/transam/xlog.c:4556 postmaster/postmaster.c:4540 -#: postmaster/postmaster.c:4550 replication/logical/origin.c:588 -#: replication/logical/origin.c:630 replication/logical/origin.c:649 -#: replication/logical/snapbuild.c:1627 replication/slot.c:1295 -#: storage/file/copydir.c:207 utils/init/miscinit.c:1345 -#: utils/init/miscinit.c:1356 utils/init/miscinit.c:1364 utils/misc/guc.c:7771 -#: utils/misc/guc.c:7802 utils/misc/guc.c:9723 utils/misc/guc.c:9737 -#: utils/time/snapmgr.c:1334 utils/time/snapmgr.c:1341 +#: access/heap/rewriteheap.c:1162 access/transam/timeline.c:384 +#: access/transam/timeline.c:424 access/transam/timeline.c:502 +#: access/transam/xlog.c:3356 access/transam/xlog.c:3528 +#: access/transam/xlog.c:4682 postmaster/postmaster.c:4629 +#: postmaster/postmaster.c:4639 replication/logical/origin.c:587 +#: replication/logical/origin.c:629 replication/logical/origin.c:648 +#: replication/logical/snapbuild.c:1622 replication/slot.c:1481 +#: storage/file/buffile.c:502 storage/file/copydir.c:207 +#: utils/init/miscinit.c:1391 utils/init/miscinit.c:1402 +#: utils/init/miscinit.c:1410 utils/misc/guc.c:8024 utils/misc/guc.c:8055 +#: utils/misc/guc.c:9975 utils/misc/guc.c:9989 utils/time/snapmgr.c:1334 +#: utils/time/snapmgr.c:1341 #, c-format msgid "could not write to file \"%s\": %m" msgstr "записать в файл \"%s\" не удалось: %m" -#: access/heap/rewriteheap.c:1279 access/transam/twophase.c:1661 -#: access/transam/xlogarchive.c:119 access/transam/xlogarchive.c:466 -#: postmaster/postmaster.c:1277 postmaster/syslogger.c:1466 -#: replication/logical/origin.c:564 replication/logical/reorderbuffer.c:2837 -#: replication/logical/snapbuild.c:1569 replication/logical/snapbuild.c:2011 -#: replication/slot.c:1383 storage/file/fd.c:704 storage/file/fd.c:3000 -#: storage/file/fd.c:3062 storage/file/reinit.c:255 storage/ipc/dsm.c:307 -#: storage/smgr/md.c:298 storage/smgr/md.c:354 storage/sync/sync.c:210 +#: access/heap/rewriteheap.c:1252 access/transam/twophase.c:1609 +#: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:421 +#: postmaster/postmaster.c:1092 postmaster/syslogger.c:1465 +#: replication/logical/origin.c:563 replication/logical/reorderbuffer.c:3079 +#: replication/logical/snapbuild.c:1564 replication/logical/snapbuild.c:2009 +#: replication/slot.c:1578 storage/file/fd.c:754 storage/file/fd.c:3116 +#: storage/file/fd.c:3178 storage/file/reinit.c:255 storage/ipc/dsm.c:302 +#: storage/smgr/md.c:355 storage/smgr/md.c:405 storage/sync/sync.c:210 #: utils/time/snapmgr.c:1674 #, c-format msgid "could not remove file \"%s\": %m" msgstr "не удалось стереть файл \"%s\": %m" -# skip-rule: capital-letter-first -#: access/heap/vacuumlazy.c:267 -#, c-format -msgid "skipping redundant vacuum to prevent wraparound of table \"%s.%s.%s\"" -msgstr "" -"пропускается очистка, предотвращающая зацикливание, для таблицы \"%s.%s.%s\"" - -#: access/heap/vacuumlazy.c:405 +#: access/heap/vacuumlazy.c:648 #, c-format msgid "" "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": " @@ -1080,20 +1180,29 @@ msgstr "" "автоматическая агрессивная очистка, предотвращающая зацикливание, таблицы " "\"%s.%s.%s\": сканирований индекса: %d\n" -#: access/heap/vacuumlazy.c:410 +#: access/heap/vacuumlazy.c:650 +#, c-format +msgid "" +"automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: " +"%d\n" +msgstr "" +"автоматическая очистка, предотвращающая зацикливание, таблицы \"%s.%s.%s\": " +"сканирований индекса: %d\n" + +#: access/heap/vacuumlazy.c:655 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "" "автоматическая агрессивная очистка таблицы \"%s.%s.%s\": сканирований " "индекса: %d\n" -#: access/heap/vacuumlazy.c:412 +#: access/heap/vacuumlazy.c:657 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "" "автоматическая очистка таблицы \"%s.%s.%s\": сканирований индекса: %d\n" -#: access/heap/vacuumlazy.c:419 +#: access/heap/vacuumlazy.c:664 #, c-format msgid "" "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n" @@ -1101,7 +1210,7 @@ msgstr "" "страниц удалено: %u, осталось: %u, пропущено закреплённых: %u, пропущено " "замороженных: %u\n" -#: access/heap/vacuumlazy.c:425 +#: access/heap/vacuumlazy.c:670 #, c-format msgid "" "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable, " @@ -1110,50 +1219,66 @@ msgstr "" "версий строк: удалено: %.0f, осталось: %.0f, «мёртвых», но ещё не подлежащих " "удалению: %.0f, старейший xmin: %u\n" -#: access/heap/vacuumlazy.c:431 +#: access/heap/vacuumlazy.c:676 #, c-format -msgid "buffer usage: %d hits, %d misses, %d dirtied\n" +msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" msgstr "" -"использование буфера: попаданий: %d, промахов: %d, «грязных» записей: %d\n" +"использование буфера: попаданий: %lld, промахов: %lld, «грязных» записей: " +"%lld\n" -#: access/heap/vacuumlazy.c:435 +#: access/heap/vacuumlazy.c:680 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "" "средняя скорость чтения: %.3f МБ/с, средняя скорость записи: %.3f МБ/с\n" -#: access/heap/vacuumlazy.c:437 +#: access/heap/vacuumlazy.c:682 +#, c-format +msgid "system usage: %s\n" +msgstr "нагрузка системы: %s\n" + +#: access/heap/vacuumlazy.c:684 #, c-format -msgid "system usage: %s" -msgstr "нагрузка системы: %s" +msgid "WAL usage: %ld records, %ld full page images, %llu bytes" +msgstr "" +"использование WAL: записей: %ld, полных образов страниц: %ld, байт: %llu" -#: access/heap/vacuumlazy.c:533 +#: access/heap/vacuumlazy.c:795 #, c-format msgid "aggressively vacuuming \"%s.%s\"" msgstr "агрессивная очистка \"%s.%s\"" -#: access/heap/vacuumlazy.c:538 commands/cluster.c:910 +#: access/heap/vacuumlazy.c:800 commands/cluster.c:874 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "очистка \"%s.%s\"" -#: access/heap/vacuumlazy.c:1476 +#: access/heap/vacuumlazy.c:837 +#, c-format +msgid "" +"disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary " +"tables in parallel" +msgstr "" +"отключение параллельного режима очистки \"%s\" --- создавать временные " +"таблицы в параллельном режиме нельзя" + +#: access/heap/vacuumlazy.c:1725 #, c-format msgid "\"%s\": removed %.0f row versions in %u pages" msgstr "\"%s\": удалено версий строк: %.0f, обработано страниц: %u" -#: access/heap/vacuumlazy.c:1486 +#: access/heap/vacuumlazy.c:1735 #, c-format msgid "%.0f dead row versions cannot be removed yet, oldest xmin: %u\n" msgstr "" "В данный момент нельзя удалить \"мёртвых\" строк: %.0f, старейший xmin: %u\n" -#: access/heap/vacuumlazy.c:1488 +#: access/heap/vacuumlazy.c:1737 #, c-format msgid "There were %.0f unused item identifiers.\n" msgstr "Найдено неиспользованных идентификаторов элементов: %.0f.\n" -#: access/heap/vacuumlazy.c:1490 +#: access/heap/vacuumlazy.c:1739 #, c-format msgid "Skipped %u page due to buffer pins, " msgid_plural "Skipped %u pages due to buffer pins, " @@ -1161,7 +1286,7 @@ msgstr[0] "Пропущено страниц, закреплённых в буф msgstr[1] "Пропущено страниц, закреплённых в буфере: %u," msgstr[2] "Пропущено страниц, закреплённых в буфере: %u," -#: access/heap/vacuumlazy.c:1494 +#: access/heap/vacuumlazy.c:1743 #, c-format msgid "%u frozen page.\n" msgid_plural "%u frozen pages.\n" @@ -1169,7 +1294,7 @@ msgstr[0] "замороженных страниц: %u.\n" msgstr[1] "замороженных страниц: %u.\n" msgstr[2] "замороженных страниц: %u.\n" -#: access/heap/vacuumlazy.c:1498 +#: access/heap/vacuumlazy.c:1747 #, c-format msgid "%u page is entirely empty.\n" msgid_plural "%u pages are entirely empty.\n" @@ -1177,13 +1302,13 @@ msgstr[0] "Полностью пустых страниц: %u.\n" msgstr[1] "Полностью пустых страниц: %u.\n" msgstr[2] "Полностью пустых страниц: %u.\n" -#: access/heap/vacuumlazy.c:1502 commands/indexcmds.c:3354 -#: commands/indexcmds.c:3372 +#: access/heap/vacuumlazy.c:1751 commands/indexcmds.c:3490 +#: commands/indexcmds.c:3508 #, c-format msgid "%s." msgstr "%s." -#: access/heap/vacuumlazy.c:1505 +#: access/heap/vacuumlazy.c:1754 #, c-format msgid "" "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u " @@ -1192,22 +1317,52 @@ msgstr "" "\"%s\": найдено удаляемых версий строк: %.0f, неудаляемых - %.0f, обработано " "страниц: %u, всего страниц: %u" -#: access/heap/vacuumlazy.c:1574 +#: access/heap/vacuumlazy.c:1888 #, c-format msgid "\"%s\": removed %d row versions in %d pages" msgstr "\"%s\": удалено версий строк: %d, обработано страниц: %d" -#: access/heap/vacuumlazy.c:1765 +#: access/heap/vacuumlazy.c:2143 +#, c-format +msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" +msgid_plural "" +"launched %d parallel vacuum workers for index cleanup (planned: %d)" +msgstr[0] "" +"запущен %d параллельный процесс очистки для уборки индекса (планировалось: " +"%d)" +msgstr[1] "" +"запущено %d параллельных процесса очистки для уборки индекса (планировалось: " +"%d)" +msgstr[2] "" +"запущено %d параллельных процессов очистки для уборки индекса " +"(планировалось: %d)" + +#: access/heap/vacuumlazy.c:2149 +#, c-format +msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" +msgid_plural "" +"launched %d parallel vacuum workers for index vacuuming (planned: %d)" +msgstr[0] "" +"запущен %d параллельный процесс очистки для очистки индекса (планировалось: " +"%d)" +msgstr[1] "" +"запущен %d параллельных процесса очистки для очистки индекса (планировалось: " +"%d)" +msgstr[2] "" +"запущено %d параллельных процессов очистки для очистки индекса " +"(планировалось: %d)" + +#: access/heap/vacuumlazy.c:2440 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "просканирован индекс \"%s\", удалено версий строк: %d" -#: access/heap/vacuumlazy.c:1818 +#: access/heap/vacuumlazy.c:2494 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "индекс \"%s\" теперь содержит версий строк: %.0f, в страницах: %u" -#: access/heap/vacuumlazy.c:1822 +#: access/heap/vacuumlazy.c:2498 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -1218,22 +1373,57 @@ msgstr "" "Удалено индексных страниц: %u, пригодно для повторного использования: %u.\n" "%s." -#: access/heap/vacuumlazy.c:1920 +#: access/heap/vacuumlazy.c:2601 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "\"%s\": остановка усечения из-за конфликтующего запроса блокировки" -#: access/heap/vacuumlazy.c:1985 +#: access/heap/vacuumlazy.c:2667 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "\"%s\": усечение (было страниц: %u, стало: %u)" -#: access/heap/vacuumlazy.c:2050 +#: access/heap/vacuumlazy.c:2732 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "\"%s\": приостановка усечения из-за конфликтующего запроса блокировки" -#: access/index/amapi.c:83 commands/amcmds.c:167 +#: access/heap/vacuumlazy.c:3581 +#, c-format +msgid "while scanning block %u of relation \"%s.%s\"" +msgstr "при сканировании блока %u отношения \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3584 +#, c-format +msgid "while scanning relation \"%s.%s\"" +msgstr "при сканировании отношения \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3590 +#, c-format +msgid "while vacuuming block %u of relation \"%s.%s\"" +msgstr "при очистке блока %u отношения \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3593 +#, c-format +msgid "while vacuuming relation \"%s.%s\"" +msgstr "при очистке отношения \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3598 +#, c-format +msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" +msgstr "при очистке индекса \"%s\" отношения \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3603 +#, c-format +msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" +msgstr "при уборке индекса \"%s\" отношения \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3609 +#, c-format +msgid "while truncating relation \"%s.%s\" to %u blocks" +msgstr "при усечении отношения \"%s.%s\" до %u блок." + +#: access/index/amapi.c:83 commands/amcmds.c:170 #, c-format msgid "access method \"%s\" is not of type %s" msgstr "метод доступа \"%s\" имеет не тип %s" @@ -1243,40 +1433,40 @@ msgstr "метод доступа \"%s\" имеет не тип %s" msgid "index access method \"%s\" does not have a handler" msgstr "для метода доступа индекса \"%s\" не задан обработчик" -#: access/index/indexam.c:136 catalog/objectaddress.c:1259 -#: commands/indexcmds.c:2431 commands/tablecmds.c:250 commands/tablecmds.c:274 -#: commands/tablecmds.c:15020 commands/tablecmds.c:16483 +#: access/index/indexam.c:142 catalog/objectaddress.c:1260 +#: commands/indexcmds.c:2518 commands/tablecmds.c:254 commands/tablecmds.c:278 +#: commands/tablecmds.c:15755 commands/tablecmds.c:17210 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\" - это не индекс" -#: access/nbtree/nbtinsert.c:565 +#: access/index/indexam.c:970 +#, c-format +msgid "operator class %s has no options" +msgstr "у класса операторов %s нет параметров" + +#: access/nbtree/nbtinsert.c:651 #, c-format msgid "duplicate key value violates unique constraint \"%s\"" msgstr "повторяющееся значение ключа нарушает ограничение уникальности \"%s\"" -#: access/nbtree/nbtinsert.c:567 +#: access/nbtree/nbtinsert.c:653 #, c-format msgid "Key %s already exists." msgstr "Ключ \"%s\" уже существует." -#: access/nbtree/nbtinsert.c:638 -#, c-format -msgid "failed to re-find tuple within index \"%s\"" -msgstr "не удалось повторно найти кортеж в индексе \"%s\"" - -#: access/nbtree/nbtinsert.c:640 +#: access/nbtree/nbtinsert.c:747 #, c-format msgid "This may be because of a non-immutable index expression." msgstr "Возможно, это вызвано переменной природой индексного выражения." -#: access/nbtree/nbtpage.c:135 access/nbtree/nbtpage.c:521 -#: parser/parse_utilcmd.c:2117 +#: access/nbtree/nbtpage.c:150 access/nbtree/nbtpage.c:538 +#: parser/parse_utilcmd.c:2268 #, c-format msgid "index \"%s\" is not a btree" msgstr "индекс \"%s\" не является b-деревом" -#: access/nbtree/nbtpage.c:142 access/nbtree/nbtpage.c:528 +#: access/nbtree/nbtpage.c:157 access/nbtree/nbtpage.c:545 #, c-format msgid "" "version mismatch in index \"%s\": file version %d, current version %d, " @@ -1285,12 +1475,12 @@ msgstr "" "несовпадение версии в индексе \"%s\": версия файла: %d, версия кода: %d, " "минимальная поддерживаемая версия: %d" -#: access/nbtree/nbtpage.c:1349 +#: access/nbtree/nbtpage.c:1501 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "индекс \"%s\" содержит полумёртвую внутреннюю страницу" -#: access/nbtree/nbtpage.c:1351 +#: access/nbtree/nbtpage.c:1503 #, c-format msgid "" "This can be caused by an interrupted VACUUM in version 9.3 or older, before " @@ -1299,7 +1489,7 @@ msgstr "" "Причиной тому могло быть прерывание операции VACUUM в версии 9.3 или старее, " "до обновления. Этот индекс нужно перестроить (REINDEX)." -#: access/nbtree/nbtutils.c:2563 +#: access/nbtree/nbtutils.c:2664 #, c-format msgid "" "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" @@ -1307,12 +1497,12 @@ msgstr "" "размер строки индекса (%zu) больше предельного для btree версии %u размера " "(%zu) (индекс \"%s\")" -#: access/nbtree/nbtutils.c:2569 +#: access/nbtree/nbtutils.c:2670 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "Строка индекса ссылается на кортеж (%u,%u) в отношении \"%s\"." -#: access/nbtree/nbtutils.c:2573 +#: access/nbtree/nbtutils.c:2674 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1324,7 +1514,7 @@ msgstr "" "Возможно, вам стоит применить индекс функции с MD5-хешем значения или " "полнотекстовую индексацию." -#: access/nbtree/nbtvalidate.c:236 +#: access/nbtree/nbtvalidate.c:243 #, c-format msgid "" "operator family \"%s\" of access method %s is missing support function for " @@ -1333,7 +1523,7 @@ msgstr "" "в семействе операторов \"%s\" метода доступа %s нет опорной функции для " "типов %s и %s" -#: access/spgist/spgutils.c:142 +#: access/spgist/spgutils.c:147 #, c-format msgid "" "compress method must be defined when leaf type is different from input type" @@ -1341,12 +1531,12 @@ msgstr "" "метод сжатия должен быть определён, когда тип листьев отличается от входного " "типа" -#: access/spgist/spgutils.c:749 +#: access/spgist/spgutils.c:761 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "внутренний размер кортежа SP-GiST (%zu) превышает максимум (%zu)" -#: access/spgist/spgvalidate.c:276 +#: access/spgist/spgvalidate.c:281 #, c-format msgid "" "operator family \"%s\" of access method %s is missing support function %d " @@ -1356,18 +1546,18 @@ msgstr "" "типа %s" #: access/table/table.c:49 access/table/table.c:78 access/table/table.c:111 -#: catalog/aclchk.c:1832 +#: catalog/aclchk.c:1809 #, c-format msgid "\"%s\" is an index" msgstr "\"%s\" - это индекс" #: access/table/table.c:54 access/table/table.c:83 access/table/table.c:116 -#: catalog/aclchk.c:1839 commands/tablecmds.c:11831 commands/tablecmds.c:15029 +#: catalog/aclchk.c:1816 commands/tablecmds.c:12572 commands/tablecmds.c:15764 #, c-format msgid "\"%s\" is a composite type" msgstr "\"%s\" - это составной тип" -#: access/table/tableam.c:236 +#: access/table/tableam.c:244 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "идентификатор кортежа (%u, %u) недопустим для отношения \"%s\"" @@ -1378,7 +1568,7 @@ msgid "%s cannot be empty." msgstr "Значение %s не может быть пустым." # well-spelled: симв -#: access/table/tableamapi.c:122 utils/misc/guc.c:11686 +#: access/table/tableamapi.c:122 utils/misc/guc.c:11956 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "Длина %s превышает предел (%d симв.)." @@ -1420,7 +1610,7 @@ msgstr "" msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Убедитесь, что в конфигурации установлен параметр \"%s\"." -#: access/transam/multixact.c:1000 +#: access/transam/multixact.c:1002 #, c-format msgid "" "database is not accepting commands that generate new MultiXactIds to avoid " @@ -1429,8 +1619,8 @@ msgstr "" "база данных не принимает команды, создающие новые MultiXactId, во избежание " "потери данных из-за зацикливания в базе данных \"%s\"" -#: access/transam/multixact.c:1002 access/transam/multixact.c:1009 -#: access/transam/multixact.c:1033 access/transam/multixact.c:1042 +#: access/transam/multixact.c:1004 access/transam/multixact.c:1011 +#: access/transam/multixact.c:1035 access/transam/multixact.c:1044 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1441,7 +1631,7 @@ msgstr "" "Возможно, вам также придётся зафиксировать или откатить старые " "подготовленные транзакции и удалить неиспользуемые слоты репликации." -#: access/transam/multixact.c:1007 +#: access/transam/multixact.c:1009 #, c-format msgid "" "database is not accepting commands that generate new MultiXactIds to avoid " @@ -1450,7 +1640,7 @@ msgstr "" "база данных не принимает команды, создающие новые MultiXactId, во избежание " "потери данных из-за зацикливания в базе данных с OID %u" -#: access/transam/multixact.c:1028 access/transam/multixact.c:2318 +#: access/transam/multixact.c:1030 access/transam/multixact.c:2322 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "" @@ -1465,7 +1655,7 @@ msgstr[2] "" "база данных \"%s\" должна быть очищена, прежде чем будут использованы " "оставшиеся MultiXactId (%u)" -#: access/transam/multixact.c:1037 access/transam/multixact.c:2327 +#: access/transam/multixact.c:1039 access/transam/multixact.c:2331 #, c-format msgid "" "database with OID %u must be vacuumed before %u more MultiXactId is used" @@ -1481,12 +1671,12 @@ msgstr[2] "" "база данных с OID %u должна быть очищена, прежде чем будут использованы " "оставшиеся MultiXactId (%u)" -#: access/transam/multixact.c:1098 +#: access/transam/multixact.c:1100 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "слишком много членов мультитранзакции" -#: access/transam/multixact.c:1099 +#: access/transam/multixact.c:1101 #, c-format msgid "" "This command would create a multixact with %u members, but the remaining " @@ -1504,7 +1694,7 @@ msgstr[2] "" "Мультитранзакция, создаваемая этой командой, должна включать членов: %u, но " "оставшегося места хватает только для %u." -#: access/transam/multixact.c:1104 +#: access/transam/multixact.c:1106 #, c-format msgid "" "Execute a database-wide VACUUM in database with OID %u with reduced " @@ -1514,7 +1704,7 @@ msgstr "" "Выполните очистку (VACUUM) всей базы данных с OID %u, уменьшив значения " "vacuum_multixact_freeze_min_age и vacuum_multixact_freeze_table_age." -#: access/transam/multixact.c:1135 +#: access/transam/multixact.c:1137 #, c-format msgid "" "database with OID %u must be vacuumed before %d more multixact member is used" @@ -1531,7 +1721,7 @@ msgstr[2] "" "база данных с OID %u должна быть очищена, пока не использованы оставшиеся " "члены мультитранзакций (%d)" -#: access/transam/multixact.c:1140 +#: access/transam/multixact.c:1142 #, c-format msgid "" "Execute a database-wide VACUUM in that database with reduced " @@ -1541,24 +1731,24 @@ msgstr "" "Выполните очистку (VACUUM) всей этой базы данных, уменьшив значения " "vacuum_multixact_freeze_min_age и vacuum_multixact_freeze_table_age." -#: access/transam/multixact.c:1277 +#: access/transam/multixact.c:1279 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u прекратил существование: видимо, произошло зацикливание" -#: access/transam/multixact.c:1285 +#: access/transam/multixact.c:1287 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %u ещё не был создан: видимо, произошло зацикливание" -#: access/transam/multixact.c:2268 +#: access/transam/multixact.c:2272 #, c-format msgid "MultiXactId wrap limit is %u, limited by database with OID %u" msgstr "" "предел зацикливания MultiXactId равен %u, источник ограничения - база данных " "с OID %u" -#: access/transam/multixact.c:2323 access/transam/multixact.c:2332 +#: access/transam/multixact.c:2327 access/transam/multixact.c:2336 #: access/transam/varsup.c:149 access/transam/varsup.c:156 #: access/transam/varsup.c:447 access/transam/varsup.c:454 #, c-format @@ -1572,12 +1762,12 @@ msgstr "" "Возможно, вам также придётся зафиксировать или откатить старые " "подготовленные транзакции и удалить неиспользуемые слоты репликации." -#: access/transam/multixact.c:2602 +#: access/transam/multixact.c:2606 #, c-format msgid "oldest MultiXactId member is at offset %u" msgstr "смещение членов старейшей мультитранзакции: %u" -#: access/transam/multixact.c:2606 +#: access/transam/multixact.c:2610 #, c-format msgid "" "MultiXact member wraparound protections are disabled because oldest " @@ -1586,19 +1776,19 @@ msgstr "" "Защита от зацикливания членов мультитранзакций отключена, так как старейшая " "отмеченная мультитранзакция %u не найдена на диске" -#: access/transam/multixact.c:2628 +#: access/transam/multixact.c:2632 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "Защита от зацикливания мультитранзакций сейчас включена" -#: access/transam/multixact.c:2631 +#: access/transam/multixact.c:2635 #, c-format msgid "MultiXact member stop limit is now %u based on MultiXact %u" msgstr "" "Граница членов мультитранзакции сейчас: %u (при старейшей мультитранзакции " "%u)" -#: access/transam/multixact.c:3011 +#: access/transam/multixact.c:3023 #, c-format msgid "" "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" @@ -1606,7 +1796,7 @@ msgstr "" "старейшая мультитранзакция %u не найдена, новейшая мультитранзакция: %u, " "усечение пропускается" -#: access/transam/multixact.c:3029 +#: access/transam/multixact.c:3041 #, c-format msgid "" "cannot truncate up to MultiXact %u because it does not exist on disk, " @@ -1615,204 +1805,204 @@ msgstr "" "выполнить усечение до мультитранзакции %u нельзя ввиду её отсутствия на " "диске, усечение пропускается" -#: access/transam/multixact.c:3343 +#: access/transam/multixact.c:3355 #, c-format msgid "invalid MultiXactId: %u" msgstr "неверный MultiXactId: %u" -#: access/transam/parallel.c:673 access/transam/parallel.c:792 +#: access/transam/parallel.c:706 access/transam/parallel.c:825 #, c-format msgid "parallel worker failed to initialize" msgstr "не удалось инициализировать параллельный исполнитель" -#: access/transam/parallel.c:674 access/transam/parallel.c:793 +#: access/transam/parallel.c:707 access/transam/parallel.c:826 #, c-format msgid "More details may be available in the server log." msgstr "Дополнительная информация может быть в журнале сервера." -#: access/transam/parallel.c:854 +#: access/transam/parallel.c:887 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster завершился в процессе параллельной транзакции" -#: access/transam/parallel.c:1041 +#: access/transam/parallel.c:1074 #, c-format msgid "lost connection to parallel worker" msgstr "потеряно подключение к параллельному исполнителю" -#: access/transam/parallel.c:1107 access/transam/parallel.c:1109 +#: access/transam/parallel.c:1140 access/transam/parallel.c:1142 msgid "parallel worker" msgstr "параллельный исполнитель" -#: access/transam/parallel.c:1259 +#: access/transam/parallel.c:1293 #, c-format msgid "could not map dynamic shared memory segment" msgstr "не удалось отобразить динамический сегмент разделяемой памяти" -#: access/transam/parallel.c:1264 +#: access/transam/parallel.c:1298 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "неверное магическое число в динамическом сегменте разделяемой памяти" -#: access/transam/slru.c:674 +#: access/transam/slru.c:696 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "файл \"%s\" не существует, считается нулевым" -#: access/transam/slru.c:912 access/transam/slru.c:918 -#: access/transam/slru.c:926 access/transam/slru.c:931 -#: access/transam/slru.c:938 access/transam/slru.c:943 -#: access/transam/slru.c:950 access/transam/slru.c:957 +#: access/transam/slru.c:937 access/transam/slru.c:943 +#: access/transam/slru.c:951 access/transam/slru.c:956 +#: access/transam/slru.c:963 access/transam/slru.c:968 +#: access/transam/slru.c:975 access/transam/slru.c:982 #, c-format msgid "could not access status of transaction %u" msgstr "не удалось получить состояние транзакции %u" -#: access/transam/slru.c:913 +#: access/transam/slru.c:938 #, c-format msgid "Could not open file \"%s\": %m." msgstr "Не удалось открыть файл \"%s\": %m." -#: access/transam/slru.c:919 +#: access/transam/slru.c:944 #, c-format msgid "Could not seek in file \"%s\" to offset %u: %m." msgstr "Не удалось переместиться в файле \"%s\" к смещению %u: %m." -#: access/transam/slru.c:927 +#: access/transam/slru.c:952 #, c-format msgid "Could not read from file \"%s\" at offset %u: %m." msgstr "Не удалось прочитать файл \"%s\" (по смещению %u): %m." -#: access/transam/slru.c:932 +#: access/transam/slru.c:957 #, c-format msgid "Could not read from file \"%s\" at offset %u: read too few bytes." msgstr "" "Не удалось прочитать файл \"%s\" (по смещению %u): прочитаны не все байты." -#: access/transam/slru.c:939 +#: access/transam/slru.c:964 #, c-format msgid "Could not write to file \"%s\" at offset %u: %m." msgstr "Не удалось записать в файл \"%s\" (по смещению %u): %m." -#: access/transam/slru.c:944 +#: access/transam/slru.c:969 #, c-format msgid "Could not write to file \"%s\" at offset %u: wrote too few bytes." msgstr "" "Не удалось записать в файл \"%s\" (по смещению %u): записаны не все байты." -#: access/transam/slru.c:951 +#: access/transam/slru.c:976 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "Не удалось синхронизировать с ФС файл \"%s\": %m." -#: access/transam/slru.c:958 +#: access/transam/slru.c:983 #, c-format msgid "Could not close file \"%s\": %m." msgstr "Не удалось закрыть файл \"%s\": %m." -#: access/transam/slru.c:1215 +#: access/transam/slru.c:1251 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "не удалось очистить каталог \"%s\": видимо, произошло зацикливание" -#: access/transam/slru.c:1270 access/transam/slru.c:1326 +#: access/transam/slru.c:1309 access/transam/slru.c:1365 #, c-format msgid "removing file \"%s\"" msgstr "удаляется файл \"%s\"" -#: access/transam/timeline.c:148 access/transam/timeline.c:153 +#: access/transam/timeline.c:163 access/transam/timeline.c:168 #, c-format msgid "syntax error in history file: %s" msgstr "синтаксическая ошибка в файле истории: %s" -#: access/transam/timeline.c:149 +#: access/transam/timeline.c:164 #, c-format msgid "Expected a numeric timeline ID." msgstr "Ожидается числовой идентификатор линии времени." -#: access/transam/timeline.c:154 +#: access/transam/timeline.c:169 #, c-format msgid "Expected a write-ahead log switchpoint location." msgstr "Ожидается положение точки переключения журнала предзаписи." -#: access/transam/timeline.c:158 +#: access/transam/timeline.c:173 #, c-format msgid "invalid data in history file: %s" msgstr "неверные данные в файле истории: %s" -#: access/transam/timeline.c:159 +#: access/transam/timeline.c:174 #, c-format msgid "Timeline IDs must be in increasing sequence." msgstr "Идентификаторы линий времени должны возрастать." -#: access/transam/timeline.c:179 +#: access/transam/timeline.c:194 #, c-format msgid "invalid data in history file \"%s\"" msgstr "неверные данные в файле истории \"%s\"" -#: access/transam/timeline.c:180 +#: access/transam/timeline.c:195 #, c-format msgid "Timeline IDs must be less than child timeline's ID." msgstr "" "Идентификаторы линий времени должны быть меньше идентификатора линии-потомка." -#: access/transam/timeline.c:580 +#: access/transam/timeline.c:597 #, c-format msgid "requested timeline %u is not in this server's history" msgstr "в истории сервера нет запрошенной линии времени %u" -#: access/transam/twophase.c:382 +#: access/transam/twophase.c:381 #, c-format msgid "transaction identifier \"%s\" is too long" msgstr "идентификатор транзакции \"%s\" слишком длинный" -#: access/transam/twophase.c:389 +#: access/transam/twophase.c:388 #, c-format msgid "prepared transactions are disabled" msgstr "подготовленные транзакции отключены" -#: access/transam/twophase.c:390 +#: access/transam/twophase.c:389 #, c-format msgid "Set max_prepared_transactions to a nonzero value." msgstr "Установите ненулевое значение параметра max_prepared_transactions." -#: access/transam/twophase.c:409 +#: access/transam/twophase.c:408 #, c-format msgid "transaction identifier \"%s\" is already in use" msgstr "идентификатор транзакции \"%s\" уже используется" -#: access/transam/twophase.c:418 access/transam/twophase.c:2420 +#: access/transam/twophase.c:417 access/transam/twophase.c:2368 #, c-format msgid "maximum number of prepared transactions reached" msgstr "достигнут предел числа подготовленных транзакций" -#: access/transam/twophase.c:419 access/transam/twophase.c:2421 +#: access/transam/twophase.c:418 access/transam/twophase.c:2369 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "Увеличьте параметр max_prepared_transactions (текущее значение %d)." -#: access/transam/twophase.c:587 +#: access/transam/twophase.c:586 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "подготовленная транзакция с идентификатором \"%s\" занята" -#: access/transam/twophase.c:593 +#: access/transam/twophase.c:592 #, c-format msgid "permission denied to finish prepared transaction" msgstr "нет доступа для завершения подготовленной транзакции" -#: access/transam/twophase.c:594 +#: access/transam/twophase.c:593 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "" "Это разрешено только суперпользователю и пользователю, подготовившему " "транзакцию." -#: access/transam/twophase.c:605 +#: access/transam/twophase.c:604 #, c-format msgid "prepared transaction belongs to another database" msgstr "подготовленная транзакция относится к другой базе данных" -#: access/transam/twophase.c:606 +#: access/transam/twophase.c:605 #, c-format msgid "" "Connect to the database where the transaction was prepared to finish it." @@ -1821,17 +2011,17 @@ msgstr "" "подготовлена." # [SM]: TO REVIEW -#: access/transam/twophase.c:621 +#: access/transam/twophase.c:620 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "подготовленной транзакции с идентификатором \"%s\" нет" -#: access/transam/twophase.c:1115 +#: access/transam/twophase.c:1098 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "превышен предельный размер файла состояния 2PC" -#: access/transam/twophase.c:1269 +#: access/transam/twophase.c:1252 #, c-format msgid "incorrect size of file \"%s\": %zu byte" msgid_plural "incorrect size of file \"%s\": %zu bytes" @@ -1839,51 +2029,51 @@ msgstr[0] "некорректный размер файла \"%s\": %zu Б" msgstr[1] "некорректный размер файла \"%s\": %zu Б" msgstr[2] "некорректный размер файла \"%s\": %zu Б" -#: access/transam/twophase.c:1278 +#: access/transam/twophase.c:1261 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" msgstr "некорректное выравнивание смещения CRC для файла \"%s\"" -#: access/transam/twophase.c:1311 +#: access/transam/twophase.c:1294 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "в файле \"%s\" содержится неверная сигнатура" -#: access/transam/twophase.c:1317 +#: access/transam/twophase.c:1300 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "в файле \"%s\" содержится неверный размер" -#: access/transam/twophase.c:1329 +#: access/transam/twophase.c:1312 #, c-format msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "" "вычисленная контрольная сумма (CRC) не соответствует значению, сохранённому " "в файле \"%s\"" -#: access/transam/twophase.c:1395 access/transam/xlog.c:6364 +#: access/transam/twophase.c:1342 access/transam/xlog.c:6488 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Не удалось разместить обработчик журнала транзакций." -#: access/transam/twophase.c:1401 +#: access/transam/twophase.c:1349 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "не удалось прочитать состояние 2PC из WAL в позиции %X/%X" -#: access/transam/twophase.c:1409 +#: access/transam/twophase.c:1357 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "" "ожидаемые данные состояния двухфазной фиксации отсутствуют в WAL в позиции " "%X/%X" -#: access/transam/twophase.c:1689 +#: access/transam/twophase.c:1637 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "пересоздать файл \"%s\" не удалось: %m" -#: access/transam/twophase.c:1816 +#: access/transam/twophase.c:1764 #, c-format msgid "" "%u two-phase state file was written for a long-running prepared transaction" @@ -1896,37 +2086,37 @@ msgstr[1] "" msgstr[2] "" "для длительных подготовленных транзакций записано файлов состояния 2PC: %u" -#: access/transam/twophase.c:2050 +#: access/transam/twophase.c:1998 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "восстановление подготовленной транзакции %u из разделяемой памяти" -#: access/transam/twophase.c:2141 +#: access/transam/twophase.c:2089 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "удаление устаревшего файла состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2148 +#: access/transam/twophase.c:2096 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "удаление из памяти устаревшего состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2161 +#: access/transam/twophase.c:2109 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "удаление файла будущего состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2168 +#: access/transam/twophase.c:2116 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "удаление из памяти будущего состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2193 +#: access/transam/twophase.c:2141 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "испорчен файл состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2198 +#: access/transam/twophase.c:2146 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "испорчено состояние 2PC в памяти для транзакции %u" @@ -1980,28 +2170,28 @@ msgstr "" "предел зацикливания ID транзакций равен %u, источник ограничения - база " "данных с OID %u" -#: access/transam/xact.c:1027 +#: access/transam/xact.c:1030 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "в одной транзакции не может быть больше 2^32-2 команд" -#: access/transam/xact.c:1552 +#: access/transam/xact.c:1555 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "превышен предел числа зафиксированных подтранзакций (%d)" -#: access/transam/xact.c:2378 +#: access/transam/xact.c:2396 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "" "нельзя выполнить PREPARE для транзакции, оперирующей с временными объектами" -#: access/transam/xact.c:2388 +#: access/transam/xact.c:2406 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "нельзя выполнить PREPARE для транзакции, снимки которой экспортированы" -#: access/transam/xact.c:2397 +#: access/transam/xact.c:2415 #, c-format msgid "" "cannot PREPARE a transaction that has manipulated logical replication workers" @@ -2010,153 +2200,153 @@ msgstr "" "репликации" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3338 +#: access/transam/xact.c:3360 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s не может выполняться внутри блока транзакции" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3348 +#: access/transam/xact.c:3370 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s не может выполняться внутри подтранзакции" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3358 +#: access/transam/xact.c:3380 #, c-format msgid "%s cannot be executed from a function" msgstr "%s нельзя выполнять внутри функции" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3427 access/transam/xact.c:3734 -#: access/transam/xact.c:3813 access/transam/xact.c:3936 -#: access/transam/xact.c:4087 access/transam/xact.c:4156 -#: access/transam/xact.c:4267 +#: access/transam/xact.c:3449 access/transam/xact.c:3755 +#: access/transam/xact.c:3834 access/transam/xact.c:3957 +#: access/transam/xact.c:4108 access/transam/xact.c:4177 +#: access/transam/xact.c:4288 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s может выполняться только внутри блоков транзакций" -#: access/transam/xact.c:3620 +#: access/transam/xact.c:3641 #, c-format msgid "there is already a transaction in progress" msgstr "транзакция уже выполняется" -#: access/transam/xact.c:3739 access/transam/xact.c:3818 -#: access/transam/xact.c:3941 +#: access/transam/xact.c:3760 access/transam/xact.c:3839 +#: access/transam/xact.c:3962 #, c-format msgid "there is no transaction in progress" msgstr "нет незавершённой транзакции" -#: access/transam/xact.c:3829 +#: access/transam/xact.c:3850 #, c-format msgid "cannot commit during a parallel operation" msgstr "фиксировать транзакции во время параллельных операций нельзя" -#: access/transam/xact.c:3952 +#: access/transam/xact.c:3973 #, c-format msgid "cannot abort during a parallel operation" msgstr "прерывание во время параллельных операций невозможно" -#: access/transam/xact.c:4051 +#: access/transam/xact.c:4072 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "определять точки сохранения во время параллельных операций нельзя" -#: access/transam/xact.c:4138 +#: access/transam/xact.c:4159 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "высвобождать точки сохранения во время параллельных операций нельзя" -#: access/transam/xact.c:4148 access/transam/xact.c:4199 -#: access/transam/xact.c:4259 access/transam/xact.c:4308 +#: access/transam/xact.c:4169 access/transam/xact.c:4220 +#: access/transam/xact.c:4280 access/transam/xact.c:4329 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "точка сохранения \"%s\" не существует" -#: access/transam/xact.c:4205 access/transam/xact.c:4314 +#: access/transam/xact.c:4226 access/transam/xact.c:4335 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "" "точка сохранения \"%s\" на текущем уровне точек сохранения не существует" -#: access/transam/xact.c:4247 +#: access/transam/xact.c:4268 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "откатиться к точке сохранения во время параллельных операций нельзя" -#: access/transam/xact.c:4375 +#: access/transam/xact.c:4396 #, c-format msgid "cannot start subtransactions during a parallel operation" msgstr "запускать подтранзакции во время параллельных операций нельзя" -#: access/transam/xact.c:4443 +#: access/transam/xact.c:4464 #, c-format msgid "cannot commit subtransactions during a parallel operation" msgstr "фиксировать подтранзакции во время параллельных операций нельзя" -#: access/transam/xact.c:5081 +#: access/transam/xact.c:5104 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "в одной транзакции не может быть больше 2^32-1 подтранзакций" -#: access/transam/xlog.c:2506 +#: access/transam/xlog.c:2554 #, c-format msgid "could not write to log file %s at offset %u, length %zu: %m" msgstr "не удалось записать в файл журнала %s (смещение: %u, длина: %zu): %m" -#: access/transam/xlog.c:2782 +#: access/transam/xlog.c:2830 #, c-format msgid "updated min recovery point to %X/%X on timeline %u" msgstr "минимальная точка восстановления изменена на %X/%X на линии времени %u" -#: access/transam/xlog.c:3863 access/transam/xlogutils.c:703 -#: replication/walsender.c:2445 +#: access/transam/xlog.c:3944 access/transam/xlogutils.c:802 +#: replication/walsender.c:2503 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "запрошенный сегмент WAL %s уже удалён" -#: access/transam/xlog.c:4105 +#: access/transam/xlog.c:4187 #, c-format msgid "recycled write-ahead log file \"%s\"" msgstr "файл журнала предзаписи \"%s\" используется повторно" -#: access/transam/xlog.c:4117 +#: access/transam/xlog.c:4199 #, c-format msgid "removing write-ahead log file \"%s\"" msgstr "файл журнала предзаписи \"%s\" удаляется" -#: access/transam/xlog.c:4137 +#: access/transam/xlog.c:4219 #, c-format msgid "could not rename file \"%s\": %m" msgstr "не удалось переименовать файл \"%s\": %m" -#: access/transam/xlog.c:4179 access/transam/xlog.c:4189 +#: access/transam/xlog.c:4261 access/transam/xlog.c:4271 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "требуемый каталог WAL \"%s\" не существует" -#: access/transam/xlog.c:4195 +#: access/transam/xlog.c:4277 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "создаётся отсутствующий каталог WAL \"%s\"" -#: access/transam/xlog.c:4198 +#: access/transam/xlog.c:4280 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "не удалось создать отсутствующий каталог \"%s\": %m" -#: access/transam/xlog.c:4303 +#: access/transam/xlog.c:4383 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "неожиданный ID линии времени %u в сегменте журнала %s, смещение %u" -#: access/transam/xlog.c:4431 +#: access/transam/xlog.c:4521 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "" "новая линия времени %u не является ответвлением линии времени системы БД %u" -#: access/transam/xlog.c:4445 +#: access/transam/xlog.c:4535 #, c-format msgid "" "new timeline %u forked off current database system timeline %u before " @@ -2165,25 +2355,29 @@ msgstr "" "новая линия времени %u ответвилась от текущей линии времени базы данных %u " "до текущей точки восстановления %X/%X" -#: access/transam/xlog.c:4464 +#: access/transam/xlog.c:4554 #, c-format msgid "new target timeline is %u" msgstr "новая целевая линия времени %u" -#: access/transam/xlog.c:4623 access/transam/xlog.c:4632 -#: access/transam/xlog.c:4656 access/transam/xlog.c:4663 -#: access/transam/xlog.c:4670 access/transam/xlog.c:4675 -#: access/transam/xlog.c:4682 access/transam/xlog.c:4689 -#: access/transam/xlog.c:4696 access/transam/xlog.c:4703 -#: access/transam/xlog.c:4710 access/transam/xlog.c:4717 -#: access/transam/xlog.c:4726 access/transam/xlog.c:4733 -#: access/transam/xlog.c:4742 access/transam/xlog.c:4749 -#: utils/init/miscinit.c:1502 +#: access/transam/xlog.c:4590 +#, c-format +msgid "could not generate secret authorization token" +msgstr "не удалось сгенерировать случайное число для аутентификации" + +#: access/transam/xlog.c:4749 access/transam/xlog.c:4758 +#: access/transam/xlog.c:4782 access/transam/xlog.c:4789 +#: access/transam/xlog.c:4796 access/transam/xlog.c:4801 +#: access/transam/xlog.c:4808 access/transam/xlog.c:4815 +#: access/transam/xlog.c:4822 access/transam/xlog.c:4829 +#: access/transam/xlog.c:4836 access/transam/xlog.c:4843 +#: access/transam/xlog.c:4852 access/transam/xlog.c:4859 +#: utils/init/miscinit.c:1548 #, c-format msgid "database files are incompatible with server" msgstr "файлы базы данных не совместимы с сервером" -#: access/transam/xlog.c:4624 +#: access/transam/xlog.c:4750 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), " @@ -2192,7 +2386,7 @@ msgstr "" "Кластер баз данных был инициализирован с PG_CONTROL_VERSION %d (0x%08x), но " "сервер скомпилирован с PG_CONTROL_VERSION %d (0x%08x)." -#: access/transam/xlog.c:4628 +#: access/transam/xlog.c:4754 #, c-format msgid "" "This could be a problem of mismatched byte ordering. It looks like you need " @@ -2201,7 +2395,7 @@ msgstr "" "Возможно, проблема вызвана разным порядком байт. Кажется, вам надо выполнить " "initdb." -#: access/transam/xlog.c:4633 +#: access/transam/xlog.c:4759 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d, but the " @@ -2210,18 +2404,18 @@ msgstr "" "Кластер баз данных был инициализирован с PG_CONTROL_VERSION %d, но сервер " "скомпилирован с PG_CONTROL_VERSION %d." -#: access/transam/xlog.c:4636 access/transam/xlog.c:4660 -#: access/transam/xlog.c:4667 access/transam/xlog.c:4672 +#: access/transam/xlog.c:4762 access/transam/xlog.c:4786 +#: access/transam/xlog.c:4793 access/transam/xlog.c:4798 #, c-format msgid "It looks like you need to initdb." msgstr "Кажется, вам надо выполнить initdb." -#: access/transam/xlog.c:4647 +#: access/transam/xlog.c:4773 #, c-format msgid "incorrect checksum in control file" msgstr "ошибка контрольной суммы в файле pg_control" -#: access/transam/xlog.c:4657 +#: access/transam/xlog.c:4783 #, c-format msgid "" "The database cluster was initialized with CATALOG_VERSION_NO %d, but the " @@ -2230,7 +2424,7 @@ msgstr "" "Кластер баз данных был инициализирован с CATALOG_VERSION_NO %d, но сервер " "скомпилирован с CATALOG_VERSION_NO %d." -#: access/transam/xlog.c:4664 +#: access/transam/xlog.c:4790 #, c-format msgid "" "The database cluster was initialized with MAXALIGN %d, but the server was " @@ -2239,7 +2433,7 @@ msgstr "" "Кластер баз данных был инициализирован с MAXALIGN %d, но сервер " "скомпилирован с MAXALIGN %d." -#: access/transam/xlog.c:4671 +#: access/transam/xlog.c:4797 #, c-format msgid "" "The database cluster appears to use a different floating-point number format " @@ -2248,7 +2442,7 @@ msgstr "" "Кажется, в кластере баз данных и в программе сервера используются разные " "форматы чисел с плавающей точкой." -#: access/transam/xlog.c:4676 +#: access/transam/xlog.c:4802 #, c-format msgid "" "The database cluster was initialized with BLCKSZ %d, but the server was " @@ -2257,17 +2451,16 @@ msgstr "" "Кластер баз данных был инициализирован с BLCKSZ %d, но сервер скомпилирован " "с BLCKSZ %d." -#: access/transam/xlog.c:4679 access/transam/xlog.c:4686 -#: access/transam/xlog.c:4693 access/transam/xlog.c:4700 -#: access/transam/xlog.c:4707 access/transam/xlog.c:4714 -#: access/transam/xlog.c:4721 access/transam/xlog.c:4729 -#: access/transam/xlog.c:4736 access/transam/xlog.c:4745 -#: access/transam/xlog.c:4752 +#: access/transam/xlog.c:4805 access/transam/xlog.c:4812 +#: access/transam/xlog.c:4819 access/transam/xlog.c:4826 +#: access/transam/xlog.c:4833 access/transam/xlog.c:4840 +#: access/transam/xlog.c:4847 access/transam/xlog.c:4855 +#: access/transam/xlog.c:4862 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Кажется, вам надо перекомпилировать сервер или выполнить initdb." -#: access/transam/xlog.c:4683 +#: access/transam/xlog.c:4809 #, c-format msgid "" "The database cluster was initialized with RELSEG_SIZE %d, but the server was " @@ -2276,7 +2469,7 @@ msgstr "" "Кластер баз данных был инициализирован с RELSEG_SIZE %d, но сервер " "скомпилирован с RELSEG_SIZE %d." -#: access/transam/xlog.c:4690 +#: access/transam/xlog.c:4816 #, c-format msgid "" "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was " @@ -2285,7 +2478,7 @@ msgstr "" "Кластер баз данных был инициализирован с XLOG_BLCKSZ %d, но сервер " "скомпилирован с XLOG_BLCKSZ %d." -#: access/transam/xlog.c:4697 +#: access/transam/xlog.c:4823 #, c-format msgid "" "The database cluster was initialized with NAMEDATALEN %d, but the server was " @@ -2294,7 +2487,7 @@ msgstr "" "Кластер баз данных был инициализирован с NAMEDATALEN %d, но сервер " "скомпилирован с NAMEDATALEN %d." -#: access/transam/xlog.c:4704 +#: access/transam/xlog.c:4830 #, c-format msgid "" "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server " @@ -2303,7 +2496,7 @@ msgstr "" "Кластер баз данных был инициализирован с INDEX_MAX_KEYS %d, но сервер " "скомпилирован с INDEX_MAX_KEYS %d." -#: access/transam/xlog.c:4711 +#: access/transam/xlog.c:4837 #, c-format msgid "" "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the " @@ -2312,7 +2505,7 @@ msgstr "" "Кластер баз данных был инициализирован с TOAST_MAX_CHUNK_SIZE %d, но сервер " "скомпилирован с TOAST_MAX_CHUNK_SIZE %d." -#: access/transam/xlog.c:4718 +#: access/transam/xlog.c:4844 #, c-format msgid "" "The database cluster was initialized with LOBLKSIZE %d, but the server was " @@ -2321,25 +2514,7 @@ msgstr "" "Кластер баз данных был инициализирован с LOBLKSIZE %d, но сервер " "скомпилирован с LOBLKSIZE %d." -#: access/transam/xlog.c:4727 -#, c-format -msgid "" -"The database cluster was initialized without USE_FLOAT4_BYVAL but the server " -"was compiled with USE_FLOAT4_BYVAL." -msgstr "" -"Кластер баз данных был инициализирован без USE_FLOAT4_BYVAL, но сервер " -"скомпилирован с USE_FLOAT4_BYVAL." - -#: access/transam/xlog.c:4734 -#, c-format -msgid "" -"The database cluster was initialized with USE_FLOAT4_BYVAL but the server " -"was compiled without USE_FLOAT4_BYVAL." -msgstr "" -"Кластер баз данных был инициализирован с USE_FLOAT4_BYVAL, но сервер " -"скомпилирован без USE_FLOAT4_BYVAL." - -#: access/transam/xlog.c:4743 +#: access/transam/xlog.c:4853 #, c-format msgid "" "The database cluster was initialized without USE_FLOAT8_BYVAL but the server " @@ -2348,7 +2523,7 @@ msgstr "" "Кластер баз данных был инициализирован без USE_FLOAT8_BYVAL, но сервер " "скомпилирован с USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4750 +#: access/transam/xlog.c:4860 #, c-format msgid "" "The database cluster was initialized with USE_FLOAT8_BYVAL but the server " @@ -2357,7 +2532,7 @@ msgstr "" "Кластер баз данных был инициализирован с USE_FLOAT8_BYVAL, но сервер был " "скомпилирован без USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4759 +#: access/transam/xlog.c:4869 #, c-format msgid "" "WAL segment size must be a power of two between 1 MB and 1 GB, but the " @@ -2375,54 +2550,49 @@ msgstr[2] "" "размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " "ГБ, но в управляющем файле указано значение: %d" -#: access/transam/xlog.c:4771 +#: access/transam/xlog.c:4881 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "\"min_wal_size\" должен быть минимум вдвое больше \"wal_segment_size\"" -#: access/transam/xlog.c:4775 +#: access/transam/xlog.c:4885 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "\"max_wal_size\" должен быть минимум вдвое больше \"wal_segment_size\"" -#: access/transam/xlog.c:5127 -#, c-format -msgid "could not generate secret authorization token" -msgstr "не удалось сгенерировать случайное число для аутентификации" - -#: access/transam/xlog.c:5217 +#: access/transam/xlog.c:5318 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "не удалось записать начальный файл журнала предзаписи: %m" -#: access/transam/xlog.c:5225 +#: access/transam/xlog.c:5326 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "не удалось сбросить на диск начальный файл журнала предзаписи: %m" -#: access/transam/xlog.c:5231 +#: access/transam/xlog.c:5332 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "не удалось закрыть начальный файл журнала предзаписи: %m" -#: access/transam/xlog.c:5310 +#: access/transam/xlog.c:5393 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "" "использование файла с конфигурацией восстановления \"%s\" не поддерживается" -#: access/transam/xlog.c:5375 +#: access/transam/xlog.c:5458 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "" "режим резервного сервера не поддерживается однопользовательским сервером" -#: access/transam/xlog.c:5392 +#: access/transam/xlog.c:5475 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "не указано ни primary_conninfo, ни restore_command" -#: access/transam/xlog.c:5393 +#: access/transam/xlog.c:5476 #, c-format msgid "" "The database server will regularly poll the pg_wal subdirectory to check for " @@ -2431,78 +2601,88 @@ msgstr "" "Сервер БД будет регулярно опрашивать подкаталог pg_wal и проверять " "содержащиеся в нём файлы." -#: access/transam/xlog.c:5401 +#: access/transam/xlog.c:5484 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "" "необходимо задать restore_command, если не выбран режим резервного сервера" -#: access/transam/xlog.c:5439 +#: access/transam/xlog.c:5522 #, c-format msgid "recovery target timeline %u does not exist" msgstr "целевая линия времени для восстановления %u не существует" -#: access/transam/xlog.c:5554 +#: access/transam/xlog.c:5644 #, c-format msgid "archive recovery complete" msgstr "восстановление архива завершено" -#: access/transam/xlog.c:5620 access/transam/xlog.c:5893 +#: access/transam/xlog.c:5710 access/transam/xlog.c:5983 #, c-format msgid "recovery stopping after reaching consistency" msgstr "" "восстановление останавливается после достижения согласованного состояния" -#: access/transam/xlog.c:5641 +#: access/transam/xlog.c:5731 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "восстановление останавливается перед позицией в WAL (LSN) \"%X/%X\"" -#: access/transam/xlog.c:5727 +#: access/transam/xlog.c:5817 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "" "восстановление останавливается перед фиксированием транзакции %u, время %s" -#: access/transam/xlog.c:5734 +#: access/transam/xlog.c:5824 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "" "восстановление останавливается перед прерыванием транзакции %u, время %s" -#: access/transam/xlog.c:5787 +#: access/transam/xlog.c:5877 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "восстановление останавливается в точке восстановления \"%s\", время %s" -#: access/transam/xlog.c:5805 +#: access/transam/xlog.c:5895 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "восстановление останавливается после позиции в WAL (LSN) \"%X/%X\"" -#: access/transam/xlog.c:5873 +#: access/transam/xlog.c:5963 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "" "восстановление останавливается после фиксирования транзакции %u, время %s" -#: access/transam/xlog.c:5881 +#: access/transam/xlog.c:5971 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "" "восстановление останавливается после прерывания транзакции %u, время %s" -#: access/transam/xlog.c:5921 +#: access/transam/xlog.c:6020 +#, c-format +msgid "pausing at the end of recovery" +msgstr "остановка в конце восстановления" + +#: access/transam/xlog.c:6021 +#, c-format +msgid "Execute pg_wal_replay_resume() to promote." +msgstr "Выполните pg_wal_replay_resume() для повышения." + +#: access/transam/xlog.c:6024 #, c-format msgid "recovery has paused" msgstr "восстановление приостановлено" -#: access/transam/xlog.c:5922 +#: access/transam/xlog.c:6025 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Выполните pg_wal_replay_resume() для продолжения." -#: access/transam/xlog.c:6134 +#: access/transam/xlog.c:6236 #, c-format msgid "" "hot standby is not possible because %s = %d is a lower setting than on the " @@ -2511,12 +2691,12 @@ msgstr "" "режим горячего резерва невозможен, так как параметр %s = %d, меньше чем на " "главном сервере (на нём было значение %d)" -#: access/transam/xlog.c:6160 +#: access/transam/xlog.c:6260 #, c-format msgid "WAL was generated with wal_level=minimal, data may be missing" msgstr "WAL был создан с параметром wal_level=minimal, возможна потеря данных" -#: access/transam/xlog.c:6161 +#: access/transam/xlog.c:6261 #, c-format msgid "" "This happens if you temporarily set wal_level=minimal without taking a new " @@ -2525,7 +2705,7 @@ msgstr "" "Это происходит, если вы на время установили wal_level=minimal и не сделали " "резервную копию базу данных." -#: access/transam/xlog.c:6172 +#: access/transam/xlog.c:6272 #, c-format msgid "" "hot standby is not possible because wal_level was not set to \"replica\" or " @@ -2534,7 +2714,7 @@ msgstr "" "режим горячего резерва невозможен, так как на главном сервере установлен " "неподходящий wal_level (должен быть \"replica\" или выше)" -#: access/transam/xlog.c:6173 +#: access/transam/xlog.c:6273 #, c-format msgid "" "Either set wal_level to \"replica\" on the master, or turn off hot_standby " @@ -2543,32 +2723,32 @@ msgstr "" "Либо установите для wal_level значение \"replica\" на главном сервере, либо " "выключите hot_standby здесь." -#: access/transam/xlog.c:6237 +#: access/transam/xlog.c:6335 #, c-format -msgid "control file contains invalid data" -msgstr "файл pg_control содержит неверные данные" +msgid "control file contains invalid checkpoint location" +msgstr "файл pg_control содержит неправильную позицию контрольной точки" -#: access/transam/xlog.c:6243 +#: access/transam/xlog.c:6346 #, c-format msgid "database system was shut down at %s" msgstr "система БД была выключена: %s" -#: access/transam/xlog.c:6248 +#: access/transam/xlog.c:6352 #, c-format msgid "database system was shut down in recovery at %s" msgstr "система БД была выключена в процессе восстановления: %s" -#: access/transam/xlog.c:6252 +#: access/transam/xlog.c:6358 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "выключение системы БД было прервано; последний момент работы: %s" -#: access/transam/xlog.c:6256 +#: access/transam/xlog.c:6364 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "работа системы БД была прервана во время восстановления: %s" -#: access/transam/xlog.c:6258 +#: access/transam/xlog.c:6366 #, c-format msgid "" "This probably means that some data is corrupted and you will have to use the " @@ -2577,14 +2757,14 @@ msgstr "" "Это скорее всего означает, что некоторые данные повреждены и вам придётся " "восстановить БД из последней резервной копии." -#: access/transam/xlog.c:6262 +#: access/transam/xlog.c:6372 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "" "работа системы БД была прервана в процессе восстановления, время в журнале: " "%s" -#: access/transam/xlog.c:6264 +#: access/transam/xlog.c:6374 #, c-format msgid "" "If this has occurred more than once some data might be corrupted and you " @@ -2593,59 +2773,64 @@ msgstr "" "Если это происходит постоянно, возможно, какие-то данные были испорчены и " "для восстановления стоит выбрать более раннюю точку." -#: access/transam/xlog.c:6268 +#: access/transam/xlog.c:6380 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "работа системы БД была прервана; последний момент работы: %s" -#: access/transam/xlog.c:6324 +#: access/transam/xlog.c:6386 +#, c-format +msgid "control file contains invalid database cluster state" +msgstr "файл pg_control содержит неверный код состояния кластера" + +#: access/transam/xlog.c:6443 #, c-format msgid "entering standby mode" msgstr "переход в режим резервного сервера" -#: access/transam/xlog.c:6327 +#: access/transam/xlog.c:6446 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "начинается восстановление точки во времени до XID %u" -#: access/transam/xlog.c:6331 +#: access/transam/xlog.c:6450 #, c-format msgid "starting point-in-time recovery to %s" msgstr "начинается восстановление точки во времени до %s" -#: access/transam/xlog.c:6335 +#: access/transam/xlog.c:6454 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "начинается восстановление точки во времени до \"%s\"" -#: access/transam/xlog.c:6339 +#: access/transam/xlog.c:6458 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "" "начинается восстановление точки во времени до позиции в WAL (LSN) \"%X/%X\"" -#: access/transam/xlog.c:6344 +#: access/transam/xlog.c:6463 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "" "начинается восстановление точки во времени до первой точки согласованности" -#: access/transam/xlog.c:6347 +#: access/transam/xlog.c:6466 #, c-format msgid "starting archive recovery" msgstr "начинается восстановление архива" -#: access/transam/xlog.c:6401 access/transam/xlog.c:6533 +#: access/transam/xlog.c:6525 access/transam/xlog.c:6658 #, c-format msgid "checkpoint record is at %X/%X" msgstr "запись о контрольной точке по смещению %X/%X" -#: access/transam/xlog.c:6415 +#: access/transam/xlog.c:6540 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "не удалось найти положение REDO, указанное записью контрольной точки" -#: access/transam/xlog.c:6416 access/transam/xlog.c:6426 +#: access/transam/xlog.c:6541 access/transam/xlog.c:6551 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add " @@ -2661,42 +2846,42 @@ msgstr "" "Будьте осторожны: при восстановлении резервной копии удаление \"%s/" "backup_label\" приведёт к повреждению кластера." -#: access/transam/xlog.c:6425 +#: access/transam/xlog.c:6550 #, c-format msgid "could not locate required checkpoint record" msgstr "не удалось считать нужную запись контрольной точки" -#: access/transam/xlog.c:6454 commands/tablespace.c:655 +#: access/transam/xlog.c:6579 commands/tablespace.c:666 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "не удалось создать символическую ссылку \"%s\": %m" -#: access/transam/xlog.c:6486 access/transam/xlog.c:6492 +#: access/transam/xlog.c:6611 access/transam/xlog.c:6617 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "файл \"%s\" игнорируется ввиду отсутствия файла \"%s\"" -#: access/transam/xlog.c:6488 access/transam/xlog.c:11487 +#: access/transam/xlog.c:6613 access/transam/xlog.c:11808 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Файл \"%s\" был переименован в \"%s\"." -#: access/transam/xlog.c:6494 +#: access/transam/xlog.c:6619 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "Не удалось переименовать файл \"%s\" в \"%s\" (%m)." -#: access/transam/xlog.c:6545 +#: access/transam/xlog.c:6670 #, c-format msgid "could not locate a valid checkpoint record" msgstr "не удалось считать правильную запись контрольной точки" -#: access/transam/xlog.c:6583 +#: access/transam/xlog.c:6708 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "в истории сервера нет ответвления запрошенной линии времени %u" -#: access/transam/xlog.c:6585 +#: access/transam/xlog.c:6710 #, c-format msgid "" "Latest checkpoint is at %X/%X on timeline %u, but in the history of the " @@ -2705,7 +2890,7 @@ msgstr "" "Последняя контрольная точка: %X/%X на линии времени %u, но в истории " "запрошенной линии времени сервер ответвился с этой линии в %X/%X." -#: access/transam/xlog.c:6601 +#: access/transam/xlog.c:6726 #, c-format msgid "" "requested timeline %u does not contain minimum recovery point %X/%X on " @@ -2714,22 +2899,22 @@ msgstr "" "запрошенная линия времени %u не содержит минимальную точку восстановления %X/" "%X на линии времени %u" -#: access/transam/xlog.c:6632 +#: access/transam/xlog.c:6757 #, c-format msgid "invalid next transaction ID" msgstr "неверный ID следующей транзакции" -#: access/transam/xlog.c:6726 +#: access/transam/xlog.c:6851 #, c-format msgid "invalid redo in checkpoint record" msgstr "неверная запись REDO в контрольной точке" -#: access/transam/xlog.c:6737 +#: access/transam/xlog.c:6862 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "неверная запись REDO в контрольной точке выключения" -#: access/transam/xlog.c:6765 +#: access/transam/xlog.c:6896 #, c-format msgid "" "database system was not properly shut down; automatic recovery in progress" @@ -2737,19 +2922,19 @@ msgstr "" "система БД была остановлена нештатно; производится автоматическое " "восстановление" -#: access/transam/xlog.c:6769 +#: access/transam/xlog.c:6900 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "" "восстановление после сбоя начинается на линии времени %u, целевая линия " "времени: %u" -#: access/transam/xlog.c:6812 +#: access/transam/xlog.c:6947 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label содержит данные, не согласованные с файлом pg_control" -#: access/transam/xlog.c:6813 +#: access/transam/xlog.c:6948 #, c-format msgid "" "This means that the backup is corrupted and you will have to use another " @@ -2758,44 +2943,49 @@ msgstr "" "Это означает, что резервная копия повреждена и для восстановления БД " "придётся использовать другую копию." -#: access/transam/xlog.c:6904 +#: access/transam/xlog.c:7039 #, c-format msgid "initializing for hot standby" msgstr "инициализация для горячего резерва" -#: access/transam/xlog.c:7036 +#: access/transam/xlog.c:7172 #, c-format msgid "redo starts at %X/%X" msgstr "запись REDO начинается со смещения %X/%X" -#: access/transam/xlog.c:7260 +#: access/transam/xlog.c:7396 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "" "запрошенная точка остановки восстановления предшествует согласованной точке " "восстановления" -#: access/transam/xlog.c:7298 +#: access/transam/xlog.c:7434 #, c-format msgid "redo done at %X/%X" msgstr "записи REDO обработаны до смещения %X/%X" -#: access/transam/xlog.c:7303 +#: access/transam/xlog.c:7439 #, c-format msgid "last completed transaction was at log time %s" msgstr "последняя завершённая транзакция была выполнена в %s" -#: access/transam/xlog.c:7312 +#: access/transam/xlog.c:7448 #, c-format msgid "redo is not required" msgstr "данные REDO не требуются" -#: access/transam/xlog.c:7387 access/transam/xlog.c:7391 +#: access/transam/xlog.c:7460 +#, c-format +msgid "recovery ended before configured recovery target was reached" +msgstr "восстановление окончилось до достижения заданной цели восстановления" + +#: access/transam/xlog.c:7539 access/transam/xlog.c:7543 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL закончился без признака окончания копирования" -#: access/transam/xlog.c:7388 +#: access/transam/xlog.c:7540 #, c-format msgid "" "All WAL generated while online backup was taken must be available at " @@ -2804,7 +2994,7 @@ msgstr "" "Все журналы WAL, созданные во время резервного копирования \"на ходу\", " "должны быть в наличии для восстановления." -#: access/transam/xlog.c:7392 +#: access/transam/xlog.c:7544 #, c-format msgid "" "Online backup started with pg_start_backup() must be ended with " @@ -2814,82 +3004,82 @@ msgstr "" "должно закончиться pg_stop_backup(), и для восстановления должны быть " "доступны все журналы WAL." -#: access/transam/xlog.c:7395 +#: access/transam/xlog.c:7547 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL закончился до согласованной точки восстановления" -#: access/transam/xlog.c:7430 +#: access/transam/xlog.c:7582 #, c-format msgid "selected new timeline ID: %u" msgstr "выбранный ID новой линии времени: %u" -#: access/transam/xlog.c:7878 +#: access/transam/xlog.c:8030 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "согласованное состояние восстановления достигнуто по смещению %X/%X" -#: access/transam/xlog.c:8070 +#: access/transam/xlog.c:8240 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "неверная ссылка на первичную контрольную точку в файле pg_control" -#: access/transam/xlog.c:8074 +#: access/transam/xlog.c:8244 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "неверная ссылка на контрольную точку в файле backup_label" -#: access/transam/xlog.c:8091 +#: access/transam/xlog.c:8262 #, c-format msgid "invalid primary checkpoint record" msgstr "неверная запись первичной контрольной точки" -#: access/transam/xlog.c:8095 +#: access/transam/xlog.c:8266 #, c-format msgid "invalid checkpoint record" msgstr "неверная запись контрольной точки" -#: access/transam/xlog.c:8106 +#: access/transam/xlog.c:8277 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "неверный ID менеджера ресурсов в записи первичной контрольной точки" -#: access/transam/xlog.c:8110 +#: access/transam/xlog.c:8281 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "неверный ID менеджера ресурсов в записи контрольной точки" -#: access/transam/xlog.c:8123 +#: access/transam/xlog.c:8294 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "неверные флаги xl_info в записи первичной контрольной точки" -#: access/transam/xlog.c:8127 +#: access/transam/xlog.c:8298 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "неверные флаги xl_info в записи контрольной точки" -#: access/transam/xlog.c:8138 +#: access/transam/xlog.c:8309 #, c-format msgid "invalid length of primary checkpoint record" msgstr "неверная длина записи первичной контрольной точки" -#: access/transam/xlog.c:8142 +#: access/transam/xlog.c:8313 #, c-format msgid "invalid length of checkpoint record" msgstr "неверная длина записи контрольной точки" -#: access/transam/xlog.c:8322 +#: access/transam/xlog.c:8493 #, c-format msgid "shutting down" msgstr "выключение" -#: access/transam/xlog.c:8642 +#: access/transam/xlog.c:8799 #, c-format msgid "checkpoint skipped because system is idle" msgstr "контрольная точка пропущена ввиду простоя системы" -#: access/transam/xlog.c:8842 +#: access/transam/xlog.c:8999 #, c-format msgid "" "concurrent write-ahead log activity while database system is shutting down" @@ -2897,34 +3087,34 @@ msgstr "" "во время выключения системы баз данных отмечена активность в журнале " "предзаписи" -#: access/transam/xlog.c:9098 +#: access/transam/xlog.c:9256 #, c-format msgid "skipping restartpoint, recovery has already ended" msgstr "" "создание точки перезапуска пропускается, восстановление уже закончилось" -#: access/transam/xlog.c:9121 +#: access/transam/xlog.c:9279 #, c-format msgid "skipping restartpoint, already performed at %X/%X" msgstr "" "создание точки перезапуска пропускается, она уже создана по смещению %X/%X" -#: access/transam/xlog.c:9288 +#: access/transam/xlog.c:9447 #, c-format msgid "recovery restart point at %X/%X" msgstr "точка перезапуска восстановления по смещению %X/%X" -#: access/transam/xlog.c:9290 +#: access/transam/xlog.c:9449 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Последняя завершённая транзакция была выполнена в %s." -#: access/transam/xlog.c:9424 +#: access/transam/xlog.c:9691 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "точка восстановления \"%s\" создана по смещению %X/%X" -#: access/transam/xlog.c:9565 +#: access/transam/xlog.c:9836 #, c-format msgid "" "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint " @@ -2933,13 +3123,13 @@ msgstr "" "неожиданный ID предыдущей линии времени %u (ID текущей линии времени %u) в " "записи контрольной точки" -#: access/transam/xlog.c:9574 +#: access/transam/xlog.c:9845 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "неожиданный ID линии времени %u (после %u) в записи контрольной точки" # skip-rule: capital-letter-first -#: access/transam/xlog.c:9590 +#: access/transam/xlog.c:9861 #, c-format msgid "" "unexpected timeline ID %u in checkpoint record, before reaching minimum " @@ -2948,68 +3138,68 @@ msgstr "" "неожиданный ID линии времени %u в записи контрольной точки, до достижения " "минимальной к. т. %X/%X на линии времени %u" -#: access/transam/xlog.c:9666 +#: access/transam/xlog.c:9937 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "" "резервное копирование \"на ходу\" было отменено, продолжить восстановление " "нельзя" -#: access/transam/xlog.c:9720 access/transam/xlog.c:9774 -#: access/transam/xlog.c:9797 +#: access/transam/xlog.c:9993 access/transam/xlog.c:10049 +#: access/transam/xlog.c:10072 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "" "неожиданный ID линии времени %u (должен быть %u) в записи точки " "восстановления" -#: access/transam/xlog.c:10117 +#: access/transam/xlog.c:10398 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "не удалось синхронизировать с ФС файл сквозной записи %s: %m" -#: access/transam/xlog.c:10126 +#: access/transam/xlog.c:10404 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "не удалось синхронизировать с ФС данные (fdatasync) файла \"%s\": %m" -#: access/transam/xlog.c:10219 access/transam/xlog.c:10748 -#: access/transam/xlogfuncs.c:290 access/transam/xlogfuncs.c:317 -#: access/transam/xlogfuncs.c:356 access/transam/xlogfuncs.c:377 -#: access/transam/xlogfuncs.c:398 +#: access/transam/xlog.c:10503 access/transam/xlog.c:11041 +#: access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 +#: access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 +#: access/transam/xlogfuncs.c:383 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "Функции управления WAL нельзя использовать в процессе восстановления." -#: access/transam/xlog.c:10228 access/transam/xlog.c:10757 +#: access/transam/xlog.c:10512 access/transam/xlog.c:11050 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "" "Выбранный уровень WAL недостаточен для резервного копирования \"на ходу\"" -#: access/transam/xlog.c:10229 access/transam/xlog.c:10758 -#: access/transam/xlogfuncs.c:323 +#: access/transam/xlog.c:10513 access/transam/xlog.c:11051 +#: access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "Установите wal_level \"replica\" или \"logical\" при запуске сервера." -#: access/transam/xlog.c:10234 +#: access/transam/xlog.c:10518 #, c-format msgid "backup label too long (max %d bytes)" msgstr "длина метки резервной копии превышает предел (%d байт)" -#: access/transam/xlog.c:10271 access/transam/xlog.c:10547 -#: access/transam/xlog.c:10585 +#: access/transam/xlog.c:10555 access/transam/xlog.c:10840 +#: access/transam/xlog.c:10878 #, c-format msgid "a backup is already in progress" msgstr "резервное копирование уже выполняется" -#: access/transam/xlog.c:10272 +#: access/transam/xlog.c:10556 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Выполните pg_stop_backup() и повторите операцию." -#: access/transam/xlog.c:10368 +#: access/transam/xlog.c:10652 #, c-format msgid "" "WAL generated with full_page_writes=off was replayed since last restartpoint" @@ -3017,7 +3207,7 @@ msgstr "" "После последней точки перезапуска был воспроизведён WAL, созданный в режиме " "full_page_writes=off." -#: access/transam/xlog.c:10370 access/transam/xlog.c:10953 +#: access/transam/xlog.c:10654 access/transam/xlog.c:11246 #, c-format msgid "" "This means that the backup being taken on the standby is corrupt and should " @@ -3029,19 +3219,19 @@ msgstr "" "CHECKPOINT на главном сервере, а затем попробуйте резервное копирование \"на " "ходу\" ещё раз." -#: access/transam/xlog.c:10445 replication/basebackup.c:1251 -#: utils/adt/misc.c:329 +#: access/transam/xlog.c:10737 replication/basebackup.c:1423 +#: utils/adt/misc.c:342 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "целевой путь символической ссылки \"%s\" слишком длинный" -#: access/transam/xlog.c:10497 commands/tablespace.c:403 -#: commands/tablespace.c:567 replication/basebackup.c:1266 utils/adt/misc.c:337 +#: access/transam/xlog.c:10790 commands/tablespace.c:402 +#: commands/tablespace.c:578 replication/basebackup.c:1438 utils/adt/misc.c:350 #, c-format msgid "tablespaces are not supported on this platform" msgstr "табличные пространства не поддерживаются на этой платформе" -#: access/transam/xlog.c:10548 access/transam/xlog.c:10586 +#: access/transam/xlog.c:10841 access/transam/xlog.c:10879 #, c-format msgid "" "If you're sure there is no backup in progress, remove file \"%s\" and try " @@ -3050,31 +3240,31 @@ msgstr "" "Если вы считаете, что информация о резервном копировании неверна, удалите " "файл \"%s\" и попробуйте снова." -#: access/transam/xlog.c:10773 +#: access/transam/xlog.c:11066 #, c-format msgid "exclusive backup not in progress" msgstr "монопольное резервное копирование не выполняется" -#: access/transam/xlog.c:10800 +#: access/transam/xlog.c:11093 #, c-format msgid "a backup is not in progress" msgstr "резервное копирование не выполняется" -#: access/transam/xlog.c:10886 access/transam/xlog.c:10899 -#: access/transam/xlog.c:11260 access/transam/xlog.c:11266 -#: access/transam/xlog.c:11314 access/transam/xlog.c:11387 -#: access/transam/xlogfuncs.c:693 +#: access/transam/xlog.c:11179 access/transam/xlog.c:11192 +#: access/transam/xlog.c:11581 access/transam/xlog.c:11587 +#: access/transam/xlog.c:11635 access/transam/xlog.c:11708 +#: access/transam/xlogfuncs.c:692 #, c-format msgid "invalid data in file \"%s\"" msgstr "неверные данные в файле \"%s\"" -#: access/transam/xlog.c:10903 replication/basebackup.c:1103 +#: access/transam/xlog.c:11196 replication/basebackup.c:1271 #, c-format msgid "the standby was promoted during online backup" msgstr "" "дежурный сервер был повышен в процессе резервного копирования \"на ходу\"" -#: access/transam/xlog.c:10904 replication/basebackup.c:1104 +#: access/transam/xlog.c:11197 replication/basebackup.c:1272 #, c-format msgid "" "This means that the backup being taken is corrupt and should not be used. " @@ -3083,7 +3273,7 @@ msgstr "" "Это означает, что создаваемая резервная копия испорчена и использовать её не " "следует. Попробуйте резервное копирование \"на ходу\" ещё раз." -#: access/transam/xlog.c:10951 +#: access/transam/xlog.c:11244 #, c-format msgid "" "WAL generated with full_page_writes=off was replayed during online backup" @@ -3091,13 +3281,13 @@ msgstr "" "В процессе резервного копирования \"на ходу\" был воспроизведён WAL, " "созданный в режиме full_page_writes=off" -#: access/transam/xlog.c:11071 +#: access/transam/xlog.c:11364 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "" "базовое копирование выполнено, ожидается архивация нужных сегментов WAL" -#: access/transam/xlog.c:11081 +#: access/transam/xlog.c:11376 #, c-format msgid "" "still waiting for all required WAL segments to be archived (%d seconds " @@ -3105,7 +3295,7 @@ msgid "" msgstr "" "продолжается ожидание архивации всех нужных сегментов WAL (прошло %d сек.)" -#: access/transam/xlog.c:11083 +#: access/transam/xlog.c:11378 #, c-format msgid "" "Check that your archive_command is executing properly. You can safely " @@ -3116,12 +3306,12 @@ msgstr "" "копирования можно отменить безопасно, но резервная копия базы будет " "непригодна без всех сегментов WAL." -#: access/transam/xlog.c:11090 +#: access/transam/xlog.c:11385 #, c-format msgid "all required WAL segments have been archived" msgstr "все нужные сегменты WAL заархивированы" -#: access/transam/xlog.c:11094 +#: access/transam/xlog.c:11389 #, c-format msgid "" "WAL archiving is not enabled; you must ensure that all required WAL segments " @@ -3130,56 +3320,63 @@ msgstr "" "архивация WAL не настроена; вы должны обеспечить копирование всех требуемых " "сегментов WAL другими средствами для получения резервной копии" -#: access/transam/xlog.c:11297 +#: access/transam/xlog.c:11442 +#, c-format +msgid "aborting backup due to backend exiting before pg_stop_backup was called" +msgstr "" +"прерывание резервного копирования из-за завершения обслуживающего процесса " +"до вызова pg_stop_backup" + +#: access/transam/xlog.c:11618 #, c-format msgid "backup time %s in file \"%s\"" msgstr "время резервного копирования %s в файле \"%s\"" -#: access/transam/xlog.c:11302 +#: access/transam/xlog.c:11623 #, c-format msgid "backup label %s in file \"%s\"" msgstr "метка резервного копирования %s в файле \"%s\"" -#: access/transam/xlog.c:11315 +#: access/transam/xlog.c:11636 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "Получен идентификатор линии времени %u, но ожидался %u." -#: access/transam/xlog.c:11319 +#: access/transam/xlog.c:11640 #, c-format msgid "backup timeline %u in file \"%s\"" msgstr "линия времени резервной копии %u в файле \"%s\"" #. translator: %s is a WAL record description -#: access/transam/xlog.c:11427 +#: access/transam/xlog.c:11748 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "запись REDO в WAL в позиции %X/%X для %s" -#: access/transam/xlog.c:11476 +#: access/transam/xlog.c:11797 #, c-format msgid "online backup mode was not canceled" msgstr "режим копирования \"на ходу\" не был отменён" -#: access/transam/xlog.c:11477 +#: access/transam/xlog.c:11798 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "Не удалось переименовать файл \"%s\" в \"%s\": %m." -#: access/transam/xlog.c:11486 access/transam/xlog.c:11498 -#: access/transam/xlog.c:11508 +#: access/transam/xlog.c:11807 access/transam/xlog.c:11819 +#: access/transam/xlog.c:11829 #, c-format msgid "online backup mode canceled" msgstr "режим копирования \"на ходу\" отменён" -#: access/transam/xlog.c:11499 +#: access/transam/xlog.c:11820 #, c-format msgid "" "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "" "Файлы \"%s\" и \"%s\" были переименованы в \"%s\" и \"%s\", соответственно." -#: access/transam/xlog.c:11509 +#: access/transam/xlog.c:11830 #, c-format msgid "" "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to " @@ -3188,44 +3385,49 @@ msgstr "" "Файл \"%s\" был переименован в \"%s\", но переименовать \"%s\" в \"%s\" не " "удалось: %m." -#: access/transam/xlog.c:11642 +#: access/transam/xlog.c:11963 access/transam/xlogutils.c:971 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "не удалось прочитать сегмент журнала %s, смещение %u: %m" -#: access/transam/xlog.c:11648 replication/walsender.c:2489 +#: access/transam/xlog.c:11969 access/transam/xlogutils.c:978 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "" "не удалось прочитать из сегмента журнала %s по смещению %u (прочитано байт: " "%d из %zu)" -#: access/transam/xlog.c:12193 +#: access/transam/xlog.c:12495 +#, c-format +msgid "WAL receiver process shutdown requested" +msgstr "получен запрос на выключение процесса приёмника WAL" + +#: access/transam/xlog.c:12601 #, c-format msgid "received promote request" msgstr "получен запрос повышения статуса" -#: access/transam/xlog.c:12206 +#: access/transam/xlog.c:12614 #, c-format msgid "promote trigger file found: %s" msgstr "найден файл триггера повышения: %s" -#: access/transam/xlog.c:12215 +#: access/transam/xlog.c:12623 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "не удалось получить информацию о файле триггера повышения \"%s\": %m" -#: access/transam/xlogarchive.c:250 +#: access/transam/xlogarchive.c:205 #, c-format msgid "archive file \"%s\" has wrong size: %lu instead of %lu" msgstr "файл архива \"%s\" имеет неправильный размер: %lu вместо %lu" -#: access/transam/xlogarchive.c:259 +#: access/transam/xlogarchive.c:214 #, c-format msgid "restored log file \"%s\" from archive" msgstr "файл журнала \"%s\" восстановлен из архива" -#: access/transam/xlogarchive.c:304 +#: access/transam/xlogarchive.c:259 #, c-format msgid "could not restore file \"%s\" from archive: %s" msgstr "восстановить файл \"%s\" из архива не удалось: %s" @@ -3233,194 +3435,201 @@ msgstr "восстановить файл \"%s\" из архива не удал #. translator: First %s represents a postgresql.conf parameter name like #. "recovery_end_command", the 2nd is the value of that parameter, the #. third an already translated error message. -#: access/transam/xlogarchive.c:413 +#: access/transam/xlogarchive.c:368 #, c-format msgid "%s \"%s\": %s" msgstr "%s \"%s\": %s" -#: access/transam/xlogarchive.c:523 access/transam/xlogarchive.c:587 +#: access/transam/xlogarchive.c:478 access/transam/xlogarchive.c:542 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "не удалось создать файл состояния архива \"%s\": %m" -#: access/transam/xlogarchive.c:531 access/transam/xlogarchive.c:595 +#: access/transam/xlogarchive.c:486 access/transam/xlogarchive.c:550 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "не удалось записать файл состояния архива \"%s\": %m" -#: access/transam/xlogfuncs.c:57 -#, c-format -msgid "aborting backup due to backend exiting before pg_stop_backup was called" -msgstr "" -"прерывание резервного копирования из-за завершения обслуживающего процесса " -"до вызова pg_stop_backup" - -#: access/transam/xlogfuncs.c:87 +#: access/transam/xlogfuncs.c:74 #, c-format msgid "a backup is already in progress in this session" msgstr "резервное копирование уже выполняется в этом сеансе" -#: access/transam/xlogfuncs.c:145 access/transam/xlogfuncs.c:227 +#: access/transam/xlogfuncs.c:132 access/transam/xlogfuncs.c:213 #, c-format msgid "non-exclusive backup in progress" msgstr "выполняется не монопольное резервное копирование" -#: access/transam/xlogfuncs.c:146 access/transam/xlogfuncs.c:228 +#: access/transam/xlogfuncs.c:133 access/transam/xlogfuncs.c:214 #, c-format msgid "Did you mean to use pg_stop_backup('f')?" msgstr "Вероятно, подразумевалось pg_stop_backup('f')?" -#: access/transam/xlogfuncs.c:198 commands/event_trigger.c:1472 -#: commands/event_trigger.c:2024 commands/extension.c:1908 -#: commands/extension.c:2017 commands/extension.c:2241 commands/prepare.c:712 -#: executor/execExpr.c:2201 executor/execSRF.c:720 executor/functions.c:1023 -#: foreign/foreign.c:520 libpq/hba.c:2666 replication/logical/launcher.c:1112 -#: replication/logical/logicalfuncs.c:176 replication/logical/origin.c:1487 -#: replication/slotfuncs.c:236 replication/walsender.c:3246 -#: utils/adt/jsonfuncs.c:1700 utils/adt/jsonfuncs.c:1831 -#: utils/adt/jsonfuncs.c:2019 utils/adt/jsonfuncs.c:2146 -#: utils/adt/jsonfuncs.c:3608 utils/adt/pgstatfuncs.c:458 -#: utils/adt/pgstatfuncs.c:563 utils/fmgr/funcapi.c:63 utils/misc/guc.c:9423 -#: utils/mmgr/portalmem.c:1134 +#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1332 +#: commands/event_trigger.c:1890 commands/extension.c:1944 +#: commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:712 +#: executor/execExpr.c:2203 executor/execSRF.c:728 executor/functions.c:1040 +#: foreign/foreign.c:520 libpq/hba.c:2666 replication/logical/launcher.c:1086 +#: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1486 +#: replication/slotfuncs.c:252 replication/walsender.c:3258 +#: storage/ipc/shmem.c:550 utils/adt/datetime.c:4765 utils/adt/genfile.c:505 +#: utils/adt/genfile.c:588 utils/adt/jsonfuncs.c:1792 +#: utils/adt/jsonfuncs.c:1904 utils/adt/jsonfuncs.c:2092 +#: utils/adt/jsonfuncs.c:2201 utils/adt/jsonfuncs.c:3663 utils/adt/misc.c:215 +#: utils/adt/pgstatfuncs.c:476 utils/adt/pgstatfuncs.c:584 +#: utils/adt/pgstatfuncs.c:1719 utils/fmgr/funcapi.c:72 utils/misc/guc.c:9676 +#: utils/mmgr/portalmem.c:1136 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "" "функция, возвращающая множество, вызвана в контексте, где ему нет места" -#: access/transam/xlogfuncs.c:202 commands/event_trigger.c:1476 -#: commands/event_trigger.c:2028 commands/extension.c:1912 -#: commands/extension.c:2021 commands/extension.c:2245 commands/prepare.c:716 -#: foreign/foreign.c:525 libpq/hba.c:2670 replication/logical/launcher.c:1116 -#: replication/logical/logicalfuncs.c:180 replication/logical/origin.c:1491 -#: replication/slotfuncs.c:240 replication/walsender.c:3250 -#: utils/adt/pgstatfuncs.c:462 utils/adt/pgstatfuncs.c:567 -#: utils/misc/guc.c:9427 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1138 +#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1336 +#: commands/event_trigger.c:1894 commands/extension.c:1948 +#: commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:716 +#: foreign/foreign.c:525 libpq/hba.c:2670 replication/logical/launcher.c:1090 +#: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1490 +#: replication/slotfuncs.c:256 replication/walsender.c:3262 +#: storage/ipc/shmem.c:554 utils/adt/datetime.c:4769 utils/adt/genfile.c:509 +#: utils/adt/genfile.c:592 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:480 +#: utils/adt/pgstatfuncs.c:588 utils/adt/pgstatfuncs.c:1723 +#: utils/misc/guc.c:9680 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "требуется режим материализации, но он недопустим в этом контексте" -#: access/transam/xlogfuncs.c:244 +#: access/transam/xlogfuncs.c:230 #, c-format msgid "non-exclusive backup is not in progress" msgstr "немонопольное резервное копирование не выполняется" -#: access/transam/xlogfuncs.c:245 +#: access/transam/xlogfuncs.c:231 #, c-format msgid "Did you mean to use pg_stop_backup('t')?" msgstr "Вероятно, подразумевалось pg_stop_backup('t')?" -#: access/transam/xlogfuncs.c:322 +#: access/transam/xlogfuncs.c:307 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "Выбранный уровень WAL не достаточен для создания точки восстановления" # well-spelled: симв -#: access/transam/xlogfuncs.c:330 +#: access/transam/xlogfuncs.c:315 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "значение для точки восстановления превышает предел (%d симв.)" -#: access/transam/xlogfuncs.c:468 access/transam/xlogfuncs.c:525 +#: access/transam/xlogfuncs.c:453 access/transam/xlogfuncs.c:510 #, c-format msgid "%s cannot be executed during recovery." msgstr "выполнить %s во время восстановления нельзя." -#: access/transam/xlogfuncs.c:546 access/transam/xlogfuncs.c:566 -#: access/transam/xlogfuncs.c:583 access/transam/xlogfuncs.c:723 +#: access/transam/xlogfuncs.c:531 access/transam/xlogfuncs.c:558 +#: access/transam/xlogfuncs.c:582 access/transam/xlogfuncs.c:722 #, c-format msgid "recovery is not in progress" msgstr "восстановление не выполняется" -#: access/transam/xlogfuncs.c:547 access/transam/xlogfuncs.c:567 -#: access/transam/xlogfuncs.c:584 access/transam/xlogfuncs.c:724 +#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:559 +#: access/transam/xlogfuncs.c:583 access/transam/xlogfuncs.c:723 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "" "Функции управления восстановлением можно использовать только в процессе " "восстановления." -#: access/transam/xlogfuncs.c:729 +#: access/transam/xlogfuncs.c:537 access/transam/xlogfuncs.c:564 +#, c-format +msgid "standby promotion is ongoing" +msgstr "производится повышение ведомого" + +#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:565 +#, c-format +msgid "%s cannot be executed after promotion is triggered." +msgstr "%s нельзя выполнять, когда производится повышение." + +#: access/transam/xlogfuncs.c:728 #, c-format msgid "\"wait_seconds\" must not be negative or zero" msgstr "значение \"wait_seconds\" не должно быть отрицательным или нулевым" -#: access/transam/xlogfuncs.c:749 storage/ipc/signalfuncs.c:164 +#: access/transam/xlogfuncs.c:748 storage/ipc/signalfuncs.c:164 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "отправить сигнал процессу postmaster не удалось: %m" -#: access/transam/xlogfuncs.c:785 +#: access/transam/xlogfuncs.c:784 #, c-format msgid "server did not promote within %d seconds" msgstr "повышение сервера не завершилось за %d сек." -#: access/transam/xlogreader.c:299 +#: access/transam/xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "неверное смещение записи: %X/%X" -#: access/transam/xlogreader.c:307 +#: access/transam/xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "по смещению %X/%X запрошено продолжение записи" -#: access/transam/xlogreader.c:348 access/transam/xlogreader.c:645 +#: access/transam/xlogreader.c:398 access/transam/xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "неверная длина записи по смещению %X/%X: ожидалось %u, получено %u" -#: access/transam/xlogreader.c:372 +#: access/transam/xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "длина записи %u по смещению %X/%X слишком велика" -#: access/transam/xlogreader.c:404 +#: access/transam/xlogreader.c:454 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "нет флага contrecord в позиции %X/%X" -#: access/transam/xlogreader.c:417 +#: access/transam/xlogreader.c:467 #, c-format msgid "invalid contrecord length %u at %X/%X" msgstr "неверная длина contrecord (%u) в позиции %X/%X" -#: access/transam/xlogreader.c:653 +#: access/transam/xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "неверный ID менеджера ресурсов %u по смещению %X/%X" -#: access/transam/xlogreader.c:667 access/transam/xlogreader.c:684 +#: access/transam/xlogreader.c:717 access/transam/xlogreader.c:734 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "запись с неверной ссылкой назад %X/%X по смещению %X/%X" -#: access/transam/xlogreader.c:721 +#: access/transam/xlogreader.c:771 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "" "некорректная контрольная сумма данных менеджера ресурсов в записи по " "смещению %X/%X" -#: access/transam/xlogreader.c:758 +#: access/transam/xlogreader.c:808 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "неверное магическое число %04X в сегменте журнала %s, смещение %u" -#: access/transam/xlogreader.c:772 access/transam/xlogreader.c:823 +#: access/transam/xlogreader.c:822 access/transam/xlogreader.c:863 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "неверные информационные биты %04X в сегменте журнала %s, смещение %u" -#: access/transam/xlogreader.c:798 +#: access/transam/xlogreader.c:837 #, c-format msgid "" "WAL file is from different database system: WAL file database system " -"identifier is %s, pg_control database system identifier is %s" +"identifier is %llu, pg_control database system identifier is %llu" msgstr "" -"файл WAL принадлежит другой СУБД: в нём указан идентификатор системы БД %s, " -"а идентификатор системы pg_control: %s" +"файл WAL принадлежит другой СУБД: в нём указан идентификатор системы БД " +"%llu, а идентификатор системы pg_control: %llu" -#: access/transam/xlogreader.c:805 +#: access/transam/xlogreader.c:845 #, c-format msgid "" "WAL file is from different database system: incorrect segment size in page " @@ -3429,7 +3638,7 @@ msgstr "" "файл WAL принадлежит другой СУБД: некорректный размер сегмента в заголовке " "страницы" -#: access/transam/xlogreader.c:811 +#: access/transam/xlogreader.c:851 #, c-format msgid "" "WAL file is from different database system: incorrect XLOG_BLCKSZ in page " @@ -3438,35 +3647,35 @@ msgstr "" "файл WAL принадлежит другой СУБД: некорректный XLOG_BLCKSZ в заголовке " "страницы" -#: access/transam/xlogreader.c:842 +#: access/transam/xlogreader.c:882 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "неожиданный pageaddr %X/%X в сегменте журнала %s, смещение %u" -#: access/transam/xlogreader.c:867 +#: access/transam/xlogreader.c:907 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "" "нарушение последовательности ID линии времени %u (после %u) в сегменте " "журнала %s, смещение %u" -#: access/transam/xlogreader.c:1112 +#: access/transam/xlogreader.c:1247 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%X" -#: access/transam/xlogreader.c:1135 +#: access/transam/xlogreader.c:1270 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%X нет" -#: access/transam/xlogreader.c:1142 +#: access/transam/xlogreader.c:1277 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "" "BKPBLOCK_HAS_DATA не установлен, но длина данных равна %u в позиции %X/%X" -#: access/transam/xlogreader.c:1178 +#: access/transam/xlogreader.c:1313 #, c-format msgid "" "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at " @@ -3475,21 +3684,21 @@ msgstr "" "BKPIMAGE_HAS_HOLE установлен, но для пропуска заданы смещение %u и длина %u " "при длине образа блока %u в позиции %X/%X" -#: access/transam/xlogreader.c:1194 +#: access/transam/xlogreader.c:1329 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "" "BKPIMAGE_HAS_HOLE не установлен, но для пропуска заданы смещение %u и длина " "%u в позиции %X/%X" -#: access/transam/xlogreader.c:1209 +#: access/transam/xlogreader.c:1344 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "" "BKPIMAGE_IS_COMPRESSED установлен, но длина образа блока равна %u в позиции " "%X/%X" -#: access/transam/xlogreader.c:1224 +#: access/transam/xlogreader.c:1359 #, c-format msgid "" "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image " @@ -3498,57 +3707,46 @@ msgstr "" "ни BKPIMAGE_HAS_HOLE, ни BKPIMAGE_IS_COMPRESSED не установлены, но длина " "образа блока равна %u в позиции %X/%X" -#: access/transam/xlogreader.c:1240 +#: access/transam/xlogreader.c:1375 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "" "BKPBLOCK_SAME_REL установлен, но предыдущее значение не задано в позиции %X/" "%X" -#: access/transam/xlogreader.c:1252 +#: access/transam/xlogreader.c:1387 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "неверный идентификатор блока %u в позиции %X/%X" -#: access/transam/xlogreader.c:1341 +#: access/transam/xlogreader.c:1476 #, c-format msgid "record with invalid length at %X/%X" msgstr "запись с неверной длиной в позиции %X/%X" -#: access/transam/xlogreader.c:1430 +#: access/transam/xlogreader.c:1565 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "неверный сжатый образ в позиции %X/%X, блок %d" -#: access/transam/xlogutils.c:727 replication/walreceiver.c:959 -#: replication/walsender.c:2462 -#, c-format -msgid "could not seek in log segment %s to offset %u: %m" -msgstr "не удалось переместиться в сегменте журнала %s к смещению %u: %m" - -#: access/transam/xlogutils.c:751 -#, c-format -msgid "could not read from log segment %s, offset %u, length %lu: %m" -msgstr "не удалось прочитать сегмент журнала %s (смещение %u, длина %lu): %m" - #: bootstrap/bootstrap.c:271 #, c-format msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "" "для -X требуется число, равное степени двух, в интервале от 1 МБ до 1 ГБ" -#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:821 tcop/postgres.c:3635 +#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:842 tcop/postgres.c:3717 #, c-format msgid "--%s requires a value" msgstr "для --%s требуется значение" -#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:826 tcop/postgres.c:3640 +#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:847 tcop/postgres.c:3722 #, c-format msgid "-c %s requires a value" msgstr "для -c %s требуется значение" -#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:838 -#: postmaster/postmaster.c:851 +#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:859 +#: postmaster/postmaster.c:872 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" @@ -3558,241 +3756,244 @@ msgstr "Для дополнительной информации попробу msgid "%s: invalid command-line arguments\n" msgstr "%s: неверные аргументы командной строки\n" -#: catalog/aclchk.c:203 +#: catalog/aclchk.c:181 #, c-format msgid "grant options can only be granted to roles" msgstr "право назначения прав можно давать только ролям" -#: catalog/aclchk.c:326 +#: catalog/aclchk.c:300 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "для столбца \"%s\" отношения \"%s\" не были назначены никакие права" -#: catalog/aclchk.c:331 +#: catalog/aclchk.c:305 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "для объекта \"%s\" не были назначены никакие права" -#: catalog/aclchk.c:339 +#: catalog/aclchk.c:313 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "" "для столбца \"%s\" отношения \"%s\" были назначены не все запрошенные права" -#: catalog/aclchk.c:344 +#: catalog/aclchk.c:318 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "для объекта \"%s\" были назначены не все запрошенные права" -#: catalog/aclchk.c:355 +#: catalog/aclchk.c:329 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "для столбца \"%s\" отношения \"%s\" не были отозваны никакие права" -#: catalog/aclchk.c:360 +#: catalog/aclchk.c:334 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "для объекта \"%s\" не были отозваны никакие права" -#: catalog/aclchk.c:368 +#: catalog/aclchk.c:342 #, c-format msgid "" "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "для столбца \"%s\" отношения \"%s\" были отозваны не все права" -#: catalog/aclchk.c:373 +#: catalog/aclchk.c:347 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "для объекта \"%s\" были отозваны не все права" -#: catalog/aclchk.c:456 catalog/aclchk.c:999 +#: catalog/aclchk.c:430 catalog/aclchk.c:973 #, c-format msgid "invalid privilege type %s for relation" msgstr "право %s неприменимо для отношений" -#: catalog/aclchk.c:460 catalog/aclchk.c:1003 +#: catalog/aclchk.c:434 catalog/aclchk.c:977 #, c-format msgid "invalid privilege type %s for sequence" msgstr "право %s неприменимо для последовательностей" -#: catalog/aclchk.c:464 +#: catalog/aclchk.c:438 #, c-format msgid "invalid privilege type %s for database" msgstr "право %s неприменимо для баз данных" -#: catalog/aclchk.c:468 +#: catalog/aclchk.c:442 #, c-format msgid "invalid privilege type %s for domain" msgstr "право %s неприменимо для домена" -#: catalog/aclchk.c:472 catalog/aclchk.c:1007 +#: catalog/aclchk.c:446 catalog/aclchk.c:981 #, c-format msgid "invalid privilege type %s for function" msgstr "право %s неприменимо для функций" -#: catalog/aclchk.c:476 +#: catalog/aclchk.c:450 #, c-format msgid "invalid privilege type %s for language" msgstr "право %s неприменимо для языков" -#: catalog/aclchk.c:480 +#: catalog/aclchk.c:454 #, c-format msgid "invalid privilege type %s for large object" msgstr "право %s неприменимо для больших объектов" -#: catalog/aclchk.c:484 catalog/aclchk.c:1023 +#: catalog/aclchk.c:458 catalog/aclchk.c:997 #, c-format msgid "invalid privilege type %s for schema" msgstr "право %s неприменимо для схем" -#: catalog/aclchk.c:488 catalog/aclchk.c:1011 +#: catalog/aclchk.c:462 catalog/aclchk.c:985 #, c-format msgid "invalid privilege type %s for procedure" msgstr "право %s неприменимо для процедур" -#: catalog/aclchk.c:492 catalog/aclchk.c:1015 +#: catalog/aclchk.c:466 catalog/aclchk.c:989 #, c-format msgid "invalid privilege type %s for routine" msgstr "право %s неприменимо для подпрограмм" -#: catalog/aclchk.c:496 +#: catalog/aclchk.c:470 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "право %s неприменимо для табличных пространств" -#: catalog/aclchk.c:500 catalog/aclchk.c:1019 +#: catalog/aclchk.c:474 catalog/aclchk.c:993 #, c-format msgid "invalid privilege type %s for type" msgstr "право %s неприменимо для типа" -#: catalog/aclchk.c:504 +#: catalog/aclchk.c:478 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "право %s неприменимо для обёрток сторонних данных" -#: catalog/aclchk.c:508 +#: catalog/aclchk.c:482 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "право %s неприменимо для сторонних серверов" -#: catalog/aclchk.c:547 +#: catalog/aclchk.c:521 #, c-format msgid "column privileges are only valid for relations" msgstr "права для столбцов применимы только к отношениям" -#: catalog/aclchk.c:707 catalog/aclchk.c:4135 catalog/aclchk.c:4917 -#: catalog/objectaddress.c:964 catalog/pg_largeobject.c:116 -#: storage/large_object/inv_api.c:283 +#: catalog/aclchk.c:681 catalog/aclchk.c:4103 catalog/aclchk.c:4885 +#: catalog/objectaddress.c:965 catalog/pg_largeobject.c:116 +#: storage/large_object/inv_api.c:285 #, c-format msgid "large object %u does not exist" msgstr "большой объект %u не существует" -#: catalog/aclchk.c:936 catalog/aclchk.c:945 commands/collationcmds.c:117 -#: commands/copy.c:1139 commands/copy.c:1159 commands/copy.c:1168 -#: commands/copy.c:1177 commands/copy.c:1186 commands/copy.c:1195 -#: commands/copy.c:1204 commands/copy.c:1213 commands/copy.c:1231 -#: commands/copy.c:1247 commands/copy.c:1267 commands/copy.c:1284 -#: commands/dbcommands.c:156 commands/dbcommands.c:165 -#: commands/dbcommands.c:174 commands/dbcommands.c:183 -#: commands/dbcommands.c:192 commands/dbcommands.c:201 -#: commands/dbcommands.c:210 commands/dbcommands.c:219 -#: commands/dbcommands.c:228 commands/dbcommands.c:1448 -#: commands/dbcommands.c:1457 commands/dbcommands.c:1466 -#: commands/dbcommands.c:1475 commands/extension.c:1688 -#: commands/extension.c:1698 commands/extension.c:1708 -#: commands/extension.c:1718 commands/extension.c:2960 -#: commands/foreigncmds.c:543 commands/foreigncmds.c:552 -#: commands/functioncmds.c:568 commands/functioncmds.c:734 -#: commands/functioncmds.c:743 commands/functioncmds.c:752 -#: commands/functioncmds.c:761 commands/functioncmds.c:2193 -#: commands/functioncmds.c:2201 commands/publicationcmds.c:91 +#: catalog/aclchk.c:910 catalog/aclchk.c:919 commands/collationcmds.c:118 +#: commands/copy.c:1134 commands/copy.c:1154 commands/copy.c:1163 +#: commands/copy.c:1172 commands/copy.c:1181 commands/copy.c:1190 +#: commands/copy.c:1199 commands/copy.c:1208 commands/copy.c:1226 +#: commands/copy.c:1242 commands/copy.c:1262 commands/copy.c:1279 +#: commands/dbcommands.c:157 commands/dbcommands.c:166 +#: commands/dbcommands.c:175 commands/dbcommands.c:184 +#: commands/dbcommands.c:193 commands/dbcommands.c:202 +#: commands/dbcommands.c:211 commands/dbcommands.c:220 +#: commands/dbcommands.c:229 commands/dbcommands.c:238 +#: commands/dbcommands.c:260 commands/dbcommands.c:1502 +#: commands/dbcommands.c:1511 commands/dbcommands.c:1520 +#: commands/dbcommands.c:1529 commands/extension.c:1735 +#: commands/extension.c:1745 commands/extension.c:1755 +#: commands/extension.c:3055 commands/foreigncmds.c:539 +#: commands/foreigncmds.c:548 commands/functioncmds.c:570 +#: commands/functioncmds.c:736 commands/functioncmds.c:745 +#: commands/functioncmds.c:754 commands/functioncmds.c:763 +#: commands/functioncmds.c:2014 commands/functioncmds.c:2022 +#: commands/publicationcmds.c:90 commands/publicationcmds.c:133 #: commands/sequence.c:1267 commands/sequence.c:1277 commands/sequence.c:1287 #: commands/sequence.c:1297 commands/sequence.c:1307 commands/sequence.c:1317 #: commands/sequence.c:1327 commands/sequence.c:1337 commands/sequence.c:1347 -#: commands/subscriptioncmds.c:111 commands/subscriptioncmds.c:121 -#: commands/subscriptioncmds.c:131 commands/subscriptioncmds.c:141 -#: commands/subscriptioncmds.c:155 commands/subscriptioncmds.c:166 -#: commands/subscriptioncmds.c:180 commands/tablecmds.c:6610 -#: commands/typecmds.c:299 commands/typecmds.c:1428 commands/typecmds.c:1437 -#: commands/typecmds.c:1445 commands/typecmds.c:1453 commands/typecmds.c:1461 +#: commands/subscriptioncmds.c:104 commands/subscriptioncmds.c:114 +#: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 +#: commands/subscriptioncmds.c:148 commands/subscriptioncmds.c:159 +#: commands/subscriptioncmds.c:173 commands/tablecmds.c:7104 +#: commands/typecmds.c:322 commands/typecmds.c:1355 commands/typecmds.c:1364 +#: commands/typecmds.c:1372 commands/typecmds.c:1380 commands/typecmds.c:1388 #: commands/user.c:133 commands/user.c:147 commands/user.c:156 #: commands/user.c:165 commands/user.c:174 commands/user.c:183 #: commands/user.c:192 commands/user.c:201 commands/user.c:210 #: commands/user.c:219 commands/user.c:228 commands/user.c:237 -#: commands/user.c:246 commands/user.c:571 commands/user.c:579 -#: commands/user.c:587 commands/user.c:595 commands/user.c:603 -#: commands/user.c:611 commands/user.c:619 commands/user.c:627 -#: commands/user.c:636 commands/user.c:644 commands/user.c:652 -#: parser/parse_utilcmd.c:385 replication/pgoutput/pgoutput.c:111 -#: replication/pgoutput/pgoutput.c:132 replication/walsender.c:817 -#: replication/walsender.c:828 replication/walsender.c:838 +#: commands/user.c:246 commands/user.c:582 commands/user.c:590 +#: commands/user.c:598 commands/user.c:606 commands/user.c:614 +#: commands/user.c:622 commands/user.c:630 commands/user.c:638 +#: commands/user.c:647 commands/user.c:655 commands/user.c:663 +#: parser/parse_utilcmd.c:403 replication/pgoutput/pgoutput.c:141 +#: replication/pgoutput/pgoutput.c:162 replication/walsender.c:890 +#: replication/walsender.c:901 replication/walsender.c:911 #, c-format msgid "conflicting or redundant options" msgstr "конфликтующие или избыточные параметры" -#: catalog/aclchk.c:1056 +#: catalog/aclchk.c:1030 #, c-format msgid "default privileges cannot be set for columns" msgstr "права по умолчанию нельзя определить для столбцов" -#: catalog/aclchk.c:1216 +#: catalog/aclchk.c:1190 #, c-format msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "предложение IN SCHEMA нельзя использовать в GRANT/REVOKE ON SCHEMAS" -#: catalog/aclchk.c:1584 catalog/catalog.c:519 catalog/objectaddress.c:1426 -#: commands/analyze.c:383 commands/copy.c:5134 commands/sequence.c:1702 -#: commands/tablecmds.c:6152 commands/tablecmds.c:6310 -#: commands/tablecmds.c:6384 commands/tablecmds.c:6454 -#: commands/tablecmds.c:6535 commands/tablecmds.c:6629 -#: commands/tablecmds.c:6688 commands/tablecmds.c:6827 -#: commands/tablecmds.c:6909 commands/tablecmds.c:7001 -#: commands/tablecmds.c:7109 commands/tablecmds.c:10346 -#: commands/tablecmds.c:10528 commands/tablecmds.c:10689 -#: commands/tablecmds.c:11674 commands/trigger.c:928 parser/analyze.c:2330 -#: parser/parse_relation.c:2788 parser/parse_relation.c:2851 -#: parser/parse_target.c:1031 parser/parse_type.c:145 utils/adt/acl.c:2885 -#: utils/adt/ruleutils.c:2511 +#: catalog/aclchk.c:1561 catalog/catalog.c:506 catalog/objectaddress.c:1427 +#: commands/analyze.c:389 commands/copy.c:5087 commands/sequence.c:1702 +#: commands/tablecmds.c:6580 commands/tablecmds.c:6723 +#: commands/tablecmds.c:6773 commands/tablecmds.c:6847 +#: commands/tablecmds.c:6917 commands/tablecmds.c:7029 +#: commands/tablecmds.c:7123 commands/tablecmds.c:7182 +#: commands/tablecmds.c:7271 commands/tablecmds.c:7300 +#: commands/tablecmds.c:7455 commands/tablecmds.c:7537 +#: commands/tablecmds.c:7630 commands/tablecmds.c:7785 +#: commands/tablecmds.c:10990 commands/tablecmds.c:11172 +#: commands/tablecmds.c:11332 commands/tablecmds.c:12415 commands/trigger.c:876 +#: parser/analyze.c:2338 parser/parse_relation.c:713 parser/parse_target.c:1036 +#: parser/parse_type.c:144 parser/parse_utilcmd.c:3314 +#: parser/parse_utilcmd.c:3349 parser/parse_utilcmd.c:3391 utils/adt/acl.c:2869 +#: utils/adt/ruleutils.c:2535 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "столбец \"%s\" в таблице \"%s\" не существует" -#: catalog/aclchk.c:1847 catalog/objectaddress.c:1266 commands/sequence.c:1140 -#: commands/tablecmds.c:232 commands/tablecmds.c:14993 utils/adt/acl.c:2075 -#: utils/adt/acl.c:2105 utils/adt/acl.c:2137 utils/adt/acl.c:2169 -#: utils/adt/acl.c:2197 utils/adt/acl.c:2227 +#: catalog/aclchk.c:1824 catalog/objectaddress.c:1267 commands/sequence.c:1140 +#: commands/tablecmds.c:236 commands/tablecmds.c:15728 utils/adt/acl.c:2059 +#: utils/adt/acl.c:2089 utils/adt/acl.c:2121 utils/adt/acl.c:2153 +#: utils/adt/acl.c:2181 utils/adt/acl.c:2211 #, c-format msgid "\"%s\" is not a sequence" msgstr "\"%s\" - это не последовательность" -#: catalog/aclchk.c:1885 +#: catalog/aclchk.c:1862 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "" "для последовательности \"%s\" применимы только права USAGE, SELECT и UPDATE" -#: catalog/aclchk.c:1902 +#: catalog/aclchk.c:1879 #, c-format msgid "invalid privilege type %s for table" msgstr "право %s неприменимо для таблиц" -#: catalog/aclchk.c:2068 +#: catalog/aclchk.c:2045 #, c-format msgid "invalid privilege type %s for column" msgstr "право %s неприменимо для столбцов" -#: catalog/aclchk.c:2081 +#: catalog/aclchk.c:2058 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "для последовательности \"%s\" применимо только право SELECT" # TO REVIEW -#: catalog/aclchk.c:2663 +#: catalog/aclchk.c:2640 #, c-format msgid "language \"%s\" is not trusted" msgstr "язык \"%s\" не является доверенным" -#: catalog/aclchk.c:2665 +#: catalog/aclchk.c:2642 #, c-format msgid "" "GRANT and REVOKE are not allowed on untrusted languages, because only " @@ -3801,525 +4002,526 @@ msgstr "" "GRANT и REVOKE не допускаются для недоверенных языков, так как использовать " "такие языки могут только суперпользователи." -#: catalog/aclchk.c:3179 +#: catalog/aclchk.c:3156 #, c-format msgid "cannot set privileges of array types" msgstr "для типов массивов нельзя определить права" -#: catalog/aclchk.c:3180 +#: catalog/aclchk.c:3157 #, c-format msgid "Set the privileges of the element type instead." msgstr "Вместо этого установите права для типа элемента." -#: catalog/aclchk.c:3187 catalog/objectaddress.c:1560 +#: catalog/aclchk.c:3164 catalog/objectaddress.c:1561 #, c-format msgid "\"%s\" is not a domain" msgstr "\"%s\" - это не домен" -#: catalog/aclchk.c:3307 +#: catalog/aclchk.c:3284 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "нераспознанное право: \"%s\"" -#: catalog/aclchk.c:3368 +#: catalog/aclchk.c:3345 #, c-format msgid "permission denied for aggregate %s" msgstr "нет доступа к агрегату %s" -#: catalog/aclchk.c:3371 +#: catalog/aclchk.c:3348 #, c-format msgid "permission denied for collation %s" msgstr "нет доступа к правилу сортировки %s" -#: catalog/aclchk.c:3374 +#: catalog/aclchk.c:3351 #, c-format msgid "permission denied for column %s" msgstr "нет доступа к столбцу %s" -#: catalog/aclchk.c:3377 +#: catalog/aclchk.c:3354 #, c-format msgid "permission denied for conversion %s" msgstr "нет доступа к преобразованию %s" -#: catalog/aclchk.c:3380 +#: catalog/aclchk.c:3357 #, c-format msgid "permission denied for database %s" msgstr "нет доступа к базе данных %s" -#: catalog/aclchk.c:3383 +#: catalog/aclchk.c:3360 #, c-format msgid "permission denied for domain %s" msgstr "нет доступа к домену %s" -#: catalog/aclchk.c:3386 +#: catalog/aclchk.c:3363 #, c-format msgid "permission denied for event trigger %s" msgstr "нет доступа к событийному триггеру %s" -#: catalog/aclchk.c:3389 +#: catalog/aclchk.c:3366 #, c-format msgid "permission denied for extension %s" msgstr "нет доступа к расширению %s" -#: catalog/aclchk.c:3392 +#: catalog/aclchk.c:3369 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "нет доступа к обёртке сторонних данных %s" -#: catalog/aclchk.c:3395 +#: catalog/aclchk.c:3372 #, c-format msgid "permission denied for foreign server %s" msgstr "нет доступа к стороннему серверу %s" -#: catalog/aclchk.c:3398 +#: catalog/aclchk.c:3375 #, c-format msgid "permission denied for foreign table %s" msgstr "нет доступа к сторонней таблице %s" -#: catalog/aclchk.c:3401 +#: catalog/aclchk.c:3378 #, c-format msgid "permission denied for function %s" msgstr "нет доступа к функции %s" -#: catalog/aclchk.c:3404 +#: catalog/aclchk.c:3381 #, c-format msgid "permission denied for index %s" msgstr "нет доступа к индексу %s" -#: catalog/aclchk.c:3407 +#: catalog/aclchk.c:3384 #, c-format msgid "permission denied for language %s" msgstr "нет доступа к языку %s" -#: catalog/aclchk.c:3410 +#: catalog/aclchk.c:3387 #, c-format msgid "permission denied for large object %s" msgstr "нет доступа к большому объекту %s" -#: catalog/aclchk.c:3413 +#: catalog/aclchk.c:3390 #, c-format msgid "permission denied for materialized view %s" msgstr "нет доступа к материализованному представлению %s" -#: catalog/aclchk.c:3416 +#: catalog/aclchk.c:3393 #, c-format msgid "permission denied for operator class %s" msgstr "нет доступа к классу операторов %s" -#: catalog/aclchk.c:3419 +#: catalog/aclchk.c:3396 #, c-format msgid "permission denied for operator %s" msgstr "нет доступа к оператору %s" -#: catalog/aclchk.c:3422 +#: catalog/aclchk.c:3399 #, c-format msgid "permission denied for operator family %s" msgstr "нет доступа к семейству операторов %s" -#: catalog/aclchk.c:3425 +#: catalog/aclchk.c:3402 #, c-format msgid "permission denied for policy %s" msgstr "нет доступа к политике %s" -#: catalog/aclchk.c:3428 +#: catalog/aclchk.c:3405 #, c-format msgid "permission denied for procedure %s" msgstr "нет доступа к процедуре %s" -#: catalog/aclchk.c:3431 +#: catalog/aclchk.c:3408 #, c-format msgid "permission denied for publication %s" msgstr "нет доступа к публикации %s" -#: catalog/aclchk.c:3434 +#: catalog/aclchk.c:3411 #, c-format msgid "permission denied for routine %s" msgstr "нет доступа к подпрограмме %s" -#: catalog/aclchk.c:3437 +#: catalog/aclchk.c:3414 #, c-format msgid "permission denied for schema %s" msgstr "нет доступа к схеме %s" -#: catalog/aclchk.c:3440 commands/sequence.c:610 commands/sequence.c:844 +#: catalog/aclchk.c:3417 commands/sequence.c:610 commands/sequence.c:844 #: commands/sequence.c:886 commands/sequence.c:927 commands/sequence.c:1800 #: commands/sequence.c:1864 #, c-format msgid "permission denied for sequence %s" msgstr "нет доступа к последовательности %s" -#: catalog/aclchk.c:3443 +#: catalog/aclchk.c:3420 #, c-format msgid "permission denied for statistics object %s" msgstr "нет доступа к объекту статистики %s" -#: catalog/aclchk.c:3446 +#: catalog/aclchk.c:3423 #, c-format msgid "permission denied for subscription %s" msgstr "нет доступа к подписке %s" -#: catalog/aclchk.c:3449 +#: catalog/aclchk.c:3426 #, c-format msgid "permission denied for table %s" msgstr "нет доступа к таблице %s" -#: catalog/aclchk.c:3452 +#: catalog/aclchk.c:3429 #, c-format msgid "permission denied for tablespace %s" msgstr "нет доступа к табличному пространству %s" -#: catalog/aclchk.c:3455 +#: catalog/aclchk.c:3432 #, c-format msgid "permission denied for text search configuration %s" msgstr "нет доступа к конфигурации текстового поиска %s" -#: catalog/aclchk.c:3458 +#: catalog/aclchk.c:3435 #, c-format msgid "permission denied for text search dictionary %s" msgstr "нет доступа к словарю текстового поиска %s" -#: catalog/aclchk.c:3461 +#: catalog/aclchk.c:3438 #, c-format msgid "permission denied for type %s" msgstr "нет доступа к типу %s" -#: catalog/aclchk.c:3464 +#: catalog/aclchk.c:3441 #, c-format msgid "permission denied for view %s" msgstr "нет доступа к представлению %s" -#: catalog/aclchk.c:3499 +#: catalog/aclchk.c:3476 #, c-format msgid "must be owner of aggregate %s" msgstr "нужно быть владельцем агрегата %s" -#: catalog/aclchk.c:3502 +#: catalog/aclchk.c:3479 #, c-format msgid "must be owner of collation %s" msgstr "нужно быть владельцем правила сортировки %s" -#: catalog/aclchk.c:3505 +#: catalog/aclchk.c:3482 #, c-format msgid "must be owner of conversion %s" msgstr "нужно быть владельцем преобразования %s" -#: catalog/aclchk.c:3508 +#: catalog/aclchk.c:3485 #, c-format msgid "must be owner of database %s" msgstr "нужно быть владельцем базы %s" -#: catalog/aclchk.c:3511 +#: catalog/aclchk.c:3488 #, c-format msgid "must be owner of domain %s" msgstr "нужно быть владельцем домена %s" -#: catalog/aclchk.c:3514 +#: catalog/aclchk.c:3491 #, c-format msgid "must be owner of event trigger %s" msgstr "нужно быть владельцем событийного триггера %s" -#: catalog/aclchk.c:3517 +#: catalog/aclchk.c:3494 #, c-format msgid "must be owner of extension %s" msgstr "нужно быть владельцем расширения %s" -#: catalog/aclchk.c:3520 +#: catalog/aclchk.c:3497 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "нужно быть владельцем обёртки сторонних данных %s" -#: catalog/aclchk.c:3523 +#: catalog/aclchk.c:3500 #, c-format msgid "must be owner of foreign server %s" msgstr "нужно быть \"владельцем\" стороннего сервера %s" -#: catalog/aclchk.c:3526 +#: catalog/aclchk.c:3503 #, c-format msgid "must be owner of foreign table %s" msgstr "нужно быть владельцем сторонней таблицы %s" -#: catalog/aclchk.c:3529 +#: catalog/aclchk.c:3506 #, c-format msgid "must be owner of function %s" msgstr "нужно быть владельцем функции %s" -#: catalog/aclchk.c:3532 +#: catalog/aclchk.c:3509 #, c-format msgid "must be owner of index %s" msgstr "нужно быть владельцем индекса %s" -#: catalog/aclchk.c:3535 +#: catalog/aclchk.c:3512 #, c-format msgid "must be owner of language %s" msgstr "нужно быть владельцем языка %s" -#: catalog/aclchk.c:3538 +#: catalog/aclchk.c:3515 #, c-format msgid "must be owner of large object %s" msgstr "нужно быть владельцем большого объекта %s" -#: catalog/aclchk.c:3541 +#: catalog/aclchk.c:3518 #, c-format msgid "must be owner of materialized view %s" msgstr "нужно быть владельцем материализованного представления %s" -#: catalog/aclchk.c:3544 +#: catalog/aclchk.c:3521 #, c-format msgid "must be owner of operator class %s" msgstr "нужно быть владельцем класса операторов %s" -#: catalog/aclchk.c:3547 +#: catalog/aclchk.c:3524 #, c-format msgid "must be owner of operator %s" msgstr "нужно быть владельцем оператора %s" -#: catalog/aclchk.c:3550 +#: catalog/aclchk.c:3527 #, c-format msgid "must be owner of operator family %s" msgstr "нужно быть владельцем семейства операторов %s" -#: catalog/aclchk.c:3553 +#: catalog/aclchk.c:3530 #, c-format msgid "must be owner of procedure %s" msgstr "нужно быть владельцем процедуры %s" -#: catalog/aclchk.c:3556 +#: catalog/aclchk.c:3533 #, c-format msgid "must be owner of publication %s" msgstr "нужно быть владельцем публикации %s" -#: catalog/aclchk.c:3559 +#: catalog/aclchk.c:3536 #, c-format msgid "must be owner of routine %s" msgstr "нужно быть владельцем подпрограммы %s" -#: catalog/aclchk.c:3562 +#: catalog/aclchk.c:3539 #, c-format msgid "must be owner of sequence %s" msgstr "нужно быть владельцем последовательности %s" -#: catalog/aclchk.c:3565 +#: catalog/aclchk.c:3542 #, c-format msgid "must be owner of subscription %s" msgstr "нужно быть владельцем подписки %s" -#: catalog/aclchk.c:3568 +#: catalog/aclchk.c:3545 #, c-format msgid "must be owner of table %s" msgstr "нужно быть владельцем таблицы %s" -#: catalog/aclchk.c:3571 +#: catalog/aclchk.c:3548 #, c-format msgid "must be owner of type %s" msgstr "нужно быть владельцем типа %s" -#: catalog/aclchk.c:3574 +#: catalog/aclchk.c:3551 #, c-format msgid "must be owner of view %s" msgstr "нужно быть владельцем представления %s" -#: catalog/aclchk.c:3577 +#: catalog/aclchk.c:3554 #, c-format msgid "must be owner of schema %s" msgstr "нужно быть владельцем схемы %s" -#: catalog/aclchk.c:3580 +#: catalog/aclchk.c:3557 #, c-format msgid "must be owner of statistics object %s" msgstr "нужно быть владельцем объекта статистики %s" -#: catalog/aclchk.c:3583 +#: catalog/aclchk.c:3560 #, c-format msgid "must be owner of tablespace %s" msgstr "нужно быть владельцем табличного пространства %s" -#: catalog/aclchk.c:3586 +#: catalog/aclchk.c:3563 #, c-format msgid "must be owner of text search configuration %s" msgstr "нужно быть владельцем конфигурации текстового поиска %s" -#: catalog/aclchk.c:3589 +#: catalog/aclchk.c:3566 #, c-format msgid "must be owner of text search dictionary %s" msgstr "нужно быть владельцем словаря текстового поиска %s" -#: catalog/aclchk.c:3603 +#: catalog/aclchk.c:3580 #, c-format msgid "must be owner of relation %s" msgstr "нужно быть владельцем отношения %s" -#: catalog/aclchk.c:3647 +#: catalog/aclchk.c:3624 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "нет доступа к столбцу \"%s\" отношения \"%s\"" -#: catalog/aclchk.c:3768 catalog/aclchk.c:3776 +#: catalog/aclchk.c:3745 catalog/aclchk.c:3753 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "атрибут %d отношения с OID %u не существует" -#: catalog/aclchk.c:3849 catalog/aclchk.c:4768 +#: catalog/aclchk.c:3826 catalog/aclchk.c:4736 #, c-format msgid "relation with OID %u does not exist" msgstr "отношение с OID %u не существует" -#: catalog/aclchk.c:3948 catalog/aclchk.c:5186 +#: catalog/aclchk.c:3916 catalog/aclchk.c:5154 #, c-format msgid "database with OID %u does not exist" msgstr "база данных с OID %u не существует" -#: catalog/aclchk.c:4002 catalog/aclchk.c:4846 tcop/fastpath.c:221 -#: utils/fmgr/fmgr.c:2017 +#: catalog/aclchk.c:3970 catalog/aclchk.c:4814 tcop/fastpath.c:221 +#: utils/fmgr/fmgr.c:2055 #, c-format msgid "function with OID %u does not exist" msgstr "функция с OID %u не существует" -#: catalog/aclchk.c:4056 catalog/aclchk.c:4872 +#: catalog/aclchk.c:4024 catalog/aclchk.c:4840 #, c-format msgid "language with OID %u does not exist" msgstr "язык с OID %u не существует" -#: catalog/aclchk.c:4220 catalog/aclchk.c:4944 +#: catalog/aclchk.c:4188 catalog/aclchk.c:4912 #, c-format msgid "schema with OID %u does not exist" msgstr "схема с OID %u не существует" -#: catalog/aclchk.c:4274 catalog/aclchk.c:4971 utils/adt/genfile.c:637 +#: catalog/aclchk.c:4242 catalog/aclchk.c:4939 utils/adt/genfile.c:686 #, c-format msgid "tablespace with OID %u does not exist" msgstr "табличное пространство с OID %u не существует" -#: catalog/aclchk.c:4333 catalog/aclchk.c:5105 commands/foreigncmds.c:328 +#: catalog/aclchk.c:4301 catalog/aclchk.c:5073 commands/foreigncmds.c:325 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "обёртка сторонних данных с OID %u не существует" -#: catalog/aclchk.c:4395 catalog/aclchk.c:5132 commands/foreigncmds.c:465 +#: catalog/aclchk.c:4363 catalog/aclchk.c:5100 commands/foreigncmds.c:462 #, c-format msgid "foreign server with OID %u does not exist" msgstr "сторонний сервер с OID %u не существует" -#: catalog/aclchk.c:4455 catalog/aclchk.c:4794 utils/cache/typcache.c:369 +#: catalog/aclchk.c:4423 catalog/aclchk.c:4762 utils/cache/typcache.c:378 +#: utils/cache/typcache.c:432 #, c-format msgid "type with OID %u does not exist" msgstr "тип с OID %u не существует" -#: catalog/aclchk.c:4820 +#: catalog/aclchk.c:4788 #, c-format msgid "operator with OID %u does not exist" msgstr "оператор с OID %u не существует" -#: catalog/aclchk.c:4997 +#: catalog/aclchk.c:4965 #, c-format msgid "operator class with OID %u does not exist" msgstr "класс операторов с OID %u не существует" -#: catalog/aclchk.c:5024 +#: catalog/aclchk.c:4992 #, c-format msgid "operator family with OID %u does not exist" msgstr "семейство операторов с OID %u не существует" -#: catalog/aclchk.c:5051 +#: catalog/aclchk.c:5019 #, c-format msgid "text search dictionary with OID %u does not exist" msgstr "словарь текстового поиска с OID %u не существует" -#: catalog/aclchk.c:5078 +#: catalog/aclchk.c:5046 #, c-format msgid "text search configuration with OID %u does not exist" msgstr "конфигурация текстового поиска с OID %u не существует" -#: catalog/aclchk.c:5159 commands/event_trigger.c:595 +#: catalog/aclchk.c:5127 commands/event_trigger.c:475 #, c-format msgid "event trigger with OID %u does not exist" msgstr "событийный триггер с OID %u не существует" -#: catalog/aclchk.c:5212 commands/collationcmds.c:366 +#: catalog/aclchk.c:5180 commands/collationcmds.c:367 #, c-format msgid "collation with OID %u does not exist" msgstr "правило сортировки с OID %u не существует" -#: catalog/aclchk.c:5238 +#: catalog/aclchk.c:5206 #, c-format msgid "conversion with OID %u does not exist" msgstr "преобразование с OID %u не существует" -#: catalog/aclchk.c:5279 +#: catalog/aclchk.c:5247 #, c-format msgid "extension with OID %u does not exist" msgstr "расширение с OID %u не существует" -#: catalog/aclchk.c:5306 commands/publicationcmds.c:759 +#: catalog/aclchk.c:5274 commands/publicationcmds.c:794 #, c-format msgid "publication with OID %u does not exist" msgstr "публикация с OID %u не существует" -#: catalog/aclchk.c:5332 commands/subscriptioncmds.c:1130 +#: catalog/aclchk.c:5300 commands/subscriptioncmds.c:1112 #, c-format msgid "subscription with OID %u does not exist" msgstr "подписка с OID %u не существует" -#: catalog/aclchk.c:5358 +#: catalog/aclchk.c:5326 #, c-format msgid "statistics object with OID %u does not exist" msgstr "объект статистики с OID %u не существует" -#: catalog/catalog.c:498 +#: catalog/catalog.c:485 #, c-format msgid "must be superuser to call pg_nextoid()" msgstr "выполнять pg_nextoid() может только суперпользователь" -#: catalog/catalog.c:506 +#: catalog/catalog.c:493 #, c-format msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() можно использовать только для системных каталогов" -#: catalog/catalog.c:511 parser/parse_utilcmd.c:2064 +#: catalog/catalog.c:498 parser/parse_utilcmd.c:2215 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "индекс \"%s\" не принадлежит таблице \"%s\"" -#: catalog/catalog.c:528 +#: catalog/catalog.c:515 #, c-format msgid "column \"%s\" is not of type oid" msgstr "столбец \"%s\" имеет тип не oid" -#: catalog/catalog.c:535 +#: catalog/catalog.c:522 #, c-format msgid "index \"%s\" is not the index for column \"%s\"" msgstr "индекс \"%s\" не является индексом столбца \"%s\"" -#: catalog/dependency.c:824 catalog/dependency.c:1062 +#: catalog/dependency.c:823 catalog/dependency.c:1061 #, c-format msgid "cannot drop %s because %s requires it" msgstr "удалить объект %s нельзя, так как он нужен объекту %s" -#: catalog/dependency.c:826 catalog/dependency.c:1064 +#: catalog/dependency.c:825 catalog/dependency.c:1063 #, c-format msgid "You can drop %s instead." msgstr "Однако можно удалить %s." -#: catalog/dependency.c:934 catalog/pg_shdepend.c:641 +#: catalog/dependency.c:933 catalog/pg_shdepend.c:696 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "удалить объект %s нельзя, так как он нужен системе баз данных" -#: catalog/dependency.c:1130 +#: catalog/dependency.c:1129 #, c-format msgid "drop auto-cascades to %s" msgstr "удаление автоматически распространяется на объект %s" -#: catalog/dependency.c:1142 catalog/dependency.c:1151 +#: catalog/dependency.c:1141 catalog/dependency.c:1150 #, c-format msgid "%s depends on %s" msgstr "%s зависит от объекта %s" -#: catalog/dependency.c:1163 catalog/dependency.c:1172 +#: catalog/dependency.c:1162 catalog/dependency.c:1171 #, c-format msgid "drop cascades to %s" msgstr "удаление распространяется на объект %s" -#: catalog/dependency.c:1180 catalog/pg_shdepend.c:770 +#: catalog/dependency.c:1179 catalog/pg_shdepend.c:825 #, c-format msgid "" "\n" @@ -4337,37 +4539,38 @@ msgstr[2] "" "\n" "и ещё %d объектов (см. список в протоколе сервера)" -#: catalog/dependency.c:1192 +#: catalog/dependency.c:1191 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "удалить объект %s нельзя, так как от него зависят другие объекты" -#: catalog/dependency.c:1194 catalog/dependency.c:1195 -#: catalog/dependency.c:1201 catalog/dependency.c:1202 -#: catalog/dependency.c:1213 catalog/dependency.c:1214 -#: commands/tablecmds.c:1218 commands/tablecmds.c:12291 commands/user.c:1082 -#: commands/view.c:505 libpq/auth.c:333 replication/syncrep.c:1171 -#: storage/lmgr/deadlock.c:1145 storage/lmgr/proc.c:1347 utils/adt/acl.c:5344 -#: utils/misc/guc.c:6546 utils/misc/guc.c:6582 utils/misc/guc.c:6652 -#: utils/misc/guc.c:10723 utils/misc/guc.c:10757 utils/misc/guc.c:10791 -#: utils/misc/guc.c:10825 utils/misc/guc.c:10860 +#: catalog/dependency.c:1193 catalog/dependency.c:1194 +#: catalog/dependency.c:1200 catalog/dependency.c:1201 +#: catalog/dependency.c:1212 catalog/dependency.c:1213 +#: commands/tablecmds.c:1249 commands/tablecmds.c:13034 +#: commands/tablespace.c:481 commands/user.c:1095 commands/view.c:495 +#: libpq/auth.c:334 replication/syncrep.c:1032 storage/lmgr/deadlock.c:1154 +#: storage/lmgr/proc.c:1350 utils/adt/acl.c:5332 utils/adt/jsonfuncs.c:614 +#: utils/adt/jsonfuncs.c:620 utils/misc/guc.c:6771 utils/misc/guc.c:6807 +#: utils/misc/guc.c:6877 utils/misc/guc.c:10975 utils/misc/guc.c:11009 +#: utils/misc/guc.c:11043 utils/misc/guc.c:11077 utils/misc/guc.c:11112 #, c-format msgid "%s" msgstr "%s" -#: catalog/dependency.c:1196 catalog/dependency.c:1203 +#: catalog/dependency.c:1195 catalog/dependency.c:1202 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Для удаления зависимых объектов используйте DROP ... CASCADE." -#: catalog/dependency.c:1200 +#: catalog/dependency.c:1199 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "" "удалить запрошенные объекты нельзя, так как от них зависят другие объекты" #. translator: %d always has a value larger than 1 -#: catalog/dependency.c:1209 +#: catalog/dependency.c:1208 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" @@ -4375,55 +4578,55 @@ msgstr[0] "удаление распространяется на ещё %d об msgstr[1] "удаление распространяется на ещё %d объекта" msgstr[2] "удаление распространяется на ещё %d объектов" -#: catalog/dependency.c:1886 +#: catalog/dependency.c:1875 #, c-format msgid "constant of the type %s cannot be used here" msgstr "константу типа %s здесь использовать нельзя" -#: catalog/heap.c:332 +#: catalog/heap.c:330 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "нет прав для создания отношения \"%s.%s\"" -#: catalog/heap.c:334 +#: catalog/heap.c:332 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Изменение системного каталога в текущем состоянии запрещено." -#: catalog/heap.c:502 commands/tablecmds.c:2085 commands/tablecmds.c:2602 -#: commands/tablecmds.c:5756 +#: catalog/heap.c:509 commands/tablecmds.c:2145 commands/tablecmds.c:2745 +#: commands/tablecmds.c:6177 #, c-format msgid "tables can have at most %d columns" msgstr "максимальное число столбцов в таблице: %d" -#: catalog/heap.c:520 commands/tablecmds.c:6042 +#: catalog/heap.c:527 commands/tablecmds.c:6470 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "имя столбца \"%s\" конфликтует с системным столбцом" -#: catalog/heap.c:536 +#: catalog/heap.c:543 #, c-format msgid "column name \"%s\" specified more than once" msgstr "имя столбца \"%s\" указано неоднократно" #. translator: first %s is an integer not a name -#: catalog/heap.c:611 +#: catalog/heap.c:618 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "столбец \"%s\" ключа разбиения имеет псевдотип %s" -#: catalog/heap.c:616 +#: catalog/heap.c:623 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "столбец \"%s\" имеет псевдотип %s" -#: catalog/heap.c:647 +#: catalog/heap.c:654 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "составной тип %s не может содержать себя же" #. translator: first %s is an integer not a name -#: catalog/heap.c:702 +#: catalog/heap.c:709 #, c-format msgid "" "no collation was derived for partition key column %s with collatable type %s" @@ -4431,26 +4634,26 @@ msgstr "" "для входящего в ключ разбиения столбца \"%s\" с сортируемым типом %s не " "удалось получить правило сортировки" -#: catalog/heap.c:708 commands/createas.c:204 commands/createas.c:488 +#: catalog/heap.c:715 commands/createas.c:203 commands/createas.c:486 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "" "для столбца \"%s\" с сортируемым типом %s не удалось получить правило " "сортировки" -#: catalog/heap.c:1155 catalog/index.c:863 commands/tablecmds.c:3369 +#: catalog/heap.c:1164 catalog/index.c:865 commands/tablecmds.c:3520 #, c-format msgid "relation \"%s\" already exists" msgstr "отношение \"%s\" уже существует" -#: catalog/heap.c:1171 catalog/pg_type.c:427 catalog/pg_type.c:749 -#: commands/typecmds.c:240 commands/typecmds.c:791 commands/typecmds.c:1191 -#: commands/typecmds.c:1403 commands/typecmds.c:2160 +#: catalog/heap.c:1180 catalog/pg_type.c:428 catalog/pg_type.c:775 +#: commands/typecmds.c:238 commands/typecmds.c:250 commands/typecmds.c:719 +#: commands/typecmds.c:1125 commands/typecmds.c:1337 commands/typecmds.c:2124 #, c-format msgid "type \"%s\" already exists" msgstr "тип \"%s\" уже существует" -#: catalog/heap.c:1172 +#: catalog/heap.c:1181 #, c-format msgid "" "A relation has an associated type of the same name, so you must use a name " @@ -4459,43 +4662,43 @@ msgstr "" "С отношением уже связан тип с таким же именем; выберите имя, не " "конфликтующее с существующими типами." -#: catalog/heap.c:1201 +#: catalog/heap.c:1210 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "значение OID кучи в pg_class не задано в режиме двоичного обновления" -#: catalog/heap.c:2401 +#: catalog/heap.c:2409 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "" "добавить ограничение NO INHERIT к секционированной таблице \"%s\" нельзя" -#: catalog/heap.c:2671 +#: catalog/heap.c:2679 #, c-format msgid "check constraint \"%s\" already exists" msgstr "ограничение-проверка \"%s\" уже существует" -#: catalog/heap.c:2841 catalog/index.c:877 catalog/pg_constraint.c:669 -#: commands/tablecmds.c:7454 +#: catalog/heap.c:2849 catalog/index.c:879 catalog/pg_constraint.c:668 +#: commands/tablecmds.c:8135 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "ограничение \"%s\" для отношения \"%s\" уже существует" -#: catalog/heap.c:2848 +#: catalog/heap.c:2856 #, c-format msgid "" "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "" "ограничение \"%s\" конфликтует с ненаследуемым ограничением таблицы \"%s\"" -#: catalog/heap.c:2859 +#: catalog/heap.c:2867 #, c-format msgid "" "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "" "ограничение \"%s\" конфликтует с наследуемым ограничением таблицы \"%s\"" -#: catalog/heap.c:2869 +#: catalog/heap.c:2877 #, c-format msgid "" "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" @@ -4503,52 +4706,52 @@ msgstr "" "ограничение \"%s\" конфликтует с непроверенным (NOT VALID) ограничением " "таблицы \"%s\"" -#: catalog/heap.c:2874 +#: catalog/heap.c:2882 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "слияние ограничения \"%s\" с унаследованным определением" -#: catalog/heap.c:2976 +#: catalog/heap.c:2984 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "" "использовать генерируемый столбец \"%s\" в выражении генерируемого столбца " "нельзя" -#: catalog/heap.c:2978 +#: catalog/heap.c:2986 #, c-format msgid "A generated column cannot reference another generated column." msgstr "" "Генерируемый столбец не может ссылаться на другой генерируемый столбец." -#: catalog/heap.c:3030 +#: catalog/heap.c:3038 #, c-format msgid "generation expression is not immutable" msgstr "генерирующее выражение не является постоянным" -#: catalog/heap.c:3058 rewrite/rewriteHandler.c:1190 +#: catalog/heap.c:3066 rewrite/rewriteHandler.c:1193 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "столбец \"%s\" имеет тип %s, но тип выражения по умолчанию %s" -#: catalog/heap.c:3063 commands/prepare.c:384 parser/parse_node.c:434 -#: parser/parse_target.c:591 parser/parse_target.c:866 -#: parser/parse_target.c:876 rewrite/rewriteHandler.c:1195 +#: catalog/heap.c:3071 commands/prepare.c:367 parser/parse_node.c:412 +#: parser/parse_target.c:589 parser/parse_target.c:869 +#: parser/parse_target.c:879 rewrite/rewriteHandler.c:1198 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Перепишите выражение или преобразуйте его тип." -#: catalog/heap.c:3110 +#: catalog/heap.c:3118 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "в ограничении-проверке можно ссылаться только на таблицу \"%s\"" -#: catalog/heap.c:3367 +#: catalog/heap.c:3416 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "неподдерживаемое сочетание внешнего ключа с ON COMMIT" -#: catalog/heap.c:3368 +#: catalog/heap.c:3417 #, c-format msgid "" "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT " @@ -4556,23 +4759,23 @@ msgid "" msgstr "" "Таблица \"%s\" ссылается на \"%s\", и для них задан разный режим ON COMMIT." -#: catalog/heap.c:3373 +#: catalog/heap.c:3422 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "опустошить таблицу, на которую ссылается внешний ключ, нельзя" -#: catalog/heap.c:3374 +#: catalog/heap.c:3423 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "Таблица \"%s\" ссылается на \"%s\"." -#: catalog/heap.c:3376 +#: catalog/heap.c:3425 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "" "Опустошите таблицу \"%s\" параллельно или используйте TRUNCATE ... CASCADE." -#: catalog/index.c:219 parser/parse_utilcmd.c:1873 parser/parse_utilcmd.c:1972 +#: catalog/index.c:219 parser/parse_utilcmd.c:2121 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "таблица \"%s\" не может иметь несколько первичных ключей" @@ -4587,60 +4790,60 @@ msgstr "первичные ключи не могут быть выражени msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "столбец первичного ключа \"%s\" не помечен как NOT NULL" -#: catalog/index.c:762 catalog/index.c:1822 +#: catalog/index.c:764 catalog/index.c:1846 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "" "пользовательские индексы в таблицах системного каталога не поддерживаются" -#: catalog/index.c:802 +#: catalog/index.c:804 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "" "недетерминированные правила сортировки не поддерживаются для класса " "операторов \"%s\"" -#: catalog/index.c:817 +#: catalog/index.c:819 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "" "параллельное создание индекса в таблицах системного каталога не " "поддерживается" -#: catalog/index.c:826 catalog/index.c:1271 +#: catalog/index.c:828 catalog/index.c:1281 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "" "параллельное создание индекса для ограничений-исключений не поддерживается" -#: catalog/index.c:835 +#: catalog/index.c:837 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "нельзя создать разделяемые индексы после initdb" -#: catalog/index.c:855 commands/createas.c:253 commands/sequence.c:154 -#: parser/parse_utilcmd.c:208 +#: catalog/index.c:857 commands/createas.c:252 commands/sequence.c:154 +#: parser/parse_utilcmd.c:211 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "отношение \"%s\" уже существует, пропускается" -#: catalog/index.c:905 +#: catalog/index.c:907 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "" "значение OID индекса в pg_class не задано в режиме двоичного обновления" -#: catalog/index.c:2107 +#: catalog/index.c:2131 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY должен быть первым действием в транзакции" -#: catalog/index.c:2858 +#: catalog/index.c:2862 #, c-format msgid "building index \"%s\" on table \"%s\" serially" msgstr "создание индекса \"%s\" для таблицы \"%s\" в непараллельном режиме" -#: catalog/index.c:2863 +#: catalog/index.c:2867 #, c-format msgid "" "building index \"%s\" on table \"%s\" with request for %d parallel worker" @@ -4656,390 +4859,403 @@ msgstr[2] "" "создание индекса \"%s\" для таблицы \"%s\" с расчётом на %d параллельных " "исполнителей" -#: catalog/index.c:3491 +#: catalog/index.c:3495 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "переиндексировать временные таблицы других сеансов нельзя" -#: catalog/index.c:3622 +#: catalog/index.c:3506 commands/indexcmds.c:3005 +#, c-format +msgid "cannot reindex invalid index on TOAST table" +msgstr "перестроить нерабочий индекс в таблице TOAST нельзя" + +#: catalog/index.c:3628 #, c-format msgid "index \"%s\" was reindexed" msgstr "индекс \"%s\" был перестроен" -#: catalog/index.c:3696 commands/indexcmds.c:2921 +#: catalog/index.c:3704 commands/indexcmds.c:3026 #, c-format msgid "REINDEX of partitioned tables is not yet implemented, skipping \"%s\"" msgstr "" "REINDEX для секционированных таблицы ещё не реализован, \"%s\" пропускается" -#: catalog/namespace.c:249 catalog/namespace.c:453 catalog/namespace.c:545 -#: commands/trigger.c:5406 +#: catalog/index.c:3759 +#, c-format +msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" +msgstr "" +"перестроить нерабочий индекс \"%s.%s\" в таблице TOAST нельзя, он " +"пропускается" + +#: catalog/namespace.c:257 catalog/namespace.c:461 catalog/namespace.c:553 +#: commands/trigger.c:5027 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "ссылки между базами не реализованы: \"%s.%s.%s\"" -#: catalog/namespace.c:306 +#: catalog/namespace.c:314 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "для временных таблиц имя схемы не указывается" -#: catalog/namespace.c:387 +#: catalog/namespace.c:395 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "не удалось получить блокировку таблицы \"%s.%s\"" -#: catalog/namespace.c:392 commands/lockcmds.c:162 commands/lockcmds.c:249 +#: catalog/namespace.c:400 commands/lockcmds.c:143 commands/lockcmds.c:228 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "не удалось получить блокировку таблицы \"%s\"" -#: catalog/namespace.c:420 parser/parse_relation.c:1172 +#: catalog/namespace.c:428 parser/parse_relation.c:1357 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "отношение \"%s.%s\" не существует" -#: catalog/namespace.c:425 parser/parse_relation.c:1185 -#: parser/parse_relation.c:1193 +#: catalog/namespace.c:433 parser/parse_relation.c:1370 +#: parser/parse_relation.c:1378 #, c-format msgid "relation \"%s\" does not exist" msgstr "отношение \"%s\" не существует" -#: catalog/namespace.c:491 catalog/namespace.c:3022 commands/extension.c:1469 -#: commands/extension.c:1475 +#: catalog/namespace.c:499 catalog/namespace.c:3030 commands/extension.c:1519 +#: commands/extension.c:1525 #, c-format msgid "no schema has been selected to create in" msgstr "схема для создания объектов не выбрана" -#: catalog/namespace.c:643 catalog/namespace.c:656 +#: catalog/namespace.c:651 catalog/namespace.c:664 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "во временных схемах других сеансов нельзя создавать отношения" -#: catalog/namespace.c:647 +#: catalog/namespace.c:655 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "создавать временные отношения можно только во временных схемах" -#: catalog/namespace.c:662 +#: catalog/namespace.c:670 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "во временных схемах можно создавать только временные отношения" -#: catalog/namespace.c:2214 +#: catalog/namespace.c:2222 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "объект статистики \"%s\" не существует" -#: catalog/namespace.c:2337 +#: catalog/namespace.c:2345 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "анализатор текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2463 +#: catalog/namespace.c:2471 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "словарь текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2590 +#: catalog/namespace.c:2598 #, c-format msgid "text search template \"%s\" does not exist" msgstr "шаблон текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2716 commands/tsearchcmds.c:1197 +#: catalog/namespace.c:2724 commands/tsearchcmds.c:1194 #: utils/cache/ts_cache.c:617 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "конфигурация текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2829 parser/parse_expr.c:866 parser/parse_target.c:1221 +#: catalog/namespace.c:2837 parser/parse_expr.c:872 parser/parse_target.c:1228 #, c-format msgid "cross-database references are not implemented: %s" msgstr "ссылки между базами не реализованы: %s" -#: catalog/namespace.c:2835 parser/parse_expr.c:873 parser/parse_target.c:1228 -#: gram.y:14731 gram.y:16165 +#: catalog/namespace.c:2843 parser/parse_expr.c:879 parser/parse_target.c:1235 +#: gram.y:14982 gram.y:16436 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "неверное полное имя (слишком много компонентов): %s" -#: catalog/namespace.c:2965 +#: catalog/namespace.c:2973 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "перемещать объекты в/из внутренних схем нельзя" -#: catalog/namespace.c:2971 +#: catalog/namespace.c:2979 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "перемещать объекты в/из схем TOAST нельзя" -#: catalog/namespace.c:3044 commands/schemacmds.c:257 commands/schemacmds.c:337 -#: commands/tablecmds.c:1163 +#: catalog/namespace.c:3052 commands/schemacmds.c:256 commands/schemacmds.c:336 +#: commands/tablecmds.c:1194 #, c-format msgid "schema \"%s\" does not exist" msgstr "схема \"%s\" не существует" -#: catalog/namespace.c:3075 +#: catalog/namespace.c:3083 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "неверное имя отношения (слишком много компонентов): %s" -#: catalog/namespace.c:3609 +#: catalog/namespace.c:3646 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "правило сортировки \"%s\" для кодировки \"%s\" не существует" -#: catalog/namespace.c:3664 +#: catalog/namespace.c:3701 #, c-format msgid "conversion \"%s\" does not exist" msgstr "преобразование \"%s\" не существует" -#: catalog/namespace.c:3904 +#: catalog/namespace.c:3965 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "нет прав для создания временных таблиц в базе \"%s\"" -#: catalog/namespace.c:3920 +#: catalog/namespace.c:3981 #, c-format msgid "cannot create temporary tables during recovery" msgstr "создавать временные таблицы в процессе восстановления нельзя" -#: catalog/namespace.c:3926 +#: catalog/namespace.c:3987 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "создавать временные таблицы во время параллельных операций нельзя" -#: catalog/namespace.c:4209 commands/tablespace.c:1205 commands/variable.c:64 -#: utils/misc/guc.c:10892 utils/misc/guc.c:10970 +#: catalog/namespace.c:4286 commands/tablespace.c:1217 commands/variable.c:64 +#: utils/misc/guc.c:11144 utils/misc/guc.c:11222 #, c-format msgid "List syntax is invalid." msgstr "Ошибка синтаксиса в списке." -#: catalog/objectaddress.c:1274 catalog/pg_publication.c:66 -#: commands/policy.c:95 commands/policy.c:395 commands/policy.c:485 -#: commands/tablecmds.c:226 commands/tablecmds.c:268 commands/tablecmds.c:1941 -#: commands/tablecmds.c:5229 commands/tablecmds.c:10463 +#: catalog/objectaddress.c:1275 catalog/pg_publication.c:57 +#: commands/policy.c:95 commands/policy.c:375 commands/policy.c:465 +#: commands/tablecmds.c:230 commands/tablecmds.c:272 commands/tablecmds.c:1989 +#: commands/tablecmds.c:5628 commands/tablecmds.c:11107 #, c-format msgid "\"%s\" is not a table" msgstr "\"%s\" - это не таблица" -#: catalog/objectaddress.c:1281 commands/tablecmds.c:238 -#: commands/tablecmds.c:5259 commands/tablecmds.c:14998 commands/view.c:138 +#: catalog/objectaddress.c:1282 commands/tablecmds.c:242 +#: commands/tablecmds.c:5658 commands/tablecmds.c:15733 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "\"%s\" - это не представление" -#: catalog/objectaddress.c:1288 commands/matview.c:175 commands/tablecmds.c:244 -#: commands/tablecmds.c:15003 +#: catalog/objectaddress.c:1289 commands/matview.c:175 commands/tablecmds.c:248 +#: commands/tablecmds.c:15738 #, c-format msgid "\"%s\" is not a materialized view" msgstr "\"%s\" - это не материализованное представление" -#: catalog/objectaddress.c:1295 commands/tablecmds.c:262 -#: commands/tablecmds.c:5262 commands/tablecmds.c:15008 +#: catalog/objectaddress.c:1296 commands/tablecmds.c:266 +#: commands/tablecmds.c:5661 commands/tablecmds.c:15743 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" - это не сторонняя таблица" -#: catalog/objectaddress.c:1336 +#: catalog/objectaddress.c:1337 #, c-format msgid "must specify relation and object name" msgstr "необходимо указать имя отношения и объекта" -#: catalog/objectaddress.c:1412 catalog/objectaddress.c:1465 +#: catalog/objectaddress.c:1413 catalog/objectaddress.c:1466 #, c-format msgid "column name must be qualified" msgstr "имя столбца нужно указать в полной форме" -#: catalog/objectaddress.c:1512 +#: catalog/objectaddress.c:1513 #, c-format msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "" "значение по умолчанию для столбца \"%s\" отношения \"%s\" не существует" -#: catalog/objectaddress.c:1549 commands/functioncmds.c:132 -#: commands/tablecmds.c:254 commands/typecmds.c:3321 parser/parse_type.c:244 -#: parser/parse_type.c:273 parser/parse_type.c:846 utils/adt/acl.c:4451 +#: catalog/objectaddress.c:1550 commands/functioncmds.c:133 +#: commands/tablecmds.c:258 commands/typecmds.c:263 commands/typecmds.c:3275 +#: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:845 +#: utils/adt/acl.c:4435 #, c-format msgid "type \"%s\" does not exist" msgstr "тип \"%s\" не существует" -#: catalog/objectaddress.c:1668 +#: catalog/objectaddress.c:1669 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "оператор %d (%s, %s) из семейства %s не существует" -#: catalog/objectaddress.c:1699 +#: catalog/objectaddress.c:1700 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "функция %d (%s, %s) из семейства %s не существует" -#: catalog/objectaddress.c:1750 catalog/objectaddress.c:1776 +#: catalog/objectaddress.c:1751 catalog/objectaddress.c:1777 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "сопоставление для пользователя \"%s\" на сервере \"%s\" не существует" -#: catalog/objectaddress.c:1765 commands/foreigncmds.c:433 -#: commands/foreigncmds.c:1016 commands/foreigncmds.c:1396 +#: catalog/objectaddress.c:1766 commands/foreigncmds.c:430 +#: commands/foreigncmds.c:1012 commands/foreigncmds.c:1395 #: foreign/foreign.c:723 #, c-format msgid "server \"%s\" does not exist" msgstr "сервер \"%s\" не существует" -#: catalog/objectaddress.c:1832 +#: catalog/objectaddress.c:1833 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "публикуемое отношение \"%s\" в публикации \"%s\" не существует" -#: catalog/objectaddress.c:1894 +#: catalog/objectaddress.c:1895 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "нераспознанный тип объекта ACL по умолчанию: \"%c\"" -#: catalog/objectaddress.c:1895 +#: catalog/objectaddress.c:1896 #, c-format msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." msgstr "Допустимые типы объектов: \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." -#: catalog/objectaddress.c:1946 +#: catalog/objectaddress.c:1947 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "" "ACL по умолчанию для пользователя \"%s\" в схеме \"%s\" для объекта %s не " "существует" -#: catalog/objectaddress.c:1951 +#: catalog/objectaddress.c:1952 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "" "ACL по умолчанию для пользователя \"%s\" и для объекта %s не существует" -#: catalog/objectaddress.c:1978 catalog/objectaddress.c:2036 -#: catalog/objectaddress.c:2093 +#: catalog/objectaddress.c:1979 catalog/objectaddress.c:2037 +#: catalog/objectaddress.c:2094 #, c-format msgid "name or argument lists may not contain nulls" msgstr "списки имён и аргументов не должны содержать NULL" -#: catalog/objectaddress.c:2012 +#: catalog/objectaddress.c:2013 #, c-format msgid "unsupported object type \"%s\"" msgstr "неподдерживаемый тип объекта: \"%s\"" -#: catalog/objectaddress.c:2032 catalog/objectaddress.c:2050 -#: catalog/objectaddress.c:2191 +#: catalog/objectaddress.c:2033 catalog/objectaddress.c:2051 +#: catalog/objectaddress.c:2192 #, c-format msgid "name list length must be exactly %d" msgstr "длина списка имён должна быть равна %d" -#: catalog/objectaddress.c:2054 +#: catalog/objectaddress.c:2055 #, c-format msgid "large object OID may not be null" msgstr "OID большого объекта не может быть NULL" -#: catalog/objectaddress.c:2063 catalog/objectaddress.c:2126 -#: catalog/objectaddress.c:2133 +#: catalog/objectaddress.c:2064 catalog/objectaddress.c:2127 +#: catalog/objectaddress.c:2134 #, c-format msgid "name list length must be at least %d" msgstr "длина списка аргументов должна быть не меньше %d" -#: catalog/objectaddress.c:2119 catalog/objectaddress.c:2140 +#: catalog/objectaddress.c:2120 catalog/objectaddress.c:2141 #, c-format msgid "argument list length must be exactly %d" msgstr "длина списка аргументов должна быть равна %d" -#: catalog/objectaddress.c:2392 libpq/be-fsstubs.c:321 +#: catalog/objectaddress.c:2393 libpq/be-fsstubs.c:321 #, c-format msgid "must be owner of large object %u" msgstr "нужно быть владельцем большого объекта %u" -#: catalog/objectaddress.c:2407 commands/functioncmds.c:1535 +#: catalog/objectaddress.c:2408 commands/functioncmds.c:1445 #, c-format msgid "must be owner of type %s or type %s" msgstr "это разрешено только владельцу типа %s или %s" -#: catalog/objectaddress.c:2457 catalog/objectaddress.c:2474 +#: catalog/objectaddress.c:2458 catalog/objectaddress.c:2475 #, c-format msgid "must be superuser" msgstr "требуются права суперпользователя" -#: catalog/objectaddress.c:2464 +#: catalog/objectaddress.c:2465 #, c-format msgid "must have CREATEROLE privilege" msgstr "требуется право CREATEROLE" -#: catalog/objectaddress.c:2543 +#: catalog/objectaddress.c:2544 #, c-format msgid "unrecognized object type \"%s\"" msgstr "нераспознанный тип объекта \"%s\"" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2771 +#: catalog/objectaddress.c:2772 #, c-format msgid "column %s of %s" msgstr "столбец %s отношения %s" -#: catalog/objectaddress.c:2781 +#: catalog/objectaddress.c:2782 #, c-format msgid "function %s" msgstr "функция %s" -#: catalog/objectaddress.c:2786 +#: catalog/objectaddress.c:2787 #, c-format msgid "type %s" msgstr "тип %s" -#: catalog/objectaddress.c:2816 +#: catalog/objectaddress.c:2817 #, c-format msgid "cast from %s to %s" msgstr "приведение %s к %s" -#: catalog/objectaddress.c:2844 +#: catalog/objectaddress.c:2845 #, c-format msgid "collation %s" msgstr "правило сортировки %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2870 +#: catalog/objectaddress.c:2871 #, c-format msgid "constraint %s on %s" msgstr "ограничение %s в отношении %s" -#: catalog/objectaddress.c:2876 +#: catalog/objectaddress.c:2877 #, c-format msgid "constraint %s" msgstr "ограничение %s" -#: catalog/objectaddress.c:2903 +#: catalog/objectaddress.c:2904 #, c-format msgid "conversion %s" msgstr "преобразование %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:2942 +#: catalog/objectaddress.c:2943 #, c-format msgid "default value for %s" msgstr "значение по умолчанию для %s" -#: catalog/objectaddress.c:2951 +#: catalog/objectaddress.c:2952 #, c-format msgid "language %s" msgstr "язык %s" -#: catalog/objectaddress.c:2956 +#: catalog/objectaddress.c:2957 #, c-format msgid "large object %u" msgstr "большой объект %u" -#: catalog/objectaddress.c:2961 +#: catalog/objectaddress.c:2962 #, c-format msgid "operator %s" msgstr "оператор %s" -#: catalog/objectaddress.c:2993 +#: catalog/objectaddress.c:2994 #, c-format msgid "operator class %s for access method %s" msgstr "класс операторов %s для метода доступа %s" -#: catalog/objectaddress.c:3016 +#: catalog/objectaddress.c:3017 #, c-format msgid "access method %s" msgstr "метод доступа %s" @@ -5048,7 +5264,7 @@ msgstr "метод доступа %s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3058 +#: catalog/objectaddress.c:3059 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "оператор %d (%s, %s) из семейства \"%s\": %s" @@ -5057,245 +5273,231 @@ msgstr "оператор %d (%s, %s) из семейства \"%s\": %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3108 +#: catalog/objectaddress.c:3109 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "функция %d (%s, %s) из семейства \"%s\": %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3152 +#: catalog/objectaddress.c:3153 #, c-format msgid "rule %s on %s" msgstr "правило %s для отношения %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3190 +#: catalog/objectaddress.c:3191 #, c-format msgid "trigger %s on %s" msgstr "триггер %s в отношении %s" -#: catalog/objectaddress.c:3206 +#: catalog/objectaddress.c:3207 #, c-format msgid "schema %s" msgstr "схема %s" -#: catalog/objectaddress.c:3229 +#: catalog/objectaddress.c:3230 #, c-format msgid "statistics object %s" msgstr "объект статистики %s" -#: catalog/objectaddress.c:3256 +#: catalog/objectaddress.c:3257 #, c-format msgid "text search parser %s" msgstr "анализатор текстового поиска %s" -#: catalog/objectaddress.c:3282 +#: catalog/objectaddress.c:3283 #, c-format msgid "text search dictionary %s" msgstr "словарь текстового поиска %s" -#: catalog/objectaddress.c:3308 +#: catalog/objectaddress.c:3309 #, c-format msgid "text search template %s" msgstr "шаблон текстового поиска %s" -#: catalog/objectaddress.c:3334 +#: catalog/objectaddress.c:3335 #, c-format msgid "text search configuration %s" msgstr "конфигурация текстового поиска %s" -#: catalog/objectaddress.c:3343 +#: catalog/objectaddress.c:3344 #, c-format msgid "role %s" msgstr "роль %s" -#: catalog/objectaddress.c:3356 +#: catalog/objectaddress.c:3357 #, c-format msgid "database %s" msgstr "база данных %s" -#: catalog/objectaddress.c:3368 +#: catalog/objectaddress.c:3369 #, c-format msgid "tablespace %s" msgstr "табличное пространство %s" -#: catalog/objectaddress.c:3377 +#: catalog/objectaddress.c:3378 #, c-format msgid "foreign-data wrapper %s" msgstr "обёртка сторонних данных %s" -#: catalog/objectaddress.c:3386 +#: catalog/objectaddress.c:3387 #, c-format msgid "server %s" msgstr "сервер %s" -#: catalog/objectaddress.c:3414 +#: catalog/objectaddress.c:3415 #, c-format msgid "user mapping for %s on server %s" msgstr "сопоставление для пользователя %s на сервере %s" -#: catalog/objectaddress.c:3459 +#: catalog/objectaddress.c:3460 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "" "права по умолчанию для новых отношений, принадлежащих роли %s в схеме %s" -#: catalog/objectaddress.c:3463 +#: catalog/objectaddress.c:3464 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "права по умолчанию для новых отношений, принадлежащих роли %s" -#: catalog/objectaddress.c:3469 +#: catalog/objectaddress.c:3470 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "" "права по умолчанию для новых последовательностей, принадлежащих роли %s в " "схеме %s" -#: catalog/objectaddress.c:3473 +#: catalog/objectaddress.c:3474 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "" "права по умолчанию для новых последовательностей, принадлежащих роли %s" -#: catalog/objectaddress.c:3479 +#: catalog/objectaddress.c:3480 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "права по умолчанию для новых функций, принадлежащих роли %s в схеме %s" -#: catalog/objectaddress.c:3483 +#: catalog/objectaddress.c:3484 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "права по умолчанию для новых функций, принадлежащих роли %s" -#: catalog/objectaddress.c:3489 +#: catalog/objectaddress.c:3490 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "права по умолчанию для новых типов, принадлежащих роли %s в схеме %s" -#: catalog/objectaddress.c:3493 +#: catalog/objectaddress.c:3494 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "права по умолчанию для новых типов, принадлежащих роли %s" -#: catalog/objectaddress.c:3499 +#: catalog/objectaddress.c:3500 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "права по умолчанию для новых схем, принадлежащих роли %s" -#: catalog/objectaddress.c:3506 +#: catalog/objectaddress.c:3507 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "" "права по умолчанию для новых объектов, принадлежащих роли %s в схеме %s" -#: catalog/objectaddress.c:3510 +#: catalog/objectaddress.c:3511 #, c-format msgid "default privileges belonging to role %s" msgstr "права по умолчанию для новых объектов, принадлежащих роли %s" -#: catalog/objectaddress.c:3528 +#: catalog/objectaddress.c:3529 #, c-format msgid "extension %s" msgstr "расширение %s" -#: catalog/objectaddress.c:3541 +#: catalog/objectaddress.c:3542 #, c-format msgid "event trigger %s" msgstr "событийный триггер %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3577 +#: catalog/objectaddress.c:3578 #, c-format msgid "policy %s on %s" msgstr "политика %s отношения %s" -#: catalog/objectaddress.c:3587 +#: catalog/objectaddress.c:3588 #, c-format msgid "publication %s" msgstr "публикация %s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3613 +#: catalog/objectaddress.c:3614 #, c-format msgid "publication of %s in publication %s" msgstr "публикуемое отношение %s в публикации %s" -#: catalog/objectaddress.c:3622 +#: catalog/objectaddress.c:3623 #, c-format msgid "subscription %s" msgstr "подписка %s" -#: catalog/objectaddress.c:3641 +#: catalog/objectaddress.c:3642 #, c-format msgid "transform for %s language %s" msgstr "преобразование для %s, языка %s" -#: catalog/objectaddress.c:3704 +#: catalog/objectaddress.c:3705 #, c-format msgid "table %s" msgstr "таблица %s" -#: catalog/objectaddress.c:3709 +#: catalog/objectaddress.c:3710 #, c-format msgid "index %s" msgstr "индекс %s" -#: catalog/objectaddress.c:3713 +#: catalog/objectaddress.c:3714 #, c-format msgid "sequence %s" msgstr "последовательность %s" -#: catalog/objectaddress.c:3717 +#: catalog/objectaddress.c:3718 #, c-format msgid "toast table %s" msgstr "TOAST-таблица %s" -#: catalog/objectaddress.c:3721 +#: catalog/objectaddress.c:3722 #, c-format msgid "view %s" msgstr "представление %s" -#: catalog/objectaddress.c:3725 +#: catalog/objectaddress.c:3726 #, c-format msgid "materialized view %s" msgstr "материализованное представление %s" -#: catalog/objectaddress.c:3729 +#: catalog/objectaddress.c:3730 #, c-format msgid "composite type %s" msgstr "составной тип %s" -#: catalog/objectaddress.c:3733 +#: catalog/objectaddress.c:3734 #, c-format msgid "foreign table %s" msgstr "сторонняя таблица %s" -#: catalog/objectaddress.c:3738 +#: catalog/objectaddress.c:3739 #, c-format msgid "relation %s" msgstr "отношение %s" -#: catalog/objectaddress.c:3775 +#: catalog/objectaddress.c:3776 #, c-format msgid "operator family %s for access method %s" msgstr "семейство операторов %s для метода доступа %s" -#: catalog/partition.c:214 commands/analyze.c:1359 commands/indexcmds.c:1111 -#: commands/tablecmds.c:1094 commands/tablecmds.c:8251 -#: commands/tablecmds.c:8394 commands/tablecmds.c:8585 -#: commands/tablecmds.c:8722 commands/tablecmds.c:10554 -#: commands/tablecmds.c:15953 commands/tablecmds.c:16591 -#: executor/execExprInterp.c:3312 executor/execMain.c:1854 -#: executor/execMain.c:1940 executor/execMain.c:1990 executor/execMain.c:2098 -#: executor/execPartition.c:590 executor/execPartition.c:650 -#: executor/execPartition.c:794 executor/execPartition.c:908 -#: executor/execPartition.c:941 executor/execPartition.c:1046 -#: executor/nodeModifyTable.c:1959 -msgid "could not convert row type" -msgstr "не удалось преобразовать тип строки" - -#: catalog/pg_aggregate.c:129 +#: catalog/pg_aggregate.c:128 #, c-format msgid "aggregates cannot have more than %d argument" msgid_plural "aggregates cannot have more than %d arguments" @@ -5303,28 +5505,19 @@ msgstr[0] "агрегатные функции допускают не боль msgstr[1] "агрегатные функции допускают не больше %d аргументов" msgstr[2] "агрегатные функции допускают не больше %d аргументов" -#: catalog/pg_aggregate.c:152 catalog/pg_aggregate.c:162 +#: catalog/pg_aggregate.c:143 catalog/pg_aggregate.c:157 #, c-format msgid "cannot determine transition data type" msgstr "не удалось определить переходный тип данных" -#: catalog/pg_aggregate.c:153 catalog/pg_aggregate.c:163 -#, c-format -msgid "" -"An aggregate using a polymorphic transition type must have at least one " -"polymorphic argument." -msgstr "" -"Агрегатная функция, использующая полиморфный переходный тип, должна иметь " -"минимум один полиморфный аргумент." - -#: catalog/pg_aggregate.c:176 +#: catalog/pg_aggregate.c:172 #, c-format msgid "a variadic ordered-set aggregate must use VARIADIC type ANY" msgstr "" "сортирующая агрегатная функция с непостоянными аргументами должна " "использовать тип VARIADIC ANY" -#: catalog/pg_aggregate.c:202 +#: catalog/pg_aggregate.c:198 #, c-format msgid "" "a hypothetical-set aggregate must have direct arguments matching its " @@ -5333,12 +5526,12 @@ msgstr "" "гипотезирующая агрегатная функция должна иметь непосредственные аргументы, " "соответствующие агрегатным" -#: catalog/pg_aggregate.c:249 catalog/pg_aggregate.c:293 +#: catalog/pg_aggregate.c:245 catalog/pg_aggregate.c:289 #, c-format msgid "return type of transition function %s is not %s" msgstr "функция перехода %s должна возвращать тип %s" -#: catalog/pg_aggregate.c:269 catalog/pg_aggregate.c:312 +#: catalog/pg_aggregate.c:265 catalog/pg_aggregate.c:308 #, c-format msgid "" "must not omit initial value when transition function is strict and " @@ -5347,76 +5540,58 @@ msgstr "" "нельзя опускать начальное значение, когда функция перехода объявлена как " "STRICT и переходный тип несовместим с входным типом" -#: catalog/pg_aggregate.c:338 +#: catalog/pg_aggregate.c:334 #, c-format msgid "return type of inverse transition function %s is not %s" msgstr "обратная функция перехода %s должна возвращать тип %s" -#: catalog/pg_aggregate.c:355 executor/nodeWindowAgg.c:2851 +#: catalog/pg_aggregate.c:351 executor/nodeWindowAgg.c:2852 #, c-format msgid "" "strictness of aggregate's forward and inverse transition functions must match" msgstr "" "прямая и обратная функции перехода агрегата должны иметь одинаковую строгость" -#: catalog/pg_aggregate.c:399 catalog/pg_aggregate.c:552 +#: catalog/pg_aggregate.c:395 catalog/pg_aggregate.c:553 #, c-format msgid "final function with extra arguments must not be declared STRICT" msgstr "" "финальная функция с дополнительными аргументами не должна объявляться как " "строгая (STRICT)" -#: catalog/pg_aggregate.c:430 +#: catalog/pg_aggregate.c:426 #, c-format msgid "return type of combine function %s is not %s" msgstr "комбинирующая функция %s должна возвращать тип %s" -#: catalog/pg_aggregate.c:442 executor/nodeAgg.c:2993 +#: catalog/pg_aggregate.c:438 executor/nodeAgg.c:4197 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "" "комбинирующая функция с переходным типом %s не должна объявляться как " "строгая (STRICT)" -#: catalog/pg_aggregate.c:461 +#: catalog/pg_aggregate.c:457 #, c-format msgid "return type of serialization function %s is not %s" msgstr "функция сериализации %s должна возвращать тип %s" -#: catalog/pg_aggregate.c:482 +#: catalog/pg_aggregate.c:478 #, c-format msgid "return type of deserialization function %s is not %s" msgstr "функция десериализации %s должна возвращать тип %s" -#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:243 catalog/pg_proc.c:250 +#: catalog/pg_aggregate.c:497 catalog/pg_proc.c:186 catalog/pg_proc.c:220 #, c-format msgid "cannot determine result data type" msgstr "не удалось определить тип результата" -#: catalog/pg_aggregate.c:499 -#, c-format -msgid "" -"An aggregate returning a polymorphic type must have at least one polymorphic " -"argument." -msgstr "" -"Агрегатная функция, возвращающая полиморфный тип, должна иметь минимум один " -"полиморфный аргумент." - -#: catalog/pg_aggregate.c:511 catalog/pg_proc.c:256 +#: catalog/pg_aggregate.c:512 catalog/pg_proc.c:199 catalog/pg_proc.c:228 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "небезопасное использование псевдотипа \"internal\"" -#: catalog/pg_aggregate.c:512 catalog/pg_proc.c:257 -#, c-format -msgid "" -"A function returning \"internal\" must have at least one \"internal\" " -"argument." -msgstr "" -"Функция, возвращающая \"internal\", должна иметь минимум один аргумент " -"\"internal\"." - -#: catalog/pg_aggregate.c:565 +#: catalog/pg_aggregate.c:566 #, c-format msgid "" "moving-aggregate implementation returns type %s, but plain implementation " @@ -5425,66 +5600,71 @@ msgstr "" "реализация движимого агрегата возвращает тип %s, но простая реализация " "возвращает %s" -#: catalog/pg_aggregate.c:576 +#: catalog/pg_aggregate.c:577 #, c-format msgid "sort operator can only be specified for single-argument aggregates" msgstr "" "оператор сортировки можно указать только для агрегатных функций с одним " "аргументом" -#: catalog/pg_aggregate.c:703 catalog/pg_proc.c:396 +#: catalog/pg_aggregate.c:704 catalog/pg_proc.c:374 #, c-format msgid "cannot change routine kind" msgstr "тип подпрограммы изменить нельзя" -#: catalog/pg_aggregate.c:705 +#: catalog/pg_aggregate.c:706 #, c-format msgid "\"%s\" is an ordinary aggregate function." msgstr "\"%s\" — обычная агрегатная функция." -#: catalog/pg_aggregate.c:707 +#: catalog/pg_aggregate.c:708 #, c-format msgid "\"%s\" is an ordered-set aggregate." msgstr "\"%s\" — сортирующая агрегатная функция." -#: catalog/pg_aggregate.c:709 +#: catalog/pg_aggregate.c:710 #, c-format msgid "\"%s\" is a hypothetical-set aggregate." msgstr "\"%s\" — гипотезирующая агрегатная функция." -#: catalog/pg_aggregate.c:714 +#: catalog/pg_aggregate.c:715 #, c-format msgid "cannot change number of direct arguments of an aggregate function" msgstr "изменить число непосредственных аргументов агрегатной функции нельзя" -#: catalog/pg_aggregate.c:869 commands/functioncmds.c:665 -#: commands/typecmds.c:1751 commands/typecmds.c:1802 commands/typecmds.c:1833 -#: commands/typecmds.c:1856 commands/typecmds.c:1877 commands/typecmds.c:1904 -#: commands/typecmds.c:1931 commands/typecmds.c:2008 commands/typecmds.c:2050 -#: parser/parse_func.c:418 parser/parse_func.c:447 parser/parse_func.c:472 -#: parser/parse_func.c:486 parser/parse_func.c:606 parser/parse_func.c:626 -#: parser/parse_func.c:2144 parser/parse_func.c:2335 +#: catalog/pg_aggregate.c:870 commands/functioncmds.c:667 +#: commands/typecmds.c:1658 commands/typecmds.c:1704 commands/typecmds.c:1756 +#: commands/typecmds.c:1793 commands/typecmds.c:1827 commands/typecmds.c:1861 +#: commands/typecmds.c:1895 commands/typecmds.c:1972 commands/typecmds.c:2014 +#: parser/parse_func.c:414 parser/parse_func.c:443 parser/parse_func.c:468 +#: parser/parse_func.c:482 parser/parse_func.c:602 parser/parse_func.c:622 +#: parser/parse_func.c:2129 parser/parse_func.c:2320 #, c-format msgid "function %s does not exist" msgstr "функция %s не существует" -#: catalog/pg_aggregate.c:875 +#: catalog/pg_aggregate.c:876 #, c-format msgid "function %s returns a set" msgstr "функция %s возвращает множество" -#: catalog/pg_aggregate.c:890 +#: catalog/pg_aggregate.c:891 #, c-format msgid "function %s must accept VARIADIC ANY to be used in this aggregate" msgstr "" "для использования в этой агрегатной функции функция %s должна принимать " "VARIADIC ANY" -#: catalog/pg_aggregate.c:914 +#: catalog/pg_aggregate.c:915 #, c-format msgid "function %s requires run-time type coercion" msgstr "функции %s требуется приведение типов во время выполнения" +#: catalog/pg_cast.c:67 +#, c-format +msgid "cast from type %s to type %s already exists" +msgstr "приведение типа %s к типу %s уже существует" + #: catalog/pg_collation.c:93 catalog/pg_collation.c:140 #, c-format msgid "collation \"%s\" already exists, skipping" @@ -5506,17 +5686,17 @@ msgstr "правило сортировки \"%s\" уже существует" msgid "collation \"%s\" for encoding \"%s\" already exists" msgstr "правило сортировки \"%s\" для кодировки \"%s\" уже существует" -#: catalog/pg_constraint.c:677 +#: catalog/pg_constraint.c:676 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "ограничение \"%s\" для домена %s уже существует" -#: catalog/pg_constraint.c:875 catalog/pg_constraint.c:968 +#: catalog/pg_constraint.c:874 catalog/pg_constraint.c:967 #, c-format msgid "constraint \"%s\" for table \"%s\" does not exist" msgstr "ограничение \"%s\" для таблицы \"%s\" не существует" -#: catalog/pg_constraint.c:1057 +#: catalog/pg_constraint.c:1056 #, c-format msgid "constraint \"%s\" for domain %s does not exist" msgstr "ограничение \"%s\" для домена %s не существует" @@ -5531,55 +5711,55 @@ msgstr "преобразование \"%s\" уже существует" msgid "default conversion for %s to %s already exists" msgstr "преобразование по умолчанию из %s в %s уже существует" -#: catalog/pg_depend.c:162 commands/extension.c:3229 +#: catalog/pg_depend.c:162 commands/extension.c:3324 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s уже относится к расширению \"%s\"" -#: catalog/pg_depend.c:489 +#: catalog/pg_depend.c:538 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "" "ликвидировать зависимость от объекта %s нельзя, так как это системный объект" -#: catalog/pg_enum.c:128 catalog/pg_enum.c:231 catalog/pg_enum.c:526 +#: catalog/pg_enum.c:127 catalog/pg_enum.c:230 catalog/pg_enum.c:525 #, c-format msgid "invalid enum label \"%s\"" msgstr "неверная метка в перечислении \"%s\"" -#: catalog/pg_enum.c:129 catalog/pg_enum.c:232 catalog/pg_enum.c:527 +#: catalog/pg_enum.c:128 catalog/pg_enum.c:231 catalog/pg_enum.c:526 #, c-format msgid "Labels must be %d characters or less." msgstr "Длина метки не должна превышать %d байт." -#: catalog/pg_enum.c:260 +#: catalog/pg_enum.c:259 #, c-format msgid "enum label \"%s\" already exists, skipping" msgstr "метка перечисления \"%s\" уже существует, пропускается" -#: catalog/pg_enum.c:267 catalog/pg_enum.c:570 +#: catalog/pg_enum.c:266 catalog/pg_enum.c:569 #, c-format msgid "enum label \"%s\" already exists" msgstr "метка перечисления \"%s\" уже существует" -#: catalog/pg_enum.c:322 catalog/pg_enum.c:565 +#: catalog/pg_enum.c:321 catalog/pg_enum.c:564 #, c-format msgid "\"%s\" is not an existing enum label" msgstr "в перечислении нет метки\"%s\"" -#: catalog/pg_enum.c:380 +#: catalog/pg_enum.c:379 #, c-format msgid "pg_enum OID value not set when in binary upgrade mode" msgstr "значение OID в pg_enum не задано в режиме двоичного обновления" -#: catalog/pg_enum.c:390 +#: catalog/pg_enum.c:389 #, c-format msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" msgstr "" "конструкция ALTER TYPE ADD BEFORE/AFTER несовместима с двоичным обновлением " "данных" -#: catalog/pg_namespace.c:64 commands/schemacmds.c:266 +#: catalog/pg_namespace.c:64 commands/schemacmds.c:265 #, c-format msgid "schema \"%s\" already exists" msgstr "схема \"%s\" уже существует" @@ -5594,7 +5774,7 @@ msgstr "имя \"%s\" недопустимо для оператора" msgid "only binary operators can have commutators" msgstr "коммутативную операцию можно определить только для бинарных операторов" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:485 +#: catalog/pg_operator.c:374 commands/operatorcmds.c:495 #, c-format msgid "only binary operators can have join selectivity" msgstr "" @@ -5616,13 +5796,13 @@ msgstr "поддержку хеша можно обозначить только msgid "only boolean operators can have negators" msgstr "обратную операцию можно определить только для логических операторов" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:493 +#: catalog/pg_operator.c:397 commands/operatorcmds.c:503 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "" "функцию оценки ограничения можно определить только для логических операторов" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:497 +#: catalog/pg_operator.c:401 commands/operatorcmds.c:507 #, c-format msgid "only boolean operators can have join selectivity" msgstr "" @@ -5651,7 +5831,7 @@ msgid "operator cannot be its own negator or sort operator" msgstr "" "оператор не может быть обратным к себе или собственным оператором сортировки" -#: catalog/pg_proc.c:131 parser/parse_func.c:2206 +#: catalog/pg_proc.c:127 parser/parse_func.c:2191 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" @@ -5659,55 +5839,37 @@ msgstr[0] "функции не могут иметь больше %d аргум msgstr[1] "функции не могут иметь больше %d аргументов" msgstr[2] "функции не могут иметь больше %d аргументов" -#: catalog/pg_proc.c:244 -#, c-format -msgid "" -"A function returning a polymorphic type must have at least one polymorphic " -"argument." -msgstr "" -"Функция, возвращающая полиморфный тип, должна иметь минимум один полиморфный " -"аргумент." - -#: catalog/pg_proc.c:251 -#, c-format -msgid "" -"A function returning \"anyrange\" must have at least one \"anyrange\" " -"argument." -msgstr "" -"Функция, возвращающая \"anyrange\", должна иметь минимум один аргумент " -"\"anyrange\"." - -#: catalog/pg_proc.c:386 +#: catalog/pg_proc.c:364 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "функция \"%s\" с аргументами таких типов уже существует" -#: catalog/pg_proc.c:398 +#: catalog/pg_proc.c:376 #, c-format msgid "\"%s\" is an aggregate function." msgstr "\"%s\" — агрегатная функция." -#: catalog/pg_proc.c:400 +#: catalog/pg_proc.c:378 #, c-format msgid "\"%s\" is a function." msgstr "\"%s\" — функция." -#: catalog/pg_proc.c:402 +#: catalog/pg_proc.c:380 #, c-format msgid "\"%s\" is a procedure." msgstr "\"%s\" — процедура." -#: catalog/pg_proc.c:404 +#: catalog/pg_proc.c:382 #, c-format msgid "\"%s\" is a window function." msgstr "\"%s\" — оконная функция." -#: catalog/pg_proc.c:424 +#: catalog/pg_proc.c:402 #, c-format msgid "cannot change whether a procedure has output parameters" msgstr "определить выходные параметры для процедуры нельзя" -#: catalog/pg_proc.c:425 catalog/pg_proc.c:455 +#: catalog/pg_proc.c:403 catalog/pg_proc.c:433 #, c-format msgid "cannot change return type of existing function" msgstr "изменить тип возврата существующей функции нельзя" @@ -5716,106 +5878,91 @@ msgstr "изменить тип возврата существующей фун #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:431 catalog/pg_proc.c:458 catalog/pg_proc.c:503 -#: catalog/pg_proc.c:529 catalog/pg_proc.c:557 +#: catalog/pg_proc.c:409 catalog/pg_proc.c:436 catalog/pg_proc.c:481 +#: catalog/pg_proc.c:507 catalog/pg_proc.c:533 #, c-format msgid "Use %s %s first." msgstr "Сначала выполните %s %s." -#: catalog/pg_proc.c:456 +#: catalog/pg_proc.c:434 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "Параметры OUT определяют другой тип строки." -#: catalog/pg_proc.c:500 +#: catalog/pg_proc.c:478 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "изменить имя входного параметра \"%s\" нельзя" -#: catalog/pg_proc.c:527 +#: catalog/pg_proc.c:505 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "" "для существующей функции нельзя убрать значения параметров по умолчанию" -#: catalog/pg_proc.c:555 +#: catalog/pg_proc.c:531 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "" "для существующего значения параметра по умолчанию нельзя изменить тип данных" -#: catalog/pg_proc.c:772 +#: catalog/pg_proc.c:748 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "встроенной функции \"%s\" нет" -#: catalog/pg_proc.c:870 +#: catalog/pg_proc.c:846 #, c-format msgid "SQL functions cannot return type %s" msgstr "SQL-функции не могут возвращать тип %s" -#: catalog/pg_proc.c:885 +#: catalog/pg_proc.c:861 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "SQL-функции не могут иметь аргументы типа %s" -#: catalog/pg_proc.c:973 executor/functions.c:1423 +#: catalog/pg_proc.c:954 executor/functions.c:1440 #, c-format msgid "SQL function \"%s\"" msgstr "SQL-функция \"%s\"" -#: catalog/pg_publication.c:57 commands/trigger.c:238 commands/trigger.c:256 -#, c-format -msgid "\"%s\" is a partitioned table" -msgstr "\"%s\" - секционированная таблица" - #: catalog/pg_publication.c:59 #, c-format -msgid "Adding partitioned tables to publications is not supported." -msgstr "Добавление секционированных таблиц в публикации не поддерживается." - -#: catalog/pg_publication.c:60 -#, c-format -msgid "You can add the table partitions individually." -msgstr "Но вы можете добавить секции таблицы по одной." - -#: catalog/pg_publication.c:68 -#, c-format msgid "Only tables can be added to publications." msgstr "В публикации можно добавлять только таблицы." -#: catalog/pg_publication.c:74 +#: catalog/pg_publication.c:65 #, c-format msgid "\"%s\" is a system table" msgstr "\"%s\" - это системная таблица" -#: catalog/pg_publication.c:76 +#: catalog/pg_publication.c:67 #, c-format msgid "System tables cannot be added to publications." msgstr "Системные таблицы нельзя добавлять в публикации." -#: catalog/pg_publication.c:82 +#: catalog/pg_publication.c:73 #, c-format msgid "table \"%s\" cannot be replicated" msgstr "реплицировать таблицу \"%s\" нельзя" -#: catalog/pg_publication.c:84 +#: catalog/pg_publication.c:75 #, c-format msgid "Temporary and unlogged relations cannot be replicated." msgstr "Временные и нежурналируемые отношения не поддерживают репликацию." -#: catalog/pg_publication.c:182 +#: catalog/pg_publication.c:174 #, c-format msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "отношение \"%s\" уже включено в публикацию \"%s\"" -#: catalog/pg_publication.c:418 catalog/pg_publication.c:440 -#: commands/publicationcmds.c:422 commands/publicationcmds.c:727 +#: catalog/pg_publication.c:470 commands/publicationcmds.c:451 +#: commands/publicationcmds.c:762 #, c-format msgid "publication \"%s\" does not exist" msgstr "публикация \"%s\" не существует" -#: catalog/pg_shdepend.c:777 +#: catalog/pg_shdepend.c:832 #, c-format msgid "" "\n" @@ -5833,38 +5980,43 @@ msgstr[2] "" "\n" "и объекты в %d других базах данных (см. список в протоколе сервера)" -#: catalog/pg_shdepend.c:1083 +#: catalog/pg_shdepend.c:1138 #, c-format msgid "role %u was concurrently dropped" msgstr "роль %u удалена другим процессом" -#: catalog/pg_shdepend.c:1102 +#: catalog/pg_shdepend.c:1150 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "табличное пространство %u удалено другим процессом" -#: catalog/pg_shdepend.c:1117 +#: catalog/pg_shdepend.c:1164 #, c-format msgid "database %u was concurrently dropped" msgstr "база данных %u удалена другим процессом" -#: catalog/pg_shdepend.c:1162 +#: catalog/pg_shdepend.c:1209 #, c-format msgid "owner of %s" msgstr "владелец объекта %s" -#: catalog/pg_shdepend.c:1164 +#: catalog/pg_shdepend.c:1211 #, c-format msgid "privileges for %s" msgstr "права доступа к объекту %s" -#: catalog/pg_shdepend.c:1166 +#: catalog/pg_shdepend.c:1213 #, c-format msgid "target of %s" msgstr "субъект политики %s" +#: catalog/pg_shdepend.c:1215 +#, c-format +msgid "tablespace for %s" +msgstr "табличное пространство для %s" + #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1174 +#: catalog/pg_shdepend.c:1223 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" @@ -5872,7 +6024,7 @@ msgstr[0] "%d объект (%s)" msgstr[1] "%d объекта (%s)" msgstr[2] "%d объектов (%s)" -#: catalog/pg_shdepend.c:1285 +#: catalog/pg_shdepend.c:1334 #, c-format msgid "" "cannot drop objects owned by %s because they are required by the database " @@ -5881,7 +6033,7 @@ msgstr "" "удалить объекты, принадлежащие роли %s, нельзя, так как они нужны системе " "баз данных" -#: catalog/pg_shdepend.c:1408 +#: catalog/pg_shdepend.c:1481 #, c-format msgid "" "cannot reassign ownership of objects owned by %s because they are required " @@ -5890,13 +6042,13 @@ msgstr "" "изменить владельца объектов, принадлежащих роли %s, нельзя, так как они " "нужны системе баз данных" -#: catalog/pg_subscription.c:177 commands/subscriptioncmds.c:657 -#: commands/subscriptioncmds.c:871 commands/subscriptioncmds.c:1098 +#: catalog/pg_subscription.c:171 commands/subscriptioncmds.c:644 +#: commands/subscriptioncmds.c:858 commands/subscriptioncmds.c:1080 #, c-format msgid "subscription \"%s\" does not exist" msgstr "подписка \"%s\" не существует" -#: catalog/pg_type.c:131 catalog/pg_type.c:467 +#: catalog/pg_type.c:131 catalog/pg_type.c:468 #, c-format msgid "pg_type OID value not set when in binary upgrade mode" msgstr "значение OID в pg_type не задано в режиме двоичного обновления" @@ -5919,28 +6071,28 @@ msgstr "" msgid "internal size %d is invalid for passed-by-value type" msgstr "внутренний размер %d не подходит для типа, передаваемого по значению" -#: catalog/pg_type.c:306 catalog/pg_type.c:312 +#: catalog/pg_type.c:307 catalog/pg_type.c:313 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "выравнивание \"%c\" не подходит для типа переменной длины" -#: catalog/pg_type.c:320 +#: catalog/pg_type.c:321 commands/typecmds.c:3727 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "для типов постоянного размера применим только режим хранения PLAIN" -#: catalog/pg_type.c:818 +#: catalog/pg_type.c:839 #, c-format msgid "could not form array type name for type \"%s\"" msgstr "не удалось сформировать имя типа массива для типа \"%s\"" -#: catalog/storage.c:344 storage/buffer/bufmgr.c:922 +#: catalog/storage.c:450 storage/buffer/bufmgr.c:935 #, c-format msgid "invalid page in block %u of relation %s" msgstr "неверная страница в блоке %u отношения %s" -#: catalog/toasting.c:106 commands/indexcmds.c:590 commands/tablecmds.c:5241 -#: commands/tablecmds.c:14864 +#: catalog/toasting.c:106 commands/indexcmds.c:639 commands/tablecmds.c:5640 +#: commands/tablecmds.c:15598 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\" - это не таблица и не материализованное представление" @@ -6030,7 +6182,7 @@ msgid "" "must specify both or neither of serialization and deserialization functions" msgstr "функции сериализации и десериализации должны задаваться совместно" -#: commands/aggregatecmds.c:436 commands/functioncmds.c:613 +#: commands/aggregatecmds.c:436 commands/functioncmds.c:615 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "" @@ -6043,147 +6195,147 @@ msgstr "" "параметр \"%s\" должен иметь характеристику READ_ONLY, SHAREABLE или " "READ_WRITE" -#: commands/alter.c:85 commands/event_trigger.c:236 +#: commands/alter.c:84 commands/event_trigger.c:174 #, c-format msgid "event trigger \"%s\" already exists" msgstr "событийный триггер \"%s\" уже существует" -#: commands/alter.c:88 commands/foreigncmds.c:601 +#: commands/alter.c:87 commands/foreigncmds.c:597 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "обёртка сторонних данных \"%s\" уже существует" -#: commands/alter.c:91 commands/foreigncmds.c:907 +#: commands/alter.c:90 commands/foreigncmds.c:903 #, c-format msgid "server \"%s\" already exists" msgstr "сервер \"%s\" уже существует" -#: commands/alter.c:94 commands/proclang.c:368 +#: commands/alter.c:93 commands/proclang.c:132 #, c-format msgid "language \"%s\" already exists" msgstr "язык \"%s\" уже существует" -#: commands/alter.c:97 commands/publicationcmds.c:176 +#: commands/alter.c:96 commands/publicationcmds.c:183 #, c-format msgid "publication \"%s\" already exists" msgstr "публикация \"%s\" уже существует" -#: commands/alter.c:100 commands/subscriptioncmds.c:378 +#: commands/alter.c:99 commands/subscriptioncmds.c:371 #, c-format msgid "subscription \"%s\" already exists" msgstr "подписка \"%s\" уже существует" -#: commands/alter.c:123 +#: commands/alter.c:122 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "преобразование \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:127 +#: commands/alter.c:126 #, c-format msgid "statistics object \"%s\" already exists in schema \"%s\"" msgstr "объект статистики \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:131 +#: commands/alter.c:130 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "анализатор текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:135 +#: commands/alter.c:134 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "словарь текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:139 +#: commands/alter.c:138 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "шаблон текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:143 +#: commands/alter.c:142 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "конфигурация текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:216 +#: commands/alter.c:215 #, c-format msgid "must be superuser to rename %s" msgstr "переименовать \"%s\" может только суперпользователь" -#: commands/alter.c:719 +#: commands/alter.c:744 #, c-format msgid "must be superuser to set schema of %s" msgstr "для назначения схемы объекта %s нужно быть суперпользователем" -#: commands/amcmds.c:59 +#: commands/amcmds.c:60 #, c-format msgid "permission denied to create access method \"%s\"" msgstr "нет прав на создание метода доступа \"%s\"" -#: commands/amcmds.c:61 +#: commands/amcmds.c:62 #, c-format msgid "Must be superuser to create an access method." msgstr "Для создания метода доступа нужно быть суперпользователем." -#: commands/amcmds.c:70 +#: commands/amcmds.c:71 #, c-format msgid "access method \"%s\" already exists" msgstr "метод доступа \"%s\" уже существует" -#: commands/amcmds.c:127 +#: commands/amcmds.c:130 #, c-format msgid "must be superuser to drop access methods" msgstr "для удаления методов доступа нужно быть суперпользователем" -#: commands/amcmds.c:178 commands/indexcmds.c:187 commands/indexcmds.c:741 -#: commands/opclasscmds.c:372 commands/opclasscmds.c:791 +#: commands/amcmds.c:181 commands/indexcmds.c:188 commands/indexcmds.c:790 +#: commands/opclasscmds.c:373 commands/opclasscmds.c:793 #, c-format msgid "access method \"%s\" does not exist" msgstr "метод доступа \"%s\" не существует" -#: commands/amcmds.c:267 +#: commands/amcmds.c:270 #, c-format msgid "handler function is not specified" msgstr "не указана функция-обработчик" -#: commands/amcmds.c:288 commands/event_trigger.c:245 -#: commands/foreigncmds.c:493 commands/proclang.c:115 commands/proclang.c:287 -#: commands/trigger.c:719 parser/parse_clause.c:950 +#: commands/amcmds.c:291 commands/event_trigger.c:183 +#: commands/foreigncmds.c:489 commands/proclang.c:79 commands/trigger.c:687 +#: parser/parse_clause.c:941 #, c-format msgid "function %s must return type %s" msgstr "функция %s должна возвращать тип %s" -#: commands/analyze.c:225 +#: commands/analyze.c:226 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "\"%s\" пропускается --- анализировать эту стороннюю таблицу нельзя" -#: commands/analyze.c:242 +#: commands/analyze.c:243 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "" "\"%s\" пропускается --- анализировать не таблицы или специальные системные " "таблицы нельзя" -#: commands/analyze.c:323 +#: commands/analyze.c:329 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "анализируется дерево наследования \"%s.%s\"" -#: commands/analyze.c:328 +#: commands/analyze.c:334 #, c-format msgid "analyzing \"%s.%s\"" msgstr "анализируется \"%s.%s\"" -#: commands/analyze.c:388 +#: commands/analyze.c:394 #, c-format msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "столбец \"%s\" отношения \"%s\" указан неоднократно" -#: commands/analyze.c:674 +#: commands/analyze.c:700 #, c-format msgid "automatic analyze of table \"%s.%s.%s\" system usage: %s" msgstr "автоматический анализ таблицы \"%s.%s.%s\"; нагрузка системы: %s" -#: commands/analyze.c:1133 +#: commands/analyze.c:1169 #, c-format msgid "" "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead " @@ -6193,7 +6345,7 @@ msgstr "" "%.0f, \"мёртвых\" строк: %.0f; строк в выборке: %d, примерное общее число " "строк: %.0f" -#: commands/analyze.c:1213 +#: commands/analyze.c:1249 #, c-format msgid "" "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree " @@ -6202,7 +6354,7 @@ msgstr "" "пропускается анализ дерева наследования \"%s.%s\" --- это дерево " "наследования не содержит дочерних таблиц" -#: commands/analyze.c:1311 +#: commands/analyze.c:1347 #, c-format msgid "" "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree " @@ -6211,22 +6363,22 @@ msgstr "" "пропускается анализ дерева наследования \"%s.%s\" --- это дерево " "наследования не содержит анализируемых дочерних таблиц" -#: commands/async.c:557 +#: commands/async.c:643 #, c-format msgid "channel name cannot be empty" msgstr "имя канала не может быть пустым" -#: commands/async.c:562 +#: commands/async.c:649 #, c-format msgid "channel name too long" msgstr "слишком длинное имя канала" -#: commands/async.c:569 +#: commands/async.c:654 #, c-format msgid "payload string too long" msgstr "слишком длинная строка сообщения-нагрузки" -#: commands/async.c:755 +#: commands/async.c:873 #, c-format msgid "" "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" @@ -6234,17 +6386,17 @@ msgstr "" "выполнить PREPARE для транзакции с командами LISTEN, UNLISTEN или NOTIFY " "нельзя" -#: commands/async.c:858 +#: commands/async.c:979 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "слишком много уведомлений в очереди NOTIFY" -#: commands/async.c:1490 +#: commands/async.c:1650 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "очередь NOTIFY заполнена на %.0f%%" -#: commands/async.c:1492 +#: commands/async.c:1652 #, c-format msgid "" "The server process with PID %d is among those with the oldest transactions." @@ -6252,7 +6404,7 @@ msgstr "" "В число серверных процессов с самыми старыми транзакциями входит процесс с " "PID %d." -#: commands/async.c:1495 +#: commands/async.c:1655 #, c-format msgid "" "The NOTIFY queue cannot be emptied until that process ends its current " @@ -6261,42 +6413,42 @@ msgstr "" "Очередь NOTIFY можно будет освободить, только когда этот процесс завершит " "текущую транзакцию." -#: commands/cluster.c:126 commands/cluster.c:388 +#: commands/cluster.c:125 commands/cluster.c:362 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "кластеризовать временные таблицы других сеансов нельзя" -#: commands/cluster.c:134 +#: commands/cluster.c:133 #, c-format msgid "cannot cluster a partitioned table" msgstr "кластеризовать секционированную таблицу нельзя" -#: commands/cluster.c:164 +#: commands/cluster.c:151 #, c-format msgid "there is no previously clustered index for table \"%s\"" msgstr "таблица \"%s\" ранее не кластеризовалась по какому-либо индексу" -#: commands/cluster.c:178 commands/tablecmds.c:12130 commands/tablecmds.c:13932 +#: commands/cluster.c:165 commands/tablecmds.c:12871 commands/tablecmds.c:14681 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "индекс \"%s\" для таблицы \"%s\" не существует" -#: commands/cluster.c:377 +#: commands/cluster.c:351 #, c-format msgid "cannot cluster a shared catalog" msgstr "кластеризовать разделяемый каталог нельзя" -#: commands/cluster.c:392 +#: commands/cluster.c:366 #, c-format msgid "cannot vacuum temporary tables of other sessions" msgstr "очищать временные таблицы других сеансов нельзя" -#: commands/cluster.c:458 commands/tablecmds.c:13942 +#: commands/cluster.c:432 commands/tablecmds.c:14691 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\" не является индексом таблицы \"%s\"" -#: commands/cluster.c:466 +#: commands/cluster.c:440 #, c-format msgid "" "cannot cluster on index \"%s\" because access method does not support " @@ -6304,33 +6456,33 @@ msgid "" msgstr "" "кластеризация по индексу \"%s\" невозможна, её не поддерживает метод доступа" -#: commands/cluster.c:478 +#: commands/cluster.c:452 #, c-format msgid "cannot cluster on partial index \"%s\"" msgstr "кластеризовать по частичному индексу \"%s\" нельзя" -#: commands/cluster.c:492 +#: commands/cluster.c:466 #, c-format msgid "cannot cluster on invalid index \"%s\"" msgstr "нельзя кластеризовать таблицу по неверному индексу \"%s\"" -#: commands/cluster.c:516 +#: commands/cluster.c:490 #, c-format msgid "cannot mark index clustered in partitioned table" msgstr "пометить индекс как кластеризованный в секционированной таблице нельзя" -#: commands/cluster.c:899 +#: commands/cluster.c:863 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr "кластеризация \"%s.%s\" путём сканирования индекса \"%s\"" -#: commands/cluster.c:905 +#: commands/cluster.c:869 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "" "кластеризация \"%s.%s\" путём последовательного сканирования и сортировки" -#: commands/cluster.c:936 +#: commands/cluster.c:900 #, c-format msgid "" "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" @@ -6338,7 +6490,7 @@ msgstr "" "\"%s\": найдено удаляемых версий строк: %.0f, неудаляемых - %.0f, " "просмотрено страниц: %u" -#: commands/cluster.c:940 +#: commands/cluster.c:904 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -6347,90 +6499,90 @@ msgstr "" "В данный момент нельзя удалить \"мёртвых\" строк %.0f.\n" "%s." -#: commands/collationcmds.c:104 +#: commands/collationcmds.c:105 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "атрибут COLLATION \"%s\" не распознан" -#: commands/collationcmds.c:147 +#: commands/collationcmds.c:148 #, c-format msgid "collation \"default\" cannot be copied" msgstr "правило сортировки \"default\" нельзя скопировать" -#: commands/collationcmds.c:180 +#: commands/collationcmds.c:181 #, c-format msgid "unrecognized collation provider: %s" msgstr "нераспознанный поставщик правил сортировки: %s" -#: commands/collationcmds.c:189 +#: commands/collationcmds.c:190 #, c-format msgid "parameter \"lc_collate\" must be specified" msgstr "необходимо указать параметр \"lc_collate\"" -#: commands/collationcmds.c:194 +#: commands/collationcmds.c:195 #, c-format msgid "parameter \"lc_ctype\" must be specified" msgstr "необходимо указать параметр \"lc_ctype\"" -#: commands/collationcmds.c:204 +#: commands/collationcmds.c:205 #, c-format msgid "nondeterministic collations not supported with this provider" msgstr "" "недетерминированные правила сортировки с этим провайдером не поддерживаются" -#: commands/collationcmds.c:264 +#: commands/collationcmds.c:265 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "" "правило сортировки \"%s\" для кодировки \"%s\" уже существует в схеме \"%s\"" -#: commands/collationcmds.c:275 +#: commands/collationcmds.c:276 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "правило сортировки \"%s\" уже существует в схеме \"%s\"" -#: commands/collationcmds.c:323 +#: commands/collationcmds.c:324 #, c-format msgid "changing version from %s to %s" msgstr "изменение версии с %s на %s" -#: commands/collationcmds.c:338 +#: commands/collationcmds.c:339 #, c-format msgid "version has not changed" msgstr "версия не была изменена" -#: commands/collationcmds.c:469 +#: commands/collationcmds.c:470 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "не удалось получить из названия локали \"%s\" метку языка: %s" -#: commands/collationcmds.c:530 +#: commands/collationcmds.c:531 #, c-format msgid "must be superuser to import system collations" msgstr "" "импортировать системные правила сортировки может только суперпользователь" -#: commands/collationcmds.c:553 commands/copy.c:1898 commands/copy.c:3534 -#: libpq/be-secure-common.c:80 +#: commands/collationcmds.c:554 commands/copy.c:1894 commands/copy.c:3480 +#: libpq/be-secure-common.c:81 #, c-format msgid "could not execute command \"%s\": %m" msgstr "не удалось выполнить команду \"%s\": %m" -#: commands/collationcmds.c:684 +#: commands/collationcmds.c:685 #, c-format msgid "no usable system locales were found" msgstr "пригодные системные локали не найдены" -#: commands/comment.c:61 commands/dbcommands.c:820 commands/dbcommands.c:1008 -#: commands/dbcommands.c:1121 commands/dbcommands.c:1311 -#: commands/dbcommands.c:1534 commands/dbcommands.c:1648 -#: commands/dbcommands.c:2065 utils/init/postinit.c:890 -#: utils/init/postinit.c:995 utils/init/postinit.c:1012 +#: commands/comment.c:61 commands/dbcommands.c:841 commands/dbcommands.c:1037 +#: commands/dbcommands.c:1150 commands/dbcommands.c:1340 +#: commands/dbcommands.c:1588 commands/dbcommands.c:1702 +#: commands/dbcommands.c:2142 utils/init/postinit.c:877 +#: utils/init/postinit.c:982 utils/init/postinit.c:999 #, c-format msgid "database \"%s\" does not exist" msgstr "база данных \"%s\" не существует" -#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:944 +#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:973 #, c-format msgid "" "\"%s\" is not a table, view, materialized view, composite type, or foreign " @@ -6439,12 +6591,12 @@ msgstr "" "\"%s\" - это не таблица, представление, мат. представление, составной тип " "или сторонняя таблица" -#: commands/constraint.c:63 utils/adt/ri_triggers.c:1915 +#: commands/constraint.c:63 utils/adt/ri_triggers.c:1923 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "функция \"%s\" была вызвана не менеджером триггеров" -#: commands/constraint.c:70 utils/adt/ri_triggers.c:1924 +#: commands/constraint.c:70 utils/adt/ri_triggers.c:1932 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "функция \"%s\" должна запускаться в триггере AFTER для строк" @@ -6454,63 +6606,68 @@ msgstr "функция \"%s\" должна запускаться в тригг msgid "function \"%s\" must be fired for INSERT or UPDATE" msgstr "функция \"%s\" должна запускаться для INSERT или UPDATE" -#: commands/conversioncmds.c:65 +#: commands/conversioncmds.c:66 #, c-format msgid "source encoding \"%s\" does not exist" msgstr "исходная кодировка \"%s\" не существует" -#: commands/conversioncmds.c:72 +#: commands/conversioncmds.c:73 #, c-format msgid "destination encoding \"%s\" does not exist" msgstr "целевая кодировка \"%s\" не существует" #: commands/conversioncmds.c:86 #, c-format +msgid "encoding conversion to or from \"SQL_ASCII\" is not supported" +msgstr "преобразование кодировки из/в \"SQL_ASCII\" не поддерживается" + +#: commands/conversioncmds.c:99 +#, c-format msgid "encoding conversion function %s must return type %s" msgstr "функция преобразования кодировки %s должна возвращать тип %s" -#: commands/copy.c:427 commands/copy.c:461 +#: commands/copy.c:426 commands/copy.c:460 #, c-format msgid "COPY BINARY is not supported to stdout or from stdin" msgstr "COPY BINARY не поддерживает стандартный вывод (stdout) и ввод (stdin)" -#: commands/copy.c:561 +#: commands/copy.c:560 #, c-format msgid "could not write to COPY program: %m" msgstr "не удалось записать в канал программы COPY: %m" -#: commands/copy.c:566 +#: commands/copy.c:565 #, c-format msgid "could not write to COPY file: %m" msgstr "не удалось записать в файл COPY: %m" -#: commands/copy.c:579 +#: commands/copy.c:578 #, c-format msgid "connection lost during COPY to stdout" msgstr "в процессе вывода данных COPY в stdout потеряно соединение" -#: commands/copy.c:623 +#: commands/copy.c:622 #, c-format msgid "could not read from COPY file: %m" msgstr "не удалось прочитать файл COPY: %m" -#: commands/copy.c:641 commands/copy.c:662 commands/copy.c:666 -#: tcop/postgres.c:348 tcop/postgres.c:384 tcop/postgres.c:411 +#: commands/copy.c:640 commands/copy.c:661 commands/copy.c:665 +#: tcop/postgres.c:344 tcop/postgres.c:380 tcop/postgres.c:407 #, c-format msgid "unexpected EOF on client connection with an open transaction" msgstr "неожиданный обрыв соединения с клиентом при открытой транзакции" -#: commands/copy.c:679 +#: commands/copy.c:678 #, c-format msgid "COPY from stdin failed: %s" msgstr "ошибка при вводе данных COPY из stdin: %s" -#: commands/copy.c:695 +#: commands/copy.c:694 #, c-format msgid "unexpected message type 0x%02X during COPY from stdin" msgstr "неожиданный тип сообщения 0x%02X при вводе данных COPY из stdin" -#: commands/copy.c:862 +#: commands/copy.c:861 #, c-format msgid "" "must be superuser or a member of the pg_execute_server_program role to COPY " @@ -6519,7 +6676,7 @@ msgstr "" "для использования COPY с внешними программами нужно быть суперпользователем " "или членом роли pg_execute_server_program" -#: commands/copy.c:863 commands/copy.c:872 commands/copy.c:879 +#: commands/copy.c:862 commands/copy.c:871 commands/copy.c:878 #, c-format msgid "" "Anyone can COPY to stdout or from stdin. psql's \\copy command also works " @@ -6528,7 +6685,7 @@ msgstr "" "Не имея административных прав, можно использовать COPY с stdout и stdin (а " "также команду psql \\copy)." -#: commands/copy.c:871 +#: commands/copy.c:870 #, c-format msgid "" "must be superuser or a member of the pg_read_server_files role to COPY from " @@ -6537,7 +6694,7 @@ msgstr "" "для выполнения COPY с чтением файла нужно быть суперпользователем или членом " "роли pg_read_server_files" -#: commands/copy.c:878 +#: commands/copy.c:877 #, c-format msgid "" "must be superuser or a member of the pg_write_server_files role to COPY to a " @@ -6546,248 +6703,248 @@ msgstr "" "для выполнения COPY с записью в файл нужно быть суперпользователем или " "членом роли pg_write_server_files" -#: commands/copy.c:962 +#: commands/copy.c:963 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM не поддерживается с защитой на уровне строк." -#: commands/copy.c:963 +#: commands/copy.c:964 #, c-format msgid "Use INSERT statements instead." msgstr "Используйте операторы INSERT." -#: commands/copy.c:1151 +#: commands/copy.c:1146 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "формат \"%s\" для COPY не распознан" -#: commands/copy.c:1222 commands/copy.c:1238 commands/copy.c:1253 -#: commands/copy.c:1275 +#: commands/copy.c:1217 commands/copy.c:1233 commands/copy.c:1248 +#: commands/copy.c:1270 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "аргументом параметра \"%s\" должен быть список имён столбцов" -#: commands/copy.c:1290 +#: commands/copy.c:1285 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "аргументом параметра \"%s\" должно быть название допустимой кодировки" -#: commands/copy.c:1297 commands/dbcommands.c:243 commands/dbcommands.c:1482 +#: commands/copy.c:1292 commands/dbcommands.c:253 commands/dbcommands.c:1536 #, c-format msgid "option \"%s\" not recognized" msgstr "параметр \"%s\" не распознан" -#: commands/copy.c:1309 +#: commands/copy.c:1304 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "в режиме BINARY нельзя указывать DELIMITER" -#: commands/copy.c:1314 +#: commands/copy.c:1309 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "в режиме BINARY нельзя указывать NULL" -#: commands/copy.c:1336 +#: commands/copy.c:1331 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "разделитель для COPY должен быть однобайтным символом" -#: commands/copy.c:1343 +#: commands/copy.c:1338 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "" "разделителем для COPY не может быть символ новой строки или возврата каретки" -#: commands/copy.c:1349 +#: commands/copy.c:1344 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "" "представление NULL для COPY не может включать символ новой строки или " "возврата каретки" -#: commands/copy.c:1366 +#: commands/copy.c:1361 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "\"%s\" не может быть разделителем для COPY" -#: commands/copy.c:1372 +#: commands/copy.c:1367 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "COPY HEADER можно использовать только в режиме CSV" -#: commands/copy.c:1378 +#: commands/copy.c:1373 #, c-format msgid "COPY quote available only in CSV mode" msgstr "определить кавычки для COPY можно только в режиме CSV" -#: commands/copy.c:1383 +#: commands/copy.c:1378 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "символ кавычек для COPY должен быть однобайтным" -#: commands/copy.c:1388 +#: commands/copy.c:1383 #, c-format msgid "COPY delimiter and quote must be different" msgstr "символ кавычек для COPY должен отличаться от разделителя" -#: commands/copy.c:1394 +#: commands/copy.c:1389 #, c-format msgid "COPY escape available only in CSV mode" msgstr "определить спецсимвол для COPY можно только в режиме CSV" -#: commands/copy.c:1399 +#: commands/copy.c:1394 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "спецсимвол для COPY должен быть однобайтным" -#: commands/copy.c:1405 +#: commands/copy.c:1400 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "параметр force quote для COPY можно использовать только в режиме CSV" -#: commands/copy.c:1409 +#: commands/copy.c:1404 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "параметр force quote для COPY можно использовать только с COPY TO" -#: commands/copy.c:1415 +#: commands/copy.c:1410 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "" "параметр force not null для COPY можно использовать только в режиме CSV" -#: commands/copy.c:1419 +#: commands/copy.c:1414 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "параметр force not null для COPY можно использовать только с COPY FROM" -#: commands/copy.c:1425 +#: commands/copy.c:1420 #, c-format msgid "COPY force null available only in CSV mode" msgstr "параметр force null для COPY можно использовать только в режиме CSV" -#: commands/copy.c:1430 +#: commands/copy.c:1425 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "параметр force null для COPY можно использовать только с COPY FROM" -#: commands/copy.c:1436 +#: commands/copy.c:1431 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "разделитель для COPY не должен присутствовать в представлении NULL" -#: commands/copy.c:1443 +#: commands/copy.c:1438 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "символ кавычек в CSV не должен присутствовать в представлении NULL" -#: commands/copy.c:1529 +#: commands/copy.c:1524 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for COPY" msgstr "правила DO INSTEAD NOTHING не поддерживаются с COPY" -#: commands/copy.c:1543 +#: commands/copy.c:1538 #, c-format msgid "conditional DO INSTEAD rules are not supported for COPY" msgstr "условные правила DO INSTEAD не поддерживаются с COPY" -#: commands/copy.c:1547 +#: commands/copy.c:1542 #, c-format msgid "DO ALSO rules are not supported for the COPY" msgstr "правила DO ALSO не поддерживаются с COPY" -#: commands/copy.c:1552 +#: commands/copy.c:1547 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for COPY" msgstr "составные правила DO INSTEAD не поддерживаются с COPY" -#: commands/copy.c:1562 +#: commands/copy.c:1557 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) не поддерживается" -#: commands/copy.c:1579 +#: commands/copy.c:1574 #, c-format msgid "COPY query must have a RETURNING clause" msgstr "в запросе COPY должно быть предложение RETURNING" -#: commands/copy.c:1607 +#: commands/copy.c:1603 #, c-format msgid "relation referenced by COPY statement has changed" msgstr "отношение, задействованное в операторе COPY, изменилось" -#: commands/copy.c:1666 +#: commands/copy.c:1662 #, c-format msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" msgstr "столбец FORCE_QUOTE \"%s\" не фигурирует в COPY" -#: commands/copy.c:1689 +#: commands/copy.c:1685 #, c-format msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" msgstr "столбец FORCE_NOT_NULL \"%s\" не фигурирует в COPY" -#: commands/copy.c:1712 +#: commands/copy.c:1708 #, c-format msgid "FORCE_NULL column \"%s\" not referenced by COPY" msgstr "столбец FORCE_NULL \"%s\" не фигурирует в COPY" -#: commands/copy.c:1778 libpq/be-secure-common.c:102 +#: commands/copy.c:1774 libpq/be-secure-common.c:105 #, c-format msgid "could not close pipe to external command: %m" msgstr "не удалось закрыть канал сообщений с внешней командой: %m" -#: commands/copy.c:1793 +#: commands/copy.c:1789 #, c-format msgid "program \"%s\" failed" msgstr "сбой программы \"%s\"" -#: commands/copy.c:1844 +#: commands/copy.c:1840 #, c-format msgid "cannot copy from view \"%s\"" msgstr "копировать из представления \"%s\" нельзя" -#: commands/copy.c:1846 commands/copy.c:1852 commands/copy.c:1858 -#: commands/copy.c:1869 +#: commands/copy.c:1842 commands/copy.c:1848 commands/copy.c:1854 +#: commands/copy.c:1865 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "Попробуйте вариацию COPY (SELECT ...) TO." -#: commands/copy.c:1850 +#: commands/copy.c:1846 #, c-format msgid "cannot copy from materialized view \"%s\"" msgstr "копировать из материализованного представления \"%s\" нельзя" -#: commands/copy.c:1856 +#: commands/copy.c:1852 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "копировать из сторонней таблицы \"%s\" нельзя" -#: commands/copy.c:1862 +#: commands/copy.c:1858 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "копировать из последовательности \"%s\" нельзя" -#: commands/copy.c:1867 +#: commands/copy.c:1863 #, c-format msgid "cannot copy from partitioned table \"%s\"" msgstr "копировать из секционированной таблицы \"%s\" нельзя" -#: commands/copy.c:1873 +#: commands/copy.c:1869 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "копировать из отношения \"%s\", не являющегося таблицей, нельзя" -#: commands/copy.c:1913 +#: commands/copy.c:1909 #, c-format msgid "relative path not allowed for COPY to file" msgstr "при выполнении COPY в файл нельзя указывать относительный путь" -#: commands/copy.c:1934 +#: commands/copy.c:1928 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "не удалось открыть файл \"%s\" для записи: %m" -#: commands/copy.c:1937 +#: commands/copy.c:1931 #, c-format msgid "" "COPY TO instructs the PostgreSQL server process to write a file. You may " @@ -6797,74 +6954,74 @@ msgstr "" "Возможно, на самом деле вам нужно клиентское средство, например, \\copy в " "psql." -#: commands/copy.c:1950 commands/copy.c:3565 +#: commands/copy.c:1944 commands/copy.c:3511 #, c-format msgid "\"%s\" is a directory" msgstr "\"%s\" - это каталог" -#: commands/copy.c:2252 +#: commands/copy.c:2246 #, c-format msgid "COPY %s, line %s, column %s" msgstr "COPY %s, строка %s, столбец %s" -#: commands/copy.c:2256 commands/copy.c:2303 +#: commands/copy.c:2250 commands/copy.c:2297 #, c-format msgid "COPY %s, line %s" msgstr "COPY %s, строка %s" -#: commands/copy.c:2267 +#: commands/copy.c:2261 #, c-format msgid "COPY %s, line %s, column %s: \"%s\"" msgstr "COPY %s, строка %s, столбец %s: \"%s\"" -#: commands/copy.c:2275 +#: commands/copy.c:2269 #, c-format msgid "COPY %s, line %s, column %s: null input" msgstr "COPY %s, строка %s, столбец %s: значение NULL" -#: commands/copy.c:2297 +#: commands/copy.c:2291 #, c-format msgid "COPY %s, line %s: \"%s\"" msgstr "COPY %s, строка %s: \"%s\"" -#: commands/copy.c:2698 +#: commands/copy.c:2692 #, c-format msgid "cannot copy to view \"%s\"" msgstr "копировать в представление \"%s\" нельзя" -#: commands/copy.c:2700 +#: commands/copy.c:2694 #, c-format msgid "To enable copying to a view, provide an INSTEAD OF INSERT trigger." msgstr "" "Чтобы представление допускало копирование данных в него, установите триггер " "INSTEAD OF INSERT." -#: commands/copy.c:2704 +#: commands/copy.c:2698 #, c-format msgid "cannot copy to materialized view \"%s\"" msgstr "копировать в материализованное представление \"%s\" нельзя" -#: commands/copy.c:2709 +#: commands/copy.c:2703 #, c-format msgid "cannot copy to sequence \"%s\"" msgstr "копировать в последовательность \"%s\" нельзя" -#: commands/copy.c:2714 +#: commands/copy.c:2708 #, c-format msgid "cannot copy to non-table relation \"%s\"" msgstr "копировать в отношение \"%s\", не являющееся таблицей, нельзя" -#: commands/copy.c:2802 +#: commands/copy.c:2748 #, c-format msgid "cannot perform COPY FREEZE on a partitioned table" msgstr "выполнить COPY FREEZE в секционированной таблице нельзя" -#: commands/copy.c:2817 +#: commands/copy.c:2763 #, c-format msgid "cannot perform COPY FREEZE because of prior transaction activity" msgstr "выполнить COPY FREEZE нельзя из-за предыдущей активности в транзакции" -#: commands/copy.c:2823 +#: commands/copy.c:2769 #, c-format msgid "" "cannot perform COPY FREEZE because the table was not created or truncated in " @@ -6873,7 +7030,7 @@ msgstr "" "выполнить COPY FREEZE нельзя, так как таблица не была создана или усечена в " "текущей подтранзакции" -#: commands/copy.c:3552 +#: commands/copy.c:3498 #, c-format msgid "" "COPY FROM instructs the PostgreSQL server process to read a file. You may " @@ -6883,212 +7040,217 @@ msgstr "" "файла. Возможно, на самом деле вам нужно клиентское средство, например, " "\\copy в psql." -#: commands/copy.c:3580 +#: commands/copy.c:3526 #, c-format msgid "COPY file signature not recognized" msgstr "подпись COPY-файла не распознана" -#: commands/copy.c:3585 +#: commands/copy.c:3531 #, c-format msgid "invalid COPY file header (missing flags)" msgstr "неверный заголовок файла COPY (отсутствуют флаги)" -#: commands/copy.c:3589 +#: commands/copy.c:3535 #, c-format msgid "invalid COPY file header (WITH OIDS)" msgstr "неверный заголовок файла COPY (WITH OIDS)" -#: commands/copy.c:3594 +#: commands/copy.c:3540 #, c-format msgid "unrecognized critical flags in COPY file header" msgstr "не распознаны важные флаги в заголовке файла COPY" -#: commands/copy.c:3600 +#: commands/copy.c:3546 #, c-format msgid "invalid COPY file header (missing length)" msgstr "неверный заголовок файла COPY (отсутствует длина)" -#: commands/copy.c:3607 +#: commands/copy.c:3553 #, c-format msgid "invalid COPY file header (wrong length)" msgstr "неверный заголовок файла COPY (неправильная длина)" -#: commands/copy.c:3726 commands/copy.c:4391 commands/copy.c:4621 +#: commands/copy.c:3671 commands/copy.c:4344 commands/copy.c:4574 #, c-format msgid "extra data after last expected column" msgstr "лишние данные после содержимого последнего столбца" -#: commands/copy.c:3740 +#: commands/copy.c:3685 #, c-format msgid "missing data for column \"%s\"" msgstr "нет данных для столбца \"%s\"" -#: commands/copy.c:3823 +#: commands/copy.c:3768 #, c-format msgid "received copy data after EOF marker" msgstr "после маркера конца файла продолжаются данные COPY" -#: commands/copy.c:3830 +#: commands/copy.c:3775 #, c-format msgid "row field count is %d, expected %d" msgstr "количество полей в строке: %d, ожидалось: %d" -#: commands/copy.c:4150 commands/copy.c:4167 +#: commands/copy.c:4095 commands/copy.c:4112 #, c-format msgid "literal carriage return found in data" msgstr "в данных обнаружен явный возврат каретки" -#: commands/copy.c:4151 commands/copy.c:4168 +#: commands/copy.c:4096 commands/copy.c:4113 #, c-format msgid "unquoted carriage return found in data" msgstr "в данных обнаружен возврат каретки не в кавычках" -#: commands/copy.c:4153 commands/copy.c:4170 +#: commands/copy.c:4098 commands/copy.c:4115 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "Представьте возврат каретки как \"\\r\"." -#: commands/copy.c:4154 commands/copy.c:4171 +#: commands/copy.c:4099 commands/copy.c:4116 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "Заключите возврат каретки в кавычки CSV." -#: commands/copy.c:4183 +#: commands/copy.c:4128 #, c-format msgid "literal newline found in data" msgstr "в данных обнаружен явный символ новой строки" -#: commands/copy.c:4184 +#: commands/copy.c:4129 #, c-format msgid "unquoted newline found in data" msgstr "в данных обнаружен явный символ новой строки не в кавычках" -#: commands/copy.c:4186 +#: commands/copy.c:4131 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "Представьте символ новой строки как \"\\n\"." -#: commands/copy.c:4187 +#: commands/copy.c:4132 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "Заключите символ новой строки в кавычки CSV." -#: commands/copy.c:4233 commands/copy.c:4269 +#: commands/copy.c:4178 commands/copy.c:4214 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "маркер \"конец копии\" не соответствует предыдущему стилю новой строки" -#: commands/copy.c:4242 commands/copy.c:4258 +#: commands/copy.c:4187 commands/copy.c:4203 #, c-format msgid "end-of-copy marker corrupt" msgstr "маркер \"конец копии\" испорчен" -#: commands/copy.c:4705 +#: commands/copy.c:4658 #, c-format msgid "unterminated CSV quoted field" msgstr "незавершённое поле в кавычках CSV" -#: commands/copy.c:4782 commands/copy.c:4801 +#: commands/copy.c:4735 commands/copy.c:4754 #, c-format msgid "unexpected EOF in COPY data" msgstr "неожиданный конец данных COPY" -#: commands/copy.c:4791 +#: commands/copy.c:4744 #, c-format msgid "invalid field size" msgstr "неверный размер поля" -#: commands/copy.c:4814 +#: commands/copy.c:4767 #, c-format msgid "incorrect binary data format" msgstr "неверный двоичный формат данных" -#: commands/copy.c:5122 +#: commands/copy.c:5075 #, c-format msgid "column \"%s\" is a generated column" msgstr "столбец \"%s\" — генерируемый" -#: commands/copy.c:5124 +#: commands/copy.c:5077 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "Генерируемые столбцы нельзя использовать в COPY." -#: commands/copy.c:5139 commands/indexcmds.c:1600 commands/statscmds.c:214 -#: commands/tablecmds.c:2111 commands/tablecmds.c:2652 -#: commands/tablecmds.c:3031 parser/parse_relation.c:3353 -#: parser/parse_relation.c:3373 utils/adt/tsvector_op.c:2559 +#: commands/copy.c:5092 commands/indexcmds.c:1701 commands/statscmds.c:224 +#: commands/tablecmds.c:2176 commands/tablecmds.c:2795 +#: commands/tablecmds.c:3182 parser/parse_relation.c:3507 +#: parser/parse_relation.c:3527 utils/adt/tsvector_op.c:2668 #, c-format msgid "column \"%s\" does not exist" msgstr "столбец \"%s\" не существует" -#: commands/copy.c:5146 commands/tablecmds.c:2144 commands/trigger.c:937 -#: parser/parse_target.c:1047 parser/parse_target.c:1058 +#: commands/copy.c:5099 commands/tablecmds.c:2202 commands/trigger.c:885 +#: parser/parse_target.c:1052 parser/parse_target.c:1063 #, c-format msgid "column \"%s\" specified more than once" msgstr "столбец \"%s\" указан неоднократно" -#: commands/createas.c:216 commands/createas.c:499 +#: commands/createas.c:215 commands/createas.c:497 #, c-format msgid "too many column names were specified" msgstr "указано слишком много имён столбцов" -#: commands/createas.c:541 +#: commands/createas.c:539 #, c-format msgid "policies not yet implemented for this command" msgstr "политики для этой команды ещё не реализованы" -#: commands/dbcommands.c:236 +#: commands/dbcommands.c:246 #, c-format msgid "LOCATION is not supported anymore" msgstr "LOCATION больше не поддерживается" -#: commands/dbcommands.c:237 +#: commands/dbcommands.c:247 #, c-format msgid "Consider using tablespaces instead." msgstr "Рассмотрите возможность использования табличных пространств." -#: commands/dbcommands.c:263 utils/adt/ascii.c:145 +#: commands/dbcommands.c:261 +#, c-format +msgid "LOCALE cannot be specified together with LC_COLLATE or LC_CTYPE." +msgstr "LOCALE нельзя указать вместе с LC_COLLATE или LC_CTYPE." + +#: commands/dbcommands.c:279 utils/adt/ascii.c:145 #, c-format msgid "%d is not a valid encoding code" msgstr "%d не является верным кодом кодировки" -#: commands/dbcommands.c:274 utils/adt/ascii.c:127 +#: commands/dbcommands.c:290 utils/adt/ascii.c:127 #, c-format msgid "%s is not a valid encoding name" msgstr "%s не является верным названием кодировки" -#: commands/dbcommands.c:293 commands/dbcommands.c:1515 commands/user.c:275 -#: commands/user.c:680 +#: commands/dbcommands.c:314 commands/dbcommands.c:1569 commands/user.c:275 +#: commands/user.c:691 #, c-format msgid "invalid connection limit: %d" msgstr "неверный предел подключений: %d" -#: commands/dbcommands.c:312 +#: commands/dbcommands.c:333 #, c-format msgid "permission denied to create database" msgstr "нет прав на создание базы данных" -#: commands/dbcommands.c:335 +#: commands/dbcommands.c:356 #, c-format msgid "template database \"%s\" does not exist" msgstr "шаблон базы данных \"%s\" не существует" -#: commands/dbcommands.c:347 +#: commands/dbcommands.c:368 #, c-format msgid "permission denied to copy database \"%s\"" msgstr "нет прав на копирование базы данных \"%s\"" -#: commands/dbcommands.c:363 +#: commands/dbcommands.c:384 #, c-format msgid "invalid server encoding %d" msgstr "неверная кодировка для сервера: %d" -#: commands/dbcommands.c:369 commands/dbcommands.c:374 +#: commands/dbcommands.c:390 commands/dbcommands.c:395 #, c-format msgid "invalid locale name: \"%s\"" msgstr "неверное имя локали: \"%s\"" -#: commands/dbcommands.c:394 +#: commands/dbcommands.c:415 #, c-format msgid "" "new encoding (%s) is incompatible with the encoding of the template database " @@ -7096,7 +7258,7 @@ msgid "" msgstr "" "новая кодировка (%s) несовместима с кодировкой шаблона базы данных (%s)" -#: commands/dbcommands.c:397 +#: commands/dbcommands.c:418 #, c-format msgid "" "Use the same encoding as in the template database, or use template0 as " @@ -7105,7 +7267,7 @@ msgstr "" "Используйте кодировку шаблона базы данных или выберите в качестве шаблона " "template0." -#: commands/dbcommands.c:402 +#: commands/dbcommands.c:423 #, c-format msgid "" "new collation (%s) is incompatible with the collation of the template " @@ -7114,7 +7276,7 @@ msgstr "" "новое правило сортировки (%s) несовместимо с правилом в шаблоне базы данных " "(%s)" -#: commands/dbcommands.c:404 +#: commands/dbcommands.c:425 #, c-format msgid "" "Use the same collation as in the template database, or use template0 as " @@ -7123,7 +7285,7 @@ msgstr "" "Используйте то же правило сортировки, что и в шаблоне базы данных, или " "выберите в качестве шаблона template0." -#: commands/dbcommands.c:409 +#: commands/dbcommands.c:430 #, c-format msgid "" "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database " @@ -7132,7 +7294,7 @@ msgstr "" "новый параметр LC_CTYPE (%s) несовместим с LC_CTYPE в шаблоне базы данных " "(%s)" -#: commands/dbcommands.c:411 +#: commands/dbcommands.c:432 #, c-format msgid "" "Use the same LC_CTYPE as in the template database, or use template0 as " @@ -7141,18 +7303,18 @@ msgstr "" "Используйте тот же LC_CTYPE, что и в шаблоне базы данных, или выберите в " "качестве шаблона template0." -#: commands/dbcommands.c:433 commands/dbcommands.c:1167 +#: commands/dbcommands.c:454 commands/dbcommands.c:1196 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "" "pg_global нельзя использовать в качестве табличного пространства по умолчанию" -#: commands/dbcommands.c:459 +#: commands/dbcommands.c:480 #, c-format msgid "cannot assign new default tablespace \"%s\"" msgstr "не удалось назначить новое табличное пространство по умолчанию \"%s\"" -#: commands/dbcommands.c:461 +#: commands/dbcommands.c:482 #, c-format msgid "" "There is a conflict because database \"%s\" already has some tables in this " @@ -7161,52 +7323,52 @@ msgstr "" "База данных \"%s\" содержит таблицы, которые уже находятся в этом табличном " "пространстве." -#: commands/dbcommands.c:491 commands/dbcommands.c:1037 +#: commands/dbcommands.c:512 commands/dbcommands.c:1066 #, c-format msgid "database \"%s\" already exists" msgstr "база данных \"%s\" уже существует" -#: commands/dbcommands.c:505 +#: commands/dbcommands.c:526 #, c-format msgid "source database \"%s\" is being accessed by other users" msgstr "исходная база \"%s\" занята другими пользователями" -#: commands/dbcommands.c:748 commands/dbcommands.c:763 +#: commands/dbcommands.c:769 commands/dbcommands.c:784 #, c-format msgid "encoding \"%s\" does not match locale \"%s\"" msgstr "кодировка \"%s\" не соответствует локали \"%s\"" -#: commands/dbcommands.c:751 +#: commands/dbcommands.c:772 #, c-format msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." msgstr "Для выбранного параметра LC_CTYPE требуется кодировка \"%s\"." -#: commands/dbcommands.c:766 +#: commands/dbcommands.c:787 #, c-format msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "Для выбранного параметра LC_COLLATE требуется кодировка \"%s\"." -#: commands/dbcommands.c:827 +#: commands/dbcommands.c:848 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "база данных \"%s\" не существует, пропускается" -#: commands/dbcommands.c:851 +#: commands/dbcommands.c:872 #, c-format msgid "cannot drop a template database" msgstr "удалить шаблон базы данных нельзя" -#: commands/dbcommands.c:857 +#: commands/dbcommands.c:878 #, c-format msgid "cannot drop the currently open database" msgstr "удалить базу данных, открытую в данный момент, нельзя" -#: commands/dbcommands.c:870 +#: commands/dbcommands.c:891 #, c-format msgid "database \"%s\" is used by an active logical replication slot" msgstr "база \"%s\" используется активным слотом логической репликации" -#: commands/dbcommands.c:872 +#: commands/dbcommands.c:893 #, c-format msgid "There is %d active slot." msgid_plural "There are %d active slots." @@ -7214,18 +7376,12 @@ msgstr[0] "Обнаружен %d активный слот." msgstr[1] "Обнаружены %d активных слота." msgstr[2] "Обнаружено %d активных слотов." -#: commands/dbcommands.c:886 commands/dbcommands.c:1059 -#: commands/dbcommands.c:1189 -#, c-format -msgid "database \"%s\" is being accessed by other users" -msgstr "база данных \"%s\" занята другими пользователями" - -#: commands/dbcommands.c:899 +#: commands/dbcommands.c:907 #, c-format msgid "database \"%s\" is being used by logical replication subscription" msgstr "база \"%s\" используется в подписке с логической репликацией" -#: commands/dbcommands.c:901 +#: commands/dbcommands.c:909 #, c-format msgid "There is %d subscription." msgid_plural "There are %d subscriptions." @@ -7233,30 +7389,36 @@ msgstr[0] "Обнаружена %d подписка." msgstr[1] "Обнаружены %d подписки." msgstr[2] "Обнаружено %d подписок." -#: commands/dbcommands.c:1019 +#: commands/dbcommands.c:930 commands/dbcommands.c:1088 +#: commands/dbcommands.c:1218 +#, c-format +msgid "database \"%s\" is being accessed by other users" +msgstr "база данных \"%s\" занята другими пользователями" + +#: commands/dbcommands.c:1048 #, c-format msgid "permission denied to rename database" msgstr "нет прав на переименование базы данных" -#: commands/dbcommands.c:1048 +#: commands/dbcommands.c:1077 #, c-format msgid "current database cannot be renamed" msgstr "нельзя переименовать текущую базу данных" -#: commands/dbcommands.c:1145 +#: commands/dbcommands.c:1174 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "" "изменить табличное пространство открытой в данный момент базы данных нельзя" -#: commands/dbcommands.c:1248 +#: commands/dbcommands.c:1277 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "" "некоторые отношения базы данных \"%s\" уже находятся в табличном " "пространстве \"%s\"" -#: commands/dbcommands.c:1250 +#: commands/dbcommands.c:1279 #, c-format msgid "" "You must move them back to the database's default tablespace before using " @@ -7265,29 +7427,34 @@ msgstr "" "Прежде чем выполнять эту команду, вы должны вернуть их назад в табличное " "пространство по умолчанию для этой базы данных." -#: commands/dbcommands.c:1375 commands/dbcommands.c:1921 -#: commands/dbcommands.c:2126 commands/dbcommands.c:2181 -#: commands/tablespace.c:620 +#: commands/dbcommands.c:1404 commands/dbcommands.c:1980 +#: commands/dbcommands.c:2203 commands/dbcommands.c:2261 +#: commands/tablespace.c:631 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "в старом каталоге базы данных \"%s\" могли остаться ненужные файлы" -#: commands/dbcommands.c:1496 +#: commands/dbcommands.c:1460 +#, c-format +msgid "unrecognized DROP DATABASE option \"%s\"" +msgstr "нераспознанный параметр DROP DATABASE: \"%s\"" + +#: commands/dbcommands.c:1550 #, c-format msgid "option \"%s\" cannot be specified with other options" msgstr "параметр \"%s\" нельзя задать с другими параметрами" -#: commands/dbcommands.c:1552 +#: commands/dbcommands.c:1606 #, c-format msgid "cannot disallow connections for current database" msgstr "запретить подключения к текущей базе данных нельзя" -#: commands/dbcommands.c:1688 +#: commands/dbcommands.c:1742 #, c-format msgid "permission denied to change owner of database" msgstr "нет прав на изменение владельца базы данных" -#: commands/dbcommands.c:2009 +#: commands/dbcommands.c:2086 #, c-format msgid "" "There are %d other session(s) and %d prepared transaction(s) using the " @@ -7296,7 +7463,7 @@ msgstr "" "С этой базой данных связаны другие сеансы (%d) и подготовленные транзакции " "(%d)." -#: commands/dbcommands.c:2012 +#: commands/dbcommands.c:2089 #, c-format msgid "There is %d other session using the database." msgid_plural "There are %d other sessions using the database." @@ -7304,7 +7471,7 @@ msgstr[0] "Эта база данных используется ещё в %d с msgstr[1] "Эта база данных используется ещё в %d сеансах." msgstr[2] "Эта база данных используется ещё в %d сеансах." -#: commands/dbcommands.c:2017 +#: commands/dbcommands.c:2094 storage/ipc/procarray.c:3023 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." @@ -7349,156 +7516,156 @@ msgstr "аргументом %s должно быть имя типа" msgid "invalid argument for %s: \"%s\"" msgstr "неверный аргумент для %s: \"%s\"" -#: commands/dropcmds.c:99 commands/functioncmds.c:1272 -#: utils/adt/ruleutils.c:2609 +#: commands/dropcmds.c:100 commands/functioncmds.c:1274 +#: utils/adt/ruleutils.c:2633 #, c-format msgid "\"%s\" is an aggregate function" msgstr "функция \"%s\" является агрегатной" -#: commands/dropcmds.c:101 +#: commands/dropcmds.c:102 #, c-format msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Используйте DROP AGGREGATE для удаления агрегатных функций." -#: commands/dropcmds.c:157 commands/sequence.c:447 commands/tablecmds.c:3115 -#: commands/tablecmds.c:3273 commands/tablecmds.c:3318 -#: commands/tablecmds.c:14311 tcop/utility.c:1174 +#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3266 +#: commands/tablecmds.c:3424 commands/tablecmds.c:3469 +#: commands/tablecmds.c:15060 tcop/utility.c:1307 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "отношение \"%s\" не существует, пропускается" -#: commands/dropcmds.c:187 commands/dropcmds.c:286 commands/tablecmds.c:1168 +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1199 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "схема \"%s\" не существует, пропускается" -#: commands/dropcmds.c:227 commands/dropcmds.c:266 commands/tablecmds.c:255 +#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:259 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "тип \"%s\" не существует, пропускается" -#: commands/dropcmds.c:256 +#: commands/dropcmds.c:257 #, c-format msgid "access method \"%s\" does not exist, skipping" msgstr "метод доступа \"%s\" не существует, пропускается" -#: commands/dropcmds.c:274 +#: commands/dropcmds.c:275 #, c-format msgid "collation \"%s\" does not exist, skipping" msgstr "правило сортировки \"%s\" не существует, пропускается" -#: commands/dropcmds.c:281 +#: commands/dropcmds.c:282 #, c-format msgid "conversion \"%s\" does not exist, skipping" msgstr "преобразование \"%s\" не существует, пропускается" -#: commands/dropcmds.c:292 +#: commands/dropcmds.c:293 commands/statscmds.c:486 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "объект статистики \"%s\" не существует, пропускается" -#: commands/dropcmds.c:299 +#: commands/dropcmds.c:300 #, c-format msgid "text search parser \"%s\" does not exist, skipping" msgstr "анализатор текстового поиска \"%s\" не существует, пропускается" -#: commands/dropcmds.c:306 +#: commands/dropcmds.c:307 #, c-format msgid "text search dictionary \"%s\" does not exist, skipping" msgstr "словарь текстового поиска \"%s\" не существует, пропускается" -#: commands/dropcmds.c:313 +#: commands/dropcmds.c:314 #, c-format msgid "text search template \"%s\" does not exist, skipping" msgstr "шаблон текстового поиска \"%s\" не существует, пропускается" -#: commands/dropcmds.c:320 +#: commands/dropcmds.c:321 #, c-format msgid "text search configuration \"%s\" does not exist, skipping" msgstr "конфигурация текстового поиска \"%s\" не существует, пропускается" -#: commands/dropcmds.c:325 +#: commands/dropcmds.c:326 #, c-format msgid "extension \"%s\" does not exist, skipping" msgstr "расширение \"%s\" не существует, пропускается" -#: commands/dropcmds.c:335 +#: commands/dropcmds.c:336 #, c-format msgid "function %s(%s) does not exist, skipping" msgstr "функция %s(%s) не существует, пропускается" -#: commands/dropcmds.c:348 +#: commands/dropcmds.c:349 #, c-format msgid "procedure %s(%s) does not exist, skipping" msgstr "процедура %s(%s) не существует, пропускается" -#: commands/dropcmds.c:361 +#: commands/dropcmds.c:362 #, c-format msgid "routine %s(%s) does not exist, skipping" msgstr "подпрограмма %s(%s) не существует, пропускается" -#: commands/dropcmds.c:374 +#: commands/dropcmds.c:375 #, c-format msgid "aggregate %s(%s) does not exist, skipping" msgstr "агрегатная функция %s(%s) не существует, пропускается" -#: commands/dropcmds.c:387 +#: commands/dropcmds.c:388 #, c-format msgid "operator %s does not exist, skipping" msgstr "оператор %s не существует, пропускается" -#: commands/dropcmds.c:393 +#: commands/dropcmds.c:394 #, c-format msgid "language \"%s\" does not exist, skipping" msgstr "язык \"%s\" не существует, пропускается" -#: commands/dropcmds.c:402 +#: commands/dropcmds.c:403 #, c-format msgid "cast from type %s to type %s does not exist, skipping" msgstr "приведение %s к типу %s не существует, пропускается" -#: commands/dropcmds.c:411 +#: commands/dropcmds.c:412 #, c-format msgid "transform for type %s language \"%s\" does not exist, skipping" msgstr "преобразование для типа %s, языка \"%s\" не существует, пропускается" -#: commands/dropcmds.c:419 +#: commands/dropcmds.c:420 #, c-format msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" msgstr "триггер \"%s\" для отношения \"%s\" не существует, пропускается" -#: commands/dropcmds.c:428 +#: commands/dropcmds.c:429 #, c-format msgid "policy \"%s\" for relation \"%s\" does not exist, skipping" msgstr "политика \"%s\" для отношения \"%s\" не существует, пропускается" -#: commands/dropcmds.c:435 +#: commands/dropcmds.c:436 #, c-format msgid "event trigger \"%s\" does not exist, skipping" msgstr "событийный триггер \"%s\" не существует, пропускается" -#: commands/dropcmds.c:441 +#: commands/dropcmds.c:442 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist, skipping" msgstr "правило \"%s\" для отношения \"%s\" не существует, пропускается" -#: commands/dropcmds.c:448 +#: commands/dropcmds.c:449 #, c-format msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "обёртка сторонних данных \"%s\" не существует, пропускается" -#: commands/dropcmds.c:452 commands/foreigncmds.c:1400 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1399 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "сервер \"%s\" не существует, пропускается" -#: commands/dropcmds.c:461 +#: commands/dropcmds.c:462 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\", skipping" msgstr "" "класс операторов \"%s\" не существует для метода доступа \"%s\", пропускается" -#: commands/dropcmds.c:473 +#: commands/dropcmds.c:474 #, c-format msgid "" "operator family \"%s\" does not exist for access method \"%s\", skipping" @@ -7506,220 +7673,234 @@ msgstr "" "семейство операторов \"%s\" не существует для метода доступа \"%s\", " "пропускается" -#: commands/dropcmds.c:480 +#: commands/dropcmds.c:481 #, c-format msgid "publication \"%s\" does not exist, skipping" msgstr "публикация \"%s\" не существует, пропускается" -#: commands/event_trigger.c:187 +#: commands/event_trigger.c:125 #, c-format msgid "permission denied to create event trigger \"%s\"" msgstr "нет прав на создание событийного триггера \"%s\"" -#: commands/event_trigger.c:189 +#: commands/event_trigger.c:127 #, c-format msgid "Must be superuser to create an event trigger." msgstr "Для создания событийного триггера нужно быть суперпользователем." -#: commands/event_trigger.c:198 +#: commands/event_trigger.c:136 #, c-format msgid "unrecognized event name \"%s\"" msgstr "нераспознанное имя события \"%s\"" -#: commands/event_trigger.c:215 +#: commands/event_trigger.c:153 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "нераспознанная переменная фильтра \"%s\"" -#: commands/event_trigger.c:270 +#: commands/event_trigger.c:207 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "значение фильтра \"%s\" неприемлемо для переменной фильтра \"%s\"" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:276 commands/event_trigger.c:346 +#: commands/event_trigger.c:213 commands/event_trigger.c:235 #, c-format msgid "event triggers are not supported for %s" msgstr "для %s событийные триггеры не поддерживаются" -#: commands/event_trigger.c:369 +#: commands/event_trigger.c:248 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "переменная фильтра \"%s\" указана больше одного раза" -#: commands/event_trigger.c:519 commands/event_trigger.c:563 -#: commands/event_trigger.c:657 +#: commands/event_trigger.c:399 commands/event_trigger.c:443 +#: commands/event_trigger.c:537 #, c-format msgid "event trigger \"%s\" does not exist" msgstr "событийный триггер \"%s\" не существует" -#: commands/event_trigger.c:625 +#: commands/event_trigger.c:505 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "нет прав на изменение владельца событийного триггера \"%s\"" -#: commands/event_trigger.c:627 +#: commands/event_trigger.c:507 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "Владельцем событийного триггера должен быть суперпользователь." -#: commands/event_trigger.c:1465 +#: commands/event_trigger.c:1325 #, c-format msgid "%s can only be called in a sql_drop event trigger function" msgstr "%s можно вызывать только в событийной триггерной функции sql_drop" -#: commands/event_trigger.c:1585 commands/event_trigger.c:1606 +#: commands/event_trigger.c:1445 commands/event_trigger.c:1466 #, c-format msgid "%s can only be called in a table_rewrite event trigger function" msgstr "%s можно вызывать только в событийной триггерной функции table_rewrite" -#: commands/event_trigger.c:2017 +#: commands/event_trigger.c:1883 #, c-format msgid "%s can only be called in an event trigger function" msgstr "%s можно вызывать только в событийной триггерной функции" -#: commands/explain.c:194 +#: commands/explain.c:213 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "нераспознанное значение параметра EXPLAIN \"%s\": \"%s\"" -#: commands/explain.c:201 +#: commands/explain.c:220 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "нераспознанный параметр EXPLAIN: \"%s\"" -#: commands/explain.c:209 +#: commands/explain.c:228 #, c-format -msgid "EXPLAIN option BUFFERS requires ANALYZE" -msgstr "параметр BUFFERS оператора EXPLAIN требует указания ANALYZE" +msgid "EXPLAIN option WAL requires ANALYZE" +msgstr "параметр WAL оператора EXPLAIN требует указания ANALYZE" -#: commands/explain.c:218 +#: commands/explain.c:237 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "параметр TIMING оператора EXPLAIN требует указания ANALYZE" -#: commands/extension.c:171 commands/extension.c:2918 +#: commands/extension.c:173 commands/extension.c:3013 #, c-format msgid "extension \"%s\" does not exist" msgstr "расширение \"%s\" не существует" -#: commands/extension.c:270 commands/extension.c:279 commands/extension.c:291 -#: commands/extension.c:301 +#: commands/extension.c:272 commands/extension.c:281 commands/extension.c:293 +#: commands/extension.c:303 #, c-format msgid "invalid extension name: \"%s\"" msgstr "неверное имя расширения: \"%s\"" -#: commands/extension.c:271 +#: commands/extension.c:273 #, c-format msgid "Extension names must not be empty." msgstr "Имя расширения не может быть пустым." -#: commands/extension.c:280 +#: commands/extension.c:282 #, c-format msgid "Extension names must not contain \"--\"." msgstr "Имя расширения не может содержать \"--\"." -#: commands/extension.c:292 +#: commands/extension.c:294 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "Имя расширения не может начинаться или заканчиваться символом \"-\"." -#: commands/extension.c:302 +#: commands/extension.c:304 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "Имя расширения не может содержать разделители пути." -#: commands/extension.c:317 commands/extension.c:326 commands/extension.c:335 -#: commands/extension.c:345 +#: commands/extension.c:319 commands/extension.c:328 commands/extension.c:337 +#: commands/extension.c:347 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "неверный идентификатор версии расширения: \"%s\"" -#: commands/extension.c:318 +#: commands/extension.c:320 #, c-format msgid "Version names must not be empty." msgstr "Идентификатор версии не может быть пустым." -#: commands/extension.c:327 +#: commands/extension.c:329 #, c-format msgid "Version names must not contain \"--\"." msgstr "Идентификатор версии не может содержать \"--\"." -#: commands/extension.c:336 +#: commands/extension.c:338 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "" "Идентификатор версии не может начинаться или заканчиваться символом \"-\"." -#: commands/extension.c:346 +#: commands/extension.c:348 #, c-format msgid "Version names must not contain directory separator characters." msgstr "Идентификатор версии не может содержать разделители пути." -#: commands/extension.c:496 +#: commands/extension.c:498 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "не удалось открыть управляющий файл расширения \"%s\": %m" -#: commands/extension.c:518 commands/extension.c:528 +#: commands/extension.c:520 commands/extension.c:530 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "" "параметр \"%s\" нельзя задавать в дополнительном управляющем файле расширения" -#: commands/extension.c:550 commands/extension.c:558 utils/misc/guc.c:6524 +#: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 +#: utils/misc/guc.c:6749 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "параметр \"%s\" требует логическое значение" -#: commands/extension.c:567 +#: commands/extension.c:577 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "неверное имя кодировки %s" -#: commands/extension.c:581 +#: commands/extension.c:591 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "параметр \"%s\" должен содержать список имён расширений" -#: commands/extension.c:588 +#: commands/extension.c:598 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "нераспознанный параметр \"%s\" в файле \"%s\"" -#: commands/extension.c:597 +#: commands/extension.c:607 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "" "параметр \"schema\" не может быть указан вместе с \"relocatable\" = true" -#: commands/extension.c:762 +#: commands/extension.c:785 #, c-format msgid "" "transaction control statements are not allowed within an extension script" msgstr "в скрипте расширения не должно быть операторов управления транзакциями" -#: commands/extension.c:808 +#: commands/extension.c:861 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "нет прав на создание расширения \"%s\"" -#: commands/extension.c:810 +#: commands/extension.c:864 +#, c-format +msgid "" +"Must have CREATE privilege on current database to create this extension." +msgstr "Для создания этого расширения нужно иметь право CREATE в текущей базе." + +#: commands/extension.c:865 #, c-format msgid "Must be superuser to create this extension." msgstr "Для создания этого расширения нужно быть суперпользователем." -#: commands/extension.c:814 +#: commands/extension.c:869 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "нет прав на изменение расширения \"%s\"" -#: commands/extension.c:816 +#: commands/extension.c:872 +#, c-format +msgid "" +"Must have CREATE privilege on current database to update this extension." +msgstr "" +"Для обновления этого расширения нужно иметь право CREATE в текущей базе." + +#: commands/extension.c:873 #, c-format msgid "Must be superuser to update this extension." msgstr "Для изменения этого расширения нужно быть суперпользователем." -#: commands/extension.c:1100 +#: commands/extension.c:1200 #, c-format msgid "" "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" @@ -7727,17 +7908,12 @@ msgstr "" "для расширения \"%s\" не определён путь обновления с версии \"%s\" до версии " "\"%s\"" -#: commands/extension.c:1307 commands/extension.c:2979 +#: commands/extension.c:1408 commands/extension.c:3074 #, c-format msgid "version to install must be specified" msgstr "нужно указать версию для установки" -#: commands/extension.c:1329 -#, c-format -msgid "FROM version must be different from installation target version \"%s\"" -msgstr "версия FROM должна отличаться от устанавливаемой версии \"%s\"" - -#: commands/extension.c:1394 +#: commands/extension.c:1445 #, c-format msgid "" "extension \"%s\" has no installation script nor update path for version \"%s" @@ -7746,71 +7922,71 @@ msgstr "" "для расширения \"%s\" не определён путь установки или обновления для версии " "\"%s\"" -#: commands/extension.c:1429 +#: commands/extension.c:1479 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "расширение \"%s\" должно устанавливаться в схему \"%s\"" -#: commands/extension.c:1589 +#: commands/extension.c:1639 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "выявлена циклическая зависимость между расширениями \"%s\" и \"%s\"" -#: commands/extension.c:1594 +#: commands/extension.c:1644 #, c-format msgid "installing required extension \"%s\"" msgstr "установка требуемого расширения \"%s\"" -#: commands/extension.c:1618 +#: commands/extension.c:1667 #, c-format msgid "required extension \"%s\" is not installed" msgstr "требуемое расширение \"%s\" не установлено" -#: commands/extension.c:1621 +#: commands/extension.c:1670 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "" "Выполните CREATE EXTENSION ... CASCADE, чтобы установить также требуемые " "расширения." -#: commands/extension.c:1658 +#: commands/extension.c:1705 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "расширение \"%s\" уже существует, пропускается" -#: commands/extension.c:1665 +#: commands/extension.c:1712 #, c-format msgid "extension \"%s\" already exists" msgstr "расширение \"%s\" уже существует" -#: commands/extension.c:1676 +#: commands/extension.c:1723 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "вложенные операторы CREATE EXTENSION не поддерживаются" -#: commands/extension.c:1860 +#: commands/extension.c:1896 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "удалить расширение \"%s\" нельзя, так как это модифицируемый объект" -#: commands/extension.c:2362 +#: commands/extension.c:2457 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "" "%s можно вызывать только из SQL-скрипта, запускаемого командой CREATE " "EXTENSION" -#: commands/extension.c:2374 +#: commands/extension.c:2469 #, c-format msgid "OID %u does not refer to a table" msgstr "OID %u не относится к таблице" -#: commands/extension.c:2379 +#: commands/extension.c:2474 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "таблица \"%s\" не относится к созданному расширению" -#: commands/extension.c:2733 +#: commands/extension.c:2828 #, c-format msgid "" "cannot move extension \"%s\" into schema \"%s\" because the extension " @@ -7819,27 +7995,27 @@ msgstr "" "переместить расширение \"%s\" в схему \"%s\" нельзя, так как оно содержит " "схему" -#: commands/extension.c:2774 commands/extension.c:2837 +#: commands/extension.c:2869 commands/extension.c:2932 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "расширение \"%s\" не поддерживает SET SCHEMA" -#: commands/extension.c:2839 +#: commands/extension.c:2934 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "объект %s не принадлежит схеме расширения \"%s\"" -#: commands/extension.c:2898 +#: commands/extension.c:2993 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "вложенные операторы ALTER EXTENSION не поддерживаются" -#: commands/extension.c:2990 +#: commands/extension.c:3085 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "версия \"%s\" расширения \"%s\" уже установлена" -#: commands/extension.c:3241 +#: commands/extension.c:3336 #, c-format msgid "" "cannot add schema \"%s\" to extension \"%s\" because the schema contains the " @@ -7848,68 +8024,68 @@ msgstr "" "добавить схему \"%s\" к расширению \"%s\" нельзя, так как схема содержит " "расширение" -#: commands/extension.c:3269 +#: commands/extension.c:3364 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s не относится к расширению \"%s\"" -#: commands/extension.c:3335 +#: commands/extension.c:3430 #, c-format msgid "file \"%s\" is too large" msgstr "файл \"%s\" слишком большой" -#: commands/foreigncmds.c:151 commands/foreigncmds.c:160 +#: commands/foreigncmds.c:148 commands/foreigncmds.c:157 #, c-format msgid "option \"%s\" not found" msgstr "нераспознанный параметр \"%s\"" -#: commands/foreigncmds.c:170 +#: commands/foreigncmds.c:167 #, c-format msgid "option \"%s\" provided more than once" msgstr "параметр \"%s\" указан неоднократно" -#: commands/foreigncmds.c:224 commands/foreigncmds.c:232 +#: commands/foreigncmds.c:221 commands/foreigncmds.c:229 #, c-format msgid "permission denied to change owner of foreign-data wrapper \"%s\"" msgstr "нет прав на изменение владельца обёртки сторонних данных \"%s\"" -#: commands/foreigncmds.c:226 +#: commands/foreigncmds.c:223 #, c-format msgid "Must be superuser to change owner of a foreign-data wrapper." msgstr "" "Для смены владельца обёртки сторонних данных нужно быть суперпользователем." -#: commands/foreigncmds.c:234 +#: commands/foreigncmds.c:231 #, c-format msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "Владельцем обёртки сторонних данных должен быть суперпользователь." -#: commands/foreigncmds.c:294 commands/foreigncmds.c:715 foreign/foreign.c:701 +#: commands/foreigncmds.c:291 commands/foreigncmds.c:711 foreign/foreign.c:701 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "обёртка сторонних данных \"%s\" не существует" -#: commands/foreigncmds.c:588 +#: commands/foreigncmds.c:584 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "нет прав на создание обёртки сторонних данных \"%s\"" -#: commands/foreigncmds.c:590 +#: commands/foreigncmds.c:586 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "Для создания обёртки сторонних данных нужно быть суперпользователем." -#: commands/foreigncmds.c:705 +#: commands/foreigncmds.c:701 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "нет прав на изменение обёртки сторонних данных \"%s\"" -#: commands/foreigncmds.c:707 +#: commands/foreigncmds.c:703 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "Для изменения обёртки сторонних данных нужно быть суперпользователем." -#: commands/foreigncmds.c:738 +#: commands/foreigncmds.c:734 #, c-format msgid "" "changing the foreign-data wrapper handler can change behavior of existing " @@ -7918,7 +8094,7 @@ msgstr "" "при изменении обработчика в обёртке сторонних данных может измениться " "поведение существующих сторонних таблиц" -#: commands/foreigncmds.c:753 +#: commands/foreigncmds.c:749 #, c-format msgid "" "changing the foreign-data wrapper validator can cause the options for " @@ -7927,253 +8103,253 @@ msgstr "" "при изменении функции проверки в обёртке сторонних данных параметры " "зависимых объектов могут стать неверными" -#: commands/foreigncmds.c:899 +#: commands/foreigncmds.c:895 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "сервер \"%s\" уже существует, пропускается" -#: commands/foreigncmds.c:1187 +#: commands/foreigncmds.c:1183 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "" "сопоставление пользователя \"%s\" для сервера \"%s\" уже существует, " "пропускается" -#: commands/foreigncmds.c:1197 +#: commands/foreigncmds.c:1193 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "сопоставление пользователя \"%s\" для сервера \"%s\" уже существует" -#: commands/foreigncmds.c:1297 commands/foreigncmds.c:1414 +#: commands/foreigncmds.c:1293 commands/foreigncmds.c:1413 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "сопоставление пользователя \"%s\" для сервера \"%s\" не существует" -#: commands/foreigncmds.c:1419 +#: commands/foreigncmds.c:1418 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "" "сопоставление пользователя \"%s\" для сервера \"%s\" не существует, " "пропускается" -#: commands/foreigncmds.c:1570 foreign/foreign.c:389 +#: commands/foreigncmds.c:1569 foreign/foreign.c:389 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "обёртка сторонних данных \"%s\" не имеет обработчика" -#: commands/foreigncmds.c:1576 +#: commands/foreigncmds.c:1575 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "обёртка сторонних данных \"%s\" не поддерживает IMPORT FOREIGN SCHEMA" -#: commands/foreigncmds.c:1679 +#: commands/foreigncmds.c:1678 #, c-format msgid "importing foreign table \"%s\"" msgstr "импорт сторонней таблицы \"%s\"" -#: commands/functioncmds.c:103 +#: commands/functioncmds.c:104 #, c-format msgid "SQL function cannot return shell type %s" msgstr "SQL-функция не может возвращать тип-пустышку %s" -#: commands/functioncmds.c:108 +#: commands/functioncmds.c:109 #, c-format msgid "return type %s is only a shell" msgstr "возвращаемый тип %s - лишь пустышка" -#: commands/functioncmds.c:138 parser/parse_type.c:355 +#: commands/functioncmds.c:139 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "для типа-пустышки \"%s\" нельзя указать модификатор типа" -#: commands/functioncmds.c:144 +#: commands/functioncmds.c:145 #, c-format msgid "type \"%s\" is not yet defined" msgstr "тип \"%s\" ещё не определён" -#: commands/functioncmds.c:145 +#: commands/functioncmds.c:146 #, c-format msgid "Creating a shell type definition." msgstr "Создание определения типа-пустышки." -#: commands/functioncmds.c:237 +#: commands/functioncmds.c:238 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "SQL-функция не может принимать значение типа-пустышки %s" -#: commands/functioncmds.c:243 +#: commands/functioncmds.c:244 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "агрегатная функция не может принимать значение типа-пустышки %s" -#: commands/functioncmds.c:248 +#: commands/functioncmds.c:249 #, c-format msgid "argument type %s is only a shell" msgstr "тип аргумента %s - лишь пустышка" -#: commands/functioncmds.c:258 +#: commands/functioncmds.c:259 #, c-format msgid "type %s does not exist" msgstr "тип %s не существует" -#: commands/functioncmds.c:272 +#: commands/functioncmds.c:273 #, c-format msgid "aggregates cannot accept set arguments" msgstr "агрегатные функции не принимают в аргументах множества" -#: commands/functioncmds.c:276 +#: commands/functioncmds.c:277 #, c-format msgid "procedures cannot accept set arguments" msgstr "процедуры не принимают в аргументах множества" -#: commands/functioncmds.c:280 +#: commands/functioncmds.c:281 #, c-format msgid "functions cannot accept set arguments" msgstr "функции не принимают аргументы-множества" -#: commands/functioncmds.c:288 +#: commands/functioncmds.c:289 #, c-format msgid "procedures cannot have OUT arguments" msgstr "у процедур не может быть аргументов OUT" -#: commands/functioncmds.c:289 +#: commands/functioncmds.c:290 #, c-format msgid "INOUT arguments are permitted." msgstr "Аргументы INOUT допускаются." -#: commands/functioncmds.c:299 +#: commands/functioncmds.c:300 #, c-format msgid "VARIADIC parameter must be the last input parameter" msgstr "параметр VARIADIC должен быть последним в списке входных параметров" -#: commands/functioncmds.c:329 +#: commands/functioncmds.c:331 #, c-format msgid "VARIADIC parameter must be an array" msgstr "параметр VARIADIC должен быть массивом" -#: commands/functioncmds.c:369 +#: commands/functioncmds.c:371 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "имя параметра \"%s\" указано неоднократно" -#: commands/functioncmds.c:384 +#: commands/functioncmds.c:386 #, c-format msgid "only input parameters can have default values" msgstr "значения по умолчанию могут быть только у входных параметров" -#: commands/functioncmds.c:399 +#: commands/functioncmds.c:401 #, c-format msgid "cannot use table references in parameter default value" msgstr "в значениях параметров по умолчанию нельзя ссылаться на таблицы" -#: commands/functioncmds.c:423 +#: commands/functioncmds.c:425 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "" "входные параметры, следующие за параметром со значением по умолчанию, также " "должны иметь значения по умолчанию" -#: commands/functioncmds.c:575 commands/functioncmds.c:766 +#: commands/functioncmds.c:577 commands/functioncmds.c:768 #, c-format msgid "invalid attribute in procedure definition" msgstr "некорректный атрибут в определении процедуры" -#: commands/functioncmds.c:671 +#: commands/functioncmds.c:673 #, c-format msgid "support function %s must return type %s" msgstr "вспомогательная функция %s должна возвращать тип %s" -#: commands/functioncmds.c:682 +#: commands/functioncmds.c:684 #, c-format msgid "must be superuser to specify a support function" msgstr "для указания вспомогательной функции нужно быть суперпользователем" -#: commands/functioncmds.c:798 +#: commands/functioncmds.c:800 #, c-format msgid "no function body specified" msgstr "не указано тело функции" -#: commands/functioncmds.c:808 +#: commands/functioncmds.c:810 #, c-format msgid "no language specified" msgstr "язык не указан" -#: commands/functioncmds.c:833 commands/functioncmds.c:1317 +#: commands/functioncmds.c:835 commands/functioncmds.c:1319 #, c-format msgid "COST must be positive" msgstr "значение COST должно быть положительным" -#: commands/functioncmds.c:841 commands/functioncmds.c:1325 +#: commands/functioncmds.c:843 commands/functioncmds.c:1327 #, c-format msgid "ROWS must be positive" msgstr "значение ROWS должно быть положительным" -#: commands/functioncmds.c:895 +#: commands/functioncmds.c:897 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "для языка \"%s\" нужно только одно выражение AS" -#: commands/functioncmds.c:993 commands/functioncmds.c:2227 -#: commands/proclang.c:568 +#: commands/functioncmds.c:995 commands/functioncmds.c:2048 +#: commands/proclang.c:259 #, c-format msgid "language \"%s\" does not exist" msgstr "язык \"%s\" не существует" -#: commands/functioncmds.c:995 commands/functioncmds.c:2229 +#: commands/functioncmds.c:997 commands/functioncmds.c:2050 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "Выполните CREATE EXTENSION, чтобы загрузить язык в базу данных." -#: commands/functioncmds.c:1030 commands/functioncmds.c:1309 +#: commands/functioncmds.c:1032 commands/functioncmds.c:1311 #, c-format msgid "only superuser can define a leakproof function" msgstr "" "только суперпользователь может определить функцию с атрибутом LEAKPROOF" -#: commands/functioncmds.c:1079 +#: commands/functioncmds.c:1081 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "" "результат функции должен иметь тип %s (в соответствии с параметрами OUT)" -#: commands/functioncmds.c:1092 +#: commands/functioncmds.c:1094 #, c-format msgid "function result type must be specified" msgstr "необходимо указать тип результата функции" -#: commands/functioncmds.c:1144 commands/functioncmds.c:1329 +#: commands/functioncmds.c:1146 commands/functioncmds.c:1331 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "указание ROWS неприменимо, когда функция возвращает не множество" -#: commands/functioncmds.c:1521 +#: commands/functioncmds.c:1431 #, c-format msgid "source data type %s is a pseudo-type" msgstr "исходный тип данных %s является псевдотипом" -#: commands/functioncmds.c:1527 +#: commands/functioncmds.c:1437 #, c-format msgid "target data type %s is a pseudo-type" msgstr "целевой тип данных %s является псевдотипом" -#: commands/functioncmds.c:1551 +#: commands/functioncmds.c:1461 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "" "приведение будет проигнорировано, так как исходные данные имеют тип домен" -#: commands/functioncmds.c:1556 +#: commands/functioncmds.c:1466 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "" "приведение будет проигнорировано, так как целевые данные имеют тип домен" -#: commands/functioncmds.c:1581 +#: commands/functioncmds.c:1491 #, c-format msgid "cast function must take one to three arguments" msgstr "функция приведения должна принимать от одного до трёх аргументов" -#: commands/functioncmds.c:1585 +#: commands/functioncmds.c:1495 #, c-format msgid "" "argument of cast function must match or be binary-coercible from source data " @@ -8182,17 +8358,17 @@ msgstr "" "аргумент функции приведения должен совпадать или быть двоично-совместимым с " "исходным типом данных" -#: commands/functioncmds.c:1589 +#: commands/functioncmds.c:1499 #, c-format msgid "second argument of cast function must be type %s" msgstr "второй аргумент функции приведения должен иметь тип %s" -#: commands/functioncmds.c:1594 +#: commands/functioncmds.c:1504 #, c-format msgid "third argument of cast function must be type %s" msgstr "третий аргумент функции приведения должен иметь тип %s" -#: commands/functioncmds.c:1599 +#: commands/functioncmds.c:1509 #, c-format msgid "" "return data type of cast function must match or be binary-coercible to " @@ -8201,137 +8377,127 @@ msgstr "" "тип возвращаемых данных функции приведения должен совпадать или быть двоично-" "совместимым с целевым типом данных" -#: commands/functioncmds.c:1610 +#: commands/functioncmds.c:1520 #, c-format msgid "cast function must not be volatile" msgstr "функция приведения не может быть изменчивой (volatile)" -#: commands/functioncmds.c:1615 +#: commands/functioncmds.c:1525 #, c-format msgid "cast function must be a normal function" msgstr "функция приведения должна быть обычной функцией" -#: commands/functioncmds.c:1619 +#: commands/functioncmds.c:1529 #, c-format msgid "cast function must not return a set" msgstr "функция приведения не может возвращать множество" -#: commands/functioncmds.c:1645 +#: commands/functioncmds.c:1555 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "для создания приведения WITHOUT FUNCTION нужно быть суперпользователем" -#: commands/functioncmds.c:1660 +#: commands/functioncmds.c:1570 #, c-format msgid "source and target data types are not physically compatible" msgstr "исходный и целевой типы данных не совместимы физически" -#: commands/functioncmds.c:1675 +#: commands/functioncmds.c:1585 #, c-format msgid "composite data types are not binary-compatible" msgstr "составные типы данных не совместимы на двоичном уровне" -#: commands/functioncmds.c:1681 +#: commands/functioncmds.c:1591 #, c-format msgid "enum data types are not binary-compatible" msgstr "типы-перечисления не совместимы на двоичном уровне" -#: commands/functioncmds.c:1687 +#: commands/functioncmds.c:1597 #, c-format msgid "array data types are not binary-compatible" msgstr "типы-массивы не совместимы на двоичном уровне" -#: commands/functioncmds.c:1704 +#: commands/functioncmds.c:1614 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "типы-домены не могут считаться двоично-совместимыми" -#: commands/functioncmds.c:1714 +#: commands/functioncmds.c:1624 #, c-format msgid "source data type and target data type are the same" msgstr "исходный тип данных совпадает с целевым" -#: commands/functioncmds.c:1747 -#, c-format -msgid "cast from type %s to type %s already exists" -msgstr "приведение типа %s к типу %s уже существует" - -#: commands/functioncmds.c:1822 -#, c-format -msgid "cast from type %s to type %s does not exist" -msgstr "приведение типа %s к типу %s не существует" - -#: commands/functioncmds.c:1861 +#: commands/functioncmds.c:1682 #, c-format msgid "transform function must not be volatile" msgstr "функция преобразования не может быть изменчивой" -#: commands/functioncmds.c:1865 +#: commands/functioncmds.c:1686 #, c-format msgid "transform function must be a normal function" msgstr "функция преобразования должна быть обычной функцией" -#: commands/functioncmds.c:1869 +#: commands/functioncmds.c:1690 #, c-format msgid "transform function must not return a set" msgstr "функция преобразования не может возвращать множество" -#: commands/functioncmds.c:1873 +#: commands/functioncmds.c:1694 #, c-format msgid "transform function must take one argument" msgstr "функция преобразования должна принимать один аргумент" -#: commands/functioncmds.c:1877 +#: commands/functioncmds.c:1698 #, c-format msgid "first argument of transform function must be type %s" msgstr "первый аргумент функции преобразования должен иметь тип %s" -#: commands/functioncmds.c:1915 +#: commands/functioncmds.c:1736 #, c-format msgid "data type %s is a pseudo-type" msgstr "тип данных %s является псевдотипом" -#: commands/functioncmds.c:1921 +#: commands/functioncmds.c:1742 #, c-format msgid "data type %s is a domain" msgstr "тип данных \"%s\" является доменом" -#: commands/functioncmds.c:1961 +#: commands/functioncmds.c:1782 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "результат функции FROM SQL должен иметь тип %s" -#: commands/functioncmds.c:1987 +#: commands/functioncmds.c:1808 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "результат функции TO SQL должен иметь тип данных преобразования" -#: commands/functioncmds.c:2016 +#: commands/functioncmds.c:1837 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "преобразование для типа %s, языка \"%s\" уже существует" -#: commands/functioncmds.c:2108 +#: commands/functioncmds.c:1929 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "преобразование для типа %s, языка \"%s\" не существует" -#: commands/functioncmds.c:2159 +#: commands/functioncmds.c:1980 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "функция %s уже существует в схеме \"%s\"" -#: commands/functioncmds.c:2214 +#: commands/functioncmds.c:2035 #, c-format msgid "no inline code specified" msgstr "нет внедрённого кода" -#: commands/functioncmds.c:2260 +#: commands/functioncmds.c:2081 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "язык \"%s\" не поддерживает выполнение внедрённого кода" -#: commands/functioncmds.c:2372 +#: commands/functioncmds.c:2193 #, c-format msgid "cannot pass more than %d argument to a procedure" msgid_plural "cannot pass more than %d arguments to a procedure" @@ -8339,96 +8505,106 @@ msgstr[0] "процедуре нельзя передать больше %d ар msgstr[1] "процедуре нельзя передать больше %d аргументов" msgstr[2] "процедуре нельзя передать больше %d аргументов" -#: commands/indexcmds.c:541 +#: commands/indexcmds.c:590 #, c-format msgid "must specify at least one column" msgstr "нужно указать минимум один столбец" -#: commands/indexcmds.c:545 +#: commands/indexcmds.c:594 #, c-format msgid "cannot use more than %d columns in an index" msgstr "число столбцов в индексе не может превышать %d" -#: commands/indexcmds.c:584 +#: commands/indexcmds.c:633 #, c-format msgid "cannot create index on foreign table \"%s\"" msgstr "создать индекс в сторонней таблице \"%s\" нельзя" -#: commands/indexcmds.c:615 +#: commands/indexcmds.c:664 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "" "создать индекс в секционированной таблице \"%s\" параллельным способом нельзя" -#: commands/indexcmds.c:620 +#: commands/indexcmds.c:669 #, c-format msgid "cannot create exclusion constraints on partitioned table \"%s\"" msgstr "" "создать ограничение-исключение в секционированной таблице \"%s\" нельзя" -#: commands/indexcmds.c:630 +#: commands/indexcmds.c:679 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "создавать индексы во временных таблицах других сеансов нельзя" -#: commands/indexcmds.c:668 commands/tablecmds.c:679 commands/tablespace.c:1174 +#: commands/indexcmds.c:717 commands/tablecmds.c:704 commands/tablespace.c:1185 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "" "для секционированных отношений нельзя назначить табличное пространство по " "умолчанию" -#: commands/indexcmds.c:700 commands/tablecmds.c:714 commands/tablecmds.c:12437 -#: commands/tablecmds.c:12549 +#: commands/indexcmds.c:749 commands/tablecmds.c:739 commands/tablecmds.c:13180 +#: commands/tablecmds.c:13294 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "" "в табличное пространство pg_global можно поместить только разделяемые таблицы" -#: commands/indexcmds.c:733 +#: commands/indexcmds.c:782 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "устаревший метод доступа \"rtree\" подменяется методом \"gist\"" -#: commands/indexcmds.c:754 +#: commands/indexcmds.c:803 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "метод доступа \"%s\" не поддерживает уникальные индексы" -#: commands/indexcmds.c:759 +#: commands/indexcmds.c:808 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "метод доступа \"%s\" не поддерживает включаемые столбцы" -#: commands/indexcmds.c:764 +#: commands/indexcmds.c:813 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "метод доступа \"%s\" не поддерживает индексы по многим столбцам" -#: commands/indexcmds.c:769 +#: commands/indexcmds.c:818 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "метод доступа \"%s\" не поддерживает ограничения-исключения" -#: commands/indexcmds.c:871 +#: commands/indexcmds.c:941 +#, c-format +msgid "cannot match partition key to an index using access method \"%s\"" +msgstr "" +"сопоставить ключ секционирования с индексом, использующим метод доступа \"%s" +"\", нельзя" + +#: commands/indexcmds.c:951 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "" "неподдерживаемое ограничение \"%s\" с определением ключа секционирования" -#: commands/indexcmds.c:873 +#: commands/indexcmds.c:953 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "" "Ограничения %s не могут использоваться, когда ключи секционирования включают " "выражения." -#: commands/indexcmds.c:891 +#: commands/indexcmds.c:992 #, c-format -msgid "insufficient columns in %s constraint definition" -msgstr "недостаточно столбцов в определении ограничения %s" +msgid "" +"unique constraint on partitioned table must include all partitioning columns" +msgstr "" +"ограничение уникальности в секционированной таблице должно включать все " +"секционирующие столбцы" -#: commands/indexcmds.c:893 +#: commands/indexcmds.c:993 #, c-format msgid "" "%s constraint on table \"%s\" lacks column \"%s\" which is part of the " @@ -8437,97 +8613,97 @@ msgstr "" "В ограничении %s таблицы \"%s\" не хватает столбца \"%s\", входящего в ключ " "секционирования." -#: commands/indexcmds.c:912 commands/indexcmds.c:931 +#: commands/indexcmds.c:1012 commands/indexcmds.c:1031 #, c-format msgid "index creation on system columns is not supported" msgstr "создание индекса для системных столбцов не поддерживается" -#: commands/indexcmds.c:956 +#: commands/indexcmds.c:1056 #, c-format msgid "%s %s will create implicit index \"%s\" for table \"%s\"" msgstr "%s %s создаст неявный индекс \"%s\" для таблицы \"%s\"" -#: commands/indexcmds.c:1098 tcop/utility.c:1359 +#: commands/indexcmds.c:1199 tcop/utility.c:1493 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "создать уникальный индекс в секционированной таблице \"%s\" нельзя" -#: commands/indexcmds.c:1100 tcop/utility.c:1361 +#: commands/indexcmds.c:1201 tcop/utility.c:1495 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "Таблица \"%s\" содержит секции, являющиеся сторонними таблицами." -#: commands/indexcmds.c:1529 +#: commands/indexcmds.c:1630 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "функции в предикате индекса должны быть помечены как IMMUTABLE" -#: commands/indexcmds.c:1595 parser/parse_utilcmd.c:2307 -#: parser/parse_utilcmd.c:2441 +#: commands/indexcmds.c:1696 parser/parse_utilcmd.c:2464 +#: parser/parse_utilcmd.c:2599 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "указанный в ключе столбец \"%s\" не существует" -#: commands/indexcmds.c:1619 parser/parse_utilcmd.c:1633 +#: commands/indexcmds.c:1720 parser/parse_utilcmd.c:1800 #, c-format msgid "expressions are not supported in included columns" msgstr "выражения во включаемых столбцах не поддерживаются" -#: commands/indexcmds.c:1660 +#: commands/indexcmds.c:1761 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "функции в индексном выражении должны быть помечены как IMMUTABLE" -#: commands/indexcmds.c:1675 +#: commands/indexcmds.c:1776 #, c-format msgid "including column does not support a collation" msgstr "включаемые столбцы не поддерживают правила сортировки" -#: commands/indexcmds.c:1679 +#: commands/indexcmds.c:1780 #, c-format msgid "including column does not support an operator class" msgstr "включаемые столбцы не поддерживают классы операторов" -#: commands/indexcmds.c:1683 +#: commands/indexcmds.c:1784 #, c-format msgid "including column does not support ASC/DESC options" msgstr "включаемые столбцы не поддерживают сортировку ASC/DESC" -#: commands/indexcmds.c:1687 +#: commands/indexcmds.c:1788 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "включаемые столбцы не поддерживают указания NULLS FIRST/LAST" -#: commands/indexcmds.c:1714 +#: commands/indexcmds.c:1815 #, c-format msgid "could not determine which collation to use for index expression" msgstr "не удалось определить правило сортировки для индексного выражения" -#: commands/indexcmds.c:1722 commands/tablecmds.c:15332 commands/typecmds.c:837 -#: parser/parse_expr.c:2854 parser/parse_type.c:567 parser/parse_utilcmd.c:3514 -#: utils/adt/misc.c:490 +#: commands/indexcmds.c:1823 commands/tablecmds.c:16064 commands/typecmds.c:771 +#: parser/parse_expr.c:2850 parser/parse_type.c:566 parser/parse_utilcmd.c:3674 +#: parser/parse_utilcmd.c:4235 utils/adt/misc.c:503 #, c-format msgid "collations are not supported by type %s" msgstr "тип %s не поддерживает сортировку (COLLATION)" -#: commands/indexcmds.c:1760 +#: commands/indexcmds.c:1861 #, c-format msgid "operator %s is not commutative" msgstr "оператор %s не коммутативен" -#: commands/indexcmds.c:1762 +#: commands/indexcmds.c:1863 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "" "В ограничениях-исключениях могут использоваться только коммутативные " "операторы." -#: commands/indexcmds.c:1788 +#: commands/indexcmds.c:1889 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "оператор \"%s\" не входит в семейство операторов \"%s\"" -#: commands/indexcmds.c:1791 +#: commands/indexcmds.c:1892 #, c-format msgid "" "The exclusion operator must be related to the index operator class for the " @@ -8536,25 +8712,25 @@ msgstr "" "Оператор исключения для ограничения должен относиться к классу операторов " "индекса." -#: commands/indexcmds.c:1826 +#: commands/indexcmds.c:1927 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "метод доступа \"%s\" не поддерживает сортировку ASC/DESC" -#: commands/indexcmds.c:1831 +#: commands/indexcmds.c:1932 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "метод доступа \"%s\" не поддерживает параметр NULLS FIRST/LAST" -#: commands/indexcmds.c:1891 commands/tablecmds.c:15357 -#: commands/tablecmds.c:15363 commands/typecmds.c:1981 +#: commands/indexcmds.c:1978 commands/tablecmds.c:16089 +#: commands/tablecmds.c:16095 commands/typecmds.c:1945 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "" "для типа данных %s не определён класс операторов по умолчанию для метода " "доступа \"%s\"" -#: commands/indexcmds.c:1893 +#: commands/indexcmds.c:1980 #, c-format msgid "" "You must specify an operator class for the index or define a default " @@ -8563,66 +8739,66 @@ msgstr "" "Вы должны указать класс операторов для индекса или определить класс " "операторов по умолчанию для этого типа данных." -#: commands/indexcmds.c:1922 commands/indexcmds.c:1930 +#: commands/indexcmds.c:2009 commands/indexcmds.c:2017 #: commands/opclasscmds.c:208 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "класс операторов \"%s\" для метода доступа \"%s\" не существует" -#: commands/indexcmds.c:1944 commands/typecmds.c:1969 +#: commands/indexcmds.c:2031 commands/typecmds.c:1933 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "класс операторов \"%s\" не принимает тип данных %s" -#: commands/indexcmds.c:2034 +#: commands/indexcmds.c:2121 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "" "для типа данных %s определено несколько классов операторов по умолчанию" -#: commands/indexcmds.c:2483 +#: commands/indexcmds.c:2570 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "" "в таблице \"%s\" нет индексов, которые можно переиндексировать неблокирующим " "способом" -#: commands/indexcmds.c:2494 +#: commands/indexcmds.c:2581 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "в таблице \"%s\" нет индексов для переиндексации" -#: commands/indexcmds.c:2533 commands/indexcmds.c:2807 -#: commands/indexcmds.c:2900 +#: commands/indexcmds.c:2620 commands/indexcmds.c:2901 +#: commands/indexcmds.c:2994 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "Переиндексировать системные каталоги неблокирующим способом нельзя" -#: commands/indexcmds.c:2556 +#: commands/indexcmds.c:2643 #, c-format msgid "can only reindex the currently open database" msgstr "переиндексировать можно только текущую базу данных" -#: commands/indexcmds.c:2647 +#: commands/indexcmds.c:2734 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "" "все системные каталоги пропускаются, так как их нельзя переиндексировать " "неблокирующим способом" -#: commands/indexcmds.c:2699 commands/indexcmds.c:3370 +#: commands/indexcmds.c:2786 commands/indexcmds.c:3506 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "таблица \"%s.%s\" переиндексирована" -#: commands/indexcmds.c:2822 commands/indexcmds.c:2868 +#: commands/indexcmds.c:2916 commands/indexcmds.c:2962 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "" "перестроить нерабочий индекс \"%s.%s\" неблокирующим способом нельзя, он " "пропускается" -#: commands/indexcmds.c:2828 +#: commands/indexcmds.c:2922 #, c-format msgid "" "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" @@ -8630,33 +8806,27 @@ msgstr "" "перестроить индекс ограничения-исключения \"%s.%s\" неблокирующим способом " "нельзя, он пропускается" -#: commands/indexcmds.c:2928 +#: commands/indexcmds.c:3033 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "переиндексировать отношение такого типа неблокирующим способом нельзя" -#: commands/indexcmds.c:3352 commands/indexcmds.c:3363 +#: commands/indexcmds.c:3488 commands/indexcmds.c:3499 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "индекс \"%s.%s\" был перестроен" -#: commands/indexcmds.c:3395 +#: commands/indexcmds.c:3531 #, c-format msgid "REINDEX is not yet implemented for partitioned indexes" msgstr "REINDEX для секционированных индексов ещё не реализован" -#: commands/lockcmds.c:102 commands/tablecmds.c:5232 commands/trigger.c:313 -#: rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:928 +#: commands/lockcmds.c:92 commands/tablecmds.c:5631 commands/trigger.c:295 +#: rewrite/rewriteDefine.c:272 rewrite/rewriteDefine.c:939 #, c-format msgid "\"%s\" is not a table or view" msgstr "\"%s\" - это не таблица и не представление" -#: commands/lockcmds.c:235 rewrite/rewriteHandler.c:1975 -#: rewrite/rewriteHandler.c:3778 -#, c-format -msgid "infinite recursion detected in rules for relation \"%s\"" -msgstr "обнаружена бесконечная рекурсия в правилах для отношения \"%s\"" - #: commands/matview.c:182 #, c-format msgid "CONCURRENTLY cannot be used when the materialized view is not populated" @@ -8683,7 +8853,7 @@ msgstr "" "Создайте уникальный индекс без предложения WHERE для одного или нескольких " "столбцов материализованного представления." -#: commands/matview.c:645 +#: commands/matview.c:641 #, c-format msgid "" "new data for materialized view \"%s\" contains duplicate rows without any " @@ -8692,7 +8862,7 @@ msgstr "" "новые данные для материализованного представления \"%s\" содержат " "дублирующиеся строки (без учёта столбцов с NULL)" -#: commands/matview.c:647 +#: commands/matview.c:643 #, c-format msgid "Row: %s" msgstr "Строка: %s" @@ -8707,177 +8877,222 @@ msgstr "семейство операторов \"%s\" для метода до msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "семейство операторов \"%s\" для метода доступа \"%s\" уже существует" -#: commands/opclasscmds.c:412 +#: commands/opclasscmds.c:414 #, c-format msgid "must be superuser to create an operator class" msgstr "для создания класса операторов нужно быть суперпользователем" -#: commands/opclasscmds.c:485 commands/opclasscmds.c:864 -#: commands/opclasscmds.c:988 +#: commands/opclasscmds.c:487 commands/opclasscmds.c:869 +#: commands/opclasscmds.c:993 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "неверный номер оператора (%d), требуется число от 1 до %d" -#: commands/opclasscmds.c:529 commands/opclasscmds.c:908 -#: commands/opclasscmds.c:1003 +#: commands/opclasscmds.c:531 commands/opclasscmds.c:913 +#: commands/opclasscmds.c:1008 #, c-format msgid "invalid function number %d, must be between 1 and %d" msgstr "неверный номер функции (%d), требуется число от 1 до %d" -#: commands/opclasscmds.c:558 +#: commands/opclasscmds.c:559 #, c-format msgid "storage type specified more than once" msgstr "тип хранения указан неоднократно" -#: commands/opclasscmds.c:585 +#: commands/opclasscmds.c:586 #, c-format msgid "" "storage type cannot be different from data type for access method \"%s\"" msgstr "" "тип хранения не может отличаться от типа данных для метода доступа \"%s\"" -#: commands/opclasscmds.c:601 +#: commands/opclasscmds.c:602 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "класс операторов \"%s\" для метода доступа \"%s\" уже существует" -#: commands/opclasscmds.c:629 +#: commands/opclasscmds.c:630 #, c-format msgid "could not make operator class \"%s\" be default for type %s" msgstr "" "класс операторов \"%s\" не удалось сделать классом по умолчанию для типа %s" -#: commands/opclasscmds.c:632 +#: commands/opclasscmds.c:633 #, c-format msgid "Operator class \"%s\" already is the default." msgstr "Класс операторов \"%s\" уже является классом по умолчанию." -#: commands/opclasscmds.c:760 +#: commands/opclasscmds.c:761 #, c-format msgid "must be superuser to create an operator family" msgstr "для создания семейства операторов нужно быть суперпользователем" -#: commands/opclasscmds.c:818 +#: commands/opclasscmds.c:821 #, c-format msgid "must be superuser to alter an operator family" msgstr "для изменения семейства операторов нужно быть суперпользователем" -#: commands/opclasscmds.c:873 +#: commands/opclasscmds.c:878 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "в ALTER OPERATOR FAMILY должны быть указаны типы аргументов оператора" -#: commands/opclasscmds.c:936 +#: commands/opclasscmds.c:941 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "в ALTER OPERATOR FAMILY нельзя указать STORAGE" -#: commands/opclasscmds.c:1058 +#: commands/opclasscmds.c:1063 #, c-format msgid "one or two argument types must be specified" msgstr "нужно указать один или два типа аргументов" -#: commands/opclasscmds.c:1084 +#: commands/opclasscmds.c:1089 #, c-format msgid "index operators must be binary" msgstr "индексные операторы должны быть бинарными" -#: commands/opclasscmds.c:1103 +#: commands/opclasscmds.c:1108 #, c-format msgid "access method \"%s\" does not support ordering operators" msgstr "метод доступа \"%s\" не поддерживает сортирующие операторы" -#: commands/opclasscmds.c:1114 +#: commands/opclasscmds.c:1119 #, c-format msgid "index search operators must return boolean" msgstr "операторы поиска по индексу должны возвращать логическое значение" -#: commands/opclasscmds.c:1158 +#: commands/opclasscmds.c:1159 +#, c-format +msgid "" +"associated data types for operator class options parsing functions must " +"match opclass input type" +msgstr "" +"связанные типы данных для функций, разбирающих параметры класса операторов, " +"должны совпадать с входным типом класса" + +#: commands/opclasscmds.c:1166 +#, c-format +msgid "" +"left and right associated data types for operator class options parsing " +"functions must match" +msgstr "" +"левый и правый типы данных для функций, разбирающих параметры класса " +"операторов, должны совпадать" + +#: commands/opclasscmds.c:1174 +#, c-format +msgid "invalid operator class options parsing function" +msgstr "неправильная функция разбора параметров класса операторов" + +#: commands/opclasscmds.c:1175 +#, c-format +msgid "Valid signature of operator class options parsing function is %s." +msgstr "" +"Правильная сигнатура функции, осуществляющей разбор параметров класса " +"операторов: '%s'." + +#: commands/opclasscmds.c:1194 #, c-format msgid "btree comparison functions must have two arguments" msgstr "функции сравнения btree должны иметь два аргумента" -#: commands/opclasscmds.c:1162 +#: commands/opclasscmds.c:1198 #, c-format msgid "btree comparison functions must return integer" msgstr "функции сравнения btree должны возвращать целое число" -#: commands/opclasscmds.c:1179 +#: commands/opclasscmds.c:1215 #, c-format msgid "btree sort support functions must accept type \"internal\"" msgstr "опорные функции сортировки btree должны принимать тип \"internal\"" -#: commands/opclasscmds.c:1183 +#: commands/opclasscmds.c:1219 #, c-format msgid "btree sort support functions must return void" msgstr "опорные функции сортировки btree должны возвращать пустое (void)" -#: commands/opclasscmds.c:1194 +#: commands/opclasscmds.c:1230 #, c-format msgid "btree in_range functions must have five arguments" msgstr "функции in_range для btree должны принимать пять аргументов" -#: commands/opclasscmds.c:1198 +#: commands/opclasscmds.c:1234 #, c-format msgid "btree in_range functions must return boolean" msgstr "функции in_range для btree должны возвращать логическое значение" -#: commands/opclasscmds.c:1217 +#: commands/opclasscmds.c:1250 +#, c-format +msgid "btree equal image functions must have one argument" +msgstr "функции равенства образов btree должны иметь один аргумент" + +#: commands/opclasscmds.c:1254 +#, c-format +msgid "btree equal image functions must return boolean" +msgstr "функции равенства образов должны возвращать логическое значение" + +#: commands/opclasscmds.c:1267 +#, c-format +msgid "btree equal image functions must not be cross-type" +msgstr "функции равенства образов не должны быть межтиповыми" + +#: commands/opclasscmds.c:1277 #, c-format msgid "hash function 1 must have one argument" msgstr "функция хеширования 1 должна принимать один аргумент" -#: commands/opclasscmds.c:1221 +#: commands/opclasscmds.c:1281 #, c-format msgid "hash function 1 must return integer" msgstr "функция хеширования 1 должна возвращать целое число" -#: commands/opclasscmds.c:1228 +#: commands/opclasscmds.c:1288 #, c-format msgid "hash function 2 must have two arguments" msgstr "функция хеширования 2 должна принимать два аргумента" -#: commands/opclasscmds.c:1232 +#: commands/opclasscmds.c:1292 #, c-format msgid "hash function 2 must return bigint" msgstr "функция хеширования 2 должна возвращать значение bigint" -#: commands/opclasscmds.c:1257 +#: commands/opclasscmds.c:1317 #, c-format msgid "associated data types must be specified for index support function" msgstr "для опорной функции индексов должны быть указаны связанные типы данных" -#: commands/opclasscmds.c:1282 +#: commands/opclasscmds.c:1342 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "номер функции %d для (%s,%s) дублируется" -#: commands/opclasscmds.c:1289 +#: commands/opclasscmds.c:1349 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "номер оператора %d для (%s,%s) дублируется" -#: commands/opclasscmds.c:1338 +#: commands/opclasscmds.c:1398 #, c-format msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "оператор %d(%s,%s) уже существует в семействе \"%s\"" -#: commands/opclasscmds.c:1455 +#: commands/opclasscmds.c:1515 #, c-format msgid "function %d(%s,%s) already exists in operator family \"%s\"" msgstr "функция %d(%s,%s) уже существует в семействе операторов \"%s\"" -#: commands/opclasscmds.c:1546 +#: commands/opclasscmds.c:1606 #, c-format msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" msgstr "оператор %d(%s,%s) не существует в семействе операторов \"%s\"" -#: commands/opclasscmds.c:1586 +#: commands/opclasscmds.c:1646 #, c-format msgid "function %d(%s,%s) does not exist in operator family \"%s\"" msgstr "функция %d(%s,%s) не существует в семействе операторов \"%s\"" -#: commands/opclasscmds.c:1716 +#: commands/opclasscmds.c:1776 #, c-format msgid "" "operator class \"%s\" for access method \"%s\" already exists in schema \"%s" @@ -8886,7 +9101,7 @@ msgstr "" "класс операторов \"%s\" для метода доступа \"%s\" уже существует в схеме \"%s" "\"" -#: commands/opclasscmds.c:1739 +#: commands/opclasscmds.c:1799 #, c-format msgid "" "operator family \"%s\" for access method \"%s\" already exists in schema \"%s" @@ -8895,48 +9110,53 @@ msgstr "" "семейство операторов \"%s\" для метода доступа \"%s\" уже существует в схеме " "\"%s\"" -#: commands/operatorcmds.c:113 commands/operatorcmds.c:121 +#: commands/operatorcmds.c:111 commands/operatorcmds.c:119 #, c-format msgid "SETOF type not allowed for operator argument" msgstr "аргументом оператора не может быть тип SETOF" -#: commands/operatorcmds.c:154 commands/operatorcmds.c:457 +#: commands/operatorcmds.c:152 commands/operatorcmds.c:467 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "атрибут оператора \"%s\" не распознан" -#: commands/operatorcmds.c:165 +#: commands/operatorcmds.c:163 #, c-format msgid "operator function must be specified" msgstr "необходимо указать функцию оператора" -#: commands/operatorcmds.c:176 +#: commands/operatorcmds.c:174 #, c-format msgid "at least one of leftarg or rightarg must be specified" msgstr "необходимо указать левый и/или правый аргумент" -#: commands/operatorcmds.c:280 +#: commands/operatorcmds.c:278 #, c-format msgid "restriction estimator function %s must return type %s" msgstr "функция оценки ограничения %s должна возвращать тип %s" -#: commands/operatorcmds.c:326 +#: commands/operatorcmds.c:321 +#, c-format +msgid "join estimator function %s has multiple matches" +msgstr "функция оценки соединения %s присутствует в нескольких экземплярах" + +#: commands/operatorcmds.c:336 #, c-format msgid "join estimator function %s must return type %s" msgstr "функция оценки соединения %s должна возвращать тип %s" -#: commands/operatorcmds.c:451 +#: commands/operatorcmds.c:461 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "атрибут оператора \"%s\" нельзя изменить" -#: commands/policy.c:88 commands/policy.c:401 commands/policy.c:491 -#: commands/tablecmds.c:1470 commands/tablecmds.c:1952 -#: commands/tablecmds.c:2925 commands/tablecmds.c:5211 -#: commands/tablecmds.c:7732 commands/tablecmds.c:14919 -#: commands/tablecmds.c:14954 commands/trigger.c:319 commands/trigger.c:1544 -#: commands/trigger.c:1653 rewrite/rewriteDefine.c:277 -#: rewrite/rewriteDefine.c:933 +#: commands/policy.c:88 commands/policy.c:381 commands/policy.c:471 +#: commands/statscmds.c:143 commands/tablecmds.c:1512 commands/tablecmds.c:1994 +#: commands/tablecmds.c:3076 commands/tablecmds.c:5610 +#: commands/tablecmds.c:8413 commands/tablecmds.c:15654 +#: commands/tablecmds.c:15689 commands/trigger.c:301 commands/trigger.c:1206 +#: commands/trigger.c:1315 rewrite/rewriteDefine.c:278 +#: rewrite/rewriteDefine.c:944 rewrite/rewriteRemove.c:80 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "доступ запрещён: \"%s\" - это системный каталог" @@ -8951,187 +9171,176 @@ msgstr "все указанные роли, кроме PUBLIC, игнориру msgid "All roles are members of the PUBLIC role." msgstr "Роль PUBLIC включает в себя все остальные роли." -#: commands/policy.c:515 +#: commands/policy.c:495 #, c-format msgid "role \"%s\" could not be removed from policy \"%s\" on \"%s\"" msgstr "роль \"%s\" нельзя удалить из политики \"%s\" отношения \"%s\"" -#: commands/policy.c:724 +#: commands/policy.c:704 #, c-format msgid "WITH CHECK cannot be applied to SELECT or DELETE" msgstr "WITH CHECK нельзя применить к SELECT или DELETE" -#: commands/policy.c:733 commands/policy.c:1038 +#: commands/policy.c:713 commands/policy.c:1018 #, c-format msgid "only WITH CHECK expression allowed for INSERT" msgstr "для INSERT допускается только выражение WITH CHECK" -#: commands/policy.c:808 commands/policy.c:1260 +#: commands/policy.c:788 commands/policy.c:1241 #, c-format msgid "policy \"%s\" for table \"%s\" already exists" msgstr "политика \"%s\" для таблицы \"%s\" уже существует" -#: commands/policy.c:1010 commands/policy.c:1288 commands/policy.c:1359 +#: commands/policy.c:990 commands/policy.c:1269 commands/policy.c:1340 #, c-format msgid "policy \"%s\" for table \"%s\" does not exist" msgstr "политика \"%s\" для таблицы \"%s\" не существует" -#: commands/policy.c:1028 +#: commands/policy.c:1008 #, c-format msgid "only USING expression allowed for SELECT, DELETE" msgstr "для SELECT, DELETE допускается только выражение USING" -#: commands/portalcmds.c:58 commands/portalcmds.c:182 commands/portalcmds.c:234 +#: commands/portalcmds.c:60 commands/portalcmds.c:187 commands/portalcmds.c:238 #, c-format msgid "invalid cursor name: must not be empty" msgstr "имя курсора не может быть пустым" -#: commands/portalcmds.c:190 commands/portalcmds.c:244 -#: executor/execCurrent.c:70 utils/adt/xml.c:2608 utils/adt/xml.c:2778 +#: commands/portalcmds.c:72 +#, c-format +msgid "cannot create a cursor WITH HOLD within security-restricted operation" +msgstr "" +"в рамках операции с ограничениями по безопасности нельзя создать курсор WITH " +"HOLD" + +#: commands/portalcmds.c:195 commands/portalcmds.c:248 +#: executor/execCurrent.c:70 utils/adt/xml.c:2594 utils/adt/xml.c:2764 #, c-format msgid "cursor \"%s\" does not exist" msgstr "курсор \"%s\" не существует" -#: commands/prepare.c:75 +#: commands/prepare.c:76 #, c-format msgid "invalid statement name: must not be empty" msgstr "неверный оператор: имя не должно быть пустым" -#: commands/prepare.c:141 parser/parse_param.c:304 tcop/postgres.c:1468 +#: commands/prepare.c:134 parser/parse_param.c:304 tcop/postgres.c:1498 #, c-format msgid "could not determine data type of parameter $%d" msgstr "не удалось определить тип данных параметра $%d" -#: commands/prepare.c:159 +#: commands/prepare.c:152 #, c-format msgid "utility statements cannot be prepared" msgstr "служебные SQL-операторы нельзя подготовить" # [SM]: TO REVIEW -#: commands/prepare.c:269 commands/prepare.c:274 +#: commands/prepare.c:256 commands/prepare.c:261 #, c-format msgid "prepared statement is not a SELECT" msgstr "подготовленный оператор - не SELECT" -#: commands/prepare.c:342 +#: commands/prepare.c:328 #, c-format msgid "wrong number of parameters for prepared statement \"%s\"" msgstr "неверное число параметров для подготовленного оператора \"%s\"" -#: commands/prepare.c:344 +#: commands/prepare.c:330 #, c-format msgid "Expected %d parameters but got %d." msgstr "Ожидалось параметров: %d, получено: %d." -#: commands/prepare.c:380 +#: commands/prepare.c:363 #, c-format msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "параметр $%d типа %s нельзя привести к ожидаемому типу %s" # [SM]: TO REVIEW -#: commands/prepare.c:465 +#: commands/prepare.c:449 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "подготовленный оператор \"%s\" уже существует" # [SM]: TO REVIEW -#: commands/prepare.c:504 +#: commands/prepare.c:488 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "подготовленный оператор \"%s\" не существует" -#: commands/proclang.c:85 -#, c-format -msgid "using pg_pltemplate information instead of CREATE LANGUAGE parameters" -msgstr "" -"вместо параметров CREATE LANGUAGE используется информация pg_pltemplate" - -#: commands/proclang.c:95 -#, c-format -msgid "must be superuser to create procedural language \"%s\"" -msgstr "для создания процедурного языка \"%s\" нужно быть суперпользователем" - -#: commands/proclang.c:250 -#, c-format -msgid "unsupported language \"%s\"" -msgstr "неподдерживаемый язык: \"%s\"" - -#: commands/proclang.c:252 -#, c-format -msgid "The supported languages are listed in the pg_pltemplate system catalog." -msgstr "" -"Список поддерживаемых языков содержится в системном каталоге pg_pltemplate." - -#: commands/proclang.c:260 +#: commands/proclang.c:67 #, c-format msgid "must be superuser to create custom procedural language" msgstr "" "для создания дополнительного процедурного языка нужно быть суперпользователем" -#: commands/proclang.c:279 commands/trigger.c:711 commands/typecmds.c:458 -#: commands/typecmds.c:475 -#, c-format -msgid "changing return type of function %s from %s to %s" -msgstr "изменение типа возврата функции %s с %s на %s" - -#: commands/publicationcmds.c:108 +#: commands/publicationcmds.c:107 #, c-format msgid "invalid list syntax for \"publish\" option" msgstr "неверный синтаксис параметра \"publish\"" -#: commands/publicationcmds.c:126 +#: commands/publicationcmds.c:125 #, c-format msgid "unrecognized \"publish\" value: \"%s\"" msgstr "нераспознанное значение \"publish\": \"%s\"" -#: commands/publicationcmds.c:132 +#: commands/publicationcmds.c:140 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "нераспознанный параметр репликации: \"%s\"" -#: commands/publicationcmds.c:165 +#: commands/publicationcmds.c:172 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "для создания публикации всех таблиц нужно быть суперпользователем" -#: commands/publicationcmds.c:341 +#: commands/publicationcmds.c:248 +#, c-format +msgid "wal_level is insufficient to publish logical changes" +msgstr "уровень wal_level недостаточен для публикации логических изменений" + +#: commands/publicationcmds.c:249 +#, c-format +msgid "Set wal_level to logical before creating subscriptions." +msgstr "Задайте для wal_level значение logical до создания подписок." + +#: commands/publicationcmds.c:369 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "публикация \"%s\" определена для всех таблиц (FOR ALL TABLES)" -#: commands/publicationcmds.c:343 +#: commands/publicationcmds.c:371 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "В публикации всех таблиц нельзя добавлять или удалять таблицы." -#: commands/publicationcmds.c:648 +#: commands/publicationcmds.c:683 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "отношение \"%s\" не включено в публикацию" -#: commands/publicationcmds.c:691 +#: commands/publicationcmds.c:726 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "нет прав на изменение владельца публикации \"%s\"" -#: commands/publicationcmds.c:693 +#: commands/publicationcmds.c:728 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "" "Владельцем публикации всех таблиц (FOR ALL TABLES) должен быть " "суперпользователь." -#: commands/schemacmds.c:106 commands/schemacmds.c:282 +#: commands/schemacmds.c:105 commands/schemacmds.c:281 #, c-format msgid "unacceptable schema name \"%s\"" msgstr "неприемлемое имя схемы: \"%s\"" -#: commands/schemacmds.c:107 commands/schemacmds.c:283 +#: commands/schemacmds.c:106 commands/schemacmds.c:282 #, c-format msgid "The prefix \"pg_\" is reserved for system schemas." msgstr "Префикс \"pg_\" зарезервирован для системных схем." -#: commands/schemacmds.c:121 +#: commands/schemacmds.c:120 #, c-format msgid "schema \"%s\" already exists, skipping" msgstr "схема \"%s\" уже существует, пропускается" @@ -9284,45 +9493,45 @@ msgstr "" msgid "cannot change ownership of identity sequence" msgstr "сменить владельца последовательности идентификации нельзя" -#: commands/sequence.c:1718 commands/tablecmds.c:11821 -#: commands/tablecmds.c:14331 +#: commands/sequence.c:1718 commands/tablecmds.c:12562 +#: commands/tablecmds.c:15080 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "Последовательность \"%s\" связана с таблицей \"%s\"." -#: commands/statscmds.c:101 commands/statscmds.c:110 +#: commands/statscmds.c:104 commands/statscmds.c:113 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "в CREATE STATISTICS можно указать только одно отношение" -#: commands/statscmds.c:128 +#: commands/statscmds.c:131 #, c-format msgid "relation \"%s\" is not a table, foreign table, or materialized view" msgstr "" "отношение \"%s\" - это не таблица, не сторонняя таблица и не " "материализованное представление" -#: commands/statscmds.c:171 +#: commands/statscmds.c:181 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "объект статистики \"%s\" уже существует, пропускается" -#: commands/statscmds.c:179 +#: commands/statscmds.c:189 #, c-format msgid "statistics object \"%s\" already exists" msgstr "объект статистики \"%s\" уже существует" -#: commands/statscmds.c:201 commands/statscmds.c:207 +#: commands/statscmds.c:211 commands/statscmds.c:217 #, c-format msgid "only simple column references are allowed in CREATE STATISTICS" msgstr "в CREATE STATISTICS допускаются только простые ссылки на столбцы" -#: commands/statscmds.c:222 +#: commands/statscmds.c:232 #, c-format msgid "statistics creation on system columns is not supported" msgstr "создание статистики для системных столбцов не поддерживается" -#: commands/statscmds.c:229 +#: commands/statscmds.c:239 #, c-format msgid "" "column \"%s\" cannot be used in statistics because its type %s has no " @@ -9331,68 +9540,83 @@ msgstr "" "столбец \"%s\" нельзя использовать в статистике, так как для его типа %s не " "определён класс операторов B-дерева по умолчанию" -#: commands/statscmds.c:236 +#: commands/statscmds.c:246 #, c-format msgid "cannot have more than %d columns in statistics" msgstr "в статистике не может быть больше %d столбцов" -#: commands/statscmds.c:251 +#: commands/statscmds.c:261 #, c-format msgid "extended statistics require at least 2 columns" msgstr "для расширенной статистики требуются минимум 2 столбца" -#: commands/statscmds.c:269 +#: commands/statscmds.c:279 #, c-format msgid "duplicate column name in statistics definition" msgstr "повторяющееся имя столбца в определении статистики" -#: commands/statscmds.c:303 +#: commands/statscmds.c:313 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "нераспознанный вид статистики \"%s\"" -#: commands/subscriptioncmds.c:188 +#: commands/statscmds.c:451 commands/tablecmds.c:7434 +#, c-format +msgid "statistics target %d is too low" +msgstr "ориентир статистики слишком мал (%d)" + +#: commands/statscmds.c:459 commands/tablecmds.c:7442 +#, c-format +msgid "lowering statistics target to %d" +msgstr "ориентир статистики снижается до %d" + +#: commands/statscmds.c:482 +#, c-format +msgid "statistics object \"%s.%s\" does not exist, skipping" +msgstr "объект статистики \"%s.%s\" не существует, пропускается" + +#: commands/subscriptioncmds.c:181 #, c-format msgid "unrecognized subscription parameter: \"%s\"" msgstr "нераспознанный параметр подписки: \"%s\"" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:202 commands/subscriptioncmds.c:208 -#: commands/subscriptioncmds.c:214 commands/subscriptioncmds.c:233 -#: commands/subscriptioncmds.c:239 +#: commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:201 +#: commands/subscriptioncmds.c:207 commands/subscriptioncmds.c:226 +#: commands/subscriptioncmds.c:232 #, c-format msgid "%s and %s are mutually exclusive options" msgstr "указания %s и %s являются взаимоисключающими" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:246 commands/subscriptioncmds.c:252 +#: commands/subscriptioncmds.c:239 commands/subscriptioncmds.c:245 #, c-format msgid "subscription with %s must also set %s" msgstr "для подписки с параметром %s необходимо также задать %s" -#: commands/subscriptioncmds.c:294 +#: commands/subscriptioncmds.c:287 #, c-format msgid "publication name \"%s\" used more than once" msgstr "имя публикации \"%s\" используется неоднократно" -#: commands/subscriptioncmds.c:358 +#: commands/subscriptioncmds.c:351 #, c-format msgid "must be superuser to create subscriptions" msgstr "для создания подписок нужно быть суперпользователем" -#: commands/subscriptioncmds.c:450 commands/subscriptioncmds.c:543 -#: replication/logical/tablesync.c:846 replication/logical/worker.c:1737 +#: commands/subscriptioncmds.c:442 commands/subscriptioncmds.c:530 +#: replication/logical/tablesync.c:857 replication/logical/worker.c:2095 #, c-format msgid "could not connect to the publisher: %s" msgstr "не удалось подключиться к серверу публикации: %s" -#: commands/subscriptioncmds.c:492 +#: commands/subscriptioncmds.c:484 #, c-format msgid "created replication slot \"%s\" on publisher" msgstr "на сервере публикации создан слот репликации \"%s\"" #. translator: %s is an SQL ALTER statement -#: commands/subscriptioncmds.c:510 +#: commands/subscriptioncmds.c:497 #, c-format msgid "" "tables were not subscribed, you will have to run %s to subscribe the tables" @@ -9400,51 +9624,51 @@ msgstr "" "в подписке отсутствуют таблицы; потребуется выполнить %s, чтобы подписаться " "на таблицы" -#: commands/subscriptioncmds.c:599 +#: commands/subscriptioncmds.c:586 #, c-format msgid "table \"%s.%s\" added to subscription \"%s\"" msgstr "таблица \"%s.%s\" добавлена в подписку \"%s\"" -#: commands/subscriptioncmds.c:623 +#: commands/subscriptioncmds.c:610 #, c-format msgid "table \"%s.%s\" removed from subscription \"%s\"" msgstr "таблица \"%s.%s\" удалена из подписки \"%s\"" -#: commands/subscriptioncmds.c:695 +#: commands/subscriptioncmds.c:682 #, c-format msgid "cannot set %s for enabled subscription" msgstr "для включённой подписки нельзя задать %s" -#: commands/subscriptioncmds.c:730 +#: commands/subscriptioncmds.c:717 #, c-format msgid "cannot enable subscription that does not have a slot name" msgstr "включить подписку, для которой не задано имя слота, нельзя" -#: commands/subscriptioncmds.c:776 +#: commands/subscriptioncmds.c:763 #, c-format msgid "" "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" msgstr "" "ALTER SUBSCRIPTION с обновлением для отключённых подписок не допускается" -#: commands/subscriptioncmds.c:777 +#: commands/subscriptioncmds.c:764 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgstr "" "Выполните ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." -#: commands/subscriptioncmds.c:795 +#: commands/subscriptioncmds.c:782 #, c-format msgid "" "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH для отключённых подписок не допускается" -#: commands/subscriptioncmds.c:875 +#: commands/subscriptioncmds.c:862 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "подписка \"%s\" не существует, пропускается" -#: commands/subscriptioncmds.c:1001 +#: commands/subscriptioncmds.c:987 #, c-format msgid "" "could not connect to publisher when attempting to drop the replication slot " @@ -9453,159 +9677,159 @@ msgstr "" "не удалось подключиться к серверу публикации для удаления слота репликации " "\"%s\"" -#: commands/subscriptioncmds.c:1003 commands/subscriptioncmds.c:1018 -#: replication/logical/tablesync.c:895 replication/logical/tablesync.c:917 +#: commands/subscriptioncmds.c:989 commands/subscriptioncmds.c:1004 +#: replication/logical/tablesync.c:906 replication/logical/tablesync.c:928 #, c-format msgid "The error was: %s" msgstr "Произошла ошибка: %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1005 +#: commands/subscriptioncmds.c:991 #, c-format msgid "Use %s to disassociate the subscription from the slot." msgstr "Выполните %s, чтобы отвязать подписку от слота." -#: commands/subscriptioncmds.c:1016 +#: commands/subscriptioncmds.c:1002 #, c-format msgid "could not drop the replication slot \"%s\" on publisher" msgstr "слот репликации \"%s\" на сервере публикации не был удалён" -#: commands/subscriptioncmds.c:1021 +#: commands/subscriptioncmds.c:1007 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "слот репликации \"%s\" удалён на сервере репликации" -#: commands/subscriptioncmds.c:1062 +#: commands/subscriptioncmds.c:1044 #, c-format msgid "permission denied to change owner of subscription \"%s\"" msgstr "нет прав на изменение владельца подписки \"%s\"" -#: commands/subscriptioncmds.c:1064 +#: commands/subscriptioncmds.c:1046 #, c-format msgid "The owner of a subscription must be a superuser." msgstr "Владельцем подписки должен быть суперпользователь." -#: commands/subscriptioncmds.c:1179 +#: commands/subscriptioncmds.c:1161 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "" "не удалось получить список реплицируемых таблиц с сервера репликации: %s" -#: commands/tablecmds.c:224 commands/tablecmds.c:266 +#: commands/tablecmds.c:228 commands/tablecmds.c:270 #, c-format msgid "table \"%s\" does not exist" msgstr "таблица \"%s\" не существует" -#: commands/tablecmds.c:225 commands/tablecmds.c:267 +#: commands/tablecmds.c:229 commands/tablecmds.c:271 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "таблица \"%s\" не существует, пропускается" -#: commands/tablecmds.c:227 commands/tablecmds.c:269 +#: commands/tablecmds.c:231 commands/tablecmds.c:273 msgid "Use DROP TABLE to remove a table." msgstr "Выполните DROP TABLE для удаления таблицы." -#: commands/tablecmds.c:230 +#: commands/tablecmds.c:234 #, c-format msgid "sequence \"%s\" does not exist" msgstr "последовательность \"%s\" не существует" -#: commands/tablecmds.c:231 +#: commands/tablecmds.c:235 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "последовательность \"%s\" не существует, пропускается" -#: commands/tablecmds.c:233 +#: commands/tablecmds.c:237 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "Выполните DROP SEQUENCE для удаления последовательности." -#: commands/tablecmds.c:236 +#: commands/tablecmds.c:240 #, c-format msgid "view \"%s\" does not exist" msgstr "представление \"%s\" не существует" -#: commands/tablecmds.c:237 +#: commands/tablecmds.c:241 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "представление \"%s\" не существует, пропускается" -#: commands/tablecmds.c:239 +#: commands/tablecmds.c:243 msgid "Use DROP VIEW to remove a view." msgstr "Выполните DROP VIEW для удаления представления." -#: commands/tablecmds.c:242 +#: commands/tablecmds.c:246 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "материализованное представление \"%s\" не существует" -#: commands/tablecmds.c:243 +#: commands/tablecmds.c:247 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "материализованное представление \"%s\" не существует, пропускается" -#: commands/tablecmds.c:245 +#: commands/tablecmds.c:249 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "" "Выполните DROP MATERIALIZED VIEW для удаления материализованного " "представления." -#: commands/tablecmds.c:248 commands/tablecmds.c:272 commands/tablecmds.c:16526 -#: parser/parse_utilcmd.c:2045 +#: commands/tablecmds.c:252 commands/tablecmds.c:276 commands/tablecmds.c:17253 +#: parser/parse_utilcmd.c:2196 #, c-format msgid "index \"%s\" does not exist" msgstr "индекс \"%s\" не существует" -#: commands/tablecmds.c:249 commands/tablecmds.c:273 +#: commands/tablecmds.c:253 commands/tablecmds.c:277 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "индекс \"%s\" не существует, пропускается" -#: commands/tablecmds.c:251 commands/tablecmds.c:275 +#: commands/tablecmds.c:255 commands/tablecmds.c:279 msgid "Use DROP INDEX to remove an index." msgstr "Выполните DROP INDEX для удаления индекса." -#: commands/tablecmds.c:256 +#: commands/tablecmds.c:260 #, c-format msgid "\"%s\" is not a type" msgstr "\"%s\" - это не тип" -#: commands/tablecmds.c:257 +#: commands/tablecmds.c:261 msgid "Use DROP TYPE to remove a type." msgstr "Выполните DROP TYPE для удаления типа." -#: commands/tablecmds.c:260 commands/tablecmds.c:11660 -#: commands/tablecmds.c:14111 +#: commands/tablecmds.c:264 commands/tablecmds.c:12401 +#: commands/tablecmds.c:14860 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "сторонняя таблица \"%s\" не существует" -#: commands/tablecmds.c:261 +#: commands/tablecmds.c:265 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "сторонняя таблица \"%s\" не существует, пропускается" -#: commands/tablecmds.c:263 +#: commands/tablecmds.c:267 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Выполните DROP FOREIGN TABLE для удаления сторонней таблицы." -#: commands/tablecmds.c:595 +#: commands/tablecmds.c:620 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT можно использовать только для временных таблиц" -#: commands/tablecmds.c:626 +#: commands/tablecmds.c:651 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "" "в рамках операции с ограничениями по безопасности нельзя создать временную " "таблицу" -#: commands/tablecmds.c:662 commands/tablecmds.c:13015 +#: commands/tablecmds.c:687 commands/tablecmds.c:13764 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "отношение \"%s\" наследуется неоднократно" -#: commands/tablecmds.c:836 +#: commands/tablecmds.c:868 #, c-format msgid "" "specifying a table access method is not supported on a partitioned table" @@ -9613,42 +9837,47 @@ msgstr "" "указание табличного метода доступа для секционированных таблиц не " "поддерживаются" -#: commands/tablecmds.c:932 +#: commands/tablecmds.c:964 #, c-format msgid "\"%s\" is not partitioned" msgstr "отношение \"%s\" не является секционированным" -#: commands/tablecmds.c:1025 +#: commands/tablecmds.c:1058 #, c-format msgid "cannot partition using more than %d columns" msgstr "число столбцов в ключе секционирования не может превышать %d" -#: commands/tablecmds.c:1081 +#: commands/tablecmds.c:1114 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "создать стороннюю секцию для секционированной таблицы \"%s\" нельзя" -#: commands/tablecmds.c:1083 +#: commands/tablecmds.c:1116 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "Таблица \"%s\" содержит индексы, являющиеся уникальными." -#: commands/tablecmds.c:1248 +#: commands/tablecmds.c:1279 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY не поддерживает удаление нескольких объектов" -#: commands/tablecmds.c:1252 +#: commands/tablecmds.c:1283 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY не поддерживает режим CASCADE" -#: commands/tablecmds.c:1606 +#: commands/tablecmds.c:1384 +#, c-format +msgid "cannot drop partitioned index \"%s\" concurrently" +msgstr "удалить секционированный индекс \"%s\" параллельным способом нельзя" + +#: commands/tablecmds.c:1654 #, c-format msgid "cannot truncate only a partitioned table" msgstr "опустошить собственно секционированную таблицу нельзя" -#: commands/tablecmds.c:1607 +#: commands/tablecmds.c:1655 #, c-format msgid "" "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions " @@ -9657,34 +9886,34 @@ msgstr "" "Не указывайте ключевое слово ONLY или выполните TRUNCATE ONLY " "непосредственно для секций." -#: commands/tablecmds.c:1676 +#: commands/tablecmds.c:1724 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "опустошение распространяется на таблицу %s" -#: commands/tablecmds.c:1971 +#: commands/tablecmds.c:2031 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "временные таблицы других сеансов нельзя опустошить" -#: commands/tablecmds.c:2197 commands/tablecmds.c:12912 +#: commands/tablecmds.c:2259 commands/tablecmds.c:13661 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "наследование от секционированной таблицы \"%s\" не допускается" -#: commands/tablecmds.c:2202 +#: commands/tablecmds.c:2264 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "наследование от секции \"%s\" не допускается" -#: commands/tablecmds.c:2210 parser/parse_utilcmd.c:2269 -#: parser/parse_utilcmd.c:2410 +#: commands/tablecmds.c:2272 parser/parse_utilcmd.c:2426 +#: parser/parse_utilcmd.c:2568 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "" "наследуемое отношение \"%s\" не является таблицей или сторонней таблицей" -#: commands/tablecmds.c:2222 +#: commands/tablecmds.c:2284 #, c-format msgid "" "cannot create a temporary relation as partition of permanent relation \"%s\"" @@ -9692,110 +9921,154 @@ msgstr "" "создать временное отношение в качестве секции постоянного отношения \"%s\" " "нельзя" -#: commands/tablecmds.c:2231 commands/tablecmds.c:12891 +#: commands/tablecmds.c:2293 commands/tablecmds.c:13640 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "временное отношение \"%s\" не может наследоваться" -#: commands/tablecmds.c:2241 commands/tablecmds.c:12899 +#: commands/tablecmds.c:2303 commands/tablecmds.c:13648 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "наследование от временного отношения другого сеанса невозможно" -#: commands/tablecmds.c:2293 +#: commands/tablecmds.c:2357 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "слияние нескольких наследованных определений столбца \"%s\"" -#: commands/tablecmds.c:2301 +#: commands/tablecmds.c:2365 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "конфликт типов в наследованном столбце \"%s\"" -#: commands/tablecmds.c:2303 commands/tablecmds.c:2326 -#: commands/tablecmds.c:2539 commands/tablecmds.c:2569 -#: parser/parse_coerce.c:1721 parser/parse_coerce.c:1741 -#: parser/parse_coerce.c:1761 parser/parse_coerce.c:1807 -#: parser/parse_coerce.c:1846 parser/parse_param.c:218 +#: commands/tablecmds.c:2367 commands/tablecmds.c:2390 +#: commands/tablecmds.c:2639 commands/tablecmds.c:2669 +#: parser/parse_coerce.c:1935 parser/parse_coerce.c:1955 +#: parser/parse_coerce.c:1975 parser/parse_coerce.c:2030 +#: parser/parse_coerce.c:2107 parser/parse_coerce.c:2141 +#: parser/parse_param.c:218 #, c-format msgid "%s versus %s" msgstr "%s и %s" -#: commands/tablecmds.c:2312 +#: commands/tablecmds.c:2376 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "конфликт правил сортировки в наследованном столбце \"%s\"" -#: commands/tablecmds.c:2314 commands/tablecmds.c:2551 -#: commands/tablecmds.c:5704 +#: commands/tablecmds.c:2378 commands/tablecmds.c:2651 +#: commands/tablecmds.c:6108 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "\"%s\" и \"%s\"" -#: commands/tablecmds.c:2324 +#: commands/tablecmds.c:2388 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "конфликт параметров хранения в наследованном столбце \"%s\"" -#: commands/tablecmds.c:2340 +#: commands/tablecmds.c:2404 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "конфликт свойства генерирования в наследованном столбце \"%s\"" -#: commands/tablecmds.c:2445 commands/tablecmds.c:10563 -#: parser/parse_utilcmd.c:1065 parser/parse_utilcmd.c:1149 -#: parser/parse_utilcmd.c:1562 parser/parse_utilcmd.c:1669 +#: commands/tablecmds.c:2490 commands/tablecmds.c:2545 +#: commands/tablecmds.c:11206 parser/parse_utilcmd.c:1276 +#: parser/parse_utilcmd.c:1319 parser/parse_utilcmd.c:1727 +#: parser/parse_utilcmd.c:1836 #, c-format msgid "cannot convert whole-row table reference" msgstr "преобразовать ссылку на тип всей строки таблицы нельзя" -#: commands/tablecmds.c:2446 parser/parse_utilcmd.c:1150 +#: commands/tablecmds.c:2491 parser/parse_utilcmd.c:1277 +#, c-format +msgid "" +"Generation expression for column \"%s\" contains a whole-row reference to " +"table \"%s\"." +msgstr "" +"Генерирующее выражение столбца \"%s\" ссылается на тип всей строки в таблице " +"\"%s\"." + +#: commands/tablecmds.c:2546 parser/parse_utilcmd.c:1320 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "Ограничение \"%s\" ссылается на тип всей строки в таблице \"%s\"." -#: commands/tablecmds.c:2525 +#: commands/tablecmds.c:2625 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "слияние столбца \"%s\" с наследованным определением" -#: commands/tablecmds.c:2529 +#: commands/tablecmds.c:2629 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "перемещение и слияние столбца \"%s\" с наследуемым определением" -#: commands/tablecmds.c:2530 +#: commands/tablecmds.c:2630 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "" "Определённый пользователем столбец перемещён в позицию наследуемого столбца." -#: commands/tablecmds.c:2537 +#: commands/tablecmds.c:2637 #, c-format msgid "column \"%s\" has a type conflict" msgstr "конфликт типов в столбце \"%s\"" -#: commands/tablecmds.c:2549 +#: commands/tablecmds.c:2649 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "конфликт правил сортировки в столбце \"%s\"" -#: commands/tablecmds.c:2567 +#: commands/tablecmds.c:2667 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "конфликт параметров хранения в столбце \"%s\"" -#: commands/tablecmds.c:2670 +#: commands/tablecmds.c:2695 +#, c-format +msgid "child column \"%s\" specifies generation expression" +msgstr "для дочернего столбца \"%s\" указано генерирующее выражение" + +#: commands/tablecmds.c:2697 +#, c-format +msgid "" +"Omit the generation expression in the definition of the child table column " +"to inherit the generation expression from the parent table." +msgstr "" +"Уберите генерирующее выражение из определения столбца в дочерней таблице, " +"чтобы это выражение наследовалось из родительской." + +#: commands/tablecmds.c:2701 +#, c-format +msgid "column \"%s\" inherits from generated column but specifies default" +msgstr "" +"столбец \"%s\" наследуется от генерируемого столбца, но для него задано " +"значение по умолчанию" + +#: commands/tablecmds.c:2706 +#, c-format +msgid "column \"%s\" inherits from generated column but specifies identity" +msgstr "" +"столбец \"%s\" наследуется от генерируемого столбца, но для него задано " +"свойство идентификации" + +#: commands/tablecmds.c:2815 +#, c-format +msgid "column \"%s\" inherits conflicting generation expressions" +msgstr "столбец \"%s\" наследует конфликтующие генерирующие выражения" + +#: commands/tablecmds.c:2820 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "столбец \"%s\" наследует конфликтующие значения по умолчанию" -#: commands/tablecmds.c:2672 +#: commands/tablecmds.c:2822 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Для решения конфликта укажите желаемое значение по умолчанию." -#: commands/tablecmds.c:2717 +#: commands/tablecmds.c:2868 #, c-format msgid "" "check constraint name \"%s\" appears multiple times but with different " @@ -9804,12 +10077,12 @@ msgstr "" "имя ограничения-проверки \"%s\" фигурирует несколько раз, но с разными " "выражениями" -#: commands/tablecmds.c:2894 +#: commands/tablecmds.c:3045 #, c-format msgid "cannot rename column of typed table" msgstr "переименовать столбец типизированной таблицы нельзя" -#: commands/tablecmds.c:2913 +#: commands/tablecmds.c:3064 #, c-format msgid "" "\"%s\" is not a table, view, materialized view, composite type, index, or " @@ -9818,37 +10091,37 @@ msgstr "" "\"%s\" - это не таблица, представление, материализованное представление, " "составной тип, индекс или сторонняя таблица" -#: commands/tablecmds.c:3007 +#: commands/tablecmds.c:3158 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "" "наследованный столбец \"%s\" должен быть также переименован в дочерних " "таблицах" -#: commands/tablecmds.c:3039 +#: commands/tablecmds.c:3190 #, c-format msgid "cannot rename system column \"%s\"" msgstr "нельзя переименовать системный столбец \"%s\"" -#: commands/tablecmds.c:3054 +#: commands/tablecmds.c:3205 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "нельзя переименовать наследованный столбец \"%s\"" -#: commands/tablecmds.c:3206 +#: commands/tablecmds.c:3357 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "" "наследуемое ограничение \"%s\" должно быть также переименовано в дочерних " "таблицах" -#: commands/tablecmds.c:3213 +#: commands/tablecmds.c:3364 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "нельзя переименовать наследованное ограничение \"%s\"" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3446 +#: commands/tablecmds.c:3597 #, c-format msgid "" "cannot %s \"%s\" because it is being used by active queries in this session" @@ -9857,115 +10130,120 @@ msgstr "" "запросами в данном сеансе" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3455 +#: commands/tablecmds.c:3606 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "" "нельзя выполнить %s \"%s\", так как с этим объектом связаны отложенные " "события триггеров" -#: commands/tablecmds.c:4588 +#: commands/tablecmds.c:4237 commands/tablecmds.c:4252 +#, c-format +msgid "cannot change persistence setting twice" +msgstr "изменить характеристику хранения дважды нельзя" + +#: commands/tablecmds.c:4971 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "перезаписать системное отношение \"%s\" нельзя" -#: commands/tablecmds.c:4594 +#: commands/tablecmds.c:4977 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "перезаписать таблицу \"%s\", используемую как таблицу каталога, нельзя" -#: commands/tablecmds.c:4604 +#: commands/tablecmds.c:4987 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "перезаписывать временные таблицы других сеансов нельзя" -#: commands/tablecmds.c:4883 +#: commands/tablecmds.c:5276 #, c-format msgid "rewriting table \"%s\"" msgstr "перезапись таблицы \"%s\"" -#: commands/tablecmds.c:4887 +#: commands/tablecmds.c:5280 #, c-format msgid "verifying table \"%s\"" msgstr "проверка таблицы \"%s\"" -#: commands/tablecmds.c:5052 +#: commands/tablecmds.c:5445 #, c-format -msgid "column \"%s\" contains null values" -msgstr "столбец \"%s\" содержит значения NULL" +msgid "column \"%s\" of relation \"%s\" contains null values" +msgstr "столбец \"%s\" отношения \"%s\" содержит значения NULL" -#: commands/tablecmds.c:5068 commands/tablecmds.c:9772 +#: commands/tablecmds.c:5462 #, c-format -msgid "check constraint \"%s\" is violated by some row" -msgstr "ограничение-проверку \"%s\" нарушает некоторая строка" +msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" +msgstr "ограничение-проверку \"%s\" отношения \"%s\" нарушает некоторая строка" -#: commands/tablecmds.c:5086 +#: commands/tablecmds.c:5481 partitioning/partbounds.c:3225 #, c-format msgid "" -"updated partition constraint for default partition would be violated by some " -"row" +"updated partition constraint for default partition \"%s\" would be violated " +"by some row" msgstr "" -"изменённое ограничение секции для секции по умолчанию будет нарушено " +"изменённое ограничение секции для секции по умолчанию \"%s\" будет нарушено " "некоторыми строками" -#: commands/tablecmds.c:5090 +#: commands/tablecmds.c:5487 #, c-format -msgid "partition constraint is violated by some row" -msgstr "ограничение секции нарушает некоторая строка" +msgid "partition constraint of relation \"%s\" is violated by some row" +msgstr "ограничение секции отношения \"%s\" нарушает некоторая строка" -#: commands/tablecmds.c:5235 commands/trigger.c:1538 commands/trigger.c:1644 +#: commands/tablecmds.c:5634 commands/trigger.c:1200 commands/trigger.c:1306 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "\"%s\" - это не таблица, представление и не сторонняя таблица" -#: commands/tablecmds.c:5238 +#: commands/tablecmds.c:5637 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "" "\"%s\" - это не таблица, представление, материализованное представление или " "индекс" -#: commands/tablecmds.c:5244 +#: commands/tablecmds.c:5643 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "\"%s\" - это не таблица, материализованное представление или индекс" -#: commands/tablecmds.c:5247 +#: commands/tablecmds.c:5646 #, c-format msgid "\"%s\" is not a table, materialized view, or foreign table" msgstr "" "\"%s\" - это не таблица, материализованное представление или сторонняя " "таблица" -#: commands/tablecmds.c:5250 +#: commands/tablecmds.c:5649 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "\"%s\" - это не таблица и не сторонняя таблица" -#: commands/tablecmds.c:5253 +#: commands/tablecmds.c:5652 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "\"%s\" - это не таблица, составной тип или сторонняя таблица" -#: commands/tablecmds.c:5256 commands/tablecmds.c:6763 +#: commands/tablecmds.c:5655 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "" "\"%s\" - это не таблица, материализованное представление, индекс или " "сторонняя таблица" -#: commands/tablecmds.c:5266 +#: commands/tablecmds.c:5665 #, c-format msgid "\"%s\" is of the wrong type" msgstr "неправильный тип \"%s\"" -#: commands/tablecmds.c:5472 commands/tablecmds.c:5479 +#: commands/tablecmds.c:5868 commands/tablecmds.c:5875 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "" "изменить тип \"%s\" нельзя, так как он задействован в столбце \"%s.%s\"" -#: commands/tablecmds.c:5486 +#: commands/tablecmds.c:5882 #, c-format msgid "" "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" @@ -9973,77 +10251,77 @@ msgstr "" "изменить стороннюю таблицу \"%s\" нельзя, так как столбец \"%s.%s\" " "задействует тип её строки" -#: commands/tablecmds.c:5493 +#: commands/tablecmds.c:5889 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "" "изменить таблицу \"%s\" нельзя, так как столбец \"%s.%s\" задействует тип её " "строки" -#: commands/tablecmds.c:5549 +#: commands/tablecmds.c:5945 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "изменить тип \"%s\", так как это тип типизированной таблицы" -#: commands/tablecmds.c:5551 +#: commands/tablecmds.c:5947 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "" "Чтобы изменить также типизированные таблицы, выполните ALTER ... CASCADE." -#: commands/tablecmds.c:5597 +#: commands/tablecmds.c:5993 #, c-format msgid "type %s is not a composite type" msgstr "тип %s не является составным" -#: commands/tablecmds.c:5623 +#: commands/tablecmds.c:6020 #, c-format msgid "cannot add column to typed table" msgstr "добавить столбец в типизированную таблицу нельзя" -#: commands/tablecmds.c:5667 +#: commands/tablecmds.c:6071 #, c-format msgid "cannot add column to a partition" msgstr "добавить столбец в секцию нельзя" -#: commands/tablecmds.c:5696 commands/tablecmds.c:13142 +#: commands/tablecmds.c:6100 commands/tablecmds.c:13891 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "дочерняя таблица \"%s\" имеет другой тип для столбца \"%s\"" -#: commands/tablecmds.c:5702 commands/tablecmds.c:13149 +#: commands/tablecmds.c:6106 commands/tablecmds.c:13898 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "" "дочерняя таблица \"%s\" имеет другое правило сортировки для столбца \"%s\"" -#: commands/tablecmds.c:5716 +#: commands/tablecmds.c:6120 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "объединение определений столбца \"%s\" для потомка \"%s\"" -#: commands/tablecmds.c:5740 +#: commands/tablecmds.c:6163 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "" "добавить столбец идентификации в таблицу, у которой есть дочерние, нельзя" -#: commands/tablecmds.c:5975 +#: commands/tablecmds.c:6400 #, c-format msgid "column must be added to child tables too" msgstr "столбец также должен быть добавлен к дочерним таблицам" -#: commands/tablecmds.c:6050 +#: commands/tablecmds.c:6478 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "столбец \"%s\" отношения \"%s\" уже существует, пропускается" -#: commands/tablecmds.c:6057 +#: commands/tablecmds.c:6485 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "столбец \"%s\" отношения \"%s\" уже существует" -#: commands/tablecmds.c:6123 commands/tablecmds.c:10215 +#: commands/tablecmds.c:6551 commands/tablecmds.c:10844 #, c-format msgid "" "cannot remove constraint from only the partitioned table when partitions " @@ -10052,67 +10330,73 @@ msgstr "" "удалить ограничение только из секционированной таблицы, когда существуют " "секции, нельзя" -#: commands/tablecmds.c:6124 commands/tablecmds.c:6393 -#: commands/tablecmds.c:7176 commands/tablecmds.c:10216 +#: commands/tablecmds.c:6552 commands/tablecmds.c:6856 +#: commands/tablecmds.c:7852 commands/tablecmds.c:10845 #, c-format msgid "Do not specify the ONLY keyword." msgstr "Не указывайте ключевое слово ONLY." -#: commands/tablecmds.c:6161 commands/tablecmds.c:6319 -#: commands/tablecmds.c:6461 commands/tablecmds.c:6544 -#: commands/tablecmds.c:6638 commands/tablecmds.c:6697 -#: commands/tablecmds.c:6847 commands/tablecmds.c:6917 -#: commands/tablecmds.c:7009 commands/tablecmds.c:10355 -#: commands/tablecmds.c:11683 +#: commands/tablecmds.c:6589 commands/tablecmds.c:6782 +#: commands/tablecmds.c:6924 commands/tablecmds.c:7038 +#: commands/tablecmds.c:7132 commands/tablecmds.c:7191 +#: commands/tablecmds.c:7309 commands/tablecmds.c:7475 +#: commands/tablecmds.c:7545 commands/tablecmds.c:7638 +#: commands/tablecmds.c:10999 commands/tablecmds.c:12424 #, c-format msgid "cannot alter system column \"%s\"" msgstr "системный столбец \"%s\" нельзя изменить" -#: commands/tablecmds.c:6167 commands/tablecmds.c:6467 +#: commands/tablecmds.c:6595 commands/tablecmds.c:6930 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "столбец \"%s\" отношения \"%s\" является столбцом идентификации" -#: commands/tablecmds.c:6203 +#: commands/tablecmds.c:6631 #, c-format msgid "column \"%s\" is in a primary key" msgstr "столбец \"%s\" входит в первичный ключ" -#: commands/tablecmds.c:6225 +#: commands/tablecmds.c:6653 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "столбец \"%s\" в родительской таблице помечен как NOT NULL" -#: commands/tablecmds.c:6390 commands/tablecmds.c:7630 +#: commands/tablecmds.c:6853 commands/tablecmds.c:8311 #, c-format msgid "constraint must be added to child tables too" msgstr "ограничение также должно быть добавлено к дочерним таблицам" -#: commands/tablecmds.c:6391 +#: commands/tablecmds.c:6854 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "Столбец \"%s\" отношения \"%s\" уже имеет свойство NOT NULL." -#: commands/tablecmds.c:6426 +#: commands/tablecmds.c:6889 #, c-format msgid "" -"existing constraints on column \"%s\".\"%s\" are sufficient to prove that it " +"existing constraints on column \"%s.%s\" are sufficient to prove that it " "does not contain nulls" msgstr "" -"существующие ограничения для столбца \"%s\".\"%s\" гарантируют, что он не " +"существующие ограничения для столбца \"%s.%s\" гарантируют, что он не " "содержит NULL" -#: commands/tablecmds.c:6469 +#: commands/tablecmds.c:6932 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Вместо этого выполните ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY." -#: commands/tablecmds.c:6474 +#: commands/tablecmds.c:6937 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "столбец \"%s\" отношения \"%s\" является генерируемым" -#: commands/tablecmds.c:6555 +#: commands/tablecmds.c:6940 +#, c-format +msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." +msgstr "" +"Вместо этого выполните ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION." + +#: commands/tablecmds.c:7049 #, c-format msgid "" "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity " @@ -10121,95 +10405,110 @@ msgstr "" "столбец \"%s\" отношения \"%s\" должен быть объявлен как NOT NULL, чтобы его " "можно было сделать столбцом идентификации" -#: commands/tablecmds.c:6561 +#: commands/tablecmds.c:7055 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "столбец \"%s\" отношения \"%s\" уже является столбцом идентификации" -#: commands/tablecmds.c:6567 +#: commands/tablecmds.c:7061 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "столбец \"%s\" отношения \"%s\" уже имеет значение по умолчанию" -#: commands/tablecmds.c:6644 commands/tablecmds.c:6705 +#: commands/tablecmds.c:7138 commands/tablecmds.c:7199 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "столбец \"%s\" отношения \"%s\" не является столбцом идентификации" -#: commands/tablecmds.c:6710 +#: commands/tablecmds.c:7204 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "" "столбец \"%s\" отношения \"%s\" не является столбцом идентификации, " "пропускается" -#: commands/tablecmds.c:6775 +#: commands/tablecmds.c:7257 #, c-format -msgid "cannot refer to non-index column by number" -msgstr "по номеру можно ссылаться только на столбец в индексе" +msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" +msgstr "" +"ALTER TABLE / DROP EXPRESSION нужно применять также к дочерним таблицам" -#: commands/tablecmds.c:6806 +#: commands/tablecmds.c:7279 #, c-format -msgid "statistics target %d is too low" -msgstr "ориентир статистики слишком мал (%d)" +msgid "cannot drop generation expression from inherited column" +msgstr "нельзя удалить генерирующее выражение из наследуемого столбца" -#: commands/tablecmds.c:6814 +#: commands/tablecmds.c:7317 #, c-format -msgid "lowering statistics target to %d" -msgstr "ориентир статистики снижается до %d" +msgid "column \"%s\" of relation \"%s\" is not a stored generated column" +msgstr "" +"столбец \"%s\" отношения \"%s\" не является сохранённым генерируемым столбцом" -#: commands/tablecmds.c:6837 +#: commands/tablecmds.c:7322 +#, c-format +msgid "" +"column \"%s\" of relation \"%s\" is not a stored generated column, skipping" +msgstr "" +"столбец \"%s\" отношения \"%s\" пропускается, так как не является " +"сохранённым генерируемым столбцом" + +#: commands/tablecmds.c:7422 +#, c-format +msgid "cannot refer to non-index column by number" +msgstr "по номеру можно ссылаться только на столбец в индексе" + +#: commands/tablecmds.c:7465 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "столбец с номером %d отношения \"%s\" не существует" -#: commands/tablecmds.c:6856 +#: commands/tablecmds.c:7484 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "изменить статистику включённого столбца \"%s\" индекса \"%s\" нельзя" -#: commands/tablecmds.c:6861 +#: commands/tablecmds.c:7489 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "" "изменить статистику столбца \"%s\" (не выражения) индекса \"%s\" нельзя" -#: commands/tablecmds.c:6863 +#: commands/tablecmds.c:7491 #, c-format msgid "Alter statistics on table column instead." msgstr "Вместо этого измените статистику для столбца в таблице." -#: commands/tablecmds.c:6989 +#: commands/tablecmds.c:7618 #, c-format msgid "invalid storage type \"%s\"" msgstr "неверный тип хранилища \"%s\"" -#: commands/tablecmds.c:7021 +#: commands/tablecmds.c:7650 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "тип данных столбца %s совместим только с хранилищем PLAIN" -#: commands/tablecmds.c:7056 +#: commands/tablecmds.c:7732 #, c-format msgid "cannot drop column from typed table" msgstr "нельзя удалить столбец в типизированной таблице" -#: commands/tablecmds.c:7115 +#: commands/tablecmds.c:7791 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "столбец \"%s\" в таблице\"%s\" не существует, пропускается" -#: commands/tablecmds.c:7128 +#: commands/tablecmds.c:7804 #, c-format msgid "cannot drop system column \"%s\"" msgstr "нельзя удалить системный столбец \"%s\"" -#: commands/tablecmds.c:7138 +#: commands/tablecmds.c:7814 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "нельзя удалить наследованный столбец \"%s\"" -#: commands/tablecmds.c:7151 +#: commands/tablecmds.c:7827 #, c-format msgid "" "cannot drop column \"%s\" because it is part of the partition key of " @@ -10218,7 +10517,7 @@ msgstr "" "удалить столбец \"%s\" нельзя, так как он входит в ключ разбиения отношения " "\"%s\"" -#: commands/tablecmds.c:7175 +#: commands/tablecmds.c:7851 #, c-format msgid "" "cannot drop column from only the partitioned table when partitions exist" @@ -10226,7 +10525,7 @@ msgstr "" "удалить столбец только из секционированной таблицы, когда существуют секции, " "нельзя" -#: commands/tablecmds.c:7351 +#: commands/tablecmds.c:8032 #, c-format msgid "" "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned " @@ -10235,14 +10534,14 @@ msgstr "" "ALTER TABLE / ADD CONSTRAINT USING INDEX не поддерживается с " "секционированными таблицами" -#: commands/tablecmds.c:7376 +#: commands/tablecmds.c:8057 #, c-format msgid "" "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "" "ALTER TABLE / ADD CONSTRAINT USING INDEX переименует индекс \"%s\" в \"%s\"" -#: commands/tablecmds.c:7710 +#: commands/tablecmds.c:8391 #, c-format msgid "" "cannot use ONLY for foreign key on partitioned table \"%s\" referencing " @@ -10251,7 +10550,7 @@ msgstr "" "нельзя использовать ONLY для стороннего ключа в секционированной таблице \"%s" "\", ссылающегося на отношение \"%s\"" -#: commands/tablecmds.c:7716 +#: commands/tablecmds.c:8397 #, c-format msgid "" "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing " @@ -10260,25 +10559,25 @@ msgstr "" "нельзя добавить с характеристикой NOT VALID сторонний ключ в " "секционированной таблице \"%s\", ссылающийся на отношение \"%s\"" -#: commands/tablecmds.c:7719 +#: commands/tablecmds.c:8400 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "" "Эта функциональность с секционированными таблицами пока не поддерживается." -#: commands/tablecmds.c:7726 commands/tablecmds.c:8130 +#: commands/tablecmds.c:8407 commands/tablecmds.c:8812 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "указанный объект \"%s\" не является таблицей" -#: commands/tablecmds.c:7749 +#: commands/tablecmds.c:8430 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "" "ограничения в постоянных таблицах могут ссылаться только на постоянные " "таблицы" -#: commands/tablecmds.c:7756 +#: commands/tablecmds.c:8437 #, c-format msgid "" "constraints on unlogged tables may reference only permanent or unlogged " @@ -10287,13 +10586,13 @@ msgstr "" "ограничения в нежурналируемых таблицах могут ссылаться только на постоянные " "или нежурналируемые таблицы" -#: commands/tablecmds.c:7762 +#: commands/tablecmds.c:8443 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "" "ограничения во временных таблицах могут ссылаться только на временные таблицы" -#: commands/tablecmds.c:7766 +#: commands/tablecmds.c:8447 #, c-format msgid "" "constraints on temporary tables must involve temporary tables of this session" @@ -10301,7 +10600,7 @@ msgstr "" "ограничения во временных таблицах должны ссылаться только на временные " "таблицы текущего сеанса" -#: commands/tablecmds.c:7832 commands/tablecmds.c:7838 +#: commands/tablecmds.c:8513 commands/tablecmds.c:8519 #, c-format msgid "" "invalid %s action for foreign key constraint containing generated column" @@ -10309,39 +10608,39 @@ msgstr "" "некорректное действие %s для ограничения внешнего ключа, содержащего " "генерируемый столбец" -#: commands/tablecmds.c:7854 +#: commands/tablecmds.c:8535 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "число столбцов в источнике и назначении внешнего ключа не совпадает" -#: commands/tablecmds.c:7961 +#: commands/tablecmds.c:8642 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "ограничение внешнего ключа \"%s\" нельзя реализовать" -#: commands/tablecmds.c:7963 +#: commands/tablecmds.c:8644 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Столбцы ключа \"%s\" и \"%s\" имеют несовместимые типы: %s и %s." -#: commands/tablecmds.c:8326 commands/tablecmds.c:8714 -#: parser/parse_utilcmd.c:753 parser/parse_utilcmd.c:882 +#: commands/tablecmds.c:9007 commands/tablecmds.c:9400 +#: parser/parse_utilcmd.c:780 parser/parse_utilcmd.c:909 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "ограничения внешнего ключа для сторонних таблиц не поддерживаются" -#: commands/tablecmds.c:9081 commands/tablecmds.c:9244 -#: commands/tablecmds.c:10172 commands/tablecmds.c:10247 +#: commands/tablecmds.c:9766 commands/tablecmds.c:9929 +#: commands/tablecmds.c:10801 commands/tablecmds.c:10876 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "ограничение \"%s\" в таблице \"%s\" не существует" -#: commands/tablecmds.c:9088 +#: commands/tablecmds.c:9773 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "ограничение \"%s\" в таблице \"%s\" не является внешним ключом" -#: commands/tablecmds.c:9252 +#: commands/tablecmds.c:9937 #, c-format msgid "" "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" @@ -10349,46 +10648,46 @@ msgstr "" "ограничение \"%s\" в таблице \"%s\" не является внешним ключом или " "ограничением-проверкой" -#: commands/tablecmds.c:9322 +#: commands/tablecmds.c:10015 #, c-format msgid "constraint must be validated on child tables too" msgstr "ограничение также должно соблюдаться в дочерних таблицах" -#: commands/tablecmds.c:9388 +#: commands/tablecmds.c:10099 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "столбец \"%s\", указанный в ограничении внешнего ключа, не существует" -#: commands/tablecmds.c:9393 +#: commands/tablecmds.c:10104 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "во внешнем ключе не может быть больше %d столбцов" -#: commands/tablecmds.c:9458 +#: commands/tablecmds.c:10169 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "" "использовать откладываемый первичный ключ в целевой внешней таблице \"%s\" " "нельзя" -#: commands/tablecmds.c:9475 +#: commands/tablecmds.c:10186 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "в целевой внешней таблице \"%s\" нет первичного ключа" -#: commands/tablecmds.c:9540 +#: commands/tablecmds.c:10251 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "в списке столбцов внешнего ключа не должно быть повторений" -#: commands/tablecmds.c:9634 +#: commands/tablecmds.c:10345 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "" "использовать откладываемое ограничение уникальности в целевой внешней " "таблице \"%s\" нельзя" -#: commands/tablecmds.c:9639 +#: commands/tablecmds.c:10350 #, c-format msgid "" "there is no unique constraint matching given keys for referenced table \"%s\"" @@ -10396,32 +10695,32 @@ msgstr "" "в целевой внешней таблице \"%s\" нет ограничения уникальности, " "соответствующего данным ключам" -#: commands/tablecmds.c:9807 +#: commands/tablecmds.c:10438 #, c-format msgid "validating foreign key constraint \"%s\"" msgstr "проверка ограничения внешнего ключа \"%s\"" -#: commands/tablecmds.c:10128 +#: commands/tablecmds.c:10757 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "удалить наследованное ограничение \"%s\" таблицы \"%s\" нельзя" -#: commands/tablecmds.c:10178 +#: commands/tablecmds.c:10807 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "ограничение \"%s\" в таблице \"%s\" не существует, пропускается" -#: commands/tablecmds.c:10339 +#: commands/tablecmds.c:10983 #, c-format msgid "cannot alter column type of typed table" msgstr "изменить тип столбца в типизированной таблице нельзя" -#: commands/tablecmds.c:10366 +#: commands/tablecmds.c:11010 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "изменить наследованный столбец \"%s\" нельзя" -#: commands/tablecmds.c:10375 +#: commands/tablecmds.c:11019 #, c-format msgid "" "cannot alter column \"%s\" because it is part of the partition key of " @@ -10430,7 +10729,7 @@ msgstr "" "изменить столбец \"%s\" нельзя, так как он входит в ключ разбиения отношения " "\"%s\"" -#: commands/tablecmds.c:10425 +#: commands/tablecmds.c:11069 #, c-format msgid "" "result of USING clause for column \"%s\" cannot be cast automatically to " @@ -10438,45 +10737,45 @@ msgid "" msgstr "" "результат USING для столбца \"%s\" нельзя автоматически привести к типу %s" -#: commands/tablecmds.c:10428 +#: commands/tablecmds.c:11072 #, c-format msgid "You might need to add an explicit cast." msgstr "Возможно, необходимо добавить явное приведение." -#: commands/tablecmds.c:10432 +#: commands/tablecmds.c:11076 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "столбец \"%s\" нельзя автоматически привести к типу %s" # skip-rule: double-colons #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:10435 +#: commands/tablecmds.c:11079 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Возможно, необходимо указать \"USING %s::%s\"." -#: commands/tablecmds.c:10535 +#: commands/tablecmds.c:11179 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "изменить наследованный столбец \"%s\" отношения \"%s\" нельзя" -#: commands/tablecmds.c:10564 +#: commands/tablecmds.c:11207 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "Выражение USING ссылается на тип всей строки таблицы." -#: commands/tablecmds.c:10575 +#: commands/tablecmds.c:11218 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "" "тип наследованного столбца \"%s\" должен быть изменён и в дочерних таблицах" -#: commands/tablecmds.c:10700 +#: commands/tablecmds.c:11343 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "нельзя изменить тип столбца \"%s\" дважды" -#: commands/tablecmds.c:10738 +#: commands/tablecmds.c:11381 #, c-format msgid "" "generation expression for column \"%s\" cannot be cast automatically to type " @@ -10485,166 +10784,166 @@ msgstr "" "генерирующее выражение для столбца \"%s\" нельзя автоматически привести к " "типу %s" -#: commands/tablecmds.c:10743 +#: commands/tablecmds.c:11386 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "" "значение по умолчанию для столбца \"%s\" нельзя автоматически привести к " "типу %s" -#: commands/tablecmds.c:10821 +#: commands/tablecmds.c:11464 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "изменить тип столбца, задействованного в генерируемом столбце, нельзя" -#: commands/tablecmds.c:10822 +#: commands/tablecmds.c:11465 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "Столбец \"%s\" используется генерируемым столбцом \"%s\"." -#: commands/tablecmds.c:10843 +#: commands/tablecmds.c:11486 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "" "изменить тип столбца, задействованного в представлении или правиле, нельзя" -#: commands/tablecmds.c:10844 commands/tablecmds.c:10863 -#: commands/tablecmds.c:10881 +#: commands/tablecmds.c:11487 commands/tablecmds.c:11506 +#: commands/tablecmds.c:11524 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s зависит от столбца \"%s\"" -#: commands/tablecmds.c:10862 +#: commands/tablecmds.c:11505 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "изменить тип столбца, задействованного в определении триггера, нельзя" -#: commands/tablecmds.c:10880 +#: commands/tablecmds.c:11523 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "изменить тип столбца, задействованного в определении политики, нельзя" -#: commands/tablecmds.c:11791 commands/tablecmds.c:11803 +#: commands/tablecmds.c:12532 commands/tablecmds.c:12544 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "сменить владельца индекса \"%s\" нельзя" -#: commands/tablecmds.c:11793 commands/tablecmds.c:11805 +#: commands/tablecmds.c:12534 commands/tablecmds.c:12546 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Однако возможно сменить владельца таблицы, содержащей этот индекс." -#: commands/tablecmds.c:11819 +#: commands/tablecmds.c:12560 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "сменить владельца последовательности \"%s\" нельзя" -#: commands/tablecmds.c:11833 commands/tablecmds.c:15030 +#: commands/tablecmds.c:12574 commands/tablecmds.c:15765 #, c-format msgid "Use ALTER TYPE instead." msgstr "Используйте ALTER TYPE." -#: commands/tablecmds.c:11842 +#: commands/tablecmds.c:12583 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "" "\"%s\" - это не таблица, TOAST-таблица, индекс, представление или " "последовательность" -#: commands/tablecmds.c:12182 +#: commands/tablecmds.c:12923 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "в одной инструкции не может быть несколько подкоманд SET TABLESPACE" -#: commands/tablecmds.c:12257 +#: commands/tablecmds.c:13000 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "" "\"%s\" - это не таблица, представление, материализованное представление, " "индекс или TOAST-таблица" -#: commands/tablecmds.c:12290 commands/view.c:504 +#: commands/tablecmds.c:13033 commands/view.c:494 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "" "WITH CHECK OPTION поддерживается только с автообновляемыми представлениями" -#: commands/tablecmds.c:12430 +#: commands/tablecmds.c:13173 #, c-format msgid "cannot move system relation \"%s\"" msgstr "переместить системную таблицу \"%s\" нельзя" -#: commands/tablecmds.c:12446 +#: commands/tablecmds.c:13189 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "перемещать временные таблицы других сеансов нельзя" -#: commands/tablecmds.c:12614 +#: commands/tablecmds.c:13363 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "" "в табличных пространствах есть только таблицы, индексы и материализованные " "представления" -#: commands/tablecmds.c:12626 +#: commands/tablecmds.c:13375 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "перемещать объекты в/из табличного пространства pg_global нельзя" -#: commands/tablecmds.c:12718 +#: commands/tablecmds.c:13467 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "" "обработка прерывается из-за невозможности заблокировать отношение \"%s.%s\"" -#: commands/tablecmds.c:12734 +#: commands/tablecmds.c:13483 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "в табличном пространстве \"%s\" не найдены подходящие отношения" -#: commands/tablecmds.c:12850 +#: commands/tablecmds.c:13599 #, c-format msgid "cannot change inheritance of typed table" msgstr "изменить наследование типизированной таблицы нельзя" -#: commands/tablecmds.c:12855 commands/tablecmds.c:13351 +#: commands/tablecmds.c:13604 commands/tablecmds.c:14100 #, c-format msgid "cannot change inheritance of a partition" msgstr "изменить наследование секции нельзя" -#: commands/tablecmds.c:12860 +#: commands/tablecmds.c:13609 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "изменить наследование секционированной таблицы нельзя" -#: commands/tablecmds.c:12906 +#: commands/tablecmds.c:13655 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "наследование для временного отношения другого сеанса невозможно" -#: commands/tablecmds.c:12919 +#: commands/tablecmds.c:13668 #, c-format msgid "cannot inherit from a partition" msgstr "наследование от секции невозможно" -#: commands/tablecmds.c:12941 commands/tablecmds.c:15678 +#: commands/tablecmds.c:13690 commands/tablecmds.c:16405 #, c-format msgid "circular inheritance not allowed" msgstr "циклическое наследование недопустимо" -#: commands/tablecmds.c:12942 commands/tablecmds.c:15679 +#: commands/tablecmds.c:13691 commands/tablecmds.c:16406 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\" уже является потомком \"%s\"." -#: commands/tablecmds.c:12955 +#: commands/tablecmds.c:13704 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "" "триггер \"%s\" не позволяет таблице \"%s\" стать потомком в иерархии " "наследования" -#: commands/tablecmds.c:12957 +#: commands/tablecmds.c:13706 #, c-format msgid "" "ROW triggers with transition tables are not supported in inheritance " @@ -10653,24 +10952,24 @@ msgstr "" "Триггеры ROW с переходными таблицами не поддерживаются в иерархиях " "наследования." -#: commands/tablecmds.c:13160 +#: commands/tablecmds.c:13909 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "столбец \"%s\" в дочерней таблице должен быть помечен как NOT NULL" -#: commands/tablecmds.c:13187 +#: commands/tablecmds.c:13936 #, c-format msgid "child table is missing column \"%s\"" msgstr "в дочерней таблице не хватает столбца \"%s\"" -#: commands/tablecmds.c:13275 +#: commands/tablecmds.c:14024 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "" "дочерняя таблица \"%s\" содержит другое определение ограничения-проверки \"%s" "\"" -#: commands/tablecmds.c:13283 +#: commands/tablecmds.c:14032 #, c-format msgid "" "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s" @@ -10679,7 +10978,7 @@ msgstr "" "ограничение \"%s\" конфликтует с ненаследуемым ограничением дочерней таблицы " "\"%s\"" -#: commands/tablecmds.c:13294 +#: commands/tablecmds.c:14043 #, c-format msgid "" "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" @@ -10687,81 +10986,81 @@ msgstr "" "ограничение \"%s\" конфликтует с непроверенным (NOT VALID) ограничением " "дочерней таблицы \"%s\"" -#: commands/tablecmds.c:13329 +#: commands/tablecmds.c:14078 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "в дочерней таблице не хватает ограничения \"%s\"" -#: commands/tablecmds.c:13418 +#: commands/tablecmds.c:14167 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "отношение \"%s\" не является секцией отношения \"%s\"" -#: commands/tablecmds.c:13424 +#: commands/tablecmds.c:14173 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "отношение \"%s\" не является предком отношения \"%s\"" -#: commands/tablecmds.c:13652 +#: commands/tablecmds.c:14401 #, c-format msgid "typed tables cannot inherit" msgstr "типизированные таблицы не могут наследоваться" -#: commands/tablecmds.c:13682 +#: commands/tablecmds.c:14431 #, c-format msgid "table is missing column \"%s\"" msgstr "в таблице не хватает столбца \"%s\"" -#: commands/tablecmds.c:13693 +#: commands/tablecmds.c:14442 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "таблица содержит столбец \"%s\", тогда как тип требует \"%s\"" -#: commands/tablecmds.c:13702 +#: commands/tablecmds.c:14451 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "таблица \"%s\" содержит столбец \"%s\" другого типа" -#: commands/tablecmds.c:13716 +#: commands/tablecmds.c:14465 #, c-format msgid "table has extra column \"%s\"" msgstr "таблица содержит лишний столбец \"%s\"" -#: commands/tablecmds.c:13768 +#: commands/tablecmds.c:14517 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\" - это не типизированная таблица" -#: commands/tablecmds.c:13950 +#: commands/tablecmds.c:14699 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "" "для идентификации реплики нельзя использовать неуникальный индекс \"%s\"" -#: commands/tablecmds.c:13956 +#: commands/tablecmds.c:14705 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "" "для идентификации реплики нельзя использовать не непосредственный индекс \"%s" "\"" -#: commands/tablecmds.c:13962 +#: commands/tablecmds.c:14711 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "" "для идентификации реплики нельзя использовать индекс с выражением \"%s\"" -#: commands/tablecmds.c:13968 +#: commands/tablecmds.c:14717 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "для идентификации реплики нельзя использовать частичный индекс \"%s\"" -#: commands/tablecmds.c:13974 +#: commands/tablecmds.c:14723 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "для идентификации реплики нельзя использовать нерабочий индекс \"%s\"" -#: commands/tablecmds.c:13991 +#: commands/tablecmds.c:14740 #, c-format msgid "" "index \"%s\" cannot be used as replica identity because column %d is a " @@ -10770,7 +11069,7 @@ msgstr "" "индекс \"%s\" нельзя использовать для идентификации реплики, так как столбец " "%d - системный" -#: commands/tablecmds.c:13998 +#: commands/tablecmds.c:14747 #, c-format msgid "" "index \"%s\" cannot be used as replica identity because column \"%s\" is " @@ -10779,13 +11078,13 @@ msgstr "" "индекс \"%s\" нельзя использовать для идентификации реплики, так как столбец " "\"%s\" допускает NULL" -#: commands/tablecmds.c:14191 +#: commands/tablecmds.c:14940 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "" "изменить состояние журналирования таблицы %s нельзя, так как она временная" -#: commands/tablecmds.c:14215 +#: commands/tablecmds.c:14964 #, c-format msgid "" "cannot change table \"%s\" to unlogged because it is part of a publication" @@ -10793,12 +11092,12 @@ msgstr "" "таблицу \"%s\" нельзя сделать нежурналируемой, так как она включена в " "публикацию" -#: commands/tablecmds.c:14217 +#: commands/tablecmds.c:14966 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Нежурналируемые отношения не поддерживают репликацию." -#: commands/tablecmds.c:14262 +#: commands/tablecmds.c:15011 #, c-format msgid "" "could not change table \"%s\" to logged because it references unlogged table " @@ -10807,7 +11106,7 @@ msgstr "" "не удалось сделать таблицу \"%s\" журналируемой, так как она ссылается на " "нежурналируемую таблицу \"%s\"" -#: commands/tablecmds.c:14272 +#: commands/tablecmds.c:15021 #, c-format msgid "" "could not change table \"%s\" to unlogged because it references logged table " @@ -10816,22 +11115,22 @@ msgstr "" "не удалось сделать таблицу \"%s\" нежурналируемой, так как она ссылается на " "журналируемую таблицу \"%s\"" -#: commands/tablecmds.c:14330 +#: commands/tablecmds.c:15079 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "переместить последовательность с владельцем в другую схему нельзя" -#: commands/tablecmds.c:14436 +#: commands/tablecmds.c:15185 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "отношение \"%s\" уже существует в схеме \"%s\"" -#: commands/tablecmds.c:15013 +#: commands/tablecmds.c:15748 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\" - это не составной тип" -#: commands/tablecmds.c:15045 +#: commands/tablecmds.c:15780 #, c-format msgid "" "\"%s\" is not a table, view, materialized view, sequence, or foreign table" @@ -10839,68 +11138,62 @@ msgstr "" "\"%s\" - это не таблица, представление, мат. представление, " "последовательность или сторонняя таблица" -#: commands/tablecmds.c:15080 +#: commands/tablecmds.c:15815 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "нераспознанная стратегия секционирования \"%s\"" -#: commands/tablecmds.c:15088 +#: commands/tablecmds.c:15823 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "стратегия секционирования по списку не поддерживает несколько столбцов" -#: commands/tablecmds.c:15154 +#: commands/tablecmds.c:15889 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "столбец \"%s\", упомянутый в ключе секционирования, не существует" -#: commands/tablecmds.c:15162 +#: commands/tablecmds.c:15897 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "системный столбец \"%s\" нельзя использовать в ключе секционирования" -#: commands/tablecmds.c:15173 commands/tablecmds.c:15290 +#: commands/tablecmds.c:15908 commands/tablecmds.c:16022 #, c-format msgid "cannot use generated column in partition key" msgstr "генерируемый столбец нельзя использовать в ключе секционирования" -#: commands/tablecmds.c:15174 commands/tablecmds.c:15291 commands/trigger.c:659 -#: rewrite/rewriteHandler.c:827 rewrite/rewriteHandler.c:844 +#: commands/tablecmds.c:15909 commands/tablecmds.c:16023 commands/trigger.c:641 +#: rewrite/rewriteHandler.c:830 rewrite/rewriteHandler.c:847 #, c-format msgid "Column \"%s\" is a generated column." msgstr "Столбец \"%s\" является генерируемым." -#: commands/tablecmds.c:15250 +#: commands/tablecmds.c:15985 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "" "функции в выражении ключа секционирования должны быть помечены как IMMUTABLE" -#: commands/tablecmds.c:15267 -#, c-format -msgid "partition key expressions cannot contain whole-row references" -msgstr "" -"выражения ключей секционирования не могут содержать ссылки на кортеж целиком" - -#: commands/tablecmds.c:15274 +#: commands/tablecmds.c:16005 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "" "выражения ключей секционирования не могут содержать ссылки на системный " "столбец" -#: commands/tablecmds.c:15303 +#: commands/tablecmds.c:16035 #, c-format msgid "cannot use constant expression as partition key" msgstr "" "в качестве ключа секционирования нельзя использовать константное выражение" -#: commands/tablecmds.c:15324 +#: commands/tablecmds.c:16056 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "не удалось определить правило сортировки для выражения секционирования" -#: commands/tablecmds.c:15359 +#: commands/tablecmds.c:16091 #, c-format msgid "" "You must specify a hash operator class or define a default hash operator " @@ -10909,7 +11202,7 @@ msgstr "" "Вы должны указать класс операторов хеширования или определить класс " "операторов хеширования по умолчанию для этого типа данных." -#: commands/tablecmds.c:15365 +#: commands/tablecmds.c:16097 #, c-format msgid "" "You must specify a btree operator class or define a default btree operator " @@ -10918,7 +11211,7 @@ msgstr "" "Вы должны указать класс операторов B-дерева или определить класс операторов " "B-дерева по умолчанию для этого типа данных." -#: commands/tablecmds.c:15510 +#: commands/tablecmds.c:16242 #, c-format msgid "" "partition constraint for table \"%s\" is implied by existing constraints" @@ -10926,8 +11219,8 @@ msgstr "" "ограничение секции для таблицы \"%s\" подразумевается существующими " "ограничениями" -#: commands/tablecmds.c:15514 partitioning/partbounds.c:1256 -#: partitioning/partbounds.c:1307 +#: commands/tablecmds.c:16246 partitioning/partbounds.c:3119 +#: partitioning/partbounds.c:3170 #, c-format msgid "" "updated partition constraint for default partition \"%s\" is implied by " @@ -10936,27 +11229,27 @@ msgstr "" "изменённое ограничение секции для секции по умолчанию \"%s\" подразумевается " "существующими ограничениями" -#: commands/tablecmds.c:15618 +#: commands/tablecmds.c:16345 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\" уже является секцией" -#: commands/tablecmds.c:15624 +#: commands/tablecmds.c:16351 #, c-format msgid "cannot attach a typed table as partition" msgstr "подключить типизированную таблицу в качестве секции нельзя" -#: commands/tablecmds.c:15640 +#: commands/tablecmds.c:16367 #, c-format msgid "cannot attach inheritance child as partition" msgstr "подключить потомок в иерархии наследования в качестве секции нельзя" -#: commands/tablecmds.c:15654 +#: commands/tablecmds.c:16381 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "подключить родитель в иерархии наследования в качестве секции нельзя" -#: commands/tablecmds.c:15688 +#: commands/tablecmds.c:16415 #, c-format msgid "" "cannot attach a temporary relation as partition of permanent relation \"%s\"" @@ -10964,7 +11257,7 @@ msgstr "" "подключить временное отношение в качестве секции постоянного отношения \"%s" "\" нельзя" -#: commands/tablecmds.c:15696 +#: commands/tablecmds.c:16423 #, c-format msgid "" "cannot attach a permanent relation as partition of temporary relation \"%s\"" @@ -10972,75 +11265,75 @@ msgstr "" "подключить постоянное отношение в качестве секции временного отношения \"%s" "\" нельзя" -#: commands/tablecmds.c:15704 +#: commands/tablecmds.c:16431 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "подключить секцию к временному отношению в другом сеансе нельзя" -#: commands/tablecmds.c:15711 +#: commands/tablecmds.c:16438 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "" "подключить временное отношение из другого сеанса в качестве секции нельзя" -#: commands/tablecmds.c:15731 +#: commands/tablecmds.c:16458 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "" "таблица \"%s\" содержит столбец \"%s\", отсутствующий в родителе \"%s\"" -#: commands/tablecmds.c:15734 +#: commands/tablecmds.c:16461 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "" "Новая секция может содержать только столбцы, имеющиеся в родительской " "таблице." -#: commands/tablecmds.c:15746 +#: commands/tablecmds.c:16473 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "триггер \"%s\" не позволяет сделать таблицу \"%s\" секцией" -#: commands/tablecmds.c:15748 commands/trigger.c:465 +#: commands/tablecmds.c:16475 commands/trigger.c:447 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "триггеры ROW с переходными таблицами для секций не поддерживаются" -#: commands/tablecmds.c:15915 +#: commands/tablecmds.c:16638 #, c-format msgid "" "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "" "нельзя присоединить стороннюю таблицу \"%s\" в качестве секции таблицы \"%s\"" -#: commands/tablecmds.c:15918 +#: commands/tablecmds.c:16641 #, c-format msgid "Table \"%s\" contains unique indexes." msgstr "Таблица \"%s\" содержит уникальные индексы." -#: commands/tablecmds.c:16560 commands/tablecmds.c:16579 -#: commands/tablecmds.c:16601 commands/tablecmds.c:16620 -#: commands/tablecmds.c:16662 +#: commands/tablecmds.c:17287 commands/tablecmds.c:17307 +#: commands/tablecmds.c:17327 commands/tablecmds.c:17346 +#: commands/tablecmds.c:17388 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "нельзя присоединить индекс \"%s\" в качестве секции индекса \"%s\"" -#: commands/tablecmds.c:16563 +#: commands/tablecmds.c:17290 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "Индекс \"%s\" уже присоединён к другому индексу." -#: commands/tablecmds.c:16582 +#: commands/tablecmds.c:17310 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "Индекс \"%s\" не является индексом какой-либо секции таблицы \"%s\"." -#: commands/tablecmds.c:16604 +#: commands/tablecmds.c:17330 #, c-format msgid "The index definitions do not match." msgstr "Определения индексов не совпадают." -#: commands/tablecmds.c:16623 +#: commands/tablecmds.c:17349 #, c-format msgid "" "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint " @@ -11049,243 +11342,249 @@ msgstr "" "Индекс \"%s\" принадлежит ограничению в таблице \"%s\", но для индекса \"%s" "\" ограничения нет." -#: commands/tablecmds.c:16665 +#: commands/tablecmds.c:17391 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "К секции \"%s\" уже присоединён другой индекс." -#: commands/tablespace.c:163 commands/tablespace.c:180 -#: commands/tablespace.c:191 commands/tablespace.c:199 -#: commands/tablespace.c:639 replication/slot.c:1198 storage/file/copydir.c:47 +#: commands/tablespace.c:162 commands/tablespace.c:179 +#: commands/tablespace.c:190 commands/tablespace.c:198 +#: commands/tablespace.c:650 replication/slot.c:1373 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "не удалось создать каталог \"%s\": %m" -#: commands/tablespace.c:210 utils/adt/genfile.c:593 +#: commands/tablespace.c:209 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "не удалось получить информацию о каталоге \"%s\": %m" -#: commands/tablespace.c:219 +#: commands/tablespace.c:218 #, c-format msgid "\"%s\" exists but is not a directory" msgstr "\"%s\" существует, но это не каталог" -#: commands/tablespace.c:250 +#: commands/tablespace.c:249 #, c-format msgid "permission denied to create tablespace \"%s\"" msgstr "нет прав на создание табличного пространства \"%s\"" -#: commands/tablespace.c:252 +#: commands/tablespace.c:251 #, c-format msgid "Must be superuser to create a tablespace." msgstr "Для создания табличного пространства нужно быть суперпользователем." -#: commands/tablespace.c:268 +#: commands/tablespace.c:267 #, c-format msgid "tablespace location cannot contain single quotes" msgstr "в пути к табличному пространству не должно быть одинарных кавычек" -#: commands/tablespace.c:278 +#: commands/tablespace.c:277 #, c-format msgid "tablespace location must be an absolute path" msgstr "путь к табличному пространству должен быть абсолютным" -#: commands/tablespace.c:290 +#: commands/tablespace.c:289 #, c-format msgid "tablespace location \"%s\" is too long" msgstr "путь к табличному пространству \"%s\" слишком длинный" -#: commands/tablespace.c:297 +#: commands/tablespace.c:296 #, c-format msgid "tablespace location should not be inside the data directory" msgstr "табличное пространство не должно располагаться внутри каталога данных" -#: commands/tablespace.c:306 commands/tablespace.c:966 +#: commands/tablespace.c:305 commands/tablespace.c:977 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "неприемлемое имя табличного пространства: \"%s\"" -#: commands/tablespace.c:308 commands/tablespace.c:967 +#: commands/tablespace.c:307 commands/tablespace.c:978 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "Префикс \"pg_\" зарезервирован для системных табличных пространств." -#: commands/tablespace.c:327 commands/tablespace.c:988 +#: commands/tablespace.c:326 commands/tablespace.c:999 #, c-format msgid "tablespace \"%s\" already exists" msgstr "табличное пространство \"%s\" уже существует" -#: commands/tablespace.c:443 commands/tablespace.c:949 -#: commands/tablespace.c:1038 commands/tablespace.c:1107 -#: commands/tablespace.c:1251 commands/tablespace.c:1451 +#: commands/tablespace.c:444 commands/tablespace.c:960 +#: commands/tablespace.c:1049 commands/tablespace.c:1118 +#: commands/tablespace.c:1264 commands/tablespace.c:1467 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "табличное пространство \"%s\" не существует" -#: commands/tablespace.c:449 +#: commands/tablespace.c:450 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "табличное пространство \"%s\" не существует, пропускается" -#: commands/tablespace.c:526 +#: commands/tablespace.c:478 +#, c-format +msgid "tablespace \"%s\" cannot be dropped because some objects depend on it" +msgstr "" +"табличное пространство \"%s\" нельзя удалить, так как есть зависящие от него " +"объекты" + +#: commands/tablespace.c:537 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "табличное пространство \"%s\" не пусто" -#: commands/tablespace.c:598 +#: commands/tablespace.c:609 #, c-format msgid "directory \"%s\" does not exist" msgstr "каталог \"%s\" не существует" -#: commands/tablespace.c:599 +#: commands/tablespace.c:610 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "" "Создайте этот каталог для табличного пространства до перезапуска сервера." -#: commands/tablespace.c:604 +#: commands/tablespace.c:615 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "не удалось установить права для каталога \"%s\": %m" -#: commands/tablespace.c:634 +#: commands/tablespace.c:645 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "каталог \"%s\" уже используется как табличное пространство" -#: commands/tablespace.c:758 commands/tablespace.c:771 -#: commands/tablespace.c:807 commands/tablespace.c:899 storage/file/fd.c:2992 -#: storage/file/fd.c:3331 +#: commands/tablespace.c:769 commands/tablespace.c:782 +#: commands/tablespace.c:818 commands/tablespace.c:910 storage/file/fd.c:3108 +#: storage/file/fd.c:3448 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "ошибка при удалении каталога \"%s\": %m" -#: commands/tablespace.c:820 commands/tablespace.c:908 +#: commands/tablespace.c:831 commands/tablespace.c:919 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "ошибка при удалении символической ссылки \"%s\": %m" -#: commands/tablespace.c:830 commands/tablespace.c:917 +#: commands/tablespace.c:841 commands/tablespace.c:928 #, c-format msgid "\"%s\" is not a directory or symbolic link" msgstr "\"%s\" - это не каталог или символическая ссылка" -#: commands/tablespace.c:1112 +#: commands/tablespace.c:1123 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "Табличное пространство \"%s\" не существует." -#: commands/tablespace.c:1550 +#: commands/tablespace.c:1566 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "удалить каталоги табличного пространства %u не удалось" -#: commands/tablespace.c:1552 +#: commands/tablespace.c:1568 #, c-format msgid "You can remove the directories manually if necessary." msgstr "При необходимости вы можете удалить их вручную." -#: commands/trigger.c:210 commands/trigger.c:221 +#: commands/trigger.c:204 commands/trigger.c:215 #, c-format msgid "\"%s\" is a table" msgstr "\"%s\" - это таблица" -#: commands/trigger.c:212 commands/trigger.c:223 +#: commands/trigger.c:206 commands/trigger.c:217 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "У таблиц не может быть триггеров INSTEAD OF." -#: commands/trigger.c:240 +#: commands/trigger.c:238 #, c-format -msgid "Partitioned tables cannot have BEFORE / FOR EACH ROW triggers." -msgstr "" -"В секционированных таблицах не может быть триггеров BEFORE / FOR EACH ROW." +msgid "\"%s\" is a partitioned table" +msgstr "\"%s\" - секционированная таблица" -#: commands/trigger.c:258 +#: commands/trigger.c:240 #, c-format msgid "Triggers on partitioned tables cannot have transition tables." msgstr "" "Триггеры секционированных таблиц не могут использовать переходные таблицы." -#: commands/trigger.c:270 commands/trigger.c:277 commands/trigger.c:447 +#: commands/trigger.c:252 commands/trigger.c:259 commands/trigger.c:429 #, c-format msgid "\"%s\" is a view" msgstr "\"%s\" - это представление" -#: commands/trigger.c:272 +#: commands/trigger.c:254 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "У представлений не может быть строковых триггеров BEFORE/AFTER." -#: commands/trigger.c:279 +#: commands/trigger.c:261 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "У представлений не может быть триггеров TRUNCATE." -#: commands/trigger.c:287 commands/trigger.c:294 commands/trigger.c:306 -#: commands/trigger.c:440 +#: commands/trigger.c:269 commands/trigger.c:276 commands/trigger.c:288 +#: commands/trigger.c:422 #, c-format msgid "\"%s\" is a foreign table" msgstr "\"%s\" - сторонняя таблица" -#: commands/trigger.c:289 +#: commands/trigger.c:271 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "У сторонних таблиц не может быть триггеров INSTEAD OF." -#: commands/trigger.c:296 +#: commands/trigger.c:278 #, c-format msgid "Foreign tables cannot have TRUNCATE triggers." msgstr "У сторонних таблиц не может быть триггеров TRUNCATE." -#: commands/trigger.c:308 +#: commands/trigger.c:290 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "У сторонних таблиц не может быть ограничивающих триггеров." -#: commands/trigger.c:383 +#: commands/trigger.c:365 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "триггеры TRUNCATE FOR EACH ROW не поддерживаются" -#: commands/trigger.c:391 +#: commands/trigger.c:373 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "триггеры INSTEAD OF должны иметь тип FOR EACH ROW" -#: commands/trigger.c:395 +#: commands/trigger.c:377 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "триггеры INSTEAD OF несовместимы с условиями WHEN" -#: commands/trigger.c:399 +#: commands/trigger.c:381 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "для триггеров INSTEAD OF нельзя задать список столбцов" -#: commands/trigger.c:428 +#: commands/trigger.c:410 #, c-format msgid "ROW variable naming in the REFERENCING clause is not supported" msgstr "" "указание переменной типа кортеж в предложении REFERENCING не поддерживается" -#: commands/trigger.c:429 +#: commands/trigger.c:411 #, c-format msgid "Use OLD TABLE or NEW TABLE for naming transition tables." msgstr "Используйте OLD TABLE или NEW TABLE для именования переходных таблиц." -#: commands/trigger.c:442 +#: commands/trigger.c:424 #, c-format msgid "Triggers on foreign tables cannot have transition tables." msgstr "Триггеры сторонних таблиц не могут использовать переходные таблицы." -#: commands/trigger.c:449 +#: commands/trigger.c:431 #, c-format msgid "Triggers on views cannot have transition tables." msgstr "Триггеры представлений не могут использовать переходные таблицы." -#: commands/trigger.c:469 +#: commands/trigger.c:451 #, c-format msgid "" "ROW triggers with transition tables are not supported on inheritance children" @@ -11293,17 +11592,17 @@ msgstr "" "триггеры ROW с переходными таблицами для потомков в иерархии наследования не " "поддерживаются" -#: commands/trigger.c:475 +#: commands/trigger.c:457 #, c-format msgid "transition table name can only be specified for an AFTER trigger" msgstr "имя переходной таблицы можно задать только для триггера AFTER" -#: commands/trigger.c:480 +#: commands/trigger.c:462 #, c-format msgid "TRUNCATE triggers with transition tables are not supported" msgstr "триггеры TRUNCATE с переходными таблицами не поддерживаются" -#: commands/trigger.c:497 +#: commands/trigger.c:479 #, c-format msgid "" "transition tables cannot be specified for triggers with more than one event" @@ -11311,123 +11610,117 @@ msgstr "" "переходные таблицы нельзя задать для триггеров, назначаемых для нескольких " "событий" -#: commands/trigger.c:508 +#: commands/trigger.c:490 #, c-format msgid "transition tables cannot be specified for triggers with column lists" msgstr "переходные таблицы нельзя задать для триггеров со списками столбцов" -#: commands/trigger.c:525 +#: commands/trigger.c:507 #, c-format msgid "NEW TABLE can only be specified for an INSERT or UPDATE trigger" msgstr "NEW TABLE можно задать только для триггеров INSERT или UPDATE" -#: commands/trigger.c:530 +#: commands/trigger.c:512 #, c-format msgid "NEW TABLE cannot be specified multiple times" msgstr "NEW TABLE нельзя задать несколько раз" -#: commands/trigger.c:540 +#: commands/trigger.c:522 #, c-format msgid "OLD TABLE can only be specified for a DELETE or UPDATE trigger" msgstr "OLD TABLE можно задать только для триггеров DELETE или UPDATE" -#: commands/trigger.c:545 +#: commands/trigger.c:527 #, c-format msgid "OLD TABLE cannot be specified multiple times" msgstr "OLD TABLE нельзя задать несколько раз" -#: commands/trigger.c:555 +#: commands/trigger.c:537 #, c-format msgid "OLD TABLE name and NEW TABLE name cannot be the same" msgstr "имя OLD TABLE не должно совпадать с именем NEW TABLE" -#: commands/trigger.c:619 commands/trigger.c:632 +#: commands/trigger.c:601 commands/trigger.c:614 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "" "в условии WHEN для операторного триггера нельзя ссылаться на значения " "столбцов" -#: commands/trigger.c:624 +#: commands/trigger.c:606 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "в условии WHEN для триггера INSERT нельзя ссылаться на значения OLD" -#: commands/trigger.c:637 +#: commands/trigger.c:619 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "в условии WHEN для триггера DELETE нельзя ссылаться на значения NEW" -#: commands/trigger.c:642 +#: commands/trigger.c:624 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "" "в условии WHEN для триггера BEFORE нельзя ссылаться на системные столбцы NEW" -#: commands/trigger.c:650 commands/trigger.c:658 +#: commands/trigger.c:632 commands/trigger.c:640 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW generated columns" msgstr "" "в условии WHEN для триггера BEFORE нельзя ссылаться на генерируемые столбцы " "NEW" -#: commands/trigger.c:651 +#: commands/trigger.c:633 #, c-format msgid "A whole-row reference is used and the table contains generated columns." msgstr "" "Используется ссылка на всю строку таблицы, а таблица содержит генерируемые " "столбцы." -#: commands/trigger.c:833 commands/trigger.c:1723 +#: commands/trigger.c:780 commands/trigger.c:1385 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "триггер \"%s\" для отношения \"%s\" уже существует" -#: commands/trigger.c:1248 -msgid "Found referenced table's UPDATE trigger." -msgstr "Найден триггер UPDATE в главной таблице." - -#: commands/trigger.c:1249 -msgid "Found referenced table's DELETE trigger." -msgstr "Найден триггер DELETE в главной таблице." - -#: commands/trigger.c:1250 -msgid "Found referencing table's trigger." -msgstr "Найден триггер в подчинённой таблице." - -#: commands/trigger.c:1359 commands/trigger.c:1375 -#, c-format -msgid "ignoring incomplete trigger group for constraint \"%s\" %s" -msgstr "неполный набор триггеров для ограничения \"%s\" %s игнорируется" - -#: commands/trigger.c:1388 -#, c-format -msgid "converting trigger group into constraint \"%s\" %s" -msgstr "преобразование набора триггеров в ограничение \"%s\" %s" - -#: commands/trigger.c:1609 commands/trigger.c:1770 commands/trigger.c:1906 +#: commands/trigger.c:1271 commands/trigger.c:1432 commands/trigger.c:1547 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "триггер \"%s\" для таблицы \"%s\" не существует" -#: commands/trigger.c:1853 +#: commands/trigger.c:1515 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "нет доступа: \"%s\" - это системный триггер" -#: commands/trigger.c:2453 +#: commands/trigger.c:2095 #, c-format msgid "trigger function %u returned null value" msgstr "триггерная функция %u вернула значение NULL" -#: commands/trigger.c:2519 commands/trigger.c:2736 commands/trigger.c:2988 -#: commands/trigger.c:3295 +#: commands/trigger.c:2155 commands/trigger.c:2369 commands/trigger.c:2604 +#: commands/trigger.c:2902 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "триггер BEFORE STATEMENT не может возвращать значение" -#: commands/trigger.c:3358 executor/nodeModifyTable.c:1348 -#: executor/nodeModifyTable.c:1417 +#: commands/trigger.c:2229 +#, c-format +msgid "" +"moving row to another partition during a BEFORE FOR EACH ROW trigger is not " +"supported" +msgstr "" +"в триггере BEFORE FOR EACH ROW нельзя перемещать строку в другую секцию" + +#: commands/trigger.c:2230 +#, c-format +msgid "" +"Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." +msgstr "" +"До выполнения триггера \"%s\" строка должна была находиться в секции \"%s.%s" +"\"." + +#: commands/trigger.c:2968 executor/nodeModifyTable.c:1380 +#: executor/nodeModifyTable.c:1449 #, c-format msgid "" "tuple to be updated was already modified by an operation triggered by the " @@ -11436,9 +11729,9 @@ msgstr "" "кортеж, который должен быть изменён, уже модифицирован в операции, вызванной " "текущей командой" -#: commands/trigger.c:3359 executor/nodeModifyTable.c:808 -#: executor/nodeModifyTable.c:882 executor/nodeModifyTable.c:1349 -#: executor/nodeModifyTable.c:1418 +#: commands/trigger.c:2969 executor/nodeModifyTable.c:840 +#: executor/nodeModifyTable.c:914 executor/nodeModifyTable.c:1381 +#: executor/nodeModifyTable.c:1450 #, c-format msgid "" "Consider using an AFTER trigger instead of a BEFORE trigger to propagate " @@ -11447,167 +11740,183 @@ msgstr "" "Возможно, для распространения изменений в другие строки следует использовать " "триггер AFTER вместо BEFORE." -#: commands/trigger.c:3388 executor/nodeLockRows.c:225 +#: commands/trigger.c:2998 executor/nodeLockRows.c:225 #: executor/nodeLockRows.c:234 executor/nodeModifyTable.c:220 -#: executor/nodeModifyTable.c:824 executor/nodeModifyTable.c:1365 -#: executor/nodeModifyTable.c:1581 +#: executor/nodeModifyTable.c:856 executor/nodeModifyTable.c:1397 +#: executor/nodeModifyTable.c:1613 #, c-format msgid "could not serialize access due to concurrent update" msgstr "не удалось сериализовать доступ из-за параллельного изменения" -#: commands/trigger.c:3396 executor/nodeModifyTable.c:914 -#: executor/nodeModifyTable.c:1435 executor/nodeModifyTable.c:1605 +#: commands/trigger.c:3006 executor/nodeModifyTable.c:946 +#: executor/nodeModifyTable.c:1467 executor/nodeModifyTable.c:1637 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "не удалось сериализовать доступ из-за параллельного удаления" -#: commands/trigger.c:5457 +#: commands/trigger.c:4065 +#, c-format +msgid "cannot fire deferred trigger within security-restricted operation" +msgstr "" +"в рамках операции с ограничениями по безопасности нельзя вызвать отложенный " +"триггер" + +#: commands/trigger.c:5078 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "ограничение \"%s\" не является откладываемым" -#: commands/trigger.c:5480 +#: commands/trigger.c:5101 #, c-format msgid "constraint \"%s\" does not exist" msgstr "ограничение \"%s\" не существует" -#: commands/tsearchcmds.c:115 commands/tsearchcmds.c:686 +#: commands/tsearchcmds.c:118 commands/tsearchcmds.c:683 #, c-format msgid "function %s should return type %s" msgstr "функция %s должна возвращать тип %s" -#: commands/tsearchcmds.c:192 +#: commands/tsearchcmds.c:195 #, c-format msgid "must be superuser to create text search parsers" msgstr "" "для создания анализаторов текстового поиска нужно быть суперпользователем" -#: commands/tsearchcmds.c:245 +#: commands/tsearchcmds.c:248 #, c-format msgid "text search parser parameter \"%s\" not recognized" msgstr "параметр анализатора текстового поиска \"%s\" не распознан" -#: commands/tsearchcmds.c:255 +#: commands/tsearchcmds.c:258 #, c-format msgid "text search parser start method is required" msgstr "для анализатора текстового поиска требуется метод start" -#: commands/tsearchcmds.c:260 +#: commands/tsearchcmds.c:263 #, c-format msgid "text search parser gettoken method is required" msgstr "для анализатора текстового поиска требуется метод gettoken" -#: commands/tsearchcmds.c:265 +#: commands/tsearchcmds.c:268 #, c-format msgid "text search parser end method is required" msgstr "для анализатора текстового поиска требуется метод end" -#: commands/tsearchcmds.c:270 +#: commands/tsearchcmds.c:273 #, c-format msgid "text search parser lextypes method is required" msgstr "для анализатора текстового поиска требуется метод lextypes" -#: commands/tsearchcmds.c:387 +#: commands/tsearchcmds.c:390 #, c-format msgid "text search template \"%s\" does not accept options" msgstr "шаблон текстового поиска \"%s\" не принимает параметры" -#: commands/tsearchcmds.c:461 +#: commands/tsearchcmds.c:464 #, c-format msgid "text search template is required" msgstr "требуется шаблон текстового поиска" -#: commands/tsearchcmds.c:753 +#: commands/tsearchcmds.c:750 #, c-format msgid "must be superuser to create text search templates" msgstr "для создания шаблонов текстового поиска нужно быть суперпользователем" -#: commands/tsearchcmds.c:795 +#: commands/tsearchcmds.c:792 #, c-format msgid "text search template parameter \"%s\" not recognized" msgstr "параметр шаблона текстового поиска \"%s\" не распознан" -#: commands/tsearchcmds.c:805 +#: commands/tsearchcmds.c:802 #, c-format msgid "text search template lexize method is required" msgstr "для шаблона текстового поиска требуется метод lexize" -#: commands/tsearchcmds.c:1009 +#: commands/tsearchcmds.c:1006 #, c-format msgid "text search configuration parameter \"%s\" not recognized" msgstr "параметр конфигурации текстового поиска \"%s\" не распознан" -#: commands/tsearchcmds.c:1016 +#: commands/tsearchcmds.c:1013 #, c-format msgid "cannot specify both PARSER and COPY options" msgstr "указать и PARSER, и COPY одновременно нельзя" -#: commands/tsearchcmds.c:1052 +#: commands/tsearchcmds.c:1049 #, c-format msgid "text search parser is required" msgstr "требуется анализатор текстового поиска" -#: commands/tsearchcmds.c:1276 +#: commands/tsearchcmds.c:1273 #, c-format msgid "token type \"%s\" does not exist" msgstr "тип фрагмента \"%s\" не существует" -#: commands/tsearchcmds.c:1503 +#: commands/tsearchcmds.c:1500 #, c-format msgid "mapping for token type \"%s\" does not exist" msgstr "сопоставление для типа фрагмента \"%s\" не существует" -#: commands/tsearchcmds.c:1509 +#: commands/tsearchcmds.c:1506 #, c-format msgid "mapping for token type \"%s\" does not exist, skipping" msgstr "сопоставление для типа фрагмента \"%s\" не существует, пропускается" -#: commands/tsearchcmds.c:1664 commands/tsearchcmds.c:1775 +#: commands/tsearchcmds.c:1669 commands/tsearchcmds.c:1784 #, c-format msgid "invalid parameter list format: \"%s\"" msgstr "неверный формат списка параметров: \"%s\"" -#: commands/typecmds.c:184 +#: commands/typecmds.c:206 #, c-format msgid "must be superuser to create a base type" msgstr "для создания базового типа нужно быть суперпользователем" -#: commands/typecmds.c:291 commands/typecmds.c:1467 +#: commands/typecmds.c:264 +#, c-format +msgid "" +"Create the type as a shell type, then create its I/O functions, then do a " +"full CREATE TYPE." +msgstr "" +"Создайте тип в виде оболочки, затем определите для него функции ввода-вывода " +"и в завершение выполните полноценную команду CREATE TYPE." + +#: commands/typecmds.c:314 commands/typecmds.c:1394 commands/typecmds.c:3832 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "атрибут типа \"%s\" не распознан" -#: commands/typecmds.c:347 +#: commands/typecmds.c:370 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "неверная категория типа \"%s\": допустим только ASCII-символ" -#: commands/typecmds.c:366 +#: commands/typecmds.c:389 #, c-format msgid "array element type cannot be %s" msgstr "типом элемента массива не может быть %s" -#: commands/typecmds.c:398 +#: commands/typecmds.c:421 #, c-format msgid "alignment \"%s\" not recognized" msgstr "тип выравнивания \"%s\" не распознан" -#: commands/typecmds.c:415 +#: commands/typecmds.c:438 commands/typecmds.c:3718 #, c-format msgid "storage \"%s\" not recognized" msgstr "неизвестная стратегия хранения \"%s\"" -#: commands/typecmds.c:426 +#: commands/typecmds.c:449 #, c-format msgid "type input function must be specified" msgstr "необходимо указать функцию ввода типа" -#: commands/typecmds.c:430 +#: commands/typecmds.c:453 #, c-format msgid "type output function must be specified" msgstr "необходимо указать функцию вывода типа" -#: commands/typecmds.c:435 +#: commands/typecmds.c:458 #, c-format msgid "" "type modifier output function is useless without a type modifier input " @@ -11616,151 +11925,167 @@ msgstr "" "функция вывода модификатора типа бесполезна без функции ввода модификатора " "типа" -#: commands/typecmds.c:465 -#, c-format -msgid "type input function %s must return type %s" -msgstr "функция ввода типа %s должна возвращать тип %s" - -#: commands/typecmds.c:482 -#, c-format -msgid "type output function %s must return type %s" -msgstr "функция вывода типа %s должна возвращать тип %s" - -#: commands/typecmds.c:491 -#, c-format -msgid "type receive function %s must return type %s" -msgstr "функция получения типа %s должна возвращать тип %s" - -#: commands/typecmds.c:500 -#, c-format -msgid "type send function %s must return type %s" -msgstr "функция отправки типа %s должна возвращать тип %s" - -#: commands/typecmds.c:565 -#, c-format -msgid "type input function %s should not be volatile" -msgstr "функция ввода типа %s не должна быть изменчивой" - -#: commands/typecmds.c:570 -#, c-format -msgid "type output function %s should not be volatile" -msgstr "функция вывода типа %s не должна быть изменчивой" - -#: commands/typecmds.c:575 -#, c-format -msgid "type receive function %s should not be volatile" -msgstr "функция получения типа %s не должна быть изменчивой" - -#: commands/typecmds.c:580 -#, c-format -msgid "type send function %s should not be volatile" -msgstr "функция отправки типа %s не должна быть изменчивой" - -#: commands/typecmds.c:585 -#, c-format -msgid "type modifier input function %s should not be volatile" -msgstr "функция ввода модификатора типа %s не должна быть изменчивой" - -#: commands/typecmds.c:590 -#, c-format -msgid "type modifier output function %s should not be volatile" -msgstr "функция вывода модификатора типа %s не должна быть изменчивой" - -#: commands/typecmds.c:817 +#: commands/typecmds.c:745 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "\"%s\" - неподходящий базовый тип для домена" -#: commands/typecmds.c:903 +#: commands/typecmds.c:837 #, c-format msgid "multiple default expressions" msgstr "неоднократное определение значения типа по умолчанию" -#: commands/typecmds.c:966 commands/typecmds.c:975 +#: commands/typecmds.c:900 commands/typecmds.c:909 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "конфликтующие ограничения NULL/NOT NULL" -#: commands/typecmds.c:991 +#: commands/typecmds.c:925 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "" "ограничения-проверки для доменов не могут иметь характеристики NO INHERIT" -#: commands/typecmds.c:1000 commands/typecmds.c:2582 +#: commands/typecmds.c:934 commands/typecmds.c:2536 #, c-format msgid "unique constraints not possible for domains" msgstr "ограничения уникальности невозможны для доменов" -#: commands/typecmds.c:1006 commands/typecmds.c:2588 +#: commands/typecmds.c:940 commands/typecmds.c:2542 #, c-format msgid "primary key constraints not possible for domains" msgstr "ограничения первичного ключа невозможны для доменов" -#: commands/typecmds.c:1012 commands/typecmds.c:2594 +#: commands/typecmds.c:946 commands/typecmds.c:2548 #, c-format msgid "exclusion constraints not possible for domains" msgstr "ограничения-исключения невозможны для доменов" -#: commands/typecmds.c:1018 commands/typecmds.c:2600 +#: commands/typecmds.c:952 commands/typecmds.c:2554 #, c-format msgid "foreign key constraints not possible for domains" msgstr "ограничения внешних ключей невозможны для доменов" -#: commands/typecmds.c:1027 commands/typecmds.c:2609 +#: commands/typecmds.c:961 commands/typecmds.c:2563 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "" "возможность определения отложенных ограничений для доменов не поддерживается" -#: commands/typecmds.c:1337 utils/cache/typcache.c:2340 +#: commands/typecmds.c:1271 utils/cache/typcache.c:2430 #, c-format msgid "%s is not an enum" msgstr "\"%s\" не является перечислением" -#: commands/typecmds.c:1475 +#: commands/typecmds.c:1402 #, c-format msgid "type attribute \"subtype\" is required" msgstr "требуется атрибут типа \"subtype\"" -#: commands/typecmds.c:1480 +#: commands/typecmds.c:1407 #, c-format msgid "range subtype cannot be %s" msgstr "%s не может быть подтипом диапазона" -#: commands/typecmds.c:1499 +#: commands/typecmds.c:1426 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "" "указано правило сортировки для диапазона, но подтип не поддерживает " "сортировку" -#: commands/typecmds.c:1733 +#: commands/typecmds.c:1436 +#, c-format +msgid "cannot specify a canonical function without a pre-created shell type" +msgstr "" +"функцию получения канонического диапазона нельзя задать без предварительно " +"созданного типа-пустышки" + +#: commands/typecmds.c:1437 +#, c-format +msgid "" +"Create the type as a shell type, then create its canonicalization function, " +"then do a full CREATE TYPE." +msgstr "" +"Создайте тип в виде оболочки, затем определите для него функции приведения к " +"каноническому виду и в завершение выполните полноценную команду CREATE TYPE." + +#: commands/typecmds.c:1648 +#, c-format +msgid "type input function %s has multiple matches" +msgstr "функция ввода типа %s присутствует в нескольких экземплярах" + +#: commands/typecmds.c:1666 +#, c-format +msgid "type input function %s must return type %s" +msgstr "функция ввода типа %s должна возвращать тип %s" + +#: commands/typecmds.c:1682 +#, c-format +msgid "type input function %s should not be volatile" +msgstr "функция ввода типа %s не должна быть изменчивой" + +#: commands/typecmds.c:1710 +#, c-format +msgid "type output function %s must return type %s" +msgstr "функция вывода типа %s должна возвращать тип %s" + +#: commands/typecmds.c:1717 +#, c-format +msgid "type output function %s should not be volatile" +msgstr "функция вывода типа %s не должна быть изменчивой" + +#: commands/typecmds.c:1746 +#, c-format +msgid "type receive function %s has multiple matches" +msgstr "функция получения типа %s присутствует в нескольких экземплярах" + +#: commands/typecmds.c:1764 +#, c-format +msgid "type receive function %s must return type %s" +msgstr "функция получения типа %s должна возвращать тип %s" + +#: commands/typecmds.c:1771 +#, c-format +msgid "type receive function %s should not be volatile" +msgstr "функция получения типа %s не должна быть изменчивой" + +#: commands/typecmds.c:1799 #, c-format -msgid "changing argument type of function %s from \"opaque\" to \"cstring\"" -msgstr "изменение типа аргумента функции %s с \"opaque\" на \"cstring\"" +msgid "type send function %s must return type %s" +msgstr "функция отправки типа %s должна возвращать тип %s" -#: commands/typecmds.c:1784 +#: commands/typecmds.c:1806 #, c-format -msgid "changing argument type of function %s from \"opaque\" to %s" -msgstr "изменение типа аргумента функции %s с \"opaque\" на %s" +msgid "type send function %s should not be volatile" +msgstr "функция отправки типа %s не должна быть изменчивой" -#: commands/typecmds.c:1883 +#: commands/typecmds.c:1833 #, c-format msgid "typmod_in function %s must return type %s" msgstr "функция TYPMOD_IN %s должна возвращать тип %s" -#: commands/typecmds.c:1910 +#: commands/typecmds.c:1840 +#, c-format +msgid "type modifier input function %s should not be volatile" +msgstr "функция ввода модификатора типа %s не должна быть изменчивой" + +#: commands/typecmds.c:1867 #, c-format msgid "typmod_out function %s must return type %s" msgstr "функция TYPMOD_OUT %s должна возвращать тип %s" -#: commands/typecmds.c:1937 +#: commands/typecmds.c:1874 +#, c-format +msgid "type modifier output function %s should not be volatile" +msgstr "функция вывода модификатора типа %s не должна быть изменчивой" + +#: commands/typecmds.c:1901 #, c-format msgid "type analyze function %s must return type %s" msgstr "функция анализа типа %s должна возвращать тип %s" -#: commands/typecmds.c:1983 +#: commands/typecmds.c:1947 #, c-format msgid "" "You must specify an operator class for the range type or define a default " @@ -11769,105 +12094,125 @@ msgstr "" "Вы должны указать класс операторов для типа диапазона или определить класс " "операторов по умолчанию для этого подтипа." -#: commands/typecmds.c:2014 +#: commands/typecmds.c:1978 #, c-format msgid "range canonical function %s must return range type" msgstr "" "функция получения канонического диапазона %s должна возвращать диапазон" -#: commands/typecmds.c:2020 +#: commands/typecmds.c:1984 #, c-format msgid "range canonical function %s must be immutable" msgstr "" "функция получения канонического диапазона %s должна быть постоянной " "(IMMUTABLE)" -#: commands/typecmds.c:2056 +#: commands/typecmds.c:2020 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "функция различий для подтипа диапазона (%s) должна возвращать тип %s" -#: commands/typecmds.c:2063 +#: commands/typecmds.c:2027 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "" "функция различий для подтипа диапазона (%s) должна быть постоянной " "(IMMUTABLE)" -#: commands/typecmds.c:2090 +#: commands/typecmds.c:2054 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "значение OID массива в pg_type не задано в режиме двоичного обновления" -#: commands/typecmds.c:2398 +#: commands/typecmds.c:2352 #, c-format msgid "column \"%s\" of table \"%s\" contains null values" msgstr "столбец \"%s\" таблицы \"%s\" содержит значения NULL" -#: commands/typecmds.c:2511 commands/typecmds.c:2713 +#: commands/typecmds.c:2465 commands/typecmds.c:2667 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "ограничение \"%s\" для домена \"%s\" не существует" -#: commands/typecmds.c:2515 +#: commands/typecmds.c:2469 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "ограничение \"%s\" для домена \"%s\" не существует, пропускается" -#: commands/typecmds.c:2720 +#: commands/typecmds.c:2674 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "" "ограничение \"%s\" для домена \"%s\" не является ограничением-проверкой" -#: commands/typecmds.c:2826 +#: commands/typecmds.c:2780 #, c-format msgid "" "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "" "столбец \"%s\" таблицы \"%s\" содержит значения, нарушающие новое ограничение" -#: commands/typecmds.c:3055 commands/typecmds.c:3253 commands/typecmds.c:3335 -#: commands/typecmds.c:3522 +#: commands/typecmds.c:3009 commands/typecmds.c:3207 commands/typecmds.c:3289 +#: commands/typecmds.c:3476 #, c-format msgid "%s is not a domain" msgstr "\"%s\" - это не домен" -#: commands/typecmds.c:3087 +#: commands/typecmds.c:3041 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "ограничение \"%s\" для домена \"%s\" уже существует" -#: commands/typecmds.c:3138 +#: commands/typecmds.c:3092 #, c-format msgid "cannot use table references in domain check constraint" msgstr "в ограничении-проверке для домена нельзя ссылаться на таблицы" -#: commands/typecmds.c:3265 commands/typecmds.c:3347 commands/typecmds.c:3639 +#: commands/typecmds.c:3219 commands/typecmds.c:3301 commands/typecmds.c:3593 #, c-format msgid "%s is a table's row type" msgstr "%s - это тип строк таблицы" -#: commands/typecmds.c:3267 commands/typecmds.c:3349 commands/typecmds.c:3641 +#: commands/typecmds.c:3221 commands/typecmds.c:3303 commands/typecmds.c:3595 #, c-format msgid "Use ALTER TABLE instead." msgstr "Изменить его можно с помощью ALTER TABLE." -#: commands/typecmds.c:3274 commands/typecmds.c:3356 commands/typecmds.c:3554 +#: commands/typecmds.c:3228 commands/typecmds.c:3310 commands/typecmds.c:3508 #, c-format msgid "cannot alter array type %s" msgstr "изменить тип массива \"%s\" нельзя" -#: commands/typecmds.c:3276 commands/typecmds.c:3358 commands/typecmds.c:3556 +#: commands/typecmds.c:3230 commands/typecmds.c:3312 commands/typecmds.c:3510 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "Однако можно изменить тип %s, что повлечёт изменение типа массива." -#: commands/typecmds.c:3624 +#: commands/typecmds.c:3578 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "тип \"%s\" уже существует в схеме \"%s\"" +#: commands/typecmds.c:3746 +#, c-format +msgid "cannot change type's storage to PLAIN" +msgstr "сменить вариант хранения типа на PLAIN нельзя" + +#: commands/typecmds.c:3827 +#, c-format +msgid "type attribute \"%s\" cannot be changed" +msgstr "у типа нельзя изменить атрибут \"%s\"" + +#: commands/typecmds.c:3845 +#, c-format +msgid "must be superuser to alter a type" +msgstr "для модификации типа нужно быть суперпользователем" + +#: commands/typecmds.c:3866 commands/typecmds.c:3876 +#, c-format +msgid "%s is not a base type" +msgstr "%s — не базовый тип" + #: commands/user.c:140 #, c-format msgid "SYSID can no longer be specified" @@ -11883,7 +12228,7 @@ msgstr "для создания суперпользователей нужно msgid "must be superuser to create replication users" msgstr "для создания пользователей-репликаторов нужно быть суперпользователем" -#: commands/user.c:308 commands/user.c:723 +#: commands/user.c:308 commands/user.c:736 #, c-format msgid "must be superuser to change bypassrls attribute" msgstr "для изменения атрибута bypassrls нужно быть суперпользователем" @@ -11893,23 +12238,23 @@ msgstr "для изменения атрибута bypassrls нужно быть msgid "permission denied to create role" msgstr "нет прав для создания роли" -#: commands/user.c:325 commands/user.c:1213 commands/user.c:1220 -#: utils/adt/acl.c:5342 utils/adt/acl.c:5348 gram.y:14896 gram.y:14934 +#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 +#: utils/adt/acl.c:5330 utils/adt/acl.c:5336 gram.y:15147 gram.y:15185 #, c-format msgid "role name \"%s\" is reserved" msgstr "имя роли \"%s\" зарезервировано" -#: commands/user.c:327 commands/user.c:1215 commands/user.c:1222 +#: commands/user.c:327 commands/user.c:1228 commands/user.c:1235 #, c-format msgid "Role names starting with \"pg_\" are reserved." msgstr "Имена ролей, начинающиеся с \"pg_\", зарезервированы." -#: commands/user.c:348 commands/user.c:1237 +#: commands/user.c:348 commands/user.c:1250 #, c-format msgid "role \"%s\" already exists" msgstr "роль \"%s\" уже существует" -#: commands/user.c:414 commands/user.c:832 +#: commands/user.c:414 commands/user.c:845 #, c-format msgid "empty string is not a valid password, clearing password" msgstr "пустая строка не является допустимым паролем; пароль сбрасывается" @@ -11919,227 +12264,242 @@ msgstr "пустая строка не является допустимым п msgid "pg_authid OID value not set when in binary upgrade mode" msgstr "значение OID в pg_authid не задано в режиме двоичного обновления" -#: commands/user.c:709 commands/user.c:933 commands/user.c:1476 -#: commands/user.c:1620 +#: commands/user.c:722 commands/user.c:946 commands/user.c:1487 +#: commands/user.c:1629 #, c-format msgid "must be superuser to alter superusers" msgstr "для модификации суперпользователей нужно быть суперпользователем" -#: commands/user.c:716 +#: commands/user.c:729 #, c-format msgid "must be superuser to alter replication users" msgstr "" "для модификации пользователей-репликаторов нужно быть суперпользователем" -#: commands/user.c:739 commands/user.c:940 +#: commands/user.c:752 commands/user.c:953 #, c-format msgid "permission denied" msgstr "нет доступа" -#: commands/user.c:970 +#: commands/user.c:983 #, c-format msgid "must be superuser to alter settings globally" msgstr "для глобального изменения параметров нужно быть суперпользователем" -#: commands/user.c:992 +#: commands/user.c:1005 #, c-format msgid "permission denied to drop role" msgstr "нет прав для удаления роли" -#: commands/user.c:1017 +#: commands/user.c:1030 #, c-format msgid "cannot use special role specifier in DROP ROLE" msgstr "использовать специальную роль в DROP ROLE нельзя" -#: commands/user.c:1027 commands/user.c:1184 commands/variable.c:770 -#: commands/variable.c:844 utils/adt/acl.c:5199 utils/adt/acl.c:5246 -#: utils/adt/acl.c:5274 utils/adt/acl.c:5292 utils/init/miscinit.c:607 +#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:770 +#: commands/variable.c:844 utils/adt/acl.c:5187 utils/adt/acl.c:5234 +#: utils/adt/acl.c:5262 utils/adt/acl.c:5280 utils/init/miscinit.c:675 #, c-format msgid "role \"%s\" does not exist" msgstr "роль \"%s\" не существует" -#: commands/user.c:1032 +#: commands/user.c:1045 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "роль \"%s\" не существует, пропускается" -#: commands/user.c:1045 commands/user.c:1049 +#: commands/user.c:1058 commands/user.c:1062 #, c-format msgid "current user cannot be dropped" msgstr "пользователь не может удалить сам себя" -#: commands/user.c:1053 +#: commands/user.c:1066 #, c-format msgid "session user cannot be dropped" msgstr "пользователя текущего сеанса нельзя удалить" -#: commands/user.c:1063 +#: commands/user.c:1076 #, c-format msgid "must be superuser to drop superusers" msgstr "для удаления суперпользователей нужно быть суперпользователем" -#: commands/user.c:1079 +#: commands/user.c:1092 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "роль \"%s\" нельзя удалить, так как есть зависящие от неё объекты" -#: commands/user.c:1200 +#: commands/user.c:1213 #, c-format msgid "session user cannot be renamed" msgstr "пользователя текущего сеанса нельзя переименовать" -#: commands/user.c:1204 +#: commands/user.c:1217 #, c-format msgid "current user cannot be renamed" msgstr "пользователь не может переименовать сам себя" -#: commands/user.c:1247 +#: commands/user.c:1260 #, c-format msgid "must be superuser to rename superusers" msgstr "для переименования суперпользователей нужно быть суперпользователем" -#: commands/user.c:1254 +#: commands/user.c:1267 #, c-format msgid "permission denied to rename role" msgstr "нет прав на переименование роли" -#: commands/user.c:1275 +#: commands/user.c:1288 #, c-format msgid "MD5 password cleared because of role rename" msgstr "в результате переименования роли очищен MD5-хеш пароля" -#: commands/user.c:1335 +#: commands/user.c:1348 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "в GRANT/REVOKE ROLE нельзя включать названия столбцов" -#: commands/user.c:1373 +#: commands/user.c:1386 #, c-format msgid "permission denied to drop objects" msgstr "нет прав на удаление объектов" -#: commands/user.c:1400 commands/user.c:1409 +#: commands/user.c:1413 commands/user.c:1422 #, c-format msgid "permission denied to reassign objects" msgstr "нет прав для переназначения объектов" -#: commands/user.c:1484 commands/user.c:1628 +#: commands/user.c:1495 commands/user.c:1637 #, c-format msgid "must have admin option on role \"%s\"" msgstr "требуется право admin для роли \"%s\"" -#: commands/user.c:1501 +#: commands/user.c:1512 #, c-format msgid "must be superuser to set grantor" msgstr "для назначения права управления правами нужно быть суперпользователем" -#: commands/user.c:1526 +#: commands/user.c:1537 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "роль \"%s\" включена в роль \"%s\"" -#: commands/user.c:1541 +#: commands/user.c:1552 #, c-format msgid "role \"%s\" is already a member of role \"%s\"" msgstr "роль \"%s\" уже включена в роль \"%s\"" -#: commands/user.c:1650 +#: commands/user.c:1659 #, c-format msgid "role \"%s\" is not a member of role \"%s\"" msgstr "роль \"%s\" не включена в роль \"%s\"" -#: commands/vacuum.c:116 +#: commands/vacuum.c:129 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "нераспознанный параметр ANALYZE: \"%s\"" -#: commands/vacuum.c:135 +#: commands/vacuum.c:151 +#, c-format +msgid "parallel option requires a value between 0 and %d" +msgstr "для параметра parallel требуется значение от 0 до %d" + +#: commands/vacuum.c:163 +#, c-format +msgid "parallel vacuum degree must be between 0 and %d" +msgstr "степень параллельности для очистки должна задаваться числом от 0 до %d" + +#: commands/vacuum.c:180 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "нераспознанный параметр VACUUM: \"%s\"" -#: commands/vacuum.c:169 +#: commands/vacuum.c:203 +#, c-format +msgid "VACUUM FULL cannot be performed in parallel" +msgstr "VACUUM FULL нельзя выполнять в параллельном режиме" + +#: commands/vacuum.c:219 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "если задаётся список столбцов, необходимо указать ANALYZE" -#: commands/vacuum.c:259 +#: commands/vacuum.c:309 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s нельзя выполнить в ходе VACUUM или ANALYZE" -#: commands/vacuum.c:269 +#: commands/vacuum.c:319 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "Параметр VACUUM DISABLE_PAGE_SKIPPING нельзя использовать с FULL" -#: commands/vacuum.c:511 +#: commands/vacuum.c:560 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "" "\"%s\" пропускается --- только суперпользователь может очистить эту таблицу" -#: commands/vacuum.c:515 +#: commands/vacuum.c:564 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "" "пропускается \"%s\" --- только суперпользователь или владелец БД может " "очистить эту таблицу" -#: commands/vacuum.c:519 +#: commands/vacuum.c:568 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "" "\"%s\" пропускается --- только владелец базы данных или этой таблицы может " "очистить её" -#: commands/vacuum.c:534 +#: commands/vacuum.c:583 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "" "\"%s\" пропускается --- только суперпользователь может анализировать этот " "объект" -#: commands/vacuum.c:538 +#: commands/vacuum.c:587 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "" "\"%s\" пропускается --- только суперпользователь или владелец БД может " "анализировать этот объект" -#: commands/vacuum.c:542 +#: commands/vacuum.c:591 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "" "\"%s\" пропускается --- только владелец таблицы или БД может анализировать " "этот объект" -#: commands/vacuum.c:621 commands/vacuum.c:717 +#: commands/vacuum.c:670 commands/vacuum.c:766 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "очистка \"%s\" пропускается --- блокировка недоступна" -#: commands/vacuum.c:626 +#: commands/vacuum.c:675 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "очистка \"%s\" пропускается --- это отношение более не существует" -#: commands/vacuum.c:642 commands/vacuum.c:722 +#: commands/vacuum.c:691 commands/vacuum.c:771 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "анализ \"%s\" пропускается --- блокировка недоступна" -#: commands/vacuum.c:647 +#: commands/vacuum.c:696 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "анализ \"%s\" пропускается --- это отношение более не существует" -#: commands/vacuum.c:945 +#: commands/vacuum.c:994 #, c-format msgid "oldest xmin is far in the past" msgstr "самый старый xmin далеко в прошлом" -#: commands/vacuum.c:946 +#: commands/vacuum.c:995 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -12151,12 +12511,12 @@ msgstr "" "Возможно, вам также придётся зафиксировать или откатить старые " "подготовленные транзакции и удалить неиспользуемые слоты репликации." -#: commands/vacuum.c:987 +#: commands/vacuum.c:1036 #, c-format msgid "oldest multixact is far in the past" msgstr "самый старый multixact далеко в прошлом" -#: commands/vacuum.c:988 +#: commands/vacuum.c:1037 #, c-format msgid "" "Close open transactions with multixacts soon to avoid wraparound problems." @@ -12164,27 +12524,27 @@ msgstr "" "Скорее закройте открытые транзакции в мультитранзакциях, чтобы избежать " "проблемы зацикливания." -#: commands/vacuum.c:1563 +#: commands/vacuum.c:1623 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "" "есть базы данных, которые не очищались на протяжении более чем 2 миллиардов " "транзакций" -#: commands/vacuum.c:1564 +#: commands/vacuum.c:1624 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "" "Возможно, вы уже потеряли данные в результате зацикливания ID транзакций." -#: commands/vacuum.c:1722 +#: commands/vacuum.c:1784 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "" "\"%s\" пропускается --- очищать не таблицы или специальные системные таблицы " "нельзя" -#: commands/variable.c:165 utils/misc/guc.c:10932 utils/misc/guc.c:10994 +#: commands/variable.c:165 utils/misc/guc.c:11184 utils/misc/guc.c:11246 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "нераспознанное ключевое слово: \"%s\"." @@ -12251,7 +12611,7 @@ msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" msgstr "" "команда SET TRANSACTION ISOLATION LEVEL не должна вызываться в подтранзакции" -#: commands/variable.c:548 storage/lmgr/predicate.c:1626 +#: commands/variable.c:548 storage/lmgr/predicate.c:1698 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "использовать сериализуемый режим в горячем резерве нельзя" @@ -12294,59 +12654,58 @@ msgstr "изменить клиентскую кодировку во время msgid "permission denied to set role \"%s\"" msgstr "нет прав установить роль \"%s\"" -#: commands/view.c:54 -#, c-format -msgid "invalid value for \"check_option\" option" -msgstr "неверное значение для параметра \"check_option\"" - -#: commands/view.c:55 -#, c-format -msgid "Valid values are \"local\" and \"cascaded\"." -msgstr "Допускаются только значения \"local\" и \"cascaded\"." - -#: commands/view.c:103 +#: commands/view.c:84 #, c-format msgid "could not determine which collation to use for view column \"%s\"" msgstr "" "не удалось определить правило сортировки для столбца представления \"%s\"" -#: commands/view.c:280 commands/view.c:291 +#: commands/view.c:265 commands/view.c:276 #, c-format msgid "cannot drop columns from view" msgstr "удалять столбцы из представления нельзя" -#: commands/view.c:296 +#: commands/view.c:281 #, c-format msgid "cannot change name of view column \"%s\" to \"%s\"" msgstr "изменить имя столбца \"%s\" на \"%s\" в представлении нельзя" -#: commands/view.c:304 +# skip-rule: space-before-ellipsis +#: commands/view.c:284 +#, c-format +msgid "" +"Use ALTER VIEW ... RENAME COLUMN ... to change name of view column instead." +msgstr "" +"Чтобы изменить имя столбца представления, выполните ALTER VIEW ... RENAME " +"COLUMN ..." + +#: commands/view.c:290 #, c-format msgid "cannot change data type of view column \"%s\" from %s to %s" msgstr "изменить тип столбца представления \"%s\" с %s на %s нельзя" -#: commands/view.c:451 +#: commands/view.c:441 #, c-format msgid "views must not contain SELECT INTO" msgstr "представления не должны содержать SELECT INTO" -#: commands/view.c:463 +#: commands/view.c:453 #, c-format msgid "views must not contain data-modifying statements in WITH" msgstr "представления не должны содержать операторы, изменяющие данные в WITH" -#: commands/view.c:533 +#: commands/view.c:523 #, c-format msgid "CREATE VIEW specifies more column names than columns" msgstr "в CREATE VIEW указано больше имён столбцов, чем самих столбцов" -#: commands/view.c:541 +#: commands/view.c:531 #, c-format msgid "views cannot be unlogged because they do not have storage" msgstr "" "представления не могут быть нежурналируемыми, так как они нигде не хранятся" -#: commands/view.c:555 +#: commands/view.c:545 #, c-format msgid "view \"%s\" will be a temporary view" msgstr "представление \"%s\" будет создано как временное" @@ -12384,7 +12743,7 @@ msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "" "для курсора \"%s\" не выполняется обновляемое сканирование таблицы \"%s\"" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2321 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2404 #, c-format msgid "" "type of parameter %d (%s) does not match that when preparing the plan (%s)" @@ -12392,28 +12751,28 @@ msgstr "" "тип параметра %d (%s) не соответствует тому, с которым подготавливался план " "(%s)" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2333 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2416 #, c-format msgid "no value found for parameter %d" msgstr "не найдено значение параметра %d" -#: executor/execExpr.c:857 parser/parse_agg.c:816 +#: executor/execExpr.c:859 parser/parse_agg.c:816 #, c-format msgid "window function calls cannot be nested" msgstr "вложенные вызовы оконных функций недопустимы" -#: executor/execExpr.c:1316 +#: executor/execExpr.c:1318 #, c-format msgid "target type is not an array" msgstr "целевой тип не является массивом" -#: executor/execExpr.c:1649 +#: executor/execExpr.c:1651 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "столбец ROW() имеет тип %s, а должен - %s" -#: executor/execExpr.c:2174 executor/execSRF.c:700 parser/parse_func.c:136 -#: parser/parse_func.c:650 parser/parse_func.c:1024 +#: executor/execExpr.c:2176 executor/execSRF.c:708 parser/parse_func.c:135 +#: parser/parse_func.c:646 parser/parse_func.c:1020 #, c-format msgid "cannot pass more than %d argument to a function" msgid_plural "cannot pass more than %d arguments to a function" @@ -12421,42 +12780,42 @@ msgstr[0] "функции нельзя передать больше %d аргу msgstr[1] "функции нельзя передать больше %d аргументов" msgstr[2] "функции нельзя передать больше %d аргументов" -#: executor/execExpr.c:2572 executor/execExpr.c:2578 -#: executor/execExprInterp.c:2650 utils/adt/arrayfuncs.c:261 -#: utils/adt/arrayfuncs.c:559 utils/adt/arrayfuncs.c:1301 -#: utils/adt/arrayfuncs.c:3347 utils/adt/arrayfuncs.c:5302 -#: utils/adt/arrayfuncs.c:5819 +#: executor/execExpr.c:2587 executor/execExpr.c:2593 +#: executor/execExprInterp.c:2730 utils/adt/arrayfuncs.c:262 +#: utils/adt/arrayfuncs.c:560 utils/adt/arrayfuncs.c:1302 +#: utils/adt/arrayfuncs.c:3348 utils/adt/arrayfuncs.c:5308 +#: utils/adt/arrayfuncs.c:5821 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "число размерностей массива (%d) превышает предел (%d)" -#: executor/execExprInterp.c:1871 +#: executor/execExprInterp.c:1894 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "атрибут %d типа %s был удалён" -#: executor/execExprInterp.c:1877 +#: executor/execExprInterp.c:1900 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "атрибут %d типа %s имеет неправильный тип" -#: executor/execExprInterp.c:1879 executor/execExprInterp.c:2923 -#: executor/execExprInterp.c:2970 +#: executor/execExprInterp.c:1902 executor/execExprInterp.c:3002 +#: executor/execExprInterp.c:3049 #, c-format msgid "Table has type %s, but query expects %s." msgstr "В таблице задан тип %s, а в запросе ожидается %s." -#: executor/execExprInterp.c:2411 +#: executor/execExprInterp.c:2494 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF для таблиц такого типа не поддерживается" -#: executor/execExprInterp.c:2628 +#: executor/execExprInterp.c:2708 #, c-format msgid "cannot merge incompatible arrays" msgstr "не удалось объединить несовместимые массивы" -#: executor/execExprInterp.c:2629 +#: executor/execExprInterp.c:2709 #, c-format msgid "" "Array with element type %s cannot be included in ARRAY construct with " @@ -12465,7 +12824,7 @@ msgstr "" "Массив с типом элементов %s нельзя включить в конструкцию ARRAY с типом " "элементов %s." -#: executor/execExprInterp.c:2670 executor/execExprInterp.c:2700 +#: executor/execExprInterp.c:2750 executor/execExprInterp.c:2780 #, c-format msgid "" "multidimensional arrays must have array expressions with matching dimensions" @@ -12473,35 +12832,35 @@ msgstr "" "для многомерных массивов должны задаваться выражения с соответствующими " "размерностями" -#: executor/execExprInterp.c:2922 executor/execExprInterp.c:2969 +#: executor/execExprInterp.c:3001 executor/execExprInterp.c:3048 #, c-format msgid "attribute %d has wrong type" msgstr "атрибут %d имеет неверный тип" -#: executor/execExprInterp.c:3079 +#: executor/execExprInterp.c:3158 #, c-format msgid "array subscript in assignment must not be null" msgstr "индекс элемента массива в присваивании не может быть NULL" -#: executor/execExprInterp.c:3512 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3588 utils/adt/domains.c:149 #, c-format msgid "domain %s does not allow null values" msgstr "домен %s не допускает значения null" -#: executor/execExprInterp.c:3527 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3603 utils/adt/domains.c:184 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "значение домена %s нарушает ограничение-проверку \"%s\"" -#: executor/execExprInterp.c:3898 executor/execExprInterp.c:3915 -#: executor/execExprInterp.c:4017 executor/nodeModifyTable.c:109 +#: executor/execExprInterp.c:3973 executor/execExprInterp.c:3990 +#: executor/execExprInterp.c:4091 executor/nodeModifyTable.c:109 #: executor/nodeModifyTable.c:120 executor/nodeModifyTable.c:137 #: executor/nodeModifyTable.c:145 #, c-format msgid "table row type and query-specified row type do not match" msgstr "тип строки таблицы отличается от типа строки-результата запроса" -#: executor/execExprInterp.c:3899 +#: executor/execExprInterp.c:3974 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." @@ -12509,14 +12868,14 @@ msgstr[0] "Строка таблицы содержит %d атрибут, а в msgstr[1] "Строка таблицы содержит %d атрибута, а в запросе ожидается %d." msgstr[2] "Строка таблицы содержит %d атрибутов, а в запросе ожидается %d." -#: executor/execExprInterp.c:3916 executor/nodeModifyTable.c:121 +#: executor/execExprInterp.c:3991 executor/nodeModifyTable.c:121 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "" "В таблице определён тип %s (номер столбца: %d), а в запросе предполагается " "%s." -#: executor/execExprInterp.c:4018 executor/execSRF.c:959 +#: executor/execExprInterp.c:4092 executor/execSRF.c:967 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "" @@ -12572,14 +12931,14 @@ msgstr "последовательность \"%s\" изменить нельз msgid "cannot change TOAST relation \"%s\"" msgstr "TOAST-отношение \"%s\" изменить нельзя" -#: executor/execMain.c:1115 rewrite/rewriteHandler.c:2932 -#: rewrite/rewriteHandler.c:3704 +#: executor/execMain.c:1115 rewrite/rewriteHandler.c:2972 +#: rewrite/rewriteHandler.c:3749 #, c-format msgid "cannot insert into view \"%s\"" msgstr "вставить данные в представление \"%s\" нельзя" -#: executor/execMain.c:1117 rewrite/rewriteHandler.c:2935 -#: rewrite/rewriteHandler.c:3707 +#: executor/execMain.c:1117 rewrite/rewriteHandler.c:2975 +#: rewrite/rewriteHandler.c:3752 #, c-format msgid "" "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or " @@ -12588,14 +12947,14 @@ msgstr "" "Чтобы представление допускало добавление данных, установите триггер INSTEAD " "OF INSERT или безусловное правило ON INSERT DO INSTEAD." -#: executor/execMain.c:1123 rewrite/rewriteHandler.c:2940 -#: rewrite/rewriteHandler.c:3712 +#: executor/execMain.c:1123 rewrite/rewriteHandler.c:2980 +#: rewrite/rewriteHandler.c:3757 #, c-format msgid "cannot update view \"%s\"" msgstr "изменить данные в представлении \"%s\" нельзя" -#: executor/execMain.c:1125 rewrite/rewriteHandler.c:2943 -#: rewrite/rewriteHandler.c:3715 +#: executor/execMain.c:1125 rewrite/rewriteHandler.c:2983 +#: rewrite/rewriteHandler.c:3760 #, c-format msgid "" "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an " @@ -12604,14 +12963,14 @@ msgstr "" "Чтобы представление допускало изменение данных, установите триггер INSTEAD " "OF UPDATE или безусловное правило ON UPDATE DO INSTEAD." -#: executor/execMain.c:1131 rewrite/rewriteHandler.c:2948 -#: rewrite/rewriteHandler.c:3720 +#: executor/execMain.c:1131 rewrite/rewriteHandler.c:2988 +#: rewrite/rewriteHandler.c:3765 #, c-format msgid "cannot delete from view \"%s\"" msgstr "удалить данные из представления \"%s\" нельзя" -#: executor/execMain.c:1133 rewrite/rewriteHandler.c:2951 -#: rewrite/rewriteHandler.c:3723 +#: executor/execMain.c:1133 rewrite/rewriteHandler.c:2991 +#: rewrite/rewriteHandler.c:3768 #, c-format msgid "" "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an " @@ -12680,7 +13039,7 @@ msgstr "блокировать строки в представлении \"%s\" msgid "cannot lock rows in materialized view \"%s\"" msgstr "блокировать строки в материализованном представлении \"%s\" нельзя" -#: executor/execMain.c:1257 executor/execMain.c:2629 +#: executor/execMain.c:1257 executor/execMain.c:2627 #: executor/nodeLockRows.c:132 #, c-format msgid "cannot lock rows in foreign table \"%s\"" @@ -12691,46 +13050,48 @@ msgstr "блокировать строки в сторонней таблице msgid "cannot lock rows in relation \"%s\"" msgstr "блокировать строки в отношении \"%s\" нельзя" -#: executor/execMain.c:1880 +#: executor/execMain.c:1879 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "новая строка в отношении \"%s\" нарушает ограничение секции" -#: executor/execMain.c:1882 executor/execMain.c:1964 executor/execMain.c:2013 -#: executor/execMain.c:2122 +#: executor/execMain.c:1881 executor/execMain.c:1964 executor/execMain.c:2012 +#: executor/execMain.c:2120 #, c-format msgid "Failing row contains %s." msgstr "Ошибочная строка содержит %s." -#: executor/execMain.c:1962 +#: executor/execMain.c:1961 #, c-format -msgid "null value in column \"%s\" violates not-null constraint" -msgstr "нулевое значение в столбце \"%s\" нарушает ограничение NOT NULL" +msgid "" +"null value in column \"%s\" of relation \"%s\" violates not-null constraint" +msgstr "" +"значение NULL в столбце \"%s\" отношения \"%s\" нарушает ограничение NOT NULL" -#: executor/execMain.c:2011 +#: executor/execMain.c:2010 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "новая строка в отношении \"%s\" нарушает ограничение-проверку \"%s\"" -#: executor/execMain.c:2120 +#: executor/execMain.c:2118 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "новая строка нарушает ограничение-проверку для представления \"%s\"" -#: executor/execMain.c:2130 +#: executor/execMain.c:2128 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "" "новая строка нарушает политику защиты на уровне строк \"%s\" для таблицы \"%s" "\"" -#: executor/execMain.c:2135 +#: executor/execMain.c:2133 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "" "новая строка нарушает политику защиты на уровне строк для таблицы \"%s\"" -#: executor/execMain.c:2142 +#: executor/execMain.c:2140 #, c-format msgid "" "new row violates row-level security policy \"%s\" (USING expression) for " @@ -12739,7 +13100,7 @@ msgstr "" "новая строка нарушает политику защиты на уровне строк \"%s\" (выражение " "USING) для таблицы \"%s\"" -#: executor/execMain.c:2147 +#: executor/execMain.c:2145 #, c-format msgid "" "new row violates row-level security policy (USING expression) for table \"%s" @@ -12748,17 +13109,17 @@ msgstr "" "новая строка нарушает политику защиты на уровне строк (выражение USING) для " "таблицы \"%s\"" -#: executor/execPartition.c:345 +#: executor/execPartition.c:341 #, c-format msgid "no partition of relation \"%s\" found for row" msgstr "для строки не найдена секция в отношении \"%s\"" -#: executor/execPartition.c:348 +#: executor/execPartition.c:344 #, c-format msgid "Partition key of the failing row contains %s." msgstr "Ключ секционирования для неподходящей строки содержит %s." -#: executor/execReplication.c:195 executor/execReplication.c:362 +#: executor/execReplication.c:196 executor/execReplication.c:373 #, c-format msgid "" "tuple to be locked was already moved to another partition due to concurrent " @@ -12767,25 +13128,25 @@ msgstr "" "кортеж, подлежащий блокировке, был перемещён в другую секцию в результате " "параллельного изменения; следует повторная попытка" -#: executor/execReplication.c:199 executor/execReplication.c:366 +#: executor/execReplication.c:200 executor/execReplication.c:377 #, c-format msgid "concurrent update, retrying" msgstr "параллельное изменение; следует повторная попытка" -#: executor/execReplication.c:205 executor/execReplication.c:372 +#: executor/execReplication.c:206 executor/execReplication.c:383 #, c-format msgid "concurrent delete, retrying" msgstr "параллельное удаление; следует повторная попытка" -#: executor/execReplication.c:263 parser/parse_oper.c:228 +#: executor/execReplication.c:269 parser/parse_oper.c:228 #: utils/adt/array_userfuncs.c:719 utils/adt/array_userfuncs.c:858 -#: utils/adt/arrayfuncs.c:3625 utils/adt/arrayfuncs.c:4140 -#: utils/adt/arrayfuncs.c:6130 utils/adt/rowtypes.c:1180 +#: utils/adt/arrayfuncs.c:3626 utils/adt/arrayfuncs.c:4146 +#: utils/adt/arrayfuncs.c:6132 utils/adt/rowtypes.c:1182 #, c-format msgid "could not identify an equality operator for type %s" msgstr "не удалось найти оператор равенства для типа %s" -#: executor/execReplication.c:575 +#: executor/execReplication.c:586 #, c-format msgid "" "cannot update table \"%s\" because it does not have a replica identity and " @@ -12794,14 +13155,14 @@ msgstr "" "изменение в таблице \"%s\" невозможно, так как в ней отсутствует " "идентификатор реплики, но она публикует изменения" -#: executor/execReplication.c:577 +#: executor/execReplication.c:588 #, c-format msgid "To enable updating the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "" "Чтобы эта таблица поддерживала изменение, установите REPLICA IDENTITY, " "выполнив ALTER TABLE." -#: executor/execReplication.c:581 +#: executor/execReplication.c:592 #, c-format msgid "" "cannot delete from table \"%s\" because it does not have a replica identity " @@ -12810,7 +13171,7 @@ msgstr "" "удаление из таблицы \"%s\" невозможно, так как в ней отсутствует " "идентификатор реплики, но она публикует удаления" -#: executor/execReplication.c:583 +#: executor/execReplication.c:594 #, c-format msgid "" "To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE." @@ -12818,45 +13179,39 @@ msgstr "" "Чтобы эта таблица поддерживала удаление, установите REPLICA IDENTITY, " "выполнив ALTER TABLE." -#: executor/execReplication.c:603 executor/execReplication.c:610 -#: executor/execReplication.c:618 +#: executor/execReplication.c:613 executor/execReplication.c:621 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "" "в качестве целевого отношения для логической репликации нельзя использовать " "\"%s.%s\"" -#: executor/execReplication.c:605 -#, c-format -msgid "\"%s.%s\" is a partitioned table." -msgstr "\"%s.%s\" — секционированная таблица." - -#: executor/execReplication.c:612 +#: executor/execReplication.c:615 #, c-format msgid "\"%s.%s\" is a foreign table." msgstr "\"%s.%s\" — сторонняя таблица." -#: executor/execReplication.c:620 +#: executor/execReplication.c:623 #, c-format msgid "\"%s.%s\" is not a table." msgstr "\"%s.%s\" — не таблица." -#: executor/execSRF.c:310 +#: executor/execSRF.c:315 #, c-format msgid "rows returned by function are not all of the same row type" msgstr "строки, возвращённые функцией, имеют разные типы" -#: executor/execSRF.c:358 executor/execSRF.c:649 +#: executor/execSRF.c:363 executor/execSRF.c:657 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "нарушение протокола табличной функции в режиме материализации" -#: executor/execSRF.c:365 executor/execSRF.c:667 +#: executor/execSRF.c:370 executor/execSRF.c:675 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "нераспознанный режим возврата табличной функции: %d" -#: executor/execSRF.c:876 +#: executor/execSRF.c:884 #, c-format msgid "" "function returning setof record called in context that cannot accept type " @@ -12865,12 +13220,12 @@ msgstr "" "функция, возвращающая запись SET OF, вызвана в контексте, не допускающем " "этот тип" -#: executor/execSRF.c:932 executor/execSRF.c:948 executor/execSRF.c:958 +#: executor/execSRF.c:940 executor/execSRF.c:956 executor/execSRF.c:966 #, c-format msgid "function return row and query-specified return row do not match" msgstr "тип результат функции отличается от типа строки-результата запроса" -#: executor/execSRF.c:933 +#: executor/execSRF.c:941 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." @@ -12880,77 +13235,68 @@ msgstr[1] "" msgstr[2] "" "Возвращённая строка содержит %d атрибутов, но запрос предполагает %d." -#: executor/execSRF.c:949 +#: executor/execSRF.c:957 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "Возвращён тип %s (номер столбца: %d), а в запросе предполагается %s." -#: executor/execUtils.c:710 +#: executor/execUtils.c:750 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "материализованное представление \"%s\" не было наполнено" -#: executor/execUtils.c:712 +#: executor/execUtils.c:752 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "Примените команду REFRESH MATERIALIZED VIEW." -#: executor/functions.c:225 +#: executor/functions.c:231 #, c-format msgid "could not determine actual type of argument declared %s" msgstr "не удалось определить фактический тип аргумента, объявленного как %s" -#: executor/functions.c:521 +#: executor/functions.c:528 #, c-format msgid "cannot COPY to/from client in a SQL function" msgstr "в функции SQL нельзя выполнить COPY с участием клиента" #. translator: %s is a SQL statement name -#: executor/functions.c:527 +#: executor/functions.c:534 #, c-format msgid "%s is not allowed in a SQL function" msgstr "%s нельзя использовать в SQL-функции" #. translator: %s is a SQL statement name -#: executor/functions.c:535 executor/spi.c:1474 executor/spi.c:2262 +#: executor/functions.c:542 executor/spi.c:1471 executor/spi.c:2257 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s нельзя использовать в не изменчивой (volatile) функции" -#: executor/functions.c:656 -#, c-format -msgid "" -"could not determine actual result type for function declared to return type " -"%s" -msgstr "" -"не удалось определить фактический тип результата для функции (в объявлении " -"указан тип %s)" - -#: executor/functions.c:1407 +#: executor/functions.c:1424 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "SQL-функция \"%s\", оператор %d" -#: executor/functions.c:1433 +#: executor/functions.c:1450 #, c-format msgid "SQL function \"%s\" during startup" msgstr "SQL-функция \"%s\" (при старте)" -#: executor/functions.c:1526 +#: executor/functions.c:1553 #, c-format msgid "" "calling procedures with output arguments is not supported in SQL functions" msgstr "" "вызов процедур с выходными аргументами в функциях SQL не поддерживается" -#: executor/functions.c:1646 executor/functions.c:1679 -#: executor/functions.c:1691 executor/functions.c:1826 -#: executor/functions.c:1859 executor/functions.c:1889 +#: executor/functions.c:1687 executor/functions.c:1724 +#: executor/functions.c:1738 executor/functions.c:1828 +#: executor/functions.c:1861 executor/functions.c:1875 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "несовпадение типа возврата в функции (в объявлении указан тип %s)" -#: executor/functions.c:1648 +#: executor/functions.c:1689 #, c-format msgid "" "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." @@ -12958,66 +13304,70 @@ msgstr "" "Последним оператором в функции должен быть SELECT или INSERT/UPDATE/DELETE " "RETURNING." -#: executor/functions.c:1681 +#: executor/functions.c:1726 #, c-format msgid "Final statement must return exactly one column." msgstr "Последний оператор должен возвращать один столбец." -#: executor/functions.c:1693 +#: executor/functions.c:1740 #, c-format msgid "Actual return type is %s." msgstr "Фактический тип возврата: %s." -#: executor/functions.c:1828 +#: executor/functions.c:1830 #, c-format msgid "Final statement returns too many columns." msgstr "Последний оператор возвращает слишком много столбцов." -#: executor/functions.c:1861 +#: executor/functions.c:1863 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "Последний оператор возвращает %s вместо %s для столбца %d." -#: executor/functions.c:1891 +#: executor/functions.c:1877 #, c-format msgid "Final statement returns too few columns." msgstr "Последний оператор возвращает слишком мало столбцов." -#: executor/functions.c:1945 +#: executor/functions.c:1905 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "для SQL-функций тип возврата %s не поддерживается" -#: executor/nodeAgg.c:2845 parser/parse_agg.c:655 parser/parse_agg.c:685 +#: executor/nodeAgg.c:3091 executor/nodeAgg.c:3100 executor/nodeAgg.c:3112 +#, c-format +msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" +msgstr "" +"неожиданный конец файла для ленты %d: запрашивалось байт: %zu, прочитано: %zu" + +#: executor/nodeAgg.c:4046 parser/parse_agg.c:655 parser/parse_agg.c:685 #, c-format msgid "aggregate function calls cannot be nested" msgstr "вложенные вызовы агрегатных функций недопустимы" -#: executor/nodeAgg.c:3050 executor/nodeWindowAgg.c:2835 +#: executor/nodeAgg.c:4254 executor/nodeWindowAgg.c:2836 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "" "агрегатная функция %u должна иметь совместимые входной и переходный типы" -#: executor/nodeCustom.c:146 executor/nodeCustom.c:157 +#: executor/nodeCustom.c:145 executor/nodeCustom.c:156 #, c-format msgid "custom scan \"%s\" does not support MarkPos" msgstr "нестандартное сканирование \"%s\" не поддерживает MarkPos" #: executor/nodeHashjoin.c:1046 executor/nodeHashjoin.c:1076 #, c-format -msgid "could not rewind hash-join temporary file: %m" -msgstr "не удалось переместиться во временном файле хеш-соединения: %m" - -#: executor/nodeHashjoin.c:1235 executor/nodeHashjoin.c:1241 -#, c-format -msgid "could not write to hash-join temporary file: %m" -msgstr "не удалось записать во временный файл хеш-соединения: %m" +msgid "could not rewind hash-join temporary file" +msgstr "не удалось переместиться во временном файле хеш-соединения" -#: executor/nodeHashjoin.c:1282 executor/nodeHashjoin.c:1292 +#: executor/nodeHashjoin.c:1272 executor/nodeHashjoin.c:1283 #, c-format -msgid "could not read from hash-join temporary file: %m" -msgstr "не удалось прочитать временный файл хеш-соединения: %m" +msgid "" +"could not read from hash-join temporary file: read only %zu of %zu bytes" +msgstr "" +"не удалось прочитать временный файл хеш-соединения (прочитано байт: %zu из " +"%zu)" #: executor/nodeIndexonlyscan.c:242 #, c-format @@ -13025,12 +13375,12 @@ msgid "lossy distance functions are not supported in index-only scans" msgstr "" "функции неточной дистанции не поддерживаются в сканировании только по индексу" -#: executor/nodeLimit.c:262 +#: executor/nodeLimit.c:374 #, c-format msgid "OFFSET must not be negative" msgstr "OFFSET не может быть отрицательным" -#: executor/nodeLimit.c:288 +#: executor/nodeLimit.c:400 #, c-format msgid "LIMIT must not be negative" msgstr "LIMIT не может быть отрицательным" @@ -13064,7 +13414,7 @@ msgstr "" msgid "Query has too few columns." msgstr "Запрос возвращает меньше столбцов." -#: executor/nodeModifyTable.c:807 executor/nodeModifyTable.c:881 +#: executor/nodeModifyTable.c:839 executor/nodeModifyTable.c:913 #, c-format msgid "" "tuple to be deleted was already modified by an operation triggered by the " @@ -13073,12 +13423,12 @@ msgstr "" "кортеж, который должен быть удалён, уже модифицирован в операции, вызванной " "текущей командой" -#: executor/nodeModifyTable.c:1188 +#: executor/nodeModifyTable.c:1220 #, c-format msgid "invalid ON UPDATE specification" msgstr "неверное указание ON UPDATE" -#: executor/nodeModifyTable.c:1189 +#: executor/nodeModifyTable.c:1221 #, c-format msgid "" "The result tuple would appear in a different partition than the original " @@ -13087,12 +13437,12 @@ msgstr "" "Результирующий кортеж окажется перемещённым из секции исходного кортежа в " "другую." -#: executor/nodeModifyTable.c:1560 +#: executor/nodeModifyTable.c:1592 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "команда ON CONFLICT DO UPDATE не может менять строку повторно" -#: executor/nodeModifyTable.c:1561 +#: executor/nodeModifyTable.c:1593 #, c-format msgid "" "Ensure that no rows proposed for insertion within the same command have " @@ -13111,63 +13461,63 @@ msgstr "параметр TABLESAMPLE не может быть NULL" msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "параметр TABLESAMPLE REPEATABLE не может быть NULL" -#: executor/nodeSubplan.c:347 executor/nodeSubplan.c:386 -#: executor/nodeSubplan.c:1152 +#: executor/nodeSubplan.c:346 executor/nodeSubplan.c:385 +#: executor/nodeSubplan.c:1159 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "подзапрос в выражении вернул больше одной строки" -#: executor/nodeTableFuncscan.c:378 +#: executor/nodeTableFuncscan.c:375 #, c-format msgid "namespace URI must not be null" msgstr "URI пространства имён должен быть не NULL" -#: executor/nodeTableFuncscan.c:392 +#: executor/nodeTableFuncscan.c:389 #, c-format msgid "row filter expression must not be null" msgstr "выражение отбора строк должно быть не NULL" -#: executor/nodeTableFuncscan.c:418 +#: executor/nodeTableFuncscan.c:415 #, c-format msgid "column filter expression must not be null" msgstr "выражение отбора столбца должно быть не NULL" -#: executor/nodeTableFuncscan.c:419 +#: executor/nodeTableFuncscan.c:416 #, c-format msgid "Filter for column \"%s\" is null." msgstr "Для столбца \"%s\" задано выражение NULL." -#: executor/nodeTableFuncscan.c:509 +#: executor/nodeTableFuncscan.c:506 #, c-format msgid "null is not allowed in column \"%s\"" msgstr "в столбце \"%s\" не допускается NULL" -#: executor/nodeWindowAgg.c:354 +#: executor/nodeWindowAgg.c:355 #, c-format msgid "moving-aggregate transition function must not return null" msgstr "функция перехода движимого агрегата не должна возвращать NULL" -#: executor/nodeWindowAgg.c:2057 +#: executor/nodeWindowAgg.c:2058 #, c-format msgid "frame starting offset must not be null" msgstr "смещение начала рамки не может быть NULL" -#: executor/nodeWindowAgg.c:2070 +#: executor/nodeWindowAgg.c:2071 #, c-format msgid "frame starting offset must not be negative" msgstr "смещение начала рамки не может быть отрицательным" -#: executor/nodeWindowAgg.c:2082 +#: executor/nodeWindowAgg.c:2083 #, c-format msgid "frame ending offset must not be null" msgstr "смещение конца рамки не может быть NULL" -#: executor/nodeWindowAgg.c:2095 +#: executor/nodeWindowAgg.c:2096 #, c-format msgid "frame ending offset must not be negative" msgstr "смещение конца рамки не может быть отрицательным" -#: executor/nodeWindowAgg.c:2751 +#: executor/nodeWindowAgg.c:2752 #, c-format msgid "aggregate function %s does not support use as a window function" msgstr "" @@ -13220,12 +13570,12 @@ msgstr "не удалось открыть запрос %s как курсор" msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE не поддерживается" -#: executor/spi.c:1446 parser/analyze.c:2493 +#: executor/spi.c:1446 parser/analyze.c:2475 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Прокручиваемые курсоры должны быть READ ONLY." -#: executor/spi.c:2570 +#: executor/spi.c:2560 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL-оператор: \"%s\"" @@ -13250,13 +13600,13 @@ msgstr "неверный параметр \"%s\"" msgid "Valid options in this context are: %s" msgstr "В данном контексте допустимы параметры: %s" -#: jit/jit.c:208 utils/fmgr/dfmgr.c:209 utils/fmgr/dfmgr.c:426 -#: utils/fmgr/dfmgr.c:474 +#: jit/jit.c:205 utils/fmgr/dfmgr.c:209 utils/fmgr/dfmgr.c:417 +#: utils/fmgr/dfmgr.c:465 #, c-format msgid "could not access file \"%s\": %m" msgstr "нет доступа к файлу \"%s\": %m" -#: jit/llvm/llvmjit.c:601 +#: jit/llvm/llvmjit.c:730 #, c-format msgid "time to inline: %.3fs, opt: %.3fs, emit: %.3fs" msgstr "время внедрения: %.3fs, оптимизации: %.3fs, выдачи: %.3fs" @@ -13267,32 +13617,27 @@ msgstr "время внедрения: %.3fs, оптимизации: %.3fs, в msgid "Failed on DSA request of size %zu." msgstr "Ошибка при запросе памяти DSA (%zu Б)." -#: lib/stringinfo.c:284 -#, c-format -msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." -msgstr "" -"Не удалось увеличить строковый буфер (в буфере байт: %d, требовалось ещё %d)." - #: libpq/auth-scram.c:248 #, c-format msgid "client selected an invalid SASL authentication mechanism" msgstr "клиент выбрал неверный механизм аутентификации SASL" -#: libpq/auth-scram.c:269 libpq/auth-scram.c:509 libpq/auth-scram.c:518 +#: libpq/auth-scram.c:269 libpq/auth-scram.c:509 libpq/auth-scram.c:520 #, c-format -msgid "invalid SCRAM verifier for user \"%s\"" -msgstr "неверный проверочный код SCRAM для пользователя \"%s\"" +msgid "invalid SCRAM secret for user \"%s\"" +msgstr "неверная запись секрета SCRAM для пользователя \"%s\"" #: libpq/auth-scram.c:280 #, c-format -msgid "User \"%s\" does not have a valid SCRAM verifier." -msgstr "У пользователя \"%s\" нет подходящих данных для проверки SCRAM." +msgid "User \"%s\" does not have a valid SCRAM secret." +msgstr "Для пользователя \"%s\" нет подходящей записи секрета SCRAM." -#: libpq/auth-scram.c:358 libpq/auth-scram.c:363 libpq/auth-scram.c:676 -#: libpq/auth-scram.c:684 libpq/auth-scram.c:795 libpq/auth-scram.c:805 -#: libpq/auth-scram.c:913 libpq/auth-scram.c:920 libpq/auth-scram.c:935 -#: libpq/auth-scram.c:950 libpq/auth-scram.c:964 libpq/auth-scram.c:982 -#: libpq/auth-scram.c:997 libpq/auth-scram.c:1283 libpq/auth-scram.c:1291 +#: libpq/auth-scram.c:358 libpq/auth-scram.c:363 libpq/auth-scram.c:693 +#: libpq/auth-scram.c:701 libpq/auth-scram.c:806 libpq/auth-scram.c:819 +#: libpq/auth-scram.c:829 libpq/auth-scram.c:937 libpq/auth-scram.c:944 +#: libpq/auth-scram.c:959 libpq/auth-scram.c:974 libpq/auth-scram.c:988 +#: libpq/auth-scram.c:1006 libpq/auth-scram.c:1021 libpq/auth-scram.c:1321 +#: libpq/auth-scram.c:1329 #, c-format msgid "malformed SCRAM message" msgstr "неправильное сообщение SCRAM" @@ -13322,22 +13667,27 @@ msgstr "Разовый код не совпадает." msgid "could not generate random salt" msgstr "не удалось сгенерировать случайную соль" -#: libpq/auth-scram.c:677 +#: libpq/auth-scram.c:694 #, c-format msgid "Expected attribute \"%c\" but found \"%s\"." msgstr "Ожидался атрибут \"%c\", но обнаружено \"%s\"." -#: libpq/auth-scram.c:685 libpq/auth-scram.c:806 +#: libpq/auth-scram.c:702 libpq/auth-scram.c:830 #, c-format msgid "Expected character \"=\" for attribute \"%c\"." msgstr "Ожидался символ \"=\" для атрибута \"%c\"." -#: libpq/auth-scram.c:796 +#: libpq/auth-scram.c:807 +#, c-format +msgid "Attribute expected, but found end of string." +msgstr "Ожидался атрибут, но обнаружен конец строки." + +#: libpq/auth-scram.c:820 #, c-format msgid "Attribute expected, but found invalid character \"%s\"." msgstr "Ожидался атрибут, но обнаружен неправильный символ \"%s\"." -#: libpq/auth-scram.c:914 libpq/auth-scram.c:936 +#: libpq/auth-scram.c:938 libpq/auth-scram.c:960 #, c-format msgid "" "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not " @@ -13346,17 +13696,17 @@ msgstr "" "Клиент выбрал алгоритм SCRAM-SHA-256-PLUS, но в сообщении SCRAM отсутствуют " "данные связывания каналов." -#: libpq/auth-scram.c:921 libpq/auth-scram.c:951 +#: libpq/auth-scram.c:945 libpq/auth-scram.c:975 #, c-format msgid "Comma expected, but found character \"%s\"." msgstr "Ожидалась запятая, но обнаружен символ \"%s\"." -#: libpq/auth-scram.c:942 +#: libpq/auth-scram.c:966 #, c-format msgid "SCRAM channel binding negotiation error" msgstr "Ошибка согласования связывания каналов SCRAM" -#: libpq/auth-scram.c:943 +#: libpq/auth-scram.c:967 #, c-format msgid "" "The client supports SCRAM channel binding but thinks the server does not. " @@ -13365,7 +13715,7 @@ msgstr "" "Клиент поддерживает связывание каналов SCRAM, но полагает, что оно не " "поддерживается сервером. Однако сервер тоже поддерживает связывание каналов." -#: libpq/auth-scram.c:965 +#: libpq/auth-scram.c:989 #, c-format msgid "" "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM " @@ -13374,135 +13724,140 @@ msgstr "" "Клиент выбрал алгоритм SCRAM-SHA-256 без связывания каналов, но сообщение " "SCRAM содержит данные связывания каналов." -#: libpq/auth-scram.c:976 +#: libpq/auth-scram.c:1000 #, c-format msgid "unsupported SCRAM channel-binding type \"%s\"" msgstr "неподдерживаемый тип связывания каналов SCRAM \"%s\"" -#: libpq/auth-scram.c:983 +#: libpq/auth-scram.c:1007 #, c-format msgid "Unexpected channel-binding flag \"%s\"." msgstr "Неожиданный флаг связывания каналов \"%s\"." -#: libpq/auth-scram.c:993 +#: libpq/auth-scram.c:1017 #, c-format msgid "client uses authorization identity, but it is not supported" msgstr "клиент передал идентификатор для авторизации, но это не поддерживается" -#: libpq/auth-scram.c:998 +#: libpq/auth-scram.c:1022 #, c-format msgid "Unexpected attribute \"%s\" in client-first-message." msgstr "Неожиданный атрибут \"%s\" в первом сообщении клиента." -#: libpq/auth-scram.c:1014 +#: libpq/auth-scram.c:1038 #, c-format msgid "client requires an unsupported SCRAM extension" msgstr "клиенту требуется неподдерживаемое расширение SCRAM" -#: libpq/auth-scram.c:1028 +#: libpq/auth-scram.c:1052 #, c-format msgid "non-printable characters in SCRAM nonce" msgstr "непечатаемые символы в разовом коде SCRAM" -#: libpq/auth-scram.c:1145 +#: libpq/auth-scram.c:1169 #, c-format msgid "could not generate random nonce" msgstr "не удалось сгенерировать разовый код" -#: libpq/auth-scram.c:1249 +#: libpq/auth-scram.c:1179 +#, c-format +msgid "could not encode random nonce" +msgstr "не удалось оформить разовый код" + +#: libpq/auth-scram.c:1285 #, c-format msgid "SCRAM channel binding check failed" msgstr "ошибка проверки связывания каналов SCRAM" -#: libpq/auth-scram.c:1267 +#: libpq/auth-scram.c:1303 #, c-format msgid "unexpected SCRAM channel-binding attribute in client-final-message" msgstr "" "неожиданный атрибут связывания каналов в последнем сообщении клиента SCRAM" -#: libpq/auth-scram.c:1284 +#: libpq/auth-scram.c:1322 #, c-format msgid "Malformed proof in client-final-message." msgstr "Некорректное подтверждение в последнем сообщении клиента." -#: libpq/auth-scram.c:1292 +#: libpq/auth-scram.c:1330 #, c-format msgid "Garbage found at the end of client-final-message." msgstr "Мусор в конце последнего сообщения клиента." -#: libpq/auth.c:279 +#: libpq/auth.c:280 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "" "пользователь \"%s\" не прошёл проверку подлинности: не разрешённый компьютер" -#: libpq/auth.c:282 +#: libpq/auth.c:283 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (\"trust\")" -#: libpq/auth.c:285 +#: libpq/auth.c:286 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (Ident)" -#: libpq/auth.c:288 +#: libpq/auth.c:289 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (Peer)" -#: libpq/auth.c:293 +#: libpq/auth.c:294 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (по паролю)" -#: libpq/auth.c:298 +#: libpq/auth.c:299 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (GSSAPI)" -#: libpq/auth.c:301 +#: libpq/auth.c:302 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (SSPI)" -#: libpq/auth.c:304 +#: libpq/auth.c:305 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (PAM)" -#: libpq/auth.c:307 +#: libpq/auth.c:308 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (BSD)" -#: libpq/auth.c:310 +#: libpq/auth.c:311 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (LDAP)" -#: libpq/auth.c:313 +#: libpq/auth.c:314 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (по сертификату)" -#: libpq/auth.c:316 +#: libpq/auth.c:317 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (RADIUS)" -#: libpq/auth.c:319 +#: libpq/auth.c:320 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "" "пользователь \"%s\" не прошёл проверку подлинности: неверный метод проверки" -#: libpq/auth.c:323 +#: libpq/auth.c:324 #, c-format msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "Подключение соответствует строке %d в pg_hba.conf: \"%s\"" -#: libpq/auth.c:370 +#: libpq/auth.c:371 #, c-format msgid "" "client certificates can only be checked if a root certificate store is " @@ -13511,44 +13866,34 @@ msgstr "" "сертификаты клиентов могут проверяться, только если доступно хранилище " "корневых сертификатов" -#: libpq/auth.c:381 +#: libpq/auth.c:382 #, c-format msgid "connection requires a valid client certificate" msgstr "для подключения требуется годный сертификат клиента" -#: libpq/auth.c:391 -#, c-format -msgid "" -"GSSAPI encryption can only be used with gss, trust, or reject authentication " -"methods" -msgstr "" -"шифрование GSSAPI может применяться только с методами аутентификации gss, " -"trust и reject" +#: libpq/auth.c:413 libpq/auth.c:459 +msgid "GSS encryption" +msgstr "Шифрование GSS" -#: libpq/auth.c:425 -#, c-format -msgid "" -"pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" -msgstr "" -"pg_hba.conf отвергает подключение для репликации: компьютер \"%s\", " -"пользователь \"%s\", \"%s\"" +#: libpq/auth.c:416 libpq/auth.c:462 +msgid "SSL on" +msgstr "SSL вкл." -#: libpq/auth.c:427 libpq/auth.c:443 libpq/auth.c:501 libpq/auth.c:519 +#: libpq/auth.c:418 libpq/auth.c:464 msgid "SSL off" msgstr "SSL выкл." -#: libpq/auth.c:427 libpq/auth.c:443 libpq/auth.c:501 libpq/auth.c:519 -msgid "SSL on" -msgstr "SSL вкл." - -#: libpq/auth.c:431 +#. translator: last %s describes encryption state +#: libpq/auth.c:424 #, c-format -msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\"" +msgid "" +"pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" msgstr "" "pg_hba.conf отвергает подключение для репликации: компьютер \"%s\", " -"пользователь \"%s\"" +"пользователь \"%s\", \"%s\"" -#: libpq/auth.c:440 +#. translator: last %s describes encryption state +#: libpq/auth.c:431 #, c-format msgid "" "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s" @@ -13557,45 +13902,38 @@ msgstr "" "pg_hba.conf отвергает подключение: компьютер \"%s\", пользователь \"%s\", " "база данных \"%s\", %s" -#: libpq/auth.c:447 -#, c-format -msgid "" -"pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\"" -msgstr "" -"pg_hba.conf отвергает подключение: компьютер \"%s\", пользователь \"%s\", " -"база данных \"%s\"" - -#: libpq/auth.c:476 +#: libpq/auth.c:469 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "" "IP-адрес клиента разрешается в \"%s\", соответствует прямому преобразованию." -#: libpq/auth.c:479 +#: libpq/auth.c:472 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "" "IP-адрес клиента разрешается в \"%s\", прямое преобразование не проверялось." -#: libpq/auth.c:482 +#: libpq/auth.c:475 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "" "IP-адрес клиента разрешается в \"%s\", это не соответствует прямому " "преобразованию." -#: libpq/auth.c:485 +#: libpq/auth.c:478 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "" "Преобразовать имя клиентского компьютера \"%s\" в IP-адрес не удалось: %s." -#: libpq/auth.c:490 +#: libpq/auth.c:483 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "Получить имя компьютера из IP-адреса клиента не удалось: %s." -#: libpq/auth.c:499 +#. translator: last %s describes encryption state +#: libpq/auth.c:491 #, c-format msgid "" "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s" @@ -13604,44 +13942,30 @@ msgstr "" "в pg_hba.conf нет записи, разрешающей подключение для репликации с " "компьютера \"%s\" для пользователя \"%s\", %s" -#: libpq/auth.c:506 -#, c-format -msgid "" -"no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\"" -msgstr "" -"в pg_hba.conf нет записи, разрешающей подключение для репликации с " -"компьютера \"%s\" для пользователя \"%s\"" - -#: libpq/auth.c:516 +#. translator: last %s describes encryption state +#: libpq/auth.c:499 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "" "в pg_hba.conf нет записи для компьютера \"%s\", пользователя \"%s\", базы " "\"%s\", %s" -#: libpq/auth.c:524 -#, c-format -msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"" -msgstr "" -"в pg_hba.conf нет записи для компьютера \"%s\", пользователя \"%s\", базы " -"\"%s\"" - -#: libpq/auth.c:691 +#: libpq/auth.c:675 #, c-format msgid "expected password response, got message type %d" msgstr "ожидался ответ с паролем, но получено сообщение %d" -#: libpq/auth.c:719 +#: libpq/auth.c:703 #, c-format msgid "invalid password packet size" msgstr "неверный размер пакета с паролем" -#: libpq/auth.c:737 +#: libpq/auth.c:721 #, c-format msgid "empty password returned by client" msgstr "клиент возвратил пустой пароль" -#: libpq/auth.c:857 libpq/hba.c:1340 +#: libpq/auth.c:841 libpq/hba.c:1345 #, c-format msgid "" "MD5 authentication is not supported when \"db_user_namespace\" is enabled" @@ -13649,215 +13973,215 @@ msgstr "" "проверка подлинности MD5 не поддерживается, когда включён режим " "\"db_user_namespace\"" -#: libpq/auth.c:863 +#: libpq/auth.c:847 #, c-format msgid "could not generate random MD5 salt" msgstr "не удалось сгенерировать случайную соль для MD5" -#: libpq/auth.c:909 +#: libpq/auth.c:893 #, c-format msgid "SASL authentication is not supported in protocol version 2" msgstr "аутентификация SASL не поддерживается в протоколе версии 2" -#: libpq/auth.c:942 +#: libpq/auth.c:926 #, c-format msgid "expected SASL response, got message type %d" msgstr "ожидался ответ SASL, но получено сообщение %d" -#: libpq/auth.c:1071 +#: libpq/auth.c:1055 #, c-format msgid "GSSAPI is not supported in protocol version 2" msgstr "GSSAPI не поддерживается в протоколе версии 2" -#: libpq/auth.c:1131 +#: libpq/auth.c:1068 libpq/be-secure-gssapi.c:535 +#, c-format +msgid "could not set environment: %m" +msgstr "не удалось задать переменную окружения: %m" + +#: libpq/auth.c:1104 #, c-format msgid "expected GSS response, got message type %d" msgstr "ожидался ответ GSS, но получено сообщение %d" -#: libpq/auth.c:1193 +#: libpq/auth.c:1164 msgid "accepting GSS security context failed" msgstr "принять контекст безопасности GSS не удалось" -#: libpq/auth.c:1232 +#: libpq/auth.c:1204 msgid "retrieving GSS user name failed" msgstr "получить имя пользователя GSS не удалось" -#: libpq/auth.c:1363 +#: libpq/auth.c:1337 #, c-format msgid "SSPI is not supported in protocol version 2" msgstr "SSPI не поддерживается в протоколе версии 2" -#: libpq/auth.c:1378 +#: libpq/auth.c:1352 msgid "could not acquire SSPI credentials" msgstr "не удалось получить удостоверение SSPI" -#: libpq/auth.c:1396 +#: libpq/auth.c:1377 #, c-format msgid "expected SSPI response, got message type %d" msgstr "ожидался ответ SSPI, но получено сообщение %d" -#: libpq/auth.c:1469 +#: libpq/auth.c:1455 msgid "could not accept SSPI security context" msgstr "принять контекст безопасности SSPI не удалось" -#: libpq/auth.c:1531 +#: libpq/auth.c:1517 msgid "could not get token from SSPI security context" msgstr "не удалось получить маркер из контекста безопасности SSPI" -#: libpq/auth.c:1650 libpq/auth.c:1669 +#: libpq/auth.c:1636 libpq/auth.c:1655 #, c-format msgid "could not translate name" msgstr "не удалось преобразовать имя" -#: libpq/auth.c:1682 +#: libpq/auth.c:1668 #, c-format msgid "realm name too long" msgstr "имя области слишком длинное" -#: libpq/auth.c:1697 +#: libpq/auth.c:1683 #, c-format msgid "translated account name too long" msgstr "преобразованное имя учётной записи слишком длинное" -#: libpq/auth.c:1883 +#: libpq/auth.c:1864 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "не удалось создать сокет для подключения к серверу Ident: %m" -#: libpq/auth.c:1898 +#: libpq/auth.c:1879 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "не удалось привязаться к локальному адресу \"%s\": %m" -#: libpq/auth.c:1910 +#: libpq/auth.c:1891 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "не удалось подключиться к серверу Ident по адресу \"%s\", порт %s: %m" -#: libpq/auth.c:1932 +#: libpq/auth.c:1913 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "" "не удалось отправить запрос серверу Ident по адресу \"%s\", порт %s: %m" -#: libpq/auth.c:1949 +#: libpq/auth.c:1930 #, c-format msgid "" "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "" "не удалось получить ответ от сервера Ident по адресу \"%s\", порт %s: %m" -#: libpq/auth.c:1959 +#: libpq/auth.c:1940 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "неверно форматированный ответ от сервера Ident: \"%s\"" -#: libpq/auth.c:1999 +#: libpq/auth.c:1987 #, c-format msgid "peer authentication is not supported on this platform" msgstr "проверка подлинности peer в этой ОС не поддерживается" -#: libpq/auth.c:2003 +#: libpq/auth.c:1991 #, c-format msgid "could not get peer credentials: %m" msgstr "не удалось получить данные пользователя через механизм peer: %m" -#: libpq/auth.c:2014 +#: libpq/auth.c:2003 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "найти локального пользователя по идентификатору (%ld) не удалось: %s" -#: libpq/auth.c:2104 +#: libpq/auth.c:2102 #, c-format msgid "error from underlying PAM layer: %s" msgstr "ошибка в нижележащем слое PAM: %s" -#: libpq/auth.c:2174 +#: libpq/auth.c:2172 #, c-format msgid "could not create PAM authenticator: %s" msgstr "не удалось создать аутентификатор PAM: %s" -#: libpq/auth.c:2185 +#: libpq/auth.c:2183 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "ошибка в pam_set_item(PAM_USER): %s" -#: libpq/auth.c:2217 +#: libpq/auth.c:2215 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "ошибка в pam_set_item(PAM_RHOST): %s" -#: libpq/auth.c:2229 +#: libpq/auth.c:2227 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "ошибка в pam_set_item(PAM_CONV): %s" -#: libpq/auth.c:2242 +#: libpq/auth.c:2240 #, c-format msgid "pam_authenticate failed: %s" msgstr "ошибка в pam_authenticate: %s" -#: libpq/auth.c:2255 +#: libpq/auth.c:2253 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "ошибка в pam_acct_mgmt: %s" -#: libpq/auth.c:2266 +#: libpq/auth.c:2264 #, c-format msgid "could not release PAM authenticator: %s" msgstr "не удалось освободить аутентификатор PAM: %s" -#: libpq/auth.c:2342 +#: libpq/auth.c:2340 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "не удалось инициализировать LDAP (код ошибки: %d)" -#: libpq/auth.c:2379 +#: libpq/auth.c:2377 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "не удалось извлечь имя домена из ldapbasedn" -#: libpq/auth.c:2387 +#: libpq/auth.c:2385 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "для аутентификации LDAP не удалось найти записи DNS SRV для \"%s\"" -#: libpq/auth.c:2389 +#: libpq/auth.c:2387 #, c-format msgid "Set an LDAP server name explicitly." msgstr "Задайте имя сервера LDAP явным образом." -#: libpq/auth.c:2441 +#: libpq/auth.c:2439 #, c-format msgid "could not initialize LDAP: %s" msgstr "не удалось инициализировать LDAP: %s" -#: libpq/auth.c:2451 +#: libpq/auth.c:2449 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "протокол ldaps с текущей библиотекой LDAP не поддерживается" -#: libpq/auth.c:2459 +#: libpq/auth.c:2457 #, c-format msgid "could not initialize LDAP: %m" msgstr "не удалось инициализировать LDAP: %m" -#: libpq/auth.c:2469 +#: libpq/auth.c:2467 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "не удалось задать версию протокола LDAP: %s" -#: libpq/auth.c:2500 -#, c-format -msgid "could not load wldap32.dll" -msgstr "не удалось загрузить wldap32.dll" - -#: libpq/auth.c:2508 +#: libpq/auth.c:2507 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "не удалось найти функцию _ldap_start_tls_sA в wldap32.dll" -#: libpq/auth.c:2509 +#: libpq/auth.c:2508 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "LDAP через SSL не поддерживается в этой ОС." @@ -13981,7 +14305,7 @@ msgid "" "RADIUS authentication does not support passwords longer than %d characters" msgstr "проверка подлинности RADIUS не поддерживает пароли длиннее %d симв." -#: libpq/auth.c:3102 libpq/hba.c:1954 +#: libpq/auth.c:3102 libpq/hba.c:1946 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "не удалось преобразовать имя сервера RADIUS \"%s\" в адрес: %s" @@ -14063,7 +14387,7 @@ msgstr "ответ RADIUS от %s содержит неверный код (%d) #: libpq/be-fsstubs.c:119 libpq/be-fsstubs.c:150 libpq/be-fsstubs.c:178 #: libpq/be-fsstubs.c:204 libpq/be-fsstubs.c:229 libpq/be-fsstubs.c:277 -#: libpq/be-fsstubs.c:300 libpq/be-fsstubs.c:555 +#: libpq/be-fsstubs.c:300 libpq/be-fsstubs.c:553 #, c-format msgid "invalid large-object descriptor: %d" msgstr "неверный дескриптор большого объекта: %d" @@ -14073,7 +14397,7 @@ msgstr "неверный дескриптор большого объекта: % msgid "large object descriptor %d was not opened for reading" msgstr "дескриптор большого объекта %d не был открыт для чтения" -#: libpq/be-fsstubs.c:185 libpq/be-fsstubs.c:562 +#: libpq/be-fsstubs.c:185 libpq/be-fsstubs.c:560 #, c-format msgid "large object descriptor %d was not opened for writing" msgstr "дескриптор большого объекта %d не был открыт для записи" @@ -14102,67 +14426,67 @@ msgstr "не удалось открыть файл сервера \"%s\": %m" msgid "could not read server file \"%s\": %m" msgstr "не удалось прочитать файл сервера \"%s\": %m" -#: libpq/be-fsstubs.c:516 +#: libpq/be-fsstubs.c:514 #, c-format msgid "could not create server file \"%s\": %m" msgstr "не удалось создать файл сервера \"%s\": %m" -#: libpq/be-fsstubs.c:528 +#: libpq/be-fsstubs.c:526 #, c-format msgid "could not write server file \"%s\": %m" msgstr "не удалось записать файл сервера \"%s\": %m" -#: libpq/be-fsstubs.c:762 +#: libpq/be-fsstubs.c:760 #, c-format msgid "large object read request is too large" msgstr "при чтении большого объекта запрошен чрезмерный размер" -#: libpq/be-fsstubs.c:804 utils/adt/genfile.c:235 utils/adt/genfile.c:274 -#: utils/adt/genfile.c:310 +#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:265 utils/adt/genfile.c:304 +#: utils/adt/genfile.c:340 #, c-format msgid "requested length cannot be negative" msgstr "запрошенная длина не может быть отрицательной" -#: libpq/be-fsstubs.c:857 storage/large_object/inv_api.c:295 -#: storage/large_object/inv_api.c:307 storage/large_object/inv_api.c:511 -#: storage/large_object/inv_api.c:622 storage/large_object/inv_api.c:812 +#: libpq/be-fsstubs.c:855 storage/large_object/inv_api.c:297 +#: storage/large_object/inv_api.c:309 storage/large_object/inv_api.c:513 +#: storage/large_object/inv_api.c:624 storage/large_object/inv_api.c:814 #, c-format msgid "permission denied for large object %u" msgstr "нет доступа к большому объекту %u" -#: libpq/be-secure-common.c:91 +#: libpq/be-secure-common.c:93 #, c-format msgid "could not read from command \"%s\": %m" msgstr "не удалось прочитать вывод команды \"%s\": %m" -#: libpq/be-secure-common.c:109 +#: libpq/be-secure-common.c:113 #, c-format msgid "command \"%s\" failed" msgstr "ошибка команды \"%s\"" -#: libpq/be-secure-common.c:140 +#: libpq/be-secure-common.c:141 #, c-format msgid "could not access private key file \"%s\": %m" msgstr "не удалось обратиться к файлу закрытого ключа \"%s\": %m" -#: libpq/be-secure-common.c:149 +#: libpq/be-secure-common.c:150 #, c-format msgid "private key file \"%s\" is not a regular file" msgstr "файл закрытого ключа \"%s\" не является обычным" -#: libpq/be-secure-common.c:164 +#: libpq/be-secure-common.c:165 #, c-format msgid "private key file \"%s\" must be owned by the database user or root" msgstr "" "файл закрытого ключа \"%s\" должен принадлежать пользователю, запускающему " "сервер, или root" -#: libpq/be-secure-common.c:187 +#: libpq/be-secure-common.c:188 #, c-format msgid "private key file \"%s\" has group or world access" msgstr "к файлу закрытого ключа \"%s\" имеют доступ все или группа" -#: libpq/be-secure-common.c:189 +#: libpq/be-secure-common.c:190 #, c-format msgid "" "File must have permissions u=rw (0600) or less if owned by the database " @@ -14172,255 +14496,265 @@ msgstr "" "он принадлежит пользователю сервера, либо u=rw,g=r (0640) или более строгие, " "если он принадлежит root." -#: libpq/be-secure-gssapi.c:195 +#: libpq/be-secure-gssapi.c:204 msgid "GSSAPI wrap error" msgstr "ошибка обёртывания сообщения в GSSAPI" -#: libpq/be-secure-gssapi.c:199 +#: libpq/be-secure-gssapi.c:211 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "исходящее сообщение GSSAPI не будет защищено" -#: libpq/be-secure-gssapi.c:203 libpq/be-secure-gssapi.c:570 +#: libpq/be-secure-gssapi.c:218 libpq/be-secure-gssapi.c:622 #, c-format msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" msgstr "сервер попытался передать чрезмерно большой пакет GSSAPI (%zu > %zu)" -#: libpq/be-secure-gssapi.c:327 +#: libpq/be-secure-gssapi.c:351 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" msgstr "клиент передал чрезмерно большой пакет GSSAPI (%zu > %zu)" -#: libpq/be-secure-gssapi.c:361 +#: libpq/be-secure-gssapi.c:389 msgid "GSSAPI unwrap error" msgstr "ошибка развёртывания сообщения в GSSAPI" -#: libpq/be-secure-gssapi.c:366 +#: libpq/be-secure-gssapi.c:396 #, c-format msgid "incoming GSSAPI message did not use confidentiality" msgstr "входящее сообщение GSSAPI не защищено" -#: libpq/be-secure-gssapi.c:521 +#: libpq/be-secure-gssapi.c:570 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %d)" msgstr "клиент передал чрезмерно большой пакет GSSAPI (%zu > %d)" -#: libpq/be-secure-gssapi.c:543 +#: libpq/be-secure-gssapi.c:594 msgid "could not accept GSSAPI security context" msgstr "принять контекст безопасности GSSAPI не удалось" -#: libpq/be-secure-gssapi.c:630 +#: libpq/be-secure-gssapi.c:689 msgid "GSSAPI size check error" msgstr "ошибка проверки размера в GSSAPI" -#: libpq/be-secure-openssl.c:111 +#: libpq/be-secure-openssl.c:112 #, c-format msgid "could not create SSL context: %s" msgstr "не удалось создать контекст SSL: %s" -#: libpq/be-secure-openssl.c:154 +#: libpq/be-secure-openssl.c:138 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "не удалось загрузить сертификат сервера \"%s\": %s" -#: libpq/be-secure-openssl.c:174 +#: libpq/be-secure-openssl.c:158 #, c-format msgid "" "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "" "файл закрытого ключа \"%s\" нельзя перезагрузить, так как он защищён паролем" -#: libpq/be-secure-openssl.c:179 +#: libpq/be-secure-openssl.c:163 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "не удалось загрузить файл закрытого ключа \"%s\": %s" -#: libpq/be-secure-openssl.c:188 +#: libpq/be-secure-openssl.c:172 #, c-format msgid "check of private key failed: %s" msgstr "ошибка при проверке закрытого ключа: %s" -#: libpq/be-secure-openssl.c:204 +#. translator: first %s is a GUC option name, second %s is its value +#: libpq/be-secure-openssl.c:185 libpq/be-secure-openssl.c:208 +#, c-format +msgid "\"%s\" setting \"%s\" not supported by this build" +msgstr "для параметра \"%s\" значение \"%s\" не поддерживается в данной сборке" + +#: libpq/be-secure-openssl.c:195 #, c-format msgid "could not set minimum SSL protocol version" msgstr "не удалось задать минимальную версию протокола SSL" -#: libpq/be-secure-openssl.c:220 +#: libpq/be-secure-openssl.c:218 #, c-format msgid "could not set maximum SSL protocol version" msgstr "не удалось задать максимальную версию протокола SSL" -#: libpq/be-secure-openssl.c:244 +#: libpq/be-secure-openssl.c:234 #, c-format -msgid "could not set the cipher list (no valid ciphers available)" -msgstr "не удалось установить список шифров (подходящие шифры отсутствуют)" +msgid "could not set SSL protocol version range" +msgstr "не удалось задать диапазон версий протокола SSL" -#: libpq/be-secure-openssl.c:262 +#: libpq/be-secure-openssl.c:235 #, c-format -msgid "could not load root certificate file \"%s\": %s" -msgstr "не удалось загрузить файл корневых сертификатов \"%s\": %s" +msgid "\"%s\" cannot be higher than \"%s\"" +msgstr "Версия \"%s\" не может быть выше \"%s\"" -#: libpq/be-secure-openssl.c:289 +#: libpq/be-secure-openssl.c:259 #, c-format -msgid "SSL certificate revocation list file \"%s\" ignored" -msgstr "файл со списком отзыва сертификатов SSL \"%s\" игнорируется" +msgid "could not set the cipher list (no valid ciphers available)" +msgstr "не удалось установить список шифров (подходящие шифры отсутствуют)" -#: libpq/be-secure-openssl.c:291 +#: libpq/be-secure-openssl.c:277 #, c-format -msgid "SSL library does not support certificate revocation lists." -msgstr "Библиотека SSL не поддерживает списки отзыва сертификатов." +msgid "could not load root certificate file \"%s\": %s" +msgstr "не удалось загрузить файл корневых сертификатов \"%s\": %s" -#: libpq/be-secure-openssl.c:298 +#: libpq/be-secure-openssl.c:304 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "" "не удалось загрузить файл со списком отзыва сертификатов SSL \"%s\": %s" -#: libpq/be-secure-openssl.c:373 +#: libpq/be-secure-openssl.c:380 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "" "инициализировать SSL-подключение не удалось: контекст SSL не установлен" -#: libpq/be-secure-openssl.c:381 +#: libpq/be-secure-openssl.c:388 #, c-format msgid "could not initialize SSL connection: %s" msgstr "инициализировать SSL-подключение не удалось: %s" -#: libpq/be-secure-openssl.c:389 +#: libpq/be-secure-openssl.c:396 #, c-format msgid "could not set SSL socket: %s" msgstr "не удалось создать SSL-сокет: %s" -#: libpq/be-secure-openssl.c:444 +#: libpq/be-secure-openssl.c:451 #, c-format msgid "could not accept SSL connection: %m" msgstr "не удалось принять SSL-подключение: %m" -#: libpq/be-secure-openssl.c:448 libpq/be-secure-openssl.c:459 +#: libpq/be-secure-openssl.c:455 libpq/be-secure-openssl.c:508 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "не удалось принять SSL-подключение: обрыв данных" -#: libpq/be-secure-openssl.c:453 +#: libpq/be-secure-openssl.c:494 #, c-format msgid "could not accept SSL connection: %s" msgstr "не удалось принять SSL-подключение: %s" -#: libpq/be-secure-openssl.c:464 libpq/be-secure-openssl.c:595 -#: libpq/be-secure-openssl.c:659 +#: libpq/be-secure-openssl.c:497 +#, c-format +msgid "" +"This may indicate that the client does not support any SSL protocol version " +"between %s and %s." +msgstr "" +"Это может указывать на то, что клиент не поддерживает ни одну версию " +"протокола SSL между %s и %s." + +#: libpq/be-secure-openssl.c:513 libpq/be-secure-openssl.c:644 +#: libpq/be-secure-openssl.c:708 #, c-format msgid "unrecognized SSL error code: %d" msgstr "нераспознанный код ошибки SSL: %d" -#: libpq/be-secure-openssl.c:506 +#: libpq/be-secure-openssl.c:555 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "Имя SSL-сертификата включает нулевой байт" -#: libpq/be-secure-openssl.c:584 libpq/be-secure-openssl.c:643 +#: libpq/be-secure-openssl.c:633 libpq/be-secure-openssl.c:692 #, c-format msgid "SSL error: %s" msgstr "ошибка SSL: %s" -#: libpq/be-secure-openssl.c:824 +#: libpq/be-secure-openssl.c:873 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "не удалось открыть файл параметров DH \"%s\": %m" -#: libpq/be-secure-openssl.c:836 +#: libpq/be-secure-openssl.c:885 #, c-format msgid "could not load DH parameters file: %s" msgstr "не удалось загрузить файл параметров DH: %s" -#: libpq/be-secure-openssl.c:846 +#: libpq/be-secure-openssl.c:895 #, c-format msgid "invalid DH parameters: %s" msgstr "неверные параметры DH: %s" -#: libpq/be-secure-openssl.c:854 +#: libpq/be-secure-openssl.c:903 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "неверные параметры DH: p - не простое число" -#: libpq/be-secure-openssl.c:862 +#: libpq/be-secure-openssl.c:911 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "" "неверные параметры DH: нет подходящего генератора или небезопасное простое " "число" -#: libpq/be-secure-openssl.c:1017 +#: libpq/be-secure-openssl.c:1067 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: не удалось загрузить параметры DH" -#: libpq/be-secure-openssl.c:1025 +#: libpq/be-secure-openssl.c:1075 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: не удалось задать параметры DH: %s" -#: libpq/be-secure-openssl.c:1049 +#: libpq/be-secure-openssl.c:1102 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: нераспознанное имя кривой: %s" -#: libpq/be-secure-openssl.c:1058 +#: libpq/be-secure-openssl.c:1111 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: не удалось создать ключ" -#: libpq/be-secure-openssl.c:1086 +#: libpq/be-secure-openssl.c:1139 msgid "no SSL error reported" msgstr "нет сообщения об ошибке SSL" -#: libpq/be-secure-openssl.c:1090 +#: libpq/be-secure-openssl.c:1143 #, c-format msgid "SSL error code %lu" msgstr "код ошибки SSL: %lu" -#: libpq/be-secure-openssl.c:1320 -#, c-format -msgid "%s setting %s not supported by this build" -msgstr "для параметра %s значение %s не поддерживается в данной сборке" - -#: libpq/be-secure.c:123 +#: libpq/be-secure.c:122 #, c-format msgid "SSL connection from \"%s\"" msgstr "SSL-подключение от \"%s\"" -#: libpq/be-secure.c:208 libpq/be-secure.c:304 +#: libpq/be-secure.c:207 libpq/be-secure.c:303 #, c-format msgid "terminating connection due to unexpected postmaster exit" msgstr "закрытие подключения из-за неожиданного завершения главного процесса" -#: libpq/crypt.c:52 +#: libpq/crypt.c:49 #, c-format msgid "Role \"%s\" does not exist." msgstr "Роль \"%s\" не существует." -#: libpq/crypt.c:62 +#: libpq/crypt.c:59 #, c-format msgid "User \"%s\" has no password assigned." msgstr "Пользователь \"%s\" не имеет пароля." -#: libpq/crypt.c:80 +#: libpq/crypt.c:77 #, c-format msgid "User \"%s\" has an expired password." msgstr "Срок пароля пользователя \"%s\" истёк." -#: libpq/crypt.c:182 +#: libpq/crypt.c:179 #, c-format msgid "User \"%s\" has a password that cannot be used with MD5 authentication." msgstr "" "Пользователь \"%s\" имеет пароль, неподходящий для аутентификации по MD5." -#: libpq/crypt.c:206 libpq/crypt.c:247 libpq/crypt.c:271 +#: libpq/crypt.c:203 libpq/crypt.c:244 libpq/crypt.c:268 #, c-format msgid "Password does not match for user \"%s\"." msgstr "Пароль не подходит для пользователя \"%s\"." -#: libpq/crypt.c:290 +#: libpq/crypt.c:287 #, c-format msgid "Password of user \"%s\" is in unrecognized format." msgstr "Пароль пользователя \"%s\" представлен в неизвестном формате." @@ -14447,16 +14781,16 @@ msgstr "слишком длинная строка в файле конфигу #: libpq/hba.c:510 libpq/hba.c:867 libpq/hba.c:887 libpq/hba.c:925 #: libpq/hba.c:975 libpq/hba.c:989 libpq/hba.c:1013 libpq/hba.c:1022 #: libpq/hba.c:1035 libpq/hba.c:1056 libpq/hba.c:1069 libpq/hba.c:1089 -#: libpq/hba.c:1111 libpq/hba.c:1123 libpq/hba.c:1179 libpq/hba.c:1199 -#: libpq/hba.c:1213 libpq/hba.c:1232 libpq/hba.c:1243 libpq/hba.c:1258 -#: libpq/hba.c:1276 libpq/hba.c:1292 libpq/hba.c:1304 libpq/hba.c:1341 -#: libpq/hba.c:1382 libpq/hba.c:1395 libpq/hba.c:1417 libpq/hba.c:1430 -#: libpq/hba.c:1442 libpq/hba.c:1460 libpq/hba.c:1510 libpq/hba.c:1554 -#: libpq/hba.c:1565 libpq/hba.c:1581 libpq/hba.c:1598 libpq/hba.c:1608 -#: libpq/hba.c:1666 libpq/hba.c:1704 libpq/hba.c:1726 libpq/hba.c:1738 -#: libpq/hba.c:1825 libpq/hba.c:1843 libpq/hba.c:1937 libpq/hba.c:1956 -#: libpq/hba.c:1985 libpq/hba.c:1998 libpq/hba.c:2021 libpq/hba.c:2043 -#: libpq/hba.c:2057 tsearch/ts_locale.c:190 +#: libpq/hba.c:1111 libpq/hba.c:1123 libpq/hba.c:1182 libpq/hba.c:1202 +#: libpq/hba.c:1216 libpq/hba.c:1236 libpq/hba.c:1247 libpq/hba.c:1262 +#: libpq/hba.c:1281 libpq/hba.c:1297 libpq/hba.c:1309 libpq/hba.c:1346 +#: libpq/hba.c:1387 libpq/hba.c:1400 libpq/hba.c:1422 libpq/hba.c:1434 +#: libpq/hba.c:1452 libpq/hba.c:1502 libpq/hba.c:1546 libpq/hba.c:1557 +#: libpq/hba.c:1573 libpq/hba.c:1590 libpq/hba.c:1600 libpq/hba.c:1658 +#: libpq/hba.c:1696 libpq/hba.c:1718 libpq/hba.c:1730 libpq/hba.c:1817 +#: libpq/hba.c:1835 libpq/hba.c:1929 libpq/hba.c:1948 libpq/hba.c:1977 +#: libpq/hba.c:1990 libpq/hba.c:2013 libpq/hba.c:2035 libpq/hba.c:2049 +#: tsearch/ts_locale.c:217 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "строка %d файла конфигурации \"%s\"" @@ -14563,103 +14897,96 @@ msgstr "для адреса узла указано несколько знач msgid "Specify one address range per line." msgstr "Определите в строке один диапазон адресов." -#: libpq/hba.c:1177 +#: libpq/hba.c:1180 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "неверный IP-адрес \"%s\": %s" -#: libpq/hba.c:1197 +#: libpq/hba.c:1200 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "указать одновременно и имя узла, и маску CIDR нельзя: \"%s\"" -#: libpq/hba.c:1211 +#: libpq/hba.c:1214 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "неверная маска CIDR в адресе \"%s\"" -#: libpq/hba.c:1230 +#: libpq/hba.c:1234 #, c-format msgid "end-of-line before netmask specification" msgstr "конец строки перед определением маски сети" -#: libpq/hba.c:1231 +#: libpq/hba.c:1235 #, c-format msgid "" "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "" "Укажите диапазон адресов в формате CIDR или задайте отдельную маску сети." -#: libpq/hba.c:1242 +#: libpq/hba.c:1246 #, c-format msgid "multiple values specified for netmask" msgstr "для сетевой маски указано несколько значений" -#: libpq/hba.c:1256 +#: libpq/hba.c:1260 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "неверная маска IP \"%s\": %s" -#: libpq/hba.c:1275 +#: libpq/hba.c:1280 #, c-format msgid "IP address and mask do not match" msgstr "IP-адрес не соответствует маске" -#: libpq/hba.c:1291 +#: libpq/hba.c:1296 #, c-format msgid "end-of-line before authentication method" msgstr "конец строки перед методом проверки подлинности" -#: libpq/hba.c:1302 +#: libpq/hba.c:1307 #, c-format msgid "multiple values specified for authentication type" msgstr "для типа проверки подлинности указано несколько значений" -#: libpq/hba.c:1303 +#: libpq/hba.c:1308 #, c-format msgid "Specify exactly one authentication type per line." msgstr "Определите в строке единственный тип проверки подлинности." -#: libpq/hba.c:1380 +#: libpq/hba.c:1385 #, c-format msgid "invalid authentication method \"%s\"" msgstr "неверный метод проверки подлинности \"%s\"" -#: libpq/hba.c:1393 +#: libpq/hba.c:1398 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "" "неверный метод проверки подлинности \"%s\": не поддерживается в этой сборке" -#: libpq/hba.c:1416 +#: libpq/hba.c:1421 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "проверка подлинности gssapi для локальных сокетов не поддерживается" -#: libpq/hba.c:1429 -#, c-format -msgid "GSSAPI encryption only supports gss, trust, or reject authentication" -msgstr "" -"шифрование GSSAPI поддерживается только с методами аутентификации gss, trust " -"и reject" - -#: libpq/hba.c:1441 +#: libpq/hba.c:1433 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "проверка подлинности peer поддерживается только для локальных сокетов" -#: libpq/hba.c:1459 +#: libpq/hba.c:1451 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "" "проверка подлинности cert поддерживается только для подключений hostssl" -#: libpq/hba.c:1509 +#: libpq/hba.c:1501 #, c-format msgid "authentication option not in name=value format: %s" msgstr "параметр проверки подлинности указан не в формате имя=значение: %s" -#: libpq/hba.c:1553 +#: libpq/hba.c:1545 #, c-format msgid "" "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, " @@ -14668,7 +14995,7 @@ msgstr "" "нельзя использовать ldapbasedn, ldapbinddn, ldapbindpasswd, " "ldapsearchattribute, ldapsearchfilter или ldapurl вместе с ldapprefix" -#: libpq/hba.c:1564 +#: libpq/hba.c:1556 #, c-format msgid "" "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix" @@ -14677,134 +15004,134 @@ msgstr "" "для метода проверки подлинности \"ldap\" требуется установить аргументы " "\"ldapbasedn\" и \"ldapprefix\" или \"ldapsuffix\"" -#: libpq/hba.c:1580 +#: libpq/hba.c:1572 #, c-format msgid "cannot use ldapsearchattribute together with ldapsearchfilter" msgstr "нельзя использовать ldapsearchattribute вместе с ldapsearchfilter" -#: libpq/hba.c:1597 +#: libpq/hba.c:1589 #, c-format msgid "list of RADIUS servers cannot be empty" msgstr "список серверов RADIUS не может быть пустым" -#: libpq/hba.c:1607 +#: libpq/hba.c:1599 #, c-format msgid "list of RADIUS secrets cannot be empty" msgstr "список секретов RADIUS не может быть пустым" -#: libpq/hba.c:1660 +#: libpq/hba.c:1652 #, c-format msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" msgstr "" "количество элементов %s (%d) должно равняться 1 или количеству элементов %s " "(%d)" -#: libpq/hba.c:1694 +#: libpq/hba.c:1686 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi и cert" -#: libpq/hba.c:1703 +#: libpq/hba.c:1695 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert можно определить только в строках \"hostssl\"" -#: libpq/hba.c:1725 +#: libpq/hba.c:1717 #, c-format msgid "" -"clientcert can not be set to \"no-verify\" when using \"cert\" authentication" +"clientcert cannot be set to \"no-verify\" when using \"cert\" authentication" msgstr "" "clientcert не может иметь значение \"no-verify\" при использовании проверки " "подлинности \"cert\"" -#: libpq/hba.c:1737 +#: libpq/hba.c:1729 #, c-format msgid "invalid value for clientcert: \"%s\"" msgstr "неверное значение для clientcert: \"%s\"" -#: libpq/hba.c:1771 +#: libpq/hba.c:1763 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "не удалось разобрать URL-адрес LDAP \"%s\": %s" -#: libpq/hba.c:1782 +#: libpq/hba.c:1774 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "неподдерживаемая схема в URL-адресе LDAP: %s" -#: libpq/hba.c:1806 +#: libpq/hba.c:1798 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "URL-адреса LDAP не поддерживаются в этой ОС" -#: libpq/hba.c:1824 +#: libpq/hba.c:1816 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "неверное значение ldapscheme: \"%s\"" -#: libpq/hba.c:1842 +#: libpq/hba.c:1834 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "неверный номер порта LDAP: \"%s\"" -#: libpq/hba.c:1888 libpq/hba.c:1895 +#: libpq/hba.c:1880 libpq/hba.c:1887 msgid "gssapi and sspi" msgstr "gssapi и sspi" -#: libpq/hba.c:1904 libpq/hba.c:1913 +#: libpq/hba.c:1896 libpq/hba.c:1905 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:1935 +#: libpq/hba.c:1927 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "не удалось разобрать список серверов RADIUS \"%s\"" -#: libpq/hba.c:1983 +#: libpq/hba.c:1975 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "не удалось разобрать список портов RADIUS \"%s\"" -#: libpq/hba.c:1997 +#: libpq/hba.c:1989 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "неверный номер порта RADIUS: \"%s\"" -#: libpq/hba.c:2019 +#: libpq/hba.c:2011 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "не удалось разобрать список секретов RADIUS \"%s\"" -#: libpq/hba.c:2041 +#: libpq/hba.c:2033 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "не удалось разобрать список идентификаторов RADIUS \"%s\"" -#: libpq/hba.c:2055 +#: libpq/hba.c:2047 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "нераспознанное имя атрибута проверки подлинности: \"%s\"" -#: libpq/hba.c:2199 libpq/hba.c:2613 guc-file.l:631 +#: libpq/hba.c:2193 libpq/hba.c:2613 guc-file.l:631 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "открыть файл конфигурации \"%s\" не удалось: %m" -#: libpq/hba.c:2250 +#: libpq/hba.c:2244 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "файл конфигурации \"%s\" не содержит записей" -#: libpq/hba.c:2769 +#: libpq/hba.c:2768 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "неверное регулярное выражение \"%s\": %s" -#: libpq/hba.c:2829 +#: libpq/hba.c:2828 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "ошибка при поиске по регулярному выражению для \"%s\": %s" -#: libpq/hba.c:2848 +#: libpq/hba.c:2847 #, c-format msgid "" "regular expression \"%s\" has no subexpressions as requested by " @@ -14813,94 +15140,94 @@ msgstr "" "в регулярном выражении \"%s\" нет подвыражений, требуемых для обратной " "ссылки в \"%s\"" -#: libpq/hba.c:2945 +#: libpq/hba.c:2943 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "" "указанное имя пользователя (%s) не совпадает с именем прошедшего проверку " "(%s)" -#: libpq/hba.c:2965 +#: libpq/hba.c:2963 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "" "нет соответствия в файле сопоставлений \"%s\" для пользователя \"%s\", " "прошедшего проверку как \"%s\"" -#: libpq/hba.c:2998 +#: libpq/hba.c:2996 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "не удалось открыть файл сопоставлений пользователей \"%s\": %m" -#: libpq/pqcomm.c:220 +#: libpq/pqcomm.c:218 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "не удалось перевести сокет в неблокирующий режим: %m" -#: libpq/pqcomm.c:374 +#: libpq/pqcomm.c:369 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "длина пути Unix-сокета \"%s\" превышает предел (%d байт)" -#: libpq/pqcomm.c:395 +#: libpq/pqcomm.c:390 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "перевести имя узла \"%s\", службы \"%s\" в адрес не удалось: %s" -#: libpq/pqcomm.c:399 +#: libpq/pqcomm.c:394 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "не удалось перевести имя службы \"%s\" в адрес: %s" -#: libpq/pqcomm.c:426 +#: libpq/pqcomm.c:421 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "" "не удалось привязаться ко всем запрошенным адресам: превышен предел " "MAXLISTEN (%d)" -#: libpq/pqcomm.c:435 +#: libpq/pqcomm.c:430 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:439 +#: libpq/pqcomm.c:434 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:444 +#: libpq/pqcomm.c:439 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:449 +#: libpq/pqcomm.c:444 #, c-format msgid "unrecognized address family %d" msgstr "нераспознанное семейство адресов: %d" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:475 +#: libpq/pqcomm.c:470 #, c-format msgid "could not create %s socket for address \"%s\": %m" msgstr "не удалось создать сокет %s для адреса \"%s\": %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:501 +#: libpq/pqcomm.c:496 #, c-format msgid "setsockopt(SO_REUSEADDR) failed for %s address \"%s\": %m" msgstr "ошибка в setsockopt(SO_REUSEADDR) для адреса %s \"%s\": %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:518 +#: libpq/pqcomm.c:513 #, c-format msgid "setsockopt(IPV6_V6ONLY) failed for %s address \"%s\": %m" msgstr "ошибка в setsockopt(IPV6_V6ONLY) для адреса %s \"%s\": %m" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:538 +#: libpq/pqcomm.c:533 #, c-format msgid "could not bind %s address \"%s\": %m" msgstr "не удалось привязаться к адресу %s \"%s\": %m" -#: libpq/pqcomm.c:541 +#: libpq/pqcomm.c:536 #, c-format msgid "" "Is another postmaster already running on port %d? If not, remove socket file " @@ -14909,7 +15236,7 @@ msgstr "" "Возможно порт %d занят другим процессом postmaster? Если нет, удалите файл " "\"%s\" и повторите попытку." -#: libpq/pqcomm.c:544 +#: libpq/pqcomm.c:539 #, c-format msgid "" "Is another postmaster already running on port %d? If not, wait a few seconds " @@ -14919,73 +15246,73 @@ msgstr "" "попытку через несколько секунд." #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:577 +#: libpq/pqcomm.c:572 #, c-format msgid "could not listen on %s address \"%s\": %m" msgstr "не удалось привязаться к адресу %s \"%s\": %m" -#: libpq/pqcomm.c:586 +#: libpq/pqcomm.c:581 #, c-format msgid "listening on Unix socket \"%s\"" msgstr "для приёма подключений открыт Unix-сокет \"%s\"" #. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:592 +#: libpq/pqcomm.c:587 #, c-format msgid "listening on %s address \"%s\", port %d" msgstr "для приёма подключений по адресу %s \"%s\" открыт порт %d" -#: libpq/pqcomm.c:675 +#: libpq/pqcomm.c:670 #, c-format msgid "group \"%s\" does not exist" msgstr "группа \"%s\" не существует" -#: libpq/pqcomm.c:685 +#: libpq/pqcomm.c:680 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "не удалось установить группу для файла \"%s\": %m" -#: libpq/pqcomm.c:696 +#: libpq/pqcomm.c:691 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "не удалось установить права доступа для файла \"%s\": %m" -#: libpq/pqcomm.c:726 +#: libpq/pqcomm.c:721 #, c-format msgid "could not accept new connection: %m" msgstr "не удалось принять новое подключение: %m" -#: libpq/pqcomm.c:928 +#: libpq/pqcomm.c:911 #, c-format msgid "there is no client connection" msgstr "нет клиентского подключения" -#: libpq/pqcomm.c:979 libpq/pqcomm.c:1075 +#: libpq/pqcomm.c:962 libpq/pqcomm.c:1058 #, c-format msgid "could not receive data from client: %m" msgstr "не удалось получить данные от клиента: %m" -#: libpq/pqcomm.c:1220 tcop/postgres.c:4074 +#: libpq/pqcomm.c:1203 tcop/postgres.c:4154 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "закрытие подключения из-за потери синхронизации протокола" -#: libpq/pqcomm.c:1286 +#: libpq/pqcomm.c:1269 #, c-format msgid "unexpected EOF within message length word" msgstr "неожиданный обрыв данных в слове длины сообщения" -#: libpq/pqcomm.c:1297 +#: libpq/pqcomm.c:1280 #, c-format msgid "invalid message length" msgstr "неверная длина сообщения" -#: libpq/pqcomm.c:1319 libpq/pqcomm.c:1332 +#: libpq/pqcomm.c:1302 libpq/pqcomm.c:1315 #, c-format msgid "incomplete message from client" msgstr "неполное сообщение от клиента" -#: libpq/pqcomm.c:1465 +#: libpq/pqcomm.c:1448 #, c-format msgid "could not send data to client: %m" msgstr "не удалось послать данные клиенту: %m" @@ -14996,7 +15323,7 @@ msgid "no data left in message" msgstr "в сообщении не осталось данных" #: libpq/pqformat.c:517 libpq/pqformat.c:535 libpq/pqformat.c:556 -#: utils/adt/arrayfuncs.c:1470 utils/adt/rowtypes.c:567 +#: utils/adt/arrayfuncs.c:1471 utils/adt/rowtypes.c:567 #, c-format msgid "insufficient data left in message" msgstr "недостаточно данных осталось в сообщении" @@ -15011,12 +15338,12 @@ msgstr "неверная строка в сообщении" msgid "invalid message format" msgstr "неверный формат сообщения" -#: main/main.c:264 +#: main/main.c:246 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: ошибка WSAStartup: %d\n" -#: main/main.c:328 +#: main/main.c:310 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -15025,127 +15352,127 @@ msgstr "" "%s - сервер PostgreSQL.\n" "\n" -#: main/main.c:329 +#: main/main.c:311 #, c-format msgid "" "Usage:\n" " %s [OPTION]...\n" "\n" msgstr "" -"Пример запуска:\n" +"Использование:\n" " %s [ПАРАМЕТР]...\n" "\n" -#: main/main.c:330 +#: main/main.c:312 #, c-format msgid "Options:\n" msgstr "Параметры:\n" -#: main/main.c:331 +#: main/main.c:313 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B ЧИСЛО_БУФ число разделяемых буферов\n" -#: main/main.c:332 +#: main/main.c:314 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c ИМЯ=ЗНАЧЕНИЕ установить параметр выполнения\n" -#: main/main.c:333 +#: main/main.c:315 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C ИМЯ вывести значение параметра выполнения и выйти\n" -#: main/main.c:334 +#: main/main.c:316 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 уровень отладочных сообщений\n" -#: main/main.c:335 +#: main/main.c:317 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D КАТАЛОГ каталог с данными\n" # well-spelled: ДМГ -#: main/main.c:336 +#: main/main.c:318 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e использовать европейский формат дат (ДМГ)\n" -#: main/main.c:337 +#: main/main.c:319 #, c-format msgid " -F turn fsync off\n" msgstr " -F выключить синхронизацию с ФС\n" -#: main/main.c:338 +#: main/main.c:320 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h ИМЯ имя или IP-адрес для приёма сетевых соединений\n" -#: main/main.c:339 +#: main/main.c:321 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i включить соединения TCP/IP\n" -#: main/main.c:340 +#: main/main.c:322 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k КАТАЛОГ расположение Unix-сокетов\n" -#: main/main.c:342 +#: main/main.c:324 #, c-format msgid " -l enable SSL connections\n" msgstr " -l разрешить SSL-подключения\n" # well-spelled: ПОДКЛ -#: main/main.c:344 +#: main/main.c:326 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N МАКС_ПОДКЛ предельное число подключений\n" -#: main/main.c:345 +#: main/main.c:327 #, c-format msgid "" " -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n" msgstr "" " -o ПАРАМЕТРЫ параметры для серверных процессов (уже неактуально)\n" -#: main/main.c:346 +#: main/main.c:328 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p ПОРТ номер порта для приёма подключений\n" -#: main/main.c:347 +#: main/main.c:329 #, c-format msgid " -s show statistics after each query\n" msgstr " -s показывать статистику после каждого запроса\n" -#: main/main.c:348 +#: main/main.c:330 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S РАБ_ПАМЯТЬ задать объём памяти для сортировки (в КБ)\n" -#: main/main.c:349 +#: main/main.c:331 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: main/main.c:350 +#: main/main.c:332 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --ИМЯ=ЗНАЧЕНИЕ установить параметр выполнения\n" -#: main/main.c:351 +#: main/main.c:333 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config вывести параметры конфигурации и выйти\n" -#: main/main.c:352 +#: main/main.c:334 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: main/main.c:354 +#: main/main.c:336 #, c-format msgid "" "\n" @@ -15154,12 +15481,12 @@ msgstr "" "\n" "Параметры для разработчиков:\n" -#: main/main.c:355 +#: main/main.c:337 #, c-format msgid " -f s|i|n|m|h forbid use of some plan types\n" msgstr " -f s|i|n|m|h запретить некоторые типы планов\n" -#: main/main.c:356 +#: main/main.c:338 #, c-format msgid "" " -n do not reinitialize shared memory after abnormal exit\n" @@ -15167,22 +15494,22 @@ msgstr "" " -n не переинициализировать разделяемую память после\n" " аварийного выхода\n" -#: main/main.c:357 +#: main/main.c:339 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O разрешить изменять структуру системных таблиц\n" -#: main/main.c:358 +#: main/main.c:340 #, c-format msgid " -P disable system indexes\n" msgstr " -P отключить системные индексы\n" -#: main/main.c:359 +#: main/main.c:341 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex показать время каждого запроса\n" -#: main/main.c:360 +#: main/main.c:342 #, c-format msgid "" " -T send SIGSTOP to all backend processes if one dies\n" @@ -15190,13 +15517,13 @@ msgstr "" " -T посылать сигнал SIGSTOP всем серверным процессам\n" " при отключении одного\n" -#: main/main.c:361 +#: main/main.c:343 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr "" " -W СЕК ждать заданное число секунд для подключения отладчика\n" -#: main/main.c:363 +#: main/main.c:345 #, c-format msgid "" "\n" @@ -15205,7 +15532,7 @@ msgstr "" "\n" "Параметры для монопольного режима:\n" -#: main/main.c:364 +#: main/main.c:346 #, c-format msgid "" " --single selects single-user mode (must be first argument)\n" @@ -15213,22 +15540,22 @@ msgstr "" " --single включить монопольный режим\n" " (этот аргумент должен быть первым)\n" -#: main/main.c:365 +#: main/main.c:347 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " ИМЯ_БД база данных (по умолчанию - имя пользователя)\n" -#: main/main.c:366 +#: main/main.c:348 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 переопределить уровень отладочных сообщений\n" -#: main/main.c:367 +#: main/main.c:349 #, c-format msgid " -E echo statement before execution\n" msgstr " -E выводить SQL-операторы перед выполнением\n" -#: main/main.c:368 +#: main/main.c:350 #, c-format msgid "" " -j do not use newline as interactive query delimiter\n" @@ -15236,12 +15563,12 @@ msgstr "" " -j не считать конец строки разделителем интерактивных " "запросов\n" -#: main/main.c:369 main/main.c:374 +#: main/main.c:351 main/main.c:356 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r ИМЯ_ФАЙЛА перенаправить STDOUT и STDERR в указанный файл\n" -#: main/main.c:371 +#: main/main.c:353 #, c-format msgid "" "\n" @@ -15250,7 +15577,7 @@ msgstr "" "\n" "Параметры для режима инициализации:\n" -#: main/main.c:372 +#: main/main.c:354 #, c-format msgid "" " --boot selects bootstrapping mode (must be first argument)\n" @@ -15258,7 +15585,7 @@ msgstr "" " --boot включить режим инициализации\n" " (этот аргумент должен быть первым)\n" -#: main/main.c:373 +#: main/main.c:355 #, c-format msgid "" " DBNAME database name (mandatory argument in bootstrapping " @@ -15266,12 +15593,12 @@ msgid "" msgstr "" " ИМЯ_БД имя базы данных (необходимо в режиме инициализации)\n" -#: main/main.c:375 +#: main/main.c:357 #, c-format msgid " -x NUM internal use\n" msgstr " -x ЧИСЛО параметр для внутреннего использования\n" -#: main/main.c:377 +#: main/main.c:359 #, c-format msgid "" "\n" @@ -15279,16 +15606,21 @@ msgid "" "configuration settings and how to set them on the command line or in\n" "the configuration file.\n" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" "Полный список параметров конфигурации выполнения и варианты\n" "их установки через командную строку или в файле конфигурации\n" "вы можете найти в документации.\n" "\n" -"Об ошибках сообщайте по адресу .\n" +"Об ошибках сообщайте по адресу <%s>.\n" -#: main/main.c:391 +#: main/main.c:363 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: main/main.c:374 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -15301,12 +15633,12 @@ msgstr "" "должен запускать обычный пользователь. Подробнее о том, как\n" "правильно запускать сервер, вы можете узнать в документации.\n" -#: main/main.c:408 +#: main/main.c:391 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: фактический и эффективный ID пользователя должны совпадать\n" -#: main/main.c:415 +#: main/main.c:398 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -15331,14 +15663,25 @@ msgstr "расширенный тип узла \"%s\" уже существуе msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "методы расширенного узла \"%s\" не зарегистрированы" -#: nodes/nodeFuncs.c:123 nodes/nodeFuncs.c:154 parser/parse_coerce.c:1915 -#: parser/parse_coerce.c:1943 parser/parse_coerce.c:2019 -#: parser/parse_expr.c:2201 parser/parse_func.c:705 parser/parse_oper.c:967 +#: nodes/nodeFuncs.c:122 nodes/nodeFuncs.c:153 parser/parse_coerce.c:2208 +#: parser/parse_coerce.c:2317 parser/parse_coerce.c:2352 +#: parser/parse_expr.c:2207 parser/parse_func.c:701 parser/parse_oper.c:967 +#: utils/fmgr/funcapi.c:528 #, c-format msgid "could not find array type for data type %s" msgstr "тип массива для типа данных %s не найден" -#: optimizer/path/joinrels.c:833 +#: nodes/params.c:359 +#, c-format +msgid "portal \"%s\" with parameters: %s" +msgstr "портал \"%s\" с параметрами: %s" + +#: nodes/params.c:362 +#, c-format +msgid "unnamed portal with parameters: %s" +msgstr "неименованный портал с параметрами: %s" + +#: optimizer/path/joinrels.c:855 #, c-format msgid "" "FULL JOIN is only supported with merge-joinable or hash-joinable join " @@ -15348,25 +15691,25 @@ msgstr "" "слиянием или хеш-соединение" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1195 +#: optimizer/plan/initsplan.c:1198 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s не может применяться к NULL-содержащей стороне внешнего соединения" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1912 parser/analyze.c:1644 parser/analyze.c:1842 -#: parser/analyze.c:2700 +#: optimizer/plan/planner.c:1922 parser/analyze.c:1639 parser/analyze.c:1855 +#: parser/analyze.c:2682 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s несовместимо с UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:2498 optimizer/plan/planner.c:4157 +#: optimizer/plan/planner.c:2509 optimizer/plan/planner.c:4162 #, c-format msgid "could not implement GROUP BY" msgstr "не удалось реализовать GROUP BY" -#: optimizer/plan/planner.c:2499 optimizer/plan/planner.c:4158 -#: optimizer/plan/planner.c:4896 optimizer/prep/prepunion.c:1042 +#: optimizer/plan/planner.c:2510 optimizer/plan/planner.c:4163 +#: optimizer/plan/planner.c:4890 optimizer/prep/prepunion.c:1045 #, c-format msgid "" "Some of the datatypes only support hashing, while others only support " @@ -15375,82 +15718,82 @@ msgstr "" "Одни типы данных поддерживают только хеширование, а другие - только " "сортировку." -#: optimizer/plan/planner.c:4895 +#: optimizer/plan/planner.c:4889 #, c-format msgid "could not implement DISTINCT" msgstr "не удалось реализовать DISTINCT" -#: optimizer/plan/planner.c:5630 +#: optimizer/plan/planner.c:5737 #, c-format msgid "could not implement window PARTITION BY" msgstr "не удалось реализовать PARTITION BY для окна" -#: optimizer/plan/planner.c:5631 +#: optimizer/plan/planner.c:5738 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Столбцы, разбивающие окна, должны иметь сортируемые типы данных." -#: optimizer/plan/planner.c:5635 +#: optimizer/plan/planner.c:5742 #, c-format msgid "could not implement window ORDER BY" msgstr "не удалось реализовать ORDER BY для окна" -#: optimizer/plan/planner.c:5636 +#: optimizer/plan/planner.c:5743 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Столбцы, сортирующие окна, должны иметь сортируемые типы данных." -#: optimizer/plan/setrefs.c:425 +#: optimizer/plan/setrefs.c:451 #, c-format msgid "too many range table entries" msgstr "слишком много элементов RTE" -#: optimizer/prep/prepunion.c:505 +#: optimizer/prep/prepunion.c:508 #, c-format msgid "could not implement recursive UNION" msgstr "не удалось реализовать рекурсивный UNION" -#: optimizer/prep/prepunion.c:506 +#: optimizer/prep/prepunion.c:509 #, c-format msgid "All column datatypes must be hashable." msgstr "Все столбцы должны иметь хешируемые типы данных." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1041 +#: optimizer/prep/prepunion.c:1044 #, c-format msgid "could not implement %s" msgstr "не удалось реализовать %s" -#: optimizer/util/clauses.c:4781 +#: optimizer/util/clauses.c:4772 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "внедрённая в код SQL-функция \"%s\"" -#: optimizer/util/plancat.c:130 +#: optimizer/util/plancat.c:133 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "" "обращаться к временным или нежурналируемым отношениям в процессе " "восстановления нельзя" -#: optimizer/util/plancat.c:650 +#: optimizer/util/plancat.c:665 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "" "указания со ссылкой на всю строку для выбора уникального индекса не " "поддерживаются" -#: optimizer/util/plancat.c:667 +#: optimizer/util/plancat.c:682 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "ограничению в ON CONFLICT не соответствует индекс" -#: optimizer/util/plancat.c:717 +#: optimizer/util/plancat.c:732 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "ON CONFLICT DO UPDATE не поддерживается с ограничениями-исключениями" -#: optimizer/util/plancat.c:822 +#: optimizer/util/plancat.c:837 #, c-format msgid "" "there is no unique or exclusion constraint matching the ON CONFLICT " @@ -15459,22 +15802,22 @@ msgstr "" "нет уникального ограничения или ограничения-исключения, соответствующего " "указанию ON CONFLICT" -#: parser/analyze.c:711 parser/analyze.c:1407 +#: parser/analyze.c:705 parser/analyze.c:1401 #, c-format msgid "VALUES lists must all be the same length" msgstr "списки VALUES должны иметь одинаковую длину" -#: parser/analyze.c:914 +#: parser/analyze.c:904 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT содержит больше выражений, чем целевых столбцов" -#: parser/analyze.c:932 +#: parser/analyze.c:922 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERT содержит больше целевых столбцов, чем выражений" -#: parser/analyze.c:936 +#: parser/analyze.c:926 #, c-format msgid "" "The insertion source is a row expression containing the same number of " @@ -15483,29 +15826,29 @@ msgstr "" "Источником данных является строка, включающая столько же столбцов, сколько " "требуется для INSERT. Вы намеренно использовали скобки?" -#: parser/analyze.c:1218 parser/analyze.c:1617 +#: parser/analyze.c:1210 parser/analyze.c:1612 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO здесь не допускается" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1549 parser/analyze.c:2879 +#: parser/analyze.c:1542 parser/analyze.c:2861 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s нельзя применять к VALUES" -#: parser/analyze.c:1767 +#: parser/analyze.c:1777 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "неверное предложение UNION/INTERSECT/EXCEPT ORDER BY" -#: parser/analyze.c:1768 +#: parser/analyze.c:1778 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "" "Допустимо использование только имён столбцов, но не выражений или функций." -#: parser/analyze.c:1769 +#: parser/analyze.c:1779 #, c-format msgid "" "Add the expression/function to every SELECT, or move the UNION into a FROM " @@ -15514,12 +15857,12 @@ msgstr "" "Добавьте выражение/функцию в каждый SELECT или перенесите UNION в " "предложение FROM." -#: parser/analyze.c:1832 +#: parser/analyze.c:1845 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTO можно добавить только в первый SELECT в UNION/INTERSECT/EXCEPT" -#: parser/analyze.c:1904 +#: parser/analyze.c:1917 #, c-format msgid "" "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of " @@ -15528,154 +15871,154 @@ msgstr "" "оператор, составляющий UNION/INTERSECT/EXCEPT, не может ссылаться на другие " "отношения на том же уровне запроса" -#: parser/analyze.c:1993 +#: parser/analyze.c:2004 #, c-format msgid "each %s query must have the same number of columns" msgstr "все запросы в %s должны возвращать одинаковое число столбцов" -#: parser/analyze.c:2411 +#: parser/analyze.c:2393 #, c-format msgid "RETURNING must have at least one column" msgstr "в RETURNING должен быть минимум один столбец" -#: parser/analyze.c:2452 +#: parser/analyze.c:2434 #, c-format msgid "cannot specify both SCROLL and NO SCROLL" msgstr "противоречивые указания SCROLL и NO SCROLL" -#: parser/analyze.c:2471 +#: parser/analyze.c:2453 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR не может содержать операторы, изменяющие данные, в WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2479 +#: parser/analyze.c:2461 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s не поддерживается" -#: parser/analyze.c:2482 +#: parser/analyze.c:2464 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "Сохраняемые курсоры должны быть READ ONLY." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2490 +#: parser/analyze.c:2472 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s не поддерживается" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2501 +#: parser/analyze.c:2483 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not supported" msgstr "DECLARE INSENSITIVE CURSOR ... %s не поддерживается" -#: parser/analyze.c:2504 +#: parser/analyze.c:2486 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Независимые курсоры должны быть READ ONLY." -#: parser/analyze.c:2570 +#: parser/analyze.c:2552 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "" "в материализованных представлениях не должны использоваться операторы, " "изменяющие данные в WITH" -#: parser/analyze.c:2580 +#: parser/analyze.c:2562 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "" "в материализованных представлениях не должны использоваться временные " "таблицы и представления" -#: parser/analyze.c:2590 +#: parser/analyze.c:2572 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "" "определять материализованные представления со связанными параметрами нельзя" -#: parser/analyze.c:2602 +#: parser/analyze.c:2584 #, c-format msgid "materialized views cannot be unlogged" msgstr "материализованные представления не могут быть нежурналируемыми" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2707 +#: parser/analyze.c:2689 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s несовместимо с предложением DISTINCT" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2714 +#: parser/analyze.c:2696 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s несовместимо с предложением GROUP BY" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2721 +#: parser/analyze.c:2703 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s несовместимо с предложением HAVING" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2728 +#: parser/analyze.c:2710 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s несовместимо с агрегатными функциями" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2735 +#: parser/analyze.c:2717 #, c-format msgid "%s is not allowed with window functions" msgstr "%s несовместимо с оконными функциями" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2742 +#: parser/analyze.c:2724 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "" "%s не допускается с функциями, возвращающие множества, в списке результатов" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2821 +#: parser/analyze.c:2803 #, c-format msgid "%s must specify unqualified relation names" msgstr "для %s нужно указывать неполные имена отношений" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2852 +#: parser/analyze.c:2834 #, c-format msgid "%s cannot be applied to a join" msgstr "%s нельзя применить к соединению" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2861 +#: parser/analyze.c:2843 #, c-format msgid "%s cannot be applied to a function" msgstr "%s нельзя применить к функции" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2870 +#: parser/analyze.c:2852 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s нельзя применить к табличной функции" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2888 +#: parser/analyze.c:2870 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s нельзя применить к запросу WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2897 +#: parser/analyze.c:2879 #, c-format msgid "%s cannot be applied to a named tuplestore" -msgstr "%s нельзя применить к именованному источнику кортежей" +msgstr "%s нельзя применить к именованному хранилищу кортежей" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2917 +#: parser/analyze.c:2899 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "отношение \"%s\" в определении %s отсутствует в предложении FROM" @@ -15854,7 +16197,7 @@ msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "операции группировки нельзя применять в условиях COPY FROM WHERE" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:567 parser/parse_clause.c:1778 +#: parser/parse_agg.c:567 parser/parse_clause.c:1828 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "агрегатные функции нельзя применять в конструкции %s" @@ -15881,8 +16224,8 @@ msgstr "" "вызовы агрегатных функций не могут включать вызовы функций, возвращающих " "множества" -#: parser/parse_agg.c:758 parser/parse_expr.c:1839 parser/parse_expr.c:2328 -#: parser/parse_func.c:876 +#: parser/parse_agg.c:758 parser/parse_expr.c:1845 parser/parse_expr.c:2332 +#: parser/parse_func.c:872 #, c-format msgid "" "You might be able to move the set-returning function into a LATERAL FROM " @@ -15961,12 +16304,12 @@ msgid "window functions are not allowed in column generation expressions" msgstr "оконные функции нельзя применять в выражениях генерируемых столбцов" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:954 parser/parse_clause.c:1787 +#: parser/parse_agg.c:954 parser/parse_clause.c:1837 #, c-format msgid "window functions are not allowed in %s" msgstr "оконные функции нельзя применять в конструкции %s" -#: parser/parse_agg.c:988 parser/parse_clause.c:2623 +#: parser/parse_agg.c:988 parser/parse_clause.c:2671 #, c-format msgid "window \"%s\" does not exist" msgstr "окно \"%s\" не существует" @@ -16015,25 +16358,25 @@ msgstr "" "аргументами GROUPING должны быть выражения группирования для " "соответствующего уровня запроса" -#: parser/parse_clause.c:198 +#: parser/parse_clause.c:191 #, c-format msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "отношение \"%s\" не может быть целевым в операторе, изменяющем данные" -#: parser/parse_clause.c:575 parser/parse_clause.c:603 parser/parse_func.c:2439 +#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2424 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "" "функции, возвращающие множества, должны находиться на верхнем уровне FROM" -#: parser/parse_clause.c:615 +#: parser/parse_clause.c:611 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "" "для одной и той же функции нельзя задать разные списки с определениями " "столбцов" -#: parser/parse_clause.c:648 +#: parser/parse_clause.c:644 #, c-format msgid "" "ROWS FROM() with multiple functions cannot have a column definition list" @@ -16041,7 +16384,7 @@ msgstr "" "у ROWS FROM() с несколькими функциями не может быть списка с определениями " "столбцов" -#: parser/parse_clause.c:649 +#: parser/parse_clause.c:645 #, c-format msgid "" "Put a separate column definition list for each function inside ROWS FROM()." @@ -16049,14 +16392,14 @@ msgstr "" "Добавьте отдельные списки с определениями столбцов для каждой функции в ROWS " "FROM()." -#: parser/parse_clause.c:655 +#: parser/parse_clause.c:651 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "" "у UNNEST() с несколькими аргументами не может быть списка с определениями " "столбцов" -#: parser/parse_clause.c:656 +#: parser/parse_clause.c:652 #, c-format msgid "" "Use separate UNNEST() calls inside ROWS FROM(), and attach a column " @@ -16065,43 +16408,43 @@ msgstr "" "Напишите отдельные вызовы UNNEST() внутри ROWS FROM() и добавьте список с " "определениями столбцов к каждому." -#: parser/parse_clause.c:663 +#: parser/parse_clause.c:659 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "" "WITH ORDINALITY нельзя использовать со списком с определениями столбцов" -#: parser/parse_clause.c:664 +#: parser/parse_clause.c:660 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "Поместите список с определениями столбцов внутрь ROWS FROM()." -#: parser/parse_clause.c:767 +#: parser/parse_clause.c:760 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "FOR ORDINALITY допускается только для одного столбца" -#: parser/parse_clause.c:828 +#: parser/parse_clause.c:821 #, c-format msgid "column name \"%s\" is not unique" msgstr "имя столбца \"%s\" не уникально" -#: parser/parse_clause.c:870 +#: parser/parse_clause.c:863 #, c-format msgid "namespace name \"%s\" is not unique" msgstr "имя пространства имён \"%s\" не уникально" -#: parser/parse_clause.c:880 +#: parser/parse_clause.c:873 #, c-format msgid "only one default namespace is allowed" msgstr "допускается только одно пространство имён по умолчанию" -#: parser/parse_clause.c:942 +#: parser/parse_clause.c:933 #, c-format msgid "tablesample method %s does not exist" msgstr "метод %s для получения выборки не существует" -#: parser/parse_clause.c:964 +#: parser/parse_clause.c:955 #, c-format msgid "tablesample method %s requires %d argument, not %d" msgid_plural "tablesample method %s requires %d arguments, not %d" @@ -16109,103 +16452,109 @@ msgstr[0] "метод %s для получения выборки требует msgstr[1] "метод %s для получения выборки требует аргументов: %d, получено: %d" msgstr[2] "метод %s для получения выборки требует аргументов: %d, получено: %d" -#: parser/parse_clause.c:998 +#: parser/parse_clause.c:989 #, c-format msgid "tablesample method %s does not support REPEATABLE" msgstr "метод %s для получения выборки не поддерживает REPEATABLE" -#: parser/parse_clause.c:1168 +#: parser/parse_clause.c:1135 #, c-format msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "" "предложение TABLESAMPLE можно применять только к таблицам и " "материализованным представлениям" -#: parser/parse_clause.c:1338 +#: parser/parse_clause.c:1318 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "имя столбца \"%s\" фигурирует в предложении USING неоднократно" -#: parser/parse_clause.c:1353 +#: parser/parse_clause.c:1333 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "имя общего столбца \"%s\" фигурирует в таблице слева неоднократно" -#: parser/parse_clause.c:1362 +#: parser/parse_clause.c:1342 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "в таблице слева нет столбца \"%s\", указанного в предложении USING" -#: parser/parse_clause.c:1376 +#: parser/parse_clause.c:1357 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "имя общего столбца \"%s\" фигурирует в таблице справа неоднократно" -#: parser/parse_clause.c:1385 +#: parser/parse_clause.c:1366 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "в таблице справа нет столбца \"%s\", указанного в предложении USING" -#: parser/parse_clause.c:1439 +#: parser/parse_clause.c:1447 #, c-format msgid "column alias list for \"%s\" has too many entries" msgstr "слишком много записей в списке псевдонимов столбца \"%s\"" +#: parser/parse_clause.c:1773 +#, c-format +msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" +msgstr "" +"количество строк в FETCH FIRST ... WITH TIES должно быть отличным от NULL" + #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1748 +#: parser/parse_clause.c:1798 #, c-format msgid "argument of %s must not contain variables" msgstr "аргумент %s не может содержать переменные" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1913 +#: parser/parse_clause.c:1963 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "выражение %s \"%s\" неоднозначно" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1942 +#: parser/parse_clause.c:1992 #, c-format msgid "non-integer constant in %s" msgstr "не целочисленная константа в %s" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1964 +#: parser/parse_clause.c:2014 #, c-format msgid "%s position %d is not in select list" msgstr "в списке выборки %s нет элемента %d" -#: parser/parse_clause.c:2405 +#: parser/parse_clause.c:2453 #, c-format msgid "CUBE is limited to 12 elements" msgstr "CUBE имеет ограничение в 12 элементов" -#: parser/parse_clause.c:2611 +#: parser/parse_clause.c:2659 #, c-format msgid "window \"%s\" is already defined" msgstr "окно \"%s\" уже определено" -#: parser/parse_clause.c:2672 +#: parser/parse_clause.c:2720 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "переопределить предложение PARTITION BY для окна \"%s\" нельзя" -#: parser/parse_clause.c:2684 +#: parser/parse_clause.c:2732 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "переопределить предложение ORDER BY для окна \"%s\" нельзя" -#: parser/parse_clause.c:2714 parser/parse_clause.c:2720 +#: parser/parse_clause.c:2762 parser/parse_clause.c:2768 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "скопировать окно \"%s\", имеющее предложение рамки, нельзя" -#: parser/parse_clause.c:2722 +#: parser/parse_clause.c:2770 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Уберите скобки в предложении OVER." -#: parser/parse_clause.c:2742 +#: parser/parse_clause.c:2790 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" @@ -16213,12 +16562,12 @@ msgstr "" "для RANGE со смещением PRECEDING/FOLLOWING требуется ровно один столбец в " "ORDER BY" -#: parser/parse_clause.c:2765 +#: parser/parse_clause.c:2813 #, c-format msgid "GROUPS mode requires an ORDER BY clause" msgstr "для режима GROUPS требуется предложение ORDER BY" -#: parser/parse_clause.c:2835 +#: parser/parse_clause.c:2883 #, c-format msgid "" "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument " @@ -16227,68 +16576,68 @@ msgstr "" "для агрегатной функции с DISTINCT, выражения ORDER BY должны быть в списке " "аргументов" -#: parser/parse_clause.c:2836 +#: parser/parse_clause.c:2884 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "" "в конструкции SELECT DISTINCT выражения ORDER BY должны быть в списке выборки" -#: parser/parse_clause.c:2868 +#: parser/parse_clause.c:2916 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "агрегатной функции с DISTINCT нужен минимум один аргумент" -#: parser/parse_clause.c:2869 +#: parser/parse_clause.c:2917 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "в SELECT DISTINCT нужен минимум один столбец" -#: parser/parse_clause.c:2935 parser/parse_clause.c:2967 +#: parser/parse_clause.c:2983 parser/parse_clause.c:3015 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "" "выражения SELECT DISTINCT ON должны соответствовать начальным выражениям " "ORDER BY" -#: parser/parse_clause.c:3045 +#: parser/parse_clause.c:3093 #, c-format msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "ASC/DESC нельзя использовать в ON CONFLICT" -#: parser/parse_clause.c:3051 +#: parser/parse_clause.c:3099 #, c-format msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "NULLS FIRST/LAST нельзя использовать в ON CONFLICT" -#: parser/parse_clause.c:3130 +#: parser/parse_clause.c:3178 #, c-format msgid "" "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "" "в ON CONFLICT DO UPDATE требуется наводящее указание или имя ограничения" -#: parser/parse_clause.c:3131 +#: parser/parse_clause.c:3179 #, c-format msgid "For example, ON CONFLICT (column_name)." msgstr "Например: ON CONFLICT (имя_столбца)." -#: parser/parse_clause.c:3142 +#: parser/parse_clause.c:3190 #, c-format msgid "ON CONFLICT is not supported with system catalog tables" msgstr "ON CONFLICT с таблицами системного каталога не поддерживается" -#: parser/parse_clause.c:3150 +#: parser/parse_clause.c:3198 #, c-format msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" msgstr "" "ON CONFLICT не поддерживается для таблицы \"%s\", служащей таблицей каталога" -#: parser/parse_clause.c:3293 +#: parser/parse_clause.c:3341 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "оператор %s не годится для сортировки" -#: parser/parse_clause.c:3295 +#: parser/parse_clause.c:3343 #, c-format msgid "" "Ordering operators must be \"<\" or \">\" members of btree operator families." @@ -16296,14 +16645,14 @@ msgstr "" "Операторы сортировки должны быть членами \"<\" или \">\" семейств операторов " "btree." -#: parser/parse_clause.c:3606 +#: parser/parse_clause.c:3654 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" msgstr "" "RANGE со смещением PRECEDING/FOLLOWING не поддерживается для типа столбца %s" -#: parser/parse_clause.c:3612 +#: parser/parse_clause.c:3660 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s " @@ -16312,12 +16661,12 @@ msgstr "" "RANGE со смещением PRECEDING/FOLLOWING не поддерживается для типа столбца %s " "и типа смещения %s" -#: parser/parse_clause.c:3615 +#: parser/parse_clause.c:3663 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "Приведите значение смещения к подходящему типу." -#: parser/parse_clause.c:3620 +#: parser/parse_clause.c:3668 #, c-format msgid "" "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for " @@ -16326,114 +16675,174 @@ msgstr "" "RANGE со смещением PRECEDING/FOLLOWING допускает несколько интерпретаций для " "типа столбца %s и типа смещения %s" -#: parser/parse_clause.c:3623 +#: parser/parse_clause.c:3671 #, c-format msgid "Cast the offset value to the exact intended type." msgstr "Приведите значение смещения в точности к желаемому типу." -#: parser/parse_coerce.c:1022 parser/parse_coerce.c:1060 -#: parser/parse_coerce.c:1078 parser/parse_coerce.c:1093 -#: parser/parse_expr.c:2235 parser/parse_expr.c:2823 parser/parse_target.c:962 +#: parser/parse_coerce.c:1024 parser/parse_coerce.c:1062 +#: parser/parse_coerce.c:1080 parser/parse_coerce.c:1095 +#: parser/parse_expr.c:2241 parser/parse_expr.c:2819 parser/parse_target.c:967 #, c-format msgid "cannot cast type %s to %s" msgstr "привести тип %s к %s нельзя" -#: parser/parse_coerce.c:1063 +#: parser/parse_coerce.c:1065 #, c-format msgid "Input has too few columns." msgstr "Во входных данных недостаточно столбцов." -#: parser/parse_coerce.c:1081 +#: parser/parse_coerce.c:1083 #, c-format msgid "Cannot cast type %s to %s in column %d." msgstr "Не удалось привести тип %s к %s в столбце %d." -#: parser/parse_coerce.c:1096 +#: parser/parse_coerce.c:1098 #, c-format msgid "Input has too many columns." msgstr "Во входных данных больше столбцов." #. translator: first %s is name of a SQL construct, eg WHERE #. translator: first %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1151 parser/parse_coerce.c:1199 +#: parser/parse_coerce.c:1153 parser/parse_coerce.c:1201 #, c-format msgid "argument of %s must be type %s, not type %s" msgstr "аргумент конструкции %s должен иметь тип %s, а не %s" #. translator: %s is name of a SQL construct, eg WHERE #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1162 parser/parse_coerce.c:1211 +#: parser/parse_coerce.c:1164 parser/parse_coerce.c:1213 #, c-format msgid "argument of %s must not return a set" msgstr "аргумент конструкции %s не должен возвращать множество" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1351 +#: parser/parse_coerce.c:1353 #, c-format msgid "%s types %s and %s cannot be matched" -msgstr "в конструкции %s нельзя обобщить типы %s и %s" +msgstr "в конструкции %s типы %s и %s не имеют общего" + +#: parser/parse_coerce.c:1465 +#, c-format +msgid "argument types %s and %s cannot be matched" +msgstr "типы аргументов %s и %s не имеют общего" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1418 +#: parser/parse_coerce.c:1517 #, c-format msgid "%s could not convert type %s to %s" msgstr "в конструкции %s нельзя преобразовать тип %s в %s" -#: parser/parse_coerce.c:1720 +#: parser/parse_coerce.c:1934 #, c-format msgid "arguments declared \"anyelement\" are not all alike" msgstr "аргументы, объявленные как \"anyelement\", должны быть однотипными" -#: parser/parse_coerce.c:1740 +#: parser/parse_coerce.c:1954 #, c-format msgid "arguments declared \"anyarray\" are not all alike" msgstr "аргументы, объявленные как \"anyarray\", должны быть однотипными" -#: parser/parse_coerce.c:1760 +#: parser/parse_coerce.c:1974 #, c-format msgid "arguments declared \"anyrange\" are not all alike" msgstr "аргументы, объявленные как \"anyrange\", должны быть однотипными" -#: parser/parse_coerce.c:1789 parser/parse_coerce.c:2004 -#: parser/parse_coerce.c:2038 +#: parser/parse_coerce.c:2008 parser/parse_coerce.c:2088 +#: utils/fmgr/funcapi.c:487 #, c-format msgid "argument declared %s is not an array but type %s" msgstr "аргумент, объявленный как \"%s\", оказался не массивом, а типом %s" -#: parser/parse_coerce.c:1805 parser/parse_coerce.c:1844 +#: parser/parse_coerce.c:2029 #, c-format -msgid "argument declared %s is not consistent with argument declared %s" -msgstr "аргумент, объявленный как \"%s\", не согласуется с аргументом %s" +msgid "arguments declared \"anycompatiblerange\" are not all alike" +msgstr "" +"аргументы, объявленные как \"anycompatiblerange\", должны быть однотипными" -#: parser/parse_coerce.c:1827 parser/parse_coerce.c:2051 +#: parser/parse_coerce.c:2041 parser/parse_coerce.c:2122 +#: utils/fmgr/funcapi.c:501 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "аргумент, объявленный как \"%s\", имеет не диапазонный тип, а %s" -#: parser/parse_coerce.c:1865 +#: parser/parse_coerce.c:2079 +#, c-format +msgid "cannot determine element type of \"anyarray\" argument" +msgstr "тип элемента аргумента \"anyarray\" определить нельзя" + +#: parser/parse_coerce.c:2105 parser/parse_coerce.c:2139 +#, c-format +msgid "argument declared %s is not consistent with argument declared %s" +msgstr "аргумент, объявленный как \"%s\", не согласуется с аргументом %s" + +#: parser/parse_coerce.c:2163 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "" "не удалось определить полиморфный тип, так как входные аргументы имеют тип %s" -#: parser/parse_coerce.c:1876 +#: parser/parse_coerce.c:2177 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "" "в нарушение объявления \"anynonarray\" соответствующий аргумент оказался " "массивом: %s" -#: parser/parse_coerce.c:1886 +#: parser/parse_coerce.c:2187 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "" "в нарушение объявления \"anyenum\" соответствующий аргумент оказался не " "перечислением: %s" -#: parser/parse_coerce.c:1926 parser/parse_coerce.c:1956 +#: parser/parse_coerce.c:2218 parser/parse_coerce.c:2267 +#: parser/parse_coerce.c:2329 parser/parse_coerce.c:2365 +#, c-format +msgid "could not determine polymorphic type %s because input has type %s" +msgstr "" +"не удалось определить полиморфный тип %s, так как входные аргументы имеют " +"тип %s" + +#: parser/parse_coerce.c:2228 +#, c-format +msgid "anycompatiblerange type %s does not match anycompatible type %s" +msgstr "тип %s (anycompatiblerange) не соответствует типу %s (anycompatible)" + +#: parser/parse_coerce.c:2242 +#, c-format +msgid "type matched to anycompatiblenonarray is an array type: %s" +msgstr "" +"в нарушение объявления \"anycompatiblenonarray\" соответствующий аргумент " +"оказался массивом: %s" + +#: parser/parse_coerce.c:2433 +#, c-format +msgid "A result of type %s requires at least one input of type %s." +msgstr "Для результата типа %s требуется минимум один аргумент типа %s." + +#: parser/parse_coerce.c:2445 +#, c-format +msgid "" +"A result of type %s requires at least one input of type anyelement, " +"anyarray, anynonarray, anyenum, or anyrange." +msgstr "" +"Для результата типа %s требуется минимум один аргумент типа anyelement, " +"anyarray, anynonarray, anyenum или anyrange." + +#: parser/parse_coerce.c:2457 #, c-format -msgid "could not find range type for data type %s" -msgstr "тип диапазона для типа данных %s не найден" +msgid "" +"A result of type %s requires at least one input of type anycompatible, " +"anycompatiblearray, anycompatiblenonarray, or anycompatiblerange." +msgstr "" +"Для результата типа %s требуется минимум один аргумент типа anycompatible, " +"anycompatiblearray, anycompatiblenonarray или anycompatiblerange." + +#: parser/parse_coerce.c:2487 +msgid "A result of type internal requires at least one input of type internal." +msgstr "" +"Для результата типа internal требуется минимум один аргумент типа internal." #: parser/parse_collate.c:228 parser/parse_collate.c:475 #: parser/parse_collate.c:981 @@ -16587,8 +16996,8 @@ msgstr "рекурсивная ссылка на запрос \"%s\" указа msgid "DEFAULT is not allowed in this context" msgstr "DEFAULT не допускается в данном контексте" -#: parser/parse_expr.c:402 parser/parse_relation.c:3352 -#: parser/parse_relation.c:3372 +#: parser/parse_expr.c:402 parser/parse_relation.c:3506 +#: parser/parse_relation.c:3526 #, c-format msgid "column %s.%s does not exist" msgstr "столбец %s.%s не существует" @@ -16623,35 +17032,35 @@ msgstr "в выражении DEFAULT (по умолчанию) нельзя с msgid "cannot use column reference in partition bound expression" msgstr "в выражении границы секции нельзя ссылаться на столбцы" -#: parser/parse_expr.c:844 parser/parse_relation.c:692 -#: parser/parse_relation.c:803 parser/parse_target.c:1200 +#: parser/parse_expr.c:850 parser/parse_relation.c:799 +#: parser/parse_relation.c:881 parser/parse_target.c:1207 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "неоднозначная ссылка на столбец \"%s\"" -#: parser/parse_expr.c:900 parser/parse_param.c:110 parser/parse_param.c:142 +#: parser/parse_expr.c:906 parser/parse_param.c:110 parser/parse_param.c:142 #: parser/parse_param.c:199 parser/parse_param.c:298 #, c-format msgid "there is no parameter $%d" msgstr "параметр $%d не существует" -#: parser/parse_expr.c:1143 +#: parser/parse_expr.c:1149 #, c-format msgid "NULLIF requires = operator to yield boolean" msgstr "для NULLIF требуется, чтобы оператор = возвращал логическое значение" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1149 parser/parse_expr.c:3139 +#: parser/parse_expr.c:1155 parser/parse_expr.c:3135 #, c-format msgid "%s must not return a set" msgstr "%s не должна возвращать множество" -#: parser/parse_expr.c:1597 parser/parse_expr.c:1629 +#: parser/parse_expr.c:1603 parser/parse_expr.c:1635 #, c-format msgid "number of columns does not match number of values" msgstr "число столбцов не равно числу значений" -#: parser/parse_expr.c:1643 +#: parser/parse_expr.c:1649 #, c-format msgid "" "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() " @@ -16661,234 +17070,234 @@ msgstr "" "SELECT или выражение ROW()" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1837 parser/parse_expr.c:2326 parser/parse_func.c:2555 +#: parser/parse_expr.c:1843 parser/parse_expr.c:2330 parser/parse_func.c:2540 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "функции, возвращающие множества, нельзя применять в конструкции %s" -#: parser/parse_expr.c:1898 +#: parser/parse_expr.c:1904 msgid "cannot use subquery in check constraint" msgstr "в ограничении-проверке нельзя использовать подзапросы" -#: parser/parse_expr.c:1902 +#: parser/parse_expr.c:1908 msgid "cannot use subquery in DEFAULT expression" msgstr "в выражении DEFAULT нельзя использовать подзапросы" -#: parser/parse_expr.c:1905 +#: parser/parse_expr.c:1911 msgid "cannot use subquery in index expression" msgstr "в индексном выражении нельзя использовать подзапросы" -#: parser/parse_expr.c:1908 +#: parser/parse_expr.c:1914 msgid "cannot use subquery in index predicate" msgstr "в предикате индекса нельзя использовать подзапросы" -#: parser/parse_expr.c:1911 +#: parser/parse_expr.c:1917 msgid "cannot use subquery in transform expression" msgstr "нельзя использовать подзапрос в выражении преобразования" -#: parser/parse_expr.c:1914 +#: parser/parse_expr.c:1920 msgid "cannot use subquery in EXECUTE parameter" msgstr "в качестве параметра EXECUTE нельзя использовать подзапрос" -#: parser/parse_expr.c:1917 +#: parser/parse_expr.c:1923 msgid "cannot use subquery in trigger WHEN condition" msgstr "в условии WHEN для триггера нельзя использовать подзапросы" -#: parser/parse_expr.c:1920 +#: parser/parse_expr.c:1926 msgid "cannot use subquery in partition bound" msgstr "в выражении границы секции нельзя использовать подзапросы" -#: parser/parse_expr.c:1923 +#: parser/parse_expr.c:1929 msgid "cannot use subquery in partition key expression" msgstr "в выражении ключа секционирования нельзя использовать подзапросы" -#: parser/parse_expr.c:1926 +#: parser/parse_expr.c:1932 msgid "cannot use subquery in CALL argument" msgstr "в качестве аргумента CALL нельзя использовать подзапрос" -#: parser/parse_expr.c:1929 +#: parser/parse_expr.c:1935 msgid "cannot use subquery in COPY FROM WHERE condition" msgstr "в условии COPY FROM WHERE нельзя использовать подзапросы" -#: parser/parse_expr.c:1932 +#: parser/parse_expr.c:1938 msgid "cannot use subquery in column generation expression" msgstr "в выражении генерируемого столбца нельзя использовать подзапросы" -#: parser/parse_expr.c:1985 +#: parser/parse_expr.c:1991 #, c-format msgid "subquery must return only one column" msgstr "подзапрос должен вернуть только один столбец" -#: parser/parse_expr.c:2069 +#: parser/parse_expr.c:2075 #, c-format msgid "subquery has too many columns" msgstr "в подзапросе слишком много столбцов" -#: parser/parse_expr.c:2074 +#: parser/parse_expr.c:2080 #, c-format msgid "subquery has too few columns" msgstr "в подзапросе недостаточно столбцов" -#: parser/parse_expr.c:2175 +#: parser/parse_expr.c:2181 #, c-format msgid "cannot determine type of empty array" msgstr "тип пустого массива определить нельзя" -#: parser/parse_expr.c:2176 +#: parser/parse_expr.c:2182 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "" "Приведите его к желаемому типу явным образом, например ARRAY[]::integer[]." -#: parser/parse_expr.c:2190 +#: parser/parse_expr.c:2196 #, c-format msgid "could not find element type for data type %s" msgstr "не удалось определить тип элемента для типа данных %s" -#: parser/parse_expr.c:2477 +#: parser/parse_expr.c:2481 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "вместо значения XML-атрибута без имени должен указываться столбец" -#: parser/parse_expr.c:2478 +#: parser/parse_expr.c:2482 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "вместо значения XML-элемента без имени должен указываться столбец" -#: parser/parse_expr.c:2493 +#: parser/parse_expr.c:2497 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "имя XML-атрибута \"%s\" указано неоднократно" -#: parser/parse_expr.c:2600 +#: parser/parse_expr.c:2604 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "привести результат XMLSERIALIZE к типу %s нельзя" -#: parser/parse_expr.c:2896 parser/parse_expr.c:3092 +#: parser/parse_expr.c:2892 parser/parse_expr.c:3088 #, c-format msgid "unequal number of entries in row expressions" msgstr "разное число элементов в строках" -#: parser/parse_expr.c:2906 +#: parser/parse_expr.c:2902 #, c-format msgid "cannot compare rows of zero length" msgstr "строки нулевой длины сравнивать нельзя" -#: parser/parse_expr.c:2931 +#: parser/parse_expr.c:2927 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "" "оператор сравнения строк должен выдавать результат логического типа, а не %s" -#: parser/parse_expr.c:2938 +#: parser/parse_expr.c:2934 #, c-format msgid "row comparison operator must not return a set" msgstr "оператор сравнения строк не должен возвращать множество" -#: parser/parse_expr.c:2997 parser/parse_expr.c:3038 +#: parser/parse_expr.c:2993 parser/parse_expr.c:3034 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "не удалось выбрать интерпретацию оператора сравнения строк %s" -#: parser/parse_expr.c:2999 +#: parser/parse_expr.c:2995 #, c-format msgid "" "Row comparison operators must be associated with btree operator families." msgstr "" "Операторы сравнения строк должны быть связаны с семейством операторов btree." -#: parser/parse_expr.c:3040 +#: parser/parse_expr.c:3036 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Оказалось несколько равноценных кандидатур." -#: parser/parse_expr.c:3133 +#: parser/parse_expr.c:3129 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "" "для IS DISTINCT FROM требуется, чтобы оператор = возвращал логическое " "значение" -#: parser/parse_expr.c:3452 parser/parse_expr.c:3470 +#: parser/parse_expr.c:3448 parser/parse_expr.c:3466 #, c-format msgid "operator precedence change: %s is now lower precedence than %s" msgstr "" "приоритет операторов изменён: %s теперь имеет меньший приоритет, чем %s" -#: parser/parse_func.c:195 +#: parser/parse_func.c:191 #, c-format msgid "argument name \"%s\" used more than once" msgstr "имя аргумента \"%s\" используется неоднократно" -#: parser/parse_func.c:206 +#: parser/parse_func.c:202 #, c-format msgid "positional argument cannot follow named argument" msgstr "нумерованный аргумент не может следовать за именованным аргументом" -#: parser/parse_func.c:288 parser/parse_func.c:2258 +#: parser/parse_func.c:284 parser/parse_func.c:2243 #, c-format msgid "%s is not a procedure" msgstr "\"%s\" — не процедура" -#: parser/parse_func.c:292 +#: parser/parse_func.c:288 #, c-format msgid "To call a function, use SELECT." msgstr "Для вызова функции используйте SELECT." -#: parser/parse_func.c:298 +#: parser/parse_func.c:294 #, c-format msgid "%s is a procedure" msgstr "%s — процедура" -#: parser/parse_func.c:302 +#: parser/parse_func.c:298 #, c-format msgid "To call a procedure, use CALL." msgstr "Для вызова процедуры используйте CALL." -#: parser/parse_func.c:316 +#: parser/parse_func.c:312 #, c-format msgid "%s(*) specified, but %s is not an aggregate function" msgstr "выражение %s(*) недопустимо, так как %s - не агрегатная функция" -#: parser/parse_func.c:323 +#: parser/parse_func.c:319 #, c-format msgid "DISTINCT specified, but %s is not an aggregate function" msgstr "в аргументах %s указан DISTINCT, но это не агрегатная функция" -#: parser/parse_func.c:329 +#: parser/parse_func.c:325 #, c-format msgid "WITHIN GROUP specified, but %s is not an aggregate function" msgstr "в аргументах %s указано WITHIN GROUP, но это не агрегатная функция" -#: parser/parse_func.c:335 +#: parser/parse_func.c:331 #, c-format msgid "ORDER BY specified, but %s is not an aggregate function" msgstr "в аргументах %s указан ORDER BY, но это не агрегатная функция" -#: parser/parse_func.c:341 +#: parser/parse_func.c:337 #, c-format msgid "FILTER specified, but %s is not an aggregate function" msgstr "в аргументах %s указан FILTER, но это не агрегатная функция" -#: parser/parse_func.c:347 +#: parser/parse_func.c:343 #, c-format msgid "" "OVER specified, but %s is not a window function nor an aggregate function" msgstr "" "вызов %s включает предложение OVER, но это не оконная и не агрегатная функция" -#: parser/parse_func.c:385 +#: parser/parse_func.c:381 #, c-format msgid "WITHIN GROUP is required for ordered-set aggregate %s" msgstr "для сортирующего агрегата %s требуется WITHIN GROUP" -#: parser/parse_func.c:391 +#: parser/parse_func.c:387 #, c-format msgid "OVER is not supported for ordered-set aggregate %s" msgstr "сортирующий агрегат %s не поддерживает OVER" -#: parser/parse_func.c:422 parser/parse_func.c:451 +#: parser/parse_func.c:418 parser/parse_func.c:447 #, c-format msgid "" "There is an ordered-set aggregate %s, but it requires %d direct arguments, " @@ -16897,7 +17306,7 @@ msgstr "" "Есть сортирующий агрегат %s, но прямых аргументов у него должно быть %d, а " "не %d." -#: parser/parse_func.c:476 +#: parser/parse_func.c:472 #, c-format msgid "" "To use the hypothetical-set aggregate %s, the number of hypothetical direct " @@ -16907,7 +17316,7 @@ msgstr "" "гипотетических аргументов (%d) должно равняться числу сортируемых столбцов " "(здесь: %d)." -#: parser/parse_func.c:490 +#: parser/parse_func.c:486 #, c-format msgid "" "There is an ordered-set aggregate %s, but it requires at least %d direct " @@ -16916,27 +17325,27 @@ msgstr "" "Есть сортирующий агрегат %s, но он требует минимум %d непосредственных " "аргументов." -#: parser/parse_func.c:509 +#: parser/parse_func.c:505 #, c-format msgid "%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP" msgstr "%s - не сортирующая агрегатная функция, WITHIN GROUP к ней неприменимо" -#: parser/parse_func.c:522 +#: parser/parse_func.c:518 #, c-format msgid "window function %s requires an OVER clause" msgstr "для оконной функции %s требуется предложение OVER" -#: parser/parse_func.c:529 +#: parser/parse_func.c:525 #, c-format msgid "window function %s cannot have WITHIN GROUP" msgstr "для оконной функции %s неприменимо WITHIN GROUP" -#: parser/parse_func.c:558 +#: parser/parse_func.c:554 #, c-format msgid "procedure %s is not unique" msgstr "процедура %s не уникальна" -#: parser/parse_func.c:561 +#: parser/parse_func.c:557 #, c-format msgid "" "Could not choose a best candidate procedure. You might need to add explicit " @@ -16945,12 +17354,12 @@ msgstr "" "Не удалось выбрать лучшую кандидатуру процедуры. Возможно, вам следует " "добавить явные приведения типов." -#: parser/parse_func.c:567 +#: parser/parse_func.c:563 #, c-format msgid "function %s is not unique" msgstr "функция %s не уникальна" -#: parser/parse_func.c:570 +#: parser/parse_func.c:566 #, c-format msgid "" "Could not choose a best candidate function. You might need to add explicit " @@ -16959,7 +17368,7 @@ msgstr "" "Не удалось выбрать лучшую кандидатуру функции. Возможно, вам следует " "добавить явные приведения типов." -#: parser/parse_func.c:609 +#: parser/parse_func.c:605 #, c-format msgid "" "No aggregate function matches the given name and argument types. Perhaps you " @@ -16970,12 +17379,12 @@ msgstr "" "Возможно, неверно расположено предложение ORDER BY - оно должно следовать за " "всеми обычными аргументами функции." -#: parser/parse_func.c:617 parser/parse_func.c:2301 +#: parser/parse_func.c:613 parser/parse_func.c:2286 #, c-format msgid "procedure %s does not exist" msgstr "процедура %s не существует" -#: parser/parse_func.c:620 +#: parser/parse_func.c:616 #, c-format msgid "" "No procedure matches the given name and argument types. You might need to " @@ -16984,7 +17393,7 @@ msgstr "" "Процедура с данными именем и типами аргументов не найдена. Возможно, вам " "следует добавить явные приведения типов." -#: parser/parse_func.c:629 +#: parser/parse_func.c:625 #, c-format msgid "" "No function matches the given name and argument types. You might need to add " @@ -16993,69 +17402,69 @@ msgstr "" "Функция с данными именем и типами аргументов не найдена. Возможно, вам " "следует добавить явные приведения типов." -#: parser/parse_func.c:731 +#: parser/parse_func.c:727 #, c-format msgid "VARIADIC argument must be an array" msgstr "параметр VARIADIC должен быть массивом" -#: parser/parse_func.c:783 parser/parse_func.c:847 +#: parser/parse_func.c:779 parser/parse_func.c:843 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "агрегатная функция без параметров должна вызываться так: %s(*)" -#: parser/parse_func.c:790 +#: parser/parse_func.c:786 #, c-format msgid "aggregates cannot return sets" msgstr "агрегатные функции не могут возвращать множества" -#: parser/parse_func.c:805 +#: parser/parse_func.c:801 #, c-format msgid "aggregates cannot use named arguments" msgstr "у агрегатных функций не может быть именованных аргументов" -#: parser/parse_func.c:837 +#: parser/parse_func.c:833 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "предложение DISTINCT для оконных функций не реализовано" -#: parser/parse_func.c:857 +#: parser/parse_func.c:853 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "агрегатное предложение ORDER BY для оконных функций не реализовано" -#: parser/parse_func.c:866 +#: parser/parse_func.c:862 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "предложение FILTER для не агрегатных оконных функций не реализовано" -#: parser/parse_func.c:875 +#: parser/parse_func.c:871 #, c-format msgid "window function calls cannot contain set-returning function calls" msgstr "" "вызовы оконных функций не могут включать вызовы функций, возвращающих " "множества" -#: parser/parse_func.c:883 +#: parser/parse_func.c:879 #, c-format msgid "window functions cannot return sets" msgstr "оконные функции не могут возвращать множества" -#: parser/parse_func.c:2139 parser/parse_func.c:2330 +#: parser/parse_func.c:2124 parser/parse_func.c:2315 #, c-format msgid "could not find a function named \"%s\"" msgstr "не удалось найти функцию с именем \"%s\"" -#: parser/parse_func.c:2153 parser/parse_func.c:2348 +#: parser/parse_func.c:2138 parser/parse_func.c:2333 #, c-format msgid "function name \"%s\" is not unique" msgstr "имя функции \"%s\" не уникально" -#: parser/parse_func.c:2155 parser/parse_func.c:2350 +#: parser/parse_func.c:2140 parser/parse_func.c:2335 #, c-format msgid "Specify the argument list to select the function unambiguously." msgstr "Задайте список аргументов для однозначного выбора функции." -#: parser/parse_func.c:2199 +#: parser/parse_func.c:2184 #, c-format msgid "procedures cannot have more than %d argument" msgid_plural "procedures cannot have more than %d arguments" @@ -17063,162 +17472,162 @@ msgstr[0] "процедуры допускают не более %d аргуме msgstr[1] "процедуры допускают не более %d аргументов" msgstr[2] "процедуры допускают не более %d аргументов" -#: parser/parse_func.c:2248 +#: parser/parse_func.c:2233 #, c-format msgid "%s is not a function" msgstr "%s — не функция" -#: parser/parse_func.c:2268 +#: parser/parse_func.c:2253 #, c-format msgid "function %s is not an aggregate" msgstr "функция \"%s\" не является агрегатной" -#: parser/parse_func.c:2296 +#: parser/parse_func.c:2281 #, c-format msgid "could not find a procedure named \"%s\"" msgstr "не удалось найти процедуру с именем \"%s\"" -#: parser/parse_func.c:2310 +#: parser/parse_func.c:2295 #, c-format msgid "could not find an aggregate named \"%s\"" msgstr "не удалось найти агрегат с именем \"%s\"" -#: parser/parse_func.c:2315 +#: parser/parse_func.c:2300 #, c-format msgid "aggregate %s(*) does not exist" msgstr "агрегатная функция %s(*) не существует" -#: parser/parse_func.c:2320 +#: parser/parse_func.c:2305 #, c-format msgid "aggregate %s does not exist" msgstr "агрегатная функция %s не существует" -#: parser/parse_func.c:2355 +#: parser/parse_func.c:2340 #, c-format msgid "procedure name \"%s\" is not unique" msgstr "имя процедуры \"%s\" не уникально" -#: parser/parse_func.c:2357 +#: parser/parse_func.c:2342 #, c-format msgid "Specify the argument list to select the procedure unambiguously." msgstr "Задайте список аргументов для однозначного выбора процедуры." -#: parser/parse_func.c:2362 +#: parser/parse_func.c:2347 #, c-format msgid "aggregate name \"%s\" is not unique" msgstr "имя агрегатной функции \"%s\" не уникально" -#: parser/parse_func.c:2364 +#: parser/parse_func.c:2349 #, c-format msgid "Specify the argument list to select the aggregate unambiguously." msgstr "Задайте список аргументов для однозначного выбора агрегатной функции." -#: parser/parse_func.c:2369 +#: parser/parse_func.c:2354 #, c-format msgid "routine name \"%s\" is not unique" msgstr "имя подпрограммы \"%s\" не уникально" -#: parser/parse_func.c:2371 +#: parser/parse_func.c:2356 #, c-format msgid "Specify the argument list to select the routine unambiguously." msgstr "Задайте список аргументов для однозначного выбора подпрограммы." -#: parser/parse_func.c:2426 +#: parser/parse_func.c:2411 msgid "set-returning functions are not allowed in JOIN conditions" msgstr "функции, возвращающие множества, нельзя применять в условиях JOIN" -#: parser/parse_func.c:2447 +#: parser/parse_func.c:2432 msgid "set-returning functions are not allowed in policy expressions" msgstr "функции, возвращающие множества, нельзя применять в выражениях политик" -#: parser/parse_func.c:2463 +#: parser/parse_func.c:2448 msgid "set-returning functions are not allowed in window definitions" msgstr "функции, возвращающие множества, нельзя применять в определении окна" -#: parser/parse_func.c:2501 +#: parser/parse_func.c:2486 msgid "set-returning functions are not allowed in check constraints" msgstr "" "функции, возвращающие множества, нельзя применять в ограничениях-проверках" -#: parser/parse_func.c:2505 +#: parser/parse_func.c:2490 msgid "set-returning functions are not allowed in DEFAULT expressions" msgstr "функции, возвращающие множества, нельзя применять в выражениях DEFAULT" -#: parser/parse_func.c:2508 +#: parser/parse_func.c:2493 msgid "set-returning functions are not allowed in index expressions" msgstr "" "функции, возвращающие множества, нельзя применять в выражениях индексов" -#: parser/parse_func.c:2511 +#: parser/parse_func.c:2496 msgid "set-returning functions are not allowed in index predicates" msgstr "" "функции, возвращающие множества, нельзя применять в предикатах индексов" -#: parser/parse_func.c:2514 +#: parser/parse_func.c:2499 msgid "set-returning functions are not allowed in transform expressions" msgstr "" "функции, возвращающие множества, нельзя применять в выражениях преобразований" -#: parser/parse_func.c:2517 +#: parser/parse_func.c:2502 msgid "set-returning functions are not allowed in EXECUTE parameters" msgstr "функции, возвращающие множества, нельзя применять в параметрах EXECUTE" -#: parser/parse_func.c:2520 +#: parser/parse_func.c:2505 msgid "set-returning functions are not allowed in trigger WHEN conditions" msgstr "" "функции, возвращающие множества, нельзя применять в условиях WHEN для " "триггеров" -#: parser/parse_func.c:2523 +#: parser/parse_func.c:2508 msgid "set-returning functions are not allowed in partition bound" msgstr "" "функции, возвращающие множества, нельзя применять в выражении границы секции" -#: parser/parse_func.c:2526 +#: parser/parse_func.c:2511 msgid "set-returning functions are not allowed in partition key expressions" msgstr "" "функции, возвращающие множества, нельзя применять в выражениях ключа " "секционирования" -#: parser/parse_func.c:2529 +#: parser/parse_func.c:2514 msgid "set-returning functions are not allowed in CALL arguments" msgstr "функции, возвращающие множества, нельзя применять в аргументах CALL" -#: parser/parse_func.c:2532 +#: parser/parse_func.c:2517 msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" msgstr "" "функции, возвращающие множества, нельзя применять в условиях COPY FROM WHERE" -#: parser/parse_func.c:2535 +#: parser/parse_func.c:2520 msgid "" "set-returning functions are not allowed in column generation expressions" msgstr "" "функции, возвращающие множества, нельзя применять в выражениях генерируемых " "столбцов" -#: parser/parse_node.c:87 +#: parser/parse_node.c:86 #, c-format msgid "target lists can have at most %d entries" msgstr "допустимое число элементов в целевом списке ограничено %d" -#: parser/parse_node.c:257 +#: parser/parse_node.c:235 #, c-format msgid "cannot subscript type %s because it is not an array" msgstr "тип %s - не массив и для него нельзя указать индекс элемента" -#: parser/parse_node.c:362 parser/parse_node.c:399 +#: parser/parse_node.c:340 parser/parse_node.c:377 #, c-format msgid "array subscript must have type integer" msgstr "индекс элемента массива должен быть целочисленным" -#: parser/parse_node.c:430 +#: parser/parse_node.c:408 #, c-format msgid "array assignment requires type %s but expression is of type %s" msgstr "" "для присваивания массива требуется тип %s, однако выражение имеет тип %s" -#: parser/parse_oper.c:125 parser/parse_oper.c:724 utils/adt/regproc.c:520 -#: utils/adt/regproc.c:704 +#: parser/parse_oper.c:125 parser/parse_oper.c:724 utils/adt/regproc.c:521 +#: utils/adt/regproc.c:705 #, c-format msgid "operator does not exist: %s" msgstr "оператор не существует: %s" @@ -17294,27 +17703,27 @@ msgstr "" msgid "inconsistent types deduced for parameter $%d" msgstr "для параметра $%d выведены несогласованные типы" -#: parser/parse_relation.c:179 +#: parser/parse_relation.c:201 #, c-format msgid "table reference \"%s\" is ambiguous" msgstr "ссылка на таблицу \"%s\" неоднозначна" -#: parser/parse_relation.c:223 +#: parser/parse_relation.c:245 #, c-format msgid "table reference %u is ambiguous" msgstr "ссылка на таблицу %u неоднозначна" -#: parser/parse_relation.c:422 +#: parser/parse_relation.c:444 #, c-format msgid "table name \"%s\" specified more than once" msgstr "имя таблицы \"%s\" указано больше одного раза" -#: parser/parse_relation.c:449 parser/parse_relation.c:3292 +#: parser/parse_relation.c:473 parser/parse_relation.c:3446 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "в элементе предложения FROM неверная ссылка на таблицу \"%s\"" -#: parser/parse_relation.c:452 parser/parse_relation.c:3297 +#: parser/parse_relation.c:477 parser/parse_relation.c:3451 #, c-format msgid "" "There is an entry for table \"%s\", but it cannot be referenced from this " @@ -17323,30 +17732,30 @@ msgstr "" "Таблица \"%s\" присутствует в запросе, но сослаться на неё из этой части " "запроса нельзя." -#: parser/parse_relation.c:454 +#: parser/parse_relation.c:479 #, c-format msgid "The combining JOIN type must be INNER or LEFT for a LATERAL reference." msgstr "Для ссылки LATERAL тип JOIN должен быть INNER или LEFT." -#: parser/parse_relation.c:730 +#: parser/parse_relation.c:690 #, c-format msgid "system column \"%s\" reference in check constraint is invalid" msgstr "в ограничении-проверке указан недопустимый системный столбец \"%s\"" -#: parser/parse_relation.c:741 +#: parser/parse_relation.c:699 #, c-format msgid "cannot use system column \"%s\" in column generation expression" msgstr "" "системный столбец \"%s\" нельзя использовать в выражении генерируемого " "столбца" -#: parser/parse_relation.c:1100 parser/parse_relation.c:1404 -#: parser/parse_relation.c:1985 +#: parser/parse_relation.c:1170 parser/parse_relation.c:1620 +#: parser/parse_relation.c:2262 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "в таблице \"%s\" содержится столбцов: %d, но указано: %d" -#: parser/parse_relation.c:1187 +#: parser/parse_relation.c:1372 #, c-format msgid "" "There is a WITH item named \"%s\", but it cannot be referenced from this " @@ -17355,7 +17764,7 @@ msgstr "" "В WITH есть элемент \"%s\", но на него нельзя ссылаться из этой части " "запроса." -#: parser/parse_relation.c:1189 +#: parser/parse_relation.c:1374 #, c-format msgid "" "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." @@ -17363,7 +17772,7 @@ msgstr "" "Используйте WITH RECURSIVE или исключите ссылки вперёд, переупорядочив " "элементы WITH." -#: parser/parse_relation.c:1525 +#: parser/parse_relation.c:1747 #, c-format msgid "" "a column definition list is only allowed for functions returning \"record\"" @@ -17371,56 +17780,54 @@ msgstr "" "список с определением столбцов может быть только у функций, возвращающих " "запись" -#: parser/parse_relation.c:1534 +#: parser/parse_relation.c:1756 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "" "у функций, возвращающих запись, должен быть список с определением столбцов" -#: parser/parse_relation.c:1620 +#: parser/parse_relation.c:1845 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "" "функция \"%s\", используемая во FROM, возвращает неподдерживаемый тип %s" -#: parser/parse_relation.c:1811 +#: parser/parse_relation.c:2054 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "в списках VALUES \"%s\" содержится столбцов: %d, но указано: %d" -#: parser/parse_relation.c:1867 +#: parser/parse_relation.c:2125 #, c-format msgid "joins can have at most %d columns" msgstr "число столбцов в соединениях ограничено %d" -#: parser/parse_relation.c:1958 +#: parser/parse_relation.c:2235 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "в запросе \"%s\" в WITH нет предложения RETURNING" -#: parser/parse_relation.c:2899 parser/parse_relation.c:2937 -#: parser/parse_relation.c:2946 parser/parse_relation.c:3072 -#: parser/parse_relation.c:3082 +#: parser/parse_relation.c:3221 parser/parse_relation.c:3231 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "столбец %d отношения \"%s\" не существует" -#: parser/parse_relation.c:3295 +#: parser/parse_relation.c:3449 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "Возможно, предполагалась ссылка на псевдоним таблицы \"%s\"." -#: parser/parse_relation.c:3303 +#: parser/parse_relation.c:3457 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "таблица \"%s\" отсутствует в предложении FROM" -#: parser/parse_relation.c:3355 +#: parser/parse_relation.c:3509 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "Возможно, предполагалась ссылка на столбец \"%s.%s\"." -#: parser/parse_relation.c:3357 +#: parser/parse_relation.c:3511 #, c-format msgid "" "There is a column named \"%s\" in table \"%s\", but it cannot be referenced " @@ -17429,34 +17836,34 @@ msgstr "" "Столбец \"%s\" есть в таблице \"%s\", но на него нельзя ссылаться из этой " "части запроса." -#: parser/parse_relation.c:3374 +#: parser/parse_relation.c:3528 #, c-format msgid "" "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "" "Возможно, предполагалась ссылка на столбец \"%s.%s\" или столбец \"%s.%s\"." -#: parser/parse_target.c:484 parser/parse_target.c:791 +#: parser/parse_target.c:478 parser/parse_target.c:792 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "присвоить значение системному столбцу \"%s\" нельзя" -#: parser/parse_target.c:512 +#: parser/parse_target.c:506 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "элементу массива нельзя присвоить значение по умолчанию" -#: parser/parse_target.c:517 +#: parser/parse_target.c:511 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "вложенному полю нельзя присвоить значение по умолчанию" -#: parser/parse_target.c:586 +#: parser/parse_target.c:584 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "столбец \"%s\" имеет тип %s, а выражение - %s" -#: parser/parse_target.c:775 +#: parser/parse_target.c:776 #, c-format msgid "" "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a " @@ -17465,7 +17872,7 @@ msgstr "" "присвоить значение полю \"%s\" столбца \"%s\" нельзя, так как тип %s не " "является составным" -#: parser/parse_target.c:784 +#: parser/parse_target.c:785 #, c-format msgid "" "cannot assign to field \"%s\" of column \"%s\" because there is no such " @@ -17474,7 +17881,7 @@ msgstr "" "присвоить значение полю \"%s\" столбца \"%s\" нельзя, так как в типе данных " "%s нет такого столбца" -#: parser/parse_target.c:861 +#: parser/parse_target.c:864 #, c-format msgid "" "array assignment to \"%s\" requires type %s but expression is of type %s" @@ -17482,128 +17889,129 @@ msgstr "" "для присваивания массива полю \"%s\" требуется тип %s, однако выражение " "имеет тип %s" -#: parser/parse_target.c:871 +#: parser/parse_target.c:874 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "вложенное поле \"%s\" имеет тип %s, а выражение - %s" -#: parser/parse_target.c:1290 +#: parser/parse_target.c:1295 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "SELECT * должен ссылаться на таблицы" -#: parser/parse_type.c:101 +#: parser/parse_type.c:100 #, c-format msgid "improper %%TYPE reference (too few dotted names): %s" msgstr "неправильное указание %%TYPE (слишком мало компонентов): %s" -#: parser/parse_type.c:123 +#: parser/parse_type.c:122 #, c-format msgid "improper %%TYPE reference (too many dotted names): %s" msgstr "неправильное указание %%TYPE (слишком много компонентов): %s" -#: parser/parse_type.c:158 +#: parser/parse_type.c:157 #, c-format msgid "type reference %s converted to %s" msgstr "ссылка на тип %s преобразована в тип %s" -#: parser/parse_type.c:279 parser/parse_type.c:858 utils/cache/typcache.c:374 +#: parser/parse_type.c:278 parser/parse_type.c:857 utils/cache/typcache.c:383 +#: utils/cache/typcache.c:437 #, c-format msgid "type \"%s\" is only a shell" msgstr "тип \"%s\" - лишь пустышка" -#: parser/parse_type.c:364 +#: parser/parse_type.c:363 #, c-format msgid "type modifier is not allowed for type \"%s\"" msgstr "у типа \"%s\" не может быть модификаторов" -#: parser/parse_type.c:406 +#: parser/parse_type.c:405 #, c-format msgid "type modifiers must be simple constants or identifiers" msgstr "модификатором типа должна быть простая константа или идентификатор" -#: parser/parse_type.c:722 parser/parse_type.c:821 +#: parser/parse_type.c:721 parser/parse_type.c:820 #, c-format msgid "invalid type name \"%s\"" msgstr "неверное имя типа \"%s\"" -#: parser/parse_utilcmd.c:263 +#: parser/parse_utilcmd.c:266 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "создать секционированную таблицу в виде потомка нельзя" -#: parser/parse_utilcmd.c:426 +#: parser/parse_utilcmd.c:444 #, c-format msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" msgstr "%s создаст последовательность \"%s\" для столбца serial \"%s.%s\"" -#: parser/parse_utilcmd.c:550 +#: parser/parse_utilcmd.c:575 #, c-format msgid "array of serial is not implemented" msgstr "массивы с типом serial не реализованы" -#: parser/parse_utilcmd.c:627 parser/parse_utilcmd.c:639 +#: parser/parse_utilcmd.c:653 parser/parse_utilcmd.c:665 #, c-format msgid "" "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "конфликт NULL/NOT NULL в объявлении столбца \"%s\" таблицы \"%s\"" -#: parser/parse_utilcmd.c:651 +#: parser/parse_utilcmd.c:677 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "" "для столбца \"%s\" таблицы \"%s\" указано несколько значений по умолчанию" -#: parser/parse_utilcmd.c:668 +#: parser/parse_utilcmd.c:694 #, c-format msgid "identity columns are not supported on typed tables" msgstr "столбцы идентификации не поддерживаются с типизированными таблицами" -#: parser/parse_utilcmd.c:672 +#: parser/parse_utilcmd.c:698 #, c-format msgid "identity columns are not supported on partitions" msgstr "столбцы идентификации не поддерживаются с секциями" -#: parser/parse_utilcmd.c:681 +#: parser/parse_utilcmd.c:707 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "" "для столбца \"%s\" таблицы \"%s\" свойство identity задано неоднократно" -#: parser/parse_utilcmd.c:700 +#: parser/parse_utilcmd.c:727 #, c-format msgid "generated columns are not supported on typed tables" msgstr "генерируемые столбцы не поддерживаются с типизированными таблицами" -#: parser/parse_utilcmd.c:704 +#: parser/parse_utilcmd.c:731 #, c-format msgid "generated columns are not supported on partitions" msgstr "генерируемые столбцы не поддерживаются с секциями" -#: parser/parse_utilcmd.c:709 +#: parser/parse_utilcmd.c:736 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "" "для столбца \"%s\" таблицы \"%s\" указано несколько генерирующих выражений" -#: parser/parse_utilcmd.c:727 parser/parse_utilcmd.c:842 +#: parser/parse_utilcmd.c:754 parser/parse_utilcmd.c:869 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "ограничения первичного ключа для сторонних таблиц не поддерживаются" -#: parser/parse_utilcmd.c:736 parser/parse_utilcmd.c:852 +#: parser/parse_utilcmd.c:763 parser/parse_utilcmd.c:879 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "ограничения уникальности для сторонних таблиц не поддерживаются" -#: parser/parse_utilcmd.c:781 +#: parser/parse_utilcmd.c:808 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "" "для столбца \"%s\" таблицы \"%s\" задано и значение по умолчанию, и свойство " "identity" -#: parser/parse_utilcmd.c:789 +#: parser/parse_utilcmd.c:816 #, c-format msgid "" "both default and generation expression specified for column \"%s\" of table " @@ -17612,7 +18020,7 @@ msgstr "" "для столбца \"%s\" таблицы \"%s\" задано и значение по умолчанию, и " "генерирующее выражение" -#: parser/parse_utilcmd.c:797 +#: parser/parse_utilcmd.c:824 #, c-format msgid "" "both identity and generation expression specified for column \"%s\" of table " @@ -17621,102 +18029,93 @@ msgstr "" "для столбца \"%s\" таблицы \"%s\" задано и генерирующее выражение, и " "свойство identity" -#: parser/parse_utilcmd.c:862 +#: parser/parse_utilcmd.c:889 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "ограничения-исключения для сторонних таблиц не поддерживаются" -#: parser/parse_utilcmd.c:868 +#: parser/parse_utilcmd.c:895 #, c-format msgid "exclusion constraints are not supported on partitioned tables" msgstr "ограничения-исключения для секционированных таблиц не поддерживаются" -#: parser/parse_utilcmd.c:932 +#: parser/parse_utilcmd.c:960 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE при создании сторонних таблиц не поддерживается" -#: parser/parse_utilcmd.c:1066 -#, c-format -msgid "" -"Generation expression for column \"%s\" contains a whole-row reference to " -"table \"%s\"." -msgstr "" -"Генерирующее выражение столбца \"%s\" ссылается на тип всей строки в таблице " -"\"%s\"." - -#: parser/parse_utilcmd.c:1563 parser/parse_utilcmd.c:1670 +#: parser/parse_utilcmd.c:1728 parser/parse_utilcmd.c:1837 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "Индекс \"%s\" ссылается на тип всей строки таблицы." -#: parser/parse_utilcmd.c:2036 +#: parser/parse_utilcmd.c:2187 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "в CREATE TABLE нельзя использовать существующий индекс" -#: parser/parse_utilcmd.c:2056 +#: parser/parse_utilcmd.c:2207 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "индекс \"%s\" уже связан с ограничением" -#: parser/parse_utilcmd.c:2071 +#: parser/parse_utilcmd.c:2222 #, c-format msgid "index \"%s\" is not valid" msgstr "индекс \"%s\" - нерабочий" -#: parser/parse_utilcmd.c:2077 +#: parser/parse_utilcmd.c:2228 #, c-format msgid "\"%s\" is not a unique index" msgstr "\"%s\" не является уникальным индексом" -#: parser/parse_utilcmd.c:2078 parser/parse_utilcmd.c:2085 -#: parser/parse_utilcmd.c:2092 parser/parse_utilcmd.c:2163 +#: parser/parse_utilcmd.c:2229 parser/parse_utilcmd.c:2236 +#: parser/parse_utilcmd.c:2243 parser/parse_utilcmd.c:2320 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "" "Создать первичный ключ или ограничение уникальности для такого индекса " "нельзя." -#: parser/parse_utilcmd.c:2084 +#: parser/parse_utilcmd.c:2235 #, c-format msgid "index \"%s\" contains expressions" msgstr "индекс \"%s\" содержит выражения" -#: parser/parse_utilcmd.c:2091 +#: parser/parse_utilcmd.c:2242 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\" - частичный индекс" -#: parser/parse_utilcmd.c:2103 +#: parser/parse_utilcmd.c:2254 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\" - откладываемый индекс" -#: parser/parse_utilcmd.c:2104 +#: parser/parse_utilcmd.c:2255 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "" "Создать не откладываемое ограничение на базе откладываемого индекса нельзя." -#: parser/parse_utilcmd.c:2162 +#: parser/parse_utilcmd.c:2319 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "" "в индексе \"%s\" для столбца номер %d не определено поведение сортировки по " "умолчанию" -#: parser/parse_utilcmd.c:2319 +#: parser/parse_utilcmd.c:2476 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "столбец \"%s\" фигурирует в первичном ключе дважды" -#: parser/parse_utilcmd.c:2325 +#: parser/parse_utilcmd.c:2482 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "столбец \"%s\" фигурирует в ограничении уникальности дважды" -#: parser/parse_utilcmd.c:2676 +#: parser/parse_utilcmd.c:2835 #, c-format msgid "" "index expressions and predicates can refer only to the table being indexed" @@ -17724,17 +18123,17 @@ msgstr "" "индексные выражения и предикаты могут ссылаться только на индексируемую " "таблицу" -#: parser/parse_utilcmd.c:2722 +#: parser/parse_utilcmd.c:2881 #, c-format msgid "rules on materialized views are not supported" msgstr "правила для материализованных представлений не поддерживаются" -#: parser/parse_utilcmd.c:2785 +#: parser/parse_utilcmd.c:2944 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "в условиях WHERE для правил нельзя ссылаться на другие отношения" -#: parser/parse_utilcmd.c:2859 +#: parser/parse_utilcmd.c:3018 #, c-format msgid "" "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE " @@ -17743,153 +18142,164 @@ msgstr "" "правила с условиями WHERE могут содержать только действия SELECT, INSERT, " "UPDATE или DELETE" -#: parser/parse_utilcmd.c:2877 parser/parse_utilcmd.c:2976 -#: rewrite/rewriteHandler.c:502 rewrite/rewriteManip.c:1015 +#: parser/parse_utilcmd.c:3036 parser/parse_utilcmd.c:3137 +#: rewrite/rewriteHandler.c:503 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "условные операторы UNION/INTERSECT/EXCEPT не реализованы" -#: parser/parse_utilcmd.c:2895 +#: parser/parse_utilcmd.c:3054 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "в правиле ON SELECT нельзя использовать OLD" -#: parser/parse_utilcmd.c:2899 +#: parser/parse_utilcmd.c:3058 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "в правиле ON SELECT нельзя использовать NEW" -#: parser/parse_utilcmd.c:2908 +#: parser/parse_utilcmd.c:3067 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "в правиле ON INSERT нельзя использовать OLD" -#: parser/parse_utilcmd.c:2914 +#: parser/parse_utilcmd.c:3073 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "в правиле ON DELETE нельзя использовать NEW" -#: parser/parse_utilcmd.c:2942 +#: parser/parse_utilcmd.c:3101 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "в запросе WITH нельзя ссылаться на OLD" -#: parser/parse_utilcmd.c:2949 +#: parser/parse_utilcmd.c:3108 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "в запросе WITH нельзя ссылаться на NEW" -#: parser/parse_utilcmd.c:3407 +#: parser/parse_utilcmd.c:3567 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "предложение DEFERRABLE расположено неправильно" -#: parser/parse_utilcmd.c:3412 parser/parse_utilcmd.c:3427 +#: parser/parse_utilcmd.c:3572 parser/parse_utilcmd.c:3587 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "DEFERRABLE/NOT DEFERRABLE можно указать только один раз" -#: parser/parse_utilcmd.c:3422 +#: parser/parse_utilcmd.c:3582 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "предложение NOT DEFERRABLE расположено неправильно" -#: parser/parse_utilcmd.c:3435 parser/parse_utilcmd.c:3461 gram.y:5529 +#: parser/parse_utilcmd.c:3595 parser/parse_utilcmd.c:3621 gram.y:5594 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "" "ограничение с характеристикой INITIALLY DEFERRED должно быть объявлено как " "DEFERRABLE" -#: parser/parse_utilcmd.c:3443 +#: parser/parse_utilcmd.c:3603 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "предложение INITIALLY DEFERRED расположено неправильно" -#: parser/parse_utilcmd.c:3448 parser/parse_utilcmd.c:3474 +#: parser/parse_utilcmd.c:3608 parser/parse_utilcmd.c:3634 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "INITIALLY IMMEDIATE/DEFERRED можно указать только один раз" -#: parser/parse_utilcmd.c:3469 +#: parser/parse_utilcmd.c:3629 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "предложение INITIALLY IMMEDIATE расположено неправильно" -#: parser/parse_utilcmd.c:3660 +#: parser/parse_utilcmd.c:3820 #, c-format msgid "" "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "в CREATE указана схема (%s), отличная от создаваемой (%s)" -#: parser/parse_utilcmd.c:3694 +#: parser/parse_utilcmd.c:3855 +#, c-format +msgid "\"%s\" is not a partitioned table" +msgstr "\"%s\" — не секционированная таблица" + +#: parser/parse_utilcmd.c:3862 #, c-format msgid "table \"%s\" is not partitioned" msgstr "таблица \"%s\" не является секционированной" -#: parser/parse_utilcmd.c:3701 +#: parser/parse_utilcmd.c:3869 #, c-format msgid "index \"%s\" is not partitioned" msgstr "индекс \"%s\" не секционирован" -#: parser/parse_utilcmd.c:3735 +#: parser/parse_utilcmd.c:3909 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "у секционированной по хешу таблицы не может быть секции по умолчанию" -#: parser/parse_utilcmd.c:3752 +#: parser/parse_utilcmd.c:3926 #, c-format msgid "invalid bound specification for a hash partition" msgstr "неправильное указание ограничения для хеш-секции" -#: parser/parse_utilcmd.c:3758 partitioning/partbounds.c:2816 +#: parser/parse_utilcmd.c:3932 partitioning/partbounds.c:4640 #, c-format msgid "modulus for hash partition must be a positive integer" msgstr "модуль для хеш-секции должен быть положительным целым" -#: parser/parse_utilcmd.c:3765 partitioning/partbounds.c:2824 +#: parser/parse_utilcmd.c:3939 partitioning/partbounds.c:4648 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "остаток для хеш-секции должен быть меньше модуля" -#: parser/parse_utilcmd.c:3778 +#: parser/parse_utilcmd.c:3952 #, c-format msgid "invalid bound specification for a list partition" msgstr "неправильное указание ограничения для секции по списку" -#: parser/parse_utilcmd.c:3831 +#: parser/parse_utilcmd.c:4005 #, c-format msgid "invalid bound specification for a range partition" msgstr "неправильное указание ограничения для секции по диапазону" -#: parser/parse_utilcmd.c:3837 +#: parser/parse_utilcmd.c:4011 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "" "во FROM должно указываться ровно одно значение для секционирующего столбца" -#: parser/parse_utilcmd.c:3841 +#: parser/parse_utilcmd.c:4015 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "" "в TO должно указываться ровно одно значение для секционирующего столбца" -#: parser/parse_utilcmd.c:3955 +#: parser/parse_utilcmd.c:4129 #, c-format msgid "cannot specify NULL in range bound" msgstr "указать NULL в диапазонном ограничении нельзя" -#: parser/parse_utilcmd.c:4004 +#: parser/parse_utilcmd.c:4178 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "за границей MAXVALUE могут следовать только границы MAXVALUE" -#: parser/parse_utilcmd.c:4011 +#: parser/parse_utilcmd.c:4185 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "за границей MINVALUE могут следовать только границы MINVALUE" -#: parser/parse_utilcmd.c:4046 +#: parser/parse_utilcmd.c:4227 +#, c-format +msgid "" +"could not determine which collation to use for partition bound expression" +msgstr "не удалось определить правило сортировки для выражения границы секции" + +#: parser/parse_utilcmd.c:4244 #, c-format msgid "" "collation of partition bound value for column \"%s\" does not match " @@ -17898,44 +18308,72 @@ msgstr "" "правило сортировки для выражения границы секции в столбце \"%s\" не " "соответствует правилу сортировки для ключа секционирования \"%s\"" -#: parser/parse_utilcmd.c:4063 +#: parser/parse_utilcmd.c:4261 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "указанное значение нельзя привести к типу %s столбца \"%s\"" -#: parser/scansup.c:204 +#: parser/parser.c:228 +msgid "UESCAPE must be followed by a simple string literal" +msgstr "За UESCAPE должна следовать простая строковая константа" + +#: parser/parser.c:233 +msgid "invalid Unicode escape character" +msgstr "неверный символ спецкода Unicode" + +#: parser/parser.c:302 scan.l:1329 +#, c-format +msgid "invalid Unicode escape value" +msgstr "неверное значение спецкода Unicode" + +#: parser/parser.c:449 scan.l:677 +#, c-format +msgid "invalid Unicode escape" +msgstr "неверный спецкод Unicode" + +#: parser/parser.c:450 +#, c-format +msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." +msgstr "Спецкоды Unicode должны иметь вид \\XXXX или \\+XXXXXX." + +#: parser/parser.c:478 scan.l:638 scan.l:654 scan.l:670 +#, c-format +msgid "invalid Unicode surrogate pair" +msgstr "неверная суррогатная пара Unicode" + +#: parser/scansup.c:203 #, c-format msgid "identifier \"%s\" will be truncated to \"%s\"" msgstr "идентификатор \"%s\" будет усечён до \"%s\"" -#: partitioning/partbounds.c:958 +#: partitioning/partbounds.c:2821 #, c-format msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "секция \"%s\" конфликтует с существующей секцией по умолчанию \"%s\"" -#: partitioning/partbounds.c:1017 +#: partitioning/partbounds.c:2880 #, c-format msgid "" "every hash partition modulus must be a factor of the next larger modulus" msgstr "" "модуль каждой хеш-секции должен быть делителем модулей, превышающих его" -#: partitioning/partbounds.c:1113 +#: partitioning/partbounds.c:2976 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "для секции \"%s\" заданы границы, образующие пустой диапазон" -#: partitioning/partbounds.c:1115 +#: partitioning/partbounds.c:2978 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "Указанная нижняя граница %s больше или равна верхней границе %s." -#: partitioning/partbounds.c:1212 +#: partitioning/partbounds.c:3075 #, c-format msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "секция \"%s\" пересекается с секцией \"%s\"" -#: partitioning/partbounds.c:1329 +#: partitioning/partbounds.c:3192 #, c-format msgid "" "skipped scanning foreign table \"%s\" which is a partition of default " @@ -17944,26 +18382,17 @@ msgstr "" "пропущено сканирование сторонней таблицы \"%s\", являющейся секцией секции " "по умолчанию \"%s\"" -#: partitioning/partbounds.c:1362 -#, c-format -msgid "" -"updated partition constraint for default partition \"%s\" would be violated " -"by some row" -msgstr "" -"изменённое ограничение секции для секции по умолчанию \"%s\" будет нарушено " -"некоторыми строками" - -#: partitioning/partbounds.c:2820 +#: partitioning/partbounds.c:4644 #, c-format msgid "remainder for hash partition must be a non-negative integer" msgstr "остаток для хеш-секции должен быть неотрицательным целым" -#: partitioning/partbounds.c:2847 +#: partitioning/partbounds.c:4668 #, c-format msgid "\"%s\" is not a hash partitioned table" msgstr "\"%s\" не является таблицей, секционированной по хешу" -#: partitioning/partbounds.c:2858 partitioning/partbounds.c:2975 +#: partitioning/partbounds.c:4679 partitioning/partbounds.c:4796 #, c-format msgid "" "number of partitioning columns (%d) does not match number of partition keys " @@ -17972,7 +18401,7 @@ msgstr "" "число секционирующих столбцов (%d) не равно числу представленных ключей " "секционирования (%d)" -#: partitioning/partbounds.c:2880 partitioning/partbounds.c:2912 +#: partitioning/partbounds.c:4701 partitioning/partbounds.c:4733 #, c-format msgid "" "column %d of the partition key has type \"%s\", but supplied value is of " @@ -17981,6 +18410,12 @@ msgstr "" "столбец %d ключа секционирования имеет тип \"%s\", но для него передано " "значение типа \"%s\"" +#: port/pg_sema.c:209 port/pg_shmem.c:640 port/posix_sema.c:209 +#: port/sysv_sema.c:327 port/sysv_shmem.c:640 +#, c-format +msgid "could not stat data directory \"%s\": %m" +msgstr "не удалось получить информацию о каталоге данных \"%s\": %m" + #: port/pg_shmem.c:216 port/sysv_shmem.c:216 #, c-format msgid "could not create shared memory segment: %m" @@ -18037,12 +18472,12 @@ msgstr "" "Подробная информация о настройке разделяемой памяти содержится в " "документации PostgreSQL." -#: port/pg_shmem.c:577 port/sysv_shmem.c:577 +#: port/pg_shmem.c:578 port/sysv_shmem.c:578 #, c-format msgid "could not map anonymous shared memory: %m" msgstr "не удалось получить анонимную разделяемую память: %m" -#: port/pg_shmem.c:579 port/sysv_shmem.c:579 +#: port/pg_shmem.c:580 port/sysv_shmem.c:580 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory " @@ -18056,19 +18491,19 @@ msgstr "" "Б) можно снизить использование разделяемой памяти, возможно, уменьшив " "shared_buffers или max_connections." -#: port/pg_shmem.c:639 port/sysv_shmem.c:639 +#: port/pg_shmem.c:648 port/sysv_shmem.c:648 #, c-format msgid "huge pages not supported on this platform" msgstr "гигантские страницы на этой платформе не поддерживаются" -#: port/pg_shmem.c:700 port/sysv_shmem.c:700 utils/init/miscinit.c:1069 +#: port/pg_shmem.c:709 port/sysv_shmem.c:709 utils/init/miscinit.c:1137 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "" "ранее выделенный блок разделяемой памяти (ключ %lu, ID %lu) по-прежнему " "используется" -#: port/pg_shmem.c:703 port/sysv_shmem.c:703 utils/init/miscinit.c:1071 +#: port/pg_shmem.c:712 port/sysv_shmem.c:712 utils/init/miscinit.c:1139 #, c-format msgid "" "Terminate any old server processes associated with data directory \"%s\"." @@ -18076,22 +18511,17 @@ msgstr "" "Завершите все старые серверные процессы, работающие с каталогом данных \"%s" "\"." -#: port/pg_shmem.c:754 port/sysv_shmem.c:754 -#, c-format -msgid "could not stat data directory \"%s\": %m" -msgstr "не удалось получить информацию о каталоге данных \"%s\": %m" - -#: port/sysv_sema.c:123 +#: port/sysv_sema.c:124 #, c-format msgid "could not create semaphores: %m" msgstr "не удалось создать семафоры: %m" -#: port/sysv_sema.c:124 +#: port/sysv_sema.c:125 #, c-format msgid "Failed system call was semget(%lu, %d, 0%o)." msgstr "Ошибка в системном вызове semget(%lu, %d, 0%o)." -#: port/sysv_sema.c:128 +#: port/sysv_sema.c:129 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs " @@ -18110,7 +18540,7 @@ msgstr "" "Подробная информация о настройке разделяемой памяти содержится в " "документации PostgreSQL." -#: port/sysv_sema.c:158 +#: port/sysv_sema.c:159 #, c-format msgid "" "You possibly need to raise your kernel's SEMVMX value to be at least %d. " @@ -18154,34 +18584,29 @@ msgstr "" "не удалось создать канал приёма сигналов для процесса с PID %d (код ошибки: " "%lu)" -#: port/win32/signal.c:309 port/win32/signal.c:346 +#: port/win32/signal.c:251 #, c-format msgid "could not create signal listener pipe: error code %lu; retrying\n" msgstr "" "не удалось создать канал приёма сигналов (код ошибки: %lu); ещё одна " "попытка...\n" -#: port/win32/signal.c:357 -#, c-format -msgid "could not create signal dispatch thread: error code %lu\n" -msgstr "не удалось создать поток распределения сигналов (код ошибки: %lu)\n" - #: port/win32_sema.c:104 #, c-format msgid "could not create semaphore: error code %lu" msgstr "не удалось создать семафор (код ошибки: %lu)" -#: port/win32_sema.c:181 +#: port/win32_sema.c:180 #, c-format msgid "could not lock semaphore: error code %lu" msgstr "не удалось заблокировать семафор (код ошибки: %lu)" -#: port/win32_sema.c:201 +#: port/win32_sema.c:200 #, c-format msgid "could not unlock semaphore: error code %lu" msgstr "не удалось разблокировать семафор (код ошибки: %lu)" -#: port/win32_sema.c:231 +#: port/win32_sema.c:230 #, c-format msgid "could not try-lock semaphore: error code %lu" msgstr "не удалось попытаться заблокировать семафор (код ошибки: %lu)" @@ -18258,73 +18683,73 @@ msgstr "Ошибка в системном вызове DuplicateHandle." msgid "Failed system call was MapViewOfFileEx." msgstr "Ошибка в системном вызове MapViewOfFileEx." -#: postmaster/autovacuum.c:405 +#: postmaster/autovacuum.c:406 #, c-format msgid "could not fork autovacuum launcher process: %m" msgstr "породить процесс запуска автоочистки не удалось: %m" -#: postmaster/autovacuum.c:441 +#: postmaster/autovacuum.c:442 #, c-format msgid "autovacuum launcher started" msgstr "процесс запуска автоочистки создан" -#: postmaster/autovacuum.c:819 +#: postmaster/autovacuum.c:839 #, c-format msgid "autovacuum launcher shutting down" msgstr "процесс запуска автоочистки завершается" -#: postmaster/autovacuum.c:1481 +#: postmaster/autovacuum.c:1477 #, c-format msgid "could not fork autovacuum worker process: %m" msgstr "не удалось породить рабочий процесс автоочистки: %m" -#: postmaster/autovacuum.c:1690 +#: postmaster/autovacuum.c:1686 #, c-format msgid "autovacuum: processing database \"%s\"" msgstr "автоочистка: обработка базы данных \"%s\"" # skip-rule: capital-letter-first -#: postmaster/autovacuum.c:2259 +#: postmaster/autovacuum.c:2256 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "автоочистка: удаление устаревшей врем. таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2488 +#: postmaster/autovacuum.c:2485 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "автоматическая очистка таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2491 +#: postmaster/autovacuum.c:2488 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "автоматический анализ таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2684 +#: postmaster/autovacuum.c:2681 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "обработка рабочей записи для отношения \"%s.%s.%s\"" -#: postmaster/autovacuum.c:3265 +#: postmaster/autovacuum.c:3285 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "автоочистка не запущена из-за неправильной конфигурации" -#: postmaster/autovacuum.c:3266 +#: postmaster/autovacuum.c:3286 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Включите параметр \"track_counts\"." -#: postmaster/bgworker.c:395 postmaster/bgworker.c:855 +#: postmaster/bgworker.c:405 postmaster/bgworker.c:900 #, c-format msgid "registering background worker \"%s\"" msgstr "регистрация фонового процесса \"%s\"" -#: postmaster/bgworker.c:427 +#: postmaster/bgworker.c:437 #, c-format msgid "unregistering background worker \"%s\"" msgstr "разрегистрация фонового процесса \"%s\"" -#: postmaster/bgworker.c:592 +#: postmaster/bgworker.c:650 #, c-format msgid "" "background worker \"%s\": must attach to shared memory in order to request a " @@ -18333,7 +18758,7 @@ msgstr "" "фоновый процесс \"%s\" должен иметь доступ к общей памяти, чтобы запросить " "подключение к БД" -#: postmaster/bgworker.c:601 +#: postmaster/bgworker.c:659 #, c-format msgid "" "background worker \"%s\": cannot request database access if starting at " @@ -18342,12 +18767,12 @@ msgstr "" "фоновый процесс \"%s\" не может получить доступ к БД, если он запущен при " "старте главного процесса" -#: postmaster/bgworker.c:615 +#: postmaster/bgworker.c:673 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "фоновый процесс \"%s\": неправильный интервал перезапуска" -#: postmaster/bgworker.c:630 +#: postmaster/bgworker.c:688 #, c-format msgid "" "background worker \"%s\": parallel workers may not be configured for restart" @@ -18355,19 +18780,19 @@ msgstr "" "фоновый процесс \"%s\": параллельные исполнители не могут быть настроены для " "перезапуска" -#: postmaster/bgworker.c:674 +#: postmaster/bgworker.c:712 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "завершение фонового процесса \"%s\" по команде администратора" -#: postmaster/bgworker.c:863 +#: postmaster/bgworker.c:908 #, c-format msgid "" "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "" "фоновой процесс \"%s\" должен быть зарегистрирован в shared_preload_libraries" -#: postmaster/bgworker.c:875 +#: postmaster/bgworker.c:920 #, c-format msgid "" "background worker \"%s\": only dynamic background workers can request " @@ -18376,12 +18801,12 @@ msgstr "" "фоновый процесс \"%s\": только динамические фоновые процессы могут " "запрашивать уведомление" -#: postmaster/bgworker.c:890 +#: postmaster/bgworker.c:935 #, c-format msgid "too many background workers" msgstr "слишком много фоновых процессов" -#: postmaster/bgworker.c:891 +#: postmaster/bgworker.c:936 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "" @@ -18393,13 +18818,13 @@ msgstr[1] "" msgstr[2] "" "Максимально возможное число фоновых процессов при текущих параметрах: %d." -#: postmaster/bgworker.c:895 +#: postmaster/bgworker.c:940 #, c-format msgid "" "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Возможно, стоит увеличить параметр \"max_worker_processes\"." -#: postmaster/checkpointer.c:458 +#: postmaster/checkpointer.c:418 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" @@ -18407,42 +18832,42 @@ msgstr[0] "контрольные точки происходят слишком msgstr[1] "контрольные точки происходят слишком часто (через %d сек.)" msgstr[2] "контрольные точки происходят слишком часто (через %d сек.)" -#: postmaster/checkpointer.c:462 +#: postmaster/checkpointer.c:422 #, c-format msgid "Consider increasing the configuration parameter \"max_wal_size\"." msgstr "Возможно, стоит увеличить параметр \"max_wal_size\"." -#: postmaster/checkpointer.c:1081 +#: postmaster/checkpointer.c:1032 #, c-format msgid "checkpoint request failed" msgstr "сбой при запросе контрольной точки" -#: postmaster/checkpointer.c:1082 +#: postmaster/checkpointer.c:1033 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Смотрите подробности в протоколе сервера." -#: postmaster/checkpointer.c:1266 +#: postmaster/checkpointer.c:1217 #, c-format msgid "compacted fsync request queue from %d entries to %d entries" msgstr "очередь запросов fsync сжата (было записей: %d, стало: %d)" -#: postmaster/pgarch.c:159 +#: postmaster/pgarch.c:155 #, c-format msgid "could not fork archiver: %m" msgstr "не удалось породить процесс архивации: %m" -#: postmaster/pgarch.c:470 +#: postmaster/pgarch.c:425 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "режим архивации включён, но команда архивации не задана" -#: postmaster/pgarch.c:492 +#: postmaster/pgarch.c:447 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "удалён ненужный файл состояния архива \"%s\"" -#: postmaster/pgarch.c:502 +#: postmaster/pgarch.c:457 #, c-format msgid "" "removal of orphan archive status file \"%s\" failed too many times, will try " @@ -18451,7 +18876,7 @@ msgstr "" "удалить ненужный файл состояния архива \"%s\" не получилось много раз " "подряд; следующая попытка будет сделана позже" -#: postmaster/pgarch.c:538 +#: postmaster/pgarch.c:493 #, c-format msgid "" "archiving write-ahead log file \"%s\" failed too many times, will try again " @@ -18460,23 +18885,23 @@ msgstr "" "заархивировать файл журнала предзаписи \"%s\" не удалось много раз подряд; " "следующая попытка будет сделана позже" -#: postmaster/pgarch.c:639 +#: postmaster/pgarch.c:594 #, c-format msgid "archive command failed with exit code %d" msgstr "команда архивации завершилась ошибкой с кодом %d" -#: postmaster/pgarch.c:641 postmaster/pgarch.c:651 postmaster/pgarch.c:657 -#: postmaster/pgarch.c:666 +#: postmaster/pgarch.c:596 postmaster/pgarch.c:606 postmaster/pgarch.c:612 +#: postmaster/pgarch.c:621 #, c-format msgid "The failed archive command was: %s" msgstr "Команда архивации с ошибкой: %s" -#: postmaster/pgarch.c:648 +#: postmaster/pgarch.c:603 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "команда архивации была прервана исключением 0x%X" -#: postmaster/pgarch.c:650 postmaster/postmaster.c:3675 +#: postmaster/pgarch.c:605 postmaster/postmaster.c:3725 #, c-format msgid "" "See C include file \"ntstatus.h\" for a description of the hexadecimal value." @@ -18484,142 +18909,143 @@ msgstr "" "Описание этого шестнадцатеричного значения ищите во включаемом C-файле " "\"ntstatus.h\"" -#: postmaster/pgarch.c:655 +#: postmaster/pgarch.c:610 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "команда архивации завершена по сигналу %d: %s" -#: postmaster/pgarch.c:664 +#: postmaster/pgarch.c:619 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "команда архивации завершилась с неизвестным кодом состояния %d" -#: postmaster/pgstat.c:396 +#: postmaster/pgstat.c:419 #, c-format msgid "could not resolve \"localhost\": %s" msgstr "не удалось разрешить \"localhost\": %s" -#: postmaster/pgstat.c:419 +#: postmaster/pgstat.c:442 #, c-format msgid "trying another address for the statistics collector" msgstr "проба другого адреса для сборщика статистики" -#: postmaster/pgstat.c:428 +#: postmaster/pgstat.c:451 #, c-format msgid "could not create socket for statistics collector: %m" msgstr "не удалось создать сокет для сборщика статистики: %m" -#: postmaster/pgstat.c:440 +#: postmaster/pgstat.c:463 #, c-format msgid "could not bind socket for statistics collector: %m" msgstr "не удалось привязаться к сокету для сборщика статистики: %m" -#: postmaster/pgstat.c:451 +#: postmaster/pgstat.c:474 #, c-format msgid "could not get address of socket for statistics collector: %m" msgstr "не удалось получить адрес сокета для сборщика статистики: %m" -#: postmaster/pgstat.c:467 +#: postmaster/pgstat.c:490 #, c-format msgid "could not connect socket for statistics collector: %m" msgstr "не удалось подключить сокет для сборщика статистики: %m" -#: postmaster/pgstat.c:488 +#: postmaster/pgstat.c:511 #, c-format msgid "could not send test message on socket for statistics collector: %m" msgstr "" "не удалось послать тестовое сообщение в сокет для сборщика статистики: %m" -#: postmaster/pgstat.c:514 +#: postmaster/pgstat.c:537 #, c-format msgid "select() failed in statistics collector: %m" msgstr "сбой select() в сборщике статистики: %m" -#: postmaster/pgstat.c:529 +#: postmaster/pgstat.c:552 #, c-format msgid "test message did not get through on socket for statistics collector" msgstr "тестовое сообщение не прошло через сокет для сборщика статистики" -#: postmaster/pgstat.c:544 +#: postmaster/pgstat.c:567 #, c-format msgid "could not receive test message on socket for statistics collector: %m" msgstr "" "тестовое сообщение через сокет для сборщика статистики получить не удалось: " "%m" -#: postmaster/pgstat.c:554 +#: postmaster/pgstat.c:577 #, c-format msgid "incorrect test message transmission on socket for statistics collector" msgstr "тестовое сообщение через сокет для сборщика статистики прошло неверно" -#: postmaster/pgstat.c:577 +#: postmaster/pgstat.c:600 #, c-format msgid "could not set statistics collector socket to nonblocking mode: %m" msgstr "" "не удалось переключить сокет сборщика статистики в неблокирующий режим: %m" -#: postmaster/pgstat.c:616 +#: postmaster/pgstat.c:642 #, c-format msgid "disabling statistics collector for lack of working socket" msgstr "сборщик статистики отключается из-за нехватки рабочего сокета" -#: postmaster/pgstat.c:763 +#: postmaster/pgstat.c:789 #, c-format msgid "could not fork statistics collector: %m" msgstr "не удалось породить процесс сборщика статистики: %m" -#: postmaster/pgstat.c:1347 +#: postmaster/pgstat.c:1376 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "запрошен сброс неизвестного счётчика: \"%s\"" -#: postmaster/pgstat.c:1348 +#: postmaster/pgstat.c:1377 #, c-format msgid "Target must be \"archiver\" or \"bgwriter\"." msgstr "Допустимый счётчик: \"archiver\" или \"bgwriter\"." -#: postmaster/pgstat.c:4534 +#: postmaster/pgstat.c:4567 #, c-format msgid "could not read statistics message: %m" msgstr "не удалось прочитать сообщение статистики: %m" -#: postmaster/pgstat.c:4875 postmaster/pgstat.c:5032 +#: postmaster/pgstat.c:4889 postmaster/pgstat.c:5052 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "не удалось открыть временный файл статистики \"%s\": %m" -#: postmaster/pgstat.c:4942 postmaster/pgstat.c:5077 +#: postmaster/pgstat.c:4962 postmaster/pgstat.c:5097 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "не удалось записать во временный файл статистики \"%s\": %m" -#: postmaster/pgstat.c:4951 postmaster/pgstat.c:5086 +#: postmaster/pgstat.c:4971 postmaster/pgstat.c:5106 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "не удалось закрыть временный файл статистики \"%s\": %m" -#: postmaster/pgstat.c:4959 postmaster/pgstat.c:5094 +#: postmaster/pgstat.c:4979 postmaster/pgstat.c:5114 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "" "не удалось переименовать временный файл статистики из \"%s\" в \"%s\": %m" -#: postmaster/pgstat.c:5183 postmaster/pgstat.c:5389 postmaster/pgstat.c:5542 +#: postmaster/pgstat.c:5211 postmaster/pgstat.c:5428 postmaster/pgstat.c:5582 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "не удалось открыть файл статистики \"%s\": %m" -#: postmaster/pgstat.c:5195 postmaster/pgstat.c:5205 postmaster/pgstat.c:5226 -#: postmaster/pgstat.c:5248 postmaster/pgstat.c:5263 postmaster/pgstat.c:5326 -#: postmaster/pgstat.c:5401 postmaster/pgstat.c:5421 postmaster/pgstat.c:5439 -#: postmaster/pgstat.c:5455 postmaster/pgstat.c:5473 postmaster/pgstat.c:5489 -#: postmaster/pgstat.c:5554 postmaster/pgstat.c:5566 postmaster/pgstat.c:5578 -#: postmaster/pgstat.c:5603 postmaster/pgstat.c:5625 +#: postmaster/pgstat.c:5223 postmaster/pgstat.c:5233 postmaster/pgstat.c:5254 +#: postmaster/pgstat.c:5265 postmaster/pgstat.c:5287 postmaster/pgstat.c:5302 +#: postmaster/pgstat.c:5365 postmaster/pgstat.c:5440 postmaster/pgstat.c:5460 +#: postmaster/pgstat.c:5478 postmaster/pgstat.c:5494 postmaster/pgstat.c:5512 +#: postmaster/pgstat.c:5528 postmaster/pgstat.c:5594 postmaster/pgstat.c:5606 +#: postmaster/pgstat.c:5618 postmaster/pgstat.c:5629 postmaster/pgstat.c:5654 +#: postmaster/pgstat.c:5676 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "файл статистики \"%s\" испорчен" -#: postmaster/pgstat.c:5754 +#: postmaster/pgstat.c:5805 #, c-format msgid "" "using stale statistics instead of current ones because stats collector is " @@ -18628,27 +19054,27 @@ msgstr "" "используется просроченная статистика вместо текущей, так как сборщик " "статистики не отвечает" -#: postmaster/pgstat.c:6081 +#: postmaster/pgstat.c:6135 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "таблица хеша базы данных испорчена при очистке --- прерывание" -#: postmaster/postmaster.c:712 +#: postmaster/postmaster.c:733 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: неверный аргумент для параметра -f: \"%s\"\n" -#: postmaster/postmaster.c:798 +#: postmaster/postmaster.c:819 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: неверный аргумент для параметра -t: \"%s\"\n" -#: postmaster/postmaster.c:849 +#: postmaster/postmaster.c:870 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: неверный аргумент: \"%s\"\n" -#: postmaster/postmaster.c:891 +#: postmaster/postmaster.c:912 #, c-format msgid "" "%s: superuser_reserved_connections (%d) must be less than max_connections " @@ -18657,12 +19083,12 @@ msgstr "" "%s: значение superuser_reserved_connections (%d) должно быть меньше " "max_connections (%d)\n" -#: postmaster/postmaster.c:898 +#: postmaster/postmaster.c:919 #, c-format msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" msgstr "Архивацию WAL нельзя включить, если установлен wal_level \"minimal\"" -#: postmaster/postmaster.c:901 +#: postmaster/postmaster.c:922 #, c-format msgid "" "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or " @@ -18671,93 +19097,93 @@ msgstr "" "Для потоковой трансляции WAL (max_wal_senders > 0) wal_level должен быть " "\"replica\" или \"logical\"" -#: postmaster/postmaster.c:909 +#: postmaster/postmaster.c:930 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: ошибка в таблицах маркеров времени, требуется исправление\n" -#: postmaster/postmaster.c:998 +#: postmaster/postmaster.c:1047 +#, c-format +msgid "could not create I/O completion port for child queue" +msgstr "не удалось создать порт завершения ввода/вывода для очереди потомков" + +#: postmaster/postmaster.c:1113 +#, c-format +msgid "ending log output to stderr" +msgstr "завершение вывода в stderr" + +#: postmaster/postmaster.c:1114 +#, c-format +msgid "Future log output will go to log destination \"%s\"." +msgstr "В дальнейшем протокол будет выводиться в \"%s\"." + +#: postmaster/postmaster.c:1125 #, c-format msgid "starting %s" msgstr "запускается %s" -#: postmaster/postmaster.c:1027 postmaster/postmaster.c:1125 -#: utils/init/miscinit.c:1551 +#: postmaster/postmaster.c:1154 postmaster/postmaster.c:1252 +#: utils/init/miscinit.c:1597 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "неверный формат списка в параметре \"%s\"" -#: postmaster/postmaster.c:1058 +#: postmaster/postmaster.c:1185 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "не удалось создать принимающий сокет для \"%s\"" -#: postmaster/postmaster.c:1064 +#: postmaster/postmaster.c:1191 #, c-format msgid "could not create any TCP/IP sockets" msgstr "не удалось создать сокеты TCP/IP" -#: postmaster/postmaster.c:1147 +#: postmaster/postmaster.c:1274 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "не удалось создать Unix-сокет в каталоге \"%s\"" -#: postmaster/postmaster.c:1153 +#: postmaster/postmaster.c:1280 #, c-format msgid "could not create any Unix-domain sockets" msgstr "ни один Unix-сокет создать не удалось" -#: postmaster/postmaster.c:1165 +#: postmaster/postmaster.c:1292 #, c-format msgid "no socket created for listening" msgstr "отсутствуют принимающие сокеты" -#: postmaster/postmaster.c:1205 -#, c-format -msgid "could not create I/O completion port for child queue" -msgstr "не удалось создать порт завершения ввода/вывода для очереди потомков" - -#: postmaster/postmaster.c:1234 +#: postmaster/postmaster.c:1323 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: не удалось поменять права для внешнего файла PID \"%s\": %s\n" -#: postmaster/postmaster.c:1238 +#: postmaster/postmaster.c:1327 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: не удалось записать внешний файл PID \"%s\": %s\n" -#: postmaster/postmaster.c:1298 -#, c-format -msgid "ending log output to stderr" -msgstr "завершение вывода в stderr" - -#: postmaster/postmaster.c:1299 -#, c-format -msgid "Future log output will go to log destination \"%s\"." -msgstr "В дальнейшем протокол будет выводиться в \"%s\"." - -#: postmaster/postmaster.c:1325 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1360 utils/init/postinit.c:215 #, c-format msgid "could not load pg_hba.conf" msgstr "не удалось загрузить pg_hba.conf" -#: postmaster/postmaster.c:1351 +#: postmaster/postmaster.c:1386 #, c-format msgid "postmaster became multithreaded during startup" msgstr "процесс postmaster стал многопоточным при запуске" -#: postmaster/postmaster.c:1352 +#: postmaster/postmaster.c:1387 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Установите в переменной окружения LC_ALL правильную локаль." -#: postmaster/postmaster.c:1453 +#: postmaster/postmaster.c:1488 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: подходящий исполняемый файл postgres не найден" -#: postmaster/postmaster.c:1476 utils/misc/tzparser.c:341 +#: postmaster/postmaster.c:1511 utils/misc/tzparser.c:340 #, c-format msgid "" "This may indicate an incomplete PostgreSQL installation, or that the file " @@ -18766,7 +19192,7 @@ msgstr "" "Возможно, PostgreSQL установлен не полностью или файла \"%s\" нет в " "положенном месте." -#: postmaster/postmaster.c:1503 +#: postmaster/postmaster.c:1538 #, c-format msgid "" "%s: could not find the database system\n" @@ -18777,465 +19203,463 @@ msgstr "" "Ожидалось найти её в каталоге \"%s\",\n" "но открыть файл \"%s\" не удалось: %s\n" -#: postmaster/postmaster.c:1680 +#: postmaster/postmaster.c:1715 #, c-format msgid "select() failed in postmaster: %m" msgstr "сбой select() в postmaster'е: %m" -#: postmaster/postmaster.c:1835 +#: postmaster/postmaster.c:1870 #, c-format msgid "" "performing immediate shutdown because data directory lock file is invalid" msgstr "" "немедленное отключение из-за ошибочного файла блокировки каталога данных" -#: postmaster/postmaster.c:1934 postmaster/postmaster.c:1965 +#: postmaster/postmaster.c:1973 postmaster/postmaster.c:2004 #, c-format msgid "incomplete startup packet" msgstr "неполный стартовый пакет" -#: postmaster/postmaster.c:1946 +#: postmaster/postmaster.c:1985 #, c-format msgid "invalid length of startup packet" msgstr "неверная длина стартового пакета" -#: postmaster/postmaster.c:2004 +#: postmaster/postmaster.c:2043 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "не удалось отправить ответ в процессе SSL-согласования: %m" -#: postmaster/postmaster.c:2031 +#: postmaster/postmaster.c:2075 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "не удалось отправить ответ в процессе согласования GSSAPI: %m" -#: postmaster/postmaster.c:2056 +#: postmaster/postmaster.c:2105 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "" "неподдерживаемый протокол клиентского приложения %u.%u; сервер поддерживает " "%u.0 - %u.%u" -#: postmaster/postmaster.c:2120 utils/misc/guc.c:6544 utils/misc/guc.c:6580 -#: utils/misc/guc.c:6650 utils/misc/guc.c:7973 utils/misc/guc.c:10820 -#: utils/misc/guc.c:10854 +#: postmaster/postmaster.c:2169 utils/misc/guc.c:6769 utils/misc/guc.c:6805 +#: utils/misc/guc.c:6875 utils/misc/guc.c:8226 utils/misc/guc.c:11072 +#: utils/misc/guc.c:11106 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "неверное значение для параметра \"%s\": \"%s\"" -#: postmaster/postmaster.c:2123 +#: postmaster/postmaster.c:2172 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Допустимые значения: \"false\", 0, \"true\", 1, \"database\"." -#: postmaster/postmaster.c:2168 +#: postmaster/postmaster.c:2217 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "" "неверная структура стартового пакета: последним байтом должен быть терминатор" -#: postmaster/postmaster.c:2206 +#: postmaster/postmaster.c:2255 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "в стартовом пакете не указано имя пользователя PostgreSQL" -#: postmaster/postmaster.c:2265 +#: postmaster/postmaster.c:2319 #, c-format msgid "the database system is starting up" msgstr "система баз данных запускается" -#: postmaster/postmaster.c:2270 +#: postmaster/postmaster.c:2324 #, c-format msgid "the database system is shutting down" msgstr "система баз данных останавливается" -#: postmaster/postmaster.c:2275 +#: postmaster/postmaster.c:2329 #, c-format msgid "the database system is in recovery mode" msgstr "система баз данных в режиме восстановления" -#: postmaster/postmaster.c:2280 storage/ipc/procarray.c:293 -#: storage/ipc/sinvaladt.c:298 storage/lmgr/proc.c:363 +#: postmaster/postmaster.c:2334 storage/ipc/procarray.c:293 +#: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:362 #, c-format msgid "sorry, too many clients already" msgstr "извините, уже слишком много клиентов" -#: postmaster/postmaster.c:2370 +#: postmaster/postmaster.c:2424 #, c-format msgid "wrong key in cancel request for process %d" msgstr "неправильный ключ в запросе на отмену процесса %d" -#: postmaster/postmaster.c:2382 +#: postmaster/postmaster.c:2436 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "процесс с кодом %d, полученным в запросе на отмену, не найден" -#: postmaster/postmaster.c:2635 +#: postmaster/postmaster.c:2689 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "получен SIGHUP, файлы конфигурации перезагружаются" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2661 postmaster/postmaster.c:2665 +#: postmaster/postmaster.c:2715 postmaster/postmaster.c:2719 #, c-format msgid "%s was not reloaded" msgstr "%s не был перезагружен" -#: postmaster/postmaster.c:2675 +#: postmaster/postmaster.c:2729 #, c-format msgid "SSL configuration was not reloaded" msgstr "конфигурация SSL не была перезагружена" -#: postmaster/postmaster.c:2723 +#: postmaster/postmaster.c:2785 #, c-format msgid "received smart shutdown request" msgstr "получен запрос на \"вежливое\" выключение" -#: postmaster/postmaster.c:2781 +#: postmaster/postmaster.c:2831 #, c-format msgid "received fast shutdown request" msgstr "получен запрос на быстрое выключение" -#: postmaster/postmaster.c:2814 +#: postmaster/postmaster.c:2849 #, c-format msgid "aborting any active transactions" msgstr "прерывание всех активных транзакций" -#: postmaster/postmaster.c:2848 +#: postmaster/postmaster.c:2873 #, c-format msgid "received immediate shutdown request" msgstr "получен запрос на немедленное выключение" -#: postmaster/postmaster.c:2915 +#: postmaster/postmaster.c:2948 #, c-format msgid "shutdown at recovery target" msgstr "выключение при достижении цели восстановления" -#: postmaster/postmaster.c:2931 postmaster/postmaster.c:2954 +#: postmaster/postmaster.c:2966 postmaster/postmaster.c:3002 msgid "startup process" msgstr "стартовый процесс" -#: postmaster/postmaster.c:2934 +#: postmaster/postmaster.c:2969 #, c-format msgid "aborting startup due to startup process failure" msgstr "прерывание запуска из-за ошибки в стартовом процессе" -#: postmaster/postmaster.c:2995 +#: postmaster/postmaster.c:3044 #, c-format msgid "database system is ready to accept connections" msgstr "система БД готова принимать подключения" -#: postmaster/postmaster.c:3016 +#: postmaster/postmaster.c:3065 msgid "background writer process" msgstr "процесс фоновой записи" -#: postmaster/postmaster.c:3070 +#: postmaster/postmaster.c:3119 msgid "checkpointer process" msgstr "процесс контрольных точек" -#: postmaster/postmaster.c:3086 +#: postmaster/postmaster.c:3135 msgid "WAL writer process" msgstr "процесс записи WAL" -#: postmaster/postmaster.c:3101 +#: postmaster/postmaster.c:3150 msgid "WAL receiver process" msgstr "процесс считывания WAL" -#: postmaster/postmaster.c:3116 +#: postmaster/postmaster.c:3165 msgid "autovacuum launcher process" msgstr "процесс запуска автоочистки" -#: postmaster/postmaster.c:3131 +#: postmaster/postmaster.c:3180 msgid "archiver process" msgstr "процесс архивации" -#: postmaster/postmaster.c:3147 +#: postmaster/postmaster.c:3196 msgid "statistics collector process" msgstr "процесс сбора статистики" -#: postmaster/postmaster.c:3161 +#: postmaster/postmaster.c:3210 msgid "system logger process" msgstr "процесс системного протоколирования" -#: postmaster/postmaster.c:3223 +#: postmaster/postmaster.c:3274 #, c-format msgid "background worker \"%s\"" msgstr "фоновый процесс \"%s\"" -#: postmaster/postmaster.c:3307 postmaster/postmaster.c:3327 -#: postmaster/postmaster.c:3334 postmaster/postmaster.c:3352 +#: postmaster/postmaster.c:3358 postmaster/postmaster.c:3378 +#: postmaster/postmaster.c:3385 postmaster/postmaster.c:3403 msgid "server process" msgstr "процесс сервера" -#: postmaster/postmaster.c:3406 +#: postmaster/postmaster.c:3457 #, c-format msgid "terminating any other active server processes" msgstr "завершение всех остальных активных серверных процессов" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3662 +#: postmaster/postmaster.c:3712 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) завершился с кодом выхода %d" -#: postmaster/postmaster.c:3664 postmaster/postmaster.c:3676 -#: postmaster/postmaster.c:3686 postmaster/postmaster.c:3697 +#: postmaster/postmaster.c:3714 postmaster/postmaster.c:3726 +#: postmaster/postmaster.c:3736 postmaster/postmaster.c:3747 #, c-format msgid "Failed process was running: %s" msgstr "Завершившийся процесс выполнял действие: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3673 +#: postmaster/postmaster.c:3723 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) был прерван исключением 0x%X" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3683 +#: postmaster/postmaster.c:3733 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) был завершён по сигналу %d: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3695 +#: postmaster/postmaster.c:3745 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) завершился с неизвестным кодом состояния %d" -#: postmaster/postmaster.c:3878 +#: postmaster/postmaster.c:3960 #, c-format msgid "abnormal database system shutdown" msgstr "аварийное выключение системы БД" -#: postmaster/postmaster.c:3918 +#: postmaster/postmaster.c:4000 #, c-format msgid "all server processes terminated; reinitializing" msgstr "все серверные процессы завершены... переинициализация" -#: postmaster/postmaster.c:4088 postmaster/postmaster.c:5479 -#: postmaster/postmaster.c:5867 +#: postmaster/postmaster.c:4170 postmaster/postmaster.c:5579 +#: postmaster/postmaster.c:5966 #, c-format msgid "could not generate random cancel key" msgstr "не удалось сгенерировать случайный ключ отмены" -#: postmaster/postmaster.c:4142 +#: postmaster/postmaster.c:4224 #, c-format msgid "could not fork new process for connection: %m" msgstr "породить новый процесс для соединения не удалось: %m" -#: postmaster/postmaster.c:4184 +#: postmaster/postmaster.c:4266 msgid "could not fork new process for connection: " msgstr "породить новый процесс для соединения не удалось: " -#: postmaster/postmaster.c:4294 +#: postmaster/postmaster.c:4383 #, c-format msgid "connection received: host=%s port=%s" msgstr "принято подключение: узел=%s порт=%s" -#: postmaster/postmaster.c:4299 +#: postmaster/postmaster.c:4388 #, c-format msgid "connection received: host=%s" msgstr "принято подключение: узел=%s" -#: postmaster/postmaster.c:4569 +#: postmaster/postmaster.c:4658 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "запустить серверный процесс \"%s\" не удалось: %m" -#: postmaster/postmaster.c:4722 +#: postmaster/postmaster.c:4817 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "" "число повторных попыток резервирования разделяемой памяти достигло предела" -#: postmaster/postmaster.c:4723 +#: postmaster/postmaster.c:4818 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Это может быть вызвано антивирусным ПО или механизмом ASLR." -#: postmaster/postmaster.c:4934 +#: postmaster/postmaster.c:5012 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "не удалось загрузить конфигурацию SSL в дочерний процесс" -#: postmaster/postmaster.c:5066 +#: postmaster/postmaster.c:5144 #, c-format -msgid "Please report this to ." -msgstr "" -"Пожалуйста, напишите об этой ошибке по адресу ." +msgid "Please report this to <%s>." +msgstr "Пожалуйста, напишите об этой ошибке по адресу <%s>." -#: postmaster/postmaster.c:5153 +#: postmaster/postmaster.c:5231 #, c-format msgid "database system is ready to accept read only connections" msgstr "система БД готова к подключениям в режиме \"только чтение\"" -#: postmaster/postmaster.c:5407 +#: postmaster/postmaster.c:5507 #, c-format msgid "could not fork startup process: %m" msgstr "породить стартовый процесс не удалось: %m" -#: postmaster/postmaster.c:5411 +#: postmaster/postmaster.c:5511 #, c-format msgid "could not fork background writer process: %m" msgstr "породить процесс фоновой записи не удалось: %m" -#: postmaster/postmaster.c:5415 +#: postmaster/postmaster.c:5515 #, c-format msgid "could not fork checkpointer process: %m" msgstr "породить процесс контрольных точек не удалось: %m" -#: postmaster/postmaster.c:5419 +#: postmaster/postmaster.c:5519 #, c-format msgid "could not fork WAL writer process: %m" msgstr "породить процесс записи WAL не удалось: %m" -#: postmaster/postmaster.c:5423 +#: postmaster/postmaster.c:5523 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "породить процесс считывания WAL не удалось: %m" -#: postmaster/postmaster.c:5427 +#: postmaster/postmaster.c:5527 #, c-format msgid "could not fork process: %m" msgstr "породить процесс не удалось: %m" -#: postmaster/postmaster.c:5624 postmaster/postmaster.c:5647 +#: postmaster/postmaster.c:5724 postmaster/postmaster.c:5747 #, c-format msgid "database connection requirement not indicated during registration" msgstr "" "при регистрации фонового процесса не указывалось, что ему требуется " "подключение к БД" -#: postmaster/postmaster.c:5631 postmaster/postmaster.c:5654 +#: postmaster/postmaster.c:5731 postmaster/postmaster.c:5754 #, c-format msgid "invalid processing mode in background worker" msgstr "неправильный режим обработки в фоновом процессе" -#: postmaster/postmaster.c:5727 +#: postmaster/postmaster.c:5827 #, c-format msgid "starting background worker process \"%s\"" msgstr "запуск фонового рабочего процесса \"%s\"" -#: postmaster/postmaster.c:5739 +#: postmaster/postmaster.c:5839 #, c-format msgid "could not fork worker process: %m" msgstr "породить рабочий процесс не удалось: %m" -#: postmaster/postmaster.c:5853 +#: postmaster/postmaster.c:5952 #, c-format msgid "no slot available for new worker process" msgstr "для нового рабочего процесса не нашлось свободного слота" -#: postmaster/postmaster.c:6188 +#: postmaster/postmaster.c:6287 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "" "продублировать сокет %d для серверного процесса не удалось (код ошибки: %d)" -#: postmaster/postmaster.c:6220 +#: postmaster/postmaster.c:6319 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "создать наследуемый сокет не удалось (код ошибки: %d)\n" -#: postmaster/postmaster.c:6249 +#: postmaster/postmaster.c:6348 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "открыть файл серверных переменных \"%s\" не удалось: %s\n" -#: postmaster/postmaster.c:6256 +#: postmaster/postmaster.c:6355 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "прочитать файл серверных переменных \"%s\" не удалось: %s\n" -#: postmaster/postmaster.c:6265 +#: postmaster/postmaster.c:6364 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "не удалось стереть файл \"%s\": %s\n" -#: postmaster/postmaster.c:6282 +#: postmaster/postmaster.c:6381 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "отобразить файл серверных переменных не удалось (код ошибки: %lu)\n" -#: postmaster/postmaster.c:6291 +#: postmaster/postmaster.c:6390 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "" "отключить отображение файла серверных переменных не удалось (код ошибки: " "%lu)\n" -#: postmaster/postmaster.c:6298 +#: postmaster/postmaster.c:6397 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "" "закрыть указатель файла серверных переменных не удалось (код ошибки: %lu)\n" -#: postmaster/postmaster.c:6462 +#: postmaster/postmaster.c:6575 #, c-format msgid "could not read exit code for process\n" msgstr "прочитать код завершения процесса не удалось\n" -#: postmaster/postmaster.c:6467 +#: postmaster/postmaster.c:6580 #, c-format msgid "could not post child completion status\n" msgstr "отправить состояние завершения потомка не удалось\n" -#: postmaster/syslogger.c:480 postmaster/syslogger.c:1154 +#: postmaster/syslogger.c:474 postmaster/syslogger.c:1153 #, c-format msgid "could not read from logger pipe: %m" msgstr "не удалось прочитать из канала протоколирования: %m" -#: postmaster/syslogger.c:528 +#: postmaster/syslogger.c:522 #, c-format msgid "logger shutting down" msgstr "остановка протоколирования" -#: postmaster/syslogger.c:572 postmaster/syslogger.c:586 +#: postmaster/syslogger.c:571 postmaster/syslogger.c:585 #, c-format msgid "could not create pipe for syslog: %m" msgstr "не удалось создать канал для syslog: %m" -#: postmaster/syslogger.c:637 +#: postmaster/syslogger.c:636 #, c-format msgid "could not fork system logger: %m" msgstr "не удалось породить процесс системного протоколирования: %m" -#: postmaster/syslogger.c:673 +#: postmaster/syslogger.c:672 #, c-format msgid "redirecting log output to logging collector process" msgstr "передача вывода в протокол процессу сбора протоколов" -#: postmaster/syslogger.c:674 +#: postmaster/syslogger.c:673 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "В дальнейшем протоколы будут выводиться в каталог \"%s\"." -#: postmaster/syslogger.c:682 +#: postmaster/syslogger.c:681 #, c-format msgid "could not redirect stdout: %m" msgstr "не удалось перенаправить stdout: %m" -#: postmaster/syslogger.c:687 postmaster/syslogger.c:704 +#: postmaster/syslogger.c:686 postmaster/syslogger.c:703 #, c-format msgid "could not redirect stderr: %m" msgstr "не удалось перенаправить stderr: %m" -#: postmaster/syslogger.c:1109 +#: postmaster/syslogger.c:1108 #, c-format msgid "could not write to log file: %s\n" msgstr "не удалось записать в файл протокола: %s\n" -#: postmaster/syslogger.c:1226 +#: postmaster/syslogger.c:1225 #, c-format msgid "could not open log file \"%s\": %m" msgstr "не удалось открыть файл протокола \"%s\": %m" -#: postmaster/syslogger.c:1288 postmaster/syslogger.c:1338 +#: postmaster/syslogger.c:1287 postmaster/syslogger.c:1337 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "отключение автопрокрутки (чтобы включить, передайте SIGHUP)" @@ -19254,68 +19678,112 @@ msgstr "" "недетерминированные правила сортировки не поддерживаются для регулярных " "выражений" -#: replication/basebackup.c:102 +#: replication/backup_manifest.c:236 +#, c-format +msgid "expected end timeline %u but found timeline %u" +msgstr "ожидался конец линии времени %u, но обнаружена линия времени %u" + +#: replication/backup_manifest.c:253 +#, c-format +msgid "expected start timeline %u but found timeline %u" +msgstr "ожидалось начало линии времени %u, но обнаружена линия времени %u" + +#: replication/backup_manifest.c:280 +#, c-format +msgid "start timeline %u not found in history of timeline %u" +msgstr "начальная линия времени %u не найдена в истории линии времени %u" + +#: replication/backup_manifest.c:327 +#, c-format +msgid "could not rewind temporary file" +msgstr "не удалось переместиться во временном файле" + +#: replication/backup_manifest.c:354 +#, c-format +msgid "could not read from temporary file: %m" +msgstr "не удалось прочитать из временного файла: %m" + +#: replication/basebackup.c:108 #, c-format msgid "could not read from file \"%s\"" msgstr "не удалось прочитать файл \"%s\"" -#: replication/basebackup.c:462 +#: replication/basebackup.c:551 #, c-format msgid "could not find any WAL files" msgstr "не удалось найти ни одного файла WAL" -#: replication/basebackup.c:476 replication/basebackup.c:491 -#: replication/basebackup.c:500 +#: replication/basebackup.c:566 replication/basebackup.c:582 +#: replication/basebackup.c:591 #, c-format msgid "could not find WAL file \"%s\"" msgstr "не удалось найти файл WAL \"%s\"" -#: replication/basebackup.c:542 replication/basebackup.c:572 +#: replication/basebackup.c:634 replication/basebackup.c:665 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "неприемлемый размер файла WAL \"%s\"" -#: replication/basebackup.c:556 replication/basebackup.c:1567 +#: replication/basebackup.c:648 replication/basebackup.c:1752 #, c-format msgid "base backup could not send data, aborting backup" msgstr "" "в процессе базового резервного копирования не удалось передать данные, " "копирование прерывается" -#: replication/basebackup.c:630 +#: replication/basebackup.c:724 #, c-format -msgid "%s total checksum verification failures" -msgstr "всего ошибок контрольных сумм: %s" +msgid "%lld total checksum verification failure" +msgid_plural "%lld total checksum verification failures" +msgstr[0] "всего ошибок контрольных сумм: %lld" +msgstr[1] "всего ошибок контрольных сумм: %lld" +msgstr[2] "всего ошибок контрольных сумм: %lld" -#: replication/basebackup.c:634 +#: replication/basebackup.c:731 #, c-format msgid "checksum verification failure during base backup" msgstr "при базовом резервном копировании выявлены ошибки контрольных сумм" -#: replication/basebackup.c:678 replication/basebackup.c:687 -#: replication/basebackup.c:696 replication/basebackup.c:705 -#: replication/basebackup.c:714 replication/basebackup.c:725 -#: replication/basebackup.c:742 replication/basebackup.c:751 +#: replication/basebackup.c:784 replication/basebackup.c:793 +#: replication/basebackup.c:802 replication/basebackup.c:811 +#: replication/basebackup.c:820 replication/basebackup.c:831 +#: replication/basebackup.c:848 replication/basebackup.c:857 +#: replication/basebackup.c:869 replication/basebackup.c:893 #, c-format msgid "duplicate option \"%s\"" msgstr "повторяющийся параметр \"%s\"" -#: replication/basebackup.c:731 +#: replication/basebackup.c:837 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d вне диапазона, допустимого для параметра \"%s\" (%d .. %d)" -#: replication/basebackup.c:1330 +#: replication/basebackup.c:882 +#, c-format +msgid "unrecognized manifest option: \"%s\"" +msgstr "нераспознанный параметр в манифесте: \"%s\"" + +#: replication/basebackup.c:898 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "нераспознанный алгоритм расчёта контрольных сумм: \"%s\"" + +#: replication/basebackup.c:913 +#, c-format +msgid "manifest checksums require a backup manifest" +msgstr "контрольные суммы не могут рассчитываться без манифеста копии" + +#: replication/basebackup.c:1504 #, c-format msgid "skipping special file \"%s\"" msgstr "специальный файл \"%s\" пропускается" -#: replication/basebackup.c:1438 +#: replication/basebackup.c:1623 #, c-format msgid "invalid segment number %d in file \"%s\"" msgstr "неверный номер сегмента %d в файле \"%s\"" -#: replication/basebackup.c:1457 +#: replication/basebackup.c:1642 #, c-format msgid "" "could not verify checksum in file \"%s\", block %d: read buffer size %d and " @@ -19324,17 +19792,17 @@ msgstr "" "не удалось проверить контрольную сумму в файле \"%s\", блоке %d: размер " "прочитанного буфера (%d) отличается от размера страницы (%d)" -#: replication/basebackup.c:1501 replication/basebackup.c:1531 +#: replication/basebackup.c:1686 replication/basebackup.c:1716 #, c-format msgid "could not fseek in file \"%s\": %m" msgstr "не удалось переместиться в файле \"%s\": %m" -#: replication/basebackup.c:1523 +#: replication/basebackup.c:1708 #, c-format msgid "could not reread block %d of file \"%s\": %m" msgstr "не удалось заново прочитать блок %d файла \"%s\": %m" -#: replication/basebackup.c:1547 +#: replication/basebackup.c:1732 #, c-format msgid "" "checksum verification failed in file \"%s\", block %d: calculated %X but " @@ -19343,14 +19811,14 @@ msgstr "" "ошибка контрольной суммы в файле \"%s\", блоке %d: вычислено значение %X, но " "ожидалось %X" -#: replication/basebackup.c:1554 +#: replication/basebackup.c:1739 #, c-format msgid "" "further checksum verification failures in file \"%s\" will not be reported" msgstr "" "о дальнейших ошибках контрольных сумм в файле \"%s\" сообщаться не будет" -#: replication/basebackup.c:1614 +#: replication/basebackup.c:1807 #, c-format msgid "file \"%s\" has a total of %d checksum verification failure" msgid_plural "file \"%s\" has a total of %d checksum verification failures" @@ -19358,12 +19826,12 @@ msgstr[0] "всего в файле \"%s\" обнаружено ошибок к msgstr[1] "всего в файле \"%s\" обнаружено ошибок контрольных сумм: %d" msgstr[2] "всего в файле \"%s\" обнаружено ошибок контрольных сумм: %d" -#: replication/basebackup.c:1647 +#: replication/basebackup.c:1843 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "слишком длинное имя файла для формата tar: \"%s\"" -#: replication/basebackup.c:1652 +#: replication/basebackup.c:1848 #, c-format msgid "" "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" @@ -19371,17 +19839,22 @@ msgstr "" "цель символической ссылки слишком длинная для формата tar: имя файла \"%s\", " "цель \"%s\"" -#: replication/libpqwalreceiver/libpqwalreceiver.c:232 +#: replication/libpqwalreceiver/libpqwalreceiver.c:227 +#, c-format +msgid "could not clear search path: %s" +msgstr "не удалось очистить путь поиска: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:251 #, c-format msgid "invalid connection string syntax: %s" msgstr "ошибочный синтаксис строки подключения: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:256 +#: replication/libpqwalreceiver/libpqwalreceiver.c:275 #, c-format msgid "could not parse connection string: %s" msgstr "не удалось разобрать строку подключения: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:328 +#: replication/libpqwalreceiver/libpqwalreceiver.c:347 #, c-format msgid "" "could not receive database system identifier and timeline ID from the " @@ -19390,13 +19863,13 @@ msgstr "" "не удалось получить идентификатор СУБД и код линии времени с главного " "сервера: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:339 -#: replication/libpqwalreceiver/libpqwalreceiver.c:557 +#: replication/libpqwalreceiver/libpqwalreceiver.c:358 +#: replication/libpqwalreceiver/libpqwalreceiver.c:576 #, c-format msgid "invalid response from primary server" msgstr "неверный ответ главного сервера" -#: replication/libpqwalreceiver/libpqwalreceiver.c:340 +#: replication/libpqwalreceiver/libpqwalreceiver.c:359 #, c-format msgid "" "Could not identify system: got %d rows and %d fields, expected %d rows and " @@ -19405,125 +19878,125 @@ msgstr "" "Не удалось идентифицировать систему, получено строк: %d, полей: %d " "(ожидалось: %d и %d (или более))." -#: replication/libpqwalreceiver/libpqwalreceiver.c:413 -#: replication/libpqwalreceiver/libpqwalreceiver.c:419 -#: replication/libpqwalreceiver/libpqwalreceiver.c:444 +#: replication/libpqwalreceiver/libpqwalreceiver.c:432 +#: replication/libpqwalreceiver/libpqwalreceiver.c:438 +#: replication/libpqwalreceiver/libpqwalreceiver.c:463 #, c-format msgid "could not start WAL streaming: %s" msgstr "не удалось начать трансляцию WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:467 +#: replication/libpqwalreceiver/libpqwalreceiver.c:486 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "не удалось отправить главному серверу сообщение о конце передачи: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:489 +#: replication/libpqwalreceiver/libpqwalreceiver.c:508 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "неожиданный набор данных после конца передачи" -#: replication/libpqwalreceiver/libpqwalreceiver.c:503 +#: replication/libpqwalreceiver/libpqwalreceiver.c:522 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "ошибка при остановке потоковой операции COPY: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:512 +#: replication/libpqwalreceiver/libpqwalreceiver.c:531 #, c-format msgid "error reading result of streaming command: %s" msgstr "ошибка при чтении результата команды передачи: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:520 -#: replication/libpqwalreceiver/libpqwalreceiver.c:754 +#: replication/libpqwalreceiver/libpqwalreceiver.c:539 +#: replication/libpqwalreceiver/libpqwalreceiver.c:773 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "неожиданный результат после CommandComplete: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:546 +#: replication/libpqwalreceiver/libpqwalreceiver.c:565 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "не удалось получить файл истории линии времени с главного сервера: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:558 +#: replication/libpqwalreceiver/libpqwalreceiver.c:577 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Ожидался 1 кортеж с 2 полями, однако получено кортежей: %d, полей: %d." -#: replication/libpqwalreceiver/libpqwalreceiver.c:718 -#: replication/libpqwalreceiver/libpqwalreceiver.c:769 -#: replication/libpqwalreceiver/libpqwalreceiver.c:775 +#: replication/libpqwalreceiver/libpqwalreceiver.c:737 +#: replication/libpqwalreceiver/libpqwalreceiver.c:788 +#: replication/libpqwalreceiver/libpqwalreceiver.c:794 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "не удалось извлечь данные из потока WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:794 +#: replication/libpqwalreceiver/libpqwalreceiver.c:813 #, c-format msgid "could not send data to WAL stream: %s" msgstr "не удалось отправить данные в поток WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:843 +#: replication/libpqwalreceiver/libpqwalreceiver.c:866 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "не удалось создать слот репликации \"%s\": %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:877 +#: replication/libpqwalreceiver/libpqwalreceiver.c:911 #, c-format msgid "invalid query response" msgstr "неверный ответ на запрос" -#: replication/libpqwalreceiver/libpqwalreceiver.c:878 +#: replication/libpqwalreceiver/libpqwalreceiver.c:912 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Ожидалось полей: %d, получено: %d." -#: replication/libpqwalreceiver/libpqwalreceiver.c:947 +#: replication/libpqwalreceiver/libpqwalreceiver.c:981 #, c-format msgid "the query interface requires a database connection" msgstr "для интерфейса запросов требуется подключение к БД" -#: replication/libpqwalreceiver/libpqwalreceiver.c:978 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1012 msgid "empty query" msgstr "пустой запрос" -#: replication/logical/launcher.c:307 +#: replication/logical/launcher.c:295 #, c-format msgid "starting logical replication worker for subscription \"%s\"" msgstr "" "запускается процесс-обработчик логической репликации для подписки \"%s\"" -#: replication/logical/launcher.c:314 +#: replication/logical/launcher.c:302 #, c-format msgid "cannot start logical replication workers when max_replication_slots = 0" msgstr "" "нельзя запустить процессы-обработчики логической репликации при " "max_replication_slots = 0" -#: replication/logical/launcher.c:394 +#: replication/logical/launcher.c:382 #, c-format msgid "out of logical replication worker slots" msgstr "недостаточно слотов для процессов логической репликации" -#: replication/logical/launcher.c:395 +#: replication/logical/launcher.c:383 #, c-format msgid "You might need to increase max_logical_replication_workers." msgstr "Возможно, следует увеличить параметр max_logical_replication_workers." -#: replication/logical/launcher.c:450 +#: replication/logical/launcher.c:438 #, c-format msgid "out of background worker slots" msgstr "недостаточно слотов для фоновых рабочих процессов" -#: replication/logical/launcher.c:451 +#: replication/logical/launcher.c:439 #, c-format msgid "You might need to increase max_worker_processes." msgstr "Возможно, следует увеличить параметр max_worker_processes." -#: replication/logical/launcher.c:650 +#: replication/logical/launcher.c:638 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "" "слот обработчика логической репликации %d пуст, подключиться к нему нельзя" -#: replication/logical/launcher.c:659 +#: replication/logical/launcher.c:647 #, c-format msgid "" "logical replication worker slot %d is already used by another worker, cannot " @@ -19532,33 +20005,33 @@ msgstr "" "слот обработчика логической репликации %d уже занят другим процессом, " "подключиться к нему нельзя" -#: replication/logical/launcher.c:977 +#: replication/logical/launcher.c:951 #, c-format msgid "logical replication launcher started" msgstr "процесс запуска логической репликации запущен" -#: replication/logical/logical.c:90 +#: replication/logical/logical.c:87 #, c-format msgid "logical decoding requires wal_level >= logical" msgstr "для логического декодирования требуется wal_level >= logical" -#: replication/logical/logical.c:95 +#: replication/logical/logical.c:92 #, c-format msgid "logical decoding requires a database connection" msgstr "для логического декодирования требуется подключение к БД" -#: replication/logical/logical.c:113 +#: replication/logical/logical.c:110 #, c-format msgid "logical decoding cannot be used while in recovery" msgstr "логическое декодирование нельзя использовать в процессе восстановления" -#: replication/logical/logical.c:258 replication/logical/logical.c:396 +#: replication/logical/logical.c:258 replication/logical/logical.c:399 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "" "физический слот репликации нельзя использовать для логического декодирования" -#: replication/logical/logical.c:263 replication/logical/logical.c:401 +#: replication/logical/logical.c:263 replication/logical/logical.c:404 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "слот репликации \"%s\" создан не в этой базе данных" @@ -19571,12 +20044,12 @@ msgid "" msgstr "" "нельзя создать слот логической репликации в транзакции, осуществляющей запись" -#: replication/logical/logical.c:441 +#: replication/logical/logical.c:444 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "начинается логическое декодирование для слота \"%s\"" -#: replication/logical/logical.c:443 +#: replication/logical/logical.c:446 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "Передача транзакций, фиксируемых после %X/%X, чтение WAL с %X/%X." @@ -19593,40 +20066,50 @@ msgstr "" msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "слот \"%s\", модуль вывода \"%s\", в обработчике %s" -#: replication/logical/logicalfuncs.c:114 replication/slotfuncs.c:34 +#: replication/logical/logicalfuncs.c:104 replication/slotfuncs.c:34 #, c-format msgid "must be superuser or replication role to use replication slots" msgstr "" "для использования слотов репликации требуется роль репликации или права " "суперпользователя" -#: replication/logical/logicalfuncs.c:153 +#: replication/logical/logicalfuncs.c:134 #, c-format msgid "slot name must not be null" msgstr "имя слота не может быть NULL" -#: replication/logical/logicalfuncs.c:169 +#: replication/logical/logicalfuncs.c:150 #, c-format msgid "options array must not be null" msgstr "массив параметров не может быть NULL" -#: replication/logical/logicalfuncs.c:200 +#: replication/logical/logicalfuncs.c:181 #, c-format msgid "array must be one-dimensional" msgstr "массив должен быть одномерным" -#: replication/logical/logicalfuncs.c:206 +#: replication/logical/logicalfuncs.c:187 #, c-format msgid "array must not contain nulls" msgstr "массив не должен содержать элементы null" -#: replication/logical/logicalfuncs.c:222 utils/adt/json.c:2312 -#: utils/adt/jsonb.c:1282 +#: replication/logical/logicalfuncs.c:203 utils/adt/json.c:1128 +#: utils/adt/jsonb.c:1303 #, c-format msgid "array must have even number of elements" msgstr "в массиве должно быть чётное число элементов" -#: replication/logical/logicalfuncs.c:269 +#: replication/logical/logicalfuncs.c:251 +#, c-format +msgid "can no longer get changes from replication slot \"%s\"" +msgstr "из слота репликации \"%s\" больше нельзя получать изменения" + +#: replication/logical/logicalfuncs.c:253 replication/slotfuncs.c:648 +#, c-format +msgid "This slot has never previously reserved WAL, or has been invalidated." +msgstr "Для этого слота ранее не резервировался WAL либо слот был аннулирован." + +#: replication/logical/logicalfuncs.c:265 #, c-format msgid "" "logical decoding output plugin \"%s\" produces binary output, but function " @@ -19635,14 +20118,14 @@ msgstr "" "модуль вывода логического декодирования \"%s\" выдаёт двоичные данные, но " "функция \"%s\" ожидает текстовые" -#: replication/logical/origin.c:186 +#: replication/logical/origin.c:188 #, c-format msgid "only superusers can query or manipulate replication origins" msgstr "" "запрашивать или модифицировать источники репликации могут только " "суперпользователи" -#: replication/logical/origin.c:191 +#: replication/logical/origin.c:193 #, c-format msgid "" "cannot query or manipulate replication origin when max_replication_slots = 0" @@ -19650,59 +20133,59 @@ msgstr "" "запрашивать или модифицировать источники репликации при " "max_replication_slots = 0 нельзя" -#: replication/logical/origin.c:196 +#: replication/logical/origin.c:198 #, c-format msgid "cannot manipulate replication origins during recovery" msgstr "модифицировать источники репликации во время восстановления нельзя" -#: replication/logical/origin.c:231 +#: replication/logical/origin.c:233 #, c-format msgid "replication origin \"%s\" does not exist" msgstr "источник репликации \"%s\" не существует" -#: replication/logical/origin.c:322 +#: replication/logical/origin.c:324 #, c-format msgid "could not find free replication origin OID" msgstr "найти свободный OID для источника репликации не удалось" -#: replication/logical/origin.c:370 +#: replication/logical/origin.c:372 #, c-format msgid "could not drop replication origin with OID %d, in use by PID %d" msgstr "" "удалить источник репликации с OID %d нельзя, он используется процессом с PID " "%d" -#: replication/logical/origin.c:462 +#: replication/logical/origin.c:464 #, c-format msgid "replication origin with OID %u does not exist" msgstr "источник репликации с OID %u не существует" -#: replication/logical/origin.c:730 +#: replication/logical/origin.c:729 #, c-format msgid "replication checkpoint has wrong magic %u instead of %u" msgstr "" "контрольная точка репликации имеет неправильную сигнатуру (%u вместо %u)" -#: replication/logical/origin.c:771 +#: replication/logical/origin.c:770 #, c-format msgid "could not find free replication state, increase max_replication_slots" msgstr "" "не удалось найти свободную ячейку для состояния репликации, увеличьте " "max_replication_slots" -#: replication/logical/origin.c:789 +#: replication/logical/origin.c:788 #, c-format msgid "replication slot checkpoint has wrong checksum %u, expected %u" msgstr "" "неверная контрольная сумма файла контрольной точки для слота репликации (%u " "вместо %u)" -#: replication/logical/origin.c:917 replication/logical/origin.c:1103 +#: replication/logical/origin.c:916 replication/logical/origin.c:1102 #, c-format msgid "replication origin with OID %d is already active for PID %d" msgstr "источник репликации с OID %d уже занят процессом с PID %d" -#: replication/logical/origin.c:928 replication/logical/origin.c:1115 +#: replication/logical/origin.c:927 replication/logical/origin.c:1114 #, c-format msgid "" "could not find free replication state slot for replication origin with OID %u" @@ -19710,39 +20193,39 @@ msgstr "" "не удалось найти свободный слот состояния репликации для источника " "репликации с OID %u" -#: replication/logical/origin.c:930 replication/logical/origin.c:1117 -#: replication/slot.c:1567 +#: replication/logical/origin.c:929 replication/logical/origin.c:1116 +#: replication/slot.c:1762 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Увеличьте параметр max_replication_slots и повторите попытку." -#: replication/logical/origin.c:1074 +#: replication/logical/origin.c:1073 #, c-format msgid "cannot setup replication origin when one is already setup" msgstr "нельзя настроить источник репликации, когда он уже настроен" -#: replication/logical/origin.c:1154 replication/logical/origin.c:1370 -#: replication/logical/origin.c:1390 +#: replication/logical/origin.c:1153 replication/logical/origin.c:1369 +#: replication/logical/origin.c:1389 #, c-format msgid "no replication origin is configured" msgstr "ни один источник репликации не настроен" -#: replication/logical/origin.c:1237 +#: replication/logical/origin.c:1236 #, c-format msgid "replication origin name \"%s\" is reserved" msgstr "имя источника репликации \"%s\" зарезервировано" -#: replication/logical/origin.c:1239 +#: replication/logical/origin.c:1238 #, c-format msgid "Origin names starting with \"pg_\" are reserved." msgstr "Имена источников, начинающиеся с \"pg_\", зарезервированы." -#: replication/logical/relation.c:254 +#: replication/logical/relation.c:302 #, c-format msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "целевое отношение логической репликации \"%s.%s\" не существует" -#: replication/logical/relation.c:311 +#: replication/logical/relation.c:345 #, c-format msgid "" "logical replication target relation \"%s.%s\" is missing some replicated " @@ -19751,7 +20234,7 @@ msgstr "" "в целевом отношении логической репликации (\"%s.%s\") отсутствуют некоторые " "реплицируемые столбцы" -#: replication/logical/relation.c:351 +#: replication/logical/relation.c:385 #, c-format msgid "" "logical replication target relation \"%s.%s\" uses system columns in REPLICA " @@ -19760,19 +20243,19 @@ msgstr "" "в целевом отношении логической репликации (\"%s.%s\") в индексе REPLICA " "IDENTITY используются системные столбцы" -#: replication/logical/reorderbuffer.c:2509 +#: replication/logical/reorderbuffer.c:2663 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "не удалось записать в файл данных для XID %u: %m" -#: replication/logical/reorderbuffer.c:2618 -#: replication/logical/reorderbuffer.c:2643 +#: replication/logical/reorderbuffer.c:2850 +#: replication/logical/reorderbuffer.c:2875 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "не удалось прочитать из файла подкачки буфера пересортировки: %m" -#: replication/logical/reorderbuffer.c:2622 -#: replication/logical/reorderbuffer.c:2647 +#: replication/logical/reorderbuffer.c:2854 +#: replication/logical/reorderbuffer.c:2879 #, c-format msgid "" "could not read from reorderbuffer spill file: read %d instead of %u bytes" @@ -19780,25 +20263,25 @@ msgstr "" "не удалось прочитать из файла подкачки буфера пересортировки (прочитано " "байт: %d, требовалось: %u)" -#: replication/logical/reorderbuffer.c:2872 +#: replication/logical/reorderbuffer.c:3114 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "" "ошибка при удалении файла \"%s\" в процессе удаления pg_replslot/%s/xid*: %m" -#: replication/logical/reorderbuffer.c:3342 +#: replication/logical/reorderbuffer.c:3606 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "" "не удалось прочитать из файла \"%s\" (прочитано байт: %d, требовалось: %d)" -#: replication/logical/snapbuild.c:611 +#: replication/logical/snapbuild.c:606 #, c-format msgid "initial slot snapshot too large" msgstr "изначальный снимок слота слишком большой" # skip-rule: capital-letter-first -#: replication/logical/snapbuild.c:665 +#: replication/logical/snapbuild.c:660 #, c-format msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" msgid_plural "" @@ -19810,68 +20293,68 @@ msgstr[1] "" msgstr[2] "" "экспортирован снимок логического декодирования: \"%s\" (ид. транзакций: %u)" -#: replication/logical/snapbuild.c:1270 replication/logical/snapbuild.c:1363 -#: replication/logical/snapbuild.c:1917 +#: replication/logical/snapbuild.c:1265 replication/logical/snapbuild.c:1358 +#: replication/logical/snapbuild.c:1915 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "процесс логического декодирования достиг точки согласованности в %X/%X" -#: replication/logical/snapbuild.c:1272 +#: replication/logical/snapbuild.c:1267 #, c-format msgid "There are no running transactions." msgstr "Больше активных транзакций нет." -#: replication/logical/snapbuild.c:1314 +#: replication/logical/snapbuild.c:1309 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "" "процесс логического декодирования нашёл начальную стартовую точку в %X/%X" -#: replication/logical/snapbuild.c:1316 replication/logical/snapbuild.c:1340 +#: replication/logical/snapbuild.c:1311 replication/logical/snapbuild.c:1335 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "Ожидание транзакций (примерно %d), старее %u до конца." -#: replication/logical/snapbuild.c:1338 +#: replication/logical/snapbuild.c:1333 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "" "при логическом декодировании найдена начальная точка согласованности в %X/%X" -#: replication/logical/snapbuild.c:1365 +#: replication/logical/snapbuild.c:1360 #, c-format msgid "There are no old transactions anymore." msgstr "Больше старых транзакций нет." -#: replication/logical/snapbuild.c:1759 +#: replication/logical/snapbuild.c:1757 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "" "файл состояния snapbuild \"%s\" имеет неправильную сигнатуру (%u вместо %u)" -#: replication/logical/snapbuild.c:1765 +#: replication/logical/snapbuild.c:1763 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "" "файл состояния snapbuild \"%s\" имеет неправильную версию (%u вместо %u)" -#: replication/logical/snapbuild.c:1864 +#: replication/logical/snapbuild.c:1862 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "" "в файле состояния snapbuild \"%s\" неверная контрольная сумма (%u вместо %u)" -#: replication/logical/snapbuild.c:1919 +#: replication/logical/snapbuild.c:1917 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "Логическое декодирование начнётся с сохранённого снимка." -#: replication/logical/snapbuild.c:1991 +#: replication/logical/snapbuild.c:1989 #, c-format msgid "could not parse file name \"%s\"" msgstr "не удалось разобрать имя файла \"%s\"" -#: replication/logical/tablesync.c:139 +#: replication/logical/tablesync.c:132 #, c-format msgid "" "logical replication table synchronization worker for subscription \"%s\", " @@ -19880,41 +20363,41 @@ msgstr "" "процесс синхронизации таблицы при логической репликации для подписки \"%s\", " "таблицы \"%s\" закончил обработку" -#: replication/logical/tablesync.c:672 +#: replication/logical/tablesync.c:664 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "" "не удалось получить информацию о таблице \"%s.%s\" с сервера публикации: %s" -#: replication/logical/tablesync.c:678 +#: replication/logical/tablesync.c:670 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "таблица \"%s.%s\" не найдена на сервере публикации" -#: replication/logical/tablesync.c:710 +#: replication/logical/tablesync.c:704 #, c-format msgid "could not fetch table info for table \"%s.%s\": %s" msgstr "не удалось получить информацию о таблице \"%s.%s\": %s" -#: replication/logical/tablesync.c:780 +#: replication/logical/tablesync.c:791 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "" "не удалось начать копирование начального содержимого таблицы \"%s.%s\": %s" -#: replication/logical/tablesync.c:894 +#: replication/logical/tablesync.c:905 #, c-format msgid "table copy could not start transaction on publisher" msgstr "" "при копировании таблицы не удалось начать транзакцию на сервере публикации" -#: replication/logical/tablesync.c:916 +#: replication/logical/tablesync.c:927 #, c-format msgid "table copy could not finish transaction on publisher" msgstr "" "при копировании таблицы не удалось завершить транзакцию на сервере публикации" -#: replication/logical/worker.c:290 +#: replication/logical/worker.c:311 #, c-format msgid "" "processing remote data for replication target relation \"%s.%s\" column \"%s" @@ -19923,12 +20406,12 @@ msgstr "" "обработка внешних данных для целевого отношения репликации \"%s.%s\" столбца " "\"%s\", удалённый тип %s, локальный тип %s" -#: replication/logical/worker.c:527 +#: replication/logical/worker.c:550 #, c-format msgid "ORIGIN message sent out of order" msgstr "сообщение ORIGIN отправлено неуместно" -#: replication/logical/worker.c:661 +#: replication/logical/worker.c:700 #, c-format msgid "" "publisher did not send replica identity column expected by the logical " @@ -19937,7 +20420,7 @@ msgstr "" "сервер публикации не передал столбец идентификации реплики, ожидаемый для " "целевого отношения логической репликации \"%s.%s\"" -#: replication/logical/worker.c:668 +#: replication/logical/worker.c:707 #, c-format msgid "" "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY " @@ -19948,22 +20431,22 @@ msgstr "" "IDENTITY, ни ключа PRIMARY KEY, и публикуемое отношение не имеет " "характеристики REPLICA IDENTITY FULL" -#: replication/logical/worker.c:1025 +#: replication/logical/worker.c:1393 #, c-format msgid "invalid logical replication message type \"%c\"" msgstr "неверный тип сообщения логической репликации \"%c\"" -#: replication/logical/worker.c:1167 +#: replication/logical/worker.c:1536 #, c-format msgid "data stream from publisher has ended" msgstr "поток данных с сервера публикации закончился" -#: replication/logical/worker.c:1322 +#: replication/logical/worker.c:1691 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "завершение обработчика логической репликации из-за тайм-аута" -#: replication/logical/worker.c:1470 +#: replication/logical/worker.c:1836 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will stop because " @@ -19972,7 +20455,7 @@ msgstr "" "применяющий процесс логической репликации для подписки \"%s\" будет " "остановлен, так как подписка была удалена" -#: replication/logical/worker.c:1484 +#: replication/logical/worker.c:1850 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will stop because " @@ -19981,7 +20464,7 @@ msgstr "" "применяющий процесс логической репликации для подписки \"%s\" будет " "остановлен, так как подписка была отключена" -#: replication/logical/worker.c:1498 +#: replication/logical/worker.c:1864 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will restart " @@ -19990,7 +20473,7 @@ msgstr "" "применяющий процесс логической репликации для подписки \"%s\" будет " "перезапущен из-за изменения информации о подключении" -#: replication/logical/worker.c:1512 +#: replication/logical/worker.c:1878 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will restart " @@ -19999,7 +20482,7 @@ msgstr "" "применяющий процесс логической репликации для подписки \"%s\" будет " "перезапущен, так как подписка была переименована" -#: replication/logical/worker.c:1529 +#: replication/logical/worker.c:1895 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will restart " @@ -20008,7 +20491,7 @@ msgstr "" "применяющий процесс логической репликации для подписки \"%s\" будет " "перезапущен, так как было изменено имя слота репликации" -#: replication/logical/worker.c:1543 +#: replication/logical/worker.c:1909 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will restart " @@ -20017,7 +20500,7 @@ msgstr "" "применяющий процесс логической репликации для подписки \"%s\" будет " "перезапущен из-за изменения публикаций подписки" -#: replication/logical/worker.c:1647 +#: replication/logical/worker.c:2005 #, c-format msgid "" "logical replication apply worker for subscription %u will not start because " @@ -20026,7 +20509,7 @@ msgstr "" "применяющий процесс логической репликации для подписки %u не будет запущен, " "так как подписка была удалена при старте" -#: replication/logical/worker.c:1659 +#: replication/logical/worker.c:2017 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will not start " @@ -20035,7 +20518,7 @@ msgstr "" "применяющий процесс логической репликации для подписки \"%s\" не будет " "запущен, так как подписка была отключена при старте" -#: replication/logical/worker.c:1677 +#: replication/logical/worker.c:2035 #, c-format msgid "" "logical replication table synchronization worker for subscription \"%s\", " @@ -20044,65 +20527,65 @@ msgstr "" "процесс синхронизации таблицы при логической репликации для подписки \"%s\", " "таблицы \"%s\" запущен" -#: replication/logical/worker.c:1681 +#: replication/logical/worker.c:2039 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "" "запускается применяющий процесс логической репликации для подписки \"%s\"" -#: replication/logical/worker.c:1720 +#: replication/logical/worker.c:2078 #, c-format msgid "subscription has no replication slot set" msgstr "для подписки не задан слот репликации" -#: replication/pgoutput/pgoutput.c:117 +#: replication/pgoutput/pgoutput.c:147 #, c-format msgid "invalid proto_version" msgstr "неверное значение proto_version" -#: replication/pgoutput/pgoutput.c:122 +#: replication/pgoutput/pgoutput.c:152 #, c-format msgid "proto_version \"%s\" out of range" msgstr "значение proto_verson \"%s\" вне диапазона" -#: replication/pgoutput/pgoutput.c:139 +#: replication/pgoutput/pgoutput.c:169 #, c-format msgid "invalid publication_names syntax" msgstr "неверный синтаксис publication_names" -#: replication/pgoutput/pgoutput.c:181 +#: replication/pgoutput/pgoutput.c:211 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "" "клиент передал proto_version=%d, но мы поддерживаем только протокол %d и ниже" -#: replication/pgoutput/pgoutput.c:187 +#: replication/pgoutput/pgoutput.c:217 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "" "клиент передал proto_version=%d, но мы поддерживает только протокол %d и выше" -#: replication/pgoutput/pgoutput.c:193 +#: replication/pgoutput/pgoutput.c:223 #, c-format msgid "publication_names parameter missing" msgstr "отсутствует параметр publication_names" -#: replication/slot.c:182 +#: replication/slot.c:183 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "имя слота репликации \"%s\" слишком короткое" -#: replication/slot.c:191 +#: replication/slot.c:192 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "имя слота репликации \"%s\" слишком длинное" -#: replication/slot.c:204 +#: replication/slot.c:205 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "имя слота репликации \"%s\" содержит недопустимый символ" -#: replication/slot.c:206 +#: replication/slot.c:207 #, c-format msgid "" "Replication slot names may only contain lower case letters, numbers, and the " @@ -20111,113 +20594,128 @@ msgstr "" "Имя слота репликации может содержать только буквы в нижнем регистре, цифры и " "знак подчёркивания." -#: replication/slot.c:253 +#: replication/slot.c:254 #, c-format msgid "replication slot \"%s\" already exists" msgstr "слот репликации \"%s\" уже существует" -#: replication/slot.c:263 +#: replication/slot.c:264 #, c-format msgid "all replication slots are in use" msgstr "используются все слоты репликации" -#: replication/slot.c:264 +#: replication/slot.c:265 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Освободите ненужные или увеличьте параметр max_replication_slots." -#: replication/slot.c:387 replication/slotfuncs.c:662 +#: replication/slot.c:407 replication/slotfuncs.c:760 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "слот репликации \"%s\" не существует" -#: replication/slot.c:398 replication/slot.c:947 +#: replication/slot.c:445 replication/slot.c:1006 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "слот репликации \"%s\" занят процессом с PID %d" -#: replication/slot.c:631 replication/slot.c:1139 replication/slot.c:1502 +#: replication/slot.c:683 replication/slot.c:1314 replication/slot.c:1697 #, c-format msgid "could not remove directory \"%s\"" msgstr "ошибка при удалении каталога \"%s\"" -#: replication/slot.c:982 +#: replication/slot.c:1041 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "" "слоты репликации можно использовать, только если max_replication_slots > 0" -#: replication/slot.c:987 +#: replication/slot.c:1046 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "слоты репликации можно использовать, только если wal_level >= replica" -#: replication/slot.c:1440 +#: replication/slot.c:1202 +#, c-format +msgid "" +"terminating process %d because replication slot \"%s\" is too far behind" +msgstr "" +"завершение процесса %d из-за слишком большого отставания слота репликации " +"\"%s\"" + +#: replication/slot.c:1221 +#, c-format +msgid "" +"invalidating slot \"%s\" because its restart_lsn %X/%X exceeds " +"max_slot_wal_keep_size" +msgstr "" +"слот \"%s\" аннулируется, так как его позиция restart_lsn %X/%X превышает " +"max_slot_wal_keep_size" + +#: replication/slot.c:1635 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "" "файл слота репликации \"%s\" имеет неправильную сигнатуру (%u вместо %u)" -#: replication/slot.c:1447 +#: replication/slot.c:1642 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "файл состояния snapbuild \"%s\" имеет неподдерживаемую версию %u" -#: replication/slot.c:1454 +#: replication/slot.c:1649 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "у файла слота репликации \"%s\" неверная длина: %u" -#: replication/slot.c:1490 +#: replication/slot.c:1685 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "" "в файле слота репликации \"%s\" неверная контрольная сумма (%u вместо %u)" -#: replication/slot.c:1524 +#: replication/slot.c:1719 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "существует слот логической репликации \"%s\", но wal_level < logical" -#: replication/slot.c:1526 +#: replication/slot.c:1721 #, c-format msgid "Change wal_level to be logical or higher." msgstr "Смените wal_level на logical или более высокий уровень." -#: replication/slot.c:1530 +#: replication/slot.c:1725 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "существует слот физической репликации \"%s\", но wal_level < replica" -#: replication/slot.c:1532 +#: replication/slot.c:1727 #, c-format msgid "Change wal_level to be replica or higher." msgstr "Смените wal_level на replica или более высокий уровень." -#: replication/slot.c:1566 +#: replication/slot.c:1761 #, c-format msgid "too many replication slots active before shutdown" msgstr "перед завершением активно слишком много слотов репликации" -#: replication/slotfuncs.c:534 +#: replication/slotfuncs.c:624 #, c-format msgid "invalid target WAL LSN" msgstr "неверный целевой LSN" -#: replication/slotfuncs.c:556 +#: replication/slotfuncs.c:646 #, c-format -msgid "cannot advance replication slot that has not previously reserved WAL" -msgstr "" -"продвинуть слот репликации, для которого ранее не был зарезервирован WAL, " -"нельзя" +msgid "replication slot \"%s\" cannot be advanced" +msgstr "слот репликации \"%s\" нельзя продвинуть вперёд" -#: replication/slotfuncs.c:572 +#: replication/slotfuncs.c:664 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "" "продвинуть слот репликации к позиции %X/%X нельзя, минимальная позиция: %X/%X" -#: replication/slotfuncs.c:669 +#: replication/slotfuncs.c:772 #, c-format msgid "" "cannot copy physical replication slot \"%s\" as a logical replication slot" @@ -20225,7 +20723,7 @@ msgstr "" "слот физической репликации \"%s\" нельзя скопировать как слот логической " "репликации" -#: replication/slotfuncs.c:671 +#: replication/slotfuncs.c:774 #, c-format msgid "" "cannot copy logical replication slot \"%s\" as a physical replication slot" @@ -20233,17 +20731,17 @@ msgstr "" "слот логической репликации \"%s\" нельзя скопировать как слот физической " "репликации" -#: replication/slotfuncs.c:680 +#: replication/slotfuncs.c:781 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "скопировать слот репликации, для которого не резервируется WAL, нельзя" -#: replication/slotfuncs.c:745 +#: replication/slotfuncs.c:857 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "не удалось скопировать слот репликации \"%s\"" -#: replication/slotfuncs.c:747 +#: replication/slotfuncs.c:859 #, c-format msgid "" "The source replication slot was modified incompatibly during the copy " @@ -20252,7 +20750,21 @@ msgstr "" "Исходный слот репликации был модифицирован несовместимым образом во время " "копирования." -#: replication/syncrep.c:248 +#: replication/slotfuncs.c:865 +#, c-format +msgid "cannot copy unfinished logical replication slot \"%s\"" +msgstr "" +"скопировать слот логической репликации \"%s\" в незавершённом состоянии " +"нельзя" + +#: replication/slotfuncs.c:867 +#, c-format +msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." +msgstr "" +"Повторите попытку, когда для исходного слота репликации будет определена " +"позиция confirmed_flush_lsn." + +#: replication/syncrep.c:257 #, c-format msgid "" "canceling the wait for synchronous replication and terminating connection " @@ -20261,7 +20773,7 @@ msgstr "" "отмена ожидания синхронной репликации и закрытие соединения по команде " "администратора" -#: replication/syncrep.c:249 replication/syncrep.c:266 +#: replication/syncrep.c:258 replication/syncrep.c:275 #, c-format msgid "" "The transaction has already committed locally, but might not have been " @@ -20270,148 +20782,153 @@ msgstr "" "Транзакция уже была зафиксирована локально, но возможно не была " "реплицирована на резервный сервер." -#: replication/syncrep.c:265 +#: replication/syncrep.c:274 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "отмена ожидания синхронной репликации по запросу пользователя" -#: replication/syncrep.c:406 +#: replication/syncrep.c:416 #, c-format msgid "standby \"%s\" now has synchronous standby priority %u" msgstr "" "резервный сервер \"%s\" теперь имеет приоритет синхронной репликации %u" -#: replication/syncrep.c:469 +#: replication/syncrep.c:483 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "резервный сервер \"%s\" стал синхронным с приоритетом %u" -#: replication/syncrep.c:473 +#: replication/syncrep.c:487 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "" "резервный сервер \"%s\" стал кандидатом для включения в кворум синхронных " "резервных" -#: replication/syncrep.c:1173 +#: replication/syncrep.c:1034 #, c-format msgid "synchronous_standby_names parser failed" msgstr "ошибка при разборе synchronous_standby_names" -#: replication/syncrep.c:1179 +#: replication/syncrep.c:1040 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "число синхронных резервных серверов (%d) должно быть больше нуля" -#: replication/walreceiver.c:160 +#: replication/walreceiver.c:171 #, c-format msgid "terminating walreceiver process due to administrator command" msgstr "завершение процесса считывания журнала по команде администратора" -#: replication/walreceiver.c:276 +#: replication/walreceiver.c:297 #, c-format msgid "could not connect to the primary server: %s" msgstr "не удалось подключиться к главному серверу: %s" -#: replication/walreceiver.c:322 +#: replication/walreceiver.c:343 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "идентификаторы СУБД на главном и резервном серверах различаются" -#: replication/walreceiver.c:323 +#: replication/walreceiver.c:344 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "Идентификатор на главном сервере: %s, на резервном: %s." -#: replication/walreceiver.c:333 +#: replication/walreceiver.c:354 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "" "последняя линия времени %u на главном сервере отстаёт от восстанавливаемой " "линии времени %u" -#: replication/walreceiver.c:369 +#: replication/walreceiver.c:408 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "" "начало передачи журнала с главного сервера, с позиции %X/%X на линии времени " "%u" -#: replication/walreceiver.c:374 +#: replication/walreceiver.c:413 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "перезапуск передачи журнала с позиции %X/%X на линии времени %u" -#: replication/walreceiver.c:403 +#: replication/walreceiver.c:442 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "продолжить передачу WAL нельзя, восстановление уже окончено" -#: replication/walreceiver.c:440 +#: replication/walreceiver.c:479 #, c-format msgid "replication terminated by primary server" msgstr "репликация прекращена главным сервером" -#: replication/walreceiver.c:441 +#: replication/walreceiver.c:480 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "На линии времени %u в %X/%X достигнут конец журнала." -#: replication/walreceiver.c:529 +#: replication/walreceiver.c:568 #, c-format msgid "terminating walreceiver due to timeout" msgstr "завершение приёма журнала из-за тайм-аута" -#: replication/walreceiver.c:567 +#: replication/walreceiver.c:606 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "" "на главном сервере больше нет журналов для запрошенной линии времени %u" -#: replication/walreceiver.c:582 replication/walreceiver.c:922 +#: replication/walreceiver.c:622 replication/walreceiver.c:938 #, c-format msgid "could not close log segment %s: %m" msgstr "не удалось закрыть сегмент журнала %s: %m" -#: replication/walreceiver.c:700 +#: replication/walreceiver.c:742 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "загрузка файла истории для линии времени %u с главного сервера" -#: replication/walreceiver.c:976 +#: replication/walreceiver.c:985 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "не удалось записать в сегмент журнала %s (смещение %u, длина %lu): %m" -#: replication/walsender.c:497 +#: replication/walsender.c:527 storage/smgr/md.c:1329 +#, c-format +msgid "could not seek to end of file \"%s\": %m" +msgstr "не удалось перейти к концу файла \"%s\": %m" + +#: replication/walsender.c:531 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "не удалось перейти к началу файла \"%s\": %m" -#: replication/walsender.c:548 +#: replication/walsender.c:582 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "Команда IDENTIFY_SYSTEM не выполнялась до START_REPLICATION" -#: replication/walsender.c:565 +#: replication/walsender.c:611 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "" "слот логической репликации нельзя использовать для физической репликации" -#: replication/walsender.c:628 +#: replication/walsender.c:680 #, c-format msgid "" "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "" "в истории сервера нет запрошенной начальной точки %X/%X на линии времени %u" -#: replication/walsender.c:632 +#: replication/walsender.c:684 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "История этого сервера ответвилась от линии времени %u в %X/%X." -#: replication/walsender.c:677 +#: replication/walsender.c:729 #, c-format msgid "" "requested starting point %X/%X is ahead of the WAL flush position of this " @@ -20421,55 +20938,68 @@ msgstr "" "на этом сервере (%X/%X)" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:907 +#: replication/walsender.c:980 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s требуется выполнять не в транзакции" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:917 +#: replication/walsender.c:990 #, c-format msgid "%s must be called inside a transaction" msgstr "%s требуется выполнять внутри транзакции" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:923 +#: replication/walsender.c:996 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s требуется выполнять в транзакции уровня изоляции REPEATABLE READ" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:929 +#: replication/walsender.c:1002 #, c-format msgid "%s must be called before any query" msgstr "%s требуется выполнять до каких-либо запросов" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:935 +#: replication/walsender.c:1008 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s требуется вызывать не в подтранзакции" -#: replication/walsender.c:1082 +#: replication/walsender.c:1152 +#, c-format +msgid "cannot read from logical replication slot \"%s\"" +msgstr "прочитать из слота логической репликации \"%s\" нельзя" + +#: replication/walsender.c:1154 +#, c-format +msgid "" +"This slot has been invalidated because it exceeded the maximum reserved size." +msgstr "" +"Этот слот был аннулирован из-за превышения максимального зарезервированного " +"размера." + +#: replication/walsender.c:1164 #, c-format msgid "terminating walsender process after promotion" msgstr "завершение процесса передачи журнала после повышения" -#: replication/walsender.c:1453 +#: replication/walsender.c:1538 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "" "нельзя выполнять новые команды, пока процесс передачи WAL находится в режиме " "остановки" -#: replication/walsender.c:1486 +#: replication/walsender.c:1571 #, c-format msgid "received replication command: %s" msgstr "получена команда репликации: %s" -#: replication/walsender.c:1502 tcop/fastpath.c:279 tcop/postgres.c:1103 -#: tcop/postgres.c:1426 tcop/postgres.c:1684 tcop/postgres.c:2077 -#: tcop/postgres.c:2450 tcop/postgres.c:2529 +#: replication/walsender.c:1587 tcop/fastpath.c:279 tcop/postgres.c:1103 +#: tcop/postgres.c:1455 tcop/postgres.c:1716 tcop/postgres.c:2174 +#: tcop/postgres.c:2535 tcop/postgres.c:2614 #, c-format msgid "" "current transaction is aborted, commands ignored until end of transaction " @@ -20477,161 +21007,157 @@ msgid "" msgstr "" "текущая транзакция прервана, команды до конца блока транзакции игнорируются" -#: replication/walsender.c:1570 +#: replication/walsender.c:1674 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "" "нельзя выполнять команды SQL в процессе, передающем WAL для физической " "репликации" -#: replication/walsender.c:1618 replication/walsender.c:1634 +#: replication/walsender.c:1724 replication/walsender.c:1740 #, c-format msgid "unexpected EOF on standby connection" msgstr "неожиданный обрыв соединения с резервным сервером" -#: replication/walsender.c:1648 -#, c-format -msgid "unexpected standby message type \"%c\", after receiving CopyDone" -msgstr "" -"после CopyDone резервный сервер передал сообщение неожиданного типа \"%c\"" - -#: replication/walsender.c:1686 +#: replication/walsender.c:1779 #, c-format msgid "invalid standby message type \"%c\"" msgstr "неверный тип сообщения резервного сервера: \"%c\"" -#: replication/walsender.c:1727 +#: replication/walsender.c:1820 #, c-format msgid "unexpected message type \"%c\"" msgstr "неожиданный тип сообщения \"%c\"" -#: replication/walsender.c:2145 +#: replication/walsender.c:2232 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "завершение процесса передачи журнала из-за тайм-аута репликации" -#: replication/walsender.c:2222 +#: replication/walsender.c:2309 #, c-format msgid "\"%s\" has now caught up with upstream server" msgstr "ведомый сервер \"%s\" нагнал ведущий" -#: replication/walsender.c:2481 -#, c-format -msgid "could not read from log segment %s, offset %u, length %zu: %m" -msgstr "не удалось прочитать сегмент журнала %s (смещение %u, длина %zu): %m" - -#: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:989 +#: rewrite/rewriteDefine.c:113 rewrite/rewriteDefine.c:1000 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "правило \"%s\" для отношения \"%s\" уже существует" -#: rewrite/rewriteDefine.c:301 +#: rewrite/rewriteDefine.c:302 #, c-format msgid "rule actions on OLD are not implemented" msgstr "действия правил для OLD не реализованы" -#: rewrite/rewriteDefine.c:302 +#: rewrite/rewriteDefine.c:303 #, c-format msgid "Use views or triggers instead." msgstr "Воспользуйтесь представлениями или триггерами." -#: rewrite/rewriteDefine.c:306 +#: rewrite/rewriteDefine.c:307 #, c-format msgid "rule actions on NEW are not implemented" msgstr "действия правил для NEW не реализованы" -#: rewrite/rewriteDefine.c:307 +#: rewrite/rewriteDefine.c:308 #, c-format msgid "Use triggers instead." msgstr "Воспользуйтесь триггерами." -#: rewrite/rewriteDefine.c:320 +#: rewrite/rewriteDefine.c:321 #, c-format msgid "INSTEAD NOTHING rules on SELECT are not implemented" msgstr "правила INSTEAD NOTHING для SELECT не реализованы" -#: rewrite/rewriteDefine.c:321 +#: rewrite/rewriteDefine.c:322 #, c-format msgid "Use views instead." msgstr "Воспользуйтесь представлениями." -#: rewrite/rewriteDefine.c:329 +#: rewrite/rewriteDefine.c:330 #, c-format msgid "multiple actions for rules on SELECT are not implemented" msgstr "множественные действия в правилах для SELECT не поддерживаются" -#: rewrite/rewriteDefine.c:339 +#: rewrite/rewriteDefine.c:340 #, c-format msgid "rules on SELECT must have action INSTEAD SELECT" msgstr "в правилах для SELECT должно быть действие INSTEAD SELECT" -#: rewrite/rewriteDefine.c:347 +#: rewrite/rewriteDefine.c:348 #, c-format msgid "rules on SELECT must not contain data-modifying statements in WITH" msgstr "" "правила для SELECT не должны содержать операторы, изменяющие данные, в WITH" -#: rewrite/rewriteDefine.c:355 +#: rewrite/rewriteDefine.c:356 #, c-format msgid "event qualifications are not implemented for rules on SELECT" msgstr "в правилах для SELECT не может быть условий" -#: rewrite/rewriteDefine.c:382 +#: rewrite/rewriteDefine.c:383 #, c-format msgid "\"%s\" is already a view" msgstr "\"%s\" уже является представлением" -#: rewrite/rewriteDefine.c:406 +#: rewrite/rewriteDefine.c:407 #, c-format msgid "view rule for \"%s\" must be named \"%s\"" msgstr "правило представления для \"%s\" должно называться \"%s\"" -#: rewrite/rewriteDefine.c:434 +#: rewrite/rewriteDefine.c:436 #, c-format msgid "cannot convert partitioned table \"%s\" to a view" msgstr "преобразовать секционированную таблицу \"%s\" в представление нельзя" -#: rewrite/rewriteDefine.c:440 +#: rewrite/rewriteDefine.c:445 #, c-format msgid "cannot convert partition \"%s\" to a view" msgstr "преобразовать секцию \"%s\" в представление нельзя" -#: rewrite/rewriteDefine.c:449 +#: rewrite/rewriteDefine.c:454 #, c-format msgid "could not convert table \"%s\" to a view because it is not empty" msgstr "" "не удалось преобразовать таблицу \"%s\" в представление, так как она не " "пуста1" -#: rewrite/rewriteDefine.c:458 +#: rewrite/rewriteDefine.c:463 #, c-format msgid "could not convert table \"%s\" to a view because it has triggers" msgstr "" "не удалось преобразовать таблицу \"%s\" в представление, так как она " "содержит триггеры" -#: rewrite/rewriteDefine.c:460 +#: rewrite/rewriteDefine.c:465 #, c-format msgid "" "In particular, the table cannot be involved in any foreign key relationships." msgstr "" "Кроме того, таблица не может быть задействована в ссылках по внешнему ключу." -#: rewrite/rewriteDefine.c:465 +#: rewrite/rewriteDefine.c:470 #, c-format msgid "could not convert table \"%s\" to a view because it has indexes" msgstr "" "не удалось преобразовать таблицу \"%s\" в представление, так как она имеет " "индексы" -#: rewrite/rewriteDefine.c:471 +#: rewrite/rewriteDefine.c:476 #, c-format msgid "could not convert table \"%s\" to a view because it has child tables" msgstr "" "не удалось преобразовать таблицу \"%s\" в представление, так как она имеет " "подчинённые таблицы" -#: rewrite/rewriteDefine.c:477 +#: rewrite/rewriteDefine.c:482 +#, c-format +msgid "could not convert table \"%s\" to a view because it has parent tables" +msgstr "" +"не удалось преобразовать таблицу \"%s\" в представление, так как она имеет " +"родительские таблицы" + +#: rewrite/rewriteDefine.c:488 #, c-format msgid "" "could not convert table \"%s\" to a view because it has row security enabled" @@ -20639,7 +21165,7 @@ msgstr "" "не удалось преобразовать таблицу \"%s\" в представление, так как для неё " "включена защита на уровне строк" -#: rewrite/rewriteDefine.c:483 +#: rewrite/rewriteDefine.c:494 #, c-format msgid "" "could not convert table \"%s\" to a view because it has row security policies" @@ -20647,45 +21173,45 @@ msgstr "" "не удалось преобразовать таблицу \"%s\" в представление, так как к ней " "применены политики защиты строк" -#: rewrite/rewriteDefine.c:510 +#: rewrite/rewriteDefine.c:521 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "в правиле нельзя указать несколько списков RETURNING" -#: rewrite/rewriteDefine.c:515 +#: rewrite/rewriteDefine.c:526 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "списки RETURNING в условных правилах не поддерживаются" -#: rewrite/rewriteDefine.c:519 +#: rewrite/rewriteDefine.c:530 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "списки RETURNING поддерживаются только в правилах INSTEAD" -#: rewrite/rewriteDefine.c:683 +#: rewrite/rewriteDefine.c:694 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "список результата правила для SELECT содержит слишком много столбцов" -#: rewrite/rewriteDefine.c:684 +#: rewrite/rewriteDefine.c:695 #, c-format msgid "RETURNING list has too many entries" msgstr "список RETURNING содержит слишком много столбцов" -#: rewrite/rewriteDefine.c:711 +#: rewrite/rewriteDefine.c:722 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "" "преобразовать отношение, содержащее удалённые столбцы, в представление нельзя" -#: rewrite/rewriteDefine.c:712 +#: rewrite/rewriteDefine.c:723 #, c-format msgid "" "cannot create a RETURNING list for a relation containing dropped columns" msgstr "" "создать список RETURNING для отношения, содержащего удалённые столбцы, нельзя" -#: rewrite/rewriteDefine.c:718 +#: rewrite/rewriteDefine.c:729 #, c-format msgid "" "SELECT rule's target entry %d has different column name from column \"%s\"" @@ -20693,67 +21219,67 @@ msgstr "" "элементу %d результата правила для SELECT присвоено имя, отличное от имени " "столбца \"%s\"" -#: rewrite/rewriteDefine.c:720 +#: rewrite/rewriteDefine.c:731 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "Имя элемента результата SELECT: \"%s\"." -#: rewrite/rewriteDefine.c:729 +#: rewrite/rewriteDefine.c:740 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "" "элемент %d результата правила для SELECT имеет тип, отличный от типа столбца " "\"%s\"" -#: rewrite/rewriteDefine.c:731 +#: rewrite/rewriteDefine.c:742 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "элемент %d списка RETURNING имеет тип, отличный от типа столбца \"%s\"" -#: rewrite/rewriteDefine.c:734 rewrite/rewriteDefine.c:758 +#: rewrite/rewriteDefine.c:745 rewrite/rewriteDefine.c:769 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "Элемент результата SELECT имеет тип %s, тогда как тип столбца - %s." -#: rewrite/rewriteDefine.c:737 rewrite/rewriteDefine.c:762 +#: rewrite/rewriteDefine.c:748 rewrite/rewriteDefine.c:773 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "Элемент списка RETURNING имеет тип %s, тогда как тип столбца - %s." -#: rewrite/rewriteDefine.c:753 +#: rewrite/rewriteDefine.c:764 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "" "элемент %d результата правила для SELECT имеет размер, отличный от столбца " "\"%s\"" -#: rewrite/rewriteDefine.c:755 +#: rewrite/rewriteDefine.c:766 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "элемент %d списка RETURNING имеет размер, отличный от столбца \"%s\"" -#: rewrite/rewriteDefine.c:772 +#: rewrite/rewriteDefine.c:783 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "список результата правила для SELECT содержит недостаточно элементов" -#: rewrite/rewriteDefine.c:773 +#: rewrite/rewriteDefine.c:784 #, c-format msgid "RETURNING list has too few entries" msgstr "список RETURNING содержит недостаточно элементов" -#: rewrite/rewriteDefine.c:866 rewrite/rewriteDefine.c:980 +#: rewrite/rewriteDefine.c:877 rewrite/rewriteDefine.c:991 #: rewrite/rewriteSupport.c:109 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "правило \"%s\" для отношения\"%s\" не существует" -#: rewrite/rewriteDefine.c:999 +#: rewrite/rewriteDefine.c:1010 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "переименовывать правило ON SELECT нельзя" -#: rewrite/rewriteHandler.c:545 +#: rewrite/rewriteHandler.c:546 #, c-format msgid "" "WITH query name \"%s\" appears in both a rule action and the query being " @@ -20762,108 +21288,113 @@ msgstr "" "имя запроса WITH \"%s\" оказалось и в действии правила, и в переписываемом " "запросе" -#: rewrite/rewriteHandler.c:605 +#: rewrite/rewriteHandler.c:606 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "RETURNING можно определить только для одного правила" -#: rewrite/rewriteHandler.c:814 rewrite/rewriteHandler.c:826 +#: rewrite/rewriteHandler.c:817 rewrite/rewriteHandler.c:829 #, c-format msgid "cannot insert into column \"%s\"" msgstr "вставить данные в столбец \"%s\" нельзя" -#: rewrite/rewriteHandler.c:815 rewrite/rewriteHandler.c:837 +#: rewrite/rewriteHandler.c:818 rewrite/rewriteHandler.c:840 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "" "Столбец \"%s\" является столбцом идентификации со свойством GENERATED ALWAYS." -#: rewrite/rewriteHandler.c:817 +#: rewrite/rewriteHandler.c:820 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Для переопределения укажите OVERRIDING SYSTEM VALUE." -#: rewrite/rewriteHandler.c:836 rewrite/rewriteHandler.c:843 +#: rewrite/rewriteHandler.c:839 rewrite/rewriteHandler.c:846 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "столбцу \"%s\" можно присвоить только значение DEFAULT" -#: rewrite/rewriteHandler.c:1012 rewrite/rewriteHandler.c:1030 +#: rewrite/rewriteHandler.c:1015 rewrite/rewriteHandler.c:1033 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "многочисленные присвоения одному столбцу \"%s\"" -#: rewrite/rewriteHandler.c:2060 +#: rewrite/rewriteHandler.c:2015 rewrite/rewriteHandler.c:3823 +#, c-format +msgid "infinite recursion detected in rules for relation \"%s\"" +msgstr "обнаружена бесконечная рекурсия в правилах для отношения \"%s\"" + +#: rewrite/rewriteHandler.c:2100 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "обнаружена бесконечная рекурсия в политике для отношения \"%s\"" -#: rewrite/rewriteHandler.c:2380 +#: rewrite/rewriteHandler.c:2420 msgid "Junk view columns are not updatable." msgstr "Утилизируемые столбцы представлений не обновляются." -#: rewrite/rewriteHandler.c:2385 +#: rewrite/rewriteHandler.c:2425 msgid "" "View columns that are not columns of their base relation are not updatable." msgstr "" "Столбцы представлений, не являющиеся столбцами базовых отношений, не " "обновляются." -#: rewrite/rewriteHandler.c:2388 +#: rewrite/rewriteHandler.c:2428 msgid "View columns that refer to system columns are not updatable." msgstr "" "Столбцы представлений, ссылающиеся на системные столбцы, не обновляются." -#: rewrite/rewriteHandler.c:2391 +#: rewrite/rewriteHandler.c:2431 msgid "View columns that return whole-row references are not updatable." msgstr "" "Столбцы представлений, возвращающие ссылки на всю строку, не обновляются." -#: rewrite/rewriteHandler.c:2452 +#: rewrite/rewriteHandler.c:2492 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Представления с DISTINCT не обновляются автоматически." -#: rewrite/rewriteHandler.c:2455 +#: rewrite/rewriteHandler.c:2495 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Представления с GROUP BY не обновляются автоматически." -#: rewrite/rewriteHandler.c:2458 +#: rewrite/rewriteHandler.c:2498 msgid "Views containing HAVING are not automatically updatable." msgstr "Представления с HAVING не обновляются автоматически." -#: rewrite/rewriteHandler.c:2461 +#: rewrite/rewriteHandler.c:2501 msgid "" "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "" "Представления с UNION, INTERSECT или EXCEPT не обновляются автоматически." -#: rewrite/rewriteHandler.c:2464 +#: rewrite/rewriteHandler.c:2504 msgid "Views containing WITH are not automatically updatable." msgstr "Представления с WITH не обновляются автоматически." -#: rewrite/rewriteHandler.c:2467 +#: rewrite/rewriteHandler.c:2507 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Представления с LIMIT или OFFSET не обновляются автоматически." -#: rewrite/rewriteHandler.c:2479 +#: rewrite/rewriteHandler.c:2519 msgid "Views that return aggregate functions are not automatically updatable." msgstr "" "Представления, возвращающие агрегатные функции, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2482 +#: rewrite/rewriteHandler.c:2522 msgid "Views that return window functions are not automatically updatable." msgstr "" "Представления, возвращающие оконные функции, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2485 +#: rewrite/rewriteHandler.c:2525 msgid "" "Views that return set-returning functions are not automatically updatable." msgstr "" "Представления, возвращающие функции с результатом-множеством, не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:2492 rewrite/rewriteHandler.c:2496 -#: rewrite/rewriteHandler.c:2504 +#: rewrite/rewriteHandler.c:2532 rewrite/rewriteHandler.c:2536 +#: rewrite/rewriteHandler.c:2544 msgid "" "Views that do not select from a single table or view are not automatically " "updatable." @@ -20871,27 +21402,27 @@ msgstr "" "Представления, выбирающие данные не из одной таблицы или представления, не " "обновляются автоматически." -#: rewrite/rewriteHandler.c:2507 +#: rewrite/rewriteHandler.c:2547 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Представления, содержащие TABLESAMPLE, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2531 +#: rewrite/rewriteHandler.c:2571 msgid "Views that have no updatable columns are not automatically updatable." msgstr "" "Представления, не содержащие обновляемых столбцов, не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:3008 +#: rewrite/rewriteHandler.c:3048 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "вставить данные в столбец \"%s\" представления \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3016 +#: rewrite/rewriteHandler.c:3056 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "изменить данные в столбце \"%s\" представления \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3492 +#: rewrite/rewriteHandler.c:3534 #, c-format msgid "" "DO INSTEAD NOTHING rules are not supported for data-modifying statements in " @@ -20900,7 +21431,7 @@ msgstr "" "правила DO INSTEAD NOTHING не поддерживаются в операторах, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3506 +#: rewrite/rewriteHandler.c:3548 #, c-format msgid "" "conditional DO INSTEAD rules are not supported for data-modifying statements " @@ -20909,13 +21440,13 @@ msgstr "" "условные правила DO INSTEAD не поддерживаются для операторов, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3510 +#: rewrite/rewriteHandler.c:3552 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "" "правила DO ALSO не поддерживаются для операторов, изменяющих данные, в WITH" -#: rewrite/rewriteHandler.c:3515 +#: rewrite/rewriteHandler.c:3557 #, c-format msgid "" "multi-statement DO INSTEAD rules are not supported for data-modifying " @@ -20924,8 +21455,8 @@ msgstr "" "составные правила DO INSTEAD не поддерживаются для операторов, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3706 rewrite/rewriteHandler.c:3714 -#: rewrite/rewriteHandler.c:3722 +#: rewrite/rewriteHandler.c:3751 rewrite/rewriteHandler.c:3759 +#: rewrite/rewriteHandler.c:3767 #, c-format msgid "" "Views with conditional DO INSTEAD rules are not automatically updatable." @@ -20933,43 +21464,43 @@ msgstr "" "Представления в сочетании с правилами DO INSTEAD с условиями не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:3815 +#: rewrite/rewriteHandler.c:3860 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "выполнить INSERT RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3817 +#: rewrite/rewriteHandler.c:3862 #, c-format msgid "" "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "" "Необходимо безусловное правило ON INSERT DO INSTEAD с предложением RETURNING." -#: rewrite/rewriteHandler.c:3822 +#: rewrite/rewriteHandler.c:3867 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "выполнить UPDATE RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3824 +#: rewrite/rewriteHandler.c:3869 #, c-format msgid "" "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "" "Необходимо безусловное правило ON UPDATE DO INSTEAD с предложением RETURNING." -#: rewrite/rewriteHandler.c:3829 +#: rewrite/rewriteHandler.c:3874 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "выполнить DELETE RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3831 +#: rewrite/rewriteHandler.c:3876 #, c-format msgid "" "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "" "Необходимо безусловное правило ON DELETE DO INSTEAD с предложением RETURNING." -#: rewrite/rewriteHandler.c:3849 +#: rewrite/rewriteHandler.c:3894 #, c-format msgid "" "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or " @@ -20978,7 +21509,7 @@ msgstr "" "INSERT c предложением ON CONFLICT нельзя использовать с таблицей, для " "которой заданы правила INSERT или UPDATE" -#: rewrite/rewriteHandler.c:3906 +#: rewrite/rewriteHandler.c:3951 #, c-format msgid "" "WITH cannot be used in a query that is rewritten by rules into multiple " @@ -20987,17 +21518,17 @@ msgstr "" "WITH нельзя использовать в запросе, преобразованном правилами в несколько " "запросов" -#: rewrite/rewriteManip.c:1003 +#: rewrite/rewriteManip.c:1006 #, c-format msgid "conditional utility statements are not implemented" msgstr "условные служебные операторы не реализованы" -#: rewrite/rewriteManip.c:1169 +#: rewrite/rewriteManip.c:1172 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "условие WHERE CURRENT OF для представлений не реализовано" -#: rewrite/rewriteManip.c:1503 +#: rewrite/rewriteManip.c:1507 #, c-format msgid "" "NEW variables in ON UPDATE rules cannot reference columns that are part of a " @@ -21006,68 +21537,65 @@ msgstr "" "переменные NEW в правилах ON UPDATE не могут ссылаться на столбцы, " "фигурирующие во множественном присваивании в исходной команде UPDATE" -#: snowball/dict_snowball.c:197 +#: snowball/dict_snowball.c:199 #, c-format msgid "no Snowball stemmer available for language \"%s\" and encoding \"%s\"" msgstr "стеммер Snowball для языка \"%s\" и кодировки \"%s\" не найден" -#: snowball/dict_snowball.c:220 tsearch/dict_ispell.c:74 +#: snowball/dict_snowball.c:222 tsearch/dict_ispell.c:74 #: tsearch/dict_simple.c:49 #, c-format msgid "multiple StopWords parameters" msgstr "повторяющийся параметр StopWords" -#: snowball/dict_snowball.c:229 +#: snowball/dict_snowball.c:231 #, c-format msgid "multiple Language parameters" msgstr "повторяющийся параметр Language" -#: snowball/dict_snowball.c:236 +#: snowball/dict_snowball.c:238 #, c-format msgid "unrecognized Snowball parameter: \"%s\"" msgstr "нераспознанный параметр Snowball: \"%s\"" -#: snowball/dict_snowball.c:244 +#: snowball/dict_snowball.c:246 #, c-format msgid "missing Language parameter" msgstr "отсутствует параметр Language" -#: statistics/dependencies.c:674 statistics/dependencies.c:727 -#: statistics/mcv.c:1477 statistics/mcv.c:1508 statistics/mvdistinct.c:349 -#: statistics/mvdistinct.c:402 utils/adt/pseudotypes.c:94 -#: utils/adt/pseudotypes.c:122 utils/adt/pseudotypes.c:147 -#: utils/adt/pseudotypes.c:171 utils/adt/pseudotypes.c:282 -#: utils/adt/pseudotypes.c:307 utils/adt/pseudotypes.c:335 -#: utils/adt/pseudotypes.c:363 utils/adt/pseudotypes.c:393 +#: statistics/dependencies.c:667 statistics/dependencies.c:720 +#: statistics/mcv.c:1477 statistics/mcv.c:1508 statistics/mvdistinct.c:348 +#: statistics/mvdistinct.c:401 utils/adt/pseudotypes.c:42 +#: utils/adt/pseudotypes.c:76 #, c-format msgid "cannot accept a value of type %s" msgstr "значение типа %s нельзя ввести" -#: statistics/extended_stats.c:121 +#: statistics/extended_stats.c:145 #, c-format msgid "" "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "" "объект статистики \"%s.%s\" не может быть вычислен для отношения \"%s.%s\"" -#: statistics/mcv.c:1366 utils/adt/jsonfuncs.c:1708 +#: statistics/mcv.c:1365 utils/adt/jsonfuncs.c:1800 #, c-format msgid "" "function returning record called in context that cannot accept type record" msgstr "" "функция, возвращающая запись, вызвана в контексте, не допускающем этот тип" -#: storage/buffer/bufmgr.c:545 storage/buffer/bufmgr.c:658 +#: storage/buffer/bufmgr.c:588 storage/buffer/bufmgr.c:670 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "обращаться к временным таблицам других сеансов нельзя" -#: storage/buffer/bufmgr.c:814 +#: storage/buffer/bufmgr.c:826 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "неожиданные данные после EOF в блоке %u отношения %s" -#: storage/buffer/bufmgr.c:816 +#: storage/buffer/bufmgr.c:828 #, c-format msgid "" "This has been seen to occur with buggy kernels; consider updating your " @@ -21076,37 +21604,37 @@ msgstr "" "Эта ситуация может возникать из-за ошибок в ядре; возможно, вам следует " "обновить ОС." -#: storage/buffer/bufmgr.c:914 +#: storage/buffer/bufmgr.c:927 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "неверная страница в блоке %u отношения %s; страница обнуляется" -#: storage/buffer/bufmgr.c:4056 +#: storage/buffer/bufmgr.c:4213 #, c-format msgid "could not write block %u of %s" msgstr "не удалось запись блок %u файла %s" -#: storage/buffer/bufmgr.c:4058 +#: storage/buffer/bufmgr.c:4215 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Множественные сбои - возможно, постоянная ошибка записи." -#: storage/buffer/bufmgr.c:4079 storage/buffer/bufmgr.c:4098 +#: storage/buffer/bufmgr.c:4236 storage/buffer/bufmgr.c:4255 #, c-format msgid "writing block %u of relation %s" msgstr "запись блока %u отношения %s" -#: storage/buffer/bufmgr.c:4401 +#: storage/buffer/bufmgr.c:4558 #, c-format msgid "snapshot too old" msgstr "снимок слишком стар" -#: storage/buffer/localbuf.c:199 +#: storage/buffer/localbuf.c:205 #, c-format msgid "no empty local buffer available" msgstr "нет пустого локального буфера" -#: storage/buffer/localbuf.c:427 +#: storage/buffer/localbuf.c:433 #, c-format msgid "cannot access temporary tables during a parallel operation" msgstr "обращаться к временным таблицам во время параллельных операций нельзя" @@ -21117,7 +21645,7 @@ msgid "could not open temporary file \"%s\" from BufFile \"%s\": %m" msgstr "" "не удалось открыть временный файл \"%s\", входящий в BufFile \"%s\": %m" -#: storage/file/buffile.c:796 +#: storage/file/buffile.c:795 #, c-format msgid "" "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" @@ -21125,207 +21653,238 @@ msgstr "" "не удалось определить размер временного файла \"%s\", входящего в BufFile " "\"%s\": %m" -#: storage/file/fd.c:458 storage/file/fd.c:530 storage/file/fd.c:566 +#: storage/file/fd.c:508 storage/file/fd.c:580 storage/file/fd.c:616 #, c-format msgid "could not flush dirty data: %m" msgstr "не удалось сбросить грязные данные: %m" -#: storage/file/fd.c:488 +#: storage/file/fd.c:538 #, c-format msgid "could not determine dirty data size: %m" msgstr "не удалось определить размер грязных данных: %m" -#: storage/file/fd.c:540 +#: storage/file/fd.c:590 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "ошибка в munmap() при сбросе данных на диск: %m" -#: storage/file/fd.c:748 +#: storage/file/fd.c:798 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "для файла \"%s\" не удалось создать ссылку \"%s\": %m" -#: storage/file/fd.c:842 +#: storage/file/fd.c:881 #, c-format msgid "getrlimit failed: %m" msgstr "ошибка в getrlimit(): %m" -#: storage/file/fd.c:932 +#: storage/file/fd.c:971 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "недостаточно дескрипторов файлов для запуска серверного процесса" -#: storage/file/fd.c:933 +#: storage/file/fd.c:972 #, c-format msgid "System allows %d, we need at least %d." msgstr "Система выделяет: %d, а требуется минимум: %d." -#: storage/file/fd.c:984 storage/file/fd.c:2246 storage/file/fd.c:2356 -#: storage/file/fd.c:2507 +#: storage/file/fd.c:1023 storage/file/fd.c:2357 storage/file/fd.c:2467 +#: storage/file/fd.c:2618 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "нехватка дескрипторов файлов: %m; освободите их и повторите попытку" -#: storage/file/fd.c:1284 +#: storage/file/fd.c:1397 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "временный файл: путь \"%s\", размер %lu" -#: storage/file/fd.c:1415 +#: storage/file/fd.c:1528 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "не удалось создать временный каталог \"%s\": %m" -#: storage/file/fd.c:1422 +#: storage/file/fd.c:1535 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "не удалось создать временный подкаталог \"%s\": %m" -#: storage/file/fd.c:1615 +#: storage/file/fd.c:1728 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "не удалось создать временный файл \"%s\": %m" -#: storage/file/fd.c:1650 +#: storage/file/fd.c:1763 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "не удалось открыть временный файл \"%s\": %m" -#: storage/file/fd.c:1691 +#: storage/file/fd.c:1804 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "ошибка удаления временного файла \"%s\": %m" -#: storage/file/fd.c:1955 +#: storage/file/fd.c:2068 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "размер временного файла превышает предел temp_file_limit (%d КБ)" -#: storage/file/fd.c:2222 storage/file/fd.c:2281 +#: storage/file/fd.c:2333 storage/file/fd.c:2392 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "превышен предел maxAllocatedDescs (%d) при попытке открыть файл \"%s\"" -#: storage/file/fd.c:2326 +#: storage/file/fd.c:2437 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "" "превышен предел maxAllocatedDescs (%d) при попытке выполнить команду \"%s\"" -#: storage/file/fd.c:2483 +#: storage/file/fd.c:2594 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "" "превышен предел maxAllocatedDescs (%d) при попытке открыть каталог \"%s\"" -#: storage/file/fd.c:3006 +#: storage/file/fd.c:3122 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "в каталоге временных файлов обнаружен неуместный файл: \"%s\"" -#: storage/file/sharedfileset.c:95 +#: storage/file/sharedfileset.c:111 #, c-format msgid "could not attach to a SharedFileSet that is already destroyed" msgstr "не удалось подключиться к уже уничтоженному набору SharedFileSet" -#: storage/ipc/dsm.c:343 +#: storage/ipc/dsm.c:338 #, c-format msgid "dynamic shared memory control segment is corrupt" msgstr "сегмент управления динамической разделяемой памятью испорчен" -#: storage/ipc/dsm.c:404 +#: storage/ipc/dsm.c:399 #, c-format msgid "dynamic shared memory control segment is not valid" msgstr "сегмент управления динамической разделяемой памятью не в порядке" -#: storage/ipc/dsm.c:499 +#: storage/ipc/dsm.c:494 #, c-format msgid "too many dynamic shared memory segments" msgstr "слишком много сегментов динамической разделяемой памяти" -#: storage/ipc/dsm_impl.c:230 storage/ipc/dsm_impl.c:517 -#: storage/ipc/dsm_impl.c:621 storage/ipc/dsm_impl.c:792 +#: storage/ipc/dsm_impl.c:230 storage/ipc/dsm_impl.c:526 +#: storage/ipc/dsm_impl.c:630 storage/ipc/dsm_impl.c:801 #, c-format msgid "could not unmap shared memory segment \"%s\": %m" msgstr "не удалось освободить сегмент разделяемой памяти %s: %m" -#: storage/ipc/dsm_impl.c:240 storage/ipc/dsm_impl.c:527 -#: storage/ipc/dsm_impl.c:631 storage/ipc/dsm_impl.c:802 +#: storage/ipc/dsm_impl.c:240 storage/ipc/dsm_impl.c:536 +#: storage/ipc/dsm_impl.c:640 storage/ipc/dsm_impl.c:811 #, c-format msgid "could not remove shared memory segment \"%s\": %m" msgstr "ошибка при удалении сегмента разделяемой памяти \"%s\": %m" -#: storage/ipc/dsm_impl.c:261 storage/ipc/dsm_impl.c:702 -#: storage/ipc/dsm_impl.c:816 +#: storage/ipc/dsm_impl.c:264 storage/ipc/dsm_impl.c:711 +#: storage/ipc/dsm_impl.c:825 #, c-format msgid "could not open shared memory segment \"%s\": %m" msgstr "не удалось открыть сегмент разделяемой памяти \"%s\": %m" -#: storage/ipc/dsm_impl.c:285 storage/ipc/dsm_impl.c:543 -#: storage/ipc/dsm_impl.c:747 storage/ipc/dsm_impl.c:840 +#: storage/ipc/dsm_impl.c:289 storage/ipc/dsm_impl.c:552 +#: storage/ipc/dsm_impl.c:756 storage/ipc/dsm_impl.c:849 #, c-format msgid "could not stat shared memory segment \"%s\": %m" msgstr "не удалось обратиться к сегменту разделяемой памяти \"%s\": %m" -#: storage/ipc/dsm_impl.c:311 storage/ipc/dsm_impl.c:891 +#: storage/ipc/dsm_impl.c:316 storage/ipc/dsm_impl.c:900 #, c-format msgid "could not resize shared memory segment \"%s\" to %zu bytes: %m" msgstr "" "не удалось изменить размер сегмента разделяемой памяти \"%s\" до %zu байт: %m" -#: storage/ipc/dsm_impl.c:332 storage/ipc/dsm_impl.c:564 -#: storage/ipc/dsm_impl.c:723 storage/ipc/dsm_impl.c:913 +#: storage/ipc/dsm_impl.c:338 storage/ipc/dsm_impl.c:573 +#: storage/ipc/dsm_impl.c:732 storage/ipc/dsm_impl.c:922 #, c-format msgid "could not map shared memory segment \"%s\": %m" msgstr "не удалось отобразить сегмент разделяемой памяти \"%s\": %m" -#: storage/ipc/dsm_impl.c:499 +#: storage/ipc/dsm_impl.c:508 #, c-format msgid "could not get shared memory segment: %m" msgstr "не удалось получить сегмент разделяемой памяти: %m" -#: storage/ipc/dsm_impl.c:687 +#: storage/ipc/dsm_impl.c:696 #, c-format msgid "could not create shared memory segment \"%s\": %m" msgstr "не удалось создать сегмент разделяемой памяти \"%s\": %m" -#: storage/ipc/dsm_impl.c:924 +#: storage/ipc/dsm_impl.c:933 #, c-format msgid "could not close shared memory segment \"%s\": %m" msgstr "не удалось закрыть сегмент разделяемой памяти \"%s\": %m" -#: storage/ipc/dsm_impl.c:963 storage/ipc/dsm_impl.c:1011 +#: storage/ipc/dsm_impl.c:972 storage/ipc/dsm_impl.c:1020 #, c-format msgid "could not duplicate handle for \"%s\": %m" msgstr "не удалось продублировать указатель для \"%s\": %m" #. translator: %s is a syscall name, such as "poll()" -#: storage/ipc/latch.c:860 storage/ipc/latch.c:1093 storage/ipc/latch.c:1219 +#: storage/ipc/latch.c:940 storage/ipc/latch.c:1095 storage/ipc/latch.c:1308 +#: storage/ipc/latch.c:1461 storage/ipc/latch.c:1581 #, c-format msgid "%s failed: %m" msgstr "ошибка в %s: %m" -#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:929 -#: storage/lmgr/lock.c:967 storage/lmgr/lock.c:2754 storage/lmgr/lock.c:4084 -#: storage/lmgr/lock.c:4149 storage/lmgr/lock.c:4441 -#: storage/lmgr/predicate.c:2404 storage/lmgr/predicate.c:2419 -#: storage/lmgr/predicate.c:3918 storage/lmgr/predicate.c:5075 -#: utils/hash/dynahash.c:1065 +#: storage/ipc/procarray.c:3021 +#, c-format +msgid "database \"%s\" is being used by prepared transactions" +msgstr "база \"%s\" используется подготовленными транзакциями" + +#: storage/ipc/procarray.c:3053 storage/ipc/signalfuncs.c:142 +#, c-format +msgid "must be a superuser to terminate superuser process" +msgstr "прерывать процесс суперпользователя может только суперпользователь" + +#: storage/ipc/procarray.c:3060 storage/ipc/signalfuncs.c:147 +#, c-format +msgid "" +"must be a member of the role whose process is being terminated or member of " +"pg_signal_backend" +msgstr "" +"необходимо быть членом роли, процесс которой прерывается, или роли " +"pg_signal_backend" + +#: storage/ipc/shm_mq.c:368 +#, c-format +msgid "cannot send a message of size %zu via shared memory queue" +msgstr "" +"не удалось передать сообщение размером %zu через очередь в разделяемой памяти" + +#: storage/ipc/shm_mq.c:694 +#, c-format +msgid "invalid message size %zu in shared memory queue" +msgstr "неверный размер сообщения %zu в очереди в разделяемой памяти" + +#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:982 +#: storage/lmgr/lock.c:1020 storage/lmgr/lock.c:2845 storage/lmgr/lock.c:4167 +#: storage/lmgr/lock.c:4232 storage/lmgr/lock.c:4539 +#: storage/lmgr/predicate.c:2476 storage/lmgr/predicate.c:2491 +#: storage/lmgr/predicate.c:3973 storage/lmgr/predicate.c:5084 +#: utils/hash/dynahash.c:1067 #, c-format msgid "out of shared memory" msgstr "нехватка разделяемой памяти" -#: storage/ipc/shmem.c:165 storage/ipc/shmem.c:246 +#: storage/ipc/shmem.c:170 storage/ipc/shmem.c:266 #, c-format msgid "out of shared memory (%zu bytes requested)" msgstr "нехватка разделяемой памяти (требовалось байт: %zu)" -#: storage/ipc/shmem.c:421 +#: storage/ipc/shmem.c:441 #, c-format msgid "could not create ShmemIndex entry for data structure \"%s\"" msgstr "не удалось создать запись ShmemIndex для структуры данных \"%s\"" -#: storage/ipc/shmem.c:436 +#: storage/ipc/shmem.c:456 #, c-format msgid "" "ShmemIndex entry size is wrong for data structure \"%s\": expected %zu, " @@ -21334,7 +21893,7 @@ msgstr "" "размер записи ShmemIndex не соответствует структуре данных \"%s" "\" (ожидалось: %zu, фактически: %zu)" -#: storage/ipc/shmem.c:453 +#: storage/ipc/shmem.c:475 #, c-format msgid "" "not enough shared memory for data structure \"%s\" (%zu bytes requested)" @@ -21342,7 +21901,7 @@ msgstr "" "недостаточно разделяемой памяти для структуры данных \"%s\" (требовалось " "байт: %zu)" -#: storage/ipc/shmem.c:484 storage/ipc/shmem.c:503 +#: storage/ipc/shmem.c:507 storage/ipc/shmem.c:526 #, c-format msgid "requested shared memory size overflows size_t" msgstr "запрошенный размер разделяемой памяти не умещается в size_t" @@ -21352,7 +21911,7 @@ msgstr "запрошенный размер разделяемой памяти msgid "PID %d is not a PostgreSQL server process" msgstr "PID %d не относится к серверному процессу PostgreSQL" -#: storage/ipc/signalfuncs.c:98 storage/lmgr/proc.c:1363 +#: storage/ipc/signalfuncs.c:98 storage/lmgr/proc.c:1366 #, c-format msgid "could not send signal to process %d: %m" msgstr "отправить сигнал процессу %d не удалось: %m" @@ -21371,20 +21930,6 @@ msgstr "" "необходимо быть членом роли, запрос которой отменяется, или роли " "pg_signal_backend" -#: storage/ipc/signalfuncs.c:142 -#, c-format -msgid "must be a superuser to terminate superuser process" -msgstr "прерывать процесс суперпользователя может только суперпользователь" - -#: storage/ipc/signalfuncs.c:147 -#, c-format -msgid "" -"must be a member of the role whose process is being terminated or member of " -"pg_signal_backend" -msgstr "" -"необходимо быть членом роли, процесс которой прерывается, или роли " -"pg_signal_backend" - #: storage/ipc/signalfuncs.c:183 #, c-format msgid "must be superuser to rotate log files with adminpack 1.0" @@ -21393,7 +21938,7 @@ msgstr "" "суперпользователь" #. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:223 +#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:253 #, c-format msgid "Consider using %s, which is part of core, instead." msgstr "Рассмотрите возможность использования функции %s, включённой в ядро." @@ -21403,158 +21948,163 @@ msgstr "Рассмотрите возможность использования msgid "rotation not possible because log collection not active" msgstr "прокрутка невозможна, так как протоколирование отключено" -#: storage/ipc/standby.c:558 tcop/postgres.c:3110 +#: storage/ipc/standby.c:668 tcop/postgres.c:3189 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "" "выполнение оператора отменено из-за конфликта с процессом восстановления" -#: storage/ipc/standby.c:559 tcop/postgres.c:2384 +#: storage/ipc/standby.c:669 tcop/postgres.c:2469 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "" "Транзакция пользователя привела к взаимоблокировке с процессом " "восстановления." -#: storage/large_object/inv_api.c:189 +#: storage/large_object/inv_api.c:191 #, c-format msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" msgstr "" "в записи pg_largeobject для OID %u, стр. %d неверный размер поля данных (%d)" -#: storage/large_object/inv_api.c:270 +#: storage/large_object/inv_api.c:272 #, c-format msgid "invalid flags for opening a large object: %d" msgstr "неверные флаги для открытия большого объекта: %d" -#: storage/large_object/inv_api.c:460 +#: storage/large_object/inv_api.c:462 #, c-format msgid "invalid whence setting: %d" msgstr "неверное значение ориентира: %d" -#: storage/large_object/inv_api.c:632 +#: storage/large_object/inv_api.c:634 #, c-format msgid "invalid large object write request size: %d" msgstr "неверный размер записи большого объекта: %d" -#: storage/lmgr/deadlock.c:1115 +#: storage/lmgr/deadlock.c:1124 #, c-format msgid "Process %d waits for %s on %s; blocked by process %d." msgstr "" "Процесс %d ожидает в режиме %s блокировку \"%s\"; заблокирован процессом %d." -#: storage/lmgr/deadlock.c:1134 +#: storage/lmgr/deadlock.c:1143 #, c-format msgid "Process %d: %s" msgstr "Процесс %d: %s" -#: storage/lmgr/deadlock.c:1143 +#: storage/lmgr/deadlock.c:1152 #, c-format msgid "deadlock detected" msgstr "обнаружена взаимоблокировка" -#: storage/lmgr/deadlock.c:1146 +#: storage/lmgr/deadlock.c:1155 #, c-format msgid "See server log for query details." msgstr "Подробности запроса смотрите в протоколе сервера." -#: storage/lmgr/lmgr.c:815 +#: storage/lmgr/lmgr.c:830 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "при изменении кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:818 +#: storage/lmgr/lmgr.c:833 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "при удалении кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:821 +#: storage/lmgr/lmgr.c:836 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "при блокировке кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:824 +#: storage/lmgr/lmgr.c:839 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "при блокировке изменённой версии (%u,%u) кортежа в отношении \"%s\"" -#: storage/lmgr/lmgr.c:827 +#: storage/lmgr/lmgr.c:842 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "при добавлении кортежа индекса (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:830 +#: storage/lmgr/lmgr.c:845 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "при проверке уникальности кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:833 +#: storage/lmgr/lmgr.c:848 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "при перепроверке изменённого кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:836 +#: storage/lmgr/lmgr.c:851 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "" "при проверке ограничения-исключения для кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:1091 +#: storage/lmgr/lmgr.c:1105 #, c-format msgid "relation %u of database %u" msgstr "отношение %u базы данных %u" -#: storage/lmgr/lmgr.c:1097 +#: storage/lmgr/lmgr.c:1111 #, c-format msgid "extension of relation %u of database %u" msgstr "расширение отношения %u базы данных %u" -#: storage/lmgr/lmgr.c:1103 +#: storage/lmgr/lmgr.c:1117 +#, c-format +msgid "pg_database.datfrozenxid of database %u" +msgstr "pg_database.datfrozenxid базы %u" + +#: storage/lmgr/lmgr.c:1122 #, c-format msgid "page %u of relation %u of database %u" msgstr "страница %u отношения %u базы данных %u" -#: storage/lmgr/lmgr.c:1110 +#: storage/lmgr/lmgr.c:1129 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "кортеж (%u,%u) отношения %u базы данных %u" -#: storage/lmgr/lmgr.c:1118 +#: storage/lmgr/lmgr.c:1137 #, c-format msgid "transaction %u" msgstr "транзакция %u" -#: storage/lmgr/lmgr.c:1123 +#: storage/lmgr/lmgr.c:1142 #, c-format msgid "virtual transaction %d/%u" msgstr "виртуальная транзакция %d/%u" -#: storage/lmgr/lmgr.c:1129 +#: storage/lmgr/lmgr.c:1148 #, c-format msgid "speculative token %u of transaction %u" msgstr "спекулятивный маркер %u транзакции %u" -#: storage/lmgr/lmgr.c:1135 +#: storage/lmgr/lmgr.c:1154 #, c-format msgid "object %u of class %u of database %u" msgstr "объект %u класса %u базы данных %u" -#: storage/lmgr/lmgr.c:1143 +#: storage/lmgr/lmgr.c:1162 #, c-format msgid "user lock [%u,%u,%u]" msgstr "пользовательская блокировка [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1150 +#: storage/lmgr/lmgr.c:1169 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "рекомендательная блокировка [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1158 +#: storage/lmgr/lmgr.c:1177 #, c-format msgid "unrecognized locktag type %d" msgstr "нераспознанный тип блокировки %d" -#: storage/lmgr/lock.c:764 +#: storage/lmgr/lock.c:803 #, c-format msgid "" "cannot acquire lock mode %s on database objects while recovery is in progress" @@ -21562,7 +22112,7 @@ msgstr "" "пока выполняется восстановление, нельзя получить блокировку объектов базы " "данных в режиме %s" -#: storage/lmgr/lock.c:766 +#: storage/lmgr/lock.c:805 #, c-format msgid "" "Only RowExclusiveLock or less can be acquired on database objects during " @@ -21571,13 +22121,13 @@ msgstr "" "В процессе восстановления для объектов базы данных может быть получена " "только блокировка RowExclusiveLock или менее сильная." -#: storage/lmgr/lock.c:930 storage/lmgr/lock.c:968 storage/lmgr/lock.c:2755 -#: storage/lmgr/lock.c:4085 storage/lmgr/lock.c:4150 storage/lmgr/lock.c:4442 +#: storage/lmgr/lock.c:983 storage/lmgr/lock.c:1021 storage/lmgr/lock.c:2846 +#: storage/lmgr/lock.c:4168 storage/lmgr/lock.c:4233 storage/lmgr/lock.c:4540 #, c-format msgid "You might need to increase max_locks_per_transaction." msgstr "Возможно, следует увеличить параметр max_locks_per_transaction." -#: storage/lmgr/lock.c:3201 storage/lmgr/lock.c:3317 +#: storage/lmgr/lock.c:3284 storage/lmgr/lock.c:3400 #, c-format msgid "" "cannot PREPARE while holding both session-level and transaction-level locks " @@ -21586,12 +22136,12 @@ msgstr "" "нельзя выполнить PREPARE, удерживая блокировки на уровне сеанса и на уровне " "транзакции для одного объекта" -#: storage/lmgr/predicate.c:703 +#: storage/lmgr/predicate.c:700 #, c-format msgid "not enough elements in RWConflictPool to record a read/write conflict" msgstr "в пуле недостаточно элементов для записи о конфликте чтения/записи" -#: storage/lmgr/predicate.c:704 storage/lmgr/predicate.c:732 +#: storage/lmgr/predicate.c:701 storage/lmgr/predicate.c:729 #, c-format msgid "" "You might need to run fewer transactions at a time or increase " @@ -21600,7 +22150,7 @@ msgstr "" "Попробуйте уменьшить число транзакций в секунду или увеличить параметр " "max_connections." -#: storage/lmgr/predicate.c:731 +#: storage/lmgr/predicate.c:728 #, c-format msgid "" "not enough elements in RWConflictPool to record a potential read/write " @@ -21609,18 +22159,18 @@ msgstr "" "в пуле недостаточно элементов для записи о потенциальном конфликте чтения/" "записи" -#: storage/lmgr/predicate.c:1538 +#: storage/lmgr/predicate.c:1610 #, c-format msgid "deferrable snapshot was unsafe; trying a new one" msgstr "откладываемый снимок был небезопасен; пробуем более новый" -#: storage/lmgr/predicate.c:1627 +#: storage/lmgr/predicate.c:1699 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "" "Параметр \"default_transaction_isolation\" имеет значение \"serializable\"." -#: storage/lmgr/predicate.c:1628 +#: storage/lmgr/predicate.c:1700 #, c-format msgid "" "You can use \"SET default_transaction_isolation = 'repeatable read'\" to " @@ -21629,34 +22179,34 @@ msgstr "" "Чтобы изменить режим по умолчанию, выполните \"SET " "default_transaction_isolation = 'repeatable read'\"." -#: storage/lmgr/predicate.c:1679 +#: storage/lmgr/predicate.c:1751 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "транзакция, импортирующая снимок, не должна быть READ ONLY DEFERRABLE" -#: storage/lmgr/predicate.c:1758 utils/time/snapmgr.c:623 +#: storage/lmgr/predicate.c:1830 utils/time/snapmgr.c:623 #: utils/time/snapmgr.c:629 #, c-format msgid "could not import the requested snapshot" msgstr "не удалось импортировать запрошенный снимок" -#: storage/lmgr/predicate.c:1759 utils/time/snapmgr.c:630 +#: storage/lmgr/predicate.c:1831 utils/time/snapmgr.c:630 #, c-format msgid "The source process with PID %d is not running anymore." msgstr "Исходный процесс с PID %d уже не работает." -#: storage/lmgr/predicate.c:2405 storage/lmgr/predicate.c:2420 -#: storage/lmgr/predicate.c:3919 +#: storage/lmgr/predicate.c:2477 storage/lmgr/predicate.c:2492 +#: storage/lmgr/predicate.c:3974 #, c-format msgid "You might need to increase max_pred_locks_per_transaction." msgstr "" "Возможно, следует увеличить значение параметра max_locks_per_transaction." -#: storage/lmgr/predicate.c:4075 storage/lmgr/predicate.c:4164 -#: storage/lmgr/predicate.c:4172 storage/lmgr/predicate.c:4211 -#: storage/lmgr/predicate.c:4454 storage/lmgr/predicate.c:4791 -#: storage/lmgr/predicate.c:4803 storage/lmgr/predicate.c:4846 -#: storage/lmgr/predicate.c:4884 +#: storage/lmgr/predicate.c:4105 storage/lmgr/predicate.c:4141 +#: storage/lmgr/predicate.c:4174 storage/lmgr/predicate.c:4182 +#: storage/lmgr/predicate.c:4221 storage/lmgr/predicate.c:4463 +#: storage/lmgr/predicate.c:4800 storage/lmgr/predicate.c:4812 +#: storage/lmgr/predicate.c:4855 storage/lmgr/predicate.c:4893 #, c-format msgid "" "could not serialize access due to read/write dependencies among transactions" @@ -21664,16 +22214,16 @@ msgstr "" "не удалось сериализовать доступ из-за зависимостей чтения/записи между " "транзакциями" -#: storage/lmgr/predicate.c:4077 storage/lmgr/predicate.c:4166 -#: storage/lmgr/predicate.c:4174 storage/lmgr/predicate.c:4213 -#: storage/lmgr/predicate.c:4456 storage/lmgr/predicate.c:4793 -#: storage/lmgr/predicate.c:4805 storage/lmgr/predicate.c:4848 -#: storage/lmgr/predicate.c:4886 +#: storage/lmgr/predicate.c:4107 storage/lmgr/predicate.c:4143 +#: storage/lmgr/predicate.c:4176 storage/lmgr/predicate.c:4184 +#: storage/lmgr/predicate.c:4223 storage/lmgr/predicate.c:4465 +#: storage/lmgr/predicate.c:4802 storage/lmgr/predicate.c:4814 +#: storage/lmgr/predicate.c:4857 storage/lmgr/predicate.c:4895 #, c-format msgid "The transaction might succeed if retried." msgstr "Транзакция может завершиться успешно при следующей попытке." -#: storage/lmgr/proc.c:359 +#: storage/lmgr/proc.c:358 #, c-format msgid "" "number of requested standby connections exceeds max_wal_senders (currently " @@ -21682,17 +22232,17 @@ msgstr "" "число запрошенных подключений резервных серверов превосходит max_wal_senders " "(сейчас: %d)" -#: storage/lmgr/proc.c:1334 +#: storage/lmgr/proc.c:1337 #, c-format msgid "Process %d waits for %s on %s." msgstr "Процесс %d ожидает в режиме %s блокировку %s." -#: storage/lmgr/proc.c:1345 +#: storage/lmgr/proc.c:1348 #, c-format msgid "sending cancel to blocking autovacuum PID %d" msgstr "снятие блокирующего процесса автоочистки (PID %d)" -#: storage/lmgr/proc.c:1465 +#: storage/lmgr/proc.c:1468 #, c-format msgid "" "process %d avoided deadlock for %s on %s by rearranging queue order after " @@ -21701,7 +22251,7 @@ msgstr "" "процесс %d избежал взаимоблокировки, ожидая в режиме %s блокировку \"%s\", " "изменив порядок очереди через %ld.%03d мс" -#: storage/lmgr/proc.c:1480 +#: storage/lmgr/proc.c:1483 #, c-format msgid "" "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" @@ -21709,118 +22259,118 @@ msgstr "" "процесс %d обнаружил взаимоблокировку, ожидая в режиме %s блокировку \"%s\" " "в течение %ld.%03d мс" -#: storage/lmgr/proc.c:1489 +#: storage/lmgr/proc.c:1492 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "" "процесс %d продолжает ожидать в режиме %s блокировку \"%s\" в течение %ld." "%03d мс" -#: storage/lmgr/proc.c:1496 +#: storage/lmgr/proc.c:1499 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "процесс %d получил в режиме %s блокировку \"%s\" через %ld.%03d мс" -#: storage/lmgr/proc.c:1512 +#: storage/lmgr/proc.c:1515 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "" "процесс %d не смог получить в режиме %s блокировку \"%s\" за %ld.%03d мс" -#: storage/page/bufpage.c:152 +#: storage/page/bufpage.c:164 #, c-format msgid "page verification failed, calculated checksum %u but expected %u" msgstr "" "ошибка проверки страницы: получена контрольная сумма %u, а ожидалась - %u" -#: storage/page/bufpage.c:216 storage/page/bufpage.c:510 -#: storage/page/bufpage.c:747 storage/page/bufpage.c:880 -#: storage/page/bufpage.c:976 storage/page/bufpage.c:1086 +#: storage/page/bufpage.c:229 storage/page/bufpage.c:523 +#: storage/page/bufpage.c:760 storage/page/bufpage.c:893 +#: storage/page/bufpage.c:989 storage/page/bufpage.c:1101 #, c-format msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" msgstr "" "испорченные указатели страницы: нижний = %u, верхний = %u, спецобласть = %u" -#: storage/page/bufpage.c:532 +#: storage/page/bufpage.c:545 #, c-format msgid "corrupted line pointer: %u" msgstr "испорченный линейный указатель: %u" -#: storage/page/bufpage.c:559 storage/page/bufpage.c:931 +#: storage/page/bufpage.c:572 storage/page/bufpage.c:944 #, c-format msgid "corrupted item lengths: total %u, available space %u" msgstr "испорченный размер элемента (общий размер: %u, доступно: %u)" -#: storage/page/bufpage.c:766 storage/page/bufpage.c:904 -#: storage/page/bufpage.c:992 storage/page/bufpage.c:1102 +#: storage/page/bufpage.c:779 storage/page/bufpage.c:917 +#: storage/page/bufpage.c:1005 storage/page/bufpage.c:1117 #, c-format msgid "corrupted line pointer: offset = %u, size = %u" msgstr "испорченный линейный указатель: смещение = %u, размер = %u" -#: storage/smgr/md.c:320 storage/smgr/md.c:807 +#: storage/smgr/md.c:317 storage/smgr/md.c:874 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "не удалось обрезать файл \"%s\": %m" -#: storage/smgr/md.c:394 +#: storage/smgr/md.c:445 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "не удалось увеличить файл \"%s\" до блока %u" -#: storage/smgr/md.c:409 +#: storage/smgr/md.c:460 #, c-format msgid "could not extend file \"%s\": %m" msgstr "не удалось увеличить файл \"%s\": %m" -#: storage/smgr/md.c:411 storage/smgr/md.c:418 storage/smgr/md.c:690 +#: storage/smgr/md.c:462 storage/smgr/md.c:469 storage/smgr/md.c:757 #, c-format msgid "Check free disk space." msgstr "Проверьте, есть ли место на диске." -#: storage/smgr/md.c:415 +#: storage/smgr/md.c:466 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "не удалось увеличить файл \"%s\" (записано байт: %d из %d) в блоке %u" -#: storage/smgr/md.c:611 +#: storage/smgr/md.c:678 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "не удалось прочитать блок %u в файле \"%s\": %m" -#: storage/smgr/md.c:627 +#: storage/smgr/md.c:694 #, c-format msgid "could not read block %u in file \"%s\": read only %d of %d bytes" msgstr "не удалось прочитать блок %u в файле \"%s\" (прочитано байт: %d из %d)" -#: storage/smgr/md.c:681 +#: storage/smgr/md.c:748 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "не удалось записать блок %u в файл \"%s\": %m" -#: storage/smgr/md.c:686 +#: storage/smgr/md.c:753 #, c-format msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "не удалось записать блок %u в файл \"%s\" (записано байт: %d из %d)" -#: storage/smgr/md.c:778 +#: storage/smgr/md.c:845 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "" "не удалось обрезать файл \"%s\" (требуемая длина в блоках: %u, но сейчас он " "содержит %u)" -#: storage/smgr/md.c:833 +#: storage/smgr/md.c:900 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "не удалось обрезать файл \"%s\" до нужного числа блоков (%u): %m" -#: storage/smgr/md.c:905 +#: storage/smgr/md.c:995 #, c-format msgid "could not forward fsync request because request queue is full" msgstr "" "не удалось отправить запрос синхронизации с ФС (очередь запросов переполнена)" -#: storage/smgr/md.c:1202 +#: storage/smgr/md.c:1294 #, c-format msgid "" "could not open file \"%s\" (target block %u): previous segment is only %u " @@ -21829,12 +22379,12 @@ msgstr "" "не удалось открыть файл file \"%s\" (целевой блок %u): недостаточно блоков в " "предыдущем сегменте (всего %u)" -#: storage/smgr/md.c:1216 +#: storage/smgr/md.c:1308 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "не удалось открыть файл file \"%s\" (целевой блок %u): %m" -#: storage/sync/sync.c:400 +#: storage/sync/sync.c:401 #, c-format msgid "could not fsync file \"%s\" but retrying: %m" msgstr "" @@ -21850,8 +22400,8 @@ msgstr "неверный размер аргумента (%d) в сообщен msgid "fastpath function call: \"%s\" (OID %u)" msgstr "вызов функции fastpath: \"%s\" (OID %u)" -#: tcop/fastpath.c:389 tcop/postgres.c:1288 tcop/postgres.c:1551 -#: tcop/postgres.c:1918 tcop/postgres.c:2139 +#: tcop/fastpath.c:389 tcop/postgres.c:1323 tcop/postgres.c:1581 +#: tcop/postgres.c:2013 tcop/postgres.c:2250 #, c-format msgid "duration: %s ms" msgstr "продолжительность: %s мс" @@ -21880,60 +22430,60 @@ msgstr "" msgid "incorrect binary data format in function argument %d" msgstr "неправильный формат двоичных данных в аргументе функции %d" -#: tcop/postgres.c:359 tcop/postgres.c:395 tcop/postgres.c:422 +#: tcop/postgres.c:355 tcop/postgres.c:391 tcop/postgres.c:418 #, c-format msgid "unexpected EOF on client connection" msgstr "неожиданный обрыв соединения с клиентом" -#: tcop/postgres.c:445 tcop/postgres.c:457 tcop/postgres.c:468 -#: tcop/postgres.c:480 tcop/postgres.c:4471 +#: tcop/postgres.c:441 tcop/postgres.c:453 tcop/postgres.c:464 +#: tcop/postgres.c:476 tcop/postgres.c:4553 #, c-format msgid "invalid frontend message type %d" msgstr "неправильный тип клиентского сообщения %d" -#: tcop/postgres.c:1043 +#: tcop/postgres.c:1042 #, c-format msgid "statement: %s" msgstr "оператор: %s" -#: tcop/postgres.c:1293 +#: tcop/postgres.c:1328 #, c-format msgid "duration: %s ms statement: %s" msgstr "продолжительность: %s мс, оператор: %s" -#: tcop/postgres.c:1343 +#: tcop/postgres.c:1377 #, c-format msgid "parse %s: %s" msgstr "разбор %s: %s" -#: tcop/postgres.c:1400 +#: tcop/postgres.c:1434 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "в подготовленный оператор нельзя вставить несколько команд" -#: tcop/postgres.c:1556 +#: tcop/postgres.c:1586 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "продолжительность: %s мс, разбор %s: %s" -#: tcop/postgres.c:1601 +#: tcop/postgres.c:1633 #, c-format msgid "bind %s to %s" msgstr "привязка %s к %s" # [SM]: TO REVIEW -#: tcop/postgres.c:1620 tcop/postgres.c:2431 +#: tcop/postgres.c:1652 tcop/postgres.c:2516 #, c-format msgid "unnamed prepared statement does not exist" msgstr "безымянный подготовленный оператор не существует" -#: tcop/postgres.c:1661 +#: tcop/postgres.c:1693 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "" "неверное число форматов параметров в сообщении Bind (%d, а параметров %d)" -#: tcop/postgres.c:1667 +#: tcop/postgres.c:1699 #, c-format msgid "" "bind message supplies %d parameters, but prepared statement \"%s\" requires " @@ -21942,88 +22492,88 @@ msgstr "" "в сообщении Bind передано неверное число параметров (%d, а подготовленный " "оператор \"%s\" требует %d)" -#: tcop/postgres.c:1827 +#: tcop/postgres.c:1897 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "неверный формат двоичных данных в параметре Bind %d" -#: tcop/postgres.c:1923 +#: tcop/postgres.c:2018 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "продолжительность: %s мс, сообщение Bind %s%s%s: %s" -#: tcop/postgres.c:1971 tcop/postgres.c:2515 +#: tcop/postgres.c:2068 tcop/postgres.c:2600 #, c-format msgid "portal \"%s\" does not exist" msgstr "портал \"%s\" не существует" -#: tcop/postgres.c:2056 +#: tcop/postgres.c:2153 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2058 tcop/postgres.c:2147 +#: tcop/postgres.c:2155 tcop/postgres.c:2258 msgid "execute fetch from" msgstr "выборка из" -#: tcop/postgres.c:2059 tcop/postgres.c:2148 +#: tcop/postgres.c:2156 tcop/postgres.c:2259 msgid "execute" msgstr "выполнение" -#: tcop/postgres.c:2144 +#: tcop/postgres.c:2255 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "продолжительность: %s мс %s %s%s%s: %s" -#: tcop/postgres.c:2272 +#: tcop/postgres.c:2401 #, c-format msgid "prepare: %s" msgstr "подготовка: %s" -#: tcop/postgres.c:2337 +#: tcop/postgres.c:2426 #, c-format msgid "parameters: %s" msgstr "параметры: %s" -#: tcop/postgres.c:2356 +#: tcop/postgres.c:2441 #, c-format msgid "abort reason: recovery conflict" msgstr "причина прерывания: конфликт при восстановлении" -#: tcop/postgres.c:2372 +#: tcop/postgres.c:2457 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "Пользователь удерживал фиксатор разделяемого буфера слишком долго." -#: tcop/postgres.c:2375 +#: tcop/postgres.c:2460 #, c-format msgid "User was holding a relation lock for too long." msgstr "Пользователь удерживал блокировку таблицы слишком долго." -#: tcop/postgres.c:2378 +#: tcop/postgres.c:2463 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "" "Пользователь использовал табличное пространство, которое должно быть удалено." -#: tcop/postgres.c:2381 +#: tcop/postgres.c:2466 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "" "Запросу пользователя нужно было видеть версии строк, которые должны быть " "удалены." -#: tcop/postgres.c:2387 +#: tcop/postgres.c:2472 #, c-format msgid "User was connected to a database that must be dropped." msgstr "Пользователь был подключён к базе данных, которая должна быть удалена." -#: tcop/postgres.c:2711 +#: tcop/postgres.c:2796 #, c-format msgid "terminating connection because of crash of another server process" msgstr "закрытие подключения из-за краха другого серверного процесса" -#: tcop/postgres.c:2712 +#: tcop/postgres.c:2797 #, c-format msgid "" "The postmaster has commanded this server process to roll back the current " @@ -22034,7 +22584,7 @@ msgstr "" "транзакцию и завершиться, так как другой серверный процесс завершился " "аварийно и возможно разрушил разделяемую память." -#: tcop/postgres.c:2716 tcop/postgres.c:3040 +#: tcop/postgres.c:2801 tcop/postgres.c:3119 #, c-format msgid "" "In a moment you should be able to reconnect to the database and repeat your " @@ -22043,12 +22593,12 @@ msgstr "" "Вы сможете переподключиться к базе данных и повторить вашу команду сию " "минуту." -#: tcop/postgres.c:2798 +#: tcop/postgres.c:2883 #, c-format msgid "floating-point exception" msgstr "исключение в операции с плавающей точкой" -#: tcop/postgres.c:2799 +#: tcop/postgres.c:2884 #, c-format msgid "" "An invalid floating-point operation was signaled. This probably means an out-" @@ -22058,72 +22608,72 @@ msgstr "" "оказался вне допустимых рамок или произошла ошибка вычисления, например, " "деление на ноль." -#: tcop/postgres.c:2970 +#: tcop/postgres.c:3049 #, c-format msgid "canceling authentication due to timeout" msgstr "отмена проверки подлинности из-за тайм-аута" -#: tcop/postgres.c:2974 +#: tcop/postgres.c:3053 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "прекращение процесса автоочистки по команде администратора" -#: tcop/postgres.c:2978 +#: tcop/postgres.c:3057 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "завершение обработчика логической репликации по команде администратора" -#: tcop/postgres.c:2982 +#: tcop/postgres.c:3061 #, c-format msgid "logical replication launcher shutting down" msgstr "процесс запуска логической репликации остановлен" -#: tcop/postgres.c:2995 tcop/postgres.c:3005 tcop/postgres.c:3038 +#: tcop/postgres.c:3074 tcop/postgres.c:3084 tcop/postgres.c:3117 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "закрытие подключения из-за конфликта с процессом восстановления" -#: tcop/postgres.c:3011 +#: tcop/postgres.c:3090 #, c-format msgid "terminating connection due to administrator command" msgstr "закрытие подключения по команде администратора" -#: tcop/postgres.c:3021 +#: tcop/postgres.c:3100 #, c-format msgid "connection to client lost" msgstr "подключение к клиенту потеряно" -#: tcop/postgres.c:3087 +#: tcop/postgres.c:3166 #, c-format msgid "canceling statement due to lock timeout" msgstr "выполнение оператора отменено из-за тайм-аута блокировки" -#: tcop/postgres.c:3094 +#: tcop/postgres.c:3173 #, c-format msgid "canceling statement due to statement timeout" msgstr "выполнение оператора отменено из-за тайм-аута" -#: tcop/postgres.c:3101 +#: tcop/postgres.c:3180 #, c-format msgid "canceling autovacuum task" msgstr "отмена задачи автоочистки" -#: tcop/postgres.c:3124 +#: tcop/postgres.c:3203 #, c-format msgid "canceling statement due to user request" msgstr "выполнение оператора отменено по запросу пользователя" -#: tcop/postgres.c:3134 +#: tcop/postgres.c:3213 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "закрытие подключения из-за тайм-аута простоя в транзакции" -#: tcop/postgres.c:3248 +#: tcop/postgres.c:3330 #, c-format msgid "stack depth limit exceeded" msgstr "превышен предел глубины стека" -#: tcop/postgres.c:3249 +#: tcop/postgres.c:3331 #, c-format msgid "" "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), " @@ -22133,12 +22683,12 @@ msgstr "" "КБ), предварительно убедившись, что ОС предоставляет достаточный размер " "стека." -#: tcop/postgres.c:3312 +#: tcop/postgres.c:3394 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "Значение \"max_stack_depth\" не должно превышать %ld КБ." -#: tcop/postgres.c:3314 +#: tcop/postgres.c:3396 #, c-format msgid "" "Increase the platform's stack depth limit via \"ulimit -s\" or local " @@ -22147,48 +22697,48 @@ msgstr "" "Увеличьте предел глубины стека в системе с помощью команды \"ulimit -s\" или " "эквивалента в вашей ОС." -#: tcop/postgres.c:3674 +#: tcop/postgres.c:3756 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "неверный аргумент командной строки для серверного процесса: %s" -#: tcop/postgres.c:3675 tcop/postgres.c:3681 +#: tcop/postgres.c:3757 tcop/postgres.c:3763 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Для дополнительной информации попробуйте \"%s --help\"." -#: tcop/postgres.c:3679 +#: tcop/postgres.c:3761 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: неверный аргумент командной строки: %s" -#: tcop/postgres.c:3741 +#: tcop/postgres.c:3823 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: не указаны ни база данных, ни пользователь" -#: tcop/postgres.c:4379 +#: tcop/postgres.c:4461 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "неверный подтип сообщения CLOSE: %d" -#: tcop/postgres.c:4414 +#: tcop/postgres.c:4496 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "неверный подтип сообщения DESCRIBE: %d" -#: tcop/postgres.c:4492 +#: tcop/postgres.c:4574 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "вызовы функции fastpath не поддерживаются для реплицирующих соединений" -#: tcop/postgres.c:4496 +#: tcop/postgres.c:4578 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "" "протокол расширенных запросов не поддерживается для реплицирующих соединений" -#: tcop/postgres.c:4673 +#: tcop/postgres.c:4755 #, c-format msgid "" "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s" @@ -22197,53 +22747,53 @@ msgstr "" "отключение: время сеанса: %d:%02d:%02d.%03d пользователь=%s база данных=%s " "компьютер=%s%s%s" -#: tcop/pquery.c:642 +#: tcop/pquery.c:629 #, c-format msgid "bind message has %d result formats but query has %d columns" msgstr "" "число форматов результатов в сообщении Bind (%d) не равно числу столбцов в " "запросе (%d)" -#: tcop/pquery.c:949 +#: tcop/pquery.c:932 #, c-format msgid "cursor can only scan forward" msgstr "курсор может сканировать только вперёд" -#: tcop/pquery.c:950 +#: tcop/pquery.c:933 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "Добавьте в его объявление SCROLL, чтобы он мог перемещаться назад." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:245 +#: tcop/utility.c:413 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "в транзакции в режиме \"только чтение\" нельзя выполнить %s" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:263 +#: tcop/utility.c:431 #, c-format msgid "cannot execute %s during a parallel operation" msgstr "выполнить %s во время параллельных операций нельзя" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:282 +#: tcop/utility.c:450 #, c-format msgid "cannot execute %s during recovery" msgstr "выполнить %s во время восстановления нельзя" #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:300 +#: tcop/utility.c:468 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "в рамках операции с ограничениями по безопасности нельзя выполнить %s" -#: tcop/utility.c:760 +#: tcop/utility.c:912 #, c-format msgid "must be superuser to do CHECKPOINT" msgstr "для выполнения CHECKPOINT нужно быть суперпользователем" -#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:624 +#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:620 #, c-format msgid "multiple DictFile parameters" msgstr "повторяющийся параметр DictFile" @@ -22263,7 +22813,7 @@ msgstr "нераспознанный параметр ispell: \"%s\"" msgid "missing AffFile parameter" msgstr "отсутствует параметр AffFile" -#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:648 +#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:644 #, c-format msgid "missing DictFile parameter" msgstr "отсутствует параметр DictFile" @@ -22335,34 +22885,34 @@ msgstr "Образец в тезаурусе содержит стоп-слов msgid "Use \"?\" to represent a stop word within a sample phrase." msgstr "Для представления стоп-слова внутри образца используйте \"?\"." -#: tsearch/dict_thesaurus.c:576 +#: tsearch/dict_thesaurus.c:572 #, c-format msgid "thesaurus substitute word \"%s\" is a stop word (rule %d)" msgstr "Подстановка в тезаурусе содержит стоп-слово \"%s\" (правило %d)" -#: tsearch/dict_thesaurus.c:583 +#: tsearch/dict_thesaurus.c:579 #, c-format msgid "" "thesaurus substitute word \"%s\" isn't recognized by subdictionary (rule %d)" msgstr "" "Слова-подстановки в тезаурусе \"%s\" нет во внутреннем словаре (правило %d)" -#: tsearch/dict_thesaurus.c:595 +#: tsearch/dict_thesaurus.c:591 #, c-format msgid "thesaurus substitute phrase is empty (rule %d)" msgstr "Фраза подстановки в тезаурусе не определена (правило %d)" -#: tsearch/dict_thesaurus.c:633 +#: tsearch/dict_thesaurus.c:629 #, c-format msgid "multiple Dictionary parameters" msgstr "повторяющийся параметр Dictionary" -#: tsearch/dict_thesaurus.c:640 +#: tsearch/dict_thesaurus.c:636 #, c-format msgid "unrecognized Thesaurus parameter: \"%s\"" msgstr "нераспознанный параметр тезауруса: \"%s\"" -#: tsearch/dict_thesaurus.c:652 +#: tsearch/dict_thesaurus.c:648 #, c-format msgid "missing Dictionary parameter" msgstr "отсутствует параметр Dictionary" @@ -22399,7 +22949,7 @@ msgid "invalid regular expression: %s" msgstr "неверное регулярное выражение: %s" #: tsearch/spell.c:956 tsearch/spell.c:973 tsearch/spell.c:990 -#: tsearch/spell.c:1007 tsearch/spell.c:1072 gram.y:15735 gram.y:15752 +#: tsearch/spell.c:1007 tsearch/spell.c:1072 gram.y:15994 gram.y:16011 #, c-format msgid "syntax error" msgstr "ошибка синтаксиса" @@ -22439,29 +22989,29 @@ msgstr "количество псевдонимов превышает зада msgid "affix file contains both old-style and new-style commands" msgstr "файл аффиксов содержит команды и в старом, и в новом стиле" -#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:271 utils/adt/tsvector_op.c:1132 +#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "строка слишком длинна для tsvector (%d Б, при максимуме %d)" -#: tsearch/ts_locale.c:185 +#: tsearch/ts_locale.c:212 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "строка %d файла конфигурации \"%s\": \"%s\"" -#: tsearch/ts_locale.c:302 +#: tsearch/ts_locale.c:329 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "преобразовать wchar_t в кодировку сервера не удалось: %m" -#: tsearch/ts_parse.c:390 tsearch/ts_parse.c:397 tsearch/ts_parse.c:566 -#: tsearch/ts_parse.c:573 +#: tsearch/ts_parse.c:386 tsearch/ts_parse.c:393 tsearch/ts_parse.c:562 +#: tsearch/ts_parse.c:569 #, c-format msgid "word is too long to be indexed" msgstr "слишком длинное слово для индексации" -#: tsearch/ts_parse.c:391 tsearch/ts_parse.c:398 tsearch/ts_parse.c:567 -#: tsearch/ts_parse.c:574 +#: tsearch/ts_parse.c:387 tsearch/ts_parse.c:394 tsearch/ts_parse.c:563 +#: tsearch/ts_parse.c:570 #, c-format msgid "Words longer than %d characters are ignored." msgstr "Слова длиннее %d символов игнорируются." @@ -22476,32 +23026,32 @@ msgstr "неверное имя файла конфигурации тексто msgid "could not open stop-word file \"%s\": %m" msgstr "не удалось открыть файл стоп-слов \"%s\": %m" -#: tsearch/wparser.c:322 tsearch/wparser.c:410 tsearch/wparser.c:487 +#: tsearch/wparser.c:313 tsearch/wparser.c:401 tsearch/wparser.c:478 #, c-format msgid "text search parser does not support headline creation" msgstr "анализатор текстового поиска не поддерживает создание выдержек" -#: tsearch/wparser_def.c:2486 +#: tsearch/wparser_def.c:2585 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "нераспознанный параметр функции выдержки: \"%s\"" -#: tsearch/wparser_def.c:2495 +#: tsearch/wparser_def.c:2604 #, c-format msgid "MinWords should be less than MaxWords" msgstr "Значение MinWords должно быть меньше MaxWords" -#: tsearch/wparser_def.c:2499 +#: tsearch/wparser_def.c:2608 #, c-format msgid "MinWords should be positive" msgstr "Значение MinWords должно быть положительным" -#: tsearch/wparser_def.c:2503 +#: tsearch/wparser_def.c:2612 #, c-format msgid "ShortWord should be >= 0" msgstr "Значение ShortWord должно быть >= 0" -#: tsearch/wparser_def.c:2507 +#: tsearch/wparser_def.c:2616 #, c-format msgid "MaxFragments should be >= 0" msgstr "Значение MaxFragments должно быть >= 0" @@ -22516,119 +23066,119 @@ msgstr "слишком длинный идентификатор" msgid "Identifier must be less than %d characters." msgstr "Идентификатор должен быть короче %d байт." -#: utils/adt/acl.c:258 +#: utils/adt/acl.c:255 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "нераспознанное ключевое слово: \"%s\"" -#: utils/adt/acl.c:259 +#: utils/adt/acl.c:256 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "Ключевым словом ACL должно быть \"group\" или \"user\"." -#: utils/adt/acl.c:264 +#: utils/adt/acl.c:261 #, c-format msgid "missing name" msgstr "отсутствует имя" -#: utils/adt/acl.c:265 +#: utils/adt/acl.c:262 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "За ключевыми словами \"group\" или \"user\" должно следовать имя." -#: utils/adt/acl.c:271 +#: utils/adt/acl.c:268 #, c-format msgid "missing \"=\" sign" msgstr "отсутствует знак \"=\"" -#: utils/adt/acl.c:324 +#: utils/adt/acl.c:321 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "неверный символ режима: должен быть один из \"%s\"" -#: utils/adt/acl.c:346 +#: utils/adt/acl.c:343 #, c-format msgid "a name must follow the \"/\" sign" msgstr "за знаком \"/\" должно следовать имя" -#: utils/adt/acl.c:354 +#: utils/adt/acl.c:351 #, c-format msgid "defaulting grantor to user ID %u" msgstr "назначившим права считается пользователь с ID %u" -#: utils/adt/acl.c:545 +#: utils/adt/acl.c:537 #, c-format msgid "ACL array contains wrong data type" msgstr "Массив ACL содержит неверный тип данных" -#: utils/adt/acl.c:549 +#: utils/adt/acl.c:541 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "Массивы ACL должны быть одномерными" -#: utils/adt/acl.c:553 +#: utils/adt/acl.c:545 #, c-format msgid "ACL arrays must not contain null values" msgstr "Массивы ACL не должны содержать значения null" -#: utils/adt/acl.c:577 +#: utils/adt/acl.c:569 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "лишний мусор в конце спецификации ACL" -#: utils/adt/acl.c:1212 +#: utils/adt/acl.c:1204 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "привилегию назначения прав нельзя вернуть тому, кто назначил её вам" -#: utils/adt/acl.c:1273 +#: utils/adt/acl.c:1265 #, c-format msgid "dependent privileges exist" msgstr "существуют зависимые права" -#: utils/adt/acl.c:1274 +#: utils/adt/acl.c:1266 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Используйте CASCADE, чтобы отозвать и их." -#: utils/adt/acl.c:1536 +#: utils/adt/acl.c:1520 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert больше не поддерживается" -#: utils/adt/acl.c:1546 +#: utils/adt/acl.c:1530 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove больше не поддерживается" -#: utils/adt/acl.c:1632 utils/adt/acl.c:1686 +#: utils/adt/acl.c:1616 utils/adt/acl.c:1670 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "нераспознанный тип прав: \"%s\"" -#: utils/adt/acl.c:3486 utils/adt/regproc.c:102 utils/adt/regproc.c:277 +#: utils/adt/acl.c:3470 utils/adt/regproc.c:103 utils/adt/regproc.c:278 #, c-format msgid "function \"%s\" does not exist" msgstr "функция \"%s\" не существует" -#: utils/adt/acl.c:4958 +#: utils/adt/acl.c:4946 #, c-format msgid "must be member of role \"%s\"" msgstr "нужно быть членом роли \"%s\"" -#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:932 -#: utils/adt/arrayfuncs.c:1532 utils/adt/arrayfuncs.c:3235 -#: utils/adt/arrayfuncs.c:3375 utils/adt/arrayfuncs.c:5909 -#: utils/adt/arrayfuncs.c:6250 utils/adt/arrayutils.c:93 +#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:933 +#: utils/adt/arrayfuncs.c:1533 utils/adt/arrayfuncs.c:3236 +#: utils/adt/arrayfuncs.c:3376 utils/adt/arrayfuncs.c:5911 +#: utils/adt/arrayfuncs.c:6252 utils/adt/arrayutils.c:93 #: utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 #, c-format msgid "array size exceeds the maximum allowed (%d)" msgstr "размер массива превышает предел (%d)" #: utils/adt/array_userfuncs.c:80 utils/adt/array_userfuncs.c:466 -#: utils/adt/array_userfuncs.c:546 utils/adt/json.c:1829 utils/adt/json.c:1924 -#: utils/adt/json.c:1962 utils/adt/jsonb.c:1094 utils/adt/jsonb.c:1123 -#: utils/adt/jsonb.c:1517 utils/adt/jsonb.c:1681 utils/adt/jsonb.c:1691 +#: utils/adt/array_userfuncs.c:546 utils/adt/json.c:645 utils/adt/json.c:740 +#: utils/adt/json.c:778 utils/adt/jsonb.c:1115 utils/adt/jsonb.c:1144 +#: utils/adt/jsonb.c:1538 utils/adt/jsonb.c:1702 utils/adt/jsonb.c:1712 #, c-format msgid "could not determine input data type" msgstr "не удалось определить тип входных данных" @@ -22639,15 +23189,16 @@ msgid "input data type is not an array" msgstr "тип входных данных не является массивом" #: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 -#: utils/adt/arrayfuncs.c:1335 utils/adt/float.c:1213 utils/adt/float.c:1287 -#: utils/adt/float.c:3855 utils/adt/float.c:3869 utils/adt/int.c:759 +#: utils/adt/arrayfuncs.c:1336 utils/adt/float.c:1243 utils/adt/float.c:1317 +#: utils/adt/float.c:3960 utils/adt/float.c:3974 utils/adt/int.c:759 #: utils/adt/int.c:781 utils/adt/int.c:795 utils/adt/int.c:809 #: utils/adt/int.c:840 utils/adt/int.c:861 utils/adt/int.c:978 #: utils/adt/int.c:992 utils/adt/int.c:1006 utils/adt/int.c:1039 #: utils/adt/int.c:1053 utils/adt/int.c:1067 utils/adt/int.c:1098 -#: utils/adt/int.c:1180 utils/adt/int8.c:1167 utils/adt/numeric.c:1565 -#: utils/adt/numeric.c:3240 utils/adt/varbit.c:1188 utils/adt/varbit.c:1576 -#: utils/adt/varlena.c:1075 utils/adt/varlena.c:3345 +#: utils/adt/int.c:1180 utils/adt/int.c:1244 utils/adt/int.c:1312 +#: utils/adt/int.c:1318 utils/adt/int8.c:1292 utils/adt/numeric.c:1559 +#: utils/adt/numeric.c:3435 utils/adt/varbit.c:1194 utils/adt/varbit.c:1582 +#: utils/adt/varlena.c:1097 utils/adt/varlena.c:3395 #, c-format msgid "integer out of range" msgstr "целое вне диапазона" @@ -22697,164 +23248,164 @@ msgstr "поиск элементов в многомерных массивах msgid "initial position must not be null" msgstr "начальная позиция не может быть NULL" -#: utils/adt/arrayfuncs.c:269 utils/adt/arrayfuncs.c:283 -#: utils/adt/arrayfuncs.c:294 utils/adt/arrayfuncs.c:316 -#: utils/adt/arrayfuncs.c:331 utils/adt/arrayfuncs.c:345 -#: utils/adt/arrayfuncs.c:351 utils/adt/arrayfuncs.c:358 -#: utils/adt/arrayfuncs.c:489 utils/adt/arrayfuncs.c:505 -#: utils/adt/arrayfuncs.c:516 utils/adt/arrayfuncs.c:531 -#: utils/adt/arrayfuncs.c:552 utils/adt/arrayfuncs.c:582 -#: utils/adt/arrayfuncs.c:589 utils/adt/arrayfuncs.c:597 -#: utils/adt/arrayfuncs.c:631 utils/adt/arrayfuncs.c:654 -#: utils/adt/arrayfuncs.c:674 utils/adt/arrayfuncs.c:786 -#: utils/adt/arrayfuncs.c:795 utils/adt/arrayfuncs.c:825 -#: utils/adt/arrayfuncs.c:840 utils/adt/arrayfuncs.c:893 +#: utils/adt/arrayfuncs.c:270 utils/adt/arrayfuncs.c:284 +#: utils/adt/arrayfuncs.c:295 utils/adt/arrayfuncs.c:317 +#: utils/adt/arrayfuncs.c:332 utils/adt/arrayfuncs.c:346 +#: utils/adt/arrayfuncs.c:352 utils/adt/arrayfuncs.c:359 +#: utils/adt/arrayfuncs.c:490 utils/adt/arrayfuncs.c:506 +#: utils/adt/arrayfuncs.c:517 utils/adt/arrayfuncs.c:532 +#: utils/adt/arrayfuncs.c:553 utils/adt/arrayfuncs.c:583 +#: utils/adt/arrayfuncs.c:590 utils/adt/arrayfuncs.c:598 +#: utils/adt/arrayfuncs.c:632 utils/adt/arrayfuncs.c:655 +#: utils/adt/arrayfuncs.c:675 utils/adt/arrayfuncs.c:787 +#: utils/adt/arrayfuncs.c:796 utils/adt/arrayfuncs.c:826 +#: utils/adt/arrayfuncs.c:841 utils/adt/arrayfuncs.c:894 #, c-format msgid "malformed array literal: \"%s\"" msgstr "ошибочный литерал массива: \"%s\"" -#: utils/adt/arrayfuncs.c:270 +#: utils/adt/arrayfuncs.c:271 #, c-format msgid "\"[\" must introduce explicitly-specified array dimensions." msgstr "За \"[\" должны следовать явно задаваемые размерности массива." -#: utils/adt/arrayfuncs.c:284 +#: utils/adt/arrayfuncs.c:285 #, c-format msgid "Missing array dimension value." msgstr "Отсутствует значение размерности массива." -#: utils/adt/arrayfuncs.c:295 utils/adt/arrayfuncs.c:332 +#: utils/adt/arrayfuncs.c:296 utils/adt/arrayfuncs.c:333 #, c-format msgid "Missing \"%s\" after array dimensions." msgstr "После размерностей массива отсутствует \"%s\"." -#: utils/adt/arrayfuncs.c:304 utils/adt/arrayfuncs.c:2883 -#: utils/adt/arrayfuncs.c:2915 utils/adt/arrayfuncs.c:2930 +#: utils/adt/arrayfuncs.c:305 utils/adt/arrayfuncs.c:2884 +#: utils/adt/arrayfuncs.c:2916 utils/adt/arrayfuncs.c:2931 #, c-format msgid "upper bound cannot be less than lower bound" msgstr "верхняя граница не может быть меньше нижней" -#: utils/adt/arrayfuncs.c:317 +#: utils/adt/arrayfuncs.c:318 #, c-format msgid "Array value must start with \"{\" or dimension information." msgstr "Значение массива должно начинаться с \"{\" или указания размерности." -#: utils/adt/arrayfuncs.c:346 +#: utils/adt/arrayfuncs.c:347 #, c-format msgid "Array contents must start with \"{\"." msgstr "Содержимое массива должно начинаться с \"{\"." -#: utils/adt/arrayfuncs.c:352 utils/adt/arrayfuncs.c:359 +#: utils/adt/arrayfuncs.c:353 utils/adt/arrayfuncs.c:360 #, c-format msgid "Specified array dimensions do not match array contents." msgstr "Указанные размерности массива не соответствуют его содержимому." -#: utils/adt/arrayfuncs.c:490 utils/adt/arrayfuncs.c:517 +#: utils/adt/arrayfuncs.c:491 utils/adt/arrayfuncs.c:518 #: utils/adt/rangetypes.c:2181 utils/adt/rangetypes.c:2189 #: utils/adt/rowtypes.c:210 utils/adt/rowtypes.c:218 #, c-format msgid "Unexpected end of input." msgstr "Неожиданный конец ввода." -#: utils/adt/arrayfuncs.c:506 utils/adt/arrayfuncs.c:553 -#: utils/adt/arrayfuncs.c:583 utils/adt/arrayfuncs.c:632 +#: utils/adt/arrayfuncs.c:507 utils/adt/arrayfuncs.c:554 +#: utils/adt/arrayfuncs.c:584 utils/adt/arrayfuncs.c:633 #, c-format msgid "Unexpected \"%c\" character." msgstr "Неожиданный знак \"%c\"." -#: utils/adt/arrayfuncs.c:532 utils/adt/arrayfuncs.c:655 +#: utils/adt/arrayfuncs.c:533 utils/adt/arrayfuncs.c:656 #, c-format msgid "Unexpected array element." msgstr "Неожиданный элемент массива." -#: utils/adt/arrayfuncs.c:590 +#: utils/adt/arrayfuncs.c:591 #, c-format msgid "Unmatched \"%c\" character." msgstr "Непарный знак \"%c\"." -#: utils/adt/arrayfuncs.c:598 utils/adt/jsonfuncs.c:2397 +#: utils/adt/arrayfuncs.c:599 utils/adt/jsonfuncs.c:2452 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "" "Для многомерных массивов должны задаваться вложенные массивы с " "соответствующими размерностями." -#: utils/adt/arrayfuncs.c:675 +#: utils/adt/arrayfuncs.c:676 #, c-format msgid "Junk after closing right brace." msgstr "Мусор после закрывающей фигурной скобки." -#: utils/adt/arrayfuncs.c:1297 utils/adt/arrayfuncs.c:3343 -#: utils/adt/arrayfuncs.c:5815 +#: utils/adt/arrayfuncs.c:1298 utils/adt/arrayfuncs.c:3344 +#: utils/adt/arrayfuncs.c:5817 #, c-format msgid "invalid number of dimensions: %d" msgstr "неверное число размерностей: %d" -#: utils/adt/arrayfuncs.c:1308 +#: utils/adt/arrayfuncs.c:1309 #, c-format msgid "invalid array flags" msgstr "неверные флаги массива" -#: utils/adt/arrayfuncs.c:1316 +#: utils/adt/arrayfuncs.c:1317 #, c-format msgid "wrong element type" msgstr "неверный тип элемента" -#: utils/adt/arrayfuncs.c:1366 utils/adt/rangetypes.c:335 -#: utils/cache/lsyscache.c:2725 +#: utils/adt/arrayfuncs.c:1367 utils/adt/rangetypes.c:335 +#: utils/cache/lsyscache.c:2835 #, c-format msgid "no binary input function available for type %s" msgstr "для типа %s нет функции ввода двоичных данных" -#: utils/adt/arrayfuncs.c:1506 +#: utils/adt/arrayfuncs.c:1507 #, c-format msgid "improper binary format in array element %d" msgstr "неподходящий двоичный формат в элементе массива %d" -#: utils/adt/arrayfuncs.c:1587 utils/adt/rangetypes.c:340 -#: utils/cache/lsyscache.c:2758 +#: utils/adt/arrayfuncs.c:1588 utils/adt/rangetypes.c:340 +#: utils/cache/lsyscache.c:2868 #, c-format msgid "no binary output function available for type %s" msgstr "для типа %s нет функции вывода двоичных данных" -#: utils/adt/arrayfuncs.c:2065 +#: utils/adt/arrayfuncs.c:2066 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "разрезание массивов постоянной длины не поддерживается" -#: utils/adt/arrayfuncs.c:2243 utils/adt/arrayfuncs.c:2265 -#: utils/adt/arrayfuncs.c:2314 utils/adt/arrayfuncs.c:2550 -#: utils/adt/arrayfuncs.c:2861 utils/adt/arrayfuncs.c:5801 -#: utils/adt/arrayfuncs.c:5827 utils/adt/arrayfuncs.c:5838 -#: utils/adt/json.c:2325 utils/adt/json.c:2400 utils/adt/jsonb.c:1295 -#: utils/adt/jsonb.c:1381 utils/adt/jsonfuncs.c:4301 utils/adt/jsonfuncs.c:4452 -#: utils/adt/jsonfuncs.c:4497 utils/adt/jsonfuncs.c:4544 +#: utils/adt/arrayfuncs.c:2244 utils/adt/arrayfuncs.c:2266 +#: utils/adt/arrayfuncs.c:2315 utils/adt/arrayfuncs.c:2551 +#: utils/adt/arrayfuncs.c:2862 utils/adt/arrayfuncs.c:5803 +#: utils/adt/arrayfuncs.c:5829 utils/adt/arrayfuncs.c:5840 +#: utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 +#: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4340 utils/adt/jsonfuncs.c:4490 +#: utils/adt/jsonfuncs.c:4602 utils/adt/jsonfuncs.c:4648 #, c-format msgid "wrong number of array subscripts" msgstr "неверное число индексов массива" -#: utils/adt/arrayfuncs.c:2248 utils/adt/arrayfuncs.c:2356 -#: utils/adt/arrayfuncs.c:2614 utils/adt/arrayfuncs.c:2920 +#: utils/adt/arrayfuncs.c:2249 utils/adt/arrayfuncs.c:2357 +#: utils/adt/arrayfuncs.c:2615 utils/adt/arrayfuncs.c:2921 #, c-format msgid "array subscript out of range" msgstr "индекс массива вне диапазона" -#: utils/adt/arrayfuncs.c:2253 +#: utils/adt/arrayfuncs.c:2254 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "нельзя присвоить значение null элементу массива фиксированной длины" -#: utils/adt/arrayfuncs.c:2808 +#: utils/adt/arrayfuncs.c:2809 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "изменения в срезах массивов фиксированной длины не поддерживаются" -#: utils/adt/arrayfuncs.c:2839 +#: utils/adt/arrayfuncs.c:2840 #, c-format msgid "array slice subscript must provide both boundaries" msgstr "в указании среза массива должны быть заданы обе границы" -#: utils/adt/arrayfuncs.c:2840 +#: utils/adt/arrayfuncs.c:2841 #, c-format msgid "" "When assigning to a slice of an empty array value, slice boundaries must be " @@ -22863,84 +23414,84 @@ msgstr "" "При присвоении значений срезу в пустом массиве, должны полностью задаваться " "обе границы." -#: utils/adt/arrayfuncs.c:2851 utils/adt/arrayfuncs.c:2946 +#: utils/adt/arrayfuncs.c:2852 utils/adt/arrayfuncs.c:2947 #, c-format msgid "source array too small" msgstr "исходный массив слишком мал" -#: utils/adt/arrayfuncs.c:3499 +#: utils/adt/arrayfuncs.c:3500 #, c-format msgid "null array element not allowed in this context" msgstr "элемент массива null недопустим в данном контексте" -#: utils/adt/arrayfuncs.c:3601 utils/adt/arrayfuncs.c:3772 -#: utils/adt/arrayfuncs.c:4123 +#: utils/adt/arrayfuncs.c:3602 utils/adt/arrayfuncs.c:3773 +#: utils/adt/arrayfuncs.c:4129 #, c-format msgid "cannot compare arrays of different element types" msgstr "нельзя сравнивать массивы с элементами разных типов" -#: utils/adt/arrayfuncs.c:3948 utils/adt/rangetypes.c:1254 +#: utils/adt/arrayfuncs.c:3951 utils/adt/rangetypes.c:1254 #: utils/adt/rangetypes.c:1318 #, c-format msgid "could not identify a hash function for type %s" msgstr "не удалось найти функцию хеширования для типа %s" -#: utils/adt/arrayfuncs.c:4040 +#: utils/adt/arrayfuncs.c:4044 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "не удалось найти функцию расширенного хеширования для типа %s" -#: utils/adt/arrayfuncs.c:5215 +#: utils/adt/arrayfuncs.c:5221 #, c-format msgid "data type %s is not an array type" msgstr "тип данных %s не является типом массива" -#: utils/adt/arrayfuncs.c:5270 +#: utils/adt/arrayfuncs.c:5276 #, c-format msgid "cannot accumulate null arrays" msgstr "аккумулировать NULL-массивы нельзя" -#: utils/adt/arrayfuncs.c:5298 +#: utils/adt/arrayfuncs.c:5304 #, c-format msgid "cannot accumulate empty arrays" msgstr "аккумулировать пустые массивы нельзя" -#: utils/adt/arrayfuncs.c:5327 utils/adt/arrayfuncs.c:5333 +#: utils/adt/arrayfuncs.c:5331 utils/adt/arrayfuncs.c:5337 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "аккумулировать массивы различной размерности нельзя" -#: utils/adt/arrayfuncs.c:5699 utils/adt/arrayfuncs.c:5739 +#: utils/adt/arrayfuncs.c:5701 utils/adt/arrayfuncs.c:5741 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "массив размерностей или массив нижних границ не может быть null" -#: utils/adt/arrayfuncs.c:5802 utils/adt/arrayfuncs.c:5828 +#: utils/adt/arrayfuncs.c:5804 utils/adt/arrayfuncs.c:5830 #, c-format msgid "Dimension array must be one dimensional." msgstr "Массив размерностей должен быть одномерным." -#: utils/adt/arrayfuncs.c:5807 utils/adt/arrayfuncs.c:5833 +#: utils/adt/arrayfuncs.c:5809 utils/adt/arrayfuncs.c:5835 #, c-format msgid "dimension values cannot be null" msgstr "значения размерностей не могут быть null" -#: utils/adt/arrayfuncs.c:5839 +#: utils/adt/arrayfuncs.c:5841 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "Массив нижних границ и массив размерностей имеют разные размеры." -#: utils/adt/arrayfuncs.c:6115 +#: utils/adt/arrayfuncs.c:6117 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "удаление элементов из многомерных массивов не поддерживается" -#: utils/adt/arrayfuncs.c:6392 +#: utils/adt/arrayfuncs.c:6394 #, c-format msgid "thresholds must be one-dimensional array" msgstr "границы должны задаваться одномерным массивом" -#: utils/adt/arrayfuncs.c:6397 +#: utils/adt/arrayfuncs.c:6399 #, c-format msgid "thresholds array must not contain NULLs" msgstr "массив границ не должен содержать NULL" @@ -22966,32 +23517,32 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "преобразование кодировки из %s в ASCII не поддерживается" #. translator: first %s is inet or cidr -#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3773 -#: utils/adt/float.c:168 utils/adt/float.c:252 utils/adt/float.c:276 -#: utils/adt/float.c:390 utils/adt/float.c:474 utils/adt/float.c:501 +#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3757 +#: utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:295 +#: utils/adt/float.c:412 utils/adt/float.c:497 utils/adt/float.c:525 #: utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 #: utils/adt/geo_ops.c:274 utils/adt/geo_ops.c:316 utils/adt/geo_ops.c:326 #: utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1378 utils/adt/geo_ops.c:1413 -#: utils/adt/geo_ops.c:1421 utils/adt/geo_ops.c:3360 utils/adt/geo_ops.c:4526 -#: utils/adt/geo_ops.c:4541 utils/adt/geo_ops.c:4548 utils/adt/int8.c:128 +#: utils/adt/geo_ops.c:1421 utils/adt/geo_ops.c:3476 utils/adt/geo_ops.c:4645 +#: utils/adt/geo_ops.c:4660 utils/adt/geo_ops.c:4667 utils/adt/int8.c:126 #: utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 #: utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 -#: utils/adt/mac8.c:221 utils/adt/network.c:74 utils/adt/numeric.c:607 -#: utils/adt/numeric.c:634 utils/adt/numeric.c:5806 utils/adt/numeric.c:5830 -#: utils/adt/numeric.c:5854 utils/adt/numeric.c:6684 utils/adt/numeric.c:6710 -#: utils/adt/numutils.c:52 utils/adt/numutils.c:62 utils/adt/numutils.c:106 -#: utils/adt/numutils.c:182 utils/adt/numutils.c:258 utils/adt/oid.c:44 +#: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:601 +#: utils/adt/numeric.c:628 utils/adt/numeric.c:6001 utils/adt/numeric.c:6025 +#: utils/adt/numeric.c:6049 utils/adt/numeric.c:6882 utils/adt/numeric.c:6908 +#: utils/adt/numutils.c:116 utils/adt/numutils.c:126 utils/adt/numutils.c:170 +#: utils/adt/numutils.c:246 utils/adt/numutils.c:322 utils/adt/oid.c:44 #: utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 -#: utils/adt/pg_lsn.c:70 utils/adt/tid.c:73 utils/adt/tid.c:81 -#: utils/adt/tid.c:89 utils/adt/timestamp.c:479 utils/adt/txid.c:410 -#: utils/adt/uuid.c:136 +#: utils/adt/pg_lsn.c:73 utils/adt/tid.c:74 utils/adt/tid.c:82 +#: utils/adt/tid.c:90 utils/adt/timestamp.c:494 utils/adt/uuid.c:136 +#: utils/adt/xid8funcs.c:346 #, c-format msgid "invalid input syntax for type %s: \"%s\"" msgstr "неверный синтаксис для типа %s: \"%s\"" #: utils/adt/cash.c:215 utils/adt/cash.c:240 utils/adt/cash.c:250 -#: utils/adt/cash.c:290 utils/adt/int8.c:120 utils/adt/numutils.c:76 -#: utils/adt/numutils.c:83 utils/adt/numutils.c:176 utils/adt/numutils.c:252 +#: utils/adt/cash.c:290 utils/adt/int8.c:118 utils/adt/numutils.c:140 +#: utils/adt/numutils.c:147 utils/adt/numutils.c:240 utils/adt/numutils.c:316 #: utils/adt/oid.c:70 utils/adt/oid.c:109 #, c-format msgid "value \"%s\" is out of range for type %s" @@ -22999,12 +23550,12 @@ msgstr "значение \"%s\" вне диапазона для типа %s" #: utils/adt/cash.c:652 utils/adt/cash.c:702 utils/adt/cash.c:753 #: utils/adt/cash.c:802 utils/adt/cash.c:854 utils/adt/cash.c:904 -#: utils/adt/int.c:824 utils/adt/int.c:940 utils/adt/int.c:1020 -#: utils/adt/int.c:1082 utils/adt/int.c:1120 utils/adt/int.c:1148 -#: utils/adt/int8.c:595 utils/adt/int8.c:653 utils/adt/int8.c:853 -#: utils/adt/int8.c:933 utils/adt/int8.c:995 utils/adt/int8.c:1075 -#: utils/adt/numeric.c:7248 utils/adt/numeric.c:7537 utils/adt/numeric.c:8549 -#: utils/adt/timestamp.c:3257 +#: utils/adt/float.c:104 utils/adt/int.c:824 utils/adt/int.c:940 +#: utils/adt/int.c:1020 utils/adt/int.c:1082 utils/adt/int.c:1120 +#: utils/adt/int.c:1148 utils/adt/int8.c:593 utils/adt/int8.c:651 +#: utils/adt/int8.c:978 utils/adt/int8.c:1058 utils/adt/int8.c:1120 +#: utils/adt/int8.c:1200 utils/adt/numeric.c:7446 utils/adt/numeric.c:7736 +#: utils/adt/numeric.c:9318 utils/adt/timestamp.c:3275 #, c-format msgid "division by zero" msgstr "деление на ноль" @@ -23014,153 +23565,154 @@ msgstr "деление на ноль" msgid "\"char\" out of range" msgstr "значение \"char\" вне диапазона" -#: utils/adt/date.c:65 utils/adt/timestamp.c:95 utils/adt/varbit.c:104 -#: utils/adt/varchar.c:49 +#: utils/adt/date.c:61 utils/adt/timestamp.c:95 utils/adt/varbit.c:104 +#: utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "неверный модификатор типа" -#: utils/adt/date.c:77 +#: utils/adt/date.c:73 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "TIME(%d)%s: точность должна быть неотрицательной" -#: utils/adt/date.c:83 +#: utils/adt/date.c:79 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "TIME(%d)%s: точность уменьшена до дозволенного максимума: %d" -#: utils/adt/date.c:162 utils/adt/date.c:170 utils/adt/formatting.c:3726 -#: utils/adt/formatting.c:3735 +#: utils/adt/date.c:158 utils/adt/date.c:166 utils/adt/formatting.c:4210 +#: utils/adt/formatting.c:4219 utils/adt/formatting.c:4325 +#: utils/adt/formatting.c:4335 #, c-format msgid "date out of range: \"%s\"" msgstr "дата вне диапазона: \"%s\"" -#: utils/adt/date.c:217 utils/adt/date.c:529 utils/adt/date.c:553 -#: utils/adt/xml.c:2228 +#: utils/adt/date.c:213 utils/adt/date.c:525 utils/adt/date.c:549 +#: utils/adt/xml.c:2210 #, c-format msgid "date out of range" msgstr "дата вне диапазона" -#: utils/adt/date.c:263 utils/adt/timestamp.c:559 +#: utils/adt/date.c:259 utils/adt/timestamp.c:574 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "значение поля типа date вне диапазона: %d-%02d-%02d" -#: utils/adt/date.c:270 utils/adt/date.c:279 utils/adt/timestamp.c:565 +#: utils/adt/date.c:266 utils/adt/date.c:275 utils/adt/timestamp.c:580 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "дата вне диапазона: %d-%02d-%02d" -#: utils/adt/date.c:317 utils/adt/date.c:340 utils/adt/date.c:366 -#: utils/adt/date.c:1110 utils/adt/date.c:1156 utils/adt/date.c:1657 -#: utils/adt/date.c:1688 utils/adt/date.c:1717 utils/adt/date.c:2549 -#: utils/adt/datetime.c:1663 utils/adt/formatting.c:3592 -#: utils/adt/formatting.c:3624 utils/adt/formatting.c:3701 -#: utils/adt/json.c:1621 utils/adt/json.c:1641 utils/adt/timestamp.c:222 -#: utils/adt/timestamp.c:254 utils/adt/timestamp.c:687 -#: utils/adt/timestamp.c:696 utils/adt/timestamp.c:774 -#: utils/adt/timestamp.c:807 utils/adt/timestamp.c:2836 -#: utils/adt/timestamp.c:2857 utils/adt/timestamp.c:2870 -#: utils/adt/timestamp.c:2879 utils/adt/timestamp.c:2887 -#: utils/adt/timestamp.c:2942 utils/adt/timestamp.c:2965 -#: utils/adt/timestamp.c:2978 utils/adt/timestamp.c:2989 -#: utils/adt/timestamp.c:2997 utils/adt/timestamp.c:3657 -#: utils/adt/timestamp.c:3782 utils/adt/timestamp.c:3823 -#: utils/adt/timestamp.c:3913 utils/adt/timestamp.c:3957 -#: utils/adt/timestamp.c:4060 utils/adt/timestamp.c:4545 -#: utils/adt/timestamp.c:4741 utils/adt/timestamp.c:5068 -#: utils/adt/timestamp.c:5082 utils/adt/timestamp.c:5087 -#: utils/adt/timestamp.c:5101 utils/adt/timestamp.c:5134 -#: utils/adt/timestamp.c:5183 utils/adt/timestamp.c:5190 -#: utils/adt/timestamp.c:5223 utils/adt/timestamp.c:5227 -#: utils/adt/timestamp.c:5296 utils/adt/timestamp.c:5300 -#: utils/adt/timestamp.c:5314 utils/adt/timestamp.c:5348 utils/adt/xml.c:2250 -#: utils/adt/xml.c:2257 utils/adt/xml.c:2277 utils/adt/xml.c:2284 +#: utils/adt/date.c:313 utils/adt/date.c:336 utils/adt/date.c:362 +#: utils/adt/date.c:1142 utils/adt/date.c:1188 utils/adt/date.c:1744 +#: utils/adt/date.c:1775 utils/adt/date.c:1804 utils/adt/date.c:2636 +#: utils/adt/datetime.c:1655 utils/adt/formatting.c:4067 +#: utils/adt/formatting.c:4099 utils/adt/formatting.c:4179 +#: utils/adt/formatting.c:4301 utils/adt/json.c:418 utils/adt/json.c:457 +#: utils/adt/timestamp.c:222 utils/adt/timestamp.c:254 +#: utils/adt/timestamp.c:692 utils/adt/timestamp.c:701 +#: utils/adt/timestamp.c:779 utils/adt/timestamp.c:812 +#: utils/adt/timestamp.c:2854 utils/adt/timestamp.c:2875 +#: utils/adt/timestamp.c:2888 utils/adt/timestamp.c:2897 +#: utils/adt/timestamp.c:2905 utils/adt/timestamp.c:2960 +#: utils/adt/timestamp.c:2983 utils/adt/timestamp.c:2996 +#: utils/adt/timestamp.c:3007 utils/adt/timestamp.c:3015 +#: utils/adt/timestamp.c:3675 utils/adt/timestamp.c:3800 +#: utils/adt/timestamp.c:3841 utils/adt/timestamp.c:3931 +#: utils/adt/timestamp.c:3975 utils/adt/timestamp.c:4078 +#: utils/adt/timestamp.c:4563 utils/adt/timestamp.c:4759 +#: utils/adt/timestamp.c:5086 utils/adt/timestamp.c:5100 +#: utils/adt/timestamp.c:5105 utils/adt/timestamp.c:5119 +#: utils/adt/timestamp.c:5152 utils/adt/timestamp.c:5239 +#: utils/adt/timestamp.c:5280 utils/adt/timestamp.c:5284 +#: utils/adt/timestamp.c:5353 utils/adt/timestamp.c:5357 +#: utils/adt/timestamp.c:5371 utils/adt/timestamp.c:5405 utils/adt/xml.c:2232 +#: utils/adt/xml.c:2239 utils/adt/xml.c:2259 utils/adt/xml.c:2266 #, c-format msgid "timestamp out of range" msgstr "timestamp вне диапазона" -#: utils/adt/date.c:504 +#: utils/adt/date.c:500 #, c-format msgid "cannot subtract infinite dates" msgstr "вычитать бесконечные даты нельзя" -#: utils/adt/date.c:582 utils/adt/date.c:613 utils/adt/date.c:631 -#: utils/adt/date.c:2586 utils/adt/date.c:2596 +#: utils/adt/date.c:598 utils/adt/date.c:661 utils/adt/date.c:697 +#: utils/adt/date.c:2673 utils/adt/date.c:2683 #, c-format msgid "date out of range for timestamp" msgstr "дата вне диапазона для типа timestamp" -#: utils/adt/date.c:1270 utils/adt/date.c:2044 +#: utils/adt/date.c:1361 utils/adt/date.c:2131 utils/adt/formatting.c:4387 #, c-format msgid "time out of range" msgstr "время вне диапазона" -#: utils/adt/date.c:1326 utils/adt/timestamp.c:584 +#: utils/adt/date.c:1413 utils/adt/timestamp.c:589 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "значение поля типа time вне диапазона: %d:%02d:%02g" -#: utils/adt/date.c:1846 utils/adt/date.c:2348 utils/adt/float.c:1046 -#: utils/adt/float.c:1115 utils/adt/int.c:616 utils/adt/int.c:663 -#: utils/adt/int.c:698 utils/adt/int8.c:494 utils/adt/numeric.c:2203 -#: utils/adt/timestamp.c:3306 utils/adt/timestamp.c:3337 -#: utils/adt/timestamp.c:3368 +#: utils/adt/date.c:1933 utils/adt/date.c:2435 utils/adt/float.c:1071 +#: utils/adt/float.c:1140 utils/adt/int.c:616 utils/adt/int.c:663 +#: utils/adt/int.c:698 utils/adt/int8.c:492 utils/adt/numeric.c:2197 +#: utils/adt/timestamp.c:3324 utils/adt/timestamp.c:3355 +#: utils/adt/timestamp.c:3386 #, c-format msgid "invalid preceding or following size in window function" msgstr "неверное смещение PRECEDING или FOLLOWING в оконной функции" -#: utils/adt/date.c:1931 utils/adt/date.c:1944 +#: utils/adt/date.c:2018 utils/adt/date.c:2031 #, c-format msgid "\"time\" units \"%s\" not recognized" msgstr "\"время\" содержит нераспознанные единицы \"%s\"" -#: utils/adt/date.c:2052 +#: utils/adt/date.c:2139 #, c-format msgid "time zone displacement out of range" msgstr "смещение часового пояса вне диапазона" -#: utils/adt/date.c:2681 utils/adt/date.c:2694 +#: utils/adt/date.c:2768 utils/adt/date.c:2781 #, c-format msgid "\"time with time zone\" units \"%s\" not recognized" msgstr "\"время с часовым поясом\" содержит нераспознанные единицы \"%s\"" -#: utils/adt/date.c:2767 utils/adt/datetime.c:909 utils/adt/datetime.c:1821 -#: utils/adt/datetime.c:4617 utils/adt/timestamp.c:498 -#: utils/adt/timestamp.c:525 utils/adt/timestamp.c:4143 -#: utils/adt/timestamp.c:5093 utils/adt/timestamp.c:5306 +#: utils/adt/date.c:2854 utils/adt/datetime.c:906 utils/adt/datetime.c:1813 +#: utils/adt/datetime.c:4601 utils/adt/timestamp.c:513 +#: utils/adt/timestamp.c:540 utils/adt/timestamp.c:4161 +#: utils/adt/timestamp.c:5111 utils/adt/timestamp.c:5363 #, c-format msgid "time zone \"%s\" not recognized" msgstr "часовой пояс \"%s\" не распознан" -#: utils/adt/date.c:2799 utils/adt/timestamp.c:5123 utils/adt/timestamp.c:5337 +#: utils/adt/date.c:2886 utils/adt/timestamp.c:5141 utils/adt/timestamp.c:5394 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "" "интервал \"%s\", задающий часовой пояс, не должен содержать дней или месяцев" -#: utils/adt/datetime.c:3746 utils/adt/datetime.c:3753 +#: utils/adt/datetime.c:3730 utils/adt/datetime.c:3737 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "значение поля типа date/time вне диапазона: \"%s\"" -#: utils/adt/datetime.c:3755 +#: utils/adt/datetime.c:3739 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." msgstr "Возможно, вам нужно изменить настройку \"datestyle\"." -#: utils/adt/datetime.c:3760 +#: utils/adt/datetime.c:3744 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "значение поля interval вне диапазона: \"%s\"" -#: utils/adt/datetime.c:3766 +#: utils/adt/datetime.c:3750 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "смещение часового пояса вне диапазона: \"%s\"" -#: utils/adt/datetime.c:4619 +#: utils/adt/datetime.c:4603 #, c-format msgid "" "This time zone name appears in the configuration file for time zone " @@ -23169,7 +23721,7 @@ msgstr "" "Это имя часового пояса фигурирует в файле конфигурации часового пояса с " "кодом \"%s\"." -#: utils/adt/datum.c:88 utils/adt/datum.c:100 +#: utils/adt/datum.c:89 utils/adt/datum.c:101 #, c-format msgid "invalid Datum pointer" msgstr "неверный указатель Datum" @@ -23195,53 +23747,56 @@ msgstr "" msgid "type %s is not a domain" msgstr "тип \"%s\" не является доменом" -#: utils/adt/encode.c:55 utils/adt/encode.c:91 +#: utils/adt/encode.c:64 utils/adt/encode.c:112 #, c-format msgid "unrecognized encoding: \"%s\"" msgstr "нераспознанная кодировка: \"%s\"" -#: utils/adt/encode.c:150 +#: utils/adt/encode.c:78 +#, c-format +msgid "result of encoding conversion is too large" +msgstr "результат кодирования слишком объёмный" + +#: utils/adt/encode.c:126 +#, c-format +msgid "result of decoding conversion is too large" +msgstr "результат декодирования слишком объёмный" + +#: utils/adt/encode.c:184 #, c-format msgid "invalid hexadecimal digit: \"%c\"" msgstr "неверная шестнадцатеричная цифра: \"%c\"" -#: utils/adt/encode.c:178 +#: utils/adt/encode.c:212 #, c-format msgid "invalid hexadecimal data: odd number of digits" msgstr "неверные шестнадцатеричные данные: нечётное число цифр" -#: utils/adt/encode.c:295 +#: utils/adt/encode.c:329 #, c-format msgid "unexpected \"=\" while decoding base64 sequence" msgstr "неожиданный знак \"=\" при декодировании base64" -#: utils/adt/encode.c:307 +#: utils/adt/encode.c:341 #, c-format msgid "invalid symbol \"%c\" while decoding base64 sequence" msgstr "неверный символ \"%c\" при декодировании base64" -#: utils/adt/encode.c:327 +#: utils/adt/encode.c:361 #, c-format msgid "invalid base64 end sequence" msgstr "неверная конечная последовательность base64" -#: utils/adt/encode.c:328 +#: utils/adt/encode.c:362 #, c-format msgid "Input data is missing padding, is truncated, or is otherwise corrupted." msgstr "" "Входные данные лишены выравнивания, обрезаны или повреждены иным образом." -#: utils/adt/encode.c:442 utils/adt/encode.c:507 utils/adt/json.c:786 -#: utils/adt/json.c:826 utils/adt/json.c:842 utils/adt/json.c:854 -#: utils/adt/json.c:864 utils/adt/json.c:915 utils/adt/json.c:947 -#: utils/adt/json.c:966 utils/adt/json.c:978 utils/adt/json.c:990 -#: utils/adt/json.c:1135 utils/adt/json.c:1149 utils/adt/json.c:1160 -#: utils/adt/json.c:1168 utils/adt/json.c:1176 utils/adt/json.c:1184 -#: utils/adt/json.c:1192 utils/adt/json.c:1200 utils/adt/json.c:1208 -#: utils/adt/json.c:1216 utils/adt/json.c:1246 utils/adt/varlena.c:318 -#: utils/adt/varlena.c:359 jsonpath_gram.y:514 jsonpath_scan.l:525 -#: jsonpath_scan.l:541 jsonpath_scan.l:552 jsonpath_scan.l:562 -#: jsonpath_scan.l:604 +#: utils/adt/encode.c:476 utils/adt/encode.c:541 utils/adt/jsonfuncs.c:619 +#: utils/adt/varlena.c:319 utils/adt/varlena.c:360 jsonpath_gram.y:528 +#: jsonpath_scan.l:519 jsonpath_scan.l:530 jsonpath_scan.l:540 +#: jsonpath_scan.l:582 #, c-format msgid "invalid input syntax for type %s" msgstr "неверный синтаксис для типа %s" @@ -23279,200 +23834,210 @@ msgstr "не удалось определить фактический тип msgid "enum %s contains no values" msgstr "перечисление %s не содержит значений" -#: utils/adt/expandedrecord.c:98 utils/adt/expandedrecord.c:230 -#: utils/cache/typcache.c:1574 utils/cache/typcache.c:1730 -#: utils/cache/typcache.c:1860 utils/fmgr/funcapi.c:415 +#: utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 +#: utils/cache/typcache.c:1632 utils/cache/typcache.c:1788 +#: utils/cache/typcache.c:1918 utils/fmgr/funcapi.c:456 #, c-format msgid "type %s is not composite" msgstr "тип %s не является составным" -#: utils/adt/float.c:246 +#: utils/adt/float.c:88 +#, c-format +msgid "value out of range: overflow" +msgstr "значение вне диапазона: переполнение" + +#: utils/adt/float.c:96 +#, c-format +msgid "value out of range: underflow" +msgstr "значение вне диапазона: антипереполнение" + +#: utils/adt/float.c:265 #, c-format msgid "\"%s\" is out of range for type real" msgstr "\"%s\" вне диапазона для типа real" -#: utils/adt/float.c:466 +#: utils/adt/float.c:489 #, c-format msgid "\"%s\" is out of range for type double precision" msgstr "\"%s\" вне диапазона для типа double precision" -#: utils/adt/float.c:1238 utils/adt/float.c:1312 utils/adt/int.c:336 +#: utils/adt/float.c:1268 utils/adt/float.c:1342 utils/adt/int.c:336 #: utils/adt/int.c:874 utils/adt/int.c:896 utils/adt/int.c:910 #: utils/adt/int.c:924 utils/adt/int.c:956 utils/adt/int.c:1194 -#: utils/adt/int8.c:1188 utils/adt/numeric.c:3358 utils/adt/numeric.c:3367 +#: utils/adt/int8.c:1313 utils/adt/numeric.c:3553 utils/adt/numeric.c:3562 #, c-format msgid "smallint out of range" msgstr "smallint вне диапазона" -#: utils/adt/float.c:1438 utils/adt/numeric.c:7970 +#: utils/adt/float.c:1468 utils/adt/numeric.c:8329 #, c-format msgid "cannot take square root of a negative number" msgstr "извлечь квадратный корень отрицательного числа нельзя" -#: utils/adt/float.c:1499 utils/adt/numeric.c:3138 +#: utils/adt/float.c:1536 utils/adt/numeric.c:3239 #, c-format msgid "zero raised to a negative power is undefined" msgstr "ноль в отрицательной степени даёт неопределённость" -#: utils/adt/float.c:1503 utils/adt/numeric.c:3144 +#: utils/adt/float.c:1540 utils/adt/numeric.c:3245 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "отрицательное число в дробной степени даёт комплексный результат" -#: utils/adt/float.c:1569 utils/adt/float.c:1599 utils/adt/numeric.c:8236 +#: utils/adt/float.c:1614 utils/adt/float.c:1647 utils/adt/numeric.c:8993 #, c-format msgid "cannot take logarithm of zero" msgstr "вычислить логарифм нуля нельзя" -#: utils/adt/float.c:1573 utils/adt/float.c:1603 utils/adt/numeric.c:8240 +#: utils/adt/float.c:1618 utils/adt/float.c:1651 utils/adt/numeric.c:8997 #, c-format msgid "cannot take logarithm of a negative number" msgstr "вычислить логарифм отрицательного числа нельзя" -#: utils/adt/float.c:1633 utils/adt/float.c:1663 utils/adt/float.c:1755 -#: utils/adt/float.c:1781 utils/adt/float.c:1808 utils/adt/float.c:1834 -#: utils/adt/float.c:1981 utils/adt/float.c:2016 utils/adt/float.c:2180 -#: utils/adt/float.c:2234 utils/adt/float.c:2298 utils/adt/float.c:2353 -#: utils/adt/float.c:2541 utils/adt/float.c:2566 +#: utils/adt/float.c:1684 utils/adt/float.c:1715 utils/adt/float.c:1810 +#: utils/adt/float.c:1837 utils/adt/float.c:1865 utils/adt/float.c:1892 +#: utils/adt/float.c:2039 utils/adt/float.c:2076 utils/adt/float.c:2246 +#: utils/adt/float.c:2302 utils/adt/float.c:2367 utils/adt/float.c:2424 +#: utils/adt/float.c:2615 utils/adt/float.c:2639 #, c-format msgid "input is out of range" msgstr "введённое значение вне диапазона" -#: utils/adt/float.c:2634 +#: utils/adt/float.c:2706 #, c-format msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "параметр setseed %g вне допустимого диапазона [-1,1]" -#: utils/adt/float.c:2852 utils/adt/float.c:2928 utils/adt/float.c:3151 -#, c-format -msgid "value out of range: overflow" -msgstr "значение вне диапазона: переполнение" - -#: utils/adt/float.c:3833 utils/adt/numeric.c:1515 +#: utils/adt/float.c:3938 utils/adt/numeric.c:1509 #, c-format msgid "count must be greater than zero" msgstr "счётчик должен быть больше нуля" -#: utils/adt/float.c:3838 utils/adt/numeric.c:1522 +#: utils/adt/float.c:3943 utils/adt/numeric.c:1516 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "операнд, нижняя и верхняя границы не могут быть NaN" -#: utils/adt/float.c:3844 +#: utils/adt/float.c:3949 #, c-format msgid "lower and upper bounds must be finite" msgstr "нижняя и верхняя границы должны быть конечными" -#: utils/adt/float.c:3878 utils/adt/numeric.c:1535 +#: utils/adt/float.c:3983 utils/adt/numeric.c:1529 #, c-format msgid "lower bound cannot equal upper bound" msgstr "нижняя граница не может равняться верхней" -#: utils/adt/formatting.c:493 +#: utils/adt/formatting.c:532 #, c-format msgid "invalid format specification for an interval value" msgstr "неправильная спецификация формата для целого числа" -#: utils/adt/formatting.c:494 +#: utils/adt/formatting.c:533 #, c-format msgid "Intervals are not tied to specific calendar dates." msgstr "Интервалы не привязываются к определённым календарным датам." -#: utils/adt/formatting.c:1077 +#: utils/adt/formatting.c:1157 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "\"EEEE\" может быть только последним шаблоном" -#: utils/adt/formatting.c:1085 +#: utils/adt/formatting.c:1165 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "\"9\" должна стоять до \"PR\"" -#: utils/adt/formatting.c:1101 +#: utils/adt/formatting.c:1181 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "\"0\" должен стоять до \"PR\"" -#: utils/adt/formatting.c:1128 +#: utils/adt/formatting.c:1208 #, c-format msgid "multiple decimal points" msgstr "многочисленные десятичные точки" -#: utils/adt/formatting.c:1132 utils/adt/formatting.c:1215 +#: utils/adt/formatting.c:1212 utils/adt/formatting.c:1295 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "нельзя использовать \"V\" вместе с десятичной точкой" -#: utils/adt/formatting.c:1144 +#: utils/adt/formatting.c:1224 #, c-format msgid "cannot use \"S\" twice" msgstr "нельзя использовать \"S\" дважды" -#: utils/adt/formatting.c:1148 +#: utils/adt/formatting.c:1228 #, c-format msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" msgstr "нельзя использовать \"S\" вместе с \"PL\"/\"MI\"/\"SG\"/\"PR\"" -#: utils/adt/formatting.c:1168 +#: utils/adt/formatting.c:1248 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "нельзя использовать \"S\" вместе с \"MI\"" -#: utils/adt/formatting.c:1178 +#: utils/adt/formatting.c:1258 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "нельзя использовать \"S\" вместе с \"PL\"" -#: utils/adt/formatting.c:1188 +#: utils/adt/formatting.c:1268 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "нельзя использовать \"S\" вместе с \"SG\"" -#: utils/adt/formatting.c:1197 +#: utils/adt/formatting.c:1277 #, c-format msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" msgstr "нельзя использовать \"PR\" вместе с \"S\"/\"PL\"/\"MI\"/\"SG\"" -#: utils/adt/formatting.c:1223 +#: utils/adt/formatting.c:1303 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "нельзя использовать \"EEEE\" дважды" -#: utils/adt/formatting.c:1229 +#: utils/adt/formatting.c:1309 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "\"EEEE\" несовместим с другими форматами" -#: utils/adt/formatting.c:1230 +#: utils/adt/formatting.c:1310 #, c-format msgid "" "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "" "\"EEEE\" может использоваться только с шаблонами цифр и десятичной точки." -#: utils/adt/formatting.c:1417 +#: utils/adt/formatting.c:1394 +#, c-format +msgid "invalid datetime format separator: \"%s\"" +msgstr "неверный разделитель в формате datetime: \"%s\"" + +#: utils/adt/formatting.c:1522 #, c-format msgid "\"%s\" is not a number" msgstr "\"%s\" не является числом" -#: utils/adt/formatting.c:1495 +#: utils/adt/formatting.c:1600 #, c-format msgid "case conversion failed: %s" msgstr "преобразовать регистр не удалось: %s" -#: utils/adt/formatting.c:1560 utils/adt/formatting.c:1684 -#: utils/adt/formatting.c:1809 +#: utils/adt/formatting.c:1665 utils/adt/formatting.c:1789 +#: utils/adt/formatting.c:1914 #, c-format msgid "could not determine which collation to use for %s function" msgstr "" "не удалось определить, какое правило сортировки использовать для функции %s" -#: utils/adt/formatting.c:2179 +#: utils/adt/formatting.c:2286 #, c-format msgid "invalid combination of date conventions" msgstr "неверное сочетание стилей дат" -#: utils/adt/formatting.c:2180 +#: utils/adt/formatting.c:2287 #, c-format msgid "" "Do not mix Gregorian and ISO week date conventions in a formatting template." @@ -23480,27 +24045,27 @@ msgstr "" "Не смешивайте Григорианский стиль дат (недель) с ISO в одном шаблоне " "форматирования." -#: utils/adt/formatting.c:2197 +#: utils/adt/formatting.c:2310 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "конфликтующие значения поля \"%s\" в строке форматирования" -#: utils/adt/formatting.c:2199 +#: utils/adt/formatting.c:2313 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "Это значение противоречит предыдущему значению поля того же типа." -#: utils/adt/formatting.c:2263 +#: utils/adt/formatting.c:2384 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "входная строка короче, чем требует поле форматирования \"%s\"" -#: utils/adt/formatting.c:2265 +#: utils/adt/formatting.c:2387 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "Требуется символов: %d, а осталось только %d." -#: utils/adt/formatting.c:2268 utils/adt/formatting.c:2282 +#: utils/adt/formatting.c:2390 utils/adt/formatting.c:2405 #, c-format msgid "" "If your source string is not fixed-width, try using the \"FM\" modifier." @@ -23508,112 +24073,169 @@ msgstr "" "Если входная строка имеет переменную длину, попробуйте использовать " "модификатор \"FM\"." -#: utils/adt/formatting.c:2278 utils/adt/formatting.c:2291 -#: utils/adt/formatting.c:2421 +#: utils/adt/formatting.c:2400 utils/adt/formatting.c:2414 +#: utils/adt/formatting.c:2637 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "неверное значение \"%s\" для \"%s\"" -#: utils/adt/formatting.c:2280 +#: utils/adt/formatting.c:2402 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "Поле должно поглотить символов: %d, но удалось разобрать только %d." -#: utils/adt/formatting.c:2293 +#: utils/adt/formatting.c:2416 #, c-format msgid "Value must be an integer." msgstr "Значение должно быть целым числом." -#: utils/adt/formatting.c:2298 +#: utils/adt/formatting.c:2421 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "значение \"%s\" во входной строке вне диапазона" -#: utils/adt/formatting.c:2300 +#: utils/adt/formatting.c:2423 #, c-format msgid "Value must be in the range %d to %d." msgstr "Значение должно быть в интервале %d..%d." -#: utils/adt/formatting.c:2423 +#: utils/adt/formatting.c:2639 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "" "Данное значение не соответствует ни одному из допустимых значений для этого " "поля." -#: utils/adt/formatting.c:2621 utils/adt/formatting.c:2641 -#: utils/adt/formatting.c:2661 utils/adt/formatting.c:2681 -#: utils/adt/formatting.c:2700 utils/adt/formatting.c:2719 -#: utils/adt/formatting.c:2743 utils/adt/formatting.c:2761 -#: utils/adt/formatting.c:2779 utils/adt/formatting.c:2797 -#: utils/adt/formatting.c:2814 utils/adt/formatting.c:2831 +#: utils/adt/formatting.c:2856 utils/adt/formatting.c:2876 +#: utils/adt/formatting.c:2896 utils/adt/formatting.c:2916 +#: utils/adt/formatting.c:2935 utils/adt/formatting.c:2954 +#: utils/adt/formatting.c:2978 utils/adt/formatting.c:2996 +#: utils/adt/formatting.c:3014 utils/adt/formatting.c:3032 +#: utils/adt/formatting.c:3049 utils/adt/formatting.c:3066 #, c-format msgid "localized string format value too long" msgstr "слишком длинное значение формата локализованной строки" -#: utils/adt/formatting.c:3173 +#: utils/adt/formatting.c:3300 +#, c-format +msgid "unmatched format separator \"%c\"" +msgstr "нет соответствия для заданного в формате разделителя \"%c\"" + +#: utils/adt/formatting.c:3361 +#, c-format +msgid "unmatched format character \"%s\"" +msgstr "нет соответствия для заданного в формате символа \"%s\"" + +#: utils/adt/formatting.c:3467 utils/adt/formatting.c:3811 #, c-format msgid "formatting field \"%s\" is only supported in to_char" msgstr "поле форматирования \"%s\" поддерживается только в функции to_char" -#: utils/adt/formatting.c:3314 +#: utils/adt/formatting.c:3642 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "ошибка синтаксиса в значении для шаблона \"Y,YYY\"" -#: utils/adt/formatting.c:3844 +#: utils/adt/formatting.c:3728 +#, c-format +msgid "input string is too short for datetime format" +msgstr "входная строка короче, чем требует формат datetime" + +#: utils/adt/formatting.c:3736 +#, c-format +msgid "trailing characters remain in input string after datetime format" +msgstr "" +"после разбора формата datetime во входной строке остались дополнительные " +"символы" + +#: utils/adt/formatting.c:4281 +#, c-format +msgid "missing time zone in input string for type timestamptz" +msgstr "во входной строке для типа timestamptz нет указания часового пояса" + +#: utils/adt/formatting.c:4287 +#, c-format +msgid "timestamptz out of range" +msgstr "значение timestamptz вне диапазона" + +#: utils/adt/formatting.c:4315 +#, c-format +msgid "datetime format is zoned but not timed" +msgstr "в формате datetime указан часовой пояс, но отсутствует время" + +#: utils/adt/formatting.c:4367 +#, c-format +msgid "missing time zone in input string for type timetz" +msgstr "во входной строке для типа timetz нет указания часового пояса" + +#: utils/adt/formatting.c:4373 +#, c-format +msgid "timetz out of range" +msgstr "значение timetz вне диапазона" + +#: utils/adt/formatting.c:4399 +#, c-format +msgid "datetime format is not dated and not timed" +msgstr "в формате datetime нет ни даты, ни времени" + +#: utils/adt/formatting.c:4532 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "час \"%d\" не соответствует 12-часовому формату времени" -#: utils/adt/formatting.c:3846 +#: utils/adt/formatting.c:4534 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Используйте 24-часовой формат или передавайте часы от 1 до 12." -#: utils/adt/formatting.c:3952 +#: utils/adt/formatting.c:4645 #, c-format msgid "cannot calculate day of year without year information" msgstr "нельзя рассчитать день года без информации о годе" -#: utils/adt/formatting.c:4859 +#: utils/adt/formatting.c:5564 #, c-format msgid "\"EEEE\" not supported for input" msgstr "\"EEEE\" не поддерживается при вводе" -#: utils/adt/formatting.c:4871 +#: utils/adt/formatting.c:5576 #, c-format msgid "\"RN\" not supported for input" msgstr "\"RN\" не поддерживается при вводе" -#: utils/adt/genfile.c:81 +#: utils/adt/genfile.c:75 #, c-format msgid "reference to parent directory (\"..\") not allowed" msgstr "ссылка на родительский каталог (\"..\") недопустима" -#: utils/adt/genfile.c:92 +#: utils/adt/genfile.c:86 #, c-format msgid "absolute path not allowed" msgstr "абсолютный путь недопустим" -#: utils/adt/genfile.c:97 +#: utils/adt/genfile.c:91 #, c-format msgid "path must be in or below the current directory" msgstr "путь должен указывать в текущий или вложенный каталог" -#: utils/adt/genfile.c:144 utils/adt/oracle_compat.c:185 +#: utils/adt/genfile.c:116 utils/adt/oracle_compat.c:185 #: utils/adt/oracle_compat.c:283 utils/adt/oracle_compat.c:759 #: utils/adt/oracle_compat.c:1054 #, c-format msgid "requested length too large" msgstr "запрошенная длина слишком велика" -#: utils/adt/genfile.c:161 +#: utils/adt/genfile.c:133 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "не удалось переместиться в файле \"%s\": %m" -#: utils/adt/genfile.c:221 +#: utils/adt/genfile.c:174 +#, c-format +msgid "file length too large" +msgstr "длина файла слишком велика" + +#: utils/adt/genfile.c:251 #, c-format msgid "must be superuser to read files with adminpack 1.0" msgstr "читать файлы, используя adminpack 1.0, может только суперпользователь" @@ -23628,8 +24250,8 @@ msgstr "неверное определение линии: A и B вдвоём msgid "invalid line specification: must be two distinct points" msgstr "неверное определение линии: требуются две различных точки" -#: utils/adt/geo_ops.c:1399 utils/adt/geo_ops.c:3370 utils/adt/geo_ops.c:4238 -#: utils/adt/geo_ops.c:5129 +#: utils/adt/geo_ops.c:1399 utils/adt/geo_ops.c:3486 utils/adt/geo_ops.c:4354 +#: utils/adt/geo_ops.c:5248 #, c-format msgid "too many points requested" msgstr "запрошено слишком много точек" @@ -23639,421 +24261,335 @@ msgstr "запрошено слишком много точек" msgid "invalid number of points in external \"path\" value" msgstr "недопустимое число точек во внешнем представлении типа \"path\"" -#: utils/adt/geo_ops.c:2459 +#: utils/adt/geo_ops.c:2537 #, c-format msgid "function \"dist_lb\" not implemented" msgstr "функция \"dist_lb\" не реализована" -#: utils/adt/geo_ops.c:2859 +#: utils/adt/geo_ops.c:2556 +#, c-format +msgid "function \"dist_bl\" not implemented" +msgstr "функция \"dist_bl\" не реализована" + +#: utils/adt/geo_ops.c:2975 #, c-format msgid "function \"close_sl\" not implemented" msgstr "функция \"close_sl\" не реализована" -#: utils/adt/geo_ops.c:3006 +#: utils/adt/geo_ops.c:3122 #, c-format msgid "function \"close_lb\" not implemented" msgstr "функция \"close_lb\" не реализована" -#: utils/adt/geo_ops.c:3417 +#: utils/adt/geo_ops.c:3533 #, c-format msgid "invalid number of points in external \"polygon\" value" msgstr "недопустимое число точек во внешнем представлении типа \"polygon\"" -#: utils/adt/geo_ops.c:3953 -#, c-format -msgid "function \"poly_distance\" not implemented" -msgstr "функция \"poly_distance\" не реализована" - -#: utils/adt/geo_ops.c:4330 -#, c-format -msgid "function \"path_center\" not implemented" -msgstr "функция \"path_center\" не реализована" - -#: utils/adt/geo_ops.c:4347 -#, c-format -msgid "open path cannot be converted to polygon" -msgstr "открытый путь нельзя преобразовать во многоугольник" - -#: utils/adt/geo_ops.c:4594 -#, c-format -msgid "invalid radius in external \"circle\" value" -msgstr "недопустимый радиус во внешнем представлении типа \"circle\"" - -#: utils/adt/geo_ops.c:5115 -#, c-format -msgid "cannot convert circle with radius zero to polygon" -msgstr "круг с нулевым радиусом нельзя преобразовать в многоугольник" - -#: utils/adt/geo_ops.c:5120 +#: utils/adt/geo_ops.c:4069 #, c-format -msgid "must request at least 2 points" -msgstr "точек должно быть минимум 2" - -#: utils/adt/int.c:164 -#, c-format -msgid "int2vector has too many elements" -msgstr "int2vector содержит слишком много элементов" - -#: utils/adt/int.c:239 -#, c-format -msgid "invalid int2vector data" -msgstr "неверные данные int2vector" - -#: utils/adt/int.c:245 utils/adt/oid.c:215 utils/adt/oid.c:296 -#, c-format -msgid "oidvector has too many elements" -msgstr "oidvector содержит слишком много элементов" - -#: utils/adt/int.c:1383 utils/adt/int8.c:1314 utils/adt/numeric.c:1423 -#: utils/adt/timestamp.c:5399 utils/adt/timestamp.c:5480 -#, c-format -msgid "step size cannot equal zero" -msgstr "размер шага не может быть нулевым" - -#: utils/adt/int8.c:529 utils/adt/int8.c:552 utils/adt/int8.c:566 -#: utils/adt/int8.c:580 utils/adt/int8.c:611 utils/adt/int8.c:635 -#: utils/adt/int8.c:690 utils/adt/int8.c:704 utils/adt/int8.c:728 -#: utils/adt/int8.c:741 utils/adt/int8.c:810 utils/adt/int8.c:824 -#: utils/adt/int8.c:838 utils/adt/int8.c:869 utils/adt/int8.c:891 -#: utils/adt/int8.c:905 utils/adt/int8.c:919 utils/adt/int8.c:952 -#: utils/adt/int8.c:966 utils/adt/int8.c:980 utils/adt/int8.c:1011 -#: utils/adt/int8.c:1033 utils/adt/int8.c:1047 utils/adt/int8.c:1061 -#: utils/adt/int8.c:1223 utils/adt/int8.c:1258 utils/adt/numeric.c:3313 -#: utils/adt/varbit.c:1656 -#, c-format -msgid "bigint out of range" -msgstr "bigint вне диапазона" - -#: utils/adt/int8.c:1271 -#, c-format -msgid "OID out of range" -msgstr "OID вне диапазона" - -#: utils/adt/json.c:787 -#, c-format -msgid "Character with value 0x%02x must be escaped." -msgstr "Символ с кодом 0x%02x необходимо экранировать." - -#: utils/adt/json.c:828 -#, c-format -msgid "\"\\u\" must be followed by four hexadecimal digits." -msgstr "За \"\\u\" должны следовать четыре шестнадцатеричные цифры." - -#: utils/adt/json.c:844 jsonpath_scan.l:542 -#, c-format -msgid "Unicode high surrogate must not follow a high surrogate." -msgstr "" -"Старшее слово суррогата Unicode не может следовать за другим старшим словом." - -#: utils/adt/json.c:855 utils/adt/json.c:865 utils/adt/json.c:917 -#: utils/adt/json.c:979 utils/adt/json.c:991 jsonpath_scan.l:553 -#: jsonpath_scan.l:563 jsonpath_scan.l:605 -#, c-format -msgid "Unicode low surrogate must follow a high surrogate." -msgstr "Младшее слово суррогата Unicode должно следовать за старшим словом." - -#: utils/adt/json.c:880 utils/adt/json.c:903 jsonpath_scan.l:500 -#, c-format -msgid "unsupported Unicode escape sequence" -msgstr "неподдерживаемая спецпоследовательность Unicode" - -#: utils/adt/json.c:881 jsonpath_scan.l:501 -#, c-format -msgid "\\u0000 cannot be converted to text." -msgstr "\\u0000 нельзя преобразовать в текст." - -#: utils/adt/json.c:904 jsonpath_scan.l:526 -#, c-format -msgid "" -"Unicode escape values cannot be used for code point values above 007F when " -"the server encoding is not UTF8." -msgstr "" -"Спецкоды Unicode для значений выше 007F можно использовать только с " -"серверной кодировкой UTF8." - -#: utils/adt/json.c:949 utils/adt/json.c:967 -#, c-format -msgid "Escape sequence \"\\%s\" is invalid." -msgstr "Неверная спецпоследовательность: \"\\%s\"." +msgid "function \"poly_distance\" not implemented" +msgstr "функция \"poly_distance\" не реализована" -#: utils/adt/json.c:1136 +#: utils/adt/geo_ops.c:4446 #, c-format -msgid "The input string ended unexpectedly." -msgstr "Неожиданный конец входной строки." +msgid "function \"path_center\" not implemented" +msgstr "функция \"path_center\" не реализована" -#: utils/adt/json.c:1150 +#: utils/adt/geo_ops.c:4463 #, c-format -msgid "Expected end of input, but found \"%s\"." -msgstr "Ожидался конец текста, но обнаружено продолжение \"%s\"." +msgid "open path cannot be converted to polygon" +msgstr "открытый путь нельзя преобразовать во многоугольник" -#: utils/adt/json.c:1161 +#: utils/adt/geo_ops.c:4713 #, c-format -msgid "Expected JSON value, but found \"%s\"." -msgstr "Ожидалось значение JSON, но обнаружено \"%s\"." +msgid "invalid radius in external \"circle\" value" +msgstr "недопустимый радиус во внешнем представлении типа \"circle\"" -#: utils/adt/json.c:1169 utils/adt/json.c:1217 +#: utils/adt/geo_ops.c:5234 #, c-format -msgid "Expected string, but found \"%s\"." -msgstr "Ожидалась строка, но обнаружено \"%s\"." +msgid "cannot convert circle with radius zero to polygon" +msgstr "круг с нулевым радиусом нельзя преобразовать в многоугольник" -#: utils/adt/json.c:1177 +#: utils/adt/geo_ops.c:5239 #, c-format -msgid "Expected array element or \"]\", but found \"%s\"." -msgstr "Ожидался элемент массива или \"]\", но обнаружено \"%s\"." +msgid "must request at least 2 points" +msgstr "точек должно быть минимум 2" -#: utils/adt/json.c:1185 +#: utils/adt/int.c:164 #, c-format -msgid "Expected \",\" or \"]\", but found \"%s\"." -msgstr "Ожидалась \",\" или \"]\", но обнаружено \"%s\"." +msgid "int2vector has too many elements" +msgstr "int2vector содержит слишком много элементов" -#: utils/adt/json.c:1193 +#: utils/adt/int.c:239 #, c-format -msgid "Expected string or \"}\", but found \"%s\"." -msgstr "Ожидалась строка или \"}\", но обнаружено \"%s\"." +msgid "invalid int2vector data" +msgstr "неверные данные int2vector" -#: utils/adt/json.c:1201 +#: utils/adt/int.c:245 utils/adt/oid.c:215 utils/adt/oid.c:296 #, c-format -msgid "Expected \":\", but found \"%s\"." -msgstr "Ожидалось \":\", но обнаружено \"%s\"." +msgid "oidvector has too many elements" +msgstr "oidvector содержит слишком много элементов" -#: utils/adt/json.c:1209 +#: utils/adt/int.c:1510 utils/adt/int8.c:1439 utils/adt/numeric.c:1417 +#: utils/adt/timestamp.c:5456 utils/adt/timestamp.c:5536 #, c-format -msgid "Expected \",\" or \"}\", but found \"%s\"." -msgstr "Ожидалась \",\" или \"}\", но обнаружено \"%s\"." +msgid "step size cannot equal zero" +msgstr "размер шага не может быть нулевым" -#: utils/adt/json.c:1247 +#: utils/adt/int8.c:527 utils/adt/int8.c:550 utils/adt/int8.c:564 +#: utils/adt/int8.c:578 utils/adt/int8.c:609 utils/adt/int8.c:633 +#: utils/adt/int8.c:715 utils/adt/int8.c:783 utils/adt/int8.c:789 +#: utils/adt/int8.c:815 utils/adt/int8.c:829 utils/adt/int8.c:853 +#: utils/adt/int8.c:866 utils/adt/int8.c:935 utils/adt/int8.c:949 +#: utils/adt/int8.c:963 utils/adt/int8.c:994 utils/adt/int8.c:1016 +#: utils/adt/int8.c:1030 utils/adt/int8.c:1044 utils/adt/int8.c:1077 +#: utils/adt/int8.c:1091 utils/adt/int8.c:1105 utils/adt/int8.c:1136 +#: utils/adt/int8.c:1158 utils/adt/int8.c:1172 utils/adt/int8.c:1186 +#: utils/adt/int8.c:1348 utils/adt/int8.c:1383 utils/adt/numeric.c:3508 +#: utils/adt/varbit.c:1662 #, c-format -msgid "Token \"%s\" is invalid." -msgstr "Ошибочный элемент текста \"%s\"." +msgid "bigint out of range" +msgstr "bigint вне диапазона" -#: utils/adt/json.c:1319 +#: utils/adt/int8.c:1396 #, c-format -msgid "JSON data, line %d: %s%s%s" -msgstr "данные JSON, строка %d: %s%s%s" +msgid "OID out of range" +msgstr "OID вне диапазона" -#: utils/adt/json.c:1475 utils/adt/jsonb.c:739 +#: utils/adt/json.c:271 utils/adt/jsonb.c:757 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "" "значением ключа должен быть скаляр (не массив, композитный тип или json)" -#: utils/adt/json.c:2076 utils/adt/json.c:2086 utils/fmgr/funcapi.c:1549 +#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:1813 #, c-format msgid "could not determine data type for argument %d" msgstr "не удалось определить тип данных аргумента %d" -#: utils/adt/json.c:2110 utils/adt/jsonb.c:1707 +#: utils/adt/json.c:926 utils/adt/jsonb.c:1728 #, c-format msgid "field name must not be null" msgstr "имя поля не может быть NULL" -#: utils/adt/json.c:2194 utils/adt/jsonb.c:1157 +#: utils/adt/json.c:1010 utils/adt/jsonb.c:1178 #, c-format msgid "argument list must have even number of elements" msgstr "в списке аргументов должно быть чётное число элементов" #. translator: %s is a SQL function name -#: utils/adt/json.c:2196 utils/adt/jsonb.c:1159 +#: utils/adt/json.c:1012 utils/adt/jsonb.c:1180 #, c-format msgid "The arguments of %s must consist of alternating keys and values." msgstr "Аргументы %s должны состоять из пар ключ-значение." -#: utils/adt/json.c:2212 +#: utils/adt/json.c:1028 #, c-format msgid "argument %d cannot be null" msgstr "аргумент %d не может быть NULL" -#: utils/adt/json.c:2213 +#: utils/adt/json.c:1029 #, c-format msgid "Object keys should be text." msgstr "Ключи объектов должны быть текстовыми." -#: utils/adt/json.c:2319 utils/adt/jsonb.c:1289 +#: utils/adt/json.c:1135 utils/adt/jsonb.c:1310 #, c-format msgid "array must have two columns" msgstr "массив должен иметь два столбца" -#: utils/adt/json.c:2343 utils/adt/json.c:2427 utils/adt/jsonb.c:1313 -#: utils/adt/jsonb.c:1408 +#: utils/adt/json.c:1159 utils/adt/json.c:1243 utils/adt/jsonb.c:1334 +#: utils/adt/jsonb.c:1429 #, c-format msgid "null value not allowed for object key" msgstr "значение null не может быть ключом объекта" -#: utils/adt/json.c:2416 utils/adt/jsonb.c:1397 +#: utils/adt/json.c:1232 utils/adt/jsonb.c:1418 #, c-format msgid "mismatched array dimensions" msgstr "неподходящие размерности массива" -#: utils/adt/jsonb.c:269 +#: utils/adt/jsonb.c:287 #, c-format msgid "string too long to represent as jsonb string" msgstr "слишком длинная строка для представления в виде строки jsonb" -#: utils/adt/jsonb.c:270 +#: utils/adt/jsonb.c:288 #, c-format msgid "" "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." msgstr "" "Из-за ограничений реализации строки jsonb не могут быть длиннее %d байт." -#: utils/adt/jsonb.c:1172 +#: utils/adt/jsonb.c:1193 #, c-format msgid "argument %d: key must not be null" msgstr "аргумент %d: ключ не может быть NULL" -#: utils/adt/jsonb.c:1760 +#: utils/adt/jsonb.c:1781 #, c-format msgid "object keys must be strings" msgstr "ключи объектов должны быть строковыми" -#: utils/adt/jsonb.c:1923 +#: utils/adt/jsonb.c:1944 #, c-format msgid "cannot cast jsonb null to type %s" msgstr "привести значение jsonb null к типу %s нельзя" -#: utils/adt/jsonb.c:1924 +#: utils/adt/jsonb.c:1945 #, c-format msgid "cannot cast jsonb string to type %s" msgstr "привести строку jsonb к типу %s нельзя" -#: utils/adt/jsonb.c:1925 +#: utils/adt/jsonb.c:1946 #, c-format msgid "cannot cast jsonb numeric to type %s" msgstr "привести числовое значение jsonb к типу %s нельзя" -#: utils/adt/jsonb.c:1926 +#: utils/adt/jsonb.c:1947 #, c-format msgid "cannot cast jsonb boolean to type %s" msgstr "привести логическое значение jsonb к типу %s нельзя" -#: utils/adt/jsonb.c:1927 +#: utils/adt/jsonb.c:1948 #, c-format msgid "cannot cast jsonb array to type %s" msgstr "привести массив jsonb к типу %s нельзя" -#: utils/adt/jsonb.c:1928 +#: utils/adt/jsonb.c:1949 #, c-format msgid "cannot cast jsonb object to type %s" msgstr "привести объект jsonb к типу %s нельзя" -#: utils/adt/jsonb.c:1929 +#: utils/adt/jsonb.c:1950 #, c-format msgid "cannot cast jsonb array or object to type %s" msgstr "привести массив или объект jsonb к типу %s нельзя" -#: utils/adt/jsonb_util.c:657 +#: utils/adt/jsonb_util.c:699 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "число пар объекта jsonb превышает предел (%zu)" -#: utils/adt/jsonb_util.c:698 +#: utils/adt/jsonb_util.c:740 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "число элементов массива jsonb превышает предел (%zu)" -#: utils/adt/jsonb_util.c:1569 utils/adt/jsonb_util.c:1589 +#: utils/adt/jsonb_util.c:1614 utils/adt/jsonb_util.c:1634 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "общий размер элементов массива jsonb превышает предел (%u байт)" -#: utils/adt/jsonb_util.c:1650 utils/adt/jsonb_util.c:1685 -#: utils/adt/jsonb_util.c:1705 +#: utils/adt/jsonb_util.c:1695 utils/adt/jsonb_util.c:1730 +#: utils/adt/jsonb_util.c:1750 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "общий размер элементов объекта jsonb превышает предел (%u байт)" -#: utils/adt/jsonfuncs.c:522 utils/adt/jsonfuncs.c:687 -#: utils/adt/jsonfuncs.c:2275 utils/adt/jsonfuncs.c:2715 -#: utils/adt/jsonfuncs.c:3505 utils/adt/jsonfuncs.c:3836 +#: utils/adt/jsonfuncs.c:551 utils/adt/jsonfuncs.c:796 +#: utils/adt/jsonfuncs.c:2330 utils/adt/jsonfuncs.c:2770 +#: utils/adt/jsonfuncs.c:3560 utils/adt/jsonfuncs.c:3891 #, c-format msgid "cannot call %s on a scalar" msgstr "вызывать %s со скаляром нельзя" -#: utils/adt/jsonfuncs.c:527 utils/adt/jsonfuncs.c:674 -#: utils/adt/jsonfuncs.c:2717 utils/adt/jsonfuncs.c:3494 +#: utils/adt/jsonfuncs.c:556 utils/adt/jsonfuncs.c:783 +#: utils/adt/jsonfuncs.c:2772 utils/adt/jsonfuncs.c:3549 #, c-format msgid "cannot call %s on an array" msgstr "вызывать %s с массивом нельзя" -#: utils/adt/jsonfuncs.c:1590 utils/adt/jsonfuncs.c:1625 +#: utils/adt/jsonfuncs.c:613 jsonpath_scan.l:498 +#, c-format +msgid "unsupported Unicode escape sequence" +msgstr "неподдерживаемая спецпоследовательность Unicode" + +#: utils/adt/jsonfuncs.c:692 +#, c-format +msgid "JSON data, line %d: %s%s%s" +msgstr "данные JSON, строка %d: %s%s%s" + +#: utils/adt/jsonfuncs.c:1682 utils/adt/jsonfuncs.c:1717 #, c-format msgid "cannot get array length of a scalar" msgstr "получить длину скаляра нельзя" -#: utils/adt/jsonfuncs.c:1594 utils/adt/jsonfuncs.c:1613 +#: utils/adt/jsonfuncs.c:1686 utils/adt/jsonfuncs.c:1705 #, c-format msgid "cannot get array length of a non-array" msgstr "получить длину массива для не массива нельзя" -#: utils/adt/jsonfuncs.c:1690 +#: utils/adt/jsonfuncs.c:1782 #, c-format msgid "cannot call %s on a non-object" msgstr "вызывать %s с не объектом нельзя" -#: utils/adt/jsonfuncs.c:1948 +#: utils/adt/jsonfuncs.c:2021 #, c-format msgid "cannot deconstruct an array as an object" msgstr "извлечь массив в виде объекта нельзя" -#: utils/adt/jsonfuncs.c:1960 +#: utils/adt/jsonfuncs.c:2033 #, c-format msgid "cannot deconstruct a scalar" msgstr "извлечь скаляр нельзя" -#: utils/adt/jsonfuncs.c:2006 +#: utils/adt/jsonfuncs.c:2079 #, c-format msgid "cannot extract elements from a scalar" msgstr "извлечь элементы из скаляра нельзя" -#: utils/adt/jsonfuncs.c:2010 +#: utils/adt/jsonfuncs.c:2083 #, c-format msgid "cannot extract elements from an object" msgstr "извлечь элементы из объекта нельзя" -#: utils/adt/jsonfuncs.c:2262 utils/adt/jsonfuncs.c:3720 +#: utils/adt/jsonfuncs.c:2317 utils/adt/jsonfuncs.c:3775 #, c-format msgid "cannot call %s on a non-array" msgstr "вызывать %s с не массивом нельзя" -#: utils/adt/jsonfuncs.c:2332 utils/adt/jsonfuncs.c:2337 -#: utils/adt/jsonfuncs.c:2354 utils/adt/jsonfuncs.c:2360 +#: utils/adt/jsonfuncs.c:2387 utils/adt/jsonfuncs.c:2392 +#: utils/adt/jsonfuncs.c:2409 utils/adt/jsonfuncs.c:2415 #, c-format msgid "expected JSON array" msgstr "ожидался массив JSON" -#: utils/adt/jsonfuncs.c:2333 +#: utils/adt/jsonfuncs.c:2388 #, c-format msgid "See the value of key \"%s\"." msgstr "Проверьте значение ключа \"%s\"." -#: utils/adt/jsonfuncs.c:2355 +#: utils/adt/jsonfuncs.c:2410 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "Проверьте элемент массива %s ключа \"%s\"." -#: utils/adt/jsonfuncs.c:2361 +#: utils/adt/jsonfuncs.c:2416 #, c-format msgid "See the array element %s." msgstr "Проверьте элемент массива %s." -#: utils/adt/jsonfuncs.c:2396 +#: utils/adt/jsonfuncs.c:2451 #, c-format msgid "malformed JSON array" msgstr "неправильный массив JSON" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3223 +#: utils/adt/jsonfuncs.c:3278 #, c-format msgid "first argument of %s must be a row type" msgstr "первым аргументом %s должен быть кортеж" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3247 +#: utils/adt/jsonfuncs.c:3302 #, c-format msgid "could not determine row type for result of %s" msgstr "не удалось определить тип строки для результата %s" -#: utils/adt/jsonfuncs.c:3249 +#: utils/adt/jsonfuncs.c:3304 #, c-format msgid "" "Provide a non-null record argument, or call the function in the FROM clause " @@ -24062,73 +24598,99 @@ msgstr "" "Передайте отличный от NULL аргумент-запись или вызовите эту функцию в " "предложении FROM, используя список с определениями столбцов." -#: utils/adt/jsonfuncs.c:3737 utils/adt/jsonfuncs.c:3818 +#: utils/adt/jsonfuncs.c:3792 utils/adt/jsonfuncs.c:3873 #, c-format msgid "argument of %s must be an array of objects" msgstr "аргументом %s должен быть массив объектов" -#: utils/adt/jsonfuncs.c:3770 +#: utils/adt/jsonfuncs.c:3825 #, c-format msgid "cannot call %s on an object" msgstr "вызывать %s с объектом нельзя" -#: utils/adt/jsonfuncs.c:4247 utils/adt/jsonfuncs.c:4306 -#: utils/adt/jsonfuncs.c:4386 +#: utils/adt/jsonfuncs.c:4286 utils/adt/jsonfuncs.c:4345 +#: utils/adt/jsonfuncs.c:4425 #, c-format msgid "cannot delete from scalar" msgstr "удаление из скаляра невозможно" -#: utils/adt/jsonfuncs.c:4391 +#: utils/adt/jsonfuncs.c:4430 #, c-format msgid "cannot delete from object using integer index" msgstr "удаление из объекта по числовому индексу невозможно" -#: utils/adt/jsonfuncs.c:4457 utils/adt/jsonfuncs.c:4549 +#: utils/adt/jsonfuncs.c:4495 utils/adt/jsonfuncs.c:4653 #, c-format msgid "cannot set path in scalar" msgstr "задать путь в скаляре нельзя" -#: utils/adt/jsonfuncs.c:4502 +#: utils/adt/jsonfuncs.c:4537 utils/adt/jsonfuncs.c:4579 #, c-format -msgid "cannot delete path in scalar" -msgstr "удалить путь в скаляре нельзя" +msgid "" +"null_value_treatment must be \"delete_key\", \"return_target\", " +"\"use_json_null\", or \"raise_exception\"" +msgstr "" +"значением null_value_treatment должно быть \"delete_key\", \"return_target" +"\", \"use_json_null\" или \"raise_exception\"" + +#: utils/adt/jsonfuncs.c:4550 +#, c-format +msgid "JSON value must not be null" +msgstr "значение JSON не может быть NULL" + +#: utils/adt/jsonfuncs.c:4551 +#, c-format +msgid "" +"Exception was raised because null_value_treatment is \"raise_exception\"." +msgstr "" +"Выдано исключение, так как значением null_value_treatment является " +"\"raise_exception\"." + +#: utils/adt/jsonfuncs.c:4552 +#, c-format +msgid "" +"To avoid, either change the null_value_treatment argument or ensure that an " +"SQL NULL is not passed." +msgstr "" +"Чтобы исключения не было, либо измените аргумент null_value_treatment, либо " +"не допускайте передачи SQL NULL." -#: utils/adt/jsonfuncs.c:4672 +#: utils/adt/jsonfuncs.c:4607 #, c-format -msgid "invalid concatenation of jsonb objects" -msgstr "неверная конкатенация объектов jsonb" +msgid "cannot delete path in scalar" +msgstr "удалить путь в скаляре нельзя" -#: utils/adt/jsonfuncs.c:4706 +#: utils/adt/jsonfuncs.c:4805 #, c-format msgid "path element at position %d is null" msgstr "элемент пути в позиции %d равен NULL" -#: utils/adt/jsonfuncs.c:4792 +#: utils/adt/jsonfuncs.c:4891 #, c-format msgid "cannot replace existing key" msgstr "заменить существующий ключ нельзя" -#: utils/adt/jsonfuncs.c:4793 +#: utils/adt/jsonfuncs.c:4892 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "Попробуйте применить функцию jsonb_set для замены значения ключа." -#: utils/adt/jsonfuncs.c:4875 +#: utils/adt/jsonfuncs.c:4974 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "элемент пути в позиции %d - не целочисленный: \"%s\"" -#: utils/adt/jsonfuncs.c:4994 +#: utils/adt/jsonfuncs.c:5093 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "неверный тип флага, допускаются только массивы и скаляры" -#: utils/adt/jsonfuncs.c:5001 +#: utils/adt/jsonfuncs.c:5100 #, c-format msgid "flag array element is not a string" msgstr "элемент массива флагов не является строкой" -#: utils/adt/jsonfuncs.c:5002 utils/adt/jsonfuncs.c:5024 +#: utils/adt/jsonfuncs.c:5101 utils/adt/jsonfuncs.c:5123 #, c-format msgid "" "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all" @@ -24136,32 +24698,32 @@ msgid "" msgstr "" "Допустимые значения: \"string\", \"numeric\", \"boolean\", \"key\" и \"all\"." -#: utils/adt/jsonfuncs.c:5022 +#: utils/adt/jsonfuncs.c:5121 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "неверный флаг в массиве флагов: \"%s\"" -#: utils/adt/jsonpath.c:360 +#: utils/adt/jsonpath.c:362 #, c-format msgid "@ is not allowed in root expressions" msgstr "@ не допускается в корневых выражениях" -#: utils/adt/jsonpath.c:366 +#: utils/adt/jsonpath.c:368 #, c-format msgid "LAST is allowed only in array subscripts" msgstr "LAST принимается только в качестве индекса массива" -#: utils/adt/jsonpath_exec.c:340 +#: utils/adt/jsonpath_exec.c:360 #, c-format msgid "single boolean result is expected" msgstr "ожидался единственный булевский результат" -#: utils/adt/jsonpath_exec.c:488 +#: utils/adt/jsonpath_exec.c:556 #, c-format msgid "\"vars\" argument is not an object" msgstr "аргумент \"vars\" не является объектом" -#: utils/adt/jsonpath_exec.c:489 +#: utils/adt/jsonpath_exec.c:557 #, c-format msgid "" "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." @@ -24169,36 +24731,36 @@ msgstr "" "Параметры jsonpath должны передаваться в виде пар ключ-значение в объекте " "\"vars\"." -#: utils/adt/jsonpath_exec.c:605 +#: utils/adt/jsonpath_exec.c:674 #, c-format msgid "JSON object does not contain key \"%s\"" msgstr "JSON-объект не содержит ключ \"%s\"" -#: utils/adt/jsonpath_exec.c:617 +#: utils/adt/jsonpath_exec.c:686 #, c-format msgid "jsonpath member accessor can only be applied to an object" msgstr "" "выражение обращения к члену в jsonpath может применяться только к объекту" -#: utils/adt/jsonpath_exec.c:646 +#: utils/adt/jsonpath_exec.c:715 #, c-format msgid "jsonpath wildcard array accessor can only be applied to an array" msgstr "" "выражение обращения по звёздочке в jsonpath может применяться только к " "массиву" -#: utils/adt/jsonpath_exec.c:694 +#: utils/adt/jsonpath_exec.c:763 #, c-format msgid "jsonpath array subscript is out of bounds" msgstr "индекс массива в jsonpath вне диапазона" -#: utils/adt/jsonpath_exec.c:751 +#: utils/adt/jsonpath_exec.c:820 #, c-format msgid "jsonpath array accessor can only be applied to an array" msgstr "" "выражение обращения к массиву в jsonpath может применяться только к массиву" -#: utils/adt/jsonpath_exec.c:805 +#: utils/adt/jsonpath_exec.c:874 #, c-format msgid "jsonpath wildcard member accessor can only be applied to an object" msgstr "" @@ -24206,20 +24768,31 @@ msgstr "" "объекту" # skip-rule: space-before-period -#: utils/adt/jsonpath_exec.c:935 +#: utils/adt/jsonpath_exec.c:1004 #, c-format msgid "jsonpath item method .%s() can only be applied to an array" msgstr "метод .%s() в jsonpath может применяться только к массиву" -# skip-rule: space-before-period -#: utils/adt/jsonpath_exec.c:989 utils/adt/jsonpath_exec.c:1010 -#: utils/adt/jsonpath_exec.c:1680 +#: utils/adt/jsonpath_exec.c:1059 #, c-format -msgid "jsonpath item method .%s() can only be applied to a numeric value" -msgstr "метод .%s() в jsonpath может применяться только к числовому значению" +msgid "" +"numeric argument of jsonpath item method .%s() is out of range for type " +"double precision" +msgstr "" +"числовой аргумент метода элемента jsonpath .%s() вне диапазона для типа " +"double precision" + +#: utils/adt/jsonpath_exec.c:1080 +#, c-format +msgid "" +"string argument of jsonpath item method .%s() is not a valid representation " +"of a double precision number" +msgstr "" +"строковый аргумент метода элемента jsonpath .%s() не является представлением " +"значения double precision" # skip-rule: space-before-period -#: utils/adt/jsonpath_exec.c:1023 +#: utils/adt/jsonpath_exec.c:1093 #, c-format msgid "" "jsonpath item method .%s() can only be applied to a string or numeric value" @@ -24227,45 +24800,78 @@ msgstr "" "метод .%s() в jsonpath может применяться только к строковому или числовому " "значению" -#: utils/adt/jsonpath_exec.c:1507 +#: utils/adt/jsonpath_exec.c:1583 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "" "левый операнд оператора %s в jsonpath не является одним числовым значением" -#: utils/adt/jsonpath_exec.c:1514 +#: utils/adt/jsonpath_exec.c:1590 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "" "правый операнд оператора %s в jsonpath не является одним числовым значением" -#: utils/adt/jsonpath_exec.c:1582 +#: utils/adt/jsonpath_exec.c:1658 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "" "операнд унарного оператора %s в jsonpath не является числовым значением" # skip-rule: space-before-period -#: utils/adt/jsonpath_exec.c:1739 +#: utils/adt/jsonpath_exec.c:1756 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a numeric value" +msgstr "метод .%s() в jsonpath может применяться только к числовому значению" + +# skip-rule: space-before-period +#: utils/adt/jsonpath_exec.c:1796 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a string" +msgstr "метод .%s() в jsonpath может применяться только к строке" + +#: utils/adt/jsonpath_exec.c:1890 +#, c-format +msgid "datetime format is not recognized: \"%s\"" +msgstr "формат datetime не распознан: \"%s\"" + +#: utils/adt/jsonpath_exec.c:1892 +#, c-format +msgid "Use a datetime template argument to specify the input data format." +msgstr "" +"Воспользуйтесь аргументом datetime для указания формата входных данных." + +# skip-rule: space-before-period +#: utils/adt/jsonpath_exec.c:1960 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "метод .%s() в jsonpath может применяться только к объекту" -#: utils/adt/jsonpath_exec.c:1922 +#: utils/adt/jsonpath_exec.c:2143 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "не удалось найти в jsonpath переменную \"%s\"" -#: utils/adt/jsonpath_exec.c:2169 +#: utils/adt/jsonpath_exec.c:2407 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "индекс элемента в jsonpath не является одним числовым значением" -#: utils/adt/jsonpath_exec.c:2181 +#: utils/adt/jsonpath_exec.c:2419 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "индекс массива в jsonpath вне целочисленного диапазона" +#: utils/adt/jsonpath_exec.c:2596 +#, c-format +msgid "cannot convert value from %s to %s without time zone usage" +msgstr "значение %s нельзя преобразовать в %s без сведений о часовом поясе" + +#: utils/adt/jsonpath_exec.c:2598 +#, c-format +msgid "Use *_tz() function for time zone support." +msgstr "Для передачи часового пояса используйте функцию *_tz()." + # well-spelled: симв #: utils/adt/levenshtein.c:133 #, c-format @@ -24277,7 +24883,7 @@ msgstr "длина аргумента levenshtein() превышает макс msgid "nondeterministic collations are not supported for LIKE" msgstr "недетерминированные правила сортировки не поддерживаются для LIKE" -#: utils/adt/like.c:193 utils/adt/like_support.c:967 +#: utils/adt/like.c:193 utils/adt/like_support.c:1002 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "не удалось определить, какой порядок сортировки использовать для ILIKE" @@ -24287,38 +24893,31 @@ msgstr "не удалось определить, какой порядок со msgid "nondeterministic collations are not supported for ILIKE" msgstr "недетерминированные правила сортировки не поддерживаются для ILIKE" -#: utils/adt/like_match.c:107 utils/adt/like_match.c:167 +#: utils/adt/like_match.c:108 utils/adt/like_match.c:168 #, c-format msgid "LIKE pattern must not end with escape character" msgstr "шаблон LIKE не должен заканчиваться защитным символом" -#: utils/adt/like_match.c:292 utils/adt/regexp.c:702 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:700 #, c-format msgid "invalid escape string" msgstr "неверный защитный символ" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:703 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:701 #, c-format msgid "Escape string must be empty or one character." msgstr "Защитный символ должен быть пустым или состоять из одного байта." -#: utils/adt/like_support.c:952 +#: utils/adt/like_support.c:987 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "регистронезависимое сравнение не поддерживается для типа bytea" -#: utils/adt/like_support.c:1054 +#: utils/adt/like_support.c:1089 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "сравнение с регулярными выражениями не поддерживается для типа bytea" -#: utils/adt/lockfuncs.c:664 -#, c-format -msgid "cannot use advisory locks during a parallel operation" -msgstr "" -"использовать рекомендательные блокировки во время параллельных операций " -"нельзя" - #: utils/adt/mac.c:102 #, c-format msgid "invalid octet value in \"macaddr\" value: \"%s\"" @@ -24339,220 +24938,220 @@ msgstr "" "Преобразование из macaddr8 в macaddr возможно только для адресов, содержащих " "FF и FE в 4-ом и 5-ом байтах слева, например xx:xx:xx:ff:fe:xx:xx:xx." -#: utils/adt/misc.c:225 +#: utils/adt/misc.c:240 #, c-format msgid "global tablespace never has databases" msgstr "в табличном пространстве global никогда не было баз данных" -#: utils/adt/misc.c:246 +#: utils/adt/misc.c:262 #, c-format msgid "%u is not a tablespace OID" msgstr "%u - это не OID табличного пространства" -#: utils/adt/misc.c:435 +#: utils/adt/misc.c:448 msgid "unreserved" msgstr "не зарезервировано" -#: utils/adt/misc.c:439 +#: utils/adt/misc.c:452 msgid "unreserved (cannot be function or type name)" msgstr "не зарезервировано (но не может быть именем типа или функции)" -#: utils/adt/misc.c:443 +#: utils/adt/misc.c:456 msgid "reserved (can be function or type name)" msgstr "зарезервировано (но может быть именем типа или функции)" -#: utils/adt/misc.c:447 +#: utils/adt/misc.c:460 msgid "reserved" msgstr "зарезервировано" -#: utils/adt/misc.c:621 utils/adt/misc.c:635 utils/adt/misc.c:674 -#: utils/adt/misc.c:680 utils/adt/misc.c:686 utils/adt/misc.c:709 +#: utils/adt/misc.c:634 utils/adt/misc.c:648 utils/adt/misc.c:687 +#: utils/adt/misc.c:693 utils/adt/misc.c:699 utils/adt/misc.c:722 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "строка не является допустимым идентификатором: \"%s\"" -#: utils/adt/misc.c:623 +#: utils/adt/misc.c:636 #, c-format msgid "String has unclosed double quotes." msgstr "В строке не закрыты кавычки." -#: utils/adt/misc.c:637 +#: utils/adt/misc.c:650 #, c-format msgid "Quoted identifier must not be empty." msgstr "Идентификатор в кавычках не может быть пустым." -#: utils/adt/misc.c:676 +#: utils/adt/misc.c:689 #, c-format msgid "No valid identifier before \".\"." msgstr "Перед \".\" нет допустимого идентификатора." -#: utils/adt/misc.c:682 +#: utils/adt/misc.c:695 #, c-format msgid "No valid identifier after \".\"." msgstr "После \".\" нет допустимого идентификатора." -#: utils/adt/misc.c:743 +#: utils/adt/misc.c:753 #, c-format msgid "log format \"%s\" is not supported" msgstr "формат журнала \"%s\" не поддерживается" -#: utils/adt/misc.c:744 +#: utils/adt/misc.c:754 #, c-format msgid "The supported log formats are \"stderr\" and \"csvlog\"." msgstr "Поддерживаются форматы журналов \"stderr\" и \"csvlog\"." -#: utils/adt/network.c:85 +#: utils/adt/network.c:111 #, c-format msgid "invalid cidr value: \"%s\"" msgstr "неверное значение cidr: \"%s\"" -#: utils/adt/network.c:86 utils/adt/network.c:216 +#: utils/adt/network.c:112 utils/adt/network.c:242 #, c-format msgid "Value has bits set to right of mask." msgstr "Значение содержит установленные биты правее маски." -#: utils/adt/network.c:127 utils/adt/network.c:800 utils/adt/network.c:825 -#: utils/adt/network.c:850 +#: utils/adt/network.c:153 utils/adt/network.c:1199 utils/adt/network.c:1224 +#: utils/adt/network.c:1249 #, c-format msgid "could not format inet value: %m" msgstr "не удалось отформатировать значение inet: %m" #. translator: %s is inet or cidr -#: utils/adt/network.c:184 +#: utils/adt/network.c:210 #, c-format msgid "invalid address family in external \"%s\" value" msgstr "неверное семейство адресов во внешнем представлении \"%s\"" #. translator: %s is inet or cidr -#: utils/adt/network.c:191 +#: utils/adt/network.c:217 #, c-format msgid "invalid bits in external \"%s\" value" msgstr "неверные биты во внешнем представлении \"%s\"" #. translator: %s is inet or cidr -#: utils/adt/network.c:200 +#: utils/adt/network.c:226 #, c-format msgid "invalid length in external \"%s\" value" msgstr "неверная длина во внешнем представлении \"%s\"" -#: utils/adt/network.c:215 +#: utils/adt/network.c:241 #, c-format msgid "invalid external \"cidr\" value" msgstr "неверное внешнее представление \"cidr\"" -#: utils/adt/network.c:311 utils/adt/network.c:334 +#: utils/adt/network.c:337 utils/adt/network.c:360 #, c-format msgid "invalid mask length: %d" msgstr "неверная длина маски: %d" -#: utils/adt/network.c:868 +#: utils/adt/network.c:1267 #, c-format msgid "could not format cidr value: %m" msgstr "не удалось отформатировать значение cidr: %m" -#: utils/adt/network.c:1101 +#: utils/adt/network.c:1500 #, c-format msgid "cannot merge addresses from different families" msgstr "объединять адреса разных семейств нельзя" -#: utils/adt/network.c:1517 +#: utils/adt/network.c:1916 #, c-format msgid "cannot AND inet values of different sizes" msgstr "нельзя использовать \"И\" (AND) для значений inet разного размера" -#: utils/adt/network.c:1549 +#: utils/adt/network.c:1948 #, c-format msgid "cannot OR inet values of different sizes" msgstr "нельзя использовать \"ИЛИ\" (OR) для значений inet разного размера" -#: utils/adt/network.c:1610 utils/adt/network.c:1686 +#: utils/adt/network.c:2009 utils/adt/network.c:2085 #, c-format msgid "result is out of range" msgstr "результат вне диапазона" -#: utils/adt/network.c:1651 +#: utils/adt/network.c:2050 #, c-format msgid "cannot subtract inet values of different sizes" msgstr "нельзя вычитать значения inet разного размера" -#: utils/adt/numeric.c:833 +#: utils/adt/numeric.c:827 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "неверный знак во внешнем значении \"numeric\"" -#: utils/adt/numeric.c:839 +#: utils/adt/numeric.c:833 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "неверный порядок числа во внешнем значении \"numeric\"" -#: utils/adt/numeric.c:848 +#: utils/adt/numeric.c:842 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "неверная цифра во внешнем значении \"numeric\"" -#: utils/adt/numeric.c:1046 utils/adt/numeric.c:1060 +#: utils/adt/numeric.c:1040 utils/adt/numeric.c:1054 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "точность NUMERIC %d должна быть между 1 и %d" -#: utils/adt/numeric.c:1051 +#: utils/adt/numeric.c:1045 #, c-format msgid "NUMERIC scale %d must be between 0 and precision %d" msgstr "порядок NUMERIC %d должен быть между 0 и точностью (%d)" -#: utils/adt/numeric.c:1069 +#: utils/adt/numeric.c:1063 #, c-format msgid "invalid NUMERIC type modifier" msgstr "неверный модификатор типа NUMERIC" -#: utils/adt/numeric.c:1401 +#: utils/adt/numeric.c:1395 #, c-format msgid "start value cannot be NaN" msgstr "начальное значение не может быть NaN" -#: utils/adt/numeric.c:1406 +#: utils/adt/numeric.c:1400 #, c-format msgid "stop value cannot be NaN" msgstr "конечное значение не может быть NaN" -#: utils/adt/numeric.c:1416 +#: utils/adt/numeric.c:1410 #, c-format msgid "step size cannot be NaN" msgstr "размер шага не может быть NaN" -#: utils/adt/numeric.c:2857 utils/adt/numeric.c:5869 utils/adt/numeric.c:6324 -#: utils/adt/numeric.c:8046 utils/adt/numeric.c:8471 utils/adt/numeric.c:8585 -#: utils/adt/numeric.c:8658 +#: utils/adt/numeric.c:2958 utils/adt/numeric.c:6064 utils/adt/numeric.c:6522 +#: utils/adt/numeric.c:8802 utils/adt/numeric.c:9240 utils/adt/numeric.c:9354 +#: utils/adt/numeric.c:9427 #, c-format msgid "value overflows numeric format" msgstr "значение переполняет формат numeric" -#: utils/adt/numeric.c:3222 +#: utils/adt/numeric.c:3417 #, c-format msgid "cannot convert NaN to integer" msgstr "нельзя преобразовать NaN в integer" -#: utils/adt/numeric.c:3305 +#: utils/adt/numeric.c:3500 #, c-format msgid "cannot convert NaN to bigint" msgstr "нельзя преобразовать NaN в bigint" -#: utils/adt/numeric.c:3350 +#: utils/adt/numeric.c:3545 #, c-format msgid "cannot convert NaN to smallint" msgstr "нельзя преобразовать NaN в smallint" -#: utils/adt/numeric.c:3387 utils/adt/numeric.c:3458 +#: utils/adt/numeric.c:3582 utils/adt/numeric.c:3653 #, c-format msgid "cannot convert infinity to numeric" msgstr "нельзя представить бесконечность в numeric" -#: utils/adt/numeric.c:6408 +#: utils/adt/numeric.c:6606 #, c-format msgid "numeric field overflow" msgstr "переполнение поля numeric" -#: utils/adt/numeric.c:6409 +#: utils/adt/numeric.c:6607 #, c-format msgid "" "A field with precision %d, scale %d must round to an absolute value less " @@ -24561,7 +25160,7 @@ msgstr "" "Поле с точностью %d, порядком %d должно округляться до абсолютного значения " "меньше чем %s%d." -#: utils/adt/numutils.c:90 +#: utils/adt/numutils.c:154 #, c-format msgid "value \"%s\" is out of range for 8-bit integer" msgstr "значение \"%s\" вне диапазона для 8-битового integer" @@ -24597,24 +25196,24 @@ msgstr "символ не может быть null" msgid "percentile value %g is not between 0 and 1" msgstr "значение перцентиля %g лежит не в диапазоне 0..1" -#: utils/adt/pg_locale.c:1097 +#: utils/adt/pg_locale.c:1262 #, c-format msgid "Apply system library package updates." msgstr "Обновите пакет с системной библиотекой." -#: utils/adt/pg_locale.c:1312 +#: utils/adt/pg_locale.c:1477 #, c-format msgid "could not create locale \"%s\": %m" msgstr "не удалось создать локаль \"%s\": %m" -#: utils/adt/pg_locale.c:1315 +#: utils/adt/pg_locale.c:1480 #, c-format msgid "" "The operating system could not find any locale data for the locale name \"%s" "\"." msgstr "Операционная система не может найти данные локали с именем \"%s\"." -#: utils/adt/pg_locale.c:1417 +#: utils/adt/pg_locale.c:1582 #, c-format msgid "" "collations with different collate and ctype values are not supported on this " @@ -24623,45 +25222,45 @@ msgstr "" "правила сортировки с разными значениями collate и ctype не поддерживаются на " "этой платформе" -#: utils/adt/pg_locale.c:1426 +#: utils/adt/pg_locale.c:1591 #, c-format msgid "collation provider LIBC is not supported on this platform" msgstr "поставщик правил сортировки LIBC не поддерживается на этой платформе" -#: utils/adt/pg_locale.c:1438 +#: utils/adt/pg_locale.c:1603 #, c-format msgid "" "collations with different collate and ctype values are not supported by ICU" msgstr "" "ICU не поддерживает правила сортировки с разными значениями collate и ctype" -#: utils/adt/pg_locale.c:1444 utils/adt/pg_locale.c:1535 -#: utils/adt/pg_locale.c:1753 +#: utils/adt/pg_locale.c:1609 utils/adt/pg_locale.c:1696 +#: utils/adt/pg_locale.c:1969 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "не удалось открыть сортировщик для локали \"%s\": %s" -#: utils/adt/pg_locale.c:1458 +#: utils/adt/pg_locale.c:1623 #, c-format msgid "ICU is not supported in this build" msgstr "ICU не поддерживается в данной сборке" -#: utils/adt/pg_locale.c:1459 +#: utils/adt/pg_locale.c:1624 #, c-format msgid "You need to rebuild PostgreSQL using --with-icu." msgstr "Необходимо перекомпилировать PostgreSQL с ключом --with-icu." -#: utils/adt/pg_locale.c:1479 +#: utils/adt/pg_locale.c:1644 #, c-format msgid "collation \"%s\" has no actual version, but a version was specified" msgstr "для правила сортировки \"%s\", лишённого версии, была задана версия" -#: utils/adt/pg_locale.c:1486 +#: utils/adt/pg_locale.c:1651 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "несовпадение версии для правила сортировки \"%s\"" -#: utils/adt/pg_locale.c:1488 +#: utils/adt/pg_locale.c:1653 #, c-format msgid "" "The collation in the database was created using version %s, but the " @@ -24670,7 +25269,7 @@ msgstr "" "Правило сортировки в базе данных было создано с версией %s, но операционная " "версия предоставляет версию %s." -#: utils/adt/pg_locale.c:1491 +#: utils/adt/pg_locale.c:1656 #, c-format msgid "" "Rebuild all objects affected by this collation and run ALTER COLLATION %s " @@ -24680,23 +25279,35 @@ msgstr "" "ALTER COLLATION %s REFRESH VERSION либо соберите PostgreSQL с правильной " "версией библиотеки." -#: utils/adt/pg_locale.c:1575 +#: utils/adt/pg_locale.c:1747 +#, c-format +msgid "could not get collation version for locale \"%s\": error code %lu" +msgstr "" +"не удалось получить версию правила сортировки для локали \"%s\" (код ошибки: " +"%lu)" + +#: utils/adt/pg_locale.c:1784 +#, c-format +msgid "encoding \"%s\" not supported by ICU" +msgstr "ICU не поддерживает кодировку \"%s\"" + +#: utils/adt/pg_locale.c:1791 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "не удалось открыть преобразователь ICU для кодировки \"%s\": %s" -#: utils/adt/pg_locale.c:1606 utils/adt/pg_locale.c:1615 -#: utils/adt/pg_locale.c:1644 utils/adt/pg_locale.c:1654 +#: utils/adt/pg_locale.c:1822 utils/adt/pg_locale.c:1831 +#: utils/adt/pg_locale.c:1860 utils/adt/pg_locale.c:1870 #, c-format msgid "%s failed: %s" msgstr "ошибка %s: %s" -#: utils/adt/pg_locale.c:1926 +#: utils/adt/pg_locale.c:2142 #, c-format msgid "invalid multibyte character for locale" msgstr "неверный многобайтный символ для локали" -#: utils/adt/pg_locale.c:1927 +#: utils/adt/pg_locale.c:2143 #, c-format msgid "" "The server's LC_CTYPE locale is probably incompatible with the database " @@ -24710,31 +25321,26 @@ msgid "function can only be called when server is in binary upgrade mode" msgstr "" "функцию можно вызывать только когда сервер в режиме двоичного обновления" -#: utils/adt/pgstatfuncs.c:479 +#: utils/adt/pgstatfuncs.c:500 #, c-format msgid "invalid command name: \"%s\"" msgstr "неверное имя команды: \"%s\"" -#: utils/adt/pseudotypes.c:247 +#: utils/adt/pseudotypes.c:57 utils/adt/pseudotypes.c:91 +#, c-format +msgid "cannot display a value of type %s" +msgstr "значение типа %s нельзя вывести" + +#: utils/adt/pseudotypes.c:283 #, c-format msgid "cannot accept a value of a shell type" msgstr "значение типа shell нельзя ввести" -#: utils/adt/pseudotypes.c:260 +#: utils/adt/pseudotypes.c:293 #, c-format msgid "cannot display a value of a shell type" msgstr "значение типа shell нельзя вывести" -#: utils/adt/pseudotypes.c:350 utils/adt/pseudotypes.c:376 -#, c-format -msgid "cannot output a value of type %s" -msgstr "значение типа %s нельзя вывести" - -#: utils/adt/pseudotypes.c:403 -#, c-format -msgid "cannot display a value of type %s" -msgstr "значение типа %s нельзя вывести" - #: utils/adt/rangetypes.c:406 #, c-format msgid "range constructor flags argument must not be null" @@ -24800,7 +25406,7 @@ msgstr "Слишком много запятых." msgid "Junk after right parenthesis or bracket." msgstr "Мусор после правой скобки." -#: utils/adt/regexp.c:289 utils/adt/regexp.c:1490 utils/adt/varlena.c:4459 +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4511 #, c-format msgid "regular expression failed: %s" msgstr "ошибка в регулярном выражении: %s" @@ -24810,7 +25416,7 @@ msgstr "ошибка в регулярном выражении: %s" msgid "invalid regular expression option: \"%c\"" msgstr "неверный параметр регулярного выражения: \"%c\"" -#: utils/adt/regexp.c:838 +#: utils/adt/regexp.c:836 #, c-format msgid "" "SQL regular expression may not contain more than two escape-double-quote " @@ -24820,113 +25426,113 @@ msgstr "" "(экранированных кавычек)" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:924 utils/adt/regexp.c:1307 utils/adt/regexp.c:1362 +#: utils/adt/regexp.c:981 utils/adt/regexp.c:1363 utils/adt/regexp.c:1418 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s не поддерживает режим \"global\"" -#: utils/adt/regexp.c:926 +#: utils/adt/regexp.c:983 #, c-format msgid "Use the regexp_matches function instead." msgstr "Вместо неё используйте функцию regexp_matches." -#: utils/adt/regexp.c:1108 +#: utils/adt/regexp.c:1165 #, c-format msgid "too many regular expression matches" msgstr "слишком много совпадений для регулярного выражения" -#: utils/adt/regproc.c:106 +#: utils/adt/regproc.c:107 #, c-format msgid "more than one function named \"%s\"" msgstr "имя \"%s\" имеют несколько функций" -#: utils/adt/regproc.c:524 +#: utils/adt/regproc.c:525 #, c-format msgid "more than one operator named %s" msgstr "имя %s имеют несколько операторов" -#: utils/adt/regproc.c:691 utils/adt/regproc.c:732 gram.y:8145 +#: utils/adt/regproc.c:692 utils/adt/regproc.c:733 gram.y:8224 #, c-format msgid "missing argument" msgstr "отсутствует аргумент" -#: utils/adt/regproc.c:692 utils/adt/regproc.c:733 gram.y:8146 +#: utils/adt/regproc.c:693 utils/adt/regproc.c:734 gram.y:8225 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "" "Чтобы обозначить отсутствующий аргумент унарного оператора, укажите NONE." -#: utils/adt/regproc.c:696 utils/adt/regproc.c:737 utils/adt/regproc.c:1865 -#: utils/adt/ruleutils.c:9224 utils/adt/ruleutils.c:9392 +#: utils/adt/regproc.c:697 utils/adt/regproc.c:738 utils/adt/regproc.c:2018 +#: utils/adt/ruleutils.c:9298 utils/adt/ruleutils.c:9467 #, c-format msgid "too many arguments" msgstr "слишком много аргументов" -#: utils/adt/regproc.c:697 utils/adt/regproc.c:738 +#: utils/adt/regproc.c:698 utils/adt/regproc.c:739 #, c-format msgid "Provide two argument types for operator." msgstr "Предоставьте для оператора два типа аргументов." -#: utils/adt/regproc.c:1449 utils/adt/regproc.c:1473 utils/adt/regproc.c:1574 -#: utils/adt/regproc.c:1598 utils/adt/regproc.c:1700 utils/adt/regproc.c:1705 -#: utils/adt/varlena.c:3608 utils/adt/varlena.c:3613 +#: utils/adt/regproc.c:1602 utils/adt/regproc.c:1626 utils/adt/regproc.c:1727 +#: utils/adt/regproc.c:1751 utils/adt/regproc.c:1853 utils/adt/regproc.c:1858 +#: utils/adt/varlena.c:3660 utils/adt/varlena.c:3665 #, c-format msgid "invalid name syntax" msgstr "ошибка синтаксиса в имени" -#: utils/adt/regproc.c:1763 +#: utils/adt/regproc.c:1916 #, c-format msgid "expected a left parenthesis" msgstr "ожидалась левая скобка" -#: utils/adt/regproc.c:1779 +#: utils/adt/regproc.c:1932 #, c-format msgid "expected a right parenthesis" msgstr "ожидалась правая скобка" -#: utils/adt/regproc.c:1798 +#: utils/adt/regproc.c:1951 #, c-format msgid "expected a type name" msgstr "ожидалось имя типа" -#: utils/adt/regproc.c:1830 +#: utils/adt/regproc.c:1983 #, c-format msgid "improper type name" msgstr "ошибочное имя типа" -#: utils/adt/ri_triggers.c:298 utils/adt/ri_triggers.c:1534 -#: utils/adt/ri_triggers.c:2465 +#: utils/adt/ri_triggers.c:296 utils/adt/ri_triggers.c:1537 +#: utils/adt/ri_triggers.c:2467 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "" "INSERT или UPDATE в таблице \"%s\" нарушает ограничение внешнего ключа \"%s\"" -#: utils/adt/ri_triggers.c:301 utils/adt/ri_triggers.c:1537 +#: utils/adt/ri_triggers.c:299 utils/adt/ri_triggers.c:1540 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL не позволяет смешивать в значении ключа null и не null." -#: utils/adt/ri_triggers.c:1932 +#: utils/adt/ri_triggers.c:1940 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "функция \"%s\" должна запускаться для INSERT" -#: utils/adt/ri_triggers.c:1938 +#: utils/adt/ri_triggers.c:1946 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "функция \"%s\" должна запускаться для UPDATE" -#: utils/adt/ri_triggers.c:1944 +#: utils/adt/ri_triggers.c:1952 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "функция \"%s\" должна запускаться для DELETE" -#: utils/adt/ri_triggers.c:1967 +#: utils/adt/ri_triggers.c:1975 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "для триггера \"%s\" таблицы \"%s\" нет записи pg_constraint" -#: utils/adt/ri_triggers.c:1969 +#: utils/adt/ri_triggers.c:1977 #, c-format msgid "" "Remove this referential integrity trigger and its mates, then do ALTER TABLE " @@ -24935,12 +25541,12 @@ msgstr "" "Удалите этот триггер ссылочной целостности и связанные объекты, а затем " "выполните ALTER TABLE ADD CONSTRAINT." -#: utils/adt/ri_triggers.c:1999 gram.y:3784 +#: utils/adt/ri_triggers.c:2007 gram.y:3819 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "выражение MATCH PARTIAL ещё не реализовано" -#: utils/adt/ri_triggers.c:2291 +#: utils/adt/ri_triggers.c:2292 #, c-format msgid "" "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave " @@ -24949,33 +25555,33 @@ msgstr "" "неожиданный результат запроса ссылочной целостности к \"%s\" из ограничения " "\"%s\" таблицы \"%s\"" -#: utils/adt/ri_triggers.c:2295 +#: utils/adt/ri_triggers.c:2296 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Скорее всего это вызвано правилом, переписавшим запрос." -#: utils/adt/ri_triggers.c:2456 +#: utils/adt/ri_triggers.c:2457 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "" "при удалении секции \"%s\" нарушается ограничение внешнего ключа \"%s\"" -#: utils/adt/ri_triggers.c:2459 utils/adt/ri_triggers.c:2483 +#: utils/adt/ri_triggers.c:2460 utils/adt/ri_triggers.c:2485 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "На ключ (%s)=(%s) всё ещё есть ссылки в таблице \"%s\"." -#: utils/adt/ri_triggers.c:2469 +#: utils/adt/ri_triggers.c:2471 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "Ключ (%s)=(%s) отсутствует в таблице \"%s\"." -#: utils/adt/ri_triggers.c:2472 +#: utils/adt/ri_triggers.c:2474 #, c-format msgid "Key is not present in table \"%s\"." msgstr "Ключ отсутствует в таблице \"%s\"." -#: utils/adt/ri_triggers.c:2478 +#: utils/adt/ri_triggers.c:2480 #, c-format msgid "" "update or delete on table \"%s\" violates foreign key constraint \"%s\" on " @@ -24984,7 +25590,7 @@ msgstr "" "UPDATE или DELETE в таблице \"%s\" нарушает ограничение внешнего ключа \"%s" "\" таблицы \"%s\"" -#: utils/adt/ri_triggers.c:2486 +#: utils/adt/ri_triggers.c:2488 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "На ключ всё ещё есть ссылки в таблице \"%s\"." @@ -25035,19 +25641,19 @@ msgstr "неверный тип данных: %u, ожидался %u" msgid "improper binary format in record column %d" msgstr "неподходящий двоичный формат в столбце записи %d" -#: utils/adt/rowtypes.c:911 utils/adt/rowtypes.c:1155 utils/adt/rowtypes.c:1414 -#: utils/adt/rowtypes.c:1660 +#: utils/adt/rowtypes.c:911 utils/adt/rowtypes.c:1157 utils/adt/rowtypes.c:1415 +#: utils/adt/rowtypes.c:1661 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "не удалось сравнить различные типы столбцов %s и %s, столбец записи %d" -#: utils/adt/rowtypes.c:1000 utils/adt/rowtypes.c:1226 -#: utils/adt/rowtypes.c:1511 utils/adt/rowtypes.c:1696 +#: utils/adt/rowtypes.c:1002 utils/adt/rowtypes.c:1227 +#: utils/adt/rowtypes.c:1512 utils/adt/rowtypes.c:1697 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "сравнивать типы записей с разным числом столбцов нельзя" -#: utils/adt/ruleutils.c:4885 +#: utils/adt/ruleutils.c:4822 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "правило \"%s\" имеет неподдерживаемый тип событий %d" @@ -25062,106 +25668,106 @@ msgstr "TIMESTAMP(%d)%s: точность должна быть неотрица msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "TIMESTAMP(%d)%s: точность уменьшена до дозволенного максимума: %d" -#: utils/adt/timestamp.c:176 utils/adt/timestamp.c:419 utils/misc/guc.c:11659 +#: utils/adt/timestamp.c:176 utils/adt/timestamp.c:434 utils/misc/guc.c:11929 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp вне диапазона: \"%s\"" -#: utils/adt/timestamp.c:365 +#: utils/adt/timestamp.c:372 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "точность timestamp(%d) должна быть между %d и %d" -#: utils/adt/timestamp.c:481 +#: utils/adt/timestamp.c:496 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "" "Запись числового часового пояса должна начинаться с символа \"-\" или \"+\"." -#: utils/adt/timestamp.c:494 +#: utils/adt/timestamp.c:509 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "числовой часовой пояс \"%s\" вне диапазона" -#: utils/adt/timestamp.c:596 utils/adt/timestamp.c:606 -#: utils/adt/timestamp.c:614 +#: utils/adt/timestamp.c:601 utils/adt/timestamp.c:611 +#: utils/adt/timestamp.c:619 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestamp вне диапазона: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:715 +#: utils/adt/timestamp.c:720 #, c-format msgid "timestamp cannot be NaN" msgstr "timestamp не может быть NaN" -#: utils/adt/timestamp.c:733 utils/adt/timestamp.c:745 +#: utils/adt/timestamp.c:738 utils/adt/timestamp.c:750 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "timestamp вне диапазона: \"%g\"" -#: utils/adt/timestamp.c:930 utils/adt/timestamp.c:1504 -#: utils/adt/timestamp.c:1937 utils/adt/timestamp.c:3035 -#: utils/adt/timestamp.c:3040 utils/adt/timestamp.c:3045 -#: utils/adt/timestamp.c:3095 utils/adt/timestamp.c:3102 -#: utils/adt/timestamp.c:3109 utils/adt/timestamp.c:3129 -#: utils/adt/timestamp.c:3136 utils/adt/timestamp.c:3143 -#: utils/adt/timestamp.c:3173 utils/adt/timestamp.c:3181 -#: utils/adt/timestamp.c:3225 utils/adt/timestamp.c:3652 -#: utils/adt/timestamp.c:3777 utils/adt/timestamp.c:4237 +#: utils/adt/timestamp.c:935 utils/adt/timestamp.c:1509 +#: utils/adt/timestamp.c:1976 utils/adt/timestamp.c:3053 +#: utils/adt/timestamp.c:3058 utils/adt/timestamp.c:3063 +#: utils/adt/timestamp.c:3113 utils/adt/timestamp.c:3120 +#: utils/adt/timestamp.c:3127 utils/adt/timestamp.c:3147 +#: utils/adt/timestamp.c:3154 utils/adt/timestamp.c:3161 +#: utils/adt/timestamp.c:3191 utils/adt/timestamp.c:3199 +#: utils/adt/timestamp.c:3243 utils/adt/timestamp.c:3670 +#: utils/adt/timestamp.c:3795 utils/adt/timestamp.c:4255 #, c-format msgid "interval out of range" msgstr "interval вне диапазона" -#: utils/adt/timestamp.c:1057 utils/adt/timestamp.c:1090 +#: utils/adt/timestamp.c:1062 utils/adt/timestamp.c:1095 #, c-format msgid "invalid INTERVAL type modifier" msgstr "неверный модификатор типа INTERVAL" -#: utils/adt/timestamp.c:1073 +#: utils/adt/timestamp.c:1078 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "INTERVAL(%d): точность должна быть неотрицательна" -#: utils/adt/timestamp.c:1079 +#: utils/adt/timestamp.c:1084 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "INTERVAL(%d): точность уменьшена до максимально возможной: %d" -#: utils/adt/timestamp.c:1461 +#: utils/adt/timestamp.c:1466 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "точность interval(%d) должна быть между %d и %d" -#: utils/adt/timestamp.c:2636 +#: utils/adt/timestamp.c:2654 #, c-format msgid "cannot subtract infinite timestamps" msgstr "вычитать бесконечные значения timestamp нельзя" -#: utils/adt/timestamp.c:3905 utils/adt/timestamp.c:4498 -#: utils/adt/timestamp.c:4660 utils/adt/timestamp.c:4681 +#: utils/adt/timestamp.c:3923 utils/adt/timestamp.c:4516 +#: utils/adt/timestamp.c:4678 utils/adt/timestamp.c:4699 #, c-format msgid "timestamp units \"%s\" not supported" msgstr "единицы timestamp \"%s\" не поддерживаются" -#: utils/adt/timestamp.c:3919 utils/adt/timestamp.c:4452 -#: utils/adt/timestamp.c:4691 +#: utils/adt/timestamp.c:3937 utils/adt/timestamp.c:4470 +#: utils/adt/timestamp.c:4709 #, c-format msgid "timestamp units \"%s\" not recognized" msgstr "единицы timestamp \"%s\" не распознаны" -#: utils/adt/timestamp.c:4049 utils/adt/timestamp.c:4493 -#: utils/adt/timestamp.c:4856 utils/adt/timestamp.c:4878 +#: utils/adt/timestamp.c:4067 utils/adt/timestamp.c:4511 +#: utils/adt/timestamp.c:4874 utils/adt/timestamp.c:4896 #, c-format msgid "timestamp with time zone units \"%s\" not supported" msgstr "единицы timestamp с часовым поясом \"%s\" не поддерживаются" -#: utils/adt/timestamp.c:4066 utils/adt/timestamp.c:4447 -#: utils/adt/timestamp.c:4887 +#: utils/adt/timestamp.c:4084 utils/adt/timestamp.c:4465 +#: utils/adt/timestamp.c:4905 #, c-format msgid "timestamp with time zone units \"%s\" not recognized" msgstr "единицы timestamp с часовым поясом \"%s\" не распознаны" -#: utils/adt/timestamp.c:4224 +#: utils/adt/timestamp.c:4242 #, c-format msgid "" "interval units \"%s\" not supported because months usually have fractional " @@ -25170,12 +25776,12 @@ msgstr "" "единицы интервала \"%s\" не поддерживаются, так как в месяцах дробное число " "недель" -#: utils/adt/timestamp.c:4230 utils/adt/timestamp.c:4981 +#: utils/adt/timestamp.c:4248 utils/adt/timestamp.c:4999 #, c-format msgid "interval units \"%s\" not supported" msgstr "единицы interval \"%s\" не поддерживаются" -#: utils/adt/timestamp.c:4246 utils/adt/timestamp.c:5004 +#: utils/adt/timestamp.c:4264 utils/adt/timestamp.c:5022 #, c-format msgid "interval units \"%s\" not recognized" msgstr "единицы interval \"%s\" не распознаны" @@ -25206,7 +25812,7 @@ msgstr "" "функция suppress_redundant_updates_trigger должна вызываться для каждой " "строки" -#: utils/adt/tsgistidx.c:81 +#: utils/adt/tsgistidx.c:92 #, c-format msgid "gtsvector_in not implemented" msgstr "функция gtsvector_in не реализована" @@ -25261,7 +25867,7 @@ msgstr "" "запрос поиска текста игнорируется, так как содержит только стоп-слова или не " "содержит лексем" -#: utils/adt/tsquery_op.c:123 +#: utils/adt/tsquery_op.c:124 #, c-format msgid "distance in phrase operator should be non-negative and less than %d" msgstr "" @@ -25272,88 +25878,88 @@ msgstr "" msgid "ts_rewrite query must return two tsquery columns" msgstr "запрос ts_rewrite должен вернуть два столбца типа tsquery" -#: utils/adt/tsrank.c:413 +#: utils/adt/tsrank.c:412 #, c-format msgid "array of weight must be one-dimensional" msgstr "массив весов должен быть одномерным" -#: utils/adt/tsrank.c:418 +#: utils/adt/tsrank.c:417 #, c-format msgid "array of weight is too short" msgstr "массив весов слишком мал" -#: utils/adt/tsrank.c:423 +#: utils/adt/tsrank.c:422 #, c-format msgid "array of weight must not contain nulls" msgstr "массив весов не может содержать null" -#: utils/adt/tsrank.c:432 utils/adt/tsrank.c:869 +#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:872 #, c-format msgid "weight out of range" msgstr "вес вне диапазона" -#: utils/adt/tsvector.c:214 +#: utils/adt/tsvector.c:215 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "слово слишком длинное (%ld Б, при максимуме %ld)" -#: utils/adt/tsvector.c:221 +#: utils/adt/tsvector.c:222 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "строка слишком длинна для tsvector (%ld Б, при максимуме %ld)" -#: utils/adt/tsvector_op.c:321 utils/adt/tsvector_op.c:608 -#: utils/adt/tsvector_op.c:776 +#: utils/adt/tsvector_op.c:328 utils/adt/tsvector_op.c:608 +#: utils/adt/tsvector_op.c:770 #, c-format msgid "lexeme array may not contain nulls" msgstr "массив лексем не может содержать элементы null" -#: utils/adt/tsvector_op.c:851 +#: utils/adt/tsvector_op.c:840 #, c-format msgid "weight array may not contain nulls" msgstr "массив весов не может содержать элементы null" -#: utils/adt/tsvector_op.c:875 +#: utils/adt/tsvector_op.c:864 #, c-format msgid "unrecognized weight: \"%c\"" msgstr "нераспознанный вес: \"%c\"" -#: utils/adt/tsvector_op.c:2312 +#: utils/adt/tsvector_op.c:2414 #, c-format msgid "ts_stat query must return one tsvector column" msgstr "запрос ts_stat должен вернуть один столбец tsvector" -#: utils/adt/tsvector_op.c:2494 +#: utils/adt/tsvector_op.c:2603 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "столбец \"%s\" типа tsvector не существует" -#: utils/adt/tsvector_op.c:2501 +#: utils/adt/tsvector_op.c:2610 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "столбец \"%s\" должен иметь тип tsvector" -#: utils/adt/tsvector_op.c:2513 +#: utils/adt/tsvector_op.c:2622 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "столбец конфигурации \"%s\" не существует" -#: utils/adt/tsvector_op.c:2519 +#: utils/adt/tsvector_op.c:2628 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "столбец \"%s\" должен иметь тип regconfig" -#: utils/adt/tsvector_op.c:2526 +#: utils/adt/tsvector_op.c:2635 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "значение столбца конфигурации \"%s\" не должно быть null" -#: utils/adt/tsvector_op.c:2539 +#: utils/adt/tsvector_op.c:2648 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "имя конфигурации текстового поиска \"%s\" должно указываться со схемой" -#: utils/adt/tsvector_op.c:2564 +#: utils/adt/tsvector_op.c:2673 #, c-format msgid "column \"%s\" is not of a character type" msgstr "столбец \"%s\" имеет не символьный тип" @@ -25374,22 +25980,17 @@ msgstr "нет спец. символа \"%s\"" msgid "wrong position info in tsvector: \"%s\"" msgstr "неверная информация о позиции в tsvector: \"%s\"" -#: utils/adt/txid.c:140 -#, c-format -msgid "transaction ID %s is in the future" -msgstr "идентификатор транзакции %s относится к будущему" - -#: utils/adt/txid.c:629 +#: utils/adt/uuid.c:428 #, c-format -msgid "invalid external txid_snapshot data" -msgstr "неверное внешнее представление txid_snapshot" +msgid "could not generate random values" +msgstr "не удалось сгенерировать случайные значения" -#: utils/adt/varbit.c:109 utils/adt/varchar.c:54 +#: utils/adt/varbit.c:109 utils/adt/varchar.c:53 #, c-format msgid "length for type %s must be at least 1" msgstr "длина значения типа %s должна быть как минимум 1" -#: utils/adt/varbit.c:114 utils/adt/varchar.c:58 +#: utils/adt/varbit.c:114 utils/adt/varchar.c:57 #, c-format msgid "length for type %s cannot exceed %d" msgstr "длина значения типа %s не может превышать %d" @@ -25424,133 +26025,148 @@ msgstr "неверная длина во внешней строке битов" msgid "bit string too long for type bit varying(%d)" msgstr "строка битов не умещается в тип bit varying(%d)" -#: utils/adt/varbit.c:1086 utils/adt/varbit.c:1184 utils/adt/varlena.c:863 -#: utils/adt/varlena.c:927 utils/adt/varlena.c:1071 utils/adt/varlena.c:3274 -#: utils/adt/varlena.c:3341 +#: utils/adt/varbit.c:1080 utils/adt/varbit.c:1190 utils/adt/varlena.c:873 +#: utils/adt/varlena.c:936 utils/adt/varlena.c:1093 utils/adt/varlena.c:3313 +#: utils/adt/varlena.c:3391 #, c-format msgid "negative substring length not allowed" msgstr "подстрока должна иметь неотрицательную длину" -#: utils/adt/varbit.c:1241 +#: utils/adt/varbit.c:1247 #, c-format msgid "cannot AND bit strings of different sizes" msgstr "нельзя использовать \"И\" (AND) для битовых строк разной длины" -#: utils/adt/varbit.c:1282 +#: utils/adt/varbit.c:1288 #, c-format msgid "cannot OR bit strings of different sizes" msgstr "нельзя использовать \"ИЛИ\" (OR) для битовых строк разной длины" -#: utils/adt/varbit.c:1322 +#: utils/adt/varbit.c:1328 #, c-format msgid "cannot XOR bit strings of different sizes" msgstr "" "нельзя использовать \"ИСКЛЮЧАЮЩЕЕ ИЛИ\" (XOR) для битовых строк разной длины" -#: utils/adt/varbit.c:1804 utils/adt/varbit.c:1862 +#: utils/adt/varbit.c:1810 utils/adt/varbit.c:1868 #, c-format msgid "bit index %d out of valid range (0..%d)" msgstr "индекс бита %d вне диапазона 0..%d" -#: utils/adt/varbit.c:1813 utils/adt/varlena.c:3532 +#: utils/adt/varbit.c:1819 utils/adt/varlena.c:3584 #, c-format msgid "new bit must be 0 or 1" msgstr "значением бита должен быть 0 или 1" -#: utils/adt/varchar.c:158 utils/adt/varchar.c:311 +#: utils/adt/varchar.c:157 utils/adt/varchar.c:310 #, c-format msgid "value too long for type character(%d)" msgstr "значение не умещается в тип character(%d)" -#: utils/adt/varchar.c:473 utils/adt/varchar.c:635 +#: utils/adt/varchar.c:472 utils/adt/varchar.c:634 #, c-format msgid "value too long for type character varying(%d)" msgstr "значение не умещается в тип character varying(%d)" -#: utils/adt/varchar.c:733 utils/adt/varlena.c:1463 +#: utils/adt/varchar.c:732 utils/adt/varlena.c:1485 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "" "не удалось определить, какое правило сортировки использовать для сравнения " "строк" -#: utils/adt/varlena.c:1170 utils/adt/varlena.c:1903 +#: utils/adt/varlena.c:1192 utils/adt/varlena.c:1925 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "" "недетерминированные правила сортировки не поддерживаются для поиска подстрок" -#: utils/adt/varlena.c:1562 utils/adt/varlena.c:1575 +#: utils/adt/varlena.c:1584 utils/adt/varlena.c:1597 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "не удалось преобразовать строку в UTF-16 (код ошибки: %lu)" -#: utils/adt/varlena.c:1590 +#: utils/adt/varlena.c:1612 #, c-format msgid "could not compare Unicode strings: %m" msgstr "не удалось сравнить строки в Unicode: %m" -#: utils/adt/varlena.c:1641 utils/adt/varlena.c:2355 +#: utils/adt/varlena.c:1663 utils/adt/varlena.c:2377 #, c-format msgid "collation failed: %s" msgstr "ошибка в библиотеке сортировки: %s" -#: utils/adt/varlena.c:2563 +#: utils/adt/varlena.c:2585 #, c-format msgid "sort key generation failed: %s" msgstr "не удалось сгенерировать ключ сортировки: %s" -#: utils/adt/varlena.c:3418 utils/adt/varlena.c:3449 utils/adt/varlena.c:3484 -#: utils/adt/varlena.c:3520 +#: utils/adt/varlena.c:3468 utils/adt/varlena.c:3535 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "индекс %d вне диапазона 0..%d" -#: utils/adt/varlena.c:4556 +#: utils/adt/varlena.c:3499 utils/adt/varlena.c:3571 +#, c-format +msgid "index %lld out of valid range, 0..%lld" +msgstr "индекс %lld вне диапазона 0..%lld" + +#: utils/adt/varlena.c:4608 #, c-format msgid "field position must be greater than zero" msgstr "позиция поля должна быть больше нуля" -#: utils/adt/varlena.c:5422 +#: utils/adt/varlena.c:5474 #, c-format msgid "unterminated format() type specifier" msgstr "незавершённый спецификатор типа format()" -#: utils/adt/varlena.c:5423 utils/adt/varlena.c:5557 utils/adt/varlena.c:5678 +#: utils/adt/varlena.c:5475 utils/adt/varlena.c:5609 utils/adt/varlena.c:5730 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "Для представления одного знака \"%%\" запишите \"%%%%\"." -#: utils/adt/varlena.c:5555 utils/adt/varlena.c:5676 +#: utils/adt/varlena.c:5607 utils/adt/varlena.c:5728 #, c-format msgid "unrecognized format() type specifier \"%c\"" msgstr "нераспознанный спецификатор типа format(): \"%c\"" -#: utils/adt/varlena.c:5568 utils/adt/varlena.c:5625 +#: utils/adt/varlena.c:5620 utils/adt/varlena.c:5677 #, c-format msgid "too few arguments for format()" msgstr "мало аргументов для format()" -#: utils/adt/varlena.c:5721 utils/adt/varlena.c:5903 +#: utils/adt/varlena.c:5773 utils/adt/varlena.c:5955 #, c-format msgid "number is out of range" msgstr "число вне диапазона" -#: utils/adt/varlena.c:5784 utils/adt/varlena.c:5812 +#: utils/adt/varlena.c:5836 utils/adt/varlena.c:5864 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "формат ссылается на аргумент 0, но аргументы нумеруются с 1" -#: utils/adt/varlena.c:5805 +#: utils/adt/varlena.c:5857 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "указание аргумента ширины должно оканчиваться \"$\"" -#: utils/adt/varlena.c:5850 +#: utils/adt/varlena.c:5902 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "значения null нельзя представить в виде SQL-идентификатора" +#: utils/adt/varlena.c:6028 +#, c-format +msgid "Unicode normalization can only be performed if server encoding is UTF8" +msgstr "" +"нормализацию Unicode можно выполнять, только если кодировка сервера — UTF8" + +#: utils/adt/varlena.c:6041 +#, c-format +msgid "invalid normalization form: %s" +msgstr "неверная форма нормализации: %s" + #: utils/adt/windowfuncs.c:243 #, c-format msgid "argument of ntile must be greater than zero" @@ -25561,6 +26177,16 @@ msgstr "аргумент ntile должен быть больше нуля" msgid "argument of nth_value must be greater than zero" msgstr "аргумент nth_value должен быть больше нуля" +#: utils/adt/xid8funcs.c:116 +#, c-format +msgid "transaction ID %s is in the future" +msgstr "идентификатор транзакции %s относится к будущему" + +#: utils/adt/xid8funcs.c:547 +#, c-format +msgid "invalid external pg_snapshot data" +msgstr "неверное внешнее представление pg_snapshot" + #: utils/adt/xml.c:222 #, c-format msgid "unsupported XML feature" @@ -25576,7 +26202,7 @@ msgstr "Для этой функциональности в сервере не msgid "You need to rebuild PostgreSQL using --with-libxml." msgstr "Необходимо перекомпилировать PostgreSQL с ключом --with-libxml." -#: utils/adt/xml.c:243 utils/mb/mbutils.c:540 +#: utils/adt/xml.c:243 utils/mb/mbutils.c:570 #, c-format msgid "invalid encoding name \"%s\"" msgstr "неверное имя кодировки: \"%s\"" @@ -25665,86 +26291,91 @@ msgstr "Ошибка при разборе XML-объявления: ожида msgid "Unrecognized libxml error code: %d." msgstr "Нераспознанный код ошибки libxml: %d." -#: utils/adt/xml.c:2229 +#: utils/adt/xml.c:2211 #, c-format msgid "XML does not support infinite date values." msgstr "XML не поддерживает бесконечность в датах." -#: utils/adt/xml.c:2251 utils/adt/xml.c:2278 +#: utils/adt/xml.c:2233 utils/adt/xml.c:2260 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML не поддерживает бесконечность в timestamp." -#: utils/adt/xml.c:2690 +#: utils/adt/xml.c:2676 #, c-format msgid "invalid query" msgstr "неверный запрос" -#: utils/adt/xml.c:4037 +#: utils/adt/xml.c:4016 #, c-format msgid "invalid array for XML namespace mapping" msgstr "неправильный массив с сопоставлениями пространств имён XML" -#: utils/adt/xml.c:4038 +#: utils/adt/xml.c:4017 #, c-format msgid "" "The array must be two-dimensional with length of the second axis equal to 2." msgstr "Массив должен быть двухмерным и содержать 2 элемента по второй оси." -#: utils/adt/xml.c:4062 +#: utils/adt/xml.c:4041 #, c-format msgid "empty XPath expression" msgstr "пустое выражение XPath" -#: utils/adt/xml.c:4114 +#: utils/adt/xml.c:4093 #, c-format msgid "neither namespace name nor URI may be null" msgstr "ни префикс, ни URI пространства имён не может быть null" -#: utils/adt/xml.c:4121 +#: utils/adt/xml.c:4100 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "" "не удалось зарегистрировать пространство имён XML с префиксом \"%s\" и URI " "\"%s\"" -#: utils/adt/xml.c:4472 +#: utils/adt/xml.c:4451 #, c-format msgid "DEFAULT namespace is not supported" msgstr "пространство имён DEFAULT не поддерживается" -#: utils/adt/xml.c:4501 +#: utils/adt/xml.c:4480 #, c-format msgid "row path filter must not be empty string" msgstr "путь отбираемых строк не должен быть пустым" -#: utils/adt/xml.c:4532 +#: utils/adt/xml.c:4511 #, c-format msgid "column path filter must not be empty string" msgstr "путь отбираемого столбца не должен быть пустым" -#: utils/adt/xml.c:4682 +#: utils/adt/xml.c:4661 #, c-format msgid "more than one value returned by column XPath expression" msgstr "выражение XPath, отбирающее столбец, возвратило более одного значения" -#: utils/cache/lsyscache.c:2654 utils/cache/lsyscache.c:2687 -#: utils/cache/lsyscache.c:2720 utils/cache/lsyscache.c:2753 +#: utils/cache/lsyscache.c:1015 +#, c-format +msgid "cast from type %s to type %s does not exist" +msgstr "приведение типа %s к типу %s не существует" + +#: utils/cache/lsyscache.c:2764 utils/cache/lsyscache.c:2797 +#: utils/cache/lsyscache.c:2830 utils/cache/lsyscache.c:2863 #, c-format msgid "type %s is only a shell" msgstr "тип %s - лишь оболочка" -#: utils/cache/lsyscache.c:2659 +#: utils/cache/lsyscache.c:2769 #, c-format msgid "no input function available for type %s" msgstr "для типа %s нет функции ввода" -#: utils/cache/lsyscache.c:2692 +#: utils/cache/lsyscache.c:2802 #, c-format msgid "no output function available for type %s" msgstr "для типа %s нет функции вывода" -#: utils/cache/partcache.c:195 +#: utils/cache/partcache.c:215 #, c-format msgid "" "operator class \"%s\" of access method %s is missing support function %d for " @@ -25758,17 +26389,17 @@ msgstr "" msgid "cached plan must not change result type" msgstr "в кешированном плане не должен изменяться тип результата" -#: utils/cache/relcache.c:5809 +#: utils/cache/relcache.c:6078 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "создать файл инициализации для кеша отношений \"%s\" не удалось: %m" -#: utils/cache/relcache.c:5811 +#: utils/cache/relcache.c:6080 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Продолжаем всё равно, хотя что-то не так." -#: utils/cache/relcache.c:6123 +#: utils/cache/relcache.c:6402 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "не удалось стереть файл кеша \"%s\": %m" @@ -25789,110 +26420,113 @@ msgstr "файл сопоставления отношений \"%s\" содер msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "ошибка контрольной суммы в файле сопоставления отношений \"%s\"" -#: utils/cache/typcache.c:1634 utils/fmgr/funcapi.c:420 +#: utils/cache/typcache.c:1692 utils/fmgr/funcapi.c:461 #, c-format msgid "record type has not been registered" msgstr "тип записи не зарегистрирован" -#: utils/error/assert.c:34 +#: utils/error/assert.c:37 #, c-format msgid "TRAP: ExceptionalCondition: bad arguments\n" msgstr "ЛОВУШКА: Исключительное условие: неверные аргументы\n" -#: utils/error/assert.c:37 +#: utils/error/assert.c:40 #, c-format msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n" msgstr "ЛОВУШКА: %s(\"%s\", файл: \"%s\", строка: %d)\n" -#: utils/error/elog.c:319 utils/error/elog.c:1293 +#: utils/error/elog.c:322 #, c-format -msgid "error occurred at %s:%d before error message processing is available\n" -msgstr "" -"в %s:%d произошла ошибка до готовности подсистемы обработки сообщений\n" +msgid "error occurred before error message processing is available\n" +msgstr "произошла ошибка до готовности подсистемы обработки сообщений\n" -#: utils/error/elog.c:1871 +#: utils/error/elog.c:1868 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "открыть файл \"%s\" как stderr не удалось: %m" -#: utils/error/elog.c:1884 +#: utils/error/elog.c:1881 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "открыть файл \"%s\" как stdout не удалось: %m" -#: utils/error/elog.c:2376 utils/error/elog.c:2393 utils/error/elog.c:2409 +#: utils/error/elog.c:2373 utils/error/elog.c:2407 utils/error/elog.c:2423 msgid "[unknown]" msgstr "[н/д]" -#: utils/error/elog.c:2869 utils/error/elog.c:3172 utils/error/elog.c:3280 +#: utils/error/elog.c:2893 utils/error/elog.c:3203 utils/error/elog.c:3311 msgid "missing error text" msgstr "отсутствует текст ошибки" -#: utils/error/elog.c:2872 utils/error/elog.c:2875 utils/error/elog.c:3283 -#: utils/error/elog.c:3286 +#: utils/error/elog.c:2896 utils/error/elog.c:2899 utils/error/elog.c:3314 +#: utils/error/elog.c:3317 #, c-format msgid " at character %d" msgstr " (символ %d)" -#: utils/error/elog.c:2885 utils/error/elog.c:2892 +#: utils/error/elog.c:2909 utils/error/elog.c:2916 msgid "DETAIL: " msgstr "ПОДРОБНОСТИ: " -#: utils/error/elog.c:2899 +#: utils/error/elog.c:2923 msgid "HINT: " msgstr "ПОДСКАЗКА: " -#: utils/error/elog.c:2906 +#: utils/error/elog.c:2930 msgid "QUERY: " msgstr "ЗАПРОС: " -#: utils/error/elog.c:2913 +#: utils/error/elog.c:2937 msgid "CONTEXT: " msgstr "КОНТЕКСТ: " -#: utils/error/elog.c:2923 +#: utils/error/elog.c:2947 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "ПОЛОЖЕНИЕ: %s, %s:%d\n" -#: utils/error/elog.c:2930 +#: utils/error/elog.c:2954 #, c-format msgid "LOCATION: %s:%d\n" msgstr "ПОЛОЖЕНИЕ: %s:%d\n" -#: utils/error/elog.c:2944 +#: utils/error/elog.c:2961 +msgid "BACKTRACE: " +msgstr "СТЕК: " + +#: utils/error/elog.c:2975 msgid "STATEMENT: " msgstr "ОПЕРАТОР: " -#: utils/error/elog.c:3333 +#: utils/error/elog.c:3364 msgid "DEBUG" msgstr "ОТЛАДКА" -#: utils/error/elog.c:3337 +#: utils/error/elog.c:3368 msgid "LOG" msgstr "СООБЩЕНИЕ" -#: utils/error/elog.c:3340 +#: utils/error/elog.c:3371 msgid "INFO" msgstr "ИНФОРМАЦИЯ" -#: utils/error/elog.c:3343 +#: utils/error/elog.c:3374 msgid "NOTICE" msgstr "ЗАМЕЧАНИЕ" -#: utils/error/elog.c:3346 +#: utils/error/elog.c:3377 msgid "WARNING" msgstr "ПРЕДУПРЕЖДЕНИЕ" -#: utils/error/elog.c:3349 +#: utils/error/elog.c:3380 msgid "ERROR" msgstr "ОШИБКА" -#: utils/error/elog.c:3352 +#: utils/error/elog.c:3383 msgid "FATAL" msgstr "ВАЖНО" -#: utils/error/elog.c:3355 +#: utils/error/elog.c:3386 msgid "PANIC" msgstr "ПАНИКА" @@ -25943,56 +26577,51 @@ msgstr "В сервере NAMEDATALEN = %d, в библиотеке: %d." #: utils/fmgr/dfmgr.c:373 #, c-format -msgid "Server has FLOAT4PASSBYVAL = %s, library has %s." -msgstr "В сервере FLOAT4PASSBYVAL = %s, в библиотеке: %s." - -#: utils/fmgr/dfmgr.c:382 -#, c-format msgid "Server has FLOAT8PASSBYVAL = %s, library has %s." msgstr "В сервере FLOAT8PASSBYVAL = %s, в библиотеке: %s." -#: utils/fmgr/dfmgr.c:389 +#: utils/fmgr/dfmgr.c:380 msgid "Magic block has unexpected length or padding difference." msgstr "Отличительный блок имеет неверную длину или дополнен по-другому." -#: utils/fmgr/dfmgr.c:392 +#: utils/fmgr/dfmgr.c:383 #, c-format msgid "incompatible library \"%s\": magic block mismatch" msgstr "несовместимая библиотека \"%s\": несоответствие отличительного блока" -#: utils/fmgr/dfmgr.c:556 +#: utils/fmgr/dfmgr.c:547 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "доступ к библиотеке \"%s\" не разрешён" -#: utils/fmgr/dfmgr.c:582 +#: utils/fmgr/dfmgr.c:573 #, c-format msgid "invalid macro name in dynamic library path: %s" msgstr "неправильный макрос в пути динамической библиотеки: %s" -#: utils/fmgr/dfmgr.c:622 +#: utils/fmgr/dfmgr.c:613 #, c-format msgid "zero-length component in parameter \"dynamic_library_path\"" msgstr "параметр dynamic_library_path содержит компонент нулевой длины" -#: utils/fmgr/dfmgr.c:641 +#: utils/fmgr/dfmgr.c:632 #, c-format msgid "component in parameter \"dynamic_library_path\" is not an absolute path" msgstr "" "параметр dynamic_library_path содержит компонент, не являющийся абсолютным " "путём" -#: utils/fmgr/fmgr.c:236 +#: utils/fmgr/fmgr.c:238 #, c-format msgid "internal function \"%s\" is not in internal lookup table" msgstr "внутренней функции \"%s\" нет во внутренней поисковой таблице" -#: utils/fmgr/fmgr.c:485 +#: utils/fmgr/fmgr.c:487 #, c-format msgid "could not find function information for function \"%s\"" msgstr "не удалось найти информацию о функции \"%s\"" -#: utils/fmgr/fmgr.c:487 +#: utils/fmgr/fmgr.c:489 #, c-format msgid "" "SQL-callable functions need an accompanying PG_FUNCTION_INFO_V1(funcname)." @@ -26000,18 +26629,25 @@ msgstr "" "Функциям, вызываемым из SQL, требуется дополнительное объявление " "PG_FUNCTION_INFO_V1(имя_функции)." -#: utils/fmgr/fmgr.c:505 +#: utils/fmgr/fmgr.c:507 #, c-format msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "" "версия API (%d), выданная информационной функцией \"%s\", не поддерживается" -#: utils/fmgr/fmgr.c:2032 +#: utils/fmgr/fmgr.c:2003 +#, c-format +msgid "operator class options info is absent in function call context" +msgstr "" +"информация о параметрах класса операторов отсутствует в контексте вызова " +"функции" + +#: utils/fmgr/fmgr.c:2070 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "функция языковой проверки %u вызвана для языка %u (а не %u)" -#: utils/fmgr/funcapi.c:343 +#: utils/fmgr/funcapi.c:384 #, c-format msgid "" "could not determine actual result type for function \"%s\" declared to " @@ -26020,115 +26656,115 @@ msgstr "" "не удалось определить действительный тип результата для функции \"%s\", " "объявленной как возвращающая тип %s" -#: utils/fmgr/funcapi.c:1388 utils/fmgr/funcapi.c:1420 +#: utils/fmgr/funcapi.c:1652 utils/fmgr/funcapi.c:1684 #, c-format msgid "number of aliases does not match number of columns" msgstr "число псевдонимов не совпадает с числом столбцов" -#: utils/fmgr/funcapi.c:1414 +#: utils/fmgr/funcapi.c:1678 #, c-format msgid "no column alias was provided" msgstr "псевдоним столбца не указан" -#: utils/fmgr/funcapi.c:1438 +#: utils/fmgr/funcapi.c:1702 #, c-format msgid "could not determine row description for function returning record" msgstr "не удалось определить описание строки для функции, возвращающей запись" -#: utils/init/miscinit.c:110 +#: utils/init/miscinit.c:285 #, c-format msgid "data directory \"%s\" does not exist" msgstr "каталог данных \"%s\" не существует" -#: utils/init/miscinit.c:115 +#: utils/init/miscinit.c:290 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "не удалось считать права на каталог \"%s\": %m" -#: utils/init/miscinit.c:123 +#: utils/init/miscinit.c:298 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "указанный каталог данных \"%s\" не существует" -#: utils/init/miscinit.c:139 +#: utils/init/miscinit.c:314 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "владелец каталога данных \"%s\" определён неверно" -#: utils/init/miscinit.c:141 +#: utils/init/miscinit.c:316 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "" "Сервер должен запускать пользователь, являющийся владельцем каталога данных." -#: utils/init/miscinit.c:159 +#: utils/init/miscinit.c:334 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "для каталога данных \"%s\" установлены неправильные права доступа" -#: utils/init/miscinit.c:161 +#: utils/init/miscinit.c:336 #, c-format msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Маска прав должна быть u=rwx (0700) или u=rwx,g=rx (0750)." -#: utils/init/miscinit.c:547 utils/misc/guc.c:6914 +#: utils/init/miscinit.c:615 utils/misc/guc.c:7139 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "" "параметр \"%s\" нельзя задать в рамках операции с ограничениями по " "безопасности" -#: utils/init/miscinit.c:615 +#: utils/init/miscinit.c:683 #, c-format msgid "role with OID %u does not exist" msgstr "роль с OID %u не существует" -#: utils/init/miscinit.c:645 +#: utils/init/miscinit.c:713 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "для роли \"%s\" вход запрещён" -#: utils/init/miscinit.c:663 +#: utils/init/miscinit.c:731 #, c-format msgid "too many connections for role \"%s\"" msgstr "слишком много подключений для роли \"%s\"" -#: utils/init/miscinit.c:723 +#: utils/init/miscinit.c:791 #, c-format msgid "permission denied to set session authorization" msgstr "нет прав для смены объекта авторизации в сеансе" -#: utils/init/miscinit.c:806 +#: utils/init/miscinit.c:874 #, c-format msgid "invalid role OID: %u" msgstr "неверный OID роли: %u" -#: utils/init/miscinit.c:860 +#: utils/init/miscinit.c:928 #, c-format msgid "database system is shut down" msgstr "система БД выключена" -#: utils/init/miscinit.c:947 +#: utils/init/miscinit.c:1015 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "не удалось создать файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:961 +#: utils/init/miscinit.c:1029 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "не удалось открыть файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:968 +#: utils/init/miscinit.c:1036 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "не удалось прочитать файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:977 +#: utils/init/miscinit.c:1045 #, c-format msgid "lock file \"%s\" is empty" msgstr "файл блокировки \"%s\" пуст" -#: utils/init/miscinit.c:978 +#: utils/init/miscinit.c:1046 #, c-format msgid "" "Either another server is starting, or the lock file is the remnant of a " @@ -26137,38 +26773,38 @@ msgstr "" "Либо сейчас запускается другой сервер, либо этот файл остался в результате " "сбоя при предыдущем запуске." -#: utils/init/miscinit.c:1022 +#: utils/init/miscinit.c:1090 #, c-format msgid "lock file \"%s\" already exists" msgstr "файл блокировки \"%s\" уже существует" -#: utils/init/miscinit.c:1026 +#: utils/init/miscinit.c:1094 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "Другой экземпляр postgres (PID %d) работает с каталогом данных \"%s\"?" -#: utils/init/miscinit.c:1028 +#: utils/init/miscinit.c:1096 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "" "Другой экземпляр postmaster (PID %d) работает с каталогом данных \"%s\"?" -#: utils/init/miscinit.c:1031 +#: utils/init/miscinit.c:1099 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "Другой экземпляр postgres (PID %d) использует файл сокета \"%s\"?" -#: utils/init/miscinit.c:1033 +#: utils/init/miscinit.c:1101 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "Другой экземпляр postmaster (PID %d) использует файл сокета \"%s\"?" -#: utils/init/miscinit.c:1084 +#: utils/init/miscinit.c:1152 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "не удалось стереть старый файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:1086 +#: utils/init/miscinit.c:1154 #, c-format msgid "" "The file seems accidentally left over, but it could not be removed. Please " @@ -26177,48 +26813,48 @@ msgstr "" "Кажется, файл сохранился по ошибке, но удалить его не получилось. " "Пожалуйста, удалите файл вручную и повторите попытку." -#: utils/init/miscinit.c:1123 utils/init/miscinit.c:1137 -#: utils/init/miscinit.c:1148 +#: utils/init/miscinit.c:1191 utils/init/miscinit.c:1205 +#: utils/init/miscinit.c:1216 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "не удалось записать файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:1280 utils/init/miscinit.c:1423 utils/misc/guc.c:9814 +#: utils/init/miscinit.c:1327 utils/init/miscinit.c:1469 utils/misc/guc.c:10066 #, c-format msgid "could not read from file \"%s\": %m" msgstr "не удалось прочитать файл \"%s\": %m" -#: utils/init/miscinit.c:1411 +#: utils/init/miscinit.c:1457 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "не удалось открыть файл \"%s\": %m; ошибка игнорируется" -#: utils/init/miscinit.c:1436 +#: utils/init/miscinit.c:1482 #, c-format msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" msgstr "файл блокировки \"%s\" содержит неверный PID: %ld вместо %ld" -#: utils/init/miscinit.c:1475 utils/init/miscinit.c:1491 +#: utils/init/miscinit.c:1521 utils/init/miscinit.c:1537 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "\"%s\" не является каталогом данных" -#: utils/init/miscinit.c:1477 +#: utils/init/miscinit.c:1523 #, c-format msgid "File \"%s\" is missing." msgstr "Файл \"%s\" отсутствует." -#: utils/init/miscinit.c:1493 +#: utils/init/miscinit.c:1539 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "Файл \"%s\" содержит неприемлемые данные." -#: utils/init/miscinit.c:1495 +#: utils/init/miscinit.c:1541 #, c-format msgid "You might need to initdb." msgstr "Возможно, вам нужно выполнить initdb." -#: utils/init/miscinit.c:1503 +#: utils/init/miscinit.c:1549 #, c-format msgid "" "The data directory was initialized by PostgreSQL version %s, which is not " @@ -26227,114 +26863,100 @@ msgstr "" "Каталог данных инициализирован сервером PostgreSQL версии %s, не совместимой " "с данной версией (%s)." -#: utils/init/miscinit.c:1570 +#: utils/init/miscinit.c:1616 #, c-format msgid "loaded library \"%s\"" msgstr "загружена библиотека \"%s\"" -#: utils/init/postinit.c:255 +#: utils/init/postinit.c:253 #, c-format -msgid "" -"replication connection authorized: user=%s application_name=%s SSL enabled " -"(protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "" -"подключение для репликации авторизовано: пользователь=%s, имя_приложения=%s, " -"SSL включён (протокол=%s, шифр=%s, битов=%d, сжатие=%s)" +msgid "replication connection authorized: user=%s" +msgstr "подключение для репликации авторизовано: пользователь=%s" -#: utils/init/postinit.c:261 utils/init/postinit.c:267 -#: utils/init/postinit.c:289 utils/init/postinit.c:295 -msgid "off" -msgstr "выкл." +#: utils/init/postinit.c:256 +#, c-format +msgid "connection authorized: user=%s" +msgstr "подключение авторизовано: пользователь=%s" -#: utils/init/postinit.c:261 utils/init/postinit.c:267 -#: utils/init/postinit.c:289 utils/init/postinit.c:295 -msgid "on" -msgstr "вкл." +#: utils/init/postinit.c:259 +#, c-format +msgid " database=%s" +msgstr " база=%s" #: utils/init/postinit.c:262 #, c-format -msgid "" -"replication connection authorized: user=%s SSL enabled (protocol=%s, cipher=" -"%s, bits=%d, compression=%s)" -msgstr "" -"подключение для репликации авторизовано: пользователь=%s, SSL включён " -"(протокол=%s, шифр=%s, битов=%d, сжатие=%s)" +msgid " application_name=%s" +msgstr " приложение=%s" -#: utils/init/postinit.c:272 +#: utils/init/postinit.c:267 #, c-format -msgid "replication connection authorized: user=%s application_name=%s" -msgstr "" -"подключение для репликации авторизовано: пользователь=%s, имя_приложения=%s" +msgid " SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +msgstr " SSL включён (протокол=%s, шифр=%s, битов=%d, сжатие=%s)" -#: utils/init/postinit.c:275 -#, c-format -msgid "replication connection authorized: user=%s" -msgstr "подключение для репликации авторизовано: пользователь=%s" +#: utils/init/postinit.c:271 +msgid "off" +msgstr "выкл." -#: utils/init/postinit.c:284 -#, c-format -msgid "" -"connection authorized: user=%s database=%s application_name=%s SSL enabled " -"(protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "" -"подключение авторизовано: пользователь=%s, база=%s, имя_приложения=%s, SSL " -"включён (протокол=%s, шифр=%s, битов=%d, сжатие=%s)" +#: utils/init/postinit.c:271 +msgid "on" +msgstr "вкл." -#: utils/init/postinit.c:290 +#: utils/init/postinit.c:280 #, c-format -msgid "" -"connection authorized: user=%s database=%s SSL enabled (protocol=%s, cipher=" -"%s, bits=%d, compression=%s)" -msgstr "" -"подключение авторизовано: пользователь=%s, база=%s, SSL включён (протокол=" -"%s, шифр=%s, битов=%d, сжатие=%s)" +msgid " GSS (authenticated=%s, encrypted=%s, principal=%s)" +msgstr " GSS (аутентификация=%s, шифрование=%s, принципал=%s)" -#: utils/init/postinit.c:300 -#, c-format -msgid "connection authorized: user=%s database=%s application_name=%s" -msgstr "подключение авторизовано: пользователь=%s, база=%s, имя_приложения=%s" +#: utils/init/postinit.c:281 utils/init/postinit.c:282 +#: utils/init/postinit.c:287 utils/init/postinit.c:288 +msgid "no" +msgstr "нет" + +#: utils/init/postinit.c:281 utils/init/postinit.c:282 +#: utils/init/postinit.c:287 utils/init/postinit.c:288 +msgid "yes" +msgstr "да" -#: utils/init/postinit.c:302 +#: utils/init/postinit.c:286 #, c-format -msgid "connection authorized: user=%s database=%s" -msgstr "подключение авторизовано: пользователь=%s, база=%s" +msgid " GSS (authenticated=%s, encrypted=%s)" +msgstr " GSS (аутентификация=%s, шифрование=%s)" -#: utils/init/postinit.c:334 +#: utils/init/postinit.c:323 #, c-format msgid "database \"%s\" has disappeared from pg_database" msgstr "база данных \"%s\" исчезла из pg_database" -#: utils/init/postinit.c:336 +#: utils/init/postinit.c:325 #, c-format msgid "Database OID %u now seems to belong to \"%s\"." msgstr "Похоже, базой данных с OID %u теперь владеет \"%s\"." -#: utils/init/postinit.c:356 +#: utils/init/postinit.c:345 #, c-format msgid "database \"%s\" is not currently accepting connections" msgstr "база \"%s\" не принимает подключения в данный момент" -#: utils/init/postinit.c:369 +#: utils/init/postinit.c:358 #, c-format msgid "permission denied for database \"%s\"" msgstr "доступ к базе \"%s\" запрещён" -#: utils/init/postinit.c:370 +#: utils/init/postinit.c:359 #, c-format msgid "User does not have CONNECT privilege." msgstr "Пользователь не имеет привилегии CONNECT." -#: utils/init/postinit.c:387 +#: utils/init/postinit.c:376 #, c-format msgid "too many connections for database \"%s\"" msgstr "слишком много подключений к БД \"%s\"" -#: utils/init/postinit.c:409 utils/init/postinit.c:416 +#: utils/init/postinit.c:398 utils/init/postinit.c:405 #, c-format msgid "database locale is incompatible with operating system" msgstr "локаль БД несовместима с операционной системой" -#: utils/init/postinit.c:410 +#: utils/init/postinit.c:399 #, c-format msgid "" "The database was initialized with LC_COLLATE \"%s\", which is not " @@ -26343,7 +26965,7 @@ msgstr "" "База данных была инициализирована с параметром LC_COLLATE \"%s\", но сейчас " "setlocale() не воспринимает его." -#: utils/init/postinit.c:412 utils/init/postinit.c:419 +#: utils/init/postinit.c:401 utils/init/postinit.c:408 #, c-format msgid "" "Recreate the database with another locale or install the missing locale." @@ -26351,7 +26973,7 @@ msgstr "" "Пересоздайте базу данных с другой локалью или установите поддержку нужной " "локали." -#: utils/init/postinit.c:417 +#: utils/init/postinit.c:406 #, c-format msgid "" "The database was initialized with LC_CTYPE \"%s\", which is not recognized " @@ -26360,36 +26982,36 @@ msgstr "" "База данных была инициализирована с параметром LC_CTYPE \"%s\", но сейчас " "setlocale() не воспринимает его." -#: utils/init/postinit.c:764 +#: utils/init/postinit.c:751 #, c-format msgid "no roles are defined in this database system" msgstr "в этой системе баз данных не создано ни одной роли" -#: utils/init/postinit.c:765 +#: utils/init/postinit.c:752 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Вы должны немедленно выполнить CREATE USER \"%s\" CREATEUSER;." -#: utils/init/postinit.c:801 +#: utils/init/postinit.c:788 #, c-format msgid "new replication connections are not allowed during database shutdown" msgstr "" "новые подключения для репликации не допускаются в процессе остановки БД" -#: utils/init/postinit.c:805 +#: utils/init/postinit.c:792 #, c-format msgid "must be superuser to connect during database shutdown" msgstr "" "нужно быть суперпользователем, чтобы подключиться в процессе остановки БД" -#: utils/init/postinit.c:815 +#: utils/init/postinit.c:802 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "" "нужно быть суперпользователем, чтобы подключиться в режиме двоичного " "обновления" -#: utils/init/postinit.c:828 +#: utils/init/postinit.c:815 #, c-format msgid "" "remaining connection slots are reserved for non-replication superuser " @@ -26398,34 +27020,34 @@ msgstr "" "оставшиеся слоты подключений зарезервированы для подключений " "суперпользователя (не для репликации)" -#: utils/init/postinit.c:838 +#: utils/init/postinit.c:825 #, c-format msgid "must be superuser or replication role to start walsender" msgstr "" "для запуска процесса walsender требуется роль репликации или права " "суперпользователя" -#: utils/init/postinit.c:907 +#: utils/init/postinit.c:894 #, c-format msgid "database %u does not exist" msgstr "база данных %u не существует" -#: utils/init/postinit.c:996 +#: utils/init/postinit.c:983 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Похоже, она только что была удалена или переименована." -#: utils/init/postinit.c:1014 +#: utils/init/postinit.c:1001 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Подкаталог базы данных \"%s\" отсутствует." -#: utils/init/postinit.c:1019 +#: utils/init/postinit.c:1006 #, c-format msgid "could not access directory \"%s\": %m" msgstr "ошибка доступа к каталогу \"%s\": %m" -#: utils/mb/conv.c:488 utils/mb/conv.c:680 +#: utils/mb/conv.c:443 utils/mb/conv.c:635 #, c-format msgid "invalid encoding number: %d" msgstr "неверный номер кодировки: %d" @@ -26442,60 +27064,55 @@ msgstr "неожиданный ID кодировки %d для наборов с msgid "unexpected encoding ID %d for WIN character sets" msgstr "неожиданный ID кодировки %d для наборов символов WIN" -#: utils/mb/encnames.c:473 -#, c-format -msgid "encoding \"%s\" not supported by ICU" -msgstr "ICU не поддерживает кодировку \"%s\"" - -#: utils/mb/encnames.c:572 -#, c-format -msgid "encoding name too long" -msgstr "слишком длинное имя кодировки" - -#: utils/mb/mbutils.c:296 +#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:842 #, c-format msgid "conversion between %s and %s is not supported" msgstr "преобразование %s <-> %s не поддерживается" -#: utils/mb/mbutils.c:355 +#: utils/mb/mbutils.c:385 #, c-format msgid "" "default conversion function for encoding \"%s\" to \"%s\" does not exist" msgstr "" "стандартной функции преобразования из кодировки \"%s\" в \"%s\" не существует" -#: utils/mb/mbutils.c:372 utils/mb/mbutils.c:399 utils/mb/mbutils.c:728 -#: utils/mb/mbutils.c:754 +#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:429 utils/mb/mbutils.c:758 +#: utils/mb/mbutils.c:784 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "Строка из %d байт слишком длинна для преобразования кодировки." -#: utils/mb/mbutils.c:481 +#: utils/mb/mbutils.c:511 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "неверное имя исходной кодировки: \"%s\"" -#: utils/mb/mbutils.c:486 +#: utils/mb/mbutils.c:516 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "неверное имя кодировки результата: \"%s\"" -#: utils/mb/mbutils.c:626 +#: utils/mb/mbutils.c:656 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "недопустимое байтовое значение для кодировки \"%s\": 0x%02x" -#: utils/mb/mbutils.c:990 +#: utils/mb/mbutils.c:819 +#, c-format +msgid "invalid Unicode code point" +msgstr "неверный код Unicode" + +#: utils/mb/mbutils.c:1087 #, c-format msgid "bind_textdomain_codeset failed" msgstr "ошибка в bind_textdomain_codeset" -#: utils/mb/wchar.c:2063 +#: utils/mb/mbutils.c:1595 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "неверная последовательность байт для кодировки \"%s\": %s" -#: utils/mb/wchar.c:2096 +#: utils/mb/mbutils.c:1628 #, c-format msgid "" "character with byte sequence %s in encoding \"%s\" has no equivalent in " @@ -26504,221 +27121,221 @@ msgstr "" "для символа с последовательностью байт %s из кодировки \"%s\" нет " "эквивалента в \"%s\"" -#: utils/misc/guc.c:638 +#: utils/misc/guc.c:679 msgid "Ungrouped" msgstr "Разное" -#: utils/misc/guc.c:640 +#: utils/misc/guc.c:681 msgid "File Locations" msgstr "Расположения файлов" -#: utils/misc/guc.c:642 +#: utils/misc/guc.c:683 msgid "Connections and Authentication" msgstr "Подключения и аутентификация" -#: utils/misc/guc.c:644 +#: utils/misc/guc.c:685 msgid "Connections and Authentication / Connection Settings" msgstr "Подключения и аутентификация / Параметры подключений" -#: utils/misc/guc.c:646 +#: utils/misc/guc.c:687 msgid "Connections and Authentication / Authentication" msgstr "Подключения и аутентификация / Аутентификация" -#: utils/misc/guc.c:648 +#: utils/misc/guc.c:689 msgid "Connections and Authentication / SSL" msgstr "Подключения и аутентификация / SSL" -#: utils/misc/guc.c:650 +#: utils/misc/guc.c:691 msgid "Resource Usage" msgstr "Использование ресурсов" -#: utils/misc/guc.c:652 +#: utils/misc/guc.c:693 msgid "Resource Usage / Memory" msgstr "Использование ресурсов / Память" -#: utils/misc/guc.c:654 +#: utils/misc/guc.c:695 msgid "Resource Usage / Disk" msgstr "Использование ресурсов / Диск" -#: utils/misc/guc.c:656 +#: utils/misc/guc.c:697 msgid "Resource Usage / Kernel Resources" msgstr "Использование ресурсов / Ресурсы ядра" -#: utils/misc/guc.c:658 +#: utils/misc/guc.c:699 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Использование ресурсов / Задержка очистки по стоимости" -#: utils/misc/guc.c:660 +#: utils/misc/guc.c:701 msgid "Resource Usage / Background Writer" msgstr "Использование ресурсов / Фоновая запись" -#: utils/misc/guc.c:662 +#: utils/misc/guc.c:703 msgid "Resource Usage / Asynchronous Behavior" msgstr "Использование ресурсов / Асинхронное поведение" -#: utils/misc/guc.c:664 +#: utils/misc/guc.c:705 msgid "Write-Ahead Log" msgstr "Журнал WAL" -#: utils/misc/guc.c:666 +#: utils/misc/guc.c:707 msgid "Write-Ahead Log / Settings" msgstr "Журнал WAL / Параметры" -#: utils/misc/guc.c:668 +#: utils/misc/guc.c:709 msgid "Write-Ahead Log / Checkpoints" msgstr "Журнал WAL / Контрольные точки" -#: utils/misc/guc.c:670 +#: utils/misc/guc.c:711 msgid "Write-Ahead Log / Archiving" msgstr "Журнал WAL / Архивация" -#: utils/misc/guc.c:672 +#: utils/misc/guc.c:713 msgid "Write-Ahead Log / Archive Recovery" msgstr "Журнал WAL / Восстановление из архива" -#: utils/misc/guc.c:674 +#: utils/misc/guc.c:715 msgid "Write-Ahead Log / Recovery Target" msgstr "Журнал WAL / Цель восстановления" -#: utils/misc/guc.c:676 +#: utils/misc/guc.c:717 msgid "Replication" msgstr "Репликация" -#: utils/misc/guc.c:678 +#: utils/misc/guc.c:719 msgid "Replication / Sending Servers" msgstr "Репликация / Передающие серверы" -#: utils/misc/guc.c:680 +#: utils/misc/guc.c:721 msgid "Replication / Master Server" msgstr "Репликация / Главный сервер" -#: utils/misc/guc.c:682 +#: utils/misc/guc.c:723 msgid "Replication / Standby Servers" msgstr "Репликация / Резервные серверы" -#: utils/misc/guc.c:684 +#: utils/misc/guc.c:725 msgid "Replication / Subscribers" msgstr "Репликация / Подписчики" -#: utils/misc/guc.c:686 +#: utils/misc/guc.c:727 msgid "Query Tuning" msgstr "Настройка запросов" -#: utils/misc/guc.c:688 +#: utils/misc/guc.c:729 msgid "Query Tuning / Planner Method Configuration" msgstr "Настройка запросов / Конфигурация методов планировщика" -#: utils/misc/guc.c:690 +#: utils/misc/guc.c:731 msgid "Query Tuning / Planner Cost Constants" msgstr "Настройка запросов / Константы стоимости для планировщика" -#: utils/misc/guc.c:692 +#: utils/misc/guc.c:733 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Настройка запросов / Генетический оптимизатор запросов" -#: utils/misc/guc.c:694 +#: utils/misc/guc.c:735 msgid "Query Tuning / Other Planner Options" msgstr "Настройка запросов / Другие параметры планировщика" -#: utils/misc/guc.c:696 +#: utils/misc/guc.c:737 msgid "Reporting and Logging" msgstr "Отчёты и протоколы" -#: utils/misc/guc.c:698 +#: utils/misc/guc.c:739 msgid "Reporting and Logging / Where to Log" msgstr "Отчёты и протоколы / Куда записывать" -#: utils/misc/guc.c:700 +#: utils/misc/guc.c:741 msgid "Reporting and Logging / When to Log" msgstr "Отчёты и протоколы / Когда записывать" -#: utils/misc/guc.c:702 +#: utils/misc/guc.c:743 msgid "Reporting and Logging / What to Log" msgstr "Отчёты и протоколы / Что записывать" -#: utils/misc/guc.c:704 +#: utils/misc/guc.c:745 msgid "Process Title" msgstr "Заголовок процесса" -#: utils/misc/guc.c:706 +#: utils/misc/guc.c:747 msgid "Statistics" msgstr "Статистика" -#: utils/misc/guc.c:708 +#: utils/misc/guc.c:749 msgid "Statistics / Monitoring" msgstr "Статистика / Мониторинг" -#: utils/misc/guc.c:710 +#: utils/misc/guc.c:751 msgid "Statistics / Query and Index Statistics Collector" msgstr "Статистика / Сбор статистики по запросам и индексам" -#: utils/misc/guc.c:712 +#: utils/misc/guc.c:753 msgid "Autovacuum" msgstr "Автоочистка" -#: utils/misc/guc.c:714 +#: utils/misc/guc.c:755 msgid "Client Connection Defaults" msgstr "Параметры клиентских сеансов по умолчанию" -#: utils/misc/guc.c:716 +#: utils/misc/guc.c:757 msgid "Client Connection Defaults / Statement Behavior" msgstr "Параметры клиентских подключений по умолчанию / Поведение команд" -#: utils/misc/guc.c:718 +#: utils/misc/guc.c:759 msgid "Client Connection Defaults / Locale and Formatting" msgstr "" "Параметры клиентских подключений по умолчанию / Языковая среда и форматы" -#: utils/misc/guc.c:720 +#: utils/misc/guc.c:761 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "" "Параметры клиентских подключений по умолчанию / Предзагрузка разделяемых " "библиотек" -#: utils/misc/guc.c:722 +#: utils/misc/guc.c:763 msgid "Client Connection Defaults / Other Defaults" msgstr "Параметры клиентских подключений по умолчанию / Другие параметры" -#: utils/misc/guc.c:724 +#: utils/misc/guc.c:765 msgid "Lock Management" msgstr "Управление блокировками" -#: utils/misc/guc.c:726 +#: utils/misc/guc.c:767 msgid "Version and Platform Compatibility" msgstr "Совместимость с разными версиями и платформами" -#: utils/misc/guc.c:728 +#: utils/misc/guc.c:769 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Версия и совместимость платформ / Предыдущие версии PostgreSQL" -#: utils/misc/guc.c:730 +#: utils/misc/guc.c:771 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Версия и совместимость платформ / Другие платформы и клиенты" -#: utils/misc/guc.c:732 +#: utils/misc/guc.c:773 msgid "Error Handling" msgstr "Обработка ошибок" -#: utils/misc/guc.c:734 +#: utils/misc/guc.c:775 msgid "Preset Options" msgstr "Предопределённые параметры" -#: utils/misc/guc.c:736 +#: utils/misc/guc.c:777 msgid "Customized Options" msgstr "Внесистемные параметры" -#: utils/misc/guc.c:738 +#: utils/misc/guc.c:779 msgid "Developer Options" msgstr "Параметры для разработчиков" -#: utils/misc/guc.c:790 +#: utils/misc/guc.c:837 msgid "" "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "" "Допустимые единицы измерения для этого параметра: \"B\", \"kB\", \"MB\", \"GB" "\" и \"TB\"." -#: utils/misc/guc.c:827 +#: utils/misc/guc.c:874 msgid "" "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", " "and \"d\"." @@ -26726,80 +27343,85 @@ msgstr "" "Допустимые единицы измерения для этого параметра: \"us\", \"ms\", \"s\", " "\"min\", \"h\" и \"d\"." -#: utils/misc/guc.c:889 +#: utils/misc/guc.c:936 msgid "Enables the planner's use of sequential-scan plans." msgstr "" "Разрешает планировщику использовать планы последовательного сканирования." -#: utils/misc/guc.c:899 +#: utils/misc/guc.c:946 msgid "Enables the planner's use of index-scan plans." msgstr "Разрешает планировщику использовать планы сканирования по индексу." -#: utils/misc/guc.c:909 +#: utils/misc/guc.c:956 msgid "Enables the planner's use of index-only-scan plans." msgstr "Разрешает планировщику использовать планы сканирования только индекса." -#: utils/misc/guc.c:919 +#: utils/misc/guc.c:966 msgid "Enables the planner's use of bitmap-scan plans." msgstr "" "Разрешает планировщику использовать планы сканирования по битовой карте." -#: utils/misc/guc.c:929 +#: utils/misc/guc.c:976 msgid "Enables the planner's use of TID scan plans." msgstr "Разрешает планировщику использовать планы сканирования TID." -#: utils/misc/guc.c:939 +#: utils/misc/guc.c:986 msgid "Enables the planner's use of explicit sort steps." msgstr "Разрешает планировщику использовать шаги с явной сортировкой." -#: utils/misc/guc.c:949 +#: utils/misc/guc.c:996 +msgid "Enables the planner's use of incremental sort steps." +msgstr "" +"Разрешает планировщику использовать шаги с инкрементальной сортировкой." + +#: utils/misc/guc.c:1005 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Разрешает планировщику использовать планы агрегирования по хешу." -#: utils/misc/guc.c:959 +#: utils/misc/guc.c:1015 msgid "Enables the planner's use of materialization." msgstr "Разрешает планировщику использовать материализацию." -#: utils/misc/guc.c:969 +#: utils/misc/guc.c:1025 msgid "Enables the planner's use of nested-loop join plans." msgstr "" "Разрешает планировщику использовать планы соединения с вложенными циклами." -#: utils/misc/guc.c:979 +#: utils/misc/guc.c:1035 msgid "Enables the planner's use of merge join plans." msgstr "Разрешает планировщику использовать планы соединения слиянием." -#: utils/misc/guc.c:989 +#: utils/misc/guc.c:1045 msgid "Enables the planner's use of hash join plans." msgstr "Разрешает планировщику использовать планы соединения по хешу." -#: utils/misc/guc.c:999 +#: utils/misc/guc.c:1055 msgid "Enables the planner's use of gather merge plans." msgstr "Разрешает планировщику использовать планы сбора слиянием." -#: utils/misc/guc.c:1009 +#: utils/misc/guc.c:1065 msgid "Enables partitionwise join." msgstr "Включает соединения с учётом секционирования." -#: utils/misc/guc.c:1019 +#: utils/misc/guc.c:1075 msgid "Enables partitionwise aggregation and grouping." msgstr "Включает агрегирование и группировку с учётом секционирования." -#: utils/misc/guc.c:1029 +#: utils/misc/guc.c:1085 msgid "Enables the planner's use of parallel append plans." msgstr "Разрешает планировщику использовать планы параллельного добавления." -#: utils/misc/guc.c:1039 +#: utils/misc/guc.c:1095 msgid "Enables the planner's use of parallel hash plans." msgstr "" "Разрешает планировщику использовать планы параллельного соединения по хешу." -#: utils/misc/guc.c:1049 +#: utils/misc/guc.c:1105 msgid "Enables plan-time and run-time partition pruning." msgstr "" "Включает устранение секций во время планирования и выполнения запросов." -#: utils/misc/guc.c:1050 +#: utils/misc/guc.c:1106 msgid "" "Allows the query planner and executor to compare partition bounds to " "conditions in the query to determine which partitions must be scanned." @@ -26807,43 +27429,43 @@ msgstr "" "Разрешает планировщику и исполнителю запросов сопоставлять границы секций с " "условиями в запросе и выделять отдельные секции для сканирования." -#: utils/misc/guc.c:1061 +#: utils/misc/guc.c:1117 msgid "Enables genetic query optimization." msgstr "Включает генетическую оптимизацию запросов." -#: utils/misc/guc.c:1062 +#: utils/misc/guc.c:1118 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Этот алгоритм пытается построить план без полного перебора." -#: utils/misc/guc.c:1073 +#: utils/misc/guc.c:1129 msgid "Shows whether the current user is a superuser." msgstr "Показывает, является ли текущий пользователь суперпользователем." -#: utils/misc/guc.c:1083 +#: utils/misc/guc.c:1139 msgid "Enables advertising the server via Bonjour." msgstr "Включает объявление сервера посредством Bonjour." -#: utils/misc/guc.c:1092 +#: utils/misc/guc.c:1148 msgid "Collects transaction commit time." msgstr "Записывает время фиксации транзакций." -#: utils/misc/guc.c:1101 +#: utils/misc/guc.c:1157 msgid "Enables SSL connections." msgstr "Разрешает SSL-подключения." -#: utils/misc/guc.c:1110 +#: utils/misc/guc.c:1166 msgid "Also use ssl_passphrase_command during server reload." msgstr "Также использовать ssl_passphrase_command при перезагрузке сервера." -#: utils/misc/guc.c:1119 +#: utils/misc/guc.c:1175 msgid "Give priority to server ciphersuite order." msgstr "Назначает более приоритетным набор шифров сервера." -#: utils/misc/guc.c:1128 +#: utils/misc/guc.c:1184 msgid "Forces synchronization of updates to disk." msgstr "Принудительная запись изменений на диск." -#: utils/misc/guc.c:1129 +#: utils/misc/guc.c:1185 msgid "" "The server will use the fsync() system call in several places to make sure " "that updates are physically written to disk. This insures that a database " @@ -26854,11 +27476,11 @@ msgstr "" "физической записи данных на диск. Это позволит привести кластер БД в " "целостное состояние после отказа ОС или оборудования." -#: utils/misc/guc.c:1140 +#: utils/misc/guc.c:1196 msgid "Continues processing after a checksum failure." msgstr "Продолжает обработку при ошибке контрольной суммы." -#: utils/misc/guc.c:1141 +#: utils/misc/guc.c:1197 msgid "" "Detection of a checksum failure normally causes PostgreSQL to report an " "error, aborting the current transaction. Setting ignore_checksum_failure to " @@ -26872,11 +27494,11 @@ msgstr "" "что может привести к сбоям или другим серьёзным проблемам. Это имеет место, " "только если включён контроль целостности страниц." -#: utils/misc/guc.c:1155 +#: utils/misc/guc.c:1211 msgid "Continues processing past damaged page headers." msgstr "Продолжает обработку при повреждении заголовков страниц." -#: utils/misc/guc.c:1156 +#: utils/misc/guc.c:1212 msgid "" "Detection of a damaged page header normally causes PostgreSQL to report an " "error, aborting the current transaction. Setting zero_damaged_pages to true " @@ -26890,12 +27512,36 @@ msgstr "" "продолжит работу. Это приведёт к потере данных, а именно строк в " "повреждённой странице." -#: utils/misc/guc.c:1169 +#: utils/misc/guc.c:1225 +msgid "Continues recovery after an invalid pages failure." +msgstr "" +"Продолжает восстановление после ошибок, связанных с неправильными страницами." + +#: utils/misc/guc.c:1226 +msgid "" +"Detection of WAL records having references to invalid pages during recovery " +"causes PostgreSQL to raise a PANIC-level error, aborting the recovery. " +"Setting ignore_invalid_pages to true causes the system to ignore invalid " +"page references in WAL records (but still report a warning), and continue " +"recovery. This behavior may cause crashes, data loss, propagate or hide " +"corruption, or other serious problems. Only has an effect during recovery or " +"in standby mode." +msgstr "" +"Обнаруживая в записях WAL ссылки на неправильные страницы во время " +"восстановления, PostgreSQL выдаёт ошибку уровня ПАНИКА и прерывает " +"восстановление. Если ignore_invalid_pages равен true, система игнорирует " +"такие некорректные ссылки (но всё же выдаёт предупреждение) и продолжает " +"восстановление. Это может привести к краху сервера, потере данных, " +"распространению или сокрытию повреждения данных и другим серьёзным " +"проблемам. Данный параметр действует только при восстановлении или в режиме " +"резервного сервера." + +#: utils/misc/guc.c:1244 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "" "Запись полных страниц в WAL при первом изменении после контрольной точки." -#: utils/misc/guc.c:1170 +#: utils/misc/guc.c:1245 msgid "" "A page write in process during an operating system crash might be only " "partially written to disk. During recovery, the row changes stored in WAL " @@ -26908,7 +27554,7 @@ msgstr "" "при первом изменении после контрольной точки, что позволяет полностью " "восстановить данные." -#: utils/misc/guc.c:1183 +#: utils/misc/guc.c:1258 msgid "" "Writes full pages to WAL when first modified after a checkpoint, even for a " "non-critical modifications." @@ -26916,83 +27562,83 @@ msgstr "" "Запись полных страниц в WAL при первом изменении после контрольной точки, " "даже при некритических изменениях." -#: utils/misc/guc.c:1193 +#: utils/misc/guc.c:1268 msgid "Compresses full-page writes written in WAL file." msgstr "Сжимать данные при записи полных страниц в журнал." -#: utils/misc/guc.c:1203 +#: utils/misc/guc.c:1278 msgid "Writes zeroes to new WAL files before first use." msgstr "Записывать нули в новые файлы WAL перед первым использованием." -#: utils/misc/guc.c:1213 +#: utils/misc/guc.c:1288 msgid "Recycles WAL files by renaming them." msgstr "Перерабатывать файлы WAL, производя переименование." -#: utils/misc/guc.c:1223 +#: utils/misc/guc.c:1298 msgid "Logs each checkpoint." msgstr "Протоколировать каждую контрольную точку." -#: utils/misc/guc.c:1232 +#: utils/misc/guc.c:1307 msgid "Logs each successful connection." msgstr "Протоколировать устанавливаемые соединения." -#: utils/misc/guc.c:1241 +#: utils/misc/guc.c:1316 msgid "Logs end of a session, including duration." msgstr "Протоколировать конец сеанса, отмечая длительность." -#: utils/misc/guc.c:1250 +#: utils/misc/guc.c:1325 msgid "Logs each replication command." msgstr "Протоколировать каждую команду репликации." -#: utils/misc/guc.c:1259 +#: utils/misc/guc.c:1334 msgid "Shows whether the running server has assertion checks enabled." msgstr "Показывает, включены ли проверки истинности на работающем сервере." -#: utils/misc/guc.c:1274 +#: utils/misc/guc.c:1349 msgid "Terminate session on any error." msgstr "Завершать сеансы при любой ошибке." -#: utils/misc/guc.c:1283 +#: utils/misc/guc.c:1358 msgid "Reinitialize server after backend crash." msgstr "Перезапускать систему БД при аварии серверного процесса." -#: utils/misc/guc.c:1293 +#: utils/misc/guc.c:1368 msgid "Logs the duration of each completed SQL statement." msgstr "Протоколировать длительность каждого выполненного SQL-оператора." -#: utils/misc/guc.c:1302 +#: utils/misc/guc.c:1377 msgid "Logs each query's parse tree." msgstr "Протоколировать дерево разбора для каждого запроса." -#: utils/misc/guc.c:1311 +#: utils/misc/guc.c:1386 msgid "Logs each query's rewritten parse tree." msgstr "Протоколировать перезаписанное дерево разбора для каждого запроса." -#: utils/misc/guc.c:1320 +#: utils/misc/guc.c:1395 msgid "Logs each query's execution plan." msgstr "Протоколировать план выполнения каждого запроса." -#: utils/misc/guc.c:1329 +#: utils/misc/guc.c:1404 msgid "Indents parse and plan tree displays." msgstr "Отступы при отображении деревьев разбора и плана запросов." -#: utils/misc/guc.c:1338 +#: utils/misc/guc.c:1413 msgid "Writes parser performance statistics to the server log." msgstr "Запись статистики разбора запросов в протокол сервера." -#: utils/misc/guc.c:1347 +#: utils/misc/guc.c:1422 msgid "Writes planner performance statistics to the server log." msgstr "Запись статистики планирования в протокол сервера." -#: utils/misc/guc.c:1356 +#: utils/misc/guc.c:1431 msgid "Writes executor performance statistics to the server log." msgstr "Запись статистики выполнения запросов в протокол сервера." -#: utils/misc/guc.c:1365 +#: utils/misc/guc.c:1440 msgid "Writes cumulative performance statistics to the server log." msgstr "Запись общей статистики производительности в протокол сервера." -#: utils/misc/guc.c:1375 +#: utils/misc/guc.c:1450 msgid "" "Logs system resource usage statistics (memory and CPU) on various B-tree " "operations." @@ -27000,11 +27646,11 @@ msgstr "" "Фиксировать статистику использования системных ресурсов (памяти и " "процессора) при различных операциях с b-деревом." -#: utils/misc/guc.c:1387 +#: utils/misc/guc.c:1462 msgid "Collects information about executing commands." msgstr "Собирает информацию о выполняющихся командах." -#: utils/misc/guc.c:1388 +#: utils/misc/guc.c:1463 msgid "" "Enables the collection of information on the currently executing command of " "each session, along with the time at which that command began execution." @@ -27012,60 +27658,60 @@ msgstr "" "Включает сбор информации о командах, выполняющихся во всех сеансах, а также " "время запуска команды." -#: utils/misc/guc.c:1398 +#: utils/misc/guc.c:1473 msgid "Collects statistics on database activity." msgstr "Собирает статистику активности в БД." -#: utils/misc/guc.c:1407 +#: utils/misc/guc.c:1482 msgid "Collects timing statistics for database I/O activity." msgstr "Собирает статистику по времени активности ввода/вывода." -#: utils/misc/guc.c:1417 +#: utils/misc/guc.c:1492 msgid "Updates the process title to show the active SQL command." msgstr "Выводит в заголовок процесса активную SQL-команду." -#: utils/misc/guc.c:1418 +#: utils/misc/guc.c:1493 msgid "" "Enables updating of the process title every time a new SQL command is " "received by the server." msgstr "Отражает в заголовке процесса каждую SQL-команду, поступающую серверу." -#: utils/misc/guc.c:1431 +#: utils/misc/guc.c:1506 msgid "Starts the autovacuum subprocess." msgstr "Запускает подпроцесс автоочистки." -#: utils/misc/guc.c:1441 +#: utils/misc/guc.c:1516 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Генерирует отладочные сообщения для LISTEN и NOTIFY." -#: utils/misc/guc.c:1453 +#: utils/misc/guc.c:1528 msgid "Emits information about lock usage." msgstr "Выдавать информацию о применяемых блокировках." -#: utils/misc/guc.c:1463 +#: utils/misc/guc.c:1538 msgid "Emits information about user lock usage." msgstr "Выдавать информацию о применяемых пользовательских блокировках." -#: utils/misc/guc.c:1473 +#: utils/misc/guc.c:1548 msgid "Emits information about lightweight lock usage." msgstr "Выдавать информацию о применяемых лёгких блокировках." -#: utils/misc/guc.c:1483 +#: utils/misc/guc.c:1558 msgid "" "Dumps information about all current locks when a deadlock timeout occurs." msgstr "" "Выводить информацию обо всех текущих блокировках в случае тайм-аута при " "взаимоблокировке." -#: utils/misc/guc.c:1495 +#: utils/misc/guc.c:1570 msgid "Logs long lock waits." msgstr "Протоколировать длительные ожидания в блокировках." -#: utils/misc/guc.c:1505 +#: utils/misc/guc.c:1580 msgid "Logs the host name in the connection logs." msgstr "Записывать имя узла в протоколы подключений." -#: utils/misc/guc.c:1506 +#: utils/misc/guc.c:1581 msgid "" "By default, connection logs only show the IP address of the connecting host. " "If you want them to show the host name you can turn this on, but depending " @@ -27077,11 +27723,11 @@ msgstr "" "параметр, но учтите, что это может значительно повлиять на " "производительность." -#: utils/misc/guc.c:1517 +#: utils/misc/guc.c:1592 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Обрабатывать \"expr=NULL\" как \"expr IS NULL\"." -#: utils/misc/guc.c:1518 +#: utils/misc/guc.c:1593 msgid "" "When turned on, expressions of the form expr = NULL (or NULL = expr) are " "treated as expr IS NULL, that is, they return true if expr evaluates to the " @@ -27093,25 +27739,25 @@ msgstr "" "совпадает с NULL, и false в противном случае. По правилам expr = NULL всегда " "должно возвращать null (неопределённость)." -#: utils/misc/guc.c:1530 +#: utils/misc/guc.c:1605 msgid "Enables per-database user names." msgstr "Включает связывание имён пользователей с базами данных." -#: utils/misc/guc.c:1539 +#: utils/misc/guc.c:1614 msgid "Sets the default read-only status of new transactions." msgstr "" "Устанавливает режим \"только чтение\" по умолчанию для новых транзакций." -#: utils/misc/guc.c:1548 +#: utils/misc/guc.c:1623 msgid "Sets the current transaction's read-only status." msgstr "Устанавливает режим \"только чтение\" для текущей транзакции." -#: utils/misc/guc.c:1558 +#: utils/misc/guc.c:1633 msgid "Sets the default deferrable status of new transactions." msgstr "" "Устанавливает режим отложенного выполнения по умолчанию для новых транзакций." -#: utils/misc/guc.c:1567 +#: utils/misc/guc.c:1642 msgid "" "Whether to defer a read-only serializable transaction until it can be " "executed with no possible serialization failures." @@ -27119,25 +27765,25 @@ msgstr "" "Определяет, откладывать ли сериализуемую транзакцию \"только чтение\" до " "момента, когда сбой сериализации будет исключён." -#: utils/misc/guc.c:1577 +#: utils/misc/guc.c:1652 msgid "Enable row security." msgstr "Включает защиту на уровне строк." -#: utils/misc/guc.c:1578 +#: utils/misc/guc.c:1653 msgid "When enabled, row security will be applied to all users." msgstr "" "Когда включена, защита на уровне строк распространяется на всех " "пользователей." -#: utils/misc/guc.c:1586 +#: utils/misc/guc.c:1661 msgid "Check function bodies during CREATE FUNCTION." msgstr "Проверять тело функций в момент CREATE FUNCTION." -#: utils/misc/guc.c:1595 +#: utils/misc/guc.c:1670 msgid "Enable input of NULL elements in arrays." msgstr "Разрешать ввод элементов NULL в массивах." -#: utils/misc/guc.c:1596 +#: utils/misc/guc.c:1671 msgid "" "When turned on, unquoted NULL in an array input value means a null value; " "otherwise it is taken literally." @@ -27145,73 +27791,73 @@ msgstr "" "Когда этот параметр включён, NULL без кавычек при вводе в массив " "воспринимается как значение NULL, иначе — как строка." -#: utils/misc/guc.c:1612 +#: utils/misc/guc.c:1687 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "" "WITH OIDS более не поддерживается; единственное допустимое значение — false." -#: utils/misc/guc.c:1622 +#: utils/misc/guc.c:1697 msgid "" "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "" "Запускает подпроцесс для чтения stderr и/или csv-файлов и записи в файлы " "протоколов." -#: utils/misc/guc.c:1631 +#: utils/misc/guc.c:1706 msgid "Truncate existing log files of same name during log rotation." msgstr "" "Очищать уже существующий файл с тем же именем при прокручивании протокола." -#: utils/misc/guc.c:1642 +#: utils/misc/guc.c:1717 msgid "Emit information about resource usage in sorting." msgstr "Выдавать сведения об использовании ресурсов при сортировке." -#: utils/misc/guc.c:1656 +#: utils/misc/guc.c:1731 msgid "Generate debugging output for synchronized scanning." msgstr "Выдавать отладочные сообщения для синхронного сканирования." -#: utils/misc/guc.c:1671 +#: utils/misc/guc.c:1746 msgid "Enable bounded sorting using heap sort." msgstr "" "Разрешить ограниченную сортировку с применением пирамидальной сортировки." -#: utils/misc/guc.c:1684 +#: utils/misc/guc.c:1759 msgid "Emit WAL-related debugging output." msgstr "Выдавать отладочные сообщения, связанные с WAL." -#: utils/misc/guc.c:1696 +#: utils/misc/guc.c:1771 msgid "Datetimes are integer based." msgstr "Целочисленная реализация даты/времени." -#: utils/misc/guc.c:1707 +#: utils/misc/guc.c:1782 msgid "" "Sets whether Kerberos and GSSAPI user names should be treated as case-" "insensitive." msgstr "" "Включает регистронезависимую обработку имён пользователей Kerberos и GSSAPI." -#: utils/misc/guc.c:1717 +#: utils/misc/guc.c:1792 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Предупреждения о спецсимволах '\\' в обычных строках." -#: utils/misc/guc.c:1727 +#: utils/misc/guc.c:1802 msgid "Causes '...' strings to treat backslashes literally." msgstr "Включает буквальную обработку символов '\\' в строках '...'." -#: utils/misc/guc.c:1738 +#: utils/misc/guc.c:1813 msgid "Enable synchronized sequential scans." msgstr "Включить синхронизацию последовательного сканирования." -#: utils/misc/guc.c:1748 +#: utils/misc/guc.c:1823 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Определяет, включать ли транзакцию в целевую точку восстановления." -#: utils/misc/guc.c:1758 +#: utils/misc/guc.c:1833 msgid "Allows connections and queries during recovery." msgstr "" "Разрешает принимать новые подключения и запросы в процессе восстановления." -#: utils/misc/guc.c:1768 +#: utils/misc/guc.c:1843 msgid "" "Allows feedback from a hot standby to the primary that will avoid query " "conflicts." @@ -27219,15 +27865,15 @@ msgstr "" "Разрешает обратную связь сервера горячего резерва с основным для " "предотвращения конфликтов при длительных запросах." -#: utils/misc/guc.c:1778 +#: utils/misc/guc.c:1853 msgid "Allows modifications of the structure of system tables." msgstr "Разрешает модифицировать структуру системных таблиц." -#: utils/misc/guc.c:1789 +#: utils/misc/guc.c:1864 msgid "Disables reading from system indexes." msgstr "Запрещает использование системных индексов." -#: utils/misc/guc.c:1790 +#: utils/misc/guc.c:1865 msgid "" "It does not prevent updating the indexes, so it is safe to use. The worst " "consequence is slowness." @@ -27235,14 +27881,14 @@ msgstr "" "При этом индексы продолжают обновляться, так что данное поведение безопасно. " "Худшее следствие - замедление." -#: utils/misc/guc.c:1801 +#: utils/misc/guc.c:1876 msgid "" "Enables backward compatibility mode for privilege checks on large objects." msgstr "" "Включает режим обратной совместимости при проверке привилегий для больших " "объектов." -#: utils/misc/guc.c:1802 +#: utils/misc/guc.c:1877 msgid "" "Skips privilege checks when reading or modifying large objects, for " "compatibility with PostgreSQL releases prior to 9.0." @@ -27250,73 +27896,81 @@ msgstr "" "Пропускает проверки привилегий при чтении или изменении больших объектов " "(для совместимости с версиями PostgreSQL до 9.0)." -#: utils/misc/guc.c:1812 +#: utils/misc/guc.c:1887 msgid "" "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." msgstr "" "Выдаёт предупреждение о конструкциях, поведение которых изменилось после " "PostgreSQL 9.4." -#: utils/misc/guc.c:1822 +#: utils/misc/guc.c:1897 msgid "When generating SQL fragments, quote all identifiers." msgstr "" "Генерируя SQL-фрагменты, заключать все идентификаторы в двойные кавычки." -#: utils/misc/guc.c:1832 +#: utils/misc/guc.c:1907 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Показывает, включён ли в этом кластере контроль целостности данных." -#: utils/misc/guc.c:1843 +#: utils/misc/guc.c:1918 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "" "Добавлять последовательный номер в сообщения syslog во избежание подавления " "повторов." -#: utils/misc/guc.c:1853 +#: utils/misc/guc.c:1928 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "" "Разбивать сообщения, передаваемые в syslog, по строкам размером не больше " "1024 байт." -#: utils/misc/guc.c:1863 +#: utils/misc/guc.c:1938 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "" "Определяет, будут ли узлы сбора и сбора слиянием также выполнять подпланы." -#: utils/misc/guc.c:1864 +#: utils/misc/guc.c:1939 msgid "Should gather nodes also run subplans, or just gather tuples?" msgstr "" "Должны ли узлы сбора также выполнять подпланы или только собирать кортежи?" -#: utils/misc/guc.c:1874 +#: utils/misc/guc.c:1949 msgid "Allow JIT compilation." msgstr "Включить JIT-компиляцию." -#: utils/misc/guc.c:1885 +#: utils/misc/guc.c:1960 msgid "Register JIT compiled function with debugger." msgstr "Регистрировать JIT-скомпилированные функции в отладчике." -#: utils/misc/guc.c:1902 +#: utils/misc/guc.c:1977 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "Выводить битовый код LLVM для облегчения отладки JIT." -#: utils/misc/guc.c:1913 +#: utils/misc/guc.c:1988 msgid "Allow JIT compilation of expressions." msgstr "Включить JIT-компиляцию выражений." -#: utils/misc/guc.c:1924 +#: utils/misc/guc.c:1999 msgid "Register JIT compiled function with perf profiler." msgstr "Регистрировать JIT-компилируемые функции в профилировщике perf." -#: utils/misc/guc.c:1941 +#: utils/misc/guc.c:2016 msgid "Allow JIT compilation of tuple deforming." msgstr "Разрешить JIT-компиляцию кода преобразования кортежей." -#: utils/misc/guc.c:1952 +#: utils/misc/guc.c:2027 msgid "Whether to continue running after a failure to sync data files." msgstr "Продолжать работу после ошибки при сохранении файлов данных на диске." -#: utils/misc/guc.c:1970 +#: utils/misc/guc.c:2036 +msgid "" +"Sets whether a WAL receiver should create a temporary replication slot if no " +"permanent slot is configured." +msgstr "" +"Определяет, должен ли приёмник WAL создавать временный слот репликации, если " +"не настроен постоянный слот." + +#: utils/misc/guc.c:2054 msgid "" "Forces a switch to the next WAL file if a new file has not been started " "within N seconds." @@ -27324,19 +27978,19 @@ msgstr "" "Принудительно переключаться на следующий файл WAL, если начать новый файл за " "N секунд не удалось." -#: utils/misc/guc.c:1981 +#: utils/misc/guc.c:2065 msgid "Waits N seconds on connection startup after authentication." msgstr "Ждать N секунд при подключении после проверки подлинности." -#: utils/misc/guc.c:1982 utils/misc/guc.c:2528 +#: utils/misc/guc.c:2066 utils/misc/guc.c:2624 msgid "This allows attaching a debugger to the process." msgstr "Это позволяет подключить к процессу отладчик." -#: utils/misc/guc.c:1991 +#: utils/misc/guc.c:2075 msgid "Sets the default statistics target." msgstr "Устанавливает ориентир статистики по умолчанию." -#: utils/misc/guc.c:1992 +#: utils/misc/guc.c:2076 msgid "" "This applies to table columns that have not had a column-specific target set " "via ALTER TABLE SET STATISTICS." @@ -27344,13 +27998,13 @@ msgstr "" "Это значение распространяется на столбцы таблицы, для которых ориентир " "статистики не задан явно через ALTER TABLE SET STATISTICS." -#: utils/misc/guc.c:2001 +#: utils/misc/guc.c:2085 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "" "Задаёт предел для списка FROM, при превышении которого подзапросы не " "сворачиваются." -#: utils/misc/guc.c:2003 +#: utils/misc/guc.c:2087 msgid "" "The planner will merge subqueries into upper queries if the resulting FROM " "list would have no more than this many items." @@ -27358,13 +28012,13 @@ msgstr "" "Планировщик объединит вложенные запросы с внешними, если в полученном списке " "FROM будет не больше заданного числа элементов." -#: utils/misc/guc.c:2014 +#: utils/misc/guc.c:2098 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "" "Задаёт предел для списка FROM, при превышении которого конструкции JOIN " "сохраняются." -#: utils/misc/guc.c:2016 +#: utils/misc/guc.c:2100 msgid "" "The planner will flatten explicit JOIN constructs into lists of FROM items " "whenever a list of no more than this many items would result." @@ -27372,34 +28026,34 @@ msgstr "" "Планировщик будет сносить явные конструкции JOIN в списки FROM, пока в " "результирующем списке не больше заданного числа элементов." -#: utils/misc/guc.c:2027 +#: utils/misc/guc.c:2111 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "" "Задаёт предел для списка FROM, при превышении которого применяется GEQO." -#: utils/misc/guc.c:2037 +#: utils/misc/guc.c:2121 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "" "GEQO: оценка усилий для планирования, задающая значения по умолчанию для " "других параметров GEQO." -#: utils/misc/guc.c:2047 +#: utils/misc/guc.c:2131 msgid "GEQO: number of individuals in the population." msgstr "GEQO: число особей в популяции." -#: utils/misc/guc.c:2048 utils/misc/guc.c:2058 +#: utils/misc/guc.c:2132 utils/misc/guc.c:2142 msgid "Zero selects a suitable default value." msgstr "При нуле выбирается подходящее значение по умолчанию." -#: utils/misc/guc.c:2057 +#: utils/misc/guc.c:2141 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: число итераций алгоритма." -#: utils/misc/guc.c:2069 +#: utils/misc/guc.c:2153 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Задаёт интервал ожидания в блокировке до проверки на взаимоблокировку." -#: utils/misc/guc.c:2080 +#: utils/misc/guc.c:2164 msgid "" "Sets the maximum delay before canceling queries when a hot standby server is " "processing archived WAL data." @@ -27407,7 +28061,7 @@ msgstr "" "Задаёт максимальную задержку до отмены запроса, когда сервер горячего " "резерва обрабатывает данные WAL из архива." -#: utils/misc/guc.c:2091 +#: utils/misc/guc.c:2175 msgid "" "Sets the maximum delay before canceling queries when a hot standby server is " "processing streamed WAL data." @@ -27415,13 +28069,13 @@ msgstr "" "Задаёт максимальную задержку до отмены запроса, когда сервер горячего " "резерва обрабатывает данные WAL из потока." -#: utils/misc/guc.c:2102 +#: utils/misc/guc.c:2186 msgid "Sets the minimum delay for applying changes during recovery." msgstr "" "Задаёт минимальную задержку для применения изменений в процессе " "восстановления." -#: utils/misc/guc.c:2113 +#: utils/misc/guc.c:2197 msgid "" "Sets the maximum interval between WAL receiver status reports to the sending " "server." @@ -27429,37 +28083,37 @@ msgstr "" "Задаёт максимальный интервал между отчётами о состоянии приёмника WAL, " "отправляемыми передающему серверу." -#: utils/misc/guc.c:2124 +#: utils/misc/guc.c:2208 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "" "Задаёт предельное время ожидания для получения данных от передающего сервера." -#: utils/misc/guc.c:2135 +#: utils/misc/guc.c:2219 msgid "Sets the maximum number of concurrent connections." msgstr "Задаёт максимально возможное число подключений." -#: utils/misc/guc.c:2146 +#: utils/misc/guc.c:2230 msgid "Sets the number of connection slots reserved for superusers." msgstr "" "Определяет, сколько слотов подключений забронировано для суперпользователей." -#: utils/misc/guc.c:2160 +#: utils/misc/guc.c:2244 msgid "Sets the number of shared memory buffers used by the server." msgstr "Задаёт количество буферов в разделяемой памяти, используемых сервером." -#: utils/misc/guc.c:2171 +#: utils/misc/guc.c:2255 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Задаёт предельное число временных буферов на один сеанс." -#: utils/misc/guc.c:2182 +#: utils/misc/guc.c:2266 msgid "Sets the TCP port the server listens on." msgstr "Задаёт TCP-порт для работы сервера." -#: utils/misc/guc.c:2192 +#: utils/misc/guc.c:2276 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Задаёт права доступа для Unix-сокета." -#: utils/misc/guc.c:2193 +#: utils/misc/guc.c:2277 msgid "" "Unix-domain sockets use the usual Unix file system permission set. The " "parameter value is expected to be a numeric mode specification in the form " @@ -27471,11 +28125,11 @@ msgstr "" "воспринимаемом системными функциями chmod и umask. (Чтобы использовать " "привычный восьмеричный формат, добавьте в начало ноль (0).)" -#: utils/misc/guc.c:2207 +#: utils/misc/guc.c:2291 msgid "Sets the file permissions for log files." msgstr "Задаёт права доступа к файлам протоколов." -#: utils/misc/guc.c:2208 +#: utils/misc/guc.c:2292 msgid "" "The parameter value is expected to be a numeric mode specification in the " "form accepted by the chmod and umask system calls. (To use the customary " @@ -27485,11 +28139,11 @@ msgstr "" "функциями chmod и umask. (Чтобы использовать привычный восьмеричный формат, " "добавьте в начало ноль (0).)" -#: utils/misc/guc.c:2222 +#: utils/misc/guc.c:2306 msgid "Mode of the data directory." msgstr "Режим каталога данных." -#: utils/misc/guc.c:2223 +#: utils/misc/guc.c:2307 msgid "" "The parameter value is a numeric mode specification in the form accepted by " "the chmod and umask system calls. (To use the customary octal format the " @@ -27499,11 +28153,11 @@ msgstr "" "функциями chmod и umask. (Чтобы использовать привычный восьмеричный формат, " "добавьте в начало ноль (0).)" -#: utils/misc/guc.c:2236 +#: utils/misc/guc.c:2320 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Задаёт предельный объём памяти для рабочих пространств запросов." -#: utils/misc/guc.c:2237 +#: utils/misc/guc.c:2321 msgid "" "This much memory can be used by each internal sort operation and hash table " "before switching to temporary disk files." @@ -27511,112 +28165,124 @@ msgstr "" "Такой объём памяти может использоваться каждой внутренней операцией " "сортировки и таблицей хешей до переключения на временные файлы на диске." -#: utils/misc/guc.c:2249 +#: utils/misc/guc.c:2333 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Задаёт предельный объём памяти для операций по обслуживанию." -#: utils/misc/guc.c:2250 +#: utils/misc/guc.c:2334 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Подразумеваются в частности операции VACUUM и CREATE INDEX." -#: utils/misc/guc.c:2265 +#: utils/misc/guc.c:2344 +msgid "Sets the maximum memory to be used for logical decoding." +msgstr "Задаёт предельный объём памяти для логического декодирования." + +#: utils/misc/guc.c:2345 +msgid "" +"This much memory can be used by each internal reorder buffer before spilling " +"to disk." +msgstr "" +"Такой объём памяти может использоваться каждым внутренним буфером " +"пересортировки до вымещения данных на диск." + +#: utils/misc/guc.c:2361 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Задаёт максимальную глубину стека (в КБ)." -#: utils/misc/guc.c:2276 +#: utils/misc/guc.c:2372 msgid "Limits the total size of all temporary files used by each process." msgstr "" "Ограничивает общий размер всех временных файлов, доступный для каждого " "процесса." -#: utils/misc/guc.c:2277 +#: utils/misc/guc.c:2373 msgid "-1 means no limit." msgstr "-1 отключает ограничение." -#: utils/misc/guc.c:2287 +#: utils/misc/guc.c:2383 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Стоимость очистки для страницы, найденной в кеше." -#: utils/misc/guc.c:2297 +#: utils/misc/guc.c:2393 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Стоимость очистки для страницы, не найденной в кеше." -#: utils/misc/guc.c:2307 +#: utils/misc/guc.c:2403 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Стоимость очистки для страницы, которая не была \"грязной\"." -#: utils/misc/guc.c:2317 +#: utils/misc/guc.c:2413 msgid "Vacuum cost amount available before napping." msgstr "Суммарная стоимость очистки, при которой нужна передышка." -#: utils/misc/guc.c:2327 +#: utils/misc/guc.c:2423 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "" "Суммарная стоимость очистки, при которой нужна передышка, для автоочистки." -#: utils/misc/guc.c:2337 +#: utils/misc/guc.c:2433 msgid "" "Sets the maximum number of simultaneously open files for each server process." msgstr "" "Задаёт предельное число одновременно открытых файлов для каждого серверного " "процесса." -#: utils/misc/guc.c:2350 +#: utils/misc/guc.c:2446 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Задаёт предельное число одновременно подготовленных транзакций." -#: utils/misc/guc.c:2361 +#: utils/misc/guc.c:2457 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Задаёт минимальный OID таблиц, для которых отслеживаются блокировки." -#: utils/misc/guc.c:2362 +#: utils/misc/guc.c:2458 msgid "Is used to avoid output on system tables." msgstr "Применяется для игнорирования системных таблиц." -#: utils/misc/guc.c:2371 +#: utils/misc/guc.c:2467 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Задаёт OID таблицы для безусловного отслеживания блокировок." -#: utils/misc/guc.c:2383 +#: utils/misc/guc.c:2479 msgid "Sets the maximum allowed duration of any statement." msgstr "Задаёт предельную длительность для любого оператора." -#: utils/misc/guc.c:2384 utils/misc/guc.c:2395 utils/misc/guc.c:2406 +#: utils/misc/guc.c:2480 utils/misc/guc.c:2491 utils/misc/guc.c:2502 msgid "A value of 0 turns off the timeout." msgstr "Нулевое значение отключает тайм-аут." -#: utils/misc/guc.c:2394 +#: utils/misc/guc.c:2490 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Задаёт максимальную продолжительность ожидания блокировок." -#: utils/misc/guc.c:2405 +#: utils/misc/guc.c:2501 msgid "Sets the maximum allowed duration of any idling transaction." msgstr "Задаёт предельно допустимую длительность для простаивающих транзакций." -#: utils/misc/guc.c:2416 +#: utils/misc/guc.c:2512 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "" "Минимальный возраст строк таблицы, при котором VACUUM может их заморозить." -#: utils/misc/guc.c:2426 +#: utils/misc/guc.c:2522 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "" "Возраст, при котором VACUUM должен сканировать всю таблицу с целью " "заморозить кортежи." -#: utils/misc/guc.c:2436 +#: utils/misc/guc.c:2532 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "" "Минимальный возраст, при котором VACUUM будет замораживать MultiXactId в " "строке таблицы." -#: utils/misc/guc.c:2446 +#: utils/misc/guc.c:2542 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "" "Возраст multixact, при котором VACUUM должен сканировать всю таблицу с целью " "заморозить кортежи." -#: utils/misc/guc.c:2456 +#: utils/misc/guc.c:2552 msgid "" "Number of transactions by which VACUUM and HOT cleanup should be deferred, " "if any." @@ -27624,11 +28290,11 @@ msgstr "" "Определяет, на сколько транзакций следует задержать старые строки, выполняя " "VACUUM или \"горячее\" обновление." -#: utils/misc/guc.c:2469 +#: utils/misc/guc.c:2565 msgid "Sets the maximum number of locks per transaction." msgstr "Задаёт предельное число блокировок на транзакцию." -#: utils/misc/guc.c:2470 +#: utils/misc/guc.c:2566 msgid "" "The shared lock table is sized on the assumption that at most " "max_locks_per_transaction * max_connections distinct objects will need to be " @@ -27638,11 +28304,11 @@ msgstr "" "один момент времени потребуется заблокировать не больше чем " "max_locks_per_transaction * max_connections различных объектов." -#: utils/misc/guc.c:2481 +#: utils/misc/guc.c:2577 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Задаёт предельное число предикатных блокировок на транзакцию." -#: utils/misc/guc.c:2482 +#: utils/misc/guc.c:2578 msgid "" "The shared predicate lock table is sized on the assumption that at most " "max_pred_locks_per_transaction * max_connections distinct objects will need " @@ -27652,14 +28318,14 @@ msgstr "" "предположения, что в один момент времени потребуется заблокировать не больше " "чем max_pred_locks_per_transaction * max_connections различных объектов." -#: utils/misc/guc.c:2493 +#: utils/misc/guc.c:2589 msgid "" "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "" "Задаёт максимальное число страниц и кортежей, блокируемых предикатными " "блокировками в одном отношении." -#: utils/misc/guc.c:2494 +#: utils/misc/guc.c:2590 msgid "" "If more than this total of pages and tuples in the same relation are locked " "by a connection, those locks are replaced by a relation-level lock." @@ -27667,13 +28333,13 @@ msgstr "" "Если одним соединением блокируется больше этого общего числа страниц и " "кортежей, эти блокировки заменяются блокировкой на уровне отношения." -#: utils/misc/guc.c:2504 +#: utils/misc/guc.c:2600 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "" "Задаёт максимальное число кортежей, блокируемых предикатными блокировками в " "одной странице." -#: utils/misc/guc.c:2505 +#: utils/misc/guc.c:2601 msgid "" "If more than this number of tuples on the same page are locked by a " "connection, those locks are replaced by a page-level lock." @@ -27681,39 +28347,40 @@ msgstr "" "Если одним соединением блокируется больше этого числа кортежей на одной " "странице, эти блокировки заменяются блокировкой на уровне страницы." -#: utils/misc/guc.c:2515 +#: utils/misc/guc.c:2611 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Ограничивает время, за которое клиент должен пройти аутентификацию." -#: utils/misc/guc.c:2527 +#: utils/misc/guc.c:2623 msgid "Waits N seconds on connection startup before authentication." msgstr "Ждать N секунд при подключении до проверки подлинности." -#: utils/misc/guc.c:2538 -msgid "Sets the number of WAL files held for standby servers." -msgstr "Определяет, сколько файлов WAL нужно сохранять для резервных серверов." +#: utils/misc/guc.c:2634 +msgid "Sets the size of WAL files held for standby servers." +msgstr "" +"Определяет предельный объём файлов WAL, сохраняемых для резервных серверов." -#: utils/misc/guc.c:2548 +#: utils/misc/guc.c:2645 msgid "Sets the minimum size to shrink the WAL to." msgstr "Задаёт минимальный размер WAL при сжатии." -#: utils/misc/guc.c:2560 +#: utils/misc/guc.c:2657 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Задаёт размер WAL, при котором инициируется контрольная точка." -#: utils/misc/guc.c:2572 +#: utils/misc/guc.c:2669 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "" "Задаёт максимальное время между автоматическими контрольными точками WAL." -#: utils/misc/guc.c:2583 +#: utils/misc/guc.c:2680 msgid "" "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "" "Выдаёт предупреждения, когда сегменты контрольных точек заполняются за это " "время." -#: utils/misc/guc.c:2585 +#: utils/misc/guc.c:2682 msgid "" "Write a message to the server log if checkpoints caused by the filling of " "checkpoint segment files happens more frequently than this number of " @@ -27723,41 +28390,61 @@ msgstr "" "переполнением файлов сегментов, происходят за столько секунд. Нулевое " "значение отключает эти предупреждения." -#: utils/misc/guc.c:2597 utils/misc/guc.c:2754 utils/misc/guc.c:2783 +#: utils/misc/guc.c:2694 utils/misc/guc.c:2910 utils/misc/guc.c:2957 msgid "" "Number of pages after which previously performed writes are flushed to disk." msgstr "" "Число страниц, по достижении которого ранее выполненные операции записи " "сбрасываются на диск." -#: utils/misc/guc.c:2608 +#: utils/misc/guc.c:2705 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Задаёт число буферов дисковых страниц в разделяемой памяти для WAL." -#: utils/misc/guc.c:2619 +#: utils/misc/guc.c:2716 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Задержка между сбросом WAL в процессе, записывающем WAL." -#: utils/misc/guc.c:2630 +#: utils/misc/guc.c:2727 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "" "Объём WAL, обработанный пишущим WAL процессом, при котором инициируется " "сброс журнала на диск." -#: utils/misc/guc.c:2641 +#: utils/misc/guc.c:2738 +msgid "Size of new file to fsync instead of writing WAL." +msgstr "" +"Объём нового файла, при достижении которого файл не пишется в WAL, а " +"сбрасывается на диск." + +#: utils/misc/guc.c:2749 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "" "Задаёт предельное число одновременно работающих процессов передачи WAL." -#: utils/misc/guc.c:2652 +#: utils/misc/guc.c:2760 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Задаёт предельное число одновременно существующих слотов репликации." -#: utils/misc/guc.c:2662 +#: utils/misc/guc.c:2770 +msgid "Sets the maximum WAL size that can be reserved by replication slots." +msgstr "" +"Задаёт максимальный размер WAL, который могут резервировать слоты репликации." + +#: utils/misc/guc.c:2771 +msgid "" +"Replication slots will be marked as failed, and segments released for " +"deletion or recycling, if this much space is occupied by WAL on disk." +msgstr "" +"Если объём WAL на диске достигнет этого значения, слоты репликации будут " +"помечены как нерабочие, а сегменты будут освобождены для удаления или " +"переработки." + +#: utils/misc/guc.c:2783 msgid "Sets the maximum time to wait for WAL replication." msgstr "Задаёт предельное время ожидания репликации WAL." -#: utils/misc/guc.c:2673 +#: utils/misc/guc.c:2794 msgid "" "Sets the delay in microseconds between transaction commit and flushing WAL " "to disk." @@ -27765,18 +28452,18 @@ msgstr "" "Задаёт задержку в микросекундах между фиксированием транзакций и сбросом WAL " "на диск." -#: utils/misc/guc.c:2685 +#: utils/misc/guc.c:2806 msgid "" "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "" "Задаёт минимальное число одновременно открытых транзакций для применения " "commit_delay." -#: utils/misc/guc.c:2696 +#: utils/misc/guc.c:2817 msgid "Sets the number of digits displayed for floating-point values." msgstr "Задаёт число выводимых цифр для чисел с плавающей точкой." -#: utils/misc/guc.c:2697 +#: utils/misc/guc.c:2818 msgid "" "This affects real, double precision, and geometric data types. A zero or " "negative parameter value is added to the standard number of digits (FLT_DIG " @@ -27788,40 +28475,72 @@ msgstr "" "(FLT_DIG или DBL_DIG соответственно). Положительное значение включает режим " "точного вывода." -#: utils/misc/guc.c:2709 -msgid "Sets the minimum execution time above which statements will be logged." +#: utils/misc/guc.c:2830 +msgid "" +"Sets the minimum execution time above which a sample of statements will be " +"logged. Sampling is determined by log_statement_sample_rate." +msgstr "" +"Задаёт предельное время выполнения оператора из выборки, при превышении " +"которого он выводится в журнал. Выборка определяется параметром " +"log_statement_sample_rate." + +#: utils/misc/guc.c:2833 +msgid "Zero logs a sample of all queries. -1 turns this feature off." +msgstr "При 0 выводятся все запросы в выборке; -1 отключает эти сообщения." + +#: utils/misc/guc.c:2843 +msgid "" +"Sets the minimum execution time above which all statements will be logged." msgstr "" -"Задаёт предельное время выполнения оператора, при превышении которого он " -"фиксируется в протоколе." +"Задаёт предельное время выполнения любого оператора, при превышении которого " +"он выводится в журнал." -#: utils/misc/guc.c:2711 +#: utils/misc/guc.c:2845 msgid "Zero prints all queries. -1 turns this feature off." -msgstr "При 0 протоколируются все запросы; -1 отключает эти сообщения." +msgstr "При 0 выводятся все запросы; -1 отключает эти сообщения." -#: utils/misc/guc.c:2721 +#: utils/misc/guc.c:2855 msgid "" "Sets the minimum execution time above which autovacuum actions will be " "logged." msgstr "" "Задаёт предельное время выполнения автоочистки, при превышении которого эта " -"операция фиксируется в протоколе." +"операция протоколируется в журнале." -#: utils/misc/guc.c:2723 +#: utils/misc/guc.c:2857 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "" "При 0 протоколируются все операции автоочистки; -1 отключает эти сообщения." -#: utils/misc/guc.c:2733 +#: utils/misc/guc.c:2867 +msgid "" +"When logging statements, limit logged parameter values to first N bytes." +msgstr "" +"Обрезать длинные значения параметров выводимых в журнал операторов до первых " +"N байт." + +#: utils/misc/guc.c:2868 utils/misc/guc.c:2879 +msgid "-1 to print values in full." +msgstr "При -1 значения выводятся полностью." + +#: utils/misc/guc.c:2878 +msgid "" +"When reporting an error, limit logged parameter values to first N bytes." +msgstr "" +"Обрезать значения параметров, выводимые в сообщениях об ошибках, до первых N " +"байт." + +#: utils/misc/guc.c:2889 msgid "Background writer sleep time between rounds." msgstr "Время простоя в процессе фоновой записи между подходами." -#: utils/misc/guc.c:2744 +#: utils/misc/guc.c:2900 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "" "Максимальное число LRU-страниц, сбрасываемых за один подход, в процессе " "фоновой записи." -#: utils/misc/guc.c:2767 +#: utils/misc/guc.c:2923 msgid "" "Number of simultaneous requests that can be handled efficiently by the disk " "subsystem." @@ -27829,100 +28548,115 @@ msgstr "" "Число одновременных запросов, которые могут быть эффективно обработаны " "дисковой подсистемой." -#: utils/misc/guc.c:2768 +#: utils/misc/guc.c:2924 msgid "" "For RAID arrays, this should be approximately the number of drive spindles " "in the array." msgstr "" "Для RAID-массивов это примерно равно числу физических дисков в массиве." -#: utils/misc/guc.c:2796 +#: utils/misc/guc.c:2941 +msgid "" +"A variant of effective_io_concurrency that is used for maintenance work." +msgstr "" +"Вариация параметра effective_io_concurrency, предназначенная для операций " +"обслуживания БД." + +#: utils/misc/guc.c:2970 msgid "Maximum number of concurrent worker processes." msgstr "Задаёт максимально возможное число рабочих процессов." -#: utils/misc/guc.c:2808 +#: utils/misc/guc.c:2982 msgid "Maximum number of logical replication worker processes." msgstr "" "Задаёт максимально возможное число рабочих процессов логической репликации." -#: utils/misc/guc.c:2820 +#: utils/misc/guc.c:2994 msgid "Maximum number of table synchronization workers per subscription." msgstr "" "Задаёт максимально возможное число процессов синхронизации таблиц для одной " "подписки." -#: utils/misc/guc.c:2830 +#: utils/misc/guc.c:3004 msgid "Automatic log file rotation will occur after N minutes." msgstr "Автоматическая прокрутка файла протокола через каждые N минут." -#: utils/misc/guc.c:2841 +#: utils/misc/guc.c:3015 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "" "Автоматическая прокрутка файла протокола при выходе за предел N килобайт." -#: utils/misc/guc.c:2852 +#: utils/misc/guc.c:3026 msgid "Shows the maximum number of function arguments." msgstr "Показывает максимально возможное число аргументов функций." -#: utils/misc/guc.c:2863 +#: utils/misc/guc.c:3037 msgid "Shows the maximum number of index keys." msgstr "Показывает максимально возможное число ключей в индексе." -#: utils/misc/guc.c:2874 +#: utils/misc/guc.c:3048 msgid "Shows the maximum identifier length." msgstr "Показывает максимально возможную длину идентификатора." -#: utils/misc/guc.c:2885 +#: utils/misc/guc.c:3059 msgid "Shows the size of a disk block." msgstr "Показывает размер дискового блока." -#: utils/misc/guc.c:2896 +#: utils/misc/guc.c:3070 msgid "Shows the number of pages per disk file." msgstr "Показывает число страниц в одном файле." -#: utils/misc/guc.c:2907 +#: utils/misc/guc.c:3081 msgid "Shows the block size in the write ahead log." msgstr "Показывает размер блока в журнале WAL." -#: utils/misc/guc.c:2918 +#: utils/misc/guc.c:3092 msgid "" "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "" "Задаёт время задержки перед повторной попыткой обращения к WAL после неудачи." -#: utils/misc/guc.c:2930 +#: utils/misc/guc.c:3104 msgid "Shows the size of write ahead log segments." msgstr "Показывает размер сегментов журнала предзаписи." -#: utils/misc/guc.c:2943 +#: utils/misc/guc.c:3117 msgid "Time to sleep between autovacuum runs." msgstr "Время простоя между запусками автоочистки." -#: utils/misc/guc.c:2953 +#: utils/misc/guc.c:3127 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Минимальное число изменений или удалений кортежей, вызывающее очистку." -#: utils/misc/guc.c:2962 +#: utils/misc/guc.c:3136 +msgid "" +"Minimum number of tuple inserts prior to vacuum, or -1 to disable insert " +"vacuums." +msgstr "" +"Минимальное число добавлений кортежей, вызывающее очистку; при -1 такая " +"очистка отключается." + +#: utils/misc/guc.c:3145 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "" "Минимальное число добавлений, изменений или удалений кортежей, вызывающее " "анализ." -#: utils/misc/guc.c:2972 +#: utils/misc/guc.c:3155 msgid "" "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "" "Возраст, при котором необходима автоочистка таблицы для предотвращения " "зацикливания ID транзакций." -#: utils/misc/guc.c:2983 +#: utils/misc/guc.c:3166 msgid "" "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "" "Возраст multixact, при котором необходима автоочистка таблицы для " "предотвращения зацикливания multixact." -#: utils/misc/guc.c:2993 +#: utils/misc/guc.c:3176 msgid "" "Sets the maximum number of simultaneously running autovacuum worker " "processes." @@ -27930,30 +28664,30 @@ msgstr "" "Задаёт предельное число одновременно выполняющихся рабочих процессов " "автоочистки." -#: utils/misc/guc.c:3003 +#: utils/misc/guc.c:3186 msgid "" "Sets the maximum number of parallel processes per maintenance operation." msgstr "" "Задаёт максимальное число параллельных процессов на одну операцию " "обслуживания." -#: utils/misc/guc.c:3013 +#: utils/misc/guc.c:3196 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Задаёт максимальное число параллельных процессов на узел исполнителя." -#: utils/misc/guc.c:3024 +#: utils/misc/guc.c:3207 msgid "" "Sets the maximum number of parallel workers that can be active at one time." msgstr "" "Задаёт максимальное число параллельных процессов, которые могут быть активны " "одновременно." -#: utils/misc/guc.c:3035 +#: utils/misc/guc.c:3218 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "" "Задаёт предельный объём памяти для каждого рабочего процесса автоочистки." -#: utils/misc/guc.c:3046 +#: utils/misc/guc.c:3229 msgid "" "Time before a snapshot is too old to read pages changed after the snapshot " "was taken." @@ -27961,33 +28695,33 @@ msgstr "" "Срок, по истечении которого снимок считается слишком старым для получения " "страниц, изменённых после создания снимка." -#: utils/misc/guc.c:3047 +#: utils/misc/guc.c:3230 msgid "A value of -1 disables this feature." msgstr "Значение -1 отключает это поведение." -#: utils/misc/guc.c:3057 +#: utils/misc/guc.c:3240 msgid "Time between issuing TCP keepalives." msgstr "Интервал между TCP-пакетами пульса (keep-alive)." -#: utils/misc/guc.c:3058 utils/misc/guc.c:3069 utils/misc/guc.c:3193 +#: utils/misc/guc.c:3241 utils/misc/guc.c:3252 utils/misc/guc.c:3376 msgid "A value of 0 uses the system default." msgstr "При нулевом значении действует системный параметр." -#: utils/misc/guc.c:3068 +#: utils/misc/guc.c:3251 msgid "Time between TCP keepalive retransmits." msgstr "Интервал между повторениями TCP-пакетов пульса (keep-alive)." -#: utils/misc/guc.c:3079 +#: utils/misc/guc.c:3262 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "" "Повторное согласование SSL более не поддерживается; единственное допустимое " "значение - 0." -#: utils/misc/guc.c:3090 +#: utils/misc/guc.c:3273 msgid "Maximum number of TCP keepalive retransmits." msgstr "Максимальное число повторений TCP-пакетов пульса (keep-alive)." -#: utils/misc/guc.c:3091 +#: utils/misc/guc.c:3274 msgid "" "This controls the number of consecutive keepalive retransmits that can be " "lost before a connection is considered dead. A value of 0 uses the system " @@ -27997,15 +28731,15 @@ msgstr "" "прежде чем соединение будет считаться пропавшим. При нулевом значении " "действует системный параметр." -#: utils/misc/guc.c:3102 +#: utils/misc/guc.c:3285 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Ограничивает результат точного поиска с использованием GIN." -#: utils/misc/guc.c:3113 +#: utils/misc/guc.c:3296 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Подсказывает планировщику примерный общий размер кешей данных." -#: utils/misc/guc.c:3114 +#: utils/misc/guc.c:3297 msgid "" "That is, the total size of the caches (kernel cache and shared buffers) used " "for PostgreSQL data files. This is measured in disk pages, which are " @@ -28015,12 +28749,12 @@ msgstr "" "попадают файлы данных PostgreSQL. Размер задаётся в дисковых страницах " "(обычно это 8 КБ)." -#: utils/misc/guc.c:3125 +#: utils/misc/guc.c:3308 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "" "Задаёт минимальный объём данных в таблице для параллельного сканирования." -#: utils/misc/guc.c:3126 +#: utils/misc/guc.c:3309 msgid "" "If the planner estimates that it will read a number of table pages too small " "to reach this limit, a parallel scan will not be considered." @@ -28029,12 +28763,12 @@ msgstr "" "задано этим ограничением, он исключает параллельное сканирование из " "рассмотрения." -#: utils/misc/guc.c:3136 +#: utils/misc/guc.c:3319 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "" "Задаёт минимальный объём данных в индексе для параллельного сканирования." -#: utils/misc/guc.c:3137 +#: utils/misc/guc.c:3320 msgid "" "If the planner estimates that it will read a number of index pages too small " "to reach this limit, a parallel scan will not be considered." @@ -28043,39 +28777,39 @@ msgstr "" "задано этим ограничением, он исключает параллельное сканирование из " "рассмотрения." -#: utils/misc/guc.c:3148 +#: utils/misc/guc.c:3331 msgid "Shows the server version as an integer." msgstr "Показывает версию сервера в виде целого числа." -#: utils/misc/guc.c:3159 +#: utils/misc/guc.c:3342 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "" "Фиксирует в протоколе превышение временными файлами заданного размера (в КБ)." -#: utils/misc/guc.c:3160 +#: utils/misc/guc.c:3343 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "" "При 0 отмечаются все файлы; при -1 эти сообщения отключаются (по умолчанию)." -#: utils/misc/guc.c:3170 +#: utils/misc/guc.c:3353 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Задаёт размер, резервируемый для pg_stat_activity.query (в байтах)." -#: utils/misc/guc.c:3181 +#: utils/misc/guc.c:3364 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Задаёт максимальный размер списка-очереди для GIN-индекса." -#: utils/misc/guc.c:3192 +#: utils/misc/guc.c:3375 msgid "TCP user timeout." msgstr "Пользовательский таймаут TCP." -#: utils/misc/guc.c:3212 +#: utils/misc/guc.c:3395 msgid "" "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "" "Задаёт для планировщика ориентир стоимости последовательного чтения страницы." -#: utils/misc/guc.c:3223 +#: utils/misc/guc.c:3406 msgid "" "Sets the planner's estimate of the cost of a nonsequentially fetched disk " "page." @@ -28083,13 +28817,13 @@ msgstr "" "Задаёт для планировщика ориентир стоимости непоследовательного чтения " "страницы." -#: utils/misc/guc.c:3234 +#: utils/misc/guc.c:3417 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "" "Задаёт для планировщика ориентир стоимости обработки каждого кортежа " "(строки)." -#: utils/misc/guc.c:3245 +#: utils/misc/guc.c:3428 msgid "" "Sets the planner's estimate of the cost of processing each index entry " "during an index scan." @@ -28097,7 +28831,7 @@ msgstr "" "Задаёт для планировщика ориентир стоимости обработки каждого элемента " "индекса в процессе сканирования индекса." -#: utils/misc/guc.c:3256 +#: utils/misc/guc.c:3439 msgid "" "Sets the planner's estimate of the cost of processing each operator or " "function call." @@ -28105,7 +28839,7 @@ msgstr "" "Задаёт для планировщика ориентир стоимости обработки каждого оператора или " "вызова функции." -#: utils/misc/guc.c:3267 +#: utils/misc/guc.c:3450 msgid "" "Sets the planner's estimate of the cost of passing each tuple (row) from " "worker to master backend." @@ -28113,7 +28847,7 @@ msgstr "" "Задаёт для планировщика ориентир стоимости передачи каждого кортежа (строки) " "от рабочего процесса обслуживающему." -#: utils/misc/guc.c:3278 +#: utils/misc/guc.c:3461 msgid "" "Sets the planner's estimate of the cost of starting up worker processes for " "parallel query." @@ -28121,66 +28855,70 @@ msgstr "" "Задаёт для планировщика ориентир стоимости запуска рабочих процессов для " "параллельного выполнения запроса." -#: utils/misc/guc.c:3290 +#: utils/misc/guc.c:3473 msgid "Perform JIT compilation if query is more expensive." msgstr "Стоимость запроса, при превышении которой производится JIT-компиляция." -#: utils/misc/guc.c:3291 +#: utils/misc/guc.c:3474 msgid "-1 disables JIT compilation." msgstr "-1 отключает JIT-компиляцию." -#: utils/misc/guc.c:3301 +#: utils/misc/guc.c:3484 msgid "Optimize JITed functions if query is more expensive." msgstr "" "Стоимость запроса, при превышении которой оптимизируются JIT-" "скомпилированные функции." -#: utils/misc/guc.c:3302 +#: utils/misc/guc.c:3485 msgid "-1 disables optimization." msgstr "-1 отключает оптимизацию." -#: utils/misc/guc.c:3312 +#: utils/misc/guc.c:3495 msgid "Perform JIT inlining if query is more expensive." msgstr "Стоимость запроса, при которой выполняется встраивание JIT." -#: utils/misc/guc.c:3313 +#: utils/misc/guc.c:3496 msgid "-1 disables inlining." msgstr "-1 отключает встраивание кода." -#: utils/misc/guc.c:3323 +#: utils/misc/guc.c:3506 msgid "" "Sets the planner's estimate of the fraction of a cursor's rows that will be " "retrieved." msgstr "" "Задаёт для планировщика ориентир доли требуемых строк курсора в общем числе." -#: utils/misc/guc.c:3335 +#: utils/misc/guc.c:3518 msgid "GEQO: selective pressure within the population." msgstr "GEQO: селективное давление в популяции." -#: utils/misc/guc.c:3346 +#: utils/misc/guc.c:3529 msgid "GEQO: seed for random path selection." msgstr "GEQO: отправное значение для случайного выбора пути." -#: utils/misc/guc.c:3357 +#: utils/misc/guc.c:3540 +msgid "Multiple of work_mem to use for hash tables." +msgstr "Множитель work_mem, определяющий объём памяти для хеш-таблиц." + +#: utils/misc/guc.c:3551 msgid "Multiple of the average buffer usage to free per round." msgstr "" "Множитель для среднего числа использованных буферов, определяющий число " "буферов, освобождаемых за один подход." -#: utils/misc/guc.c:3367 +#: utils/misc/guc.c:3561 msgid "Sets the seed for random-number generation." msgstr "Задаёт отправное значение для генератора случайных чисел." -#: utils/misc/guc.c:3378 +#: utils/misc/guc.c:3572 msgid "Vacuum cost delay in milliseconds." msgstr "Задержка очистки (в миллисекундах)." -#: utils/misc/guc.c:3389 +#: utils/misc/guc.c:3583 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Задержка очистки для автоочистки (в миллисекундах)." -#: utils/misc/guc.c:3400 +#: utils/misc/guc.c:3594 msgid "" "Number of tuple updates or deletes prior to vacuum as a fraction of " "reltuples." @@ -28188,7 +28926,13 @@ msgstr "" "Отношение числа обновлений или удалений кортежей к reltuples, определяющее " "потребность в очистке." -#: utils/misc/guc.c:3409 +#: utils/misc/guc.c:3604 +msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." +msgstr "" +"Отношение числа добавлений кортежей к reltuples, определяющее потребность в " +"очистке." + +#: utils/misc/guc.c:3614 msgid "" "Number of tuple inserts, updates, or deletes prior to analyze as a fraction " "of reltuples." @@ -28196,7 +28940,7 @@ msgstr "" "Отношение числа добавлений, обновлений или удалений кортежей к reltuples, " "определяющее потребность в анализе." -#: utils/misc/guc.c:3419 +#: utils/misc/guc.c:3624 msgid "" "Time spent flushing dirty buffers during checkpoint, as fraction of " "checkpoint interval." @@ -28204,52 +28948,66 @@ msgstr "" "Отношение продолжительности сброса \"грязных\" буферов во время контрольной " "точки к интервалу контрольных точек." -#: utils/misc/guc.c:3429 +#: utils/misc/guc.c:3634 msgid "" "Number of tuple inserts prior to index cleanup as a fraction of reltuples." msgstr "" "Отношение числа добавлений кортежей к reltuples, определяющее потребность в " -"очистке индекса." +"уборке индекса." -#: utils/misc/guc.c:3439 -msgid "Set the fraction of transactions to log for new transactions." +#: utils/misc/guc.c:3644 +msgid "Fraction of statements exceeding log_min_duration_sample to be logged." msgstr "" -"Задаёт долю транзакций, которая будет регистрироваться в протоколе сервера." +"Доля записываемых в журнал операторов с длительностью, превышающей " +"log_min_duration_sample." -#: utils/misc/guc.c:3440 +#: utils/misc/guc.c:3645 +msgid "Use a value between 0.0 (never log) and 1.0 (always log)." +msgstr "" +"Может задаваться значением от 0.0 (не записывать никакие операторы) и 1.0 " +"(записывать все)." + +#: utils/misc/guc.c:3654 +msgid "Set the fraction of transactions to log for new transactions." +msgstr "Задаёт долю транзакций, которая будет записываться в журнал сервера." + +#: utils/misc/guc.c:3655 msgid "" "Logs all statements from a fraction of transactions. Use a value between 0.0 " "(never log) and 1.0 (log all statements for all transactions)." msgstr "" -"Протоколирует все операторы заданной доли транзакций. Значение 0.0 означает " -"— не протоколировать никакие транзакции, а значение 1.0 — протоколировать " -"все операторы всех транзакций." +"Записываться будут все операторы заданной доли транзакций. Значение 0.0 " +"означает — не записывать никакие транзакции, а значение 1.0 — записывать все " +"операторы всех транзакций." -#: utils/misc/guc.c:3460 +#: utils/misc/guc.c:3675 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Задаёт команду оболочки, вызываемую для архивации файла WAL." -#: utils/misc/guc.c:3470 -msgid "Sets the shell command that will retrieve an archived WAL file." -msgstr "Задаёт команду оболочки, которая будет извлекать из архива файл WAL." +#: utils/misc/guc.c:3685 +msgid "" +"Sets the shell command that will be called to retrieve an archived WAL file." +msgstr "" +"Задаёт команду оболочки, которая будет вызываться для извлечения из архива " +"файла WAL." -#: utils/misc/guc.c:3480 +#: utils/misc/guc.c:3695 msgid "Sets the shell command that will be executed at every restart point." msgstr "" "Задаёт команду оболочки, которая будет выполняться при каждой точке " "перезапуска." -#: utils/misc/guc.c:3490 +#: utils/misc/guc.c:3705 msgid "" "Sets the shell command that will be executed once at the end of recovery." msgstr "" "Задаёт команду оболочки, которая будет выполняться в конце восстановления." -#: utils/misc/guc.c:3500 +#: utils/misc/guc.c:3715 msgid "Specifies the timeline to recover into." msgstr "Указывает линию времени для выполнения восстановления." -#: utils/misc/guc.c:3510 +#: utils/misc/guc.c:3725 msgid "" "Set to \"immediate\" to end recovery as soon as a consistent state is " "reached." @@ -28257,24 +29015,24 @@ msgstr "" "Задайте значение \"immediate\", чтобы восстановление остановилось сразу " "после достижения согласованного состояния." -#: utils/misc/guc.c:3519 +#: utils/misc/guc.c:3734 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "" "Задаёт идентификатор транзакции, вплоть до которой будет производиться " "восстановление." -#: utils/misc/guc.c:3528 +#: utils/misc/guc.c:3743 msgid "Sets the time stamp up to which recovery will proceed." msgstr "" "Задаёт момент времени, вплоть до которого будет производиться восстановление." -#: utils/misc/guc.c:3537 +#: utils/misc/guc.c:3752 msgid "Sets the named restore point up to which recovery will proceed." msgstr "" "Задаёт именованную точку восстановления, до которой будет производиться " "восстановление." -#: utils/misc/guc.c:3546 +#: utils/misc/guc.c:3761 msgid "" "Sets the LSN of the write-ahead log location up to which recovery will " "proceed." @@ -28282,71 +29040,71 @@ msgstr "" "Задаёт в виде LSN позицию в журнале предзаписи, до которой будет " "производиться восстановление." -#: utils/misc/guc.c:3556 +#: utils/misc/guc.c:3771 msgid "Specifies a file name whose presence ends recovery in the standby." msgstr "" "Задаёт имя файла, присутствие которого выводит ведомый из режима " "восстановления." -#: utils/misc/guc.c:3566 +#: utils/misc/guc.c:3781 msgid "Sets the connection string to be used to connect to the sending server." msgstr "" "Задаёт строку соединения, которая будет использоваться для подключения к " "передающему серверу." -#: utils/misc/guc.c:3577 +#: utils/misc/guc.c:3792 msgid "Sets the name of the replication slot to use on the sending server." msgstr "" "Задаёт имя слота репликации, который будет использоваться на передающем " "сервере." -#: utils/misc/guc.c:3587 +#: utils/misc/guc.c:3802 msgid "Sets the client's character set encoding." msgstr "Задаёт кодировку символов, используемую клиентом." -#: utils/misc/guc.c:3598 +#: utils/misc/guc.c:3813 msgid "Controls information prefixed to each log line." msgstr "Определяет содержимое префикса каждой строки протокола." -#: utils/misc/guc.c:3599 +#: utils/misc/guc.c:3814 msgid "If blank, no prefix is used." msgstr "При пустом значении префикс также отсутствует." -#: utils/misc/guc.c:3608 +#: utils/misc/guc.c:3823 msgid "Sets the time zone to use in log messages." msgstr "Задаёт часовой пояс для вывода времени в сообщениях протокола." -#: utils/misc/guc.c:3618 +#: utils/misc/guc.c:3833 msgid "Sets the display format for date and time values." msgstr "Устанавливает формат вывода дат и времени." -#: utils/misc/guc.c:3619 +#: utils/misc/guc.c:3834 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Также помогает разбирать неоднозначно заданные вводимые даты." -#: utils/misc/guc.c:3630 +#: utils/misc/guc.c:3845 msgid "Sets the default table access method for new tables." msgstr "Задаёт табличный метод доступа по умолчанию для новых таблиц." -#: utils/misc/guc.c:3641 +#: utils/misc/guc.c:3856 msgid "Sets the default tablespace to create tables and indexes in." msgstr "" "Задаёт табличное пространство по умолчанию для новых таблиц и индексов." -#: utils/misc/guc.c:3642 +#: utils/misc/guc.c:3857 msgid "An empty string selects the database's default tablespace." msgstr "При пустом значении используется табличное пространство базы данных." -#: utils/misc/guc.c:3652 +#: utils/misc/guc.c:3867 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "" "Задаёт табличное пространство(а) для временных таблиц и файлов сортировки." -#: utils/misc/guc.c:3663 +#: utils/misc/guc.c:3878 msgid "Sets the path for dynamically loadable modules." msgstr "Задаёт путь для динамически загружаемых модулей." -#: utils/misc/guc.c:3664 +#: utils/misc/guc.c:3879 msgid "" "If a dynamically loadable module needs to be opened and the specified name " "does not have a directory component (i.e., the name does not contain a " @@ -28356,79 +29114,79 @@ msgstr "" "указан путь (нет символа '/'), система будет искать этот файл в заданном " "пути." -#: utils/misc/guc.c:3677 +#: utils/misc/guc.c:3892 msgid "Sets the location of the Kerberos server key file." msgstr "Задаёт размещение файла с ключом Kerberos для данного сервера." -#: utils/misc/guc.c:3688 +#: utils/misc/guc.c:3903 msgid "Sets the Bonjour service name." msgstr "Задаёт название службы Bonjour." -#: utils/misc/guc.c:3700 +#: utils/misc/guc.c:3915 msgid "Shows the collation order locale." msgstr "Показывает правило сортировки." -#: utils/misc/guc.c:3711 +#: utils/misc/guc.c:3926 msgid "Shows the character classification and case conversion locale." msgstr "Показывает правило классификации символов и преобразования регистра." -#: utils/misc/guc.c:3722 +#: utils/misc/guc.c:3937 msgid "Sets the language in which messages are displayed." msgstr "Задаёт язык выводимых сообщений." -#: utils/misc/guc.c:3732 +#: utils/misc/guc.c:3947 msgid "Sets the locale for formatting monetary amounts." msgstr "Задаёт локаль для форматирования денежных сумм." -#: utils/misc/guc.c:3742 +#: utils/misc/guc.c:3957 msgid "Sets the locale for formatting numbers." msgstr "Задаёт локаль для форматирования чисел." -#: utils/misc/guc.c:3752 +#: utils/misc/guc.c:3967 msgid "Sets the locale for formatting date and time values." msgstr "Задаёт локаль для форматирования дат и времени." -#: utils/misc/guc.c:3762 +#: utils/misc/guc.c:3977 msgid "Lists shared libraries to preload into each backend." msgstr "" "Список разделяемых библиотек, заранее загружаемых в каждый обслуживающий " "процесс." -#: utils/misc/guc.c:3773 +#: utils/misc/guc.c:3988 msgid "Lists shared libraries to preload into server." msgstr "Список разделяемых библиотек, заранее загружаемых в память сервера." -#: utils/misc/guc.c:3784 +#: utils/misc/guc.c:3999 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "" "Список непривилегированных разделяемых библиотек, заранее загружаемых в " "каждый обслуживающий процесс." -#: utils/misc/guc.c:3795 +#: utils/misc/guc.c:4010 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Задаёт порядок просмотра схемы при поиске неполных имён." -#: utils/misc/guc.c:3807 +#: utils/misc/guc.c:4022 msgid "Sets the server (database) character set encoding." msgstr "Задаёт кодировку символов сервера (баз данных)." -#: utils/misc/guc.c:3819 +#: utils/misc/guc.c:4034 msgid "Shows the server version." msgstr "Показывает версию сервера." -#: utils/misc/guc.c:3831 +#: utils/misc/guc.c:4046 msgid "Sets the current role." msgstr "Задаёт текущую роль." -#: utils/misc/guc.c:3843 +#: utils/misc/guc.c:4058 msgid "Sets the session user name." msgstr "Задаёт имя пользователя в сеансе." -#: utils/misc/guc.c:3854 +#: utils/misc/guc.c:4069 msgid "Sets the destination for server log output." msgstr "Определяет, куда будет выводиться протокол сервера." -#: utils/misc/guc.c:3855 +#: utils/misc/guc.c:4070 msgid "" "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and " "\"eventlog\", depending on the platform." @@ -28436,24 +29194,24 @@ msgstr "" "Значение может включать сочетание слов \"stderr\", \"syslog\", \"csvlog\" и " "\"eventlog\", в зависимости от платформы." -#: utils/misc/guc.c:3866 +#: utils/misc/guc.c:4081 msgid "Sets the destination directory for log files." msgstr "Задаёт целевой каталог для файлов протоколов." -#: utils/misc/guc.c:3867 +#: utils/misc/guc.c:4082 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "" "Путь может быть абсолютным или указываться относительно каталога данных." -#: utils/misc/guc.c:3877 +#: utils/misc/guc.c:4092 msgid "Sets the file name pattern for log files." msgstr "Задаёт шаблон имени для файлов протоколов." -#: utils/misc/guc.c:3888 +#: utils/misc/guc.c:4103 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Задаёт имя программы для идентификации сообщений PostgreSQL в syslog." -#: utils/misc/guc.c:3899 +#: utils/misc/guc.c:4114 msgid "" "Sets the application name used to identify PostgreSQL messages in the event " "log." @@ -28461,121 +29219,121 @@ msgstr "" "Задаёт имя приложения для идентификации сообщений PostgreSQL в журнале " "событий." -#: utils/misc/guc.c:3910 +#: utils/misc/guc.c:4125 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "" "Задаёт часовой пояс для вывода и разбора строкового представления времени." -#: utils/misc/guc.c:3920 +#: utils/misc/guc.c:4135 msgid "Selects a file of time zone abbreviations." msgstr "Выбирает файл с сокращёнными названиями часовых поясов." -#: utils/misc/guc.c:3930 +#: utils/misc/guc.c:4145 msgid "Sets the owning group of the Unix-domain socket." msgstr "Задаёт группу-владельца Unix-сокета." -#: utils/misc/guc.c:3931 +#: utils/misc/guc.c:4146 msgid "" "The owning user of the socket is always the user that starts the server." msgstr "" "Собственно владельцем сокета всегда будет пользователь, запускающий сервер." -#: utils/misc/guc.c:3941 +#: utils/misc/guc.c:4156 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Задаёт каталоги, где будут создаваться Unix-сокеты." -#: utils/misc/guc.c:3956 +#: utils/misc/guc.c:4171 msgid "Sets the host name or IP address(es) to listen to." msgstr "Задаёт имя узла или IP-адрес(а) для привязки." -#: utils/misc/guc.c:3971 +#: utils/misc/guc.c:4186 msgid "Sets the server's data directory." msgstr "Определяет каталог данных сервера." -#: utils/misc/guc.c:3982 +#: utils/misc/guc.c:4197 msgid "Sets the server's main configuration file." msgstr "Определяет основной файл конфигурации сервера." -#: utils/misc/guc.c:3993 +#: utils/misc/guc.c:4208 msgid "Sets the server's \"hba\" configuration file." msgstr "Задаёт путь к файлу конфигурации \"hba\"." -#: utils/misc/guc.c:4004 +#: utils/misc/guc.c:4219 msgid "Sets the server's \"ident\" configuration file." msgstr "Задаёт путь к файлу конфигурации \"ident\"." -#: utils/misc/guc.c:4015 +#: utils/misc/guc.c:4230 msgid "Writes the postmaster PID to the specified file." msgstr "Файл, в который будет записан код процесса postmaster." -#: utils/misc/guc.c:4026 +#: utils/misc/guc.c:4241 msgid "Name of the SSL library." msgstr "Имя библиотеки SSL." -#: utils/misc/guc.c:4041 +#: utils/misc/guc.c:4256 msgid "Location of the SSL server certificate file." msgstr "Размещение файла сертификата сервера для SSL." -#: utils/misc/guc.c:4051 +#: utils/misc/guc.c:4266 msgid "Location of the SSL server private key file." msgstr "Размещение файла с закрытым ключом сервера для SSL." -#: utils/misc/guc.c:4061 +#: utils/misc/guc.c:4276 msgid "Location of the SSL certificate authority file." msgstr "Размещение файла центра сертификации для SSL." -#: utils/misc/guc.c:4071 +#: utils/misc/guc.c:4286 msgid "Location of the SSL certificate revocation list file." msgstr "Размещение файла со списком отзыва сертификатов для SSL." -#: utils/misc/guc.c:4081 +#: utils/misc/guc.c:4296 msgid "Writes temporary statistics files to the specified directory." msgstr "Каталог, в который будут записываться временные файлы статистики." -#: utils/misc/guc.c:4092 +#: utils/misc/guc.c:4307 msgid "" "Number of synchronous standbys and list of names of potential synchronous " "ones." msgstr "" "Количество потенциально синхронных резервных серверов и список их имён." -#: utils/misc/guc.c:4103 +#: utils/misc/guc.c:4318 msgid "Sets default text search configuration." msgstr "Задаёт конфигурацию текстового поиска по умолчанию." -#: utils/misc/guc.c:4113 +#: utils/misc/guc.c:4328 msgid "Sets the list of allowed SSL ciphers." msgstr "Задаёт список допустимых алгоритмов шифрования для SSL." -#: utils/misc/guc.c:4128 +#: utils/misc/guc.c:4343 msgid "Sets the curve to use for ECDH." msgstr "Задаёт кривую для ECDH." -#: utils/misc/guc.c:4143 +#: utils/misc/guc.c:4358 msgid "Location of the SSL DH parameters file." msgstr "Размещение файла с параметрами SSL DH." -#: utils/misc/guc.c:4154 +#: utils/misc/guc.c:4369 msgid "Command to obtain passphrases for SSL." msgstr "Команда, позволяющая получить пароль для SSL." -#: utils/misc/guc.c:4164 +#: utils/misc/guc.c:4380 msgid "Sets the application name to be reported in statistics and logs." msgstr "" "Задаёт имя приложения, которое будет выводиться в статистике и протоколах." -#: utils/misc/guc.c:4175 +#: utils/misc/guc.c:4391 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Задаёт имя кластера, которое будет добавляться в название процесса." -#: utils/misc/guc.c:4186 +#: utils/misc/guc.c:4402 msgid "" "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "" "Задаёт перечень менеджеров ресурсов WAL, для которых выполняются проверки " "целостности WAL." -#: utils/misc/guc.c:4187 +#: utils/misc/guc.c:4403 msgid "" "Full-page images will be logged for all data blocks and cross-checked " "against the results of WAL replay." @@ -28583,24 +29341,28 @@ msgstr "" "При этом в журнал будут записываться образы полных страниц для всех блоков " "данных для сверки с результатами воспроизведения WAL." -#: utils/misc/guc.c:4197 +#: utils/misc/guc.c:4413 msgid "JIT provider to use." msgstr "Используемый провайдер JIT." -#: utils/misc/guc.c:4217 +#: utils/misc/guc.c:4424 +msgid "Log backtrace for errors in these functions." +msgstr "Записывать в журнал стек в случае ошибок в перечисленных функциях." + +#: utils/misc/guc.c:4444 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Определяет, можно ли использовать \"\\'\" в текстовых строках." -#: utils/misc/guc.c:4227 +#: utils/misc/guc.c:4454 msgid "Sets the output format for bytea." msgstr "Задаёт формат вывода данных типа bytea." -#: utils/misc/guc.c:4237 +#: utils/misc/guc.c:4464 msgid "Sets the message levels that are sent to the client." msgstr "Ограничивает уровень сообщений, передаваемых клиенту." -#: utils/misc/guc.c:4238 utils/misc/guc.c:4303 utils/misc/guc.c:4314 -#: utils/misc/guc.c:4390 +#: utils/misc/guc.c:4465 utils/misc/guc.c:4530 utils/misc/guc.c:4541 +#: utils/misc/guc.c:4617 msgid "" "Each level includes all the levels that follow it. The later the level, the " "fewer messages are sent." @@ -28608,12 +29370,12 @@ msgstr "" "Каждый уровень включает все последующие. Чем выше уровень, тем меньше " "сообщений." -#: utils/misc/guc.c:4248 +#: utils/misc/guc.c:4475 msgid "Enables the planner to use constraints to optimize queries." msgstr "" "Разрешает планировщику оптимизировать запросы, полагаясь на ограничения." -#: utils/misc/guc.c:4249 +#: utils/misc/guc.c:4476 msgid "" "Table scans will be skipped if their constraints guarantee that no rows " "match the query." @@ -28621,77 +29383,77 @@ msgstr "" "Сканирование таблицы не будет выполняться, если её ограничения гарантируют, " "что запросу не удовлетворяют никакие строки." -#: utils/misc/guc.c:4260 +#: utils/misc/guc.c:4487 msgid "Sets the transaction isolation level of each new transaction." msgstr "Задаёт уровень изоляции транзакций для новых транзакций." -#: utils/misc/guc.c:4270 +#: utils/misc/guc.c:4497 msgid "Sets the current transaction's isolation level." msgstr "Задаёт текущий уровень изоляции транзакций." -#: utils/misc/guc.c:4281 +#: utils/misc/guc.c:4508 msgid "Sets the display format for interval values." msgstr "Задаёт формат отображения для внутренних значений." -#: utils/misc/guc.c:4292 +#: utils/misc/guc.c:4519 msgid "Sets the verbosity of logged messages." msgstr "Задаёт детализацию протоколируемых сообщений." -#: utils/misc/guc.c:4302 +#: utils/misc/guc.c:4529 msgid "Sets the message levels that are logged." msgstr "Ограничивает уровни протоколируемых сообщений." -#: utils/misc/guc.c:4313 +#: utils/misc/guc.c:4540 msgid "" "Causes all statements generating error at or above this level to be logged." msgstr "" "Включает протоколирование для SQL-операторов, выполненных с ошибкой этого " "или большего уровня." -#: utils/misc/guc.c:4324 +#: utils/misc/guc.c:4551 msgid "Sets the type of statements logged." msgstr "Задаёт тип протоколируемых операторов." -#: utils/misc/guc.c:4334 +#: utils/misc/guc.c:4561 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "Задаёт получателя сообщений, отправляемых в syslog." -#: utils/misc/guc.c:4349 +#: utils/misc/guc.c:4576 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "" "Задаёт режим срабатывания триггеров и правил перезаписи для текущего сеанса." -#: utils/misc/guc.c:4359 +#: utils/misc/guc.c:4586 msgid "Sets the current transaction's synchronization level." msgstr "Задаёт уровень синхронизации текущей транзакции." -#: utils/misc/guc.c:4369 +#: utils/misc/guc.c:4596 msgid "Allows archiving of WAL files using archive_command." msgstr "Разрешает архивацию файлов WAL командой archive_command." -#: utils/misc/guc.c:4379 +#: utils/misc/guc.c:4606 msgid "Sets the action to perform upon reaching the recovery target." msgstr "" "Задаёт действие, которое будет выполняться по достижении цели восстановления." -#: utils/misc/guc.c:4389 +#: utils/misc/guc.c:4616 msgid "Enables logging of recovery-related debugging information." msgstr "" "Включает протоколирование отладочной информации, связанной с репликацией." -#: utils/misc/guc.c:4405 +#: utils/misc/guc.c:4632 msgid "Collects function-level statistics on database activity." msgstr "Включает сбор статистики активности в БД на уровне функций." -#: utils/misc/guc.c:4415 +#: utils/misc/guc.c:4642 msgid "Set the level of information written to the WAL." msgstr "Задаёт уровень информации, записываемой в WAL." -#: utils/misc/guc.c:4425 +#: utils/misc/guc.c:4652 msgid "Selects the dynamic shared memory implementation used." msgstr "Выбирает используемую реализацию динамической разделяемой памяти." -#: utils/misc/guc.c:4435 +#: utils/misc/guc.c:4662 msgid "" "Selects the shared memory implementation used for the main shared memory " "region." @@ -28699,15 +29461,15 @@ msgstr "" "Выбирает реализацию разделяемой памяти для управления основным блоком " "разделяемой памяти." -#: utils/misc/guc.c:4445 +#: utils/misc/guc.c:4672 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Выбирает метод принудительной записи изменений в WAL на диск." -#: utils/misc/guc.c:4455 +#: utils/misc/guc.c:4682 msgid "Sets how binary values are to be encoded in XML." msgstr "Определяет, как должны кодироваться двоичные значения в XML." -#: utils/misc/guc.c:4465 +#: utils/misc/guc.c:4692 msgid "" "Sets whether XML data in implicit parsing and serialization operations is to " "be considered as documents or content fragments." @@ -28715,15 +29477,15 @@ msgstr "" "Определяет, следует ли рассматривать XML-данные в неявных операциях разбора " "и сериализации как документы или как фрагменты содержания." -#: utils/misc/guc.c:4476 +#: utils/misc/guc.c:4703 msgid "Use of huge pages on Linux or Windows." msgstr "Включает использование гигантских страниц в Linux и в Windows." -#: utils/misc/guc.c:4486 +#: utils/misc/guc.c:4713 msgid "Forces use of parallel query facilities." msgstr "Принудительно включает режим параллельного выполнения запросов." -#: utils/misc/guc.c:4487 +#: utils/misc/guc.c:4714 msgid "" "If possible, run query using a parallel worker and with parallel " "restrictions." @@ -28731,24 +29493,15 @@ msgstr "" "Если возможно, запрос выполняется параллельными исполнителями и с " "ограничениями параллельности." -#: utils/misc/guc.c:4497 -msgid "Encrypt passwords." -msgstr "Шифровать пароли." - -#: utils/misc/guc.c:4498 -msgid "" -"When a password is specified in CREATE USER or ALTER USER without writing " -"either ENCRYPTED or UNENCRYPTED, this parameter determines whether the " -"password is to be encrypted." -msgstr "" -"Этот параметр определяет, нужно ли шифровать пароли, заданные в CREATE USER " -"или ALTER USER без указания ENCRYPTED или UNENCRYPTED." +#: utils/misc/guc.c:4724 +msgid "Chooses the algorithm for encrypting passwords." +msgstr "Выбирает алгоритм шифрования паролей." -#: utils/misc/guc.c:4509 +#: utils/misc/guc.c:4734 msgid "Controls the planner's selection of custom or generic plan." msgstr "Управляет выбором специализированных или общих планов планировщиком." -#: utils/misc/guc.c:4510 +#: utils/misc/guc.c:4735 msgid "" "Prepared statements can have custom and generic plans, and the planner will " "attempt to choose which is better. This can be set to override the default " @@ -28758,22 +29511,22 @@ msgstr "" "планы, и планировщик пытается выбрать лучший вариант. Этот параметр " "позволяет переопределить поведение по умолчанию." -#: utils/misc/guc.c:4522 +#: utils/misc/guc.c:4747 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "" "Задаёт минимальную версию протокола SSL/TLS, которая может использоваться." -#: utils/misc/guc.c:4534 +#: utils/misc/guc.c:4759 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "" "Задаёт максимальную версию протокола SSL/TLS, которая может использоваться." -#: utils/misc/guc.c:5337 +#: utils/misc/guc.c:5562 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: ошибка доступа к каталогу \"%s\": %s\n" -#: utils/misc/guc.c:5342 +#: utils/misc/guc.c:5567 #, c-format msgid "" "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" @@ -28781,7 +29534,7 @@ msgstr "" "Запустите initdb или pg_basebackup для инициализации каталога данных " "PostgreSQL.\n" -#: utils/misc/guc.c:5362 +#: utils/misc/guc.c:5587 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -28792,12 +29545,12 @@ msgstr "" "Вы должны указать его расположение в параметре --config-file или -D, либо " "установить переменную окружения PGDATA.\n" -#: utils/misc/guc.c:5381 +#: utils/misc/guc.c:5606 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s не может открыть файл конфигурации сервера \"%s\": %s\n" -#: utils/misc/guc.c:5407 +#: utils/misc/guc.c:5632 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -28808,7 +29561,7 @@ msgstr "" "Их расположение можно задать как значение \"data_directory\" в файле \"%s\", " "либо передать в параметре -D, либо установить переменную окружения PGDATA.\n" -#: utils/misc/guc.c:5455 +#: utils/misc/guc.c:5680 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -28819,7 +29572,7 @@ msgstr "" "Его расположение можно задать как значение \"hba_file\" в файле \"%s\", либо " "передать в параметре -D, либо установить переменную окружения PGDATA.\n" -#: utils/misc/guc.c:5478 +#: utils/misc/guc.c:5703 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -28830,134 +29583,134 @@ msgstr "" "Его расположение можно задать как значение \"ident_file\" в файле \"%s\", " "либо передать в параметре -D, либо установить переменную окружения PGDATA.\n" -#: utils/misc/guc.c:6320 +#: utils/misc/guc.c:6545 msgid "Value exceeds integer range." msgstr "Значение выходит за рамки целых чисел." -#: utils/misc/guc.c:6556 +#: utils/misc/guc.c:6781 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s вне диапазона, допустимого для параметра \"%s\" (%d .. %d)" -#: utils/misc/guc.c:6592 +#: utils/misc/guc.c:6817 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s вне диапазона, допустимого для параметра \"%s\" (%g .. %g)" -#: utils/misc/guc.c:6748 utils/misc/guc.c:8115 +#: utils/misc/guc.c:6973 utils/misc/guc.c:8368 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "устанавливать параметры во время параллельных операций нельзя" -#: utils/misc/guc.c:6755 utils/misc/guc.c:7507 utils/misc/guc.c:7560 -#: utils/misc/guc.c:7611 utils/misc/guc.c:7944 utils/misc/guc.c:8711 -#: utils/misc/guc.c:8973 utils/misc/guc.c:10640 +#: utils/misc/guc.c:6980 utils/misc/guc.c:7760 utils/misc/guc.c:7813 +#: utils/misc/guc.c:7864 utils/misc/guc.c:8197 utils/misc/guc.c:8964 +#: utils/misc/guc.c:9226 utils/misc/guc.c:10892 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "нераспознанный параметр конфигурации: \"%s\"" -#: utils/misc/guc.c:6770 utils/misc/guc.c:7956 +#: utils/misc/guc.c:6995 utils/misc/guc.c:8209 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "параметр \"%s\" нельзя изменить" -#: utils/misc/guc.c:6793 utils/misc/guc.c:6987 utils/misc/guc.c:7077 -#: utils/misc/guc.c:7167 utils/misc/guc.c:7275 utils/misc/guc.c:7370 +#: utils/misc/guc.c:7018 utils/misc/guc.c:7216 utils/misc/guc.c:7310 +#: utils/misc/guc.c:7404 utils/misc/guc.c:7524 utils/misc/guc.c:7623 #: guc-file.l:352 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "параметр \"%s\" изменяется только при перезапуске сервера" -#: utils/misc/guc.c:6803 +#: utils/misc/guc.c:7028 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "параметр \"%s\" нельзя изменить сейчас" -#: utils/misc/guc.c:6821 utils/misc/guc.c:6868 utils/misc/guc.c:10656 +#: utils/misc/guc.c:7046 utils/misc/guc.c:7093 utils/misc/guc.c:10908 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "нет прав для изменения параметра \"%s\"" -#: utils/misc/guc.c:6858 +#: utils/misc/guc.c:7083 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "параметр \"%s\" нельзя задать после установления соединения" -#: utils/misc/guc.c:6906 +#: utils/misc/guc.c:7131 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "" "параметр \"%s\" нельзя задать в функции с контекстом безопасности " "определившего" -#: utils/misc/guc.c:7515 utils/misc/guc.c:7565 utils/misc/guc.c:8980 +#: utils/misc/guc.c:7768 utils/misc/guc.c:7818 utils/misc/guc.c:9233 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "" "прочитать \"%s\" может только суперпользователь или член роли " "pg_read_all_settings" -#: utils/misc/guc.c:7656 +#: utils/misc/guc.c:7909 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s принимает только один аргумент" -#: utils/misc/guc.c:7904 +#: utils/misc/guc.c:8157 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "выполнить команду ALTER SYSTEM может только суперпользователь" -#: utils/misc/guc.c:7989 +#: utils/misc/guc.c:8242 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "значение параметра для ALTER SYSTEM не должно быть многострочным" -#: utils/misc/guc.c:8034 +#: utils/misc/guc.c:8287 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "не удалось разобрать содержимое файла \"%s\"" -#: utils/misc/guc.c:8191 +#: utils/misc/guc.c:8444 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT не реализовано" -#: utils/misc/guc.c:8275 +#: utils/misc/guc.c:8528 #, c-format msgid "SET requires parameter name" msgstr "SET требует имя параметра" -#: utils/misc/guc.c:8408 +#: utils/misc/guc.c:8661 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "попытка переопределить параметр \"%s\"" -#: utils/misc/guc.c:10202 +#: utils/misc/guc.c:10454 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "при назначении параметру \"%s\" значения \"%s\"" -#: utils/misc/guc.c:10270 +#: utils/misc/guc.c:10522 #, c-format msgid "parameter \"%s\" could not be set" msgstr "параметр \"%s\" нельзя установить" -#: utils/misc/guc.c:10360 +#: utils/misc/guc.c:10612 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "не удалось разобрать значение параметра \"%s\"" -#: utils/misc/guc.c:10718 utils/misc/guc.c:10752 +#: utils/misc/guc.c:10970 utils/misc/guc.c:11004 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "неверное значение параметра \"%s\": %d" -#: utils/misc/guc.c:10786 +#: utils/misc/guc.c:11038 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "неверное значение параметра \"%s\": %g" -#: utils/misc/guc.c:11056 +#: utils/misc/guc.c:11308 #, c-format msgid "" "\"temp_buffers\" cannot be changed after any temporary tables have been " @@ -28966,23 +29719,23 @@ msgstr "" "параметр \"temp_buffers\" нельзя изменить после обращения к временным " "таблицам в текущем сеансе." -#: utils/misc/guc.c:11068 +#: utils/misc/guc.c:11320 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour не поддерживается в данной сборке" -#: utils/misc/guc.c:11081 +#: utils/misc/guc.c:11333 #, c-format msgid "SSL is not supported by this build" msgstr "SSL не поддерживается в данной сборке" -#: utils/misc/guc.c:11093 +#: utils/misc/guc.c:11345 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "" "Этот параметр нельзя включить, когда \"log_statement_stats\" равен true." -#: utils/misc/guc.c:11105 +#: utils/misc/guc.c:11357 #, c-format msgid "" "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", " @@ -28991,7 +29744,7 @@ msgstr "" "Параметр \"log_statement_stats\" нельзя включить, когда \"log_parser_stats" "\", \"log_planner_stats\" или \"log_executor_stats\" равны true." -#: utils/misc/guc.c:11349 +#: utils/misc/guc.c:11587 #, c-format msgid "" "effective_io_concurrency must be set to 0 on platforms that lack " @@ -29000,27 +29753,31 @@ msgstr "" "Значение effective_io_concurrency должно равняться 0 на платформах, где " "отсутствует lack posix_fadvise()." -#: utils/misc/guc.c:11456 +#: utils/misc/guc.c:11600 #, c-format -msgid "\"%s\" cannot be higher than \"%s\"." -msgstr "Версия \"%s\" не может быть выше \"%s\"." +msgid "" +"maintenance_io_concurrency must be set to 0 on platforms that lack " +"posix_fadvise()." +msgstr "" +"Значение maintenance_io_concurrency должно равняться 0 на платформах, где " +"отсутствует lack posix_fadvise()." -#: utils/misc/guc.c:11478 +#: utils/misc/guc.c:11716 #, c-format -msgid "\"%s\" cannot be lower than \"%s\"." -msgstr "Версия \"%s\" не может быть ниже \"%s\"." +msgid "invalid character" +msgstr "неверный символ" -#: utils/misc/guc.c:11506 +#: utils/misc/guc.c:11776 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline не является допустимым числом." -#: utils/misc/guc.c:11546 +#: utils/misc/guc.c:11816 #, c-format msgid "multiple recovery targets specified" msgstr "указано несколько целей восстановления" -#: utils/misc/guc.c:11547 +#: utils/misc/guc.c:11817 #, c-format msgid "" "At most one of recovery_target, recovery_target_lsn, recovery_target_name, " @@ -29030,7 +29787,7 @@ msgstr "" "recovery_target_lsn, recovery_target_name, recovery_target_time, " "recovery_target_xid." -#: utils/misc/guc.c:11555 +#: utils/misc/guc.c:11825 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "Единственное допустимое значение: \"immediate\"." @@ -29048,7 +29805,7 @@ msgstr "" "заданный в запросе кортеж результата несовместим с типом результата функции" #: utils/misc/pg_controldata.c:60 utils/misc/pg_controldata.c:138 -#: utils/misc/pg_controldata.c:242 utils/misc/pg_controldata.c:309 +#: utils/misc/pg_controldata.c:241 utils/misc/pg_controldata.c:306 #, c-format msgid "calculated CRC checksum does not match value stored in file" msgstr "" @@ -29077,12 +29834,12 @@ msgstr "" "Чтобы отключить политику для владельца таблицы, воспользуйтесь командой " "ALTER TABLE NO FORCE ROW LEVEL SECURITY." -#: utils/misc/timeout.c:388 +#: utils/misc/timeout.c:395 #, c-format msgid "cannot add more timeout reasons" msgstr "добавить другие причины тайм-аута нельзя" -#: utils/misc/tzparser.c:61 +#: utils/misc/tzparser.c:60 #, c-format msgid "" "time zone abbreviation \"%s\" is too long (maximum %d characters) in time " @@ -29091,44 +29848,44 @@ msgstr "" "краткое обозначение часового пояса \"%s\" должно содержать меньше символов " "(максимум %d) (файл часовых поясов \"%s\", строка %d)" -#: utils/misc/tzparser.c:73 +#: utils/misc/tzparser.c:72 #, c-format msgid "time zone offset %d is out of range in time zone file \"%s\", line %d" msgstr "" "смещение часового пояса %d выходит за рамки (файл часовых поясов \"%s\", " "строка %d)" -#: utils/misc/tzparser.c:112 +#: utils/misc/tzparser.c:111 #, c-format msgid "missing time zone abbreviation in time zone file \"%s\", line %d" msgstr "" "отсутствует краткое обозначение часового пояса (файл часовых поясов \"%s\", " "строка %d)" -#: utils/misc/tzparser.c:121 +#: utils/misc/tzparser.c:120 #, c-format msgid "missing time zone offset in time zone file \"%s\", line %d" msgstr "" "отсутствует смещение часового пояса (файл часовых поясов \"%s\", строка %d)" -#: utils/misc/tzparser.c:133 +#: utils/misc/tzparser.c:132 #, c-format msgid "invalid number for time zone offset in time zone file \"%s\", line %d" msgstr "" "смещение часового пояса должно быть числом (файл часовых поясов \"%s\", " "строка %d)" -#: utils/misc/tzparser.c:169 +#: utils/misc/tzparser.c:168 #, c-format msgid "invalid syntax in time zone file \"%s\", line %d" msgstr "ошибка синтаксиса в файле часовых поясов \"%s\", строке %d" -#: utils/misc/tzparser.c:237 +#: utils/misc/tzparser.c:236 #, c-format msgid "time zone abbreviation \"%s\" is multiply defined" msgstr "краткое обозначение часового пояса \"%s\" определено неоднократно" -#: utils/misc/tzparser.c:239 +#: utils/misc/tzparser.c:238 #, c-format msgid "" "Entry in time zone file \"%s\", line %d, conflicts with entry in file \"%s" @@ -29137,33 +29894,33 @@ msgstr "" "Запись в файле часовых поясов \"%s\", строке %d, противоречит записи в файле " "\"%s\", строке %d." -#: utils/misc/tzparser.c:301 +#: utils/misc/tzparser.c:300 #, c-format msgid "invalid time zone file name \"%s\"" msgstr "неправильное имя файла часовых поясов: \"%s\"" -#: utils/misc/tzparser.c:314 +#: utils/misc/tzparser.c:313 #, c-format msgid "time zone file recursion limit exceeded in file \"%s\"" msgstr "предел вложенности файлов часовых поясов превышен в файле \"%s\"" -#: utils/misc/tzparser.c:353 utils/misc/tzparser.c:366 +#: utils/misc/tzparser.c:352 utils/misc/tzparser.c:365 #, c-format msgid "could not read time zone file \"%s\": %m" msgstr "прочитать файл часовых поясов \"%s\" не удалось: %m" -#: utils/misc/tzparser.c:376 +#: utils/misc/tzparser.c:375 #, c-format msgid "line is too long in time zone file \"%s\", line %d" msgstr "слишком длинная строка в файле часовых поясов \"%s\" (строка %d)" -#: utils/misc/tzparser.c:399 +#: utils/misc/tzparser.c:398 #, c-format msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "" "в @INCLUDE не указано имя файла (файл часовых поясов \"%s\", строка %d)" -#: utils/mmgr/aset.c:485 utils/mmgr/generation.c:250 utils/mmgr/slab.c:252 +#: utils/mmgr/aset.c:476 utils/mmgr/generation.c:234 utils/mmgr/slab.c:236 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "Ошибка при создании контекста памяти \"%s\"." @@ -29173,10 +29930,10 @@ msgstr "Ошибка при создании контекста памяти \"% msgid "could not attach to dynamic shared area" msgstr "не удалось подключиться к динамической разделяемой области" -#: utils/mmgr/mcxt.c:797 utils/mmgr/mcxt.c:833 utils/mmgr/mcxt.c:871 -#: utils/mmgr/mcxt.c:909 utils/mmgr/mcxt.c:945 utils/mmgr/mcxt.c:976 -#: utils/mmgr/mcxt.c:1012 utils/mmgr/mcxt.c:1064 utils/mmgr/mcxt.c:1099 -#: utils/mmgr/mcxt.c:1134 +#: utils/mmgr/mcxt.c:822 utils/mmgr/mcxt.c:858 utils/mmgr/mcxt.c:896 +#: utils/mmgr/mcxt.c:934 utils/mmgr/mcxt.c:970 utils/mmgr/mcxt.c:1001 +#: utils/mmgr/mcxt.c:1037 utils/mmgr/mcxt.c:1089 utils/mmgr/mcxt.c:1124 +#: utils/mmgr/mcxt.c:1159 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "Ошибка при запросе блока размером %zu в контексте памяти \"%s\"." @@ -29191,27 +29948,27 @@ msgstr "курсор \"%s\" уже существует" msgid "closing existing cursor \"%s\"" msgstr "существующий курсор (\"%s\") закрывается" -#: utils/mmgr/portalmem.c:398 +#: utils/mmgr/portalmem.c:400 #, c-format msgid "portal \"%s\" cannot be run" msgstr "портал \"%s\" не может быть запущен" -#: utils/mmgr/portalmem.c:476 +#: utils/mmgr/portalmem.c:478 #, c-format msgid "cannot drop pinned portal \"%s\"" msgstr "удалить закреплённый портал \"%s\" нельзя" -#: utils/mmgr/portalmem.c:484 +#: utils/mmgr/portalmem.c:486 #, c-format msgid "cannot drop active portal \"%s\"" msgstr "удалить активный портал \"%s\" нельзя" -#: utils/mmgr/portalmem.c:729 +#: utils/mmgr/portalmem.c:731 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "нельзя выполнить PREPARE для транзакции, создавшей курсор WITH HOLD" -#: utils/mmgr/portalmem.c:1269 +#: utils/mmgr/portalmem.c:1270 #, c-format msgid "" "cannot perform transaction commands inside a cursor loop that is not read-" @@ -29220,45 +29977,61 @@ msgstr "" "транзакционные команды нельзя выполнять внутри цикла с курсором, " "производящим изменения" -#: utils/sort/logtape.c:276 +#: utils/sort/logtape.c:266 utils/sort/logtape.c:289 #, c-format -msgid "could not read block %ld of temporary file: %m" -msgstr "не удалось считать блок %ld временного файла: %m" +msgid "could not seek to block %ld of temporary file" +msgstr "не удалось переместиться к блоку %ld временного файла" -#: utils/sort/sharedtuplestore.c:208 +#: utils/sort/logtape.c:295 #, c-format -msgid "could not write to temporary file: %m" -msgstr "не удалось записать во временный файл: %m" +msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" +msgstr "" +"не удалось прочитать блок %ld временного файла (прочитано байт: %zu из %zu)" -#: utils/sort/sharedtuplestore.c:437 utils/sort/sharedtuplestore.c:446 -#: utils/sort/sharedtuplestore.c:469 utils/sort/sharedtuplestore.c:486 -#: utils/sort/sharedtuplestore.c:503 utils/sort/sharedtuplestore.c:575 -#: utils/sort/sharedtuplestore.c:581 +#: utils/sort/sharedtuplestore.c:430 utils/sort/sharedtuplestore.c:439 +#: utils/sort/sharedtuplestore.c:462 utils/sort/sharedtuplestore.c:479 +#: utils/sort/sharedtuplestore.c:496 #, c-format msgid "could not read from shared tuplestore temporary file" msgstr "не удалось прочитать файл общего временного хранилища кортежей" -#: utils/sort/sharedtuplestore.c:492 +#: utils/sort/sharedtuplestore.c:485 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "неожиданный фрагмент в файле общего временного хранилища кортежей" -#: utils/sort/tuplesort.c:2967 +#: utils/sort/sharedtuplestore.c:569 +#, c-format +msgid "could not seek to block %u in shared tuplestore temporary file" +msgstr "" +"не удалось переместиться к блоку %u в файле общего временного хранилища " +"кортежей" + +#: utils/sort/sharedtuplestore.c:576 +#, c-format +msgid "" +"could not read from shared tuplestore temporary file: read only %zu of %zu " +"bytes" +msgstr "" +"не удалось прочитать файл общего временного хранилища кортежей (прочитано " +"байт: %zu из %zu)" + +#: utils/sort/tuplesort.c:3140 #, c-format msgid "cannot have more than %d runs for an external sort" msgstr "число потоков данных для внешней сортировки не может превышать %d" -#: utils/sort/tuplesort.c:4051 +#: utils/sort/tuplesort.c:4221 #, c-format msgid "could not create unique index \"%s\"" msgstr "создать уникальный индекс \"%s\" не удалось" -#: utils/sort/tuplesort.c:4053 +#: utils/sort/tuplesort.c:4223 #, c-format msgid "Key %s is duplicated." msgstr "Ключ %s дублируется." -#: utils/sort/tuplesort.c:4054 +#: utils/sort/tuplesort.c:4224 #, c-format msgid "Duplicate keys exist." msgstr "Данные содержат дублирующиеся ключи." @@ -29269,20 +30042,17 @@ msgstr "Данные содержат дублирующиеся ключи." #: utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 #: utils/sort/tuplestore.c:1330 #, c-format -msgid "could not seek in tuplestore temporary file: %m" -msgstr "не удалось переместиться во временном файле источника кортежей: %m" +msgid "could not seek in tuplestore temporary file" +msgstr "не удалось переместиться во временном файле хранилища кортежей" -#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1550 -#: utils/sort/tuplestore.c:1556 +#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1540 +#: utils/sort/tuplestore.c:1548 #, c-format -msgid "could not read from tuplestore temporary file: %m" -msgstr "не удалось прочитать временный файл источника кортежей: %m" - -#: utils/sort/tuplestore.c:1518 utils/sort/tuplestore.c:1523 -#: utils/sort/tuplestore.c:1529 -#, c-format -msgid "could not write to tuplestore temporary file: %m" -msgstr "не удалось записать во временный файл источника кортежей: %m" +msgid "" +"could not read from tuplestore temporary file: read only %zu of %zu bytes" +msgstr "" +"не удалось прочитать временный файл хранилища кортежей (прочитано байт: %zu " +"из %zu)" #: utils/time/snapmgr.c:624 #, c-format @@ -29345,279 +30115,284 @@ msgstr "" msgid "cannot import a snapshot from a different database" msgstr "нельзя импортировать снимок из другой базы данных" -#: gram.y:1030 +#: gram.y:1047 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "вариант UNENCRYPTED PASSWORD более не поддерживается" -#: gram.y:1031 +#: gram.y:1048 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "" "Удалите слово UNENCRYPTED, чтобы сохранить пароль в зашифрованном виде." -#: gram.y:1093 +#: gram.y:1110 #, c-format msgid "unrecognized role option \"%s\"" msgstr "нераспознанный параметр роли \"%s\"" -#: gram.y:1340 gram.y:1355 +#: gram.y:1357 gram.y:1372 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTS не может включать элементы схемы" -#: gram.y:1501 +#: gram.y:1518 #, c-format msgid "current database cannot be changed" msgstr "сменить текущую базу данных нельзя" -#: gram.y:1625 +#: gram.y:1642 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "" "интервал, задающий часовой пояс, должен иметь точность HOUR или HOUR TO " "MINUTE" -#: gram.y:2143 +#: gram.y:2177 #, c-format msgid "column number must be in range from 1 to %d" msgstr "номер столбца должен быть в диапазоне от 1 до %d" -#: gram.y:2675 +#: gram.y:2709 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "параметр последовательности \"%s\" здесь не поддерживается" -#: gram.y:2704 +#: gram.y:2738 #, c-format msgid "modulus for hash partition provided more than once" msgstr "модуль для хеш-секции указан неоднократно" -#: gram.y:2713 +#: gram.y:2747 #, c-format msgid "remainder for hash partition provided more than once" msgstr "остаток для хеш-секции указан неоднократно" -#: gram.y:2720 +#: gram.y:2754 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "нераспознанное указание ограничения хеш-секции \"%s\"" -#: gram.y:2728 +#: gram.y:2762 #, c-format msgid "modulus for hash partition must be specified" msgstr "необходимо указать модуль для хеш-секции" -#: gram.y:2732 +#: gram.y:2766 #, c-format msgid "remainder for hash partition must be specified" msgstr "необходимо указать остаток для хеш-секции" -#: gram.y:2933 gram.y:2966 +#: gram.y:2967 gram.y:3000 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "указания STDIN/STDOUT несовместимы с PROGRAM" -#: gram.y:2939 +#: gram.y:2973 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "предложение WHERE не допускается с COPY TO" -#: gram.y:3271 gram.y:3278 gram.y:11480 gram.y:11488 +#: gram.y:3305 gram.y:3312 gram.y:11648 gram.y:11656 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "указание GLOBAL при создании временных таблиц устарело" -#: gram.y:3518 +#: gram.y:3552 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "для генерируемого столбца должно указываться GENERATED ALWAYS" -#: gram.y:5274 +#: gram.y:4513 +#, c-format +msgid "CREATE EXTENSION ... FROM is no longer supported" +msgstr "CREATE EXTENSION ... FROM более не поддерживается" + +#: gram.y:5339 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "нераспознанный вариант политики безопасности строк \"%s\"" -#: gram.y:5275 +#: gram.y:5340 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "" "В настоящее время поддерживаются только политики PERMISSIVE и RESTRICTIVE." -#: gram.y:5388 +#: gram.y:5453 msgid "duplicate trigger events specified" msgstr "события триггера повторяются" -#: gram.y:5536 +#: gram.y:5601 #, c-format msgid "conflicting constraint properties" msgstr "противоречащие характеристики ограничения" -#: gram.y:5632 +#: gram.y:5697 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "оператор CREATE ASSERTION ещё не реализован" -#: gram.y:6015 +#: gram.y:6080 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK более не требуется" -#: gram.y:6016 +#: gram.y:6081 #, c-format msgid "Update your data type." msgstr "Обновите тип данных." -#: gram.y:7753 +#: gram.y:7832 #, c-format msgid "aggregates cannot have output arguments" msgstr "у агрегатных функций не может быть выходных аргументов" -#: gram.y:10025 gram.y:10043 +#: gram.y:10154 gram.y:10172 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "" "предложение WITH CHECK OPTION не поддерживается для рекурсивных представлений" -#: gram.y:11588 +#: gram.y:11780 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "синтаксис LIMIT #,# не поддерживается" -#: gram.y:11589 +#: gram.y:11781 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Используйте отдельные предложения LIMIT и OFFSET." -#: gram.y:11887 gram.y:11912 +#: gram.y:12107 gram.y:12132 #, c-format msgid "VALUES in FROM must have an alias" msgstr "список VALUES во FROM должен иметь псевдоним" -#: gram.y:11888 gram.y:11913 +#: gram.y:12108 gram.y:12133 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "Например, FROM (VALUES ...) [AS] foo." -#: gram.y:11893 gram.y:11918 +#: gram.y:12113 gram.y:12138 #, c-format msgid "subquery in FROM must have an alias" msgstr "подзапрос во FROM должен иметь псевдоним" -#: gram.y:11894 gram.y:11919 +#: gram.y:12114 gram.y:12139 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "Например, FROM (SELECT ...) [AS] foo." -#: gram.y:12372 +#: gram.y:12592 #, c-format msgid "only one DEFAULT value is allowed" msgstr "допускается только одно значение DEFAULT" -#: gram.y:12381 +#: gram.y:12601 #, c-format msgid "only one PATH value per column is allowed" msgstr "для столбца допускается только одно значение PATH" -#: gram.y:12390 +#: gram.y:12610 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "" "конфликтующие или избыточные объявления NULL/NOT NULL для столбца \"%s\"" -#: gram.y:12399 +#: gram.y:12619 #, c-format msgid "unrecognized column option \"%s\"" msgstr "нераспознанный параметр столбца \"%s\"" -#: gram.y:12653 +#: gram.y:12873 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "тип float должен иметь точность минимум 1 бит" -#: gram.y:12662 +#: gram.y:12882 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "тип float должен иметь точность меньше 54 бит" -#: gram.y:13153 +#: gram.y:13373 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "неверное число параметров в левой части выражения OVERLAPS" -#: gram.y:13158 +#: gram.y:13378 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "неверное число параметров в правой части выражения OVERLAPS" -#: gram.y:13333 +#: gram.y:13553 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "предикат UNIQUE ещё не реализован" -#: gram.y:13680 +#: gram.y:13916 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "ORDER BY с WITHIN GROUP можно указать только один раз" -#: gram.y:13685 +#: gram.y:13921 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "DISTINCT нельзя использовать с WITHIN GROUP" -#: gram.y:13690 +#: gram.y:13926 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "VARIADIC нельзя использовать с WITHIN GROUP" -#: gram.y:14148 gram.y:14171 +#: gram.y:14392 gram.y:14415 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "началом рамки не может быть UNBOUNDED FOLLOWING" -#: gram.y:14153 +#: gram.y:14397 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "" "рамка, начинающаяся со следующей строки, не может заканчиваться текущей" -#: gram.y:14176 +#: gram.y:14420 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "концом рамки не может быть UNBOUNDED PRECEDING" -#: gram.y:14182 +#: gram.y:14426 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "" "рамка, начинающаяся с текущей строки, не может иметь предшествующих строк" -#: gram.y:14189 +#: gram.y:14433 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "" "рамка, начинающаяся со следующей строки, не может иметь предшествующих строк" -#: gram.y:14832 +#: gram.y:15083 #, c-format msgid "type modifier cannot have parameter name" msgstr "параметр функции-модификатора типа должен быть безымянным" -#: gram.y:14838 +#: gram.y:15089 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "модификатор типа не может включать ORDER BY" -#: gram.y:14903 gram.y:14910 +#: gram.y:15154 gram.y:15161 #, c-format msgid "%s cannot be used as a role name here" msgstr "%s нельзя использовать здесь как имя роли" -#: gram.y:15583 gram.y:15772 +#: gram.y:15842 gram.y:16031 msgid "improper use of \"*\"" msgstr "недопустимое использование \"*\"" -#: gram.y:15836 +#: gram.y:16095 #, c-format msgid "" "an ordered-set aggregate with a VARIADIC direct argument must have one " @@ -29626,50 +30401,60 @@ msgstr "" "сортирующая агрегатная функция с непосредственным аргументом VARIADIC должна " "иметь один агрегатный аргумент VARIADIC того же типа данных" -#: gram.y:15873 +#: gram.y:16132 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "ORDER BY можно указать только один раз" -#: gram.y:15884 +#: gram.y:16143 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "OFFSET можно указать только один раз" -#: gram.y:15893 +#: gram.y:16152 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "LIMIT можно указать только один раз" -#: gram.y:15902 +#: gram.y:16161 +#, c-format +msgid "multiple limit options not allowed" +msgstr "параметры LIMIT можно указать только один раз" + +#: gram.y:16165 +#, c-format +msgid "WITH TIES cannot be specified without ORDER BY clause" +msgstr "WITH TIES нельзя задать без предложения ORDER BY" + +#: gram.y:16173 #, c-format msgid "multiple WITH clauses not allowed" msgstr "WITH можно указать только один раз" -#: gram.y:16106 +#: gram.y:16377 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "в табличных функциях не может быть аргументов OUT и INOUT" -#: gram.y:16207 +#: gram.y:16473 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "COLLATE можно указать только один раз" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16245 gram.y:16258 +#: gram.y:16511 gram.y:16524 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "ограничения %s не могут иметь характеристики DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16271 +#: gram.y:16537 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "ограничения %s не могут иметь характеристики NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16284 +#: gram.y:16550 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "ограничения %s не могут иметь характеристики NO INHERIT" @@ -29758,60 +30543,60 @@ msgstr "пустое имя каталога конфигурации: \"%s\"" msgid "could not open configuration directory \"%s\": %m" msgstr "открыть каталог конфигурации \"%s\" не удалось: %m" -#: jsonpath_gram.y:515 +#: jsonpath_gram.y:529 #, c-format msgid "unrecognized flag character \"%c\" in LIKE_REGEX predicate" msgstr "нераспознанный символ флага \"%c\" в предикате LIKE_REGEX" -#: jsonpath_gram.y:569 +#: jsonpath_gram.y:583 #, c-format msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" msgstr "" "флаг \"x\" языка XQuery (расширенные регулярные выражения) не реализован" #. translator: %s is typically "syntax error" -#: jsonpath_scan.l:282 +#: jsonpath_scan.l:286 #, c-format msgid "%s at end of jsonpath input" msgstr "%s в конце аргумента jsonpath" #. translator: first %s is typically "syntax error" -#: jsonpath_scan.l:289 +#: jsonpath_scan.l:293 #, c-format msgid "%s at or near \"%s\" of jsonpath input" msgstr "%s в строке jsonpath (примерное положение: \"%s\")" -#: repl_gram.y:336 repl_gram.y:368 +#: repl_gram.y:349 repl_gram.y:381 #, c-format msgid "invalid timeline %u" msgstr "неверная линия времени %u" -#: repl_scanner.l:129 +#: repl_scanner.l:131 msgid "invalid streaming start location" msgstr "неверная позиция начала потока" -#: repl_scanner.l:180 scan.l:703 +#: repl_scanner.l:182 scan.l:717 msgid "unterminated quoted string" msgstr "незавершённая строка в кавычках" -#: scan.l:463 +#: scan.l:458 msgid "unterminated /* comment" msgstr "незавершённый комментарий /*" -#: scan.l:494 +#: scan.l:478 msgid "unterminated bit string literal" msgstr "оборванная битовая строка" -#: scan.l:515 +#: scan.l:492 msgid "unterminated hexadecimal string literal" msgstr "оборванная шестнадцатеричная строка" -#: scan.l:565 +#: scan.l:542 #, c-format msgid "unsafe use of string constant with Unicode escapes" msgstr "небезопасное использование строковой константы со спецкодами Unicode" -#: scan.l:566 +#: scan.l:543 #, c-format msgid "" "String constants with Unicode escapes cannot be used when " @@ -29820,31 +30605,22 @@ msgstr "" "Строки со спецкодами Unicode нельзя использовать, когда параметр " "standard_conforming_strings выключен." -#: scan.l:612 scan.l:811 -msgid "invalid Unicode escape character" -msgstr "неверный символ спецкода Unicode" - -#: scan.l:638 scan.l:646 scan.l:654 scan.l:655 scan.l:656 scan.l:1399 -#: scan.l:1426 scan.l:1430 scan.l:1468 scan.l:1472 scan.l:1494 scan.l:1504 -msgid "invalid Unicode surrogate pair" -msgstr "неверная суррогатная пара Unicode" - -#: scan.l:660 -#, c-format -msgid "invalid Unicode escape" -msgstr "неверный спецкод Unicode" +#: scan.l:604 +msgid "unhandled previous state in xqs" +msgstr "" +"необрабатываемое предыдущее состояние при обнаружении закрывающего апострофа" -#: scan.l:661 +#: scan.l:678 #, c-format msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." msgstr "Спецкоды Unicode должны иметь вид \\uXXXX или \\UXXXXXXXX." -#: scan.l:672 +#: scan.l:689 #, c-format msgid "unsafe use of \\' in a string literal" msgstr "небезопасное использование символа \\' в строке" -#: scan.l:673 +#: scan.l:690 #, c-format msgid "" "Use '' to write quotes in strings. \\' is insecure in client-only encodings." @@ -29852,52 +30628,40 @@ msgstr "" "Записывайте апостроф в строке в виде ''. Запись \\' небезопасна для " "исключительно клиентских кодировок." -#: scan.l:748 +#: scan.l:762 msgid "unterminated dollar-quoted string" msgstr "незавершённая спецстрока с $" -#: scan.l:765 scan.l:791 scan.l:806 +#: scan.l:779 scan.l:789 msgid "zero-length delimited identifier" msgstr "пустой идентификатор в кавычках" -#: scan.l:826 syncrep_scanner.l:91 +#: scan.l:800 syncrep_scanner.l:91 msgid "unterminated quoted identifier" msgstr "незавершённый идентификатор в кавычках" -#: scan.l:989 +#: scan.l:963 msgid "operator too long" msgstr "слишком длинный оператор" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1140 +#: scan.l:1171 #, c-format msgid "%s at end of input" msgstr "%s в конце" #. translator: first %s is typically the translation of "syntax error" -#: scan.l:1148 +#: scan.l:1179 #, c-format msgid "%s at or near \"%s\"" msgstr "%s (примерное положение: \"%s\")" -#: scan.l:1313 scan.l:1345 -msgid "" -"Unicode escape values cannot be used for code point values above 007F when " -"the server encoding is not UTF8" -msgstr "" -"Спецкоды Unicode для значений выше 007F можно использовать только с " -"серверной кодировкой UTF8" - -#: scan.l:1341 scan.l:1486 -msgid "invalid Unicode escape value" -msgstr "неверное значение спецкода Unicode" - -#: scan.l:1550 +#: scan.l:1373 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "нестандартное применение \\' в строке" -#: scan.l:1551 +#: scan.l:1374 #, c-format msgid "" "Use '' to write quotes in strings, or use the escape string syntax (E'...')." @@ -29905,27 +30669,360 @@ msgstr "" "Записывайте апостроф в строках в виде '' или используйте синтаксис спецстрок " "(E'...')." -#: scan.l:1560 +#: scan.l:1383 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "нестандартное применение \\\\ в строке" -#: scan.l:1561 +#: scan.l:1384 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "" "Используйте для записи обратных слэшей синтаксис спецстрок, например E'\\\\'." -#: scan.l:1575 +#: scan.l:1398 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "нестандартное использование спецсимвола в строке" -#: scan.l:1576 +#: scan.l:1399 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Используйте для записи спецсимволов синтаксис спецстрок E'\\r\\n'." +#~ msgid "" +#~ "moving row to another partition during a BEFORE trigger is not supported" +#~ msgstr "в триггере BEFORE нельзя перемещать строку в другую секцию" + +#~ msgid "" +#~ "GSSAPI encryption can only be used with gss, trust, or reject " +#~ "authentication methods" +#~ msgstr "" +#~ "шифрование GSSAPI может применяться только с методами аутентификации gss, " +#~ "trust и reject" + +#~ msgid "" +#~ "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\"" +#~ msgstr "" +#~ "pg_hba.conf отвергает подключение для репликации: компьютер \"%s\", " +#~ "пользователь \"%s\"" + +#~ msgid "" +#~ "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s" +#~ "\"" +#~ msgstr "" +#~ "pg_hba.conf отвергает подключение: компьютер \"%s\", пользователь \"%s\", " +#~ "база данных \"%s\"" + +#~ msgid "" +#~ "no pg_hba.conf entry for replication connection from host \"%s\", user " +#~ "\"%s\"" +#~ msgstr "" +#~ "в pg_hba.conf нет записи, разрешающей подключение для репликации с " +#~ "компьютера \"%s\" для пользователя \"%s\"" + +#~ msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"" +#~ msgstr "" +#~ "в pg_hba.conf нет записи для компьютера \"%s\", пользователя \"%s\", базы " +#~ "\"%s\"" + +#~ msgid "GSSAPI encryption only supports gss, trust, or reject authentication" +#~ msgstr "" +#~ "шифрование GSSAPI поддерживается только с методами аутентификации gss, " +#~ "trust и reject" + +#~ msgid "invalid concatenation of jsonb objects" +#~ msgstr "неверная конкатенация объектов jsonb" + +#~ msgid "" +#~ "replication connection authorized: user=%s application_name=%s SSL " +#~ "enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +#~ msgstr "" +#~ "подключение для репликации авторизовано: пользователь=%s, имя_приложения=" +#~ "%s, SSL включён (протокол=%s, шифр=%s, битов=%d, сжатие=%s)" + +#~ msgid "replication connection authorized: user=%s application_name=%s" +#~ msgstr "" +#~ "подключение для репликации авторизовано: пользователь=%s, имя_приложения=" +#~ "%s" + +#~ msgid "" +#~ "connection authorized: user=%s database=%s application_name=%s SSL " +#~ "enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +#~ msgstr "" +#~ "подключение авторизовано: пользователь=%s, база=%s, имя_приложения=%s, " +#~ "SSL включён (протокол=%s, шифр=%s, битов=%d, сжатие=%s)" + +#~ msgid "" +#~ "connection authorized: user=%s database=%s SSL enabled (protocol=%s, " +#~ "cipher=%s, bits=%d, compression=%s)" +#~ msgstr "" +#~ "подключение авторизовано: пользователь=%s, база=%s, SSL включён (протокол=" +#~ "%s, шифр=%s, битов=%d, сжатие=%s)" + +#~ msgid "connection authorized: user=%s database=%s application_name=%s" +#~ msgstr "" +#~ "подключение авторизовано: пользователь=%s, база=%s, имя_приложения=%s" + +#~ msgid "connection authorized: user=%s database=%s" +#~ msgstr "подключение авторизовано: пользователь=%s, база=%s" + +#~ msgid "unexpected standby message type \"%c\", after receiving CopyDone" +#~ msgstr "" +#~ "после CopyDone резервный сервер передал сообщение неожиданного типа \"%c\"" + +#~ msgid "" +#~ "scanned index \"%s\" to remove %d row versions by parallel vacuum worker" +#~ msgstr "" +#~ "просканирован индекс \"%s\", параллельным процессом очистки удалено " +#~ "версий строк: %d" + +#~ msgid "" +#~ "index \"%s\" now contains %.0f row versions in %u pages as reported by " +#~ "parallel vacuum worker" +#~ msgstr "" +#~ "индекс \"%s\" теперь содержит версий строк: %.0f, в страницах: %u (по " +#~ "информации параллельного процесса очистки)" + +#~ msgid "insufficient columns in %s constraint definition" +#~ msgstr "недостаточно столбцов в определении ограничения %s" + +#~ msgid "cannot reindex invalid index on TOAST table concurrently" +#~ msgstr "" +#~ "перестроить нерабочий индекс в таблице TOAST неблокирующим способом нельзя" + +#~ msgid "starting parallel vacuum worker for %s" +#~ msgstr "запуск параллельного процесса очистки \"%s\"" + +#~ msgid "leftover placeholder tuple detected in BRIN index \"%s\", deleting" +#~ msgstr "" +#~ "в BRIN-индексе \"%s\" обнаружен оставшийся кортеж-местозаполнитель, он " +#~ "удаляется" + +#~ msgid "invalid value for \"buffering\" option" +#~ msgstr "неверное значение для параметра \"buffering\"" + +#~ msgid "could not write block %ld of temporary file: %m" +#~ msgstr "не удалось записать блок %ld временного файла: %m" + +# skip-rule: capital-letter-first +#~ msgid "" +#~ "skipping redundant vacuum to prevent wraparound of table \"%s.%s.%s\"" +#~ msgstr "" +#~ "пропускается очистка, предотвращающая зацикливание, для таблицы \"%s.%s.%s" +#~ "\"" + +#~ msgid "" +#~ "The database cluster was initialized without USE_FLOAT4_BYVAL but the " +#~ "server was compiled with USE_FLOAT4_BYVAL." +#~ msgstr "" +#~ "Кластер баз данных был инициализирован без USE_FLOAT4_BYVAL, но сервер " +#~ "скомпилирован с USE_FLOAT4_BYVAL." + +#~ msgid "" +#~ "The database cluster was initialized with USE_FLOAT4_BYVAL but the server " +#~ "was compiled without USE_FLOAT4_BYVAL." +#~ msgstr "" +#~ "Кластер баз данных был инициализирован с USE_FLOAT4_BYVAL, но сервер " +#~ "скомпилирован без USE_FLOAT4_BYVAL." + +#~ msgid "could not seek in log segment %s to offset %u: %m" +#~ msgstr "не удалось переместиться в сегменте журнала %s к смещению %u: %m" + +#~ msgid "could not read from log segment %s, offset %u, length %lu: %m" +#~ msgstr "" +#~ "не удалось прочитать сегмент журнала %s (смещение %u, длина %lu): %m" + +#~ msgid "" +#~ "An aggregate using a polymorphic transition type must have at least one " +#~ "polymorphic argument." +#~ msgstr "" +#~ "Агрегатная функция, использующая полиморфный переходный тип, должна иметь " +#~ "минимум один полиморфный аргумент." + +#~ msgid "" +#~ "An aggregate returning a polymorphic type must have at least one " +#~ "polymorphic argument." +#~ msgstr "" +#~ "Агрегатная функция, возвращающая полиморфный тип, должна иметь минимум " +#~ "один полиморфный аргумент." + +#~ msgid "" +#~ "A function returning \"internal\" must have at least one \"internal\" " +#~ "argument." +#~ msgstr "" +#~ "Функция, возвращающая \"internal\", должна иметь минимум один аргумент " +#~ "\"internal\"." + +#~ msgid "" +#~ "A function returning a polymorphic type must have at least one " +#~ "polymorphic argument." +#~ msgstr "" +#~ "Функция, возвращающая полиморфный тип, должна иметь минимум один " +#~ "полиморфный аргумент." + +#~ msgid "" +#~ "A function returning \"anyrange\" must have at least one \"anyrange\" " +#~ "argument." +#~ msgstr "" +#~ "Функция, возвращающая \"anyrange\", должна иметь минимум один аргумент " +#~ "\"anyrange\"." + +#~ msgid "Adding partitioned tables to publications is not supported." +#~ msgstr "Добавление секционированных таблиц в публикации не поддерживается." + +#~ msgid "You can add the table partitions individually." +#~ msgstr "Но вы можете добавить секции таблицы по одной." + +#~ msgid "EXPLAIN option BUFFERS requires ANALYZE" +#~ msgstr "параметр BUFFERS оператора EXPLAIN требует указания ANALYZE" + +#~ msgid "" +#~ "FROM version must be different from installation target version \"%s\"" +#~ msgstr "версия FROM должна отличаться от устанавливаемой версии \"%s\"" + +#~ msgid "" +#~ "using pg_pltemplate information instead of CREATE LANGUAGE parameters" +#~ msgstr "" +#~ "вместо параметров CREATE LANGUAGE используется информация pg_pltemplate" + +#~ msgid "must be superuser to create procedural language \"%s\"" +#~ msgstr "" +#~ "для создания процедурного языка \"%s\" нужно быть суперпользователем" + +#~ msgid "unsupported language \"%s\"" +#~ msgstr "неподдерживаемый язык: \"%s\"" + +#~ msgid "" +#~ "The supported languages are listed in the pg_pltemplate system catalog." +#~ msgstr "" +#~ "Список поддерживаемых языков содержится в системном каталоге " +#~ "pg_pltemplate." + +#~ msgid "changing return type of function %s from %s to %s" +#~ msgstr "изменение типа возврата функции %s с %s на %s" + +#~ msgid "column \"%s\" contains null values" +#~ msgstr "столбец \"%s\" содержит значения NULL" + +#~ msgid "" +#~ "updated partition constraint for default partition would be violated by " +#~ "some row" +#~ msgstr "" +#~ "изменённое ограничение секции для секции по умолчанию будет нарушено " +#~ "некоторыми строками" + +#~ msgid "partition key expressions cannot contain whole-row references" +#~ msgstr "" +#~ "выражения ключей секционирования не могут содержать ссылки на кортеж " +#~ "целиком" + +#~ msgid "Partitioned tables cannot have BEFORE / FOR EACH ROW triggers." +#~ msgstr "" +#~ "В секционированных таблицах не может быть триггеров BEFORE / FOR EACH ROW." + +#~ msgid "Found referenced table's UPDATE trigger." +#~ msgstr "Найден триггер UPDATE в главной таблице." + +#~ msgid "Found referenced table's DELETE trigger." +#~ msgstr "Найден триггер DELETE в главной таблице." + +#~ msgid "Found referencing table's trigger." +#~ msgstr "Найден триггер в подчинённой таблице." + +#~ msgid "ignoring incomplete trigger group for constraint \"%s\" %s" +#~ msgstr "неполный набор триггеров для ограничения \"%s\" %s игнорируется" + +#~ msgid "converting trigger group into constraint \"%s\" %s" +#~ msgstr "преобразование набора триггеров в ограничение \"%s\" %s" + +#~ msgid "changing argument type of function %s from \"opaque\" to \"cstring\"" +#~ msgstr "изменение типа аргумента функции %s с \"opaque\" на \"cstring\"" + +#~ msgid "changing argument type of function %s from \"opaque\" to %s" +#~ msgstr "изменение типа аргумента функции %s с \"opaque\" на %s" + +#~ msgid "invalid value for \"check_option\" option" +#~ msgstr "неверное значение для параметра \"check_option\"" + +#~ msgid "\"%s.%s\" is a partitioned table." +#~ msgstr "\"%s.%s\" — секционированная таблица." + +#~ msgid "" +#~ "could not determine actual result type for function declared to return " +#~ "type %s" +#~ msgstr "" +#~ "не удалось определить фактический тип результата для функции (в " +#~ "объявлении указан тип %s)" + +#~ msgid "could not write to hash-join temporary file: %m" +#~ msgstr "не удалось записать во временный файл хеш-соединения: %m" + +#~ msgid "could not load wldap32.dll" +#~ msgstr "не удалось загрузить wldap32.dll" + +#~ msgid "SSL certificate revocation list file \"%s\" ignored" +#~ msgstr "файл со списком отзыва сертификатов SSL \"%s\" игнорируется" + +#~ msgid "SSL library does not support certificate revocation lists." +#~ msgstr "Библиотека SSL не поддерживает списки отзыва сертификатов." + +#~ msgid "could not find range type for data type %s" +#~ msgstr "тип диапазона для типа данных %s не найден" + +#~ msgid "could not create signal dispatch thread: error code %lu\n" +#~ msgstr "не удалось создать поток распределения сигналов (код ошибки: %lu)\n" + +#~ msgid "cannot advance replication slot that has not previously reserved WAL" +#~ msgstr "" +#~ "продвинуть слот репликации, для которого ранее не был зарезервирован WAL, " +#~ "нельзя" + +#~ msgid "could not read from log segment %s, offset %u, length %zu: %m" +#~ msgstr "" +#~ "не удалось прочитать сегмент журнала %s (смещение %u, длина %zu): %m" + +#~ msgid "cannot use advisory locks during a parallel operation" +#~ msgstr "" +#~ "использовать рекомендательные блокировки во время параллельных операций " +#~ "нельзя" + +#~ msgid "cannot output a value of type %s" +#~ msgstr "значение типа %s нельзя вывести" + +#~ msgid "Server has FLOAT4PASSBYVAL = %s, library has %s." +#~ msgstr "В сервере FLOAT4PASSBYVAL = %s, в библиотеке: %s." + +#~ msgid "encoding name too long" +#~ msgstr "слишком длинное имя кодировки" + +#~ msgid "Encrypt passwords." +#~ msgstr "Шифровать пароли." + +#~ msgid "" +#~ "When a password is specified in CREATE USER or ALTER USER without writing " +#~ "either ENCRYPTED or UNENCRYPTED, this parameter determines whether the " +#~ "password is to be encrypted." +#~ msgstr "" +#~ "Этот параметр определяет, нужно ли шифровать пароли, заданные в CREATE " +#~ "USER или ALTER USER без указания ENCRYPTED или UNENCRYPTED." + +#~ msgid "\"%s\" cannot be lower than \"%s\"." +#~ msgstr "Версия \"%s\" не может быть ниже \"%s\"." + +#~ msgid "could not write to temporary file: %m" +#~ msgstr "не удалось записать во временный файл: %m" + +#~ msgid "could not write to tuplestore temporary file: %m" +#~ msgstr "не удалось записать во временный файл источника кортежей: %m" + +#~ msgid "" +#~ "Unicode escape values cannot be used for code point values above 007F " +#~ "when the server encoding is not UTF8" +#~ msgstr "" +#~ "Спецкоды Unicode для значений выше 007F можно использовать только с " +#~ "серверной кодировкой UTF8" + #~ msgid "replication origin %d is already active for PID %d" #~ msgstr "источник репликации %d уже занят процессом с PID %d" @@ -30152,12 +31249,6 @@ msgstr "Используйте для записи спецсимволов си #~ msgid "child table \"%s\" has a conflicting \"%s\" column" #~ msgstr "дочерняя таблица \"%s\" содержит конфликтующий столбец \"%s\"" -#~ msgid "" -#~ "cannot add constraint to only the partitioned table when partitions exist" -#~ msgstr "" -#~ "добавить ограничение только в секционированную таблицу, когда существуют " -#~ "секции, нельзя" - #, fuzzy #~ msgid "cannot drop column named in partition key" #~ msgstr "нельзя удалить столбец, входящий в ключ секционирования" @@ -30330,9 +31421,6 @@ msgstr "Используйте для записи спецсимволов си #~ msgid "abstime out of range for date" #~ msgstr "abstime вне диапазона для типа даты" -#~ msgid "value out of range: underflow" -#~ msgstr "значение вне диапазона: антипереполнение" - #~ msgid "could not determine which collation to use for upper() function" #~ msgstr "" #~ "не удалось определить, какое правило сортировки использовать для функции " diff --git a/src/backend/po/sv.po b/src/backend/po/sv.po index 0613dcecc33f1..2191b63a4c558 100644 --- a/src/backend/po/sv.po +++ b/src/backend/po/sv.po @@ -16,13 +16,13 @@ # # Andra exempel är att i engelskan används cleanup och vacuum på olika ställen nedan. Jag har valt att # behålla vacuum på svenska för att göra tydligt att det är kommandon VACUUM och den processen det -# hänvisas till och inte någon annan städningen. +# hänvisas till och inte någon annan städning. msgid "" msgstr "" "Project-Id-Version: PostgreSQL 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-09 08:43+0000\n" -"PO-Revision-Date: 2020-05-09 13:48+0200\n" +"POT-Creation-Date: 2020-10-20 16:43+0000\n" +"PO-Revision-Date: 2020-10-20 19:40+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -39,37 +39,37 @@ msgid "not recorded" msgstr "ej sparad" #: ../common/controldata_utils.c:68 ../common/controldata_utils.c:73 -#: commands/copy.c:3500 commands/extension.c:3423 utils/adt/genfile.c:147 +#: commands/copy.c:3495 commands/extension.c:3436 utils/adt/genfile.c:125 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "kunde inte öppna filen \"%s\" för läsning: %m" #: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1276 access/transam/xlog.c:3501 -#: access/transam/xlog.c:4726 access/transam/xlog.c:11097 -#: access/transam/xlog.c:11110 access/transam/xlog.c:11563 -#: access/transam/xlog.c:11643 access/transam/xlog.c:11682 -#: access/transam/xlog.c:11725 access/transam/xlogfuncs.c:662 -#: access/transam/xlogfuncs.c:681 commands/extension.c:3433 libpq/hba.c:499 -#: replication/logical/origin.c:714 replication/logical/origin.c:750 -#: replication/logical/reorderbuffer.c:3607 +#: access/transam/twophase.c:1276 access/transam/xlog.c:3503 +#: access/transam/xlog.c:4728 access/transam/xlog.c:11121 +#: access/transam/xlog.c:11134 access/transam/xlog.c:11587 +#: access/transam/xlog.c:11667 access/transam/xlog.c:11706 +#: access/transam/xlog.c:11749 access/transam/xlogfuncs.c:662 +#: access/transam/xlogfuncs.c:681 commands/extension.c:3446 libpq/hba.c:499 +#: replication/logical/origin.c:717 replication/logical/origin.c:753 +#: replication/logical/reorderbuffer.c:3599 #: replication/logical/snapbuild.c:1741 replication/logical/snapbuild.c:1783 #: replication/logical/snapbuild.c:1811 replication/logical/snapbuild.c:1838 -#: replication/slot.c:1539 replication/slot.c:1580 replication/walsender.c:550 -#: storage/file/copydir.c:195 utils/adt/genfile.c:164 utils/adt/misc.c:765 -#: utils/cache/relmapper.c:741 +#: replication/slot.c:1622 replication/slot.c:1663 replication/walsender.c:543 +#: storage/file/buffile.c:441 storage/file/copydir.c:195 +#: utils/adt/genfile.c:200 utils/adt/misc.c:763 utils/cache/relmapper.c:741 #, c-format msgid "could not read file \"%s\": %m" msgstr "kunde inte läsa fil \"%s\": %m" #: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 -#: access/transam/twophase.c:1279 access/transam/xlog.c:3506 -#: access/transam/xlog.c:4731 replication/logical/origin.c:719 -#: replication/logical/origin.c:758 replication/logical/snapbuild.c:1746 +#: access/transam/twophase.c:1279 access/transam/xlog.c:3508 +#: access/transam/xlog.c:4733 replication/logical/origin.c:722 +#: replication/logical/origin.c:761 replication/logical/snapbuild.c:1746 #: replication/logical/snapbuild.c:1788 replication/logical/snapbuild.c:1816 -#: replication/logical/snapbuild.c:1843 replication/slot.c:1543 -#: replication/slot.c:1584 replication/walsender.c:555 +#: replication/logical/snapbuild.c:1843 replication/slot.c:1626 +#: replication/slot.c:1667 replication/walsender.c:548 #: utils/cache/relmapper.c:745 #, c-format msgid "could not read file \"%s\": read %d of %zu" @@ -80,17 +80,17 @@ msgstr "kunde inte läsa fil \"%s\": läste %d av %zu" #: access/heap/rewriteheap.c:1181 access/heap/rewriteheap.c:1284 #: access/transam/timeline.c:392 access/transam/timeline.c:438 #: access/transam/timeline.c:516 access/transam/twophase.c:1288 -#: access/transam/twophase.c:1676 access/transam/xlog.c:3373 -#: access/transam/xlog.c:3541 access/transam/xlog.c:3546 -#: access/transam/xlog.c:3874 access/transam/xlog.c:4696 -#: access/transam/xlog.c:5623 access/transam/xlogfuncs.c:687 -#: commands/copy.c:1815 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 -#: replication/logical/origin.c:652 replication/logical/origin.c:791 -#: replication/logical/reorderbuffer.c:3665 +#: access/transam/twophase.c:1676 access/transam/xlog.c:3375 +#: access/transam/xlog.c:3543 access/transam/xlog.c:3548 +#: access/transam/xlog.c:3876 access/transam/xlog.c:4698 +#: access/transam/xlog.c:5622 access/transam/xlogfuncs.c:687 +#: commands/copy.c:1810 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 +#: replication/logical/origin.c:655 replication/logical/origin.c:794 +#: replication/logical/reorderbuffer.c:3657 #: replication/logical/snapbuild.c:1653 replication/logical/snapbuild.c:1851 -#: replication/slot.c:1430 replication/slot.c:1591 replication/walsender.c:565 -#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:702 -#: storage/file/fd.c:3417 storage/file/fd.c:3520 utils/cache/relmapper.c:753 +#: replication/slot.c:1513 replication/slot.c:1674 replication/walsender.c:558 +#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:704 +#: storage/file/fd.c:3425 storage/file/fd.c:3528 utils/cache/relmapper.c:753 #: utils/cache/relmapper.c:892 #, c-format msgid "could not close file \"%s\": %m" @@ -118,31 +118,31 @@ msgstr "" #: ../common/file_utils.c:357 access/heap/rewriteheap.c:1267 #: access/transam/timeline.c:111 access/transam/timeline.c:251 #: access/transam/timeline.c:348 access/transam/twophase.c:1232 -#: access/transam/xlog.c:3275 access/transam/xlog.c:3415 -#: access/transam/xlog.c:3456 access/transam/xlog.c:3654 -#: access/transam/xlog.c:3739 access/transam/xlog.c:3842 -#: access/transam/xlog.c:4716 access/transam/xlogutils.c:808 +#: access/transam/xlog.c:3277 access/transam/xlog.c:3417 +#: access/transam/xlog.c:3458 access/transam/xlog.c:3656 +#: access/transam/xlog.c:3741 access/transam/xlog.c:3844 +#: access/transam/xlog.c:4718 access/transam/xlogutils.c:807 #: postmaster/syslogger.c:1488 replication/basebackup.c:621 -#: replication/basebackup.c:1590 replication/logical/origin.c:704 -#: replication/logical/reorderbuffer.c:2466 -#: replication/logical/reorderbuffer.c:2833 -#: replication/logical/reorderbuffer.c:3587 +#: replication/basebackup.c:1593 replication/logical/origin.c:707 +#: replication/logical/reorderbuffer.c:2465 +#: replication/logical/reorderbuffer.c:2825 +#: replication/logical/reorderbuffer.c:3579 #: replication/logical/snapbuild.c:1608 replication/logical/snapbuild.c:1712 -#: replication/slot.c:1511 replication/walsender.c:523 -#: replication/walsender.c:2516 storage/file/copydir.c:161 -#: storage/file/fd.c:677 storage/file/fd.c:3404 storage/file/fd.c:3491 +#: replication/slot.c:1594 replication/walsender.c:516 +#: replication/walsender.c:2517 storage/file/copydir.c:161 +#: storage/file/fd.c:679 storage/file/fd.c:3412 storage/file/fd.c:3499 #: storage/smgr/md.c:475 utils/cache/relmapper.c:724 #: utils/cache/relmapper.c:836 utils/error/elog.c:1858 #: utils/init/miscinit.c:1316 utils/init/miscinit.c:1450 -#: utils/init/miscinit.c:1527 utils/misc/guc.c:8262 utils/misc/guc.c:8294 +#: utils/init/miscinit.c:1527 utils/misc/guc.c:8280 utils/misc/guc.c:8312 #, c-format msgid "could not open file \"%s\": %m" msgstr "kunde inte öppna fil \"%s\": %m" #: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 #: access/transam/twophase.c:1649 access/transam/twophase.c:1658 -#: access/transam/xlog.c:10854 access/transam/xlog.c:10892 -#: access/transam/xlog.c:11305 access/transam/xlogfuncs.c:741 +#: access/transam/xlog.c:10878 access/transam/xlog.c:10916 +#: access/transam/xlog.c:11329 access/transam/xlogfuncs.c:741 #: postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 #: utils/cache/relmapper.c:870 #, c-format @@ -154,12 +154,12 @@ msgstr "kunde inte skriva fil \"%s\": %m" #: access/heap/rewriteheap.c:961 access/heap/rewriteheap.c:1175 #: access/heap/rewriteheap.c:1278 access/transam/timeline.c:432 #: access/transam/timeline.c:510 access/transam/twophase.c:1670 -#: access/transam/xlog.c:3366 access/transam/xlog.c:3535 -#: access/transam/xlog.c:4689 access/transam/xlog.c:10362 -#: access/transam/xlog.c:10389 replication/logical/snapbuild.c:1646 -#: replication/slot.c:1416 replication/slot.c:1521 storage/file/fd.c:694 -#: storage/file/fd.c:3512 storage/smgr/md.c:921 storage/smgr/md.c:962 -#: storage/sync/sync.c:395 utils/cache/relmapper.c:885 utils/misc/guc.c:8045 +#: access/transam/xlog.c:3368 access/transam/xlog.c:3537 +#: access/transam/xlog.c:4691 access/transam/xlog.c:10386 +#: access/transam/xlog.c:10413 replication/logical/snapbuild.c:1646 +#: replication/slot.c:1499 replication/slot.c:1604 storage/file/fd.c:696 +#: storage/file/fd.c:3520 storage/smgr/md.c:921 storage/smgr/md.c:962 +#: storage/sync/sync.c:396 utils/cache/relmapper.c:885 utils/misc/guc.c:8063 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "kunde inte fsync:a fil \"%s\": %m" @@ -189,8 +189,8 @@ msgstr "kunde inte hitta en \"%s\" att köra" msgid "could not change directory to \"%s\": %m" msgstr "kunde inte byta katalog till \"%s\": %m" -#: ../common/exec.c:287 access/transam/xlog.c:10726 -#: replication/basebackup.c:1415 utils/adt/misc.c:336 +#: ../common/exec.c:287 access/transam/xlog.c:10750 +#: replication/basebackup.c:1418 utils/adt/misc.c:337 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "kan inte läsa symbolisk länk \"%s\": %m" @@ -203,79 +203,37 @@ msgstr "pclose misslyckades: %m" #: ../common/exec.c:539 ../common/exec.c:584 ../common/exec.c:676 #: ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 #: ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1341 -#: access/transam/xlog.c:6490 lib/dshash.c:246 libpq/auth.c:1090 +#: access/transam/xlog.c:6493 lib/dshash.c:246 libpq/auth.c:1090 #: libpq/auth.c:1491 libpq/auth.c:1559 libpq/auth.c:2089 #: libpq/be-secure-gssapi.c:484 postmaster/bgworker.c:336 -#: postmaster/bgworker.c:886 postmaster/postmaster.c:2499 -#: postmaster/postmaster.c:2521 postmaster/postmaster.c:4159 -#: postmaster/postmaster.c:4853 postmaster/postmaster.c:4923 -#: postmaster/postmaster.c:5608 postmaster/postmaster.c:5969 -#: replication/libpqwalreceiver/libpqwalreceiver.c:259 -#: replication/logical/logical.c:176 storage/buffer/localbuf.c:442 -#: storage/file/fd.c:832 storage/file/fd.c:1302 storage/file/fd.c:1463 -#: storage/file/fd.c:2268 storage/ipc/procarray.c:1047 -#: storage/ipc/procarray.c:1543 storage/ipc/procarray.c:1550 -#: storage/ipc/procarray.c:1974 storage/ipc/procarray.c:2599 +#: postmaster/bgworker.c:893 postmaster/postmaster.c:2518 +#: postmaster/postmaster.c:2540 postmaster/postmaster.c:4166 +#: postmaster/postmaster.c:4868 postmaster/postmaster.c:4938 +#: postmaster/postmaster.c:5635 postmaster/postmaster.c:5995 +#: replication/libpqwalreceiver/libpqwalreceiver.c:276 +#: replication/logical/logical.c:176 replication/walsender.c:590 +#: storage/buffer/localbuf.c:442 storage/file/fd.c:834 storage/file/fd.c:1304 +#: storage/file/fd.c:1465 storage/file/fd.c:2270 storage/ipc/procarray.c:1045 +#: storage/ipc/procarray.c:1541 storage/ipc/procarray.c:1548 +#: storage/ipc/procarray.c:1972 storage/ipc/procarray.c:2597 #: utils/adt/cryptohashes.c:45 utils/adt/cryptohashes.c:65 -#: utils/adt/formatting.c:1698 utils/adt/formatting.c:1822 -#: utils/adt/formatting.c:1947 utils/adt/pg_locale.c:483 -#: utils/adt/pg_locale.c:647 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 +#: utils/adt/formatting.c:1700 utils/adt/formatting.c:1824 +#: utils/adt/formatting.c:1949 utils/adt/pg_locale.c:484 +#: utils/adt/pg_locale.c:648 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 #: utils/hash/dynahash.c:450 utils/hash/dynahash.c:559 #: utils/hash/dynahash.c:1071 utils/mb/mbutils.c:401 utils/mb/mbutils.c:428 -#: utils/mb/mbutils.c:757 utils/mb/mbutils.c:783 utils/misc/guc.c:4856 -#: utils/misc/guc.c:4872 utils/misc/guc.c:4885 utils/misc/guc.c:8023 +#: utils/mb/mbutils.c:757 utils/mb/mbutils.c:783 utils/misc/guc.c:4846 +#: utils/misc/guc.c:4862 utils/misc/guc.c:4875 utils/misc/guc.c:8041 #: utils/misc/tzparser.c:467 utils/mmgr/aset.c:475 utils/mmgr/dsa.c:701 #: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:233 #: utils/mmgr/mcxt.c:821 utils/mmgr/mcxt.c:857 utils/mmgr/mcxt.c:895 #: utils/mmgr/mcxt.c:933 utils/mmgr/mcxt.c:969 utils/mmgr/mcxt.c:1000 #: utils/mmgr/mcxt.c:1036 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1123 -#: utils/mmgr/mcxt.c:1158 utils/mmgr/slab.c:234 +#: utils/mmgr/mcxt.c:1158 utils/mmgr/slab.c:235 #, c-format msgid "out of memory" msgstr "slut på minne" -#: ../common/fe_archive.c:57 -#, c-format -msgid "could not use restore_command with %%r alias" -msgstr "kunde inte använda restore_command med %%r-alias" - -#: ../common/fe_archive.c:78 -#, c-format -msgid "unexpected file size for \"%s\": %lu instead of %lu" -msgstr "oväntad filstorlek på \"%s\": %lu istället för %lu" - -#: ../common/fe_archive.c:89 -#, c-format -msgid "could not open file \"%s\" restored from archive: %m" -msgstr "kunde inte öppna fil \"%s\" återställd från arkiv: %m" - -#: ../common/fe_archive.c:101 ../common/file_utils.c:79 -#: ../common/file_utils.c:181 access/transam/twophase.c:1244 -#: access/transam/xlog.c:10830 access/transam/xlog.c:10868 -#: access/transam/xlog.c:11085 access/transam/xlogarchive.c:110 -#: access/transam/xlogarchive.c:226 commands/copy.c:1943 commands/copy.c:3510 -#: commands/extension.c:3412 commands/tablespace.c:795 -#: commands/tablespace.c:886 guc-file.l:1061 replication/basebackup.c:444 -#: replication/basebackup.c:627 replication/basebackup.c:700 -#: replication/logical/snapbuild.c:1522 storage/file/copydir.c:68 -#: storage/file/copydir.c:107 storage/file/fd.c:1814 storage/file/fd.c:3088 -#: storage/file/fd.c:3270 storage/file/fd.c:3356 utils/adt/dbsize.c:70 -#: utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:127 -#: utils/adt/genfile.c:380 utils/adt/genfile.c:606 -#, c-format -msgid "could not stat file \"%s\": %m" -msgstr "kunde inte göra stat() på fil \"%s\": %m" - -#: ../common/fe_archive.c:116 -#, c-format -msgid "restore_command failed due to the signal: %s" -msgstr "restore_command misslyckades på grund av signal: %s" - -#: ../common/fe_archive.c:125 -#, c-format -msgid "could not restore file \"%s\" from archive" -msgstr "kunde inte återställa fil \"%s\" från arkiv" - #: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 #: ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 #: ../common/psprintf.c:145 ../port/path.c:632 ../port/path.c:670 @@ -290,23 +248,39 @@ msgstr "slut på minne\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "kan inte duplicera null-pekare (internt fel)\n" +#: ../common/file_utils.c:79 ../common/file_utils.c:181 +#: access/transam/twophase.c:1244 access/transam/xlog.c:10854 +#: access/transam/xlog.c:10892 access/transam/xlog.c:11109 +#: access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:226 +#: commands/copy.c:1938 commands/copy.c:3505 commands/extension.c:3425 +#: commands/tablespace.c:795 commands/tablespace.c:886 guc-file.l:1061 +#: replication/basebackup.c:444 replication/basebackup.c:627 +#: replication/basebackup.c:700 replication/logical/snapbuild.c:1522 +#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1816 +#: storage/file/fd.c:3096 storage/file/fd.c:3278 storage/file/fd.c:3364 +#: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 +#: utils/adt/genfile.c:416 utils/adt/genfile.c:642 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "kunde inte göra stat() på fil \"%s\": %m" + #: ../common/file_utils.c:158 ../common/pgfnames.c:48 commands/tablespace.c:718 -#: commands/tablespace.c:728 postmaster/postmaster.c:1497 -#: storage/file/fd.c:2671 storage/file/reinit.c:122 utils/adt/misc.c:258 +#: commands/tablespace.c:728 postmaster/postmaster.c:1509 +#: storage/file/fd.c:2673 storage/file/reinit.c:122 utils/adt/misc.c:259 #: utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "kunde inte öppna katalog \"%s\": %m" -#: ../common/file_utils.c:192 ../common/pgfnames.c:69 storage/file/fd.c:2683 +#: ../common/file_utils.c:192 ../common/pgfnames.c:69 storage/file/fd.c:2685 #, c-format msgid "could not read directory \"%s\": %m" msgstr "kunde inte läsa katalog \"%s\": %m" #: ../common/file_utils.c:375 access/transam/xlogarchive.c:411 #: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1665 -#: replication/slot.c:609 replication/slot.c:1302 replication/slot.c:1444 -#: storage/file/fd.c:712 utils/time/snapmgr.c:1350 +#: replication/slot.c:650 replication/slot.c:1385 replication/slot.c:1527 +#: storage/file/fd.c:714 utils/time/snapmgr.c:1350 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "kunde inte döpa om fil \"%s\" till \"%s\": %m" @@ -370,7 +344,7 @@ msgstr "Förväntade sträng, men hittade \"%s\"." msgid "Token \"%s\" is invalid." msgstr "Token \"%s\" är ogiltig." -#: ../common/jsonapi.c:1099 jsonpath_scan.l:495 +#: ../common/jsonapi.c:1099 jsonpath_scan.l:499 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 kan inte konverteras till text." @@ -383,13 +357,13 @@ msgstr "\"\\u\" måste följas av fyra hexdecimala siffror." msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." msgstr "Escape-värden för unicode kan inte användas för kodpunkter med värde över 007F när kodningen inte är UTF8." -#: ../common/jsonapi.c:1106 jsonpath_scan.l:516 +#: ../common/jsonapi.c:1106 jsonpath_scan.l:520 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Unicodes övre surrogathalva får inte komma efter en övre surrogathalva." -#: ../common/jsonapi.c:1108 jsonpath_scan.l:527 jsonpath_scan.l:537 -#: jsonpath_scan.l:579 +#: ../common/jsonapi.c:1108 jsonpath_scan.l:531 jsonpath_scan.l:541 +#: jsonpath_scan.l:583 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Unicodes lägre surrogathalva måste följa en övre surrogathalva." @@ -464,8 +438,8 @@ msgstr "kunde inte köra igen med token för begränsad åtkomst: felkod %lu" msgid "could not get exit code from subprocess: error code %lu" msgstr "kunde inte hämta statuskod för underprocess: felkod %lu" -#: ../common/rmtree.c:79 replication/basebackup.c:1168 -#: replication/basebackup.c:1344 +#: ../common/rmtree.c:79 replication/basebackup.c:1171 +#: replication/basebackup.c:1347 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "kunde inte ta status på fil eller katalog \"%s\": %m" @@ -624,7 +598,7 @@ msgid "request for BRIN range summarization for index \"%s\" page %u was not rec msgstr "förfrågan efter BRIN-intervallsummering för index \"%s\" sida %u har inte spelats in" #: access/brin/brin.c:873 access/brin/brin.c:950 access/gin/ginfast.c:1035 -#: access/transam/xlog.c:10498 access/transam/xlog.c:11036 +#: access/transam/xlog.c:10522 access/transam/xlog.c:11060 #: access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 #: access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 #: access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 @@ -655,22 +629,17 @@ msgstr "kunde inte öppna föräldratabell för index %s" #: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 #: access/brin/brin_pageops.c:843 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1434 access/spgist/spgdoinsert.c:1957 +#: access/gist/gist.c:1435 access/spgist/spgdoinsert.c:1957 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "indexradstorlek %zu överstiger maximum %zu för index \"%s\"" -#: access/brin/brin_revmap.c:382 access/brin/brin_revmap.c:388 +#: access/brin/brin_revmap.c:392 access/brin/brin_revmap.c:398 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "trasigt BRIN-index: inkonsistent intervall-map" -#: access/brin/brin_revmap.c:405 -#, c-format -msgid "leftover placeholder tuple detected in BRIN index \"%s\", deleting" -msgstr "kvarlämnad platshållartuple hittad i BRIN-index \"%s\", raderar" - -#: access/brin/brin_revmap.c:602 +#: access/brin/brin_revmap.c:601 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "oväntad sidtyp 0x%04X i BRIN-index \"%s\" block %u" @@ -802,7 +771,7 @@ msgstr "RESET får inte ha med värden på parametrar" msgid "unrecognized parameter namespace \"%s\"" msgstr "okänd parameternamnrymd \"%s\"" -#: access/common/reloptions.c:1277 utils/misc/guc.c:12014 +#: access/common/reloptions.c:1277 utils/misc/guc.c:12032 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "tabeller deklarerade med WITH OIDS stöds inte" @@ -883,6 +852,11 @@ msgstr "\"%s\" är inte ett GIN-index" msgid "cannot access temporary indexes of other sessions" msgstr "kan inte flytta temporära index tillhörande andra sessioner" +#: access/gin/ginget.c:270 access/nbtree/nbtinsert.c:745 +#, c-format +msgid "failed to re-find tuple within index \"%s\"" +msgstr "misslyckades att återfinna tuple i index \"%s\"" + #: access/gin/ginscan.c:431 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" @@ -922,19 +896,14 @@ msgid "This is caused by an incomplete page split at crash recovery before upgra msgstr "Detta orsakas av en inkomplett siduppdelning under krashåterställning körd innan uppdatering till PostgreSQL 9.1." #: access/gist/gist.c:756 access/gist/gistutil.c:786 access/gist/gistutil.c:797 -#: access/gist/gistvacuum.c:411 access/hash/hashutil.c:226 -#: access/hash/hashutil.c:237 access/hash/hashutil.c:249 -#: access/hash/hashutil.c:270 access/nbtree/nbtpage.c:738 -#: access/nbtree/nbtpage.c:749 +#: access/gist/gistvacuum.c:411 access/hash/hashutil.c:227 +#: access/hash/hashutil.c:238 access/hash/hashutil.c:250 +#: access/hash/hashutil.c:271 access/nbtree/nbtpage.c:741 +#: access/nbtree/nbtpage.c:752 #, c-format msgid "Please REINDEX it." msgstr "Var vänlig och kör REINDEX på det." -#: access/gist/gistbuildbuffers.c:779 utils/sort/logtape.c:247 -#, c-format -msgid "could not write block %ld of temporary file: %m" -msgstr "kunde inte skriva block %ld i temporär fil: %m" - #: access/gist/gistsplit.c:446 #, c-format msgid "picksplit method for column %d of index \"%s\" failed" @@ -945,14 +914,14 @@ msgstr "picksplit-metod för kolumn %d i index \"%s\" misslyckades" msgid "The index is not optimal. To optimize it, contact a developer, or try to use the column as the second one in the CREATE INDEX command." msgstr "Indexet är inte optimalt. För att optimera det, kontakta en utvecklare eller försök använda kolumnen som det andra värdet i CREATE INDEX-kommandot." -#: access/gist/gistutil.c:783 access/hash/hashutil.c:223 -#: access/nbtree/nbtpage.c:735 +#: access/gist/gistutil.c:783 access/hash/hashutil.c:224 +#: access/nbtree/nbtpage.c:738 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "index \"%s\" innehåller en oväntad nollställd sida vid block %u" -#: access/gist/gistutil.c:794 access/hash/hashutil.c:234 -#: access/hash/hashutil.c:246 access/nbtree/nbtpage.c:746 +#: access/gist/gistutil.c:794 access/hash/hashutil.c:235 +#: access/hash/hashutil.c:247 access/nbtree/nbtpage.c:749 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "index \"%s\" har en trasig sida vid block %u" @@ -975,11 +944,11 @@ msgstr "kunde inte bestämma vilken jämförelse (collation) som skall användas #: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:702 #: catalog/heap.c:708 commands/createas.c:206 commands/createas.c:489 -#: commands/indexcmds.c:1815 commands/tablecmds.c:15944 commands/view.c:86 -#: parser/parse_utilcmd.c:4116 regex/regc_pg_locale.c:263 -#: utils/adt/formatting.c:1665 utils/adt/formatting.c:1789 -#: utils/adt/formatting.c:1914 utils/adt/like.c:194 -#: utils/adt/like_support.c:1005 utils/adt/varchar.c:733 +#: commands/indexcmds.c:1814 commands/tablecmds.c:16035 commands/view.c:86 +#: parser/parse_utilcmd.c:4203 regex/regc_pg_locale.c:263 +#: utils/adt/formatting.c:1667 utils/adt/formatting.c:1791 +#: utils/adt/formatting.c:1916 utils/adt/like.c:194 +#: utils/adt/like_support.c:1003 utils/adt/varchar.c:733 #: utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1476 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." @@ -1011,12 +980,12 @@ msgstr "slut på överspillsidor i hash-index \"%s\"" msgid "hash indexes do not support whole-index scans" msgstr "hash-index stöder inte hela-index-scans" -#: access/hash/hashutil.c:262 +#: access/hash/hashutil.c:263 #, c-format msgid "index \"%s\" is not a hash index" msgstr "index \"%s\" är inte ett hashträd" -#: access/hash/hashutil.c:268 +#: access/hash/hashutil.c:269 #, c-format msgid "index \"%s\" has wrong hash version" msgstr "index \"%s\" har fel hash-version" @@ -1031,33 +1000,33 @@ msgstr "operatorfamilj \"%s\" för accessmetod %s saknar supportfunktion för op msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "operatorfamilj \"%s\" för accessmetod %s saknar mellan-typ-operator(er)" -#: access/heap/heapam.c:2026 +#: access/heap/heapam.c:2024 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "kan inte lägga till tupler i en parellell arbetare" -#: access/heap/heapam.c:2444 +#: access/heap/heapam.c:2442 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "kan inte radera tupler under en parallell operation" -#: access/heap/heapam.c:2490 +#: access/heap/heapam.c:2488 #, c-format msgid "attempted to delete invisible tuple" msgstr "försökte ta bort en osynlig tuple" -#: access/heap/heapam.c:2916 access/heap/heapam.c:5705 +#: access/heap/heapam.c:2914 access/heap/heapam.c:5703 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "kan inte uppdatera tupler under en parallell operation" -#: access/heap/heapam.c:3049 +#: access/heap/heapam.c:3047 #, c-format msgid "attempted to update invisible tuple" msgstr "försökte uppdatera en osynlig tuple" -#: access/heap/heapam.c:4360 access/heap/heapam.c:4398 -#: access/heap/heapam.c:4655 access/heap/heapam_handler.c:450 +#: access/heap/heapam.c:4358 access/heap/heapam.c:4396 +#: access/heap/heapam.c:4653 access/heap/heapam_handler.c:450 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "kunde inte låsa rad i relationen \"%s\"" @@ -1079,11 +1048,11 @@ msgstr "kunde inte skriva till fil \"%s\", skrev %d av %d: %m." #: access/heap/rewriteheap.c:1015 access/heap/rewriteheap.c:1134 #: access/transam/timeline.c:329 access/transam/timeline.c:485 -#: access/transam/xlog.c:3298 access/transam/xlog.c:3470 -#: access/transam/xlog.c:4668 access/transam/xlog.c:10845 -#: access/transam/xlog.c:10883 access/transam/xlog.c:11288 -#: access/transam/xlogfuncs.c:735 postmaster/postmaster.c:4614 -#: replication/logical/origin.c:572 replication/slot.c:1363 +#: access/transam/xlog.c:3300 access/transam/xlog.c:3472 +#: access/transam/xlog.c:4670 access/transam/xlog.c:10869 +#: access/transam/xlog.c:10907 access/transam/xlog.c:11312 +#: access/transam/xlogfuncs.c:735 postmaster/postmaster.c:4629 +#: replication/logical/origin.c:575 replication/slot.c:1446 #: storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1329 #, c-format msgid "could not create file \"%s\": %m" @@ -1096,184 +1065,185 @@ msgstr "kunde inte trunkera fil \"%s\" till %u: %m" #: access/heap/rewriteheap.c:1162 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:502 -#: access/transam/xlog.c:3354 access/transam/xlog.c:3526 -#: access/transam/xlog.c:4680 postmaster/postmaster.c:4624 -#: postmaster/postmaster.c:4634 replication/logical/origin.c:584 -#: replication/logical/origin.c:626 replication/logical/origin.c:645 -#: replication/logical/snapbuild.c:1622 replication/slot.c:1398 -#: storage/file/copydir.c:207 utils/init/miscinit.c:1391 -#: utils/init/miscinit.c:1402 utils/init/miscinit.c:1410 utils/misc/guc.c:8006 -#: utils/misc/guc.c:8037 utils/misc/guc.c:9957 utils/misc/guc.c:9971 -#: utils/time/snapmgr.c:1334 utils/time/snapmgr.c:1341 +#: access/transam/xlog.c:3356 access/transam/xlog.c:3528 +#: access/transam/xlog.c:4682 postmaster/postmaster.c:4639 +#: postmaster/postmaster.c:4649 replication/logical/origin.c:587 +#: replication/logical/origin.c:629 replication/logical/origin.c:648 +#: replication/logical/snapbuild.c:1622 replication/slot.c:1481 +#: storage/file/buffile.c:502 storage/file/copydir.c:207 +#: utils/init/miscinit.c:1391 utils/init/miscinit.c:1402 +#: utils/init/miscinit.c:1410 utils/misc/guc.c:8024 utils/misc/guc.c:8055 +#: utils/misc/guc.c:9975 utils/misc/guc.c:9989 utils/time/snapmgr.c:1334 +#: utils/time/snapmgr.c:1341 #, c-format msgid "could not write to file \"%s\": %m" msgstr "kunde inte skriva till fil \"%s\": %m" #: access/heap/rewriteheap.c:1252 access/transam/twophase.c:1609 #: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:421 -#: postmaster/postmaster.c:1080 postmaster/syslogger.c:1465 -#: replication/logical/origin.c:560 replication/logical/reorderbuffer.c:3087 +#: postmaster/postmaster.c:1092 postmaster/syslogger.c:1465 +#: replication/logical/origin.c:563 replication/logical/reorderbuffer.c:3079 #: replication/logical/snapbuild.c:1564 replication/logical/snapbuild.c:2006 -#: replication/slot.c:1495 storage/file/fd.c:752 storage/file/fd.c:3108 -#: storage/file/fd.c:3170 storage/file/reinit.c:255 storage/ipc/dsm.c:302 +#: replication/slot.c:1578 storage/file/fd.c:754 storage/file/fd.c:3116 +#: storage/file/fd.c:3178 storage/file/reinit.c:255 storage/ipc/dsm.c:302 #: storage/smgr/md.c:311 storage/smgr/md.c:367 storage/sync/sync.c:210 #: utils/time/snapmgr.c:1674 #, c-format msgid "could not remove file \"%s\": %m" msgstr "kunde inte ta bort fil \"%s\": %m" -#: access/heap/vacuumlazy.c:640 +#: access/heap/vacuumlazy.c:648 #, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisk aggressiv vacuum för att förhindra \"wraparound\" av tabell \"%s.%s.%s\": indexskanningar: %d\n" -#: access/heap/vacuumlazy.c:642 +#: access/heap/vacuumlazy.c:650 #, c-format msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisk vacuum för att förhindra \"wraparound\" av tabell \"%s.%s.%s\": indexskanningar: %d\n" -#: access/heap/vacuumlazy.c:647 +#: access/heap/vacuumlazy.c:655 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisk vacuum av tabell \"%s.%s.%s\": indexskanningar: %d\n" -#: access/heap/vacuumlazy.c:649 +#: access/heap/vacuumlazy.c:657 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisk vacuum av tabell \"%s.%s.%s\": indexskanningar: %d\n" -#: access/heap/vacuumlazy.c:656 +#: access/heap/vacuumlazy.c:664 #, c-format msgid "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n" msgstr "sidor: %u borttagna, %u kvar, %u överhoppade pga pins, %u överhoppade frysta\n" -#: access/heap/vacuumlazy.c:662 +#: access/heap/vacuumlazy.c:670 #, c-format msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable, oldest xmin: %u\n" msgstr "tupler: %.0f borttagna, %.0f kvar, %.0f är döda men ännu inte möjliga att ta bort, äldsta xmin: %u\n" -#: access/heap/vacuumlazy.c:668 +#: access/heap/vacuumlazy.c:676 #, c-format msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" msgstr "bufferanvändning: %lld träffar, %lld missar, %lld nersmutsade\n" -#: access/heap/vacuumlazy.c:672 +#: access/heap/vacuumlazy.c:680 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "snitt läshastighet: %.3f MB/s, snitt skrivhastighet: %.3f MB/s\n" -#: access/heap/vacuumlazy.c:674 +#: access/heap/vacuumlazy.c:682 #, c-format msgid "system usage: %s\n" msgstr "systemanvändning: %s\n" -#: access/heap/vacuumlazy.c:676 +#: access/heap/vacuumlazy.c:684 #, c-format -msgid "WAL usage: %ld records, %ld full page images, " -msgstr "WAL-användning: %ld poster, %ld hela sidor, " +msgid "WAL usage: %ld records, %ld full page images, %llu bytes" +msgstr "WAL-användning: %ld poster, %ld hela sidor, %llu bytes" -#: access/heap/vacuumlazy.c:788 +#: access/heap/vacuumlazy.c:795 #, c-format msgid "aggressively vacuuming \"%s.%s\"" msgstr "aggressiv vaccum av \"%s.%s\"" -#: access/heap/vacuumlazy.c:793 commands/cluster.c:874 +#: access/heap/vacuumlazy.c:800 commands/cluster.c:874 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "kör vaccum på \"%s.%s\"" -#: access/heap/vacuumlazy.c:830 +#: access/heap/vacuumlazy.c:837 #, c-format msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" msgstr "stänger av parallell-flaggan för vacuumn på \"%s\" --- kan inte köra vacuum på temporära tabeller parallellt" -#: access/heap/vacuumlazy.c:1715 +#: access/heap/vacuumlazy.c:1725 #, c-format msgid "\"%s\": removed %.0f row versions in %u pages" msgstr "\"%s\": tog bort %.0f radversioner i %u sidor" -#: access/heap/vacuumlazy.c:1725 +#: access/heap/vacuumlazy.c:1735 #, c-format msgid "%.0f dead row versions cannot be removed yet, oldest xmin: %u\n" msgstr "%.0f döda radversioner kan inte tas bort än, äldsta xmin: %u\n" -#: access/heap/vacuumlazy.c:1727 +#: access/heap/vacuumlazy.c:1737 #, c-format msgid "There were %.0f unused item identifiers.\n" msgstr "Det fanns %.0f oanvända post-identifierare.\n" -#: access/heap/vacuumlazy.c:1729 +#: access/heap/vacuumlazy.c:1739 #, c-format msgid "Skipped %u page due to buffer pins, " msgid_plural "Skipped %u pages due to buffer pins, " msgstr[0] "Hoppade över %u sida på grund av fastnålade buffrar, " msgstr[1] "Hoppade över %u sidor på grund av fastnålade buffrar, " -#: access/heap/vacuumlazy.c:1733 +#: access/heap/vacuumlazy.c:1743 #, c-format msgid "%u frozen page.\n" msgid_plural "%u frozen pages.\n" -msgstr[0] "%u frusen sida.\n" -msgstr[1] "%u frusna sidor.\n" +msgstr[0] "%u fryst sida.\n" +msgstr[1] "%u frysta sidor.\n" -#: access/heap/vacuumlazy.c:1737 +#: access/heap/vacuumlazy.c:1747 #, c-format msgid "%u page is entirely empty.\n" msgid_plural "%u pages are entirely empty.\n" msgstr[0] "%u sida är helt tom.\n" msgstr[1] "%u sidor är helt tomma.\n" -#: access/heap/vacuumlazy.c:1741 commands/indexcmds.c:3450 -#: commands/indexcmds.c:3468 +#: access/heap/vacuumlazy.c:1751 commands/indexcmds.c:3487 +#: commands/indexcmds.c:3505 #, c-format msgid "%s." msgstr "%s." -#: access/heap/vacuumlazy.c:1744 +#: access/heap/vacuumlazy.c:1754 #, c-format msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" msgstr "\"%s\": hittade %.0f borttagbara, %.0f ej borttagbara radversioner i %u av %u sidor" -#: access/heap/vacuumlazy.c:1876 +#: access/heap/vacuumlazy.c:1888 #, c-format msgid "\"%s\": removed %d row versions in %d pages" msgstr "\"%s\": tog bort %d radversioner i %d sidor" -#: access/heap/vacuumlazy.c:2138 +#: access/heap/vacuumlazy.c:2143 #, c-format msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index cleanup (planned: %d)" msgstr[0] "startade %d parallell städarbetare för indexupprensning (planerat: %d)" msgstr[1] "startade %d parallella städarbetare för indexupprensning (planerat: %d)" -#: access/heap/vacuumlazy.c:2144 +#: access/heap/vacuumlazy.c:2149 #, c-format msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" msgstr[0] "startade %d parallell städarbetare för index-vacuum (planerat: %d)" msgstr[1] "startade %d parallella städarbetare för index-vacuum (planerat: %d)" -#: access/heap/vacuumlazy.c:2431 +#: access/heap/vacuumlazy.c:2441 #, c-format msgid "scanned index \"%s\" to remove %d row versions by parallel vacuum worker" msgstr "genomsökte index \"%s\" och tog bort %d radversioner med parallell vacuum-arbetsprocess" -#: access/heap/vacuumlazy.c:2433 +#: access/heap/vacuumlazy.c:2443 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "genomsökte index \"%s\" och tog bort %d radversioner" -#: access/heap/vacuumlazy.c:2493 +#: access/heap/vacuumlazy.c:2501 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages as reported by parallel vacuum worker" msgstr "index \"%s\" innehåller nu %.0f radversioner i %u sidor enligt raoport från parallell vacuum-arbetsprocess" -#: access/heap/vacuumlazy.c:2495 +#: access/heap/vacuumlazy.c:2503 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "index \"%s\" innehåller nu %.0f radversioner i %u sidor" -#: access/heap/vacuumlazy.c:2502 +#: access/heap/vacuumlazy.c:2510 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -1284,52 +1254,57 @@ msgstr "" "%u indexsidor har raderats, %u är nu återanvändningsbara.\n" "%s." -#: access/heap/vacuumlazy.c:2599 +#: access/heap/vacuumlazy.c:2613 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "\"%s\": stoppar trunkering pga konfliktande låskrav" -#: access/heap/vacuumlazy.c:2665 +#: access/heap/vacuumlazy.c:2679 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "\"%s\": trunkerade %u till %u sidor" -#: access/heap/vacuumlazy.c:2730 +#: access/heap/vacuumlazy.c:2744 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "\"%s\": pausar trunkering pga konfliktande låskrav" -#: access/heap/vacuumlazy.c:3477 -#, c-format -msgid "starting parallel vacuum worker for %s" -msgstr "startar parallell vacuum-arbetsprocess för %s" - -#: access/heap/vacuumlazy.c:3568 +#: access/heap/vacuumlazy.c:3583 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "vid skanning av block %u i relation \"%s.%s\"" -#: access/heap/vacuumlazy.c:3574 +#: access/heap/vacuumlazy.c:3586 +#, c-format +msgid "while scanning relation \"%s.%s\"" +msgstr "vid skanning av relation \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3592 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "vid vacuum av block %u i relation \"%s.%s\"" -#: access/heap/vacuumlazy.c:3579 +#: access/heap/vacuumlazy.c:3595 +#, c-format +msgid "while vacuuming relation \"%s.%s\"" +msgstr "vid vacuum av relation \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3600 #, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" msgstr "vid vaccum av index \"%s\" i relation \"%s.%s\"" -#: access/heap/vacuumlazy.c:3584 +#: access/heap/vacuumlazy.c:3605 #, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" msgstr "vid uppstädning av index \"%s\" i relation \"%s.%s\"" -#: access/heap/vacuumlazy.c:3590 +#: access/heap/vacuumlazy.c:3611 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "vid trunkering av relation \"%s.%s\" till %u block" -#: access/index/amapi.c:83 commands/amcmds.c:167 +#: access/index/amapi.c:83 commands/amcmds.c:170 #, c-format msgid "access method \"%s\" is not of type %s" msgstr "accessmetod \"%s\" har inte typ %s" @@ -1340,8 +1315,8 @@ msgid "index access method \"%s\" does not have a handler" msgstr "indexaccessmetod \"%s\" har ingen hanterare" #: access/index/indexam.c:142 catalog/objectaddress.c:1260 -#: commands/indexcmds.c:2517 commands/tablecmds.c:254 commands/tablecmds.c:278 -#: commands/tablecmds.c:15642 commands/tablecmds.c:17097 +#: commands/indexcmds.c:2516 commands/tablecmds.c:254 commands/tablecmds.c:278 +#: commands/tablecmds.c:15733 commands/tablecmds.c:17188 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\" är inte ett index" @@ -1351,58 +1326,53 @@ msgstr "\"%s\" är inte ett index" msgid "operator class %s has no options" msgstr "operatorklass %s har inga flaggor" -#: access/nbtree/nbtinsert.c:650 +#: access/nbtree/nbtinsert.c:651 #, c-format msgid "duplicate key value violates unique constraint \"%s\"" msgstr "duplicerat nyckelvärde bryter mot unik-villkor \"%s\"" -#: access/nbtree/nbtinsert.c:652 +#: access/nbtree/nbtinsert.c:653 #, c-format msgid "Key %s already exists." msgstr "Nyckeln %s existerar redan." -#: access/nbtree/nbtinsert.c:744 -#, c-format -msgid "failed to re-find tuple within index \"%s\"" -msgstr "misslyckades att återfinna tuple i index \"%s\"" - -#: access/nbtree/nbtinsert.c:746 +#: access/nbtree/nbtinsert.c:747 #, c-format msgid "This may be because of a non-immutable index expression." msgstr "Det kan bero på ett icke-immutable indexuttryck." -#: access/nbtree/nbtpage.c:147 access/nbtree/nbtpage.c:535 -#: parser/parse_utilcmd.c:2156 +#: access/nbtree/nbtpage.c:150 access/nbtree/nbtpage.c:538 +#: parser/parse_utilcmd.c:2244 #, c-format msgid "index \"%s\" is not a btree" msgstr "index \"%s\" är inte ett btree" -#: access/nbtree/nbtpage.c:154 access/nbtree/nbtpage.c:542 +#: access/nbtree/nbtpage.c:157 access/nbtree/nbtpage.c:545 #, c-format msgid "version mismatch in index \"%s\": file version %d, current version %d, minimal supported version %d" msgstr "versionsfel i index \"%s\": filversion %d, aktuell version %d, minsta supportade version %d" -#: access/nbtree/nbtpage.c:1610 +#: access/nbtree/nbtpage.c:1501 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "index \"%s\" innehåller en halvdöd intern sida" -#: access/nbtree/nbtpage.c:1612 +#: access/nbtree/nbtpage.c:1503 #, c-format msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "Detta kan ha orsakats av en avbruten VACUUM i version 9.3 eller äldre, innan uppdatering. Vänligen REINDEX:era det." -#: access/nbtree/nbtutils.c:2656 +#: access/nbtree/nbtutils.c:2664 #, c-format msgid "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" msgstr "indexradstorlek %zu överstiger btree version %u maximum %zu för index \"%s\"" -#: access/nbtree/nbtutils.c:2662 +#: access/nbtree/nbtutils.c:2670 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "Indexrad refererar tupel (%u,%u) i relation \"%s\"." -#: access/nbtree/nbtutils.c:2666 +#: access/nbtree/nbtutils.c:2674 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1439,12 +1409,12 @@ msgid "\"%s\" is an index" msgstr "\"%s\" är ett index" #: access/table/table.c:54 access/table/table.c:83 access/table/table.c:116 -#: catalog/aclchk.c:1813 commands/tablecmds.c:12463 commands/tablecmds.c:15651 +#: catalog/aclchk.c:1813 commands/tablecmds.c:12554 commands/tablecmds.c:15742 #, c-format msgid "\"%s\" is a composite type" msgstr "\"%s\" är en composite-typ" -#: access/table/tableam.c:240 +#: access/table/tableam.c:244 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "tid (%u, %u) är inte giltigt för relation \"%s\"" @@ -1454,7 +1424,7 @@ msgstr "tid (%u, %u) är inte giltigt för relation \"%s\"" msgid "%s cannot be empty." msgstr "%s får inte vara tom." -#: access/table/tableamapi.c:122 utils/misc/guc.c:11938 +#: access/table/tableamapi.c:122 utils/misc/guc.c:11956 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s är för lång (maximalt %d tecken)." @@ -1652,65 +1622,65 @@ msgstr "kunde inte skapa dynamiskt delat minnessegment: %m" msgid "invalid magic number in dynamic shared memory segment" msgstr "ogiltigt magiskt nummer i dynamiskt delat minnessegment" -#: access/transam/slru.c:691 +#: access/transam/slru.c:696 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "filen \"%s\" existerar inte, läses som nollor" -#: access/transam/slru.c:932 access/transam/slru.c:938 -#: access/transam/slru.c:946 access/transam/slru.c:951 -#: access/transam/slru.c:958 access/transam/slru.c:963 -#: access/transam/slru.c:970 access/transam/slru.c:977 +#: access/transam/slru.c:937 access/transam/slru.c:943 +#: access/transam/slru.c:951 access/transam/slru.c:956 +#: access/transam/slru.c:963 access/transam/slru.c:968 +#: access/transam/slru.c:975 access/transam/slru.c:982 #, c-format msgid "could not access status of transaction %u" msgstr "kunde inte läsa status på transaktion %u" -#: access/transam/slru.c:933 +#: access/transam/slru.c:938 #, c-format msgid "Could not open file \"%s\": %m." msgstr "Kunde inte öppna fil \"%s\": %m." -#: access/transam/slru.c:939 +#: access/transam/slru.c:944 #, c-format msgid "Could not seek in file \"%s\" to offset %u: %m." msgstr "Kunde inte söka i fil \"%s\" till offset %u: %m." -#: access/transam/slru.c:947 +#: access/transam/slru.c:952 #, c-format msgid "Could not read from file \"%s\" at offset %u: %m." msgstr "Kunde inte läsa från fil \"%s\" på offset %u: %m." -#: access/transam/slru.c:952 +#: access/transam/slru.c:957 #, c-format msgid "Could not read from file \"%s\" at offset %u: read too few bytes." msgstr "Kunde inte läsa från fil \"%s\" på offset %u: läste för få bytes." -#: access/transam/slru.c:959 +#: access/transam/slru.c:964 #, c-format msgid "Could not write to file \"%s\" at offset %u: %m." msgstr "Kunde inte skriva till fil \"%s\" på offset %u: %m." -#: access/transam/slru.c:964 +#: access/transam/slru.c:969 #, c-format msgid "Could not write to file \"%s\" at offset %u: wrote too few bytes." msgstr "Kunde inte skriva till fil \"%s\" på offset %u: skrev för få bytes." -#: access/transam/slru.c:971 +#: access/transam/slru.c:976 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "Kunde inte fsync:a fil \"%s\": %m." -#: access/transam/slru.c:978 +#: access/transam/slru.c:983 #, c-format msgid "Could not close file \"%s\": %m." msgstr "Kunde inte stänga fil \"%s\": %m." -#: access/transam/slru.c:1241 +#: access/transam/slru.c:1258 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "Kunde inte trunkera katalog \"%s\": trolig wraparound" -#: access/transam/slru.c:1296 access/transam/slru.c:1352 +#: access/transam/slru.c:1313 access/transam/slru.c:1369 #, c-format msgid "removing file \"%s\"" msgstr "tar bort fil \"%s\"" @@ -1847,7 +1817,7 @@ msgstr "felaktig storlek lagrad i fil \"%s\"" msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "beräknad CRC-checksumma matchar inte värdet som är lagrat i filen \"%s\"" -#: access/transam/twophase.c:1342 access/transam/xlog.c:6491 +#: access/transam/twophase.c:1342 access/transam/xlog.c:6494 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Millslyckades vid allokering av en WAL-läs-processor." @@ -2057,432 +2027,432 @@ msgstr "kan inte commit:a subtransaktioner undert en parallell operation" msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "kan inte ha mer än 2^32-1 subtransaktioner i en transaktion" -#: access/transam/xlog.c:2552 +#: access/transam/xlog.c:2554 #, c-format msgid "could not write to log file %s at offset %u, length %zu: %m" msgstr "kunde inte skriva till loggfil %s vid offset %u, längd %zu: %m" -#: access/transam/xlog.c:2828 +#: access/transam/xlog.c:2830 #, c-format msgid "updated min recovery point to %X/%X on timeline %u" msgstr "updaterade minsta återställningspunkt till %X/%X på tidslinje %u" -#: access/transam/xlog.c:3942 access/transam/xlogutils.c:803 -#: replication/walsender.c:2510 +#: access/transam/xlog.c:3944 access/transam/xlogutils.c:802 +#: replication/walsender.c:2511 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "efterfrågat WAL-segment %s har redan tagits bort" -#: access/transam/xlog.c:4185 +#: access/transam/xlog.c:4187 #, c-format msgid "recycled write-ahead log file \"%s\"" msgstr "återanvände write-ahead-loggfil \"%s\"" -#: access/transam/xlog.c:4197 +#: access/transam/xlog.c:4199 #, c-format msgid "removing write-ahead log file \"%s\"" msgstr "tar bort write-ahead-loggfil \"%s\"" -#: access/transam/xlog.c:4217 +#: access/transam/xlog.c:4219 #, c-format msgid "could not rename file \"%s\": %m" msgstr "kunde inte byta namn på fil \"%s\": %m" -#: access/transam/xlog.c:4259 access/transam/xlog.c:4269 +#: access/transam/xlog.c:4261 access/transam/xlog.c:4271 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "krävd WAL-katalog \"%s\" finns inte" -#: access/transam/xlog.c:4275 +#: access/transam/xlog.c:4277 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "skapar saknad WAL-katalog \"%s\"" -#: access/transam/xlog.c:4278 +#: access/transam/xlog.c:4280 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "kunde inte skapa saknad katalog \"%s\": %m" -#: access/transam/xlog.c:4381 +#: access/transam/xlog.c:4383 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "oväntad tidslinje-ID %u i loggsegment %s, offset %u" -#: access/transam/xlog.c:4519 +#: access/transam/xlog.c:4521 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "ny tidslinje %u är inte ett barn till databasens systemtidslinje %u" -#: access/transam/xlog.c:4533 +#: access/transam/xlog.c:4535 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "ny tidslinje %u skapad från aktuella databasens systemtidslinje %u innan nuvarande återställningspunkt %X/%X" -#: access/transam/xlog.c:4552 +#: access/transam/xlog.c:4554 #, c-format msgid "new target timeline is %u" msgstr "ny måltidslinje är %u" -#: access/transam/xlog.c:4588 +#: access/transam/xlog.c:4590 #, c-format msgid "could not generate secret authorization token" msgstr "kunde inte generera hemligt auktorisationstoken" -#: access/transam/xlog.c:4747 access/transam/xlog.c:4756 -#: access/transam/xlog.c:4780 access/transam/xlog.c:4787 -#: access/transam/xlog.c:4794 access/transam/xlog.c:4799 -#: access/transam/xlog.c:4806 access/transam/xlog.c:4813 -#: access/transam/xlog.c:4820 access/transam/xlog.c:4827 -#: access/transam/xlog.c:4834 access/transam/xlog.c:4841 -#: access/transam/xlog.c:4850 access/transam/xlog.c:4857 +#: access/transam/xlog.c:4749 access/transam/xlog.c:4758 +#: access/transam/xlog.c:4782 access/transam/xlog.c:4789 +#: access/transam/xlog.c:4796 access/transam/xlog.c:4801 +#: access/transam/xlog.c:4808 access/transam/xlog.c:4815 +#: access/transam/xlog.c:4822 access/transam/xlog.c:4829 +#: access/transam/xlog.c:4836 access/transam/xlog.c:4843 +#: access/transam/xlog.c:4852 access/transam/xlog.c:4859 #: utils/init/miscinit.c:1548 #, c-format msgid "database files are incompatible with server" msgstr "databasfilerna är inkompatibla med servern" -#: access/transam/xlog.c:4748 +#: access/transam/xlog.c:4750 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), but the server was compiled with PG_CONTROL_VERSION %d (0x%08x)." msgstr "Databasklustret initierades med PG_CONTROL_VERSION %d (0x%08x), men servern kompilerades med PG_CONTROL_VERSION %d (0x%08x)." -#: access/transam/xlog.c:4752 +#: access/transam/xlog.c:4754 #, c-format msgid "This could be a problem of mismatched byte ordering. It looks like you need to initdb." msgstr "Detta kan orsakas av en felaktig byte-ordning. Du behöver troligen köra initdb." -#: access/transam/xlog.c:4757 +#: access/transam/xlog.c:4759 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d, but the server was compiled with PG_CONTROL_VERSION %d." msgstr "Databasklustret initierades med PG_CONTROL_VERSION %d, men servern kompilerades med PG_CONTROL_VERSION %d." -#: access/transam/xlog.c:4760 access/transam/xlog.c:4784 -#: access/transam/xlog.c:4791 access/transam/xlog.c:4796 +#: access/transam/xlog.c:4762 access/transam/xlog.c:4786 +#: access/transam/xlog.c:4793 access/transam/xlog.c:4798 #, c-format msgid "It looks like you need to initdb." msgstr "Du behöver troligen köra initdb." -#: access/transam/xlog.c:4771 +#: access/transam/xlog.c:4773 #, c-format msgid "incorrect checksum in control file" msgstr "ogiltig kontrollsumma kontrollfil" -#: access/transam/xlog.c:4781 +#: access/transam/xlog.c:4783 #, c-format msgid "The database cluster was initialized with CATALOG_VERSION_NO %d, but the server was compiled with CATALOG_VERSION_NO %d." msgstr "Databasklustret initierades med CATALOG_VERSION_NO %d, men servern kompilerades med CATALOG_VERSION_NO %d." -#: access/transam/xlog.c:4788 +#: access/transam/xlog.c:4790 #, c-format msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." msgstr "Databasklustret initierades med MAXALIGN %d, men servern kompilerades med MAXALIGN %d." -#: access/transam/xlog.c:4795 +#: access/transam/xlog.c:4797 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "Databasklustret verkar använda en annan flyttalsrepresentation än vad serverprogrammet gör." -#: access/transam/xlog.c:4800 +#: access/transam/xlog.c:4802 #, c-format msgid "The database cluster was initialized with BLCKSZ %d, but the server was compiled with BLCKSZ %d." msgstr "Databasklustret initierades med BLCKSZ %d, men servern kompilerades med BLCKSZ %d." -#: access/transam/xlog.c:4803 access/transam/xlog.c:4810 -#: access/transam/xlog.c:4817 access/transam/xlog.c:4824 -#: access/transam/xlog.c:4831 access/transam/xlog.c:4838 -#: access/transam/xlog.c:4845 access/transam/xlog.c:4853 -#: access/transam/xlog.c:4860 +#: access/transam/xlog.c:4805 access/transam/xlog.c:4812 +#: access/transam/xlog.c:4819 access/transam/xlog.c:4826 +#: access/transam/xlog.c:4833 access/transam/xlog.c:4840 +#: access/transam/xlog.c:4847 access/transam/xlog.c:4855 +#: access/transam/xlog.c:4862 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Det verkar som om du måste kompilera om eller köra initdb." -#: access/transam/xlog.c:4807 +#: access/transam/xlog.c:4809 #, c-format msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." msgstr "Databasklustret initierades med RELSEG_SIZE %d, men servern kompilerades med RELSEG_SIZE %d." -#: access/transam/xlog.c:4814 +#: access/transam/xlog.c:4816 #, c-format msgid "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was compiled with XLOG_BLCKSZ %d." msgstr "Databasklustret initierades med XLOG_BLCKSZ %d, men servern kompilerades med XLOG_BLCKSZ %d." -#: access/transam/xlog.c:4821 +#: access/transam/xlog.c:4823 #, c-format msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." msgstr "Databasklustret initierades med NAMEDATALEN %d, men servern kompilerades med NAMEDATALEN %d." -#: access/transam/xlog.c:4828 +#: access/transam/xlog.c:4830 #, c-format msgid "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server was compiled with INDEX_MAX_KEYS %d." msgstr "Databasklustret initierades med INDEX_MAX_KEYS %d, men servern kompilerades med INDEX_MAX_KEYS %d." -#: access/transam/xlog.c:4835 +#: access/transam/xlog.c:4837 #, c-format msgid "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the server was compiled with TOAST_MAX_CHUNK_SIZE %d." msgstr "Databasklustret initierades med TOAST_MAX_CHUNK_SIZE %d, men servern kompilerades med TOAST_MAX_CHUNK_SIZE %d." -#: access/transam/xlog.c:4842 +#: access/transam/xlog.c:4844 #, c-format msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." msgstr "Databasklustret initierades med LOBLKSIZE %d, men servern kompilerades med LOBLKSIZE %d." -#: access/transam/xlog.c:4851 +#: access/transam/xlog.c:4853 #, c-format msgid "The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL." msgstr "Databasklustret initierades utan USE_FLOAT8_BYVAL, men servern kompilerades med USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4858 +#: access/transam/xlog.c:4860 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "Databasklustret initierades med USE_FLOAT8_BYVAL, men servern kompilerades utan USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4867 +#: access/transam/xlog.c:4869 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men kontrollfilen anger %d byte" msgstr[1] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men kontrollfilen anger %d byte" -#: access/transam/xlog.c:4879 +#: access/transam/xlog.c:4881 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "\"min_wal_size\" måste vara minst dubbla \"wal_segment_size\"" -#: access/transam/xlog.c:4883 +#: access/transam/xlog.c:4885 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "\"max_wal_size\" måste vara minst dubbla \"wal_segment_size\"" -#: access/transam/xlog.c:5319 +#: access/transam/xlog.c:5318 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "kunde inte skriva bootstrap-write-ahead-loggfil: %m" -#: access/transam/xlog.c:5327 +#: access/transam/xlog.c:5326 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "kunde inte fsync:a bootstrap-write-ahead-loggfil: %m" -#: access/transam/xlog.c:5333 +#: access/transam/xlog.c:5332 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "kunde inte stänga bootstrap-write-ahead-loggfil: %m" -#: access/transam/xlog.c:5394 +#: access/transam/xlog.c:5393 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "använda återställningskommandofil \"%s\" stöds inte" -#: access/transam/xlog.c:5459 +#: access/transam/xlog.c:5458 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "standby-läge stöd inte av enanvändarservrar" -#: access/transam/xlog.c:5476 +#: access/transam/xlog.c:5475 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "angav varken primary_conninfo eller restore_command" -#: access/transam/xlog.c:5477 +#: access/transam/xlog.c:5476 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "Databasservern kommer med jämna mellanrum att poll:a pg_wal-underkatalogen för att se om filer placerats där." -#: access/transam/xlog.c:5485 +#: access/transam/xlog.c:5484 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "måste ange restore_command när standby-läge inte är påslaget" -#: access/transam/xlog.c:5523 +#: access/transam/xlog.c:5522 #, c-format msgid "recovery target timeline %u does not exist" msgstr "återställningsmåltidslinje %u finns inte" -#: access/transam/xlog.c:5645 +#: access/transam/xlog.c:5644 #, c-format msgid "archive recovery complete" msgstr "arkivåterställning klar" -#: access/transam/xlog.c:5711 access/transam/xlog.c:5984 +#: access/transam/xlog.c:5710 access/transam/xlog.c:5983 #, c-format msgid "recovery stopping after reaching consistency" msgstr "återställning stoppad efter att ha uppnått konsistens" -#: access/transam/xlog.c:5732 +#: access/transam/xlog.c:5731 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "återställning stoppad före WAL-position (LSN) \"%X/%X\"" -#: access/transam/xlog.c:5818 +#: access/transam/xlog.c:5817 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "återställning stoppad före commit av transaktion %u, tid %s" -#: access/transam/xlog.c:5825 +#: access/transam/xlog.c:5824 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "återställning stoppad före abort av transaktion %u, tid %s" -#: access/transam/xlog.c:5878 +#: access/transam/xlog.c:5877 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "återställning stoppad vid återställningspunkt \"%s\", tid %s" -#: access/transam/xlog.c:5896 +#: access/transam/xlog.c:5895 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "återställning stoppad efter WAL-position (LSN) \"%X/%X\"" -#: access/transam/xlog.c:5964 +#: access/transam/xlog.c:5963 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "återställning stoppad efter commit av transaktion %u, tid %s" -#: access/transam/xlog.c:5972 +#: access/transam/xlog.c:5971 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "återställning stoppad efter abort av transaktion %u, tid %s" -#: access/transam/xlog.c:6021 +#: access/transam/xlog.c:6020 #, c-format msgid "pausing at the end of recovery" msgstr "pausar vid slutet av återställning" -#: access/transam/xlog.c:6022 +#: access/transam/xlog.c:6021 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Kör pg_wal_replay_resume() för att befordra." -#: access/transam/xlog.c:6025 +#: access/transam/xlog.c:6024 #, c-format msgid "recovery has paused" msgstr "återställning har pausats" -#: access/transam/xlog.c:6026 +#: access/transam/xlog.c:6025 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Kör pg_wal_replay_resume() för att fortsätta." -#: access/transam/xlog.c:6243 +#: access/transam/xlog.c:6242 #, c-format msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" msgstr "hot standby är inte möjligt då %s = %d har ett lägre värde än på masterservern (dess värde var %d)" -#: access/transam/xlog.c:6267 +#: access/transam/xlog.c:6266 #, c-format msgid "WAL was generated with wal_level=minimal, data may be missing" msgstr "WAL genererades med wal_level=minimal, data kan saknas" -#: access/transam/xlog.c:6268 +#: access/transam/xlog.c:6267 #, c-format msgid "This happens if you temporarily set wal_level=minimal without taking a new base backup." msgstr "Detta händer om du temporärt sätter wal_level=minimal utan att ta en ny basbackup." -#: access/transam/xlog.c:6279 +#: access/transam/xlog.c:6278 #, c-format msgid "hot standby is not possible because wal_level was not set to \"replica\" or higher on the master server" msgstr "hot standby är inte möjligt då wal_level inte satts till \"replica\" eller högre på masterservern" -#: access/transam/xlog.c:6280 +#: access/transam/xlog.c:6279 #, c-format msgid "Either set wal_level to \"replica\" on the master, or turn off hot_standby here." msgstr "Antingen sätt wal_level till \"replica\" på mastern eller stäng av hot_standby här." -#: access/transam/xlog.c:6342 +#: access/transam/xlog.c:6341 #, c-format msgid "control file contains invalid checkpoint location" msgstr "kontrollfil innehåller ogiltig checkpoint-position" -#: access/transam/xlog.c:6349 +#: access/transam/xlog.c:6352 #, c-format msgid "database system was shut down at %s" msgstr "databassystemet stängdes ner vid %s" -#: access/transam/xlog.c:6355 +#: access/transam/xlog.c:6358 #, c-format msgid "database system was shut down in recovery at %s" msgstr "databassystemet stängdes ner under återställning vid %s" -#: access/transam/xlog.c:6361 +#: access/transam/xlog.c:6364 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "nedstängning av databasen avbröts; senast kända upptidpunkt vid %s" -#: access/transam/xlog.c:6367 +#: access/transam/xlog.c:6370 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "databassystemet avbröts under återställning vid %s" -#: access/transam/xlog.c:6369 +#: access/transam/xlog.c:6372 #, c-format msgid "This probably means that some data is corrupted and you will have to use the last backup for recovery." msgstr "Det betyder troligen att en del data är förstörd och du behöver återställa databasen från den senaste backup:en." -#: access/transam/xlog.c:6375 +#: access/transam/xlog.c:6378 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "databassystemet avbröts under återställning vid loggtid %s" -#: access/transam/xlog.c:6377 +#: access/transam/xlog.c:6380 #, c-format msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." msgstr "Om detta har hänt mer än en gång så kan data vara korrupt och du kanske måste återställa till ett tidigare återställningsmål." -#: access/transam/xlog.c:6383 +#: access/transam/xlog.c:6386 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "databassystemet avbröts; senast kända upptidpunkt vid %s" -#: access/transam/xlog.c:6389 +#: access/transam/xlog.c:6392 #, c-format msgid "control file contains invalid database cluster state" msgstr "kontrollfil innehåller ogiltigt databasklustertillstånd" -#: access/transam/xlog.c:6446 +#: access/transam/xlog.c:6449 #, c-format msgid "entering standby mode" msgstr "går in i standby-läge" -#: access/transam/xlog.c:6449 +#: access/transam/xlog.c:6452 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "startar point-in-time-återställning till XID %u" -#: access/transam/xlog.c:6453 +#: access/transam/xlog.c:6456 #, c-format msgid "starting point-in-time recovery to %s" msgstr "startar point-in-time-återställning till %s" -#: access/transam/xlog.c:6457 +#: access/transam/xlog.c:6460 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "startar point-in-time-återställning till \"%s\"" -#: access/transam/xlog.c:6461 +#: access/transam/xlog.c:6464 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "startar point-in-time-återställning till WAL-position (LSN) \"%X/%X\"" -#: access/transam/xlog.c:6466 +#: access/transam/xlog.c:6469 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "startar point-in-time-återställning till tidigast konsistenta punkt" -#: access/transam/xlog.c:6469 +#: access/transam/xlog.c:6472 #, c-format msgid "starting archive recovery" msgstr "Startar arkivåterställning" -#: access/transam/xlog.c:6528 access/transam/xlog.c:6661 +#: access/transam/xlog.c:6531 access/transam/xlog.c:6664 #, c-format msgid "checkpoint record is at %X/%X" msgstr "checkpoint-posten är vid %X/%X" -#: access/transam/xlog.c:6543 +#: access/transam/xlog.c:6546 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "kunde inte hitta redo-position refererad av checkpoint-post" -#: access/transam/xlog.c:6544 access/transam/xlog.c:6554 +#: access/transam/xlog.c:6547 access/transam/xlog.c:6557 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2494,278 +2464,278 @@ msgstr "" "bort filen \"%s/backup_label\". Var försiktig: borttagning av \"%s/backup_label\"\n" "kommer resultera i ett trasigt kluster om du återställer från en backup." -#: access/transam/xlog.c:6553 +#: access/transam/xlog.c:6556 #, c-format msgid "could not locate required checkpoint record" msgstr "kunde inte hitta den checkpoint-post som krävs" -#: access/transam/xlog.c:6582 commands/tablespace.c:654 +#: access/transam/xlog.c:6585 commands/tablespace.c:654 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "kan inte skapa symbolisk länk \"%s\": %m" -#: access/transam/xlog.c:6614 access/transam/xlog.c:6620 +#: access/transam/xlog.c:6617 access/transam/xlog.c:6623 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "hoppar över fil \"%s\" då ingen fil \"%s\" finns" -#: access/transam/xlog.c:6616 access/transam/xlog.c:11804 +#: access/transam/xlog.c:6619 access/transam/xlog.c:11828 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Filen \"%s\" döptes om till \"%s\"." -#: access/transam/xlog.c:6622 +#: access/transam/xlog.c:6625 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "Kunde inte döpa om fil \"%s\" till \"%s\": %m" -#: access/transam/xlog.c:6673 +#: access/transam/xlog.c:6676 #, c-format msgid "could not locate a valid checkpoint record" msgstr "kunde inte hitta en giltig checkpoint-post" -#: access/transam/xlog.c:6711 +#: access/transam/xlog.c:6714 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "efterfrågad tidslinje %u är inte ett barn till denna servers historik" -#: access/transam/xlog.c:6713 +#: access/transam/xlog.c:6716 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "Senaste checkpoint är vid %X/%X på tidslinje %u, men i historiken för efterfrågad tidslinje så avvek servern från den tidslinjen vid %X/%X." -#: access/transam/xlog.c:6729 +#: access/transam/xlog.c:6732 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "efterfågan tidslinje %u innehåller inte minimal återställningspunkt %X/%X på tidslinje %u" -#: access/transam/xlog.c:6760 +#: access/transam/xlog.c:6763 #, c-format msgid "invalid next transaction ID" msgstr "nästa transaktions-ID ogiltig" -#: access/transam/xlog.c:6854 +#: access/transam/xlog.c:6857 #, c-format msgid "invalid redo in checkpoint record" msgstr "ogiltig redo i checkpoint-post" -#: access/transam/xlog.c:6865 +#: access/transam/xlog.c:6868 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "ogiltig redo-post i nedstängnings-checkpoint" -#: access/transam/xlog.c:6899 +#: access/transam/xlog.c:6902 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "databassystemet stängdes inte ned korrekt; automatisk återställning pågår" -#: access/transam/xlog.c:6903 +#: access/transam/xlog.c:6906 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "krashåterställning startar i tidslinje %u och har måltidslinje %u" -#: access/transam/xlog.c:6950 +#: access/transam/xlog.c:6953 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label innehåller data som inte stämmer med kontrollfil" -#: access/transam/xlog.c:6951 +#: access/transam/xlog.c:6954 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "Det betyder att backup:en är trasig och du behöver använda en annan backup för att återställa." -#: access/transam/xlog.c:7042 +#: access/transam/xlog.c:7045 #, c-format msgid "initializing for hot standby" msgstr "initierar för hot standby" -#: access/transam/xlog.c:7175 +#: access/transam/xlog.c:7178 #, c-format msgid "redo starts at %X/%X" msgstr "redo startar vid %X/%X" -#: access/transam/xlog.c:7399 +#: access/transam/xlog.c:7402 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "efterfrågad återställningsstoppunkt är före en konsistent återställningspunkt" -#: access/transam/xlog.c:7437 +#: access/transam/xlog.c:7440 #, c-format msgid "redo done at %X/%X" msgstr "redo gjord vid %X/%X" -#: access/transam/xlog.c:7442 +#: access/transam/xlog.c:7445 #, c-format msgid "last completed transaction was at log time %s" msgstr "senaste kompletta transaktionen var vid loggtid %s" -#: access/transam/xlog.c:7451 +#: access/transam/xlog.c:7454 #, c-format msgid "redo is not required" msgstr "redo behövs inte" -#: access/transam/xlog.c:7463 +#: access/transam/xlog.c:7466 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "återställning avslutades innan det konfigurerade återställningsmålet nåddes" -#: access/transam/xlog.c:7542 access/transam/xlog.c:7546 +#: access/transam/xlog.c:7545 access/transam/xlog.c:7549 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL slutar före sluttiden av online-backup:en" -#: access/transam/xlog.c:7543 +#: access/transam/xlog.c:7546 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Alla genererade WAL under tiden online-backup:en togs måste vara tillgängliga vid återställning." -#: access/transam/xlog.c:7547 +#: access/transam/xlog.c:7550 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "Online-backup startad med pg_start_backup() måste avslutas med pg_stop_backup() och alla WAL fram till den punkten måste vara tillgängliga vid återställning." -#: access/transam/xlog.c:7550 +#: access/transam/xlog.c:7553 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL avslutas innan konstistent återställningspunkt" -#: access/transam/xlog.c:7585 +#: access/transam/xlog.c:7588 #, c-format msgid "selected new timeline ID: %u" msgstr "valt nytt tidslinje-ID: %u" -#: access/transam/xlog.c:8033 +#: access/transam/xlog.c:8036 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "konsistent återställningstillstånd uppnått vid %X/%X" -#: access/transam/xlog.c:8243 +#: access/transam/xlog.c:8246 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "ogiltig primär checkpoint-länk i kontrollfil" -#: access/transam/xlog.c:8247 +#: access/transam/xlog.c:8250 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "ogiltig checkpoint-länk i \"backup_label\"-fil" -#: access/transam/xlog.c:8265 +#: access/transam/xlog.c:8268 #, c-format msgid "invalid primary checkpoint record" msgstr "ogiltig primär checkpoint-post" -#: access/transam/xlog.c:8269 +#: access/transam/xlog.c:8272 #, c-format msgid "invalid checkpoint record" msgstr "ogiltig checkpoint-post" -#: access/transam/xlog.c:8280 +#: access/transam/xlog.c:8283 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "ogiltig resurshanterar-ID i primär checkpoint-post" -#: access/transam/xlog.c:8284 +#: access/transam/xlog.c:8287 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "ogiltig resurshanterar-ID i checkpoint-post" -#: access/transam/xlog.c:8297 +#: access/transam/xlog.c:8300 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "ogiltig xl_info i primär checkpoint-post" -#: access/transam/xlog.c:8301 +#: access/transam/xlog.c:8304 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "ogiltig xl_info i checkpoint-post" -#: access/transam/xlog.c:8312 +#: access/transam/xlog.c:8315 #, c-format msgid "invalid length of primary checkpoint record" msgstr "ogiltig längd i primär checkpoint-post" -#: access/transam/xlog.c:8316 +#: access/transam/xlog.c:8319 #, c-format msgid "invalid length of checkpoint record" msgstr "ogiltig längd på checkpoint-post" -#: access/transam/xlog.c:8496 +#: access/transam/xlog.c:8499 #, c-format msgid "shutting down" msgstr "stänger ner" -#: access/transam/xlog.c:8816 +#: access/transam/xlog.c:8819 #, c-format msgid "checkpoint skipped because system is idle" msgstr "checkpoint överhoppad på grund av att systemet är olastat" -#: access/transam/xlog.c:9016 +#: access/transam/xlog.c:9019 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "samtidig write-ahead-logg-aktivitet när databassystemet stängs ner" -#: access/transam/xlog.c:9273 +#: access/transam/xlog.c:9276 #, c-format msgid "skipping restartpoint, recovery has already ended" msgstr "hoppar över omstartpunkt, återställning har redan avslutats" -#: access/transam/xlog.c:9296 +#: access/transam/xlog.c:9299 #, c-format msgid "skipping restartpoint, already performed at %X/%X" msgstr "hoppar över omstartpunkt, redan gjorde vid %X/%X" -#: access/transam/xlog.c:9464 +#: access/transam/xlog.c:9467 #, c-format msgid "recovery restart point at %X/%X" msgstr "återställningens omstartspunkt vid %X/%X" -#: access/transam/xlog.c:9466 +#: access/transam/xlog.c:9469 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Senaste kompletta transaktionen var vid loggtid %s" -#: access/transam/xlog.c:9695 +#: access/transam/xlog.c:9711 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "återställningspunkt \"%s\" skapad vid %X/%X" -#: access/transam/xlog.c:9836 +#: access/transam/xlog.c:9856 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "oväntad föregående tidslinje-ID %u (nuvarande tidslinje-ID %u) i checkpoint-post" -#: access/transam/xlog.c:9845 +#: access/transam/xlog.c:9865 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "oväntad tidslinje-ID %u (efter %u) i checkpoint-post" -#: access/transam/xlog.c:9861 +#: access/transam/xlog.c:9881 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "oväntad tidslinje-ID %u i checkpoint-post, innan vi nått minimal återställningspunkt %X/%X på tidslinje %u" -#: access/transam/xlog.c:9937 +#: access/transam/xlog.c:9957 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "online-backup avbröts, återställning kan inte fortsätta" -#: access/transam/xlog.c:9991 access/transam/xlog.c:10045 -#: access/transam/xlog.c:10068 +#: access/transam/xlog.c:10013 access/transam/xlog.c:10069 +#: access/transam/xlog.c:10092 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "oväntad tidslinje-ID %u (skall vara %u) i checkpoint-post" -#: access/transam/xlog.c:10394 +#: access/transam/xlog.c:10418 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "kunde inte fsync:a skriv-igenom-loggfil \"%s\": %m" -#: access/transam/xlog.c:10400 +#: access/transam/xlog.c:10424 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "kunde inte fdatasync:a fil \"%s\": %m" -#: access/transam/xlog.c:10499 access/transam/xlog.c:11037 +#: access/transam/xlog.c:10523 access/transam/xlog.c:11061 #: access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 #: access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 #: access/transam/xlogfuncs.c:383 @@ -2773,201 +2743,201 @@ msgstr "kunde inte fdatasync:a fil \"%s\": %m" msgid "WAL control functions cannot be executed during recovery." msgstr "WAL-kontrollfunktioner kan inte köras under återställning." -#: access/transam/xlog.c:10508 access/transam/xlog.c:11046 +#: access/transam/xlog.c:10532 access/transam/xlog.c:11070 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "WAL-nivå inte tillräcklig för att kunna skapa en online-backup" -#: access/transam/xlog.c:10509 access/transam/xlog.c:11047 +#: access/transam/xlog.c:10533 access/transam/xlog.c:11071 #: access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "wal_level måste vara satt till \"replica\" eller \"logical\" vid serverstart." -#: access/transam/xlog.c:10514 +#: access/transam/xlog.c:10538 #, c-format msgid "backup label too long (max %d bytes)" msgstr "backup-etikett för lång (max %d byte)" -#: access/transam/xlog.c:10551 access/transam/xlog.c:10836 -#: access/transam/xlog.c:10874 +#: access/transam/xlog.c:10575 access/transam/xlog.c:10860 +#: access/transam/xlog.c:10898 #, c-format msgid "a backup is already in progress" msgstr "en backup är redan på gång" -#: access/transam/xlog.c:10552 +#: access/transam/xlog.c:10576 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Kör pg_stop_backup() och försök igen." -#: access/transam/xlog.c:10648 +#: access/transam/xlog.c:10672 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "WAL skapad med full_page_writes=off har återspelats sedab senaste omstartpunkten" -#: access/transam/xlog.c:10650 access/transam/xlog.c:11242 +#: access/transam/xlog.c:10674 access/transam/xlog.c:11266 #, c-format msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the master, and then try an online backup again." msgstr "Det betyder att backup:en som tas på standby:en är trasig och inte skall användas. Slå på full_page_writes och kör CHECKPOINT på master och försök sedan ta en ny online-backup igen." -#: access/transam/xlog.c:10733 replication/basebackup.c:1420 -#: utils/adt/misc.c:341 +#: access/transam/xlog.c:10757 replication/basebackup.c:1423 +#: utils/adt/misc.c:342 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "mål för symbolisk länk \"%s\" är för lång" -#: access/transam/xlog.c:10786 commands/tablespace.c:402 -#: commands/tablespace.c:566 replication/basebackup.c:1435 utils/adt/misc.c:349 +#: access/transam/xlog.c:10810 commands/tablespace.c:402 +#: commands/tablespace.c:566 replication/basebackup.c:1438 utils/adt/misc.c:350 #, c-format msgid "tablespaces are not supported on this platform" msgstr "tabellutrymmen stöds inte på denna plattform" -#: access/transam/xlog.c:10837 access/transam/xlog.c:10875 +#: access/transam/xlog.c:10861 access/transam/xlog.c:10899 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "Om du är säker på att det inte pågår någon backup så ta bort filen \"%s\" och försök igen." -#: access/transam/xlog.c:11062 +#: access/transam/xlog.c:11086 #, c-format msgid "exclusive backup not in progress" msgstr "exklusiv backup är inte på gång" -#: access/transam/xlog.c:11089 +#: access/transam/xlog.c:11113 #, c-format msgid "a backup is not in progress" msgstr "ingen backup är på gång" -#: access/transam/xlog.c:11175 access/transam/xlog.c:11188 -#: access/transam/xlog.c:11577 access/transam/xlog.c:11583 -#: access/transam/xlog.c:11631 access/transam/xlog.c:11704 +#: access/transam/xlog.c:11199 access/transam/xlog.c:11212 +#: access/transam/xlog.c:11601 access/transam/xlog.c:11607 +#: access/transam/xlog.c:11655 access/transam/xlog.c:11728 #: access/transam/xlogfuncs.c:692 #, c-format msgid "invalid data in file \"%s\"" msgstr "felaktig data i fil \"%s\"" -#: access/transam/xlog.c:11192 replication/basebackup.c:1268 +#: access/transam/xlog.c:11216 replication/basebackup.c:1271 #, c-format msgid "the standby was promoted during online backup" msgstr "standby:en befordrades under online-backup" -#: access/transam/xlog.c:11193 replication/basebackup.c:1269 +#: access/transam/xlog.c:11217 replication/basebackup.c:1272 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "Det betyder att backupen som tas är trasig och inte skall användas. Försök ta en ny online-backup." -#: access/transam/xlog.c:11240 +#: access/transam/xlog.c:11264 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "WAL skapad med full_page_writes=off återspelades under online-backup" -#: access/transam/xlog.c:11360 +#: access/transam/xlog.c:11384 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "base_backup klar, väntar på att de WAL-segment som krävs blir arkiverade" -#: access/transam/xlog.c:11372 +#: access/transam/xlog.c:11396 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "väntar fortfarande på att alla krävda WAL-segments skall bli arkiverade (%d sekunder har gått)" -#: access/transam/xlog.c:11374 +#: access/transam/xlog.c:11398 #, c-format msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." msgstr "Kontrollera att ditt archive_command kör som det skall. Du kan avbryta denna backup på ett säkert sätt men databasbackup:en kommer inte vara användbart utan att alla WAL-segment finns." -#: access/transam/xlog.c:11381 +#: access/transam/xlog.c:11405 #, c-format msgid "all required WAL segments have been archived" msgstr "alla krävda WAL-segments har arkiverats" -#: access/transam/xlog.c:11385 +#: access/transam/xlog.c:11409 #, c-format msgid "WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup" msgstr "WAL-arkivering är inte påslagen; du måste se till att alla krävda WAL-segment har kopierats på annat sätt för att backup:en skall vara komplett" -#: access/transam/xlog.c:11438 +#: access/transam/xlog.c:11462 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "avbryter backup på grund av att backend:en stoppades innan pg_stop_backup anropades" -#: access/transam/xlog.c:11614 +#: access/transam/xlog.c:11638 #, c-format msgid "backup time %s in file \"%s\"" msgstr "backuptid %s i fil \"%s\"" -#: access/transam/xlog.c:11619 +#: access/transam/xlog.c:11643 #, c-format msgid "backup label %s in file \"%s\"" msgstr "backup-etikett %s i fil \"%s\"" -#: access/transam/xlog.c:11632 +#: access/transam/xlog.c:11656 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "Parsad tidslinje-ID är %u men förväntade sig %u." -#: access/transam/xlog.c:11636 +#: access/transam/xlog.c:11660 #, c-format msgid "backup timeline %u in file \"%s\"" msgstr "backuptidslinje %u i fil \"%s\"" #. translator: %s is a WAL record description -#: access/transam/xlog.c:11744 +#: access/transam/xlog.c:11768 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "WAL-redo vid %X/%X för %s" -#: access/transam/xlog.c:11793 +#: access/transam/xlog.c:11817 #, c-format msgid "online backup mode was not canceled" msgstr "online backupläge har ej avbrutits" -#: access/transam/xlog.c:11794 +#: access/transam/xlog.c:11818 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "Filen \"%s\" kunde inte döpas om till \"%s\": %m." -#: access/transam/xlog.c:11803 access/transam/xlog.c:11815 -#: access/transam/xlog.c:11825 +#: access/transam/xlog.c:11827 access/transam/xlog.c:11839 +#: access/transam/xlog.c:11849 #, c-format msgid "online backup mode canceled" msgstr "online backupläge avbrutet" -#: access/transam/xlog.c:11816 +#: access/transam/xlog.c:11840 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "Filer \"%s\" och \"%s\" döptes om till \"%s\" och \"%s\", var för sig." -#: access/transam/xlog.c:11826 +#: access/transam/xlog.c:11850 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "Filen \"%s\" dötes om till \"%s\", men filen \"%s\" kunde inte döpas om till \"%s\": %m." -#: access/transam/xlog.c:11959 access/transam/xlogutils.c:975 +#: access/transam/xlog.c:11983 access/transam/xlogutils.c:971 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "kunde inte läsa från loggsegment %s, offset %u: %m" -#: access/transam/xlog.c:11965 access/transam/xlogutils.c:982 +#: access/transam/xlog.c:11989 access/transam/xlogutils.c:978 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "kunde inte läsa från loggsegment %s, offset %u, läste %d av %zu" -#: access/transam/xlog.c:12493 +#: access/transam/xlog.c:12518 #, c-format -msgid "wal receiver process shutdown requested" -msgstr "nedstängning av wal-mottagarprocess efterfrågad" +msgid "WAL receiver process shutdown requested" +msgstr "nedstängning av WAL-mottagarprocess efterfrågad" -#: access/transam/xlog.c:12599 +#: access/transam/xlog.c:12624 #, c-format msgid "received promote request" msgstr "tog emot förfrågan om befordring" -#: access/transam/xlog.c:12612 +#: access/transam/xlog.c:12637 #, c-format msgid "promote trigger file found: %s" msgstr "utlösarfil för befordring hittad: %s" -#: access/transam/xlog.c:12621 +#: access/transam/xlog.c:12646 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "kunde inte göra stat() på utlösarfil för befordring \"%s\": %m" @@ -3020,34 +2990,34 @@ msgstr "icke-exklusiv backup är på gång" msgid "Did you mean to use pg_stop_backup('f')?" msgstr "Menade du att använda pg_stop_backup('f')?" -#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1350 -#: commands/event_trigger.c:1902 commands/extension.c:1931 -#: commands/extension.c:2039 commands/extension.c:2324 commands/prepare.c:712 -#: executor/execExpr.c:2203 executor/execSRF.c:728 executor/functions.c:1046 +#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1332 +#: commands/event_trigger.c:1890 commands/extension.c:1944 +#: commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:712 +#: executor/execExpr.c:2203 executor/execSRF.c:728 executor/functions.c:1040 #: foreign/foreign.c:520 libpq/hba.c:2666 replication/logical/launcher.c:1086 -#: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1483 -#: replication/slotfuncs.c:251 replication/walsender.c:3279 -#: storage/ipc/shmem.c:550 utils/adt/datetime.c:4778 utils/adt/genfile.c:469 -#: utils/adt/genfile.c:552 utils/adt/jsonfuncs.c:1792 +#: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1486 +#: replication/slotfuncs.c:252 replication/walsender.c:3266 +#: storage/ipc/shmem.c:550 utils/adt/datetime.c:4765 utils/adt/genfile.c:505 +#: utils/adt/genfile.c:588 utils/adt/jsonfuncs.c:1792 #: utils/adt/jsonfuncs.c:1904 utils/adt/jsonfuncs.c:2092 -#: utils/adt/jsonfuncs.c:2201 utils/adt/jsonfuncs.c:3663 utils/adt/misc.c:214 +#: utils/adt/jsonfuncs.c:2201 utils/adt/jsonfuncs.c:3663 utils/adt/misc.c:215 #: utils/adt/pgstatfuncs.c:476 utils/adt/pgstatfuncs.c:584 -#: utils/adt/pgstatfuncs.c:1713 utils/fmgr/funcapi.c:72 utils/misc/guc.c:9658 +#: utils/adt/pgstatfuncs.c:1719 utils/fmgr/funcapi.c:72 utils/misc/guc.c:9676 #: utils/mmgr/portalmem.c:1136 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "en funktion som returnerar en mängd anropades i kontext som inte godtar en mängd" -#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1354 -#: commands/event_trigger.c:1906 commands/extension.c:1935 -#: commands/extension.c:2043 commands/extension.c:2328 commands/prepare.c:716 +#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1336 +#: commands/event_trigger.c:1894 commands/extension.c:1948 +#: commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:716 #: foreign/foreign.c:525 libpq/hba.c:2670 replication/logical/launcher.c:1090 -#: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1487 -#: replication/slotfuncs.c:255 replication/walsender.c:3283 -#: storage/ipc/shmem.c:554 utils/adt/datetime.c:4782 utils/adt/genfile.c:473 -#: utils/adt/genfile.c:556 utils/adt/misc.c:218 utils/adt/pgstatfuncs.c:480 -#: utils/adt/pgstatfuncs.c:588 utils/adt/pgstatfuncs.c:1717 -#: utils/misc/guc.c:9662 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 +#: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1490 +#: replication/slotfuncs.c:256 replication/walsender.c:3270 +#: storage/ipc/shmem.c:554 utils/adt/datetime.c:4769 utils/adt/genfile.c:509 +#: utils/adt/genfile.c:592 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:480 +#: utils/adt/pgstatfuncs.c:588 utils/adt/pgstatfuncs.c:1723 +#: utils/misc/guc.c:9680 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "materialiserat läge krävs, men stöds inte i detta kontext" @@ -3114,138 +3084,138 @@ msgstr "misslyckades med att sända en signal till postmaster: %m" msgid "server did not promote within %d seconds" msgstr "servern befordrades inte inom %d sekunder" -#: access/transam/xlogreader.c:347 +#: access/transam/xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "ogiltig postoffset vid %X/%X" -#: access/transam/xlogreader.c:355 +#: access/transam/xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "contrecord är begärd vid %X/%X" -#: access/transam/xlogreader.c:396 access/transam/xlogreader.c:693 +#: access/transam/xlogreader.c:398 access/transam/xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "ogiltig postlängd vid %X/%X: förväntade %u, fick %u" -#: access/transam/xlogreader.c:420 +#: access/transam/xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "postlängd %u vid %X/%X är för lång" -#: access/transam/xlogreader.c:452 +#: access/transam/xlogreader.c:454 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "det finns ingen contrecord-flagga vid %X/%X" -#: access/transam/xlogreader.c:465 +#: access/transam/xlogreader.c:467 #, c-format msgid "invalid contrecord length %u at %X/%X" msgstr "ogiltig contrecord-längd %u vid %X/%X" -#: access/transam/xlogreader.c:701 +#: access/transam/xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ogiltigt resurshanterar-ID %u vid %X/%X" -#: access/transam/xlogreader.c:715 access/transam/xlogreader.c:732 +#: access/transam/xlogreader.c:717 access/transam/xlogreader.c:734 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "post med inkorrekt prev-link %X/%X vid %X/%X" -#: access/transam/xlogreader.c:769 +#: access/transam/xlogreader.c:771 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "felaktig resurshanterardatakontrollsumma i post vid %X/%X" -#: access/transam/xlogreader.c:806 +#: access/transam/xlogreader.c:808 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "felaktigt magiskt nummer %04X i loggsegment %s, offset %u" -#: access/transam/xlogreader.c:820 access/transam/xlogreader.c:861 +#: access/transam/xlogreader.c:822 access/transam/xlogreader.c:863 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "ogiltiga infobitar %04X i loggsegment %s, offset %u" -#: access/transam/xlogreader.c:835 +#: access/transam/xlogreader.c:837 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "WAL-fil är från ett annat databassystem: WAL-filens databassystemidentifierare är %llu, pg_control databassystemidentifierare är %llu" -#: access/transam/xlogreader.c:843 +#: access/transam/xlogreader.c:845 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL-fil är från ett annat databassystem: inkorrekt segmentstorlek i sidhuvuid" -#: access/transam/xlogreader.c:849 +#: access/transam/xlogreader.c:851 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL-fil är från ett annat databassystem: inkorrekt XLOG_BLCKSZ i sidhuvuid" -#: access/transam/xlogreader.c:880 +#: access/transam/xlogreader.c:882 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "oväntad sidadress %X/%X i loggsegment %s, offset %u" # FIXME -#: access/transam/xlogreader.c:905 +#: access/transam/xlogreader.c:907 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "\"ej i sekvens\"-fel på tidslinje-ID %u (efter %u) i loggsegment %s, offset %u" -#: access/transam/xlogreader.c:1246 +#: access/transam/xlogreader.c:1247 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "\"ej i sekvens\"-block_id %u vid %X/%X" -#: access/transam/xlogreader.c:1269 +#: access/transam/xlogreader.c:1270 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA satt, men ingen data inkluderad vid %X/%X" -#: access/transam/xlogreader.c:1276 +#: access/transam/xlogreader.c:1277 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA ej satt, men datalängd är %u vid %X/%X" -#: access/transam/xlogreader.c:1312 +#: access/transam/xlogreader.c:1313 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE satt, men håloffset %u längd %u block-image-längd %u vid %X/%X" -#: access/transam/xlogreader.c:1328 +#: access/transam/xlogreader.c:1329 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE ej satt, men håloffset %u längd %u vid %X/%X" -#: access/transam/xlogreader.c:1343 +#: access/transam/xlogreader.c:1344 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED satt, men block-image-längd %u vid %X/%X" -#: access/transam/xlogreader.c:1358 +#: access/transam/xlogreader.c:1359 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "varken BKPIMAGE_HAS_HOLE eller BKPIMAGE_IS_COMPRESSED satt, men block-image-längd är %u vid %X/%X" -#: access/transam/xlogreader.c:1374 +#: access/transam/xlogreader.c:1375 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL satt men ingen tidigare rel vid %X/%X" -#: access/transam/xlogreader.c:1386 +#: access/transam/xlogreader.c:1387 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "ogiltig block_id %u vid %X/%X" -#: access/transam/xlogreader.c:1475 +#: access/transam/xlogreader.c:1476 #, c-format msgid "record with invalid length at %X/%X" msgstr "post med ogiltig längd vid %X/%X" -#: access/transam/xlogreader.c:1564 +#: access/transam/xlogreader.c:1565 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "ogiltig komprimerad image vid %X/%X, block %d" @@ -3255,18 +3225,18 @@ msgstr "ogiltig komprimerad image vid %X/%X, block %d" msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X kräver ett tvåpotensvärde mellan 1 MB och 1 GB" -#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:830 tcop/postgres.c:3705 +#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:842 tcop/postgres.c:3705 #, c-format msgid "--%s requires a value" msgstr "--%s kräver ett värde" -#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:835 tcop/postgres.c:3710 +#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:847 tcop/postgres.c:3710 #, c-format msgid "-c %s requires a value" msgstr "-c %s kräver ett värde" -#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:847 -#: postmaster/postmaster.c:860 +#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:859 +#: postmaster/postmaster.c:872 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Försök med \"%s --help\" för mer information.\n" @@ -3404,10 +3374,10 @@ msgid "large object %u does not exist" msgstr "stort objekt %u existerar inte" #: catalog/aclchk.c:910 catalog/aclchk.c:919 commands/collationcmds.c:118 -#: commands/copy.c:1139 commands/copy.c:1159 commands/copy.c:1168 -#: commands/copy.c:1177 commands/copy.c:1186 commands/copy.c:1195 -#: commands/copy.c:1204 commands/copy.c:1213 commands/copy.c:1231 -#: commands/copy.c:1247 commands/copy.c:1267 commands/copy.c:1284 +#: commands/copy.c:1134 commands/copy.c:1154 commands/copy.c:1163 +#: commands/copy.c:1172 commands/copy.c:1181 commands/copy.c:1190 +#: commands/copy.c:1199 commands/copy.c:1208 commands/copy.c:1226 +#: commands/copy.c:1242 commands/copy.c:1262 commands/copy.c:1279 #: commands/dbcommands.c:157 commands/dbcommands.c:166 #: commands/dbcommands.c:175 commands/dbcommands.c:184 #: commands/dbcommands.c:193 commands/dbcommands.c:202 @@ -3415,9 +3385,9 @@ msgstr "stort objekt %u existerar inte" #: commands/dbcommands.c:229 commands/dbcommands.c:238 #: commands/dbcommands.c:260 commands/dbcommands.c:1502 #: commands/dbcommands.c:1511 commands/dbcommands.c:1520 -#: commands/dbcommands.c:1529 commands/extension.c:1722 -#: commands/extension.c:1732 commands/extension.c:1742 -#: commands/extension.c:3042 commands/foreigncmds.c:539 +#: commands/dbcommands.c:1529 commands/extension.c:1735 +#: commands/extension.c:1745 commands/extension.c:1755 +#: commands/extension.c:3055 commands/foreigncmds.c:539 #: commands/foreigncmds.c:548 commands/functioncmds.c:570 #: commands/functioncmds.c:736 commands/functioncmds.c:745 #: commands/functioncmds.c:754 commands/functioncmds.c:763 @@ -3429,9 +3399,9 @@ msgstr "stort objekt %u existerar inte" #: commands/subscriptioncmds.c:104 commands/subscriptioncmds.c:114 #: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 #: commands/subscriptioncmds.c:148 commands/subscriptioncmds.c:159 -#: commands/subscriptioncmds.c:173 commands/tablecmds.c:6956 -#: commands/typecmds.c:321 commands/typecmds.c:1354 commands/typecmds.c:1363 -#: commands/typecmds.c:1371 commands/typecmds.c:1379 commands/typecmds.c:1387 +#: commands/subscriptioncmds.c:173 commands/tablecmds.c:7102 +#: commands/typecmds.c:322 commands/typecmds.c:1355 commands/typecmds.c:1364 +#: commands/typecmds.c:1372 commands/typecmds.c:1380 commands/typecmds.c:1388 #: commands/user.c:133 commands/user.c:147 commands/user.c:156 #: commands/user.c:165 commands/user.c:174 commands/user.c:183 #: commands/user.c:192 commands/user.c:201 commands/user.c:210 @@ -3440,9 +3410,9 @@ msgstr "stort objekt %u existerar inte" #: commands/user.c:598 commands/user.c:606 commands/user.c:614 #: commands/user.c:622 commands/user.c:630 commands/user.c:638 #: commands/user.c:647 commands/user.c:655 commands/user.c:663 -#: parser/parse_utilcmd.c:386 replication/pgoutput/pgoutput.c:141 -#: replication/pgoutput/pgoutput.c:162 replication/walsender.c:883 -#: replication/walsender.c:894 replication/walsender.c:904 +#: parser/parse_utilcmd.c:387 replication/pgoutput/pgoutput.c:141 +#: replication/pgoutput/pgoutput.c:162 replication/walsender.c:886 +#: replication/walsender.c:897 replication/walsender.c:907 #, c-format msgid "conflicting or redundant options" msgstr "motstridiga eller redundanta inställningar" @@ -3458,26 +3428,26 @@ msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "kan inte använda IN SCHEMA-klausul samtidigt som GRANT/REVOKE ON SCHEMAS" #: catalog/aclchk.c:1558 catalog/catalog.c:506 catalog/objectaddress.c:1427 -#: commands/analyze.c:389 commands/copy.c:5085 commands/sequence.c:1702 -#: commands/tablecmds.c:6496 commands/tablecmds.c:6654 -#: commands/tablecmds.c:6728 commands/tablecmds.c:6798 -#: commands/tablecmds.c:6881 commands/tablecmds.c:6975 -#: commands/tablecmds.c:7034 commands/tablecmds.c:7107 -#: commands/tablecmds.c:7136 commands/tablecmds.c:7291 -#: commands/tablecmds.c:7373 commands/tablecmds.c:7466 -#: commands/tablecmds.c:7621 commands/tablecmds.c:10881 -#: commands/tablecmds.c:11063 commands/tablecmds.c:11223 -#: commands/tablecmds.c:12306 commands/trigger.c:876 parser/analyze.c:2339 -#: parser/parse_relation.c:713 parser/parse_target.c:1036 -#: parser/parse_type.c:144 parser/parse_utilcmd.c:3202 -#: parser/parse_utilcmd.c:3237 parser/parse_utilcmd.c:3279 utils/adt/acl.c:2870 +#: commands/analyze.c:389 commands/copy.c:5080 commands/sequence.c:1702 +#: commands/tablecmds.c:6578 commands/tablecmds.c:6721 +#: commands/tablecmds.c:6771 commands/tablecmds.c:6845 +#: commands/tablecmds.c:6915 commands/tablecmds.c:7027 +#: commands/tablecmds.c:7121 commands/tablecmds.c:7180 +#: commands/tablecmds.c:7253 commands/tablecmds.c:7282 +#: commands/tablecmds.c:7437 commands/tablecmds.c:7519 +#: commands/tablecmds.c:7612 commands/tablecmds.c:7767 +#: commands/tablecmds.c:10972 commands/tablecmds.c:11154 +#: commands/tablecmds.c:11314 commands/tablecmds.c:12397 commands/trigger.c:876 +#: parser/analyze.c:2339 parser/parse_relation.c:713 parser/parse_target.c:1036 +#: parser/parse_type.c:144 parser/parse_utilcmd.c:3289 +#: parser/parse_utilcmd.c:3324 parser/parse_utilcmd.c:3366 utils/adt/acl.c:2870 #: utils/adt/ruleutils.c:2535 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "kolumn \"%s\" i relation \"%s\" existerar inte" #: catalog/aclchk.c:1821 catalog/objectaddress.c:1267 commands/sequence.c:1140 -#: commands/tablecmds.c:236 commands/tablecmds.c:15615 utils/adt/acl.c:2060 +#: commands/tablecmds.c:236 commands/tablecmds.c:15706 utils/adt/acl.c:2060 #: utils/adt/acl.c:2090 utils/adt/acl.c:2122 utils/adt/acl.c:2154 #: utils/adt/acl.c:2182 utils/adt/acl.c:2212 #, c-format @@ -3897,7 +3867,7 @@ msgstr "språk med OID %u existerar inte" msgid "schema with OID %u does not exist" msgstr "schema med OID %u existerar inte" -#: catalog/aclchk.c:4239 catalog/aclchk.c:4936 utils/adt/genfile.c:650 +#: catalog/aclchk.c:4239 catalog/aclchk.c:4936 utils/adt/genfile.c:686 #, c-format msgid "tablespace with OID %u does not exist" msgstr "tabellutrymme med OID %u finns inte" @@ -3943,7 +3913,7 @@ msgstr "textsökordlista med OID %u existerar inte" msgid "text search configuration with OID %u does not exist" msgstr "textsökkonfiguration med OID %u existerar inte" -#: catalog/aclchk.c:5124 commands/event_trigger.c:481 +#: catalog/aclchk.c:5124 commands/event_trigger.c:475 #, c-format msgid "event trigger with OID %u does not exist" msgstr "händelseutlösare med OID %u existerar inte" @@ -3988,7 +3958,7 @@ msgstr "måste vara superanvändare för att anropa pg_nextoid()" msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() kan bara användas på systemkataloger" -#: catalog/catalog.c:498 parser/parse_utilcmd.c:2103 +#: catalog/catalog.c:498 parser/parse_utilcmd.c:2191 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "index \"%s\" tillhör inte tabell \"%s\"" @@ -4056,13 +4026,13 @@ msgstr "kan inte ta bort %s eftersom andra objekt beror på den" #: catalog/dependency.c:1193 catalog/dependency.c:1194 #: catalog/dependency.c:1200 catalog/dependency.c:1201 #: catalog/dependency.c:1212 catalog/dependency.c:1213 -#: commands/tablecmds.c:1247 commands/tablecmds.c:12925 commands/user.c:1093 +#: commands/tablecmds.c:1249 commands/tablecmds.c:13016 commands/user.c:1093 #: commands/view.c:495 libpq/auth.c:334 replication/syncrep.c:1032 #: storage/lmgr/deadlock.c:1154 storage/lmgr/proc.c:1350 utils/adt/acl.c:5329 -#: utils/adt/jsonfuncs.c:614 utils/adt/jsonfuncs.c:620 utils/misc/guc.c:6781 -#: utils/misc/guc.c:6817 utils/misc/guc.c:6887 utils/misc/guc.c:10957 -#: utils/misc/guc.c:10991 utils/misc/guc.c:11025 utils/misc/guc.c:11059 -#: utils/misc/guc.c:11094 +#: utils/adt/jsonfuncs.c:614 utils/adt/jsonfuncs.c:620 utils/misc/guc.c:6771 +#: utils/misc/guc.c:6807 utils/misc/guc.c:6877 utils/misc/guc.c:10975 +#: utils/misc/guc.c:11009 utils/misc/guc.c:11043 utils/misc/guc.c:11077 +#: utils/misc/guc.c:11112 #, c-format msgid "%s" msgstr "%s" @@ -4100,13 +4070,13 @@ msgstr "rättighet saknas för att skapa \"%s.%s\"" msgid "System catalog modifications are currently disallowed." msgstr "Systemkatalogändringar är för tillfället inte tillåtna." -#: catalog/heap.c:500 commands/tablecmds.c:2132 commands/tablecmds.c:2689 -#: commands/tablecmds.c:6093 +#: catalog/heap.c:500 commands/tablecmds.c:2145 commands/tablecmds.c:2745 +#: commands/tablecmds.c:6175 #, c-format msgid "tables can have at most %d columns" msgstr "tabeller kan ha som mest %d kolumner" -#: catalog/heap.c:518 commands/tablecmds.c:6386 +#: catalog/heap.c:518 commands/tablecmds.c:6468 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "kolumnnamn \"%s\" står i konflikt med ett systemkolumnnamn" @@ -4143,14 +4113,14 @@ msgstr "ingen jämförelse kunde härledas för partitionsnyckelkolumn %s med j msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "ingen jämförelse kunde härledas för kolumn \"%s\" med jämförelsetyp %s" -#: catalog/heap.c:1155 catalog/index.c:865 commands/tablecmds.c:3464 +#: catalog/heap.c:1155 catalog/index.c:865 commands/tablecmds.c:3520 #, c-format msgid "relation \"%s\" already exists" msgstr "relationen \"%s\" finns redan" #: catalog/heap.c:1171 catalog/pg_type.c:428 catalog/pg_type.c:775 -#: commands/typecmds.c:237 commands/typecmds.c:249 commands/typecmds.c:718 -#: commands/typecmds.c:1124 commands/typecmds.c:1336 commands/typecmds.c:2101 +#: commands/typecmds.c:238 commands/typecmds.c:250 commands/typecmds.c:719 +#: commands/typecmds.c:1125 commands/typecmds.c:1337 commands/typecmds.c:2124 #, c-format msgid "type \"%s\" already exists" msgstr "typen \"%s\" existerar redan" @@ -4176,7 +4146,7 @@ msgid "check constraint \"%s\" already exists" msgstr "check-villkor \"%s\" finns redan" #: catalog/heap.c:2840 catalog/index.c:879 catalog/pg_constraint.c:668 -#: commands/tablecmds.c:7971 +#: commands/tablecmds.c:8117 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "integritetsvillkor \"%s\" för relation \"%s\" finns redan" @@ -4258,7 +4228,7 @@ msgstr "Tabell \"%s\" refererar till \"%s\"." msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Trunkera tabellen \"%s\" samtidigt, eller använd TRUNCATE ... CASCADE." -#: catalog/index.c:219 parser/parse_utilcmd.c:1910 parser/parse_utilcmd.c:2009 +#: catalog/index.c:219 parser/parse_utilcmd.c:2097 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "multipla primärnycklar för tabell \"%s\" tillåts inte" @@ -4273,7 +4243,7 @@ msgstr "primärnycklar kan inte vara uttryck" msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "primärnyckelkolumn \"%s\" är inte markerad NOT NULL" -#: catalog/index.c:764 catalog/index.c:1839 +#: catalog/index.c:764 catalog/index.c:1843 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "användardefinierade index på systemkatalogen är inte möjligt" @@ -4299,7 +4269,7 @@ msgid "shared indexes cannot be created after initdb" msgstr "delade index kan inte skapas efter initdb" #: catalog/index.c:857 commands/createas.c:252 commands/sequence.c:154 -#: parser/parse_utilcmd.c:208 +#: parser/parse_utilcmd.c:210 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "relationen \"%s\" finns redan, hoppar över" @@ -4309,44 +4279,44 @@ msgstr "relationen \"%s\" finns redan, hoppar över" msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "pg_class index OID-värde är inte satt i binärt uppgraderingsläge" -#: catalog/index.c:2124 +#: catalog/index.c:2128 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY måste vara första operationen i transaktion" -#: catalog/index.c:2855 +#: catalog/index.c:2859 #, c-format msgid "building index \"%s\" on table \"%s\" serially" msgstr "bygger index \"%s\" på tabell \"%s\" seriellt" -#: catalog/index.c:2860 +#: catalog/index.c:2864 #, c-format msgid "building index \"%s\" on table \"%s\" with request for %d parallel worker" msgid_plural "building index \"%s\" on table \"%s\" with request for %d parallel workers" msgstr[0] "bygger index \"%s\" på tabell \"%s\" och efterfrågar %d parallell arbetare" msgstr[1] "bygger index \"%s\" på tabell \"%s\" och efterfrågar %d parallella arbetare" -#: catalog/index.c:3488 +#: catalog/index.c:3492 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "kan inte omindexera temporära tabeller som tillhör andra sessioner" -#: catalog/index.c:3499 +#: catalog/index.c:3503 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "kan inte omindexera angivet index i TOAST-tabell" -#: catalog/index.c:3621 +#: catalog/index.c:3625 #, c-format msgid "index \"%s\" was reindexed" msgstr "index \"%s\" omindexerades" -#: catalog/index.c:3697 commands/indexcmds.c:3017 +#: catalog/index.c:3701 commands/indexcmds.c:3023 #, c-format msgid "REINDEX of partitioned tables is not yet implemented, skipping \"%s\"" msgstr "REINDEX på partitionerade tabeller är inte implementerat ännu, hoppar över \"%s\"" -#: catalog/index.c:3752 +#: catalog/index.c:3756 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "kan inte omindexera ogiltigt index \"%s.%s\" på TOAST-tabell, hoppar över" @@ -4383,8 +4353,8 @@ msgstr "relationen \"%s.%s\" existerar inte" msgid "relation \"%s\" does not exist" msgstr "relationen \"%s\" existerar inte" -#: catalog/namespace.c:499 catalog/namespace.c:3030 commands/extension.c:1506 -#: commands/extension.c:1512 +#: catalog/namespace.c:499 catalog/namespace.c:3030 commands/extension.c:1519 +#: commands/extension.c:1525 #, c-format msgid "no schema has been selected to create in" msgstr "inget schema har valts för att skapa i" @@ -4435,7 +4405,7 @@ msgstr "textsökkonfiguration \"%s\" finns inte" msgid "cross-database references are not implemented: %s" msgstr "referenser till andra databaser är inte implementerat: %s" -#: catalog/namespace.c:2843 gram.y:14978 gram.y:16432 parser/parse_expr.c:879 +#: catalog/namespace.c:2843 gram.y:14981 gram.y:16435 parser/parse_expr.c:879 #: parser/parse_target.c:1235 #, c-format msgid "improper qualified name (too many dotted names): %s" @@ -4452,7 +4422,7 @@ msgid "cannot move objects into or out of TOAST schema" msgstr "kan inte flytta objekt in eller ut från TOAST-schema" #: catalog/namespace.c:3052 commands/schemacmds.c:256 commands/schemacmds.c:336 -#: commands/tablecmds.c:1192 +#: commands/tablecmds.c:1194 #, c-format msgid "schema \"%s\" does not exist" msgstr "schema \"%s\" existerar inte" @@ -4487,34 +4457,34 @@ msgstr "kan inte skapa temptabeller under återställning" msgid "cannot create temporary tables during a parallel operation" msgstr "kan inte skapa temporära tabeller under en parallell operation" -#: catalog/namespace.c:4286 commands/tablespace.c:1204 commands/variable.c:64 -#: utils/misc/guc.c:11126 utils/misc/guc.c:11204 +#: catalog/namespace.c:4286 commands/tablespace.c:1205 commands/variable.c:64 +#: utils/misc/guc.c:11144 utils/misc/guc.c:11222 #, c-format msgid "List syntax is invalid." msgstr "List-syntaxen är ogiltig." #: catalog/objectaddress.c:1275 catalog/pg_publication.c:57 -#: commands/policy.c:95 commands/policy.c:395 commands/policy.c:485 -#: commands/tablecmds.c:230 commands/tablecmds.c:272 commands/tablecmds.c:1976 -#: commands/tablecmds.c:5540 commands/tablecmds.c:10998 +#: commands/policy.c:95 commands/policy.c:375 commands/policy.c:465 +#: commands/tablecmds.c:230 commands/tablecmds.c:272 commands/tablecmds.c:1989 +#: commands/tablecmds.c:5626 commands/tablecmds.c:11089 #, c-format msgid "\"%s\" is not a table" msgstr "\"%s\" är inte en tabell" #: catalog/objectaddress.c:1282 commands/tablecmds.c:242 -#: commands/tablecmds.c:5570 commands/tablecmds.c:15620 commands/view.c:119 +#: commands/tablecmds.c:5656 commands/tablecmds.c:15711 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "\"%s\" är inte en vy" #: catalog/objectaddress.c:1289 commands/matview.c:175 commands/tablecmds.c:248 -#: commands/tablecmds.c:15625 +#: commands/tablecmds.c:15716 #, c-format msgid "\"%s\" is not a materialized view" msgstr "\"%s\" är inte en materialiserad vy" #: catalog/objectaddress.c:1296 commands/tablecmds.c:266 -#: commands/tablecmds.c:5573 commands/tablecmds.c:15630 +#: commands/tablecmds.c:5659 commands/tablecmds.c:15721 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" är inte en främmande tabell" @@ -4535,7 +4505,7 @@ msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "standardvärde för kolumn \"%s\" i relation \"%s\" existerar inte" #: catalog/objectaddress.c:1550 commands/functioncmds.c:133 -#: commands/tablecmds.c:258 commands/typecmds.c:262 commands/typecmds.c:3252 +#: commands/tablecmds.c:258 commands/typecmds.c:263 commands/typecmds.c:3275 #: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:845 #: utils/adt/acl.c:4436 #, c-format @@ -4558,7 +4528,7 @@ msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "användarmappning för användare \"%s\" på server \"%s\" finns inte" #: catalog/objectaddress.c:1766 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:1012 commands/foreigncmds.c:1392 +#: commands/foreigncmds.c:1012 commands/foreigncmds.c:1395 #: foreign/foreign.c:723 #, c-format msgid "server \"%s\" does not exist" @@ -5004,7 +4974,7 @@ msgstr "slutfunktion med extra argument får inte deklareras STRICT" msgid "return type of combine function %s is not %s" msgstr "returtyp från sammansätt-funktion %s är inte %s" -#: catalog/pg_aggregate.c:438 executor/nodeAgg.c:4098 +#: catalog/pg_aggregate.c:438 executor/nodeAgg.c:4177 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "kombineringsfunktion med övergångstyp %s får inte deklareras STRICT" @@ -5065,9 +5035,9 @@ msgid "cannot change number of direct arguments of an aggregate function" msgstr "kan inte ändra antalet direkta argument på en aggregatfunktion" #: catalog/pg_aggregate.c:870 commands/functioncmds.c:667 -#: commands/typecmds.c:1647 commands/typecmds.c:1692 commands/typecmds.c:1734 -#: commands/typecmds.c:1770 commands/typecmds.c:1804 commands/typecmds.c:1838 -#: commands/typecmds.c:1872 commands/typecmds.c:1949 commands/typecmds.c:1991 +#: commands/typecmds.c:1658 commands/typecmds.c:1704 commands/typecmds.c:1756 +#: commands/typecmds.c:1793 commands/typecmds.c:1827 commands/typecmds.c:1861 +#: commands/typecmds.c:1895 commands/typecmds.c:1972 commands/typecmds.c:2014 #: parser/parse_func.c:414 parser/parse_func.c:443 parser/parse_func.c:468 #: parser/parse_func.c:482 parser/parse_func.c:602 parser/parse_func.c:622 #: parser/parse_func.c:2129 parser/parse_func.c:2320 @@ -5140,7 +5110,7 @@ msgstr "konvertering \"%s\" finns redan" msgid "default conversion for %s to %s already exists" msgstr "standardkonvertering från %s till %s finns redan" -#: catalog/pg_depend.c:162 commands/extension.c:3311 +#: catalog/pg_depend.c:162 commands/extension.c:3324 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s är redan en medlem i utökningen \"%s\"" @@ -5200,7 +5170,7 @@ msgstr "\"%s\" är inte ett giltigt operatornamn" msgid "only binary operators can have commutators" msgstr "bara binära operatorer kan ha kommuterare" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:483 +#: catalog/pg_operator.c:374 commands/operatorcmds.c:495 #, c-format msgid "only binary operators can have join selectivity" msgstr "bara binära operatorer kan ha \"join selectivity\"" @@ -5220,12 +5190,12 @@ msgstr "bara binära operatorer kan hasha" msgid "only boolean operators can have negators" msgstr "bara booleska operatorer kan ha negatorer" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:491 +#: catalog/pg_operator.c:397 commands/operatorcmds.c:503 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "bara booleskaa operatorer kan ha \"restriction selectivity\"" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:495 +#: catalog/pg_operator.c:401 commands/operatorcmds.c:507 #, c-format msgid "only boolean operators can have join selectivity" msgstr "bara booleska operatorer kan ha \"join selectivity\"" @@ -5337,7 +5307,7 @@ msgstr "SQL-funktioner kan inte returnera typ %s" msgid "SQL functions cannot have arguments of type %s" msgstr "SQL-funktioner kan inte ha argument av typ %s" -#: catalog/pg_proc.c:954 executor/functions.c:1446 +#: catalog/pg_proc.c:954 executor/functions.c:1440 #, c-format msgid "SQL function \"%s\"" msgstr "SQL-funktion \"%s\"" @@ -5436,7 +5406,7 @@ msgstr[1] "%d objekt i %s" msgid "cannot drop objects owned by %s because they are required by the database system" msgstr "kan inte ta bort objekt ägda av %s eftersom de krävs av databassystemet" -#: catalog/pg_shdepend.c:1429 +#: catalog/pg_shdepend.c:1431 #, c-format msgid "cannot reassign ownership of objects owned by %s because they are required by the database system" msgstr "kan inte byta ägare på objekt som ägs av %s då dessa krävas av databassystemet" @@ -5473,7 +5443,7 @@ msgstr "intern storlek %d är ogiltig för skicka-värde-typ" msgid "alignment \"%c\" is invalid for variable-length type" msgstr "justering (alignment) \"%c\" är ogiltig för variabel-längd-typ" -#: catalog/pg_type.c:321 commands/typecmds.c:3704 +#: catalog/pg_type.c:321 commands/typecmds.c:3727 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "typer med fast storlek måste lagras som PLAIN" @@ -5488,8 +5458,8 @@ msgstr "kunde inte skapa array-typnamn för typ \"%s\"" msgid "invalid page in block %u of relation %s" msgstr "ogiltig sida i block %u i relation %s" -#: catalog/toasting.c:106 commands/indexcmds.c:639 commands/tablecmds.c:5552 -#: commands/tablecmds.c:15485 +#: catalog/toasting.c:106 commands/indexcmds.c:639 commands/tablecmds.c:5638 +#: commands/tablecmds.c:15576 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\" är inte en tabell eller materialiserad vy" @@ -5584,7 +5554,7 @@ msgstr "parameter \"parallel\" måste vara SAFE, RESTRICTED eller UNSAFE" msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "parameter \"%s\" måste vara READ_ONLY, SHAREABLE eller READ_WRITE" -#: commands/alter.c:84 commands/event_trigger.c:180 +#: commands/alter.c:84 commands/event_trigger.c:174 #, c-format msgid "event trigger \"%s\" already exists" msgstr "händelseutlösare \"%s\" finns redan" @@ -5654,38 +5624,38 @@ msgstr "måste vara superanvändare för att döpa om %s" msgid "must be superuser to set schema of %s" msgstr "måste vara superanvändare för att sätta schema för %s" -#: commands/amcmds.c:59 +#: commands/amcmds.c:60 #, c-format msgid "permission denied to create access method \"%s\"" msgstr "rättighet saknas för att skapa accessmetod \"%s\"" -#: commands/amcmds.c:61 +#: commands/amcmds.c:62 #, c-format msgid "Must be superuser to create an access method." msgstr "Måste vara superanvändare för att skapa accessmetod." -#: commands/amcmds.c:70 +#: commands/amcmds.c:71 #, c-format msgid "access method \"%s\" already exists" msgstr "accessmetod \"%s\" finns redan" -#: commands/amcmds.c:127 +#: commands/amcmds.c:130 #, c-format msgid "must be superuser to drop access methods" msgstr "måste vara superanvändare för att ta bort accessmetoder" -#: commands/amcmds.c:178 commands/indexcmds.c:188 commands/indexcmds.c:790 +#: commands/amcmds.c:181 commands/indexcmds.c:188 commands/indexcmds.c:790 #: commands/opclasscmds.c:373 commands/opclasscmds.c:793 #, c-format msgid "access method \"%s\" does not exist" msgstr "accessmetod \"%s\" existerar inte" -#: commands/amcmds.c:267 +#: commands/amcmds.c:270 #, c-format msgid "handler function is not specified" msgstr "hanterarfunktion ej angiven" -#: commands/amcmds.c:288 commands/event_trigger.c:189 +#: commands/amcmds.c:291 commands/event_trigger.c:183 #: commands/foreigncmds.c:489 commands/proclang.c:79 commands/trigger.c:687 #: parser/parse_clause.c:941 #, c-format @@ -5737,42 +5707,42 @@ msgstr "hoppar över analys av arvsträd \"%s.%s\" --- detta arvsträd innehåll msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "hoppar över analys av arvsträd \"%s.%s\" --- detta arvsträd innehåller inga analyserbara barntabeller" -#: commands/async.c:636 +#: commands/async.c:634 #, c-format msgid "channel name cannot be empty" msgstr "kanalnamn får inte vara tomt" -#: commands/async.c:642 +#: commands/async.c:640 #, c-format msgid "channel name too long" msgstr "kanalnamn för långt" -#: commands/async.c:647 +#: commands/async.c:645 #, c-format msgid "payload string too long" msgstr "innehållssträng är för lång" -#: commands/async.c:866 +#: commands/async.c:864 #, c-format msgid "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" msgstr "kan inte göra PREPARE på transaktion som kört LISTEN, UNLISTEN eller NOTIFY" -#: commands/async.c:972 +#: commands/async.c:970 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "för många notifieringar i NOTIFY-kön" -#: commands/async.c:1626 +#: commands/async.c:1636 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "NOTIFY-kön är %.0f%% full" -#: commands/async.c:1628 +#: commands/async.c:1638 #, c-format msgid "The server process with PID %d is among those with the oldest transactions." msgstr "Serverprocessen med PID %d är bland dem med den äldsta transaktionen." -#: commands/async.c:1631 +#: commands/async.c:1641 #, c-format msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." msgstr "NOTIFY-kön kan inte tömmas innan den processen avslutar sin nuvarande transaktion." @@ -5792,7 +5762,7 @@ msgstr "kan inte klustra en partitionerad tabell" msgid "there is no previously clustered index for table \"%s\"" msgstr "det finns inget tidigare klustrat index för tabell \"%s\"" -#: commands/cluster.c:165 commands/tablecmds.c:12762 commands/tablecmds.c:14568 +#: commands/cluster.c:165 commands/tablecmds.c:12853 commands/tablecmds.c:14659 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "index \"%s\" för tabell \"%s\" finns inte" @@ -5807,7 +5777,7 @@ msgstr "kan inte klustra en delad katalog" msgid "cannot vacuum temporary tables of other sessions" msgstr "kan inte städa temporära tabeller för andra sessioner" -#: commands/cluster.c:432 commands/tablecmds.c:14578 +#: commands/cluster.c:432 commands/tablecmds.c:14669 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\" är inte ett index för tabell \"%s\"" @@ -5916,7 +5886,7 @@ msgstr "kunde inte konvertera lokalnamn \"%s\" till språktagg: %s" msgid "must be superuser to import system collations" msgstr "måste vara superanvändare för att importera systemjämförelser" -#: commands/collationcmds.c:554 commands/copy.c:1899 commands/copy.c:3485 +#: commands/collationcmds.c:554 commands/copy.c:1894 commands/copy.c:3480 #: libpq/be-secure-common.c:81 #, c-format msgid "could not execute command \"%s\": %m" @@ -5936,17 +5906,17 @@ msgstr "inga användbara systemlokaler hittades" msgid "database \"%s\" does not exist" msgstr "databasen \"%s\" existerar inte" -#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:955 +#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:957 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" msgstr "\"%s\" är inte en tabell, vy, materialiserad vy, composite-typ eller främmande tabell" -#: commands/constraint.c:63 utils/adt/ri_triggers.c:1913 +#: commands/constraint.c:63 utils/adt/ri_triggers.c:1923 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "funktionen \"%s\" anropades inte av utlösar-hanteraren" -#: commands/constraint.c:70 utils/adt/ri_triggers.c:1922 +#: commands/constraint.c:70 utils/adt/ri_triggers.c:1932 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "funktionen \"%s\" måste köras för AFTER ROW" @@ -6047,452 +6017,452 @@ msgstr "COPY FROM stöds inte med radnivåsäkerhet" msgid "Use INSERT statements instead." msgstr "Använd INSERT-satser istället." -#: commands/copy.c:1151 +#: commands/copy.c:1146 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "COPY-format \"%s\" känns inte igen" -#: commands/copy.c:1222 commands/copy.c:1238 commands/copy.c:1253 -#: commands/copy.c:1275 +#: commands/copy.c:1217 commands/copy.c:1233 commands/copy.c:1248 +#: commands/copy.c:1270 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "argumentet till flaggan \"%s\" måste vara en lista med kolumnnamn" -#: commands/copy.c:1290 +#: commands/copy.c:1285 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "argumentet till flaggan \"%s\" måste vara ett giltigt kodningsnamn" -#: commands/copy.c:1297 commands/dbcommands.c:253 commands/dbcommands.c:1536 +#: commands/copy.c:1292 commands/dbcommands.c:253 commands/dbcommands.c:1536 #, c-format msgid "option \"%s\" not recognized" msgstr "flaggan \"%s\" känns inte igen" -#: commands/copy.c:1309 +#: commands/copy.c:1304 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "kan inte ange DELIMITER i läget BINARY" -#: commands/copy.c:1314 +#: commands/copy.c:1309 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "kan inte ange NULL i läget BINARY" -#: commands/copy.c:1336 +#: commands/copy.c:1331 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "COPY-avdelaren måste vara ett ensamt en-byte-tecken" -#: commands/copy.c:1343 +#: commands/copy.c:1338 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "COPY-avdelaren kan inte vara nyradstecken eller vagnretur" -#: commands/copy.c:1349 +#: commands/copy.c:1344 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "null-representationen för COPY kan inte använda tecknen för nyrad eller vagnretur" -#: commands/copy.c:1366 +#: commands/copy.c:1361 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "COPY-avdelaren kan inte vara \"%s\"" -#: commands/copy.c:1372 +#: commands/copy.c:1367 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "COPY HEADER kan bara användas i CSV-läge" -#: commands/copy.c:1378 +#: commands/copy.c:1373 #, c-format msgid "COPY quote available only in CSV mode" msgstr "COPY-quote kan bara användas i CSV-läge" -#: commands/copy.c:1383 +#: commands/copy.c:1378 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "COPY-quote måste vara ett ensamt en-byte-tecken" -#: commands/copy.c:1388 +#: commands/copy.c:1383 #, c-format msgid "COPY delimiter and quote must be different" msgstr "COPY-avdelare och quote måste vara olika" -#: commands/copy.c:1394 +#: commands/copy.c:1389 #, c-format msgid "COPY escape available only in CSV mode" msgstr "COPY-escape kan bara användas i CSV-läge" -#: commands/copy.c:1399 +#: commands/copy.c:1394 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "COPY-escape måste vara ett ensamt en-byte-tecken" -#: commands/copy.c:1405 +#: commands/copy.c:1400 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "COPY-force-quote kan bara användas i CSV-läge" -#: commands/copy.c:1409 +#: commands/copy.c:1404 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "COPY-force-quote kan bara användas med COPY TO" -#: commands/copy.c:1415 +#: commands/copy.c:1410 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "COPY-force-not-null kan bara användas i CSV-läge" -#: commands/copy.c:1419 +#: commands/copy.c:1414 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "COPY-force-not-null kan bara används med COPY FROM" -#: commands/copy.c:1425 +#: commands/copy.c:1420 #, c-format msgid "COPY force null available only in CSV mode" msgstr "COPY-force-null kan bara användas i CSV-läge" -#: commands/copy.c:1430 +#: commands/copy.c:1425 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "COPY-force-null kan bara används med COPY FROM" -#: commands/copy.c:1436 +#: commands/copy.c:1431 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "COPY-avdelaren kan inte vara i NULL-specificationen" -#: commands/copy.c:1443 +#: commands/copy.c:1438 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "CSV-citattecken kan inte vara i NULL-specificationen" -#: commands/copy.c:1529 +#: commands/copy.c:1524 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for COPY" msgstr "DO INSTEAD NOTHING-regler stöds inte med COPY" -#: commands/copy.c:1543 +#: commands/copy.c:1538 #, c-format msgid "conditional DO INSTEAD rules are not supported for COPY" msgstr "villkorliga DO INSTEAD-regler stöds inte med COPY" -#: commands/copy.c:1547 +#: commands/copy.c:1542 #, c-format msgid "DO ALSO rules are not supported for the COPY" msgstr "DO ALSO-regler stöds inte med COPY" -#: commands/copy.c:1552 +#: commands/copy.c:1547 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for COPY" msgstr "multi-satsers DO INSTEAD-regler stöds inte med COPY" -#: commands/copy.c:1562 +#: commands/copy.c:1557 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) stöds inte" -#: commands/copy.c:1579 +#: commands/copy.c:1574 #, c-format msgid "COPY query must have a RETURNING clause" msgstr "COPY-fråga måste ha en RETURNING-klausul" -#: commands/copy.c:1608 +#: commands/copy.c:1603 #, c-format msgid "relation referenced by COPY statement has changed" msgstr "relationen refererad till av COPY-sats har ändrats" -#: commands/copy.c:1667 +#: commands/copy.c:1662 #, c-format msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" msgstr "FORCE_QUOTE-kolumnen \"%s\" refereras inte till av COPY" -#: commands/copy.c:1690 +#: commands/copy.c:1685 #, c-format msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" msgstr "FORCE_NOT_NULL-kolumnen \"%s\" refereras inte till av COPY" -#: commands/copy.c:1713 +#: commands/copy.c:1708 #, c-format msgid "FORCE_NULL column \"%s\" not referenced by COPY" msgstr "FORCE_NULL-kolumnen \"%s\" refereras inte till av COPY" -#: commands/copy.c:1779 libpq/be-secure-common.c:105 +#: commands/copy.c:1774 libpq/be-secure-common.c:105 #, c-format msgid "could not close pipe to external command: %m" msgstr "kunde inte stänga rör till externt komamndo: %m" -#: commands/copy.c:1794 +#: commands/copy.c:1789 #, c-format msgid "program \"%s\" failed" msgstr "program \"%s\" misslyckades" -#: commands/copy.c:1845 +#: commands/copy.c:1840 #, c-format msgid "cannot copy from view \"%s\"" msgstr "kan inte kopiera från vy \"%s\"" -#: commands/copy.c:1847 commands/copy.c:1853 commands/copy.c:1859 -#: commands/copy.c:1870 +#: commands/copy.c:1842 commands/copy.c:1848 commands/copy.c:1854 +#: commands/copy.c:1865 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "Försök med varianten COPY (SELECT ...) TO." -#: commands/copy.c:1851 +#: commands/copy.c:1846 #, c-format msgid "cannot copy from materialized view \"%s\"" msgstr "kan inte kopiera från materialiserad vy \"%s\"" -#: commands/copy.c:1857 +#: commands/copy.c:1852 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "kan inte kopiera från främmande tabell \"%s\"" -#: commands/copy.c:1863 +#: commands/copy.c:1858 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "kan inte kopiera från sekvens \"%s\"" -#: commands/copy.c:1868 +#: commands/copy.c:1863 #, c-format msgid "cannot copy from partitioned table \"%s\"" msgstr "kan inte kopiera från partitionerad tabell \"%s\"" -#: commands/copy.c:1874 +#: commands/copy.c:1869 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "kan inte kopiera från icke-tabell-relation \"%s\"" -#: commands/copy.c:1914 +#: commands/copy.c:1909 #, c-format msgid "relative path not allowed for COPY to file" msgstr "relativa sökväg tillåts inte för COPY till fil" -#: commands/copy.c:1933 +#: commands/copy.c:1928 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "kunde inte öppna fil \"%s\" för skrivning: %m" -#: commands/copy.c:1936 +#: commands/copy.c:1931 #, c-format msgid "COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \\copy." msgstr "COPY TO säger åt PostgreSQLs serverprocess att skriva till en fil. Du kanske söker efter en klient-finess så som psql:s \\copy." -#: commands/copy.c:1949 commands/copy.c:3516 +#: commands/copy.c:1944 commands/copy.c:3511 #, c-format msgid "\"%s\" is a directory" msgstr "\"%s\" är en katalog" -#: commands/copy.c:2251 +#: commands/copy.c:2246 #, c-format msgid "COPY %s, line %s, column %s" msgstr "COPY %s, rad %s, kolumn %s" -#: commands/copy.c:2255 commands/copy.c:2302 +#: commands/copy.c:2250 commands/copy.c:2297 #, c-format msgid "COPY %s, line %s" msgstr "COPY %s, rad %s" -#: commands/copy.c:2266 +#: commands/copy.c:2261 #, c-format msgid "COPY %s, line %s, column %s: \"%s\"" msgstr "COPY %s, rad %s, kolumn %s: \"%s\"" -#: commands/copy.c:2274 +#: commands/copy.c:2269 #, c-format msgid "COPY %s, line %s, column %s: null input" msgstr "COPY %s, rad %s, kolumn %s: null-indata" -#: commands/copy.c:2296 +#: commands/copy.c:2291 #, c-format msgid "COPY %s, line %s: \"%s\"" msgstr "COPY %s, rad %s: \"%s\"" -#: commands/copy.c:2697 +#: commands/copy.c:2692 #, c-format msgid "cannot copy to view \"%s\"" msgstr "kan inte kopiera till vyn \"%s\"" -#: commands/copy.c:2699 +#: commands/copy.c:2694 #, c-format msgid "To enable copying to a view, provide an INSTEAD OF INSERT trigger." msgstr "För att tillåta kopiering till en vy, testa med en INSTEAD OF INSERT-utlösare." -#: commands/copy.c:2703 +#: commands/copy.c:2698 #, c-format msgid "cannot copy to materialized view \"%s\"" msgstr "kan inte kopiera till materialiserad vy \"%s\"" -#: commands/copy.c:2708 +#: commands/copy.c:2703 #, c-format msgid "cannot copy to sequence \"%s\"" msgstr "kan inte kopiera till sekvens \"%s\"" -#: commands/copy.c:2713 +#: commands/copy.c:2708 #, c-format msgid "cannot copy to non-table relation \"%s\"" msgstr "kan inte kopiera till icke-tabellrelation \"%s\"" -#: commands/copy.c:2753 +#: commands/copy.c:2748 #, c-format msgid "cannot perform COPY FREEZE on a partitioned table" msgstr "kan inte utföra COPY FREEZE på en partitionerad tabell" -#: commands/copy.c:2768 +#: commands/copy.c:2763 #, c-format msgid "cannot perform COPY FREEZE because of prior transaction activity" msgstr "kan inte utföra COPY FREEZE på grund av tidigare transaktionsaktivitet" -#: commands/copy.c:2774 +#: commands/copy.c:2769 #, c-format msgid "cannot perform COPY FREEZE because the table was not created or truncated in the current subtransaction" msgstr "kan inte utföra COPY FREEZE då tabellen inte skapades eller trunkerades i den nuvarande subtransaktionen" -#: commands/copy.c:3503 +#: commands/copy.c:3498 #, c-format msgid "COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \\copy." msgstr "COPY FROM säger åt PostgreSQLs serverprocess att läsa en fil. Du kanske söker efter en klient-finess så som psql:s \\copy." -#: commands/copy.c:3531 +#: commands/copy.c:3526 #, c-format msgid "COPY file signature not recognized" msgstr "COPY-filsignaturen känns inte igen" -#: commands/copy.c:3536 +#: commands/copy.c:3531 #, c-format msgid "invalid COPY file header (missing flags)" msgstr "trasigt COPY-filhuvud (flaggor saknas)" -#: commands/copy.c:3540 +#: commands/copy.c:3535 #, c-format msgid "invalid COPY file header (WITH OIDS)" msgstr "trasigt COPY-filhuvud (WITH OIDS)" -#: commands/copy.c:3545 +#: commands/copy.c:3540 #, c-format msgid "unrecognized critical flags in COPY file header" msgstr "okända kritiska flaggor i COPY-filhuvudet" -#: commands/copy.c:3551 +#: commands/copy.c:3546 #, c-format msgid "invalid COPY file header (missing length)" msgstr "trasigt COPY-filhuvud (längd saknas)" -#: commands/copy.c:3558 +#: commands/copy.c:3553 #, c-format msgid "invalid COPY file header (wrong length)" msgstr "trasigt COPY-filhuvud (fel längd)" -#: commands/copy.c:3677 commands/copy.c:4342 commands/copy.c:4572 +#: commands/copy.c:3672 commands/copy.c:4337 commands/copy.c:4567 #, c-format msgid "extra data after last expected column" msgstr "extra data efter den förväntat sista kolumnen" -#: commands/copy.c:3691 +#: commands/copy.c:3686 #, c-format msgid "missing data for column \"%s\"" msgstr "saknar data för kolumn \"%s\"" -#: commands/copy.c:3774 +#: commands/copy.c:3769 #, c-format msgid "received copy data after EOF marker" msgstr "tog emot copy-data efter EOF-markering" -#: commands/copy.c:3781 +#: commands/copy.c:3776 #, c-format msgid "row field count is %d, expected %d" msgstr "fälträknaren är %d, förväntades vara %d" -#: commands/copy.c:4101 commands/copy.c:4118 +#: commands/copy.c:4096 commands/copy.c:4113 #, c-format msgid "literal carriage return found in data" msgstr "hittade asciitecknet vagnretur i data" -#: commands/copy.c:4102 commands/copy.c:4119 +#: commands/copy.c:4097 commands/copy.c:4114 #, c-format msgid "unquoted carriage return found in data" msgstr "ej citerad vagnretur (carriage return) hittad i data" -#: commands/copy.c:4104 commands/copy.c:4121 +#: commands/copy.c:4099 commands/copy.c:4116 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "Använd \"\\r\" för att representera vagnretur (carriage return)." -#: commands/copy.c:4105 commands/copy.c:4122 +#: commands/copy.c:4100 commands/copy.c:4117 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "Använd citerat CSV-fält för att representera vagnretur (carriage return)." -#: commands/copy.c:4134 +#: commands/copy.c:4129 #, c-format msgid "literal newline found in data" msgstr "hittade asciitecknet nyrad i data" -#: commands/copy.c:4135 +#: commands/copy.c:4130 #, c-format msgid "unquoted newline found in data" msgstr "ej citerat nyradstecken hittad i data" -#: commands/copy.c:4137 +#: commands/copy.c:4132 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "Använd \"\\n\" för att representera en ny rad." -#: commands/copy.c:4138 +#: commands/copy.c:4133 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "Använd citerat CSV-fält för att representera en ny rad." -#: commands/copy.c:4184 commands/copy.c:4220 +#: commands/copy.c:4179 commands/copy.c:4215 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "slut-på-copy-markeringen matchar inte tidigare nyradsmetod" -#: commands/copy.c:4193 commands/copy.c:4209 +#: commands/copy.c:4188 commands/copy.c:4204 #, c-format msgid "end-of-copy marker corrupt" msgstr "slut-på-copy-markeringen felaktig" -#: commands/copy.c:4656 +#: commands/copy.c:4651 #, c-format msgid "unterminated CSV quoted field" msgstr "icketerminerat citerat CSV-fält" -#: commands/copy.c:4733 commands/copy.c:4752 +#: commands/copy.c:4728 commands/copy.c:4747 #, c-format msgid "unexpected EOF in COPY data" msgstr "oväntad EOF i COPY-data" -#: commands/copy.c:4742 +#: commands/copy.c:4737 #, c-format msgid "invalid field size" msgstr "ogiltig fältstorlek" -#: commands/copy.c:4765 +#: commands/copy.c:4760 #, c-format msgid "incorrect binary data format" msgstr "felaktigt binärt dataformat" -#: commands/copy.c:5073 +#: commands/copy.c:5068 #, c-format msgid "column \"%s\" is a generated column" msgstr "kolumnen \"%s\" är en genererad kolumn" -#: commands/copy.c:5075 +#: commands/copy.c:5070 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "Genererade kolumner kan inte användas i COPY." -#: commands/copy.c:5090 commands/indexcmds.c:1700 commands/statscmds.c:217 -#: commands/tablecmds.c:2163 commands/tablecmds.c:2739 -#: commands/tablecmds.c:3126 parser/parse_relation.c:3507 -#: parser/parse_relation.c:3527 utils/adt/tsvector_op.c:2616 +#: commands/copy.c:5085 commands/indexcmds.c:1699 commands/statscmds.c:217 +#: commands/tablecmds.c:2176 commands/tablecmds.c:2795 +#: commands/tablecmds.c:3182 parser/parse_relation.c:3507 +#: parser/parse_relation.c:3527 utils/adt/tsvector_op.c:2668 #, c-format msgid "column \"%s\" does not exist" msgstr "kolumnen \"%s\" existerar inte" -#: commands/copy.c:5097 commands/tablecmds.c:2189 commands/trigger.c:885 +#: commands/copy.c:5092 commands/tablecmds.c:2202 commands/trigger.c:885 #: parser/parse_target.c:1052 parser/parse_target.c:1063 #, c-format msgid "column \"%s\" specified more than once" @@ -6743,7 +6713,7 @@ msgid_plural "There are %d other sessions using the database." msgstr[0] "Det finns %d annan session som använder databasen." msgstr[1] "Det finns %d andra sessioner som använder databasen." -#: commands/dbcommands.c:2094 storage/ipc/procarray.c:3018 +#: commands/dbcommands.c:2094 storage/ipc/procarray.c:3016 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." @@ -6798,14 +6768,14 @@ msgstr "\"%s\" är en aggregatfunktion" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Använd DROP AGGREGATE för att ta bort aggregatfunktioner." -#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3210 -#: commands/tablecmds.c:3368 commands/tablecmds.c:3413 -#: commands/tablecmds.c:14947 tcop/utility.c:1274 +#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3266 +#: commands/tablecmds.c:3424 commands/tablecmds.c:3469 +#: commands/tablecmds.c:15038 tcop/utility.c:1309 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "relation \"%s\" finns inte, hoppar över" -#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1197 +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1199 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "schema \"%s\" finns inte, hoppar över" @@ -6830,7 +6800,7 @@ msgstr "jämförelse \"%s\" finns inte, hoppar över" msgid "conversion \"%s\" does not exist, skipping" msgstr "konvertering \"%s\" finns inte, hoppar över" -#: commands/dropcmds.c:293 commands/statscmds.c:477 +#: commands/dropcmds.c:293 commands/statscmds.c:479 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "statistikobjekt \"%s\" finns inte, hoppar över" @@ -6925,7 +6895,7 @@ msgstr "regel \"%s\" för relation \"%s\" finns inte, hoppar över" msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "främmande data-omvandlare \"%s\" finns inte, hoppar över" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1396 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1399 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "servern \"%s\" finns inte, hoppar över" @@ -6945,99 +6915,94 @@ msgstr "operatorfamilj \"%s\" finns inte för accessmetod \"%s\", hoppar över" msgid "publication \"%s\" does not exist, skipping" msgstr "publicering \"%s\" finns inte, hoppar över" -#: commands/event_trigger.c:131 +#: commands/event_trigger.c:125 #, c-format msgid "permission denied to create event trigger \"%s\"" msgstr "rättighet saknas för att skapa händelseutlösare \"%s\"" -#: commands/event_trigger.c:133 +#: commands/event_trigger.c:127 #, c-format msgid "Must be superuser to create an event trigger." msgstr "Måste vara superanvändare för att skapa en händelsutlösare." -#: commands/event_trigger.c:142 +#: commands/event_trigger.c:136 #, c-format msgid "unrecognized event name \"%s\"" msgstr "okänt händelsenamn: \"%s\"" -#: commands/event_trigger.c:159 +#: commands/event_trigger.c:153 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "okänd filtervariabel \"%s\"" -#: commands/event_trigger.c:213 +#: commands/event_trigger.c:207 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "filtervärde \"%s\" känns inte igen för filtervariabel \"%s\"" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:219 commands/event_trigger.c:241 +#: commands/event_trigger.c:213 commands/event_trigger.c:235 #, c-format msgid "event triggers are not supported for %s" msgstr "händelsutösare stöds inte för %s" -#: commands/event_trigger.c:254 +#: commands/event_trigger.c:248 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "filtervariabel \"%s\" angiven mer än en gång" -#: commands/event_trigger.c:405 commands/event_trigger.c:449 -#: commands/event_trigger.c:543 +#: commands/event_trigger.c:399 commands/event_trigger.c:443 +#: commands/event_trigger.c:537 #, c-format msgid "event trigger \"%s\" does not exist" msgstr "händelseutlösare \"%s\" finns inte" -#: commands/event_trigger.c:511 +#: commands/event_trigger.c:505 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "rättighet saknas för att byta ägare på händelseutlösare \"%s\"" -#: commands/event_trigger.c:513 +#: commands/event_trigger.c:507 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "Ägaren för en händelseutlösare måste vara en superanvändare." -#: commands/event_trigger.c:1343 +#: commands/event_trigger.c:1325 #, c-format msgid "%s can only be called in a sql_drop event trigger function" msgstr "%s kan bara anropas i en sql_drop-händelseutlösarfunktion" -#: commands/event_trigger.c:1463 commands/event_trigger.c:1484 +#: commands/event_trigger.c:1445 commands/event_trigger.c:1466 #, c-format msgid "%s can only be called in a table_rewrite event trigger function" msgstr "%s kan bara anropas i en tabell_rewrite-händelseutlösarfunktion" -#: commands/event_trigger.c:1895 +#: commands/event_trigger.c:1883 #, c-format msgid "%s can only be called in an event trigger function" msgstr "%s kan bara anropas i en händelseutlösarfunktion" -#: commands/explain.c:212 +#: commands/explain.c:213 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "okänt värde för EXPLAIN-flagga \"%s\": \"%s\"" -#: commands/explain.c:219 +#: commands/explain.c:220 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "okänd EXPLAIN-flagga \"%s\"" -#: commands/explain.c:227 -#, c-format -msgid "EXPLAIN option BUFFERS requires ANALYZE" -msgstr "EXPLAIN-flagga BUFFERS kräver ANALYZE" - -#: commands/explain.c:232 +#: commands/explain.c:228 #, c-format msgid "EXPLAIN option WAL requires ANALYZE" msgstr "EXPLAIN-flagga WAL kräver ANALYZE" -#: commands/explain.c:241 +#: commands/explain.c:237 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "EXPLAIN-flagga TIMING kräver ANALYZE" -#: commands/extension.c:173 commands/extension.c:3000 +#: commands/extension.c:173 commands/extension.c:3013 #, c-format msgid "extension \"%s\" does not exist" msgstr "utökning \"%s\" finns inte" @@ -7105,7 +7070,7 @@ msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "parameter \"%s\" kan inte sättas i sekundär utökningskontrollfil" #: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 -#: utils/misc/guc.c:6759 +#: utils/misc/guc.c:6749 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "parameter \"%s\" kräver ett boolskt värde" @@ -7165,117 +7130,117 @@ msgstr "Måste ha CREATE-rättighet på den aktuella databasen för att uppdater msgid "Must be superuser to update this extension." msgstr "Måste vara superanvändare för att uppdatera denna utökning." -#: commands/extension.c:1187 +#: commands/extension.c:1200 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "utökningen \"%s\" saknar uppdateringsmöjlighet från version \"%s\" till version \"%s\"" -#: commands/extension.c:1395 commands/extension.c:3061 +#: commands/extension.c:1408 commands/extension.c:3074 #, c-format msgid "version to install must be specified" msgstr "installationversion måste anges" -#: commands/extension.c:1432 +#: commands/extension.c:1445 #, c-format msgid "extension \"%s\" has no installation script nor update path for version \"%s\"" msgstr "utökning \"%s\" saknar installationsskript samt uppdateringsmöjlighet till version \"%s\"" -#: commands/extension.c:1466 +#: commands/extension.c:1479 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "utökning \"%s\" måste vara installerat i schema \"%s\"" -#: commands/extension.c:1626 +#: commands/extension.c:1639 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "cirkulärt beroende upptäckt mellan utökningar \"%s\" och \"%s\"" -#: commands/extension.c:1631 +#: commands/extension.c:1644 #, c-format msgid "installing required extension \"%s\"" msgstr "installerar krävd utökning \"%s\"" -#: commands/extension.c:1654 +#: commands/extension.c:1667 #, c-format msgid "required extension \"%s\" is not installed" msgstr "krävd utökning \"%s\" är inte installerad" -#: commands/extension.c:1657 +#: commands/extension.c:1670 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "Använd CREATE EXTENSION ... CASCADE för att installera alla krävda utökningar också." -#: commands/extension.c:1692 +#: commands/extension.c:1705 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "utökning \"%s\" finns redan, hoppar över" -#: commands/extension.c:1699 +#: commands/extension.c:1712 #, c-format msgid "extension \"%s\" already exists" msgstr "utökning \"%s\" finns redan" -#: commands/extension.c:1710 +#: commands/extension.c:1723 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "nästlade CREATE EXTENSION stöds inte" -#: commands/extension.c:1883 +#: commands/extension.c:1896 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "kan inte ta bort utökning \"%s\" eftersom det håller på att modifieras" -#: commands/extension.c:2444 +#: commands/extension.c:2457 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "%s kan bara anropas från ett SQL-skript som körs av CREATE EXTENSION" -#: commands/extension.c:2456 +#: commands/extension.c:2469 #, c-format msgid "OID %u does not refer to a table" msgstr "OID %u refererar inte till en tabell" -#: commands/extension.c:2461 +#: commands/extension.c:2474 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "tabell \"%s\" är inte en del av utökningen som skapas" -#: commands/extension.c:2815 +#: commands/extension.c:2828 #, c-format msgid "cannot move extension \"%s\" into schema \"%s\" because the extension contains the schema" msgstr "kan inte flytta utökning \"%s\" till schema \"%s\" eftersom utökningen innehåller schemat" -#: commands/extension.c:2856 commands/extension.c:2919 +#: commands/extension.c:2869 commands/extension.c:2932 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "utökning \"%s\" stöder inte SET SCHEMA" -#: commands/extension.c:2921 +#: commands/extension.c:2934 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "%s är inte utökningens schema \"%s\"" -#: commands/extension.c:2980 +#: commands/extension.c:2993 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "nästlade ALTER EXTENSION stöds inte" -#: commands/extension.c:3072 +#: commands/extension.c:3085 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "version \"%s\" av utökning \"%s\" är redan installerad" -#: commands/extension.c:3323 +#: commands/extension.c:3336 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "kan inte lägga till schema \"%s\" till utökningen \"%s\" eftersom schemat innehåller utökningen" -#: commands/extension.c:3351 +#: commands/extension.c:3364 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s är inte en medlem av utökning \"%s\"" -#: commands/extension.c:3417 +#: commands/extension.c:3430 #, c-format msgid "file \"%s\" is too large" msgstr "filen \"%s\" är för stor" @@ -7355,27 +7320,27 @@ msgstr "användarmappning för \"%s\" finns redan för server \"%s\", hoppar öv msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "användarmappning för \"%s\" finns redan för server \"%s\"" -#: commands/foreigncmds.c:1293 commands/foreigncmds.c:1410 +#: commands/foreigncmds.c:1293 commands/foreigncmds.c:1413 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "användarmappning för \"%s\" finns inte för servern \"%s\"" -#: commands/foreigncmds.c:1415 +#: commands/foreigncmds.c:1418 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "användarmappning för \"%s\" finns inte för servern \"%s\", hoppar över" -#: commands/foreigncmds.c:1566 foreign/foreign.c:389 +#: commands/foreigncmds.c:1569 foreign/foreign.c:389 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "främmande data-omvandlare \"%s\" har ingen hanterare" -#: commands/foreigncmds.c:1572 +#: commands/foreigncmds.c:1575 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "främmande data-omvandlare \"%s\" stöder inte IMPORT FOREIGN SCHEMA" -#: commands/foreigncmds.c:1675 +#: commands/foreigncmds.c:1678 #, c-format msgid "importing foreign table \"%s\"" msgstr "importerar främmande tabell \"%s\"" @@ -7753,13 +7718,13 @@ msgstr "kan inte skapa uteslutningsvillkor för partitionerad tabell \"%s\"" msgid "cannot create indexes on temporary tables of other sessions" msgstr "kan inte skapa index till temporära tabeller som tillhör andra sessioner" -#: commands/indexcmds.c:717 commands/tablecmds.c:702 commands/tablespace.c:1173 +#: commands/indexcmds.c:717 commands/tablecmds.c:704 commands/tablespace.c:1173 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "kan inte sätta standard-tablespace för partitionerade relationer" -#: commands/indexcmds.c:749 commands/tablecmds.c:737 commands/tablecmds.c:13071 -#: commands/tablecmds.c:13185 +#: commands/indexcmds.c:749 commands/tablecmds.c:739 commands/tablecmds.c:13162 +#: commands/tablecmds.c:13276 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "bara delade relationer kan placeras i tablespace:et pg_global" @@ -7806,206 +7771,206 @@ msgstr "%s-villkor kan inte användas när partitionsnyckel innehåller uttryck" #: commands/indexcmds.c:992 #, c-format -msgid "insufficient columns in %s constraint definition" -msgstr "otillräckligt med kolumner i villkorsdefinitionen %s" +msgid "unique constraint on partitioned table must include all partitioning columns" +msgstr "unikvillkor på partitionerad tabell måste inkludera alla partitioneringskolumner" -#: commands/indexcmds.c:994 +#: commands/indexcmds.c:993 #, c-format msgid "%s constraint on table \"%s\" lacks column \"%s\" which is part of the partition key." msgstr "villkoret %s på tabell \"%s\" saknar kolumn \"%s\" som är en del av partioneringsnyckeln." -#: commands/indexcmds.c:1013 commands/indexcmds.c:1032 +#: commands/indexcmds.c:1012 commands/indexcmds.c:1031 #, c-format msgid "index creation on system columns is not supported" msgstr "skapa index för systemkolumner stöds inte" -#: commands/indexcmds.c:1057 +#: commands/indexcmds.c:1056 #, c-format msgid "%s %s will create implicit index \"%s\" for table \"%s\"" msgstr "%s %s kommer skapa ett implicit index \"%s\" för tabell \"%s\"" -#: commands/indexcmds.c:1198 tcop/utility.c:1459 +#: commands/indexcmds.c:1197 tcop/utility.c:1495 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "kan inte skapa unikt index för partitionerad tabell \"%s\"" -#: commands/indexcmds.c:1200 tcop/utility.c:1461 +#: commands/indexcmds.c:1199 tcop/utility.c:1497 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "Tabell \"%s\" innehåller partitioner som är främmande tabeller." -#: commands/indexcmds.c:1629 +#: commands/indexcmds.c:1628 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "funktioner i indexpredikat måste vara markerade IMMUTABLE" -#: commands/indexcmds.c:1695 parser/parse_utilcmd.c:2352 -#: parser/parse_utilcmd.c:2487 +#: commands/indexcmds.c:1694 parser/parse_utilcmd.c:2440 +#: parser/parse_utilcmd.c:2575 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "kolumn \"%s\" angiven i en nyckel existerar inte" -#: commands/indexcmds.c:1719 parser/parse_utilcmd.c:1670 +#: commands/indexcmds.c:1718 parser/parse_utilcmd.c:1776 #, c-format msgid "expressions are not supported in included columns" msgstr "uttryck stöds inte i inkluderade kolumner" -#: commands/indexcmds.c:1760 +#: commands/indexcmds.c:1759 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "funktioner i indexuttryck måste vara markerade IMMUTABLE" -#: commands/indexcmds.c:1775 +#: commands/indexcmds.c:1774 #, c-format msgid "including column does not support a collation" msgstr "inkluderad kolumn stöder inte jämförelse (collation)" -#: commands/indexcmds.c:1779 +#: commands/indexcmds.c:1778 #, c-format msgid "including column does not support an operator class" msgstr "inkluderad kolumn stöder inte en operatorklass" -#: commands/indexcmds.c:1783 +#: commands/indexcmds.c:1782 #, c-format msgid "including column does not support ASC/DESC options" msgstr "inkluderad kolumn stöder inte ASC/DESC-flaggor" -#: commands/indexcmds.c:1787 +#: commands/indexcmds.c:1786 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "inkluderad kolumn stöder inte NULLS FIRST/LAST-flaggor" -#: commands/indexcmds.c:1814 +#: commands/indexcmds.c:1813 #, c-format msgid "could not determine which collation to use for index expression" msgstr "kunde inte bestämma vilken jämförelse (collation) som skulle användas för indexuttryck" -#: commands/indexcmds.c:1822 commands/tablecmds.c:15951 commands/typecmds.c:770 -#: parser/parse_expr.c:2850 parser/parse_type.c:566 parser/parse_utilcmd.c:3562 -#: parser/parse_utilcmd.c:4123 utils/adt/misc.c:502 +#: commands/indexcmds.c:1821 commands/tablecmds.c:16042 commands/typecmds.c:771 +#: parser/parse_expr.c:2850 parser/parse_type.c:566 parser/parse_utilcmd.c:3649 +#: parser/parse_utilcmd.c:4210 utils/adt/misc.c:503 #, c-format msgid "collations are not supported by type %s" msgstr "jämförelser (collation) stöds inte av typ %s" -#: commands/indexcmds.c:1860 +#: commands/indexcmds.c:1859 #, c-format msgid "operator %s is not commutative" msgstr "operatorn %s är inte kommutativ" -#: commands/indexcmds.c:1862 +#: commands/indexcmds.c:1861 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "Bara kommutativa operatorer kan användas i uteslutningsvillkor" -#: commands/indexcmds.c:1888 +#: commands/indexcmds.c:1887 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "operatorn \"%s\" är inte en medlem i operatorfamiljen \"%s\"" -#: commands/indexcmds.c:1891 +#: commands/indexcmds.c:1890 #, c-format msgid "The exclusion operator must be related to the index operator class for the constraint." msgstr "Uteslutningsoperatorn måste vara relaterad till indexoperatorklassen för villkoret." -#: commands/indexcmds.c:1926 +#: commands/indexcmds.c:1925 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "accessmetod \"%s\" stöder inte ASC/DESC-flaggor" -#: commands/indexcmds.c:1931 +#: commands/indexcmds.c:1930 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "accessmetod \"%s\" stöder inte NULLS FIRST/LAST-flaggor" -#: commands/indexcmds.c:1977 commands/tablecmds.c:15976 -#: commands/tablecmds.c:15982 commands/typecmds.c:1922 +#: commands/indexcmds.c:1976 commands/tablecmds.c:16067 +#: commands/tablecmds.c:16073 commands/typecmds.c:1945 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "datatyp %s har ingen standardoperatorklass för accessmetod \"%s\"" -#: commands/indexcmds.c:1979 +#: commands/indexcmds.c:1978 #, c-format msgid "You must specify an operator class for the index or define a default operator class for the data type." msgstr "Du måste ange en operatorklass för indexet eller definiera en standardoperatorklass för datatypen." -#: commands/indexcmds.c:2008 commands/indexcmds.c:2016 +#: commands/indexcmds.c:2007 commands/indexcmds.c:2015 #: commands/opclasscmds.c:208 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "operatorklass \"%s\" existerar inte för accessmetod \"%s\"" -#: commands/indexcmds.c:2030 commands/typecmds.c:1910 +#: commands/indexcmds.c:2029 commands/typecmds.c:1933 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "operatorklass \"%s\" accepterar inte datatypen %s" -#: commands/indexcmds.c:2120 +#: commands/indexcmds.c:2119 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "det finns flera standardoperatorklasser för datatypen %s" -#: commands/indexcmds.c:2569 +#: commands/indexcmds.c:2568 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "tabell \"%s\" har inga index som kan reindexeras parallellt" -#: commands/indexcmds.c:2580 +#: commands/indexcmds.c:2579 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "tabell \"%s\" har inga index som kan omindexeras" -#: commands/indexcmds.c:2619 commands/indexcmds.c:2893 -#: commands/indexcmds.c:2986 +#: commands/indexcmds.c:2618 commands/indexcmds.c:2899 +#: commands/indexcmds.c:2992 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "kan inte omindexera systemkataloger parallellt" -#: commands/indexcmds.c:2642 +#: commands/indexcmds.c:2641 #, c-format msgid "can only reindex the currently open database" msgstr "kan bara omindexera den aktiva databasen" -#: commands/indexcmds.c:2733 +#: commands/indexcmds.c:2732 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "kan inte omindexera systemkataloger parallellt, hoppar över alla" -#: commands/indexcmds.c:2785 commands/indexcmds.c:3466 +#: commands/indexcmds.c:2784 commands/indexcmds.c:3503 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "tabell \"%s.%s\" omindexerades" -#: commands/indexcmds.c:2908 commands/indexcmds.c:2954 +#: commands/indexcmds.c:2914 commands/indexcmds.c:2960 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "kan inte parallellt omindexera ogiltigt index \"%s.%s\", hoppar över" -#: commands/indexcmds.c:2914 +#: commands/indexcmds.c:2920 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "kan inte parallellt omindexera uteslutningsvillkorsindex \"%s.%s\", hoppar över" -#: commands/indexcmds.c:2996 +#: commands/indexcmds.c:3002 #, c-format msgid "cannot reindex invalid index on TOAST table concurrently" msgstr "kan inte parallellt omindexera ogiltigt index på TOAST-tabell" -#: commands/indexcmds.c:3024 +#: commands/indexcmds.c:3030 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "kan inte parallellt omindexera denna sorts relation" -#: commands/indexcmds.c:3448 commands/indexcmds.c:3459 +#: commands/indexcmds.c:3485 commands/indexcmds.c:3496 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "index \"%s.%s\" omindexerades" -#: commands/indexcmds.c:3491 +#: commands/indexcmds.c:3528 #, c-format msgid "REINDEX is not yet implemented for partitioned indexes" msgstr "REINDEX är ännu inte implementerad för partionerade index" -#: commands/lockcmds.c:91 commands/tablecmds.c:5543 commands/trigger.c:295 +#: commands/lockcmds.c:91 commands/tablecmds.c:5629 commands/trigger.c:295 #: rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:928 #, c-format msgid "\"%s\" is not a table or view" @@ -8141,23 +8106,23 @@ msgstr "index-sök-operatorer måste returnera boolean" #: commands/opclasscmds.c:1159 #, c-format -msgid "associated data types for opclass options parsing functions must match opclass input type" -msgstr "associerade datatyper för opklassens flaggparsningsfunktioner måste matcha opklassens inputtyp" +msgid "associated data types for operator class options parsing functions must match opclass input type" +msgstr "associerade datatyper för operatorklassens flaggparsningsfunktioner måste matcha opklassens inputtyp" #: commands/opclasscmds.c:1166 #, c-format -msgid "left and right associated data types for opclass options parsing functions must match" -msgstr "vänster och höger associerade datatyper för opklassens flaggparsningsfunktioner måste matcha" +msgid "left and right associated data types for operator class options parsing functions must match" +msgstr "vänster och höger associerade datatyper för operatorklassens flaggparsningsfunktioner måste matcha" #: commands/opclasscmds.c:1174 #, c-format -msgid "invalid opclass options parsing function" -msgstr "ogiltig flaggparsningsfunktion i opklass" +msgid "invalid operator class options parsing function" +msgstr "ogiltig flaggparsningsfunktion i operatorklass" #: commands/opclasscmds.c:1175 #, c-format -msgid "Valid signature of opclass options parsing function is '%s'." -msgstr "Giltig signatud för flaggparsningsfunktion i opklass är '%s'." +msgid "Valid signature of operator class options parsing function is %s." +msgstr "Giltig signatud för flaggparsningsfunktion i operatorklass är %s." #: commands/opclasscmds.c:1194 #, c-format @@ -8199,72 +8164,72 @@ msgstr "btree-equal-image-funktioner måste ha ett argument" msgid "btree equal image functions must return boolean" msgstr "btree-equal-image-funktioner måste returnera en boolean" -#: commands/opclasscmds.c:1266 +#: commands/opclasscmds.c:1267 #, c-format msgid "btree equal image functions must not be cross-type" msgstr "btree-equal-image-funktioner får inte fungera mellan typer" -#: commands/opclasscmds.c:1276 +#: commands/opclasscmds.c:1277 #, c-format msgid "hash function 1 must have one argument" msgstr "hash-funktion 1 måste a ett argument" -#: commands/opclasscmds.c:1280 +#: commands/opclasscmds.c:1281 #, c-format msgid "hash function 1 must return integer" msgstr "hash-funktion 1 måste returnera integer" -#: commands/opclasscmds.c:1287 +#: commands/opclasscmds.c:1288 #, c-format msgid "hash function 2 must have two arguments" msgstr "hash-funktion 2 måste ha två argument" -#: commands/opclasscmds.c:1291 +#: commands/opclasscmds.c:1292 #, c-format msgid "hash function 2 must return bigint" msgstr "hash-funktion 2 måste returnera bigint" -#: commands/opclasscmds.c:1316 +#: commands/opclasscmds.c:1317 #, c-format msgid "associated data types must be specified for index support function" msgstr "associerade datatyper måste anges för ett index hjälpfunktion" -#: commands/opclasscmds.c:1341 +#: commands/opclasscmds.c:1342 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "funktionsnummer %d för (%s,%s) finns med fler än en gång" -#: commands/opclasscmds.c:1348 +#: commands/opclasscmds.c:1349 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "operator nummer %d för (%s,%s) finns med fler än en gång" -#: commands/opclasscmds.c:1397 +#: commands/opclasscmds.c:1398 #, c-format msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "operator %d(%s,%s) finns redan i operatorfamilj \"%s\"" -#: commands/opclasscmds.c:1514 +#: commands/opclasscmds.c:1515 #, c-format msgid "function %d(%s,%s) already exists in operator family \"%s\"" msgstr "funktionen %d(%s,%s) finns redan i operatorfamilj \"%s\"" -#: commands/opclasscmds.c:1605 +#: commands/opclasscmds.c:1606 #, c-format msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" msgstr "operator %d(%s,%s) finns inte i operatorfamilj \"%s\"" -#: commands/opclasscmds.c:1645 +#: commands/opclasscmds.c:1646 #, c-format msgid "function %d(%s,%s) does not exist in operator family \"%s\"" msgstr "funktionen %d(%s,%s) finns inte i operatorfamilj \"%s\"" -#: commands/opclasscmds.c:1775 +#: commands/opclasscmds.c:1776 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "operatorklass \"%s\" för accessmetod \"%s\" finns redan i schema \"%s\"" -#: commands/opclasscmds.c:1798 +#: commands/opclasscmds.c:1799 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "operatorfamilj \"%s\" för accessmetod \"%s\" finns redan i schema \"%s\"" @@ -8274,7 +8239,7 @@ msgstr "operatorfamilj \"%s\" för accessmetod \"%s\" finns redan i schema \"%s\ msgid "SETOF type not allowed for operator argument" msgstr "SETOF-typ tillåts inte som operatorargument" -#: commands/operatorcmds.c:152 commands/operatorcmds.c:455 +#: commands/operatorcmds.c:152 commands/operatorcmds.c:467 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "operatorattribut \"%s\" känns inte igen" @@ -8294,21 +8259,26 @@ msgstr "minst en av vänsterargument eller högerargument måste anges" msgid "restriction estimator function %s must return type %s" msgstr "begränsningsuppskattningsfunktionen %s måste returnera typen %s" -#: commands/operatorcmds.c:324 +#: commands/operatorcmds.c:321 +#, c-format +msgid "join estimator function %s has multiple matches" +msgstr "join-uppskattningsfunktion %s har multipla träffar" + +#: commands/operatorcmds.c:336 #, c-format msgid "join estimator function %s must return type %s" msgstr "join-uppskattningsfunktion %s måste returnera typ %s" -#: commands/operatorcmds.c:449 +#: commands/operatorcmds.c:461 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "operatorattribut \"%s\" kan inte ändras" -#: commands/policy.c:88 commands/policy.c:401 commands/policy.c:491 -#: commands/tablecmds.c:1499 commands/tablecmds.c:1981 -#: commands/tablecmds.c:3020 commands/tablecmds.c:5522 -#: commands/tablecmds.c:8249 commands/tablecmds.c:15541 -#: commands/tablecmds.c:15576 commands/trigger.c:301 commands/trigger.c:1206 +#: commands/policy.c:88 commands/policy.c:381 commands/policy.c:471 +#: commands/tablecmds.c:1512 commands/tablecmds.c:1994 +#: commands/tablecmds.c:3076 commands/tablecmds.c:5608 +#: commands/tablecmds.c:8395 commands/tablecmds.c:15632 +#: commands/tablecmds.c:15667 commands/trigger.c:301 commands/trigger.c:1206 #: commands/trigger.c:1315 rewrite/rewriteDefine.c:277 #: rewrite/rewriteDefine.c:933 rewrite/rewriteRemove.c:80 #, c-format @@ -8325,32 +8295,32 @@ msgstr "hoppar över angivna roller utöver PUBLIC" msgid "All roles are members of the PUBLIC role." msgstr "Alla roller är medlemmar i PUBLIC-rollen." -#: commands/policy.c:515 +#: commands/policy.c:495 #, c-format msgid "role \"%s\" could not be removed from policy \"%s\" on \"%s\"" msgstr "rollen \"%s\" kunde inte tas bort från policyn \"%s\" på \"%s\"" -#: commands/policy.c:724 +#: commands/policy.c:704 #, c-format msgid "WITH CHECK cannot be applied to SELECT or DELETE" msgstr "WITH CHECK kan inte appliceras på SELECT eller DELETE" -#: commands/policy.c:733 commands/policy.c:1038 +#: commands/policy.c:713 commands/policy.c:1018 #, c-format msgid "only WITH CHECK expression allowed for INSERT" msgstr "bara WITH CHECK-uttryuck tillåts för INSERT" -#: commands/policy.c:808 commands/policy.c:1261 +#: commands/policy.c:788 commands/policy.c:1241 #, c-format msgid "policy \"%s\" for table \"%s\" already exists" msgstr "policy \"%s\" för tabell \"%s\" finns redan" -#: commands/policy.c:1010 commands/policy.c:1289 commands/policy.c:1360 +#: commands/policy.c:990 commands/policy.c:1269 commands/policy.c:1340 #, c-format msgid "policy \"%s\" for table \"%s\" does not exist" msgstr "policy \"%s\" för tabell \"%s\" finns inte" -#: commands/policy.c:1028 +#: commands/policy.c:1008 #, c-format msgid "only USING expression allowed for SELECT, DELETE" msgstr "bara USING-uttryck tillåts för SELECT, DELETE" @@ -8621,8 +8591,8 @@ msgstr "tabellen måste vara i samma schema som tabellen den är länkad till" msgid "cannot change ownership of identity sequence" msgstr "kan inte byta ägare på identitetssekvens" -#: commands/sequence.c:1718 commands/tablecmds.c:12453 -#: commands/tablecmds.c:14967 +#: commands/sequence.c:1718 commands/tablecmds.c:12544 +#: commands/tablecmds.c:15058 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "Sekvens \"%s\" är länkad till tabell \"%s\"" @@ -8682,17 +8652,17 @@ msgstr "duplicerade kolumnnamn i statistikdefinition" msgid "unrecognized statistics kind \"%s\"" msgstr "okänd statistiksort \"%s\"" -#: commands/statscmds.c:442 commands/tablecmds.c:7270 +#: commands/statscmds.c:444 commands/tablecmds.c:7416 #, c-format msgid "statistics target %d is too low" msgstr "statistikmålet %d är för lågt" -#: commands/statscmds.c:450 commands/tablecmds.c:7278 +#: commands/statscmds.c:452 commands/tablecmds.c:7424 #, c-format msgid "lowering statistics target to %d" msgstr "minskar statistikmålet till %d" -#: commands/statscmds.c:473 +#: commands/statscmds.c:475 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "statistikobjekt \"%s.%s\" finns inte, hoppar över" @@ -8727,7 +8697,7 @@ msgid "must be superuser to create subscriptions" msgstr "måste vara superanvändare för att skapa prenumerationer" #: commands/subscriptioncmds.c:442 commands/subscriptioncmds.c:530 -#: replication/logical/tablesync.c:857 replication/logical/worker.c:2085 +#: replication/logical/tablesync.c:857 replication/logical/worker.c:2096 #, c-format msgid "could not connect to the publisher: %s" msgstr "kunde inte ansluta till publicerare: %s" @@ -8881,8 +8851,8 @@ msgstr "materialiserad vy \"%s\" finns inte, hoppar över" msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Använd DROP MATERIALIZED VIEW för att ta bort en materialiserad vy." -#: commands/tablecmds.c:252 commands/tablecmds.c:276 commands/tablecmds.c:17140 -#: parser/parse_utilcmd.c:2084 +#: commands/tablecmds.c:252 commands/tablecmds.c:276 commands/tablecmds.c:17231 +#: parser/parse_utilcmd.c:2172 #, c-format msgid "index \"%s\" does not exist" msgstr "index \"%s\" finns inte" @@ -8905,8 +8875,8 @@ msgstr "\"%s\" är inte en typ" msgid "Use DROP TYPE to remove a type." msgstr "Använd DROP TYPE för att ta bort en typ." -#: commands/tablecmds.c:264 commands/tablecmds.c:12292 -#: commands/tablecmds.c:14747 +#: commands/tablecmds.c:264 commands/tablecmds.c:12383 +#: commands/tablecmds.c:14838 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "främmande tabell \"%s\" finns inte" @@ -8920,119 +8890,124 @@ msgstr "främmande tabell \"%s\" finns inte, hoppar över" msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Använd DROP FOREIGN TABLE för att ta bort en främmande tabell." -#: commands/tablecmds.c:618 +#: commands/tablecmds.c:620 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT kan bara användas på temporära tabeller" -#: commands/tablecmds.c:649 +#: commands/tablecmds.c:651 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "kan inte skapa temporär tabell i en säkerhetsbegränsad operation" -#: commands/tablecmds.c:685 commands/tablecmds.c:13651 +#: commands/tablecmds.c:687 commands/tablecmds.c:13742 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "relationen \"%s\" skulle ärvas mer än en gång" -#: commands/tablecmds.c:866 +#: commands/tablecmds.c:868 #, c-format msgid "specifying a table access method is not supported on a partitioned table" msgstr "ange tabellaccessmetod stöds inte för en partitionerad tabell" -#: commands/tablecmds.c:962 +#: commands/tablecmds.c:964 #, c-format msgid "\"%s\" is not partitioned" msgstr "\"%s\" är inte partitionerad" -#: commands/tablecmds.c:1056 +#: commands/tablecmds.c:1058 #, c-format msgid "cannot partition using more than %d columns" msgstr "kan inte partitionera med fler än %d kolumner" -#: commands/tablecmds.c:1112 +#: commands/tablecmds.c:1114 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "kan inte skapa främmande partition för partitionerad tabell \"%s\"" -#: commands/tablecmds.c:1114 +#: commands/tablecmds.c:1116 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "Tabell \"%s\" innehåller index som är unika." -#: commands/tablecmds.c:1277 +#: commands/tablecmds.c:1279 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY stöder inte att slänga flera objekt" -#: commands/tablecmds.c:1281 +#: commands/tablecmds.c:1283 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY stöder inte CASCADE" -#: commands/tablecmds.c:1641 +#: commands/tablecmds.c:1384 +#, c-format +msgid "cannot drop partitioned index \"%s\" concurrently" +msgstr "kan inte parallellt ta bort partitionerat index \"%s\"" + +#: commands/tablecmds.c:1654 #, c-format msgid "cannot truncate only a partitioned table" msgstr "kan inte trunkera enbart en partitionerad tabell" -#: commands/tablecmds.c:1642 +#: commands/tablecmds.c:1655 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "Ange inte nyckelordet ONLY eller använd TRUNCATE ONLY direkt på partitionerna." -#: commands/tablecmds.c:1711 +#: commands/tablecmds.c:1724 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "truncate svämmar över (cascades) till \"%s\"" -#: commands/tablecmds.c:2018 +#: commands/tablecmds.c:2031 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "kan inte trunkera temporära tabeller tillhörande andra sessioner" -#: commands/tablecmds.c:2242 commands/tablecmds.c:13548 +#: commands/tablecmds.c:2259 commands/tablecmds.c:13639 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "kan inte ärva från partitionerad tabell \"%s\"" -#: commands/tablecmds.c:2247 +#: commands/tablecmds.c:2264 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "kan inte ärva från partition \"%s\"" -#: commands/tablecmds.c:2255 parser/parse_utilcmd.c:2314 -#: parser/parse_utilcmd.c:2456 +#: commands/tablecmds.c:2272 parser/parse_utilcmd.c:2402 +#: parser/parse_utilcmd.c:2544 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "ärvd relation \"%s\" är inte en tabell eller främmande tabell" -#: commands/tablecmds.c:2267 +#: commands/tablecmds.c:2284 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "kan inte skapa en temporär relation som partition till en permanent relation \"%s\"" -#: commands/tablecmds.c:2276 commands/tablecmds.c:13527 +#: commands/tablecmds.c:2293 commands/tablecmds.c:13618 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "kan inte ärva från en temporär relation \"%s\"" -#: commands/tablecmds.c:2286 commands/tablecmds.c:13535 +#: commands/tablecmds.c:2303 commands/tablecmds.c:13626 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "kan inte ärva från en temporär relation i en annan session" -#: commands/tablecmds.c:2337 +#: commands/tablecmds.c:2357 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "slår samman multipla ärvda definitioner av kolumn \"%s\"" -#: commands/tablecmds.c:2345 +#: commands/tablecmds.c:2365 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "ärvd kolumn \"%s\" har en typkonflikt" -#: commands/tablecmds.c:2347 commands/tablecmds.c:2370 -#: commands/tablecmds.c:2583 commands/tablecmds.c:2613 +#: commands/tablecmds.c:2367 commands/tablecmds.c:2390 +#: commands/tablecmds.c:2639 commands/tablecmds.c:2669 #: parser/parse_coerce.c:1935 parser/parse_coerce.c:1955 #: parser/parse_coerce.c:1975 parser/parse_coerce.c:2030 #: parser/parse_coerce.c:2107 parser/parse_coerce.c:2141 @@ -9041,1178 +9016,1184 @@ msgstr "ärvd kolumn \"%s\" har en typkonflikt" msgid "%s versus %s" msgstr "%s kontra %s" -#: commands/tablecmds.c:2356 +#: commands/tablecmds.c:2376 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "ärvd kolumn \"%s\" har en jämförelsekonflikt" -#: commands/tablecmds.c:2358 commands/tablecmds.c:2595 -#: commands/tablecmds.c:6024 +#: commands/tablecmds.c:2378 commands/tablecmds.c:2651 +#: commands/tablecmds.c:6106 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "\"%s\" kontra \"%s\"" -#: commands/tablecmds.c:2368 +#: commands/tablecmds.c:2388 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "ärvd kolumn \"%s\" har en lagringsparameterkonflikt" -#: commands/tablecmds.c:2384 +#: commands/tablecmds.c:2404 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "ärvd kolumn \"%s\" har en genereringskonflikt" -#: commands/tablecmds.c:2489 commands/tablecmds.c:11097 -#: parser/parse_utilcmd.c:1094 parser/parse_utilcmd.c:1181 -#: parser/parse_utilcmd.c:1597 parser/parse_utilcmd.c:1706 +#: commands/tablecmds.c:2490 commands/tablecmds.c:2545 +#: commands/tablecmds.c:11188 parser/parse_utilcmd.c:1252 +#: parser/parse_utilcmd.c:1295 parser/parse_utilcmd.c:1703 +#: parser/parse_utilcmd.c:1812 #, c-format msgid "cannot convert whole-row table reference" msgstr "kan inte konvertera hela-raden-tabellreferens" -#: commands/tablecmds.c:2490 parser/parse_utilcmd.c:1182 +#: commands/tablecmds.c:2491 parser/parse_utilcmd.c:1253 +#, c-format +msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." +msgstr "Genereringsuttryck för kolumn \"%s\" innehåller en hela-raden-referens på tabellen \"%s\"." + +#: commands/tablecmds.c:2546 parser/parse_utilcmd.c:1296 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "Villkor \"%s\" innehåller en hela-raden-referens på tabellen \"%s\"." -#: commands/tablecmds.c:2569 +#: commands/tablecmds.c:2625 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "slår samman kolumn \"%s\" med ärvd definition" -#: commands/tablecmds.c:2573 +#: commands/tablecmds.c:2629 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "flyttar och slår samman kolumn \"%s\" med ärvd definition" -#: commands/tablecmds.c:2574 +#: commands/tablecmds.c:2630 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "Användarangiven kolumn flyttad till den ärvda kolumnens position." -#: commands/tablecmds.c:2581 +#: commands/tablecmds.c:2637 #, c-format msgid "column \"%s\" has a type conflict" msgstr "kolumnen \"%s\" har en typkonflikt" -#: commands/tablecmds.c:2593 +#: commands/tablecmds.c:2649 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "kolumn \"%s\" har en jämförelsekonflikt" -#: commands/tablecmds.c:2611 +#: commands/tablecmds.c:2667 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "kolumnen \"%s\" har en lagringsparameterkonflikt" -#: commands/tablecmds.c:2639 +#: commands/tablecmds.c:2695 #, c-format msgid "child column \"%s\" specifies generation expression" msgstr "barnkolumn \"%s\" använder genereringsuttryck" -#: commands/tablecmds.c:2641 +#: commands/tablecmds.c:2697 #, c-format msgid "Omit the generation expression in the definition of the child table column to inherit the generation expression from the parent table." msgstr "Utelämna genereringsuttrycket i definitionen av barntabellkolumnen för att ärva genereringsuttrycket från föräldratabellen." -#: commands/tablecmds.c:2645 +#: commands/tablecmds.c:2701 #, c-format msgid "column \"%s\" inherits from generated column but specifies default" msgstr "kolumnen \"%s\" ärver från genererad kolumn men har \"default\"" -#: commands/tablecmds.c:2650 +#: commands/tablecmds.c:2706 #, c-format msgid "column \"%s\" inherits from generated column but specifies identity" msgstr "kolumnen \"%s\" ärver från genererad kolumn men har \"identity\"" -#: commands/tablecmds.c:2759 +#: commands/tablecmds.c:2815 #, c-format msgid "column \"%s\" inherits conflicting generation expressions" msgstr "kolumnen \"%s\" ärver motstridiga genereringsuttryck" -#: commands/tablecmds.c:2764 +#: commands/tablecmds.c:2820 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "kolumnen \"%s\" ärver motstridiga default-värden" -#: commands/tablecmds.c:2766 +#: commands/tablecmds.c:2822 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "För att lösa konflikten, ange ett explicit default-värde." -#: commands/tablecmds.c:2812 +#: commands/tablecmds.c:2868 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "check-villkor \"%s\" finns med flera gånger men med olika uttryck" -#: commands/tablecmds.c:2989 +#: commands/tablecmds.c:3045 #, c-format msgid "cannot rename column of typed table" msgstr "kan inte byta namn på kolumn i typad tabell" -#: commands/tablecmds.c:3008 +#: commands/tablecmds.c:3064 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "\"%s\" är inte en tabell, vy, materialiserad vy, composite-typ, index eller främmande tabell" -#: commands/tablecmds.c:3102 +#: commands/tablecmds.c:3158 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "ärvd kolumn \"%s\" måste döpas om i barntabellerna också" -#: commands/tablecmds.c:3134 +#: commands/tablecmds.c:3190 #, c-format msgid "cannot rename system column \"%s\"" msgstr "kan inte ändra döpa om systemkolumn \"%s\"" -#: commands/tablecmds.c:3149 +#: commands/tablecmds.c:3205 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "kan inte döpa om ärvd kolumn \"%s\"" -#: commands/tablecmds.c:3301 +#: commands/tablecmds.c:3357 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "ärvt villkor \"%s\" måste döpas om i barntabellerna också" -#: commands/tablecmds.c:3308 +#: commands/tablecmds.c:3364 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "kan inte döpa om ärvt villkor \"%s\"" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3541 +#: commands/tablecmds.c:3597 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "kan inte %s \"%s\" då den används av aktiva frågor i denna session" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3550 +#: commands/tablecmds.c:3606 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "kan inte %s \"%s\" då den har utlösarhändelser som väntar" -#: commands/tablecmds.c:4173 commands/tablecmds.c:4188 +#: commands/tablecmds.c:4237 commands/tablecmds.c:4252 #, c-format msgid "cannot change persistence setting twice" msgstr "kan inte ändra persistensinställning två gånger" -#: commands/tablecmds.c:4883 +#: commands/tablecmds.c:4969 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "kan inte skriva om systemkolumn \"%s\"" -#: commands/tablecmds.c:4889 +#: commands/tablecmds.c:4975 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "kan inte skriva om tabell \"%s\" som används som katalogtabell" -#: commands/tablecmds.c:4899 +#: commands/tablecmds.c:4985 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "kan inte skriva om temporära tabeller som tillhör andra sessioner" -#: commands/tablecmds.c:5188 +#: commands/tablecmds.c:5274 #, c-format msgid "rewriting table \"%s\"" msgstr "skriver om tabell \"%s\"" -#: commands/tablecmds.c:5192 +#: commands/tablecmds.c:5278 #, c-format msgid "verifying table \"%s\"" msgstr "verifierar tabell \"%s\"" -#: commands/tablecmds.c:5357 +#: commands/tablecmds.c:5443 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "kolumn \"%s\" i relation \"%s\" innehåller null-värden" -#: commands/tablecmds.c:5374 commands/tablecmds.c:10293 +#: commands/tablecmds.c:5460 #, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" msgstr "check-villkor \"%s\" i relation \"%s\" bryts av någon rad" -#: commands/tablecmds.c:5393 partitioning/partbounds.c:3232 +#: commands/tablecmds.c:5479 partitioning/partbounds.c:3235 #, c-format msgid "updated partition constraint for default partition \"%s\" would be violated by some row" msgstr "uppdaterat partitionsintegritetsvillkor för standardpartition \"%s\" skulle brytas mot av någon rad" -#: commands/tablecmds.c:5399 +#: commands/tablecmds.c:5485 #, c-format msgid "partition constraint of relation \"%s\" is violated by some row" msgstr "partitionsvillkor i relation \"%s\" bryts mot av någon rad" -#: commands/tablecmds.c:5546 commands/trigger.c:1200 commands/trigger.c:1306 +#: commands/tablecmds.c:5632 commands/trigger.c:1200 commands/trigger.c:1306 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "\"%s\" är inte en tabell, vy eller främmande tabell" -#: commands/tablecmds.c:5549 +#: commands/tablecmds.c:5635 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "\"%s\" är inte en tabell, vy, materialiserad vy eller ett index" -#: commands/tablecmds.c:5555 +#: commands/tablecmds.c:5641 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "\"%s\" är inte en tabell, materialiserad vy eller ett index" -#: commands/tablecmds.c:5558 +#: commands/tablecmds.c:5644 #, c-format msgid "\"%s\" is not a table, materialized view, or foreign table" msgstr "\"%s\" är inte en tabell, materialiserad vy eller en främmande tabell" -#: commands/tablecmds.c:5561 +#: commands/tablecmds.c:5647 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "\"%s\" är inte en tabell eller främmande tabell" -#: commands/tablecmds.c:5564 +#: commands/tablecmds.c:5650 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "\"%s\" är inte en tabell, composite-typ eller en främmande tabell" -#: commands/tablecmds.c:5567 +#: commands/tablecmds.c:5653 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "\"%s\" är inte en tabell, materialiserad vy, index eller en främmande tabell" -#: commands/tablecmds.c:5577 +#: commands/tablecmds.c:5663 #, c-format msgid "\"%s\" is of the wrong type" msgstr "\"%s\" har fel typ" -#: commands/tablecmds.c:5784 commands/tablecmds.c:5791 +#: commands/tablecmds.c:5866 commands/tablecmds.c:5873 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "kan inte ändra typen \"%s\" eftersom kolumn \"%s.%s\" använder den" -#: commands/tablecmds.c:5798 +#: commands/tablecmds.c:5880 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "kan inte ändra främmande tabell \"%s\" eftersom kolumn \"%s.%s\" använder dess radtyp" -#: commands/tablecmds.c:5805 +#: commands/tablecmds.c:5887 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "kan inte ändra tabell \"%s\" eftersom kolumn \"%s.%s\" använder dess radtyp" -#: commands/tablecmds.c:5861 +#: commands/tablecmds.c:5943 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "kan inte ändra typ \"%s\" eftersom det är typen för en typad tabell" -#: commands/tablecmds.c:5863 +#: commands/tablecmds.c:5945 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Använd ALTER ... CASCADE för att ändra på de typade tabellerna också." -#: commands/tablecmds.c:5909 +#: commands/tablecmds.c:5991 #, c-format msgid "type %s is not a composite type" msgstr "typen %s är inte en composite-typ" -#: commands/tablecmds.c:5936 +#: commands/tablecmds.c:6018 #, c-format msgid "cannot add column to typed table" msgstr "kan inte lägga till kolumn till typad tabell" -#: commands/tablecmds.c:5987 +#: commands/tablecmds.c:6069 #, c-format msgid "cannot add column to a partition" msgstr "kan inte lägga till kolumn till partition" -#: commands/tablecmds.c:6016 commands/tablecmds.c:13778 +#: commands/tablecmds.c:6098 commands/tablecmds.c:13869 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "barntabell \"%s\" har annan typ på kolumn \"%s\"" -#: commands/tablecmds.c:6022 commands/tablecmds.c:13785 +#: commands/tablecmds.c:6104 commands/tablecmds.c:13876 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "barntabell \"%s\" har annan jämförelse (collation) på kolumn \"%s\"" -#: commands/tablecmds.c:6036 +#: commands/tablecmds.c:6118 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "slår samman definitionen av kolumn \"%s\" för barn \"%s\"" -#: commands/tablecmds.c:6079 +#: commands/tablecmds.c:6161 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "kan inte rekursivt lägga till identitetskolumn till tabell som har barntabeller" -#: commands/tablecmds.c:6316 +#: commands/tablecmds.c:6398 #, c-format msgid "column must be added to child tables too" msgstr "kolumnen måste läggas till i barntabellerna också" -#: commands/tablecmds.c:6394 +#: commands/tablecmds.c:6476 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "kolumn \"%s\" i relation \"%s\" finns redan, hoppar över" -#: commands/tablecmds.c:6401 +#: commands/tablecmds.c:6483 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "kolumn \"%s\" i relation \"%s\" finns redan" -#: commands/tablecmds.c:6467 commands/tablecmds.c:10735 +#: commands/tablecmds.c:6549 commands/tablecmds.c:10826 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "kan inte ta bort villkor från bara den partitionerade tabellen när partitioner finns" -#: commands/tablecmds.c:6468 commands/tablecmds.c:6737 -#: commands/tablecmds.c:7688 commands/tablecmds.c:10736 +#: commands/tablecmds.c:6550 commands/tablecmds.c:6854 +#: commands/tablecmds.c:7834 commands/tablecmds.c:10827 #, c-format msgid "Do not specify the ONLY keyword." msgstr "Ange inte nyckelordet ONLY." -#: commands/tablecmds.c:6505 commands/tablecmds.c:6663 -#: commands/tablecmds.c:6805 commands/tablecmds.c:6890 -#: commands/tablecmds.c:6984 commands/tablecmds.c:7043 -#: commands/tablecmds.c:7145 commands/tablecmds.c:7311 -#: commands/tablecmds.c:7381 commands/tablecmds.c:7474 -#: commands/tablecmds.c:10890 commands/tablecmds.c:12315 +#: commands/tablecmds.c:6587 commands/tablecmds.c:6780 +#: commands/tablecmds.c:6922 commands/tablecmds.c:7036 +#: commands/tablecmds.c:7130 commands/tablecmds.c:7189 +#: commands/tablecmds.c:7291 commands/tablecmds.c:7457 +#: commands/tablecmds.c:7527 commands/tablecmds.c:7620 +#: commands/tablecmds.c:10981 commands/tablecmds.c:12406 #, c-format msgid "cannot alter system column \"%s\"" msgstr "kan inte ändra systemkolumn \"%s\"" -#: commands/tablecmds.c:6511 commands/tablecmds.c:6811 +#: commands/tablecmds.c:6593 commands/tablecmds.c:6928 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "kolumn \"%s\" i relation \"%s\" är en identitetskolumn" -#: commands/tablecmds.c:6547 +#: commands/tablecmds.c:6629 #, c-format msgid "column \"%s\" is in a primary key" msgstr "kolumn \"%s\" är del av en primärnyckel" -#: commands/tablecmds.c:6569 +#: commands/tablecmds.c:6651 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "kolumn \"%s\" är markerad NOT NULL i föräldratabellen" -#: commands/tablecmds.c:6734 commands/tablecmds.c:8147 +#: commands/tablecmds.c:6851 commands/tablecmds.c:8293 #, c-format msgid "constraint must be added to child tables too" msgstr "villkoret måste läggas till i barntabellerna också" -#: commands/tablecmds.c:6735 +#: commands/tablecmds.c:6852 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "Kolumn \"%s\" i relation \"%s\" är inte redan NOT NULL." -#: commands/tablecmds.c:6770 +#: commands/tablecmds.c:6887 #, c-format -msgid "existing constraints on column \"%s\".\"%s\" are sufficient to prove that it does not contain nulls" -msgstr "existerande integritetsvillkor på kolumn \"%s\".\"%s\" är tillräckligt för att bevisa att den inte innehåller null-värden" +msgid "existing constraints on column \"%s.%s\" are sufficient to prove that it does not contain nulls" +msgstr "existerande integritetsvillkor på kolumn \"%s.%s\" är tillräckligt för att bevisa att den inte innehåller null-värden" -#: commands/tablecmds.c:6813 +#: commands/tablecmds.c:6930 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Använd ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY istället." -#: commands/tablecmds.c:6818 +#: commands/tablecmds.c:6935 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "kolumn \"%s\" i relation \"%s\" är en genererad kolumn" -#: commands/tablecmds.c:6821 +#: commands/tablecmds.c:6938 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." msgstr "Använd ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION istället." -#: commands/tablecmds.c:6901 +#: commands/tablecmds.c:7047 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "kolumn \"%s\" i relation \"%s\" måste deklareras NOT NULL innan identitet kan läggas till" -#: commands/tablecmds.c:6907 +#: commands/tablecmds.c:7053 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "kolumn \"%s\" i relation \"%s\" är redan en identitetskolumn" -#: commands/tablecmds.c:6913 +#: commands/tablecmds.c:7059 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "kolumn \"%s\" i relation \"%s\" har redan ett standardvärde" -#: commands/tablecmds.c:6990 commands/tablecmds.c:7051 +#: commands/tablecmds.c:7136 commands/tablecmds.c:7197 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "kolumn \"%s\" i relation \"%s\" är inte en identitetkolumn" -#: commands/tablecmds.c:7056 +#: commands/tablecmds.c:7202 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "kolumn \"%s\" i relation \"%s\" är inte en identitetkolumn, hoppar över" -#: commands/tablecmds.c:7115 +#: commands/tablecmds.c:7261 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "kan inte slänga genererat uttryck på ärvd kolumn" -#: commands/tablecmds.c:7153 +#: commands/tablecmds.c:7299 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "kolumn \"%s\" i relation \"%s\" är inte en lagrad genererad kolumn" -#: commands/tablecmds.c:7158 +#: commands/tablecmds.c:7304 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "kolumn \"%s\" i relation \"%s\" är inte en lagrad genererad kolumn, hoppar över" -#: commands/tablecmds.c:7258 +#: commands/tablecmds.c:7404 #, c-format msgid "cannot refer to non-index column by number" msgstr "kan inte referera per nummer till en icke-index-kolumn " -#: commands/tablecmds.c:7301 +#: commands/tablecmds.c:7447 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "kolumnnummer %d i relation \"%s\" finns inte" -#: commands/tablecmds.c:7320 +#: commands/tablecmds.c:7466 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "kan inte ändra statistik på inkluderad kolumn \"%s\" i index \"%s\"" -#: commands/tablecmds.c:7325 +#: commands/tablecmds.c:7471 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "kan inte ändra statistik på icke-villkorskolumn \"%s\" i index \"%s\"" -#: commands/tablecmds.c:7327 +#: commands/tablecmds.c:7473 #, c-format msgid "Alter statistics on table column instead." msgstr "Ändra statistik på tabellkolumn istället." -#: commands/tablecmds.c:7454 +#: commands/tablecmds.c:7600 #, c-format msgid "invalid storage type \"%s\"" msgstr "ogiltig lagringstyp \"%s\"" -#: commands/tablecmds.c:7486 +#: commands/tablecmds.c:7632 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "kolumndatatyp %s kan bara ha lagringsmetod PLAIN" -#: commands/tablecmds.c:7568 +#: commands/tablecmds.c:7714 #, c-format msgid "cannot drop column from typed table" msgstr "kan inte ta bort kolumn från typad tabell" -#: commands/tablecmds.c:7627 +#: commands/tablecmds.c:7773 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "kolumn \"%s\" i relation \"%s\" finns inte, hoppar över" -#: commands/tablecmds.c:7640 +#: commands/tablecmds.c:7786 #, c-format msgid "cannot drop system column \"%s\"" msgstr "kan inte ta bort systemkolumn \"%s\"" -#: commands/tablecmds.c:7650 +#: commands/tablecmds.c:7796 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "kan inte ta bort ärvd kolumn \"%s\"" -#: commands/tablecmds.c:7663 +#: commands/tablecmds.c:7809 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "kan inte slänga kolumnen \"%s\" då den är del av partitionsnyckeln för relationen \"%s\"" -#: commands/tablecmds.c:7687 +#: commands/tablecmds.c:7833 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "kan inte slänga kolumn från bara den partitionerade tabellen när partitioner finns" -#: commands/tablecmds.c:7868 +#: commands/tablecmds.c:8014 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX stöds inte på partionerade tabeller" -#: commands/tablecmds.c:7893 +#: commands/tablecmds.c:8039 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX kommer byta namn på index \"%s\" till \"%s\"" -#: commands/tablecmds.c:8227 +#: commands/tablecmds.c:8373 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "kan inte använda ONLY på främmande nyckel för partitionerad tabell \"%s\" som refererar till relationen \"%s\"" -#: commands/tablecmds.c:8233 +#: commands/tablecmds.c:8379 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "kan inte lägga till NOT VALID främmande nyckel till partitionerad tabell \"%s\" som refererar till relationen \"%s\"" -#: commands/tablecmds.c:8236 +#: commands/tablecmds.c:8382 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Denna finess stöds inte än på partitionerade tabeller." -#: commands/tablecmds.c:8243 commands/tablecmds.c:8648 +#: commands/tablecmds.c:8389 commands/tablecmds.c:8794 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "refererad relation \"%s\" är inte en tabell" -#: commands/tablecmds.c:8266 +#: commands/tablecmds.c:8412 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "villkor på permanenta tabeller får bara referera till permanenta tabeller" -#: commands/tablecmds.c:8273 +#: commands/tablecmds.c:8419 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "villkor på ologgade tabeller får bara referera till permanenta eller ologgade tabeller" -#: commands/tablecmds.c:8279 +#: commands/tablecmds.c:8425 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "villkor på temporära tabeller får bara referera till temporära tabeller" -#: commands/tablecmds.c:8283 +#: commands/tablecmds.c:8429 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "villkor på temporära tabeller får bara ta med temporära tabeller från denna session" -#: commands/tablecmds.c:8349 commands/tablecmds.c:8355 +#: commands/tablecmds.c:8495 commands/tablecmds.c:8501 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "ogiltig %s-aktion för främmande nyckelvillkor som innehåller genererad kolumn" -#: commands/tablecmds.c:8371 +#: commands/tablecmds.c:8517 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "antalet refererande och refererade kolumner för främmande nyckel stämmer ej överens" -#: commands/tablecmds.c:8478 +#: commands/tablecmds.c:8624 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "främmande nyckelvillkor \"%s\" kan inte implementeras" -#: commands/tablecmds.c:8480 +#: commands/tablecmds.c:8626 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Nyckelkolumner \"%s\" och \"%s\" har inkompatibla typer %s och %s." -#: commands/tablecmds.c:8843 commands/tablecmds.c:9236 -#: parser/parse_utilcmd.c:763 parser/parse_utilcmd.c:892 +#: commands/tablecmds.c:8989 commands/tablecmds.c:9382 +#: parser/parse_utilcmd.c:764 parser/parse_utilcmd.c:893 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "främmande nyckel-villkor stöds inte för främmande tabeller" -#: commands/tablecmds.c:9602 commands/tablecmds.c:9765 -#: commands/tablecmds.c:10692 commands/tablecmds.c:10767 +#: commands/tablecmds.c:9748 commands/tablecmds.c:9911 +#: commands/tablecmds.c:10783 commands/tablecmds.c:10858 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "villkor \"%s\" i relation \"%s\" finns inte" -#: commands/tablecmds.c:9609 +#: commands/tablecmds.c:9755 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "villkor \"%s\" i relation \"%s\" är inte ett främmande nyckelvillkor" -#: commands/tablecmds.c:9773 +#: commands/tablecmds.c:9919 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "villkor \"%s\" i relation \"%s\" är inte en främmande nyckel eller ett check-villkor" -#: commands/tablecmds.c:9843 +#: commands/tablecmds.c:9997 #, c-format msgid "constraint must be validated on child tables too" msgstr "villkoret måste valideras för barntabellerna också" -#: commands/tablecmds.c:9909 +#: commands/tablecmds.c:10081 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "kolumn \"%s\" som refereras till i främmande nyckelvillkor finns inte" -#: commands/tablecmds.c:9914 +#: commands/tablecmds.c:10086 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "kan inte ha mer än %d nycklar i en främmande nyckel" -#: commands/tablecmds.c:9979 +#: commands/tablecmds.c:10151 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "kan inte använda en \"deferrable\" primärnyckel för refererad tabell \"%s\"" -#: commands/tablecmds.c:9996 +#: commands/tablecmds.c:10168 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "det finns ingen primärnyckel för refererad tabell \"%s\"" -#: commands/tablecmds.c:10061 +#: commands/tablecmds.c:10233 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "främmande nyckel-refererade kolumnlistor får inte innehålla duplikat" -#: commands/tablecmds.c:10155 +#: commands/tablecmds.c:10327 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "kan inte använda ett \"deferrable\" unikt integritetsvillkor för refererad tabell \"%s\"" -#: commands/tablecmds.c:10160 +#: commands/tablecmds.c:10332 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "finns inget unique-villkor som matchar de givna nycklarna i den refererade tabellen \"%s\"" -#: commands/tablecmds.c:10329 +#: commands/tablecmds.c:10420 #, c-format msgid "validating foreign key constraint \"%s\"" msgstr "validerar främmande nyckelvillkor \"%s\"" -#: commands/tablecmds.c:10648 +#: commands/tablecmds.c:10739 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "kan inte ta bort ärvt villkor \"%s\" i relation \"%s\"" -#: commands/tablecmds.c:10698 +#: commands/tablecmds.c:10789 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "villkor \"%s\" i relation \"%s\" finns inte, hoppar över" -#: commands/tablecmds.c:10874 +#: commands/tablecmds.c:10965 #, c-format msgid "cannot alter column type of typed table" msgstr "kan inte ändra kolumntyp på typad tabell" -#: commands/tablecmds.c:10901 +#: commands/tablecmds.c:10992 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "kan inte ändra ärvd kolumn \"%s\"" -#: commands/tablecmds.c:10910 +#: commands/tablecmds.c:11001 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "kan inte ändra kolumnen \"%s\" då den är del av partitionsnyckeln för relationen \"%s\"" -#: commands/tablecmds.c:10960 +#: commands/tablecmds.c:11051 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "resultatet av USING-klausul för kolumn \"%s\" kan inte automatiskt typomvandlas till typen %s" -#: commands/tablecmds.c:10963 +#: commands/tablecmds.c:11054 #, c-format msgid "You might need to add an explicit cast." msgstr "Du kan behöva lägga till en explicit typomvandling." -#: commands/tablecmds.c:10967 +#: commands/tablecmds.c:11058 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "kolumn \"%s\" kan inte automatiskt typomvandlas till typ %s" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:10970 +#: commands/tablecmds.c:11061 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Du kan behöva ange \"USING %s::%s\"." -#: commands/tablecmds.c:11070 +#: commands/tablecmds.c:11161 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "kan inte ändra ärvd kolumn \"%s\" i relation \"%s\"" -#: commands/tablecmds.c:11098 +#: commands/tablecmds.c:11189 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "USING-uttryck innehåller en hela-raden-tabellreferens." -#: commands/tablecmds.c:11109 +#: commands/tablecmds.c:11200 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "typen av den ärvda kolumnen \"%s\" måste ändras i barntabellerna också" -#: commands/tablecmds.c:11234 +#: commands/tablecmds.c:11325 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "kan inte ändra typen på kolumn \"%s\" två gånger" -#: commands/tablecmds.c:11272 +#: commands/tablecmds.c:11363 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "genereringsuttryck för kolumn \"%s\" kan inte automatiskt typomvandlas till typ %s" -#: commands/tablecmds.c:11277 +#: commands/tablecmds.c:11368 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "\"default\" för kolumn \"%s\" kan inte automatiskt typomvandlas till typ \"%s\"" -#: commands/tablecmds.c:11355 +#: commands/tablecmds.c:11446 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "kan inte ändra typ på en kolumn som används av en genererad kolumn" -#: commands/tablecmds.c:11356 +#: commands/tablecmds.c:11447 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "Kolumn \"%s\" används av genererad kolumn \"%s\"." -#: commands/tablecmds.c:11377 +#: commands/tablecmds.c:11468 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "kan inte ändra typ på en kolumn som används av en vy eller en regel" -#: commands/tablecmds.c:11378 commands/tablecmds.c:11397 -#: commands/tablecmds.c:11415 +#: commands/tablecmds.c:11469 commands/tablecmds.c:11488 +#: commands/tablecmds.c:11506 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s beror på kolumn \"%s\"" -#: commands/tablecmds.c:11396 +#: commands/tablecmds.c:11487 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "kan inte ändra typ på en kolumn som används i en utlösardefinition" -#: commands/tablecmds.c:11414 +#: commands/tablecmds.c:11505 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "kan inte ändra typ på en kolumn som används av i en policydefinition" -#: commands/tablecmds.c:12423 commands/tablecmds.c:12435 +#: commands/tablecmds.c:12514 commands/tablecmds.c:12526 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "kan inte byta ägare på index \"%s\"" -#: commands/tablecmds.c:12425 commands/tablecmds.c:12437 +#: commands/tablecmds.c:12516 commands/tablecmds.c:12528 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Byt ägare på indexets tabell istället." -#: commands/tablecmds.c:12451 +#: commands/tablecmds.c:12542 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "kan inte byta ägare på sekvens \"%s\"" -#: commands/tablecmds.c:12465 commands/tablecmds.c:15652 +#: commands/tablecmds.c:12556 commands/tablecmds.c:15743 #, c-format msgid "Use ALTER TYPE instead." msgstr "Använd ALTER TYPE istället." -#: commands/tablecmds.c:12474 +#: commands/tablecmds.c:12565 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "\"%s\" är inte en tabell, vy, sekvens eller främmande tabell" -#: commands/tablecmds.c:12814 +#: commands/tablecmds.c:12905 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "kan inte ha flera underkommandon SET TABLESPACE" -#: commands/tablecmds.c:12891 +#: commands/tablecmds.c:12982 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "\"%s\" är inte en tabell, vy, materialiserad vy eller en TOAST-tabell" -#: commands/tablecmds.c:12924 commands/view.c:494 +#: commands/tablecmds.c:13015 commands/view.c:494 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION stöds bara på automatiskt uppdateringsbara vyer" -#: commands/tablecmds.c:13064 +#: commands/tablecmds.c:13155 #, c-format msgid "cannot move system relation \"%s\"" msgstr "kan inte flytta systemrelation \"%s\"" -#: commands/tablecmds.c:13080 +#: commands/tablecmds.c:13171 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "kan inte flytta temporära tabeller tillhörande andra sessioner" -#: commands/tablecmds.c:13250 +#: commands/tablecmds.c:13341 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "bara tabeller, index och materialiserade vyer finns i tablespace:er" -#: commands/tablecmds.c:13262 +#: commands/tablecmds.c:13353 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "kan inte flytta relationer in eller ut från tablespace pg_global" -#: commands/tablecmds.c:13354 +#: commands/tablecmds.c:13445 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "avbryter då lås på relation \"%s.%s\" inte är tillgängligt" -#: commands/tablecmds.c:13370 +#: commands/tablecmds.c:13461 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "inga matchande relationer i tablespace \"%s\" hittades" -#: commands/tablecmds.c:13486 +#: commands/tablecmds.c:13577 #, c-format msgid "cannot change inheritance of typed table" msgstr "kan inte ändra arv på en typad tabell" -#: commands/tablecmds.c:13491 commands/tablecmds.c:13987 +#: commands/tablecmds.c:13582 commands/tablecmds.c:14078 #, c-format msgid "cannot change inheritance of a partition" msgstr "kan inte ändra arv på en partition" -#: commands/tablecmds.c:13496 +#: commands/tablecmds.c:13587 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "kan inte ändra arv på en partitionerad tabell" -#: commands/tablecmds.c:13542 +#: commands/tablecmds.c:13633 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "kan inte ärva av en temporär tabell för en annan session" -#: commands/tablecmds.c:13555 +#: commands/tablecmds.c:13646 #, c-format msgid "cannot inherit from a partition" msgstr "kan inte ärva från en partition" -#: commands/tablecmds.c:13577 commands/tablecmds.c:16292 +#: commands/tablecmds.c:13668 commands/tablecmds.c:16383 #, c-format msgid "circular inheritance not allowed" msgstr "cirkulärt arv är inte tillåtet" -#: commands/tablecmds.c:13578 commands/tablecmds.c:16293 +#: commands/tablecmds.c:13669 commands/tablecmds.c:16384 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\" är redan ett barn till \"%s\"" -#: commands/tablecmds.c:13591 +#: commands/tablecmds.c:13682 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "utlösare \"%s\" förhindrar tabell \"%s\" från att bli ett arvsbarn" -#: commands/tablecmds.c:13593 +#: commands/tablecmds.c:13684 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "ROW-utlösare med övergångstabeller stöds inte i arvshierarkier." -#: commands/tablecmds.c:13796 +#: commands/tablecmds.c:13887 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "kolumn \"%s\" i barntabell måste vara markerad NOT NULL" -#: commands/tablecmds.c:13823 +#: commands/tablecmds.c:13914 #, c-format msgid "child table is missing column \"%s\"" msgstr "barntabell saknar kolumn \"%s\"" -#: commands/tablecmds.c:13911 +#: commands/tablecmds.c:14002 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "barntabell \"%s\" har annan definition av check-villkor \"%s\"" -#: commands/tablecmds.c:13919 +#: commands/tablecmds.c:14010 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "villkor \"%s\" står i konflikt med icke-ärvt villkor på barntabell \"%s\"" -#: commands/tablecmds.c:13930 +#: commands/tablecmds.c:14021 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "villkor \"%s\" står i konflikt med NOT VALID-villkor på barntabell \"%s\"" -#: commands/tablecmds.c:13965 +#: commands/tablecmds.c:14056 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "barntabell saknar riktighetsvillkor \"%s\"" -#: commands/tablecmds.c:14054 +#: commands/tablecmds.c:14145 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "relationen \"%s\" är inte partition av relationen \"%s\"" -#: commands/tablecmds.c:14060 +#: commands/tablecmds.c:14151 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "relationen \"%s\" är inte en förälder till relationen \"%s\"" -#: commands/tablecmds.c:14288 +#: commands/tablecmds.c:14379 #, c-format msgid "typed tables cannot inherit" msgstr "typade tabeller kan inte ärva" -#: commands/tablecmds.c:14318 +#: commands/tablecmds.c:14409 #, c-format msgid "table is missing column \"%s\"" msgstr "tabell saknar kolumn \"%s\"" -#: commands/tablecmds.c:14329 +#: commands/tablecmds.c:14420 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "tabell har kolumn \"%s\" där typen kräver \"%s\"" -#: commands/tablecmds.c:14338 +#: commands/tablecmds.c:14429 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "tabell \"%s\" har annan typ på kolumn \"%s\"" -#: commands/tablecmds.c:14352 +#: commands/tablecmds.c:14443 #, c-format msgid "table has extra column \"%s\"" msgstr "tabell har extra kolumn \"%s\"" -#: commands/tablecmds.c:14404 +#: commands/tablecmds.c:14495 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\" är inte en typad tabell" -#: commands/tablecmds.c:14586 +#: commands/tablecmds.c:14677 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "kan inte använda icke-unikt index \"%s\" som replikaidentitet" -#: commands/tablecmds.c:14592 +#: commands/tablecmds.c:14683 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "kan inte använda icke-immediate-index \"%s\" som replikaidentitiet" -#: commands/tablecmds.c:14598 +#: commands/tablecmds.c:14689 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "kan inte använda uttrycksindex \"%s\" som replikaidentitiet" -#: commands/tablecmds.c:14604 +#: commands/tablecmds.c:14695 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "kan inte använda partiellt index \"%s\" som replikaidentitiet" -#: commands/tablecmds.c:14610 +#: commands/tablecmds.c:14701 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "kan inte använda ogiltigt index \"%s\" som replikaidentitiet" -#: commands/tablecmds.c:14627 +#: commands/tablecmds.c:14718 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "index \"%s\" kan inte användas som replikaidentitet då kolumn %d är en systemkolumn" -#: commands/tablecmds.c:14634 +#: commands/tablecmds.c:14725 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "index \"%s\" kan inte användas som replikaidentitet då kolumn \"%s\" kan vare null" -#: commands/tablecmds.c:14827 +#: commands/tablecmds.c:14918 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "kan inte ändra loggningsstatus för tabell \"%s\" då den är temporär" -#: commands/tablecmds.c:14851 +#: commands/tablecmds.c:14942 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "kan inte ändra tabell \"%s\" till ologgad då den är del av en publicering" -#: commands/tablecmds.c:14853 +#: commands/tablecmds.c:14944 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Ologgade relatrioner kan inte replikeras." -#: commands/tablecmds.c:14898 +#: commands/tablecmds.c:14989 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "kunde inte ändra tabell \"%s\" till loggad då den refererar till ologgad tabell \"%s\"" -#: commands/tablecmds.c:14908 +#: commands/tablecmds.c:14999 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "kunde inte ändra tabell \"%s\" till ologgad då den refererar till loggad tabell \"%s\"" -#: commands/tablecmds.c:14966 +#: commands/tablecmds.c:15057 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "kan inte flytta en ägd sekvens till ett annan schema." -#: commands/tablecmds.c:15072 +#: commands/tablecmds.c:15163 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "relationen \"%s\" finns redan i schema \"%s\"" -#: commands/tablecmds.c:15635 +#: commands/tablecmds.c:15726 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\" är inte en composite-typ" -#: commands/tablecmds.c:15667 +#: commands/tablecmds.c:15758 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "\"%s\" är inte en tabell, vy, materialiserad vy, sekvens eller främmande tabell" -#: commands/tablecmds.c:15702 +#: commands/tablecmds.c:15793 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "okänd partitioneringsstrategi \"%s\"" -#: commands/tablecmds.c:15710 +#: commands/tablecmds.c:15801 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "kan inte använda list-partioneringsstrategi med mer än en kolumn" -#: commands/tablecmds.c:15776 +#: commands/tablecmds.c:15867 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "kolumn \"%s\" angiven i partitioneringsnyckel existerar inte" -#: commands/tablecmds.c:15784 +#: commands/tablecmds.c:15875 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "kan inte använda systemkolumn \"%s\" i partitioneringsnyckel" -#: commands/tablecmds.c:15795 commands/tablecmds.c:15909 +#: commands/tablecmds.c:15886 commands/tablecmds.c:16000 #, c-format msgid "cannot use generated column in partition key" msgstr "kan inte använda genererad kolumn i partitioneringsnyckel" -#: commands/tablecmds.c:15796 commands/tablecmds.c:15910 commands/trigger.c:641 +#: commands/tablecmds.c:15887 commands/tablecmds.c:16001 commands/trigger.c:641 #: rewrite/rewriteHandler.c:829 rewrite/rewriteHandler.c:846 #, c-format msgid "Column \"%s\" is a generated column." msgstr "Kolumnen \"%s\" är en genererad kolumn." -#: commands/tablecmds.c:15872 +#: commands/tablecmds.c:15963 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "funktioner i partitioneringsuttryck måste vara markerade IMMUTABLE" -#: commands/tablecmds.c:15892 +#: commands/tablecmds.c:15983 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "partitioneringsnyckeluttryck kan inte innehålla systemkolumnreferenser" -#: commands/tablecmds.c:15922 +#: commands/tablecmds.c:16013 #, c-format msgid "cannot use constant expression as partition key" msgstr "kan inte använda konstant uttryck som partitioneringsnyckel" -#: commands/tablecmds.c:15943 +#: commands/tablecmds.c:16034 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "kunde inte lista vilken jämförelse (collation) som skulle användas för partitionsuttryck" -#: commands/tablecmds.c:15978 +#: commands/tablecmds.c:16069 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "Du måste ange en hash-operatorklass eller definiera en default hash-operatorklass för datatypen." -#: commands/tablecmds.c:15984 +#: commands/tablecmds.c:16075 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "Du måste ange en btree-operatorklass eller definiera en default btree-operatorklass för datatypen." -#: commands/tablecmds.c:16129 +#: commands/tablecmds.c:16220 #, c-format msgid "partition constraint for table \"%s\" is implied by existing constraints" msgstr "partitionsvillkor för tabell \"%s\" är implicit pga existerande villkor" -#: commands/tablecmds.c:16133 partitioning/partbounds.c:3126 -#: partitioning/partbounds.c:3177 +#: commands/tablecmds.c:16224 partitioning/partbounds.c:3129 +#: partitioning/partbounds.c:3180 #, c-format msgid "updated partition constraint for default partition \"%s\" is implied by existing constraints" msgstr "uppdaterat partitionsintegritetsvillkor för standardpartition \"%s\" impliceras av existerande integritetsvillkor" -#: commands/tablecmds.c:16232 +#: commands/tablecmds.c:16323 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\" är redan en partition" -#: commands/tablecmds.c:16238 +#: commands/tablecmds.c:16329 #, c-format msgid "cannot attach a typed table as partition" msgstr "kan inte ansluta en typad tabell som partition" -#: commands/tablecmds.c:16254 +#: commands/tablecmds.c:16345 #, c-format msgid "cannot attach inheritance child as partition" msgstr "kan inte ansluta ett arvsbarn som partition" -#: commands/tablecmds.c:16268 +#: commands/tablecmds.c:16359 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "kan inte ansluta en arvsförälder som partition" -#: commands/tablecmds.c:16302 +#: commands/tablecmds.c:16393 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "kan inte ansluta en temporär relation som partition till en permanent relation \"%s\"" -#: commands/tablecmds.c:16310 +#: commands/tablecmds.c:16401 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "kan inte ansluta en permanent relation som partition till en temporär relation \"%s\"" -#: commands/tablecmds.c:16318 +#: commands/tablecmds.c:16409 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "kan inte ansluta en partition från en temporär relation som tillhör en annan session" -#: commands/tablecmds.c:16325 +#: commands/tablecmds.c:16416 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "kan inte ansluta en temporär relation tillhörande en annan session som partition" -#: commands/tablecmds.c:16345 +#: commands/tablecmds.c:16436 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "tabell \"%s\" innehåller kolumn \"%s\" som inte finns i föräldern \"%s\"" -#: commands/tablecmds.c:16348 +#: commands/tablecmds.c:16439 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "Den nya partitionen får bara innehålla kolumner som finns i föräldern." -#: commands/tablecmds.c:16360 +#: commands/tablecmds.c:16451 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "utlösare \"%s\" förhindrar att tabell \"%s\" blir en partition" -#: commands/tablecmds.c:16362 commands/trigger.c:447 +#: commands/tablecmds.c:16453 commands/trigger.c:447 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "ROW-utlösare med övergångstabeller stöds inte för partitioner" -#: commands/tablecmds.c:16525 +#: commands/tablecmds.c:16616 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "kan inte ansluta främmande tabell \"%s\" som en partition till partitionerad tabell \"%s\"" -#: commands/tablecmds.c:16528 +#: commands/tablecmds.c:16619 #, c-format msgid "Table \"%s\" contains unique indexes." msgstr "Tabell \"%s\" innehåller unika index." -#: commands/tablecmds.c:17174 commands/tablecmds.c:17193 -#: commands/tablecmds.c:17213 commands/tablecmds.c:17232 -#: commands/tablecmds.c:17274 +#: commands/tablecmds.c:17265 commands/tablecmds.c:17285 +#: commands/tablecmds.c:17305 commands/tablecmds.c:17324 +#: commands/tablecmds.c:17366 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "kan inte ansluta index \"%s\" som en partition till index \"%s\"" -#: commands/tablecmds.c:17177 +#: commands/tablecmds.c:17268 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "Index \"%s\" är redan ansluten till ett annat index." -#: commands/tablecmds.c:17196 +#: commands/tablecmds.c:17288 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "Index \"%s\" är inte ett index för någon partition av tabell \"%s\"." -#: commands/tablecmds.c:17216 +#: commands/tablecmds.c:17308 #, c-format msgid "The index definitions do not match." msgstr "Indexdefinitionerna matchar inte." -#: commands/tablecmds.c:17235 +#: commands/tablecmds.c:17327 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "Indexet \"%s\" tillhör ett villkor på tabell \"%s\" men det finns inga villkor för indexet \"%s\"." -#: commands/tablecmds.c:17277 +#: commands/tablecmds.c:17369 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "Ett annat index är redan anslutet för partition \"%s\"." #: commands/tablespace.c:162 commands/tablespace.c:179 #: commands/tablespace.c:190 commands/tablespace.c:198 -#: commands/tablespace.c:638 replication/slot.c:1290 storage/file/copydir.c:47 +#: commands/tablespace.c:638 replication/slot.c:1373 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "kunde inte skapa katalog \"%s\": %m" @@ -10274,7 +10255,7 @@ msgstr "tabellutrymmet \"%s\" finns redan" #: commands/tablespace.c:442 commands/tablespace.c:948 #: commands/tablespace.c:1037 commands/tablespace.c:1106 -#: commands/tablespace.c:1250 commands/tablespace.c:1450 +#: commands/tablespace.c:1252 commands/tablespace.c:1455 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "tabellutrymme \"%s\" existerar inte" @@ -10310,8 +10291,8 @@ msgid "directory \"%s\" already in use as a tablespace" msgstr "katalogen \"%s\" används redan som ett tablespace" #: commands/tablespace.c:757 commands/tablespace.c:770 -#: commands/tablespace.c:806 commands/tablespace.c:898 storage/file/fd.c:3100 -#: storage/file/fd.c:3440 +#: commands/tablespace.c:806 commands/tablespace.c:898 storage/file/fd.c:3108 +#: storage/file/fd.c:3448 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "kunde inte ta bort katalog \"%s\": %m" @@ -10331,12 +10312,12 @@ msgstr "\"%s\" är inte en katalog eller symbolisk länk" msgid "Tablespace \"%s\" does not exist." msgstr "Tabellutrymme \"%s\" finns inte." -#: commands/tablespace.c:1549 +#: commands/tablespace.c:1554 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "kataloger för %u kan inte tas bort" -#: commands/tablespace.c:1551 +#: commands/tablespace.c:1556 #, c-format msgid "You can remove the directories manually if necessary." msgstr "Du kan ta bort dessa kataloger på egen hand om nödvändigt." @@ -10690,308 +10671,318 @@ msgstr "mappning för token-typ \"%s\" finns inte, hoppar över" msgid "invalid parameter list format: \"%s\"" msgstr "ogiltigt parameterlistformat \"%s\"" -#: commands/typecmds.c:205 +#: commands/typecmds.c:206 #, c-format msgid "must be superuser to create a base type" msgstr "måste vara superanvändare för att skapa en bastyp" -#: commands/typecmds.c:263 +#: commands/typecmds.c:264 #, c-format msgid "Create the type as a shell type, then create its I/O functions, then do a full CREATE TYPE." msgstr "Skapa typen som en shell-typ, skapa sedan dess I/O-funktioner och gör sedan en fullständig CREATE TYPE." -#: commands/typecmds.c:313 commands/typecmds.c:1393 commands/typecmds.c:3809 +#: commands/typecmds.c:314 commands/typecmds.c:1394 commands/typecmds.c:3832 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "typattribut \"%s\" känns inte igen" -#: commands/typecmds.c:369 +#: commands/typecmds.c:370 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "ogiltig typkategori \"%s\": måste vara enkel ASCII" -#: commands/typecmds.c:388 +#: commands/typecmds.c:389 #, c-format msgid "array element type cannot be %s" msgstr "elementtypen i array:en får inte vara %s" -#: commands/typecmds.c:420 +#: commands/typecmds.c:421 #, c-format msgid "alignment \"%s\" not recognized" msgstr "känner inte igen justering (alignment) \"%s\"" -#: commands/typecmds.c:437 commands/typecmds.c:3695 +#: commands/typecmds.c:438 commands/typecmds.c:3718 #, c-format msgid "storage \"%s\" not recognized" msgstr "lagring \"%s\" känns inte igen" -#: commands/typecmds.c:448 +#: commands/typecmds.c:449 #, c-format msgid "type input function must be specified" msgstr "typens indata-funktion måste anges" -#: commands/typecmds.c:452 +#: commands/typecmds.c:453 #, c-format msgid "type output function must be specified" msgstr "typens utdata-funktion måste anges" -#: commands/typecmds.c:457 +#: commands/typecmds.c:458 #, c-format msgid "type modifier output function is useless without a type modifier input function" msgstr "typmodifierar-utdatafunktion är värdelös utan en typmodifierar-indatafunktion" -#: commands/typecmds.c:744 +#: commands/typecmds.c:745 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "\"%s\" är inte en giltigt bastyp för en domän" -#: commands/typecmds.c:836 +#: commands/typecmds.c:837 #, c-format msgid "multiple default expressions" msgstr "multipla default-uttryck" -#: commands/typecmds.c:899 commands/typecmds.c:908 +#: commands/typecmds.c:900 commands/typecmds.c:909 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "motstridiga NULL/NOT NULL-villkor" -#: commands/typecmds.c:924 +#: commands/typecmds.c:925 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "check-villkor för domäner kan inte markeras NO INHERIT" -#: commands/typecmds.c:933 commands/typecmds.c:2513 +#: commands/typecmds.c:934 commands/typecmds.c:2536 #, c-format msgid "unique constraints not possible for domains" msgstr "unik-villkor går inte att ha på domäner" -#: commands/typecmds.c:939 commands/typecmds.c:2519 +#: commands/typecmds.c:940 commands/typecmds.c:2542 #, c-format msgid "primary key constraints not possible for domains" msgstr "primärnyckelvillkor går inte att ha på domäner" -#: commands/typecmds.c:945 commands/typecmds.c:2525 +#: commands/typecmds.c:946 commands/typecmds.c:2548 #, c-format msgid "exclusion constraints not possible for domains" msgstr "uteslutningsvillkor går inte att ha på domäner" -#: commands/typecmds.c:951 commands/typecmds.c:2531 +#: commands/typecmds.c:952 commands/typecmds.c:2554 #, c-format msgid "foreign key constraints not possible for domains" msgstr "främmande nyckel-villkor går inte att ha på domäner" -#: commands/typecmds.c:960 commands/typecmds.c:2540 +#: commands/typecmds.c:961 commands/typecmds.c:2563 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "att ange deferrable för integritetsvillkor stöds inte för domäner" -#: commands/typecmds.c:1270 utils/cache/typcache.c:2430 +#: commands/typecmds.c:1271 utils/cache/typcache.c:2430 #, c-format msgid "%s is not an enum" msgstr "%s är inte en enum" -#: commands/typecmds.c:1401 +#: commands/typecmds.c:1402 #, c-format msgid "type attribute \"subtype\" is required" msgstr "typattribut \"subtype\" krävs" -#: commands/typecmds.c:1406 +#: commands/typecmds.c:1407 #, c-format msgid "range subtype cannot be %s" msgstr "intervall-subtyp kan inte vara %s" -#: commands/typecmds.c:1425 +#: commands/typecmds.c:1426 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "intervalljämförelse angiven men subtypen stöder inte jämförelse (collation)" -#: commands/typecmds.c:1435 +#: commands/typecmds.c:1436 #, c-format msgid "cannot specify a canonical function without a pre-created shell type" msgstr "kan inte ange en kanonisk funktion utan en förskapad shell-typ" -#: commands/typecmds.c:1436 +#: commands/typecmds.c:1437 #, c-format msgid "Create the type as a shell type, then create its canonicalization function, then do a full CREATE TYPE." msgstr "Skapa typen som en shell-typ, skapa sedan dess kanoniseringsfunktion och gör sedan en fullständig CREATE TYPE." -#: commands/typecmds.c:1654 +#: commands/typecmds.c:1648 +#, c-format +msgid "type input function %s has multiple matches" +msgstr "typens indata-funktion %s har multipla träffar" + +#: commands/typecmds.c:1666 #, c-format msgid "type input function %s must return type %s" msgstr "typens indata-funktion %s måste returnera typen %s" -#: commands/typecmds.c:1670 +#: commands/typecmds.c:1682 #, c-format msgid "type input function %s should not be volatile" msgstr "typens indatafunktion %s skall inte vara volatile" -#: commands/typecmds.c:1698 +#: commands/typecmds.c:1710 #, c-format msgid "type output function %s must return type %s" msgstr "typenns utdatafunktion %s måste returnera typen %s" -#: commands/typecmds.c:1705 +#: commands/typecmds.c:1717 #, c-format msgid "type output function %s should not be volatile" msgstr "typens utdatafunktion %s skall inte vara volatile" -#: commands/typecmds.c:1741 +#: commands/typecmds.c:1746 +#, c-format +msgid "type receive function %s has multiple matches" +msgstr "typens receive-funktion %s har multipla träffar" + +#: commands/typecmds.c:1764 #, c-format msgid "type receive function %s must return type %s" msgstr "typens receive-funktion %s måste returnera typen %s" -#: commands/typecmds.c:1748 +#: commands/typecmds.c:1771 #, c-format msgid "type receive function %s should not be volatile" msgstr "typens receive-funktion %s skall inte vara volatile" -#: commands/typecmds.c:1776 +#: commands/typecmds.c:1799 #, c-format msgid "type send function %s must return type %s" msgstr "typens send-funktion %s måste returnera typen %s" -#: commands/typecmds.c:1783 +#: commands/typecmds.c:1806 #, c-format msgid "type send function %s should not be volatile" msgstr "typens send-funktion %s skall inte vara volatile" -#: commands/typecmds.c:1810 +#: commands/typecmds.c:1833 #, c-format msgid "typmod_in function %s must return type %s" msgstr "typmod_in-funktion %s måste retunera typ %s" -#: commands/typecmds.c:1817 +#: commands/typecmds.c:1840 #, c-format msgid "type modifier input function %s should not be volatile" msgstr "typmodifierar-indatafunktion %s skall inte vara volatile" -#: commands/typecmds.c:1844 +#: commands/typecmds.c:1867 #, c-format msgid "typmod_out function %s must return type %s" msgstr "typmod_out-funktion %s måste returnera typ %s" -#: commands/typecmds.c:1851 +#: commands/typecmds.c:1874 #, c-format msgid "type modifier output function %s should not be volatile" msgstr "typmodifierar-utdatafunktion %s skall inte vara volatile" -#: commands/typecmds.c:1878 +#: commands/typecmds.c:1901 #, c-format msgid "type analyze function %s must return type %s" msgstr "en typs analyze-funktion %s måste returnera typ %s" -#: commands/typecmds.c:1924 +#: commands/typecmds.c:1947 #, c-format msgid "You must specify an operator class for the range type or define a default operator class for the subtype." msgstr "Du måste ange en operatorklass för intervalltypen eller definiera en standardoperatorklass för subtypen." -#: commands/typecmds.c:1955 +#: commands/typecmds.c:1978 #, c-format msgid "range canonical function %s must return range type" msgstr "intervallets kanoniska funktion %s måste returnera en intervalltyp" -#: commands/typecmds.c:1961 +#: commands/typecmds.c:1984 #, c-format msgid "range canonical function %s must be immutable" msgstr "intervallets kanoniska funktion %s måste vara immutable" -#: commands/typecmds.c:1997 +#: commands/typecmds.c:2020 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "diffunktion %s för range-subtyp måste returnera typ %s" -#: commands/typecmds.c:2004 +#: commands/typecmds.c:2027 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "diffunktion %s för range-subtyp måste vara immutable" -#: commands/typecmds.c:2031 +#: commands/typecmds.c:2054 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "pg_type array-OID-värde ej satt i binärt uppgraderingsläge" -#: commands/typecmds.c:2329 +#: commands/typecmds.c:2352 #, c-format msgid "column \"%s\" of table \"%s\" contains null values" msgstr "kolumn \"%s\" i tabell \"%s\" innehåller null-värden" -#: commands/typecmds.c:2442 commands/typecmds.c:2644 +#: commands/typecmds.c:2465 commands/typecmds.c:2667 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "integritetsvillkor \"%s\" för domän \"%s\" existerar inte" -#: commands/typecmds.c:2446 +#: commands/typecmds.c:2469 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "integritetsvillkor \"%s\" för domän \"%s\" existerar inte, hoppar över" -#: commands/typecmds.c:2651 +#: commands/typecmds.c:2674 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "integritetsvillkor \"%s\" för domän \"%s\" är inte ett check-villkor" -#: commands/typecmds.c:2757 +#: commands/typecmds.c:2780 #, c-format msgid "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "kolumnen \"%s\" i tabell \"%s\" innehåller värden som bryter mot det nya villkortet" -#: commands/typecmds.c:2986 commands/typecmds.c:3184 commands/typecmds.c:3266 -#: commands/typecmds.c:3453 +#: commands/typecmds.c:3009 commands/typecmds.c:3207 commands/typecmds.c:3289 +#: commands/typecmds.c:3476 #, c-format msgid "%s is not a domain" msgstr "%s är inte en domän" -#: commands/typecmds.c:3018 +#: commands/typecmds.c:3041 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "integritetsvillkor \"%s\" för domän \"%s\" existerar redan" -#: commands/typecmds.c:3069 +#: commands/typecmds.c:3092 #, c-format msgid "cannot use table references in domain check constraint" msgstr "kan inte använda tabellreferenser i domänens check-villkor" -#: commands/typecmds.c:3196 commands/typecmds.c:3278 commands/typecmds.c:3570 +#: commands/typecmds.c:3219 commands/typecmds.c:3301 commands/typecmds.c:3593 #, c-format msgid "%s is a table's row type" msgstr "%s är en tabells radtyp" -#: commands/typecmds.c:3198 commands/typecmds.c:3280 commands/typecmds.c:3572 +#: commands/typecmds.c:3221 commands/typecmds.c:3303 commands/typecmds.c:3595 #, c-format msgid "Use ALTER TABLE instead." msgstr "Använd ALTER TABLE istället." -#: commands/typecmds.c:3205 commands/typecmds.c:3287 commands/typecmds.c:3485 +#: commands/typecmds.c:3228 commands/typecmds.c:3310 commands/typecmds.c:3508 #, c-format msgid "cannot alter array type %s" msgstr "kan inte ändra arraytyp %s" -#: commands/typecmds.c:3207 commands/typecmds.c:3289 commands/typecmds.c:3487 +#: commands/typecmds.c:3230 commands/typecmds.c:3312 commands/typecmds.c:3510 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "Du kan ändra typen %s vilket också kommer ändra array-typen." -#: commands/typecmds.c:3555 +#: commands/typecmds.c:3578 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "typen \"%s\" finns redan i schema \"%s\"" -#: commands/typecmds.c:3723 +#: commands/typecmds.c:3746 #, c-format msgid "cannot change type's storage to PLAIN" msgstr "kan inte ändra typens lagring till PLAIN" -#: commands/typecmds.c:3804 +#: commands/typecmds.c:3827 #, c-format msgid "type attribute \"%s\" cannot be changed" msgstr "typattribut \"%s\" kan inte ändras" -#: commands/typecmds.c:3822 +#: commands/typecmds.c:3845 #, c-format msgid "must be superuser to alter a type" msgstr "måste vara superanvändare för att ändra en typ" -#: commands/typecmds.c:3843 commands/typecmds.c:3853 +#: commands/typecmds.c:3866 commands/typecmds.c:3876 #, c-format msgid "%s is not a base type" msgstr "%s är inte en bastyp" @@ -11021,8 +11012,8 @@ msgstr "måste vara superanvändare för ändra bypassrls-attribut" msgid "permission denied to create role" msgstr "rättighet saknas för att skapa roll" -#: commands/user.c:325 commands/user.c:1224 commands/user.c:1231 gram.y:15143 -#: gram.y:15181 utils/adt/acl.c:5327 utils/adt/acl.c:5333 +#: commands/user.c:325 commands/user.c:1224 commands/user.c:1231 gram.y:15146 +#: gram.y:15184 utils/adt/acl.c:5327 utils/adt/acl.c:5333 #, c-format msgid "role name \"%s\" is reserved" msgstr "rollnamnet \"%s\" är reserverat" @@ -11289,22 +11280,22 @@ msgstr "äldsta multixact är från lång tid tillbaka" msgid "Close open transactions with multixacts soon to avoid wraparound problems." msgstr "Stäng öppna transaktioner med multixacts snart för att undvika \"wraparound\"." -#: commands/vacuum.c:1612 +#: commands/vacuum.c:1623 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "några databaser har inte städats (vacuum) på över 2 miljarder transaktioner" -#: commands/vacuum.c:1613 +#: commands/vacuum.c:1624 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "Du kan redan ha fått dataförlust på grund av transaktions-wraparound." -#: commands/vacuum.c:1771 +#: commands/vacuum.c:1784 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "hoppar över \"%s\" --- kan inte köra vacuum på icke-tabeller eller speciella systemtabeller" -#: commands/variable.c:165 utils/misc/guc.c:11166 utils/misc/guc.c:11228 +#: commands/variable.c:165 utils/misc/guc.c:11184 utils/misc/guc.c:11246 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Okänt nyckelord: \"%s\"" @@ -11485,12 +11476,12 @@ msgstr "markör \"%s\" är inte positionerad på en rad" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "markör \"%s\" är inte en enkel uppdaterbar skanning av tabell \"%s\"" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2409 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2404 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "typen av parameter %d (%s) matchar inte det som var vid preparerande av plan (%s)" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2421 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2416 #, c-format msgid "no value found for parameter %d" msgstr "hittade inget värde för parameter %d" @@ -11519,7 +11510,7 @@ msgstr[0] "kan inte överföra mer än %d argument till en funktion" msgstr[1] "kan inte överföra mer än %d argument till en funktion" #: executor/execExpr.c:2587 executor/execExpr.c:2593 -#: executor/execExprInterp.c:2735 utils/adt/arrayfuncs.c:262 +#: executor/execExprInterp.c:2730 utils/adt/arrayfuncs.c:262 #: utils/adt/arrayfuncs.c:560 utils/adt/arrayfuncs.c:1302 #: utils/adt/arrayfuncs.c:3348 utils/adt/arrayfuncs.c:5308 #: utils/adt/arrayfuncs.c:5821 @@ -11527,83 +11518,83 @@ msgstr[1] "kan inte överföra mer än %d argument till en funktion" msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "antalet array-dimensioner (%d) överskrider det maximalt tillåtna (%d)" -#: executor/execExprInterp.c:1899 +#: executor/execExprInterp.c:1894 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "attribut %d för typ %s har tagits bort" -#: executor/execExprInterp.c:1905 +#: executor/execExprInterp.c:1900 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "attribut %d för typ %s har fel typ" -#: executor/execExprInterp.c:1907 executor/execExprInterp.c:3007 -#: executor/execExprInterp.c:3054 +#: executor/execExprInterp.c:1902 executor/execExprInterp.c:3002 +#: executor/execExprInterp.c:3049 #, c-format msgid "Table has type %s, but query expects %s." msgstr "Tabell har typ %s men fråga förväntar sig %s." -#: executor/execExprInterp.c:2499 +#: executor/execExprInterp.c:2494 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF stöds inte för denna tabelltyp" -#: executor/execExprInterp.c:2713 +#: executor/execExprInterp.c:2708 #, c-format msgid "cannot merge incompatible arrays" msgstr "kan inte göra merge på inkompatibla arrayer" -#: executor/execExprInterp.c:2714 +#: executor/execExprInterp.c:2709 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "Array med elementtyp %s kan inte inkluderas i ARRAY-konstruktion med elementtyp %s." -#: executor/execExprInterp.c:2755 executor/execExprInterp.c:2785 +#: executor/execExprInterp.c:2750 executor/execExprInterp.c:2780 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "flerdimensionella vektorer måste ha array-uttryck av passande dimensioner" -#: executor/execExprInterp.c:3006 executor/execExprInterp.c:3053 +#: executor/execExprInterp.c:3001 executor/execExprInterp.c:3048 #, c-format msgid "attribute %d has wrong type" msgstr "attribut %d har fel typ" -#: executor/execExprInterp.c:3163 +#: executor/execExprInterp.c:3158 #, c-format msgid "array subscript in assignment must not be null" msgstr "array-index i tilldelning kan inte vara null" -#: executor/execExprInterp.c:3593 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3588 utils/adt/domains.c:149 #, c-format msgid "domain %s does not allow null values" msgstr "domäm %s tillåter inte null-värden" -#: executor/execExprInterp.c:3608 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3603 utils/adt/domains.c:184 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "värde för domän %s bryter mot check-villkoret \"%s\"" -#: executor/execExprInterp.c:3978 executor/execExprInterp.c:3995 -#: executor/execExprInterp.c:4096 executor/nodeModifyTable.c:109 +#: executor/execExprInterp.c:3973 executor/execExprInterp.c:3990 +#: executor/execExprInterp.c:4091 executor/nodeModifyTable.c:109 #: executor/nodeModifyTable.c:120 executor/nodeModifyTable.c:137 #: executor/nodeModifyTable.c:145 #, c-format msgid "table row type and query-specified row type do not match" msgstr "tabellens radtyp och frågans radtyp matchar inte" -#: executor/execExprInterp.c:3979 +#: executor/execExprInterp.c:3974 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." msgstr[0] "Tabellrad har %d attribut, men frågan förväntar sig %d." msgstr[1] "Tabellrad har %d attribut, men frågan förväntar sig %d." -#: executor/execExprInterp.c:3996 executor/nodeModifyTable.c:121 +#: executor/execExprInterp.c:3991 executor/nodeModifyTable.c:121 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "Tabellen har typ %s vid position %d, men frågan förväntar sig %s." -#: executor/execExprInterp.c:4097 executor/execSRF.c:967 +#: executor/execExprInterp.c:4092 executor/execSRF.c:967 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "Fysisk lagrings matchar inte för borttaget attribut på position %d." @@ -11806,32 +11797,32 @@ msgstr "ny rad bryter mot radsäkerhetspolicy \"%s\" (USING-uttryck) i tabell \" msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "ny rad bryter mot radsäkerhetspolicy (USING-uttryck) i tabell \"%s\"" -#: executor/execPartition.c:345 +#: executor/execPartition.c:341 #, c-format msgid "no partition of relation \"%s\" found for row" msgstr "ingen partition av relation \"%s\" kunde hittas för raden" -#: executor/execPartition.c:348 +#: executor/execPartition.c:344 #, c-format msgid "Partition key of the failing row contains %s." msgstr "Partitioneringsnyckel för den trasiga raden innehåller %s." -#: executor/execReplication.c:195 executor/execReplication.c:372 +#: executor/execReplication.c:196 executor/execReplication.c:373 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update, retrying" msgstr "tupel som skall låsas har redan flyttats till en annan partition av en samtidig uppdatering, försöker igen" -#: executor/execReplication.c:199 executor/execReplication.c:376 +#: executor/execReplication.c:200 executor/execReplication.c:377 #, c-format msgid "concurrent update, retrying" msgstr "samtidig uppdatering, försöker igen" -#: executor/execReplication.c:205 executor/execReplication.c:382 +#: executor/execReplication.c:206 executor/execReplication.c:383 #, c-format msgid "concurrent delete, retrying" msgstr "samtidig borttagning, försöker igen" -#: executor/execReplication.c:268 parser/parse_oper.c:228 +#: executor/execReplication.c:269 parser/parse_oper.c:228 #: utils/adt/array_userfuncs.c:719 utils/adt/array_userfuncs.c:858 #: utils/adt/arrayfuncs.c:3626 utils/adt/arrayfuncs.c:4146 #: utils/adt/arrayfuncs.c:6132 utils/adt/rowtypes.c:1182 @@ -11839,37 +11830,37 @@ msgstr "samtidig borttagning, försöker igen" msgid "could not identify an equality operator for type %s" msgstr "kunde inte hitta en likhetsoperator för typ %s" -#: executor/execReplication.c:585 +#: executor/execReplication.c:586 #, c-format msgid "cannot update table \"%s\" because it does not have a replica identity and publishes updates" msgstr "kan inte uppdatera tabell \"%s\" då den inte har en replikaidentitet och den publicerar uppdateringar" -#: executor/execReplication.c:587 +#: executor/execReplication.c:588 #, c-format msgid "To enable updating the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "För att slå på uppdatering av tabellen, sätt REPLICA IDENTITY med ALTER TABLE." -#: executor/execReplication.c:591 +#: executor/execReplication.c:592 #, c-format msgid "cannot delete from table \"%s\" because it does not have a replica identity and publishes deletes" msgstr "kan inte radera från tabell \"%s\" då den inte har en replikaidentitet och den publicerar uppdateringar" -#: executor/execReplication.c:593 +#: executor/execReplication.c:594 #, c-format msgid "To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "För att slå på borttagning från tabellen, ange REPLICA IDENTITY med ALTER TABLE." -#: executor/execReplication.c:612 executor/execReplication.c:620 +#: executor/execReplication.c:613 executor/execReplication.c:621 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "kan inte använda relation \"%s.%s\" som logisk replikeringsmål" -#: executor/execReplication.c:614 +#: executor/execReplication.c:615 #, c-format msgid "\"%s.%s\" is a foreign table." msgstr "\"%s.%s\" är en främmande tabell" -#: executor/execReplication.c:622 +#: executor/execReplication.c:623 #, c-format msgid "\"%s.%s\" is not a table." msgstr "\"%s.%s\" är inte en tabell" @@ -11943,74 +11934,74 @@ msgstr "%s är inte tillåtet i en SQL-funktion" msgid "%s is not allowed in a non-volatile function" msgstr "%s tillåts inte i en icke-volatile-funktion" -#: executor/functions.c:1430 +#: executor/functions.c:1424 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "SQL-funktion \"%s\" sats %d" -#: executor/functions.c:1456 +#: executor/functions.c:1450 #, c-format msgid "SQL function \"%s\" during startup" msgstr "SQL-funktion \"%s\" under uppstart" -#: executor/functions.c:1549 +#: executor/functions.c:1553 #, c-format msgid "calling procedures with output arguments is not supported in SQL functions" msgstr "anropa procedurer med output-argument stöds inte i SQL-funktioner" -#: executor/functions.c:1671 executor/functions.c:1708 -#: executor/functions.c:1722 executor/functions.c:1812 -#: executor/functions.c:1845 executor/functions.c:1859 +#: executor/functions.c:1687 executor/functions.c:1724 +#: executor/functions.c:1738 executor/functions.c:1828 +#: executor/functions.c:1861 executor/functions.c:1875 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "returtypen stämmer inte i funktion deklarerad att returnera %s" -#: executor/functions.c:1673 +#: executor/functions.c:1689 #, c-format msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." msgstr "Funktionen sista sats måste vara en SELECT eller INSERT/UPDATE/DELETE RETURNING." -#: executor/functions.c:1710 +#: executor/functions.c:1726 #, c-format msgid "Final statement must return exactly one column." msgstr "Sista satsen måste returnera exakt en kolumn." -#: executor/functions.c:1724 +#: executor/functions.c:1740 #, c-format msgid "Actual return type is %s." msgstr "Verklig returtyp är %s." -#: executor/functions.c:1814 +#: executor/functions.c:1830 #, c-format msgid "Final statement returns too many columns." msgstr "Sista satsen returnerar för många kolumner." -#: executor/functions.c:1847 +#: executor/functions.c:1863 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "Sista satsen returnerar %s istället för %s vid column %d." -#: executor/functions.c:1861 +#: executor/functions.c:1877 #, c-format msgid "Final statement returns too few columns." msgstr "Sista satsen returnerar för få kolumner." -#: executor/functions.c:1889 +#: executor/functions.c:1905 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "returtyp %s stöds inte för SQL-funktioner" -#: executor/nodeAgg.c:3014 executor/nodeAgg.c:3023 executor/nodeAgg.c:3035 +#: executor/nodeAgg.c:3075 executor/nodeAgg.c:3084 executor/nodeAgg.c:3096 #, c-format msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" msgstr "oväntat EOF för band %d: efterfrågade %zu byte, läste %zu byte" -#: executor/nodeAgg.c:3947 parser/parse_agg.c:655 parser/parse_agg.c:685 +#: executor/nodeAgg.c:4026 parser/parse_agg.c:655 parser/parse_agg.c:685 #, c-format msgid "aggregate function calls cannot be nested" msgstr "aggregatfunktionsanrop kan inte nästlas" -#: executor/nodeAgg.c:4155 executor/nodeWindowAgg.c:2836 +#: executor/nodeAgg.c:4234 executor/nodeWindowAgg.c:2836 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "aggregat %u måste ha kompatibel indatatyp och övergångstyp" @@ -12022,18 +12013,13 @@ msgstr "egen skanning \"%s\" stöder inte MarkPos" #: executor/nodeHashjoin.c:1046 executor/nodeHashjoin.c:1076 #, c-format -msgid "could not rewind hash-join temporary file: %m" -msgstr "kunde inte spola tillbaka hash-join-temporärfil: %m" - -#: executor/nodeHashjoin.c:1235 executor/nodeHashjoin.c:1241 -#, c-format -msgid "could not write to hash-join temporary file: %m" -msgstr "kunde inte skriva till hash-join-temporärfil: %m" +msgid "could not rewind hash-join temporary file" +msgstr "kunde inte spola tillbaka hash-join-temporärfil" -#: executor/nodeHashjoin.c:1282 executor/nodeHashjoin.c:1292 +#: executor/nodeHashjoin.c:1272 executor/nodeHashjoin.c:1283 #, c-format -msgid "could not read from hash-join temporary file: %m" -msgstr "kunde inte läsa från hash-join-temporärfil: %m" +msgid "could not read from hash-join temporary file: read only %zu of %zu bytes" +msgstr "kunde inte läsa från hash-join-temporärfil: läste bara %zu av %zu byte" #: executor/nodeIndexonlyscan.c:242 #, c-format @@ -12247,359 +12233,359 @@ msgstr "ogiltig flagga \"%s\"" msgid "Valid options in this context are: %s" msgstr "Giltiga flaggor i detta kontext är: %s" -#: gram.y:1048 +#: gram.y:1047 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "UNENCRYPTED PASSWORD stöds inte längre" -#: gram.y:1049 +#: gram.y:1048 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "Ta bort UNENCRYPTED för att lagra lösenord i krypterad form istället." -#: gram.y:1111 +#: gram.y:1110 #, c-format msgid "unrecognized role option \"%s\"" msgstr "okänd rollflagga \"%s\"" -#: gram.y:1358 gram.y:1373 +#: gram.y:1357 gram.y:1372 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTS kan inte innehålla schemaelement" -#: gram.y:1519 +#: gram.y:1518 #, c-format msgid "current database cannot be changed" msgstr "nuvarande databas kan inte ändras" -#: gram.y:1643 +#: gram.y:1642 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "tidszoneintervall måste vara HOUR eller HOUR TO MINUTE" -#: gram.y:2178 +#: gram.y:2177 #, c-format msgid "column number must be in range from 1 to %d" msgstr "kolumnnummer måste vara i intervallet 1 till %d." -#: gram.y:2710 +#: gram.y:2709 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "sekvensflagga \"%s\" stöds inte här" -#: gram.y:2739 +#: gram.y:2738 #, c-format msgid "modulus for hash partition provided more than once" msgstr "modulo för hash-partition angiven mer än en gång" -#: gram.y:2748 +#: gram.y:2747 #, c-format msgid "remainder for hash partition provided more than once" msgstr "rest för hash-partition angiven mer än en gång" -#: gram.y:2755 +#: gram.y:2754 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "okänd gränsangivelse \"%s\" för hash-partition" -#: gram.y:2763 +#: gram.y:2762 #, c-format msgid "modulus for hash partition must be specified" msgstr "modulo för hashpartition måste anges" -#: gram.y:2767 +#: gram.y:2766 #, c-format msgid "remainder for hash partition must be specified" msgstr "rest för hash-partition måste anges" -#: gram.y:2968 gram.y:3001 +#: gram.y:2967 gram.y:3000 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUT tillåts inte med PROGRAM" -#: gram.y:2974 +#: gram.y:2973 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "WHERE-klausul tillåts inte med COPY TO" -#: gram.y:3306 gram.y:3313 gram.y:11652 gram.y:11660 +#: gram.y:3305 gram.y:3312 gram.y:11647 gram.y:11655 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "GLOBAL när man skapar temporära tabeller är på utgående och kommer tas bort" -#: gram.y:3553 +#: gram.y:3552 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "för en genererad kolumn så måste GENERATED ALWAYS anges" -#: gram.y:3819 utils/adt/ri_triggers.c:1997 +#: gram.y:3818 utils/adt/ri_triggers.c:2007 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL är inte implementerat ännu" -#: gram.y:4517 +#: gram.y:4512 #, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" msgstr "CREATE EXTENSION .. FROM stöds inte längre" -#: gram.y:5343 +#: gram.y:5338 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "okänd radsäkerhetsflagga \"%s\"" -#: gram.y:5344 +#: gram.y:5339 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "Bara policys PERMISSIVE och RESTRICTIVE stöds för tillfället." -#: gram.y:5457 +#: gram.y:5452 msgid "duplicate trigger events specified" msgstr "multipla utlösarhändelser angivna" -#: gram.y:5598 parser/parse_utilcmd.c:3483 parser/parse_utilcmd.c:3509 +#: gram.y:5593 parser/parse_utilcmd.c:3570 parser/parse_utilcmd.c:3596 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "villkor deklarerat INITIALLY DEFERRED måste vara DEFERRABLE" -#: gram.y:5605 +#: gram.y:5600 #, c-format msgid "conflicting constraint properties" msgstr "motstridiga vilkorsegenskaper" -#: gram.y:5701 +#: gram.y:5696 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION är inte implementerat ännu" -#: gram.y:6084 +#: gram.y:6079 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK krävs inte längre" -#: gram.y:6085 +#: gram.y:6080 #, c-format msgid "Update your data type." msgstr "Uppdatera din datatyp" -#: gram.y:7836 +#: gram.y:7831 #, c-format msgid "aggregates cannot have output arguments" msgstr "aggregat kan inte ha utdataargument" -#: gram.y:8228 utils/adt/regproc.c:692 utils/adt/regproc.c:733 +#: gram.y:8223 utils/adt/regproc.c:692 utils/adt/regproc.c:733 #, c-format msgid "missing argument" msgstr "argument saknas" -#: gram.y:8229 utils/adt/regproc.c:693 utils/adt/regproc.c:734 +#: gram.y:8224 utils/adt/regproc.c:693 utils/adt/regproc.c:734 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Använd NONE för att markera det saknade argumentet för en unär operator." -#: gram.y:10158 gram.y:10176 +#: gram.y:10153 gram.y:10171 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION stöds inte för rekursiva vyer" -#: gram.y:11784 +#: gram.y:11779 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "LIMIT #,#-syntax stöds inte" -#: gram.y:11785 +#: gram.y:11780 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Använd separata klausuler LIMIT och OFFSET." -#: gram.y:12103 gram.y:12128 +#: gram.y:12106 gram.y:12131 #, c-format msgid "VALUES in FROM must have an alias" msgstr "VALUES i FROM måste ha ett alias" -#: gram.y:12104 gram.y:12129 +#: gram.y:12107 gram.y:12132 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "Till exempel, FROM (VALUES ...) [AS] foo" -#: gram.y:12109 gram.y:12134 +#: gram.y:12112 gram.y:12137 #, c-format msgid "subquery in FROM must have an alias" msgstr "subfråga i FROM måste ha ett alias" -#: gram.y:12110 gram.y:12135 +#: gram.y:12113 gram.y:12138 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "Till exempel, FROM (SELECT ...) [AS] foo" -#: gram.y:12588 +#: gram.y:12591 #, c-format msgid "only one DEFAULT value is allowed" msgstr "bara ett DEFAULT-värde tillåts" -#: gram.y:12597 +#: gram.y:12600 #, c-format msgid "only one PATH value per column is allowed" msgstr "bara ett PATH-värde per kolumn tillåts" -#: gram.y:12606 +#: gram.y:12609 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "motstridiga eller överflödiga NULL / NOT NULL-deklarationer för kolumnen \"%s\"" -#: gram.y:12615 +#: gram.y:12618 #, c-format msgid "unrecognized column option \"%s\"" msgstr "okänd kolumnflagga \"%s\"" -#: gram.y:12869 +#: gram.y:12872 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "precisionen för typen float måste vara minst 1 bit" -#: gram.y:12878 +#: gram.y:12881 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "precisionen för typen float måste vara mindre än 54 bits" -#: gram.y:13369 +#: gram.y:13372 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "fel antal parametrar på vänster sida om OVERLAPS-uttryck" -#: gram.y:13374 +#: gram.y:13377 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "fel antal parametrar på höger sida om OVERLAPS-uttryck" -#: gram.y:13549 +#: gram.y:13552 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "UNIQUE-predikat är inte implementerat ännu" -#: gram.y:13912 +#: gram.y:13915 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "kan inte ha multipla ORDER BY-klausuler med WITHIN GROUP" -#: gram.y:13917 +#: gram.y:13920 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "kan inte använda DISTINCT med WITHIN GROUP" -#: gram.y:13922 +#: gram.y:13925 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "kan inte använda VARIADIC med WITHIN GROUP" -#: gram.y:14388 gram.y:14411 +#: gram.y:14391 gram.y:14414 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "fönsterramstart kan inte vara UNBOUNDED FOLLOWING" -#: gram.y:14393 +#: gram.y:14396 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "fönsterram som startar på efterföljande rad kan inte sluta på nuvarande rad" -#: gram.y:14416 +#: gram.y:14419 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "fönsterramslut kan inte vara UNBOUNDED PRECEDING" -#: gram.y:14422 +#: gram.y:14425 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "fönsterram som startar på aktuell rad kan inte ha föregående rader" -#: gram.y:14429 +#: gram.y:14432 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "fönsterram som startar på efterföljande rad kan inte ha föregående rader" -#: gram.y:15079 +#: gram.y:15082 #, c-format msgid "type modifier cannot have parameter name" msgstr "typmodifierare kan inte ha paremeternamn" -#: gram.y:15085 +#: gram.y:15088 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "typmodifierare kan inte ha ORDER BY" -#: gram.y:15150 gram.y:15157 +#: gram.y:15153 gram.y:15160 #, c-format msgid "%s cannot be used as a role name here" msgstr "%s kan inte användas som ett rollnamn här" -#: gram.y:15838 gram.y:16027 +#: gram.y:15841 gram.y:16030 msgid "improper use of \"*\"" msgstr "felaktig användning av \"*\"" -#: gram.y:15990 gram.y:16007 tsearch/spell.c:956 tsearch/spell.c:973 +#: gram.y:15993 gram.y:16010 tsearch/spell.c:956 tsearch/spell.c:973 #: tsearch/spell.c:990 tsearch/spell.c:1007 tsearch/spell.c:1072 #, c-format msgid "syntax error" msgstr "syntaxfel" -#: gram.y:16091 +#: gram.y:16094 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "ett sorterad-mängd-aggregat med ett direkt VARIADIC-argument måste ha ett aggregerat VARIADIC-argument av samma datatype" -#: gram.y:16128 +#: gram.y:16131 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "multipla ORDER BY-klausuler tillåts inte" -#: gram.y:16139 +#: gram.y:16142 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "multipla OFFSET-klausuler tillåts inte" -#: gram.y:16148 +#: gram.y:16151 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "multipla LIMIT-klausuler tillåts inte" -#: gram.y:16157 +#: gram.y:16160 #, c-format msgid "multiple limit options not allowed" msgstr "multipla limit-alternativ tillåts inte" -#: gram.y:16161 +#: gram.y:16164 #, c-format -msgid "WITH TIES options can not be specified without ORDER BY clause" -msgstr "WITH TIES-flaggan kan inte anges utan en ORDER BY-klausul" +msgid "WITH TIES cannot be specified without ORDER BY clause" +msgstr "WITH TIES kan inte anges utan en ORDER BY-klausul" -#: gram.y:16169 +#: gram.y:16172 #, c-format msgid "multiple WITH clauses not allowed" msgstr "multipla WITH-klausuler tillåts inte" -#: gram.y:16373 +#: gram.y:16376 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "OUT och INOUT-argument tillåts inte i TABLE-funktioner" -#: gram.y:16469 +#: gram.y:16472 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "multipla COLLATE-klausuler tillåts inte" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16507 gram.y:16520 +#: gram.y:16510 gram.y:16523 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "%s-villkor kan inte markeras DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16533 +#: gram.y:16536 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "%s-villkor kan inte markeras NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16546 +#: gram.y:16549 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "%s-villkor kan inte markeras NO INHERIT" @@ -12609,9 +12595,9 @@ msgstr "%s-villkor kan inte markeras NO INHERIT" msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %u" msgstr "okänd konfigurationsparameter \"%s\" i fil \"%s\" rad %u" -#: guc-file.l:352 utils/misc/guc.c:7028 utils/misc/guc.c:7222 -#: utils/misc/guc.c:7312 utils/misc/guc.c:7402 utils/misc/guc.c:7510 -#: utils/misc/guc.c:7605 +#: guc-file.l:352 utils/misc/guc.c:7018 utils/misc/guc.c:7216 +#: utils/misc/guc.c:7310 utils/misc/guc.c:7404 utils/misc/guc.c:7524 +#: utils/misc/guc.c:7623 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "parameter \"%s\" kan inte ändras utan att starta om servern" @@ -12697,13 +12683,13 @@ msgstr "kunde inte öppna konfigureringskatalog \"%s\": %m" msgid "could not access file \"%s\": %m" msgstr "kunde inte komma åt filen \"%s\": %m" -#: jit/llvm/llvmjit.c:595 +#: jit/llvm/llvmjit.c:622 #, c-format msgid "time to inline: %.3fs, opt: %.3fs, emit: %.3fs" msgstr "tid för inline: %.3fs, opt: %.3fs, emit: %.3fs" -#: jsonpath_gram.y:528 jsonpath_scan.l:515 jsonpath_scan.l:526 -#: jsonpath_scan.l:536 jsonpath_scan.l:578 utils/adt/encode.c:476 +#: jsonpath_gram.y:528 jsonpath_scan.l:519 jsonpath_scan.l:530 +#: jsonpath_scan.l:540 jsonpath_scan.l:582 utils/adt/encode.c:476 #: utils/adt/encode.c:541 utils/adt/jsonfuncs.c:619 utils/adt/varlena.c:319 #: utils/adt/varlena.c:360 #, c-format @@ -12721,18 +12707,18 @@ msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" msgstr "XQuery \"x\"-flagga (expanderat reguljärt uttryck) är inte implementerat" #. translator: %s is typically "syntax error" -#: jsonpath_scan.l:282 +#: jsonpath_scan.l:286 #, c-format msgid "%s at end of jsonpath input" msgstr "%s vid slutet av jsonpath-indata" #. translator: first %s is typically "syntax error" -#: jsonpath_scan.l:289 +#: jsonpath_scan.l:293 #, c-format msgid "%s at or near \"%s\" of jsonpath input" msgstr "%s vid eller nära \"%s\" i jsonpath-indata" -#: jsonpath_scan.l:494 utils/adt/jsonfuncs.c:613 +#: jsonpath_scan.l:498 utils/adt/jsonfuncs.c:613 #, c-format msgid "unsupported Unicode escape sequence" msgstr "Unicode escape-sekvens som inte stöds" @@ -13510,8 +13496,8 @@ msgstr "kunde inte skriva serverfil \"%s\": %m" msgid "large object read request is too large" msgstr "läsförfrågan för stort objekt är för stort" -#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:229 utils/adt/genfile.c:268 -#: utils/adt/genfile.c:304 +#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:265 utils/adt/genfile.c:304 +#: utils/adt/genfile.c:340 #, c-format msgid "requested length cannot be negative" msgstr "efterfrågad längd kan inte vara negativ" @@ -13599,167 +13585,172 @@ msgstr "kunde inte acceptera GSSSPI-säkerhetskontext" msgid "GSSAPI size check error" msgstr "GSSAPI-fel vid kontroll av storlek" -#: libpq/be-secure-openssl.c:111 +#: libpq/be-secure-openssl.c:112 #, c-format msgid "could not create SSL context: %s" msgstr "kunde inte skapa SSL-kontext: %s" -#: libpq/be-secure-openssl.c:137 +#: libpq/be-secure-openssl.c:138 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "kunde inte ladda serverns certifikatfil \"%s\": %s" -#: libpq/be-secure-openssl.c:157 +#: libpq/be-secure-openssl.c:158 #, c-format msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "privat nyckelfil \"%s\" kan inte laddas om eftersom den kräver en lösenordsfras" -#: libpq/be-secure-openssl.c:162 +#: libpq/be-secure-openssl.c:163 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "kunde inte läsa in privata nyckelfilen \"%s\": %s" -#: libpq/be-secure-openssl.c:171 +#: libpq/be-secure-openssl.c:172 #, c-format msgid "check of private key failed: %s" msgstr "kontroll av privat nyckel misslyckades: %s" -#: libpq/be-secure-openssl.c:183 libpq/be-secure-openssl.c:205 +#: libpq/be-secure-openssl.c:184 libpq/be-secure-openssl.c:206 #, c-format msgid "\"%s\" setting \"%s\" not supported by this build" msgstr "\"%s\"-inställning \"%s\" stöds inte av detta bygge" -#: libpq/be-secure-openssl.c:193 +#: libpq/be-secure-openssl.c:194 #, c-format msgid "could not set minimum SSL protocol version" msgstr "kunde inte sätta minimal SSL-protokollversion" -#: libpq/be-secure-openssl.c:215 +#: libpq/be-secure-openssl.c:216 #, c-format msgid "could not set maximum SSL protocol version" msgstr "kunde inte sätta maximal SSL-protokollversion" -#: libpq/be-secure-openssl.c:231 +#: libpq/be-secure-openssl.c:232 #, c-format msgid "could not set SSL protocol version range" msgstr "kunde inte sätta SSL-protokollversionsintervall" -#: libpq/be-secure-openssl.c:232 +#: libpq/be-secure-openssl.c:233 #, c-format msgid "\"%s\" cannot be higher than \"%s\"" msgstr "\"%s\" får inte vara högre än \"%s\"" -#: libpq/be-secure-openssl.c:256 +#: libpq/be-secure-openssl.c:257 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "kunde inte sätta kryptolistan (inga giltiga krypton är tillgängliga)" -#: libpq/be-secure-openssl.c:274 +#: libpq/be-secure-openssl.c:275 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "kunde inte ladda root-certifikatfilen \"%s\": %s" -#: libpq/be-secure-openssl.c:301 +#: libpq/be-secure-openssl.c:302 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "kunde inte ladda certifikatåterkallningslistfil \"%s\" för SSL-certifikat: %s" -#: libpq/be-secure-openssl.c:376 +#: libpq/be-secure-openssl.c:378 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "kunde inte initiera SSL-uppkoppling: SSL-kontex ej uppsatt" -#: libpq/be-secure-openssl.c:384 +#: libpq/be-secure-openssl.c:386 #, c-format msgid "could not initialize SSL connection: %s" msgstr "kunde inte initiera SSL-uppkoppling: %s" -#: libpq/be-secure-openssl.c:392 +#: libpq/be-secure-openssl.c:394 #, c-format msgid "could not set SSL socket: %s" msgstr "kunde inte sätta SSL-uttag (socket): %s" -#: libpq/be-secure-openssl.c:447 +#: libpq/be-secure-openssl.c:449 #, c-format msgid "could not accept SSL connection: %m" msgstr "kunde inte acceptera SSL-uppkoppling: %m" -#: libpq/be-secure-openssl.c:451 libpq/be-secure-openssl.c:462 +#: libpq/be-secure-openssl.c:453 libpq/be-secure-openssl.c:506 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "kunde inte starta SSL-anslutning: hittade EOF" -#: libpq/be-secure-openssl.c:456 +#: libpq/be-secure-openssl.c:492 #, c-format msgid "could not accept SSL connection: %s" msgstr "kunde inte acceptera SSL-uppkoppling: %s" -#: libpq/be-secure-openssl.c:467 libpq/be-secure-openssl.c:598 -#: libpq/be-secure-openssl.c:662 +#: libpq/be-secure-openssl.c:495 +#, c-format +msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." +msgstr "Detta kan tyda på att servern inte stöder någon SSL-protokolversion mellan %s och %s." + +#: libpq/be-secure-openssl.c:511 libpq/be-secure-openssl.c:642 +#: libpq/be-secure-openssl.c:706 #, c-format msgid "unrecognized SSL error code: %d" msgstr "okänd SSL-felkod: %d" -#: libpq/be-secure-openssl.c:509 +#: libpq/be-secure-openssl.c:553 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "SSL-certifikatets \"comman name\" innehåller null-värden" -#: libpq/be-secure-openssl.c:587 libpq/be-secure-openssl.c:646 +#: libpq/be-secure-openssl.c:631 libpq/be-secure-openssl.c:690 #, c-format msgid "SSL error: %s" msgstr "SSL-fel: %s" -#: libpq/be-secure-openssl.c:827 +#: libpq/be-secure-openssl.c:871 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "kunde inte öppna DH-parameterfil \"%s\": %m" -#: libpq/be-secure-openssl.c:839 +#: libpq/be-secure-openssl.c:883 #, c-format msgid "could not load DH parameters file: %s" msgstr "kunde inte ladda DH-parameterfil: %s" -#: libpq/be-secure-openssl.c:849 +#: libpq/be-secure-openssl.c:893 #, c-format msgid "invalid DH parameters: %s" msgstr "ogiltiga DH-parametrar: %s" -#: libpq/be-secure-openssl.c:857 +#: libpq/be-secure-openssl.c:901 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "ogiltiga DH-parametrar: p är inte ett primtal" -#: libpq/be-secure-openssl.c:865 +#: libpq/be-secure-openssl.c:909 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "ogiltiga DH-parametrar: varken lämplig generator eller säkert primtal" -#: libpq/be-secure-openssl.c:1020 +#: libpq/be-secure-openssl.c:1065 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: kunde inte ladda DH-parametrar" -#: libpq/be-secure-openssl.c:1028 +#: libpq/be-secure-openssl.c:1073 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: kunde inte sätta DH-parametrar: %s" -#: libpq/be-secure-openssl.c:1055 +#: libpq/be-secure-openssl.c:1100 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: okänt kurvnamn: %s" -#: libpq/be-secure-openssl.c:1064 +#: libpq/be-secure-openssl.c:1109 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: kunde inte skapa nyckel" -#: libpq/be-secure-openssl.c:1092 +#: libpq/be-secure-openssl.c:1137 msgid "no SSL error reported" msgstr "inget SSL-fel rapporterat" -#: libpq/be-secure-openssl.c:1096 +#: libpq/be-secure-openssl.c:1141 #, c-format msgid "SSL error code %lu" msgstr "SSL-felkod %lu" @@ -13831,7 +13822,7 @@ msgstr "autentiseringsfilrad är för lång" #: libpq/hba.c:1666 libpq/hba.c:1704 libpq/hba.c:1726 libpq/hba.c:1738 #: libpq/hba.c:1825 libpq/hba.c:1843 libpq/hba.c:1937 libpq/hba.c:1956 #: libpq/hba.c:1985 libpq/hba.c:1998 libpq/hba.c:2021 libpq/hba.c:2043 -#: libpq/hba.c:2057 tsearch/ts_locale.c:190 +#: libpq/hba.c:2057 tsearch/ts_locale.c:217 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "rad %d i konfigurationsfil \"%s\"" @@ -14063,7 +14054,7 @@ msgstr "clientcert kan bara konfigureras för \"hostssl\"-rader" #: libpq/hba.c:1725 #, c-format -msgid "clientcert can not be set to \"no-verify\" when using \"cert\" authentication" +msgid "clientcert cannot be set to \"no-verify\" when using \"cert\" authentication" msgstr "clientcert kan inte vara satt till \"no-verify\" när man använder \"cert\"-autentisering" #: libpq/hba.c:1737 @@ -14649,13 +14640,13 @@ msgstr "kunde inte hitta array-typ för datatyp %s" #: nodes/params.c:359 #, c-format -msgid "extended query \"%s\" with parameters: %s" -msgstr "utökad fråga \"%s\" med parametrar: %s" +msgid "portal \"%s\" with parameters: %s" +msgstr "portal \"%s\" med parametrar: %s" #: nodes/params.c:362 #, c-format -msgid "extended query with parameters: %s" -msgstr "utökad fråga med parametrar: %s" +msgid "unnamed portal with parameters: %s" +msgstr "ej namngiven portal med parametrar: %s" #: optimizer/path/joinrels.c:855 #, c-format @@ -14681,32 +14672,32 @@ msgid "could not implement GROUP BY" msgstr "kunde inte implementera GROUP BY" #: optimizer/plan/planner.c:2510 optimizer/plan/planner.c:4163 -#: optimizer/plan/planner.c:4897 optimizer/prep/prepunion.c:1045 +#: optimizer/plan/planner.c:4890 optimizer/prep/prepunion.c:1045 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "Några av datatyperna stöder bara hash:ning medan andra bara stöder sortering." -#: optimizer/plan/planner.c:4896 +#: optimizer/plan/planner.c:4889 #, c-format msgid "could not implement DISTINCT" msgstr "kunde inte implementera DISTINCT" -#: optimizer/plan/planner.c:5744 +#: optimizer/plan/planner.c:5737 #, c-format msgid "could not implement window PARTITION BY" msgstr "kunde inte implementera fönster-PARTITION BY" -#: optimizer/plan/planner.c:5745 +#: optimizer/plan/planner.c:5738 #, c-format msgid "Window partitioning columns must be of sortable datatypes." -msgstr "Fönsterpartitionskolumner måsta ha en sorterbar datatyp." +msgstr "Fönsterpartitioneringskolumner måsta ha en sorterbar datatyp." -#: optimizer/plan/planner.c:5749 +#: optimizer/plan/planner.c:5742 #, c-format msgid "could not implement window ORDER BY" msgstr "kunde inte implementera fönster-ORDER BY" -#: optimizer/plan/planner.c:5750 +#: optimizer/plan/planner.c:5743 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Fönsterordningskolumner måste ha en sorterbar datatyp." @@ -14732,7 +14723,7 @@ msgstr "Alla kolumndatatyper måsta vara hash-bara." msgid "could not implement %s" msgstr "kunde inte implementera %s" -#: optimizer/util/clauses.c:4763 +#: optimizer/util/clauses.c:4747 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "SQL-funktion \"%s\" vid inline:ing" @@ -15388,8 +15379,8 @@ msgstr "kolumnaliaslista för \"%s\" har för många element" #: parser/parse_clause.c:1773 #, c-format -msgid "row count cannot be NULL in FETCH FIRST ... WITH TIES clause" -msgstr "radantal kan inte vara NULL i FETCH FIRST ... WITH TIES-klausul" +msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" +msgstr "radantal kan inte vara null i FETCH FIRST ... WITH TIES-klausul" #. translator: %s is name of a SQL construct, eg LIMIT #: parser/parse_clause.c:1798 @@ -16633,344 +16624,339 @@ msgstr "typmodifierare måste vare enkla konstanter eller identifierare" msgid "invalid type name \"%s\"" msgstr "ogiltigt typnamn \"%s\"" -#: parser/parse_utilcmd.c:263 +#: parser/parse_utilcmd.c:264 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "kan inte skapa partitionerad tabell som barnarv" -#: parser/parse_utilcmd.c:427 +#: parser/parse_utilcmd.c:428 #, c-format msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" msgstr "%s kommer skapa en implicit sekvens \"%s\" för \"serial\"-kolumnen \"%s.%s\"" -#: parser/parse_utilcmd.c:558 +#: parser/parse_utilcmd.c:559 #, c-format msgid "array of serial is not implemented" msgstr "array med serial är inte implementerat" -#: parser/parse_utilcmd.c:636 parser/parse_utilcmd.c:648 +#: parser/parse_utilcmd.c:637 parser/parse_utilcmd.c:649 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "motstridiga NULL/NOT NULL-villkor för kolumnen \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:660 +#: parser/parse_utilcmd.c:661 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "multipla default-värden angivna för kolumn \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:677 +#: parser/parse_utilcmd.c:678 #, c-format msgid "identity columns are not supported on typed tables" msgstr "identitetskolumner stöds inte på typade tabeller" -#: parser/parse_utilcmd.c:681 +#: parser/parse_utilcmd.c:682 #, c-format msgid "identity columns are not supported on partitions" msgstr "identitetskolumner stöds inte för partitioner" -#: parser/parse_utilcmd.c:690 +#: parser/parse_utilcmd.c:691 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "multipla identitetspecifikationer för kolumn \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:710 +#: parser/parse_utilcmd.c:711 #, c-format msgid "generated columns are not supported on typed tables" msgstr "genererade kolumner stöds inte på typade tabeller" -#: parser/parse_utilcmd.c:714 +#: parser/parse_utilcmd.c:715 #, c-format msgid "generated columns are not supported on partitions" msgstr "genererade kolumner stöds inte för partitioner" -#: parser/parse_utilcmd.c:719 +#: parser/parse_utilcmd.c:720 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "multipla genereringsklausuler angivna för kolumn \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:737 parser/parse_utilcmd.c:852 +#: parser/parse_utilcmd.c:738 parser/parse_utilcmd.c:853 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "primärnyckelvillkor stöds inte på främmande tabeller" -#: parser/parse_utilcmd.c:746 parser/parse_utilcmd.c:862 +#: parser/parse_utilcmd.c:747 parser/parse_utilcmd.c:863 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "unika villkor stöds inte på främmande tabeller" -#: parser/parse_utilcmd.c:791 +#: parser/parse_utilcmd.c:792 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "både default och identity angiven för kolumn \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:799 +#: parser/parse_utilcmd.c:800 #, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" msgstr "både default och genereringsuttryck angiven för kolumn \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:807 +#: parser/parse_utilcmd.c:808 #, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" msgstr "både identity och genereringsuttryck angiven för kolumn \"%s\" i tabell \"%s\"" -#: parser/parse_utilcmd.c:872 +#: parser/parse_utilcmd.c:873 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "uteslutningsvillkor stöds inte på främmande tabeller" -#: parser/parse_utilcmd.c:878 +#: parser/parse_utilcmd.c:879 #, c-format msgid "exclusion constraints are not supported on partitioned tables" msgstr "uteslutningsvillkor stöds inte för partitionerade tabeller" -#: parser/parse_utilcmd.c:943 +#: parser/parse_utilcmd.c:944 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE stöds inte för att skapa främmande tabeller" -#: parser/parse_utilcmd.c:1095 -#, c-format -msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." -msgstr "Genereringsuttryck för kolumn \"%s\" innehåller en hela-raden-referens på tabellen \"%s\"." - -#: parser/parse_utilcmd.c:1598 parser/parse_utilcmd.c:1707 +#: parser/parse_utilcmd.c:1704 parser/parse_utilcmd.c:1813 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "Index \"%s\" innehåller en hela-raden-referens." -#: parser/parse_utilcmd.c:2075 +#: parser/parse_utilcmd.c:2163 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "kan inte använda ett existerande index i CREATE TABLE" -#: parser/parse_utilcmd.c:2095 +#: parser/parse_utilcmd.c:2183 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "index \"%s\" är redan associerad med ett villkor" -#: parser/parse_utilcmd.c:2110 +#: parser/parse_utilcmd.c:2198 #, c-format msgid "index \"%s\" is not valid" msgstr "index \"%s\" är inte giltigt" -#: parser/parse_utilcmd.c:2116 +#: parser/parse_utilcmd.c:2204 #, c-format msgid "\"%s\" is not a unique index" msgstr "\"%s\" är inte ett unikt index" -#: parser/parse_utilcmd.c:2117 parser/parse_utilcmd.c:2124 -#: parser/parse_utilcmd.c:2131 parser/parse_utilcmd.c:2208 +#: parser/parse_utilcmd.c:2205 parser/parse_utilcmd.c:2212 +#: parser/parse_utilcmd.c:2219 parser/parse_utilcmd.c:2296 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "Kan inte skapa en primärnyckel eller ett unikt villkor med hjälp av ett sådant index." -#: parser/parse_utilcmd.c:2123 +#: parser/parse_utilcmd.c:2211 #, c-format msgid "index \"%s\" contains expressions" msgstr "index \"%s\" innehåller uttryck" -#: parser/parse_utilcmd.c:2130 +#: parser/parse_utilcmd.c:2218 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\" är ett partiellt index" -#: parser/parse_utilcmd.c:2142 +#: parser/parse_utilcmd.c:2230 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\" är ett \"deferrable\" index" -#: parser/parse_utilcmd.c:2143 +#: parser/parse_utilcmd.c:2231 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "Kan inte skapa ett icke-\"deferrable\" integritetsvillkor från ett \"deferrable\" index." -#: parser/parse_utilcmd.c:2207 +#: parser/parse_utilcmd.c:2295 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "index \"%s\" kolumn nummer %d har ingen standard för sorteringsbeteende" -#: parser/parse_utilcmd.c:2364 +#: parser/parse_utilcmd.c:2452 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "kolumn \"%s\" finns med två gånger i primära nyckel-villkoret" -#: parser/parse_utilcmd.c:2370 +#: parser/parse_utilcmd.c:2458 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "kolumn \"%s\" finns med två gånger i unique-villkoret" -#: parser/parse_utilcmd.c:2723 +#: parser/parse_utilcmd.c:2811 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "indexuttryck och predikat kan bara referera till tabellen som indexeras" -#: parser/parse_utilcmd.c:2769 +#: parser/parse_utilcmd.c:2857 #, c-format msgid "rules on materialized views are not supported" msgstr "regler på materialiserade vyer stöds inte" -#: parser/parse_utilcmd.c:2832 +#: parser/parse_utilcmd.c:2920 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "WHERE-villkor i regel kan inte innehålla referenser till andra relationer" -#: parser/parse_utilcmd.c:2906 +#: parser/parse_utilcmd.c:2994 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "regler med WHERE-villkor kan bara innehålla SELECT-, INSERT-, UPDATE- eller DELETE-handlingar" -#: parser/parse_utilcmd.c:2924 parser/parse_utilcmd.c:3025 +#: parser/parse_utilcmd.c:3012 parser/parse_utilcmd.c:3113 #: rewrite/rewriteHandler.c:502 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "UNION-/INTERSECT-/EXCEPT-satser med villkor är inte implementerat" -#: parser/parse_utilcmd.c:2942 +#: parser/parse_utilcmd.c:3030 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "ON SELECT-regel kan inte använda OLD" -#: parser/parse_utilcmd.c:2946 +#: parser/parse_utilcmd.c:3034 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "ON SELECT-regel kan inte använda NEW" -#: parser/parse_utilcmd.c:2955 +#: parser/parse_utilcmd.c:3043 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "ON INSERT-regel kan inte använda OLD" -#: parser/parse_utilcmd.c:2961 +#: parser/parse_utilcmd.c:3049 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "ON DELETE-regel kan inte använda NEW" -#: parser/parse_utilcmd.c:2989 +#: parser/parse_utilcmd.c:3077 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "kan inte referera till OLD i WITH-fråga" -#: parser/parse_utilcmd.c:2996 +#: parser/parse_utilcmd.c:3084 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "kan inte referera till NEW i WITH-fråga" -#: parser/parse_utilcmd.c:3455 +#: parser/parse_utilcmd.c:3542 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "felplacerad DEFERRABLE-klausul" -#: parser/parse_utilcmd.c:3460 parser/parse_utilcmd.c:3475 +#: parser/parse_utilcmd.c:3547 parser/parse_utilcmd.c:3562 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "multipla DEFERRABLE/NOT DEFERRABLE-klausuler tillåts inte" -#: parser/parse_utilcmd.c:3470 +#: parser/parse_utilcmd.c:3557 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "felplacerad NOT DEFERRABLE-klausul" -#: parser/parse_utilcmd.c:3491 +#: parser/parse_utilcmd.c:3578 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "felplacerad INITIALLY DEFERRED-klausul" -#: parser/parse_utilcmd.c:3496 parser/parse_utilcmd.c:3522 +#: parser/parse_utilcmd.c:3583 parser/parse_utilcmd.c:3609 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "multipla INITIALLY IMMEDIATE/DEFERRED-klausuler tillåts inte" -#: parser/parse_utilcmd.c:3517 +#: parser/parse_utilcmd.c:3604 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "felplacerad klausul INITIALLY IMMEDIATE" -#: parser/parse_utilcmd.c:3708 +#: parser/parse_utilcmd.c:3795 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE anger ett schema (%s) som skiljer sig från det som skapas (%s)" -#: parser/parse_utilcmd.c:3743 +#: parser/parse_utilcmd.c:3830 #, c-format msgid "\"%s\" is not a partitioned table" msgstr "\"%s\" är inte en partitionerad tabell" -#: parser/parse_utilcmd.c:3750 +#: parser/parse_utilcmd.c:3837 #, c-format msgid "table \"%s\" is not partitioned" msgstr "tabell \"%s\" är inte partitionerad" -#: parser/parse_utilcmd.c:3757 +#: parser/parse_utilcmd.c:3844 #, c-format msgid "index \"%s\" is not partitioned" msgstr "index \"%s\" är inte partitionerad" -#: parser/parse_utilcmd.c:3797 +#: parser/parse_utilcmd.c:3884 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "en hash-partitionerad tabell får inte ha en standardpartition" -#: parser/parse_utilcmd.c:3814 +#: parser/parse_utilcmd.c:3901 #, c-format msgid "invalid bound specification for a hash partition" msgstr "ogiltig gränsangivelse för hash-partition" -#: parser/parse_utilcmd.c:3820 partitioning/partbounds.c:4688 +#: parser/parse_utilcmd.c:3907 partitioning/partbounds.c:4691 #, c-format msgid "modulus for hash partition must be a positive integer" msgstr "modulo för hash-partition vara ett positivt integer" -#: parser/parse_utilcmd.c:3827 partitioning/partbounds.c:4696 +#: parser/parse_utilcmd.c:3914 partitioning/partbounds.c:4699 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "rest för hash-partition måste vara lägre än modulo" -#: parser/parse_utilcmd.c:3840 +#: parser/parse_utilcmd.c:3927 #, c-format msgid "invalid bound specification for a list partition" msgstr "ogiltig gränsangivelse för listpartition" -#: parser/parse_utilcmd.c:3893 +#: parser/parse_utilcmd.c:3980 #, c-format msgid "invalid bound specification for a range partition" msgstr "ogiltig gränsangivelse för range-partition" -#: parser/parse_utilcmd.c:3899 +#: parser/parse_utilcmd.c:3986 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM måste ge exakt ett värde per partitionerande kolumn" -#: parser/parse_utilcmd.c:3903 +#: parser/parse_utilcmd.c:3990 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO måste ge exakt ett värde per partitionerande kolumn" -#: parser/parse_utilcmd.c:4017 +#: parser/parse_utilcmd.c:4104 #, c-format msgid "cannot specify NULL in range bound" msgstr "kan inte ange NULL i range-gräns" -#: parser/parse_utilcmd.c:4066 +#: parser/parse_utilcmd.c:4153 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "varje gräns efter MAXVALUE måste också vara MAXVALUE" -#: parser/parse_utilcmd.c:4073 +#: parser/parse_utilcmd.c:4160 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "varje gräns efter MINVALUE måste också vara MINVALUE" -#: parser/parse_utilcmd.c:4115 +#: parser/parse_utilcmd.c:4202 #, c-format msgid "could not determine which collation to use for partition bound expression" msgstr "kunde inte bestämma vilken jämförelse (collation) som skulle användas för partitionsgränsuttryck" -#: parser/parse_utilcmd.c:4132 +#: parser/parse_utilcmd.c:4219 #, c-format msgid "collation of partition bound value for column \"%s\" does not match partition key collation \"%s\"" msgstr "jämförelse (collation) av partitioneringsgränsvärde \"%s\" matchar inte partitioneringsnyckelns jämförelse \"%s\"" -#: parser/parse_utilcmd.c:4149 +#: parser/parse_utilcmd.c:4236 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "angivet värde kan inte typomvandlas till typ %s för kolumn \"%s\"" @@ -17008,52 +16994,52 @@ msgstr "ogiltigt Unicode-surrogatpar" msgid "identifier \"%s\" will be truncated to \"%s\"" msgstr "identifierare \"%s\" kommer trunkeras till \"%s\"" -#: partitioning/partbounds.c:2828 +#: partitioning/partbounds.c:2831 #, c-format msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "partition \"%s\" står i konflikt med existerande default-partition \"%s\"" -#: partitioning/partbounds.c:2887 +#: partitioning/partbounds.c:2890 #, c-format msgid "every hash partition modulus must be a factor of the next larger modulus" msgstr "varje hash-partition-modulo måste vara en faktror av näste högre modulo" -#: partitioning/partbounds.c:2983 +#: partitioning/partbounds.c:2986 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "tom intervallsgräns angiven för partition \"%s\"" -#: partitioning/partbounds.c:2985 +#: partitioning/partbounds.c:2988 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "Angiven lägre gräns %s är större än eller lika med övre gräns %s." -#: partitioning/partbounds.c:3082 +#: partitioning/partbounds.c:3085 #, c-format msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "partition \"%s\" skulle överlappa partition \"%s\"" -#: partitioning/partbounds.c:3199 +#: partitioning/partbounds.c:3202 #, c-format msgid "skipped scanning foreign table \"%s\" which is a partition of default partition \"%s\"" msgstr "hoppade över skanning av främmand tabell \"%s\" som er en partition för standardpartitionen \"%s\"" -#: partitioning/partbounds.c:4692 +#: partitioning/partbounds.c:4695 #, c-format msgid "remainder for hash partition must be a non-negative integer" msgstr "rest för hash-partition måste vara ett icke-negativt heltal" -#: partitioning/partbounds.c:4719 +#: partitioning/partbounds.c:4722 #, c-format msgid "\"%s\" is not a hash partitioned table" msgstr "\"%s\" är inte en hash-partitionerad tabell" -#: partitioning/partbounds.c:4730 partitioning/partbounds.c:4847 +#: partitioning/partbounds.c:4733 partitioning/partbounds.c:4850 #, c-format msgid "number of partitioning columns (%d) does not match number of partition keys provided (%d)" msgstr "antalet partitioneringskolumner (%d) stämmer inte med antalet partioneringsnycklas som angivits (%d)" -#: partitioning/partbounds.c:4752 partitioning/partbounds.c:4784 +#: partitioning/partbounds.c:4755 partitioning/partbounds.c:4787 #, c-format msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" msgstr "kolumn %d i partitioneringsnyckeln har typ \"%s\" men använt värde har typ \"%s\"" @@ -17275,52 +17261,52 @@ msgstr "kunde inte starta autovacuum-process: %m" msgid "autovacuum launcher started" msgstr "autovacuum-startare startad" -#: postmaster/autovacuum.c:840 +#: postmaster/autovacuum.c:839 #, c-format msgid "autovacuum launcher shutting down" msgstr "autovacuum-startare stänger ner" -#: postmaster/autovacuum.c:1478 +#: postmaster/autovacuum.c:1477 #, c-format msgid "could not fork autovacuum worker process: %m" msgstr "kunde inte starta autovacuum-arbetsprocess: %m" -#: postmaster/autovacuum.c:1687 +#: postmaster/autovacuum.c:1686 #, c-format msgid "autovacuum: processing database \"%s\"" msgstr "autovacuum: processar databas \"%s\"" -#: postmaster/autovacuum.c:2257 +#: postmaster/autovacuum.c:2256 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "autovacuum: slänger övergiven temptabell \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2486 +#: postmaster/autovacuum.c:2485 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "automatisk vacuum av tabell \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2489 +#: postmaster/autovacuum.c:2488 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "automatisk analys av tabell \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2682 +#: postmaster/autovacuum.c:2681 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "processar arbetspost för relation \"%s.%s.%s\"" -#: postmaster/autovacuum.c:3286 +#: postmaster/autovacuum.c:3285 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "autovacuum har inte startats på grund av en felkonfigurering" -#: postmaster/autovacuum.c:3287 +#: postmaster/autovacuum.c:3286 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Slå på flaggan \"track_counts\"." -#: postmaster/bgworker.c:394 postmaster/bgworker.c:834 +#: postmaster/bgworker.c:394 postmaster/bgworker.c:841 #, c-format msgid "registering background worker \"%s\"" msgstr "registrerar bakgrundsarbetare \"%s\"" @@ -17355,29 +17341,29 @@ msgstr "bakgrundsarbetare \"%s\": parallella arbetare kan inte konfigureras för msgid "terminating background worker \"%s\" due to administrator command" msgstr "terminerar bakgrundsarbetare \"%s\" pga administratörskommando" -#: postmaster/bgworker.c:842 +#: postmaster/bgworker.c:849 #, c-format msgid "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "bakgrundsarbetare \"%s\": måste vara registrerad i shared_preload_libraries" -#: postmaster/bgworker.c:854 +#: postmaster/bgworker.c:861 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "bakgrundsarbetare \"%s\": bara dynamiska bakgrundsarbetare kan be om notifiering" -#: postmaster/bgworker.c:869 +#: postmaster/bgworker.c:876 #, c-format msgid "too many background workers" msgstr "för många bakgrundsarbetare" -#: postmaster/bgworker.c:870 +#: postmaster/bgworker.c:877 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." msgstr[0] "Upp till %d bakgrundsarbetare kan registreras med nuvarande inställning." msgstr[1] "Upp till %d bakgrundsarbetare kan registreras med nuvarande inställning." -#: postmaster/bgworker.c:874 +#: postmaster/bgworker.c:881 #, c-format msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Överväg att öka konfigurationsparametern \"max_worker_processes\"." @@ -17409,315 +17395,315 @@ msgstr "Se senaste meddelanden i serverloggen för mer information." msgid "compacted fsync request queue from %d entries to %d entries" msgstr "minskade fsync-kön från %d poster till %d poster" -#: postmaster/pgarch.c:156 +#: postmaster/pgarch.c:155 #, c-format msgid "could not fork archiver: %m" msgstr "kunde inte fork():a arkiveraren: %m" -#: postmaster/pgarch.c:434 +#: postmaster/pgarch.c:425 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "archive_mode är påslagen, men ändå är archive_command inte satt" -#: postmaster/pgarch.c:456 +#: postmaster/pgarch.c:447 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "tog bort övergiven arkivstatusfil \"%s\": %m" -#: postmaster/pgarch.c:466 +#: postmaster/pgarch.c:457 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" msgstr "borttagning av övergiven arkivstatusfil \"%s\" misslyckades för många gånger, kommer försöka igen senare" -#: postmaster/pgarch.c:502 +#: postmaster/pgarch.c:493 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "arkivering av write-ahead-logg-fil \"%s\" misslyckades för många gånger, kommer försöka igen senare" -#: postmaster/pgarch.c:603 +#: postmaster/pgarch.c:594 #, c-format msgid "archive command failed with exit code %d" msgstr "arkiveringskommando misslyckades med felkod %d" -#: postmaster/pgarch.c:605 postmaster/pgarch.c:615 postmaster/pgarch.c:621 -#: postmaster/pgarch.c:630 +#: postmaster/pgarch.c:596 postmaster/pgarch.c:606 postmaster/pgarch.c:612 +#: postmaster/pgarch.c:621 #, c-format msgid "The failed archive command was: %s" msgstr "Det misslyckade arkiveringskommandot var: %s" -#: postmaster/pgarch.c:612 +#: postmaster/pgarch.c:603 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "arkiveringskommandot terminerades med avbrott 0x%X" -#: postmaster/pgarch.c:614 postmaster/postmaster.c:3760 +#: postmaster/pgarch.c:605 postmaster/postmaster.c:3742 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "Se C-include-fil \"ntstatus.h\" för en beskrivning av det hexdecimala värdet." -#: postmaster/pgarch.c:619 +#: postmaster/pgarch.c:610 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "arkiveringskommandot terminerades av signal %d: %s" -#: postmaster/pgarch.c:628 +#: postmaster/pgarch.c:619 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "arkiveringskommandot avslutade med okänd statuskod %d" -#: postmaster/pgstat.c:413 +#: postmaster/pgstat.c:419 #, c-format msgid "could not resolve \"localhost\": %s" msgstr "kunde inte slå upp \"localhost\": %s" -#: postmaster/pgstat.c:436 +#: postmaster/pgstat.c:442 #, c-format msgid "trying another address for the statistics collector" msgstr "försöker med en annan adress till statistikinsamlare" -#: postmaster/pgstat.c:445 +#: postmaster/pgstat.c:451 #, c-format msgid "could not create socket for statistics collector: %m" msgstr "kunde inte skapa uttag (socket) för statistikinsamlare: %m" -#: postmaster/pgstat.c:457 +#: postmaster/pgstat.c:463 #, c-format msgid "could not bind socket for statistics collector: %m" msgstr "kunde inte göra bind på uttag (socket) för statistikinsamlare: %m" -#: postmaster/pgstat.c:468 +#: postmaster/pgstat.c:474 #, c-format msgid "could not get address of socket for statistics collector: %m" msgstr "kunde inte få adress till uttag (socket) för statistikinsamlare: %m" -#: postmaster/pgstat.c:484 +#: postmaster/pgstat.c:490 #, c-format msgid "could not connect socket for statistics collector: %m" msgstr "kunde inte ansluta uttag (socket) för statistikinsamlare: %m" -#: postmaster/pgstat.c:505 +#: postmaster/pgstat.c:511 #, c-format msgid "could not send test message on socket for statistics collector: %m" msgstr "kunde inte skicka testmeddelande till uttag (socket) för statistikinsamlaren: %m" -#: postmaster/pgstat.c:531 +#: postmaster/pgstat.c:537 #, c-format msgid "select() failed in statistics collector: %m" msgstr "select() misslyckades i statistikinsamlaren: %m" -#: postmaster/pgstat.c:546 +#: postmaster/pgstat.c:552 #, c-format msgid "test message did not get through on socket for statistics collector" msgstr "testmeddelande kom inte igenom på uttag (socket) för statistikinsamlare" -#: postmaster/pgstat.c:561 +#: postmaster/pgstat.c:567 #, c-format msgid "could not receive test message on socket for statistics collector: %m" msgstr "kunde inte ta emot testmeddelande på uttag (socket) för statistikinsamlaren: %m" -#: postmaster/pgstat.c:571 +#: postmaster/pgstat.c:577 #, c-format msgid "incorrect test message transmission on socket for statistics collector" msgstr "inkorrekt överföring av testmeddelande på uttag (socket) till statistikinsamlare" -#: postmaster/pgstat.c:594 +#: postmaster/pgstat.c:600 #, c-format msgid "could not set statistics collector socket to nonblocking mode: %m" msgstr "kunde inte sätta statistikinsamlarens uttag (socket) till ickeblockerande läge: %m" -#: postmaster/pgstat.c:636 +#: postmaster/pgstat.c:642 #, c-format msgid "disabling statistics collector for lack of working socket" msgstr "stänger av statistikinsamlare då arbetsuttag (socket) saknas" -#: postmaster/pgstat.c:783 +#: postmaster/pgstat.c:789 #, c-format msgid "could not fork statistics collector: %m" msgstr "kunde inte fork():a statistikinsamlaren: %m" -#: postmaster/pgstat.c:1370 +#: postmaster/pgstat.c:1376 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "okänt återställningsmål \"%s\"" -#: postmaster/pgstat.c:1371 +#: postmaster/pgstat.c:1377 #, c-format msgid "Target must be \"archiver\" or \"bgwriter\"." msgstr "Målet måste vara \"archiver\" eller \"bgwriter\"." -#: postmaster/pgstat.c:4557 +#: postmaster/pgstat.c:4561 #, c-format msgid "could not read statistics message: %m" msgstr "kunde inte läsa statistikmeddelande: %m" -#: postmaster/pgstat.c:4879 postmaster/pgstat.c:5042 +#: postmaster/pgstat.c:4883 postmaster/pgstat.c:5046 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "kunde inte öppna temporär statistikfil \"%s\": %m" -#: postmaster/pgstat.c:4952 postmaster/pgstat.c:5087 +#: postmaster/pgstat.c:4956 postmaster/pgstat.c:5091 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "kunde inte skriva temporär statistikfil \"%s\": %m" -#: postmaster/pgstat.c:4961 postmaster/pgstat.c:5096 +#: postmaster/pgstat.c:4965 postmaster/pgstat.c:5100 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "kunde inte stänga temporär statistikfil \"%s\": %m" -#: postmaster/pgstat.c:4969 postmaster/pgstat.c:5104 +#: postmaster/pgstat.c:4973 postmaster/pgstat.c:5108 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "kunde inte döpa om temporär statistikfil \"%s\" till \"%s\": %m" -#: postmaster/pgstat.c:5201 postmaster/pgstat.c:5418 postmaster/pgstat.c:5572 +#: postmaster/pgstat.c:5205 postmaster/pgstat.c:5422 postmaster/pgstat.c:5576 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "kunde inte öppna statistikfil \"%s\": %m" -#: postmaster/pgstat.c:5213 postmaster/pgstat.c:5223 postmaster/pgstat.c:5244 -#: postmaster/pgstat.c:5255 postmaster/pgstat.c:5277 postmaster/pgstat.c:5292 -#: postmaster/pgstat.c:5355 postmaster/pgstat.c:5430 postmaster/pgstat.c:5450 -#: postmaster/pgstat.c:5468 postmaster/pgstat.c:5484 postmaster/pgstat.c:5502 -#: postmaster/pgstat.c:5518 postmaster/pgstat.c:5584 postmaster/pgstat.c:5596 -#: postmaster/pgstat.c:5608 postmaster/pgstat.c:5619 postmaster/pgstat.c:5644 -#: postmaster/pgstat.c:5666 +#: postmaster/pgstat.c:5217 postmaster/pgstat.c:5227 postmaster/pgstat.c:5248 +#: postmaster/pgstat.c:5259 postmaster/pgstat.c:5281 postmaster/pgstat.c:5296 +#: postmaster/pgstat.c:5359 postmaster/pgstat.c:5434 postmaster/pgstat.c:5454 +#: postmaster/pgstat.c:5472 postmaster/pgstat.c:5488 postmaster/pgstat.c:5506 +#: postmaster/pgstat.c:5522 postmaster/pgstat.c:5588 postmaster/pgstat.c:5600 +#: postmaster/pgstat.c:5612 postmaster/pgstat.c:5623 postmaster/pgstat.c:5648 +#: postmaster/pgstat.c:5670 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "korrupt statistikfil \"%s\"" -#: postmaster/pgstat.c:5795 +#: postmaster/pgstat.c:5799 #, c-format msgid "using stale statistics instead of current ones because stats collector is not responding" msgstr "använder gammal statistik istället för aktuell data då statistikinsamlaren inte svarar" -#: postmaster/pgstat.c:6125 +#: postmaster/pgstat.c:6129 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "databasens hashtabell har blivit korrupt vid uppstädning --- avbryter" -#: postmaster/postmaster.c:721 +#: postmaster/postmaster.c:733 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: ogiltigt argument till flagga -f: \"%s\"\n" -#: postmaster/postmaster.c:807 +#: postmaster/postmaster.c:819 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: ogiltigt argument till flagga -t: \"%s\"\n" -#: postmaster/postmaster.c:858 +#: postmaster/postmaster.c:870 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: ogiltigt argument: \"%s\"\n" -#: postmaster/postmaster.c:900 +#: postmaster/postmaster.c:912 #, c-format msgid "%s: superuser_reserved_connections (%d) must be less than max_connections (%d)\n" msgstr "%s: superuser_reserved_connections (%d) måste vara mindre än max_connections (%d)\n" -#: postmaster/postmaster.c:907 +#: postmaster/postmaster.c:919 #, c-format msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" msgstr "WAL-arkivering kan inte slås på när wal_level är \"minimal\"" -#: postmaster/postmaster.c:910 +#: postmaster/postmaster.c:922 #, c-format msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" msgstr "WAL-strömning (max_wal_senders > 0) kräver wal_level \"replica\" eller \"logical\"" -#: postmaster/postmaster.c:918 +#: postmaster/postmaster.c:930 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: ogiltiga datumtokentabeller, det behöver lagas\n" -#: postmaster/postmaster.c:1035 +#: postmaster/postmaster.c:1047 #, c-format msgid "could not create I/O completion port for child queue" msgstr "kunde inte skapa \"I/O completion port\" för barnkö" -#: postmaster/postmaster.c:1101 +#: postmaster/postmaster.c:1113 #, c-format msgid "ending log output to stderr" msgstr "avslutar loggutmatning till stderr" -#: postmaster/postmaster.c:1102 +#: postmaster/postmaster.c:1114 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "Framtida loggutmatning kommer gå till logg-destination \"%s\"." -#: postmaster/postmaster.c:1113 +#: postmaster/postmaster.c:1125 #, c-format msgid "starting %s" msgstr "startar %s" -#: postmaster/postmaster.c:1142 postmaster/postmaster.c:1240 +#: postmaster/postmaster.c:1154 postmaster/postmaster.c:1252 #: utils/init/miscinit.c:1597 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "ogiltigt listsyntax för parameter \"%s\"" -#: postmaster/postmaster.c:1173 +#: postmaster/postmaster.c:1185 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "kunde inte skapa lyssnande uttag (socket) för \"%s\"" -#: postmaster/postmaster.c:1179 +#: postmaster/postmaster.c:1191 #, c-format msgid "could not create any TCP/IP sockets" msgstr "kunde inte skapa TCP/IP-uttag (socket)" -#: postmaster/postmaster.c:1262 +#: postmaster/postmaster.c:1274 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "kunde inte skapa unix-domän-uttag (socket) i katalog \"%s\"" -#: postmaster/postmaster.c:1268 +#: postmaster/postmaster.c:1280 #, c-format msgid "could not create any Unix-domain sockets" msgstr "kunde inte skapa något Unix-domän-uttag (socket)" -#: postmaster/postmaster.c:1280 +#: postmaster/postmaster.c:1292 #, c-format msgid "no socket created for listening" msgstr "inget uttag (socket) skapat för lyssnande" -#: postmaster/postmaster.c:1311 +#: postmaster/postmaster.c:1323 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: kunde inte ändra rättigheter på extern PID-fil \"%s\": %s\n" -#: postmaster/postmaster.c:1315 +#: postmaster/postmaster.c:1327 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: kunde inte skriva extern PID-fil \"%s\": %s\n" -#: postmaster/postmaster.c:1348 utils/init/postinit.c:215 +#: postmaster/postmaster.c:1360 utils/init/postinit.c:215 #, c-format msgid "could not load pg_hba.conf" msgstr "kunde inte ladda pg_hba.conf" -#: postmaster/postmaster.c:1374 +#: postmaster/postmaster.c:1386 #, c-format msgid "postmaster became multithreaded during startup" msgstr "postmaster blev flertrådad under uppstart" -#: postmaster/postmaster.c:1375 +#: postmaster/postmaster.c:1387 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Sätt omgivningsvariabeln LC_ALL till en giltig lokal." -#: postmaster/postmaster.c:1476 +#: postmaster/postmaster.c:1488 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: kunde inte hitta matchande postgres-binär" -#: postmaster/postmaster.c:1499 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1511 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Detta tyder på en inkomplett PostgreSQL-installation alternativt att filen \"%s\" har flyttats bort från sin korrekta plats." -#: postmaster/postmaster.c:1526 +#: postmaster/postmaster.c:1538 #, c-format msgid "" "%s: could not find the database system\n" @@ -17728,396 +17714,396 @@ msgstr "" "Förväntade mig att hitta det i katalogen \"%s\",\n" "men kunde inte öppna filen \"%s\": %s\n" -#: postmaster/postmaster.c:1703 +#: postmaster/postmaster.c:1715 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() misslyckades i postmaster: %m" -#: postmaster/postmaster.c:1858 +#: postmaster/postmaster.c:1870 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "stänger ner omedelbart då datakatalogens låsfil är ogiltig" -#: postmaster/postmaster.c:1961 postmaster/postmaster.c:1992 +#: postmaster/postmaster.c:1973 postmaster/postmaster.c:2004 #, c-format msgid "incomplete startup packet" msgstr "ofullständigt startuppaket" -#: postmaster/postmaster.c:1973 +#: postmaster/postmaster.c:1985 #, c-format msgid "invalid length of startup packet" msgstr "ogiltig längd på startuppaket" -#: postmaster/postmaster.c:2031 +#: postmaster/postmaster.c:2043 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "misslyckades att skicka SSL-förhandlingssvar: %m" -#: postmaster/postmaster.c:2061 +#: postmaster/postmaster.c:2074 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "misslyckades att skicka GSSAPI-förhandlingssvar: %m" -#: postmaster/postmaster.c:2090 +#: postmaster/postmaster.c:2104 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "inget stöd för framändans protokoll %u.%u: servern stöder %u.0 till %u.%u" -#: postmaster/postmaster.c:2154 utils/misc/guc.c:6779 utils/misc/guc.c:6815 -#: utils/misc/guc.c:6885 utils/misc/guc.c:8208 utils/misc/guc.c:11054 -#: utils/misc/guc.c:11088 +#: postmaster/postmaster.c:2168 utils/misc/guc.c:6769 utils/misc/guc.c:6805 +#: utils/misc/guc.c:6875 utils/misc/guc.c:8226 utils/misc/guc.c:11072 +#: utils/misc/guc.c:11106 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "ogiltigt värde för parameter \"%s\": \"%s\"" -#: postmaster/postmaster.c:2157 +#: postmaster/postmaster.c:2171 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Giltiga värden är: \"false\", 0, \"true\", 1, \"database\"." -#: postmaster/postmaster.c:2202 +#: postmaster/postmaster.c:2216 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "ogiltig startpaketlayout: förväntade en terminator som sista byte" -#: postmaster/postmaster.c:2240 +#: postmaster/postmaster.c:2254 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "inget PostgreSQL-användarnamn angivet i startuppaketet" -#: postmaster/postmaster.c:2304 +#: postmaster/postmaster.c:2318 #, c-format msgid "the database system is starting up" msgstr "databassystemet startar upp" -#: postmaster/postmaster.c:2309 +#: postmaster/postmaster.c:2323 #, c-format msgid "the database system is shutting down" msgstr "databassystemet stänger ner" -#: postmaster/postmaster.c:2314 +#: postmaster/postmaster.c:2328 #, c-format msgid "the database system is in recovery mode" msgstr "databassystemet är återställningsläge" -#: postmaster/postmaster.c:2319 storage/ipc/procarray.c:295 +#: postmaster/postmaster.c:2333 storage/ipc/procarray.c:293 #: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:362 #, c-format msgid "sorry, too many clients already" msgstr "ledsen, för många klienter" -#: postmaster/postmaster.c:2409 +#: postmaster/postmaster.c:2423 #, c-format msgid "wrong key in cancel request for process %d" msgstr "fel nyckel i avbrytbegäran för process %d" -#: postmaster/postmaster.c:2421 +#: postmaster/postmaster.c:2435 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "PID %d i avbrytbegäran matchade inte någon process" -#: postmaster/postmaster.c:2687 +#: postmaster/postmaster.c:2706 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "mottog SIGHUP, läser om konfigurationsfiler" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2713 postmaster/postmaster.c:2717 +#: postmaster/postmaster.c:2732 postmaster/postmaster.c:2736 #, c-format msgid "%s was not reloaded" msgstr "%s laddades inte om" -#: postmaster/postmaster.c:2727 +#: postmaster/postmaster.c:2746 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL-konfiguration laddades inte om" -#: postmaster/postmaster.c:2783 +#: postmaster/postmaster.c:2802 #, c-format msgid "received smart shutdown request" msgstr "tog emot förfrågan om att stänga ner smart" -#: postmaster/postmaster.c:2841 +#: postmaster/postmaster.c:2848 #, c-format msgid "received fast shutdown request" msgstr "tog emot förfrågan om att stänga ner snabbt" -#: postmaster/postmaster.c:2874 +#: postmaster/postmaster.c:2866 #, c-format msgid "aborting any active transactions" msgstr "avbryter aktiva transaktioner" -#: postmaster/postmaster.c:2908 +#: postmaster/postmaster.c:2890 #, c-format msgid "received immediate shutdown request" msgstr "mottog begäran för omedelbar nedstängning" -#: postmaster/postmaster.c:2983 +#: postmaster/postmaster.c:2965 #, c-format msgid "shutdown at recovery target" msgstr "nedstängs vid återställningsmål" -#: postmaster/postmaster.c:3001 postmaster/postmaster.c:3037 +#: postmaster/postmaster.c:2983 postmaster/postmaster.c:3019 msgid "startup process" msgstr "uppstartprocess" -#: postmaster/postmaster.c:3004 +#: postmaster/postmaster.c:2986 #, c-format msgid "aborting startup due to startup process failure" msgstr "avbryter uppstart på grund av fel i startprocessen" -#: postmaster/postmaster.c:3078 +#: postmaster/postmaster.c:3061 #, c-format msgid "database system is ready to accept connections" msgstr "databassystemet är redo att ta emot anslutningar" -#: postmaster/postmaster.c:3099 +#: postmaster/postmaster.c:3082 msgid "background writer process" msgstr "bakgrundsskrivarprocess" -#: postmaster/postmaster.c:3153 +#: postmaster/postmaster.c:3136 msgid "checkpointer process" msgstr "checkpoint-process" -#: postmaster/postmaster.c:3169 +#: postmaster/postmaster.c:3152 msgid "WAL writer process" msgstr "WAL-skrivarprocess" -#: postmaster/postmaster.c:3184 +#: postmaster/postmaster.c:3167 msgid "WAL receiver process" msgstr "WAL-mottagarprocess" -#: postmaster/postmaster.c:3199 +#: postmaster/postmaster.c:3182 msgid "autovacuum launcher process" msgstr "autovacuum-startprocess" -#: postmaster/postmaster.c:3214 +#: postmaster/postmaster.c:3197 msgid "archiver process" msgstr "arkiveringsprocess" -#: postmaster/postmaster.c:3230 +#: postmaster/postmaster.c:3213 msgid "statistics collector process" msgstr "statistikinsamlingsprocess" -#: postmaster/postmaster.c:3244 +#: postmaster/postmaster.c:3227 msgid "system logger process" msgstr "system-logg-process" -#: postmaster/postmaster.c:3308 +#: postmaster/postmaster.c:3291 #, c-format msgid "background worker \"%s\"" msgstr "bakgrundsarbetare \"%s\"" -#: postmaster/postmaster.c:3392 postmaster/postmaster.c:3412 -#: postmaster/postmaster.c:3419 postmaster/postmaster.c:3437 +#: postmaster/postmaster.c:3375 postmaster/postmaster.c:3395 +#: postmaster/postmaster.c:3402 postmaster/postmaster.c:3420 msgid "server process" msgstr "serverprocess" -#: postmaster/postmaster.c:3491 +#: postmaster/postmaster.c:3474 #, c-format msgid "terminating any other active server processes" msgstr "avslutar andra aktiva serverprocesser" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3747 +#: postmaster/postmaster.c:3729 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) avslutade med felkod %d" -#: postmaster/postmaster.c:3749 postmaster/postmaster.c:3761 -#: postmaster/postmaster.c:3771 postmaster/postmaster.c:3782 +#: postmaster/postmaster.c:3731 postmaster/postmaster.c:3743 +#: postmaster/postmaster.c:3753 postmaster/postmaster.c:3764 #, c-format msgid "Failed process was running: %s" msgstr "Misslyckad process körde: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3758 +#: postmaster/postmaster.c:3740 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) terminerades av avbrott 0x%X" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3768 +#: postmaster/postmaster.c:3750 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) terminerades av signal %d: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3780 +#: postmaster/postmaster.c:3762 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) avslutade med okänd status %d" -#: postmaster/postmaster.c:3963 +#: postmaster/postmaster.c:3970 #, c-format msgid "abnormal database system shutdown" msgstr "ej normal databasnedstängning" -#: postmaster/postmaster.c:4003 +#: postmaster/postmaster.c:4010 #, c-format msgid "all server processes terminated; reinitializing" msgstr "alla serverprocesser är avslutade; initierar på nytt" -#: postmaster/postmaster.c:4173 postmaster/postmaster.c:5572 -#: postmaster/postmaster.c:5960 +#: postmaster/postmaster.c:4180 postmaster/postmaster.c:5599 +#: postmaster/postmaster.c:5986 #, c-format msgid "could not generate random cancel key" msgstr "kunde inte skapa slumpad avbrytningsnyckel" -#: postmaster/postmaster.c:4227 +#: postmaster/postmaster.c:4234 #, c-format msgid "could not fork new process for connection: %m" msgstr "kunde inte fork():a ny process for uppkoppling: %m" -#: postmaster/postmaster.c:4269 +#: postmaster/postmaster.c:4276 msgid "could not fork new process for connection: " msgstr "kunde inte fork():a ny process for uppkoppling: " -#: postmaster/postmaster.c:4378 +#: postmaster/postmaster.c:4393 #, c-format msgid "connection received: host=%s port=%s" msgstr "ansluting mottagen: värd=%s port=%s" -#: postmaster/postmaster.c:4383 +#: postmaster/postmaster.c:4398 #, c-format msgid "connection received: host=%s" msgstr "ansluting mottagen: värd=%s" -#: postmaster/postmaster.c:4653 +#: postmaster/postmaster.c:4668 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "kunde inte köra serverprocess \"%s\": %m" -#: postmaster/postmaster.c:4812 +#: postmaster/postmaster.c:4827 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "ger upp efter för många försök att reservera delat minne" -#: postmaster/postmaster.c:4813 +#: postmaster/postmaster.c:4828 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Detta kan orsakas av ASLR eller antivirusprogram." -#: postmaster/postmaster.c:5019 +#: postmaster/postmaster.c:5034 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "SSL-konfigurering kunde inte laddas i barnprocess" -#: postmaster/postmaster.c:5151 +#: postmaster/postmaster.c:5166 #, c-format msgid "Please report this to <%s>." msgstr "Rapportera gärna detta till <%s>." -#: postmaster/postmaster.c:5244 +#: postmaster/postmaster.c:5259 #, c-format msgid "database system is ready to accept read only connections" msgstr "databassystemet är redo att ta emot read-only-anslutningar" -#: postmaster/postmaster.c:5500 +#: postmaster/postmaster.c:5527 #, c-format msgid "could not fork startup process: %m" msgstr "kunde inte starta startup-processen: %m" -#: postmaster/postmaster.c:5504 +#: postmaster/postmaster.c:5531 #, c-format msgid "could not fork background writer process: %m" msgstr "kunde inte starta process för bakgrundsskrivare: %m" -#: postmaster/postmaster.c:5508 +#: postmaster/postmaster.c:5535 #, c-format msgid "could not fork checkpointer process: %m" msgstr "kunde inte fork:a bakgrundsprocess: %m" -#: postmaster/postmaster.c:5512 +#: postmaster/postmaster.c:5539 #, c-format msgid "could not fork WAL writer process: %m" msgstr "kunde inte fork:a WAL-skrivprocess: %m" -#: postmaster/postmaster.c:5516 +#: postmaster/postmaster.c:5543 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "kunde inte fork:a WAL-mottagarprocess: %m" -#: postmaster/postmaster.c:5520 +#: postmaster/postmaster.c:5547 #, c-format msgid "could not fork process: %m" msgstr "kunde inte fork:a process: %m" -#: postmaster/postmaster.c:5717 postmaster/postmaster.c:5740 +#: postmaster/postmaster.c:5744 postmaster/postmaster.c:5767 #, c-format msgid "database connection requirement not indicated during registration" msgstr "krav på databasanslutning fanns inte med vid registering" -#: postmaster/postmaster.c:5724 postmaster/postmaster.c:5747 +#: postmaster/postmaster.c:5751 postmaster/postmaster.c:5774 #, c-format msgid "invalid processing mode in background worker" msgstr "ogiltigt processläge i bakgrundsarbetare" -#: postmaster/postmaster.c:5820 +#: postmaster/postmaster.c:5847 #, c-format msgid "starting background worker process \"%s\"" msgstr "startar bakgrundsarbetarprocess \"%s\"" -#: postmaster/postmaster.c:5832 +#: postmaster/postmaster.c:5859 #, c-format msgid "could not fork worker process: %m" msgstr "kunde inte starta (fork) arbetarprocess: %m" -#: postmaster/postmaster.c:5946 +#: postmaster/postmaster.c:5972 #, c-format msgid "no slot available for new worker process" msgstr "ingen slot tillgänglig för ny arbetsprocess" -#: postmaster/postmaster.c:6281 +#: postmaster/postmaster.c:6307 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "kunde inte duplicera uttag (socket) %d för att använda i backend: felkod %d" -#: postmaster/postmaster.c:6313 +#: postmaster/postmaster.c:6339 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "kunde inte skapa ärvt uttag (socket): felkod %d\n" -#: postmaster/postmaster.c:6342 +#: postmaster/postmaster.c:6368 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "kunde inte öppna bakändans variabelfil \"%s\": %s\n" -#: postmaster/postmaster.c:6349 +#: postmaster/postmaster.c:6375 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "kunde inte läsa från bakändans variabelfil \"%s\": %s\n" -#: postmaster/postmaster.c:6358 +#: postmaster/postmaster.c:6384 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "kunde inte ta bort fil \"%s\": %s\n" -#: postmaster/postmaster.c:6375 +#: postmaster/postmaster.c:6401 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "kunde inte mappa in vy för bakgrundsvariabler: felkod %lu\n" -#: postmaster/postmaster.c:6384 +#: postmaster/postmaster.c:6410 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "kunde inte avmappa vy för bakgrundsvariabler: felkod %lu\n" -#: postmaster/postmaster.c:6391 +#: postmaster/postmaster.c:6417 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "kunde inte stänga \"handle\" till backend:ens parametervariabler: felkod %lu\n" -#: postmaster/postmaster.c:6569 +#: postmaster/postmaster.c:6595 #, c-format msgid "could not read exit code for process\n" msgstr "kunde inte läsa avslutningskod för process\n" -#: postmaster/postmaster.c:6574 +#: postmaster/postmaster.c:6600 #, c-format msgid "could not post child completion status\n" msgstr "kunde inte skicka barnets avslutningsstatus\n" @@ -18212,24 +18198,19 @@ msgstr "förväntade starttidslinje %u men hittade tidslinje %u" #: replication/backup_manifest.c:275 #, c-format -msgid "start timeline %u not found history of timeline %u" -msgstr "starttidslinje %u hittar inte historik för tidslinje %u" +msgid "start timeline %u not found in history of timeline %u" +msgstr "starttidslinje %u hittades inte i historiken för tidslinje %u" #: replication/backup_manifest.c:322 #, c-format -msgid "could not rewind temporary file: %m" -msgstr "kunde inte spola tillbaka temporär fil: %m" +msgid "could not rewind temporary file" +msgstr "kunde inte spola tillbaka temporär fil" #: replication/backup_manifest.c:349 #, c-format msgid "could not read from temporary file: %m" msgstr "kunde inte läsa från temporär fil: %m" -#: replication/backup_manifest.c:377 utils/sort/sharedtuplestore.c:206 -#, c-format -msgid "could not write to temporary file: %m" -msgstr "kunde inte skriva till temporär fil: %m" - #: replication/basebackup.c:108 #, c-format msgid "could not read from file \"%s\"" @@ -18251,204 +18232,211 @@ msgstr "kunde inte hitta WAL-fil \"%s\"" msgid "unexpected WAL file size \"%s\"" msgstr "oväntad WAL-filstorlek \"%s\"" -#: replication/basebackup.c:648 replication/basebackup.c:1749 +#: replication/basebackup.c:648 replication/basebackup.c:1752 #, c-format msgid "base backup could not send data, aborting backup" msgstr "basbackup kunde inte skicka data, avbryter backup" #: replication/basebackup.c:724 #, c-format -msgid "%lld total checksum verification failures" -msgstr "totalt %lld verifieringsfel av checksumma" +msgid "%lld total checksum verification failure" +msgid_plural "%lld total checksum verification failures" +msgstr[0] "totalt %lld verifieringsfel av checksumma" +msgstr[1] "totalt %lld verifieringsfel av checksumma" -#: replication/basebackup.c:728 +#: replication/basebackup.c:731 #, c-format msgid "checksum verification failure during base backup" msgstr "misslyckad verifiering av checksumma under basbackup" -#: replication/basebackup.c:781 replication/basebackup.c:790 -#: replication/basebackup.c:799 replication/basebackup.c:808 -#: replication/basebackup.c:817 replication/basebackup.c:828 -#: replication/basebackup.c:845 replication/basebackup.c:854 -#: replication/basebackup.c:866 replication/basebackup.c:890 +#: replication/basebackup.c:784 replication/basebackup.c:793 +#: replication/basebackup.c:802 replication/basebackup.c:811 +#: replication/basebackup.c:820 replication/basebackup.c:831 +#: replication/basebackup.c:848 replication/basebackup.c:857 +#: replication/basebackup.c:869 replication/basebackup.c:893 #, c-format msgid "duplicate option \"%s\"" msgstr "duplicerad flagga \"%s\"" -#: replication/basebackup.c:834 +#: replication/basebackup.c:837 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d är utanför giltigt intervall för parameter \"%s\" (%d .. %d)" -#: replication/basebackup.c:879 +#: replication/basebackup.c:882 #, c-format msgid "unrecognized manifest option: \"%s\"" msgstr "okänd manifestflagga: \"%s\"" -#: replication/basebackup.c:895 +#: replication/basebackup.c:898 #, c-format msgid "unrecognized checksum algorithm: \"%s\"" msgstr "okänd checksum-algoritm: \"%s\"" -#: replication/basebackup.c:910 +#: replication/basebackup.c:913 #, c-format msgid "manifest checksums require a backup manifest" msgstr "manifestchecksummor kräver ett backup-manifest" -#: replication/basebackup.c:1501 +#: replication/basebackup.c:1504 #, c-format msgid "skipping special file \"%s\"" msgstr "hoppar över specialfil \"%s\"" -#: replication/basebackup.c:1620 +#: replication/basebackup.c:1623 #, c-format msgid "invalid segment number %d in file \"%s\"" msgstr "ogiltigt segmentnummer %d i fil \"%s\"" -#: replication/basebackup.c:1639 +#: replication/basebackup.c:1642 #, c-format msgid "could not verify checksum in file \"%s\", block %d: read buffer size %d and page size %d differ" msgstr "kunde inte verifiera checksumma i fil \"%s\", block %d: läsbufferstorlek %d och sidstorlek %d skiljer sig åt" -#: replication/basebackup.c:1683 replication/basebackup.c:1713 +#: replication/basebackup.c:1686 replication/basebackup.c:1716 #, c-format msgid "could not fseek in file \"%s\": %m" msgstr "kunde inte gör fseek i fil \"%s\": %m" -#: replication/basebackup.c:1705 +#: replication/basebackup.c:1708 #, c-format msgid "could not reread block %d of file \"%s\": %m" msgstr "kunde inte läsa tillbaka block %d i fil \"%s\": %m" -#: replication/basebackup.c:1729 +#: replication/basebackup.c:1732 #, c-format msgid "checksum verification failed in file \"%s\", block %d: calculated %X but expected %X" msgstr "checksumkontroll misslyckades i fil \"%s\", block %d: beräknade %X men förväntade %X" -#: replication/basebackup.c:1736 +#: replication/basebackup.c:1739 #, c-format msgid "further checksum verification failures in file \"%s\" will not be reported" msgstr "ytterligare kontroller av checksummor i fil \"%s\" kommer inte rapporteras" -#: replication/basebackup.c:1804 +#: replication/basebackup.c:1807 #, c-format msgid "file \"%s\" has a total of %d checksum verification failure" msgid_plural "file \"%s\" has a total of %d checksum verification failures" msgstr[0] "filen \"%s\" har totalt %d kontrollerad felaktiga checksumma" msgstr[1] "filen \"%s\" har totalt %d kontrollerade felaktiga checksummor" -#: replication/basebackup.c:1840 +#: replication/basebackup.c:1843 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "filnamnet är för långt för tar-format: \"%s\"" -#: replication/basebackup.c:1845 +#: replication/basebackup.c:1848 #, c-format msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "mål för symbolisk länk är för långt för tar-format: filnamn \"%s\", mål \"%s\"" -#: replication/libpqwalreceiver/libpqwalreceiver.c:234 +#: replication/libpqwalreceiver/libpqwalreceiver.c:227 +#, c-format +msgid "could not clear search path: %s" +msgstr "kunde inte nollställa sökväg: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:251 #, c-format msgid "invalid connection string syntax: %s" msgstr "ogiltig anslutningssträngsyntax %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:258 +#: replication/libpqwalreceiver/libpqwalreceiver.c:275 #, c-format msgid "could not parse connection string: %s" msgstr "kunde inte parsa anslutningssträng: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:330 +#: replication/libpqwalreceiver/libpqwalreceiver.c:347 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "kunde inte hämta databassystemidentifierare och tidslinje-ID från primära servern: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:341 -#: replication/libpqwalreceiver/libpqwalreceiver.c:559 +#: replication/libpqwalreceiver/libpqwalreceiver.c:358 +#: replication/libpqwalreceiver/libpqwalreceiver.c:576 #, c-format msgid "invalid response from primary server" msgstr "ogiltigt svar från primär server" -#: replication/libpqwalreceiver/libpqwalreceiver.c:342 +#: replication/libpqwalreceiver/libpqwalreceiver.c:359 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "Kunde inte identifiera system: fick %d rader och %d fält, förväntade %d rader och %d eller fler fält." -#: replication/libpqwalreceiver/libpqwalreceiver.c:415 -#: replication/libpqwalreceiver/libpqwalreceiver.c:421 -#: replication/libpqwalreceiver/libpqwalreceiver.c:446 +#: replication/libpqwalreceiver/libpqwalreceiver.c:432 +#: replication/libpqwalreceiver/libpqwalreceiver.c:438 +#: replication/libpqwalreceiver/libpqwalreceiver.c:463 #, c-format msgid "could not start WAL streaming: %s" msgstr "kunde inte starta WAL-strömning: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:469 +#: replication/libpqwalreceiver/libpqwalreceiver.c:486 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "kunde inte skicka meddelandet end-of-streaming till primären: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:491 +#: replication/libpqwalreceiver/libpqwalreceiver.c:508 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "oväntad resultatmängd efter end-of-streaming" -#: replication/libpqwalreceiver/libpqwalreceiver.c:505 +#: replication/libpqwalreceiver/libpqwalreceiver.c:522 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "fel vid nestängning av strömmande COPY: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:514 +#: replication/libpqwalreceiver/libpqwalreceiver.c:531 #, c-format msgid "error reading result of streaming command: %s" msgstr "fel vid läsning av resultat från strömmningskommando: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:522 -#: replication/libpqwalreceiver/libpqwalreceiver.c:756 +#: replication/libpqwalreceiver/libpqwalreceiver.c:539 +#: replication/libpqwalreceiver/libpqwalreceiver.c:773 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "oväntat resultat efter CommandComplete: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:548 +#: replication/libpqwalreceiver/libpqwalreceiver.c:565 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "kan inte ta emot fil med tidslinjehistorik från primära servern: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:560 +#: replication/libpqwalreceiver/libpqwalreceiver.c:577 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Förväntade 1 tupel med 2 fält, fick %d tupler med %d fält." -#: replication/libpqwalreceiver/libpqwalreceiver.c:720 -#: replication/libpqwalreceiver/libpqwalreceiver.c:771 -#: replication/libpqwalreceiver/libpqwalreceiver.c:777 +#: replication/libpqwalreceiver/libpqwalreceiver.c:737 +#: replication/libpqwalreceiver/libpqwalreceiver.c:788 +#: replication/libpqwalreceiver/libpqwalreceiver.c:794 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "kunde inte ta emot data från WAL-ström: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:796 +#: replication/libpqwalreceiver/libpqwalreceiver.c:813 #, c-format msgid "could not send data to WAL stream: %s" msgstr "kunde inte skicka data till WAL-ström: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:849 +#: replication/libpqwalreceiver/libpqwalreceiver.c:866 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "kunde inte skapa replikeringsslot \"%s\": %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:894 +#: replication/libpqwalreceiver/libpqwalreceiver.c:911 #, c-format msgid "invalid query response" msgstr "ogiltigt frågerespons" -#: replication/libpqwalreceiver/libpqwalreceiver.c:895 +#: replication/libpqwalreceiver/libpqwalreceiver.c:912 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Förväntade %d fält, fick %d fält." -#: replication/libpqwalreceiver/libpqwalreceiver.c:964 +#: replication/libpqwalreceiver/libpqwalreceiver.c:981 #, c-format msgid "the query interface requires a database connection" msgstr "frågeinterface:et kräver en databasanslutning" -#: replication/libpqwalreceiver/libpqwalreceiver.c:995 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1012 msgid "empty query" msgstr "tom fråga" @@ -18583,7 +18571,7 @@ msgstr "array:en måste ha ett jämnt antal element" msgid "can no longer get changes from replication slot \"%s\"" msgstr "kan inte längre få ändringar från replikeringsslot \"%s\"" -#: replication/logical/logicalfuncs.c:253 replication/slotfuncs.c:607 +#: replication/logical/logicalfuncs.c:253 replication/slotfuncs.c:648 #, c-format msgid "This slot has never previously reserved WAL, or has been invalidated." msgstr "Denna slot har aldrig tidigare reserverat WAL eller har invaliderats." @@ -18593,131 +18581,131 @@ msgstr "Denna slot har aldrig tidigare reserverat WAL eller har invaliderats." msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" msgstr "utdata-plugin \"%s\" för logisk avkodning producerar binär utdata men funktionen \"%s\" förväntar sig textdata" -#: replication/logical/origin.c:182 +#: replication/logical/origin.c:188 #, c-format msgid "only superusers can query or manipulate replication origins" msgstr "bara superanvändare kan läsa eller ändra replikeringskällor" -#: replication/logical/origin.c:187 +#: replication/logical/origin.c:193 #, c-format msgid "cannot query or manipulate replication origin when max_replication_slots = 0" msgstr "kan inte se eller ändra replikeringskällor när max_replication_slots = 0" -#: replication/logical/origin.c:192 +#: replication/logical/origin.c:198 #, c-format msgid "cannot manipulate replication origins during recovery" msgstr "kan inte ändra replikeringskällor under tiden återställning sker" -#: replication/logical/origin.c:227 +#: replication/logical/origin.c:233 #, c-format msgid "replication origin \"%s\" does not exist" msgstr "replikeringskälla \"%s\" finns inte" -#: replication/logical/origin.c:318 +#: replication/logical/origin.c:324 #, c-format msgid "could not find free replication origin OID" msgstr "kunde inte hitta ledig replikering-origin-OID" -#: replication/logical/origin.c:366 +#: replication/logical/origin.c:372 #, c-format msgid "could not drop replication origin with OID %d, in use by PID %d" msgstr "kunde inte slänga replikeringskälla med OID %d som används av PID %d" -#: replication/logical/origin.c:458 +#: replication/logical/origin.c:464 #, c-format msgid "replication origin with OID %u does not exist" msgstr "replikeringskälla med OID %u finns inte" -#: replication/logical/origin.c:726 +#: replication/logical/origin.c:729 #, c-format msgid "replication checkpoint has wrong magic %u instead of %u" msgstr "replikeringscheckpoint har fel magiskt tal %u istället för %u" -#: replication/logical/origin.c:767 +#: replication/logical/origin.c:770 #, c-format msgid "could not find free replication state, increase max_replication_slots" msgstr "kunde inte hitta ledig replikeringsplats, öka max_replication_slots" -#: replication/logical/origin.c:785 +#: replication/logical/origin.c:788 #, c-format msgid "replication slot checkpoint has wrong checksum %u, expected %u" msgstr "replikeringsslot-checkpoint har felaktig kontrollsumma %u, förväntade %u" -#: replication/logical/origin.c:913 replication/logical/origin.c:1099 +#: replication/logical/origin.c:916 replication/logical/origin.c:1102 #, c-format msgid "replication origin with OID %d is already active for PID %d" msgstr "replikeringskälla med OID %d är redan aktiv för PID %d" -#: replication/logical/origin.c:924 replication/logical/origin.c:1111 +#: replication/logical/origin.c:927 replication/logical/origin.c:1114 #, c-format msgid "could not find free replication state slot for replication origin with OID %u" msgstr "kunde inte hitta ledig replikerings-state-slot för replikerings-origin med OID %u" -#: replication/logical/origin.c:926 replication/logical/origin.c:1113 -#: replication/slot.c:1679 +#: replication/logical/origin.c:929 replication/logical/origin.c:1116 +#: replication/slot.c:1762 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Öka max_replication_slots och försök igen." -#: replication/logical/origin.c:1070 +#: replication/logical/origin.c:1073 #, c-format msgid "cannot setup replication origin when one is already setup" msgstr "kan inte ställa in replikeringskälla när en redan är inställd" -#: replication/logical/origin.c:1150 replication/logical/origin.c:1366 -#: replication/logical/origin.c:1386 +#: replication/logical/origin.c:1153 replication/logical/origin.c:1369 +#: replication/logical/origin.c:1389 #, c-format msgid "no replication origin is configured" msgstr "ingen replikeringskälla är konfigurerad" -#: replication/logical/origin.c:1233 +#: replication/logical/origin.c:1236 #, c-format msgid "replication origin name \"%s\" is reserved" msgstr "replikeringskällnamn \"%s\" är reserverat" -#: replication/logical/origin.c:1235 +#: replication/logical/origin.c:1238 #, c-format msgid "Origin names starting with \"pg_\" are reserved." msgstr "Källnamn som startar med \"pg_\" är reserverade." -#: replication/logical/relation.c:272 +#: replication/logical/relation.c:302 #, c-format msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "logisk replikeringsmålrelation \"%s.%s\" finns inte" -#: replication/logical/relation.c:329 +#: replication/logical/relation.c:345 #, c-format msgid "logical replication target relation \"%s.%s\" is missing some replicated columns" msgstr "logisk replikeringsmålrelation \"%s.%s\" saknar några replikerade kolumner" -#: replication/logical/relation.c:369 +#: replication/logical/relation.c:385 #, c-format msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "logisk replikeringsmålrelation \"%s.%s\" använder systemkolumner i REPLICA IDENTITY-index" -#: replication/logical/reorderbuffer.c:2671 +#: replication/logical/reorderbuffer.c:2663 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "kunde inte skriva till datafil för XID %u: %m" -#: replication/logical/reorderbuffer.c:2858 -#: replication/logical/reorderbuffer.c:2883 +#: replication/logical/reorderbuffer.c:2850 +#: replication/logical/reorderbuffer.c:2875 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "kunde inte läsa från reorderbuffer spill-fil: %m" -#: replication/logical/reorderbuffer.c:2862 -#: replication/logical/reorderbuffer.c:2887 +#: replication/logical/reorderbuffer.c:2854 +#: replication/logical/reorderbuffer.c:2879 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "kunde inte läsa från reorderbuffer spill-fil: läste %d istället för %u byte" -#: replication/logical/reorderbuffer.c:3122 +#: replication/logical/reorderbuffer.c:3114 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "kunde inte radera fil \"%s\" vid borttagning av pg_replslot/%s/xid*: %m" -#: replication/logical/reorderbuffer.c:3614 +#: replication/logical/reorderbuffer.c:3606 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "kunde inte läsa från fil \"%s\": läste %d istället för %d byte" @@ -18845,72 +18833,72 @@ msgstr "publicerare skickade inte identitetskolumn för replika som förväntade msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "logisk replikeringsmålrelation \"%s.%s\" har varken REPLICA IDENTITY-index eller PRIMARY KEY och den publicerade relationen har inte REPLICA IDENTITY FULL" -#: replication/logical/worker.c:1387 +#: replication/logical/worker.c:1394 #, c-format msgid "invalid logical replication message type \"%c\"" msgstr "ogiltig logisk replikeringsmeddelandetyp \"%c\"" -#: replication/logical/worker.c:1529 +#: replication/logical/worker.c:1537 #, c-format msgid "data stream from publisher has ended" msgstr "dataströmmen från publiceraren har avslutats" -#: replication/logical/worker.c:1684 +#: replication/logical/worker.c:1692 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "avslutar logisk replikeringsarbetare på grund av timeout" -#: replication/logical/worker.c:1832 +#: replication/logical/worker.c:1837 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was removed" msgstr "logisk replikerings uppspelningsarbetare för prenumeration \"%s\" kommer stoppa då prenumerationen har tagits bort" -#: replication/logical/worker.c:1846 +#: replication/logical/worker.c:1851 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "logisk replikerings uppspelningsarbetare för prenumeration \"%s\" kommer stoppa då prenumerationen har stängts av" -#: replication/logical/worker.c:1860 +#: replication/logical/worker.c:1865 #, c-format msgid "logical replication apply worker for subscription \"%s\" will restart because the connection information was changed" msgstr "logisk replikerings uppspelningsarbetare för prenumeration \"%s\" kommer starta om då uppkopplingsinformationen ändrats" -#: replication/logical/worker.c:1874 +#: replication/logical/worker.c:1879 #, c-format msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" msgstr "logisk replikerings uppspelningsarbetare för prenumeration \"%s\" kommer starta om då prenumerationen bytt namn" -#: replication/logical/worker.c:1891 +#: replication/logical/worker.c:1896 #, c-format msgid "logical replication apply worker for subscription \"%s\" will restart because the replication slot name was changed" msgstr "logisk replikerings uppspelningsarbetare för prenumeration \"%s\" kommer starta om då replikeringsslotten bytt namn" -#: replication/logical/worker.c:1905 +#: replication/logical/worker.c:1910 #, c-format msgid "logical replication apply worker for subscription \"%s\" will restart because subscription's publications were changed" msgstr "logisk replikerings uppspelningsarbetare för prenumeration \"%s\" kommer starta om då prenumerationens publiceringar ändrats" -#: replication/logical/worker.c:1995 +#: replication/logical/worker.c:2006 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "logisk replikerings uppspelningsarbetare för prenumeration %u kommer inte starta då prenumerationen togs bort under uppstart" -#: replication/logical/worker.c:2007 +#: replication/logical/worker.c:2018 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "logisk replikerings uppspelningsarbetare för prenumeration \"%s\" kommer inte starta då prenumerationen stänges av under uppstart" -#: replication/logical/worker.c:2025 +#: replication/logical/worker.c:2036 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "logisk replikerings tabellsynkroniseringsarbetare för prenumeration \"%s\", tabell \"%s\" har startat" -#: replication/logical/worker.c:2029 +#: replication/logical/worker.c:2040 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "logisk replikerings uppspelningsarbetare för prenumeration \"%s\" har startat" -#: replication/logical/worker.c:2068 +#: replication/logical/worker.c:2079 #, c-format msgid "subscription has no replication slot set" msgstr "prenumeration har ingen replikeringsslot angiven" @@ -18945,167 +18933,167 @@ msgstr "klienten skickade proto_version=%d men vi stöder bara protokoll %d elle msgid "publication_names parameter missing" msgstr "saknar parameter publication_names" -#: replication/slot.c:182 +#: replication/slot.c:183 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "replikeringsslotnamn \"%s\" är för kort" -#: replication/slot.c:191 +#: replication/slot.c:192 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "replikeringsslotnamn \"%s\" är för långt" -#: replication/slot.c:204 +#: replication/slot.c:205 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "replikeringsslotnamn \"%s\" innehåller ogiltiga tecken" -#: replication/slot.c:206 +#: replication/slot.c:207 #, c-format msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "Replikeringsslotnamn får bara innehålla små bokstäver, nummer och understreck." -#: replication/slot.c:253 +#: replication/slot.c:254 #, c-format msgid "replication slot \"%s\" already exists" msgstr "replikeringsslot \"%s\" finns redan" -#: replication/slot.c:263 +#: replication/slot.c:264 #, c-format msgid "all replication slots are in use" msgstr "alla replikeringsslots används" -#: replication/slot.c:264 +#: replication/slot.c:265 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Frigör en eller öka max_replication_slots." -#: replication/slot.c:393 replication/slotfuncs.c:713 +#: replication/slot.c:407 replication/slotfuncs.c:760 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "replikeringsslot \"%s\" existerar inte" -#: replication/slot.c:404 replication/slot.c:965 +#: replication/slot.c:445 replication/slot.c:1006 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "replikeringsslot \"%s\" är aktiv för PID %d" -#: replication/slot.c:642 replication/slot.c:1231 replication/slot.c:1614 +#: replication/slot.c:683 replication/slot.c:1314 replication/slot.c:1697 #, c-format msgid "could not remove directory \"%s\"" msgstr "kunde inte ta bort katalog \"%s\"" -#: replication/slot.c:1000 +#: replication/slot.c:1041 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "replikeringsslots kan bara användas om max_replication_slots > 0" -#: replication/slot.c:1005 +#: replication/slot.c:1046 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "replikeringsslots kan bara användas om wal_level >= replica" -#: replication/slot.c:1132 +#: replication/slot.c:1202 #, c-format -msgid "terminating walsender %d because replication slot \"%s\" is too far behind" -msgstr "avslutar walsender-process %d då replikeringsslot \"%s\" är för långt efter" +msgid "terminating process %d because replication slot \"%s\" is too far behind" +msgstr "avslutar process %d då replikeringsslot \"%s\" är för långt efter" -#: replication/slot.c:1142 +#: replication/slot.c:1221 #, c-format msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" msgstr "invaliderar slot \"%s\" då dess restart_lsn %X/%X överskrider max_slot_wal_keep_size" -#: replication/slot.c:1552 +#: replication/slot.c:1635 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "replikeringsslotfil \"%s\" har fel magiskt nummer: %u istället för %u" -#: replication/slot.c:1559 +#: replication/slot.c:1642 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "replikeringsslotfil \"%s\" har en icke stödd version %u" -#: replication/slot.c:1566 +#: replication/slot.c:1649 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "replikeringsslotfil \"%s\" har felaktig längd %u" -#: replication/slot.c:1602 +#: replication/slot.c:1685 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "kontrollsummefel för replikeringsslot-fil \"%s\": är %u, skall vara %u" -#: replication/slot.c:1636 +#: replication/slot.c:1719 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "logisk replikeringsslot \"%s\" finns men wal_level < replica" -#: replication/slot.c:1638 +#: replication/slot.c:1721 #, c-format msgid "Change wal_level to be logical or higher." msgstr "Ändra wal_level till logical eller högre." -#: replication/slot.c:1642 +#: replication/slot.c:1725 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "fysisk replikeringsslot \"%s\" finns men wal_level < replica" -#: replication/slot.c:1644 +#: replication/slot.c:1727 #, c-format msgid "Change wal_level to be replica or higher." msgstr "Ändra wal_level till replica eller högre." -#: replication/slot.c:1678 +#: replication/slot.c:1761 #, c-format msgid "too many replication slots active before shutdown" msgstr "för många aktiva replikeringsslottar innan nerstängning" -#: replication/slotfuncs.c:583 +#: replication/slotfuncs.c:624 #, c-format msgid "invalid target WAL LSN" msgstr "ogiltig mål-LSN för WAL" -#: replication/slotfuncs.c:605 +#: replication/slotfuncs.c:646 #, c-format msgid "replication slot \"%s\" cannot be advanced" msgstr "replikeringsslot \"%s\" kan inte avanceras" -#: replication/slotfuncs.c:623 +#: replication/slotfuncs.c:664 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "kan inte flytta fram replikeringsslot till %X/%X, minimum är %X/%X" -#: replication/slotfuncs.c:720 +#: replication/slotfuncs.c:772 #, c-format msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "kan inte kopiera fysisk replikeringsslot \"%s\" som en logisk replikeringsslot" -#: replication/slotfuncs.c:722 +#: replication/slotfuncs.c:774 #, c-format msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "kan inte kopiera logisk replikeringsslot \"%s\" som en fysisk replikeringsslot" -#: replication/slotfuncs.c:731 +#: replication/slotfuncs.c:781 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "kan inte kopiera en replikeringsslot som inte tidigare har reserverat WAL" -#: replication/slotfuncs.c:806 +#: replication/slotfuncs.c:857 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "kunde inte kopiera replikeringsslot \"%s\"" -#: replication/slotfuncs.c:808 +#: replication/slotfuncs.c:859 #, c-format msgid "The source replication slot was modified incompatibly during the copy operation." msgstr "Källreplikeringsslotten ändrades på ett inkompatibelt sätt under copy-operationen." -#: replication/slotfuncs.c:814 +#: replication/slotfuncs.c:865 #, c-format msgid "cannot copy unfinished logical replication slot \"%s\"" msgstr "kan inte kopiera ej slutförd replikeringsslot \"%s\"" -#: replication/slotfuncs.c:816 +#: replication/slotfuncs.c:867 #, c-format msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "Försök igen när källreplikeringsslottens confirmed_flush_lsn är giltig." @@ -19210,7 +19198,7 @@ msgstr "avslutar wal-mottagare på grund av timeout" msgid "primary server contains no more WAL on requested timeline %u" msgstr "primär server har ingen mer WAL på efterfrågad tidslinje %u" -#: replication/walreceiver.c:622 replication/walreceiver.c:929 +#: replication/walreceiver.c:622 replication/walreceiver.c:938 #, c-format msgid "could not close log segment %s: %m" msgstr "kunde inte stänga loggsegment %s: %m" @@ -19220,139 +19208,139 @@ msgstr "kunde inte stänga loggsegment %s: %m" msgid "fetching timeline history file for timeline %u from primary server" msgstr "hämtar tidslinjehistorikfil för tidslinje %u från primära servern" -#: replication/walreceiver.c:976 +#: replication/walreceiver.c:985 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "kunde inte skriva till loggfilsegment %s på offset %u, längd %lu: %m" -#: replication/walsender.c:530 storage/smgr/md.c:1291 +#: replication/walsender.c:523 storage/smgr/md.c:1291 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "kunde inte söka (seek) till slutet av filen \"%s\": %m" -#: replication/walsender.c:534 +#: replication/walsender.c:527 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "kunde inte söka till början av filen \"%s\": %m" -#: replication/walsender.c:585 +#: replication/walsender.c:578 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "IDENTIFY_SYSTEM har inte körts före START_REPLICATION" -#: replication/walsender.c:602 +#: replication/walsender.c:607 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "kan inte använda logisk replikeringsslot för fysisk replikering" -#: replication/walsender.c:671 +#: replication/walsender.c:676 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "efterfrågad startpunkt %X/%X på tidslinje %u finns inte i denna servers historik" -#: replication/walsender.c:675 +#: replication/walsender.c:680 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "Denna servers historik delade sig från tidslinje %u vid %X/%X." -#: replication/walsender.c:720 +#: replication/walsender.c:725 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "efterfrågad startpunkt %X/%X är längre fram än denna servers flush:ade WAL-skrivposition %X/%X" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:973 +#: replication/walsender.c:976 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s får inte anropas i en transaktion" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:983 +#: replication/walsender.c:986 #, c-format msgid "%s must be called inside a transaction" msgstr "%s måste anropas i en transaktion" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:989 +#: replication/walsender.c:992 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s måste anropas i transaktions REPEATABLE READ-isolationsläge" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:995 +#: replication/walsender.c:998 #, c-format msgid "%s must be called before any query" msgstr "%s måste anropas innan någon fråga" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1001 +#: replication/walsender.c:1004 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s får inte anropas i en undertransaktion" -#: replication/walsender.c:1149 +#: replication/walsender.c:1148 #, c-format msgid "cannot read from logical replication slot \"%s\"" msgstr "kan inte läsa från logisk replikeringsslot \"%s\"" -#: replication/walsender.c:1151 +#: replication/walsender.c:1150 #, c-format msgid "This slot has been invalidated because it exceeded the maximum reserved size." msgstr "Denna slot har invaliderats då den överskred maximal reserverad storlek." -#: replication/walsender.c:1161 +#: replication/walsender.c:1160 #, c-format msgid "terminating walsender process after promotion" msgstr "stänger ner walsender-process efter befordring" -#: replication/walsender.c:1543 +#: replication/walsender.c:1534 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "kan inte utföra nya kommandon när WAL-sändare är i stopp-läge" -#: replication/walsender.c:1576 +#: replication/walsender.c:1567 #, c-format msgid "received replication command: %s" msgstr "tog emot replikeringskommando: %s" -#: replication/walsender.c:1592 tcop/fastpath.c:279 tcop/postgres.c:1103 +#: replication/walsender.c:1583 tcop/fastpath.c:279 tcop/postgres.c:1103 #: tcop/postgres.c:1455 tcop/postgres.c:1716 tcop/postgres.c:2174 #: tcop/postgres.c:2535 tcop/postgres.c:2614 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "aktuella transaktionen har avbrutits, alla kommandon ignoreras tills slutet på transaktionen" -#: replication/walsender.c:1660 +#: replication/walsender.c:1670 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "kan inte köra SQL-kommandon i WAL-sändare för fysisk replikering" -#: replication/walsender.c:1709 replication/walsender.c:1725 +#: replication/walsender.c:1715 replication/walsender.c:1731 #, c-format msgid "unexpected EOF on standby connection" msgstr "oväntat EOF från standby-anslutning" -#: replication/walsender.c:1739 +#: replication/walsender.c:1745 #, c-format msgid "unexpected standby message type \"%c\", after receiving CopyDone" msgstr "oväntat standby-meddelandetyp \"%c\" efter att vi tagit emot CopyDone" -#: replication/walsender.c:1777 +#: replication/walsender.c:1783 #, c-format msgid "invalid standby message type \"%c\"" msgstr "ogiltigt standby-meddelandetyp \"%c\"" -#: replication/walsender.c:1818 +#: replication/walsender.c:1824 #, c-format msgid "unexpected message type \"%c\"" msgstr "oväntad meddelandetyp \"%c\"" -#: replication/walsender.c:2236 +#: replication/walsender.c:2242 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "avslutar walsender-process på grund av replikerings-timeout" -#: replication/walsender.c:2313 +#: replication/walsender.c:2319 #, c-format msgid "\"%s\" has now caught up with upstream server" msgstr "\"%s\" har nu kommit ikapp servern uppströms" @@ -19885,7 +19873,7 @@ msgid "missing Language parameter" msgstr "saknar parameter \"Language\"" #: statistics/dependencies.c:667 statistics/dependencies.c:720 -#: statistics/mcv.c:1475 statistics/mcv.c:1506 statistics/mvdistinct.c:348 +#: statistics/mcv.c:1477 statistics/mcv.c:1508 statistics/mvdistinct.c:348 #: statistics/mvdistinct.c:401 utils/adt/pseudotypes.c:42 #: utils/adt/pseudotypes.c:76 #, c-format @@ -19897,7 +19885,7 @@ msgstr "kan inte acceptera ett värde av type %s" msgid "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "statistikobjekt \"%s.%s\" kunde inte beräknas för relation \"%s.%s\"" -#: statistics/mcv.c:1364 utils/adt/jsonfuncs.c:1800 +#: statistics/mcv.c:1365 utils/adt/jsonfuncs.c:1800 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "en funktion med post som värde anropades i sammanhang där poster inte kan godtagas." @@ -19957,109 +19945,109 @@ msgstr "kan inte komma åt temporära tabeller under en parallell operation" msgid "could not open temporary file \"%s\" from BufFile \"%s\": %m" msgstr "kunde inte öppna temporär fil \"%s\" från BufFile \"%s\": %m" -#: storage/file/buffile.c:796 +#: storage/file/buffile.c:795 #, c-format msgid "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" msgstr "kunde inte bestämma storlek på temporär fil \"%s\" från BufFile \"%s\": %m" -#: storage/file/fd.c:506 storage/file/fd.c:578 storage/file/fd.c:614 +#: storage/file/fd.c:508 storage/file/fd.c:580 storage/file/fd.c:616 #, c-format msgid "could not flush dirty data: %m" msgstr "kunde inte flush:a smutsig data: %m" -#: storage/file/fd.c:536 +#: storage/file/fd.c:538 #, c-format msgid "could not determine dirty data size: %m" msgstr "kunde inte lista ut storlek på smutsig data: %m" -#: storage/file/fd.c:588 +#: storage/file/fd.c:590 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "kunde inte göra munmap() vid flush:ning av data: %m" -#: storage/file/fd.c:796 +#: storage/file/fd.c:798 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "kunde inte länka fil \"%s\" till \"%s\": %m" -#: storage/file/fd.c:879 +#: storage/file/fd.c:881 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit misslyckades: %m" -#: storage/file/fd.c:969 +#: storage/file/fd.c:971 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "otillräckligt antal fildeskriptorer tillgängligt för att starta serverprocessen" -#: storage/file/fd.c:970 +#: storage/file/fd.c:972 #, c-format msgid "System allows %d, we need at least %d." msgstr "Systemet tillåter %d, vi behöver minst %d." -#: storage/file/fd.c:1021 storage/file/fd.c:2355 storage/file/fd.c:2465 -#: storage/file/fd.c:2616 +#: storage/file/fd.c:1023 storage/file/fd.c:2357 storage/file/fd.c:2467 +#: storage/file/fd.c:2618 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "slut på fildeskriptorer: %m; frigör och försök igen" -#: storage/file/fd.c:1395 +#: storage/file/fd.c:1397 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "temporär fil: sökväg \"%s\", storlek %lu" -#: storage/file/fd.c:1526 +#: storage/file/fd.c:1528 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "kunde inte skapa temporär katalog \"%s\": %m" -#: storage/file/fd.c:1533 +#: storage/file/fd.c:1535 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "kunde inte skapa temporär underkatalog \"%s\": %m" -#: storage/file/fd.c:1726 +#: storage/file/fd.c:1728 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "kan inte skapa temporär fil \"%s\": %m" -#: storage/file/fd.c:1761 +#: storage/file/fd.c:1763 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "kunde inte öppna temporär fil \"%s\": %m" # unlink refererar till unix-funktionen unlink() så den översätter vi inte -#: storage/file/fd.c:1802 +#: storage/file/fd.c:1804 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "kunde inte unlink:a temporär fil \"%s\": %m" -#: storage/file/fd.c:2066 +#: storage/file/fd.c:2068 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "storlek på temporär fil överskrider temp_file_limit (%dkB)" -#: storage/file/fd.c:2331 storage/file/fd.c:2390 +#: storage/file/fd.c:2333 storage/file/fd.c:2392 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "överskred maxAllocatedDescs (%d) vid försök att öppna fil \"%s\"" -#: storage/file/fd.c:2435 +#: storage/file/fd.c:2437 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "överskred maxAllocatedDescs (%d) vid försök att köra kommando \"%s\"" -#: storage/file/fd.c:2592 +#: storage/file/fd.c:2594 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "överskred maxAllocatedDescs (%d) vid försök att öppna katalog \"%s\"" -#: storage/file/fd.c:3114 +#: storage/file/fd.c:3122 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "oväntad fil hittades i katalogen för temporära filer: \"%s\"" -#: storage/file/sharedfileset.c:95 +#: storage/file/sharedfileset.c:111 #, c-format msgid "could not attach to a SharedFileSet that is already destroyed" msgstr "kunde inte koppla till en SharedFileSet som redan tagits bort" @@ -20135,32 +20123,42 @@ msgid "could not duplicate handle for \"%s\": %m" msgstr "kunde inte duplicera handle för \"%s\": %m" #. translator: %s is a syscall name, such as "poll()" -#: storage/ipc/latch.c:940 storage/ipc/latch.c:1094 storage/ipc/latch.c:1307 -#: storage/ipc/latch.c:1457 storage/ipc/latch.c:1570 +#: storage/ipc/latch.c:940 storage/ipc/latch.c:1095 storage/ipc/latch.c:1308 +#: storage/ipc/latch.c:1461 storage/ipc/latch.c:1581 #, c-format msgid "%s failed: %m" msgstr "%s misslyckades: %m" -#: storage/ipc/procarray.c:3016 +#: storage/ipc/procarray.c:3014 #, c-format -msgid "database \"%s\" is being used by prepared transaction" -msgstr "databasen \"%s\" används av förberedd transation" +msgid "database \"%s\" is being used by prepared transactions" +msgstr "databasen \"%s\" används av förberedda transationer" -#: storage/ipc/procarray.c:3048 storage/ipc/signalfuncs.c:142 +#: storage/ipc/procarray.c:3046 storage/ipc/signalfuncs.c:142 #, c-format msgid "must be a superuser to terminate superuser process" msgstr "måste vara superanvändare för stoppa superanvändares process" -#: storage/ipc/procarray.c:3055 storage/ipc/signalfuncs.c:147 +#: storage/ipc/procarray.c:3053 storage/ipc/signalfuncs.c:147 #, c-format msgid "must be a member of the role whose process is being terminated or member of pg_signal_backend" msgstr "måste vara medlem i den roll vars process håller på att avslutas eller medlem i pg_signal_backend" +#: storage/ipc/shm_mq.c:368 +#, c-format +msgid "cannot send a message of size %zu via shared memory queue" +msgstr "kan inte skicka ett meddelande med storlek %zu via kö i delat minne" + +#: storage/ipc/shm_mq.c:694 +#, c-format +msgid "invalid message size %zu in shared memory queue" +msgstr "ogiltig meddelandestorlek %zu i kö i delat minne" + #: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:982 #: storage/lmgr/lock.c:1020 storage/lmgr/lock.c:2845 storage/lmgr/lock.c:4175 #: storage/lmgr/lock.c:4240 storage/lmgr/lock.c:4532 #: storage/lmgr/predicate.c:2401 storage/lmgr/predicate.c:2416 -#: storage/lmgr/predicate.c:3898 storage/lmgr/predicate.c:5006 +#: storage/lmgr/predicate.c:3898 storage/lmgr/predicate.c:5009 #: utils/hash/dynahash.c:1067 #, c-format msgid "out of shared memory" @@ -20217,7 +20215,7 @@ msgid "must be superuser to rotate log files with adminpack 1.0" msgstr "måste vara superanvändare för att rotera loggfiler med adminpack 1.0" #. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:217 +#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:253 #, c-format msgid "Consider using %s, which is part of core, instead." msgstr "Du kanske kan använda %s istället som är en del av core." @@ -20277,97 +20275,102 @@ msgstr "deadlock upptäckt" msgid "See server log for query details." msgstr "Se server-logg för frågedetaljer." -#: storage/lmgr/lmgr.c:815 +#: storage/lmgr/lmgr.c:830 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "vid uppdatering av tupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:818 +#: storage/lmgr/lmgr.c:833 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "vid borttagning av tupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:821 +#: storage/lmgr/lmgr.c:836 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "vid låsning av tupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:824 +#: storage/lmgr/lmgr.c:839 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "vid låsning av uppdaterad version (%u,%u) av tupel i relation \"%s\"" -#: storage/lmgr/lmgr.c:827 +#: storage/lmgr/lmgr.c:842 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "vid insättning av indextupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:830 +#: storage/lmgr/lmgr.c:845 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "vid kontroll av unikhet av tupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:833 +#: storage/lmgr/lmgr.c:848 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "vid återkontroll av uppdaterad tupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:836 +#: storage/lmgr/lmgr.c:851 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "vid kontroll av uteslutningsvillkor av tupel (%u,%u) i relation \"%s\"" -#: storage/lmgr/lmgr.c:1091 +#: storage/lmgr/lmgr.c:1106 #, c-format msgid "relation %u of database %u" msgstr "relation %u i databasen %u" -#: storage/lmgr/lmgr.c:1097 +#: storage/lmgr/lmgr.c:1112 #, c-format msgid "extension of relation %u of database %u" msgstr "utökning av relation %u i databas %u" -#: storage/lmgr/lmgr.c:1103 +#: storage/lmgr/lmgr.c:1118 +#, c-format +msgid "pg_database.datfrozenxid of database %u" +msgstr "pg_database.datfrozenxid för databas %u" + +#: storage/lmgr/lmgr.c:1123 #, c-format msgid "page %u of relation %u of database %u" msgstr "sida %u i relation %u i databas %u" -#: storage/lmgr/lmgr.c:1110 +#: storage/lmgr/lmgr.c:1130 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "tuple (%u,%u) i relation %u i databas %u" -#: storage/lmgr/lmgr.c:1118 +#: storage/lmgr/lmgr.c:1138 #, c-format msgid "transaction %u" msgstr "transaktion %u" -#: storage/lmgr/lmgr.c:1123 +#: storage/lmgr/lmgr.c:1143 #, c-format msgid "virtual transaction %d/%u" msgstr "vituell transaktion %d/%u" -#: storage/lmgr/lmgr.c:1129 +#: storage/lmgr/lmgr.c:1149 #, c-format msgid "speculative token %u of transaction %u" msgstr "spekulativ token %u för transaktion %u" -#: storage/lmgr/lmgr.c:1135 +#: storage/lmgr/lmgr.c:1155 #, c-format msgid "object %u of class %u of database %u" msgstr "objekt %u av klass %u i databas %u" -#: storage/lmgr/lmgr.c:1143 +#: storage/lmgr/lmgr.c:1163 #, c-format msgid "user lock [%u,%u,%u]" msgstr "användarlås [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1150 +#: storage/lmgr/lmgr.c:1170 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "rådgivande lås [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1158 +#: storage/lmgr/lmgr.c:1178 #, c-format msgid "unrecognized locktag type %d" msgstr "okänd låsetikettyp %d" @@ -20445,20 +20448,20 @@ msgstr "Källprocessen med PID %d kör inte längre." msgid "You might need to increase max_pred_locks_per_transaction." msgstr "Du kan behöva öka parametern max_pred_locks_per_transaction." -#: storage/lmgr/predicate.c:4030 storage/lmgr/predicate.c:4063 -#: storage/lmgr/predicate.c:4096 storage/lmgr/predicate.c:4104 -#: storage/lmgr/predicate.c:4143 storage/lmgr/predicate.c:4385 -#: storage/lmgr/predicate.c:4722 storage/lmgr/predicate.c:4734 -#: storage/lmgr/predicate.c:4777 storage/lmgr/predicate.c:4815 +#: storage/lmgr/predicate.c:4030 storage/lmgr/predicate.c:4066 +#: storage/lmgr/predicate.c:4099 storage/lmgr/predicate.c:4107 +#: storage/lmgr/predicate.c:4146 storage/lmgr/predicate.c:4388 +#: storage/lmgr/predicate.c:4725 storage/lmgr/predicate.c:4737 +#: storage/lmgr/predicate.c:4780 storage/lmgr/predicate.c:4818 #, c-format msgid "could not serialize access due to read/write dependencies among transactions" msgstr "kunde inte serialisera åtkomst på grund av läs/skriv-beroenden bland transaktionerna" -#: storage/lmgr/predicate.c:4032 storage/lmgr/predicate.c:4065 -#: storage/lmgr/predicate.c:4098 storage/lmgr/predicate.c:4106 -#: storage/lmgr/predicate.c:4145 storage/lmgr/predicate.c:4387 -#: storage/lmgr/predicate.c:4724 storage/lmgr/predicate.c:4736 -#: storage/lmgr/predicate.c:4779 storage/lmgr/predicate.c:4817 +#: storage/lmgr/predicate.c:4032 storage/lmgr/predicate.c:4068 +#: storage/lmgr/predicate.c:4101 storage/lmgr/predicate.c:4109 +#: storage/lmgr/predicate.c:4148 storage/lmgr/predicate.c:4390 +#: storage/lmgr/predicate.c:4727 storage/lmgr/predicate.c:4739 +#: storage/lmgr/predicate.c:4782 storage/lmgr/predicate.c:4820 #, c-format msgid "The transaction might succeed if retried." msgstr "Transaktionen kan lyckas om den körs igen." @@ -20601,7 +20604,7 @@ msgstr "kunde inte öppna fil \"%s\" (målblock %u): föregående segment är ba msgid "could not open file \"%s\" (target block %u): %m" msgstr "kunde inte öppna fil \"%s\" (målblock %u): %m" -#: storage/sync/sync.c:400 +#: storage/sync/sync.c:401 #, c-format msgid "could not fsync file \"%s\" but retrying: %m" msgstr "kunde inte fsync:a fil \"%s\" men försöker igen: %m" @@ -20937,30 +20940,30 @@ msgid "Declare it with SCROLL option to enable backward scan." msgstr "Deklarera den med flaggan SCROLL för att kunna traversera bakåt." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:411 +#: tcop/utility.c:413 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "kan inte köra %s i read-only-transaktion" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:429 +#: tcop/utility.c:431 #, c-format msgid "cannot execute %s during a parallel operation" msgstr "kan inte köra %s under parallell operation" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:448 +#: tcop/utility.c:450 #, c-format msgid "cannot execute %s during recovery" msgstr "kan inte köra %s under återställning" #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:466 +#: tcop/utility.c:468 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "kan inte köra %s inom säkerhetsbegränsad operation" -#: tcop/utility.c:910 +#: tcop/utility.c:912 #, c-format msgid "must be superuser to do CHECKPOINT" msgstr "måste vara superanvändare för att göra CHECKPOINT" @@ -21147,17 +21150,17 @@ msgstr "antalet alias överskriver angivet antal %d" msgid "affix file contains both old-style and new-style commands" msgstr "affix-fil innehåller kommandon på gammalt och nytt format" -#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1129 +#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "strängen är för lång för tsvector (%d byte, max %d byte)" -#: tsearch/ts_locale.c:185 +#: tsearch/ts_locale.c:212 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "rad %d i konfigureringsfil \"%s\": \"%s\"" -#: tsearch/ts_locale.c:302 +#: tsearch/ts_locale.c:329 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "konvertering från wchar_t till serverkodning misslyckades: %m" @@ -21189,27 +21192,27 @@ msgstr "kunde inte öppna stoppordsfil \"%s\": %m" msgid "text search parser does not support headline creation" msgstr "textsökparsern stöder inte skapande av rubriker" -#: tsearch/wparser_def.c:2587 +#: tsearch/wparser_def.c:2585 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "okänd rubrikparameter: \"%s\"" -#: tsearch/wparser_def.c:2597 +#: tsearch/wparser_def.c:2604 #, c-format msgid "MinWords should be less than MaxWords" msgstr "MinWords skall vara mindre än MaxWords" -#: tsearch/wparser_def.c:2601 +#: tsearch/wparser_def.c:2608 #, c-format msgid "MinWords should be positive" msgstr "MinWords skall vara positiv" -#: tsearch/wparser_def.c:2605 +#: tsearch/wparser_def.c:2612 #, c-format msgid "ShortWord should be >= 0" msgstr "ShortWord skall vara >= 0" -#: tsearch/wparser_def.c:2609 +#: tsearch/wparser_def.c:2616 #, c-format msgid "MaxFragments should be >= 0" msgstr "MaxFragments skall vara >= 0" @@ -21348,13 +21351,13 @@ msgstr "indatatyp är inte en array" #: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 #: utils/adt/arrayfuncs.c:1336 utils/adt/float.c:1243 utils/adt/float.c:1317 -#: utils/adt/float.c:3925 utils/adt/float.c:3939 utils/adt/int.c:759 +#: utils/adt/float.c:3960 utils/adt/float.c:3974 utils/adt/int.c:759 #: utils/adt/int.c:781 utils/adt/int.c:795 utils/adt/int.c:809 #: utils/adt/int.c:840 utils/adt/int.c:861 utils/adt/int.c:978 #: utils/adt/int.c:992 utils/adt/int.c:1006 utils/adt/int.c:1039 #: utils/adt/int.c:1053 utils/adt/int.c:1067 utils/adt/int.c:1098 -#: utils/adt/int.c:1180 utils/adt/int.c:1243 utils/adt/int.c:1311 -#: utils/adt/int.c:1317 utils/adt/int8.c:1291 utils/adt/numeric.c:1559 +#: utils/adt/int.c:1180 utils/adt/int.c:1244 utils/adt/int.c:1312 +#: utils/adt/int.c:1318 utils/adt/int8.c:1292 utils/adt/numeric.c:1559 #: utils/adt/numeric.c:3435 utils/adt/varbit.c:1188 utils/adt/varbit.c:1576 #: utils/adt/varlena.c:1087 utils/adt/varlena.c:3377 #, c-format @@ -21505,7 +21508,7 @@ msgid "wrong element type" msgstr "fel elementtyp" #: utils/adt/arrayfuncs.c:1367 utils/adt/rangetypes.c:335 -#: utils/cache/lsyscache.c:2786 +#: utils/cache/lsyscache.c:2835 #, c-format msgid "no binary input function available for type %s" msgstr "ingen binär indatafunktion finns för typen %s" @@ -21516,7 +21519,7 @@ msgid "improper binary format in array element %d" msgstr "felaktigt binärt format i array-element %d" #: utils/adt/arrayfuncs.c:1588 utils/adt/rangetypes.c:340 -#: utils/cache/lsyscache.c:2819 +#: utils/cache/lsyscache.c:2868 #, c-format msgid "no binary output function available for type %s" msgstr "det saknas en binär output-funktion för typen %s" @@ -21532,7 +21535,7 @@ msgstr "slice av fixlängd-array är inte implementerat" #: utils/adt/arrayfuncs.c:5829 utils/adt/arrayfuncs.c:5840 #: utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 #: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4340 utils/adt/jsonfuncs.c:4490 -#: utils/adt/jsonfuncs.c:4601 utils/adt/jsonfuncs.c:4647 +#: utils/adt/jsonfuncs.c:4602 utils/adt/jsonfuncs.c:4648 #, c-format msgid "wrong number of array subscripts" msgstr "fel antal array-indexeringar" @@ -21666,7 +21669,7 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "kodningskonvertering från %s till ASCII stöds inte" #. translator: first %s is inet or cidr -#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3770 +#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3757 #: utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:295 #: utils/adt/float.c:412 utils/adt/float.c:497 utils/adt/float.c:525 #: utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 @@ -21679,19 +21682,19 @@ msgstr "kodningskonvertering från %s till ASCII stöds inte" #: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:601 #: utils/adt/numeric.c:628 utils/adt/numeric.c:6001 utils/adt/numeric.c:6025 #: utils/adt/numeric.c:6049 utils/adt/numeric.c:6882 utils/adt/numeric.c:6908 -#: utils/adt/numutils.c:114 utils/adt/numutils.c:124 utils/adt/numutils.c:168 -#: utils/adt/numutils.c:244 utils/adt/numutils.c:320 utils/adt/oid.c:44 +#: utils/adt/numutils.c:116 utils/adt/numutils.c:126 utils/adt/numutils.c:170 +#: utils/adt/numutils.c:246 utils/adt/numutils.c:322 utils/adt/oid.c:44 #: utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 -#: utils/adt/pg_lsn.c:73 utils/adt/tid.c:73 utils/adt/tid.c:81 -#: utils/adt/tid.c:89 utils/adt/timestamp.c:493 utils/adt/uuid.c:136 +#: utils/adt/pg_lsn.c:73 utils/adt/tid.c:74 utils/adt/tid.c:82 +#: utils/adt/tid.c:90 utils/adt/timestamp.c:494 utils/adt/uuid.c:136 #: utils/adt/xid8funcs.c:346 #, c-format msgid "invalid input syntax for type %s: \"%s\"" msgstr "ogiltig indatasyntax för type %s: \"%s\"" #: utils/adt/cash.c:215 utils/adt/cash.c:240 utils/adt/cash.c:250 -#: utils/adt/cash.c:290 utils/adt/int8.c:118 utils/adt/numutils.c:138 -#: utils/adt/numutils.c:145 utils/adt/numutils.c:238 utils/adt/numutils.c:314 +#: utils/adt/cash.c:290 utils/adt/int8.c:118 utils/adt/numutils.c:140 +#: utils/adt/numutils.c:147 utils/adt/numutils.c:240 utils/adt/numutils.c:316 #: utils/adt/oid.c:70 utils/adt/oid.c:109 #, c-format msgid "value \"%s\" is out of range for type %s" @@ -21702,9 +21705,9 @@ msgstr "värdet \"%s\" är utanför giltigt intervall för typen %s" #: utils/adt/float.c:104 utils/adt/int.c:824 utils/adt/int.c:940 #: utils/adt/int.c:1020 utils/adt/int.c:1082 utils/adt/int.c:1120 #: utils/adt/int.c:1148 utils/adt/int8.c:593 utils/adt/int8.c:651 -#: utils/adt/int8.c:977 utils/adt/int8.c:1057 utils/adt/int8.c:1119 -#: utils/adt/int8.c:1199 utils/adt/numeric.c:7446 utils/adt/numeric.c:7736 -#: utils/adt/numeric.c:9318 utils/adt/timestamp.c:3271 +#: utils/adt/int8.c:978 utils/adt/int8.c:1058 utils/adt/int8.c:1120 +#: utils/adt/int8.c:1200 utils/adt/numeric.c:7446 utils/adt/numeric.c:7736 +#: utils/adt/numeric.c:9318 utils/adt/timestamp.c:3243 #, c-format msgid "division by zero" msgstr "division med noll" @@ -21714,153 +21717,153 @@ msgstr "division med noll" msgid "\"char\" out of range" msgstr "\"char\" utanför sitt intervall" -#: utils/adt/date.c:60 utils/adt/timestamp.c:94 utils/adt/varbit.c:104 +#: utils/adt/date.c:61 utils/adt/timestamp.c:95 utils/adt/varbit.c:104 #: utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "ogiltig typmodifierare" -#: utils/adt/date.c:72 +#: utils/adt/date.c:73 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "TIME(%d)%s-precisionen får inte vara negativ" -#: utils/adt/date.c:78 +#: utils/adt/date.c:79 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "TIME(%d)%s-precisionen reducerad till maximalt tillåtna, %d" -#: utils/adt/date.c:157 utils/adt/date.c:165 utils/adt/formatting.c:4196 -#: utils/adt/formatting.c:4205 utils/adt/formatting.c:4311 -#: utils/adt/formatting.c:4321 +#: utils/adt/date.c:158 utils/adt/date.c:166 utils/adt/formatting.c:4210 +#: utils/adt/formatting.c:4219 utils/adt/formatting.c:4325 +#: utils/adt/formatting.c:4335 #, c-format msgid "date out of range: \"%s\"" msgstr "datum utanför giltigt intervall \"%s\"" -#: utils/adt/date.c:212 utils/adt/date.c:524 utils/adt/date.c:548 +#: utils/adt/date.c:213 utils/adt/date.c:525 utils/adt/date.c:549 #: utils/adt/xml.c:2210 #, c-format msgid "date out of range" msgstr "datum utanför giltigt intervall" -#: utils/adt/date.c:258 utils/adt/timestamp.c:573 +#: utils/adt/date.c:259 utils/adt/timestamp.c:574 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "datumfältvärde utanför giltigt område: %d-%02d-%02d" -#: utils/adt/date.c:265 utils/adt/date.c:274 utils/adt/timestamp.c:579 +#: utils/adt/date.c:266 utils/adt/date.c:275 utils/adt/timestamp.c:580 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "datum utanför giltigt område: %d-%02d-%02d" -#: utils/adt/date.c:312 utils/adt/date.c:335 utils/adt/date.c:361 -#: utils/adt/date.c:1169 utils/adt/date.c:1215 utils/adt/date.c:1716 -#: utils/adt/date.c:1747 utils/adt/date.c:1776 utils/adt/date.c:2608 -#: utils/adt/datetime.c:1660 utils/adt/formatting.c:4053 -#: utils/adt/formatting.c:4085 utils/adt/formatting.c:4165 -#: utils/adt/formatting.c:4287 utils/adt/json.c:418 utils/adt/json.c:457 -#: utils/adt/timestamp.c:221 utils/adt/timestamp.c:253 -#: utils/adt/timestamp.c:701 utils/adt/timestamp.c:710 -#: utils/adt/timestamp.c:788 utils/adt/timestamp.c:821 -#: utils/adt/timestamp.c:2850 utils/adt/timestamp.c:2871 -#: utils/adt/timestamp.c:2884 utils/adt/timestamp.c:2893 -#: utils/adt/timestamp.c:2901 utils/adt/timestamp.c:2956 -#: utils/adt/timestamp.c:2979 utils/adt/timestamp.c:2992 -#: utils/adt/timestamp.c:3003 utils/adt/timestamp.c:3011 -#: utils/adt/timestamp.c:3671 utils/adt/timestamp.c:3796 -#: utils/adt/timestamp.c:3837 utils/adt/timestamp.c:3927 -#: utils/adt/timestamp.c:3971 utils/adt/timestamp.c:4074 -#: utils/adt/timestamp.c:4559 utils/adt/timestamp.c:4755 -#: utils/adt/timestamp.c:5082 utils/adt/timestamp.c:5096 -#: utils/adt/timestamp.c:5101 utils/adt/timestamp.c:5115 -#: utils/adt/timestamp.c:5148 utils/adt/timestamp.c:5225 -#: utils/adt/timestamp.c:5266 utils/adt/timestamp.c:5270 -#: utils/adt/timestamp.c:5339 utils/adt/timestamp.c:5343 -#: utils/adt/timestamp.c:5357 utils/adt/timestamp.c:5391 utils/adt/xml.c:2232 +#: utils/adt/date.c:313 utils/adt/date.c:336 utils/adt/date.c:362 +#: utils/adt/date.c:1142 utils/adt/date.c:1188 utils/adt/date.c:1744 +#: utils/adt/date.c:1775 utils/adt/date.c:1804 utils/adt/date.c:2636 +#: utils/adt/datetime.c:1655 utils/adt/formatting.c:4067 +#: utils/adt/formatting.c:4099 utils/adt/formatting.c:4179 +#: utils/adt/formatting.c:4301 utils/adt/json.c:418 utils/adt/json.c:457 +#: utils/adt/timestamp.c:222 utils/adt/timestamp.c:254 +#: utils/adt/timestamp.c:692 utils/adt/timestamp.c:701 +#: utils/adt/timestamp.c:779 utils/adt/timestamp.c:812 +#: utils/adt/timestamp.c:2822 utils/adt/timestamp.c:2843 +#: utils/adt/timestamp.c:2856 utils/adt/timestamp.c:2865 +#: utils/adt/timestamp.c:2873 utils/adt/timestamp.c:2928 +#: utils/adt/timestamp.c:2951 utils/adt/timestamp.c:2964 +#: utils/adt/timestamp.c:2975 utils/adt/timestamp.c:2983 +#: utils/adt/timestamp.c:3643 utils/adt/timestamp.c:3768 +#: utils/adt/timestamp.c:3809 utils/adt/timestamp.c:3899 +#: utils/adt/timestamp.c:3943 utils/adt/timestamp.c:4046 +#: utils/adt/timestamp.c:4531 utils/adt/timestamp.c:4727 +#: utils/adt/timestamp.c:5054 utils/adt/timestamp.c:5068 +#: utils/adt/timestamp.c:5073 utils/adt/timestamp.c:5087 +#: utils/adt/timestamp.c:5120 utils/adt/timestamp.c:5207 +#: utils/adt/timestamp.c:5248 utils/adt/timestamp.c:5252 +#: utils/adt/timestamp.c:5321 utils/adt/timestamp.c:5325 +#: utils/adt/timestamp.c:5339 utils/adt/timestamp.c:5373 utils/adt/xml.c:2232 #: utils/adt/xml.c:2239 utils/adt/xml.c:2259 utils/adt/xml.c:2266 #, c-format msgid "timestamp out of range" msgstr "timestamp utanför giltigt intervall" -#: utils/adt/date.c:499 +#: utils/adt/date.c:500 #, c-format msgid "cannot subtract infinite dates" msgstr "kan inte subtrahera oändliga datum" -#: utils/adt/date.c:588 utils/adt/date.c:645 utils/adt/date.c:679 -#: utils/adt/date.c:2645 utils/adt/date.c:2655 +#: utils/adt/date.c:598 utils/adt/date.c:661 utils/adt/date.c:697 +#: utils/adt/date.c:2673 utils/adt/date.c:2683 #, c-format msgid "date out of range for timestamp" msgstr "datum utanför filtigt område för timestamp" -#: utils/adt/date.c:1329 utils/adt/date.c:2103 utils/adt/formatting.c:4373 +#: utils/adt/date.c:1361 utils/adt/date.c:2131 utils/adt/formatting.c:4387 #, c-format msgid "time out of range" msgstr "time utanför giltigt intervall" -#: utils/adt/date.c:1385 utils/adt/timestamp.c:598 +#: utils/adt/date.c:1413 utils/adt/timestamp.c:589 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "time-värde utanför giltigt område: %d:%02d:%02g" -#: utils/adt/date.c:1905 utils/adt/date.c:2407 utils/adt/float.c:1071 +#: utils/adt/date.c:1933 utils/adt/date.c:2435 utils/adt/float.c:1071 #: utils/adt/float.c:1140 utils/adt/int.c:616 utils/adt/int.c:663 #: utils/adt/int.c:698 utils/adt/int8.c:492 utils/adt/numeric.c:2197 -#: utils/adt/timestamp.c:3320 utils/adt/timestamp.c:3351 -#: utils/adt/timestamp.c:3382 +#: utils/adt/timestamp.c:3292 utils/adt/timestamp.c:3323 +#: utils/adt/timestamp.c:3354 #, c-format msgid "invalid preceding or following size in window function" msgstr "ogiltig föregående eller efterföljande storlek i fönsterfunktion" -#: utils/adt/date.c:1990 utils/adt/date.c:2003 +#: utils/adt/date.c:2018 utils/adt/date.c:2031 #, c-format msgid "\"time\" units \"%s\" not recognized" msgstr "känner inte igen \"time\"-enhet \"%s\"" -#: utils/adt/date.c:2111 +#: utils/adt/date.c:2139 #, c-format msgid "time zone displacement out of range" msgstr "tidszonförskjutning utanför giltigt intervall" -#: utils/adt/date.c:2740 utils/adt/date.c:2753 +#: utils/adt/date.c:2768 utils/adt/date.c:2781 #, c-format msgid "\"time with time zone\" units \"%s\" not recognized" msgstr "känner inte igen \"time with time zone\" enhet \"%s\"" -#: utils/adt/date.c:2826 utils/adt/datetime.c:906 utils/adt/datetime.c:1818 -#: utils/adt/datetime.c:4614 utils/adt/timestamp.c:512 -#: utils/adt/timestamp.c:539 utils/adt/timestamp.c:4157 -#: utils/adt/timestamp.c:5107 utils/adt/timestamp.c:5349 +#: utils/adt/date.c:2854 utils/adt/datetime.c:906 utils/adt/datetime.c:1813 +#: utils/adt/datetime.c:4601 utils/adt/timestamp.c:513 +#: utils/adt/timestamp.c:540 utils/adt/timestamp.c:4129 +#: utils/adt/timestamp.c:5079 utils/adt/timestamp.c:5331 #, c-format msgid "time zone \"%s\" not recognized" msgstr "tidszon \"%s\" känns inte igen" -#: utils/adt/date.c:2858 utils/adt/timestamp.c:5137 utils/adt/timestamp.c:5380 +#: utils/adt/date.c:2886 utils/adt/timestamp.c:5109 utils/adt/timestamp.c:5362 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "intervalltidszonen \"%s\" kan inte inkludera månader eller år" -#: utils/adt/datetime.c:3743 utils/adt/datetime.c:3750 +#: utils/adt/datetime.c:3730 utils/adt/datetime.c:3737 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "datum/tid-värde utanför giltigt område: \"%s\"" -#: utils/adt/datetime.c:3752 +#: utils/adt/datetime.c:3739 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." msgstr "Du kanske behöver en annan inställning av variabeln \"datestyle\"." -#: utils/adt/datetime.c:3757 +#: utils/adt/datetime.c:3744 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "intervall-värde utanför giltigt område: \"%s\"" -#: utils/adt/datetime.c:3763 +#: utils/adt/datetime.c:3750 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "tidszonförskjutning itanför sitt intervall: \"%s\"" -#: utils/adt/datetime.c:4616 +#: utils/adt/datetime.c:4603 #, c-format msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "Detta tidszonsnamn finns i konfigurationsfilen för tidszonsförkortning \"%s\"." @@ -21997,7 +22000,7 @@ msgstr "\"%s\" är utanför giltigt intervall för typen double precision" #: utils/adt/float.c:1268 utils/adt/float.c:1342 utils/adt/int.c:336 #: utils/adt/int.c:874 utils/adt/int.c:896 utils/adt/int.c:910 #: utils/adt/int.c:924 utils/adt/int.c:956 utils/adt/int.c:1194 -#: utils/adt/int8.c:1312 utils/adt/numeric.c:3553 utils/adt/numeric.c:3562 +#: utils/adt/int8.c:1313 utils/adt/numeric.c:3553 utils/adt/numeric.c:3562 #, c-format msgid "smallint out of range" msgstr "smallint utanför sitt intervall" @@ -22041,22 +22044,22 @@ msgstr "indata är utanför giltigt intervall" msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "setseed-parameter %g är utanför giltigt intervall [-1,1]" -#: utils/adt/float.c:3903 utils/adt/numeric.c:1509 +#: utils/adt/float.c:3938 utils/adt/numeric.c:1509 #, c-format msgid "count must be greater than zero" msgstr "antal måste vara större än noll" -#: utils/adt/float.c:3908 utils/adt/numeric.c:1516 +#: utils/adt/float.c:3943 utils/adt/numeric.c:1516 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "operand, lägre gräns och övre gräns kan inte vara NaN" -#: utils/adt/float.c:3914 +#: utils/adt/float.c:3949 #, c-format msgid "lower and upper bounds must be finite" msgstr "lägre och övre gräns måste vara ändliga" -#: utils/adt/float.c:3948 utils/adt/numeric.c:1529 +#: utils/adt/float.c:3983 utils/adt/numeric.c:1529 #, c-format msgid "lower bound cannot equal upper bound" msgstr "lägre gräns kan inte vara samma som övre gräns" @@ -22141,179 +22144,184 @@ msgstr "\"EEEE\" är inkompatibel med andra format" msgid "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "\"EEEE\" får bara användas tillsammans med siffror- och decimalpunkts-mönster." -#: utils/adt/formatting.c:1392 +#: utils/adt/formatting.c:1394 #, c-format msgid "invalid datetime format separator: \"%s\"" msgstr "ogiltigt formatseparator för datetime: \"%s\"" -#: utils/adt/formatting.c:1520 +#: utils/adt/formatting.c:1522 #, c-format msgid "\"%s\" is not a number" msgstr "\"%s\" är inte ett nummer" -#: utils/adt/formatting.c:1598 +#: utils/adt/formatting.c:1600 #, c-format msgid "case conversion failed: %s" msgstr "case-konvertering misslyckades: %s" -#: utils/adt/formatting.c:1663 utils/adt/formatting.c:1787 -#: utils/adt/formatting.c:1912 +#: utils/adt/formatting.c:1665 utils/adt/formatting.c:1789 +#: utils/adt/formatting.c:1914 #, c-format msgid "could not determine which collation to use for %s function" msgstr "kunde inte bestämma jämförelse (collation) för funktionen %s" -#: utils/adt/formatting.c:2284 +#: utils/adt/formatting.c:2286 #, c-format msgid "invalid combination of date conventions" msgstr "ogiltig kombination av datumkonventioner" -#: utils/adt/formatting.c:2285 +#: utils/adt/formatting.c:2287 #, c-format msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr "Blanda inte datumkonventionerna Gregoriansk och ISO-veckor i formatteringsmall." -#: utils/adt/formatting.c:2308 +#: utils/adt/formatting.c:2310 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "värden för \"%s\" i formatsträng står i konflikt med varandra" -#: utils/adt/formatting.c:2311 +#: utils/adt/formatting.c:2313 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "Detta värde motsäger en tidigare inställning för samma fälttyp." -#: utils/adt/formatting.c:2382 +#: utils/adt/formatting.c:2384 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "källsträngen är för kort för formatfält \"%s\"" -#: utils/adt/formatting.c:2385 +#: utils/adt/formatting.c:2387 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "Fältet kräver %d tecken men bara %d återstår." -#: utils/adt/formatting.c:2388 utils/adt/formatting.c:2403 +#: utils/adt/formatting.c:2390 utils/adt/formatting.c:2405 #, c-format msgid "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "Om din källsträng inte är av fast längd så testa med modifieraren \"FM\"." -#: utils/adt/formatting.c:2398 utils/adt/formatting.c:2412 -#: utils/adt/formatting.c:2635 +#: utils/adt/formatting.c:2400 utils/adt/formatting.c:2414 +#: utils/adt/formatting.c:2637 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "ogiltigt värde \"%s\" för \"%s\"" -#: utils/adt/formatting.c:2400 +#: utils/adt/formatting.c:2402 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "Fältet kräver %d tecken men bara %d kunde parsas." -#: utils/adt/formatting.c:2414 +#: utils/adt/formatting.c:2416 #, c-format msgid "Value must be an integer." msgstr "Värdet måste vara ett heltal." -#: utils/adt/formatting.c:2419 +#: utils/adt/formatting.c:2421 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "värdet för \"%s\" i källsträng är utanför giltigt intervall" -#: utils/adt/formatting.c:2421 +#: utils/adt/formatting.c:2423 #, c-format msgid "Value must be in the range %d to %d." msgstr "Värdet måste vara i intervallet %d till %d." -#: utils/adt/formatting.c:2637 +#: utils/adt/formatting.c:2639 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "Det givna värdet matchar inget av de tillåtna värdena för detta fält." -#: utils/adt/formatting.c:2854 utils/adt/formatting.c:2874 -#: utils/adt/formatting.c:2894 utils/adt/formatting.c:2914 -#: utils/adt/formatting.c:2933 utils/adt/formatting.c:2952 -#: utils/adt/formatting.c:2976 utils/adt/formatting.c:2994 -#: utils/adt/formatting.c:3012 utils/adt/formatting.c:3030 -#: utils/adt/formatting.c:3047 utils/adt/formatting.c:3064 +#: utils/adt/formatting.c:2856 utils/adt/formatting.c:2876 +#: utils/adt/formatting.c:2896 utils/adt/formatting.c:2916 +#: utils/adt/formatting.c:2935 utils/adt/formatting.c:2954 +#: utils/adt/formatting.c:2978 utils/adt/formatting.c:2996 +#: utils/adt/formatting.c:3014 utils/adt/formatting.c:3032 +#: utils/adt/formatting.c:3049 utils/adt/formatting.c:3066 #, c-format msgid "localized string format value too long" msgstr "lokaliserat strängformatvärde är för långt" -#: utils/adt/formatting.c:3298 +#: utils/adt/formatting.c:3300 #, c-format msgid "unmatched format separator \"%c\"" msgstr "ej matchande formatteringsseparator \"%c\"" -#: utils/adt/formatting.c:3453 utils/adt/formatting.c:3797 +#: utils/adt/formatting.c:3361 +#, c-format +msgid "unmatched format character \"%s\"" +msgstr "ej matchande formatteringstecken \"%s\"" + +#: utils/adt/formatting.c:3467 utils/adt/formatting.c:3811 #, c-format msgid "formatting field \"%s\" is only supported in to_char" msgstr "formateringsfält \"%s\" stöds bara i to_char" -#: utils/adt/formatting.c:3628 +#: utils/adt/formatting.c:3642 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "ogiltig indatasträng för \"Y,YYY\"" -#: utils/adt/formatting.c:3714 +#: utils/adt/formatting.c:3728 #, c-format msgid "input string is too short for datetime format" msgstr "indatasträngen är för kort för datetime-formatet" -#: utils/adt/formatting.c:3722 +#: utils/adt/formatting.c:3736 #, c-format msgid "trailing characters remain in input string after datetime format" msgstr "efterföljande tecken finns kvar i indatasträngen efter datetime-formattering" -#: utils/adt/formatting.c:4267 +#: utils/adt/formatting.c:4281 #, c-format msgid "missing time zone in input string for type timestamptz" msgstr "saknar tidszon i indatasträngen för typen timestamptz" -#: utils/adt/formatting.c:4273 +#: utils/adt/formatting.c:4287 #, c-format msgid "timestamptz out of range" msgstr "timestamptz utanför giltigt intervall" -#: utils/adt/formatting.c:4301 +#: utils/adt/formatting.c:4315 #, c-format msgid "datetime format is zoned but not timed" msgstr "datetime-format har zon men inte tid" -#: utils/adt/formatting.c:4353 +#: utils/adt/formatting.c:4367 #, c-format msgid "missing time zone in input string for type timetz" msgstr "saknar tidszon i indatasträng för typ timetz" -#: utils/adt/formatting.c:4359 +#: utils/adt/formatting.c:4373 #, c-format msgid "timetz out of range" msgstr "timetz utanför giltigt intervall" -#: utils/adt/formatting.c:4385 +#: utils/adt/formatting.c:4399 #, c-format msgid "datetime format is not dated and not timed" msgstr "datetime-format har inte datum och inte tid" -#: utils/adt/formatting.c:4518 +#: utils/adt/formatting.c:4532 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "timmen \"%d\" är ogiltigt för en 12-timmars-klocka" -#: utils/adt/formatting.c:4520 +#: utils/adt/formatting.c:4534 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Använd en 24-timmars-klocka eller ange en timme mellan 1 och 12." -#: utils/adt/formatting.c:4628 +#: utils/adt/formatting.c:4645 #, c-format msgid "cannot calculate day of year without year information" msgstr "kan inte beräkna dag på året utan årsinformation" -#: utils/adt/formatting.c:5547 +#: utils/adt/formatting.c:5564 #, c-format msgid "\"EEEE\" not supported for input" msgstr "\"EEEE\" stöds inte för indata" -#: utils/adt/formatting.c:5559 +#: utils/adt/formatting.c:5576 #, c-format msgid "\"RN\" not supported for input" msgstr "\"RN\" stöds inte för indata" @@ -22333,19 +22341,24 @@ msgstr "absolut sökväg tillåts inte" msgid "path must be in or below the current directory" msgstr "sökväg måste vara i eller under den aktuella katalogen" -#: utils/adt/genfile.c:138 utils/adt/oracle_compat.c:184 -#: utils/adt/oracle_compat.c:282 utils/adt/oracle_compat.c:758 -#: utils/adt/oracle_compat.c:1053 +#: utils/adt/genfile.c:116 utils/adt/oracle_compat.c:185 +#: utils/adt/oracle_compat.c:283 utils/adt/oracle_compat.c:759 +#: utils/adt/oracle_compat.c:1054 #, c-format msgid "requested length too large" msgstr "efterfrågad längd är för lång" -#: utils/adt/genfile.c:155 +#: utils/adt/genfile.c:133 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "kunde inte söka (seek) i fil \"%s\": %m" -#: utils/adt/genfile.c:215 +#: utils/adt/genfile.c:174 +#, c-format +msgid "file length too large" +msgstr "fillängd är för stor" + +#: utils/adt/genfile.c:251 #, c-format msgid "must be superuser to read files with adminpack 1.0" msgstr "måste vara superanvändare för att läsa filer med adminpack 1.0" @@ -22441,28 +22454,28 @@ msgstr "ogiltig int2vector-data" msgid "oidvector has too many elements" msgstr "oidvector har för många element" -#: utils/adt/int.c:1509 utils/adt/int8.c:1438 utils/adt/numeric.c:1417 -#: utils/adt/timestamp.c:5442 utils/adt/timestamp.c:5522 +#: utils/adt/int.c:1510 utils/adt/int8.c:1439 utils/adt/numeric.c:1417 +#: utils/adt/timestamp.c:5424 utils/adt/timestamp.c:5504 #, c-format msgid "step size cannot equal zero" msgstr "stegstorleken kan inte vara noll" #: utils/adt/int8.c:527 utils/adt/int8.c:550 utils/adt/int8.c:564 #: utils/adt/int8.c:578 utils/adt/int8.c:609 utils/adt/int8.c:633 -#: utils/adt/int8.c:714 utils/adt/int8.c:782 utils/adt/int8.c:788 -#: utils/adt/int8.c:814 utils/adt/int8.c:828 utils/adt/int8.c:852 -#: utils/adt/int8.c:865 utils/adt/int8.c:934 utils/adt/int8.c:948 -#: utils/adt/int8.c:962 utils/adt/int8.c:993 utils/adt/int8.c:1015 -#: utils/adt/int8.c:1029 utils/adt/int8.c:1043 utils/adt/int8.c:1076 -#: utils/adt/int8.c:1090 utils/adt/int8.c:1104 utils/adt/int8.c:1135 -#: utils/adt/int8.c:1157 utils/adt/int8.c:1171 utils/adt/int8.c:1185 -#: utils/adt/int8.c:1347 utils/adt/int8.c:1382 utils/adt/numeric.c:3508 +#: utils/adt/int8.c:715 utils/adt/int8.c:783 utils/adt/int8.c:789 +#: utils/adt/int8.c:815 utils/adt/int8.c:829 utils/adt/int8.c:853 +#: utils/adt/int8.c:866 utils/adt/int8.c:935 utils/adt/int8.c:949 +#: utils/adt/int8.c:963 utils/adt/int8.c:994 utils/adt/int8.c:1016 +#: utils/adt/int8.c:1030 utils/adt/int8.c:1044 utils/adt/int8.c:1077 +#: utils/adt/int8.c:1091 utils/adt/int8.c:1105 utils/adt/int8.c:1136 +#: utils/adt/int8.c:1158 utils/adt/int8.c:1172 utils/adt/int8.c:1186 +#: utils/adt/int8.c:1348 utils/adt/int8.c:1383 utils/adt/numeric.c:3508 #: utils/adt/varbit.c:1656 #, c-format msgid "bigint out of range" msgstr "bigint utanför sitt intervall" -#: utils/adt/int8.c:1395 +#: utils/adt/int8.c:1396 #, c-format msgid "OID out of range" msgstr "OID utanför sitt intervall" @@ -22717,12 +22730,12 @@ msgstr "kan inte radera från en skalär" msgid "cannot delete from object using integer index" msgstr "kan inte radera från objekt genom att använda heltalsindex" -#: utils/adt/jsonfuncs.c:4495 utils/adt/jsonfuncs.c:4652 +#: utils/adt/jsonfuncs.c:4495 utils/adt/jsonfuncs.c:4653 #, c-format msgid "cannot set path in scalar" msgstr "kan inte sätta sökväg i skalär" -#: utils/adt/jsonfuncs.c:4537 utils/adt/jsonfuncs.c:4578 +#: utils/adt/jsonfuncs.c:4537 utils/adt/jsonfuncs.c:4579 #, c-format msgid "null_value_treatment must be \"delete_key\", \"return_target\", \"use_json_null\", or \"raise_exception\"" msgstr "null_value_treatment måste vara \"delete_key\", \"return_target\", \"use_json_null\" eller \"raise_exception\"" @@ -22742,52 +22755,52 @@ msgstr "Avbrott utlöstes då null_value_treatment är \"raise_exception\"." msgid "To avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not passed." msgstr "För att undvika detta så ändra null_value_treatment-argumentet eller se till att ett SQL-NULL inte skickas." -#: utils/adt/jsonfuncs.c:4606 +#: utils/adt/jsonfuncs.c:4607 #, c-format msgid "cannot delete path in scalar" msgstr "kan inte radera sökväg i skalär" -#: utils/adt/jsonfuncs.c:4775 +#: utils/adt/jsonfuncs.c:4776 #, c-format msgid "invalid concatenation of jsonb objects" msgstr "ogiltig sammanslagning av jsonb-objekt" -#: utils/adt/jsonfuncs.c:4809 +#: utils/adt/jsonfuncs.c:4810 #, c-format msgid "path element at position %d is null" msgstr "sökvägselement vid position %d är null" -#: utils/adt/jsonfuncs.c:4895 +#: utils/adt/jsonfuncs.c:4896 #, c-format msgid "cannot replace existing key" msgstr "kan inte ersätta befintlig nyckel" -#: utils/adt/jsonfuncs.c:4896 +#: utils/adt/jsonfuncs.c:4897 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "Försök använda funktionen jsonb_set för att ersätta nyckelvärde." -#: utils/adt/jsonfuncs.c:4978 +#: utils/adt/jsonfuncs.c:4979 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "sökvägselement vid position %d är inte ett heltal: \"%s\"" -#: utils/adt/jsonfuncs.c:5097 +#: utils/adt/jsonfuncs.c:5098 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "fel flaggtyp, bara array:er och skalärer tillåts" -#: utils/adt/jsonfuncs.c:5104 +#: utils/adt/jsonfuncs.c:5105 #, c-format msgid "flag array element is not a string" msgstr "flaggelement i arrayen är inte en sträng" -#: utils/adt/jsonfuncs.c:5105 utils/adt/jsonfuncs.c:5127 +#: utils/adt/jsonfuncs.c:5106 utils/adt/jsonfuncs.c:5128 #, c-format msgid "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all\"." msgstr "Möjliga värden är: \"string\", \"numeric\", \"boolean\", \"key\" samt \"all\"." -#: utils/adt/jsonfuncs.c:5125 +#: utils/adt/jsonfuncs.c:5126 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "fel flagga i flagg-array: \"%s\"" @@ -22852,75 +22865,84 @@ msgstr "jsonpaths medlemsväljare med wildcard kan bara appliceras på ett objek msgid "jsonpath item method .%s() can only be applied to an array" msgstr "jsonpaths elementmetod .%s() lkan bara applicerar på en array" -#: utils/adt/jsonpath_exec.c:1058 utils/adt/jsonpath_exec.c:1079 -#: utils/adt/jsonpath_exec.c:1755 +#: utils/adt/jsonpath_exec.c:1059 #, c-format -msgid "jsonpath item method .%s() can only be applied to a numeric value" -msgstr "jsonpaths elementmetod .%s() kan bara appliceras på ett numeriskt värde" +msgid "numeric argument of jsonpath item method .%s() is out of range for type double precision" +msgstr "numeriskt argument till jsonpaths elementmetod .%s() är utanför giltigt intervall för typen double precision" -#: utils/adt/jsonpath_exec.c:1092 +#: utils/adt/jsonpath_exec.c:1080 +#, c-format +msgid "string argument of jsonpath item method .%s() is not a valid representation of a double precision number" +msgstr "strängargument till jsonpaths elementmetod .%s() är inte en giltig representation av ett double precision-nummer" + +#: utils/adt/jsonpath_exec.c:1093 #, c-format msgid "jsonpath item method .%s() can only be applied to a string or numeric value" msgstr "jsonpaths elementmetod .%s() kan bara applicerar på en sträng eller ett numeriskt värde" -#: utils/adt/jsonpath_exec.c:1582 +#: utils/adt/jsonpath_exec.c:1583 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "vänster operand på jsonpath-operator %s är inte ett ensamt numeriskt värde" -#: utils/adt/jsonpath_exec.c:1589 +#: utils/adt/jsonpath_exec.c:1590 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "höger operand på jsonpath-operator %s är inte ett ensamt numeriskt värde" -#: utils/adt/jsonpath_exec.c:1657 +#: utils/adt/jsonpath_exec.c:1658 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "operand till unär jsonpath-operator %s är inte ett numeriskt värde" -#: utils/adt/jsonpath_exec.c:1795 +#: utils/adt/jsonpath_exec.c:1756 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a numeric value" +msgstr "jsonpaths elementmetod .%s() kan bara appliceras på ett numeriskt värde" + +#: utils/adt/jsonpath_exec.c:1796 #, c-format msgid "jsonpath item method .%s() can only be applied to a string" msgstr "jsonpaths elementmetod .%s() lkan bara applicerar på en sträng" -#: utils/adt/jsonpath_exec.c:1883 +#: utils/adt/jsonpath_exec.c:1890 #, c-format msgid "datetime format is not recognized: \"%s\"" msgstr "datetime-format känns inte igen: \"%s\"" -#: utils/adt/jsonpath_exec.c:1885 +#: utils/adt/jsonpath_exec.c:1892 #, c-format msgid "Use a datetime template argument to specify the input data format." msgstr "Använd ett datetime-mallargument för att ange indataformatet." -#: utils/adt/jsonpath_exec.c:1953 +#: utils/adt/jsonpath_exec.c:1960 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "jsonpaths elementmetod .%s() kan bara appliceras på ett objekt" -#: utils/adt/jsonpath_exec.c:2136 +#: utils/adt/jsonpath_exec.c:2143 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "kunde inte hitta jsonpath-variabel \"%s\"" -#: utils/adt/jsonpath_exec.c:2400 +#: utils/adt/jsonpath_exec.c:2407 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "jsonpaths array-index är inte ett ensamt numeriskt värde" -#: utils/adt/jsonpath_exec.c:2412 +#: utils/adt/jsonpath_exec.c:2419 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "jsonpaths array-index är utanför giltigt interval för integer" -#: utils/adt/jsonpath_exec.c:2589 +#: utils/adt/jsonpath_exec.c:2596 #, c-format -msgid "cannot convert value from %s to %s without timezone usage" +msgid "cannot convert value from %s to %s without time zone usage" msgstr "kan inte konvertera värde från %s till %s utan att använda tidszon" -#: utils/adt/jsonpath_exec.c:2591 +#: utils/adt/jsonpath_exec.c:2598 #, c-format -msgid "Use *_tz() function for timezone support." +msgid "Use *_tz() function for time zone support." msgstr "ANvända *_tz()-funktioner som stöder tidszon." #: utils/adt/levenshtein.c:133 @@ -22933,7 +22955,7 @@ msgstr "levenshtein-argument överskrider maximala längden på %d tecken" msgid "nondeterministic collations are not supported for LIKE" msgstr "ickedeterministiska jämförelser (collation) stöds inte för LIKE" -#: utils/adt/like.c:193 utils/adt/like_support.c:1004 +#: utils/adt/like.c:193 utils/adt/like_support.c:1002 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "kunde inte bestämma vilken jämförelse (collation) som skall användas för ILIKE" @@ -22958,12 +22980,12 @@ msgstr "ogiltig escape-sträng" msgid "Escape string must be empty or one character." msgstr "Escape-sträng måste vara tom eller ett tecken." -#: utils/adt/like_support.c:989 +#: utils/adt/like_support.c:987 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "matchning utan skiftlägeskänslighet stöds inte för typen bytea" -#: utils/adt/like_support.c:1091 +#: utils/adt/like_support.c:1089 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "matching med reguljär-uttryck stöds inte för typen bytea" @@ -22983,64 +23005,64 @@ msgstr "macaddr8-data utanför giltigt intervall för att konverteras till macad msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." msgstr "Bara adresser som har FF och FE som värden i 4:e och 5:e byten från vänster, till exempel xx:xx:xx:ff:fe:xx:xx:xx, är möjliga att konvertera från macaddr8 till macaddr." -#: utils/adt/misc.c:239 +#: utils/adt/misc.c:240 #, c-format msgid "global tablespace never has databases" msgstr "globala tablespace:t innehåller aldrig databaser" -#: utils/adt/misc.c:261 +#: utils/adt/misc.c:262 #, c-format msgid "%u is not a tablespace OID" msgstr "%u är inte ett tabelespace-OID" -#: utils/adt/misc.c:447 +#: utils/adt/misc.c:448 msgid "unreserved" msgstr "oreserverad" -#: utils/adt/misc.c:451 +#: utils/adt/misc.c:452 msgid "unreserved (cannot be function or type name)" msgstr "ej reserverad (kan inte vara funktion eller typnamn)" -#: utils/adt/misc.c:455 +#: utils/adt/misc.c:456 msgid "reserved (can be function or type name)" msgstr "reserverad (kan vara funktion eller typnamn)" -#: utils/adt/misc.c:459 +#: utils/adt/misc.c:460 msgid "reserved" msgstr "reserverad" -#: utils/adt/misc.c:633 utils/adt/misc.c:647 utils/adt/misc.c:686 -#: utils/adt/misc.c:692 utils/adt/misc.c:698 utils/adt/misc.c:721 +#: utils/adt/misc.c:634 utils/adt/misc.c:648 utils/adt/misc.c:687 +#: utils/adt/misc.c:693 utils/adt/misc.c:699 utils/adt/misc.c:722 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "sträng är inte en giltig identifierare: \"%s\"" -#: utils/adt/misc.c:635 +#: utils/adt/misc.c:636 #, c-format msgid "String has unclosed double quotes." msgstr "Sträng har ej avslutade dubbla citattecken." -#: utils/adt/misc.c:649 +#: utils/adt/misc.c:650 #, c-format msgid "Quoted identifier must not be empty." msgstr "Citerad identifierare får inte vara tom." -#: utils/adt/misc.c:688 +#: utils/adt/misc.c:689 #, c-format msgid "No valid identifier before \".\"." msgstr "Ingen giltig indentifierare innan \".\"." -#: utils/adt/misc.c:694 +#: utils/adt/misc.c:695 #, c-format msgid "No valid identifier after \".\"." msgstr "Ingen giltig identifierare efter \".\"." -#: utils/adt/misc.c:755 +#: utils/adt/misc.c:753 #, c-format msgid "log format \"%s\" is not supported" msgstr "loggformat \"%s\" stöds inte" -#: utils/adt/misc.c:756 +#: utils/adt/misc.c:754 #, c-format msgid "The supported log formats are \"stderr\" and \"csvlog\"." msgstr "Loggformat som stöds är \"stderr\" och \"csvlog\"." @@ -23201,7 +23223,7 @@ msgstr "overflow i numeric-fält" msgid "A field with precision %d, scale %d must round to an absolute value less than %s%d." msgstr "Ett fält med precision %d, skala %d måste avrundas till ett absolut värde mindre än %s%d." -#: utils/adt/numutils.c:152 +#: utils/adt/numutils.c:154 #, c-format msgid "value \"%s\" is out of range for 8-bit integer" msgstr "värdet \"%s\" är utanför intervallet för ett 8-bitars heltal" @@ -23211,22 +23233,22 @@ msgstr "värdet \"%s\" är utanför intervallet för ett 8-bitars heltal" msgid "invalid oidvector data" msgstr "ogiltig oidvector-data" -#: utils/adt/oracle_compat.c:895 +#: utils/adt/oracle_compat.c:896 #, c-format msgid "requested character too large" msgstr "efterfrågat tecken är för stort" -#: utils/adt/oracle_compat.c:945 utils/adt/oracle_compat.c:1007 +#: utils/adt/oracle_compat.c:946 utils/adt/oracle_compat.c:1008 #, c-format msgid "requested character too large for encoding: %d" msgstr "efterfrågat tecken är för stort för kodning: %d" -#: utils/adt/oracle_compat.c:986 +#: utils/adt/oracle_compat.c:987 #, c-format msgid "requested character not valid for encoding: %d" msgstr "efterfrågat tecken är inte giltigt för kodning: %d" -#: utils/adt/oracle_compat.c:1000 +#: utils/adt/oracle_compat.c:1001 #, c-format msgid "null character not permitted" msgstr "nolltecken tillåts inte" @@ -23237,99 +23259,99 @@ msgstr "nolltecken tillåts inte" msgid "percentile value %g is not between 0 and 1" msgstr "percentil-värde %g är inte mellan 0 och 1" -#: utils/adt/pg_locale.c:1092 +#: utils/adt/pg_locale.c:1262 #, c-format msgid "Apply system library package updates." msgstr "Applicera paketuppdateringar för systembibliotek." -#: utils/adt/pg_locale.c:1307 +#: utils/adt/pg_locale.c:1477 #, c-format msgid "could not create locale \"%s\": %m" msgstr "kunde inte skapa locale \"%s\": %m" -#: utils/adt/pg_locale.c:1310 +#: utils/adt/pg_locale.c:1480 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "Operativsystemet kunde inte hitta någon lokaldata för lokalnamnet \"%s\"." -#: utils/adt/pg_locale.c:1412 +#: utils/adt/pg_locale.c:1582 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "jämförelser (collations) med olika collate- och ctype-värden stöds inte på denna plattform" -#: utils/adt/pg_locale.c:1421 +#: utils/adt/pg_locale.c:1591 #, c-format msgid "collation provider LIBC is not supported on this platform" msgstr "leverantören LIBC för jämförelse (collation) stöds inte på denna plattform" -#: utils/adt/pg_locale.c:1433 +#: utils/adt/pg_locale.c:1603 #, c-format msgid "collations with different collate and ctype values are not supported by ICU" msgstr "jämförelser (collation) med olika collate- och ctype-värden stöds inte av ICU" -#: utils/adt/pg_locale.c:1439 utils/adt/pg_locale.c:1526 -#: utils/adt/pg_locale.c:1799 +#: utils/adt/pg_locale.c:1609 utils/adt/pg_locale.c:1696 +#: utils/adt/pg_locale.c:1969 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "kunde inte öppna jämförelse för lokal \"%s\": %s" -#: utils/adt/pg_locale.c:1453 +#: utils/adt/pg_locale.c:1623 #, c-format msgid "ICU is not supported in this build" msgstr "ICU stöds inte av detta bygge" -#: utils/adt/pg_locale.c:1454 +#: utils/adt/pg_locale.c:1624 #, c-format msgid "You need to rebuild PostgreSQL using --with-icu." msgstr "Du behöver bygga om PostgreSQL med --with-icu." -#: utils/adt/pg_locale.c:1474 +#: utils/adt/pg_locale.c:1644 #, c-format msgid "collation \"%s\" has no actual version, but a version was specified" msgstr "jämförelse (collation) \"%s\" har ingen version men en version angavs" -#: utils/adt/pg_locale.c:1481 +#: utils/adt/pg_locale.c:1651 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "jämförelse (collation) \"%s\" har en version som inte matchar" -#: utils/adt/pg_locale.c:1483 +#: utils/adt/pg_locale.c:1653 #, c-format msgid "The collation in the database was created using version %s, but the operating system provides version %s." msgstr "Jämförelsen (collation) i databasen har skapats med version %s men operativsystemet har version %s." -#: utils/adt/pg_locale.c:1486 +#: utils/adt/pg_locale.c:1656 #, c-format msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." msgstr "Bygg om alla objekt som påverkas av denna jämförelse (collation) och kör ALTER COLLATION %s REFRESH VERSION eller bygg PostgreSQL med rätt bibliotekversion." -#: utils/adt/pg_locale.c:1577 +#: utils/adt/pg_locale.c:1747 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "kunde inte hitta jämförelseversion (collation) för lokal \"%s\": felkod %lu" -#: utils/adt/pg_locale.c:1614 +#: utils/adt/pg_locale.c:1784 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "kodning \"%s\" stöds inte av ICU" -#: utils/adt/pg_locale.c:1621 +#: utils/adt/pg_locale.c:1791 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "kunde inte öppna ICU-konverterare för kodning \"%s\": %s" -#: utils/adt/pg_locale.c:1652 utils/adt/pg_locale.c:1661 -#: utils/adt/pg_locale.c:1690 utils/adt/pg_locale.c:1700 +#: utils/adt/pg_locale.c:1822 utils/adt/pg_locale.c:1831 +#: utils/adt/pg_locale.c:1860 utils/adt/pg_locale.c:1870 #, c-format msgid "%s failed: %s" msgstr "%s misslyckades: %s" -#: utils/adt/pg_locale.c:1972 +#: utils/adt/pg_locale.c:2142 #, c-format msgid "invalid multibyte character for locale" msgstr "ogiltigt multibyte-tecken för lokalen" -#: utils/adt/pg_locale.c:1973 +#: utils/adt/pg_locale.c:2143 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "Serverns LC_CTYPE-lokal är troligen inkompatibel med databasens teckenkodning." @@ -23465,8 +23487,8 @@ msgstr "mer än en funktion med namn %s" msgid "more than one operator named %s" msgstr "mer än en operator med namn %s" -#: utils/adt/regproc.c:697 utils/adt/regproc.c:738 utils/adt/regproc.c:2017 -#: utils/adt/ruleutils.c:9299 utils/adt/ruleutils.c:9468 +#: utils/adt/regproc.c:697 utils/adt/regproc.c:738 utils/adt/regproc.c:2018 +#: utils/adt/ruleutils.c:9297 utils/adt/ruleutils.c:9466 #, c-format msgid "too many arguments" msgstr "för många argument" @@ -23476,105 +23498,105 @@ msgstr "för många argument" msgid "Provide two argument types for operator." msgstr "Ange två argumenttyper för operatorn." -#: utils/adt/regproc.c:1601 utils/adt/regproc.c:1625 utils/adt/regproc.c:1726 -#: utils/adt/regproc.c:1750 utils/adt/regproc.c:1852 utils/adt/regproc.c:1857 +#: utils/adt/regproc.c:1602 utils/adt/regproc.c:1626 utils/adt/regproc.c:1727 +#: utils/adt/regproc.c:1751 utils/adt/regproc.c:1853 utils/adt/regproc.c:1858 #: utils/adt/varlena.c:3642 utils/adt/varlena.c:3647 #, c-format msgid "invalid name syntax" msgstr "ogiltig namnsyntax" -#: utils/adt/regproc.c:1915 +#: utils/adt/regproc.c:1916 #, c-format msgid "expected a left parenthesis" msgstr "förväntade en vänsterparentes" -#: utils/adt/regproc.c:1931 +#: utils/adt/regproc.c:1932 #, c-format msgid "expected a right parenthesis" msgstr "förväntade en högreparentes" -#: utils/adt/regproc.c:1950 +#: utils/adt/regproc.c:1951 #, c-format msgid "expected a type name" msgstr "förväntade ett typnamn" -#: utils/adt/regproc.c:1982 +#: utils/adt/regproc.c:1983 #, c-format msgid "improper type name" msgstr "olämpligt typnamn" -#: utils/adt/ri_triggers.c:296 utils/adt/ri_triggers.c:1532 -#: utils/adt/ri_triggers.c:2460 +#: utils/adt/ri_triggers.c:296 utils/adt/ri_triggers.c:1537 +#: utils/adt/ri_triggers.c:2470 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "insert eller update på tabell \"%s\" bryter mot främmande nyckel-villkoret \"%s\"" -#: utils/adt/ri_triggers.c:299 utils/adt/ri_triggers.c:1535 +#: utils/adt/ri_triggers.c:299 utils/adt/ri_triggers.c:1540 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL tillåter inte att man blandar null och icke-null-värden." -#: utils/adt/ri_triggers.c:1930 +#: utils/adt/ri_triggers.c:1940 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "funktionen \"%s\" måste köras för INSERT" -#: utils/adt/ri_triggers.c:1936 +#: utils/adt/ri_triggers.c:1946 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "funktionen \"%s\" måste köras för UPDATE" -#: utils/adt/ri_triggers.c:1942 +#: utils/adt/ri_triggers.c:1952 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "funktionen \"%s\" måste köras för DELETE" -#: utils/adt/ri_triggers.c:1965 +#: utils/adt/ri_triggers.c:1975 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "ingen pg_constraint-post för utlösare \"%s\" på tabell \"%s\"" -#: utils/adt/ri_triggers.c:1967 +#: utils/adt/ri_triggers.c:1977 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "Ta bort denna utlösare för referensiell integritet och dess kollegor, gör sen ALTER TABLE ADD CONSTRAINT." -#: utils/adt/ri_triggers.c:2285 +#: utils/adt/ri_triggers.c:2295 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "referentiell integritetsfråga på \"%s\" från villkor \"%s\" på \"%s\" gav oväntat resultat" -#: utils/adt/ri_triggers.c:2289 +#: utils/adt/ri_triggers.c:2299 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Detta beror troligen på att en regel har skrivit om frågan." -#: utils/adt/ri_triggers.c:2450 +#: utils/adt/ri_triggers.c:2460 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "borttagning av partition \"%s\" bryter mot främmande nyckel-villkoret \"%s\"" -#: utils/adt/ri_triggers.c:2453 utils/adt/ri_triggers.c:2478 +#: utils/adt/ri_triggers.c:2463 utils/adt/ri_triggers.c:2488 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "Nyckeln (%s)=(%s) refereras fortfarande till från tabell \"%s\"." -#: utils/adt/ri_triggers.c:2464 +#: utils/adt/ri_triggers.c:2474 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "Nyckel (%s)=(%s) finns inte i tabellen \"%s\"." -#: utils/adt/ri_triggers.c:2467 +#: utils/adt/ri_triggers.c:2477 #, c-format msgid "Key is not present in table \"%s\"." msgstr "Nyckeln finns inte i tabellen \"%s\"." -#: utils/adt/ri_triggers.c:2473 +#: utils/adt/ri_triggers.c:2483 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "update eller delete på tabell \"%s\" bryter mot främmande nyckel-villkoret \"%s\" för tabell \"%s\"" -#: utils/adt/ri_triggers.c:2481 +#: utils/adt/ri_triggers.c:2491 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "Nyckel refereras fortfarande till från tabell \"%s\"." @@ -23642,125 +23664,125 @@ msgstr "kan inte jämföra record-typer med olika antal kolumner" msgid "rule \"%s\" has unsupported event type %d" msgstr "regel \"%s\" har en icke stödd händelsetyp %d" -#: utils/adt/timestamp.c:106 +#: utils/adt/timestamp.c:107 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "prceision för TIMESTAMP(%d)%s kan inte vara negativ" -#: utils/adt/timestamp.c:112 +#: utils/adt/timestamp.c:113 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "precision för TIMESTAMP(%d)%s reducerad till högsta tillåtna, %d" -#: utils/adt/timestamp.c:175 utils/adt/timestamp.c:433 utils/misc/guc.c:11911 +#: utils/adt/timestamp.c:176 utils/adt/timestamp.c:434 utils/misc/guc.c:11929 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp utanför giltigt intervall: \"%s\"" -#: utils/adt/timestamp.c:371 +#: utils/adt/timestamp.c:372 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "timestamp(%d)-precision måste vara mellan %d och %d" -#: utils/adt/timestamp.c:495 +#: utils/adt/timestamp.c:496 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "Numeriska tidszoner måste ha \"-\" eller \"+\" som sitt första tecken." -#: utils/adt/timestamp.c:508 +#: utils/adt/timestamp.c:509 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "numerisk tidszon \"%s\" utanför giltigt intervall" -#: utils/adt/timestamp.c:610 utils/adt/timestamp.c:620 -#: utils/adt/timestamp.c:628 +#: utils/adt/timestamp.c:601 utils/adt/timestamp.c:611 +#: utils/adt/timestamp.c:619 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestamp utanför giltigt intervall: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:729 +#: utils/adt/timestamp.c:720 #, c-format msgid "timestamp cannot be NaN" msgstr "timestamp kan inte vara NaN" -#: utils/adt/timestamp.c:747 utils/adt/timestamp.c:759 +#: utils/adt/timestamp.c:738 utils/adt/timestamp.c:750 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "timestamp utanför giltigt intervall: \"%g\"" -#: utils/adt/timestamp.c:944 utils/adt/timestamp.c:1518 -#: utils/adt/timestamp.c:1951 utils/adt/timestamp.c:3049 -#: utils/adt/timestamp.c:3054 utils/adt/timestamp.c:3059 -#: utils/adt/timestamp.c:3109 utils/adt/timestamp.c:3116 -#: utils/adt/timestamp.c:3123 utils/adt/timestamp.c:3143 -#: utils/adt/timestamp.c:3150 utils/adt/timestamp.c:3157 -#: utils/adt/timestamp.c:3187 utils/adt/timestamp.c:3195 -#: utils/adt/timestamp.c:3239 utils/adt/timestamp.c:3666 -#: utils/adt/timestamp.c:3791 utils/adt/timestamp.c:4251 +#: utils/adt/timestamp.c:935 utils/adt/timestamp.c:1509 +#: utils/adt/timestamp.c:1944 utils/adt/timestamp.c:3021 +#: utils/adt/timestamp.c:3026 utils/adt/timestamp.c:3031 +#: utils/adt/timestamp.c:3081 utils/adt/timestamp.c:3088 +#: utils/adt/timestamp.c:3095 utils/adt/timestamp.c:3115 +#: utils/adt/timestamp.c:3122 utils/adt/timestamp.c:3129 +#: utils/adt/timestamp.c:3159 utils/adt/timestamp.c:3167 +#: utils/adt/timestamp.c:3211 utils/adt/timestamp.c:3638 +#: utils/adt/timestamp.c:3763 utils/adt/timestamp.c:4223 #, c-format msgid "interval out of range" msgstr "interval utanför giltigt intervall" -#: utils/adt/timestamp.c:1071 utils/adt/timestamp.c:1104 +#: utils/adt/timestamp.c:1062 utils/adt/timestamp.c:1095 #, c-format msgid "invalid INTERVAL type modifier" msgstr "ogitligt modifierare för typen INTERVAL" -#: utils/adt/timestamp.c:1087 +#: utils/adt/timestamp.c:1078 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "INTERVAL(%d)-precision kan inte vara negativ" -#: utils/adt/timestamp.c:1093 +#: utils/adt/timestamp.c:1084 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "INTERVAL(%d)-precision reducerad till maximalt tillåtna, %d" -#: utils/adt/timestamp.c:1475 +#: utils/adt/timestamp.c:1466 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "interval(%d)-precision måste vara mellan %d och %d" -#: utils/adt/timestamp.c:2650 +#: utils/adt/timestamp.c:2622 #, c-format msgid "cannot subtract infinite timestamps" msgstr "kan inte subtrahera oändliga tider (timestamp)" -#: utils/adt/timestamp.c:3919 utils/adt/timestamp.c:4512 -#: utils/adt/timestamp.c:4674 utils/adt/timestamp.c:4695 +#: utils/adt/timestamp.c:3891 utils/adt/timestamp.c:4484 +#: utils/adt/timestamp.c:4646 utils/adt/timestamp.c:4667 #, c-format msgid "timestamp units \"%s\" not supported" msgstr "timestamp-enhet \"%s\" stöds inte" -#: utils/adt/timestamp.c:3933 utils/adt/timestamp.c:4466 -#: utils/adt/timestamp.c:4705 +#: utils/adt/timestamp.c:3905 utils/adt/timestamp.c:4438 +#: utils/adt/timestamp.c:4677 #, c-format msgid "timestamp units \"%s\" not recognized" msgstr "timestamp-enhet \"%s\" känns inte igen" -#: utils/adt/timestamp.c:4063 utils/adt/timestamp.c:4507 -#: utils/adt/timestamp.c:4870 utils/adt/timestamp.c:4892 +#: utils/adt/timestamp.c:4035 utils/adt/timestamp.c:4479 +#: utils/adt/timestamp.c:4842 utils/adt/timestamp.c:4864 #, c-format msgid "timestamp with time zone units \"%s\" not supported" msgstr "timestamp with time zone, enhet \"%s\" stöds inte" -#: utils/adt/timestamp.c:4080 utils/adt/timestamp.c:4461 -#: utils/adt/timestamp.c:4901 +#: utils/adt/timestamp.c:4052 utils/adt/timestamp.c:4433 +#: utils/adt/timestamp.c:4873 #, c-format msgid "timestamp with time zone units \"%s\" not recognized" msgstr "timestamp with time zone, enhet \"%s\" känns inte igen" -#: utils/adt/timestamp.c:4238 +#: utils/adt/timestamp.c:4210 #, c-format msgid "interval units \"%s\" not supported because months usually have fractional weeks" msgstr "intervallenhet \"%s\" stöds inte då månader typiskt har veckor på bråkform" -#: utils/adt/timestamp.c:4244 utils/adt/timestamp.c:4995 +#: utils/adt/timestamp.c:4216 utils/adt/timestamp.c:4967 #, c-format msgid "interval units \"%s\" not supported" msgstr "intervallenhet \"%s\" stöds inte" -#: utils/adt/timestamp.c:4260 utils/adt/timestamp.c:5018 +#: utils/adt/timestamp.c:4232 utils/adt/timestamp.c:4990 #, c-format msgid "interval units \"%s\" not recognized" msgstr "intervallenhet \"%s\" känns inte igen" @@ -23861,7 +23883,7 @@ msgstr "array med vikter är för kort" msgid "array of weight must not contain nulls" msgstr "array med vikter får inte innehålla null-värden" -#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:868 +#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:872 #, c-format msgid "weight out of range" msgstr "vikten är utanför giltigt intervall" @@ -23876,58 +23898,58 @@ msgstr "ordet är för långt (%ld byte, max %ld byte)" msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "strängen är för lång för tsvector (%ld byte, max %ld byte)" -#: utils/adt/tsvector_op.c:336 utils/adt/tsvector_op.c:616 -#: utils/adt/tsvector_op.c:778 +#: utils/adt/tsvector_op.c:328 utils/adt/tsvector_op.c:608 +#: utils/adt/tsvector_op.c:770 #, c-format msgid "lexeme array may not contain nulls" msgstr "lexem-array:en får inte innehålla null-värden" -#: utils/adt/tsvector_op.c:848 +#: utils/adt/tsvector_op.c:840 #, c-format msgid "weight array may not contain nulls" msgstr "vikt-array:en får inte innehålla null-värden" -#: utils/adt/tsvector_op.c:872 +#: utils/adt/tsvector_op.c:864 #, c-format msgid "unrecognized weight: \"%c\"" msgstr "okänd vikt: \"%c\"" -#: utils/adt/tsvector_op.c:2362 +#: utils/adt/tsvector_op.c:2414 #, c-format msgid "ts_stat query must return one tsvector column" msgstr "ts_stat-frågan måste returnera en tsvector-kolumn" -#: utils/adt/tsvector_op.c:2551 +#: utils/adt/tsvector_op.c:2603 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "tsvector-kolumnen \"%s\" existerar inte" -#: utils/adt/tsvector_op.c:2558 +#: utils/adt/tsvector_op.c:2610 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "kolumnen \"%s\" är inte av typen tsvector" -#: utils/adt/tsvector_op.c:2570 +#: utils/adt/tsvector_op.c:2622 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "konfigurationskolumnen \"%s\" existerar inte" -#: utils/adt/tsvector_op.c:2576 +#: utils/adt/tsvector_op.c:2628 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "kolumn \"%s\" har inte regconfig-typ" -#: utils/adt/tsvector_op.c:2583 +#: utils/adt/tsvector_op.c:2635 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "konfigurationskolumn \"%s\" får inte vara null" -#: utils/adt/tsvector_op.c:2596 +#: utils/adt/tsvector_op.c:2648 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "Textsökkonfigurationsnamn \"%s\" måste vara angivet med schema" -#: utils/adt/tsvector_op.c:2621 +#: utils/adt/tsvector_op.c:2673 #, c-format msgid "column \"%s\" is not of a character type" msgstr "kolumnen \"%s\" är inte av typen character" @@ -24308,23 +24330,23 @@ msgstr "sokvägsfilter för kolumn får inte vara tomma strängen" msgid "more than one value returned by column XPath expression" msgstr "mer än ett värde returnerades från kolumns XPath-uttryck" -#: utils/cache/lsyscache.c:966 +#: utils/cache/lsyscache.c:1015 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "typomvandling från typ %s till typ %s finns inte" -#: utils/cache/lsyscache.c:2715 utils/cache/lsyscache.c:2748 -#: utils/cache/lsyscache.c:2781 utils/cache/lsyscache.c:2814 +#: utils/cache/lsyscache.c:2764 utils/cache/lsyscache.c:2797 +#: utils/cache/lsyscache.c:2830 utils/cache/lsyscache.c:2863 #, c-format msgid "type %s is only a shell" msgstr "typ %s är bara en shell-typ" -#: utils/cache/lsyscache.c:2720 +#: utils/cache/lsyscache.c:2769 #, c-format msgid "no input function available for type %s" msgstr "ingen inläsningsfunktion finns för typ %s" -#: utils/cache/lsyscache.c:2753 +#: utils/cache/lsyscache.c:2802 #, c-format msgid "no output function available for type %s" msgstr "ingen utmatningsfunktion finns för typ %s" @@ -24339,17 +24361,17 @@ msgstr "operatorklass \"%s\" för accessmetod %s saknar supportfunktion %d för msgid "cached plan must not change result type" msgstr "cache:ad plan får inte ändra resultattyp" -#: utils/cache/relcache.c:6070 +#: utils/cache/relcache.c:6078 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "kunde inte skapa initieringsfil \"%s\" för relations-cache: %m" -#: utils/cache/relcache.c:6072 +#: utils/cache/relcache.c:6080 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Fortsätter ändå, trots att något är fel." -#: utils/cache/relcache.c:6394 +#: utils/cache/relcache.c:6402 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "kunde inte ta bort cache-fil \"%s\": %m" @@ -24429,20 +24451,20 @@ msgstr "FRÅGA: " msgid "CONTEXT: " msgstr "KONTEXT: " -#: utils/error/elog.c:2944 -msgid "BACKTRACE: " -msgstr "BACKTRACE: " - -#: utils/error/elog.c:2954 +#: utils/error/elog.c:2947 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "PLATS: %s, %s:%d\n" -#: utils/error/elog.c:2961 +#: utils/error/elog.c:2954 #, c-format msgid "LOCATION: %s:%d\n" msgstr "PLATS: %s:%d\n" +#: utils/error/elog.c:2961 +msgid "BACKTRACE: " +msgstr "BACKTRACE: " + #: utils/error/elog.c:2975 msgid "STATEMENT: " msgstr "SATS: " @@ -24580,8 +24602,8 @@ msgstr "okänd API-version %d rapporterad av infofunktion \"%s\"" #: utils/fmgr/fmgr.c:2003 #, c-format -msgid "opclass options info is absent in function call context" -msgstr "opclass-flagginfo saknas i funktionens anropskontext" +msgid "operator class options info is absent in function call context" +msgstr "info om operatorklassflaggor saknas i funktionens anropskontext" #: utils/fmgr/fmgr.c:2070 #, c-format @@ -24643,7 +24665,7 @@ msgstr "datakatalogen \"%s\" har felaktiga rättigheter" msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Rättigheterna skall vara u=rwx (0700) eller u=rwx,g=rx (0750)." -#: utils/init/miscinit.c:615 utils/misc/guc.c:7149 +#: utils/init/miscinit.c:615 utils/misc/guc.c:7139 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "kan inte sätta parameter \"%s\" från en säkerhetsbegränsad operation" @@ -24744,7 +24766,7 @@ msgstr "Filen verkar ha lämnats kvar av misstag, men kan inte tas bort. Ta bort msgid "could not write lock file \"%s\": %m" msgstr "kunde inte skriva låsfil \"%s\": %m" -#: utils/init/miscinit.c:1327 utils/init/miscinit.c:1469 utils/misc/guc.c:10048 +#: utils/init/miscinit.c:1327 utils/init/miscinit.c:1469 utils/misc/guc.c:10066 #, c-format msgid "could not read from file \"%s\": %m" msgstr "kunde inte läsa från fil \"%s\": %m" @@ -25257,1629 +25279,1621 @@ msgid "Enables the planner's use of hashed aggregation plans." msgstr "Aktiverar planerarens användning av planer med hash-aggregering" #: utils/misc/guc.c:1015 -msgid "Enables the planner's use of hashed aggregation plans that are expected to exceed work_mem." -msgstr "Aktiverar planerarens användning av planer med hash-aggregering som förväntas överskrida work_mem." - -#: utils/misc/guc.c:1025 -msgid "Enables the planner's use of hashed aggregation plans for groupingsets when the total size of the hash tables is expected to exceed work_mem." -msgstr "Aktiverar planerarens användning av planer med hash-aggregering för grupperingsmängder när totala storleken på hash-tabellerna förväntas överstiga work_mem." - -#: utils/misc/guc.c:1035 msgid "Enables the planner's use of materialization." msgstr "Aktiverar planerarens användning av materialisering." -#: utils/misc/guc.c:1045 +#: utils/misc/guc.c:1025 msgid "Enables the planner's use of nested-loop join plans." msgstr "Aktiverar planerarens användning av planer med nästlad loop-join," -#: utils/misc/guc.c:1055 +#: utils/misc/guc.c:1035 msgid "Enables the planner's use of merge join plans." msgstr "Aktiverar planerarens användning av merge-join-planer." -#: utils/misc/guc.c:1065 +#: utils/misc/guc.c:1045 msgid "Enables the planner's use of hash join plans." msgstr "Aktiverar planerarens användning av hash-join-planer." -#: utils/misc/guc.c:1075 +#: utils/misc/guc.c:1055 msgid "Enables the planner's use of gather merge plans." msgstr "Aktiverar planerarens användning av planer med gather-merge." -#: utils/misc/guc.c:1085 +#: utils/misc/guc.c:1065 msgid "Enables partitionwise join." msgstr "Aktiverar join per partition." -#: utils/misc/guc.c:1095 +#: utils/misc/guc.c:1075 msgid "Enables partitionwise aggregation and grouping." msgstr "Aktiverar aggregering och gruppering per partition." -#: utils/misc/guc.c:1105 +#: utils/misc/guc.c:1085 msgid "Enables the planner's use of parallel append plans." msgstr "Aktiverar planerarens användning av planer med parallell append." -#: utils/misc/guc.c:1115 +#: utils/misc/guc.c:1095 msgid "Enables the planner's use of parallel hash plans." msgstr "Aktiverar planerarens användning av planer med parallell hash." -#: utils/misc/guc.c:1125 +#: utils/misc/guc.c:1105 msgid "Enables plan-time and run-time partition pruning." msgstr "Aktiverar partitionsbeskärning vid planering och vid körning." -#: utils/misc/guc.c:1126 +#: utils/misc/guc.c:1106 msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." msgstr "Tillåter att frågeplaneraren och exekveraren jämför partitionsgränser med villkor i frågan för att bestämma vilka partitioner som skall skannas." -#: utils/misc/guc.c:1137 +#: utils/misc/guc.c:1117 msgid "Enables genetic query optimization." msgstr "Aktiverar genetisk frågeoptimering." -#: utils/misc/guc.c:1138 +#: utils/misc/guc.c:1118 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Denna algoritm försöker utföra planering utan fullständig sökning." -#: utils/misc/guc.c:1149 +#: utils/misc/guc.c:1129 msgid "Shows whether the current user is a superuser." msgstr "Visar om den aktuella användaren är en superanvändare." -#: utils/misc/guc.c:1159 +#: utils/misc/guc.c:1139 msgid "Enables advertising the server via Bonjour." msgstr "Aktiverar annonsering av servern via Bonjour." -#: utils/misc/guc.c:1168 +#: utils/misc/guc.c:1148 msgid "Collects transaction commit time." msgstr "Samlar in tid för transaktions-commit." -#: utils/misc/guc.c:1177 +#: utils/misc/guc.c:1157 msgid "Enables SSL connections." msgstr "Tillåter SSL-anslutningar." -#: utils/misc/guc.c:1186 +#: utils/misc/guc.c:1166 msgid "Also use ssl_passphrase_command during server reload." msgstr "Använd ssl_passphrase_command även vid server-reload." -#: utils/misc/guc.c:1195 +#: utils/misc/guc.c:1175 msgid "Give priority to server ciphersuite order." msgstr "Ge prioritet till serverns ordning av kryptometoder." -#: utils/misc/guc.c:1204 +#: utils/misc/guc.c:1184 msgid "Forces synchronization of updates to disk." msgstr "Tvingar synkronisering av uppdateringar till disk." -#: utils/misc/guc.c:1205 +#: utils/misc/guc.c:1185 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "Servern kommer använda systemanropet fsync() på ett antal platser för att se till att uppdateringar fysiskt skrivs till disk. Detta för att säkerställa att databasklustret kan starta i ett konsistent tillstånd efter en operativsystemkrash eller hårdvarukrash." -#: utils/misc/guc.c:1216 +#: utils/misc/guc.c:1196 msgid "Continues processing after a checksum failure." msgstr "Fortsätter processande efter checksummefel." -#: utils/misc/guc.c:1217 +#: utils/misc/guc.c:1197 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "Normalt vid detektion av checksummefel så rapporterar PostgreSQL felet och avbryter den aktuella transaktionen. Sätts ignore_checksum_failure till true så kommer systemet hoppa över felet (men fortfarande rapportera en varning). Detta beteende kan orsaka krasher eller andra allvarliga problem. Detta påverkas bara om checksummor är påslaget." -#: utils/misc/guc.c:1231 +#: utils/misc/guc.c:1211 msgid "Continues processing past damaged page headers." msgstr "Fortsätter processande efter trasiga sidhuvuden." -#: utils/misc/guc.c:1232 +#: utils/misc/guc.c:1212 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "Normalt vid detektion av trasiga sidhuvuden så rapporterar PostgreSQL felet och avbryter den aktuella transaktionen. Sätts zero_damaged_pages till true så kommer systemet istället rapportera en varning, nollställa den trasiga sidan samt fortsätta processa. Detta kommer förstöra data (alla rader i den trasiga sidan)." -#: utils/misc/guc.c:1245 +#: utils/misc/guc.c:1225 msgid "Continues recovery after an invalid pages failure." msgstr "Fortsätter återställande efter fel på grund av ogiltiga sidor." -#: utils/misc/guc.c:1246 +#: utils/misc/guc.c:1226 msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." msgstr "Normalt vid detektion av WAL-poster som refererar till ogiltiga sidor under återställning så kommer PostgreSQL att signalera ett fel på PANIC-nivå och avbryta återställningen. Sätts ignore_invalid_pages till true så kommer systemet hoppa över ogiltiga sidreferenser i WAL-poster (men fortfarande rapportera en varning) och fortsätta återställningen. Detta beteende kan orsaka krasher, dataförluster, sprida eller dölja korruption eller ge andra allvarliga problem. Detta påverkar bara under återställning eller i standby-läge." -#: utils/misc/guc.c:1264 +#: utils/misc/guc.c:1244 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "Skriver fulla sidor till WAL första gången de ändras efter en checkpoint." -#: utils/misc/guc.c:1265 +#: utils/misc/guc.c:1245 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "En sidskrivning som sker vid en operativsystemkrash kan bli delvis utskriven till disk. Under återställning så kommer radändringar i WAL:en inte vara tillräckligt för att återställa datan. Denna flagga skriver ut sidor först efter att en WAL-checkpoint gjorts vilket gör att full återställning kan ske." -#: utils/misc/guc.c:1278 +#: utils/misc/guc.c:1258 msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications." msgstr "Skriver fulla sidor till WAL första gången de ändras efter en checkpoint, även för ickekritiska ändringar." -#: utils/misc/guc.c:1288 +#: utils/misc/guc.c:1268 msgid "Compresses full-page writes written in WAL file." msgstr "Komprimerar skrivning av hela sidor som skrivs i WAL-fil." -#: utils/misc/guc.c:1298 +#: utils/misc/guc.c:1278 msgid "Writes zeroes to new WAL files before first use." msgstr "Skriv nollor till nya WAL-filer innan första användning." -#: utils/misc/guc.c:1308 +#: utils/misc/guc.c:1288 msgid "Recycles WAL files by renaming them." msgstr "Återanvänder WAL-filer genom att byta namn på dem." -#: utils/misc/guc.c:1318 +#: utils/misc/guc.c:1298 msgid "Logs each checkpoint." msgstr "Logga varje checkpoint." -#: utils/misc/guc.c:1327 +#: utils/misc/guc.c:1307 msgid "Logs each successful connection." msgstr "Logga varje lyckad anslutning." -#: utils/misc/guc.c:1336 +#: utils/misc/guc.c:1316 msgid "Logs end of a session, including duration." msgstr "Loggar slut på session, inklusive längden." -#: utils/misc/guc.c:1345 +#: utils/misc/guc.c:1325 msgid "Logs each replication command." msgstr "Loggar alla replikeringskommanon." -#: utils/misc/guc.c:1354 +#: utils/misc/guc.c:1334 msgid "Shows whether the running server has assertion checks enabled." msgstr "Visar om den körande servern har assert-kontroller påslagna." -#: utils/misc/guc.c:1369 +#: utils/misc/guc.c:1349 msgid "Terminate session on any error." msgstr "Avbryt sessionen vid fel." -#: utils/misc/guc.c:1378 +#: utils/misc/guc.c:1358 msgid "Reinitialize server after backend crash." msgstr "Återinitiera servern efter en backend-krash." -#: utils/misc/guc.c:1388 +#: utils/misc/guc.c:1368 msgid "Logs the duration of each completed SQL statement." msgstr "Loggar tiden för varje avslutad SQL-sats." -#: utils/misc/guc.c:1397 +#: utils/misc/guc.c:1377 msgid "Logs each query's parse tree." msgstr "Loggar alla frågors parse-träd." -#: utils/misc/guc.c:1406 +#: utils/misc/guc.c:1386 msgid "Logs each query's rewritten parse tree." msgstr "Logga alla frågors omskrivet parse-träd." -#: utils/misc/guc.c:1415 +#: utils/misc/guc.c:1395 msgid "Logs each query's execution plan." msgstr "Logga alla frågors körningsplan." -#: utils/misc/guc.c:1424 +#: utils/misc/guc.c:1404 msgid "Indents parse and plan tree displays." msgstr "Indentera parse och planeringsträdutskrifter" -#: utils/misc/guc.c:1433 +#: utils/misc/guc.c:1413 msgid "Writes parser performance statistics to the server log." msgstr "Skriver parserns prestandastatistik till serverloggen." -#: utils/misc/guc.c:1442 +#: utils/misc/guc.c:1422 msgid "Writes planner performance statistics to the server log." msgstr "Skriver planerarens prestandastatistik till serverloggen." -#: utils/misc/guc.c:1451 +#: utils/misc/guc.c:1431 msgid "Writes executor performance statistics to the server log." msgstr "Skrivere exekverarens prestandastatistik till serverloggen." -#: utils/misc/guc.c:1460 +#: utils/misc/guc.c:1440 msgid "Writes cumulative performance statistics to the server log." msgstr "Skriver ackumulerad prestandastatistik till serverloggen." -#: utils/misc/guc.c:1470 +#: utils/misc/guc.c:1450 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Loggar statisik för användning av systemresurser (minne och CPU) för olika B-tree-operationer." -#: utils/misc/guc.c:1482 +#: utils/misc/guc.c:1462 msgid "Collects information about executing commands." msgstr "Samla information om körda kommanon." -#: utils/misc/guc.c:1483 +#: utils/misc/guc.c:1463 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "Slår på insamling av information om det nu körande kommandot för varje session, tillsammans med klockslaget när det kommandot började köra." -#: utils/misc/guc.c:1493 +#: utils/misc/guc.c:1473 msgid "Collects statistics on database activity." msgstr "Samla in statistik om databasaktivitet." -#: utils/misc/guc.c:1502 +#: utils/misc/guc.c:1482 msgid "Collects timing statistics for database I/O activity." msgstr "Samla in timingstatistik om databasens I/O-aktivitet." -#: utils/misc/guc.c:1512 +#: utils/misc/guc.c:1492 msgid "Updates the process title to show the active SQL command." msgstr "Uppdaterar processtitel till att visa aktivt SQL-kommando." -#: utils/misc/guc.c:1513 +#: utils/misc/guc.c:1493 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "Slår på uppdatering av processtiteln varje gång ett nytt SQL-kommando tas emot av servern." -#: utils/misc/guc.c:1526 +#: utils/misc/guc.c:1506 msgid "Starts the autovacuum subprocess." msgstr "Starta autovacuum-barnprocess." -#: utils/misc/guc.c:1536 +#: utils/misc/guc.c:1516 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Skapar debug-output för LISTEN och NOTIFY." -#: utils/misc/guc.c:1548 +#: utils/misc/guc.c:1528 msgid "Emits information about lock usage." msgstr "Visar information om låsanvändning." -#: utils/misc/guc.c:1558 +#: utils/misc/guc.c:1538 msgid "Emits information about user lock usage." msgstr "Visar information om användares låsanvändning." -#: utils/misc/guc.c:1568 +#: utils/misc/guc.c:1548 msgid "Emits information about lightweight lock usage." msgstr "Visar information om lättviktig låsanvändning." -#: utils/misc/guc.c:1578 +#: utils/misc/guc.c:1558 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Dumpar information om alla aktuella lås när en deadlock-timeout sker." -#: utils/misc/guc.c:1590 +#: utils/misc/guc.c:1570 msgid "Logs long lock waits." msgstr "Loggar långa väntetider på lås." -#: utils/misc/guc.c:1600 +#: utils/misc/guc.c:1580 msgid "Logs the host name in the connection logs." msgstr "Loggar hostnamnet i anslutningsloggen." -#: utils/misc/guc.c:1601 +#: utils/misc/guc.c:1581 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "Som standard visar anslutningsloggen bara IP-adressen för den anslutande värden. Om du vill att värdnamnet skall visas så kan du slå på detta men beroende på hur uppsättningen av namnuppslag är gjored så kan detta ha en markant prestandapåverkan." -#: utils/misc/guc.c:1612 +#: utils/misc/guc.c:1592 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Tolkar \"uttryck=NULL\" som \"uttryck IS NULL\"." -#: utils/misc/guc.c:1613 +#: utils/misc/guc.c:1593 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "Om påslagen så kommer uttryck på formen uttryck = NULL (eller NULL = uttryck) att behandlas som uttryck IS NULL, det vill säga returnera true om uttryck evalueras till värdet null eller evalueras till false annars. Det korrekta beteendet för uttryck = NULL är att alltid returnera null (okänt)." -#: utils/misc/guc.c:1625 +#: utils/misc/guc.c:1605 msgid "Enables per-database user names." msgstr "Aktiverar användarnamn per databas." -#: utils/misc/guc.c:1634 +#: utils/misc/guc.c:1614 msgid "Sets the default read-only status of new transactions." msgstr "Ställer in standard read-only-status för nya transaktioner." -#: utils/misc/guc.c:1643 +#: utils/misc/guc.c:1623 msgid "Sets the current transaction's read-only status." msgstr "Ställer in nuvarande transaktions read-only-status." -#: utils/misc/guc.c:1653 +#: utils/misc/guc.c:1633 msgid "Sets the default deferrable status of new transactions." msgstr "Ställer in standard deferrable-status för nya transaktioner." -#: utils/misc/guc.c:1662 +#: utils/misc/guc.c:1642 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "Bestämmer om en serialiserbar transaktion för läsning kommer fördröjas tills den kan köras utan serialiseringsfel." -#: utils/misc/guc.c:1672 +#: utils/misc/guc.c:1652 msgid "Enable row security." msgstr "Aktiverar radsäkerhet." -#: utils/misc/guc.c:1673 +#: utils/misc/guc.c:1653 msgid "When enabled, row security will be applied to all users." msgstr "Om aktiv så kommer radsäkerhet användas för alla användare." -#: utils/misc/guc.c:1681 +#: utils/misc/guc.c:1661 msgid "Check function bodies during CREATE FUNCTION." msgstr "Kontrollera funktionskroppen vid CREATE FUNCTION." -#: utils/misc/guc.c:1690 +#: utils/misc/guc.c:1670 msgid "Enable input of NULL elements in arrays." msgstr "Aktiverar inmatning av NULL-element i arrayer." -#: utils/misc/guc.c:1691 +#: utils/misc/guc.c:1671 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "Om påslagen så kommer ej citerade NULL i indatavärden för en array betyda värdet null, annars tolkas det bokstavligt." -#: utils/misc/guc.c:1707 +#: utils/misc/guc.c:1687 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS stöds inte längre; denna kan bara vara false." -#: utils/misc/guc.c:1717 +#: utils/misc/guc.c:1697 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "Starta en subprocess för att fånga output från stderr och/eller csv-loggar till loggfiler." -#: utils/misc/guc.c:1726 +#: utils/misc/guc.c:1706 msgid "Truncate existing log files of same name during log rotation." msgstr "Trunkera existerande loggfiler med samma namn under loggrotering." -#: utils/misc/guc.c:1737 +#: utils/misc/guc.c:1717 msgid "Emit information about resource usage in sorting." msgstr "Skicka ut information om resursanvändning vid sortering." -#: utils/misc/guc.c:1751 +#: utils/misc/guc.c:1731 msgid "Generate debugging output for synchronized scanning." msgstr "Generera debug-output för synkroniserad skanning." -#: utils/misc/guc.c:1766 +#: utils/misc/guc.c:1746 msgid "Enable bounded sorting using heap sort." msgstr "Slår på begränsad sortering med heap-sort." -#: utils/misc/guc.c:1779 +#: utils/misc/guc.c:1759 msgid "Emit WAL-related debugging output." msgstr "Skicka ut WAL-relaterad debug-data." -#: utils/misc/guc.c:1791 +#: utils/misc/guc.c:1771 msgid "Datetimes are integer based." msgstr "Datetime är heltalsbaserad" -#: utils/misc/guc.c:1802 +#: utils/misc/guc.c:1782 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "Anger hurvida Kerberos- och GSSAPI-användarnamn skall tolkas skiftlägesokänsligt." -#: utils/misc/guc.c:1812 +#: utils/misc/guc.c:1792 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Varna om backåtstreck-escape i vanliga stränglitteraler." -#: utils/misc/guc.c:1822 +#: utils/misc/guc.c:1802 msgid "Causes '...' strings to treat backslashes literally." msgstr "Gör att '...'-stängar tolkar bakåtstreck bokstavligt." -#: utils/misc/guc.c:1833 +#: utils/misc/guc.c:1813 msgid "Enable synchronized sequential scans." msgstr "Slå på synkroniserad sekvensiell skanning." -#: utils/misc/guc.c:1843 +#: utils/misc/guc.c:1823 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Anger hurvida man skall inkludera eller exkludera transaktion för återställningmål." -#: utils/misc/guc.c:1853 +#: utils/misc/guc.c:1833 msgid "Allows connections and queries during recovery." msgstr "Tillåt anslutningar och frågor under återställning." -#: utils/misc/guc.c:1863 +#: utils/misc/guc.c:1843 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Tillåter feedback från en hot standby till primären för att undvika frågekonflikter." -#: utils/misc/guc.c:1873 +#: utils/misc/guc.c:1853 msgid "Allows modifications of the structure of system tables." msgstr "Tillåter strukturförändringar av systemtabeller." -#: utils/misc/guc.c:1884 +#: utils/misc/guc.c:1864 msgid "Disables reading from system indexes." msgstr "Stänger av läsning från systemindex." -#: utils/misc/guc.c:1885 +#: utils/misc/guc.c:1865 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "Det förhindrar inte uppdatering av index så det är helt säkert att använda. Det värsta som kan hända är att det är långsamt." -#: utils/misc/guc.c:1896 +#: utils/misc/guc.c:1876 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Slår på bakåtkompabilitetsläge för rättighetskontroller på stora objekt." -#: utils/misc/guc.c:1897 +#: utils/misc/guc.c:1877 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "Hoppar över rättighetskontroller vid läsning eller modifiering av stora objekt, för kompabilitet med PostgreSQL-releaser innan 9.0." -#: utils/misc/guc.c:1907 +#: utils/misc/guc.c:1887 msgid "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." msgstr "Skicka ut varning för konstruktioner som ändrat semantik sedan PostgreSQL 9.4." -#: utils/misc/guc.c:1917 +#: utils/misc/guc.c:1897 msgid "When generating SQL fragments, quote all identifiers." msgstr "När SQL-fragment genereras så citera alla identifierare." -#: utils/misc/guc.c:1927 +#: utils/misc/guc.c:1907 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Visar om datachecksummor är påslagna för detta kluster." -#: utils/misc/guc.c:1938 +#: utils/misc/guc.c:1918 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Lägg till sekvensnummer till syslog-meddelanden för att undvika att duplikat tas bort." -#: utils/misc/guc.c:1948 +#: utils/misc/guc.c:1928 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "Dela meddelanden som skickas till syslog till egna rader och begränsa till 1024 byte." -#: utils/misc/guc.c:1958 +#: utils/misc/guc.c:1938 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Bestämmer om \"Gather\" och \"Gather Merge\" också exekverar subplaner." -#: utils/misc/guc.c:1959 +#: utils/misc/guc.c:1939 msgid "Should gather nodes also run subplans, or just gather tuples?" msgstr "Skall gather-noder också exekvera subplaner eller bara samla in tupler?" -#: utils/misc/guc.c:1969 +#: utils/misc/guc.c:1949 msgid "Allow JIT compilation." msgstr "Tillåt JIT-kompilering." -#: utils/misc/guc.c:1980 +#: utils/misc/guc.c:1960 msgid "Register JIT compiled function with debugger." msgstr "Registrera JIT-kompilerad funktion hos debuggern." -#: utils/misc/guc.c:1997 +#: utils/misc/guc.c:1977 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "Skriv ut LLVM-bitkod för att möjliggöra JIT-debuggning." -#: utils/misc/guc.c:2008 +#: utils/misc/guc.c:1988 msgid "Allow JIT compilation of expressions." msgstr "Tillåt JIT-kompilering av uttryck." -#: utils/misc/guc.c:2019 +#: utils/misc/guc.c:1999 msgid "Register JIT compiled function with perf profiler." msgstr "Registrera JIT-kompilerad funktion med perf-profilerare." -#: utils/misc/guc.c:2036 +#: utils/misc/guc.c:2016 msgid "Allow JIT compilation of tuple deforming." msgstr "Tillåt JIT-kompilering av tupeluppdelning." -#: utils/misc/guc.c:2047 +#: utils/misc/guc.c:2027 msgid "Whether to continue running after a failure to sync data files." msgstr "Hurvida vi skall fortsätta efter ett fel att synka datafiler." -#: utils/misc/guc.c:2056 +#: utils/misc/guc.c:2036 msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." msgstr "Anger hurvida en WAL-mottagare skall skapa en temporär replikeringsslot om ingen permanent slot är konfigurerad." -#: utils/misc/guc.c:2074 +#: utils/misc/guc.c:2054 msgid "Forces a switch to the next WAL file if a new file has not been started within N seconds." msgstr "Tvingar byte till nästa WAL-fil om en ny fil inte har startats inom N sekunder." -#: utils/misc/guc.c:2085 +#: utils/misc/guc.c:2065 msgid "Waits N seconds on connection startup after authentication." msgstr "Väntar N sekunder vid anslutningsstart efter authentisering." -#: utils/misc/guc.c:2086 utils/misc/guc.c:2644 +#: utils/misc/guc.c:2066 utils/misc/guc.c:2624 msgid "This allows attaching a debugger to the process." msgstr "Detta tillåter att man ansluter en debugger till processen." -#: utils/misc/guc.c:2095 +#: utils/misc/guc.c:2075 msgid "Sets the default statistics target." msgstr "Sätter standardstatistikmålet." -#: utils/misc/guc.c:2096 +#: utils/misc/guc.c:2076 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "Detta gäller tabellkolumner som inte har ett kolumnspecifikt mål satt med ALTER TABLE SET STATISTICS." -#: utils/misc/guc.c:2105 +#: utils/misc/guc.c:2085 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Sätter en övre gräns på FROM-listans storlek där subfrågor slås isär." -#: utils/misc/guc.c:2107 +#: utils/misc/guc.c:2087 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "Planeraren kommer slå samman subfrågor med yttre frågor om den resulterande FROM-listan inte har fler än så här många poster." -#: utils/misc/guc.c:2118 +#: utils/misc/guc.c:2098 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Sätter en övre gräns på FROM-listans storlek där JOIN-konstruktioner plattas till." -#: utils/misc/guc.c:2120 +#: utils/misc/guc.c:2100 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "Planeraren kommer platta till explicita JOIN-konstruktioner till listor av FROM-poster när resultatet blir en lista med max så här många poster." -#: utils/misc/guc.c:2131 +#: utils/misc/guc.c:2111 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Sätter en undre gräns på antal FROM-poster när GEQO används." -#: utils/misc/guc.c:2141 +#: utils/misc/guc.c:2121 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: effort används som standard för andra GEQO-parametrar." -#: utils/misc/guc.c:2151 +#: utils/misc/guc.c:2131 msgid "GEQO: number of individuals in the population." msgstr "GEQO: antal individer i populationen." -#: utils/misc/guc.c:2152 utils/misc/guc.c:2162 +#: utils/misc/guc.c:2132 utils/misc/guc.c:2142 msgid "Zero selects a suitable default value." msgstr "Noll väljer ett lämpligt standardvärde." -#: utils/misc/guc.c:2161 +#: utils/misc/guc.c:2141 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: antal iterationer för algoritmen." -#: utils/misc/guc.c:2173 +#: utils/misc/guc.c:2153 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Sätter tiden som väntas på ett lås innan kontroll av deadlock sker." -#: utils/misc/guc.c:2184 +#: utils/misc/guc.c:2164 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Sätter maximal fördröjning innan frågor avbryts när en \"hot standby\"-server processar arkiverad WAL-data." -#: utils/misc/guc.c:2195 +#: utils/misc/guc.c:2175 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "Sätter maximal fördröjning innan frågor avbryts när en \"hot stanby\"-server processar strömmad WAL-data." -#: utils/misc/guc.c:2206 +#: utils/misc/guc.c:2186 msgid "Sets the minimum delay for applying changes during recovery." msgstr "Ställer in minsta fördröjning för att applicera ändringar under återställning." -#: utils/misc/guc.c:2217 +#: utils/misc/guc.c:2197 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "Sätter maximalt intervall mellan statusrapporter till skickande server från WAL-mottagaren." -#: utils/misc/guc.c:2228 +#: utils/misc/guc.c:2208 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "Sätter maximal väntetid för att ta emot data från skickande server." -#: utils/misc/guc.c:2239 +#: utils/misc/guc.c:2219 msgid "Sets the maximum number of concurrent connections." msgstr "Sätter maximalt antal samtidiga anslutningar." -#: utils/misc/guc.c:2250 +#: utils/misc/guc.c:2230 msgid "Sets the number of connection slots reserved for superusers." msgstr "Sätter antalet anslutningsslottar som reserverats för superanvändare." -#: utils/misc/guc.c:2264 +#: utils/misc/guc.c:2244 msgid "Sets the number of shared memory buffers used by the server." msgstr "Sätter antalet delade minnesbuffrar som används av servern." -#: utils/misc/guc.c:2275 +#: utils/misc/guc.c:2255 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Sätter maximalt antal temporära buffertar som används per session." -#: utils/misc/guc.c:2286 +#: utils/misc/guc.c:2266 msgid "Sets the TCP port the server listens on." msgstr "Sätter TCP-porten som servern lyssnar på." -#: utils/misc/guc.c:2296 +#: utils/misc/guc.c:2276 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Sätter accessrättigheter för Unix-domainuttag (socket)." -#: utils/misc/guc.c:2297 +#: utils/misc/guc.c:2277 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Unixdomänuttag (socket) använder unix vanliga filsystemsrättigheter. Parametervärdet förväntas vara en numerisk rättighetsangivelse så som accepteras av systemanropen chmod och umask. (För att använda det vanliga oktala formatet så måste numret börja med 0 (noll).)" -#: utils/misc/guc.c:2311 +#: utils/misc/guc.c:2291 msgid "Sets the file permissions for log files." msgstr "Sätter filrättigheter för loggfiler." -#: utils/misc/guc.c:2312 +#: utils/misc/guc.c:2292 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Parametervärdet förväntas vara en numerisk rättighetsangivelse så som accepteras av systemanropen chmod och umask. (För att använda det vanliga oktala formatet så måste numret börja med 0 (noll).)" -#: utils/misc/guc.c:2326 +#: utils/misc/guc.c:2306 msgid "Mode of the data directory." msgstr "Läge för datakatalog." -#: utils/misc/guc.c:2327 +#: utils/misc/guc.c:2307 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Parametervärdet är en numerisk rättighetsangivelse så som accepteras av systemanropen chmod och umask. (För att använda det vanliga oktala formatet så måste numret börja med 0 (noll).)" -#: utils/misc/guc.c:2340 +#: utils/misc/guc.c:2320 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Sätter maximalt minne som används för frågors arbetsyta." -#: utils/misc/guc.c:2341 +#: utils/misc/guc.c:2321 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "Så här mycket minne kan användas av varje intern sorteringsoperation resp. hash-tabell innan temporära filer på disk börjar användas." -#: utils/misc/guc.c:2353 +#: utils/misc/guc.c:2333 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Sätter det maximala minnet som får användas för underhållsoperationer." -#: utils/misc/guc.c:2354 +#: utils/misc/guc.c:2334 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Detta inkluderar operationer som VACUUM och CREATE INDEX." -#: utils/misc/guc.c:2364 +#: utils/misc/guc.c:2344 msgid "Sets the maximum memory to be used for logical decoding." msgstr "Sätter det maximala minnet som får användas för logisk avkodning." -#: utils/misc/guc.c:2365 +#: utils/misc/guc.c:2345 msgid "This much memory can be used by each internal reorder buffer before spilling to disk." msgstr "Så här mycket minne kan användas av varje intern omsorteringsbuffer innan data spills till disk." -#: utils/misc/guc.c:2381 +#: utils/misc/guc.c:2361 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Sätter det maximala stackdjupet, i kilobyte." -#: utils/misc/guc.c:2392 +#: utils/misc/guc.c:2372 msgid "Limits the total size of all temporary files used by each process." msgstr "Begränsar den totala storleken för alla temporära filer som används i en process." -#: utils/misc/guc.c:2393 +#: utils/misc/guc.c:2373 msgid "-1 means no limit." msgstr "-1 betyder ingen gräns." -#: utils/misc/guc.c:2403 +#: utils/misc/guc.c:2383 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Vacuum-kostnad för en sida som hittas i buffer-cache:n." -#: utils/misc/guc.c:2413 +#: utils/misc/guc.c:2393 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Vacuum-kostnad för en sida som inte hittas i buffer-cache:n." -#: utils/misc/guc.c:2423 +#: utils/misc/guc.c:2403 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Vacuum-kostnad för sidor som smutsats ner vid vacuum." -#: utils/misc/guc.c:2433 +#: utils/misc/guc.c:2413 msgid "Vacuum cost amount available before napping." msgstr "Vacuum-kostnad kvar innan pausande." -#: utils/misc/guc.c:2443 +#: utils/misc/guc.c:2423 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Vacuum-kostnad kvar innan pausande, för autovacuum." -#: utils/misc/guc.c:2453 +#: utils/misc/guc.c:2433 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "Sätter det maximala antalet filer som en serverprocess kan ha öppna på en gång." -#: utils/misc/guc.c:2466 +#: utils/misc/guc.c:2446 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Sätter det maximala antalet förberedda transaktioner man får ha på en gång." -#: utils/misc/guc.c:2477 +#: utils/misc/guc.c:2457 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Sätter minsta tabell-OID för spårning av lås." -#: utils/misc/guc.c:2478 +#: utils/misc/guc.c:2458 msgid "Is used to avoid output on system tables." msgstr "Används för att undvika utdata för systemtabeller." -#: utils/misc/guc.c:2487 +#: utils/misc/guc.c:2467 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Sätter OID för tabellen med ovillkorlig låsspårning." -#: utils/misc/guc.c:2499 +#: utils/misc/guc.c:2479 msgid "Sets the maximum allowed duration of any statement." msgstr "Sätter den maximala tiden som en sats får köra." -#: utils/misc/guc.c:2500 utils/misc/guc.c:2511 utils/misc/guc.c:2522 +#: utils/misc/guc.c:2480 utils/misc/guc.c:2491 utils/misc/guc.c:2502 msgid "A value of 0 turns off the timeout." msgstr "Värdet 0 stänger av timeout:en." -#: utils/misc/guc.c:2510 +#: utils/misc/guc.c:2490 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Sätter den maximala tiden som man får vänta på ett lås." -#: utils/misc/guc.c:2521 +#: utils/misc/guc.c:2501 msgid "Sets the maximum allowed duration of any idling transaction." msgstr "Sätter den maximala tiden som en transaktion tillås vara \"idle\"." -#: utils/misc/guc.c:2532 +#: utils/misc/guc.c:2512 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Minimal ålder där VACUUM skall frysa en tabellrad." -#: utils/misc/guc.c:2542 +#: utils/misc/guc.c:2522 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Ålder där VACUUM skall skanna hela tabellen för att frysa tupler." -#: utils/misc/guc.c:2552 +#: utils/misc/guc.c:2532 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Minsta ålder där VACUUM skall frysa en MultiXactId i en tabellrad." -#: utils/misc/guc.c:2562 +#: utils/misc/guc.c:2542 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Multixact-ålder där VACUUM skall skanna hela tabellen för att frysa tupler." -#: utils/misc/guc.c:2572 +#: utils/misc/guc.c:2552 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Antalet transaktioner som VACUUM och HOT-städning skall fördröjas (om någon)." -#: utils/misc/guc.c:2585 +#: utils/misc/guc.c:2565 msgid "Sets the maximum number of locks per transaction." msgstr "Sätter det maximala antalet lås per transaktion." -#: utils/misc/guc.c:2586 +#: utils/misc/guc.c:2566 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "Den delade låstabellen har storlek efter antagandet att maximalt max_locks_per_transaction * max_connections olika objekt kommer behöva låsas vid en tidpunkt." -#: utils/misc/guc.c:2597 +#: utils/misc/guc.c:2577 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Sätter det maximala antalet predikatlås per transaktion." -#: utils/misc/guc.c:2598 +#: utils/misc/guc.c:2578 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "Den delade predikatlåstabellen har storlek efter antagandet att maximalt max_pred_locks_per_transaction * max_connections olika objekt kommer behöva låsas vid en tidpunkt." -#: utils/misc/guc.c:2609 +#: utils/misc/guc.c:2589 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "Sätter det maximala antalet predikatlåsta sidor och tupler per relation." -#: utils/misc/guc.c:2610 +#: utils/misc/guc.c:2590 msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." msgstr "Om fler än detta totala antal sidor och tupler för samma relation är låsta av en anslutning så ersätts dessa lås med ett lås på relationen." -#: utils/misc/guc.c:2620 +#: utils/misc/guc.c:2600 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Sätter det maximala antalet predikatlåsta tupler per sida." -#: utils/misc/guc.c:2621 +#: utils/misc/guc.c:2601 msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." msgstr "Om fler än detta antal tupler på samma sida är låsta av en anslutning så ersätts dessa lås med ett lås på sidan." -#: utils/misc/guc.c:2631 +#: utils/misc/guc.c:2611 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Sätter maximalt tillåten tid att slutföra klientautentisering." -#: utils/misc/guc.c:2643 +#: utils/misc/guc.c:2623 msgid "Waits N seconds on connection startup before authentication." msgstr "Väntar N sekunder efter anslutning innan autentisering." -#: utils/misc/guc.c:2654 -msgid "Sets the number of WAL files held for standby servers." -msgstr "Sätter antal WAL-filer som sparas för standby-servrar." +#: utils/misc/guc.c:2634 +msgid "Sets the size of WAL files held for standby servers." +msgstr "Sätter storlek på WAL-filer som sparas för standby-servrar." -#: utils/misc/guc.c:2664 +#: utils/misc/guc.c:2645 msgid "Sets the minimum size to shrink the WAL to." msgstr "Sätter maximal storlek som WAL kan krympas till." -#: utils/misc/guc.c:2676 +#: utils/misc/guc.c:2657 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Sätter WAL-storlek som utlöser en checkpoint." -#: utils/misc/guc.c:2688 +#: utils/misc/guc.c:2669 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Sätter maximal tid mellan två automatiska WAL-checkpoint:er." -#: utils/misc/guc.c:2699 +#: utils/misc/guc.c:2680 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "Slår på varning om checkpoint-segment fylls oftare än det här." -#: utils/misc/guc.c:2701 +#: utils/misc/guc.c:2682 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "Skriv ett meddelande i serverloggen om checkpoint:er som orsakas av fulla checkpoint-segmentfiler händer oftare än detta antal sekunder. Noll stänger av varningen." -#: utils/misc/guc.c:2713 utils/misc/guc.c:2929 utils/misc/guc.c:2976 +#: utils/misc/guc.c:2694 utils/misc/guc.c:2910 utils/misc/guc.c:2957 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "Antal sidor varefter tidigare skrivningar flush:as till disk." -#: utils/misc/guc.c:2724 +#: utils/misc/guc.c:2705 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Sätter antal buffrar för disksidor i delat minne för WAL." -#: utils/misc/guc.c:2735 +#: utils/misc/guc.c:2716 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Tid mellan WAL-flush:ar utförda i WAL-skrivaren." -#: utils/misc/guc.c:2746 +#: utils/misc/guc.c:2727 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Mängden WAL utskrivna av WAL-skrivaren som utlöser en flush." -#: utils/misc/guc.c:2757 +#: utils/misc/guc.c:2738 msgid "Size of new file to fsync instead of writing WAL." msgstr "Storlek på ny fil som skall fsync:as istället för att skriva till WAL." -#: utils/misc/guc.c:2768 +#: utils/misc/guc.c:2749 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "Sätter maximalt antal samtidigt körande WAL-sändarprocesser." -#: utils/misc/guc.c:2779 +#: utils/misc/guc.c:2760 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Sätter maximalt antal samtidigt definierade replikeringsslottar." -#: utils/misc/guc.c:2789 +#: utils/misc/guc.c:2770 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "Sätter maximalt WAL-storlek som kan reserveras av replikeringsslottar." -#: utils/misc/guc.c:2790 +#: utils/misc/guc.c:2771 msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." msgstr "Replikeringsslottar kommer markeras som misslyckade och segment kommer släppas till borttagning eller återanvändning när så här mycket plats används av WAL på disk." -#: utils/misc/guc.c:2802 +#: utils/misc/guc.c:2783 msgid "Sets the maximum time to wait for WAL replication." msgstr "Sätter maximal tid att vänta på WAL-replikering." -#: utils/misc/guc.c:2813 +#: utils/misc/guc.c:2794 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Sätter fördröjning i mikrosekunder mellan transaktions-commit ochj flush:ning av WAL till disk." -#: utils/misc/guc.c:2825 +#: utils/misc/guc.c:2806 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "Sätter minsta antal samtida öppna transaktioner innan vi utför en commit_delay." -#: utils/misc/guc.c:2836 +#: utils/misc/guc.c:2817 msgid "Sets the number of digits displayed for floating-point values." msgstr "Sätter antal siffror som visas för flyttalsvärden." -#: utils/misc/guc.c:2837 +#: utils/misc/guc.c:2818 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." msgstr "Detta påverkar real, double precision och geometriska datatyper. Noll eller negativt parametervärde läggs till standard antal siffror (FLT_DIG eller DBL_DIG respektive). Ett värde större än noll väljer ett exakt utmatningsläge." -#: utils/misc/guc.c:2849 +#: utils/misc/guc.c:2830 msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." msgstr "Sätter minimal körtid där ett urval av långsammare satser kommer loggas. Urvalet bestämms av log_statement_sample_rate." -#: utils/misc/guc.c:2852 -msgid "Zero log a sample of all queries. -1 turns this feature off." +#: utils/misc/guc.c:2833 +msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "Noll loggar ett urval som inkluderar alla frågor. -1 stänger av denna funktion." -#: utils/misc/guc.c:2862 +#: utils/misc/guc.c:2843 msgid "Sets the minimum execution time above which all statements will be logged." msgstr "Sätter minimal körtid där alla långsammare satser kommer loggas." -#: utils/misc/guc.c:2864 +#: utils/misc/guc.c:2845 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Noll skriver ut alla frågor. -1 stänger av denna finess." -#: utils/misc/guc.c:2874 +#: utils/misc/guc.c:2855 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "Sätter minimal körtid där långsammare autovacuum-operationer kommer loggas." -#: utils/misc/guc.c:2876 +#: utils/misc/guc.c:2857 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Noll skriver ut alla operationer. -1 stänger av autovacuum." -#: utils/misc/guc.c:2886 +#: utils/misc/guc.c:2867 msgid "When logging statements, limit logged parameter values to first N bytes." msgstr "När satser loggas så begränsa loggade parametervärden till de första N byten." -#: utils/misc/guc.c:2887 utils/misc/guc.c:2898 +#: utils/misc/guc.c:2868 utils/misc/guc.c:2879 msgid "-1 to print values in full." msgstr "-1 för att skriva ut hela värden." -#: utils/misc/guc.c:2897 +#: utils/misc/guc.c:2878 msgid "When reporting an error, limit logged parameter values to first N bytes." msgstr "Vid rapportering av fel så begränsa loggade parametervärden till de första N byten." -#: utils/misc/guc.c:2908 +#: utils/misc/guc.c:2889 msgid "Background writer sleep time between rounds." msgstr "Bakgrundsskrivarens sleep-tid mellan körningar." -#: utils/misc/guc.c:2919 +#: utils/misc/guc.c:2900 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Bakgrundsskrivarens maximala antal LRU-sidor som flush:as per omgång." -#: utils/misc/guc.c:2942 +#: utils/misc/guc.c:2923 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Antal samtidiga förfrågningar som kan effektivt kan hanteras av disksystemet." -#: utils/misc/guc.c:2943 +#: utils/misc/guc.c:2924 msgid "For RAID arrays, this should be approximately the number of drive spindles in the array." msgstr "För RAID-array:er så borde det vara ungerfär så många som antalet spindlar i array:en." -#: utils/misc/guc.c:2960 +#: utils/misc/guc.c:2941 msgid "A variant of effective_io_concurrency that is used for maintenance work." msgstr "En variant av effective_io_concurrency som används för underhållsarbete." -#: utils/misc/guc.c:2989 +#: utils/misc/guc.c:2970 msgid "Maximum number of concurrent worker processes." msgstr "Maximalt antal samtidiga arbetsprocesser." -#: utils/misc/guc.c:3001 +#: utils/misc/guc.c:2982 msgid "Maximum number of logical replication worker processes." msgstr "Maximalt antal arbetsprocesser för logisk replikering." -#: utils/misc/guc.c:3013 +#: utils/misc/guc.c:2994 msgid "Maximum number of table synchronization workers per subscription." msgstr "Maximalt antal tabellsynkroniseringsarbetare per prenumeration." -#: utils/misc/guc.c:3023 +#: utils/misc/guc.c:3004 msgid "Automatic log file rotation will occur after N minutes." msgstr "Automatisk loggfilsrotering kommer ske efter N minuter." -#: utils/misc/guc.c:3034 +#: utils/misc/guc.c:3015 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "Automatisk loggfilsrotering kommer ske efter N kilobyte." -#: utils/misc/guc.c:3045 +#: utils/misc/guc.c:3026 msgid "Shows the maximum number of function arguments." msgstr "Visar maximalt antal funktionsargument." -#: utils/misc/guc.c:3056 +#: utils/misc/guc.c:3037 msgid "Shows the maximum number of index keys." msgstr "Visar maximalt antal indexnycklar." -#: utils/misc/guc.c:3067 +#: utils/misc/guc.c:3048 msgid "Shows the maximum identifier length." msgstr "Visar den maximala identifierarlängden." -#: utils/misc/guc.c:3078 +#: utils/misc/guc.c:3059 msgid "Shows the size of a disk block." msgstr "Visar storleken på ett diskblock." -#: utils/misc/guc.c:3089 +#: utils/misc/guc.c:3070 msgid "Shows the number of pages per disk file." msgstr "Visar antal sidor per diskfil." -#: utils/misc/guc.c:3100 +#: utils/misc/guc.c:3081 msgid "Shows the block size in the write ahead log." msgstr "Visar blockstorleken i the write-ahead-loggen." -#: utils/misc/guc.c:3111 +#: utils/misc/guc.c:3092 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Sätter väntetiden innan databasen försöker ta emot WAL efter ett misslyckat försök." -#: utils/misc/guc.c:3123 +#: utils/misc/guc.c:3104 msgid "Shows the size of write ahead log segments." msgstr "Visar storleken på write-ahead-log-segment." -#: utils/misc/guc.c:3136 +#: utils/misc/guc.c:3117 msgid "Time to sleep between autovacuum runs." msgstr "Tid att sova mellan körningar av autovacuum." -#: utils/misc/guc.c:3146 +#: utils/misc/guc.c:3127 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Minst antal tupel-uppdateringar eller raderingar innan vacuum." -#: utils/misc/guc.c:3155 -msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums" +#: utils/misc/guc.c:3136 +msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." msgstr "Minsta antal tupel-insert innnan vacuum eller -1 för att stänga av insert-vacuum." -#: utils/misc/guc.c:3164 +#: utils/misc/guc.c:3145 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Minsta antal tupel-insert, -update eller -delete innan analyze." -#: utils/misc/guc.c:3174 +#: utils/misc/guc.c:3155 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Ålder då autovacuum körs på en tabell för att förhindra wrapaound på transaktions-ID." -#: utils/misc/guc.c:3185 +#: utils/misc/guc.c:3166 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Ålder på multixact då autovacuum körs på en tabell för att förhindra wrapaound på multixact." -#: utils/misc/guc.c:3195 +#: utils/misc/guc.c:3176 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Sätter maximalt antal samtidigt körande arbetsprocesser för autovacuum." -#: utils/misc/guc.c:3205 +#: utils/misc/guc.c:3186 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "Sätter maximalt antal parallella processer per underhållsoperation." -#: utils/misc/guc.c:3215 +#: utils/misc/guc.c:3196 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Sätter maximalt antal parallella processer per exekveringsnod." -#: utils/misc/guc.c:3226 +#: utils/misc/guc.c:3207 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "Sätter maximalt antal parallella arbetare som kan vara aktiva på en gång." -#: utils/misc/guc.c:3237 +#: utils/misc/guc.c:3218 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Sätter maximalt minne som kan användas av varje arbetsprocess för autovacuum." -#: utils/misc/guc.c:3248 +#: utils/misc/guc.c:3229 msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." msgstr "Tid innan ett snapshot är för gammalt för att läsa sidor som ändrats efter snapshot:en tagits." -#: utils/misc/guc.c:3249 +#: utils/misc/guc.c:3230 msgid "A value of -1 disables this feature." msgstr "Värdet -1 stänger av denna funktion." -#: utils/misc/guc.c:3259 +#: utils/misc/guc.c:3240 msgid "Time between issuing TCP keepalives." msgstr "Tid mellan skickande av TCP-keepalive." -#: utils/misc/guc.c:3260 utils/misc/guc.c:3271 utils/misc/guc.c:3395 +#: utils/misc/guc.c:3241 utils/misc/guc.c:3252 utils/misc/guc.c:3376 msgid "A value of 0 uses the system default." msgstr "Värdet 0 anger systemets standardvärde." -#: utils/misc/guc.c:3270 +#: utils/misc/guc.c:3251 msgid "Time between TCP keepalive retransmits." msgstr "Tid mellan omsändning av TCP-keepalive." -#: utils/misc/guc.c:3281 +#: utils/misc/guc.c:3262 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "SSL-förhandling stöds inte längre; denna kan bara vara 0." -#: utils/misc/guc.c:3292 +#: utils/misc/guc.c:3273 msgid "Maximum number of TCP keepalive retransmits." msgstr "Maximalt antal omsändningar av TCP-keepalive." -#: utils/misc/guc.c:3293 +#: utils/misc/guc.c:3274 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "Detta bestämmer antalet keepalive-omsändingar i rad som kan försvinna innan en anslutning anses vara död. Värdet 0 betyder systemstandardvärdet." -#: utils/misc/guc.c:3304 +#: utils/misc/guc.c:3285 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Sätter maximalt tillåtna resultat för exakt sökning med GIN." -#: utils/misc/guc.c:3315 +#: utils/misc/guc.c:3296 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Sätter planerarens antagande om totala storleken på datacachen." -#: utils/misc/guc.c:3316 +#: utils/misc/guc.c:3297 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "Det är totala storleken på cachen (kernelcache och delade buffertar) som användas för PostgreSQLs datafiler. Det mäts i disksidor som normalt är 8 kb styck." -#: utils/misc/guc.c:3327 +#: utils/misc/guc.c:3308 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Sätter minsta mängd tabelldata för en parallell skanning." -#: utils/misc/guc.c:3328 +#: utils/misc/guc.c:3309 msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." msgstr "Om planeraren beräknar att den kommer läsa för få tabellsidor för att nå denna gräns så kommer den inte försöka med en parallell skanning." -#: utils/misc/guc.c:3338 +#: utils/misc/guc.c:3319 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Anger minimala mängden indexdata för en parallell scan." -#: utils/misc/guc.c:3339 +#: utils/misc/guc.c:3320 msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." msgstr "Om planeraren beräknar att den kommer läsa för få indexsidor för att nå denna gräns så kommer den inte försöka med en parallell skanning." -#: utils/misc/guc.c:3350 +#: utils/misc/guc.c:3331 msgid "Shows the server version as an integer." msgstr "Visar serverns version som ett heltal." -#: utils/misc/guc.c:3361 +#: utils/misc/guc.c:3342 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "Logga användning av temporära filer som är större än detta antal kilobyte." -#: utils/misc/guc.c:3362 +#: utils/misc/guc.c:3343 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "Noll loggar alla filer. Standard är -1 (stänger av denna finess)." -#: utils/misc/guc.c:3372 +#: utils/misc/guc.c:3353 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Ställer in storleken reserverad för pg_stat_activity.query, i byte." -#: utils/misc/guc.c:3383 +#: utils/misc/guc.c:3364 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Sätter maximal storlek på väntelistan för GIN-index." -#: utils/misc/guc.c:3394 +#: utils/misc/guc.c:3375 msgid "TCP user timeout." msgstr "Användartimeout för TCP." -#: utils/misc/guc.c:3414 +#: utils/misc/guc.c:3395 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "Ställer in planerarens estimat av kostnaden för att hämta en disksida sekvensiellt." -#: utils/misc/guc.c:3425 +#: utils/misc/guc.c:3406 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "Ställer in planerarens estimat av kostnaden för att hämta en disksida icke-sekvensiellt." -#: utils/misc/guc.c:3436 +#: utils/misc/guc.c:3417 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "Ställer in planerarens estimat av kostnaden för att processa varje tupel (rad)." -#: utils/misc/guc.c:3447 +#: utils/misc/guc.c:3428 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "Sätter planerarens kostnadsuppskattning för att processa varje indexpost under en indexskanning." -#: utils/misc/guc.c:3458 +#: utils/misc/guc.c:3439 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "Sätter planerarens kostnadsuppskattning för att processa varje operator- eller funktions-anrop." -#: utils/misc/guc.c:3469 +#: utils/misc/guc.c:3450 msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." msgstr "Sätter planerarens kostnadsuppskattning för att skicka varje tupel (rad) från en arbetare till huvud-backend:en. " -#: utils/misc/guc.c:3480 +#: utils/misc/guc.c:3461 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "Sätter planerarens kostnadsuppskattning för att starta upp en arbetsprocess för en parallell fråga." -#: utils/misc/guc.c:3492 +#: utils/misc/guc.c:3473 msgid "Perform JIT compilation if query is more expensive." msgstr "Utför JIT-kompilering om frågan är dyrare." -#: utils/misc/guc.c:3493 +#: utils/misc/guc.c:3474 msgid "-1 disables JIT compilation." msgstr "-1 stänger av JIT-kompilering." -#: utils/misc/guc.c:3503 +#: utils/misc/guc.c:3484 msgid "Optimize JITed functions if query is more expensive." msgstr "Optimera JIT-funktioner om frågan är dyrare." -#: utils/misc/guc.c:3504 +#: utils/misc/guc.c:3485 msgid "-1 disables optimization." msgstr "-1 stänger av optimering." -#: utils/misc/guc.c:3514 +#: utils/misc/guc.c:3495 msgid "Perform JIT inlining if query is more expensive." msgstr "Utför JIT-\"inlining\" om frågan är dyrare." -#: utils/misc/guc.c:3515 +#: utils/misc/guc.c:3496 msgid "-1 disables inlining." msgstr "-1 stänger av \"inlining\"" -#: utils/misc/guc.c:3525 +#: utils/misc/guc.c:3506 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Sätter planerarens uppskattning av hur stor del av markörens rader som kommer hämtas. " -#: utils/misc/guc.c:3537 +#: utils/misc/guc.c:3518 msgid "GEQO: selective pressure within the population." msgstr "GEQO: selektionstryck inom populationen." -#: utils/misc/guc.c:3548 +#: utils/misc/guc.c:3529 msgid "GEQO: seed for random path selection." msgstr "GEQO: slumptalsfrö för val av slumpad sökväg." -#: utils/misc/guc.c:3559 +#: utils/misc/guc.c:3540 +msgid "Multiple of work_mem to use for hash tables." +msgstr "Multipel av work_mem för att använda till hash-tabeller." + +#: utils/misc/guc.c:3551 msgid "Multiple of the average buffer usage to free per round." msgstr "Multipel av genomsnittlig bufferanvändning som frias per runda." -#: utils/misc/guc.c:3569 +#: utils/misc/guc.c:3561 msgid "Sets the seed for random-number generation." msgstr "Sätter fröet för slumptalsgeneratorn." -#: utils/misc/guc.c:3580 +#: utils/misc/guc.c:3572 msgid "Vacuum cost delay in milliseconds." msgstr "Städkostfördröjning i millisekunder." -#: utils/misc/guc.c:3591 +#: utils/misc/guc.c:3583 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Städkostfördröjning i millisekunder, för autovacuum." -#: utils/misc/guc.c:3602 +#: utils/misc/guc.c:3594 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Antalet tupeluppdateringar eller borttagningar innan vacuum relativt reltuples." -#: utils/misc/guc.c:3612 +#: utils/misc/guc.c:3604 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "Antal tupelinsättningar innan vacuum relativt reltuples." -#: utils/misc/guc.c:3622 +#: utils/misc/guc.c:3614 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Antalet tupelinsättningar, uppdateringar eller borttagningar innan analyze relativt reltuples." -#: utils/misc/guc.c:3632 +#: utils/misc/guc.c:3624 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "Tid lagd på att flusha nedsmutsade buffrar vid checkpoint relativt checkpoint-intervallet." -#: utils/misc/guc.c:3642 +#: utils/misc/guc.c:3634 msgid "Number of tuple inserts prior to index cleanup as a fraction of reltuples." msgstr "Antal tupelinsättningar innan indexuppstädning relativt reltuples." -#: utils/misc/guc.c:3652 +#: utils/misc/guc.c:3644 msgid "Fraction of statements exceeding log_min_duration_sample to be logged." msgstr "Bråkdel av satser som överskrider log_min_duration_sample som skall loggas." -#: utils/misc/guc.c:3653 +#: utils/misc/guc.c:3645 msgid "Use a value between 0.0 (never log) and 1.0 (always log)." msgstr "Använd ett värde mellan 0.0 (logga aldrig) och 1.0 (logga alltid)." -#: utils/misc/guc.c:3662 +#: utils/misc/guc.c:3654 msgid "Set the fraction of transactions to log for new transactions." msgstr "Ställer in bråkdel av transaktioner som skall loggas av nya transaktioner." -#: utils/misc/guc.c:3663 +#: utils/misc/guc.c:3655 msgid "Logs all statements from a fraction of transactions. Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgstr "Loggar all satser från en bråkdel av transaktionerna. Använd ett värde mellan 0.0 (logga aldrig) till 1.0 (logga all satser i alla transaktioner)." -#: utils/misc/guc.c:3683 +#: utils/misc/guc.c:3675 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Sätter shell-kommandot som kommer anropas för att arkivera en WAL-fil." -#: utils/misc/guc.c:3693 -msgid "Sets the shell command that will retrieve an archived WAL file." -msgstr "Sätter shell-kommandot som kommer få en arkiverad WAL-fil." +#: utils/misc/guc.c:3685 +msgid "Sets the shell command that will be called to retrieve an archived WAL file." +msgstr "Sätter shell-kommandot som kommer anropas för att få en arkiverad WAL-fil." -#: utils/misc/guc.c:3703 +#: utils/misc/guc.c:3695 msgid "Sets the shell command that will be executed at every restart point." msgstr "Sätter shell-kommandot som kommer anropas vid varje omstartspunkt." -#: utils/misc/guc.c:3713 +#: utils/misc/guc.c:3705 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "Sätter shell-kommandot som kommer anropas en gång i slutet av en återställning." -#: utils/misc/guc.c:3723 +#: utils/misc/guc.c:3715 msgid "Specifies the timeline to recover into." msgstr "Anger tidslinjen att återställa till." -#: utils/misc/guc.c:3733 +#: utils/misc/guc.c:3725 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "Sätt till \"immediate\" för att avsluta återställning så snart ett konsistent tillstånd uppnås." -#: utils/misc/guc.c:3742 +#: utils/misc/guc.c:3734 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "Sätter transaktions-ID som återställning kommer gå till." -#: utils/misc/guc.c:3751 +#: utils/misc/guc.c:3743 msgid "Sets the time stamp up to which recovery will proceed." msgstr "Sätter tidsstämpel som återställning kommer gå till." -#: utils/misc/guc.c:3760 +#: utils/misc/guc.c:3752 msgid "Sets the named restore point up to which recovery will proceed." msgstr "Sätter namngiven återställningspunkt som återställning kommer gå till." -#: utils/misc/guc.c:3769 +#: utils/misc/guc.c:3761 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "Sätter LSN för write-ahead-logg-position som återställning kommer få till." -#: utils/misc/guc.c:3779 +#: utils/misc/guc.c:3771 msgid "Specifies a file name whose presence ends recovery in the standby." msgstr "Anger ett filnamn vars närvaro gör att återställning avslutas i en standby." -#: utils/misc/guc.c:3789 +#: utils/misc/guc.c:3781 msgid "Sets the connection string to be used to connect to the sending server." msgstr "Sätter anslutningssträng som anvönds för att ansluta till skickande server." -#: utils/misc/guc.c:3800 +#: utils/misc/guc.c:3792 msgid "Sets the name of the replication slot to use on the sending server." msgstr "Sätter namnet på replikeringsslotten som skall användas av den skickande servern." -#: utils/misc/guc.c:3810 +#: utils/misc/guc.c:3802 msgid "Sets the client's character set encoding." msgstr "Ställer in klientens teckenkodning." -#: utils/misc/guc.c:3821 +#: utils/misc/guc.c:3813 msgid "Controls information prefixed to each log line." msgstr "Styr information prefixat till varje loggrad." -#: utils/misc/guc.c:3822 +#: utils/misc/guc.c:3814 msgid "If blank, no prefix is used." msgstr "Om tom så används inget prefix." -#: utils/misc/guc.c:3831 +#: utils/misc/guc.c:3823 msgid "Sets the time zone to use in log messages." msgstr "Sätter tidszonen som används i loggmeddelanden." -#: utils/misc/guc.c:3841 +#: utils/misc/guc.c:3833 msgid "Sets the display format for date and time values." msgstr "Sätter displayformat för datum och tidvärden." -#: utils/misc/guc.c:3842 +#: utils/misc/guc.c:3834 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Styr också tolkning av tvetydig datumindata." -#: utils/misc/guc.c:3853 +#: utils/misc/guc.c:3845 msgid "Sets the default table access method for new tables." msgstr "Ställer in standard tabellaccessmetod för nya tabeller." -#: utils/misc/guc.c:3864 +#: utils/misc/guc.c:3856 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Ställer in standard tabellutrymme där tabeller och index skapas." -#: utils/misc/guc.c:3865 +#: utils/misc/guc.c:3857 msgid "An empty string selects the database's default tablespace." msgstr "En tom sträng väljer databasens standardtabellutrymme." -#: utils/misc/guc.c:3875 +#: utils/misc/guc.c:3867 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "Ställer in tablespace för temporära tabeller och sorteringsfiler." -#: utils/misc/guc.c:3886 +#: utils/misc/guc.c:3878 msgid "Sets the path for dynamically loadable modules." msgstr "Sätter sökvägen till dynamiskt laddade moduler." -#: utils/misc/guc.c:3887 +#: utils/misc/guc.c:3879 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "Om en dynamiskt laddad modul behöver öppnas och det angivna namnet inte har en katalogkomponent (dvs, namnet inte innehåller snedstreck) så kommer systemet använda denna sökväg för filen." -#: utils/misc/guc.c:3900 +#: utils/misc/guc.c:3892 msgid "Sets the location of the Kerberos server key file." msgstr "Ställer in platsen för Kerberos servernyckelfil." -#: utils/misc/guc.c:3911 +#: utils/misc/guc.c:3903 msgid "Sets the Bonjour service name." msgstr "Sätter Bonjour-tjänstens namn." -#: utils/misc/guc.c:3923 +#: utils/misc/guc.c:3915 msgid "Shows the collation order locale." msgstr "Visar lokal för jämförelseordning." -#: utils/misc/guc.c:3934 +#: utils/misc/guc.c:3926 msgid "Shows the character classification and case conversion locale." msgstr "Visar lokal för teckenklassificering samt skiftlägeskonvertering." -#: utils/misc/guc.c:3945 +#: utils/misc/guc.c:3937 msgid "Sets the language in which messages are displayed." msgstr "Sätter språket som meddelanden visas i." -#: utils/misc/guc.c:3955 +#: utils/misc/guc.c:3947 msgid "Sets the locale for formatting monetary amounts." msgstr "Sätter lokalen för att formattera monetära belopp." -#: utils/misc/guc.c:3965 +#: utils/misc/guc.c:3957 msgid "Sets the locale for formatting numbers." msgstr "Ställer in lokalen för att formattera nummer." -#: utils/misc/guc.c:3975 +#: utils/misc/guc.c:3967 msgid "Sets the locale for formatting date and time values." msgstr "Sätter lokalen för att formattera datum och tider." -#: utils/misc/guc.c:3985 +#: utils/misc/guc.c:3977 msgid "Lists shared libraries to preload into each backend." msgstr "Listar delade bibliotek som skall förladdas i varje backend." -#: utils/misc/guc.c:3996 +#: utils/misc/guc.c:3988 msgid "Lists shared libraries to preload into server." msgstr "Listar delade bibliotek som skall förladdas i servern." -#: utils/misc/guc.c:4007 +#: utils/misc/guc.c:3999 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Listar ej priviligerade delade bibliotek som förladdas in i varje backend." -#: utils/misc/guc.c:4018 +#: utils/misc/guc.c:4010 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Sätter schemats sökordning för namn som inte är schema-prefixade." -#: utils/misc/guc.c:4030 +#: utils/misc/guc.c:4022 msgid "Sets the server (database) character set encoding." msgstr "Ställer in serverns (databasens) teckenkodning." -#: utils/misc/guc.c:4042 +#: utils/misc/guc.c:4034 msgid "Shows the server version." msgstr "Visar serverversionen" -#: utils/misc/guc.c:4054 +#: utils/misc/guc.c:4046 msgid "Sets the current role." msgstr "Ställer in den aktiva rollen." -#: utils/misc/guc.c:4066 +#: utils/misc/guc.c:4058 msgid "Sets the session user name." msgstr "Sätter sessionens användarnamn." -#: utils/misc/guc.c:4077 +#: utils/misc/guc.c:4069 msgid "Sets the destination for server log output." msgstr "Sätter serverloggens destination." -#: utils/misc/guc.c:4078 +#: utils/misc/guc.c:4070 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "Giltiga värden är kombinationer av \"stderr\", \"syslog\", \"csvlog\" och \"eventlog\", beroende på plattform." -#: utils/misc/guc.c:4089 +#: utils/misc/guc.c:4081 msgid "Sets the destination directory for log files." msgstr "Sätter destinationskatalogen för loggfiler." -#: utils/misc/guc.c:4090 +#: utils/misc/guc.c:4082 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Kan anges relativt datakatalogen eller som en absolut sökväg." -#: utils/misc/guc.c:4100 +#: utils/misc/guc.c:4092 msgid "Sets the file name pattern for log files." msgstr "Sätter filnamnsmallen för loggfiler." -#: utils/misc/guc.c:4111 +#: utils/misc/guc.c:4103 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Sätter programnamnet som används för att identifiera PostgreSQLs meddelanden i syslog." -#: utils/misc/guc.c:4122 +#: utils/misc/guc.c:4114 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "Sätter applikationsnamnet som används för att identifiera PostgreSQLs meddelanden i händelseloggen." -#: utils/misc/guc.c:4133 +#: utils/misc/guc.c:4125 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Ställer in tidszon för visande och tolkande av tidsstämplar." -#: utils/misc/guc.c:4143 +#: utils/misc/guc.c:4135 msgid "Selects a file of time zone abbreviations." msgstr "Väljer en fil för tidszonsförkortningar." -#: utils/misc/guc.c:4153 +#: utils/misc/guc.c:4145 msgid "Sets the owning group of the Unix-domain socket." msgstr "Sätter ägande grupp för Unix-domainuttaget (socket)." -#: utils/misc/guc.c:4154 +#: utils/misc/guc.c:4146 msgid "The owning user of the socket is always the user that starts the server." msgstr "Ägaren av uttaget (socker) är alltid användaren som startar servern." -#: utils/misc/guc.c:4164 +#: utils/misc/guc.c:4156 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Ställer in kataloger där Unix-domän-uttag (socket) kommer skapas." -#: utils/misc/guc.c:4179 +#: utils/misc/guc.c:4171 msgid "Sets the host name or IP address(es) to listen to." msgstr "Sätter värdnamn eller IP-adress(er) att lyssna på." -#: utils/misc/guc.c:4194 +#: utils/misc/guc.c:4186 msgid "Sets the server's data directory." msgstr "Ställer in serverns datakatalog." -#: utils/misc/guc.c:4205 +#: utils/misc/guc.c:4197 msgid "Sets the server's main configuration file." msgstr "Sätter serverns huvudkonfigurationsfil." -#: utils/misc/guc.c:4216 +#: utils/misc/guc.c:4208 msgid "Sets the server's \"hba\" configuration file." msgstr "Sätter serverns \"hba\"-konfigurationsfil." -#: utils/misc/guc.c:4227 +#: utils/misc/guc.c:4219 msgid "Sets the server's \"ident\" configuration file." msgstr "Sätter serverns \"ident\"-konfigurationsfil." -#: utils/misc/guc.c:4238 +#: utils/misc/guc.c:4230 msgid "Writes the postmaster PID to the specified file." msgstr "Skriver postmaster-PID till angiven fil." -#: utils/misc/guc.c:4249 +#: utils/misc/guc.c:4241 msgid "Name of the SSL library." msgstr "Namn på SSL-biblioteket." -#: utils/misc/guc.c:4264 +#: utils/misc/guc.c:4256 msgid "Location of the SSL server certificate file." msgstr "Plats för serverns SSL-certifikatfil." -#: utils/misc/guc.c:4274 +#: utils/misc/guc.c:4266 msgid "Location of the SSL server private key file." msgstr "Plats för serverns privata SSL-nyckelfil." -#: utils/misc/guc.c:4284 +#: utils/misc/guc.c:4276 msgid "Location of the SSL certificate authority file." msgstr "Plats för SSL-certifikats auktoritetsfil." -#: utils/misc/guc.c:4294 +#: utils/misc/guc.c:4286 msgid "Location of the SSL certificate revocation list file." msgstr "Plats för SSL-certifikats återkallningsfil." -#: utils/misc/guc.c:4304 +#: utils/misc/guc.c:4296 msgid "Writes temporary statistics files to the specified directory." msgstr "Skriver temporära statistikfiler till angiven katalog." -#: utils/misc/guc.c:4315 +#: utils/misc/guc.c:4307 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "Antalet synkrona standby och en lista med namn på potentiellt synkrona sådana." -#: utils/misc/guc.c:4326 +#: utils/misc/guc.c:4318 msgid "Sets default text search configuration." msgstr "Ställer in standard textsökkonfiguration." -#: utils/misc/guc.c:4336 +#: utils/misc/guc.c:4328 msgid "Sets the list of allowed SSL ciphers." msgstr "Ställer in listan med tillåtna SSL-krypton." -#: utils/misc/guc.c:4351 +#: utils/misc/guc.c:4343 msgid "Sets the curve to use for ECDH." msgstr "Ställer in kurvan att använda för ECDH." -#: utils/misc/guc.c:4366 +#: utils/misc/guc.c:4358 msgid "Location of the SSL DH parameters file." msgstr "Plats för SSL DH-parameterfil." -#: utils/misc/guc.c:4377 +#: utils/misc/guc.c:4369 msgid "Command to obtain passphrases for SSL." msgstr "Kommando för att hämta lösenfraser för SSL." -#: utils/misc/guc.c:4388 +#: utils/misc/guc.c:4380 msgid "Sets the application name to be reported in statistics and logs." msgstr "Sätter applikationsnamn som rapporteras i statistik och loggar." -#: utils/misc/guc.c:4399 +#: utils/misc/guc.c:4391 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Sätter namnet på klustret som inkluderas i processtiteln." -#: utils/misc/guc.c:4410 +#: utils/misc/guc.c:4402 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Sätter WAL-resurshanterare som WAL-konsistenskontoller görs med." -#: utils/misc/guc.c:4411 +#: utils/misc/guc.c:4403 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "Hela sidkopior kommer loggas för alla datablock och kontrolleras mot resultatet av en WAL-uppspelning." -#: utils/misc/guc.c:4421 +#: utils/misc/guc.c:4413 msgid "JIT provider to use." msgstr "JIT-leverantör som används." -#: utils/misc/guc.c:4432 +#: utils/misc/guc.c:4424 msgid "Log backtrace for errors in these functions." msgstr "Loggar backtrace vid fel i dessa funktioner." -#: utils/misc/guc.c:4452 +#: utils/misc/guc.c:4444 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Anger hurvida \"\\'\" tillåts i sträng-literaler." -#: utils/misc/guc.c:4462 +#: utils/misc/guc.c:4454 msgid "Sets the output format for bytea." msgstr "Ställer in output-format för bytea." -#: utils/misc/guc.c:4472 +#: utils/misc/guc.c:4464 msgid "Sets the message levels that are sent to the client." msgstr "Ställer in meddelandenivåer som skickas till klienten." -#: utils/misc/guc.c:4473 utils/misc/guc.c:4538 utils/misc/guc.c:4549 -#: utils/misc/guc.c:4625 +#: utils/misc/guc.c:4465 utils/misc/guc.c:4530 utils/misc/guc.c:4541 +#: utils/misc/guc.c:4617 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "Varje nivå inkluderar de efterföljande nivåerna. Ju senare nivå destå färre meddlanden skickas." -#: utils/misc/guc.c:4483 +#: utils/misc/guc.c:4475 msgid "Enables the planner to use constraints to optimize queries." msgstr "Slår på planerarens användning av integritetsvillkor för att optimera frågor." -#: utils/misc/guc.c:4484 +#: utils/misc/guc.c:4476 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "Tabellskanningar kommer hoppas över om dess integritetsvillkor garanterar att inga rader komma matchas av frågan." -#: utils/misc/guc.c:4495 +#: utils/misc/guc.c:4487 msgid "Sets the transaction isolation level of each new transaction." msgstr "Ställer in isolationsnivån för nya transaktioner." -#: utils/misc/guc.c:4505 +#: utils/misc/guc.c:4497 msgid "Sets the current transaction's isolation level." msgstr "Sätter den aktuella transaktionsisolationsnivån." -#: utils/misc/guc.c:4516 +#: utils/misc/guc.c:4508 msgid "Sets the display format for interval values." msgstr "Ställer in visningsformat för intervallvärden." -#: utils/misc/guc.c:4527 +#: utils/misc/guc.c:4519 msgid "Sets the verbosity of logged messages." msgstr "Ställer in pratighet för loggade meddelanden." -#: utils/misc/guc.c:4537 +#: utils/misc/guc.c:4529 msgid "Sets the message levels that are logged." msgstr "Ställer in meddelandenivåer som loggas." -#: utils/misc/guc.c:4548 +#: utils/misc/guc.c:4540 msgid "Causes all statements generating error at or above this level to be logged." msgstr "Gör att alla satser som genererar fel vid eller över denna nivå kommer loggas." -#: utils/misc/guc.c:4559 +#: utils/misc/guc.c:4551 msgid "Sets the type of statements logged." msgstr "Ställer in vilken sorts satser som loggas." -#: utils/misc/guc.c:4569 +#: utils/misc/guc.c:4561 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "Ställer in syslog-\"facility\" som används när syslog är påslagen." -#: utils/misc/guc.c:4584 +#: utils/misc/guc.c:4576 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "Sätter sessionens beteende för utlösare och omskrivningsregler." -#: utils/misc/guc.c:4594 +#: utils/misc/guc.c:4586 msgid "Sets the current transaction's synchronization level." msgstr "Ställer in den nuvarande transaktionens synkroniseringsnivå." -#: utils/misc/guc.c:4604 +#: utils/misc/guc.c:4596 msgid "Allows archiving of WAL files using archive_command." msgstr "Tillåter arkivering av WAL-filer med hjälp av archive_command." -#: utils/misc/guc.c:4614 +#: utils/misc/guc.c:4606 msgid "Sets the action to perform upon reaching the recovery target." msgstr "Sätter handling som skall utföras när återställningsmål nås." -#: utils/misc/guc.c:4624 +#: utils/misc/guc.c:4616 msgid "Enables logging of recovery-related debugging information." msgstr "Slår på loggning av återställningsrelaterad debug-information." -#: utils/misc/guc.c:4640 +#: utils/misc/guc.c:4632 msgid "Collects function-level statistics on database activity." msgstr "Samlar in statistik på funktionsnivå över databasaktivitet." -#: utils/misc/guc.c:4650 +#: utils/misc/guc.c:4642 msgid "Set the level of information written to the WAL." msgstr "Ställer in mängden information som skrivs till WAL." -#: utils/misc/guc.c:4660 +#: utils/misc/guc.c:4652 msgid "Selects the dynamic shared memory implementation used." msgstr "Väljer implementation som används för dynamiskt delat minne." -#: utils/misc/guc.c:4670 +#: utils/misc/guc.c:4662 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "Väljer implementation för delat minne som används för det delade minnets huvudregionen." -#: utils/misc/guc.c:4680 +#: utils/misc/guc.c:4672 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Väljer metod för att tvinga WAL-uppdateringar till disk." -#: utils/misc/guc.c:4690 +#: utils/misc/guc.c:4682 msgid "Sets how binary values are to be encoded in XML." msgstr "Ställer in hur binära värden kodas i XML." -#: utils/misc/guc.c:4700 +#: utils/misc/guc.c:4692 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "Anger hurvida XML-data vid implicit parsning och serialiseringsoperationer ses som dokument eller innehållsfragment." -#: utils/misc/guc.c:4711 +#: utils/misc/guc.c:4703 msgid "Use of huge pages on Linux or Windows." msgstr "Använd stora sidor på Linux resp. Windows." -#: utils/misc/guc.c:4721 +#: utils/misc/guc.c:4713 msgid "Forces use of parallel query facilities." msgstr "Tvingar användning av parallella frågefinesser." -#: utils/misc/guc.c:4722 +#: utils/misc/guc.c:4714 msgid "If possible, run query using a parallel worker and with parallel restrictions." msgstr "Om det är möjligt så kör fråga med en parallell arbetare och med parallella begränsningar." -#: utils/misc/guc.c:4732 -msgid "Encrypt passwords." -msgstr "Kryptera lösenord." +#: utils/misc/guc.c:4724 +msgid "Chooses the algorithm for encrypting passwords." +msgstr "Väljer algoritm för att kryptera lösenord." -#: utils/misc/guc.c:4733 -msgid "When a password is specified in CREATE USER or ALTER USER without writing either ENCRYPTED or UNENCRYPTED, this parameter determines whether the password is to be encrypted." -msgstr "När ett lösenord anges i CREATE USER eller ALTER USER utan man skrivit varken ENCRYPTED eller UNENCRYPTED så bestämmer denna parameter om lösenordet kommer krypteras." - -#: utils/misc/guc.c:4744 +#: utils/misc/guc.c:4734 msgid "Controls the planner's selection of custom or generic plan." msgstr "Styr planerarens användning av egendefinierad eller generell plan." -#: utils/misc/guc.c:4745 +#: utils/misc/guc.c:4735 msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." msgstr "Preparerade satser kan ha egendefinierade och generella planer och planeraren kommer försöka välja den som är bäst. Detta kan anges att övertrumfa standardbeteendet." -#: utils/misc/guc.c:4757 +#: utils/misc/guc.c:4747 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "Sätter minsta SSL/TLS-protokollversion som skall användas." -#: utils/misc/guc.c:4769 +#: utils/misc/guc.c:4759 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "Sätter högsta SSL/TLS-protokollversion som skall användas." -#: utils/misc/guc.c:5572 +#: utils/misc/guc.c:5562 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: kunde inte komma åt katalogen \"%s\": %s\n" -#: utils/misc/guc.c:5577 +#: utils/misc/guc.c:5567 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "Kör initdb eller pg_basebackup för att initiera en PostgreSQL-datakatalog.\n" -#: utils/misc/guc.c:5597 +#: utils/misc/guc.c:5587 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -26888,12 +26902,12 @@ msgstr "" "%s vet inte var servens konfigurationsfil är.\n" "Du måste ange flaggan --config-file eller -D alternativt sätta omgivningsvariabeln PGDATA.\n" -#: utils/misc/guc.c:5616 +#: utils/misc/guc.c:5606 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s: har inte åtkomst till serverns konfigureringsfil \"%s\": %s\n" -#: utils/misc/guc.c:5642 +#: utils/misc/guc.c:5632 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -26902,7 +26916,7 @@ msgstr "" "%s vet inte var databasens systemdata är.\n" "Det kan anges med \"data_directory\" i \"%s\" eller med flaggan -D alternativt genom att sätta omgivningsvariabeln PGDATA.\n" -#: utils/misc/guc.c:5690 +#: utils/misc/guc.c:5680 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -26911,7 +26925,7 @@ msgstr "" "%s vet inte var \"hba\"-konfigurationsfilen är.\n" "Detta kan anges som \"hba_file\" i \"%s\" eller med flaggan -D alternativt genom att sätta omgivningsvariabeln PGDATA.\n" -#: utils/misc/guc.c:5713 +#: utils/misc/guc.c:5703 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -26920,178 +26934,178 @@ msgstr "" "%s vet inte var \"ident\"-konfigurationsfilen är.\n" "Detta kan anges som \"ident_file\" i \"%s\" eller med flaggan -D alternativt genom att sätta omgivningsvariabeln PGDATA.\n" -#: utils/misc/guc.c:6555 +#: utils/misc/guc.c:6545 msgid "Value exceeds integer range." msgstr "Värde överskriver heltalsintervall." -#: utils/misc/guc.c:6791 +#: utils/misc/guc.c:6781 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s är utanför giltigt intervall för parameter \"%s\" (%d .. %d)" -#: utils/misc/guc.c:6827 +#: utils/misc/guc.c:6817 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s är utanför giltigt intervall för parameter \"%s\" (%g .. %g)" -#: utils/misc/guc.c:6983 utils/misc/guc.c:8350 +#: utils/misc/guc.c:6973 utils/misc/guc.c:8368 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "kan inte sätta parametrar under en parallell operation" -#: utils/misc/guc.c:6990 utils/misc/guc.c:7742 utils/misc/guc.c:7795 -#: utils/misc/guc.c:7846 utils/misc/guc.c:8179 utils/misc/guc.c:8946 -#: utils/misc/guc.c:9208 utils/misc/guc.c:10874 +#: utils/misc/guc.c:6980 utils/misc/guc.c:7760 utils/misc/guc.c:7813 +#: utils/misc/guc.c:7864 utils/misc/guc.c:8197 utils/misc/guc.c:8964 +#: utils/misc/guc.c:9226 utils/misc/guc.c:10892 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "okänd konfigurationsparameter \"%s\"" -#: utils/misc/guc.c:7005 utils/misc/guc.c:8191 +#: utils/misc/guc.c:6995 utils/misc/guc.c:8209 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "parameter \"%s\" kan inte ändras" -#: utils/misc/guc.c:7038 +#: utils/misc/guc.c:7028 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "parameter \"%s\" kan inte ändras nu" -#: utils/misc/guc.c:7056 utils/misc/guc.c:7103 utils/misc/guc.c:10890 +#: utils/misc/guc.c:7046 utils/misc/guc.c:7093 utils/misc/guc.c:10908 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "rättighet saknas för att sätta parameter \"%s\"" -#: utils/misc/guc.c:7093 +#: utils/misc/guc.c:7083 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "parameter \"%s\" kan inte ändras efter uppkopplingen startats" -#: utils/misc/guc.c:7141 +#: utils/misc/guc.c:7131 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "kan inte sätta parameter \"%s\" inom en security-definer-funktion" -#: utils/misc/guc.c:7750 utils/misc/guc.c:7800 utils/misc/guc.c:9215 +#: utils/misc/guc.c:7768 utils/misc/guc.c:7818 utils/misc/guc.c:9233 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "måste vara superanvändare eller medlem i pg_read_all_settings för att undersöka \"%s\"" -#: utils/misc/guc.c:7891 +#: utils/misc/guc.c:7909 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s tar bara ett argument" -#: utils/misc/guc.c:8139 +#: utils/misc/guc.c:8157 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "måste vara superanvändare för att köra kommandot ALTER SYSTEM" -#: utils/misc/guc.c:8224 +#: utils/misc/guc.c:8242 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "parametervärde till ALTER SYSTEM kan inte innehålla nyradstecken" -#: utils/misc/guc.c:8269 +#: utils/misc/guc.c:8287 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "kunde inte parsa innehållet i fil \"%s\"" -#: utils/misc/guc.c:8426 +#: utils/misc/guc.c:8444 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT är inte implementerat ännu" -#: utils/misc/guc.c:8510 +#: utils/misc/guc.c:8528 #, c-format msgid "SET requires parameter name" msgstr "SET kräver ett parameternamn" -#: utils/misc/guc.c:8643 +#: utils/misc/guc.c:8661 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "försök att omdefiniera parameter \"%s\"" -#: utils/misc/guc.c:10436 +#: utils/misc/guc.c:10454 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "vid sättande av parameter \"%s\" till \"%s\"" -#: utils/misc/guc.c:10504 +#: utils/misc/guc.c:10522 #, c-format msgid "parameter \"%s\" could not be set" msgstr "parameter \"%s\" kunde inte sättas" -#: utils/misc/guc.c:10594 +#: utils/misc/guc.c:10612 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "kunde inte tolka inställningen för parameter \"%s\"" -#: utils/misc/guc.c:10952 utils/misc/guc.c:10986 +#: utils/misc/guc.c:10970 utils/misc/guc.c:11004 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "ogiltigt värde för parameter \"%s\": %d" -#: utils/misc/guc.c:11020 +#: utils/misc/guc.c:11038 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "ogiltigt värde för parameter \"%s\": %g" -#: utils/misc/guc.c:11290 +#: utils/misc/guc.c:11308 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "\"temp_buffers\" kan inte ändras efter att man använt temporära tabeller i sessionen." -#: utils/misc/guc.c:11302 +#: utils/misc/guc.c:11320 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour stöds inte av detta bygge" -#: utils/misc/guc.c:11315 +#: utils/misc/guc.c:11333 #, c-format msgid "SSL is not supported by this build" msgstr "SSL stöds inte av detta bygge" -#: utils/misc/guc.c:11327 +#: utils/misc/guc.c:11345 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Kan inte slå på parameter när \"log_statement_stats\" är satt." -#: utils/misc/guc.c:11339 +#: utils/misc/guc.c:11357 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "Kan inte slå på \"log_statement_stats\" när \"log_parser_stats\", \"log_planner_stats\" eller \"log_executor_stats\" är satta." -#: utils/misc/guc.c:11569 +#: utils/misc/guc.c:11587 #, c-format msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "effective_io_concurrency måste sättas till 0 på plattformar som saknar posix_fadvise()." -#: utils/misc/guc.c:11582 +#: utils/misc/guc.c:11600 #, c-format msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "maintenance_io_concurrency måste sättas till 0 på plattformar som saknar posix_fadvise()." -#: utils/misc/guc.c:11698 +#: utils/misc/guc.c:11716 #, c-format msgid "invalid character" msgstr "ogiltigt tecken" -#: utils/misc/guc.c:11758 +#: utils/misc/guc.c:11776 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline är inte ett giltigt nummer." -#: utils/misc/guc.c:11798 +#: utils/misc/guc.c:11816 #, c-format msgid "multiple recovery targets specified" msgstr "multipla återställningsmål angivna" -#: utils/misc/guc.c:11799 +#: utils/misc/guc.c:11817 #, c-format msgid "At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set." msgstr "Som mest en av recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time och recovery_target_xid kan sättas." -#: utils/misc/guc.c:11807 +#: utils/misc/guc.c:11825 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "Det enda tillåtna värdet är \"immediate\"." @@ -27197,7 +27211,7 @@ msgstr "raden är för lång i tidszonfil \"%s\", rad %d" msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "@INCLUDE utan filnamn i tidszonfil \"%s\", rad %d" -#: utils/mmgr/aset.c:476 utils/mmgr/generation.c:234 utils/mmgr/slab.c:235 +#: utils/mmgr/aset.c:476 utils/mmgr/generation.c:234 utils/mmgr/slab.c:236 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "Misslyckades vid skapande av minneskontext \"%s\"." @@ -27250,24 +27264,38 @@ msgstr "kan inte göra PREPARE på en transaktion som skapat en markör med WITH msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "kan inte utföra transaktionskommandon i en markörloop som inte är read-only" -#: utils/sort/logtape.c:268 +#: utils/sort/logtape.c:266 utils/sort/logtape.c:289 +#, c-format +msgid "could not seek to block %ld of temporary file" +msgstr "kunde inte söka (seek) till block %ld i temporärfil" + +#: utils/sort/logtape.c:295 #, c-format -msgid "could not read block %ld of temporary file: %m" -msgstr "kunde inte läsa block %ld av temporärfil: %m" +msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" +msgstr "kunde inte läsa block %ld i temporärfil: läste bara %zu av %zu byte" -#: utils/sort/sharedtuplestore.c:435 utils/sort/sharedtuplestore.c:444 -#: utils/sort/sharedtuplestore.c:467 utils/sort/sharedtuplestore.c:484 -#: utils/sort/sharedtuplestore.c:501 utils/sort/sharedtuplestore.c:573 -#: utils/sort/sharedtuplestore.c:579 +#: utils/sort/sharedtuplestore.c:430 utils/sort/sharedtuplestore.c:439 +#: utils/sort/sharedtuplestore.c:462 utils/sort/sharedtuplestore.c:479 +#: utils/sort/sharedtuplestore.c:496 #, c-format msgid "could not read from shared tuplestore temporary file" msgstr "kunde inte läsa från delad temporär lagringsfil för tupler" -#: utils/sort/sharedtuplestore.c:490 +#: utils/sort/sharedtuplestore.c:485 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "oväntad chunk i delad temporär lagringsfil för tupler" +#: utils/sort/sharedtuplestore.c:569 +#, c-format +msgid "could not seek to block %u in shared tuplestore temporary file" +msgstr "kunde inte söka (seek) till block %u i delad temporär lagringsfil för tupler" + +#: utils/sort/sharedtuplestore.c:576 +#, c-format +msgid "could not read from shared tuplestore temporary file: read only %zu of %zu bytes" +msgstr "kunde inte läsa från delad temporär lagringsfil för tupler: läste bara %zu av %zu byte" + #: utils/sort/tuplesort.c:3140 #, c-format msgid "cannot have more than %d runs for an external sort" @@ -27294,20 +27322,14 @@ msgstr "Duplicerade nycklar existerar." #: utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 #: utils/sort/tuplestore.c:1330 #, c-format -msgid "could not seek in tuplestore temporary file: %m" -msgstr "kunde inte söka i temporär lagringsfil för tupler: %m" +msgid "could not seek in tuplestore temporary file" +msgstr "kunde inte söka i temporär lagringsfil för tupler" -#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1550 -#: utils/sort/tuplestore.c:1556 +#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1540 +#: utils/sort/tuplestore.c:1548 #, c-format -msgid "could not read from tuplestore temporary file: %m" -msgstr "kunde inte läsa från temporär lagringsfil för tupler: %m" - -#: utils/sort/tuplestore.c:1518 utils/sort/tuplestore.c:1523 -#: utils/sort/tuplestore.c:1529 -#, c-format -msgid "could not write to tuplestore temporary file: %m" -msgstr "kunde inte skriva till temporär lagringsfil för tupler: %m" +msgid "could not read from tuplestore temporary file: read only %zu of %zu bytes" +msgstr "kunde inte läsa från temporär lagringsfil för tupler: läste bara %zu av %zu byte" #: utils/time/snapmgr.c:624 #, c-format @@ -27359,14 +27381,68 @@ msgstr "en serialiserbar transaktion som inte är read-only kan inte importera e msgid "cannot import a snapshot from a different database" msgstr "kan inte importera en snapshot från en annan databas" -#~ msgid "cannot advance replication slot that has not previously reserved WAL" -#~ msgstr "kan inte flytta fram replikeringsslot som inte en tidigare reserverad WAL" +#~ msgid "starting parallel vacuum worker for %s" +#~ msgstr "startar parallell vacuum-arbetsprocess för %s" -#~ msgid "could not load advapi32.dll: error code %lu" -#~ msgstr "kunde inte ladda advapi32.dll: felkod %lu" +#~ msgid "leftover placeholder tuple detected in BRIN index \"%s\", deleting" +#~ msgstr "kvarlämnad platshållartuple hittad i BRIN-index \"%s\", raderar" -#~ msgid "could not load wldap32.dll" -#~ msgstr "kunde inte ladda wldap32.dll" +#~ msgid "EXPLAIN option BUFFERS requires ANALYZE" +#~ msgstr "EXPLAIN-flagga BUFFERS kräver ANALYZE" + +#~ msgid "could not write to file \"%s\" : %m" +#~ msgstr "kunde inte skriva till fil \"%s\" : %m" + +#~ msgid "Causes the planner to avoid hashed aggregation plans that are expected to use the disk." +#~ msgstr "Gör så att planeraren unviker planer med hash-aggregering som förväntas använda disk." #~ msgid "cannot specify both FULL and PARALLEL options" #~ msgstr "kan inte ange både flaggan FULL och PARALLEL" + +#~ msgid "could not load wldap32.dll" +#~ msgstr "kunde inte ladda wldap32.dll" + +#~ msgid "could not load advapi32.dll: error code %lu" +#~ msgstr "kunde inte ladda advapi32.dll: felkod %lu" + +#~ msgid "cannot advance replication slot that has not previously reserved WAL" +#~ msgstr "kan inte flytta fram replikeringsslot som inte en tidigare reserverad WAL" + +#~ msgid "could not write to tuplestore temporary file: %m" +#~ msgstr "kunde inte skriva till temporär lagringsfil för tupler: %m" + +#~ msgid "When a password is specified in CREATE USER or ALTER USER without writing either ENCRYPTED or UNENCRYPTED, this parameter determines whether the password is to be encrypted." +#~ msgstr "När ett lösenord anges i CREATE USER eller ALTER USER utan man skrivit varken ENCRYPTED eller UNENCRYPTED så bestämmer denna parameter om lösenordet kommer krypteras." + +#~ msgid "Encrypt passwords." +#~ msgstr "Kryptera lösenord." + +#~ msgid "Enables the planner's use of hashed aggregation plans for groupingsets when the total size of the hash tables is expected to exceed work_mem." +#~ msgstr "Aktiverar planerarens användning av planer med hash-aggregering för grupperingsmängder när totala storleken på hash-tabellerna förväntas överstiga work_mem." + +#~ msgid "could not write to temporary file: %m" +#~ msgstr "kunde inte skriva till temporär fil: %m" + +#~ msgid "could not write to hash-join temporary file: %m" +#~ msgstr "kunde inte skriva till hash-join-temporärfil: %m" + +#~ msgid "could not write block %ld of temporary file: %m" +#~ msgstr "kunde inte skriva block %ld i temporär fil: %m" + +#~ msgid "could not restore file \"%s\" from archive" +#~ msgstr "kunde inte återställa fil \"%s\" från arkiv" + +#~ msgid "restore_command failed due to the signal: %s" +#~ msgstr "restore_command misslyckades på grund av signal: %s" + +#~ msgid "could not open file \"%s\" restored from archive: %m" +#~ msgstr "kunde inte öppna fil \"%s\" återställd från arkiv: %m" + +#~ msgid "unexpected file size for \"%s\": %lu instead of %lu" +#~ msgstr "oväntad filstorlek på \"%s\": %lu istället för %lu" + +#~ msgid "could not use restore_command with %%r alias" +#~ msgstr "kunde inte använda restore_command med %%r-alias" + +#~ msgid "insufficient columns in %s constraint definition" +#~ msgstr "otillräckligt med kolumner i villkorsdefinitionen %s" diff --git a/src/backend/po/uk.po b/src/backend/po/uk.po new file mode 100644 index 0000000000000..48f9d1f3f8ed5 --- /dev/null +++ b/src/backend/po/uk.po @@ -0,0 +1,27348 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:10+0000\n" +"PO-Revision-Date: 2020-09-22 13:45\n" +"Last-Translator: \n" +"Language-Team: Ukrainian\n" +"Language: uk_UA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /DEV_13/postgres.pot\n" +"X-Crowdin-File-ID: 524\n" + +#: ../common/config_info.c:134 ../common/config_info.c:142 +#: ../common/config_info.c:150 ../common/config_info.c:158 +#: ../common/config_info.c:166 ../common/config_info.c:174 +#: ../common/config_info.c:182 ../common/config_info.c:190 +msgid "not recorded" +msgstr "не записано" + +#: ../common/controldata_utils.c:68 ../common/controldata_utils.c:73 +#: commands/copy.c:3495 commands/extension.c:3436 utils/adt/genfile.c:125 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "не вдалося відкрити файл \"%s\" для читання: %m" + +#: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 +#: access/transam/timeline.c:143 access/transam/timeline.c:362 +#: access/transam/twophase.c:1276 access/transam/xlog.c:3503 +#: access/transam/xlog.c:4728 access/transam/xlog.c:11121 +#: access/transam/xlog.c:11134 access/transam/xlog.c:11587 +#: access/transam/xlog.c:11667 access/transam/xlog.c:11706 +#: access/transam/xlog.c:11749 access/transam/xlogfuncs.c:662 +#: access/transam/xlogfuncs.c:681 commands/extension.c:3446 libpq/hba.c:499 +#: replication/logical/origin.c:717 replication/logical/origin.c:753 +#: replication/logical/reorderbuffer.c:3599 +#: replication/logical/snapbuild.c:1741 replication/logical/snapbuild.c:1783 +#: replication/logical/snapbuild.c:1811 replication/logical/snapbuild.c:1838 +#: replication/slot.c:1622 replication/slot.c:1663 replication/walsender.c:543 +#: storage/file/buffile.c:441 storage/file/copydir.c:195 +#: utils/adt/genfile.c:200 utils/adt/misc.c:763 utils/cache/relmapper.c:741 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не вдалося прочитати файл \"%s\": %m" + +#: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 +#: access/transam/twophase.c:1279 access/transam/xlog.c:3508 +#: access/transam/xlog.c:4733 replication/logical/origin.c:722 +#: replication/logical/origin.c:761 replication/logical/snapbuild.c:1746 +#: replication/logical/snapbuild.c:1788 replication/logical/snapbuild.c:1816 +#: replication/logical/snapbuild.c:1843 replication/slot.c:1626 +#: replication/slot.c:1667 replication/walsender.c:548 +#: utils/cache/relmapper.c:745 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не вдалося прочитати файл \"%s\": прочитано %d з %zu" + +#: ../common/controldata_utils.c:112 ../common/controldata_utils.c:117 +#: ../common/controldata_utils.c:256 ../common/controldata_utils.c:259 +#: access/heap/rewriteheap.c:1181 access/heap/rewriteheap.c:1284 +#: access/transam/timeline.c:392 access/transam/timeline.c:438 +#: access/transam/timeline.c:516 access/transam/twophase.c:1288 +#: access/transam/twophase.c:1676 access/transam/xlog.c:3375 +#: access/transam/xlog.c:3543 access/transam/xlog.c:3548 +#: access/transam/xlog.c:3876 access/transam/xlog.c:4698 +#: access/transam/xlog.c:5622 access/transam/xlogfuncs.c:687 +#: commands/copy.c:1810 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 +#: replication/logical/origin.c:655 replication/logical/origin.c:794 +#: replication/logical/reorderbuffer.c:3657 +#: replication/logical/snapbuild.c:1653 replication/logical/snapbuild.c:1851 +#: replication/slot.c:1513 replication/slot.c:1674 replication/walsender.c:558 +#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:704 +#: storage/file/fd.c:3425 storage/file/fd.c:3528 utils/cache/relmapper.c:753 +#: utils/cache/relmapper.c:892 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "неможливо закрити файл \"%s\": %m" + +#: ../common/controldata_utils.c:135 +msgid "byte ordering mismatch" +msgstr "неправильний порядок байтів" + +#: ../common/controldata_utils.c:137 +#, c-format +msgid "possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "можлива помилка у послідовності байтів.\n" +"Порядок байтів, що використовують для зберігання файлу pg_control, може не відповідати тому, який використовується цією програмою. У такому випадку результати нижче будуть неправильним, і інсталяція PostgreSQL буде несумісною з цим каталогом даних." + +#: ../common/controldata_utils.c:197 ../common/controldata_utils.c:203 +#: ../common/file_utils.c:224 ../common/file_utils.c:283 +#: ../common/file_utils.c:357 access/heap/rewriteheap.c:1267 +#: access/transam/timeline.c:111 access/transam/timeline.c:251 +#: access/transam/timeline.c:348 access/transam/twophase.c:1232 +#: access/transam/xlog.c:3277 access/transam/xlog.c:3417 +#: access/transam/xlog.c:3458 access/transam/xlog.c:3656 +#: access/transam/xlog.c:3741 access/transam/xlog.c:3844 +#: access/transam/xlog.c:4718 access/transam/xlogutils.c:807 +#: postmaster/syslogger.c:1488 replication/basebackup.c:621 +#: replication/basebackup.c:1593 replication/logical/origin.c:707 +#: replication/logical/reorderbuffer.c:2465 +#: replication/logical/reorderbuffer.c:2825 +#: replication/logical/reorderbuffer.c:3579 +#: replication/logical/snapbuild.c:1608 replication/logical/snapbuild.c:1712 +#: replication/slot.c:1594 replication/walsender.c:516 +#: replication/walsender.c:2516 storage/file/copydir.c:161 +#: storage/file/fd.c:679 storage/file/fd.c:3412 storage/file/fd.c:3499 +#: storage/smgr/md.c:475 utils/cache/relmapper.c:724 +#: utils/cache/relmapper.c:836 utils/error/elog.c:1858 +#: utils/init/miscinit.c:1316 utils/init/miscinit.c:1450 +#: utils/init/miscinit.c:1527 utils/misc/guc.c:8252 utils/misc/guc.c:8284 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" + +#: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 +#: access/transam/twophase.c:1649 access/transam/twophase.c:1658 +#: access/transam/xlog.c:10878 access/transam/xlog.c:10916 +#: access/transam/xlog.c:11329 access/transam/xlogfuncs.c:741 +#: postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 +#: utils/cache/relmapper.c:870 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "не вдалося записати файл \"%s\": %m" + +#: ../common/controldata_utils.c:239 ../common/controldata_utils.c:245 +#: ../common/file_utils.c:295 ../common/file_utils.c:365 +#: access/heap/rewriteheap.c:961 access/heap/rewriteheap.c:1175 +#: access/heap/rewriteheap.c:1278 access/transam/timeline.c:432 +#: access/transam/timeline.c:510 access/transam/twophase.c:1670 +#: access/transam/xlog.c:3368 access/transam/xlog.c:3537 +#: access/transam/xlog.c:4691 access/transam/xlog.c:10386 +#: access/transam/xlog.c:10413 replication/logical/snapbuild.c:1646 +#: replication/slot.c:1499 replication/slot.c:1604 storage/file/fd.c:696 +#: storage/file/fd.c:3520 storage/smgr/md.c:921 storage/smgr/md.c:962 +#: storage/sync/sync.c:396 utils/cache/relmapper.c:885 utils/misc/guc.c:8035 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "не вдалося fsync файл \"%s\": %m" + +#: ../common/exec.c:137 ../common/exec.c:254 ../common/exec.c:300 +#, c-format +msgid "could not identify current directory: %m" +msgstr "не вдалося визначити поточний каталог: %m" + +#: ../common/exec.c:156 +#, c-format +msgid "invalid binary \"%s\"" +msgstr "невірний бінарний файл \"%s\"" + +#: ../common/exec.c:206 +#, c-format +msgid "could not read binary \"%s\"" +msgstr "неможливо прочитати бінарний файл \"%s\"" + +#: ../common/exec.c:214 +#, c-format +msgid "could not find a \"%s\" to execute" +msgstr "неможливо знайти \"%s\" для виконання" + +#: ../common/exec.c:270 ../common/exec.c:309 utils/init/miscinit.c:395 +#, c-format +msgid "could not change directory to \"%s\": %m" +msgstr "не вдалося змінити каталог на \"%s\": %m" + +#: ../common/exec.c:287 access/transam/xlog.c:10750 +#: replication/basebackup.c:1418 utils/adt/misc.c:337 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "не можливо прочитати символічне послання \"%s\": %m" + +#: ../common/exec.c:410 +#, c-format +msgid "pclose failed: %m" +msgstr "помилка pclose: %m" + +#: ../common/exec.c:539 ../common/exec.c:584 ../common/exec.c:676 +#: ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 +#: ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1341 +#: access/transam/xlog.c:6493 lib/dshash.c:246 libpq/auth.c:1090 +#: libpq/auth.c:1491 libpq/auth.c:1559 libpq/auth.c:2089 +#: libpq/be-secure-gssapi.c:484 postmaster/bgworker.c:336 +#: postmaster/bgworker.c:893 postmaster/postmaster.c:2518 +#: postmaster/postmaster.c:2540 postmaster/postmaster.c:4166 +#: postmaster/postmaster.c:4868 postmaster/postmaster.c:4938 +#: postmaster/postmaster.c:5635 postmaster/postmaster.c:5995 +#: replication/libpqwalreceiver/libpqwalreceiver.c:276 +#: replication/logical/logical.c:176 replication/walsender.c:590 +#: storage/buffer/localbuf.c:442 storage/file/fd.c:834 storage/file/fd.c:1304 +#: storage/file/fd.c:1465 storage/file/fd.c:2270 storage/ipc/procarray.c:1045 +#: storage/ipc/procarray.c:1541 storage/ipc/procarray.c:1548 +#: storage/ipc/procarray.c:1972 storage/ipc/procarray.c:2597 +#: utils/adt/cryptohashes.c:45 utils/adt/cryptohashes.c:65 +#: utils/adt/formatting.c:1698 utils/adt/formatting.c:1822 +#: utils/adt/formatting.c:1947 utils/adt/pg_locale.c:484 +#: utils/adt/pg_locale.c:648 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 +#: utils/hash/dynahash.c:450 utils/hash/dynahash.c:559 +#: utils/hash/dynahash.c:1071 utils/mb/mbutils.c:401 utils/mb/mbutils.c:428 +#: utils/mb/mbutils.c:757 utils/mb/mbutils.c:783 utils/misc/guc.c:4846 +#: utils/misc/guc.c:4862 utils/misc/guc.c:4875 utils/misc/guc.c:8013 +#: utils/misc/tzparser.c:467 utils/mmgr/aset.c:475 utils/mmgr/dsa.c:701 +#: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:233 +#: utils/mmgr/mcxt.c:821 utils/mmgr/mcxt.c:857 utils/mmgr/mcxt.c:895 +#: utils/mmgr/mcxt.c:933 utils/mmgr/mcxt.c:969 utils/mmgr/mcxt.c:1000 +#: utils/mmgr/mcxt.c:1036 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1123 +#: utils/mmgr/mcxt.c:1158 utils/mmgr/slab.c:235 +#, c-format +msgid "out of memory" +msgstr "недостатньо пам'яті" + +#: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 +#: ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 +#: ../common/psprintf.c:145 ../port/path.c:632 ../port/path.c:670 +#: ../port/path.c:687 utils/misc/ps_status.c:181 utils/misc/ps_status.c:189 +#: utils/misc/ps_status.c:219 utils/misc/ps_status.c:227 +#, c-format +msgid "out of memory\n" +msgstr "недостатньо пам'яті\n" + +#: ../common/fe_memutils.c:92 ../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" + +#: ../common/file_utils.c:79 ../common/file_utils.c:181 +#: access/transam/twophase.c:1244 access/transam/xlog.c:10854 +#: access/transam/xlog.c:10892 access/transam/xlog.c:11109 +#: access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:226 +#: commands/copy.c:1938 commands/copy.c:3505 commands/extension.c:3425 +#: commands/tablespace.c:795 commands/tablespace.c:886 +#: replication/basebackup.c:444 replication/basebackup.c:627 +#: replication/basebackup.c:700 replication/logical/snapbuild.c:1522 +#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1816 +#: storage/file/fd.c:3096 storage/file/fd.c:3278 storage/file/fd.c:3364 +#: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 +#: utils/adt/genfile.c:416 utils/adt/genfile.c:642 guc-file.l:1061 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" + +#: ../common/file_utils.c:158 ../common/pgfnames.c:48 commands/tablespace.c:718 +#: commands/tablespace.c:728 postmaster/postmaster.c:1509 +#: storage/file/fd.c:2673 storage/file/reinit.c:122 utils/adt/misc.c:259 +#: utils/misc/tzparser.c:338 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не вдалося відкрити каталог \"%s\": %m" + +#: ../common/file_utils.c:192 ../common/pgfnames.c:69 storage/file/fd.c:2685 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "не вдалося прочитати каталог \"%s\": %m" + +#: ../common/file_utils.c:375 access/transam/xlogarchive.c:411 +#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1665 +#: replication/slot.c:650 replication/slot.c:1385 replication/slot.c:1527 +#: storage/file/fd.c:714 utils/time/snapmgr.c:1350 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "не вдалося перейменувати файл \"%s\" на \"%s\": %m" + +#: ../common/jsonapi.c:1064 +#, c-format +msgid "Escape sequence \"\\%s\" is invalid." +msgstr "Неприпустима спеціальна послідовність \"\\%s\"." + +#: ../common/jsonapi.c:1067 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "Символ зі значенням 0x%02x повинен бути пропущений." + +#: ../common/jsonapi.c:1070 +#, c-format +msgid "Expected end of input, but found \"%s\"." +msgstr "Очікувався кінець введення, але знайдено \"%s\"." + +#: ../common/jsonapi.c:1073 +#, c-format +msgid "Expected array element or \"]\", but found \"%s\"." +msgstr "Очікувався елемент масиву або \"]\", але знайдено \"%s\"." + +#: ../common/jsonapi.c:1076 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%s\"." +msgstr "Очікувалось \",\" або \"]\", але знайдено \"%s\"." + +#: ../common/jsonapi.c:1079 +#, c-format +msgid "Expected \":\", but found \"%s\"." +msgstr "Очікувалось \":\", але знайдено \"%s\"." + +#: ../common/jsonapi.c:1082 +#, c-format +msgid "Expected JSON value, but found \"%s\"." +msgstr "Очікувалось значення JSON, але знайдено \"%s\"." + +#: ../common/jsonapi.c:1085 +msgid "The input string ended unexpectedly." +msgstr "Несподіваний кінець вхідного рядка." + +#: ../common/jsonapi.c:1087 +#, c-format +msgid "Expected string or \"}\", but found \"%s\"." +msgstr "Очікувався рядок або \"}\", але знайдено \"%s\"." + +#: ../common/jsonapi.c:1090 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%s\"." +msgstr "Очікувалось \",\" або \"}\", але знайдено \"%s\"." + +#: ../common/jsonapi.c:1093 +#, c-format +msgid "Expected string, but found \"%s\"." +msgstr "Очікувався рядок, але знайдено \"%s\"." + +#: ../common/jsonapi.c:1096 +#, c-format +msgid "Token \"%s\" is invalid." +msgstr "Неприпустимий маркер \"%s\"." + +#: ../common/jsonapi.c:1099 jsonpath_scan.l:499 +#, c-format +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 не можна перетворити в текст." + +#: ../common/jsonapi.c:1101 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "За \"\\u\" повинні прямувати чотири шістнадцяткових числа." + +#: ../common/jsonapi.c:1104 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "Значення виходу Unicode не можна використовувати для значень кодових точок більше 007F, якщо кодування не UTF8." + +#: ../common/jsonapi.c:1106 jsonpath_scan.l:520 +#, c-format +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "Старший сурогат Unicode не повинен прямувати за іншим старшим сурогатом." + +#: ../common/jsonapi.c:1108 jsonpath_scan.l:531 jsonpath_scan.l:541 +#: jsonpath_scan.l:583 +#, c-format +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Молодший сурогат Unicode не повинен прямувати за іншим молодшим сурогатом." + +#: ../common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "збій: " + +#: ../common/logging.c:243 +#, c-format +msgid "error: " +msgstr "помилка: " + +#: ../common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "попередження: " + +#: ../common/pgfnames.c:74 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "не вдалося закрити каталог \"%s\": %m" + +#: ../common/relpath.c:61 +#, c-format +msgid "invalid fork name" +msgstr "неприпустима назва відгалуження" + +#: ../common/relpath.c:62 +#, c-format +msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." +msgstr "Дозволені назви відгалуження: \"main\", \"fsm\", \"vm\" або \"init\"." + +#: ../common/restricted_token.c:64 libpq/auth.c:1521 libpq/auth.c:2520 +#, c-format +msgid "could not load library \"%s\": error code %lu" +msgstr "не вдалося завантажити бібліотеку \"%s\": код помилки %lu" + +#: ../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "не вдалося створити обмежені токени на цій платформі: код помилки %lu" + +#: ../common/restricted_token.c:82 +#, c-format +msgid "could not open process token: error code %lu" +msgstr "не вдалося відкрити токен процесу: код помилки %lu" + +#: ../common/restricted_token.c:97 +#, c-format +msgid "could not allocate SIDs: error code %lu" +msgstr "не вдалося виділити SID: код помилки %lu" + +#: ../common/restricted_token.c:119 +#, c-format +msgid "could not create restricted token: error code %lu" +msgstr "не вдалося створити обмежений токен: код помилки %lu" + +#: ../common/restricted_token.c:140 +#, c-format +msgid "could not start process for command \"%s\": error code %lu" +msgstr "не вдалося запустити процес для команди \"%s\": код помилки %lu" + +#: ../common/restricted_token.c:178 +#, c-format +msgid "could not re-execute with restricted token: error code %lu" +msgstr "не вдалося перезапустити з обмеженим токеном: код помилки %lu" + +#: ../common/restricted_token.c:194 +#, c-format +msgid "could not get exit code from subprocess: error code %lu" +msgstr "не вдалося отримати код завершення підпроцесу: код помилки %lu" + +#: ../common/rmtree.c:79 replication/basebackup.c:1171 +#: replication/basebackup.c:1347 +#, c-format +msgid "could not stat file or directory \"%s\": %m" +msgstr "не вдалося отримати інформацію про файл або каталог \"%s\": %m" + +#: ../common/rmtree.c:101 ../common/rmtree.c:113 +#, c-format +msgid "could not remove file or directory \"%s\": %m" +msgstr "не вдалося видалити файл або каталог \"%s\": %m" + +#: ../common/saslprep.c:1087 +#, c-format +msgid "password too long" +msgstr "пароль задовгий" + +#: ../common/stringinfo.c:306 +#, c-format +msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." +msgstr "Не вдалося збільшити рядковий буфер (містить: %d байтів, потребувалось: %d байтів)." + +#: ../common/stringinfo.c:310 +#, c-format +msgid "out of memory\n\n" +"Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" +msgstr "недостатньо пам'яті\n\n" +"Неможливо збільшити рядковий буфер (містить: %d байт, потребувалось: %d байт).\n" + +#: ../common/username.c:43 +#, c-format +msgid "could not look up effective user ID %ld: %s" +msgstr "не можу знайти користувача з ефективним ID %ld: %s" + +#: ../common/username.c:45 libpq/auth.c:2027 +msgid "user does not exist" +msgstr "користувача не існує" + +#: ../common/username.c:60 +#, c-format +msgid "user name lookup failure: error code %lu" +msgstr "невдала підстановка імені користувача: код помилки %lu" + +#: ../common/wait_error.c:45 +#, c-format +msgid "command not executable" +msgstr "неможливо виконати команду" + +#: ../common/wait_error.c:49 +#, c-format +msgid "command not found" +msgstr "команду не знайдено" + +#: ../common/wait_error.c:54 +#, c-format +msgid "child process exited with exit code %d" +msgstr "дочірній процес завершився з кодом виходу %d" + +#: ../common/wait_error.c:62 +#, c-format +msgid "child process was terminated by exception 0x%X" +msgstr "дочірній процес перервано через помилку 0х%X" + +#: ../common/wait_error.c:66 +#, c-format +msgid "child process was terminated by signal %d: %s" +msgstr "дочірній процес перервано через сигнал %d: %s" + +#: ../common/wait_error.c:72 +#, c-format +msgid "child process exited with unrecognized status %d" +msgstr "дочірній процес завершився з невизнаним статусом %d" + +#: ../port/chklocale.c:307 +#, c-format +msgid "could not determine encoding for codeset \"%s\"" +msgstr "не вдалося визначити кодування для набору символів \"%s\"" + +#: ../port/chklocale.c:428 ../port/chklocale.c:434 +#, c-format +msgid "could not determine encoding for locale \"%s\": codeset is \"%s\"" +msgstr "не вдалося визначити кодування для докалі \"%s\": набір символів \"%s\"" + +#: ../port/dirmod.c:218 +#, c-format +msgid "could not set junction for \"%s\": %s" +msgstr "не вдалося встановити сполучення для \"%s\": %s" + +#: ../port/dirmod.c:221 +#, c-format +msgid "could not set junction for \"%s\": %s\n" +msgstr "не вдалося встановити сполучення для \"%s\": %s\n" + +#: ../port/dirmod.c:295 +#, c-format +msgid "could not get junction for \"%s\": %s" +msgstr "не вдалося встановити сполучення для \"%s\": %s" + +#: ../port/dirmod.c:298 +#, c-format +msgid "could not get junction for \"%s\": %s\n" +msgstr "не вдалося встановити сполучення для \"%s\": %s\n" + +#: ../port/open.c:126 +#, c-format +msgid "could not open file \"%s\": %s" +msgstr "не вдалося відкрити файл \"%s\": %s" + +#: ../port/open.c:127 +msgid "lock violation" +msgstr "порушення блокування" + +#: ../port/open.c:127 +msgid "sharing violation" +msgstr "порушення спільного доступу" + +#: ../port/open.c:128 +#, c-format +msgid "Continuing to retry for 30 seconds." +msgstr "Продовжую спроби протягом 30 секунд." + +#: ../port/open.c:129 +#, c-format +msgid "You might have antivirus, backup, or similar software interfering with the database system." +msgstr "Ви можливо маєте антивірус, резервне копіювання або аналогічне програмне забезпечення, що втручається у роботу системи бази даних." + +#: ../port/path.c:654 +#, c-format +msgid "could not get current working directory: %s\n" +msgstr "не вдалося отримати поточний робочий каталог: %s\n" + +#: ../port/strerror.c:72 +#, c-format +msgid "operating system error %d" +msgstr "помилка операційної системи %d" + +#: ../port/win32security.c:62 +#, c-format +msgid "could not get SID for Administrators group: error code %lu\n" +msgstr "не вдалося отримати SID для групи адміністраторів: код помилки %lu\n" + +#: ../port/win32security.c:72 +#, c-format +msgid "could not get SID for PowerUsers group: error code %lu\n" +msgstr "не вдалося отримати SID для групи PowerUsers: код помилки %lu\n" + +#: ../port/win32security.c:80 +#, c-format +msgid "could not check access token membership: error code %lu\n" +msgstr "не вдається перевірити членство токену доступу: код помилки %lu\n" + +#: access/brin/brin.c:210 +#, c-format +msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" +msgstr "запит на підсумок діапазону BRIN для індексу «%s» сторінки %u не вдалося записати" + +#: access/brin/brin.c:873 access/brin/brin.c:950 access/gin/ginfast.c:1035 +#: access/transam/xlog.c:10522 access/transam/xlog.c:11060 +#: access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 +#: access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 +#: access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 +#: access/transam/xlogfuncs.c:509 +#, c-format +msgid "recovery is in progress" +msgstr "відновлення у процесі" + +#: access/brin/brin.c:874 access/brin/brin.c:951 +#, c-format +msgid "BRIN control functions cannot be executed during recovery." +msgstr "Контрольна функція BRIN не може бути виконана під час відновлення." + +#: access/brin/brin.c:882 access/brin/brin.c:959 +#, c-format +msgid "block number out of range: %s" +msgstr "заблоковане число за межами діапазону: %s" + +#: access/brin/brin.c:905 access/brin/brin.c:982 +#, c-format +msgid "\"%s\" is not a BRIN index" +msgstr "\"%s\" не є індексом BRIN" + +#: access/brin/brin.c:921 access/brin/brin.c:998 +#, c-format +msgid "could not open parent table of index %s" +msgstr "не вдалося відкрити батьківську таблицю індексу %s" + +#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 +#: access/brin/brin_pageops.c:843 access/gin/ginentrypage.c:110 +#: access/gist/gist.c:1435 access/spgist/spgdoinsert.c:1957 +#, c-format +msgid "index row size %zu exceeds maximum %zu for index \"%s\"" +msgstr "розмір рядка індексу %zu перевищує максимальний %zu для індексу \"%s\"" + +#: access/brin/brin_revmap.c:392 access/brin/brin_revmap.c:398 +#, c-format +msgid "corrupted BRIN index: inconsistent range map" +msgstr "пошкоджений BRIN індекс: несумісна карта діапазонів" + +#: access/brin/brin_revmap.c:601 +#, c-format +msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" +msgstr "неочікуваний тип сторінки 0x%04X в BRIN індексі \"%s\" блокує %u" + +#: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:151 +#: access/gist/gistvalidate.c:149 access/hash/hashvalidate.c:136 +#: access/nbtree/nbtvalidate.c:117 access/spgist/spgvalidate.c:168 +#, c-format +msgid "operator family \"%s\" of access method %s contains function %s with invalid support number %d" +msgstr "сімейство операторів \"%s\" методу доступу %s містить функцію %s з недопустимим номером підтримки %d" + +#: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:163 +#: access/gist/gistvalidate.c:161 access/hash/hashvalidate.c:115 +#: access/nbtree/nbtvalidate.c:129 access/spgist/spgvalidate.c:180 +#, c-format +msgid "operator family \"%s\" of access method %s contains function %s with wrong signature for support number %d" +msgstr "сімейство операторів \"%s\" з доступом %s містить функцію %s з неправильним підписом для номеру підтримки %d" + +#: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:182 +#: access/gist/gistvalidate.c:181 access/hash/hashvalidate.c:157 +#: access/nbtree/nbtvalidate.c:149 access/spgist/spgvalidate.c:200 +#, c-format +msgid "operator family \"%s\" of access method %s contains operator %s with invalid strategy number %d" +msgstr "сімейство операторів \"%s\" з доступом %s містить оператор %s з недопустимим стратегічним номером %d" + +#: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:195 +#: access/hash/hashvalidate.c:170 access/nbtree/nbtvalidate.c:162 +#: access/spgist/spgvalidate.c:216 +#, c-format +msgid "operator family \"%s\" of access method %s contains invalid ORDER BY specification for operator %s" +msgstr "сімейство операторів \"%s\" з доступом %s містить некоректну специфікацію ORDER BY для оператора %s" + +#: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:208 +#: access/gist/gistvalidate.c:229 access/hash/hashvalidate.c:183 +#: access/nbtree/nbtvalidate.c:175 access/spgist/spgvalidate.c:232 +#, c-format +msgid "operator family \"%s\" of access method %s contains operator %s with wrong signature" +msgstr "сімейство операторів \"%s\" з доступом %s містить оператор %s з неправильним підписом" + +#: access/brin/brin_validate.c:236 access/hash/hashvalidate.c:223 +#: access/nbtree/nbtvalidate.c:233 access/spgist/spgvalidate.c:259 +#, c-format +msgid "operator family \"%s\" of access method %s is missing operator(s) for types %s and %s" +msgstr "сімейство операторів \"%s\" методу доступу %s не містить операторів для типів %s і %s" + +#: access/brin/brin_validate.c:246 +#, c-format +msgid "operator family \"%s\" of access method %s is missing support function(s) for types %s and %s" +msgstr "сімейство операторів \"%s\" з методом доступа %s не містить функцію підтримки для типів %s і %s" + +#: access/brin/brin_validate.c:259 access/hash/hashvalidate.c:237 +#: access/nbtree/nbtvalidate.c:257 access/spgist/spgvalidate.c:294 +#, c-format +msgid "operator class \"%s\" of access method %s is missing operator(s)" +msgstr "клас операторів \"%s\" з методом доступа %s не має операторів" + +#: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:250 +#: access/gist/gistvalidate.c:270 +#, c-format +msgid "operator class \"%s\" of access method %s is missing support function %d" +msgstr "клас операторів \"%s\" з доступом %s немає функції підтримки %d" + +#: access/common/attmap.c:122 +#, c-format +msgid "Returned type %s does not match expected type %s in column %d." +msgstr "Повернений тип %s не відповідає очікуваному типу %s в стовпці %d." + +#: access/common/attmap.c:150 +#, c-format +msgid "Number of returned columns (%d) does not match expected column count (%d)." +msgstr "Кількість повернених стовпців (%d) не відповідає очікуваній кількості стовпців (%d)." + +#: access/common/attmap.c:229 access/common/attmap.c:241 +#, c-format +msgid "could not convert row type" +msgstr "неможливо конвертувати тип рядка" + +#: access/common/attmap.c:230 +#, c-format +msgid "Attribute \"%s\" of type %s does not match corresponding attribute of type %s." +msgstr "Атрибут \"%s\" типу %s не збігається з відповідним атрибутом типу %s." + +#: access/common/attmap.c:242 +#, c-format +msgid "Attribute \"%s\" of type %s does not exist in type %s." +msgstr "Атрибут \"%s\" типу %s не існує в типі %s." + +#: access/common/heaptuple.c:1036 access/common/heaptuple.c:1371 +#, c-format +msgid "number of columns (%d) exceeds limit (%d)" +msgstr "кількість стовпців (%d) перевищує обмеження (%d)" + +#: access/common/indextuple.c:70 +#, c-format +msgid "number of index columns (%d) exceeds limit (%d)" +msgstr "кількість індексних стовпців (%d) перевищує обмеження (%d)" + +#: access/common/indextuple.c:187 access/spgist/spgutils.c:703 +#, c-format +msgid "index row requires %zu bytes, maximum size is %zu" +msgstr "індексний рядок вимагає %zu байтів, максимальний розмір %zu" + +#: access/common/printtup.c:369 tcop/fastpath.c:180 tcop/fastpath.c:530 +#: tcop/postgres.c:1904 +#, c-format +msgid "unsupported format code: %d" +msgstr "цей формат коду не підтримується:%d" + +#: access/common/reloptions.c:506 +msgid "Valid values are \"on\", \"off\", and \"auto\"." +msgstr "Дійсні значення \"увімкнено\", \"вимкнено\" та \"автоматично\"." + +#: access/common/reloptions.c:517 +msgid "Valid values are \"local\" and \"cascaded\"." +msgstr "Припустимі значення лише \"local\" і \"cascaded\"." + +#: access/common/reloptions.c:665 +#, c-format +msgid "user-defined relation parameter types limit exceeded" +msgstr "перевищено встановлене користувачем обмеження типу параметрів відношення" + +#: access/common/reloptions.c:1208 +#, c-format +msgid "RESET must not include values for parameters" +msgstr "RESET не має містити значення для параметрів" + +#: access/common/reloptions.c:1240 +#, c-format +msgid "unrecognized parameter namespace \"%s\"" +msgstr "нерозпізнаний параметр простору імен \"%s\"" + +#: access/common/reloptions.c:1277 utils/misc/guc.c:12004 +#, c-format +msgid "tables declared WITH OIDS are not supported" +msgstr "таблиці, позначені WITH OIDS, не підтримуються" + +#: access/common/reloptions.c:1447 +#, c-format +msgid "unrecognized parameter \"%s\"" +msgstr "нерозпізнаний параметр \"%s\"" + +#: access/common/reloptions.c:1559 +#, c-format +msgid "parameter \"%s\" specified more than once" +msgstr "параметр «%s» вказано кілька разів" + +#: access/common/reloptions.c:1575 +#, c-format +msgid "invalid value for boolean option \"%s\": %s" +msgstr "неприпустиме значення для булевого параметра \"%s\": %s" + +#: access/common/reloptions.c:1587 +#, c-format +msgid "invalid value for integer option \"%s\": %s" +msgstr "неприпустиме значення для цілого параметра \"%s\": %s" + +#: access/common/reloptions.c:1593 access/common/reloptions.c:1613 +#, c-format +msgid "value %s out of bounds for option \"%s\"" +msgstr "значення %s поза допустимими межами для параметра \"%s\"" + +#: access/common/reloptions.c:1595 +#, c-format +msgid "Valid values are between \"%d\" and \"%d\"." +msgstr "Припустимі значення знаходяться між \"%d\" і \"%d\"." + +#: access/common/reloptions.c:1607 +#, c-format +msgid "invalid value for floating point option \"%s\": %s" +msgstr "неприпустиме значення для числа з плавучою точкою параметра \"%s\": %s" + +#: access/common/reloptions.c:1615 +#, c-format +msgid "Valid values are between \"%f\" and \"%f\"." +msgstr "Припустимі значення знаходяться між \"%f\" і \"%f\"." + +#: access/common/reloptions.c:1637 +#, c-format +msgid "invalid value for enum option \"%s\": %s" +msgstr "неприпустиме значення для параметра переліку \"%s\": %s" + +#: access/common/tupdesc.c:842 parser/parse_clause.c:772 +#: parser/parse_relation.c:1803 +#, c-format +msgid "column \"%s\" cannot be declared SETOF" +msgstr "стовпець\"%s\" не може бути оголошений SETOF" + +#: access/gin/ginbulk.c:44 +#, c-format +msgid "posting list is too long" +msgstr "список вказівників задовгий" + +#: access/gin/ginbulk.c:45 +#, c-format +msgid "Reduce maintenance_work_mem." +msgstr "Зменшіть maintenance_work_mem." + +#: access/gin/ginfast.c:1036 +#, c-format +msgid "GIN pending list cannot be cleaned up during recovery." +msgstr "Черга записів GIN не може бути очищена під час відновлення." + +#: access/gin/ginfast.c:1043 +#, c-format +msgid "\"%s\" is not a GIN index" +msgstr "\"%s\" не є індексом GIN" + +#: access/gin/ginfast.c:1054 +#, c-format +msgid "cannot access temporary indexes of other sessions" +msgstr "доступ до тимчасових індексів з інших сесій заблокований" + +#: access/gin/ginget.c:270 access/nbtree/nbtinsert.c:745 +#, c-format +msgid "failed to re-find tuple within index \"%s\"" +msgstr "не вдалося повторно знайти кортеж в межах індексу \"%s\"" + +#: access/gin/ginscan.c:431 +#, c-format +msgid "old GIN indexes do not support whole-index scans nor searches for nulls" +msgstr "старі індекси GIN не підтримують сканування цілого індексу й пошуки значення null" + +#: access/gin/ginscan.c:432 +#, c-format +msgid "To fix this, do REINDEX INDEX \"%s\"." +msgstr "Щоб виправити це, зробіть REINDEX INDEX \"%s\"." + +#: access/gin/ginutil.c:144 executor/execExpr.c:1862 +#: utils/adt/arrayfuncs.c:3790 utils/adt/arrayfuncs.c:6418 +#: utils/adt/rowtypes.c:936 +#, c-format +msgid "could not identify a comparison function for type %s" +msgstr "не вдалося визначити порівняльну функцію для типу %s" + +#: access/gin/ginvalidate.c:92 access/gist/gistvalidate.c:93 +#: access/hash/hashvalidate.c:99 access/spgist/spgvalidate.c:99 +#, c-format +msgid "operator family \"%s\" of access method %s contains support function %s with different left and right input types" +msgstr "сімейство операторів \"%s\" з методом доступу %s містить функцію підтримки %s з різними типами вводу зліва і справа" + +#: access/gin/ginvalidate.c:260 +#, c-format +msgid "operator class \"%s\" of access method %s is missing support function %d or %d" +msgstr "клас операторів \"%s\" з методом доступу %s не має функції підтримки %d або %d" + +#: access/gist/gist.c:753 access/gist/gistvacuum.c:408 +#, c-format +msgid "index \"%s\" contains an inner tuple marked as invalid" +msgstr "індекс \"%s\" містить внутрішній кортеж, позначений як неправильний" + +#: access/gist/gist.c:755 access/gist/gistvacuum.c:410 +#, c-format +msgid "This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1." +msgstr "Це викликано неповним поділом сторінки під час відновлення перед покращенням до версії PostgreSQL 9.1." + +#: access/gist/gist.c:756 access/gist/gistutil.c:786 access/gist/gistutil.c:797 +#: access/gist/gistvacuum.c:411 access/hash/hashutil.c:227 +#: access/hash/hashutil.c:238 access/hash/hashutil.c:250 +#: access/hash/hashutil.c:271 access/nbtree/nbtpage.c:741 +#: access/nbtree/nbtpage.c:752 +#, c-format +msgid "Please REINDEX it." +msgstr "Будь ласка, виконайте REINDEX." + +#: access/gist/gistsplit.c:446 +#, c-format +msgid "picksplit method for column %d of index \"%s\" failed" +msgstr "помилка методу picksplit для стовпця %d індекса \"%s\"" + +#: access/gist/gistsplit.c:448 +#, c-format +msgid "The index is not optimal. To optimize it, contact a developer, or try to use the column as the second one in the CREATE INDEX command." +msgstr "Індекс не є оптимальним. Щоб оптимізувати його, зв'яжіться з розробником або спробуйте використати стовпець як другий індекс у команді CREATE INDEX." + +#: access/gist/gistutil.c:783 access/hash/hashutil.c:224 +#: access/nbtree/nbtpage.c:738 +#, c-format +msgid "index \"%s\" contains unexpected zero page at block %u" +msgstr "індекс \"%s\" містить неочікувану нульову сторінку в блоці %u" + +#: access/gist/gistutil.c:794 access/hash/hashutil.c:235 +#: access/hash/hashutil.c:247 access/nbtree/nbtpage.c:749 +#, c-format +msgid "index \"%s\" contains corrupted page at block %u" +msgstr "індекс \"%s\" містить пошкоджену сторінку в блоці %u" + +#: access/gist/gistvalidate.c:199 +#, c-format +msgid "operator family \"%s\" of access method %s contains unsupported ORDER BY specification for operator %s" +msgstr "сімейство операторів \"%s\" з методом доступу %s містить непідтримувану для оператора специфікацію ORDER BY %s" + +#: access/gist/gistvalidate.c:210 +#, c-format +msgid "operator family \"%s\" of access method %s contains incorrect ORDER BY opfamily specification for operator %s" +msgstr "сімейство операторів \"%s\" з методом доступу %s містить некоректну для оператора специфікацію ORDER BY opfamily %s" + +#: access/hash/hashfunc.c:255 access/hash/hashfunc.c:311 +#: utils/adt/varchar.c:993 utils/adt/varchar.c:1053 +#, c-format +msgid "could not determine which collation to use for string hashing" +msgstr "не вдалося визначити, який параметр сортування використати для обчислення хешу рядків" + +#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:702 +#: catalog/heap.c:708 commands/createas.c:206 commands/createas.c:489 +#: commands/indexcmds.c:1815 commands/tablecmds.c:16035 commands/view.c:86 +#: parser/parse_utilcmd.c:4203 regex/regc_pg_locale.c:263 +#: utils/adt/formatting.c:1665 utils/adt/formatting.c:1789 +#: utils/adt/formatting.c:1914 utils/adt/like.c:194 +#: utils/adt/like_support.c:1003 utils/adt/varchar.c:733 +#: utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1476 +#, c-format +msgid "Use the COLLATE clause to set the collation explicitly." +msgstr "Використайте опцію COLLATE для задання параметрів сортування." + +#: access/hash/hashinsert.c:82 +#, c-format +msgid "index row size %zu exceeds hash maximum %zu" +msgstr "індексний рядок розміру %zu перевищує максимальний хеш %zu" + +#: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:1961 +#: access/spgist/spgutils.c:764 +#, c-format +msgid "Values larger than a buffer page cannot be indexed." +msgstr "Значення, що перевищують буфер сторінки, не можна індексувати." + +#: access/hash/hashovfl.c:87 +#, c-format +msgid "invalid overflow block number %u" +msgstr "недійсний номер блока переповнення %u" + +#: access/hash/hashovfl.c:283 access/hash/hashpage.c:453 +#, c-format +msgid "out of overflow pages in hash index \"%s\"" +msgstr "закінчились переповнені сторінки в хеш-індексі \"%s\"" + +#: access/hash/hashsearch.c:315 +#, c-format +msgid "hash indexes do not support whole-index scans" +msgstr "хеш-індекси не підтримують сканування цілого індексу" + +#: access/hash/hashutil.c:263 +#, c-format +msgid "index \"%s\" is not a hash index" +msgstr "індекс \"%s\" не є хеш-індексом" + +#: access/hash/hashutil.c:269 +#, c-format +msgid "index \"%s\" has wrong hash version" +msgstr "індекс \"%s\" має неправильну версію хешу" + +#: access/hash/hashvalidate.c:195 +#, c-format +msgid "operator family \"%s\" of access method %s lacks support function for operator %s" +msgstr "сімейство операторів \"%s\" з методом доступу %s не містить функції підтримки для оператора %s" + +#: access/hash/hashvalidate.c:253 access/nbtree/nbtvalidate.c:273 +#, c-format +msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" +msgstr "сімейство операторів \"%s\" з методом доступу %s не містить міжтипового оператора (ів)" + +#: access/heap/heapam.c:2024 +#, c-format +msgid "cannot insert tuples in a parallel worker" +msgstr "не вдалося вставити кортежі в паралельного працівника" + +#: access/heap/heapam.c:2442 +#, c-format +msgid "cannot delete tuples during a parallel operation" +msgstr "не вдалося видалити кортежі під час паралельної операції" + +#: access/heap/heapam.c:2488 +#, c-format +msgid "attempted to delete invisible tuple" +msgstr "спроба видалити невидимий кортеж" + +#: access/heap/heapam.c:2914 access/heap/heapam.c:5703 +#, c-format +msgid "cannot update tuples during a parallel operation" +msgstr "неможливо оновити кортежі під час паралельної операції" + +#: access/heap/heapam.c:3047 +#, c-format +msgid "attempted to update invisible tuple" +msgstr "спроба оновити невидимий кортеж" + +#: access/heap/heapam.c:4358 access/heap/heapam.c:4396 +#: access/heap/heapam.c:4653 access/heap/heapam_handler.c:450 +#, c-format +msgid "could not obtain lock on row in relation \"%s\"" +msgstr "не вдалося отримати блокування у рядку стосовно \"%s\"" + +#: access/heap/heapam_handler.c:399 +#, c-format +msgid "tuple to be locked was already moved to another partition due to concurrent update" +msgstr "кортеж, який підлягає блокуванню, вже був переміщений до іншої секції в результаті паралельного оновлення" + +#: access/heap/hio.c:345 access/heap/rewriteheap.c:662 +#, c-format +msgid "row is too big: size %zu, maximum size %zu" +msgstr "рядок завеликий: розмір %zu, максимальний розмір %zu" + +#: access/heap/rewriteheap.c:921 +#, c-format +msgid "could not write to file \"%s\", wrote %d of %d: %m" +msgstr "не вдалося записати до файлу \"%s\", записано %d з %d: %m" + +#: access/heap/rewriteheap.c:1015 access/heap/rewriteheap.c:1134 +#: access/transam/timeline.c:329 access/transam/timeline.c:485 +#: access/transam/xlog.c:3300 access/transam/xlog.c:3472 +#: access/transam/xlog.c:4670 access/transam/xlog.c:10869 +#: access/transam/xlog.c:10907 access/transam/xlog.c:11312 +#: access/transam/xlogfuncs.c:735 postmaster/postmaster.c:4629 +#: replication/logical/origin.c:575 replication/slot.c:1446 +#: storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1329 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "неможливо створити файл \"%s\": %m" + +#: access/heap/rewriteheap.c:1144 +#, c-format +msgid "could not truncate file \"%s\" to %u: %m" +msgstr "не вдалося скоротити файл \"%s\" до потрібного розміру %u: %m" + +#: access/heap/rewriteheap.c:1162 access/transam/timeline.c:384 +#: access/transam/timeline.c:424 access/transam/timeline.c:502 +#: access/transam/xlog.c:3356 access/transam/xlog.c:3528 +#: access/transam/xlog.c:4682 postmaster/postmaster.c:4639 +#: postmaster/postmaster.c:4649 replication/logical/origin.c:587 +#: replication/logical/origin.c:629 replication/logical/origin.c:648 +#: replication/logical/snapbuild.c:1622 replication/slot.c:1481 +#: storage/file/buffile.c:502 storage/file/copydir.c:207 +#: utils/init/miscinit.c:1391 utils/init/miscinit.c:1402 +#: utils/init/miscinit.c:1410 utils/misc/guc.c:7996 utils/misc/guc.c:8027 +#: utils/misc/guc.c:9947 utils/misc/guc.c:9961 utils/time/snapmgr.c:1334 +#: utils/time/snapmgr.c:1341 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "неможливо записати до файлу \"%s\": %m" + +#: access/heap/rewriteheap.c:1252 access/transam/twophase.c:1609 +#: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:421 +#: postmaster/postmaster.c:1092 postmaster/syslogger.c:1465 +#: replication/logical/origin.c:563 replication/logical/reorderbuffer.c:3079 +#: replication/logical/snapbuild.c:1564 replication/logical/snapbuild.c:2006 +#: replication/slot.c:1578 storage/file/fd.c:754 storage/file/fd.c:3116 +#: storage/file/fd.c:3178 storage/file/reinit.c:255 storage/ipc/dsm.c:302 +#: storage/smgr/md.c:311 storage/smgr/md.c:367 storage/sync/sync.c:210 +#: utils/time/snapmgr.c:1674 +#, c-format +msgid "could not remove file \"%s\": %m" +msgstr "не можливо видалити файл \"%s\": %m" + +#: access/heap/vacuumlazy.c:648 +#, c-format +msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" +msgstr "автоматичний агресивний вакуум для запобігання зацикленню таблиці \"%s.%s.%s\": сканування індексу: %d\n" + +#: access/heap/vacuumlazy.c:650 +#, c-format +msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" +msgstr "автоматичне очищення для запобігання зацикленню таблиці \"%s.%s.%s\": сканування індексу: %d\n" + +#: access/heap/vacuumlazy.c:655 +#, c-format +msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" +msgstr "автоматична агресивне очищення таблиці \"%s.%s.%s\": сканувань індексу: %d\n" + +#: access/heap/vacuumlazy.c:657 +#, c-format +msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" +msgstr "автоматичне очищення таблиці \"%s.%s.%s\": сканувань індексу: %d\n" + +#: access/heap/vacuumlazy.c:664 +#, c-format +msgid "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n" +msgstr "сторінок: %u видалено, %u залишилось, %u пропущено закріплених, %u пропущено заморожених\n" + +#: access/heap/vacuumlazy.c:670 +#, c-format +msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable, oldest xmin: %u\n" +msgstr "кортежів: %.0f видалено, %.0f залишилось, %.0fв мертвих, але все ще не підлягають видаленню, найстарший xmin: %u\n" + +#: access/heap/vacuumlazy.c:676 +#, c-format +msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" +msgstr "використання буферу: %lld збігів, %lld пропусків, %lld брудних записів\n" + +#: access/heap/vacuumlazy.c:680 +#, c-format +msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" +msgstr "середня швидкість читання: %.3f МБ/с, середня швидкість запису: %.3f МБ/с\n" + +#: access/heap/vacuumlazy.c:682 +#, c-format +msgid "system usage: %s\n" +msgstr "використання системи: %s\n" + +#: access/heap/vacuumlazy.c:684 +#, c-format +msgid "WAL usage: %ld records, %ld full page images, %llu bytes" +msgstr "Використання WAL: %ld записів, %ld зображень на повну сторінку, %llu байтів" + +#: access/heap/vacuumlazy.c:795 +#, c-format +msgid "aggressively vacuuming \"%s.%s\"" +msgstr "агресивне очищення \"%s.%s\"" + +#: access/heap/vacuumlazy.c:800 commands/cluster.c:874 +#, c-format +msgid "vacuuming \"%s.%s\"" +msgstr "очищення \"%s.%s\"" + +#: access/heap/vacuumlazy.c:837 +#, c-format +msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" +msgstr "вимкнення паралельної опції очищення на \"%s\" --- не можна паралельно очистити тимчасові таблиці" + +#: access/heap/vacuumlazy.c:1725 +#, c-format +msgid "\"%s\": removed %.0f row versions in %u pages" +msgstr "\"%s\": видалено %.0f версій рядків, в %u сторінок" + +#: access/heap/vacuumlazy.c:1735 +#, c-format +msgid "%.0f dead row versions cannot be removed yet, oldest xmin: %u\n" +msgstr "Все ще не можна видалити мертві рядки %.0f, найстарший xmin: %u\n" + +#: access/heap/vacuumlazy.c:1737 +#, c-format +msgid "There were %.0f unused item identifiers.\n" +msgstr "Знайдено %.0f невикористаних ідентифікаторів елементів.\n" + +#: access/heap/vacuumlazy.c:1739 +#, c-format +msgid "Skipped %u page due to buffer pins, " +msgid_plural "Skipped %u pages due to buffer pins, " +msgstr[0] "Пропущено %u сторінку, закріплену в буфері " +msgstr[1] "Пропущено %u сторінки, закріплені в буфері " +msgstr[2] "Пропущено %u сторінок, закріплених в буфері " +msgstr[3] "Пропущено %u сторінок, закріплених в буфері " + +#: access/heap/vacuumlazy.c:1743 +#, c-format +msgid "%u frozen page.\n" +msgid_plural "%u frozen pages.\n" +msgstr[0] "%u заморожена сторінка.\n" +msgstr[1] "%u заморожені сторінки.\n" +msgstr[2] "%u заморожених сторінок.\n" +msgstr[3] "%u заморожених сторінок.\n" + +#: access/heap/vacuumlazy.c:1747 +#, c-format +msgid "%u page is entirely empty.\n" +msgid_plural "%u pages are entirely empty.\n" +msgstr[0] "%u сторінка повністю порожня.\n" +msgstr[1] "%u сторінки повністю порожні.\n" +msgstr[2] "%u сторінок повністю порожні.\n" +msgstr[3] "%u сторінок повністю порожні.\n" + +#: access/heap/vacuumlazy.c:1751 commands/indexcmds.c:3450 +#: commands/indexcmds.c:3468 +#, c-format +msgid "%s." +msgstr "%s." + +#: access/heap/vacuumlazy.c:1754 +#, c-format +msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" +msgstr "\"%s\": знайдено %.0f видалених, %.0f невидалених версій рядків у %u з %u сторінок" + +#: access/heap/vacuumlazy.c:1888 +#, c-format +msgid "\"%s\": removed %d row versions in %d pages" +msgstr "\"%s\": видалено %d версій рядків у %d сторінках" + +#: access/heap/vacuumlazy.c:2143 +#, c-format +msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" +msgid_plural "launched %d parallel vacuum workers for index cleanup (planned: %d)" +msgstr[0] "запущений %d паралельний виконавець очистки для очищення індексу (заплановано: %d)" +msgstr[1] "запущено %d паралельних виконавців очистки для очищення індексу (заплановано: %d)" +msgstr[2] "запущено %d паралельних виконавців очистки для очищення індексу (заплановано: %d)" +msgstr[3] "запущено %d паралельних виконавців очистки для очищення індексу (заплановано: %d)" + +#: access/heap/vacuumlazy.c:2149 +#, c-format +msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" +msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" +msgstr[0] "запущений %d паралельний виконавець очистки для очищення індексу (заплановано: %d)" +msgstr[1] "запущено %d паралельних виконавців очистки для очищення індексу (заплановано: %d)" +msgstr[2] "запущено %d паралельних виконавців очистки для очищення індексу (заплановано: %d)" +msgstr[3] "запущено %d паралельних виконавців очистки для очищення індексу (заплановано: %d)" + +#: access/heap/vacuumlazy.c:2441 +#, c-format +msgid "scanned index \"%s\" to remove %d row versions by parallel vacuum worker" +msgstr "відсканований індекс \"%s\" видалити %d версії рядків паралельним виконавцем очистки" + +#: access/heap/vacuumlazy.c:2443 +#, c-format +msgid "scanned index \"%s\" to remove %d row versions" +msgstr "просканований індекс \"%s\", видалено версій рядків %d" + +#: access/heap/vacuumlazy.c:2501 +#, c-format +msgid "index \"%s\" now contains %.0f row versions in %u pages as reported by parallel vacuum worker" +msgstr "індекс \"%s\" тепер містить %.0f версій рядків у %u сторінках, як повідомлено паралельним виконавцем очистки" + +#: access/heap/vacuumlazy.c:2503 +#, c-format +msgid "index \"%s\" now contains %.0f row versions in %u pages" +msgstr "індекс \"%s\" наразі містить %.0f версій рядків у %u сторінках" + +#: access/heap/vacuumlazy.c:2510 +#, c-format +msgid "%.0f index row versions were removed.\n" +"%u index pages have been deleted, %u are currently reusable.\n" +"%s." +msgstr "Видалено версій рядків індексу: %.0f.\n" +"Видалено індексних сторінок %u, придатні для повторного користування: %u.\n" +"%s." + +#: access/heap/vacuumlazy.c:2613 +#, c-format +msgid "\"%s\": stopping truncate due to conflicting lock request" +msgstr "\"%s\": зупинка скорочення через конфліктний запит блокування" + +#: access/heap/vacuumlazy.c:2679 +#, c-format +msgid "\"%s\": truncated %u to %u pages" +msgstr "\"%s\": скорочено (було: %u, стало: %u сторінок)" + +#: access/heap/vacuumlazy.c:2744 +#, c-format +msgid "\"%s\": suspending truncate due to conflicting lock request" +msgstr "\"%s\" припинення скорочення через конфліктний запит блокування" + +#: access/heap/vacuumlazy.c:3583 +#, c-format +msgid "while scanning block %u of relation \"%s.%s\"" +msgstr "під час сканування блоку %u відношення \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3586 +#, c-format +msgid "while scanning relation \"%s.%s\"" +msgstr "під час сканування відношення \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3592 +#, c-format +msgid "while vacuuming block %u of relation \"%s.%s\"" +msgstr "під час очищення блоку %u відношення \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3595 +#, c-format +msgid "while vacuuming relation \"%s.%s\"" +msgstr "під час очищення відношення \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3600 +#, c-format +msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" +msgstr "під час очищення індексу \"%s\" відношення \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3605 +#, c-format +msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" +msgstr "під час очищення індексу \"%s\" відношення \"%s.%s\"" + +#: access/heap/vacuumlazy.c:3611 +#, c-format +msgid "while truncating relation \"%s.%s\" to %u blocks" +msgstr "під час скорочення відношення \"%s.%s\" до %u блоків" + +#: access/index/amapi.c:83 commands/amcmds.c:170 +#, c-format +msgid "access method \"%s\" is not of type %s" +msgstr "метод доступу \"%s\" не є типу %s" + +#: access/index/amapi.c:99 +#, c-format +msgid "index access method \"%s\" does not have a handler" +msgstr "для методу доступу індекса \"%s\" не заданий обробник" + +#: access/index/indexam.c:142 catalog/objectaddress.c:1260 +#: commands/indexcmds.c:2517 commands/tablecmds.c:254 commands/tablecmds.c:278 +#: commands/tablecmds.c:15733 commands/tablecmds.c:17188 +#, c-format +msgid "\"%s\" is not an index" +msgstr "\"%s\" не є індексом" + +#: access/index/indexam.c:970 +#, c-format +msgid "operator class %s has no options" +msgstr "клас операторів %s не має параметрів" + +#: access/nbtree/nbtinsert.c:651 +#, c-format +msgid "duplicate key value violates unique constraint \"%s\"" +msgstr "повторювані значення ключа порушують обмеження унікальності \"%s\"" + +#: access/nbtree/nbtinsert.c:653 +#, c-format +msgid "Key %s already exists." +msgstr "Ключ %s вже існує." + +#: access/nbtree/nbtinsert.c:747 +#, c-format +msgid "This may be because of a non-immutable index expression." +msgstr "Можливо, це викликано змінною природою індексного вираження." + +#: access/nbtree/nbtpage.c:150 access/nbtree/nbtpage.c:538 +#: parser/parse_utilcmd.c:2244 +#, c-format +msgid "index \"%s\" is not a btree" +msgstr "індекс \"%s\" не є b-деревом" + +#: access/nbtree/nbtpage.c:157 access/nbtree/nbtpage.c:545 +#, c-format +msgid "version mismatch in index \"%s\": file version %d, current version %d, minimal supported version %d" +msgstr "невідповідність версії в індексі \"%s\": версія файла %d, поточна версія %d, мінімальна підтримувана версія %d" + +#: access/nbtree/nbtpage.c:1501 +#, c-format +msgid "index \"%s\" contains a half-dead internal page" +msgstr "індекс \"%s\" містить наполовину мертву внутрішню сторінку" + +#: access/nbtree/nbtpage.c:1503 +#, c-format +msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." +msgstr "Це могло статися через переривання VACUUM у версії 9.3 або старше перед оновленням. Будь ласка, виконайте REINDEX." + +#: access/nbtree/nbtutils.c:2664 +#, c-format +msgid "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" +msgstr "розмір рядка індексу %zu перевищує максимальний розмір для версії %u btree %zu для індексу \"%s\"" + +#: access/nbtree/nbtutils.c:2670 +#, c-format +msgid "Index row references tuple (%u,%u) in relation \"%s\"." +msgstr "Рядок індексу посилається на кортеж (%u,,%u) у відношенні \"%s\"." + +#: access/nbtree/nbtutils.c:2674 +#, c-format +msgid "Values larger than 1/3 of a buffer page cannot be indexed.\n" +"Consider a function index of an MD5 hash of the value, or use full text indexing." +msgstr "Значення, що займають більше, ніж 1/3 сторінки буферу, не можуть бути індексовані.\n" +"Радимо застосувати індекс MD5-хеш значення або використати повнотекстове індексування." + +#: access/nbtree/nbtvalidate.c:243 +#, c-format +msgid "operator family \"%s\" of access method %s is missing support function for types %s and %s" +msgstr "сімейство операторів \"%s\" методу доступу %s не має опорної функції для типів %s та %s" + +#: access/spgist/spgutils.c:147 +#, c-format +msgid "compress method must be defined when leaf type is different from input type" +msgstr "метод стиснення повинен бути визначений, коли тип листів відрізняється від вхідного типу" + +#: access/spgist/spgutils.c:761 +#, c-format +msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" +msgstr "Внутрішній розмір кортежу SP-GiST %zu перевищує максимальний %zu" + +#: access/spgist/spgvalidate.c:281 +#, c-format +msgid "operator family \"%s\" of access method %s is missing support function %d for type %s" +msgstr "сімейство операторів \"%s\" методу доступу %s не має опорної функції для типів %d для типу %s" + +#: access/table/table.c:49 access/table/table.c:78 access/table/table.c:111 +#: catalog/aclchk.c:1806 +#, c-format +msgid "\"%s\" is an index" +msgstr "\"%s\" є індексом" + +#: access/table/table.c:54 access/table/table.c:83 access/table/table.c:116 +#: catalog/aclchk.c:1813 commands/tablecmds.c:12554 commands/tablecmds.c:15742 +#, c-format +msgid "\"%s\" is a composite type" +msgstr "\"%s\" це складений тип" + +#: access/table/tableam.c:244 +#, c-format +msgid "tid (%u, %u) is not valid for relation \"%s\"" +msgstr "невірний tid (%u, %u) для відношення \"%s\"" + +#: access/table/tableamapi.c:115 +#, c-format +msgid "%s cannot be empty." +msgstr "%s не може бути пустим." + +#: access/table/tableamapi.c:122 utils/misc/guc.c:11928 +#, c-format +msgid "%s is too long (maximum %d characters)." +msgstr "%s занадто довгий (максимум %d символів)." + +#: access/table/tableamapi.c:145 +#, c-format +msgid "table access method \"%s\" does not exist" +msgstr "табличного методу доступу \"%s\" не існує" + +#: access/table/tableamapi.c:150 +#, c-format +msgid "Table access method \"%s\" does not exist." +msgstr "Табличного методу доступу \"%s\" не існує." + +#: access/tablesample/bernoulli.c:148 access/tablesample/system.c:152 +#, c-format +msgid "sample percentage must be between 0 and 100" +msgstr "відсоток вибірки повинен задаватися числом від 0 до 100" + +#: access/transam/commit_ts.c:295 +#, c-format +msgid "cannot retrieve commit timestamp for transaction %u" +msgstr "не вдалося отримати мітку позначки часу транзакції %u" + +#: access/transam/commit_ts.c:393 +#, c-format +msgid "could not get commit timestamp data" +msgstr "не вдалося отримати позначку часу фіксації" + +#: access/transam/commit_ts.c:395 +#, c-format +msgid "Make sure the configuration parameter \"%s\" is set on the master server." +msgstr "Переконайтесь, що в конфігурації головного серверу встановлений параметр \"%s\"." + +#: access/transam/commit_ts.c:397 +#, c-format +msgid "Make sure the configuration parameter \"%s\" is set." +msgstr "Переконайтесь, що в конфігурації встановлений параметр \"%s\"." + +#: access/transam/multixact.c:1002 +#, c-format +msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database \"%s\"" +msgstr "щоб уникнути втрат даних у базі даних \"%s\", база даних не приймає команди, що створюють нові MultiXactIds" + +#: access/transam/multixact.c:1004 access/transam/multixact.c:1011 +#: access/transam/multixact.c:1035 access/transam/multixact.c:1044 +#, c-format +msgid "Execute a database-wide VACUUM in that database.\n" +"You might also need to commit or roll back old prepared transactions, or drop stale replication slots." +msgstr "Виконати очистку (VACUUM) по всій базі даних.\n" +"Можливо, вам доведеться зафіксувати, відкотити назад старі підготовані транзакції або видалити застарілі слоти реплікації." + +#: access/transam/multixact.c:1009 +#, c-format +msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database with OID %u" +msgstr "щоб уникнути втрат даних в базі даних з OID %u, база даних не приймає команди, що створюють нові MultiXactIds" + +#: access/transam/multixact.c:1030 access/transam/multixact.c:2320 +#, c-format +msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" +msgid_plural "database \"%s\" must be vacuumed before %u more MultiXactIds are used" +msgstr[0] "база даних \"%s\" повинна бути очищена (vacuumed), перед тим як більшість MultiXactId буде використана (%u)" +msgstr[1] "бази даних \"%s\" повинні бути очищені (vacuumed) перед тим, як більшість MultiXactId буде використано (%u)" +msgstr[2] "баз даних \"%s\" повинні бути очищені (vacuumed) перед тим, як більшість MultiXactIds буде використано (%u)" +msgstr[3] "баз даних \"%s\" повинні бути очищені (vacuumed) перед тим, як більшість MultiXactId буде використано (%u)" + +#: access/transam/multixact.c:1039 access/transam/multixact.c:2329 +#, c-format +msgid "database with OID %u must be vacuumed before %u more MultiXactId is used" +msgid_plural "database with OID %u must be vacuumed before %u more MultiXactIds are used" +msgstr[0] "база даних з OID %u повинна бути очищена (vacuumed), перед тим як більшість MultiXactId буде використано (%u)" +msgstr[1] "бази даних з OID %u повинні бути очищені (vacuumed), перед тим як більшість MultiXactIds буде використано (%u)" +msgstr[2] "баз даних з OID %u повинні бути очищені (vacuumed), перед тим як більшість MultiXactIds буде використано (%u)" +msgstr[3] "баз даних з OID %u повинні бути очищені (vacuumed), перед тим як більшість MultiXactId буде використано (%u)" + +#: access/transam/multixact.c:1100 +#, c-format +msgid "multixact \"members\" limit exceeded" +msgstr "перевищено ліміт членів мультитранзакції" + +#: access/transam/multixact.c:1101 +#, c-format +msgid "This command would create a multixact with %u members, but the remaining space is only enough for %u member." +msgid_plural "This command would create a multixact with %u members, but the remaining space is only enough for %u members." +msgstr[0] "Мультитранзакція створена цією командою з %u членів, але місця вистачає лише для %u члена." +msgstr[1] "Мультитранзакція створена цією командою з %u членів, але місця вистачає лише для %u членів." +msgstr[2] "Мультитранзакція створена цією командою з %u членів, але місця вистачає лише для %u членів." +msgstr[3] "Мультитранзакція створена цією командою з %u членів, але місця вистачає лише для %u членів." + +#: access/transam/multixact.c:1106 +#, c-format +msgid "Execute a database-wide VACUUM in database with OID %u with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." +msgstr "Виконати очистку (VACUUM) по всій базі даних з OID %u зі зменшенням значення vacuum_multixact_freeze_min_age та vacuum_multixact_freeze_table_age settings." + +#: access/transam/multixact.c:1137 +#, c-format +msgid "database with OID %u must be vacuumed before %d more multixact member is used" +msgid_plural "database with OID %u must be vacuumed before %d more multixact members are used" +msgstr[0] "база даних з OID %u повинна бути очищена перед використанням додаткового члена мультитранзакції (%d)" +msgstr[1] "база даних з OID %u повинна бути очищена перед використанням додаткових членів мультитранзакції (%d)" +msgstr[2] "база даних з OID %u повинна бути очищена перед використанням додаткових членів мультитранзакції (%d)" +msgstr[3] "база даних з OID %u повинна бути очищена перед використанням додаткових членів мультитранзакції (%d)" + +#: access/transam/multixact.c:1142 +#, c-format +msgid "Execute a database-wide VACUUM in that database with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." +msgstr "Виконати очищення (VACUUM) по всій цій базі даних зі зменшенням значення vacuum_multixact_freeze_min_age та vacuum_multixact_freeze_table_age settings." + +#: access/transam/multixact.c:1279 +#, c-format +msgid "MultiXactId %u does no longer exist -- apparent wraparound" +msgstr "MultiXactId %u припинив існування -- очевидно відбулося зациклення" + +#: access/transam/multixact.c:1287 +#, c-format +msgid "MultiXactId %u has not been created yet -- apparent wraparound" +msgstr "MultiXactId %u ще не був створений -- очевидно відбулося зациклення" + +#: access/transam/multixact.c:2270 +#, c-format +msgid "MultiXactId wrap limit is %u, limited by database with OID %u" +msgstr "Межа зациклення MultiXactId дорівнює %u. Обмежено базою даних з OID %u" + +#: access/transam/multixact.c:2325 access/transam/multixact.c:2334 +#: access/transam/varsup.c:149 access/transam/varsup.c:156 +#: access/transam/varsup.c:447 access/transam/varsup.c:454 +#, c-format +msgid "To avoid a database shutdown, execute a database-wide VACUUM in that database.\n" +"You might also need to commit or roll back old prepared transactions, or drop stale replication slots." +msgstr "Щоб уникнути вимкнення бази даних, виконайте VACUUM для всієї бази даних.\n" +"Можливо, вам доведеться зафіксувати або відкотити назад старі підготовленні транзакції або видалити застарілі слоти реплікації." + +#: access/transam/multixact.c:2604 +#, c-format +msgid "oldest MultiXactId member is at offset %u" +msgstr "зсув члену найстарішої MultiXactId: %u" + +#: access/transam/multixact.c:2608 +#, c-format +msgid "MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk" +msgstr "Захист від зациклення члену MultiXact вимкнена, оскільки найстаріша контрольна точка MultiXact %u не існує на диску" + +#: access/transam/multixact.c:2630 +#, c-format +msgid "MultiXact member wraparound protections are now enabled" +msgstr "Захист від зациклення члену MultiXact наразі ввімкнена" + +#: access/transam/multixact.c:2633 +#, c-format +msgid "MultiXact member stop limit is now %u based on MultiXact %u" +msgstr "Межа зупинки члену MultiXact %u заснована на MultiXact %u" + +#: access/transam/multixact.c:3013 +#, c-format +msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" +msgstr "найстарішу MultiXact %u не знайдено, найновіша MultiXact %u, скорочення пропускається" + +#: access/transam/multixact.c:3031 +#, c-format +msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" +msgstr "неможливо виконати скорочення до MultiXact %u, оскільки її не існує на диску, скорочення пропускається" + +#: access/transam/multixact.c:3345 +#, c-format +msgid "invalid MultiXactId: %u" +msgstr "неприпустимий MultiXactId: %u" + +#: access/transam/parallel.c:706 access/transam/parallel.c:825 +#, c-format +msgid "parallel worker failed to initialize" +msgstr "не вдалося виконати ініціалізацію паралельного виконавця" + +#: access/transam/parallel.c:707 access/transam/parallel.c:826 +#, c-format +msgid "More details may be available in the server log." +msgstr "Більше деталей можуть бути доступні в журналі серверу." + +#: access/transam/parallel.c:887 +#, c-format +msgid "postmaster exited during a parallel transaction" +msgstr "postmaster завершився під час паралельної транзакції" + +#: access/transam/parallel.c:1074 +#, c-format +msgid "lost connection to parallel worker" +msgstr "втрачено зв'язок з паралельним виконавцем" + +#: access/transam/parallel.c:1140 access/transam/parallel.c:1142 +msgid "parallel worker" +msgstr "паралельний виконавець" + +#: access/transam/parallel.c:1293 +#, c-format +msgid "could not map dynamic shared memory segment" +msgstr "не вдалося відобразити динамічний сегмент спільної пам'яті" + +#: access/transam/parallel.c:1298 +#, c-format +msgid "invalid magic number in dynamic shared memory segment" +msgstr "неприпустиме магічне число в динамічному сегменті спільної пам'яті" + +#: access/transam/slru.c:696 +#, c-format +msgid "file \"%s\" doesn't exist, reading as zeroes" +msgstr "файл \"%s\" не існує, вважається нульовим" + +#: access/transam/slru.c:937 access/transam/slru.c:943 +#: access/transam/slru.c:951 access/transam/slru.c:956 +#: access/transam/slru.c:963 access/transam/slru.c:968 +#: access/transam/slru.c:975 access/transam/slru.c:982 +#, c-format +msgid "could not access status of transaction %u" +msgstr "не можливо отримати статус транзакції %u" + +#: access/transam/slru.c:938 +#, c-format +msgid "Could not open file \"%s\": %m." +msgstr "Не можливо відкрити файл \"%s\": %m." + +#: access/transam/slru.c:944 +#, c-format +msgid "Could not seek in file \"%s\" to offset %u: %m." +msgstr "Не вдалося переміститися у файлі \"%s\" до зсуву %u: %m." + +#: access/transam/slru.c:952 +#, c-format +msgid "Could not read from file \"%s\" at offset %u: %m." +msgstr "Не вдалося прочитати файл \"%s\" по зсуву %u: %m." + +#: access/transam/slru.c:957 +#, c-format +msgid "Could not read from file \"%s\" at offset %u: read too few bytes." +msgstr "Не вдалося прочитати з файлу \"%s\" із зсувом %u: прочитано занадто мало байтів." + +#: access/transam/slru.c:964 +#, c-format +msgid "Could not write to file \"%s\" at offset %u: %m." +msgstr "Не вдалося записати файл \"%s\" по зсуву %u: %m." + +#: access/transam/slru.c:969 +#, c-format +msgid "Could not write to file \"%s\" at offset %u: wrote too few bytes." +msgstr "Не вдалося записати файл \"%s\" із зсувом %u: записано занадто мало байтів." + +#: access/transam/slru.c:976 +#, c-format +msgid "Could not fsync file \"%s\": %m." +msgstr "Не вдалося синхронізувати файл \"%s\": %m." + +#: access/transam/slru.c:983 +#, c-format +msgid "Could not close file \"%s\": %m." +msgstr "Не можливо закрити файл \"%s\": %m." + +#: access/transam/slru.c:1254 +#, c-format +msgid "could not truncate directory \"%s\": apparent wraparound" +msgstr "не вдалося спустошити каталог \"%s\": очевидно сталося зациклення" + +#: access/transam/slru.c:1309 access/transam/slru.c:1365 +#, c-format +msgid "removing file \"%s\"" +msgstr "видалення файлу \"%s\"" + +#: access/transam/timeline.c:163 access/transam/timeline.c:168 +#, c-format +msgid "syntax error in history file: %s" +msgstr "синтаксична помилка у файлі історії: %s" + +#: access/transam/timeline.c:164 +#, c-format +msgid "Expected a numeric timeline ID." +msgstr "Очікується числовий ідентифікатор лінії часу." + +#: access/transam/timeline.c:169 +#, c-format +msgid "Expected a write-ahead log switchpoint location." +msgstr "Очікується положення точки випереджувального журналювання." + +#: access/transam/timeline.c:173 +#, c-format +msgid "invalid data in history file: %s" +msgstr "неприпустимі дані у файлу історії: %s" + +#: access/transam/timeline.c:174 +#, c-format +msgid "Timeline IDs must be in increasing sequence." +msgstr "Ідентифікатори ліній часу повинні збільшуватись." + +#: access/transam/timeline.c:194 +#, c-format +msgid "invalid data in history file \"%s\"" +msgstr "неприпустимі дані у файлу історії \"%s\"" + +#: access/transam/timeline.c:195 +#, c-format +msgid "Timeline IDs must be less than child timeline's ID." +msgstr "Ідентифікатори ліній часу повинні бути меншими від ідентифікатора дочірньої лінії." + +#: access/transam/timeline.c:597 +#, c-format +msgid "requested timeline %u is not in this server's history" +msgstr "в історії даного серверу немає запитаної лінії часу %u" + +#: access/transam/twophase.c:381 +#, c-format +msgid "transaction identifier \"%s\" is too long" +msgstr "ідентифікатор транзакції \"%s\" задовгий" + +#: access/transam/twophase.c:388 +#, c-format +msgid "prepared transactions are disabled" +msgstr "підготовлені транзакції вимкнено" + +#: access/transam/twophase.c:389 +#, c-format +msgid "Set max_prepared_transactions to a nonzero value." +msgstr "Встановіть ненульове значення параметра max_prepared_transactions." + +#: access/transam/twophase.c:408 +#, c-format +msgid "transaction identifier \"%s\" is already in use" +msgstr "ідентифікатор транзакції \"%s\" вже використовується" + +#: access/transam/twophase.c:417 access/transam/twophase.c:2368 +#, c-format +msgid "maximum number of prepared transactions reached" +msgstr "досягнуто максимального числа підготованих транзакцій" + +#: access/transam/twophase.c:418 access/transam/twophase.c:2369 +#, c-format +msgid "Increase max_prepared_transactions (currently %d)." +msgstr "Збільшіть max_prepared_transactions (наразі %d)." + +#: access/transam/twophase.c:586 +#, c-format +msgid "prepared transaction with identifier \"%s\" is busy" +msgstr "підготовлена транзакція з ідентифікатором \"%s\" зайнята" + +#: access/transam/twophase.c:592 +#, c-format +msgid "permission denied to finish prepared transaction" +msgstr "немає дозволу для завершення підготовлених транзакцій" + +#: access/transam/twophase.c:593 +#, c-format +msgid "Must be superuser or the user that prepared the transaction." +msgstr "Треба пути суперкористувачем або користувачем, який підготував транзакцію." + +#: access/transam/twophase.c:604 +#, c-format +msgid "prepared transaction belongs to another database" +msgstr "підготовлена транзакція належить до іншої бази даних" + +#: access/transam/twophase.c:605 +#, c-format +msgid "Connect to the database where the transaction was prepared to finish it." +msgstr "З'єднайтесь з базою даних, де була підготовлена транзакція, щоб завершити її." + +#: access/transam/twophase.c:620 +#, c-format +msgid "prepared transaction with identifier \"%s\" does not exist" +msgstr "підготовленої транзакції з ідентифікатором \"%s\" не існує" + +#: access/transam/twophase.c:1098 +#, c-format +msgid "two-phase state file maximum length exceeded" +msgstr "перевищено граничний розмір файла у 2-фазовому стані" + +#: access/transam/twophase.c:1252 +#, c-format +msgid "incorrect size of file \"%s\": %zu byte" +msgid_plural "incorrect size of file \"%s\": %zu bytes" +msgstr[0] "неправильний розмір файлу \"%s\": %zu байт" +msgstr[1] "неправильний розмір файлу \"%s\": %zu байти" +msgstr[2] "неправильний розмір файлу \"%s\": %zu байтів" +msgstr[3] "неправильний розмір файлу \"%s\": %zu байтів" + +#: access/transam/twophase.c:1261 +#, c-format +msgid "incorrect alignment of CRC offset for file \"%s\"" +msgstr "неправильне вирівнювання зсуву CRC для файлу \"%s\"" + +#: access/transam/twophase.c:1294 +#, c-format +msgid "invalid magic number stored in file \"%s\"" +msgstr "неприпустиме магічне число, збережене у файлі\"%s\"" + +#: access/transam/twophase.c:1300 +#, c-format +msgid "invalid size stored in file \"%s\"" +msgstr "неприпустимий розмір, збережений у файлі \"%s\"" + +#: access/transam/twophase.c:1312 +#, c-format +msgid "calculated CRC checksum does not match value stored in file \"%s\"" +msgstr "обчислена контрольна сума CRC не відповідає значенню, збереженому у файлі \"%s\"" + +#: access/transam/twophase.c:1342 access/transam/xlog.c:6494 +#, c-format +msgid "Failed while allocating a WAL reading processor." +msgstr "Не вдалося розмістити обробник журналу транзакцій." + +#: access/transam/twophase.c:1349 +#, c-format +msgid "could not read two-phase state from WAL at %X/%X" +msgstr "не вдалося прочитати 2-фазовий стан з WAL при %X/%X" + +#: access/transam/twophase.c:1357 +#, c-format +msgid "expected two-phase state data is not present in WAL at %X/%X" +msgstr "очікувані дані 2-фазного стану відсутні в WAL при %X/%X" + +#: access/transam/twophase.c:1637 +#, c-format +msgid "could not recreate file \"%s\": %m" +msgstr "не вдалося відтворити файл \"%s\": %m" + +#: access/transam/twophase.c:1764 +#, c-format +msgid "%u two-phase state file was written for a long-running prepared transaction" +msgid_plural "%u two-phase state files were written for long-running prepared transactions" +msgstr[0] "%u 2-фазовий стан файлу був записаний завдяки довготривалій підготовленій транзакції" +msgstr[1] "%u 2-фазовий стан файлів був записаний завдяки довготривалим підготовленим транзакціям" +msgstr[2] "%u 2-фазовий стан файлів був записаний завдяки довготривалим підготовленим транзакціям" +msgstr[3] "%u 2-фазовий стан файлів був записаний завдяки довготривалим підготовленим транзакціям" + +#: access/transam/twophase.c:1998 +#, c-format +msgid "recovering prepared transaction %u from shared memory" +msgstr "відновлення підготовленої транзакції %u із спільної пам'яті" + +#: access/transam/twophase.c:2089 +#, c-format +msgid "removing stale two-phase state file for transaction %u" +msgstr "видалення застарілого файла 2-фазового стану для транзакції %u" + +#: access/transam/twophase.c:2096 +#, c-format +msgid "removing stale two-phase state from memory for transaction %u" +msgstr "видалення з пам'яті застарілого 2-фазового стану для транзакції %u" + +#: access/transam/twophase.c:2109 +#, c-format +msgid "removing future two-phase state file for transaction %u" +msgstr "видалення файлу майбутнього 2-фазового стану для транзакції %u" + +#: access/transam/twophase.c:2116 +#, c-format +msgid "removing future two-phase state from memory for transaction %u" +msgstr "видалення з пам'яті майбутнього 2-фазового стану для транзакції %u" + +#: access/transam/twophase.c:2141 +#, c-format +msgid "corrupted two-phase state file for transaction %u" +msgstr "пошкоджений файл двофазного стану для транзакції %u" + +#: access/transam/twophase.c:2146 +#, c-format +msgid "corrupted two-phase state in memory for transaction %u" +msgstr "пошкоджена пам'ять двофазного стану для транзакції %u" + +#: access/transam/varsup.c:127 +#, c-format +msgid "database is not accepting commands to avoid wraparound data loss in database \"%s\"" +msgstr "база даних не приймає команди, щоб уникнути втрати даних через зациклення транзакцій в БД \"%s\"" + +#: access/transam/varsup.c:129 access/transam/varsup.c:136 +#, c-format +msgid "Stop the postmaster and vacuum that database in single-user mode.\n" +"You might also need to commit or roll back old prepared transactions, or drop stale replication slots." +msgstr "Зупиніть postmaster і виконайте очищення (vacuum) бази даних в однокористувацькому режимі.\n" +"Можливо, також доведеться зафіксувати або відкотити назад старі підготовлені транзакції, або розірвати застарілі реплікаційні слоти." + +#: access/transam/varsup.c:134 +#, c-format +msgid "database is not accepting commands to avoid wraparound data loss in database with OID %u" +msgstr "база даних не приймає команди задля уникнення втрати даних через зациклення транзакцій в базі даних з OID %u" + +#: access/transam/varsup.c:146 access/transam/varsup.c:444 +#, c-format +msgid "database \"%s\" must be vacuumed within %u transactions" +msgstr "база даних \"%s\" повинна бути очищена (граничне число транзакцій: %u)" + +#: access/transam/varsup.c:153 access/transam/varsup.c:451 +#, c-format +msgid "database with OID %u must be vacuumed within %u transactions" +msgstr "база даних з OID %u повинна бути очищена (граничне число транзакцій: %u)" + +#: access/transam/varsup.c:409 +#, c-format +msgid "transaction ID wrap limit is %u, limited by database with OID %u" +msgstr "обмеження зациклення транзакції ID %u, обмежена за допомогою бази даних з OID %u" + +#: access/transam/xact.c:1030 +#, c-format +msgid "cannot have more than 2^32-2 commands in a transaction" +msgstr "в одній транзакції не може бути більше 2^32-2 команд" + +#: access/transam/xact.c:1555 +#, c-format +msgid "maximum number of committed subtransactions (%d) exceeded" +msgstr "перевищено межу числа зафіксованих підтранзакцій (%d)" + +#: access/transam/xact.c:2395 +#, c-format +msgid "cannot PREPARE a transaction that has operated on temporary objects" +msgstr "неможливо виконати PREPARE для транзакції, що здійснювалася на тимчасових об'єктах" + +#: access/transam/xact.c:2405 +#, c-format +msgid "cannot PREPARE a transaction that has exported snapshots" +msgstr "не можна виконати PREPARE для транзакції, яка має експортовані знімки" + +#: access/transam/xact.c:2414 +#, c-format +msgid "cannot PREPARE a transaction that has manipulated logical replication workers" +msgstr "не можна виконати PREPARE для транзакції, яка маніпулює процесами логічної реплікації" + +#. translator: %s represents an SQL statement name +#: access/transam/xact.c:3359 +#, c-format +msgid "%s cannot run inside a transaction block" +msgstr "%s неможливо запустити всередині блоку транзакції" + +#. translator: %s represents an SQL statement name +#: access/transam/xact.c:3369 +#, c-format +msgid "%s cannot run inside a subtransaction" +msgstr "%s неможливо запустити всередині підтранзакції" + +#. translator: %s represents an SQL statement name +#: access/transam/xact.c:3379 +#, c-format +msgid "%s cannot be executed from a function" +msgstr "%s неможливо виконати з функції" + +#. translator: %s represents an SQL statement name +#: access/transam/xact.c:3448 access/transam/xact.c:3754 +#: access/transam/xact.c:3833 access/transam/xact.c:3956 +#: access/transam/xact.c:4107 access/transam/xact.c:4176 +#: access/transam/xact.c:4287 +#, c-format +msgid "%s can only be used in transaction blocks" +msgstr "%s може використовуватися тільки в блоках транзакції" + +#: access/transam/xact.c:3640 +#, c-format +msgid "there is already a transaction in progress" +msgstr "транзакція вже виконується" + +#: access/transam/xact.c:3759 access/transam/xact.c:3838 +#: access/transam/xact.c:3961 +#, c-format +msgid "there is no transaction in progress" +msgstr "немає незавершеної транзакції" + +#: access/transam/xact.c:3849 +#, c-format +msgid "cannot commit during a parallel operation" +msgstr "не можна фіксувати транзакції під час паралельних операцій" + +#: access/transam/xact.c:3972 +#, c-format +msgid "cannot abort during a parallel operation" +msgstr "не можна перервати під час паралельних операцій" + +#: access/transam/xact.c:4071 +#, c-format +msgid "cannot define savepoints during a parallel operation" +msgstr "не можна визначати точки збереження під час паралельних операцій" + +#: access/transam/xact.c:4158 +#, c-format +msgid "cannot release savepoints during a parallel operation" +msgstr "не можна вивільняти точки збереження під час паралельних транзакцій" + +#: access/transam/xact.c:4168 access/transam/xact.c:4219 +#: access/transam/xact.c:4279 access/transam/xact.c:4328 +#, c-format +msgid "savepoint \"%s\" does not exist" +msgstr "точка збереження \"%s\" не існує" + +#: access/transam/xact.c:4225 access/transam/xact.c:4334 +#, c-format +msgid "savepoint \"%s\" does not exist within current savepoint level" +msgstr "точка збереження \"%s\" не існує на поточному рівні збереження точок" + +#: access/transam/xact.c:4267 +#, c-format +msgid "cannot rollback to savepoints during a parallel operation" +msgstr "не можна відкотити назад до точки збереження під час паралельних операцій" + +#: access/transam/xact.c:4395 +#, c-format +msgid "cannot start subtransactions during a parallel operation" +msgstr "не можна запустити підтранзакцію під час паралельних операцій" + +#: access/transam/xact.c:4463 +#, c-format +msgid "cannot commit subtransactions during a parallel operation" +msgstr "не можна визначити підтранзакцію під час паралельних операцій" + +#: access/transam/xact.c:5103 +#, c-format +msgid "cannot have more than 2^32-1 subtransactions in a transaction" +msgstr "в одній транзакції не може бути більше 2^32-1 підтранзакцій" + +#: access/transam/xlog.c:2554 +#, c-format +msgid "could not write to log file %s at offset %u, length %zu: %m" +msgstr "не вдалося записати у файл журналу %s (зсув: %u, довжина: %zu): %m" + +#: access/transam/xlog.c:2830 +#, c-format +msgid "updated min recovery point to %X/%X on timeline %u" +msgstr "мінімальна точка відновлення змінена на %X/%X на лінії часу %u" + +#: access/transam/xlog.c:3944 access/transam/xlogutils.c:802 +#: replication/walsender.c:2510 +#, c-format +msgid "requested WAL segment %s has already been removed" +msgstr "запитуваний сегмент WAL %s вже видалений" + +#: access/transam/xlog.c:4187 +#, c-format +msgid "recycled write-ahead log file \"%s\"" +msgstr "файл випереджувального журналювання \"%s\" використовується повторно" + +#: access/transam/xlog.c:4199 +#, c-format +msgid "removing write-ahead log file \"%s\"" +msgstr "файл випереджувального журналювання \"%s\" видаляється" + +#: access/transam/xlog.c:4219 +#, c-format +msgid "could not rename file \"%s\": %m" +msgstr "не вдалося перейменувати файл \"%s\": %m" + +#: access/transam/xlog.c:4261 access/transam/xlog.c:4271 +#, c-format +msgid "required WAL directory \"%s\" does not exist" +msgstr "необхідний каталог WAL \"%s\" не існує" + +#: access/transam/xlog.c:4277 +#, c-format +msgid "creating missing WAL directory \"%s\"" +msgstr "створюється відсутній каталог WAL \"%s\"" + +#: access/transam/xlog.c:4280 +#, c-format +msgid "could not create missing directory \"%s\": %m" +msgstr "не вдалося створити відстуній каталог \"%s\": %m" + +#: access/transam/xlog.c:4383 +#, c-format +msgid "unexpected timeline ID %u in log segment %s, offset %u" +msgstr "неочіукваний ID лінії часу %u в сегменті журналу %s, зсув %u" + +#: access/transam/xlog.c:4521 +#, c-format +msgid "new timeline %u is not a child of database system timeline %u" +msgstr "нова лінія часу %u не є дочірньою для лінії часу системи бази даних %u" + +#: access/transam/xlog.c:4535 +#, c-format +msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" +msgstr "нова лінія часу %u відгалузилась від поточної лінії часу бази даних %u до поточної точки відновлення %X/%X" + +#: access/transam/xlog.c:4554 +#, c-format +msgid "new target timeline is %u" +msgstr "нова цільова лінія часу %u" + +#: access/transam/xlog.c:4590 +#, c-format +msgid "could not generate secret authorization token" +msgstr "не вдалося згенерувати секретний токен для авторизації" + +#: access/transam/xlog.c:4749 access/transam/xlog.c:4758 +#: access/transam/xlog.c:4782 access/transam/xlog.c:4789 +#: access/transam/xlog.c:4796 access/transam/xlog.c:4801 +#: access/transam/xlog.c:4808 access/transam/xlog.c:4815 +#: access/transam/xlog.c:4822 access/transam/xlog.c:4829 +#: access/transam/xlog.c:4836 access/transam/xlog.c:4843 +#: access/transam/xlog.c:4852 access/transam/xlog.c:4859 +#: utils/init/miscinit.c:1548 +#, c-format +msgid "database files are incompatible with server" +msgstr "файли бази даних є несумісними з даним сервером" + +#: access/transam/xlog.c:4750 +#, c-format +msgid "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), but the server was compiled with PG_CONTROL_VERSION %d (0x%08x)." +msgstr "Кластер бази даних було ініціалізовано з PG_CONTROL_VERSION %d (0x%08x), але сервер було скомпільовано з PG_CONTROL_VERSION %d (0x%08x)." + +#: access/transam/xlog.c:4754 +#, c-format +msgid "This could be a problem of mismatched byte ordering. It looks like you need to initdb." +msgstr "Можливо, проблема викликана різним порядком байту. Здається, вам потрібно виконати команду \"initdb\"." + +#: access/transam/xlog.c:4759 +#, c-format +msgid "The database cluster was initialized with PG_CONTROL_VERSION %d, but the server was compiled with PG_CONTROL_VERSION %d." +msgstr "Кластер баз даних був ініціалізований з PG_CONTROL_VERSION %d, але сервер скомпільований з PG_CONTROL_VERSION %d." + +#: access/transam/xlog.c:4762 access/transam/xlog.c:4786 +#: access/transam/xlog.c:4793 access/transam/xlog.c:4798 +#, c-format +msgid "It looks like you need to initdb." +msgstr "Здається, Вам треба виконати initdb." + +#: access/transam/xlog.c:4773 +#, c-format +msgid "incorrect checksum in control file" +msgstr "помилка контрольної суми у файлі pg_control" + +#: access/transam/xlog.c:4783 +#, c-format +msgid "The database cluster was initialized with CATALOG_VERSION_NO %d, but the server was compiled with CATALOG_VERSION_NO %d." +msgstr "Кластер бази даних було ініціалізовано з CATALOG_VERSION_NO %d, але сервер було скомпільовано з CATALOG_VERSION_NO %d." + +#: access/transam/xlog.c:4790 +#, c-format +msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." +msgstr "Кластер бази даних було ініціалізовано з MAXALIGN %d, але сервер було скомпільовано з MAXALIGN %d." + +#: access/transam/xlog.c:4797 +#, c-format +msgid "The database cluster appears to use a different floating-point number format than the server executable." +msgstr "Здається, в кластері баз даних і в програмі сервера використовуються різні формати чисел з плаваючою точкою." + +#: access/transam/xlog.c:4802 +#, c-format +msgid "The database cluster was initialized with BLCKSZ %d, but the server was compiled with BLCKSZ %d." +msgstr "Кластер бази даних було ініціалізовано з BLCKSZ %d, але сервер було скомпільовано з BLCKSZ %d." + +#: access/transam/xlog.c:4805 access/transam/xlog.c:4812 +#: access/transam/xlog.c:4819 access/transam/xlog.c:4826 +#: access/transam/xlog.c:4833 access/transam/xlog.c:4840 +#: access/transam/xlog.c:4847 access/transam/xlog.c:4855 +#: access/transam/xlog.c:4862 +#, c-format +msgid "It looks like you need to recompile or initdb." +msgstr "Здається, вам потрібно перекомпілювати сервер або виконати initdb." + +#: access/transam/xlog.c:4809 +#, c-format +msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." +msgstr "Кластер бази даних було ініціалізовано з ELSEG_SIZE %d, але сервер було скомпільовано з ELSEG_SIZE %d." + +#: access/transam/xlog.c:4816 +#, c-format +msgid "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was compiled with XLOG_BLCKSZ %d." +msgstr "Кластер бази даних було ініціалізовано з XLOG_BLCKSZ %d, але сервер було скомпільовано з XLOG_BLCKSZ %d." + +#: access/transam/xlog.c:4823 +#, c-format +msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." +msgstr "Кластер бази даних було ініціалізовано з NAMEDATALEN %d, але сервер було скомпільовано з NAMEDATALEN %d." + +#: access/transam/xlog.c:4830 +#, c-format +msgid "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server was compiled with INDEX_MAX_KEYS %d." +msgstr "Кластер бази даних було ініціалізовано з INDEX_MAX_KEYS %d, але сервер було скомпільовано з INDEX_MAX_KEYS %d." + +#: access/transam/xlog.c:4837 +#, c-format +msgid "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the server was compiled with TOAST_MAX_CHUNK_SIZE %d." +msgstr "Кластер бази даних було ініціалізовано з TOAST_MAX_CHUNK_SIZE %d, але сервер було скомпільовано з TOAST_MAX_CHUNK_SIZE %d." + +#: access/transam/xlog.c:4844 +#, c-format +msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." +msgstr "Кластер бази даних було ініціалізовано з LOBLKSIZE %d, але сервер було скомпільовано з LOBLKSIZE %d." + +#: access/transam/xlog.c:4853 +#, c-format +msgid "The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL." +msgstr "Кластер бази даних було ініціалізовано без USE_FLOAT8_BYVAL, але сервер було скомпільовано з USE_FLOAT8_BYVAL." + +#: access/transam/xlog.c:4860 +#, c-format +msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." +msgstr "Кластер бази даних було ініціалізовано з USE_FLOAT8_BYVAL, але сервер було скомпільовано без USE_FLOAT8_BYVAL." + +#: access/transam/xlog.c:4869 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" +msgstr[0] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" +msgstr[1] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" +msgstr[2] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" +msgstr[3] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" + +#: access/transam/xlog.c:4881 +#, c-format +msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" +msgstr "\"min_wal_size\" має бути мінімум у 2 рази більше, ніж \"wal_segment_size\"" + +#: access/transam/xlog.c:4885 +#, c-format +msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" +msgstr "\"max_wal_size\" має бути мінімум у 2 рази більше, ніж \"wal_segment_size\"" + +#: access/transam/xlog.c:5318 +#, c-format +msgid "could not write bootstrap write-ahead log file: %m" +msgstr "не вдалося записати початкове завантаження випереджувального журналювання: %m" + +#: access/transam/xlog.c:5326 +#, c-format +msgid "could not fsync bootstrap write-ahead log file: %m" +msgstr "не вдалося скинути на диск початкове завантаження випереджувального журналювання: %m" + +#: access/transam/xlog.c:5332 +#, c-format +msgid "could not close bootstrap write-ahead log file: %m" +msgstr "не вдалося закрити початкове завантаження випереджувального журналювання: %m" + +#: access/transam/xlog.c:5393 +#, c-format +msgid "using recovery command file \"%s\" is not supported" +msgstr "використання файлу команд відновлення \"%s\" не підтримується" + +#: access/transam/xlog.c:5458 +#, c-format +msgid "standby mode is not supported by single-user servers" +msgstr "режим очікування не підтримується однокористувацьким сервером" + +#: access/transam/xlog.c:5475 +#, c-format +msgid "specified neither primary_conninfo nor restore_command" +msgstr "не заззначено ані параметр primary_conninfo, ані параметр restore_command" + +#: access/transam/xlog.c:5476 +#, c-format +msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." +msgstr "Сервер бази даних буде регулярно опитувати підкатолог pg_wal і перевіряти файли, що містяться у ньому." + +#: access/transam/xlog.c:5484 +#, c-format +msgid "must specify restore_command when standby mode is not enabled" +msgstr "необхідно вказати restore_command, якщо не ввімкнено режиму очікування" + +#: access/transam/xlog.c:5522 +#, c-format +msgid "recovery target timeline %u does not exist" +msgstr "цільова лінія часу відновлення %u не існує" + +#: access/transam/xlog.c:5644 +#, c-format +msgid "archive recovery complete" +msgstr "відновлення архіву завершено" + +#: access/transam/xlog.c:5710 access/transam/xlog.c:5983 +#, c-format +msgid "recovery stopping after reaching consistency" +msgstr "відновлення зупиняється після досягнення узгодженості" + +#: access/transam/xlog.c:5731 +#, c-format +msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" +msgstr "відновлення зупиняється перед позицією WAL (LSN) \"%X/%X\"" + +#: access/transam/xlog.c:5817 +#, c-format +msgid "recovery stopping before commit of transaction %u, time %s" +msgstr "відновлення припиняється до підтвердження транзакції %u, час %s" + +#: access/transam/xlog.c:5824 +#, c-format +msgid "recovery stopping before abort of transaction %u, time %s" +msgstr "відновлення припиняється до скасування транзакції %u, час %s" + +#: access/transam/xlog.c:5877 +#, c-format +msgid "recovery stopping at restore point \"%s\", time %s" +msgstr "відновлення припиняється в точці відновлення\"%s\", час %s" + +#: access/transam/xlog.c:5895 +#, c-format +msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" +msgstr "відновлення припиняється пісня локації WAL (LSN) \"%X/%X\"" + +#: access/transam/xlog.c:5963 +#, c-format +msgid "recovery stopping after commit of transaction %u, time %s" +msgstr "відновлення припиняється після підтвердження транзакції %u, час %s" + +#: access/transam/xlog.c:5971 +#, c-format +msgid "recovery stopping after abort of transaction %u, time %s" +msgstr "відновлення припиняється після скасування транзакції %u, час %s" + +#: access/transam/xlog.c:6020 +#, c-format +msgid "pausing at the end of recovery" +msgstr "призупинення в кінці відновлення" + +#: access/transam/xlog.c:6021 +#, c-format +msgid "Execute pg_wal_replay_resume() to promote." +msgstr "Виконайте pg_wal_replay_resume() для просування." + +#: access/transam/xlog.c:6024 +#, c-format +msgid "recovery has paused" +msgstr "відновлення зупинено" + +#: access/transam/xlog.c:6025 +#, c-format +msgid "Execute pg_wal_replay_resume() to continue." +msgstr "Виконайте pg_wal_replay_resume(), щоб продовжити." + +#: access/transam/xlog.c:6242 +#, c-format +msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" +msgstr "hot standby неможливий, так як параметр %s = %d менший, ніж на головному сервері (його значення було %d)" + +#: access/transam/xlog.c:6266 +#, c-format +msgid "WAL was generated with wal_level=minimal, data may be missing" +msgstr "WAL був створений з параметром wal_level=minimal, можлива втрата даних" + +#: access/transam/xlog.c:6267 +#, c-format +msgid "This happens if you temporarily set wal_level=minimal without taking a new base backup." +msgstr "Це трапляється, якщо ви тимчасово встановили wal_level=minimal і не зробили резервну копію бази даних." + +#: access/transam/xlog.c:6278 +#, c-format +msgid "hot standby is not possible because wal_level was not set to \"replica\" or higher on the master server" +msgstr "hot standby неможливий, так як на головному сервері встановлений невідповідний wal_level (повинен бути \"replica\" або вище)" + +#: access/transam/xlog.c:6279 +#, c-format +msgid "Either set wal_level to \"replica\" on the master, or turn off hot_standby here." +msgstr "Або встановіть для wal_level значення \"replica\" на головному сервері, або вимкніть hot_standby тут." + +#: access/transam/xlog.c:6341 +#, c-format +msgid "control file contains invalid checkpoint location" +msgstr "контрольний файл містить неприпустиме розташування контрольної точки" + +#: access/transam/xlog.c:6352 +#, c-format +msgid "database system was shut down at %s" +msgstr "система бази даних була вимкнена %s" + +#: access/transam/xlog.c:6358 +#, c-format +msgid "database system was shut down in recovery at %s" +msgstr "система бази даних завершила роботу у процесі відновлення %s" + +#: access/transam/xlog.c:6364 +#, c-format +msgid "database system shutdown was interrupted; last known up at %s" +msgstr "завершення роботи бази даних було перервано; останній момент роботи %s" + +#: access/transam/xlog.c:6370 +#, c-format +msgid "database system was interrupted while in recovery at %s" +msgstr "система бази даних була перервана в процесі відновлення %s" + +#: access/transam/xlog.c:6372 +#, c-format +msgid "This probably means that some data is corrupted and you will have to use the last backup for recovery." +msgstr "Це, ймовірно, означає, що деякі дані були пошкоджені, і вам доведеться відновити базу даних з останнього збереження." + +#: access/transam/xlog.c:6378 +#, c-format +msgid "database system was interrupted while in recovery at log time %s" +msgstr "робота системи бази даних була перервана в процесі відновлення, час в журналі %s" + +#: access/transam/xlog.c:6380 +#, c-format +msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." +msgstr "Якщо це відбувається більше, ніж один раз, можливо, якісь дані були зіпсовані, і для відновлення треба вибрати більш ранню точку." + +#: access/transam/xlog.c:6386 +#, c-format +msgid "database system was interrupted; last known up at %s" +msgstr "робота системи бази даних була перервана; останній момент роботи %s" + +#: access/transam/xlog.c:6392 +#, c-format +msgid "control file contains invalid database cluster state" +msgstr "контрольний файл містить неприпустимий стан кластеру бази даних" + +#: access/transam/xlog.c:6449 +#, c-format +msgid "entering standby mode" +msgstr "перехід у режим очікування" + +#: access/transam/xlog.c:6452 +#, c-format +msgid "starting point-in-time recovery to XID %u" +msgstr "починається відновлення точки в часі до XID %u" + +#: access/transam/xlog.c:6456 +#, c-format +msgid "starting point-in-time recovery to %s" +msgstr "починається відновлення точки в часі до %s" + +#: access/transam/xlog.c:6460 +#, c-format +msgid "starting point-in-time recovery to \"%s\"" +msgstr "починається відновлення точки в часі до \"%s\"" + +#: access/transam/xlog.c:6464 +#, c-format +msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" +msgstr "починається відновлення точки в часі до локації WAL (LSN) \"%X/%X\"" + +#: access/transam/xlog.c:6469 +#, c-format +msgid "starting point-in-time recovery to earliest consistent point" +msgstr "починається відновлення даних до першої точки домовленості" + +#: access/transam/xlog.c:6472 +#, c-format +msgid "starting archive recovery" +msgstr "початок відновлення архіву" + +#: access/transam/xlog.c:6531 access/transam/xlog.c:6664 +#, c-format +msgid "checkpoint record is at %X/%X" +msgstr "запис контрольної точки є на %X/%X" + +#: access/transam/xlog.c:6546 +#, c-format +msgid "could not find redo location referenced by checkpoint record" +msgstr "не вдалося знайти положення REDO, вказане записом контрольної точки" + +#: access/transam/xlog.c:6547 access/transam/xlog.c:6557 +#, c-format +msgid "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" +"If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n" +"Be careful: removing \"%s/backup_label\" will result in a corrupt cluster if restoring from a backup." +msgstr "Якщо ви відновлюєте з резервної копії, оновіть файл \"%s/recovery.signal\" та додайте необхідні параметри відновлення.\n" +"Якщо ви не відновлюєте з резервної копії, спробуйте видалити файл \"%s/backup_label\".\n" +"Будьте обережні: видалення \"%s/backup_label\" призведе до пошкодження кластеру при відновленні з резервної копії." + +#: access/transam/xlog.c:6556 +#, c-format +msgid "could not locate required checkpoint record" +msgstr "не вдалося знайти запис потрібної контрольної точки" + +#: access/transam/xlog.c:6585 commands/tablespace.c:654 +#, c-format +msgid "could not create symbolic link \"%s\": %m" +msgstr "не вдалося створити символічне послання \"%s\": %m" + +#: access/transam/xlog.c:6617 access/transam/xlog.c:6623 +#, c-format +msgid "ignoring file \"%s\" because no file \"%s\" exists" +msgstr "файл \"%s\" ігнорується, тому що файлу \"%s\" не існує" + +#: access/transam/xlog.c:6619 access/transam/xlog.c:11828 +#, c-format +msgid "File \"%s\" was renamed to \"%s\"." +msgstr "Файл \"%s\" був перейменований на \"%s\"." + +#: access/transam/xlog.c:6625 +#, c-format +msgid "Could not rename file \"%s\" to \"%s\": %m." +msgstr "Неможливо перейменувати файл \"%s\" на \"%s\": %m." + +#: access/transam/xlog.c:6676 +#, c-format +msgid "could not locate a valid checkpoint record" +msgstr "не вдалося знайти запис допустимої контрольної точки" + +#: access/transam/xlog.c:6714 +#, c-format +msgid "requested timeline %u is not a child of this server's history" +msgstr "запитувана лінія часу %u не є відгалуженням історії цього серверу" + +#: access/transam/xlog.c:6716 +#, c-format +msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." +msgstr "Остання контрольна точка %X/%X на лінії часу %u, але в історії запитуваної лінії часу сервер відгалузився з цієї лінії в %X/%X." + +#: access/transam/xlog.c:6732 +#, c-format +msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" +msgstr "запитувана лінія часу %u не містить мінімальну точку відновлення %X/%X на лінії часу %u" + +#: access/transam/xlog.c:6763 +#, c-format +msgid "invalid next transaction ID" +msgstr "невірний ID наступної транзакції" + +#: access/transam/xlog.c:6857 +#, c-format +msgid "invalid redo in checkpoint record" +msgstr "невірний запис REDO в контрольній точці" + +#: access/transam/xlog.c:6868 +#, c-format +msgid "invalid redo record in shutdown checkpoint" +msgstr "невірний запис REDO в контрольній точці вимкнення" + +#: access/transam/xlog.c:6902 +#, c-format +msgid "database system was not properly shut down; automatic recovery in progress" +msgstr "робота системи бази даних не була завершена належним чином; відбувається автоматичне відновлення" + +#: access/transam/xlog.c:6906 +#, c-format +msgid "crash recovery starts in timeline %u and has target timeline %u" +msgstr "відновлення після збою починається на лінії часу %u і має цільову лінію часу: %u" + +#: access/transam/xlog.c:6953 +#, c-format +msgid "backup_label contains data inconsistent with control file" +msgstr "backup_label містить дані, які не узгоджені з файлом pg_control" + +#: access/transam/xlog.c:6954 +#, c-format +msgid "This means that the backup is corrupted and you will have to use another backup for recovery." +msgstr "Це означає, що резервна копія була пошкоджена і вам доведеться використати іншу резервну копію для відновлення." + +#: access/transam/xlog.c:7045 +#, c-format +msgid "initializing for hot standby" +msgstr "ініціалізація для hot standby" + +#: access/transam/xlog.c:7178 +#, c-format +msgid "redo starts at %X/%X" +msgstr "запис REDO починається з %X/%X" + +#: access/transam/xlog.c:7402 +#, c-format +msgid "requested recovery stop point is before consistent recovery point" +msgstr "запитувана точка відновлення передує узгодженій точці відновлення" + +#: access/transam/xlog.c:7440 +#, c-format +msgid "redo done at %X/%X" +msgstr "записи REDO оброблені до %X/%X" + +#: access/transam/xlog.c:7445 +#, c-format +msgid "last completed transaction was at log time %s" +msgstr "остання завершена транзакція була в %s" + +#: access/transam/xlog.c:7454 +#, c-format +msgid "redo is not required" +msgstr "дані REDO не потрібні" + +#: access/transam/xlog.c:7466 +#, c-format +msgid "recovery ended before configured recovery target was reached" +msgstr "відновлення завершилось до досягення налаштованої мети відновлення" + +#: access/transam/xlog.c:7545 access/transam/xlog.c:7549 +#, c-format +msgid "WAL ends before end of online backup" +msgstr "WAL завершився до завершення онлайн резервного копіювання" + +#: access/transam/xlog.c:7546 +#, c-format +msgid "All WAL generated while online backup was taken must be available at recovery." +msgstr "Всі журнали WAL, створені під час резервного копіювання \"на ходу\", повинні бути в наявності для відновлення." + +#: access/transam/xlog.c:7550 +#, c-format +msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." +msgstr "Резервне копіювання БД \"на ходу\", розпочате за допомогою команди \"pg_start_backup()\", повинне завершуватися командою \"pg_stop_backup()\", і для відновлення повинні бути доступні усі журнали WAL. " + +#: access/transam/xlog.c:7553 +#, c-format +msgid "WAL ends before consistent recovery point" +msgstr "WAL завершився до узгодженої точки відновлення" + +#: access/transam/xlog.c:7588 +#, c-format +msgid "selected new timeline ID: %u" +msgstr "вибрано новий ID часової лінії: %u" + +#: access/transam/xlog.c:8036 +#, c-format +msgid "consistent recovery state reached at %X/%X" +msgstr "узгоджений стан відновлення досягнутий %X/%X" + +#: access/transam/xlog.c:8246 +#, c-format +msgid "invalid primary checkpoint link in control file" +msgstr "невірне посилання на первинну контрольну точку в контрольному файлі" + +#: access/transam/xlog.c:8250 +#, c-format +msgid "invalid checkpoint link in backup_label file" +msgstr "невірне посилання на контрольну точку в файлі backup_label" + +#: access/transam/xlog.c:8268 +#, c-format +msgid "invalid primary checkpoint record" +msgstr "невірний запис первинної контрольної точки" + +#: access/transam/xlog.c:8272 +#, c-format +msgid "invalid checkpoint record" +msgstr "невірний запис контрольної точки" + +#: access/transam/xlog.c:8283 +#, c-format +msgid "invalid resource manager ID in primary checkpoint record" +msgstr "невірний ID менеджера ресурсів в записі первинної контрольної точки" + +#: access/transam/xlog.c:8287 +#, c-format +msgid "invalid resource manager ID in checkpoint record" +msgstr "невірний ID менеджера ресурсів в записі контрольної точки" + +#: access/transam/xlog.c:8300 +#, c-format +msgid "invalid xl_info in primary checkpoint record" +msgstr "невірний xl_info у записі первинної контрольної точки" + +#: access/transam/xlog.c:8304 +#, c-format +msgid "invalid xl_info in checkpoint record" +msgstr "невірний xl_info у записі контрольної точки" + +#: access/transam/xlog.c:8315 +#, c-format +msgid "invalid length of primary checkpoint record" +msgstr "невірна довжина запису первинної контрольної очки" + +#: access/transam/xlog.c:8319 +#, c-format +msgid "invalid length of checkpoint record" +msgstr "невірна довжина запису контрольної точки" + +#: access/transam/xlog.c:8499 +#, c-format +msgid "shutting down" +msgstr "завершення роботи" + +#: access/transam/xlog.c:8819 +#, c-format +msgid "checkpoint skipped because system is idle" +msgstr "контрольну точку пропущено, тому що система перебуває в режимі простоювання" + +#: access/transam/xlog.c:9019 +#, c-format +msgid "concurrent write-ahead log activity while database system is shutting down" +msgstr "під час того вимкнення БД помічено конкурентну активність у випереджувальному журналюванні" + +#: access/transam/xlog.c:9276 +#, c-format +msgid "skipping restartpoint, recovery has already ended" +msgstr "пропуск контрольної точки, відновлення вже завершено" + +#: access/transam/xlog.c:9299 +#, c-format +msgid "skipping restartpoint, already performed at %X/%X" +msgstr "створення точки перезапуску пропускається, вона вже створена в %X/%X" + +#: access/transam/xlog.c:9467 +#, c-format +msgid "recovery restart point at %X/%X" +msgstr "відновлення збереженої точки %X/%X" + +#: access/transam/xlog.c:9469 +#, c-format +msgid "Last completed transaction was at log time %s." +msgstr "Остання завершена транзакція була в %s." + +#: access/transam/xlog.c:9711 +#, c-format +msgid "restore point \"%s\" created at %X/%X" +msgstr "точка відновлення \"%s\" створена в %X/%X" + +#: access/transam/xlog.c:9856 +#, c-format +msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" +msgstr "несподіваний ID попередньої лінії часу %u (ID теперішньої лінії часу %u) в записі контрольної точки" + +#: access/transam/xlog.c:9865 +#, c-format +msgid "unexpected timeline ID %u (after %u) in checkpoint record" +msgstr "неочікуваний ID лінії часу %u (після %u) в записі контрольної точки" + +#: access/transam/xlog.c:9881 +#, c-format +msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" +msgstr "неочікуваний ID лінії часу %u в записі контрольної точки, до досягнення мінімальної точки відновлення %X/%X на лінії часу %u" + +#: access/transam/xlog.c:9957 +#, c-format +msgid "online backup was canceled, recovery cannot continue" +msgstr "онлайн резервне копіювання скасовано, неможливо продовжити відновлення" + +#: access/transam/xlog.c:10013 access/transam/xlog.c:10069 +#: access/transam/xlog.c:10092 +#, c-format +msgid "unexpected timeline ID %u (should be %u) in checkpoint record" +msgstr "несподіваний ID лінії часу %u (повинен бути %u) в записі контрольної точки" + +#: access/transam/xlog.c:10418 +#, c-format +msgid "could not fsync write-through file \"%s\": %m" +msgstr "не вдалосьясинхронізувати файл наскрізного запису %s: %m" + +#: access/transam/xlog.c:10424 +#, c-format +msgid "could not fdatasync file \"%s\": %m" +msgstr "не вдалося fdatasync файл \"%s\": %m" + +#: access/transam/xlog.c:10523 access/transam/xlog.c:11061 +#: access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 +#: access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 +#: access/transam/xlogfuncs.c:383 +#, c-format +msgid "WAL control functions cannot be executed during recovery." +msgstr "Функції управління WAL не можна використовувати під час відновлення." + +#: access/transam/xlog.c:10532 access/transam/xlog.c:11070 +#, c-format +msgid "WAL level not sufficient for making an online backup" +msgstr "Обраний рівень WAL недостатній для резервного копіювання \"на ходу\"" + +#: access/transam/xlog.c:10533 access/transam/xlog.c:11071 +#: access/transam/xlogfuncs.c:308 +#, c-format +msgid "wal_level must be set to \"replica\" or \"logical\" at server start." +msgstr "встановіть wal_level \"replica\" або \"logical\" при запуску серверу." + +#: access/transam/xlog.c:10538 +#, c-format +msgid "backup label too long (max %d bytes)" +msgstr "мітка резервного копіювання задовга (максимум %d байт)" + +#: access/transam/xlog.c:10575 access/transam/xlog.c:10860 +#: access/transam/xlog.c:10898 +#, c-format +msgid "a backup is already in progress" +msgstr "резервне копіювання вже триває" + +#: access/transam/xlog.c:10576 +#, c-format +msgid "Run pg_stop_backup() and try again." +msgstr "Запустіть pg_stop_backup() і спробуйте знову." + +#: access/transam/xlog.c:10672 +#, c-format +msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" +msgstr "Після останньої точки відновлення був відтворений WAL, створений в режимі full_page_writes=off" + +#: access/transam/xlog.c:10674 access/transam/xlog.c:11266 +#, c-format +msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the master, and then try an online backup again." +msgstr "Це означає, що резервна копія, зроблена на резервному сервері, зіпсована і її не слід використовувати. Активуйте режим full_page_writes та запустіть CHECKPOINT на головному сервері, а потім спробуйте резервне копіювання \"на ходу\" ще раз." + +#: access/transam/xlog.c:10757 replication/basebackup.c:1423 +#: utils/adt/misc.c:342 +#, c-format +msgid "symbolic link \"%s\" target is too long" +msgstr "таргет символічного посилання \"%s\" задовгий" + +#: access/transam/xlog.c:10810 commands/tablespace.c:402 +#: commands/tablespace.c:566 replication/basebackup.c:1438 utils/adt/misc.c:350 +#, c-format +msgid "tablespaces are not supported on this platform" +msgstr "табличний простір не підтримується на цій платформі" + +#: access/transam/xlog.c:10861 access/transam/xlog.c:10899 +#, c-format +msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." +msgstr "Якщо ви вважаєте, що жодне резервне копіювання не триває, видаліть файл \"%s\" і спробуйте знову." + +#: access/transam/xlog.c:11086 +#, c-format +msgid "exclusive backup not in progress" +msgstr "ексклюзивне резервне копіювання не виконується" + +#: access/transam/xlog.c:11113 +#, c-format +msgid "a backup is not in progress" +msgstr "резервне копіювання не виконується" + +#: access/transam/xlog.c:11199 access/transam/xlog.c:11212 +#: access/transam/xlog.c:11601 access/transam/xlog.c:11607 +#: access/transam/xlog.c:11655 access/transam/xlog.c:11728 +#: access/transam/xlogfuncs.c:692 +#, c-format +msgid "invalid data in file \"%s\"" +msgstr "невірні дані у файлі \"%s\"" + +#: access/transam/xlog.c:11216 replication/basebackup.c:1271 +#, c-format +msgid "the standby was promoted during online backup" +msgstr "режим очікування було підвищено у процесі резервного копіювання \"на ходу\"" + +#: access/transam/xlog.c:11217 replication/basebackup.c:1272 +#, c-format +msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." +msgstr "Це означає, що вибрана резервна копія є пошкодженою і її не слід використовувати. Спробуйте використати іншу онлайн резервну копію." + +#: access/transam/xlog.c:11264 +#, c-format +msgid "WAL generated with full_page_writes=off was replayed during online backup" +msgstr "У процесі резервного копіювання \"на ходу\" був відтворений WAL, створений в режимі full_page_writes=off" + +#: access/transam/xlog.c:11384 +#, c-format +msgid "base backup done, waiting for required WAL segments to be archived" +msgstr "резервне копіювання виконане, очікуються необхідні сегменти WAL для архівації" + +#: access/transam/xlog.c:11396 +#, c-format +msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" +msgstr "все ще чекає на необхідні сегменти WAL для архівації (%d секунд пройшло)" + +#: access/transam/xlog.c:11398 +#, c-format +msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." +msgstr "Перевірте, чи правильно виконується команда archive_command. Ви можете безпечно скасувати це резервне копіювання, але резервна копія БД буде непридатна без усіх сегментів WAL." + +#: access/transam/xlog.c:11405 +#, c-format +msgid "all required WAL segments have been archived" +msgstr "усі необхідні сегменти WAL архівовані" + +#: access/transam/xlog.c:11409 +#, c-format +msgid "WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup" +msgstr "архівація WAL не налаштована; ви повинні забезпечити копіювання всіх необхідних сегментів WAL іншими засобами для отримання резервної копії" + +#: access/transam/xlog.c:11462 +#, c-format +msgid "aborting backup due to backend exiting before pg_stop_backup was called" +msgstr "припинення резервного копіювання через завершення обслуговуючого процесу до виклику pg_stop_backup" + +#: access/transam/xlog.c:11638 +#, c-format +msgid "backup time %s in file \"%s\"" +msgstr "час резервного копіювання %s у файлі \"%s\"" + +#: access/transam/xlog.c:11643 +#, c-format +msgid "backup label %s in file \"%s\"" +msgstr "мітка резервного копіювання %s у файлі \"%s\"" + +#: access/transam/xlog.c:11656 +#, c-format +msgid "Timeline ID parsed is %u, but expected %u." +msgstr "Проаналізовано ID часової лінії %u, очіувалося %u." + +#: access/transam/xlog.c:11660 +#, c-format +msgid "backup timeline %u in file \"%s\"" +msgstr "лінія часу резервного копіювання %u у файлі \"%s\"" + +#. translator: %s is a WAL record description +#: access/transam/xlog.c:11768 +#, c-format +msgid "WAL redo at %X/%X for %s" +msgstr "запис REDO в WAL в позиції %X/%X для %s" + +#: access/transam/xlog.c:11817 +#, c-format +msgid "online backup mode was not canceled" +msgstr "режим копіювання онлайн не був відмінений" + +#: access/transam/xlog.c:11818 +#, c-format +msgid "File \"%s\" could not be renamed to \"%s\": %m." +msgstr "Файл \"%s\" не може бути перейменований на \"%s\": %m." + +#: access/transam/xlog.c:11827 access/transam/xlog.c:11839 +#: access/transam/xlog.c:11849 +#, c-format +msgid "online backup mode canceled" +msgstr "режим копіювання онлайн був відмінений" + +#: access/transam/xlog.c:11840 +#, c-format +msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." +msgstr "Файли \"%s\" і \"%s\" було перейменовано на \"%s\" і \"%s\" відповідно." + +#: access/transam/xlog.c:11850 +#, c-format +msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." +msgstr "Файл \"%s\" було перейменовано на \"%s\", але файл \"%s\" не можливо перейменувати на \"%s\": %m." + +#: access/transam/xlog.c:11983 access/transam/xlogutils.c:971 +#, c-format +msgid "could not read from log segment %s, offset %u: %m" +msgstr "не вдалося прочитати сегмент журналу %s, зсув %u: %m" + +#: access/transam/xlog.c:11989 access/transam/xlogutils.c:978 +#, c-format +msgid "could not read from log segment %s, offset %u: read %d of %zu" +msgstr "не вдалося прочитати сегмент журналу %s, зсув %u: прочитано %d з %zu" + +#: access/transam/xlog.c:12518 +#, c-format +msgid "WAL receiver process shutdown requested" +msgstr "Запитано відключення процесу приймача WAL" + +#: access/transam/xlog.c:12624 +#, c-format +msgid "received promote request" +msgstr "отримано запит підвищення статусу" + +#: access/transam/xlog.c:12637 +#, c-format +msgid "promote trigger file found: %s" +msgstr "знайдено файл тригера підвищення: %s" + +#: access/transam/xlog.c:12646 +#, c-format +msgid "could not stat promote trigger file \"%s\": %m" +msgstr "не вдалося отримати інформацію про файл тригера підвищення \"%s\": %m" + +#: access/transam/xlogarchive.c:205 +#, c-format +msgid "archive file \"%s\" has wrong size: %lu instead of %lu" +msgstr "файл архіву \"%s\" має неправильний розмір: %lu замість %lu" + +#: access/transam/xlogarchive.c:214 +#, c-format +msgid "restored log file \"%s\" from archive" +msgstr "відновлений файл журналу \"%s\" з архіву" + +#: access/transam/xlogarchive.c:259 +#, c-format +msgid "could not restore file \"%s\" from archive: %s" +msgstr "неможливо відновити файл \"%s\" з архіву: %s" + +#. translator: First %s represents a postgresql.conf parameter name like +#. "recovery_end_command", the 2nd is the value of that parameter, the +#. third an already translated error message. +#: access/transam/xlogarchive.c:368 +#, c-format +msgid "%s \"%s\": %s" +msgstr "%s \"%s\": %s" + +#: access/transam/xlogarchive.c:478 access/transam/xlogarchive.c:542 +#, c-format +msgid "could not create archive status file \"%s\": %m" +msgstr "неможливо створити файл статусу архіву \"%s\": %m" + +#: access/transam/xlogarchive.c:486 access/transam/xlogarchive.c:550 +#, c-format +msgid "could not write archive status file \"%s\": %m" +msgstr "неможливо записати файл архівного статусу \"%s\": %m" + +#: access/transam/xlogfuncs.c:74 +#, c-format +msgid "a backup is already in progress in this session" +msgstr "резервне копіювання наразі триває в цьому сеансі" + +#: access/transam/xlogfuncs.c:132 access/transam/xlogfuncs.c:213 +#, c-format +msgid "non-exclusive backup in progress" +msgstr "виконується не ексклюзивне резервне копіювання" + +#: access/transam/xlogfuncs.c:133 access/transam/xlogfuncs.c:214 +#, c-format +msgid "Did you mean to use pg_stop_backup('f')?" +msgstr "Ви мали на увазі використаня pg_stop_backup('f')?" + +#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1332 +#: commands/event_trigger.c:1890 commands/extension.c:1944 +#: commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:712 +#: executor/execExpr.c:2203 executor/execSRF.c:728 executor/functions.c:1046 +#: foreign/foreign.c:520 libpq/hba.c:2666 replication/logical/launcher.c:1086 +#: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1486 +#: replication/slotfuncs.c:252 replication/walsender.c:3265 +#: storage/ipc/shmem.c:550 utils/adt/datetime.c:4765 utils/adt/genfile.c:505 +#: utils/adt/genfile.c:588 utils/adt/jsonfuncs.c:1792 +#: utils/adt/jsonfuncs.c:1904 utils/adt/jsonfuncs.c:2092 +#: utils/adt/jsonfuncs.c:2201 utils/adt/jsonfuncs.c:3663 utils/adt/misc.c:215 +#: utils/adt/pgstatfuncs.c:476 utils/adt/pgstatfuncs.c:584 +#: utils/adt/pgstatfuncs.c:1719 utils/fmgr/funcapi.c:72 utils/misc/guc.c:9648 +#: utils/mmgr/portalmem.c:1136 +#, c-format +msgid "set-valued function called in context that cannot accept a set" +msgstr "функція \"set-valued\" викликана в контексті, де йому немає місця" + +#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1336 +#: commands/event_trigger.c:1894 commands/extension.c:1948 +#: commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:716 +#: foreign/foreign.c:525 libpq/hba.c:2670 replication/logical/launcher.c:1090 +#: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1490 +#: replication/slotfuncs.c:256 replication/walsender.c:3269 +#: storage/ipc/shmem.c:554 utils/adt/datetime.c:4769 utils/adt/genfile.c:509 +#: utils/adt/genfile.c:592 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:480 +#: utils/adt/pgstatfuncs.c:588 utils/adt/pgstatfuncs.c:1723 +#: utils/misc/guc.c:9652 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 +#, c-format +msgid "materialize mode required, but it is not allowed in this context" +msgstr "необхідний режим матеріалізації (materialize mode), але він неприпустимий у цьому контексті" + +#: access/transam/xlogfuncs.c:230 +#, c-format +msgid "non-exclusive backup is not in progress" +msgstr "не ексклюзивне резервне копіювання не виконується" + +#: access/transam/xlogfuncs.c:231 +#, c-format +msgid "Did you mean to use pg_stop_backup('t')?" +msgstr "Ви мали на увазі використаня pg_stop_backup('t')?" + +#: access/transam/xlogfuncs.c:307 +#, c-format +msgid "WAL level not sufficient for creating a restore point" +msgstr "Обраний рівень WAL не достатній для створення точки відновлення" + +#: access/transam/xlogfuncs.c:315 +#, c-format +msgid "value too long for restore point (maximum %d characters)" +msgstr "значення для точки відновлення перевищує межу (%d симв.)" + +#: access/transam/xlogfuncs.c:453 access/transam/xlogfuncs.c:510 +#, c-format +msgid "%s cannot be executed during recovery." +msgstr "%s не можна використовувати під час відновлення." + +#: access/transam/xlogfuncs.c:531 access/transam/xlogfuncs.c:558 +#: access/transam/xlogfuncs.c:582 access/transam/xlogfuncs.c:722 +#, c-format +msgid "recovery is not in progress" +msgstr "відновлення не виконується" + +#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:559 +#: access/transam/xlogfuncs.c:583 access/transam/xlogfuncs.c:723 +#, c-format +msgid "Recovery control functions can only be executed during recovery." +msgstr "Функції управління відновленням можна використовувати тільки під час відновлення." + +#: access/transam/xlogfuncs.c:537 access/transam/xlogfuncs.c:564 +#, c-format +msgid "standby promotion is ongoing" +msgstr "триває просування в режимі очікування" + +#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:565 +#, c-format +msgid "%s cannot be executed after promotion is triggered." +msgstr "%s не може бути виконаний після того як просування запущено." + +#: access/transam/xlogfuncs.c:728 +#, c-format +msgid "\"wait_seconds\" must not be negative or zero" +msgstr "\"wait_seconds\" не має бути від'ємним чи нулем" + +#: access/transam/xlogfuncs.c:748 storage/ipc/signalfuncs.c:164 +#, c-format +msgid "failed to send signal to postmaster: %m" +msgstr "надіслати сигнал процесу postmaster не вдалося: %m" + +#: access/transam/xlogfuncs.c:784 +#, c-format +msgid "server did not promote within %d seconds" +msgstr "сервер не підвищено протягом %d секунд" + +#: access/transam/xlogreader.c:349 +#, c-format +msgid "invalid record offset at %X/%X" +msgstr "невірний зсув запису: %X/%X" + +#: access/transam/xlogreader.c:357 +#, c-format +msgid "contrecord is requested by %X/%X" +msgstr "по зсуву %X/%X запитано продовження запису" + +#: access/transam/xlogreader.c:398 access/transam/xlogreader.c:695 +#, c-format +msgid "invalid record length at %X/%X: wanted %u, got %u" +msgstr "невірна довжина запису по зсуву %X/%X: очікувалось %u, отримано %u" + +#: access/transam/xlogreader.c:422 +#, c-format +msgid "record length %u at %X/%X too long" +msgstr "довжина запису %u на %X/%X є задовгою" + +#: access/transam/xlogreader.c:454 +#, c-format +msgid "there is no contrecord flag at %X/%X" +msgstr "немає флага contrecord в позиції %X/%X" + +#: access/transam/xlogreader.c:467 +#, c-format +msgid "invalid contrecord length %u at %X/%X" +msgstr "невірна довижна contrecord (%u) в позиції %X/%X" + +#: access/transam/xlogreader.c:703 +#, c-format +msgid "invalid resource manager ID %u at %X/%X" +msgstr "невірний ID менеджера ресурсів %u в %X/%X" + +#: access/transam/xlogreader.c:717 access/transam/xlogreader.c:734 +#, c-format +msgid "record with incorrect prev-link %X/%X at %X/%X" +msgstr "запис з неправильним попереднім посиланням %X/%X на %X/%X" + +#: access/transam/xlogreader.c:771 +#, c-format +msgid "incorrect resource manager data checksum in record at %X/%X" +msgstr "некоректна контрольна сума даних менеджера ресурсів у запису по зсуву %X/%X" + +#: access/transam/xlogreader.c:808 +#, c-format +msgid "invalid magic number %04X in log segment %s, offset %u" +msgstr "невірне магічне число %04X в сегменті журналу %s, зсув %u" + +#: access/transam/xlogreader.c:822 access/transam/xlogreader.c:863 +#, c-format +msgid "invalid info bits %04X in log segment %s, offset %u" +msgstr "невірні інформаційні біти %04X в сегменті журналу %s, зсув %u" + +#: access/transam/xlogreader.c:837 +#, c-format +msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" +msgstr "WAL файл належить іншій системі баз даних: ідентифікатор системи баз даних де міститься WAL файл - %llu, а ідентифікатор системи баз даних pg_control - %llu" + +#: access/transam/xlogreader.c:845 +#, c-format +msgid "WAL file is from different database system: incorrect segment size in page header" +msgstr "Файл WAL належить іншій системі баз даних: некоректний розмір сегменту в заголовку сторінки" + +#: access/transam/xlogreader.c:851 +#, c-format +msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" +msgstr "Файл WAL належить іншій системі баз даних: некоректний XLOG_BLCKSZ в заголовку сторінки" + +#: access/transam/xlogreader.c:882 +#, c-format +msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" +msgstr "неочікуваний pageaddr %X/%X в сегменті журналу %s, зсув %u" + +#: access/transam/xlogreader.c:907 +#, c-format +msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" +msgstr "порушення послідовності ID лінії часу %u (після %u) в сегменті журналу %s, зсув %u" + +#: access/transam/xlogreader.c:1247 +#, c-format +msgid "out-of-order block_id %u at %X/%X" +msgstr "ідентифікатор блока %u out-of-order в позиції %X/%X" + +#: access/transam/xlogreader.c:1270 +#, c-format +msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" +msgstr "BKPBLOCK_HAS_DATA встановлений, але немає даних в позиції %X/%X" + +#: access/transam/xlogreader.c:1277 +#, c-format +msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" +msgstr "BKPBLOCK_HAS_DATA встановлений, але довжина даних дорівнює %u в позиції %X/%X" + +#: access/transam/xlogreader.c:1313 +#, c-format +msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" +msgstr "BKPIMAGE_HAS_HOLE встановлений, але для пропуску задані: зсув %u, довжина %u, при довжині образу блока %u в позиції %X/%X" + +#: access/transam/xlogreader.c:1329 +#, c-format +msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" +msgstr "BKPIMAGE_HAS_HOLE не встановлений, але для пропуску задані: зсув %u, довжина %u в позиції %X/%X" + +#: access/transam/xlogreader.c:1344 +#, c-format +msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" +msgstr "BKPIMAGE_IS_COMPRESSED встановлений, але довжина образу блока дорівнює %u в позиції %X/%X" + +#: access/transam/xlogreader.c:1359 +#, c-format +msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" +msgstr "ні BKPIMAGE_HAS_HOLE, ні BKPIMAGE_IS_COMPRESSED не встановлені, але довжина образу блока дорвінює %u в позиції %X/%X" + +#: access/transam/xlogreader.c:1375 +#, c-format +msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" +msgstr "BKPBLOCK_SAME_REL встановлений, але попереднє значення не задано в позиції %X/%X" + +#: access/transam/xlogreader.c:1387 +#, c-format +msgid "invalid block_id %u at %X/%X" +msgstr "невірний ідентифікатор блоку %u в позиції %X/%X" + +#: access/transam/xlogreader.c:1476 +#, c-format +msgid "record with invalid length at %X/%X" +msgstr "запис з невірною довжиною на %X/%X" + +#: access/transam/xlogreader.c:1565 +#, c-format +msgid "invalid compressed image at %X/%X, block %d" +msgstr "невірно стиснутий образ в позиції %X/%X, блок %d" + +#: bootstrap/bootstrap.c:271 +#, c-format +msgid "-X requires a power of two value between 1 MB and 1 GB" +msgstr "для -X необхідне число, яке дорівнює ступеню 2 в інтервалі від 1 МБ до 1 ГБ" + +#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:842 tcop/postgres.c:3705 +#, c-format +msgid "--%s requires a value" +msgstr "--%s необхідне значення" + +#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:847 tcop/postgres.c:3710 +#, c-format +msgid "-c %s requires a value" +msgstr "-c %s необхідне значення" + +#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:859 +#: postmaster/postmaster.c:872 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" + +#: bootstrap/bootstrap.c:313 +#, c-format +msgid "%s: invalid command-line arguments\n" +msgstr "%s: невірні аргументи командного рядка\n" + +#: catalog/aclchk.c:181 +#, c-format +msgid "grant options can only be granted to roles" +msgstr "право надання прав можна надавати тільки ролям" + +#: catalog/aclchk.c:300 +#, c-format +msgid "no privileges were granted for column \"%s\" of relation \"%s\"" +msgstr "для стовпця \"%s\" відношення \"%s\" не призначено ніяких прав" + +#: catalog/aclchk.c:305 +#, c-format +msgid "no privileges were granted for \"%s\"" +msgstr "для \"%s\" не призначено ніяких прав" + +#: catalog/aclchk.c:313 +#, c-format +msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" +msgstr "для стовпця \"%s\" відношення \"%s\" призначено не всі права" + +#: catalog/aclchk.c:318 +#, c-format +msgid "not all privileges were granted for \"%s\"" +msgstr "для \"%s\" призначено не всі права" + +#: catalog/aclchk.c:329 +#, c-format +msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" +msgstr "для стовпця \"%s\" відношення \"%s\" жодні права не можуть бути відкликані" + +#: catalog/aclchk.c:334 +#, c-format +msgid "no privileges could be revoked for \"%s\"" +msgstr "для \"%s\" жодні права не можуть бути відкликані" + +#: catalog/aclchk.c:342 +#, c-format +msgid "not all privileges could be revoked for column \"%s\" of relation \"%s\"" +msgstr "для стовпця \"%s\" відношення \"%s\" не всі права можуть бути відкликані" + +#: catalog/aclchk.c:347 +#, c-format +msgid "not all privileges could be revoked for \"%s\"" +msgstr "для \"%s\" не всі права можуть бути відкликані" + +#: catalog/aclchk.c:430 catalog/aclchk.c:973 +#, c-format +msgid "invalid privilege type %s for relation" +msgstr "недійсний тип права %s для відношення" + +#: catalog/aclchk.c:434 catalog/aclchk.c:977 +#, c-format +msgid "invalid privilege type %s for sequence" +msgstr "невірний тип права %s для послідовності" + +#: catalog/aclchk.c:438 +#, c-format +msgid "invalid privilege type %s for database" +msgstr "недійсний тип права %s для бази даних" + +#: catalog/aclchk.c:442 +#, c-format +msgid "invalid privilege type %s for domain" +msgstr "недійсний тип права %s для домену" + +#: catalog/aclchk.c:446 catalog/aclchk.c:981 +#, c-format +msgid "invalid privilege type %s for function" +msgstr "недійсний тип права %s для функції" + +#: catalog/aclchk.c:450 +#, c-format +msgid "invalid privilege type %s for language" +msgstr "недійсний тип права %s для мови" + +#: catalog/aclchk.c:454 +#, c-format +msgid "invalid privilege type %s for large object" +msgstr "недійсний тип права %s для великого об'єкту" + +#: catalog/aclchk.c:458 catalog/aclchk.c:997 +#, c-format +msgid "invalid privilege type %s for schema" +msgstr "недійсний тип права %s для схеми" + +#: catalog/aclchk.c:462 catalog/aclchk.c:985 +#, c-format +msgid "invalid privilege type %s for procedure" +msgstr "недійсний тип права %s для процедури" + +#: catalog/aclchk.c:466 catalog/aclchk.c:989 +#, c-format +msgid "invalid privilege type %s for routine" +msgstr "недійсний тип права %s для підпрограми" + +#: catalog/aclchk.c:470 +#, c-format +msgid "invalid privilege type %s for tablespace" +msgstr "недійсний тип права %s для табличного простору" + +#: catalog/aclchk.c:474 catalog/aclchk.c:993 +#, c-format +msgid "invalid privilege type %s for type" +msgstr "недійсний тип права %s для типу" + +#: catalog/aclchk.c:478 +#, c-format +msgid "invalid privilege type %s for foreign-data wrapper" +msgstr "недійсний тип права %s для джерела сторонніх даних" + +#: catalog/aclchk.c:482 +#, c-format +msgid "invalid privilege type %s for foreign server" +msgstr "недійсний тип права %s для стороннього серверу" + +#: catalog/aclchk.c:521 +#, c-format +msgid "column privileges are only valid for relations" +msgstr "права стовпця дійсні тільки для відношень" + +#: catalog/aclchk.c:681 catalog/aclchk.c:4100 catalog/aclchk.c:4882 +#: catalog/objectaddress.c:965 catalog/pg_largeobject.c:116 +#: storage/large_object/inv_api.c:285 +#, c-format +msgid "large object %u does not exist" +msgstr "великий об'єкт %u не існує" + +#: catalog/aclchk.c:910 catalog/aclchk.c:919 commands/collationcmds.c:118 +#: commands/copy.c:1134 commands/copy.c:1154 commands/copy.c:1163 +#: commands/copy.c:1172 commands/copy.c:1181 commands/copy.c:1190 +#: commands/copy.c:1199 commands/copy.c:1208 commands/copy.c:1226 +#: commands/copy.c:1242 commands/copy.c:1262 commands/copy.c:1279 +#: commands/dbcommands.c:157 commands/dbcommands.c:166 +#: commands/dbcommands.c:175 commands/dbcommands.c:184 +#: commands/dbcommands.c:193 commands/dbcommands.c:202 +#: commands/dbcommands.c:211 commands/dbcommands.c:220 +#: commands/dbcommands.c:229 commands/dbcommands.c:238 +#: commands/dbcommands.c:260 commands/dbcommands.c:1502 +#: commands/dbcommands.c:1511 commands/dbcommands.c:1520 +#: commands/dbcommands.c:1529 commands/extension.c:1735 +#: commands/extension.c:1745 commands/extension.c:1755 +#: commands/extension.c:3055 commands/foreigncmds.c:539 +#: commands/foreigncmds.c:548 commands/functioncmds.c:570 +#: commands/functioncmds.c:736 commands/functioncmds.c:745 +#: commands/functioncmds.c:754 commands/functioncmds.c:763 +#: commands/functioncmds.c:2014 commands/functioncmds.c:2022 +#: commands/publicationcmds.c:90 commands/publicationcmds.c:133 +#: commands/sequence.c:1267 commands/sequence.c:1277 commands/sequence.c:1287 +#: commands/sequence.c:1297 commands/sequence.c:1307 commands/sequence.c:1317 +#: commands/sequence.c:1327 commands/sequence.c:1337 commands/sequence.c:1347 +#: commands/subscriptioncmds.c:104 commands/subscriptioncmds.c:114 +#: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 +#: commands/subscriptioncmds.c:148 commands/subscriptioncmds.c:159 +#: commands/subscriptioncmds.c:173 commands/tablecmds.c:7102 +#: commands/typecmds.c:322 commands/typecmds.c:1355 commands/typecmds.c:1364 +#: commands/typecmds.c:1372 commands/typecmds.c:1380 commands/typecmds.c:1388 +#: commands/user.c:133 commands/user.c:147 commands/user.c:156 +#: commands/user.c:165 commands/user.c:174 commands/user.c:183 +#: commands/user.c:192 commands/user.c:201 commands/user.c:210 +#: commands/user.c:219 commands/user.c:228 commands/user.c:237 +#: commands/user.c:246 commands/user.c:582 commands/user.c:590 +#: commands/user.c:598 commands/user.c:606 commands/user.c:614 +#: commands/user.c:622 commands/user.c:630 commands/user.c:638 +#: commands/user.c:647 commands/user.c:655 commands/user.c:663 +#: parser/parse_utilcmd.c:387 replication/pgoutput/pgoutput.c:141 +#: replication/pgoutput/pgoutput.c:162 replication/walsender.c:886 +#: replication/walsender.c:897 replication/walsender.c:907 +#, c-format +msgid "conflicting or redundant options" +msgstr "конфліктуючі або надлишкові параметри" + +#: catalog/aclchk.c:1030 +#, c-format +msgid "default privileges cannot be set for columns" +msgstr "права за замовчуванням не можна встановити для стовпців" + +#: catalog/aclchk.c:1190 +#, c-format +msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" +msgstr "речення IN SCHEMA не можна використати в GRANT/REVOKE ON SCHEMAS" + +#: catalog/aclchk.c:1558 catalog/catalog.c:506 catalog/objectaddress.c:1427 +#: commands/analyze.c:389 commands/copy.c:5080 commands/sequence.c:1702 +#: commands/tablecmds.c:6578 commands/tablecmds.c:6721 +#: commands/tablecmds.c:6771 commands/tablecmds.c:6845 +#: commands/tablecmds.c:6915 commands/tablecmds.c:7027 +#: commands/tablecmds.c:7121 commands/tablecmds.c:7180 +#: commands/tablecmds.c:7253 commands/tablecmds.c:7282 +#: commands/tablecmds.c:7437 commands/tablecmds.c:7519 +#: commands/tablecmds.c:7612 commands/tablecmds.c:7767 +#: commands/tablecmds.c:10972 commands/tablecmds.c:11154 +#: commands/tablecmds.c:11314 commands/tablecmds.c:12397 commands/trigger.c:876 +#: parser/analyze.c:2339 parser/parse_relation.c:713 parser/parse_target.c:1036 +#: parser/parse_type.c:144 parser/parse_utilcmd.c:3289 +#: parser/parse_utilcmd.c:3324 parser/parse_utilcmd.c:3366 utils/adt/acl.c:2870 +#: utils/adt/ruleutils.c:2535 +#, c-format +msgid "column \"%s\" of relation \"%s\" does not exist" +msgstr "стовпець \"%s\" відношення \"%s\" не існує" + +#: catalog/aclchk.c:1821 catalog/objectaddress.c:1267 commands/sequence.c:1140 +#: commands/tablecmds.c:236 commands/tablecmds.c:15706 utils/adt/acl.c:2060 +#: utils/adt/acl.c:2090 utils/adt/acl.c:2122 utils/adt/acl.c:2154 +#: utils/adt/acl.c:2182 utils/adt/acl.c:2212 +#, c-format +msgid "\"%s\" is not a sequence" +msgstr "\"%s\" не є послідовністю" + +#: catalog/aclchk.c:1859 +#, c-format +msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" +msgstr "послідовність \"%s\" підтримує тільки права USAGE, SELECT і UPDATE" + +#: catalog/aclchk.c:1876 +#, c-format +msgid "invalid privilege type %s for table" +msgstr "недійсний тип права %s для таблиці" + +#: catalog/aclchk.c:2042 +#, c-format +msgid "invalid privilege type %s for column" +msgstr "недійсний тип права %s для стовпця" + +#: catalog/aclchk.c:2055 +#, c-format +msgid "sequence \"%s\" only supports SELECT column privileges" +msgstr "послідовність \"%s\" підтримує тільки право стовпця SELECT" + +#: catalog/aclchk.c:2637 +#, c-format +msgid "language \"%s\" is not trusted" +msgstr "мова \"%s\" не є довіреною" + +#: catalog/aclchk.c:2639 +#, c-format +msgid "GRANT and REVOKE are not allowed on untrusted languages, because only superusers can use untrusted languages." +msgstr "GRANT і REVOKE не допустимі для недовірених мов, тому що тільки суперкористувачі можуть використовувати недовірені мови." + +#: catalog/aclchk.c:3153 +#, c-format +msgid "cannot set privileges of array types" +msgstr "не можна встановити права для типів масивів" + +#: catalog/aclchk.c:3154 +#, c-format +msgid "Set the privileges of the element type instead." +msgstr "Замість цього встановіть права для типу елементу." + +#: catalog/aclchk.c:3161 catalog/objectaddress.c:1561 +#, c-format +msgid "\"%s\" is not a domain" +msgstr "\"%s\" не є доменом" + +#: catalog/aclchk.c:3281 +#, c-format +msgid "unrecognized privilege type \"%s\"" +msgstr "нерозпізнане право \"%s\"" + +#: catalog/aclchk.c:3342 +#, c-format +msgid "permission denied for aggregate %s" +msgstr "немає дозволу для агрегату %s" + +#: catalog/aclchk.c:3345 +#, c-format +msgid "permission denied for collation %s" +msgstr "немає дозволу для сортування %s" + +#: catalog/aclchk.c:3348 +#, c-format +msgid "permission denied for column %s" +msgstr "немає дозволу для стовпця %s" + +#: catalog/aclchk.c:3351 +#, c-format +msgid "permission denied for conversion %s" +msgstr "немає дозволу для перетворення %s" + +#: catalog/aclchk.c:3354 +#, c-format +msgid "permission denied for database %s" +msgstr "немає доступу для бази даних %s" + +#: catalog/aclchk.c:3357 +#, c-format +msgid "permission denied for domain %s" +msgstr "немає дозволу для домену %s" + +#: catalog/aclchk.c:3360 +#, c-format +msgid "permission denied for event trigger %s" +msgstr "немає дозволу для тригера подій %s" + +#: catalog/aclchk.c:3363 +#, c-format +msgid "permission denied for extension %s" +msgstr "немає дозволу для розширення %s" + +#: catalog/aclchk.c:3366 +#, c-format +msgid "permission denied for foreign-data wrapper %s" +msgstr "немає дозволу для джерела сторонніх даних %s" + +#: catalog/aclchk.c:3369 +#, c-format +msgid "permission denied for foreign server %s" +msgstr "немає дозволу для стороннього серверу %s" + +#: catalog/aclchk.c:3372 +#, c-format +msgid "permission denied for foreign table %s" +msgstr "немає дозволу для сторонньої таблиці %s" + +#: catalog/aclchk.c:3375 +#, c-format +msgid "permission denied for function %s" +msgstr "немає дозволу для функції %s" + +#: catalog/aclchk.c:3378 +#, c-format +msgid "permission denied for index %s" +msgstr "немає дозволу для індексу %s" + +#: catalog/aclchk.c:3381 +#, c-format +msgid "permission denied for language %s" +msgstr "немає дозволу для мови %s" + +#: catalog/aclchk.c:3384 +#, c-format +msgid "permission denied for large object %s" +msgstr "немає дозволу для великого об'єкту %s" + +#: catalog/aclchk.c:3387 +#, c-format +msgid "permission denied for materialized view %s" +msgstr "немає дозволу для матеріалізованого подання %s" + +#: catalog/aclchk.c:3390 +#, c-format +msgid "permission denied for operator class %s" +msgstr "немає дозволу для класу операторів %s" + +#: catalog/aclchk.c:3393 +#, c-format +msgid "permission denied for operator %s" +msgstr "немає дозволу для оператора %s" + +#: catalog/aclchk.c:3396 +#, c-format +msgid "permission denied for operator family %s" +msgstr "немає дозволу для сімейства операторів %s" + +#: catalog/aclchk.c:3399 +#, c-format +msgid "permission denied for policy %s" +msgstr "немає дозволу для політики %s" + +#: catalog/aclchk.c:3402 +#, c-format +msgid "permission denied for procedure %s" +msgstr "немає дозволу для процедури %s" + +#: catalog/aclchk.c:3405 +#, c-format +msgid "permission denied for publication %s" +msgstr "немає дозволу для публікації %s" + +#: catalog/aclchk.c:3408 +#, c-format +msgid "permission denied for routine %s" +msgstr "немає дозволу для підпрограми %s" + +#: catalog/aclchk.c:3411 +#, c-format +msgid "permission denied for schema %s" +msgstr "немає дозволу для схеми %s" + +#: catalog/aclchk.c:3414 commands/sequence.c:610 commands/sequence.c:844 +#: commands/sequence.c:886 commands/sequence.c:927 commands/sequence.c:1800 +#: commands/sequence.c:1864 +#, c-format +msgid "permission denied for sequence %s" +msgstr "немає дозволу для послідовності %s" + +#: catalog/aclchk.c:3417 +#, c-format +msgid "permission denied for statistics object %s" +msgstr "немає дозволу для об'єкту статистики %s" + +#: catalog/aclchk.c:3420 +#, c-format +msgid "permission denied for subscription %s" +msgstr "немає дозволу для підписки %s" + +#: catalog/aclchk.c:3423 +#, c-format +msgid "permission denied for table %s" +msgstr "немає дозволу для таблиці %s" + +#: catalog/aclchk.c:3426 +#, c-format +msgid "permission denied for tablespace %s" +msgstr "немає дозволу для табличного простору %s" + +#: catalog/aclchk.c:3429 +#, c-format +msgid "permission denied for text search configuration %s" +msgstr "немає дозволу для конфігурації текстового пошуку %s" + +#: catalog/aclchk.c:3432 +#, c-format +msgid "permission denied for text search dictionary %s" +msgstr "немає дозволу для словника текстового пошуку %s" + +#: catalog/aclchk.c:3435 +#, c-format +msgid "permission denied for type %s" +msgstr "немає дозволу для типу %s" + +#: catalog/aclchk.c:3438 +#, c-format +msgid "permission denied for view %s" +msgstr "немає дозволу для подання %s" + +#: catalog/aclchk.c:3473 +#, c-format +msgid "must be owner of aggregate %s" +msgstr "треба бути власником агрегату %s" + +#: catalog/aclchk.c:3476 +#, c-format +msgid "must be owner of collation %s" +msgstr "треба бути власником правил сортування %s" + +#: catalog/aclchk.c:3479 +#, c-format +msgid "must be owner of conversion %s" +msgstr "треба бути власником перетворення %s" + +#: catalog/aclchk.c:3482 +#, c-format +msgid "must be owner of database %s" +msgstr "треба бути власником бази даних %s" + +#: catalog/aclchk.c:3485 +#, c-format +msgid "must be owner of domain %s" +msgstr "треба бути власником домену %s" + +#: catalog/aclchk.c:3488 +#, c-format +msgid "must be owner of event trigger %s" +msgstr "треба бути власником тригеру подій %s" + +#: catalog/aclchk.c:3491 +#, c-format +msgid "must be owner of extension %s" +msgstr "треба бути власником розширення %s" + +#: catalog/aclchk.c:3494 +#, c-format +msgid "must be owner of foreign-data wrapper %s" +msgstr "треба бути власником джерела сторонніх даних %s" + +#: catalog/aclchk.c:3497 +#, c-format +msgid "must be owner of foreign server %s" +msgstr "треба бути власником стороннього серверу %s" + +#: catalog/aclchk.c:3500 +#, c-format +msgid "must be owner of foreign table %s" +msgstr "треба бути власником сторонньої таблиці %s" + +#: catalog/aclchk.c:3503 +#, c-format +msgid "must be owner of function %s" +msgstr "треба бути власником функції %s" + +#: catalog/aclchk.c:3506 +#, c-format +msgid "must be owner of index %s" +msgstr "треба бути власником індексу %s" + +#: catalog/aclchk.c:3509 +#, c-format +msgid "must be owner of language %s" +msgstr "треба бути власником мови %s" + +#: catalog/aclchk.c:3512 +#, c-format +msgid "must be owner of large object %s" +msgstr "треба бути власником великого об'єкту %s" + +#: catalog/aclchk.c:3515 +#, c-format +msgid "must be owner of materialized view %s" +msgstr "треба бути власником матеріалізованого подання %s" + +#: catalog/aclchk.c:3518 +#, c-format +msgid "must be owner of operator class %s" +msgstr "треба бути власником класу операторів %s" + +#: catalog/aclchk.c:3521 +#, c-format +msgid "must be owner of operator %s" +msgstr "треба бути власником оператора %s" + +#: catalog/aclchk.c:3524 +#, c-format +msgid "must be owner of operator family %s" +msgstr "треба бути власником сімейства операторів %s" + +#: catalog/aclchk.c:3527 +#, c-format +msgid "must be owner of procedure %s" +msgstr "треба бути власником процедури %s" + +#: catalog/aclchk.c:3530 +#, c-format +msgid "must be owner of publication %s" +msgstr "треба бути власником публікації %s" + +#: catalog/aclchk.c:3533 +#, c-format +msgid "must be owner of routine %s" +msgstr "треба бути власником підпрограми %s" + +#: catalog/aclchk.c:3536 +#, c-format +msgid "must be owner of sequence %s" +msgstr "треба бути власником послідовності %s" + +#: catalog/aclchk.c:3539 +#, c-format +msgid "must be owner of subscription %s" +msgstr "треба бути власником підписки %s" + +#: catalog/aclchk.c:3542 +#, c-format +msgid "must be owner of table %s" +msgstr "треба бути власником таблиці %s" + +#: catalog/aclchk.c:3545 +#, c-format +msgid "must be owner of type %s" +msgstr "треба бути власником типу %s" + +#: catalog/aclchk.c:3548 +#, c-format +msgid "must be owner of view %s" +msgstr "треба бути власником подання %s" + +#: catalog/aclchk.c:3551 +#, c-format +msgid "must be owner of schema %s" +msgstr "треба бути власником схеми %s" + +#: catalog/aclchk.c:3554 +#, c-format +msgid "must be owner of statistics object %s" +msgstr "треба бути власником об'єкту статистики %s" + +#: catalog/aclchk.c:3557 +#, c-format +msgid "must be owner of tablespace %s" +msgstr "треба бути власником табличного простору %s" + +#: catalog/aclchk.c:3560 +#, c-format +msgid "must be owner of text search configuration %s" +msgstr "треба бути власником конфігурації текстового пошуку %s" + +#: catalog/aclchk.c:3563 +#, c-format +msgid "must be owner of text search dictionary %s" +msgstr "треба бути власником словника текстового пошуку %s" + +#: catalog/aclchk.c:3577 +#, c-format +msgid "must be owner of relation %s" +msgstr "треба бути власником відношення %s" + +#: catalog/aclchk.c:3621 +#, c-format +msgid "permission denied for column \"%s\" of relation \"%s\"" +msgstr "немає дозволу для стовпця \"%s\" відношення \"%s\"" + +#: catalog/aclchk.c:3742 catalog/aclchk.c:3750 +#, c-format +msgid "attribute %d of relation with OID %u does not exist" +msgstr "атрибут %d відношення з OID %u не існує" + +#: catalog/aclchk.c:3823 catalog/aclchk.c:4733 +#, c-format +msgid "relation with OID %u does not exist" +msgstr "відношення з OID %u не існує" + +#: catalog/aclchk.c:3913 catalog/aclchk.c:5151 +#, c-format +msgid "database with OID %u does not exist" +msgstr "база даних з OID %u не існує" + +#: catalog/aclchk.c:3967 catalog/aclchk.c:4811 tcop/fastpath.c:221 +#: utils/fmgr/fmgr.c:2055 +#, c-format +msgid "function with OID %u does not exist" +msgstr "функція з OID %u не існує" + +#: catalog/aclchk.c:4021 catalog/aclchk.c:4837 +#, c-format +msgid "language with OID %u does not exist" +msgstr "мова з OID %u не існує" + +#: catalog/aclchk.c:4185 catalog/aclchk.c:4909 +#, c-format +msgid "schema with OID %u does not exist" +msgstr "схема з OID %u не існує" + +#: catalog/aclchk.c:4239 catalog/aclchk.c:4936 utils/adt/genfile.c:686 +#, c-format +msgid "tablespace with OID %u does not exist" +msgstr "табличний простір з OID %u не існує" + +#: catalog/aclchk.c:4298 catalog/aclchk.c:5070 commands/foreigncmds.c:325 +#, c-format +msgid "foreign-data wrapper with OID %u does not exist" +msgstr "джерело сторонніх даних з OID %u не існує" + +#: catalog/aclchk.c:4360 catalog/aclchk.c:5097 commands/foreigncmds.c:462 +#, c-format +msgid "foreign server with OID %u does not exist" +msgstr "стороннього серверу з OID %u не усніє" + +#: catalog/aclchk.c:4420 catalog/aclchk.c:4759 utils/cache/typcache.c:378 +#: utils/cache/typcache.c:432 +#, c-format +msgid "type with OID %u does not exist" +msgstr "тип з OID %u не існує" + +#: catalog/aclchk.c:4785 +#, c-format +msgid "operator with OID %u does not exist" +msgstr "оператора з OID %u не існує" + +#: catalog/aclchk.c:4962 +#, c-format +msgid "operator class with OID %u does not exist" +msgstr "класу операторів з OID %u не існує" + +#: catalog/aclchk.c:4989 +#, c-format +msgid "operator family with OID %u does not exist" +msgstr "сімейства операторів з OID %u не існує" + +#: catalog/aclchk.c:5016 +#, c-format +msgid "text search dictionary with OID %u does not exist" +msgstr "словник текстового пошуку з OID %u не існує" + +#: catalog/aclchk.c:5043 +#, c-format +msgid "text search configuration with OID %u does not exist" +msgstr "конфігурація текстового пошуку %u з OID не існує" + +#: catalog/aclchk.c:5124 commands/event_trigger.c:475 +#, c-format +msgid "event trigger with OID %u does not exist" +msgstr "тригер подій %u з OID не існує" + +#: catalog/aclchk.c:5177 commands/collationcmds.c:367 +#, c-format +msgid "collation with OID %u does not exist" +msgstr "порядку сортування %u з OID не існує" + +#: catalog/aclchk.c:5203 +#, c-format +msgid "conversion with OID %u does not exist" +msgstr "перетворення %u з OID не існує" + +#: catalog/aclchk.c:5244 +#, c-format +msgid "extension with OID %u does not exist" +msgstr "розширення %u з OID не існує" + +#: catalog/aclchk.c:5271 commands/publicationcmds.c:794 +#, c-format +msgid "publication with OID %u does not exist" +msgstr "публікації %u з OID не існує" + +#: catalog/aclchk.c:5297 commands/subscriptioncmds.c:1112 +#, c-format +msgid "subscription with OID %u does not exist" +msgstr "підписки %u з OID не існує" + +#: catalog/aclchk.c:5323 +#, c-format +msgid "statistics object with OID %u does not exist" +msgstr "об'єкту статистики %u з OID не існує" + +#: catalog/catalog.c:485 +#, c-format +msgid "must be superuser to call pg_nextoid()" +msgstr "для виклику pg_nextoid() потрібно бути суперкористувачем" + +#: catalog/catalog.c:493 +#, c-format +msgid "pg_nextoid() can only be used on system catalogs" +msgstr "pg_nextoid() можна використовувати лише для системних каталогів" + +#: catalog/catalog.c:498 parser/parse_utilcmd.c:2191 +#, c-format +msgid "index \"%s\" does not belong to table \"%s\"" +msgstr "індекс \"%s\" не належить таблиці \"%s\"" + +#: catalog/catalog.c:515 +#, c-format +msgid "column \"%s\" is not of type oid" +msgstr "стовпець \"%s\" повинен мати тип oid" + +#: catalog/catalog.c:522 +#, c-format +msgid "index \"%s\" is not the index for column \"%s\"" +msgstr "індекс \"%s\" не є індексом для стовпця \"%s\"" + +#: catalog/dependency.c:823 catalog/dependency.c:1061 +#, c-format +msgid "cannot drop %s because %s requires it" +msgstr "не вдалося видалити %s, оскільки %s потребує його" + +#: catalog/dependency.c:825 catalog/dependency.c:1063 +#, c-format +msgid "You can drop %s instead." +msgstr "Ви можете видалити %s замість цього." + +#: catalog/dependency.c:933 catalog/pg_shdepend.c:640 +#, c-format +msgid "cannot drop %s because it is required by the database system" +msgstr "не вдалося видалити %s, оскільки він потрібний системі бази даних" + +#: catalog/dependency.c:1129 +#, c-format +msgid "drop auto-cascades to %s" +msgstr "видалення автоматично поширюється (auto-cascades) на об'єкт %s" + +#: catalog/dependency.c:1141 catalog/dependency.c:1150 +#, c-format +msgid "%s depends on %s" +msgstr "%s залежить від %s" + +#: catalog/dependency.c:1162 catalog/dependency.c:1171 +#, c-format +msgid "drop cascades to %s" +msgstr "видалення поширюється (cascades) на об'єкт %s" + +#: catalog/dependency.c:1179 catalog/pg_shdepend.c:769 +#, c-format +msgid "\n" +"and %d other object (see server log for list)" +msgid_plural "\n" +"and %d other objects (see server log for list)" +msgstr[0] "\n" +"і ще %d інших об'єктів (див. список у протоколі серверу)" +msgstr[1] "\n" +"і ще %d інші об'єкти (див. список у протоколі серверу)" +msgstr[2] "\n" +"і ще %d інших об'єктів (див. список у протоколі серверу)" +msgstr[3] "\n" +"і ще %d інші об'єкти (див. список у протоколі сервера)" + +#: catalog/dependency.c:1191 +#, c-format +msgid "cannot drop %s because other objects depend on it" +msgstr "неможливо видалити %s, тому що від нього залежать інші об'єкти" + +#: catalog/dependency.c:1193 catalog/dependency.c:1194 +#: catalog/dependency.c:1200 catalog/dependency.c:1201 +#: catalog/dependency.c:1212 catalog/dependency.c:1213 +#: commands/tablecmds.c:1249 commands/tablecmds.c:13016 commands/user.c:1093 +#: commands/view.c:495 libpq/auth.c:334 replication/syncrep.c:1032 +#: storage/lmgr/deadlock.c:1154 storage/lmgr/proc.c:1350 utils/adt/acl.c:5329 +#: utils/adt/jsonfuncs.c:614 utils/adt/jsonfuncs.c:620 utils/misc/guc.c:6771 +#: utils/misc/guc.c:6807 utils/misc/guc.c:6877 utils/misc/guc.c:10947 +#: utils/misc/guc.c:10981 utils/misc/guc.c:11015 utils/misc/guc.c:11049 +#: utils/misc/guc.c:11084 +#, c-format +msgid "%s" +msgstr "%s" + +#: catalog/dependency.c:1195 catalog/dependency.c:1202 +#, c-format +msgid "Use DROP ... CASCADE to drop the dependent objects too." +msgstr "Використайте DROP ... CASCADE для видалення залежних об'єктів також." + +#: catalog/dependency.c:1199 +#, c-format +msgid "cannot drop desired object(s) because other objects depend on them" +msgstr "не можна видалити бажаний(-і) об'єкт(-и) тому, що інші об'єкти залежні від нього(них)" + +#. translator: %d always has a value larger than 1 +#: catalog/dependency.c:1208 +#, c-format +msgid "drop cascades to %d other object" +msgid_plural "drop cascades to %d other objects" +msgstr[0] "видалення поширюється (cascades) на ще %d інший об'єкт" +msgstr[1] "видалення поширюється (cascades) на ще %d інші об'єкти" +msgstr[2] "видалення поширюється (cascades) на ще %d інших об'єктів" +msgstr[3] "видалення поширюється (cascades) на ще %d інших об'єктів" + +#: catalog/dependency.c:1875 +#, c-format +msgid "constant of the type %s cannot be used here" +msgstr "константа типу %s не може бути використана тут" + +#: catalog/heap.c:330 +#, c-format +msgid "permission denied to create \"%s.%s\"" +msgstr "немає дозволу для створення \"%s.%s\"" + +#: catalog/heap.c:332 +#, c-format +msgid "System catalog modifications are currently disallowed." +msgstr "Змінення системного каталогу наразі заборонено." + +#: catalog/heap.c:500 commands/tablecmds.c:2145 commands/tablecmds.c:2745 +#: commands/tablecmds.c:6175 +#, c-format +msgid "tables can have at most %d columns" +msgstr "таблиці можуть містити максимум %d стовпців" + +#: catalog/heap.c:518 commands/tablecmds.c:6468 +#, c-format +msgid "column name \"%s\" conflicts with a system column name" +msgstr "ім'я стовпця \"%s\" конфліктує з системним іменем стовпця" + +#: catalog/heap.c:534 +#, c-format +msgid "column name \"%s\" specified more than once" +msgstr "ім'я стовпця \"%s\" вказано кілька разів" + +#. translator: first %s is an integer not a name +#: catalog/heap.c:609 +#, c-format +msgid "partition key column %s has pseudo-type %s" +msgstr "стовпець ключа секціонування %s має псевдотип %s" + +#: catalog/heap.c:614 +#, c-format +msgid "column \"%s\" has pseudo-type %s" +msgstr "стовпець \"%s\" має псевдо-тип %s" + +#: catalog/heap.c:645 +#, c-format +msgid "composite type %s cannot be made a member of itself" +msgstr "складений тип %s не може містити сам себе" + +#. translator: first %s is an integer not a name +#: catalog/heap.c:700 +#, c-format +msgid "no collation was derived for partition key column %s with collatable type %s" +msgstr "для стовпця ключа секціонування \"%s\" з сортируючим типом %s не вдалося отримати параметри сортування" + +#: catalog/heap.c:706 commands/createas.c:203 commands/createas.c:486 +#, c-format +msgid "no collation was derived for column \"%s\" with collatable type %s" +msgstr "для стовпця \"%s\" із сортувальним типом %s не вдалося отримати параметри сортування" + +#: catalog/heap.c:1155 catalog/index.c:865 commands/tablecmds.c:3520 +#, c-format +msgid "relation \"%s\" already exists" +msgstr "відношення \"%s\" вже існує" + +#: catalog/heap.c:1171 catalog/pg_type.c:428 catalog/pg_type.c:775 +#: commands/typecmds.c:238 commands/typecmds.c:250 commands/typecmds.c:719 +#: commands/typecmds.c:1125 commands/typecmds.c:1337 commands/typecmds.c:2124 +#, c-format +msgid "type \"%s\" already exists" +msgstr "тип \"%s\" вже існує" + +#: catalog/heap.c:1172 +#, c-format +msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." +msgstr "З відношенням вже пов'язаний тип з таким самим іменем, тому виберіть ім'я, яке не буде конфліктувати з типами, що існують." + +#: catalog/heap.c:1201 +#, c-format +msgid "pg_class heap OID value not set when in binary upgrade mode" +msgstr "значення OID в pg_class не задано в режимі двійкового оновлення" + +#: catalog/heap.c:2400 +#, c-format +msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" +msgstr "не можна додати обмеження NO INHERIT до секціонованої таблиці \"%s\"" + +#: catalog/heap.c:2670 +#, c-format +msgid "check constraint \"%s\" already exists" +msgstr "обмеження перевірки \"%s\" вже інсує" + +#: catalog/heap.c:2840 catalog/index.c:879 catalog/pg_constraint.c:668 +#: commands/tablecmds.c:8117 +#, c-format +msgid "constraint \"%s\" for relation \"%s\" already exists" +msgstr "обмеження \"%s\" відношення \"%s\" вже існує" + +#: catalog/heap.c:2847 +#, c-format +msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" +msgstr "обмеження \"%s\" конфліктує з неуспадкованим обмеженням відношення \"%s\"" + +#: catalog/heap.c:2858 +#, c-format +msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" +msgstr "обмеження \"%s\" конфліктує з успадкованим обмеженням відношення \"%s\"" + +#: catalog/heap.c:2868 +#, c-format +msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" +msgstr "обмеження \"%s\" конфліктує з обмеженням NOT VALID в відношенні \"%s\"" + +#: catalog/heap.c:2873 +#, c-format +msgid "merging constraint \"%s\" with inherited definition" +msgstr "злиття обмеження \"%s\" з успадкованим визначенням" + +#: catalog/heap.c:2975 +#, c-format +msgid "cannot use generated column \"%s\" in column generation expression" +msgstr "в виразі створення стовпця не можна використовувати згенерований стовпець \"%s\" " + +#: catalog/heap.c:2977 +#, c-format +msgid "A generated column cannot reference another generated column." +msgstr "Згенерований стовпець не може посилатися на інший згенерований стовпець." + +#: catalog/heap.c:3029 +#, c-format +msgid "generation expression is not immutable" +msgstr "вираз генерації не є незмінним" + +#: catalog/heap.c:3057 rewrite/rewriteHandler.c:1192 +#, c-format +msgid "column \"%s\" is of type %s but default expression is of type %s" +msgstr "стовпець \"%s\" має тип %s, але тип виразу за замовчуванням %s" + +#: catalog/heap.c:3062 commands/prepare.c:367 parser/parse_node.c:412 +#: parser/parse_target.c:589 parser/parse_target.c:869 +#: parser/parse_target.c:879 rewrite/rewriteHandler.c:1197 +#, c-format +msgid "You will need to rewrite or cast the expression." +msgstr "Потрібно буде переписати або привести вираз." + +#: catalog/heap.c:3109 +#, c-format +msgid "only table \"%s\" can be referenced in check constraint" +msgstr "в обмеженні-перевірці можна посилатися лише на таблицю \"%s\"" + +#: catalog/heap.c:3366 +#, c-format +msgid "unsupported ON COMMIT and foreign key combination" +msgstr "непідтримуване поєднання зовнішнього ключа з ON COMMIT" + +#: catalog/heap.c:3367 +#, c-format +msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." +msgstr "Таблиця \"%s\" посилається на \"%s\", але вони не мають той же параметр ON COMMIT." + +#: catalog/heap.c:3372 +#, c-format +msgid "cannot truncate a table referenced in a foreign key constraint" +msgstr "скоротити таблицю, на яку посилається зовнішній ключ, не можливо" + +#: catalog/heap.c:3373 +#, c-format +msgid "Table \"%s\" references \"%s\"." +msgstr "Таблиця \"%s\" посилається на \"%s\"." + +#: catalog/heap.c:3375 +#, c-format +msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." +msgstr "Скоротіть таблицю \"%s\" паралельно або використайте TRUNCATE ... CASCADE." + +#: catalog/index.c:219 parser/parse_utilcmd.c:2097 +#, c-format +msgid "multiple primary keys for table \"%s\" are not allowed" +msgstr "таблиця \"%s\" не може містити кілька первинних ключів" + +#: catalog/index.c:237 +#, c-format +msgid "primary keys cannot be expressions" +msgstr "первинні ключі не можуть бути виразами" + +#: catalog/index.c:254 +#, c-format +msgid "primary key column \"%s\" is not marked NOT NULL" +msgstr "стовпець первинного ключа \"%s\" не позначений як NOT NULL" + +#: catalog/index.c:764 catalog/index.c:1843 +#, c-format +msgid "user-defined indexes on system catalog tables are not supported" +msgstr "користувацькі індекси в таблицях системного каталогу не підтримуються" + +#: catalog/index.c:804 +#, c-format +msgid "nondeterministic collations are not supported for operator class \"%s\"" +msgstr "недетерміновані правила сортування не підтримуються для класу операторів \"%s\"" + +#: catalog/index.c:819 +#, c-format +msgid "concurrent index creation on system catalog tables is not supported" +msgstr "паралельне створення індексу в таблицях системного каталогу не підтримується" + +#: catalog/index.c:828 catalog/index.c:1281 +#, c-format +msgid "concurrent index creation for exclusion constraints is not supported" +msgstr "парарельне створення індексу для обмежень-виключень не підтримується" + +#: catalog/index.c:837 +#, c-format +msgid "shared indexes cannot be created after initdb" +msgstr "не можливо створити спільні індекси після initdb" + +#: catalog/index.c:857 commands/createas.c:252 commands/sequence.c:154 +#: parser/parse_utilcmd.c:210 +#, c-format +msgid "relation \"%s\" already exists, skipping" +msgstr "ввідношення \"%s\" вже існує, пропускаємо" + +#: catalog/index.c:907 +#, c-format +msgid "pg_class index OID value not set when in binary upgrade mode" +msgstr "значення OID індекса в pg_class не встановлено в режимі двійкового оновлення" + +#: catalog/index.c:2128 +#, c-format +msgid "DROP INDEX CONCURRENTLY must be first action in transaction" +msgstr "DROP INDEX CONCURRENTLY повинен бути першою дією в транзакції" + +#: catalog/index.c:2859 +#, c-format +msgid "building index \"%s\" on table \"%s\" serially" +msgstr "створення індексу \"%s\" в таблиці \"%s\" у непаралельному режимі (serially)" + +#: catalog/index.c:2864 +#, c-format +msgid "building index \"%s\" on table \"%s\" with request for %d parallel worker" +msgid_plural "building index \"%s\" on table \"%s\" with request for %d parallel workers" +msgstr[0] "створення індексу \"%s\" в таблиці \"%s\" з розрахунком на %d паралельного виконавця" +msgstr[1] "створення індексу \"%s\" в таблиці \"%s\" з розрахунком на %d паралельних виконавців" +msgstr[2] "створення індексу \"%s\" в таблиці \"%s\" з розрахунком на %d паралельних виконавців" +msgstr[3] "створення індексу \"%s\" в таблиці \"%s\" з розрахунком на %d паралельних виконавців" + +#: catalog/index.c:3492 +#, c-format +msgid "cannot reindex temporary tables of other sessions" +msgstr "повторно індексувати тимчасові таблиці інших сеансів не можна" + +#: catalog/index.c:3503 +#, c-format +msgid "cannot reindex invalid index on TOAST table" +msgstr "переіндексувати неприпустимий індекс в таблиці TOAST не можна" + +#: catalog/index.c:3625 +#, c-format +msgid "index \"%s\" was reindexed" +msgstr "індекс \"%s\" був перебудований" + +#: catalog/index.c:3701 commands/indexcmds.c:3017 +#, c-format +msgid "REINDEX of partitioned tables is not yet implemented, skipping \"%s\"" +msgstr "REINDEX для секціонованих таблиць ще не реалізовано, пропускається \"%s\"" + +#: catalog/index.c:3756 +#, c-format +msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" +msgstr "переіндексувати неприпустимий індекс \"%s.%s\" в таблиці TOAST не можна, пропускається" + +#: catalog/namespace.c:257 catalog/namespace.c:461 catalog/namespace.c:553 +#: commands/trigger.c:5043 +#, c-format +msgid "cross-database references are not implemented: \"%s.%s.%s\"" +msgstr "cross-database посилання не реалізовані: \"%s.%s.%s\"" + +#: catalog/namespace.c:314 +#, c-format +msgid "temporary tables cannot specify a schema name" +msgstr "для тимчасових таблиць ім'я схеми не вказується" + +#: catalog/namespace.c:395 +#, c-format +msgid "could not obtain lock on relation \"%s.%s\"" +msgstr "не вдалося отримати блокування зв'язку \"%s.%s\"" + +#: catalog/namespace.c:400 commands/lockcmds.c:142 commands/lockcmds.c:227 +#, c-format +msgid "could not obtain lock on relation \"%s\"" +msgstr "не вдалося отримати блокування зв'язку \"%s\"" + +#: catalog/namespace.c:428 parser/parse_relation.c:1357 +#, c-format +msgid "relation \"%s.%s\" does not exist" +msgstr "відношення \"%s.%s\" не існує" + +#: catalog/namespace.c:433 parser/parse_relation.c:1370 +#: parser/parse_relation.c:1378 +#, c-format +msgid "relation \"%s\" does not exist" +msgstr "відношення \"%s\" не існує" + +#: catalog/namespace.c:499 catalog/namespace.c:3030 commands/extension.c:1519 +#: commands/extension.c:1525 +#, c-format +msgid "no schema has been selected to create in" +msgstr "не вибрано схему для створення об'єктів" + +#: catalog/namespace.c:651 catalog/namespace.c:664 +#, c-format +msgid "cannot create relations in temporary schemas of other sessions" +msgstr "неможливо створити відношення в тимчасових схемах з інших сеансів" + +#: catalog/namespace.c:655 +#, c-format +msgid "cannot create temporary relation in non-temporary schema" +msgstr "неможливо створити тимчасове відношення в не тимчасовій схемі" + +#: catalog/namespace.c:670 +#, c-format +msgid "only temporary relations may be created in temporary schemas" +msgstr "в тимчасових схемах можуть бути створені тільки тимчасові відношення" + +#: catalog/namespace.c:2222 +#, c-format +msgid "statistics object \"%s\" does not exist" +msgstr "об'єкт статистики \"%s\" не існує" + +#: catalog/namespace.c:2345 +#, c-format +msgid "text search parser \"%s\" does not exist" +msgstr "парсер текстового пошуку \"%s\" не існує" + +#: catalog/namespace.c:2471 +#, c-format +msgid "text search dictionary \"%s\" does not exist" +msgstr "словник текстового пошуку \"%s\" не існує" + +#: catalog/namespace.c:2598 +#, c-format +msgid "text search template \"%s\" does not exist" +msgstr "шаблон текстового пошуку \"%s\" не існує" + +#: catalog/namespace.c:2724 commands/tsearchcmds.c:1194 +#: utils/cache/ts_cache.c:617 +#, c-format +msgid "text search configuration \"%s\" does not exist" +msgstr "конфігурація текстового пошуку \"%s\" не існує" + +#: catalog/namespace.c:2837 parser/parse_expr.c:872 parser/parse_target.c:1228 +#, c-format +msgid "cross-database references are not implemented: %s" +msgstr "міжбазові посилання не реалізовані: %s" + +#: catalog/namespace.c:2843 parser/parse_expr.c:879 parser/parse_target.c:1235 +#: gram.y:14981 gram.y:16435 +#, c-format +msgid "improper qualified name (too many dotted names): %s" +msgstr "неправильне повне ім'я (забагато компонентів): %s" + +#: catalog/namespace.c:2973 +#, c-format +msgid "cannot move objects into or out of temporary schemas" +msgstr "не можна переміщати об'єкти в або з тимчасових схем" + +#: catalog/namespace.c:2979 +#, c-format +msgid "cannot move objects into or out of TOAST schema" +msgstr "не можна переміщати об'єкти в або з схем TOAST" + +#: catalog/namespace.c:3052 commands/schemacmds.c:256 commands/schemacmds.c:336 +#: commands/tablecmds.c:1194 +#, c-format +msgid "schema \"%s\" does not exist" +msgstr "схема \"%s\" не існує" + +#: catalog/namespace.c:3083 +#, c-format +msgid "improper relation name (too many dotted names): %s" +msgstr "неправильне ім'я зв'язку (забагато компонентів): %s" + +#: catalog/namespace.c:3646 +#, c-format +msgid "collation \"%s\" for encoding \"%s\" does not exist" +msgstr "правило сортування \"%s\" для кодування \"%s\" не існує" + +#: catalog/namespace.c:3701 +#, c-format +msgid "conversion \"%s\" does not exist" +msgstr "перетворення\"%s\" не існує" + +#: catalog/namespace.c:3965 +#, c-format +msgid "permission denied to create temporary tables in database \"%s\"" +msgstr "немає дозволу для створення тимчасових таблиць в базі даних \"%s\"" + +#: catalog/namespace.c:3981 +#, c-format +msgid "cannot create temporary tables during recovery" +msgstr "не можна створити тимчасові таблиці під час відновлення" + +#: catalog/namespace.c:3987 +#, c-format +msgid "cannot create temporary tables during a parallel operation" +msgstr "не можна створити тимчасові таблиці під час паралельної операції" + +#: catalog/namespace.c:4286 commands/tablespace.c:1205 commands/variable.c:64 +#: utils/misc/guc.c:11116 utils/misc/guc.c:11194 +#, c-format +msgid "List syntax is invalid." +msgstr "Помилка синтаксису у списку." + +#: catalog/objectaddress.c:1275 catalog/pg_publication.c:57 +#: commands/policy.c:95 commands/policy.c:395 commands/policy.c:485 +#: commands/tablecmds.c:230 commands/tablecmds.c:272 commands/tablecmds.c:1989 +#: commands/tablecmds.c:5626 commands/tablecmds.c:11089 +#, c-format +msgid "\"%s\" is not a table" +msgstr "\"%s\" не є таблицею" + +#: catalog/objectaddress.c:1282 commands/tablecmds.c:242 +#: commands/tablecmds.c:5656 commands/tablecmds.c:15711 commands/view.c:119 +#, c-format +msgid "\"%s\" is not a view" +msgstr "\"%s\" не є поданням" + +#: catalog/objectaddress.c:1289 commands/matview.c:175 commands/tablecmds.c:248 +#: commands/tablecmds.c:15716 +#, c-format +msgid "\"%s\" is not a materialized view" +msgstr "\"%s\" не є матеріалізованим поданням" + +#: catalog/objectaddress.c:1296 commands/tablecmds.c:266 +#: commands/tablecmds.c:5659 commands/tablecmds.c:15721 +#, c-format +msgid "\"%s\" is not a foreign table" +msgstr "\"%s\" не є сторонньою таблицею" + +#: catalog/objectaddress.c:1337 +#, c-format +msgid "must specify relation and object name" +msgstr "треба вказати відношення й ім'я об'єкта" + +#: catalog/objectaddress.c:1413 catalog/objectaddress.c:1466 +#, c-format +msgid "column name must be qualified" +msgstr "слід вказати ім'я стовпця" + +#: catalog/objectaddress.c:1513 +#, c-format +msgid "default value for column \"%s\" of relation \"%s\" does not exist" +msgstr "значення за замовчуванням для стовпця \"%s\" відношення \"%s\" не існує" + +#: catalog/objectaddress.c:1550 commands/functioncmds.c:133 +#: commands/tablecmds.c:258 commands/typecmds.c:263 commands/typecmds.c:3275 +#: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:845 +#: utils/adt/acl.c:4436 +#, c-format +msgid "type \"%s\" does not exist" +msgstr "тип \"%s\" не існує" + +#: catalog/objectaddress.c:1669 +#, c-format +msgid "operator %d (%s, %s) of %s does not exist" +msgstr "оператор %d (%s, %s) з %s не існує" + +#: catalog/objectaddress.c:1700 +#, c-format +msgid "function %d (%s, %s) of %s does not exist" +msgstr "функція %d (%s, %s) з %s не існує" + +#: catalog/objectaddress.c:1751 catalog/objectaddress.c:1777 +#, c-format +msgid "user mapping for user \"%s\" on server \"%s\" does not exist" +msgstr "відображення користувача для користувача \"%s\" на сервері \"%s\"не існує" + +#: catalog/objectaddress.c:1766 commands/foreigncmds.c:430 +#: commands/foreigncmds.c:1012 commands/foreigncmds.c:1395 +#: foreign/foreign.c:723 +#, c-format +msgid "server \"%s\" does not exist" +msgstr "сервер \"%s\" не існує" + +#: catalog/objectaddress.c:1833 +#, c-format +msgid "publication relation \"%s\" in publication \"%s\" does not exist" +msgstr "відношення публікації \"%s\" в публікації \"%s\" не існує" + +#: catalog/objectaddress.c:1895 +#, c-format +msgid "unrecognized default ACL object type \"%c\"" +msgstr "нерозпізнаний тип об'єкта ACL за замовчуванням \"%c\"" + +#: catalog/objectaddress.c:1896 +#, c-format +msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." +msgstr "Припустимі типи об'єктів: \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." + +#: catalog/objectaddress.c:1947 +#, c-format +msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" +msgstr "ACL за замовчуванням для користувача \"%s\" в схемі \"%s\" для об'єкту %s не існує" + +#: catalog/objectaddress.c:1952 +#, c-format +msgid "default ACL for user \"%s\" on %s does not exist" +msgstr "ACL за замовчуванням для користувача \"%s\" і для об'єкту %s не існує" + +#: catalog/objectaddress.c:1979 catalog/objectaddress.c:2037 +#: catalog/objectaddress.c:2094 +#, c-format +msgid "name or argument lists may not contain nulls" +msgstr "списки імен та аргументів не повинні містити Null" + +#: catalog/objectaddress.c:2013 +#, c-format +msgid "unsupported object type \"%s\"" +msgstr "непідтримуваний тип об'єкта \"%s\"" + +#: catalog/objectaddress.c:2033 catalog/objectaddress.c:2051 +#: catalog/objectaddress.c:2192 +#, c-format +msgid "name list length must be exactly %d" +msgstr "довжина списку імен повинна бути точно %d" + +#: catalog/objectaddress.c:2055 +#, c-format +msgid "large object OID may not be null" +msgstr "OID великого об'єкта не повинно бути нулем" + +#: catalog/objectaddress.c:2064 catalog/objectaddress.c:2127 +#: catalog/objectaddress.c:2134 +#, c-format +msgid "name list length must be at least %d" +msgstr "довжина списку імен повинна бути щонайменше %d" + +#: catalog/objectaddress.c:2120 catalog/objectaddress.c:2141 +#, c-format +msgid "argument list length must be exactly %d" +msgstr "довжина списку аргументів повинна бути точно %d" + +#: catalog/objectaddress.c:2393 libpq/be-fsstubs.c:321 +#, c-format +msgid "must be owner of large object %u" +msgstr "треба бути власником великого об'єкта %u" + +#: catalog/objectaddress.c:2408 commands/functioncmds.c:1445 +#, c-format +msgid "must be owner of type %s or type %s" +msgstr "треба бути власником типу %s або типу %s" + +#: catalog/objectaddress.c:2458 catalog/objectaddress.c:2475 +#, c-format +msgid "must be superuser" +msgstr "треба бути суперкористувачем" + +#: catalog/objectaddress.c:2465 +#, c-format +msgid "must have CREATEROLE privilege" +msgstr "треба мати право CREATEROLE" + +#: catalog/objectaddress.c:2544 +#, c-format +msgid "unrecognized object type \"%s\"" +msgstr "нерозпізнаний тип об'єкту \"%s\"" + +#. translator: second %s is, e.g., "table %s" +#: catalog/objectaddress.c:2772 +#, c-format +msgid "column %s of %s" +msgstr "стовпець %s з %s" + +#: catalog/objectaddress.c:2782 +#, c-format +msgid "function %s" +msgstr "функція %s" + +#: catalog/objectaddress.c:2787 +#, c-format +msgid "type %s" +msgstr "тип %s" + +#: catalog/objectaddress.c:2817 +#, c-format +msgid "cast from %s to %s" +msgstr "приведення від %s до %s" + +#: catalog/objectaddress.c:2845 +#, c-format +msgid "collation %s" +msgstr "сортування %s" + +#. translator: second %s is, e.g., "table %s" +#: catalog/objectaddress.c:2871 +#, c-format +msgid "constraint %s on %s" +msgstr "обмеження %s на %s" + +#: catalog/objectaddress.c:2877 +#, c-format +msgid "constraint %s" +msgstr "обмеження %s" + +#: catalog/objectaddress.c:2904 +#, c-format +msgid "conversion %s" +msgstr "перетворення %s" + +#. translator: %s is typically "column %s of table %s" +#: catalog/objectaddress.c:2943 +#, c-format +msgid "default value for %s" +msgstr "значення за замовчуванням для %s" + +#: catalog/objectaddress.c:2952 +#, c-format +msgid "language %s" +msgstr "мова %s" + +#: catalog/objectaddress.c:2957 +#, c-format +msgid "large object %u" +msgstr "великий об'єкт %u" + +#: catalog/objectaddress.c:2962 +#, c-format +msgid "operator %s" +msgstr "оператор %s" + +#: catalog/objectaddress.c:2994 +#, c-format +msgid "operator class %s for access method %s" +msgstr "клас операторів %s для методу доступу %s" + +#: catalog/objectaddress.c:3017 +#, c-format +msgid "access method %s" +msgstr "метод доступу %s" + +#. translator: %d is the operator strategy (a number), the +#. first two %s's are data type names, the third %s is the +#. description of the operator family, and the last %s is the +#. textual form of the operator with arguments. +#: catalog/objectaddress.c:3059 +#, c-format +msgid "operator %d (%s, %s) of %s: %s" +msgstr "оператор %d (%s, %s) з %s: %s" + +#. translator: %d is the function number, the first two %s's +#. are data type names, the third %s is the description of the +#. operator family, and the last %s is the textual form of the +#. function with arguments. +#: catalog/objectaddress.c:3109 +#, c-format +msgid "function %d (%s, %s) of %s: %s" +msgstr "функція %d (%s, %s) з %s: %s" + +#. translator: second %s is, e.g., "table %s" +#: catalog/objectaddress.c:3153 +#, c-format +msgid "rule %s on %s" +msgstr "правило %s на %s" + +#. translator: second %s is, e.g., "table %s" +#: catalog/objectaddress.c:3191 +#, c-format +msgid "trigger %s on %s" +msgstr "тригер %s на %s" + +#: catalog/objectaddress.c:3207 +#, c-format +msgid "schema %s" +msgstr "схема %s" + +#: catalog/objectaddress.c:3230 +#, c-format +msgid "statistics object %s" +msgstr "об'єкт статистики %s" + +#: catalog/objectaddress.c:3257 +#, c-format +msgid "text search parser %s" +msgstr "парсер текстового пошуку %s" + +#: catalog/objectaddress.c:3283 +#, c-format +msgid "text search dictionary %s" +msgstr "словник текстового пошуку %s" + +#: catalog/objectaddress.c:3309 +#, c-format +msgid "text search template %s" +msgstr "шаблон текстового пошуку %s" + +#: catalog/objectaddress.c:3335 +#, c-format +msgid "text search configuration %s" +msgstr "конфігурація текстового пошуку %s" + +#: catalog/objectaddress.c:3344 +#, c-format +msgid "role %s" +msgstr "роль %s" + +#: catalog/objectaddress.c:3357 +#, c-format +msgid "database %s" +msgstr "база даних %s" + +#: catalog/objectaddress.c:3369 +#, c-format +msgid "tablespace %s" +msgstr "табличний простір %s" + +#: catalog/objectaddress.c:3378 +#, c-format +msgid "foreign-data wrapper %s" +msgstr "джерело сторонніх даних %s" + +#: catalog/objectaddress.c:3387 +#, c-format +msgid "server %s" +msgstr "сервер %s" + +#: catalog/objectaddress.c:3415 +#, c-format +msgid "user mapping for %s on server %s" +msgstr "зіставлення користувача для %s на сервері %s" + +#: catalog/objectaddress.c:3460 +#, c-format +msgid "default privileges on new relations belonging to role %s in schema %s" +msgstr "права за замовчуванням для нових відношень, що належать ролі %s в схемі %s" + +#: catalog/objectaddress.c:3464 +#, c-format +msgid "default privileges on new relations belonging to role %s" +msgstr "права за замовчуванням для нових відношень, що належать ролі %s" + +#: catalog/objectaddress.c:3470 +#, c-format +msgid "default privileges on new sequences belonging to role %s in schema %s" +msgstr "права за замовчуванням для нових послідовностей, що належать ролі %s в схемі %s" + +#: catalog/objectaddress.c:3474 +#, c-format +msgid "default privileges on new sequences belonging to role %s" +msgstr "права за замовчуванням для нових послідовностей, що належать ролі %s" + +#: catalog/objectaddress.c:3480 +#, c-format +msgid "default privileges on new functions belonging to role %s in schema %s" +msgstr "права за замовчуванням для нових функцій, що належать ролі %s в схемі %s" + +#: catalog/objectaddress.c:3484 +#, c-format +msgid "default privileges on new functions belonging to role %s" +msgstr "права за замовчуванням для нових функцій, що належать ролі %s" + +#: catalog/objectaddress.c:3490 +#, c-format +msgid "default privileges on new types belonging to role %s in schema %s" +msgstr "права за замовчуванням для нових типів, що належать ролі %s в схемі %s" + +#: catalog/objectaddress.c:3494 +#, c-format +msgid "default privileges on new types belonging to role %s" +msgstr "права за замовчуванням для нових типів, що належать ролі %s" + +#: catalog/objectaddress.c:3500 +#, c-format +msgid "default privileges on new schemas belonging to role %s" +msgstr "права за замовчуванням для нових схем, що належать ролі %s" + +#: catalog/objectaddress.c:3507 +#, c-format +msgid "default privileges belonging to role %s in schema %s" +msgstr "права за замовчуванням, що належать ролі %s в схемі %s" + +#: catalog/objectaddress.c:3511 +#, c-format +msgid "default privileges belonging to role %s" +msgstr "права за замовчуванням належать ролі %s" + +#: catalog/objectaddress.c:3529 +#, c-format +msgid "extension %s" +msgstr "розширення %s" + +#: catalog/objectaddress.c:3542 +#, c-format +msgid "event trigger %s" +msgstr "тригер подій %s" + +#. translator: second %s is, e.g., "table %s" +#: catalog/objectaddress.c:3578 +#, c-format +msgid "policy %s on %s" +msgstr "політика %s на %s" + +#: catalog/objectaddress.c:3588 +#, c-format +msgid "publication %s" +msgstr "публікація %s" + +#. translator: first %s is, e.g., "table %s" +#: catalog/objectaddress.c:3614 +#, c-format +msgid "publication of %s in publication %s" +msgstr "відношення публікації %s в публікації %s" + +#: catalog/objectaddress.c:3623 +#, c-format +msgid "subscription %s" +msgstr "підписка %s" + +#: catalog/objectaddress.c:3642 +#, c-format +msgid "transform for %s language %s" +msgstr "трансформація для %s мови %s" + +#: catalog/objectaddress.c:3705 +#, c-format +msgid "table %s" +msgstr "таблиця %s" + +#: catalog/objectaddress.c:3710 +#, c-format +msgid "index %s" +msgstr "індекс %s" + +#: catalog/objectaddress.c:3714 +#, c-format +msgid "sequence %s" +msgstr "послідовність %s" + +#: catalog/objectaddress.c:3718 +#, c-format +msgid "toast table %s" +msgstr "таблиця toast %s" + +#: catalog/objectaddress.c:3722 +#, c-format +msgid "view %s" +msgstr "подання %s" + +#: catalog/objectaddress.c:3726 +#, c-format +msgid "materialized view %s" +msgstr "матеріалізоване подання %s" + +#: catalog/objectaddress.c:3730 +#, c-format +msgid "composite type %s" +msgstr "складений тип %s" + +#: catalog/objectaddress.c:3734 +#, c-format +msgid "foreign table %s" +msgstr "зовнішня таблиця %s" + +#: catalog/objectaddress.c:3739 +#, c-format +msgid "relation %s" +msgstr "відношення %s" + +#: catalog/objectaddress.c:3776 +#, c-format +msgid "operator family %s for access method %s" +msgstr "сімейство операторів %s для методу доступу %s" + +#: catalog/pg_aggregate.c:128 +#, c-format +msgid "aggregates cannot have more than %d argument" +msgid_plural "aggregates cannot have more than %d arguments" +msgstr[0] "агрегати не можуть мати більше ніж %d аргумент" +msgstr[1] "агрегати не можуть мати більше ніж %d аргументи" +msgstr[2] "агрегати не можуть мати більше ніж %d аргументів" +msgstr[3] "агрегати не можуть мати більше ніж %d аргументів" + +#: catalog/pg_aggregate.c:143 catalog/pg_aggregate.c:157 +#, c-format +msgid "cannot determine transition data type" +msgstr "неможливо визначити тип перехідних даних" + +#: catalog/pg_aggregate.c:172 +#, c-format +msgid "a variadic ordered-set aggregate must use VARIADIC type ANY" +msgstr "сортувальна агрегатна функція з (variadic) повинна використовувати тип VARIADIC ANY" + +#: catalog/pg_aggregate.c:198 +#, c-format +msgid "a hypothetical-set aggregate must have direct arguments matching its aggregated arguments" +msgstr "hypothetical-set-функція повинна мати прямі аргументи, які відповідають агрегатним" + +#: catalog/pg_aggregate.c:245 catalog/pg_aggregate.c:289 +#, c-format +msgid "return type of transition function %s is not %s" +msgstr "функція переходу %s повинна повертати тип %s" + +#: catalog/pg_aggregate.c:265 catalog/pg_aggregate.c:308 +#, c-format +msgid "must not omit initial value when transition function is strict and transition type is not compatible with input type" +msgstr "не можна пропустити початкове значення, коли перехідна функція сувора і перехідний тип не сумісний з типом введення" + +#: catalog/pg_aggregate.c:334 +#, c-format +msgid "return type of inverse transition function %s is not %s" +msgstr "інвертована функція переходу %s повинна повертати тип %s" + +#: catalog/pg_aggregate.c:351 executor/nodeWindowAgg.c:2852 +#, c-format +msgid "strictness of aggregate's forward and inverse transition functions must match" +msgstr "пряма й інвертована функції переходу агрегату повинні мати однакову суворість" + +#: catalog/pg_aggregate.c:395 catalog/pg_aggregate.c:553 +#, c-format +msgid "final function with extra arguments must not be declared STRICT" +msgstr "фінальна функція з додатковими аргументами не повинна оголошуватись як сувора (STRICT)" + +#: catalog/pg_aggregate.c:426 +#, c-format +msgid "return type of combine function %s is not %s" +msgstr "комбінуюча функція %s повинна повертати тип %s" + +#: catalog/pg_aggregate.c:438 executor/nodeAgg.c:4177 +#, c-format +msgid "combine function with transition type %s must not be declared STRICT" +msgstr "комбінуюча функція з перехідним типом %s не повинна оголошуватись як сувора (STRICT)" + +#: catalog/pg_aggregate.c:457 +#, c-format +msgid "return type of serialization function %s is not %s" +msgstr "функція серіалізації %s повинна повертати тип %s" + +#: catalog/pg_aggregate.c:478 +#, c-format +msgid "return type of deserialization function %s is not %s" +msgstr "функція десеріалізації %s повинна повертати тип %s" + +#: catalog/pg_aggregate.c:497 catalog/pg_proc.c:186 catalog/pg_proc.c:220 +#, c-format +msgid "cannot determine result data type" +msgstr "не вдалося визначити тип результату" + +#: catalog/pg_aggregate.c:512 catalog/pg_proc.c:199 catalog/pg_proc.c:228 +#, c-format +msgid "unsafe use of pseudo-type \"internal\"" +msgstr "небезпечне використання псевдотипу (pseudo-type) \"internal\"" + +#: catalog/pg_aggregate.c:566 +#, c-format +msgid "moving-aggregate implementation returns type %s, but plain implementation returns type %s" +msgstr "реалізація рухомого агрегату повертає тип %s, але проста реалізація повертає %s" + +#: catalog/pg_aggregate.c:577 +#, c-format +msgid "sort operator can only be specified for single-argument aggregates" +msgstr "оператора сортування можна вказати лише для агрегатних функцій з одним аргументом" + +#: catalog/pg_aggregate.c:704 catalog/pg_proc.c:374 +#, c-format +msgid "cannot change routine kind" +msgstr "неможливо змінити тип підпрограми" + +#: catalog/pg_aggregate.c:706 +#, c-format +msgid "\"%s\" is an ordinary aggregate function." +msgstr "\"%s\" є звичайною агрегатною функцією." + +#: catalog/pg_aggregate.c:708 +#, c-format +msgid "\"%s\" is an ordered-set aggregate." +msgstr "\"%s\" є сортувальним агрегатом." + +#: catalog/pg_aggregate.c:710 +#, c-format +msgid "\"%s\" is a hypothetical-set aggregate." +msgstr "\"%s\" є агрегатом для гіпотетичних наборів." + +#: catalog/pg_aggregate.c:715 +#, c-format +msgid "cannot change number of direct arguments of an aggregate function" +msgstr "змінити кількість прямих аргументів агрегатної функції не можна" + +#: catalog/pg_aggregate.c:870 commands/functioncmds.c:667 +#: commands/typecmds.c:1658 commands/typecmds.c:1704 commands/typecmds.c:1756 +#: commands/typecmds.c:1793 commands/typecmds.c:1827 commands/typecmds.c:1861 +#: commands/typecmds.c:1895 commands/typecmds.c:1972 commands/typecmds.c:2014 +#: parser/parse_func.c:414 parser/parse_func.c:443 parser/parse_func.c:468 +#: parser/parse_func.c:482 parser/parse_func.c:602 parser/parse_func.c:622 +#: parser/parse_func.c:2129 parser/parse_func.c:2320 +#, c-format +msgid "function %s does not exist" +msgstr "функції %s не існує" + +#: catalog/pg_aggregate.c:876 +#, c-format +msgid "function %s returns a set" +msgstr "функція %s повертає набір" + +#: catalog/pg_aggregate.c:891 +#, c-format +msgid "function %s must accept VARIADIC ANY to be used in this aggregate" +msgstr "функція %s повинна прийняти VARIADIC ANY для використання в цій агрегатній функції" + +#: catalog/pg_aggregate.c:915 +#, c-format +msgid "function %s requires run-time type coercion" +msgstr "функція %s потребує приведення типів під час виконання" + +#: catalog/pg_cast.c:67 +#, c-format +msgid "cast from type %s to type %s already exists" +msgstr "приведення від типу %s до типу %s вже існує" + +#: catalog/pg_collation.c:93 catalog/pg_collation.c:140 +#, c-format +msgid "collation \"%s\" already exists, skipping" +msgstr "сортування \"%s\" вже існує, пропускаємо" + +#: catalog/pg_collation.c:95 +#, c-format +msgid "collation \"%s\" for encoding \"%s\" already exists, skipping" +msgstr "правило сортування \"%s \" для кодування \"%s\" вже існує, пропускаємо" + +#: catalog/pg_collation.c:103 catalog/pg_collation.c:147 +#, c-format +msgid "collation \"%s\" already exists" +msgstr "правило сортування \"%s\" вже існує" + +#: catalog/pg_collation.c:105 +#, c-format +msgid "collation \"%s\" for encoding \"%s\" already exists" +msgstr "правило сортування \"%s \" для кодування \"%s\" вже існує" + +#: catalog/pg_constraint.c:676 +#, c-format +msgid "constraint \"%s\" for domain %s already exists" +msgstr "обмеження \"%s\" для домену %s вже існує" + +#: catalog/pg_constraint.c:874 catalog/pg_constraint.c:967 +#, c-format +msgid "constraint \"%s\" for table \"%s\" does not exist" +msgstr "індексу \"%s\" для таблиці \"%s\" не існує" + +#: catalog/pg_constraint.c:1056 +#, c-format +msgid "constraint \"%s\" for domain %s does not exist" +msgstr "обмеження \"%s\" для домену \"%s\" не існує" + +#: catalog/pg_conversion.c:67 +#, c-format +msgid "conversion \"%s\" already exists" +msgstr "перетворення \"%s\" вже існує" + +#: catalog/pg_conversion.c:80 +#, c-format +msgid "default conversion for %s to %s already exists" +msgstr "перетворення за замовчуванням від %s до %s вже існує" + +#: catalog/pg_depend.c:162 commands/extension.c:3324 +#, c-format +msgid "%s is already a member of extension \"%s\"" +msgstr "%s вже є членом розширення \"%s\"" + +#: catalog/pg_depend.c:538 +#, c-format +msgid "cannot remove dependency on %s because it is a system object" +msgstr "неможливо видалити залежність від об'єкта %s, тому що це системний об'єкт" + +#: catalog/pg_enum.c:127 catalog/pg_enum.c:230 catalog/pg_enum.c:525 +#, c-format +msgid "invalid enum label \"%s\"" +msgstr "неприпустима мітка перераховування \"%s\"" + +#: catalog/pg_enum.c:128 catalog/pg_enum.c:231 catalog/pg_enum.c:526 +#, c-format +msgid "Labels must be %d characters or less." +msgstr "Мітки повинні містити %d символів або менше." + +#: catalog/pg_enum.c:259 +#, c-format +msgid "enum label \"%s\" already exists, skipping" +msgstr "мітка перераховування \"%s\" вже існує, пропускаємо" + +#: catalog/pg_enum.c:266 catalog/pg_enum.c:569 +#, c-format +msgid "enum label \"%s\" already exists" +msgstr "мітка перераховування \"%s\" вже існує" + +#: catalog/pg_enum.c:321 catalog/pg_enum.c:564 +#, c-format +msgid "\"%s\" is not an existing enum label" +msgstr "\"%s\" не є існуючою міткою перераховування" + +#: catalog/pg_enum.c:379 +#, c-format +msgid "pg_enum OID value not set when in binary upgrade mode" +msgstr "значення OID в pg_enum не встановлено в режимі двійкового оновлення" + +#: catalog/pg_enum.c:389 +#, c-format +msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" +msgstr "Конструкція ALTER TYPE ADD BEFORE/AFTER несумісна з двійковим оновленням даних" + +#: catalog/pg_namespace.c:64 commands/schemacmds.c:265 +#, c-format +msgid "schema \"%s\" already exists" +msgstr "схема \"%s\" вже існує" + +#: catalog/pg_operator.c:219 catalog/pg_operator.c:361 +#, c-format +msgid "\"%s\" is not a valid operator name" +msgstr "\"%s\" не є коректним оператором" + +#: catalog/pg_operator.c:370 +#, c-format +msgid "only binary operators can have commutators" +msgstr "(commutators) можна визначити лише для бінарних операторів" + +#: catalog/pg_operator.c:374 commands/operatorcmds.c:495 +#, c-format +msgid "only binary operators can have join selectivity" +msgstr "функцію оцінки з'єднання можливо визначити лише для бінарних операторів" + +#: catalog/pg_operator.c:378 +#, c-format +msgid "only binary operators can merge join" +msgstr "підтримку з'єднання злиттям можливо позначити лише для бінарних операторів" + +#: catalog/pg_operator.c:382 +#, c-format +msgid "only binary operators can hash" +msgstr "підтримка хешу можливо позначити лише для бінарних операторів" + +#: catalog/pg_operator.c:393 +#, c-format +msgid "only boolean operators can have negators" +msgstr "зворотню операцію можливо визначити лише для логічних операторів" + +#: catalog/pg_operator.c:397 commands/operatorcmds.c:503 +#, c-format +msgid "only boolean operators can have restriction selectivity" +msgstr "функцію оцінки обмеження можливо визначити лише для логічних операторів" + +#: catalog/pg_operator.c:401 commands/operatorcmds.c:507 +#, c-format +msgid "only boolean operators can have join selectivity" +msgstr "функцію оцінки з'єднання можливо визначити лише для логічних операторів" + +#: catalog/pg_operator.c:405 +#, c-format +msgid "only boolean operators can merge join" +msgstr "підтримку з'єднання злиттям можливо позначити лише для логічних операторів" + +#: catalog/pg_operator.c:409 +#, c-format +msgid "only boolean operators can hash" +msgstr "підтримку хешу можливо позначити лише для логічних операторів" + +#: catalog/pg_operator.c:421 +#, c-format +msgid "operator %s already exists" +msgstr "оператор %s вже існує" + +#: catalog/pg_operator.c:621 +#, c-format +msgid "operator cannot be its own negator or sort operator" +msgstr "оператор не може бути зворотнім до себе або власним оператором сортування" + +#: catalog/pg_proc.c:127 parser/parse_func.c:2191 +#, c-format +msgid "functions cannot have more than %d argument" +msgid_plural "functions cannot have more than %d arguments" +msgstr[0] "функції не можуть мати більше %d аргументу" +msgstr[1] "функції не можуть мати більше %d аргументів" +msgstr[2] "функції не можуть мати більше %d аргументів" +msgstr[3] "функції не можуть мати більше %d аргументів" + +#: catalog/pg_proc.c:364 +#, c-format +msgid "function \"%s\" already exists with same argument types" +msgstr "функція \"%s\" з аргументами таких типів вже існує" + +#: catalog/pg_proc.c:376 +#, c-format +msgid "\"%s\" is an aggregate function." +msgstr "\"%s\" є функцією агрегату." + +#: catalog/pg_proc.c:378 +#, c-format +msgid "\"%s\" is a function." +msgstr "\"%s\" є функцією." + +#: catalog/pg_proc.c:380 +#, c-format +msgid "\"%s\" is a procedure." +msgstr "\"%s\" є процедурою." + +#: catalog/pg_proc.c:382 +#, c-format +msgid "\"%s\" is a window function." +msgstr "\"%s\" є функцією вікна." + +#: catalog/pg_proc.c:402 +#, c-format +msgid "cannot change whether a procedure has output parameters" +msgstr "неможливо визначити вихідні параметри для процедури" + +#: catalog/pg_proc.c:403 catalog/pg_proc.c:433 +#, c-format +msgid "cannot change return type of existing function" +msgstr "неможливо змінити тип повернення існуючої функції" + +#. translator: first %s is DROP FUNCTION, DROP PROCEDURE, or DROP +#. AGGREGATE +#. +#. translator: first %s is DROP FUNCTION or DROP PROCEDURE +#: catalog/pg_proc.c:409 catalog/pg_proc.c:436 catalog/pg_proc.c:481 +#: catalog/pg_proc.c:507 catalog/pg_proc.c:533 +#, c-format +msgid "Use %s %s first." +msgstr "Використайте %s %s спочатку." + +#: catalog/pg_proc.c:434 +#, c-format +msgid "Row type defined by OUT parameters is different." +msgstr "Параметри OUT визначають другий тип рядку." + +#: catalog/pg_proc.c:478 +#, c-format +msgid "cannot change name of input parameter \"%s\"" +msgstr "неможливо змінити ім'я вхідного параметру \"%s\"" + +#: catalog/pg_proc.c:505 +#, c-format +msgid "cannot remove parameter defaults from existing function" +msgstr "неможливо прибрати параметр за замовчуванням з існуючої функції" + +#: catalog/pg_proc.c:531 +#, c-format +msgid "cannot change data type of existing parameter default value" +msgstr "неможливо змінити тип даних для існуючого значення параметру за замовчуванням" + +#: catalog/pg_proc.c:748 +#, c-format +msgid "there is no built-in function named \"%s\"" +msgstr "немає вбудованої функції \"%s\"" + +#: catalog/pg_proc.c:846 +#, c-format +msgid "SQL functions cannot return type %s" +msgstr "Функції SQL не можуть повернути тип %s" + +#: catalog/pg_proc.c:861 +#, c-format +msgid "SQL functions cannot have arguments of type %s" +msgstr "функції SQL не можуть мати аргументи типу %s" + +#: catalog/pg_proc.c:954 executor/functions.c:1446 +#, c-format +msgid "SQL function \"%s\"" +msgstr "Функція SQL \"%s\"" + +#: catalog/pg_publication.c:59 +#, c-format +msgid "Only tables can be added to publications." +msgstr "Тільки системні таблиці можуть бути додані до публікацій." + +#: catalog/pg_publication.c:65 +#, c-format +msgid "\"%s\" is a system table" +msgstr "\"%s\" є системною таблицею" + +#: catalog/pg_publication.c:67 +#, c-format +msgid "System tables cannot be added to publications." +msgstr "Системні таблиці не можуть бути додані до публікацій." + +#: catalog/pg_publication.c:73 +#, c-format +msgid "table \"%s\" cannot be replicated" +msgstr "таблиця \"%s\" не може бути реплікованою" + +#: catalog/pg_publication.c:75 +#, c-format +msgid "Temporary and unlogged relations cannot be replicated." +msgstr "Тимчасові і нежурнальованні відношення не можуть бути реплікованими." + +#: catalog/pg_publication.c:174 +#, c-format +msgid "relation \"%s\" is already member of publication \"%s\"" +msgstr "відношення \"%s\" вже є членом публікації \"%s\"" + +#: catalog/pg_publication.c:470 commands/publicationcmds.c:451 +#: commands/publicationcmds.c:762 +#, c-format +msgid "publication \"%s\" does not exist" +msgstr "публікація \"%s\" вже існує" + +#: catalog/pg_shdepend.c:776 +#, c-format +msgid "\n" +"and objects in %d other database (see server log for list)" +msgid_plural "\n" +"and objects in %d other databases (see server log for list)" +msgstr[0] "\n" +"і об'єкти в %d іншій базі даних (див. список в протоколі сервера)" +msgstr[1] "\n" +"і об'єкти в %d інших базах даних (див. список в протоколі сервера)" +msgstr[2] "\n" +"і об'єкти в %d інших базах даних (див. список в протоколі сервера)" +msgstr[3] "\n" +"і об'єкти в %d інших базах даних (див. список в протоколі сервера)" + +#: catalog/pg_shdepend.c:1082 +#, c-format +msgid "role %u was concurrently dropped" +msgstr "роль %u було видалено паралельним способом" + +#: catalog/pg_shdepend.c:1101 +#, c-format +msgid "tablespace %u was concurrently dropped" +msgstr "табличний простір %u було видалено паралельним способом" + +#: catalog/pg_shdepend.c:1116 +#, c-format +msgid "database %u was concurrently dropped" +msgstr "базу даних %u було видалено паралельним способом" + +#: catalog/pg_shdepend.c:1161 +#, c-format +msgid "owner of %s" +msgstr "власник об'єкту %s" + +#: catalog/pg_shdepend.c:1163 +#, c-format +msgid "privileges for %s" +msgstr "права для %s" + +#: catalog/pg_shdepend.c:1165 +#, c-format +msgid "target of %s" +msgstr "ціль %s" + +#. translator: %s will always be "database %s" +#: catalog/pg_shdepend.c:1173 +#, c-format +msgid "%d object in %s" +msgid_plural "%d objects in %s" +msgstr[0] "%d об'єкт у%s" +msgstr[1] "%d об'єкти в %s" +msgstr[2] "%d об'єктів у %s" +msgstr[3] "%d об'єктів у %s" + +#: catalog/pg_shdepend.c:1284 +#, c-format +msgid "cannot drop objects owned by %s because they are required by the database system" +msgstr "не вдалося видалити об'єкти, що належать %s, оскільки вони потрібні системі бази даних" + +#: catalog/pg_shdepend.c:1431 +#, c-format +msgid "cannot reassign ownership of objects owned by %s because they are required by the database system" +msgstr "не вдалося змінити власника об'єктів, що належать ролі %s, тому що вони необхідні системі баз даних" + +#: catalog/pg_subscription.c:171 commands/subscriptioncmds.c:644 +#: commands/subscriptioncmds.c:858 commands/subscriptioncmds.c:1080 +#, c-format +msgid "subscription \"%s\" does not exist" +msgstr "підписка \"%s\" не існує" + +#: catalog/pg_type.c:131 catalog/pg_type.c:468 +#, c-format +msgid "pg_type OID value not set when in binary upgrade mode" +msgstr "значення OID в pg_type не задано в режимі двійкового оновлення" + +#: catalog/pg_type.c:249 +#, c-format +msgid "invalid type internal size %d" +msgstr "неприпустимий внутрішній розмір типу %d" + +#: catalog/pg_type.c:265 catalog/pg_type.c:273 catalog/pg_type.c:281 +#: catalog/pg_type.c:290 +#, c-format +msgid "alignment \"%c\" is invalid for passed-by-value type of size %d" +msgstr "вирівнювання \"%c\" недійсне для типу переданого за значенням розміром: %d" + +#: catalog/pg_type.c:297 +#, c-format +msgid "internal size %d is invalid for passed-by-value type" +msgstr "внутрішній розмір %d недійсний для типу, переданого за значенням" + +#: catalog/pg_type.c:307 catalog/pg_type.c:313 +#, c-format +msgid "alignment \"%c\" is invalid for variable-length type" +msgstr "вирівнювання \"%c\" недійсне для типу змінної довжини" + +#: catalog/pg_type.c:321 commands/typecmds.c:3727 +#, c-format +msgid "fixed-size types must have storage PLAIN" +msgstr "для типів фіксованого розміру застосовується лише режим зберігання PLAIN" + +#: catalog/pg_type.c:839 +#, c-format +msgid "could not form array type name for type \"%s\"" +msgstr "не вдалося сформувати ім'я типу масиву для типу \"%s\"" + +#: catalog/storage.c:449 storage/buffer/bufmgr.c:933 +#, c-format +msgid "invalid page in block %u of relation %s" +msgstr "неприпустима сторінка в блоці %u відношення %s" + +#: catalog/toasting.c:106 commands/indexcmds.c:639 commands/tablecmds.c:5638 +#: commands/tablecmds.c:15576 +#, c-format +msgid "\"%s\" is not a table or materialized view" +msgstr "\"%s\" не є таблицею або матеріалізованим поданням" + +#: commands/aggregatecmds.c:171 +#, c-format +msgid "only ordered-set aggregates can be hypothetical" +msgstr "гіпотетичними можуть бути тільки впорядковані агрегати" + +#: commands/aggregatecmds.c:196 +#, c-format +msgid "aggregate attribute \"%s\" not recognized" +msgstr "атрибут агрегату \"%s\" не розпізнано" + +#: commands/aggregatecmds.c:206 +#, c-format +msgid "aggregate stype must be specified" +msgstr "у визначенні агрегату необхідно вказати stype" + +#: commands/aggregatecmds.c:210 +#, c-format +msgid "aggregate sfunc must be specified" +msgstr "в визначенні агрегату потребується sfunc" + +#: commands/aggregatecmds.c:222 +#, c-format +msgid "aggregate msfunc must be specified when mstype is specified" +msgstr "в визначенні агрегату потребується msfunc, коли mstype визначений" + +#: commands/aggregatecmds.c:226 +#, c-format +msgid "aggregate minvfunc must be specified when mstype is specified" +msgstr "в визначенні агрегату потребується minvfunc, коли mstype визначений" + +#: commands/aggregatecmds.c:233 +#, c-format +msgid "aggregate msfunc must not be specified without mstype" +msgstr "msfunc для агрегату не повинна визначатись без mstype" + +#: commands/aggregatecmds.c:237 +#, c-format +msgid "aggregate minvfunc must not be specified without mstype" +msgstr "minvfunc для агрегату не повинна визначатись без mstype" + +#: commands/aggregatecmds.c:241 +#, c-format +msgid "aggregate mfinalfunc must not be specified without mstype" +msgstr "mfinalfunc для агрегату не повинна визначатись без mstype" + +#: commands/aggregatecmds.c:245 +#, c-format +msgid "aggregate msspace must not be specified without mstype" +msgstr "msspace для агрегату не повинна визначатись без mstype" + +#: commands/aggregatecmds.c:249 +#, c-format +msgid "aggregate minitcond must not be specified without mstype" +msgstr "minitcond для агрегату не повинна визначатись без mstype" + +#: commands/aggregatecmds.c:278 +#, c-format +msgid "aggregate input type must be specified" +msgstr "слід указати тип агрегату вводу" + +#: commands/aggregatecmds.c:308 +#, c-format +msgid "basetype is redundant with aggregate input type specification" +msgstr "в визначенні агрегату з зазначенням вхідного типу не потрібен базовий тип" + +#: commands/aggregatecmds.c:349 commands/aggregatecmds.c:390 +#, c-format +msgid "aggregate transition data type cannot be %s" +msgstr "тип даних агрегату транзакції не може бути %s" + +#: commands/aggregatecmds.c:361 +#, c-format +msgid "serialization functions may be specified only when the aggregate transition data type is %s" +msgstr "функції серіалізації можуть визначатись, лише коли перехідний тип даних агрегату %s" + +#: commands/aggregatecmds.c:371 +#, c-format +msgid "must specify both or neither of serialization and deserialization functions" +msgstr "повинні визначатись обидві або жодна з серіалізуючих та десеріалізуючих функцій" + +#: commands/aggregatecmds.c:436 commands/functioncmds.c:615 +#, c-format +msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" +msgstr "параметр \"parallel\" має мати значення SAFE, RESTRICTED, або UNSAFE" + +#: commands/aggregatecmds.c:492 +#, c-format +msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" +msgstr "параметр \"%s\" має мати значення READ_ONLY, SHAREABLE, або READ_WRITE" + +#: commands/alter.c:84 commands/event_trigger.c:174 +#, c-format +msgid "event trigger \"%s\" already exists" +msgstr "тригер подій \"%s\" вже існує" + +#: commands/alter.c:87 commands/foreigncmds.c:597 +#, c-format +msgid "foreign-data wrapper \"%s\" already exists" +msgstr "джерело сторонніх даних \"%s\" вже існує" + +#: commands/alter.c:90 commands/foreigncmds.c:903 +#, c-format +msgid "server \"%s\" already exists" +msgstr "сервер \"%s\" вже існує" + +#: commands/alter.c:93 commands/proclang.c:132 +#, c-format +msgid "language \"%s\" already exists" +msgstr "мова \"%s\" вже існує" + +#: commands/alter.c:96 commands/publicationcmds.c:183 +#, c-format +msgid "publication \"%s\" already exists" +msgstr "публікація \"%s\" вже існує" + +#: commands/alter.c:99 commands/subscriptioncmds.c:371 +#, c-format +msgid "subscription \"%s\" already exists" +msgstr "підписка \"%s\" вже існує" + +#: commands/alter.c:122 +#, c-format +msgid "conversion \"%s\" already exists in schema \"%s\"" +msgstr "перетворення \"%s\" вже існує в схемі \"%s\"" + +#: commands/alter.c:126 +#, c-format +msgid "statistics object \"%s\" already exists in schema \"%s\"" +msgstr "об'єкт статистики \"%s\" вже існує в схемі \"%s\"" + +#: commands/alter.c:130 +#, c-format +msgid "text search parser \"%s\" already exists in schema \"%s\"" +msgstr "парсер текстового пошуку \"%s\" вже існує в схемі \"%s\"" + +#: commands/alter.c:134 +#, c-format +msgid "text search dictionary \"%s\" already exists in schema \"%s\"" +msgstr "словник текстового пошуку \"%s\" вже існує в схемі \"%s\"" + +#: commands/alter.c:138 +#, c-format +msgid "text search template \"%s\" already exists in schema \"%s\"" +msgstr "шаблон текстового пошуку \"%s\" вже існує в схемі \"%s\"" + +#: commands/alter.c:142 +#, c-format +msgid "text search configuration \"%s\" already exists in schema \"%s\"" +msgstr "конфігурація текстового пошуку \"%s\" вже існує в схемі \"%s\"" + +#: commands/alter.c:215 +#, c-format +msgid "must be superuser to rename %s" +msgstr "перейменувати %s може тільки суперкористувач" + +#: commands/alter.c:744 +#, c-format +msgid "must be superuser to set schema of %s" +msgstr "встановити схему об'єкту %s може тільки суперкористувач" + +#: commands/amcmds.c:60 +#, c-format +msgid "permission denied to create access method \"%s\"" +msgstr "немає дозволу для створення методу доступу \"%s\"" + +#: commands/amcmds.c:62 +#, c-format +msgid "Must be superuser to create an access method." +msgstr "Тільки суперкористувач може створити метод доступу." + +#: commands/amcmds.c:71 +#, c-format +msgid "access method \"%s\" already exists" +msgstr "метод доступу \"%s\" вже існує" + +#: commands/amcmds.c:130 +#, c-format +msgid "must be superuser to drop access methods" +msgstr "тільки суперкористувач може видалити метод доступу" + +#: commands/amcmds.c:181 commands/indexcmds.c:188 commands/indexcmds.c:790 +#: commands/opclasscmds.c:373 commands/opclasscmds.c:793 +#, c-format +msgid "access method \"%s\" does not exist" +msgstr "методу доступу \"%s\" не існує" + +#: commands/amcmds.c:270 +#, c-format +msgid "handler function is not specified" +msgstr "функція-обробник не вказана" + +#: commands/amcmds.c:291 commands/event_trigger.c:183 +#: commands/foreigncmds.c:489 commands/proclang.c:79 commands/trigger.c:687 +#: parser/parse_clause.c:941 +#, c-format +msgid "function %s must return type %s" +msgstr "функція %s повинна повертати тип %s" + +#: commands/analyze.c:226 +#, c-format +msgid "skipping \"%s\" --- cannot analyze this foreign table" +msgstr "пропуск об'єкту \"%s\" --- неможливо аналізувати цю сторонню таблицю" + +#: commands/analyze.c:243 +#, c-format +msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" +msgstr "пропуск об'єкту \"%s\" --- неможливо аналізувати не-таблиці або спеціальні системні таблиці" + +#: commands/analyze.c:329 +#, c-format +msgid "analyzing \"%s.%s\" inheritance tree" +msgstr "аналізується дерево наслідування \"%s.%s\"" + +#: commands/analyze.c:334 +#, c-format +msgid "analyzing \"%s.%s\"" +msgstr "аналіз \"%s.%s\"" + +#: commands/analyze.c:394 +#, c-format +msgid "column \"%s\" of relation \"%s\" appears more than once" +msgstr "стовпець \"%s\" відносно \"%s\" з'являється більше одного разу" + +#: commands/analyze.c:700 +#, c-format +msgid "automatic analyze of table \"%s.%s.%s\" system usage: %s" +msgstr "автоматичний аналіз таблиці \"%s.%s.%s\" використання системи: %s" + +#: commands/analyze.c:1169 +#, c-format +msgid "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead rows; %d rows in sample, %.0f estimated total rows" +msgstr "\"%s\": проскановано %d з %u сторінок, вони містять %.0f живих рядків і %.0f мертвих рядків; %d рядків вибрані; %.0f приблизне загальне число рядків" + +#: commands/analyze.c:1249 +#, c-format +msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" +msgstr "пропускається аналіз дерева наслідування \"%s.%s\" --- це дерево наслідування не містить дочірніх таблиць" + +#: commands/analyze.c:1347 +#, c-format +msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" +msgstr "пропускається аналіз дерева наслідування \"%s.%s\" --- це дерево наслідування не містить аналізуючих дочірніх таблиць" + +#: commands/async.c:634 +#, c-format +msgid "channel name cannot be empty" +msgstr "ім'я каналу не може бути пустим" + +#: commands/async.c:640 +#, c-format +msgid "channel name too long" +msgstr "ім'я каналу задовге" + +#: commands/async.c:645 +#, c-format +msgid "payload string too long" +msgstr "рядок навантаження задовгий" + +#: commands/async.c:864 +#, c-format +msgid "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" +msgstr "виконати PREPARE для транзакції, яка виконала LISTEN, UNLISTEN або NOTIFY неможливо" + +#: commands/async.c:970 +#, c-format +msgid "too many notifications in the NOTIFY queue" +msgstr "занадто багато сповіщень у черзі NOTIFY" + +#: commands/async.c:1636 +#, c-format +msgid "NOTIFY queue is %.0f%% full" +msgstr "Черга NOTIFY заповнена на %.0f%%" + +#: commands/async.c:1638 +#, c-format +msgid "The server process with PID %d is among those with the oldest transactions." +msgstr "Серверний процес з PID %d серед процесів з найдавнішими транзакціями." + +#: commands/async.c:1641 +#, c-format +msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." +msgstr "Черга NOTIFY не може бути спорожненою, поки цей процес не завершить поточну транзакцію." + +#: commands/cluster.c:125 commands/cluster.c:362 +#, c-format +msgid "cannot cluster temporary tables of other sessions" +msgstr "не можна кластеризувати тимчасові таблиці з інших сеансів" + +#: commands/cluster.c:133 +#, c-format +msgid "cannot cluster a partitioned table" +msgstr "не можна кластеризувати секційну таблицю" + +#: commands/cluster.c:151 +#, c-format +msgid "there is no previously clustered index for table \"%s\"" +msgstr "немає попереднього кластеризованого індексу для таблиці \"%s\"" + +#: commands/cluster.c:165 commands/tablecmds.c:12853 commands/tablecmds.c:14659 +#, c-format +msgid "index \"%s\" for table \"%s\" does not exist" +msgstr "індекс \"%s\" для таблці \"%s\" не існує" + +#: commands/cluster.c:351 +#, c-format +msgid "cannot cluster a shared catalog" +msgstr "не можна кластеризувати спільний каталог" + +#: commands/cluster.c:366 +#, c-format +msgid "cannot vacuum temporary tables of other sessions" +msgstr "не можна очищати тимчасові таблиці з інших сеансів" + +#: commands/cluster.c:432 commands/tablecmds.c:14669 +#, c-format +msgid "\"%s\" is not an index for table \"%s\"" +msgstr "\"%s\" не є індексом для таблиці \"%s\"" + +#: commands/cluster.c:440 +#, c-format +msgid "cannot cluster on index \"%s\" because access method does not support clustering" +msgstr "кластеризація за індексом \"%s\" неможлива, тому що метод доступу не підтримує кластеризацію" + +#: commands/cluster.c:452 +#, c-format +msgid "cannot cluster on partial index \"%s\"" +msgstr "неможливо кластеризувати за секційним індексом \"%s\"" + +#: commands/cluster.c:466 +#, c-format +msgid "cannot cluster on invalid index \"%s\"" +msgstr "неможливо кластеризувати за невірним індексом \"%s\"" + +#: commands/cluster.c:490 +#, c-format +msgid "cannot mark index clustered in partitioned table" +msgstr "неможливо помітити індекс кластеризованим в секційній таблиці" + +#: commands/cluster.c:863 +#, c-format +msgid "clustering \"%s.%s\" using index scan on \"%s\"" +msgstr "кластеризація \"%s.%s\" з використанням сканування індексу \"%s\"" + +#: commands/cluster.c:869 +#, c-format +msgid "clustering \"%s.%s\" using sequential scan and sort" +msgstr "кластеризація \"%s.%s\"з використанням послідовного сканування та сортування" + +#: commands/cluster.c:900 +#, c-format +msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" +msgstr "\"%s\": знайдено версій рядків, що можуть бути видалені: %.0f, що не можуть бути видалені - %.0f, переглянуто сторінок: %u" + +#: commands/cluster.c:904 +#, c-format +msgid "%.0f dead row versions cannot be removed yet.\n" +"%s." +msgstr "%.0f \"мертві\" версії рядків досі не можуть бути видалені.\n" +"%s." + +#: commands/collationcmds.c:105 +#, c-format +msgid "collation attribute \"%s\" not recognized" +msgstr "атрибут collation \"%s\" не розпізнаний" + +#: commands/collationcmds.c:148 +#, c-format +msgid "collation \"default\" cannot be copied" +msgstr "сортування \"за замовчуванням\" не може бути скопійовано" + +#: commands/collationcmds.c:181 +#, c-format +msgid "unrecognized collation provider: %s" +msgstr "нерозпізнаний постачальник правил сортування: %s" + +#: commands/collationcmds.c:190 +#, c-format +msgid "parameter \"lc_collate\" must be specified" +msgstr "необхідно вказати параметр \"lc_collate\"" + +#: commands/collationcmds.c:195 +#, c-format +msgid "parameter \"lc_ctype\" must be specified" +msgstr "необхідно вказати параметр \"lc_ctype\"" + +#: commands/collationcmds.c:205 +#, c-format +msgid "nondeterministic collations not supported with this provider" +msgstr "недетерміновані правила сортування не підтримуються цим провайдером" + +#: commands/collationcmds.c:265 +#, c-format +msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" +msgstr "правило сортування \"%s\" для кодування \"%s\" вже існує в схемі \"%s\"" + +#: commands/collationcmds.c:276 +#, c-format +msgid "collation \"%s\" already exists in schema \"%s\"" +msgstr "правило сортування \"%s\" вже існує в схемі \"%s\"" + +#: commands/collationcmds.c:324 +#, c-format +msgid "changing version from %s to %s" +msgstr "зміна версії з %s на %s" + +#: commands/collationcmds.c:339 +#, c-format +msgid "version has not changed" +msgstr "версію не змінено" + +#: commands/collationcmds.c:470 +#, c-format +msgid "could not convert locale name \"%s\" to language tag: %s" +msgstr "не вдалося перетворити локальну назву \"%s\" на мітку мови: %s" + +#: commands/collationcmds.c:531 +#, c-format +msgid "must be superuser to import system collations" +msgstr "імпортувати систмені правила сортування може тільки суперкористувач" + +#: commands/collationcmds.c:554 commands/copy.c:1894 commands/copy.c:3480 +#: libpq/be-secure-common.c:81 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "не вдалося виконати команду \"%s\": %m" + +#: commands/collationcmds.c:685 +#, c-format +msgid "no usable system locales were found" +msgstr "придатні системні локалі не знайдені" + +#: commands/comment.c:61 commands/dbcommands.c:841 commands/dbcommands.c:1037 +#: commands/dbcommands.c:1150 commands/dbcommands.c:1340 +#: commands/dbcommands.c:1588 commands/dbcommands.c:1702 +#: commands/dbcommands.c:2142 utils/init/postinit.c:888 +#: utils/init/postinit.c:993 utils/init/postinit.c:1010 +#, c-format +msgid "database \"%s\" does not exist" +msgstr "бази даних \"%s\" не існує" + +#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:957 +#, c-format +msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" +msgstr "\"%s\" не є таблицею, поданням, матеріалізованим поданням, композитним типом або сторонньою таблицею" + +#: commands/constraint.c:63 utils/adt/ri_triggers.c:1923 +#, c-format +msgid "function \"%s\" was not called by trigger manager" +msgstr "функція \"%s\" не була викликана менеджером тригерів" + +#: commands/constraint.c:70 utils/adt/ri_triggers.c:1932 +#, c-format +msgid "function \"%s\" must be fired AFTER ROW" +msgstr "функція \"%s\" повинна запускатися в AFTER ROW" + +#: commands/constraint.c:84 +#, c-format +msgid "function \"%s\" must be fired for INSERT or UPDATE" +msgstr "функція \"%s\" повинна запускатися для INSERT або UPDATE" + +#: commands/conversioncmds.c:66 +#, c-format +msgid "source encoding \"%s\" does not exist" +msgstr "вихідного кодування \"%s\" не існує" + +#: commands/conversioncmds.c:73 +#, c-format +msgid "destination encoding \"%s\" does not exist" +msgstr "цільового кодування \"%s\" не існує" + +#: commands/conversioncmds.c:86 +#, c-format +msgid "encoding conversion to or from \"SQL_ASCII\" is not supported" +msgstr "перетворення кодування в або з \"SQL_ASCII\" не підтримується" + +#: commands/conversioncmds.c:99 +#, c-format +msgid "encoding conversion function %s must return type %s" +msgstr "функція перетворення кодування %s повинна повертати тип %s" + +#: commands/copy.c:426 commands/copy.c:460 +#, c-format +msgid "COPY BINARY is not supported to stdout or from stdin" +msgstr "COPY BINARY не підтримує stdout або stdin" + +#: commands/copy.c:560 +#, c-format +msgid "could not write to COPY program: %m" +msgstr "не вдалося записати в канал програми COPY: %m" + +#: commands/copy.c:565 +#, c-format +msgid "could not write to COPY file: %m" +msgstr "не можливо записати в файл COPY: %m" + +#: commands/copy.c:578 +#, c-format +msgid "connection lost during COPY to stdout" +msgstr "втрачено з'єднання під час COPY в stdout" + +#: commands/copy.c:622 +#, c-format +msgid "could not read from COPY file: %m" +msgstr "не вдалося прочитати файл COPY: %m" + +#: commands/copy.c:640 commands/copy.c:661 commands/copy.c:665 +#: tcop/postgres.c:344 tcop/postgres.c:380 tcop/postgres.c:407 +#, c-format +msgid "unexpected EOF on client connection with an open transaction" +msgstr "неочікуваний обрив з'єднання з клієнтом при відкритій транзакції" + +#: commands/copy.c:678 +#, c-format +msgid "COPY from stdin failed: %s" +msgstr "помилка при stdin COPY: %s" + +#: commands/copy.c:694 +#, c-format +msgid "unexpected message type 0x%02X during COPY from stdin" +msgstr "неочікуваний тип повідомлення 0x%02X під час COPY з stdin" + +#: commands/copy.c:861 +#, c-format +msgid "must be superuser or a member of the pg_execute_server_program role to COPY to or from an external program" +msgstr "для використання COPY із зовнішніми програмами потрібноно бути суперкористувачем або членом ролі pg_execute_server_program" + +#: commands/copy.c:862 commands/copy.c:871 commands/copy.c:878 +#, c-format +msgid "Anyone can COPY to stdout or from stdin. psql's \\copy command also works for anyone." +msgstr "Будь-хто може використати COPY to stdout або from stdin, а також команду psql \\copy." + +#: commands/copy.c:870 +#, c-format +msgid "must be superuser or a member of the pg_read_server_files role to COPY from a file" +msgstr "потрібно бути суперкористувачем або членом ролі pg_read_server_files, щоб виконати COPY з читанням файлу" + +#: commands/copy.c:877 +#, c-format +msgid "must be superuser or a member of the pg_write_server_files role to COPY to a file" +msgstr "потрібно бути суперкористувачем або членом ролі pg_write_server_files, щоб виконати COPY з записом у файл" + +#: commands/copy.c:963 +#, c-format +msgid "COPY FROM not supported with row-level security" +msgstr "COPY FROM не підтримується із захистом на рівні рядків" + +#: commands/copy.c:964 +#, c-format +msgid "Use INSERT statements instead." +msgstr "Використайте оператори INSERT замість цього." + +#: commands/copy.c:1146 +#, c-format +msgid "COPY format \"%s\" not recognized" +msgstr "Формат \"%s\" для COPY не розпізнано" + +#: commands/copy.c:1217 commands/copy.c:1233 commands/copy.c:1248 +#: commands/copy.c:1270 +#, c-format +msgid "argument to option \"%s\" must be a list of column names" +msgstr "аргументом функції \"%s\" повинен бути список імен стовпців" + +#: commands/copy.c:1285 +#, c-format +msgid "argument to option \"%s\" must be a valid encoding name" +msgstr "аргументом функції \"%s\" повинне бути припустиме ім'я коду" + +#: commands/copy.c:1292 commands/dbcommands.c:253 commands/dbcommands.c:1536 +#, c-format +msgid "option \"%s\" not recognized" +msgstr "параметр \"%s\" не розпізнано" + +#: commands/copy.c:1304 +#, c-format +msgid "cannot specify DELIMITER in BINARY mode" +msgstr "неможливо визначити DELIMITER в режимі BINARY" + +#: commands/copy.c:1309 +#, c-format +msgid "cannot specify NULL in BINARY mode" +msgstr "неможливо визначити NULL в режимі BINARY" + +#: commands/copy.c:1331 +#, c-format +msgid "COPY delimiter must be a single one-byte character" +msgstr "роздільник для COPY повинен бути однобайтовим символом" + +#: commands/copy.c:1338 +#, c-format +msgid "COPY delimiter cannot be newline or carriage return" +msgstr "Роздільник для COPY не може бути символом нового рядка або повернення каретки" + +#: commands/copy.c:1344 +#, c-format +msgid "COPY null representation cannot use newline or carriage return" +msgstr "Подання NULL для COPY не може включати символ нового рядка або повернення каретки" + +#: commands/copy.c:1361 +#, c-format +msgid "COPY delimiter cannot be \"%s\"" +msgstr "роздільник COPY не може бути \"%s\"" + +#: commands/copy.c:1367 +#, c-format +msgid "COPY HEADER available only in CSV mode" +msgstr "COPY HEADER доступний тільки в режимі CSV" + +#: commands/copy.c:1373 +#, c-format +msgid "COPY quote available only in CSV mode" +msgstr "лапки для COPY доустпні тільки в режимі CSV" + +#: commands/copy.c:1378 +#, c-format +msgid "COPY quote must be a single one-byte character" +msgstr "лапки для COPY повинні бути однобайтовим символом" + +#: commands/copy.c:1383 +#, c-format +msgid "COPY delimiter and quote must be different" +msgstr "роздільник і лапки для COPY повинні бути різними" + +#: commands/copy.c:1389 +#, c-format +msgid "COPY escape available only in CSV mode" +msgstr "вихід для COPY доступний тільки в режимі CSV" + +#: commands/copy.c:1394 +#, c-format +msgid "COPY escape must be a single one-byte character" +msgstr "вихід для COPY повинен бути однобайтовим символом" + +#: commands/copy.c:1400 +#, c-format +msgid "COPY force quote available only in CSV mode" +msgstr "Параметр force quote для COPY можна використати тільки в режимі CSV" + +#: commands/copy.c:1404 +#, c-format +msgid "COPY force quote only available using COPY TO" +msgstr "Параметр force quote для COPY можна використати тільки з COPY TO" + +#: commands/copy.c:1410 +#, c-format +msgid "COPY force not null available only in CSV mode" +msgstr "Параметр force not null для COPY можна використати тільки в режимі CSV" + +#: commands/copy.c:1414 +#, c-format +msgid "COPY force not null only available using COPY FROM" +msgstr "Параметр force not null для COPY можна використати тільки з COPY FROM" + +#: commands/copy.c:1420 +#, c-format +msgid "COPY force null available only in CSV mode" +msgstr "Параметр force null для COPY можна використати тільки в режимі CSV" + +#: commands/copy.c:1425 +#, c-format +msgid "COPY force null only available using COPY FROM" +msgstr "Параметр force null only для COPY можна використати тільки з COPY FROM" + +#: commands/copy.c:1431 +#, c-format +msgid "COPY delimiter must not appear in the NULL specification" +msgstr "роздільник COPY не повинен з'являтися у специфікації NULL" + +#: commands/copy.c:1438 +#, c-format +msgid "CSV quote character must not appear in the NULL specification" +msgstr "лапки CSV не повинні з'являтися у специфікації NULL" + +#: commands/copy.c:1524 +#, c-format +msgid "DO INSTEAD NOTHING rules are not supported for COPY" +msgstr "правила DO INSTEAD NOTHING не підтримуються для COPY" + +#: commands/copy.c:1538 +#, c-format +msgid "conditional DO INSTEAD rules are not supported for COPY" +msgstr "умовні правила DO INSTEAD не підтримуються для COPY" + +#: commands/copy.c:1542 +#, c-format +msgid "DO ALSO rules are not supported for the COPY" +msgstr "правила DO ALSO не підтримуються для COPY" + +#: commands/copy.c:1547 +#, c-format +msgid "multi-statement DO INSTEAD rules are not supported for COPY" +msgstr "складові правила DO INSTEAD не підтримуються з COPY" + +#: commands/copy.c:1557 +#, c-format +msgid "COPY (SELECT INTO) is not supported" +msgstr "COPY (SELECT INTO) не підтримується" + +#: commands/copy.c:1574 +#, c-format +msgid "COPY query must have a RETURNING clause" +msgstr "В запиті COPY повинно бути речення RETURNING" + +#: commands/copy.c:1603 +#, c-format +msgid "relation referenced by COPY statement has changed" +msgstr "відношення, згадане в операторі COPY, змінилось" + +#: commands/copy.c:1662 +#, c-format +msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" +msgstr "Стовпець FORCE_QUOTE \"%s\" не фігурує в COPY" + +#: commands/copy.c:1685 +#, c-format +msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" +msgstr "Стовпець FORCE_NOT_NULL \"%s\" не фігурує в COPY" + +#: commands/copy.c:1708 +#, c-format +msgid "FORCE_NULL column \"%s\" not referenced by COPY" +msgstr "Стовпець FORCE_NULL \"%s\" не фігурує в COPY" + +#: commands/copy.c:1774 libpq/be-secure-common.c:105 +#, c-format +msgid "could not close pipe to external command: %m" +msgstr "не вдалося закрити канал за допомогою зовнішньої команди: %m" + +#: commands/copy.c:1789 +#, c-format +msgid "program \"%s\" failed" +msgstr "збій програми \"%s\"" + +#: commands/copy.c:1840 +#, c-format +msgid "cannot copy from view \"%s\"" +msgstr "неможливо скопіювати з подання \"%s\"" + +#: commands/copy.c:1842 commands/copy.c:1848 commands/copy.c:1854 +#: commands/copy.c:1865 +#, c-format +msgid "Try the COPY (SELECT ...) TO variant." +msgstr "Спробуйте варіацію COPY (SELECT ...) TO." + +#: commands/copy.c:1846 +#, c-format +msgid "cannot copy from materialized view \"%s\"" +msgstr "неможливо скопіювати з матеріалізованого подання \"%s\"" + +#: commands/copy.c:1852 +#, c-format +msgid "cannot copy from foreign table \"%s\"" +msgstr "неможливо скопіювати зі сторонньої таблиці \"%s\"" + +#: commands/copy.c:1858 +#, c-format +msgid "cannot copy from sequence \"%s\"" +msgstr "не вдалося скопіювати з послідовності \"%s\"" + +#: commands/copy.c:1863 +#, c-format +msgid "cannot copy from partitioned table \"%s\"" +msgstr "неможливо скопіювати з секційної таблиці \"%s\"" + +#: commands/copy.c:1869 +#, c-format +msgid "cannot copy from non-table relation \"%s\"" +msgstr "не можна копіювати з відношення \"%s\", котре не є таблицею" + +#: commands/copy.c:1909 +#, c-format +msgid "relative path not allowed for COPY to file" +msgstr "при виконанні COPY в файл не можна вказувати відносний шлях" + +#: commands/copy.c:1928 +#, c-format +msgid "could not open file \"%s\" for writing: %m" +msgstr "не вдалося відкрити файл \"%s\" для запису: %m" + +#: commands/copy.c:1931 +#, c-format +msgid "COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \\copy." +msgstr "COPY TO наказує серверному процесу PostgreSQL записати дані до файлу. Можливо, вам потрібна клієнтська команда, наприклад \\copy в psql." + +#: commands/copy.c:1944 commands/copy.c:3511 +#, c-format +msgid "\"%s\" is a directory" +msgstr "\"%s\" - каталог" + +#: commands/copy.c:2246 +#, c-format +msgid "COPY %s, line %s, column %s" +msgstr "COPY %s, рядок%s, стовпець %s" + +#: commands/copy.c:2250 commands/copy.c:2297 +#, c-format +msgid "COPY %s, line %s" +msgstr "COPY %s, рядок %s" + +#: commands/copy.c:2261 +#, c-format +msgid "COPY %s, line %s, column %s: \"%s\"" +msgstr "COPY %s, рядок %s, стовпець %s: \"%s\"" + +#: commands/copy.c:2269 +#, c-format +msgid "COPY %s, line %s, column %s: null input" +msgstr "COPY %s, рядок %s, стовпець %s: значення нуль" + +#: commands/copy.c:2291 +#, c-format +msgid "COPY %s, line %s: \"%s\"" +msgstr "COPY %s, рядок %s: \"%s\"" + +#: commands/copy.c:2692 +#, c-format +msgid "cannot copy to view \"%s\"" +msgstr "неможливо скопіювати до подання \"%s\"" + +#: commands/copy.c:2694 +#, c-format +msgid "To enable copying to a view, provide an INSTEAD OF INSERT trigger." +msgstr "Щоб подання допускало копіювання даних у нього, встановіть тригер INSTEAD OF INSERT." + +#: commands/copy.c:2698 +#, c-format +msgid "cannot copy to materialized view \"%s\"" +msgstr "не можна копіювати матеріалізоване подання \"%s\"" + +#: commands/copy.c:2703 +#, c-format +msgid "cannot copy to sequence \"%s\"" +msgstr "неможливо скопіювати послідовність \"%s\"" + +#: commands/copy.c:2708 +#, c-format +msgid "cannot copy to non-table relation \"%s\"" +msgstr "неможливо копіювати у відношення \"%s\", яке не є таблицею" + +#: commands/copy.c:2748 +#, c-format +msgid "cannot perform COPY FREEZE on a partitioned table" +msgstr "виконати COPY FREEZE в секціонованій таблиці не можна" + +#: commands/copy.c:2763 +#, c-format +msgid "cannot perform COPY FREEZE because of prior transaction activity" +msgstr "виконати COPY FREEZE через попередню активність в транзакції не можна" + +#: commands/copy.c:2769 +#, c-format +msgid "cannot perform COPY FREEZE because the table was not created or truncated in the current subtransaction" +msgstr "не можна виконати COPY FREEZE, тому, що таблиця не була створена або скорочена в поточній підтранзакції" + +#: commands/copy.c:3498 +#, c-format +msgid "COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \\copy." +msgstr "COPY FROM наказує серверному процесу PostgreSQL прочитати дані з файлу. Можливо, вам потрібна клієнтська команда, наприклад \\copy в psql." + +#: commands/copy.c:3526 +#, c-format +msgid "COPY file signature not recognized" +msgstr "Підпис COPY-файлу не розпізнано" + +#: commands/copy.c:3531 +#, c-format +msgid "invalid COPY file header (missing flags)" +msgstr "невірний заголовок файлу COPY (відсутні прапори)" + +#: commands/copy.c:3535 +#, c-format +msgid "invalid COPY file header (WITH OIDS)" +msgstr "невірний заголовок файла COPY (WITH OIDS)" + +#: commands/copy.c:3540 +#, c-format +msgid "unrecognized critical flags in COPY file header" +msgstr "не розпізнано важливі прапори в заголовку файлу COPY" + +#: commands/copy.c:3546 +#, c-format +msgid "invalid COPY file header (missing length)" +msgstr "невірний заголовок файлу COPY (відсутня довжина)" + +#: commands/copy.c:3553 +#, c-format +msgid "invalid COPY file header (wrong length)" +msgstr "невірний заголовок файлу COPY (невірна довжина)" + +#: commands/copy.c:3672 commands/copy.c:4337 commands/copy.c:4567 +#, c-format +msgid "extra data after last expected column" +msgstr "зайві дані після вмісту останнього стовпця" + +#: commands/copy.c:3686 +#, c-format +msgid "missing data for column \"%s\"" +msgstr "відсутні дані для стовпця \"%s\"" + +#: commands/copy.c:3769 +#, c-format +msgid "received copy data after EOF marker" +msgstr "після маркера кінця файлу продовжуються дані COPY" + +#: commands/copy.c:3776 +#, c-format +msgid "row field count is %d, expected %d" +msgstr "кількість полів у рядку: %d, очікувалось: %d" + +#: commands/copy.c:4096 commands/copy.c:4113 +#, c-format +msgid "literal carriage return found in data" +msgstr "в даних виявлено явне повернення каретки" + +#: commands/copy.c:4097 commands/copy.c:4114 +#, c-format +msgid "unquoted carriage return found in data" +msgstr "в даних виявлено повернення каретки без лапок" + +#: commands/copy.c:4099 commands/copy.c:4116 +#, c-format +msgid "Use \"\\r\" to represent carriage return." +msgstr "Використайте \"\\r\", щоб позначити повернення каретки." + +#: commands/copy.c:4100 commands/copy.c:4117 +#, c-format +msgid "Use quoted CSV field to represent carriage return." +msgstr "Використайте CSV в лапках, щоб позначити повернення каретки." + +#: commands/copy.c:4129 +#, c-format +msgid "literal newline found in data" +msgstr "в даних знайдено явний новий рядок" + +#: commands/copy.c:4130 +#, c-format +msgid "unquoted newline found in data" +msgstr "в даних знайдено новий рядок без лапок" + +#: commands/copy.c:4132 +#, c-format +msgid "Use \"\\n\" to represent newline." +msgstr "Використайте \"\\n\", щоб представити новий рядок." + +#: commands/copy.c:4133 +#, c-format +msgid "Use quoted CSV field to represent newline." +msgstr "Використайте CSV в лапках, щоб позначити новий рядок." + +#: commands/copy.c:4179 commands/copy.c:4215 +#, c-format +msgid "end-of-copy marker does not match previous newline style" +msgstr "маркер \"кінець копії\" не відповідає попередньому стилю нового рядка" + +#: commands/copy.c:4188 commands/copy.c:4204 +#, c-format +msgid "end-of-copy marker corrupt" +msgstr "маркер \"кінець копії\" зіпсований" + +#: commands/copy.c:4651 +#, c-format +msgid "unterminated CSV quoted field" +msgstr "незакінчене поле в лапках CSV" + +#: commands/copy.c:4728 commands/copy.c:4747 +#, c-format +msgid "unexpected EOF in COPY data" +msgstr "неочікуваний кінец файлу в даних COPY" + +#: commands/copy.c:4737 +#, c-format +msgid "invalid field size" +msgstr "невірний розмір поля" + +#: commands/copy.c:4760 +#, c-format +msgid "incorrect binary data format" +msgstr "невірний двійковий формат даних" + +#: commands/copy.c:5068 +#, c-format +msgid "column \"%s\" is a generated column" +msgstr "стовпець \"%s\" є згенерованим стовпцем" + +#: commands/copy.c:5070 +#, c-format +msgid "Generated columns cannot be used in COPY." +msgstr "Згенеровані стовпці не можна використовувати в COPY." + +#: commands/copy.c:5085 commands/indexcmds.c:1700 commands/statscmds.c:217 +#: commands/tablecmds.c:2176 commands/tablecmds.c:2795 +#: commands/tablecmds.c:3182 parser/parse_relation.c:3507 +#: parser/parse_relation.c:3527 utils/adt/tsvector_op.c:2668 +#, c-format +msgid "column \"%s\" does not exist" +msgstr "стовпця \"%s\" не існує" + +#: commands/copy.c:5092 commands/tablecmds.c:2202 commands/trigger.c:885 +#: parser/parse_target.c:1052 parser/parse_target.c:1063 +#, c-format +msgid "column \"%s\" specified more than once" +msgstr "стовпець \"%s\" вказано більше чим один раз" + +#: commands/createas.c:215 commands/createas.c:497 +#, c-format +msgid "too many column names were specified" +msgstr "вказано забагато імен стовпців" + +#: commands/createas.c:539 +#, c-format +msgid "policies not yet implemented for this command" +msgstr "політики для цієї команди все ще не реалізовані" + +#: commands/dbcommands.c:246 +#, c-format +msgid "LOCATION is not supported anymore" +msgstr "LOCATION більше не підтримується" + +#: commands/dbcommands.c:247 +#, c-format +msgid "Consider using tablespaces instead." +msgstr "Розгляньте можливість використання табличних просторів." + +#: commands/dbcommands.c:261 +#, c-format +msgid "LOCALE cannot be specified together with LC_COLLATE or LC_CTYPE." +msgstr "LOCALE не може вказуватись разом з LC_COLLATE або LC_CTYPE." + +#: commands/dbcommands.c:279 utils/adt/ascii.c:145 +#, c-format +msgid "%d is not a valid encoding code" +msgstr "%d не є вірним кодом кодування" + +#: commands/dbcommands.c:290 utils/adt/ascii.c:127 +#, c-format +msgid "%s is not a valid encoding name" +msgstr "%s не є вірним ім'ям кодування" + +#: commands/dbcommands.c:314 commands/dbcommands.c:1569 commands/user.c:275 +#: commands/user.c:691 +#, c-format +msgid "invalid connection limit: %d" +msgstr "недійсний ліміт з'єднання: %d" + +#: commands/dbcommands.c:333 +#, c-format +msgid "permission denied to create database" +msgstr "немає дозволу для створення бази даних" + +#: commands/dbcommands.c:356 +#, c-format +msgid "template database \"%s\" does not exist" +msgstr "шаблону бази даних \"%s\" не існує" + +#: commands/dbcommands.c:368 +#, c-format +msgid "permission denied to copy database \"%s\"" +msgstr "немає дозволу для копіювання бази даних \"%s\"" + +#: commands/dbcommands.c:384 +#, c-format +msgid "invalid server encoding %d" +msgstr "недійсний сервер кодування %d" + +#: commands/dbcommands.c:390 commands/dbcommands.c:395 +#, c-format +msgid "invalid locale name: \"%s\"" +msgstr "неприпустиме ім'я локалі: \"%s\"" + +#: commands/dbcommands.c:415 +#, c-format +msgid "new encoding (%s) is incompatible with the encoding of the template database (%s)" +msgstr "нове кодування (%s) несумісне з кодуванням шаблона бази даних (%s)" + +#: commands/dbcommands.c:418 +#, c-format +msgid "Use the same encoding as in the template database, or use template0 as template." +msgstr "Використайте кодування шаблона бази даних або виберіть template0 в якості шаблона." + +#: commands/dbcommands.c:423 +#, c-format +msgid "new collation (%s) is incompatible with the collation of the template database (%s)" +msgstr "нове правило сортування (%s) несумісне з правилом в шаблоні бази даних (%s)" + +#: commands/dbcommands.c:425 +#, c-format +msgid "Use the same collation as in the template database, or use template0 as template." +msgstr "Використайте те ж саме правило сортування, що і в шаблоні бази даних, або виберіть template0 в якості шаблона." + +#: commands/dbcommands.c:430 +#, c-format +msgid "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database (%s)" +msgstr "новий параметр LC_CTYPE (%s) несумісний з LC_CTYPE в шаблоні бази даних (%s)" + +#: commands/dbcommands.c:432 +#, c-format +msgid "Use the same LC_CTYPE as in the template database, or use template0 as template." +msgstr "Використайте той самий LC_CTYPE, що і в шаблоні бази даних, або виберіть template0 в якості шаблона." + +#: commands/dbcommands.c:454 commands/dbcommands.c:1196 +#, c-format +msgid "pg_global cannot be used as default tablespace" +msgstr "pg_global не можна використати в якості табличного простору за замовчуванням" + +#: commands/dbcommands.c:480 +#, c-format +msgid "cannot assign new default tablespace \"%s\"" +msgstr "не вдалося призначити новий табличний простір за замовчуванням \"%s\"" + +#: commands/dbcommands.c:482 +#, c-format +msgid "There is a conflict because database \"%s\" already has some tables in this tablespace." +msgstr "БД \"%s\" вже містить таблиці, що знаходяться в цьому табличному просторі." + +#: commands/dbcommands.c:512 commands/dbcommands.c:1066 +#, c-format +msgid "database \"%s\" already exists" +msgstr "база даних \"%s\" вже існує" + +#: commands/dbcommands.c:526 +#, c-format +msgid "source database \"%s\" is being accessed by other users" +msgstr "вихідна база даних \"%s\" зайнята іншими користувачами" + +#: commands/dbcommands.c:769 commands/dbcommands.c:784 +#, c-format +msgid "encoding \"%s\" does not match locale \"%s\"" +msgstr "кодування \"%s\" не відповідає локалі \"%s\"" + +#: commands/dbcommands.c:772 +#, c-format +msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." +msgstr "Обраний параметр LC_CTYPE потребує кодування \"%s\"." + +#: commands/dbcommands.c:787 +#, c-format +msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." +msgstr "Обраний параметр LC_COLLATE потребує кодування \"%s\"." + +#: commands/dbcommands.c:848 +#, c-format +msgid "database \"%s\" does not exist, skipping" +msgstr "бази даних \"%s\" не існує, пропускаємо" + +#: commands/dbcommands.c:872 +#, c-format +msgid "cannot drop a template database" +msgstr "неможливо видалити шаблон бази даних" + +#: commands/dbcommands.c:878 +#, c-format +msgid "cannot drop the currently open database" +msgstr "неможливо видалити наразі відкриту базу даних" + +#: commands/dbcommands.c:891 +#, c-format +msgid "database \"%s\" is used by an active logical replication slot" +msgstr "база даних \"%s\" використовується активним слотом логічної реплікації" + +#: commands/dbcommands.c:893 +#, c-format +msgid "There is %d active slot." +msgid_plural "There are %d active slots." +msgstr[0] "Активний слот %d." +msgstr[1] "Активні слоти %d." +msgstr[2] "Активних слотів %d." +msgstr[3] "Активних слотів %d." + +#: commands/dbcommands.c:907 +#, c-format +msgid "database \"%s\" is being used by logical replication subscription" +msgstr "база даних \"%s\" використовується в підписці логічної реплікації" + +#: commands/dbcommands.c:909 +#, c-format +msgid "There is %d subscription." +msgid_plural "There are %d subscriptions." +msgstr[0] "Знайдено підписку %d." +msgstr[1] "Знайдено підписки %d." +msgstr[2] "Знайдено підписок %d." +msgstr[3] "Знайдено підписок %d." + +#: commands/dbcommands.c:930 commands/dbcommands.c:1088 +#: commands/dbcommands.c:1218 +#, c-format +msgid "database \"%s\" is being accessed by other users" +msgstr "база даних \"%s\" зайнята іншими користувачами" + +#: commands/dbcommands.c:1048 +#, c-format +msgid "permission denied to rename database" +msgstr "немає дозволу для перейменування бази даних" + +#: commands/dbcommands.c:1077 +#, c-format +msgid "current database cannot be renamed" +msgstr "поточна база даних не може бути перейменована" + +#: commands/dbcommands.c:1174 +#, c-format +msgid "cannot change the tablespace of the currently open database" +msgstr "неможливо змінити табличний простір наразі відкритої бази даних" + +#: commands/dbcommands.c:1277 +#, c-format +msgid "some relations of database \"%s\" are already in tablespace \"%s\"" +msgstr "деякі відношення бази даних \"%s\" вже є в табличному просторі \"%s\"" + +#: commands/dbcommands.c:1279 +#, c-format +msgid "You must move them back to the database's default tablespace before using this command." +msgstr "Перед тим, як виконувати цю команду, вам треба повернути їх в табличний простір за замовчуванням для цієї бази даних." + +#: commands/dbcommands.c:1404 commands/dbcommands.c:1980 +#: commands/dbcommands.c:2203 commands/dbcommands.c:2261 +#: commands/tablespace.c:619 +#, c-format +msgid "some useless files may be left behind in old database directory \"%s\"" +msgstr "у старому каталозі бази даних \"%s\" могли залишитися непотрібні файли" + +#: commands/dbcommands.c:1460 +#, c-format +msgid "unrecognized DROP DATABASE option \"%s\"" +msgstr "нерозпізнаний параметр DROP DATABASE \"%s\"" + +#: commands/dbcommands.c:1550 +#, c-format +msgid "option \"%s\" cannot be specified with other options" +msgstr "параметр \"%s\" не може бути вказаним з іншими параметрами" + +#: commands/dbcommands.c:1606 +#, c-format +msgid "cannot disallow connections for current database" +msgstr "не можна заборонити з'єднання для поточної бази даних" + +#: commands/dbcommands.c:1742 +#, c-format +msgid "permission denied to change owner of database" +msgstr "немає дозволу для зміни власника бази даних" + +#: commands/dbcommands.c:2086 +#, c-format +msgid "There are %d other session(s) and %d prepared transaction(s) using the database." +msgstr "Знайдено %d інших сеансів і %d підготованих транзакцій з використанням цієї бази даних." + +#: commands/dbcommands.c:2089 +#, c-format +msgid "There is %d other session using the database." +msgid_plural "There are %d other sessions using the database." +msgstr[0] "Є %d іншого сеансу з використанням цієї бази даних." +msgstr[1] "Є %d інші сеанси з використанням цієї бази даних." +msgstr[2] "Є %d інших сеансів з використанням цієї бази даних." +msgstr[3] "Є %d інших сеансів з використанням цієї бази даних." + +#: commands/dbcommands.c:2094 storage/ipc/procarray.c:3016 +#, c-format +msgid "There is %d prepared transaction using the database." +msgid_plural "There are %d prepared transactions using the database." +msgstr[0] "З цією базою даних пов'язана %d підготовлена транзакція." +msgstr[1] "З цією базою даних пов'язані %d підготовлені транзакції." +msgstr[2] "З цією базою даних пов'язані %d підготовлених транзакцій." +msgstr[3] "З цією базою даних пов'язані %d підготовлених транзакцій." + +#: commands/define.c:54 commands/define.c:228 commands/define.c:260 +#: commands/define.c:288 commands/define.c:334 +#, c-format +msgid "%s requires a parameter" +msgstr "%s потребує параметру" + +#: commands/define.c:90 commands/define.c:101 commands/define.c:195 +#: commands/define.c:213 +#, c-format +msgid "%s requires a numeric value" +msgstr "%s потребує числового значення" + +#: commands/define.c:157 +#, c-format +msgid "%s requires a Boolean value" +msgstr "%s потребує логічного значення" + +#: commands/define.c:171 commands/define.c:180 commands/define.c:297 +#, c-format +msgid "%s requires an integer value" +msgstr "%s потребує ціле значення" + +#: commands/define.c:242 +#, c-format +msgid "argument of %s must be a name" +msgstr "аргументом %s повинно бути ім'я" + +#: commands/define.c:272 +#, c-format +msgid "argument of %s must be a type name" +msgstr "аргументом %s повинно бути ім'я типу" + +#: commands/define.c:318 +#, c-format +msgid "invalid argument for %s: \"%s\"" +msgstr "невірний аргумент для %s: \"%s\"" + +#: commands/dropcmds.c:100 commands/functioncmds.c:1274 +#: utils/adt/ruleutils.c:2633 +#, c-format +msgid "\"%s\" is an aggregate function" +msgstr "\"%s\" є функцією агрегату" + +#: commands/dropcmds.c:102 +#, c-format +msgid "Use DROP AGGREGATE to drop aggregate functions." +msgstr "Використайте DROP AGGREGATE, щоб видалити агрегатні функції." + +#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3266 +#: commands/tablecmds.c:3424 commands/tablecmds.c:3469 +#: commands/tablecmds.c:15038 tcop/utility.c:1309 +#, c-format +msgid "relation \"%s\" does not exist, skipping" +msgstr "відношення \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1199 +#, c-format +msgid "schema \"%s\" does not exist, skipping" +msgstr "схеми \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:259 +#, c-format +msgid "type \"%s\" does not exist, skipping" +msgstr "типу \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:257 +#, c-format +msgid "access method \"%s\" does not exist, skipping" +msgstr "методу доступу \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:275 +#, c-format +msgid "collation \"%s\" does not exist, skipping" +msgstr "правила сортування \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:282 +#, c-format +msgid "conversion \"%s\" does not exist, skipping" +msgstr "перетворення \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:293 commands/statscmds.c:479 +#, c-format +msgid "statistics object \"%s\" does not exist, skipping" +msgstr "об'єкту статистики \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:300 +#, c-format +msgid "text search parser \"%s\" does not exist, skipping" +msgstr "парсеру текстового пошуку \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:307 +#, c-format +msgid "text search dictionary \"%s\" does not exist, skipping" +msgstr "словника текстового пошуку \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:314 +#, c-format +msgid "text search template \"%s\" does not exist, skipping" +msgstr "шаблону текстового пошуку \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:321 +#, c-format +msgid "text search configuration \"%s\" does not exist, skipping" +msgstr "конфігурації текстового пошуку \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:326 +#, c-format +msgid "extension \"%s\" does not exist, skipping" +msgstr "розширення \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:336 +#, c-format +msgid "function %s(%s) does not exist, skipping" +msgstr "функції %s(%s) не існує, пропускаємо" + +#: commands/dropcmds.c:349 +#, c-format +msgid "procedure %s(%s) does not exist, skipping" +msgstr "процедури %s(%s) не існує, пропускаємо" + +#: commands/dropcmds.c:362 +#, c-format +msgid "routine %s(%s) does not exist, skipping" +msgstr "підпрограми %s(%s) не існує, пропускаємо" + +#: commands/dropcmds.c:375 +#, c-format +msgid "aggregate %s(%s) does not exist, skipping" +msgstr "агрегату %s(%s) не існує, пропускаємо" + +#: commands/dropcmds.c:388 +#, c-format +msgid "operator %s does not exist, skipping" +msgstr "оператора \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:394 +#, c-format +msgid "language \"%s\" does not exist, skipping" +msgstr "мови \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:403 +#, c-format +msgid "cast from type %s to type %s does not exist, skipping" +msgstr "приведення від типу %s до типу %s не існує, пропускаємо" + +#: commands/dropcmds.c:412 +#, c-format +msgid "transform for type %s language \"%s\" does not exist, skipping" +msgstr "трансформації для типу %s мови \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:420 +#, c-format +msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" +msgstr "тригеру \"%s\" для відношення \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:429 +#, c-format +msgid "policy \"%s\" for relation \"%s\" does not exist, skipping" +msgstr "політики \"%s\" для відношення \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:436 +#, c-format +msgid "event trigger \"%s\" does not exist, skipping" +msgstr "тригеру подій \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:442 +#, c-format +msgid "rule \"%s\" for relation \"%s\" does not exist, skipping" +msgstr "правила \"%s\" для відношення \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:449 +#, c-format +msgid "foreign-data wrapper \"%s\" does not exist, skipping" +msgstr "джерела сторонніх даних \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:453 commands/foreigncmds.c:1399 +#, c-format +msgid "server \"%s\" does not exist, skipping" +msgstr "серверу \"%s\" не існує, пропускаємо" + +#: commands/dropcmds.c:462 +#, c-format +msgid "operator class \"%s\" does not exist for access method \"%s\", skipping" +msgstr "класу операторів \"%s\" не існує для методу доступу \"%s\", пропускаємо" + +#: commands/dropcmds.c:474 +#, c-format +msgid "operator family \"%s\" does not exist for access method \"%s\", skipping" +msgstr "сімейства операторів \"%s\" не існує для методу доступу \"%s\", пропускаємо" + +#: commands/dropcmds.c:481 +#, c-format +msgid "publication \"%s\" does not exist, skipping" +msgstr "публікації \"%s\" не існує, пропускаємо" + +#: commands/event_trigger.c:125 +#, c-format +msgid "permission denied to create event trigger \"%s\"" +msgstr "немає дозволу для створення тригера подій %s\"" + +#: commands/event_trigger.c:127 +#, c-format +msgid "Must be superuser to create an event trigger." +msgstr "Тільки суперкористувач може створити тригер подій." + +#: commands/event_trigger.c:136 +#, c-format +msgid "unrecognized event name \"%s\"" +msgstr "нерозпізнане ім'я подій \"%s\"" + +#: commands/event_trigger.c:153 +#, c-format +msgid "unrecognized filter variable \"%s\"" +msgstr "нерозпізнана змінна фільтру \"%s\"" + +#: commands/event_trigger.c:207 +#, c-format +msgid "filter value \"%s\" not recognized for filter variable \"%s\"" +msgstr "значення фільтру \"%s\" не розпізнано для змінної фільтру \"%s\"" + +#. translator: %s represents an SQL statement name +#: commands/event_trigger.c:213 commands/event_trigger.c:235 +#, c-format +msgid "event triggers are not supported for %s" +msgstr "для %s тригери подій не підтримуються" + +#: commands/event_trigger.c:248 +#, c-format +msgid "filter variable \"%s\" specified more than once" +msgstr "змінну фільтра \"%s\" вказано кілька разів" + +#: commands/event_trigger.c:399 commands/event_trigger.c:443 +#: commands/event_trigger.c:537 +#, c-format +msgid "event trigger \"%s\" does not exist" +msgstr "тригеру подій \"%s\" не існує" + +#: commands/event_trigger.c:505 +#, c-format +msgid "permission denied to change owner of event trigger \"%s\"" +msgstr "немає дозволу для зміни власника тригера подій \"%s\"" + +#: commands/event_trigger.c:507 +#, c-format +msgid "The owner of an event trigger must be a superuser." +msgstr "Власником тригеру подій може бути тільки суперкористувач." + +#: commands/event_trigger.c:1325 +#, c-format +msgid "%s can only be called in a sql_drop event trigger function" +msgstr "%s можливо викликати лише в подієвій тригерній функції sql_drop" + +#: commands/event_trigger.c:1445 commands/event_trigger.c:1466 +#, c-format +msgid "%s can only be called in a table_rewrite event trigger function" +msgstr "%s можливо викликати лише в подієвій тригерній функції table_rewrite" + +#: commands/event_trigger.c:1883 +#, c-format +msgid "%s can only be called in an event trigger function" +msgstr "%s можливо викликати тільки в подієвій тригерній функції" + +#: commands/explain.c:213 +#, c-format +msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" +msgstr "нерозпізнане значення параметру EXPLAIN \"%s\": \"%s\"" + +#: commands/explain.c:220 +#, c-format +msgid "unrecognized EXPLAIN option \"%s\"" +msgstr "нерозпізнаний параметр EXPLAIN \"%s\"" + +#: commands/explain.c:228 +#, c-format +msgid "EXPLAIN option WAL requires ANALYZE" +msgstr "Параметр WAL оператора EXPLAIN потребує вказівки ANALYZE" + +#: commands/explain.c:237 +#, c-format +msgid "EXPLAIN option TIMING requires ANALYZE" +msgstr "Параметр TIMING оператора EXPLAIN потребує вказівки ANALYZE" + +#: commands/extension.c:173 commands/extension.c:3013 +#, c-format +msgid "extension \"%s\" does not exist" +msgstr "розширення \"%s\" не існує" + +#: commands/extension.c:272 commands/extension.c:281 commands/extension.c:293 +#: commands/extension.c:303 +#, c-format +msgid "invalid extension name: \"%s\"" +msgstr "невірне ім'я розширення: \"%s\"" + +#: commands/extension.c:273 +#, c-format +msgid "Extension names must not be empty." +msgstr "Імена розширення не повинні бути пустими." + +#: commands/extension.c:282 +#, c-format +msgid "Extension names must not contain \"--\"." +msgstr "Імена розширення не повинні містити \"--\"." + +#: commands/extension.c:294 +#, c-format +msgid "Extension names must not begin or end with \"-\"." +msgstr "Імена розширення не повинні починатися або закінчуватися символом \"-\"." + +#: commands/extension.c:304 +#, c-format +msgid "Extension names must not contain directory separator characters." +msgstr "Імена розширення не повинні містити роздільники шляху." + +#: commands/extension.c:319 commands/extension.c:328 commands/extension.c:337 +#: commands/extension.c:347 +#, c-format +msgid "invalid extension version name: \"%s\"" +msgstr "невірне ім'я версії розширення: \"%s\"" + +#: commands/extension.c:320 +#, c-format +msgid "Version names must not be empty." +msgstr "Імена версії не повинні бути пустими." + +#: commands/extension.c:329 +#, c-format +msgid "Version names must not contain \"--\"." +msgstr "Імена версії не повинні містити \"--\"." + +#: commands/extension.c:338 +#, c-format +msgid "Version names must not begin or end with \"-\"." +msgstr "Імена версії не повинні починатись або закінчуватись символом \"-\"." + +#: commands/extension.c:348 +#, c-format +msgid "Version names must not contain directory separator characters." +msgstr "Імена версії не повинні містити роздільники шляху." + +#: commands/extension.c:498 +#, c-format +msgid "could not open extension control file \"%s\": %m" +msgstr "не вдалося відкрити керуючий файл розширення \"%s\": %m" + +#: commands/extension.c:520 commands/extension.c:530 +#, c-format +msgid "parameter \"%s\" cannot be set in a secondary extension control file" +msgstr "параметр \"%s\" не можна задавати в додатковому керуючому файлі розширення" + +#: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 +#: utils/misc/guc.c:6749 +#, c-format +msgid "parameter \"%s\" requires a Boolean value" +msgstr "параметр \"%s\" потребує логічного значення" + +#: commands/extension.c:577 +#, c-format +msgid "\"%s\" is not a valid encoding name" +msgstr "\"%s\" не є невірним ім'ям кодування" + +#: commands/extension.c:591 +#, c-format +msgid "parameter \"%s\" must be a list of extension names" +msgstr "параметр \"%s\" повинен містити список імен розширень" + +#: commands/extension.c:598 +#, c-format +msgid "unrecognized parameter \"%s\" in file \"%s\"" +msgstr "нерозпізнаний параметр \"%s\" в файлі \"%s\"" + +#: commands/extension.c:607 +#, c-format +msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" +msgstr "параметр \"schema\" не може бути вказаним, коли \"relocatable\" є дійсним" + +#: commands/extension.c:785 +#, c-format +msgid "transaction control statements are not allowed within an extension script" +msgstr "в скрипті розширення не повинно бути операторів управління транзакціями" + +#: commands/extension.c:861 +#, c-format +msgid "permission denied to create extension \"%s\"" +msgstr "немає дозволу для створення розширення %s\"" + +#: commands/extension.c:864 +#, c-format +msgid "Must have CREATE privilege on current database to create this extension." +msgstr "Необхідно мати право CREATE для поточної бази даних щоб створити це розширення." + +#: commands/extension.c:865 +#, c-format +msgid "Must be superuser to create this extension." +msgstr "Тільки суперкористувач може створити це розширення." + +#: commands/extension.c:869 +#, c-format +msgid "permission denied to update extension \"%s\"" +msgstr "немає дозволу для оновлення розширення %s\"" + +#: commands/extension.c:872 +#, c-format +msgid "Must have CREATE privilege on current database to update this extension." +msgstr "Необхідно мати право CREATE для поточної бази даних щоб оновити це розширення." + +#: commands/extension.c:873 +#, c-format +msgid "Must be superuser to update this extension." +msgstr "Тільки суперкористувач може оновити це розширення." + +#: commands/extension.c:1200 +#, c-format +msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" +msgstr "розширення \"%s\" не має жодного шляху оновлення від версії \"%s\" до версії \"%s\"" + +#: commands/extension.c:1408 commands/extension.c:3074 +#, c-format +msgid "version to install must be specified" +msgstr "для інсталяції слід указати версію" + +#: commands/extension.c:1445 +#, c-format +msgid "extension \"%s\" has no installation script nor update path for version \"%s\"" +msgstr "розширення \"%s\" не має ні скрипту для встановлення, ні шляху оновлення для версії \"%s\"" + +#: commands/extension.c:1479 +#, c-format +msgid "extension \"%s\" must be installed in schema \"%s\"" +msgstr "розширення \"%s\" треба встановлювати в схемі \"%s\"" + +#: commands/extension.c:1639 +#, c-format +msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" +msgstr "виявлено циклічну залежність між розширеннями \"%s\" і \"%s\"" + +#: commands/extension.c:1644 +#, c-format +msgid "installing required extension \"%s\"" +msgstr "встановлення необхідних розширень \"%s\"" + +#: commands/extension.c:1667 +#, c-format +msgid "required extension \"%s\" is not installed" +msgstr "необхідні розширення \"%s\" не встановлено" + +#: commands/extension.c:1670 +#, c-format +msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." +msgstr "Використайте CREATE EXTENSION ... CASCADE також для встановлення необхідних розширень." + +#: commands/extension.c:1705 +#, c-format +msgid "extension \"%s\" already exists, skipping" +msgstr "розширення \"%s\" вже існує, пропускаємо" + +#: commands/extension.c:1712 +#, c-format +msgid "extension \"%s\" already exists" +msgstr "розширення \"%s\" вже існує" + +#: commands/extension.c:1723 +#, c-format +msgid "nested CREATE EXTENSION is not supported" +msgstr "вкладенні оператори CREATE EXTENSION не підтримуються" + +#: commands/extension.c:1896 +#, c-format +msgid "cannot drop extension \"%s\" because it is being modified" +msgstr "неможливо видалити розширення \"%s\", оскільки воно змінюється" + +#: commands/extension.c:2457 +#, c-format +msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" +msgstr "%s можна викликати лише з SQL-скрипта, виконаного CREATE EXTENSION" + +#: commands/extension.c:2469 +#, c-format +msgid "OID %u does not refer to a table" +msgstr "OID %u не посилається на таблицю" + +#: commands/extension.c:2474 +#, c-format +msgid "table \"%s\" is not a member of the extension being created" +msgstr "таблиця \"%s\" не є членом створеного розширення" + +#: commands/extension.c:2828 +#, c-format +msgid "cannot move extension \"%s\" into schema \"%s\" because the extension contains the schema" +msgstr "неможливо перемістити розширення \"%s\" в схему \"%s\", оскільки розширення містить схему" + +#: commands/extension.c:2869 commands/extension.c:2932 +#, c-format +msgid "extension \"%s\" does not support SET SCHEMA" +msgstr "розширення \"%s\" не підтримує SET SCHEMA" + +#: commands/extension.c:2934 +#, c-format +msgid "%s is not in the extension's schema \"%s\"" +msgstr "%s не є схемою розширення \"%s\"" + +#: commands/extension.c:2993 +#, c-format +msgid "nested ALTER EXTENSION is not supported" +msgstr "вкладенні оператори ALTER EXTENSION не підтримуються" + +#: commands/extension.c:3085 +#, c-format +msgid "version \"%s\" of extension \"%s\" is already installed" +msgstr "версія \"%s\" розширення \"%s\" вже встановлена" + +#: commands/extension.c:3336 +#, c-format +msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" +msgstr "неможливо додати схему \"%s\" до розширення \"%s\", оскільки схема містить розширення" + +#: commands/extension.c:3364 +#, c-format +msgid "%s is not a member of extension \"%s\"" +msgstr "%s не є членом розширення \"%s\"" + +#: commands/extension.c:3430 +#, c-format +msgid "file \"%s\" is too large" +msgstr "файл \"%s\" занадто великий" + +#: commands/foreigncmds.c:148 commands/foreigncmds.c:157 +#, c-format +msgid "option \"%s\" not found" +msgstr "параметр \"%s\" не знайдено" + +#: commands/foreigncmds.c:167 +#, c-format +msgid "option \"%s\" provided more than once" +msgstr "параметр \"%s\" надано більше одного разу" + +#: commands/foreigncmds.c:221 commands/foreigncmds.c:229 +#, c-format +msgid "permission denied to change owner of foreign-data wrapper \"%s\"" +msgstr "немає дозволу для зміни власника джерела сторонніх даних \"%s\"" + +#: commands/foreigncmds.c:223 +#, c-format +msgid "Must be superuser to change owner of a foreign-data wrapper." +msgstr "Треба бути суперкористувачем, щоб змінити власника джерела сторонніх даних." + +#: commands/foreigncmds.c:231 +#, c-format +msgid "The owner of a foreign-data wrapper must be a superuser." +msgstr "Власником джерела сторонніх даних може бути тільки суперкористувач." + +#: commands/foreigncmds.c:291 commands/foreigncmds.c:711 foreign/foreign.c:701 +#, c-format +msgid "foreign-data wrapper \"%s\" does not exist" +msgstr "джерела сторонніх даних \"%s\" не існує" + +#: commands/foreigncmds.c:584 +#, c-format +msgid "permission denied to create foreign-data wrapper \"%s\"" +msgstr "немає дозволу для створення джерела сторонніх даних %s\"" + +#: commands/foreigncmds.c:586 +#, c-format +msgid "Must be superuser to create a foreign-data wrapper." +msgstr "Треба бути суперкористувачем, щоб створити джерело сторонніх даних." + +#: commands/foreigncmds.c:701 +#, c-format +msgid "permission denied to alter foreign-data wrapper \"%s\"" +msgstr "немає дозволу на зміну джерела сторонніх даних \"%s\"" + +#: commands/foreigncmds.c:703 +#, c-format +msgid "Must be superuser to alter a foreign-data wrapper." +msgstr "Треба бути суперкористувачем, щоб змінити джерело сторонніх даних." + +#: commands/foreigncmds.c:734 +#, c-format +msgid "changing the foreign-data wrapper handler can change behavior of existing foreign tables" +msgstr "при зміні обробника в обгортці сторонніх даних може змінитися поведінка існуючих сторонніх таблиць" + +#: commands/foreigncmds.c:749 +#, c-format +msgid "changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid" +msgstr "при зміні функції перевірки в обгортці сторонніх даних параметри залежних об'єктів можуть стати невірними" + +#: commands/foreigncmds.c:895 +#, c-format +msgid "server \"%s\" already exists, skipping" +msgstr "сервер \"%s\" вже існує, пропускаємо" + +#: commands/foreigncmds.c:1183 +#, c-format +msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" +msgstr "зіставлення користувача \"%s\" для сервера \"%s\" вже існує, пропускаємо" + +#: commands/foreigncmds.c:1193 +#, c-format +msgid "user mapping for \"%s\" already exists for server \"%s\"" +msgstr "зіставлення користувача \"%s\" для сервера \"%s\" вже існує\"" + +#: commands/foreigncmds.c:1293 commands/foreigncmds.c:1413 +#, c-format +msgid "user mapping for \"%s\" does not exist for server \"%s\"" +msgstr "зіставлення користувача \"%s\" не існує для сервера \"%s\"" + +#: commands/foreigncmds.c:1418 +#, c-format +msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" +msgstr "зіставлення користувача \"%s\" не існує для сервера \"%s\", пропускаємо" + +#: commands/foreigncmds.c:1569 foreign/foreign.c:389 +#, c-format +msgid "foreign-data wrapper \"%s\" has no handler" +msgstr "джерело сторонніх даних \"%s\" не має обробника" + +#: commands/foreigncmds.c:1575 +#, c-format +msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" +msgstr "джерело сторонніх даних \"%s\" не підтримує IMPORT FOREIGN SCHEMA" + +#: commands/foreigncmds.c:1678 +#, c-format +msgid "importing foreign table \"%s\"" +msgstr "імпорт сторонньої таблиці \"%s\"" + +#: commands/functioncmds.c:104 +#, c-format +msgid "SQL function cannot return shell type %s" +msgstr "SQL-функція не може повертати тип оболонки %s" + +#: commands/functioncmds.c:109 +#, c-format +msgid "return type %s is only a shell" +msgstr "тип, що повертається, %s - лише оболонка" + +#: commands/functioncmds.c:139 parser/parse_type.c:354 +#, c-format +msgid "type modifier cannot be specified for shell type \"%s\"" +msgstr "для типу оболонки \"%s\" неможливо вказати модифікатор типу" + +#: commands/functioncmds.c:145 +#, c-format +msgid "type \"%s\" is not yet defined" +msgstr "тип \"%s\" все ще не визначений" + +#: commands/functioncmds.c:146 +#, c-format +msgid "Creating a shell type definition." +msgstr "Створення визначення типу оболонки." + +#: commands/functioncmds.c:238 +#, c-format +msgid "SQL function cannot accept shell type %s" +msgstr "SQL-функція не може приймати значення типу оболонки %s" + +#: commands/functioncmds.c:244 +#, c-format +msgid "aggregate cannot accept shell type %s" +msgstr "агрегатна функція не може приймати значення типу оболонки %s" + +#: commands/functioncmds.c:249 +#, c-format +msgid "argument type %s is only a shell" +msgstr "тип аргументу %s - лише оболонка" + +#: commands/functioncmds.c:259 +#, c-format +msgid "type %s does not exist" +msgstr "тип \"%s\" не існує" + +#: commands/functioncmds.c:273 +#, c-format +msgid "aggregates cannot accept set arguments" +msgstr "агрегатні функції не приймають в аргументах набору" + +#: commands/functioncmds.c:277 +#, c-format +msgid "procedures cannot accept set arguments" +msgstr "процедури не приймають в аргументах набору" + +#: commands/functioncmds.c:281 +#, c-format +msgid "functions cannot accept set arguments" +msgstr "функції не приймають в аргументах набору" + +#: commands/functioncmds.c:289 +#, c-format +msgid "procedures cannot have OUT arguments" +msgstr "процедури не можуть мати OUT-аргументи" + +#: commands/functioncmds.c:290 +#, c-format +msgid "INOUT arguments are permitted." +msgstr "Аргументи INOUT дозволені." + +#: commands/functioncmds.c:300 +#, c-format +msgid "VARIADIC parameter must be the last input parameter" +msgstr "Параметр VARIADIC повинен бути останнім в списку вхідних параметрів" + +#: commands/functioncmds.c:331 +#, c-format +msgid "VARIADIC parameter must be an array" +msgstr "Параметр VARIADIC повинен бути масивом" + +#: commands/functioncmds.c:371 +#, c-format +msgid "parameter name \"%s\" used more than once" +msgstr "ім'я параметру «%s» використано декілька разів" + +#: commands/functioncmds.c:386 +#, c-format +msgid "only input parameters can have default values" +msgstr "тільки ввідні параметри можуть мати значення за замовчуванням" + +#: commands/functioncmds.c:401 +#, c-format +msgid "cannot use table references in parameter default value" +msgstr "у значенні параметру за замовчуванням не можна посилатись на таблиці" + +#: commands/functioncmds.c:425 +#, c-format +msgid "input parameters after one with a default value must also have defaults" +msgstr "вхідні параметри, наступні за параметром зі значенням \"за замовчуванням\", також повинні мати значення \"за замовчуванням\"" + +#: commands/functioncmds.c:577 commands/functioncmds.c:768 +#, c-format +msgid "invalid attribute in procedure definition" +msgstr "некоректний атрибут у визначенні процедури" + +#: commands/functioncmds.c:673 +#, c-format +msgid "support function %s must return type %s" +msgstr "функція підтримки %s повинна повертати тип %s" + +#: commands/functioncmds.c:684 +#, c-format +msgid "must be superuser to specify a support function" +msgstr "для уточнення функції підтримки потрібно бути суперкористувачем" + +#: commands/functioncmds.c:800 +#, c-format +msgid "no function body specified" +msgstr "не вказано тіло функції" + +#: commands/functioncmds.c:810 +#, c-format +msgid "no language specified" +msgstr "не вказано жодної мови" + +#: commands/functioncmds.c:835 commands/functioncmds.c:1319 +#, c-format +msgid "COST must be positive" +msgstr "COST має бути додатнім" + +#: commands/functioncmds.c:843 commands/functioncmds.c:1327 +#, c-format +msgid "ROWS must be positive" +msgstr "Значення ROWS повинно бути позитивним" + +#: commands/functioncmds.c:897 +#, c-format +msgid "only one AS item needed for language \"%s\"" +msgstr "для мови \"%s\" потрібен лише один вираз AS" + +#: commands/functioncmds.c:995 commands/functioncmds.c:2048 +#: commands/proclang.c:259 +#, c-format +msgid "language \"%s\" does not exist" +msgstr "мови \"%s\" не існує" + +#: commands/functioncmds.c:997 commands/functioncmds.c:2050 +#, c-format +msgid "Use CREATE EXTENSION to load the language into the database." +msgstr "Використайте CREATE EXTENSION, щоб завантажити мову в базу даних." + +#: commands/functioncmds.c:1032 commands/functioncmds.c:1311 +#, c-format +msgid "only superuser can define a leakproof function" +msgstr "лише суперкористувачі можуть визначити функцію з атрибутом leakproof" + +#: commands/functioncmds.c:1081 +#, c-format +msgid "function result type must be %s because of OUT parameters" +msgstr "результат функції повинен мати тип %s відповідно з параметрами OUT" + +#: commands/functioncmds.c:1094 +#, c-format +msgid "function result type must be specified" +msgstr "необхідно вказати тип результату функції" + +#: commands/functioncmds.c:1146 commands/functioncmds.c:1331 +#, c-format +msgid "ROWS is not applicable when function does not return a set" +msgstr "ROWS не застосовується, коли функція не повертає набір" + +#: commands/functioncmds.c:1431 +#, c-format +msgid "source data type %s is a pseudo-type" +msgstr "вихідний тип даних %s є псевдотипом" + +#: commands/functioncmds.c:1437 +#, c-format +msgid "target data type %s is a pseudo-type" +msgstr "цільовий тип даних %s є псевдотипом" + +#: commands/functioncmds.c:1461 +#, c-format +msgid "cast will be ignored because the source data type is a domain" +msgstr "приведення буде ігноруватися, оскільки вихідні дані мають тип домену" + +#: commands/functioncmds.c:1466 +#, c-format +msgid "cast will be ignored because the target data type is a domain" +msgstr "приведення буде ігноруватися, оскільки цільові дані мають тип домену" + +#: commands/functioncmds.c:1491 +#, c-format +msgid "cast function must take one to three arguments" +msgstr "функція приведення повинна приймати від одного до трьох аргументів" + +#: commands/functioncmds.c:1495 +#, c-format +msgid "argument of cast function must match or be binary-coercible from source data type" +msgstr "аргумент функції приведення повинен співпадати або бути двійково-сумісним з вихідним типом даних" + +#: commands/functioncmds.c:1499 +#, c-format +msgid "second argument of cast function must be type %s" +msgstr "другий аргумент функції приведення повинен мати тип %s" + +#: commands/functioncmds.c:1504 +#, c-format +msgid "third argument of cast function must be type %s" +msgstr "третій аргумент функції приведення повинен мати тип %s" + +#: commands/functioncmds.c:1509 +#, c-format +msgid "return data type of cast function must match or be binary-coercible to target data type" +msgstr "тип вертаючих даних функції приведення повинен співпадати або бути двійково-сумісним з цільовим типом даних" + +#: commands/functioncmds.c:1520 +#, c-format +msgid "cast function must not be volatile" +msgstr "функція приведення не може бути змінною (volatile)" + +#: commands/functioncmds.c:1525 +#, c-format +msgid "cast function must be a normal function" +msgstr "функція приведення повинна бути звичайною функцією" + +#: commands/functioncmds.c:1529 +#, c-format +msgid "cast function must not return a set" +msgstr "функція приведення не може вертати набір" + +#: commands/functioncmds.c:1555 +#, c-format +msgid "must be superuser to create a cast WITHOUT FUNCTION" +msgstr "тільки суперкористувач може створити приведення WITHOUT FUNCTION" + +#: commands/functioncmds.c:1570 +#, c-format +msgid "source and target data types are not physically compatible" +msgstr "вихідний та цільовий типи даних не сумісні фізично" + +#: commands/functioncmds.c:1585 +#, c-format +msgid "composite data types are not binary-compatible" +msgstr "складені типи даних не сумісні на двійковому рівні" + +#: commands/functioncmds.c:1591 +#, c-format +msgid "enum data types are not binary-compatible" +msgstr "типи переліку не сумісні на двійковому рівні" + +#: commands/functioncmds.c:1597 +#, c-format +msgid "array data types are not binary-compatible" +msgstr "типи масивів не сумісні на двійковому рівні" + +#: commands/functioncmds.c:1614 +#, c-format +msgid "domain data types must not be marked binary-compatible" +msgstr "типи доменів не можуть вважатись сумісними на двійковому рівні" + +#: commands/functioncmds.c:1624 +#, c-format +msgid "source data type and target data type are the same" +msgstr "вихідний тип даних співпадає з цільовим типом" + +#: commands/functioncmds.c:1682 +#, c-format +msgid "transform function must not be volatile" +msgstr "функція перетворення не може бути мінливою" + +#: commands/functioncmds.c:1686 +#, c-format +msgid "transform function must be a normal function" +msgstr "функція перетворення повинна бути нормальною функцією" + +#: commands/functioncmds.c:1690 +#, c-format +msgid "transform function must not return a set" +msgstr "функція перетворення не повинна повертати набір" + +#: commands/functioncmds.c:1694 +#, c-format +msgid "transform function must take one argument" +msgstr "функція перетворення повинна приймати один аргумент" + +#: commands/functioncmds.c:1698 +#, c-format +msgid "first argument of transform function must be type %s" +msgstr "перший аргумент функції перетворення повинен бути типу %s" + +#: commands/functioncmds.c:1736 +#, c-format +msgid "data type %s is a pseudo-type" +msgstr "тип даних %s є псевдотипом" + +#: commands/functioncmds.c:1742 +#, c-format +msgid "data type %s is a domain" +msgstr "тип даних %s є доменом" + +#: commands/functioncmds.c:1782 +#, c-format +msgid "return data type of FROM SQL function must be %s" +msgstr "результат функції FROM SQL має бути типу %s" + +#: commands/functioncmds.c:1808 +#, c-format +msgid "return data type of TO SQL function must be the transform data type" +msgstr "результат функції TO SQL повинен мати тип даних перетворення" + +#: commands/functioncmds.c:1837 +#, c-format +msgid "transform for type %s language \"%s\" already exists" +msgstr "перетворення для типу %s мови \"%s\" вже існує" + +#: commands/functioncmds.c:1929 +#, c-format +msgid "transform for type %s language \"%s\" does not exist" +msgstr "перетворення для типу %s мови \"%s\" не існує" + +#: commands/functioncmds.c:1980 +#, c-format +msgid "function %s already exists in schema \"%s\"" +msgstr "функція %s вже існує в схемі \"%s\"" + +#: commands/functioncmds.c:2035 +#, c-format +msgid "no inline code specified" +msgstr "не вказано жодного впровадженого коду" + +#: commands/functioncmds.c:2081 +#, c-format +msgid "language \"%s\" does not support inline code execution" +msgstr "мова \"%s\" не підтримує виконання впровадженого коду" + +#: commands/functioncmds.c:2193 +#, c-format +msgid "cannot pass more than %d argument to a procedure" +msgid_plural "cannot pass more than %d arguments to a procedure" +msgstr[0] "процедурі неможливо передати більше %d аргументу" +msgstr[1] "процедурі неможливо передати більше %d аргументів" +msgstr[2] "процедурі неможливо передати більше %d аргументів" +msgstr[3] "процедурі неможливо передати більше %d аргументів" + +#: commands/indexcmds.c:590 +#, c-format +msgid "must specify at least one column" +msgstr "треба вказати хоча б один стовпець" + +#: commands/indexcmds.c:594 +#, c-format +msgid "cannot use more than %d columns in an index" +msgstr "не можна використовувати більше ніж %d стовпців в індексі" + +#: commands/indexcmds.c:633 +#, c-format +msgid "cannot create index on foreign table \"%s\"" +msgstr "неможливо створити індекс в сторонній таблиці \"%s\"" + +#: commands/indexcmds.c:664 +#, c-format +msgid "cannot create index on partitioned table \"%s\" concurrently" +msgstr "неможливо створити індекс в секційній таблиці \"%s\" паралельним способом" + +#: commands/indexcmds.c:669 +#, c-format +msgid "cannot create exclusion constraints on partitioned table \"%s\"" +msgstr "створити обмеження-виняток в секціонованій таблиці \"%s\" не можна" + +#: commands/indexcmds.c:679 +#, c-format +msgid "cannot create indexes on temporary tables of other sessions" +msgstr "неможливо створити індекси в тимчасових таблицях в інших сеансах" + +#: commands/indexcmds.c:717 commands/tablecmds.c:704 commands/tablespace.c:1173 +#, c-format +msgid "cannot specify default tablespace for partitioned relations" +msgstr "для секціонованих відношень не можна вказати табличний простір за замовчуванням" + +#: commands/indexcmds.c:749 commands/tablecmds.c:739 commands/tablecmds.c:13162 +#: commands/tablecmds.c:13276 +#, c-format +msgid "only shared relations can be placed in pg_global tablespace" +msgstr "тільки спільні відношення можуть бути поміщені в табличний pg_global" + +#: commands/indexcmds.c:782 +#, c-format +msgid "substituting access method \"gist\" for obsolete method \"rtree\"" +msgstr "застарілий метод доступу \"rtree\" підміняється методом \"gist\"" + +#: commands/indexcmds.c:803 +#, c-format +msgid "access method \"%s\" does not support unique indexes" +msgstr "методу доступу \"%s\" не підтримує унікальні індекси" + +#: commands/indexcmds.c:808 +#, c-format +msgid "access method \"%s\" does not support included columns" +msgstr "методу доступу \"%s\" не підтримує включені стовпці" + +#: commands/indexcmds.c:813 +#, c-format +msgid "access method \"%s\" does not support multicolumn indexes" +msgstr "метод доступу \"%s\" не підтримує багатостовпцеві індекси" + +#: commands/indexcmds.c:818 +#, c-format +msgid "access method \"%s\" does not support exclusion constraints" +msgstr "метод доступу \"%s\" не підтримує обмеження-винятки" + +#: commands/indexcmds.c:941 +#, c-format +msgid "cannot match partition key to an index using access method \"%s\"" +msgstr "не можна зіставити ключ розділу з індексом використовуючи метод доступу \"%s\"" + +#: commands/indexcmds.c:951 +#, c-format +msgid "unsupported %s constraint with partition key definition" +msgstr "непідтримуване обмеження \"%s\" з визначенням ключа секціонування" + +#: commands/indexcmds.c:953 +#, c-format +msgid "%s constraints cannot be used when partition keys include expressions." +msgstr "обмеження %s не можуть використовуватись, якщо ключі секціонування включають вирази." + +#: commands/indexcmds.c:992 +#, c-format +msgid "insufficient columns in %s constraint definition" +msgstr "недостатньо стовпців у визначенні обмеження %s" + +#: commands/indexcmds.c:994 +#, c-format +msgid "%s constraint on table \"%s\" lacks column \"%s\" which is part of the partition key." +msgstr "в обмеженні %s таблиці\"%s\" не вистачає стовпця \"%s\", що є частиною ключа секціонування." + +#: commands/indexcmds.c:1013 commands/indexcmds.c:1032 +#, c-format +msgid "index creation on system columns is not supported" +msgstr "створення індексу для системних стовпців не підтримується" + +#: commands/indexcmds.c:1057 +#, c-format +msgid "%s %s will create implicit index \"%s\" for table \"%s\"" +msgstr "%s %s створить неявний індекс \"%s\" для таблиці \"%s\"" + +#: commands/indexcmds.c:1198 tcop/utility.c:1495 +#, c-format +msgid "cannot create unique index on partitioned table \"%s\"" +msgstr "не можна створити унікальний індекс в секціонованій таблиці \"%s\"" + +#: commands/indexcmds.c:1200 tcop/utility.c:1497 +#, c-format +msgid "Table \"%s\" contains partitions that are foreign tables." +msgstr "Таблиця \"%s\" містить секції, які є зовнішніми таблицями." + +#: commands/indexcmds.c:1629 +#, c-format +msgid "functions in index predicate must be marked IMMUTABLE" +msgstr "функції в предикаті індексу повинні бути позначені як IMMUTABLE" + +#: commands/indexcmds.c:1695 parser/parse_utilcmd.c:2440 +#: parser/parse_utilcmd.c:2575 +#, c-format +msgid "column \"%s\" named in key does not exist" +msgstr "вказаний у ключі стовпець \"%s\" не існує" + +#: commands/indexcmds.c:1719 parser/parse_utilcmd.c:1776 +#, c-format +msgid "expressions are not supported in included columns" +msgstr "вирази не підтримуються у включених стовпцях " + +#: commands/indexcmds.c:1760 +#, c-format +msgid "functions in index expression must be marked IMMUTABLE" +msgstr "функції в індексному виразі повинні бути позначені як IMMUTABLE" + +#: commands/indexcmds.c:1775 +#, c-format +msgid "including column does not support a collation" +msgstr "включені стовпці не підтримують правила сортування" + +#: commands/indexcmds.c:1779 +#, c-format +msgid "including column does not support an operator class" +msgstr "включені стовпці не підтримують класи операторів" + +#: commands/indexcmds.c:1783 +#, c-format +msgid "including column does not support ASC/DESC options" +msgstr "включені стовпці не підтримують параметри ASC/DESC" + +#: commands/indexcmds.c:1787 +#, c-format +msgid "including column does not support NULLS FIRST/LAST options" +msgstr "включені стовпці не підтримують параметри NULLS FIRST/LAST" + +#: commands/indexcmds.c:1814 +#, c-format +msgid "could not determine which collation to use for index expression" +msgstr "не вдалося визначити, яке правило сортування використати для індексного виразу" + +#: commands/indexcmds.c:1822 commands/tablecmds.c:16042 commands/typecmds.c:771 +#: parser/parse_expr.c:2850 parser/parse_type.c:566 parser/parse_utilcmd.c:3649 +#: parser/parse_utilcmd.c:4210 utils/adt/misc.c:503 +#, c-format +msgid "collations are not supported by type %s" +msgstr "тип %s не підтримує правила сортування" + +#: commands/indexcmds.c:1860 +#, c-format +msgid "operator %s is not commutative" +msgstr "оператор %s не комутативний" + +#: commands/indexcmds.c:1862 +#, c-format +msgid "Only commutative operators can be used in exclusion constraints." +msgstr "В обмеженнях-виключеннях можуть використовуватись лише комутативні оператори." + +#: commands/indexcmds.c:1888 +#, c-format +msgid "operator %s is not a member of operator family \"%s\"" +msgstr "оператор %s не є членом сімейства операторів \"%s\"" + +#: commands/indexcmds.c:1891 +#, c-format +msgid "The exclusion operator must be related to the index operator class for the constraint." +msgstr "Оператор винятку для обмеження повинен відноситись до класу операторів індексу." + +#: commands/indexcmds.c:1926 +#, c-format +msgid "access method \"%s\" does not support ASC/DESC options" +msgstr "метод доступу \"%s\" не підтримує параметри ASC/DESC" + +#: commands/indexcmds.c:1931 +#, c-format +msgid "access method \"%s\" does not support NULLS FIRST/LAST options" +msgstr "метод доступу \"%s\" не підтримує параметри NULLS FIRST/LAST" + +#: commands/indexcmds.c:1977 commands/tablecmds.c:16067 +#: commands/tablecmds.c:16073 commands/typecmds.c:1945 +#, c-format +msgid "data type %s has no default operator class for access method \"%s\"" +msgstr "тип даних %s не має класу операторів за замовчуванням для методу доступу \"%s\"" + +#: commands/indexcmds.c:1979 +#, c-format +msgid "You must specify an operator class for the index or define a default operator class for the data type." +msgstr "Ви повинні вказати клас операторів для індексу або визначити клас операторів за замовчуванням для цього типу даних." + +#: commands/indexcmds.c:2008 commands/indexcmds.c:2016 +#: commands/opclasscmds.c:208 +#, c-format +msgid "operator class \"%s\" does not exist for access method \"%s\"" +msgstr "клас операторів \"%s\" не існує для методу доступу \"%s\"" + +#: commands/indexcmds.c:2030 commands/typecmds.c:1933 +#, c-format +msgid "operator class \"%s\" does not accept data type %s" +msgstr "клас операторів \"%s\" не приймає тип даних %s" + +#: commands/indexcmds.c:2120 +#, c-format +msgid "there are multiple default operator classes for data type %s" +msgstr "для типу даних %s є кілька класів операторів за замовчуванням" + +#: commands/indexcmds.c:2569 +#, c-format +msgid "table \"%s\" has no indexes that can be reindexed concurrently" +msgstr "таблиця \"%s\" не має індексів, які можна переіндексувати паралельно" + +#: commands/indexcmds.c:2580 +#, c-format +msgid "table \"%s\" has no indexes to reindex" +msgstr "таблиця \"%s\" не має індексів для переіндексування" + +#: commands/indexcmds.c:2619 commands/indexcmds.c:2893 +#: commands/indexcmds.c:2986 +#, c-format +msgid "cannot reindex system catalogs concurrently" +msgstr "не можна конкурентно переіндексувати системні каталоги" + +#: commands/indexcmds.c:2642 +#, c-format +msgid "can only reindex the currently open database" +msgstr "переіндексувати можна тільки наразі відкриту базу даних" + +#: commands/indexcmds.c:2733 +#, c-format +msgid "cannot reindex system catalogs concurrently, skipping all" +msgstr "не можна конкурентно переіндексувати системні каталоги, пропускаємо" + +#: commands/indexcmds.c:2785 commands/indexcmds.c:3466 +#, c-format +msgid "table \"%s.%s\" was reindexed" +msgstr "таблиця \"%s.%s\" була переіндексована" + +#: commands/indexcmds.c:2908 commands/indexcmds.c:2954 +#, c-format +msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" +msgstr "неможливо переіндексувати пошкоджений індекс \"%s.%s\" паралельно, пропускається" + +#: commands/indexcmds.c:2914 +#, c-format +msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" +msgstr "неможливо переіндексувати індекс обмеження-виключення \"%s.%s\" паралельно, пропускається" + +#: commands/indexcmds.c:2996 +#, c-format +msgid "cannot reindex invalid index on TOAST table concurrently" +msgstr "переіндексувати неприпустимий індекс в таблиці TOAST в даний час не можна" + +#: commands/indexcmds.c:3024 +#, c-format +msgid "cannot reindex this type of relation concurrently" +msgstr "неможливо переіндексувати цей тип відношень паралельон" + +#: commands/indexcmds.c:3448 commands/indexcmds.c:3459 +#, c-format +msgid "index \"%s.%s\" was reindexed" +msgstr "індекс \"%s.%s\" був перебудований" + +#: commands/indexcmds.c:3491 +#, c-format +msgid "REINDEX is not yet implemented for partitioned indexes" +msgstr "REINDEX для секціонованих індексів ще не реалізований" + +#: commands/lockcmds.c:91 commands/tablecmds.c:5629 commands/trigger.c:295 +#: rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:928 +#, c-format +msgid "\"%s\" is not a table or view" +msgstr "\"%s\" - не таблиця або подання" + +#: commands/lockcmds.c:213 rewrite/rewriteHandler.c:1977 +#: rewrite/rewriteHandler.c:3782 +#, c-format +msgid "infinite recursion detected in rules for relation \"%s\"" +msgstr "виявлена безкінечна рекурсія у правилах для відносин \"%s\"" + +#: commands/matview.c:182 +#, c-format +msgid "CONCURRENTLY cannot be used when the materialized view is not populated" +msgstr "CONCURRENTLY не може використовуватись, коли матеріалізоване подання не наповнено" + +#: commands/matview.c:188 +#, c-format +msgid "CONCURRENTLY and WITH NO DATA options cannot be used together" +msgstr "Параметри CONCURRENTLY і WITH NO DATA не можуть використовуватись разом" + +#: commands/matview.c:244 +#, c-format +msgid "cannot refresh materialized view \"%s\" concurrently" +msgstr "оновити матеріалізоване подання \"%s\" паралельно не можна" + +#: commands/matview.c:247 +#, c-format +msgid "Create a unique index with no WHERE clause on one or more columns of the materialized view." +msgstr "Створіть унікальний індекс без речення WHERE для одного або більше стовпців матеріалізованого подання." + +#: commands/matview.c:641 +#, c-format +msgid "new data for materialized view \"%s\" contains duplicate rows without any null columns" +msgstr "нові дані для матеріалізованого подання \"%s\" містять рядки, які дублюються (без урахування стовпців з null)" + +#: commands/matview.c:643 +#, c-format +msgid "Row: %s" +msgstr "Рядок: %s" + +#: commands/opclasscmds.c:127 +#, c-format +msgid "operator family \"%s\" does not exist for access method \"%s\"" +msgstr "сімейство операторів \"%s\" не існує для методу доступу \"%s\"" + +#: commands/opclasscmds.c:269 +#, c-format +msgid "operator family \"%s\" for access method \"%s\" already exists" +msgstr "сімейство операторів \"%s\" для методу доступу \"%s\" вже існує" + +#: commands/opclasscmds.c:414 +#, c-format +msgid "must be superuser to create an operator class" +msgstr "тільки суперкористувач може створити клас операторів" + +#: commands/opclasscmds.c:487 commands/opclasscmds.c:869 +#: commands/opclasscmds.c:993 +#, c-format +msgid "invalid operator number %d, must be between 1 and %d" +msgstr "неприпустимий номер оператора %d, число має бути між 1 і %d" + +#: commands/opclasscmds.c:531 commands/opclasscmds.c:913 +#: commands/opclasscmds.c:1008 +#, c-format +msgid "invalid function number %d, must be between 1 and %d" +msgstr "неприпустимий номер функції %d, число має бути між 1 і %d" + +#: commands/opclasscmds.c:559 +#, c-format +msgid "storage type specified more than once" +msgstr "тип сховища вказано більше одного разу" + +#: commands/opclasscmds.c:586 +#, c-format +msgid "storage type cannot be different from data type for access method \"%s\"" +msgstr "тип сховища не може відрізнятися від типу даних для методу доступу \"%s\"" + +#: commands/opclasscmds.c:602 +#, c-format +msgid "operator class \"%s\" for access method \"%s\" already exists" +msgstr "клас операторів \"%s\" для методу доступу \"%s\" вже існує" + +#: commands/opclasscmds.c:630 +#, c-format +msgid "could not make operator class \"%s\" be default for type %s" +msgstr "клас операторів \"%s\" не вдалося зробити класом за замовчуванням для типу %s" + +#: commands/opclasscmds.c:633 +#, c-format +msgid "Operator class \"%s\" already is the default." +msgstr "Клас операторів \"%s\" вже є класом за замовчуванням." + +#: commands/opclasscmds.c:761 +#, c-format +msgid "must be superuser to create an operator family" +msgstr "тільки суперкористувач може створити сімейство операторів" + +#: commands/opclasscmds.c:821 +#, c-format +msgid "must be superuser to alter an operator family" +msgstr "тільки суперкористувач може змінити сімейство операторів" + +#: commands/opclasscmds.c:878 +#, c-format +msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" +msgstr "типи аргументу оператора повинні бути вказані в ALTER OPERATOR FAMILY" + +#: commands/opclasscmds.c:941 +#, c-format +msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" +msgstr "STORAGE не може бути вказано в ALTER OPERATOR FAMILY" + +#: commands/opclasscmds.c:1063 +#, c-format +msgid "one or two argument types must be specified" +msgstr "треба вказати один або два типи аргументу" + +#: commands/opclasscmds.c:1089 +#, c-format +msgid "index operators must be binary" +msgstr "індексні оператори повинні бути бінарними" + +#: commands/opclasscmds.c:1108 +#, c-format +msgid "access method \"%s\" does not support ordering operators" +msgstr "метод доступу \"%s\" не підтримує сортувальних операторів" + +#: commands/opclasscmds.c:1119 +#, c-format +msgid "index search operators must return boolean" +msgstr "оператори пошуку по індексу повинні повертати логічне значення" + +#: commands/opclasscmds.c:1159 +#, c-format +msgid "associated data types for operator class options parsing functions must match opclass input type" +msgstr "пов'язані типи даних для функцій обробки параметрів класів операторів повинні відповідати типу вхідних даних opclass" + +#: commands/opclasscmds.c:1166 +#, c-format +msgid "left and right associated data types for operator class options parsing functions must match" +msgstr "ліві та праві пов'язані типи даних для функцій розбору параметрів класів операторів повинні збігатись" + +#: commands/opclasscmds.c:1174 +#, c-format +msgid "invalid operator class options parsing function" +msgstr "неприпустима функція розбору параметрів класів операторів" + +#: commands/opclasscmds.c:1175 +#, c-format +msgid "Valid signature of operator class options parsing function is %s." +msgstr "Допустимий підпис для функції розбору параметрів класів операторів: %s." + +#: commands/opclasscmds.c:1194 +#, c-format +msgid "btree comparison functions must have two arguments" +msgstr "функції порівняння btree повинні мати два аргумента" + +#: commands/opclasscmds.c:1198 +#, c-format +msgid "btree comparison functions must return integer" +msgstr "функції порівняння btree повинні повертати ціле число" + +#: commands/opclasscmds.c:1215 +#, c-format +msgid "btree sort support functions must accept type \"internal\"" +msgstr "опорні функції сортування btree повинні приймати тип \"internal\"" + +#: commands/opclasscmds.c:1219 +#, c-format +msgid "btree sort support functions must return void" +msgstr "опорні функції сортування btree повинні повертати недійсне (void)" + +#: commands/opclasscmds.c:1230 +#, c-format +msgid "btree in_range functions must have five arguments" +msgstr "функції in_range для btree повинні приймати п'ять аргументів" + +#: commands/opclasscmds.c:1234 +#, c-format +msgid "btree in_range functions must return boolean" +msgstr "функції in_range для btree повинні повертати логічне значення" + +#: commands/opclasscmds.c:1250 +#, c-format +msgid "btree equal image functions must have one argument" +msgstr "функції equal image для btree повинні приймати один аргумент" + +#: commands/opclasscmds.c:1254 +#, c-format +msgid "btree equal image functions must return boolean" +msgstr "функції equal image для btree повинні повертати логічне значення" + +#: commands/opclasscmds.c:1267 +#, c-format +msgid "btree equal image functions must not be cross-type" +msgstr "функції equal image для btree не можуть бути хрестоподібного типу" + +#: commands/opclasscmds.c:1277 +#, c-format +msgid "hash function 1 must have one argument" +msgstr "геш-функція 1 повинна приймати один аргумент" + +#: commands/opclasscmds.c:1281 +#, c-format +msgid "hash function 1 must return integer" +msgstr "геш-функція 1 повинна повертати ціле число" + +#: commands/opclasscmds.c:1288 +#, c-format +msgid "hash function 2 must have two arguments" +msgstr "геш-функція 2 повинна приймати два аргументи" + +#: commands/opclasscmds.c:1292 +#, c-format +msgid "hash function 2 must return bigint" +msgstr "геш-функція 2 повинна повертати велике ціле (bigint)" + +#: commands/opclasscmds.c:1317 +#, c-format +msgid "associated data types must be specified for index support function" +msgstr "для опорної функції індексів повинні бути вказані пов'язані типи даних" + +#: commands/opclasscmds.c:1342 +#, c-format +msgid "function number %d for (%s,%s) appears more than once" +msgstr "номер функції %d для (%s,%s) з'являється більш ніж один раз" + +#: commands/opclasscmds.c:1349 +#, c-format +msgid "operator number %d for (%s,%s) appears more than once" +msgstr "номер оператора %d для (%s,%s) з'являється більш ніж один раз" + +#: commands/opclasscmds.c:1398 +#, c-format +msgid "operator %d(%s,%s) already exists in operator family \"%s\"" +msgstr "оператор %d(%s,%s) вже існує в сімействі операторів \"%s\"" + +#: commands/opclasscmds.c:1515 +#, c-format +msgid "function %d(%s,%s) already exists in operator family \"%s\"" +msgstr "функція %d(%s,%s) вже існує в сімействі операторів \"%s\"" + +#: commands/opclasscmds.c:1606 +#, c-format +msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" +msgstr "оператора %d(%s,%s) не існує в сімействі операторів \"%s\"" + +#: commands/opclasscmds.c:1646 +#, c-format +msgid "function %d(%s,%s) does not exist in operator family \"%s\"" +msgstr "функції %d(%s,%s) не існує в сімействі операторів \"%s\"" + +#: commands/opclasscmds.c:1776 +#, c-format +msgid "operator class \"%s\" for access method \"%s\" already exists in schema \"%s\"" +msgstr "клас операторів \"%s\" для методу доступу \"%s\" вже існує в схемі \"%s\"" + +#: commands/opclasscmds.c:1799 +#, c-format +msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" +msgstr "сімейство операторів \"%s\" для методу доступу \"%s\" вже існує в схемі \"%s\"" + +#: commands/operatorcmds.c:111 commands/operatorcmds.c:119 +#, c-format +msgid "SETOF type not allowed for operator argument" +msgstr "Аргументом оператора не може бути тип SETOF" + +#: commands/operatorcmds.c:152 commands/operatorcmds.c:467 +#, c-format +msgid "operator attribute \"%s\" not recognized" +msgstr "атрибут оператора \"%s\" не розпізнаний" + +#: commands/operatorcmds.c:163 +#, c-format +msgid "operator function must be specified" +msgstr "необхідно вказати функцію оператора" + +#: commands/operatorcmds.c:174 +#, c-format +msgid "at least one of leftarg or rightarg must be specified" +msgstr "як мінімум один лівий або правий аргумент повинні бути вказані" + +#: commands/operatorcmds.c:278 +#, c-format +msgid "restriction estimator function %s must return type %s" +msgstr "функція оцінювання обмеження %s повинна повертати тип %s" + +#: commands/operatorcmds.c:321 +#, c-format +msgid "join estimator function %s has multiple matches" +msgstr "функція оцінювання з'єднання %s має декілька збігів" + +#: commands/operatorcmds.c:336 +#, c-format +msgid "join estimator function %s must return type %s" +msgstr "функція оцінювання з'єднання %s повинна повертати тип %s" + +#: commands/operatorcmds.c:461 +#, c-format +msgid "operator attribute \"%s\" cannot be changed" +msgstr "атрибут оператора \"%s\" неможливо змінити" + +#: commands/policy.c:88 commands/policy.c:401 commands/policy.c:491 +#: commands/tablecmds.c:1512 commands/tablecmds.c:1994 +#: commands/tablecmds.c:3076 commands/tablecmds.c:5608 +#: commands/tablecmds.c:8395 commands/tablecmds.c:15632 +#: commands/tablecmds.c:15667 commands/trigger.c:301 commands/trigger.c:1206 +#: commands/trigger.c:1315 rewrite/rewriteDefine.c:277 +#: rewrite/rewriteDefine.c:933 rewrite/rewriteRemove.c:80 +#, c-format +msgid "permission denied: \"%s\" is a system catalog" +msgstr "доступ заборонений: \"%s\" - системний каталог" + +#: commands/policy.c:171 +#, c-format +msgid "ignoring specified roles other than PUBLIC" +msgstr "всі вказані ролі, крім PUBLIC, ігноруються" + +#: commands/policy.c:172 +#, c-format +msgid "All roles are members of the PUBLIC role." +msgstr "Роль PUBLIC включає в себе всі інші ролі." + +#: commands/policy.c:515 +#, c-format +msgid "role \"%s\" could not be removed from policy \"%s\" on \"%s\"" +msgstr "роль \"%s\" не можна видалити з політики \"%s\" відношення \"%s\"" + +#: commands/policy.c:724 +#, c-format +msgid "WITH CHECK cannot be applied to SELECT or DELETE" +msgstr "WITH CHECK не можна застосувати до SELECT або DELETE" + +#: commands/policy.c:733 commands/policy.c:1038 +#, c-format +msgid "only WITH CHECK expression allowed for INSERT" +msgstr "для INSERT допускається лише вираз WITH CHECK" + +#: commands/policy.c:808 commands/policy.c:1261 +#, c-format +msgid "policy \"%s\" for table \"%s\" already exists" +msgstr "політика \"%s\" для таблиці \"%s\" вже існує" + +#: commands/policy.c:1010 commands/policy.c:1289 commands/policy.c:1360 +#, c-format +msgid "policy \"%s\" for table \"%s\" does not exist" +msgstr "політика \"%s\" для таблиці \"%s\" не існує" + +#: commands/policy.c:1028 +#, c-format +msgid "only USING expression allowed for SELECT, DELETE" +msgstr "для SELECT, DELETE допускається лише вираз USING" + +#: commands/portalcmds.c:59 commands/portalcmds.c:182 commands/portalcmds.c:233 +#, c-format +msgid "invalid cursor name: must not be empty" +msgstr "неприпустиме ім'я курсора: не повинне бути пустим" + +#: commands/portalcmds.c:190 commands/portalcmds.c:243 +#: executor/execCurrent.c:70 utils/adt/xml.c:2594 utils/adt/xml.c:2764 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "курсор \"%s\" не існує" + +#: commands/prepare.c:76 +#, c-format +msgid "invalid statement name: must not be empty" +msgstr "неприпустиме ім'я оператора: не повинне бути пустим" + +#: commands/prepare.c:134 parser/parse_param.c:304 tcop/postgres.c:1498 +#, c-format +msgid "could not determine data type of parameter $%d" +msgstr "не вдалося визначити тип даних параметра $%d" + +#: commands/prepare.c:152 +#, c-format +msgid "utility statements cannot be prepared" +msgstr "службових операторів не можна підготувати" + +#: commands/prepare.c:256 commands/prepare.c:261 +#, c-format +msgid "prepared statement is not a SELECT" +msgstr "підготовлений оператор не SELECT" + +#: commands/prepare.c:328 +#, c-format +msgid "wrong number of parameters for prepared statement \"%s\"" +msgstr "невірне число параметрів для підготовленого оператора \"%s\"" + +#: commands/prepare.c:330 +#, c-format +msgid "Expected %d parameters but got %d." +msgstr "Очікувалось %d параметрів, але отримано %d." + +#: commands/prepare.c:363 +#, c-format +msgid "parameter $%d of type %s cannot be coerced to the expected type %s" +msgstr "параметр $%d типу %s не можна привести до очікуваного типу %s" + +#: commands/prepare.c:449 +#, c-format +msgid "prepared statement \"%s\" already exists" +msgstr "підготовлений оператор \"%s\" вже існує" + +#: commands/prepare.c:488 +#, c-format +msgid "prepared statement \"%s\" does not exist" +msgstr "підготовлений оператор \"%s\" не існує" + +#: commands/proclang.c:67 +#, c-format +msgid "must be superuser to create custom procedural language" +msgstr "для створення користувацької мови потрібно бути суперкористувачем" + +#: commands/publicationcmds.c:107 +#, c-format +msgid "invalid list syntax for \"publish\" option" +msgstr "неприпустимий список синтаксису параметру \"publish\"" + +#: commands/publicationcmds.c:125 +#, c-format +msgid "unrecognized \"publish\" value: \"%s\"" +msgstr "нерозпізнане значення \"publish\": \"%s\"" + +#: commands/publicationcmds.c:140 +#, c-format +msgid "unrecognized publication parameter: \"%s\"" +msgstr "нерозпізнаний параметр публікації: \"%s\"" + +#: commands/publicationcmds.c:172 +#, c-format +msgid "must be superuser to create FOR ALL TABLES publication" +msgstr "для створення публікації УСІХ ТАБЛИЦЬ потрібно бути суперкористувачем" + +#: commands/publicationcmds.c:248 +#, c-format +msgid "wal_level is insufficient to publish logical changes" +msgstr "недостатній wal_level для публікації логічних змін" + +#: commands/publicationcmds.c:249 +#, c-format +msgid "Set wal_level to logical before creating subscriptions." +msgstr "Встановіть wal_level на \"logical\" перед створенням підписок." + +#: commands/publicationcmds.c:369 +#, c-format +msgid "publication \"%s\" is defined as FOR ALL TABLES" +msgstr "публікація \"%s\" визначена ДЛЯ ВСІХ ТАБЛИЦЬ" + +#: commands/publicationcmds.c:371 +#, c-format +msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." +msgstr "У публікації ВСІХ ТАБЛИЦЬ не можна додати або видалити таблиці." + +#: commands/publicationcmds.c:683 +#, c-format +msgid "relation \"%s\" is not part of the publication" +msgstr "відносини \"%s\" не є частиною публікації" + +#: commands/publicationcmds.c:726 +#, c-format +msgid "permission denied to change owner of publication \"%s\"" +msgstr "немає прав на зміну власника публікації \"%s\"" + +#: commands/publicationcmds.c:728 +#, c-format +msgid "The owner of a FOR ALL TABLES publication must be a superuser." +msgstr "Власником публікації УСІХ ТАБЛИЦЬ повинен бути суперкористувач." + +#: commands/schemacmds.c:105 commands/schemacmds.c:281 +#, c-format +msgid "unacceptable schema name \"%s\"" +msgstr "непримустиме ім'я схеми \"%s\"" + +#: commands/schemacmds.c:106 commands/schemacmds.c:282 +#, c-format +msgid "The prefix \"pg_\" is reserved for system schemas." +msgstr "Префікс \"pg_\" зарезервований для системних схем." + +#: commands/schemacmds.c:120 +#, c-format +msgid "schema \"%s\" already exists, skipping" +msgstr "схема \"%s\" вже існує, пропускається" + +#: commands/seclabel.c:60 +#, c-format +msgid "no security label providers have been loaded" +msgstr "постачальники міток безпеки не завантажені" + +#: commands/seclabel.c:64 +#, c-format +msgid "must specify provider when multiple security label providers have been loaded" +msgstr "коли завантажено кілька постачальників міток безпеки, потрібний слід вказати явно" + +#: commands/seclabel.c:82 +#, c-format +msgid "security label provider \"%s\" is not loaded" +msgstr "постачальник міток безпеки \"%s\" не завантажений" + +#: commands/sequence.c:140 +#, c-format +msgid "unlogged sequences are not supported" +msgstr "(unlogged) послідовності не підтримуються" + +#: commands/sequence.c:709 +#, c-format +msgid "nextval: reached maximum value of sequence \"%s\" (%s)" +msgstr "функція nextval досягла максимуму для послідовності \"%s\" (%s)" + +#: commands/sequence.c:732 +#, c-format +msgid "nextval: reached minimum value of sequence \"%s\" (%s)" +msgstr "функція nextval досягла мінімуму для послідовності \"%s\" (%s)" + +#: commands/sequence.c:850 +#, c-format +msgid "currval of sequence \"%s\" is not yet defined in this session" +msgstr "поточне значення (currval) для послідовності \"%s\" ще не визначено у цьому сеансі" + +#: commands/sequence.c:869 commands/sequence.c:875 +#, c-format +msgid "lastval is not yet defined in this session" +msgstr "останнє значення ще не визначено в цьому сеансі" + +#: commands/sequence.c:963 +#, c-format +msgid "setval: value %s is out of bounds for sequence \"%s\" (%s..%s)" +msgstr "setval: значення %s поза межами послідовності \"%s\" (%s..%s)" + +#: commands/sequence.c:1360 +#, c-format +msgid "invalid sequence option SEQUENCE NAME" +msgstr "неприпустимий параметр послідовності SEQUENCE NAME" + +#: commands/sequence.c:1386 +#, c-format +msgid "identity column type must be smallint, integer, or bigint" +msgstr "типом стовпця ідентифікації може бути тільки smallint, integer або bigint" + +#: commands/sequence.c:1387 +#, c-format +msgid "sequence type must be smallint, integer, or bigint" +msgstr "типом послідовності може бути тільки smallint, integer або bigint" + +#: commands/sequence.c:1421 +#, c-format +msgid "INCREMENT must not be zero" +msgstr "INCREMENT не повинен бути нулем" + +#: commands/sequence.c:1474 +#, c-format +msgid "MAXVALUE (%s) is out of range for sequence data type %s" +msgstr "MAXVALUE (%s) виходить за межі типу даних послідовності %s" + +#: commands/sequence.c:1511 +#, c-format +msgid "MINVALUE (%s) is out of range for sequence data type %s" +msgstr "MINVALUE (%s) виходить за межі типу даних послідовності %s" + +#: commands/sequence.c:1525 +#, c-format +msgid "MINVALUE (%s) must be less than MAXVALUE (%s)" +msgstr "MINVALUE (%s) повинно бути менше за MAXVALUE (%s)" + +#: commands/sequence.c:1552 +#, c-format +msgid "START value (%s) cannot be less than MINVALUE (%s)" +msgstr "Значення START (%s) не може бути менше за MINVALUE (%s)" + +#: commands/sequence.c:1564 +#, c-format +msgid "START value (%s) cannot be greater than MAXVALUE (%s)" +msgstr "Значення START (%s) не може бути більше за MAXVALUE (%s)" + +#: commands/sequence.c:1594 +#, c-format +msgid "RESTART value (%s) cannot be less than MINVALUE (%s)" +msgstr "Значення RESTART (%s) не може бути менше за MINVALUE (%s)" + +#: commands/sequence.c:1606 +#, c-format +msgid "RESTART value (%s) cannot be greater than MAXVALUE (%s)" +msgstr "Значення RESTART (%s) не може бути більше за MAXVALUE (%s)" + +#: commands/sequence.c:1621 +#, c-format +msgid "CACHE (%s) must be greater than zero" +msgstr "Значення CACHE (%s) повинно бути більше нуля" + +#: commands/sequence.c:1658 +#, c-format +msgid "invalid OWNED BY option" +msgstr "неприпустимий параметр OWNED BY" + +#: commands/sequence.c:1659 +#, c-format +msgid "Specify OWNED BY table.column or OWNED BY NONE." +msgstr "Вкажіть OWNED BY таблиця.стовпець або OWNED BY NONE." + +#: commands/sequence.c:1684 +#, c-format +msgid "referenced relation \"%s\" is not a table or foreign table" +msgstr "вказаний об'єкт \"%s\" не є таблицею або сторонньою таблицею" + +#: commands/sequence.c:1691 +#, c-format +msgid "sequence must have same owner as table it is linked to" +msgstr "послідовність повинна мати того ж власника, що і таблиця, з якою вона зв'язана" + +#: commands/sequence.c:1695 +#, c-format +msgid "sequence must be in same schema as table it is linked to" +msgstr "послідовність повинна бути в тій самій схемі, що і таблиця, з якою вона зв'язана" + +#: commands/sequence.c:1717 +#, c-format +msgid "cannot change ownership of identity sequence" +msgstr "змінити власника послідовності ідентифікації не можна" + +#: commands/sequence.c:1718 commands/tablecmds.c:12544 +#: commands/tablecmds.c:15058 +#, c-format +msgid "Sequence \"%s\" is linked to table \"%s\"." +msgstr "Послідовність \"%s\" зв'язана з таблицею \"%s\"." + +#: commands/statscmds.c:104 commands/statscmds.c:113 +#, c-format +msgid "only a single relation is allowed in CREATE STATISTICS" +msgstr "в CREATE STATISTICS можна вказати лише одне відношення" + +#: commands/statscmds.c:131 +#, c-format +msgid "relation \"%s\" is not a table, foreign table, or materialized view" +msgstr "відношення \"%s\" - не таблиця, не зовнішня таблиця і не матеріалізоване подання" + +#: commands/statscmds.c:174 +#, c-format +msgid "statistics object \"%s\" already exists, skipping" +msgstr "об'єкт статистики \"%s\" вже існує, пропускається" + +#: commands/statscmds.c:182 +#, c-format +msgid "statistics object \"%s\" already exists" +msgstr "об'єкт статистики \"%s\" вже існує" + +#: commands/statscmds.c:204 commands/statscmds.c:210 +#, c-format +msgid "only simple column references are allowed in CREATE STATISTICS" +msgstr "в CREATE STATISTICS допускаються лише прості посилання на стовпці" + +#: commands/statscmds.c:225 +#, c-format +msgid "statistics creation on system columns is not supported" +msgstr "створення статистики для системних стовпців не підтримується" + +#: commands/statscmds.c:232 +#, c-format +msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" +msgstr "стовпець \"%s\" не можна використати в статистиці, тому що для його типу %s не визначений клас оператора (btree) за замовчуванням" + +#: commands/statscmds.c:239 +#, c-format +msgid "cannot have more than %d columns in statistics" +msgstr "в статистиці не може бути більше ніж %d стовпців" + +#: commands/statscmds.c:254 +#, c-format +msgid "extended statistics require at least 2 columns" +msgstr "для розширеної статистики потрібно мінімум 2 стовпці" + +#: commands/statscmds.c:272 +#, c-format +msgid "duplicate column name in statistics definition" +msgstr "дублювання імені стовпця у визначенні статистики" + +#: commands/statscmds.c:306 +#, c-format +msgid "unrecognized statistics kind \"%s\"" +msgstr "нерозпізнаний вид статистики \"%s\"" + +#: commands/statscmds.c:444 commands/tablecmds.c:7416 +#, c-format +msgid "statistics target %d is too low" +msgstr "мета статистики занадто мала %d" + +#: commands/statscmds.c:452 commands/tablecmds.c:7424 +#, c-format +msgid "lowering statistics target to %d" +msgstr "мета статистики знижується до %d" + +#: commands/statscmds.c:475 +#, c-format +msgid "statistics object \"%s.%s\" does not exist, skipping" +msgstr "об'єкт статистики \"%s.%s\" не існує, пропускається" + +#: commands/subscriptioncmds.c:181 +#, c-format +msgid "unrecognized subscription parameter: \"%s\"" +msgstr "нерозпізнаний параметр підписки: \"%s\"" + +#. translator: both %s are strings of the form "option = value" +#: commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:201 +#: commands/subscriptioncmds.c:207 commands/subscriptioncmds.c:226 +#: commands/subscriptioncmds.c:232 +#, c-format +msgid "%s and %s are mutually exclusive options" +msgstr "%s та %s є взаємовиключними опціями" + +#. translator: both %s are strings of the form "option = value" +#: commands/subscriptioncmds.c:239 commands/subscriptioncmds.c:245 +#, c-format +msgid "subscription with %s must also set %s" +msgstr "підписка з %s повинна також встановити %s" + +#: commands/subscriptioncmds.c:287 +#, c-format +msgid "publication name \"%s\" used more than once" +msgstr "ім'я публікації \"%s\" використовується більше ніж один раз" + +#: commands/subscriptioncmds.c:351 +#, c-format +msgid "must be superuser to create subscriptions" +msgstr "для створення підписок потрібно бути суперкористувачем" + +#: commands/subscriptioncmds.c:442 commands/subscriptioncmds.c:530 +#: replication/logical/tablesync.c:857 replication/logical/worker.c:2096 +#, c-format +msgid "could not connect to the publisher: %s" +msgstr "не вдалося підключитись до сервера публікації: %s" + +#: commands/subscriptioncmds.c:484 +#, c-format +msgid "created replication slot \"%s\" on publisher" +msgstr "на сервері публікації створений слот реплікації \"%s\"" + +#. translator: %s is an SQL ALTER statement +#: commands/subscriptioncmds.c:497 +#, c-format +msgid "tables were not subscribed, you will have to run %s to subscribe the tables" +msgstr "таблиці не були підписані, вам необхідно виконати %s, щоб підписати таблиці" + +#: commands/subscriptioncmds.c:586 +#, c-format +msgid "table \"%s.%s\" added to subscription \"%s\"" +msgstr "таблиця \"%s.%s\" додана в підписку \"%s\"" + +#: commands/subscriptioncmds.c:610 +#, c-format +msgid "table \"%s.%s\" removed from subscription \"%s\"" +msgstr "таблиця \"%s.%s\" видалена з підписки \"%s\"" + +#: commands/subscriptioncmds.c:682 +#, c-format +msgid "cannot set %s for enabled subscription" +msgstr "неможливо встановити %s для увімкненої підписки" + +#: commands/subscriptioncmds.c:717 +#, c-format +msgid "cannot enable subscription that does not have a slot name" +msgstr "увімкнути підписку, для якої не задано ім'я слота, не можна" + +#: commands/subscriptioncmds.c:763 +#, c-format +msgid "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" +msgstr "ALTER SUBSCRIPTION з оновленням для відключених підписок не допускається" + +#: commands/subscriptioncmds.c:764 +#, c-format +msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." +msgstr "Використайте ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." + +#: commands/subscriptioncmds.c:782 +#, c-format +msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" +msgstr "ALTER SUBSCRIPTION ... REFRESH для відключених підписок не допускається" + +#: commands/subscriptioncmds.c:862 +#, c-format +msgid "subscription \"%s\" does not exist, skipping" +msgstr "підписка \"%s\" не існує, пропускається" + +#: commands/subscriptioncmds.c:987 +#, c-format +msgid "could not connect to publisher when attempting to drop the replication slot \"%s\"" +msgstr "не вдалося з'єднатися з сервером публікації для видалення слота реплікації \"%s\"" + +#: commands/subscriptioncmds.c:989 commands/subscriptioncmds.c:1004 +#: replication/logical/tablesync.c:906 replication/logical/tablesync.c:928 +#, c-format +msgid "The error was: %s" +msgstr "Сталася помилка: %s" + +#. translator: %s is an SQL ALTER command +#: commands/subscriptioncmds.c:991 +#, c-format +msgid "Use %s to disassociate the subscription from the slot." +msgstr "Використовуйте %s , щоб відв'язати підписку від слоту." + +#: commands/subscriptioncmds.c:1002 +#, c-format +msgid "could not drop the replication slot \"%s\" on publisher" +msgstr "не вдалося видалити слот реплікації \"%s\" на сервері публікації" + +#: commands/subscriptioncmds.c:1007 +#, c-format +msgid "dropped replication slot \"%s\" on publisher" +msgstr "видалено слот реплікації \"%s\" на сервері публікації" + +#: commands/subscriptioncmds.c:1044 +#, c-format +msgid "permission denied to change owner of subscription \"%s\"" +msgstr "немає прав на зміну власника підписки \"%s\"" + +#: commands/subscriptioncmds.c:1046 +#, c-format +msgid "The owner of a subscription must be a superuser." +msgstr "Власником підписки повинен бути суперкористувач." + +#: commands/subscriptioncmds.c:1161 +#, c-format +msgid "could not receive list of replicated tables from the publisher: %s" +msgstr "не вдалося отримати список реплікованих таблиць із сервера публікації: %s" + +#: commands/tablecmds.c:228 commands/tablecmds.c:270 +#, c-format +msgid "table \"%s\" does not exist" +msgstr "таблиця \"%s\" не існує" + +#: commands/tablecmds.c:229 commands/tablecmds.c:271 +#, c-format +msgid "table \"%s\" does not exist, skipping" +msgstr "таблиця \"%s\" не існує, пропускається" + +#: commands/tablecmds.c:231 commands/tablecmds.c:273 +msgid "Use DROP TABLE to remove a table." +msgstr "Використайте DROP TABLE для видалення таблиці." + +#: commands/tablecmds.c:234 +#, c-format +msgid "sequence \"%s\" does not exist" +msgstr "послідовність \"%s\" не існує" + +#: commands/tablecmds.c:235 +#, c-format +msgid "sequence \"%s\" does not exist, skipping" +msgstr "послідовність \"%s\" не існує, пропускається" + +#: commands/tablecmds.c:237 +msgid "Use DROP SEQUENCE to remove a sequence." +msgstr "Використайте DROP SEQUENCE, щоб видалити послідовність." + +#: commands/tablecmds.c:240 +#, c-format +msgid "view \"%s\" does not exist" +msgstr "подання \"%s\" не існує" + +#: commands/tablecmds.c:241 +#, c-format +msgid "view \"%s\" does not exist, skipping" +msgstr "подання \"%s\" не існує, пропускається" + +#: commands/tablecmds.c:243 +msgid "Use DROP VIEW to remove a view." +msgstr "Використайте DROP VIEW для видалення подання." + +#: commands/tablecmds.c:246 +#, c-format +msgid "materialized view \"%s\" does not exist" +msgstr "матеріалізоване подання \"%s\" не існує" + +#: commands/tablecmds.c:247 +#, c-format +msgid "materialized view \"%s\" does not exist, skipping" +msgstr "матеріалізоване подання \"%s\" не існує, пропускається" + +#: commands/tablecmds.c:249 +msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." +msgstr "Використайте DROP MATERIALIZED VIEW, щоб видалити матеріалізоване подання." + +#: commands/tablecmds.c:252 commands/tablecmds.c:276 commands/tablecmds.c:17231 +#: parser/parse_utilcmd.c:2172 +#, c-format +msgid "index \"%s\" does not exist" +msgstr "індекс \"%s\" не існує" + +#: commands/tablecmds.c:253 commands/tablecmds.c:277 +#, c-format +msgid "index \"%s\" does not exist, skipping" +msgstr "індекс \"%s\" не існує, пропускається" + +#: commands/tablecmds.c:255 commands/tablecmds.c:279 +msgid "Use DROP INDEX to remove an index." +msgstr "Використайте DROP INDEX, щоб видалити індекс." + +#: commands/tablecmds.c:260 +#, c-format +msgid "\"%s\" is not a type" +msgstr "\"%s\" не є типом" + +#: commands/tablecmds.c:261 +msgid "Use DROP TYPE to remove a type." +msgstr "Використайте DROP TYPE, щоб видалити тип." + +#: commands/tablecmds.c:264 commands/tablecmds.c:12383 +#: commands/tablecmds.c:14838 +#, c-format +msgid "foreign table \"%s\" does not exist" +msgstr "зовнішня таблиця \"%s\" не існує" + +#: commands/tablecmds.c:265 +#, c-format +msgid "foreign table \"%s\" does not exist, skipping" +msgstr "зовнішня таблиця \"%s\" не існує, пропускається" + +#: commands/tablecmds.c:267 +msgid "Use DROP FOREIGN TABLE to remove a foreign table." +msgstr "Використайте DROP FOREIGN TABLE щоб видалити сторонню таблицю." + +#: commands/tablecmds.c:620 +#, c-format +msgid "ON COMMIT can only be used on temporary tables" +msgstr "ON COMMIT можна використовувати лише для тимчасових таблиць" + +#: commands/tablecmds.c:651 +#, c-format +msgid "cannot create temporary table within security-restricted operation" +msgstr "неможливо створити тимчасову таблицю в межах операції з обмеженням безпеки" + +#: commands/tablecmds.c:687 commands/tablecmds.c:13742 +#, c-format +msgid "relation \"%s\" would be inherited from more than once" +msgstr "відношення \"%s\" буде успадковуватись більш ніж один раз" + +#: commands/tablecmds.c:868 +#, c-format +msgid "specifying a table access method is not supported on a partitioned table" +msgstr "вказання методу доступу до таблиці не підтримується з секційною таблицею" + +#: commands/tablecmds.c:964 +#, c-format +msgid "\"%s\" is not partitioned" +msgstr "\"%s\" не секціоновано" + +#: commands/tablecmds.c:1058 +#, c-format +msgid "cannot partition using more than %d columns" +msgstr "число стовпців в ключі секціонування не може перевищувати %d" + +#: commands/tablecmds.c:1114 +#, c-format +msgid "cannot create foreign partition of partitioned table \"%s\"" +msgstr "не можна створити зовнішню секцію в секціонованій таблиці \"%s\"" + +#: commands/tablecmds.c:1116 +#, c-format +msgid "Table \"%s\" contains indexes that are unique." +msgstr "Таблиця \"%s\" містить індекси, які унікальні." + +#: commands/tablecmds.c:1279 +#, c-format +msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" +msgstr "DROP INDEX CONCURRENTLY не підтримує видалення кількох об'єктів" + +#: commands/tablecmds.c:1283 +#, c-format +msgid "DROP INDEX CONCURRENTLY does not support CASCADE" +msgstr "DROP INDEX CONCURRENTLY не підтримує режим CASCADE" + +#: commands/tablecmds.c:1384 +#, c-format +msgid "cannot drop partitioned index \"%s\" concurrently" +msgstr "неможливо видалити секціонований індекс \"%s\" паралельно" + +#: commands/tablecmds.c:1654 +#, c-format +msgid "cannot truncate only a partitioned table" +msgstr "скоротити тільки секціоновану таблицю не можна" + +#: commands/tablecmds.c:1655 +#, c-format +msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." +msgstr "Не вказуйте ключове слово ONLY або використайте TRUNCATE ONLY безпосередньо для секцій." + +#: commands/tablecmds.c:1724 +#, c-format +msgid "truncate cascades to table \"%s\"" +msgstr "скорочення поширюється на таблицю \"%s\"" + +#: commands/tablecmds.c:2031 +#, c-format +msgid "cannot truncate temporary tables of other sessions" +msgstr "тимчасові таблиці інших сеансів не можна скоротити" + +#: commands/tablecmds.c:2259 commands/tablecmds.c:13639 +#, c-format +msgid "cannot inherit from partitioned table \"%s\"" +msgstr "успадкування від секціонованої таблиці \"%s\" не допускається" + +#: commands/tablecmds.c:2264 +#, c-format +msgid "cannot inherit from partition \"%s\"" +msgstr "успадкування від розділу \"%s\" не допускається" + +#: commands/tablecmds.c:2272 parser/parse_utilcmd.c:2402 +#: parser/parse_utilcmd.c:2544 +#, c-format +msgid "inherited relation \"%s\" is not a table or foreign table" +msgstr "успадковане відношення \"%s\" не є таблицею або сторонньою таблицею" + +#: commands/tablecmds.c:2284 +#, c-format +msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" +msgstr "створити тимчасове відношення як секцію постійного відношення\"%s\" не можна" + +#: commands/tablecmds.c:2293 commands/tablecmds.c:13618 +#, c-format +msgid "cannot inherit from temporary relation \"%s\"" +msgstr "тимчасове відношення \"%s\" не може успадковуватись" + +#: commands/tablecmds.c:2303 commands/tablecmds.c:13626 +#, c-format +msgid "cannot inherit from temporary relation of another session" +msgstr "успадкування від тимчасового відношення іншого сеансу неможливе" + +#: commands/tablecmds.c:2357 +#, c-format +msgid "merging multiple inherited definitions of column \"%s\"" +msgstr "злиття декількох успадкованих визначень стовпця \"%s\"" + +#: commands/tablecmds.c:2365 +#, c-format +msgid "inherited column \"%s\" has a type conflict" +msgstr "конфлікт типів в успадкованому стовпці \"%s\"" + +#: commands/tablecmds.c:2367 commands/tablecmds.c:2390 +#: commands/tablecmds.c:2639 commands/tablecmds.c:2669 +#: parser/parse_coerce.c:1935 parser/parse_coerce.c:1955 +#: parser/parse_coerce.c:1975 parser/parse_coerce.c:2030 +#: parser/parse_coerce.c:2107 parser/parse_coerce.c:2141 +#: parser/parse_param.c:218 +#, c-format +msgid "%s versus %s" +msgstr "%s проти %s" + +#: commands/tablecmds.c:2376 +#, c-format +msgid "inherited column \"%s\" has a collation conflict" +msgstr "конфлікт правил сортування в успадкованому стовпці \"%s\"" + +#: commands/tablecmds.c:2378 commands/tablecmds.c:2651 +#: commands/tablecmds.c:6106 +#, c-format +msgid "\"%s\" versus \"%s\"" +msgstr "\"%s\" проти \"%s\"" + +#: commands/tablecmds.c:2388 +#, c-format +msgid "inherited column \"%s\" has a storage parameter conflict" +msgstr "конфлікт параметрів зберігання в успадкованому стовпці \"%s\"" + +#: commands/tablecmds.c:2404 +#, c-format +msgid "inherited column \"%s\" has a generation conflict" +msgstr "конфлікт генерування в успадкованому стовпці \"%s\"" + +#: commands/tablecmds.c:2490 commands/tablecmds.c:2545 +#: commands/tablecmds.c:11188 parser/parse_utilcmd.c:1252 +#: parser/parse_utilcmd.c:1295 parser/parse_utilcmd.c:1703 +#: parser/parse_utilcmd.c:1812 +#, c-format +msgid "cannot convert whole-row table reference" +msgstr "перетворити посилання на тип усього рядка таблиці не можна" + +#: commands/tablecmds.c:2491 parser/parse_utilcmd.c:1253 +#, c-format +msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." +msgstr "Вираз генерації для стовпця \"%s\" містить посилання на весь рядок на таблицю \"%s\"." + +#: commands/tablecmds.c:2546 parser/parse_utilcmd.c:1296 +#, c-format +msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." +msgstr "Обмеження \"%s\" посилається на тип усього рядка в таблиці \"%s\"." + +#: commands/tablecmds.c:2625 +#, c-format +msgid "merging column \"%s\" with inherited definition" +msgstr "злиття стовпця \"%s\" з успадкованим визначенням" + +#: commands/tablecmds.c:2629 +#, c-format +msgid "moving and merging column \"%s\" with inherited definition" +msgstr "переміщення і злиття стовпця \"%s\" з успадкованим визначенням" + +#: commands/tablecmds.c:2630 +#, c-format +msgid "User-specified column moved to the position of the inherited column." +msgstr "Визначений користувачем стовпець переміщений в позицію успадкованого стовпця." + +#: commands/tablecmds.c:2637 +#, c-format +msgid "column \"%s\" has a type conflict" +msgstr "конфлікт типів в стовпці \"%s\"" + +#: commands/tablecmds.c:2649 +#, c-format +msgid "column \"%s\" has a collation conflict" +msgstr "конфлікт правил сортування в стовпці \"%s\"" + +#: commands/tablecmds.c:2667 +#, c-format +msgid "column \"%s\" has a storage parameter conflict" +msgstr "конфлікт параметрів зберігання в стовпці \"%s\"" + +#: commands/tablecmds.c:2695 +#, c-format +msgid "child column \"%s\" specifies generation expression" +msgstr "дочірній стовпець \"%s\" визначає вираз генерації" + +#: commands/tablecmds.c:2697 +#, c-format +msgid "Omit the generation expression in the definition of the child table column to inherit the generation expression from the parent table." +msgstr "Пропустіть вираз генерації у визначенні стовпця дочірьної таблиці щоб успадкувати вираз генерації з батьківської таблиці." + +#: commands/tablecmds.c:2701 +#, c-format +msgid "column \"%s\" inherits from generated column but specifies default" +msgstr "стовпець \"%s\" успадковується із згенерованого стовпця, але вказує за замовчуванням" + +#: commands/tablecmds.c:2706 +#, c-format +msgid "column \"%s\" inherits from generated column but specifies identity" +msgstr "стовпець \"%s\" успадковується із згенерованого стовпця, але вказує ідентичність" + +#: commands/tablecmds.c:2815 +#, c-format +msgid "column \"%s\" inherits conflicting generation expressions" +msgstr "стовпець \"%s\" успадковує конфліктуючи вирази генерації" + +#: commands/tablecmds.c:2820 +#, c-format +msgid "column \"%s\" inherits conflicting default values" +msgstr "стовпець \"%s\" успадковує конфліктні значення за замовчуванням" + +#: commands/tablecmds.c:2822 +#, c-format +msgid "To resolve the conflict, specify a default explicitly." +msgstr "Для усунення конфлікту вкажіть бажане значення за замовчуванням." + +#: commands/tablecmds.c:2868 +#, c-format +msgid "check constraint name \"%s\" appears multiple times but with different expressions" +msgstr "ім'я перевірочного обмеження \"%s\" з'являється декілька разів, але з різними виразами" + +#: commands/tablecmds.c:3045 +#, c-format +msgid "cannot rename column of typed table" +msgstr "перейменувати стовпець типізованої таблиці не можна" + +#: commands/tablecmds.c:3064 +#, c-format +msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" +msgstr "\"%s\" - не таблиця, подання, матеріалізоване подання, складений тип, індекс або зовнішня таблиця" + +#: commands/tablecmds.c:3158 +#, c-format +msgid "inherited column \"%s\" must be renamed in child tables too" +msgstr "успадкований стовпець \"%s\" повинен бути перейменований в дочірніх таблицях також" + +#: commands/tablecmds.c:3190 +#, c-format +msgid "cannot rename system column \"%s\"" +msgstr "не можна перейменувати системний стовпець \"%s\"" + +#: commands/tablecmds.c:3205 +#, c-format +msgid "cannot rename inherited column \"%s\"" +msgstr "не можна перейменувати успадкований стовпець \"%s\"" + +#: commands/tablecmds.c:3357 +#, c-format +msgid "inherited constraint \"%s\" must be renamed in child tables too" +msgstr "успадковане обмеження \"%s\" повинно бути перейменовано в дочірніх таблицях також" + +#: commands/tablecmds.c:3364 +#, c-format +msgid "cannot rename inherited constraint \"%s\"" +msgstr "не можна перейменувати успадковане обмеження \"%s\"" + +#. translator: first %s is a SQL command, eg ALTER TABLE +#: commands/tablecmds.c:3597 +#, c-format +msgid "cannot %s \"%s\" because it is being used by active queries in this session" +msgstr "не можна виконати %s \"%s\", тому що цей об'єкт використовується активними запитами в цьому сеансі" + +#. translator: first %s is a SQL command, eg ALTER TABLE +#: commands/tablecmds.c:3606 +#, c-format +msgid "cannot %s \"%s\" because it has pending trigger events" +msgstr "не можна виконати %s \"%s\", тому що з цим об'єктом зв'язані очікуванні події тригерів" + +#: commands/tablecmds.c:4237 commands/tablecmds.c:4252 +#, c-format +msgid "cannot change persistence setting twice" +msgstr "неможливо двічі змінити параметр стійкості" + +#: commands/tablecmds.c:4969 +#, c-format +msgid "cannot rewrite system relation \"%s\"" +msgstr "перезаписати системне відношення \"%s\" не можна" + +#: commands/tablecmds.c:4975 +#, c-format +msgid "cannot rewrite table \"%s\" used as a catalog table" +msgstr "перезаписати таблицю \"%s\", що використовується як таблиця каталогу, не можна" + +#: commands/tablecmds.c:4985 +#, c-format +msgid "cannot rewrite temporary tables of other sessions" +msgstr "неможливо перезаписати тимчасові таблиці інших сеансів" + +#: commands/tablecmds.c:5274 +#, c-format +msgid "rewriting table \"%s\"" +msgstr "перезапис таблиці \"%s\"" + +#: commands/tablecmds.c:5278 +#, c-format +msgid "verifying table \"%s\"" +msgstr "перевірка таблиці \"%s\"" + +#: commands/tablecmds.c:5443 +#, c-format +msgid "column \"%s\" of relation \"%s\" contains null values" +msgstr "стовпець \"%s\" відношення \"%s\" містить null значення" + +#: commands/tablecmds.c:5460 +#, c-format +msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" +msgstr "перевірка обмеження \"%s\" відношення \"%s\" порушується деяким рядком" + +#: commands/tablecmds.c:5479 partitioning/partbounds.c:3235 +#, c-format +msgid "updated partition constraint for default partition \"%s\" would be violated by some row" +msgstr "оновлене обмеження секції для секції за замовчуванням \"%s\" буде порушено деякими рядками" + +#: commands/tablecmds.c:5485 +#, c-format +msgid "partition constraint of relation \"%s\" is violated by some row" +msgstr "обмеження секції відношення \"%s\" порушується деяким рядком" + +#: commands/tablecmds.c:5632 commands/trigger.c:1200 commands/trigger.c:1306 +#, c-format +msgid "\"%s\" is not a table, view, or foreign table" +msgstr "\"%s\" - не таблиця, подання або зовнішня таблиця" + +#: commands/tablecmds.c:5635 +#, c-format +msgid "\"%s\" is not a table, view, materialized view, or index" +msgstr "\"%s\" - не таблиця, подання, матеріалізоване подання або індекс" + +#: commands/tablecmds.c:5641 +#, c-format +msgid "\"%s\" is not a table, materialized view, or index" +msgstr "\"%s\" - не таблиця, матеріалізоване подання або індекс" + +#: commands/tablecmds.c:5644 +#, c-format +msgid "\"%s\" is not a table, materialized view, or foreign table" +msgstr "\"%s\" - не таблиця, матеріалізоване подання або зовнішня таблиця" + +#: commands/tablecmds.c:5647 +#, c-format +msgid "\"%s\" is not a table or foreign table" +msgstr "\"%s\" - не таблиця або зовнішня таблиця" + +#: commands/tablecmds.c:5650 +#, c-format +msgid "\"%s\" is not a table, composite type, or foreign table" +msgstr "\"%s\" - не таблиця, складений тип або зовнішня таблиця" + +#: commands/tablecmds.c:5653 +#, c-format +msgid "\"%s\" is not a table, materialized view, index, or foreign table" +msgstr "\"%s\" - не таблиця, матеріалізоване подання, індекс або зовнішня таблиця" + +#: commands/tablecmds.c:5663 +#, c-format +msgid "\"%s\" is of the wrong type" +msgstr "\"%s\" - неправильний тип" + +#: commands/tablecmds.c:5866 commands/tablecmds.c:5873 +#, c-format +msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" +msgstr "неможливо змінити тип \"%s\", тому що стовпець \"%s.%s\" використовує його" + +#: commands/tablecmds.c:5880 +#, c-format +msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" +msgstr "неможливо змінити сторонню таблицю \"%s\", тому що стовпець \"%s.%s\" використовує тип її рядка" + +#: commands/tablecmds.c:5887 +#, c-format +msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" +msgstr "неможливо змінити таблицю \"%s\", тому що стовпець \"%s.%s\" використовує тип її рядка" + +#: commands/tablecmds.c:5943 +#, c-format +msgid "cannot alter type \"%s\" because it is the type of a typed table" +msgstr "неможливо змінити тип \"%s\", тому що це тип типізованої таблиці" + +#: commands/tablecmds.c:5945 +#, c-format +msgid "Use ALTER ... CASCADE to alter the typed tables too." +msgstr "Щоб змінити типізовані таблиці, використайте також ALTER ... CASCADE." + +#: commands/tablecmds.c:5991 +#, c-format +msgid "type %s is not a composite type" +msgstr "тип %s не є складеним" + +#: commands/tablecmds.c:6018 +#, c-format +msgid "cannot add column to typed table" +msgstr "неможливо додати стовпець до типізованої таблиці" + +#: commands/tablecmds.c:6069 +#, c-format +msgid "cannot add column to a partition" +msgstr "неможливо додати стовпець до розділу" + +#: commands/tablecmds.c:6098 commands/tablecmds.c:13869 +#, c-format +msgid "child table \"%s\" has different type for column \"%s\"" +msgstr "дочірня таблиця \"%s\" має інший тип для стовпця \"%s\"" + +#: commands/tablecmds.c:6104 commands/tablecmds.c:13876 +#, c-format +msgid "child table \"%s\" has different collation for column \"%s\"" +msgstr "дочірня таблиця \"%s\" має інше правило сортування для стовпця \"%s\"" + +#: commands/tablecmds.c:6118 +#, c-format +msgid "merging definition of column \"%s\" for child \"%s\"" +msgstr "об'єднання визначення стовпця \"%s\" для нащадка \"%s\"" + +#: commands/tablecmds.c:6161 +#, c-format +msgid "cannot recursively add identity column to table that has child tables" +msgstr "неможливо додати стовпець ідентифікації в таблицю, яка має дочірні таблиці" + +#: commands/tablecmds.c:6398 +#, c-format +msgid "column must be added to child tables too" +msgstr "стовпець також повинен бути доданий до дочірніх таблиць" + +#: commands/tablecmds.c:6476 +#, c-format +msgid "column \"%s\" of relation \"%s\" already exists, skipping" +msgstr "стовпець \"%s\" відношення \"%s\" вже існує, пропускається" + +#: commands/tablecmds.c:6483 +#, c-format +msgid "column \"%s\" of relation \"%s\" already exists" +msgstr "стовпець \"%s\" відношення \"%s\" вже існує" + +#: commands/tablecmds.c:6549 commands/tablecmds.c:10826 +#, c-format +msgid "cannot remove constraint from only the partitioned table when partitions exist" +msgstr "неможливо видалити обмеження тільки з секціонованої таблиці, коли існують секції" + +#: commands/tablecmds.c:6550 commands/tablecmds.c:6854 +#: commands/tablecmds.c:7834 commands/tablecmds.c:10827 +#, c-format +msgid "Do not specify the ONLY keyword." +msgstr "Не вказуйте ключове слово ONLY." + +#: commands/tablecmds.c:6587 commands/tablecmds.c:6780 +#: commands/tablecmds.c:6922 commands/tablecmds.c:7036 +#: commands/tablecmds.c:7130 commands/tablecmds.c:7189 +#: commands/tablecmds.c:7291 commands/tablecmds.c:7457 +#: commands/tablecmds.c:7527 commands/tablecmds.c:7620 +#: commands/tablecmds.c:10981 commands/tablecmds.c:12406 +#, c-format +msgid "cannot alter system column \"%s\"" +msgstr "не можна змінити системний стовпець \"%s\"" + +#: commands/tablecmds.c:6593 commands/tablecmds.c:6928 +#, c-format +msgid "column \"%s\" of relation \"%s\" is an identity column" +msgstr "стовпець \"%s\" відношення \"%s\" є стовпцем ідентифікації" + +#: commands/tablecmds.c:6629 +#, c-format +msgid "column \"%s\" is in a primary key" +msgstr "стовпець \"%s\" входить до первинного ключа" + +#: commands/tablecmds.c:6651 +#, c-format +msgid "column \"%s\" is marked NOT NULL in parent table" +msgstr "стовпець \"%s\" в батьківській таблиці позначений як NOT NULL" + +#: commands/tablecmds.c:6851 commands/tablecmds.c:8293 +#, c-format +msgid "constraint must be added to child tables too" +msgstr "обмеження повинно бути додано у дочірні таблиці також" + +#: commands/tablecmds.c:6852 +#, c-format +msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." +msgstr "Стовпець \"%s\" відношення \"%s\" вже не NOT NULL." + +#: commands/tablecmds.c:6887 +#, c-format +msgid "existing constraints on column \"%s.%s\" are sufficient to prove that it does not contain nulls" +msgstr "існуючих обмежень в стовпці \"%s.%s\" досить, щоб довести, що він не містить nulls" + +#: commands/tablecmds.c:6930 +#, c-format +msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." +msgstr "Замість цього використайте ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY." + +#: commands/tablecmds.c:6935 +#, c-format +msgid "column \"%s\" of relation \"%s\" is a generated column" +msgstr "стовпець \"%s\" відношення \"%s\" є згенерованим стовпцем" + +#: commands/tablecmds.c:6938 +#, c-format +msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." +msgstr "Замість цього використайте ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION" + +#: commands/tablecmds.c:7047 +#, c-format +msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" +msgstr "стовпець \"%s\" відношення \"%s\" повинен бути оголошений як NOT NULL, щоб додати ідентифікацію" + +#: commands/tablecmds.c:7053 +#, c-format +msgid "column \"%s\" of relation \"%s\" is already an identity column" +msgstr "стовпець \"%s\" відношення \"%s\" вже є стовпцем ідентифікації" + +#: commands/tablecmds.c:7059 +#, c-format +msgid "column \"%s\" of relation \"%s\" already has a default value" +msgstr "стовпець \"%s\" відношення \"%s\" вже має значення за замовчуванням" + +#: commands/tablecmds.c:7136 commands/tablecmds.c:7197 +#, c-format +msgid "column \"%s\" of relation \"%s\" is not an identity column" +msgstr "стовпець \"%s\" відношення \"%s\" не є стовпцем ідентифікації" + +#: commands/tablecmds.c:7202 +#, c-format +msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" +msgstr "стовпець \"%s\" відношення \"%s\" не є стовпцем ідентифікації, пропускається" + +#: commands/tablecmds.c:7261 +#, c-format +msgid "cannot drop generation expression from inherited column" +msgstr "не можна видалити вираз генерації з успадкованого стовпця" + +#: commands/tablecmds.c:7299 +#, c-format +msgid "column \"%s\" of relation \"%s\" is not a stored generated column" +msgstr "стовпець \"%s\" відношення \"%s\" не є збереженим згенерованим стовпцем" + +#: commands/tablecmds.c:7304 +#, c-format +msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" +msgstr "стовпець \"%s\" відношення \"%s\" не є збереженим згенерованим стовпцем, пропускається" + +#: commands/tablecmds.c:7404 +#, c-format +msgid "cannot refer to non-index column by number" +msgstr "не можна посилатись на неіндексований стовпець за номером" + +#: commands/tablecmds.c:7447 +#, c-format +msgid "column number %d of relation \"%s\" does not exist" +msgstr "стовпець з номером %d відношення %s не існує" + +#: commands/tablecmds.c:7466 +#, c-format +msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" +msgstr "змінити статистику включеного стовпця \"%s\" індексу \"%s\" не можна" + +#: commands/tablecmds.c:7471 +#, c-format +msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" +msgstr "змінити статистику невираженого стовпця \"%s\" індексу \"%s\" не можна" + +#: commands/tablecmds.c:7473 +#, c-format +msgid "Alter statistics on table column instead." +msgstr "Замість цього змініть статистику стовпця в таблиці." + +#: commands/tablecmds.c:7600 +#, c-format +msgid "invalid storage type \"%s\"" +msgstr "неприпустимий тип сховища \"%s\"" + +#: commands/tablecmds.c:7632 +#, c-format +msgid "column data type %s can only have storage PLAIN" +msgstr "тип даних стовпця %s може мати тільки сховище PLAIN" + +#: commands/tablecmds.c:7714 +#, c-format +msgid "cannot drop column from typed table" +msgstr "не можна видалити стовпець з типізованої таблиці" + +#: commands/tablecmds.c:7773 +#, c-format +msgid "column \"%s\" of relation \"%s\" does not exist, skipping" +msgstr "стовпець \"%s\" відношення \"%s\" не існує, пропускається" + +#: commands/tablecmds.c:7786 +#, c-format +msgid "cannot drop system column \"%s\"" +msgstr "не можна видалити системний стовпець \"%s\"" + +#: commands/tablecmds.c:7796 +#, c-format +msgid "cannot drop inherited column \"%s\"" +msgstr "не можна видалити успадкований стовпець \"%s\"" + +#: commands/tablecmds.c:7809 +#, c-format +msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" +msgstr "не можна видалити стовпець \"%s\", тому що він є частиною ключа секції відношення \"%s\"" + +#: commands/tablecmds.c:7833 +#, c-format +msgid "cannot drop column from only the partitioned table when partitions exist" +msgstr "видалити стовпець тільки з секціонованої таблиці, коли існують секції, не можна" + +#: commands/tablecmds.c:8014 +#, c-format +msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" +msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX не підтримується із секціонованими таблицями" + +#: commands/tablecmds.c:8039 +#, c-format +msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" +msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX перейменує індекс \"%s\" в \"%s\"" + +#: commands/tablecmds.c:8373 +#, c-format +msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" +msgstr "не можна використати ONLY для стороннього ключа в секціонованій таблиці \"%s\", який посилається на відношення \"%s\"" + +#: commands/tablecmds.c:8379 +#, c-format +msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" +msgstr "не можна додати сторонній ключ з характеристикою NOT VALID в секціоновану таблицю \"%s\", який посилається на відношення \"%s\"" + +#: commands/tablecmds.c:8382 +#, c-format +msgid "This feature is not yet supported on partitioned tables." +msgstr "Ця функція ще не підтримується з секціонованими таблицями." + +#: commands/tablecmds.c:8389 commands/tablecmds.c:8794 +#, c-format +msgid "referenced relation \"%s\" is not a table" +msgstr "вказане відношення \"%s\" не є таблицею" + +#: commands/tablecmds.c:8412 +#, c-format +msgid "constraints on permanent tables may reference only permanent tables" +msgstr "обмеження в постійних таблицях можуть посилатись лише на постійні таблиці" + +#: commands/tablecmds.c:8419 +#, c-format +msgid "constraints on unlogged tables may reference only permanent or unlogged tables" +msgstr "обмеження в нежурнальованих таблицях можуть посилатись тільки на постійні або нежурналюємі таблиці" + +#: commands/tablecmds.c:8425 +#, c-format +msgid "constraints on temporary tables may reference only temporary tables" +msgstr "обмеження в тимчасових таблицях можуть посилатись лише на тимчасові таблиці" + +#: commands/tablecmds.c:8429 +#, c-format +msgid "constraints on temporary tables must involve temporary tables of this session" +msgstr "обмеження в тимчасових таблицях повинні посилатись лише на тичасові таблиці поточного сеансу" + +#: commands/tablecmds.c:8495 commands/tablecmds.c:8501 +#, c-format +msgid "invalid %s action for foreign key constraint containing generated column" +msgstr "неприпустима дія %s для обмеження зовнішнього ключа, який містить згеренований стовпець" + +#: commands/tablecmds.c:8517 +#, c-format +msgid "number of referencing and referenced columns for foreign key disagree" +msgstr "число стовпців в джерелі і призначенні зовнішнього ключа не збігається" + +#: commands/tablecmds.c:8624 +#, c-format +msgid "foreign key constraint \"%s\" cannot be implemented" +msgstr "обмеження зовнішнього ключа \"%s\" не можна реалізувати" + +#: commands/tablecmds.c:8626 +#, c-format +msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." +msgstr "Стовпці ключа \"%s\" і \"%s\" містять несумісні типи: %s і %s." + +#: commands/tablecmds.c:8989 commands/tablecmds.c:9382 +#: parser/parse_utilcmd.c:764 parser/parse_utilcmd.c:893 +#, c-format +msgid "foreign key constraints are not supported on foreign tables" +msgstr "обмеження зовнішнього ключа для сторонніх таблиць не підтримуються" + +#: commands/tablecmds.c:9748 commands/tablecmds.c:9911 +#: commands/tablecmds.c:10783 commands/tablecmds.c:10858 +#, c-format +msgid "constraint \"%s\" of relation \"%s\" does not exist" +msgstr "обмеження \"%s\" відношення \"%s\" не існує" + +#: commands/tablecmds.c:9755 +#, c-format +msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" +msgstr "обмеження \"%s\" відношення \"%s\" не є обмеженням зовнішнього ключа" + +#: commands/tablecmds.c:9919 +#, c-format +msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" +msgstr "обмеження \"%s\" відношення \"%s\" не є зовнішнім ключем або перевіркою обмеженням " + +#: commands/tablecmds.c:9997 +#, c-format +msgid "constraint must be validated on child tables too" +msgstr "обмеження повинно дотримуватися в дочірніх таблицях також" + +#: commands/tablecmds.c:10081 +#, c-format +msgid "column \"%s\" referenced in foreign key constraint does not exist" +msgstr "стовпець \"%s\", вказаний в обмеженні зовнішнього ключа, не існує" + +#: commands/tablecmds.c:10086 +#, c-format +msgid "cannot have more than %d keys in a foreign key" +msgstr "у зовнішньому ключі не може бути більш ніж %d ключів" + +#: commands/tablecmds.c:10151 +#, c-format +msgid "cannot use a deferrable primary key for referenced table \"%s\"" +msgstr "використовувати затримуваний первинний ключ в цільовій зовнішній таблиці \"%s\" не можна" + +#: commands/tablecmds.c:10168 +#, c-format +msgid "there is no primary key for referenced table \"%s\"" +msgstr "у цільовій зовнішній таблиці \"%s\" немає первинного ключа" + +#: commands/tablecmds.c:10233 +#, c-format +msgid "foreign key referenced-columns list must not contain duplicates" +msgstr "у списку стовпців зовнішнього ключа не повинно бути повторень" + +#: commands/tablecmds.c:10327 +#, c-format +msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" +msgstr "використовувати затримане обмеження унікальності в цільовій зовнішній таблиці \"%s\" не можна" + +#: commands/tablecmds.c:10332 +#, c-format +msgid "there is no unique constraint matching given keys for referenced table \"%s\"" +msgstr "у цільовій зовнішній таблиці \"%s\" немає обмеження унікальності, відповідного даним ключам" + +#: commands/tablecmds.c:10420 +#, c-format +msgid "validating foreign key constraint \"%s\"" +msgstr "перевірка обмеження зовнішнього ключа \"%s\"" + +#: commands/tablecmds.c:10739 +#, c-format +msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" +msgstr "видалити успадковане обмеження \"%s\" відношення \"%s\" не можна" + +#: commands/tablecmds.c:10789 +#, c-format +msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" +msgstr "обмеження \"%s\" відношення \"%s\" не існує, пропускається" + +#: commands/tablecmds.c:10965 +#, c-format +msgid "cannot alter column type of typed table" +msgstr "змінити тип стовпця в типізованій таблиці не можна" + +#: commands/tablecmds.c:10992 +#, c-format +msgid "cannot alter inherited column \"%s\"" +msgstr "змінити успадкований стовпець \"%s\" не можна" + +#: commands/tablecmds.c:11001 +#, c-format +msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" +msgstr "не можна змінити стовпець \"%s\", тому що він є частиною ключа секції відношення \"%s\"" + +#: commands/tablecmds.c:11051 +#, c-format +msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" +msgstr "результати речення USING для стовпця \"%s\" не можна автоматично наведено для типу %s" + +#: commands/tablecmds.c:11054 +#, c-format +msgid "You might need to add an explicit cast." +msgstr "Можливо, необхідно додати явне приведення типу." + +#: commands/tablecmds.c:11058 +#, c-format +msgid "column \"%s\" cannot be cast automatically to type %s" +msgstr "стовпець \"%s\" не можна автоматично привести до типу %s" + +#. translator: USING is SQL, don't translate it +#: commands/tablecmds.c:11061 +#, c-format +msgid "You might need to specify \"USING %s::%s\"." +msgstr "Можливо, необхідно вказати \"USING %s::%s\"." + +#: commands/tablecmds.c:11161 +#, c-format +msgid "cannot alter inherited column \"%s\" of relation \"%s\"" +msgstr "не можна змінити успадкований стовпець \"%s\" відношення \"%s\"" + +#: commands/tablecmds.c:11189 +#, c-format +msgid "USING expression contains a whole-row table reference." +msgstr "Вираз USING містить посилання на тип усього рядка таблиці." + +#: commands/tablecmds.c:11200 +#, c-format +msgid "type of inherited column \"%s\" must be changed in child tables too" +msgstr "тип успадкованого стовпця \"%s\" повинен бути змінений і в дочірніх таблицях" + +#: commands/tablecmds.c:11325 +#, c-format +msgid "cannot alter type of column \"%s\" twice" +msgstr "не можна змінити тип стовпця \"%s\" двічі" + +#: commands/tablecmds.c:11363 +#, c-format +msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" +msgstr "вираз генерації для стовпця \"%s\" не можна автоматично привести до типу %s" + +#: commands/tablecmds.c:11368 +#, c-format +msgid "default for column \"%s\" cannot be cast automatically to type %s" +msgstr "значення за замовчуванням для стовпця \"%s\" не можна автоматично привести до типу %s" + +#: commands/tablecmds.c:11446 +#, c-format +msgid "cannot alter type of a column used by a generated column" +msgstr "змінити тип стовпця, який використовується згенерованим стовпцем, не можна" + +#: commands/tablecmds.c:11447 +#, c-format +msgid "Column \"%s\" is used by generated column \"%s\"." +msgstr "Стовпець \"%s\" використовується згенерованим стовпцем \"%s\"." + +#: commands/tablecmds.c:11468 +#, c-format +msgid "cannot alter type of a column used by a view or rule" +msgstr "змінити тип стовпця, залученого в поданні або правилі, не можна" + +#: commands/tablecmds.c:11469 commands/tablecmds.c:11488 +#: commands/tablecmds.c:11506 +#, c-format +msgid "%s depends on column \"%s\"" +msgstr "%s залежить від стовпця \"%s\"" + +#: commands/tablecmds.c:11487 +#, c-format +msgid "cannot alter type of a column used in a trigger definition" +msgstr "неможливо змінити тип стовпця, що використовується у визначенні тригеру" + +#: commands/tablecmds.c:11505 +#, c-format +msgid "cannot alter type of a column used in a policy definition" +msgstr "неможливо змінити тип стовпця, що використовується у визначенні політики" + +#: commands/tablecmds.c:12514 commands/tablecmds.c:12526 +#, c-format +msgid "cannot change owner of index \"%s\"" +msgstr "неможливо змінити власника індексу \"%s\"" + +#: commands/tablecmds.c:12516 commands/tablecmds.c:12528 +#, c-format +msgid "Change the ownership of the index's table, instead." +msgstr "Замість цього змініть власника таблиці, що містить цей індекс." + +#: commands/tablecmds.c:12542 +#, c-format +msgid "cannot change owner of sequence \"%s\"" +msgstr "неможливо змінити власника послідовності \"%s\"" + +#: commands/tablecmds.c:12556 commands/tablecmds.c:15743 +#, c-format +msgid "Use ALTER TYPE instead." +msgstr "Замість цього використайте ALTER TYPE." + +#: commands/tablecmds.c:12565 +#, c-format +msgid "\"%s\" is not a table, view, sequence, or foreign table" +msgstr "\"%s\" - не таблиця, подання, послідовність або зовнішня таблиця" + +#: commands/tablecmds.c:12905 +#, c-format +msgid "cannot have multiple SET TABLESPACE subcommands" +msgstr "в одній інструкції не може бути декілька підкоманд SET TABLESPACE" + +#: commands/tablecmds.c:12982 +#, c-format +msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" +msgstr "\"%s\" - не таблиця, подання, матеріалізоване подання, індекс або TOAST-таблиця" + +#: commands/tablecmds.c:13015 commands/view.c:494 +#, c-format +msgid "WITH CHECK OPTION is supported only on automatically updatable views" +msgstr "WITH CHECK OPTION підтримується лише з автооновлюваними поданнями" + +#: commands/tablecmds.c:13155 +#, c-format +msgid "cannot move system relation \"%s\"" +msgstr "перемістити системне відношення \"%s\" не можна" + +#: commands/tablecmds.c:13171 +#, c-format +msgid "cannot move temporary tables of other sessions" +msgstr "переміщувати тимчасові таблиці інших сеансів не можна" + +#: commands/tablecmds.c:13341 +#, c-format +msgid "only tables, indexes, and materialized views exist in tablespaces" +msgstr "у табличних просторах існують лише таблиці, індекси та матеріалізовані подання" + +#: commands/tablecmds.c:13353 +#, c-format +msgid "cannot move relations in to or out of pg_global tablespace" +msgstr "переміщувати відношення у або з табличного простору pg_global не можна" + +#: commands/tablecmds.c:13445 +#, c-format +msgid "aborting because lock on relation \"%s.%s\" is not available" +msgstr "переривання через блокування відношення \"%s.%s\" неможливе" + +#: commands/tablecmds.c:13461 +#, c-format +msgid "no matching relations in tablespace \"%s\" found" +msgstr " табличному просторі \"%s\" не знайдені відповідні відносини" + +#: commands/tablecmds.c:13577 +#, c-format +msgid "cannot change inheritance of typed table" +msgstr "змінити успадкування типізованої таблиці не можна" + +#: commands/tablecmds.c:13582 commands/tablecmds.c:14078 +#, c-format +msgid "cannot change inheritance of a partition" +msgstr "змінити успадкування секції не можна" + +#: commands/tablecmds.c:13587 +#, c-format +msgid "cannot change inheritance of partitioned table" +msgstr "змінити успадкування секціонованої таблиці не можна" + +#: commands/tablecmds.c:13633 +#, c-format +msgid "cannot inherit to temporary relation of another session" +msgstr "успадкування для тимчасового відношення іншого сеансу не можливе" + +#: commands/tablecmds.c:13646 +#, c-format +msgid "cannot inherit from a partition" +msgstr "успадкування від секції неможливе" + +#: commands/tablecmds.c:13668 commands/tablecmds.c:16383 +#, c-format +msgid "circular inheritance not allowed" +msgstr "циклічне успадкування неприпустиме" + +#: commands/tablecmds.c:13669 commands/tablecmds.c:16384 +#, c-format +msgid "\"%s\" is already a child of \"%s\"." +msgstr "\"%s\" вже є нащадком \"%s\"." + +#: commands/tablecmds.c:13682 +#, c-format +msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" +msgstr "тригер \"%s\" не дозволяє таблиці \"%s\" стати нащадком успадкування" + +#: commands/tablecmds.c:13684 +#, c-format +msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." +msgstr "Тригери ROW з перехідними таблицями не підтримуються в ієрархіях успадкування." + +#: commands/tablecmds.c:13887 +#, c-format +msgid "column \"%s\" in child table must be marked NOT NULL" +msgstr "стовпець \"%s\" в дочірній таблиці має бути позначений як NOT NULL" + +#: commands/tablecmds.c:13914 +#, c-format +msgid "child table is missing column \"%s\"" +msgstr "у дочірній таблиці не вистачає стовпця \"%s\"" + +#: commands/tablecmds.c:14002 +#, c-format +msgid "child table \"%s\" has different definition for check constraint \"%s\"" +msgstr "дочірня таблиця \"%s\" має інше визначення перевірочного обмеження \"%s\"" + +#: commands/tablecmds.c:14010 +#, c-format +msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" +msgstr "обмеження \"%s\" конфліктує з неуспадкованим обмеженням дочірньої таблиці \"%s\"" + +#: commands/tablecmds.c:14021 +#, c-format +msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" +msgstr "обмеження \"%s\" конфліктує з NOT VALID обмеженням дочірньої таблиці \"%s\"" + +#: commands/tablecmds.c:14056 +#, c-format +msgid "child table is missing constraint \"%s\"" +msgstr "у дочірній таблиці не вистачає обмеження \"%s\"" + +#: commands/tablecmds.c:14145 +#, c-format +msgid "relation \"%s\" is not a partition of relation \"%s\"" +msgstr "відношення \"%s\" не є секцією відношення \"%s\"" + +#: commands/tablecmds.c:14151 +#, c-format +msgid "relation \"%s\" is not a parent of relation \"%s\"" +msgstr "відношення \"%s\" не є предком відношення \"%s\"" + +#: commands/tablecmds.c:14379 +#, c-format +msgid "typed tables cannot inherit" +msgstr "типізовані таблиці не можуть успадковуватись" + +#: commands/tablecmds.c:14409 +#, c-format +msgid "table is missing column \"%s\"" +msgstr "у таблиці не вистачає стовпця \"%s\"" + +#: commands/tablecmds.c:14420 +#, c-format +msgid "table has column \"%s\" where type requires \"%s\"" +msgstr "таблиця містить стовпець \"%s\", а тип потребує \"%s\"" + +#: commands/tablecmds.c:14429 +#, c-format +msgid "table \"%s\" has different type for column \"%s\"" +msgstr "таблиця \"%s\" містить стовпець \"%s\" іншого типу" + +#: commands/tablecmds.c:14443 +#, c-format +msgid "table has extra column \"%s\"" +msgstr "таблиця містить зайвий стовпець \"%s\"" + +#: commands/tablecmds.c:14495 +#, c-format +msgid "\"%s\" is not a typed table" +msgstr "\"%s\" - не типізована таблиця" + +#: commands/tablecmds.c:14677 +#, c-format +msgid "cannot use non-unique index \"%s\" as replica identity" +msgstr "для ідентифікації репліки не можна використати неунікальний індекс \"%s\"" + +#: commands/tablecmds.c:14683 +#, c-format +msgid "cannot use non-immediate index \"%s\" as replica identity" +msgstr "для ідентифікації репліки не можна використати небезпосередній індекс \"%s\"" + +#: commands/tablecmds.c:14689 +#, c-format +msgid "cannot use expression index \"%s\" as replica identity" +msgstr "для ідентифікації репліки не можна використати індекс з виразом \"%s\"" + +#: commands/tablecmds.c:14695 +#, c-format +msgid "cannot use partial index \"%s\" as replica identity" +msgstr "для ідентифікації репліки не можна використати частковий індекс \"%s\"" + +#: commands/tablecmds.c:14701 +#, c-format +msgid "cannot use invalid index \"%s\" as replica identity" +msgstr "для ідентифікації репліки не можна використати неприпустимий індекс \"%s\"" + +#: commands/tablecmds.c:14718 +#, c-format +msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" +msgstr "індекс \"%s\" не можна використати як ідентифікацію репліки, тому що стовпець %d - системний стовпець" + +#: commands/tablecmds.c:14725 +#, c-format +msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" +msgstr "індекс \"%s\" не можна використати як ідентифікацію репліки, тому що стовпець \"%s\" допускає Null" + +#: commands/tablecmds.c:14918 +#, c-format +msgid "cannot change logged status of table \"%s\" because it is temporary" +msgstr "змінити стан журналювання таблиці \"%s\" не можна, тому що вона тимчасова" + +#: commands/tablecmds.c:14942 +#, c-format +msgid "cannot change table \"%s\" to unlogged because it is part of a publication" +msgstr "таблицю \"%s\" не можна змінити на нежурнальовану, тому що вона є частиною публікації" + +#: commands/tablecmds.c:14944 +#, c-format +msgid "Unlogged relations cannot be replicated." +msgstr "Нежурнальовані відношення не підтримують реплікацію." + +#: commands/tablecmds.c:14989 +#, c-format +msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" +msgstr "не вдалося змінити таблицю \"%s\" на журнальовану, тому що вона посилається на нежурнальовану таблицю \"%s\"" + +#: commands/tablecmds.c:14999 +#, c-format +msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" +msgstr "не вдалося змінити таблицю \"%s\" на нежурнальовану, тому що вона посилається на журнальовану таблицю \"%s\"" + +#: commands/tablecmds.c:15057 +#, c-format +msgid "cannot move an owned sequence into another schema" +msgstr "перемістити послідовність з власником в іншу схему не можна" + +#: commands/tablecmds.c:15163 +#, c-format +msgid "relation \"%s\" already exists in schema \"%s\"" +msgstr "відношення \"%s\" вже існує в схемі \"%s\"" + +#: commands/tablecmds.c:15726 +#, c-format +msgid "\"%s\" is not a composite type" +msgstr "\"%s\" - не складений тип" + +#: commands/tablecmds.c:15758 +#, c-format +msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" +msgstr "\"%s\" - не таблиця, подання, матеріалізоване подання, послідовність або зовнішня таблиця" + +#: commands/tablecmds.c:15793 +#, c-format +msgid "unrecognized partitioning strategy \"%s\"" +msgstr "нерозпізнана стратегія секціонування \"%s\"" + +#: commands/tablecmds.c:15801 +#, c-format +msgid "cannot use \"list\" partition strategy with more than one column" +msgstr "стратегія секціонування \"по списку\" не може використовувати декілька стовпців" + +#: commands/tablecmds.c:15867 +#, c-format +msgid "column \"%s\" named in partition key does not exist" +msgstr "стовпець \"%s\", згаданий в ключі секціонування, не існує" + +#: commands/tablecmds.c:15875 +#, c-format +msgid "cannot use system column \"%s\" in partition key" +msgstr "системний стовпець \"%s\" не можна використати в ключі секціонування" + +#: commands/tablecmds.c:15886 commands/tablecmds.c:16000 +#, c-format +msgid "cannot use generated column in partition key" +msgstr "використати згенерований стовпець в ключі секції, не можна" + +#: commands/tablecmds.c:15887 commands/tablecmds.c:16001 commands/trigger.c:641 +#: rewrite/rewriteHandler.c:829 rewrite/rewriteHandler.c:846 +#, c-format +msgid "Column \"%s\" is a generated column." +msgstr "Стовпець \"%s\" є згенерованим стовпцем." + +#: commands/tablecmds.c:15963 +#, c-format +msgid "functions in partition key expression must be marked IMMUTABLE" +msgstr "функції у виразі ключа секціонування повинні бути позначені як IMMUTABLE" + +#: commands/tablecmds.c:15983 +#, c-format +msgid "partition key expressions cannot contain system column references" +msgstr "вирази ключа секціонування не можуть містити посилання на системний стовпець" + +#: commands/tablecmds.c:16013 +#, c-format +msgid "cannot use constant expression as partition key" +msgstr "не можна використати константий вираз як ключ секціонування" + +#: commands/tablecmds.c:16034 +#, c-format +msgid "could not determine which collation to use for partition expression" +msgstr "не вдалося визначити, яке правило сортування використати для виразу секціонування" + +#: commands/tablecmds.c:16069 +#, c-format +msgid "You must specify a hash operator class or define a default hash operator class for the data type." +msgstr "Ви повинні вказати клас операторів гешування або визначити клас операторів гешування за замовчуванням для цього типу даних." + +#: commands/tablecmds.c:16075 +#, c-format +msgid "You must specify a btree operator class or define a default btree operator class for the data type." +msgstr "Ви повинні вказати клас операторів (btree) або визначити клас операторів (btree) за замовчуванням для цього типу даних." + +#: commands/tablecmds.c:16220 +#, c-format +msgid "partition constraint for table \"%s\" is implied by existing constraints" +msgstr "обмеження секції для таблиці \"%s\" має на увазі наявні обмеження" + +#: commands/tablecmds.c:16224 partitioning/partbounds.c:3129 +#: partitioning/partbounds.c:3180 +#, c-format +msgid "updated partition constraint for default partition \"%s\" is implied by existing constraints" +msgstr "оновлене обмеження секції для секції за замовчуванням \"%s\" має на увазі наявні обмеження" + +#: commands/tablecmds.c:16323 +#, c-format +msgid "\"%s\" is already a partition" +msgstr "\"%s\" вже є секцією" + +#: commands/tablecmds.c:16329 +#, c-format +msgid "cannot attach a typed table as partition" +msgstr "неможливо підключити типізовану таблицю в якості секції" + +#: commands/tablecmds.c:16345 +#, c-format +msgid "cannot attach inheritance child as partition" +msgstr "неможливо підключити нащадка успадкування в якості секції" + +#: commands/tablecmds.c:16359 +#, c-format +msgid "cannot attach inheritance parent as partition" +msgstr "неможливо підключити предка успадкування в якості секції" + +#: commands/tablecmds.c:16393 +#, c-format +msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" +msgstr "неможливо підкючити тимчасове відношення в якості секції постійного відношення \"%s\"" + +#: commands/tablecmds.c:16401 +#, c-format +msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" +msgstr "неможливо підключити постійне відношення в якості секції тимчасового відношення \"%s\"" + +#: commands/tablecmds.c:16409 +#, c-format +msgid "cannot attach as partition of temporary relation of another session" +msgstr "неможливо підключити секцію до тимчасового відношення в іншому сеансі" + +#: commands/tablecmds.c:16416 +#, c-format +msgid "cannot attach temporary relation of another session as partition" +msgstr "неможливо підключити тимчасове відношення з іншого сеансу в якості секції" + +#: commands/tablecmds.c:16436 +#, c-format +msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" +msgstr "таблиця \"%s\" містить стовпець \"%s\", відсутній в батьківській \"%s\"" + +#: commands/tablecmds.c:16439 +#, c-format +msgid "The new partition may contain only the columns present in parent." +msgstr "Нова секція може містити лише стовпці, що є у батьківській таблиці." + +#: commands/tablecmds.c:16451 +#, c-format +msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" +msgstr "тригер \"%s\" не дозволяє зробити таблицю \"%s\" секцією" + +#: commands/tablecmds.c:16453 commands/trigger.c:447 +#, c-format +msgid "ROW triggers with transition tables are not supported on partitions" +msgstr "Тригери ROW з перехідними таблицями для секцій не підтримуються" + +#: commands/tablecmds.c:16616 +#, c-format +msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" +msgstr "не можна підключити зовнішню таблицю \"%s\" в якості секції секціонованої таблиці \"%s\"" + +#: commands/tablecmds.c:16619 +#, c-format +msgid "Table \"%s\" contains unique indexes." +msgstr "Таблиця \"%s\" містить унікальні індекси." + +#: commands/tablecmds.c:17265 commands/tablecmds.c:17285 +#: commands/tablecmds.c:17305 commands/tablecmds.c:17324 +#: commands/tablecmds.c:17366 +#, c-format +msgid "cannot attach index \"%s\" as a partition of index \"%s\"" +msgstr "неможливо підключити індекс \"%s\" в якості секції індексу \"%s\"" + +#: commands/tablecmds.c:17268 +#, c-format +msgid "Index \"%s\" is already attached to another index." +msgstr "Індекс \"%s\" вже підключений до іншого індексу." + +#: commands/tablecmds.c:17288 +#, c-format +msgid "Index \"%s\" is not an index on any partition of table \"%s\"." +msgstr "Індекс \"%s\" не є індексом жодної секції таблиці \"%s\"." + +#: commands/tablecmds.c:17308 +#, c-format +msgid "The index definitions do not match." +msgstr "Визначення індексів не співпадають." + +#: commands/tablecmds.c:17327 +#, c-format +msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." +msgstr "Індекс \"%s\" належить обмеженню в таблиці \"%s\", але обмеження для індексу \"%s\" не існує." + +#: commands/tablecmds.c:17369 +#, c-format +msgid "Another index is already attached for partition \"%s\"." +msgstr "До секції \"%s\" вже підключений інший індекс." + +#: commands/tablespace.c:162 commands/tablespace.c:179 +#: commands/tablespace.c:190 commands/tablespace.c:198 +#: commands/tablespace.c:638 replication/slot.c:1373 storage/file/copydir.c:47 +#, c-format +msgid "could not create directory \"%s\": %m" +msgstr "не вдалося створити каталог \"%s\": %m" + +#: commands/tablespace.c:209 +#, c-format +msgid "could not stat directory \"%s\": %m" +msgstr "не вдалося отримати інформацію про каталог \"%s\": %m" + +#: commands/tablespace.c:218 +#, c-format +msgid "\"%s\" exists but is not a directory" +msgstr "\"%s\" існує, але це не каталог" + +#: commands/tablespace.c:249 +#, c-format +msgid "permission denied to create tablespace \"%s\"" +msgstr "немає прав на створення табличного простору \"%s\"" + +#: commands/tablespace.c:251 +#, c-format +msgid "Must be superuser to create a tablespace." +msgstr "Щоб створити табличний простір, потрібно бути суперкористувачем." + +#: commands/tablespace.c:267 +#, c-format +msgid "tablespace location cannot contain single quotes" +msgstr "у шляху до розташування табличного простіру не повинно бути одинарних лапок" + +#: commands/tablespace.c:277 +#, c-format +msgid "tablespace location must be an absolute path" +msgstr "шлях до розташування табличного простору повинен бути абсолютним" + +#: commands/tablespace.c:289 +#, c-format +msgid "tablespace location \"%s\" is too long" +msgstr "шлях до розташування табличного простору \"%s\" занадто довгий" + +#: commands/tablespace.c:296 +#, c-format +msgid "tablespace location should not be inside the data directory" +msgstr "табличний простір не повинен розташовуватись всередині каталогу даних" + +#: commands/tablespace.c:305 commands/tablespace.c:965 +#, c-format +msgid "unacceptable tablespace name \"%s\"" +msgstr "неприпустиме ім'я табличного простору \"%s\"" + +#: commands/tablespace.c:307 commands/tablespace.c:966 +#, c-format +msgid "The prefix \"pg_\" is reserved for system tablespaces." +msgstr "Префікс \"\"pg_\" зарезервований для системних табличних просторів." + +#: commands/tablespace.c:326 commands/tablespace.c:987 +#, c-format +msgid "tablespace \"%s\" already exists" +msgstr "табличний простір \"%s\" вже існує" + +#: commands/tablespace.c:442 commands/tablespace.c:948 +#: commands/tablespace.c:1037 commands/tablespace.c:1106 +#: commands/tablespace.c:1252 commands/tablespace.c:1455 +#, c-format +msgid "tablespace \"%s\" does not exist" +msgstr "табличний простір \"%s\" не існує" + +#: commands/tablespace.c:448 +#, c-format +msgid "tablespace \"%s\" does not exist, skipping" +msgstr "табличний простір \"%s\" вже існує, пропускається" + +#: commands/tablespace.c:525 +#, c-format +msgid "tablespace \"%s\" is not empty" +msgstr "табличний простір \"%s\" не пустий" + +#: commands/tablespace.c:597 +#, c-format +msgid "directory \"%s\" does not exist" +msgstr "каталог \"%s\" не існує" + +#: commands/tablespace.c:598 +#, c-format +msgid "Create this directory for the tablespace before restarting the server." +msgstr "Створіть цей каталог для табличного простору до перезапуску сервера." + +#: commands/tablespace.c:603 +#, c-format +msgid "could not set permissions on directory \"%s\": %m" +msgstr "не вдалося встановити права для каталогу \"%s\": %m" + +#: commands/tablespace.c:633 +#, c-format +msgid "directory \"%s\" already in use as a tablespace" +msgstr "каталог \"%s\" вже використовується в якості табличного простору" + +#: commands/tablespace.c:757 commands/tablespace.c:770 +#: commands/tablespace.c:806 commands/tablespace.c:898 storage/file/fd.c:3108 +#: storage/file/fd.c:3448 +#, c-format +msgid "could not remove directory \"%s\": %m" +msgstr "не вдалося видалити каталог \"%s\": %m" + +#: commands/tablespace.c:819 commands/tablespace.c:907 +#, c-format +msgid "could not remove symbolic link \"%s\": %m" +msgstr "не вдалося видалити символьне посилання \"%s\": %m" + +#: commands/tablespace.c:829 commands/tablespace.c:916 +#, c-format +msgid "\"%s\" is not a directory or symbolic link" +msgstr "\"%s\" - не каталог або символьне посилання" + +#: commands/tablespace.c:1111 +#, c-format +msgid "Tablespace \"%s\" does not exist." +msgstr "Табличний простір \"%s\" не існує." + +#: commands/tablespace.c:1554 +#, c-format +msgid "directories for tablespace %u could not be removed" +msgstr "не вдалося видалити каталоги табличного простору %u" + +#: commands/tablespace.c:1556 +#, c-format +msgid "You can remove the directories manually if necessary." +msgstr "За потреби ви можете видалити каталоги вручну." + +#: commands/trigger.c:204 commands/trigger.c:215 +#, c-format +msgid "\"%s\" is a table" +msgstr "\"%s\" - таблиця" + +#: commands/trigger.c:206 commands/trigger.c:217 +#, c-format +msgid "Tables cannot have INSTEAD OF triggers." +msgstr "Таблиці не можуть мати тригери INSTEAD OF." + +#: commands/trigger.c:238 +#, c-format +msgid "\"%s\" is a partitioned table" +msgstr "\"%s\" є секційною таблицею" + +#: commands/trigger.c:240 +#, c-format +msgid "Triggers on partitioned tables cannot have transition tables." +msgstr "Тригери секціонованих таблиць не можуть використовувати перехідні таблиці." + +#: commands/trigger.c:252 commands/trigger.c:259 commands/trigger.c:429 +#, c-format +msgid "\"%s\" is a view" +msgstr "\"%s\" - подання" + +#: commands/trigger.c:254 +#, c-format +msgid "Views cannot have row-level BEFORE or AFTER triggers." +msgstr "Подання не можуть мати рядкові тригери BEFORE або AFTER." + +#: commands/trigger.c:261 +#, c-format +msgid "Views cannot have TRUNCATE triggers." +msgstr "Подання не можуть мати тригери TRUNCATE." + +#: commands/trigger.c:269 commands/trigger.c:276 commands/trigger.c:288 +#: commands/trigger.c:422 +#, c-format +msgid "\"%s\" is a foreign table" +msgstr "\"%s\" - зовнішня таблиця" + +#: commands/trigger.c:271 +#, c-format +msgid "Foreign tables cannot have INSTEAD OF triggers." +msgstr "Зовнішні таблиці не можуть мати тригери INSTEAD OF." + +#: commands/trigger.c:278 +#, c-format +msgid "Foreign tables cannot have TRUNCATE triggers." +msgstr "Зовнішні таблиці не можуть мати тригери TRUNCATE." + +#: commands/trigger.c:290 +#, c-format +msgid "Foreign tables cannot have constraint triggers." +msgstr "Зовнішні таблиці не можуть мати обмежувальні тригери." + +#: commands/trigger.c:365 +#, c-format +msgid "TRUNCATE FOR EACH ROW triggers are not supported" +msgstr "Тригери TRUNCATE FOR EACH ROW не підтримуються" + +#: commands/trigger.c:373 +#, c-format +msgid "INSTEAD OF triggers must be FOR EACH ROW" +msgstr "Тригери INSTEAD OF повинні мати тип FOR EACH ROW" + +#: commands/trigger.c:377 +#, c-format +msgid "INSTEAD OF triggers cannot have WHEN conditions" +msgstr "Тригери INSTEAD OF не можуть мати умови WHEN" + +#: commands/trigger.c:381 +#, c-format +msgid "INSTEAD OF triggers cannot have column lists" +msgstr "Тригери INSTEAD OF не можуть мати список стовпців" + +#: commands/trigger.c:410 +#, c-format +msgid "ROW variable naming in the REFERENCING clause is not supported" +msgstr "Змінна іменування ROW в реченні REFERENCING не підтримується" + +#: commands/trigger.c:411 +#, c-format +msgid "Use OLD TABLE or NEW TABLE for naming transition tables." +msgstr "Використайте OLD TABLE або NEW TABLE для іменування перехідних таблиць." + +#: commands/trigger.c:424 +#, c-format +msgid "Triggers on foreign tables cannot have transition tables." +msgstr "Тригери зовнішніх таблиць не можуть використовувати перехідні таблиці." + +#: commands/trigger.c:431 +#, c-format +msgid "Triggers on views cannot have transition tables." +msgstr "Тригери подань не можуть використовувати перехідні таблиці." + +#: commands/trigger.c:451 +#, c-format +msgid "ROW triggers with transition tables are not supported on inheritance children" +msgstr "Тригери ROW з перехідними таблицями для нащадків успадкування не підтримуються" + +#: commands/trigger.c:457 +#, c-format +msgid "transition table name can only be specified for an AFTER trigger" +msgstr "ім'я перехідної таблиці можна задати лише для тригеру AFTER" + +#: commands/trigger.c:462 +#, c-format +msgid "TRUNCATE triggers with transition tables are not supported" +msgstr "Тригери TRUNCATE з перехідними таблицями не підтримуються" + +#: commands/trigger.c:479 +#, c-format +msgid "transition tables cannot be specified for triggers with more than one event" +msgstr "перехідні таблиці не можна задати для тригерів, призначених для кількох подій" + +#: commands/trigger.c:490 +#, c-format +msgid "transition tables cannot be specified for triggers with column lists" +msgstr "перехідні таблиці не можна задати для тригерів зі списками стовпців" + +#: commands/trigger.c:507 +#, c-format +msgid "NEW TABLE can only be specified for an INSERT or UPDATE trigger" +msgstr "NEW TABLE можна задати лише для тригерів INSERT або UPDATE" + +#: commands/trigger.c:512 +#, c-format +msgid "NEW TABLE cannot be specified multiple times" +msgstr "NEW TABLE не можна задавати декілька разів" + +#: commands/trigger.c:522 +#, c-format +msgid "OLD TABLE can only be specified for a DELETE or UPDATE trigger" +msgstr "OLD TABLE можна задати лише для тригерів DELETE або UPDATE" + +#: commands/trigger.c:527 +#, c-format +msgid "OLD TABLE cannot be specified multiple times" +msgstr "OLD TABLE не можна задавати декілька разів" + +#: commands/trigger.c:537 +#, c-format +msgid "OLD TABLE name and NEW TABLE name cannot be the same" +msgstr "Ім'я OLD TABLE та ім'я NEW TABLE не можуть бути однаковими" + +#: commands/trigger.c:601 commands/trigger.c:614 +#, c-format +msgid "statement trigger's WHEN condition cannot reference column values" +msgstr "в умові WHEN операторного тригера не можна посилатись на значення стовпця" + +#: commands/trigger.c:606 +#, c-format +msgid "INSERT trigger's WHEN condition cannot reference OLD values" +msgstr "В умові WHEN тригеру INSERT не можна посилатись на значення OLD" + +#: commands/trigger.c:619 +#, c-format +msgid "DELETE trigger's WHEN condition cannot reference NEW values" +msgstr "В умові WHEN тригера DELETE не можна посилатись на значення NEW" + +#: commands/trigger.c:624 +#, c-format +msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" +msgstr "В умові WHEN тригера BEFORE не можна посилатись на системні стовпці NEW" + +#: commands/trigger.c:632 commands/trigger.c:640 +#, c-format +msgid "BEFORE trigger's WHEN condition cannot reference NEW generated columns" +msgstr "В умові WHEN тригера BEFORE не можна посилатись на згенеровані стовпці NEW" + +#: commands/trigger.c:633 +#, c-format +msgid "A whole-row reference is used and the table contains generated columns." +msgstr "Використовується посилання на весь рядок і таблиця містить згенеровані стовпці." + +#: commands/trigger.c:780 commands/trigger.c:1385 +#, c-format +msgid "trigger \"%s\" for relation \"%s\" already exists" +msgstr "тригер \"%s\" для відношення \"%s\" вже існує" + +#: commands/trigger.c:1271 commands/trigger.c:1432 commands/trigger.c:1568 +#, c-format +msgid "trigger \"%s\" for table \"%s\" does not exist" +msgstr "тригер \"%s\" для таблиці \"%s\" не існує" + +#: commands/trigger.c:1515 +#, c-format +msgid "permission denied: \"%s\" is a system trigger" +msgstr "немає доступу: \"%s\" - системний тригер" + +#: commands/trigger.c:2116 +#, c-format +msgid "trigger function %u returned null value" +msgstr "тригерна функція %u повернула значення null" + +#: commands/trigger.c:2176 commands/trigger.c:2390 commands/trigger.c:2625 +#: commands/trigger.c:2933 +#, c-format +msgid "BEFORE STATEMENT trigger cannot return a value" +msgstr "Тригер BEFORE STATEMENT не може повертати значення" + +#: commands/trigger.c:2250 +#, c-format +msgid "moving row to another partition during a BEFORE FOR EACH ROW trigger is not supported" +msgstr "переміщення рядка до іншої секції під час тригеру BEFORE FOR EACH ROW не підтримується" + +#: commands/trigger.c:2251 commands/trigger.c:2755 +#, c-format +msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." +msgstr "Перед виконанням тригера \"%s\", рядок повинен був бути в секції \"%s.%s\"." + +#: commands/trigger.c:2754 +#, c-format +msgid "moving row to another partition during a BEFORE trigger is not supported" +msgstr "переміщення рядка до іншої секції під час тригеру BEFORE не підтримується" + +#: commands/trigger.c:2996 executor/nodeModifyTable.c:1380 +#: executor/nodeModifyTable.c:1449 +#, c-format +msgid "tuple to be updated was already modified by an operation triggered by the current command" +msgstr "кортеж, який повинен бути оновленим, вже змінений в операції, яка викликана поточною командою" + +#: commands/trigger.c:2997 executor/nodeModifyTable.c:840 +#: executor/nodeModifyTable.c:914 executor/nodeModifyTable.c:1381 +#: executor/nodeModifyTable.c:1450 +#, c-format +msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." +msgstr "Можливо, для поширення змін в інші рядки слід використати тригер AFTER замість тригера BEFORE." + +#: commands/trigger.c:3026 executor/nodeLockRows.c:225 +#: executor/nodeLockRows.c:234 executor/nodeModifyTable.c:220 +#: executor/nodeModifyTable.c:856 executor/nodeModifyTable.c:1397 +#: executor/nodeModifyTable.c:1613 +#, c-format +msgid "could not serialize access due to concurrent update" +msgstr "не вдалося серіалізувати доступ через паралельне оновлення" + +#: commands/trigger.c:3034 executor/nodeModifyTable.c:946 +#: executor/nodeModifyTable.c:1467 executor/nodeModifyTable.c:1637 +#, c-format +msgid "could not serialize access due to concurrent delete" +msgstr "не вдалося серіалізувати доступ через паралельне видалення" + +#: commands/trigger.c:5094 +#, c-format +msgid "constraint \"%s\" is not deferrable" +msgstr "обмеження \"%s\" не є відкладеним" + +#: commands/trigger.c:5117 +#, c-format +msgid "constraint \"%s\" does not exist" +msgstr "обмеження \"%s\" не існує" + +#: commands/tsearchcmds.c:118 commands/tsearchcmds.c:683 +#, c-format +msgid "function %s should return type %s" +msgstr "функція %s повинна повертати тип %s" + +#: commands/tsearchcmds.c:195 +#, c-format +msgid "must be superuser to create text search parsers" +msgstr "для створення аналізаторів текстового пошуку потрібно бути суперкористувачем" + +#: commands/tsearchcmds.c:248 +#, c-format +msgid "text search parser parameter \"%s\" not recognized" +msgstr "параметр аналізатора текстового пошуку \"%s\" не розпізнаний" + +#: commands/tsearchcmds.c:258 +#, c-format +msgid "text search parser start method is required" +msgstr "для аналізатора текстового пошуку необхідний метод start" + +#: commands/tsearchcmds.c:263 +#, c-format +msgid "text search parser gettoken method is required" +msgstr "для аналізатора текстового пошуку необхідний метод gettoken" + +#: commands/tsearchcmds.c:268 +#, c-format +msgid "text search parser end method is required" +msgstr "для аналізатора текстового пошуку необхідний метод end" + +#: commands/tsearchcmds.c:273 +#, c-format +msgid "text search parser lextypes method is required" +msgstr "для аналізатора текстового пошуку необхідний метод lextypes" + +#: commands/tsearchcmds.c:390 +#, c-format +msgid "text search template \"%s\" does not accept options" +msgstr "шаблон текстового пошуку \"%s\" не приймає параметри" + +#: commands/tsearchcmds.c:464 +#, c-format +msgid "text search template is required" +msgstr "необхідний шаблон текстового пошуку" + +#: commands/tsearchcmds.c:750 +#, c-format +msgid "must be superuser to create text search templates" +msgstr "для створення шаблонів текстового пошуку потрібно бути суперкористувачем" + +#: commands/tsearchcmds.c:792 +#, c-format +msgid "text search template parameter \"%s\" not recognized" +msgstr "параметр шаблону текстового пошуку \"%s\" не розпізнаний" + +#: commands/tsearchcmds.c:802 +#, c-format +msgid "text search template lexize method is required" +msgstr "для шаблону текстового пошуку необхідний метод lexize" + +#: commands/tsearchcmds.c:1006 +#, c-format +msgid "text search configuration parameter \"%s\" not recognized" +msgstr "параметр конфігурації текстового пошуку \"%s\" не розпізнаний" + +#: commands/tsearchcmds.c:1013 +#, c-format +msgid "cannot specify both PARSER and COPY options" +msgstr "вказати параметри PARSER і COPY одночасно не можна" + +#: commands/tsearchcmds.c:1049 +#, c-format +msgid "text search parser is required" +msgstr "необхідний аналізатор текстового пошуку" + +#: commands/tsearchcmds.c:1273 +#, c-format +msgid "token type \"%s\" does not exist" +msgstr "тип маркера \"%s\" не існує" + +#: commands/tsearchcmds.c:1500 +#, c-format +msgid "mapping for token type \"%s\" does not exist" +msgstr "зіставлення для типу маркера \"%s\" не існує" + +#: commands/tsearchcmds.c:1506 +#, c-format +msgid "mapping for token type \"%s\" does not exist, skipping" +msgstr "зіставлення для типу маркера \"%s\" не існує, пропускається" + +#: commands/tsearchcmds.c:1669 commands/tsearchcmds.c:1784 +#, c-format +msgid "invalid parameter list format: \"%s\"" +msgstr "неприпустимий формат списку параметрів: \"%s\"" + +#: commands/typecmds.c:206 +#, c-format +msgid "must be superuser to create a base type" +msgstr "для створення базового типу потрібно бути суперкористувачем" + +#: commands/typecmds.c:264 +#, c-format +msgid "Create the type as a shell type, then create its I/O functions, then do a full CREATE TYPE." +msgstr "Створіть тип в якості оболонки, потім створіть його функції вводу-виводу, а потім виконайте повну CREATE TYPE." + +#: commands/typecmds.c:314 commands/typecmds.c:1394 commands/typecmds.c:3832 +#, c-format +msgid "type attribute \"%s\" not recognized" +msgstr "атрибут типу \"%s\" не розпізнаний" + +#: commands/typecmds.c:370 +#, c-format +msgid "invalid type category \"%s\": must be simple ASCII" +msgstr "неприпустима категорія типу \"%s\": повинен бути простий ASCII" + +#: commands/typecmds.c:389 +#, c-format +msgid "array element type cannot be %s" +msgstr "типом елементу масиву не може бути %s" + +#: commands/typecmds.c:421 +#, c-format +msgid "alignment \"%s\" not recognized" +msgstr "тип вирівнювання \"%s\" не розпізнаний" + +#: commands/typecmds.c:438 commands/typecmds.c:3718 +#, c-format +msgid "storage \"%s\" not recognized" +msgstr "сховище \"%s\" не розпізнане" + +#: commands/typecmds.c:449 +#, c-format +msgid "type input function must be specified" +msgstr "необхідно вказати функцію вводу типу" + +#: commands/typecmds.c:453 +#, c-format +msgid "type output function must be specified" +msgstr "необхідно вказати функцію виводу типу" + +#: commands/typecmds.c:458 +#, c-format +msgid "type modifier output function is useless without a type modifier input function" +msgstr "функція виводу модифікатора типу недоцільна без функції вводу модифікатора типу" + +#: commands/typecmds.c:745 +#, c-format +msgid "\"%s\" is not a valid base type for a domain" +msgstr "\"%s\" - невідповідний базовий тип для домену" + +#: commands/typecmds.c:837 +#, c-format +msgid "multiple default expressions" +msgstr "неодноразове визначення значення типу за замовчуванням" + +#: commands/typecmds.c:900 commands/typecmds.c:909 +#, c-format +msgid "conflicting NULL/NOT NULL constraints" +msgstr "конфліктуючі обмеження NULL/NOT NULL" + +#: commands/typecmds.c:925 +#, c-format +msgid "check constraints for domains cannot be marked NO INHERIT" +msgstr "перевірки обмеження для доменів не можуть позначатись як NO INHERIT" + +#: commands/typecmds.c:934 commands/typecmds.c:2536 +#, c-format +msgid "unique constraints not possible for domains" +msgstr "обмеження унікальності неможливе для доменів" + +#: commands/typecmds.c:940 commands/typecmds.c:2542 +#, c-format +msgid "primary key constraints not possible for domains" +msgstr "обмеження первинного ключа неможливі для доменів" + +#: commands/typecmds.c:946 commands/typecmds.c:2548 +#, c-format +msgid "exclusion constraints not possible for domains" +msgstr "обмеження винятків неможливі для доменів" + +#: commands/typecmds.c:952 commands/typecmds.c:2554 +#, c-format +msgid "foreign key constraints not possible for domains" +msgstr "обмеження зовнішніх ключів неможливі для доменів" + +#: commands/typecmds.c:961 commands/typecmds.c:2563 +#, c-format +msgid "specifying constraint deferrability not supported for domains" +msgstr "зазначення відкладення обмежень для доменів не підтримується" + +#: commands/typecmds.c:1271 utils/cache/typcache.c:2430 +#, c-format +msgid "%s is not an enum" +msgstr "%s не є переліком" + +#: commands/typecmds.c:1402 +#, c-format +msgid "type attribute \"subtype\" is required" +msgstr "вимагається атрибут типу \"subtype\"" + +#: commands/typecmds.c:1407 +#, c-format +msgid "range subtype cannot be %s" +msgstr "%s не може бути підтипом діапазону" + +#: commands/typecmds.c:1426 +#, c-format +msgid "range collation specified but subtype does not support collation" +msgstr "вказано правило сортування для діапазону, але підтип не підтримує сортування" + +#: commands/typecmds.c:1436 +#, c-format +msgid "cannot specify a canonical function without a pre-created shell type" +msgstr "неможливо вказати канонічну функцію без попередньо створеного типу оболонки" + +#: commands/typecmds.c:1437 +#, c-format +msgid "Create the type as a shell type, then create its canonicalization function, then do a full CREATE TYPE." +msgstr "Створіть тип в якості оболонки, потім створіть його функцію канонізації, а потім виконайте повну CREATE TYPE." + +#: commands/typecmds.c:1648 +#, c-format +msgid "type input function %s has multiple matches" +msgstr "функція введення типу %s має декілька збігів" + +#: commands/typecmds.c:1666 +#, c-format +msgid "type input function %s must return type %s" +msgstr "функція вводу типу %s повинна повертати тип %s" + +#: commands/typecmds.c:1682 +#, c-format +msgid "type input function %s should not be volatile" +msgstr "функція введення типу %s не повинна бути змінною" + +#: commands/typecmds.c:1710 +#, c-format +msgid "type output function %s must return type %s" +msgstr "функція виводу типу %s повинна повертати тип %s" + +#: commands/typecmds.c:1717 +#, c-format +msgid "type output function %s should not be volatile" +msgstr "функція виводу типу %s не повинна бути змінною" + +#: commands/typecmds.c:1746 +#, c-format +msgid "type receive function %s has multiple matches" +msgstr "функція отримання типу %s має декілька збігів" + +#: commands/typecmds.c:1764 +#, c-format +msgid "type receive function %s must return type %s" +msgstr "функція отримання типу %s повинна повертати тип %s" + +#: commands/typecmds.c:1771 +#, c-format +msgid "type receive function %s should not be volatile" +msgstr "функція отримання типу %s не повинна бути змінною" + +#: commands/typecmds.c:1799 +#, c-format +msgid "type send function %s must return type %s" +msgstr "функція відправлення типу %s повинна повертати тип %s" + +#: commands/typecmds.c:1806 +#, c-format +msgid "type send function %s should not be volatile" +msgstr "функція відправлення типу %s не повинна бути змінною" + +#: commands/typecmds.c:1833 +#, c-format +msgid "typmod_in function %s must return type %s" +msgstr "функція typmod_in %s повинна повертати тип %s" + +#: commands/typecmds.c:1840 +#, c-format +msgid "type modifier input function %s should not be volatile" +msgstr "функція вводу модифікатора типу %s не повинна бути змінною" + +#: commands/typecmds.c:1867 +#, c-format +msgid "typmod_out function %s must return type %s" +msgstr "функція typmod_out %s повинна повертати тип %s" + +#: commands/typecmds.c:1874 +#, c-format +msgid "type modifier output function %s should not be volatile" +msgstr "функція виводу модифікатора типу %s не повинна бути змінною" + +#: commands/typecmds.c:1901 +#, c-format +msgid "type analyze function %s must return type %s" +msgstr "функція аналізу типу %s повинна повертати тип %s" + +#: commands/typecmds.c:1947 +#, c-format +msgid "You must specify an operator class for the range type or define a default operator class for the subtype." +msgstr "Ви повинні вказати клас операторів для типу діапазону або визначити клас операторів за замовчуванням для цього підтипу." + +#: commands/typecmds.c:1978 +#, c-format +msgid "range canonical function %s must return range type" +msgstr "функція канонічного діапазону %s повинна вертати тип діапазону" + +#: commands/typecmds.c:1984 +#, c-format +msgid "range canonical function %s must be immutable" +msgstr "функція канонічного діапазону %s повинна бути незмінною" + +#: commands/typecmds.c:2020 +#, c-format +msgid "range subtype diff function %s must return type %s" +msgstr "функція розбіжностей для підтипу діапазону %s повинна повертати тип %s" + +#: commands/typecmds.c:2027 +#, c-format +msgid "range subtype diff function %s must be immutable" +msgstr "функція розбіжностей для підтипу діапазону %s повинна бути незмінною" + +#: commands/typecmds.c:2054 +#, c-format +msgid "pg_type array OID value not set when in binary upgrade mode" +msgstr "значення OID масиву pg_type не встановлено в режимі двійкового оновлення" + +#: commands/typecmds.c:2352 +#, c-format +msgid "column \"%s\" of table \"%s\" contains null values" +msgstr "стовпець \"%s\" таблиці \"%s\" містить значення NULL" + +#: commands/typecmds.c:2465 commands/typecmds.c:2667 +#, c-format +msgid "constraint \"%s\" of domain \"%s\" does not exist" +msgstr "обмеження \"%s\" для домену \"%s\" не існує" + +#: commands/typecmds.c:2469 +#, c-format +msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" +msgstr "обмеження \"%s\" для домену \"%s\" не існує, пропускається" + +#: commands/typecmds.c:2674 +#, c-format +msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" +msgstr "обмеження \"%s\" для домену \"%s\" не є перевірочним обмеженням" + +#: commands/typecmds.c:2780 +#, c-format +msgid "column \"%s\" of table \"%s\" contains values that violate the new constraint" +msgstr "стовпець \"%s\" таблиці \"%s\" містить значення, які порушують нове обмеження" + +#: commands/typecmds.c:3009 commands/typecmds.c:3207 commands/typecmds.c:3289 +#: commands/typecmds.c:3476 +#, c-format +msgid "%s is not a domain" +msgstr "%s - не домен" + +#: commands/typecmds.c:3041 +#, c-format +msgid "constraint \"%s\" for domain \"%s\" already exists" +msgstr "обмеження \"%s\" для домену \"%s\" вже існує" + +#: commands/typecmds.c:3092 +#, c-format +msgid "cannot use table references in domain check constraint" +msgstr "у перевірочному обмеженні для домену не можна посилатись на таблиці" + +#: commands/typecmds.c:3219 commands/typecmds.c:3301 commands/typecmds.c:3593 +#, c-format +msgid "%s is a table's row type" +msgstr "%s - тип рядків таблиці" + +#: commands/typecmds.c:3221 commands/typecmds.c:3303 commands/typecmds.c:3595 +#, c-format +msgid "Use ALTER TABLE instead." +msgstr "Замість цього використайте ALTER TABLE." + +#: commands/typecmds.c:3228 commands/typecmds.c:3310 commands/typecmds.c:3508 +#, c-format +msgid "cannot alter array type %s" +msgstr "змінити тип масиву \"%s\" не можна" + +#: commands/typecmds.c:3230 commands/typecmds.c:3312 commands/typecmds.c:3510 +#, c-format +msgid "You can alter type %s, which will alter the array type as well." +msgstr "Ви можете змінити тип %s, який спричинить зміну типу масиву." + +#: commands/typecmds.c:3578 +#, c-format +msgid "type \"%s\" already exists in schema \"%s\"" +msgstr "тип \"%s\" вже існує в схемі \"%s\"" + +#: commands/typecmds.c:3746 +#, c-format +msgid "cannot change type's storage to PLAIN" +msgstr "неможливо змінити сховище типу на PLAIN" + +#: commands/typecmds.c:3827 +#, c-format +msgid "type attribute \"%s\" cannot be changed" +msgstr "атрибут типу \"%s\" неможливо змінити" + +#: commands/typecmds.c:3845 +#, c-format +msgid "must be superuser to alter a type" +msgstr "для зміни типу потрібно бути суперкористувачем" + +#: commands/typecmds.c:3866 commands/typecmds.c:3876 +#, c-format +msgid "%s is not a base type" +msgstr "%s - не є базовим типом" + +#: commands/user.c:140 +#, c-format +msgid "SYSID can no longer be specified" +msgstr "SYSID вже не потрібно вказувати" + +#: commands/user.c:294 +#, c-format +msgid "must be superuser to create superusers" +msgstr "для створення суперкористувачів необхідно бути суперкористувачем" + +#: commands/user.c:301 +#, c-format +msgid "must be superuser to create replication users" +msgstr "для створення користувачів реплікацій потрібно бути суперкористувачем" + +#: commands/user.c:308 commands/user.c:734 +#, c-format +msgid "must be superuser to change bypassrls attribute" +msgstr "для зміни атрибута bypassrls потрібно бути суперкористувачем" + +#: commands/user.c:315 +#, c-format +msgid "permission denied to create role" +msgstr "немає прав для створення ролі" + +#: commands/user.c:325 commands/user.c:1224 commands/user.c:1231 +#: utils/adt/acl.c:5327 utils/adt/acl.c:5333 gram.y:15146 gram.y:15184 +#, c-format +msgid "role name \"%s\" is reserved" +msgstr "ім'я ролі \"%s\" зарезервовано" + +#: commands/user.c:327 commands/user.c:1226 commands/user.c:1233 +#, c-format +msgid "Role names starting with \"pg_\" are reserved." +msgstr "Імена ролей, які починаються на \"pg_\", зарезервовані." + +#: commands/user.c:348 commands/user.c:1248 +#, c-format +msgid "role \"%s\" already exists" +msgstr "роль \"%s\" вже існує" + +#: commands/user.c:414 commands/user.c:843 +#, c-format +msgid "empty string is not a valid password, clearing password" +msgstr "пустий рядок є неприпустимим паролем, пароль скидається" + +#: commands/user.c:443 +#, c-format +msgid "pg_authid OID value not set when in binary upgrade mode" +msgstr "значення OID в pg_authid не встановлено в режимі двійкового оновлення" + +#: commands/user.c:720 commands/user.c:944 commands/user.c:1485 +#: commands/user.c:1627 +#, c-format +msgid "must be superuser to alter superusers" +msgstr "для зміни суперкористувачів потрібно бути суперкористувачем" + +#: commands/user.c:727 +#, c-format +msgid "must be superuser to alter replication users" +msgstr "для зміни користувачів реплікацій потрібно бути суперкористувачем" + +#: commands/user.c:750 commands/user.c:951 +#, c-format +msgid "permission denied" +msgstr "немає доступу" + +#: commands/user.c:981 +#, c-format +msgid "must be superuser to alter settings globally" +msgstr "для глобальної зміни параметрів потрібно бути суперкористувачем" + +#: commands/user.c:1003 +#, c-format +msgid "permission denied to drop role" +msgstr "немає прав для видалення ролі" + +#: commands/user.c:1028 +#, c-format +msgid "cannot use special role specifier in DROP ROLE" +msgstr "використати спеціальну роль у DROP ROLE не можна" + +#: commands/user.c:1038 commands/user.c:1195 commands/variable.c:770 +#: commands/variable.c:844 utils/adt/acl.c:5184 utils/adt/acl.c:5231 +#: utils/adt/acl.c:5259 utils/adt/acl.c:5277 utils/init/miscinit.c:675 +#, c-format +msgid "role \"%s\" does not exist" +msgstr "роль \"%s\" не існує" + +#: commands/user.c:1043 +#, c-format +msgid "role \"%s\" does not exist, skipping" +msgstr "роль \"%s\" не існує, пропускається" + +#: commands/user.c:1056 commands/user.c:1060 +#, c-format +msgid "current user cannot be dropped" +msgstr "користувач не можна видалити сам себе" + +#: commands/user.c:1064 +#, c-format +msgid "session user cannot be dropped" +msgstr "користувача поточного сеансу не можна видалити" + +#: commands/user.c:1074 +#, c-format +msgid "must be superuser to drop superusers" +msgstr "для видалення суперкористувачів потрібно бути суперкористувачем" + +#: commands/user.c:1090 +#, c-format +msgid "role \"%s\" cannot be dropped because some objects depend on it" +msgstr "роль \"%s\" не можна видалити, тому що деякі об'єкти залежать від неї" + +#: commands/user.c:1211 +#, c-format +msgid "session user cannot be renamed" +msgstr "користувача поточного сеансу не можна перейменувати" + +#: commands/user.c:1215 +#, c-format +msgid "current user cannot be renamed" +msgstr "користувач не може перейменувати сам себе" + +#: commands/user.c:1258 +#, c-format +msgid "must be superuser to rename superusers" +msgstr "для перейменування суперкористувачів потрібно бути суперкористувачем" + +#: commands/user.c:1265 +#, c-format +msgid "permission denied to rename role" +msgstr "немає прав на перейменування ролі" + +#: commands/user.c:1286 +#, c-format +msgid "MD5 password cleared because of role rename" +msgstr "У результаті перейменування ролі сума MD5 паролю очищена" + +#: commands/user.c:1346 +#, c-format +msgid "column names cannot be included in GRANT/REVOKE ROLE" +msgstr "в GRANT/REVOKE ROLE не можна включати назви стовпців" + +#: commands/user.c:1384 +#, c-format +msgid "permission denied to drop objects" +msgstr "немає прав на видалення об'єктів" + +#: commands/user.c:1411 commands/user.c:1420 +#, c-format +msgid "permission denied to reassign objects" +msgstr "немає прав на повторне призначення об'єктів" + +#: commands/user.c:1493 commands/user.c:1635 +#, c-format +msgid "must have admin option on role \"%s\"" +msgstr "потрібно мати параметр admin для ролі \"%s\"" + +#: commands/user.c:1510 +#, c-format +msgid "must be superuser to set grantor" +msgstr "для встановлення права управління правами необхідно бути суперкористувачем" + +#: commands/user.c:1535 +#, c-format +msgid "role \"%s\" is a member of role \"%s\"" +msgstr "роль \"%s\" - учасник ролі \"%s\"" + +#: commands/user.c:1550 +#, c-format +msgid "role \"%s\" is already a member of role \"%s\"" +msgstr "роль \"%s\" вже є учасником ролі \"%s\"" + +#: commands/user.c:1657 +#, c-format +msgid "role \"%s\" is not a member of role \"%s\"" +msgstr "роль \"%s\" не є учасником ролі \"%s\"" + +#: commands/vacuum.c:129 +#, c-format +msgid "unrecognized ANALYZE option \"%s\"" +msgstr "нерозпізнаний параметр ANALYZE \"%s\"" + +#: commands/vacuum.c:151 +#, c-format +msgid "parallel option requires a value between 0 and %d" +msgstr "паралельний параметр потребує значення між 0 і %d" + +#: commands/vacuum.c:163 +#, c-format +msgid "parallel vacuum degree must be between 0 and %d" +msgstr "ступінь паралельної очистки повинен бути між 0 і %d" + +#: commands/vacuum.c:180 +#, c-format +msgid "unrecognized VACUUM option \"%s\"" +msgstr "нерозпізнаний параметр VACUUM \"%s\"" + +#: commands/vacuum.c:203 +#, c-format +msgid "VACUUM FULL cannot be performed in parallel" +msgstr "VACUUM FULL не можна виконати паралельно" + +#: commands/vacuum.c:219 +#, c-format +msgid "ANALYZE option must be specified when a column list is provided" +msgstr "Якщо задається список стовпців, необхідно вказати параметр ANALYZE" + +#: commands/vacuum.c:309 +#, c-format +msgid "%s cannot be executed from VACUUM or ANALYZE" +msgstr "%s не можна виконати під час VACUUM або ANALYZE" + +#: commands/vacuum.c:319 +#, c-format +msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" +msgstr "Параметр VACUUM DISABLE_PAGE_SKIPPING не можна використовувати з FULL" + +#: commands/vacuum.c:560 +#, c-format +msgid "skipping \"%s\" --- only superuser can vacuum it" +msgstr "\"%s\" пропускається --- лише суперкористувач може очистити" + +#: commands/vacuum.c:564 +#, c-format +msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" +msgstr "пропускається \"%s\" --- лише суперкористувач або власник БД може очистити" + +#: commands/vacuum.c:568 +#, c-format +msgid "skipping \"%s\" --- only table or database owner can vacuum it" +msgstr "пропускається \"%s\" --- лише власник таблиці або бази даних може очистити" + +#: commands/vacuum.c:583 +#, c-format +msgid "skipping \"%s\" --- only superuser can analyze it" +msgstr "пропуск об'єкта \"%s\" --- тільки суперкористувач може його аналізувати" + +#: commands/vacuum.c:587 +#, c-format +msgid "skipping \"%s\" --- only superuser or database owner can analyze it" +msgstr "пропуск об'єкта \"%s\" --- тільки суперкористувач або власник бази даних може його аналізувати" + +#: commands/vacuum.c:591 +#, c-format +msgid "skipping \"%s\" --- only table or database owner can analyze it" +msgstr "пропуск об'єкта \"%s\" --- тільки власник таблиці або бази даних може його аналізувати" + +#: commands/vacuum.c:670 commands/vacuum.c:766 +#, c-format +msgid "skipping vacuum of \"%s\" --- lock not available" +msgstr "очистка \"%s\" пропускається --- блокування недоступне" + +#: commands/vacuum.c:675 +#, c-format +msgid "skipping vacuum of \"%s\" --- relation no longer exists" +msgstr "очистка \"%s\" пропускається --- це відношення більше не існує" + +#: commands/vacuum.c:691 commands/vacuum.c:771 +#, c-format +msgid "skipping analyze of \"%s\" --- lock not available" +msgstr "пропуск аналізу об'єкта \"%s\" --- блокування недоступне" + +#: commands/vacuum.c:696 +#, c-format +msgid "skipping analyze of \"%s\" --- relation no longer exists" +msgstr "пропуск аналізу об'єкта\"%s\" --- відношення більше не існує" + +#: commands/vacuum.c:994 +#, c-format +msgid "oldest xmin is far in the past" +msgstr "найстарший xmin далеко в минулому" + +#: commands/vacuum.c:995 +#, c-format +msgid "Close open transactions soon to avoid wraparound problems.\n" +"You might also need to commit or roll back old prepared transactions, or drop stale replication slots." +msgstr "Завершіть відкриті транзакції якнайшвидше, щоб уникнути проблеми зациклення.\n" +"Можливо, вам також доведеться затвердити або відкотити старі підготовленні транзакції, або видалити застарілі слоти реплікації." + +#: commands/vacuum.c:1036 +#, c-format +msgid "oldest multixact is far in the past" +msgstr "найстарший multixact далеко в минулому" + +#: commands/vacuum.c:1037 +#, c-format +msgid "Close open transactions with multixacts soon to avoid wraparound problems." +msgstr "Завершіть відкриті транзакції з multixacts якнайшвидше, щоб уникнути проблеми зациклення." + +#: commands/vacuum.c:1623 +#, c-format +msgid "some databases have not been vacuumed in over 2 billion transactions" +msgstr "деякі бази даних не очищалися протягом більш ніж 2 мільярдів транзакцій" + +#: commands/vacuum.c:1624 +#, c-format +msgid "You might have already suffered transaction-wraparound data loss." +msgstr "Можливо, ви вже втратили дані в результаті зациклення транзакцій." + +#: commands/vacuum.c:1784 +#, c-format +msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" +msgstr "пропускається \"%s\" --- очищати не таблиці або спеціальні системні таблиці не можна" + +#: commands/variable.c:165 utils/misc/guc.c:11156 utils/misc/guc.c:11218 +#, c-format +msgid "Unrecognized key word: \"%s\"." +msgstr "Нерозпізнане ключове слово: \"%s\"." + +#: commands/variable.c:177 +#, c-format +msgid "Conflicting \"datestyle\" specifications." +msgstr "Суперечливі специфікації стилю дат." + +#: commands/variable.c:299 +#, c-format +msgid "Cannot specify months in time zone interval." +msgstr "В інтервалі, що задає часовий пояс, не можна вказувати місяці." + +#: commands/variable.c:305 +#, c-format +msgid "Cannot specify days in time zone interval." +msgstr "В інтервалі, що задає часовий пояс, не можна вказувати дні." + +#: commands/variable.c:343 commands/variable.c:425 +#, c-format +msgid "time zone \"%s\" appears to use leap seconds" +msgstr "часовий пояс \"%s\", мабуть, використовує високосні секунди" + +#: commands/variable.c:345 commands/variable.c:427 +#, c-format +msgid "PostgreSQL does not support leap seconds." +msgstr "PostgreSQL не підтримує високосні секунди." + +#: commands/variable.c:354 +#, c-format +msgid "UTC timezone offset is out of range." +msgstr "Зсув часового поясу UTC поза діапазоном." + +#: commands/variable.c:494 +#, c-format +msgid "cannot set transaction read-write mode inside a read-only transaction" +msgstr "не можна встановити режим транзакції \"читання-запис\" всередині транзакції \"лише читання\"" + +#: commands/variable.c:501 +#, c-format +msgid "transaction read-write mode must be set before any query" +msgstr "режим транзакції \"читання-запис\" повинен бути встановлений до виконання запитів" + +#: commands/variable.c:508 +#, c-format +msgid "cannot set transaction read-write mode during recovery" +msgstr "не можна встановити режим транзакції \"читання-запис\" під час відновлення" + +#: commands/variable.c:534 +#, c-format +msgid "SET TRANSACTION ISOLATION LEVEL must be called before any query" +msgstr "Команда SET TRANSACTION ISOLATION LEVEL повинна викликатися до будь-яких запитів" + +#: commands/variable.c:541 +#, c-format +msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" +msgstr "Команда SET TRANSACTION ISOLATION LEVEL не повинна викликатияь в підтранзакції" + +#: commands/variable.c:548 storage/lmgr/predicate.c:1623 +#, c-format +msgid "cannot use serializable mode in a hot standby" +msgstr "використовувати серіалізований режим в hot standby не можна" + +#: commands/variable.c:549 +#, c-format +msgid "You can use REPEATABLE READ instead." +msgstr "Ви можете використати REPEATABLE READ замість цього." + +#: commands/variable.c:567 +#, c-format +msgid "SET TRANSACTION [NOT] DEFERRABLE cannot be called within a subtransaction" +msgstr "Команда SET TRANSACTION [NOT] DEFERRABLE не може викликатись в підтранзакції" + +#: commands/variable.c:573 +#, c-format +msgid "SET TRANSACTION [NOT] DEFERRABLE must be called before any query" +msgstr "Команда SET TRANSACTION [NOT] DEFERRABLE повинна викликатись до будь-яких запитів" + +#: commands/variable.c:655 +#, c-format +msgid "Conversion between %s and %s is not supported." +msgstr "Перетворення між %s і %s не підтримується." + +#: commands/variable.c:662 +#, c-format +msgid "Cannot change \"client_encoding\" now." +msgstr "Змінити клієнтське кодування зараз неможливо." + +#: commands/variable.c:723 +#, c-format +msgid "cannot change client_encoding during a parallel operation" +msgstr "змінити клієнтське кодування під час паралельної операції неможливо" + +#: commands/variable.c:863 +#, c-format +msgid "permission denied to set role \"%s\"" +msgstr "немає прав для встановлення ролі \"%s\"" + +#: commands/view.c:84 +#, c-format +msgid "could not determine which collation to use for view column \"%s\"" +msgstr "не вдалося визначити, яке правило сортування використати для стовпця подання \"%s\"" + +#: commands/view.c:265 commands/view.c:276 +#, c-format +msgid "cannot drop columns from view" +msgstr "видалити стовпці з подання неможливо" + +#: commands/view.c:281 +#, c-format +msgid "cannot change name of view column \"%s\" to \"%s\"" +msgstr "змінити ім'я стовпця \"%s\" на \"%s\" в поданні неможливо" + +#: commands/view.c:284 +#, c-format +msgid "Use ALTER VIEW ... RENAME COLUMN ... to change name of view column instead." +msgstr "Щоб змінити назву стовпця подання, замість цього використайте ALTER VIEW ... RENAME COLUMN ..." + +#: commands/view.c:290 +#, c-format +msgid "cannot change data type of view column \"%s\" from %s to %s" +msgstr "змінити тип стовпця подання \"%s\" з %s на %s неможливо" + +#: commands/view.c:441 +#, c-format +msgid "views must not contain SELECT INTO" +msgstr "подання не повинні містити SELECT INTO" + +#: commands/view.c:453 +#, c-format +msgid "views must not contain data-modifying statements in WITH" +msgstr "подання не повинні містити інструкції, які змінюють дані в WITH" + +#: commands/view.c:523 +#, c-format +msgid "CREATE VIEW specifies more column names than columns" +msgstr "У CREATE VIEW вказано більше імен стовпців, ніж самих стовпців" + +#: commands/view.c:531 +#, c-format +msgid "views cannot be unlogged because they do not have storage" +msgstr "подання не можуть бути нежурнальованими, так як вони не мають сховища" + +#: commands/view.c:545 +#, c-format +msgid "view \"%s\" will be a temporary view" +msgstr "подання \"%s\" буде тичасовим поданням" + +#: executor/execCurrent.c:79 +#, c-format +msgid "cursor \"%s\" is not a SELECT query" +msgstr "курсор \"%s\" не є запитом SELECT" + +#: executor/execCurrent.c:85 +#, c-format +msgid "cursor \"%s\" is held from a previous transaction" +msgstr "курсор \"%s\" утримується з минулої транзакції" + +#: executor/execCurrent.c:118 +#, c-format +msgid "cursor \"%s\" has multiple FOR UPDATE/SHARE references to table \"%s\"" +msgstr "курсор \"%s\" має декілька посилань FOR UPDATE/SHARE на таблицю \"%s\"" + +#: executor/execCurrent.c:127 +#, c-format +msgid "cursor \"%s\" does not have a FOR UPDATE/SHARE reference to table \"%s\"" +msgstr "курсор \"%s\" не має посилання FOR UPDATE/SHARE на таблицю \"%s\"" + +#: executor/execCurrent.c:137 executor/execCurrent.c:182 +#, c-format +msgid "cursor \"%s\" is not positioned on a row" +msgstr "курсор \"%s\" не розташовується у рядку" + +#: executor/execCurrent.c:169 executor/execCurrent.c:228 +#: executor/execCurrent.c:239 +#, c-format +msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" +msgstr "курсор \"%s\" - не просте оновлюване сканування таблиці \"%s\"" + +#: executor/execCurrent.c:280 executor/execExprInterp.c:2404 +#, c-format +msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" +msgstr "тип параметру %d (%s) не відповідає тому, з котрим тривала підготовка плану (%s)" + +#: executor/execCurrent.c:292 executor/execExprInterp.c:2416 +#, c-format +msgid "no value found for parameter %d" +msgstr "не знайдено значення для параметру %d" + +#: executor/execExpr.c:859 parser/parse_agg.c:816 +#, c-format +msgid "window function calls cannot be nested" +msgstr "виклики віконних функцій не можуть бути вкладеними" + +#: executor/execExpr.c:1318 +#, c-format +msgid "target type is not an array" +msgstr "цільовий тип не є масивом" + +#: executor/execExpr.c:1651 +#, c-format +msgid "ROW() column has type %s instead of type %s" +msgstr "Стовпець ROW() має тип %s замість %s" + +#: executor/execExpr.c:2176 executor/execSRF.c:708 parser/parse_func.c:135 +#: parser/parse_func.c:646 parser/parse_func.c:1020 +#, c-format +msgid "cannot pass more than %d argument to a function" +msgid_plural "cannot pass more than %d arguments to a function" +msgstr[0] "функції не можна передати більше ніж %d аргумент" +msgstr[1] "функції не можна передати більше ніж %d аргументи" +msgstr[2] "функції не можна передати більше ніж %d аргументів" +msgstr[3] "функції не можна передати більше ніж %d аргументів" + +#: executor/execExpr.c:2587 executor/execExpr.c:2593 +#: executor/execExprInterp.c:2730 utils/adt/arrayfuncs.c:262 +#: utils/adt/arrayfuncs.c:560 utils/adt/arrayfuncs.c:1302 +#: utils/adt/arrayfuncs.c:3348 utils/adt/arrayfuncs.c:5308 +#: utils/adt/arrayfuncs.c:5821 +#, c-format +msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" +msgstr "число вимірів масива (%d) перевищує ліміт (%d)" + +#: executor/execExprInterp.c:1894 +#, c-format +msgid "attribute %d of type %s has been dropped" +msgstr "атрибут %d типу %s був видалений" + +#: executor/execExprInterp.c:1900 +#, c-format +msgid "attribute %d of type %s has wrong type" +msgstr "атрибут %d типу %s має неправильний тип" + +#: executor/execExprInterp.c:1902 executor/execExprInterp.c:3002 +#: executor/execExprInterp.c:3049 +#, c-format +msgid "Table has type %s, but query expects %s." +msgstr "Таблиця має тип %s, але запит очікував %s." + +#: executor/execExprInterp.c:2494 +#, c-format +msgid "WHERE CURRENT OF is not supported for this table type" +msgstr "WHERE CURRENT OF для таблиць такого типу не підтримується" + +#: executor/execExprInterp.c:2708 +#, c-format +msgid "cannot merge incompatible arrays" +msgstr "не можна об'єднати несумісні масиви" + +#: executor/execExprInterp.c:2709 +#, c-format +msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." +msgstr "Масив з типом елементів %s не може бути включений в конструкцію ARRAY з типом елементів %s." + +#: executor/execExprInterp.c:2750 executor/execExprInterp.c:2780 +#, c-format +msgid "multidimensional arrays must have array expressions with matching dimensions" +msgstr "для багатовимірних масивів повинні задаватись вирази з відповідними вимірами" + +#: executor/execExprInterp.c:3001 executor/execExprInterp.c:3048 +#, c-format +msgid "attribute %d has wrong type" +msgstr "атрибут %d має неправильний тип" + +#: executor/execExprInterp.c:3158 +#, c-format +msgid "array subscript in assignment must not be null" +msgstr "підрядковий символ масиву у призначенні не може бути NULL" + +#: executor/execExprInterp.c:3588 utils/adt/domains.c:149 +#, c-format +msgid "domain %s does not allow null values" +msgstr "домен %s не допускає значення null" + +#: executor/execExprInterp.c:3603 utils/adt/domains.c:184 +#, c-format +msgid "value for domain %s violates check constraint \"%s\"" +msgstr "значення домену %s порушує перевірочнео бмеження \"%s\"" + +#: executor/execExprInterp.c:3973 executor/execExprInterp.c:3990 +#: executor/execExprInterp.c:4091 executor/nodeModifyTable.c:109 +#: executor/nodeModifyTable.c:120 executor/nodeModifyTable.c:137 +#: executor/nodeModifyTable.c:145 +#, c-format +msgid "table row type and query-specified row type do not match" +msgstr "тип рядка таблиці відрізняється від типу рядка-результату запиту" + +#: executor/execExprInterp.c:3974 +#, c-format +msgid "Table row contains %d attribute, but query expects %d." +msgid_plural "Table row contains %d attributes, but query expects %d." +msgstr[0] "Рядок таблиці містить %d атрибут, але запит очікував %d." +msgstr[1] "Рядок таблиці містить %d атрибути, але запит очікував %d." +msgstr[2] "Рядок таблиці містить %d атрибутів, але запит очікував %d." +msgstr[3] "Рядок таблиці містить %d атрибутів, але запит очікував %d." + +#: executor/execExprInterp.c:3991 executor/nodeModifyTable.c:121 +#, c-format +msgid "Table has type %s at ordinal position %d, but query expects %s." +msgstr "Таблиця має тип %s у порядковому розташуванні %d, але запит очікує %s." + +#: executor/execExprInterp.c:4092 executor/execSRF.c:967 +#, c-format +msgid "Physical storage mismatch on dropped attribute at ordinal position %d." +msgstr "Невідповідність параметрів фізичного зберігання видаленого атрибуту %d." + +#: executor/execIndexing.c:550 +#, c-format +msgid "ON CONFLICT does not support deferrable unique constraints/exclusion constraints as arbiters" +msgstr "ON CONFLICT не підтримує відкладені обмеження унікальності/обмеження-виключення в якості визначального індексу" + +#: executor/execIndexing.c:821 +#, c-format +msgid "could not create exclusion constraint \"%s\"" +msgstr "не вдалося створити обмеження-виключення \"%s\"" + +#: executor/execIndexing.c:824 +#, c-format +msgid "Key %s conflicts with key %s." +msgstr "Ключ %s конфліктує з ключем %s." + +#: executor/execIndexing.c:826 +#, c-format +msgid "Key conflicts exist." +msgstr "Існують конфлікти ключей." + +#: executor/execIndexing.c:832 +#, c-format +msgid "conflicting key value violates exclusion constraint \"%s\"" +msgstr "конфліктуюче значення ключа порушує обмеження-виключення \"%s\"" + +#: executor/execIndexing.c:835 +#, c-format +msgid "Key %s conflicts with existing key %s." +msgstr "Ключ %s конфліктує з існуючим ключем %s." + +#: executor/execIndexing.c:837 +#, c-format +msgid "Key conflicts with existing key." +msgstr "Ключ конфліктує з існуючим ключем." + +#: executor/execMain.c:1091 +#, c-format +msgid "cannot change sequence \"%s\"" +msgstr "послідовність \"%s\" не можна змінити" + +#: executor/execMain.c:1097 +#, c-format +msgid "cannot change TOAST relation \"%s\"" +msgstr "TOAST-відношення \"%s\" не можна змінити" + +#: executor/execMain.c:1115 rewrite/rewriteHandler.c:2934 +#: rewrite/rewriteHandler.c:3708 +#, c-format +msgid "cannot insert into view \"%s\"" +msgstr "вставити дані в подання \"%s\" не можна" + +#: executor/execMain.c:1117 rewrite/rewriteHandler.c:2937 +#: rewrite/rewriteHandler.c:3711 +#, c-format +msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." +msgstr "Щоб подання допускало додавання даних, встановіть тригер INSTEAD OF INSERT або безумовне правило ON INSERT DO INSTEAD." + +#: executor/execMain.c:1123 rewrite/rewriteHandler.c:2942 +#: rewrite/rewriteHandler.c:3716 +#, c-format +msgid "cannot update view \"%s\"" +msgstr "оновити подання \"%s\" не можна" + +#: executor/execMain.c:1125 rewrite/rewriteHandler.c:2945 +#: rewrite/rewriteHandler.c:3719 +#, c-format +msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." +msgstr "Щоб подання допускало оновлення, встановіть тригер INSTEAD OF UPDATE або безумовне правило ON UPDATE DO INSTEAD." + +#: executor/execMain.c:1131 rewrite/rewriteHandler.c:2950 +#: rewrite/rewriteHandler.c:3724 +#, c-format +msgid "cannot delete from view \"%s\"" +msgstr "видалити дані з подання \"%s\" не можна" + +#: executor/execMain.c:1133 rewrite/rewriteHandler.c:2953 +#: rewrite/rewriteHandler.c:3727 +#, c-format +msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." +msgstr "Щоб подання допускало видалення даних, встановіть тригер INSTEAD OF DELETE або безумновне правило ON DELETE DO INSTEAD." + +#: executor/execMain.c:1144 +#, c-format +msgid "cannot change materialized view \"%s\"" +msgstr "змінити матеріалізоване подання \"%s\" не можна" + +#: executor/execMain.c:1156 +#, c-format +msgid "cannot insert into foreign table \"%s\"" +msgstr "вставляти дані в зовнішню таблицю \"%s\" не можна" + +#: executor/execMain.c:1162 +#, c-format +msgid "foreign table \"%s\" does not allow inserts" +msgstr "зовнішня таблиця \"%s\" не допускає додавання даних" + +#: executor/execMain.c:1169 +#, c-format +msgid "cannot update foreign table \"%s\"" +msgstr "оновити зовнішню таблицю \"%s\" не можна" + +#: executor/execMain.c:1175 +#, c-format +msgid "foreign table \"%s\" does not allow updates" +msgstr "зовнішня таблиця \"%s\" не дозволяє оновлення" + +#: executor/execMain.c:1182 +#, c-format +msgid "cannot delete from foreign table \"%s\"" +msgstr "видаляти дані з зовнішньої таблиці \"%s\" не можна" + +#: executor/execMain.c:1188 +#, c-format +msgid "foreign table \"%s\" does not allow deletes" +msgstr "зовнішня таблиця \"%s\" не дозволяє видалення даних" + +#: executor/execMain.c:1199 +#, c-format +msgid "cannot change relation \"%s\"" +msgstr "відношення \"%s\" не можна змінити" + +#: executor/execMain.c:1226 +#, c-format +msgid "cannot lock rows in sequence \"%s\"" +msgstr "блокувати рядки в послідовності \"%s\" не можна" + +#: executor/execMain.c:1233 +#, c-format +msgid "cannot lock rows in TOAST relation \"%s\"" +msgstr "блокувати рядки в TOAST-відношенні \"%s\" не можна" + +#: executor/execMain.c:1240 +#, c-format +msgid "cannot lock rows in view \"%s\"" +msgstr "блокувати рядки в поданні \"%s\" не можна" + +#: executor/execMain.c:1248 +#, c-format +msgid "cannot lock rows in materialized view \"%s\"" +msgstr "блокувати рядки в матеріалізованому поданні \"%s\" не можна" + +#: executor/execMain.c:1257 executor/execMain.c:2627 +#: executor/nodeLockRows.c:132 +#, c-format +msgid "cannot lock rows in foreign table \"%s\"" +msgstr "блокувати рядки в зовнішній таблиці \"%s\" не можна" + +#: executor/execMain.c:1263 +#, c-format +msgid "cannot lock rows in relation \"%s\"" +msgstr "блокувати рядки у відношенні \"%s\" не можна" + +#: executor/execMain.c:1879 +#, c-format +msgid "new row for relation \"%s\" violates partition constraint" +msgstr "новий рядок для відношення \"%s\" порушує обмеження секції" + +#: executor/execMain.c:1881 executor/execMain.c:1964 executor/execMain.c:2012 +#: executor/execMain.c:2120 +#, c-format +msgid "Failing row contains %s." +msgstr "Помилковий рядок містить %s." + +#: executor/execMain.c:1961 +#, c-format +msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" +msgstr "null значення в стовпці \"%s\" відношення \"%s\" порушує not-null обмеження" + +#: executor/execMain.c:2010 +#, c-format +msgid "new row for relation \"%s\" violates check constraint \"%s\"" +msgstr "новий рядок для відношення \"%s\" порушує перевірне обмеження перевірку \"%s\"" + +#: executor/execMain.c:2118 +#, c-format +msgid "new row violates check option for view \"%s\"" +msgstr "новий рядок порушує параметр перевірки для подання \"%s\"" + +#: executor/execMain.c:2128 +#, c-format +msgid "new row violates row-level security policy \"%s\" for table \"%s\"" +msgstr "новий рядок порушує політику захисту на рівні рядків \"%s\" для таблиці \"%s\"" + +#: executor/execMain.c:2133 +#, c-format +msgid "new row violates row-level security policy for table \"%s\"" +msgstr "новий рядок порушує політику захисту на рівні рядків для таблиці \"%s\"" + +#: executor/execMain.c:2140 +#, c-format +msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" +msgstr "новий рядок порушує політику захисту на рівні рядків \"%s\" (вираз USING) для таблиці \"%s\"" + +#: executor/execMain.c:2145 +#, c-format +msgid "new row violates row-level security policy (USING expression) for table \"%s\"" +msgstr "новий рядок порушує політику захисту на рівні рядків (вираз USING) для таблиці \"%s\"" + +#: executor/execPartition.c:341 +#, c-format +msgid "no partition of relation \"%s\" found for row" +msgstr "для рядка не знайдено секції у відношенні \"%s\"" + +#: executor/execPartition.c:344 +#, c-format +msgid "Partition key of the failing row contains %s." +msgstr "Ключ секціонування для невідповідного рядка містить %s." + +#: executor/execReplication.c:196 executor/execReplication.c:373 +#, c-format +msgid "tuple to be locked was already moved to another partition due to concurrent update, retrying" +msgstr "кортеж, що підлягає блокуванню, вже переміщено в іншу секцію в результаті паралельного оновлення, триває повторна спроба" + +#: executor/execReplication.c:200 executor/execReplication.c:377 +#, c-format +msgid "concurrent update, retrying" +msgstr "паралельне оновлення, триває повторна спроба" + +#: executor/execReplication.c:206 executor/execReplication.c:383 +#, c-format +msgid "concurrent delete, retrying" +msgstr "паралельне видалення, триває повторна спроба" + +#: executor/execReplication.c:269 parser/parse_oper.c:228 +#: utils/adt/array_userfuncs.c:719 utils/adt/array_userfuncs.c:858 +#: utils/adt/arrayfuncs.c:3626 utils/adt/arrayfuncs.c:4146 +#: utils/adt/arrayfuncs.c:6132 utils/adt/rowtypes.c:1182 +#, c-format +msgid "could not identify an equality operator for type %s" +msgstr "не вдалося визначити оператора рівності для типу %s" + +#: executor/execReplication.c:586 +#, c-format +msgid "cannot update table \"%s\" because it does not have a replica identity and publishes updates" +msgstr "оновлення в таблиці \"%s\" неможливе, тому що в ній відсутній ідентифікатор репліки, і вона публікує оновлення" + +#: executor/execReplication.c:588 +#, c-format +msgid "To enable updating the table, set REPLICA IDENTITY using ALTER TABLE." +msgstr "Щоб ця таблиця підтримувала оновлення, встановіть REPLICA IDENTITY, використавши ALTER TABLE." + +#: executor/execReplication.c:592 +#, c-format +msgid "cannot delete from table \"%s\" because it does not have a replica identity and publishes deletes" +msgstr "видалення з таблиці \"%s\" неможливе, тому що в ній відсутній ідентифікатор репліки, і вона публікує видалення" + +#: executor/execReplication.c:594 +#, c-format +msgid "To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE." +msgstr "Щоб ця таблиця підтримувала видалення, встановіть REPLICA IDENTITY, використавши ALTER TABLE." + +#: executor/execReplication.c:613 executor/execReplication.c:621 +#, c-format +msgid "cannot use relation \"%s.%s\" as logical replication target" +msgstr "використовувати відношення \"%s.%s\" як ціль логічної реплікації, не можна" + +#: executor/execReplication.c:615 +#, c-format +msgid "\"%s.%s\" is a foreign table." +msgstr "\"%s.%s\" є зовнішньою таблицею." + +#: executor/execReplication.c:623 +#, c-format +msgid "\"%s.%s\" is not a table." +msgstr "\"%s.%s\" не є таблицею." + +#: executor/execSRF.c:315 +#, c-format +msgid "rows returned by function are not all of the same row type" +msgstr "рядки, які повернула функція, не мають однаковий тип рядка" + +#: executor/execSRF.c:363 executor/execSRF.c:657 +#, c-format +msgid "table-function protocol for materialize mode was not followed" +msgstr "порушення протоколу табличної функції в режимі матеріалізації" + +#: executor/execSRF.c:370 executor/execSRF.c:675 +#, c-format +msgid "unrecognized table-function returnMode: %d" +msgstr "нерозпізнаний режим повернення табличної функції: %d" + +#: executor/execSRF.c:884 +#, c-format +msgid "function returning setof record called in context that cannot accept type record" +msgstr "функція, що повертає набір записів, викликана в контексті, що не може прийняти тип запису" + +#: executor/execSRF.c:940 executor/execSRF.c:956 executor/execSRF.c:966 +#, c-format +msgid "function return row and query-specified return row do not match" +msgstr "тип результату функції відрізняється від типу рядка-результату запиту" + +#: executor/execSRF.c:941 +#, c-format +msgid "Returned row contains %d attribute, but query expects %d." +msgid_plural "Returned row contains %d attributes, but query expects %d." +msgstr[0] "Повернений рядок містить %d атрибут, але запит очікував %d." +msgstr[1] "Повернений рядок містить %d атрибути, але запит очікував %d." +msgstr[2] "Повернений рядок містить %d атрибутів, але запит очікував %d." +msgstr[3] "Повернений рядок містить %d атрибутів, але запит очікував %d." + +#: executor/execSRF.c:957 +#, c-format +msgid "Returned type %s at ordinal position %d, but query expects %s." +msgstr "Повернений тип %s у порядковій позиції %d, але запит очікував %s." + +#: executor/execUtils.c:750 +#, c-format +msgid "materialized view \"%s\" has not been populated" +msgstr "матеріалізоване подання \"%s\" не було наповнене" + +#: executor/execUtils.c:752 +#, c-format +msgid "Use the REFRESH MATERIALIZED VIEW command." +msgstr "Використайте команду REFRESH MATERIALIZED VIEW." + +#: executor/functions.c:231 +#, c-format +msgid "could not determine actual type of argument declared %s" +msgstr "не вдалося визначити фактичний тип аргументу, оголошеного як %s" + +#: executor/functions.c:528 +#, c-format +msgid "cannot COPY to/from client in a SQL function" +msgstr "у функції SQL не можна виконати COPY to/from client" + +#. translator: %s is a SQL statement name +#: executor/functions.c:534 +#, c-format +msgid "%s is not allowed in a SQL function" +msgstr "функція SQL не дозволяє використання %s" + +#. translator: %s is a SQL statement name +#: executor/functions.c:542 executor/spi.c:1471 executor/spi.c:2257 +#, c-format +msgid "%s is not allowed in a non-volatile function" +msgstr "незмінна функція не дозволяє використання %s" + +#: executor/functions.c:1430 +#, c-format +msgid "SQL function \"%s\" statement %d" +msgstr "SQL функція \"%s\" оператор %d" + +#: executor/functions.c:1456 +#, c-format +msgid "SQL function \"%s\" during startup" +msgstr "SQL функція \"%s\" під час запуску" + +#: executor/functions.c:1549 +#, c-format +msgid "calling procedures with output arguments is not supported in SQL functions" +msgstr "виклик процедур з вихідними аргументами в функціях SQL не підтримується" + +#: executor/functions.c:1671 executor/functions.c:1708 +#: executor/functions.c:1722 executor/functions.c:1812 +#: executor/functions.c:1845 executor/functions.c:1859 +#, c-format +msgid "return type mismatch in function declared to return %s" +msgstr "невідповідність типу повернення в функції, оголошеній як %s" + +#: executor/functions.c:1673 +#, c-format +msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." +msgstr "Останнім оператором у функції повинен бути SELECT або INSERT/UPDATE/DELETE RETURNING." + +#: executor/functions.c:1710 +#, c-format +msgid "Final statement must return exactly one column." +msgstr "Останній оператор повинен вертати один стовпець." + +#: executor/functions.c:1724 +#, c-format +msgid "Actual return type is %s." +msgstr "Фактичний тип повернення: %s." + +#: executor/functions.c:1814 +#, c-format +msgid "Final statement returns too many columns." +msgstr "Останній оператор вертає дуже багато стовпців." + +#: executor/functions.c:1847 +#, c-format +msgid "Final statement returns %s instead of %s at column %d." +msgstr "Останній оператор поветрає %s замість %s для стовпця %d." + +#: executor/functions.c:1861 +#, c-format +msgid "Final statement returns too few columns." +msgstr "Останній оператор вертає дуже мало стовпців." + +#: executor/functions.c:1889 +#, c-format +msgid "return type %s is not supported for SQL functions" +msgstr "для SQL функцій тип повернення %s не підтримується" + +#: executor/nodeAgg.c:3075 executor/nodeAgg.c:3084 executor/nodeAgg.c:3096 +#, c-format +msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" +msgstr "неочікуваний обрив для стрічки %d: запитано %zu байт, прочитано %zu байт" + +#: executor/nodeAgg.c:4026 parser/parse_agg.c:655 parser/parse_agg.c:685 +#, c-format +msgid "aggregate function calls cannot be nested" +msgstr "виклики агрегатних функцій не можуть бути вкладеними" + +#: executor/nodeAgg.c:4234 executor/nodeWindowAgg.c:2836 +#, c-format +msgid "aggregate %u needs to have compatible input type and transition type" +msgstr "агрегатна функція %u повинна мати сумісні тип введення і тип переходу" + +#: executor/nodeCustom.c:145 executor/nodeCustom.c:156 +#, c-format +msgid "custom scan \"%s\" does not support MarkPos" +msgstr "налаштовуване сканування \"%s\" не підтримує MarkPos" + +#: executor/nodeHashjoin.c:1046 executor/nodeHashjoin.c:1076 +#, c-format +msgid "could not rewind hash-join temporary file" +msgstr "не вдалося перемотати назад тимчасовий файл хеш-з'єднання" + +#: executor/nodeHashjoin.c:1272 executor/nodeHashjoin.c:1283 +#, c-format +msgid "could not read from hash-join temporary file: read only %zu of %zu bytes" +msgstr "не вдалося прочитати тимчасовий файл хеш-з'єднання: прочитано лише %zu з %zu байт" + +#: executor/nodeIndexonlyscan.c:242 +#, c-format +msgid "lossy distance functions are not supported in index-only scans" +msgstr "функції неточної (lossy) дистанції не підтримуються в скануваннях лише по індексу" + +#: executor/nodeLimit.c:374 +#, c-format +msgid "OFFSET must not be negative" +msgstr "OFFSET повинен бути не негативним" + +#: executor/nodeLimit.c:400 +#, c-format +msgid "LIMIT must not be negative" +msgstr "LIMIT повинен бути не негативним" + +#: executor/nodeMergejoin.c:1570 +#, c-format +msgid "RIGHT JOIN is only supported with merge-joinable join conditions" +msgstr "RIGHT JOIN підтримується лише з умовами, які допускають з'єднання злиттям" + +#: executor/nodeMergejoin.c:1588 +#, c-format +msgid "FULL JOIN is only supported with merge-joinable join conditions" +msgstr "FULL JOIN підтримується лише з умовами, які допускають з'єднання злиттям" + +#: executor/nodeModifyTable.c:110 +#, c-format +msgid "Query has too many columns." +msgstr "Запит повертає дуже багато стовпців." + +#: executor/nodeModifyTable.c:138 +#, c-format +msgid "Query provides a value for a dropped column at ordinal position %d." +msgstr "Запит надає значення для видаленого стовпця з порядковим номером %d." + +#: executor/nodeModifyTable.c:146 +#, c-format +msgid "Query has too few columns." +msgstr "Запит повертає дуже мало стовпців." + +#: executor/nodeModifyTable.c:839 executor/nodeModifyTable.c:913 +#, c-format +msgid "tuple to be deleted was already modified by an operation triggered by the current command" +msgstr "кортеж, який підлягає видаленню, вже змінений в операції, яка викликана поточною командою." + +#: executor/nodeModifyTable.c:1220 +#, c-format +msgid "invalid ON UPDATE specification" +msgstr "неприпустима специфікація ON UPDATE" + +#: executor/nodeModifyTable.c:1221 +#, c-format +msgid "The result tuple would appear in a different partition than the original tuple." +msgstr "Результуючий кортеж з'явиться в іншій секції в порівнянні з оригінальним кортежем." + +#: executor/nodeModifyTable.c:1592 +#, c-format +msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" +msgstr "Команда ON CONFLICT DO UPDATE не може змінювати рядок вдруге" + +#: executor/nodeModifyTable.c:1593 +#, c-format +msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." +msgstr "Переконайтеся, що немає рядків для вставки з тією ж командою з дуплікованими обмежувальними значеннями." + +#: executor/nodeSamplescan.c:259 +#, c-format +msgid "TABLESAMPLE parameter cannot be null" +msgstr "Параметр TABLESAMPLE не може бути null" + +#: executor/nodeSamplescan.c:271 +#, c-format +msgid "TABLESAMPLE REPEATABLE parameter cannot be null" +msgstr "Параметр TABLESAMPLE REPEATABLE не може бути null" + +#: executor/nodeSubplan.c:346 executor/nodeSubplan.c:385 +#: executor/nodeSubplan.c:1151 +#, c-format +msgid "more than one row returned by a subquery used as an expression" +msgstr "підзапит, використаний в якості вираження, повернув більше ніж один рядок" + +#: executor/nodeTableFuncscan.c:375 +#, c-format +msgid "namespace URI must not be null" +msgstr "простір імен URI не повинен бути null" + +#: executor/nodeTableFuncscan.c:389 +#, c-format +msgid "row filter expression must not be null" +msgstr "вираз фільтру рядків не повинен бути null" + +#: executor/nodeTableFuncscan.c:415 +#, c-format +msgid "column filter expression must not be null" +msgstr "вираз фільтру стовпців не повинен бути null" + +#: executor/nodeTableFuncscan.c:416 +#, c-format +msgid "Filter for column \"%s\" is null." +msgstr "Фільтр для стовпця \"%s\" є null." + +#: executor/nodeTableFuncscan.c:506 +#, c-format +msgid "null is not allowed in column \"%s\"" +msgstr "у стовпці \"%s\" не допускається null" + +#: executor/nodeWindowAgg.c:355 +#, c-format +msgid "moving-aggregate transition function must not return null" +msgstr "функція переходу рухомого агрегату не повинна вертати Null-значення" + +#: executor/nodeWindowAgg.c:2058 +#, c-format +msgid "frame starting offset must not be null" +msgstr "зсув початку рамки не повинен бути null" + +#: executor/nodeWindowAgg.c:2071 +#, c-format +msgid "frame starting offset must not be negative" +msgstr "зсув початку рамки не повинен бути негативним" + +#: executor/nodeWindowAgg.c:2083 +#, c-format +msgid "frame ending offset must not be null" +msgstr "зсув кінця рамки не повинен бути null" + +#: executor/nodeWindowAgg.c:2096 +#, c-format +msgid "frame ending offset must not be negative" +msgstr "зсув кінця рамки не повинен бути негативним" + +#: executor/nodeWindowAgg.c:2752 +#, c-format +msgid "aggregate function %s does not support use as a window function" +msgstr "агрегатна функція %s не підтримує використання в якості віконної функції" + +#: executor/spi.c:228 executor/spi.c:297 +#, c-format +msgid "invalid transaction termination" +msgstr "неприпустиме завершення транзакції" + +#: executor/spi.c:242 +#, c-format +msgid "cannot commit while a subtransaction is active" +msgstr "неможливо затвердити, коли підтранзакції активні" + +#: executor/spi.c:303 +#, c-format +msgid "cannot roll back while a subtransaction is active" +msgstr "неможливо відкотити, коли підтранзакції активні" + +#: executor/spi.c:372 +#, c-format +msgid "transaction left non-empty SPI stack" +msgstr "транзакція залишила непорожню групу SPI" + +#: executor/spi.c:373 executor/spi.c:435 +#, c-format +msgid "Check for missing \"SPI_finish\" calls." +msgstr "Перевірте наявність виклику \"SPI_finish\"." + +#: executor/spi.c:434 +#, c-format +msgid "subtransaction left non-empty SPI stack" +msgstr "підтранзакція залишила непорожню групу SPI" + +#: executor/spi.c:1335 +#, c-format +msgid "cannot open multi-query plan as cursor" +msgstr "неможливо відкрити план декількох запитів як курсор" + +#. translator: %s is name of a SQL command, eg INSERT +#: executor/spi.c:1340 +#, c-format +msgid "cannot open %s query as cursor" +msgstr "неможливо відкрити запит %s як курсор" + +#: executor/spi.c:1445 +#, c-format +msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" +msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE не підтримується" + +#: executor/spi.c:1446 parser/analyze.c:2508 +#, c-format +msgid "Scrollable cursors must be READ ONLY." +msgstr "Курсори з прокручуванням повинні бути READ ONLY." + +#: executor/spi.c:2560 +#, c-format +msgid "SQL statement \"%s\"" +msgstr "SQL-оператор \"%s\"" + +#: executor/tqueue.c:74 +#, c-format +msgid "could not send tuple to shared-memory queue" +msgstr "не вдалося передати кортеж у чергу в спільну пам'ять" + +#: foreign/foreign.c:220 +#, c-format +msgid "user mapping not found for \"%s\"" +msgstr "зіставлення користувача \"%s\" не знайдено" + +#: foreign/foreign.c:672 +#, c-format +msgid "invalid option \"%s\"" +msgstr "недійсний параметр \"%s\"" + +#: foreign/foreign.c:673 +#, c-format +msgid "Valid options in this context are: %s" +msgstr "У цьому контексті припустимі параметри: %s" + +#: jit/jit.c:205 utils/fmgr/dfmgr.c:209 utils/fmgr/dfmgr.c:417 +#: utils/fmgr/dfmgr.c:465 +#, c-format +msgid "could not access file \"%s\": %m" +msgstr "немає доступу до файлу \"%s\": %m" + +#: jit/llvm/llvmjit.c:595 +#, c-format +msgid "time to inline: %.3fs, opt: %.3fs, emit: %.3fs" +msgstr "час впровадження: %.3fs, оптимізації: %.3fs, видачі: %.3fs" + +#: lib/dshash.c:247 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 +#: utils/mmgr/dsa.c:805 +#, c-format +msgid "Failed on DSA request of size %zu." +msgstr "Не вдалося виконати запит DSA розміру %zu." + +#: libpq/auth-scram.c:248 +#, c-format +msgid "client selected an invalid SASL authentication mechanism" +msgstr "клієнт обрав неприпустимий механізм автентифікації SASL" + +#: libpq/auth-scram.c:269 libpq/auth-scram.c:509 libpq/auth-scram.c:520 +#, c-format +msgid "invalid SCRAM secret for user \"%s\"" +msgstr "неприпустимий секрет SCRAM для користувача \"%s\"" + +#: libpq/auth-scram.c:280 +#, c-format +msgid "User \"%s\" does not have a valid SCRAM secret." +msgstr "Користувач \"%s\" не має припустимого секрету SCRAM." + +#: libpq/auth-scram.c:358 libpq/auth-scram.c:363 libpq/auth-scram.c:693 +#: libpq/auth-scram.c:701 libpq/auth-scram.c:806 libpq/auth-scram.c:819 +#: libpq/auth-scram.c:829 libpq/auth-scram.c:937 libpq/auth-scram.c:944 +#: libpq/auth-scram.c:959 libpq/auth-scram.c:974 libpq/auth-scram.c:988 +#: libpq/auth-scram.c:1006 libpq/auth-scram.c:1021 libpq/auth-scram.c:1321 +#: libpq/auth-scram.c:1329 +#, c-format +msgid "malformed SCRAM message" +msgstr "неправильне повідомлення SCRAM" + +#: libpq/auth-scram.c:359 +#, c-format +msgid "The message is empty." +msgstr "Повідомлення порожнє." + +#: libpq/auth-scram.c:364 +#, c-format +msgid "Message length does not match input length." +msgstr "Довжина повідомлення не відповідає довжині вводу." + +#: libpq/auth-scram.c:396 +#, c-format +msgid "invalid SCRAM response" +msgstr "неприпустима відповідь SCRAM" + +#: libpq/auth-scram.c:397 +#, c-format +msgid "Nonce does not match." +msgstr "Одноразовий ідентифікатор не збігається." + +#: libpq/auth-scram.c:471 +#, c-format +msgid "could not generate random salt" +msgstr "не вдалося згенерувати випадкову сіль" + +#: libpq/auth-scram.c:694 +#, c-format +msgid "Expected attribute \"%c\" but found \"%s\"." +msgstr "Очікувався атрибут \"%c\", але знайдено \"%s\"." + +#: libpq/auth-scram.c:702 libpq/auth-scram.c:830 +#, c-format +msgid "Expected character \"=\" for attribute \"%c\"." +msgstr "Очікувався символ \"=\" для атрибуту \"%c\"." + +#: libpq/auth-scram.c:807 +#, c-format +msgid "Attribute expected, but found end of string." +msgstr "Очікувався атрибут, але знайдено кінець рядка." + +#: libpq/auth-scram.c:820 +#, c-format +msgid "Attribute expected, but found invalid character \"%s\"." +msgstr "Очікувався атрибут, але знайдено неприпустимий символ \"%s\"." + +#: libpq/auth-scram.c:938 libpq/auth-scram.c:960 +#, c-format +msgid "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not include channel binding data." +msgstr "Клієнт обрав алгоритм SCRAM-SHA-256-PLUS, але повідомлення SCRAM не містить даних зв’язування каналів." + +#: libpq/auth-scram.c:945 libpq/auth-scram.c:975 +#, c-format +msgid "Comma expected, but found character \"%s\"." +msgstr "Очікувалась кома, але знайдено символ \"%s\"." + +#: libpq/auth-scram.c:966 +#, c-format +msgid "SCRAM channel binding negotiation error" +msgstr "Помилка узгодження зв’язування каналів SCRAM" + +#: libpq/auth-scram.c:967 +#, c-format +msgid "The client supports SCRAM channel binding but thinks the server does not. However, this server does support channel binding." +msgstr "Клієнт підтримує зв’язування каналів SCRAM, але думає, що сервер не підтримує. Однак, сервер теж підтримує зв’язування каналів." + +#: libpq/auth-scram.c:989 +#, c-format +msgid "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM message includes channel binding data." +msgstr "Клієнт обрав алгоритм SCRAM-SHA-256 без зв’язування каналів, але повідомлення SCRAM містить дані зв’язування каналів." + +#: libpq/auth-scram.c:1000 +#, c-format +msgid "unsupported SCRAM channel-binding type \"%s\"" +msgstr "непідтримуваний тип зв'язування каналів SCRAM \"%s\"" + +#: libpq/auth-scram.c:1007 +#, c-format +msgid "Unexpected channel-binding flag \"%s\"." +msgstr "Неочікувана позначка зв'язування каналів \"%s\"." + +#: libpq/auth-scram.c:1017 +#, c-format +msgid "client uses authorization identity, but it is not supported" +msgstr "клієнт використовує ідентифікатор для авторизації, але це не підтримується" + +#: libpq/auth-scram.c:1022 +#, c-format +msgid "Unexpected attribute \"%s\" in client-first-message." +msgstr "Неочікуваний атрибут \"%s\" у першому повідомленні клієнта." + +#: libpq/auth-scram.c:1038 +#, c-format +msgid "client requires an unsupported SCRAM extension" +msgstr "клієнт потребує непідтримуване розширення SCRAM" + +#: libpq/auth-scram.c:1052 +#, c-format +msgid "non-printable characters in SCRAM nonce" +msgstr "недруковані символи в одноразовому ідентифікаторі SCRAM" + +#: libpq/auth-scram.c:1169 +#, c-format +msgid "could not generate random nonce" +msgstr "не вдалося згенерувати випадковий одноразовий ідентифікатор" + +#: libpq/auth-scram.c:1179 +#, c-format +msgid "could not encode random nonce" +msgstr "не вдалося кодувати випадковий одноразовий ідентифікатор" + +#: libpq/auth-scram.c:1285 +#, c-format +msgid "SCRAM channel binding check failed" +msgstr "Помилка перевірки зв'язування каналів SCRAM" + +#: libpq/auth-scram.c:1303 +#, c-format +msgid "unexpected SCRAM channel-binding attribute in client-final-message" +msgstr "неочікуваний атрибут зв'язування каналів SCRAM в останньому повідомленні клієнта" + +#: libpq/auth-scram.c:1322 +#, c-format +msgid "Malformed proof in client-final-message." +msgstr "Неправильне підтвердження в останньому повідомленні клієнта." + +#: libpq/auth-scram.c:1330 +#, c-format +msgid "Garbage found at the end of client-final-message." +msgstr "Сміття знайдено в кінці останнього повідомлення клієнта." + +#: libpq/auth.c:280 +#, c-format +msgid "authentication failed for user \"%s\": host rejected" +msgstr "користувач \"%s\" не пройшов автентифікацію: відхилений хост" + +#: libpq/auth.c:283 +#, c-format +msgid "\"trust\" authentication failed for user \"%s\"" +msgstr "користувач \"%s\" не пройшов автентифікацію \"trust\"" + +#: libpq/auth.c:286 +#, c-format +msgid "Ident authentication failed for user \"%s\"" +msgstr "Користувач \"%s\" не пройшов автентифікацію Ident" + +#: libpq/auth.c:289 +#, c-format +msgid "Peer authentication failed for user \"%s\"" +msgstr "Користувач \"%s\" не пройшов автентифікацію Peer" + +#: libpq/auth.c:294 +#, c-format +msgid "password authentication failed for user \"%s\"" +msgstr "користувач \"%s\" не пройшов автентифікацію за допомогою пароля" + +#: libpq/auth.c:299 +#, c-format +msgid "GSSAPI authentication failed for user \"%s\"" +msgstr "Користувач \"%s\" не пройшов автентифікацію GSSAPI" + +#: libpq/auth.c:302 +#, c-format +msgid "SSPI authentication failed for user \"%s\"" +msgstr "Користувач \"%s\" не пройшов автентифікацію SSPI" + +#: libpq/auth.c:305 +#, c-format +msgid "PAM authentication failed for user \"%s\"" +msgstr "Користувач \"%s\" не пройшов автентифікацію PAM" + +#: libpq/auth.c:308 +#, c-format +msgid "BSD authentication failed for user \"%s\"" +msgstr "Користувач \"%s\" не пройшов автентифікацію BSD" + +#: libpq/auth.c:311 +#, c-format +msgid "LDAP authentication failed for user \"%s\"" +msgstr "Користувач \"%s\" не пройшов автентифікацію LDAP" + +#: libpq/auth.c:314 +#, c-format +msgid "certificate authentication failed for user \"%s\"" +msgstr "користувач \"%s\" не пройшов автентифікацію за сертифікатом" + +#: libpq/auth.c:317 +#, c-format +msgid "RADIUS authentication failed for user \"%s\"" +msgstr "Користувач \"%s\" не пройшов автентифікацію RADIUS" + +#: libpq/auth.c:320 +#, c-format +msgid "authentication failed for user \"%s\": invalid authentication method" +msgstr "користувач \"%s\" не пройшов автентифікацію: неприпустимий метод автентифікації" + +#: libpq/auth.c:324 +#, c-format +msgid "Connection matched pg_hba.conf line %d: \"%s\"" +msgstr "З'єднання відповідає рядку %d в pg_hba.conf: \"%s\"" + +#: libpq/auth.c:371 +#, c-format +msgid "client certificates can only be checked if a root certificate store is available" +msgstr "сертифікати клієнтів можуть перевірятися, лише якщо доступне сховище кореневих сертифікатів" + +#: libpq/auth.c:382 +#, c-format +msgid "connection requires a valid client certificate" +msgstr "підключення потребує припустимий сертифікат клієнта" + +#: libpq/auth.c:392 +#, c-format +msgid "GSSAPI encryption can only be used with gss, trust, or reject authentication methods" +msgstr "Шифрування GSSAPI можна використовувати лише з методами gss, trust, або відхилення автентифікації" + +#: libpq/auth.c:426 +#, c-format +msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" +msgstr "pg_hba.conf відхиляє підключення реплікації для хосту \"%s\", користувача \"%s\", %s" + +#: libpq/auth.c:428 libpq/auth.c:444 libpq/auth.c:502 libpq/auth.c:520 +msgid "SSL off" +msgstr "SSL вимк" + +#: libpq/auth.c:428 libpq/auth.c:444 libpq/auth.c:502 libpq/auth.c:520 +msgid "SSL on" +msgstr "SSL увімк" + +#: libpq/auth.c:432 +#, c-format +msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\"" +msgstr "pg_hba.conf відхиляє підключення реплікації для хосту \"%s\", користувача \"%s\"" + +#: libpq/auth.c:441 +#, c-format +msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" +msgstr "pg_hba.conf відхиляє підключення для хосту \"%s\", користувача \"%s\", бази даних \"%s\", %s" + +#: libpq/auth.c:448 +#, c-format +msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\"" +msgstr "pg_hba.conf відхиляє підключення для хосту \"%s\", користувача \"%s\", бази даних \"%s\"" + +#: libpq/auth.c:477 +#, c-format +msgid "Client IP address resolved to \"%s\", forward lookup matches." +msgstr "IP-адреса клієнта дозволяється в \"%s\", відповідає прямому перетворенню." + +#: libpq/auth.c:480 +#, c-format +msgid "Client IP address resolved to \"%s\", forward lookup not checked." +msgstr "IP-адреса клієнта дозволяється в \"%s\", пряме перетворення не перевірялося." + +#: libpq/auth.c:483 +#, c-format +msgid "Client IP address resolved to \"%s\", forward lookup does not match." +msgstr "IP-адреса клієнта дозволяється в \"%s\", не відповідає прямому перетворенню." + +#: libpq/auth.c:486 +#, c-format +msgid "Could not translate client host name \"%s\" to IP address: %s." +msgstr "Перекласти ім'я клієнтського хосту \"%s\" в IP-адресу: %s, не вдалося." + +#: libpq/auth.c:491 +#, c-format +msgid "Could not resolve client IP address to a host name: %s." +msgstr "Отримати ім'я хосту з IP-адреси клієнта: %s, не вдалося." + +#: libpq/auth.c:500 +#, c-format +msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" +msgstr "в pg_hba.conf немає запису, що дозволяє підключення для реплікації з хосту \"%s\", користувача \"%s\", %s" + +#: libpq/auth.c:507 +#, c-format +msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\"" +msgstr "в pg_hba.conf немає запису, що дозволяє підключення для реплікації з хосту \"%s\", користувача \"%s\"" + +#: libpq/auth.c:517 +#, c-format +msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" +msgstr "в pg_hba.conf немає запису для хосту \"%s\", користувача \"%s\", бази даних \"%s\", %s" + +#: libpq/auth.c:525 +#, c-format +msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"" +msgstr "в pg_hba.conf немає запису для хосту \"%s\", користувача \"%s\", бази даних \"%s\"" + +#: libpq/auth.c:688 +#, c-format +msgid "expected password response, got message type %d" +msgstr "очікувалася відповід з паролем, але отримано тип повідомлення %d" + +#: libpq/auth.c:716 +#, c-format +msgid "invalid password packet size" +msgstr "неприпустимий розмір пакету з паролем" + +#: libpq/auth.c:734 +#, c-format +msgid "empty password returned by client" +msgstr "клієнт повернув пустий пароль" + +#: libpq/auth.c:854 libpq/hba.c:1340 +#, c-format +msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" +msgstr "Автентифікація MD5 не підтримується, коли увімкнуто режим \"db_user_namespace\"" + +#: libpq/auth.c:860 +#, c-format +msgid "could not generate random MD5 salt" +msgstr "не вдалося створити випадкову сіль для MD5" + +#: libpq/auth.c:906 +#, c-format +msgid "SASL authentication is not supported in protocol version 2" +msgstr "Автентифікація SASL не підтримується в протоколі версії 2" + +#: libpq/auth.c:939 +#, c-format +msgid "expected SASL response, got message type %d" +msgstr "очікувалася відповідь SASL, але отримано тип повідомлення %d" + +#: libpq/auth.c:1068 +#, c-format +msgid "GSSAPI is not supported in protocol version 2" +msgstr "GSSAPI не підтримується в протоколі версії 2" + +#: libpq/auth.c:1128 +#, c-format +msgid "expected GSS response, got message type %d" +msgstr "очікувалася відповідь GSS, але отримано тип повідомлення %d" + +#: libpq/auth.c:1189 +msgid "accepting GSS security context failed" +msgstr "прийняти контекст безпеки GSS не вдалось" + +#: libpq/auth.c:1228 +msgid "retrieving GSS user name failed" +msgstr "отримання ім'я користувача GSS не виконано" + +#: libpq/auth.c:1359 +#, c-format +msgid "SSPI is not supported in protocol version 2" +msgstr "SSPI не підтримується в протоколі версії 2" + +#: libpq/auth.c:1374 +msgid "could not acquire SSPI credentials" +msgstr "не вдалось отримати облікові дані SSPI" + +#: libpq/auth.c:1399 +#, c-format +msgid "expected SSPI response, got message type %d" +msgstr "очікувалась відповідь SSPI, але отримано тип повідомлення %d" + +#: libpq/auth.c:1477 +msgid "could not accept SSPI security context" +msgstr "прийняти контекст безпеки SSPI не вдалося" + +#: libpq/auth.c:1539 +msgid "could not get token from SSPI security context" +msgstr "не вдалося отримати маркер з контексту безпеки SSPI" + +#: libpq/auth.c:1658 libpq/auth.c:1677 +#, c-format +msgid "could not translate name" +msgstr "не вдалося перекласти ім'я" + +#: libpq/auth.c:1690 +#, c-format +msgid "realm name too long" +msgstr "ім'я області дуже довге" + +#: libpq/auth.c:1705 +#, c-format +msgid "translated account name too long" +msgstr "ім'я перекладеного облікового запису дуже довге" + +#: libpq/auth.c:1886 +#, c-format +msgid "could not create socket for Ident connection: %m" +msgstr "не вдалося створити сокет для підключення до серверу Ident: %m" + +#: libpq/auth.c:1901 +#, c-format +msgid "could not bind to local address \"%s\": %m" +msgstr "не вдалося прив'язатися до локальної адреси \"%s\": %m" + +#: libpq/auth.c:1913 +#, c-format +msgid "could not connect to Ident server at address \"%s\", port %s: %m" +msgstr "не вдалося підключитися до Ident-серверу за адресою \"%s\", порт %s: %m" + +#: libpq/auth.c:1935 +#, c-format +msgid "could not send query to Ident server at address \"%s\", port %s: %m" +msgstr "не вдалося надіслати запит до Ident -серверу за адресою \"%s\", порт %s: %m" + +#: libpq/auth.c:1952 +#, c-format +msgid "could not receive response from Ident server at address \"%s\", port %s: %m" +msgstr "не вдалося отримати відповідь від Ident-серверу за адресою \"%s\", порт %s: %m" + +#: libpq/auth.c:1962 +#, c-format +msgid "invalidly formatted response from Ident server: \"%s\"" +msgstr "неприпустимо форматована відповідь від Ident-серверу: \"%s\"" + +#: libpq/auth.c:2009 +#, c-format +msgid "peer authentication is not supported on this platform" +msgstr "автентифікація peer не підтримується на цій платформі" + +#: libpq/auth.c:2013 +#, c-format +msgid "could not get peer credentials: %m" +msgstr "не вдалося отримати облікові дані користувача через peer: %m" + +#: libpq/auth.c:2025 +#, c-format +msgid "could not look up local user ID %ld: %s" +msgstr "не вдалося знайти локального користувача за ідентифікатором (%ld): %s" + +#: libpq/auth.c:2124 +#, c-format +msgid "error from underlying PAM layer: %s" +msgstr "помилка у нижчому шарі PAM: %s" + +#: libpq/auth.c:2194 +#, c-format +msgid "could not create PAM authenticator: %s" +msgstr "не вдалося створити автентифікатор PAM: %s" + +#: libpq/auth.c:2205 +#, c-format +msgid "pam_set_item(PAM_USER) failed: %s" +msgstr "помилка в pam_set_item(PAM_USER): %s" + +#: libpq/auth.c:2237 +#, c-format +msgid "pam_set_item(PAM_RHOST) failed: %s" +msgstr "помилка в pam_set_item(PAM_RHOST): %s" + +#: libpq/auth.c:2249 +#, c-format +msgid "pam_set_item(PAM_CONV) failed: %s" +msgstr "помилка в pam_set_item(PAM_CONV): %s" + +#: libpq/auth.c:2262 +#, c-format +msgid "pam_authenticate failed: %s" +msgstr "помилка в pam_authenticate: %sв" + +#: libpq/auth.c:2275 +#, c-format +msgid "pam_acct_mgmt failed: %s" +msgstr "помилка в pam_acct_mgmt: %s" + +#: libpq/auth.c:2286 +#, c-format +msgid "could not release PAM authenticator: %s" +msgstr "не вдалося вивільнити автентифікатор PAM: %s" + +#: libpq/auth.c:2362 +#, c-format +msgid "could not initialize LDAP: error code %d" +msgstr "не вдалося ініціалізувати протокол LDAP: код помилки %d" + +#: libpq/auth.c:2399 +#, c-format +msgid "could not extract domain name from ldapbasedn" +msgstr "не вдалося отримати назву домена з ldapbasedn" + +#: libpq/auth.c:2407 +#, c-format +msgid "LDAP authentication could not find DNS SRV records for \"%s\"" +msgstr "Автентифікація LDAP не змогла знайти записи DNS SRV для \"%s\"" + +#: libpq/auth.c:2409 +#, c-format +msgid "Set an LDAP server name explicitly." +msgstr "Встановіть назву сервера LDAP, явно." + +#: libpq/auth.c:2461 +#, c-format +msgid "could not initialize LDAP: %s" +msgstr "не вдалося ініціалізувати протокол LDAP: %s" + +#: libpq/auth.c:2471 +#, c-format +msgid "ldaps not supported with this LDAP library" +msgstr "протокол ldaps з поточною бібліотекою LDAP не підтримується" + +#: libpq/auth.c:2479 +#, c-format +msgid "could not initialize LDAP: %m" +msgstr "не вдалося ініціалізувати протокол LDAP: %m" + +#: libpq/auth.c:2489 +#, c-format +msgid "could not set LDAP protocol version: %s" +msgstr "не вдалося встановити версію протоколу LDAP: %s" + +#: libpq/auth.c:2529 +#, c-format +msgid "could not load function _ldap_start_tls_sA in wldap32.dll" +msgstr "не вдалося завантажити функцію _ldap_start_tls_sA in wldap32.dll" + +#: libpq/auth.c:2530 +#, c-format +msgid "LDAP over SSL is not supported on this platform." +msgstr "Протокол LDAP через протокол SSL не підтримується на цій платформі." + +#: libpq/auth.c:2546 +#, c-format +msgid "could not start LDAP TLS session: %s" +msgstr "не вдалося почати сеанс протоколу LDAP TLS: %s" + +#: libpq/auth.c:2617 +#, c-format +msgid "LDAP server not specified, and no ldapbasedn" +msgstr "Сервер LDAP не вказаний, і не ldapbasedn" + +#: libpq/auth.c:2624 +#, c-format +msgid "LDAP server not specified" +msgstr "LDAP-сервер не вказаний" + +#: libpq/auth.c:2686 +#, c-format +msgid "invalid character in user name for LDAP authentication" +msgstr "неприпустимий символ в імені користувача для автентифікації LDAP" + +#: libpq/auth.c:2703 +#, c-format +msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" +msgstr "не вдалося виконати початкову прив'язку LDAP для ldapbinddn \"%s\" на сервері \"%s\": %s" + +#: libpq/auth.c:2732 +#, c-format +msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" +msgstr "не вдалося виконати LDAP-пошук за фільтром \"%s\" на сервері \"%s\": %s" + +#: libpq/auth.c:2746 +#, c-format +msgid "LDAP user \"%s\" does not exist" +msgstr "LDAP-користувач \"%s\" не існує" + +#: libpq/auth.c:2747 +#, c-format +msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." +msgstr "LDAP-пошук за фільтром \"%s\" на сервері \"%s\" не повернув записів." + +#: libpq/auth.c:2751 +#, c-format +msgid "LDAP user \"%s\" is not unique" +msgstr "LDAP-користувач \"%s\" не унікальний" + +#: libpq/auth.c:2752 +#, c-format +msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." +msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." +msgstr[0] "LDAP-пошук за фільтром \"%s\" на сервері \"%s\" повернув %d запис." +msgstr[1] "LDAP-пошук за фільтром \"%s\" на сервері \"%s\" повернув %d записів." +msgstr[2] "LDAP-пошук за фільтром \"%s\" на сервері \"%s\" повернув %d записів." +msgstr[3] "LDAP-пошук за фільтром \"%s\" на сервері \"%s\" повернув %d записів." + +#: libpq/auth.c:2772 +#, c-format +msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" +msgstr "не вдалося отримати dn для першого результату, що відповідає \"%s\" на сервері \"%s\": %s" + +#: libpq/auth.c:2793 +#, c-format +msgid "could not unbind after searching for user \"%s\" on server \"%s\"" +msgstr "не вдалося відв'язатись після пошуку користувача \"%s\" на сервері \"%s\"" + +#: libpq/auth.c:2824 +#, c-format +msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" +msgstr "Помилка під час реєстрації в протоколі LDAP користувача \"%s\" на сервері \"%s\": %s" + +#: libpq/auth.c:2853 +#, c-format +msgid "LDAP diagnostics: %s" +msgstr "Діагностика LDAP: %s" + +#: libpq/auth.c:2880 +#, c-format +msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" +msgstr "помилка автентифікації сертифіката для користувача \"%s\": сертифікат клієнта не містить імені користувача" + +#: libpq/auth.c:2897 +#, c-format +msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" +msgstr "помилка перевірки сертифікату (clientcert=verify-full) для користувача \"%s\": CN невідповідність" + +#: libpq/auth.c:2998 +#, c-format +msgid "RADIUS server not specified" +msgstr "RADIUS-сервер не вказаний" + +#: libpq/auth.c:3005 +#, c-format +msgid "RADIUS secret not specified" +msgstr "Секрет RADIUS не вказаний" + +#: libpq/auth.c:3019 +#, c-format +msgid "RADIUS authentication does not support passwords longer than %d characters" +msgstr "Автентифікація RADIUS не підтримує паролі довші ніж %d символів" + +#: libpq/auth.c:3124 libpq/hba.c:1954 +#, c-format +msgid "could not translate RADIUS server name \"%s\" to address: %s" +msgstr "не вдалося перетворити ім'я серверу RADIUS \"%s\" в адресу: %s" + +#: libpq/auth.c:3138 +#, c-format +msgid "could not generate random encryption vector" +msgstr "не вдалося створити випадковий вектор шифрування" + +#: libpq/auth.c:3172 +#, c-format +msgid "could not perform MD5 encryption of password" +msgstr "не вдалося виконати MD5 шифрування паролю" + +#: libpq/auth.c:3198 +#, c-format +msgid "could not create RADIUS socket: %m" +msgstr "не вдалося створити сокет RADIUS: %m" + +#: libpq/auth.c:3220 +#, c-format +msgid "could not bind local RADIUS socket: %m" +msgstr "не вдалося прив'язатися до локального сокету RADIUS: %m" + +#: libpq/auth.c:3230 +#, c-format +msgid "could not send RADIUS packet: %m" +msgstr "не вдалося відправити пакет RADIUS: %m" + +#: libpq/auth.c:3263 libpq/auth.c:3289 +#, c-format +msgid "timeout waiting for RADIUS response from %s" +msgstr "перевищено час очікування відповіді RADIUS від %s" + +#: libpq/auth.c:3282 +#, c-format +msgid "could not check status on RADIUS socket: %m" +msgstr "не вдалося перевірити статус сокету RADIUS: %m" + +#: libpq/auth.c:3312 +#, c-format +msgid "could not read RADIUS response: %m" +msgstr "не вдалося прочитати відповідь RADIUS: %m" + +#: libpq/auth.c:3325 libpq/auth.c:3329 +#, c-format +msgid "RADIUS response from %s was sent from incorrect port: %d" +msgstr "Відповідь RADIUS від %s була відправлена з неправильного порту: %d" + +#: libpq/auth.c:3338 +#, c-format +msgid "RADIUS response from %s too short: %d" +msgstr "Занадто коротка відповідь RADIUS від %s: %d" + +#: libpq/auth.c:3345 +#, c-format +msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" +msgstr "У відповіді RADIUS від %s покшоджена довжина: %d (фактична довжина %d)" + +#: libpq/auth.c:3353 +#, c-format +msgid "RADIUS response from %s is to a different request: %d (should be %d)" +msgstr "Прийшла відповідь RADIUS від %s на інший запит: %d (очікувалася %d)" + +#: libpq/auth.c:3378 +#, c-format +msgid "could not perform MD5 encryption of received packet" +msgstr "не вдалося виконати шифрування MD5 для отриманого пакету" + +#: libpq/auth.c:3387 +#, c-format +msgid "RADIUS response from %s has incorrect MD5 signature" +msgstr "Відповідь RADIUS від %s має неправильний підпис MD5" + +#: libpq/auth.c:3405 +#, c-format +msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" +msgstr "Відповідь RADIUS від %s має неприпустимий код (%d) для користувача \"%s\"" + +#: libpq/be-fsstubs.c:119 libpq/be-fsstubs.c:150 libpq/be-fsstubs.c:178 +#: libpq/be-fsstubs.c:204 libpq/be-fsstubs.c:229 libpq/be-fsstubs.c:277 +#: libpq/be-fsstubs.c:300 libpq/be-fsstubs.c:553 +#, c-format +msgid "invalid large-object descriptor: %d" +msgstr "неприпустимий дескриптор великого об'єкту: %d" + +#: libpq/be-fsstubs.c:161 +#, c-format +msgid "large object descriptor %d was not opened for reading" +msgstr "дескриптор великого об'єкту %d не був відкритий для читання" + +#: libpq/be-fsstubs.c:185 libpq/be-fsstubs.c:560 +#, c-format +msgid "large object descriptor %d was not opened for writing" +msgstr "дескриптор великого об’єкту %d не був відкритий для запису" + +#: libpq/be-fsstubs.c:212 +#, c-format +msgid "lo_lseek result out of range for large-object descriptor %d" +msgstr "результат lo_lseek для дескриптора великого об'єкту %d поза діапазоном" + +#: libpq/be-fsstubs.c:285 +#, c-format +msgid "lo_tell result out of range for large-object descriptor %d" +msgstr "результат lo_tell для дескриптору\\а великого об'єкту %d поза діапазоном" + +#: libpq/be-fsstubs.c:432 +#, c-format +msgid "could not open server file \"%s\": %m" +msgstr "не вдалося відкрити файл сервера \"%s\": %m" + +#: libpq/be-fsstubs.c:454 +#, c-format +msgid "could not read server file \"%s\": %m" +msgstr "не вдалося прочитати файл сервера \"%s\": %m" + +#: libpq/be-fsstubs.c:514 +#, c-format +msgid "could not create server file \"%s\": %m" +msgstr "не вдалося створити файл сервера \"%s\": %m" + +#: libpq/be-fsstubs.c:526 +#, c-format +msgid "could not write server file \"%s\": %m" +msgstr "не вдалося написати файл сервера \"%s\": %m" + +#: libpq/be-fsstubs.c:760 +#, c-format +msgid "large object read request is too large" +msgstr "запит на читання великого об'єкту має завеликий розмір" + +#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:265 utils/adt/genfile.c:304 +#: utils/adt/genfile.c:340 +#, c-format +msgid "requested length cannot be negative" +msgstr "запитувана довжина не може бути негативною" + +#: libpq/be-fsstubs.c:855 storage/large_object/inv_api.c:297 +#: storage/large_object/inv_api.c:309 storage/large_object/inv_api.c:513 +#: storage/large_object/inv_api.c:624 storage/large_object/inv_api.c:814 +#, c-format +msgid "permission denied for large object %u" +msgstr "немає дозволу для великого об'єкта %u" + +#: libpq/be-secure-common.c:93 +#, c-format +msgid "could not read from command \"%s\": %m" +msgstr "не вдалося прочитати висновок команди \"%s\": %m" + +#: libpq/be-secure-common.c:113 +#, c-format +msgid "command \"%s\" failed" +msgstr "помилка команди \"%s\"" + +#: libpq/be-secure-common.c:141 +#, c-format +msgid "could not access private key file \"%s\": %m" +msgstr "не вдалося отримати доступ до файлу приватного ключа \"%s\": %m" + +#: libpq/be-secure-common.c:150 +#, c-format +msgid "private key file \"%s\" is not a regular file" +msgstr "файл приватного ключа \"%s\" не є звичайним" + +#: libpq/be-secure-common.c:165 +#, c-format +msgid "private key file \"%s\" must be owned by the database user or root" +msgstr "файл приватного ключа \"%s\" повинен належати користувачу бази даних або кореня" + +#: libpq/be-secure-common.c:188 +#, c-format +msgid "private key file \"%s\" has group or world access" +msgstr "до файлу приватного ключа \"%s\" мають доступ група або всі" + +#: libpq/be-secure-common.c:190 +#, c-format +msgid "File must have permissions u=rw (0600) or less if owned by the database user, or permissions u=rw,g=r (0640) or less if owned by root." +msgstr "Файл повинен мати дозволи u=rw (0600) або менше, якщо він належить користувачу бази даних, або u=rw,g=r (0640) або менше, якщо він належить кореню." + +#: libpq/be-secure-gssapi.c:195 +msgid "GSSAPI wrap error" +msgstr "помилка при згортанні GSSAPI" + +#: libpq/be-secure-gssapi.c:199 +#, c-format +msgid "outgoing GSSAPI message would not use confidentiality" +msgstr "вихідне повідомлення GSSAPI не буде використовувати конфіденційність" + +#: libpq/be-secure-gssapi.c:203 libpq/be-secure-gssapi.c:574 +#, c-format +msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" +msgstr "сервер намагався надіслати переповнений пакет GSSAPI (%zu > %zu)" + +#: libpq/be-secure-gssapi.c:330 +#, c-format +msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" +msgstr "переповнений пакет GSSAPI, надісланий клієнтом (%zu > %zu)" + +#: libpq/be-secure-gssapi.c:364 +msgid "GSSAPI unwrap error" +msgstr "помилка при розгортанні GSSAPI" + +#: libpq/be-secure-gssapi.c:369 +#, c-format +msgid "incoming GSSAPI message did not use confidentiality" +msgstr "вхідне повідомлення GSSAPI не використовувало конфіденційність" + +#: libpq/be-secure-gssapi.c:525 +#, c-format +msgid "oversize GSSAPI packet sent by the client (%zu > %d)" +msgstr "переповнений пакет GSSAPI, надісланий клієнтом (%zu > %d)" + +#: libpq/be-secure-gssapi.c:547 +msgid "could not accept GSSAPI security context" +msgstr "не вдалося прийняти контекст безпеки GSSAPI" + +#: libpq/be-secure-gssapi.c:637 +msgid "GSSAPI size check error" +msgstr "помилка перевірки розміру GSSAPI" + +#: libpq/be-secure-openssl.c:112 +#, c-format +msgid "could not create SSL context: %s" +msgstr "не вдалося створити контекст SSL: %s" + +#: libpq/be-secure-openssl.c:138 +#, c-format +msgid "could not load server certificate file \"%s\": %s" +msgstr "не вдалося завантажити сертифікат серверу \"%s\": %s" + +#: libpq/be-secure-openssl.c:158 +#, c-format +msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" +msgstr "файл закритого ключа \"%s\" не можна перезавантажити, тому що це потребує парольну фразу" + +#: libpq/be-secure-openssl.c:163 +#, c-format +msgid "could not load private key file \"%s\": %s" +msgstr "не вдалося завантажити файл приватного ключа \"%s\": %s" + +#: libpq/be-secure-openssl.c:172 +#, c-format +msgid "check of private key failed: %s" +msgstr "помилка під час перевірки приватного ключа: %s" + +#: libpq/be-secure-openssl.c:184 libpq/be-secure-openssl.c:206 +#, c-format +msgid "\"%s\" setting \"%s\" not supported by this build" +msgstr "\"%s\" налаштування \"%s\" не підтримується цією збіркою" + +#: libpq/be-secure-openssl.c:194 +#, c-format +msgid "could not set minimum SSL protocol version" +msgstr "не вдалося встановити мінімальну версію протоколу SSL" + +#: libpq/be-secure-openssl.c:216 +#, c-format +msgid "could not set maximum SSL protocol version" +msgstr "не вдалося встановити максимальну версію протоколу SSL" + +#: libpq/be-secure-openssl.c:232 +#, c-format +msgid "could not set SSL protocol version range" +msgstr "не вдалося встановити діапазон версій протоколу SSL" + +#: libpq/be-secure-openssl.c:233 +#, c-format +msgid "\"%s\" cannot be higher than \"%s\"" +msgstr "\"%s\" не може бути більше, ніж \"%s\"" + +#: libpq/be-secure-openssl.c:257 +#, c-format +msgid "could not set the cipher list (no valid ciphers available)" +msgstr "не вдалося встановити список шифрів (немає дійсних шифрів)" + +#: libpq/be-secure-openssl.c:275 +#, c-format +msgid "could not load root certificate file \"%s\": %s" +msgstr "не вдалося завантажити файл кореневого сертифікату \"%s\": %s" + +#: libpq/be-secure-openssl.c:302 +#, c-format +msgid "could not load SSL certificate revocation list file \"%s\": %s" +msgstr "не вдалося завантажити файл зі списком відкликаних сертифікатів SSL \"%s\": %s" + +#: libpq/be-secure-openssl.c:378 +#, c-format +msgid "could not initialize SSL connection: SSL context not set up" +msgstr "не вдалося ініціалізувати SSL-підключення: контекст SSL не встановлений" + +#: libpq/be-secure-openssl.c:386 +#, c-format +msgid "could not initialize SSL connection: %s" +msgstr "не вдалося ініціалізувати SSL-підключення: %s" + +#: libpq/be-secure-openssl.c:394 +#, c-format +msgid "could not set SSL socket: %s" +msgstr "не вдалося встановити SSL-сокет: %s" + +#: libpq/be-secure-openssl.c:449 +#, c-format +msgid "could not accept SSL connection: %m" +msgstr "не вдалося прийняти SSL-підключення: %m" + +#: libpq/be-secure-openssl.c:453 libpq/be-secure-openssl.c:506 +#, c-format +msgid "could not accept SSL connection: EOF detected" +msgstr "не вдалося прийняти SSL-підключення: виявлений EOF" + +#: libpq/be-secure-openssl.c:492 +#, c-format +msgid "could not accept SSL connection: %s" +msgstr "не вдалося отримати підключення SSL: %s" + +#: libpq/be-secure-openssl.c:495 +#, c-format +msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." +msgstr "Це може вказувати, що клієнт не підтримує жодної версії протоколу SSL між %s і %s." + +#: libpq/be-secure-openssl.c:511 libpq/be-secure-openssl.c:642 +#: libpq/be-secure-openssl.c:706 +#, c-format +msgid "unrecognized SSL error code: %d" +msgstr "нерозпізнаний код помилки: %d" + +#: libpq/be-secure-openssl.c:553 +#, c-format +msgid "SSL certificate's common name contains embedded null" +msgstr "Спільне ім'я SSL-сертифікату містить нульовий байт" + +#: libpq/be-secure-openssl.c:631 libpq/be-secure-openssl.c:690 +#, c-format +msgid "SSL error: %s" +msgstr "Помилка SSL: %s" + +#: libpq/be-secure-openssl.c:871 +#, c-format +msgid "could not open DH parameters file \"%s\": %m" +msgstr "не вдалося відкрити файл параметрів DH \"%s\": %m" + +#: libpq/be-secure-openssl.c:883 +#, c-format +msgid "could not load DH parameters file: %s" +msgstr "не вдалося завантажити файл параметрів DH: %s" + +#: libpq/be-secure-openssl.c:893 +#, c-format +msgid "invalid DH parameters: %s" +msgstr "неприпустимі параметри DH: %s" + +#: libpq/be-secure-openssl.c:901 +#, c-format +msgid "invalid DH parameters: p is not prime" +msgstr "неприпустимі параметри DH: р - не штрих" + +#: libpq/be-secure-openssl.c:909 +#, c-format +msgid "invalid DH parameters: neither suitable generator or safe prime" +msgstr "неприпустимі параметри DH: немає придатного генератора або безпечного штриха" + +#: libpq/be-secure-openssl.c:1065 +#, c-format +msgid "DH: could not load DH parameters" +msgstr "DH: не вдалося завантажити параметри DH" + +#: libpq/be-secure-openssl.c:1073 +#, c-format +msgid "DH: could not set DH parameters: %s" +msgstr "DH: не вдалося встановити параметри DH: %s" + +#: libpq/be-secure-openssl.c:1100 +#, c-format +msgid "ECDH: unrecognized curve name: %s" +msgstr "ECDH: нерозпізнане ім'я кривої: %s" + +#: libpq/be-secure-openssl.c:1109 +#, c-format +msgid "ECDH: could not create key" +msgstr "ECDH: не вдалося створити ключ" + +#: libpq/be-secure-openssl.c:1137 +msgid "no SSL error reported" +msgstr "немає повідомлення про помилку SSL" + +#: libpq/be-secure-openssl.c:1141 +#, c-format +msgid "SSL error code %lu" +msgstr "Код помилки SSL %lu" + +#: libpq/be-secure.c:122 +#, c-format +msgid "SSL connection from \"%s\"" +msgstr "SSL-підключення від \"%s\"" + +#: libpq/be-secure.c:207 libpq/be-secure.c:303 +#, c-format +msgid "terminating connection due to unexpected postmaster exit" +msgstr "завершення підключення через неочікуване закриття головного процесу" + +#: libpq/crypt.c:49 +#, c-format +msgid "Role \"%s\" does not exist." +msgstr "Роль \"%s\" не існує." + +#: libpq/crypt.c:59 +#, c-format +msgid "User \"%s\" has no password assigned." +msgstr "Користувач \"%s\" не має пароля." + +#: libpq/crypt.c:77 +#, c-format +msgid "User \"%s\" has an expired password." +msgstr "Користувач \"%s\" має прострочений пароль." + +#: libpq/crypt.c:179 +#, c-format +msgid "User \"%s\" has a password that cannot be used with MD5 authentication." +msgstr "Користувач \"%s\" має пароль, який не можна використовувати з автентифікацією MD5." + +#: libpq/crypt.c:203 libpq/crypt.c:244 libpq/crypt.c:268 +#, c-format +msgid "Password does not match for user \"%s\"." +msgstr "Пароль не підходить для користувача \"%s\"." + +#: libpq/crypt.c:287 +#, c-format +msgid "Password of user \"%s\" is in unrecognized format." +msgstr "Пароль користувача \"%s\" представлений в нерозпізнаному форматі." + +#: libpq/hba.c:235 +#, c-format +msgid "authentication file token too long, skipping: \"%s\"" +msgstr "занадто довгий маркер у файлі автентифікації, пропускається: \"%s\"" + +#: libpq/hba.c:407 +#, c-format +msgid "could not open secondary authentication file \"@%s\" as \"%s\": %m" +msgstr "не вдалося відкрити додатковий файл автентифікації \"@%s\" as \"%s\": %m" + +#: libpq/hba.c:509 +#, c-format +msgid "authentication file line too long" +msgstr "занадто довгий рядок у файлі автентифікації" + +#: libpq/hba.c:510 libpq/hba.c:867 libpq/hba.c:887 libpq/hba.c:925 +#: libpq/hba.c:975 libpq/hba.c:989 libpq/hba.c:1013 libpq/hba.c:1022 +#: libpq/hba.c:1035 libpq/hba.c:1056 libpq/hba.c:1069 libpq/hba.c:1089 +#: libpq/hba.c:1111 libpq/hba.c:1123 libpq/hba.c:1179 libpq/hba.c:1199 +#: libpq/hba.c:1213 libpq/hba.c:1232 libpq/hba.c:1243 libpq/hba.c:1258 +#: libpq/hba.c:1276 libpq/hba.c:1292 libpq/hba.c:1304 libpq/hba.c:1341 +#: libpq/hba.c:1382 libpq/hba.c:1395 libpq/hba.c:1417 libpq/hba.c:1430 +#: libpq/hba.c:1442 libpq/hba.c:1460 libpq/hba.c:1510 libpq/hba.c:1554 +#: libpq/hba.c:1565 libpq/hba.c:1581 libpq/hba.c:1598 libpq/hba.c:1608 +#: libpq/hba.c:1666 libpq/hba.c:1704 libpq/hba.c:1726 libpq/hba.c:1738 +#: libpq/hba.c:1825 libpq/hba.c:1843 libpq/hba.c:1937 libpq/hba.c:1956 +#: libpq/hba.c:1985 libpq/hba.c:1998 libpq/hba.c:2021 libpq/hba.c:2043 +#: libpq/hba.c:2057 tsearch/ts_locale.c:190 +#, c-format +msgid "line %d of configuration file \"%s\"" +msgstr "рядок %d файла конфігурації \"%s\"" + +#. translator: the second %s is a list of auth methods +#: libpq/hba.c:865 +#, c-format +msgid "authentication option \"%s\" is only valid for authentication methods %s" +msgstr "параметр автентифікації \"%s\" припустимий лише для способів автентифікації %s" + +#: libpq/hba.c:885 +#, c-format +msgid "authentication method \"%s\" requires argument \"%s\" to be set" +msgstr "спосіб автентифікації \"%s\" потребує аргумент \"%s\" для встановлення" + +#: libpq/hba.c:913 +#, c-format +msgid "missing entry in file \"%s\" at end of line %d" +msgstr "відсутнє введення в файлі \"%s\" в кінці рядка %d" + +#: libpq/hba.c:924 +#, c-format +msgid "multiple values in ident field" +msgstr "кілька значень в полі ident" + +#: libpq/hba.c:973 +#, c-format +msgid "multiple values specified for connection type" +msgstr "кілька значень вказано для типу підключення" + +#: libpq/hba.c:974 +#, c-format +msgid "Specify exactly one connection type per line." +msgstr "Вкажіть в рядку єдиний тип підключення." + +#: libpq/hba.c:988 +#, c-format +msgid "local connections are not supported by this build" +msgstr "локальні підключення не підтримуються цією збіркою" + +#: libpq/hba.c:1011 +#, c-format +msgid "hostssl record cannot match because SSL is disabled" +msgstr "запис hostssl не збігається, тому що протокол SSL вимкнутий" + +#: libpq/hba.c:1012 +#, c-format +msgid "Set ssl = on in postgresql.conf." +msgstr "Встановіть ssl = on в postgresql.conf." + +#: libpq/hba.c:1020 +#, c-format +msgid "hostssl record cannot match because SSL is not supported by this build" +msgstr "запис hostssl не збігається, тому що SSL не підтримується цією збіркою" + +#: libpq/hba.c:1021 +#, c-format +msgid "Compile with --with-openssl to use SSL connections." +msgstr "Щоб використовувати SSL-підключення, скомпілюйте з --with-openssl." + +#: libpq/hba.c:1033 +#, c-format +msgid "hostgssenc record cannot match because GSSAPI is not supported by this build" +msgstr "запис hostgssenc не може збігатись, оскільки GSSAPI не підтримується цією збіркою" + +#: libpq/hba.c:1034 +#, c-format +msgid "Compile with --with-gssapi to use GSSAPI connections." +msgstr "Скомпілюйте з --with-gssapi, щоб використовувати GSSAPI з'єднання." + +#: libpq/hba.c:1054 +#, c-format +msgid "invalid connection type \"%s\"" +msgstr "неприпустимий тип підключення \"%s\"" + +#: libpq/hba.c:1068 +#, c-format +msgid "end-of-line before database specification" +msgstr "кінець рядка перед визначенням бази даних" + +#: libpq/hba.c:1088 +#, c-format +msgid "end-of-line before role specification" +msgstr "кінець рядка перед визначенням ролі" + +#: libpq/hba.c:1110 +#, c-format +msgid "end-of-line before IP address specification" +msgstr "кінець рядка перед визначенням IP-адрес" + +#: libpq/hba.c:1121 +#, c-format +msgid "multiple values specified for host address" +msgstr "для адреси хоста вказано кілька значень" + +#: libpq/hba.c:1122 +#, c-format +msgid "Specify one address range per line." +msgstr "Вкажіть один діапазон адреси в рядку." + +#: libpq/hba.c:1177 +#, c-format +msgid "invalid IP address \"%s\": %s" +msgstr "неприпустима IP адреса \"%s\": %s" + +#: libpq/hba.c:1197 +#, c-format +msgid "specifying both host name and CIDR mask is invalid: \"%s\"" +msgstr "визначити одночасно ім’я хоста і маску CIDR не можна: \"%s\"" + +#: libpq/hba.c:1211 +#, c-format +msgid "invalid CIDR mask in address \"%s\"" +msgstr "неприпустима маска CIDR в адресі \"%s\"" + +#: libpq/hba.c:1230 +#, c-format +msgid "end-of-line before netmask specification" +msgstr "кінець рядка перед визначенням маски мережі" + +#: libpq/hba.c:1231 +#, c-format +msgid "Specify an address range in CIDR notation, or provide a separate netmask." +msgstr "Вкажіть діапазон адрес в нотації CIDR або надайте окрему маску мережі." + +#: libpq/hba.c:1242 +#, c-format +msgid "multiple values specified for netmask" +msgstr "для маски мережі вказано декілька значень" + +#: libpq/hba.c:1256 +#, c-format +msgid "invalid IP mask \"%s\": %s" +msgstr "неприпустима маска IP \"%s\": %s" + +#: libpq/hba.c:1275 +#, c-format +msgid "IP address and mask do not match" +msgstr "IP-адреса і маска не збігаються" + +#: libpq/hba.c:1291 +#, c-format +msgid "end-of-line before authentication method" +msgstr "кінець рядка перед способом автентифікації" + +#: libpq/hba.c:1302 +#, c-format +msgid "multiple values specified for authentication type" +msgstr "для типу автентифікації вказано декілька значень" + +#: libpq/hba.c:1303 +#, c-format +msgid "Specify exactly one authentication type per line." +msgstr "Вкажіть у рядку єдиний тип автентифікації." + +#: libpq/hba.c:1380 +#, c-format +msgid "invalid authentication method \"%s\"" +msgstr "неприпустимий спосіб автентифікації \"%s\"" + +#: libpq/hba.c:1393 +#, c-format +msgid "invalid authentication method \"%s\": not supported by this build" +msgstr "неприпустимий спосіб автентифікації \"%s\": не підтримується цією збіркою" + +#: libpq/hba.c:1416 +#, c-format +msgid "gssapi authentication is not supported on local sockets" +msgstr "автентифікація gssapi для локальних сокетів не підтримується" + +#: libpq/hba.c:1429 +#, c-format +msgid "GSSAPI encryption only supports gss, trust, or reject authentication" +msgstr "Шифрування GSSAPI підтримує лише gss, trust, або відхилення автентифікації" + +#: libpq/hba.c:1441 +#, c-format +msgid "peer authentication is only supported on local sockets" +msgstr "автентифікація peer підтримується лише для локальних сокетів" + +#: libpq/hba.c:1459 +#, c-format +msgid "cert authentication is only supported on hostssl connections" +msgstr "автентифікація cert підтримується лише для підключень hostssl" + +#: libpq/hba.c:1509 +#, c-format +msgid "authentication option not in name=value format: %s" +msgstr "параметр автентифікації вказаний не в форматі ім’я=значення: %s" + +#: libpq/hba.c:1553 +#, c-format +msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" +msgstr "не можна використовувати ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter або ldapurl разом з ldapprefix" + +#: libpq/hba.c:1564 +#, c-format +msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" +msgstr "спосіб автентифікації \"ldap\" потребує встановити аргумент \"ldapbasedn\", \"ldapprefix\" або \"ldapsuffix\"" + +#: libpq/hba.c:1580 +#, c-format +msgid "cannot use ldapsearchattribute together with ldapsearchfilter" +msgstr "не можна використовувати ldapsearchattribute разом з ldapsearchfilter" + +#: libpq/hba.c:1597 +#, c-format +msgid "list of RADIUS servers cannot be empty" +msgstr "список серверів RADIUS не може бути порожнім" + +#: libpq/hba.c:1607 +#, c-format +msgid "list of RADIUS secrets cannot be empty" +msgstr "список секретів RADIUS не може бути порожнім" + +#: libpq/hba.c:1660 +#, c-format +msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" +msgstr "кількість %s (%d) повинна дорівнювати 1 або кількості %s (%d)" + +#: libpq/hba.c:1694 +msgid "ident, peer, gssapi, sspi, and cert" +msgstr "ident, peer, gssapi, sspi і cert" + +#: libpq/hba.c:1703 +#, c-format +msgid "clientcert can only be configured for \"hostssl\" rows" +msgstr "clientcert може бути налаштовано лише для рядків \"hostssl\"" + +#: libpq/hba.c:1725 +#, c-format +msgid "clientcert cannot be set to \"no-verify\" when using \"cert\" authentication" +msgstr "clientcert не може бути встановлений на \"no-verify\", коли використовується автентифікація \"cert\"" + +#: libpq/hba.c:1737 +#, c-format +msgid "invalid value for clientcert: \"%s\"" +msgstr "неприпустиме значення для clientcert: \"%s\"" + +#: libpq/hba.c:1771 +#, c-format +msgid "could not parse LDAP URL \"%s\": %s" +msgstr "не вдалося аналізувати URL-адресу LDAP \"%s\": %s" + +#: libpq/hba.c:1782 +#, c-format +msgid "unsupported LDAP URL scheme: %s" +msgstr "непідтримувана схема в URL-адресі LDAP: %s" + +#: libpq/hba.c:1806 +#, c-format +msgid "LDAP URLs not supported on this platform" +msgstr "URL-адреса LDAP не підтримується на цій платформі" + +#: libpq/hba.c:1824 +#, c-format +msgid "invalid ldapscheme value: \"%s\"" +msgstr "недійсне значення ldapscheme: \"%s\"" + +#: libpq/hba.c:1842 +#, c-format +msgid "invalid LDAP port number: \"%s\"" +msgstr "недійсний номер порту LDAP: \"%s\"" + +#: libpq/hba.c:1888 libpq/hba.c:1895 +msgid "gssapi and sspi" +msgstr "gssapi і sspi" + +#: libpq/hba.c:1904 libpq/hba.c:1913 +msgid "sspi" +msgstr "sspi" + +#: libpq/hba.c:1935 +#, c-format +msgid "could not parse RADIUS server list \"%s\"" +msgstr "не вдалося проаналізувати список серверів RADIUS \"%s\"" + +#: libpq/hba.c:1983 +#, c-format +msgid "could not parse RADIUS port list \"%s\"" +msgstr "не вдалося проаналізувати список портів RADIUS \"%s\"" + +#: libpq/hba.c:1997 +#, c-format +msgid "invalid RADIUS port number: \"%s\"" +msgstr "недійсний номер порту RADIUS: \"%s\"" + +#: libpq/hba.c:2019 +#, c-format +msgid "could not parse RADIUS secret list \"%s\"" +msgstr "не вдалося проаналізувати список секретів RADIUS \"%s\"" + +#: libpq/hba.c:2041 +#, c-format +msgid "could not parse RADIUS identifiers list \"%s\"" +msgstr "не вдалося проаналізувати список ідентифікаторів RADIUS \"%s\"" + +#: libpq/hba.c:2055 +#, c-format +msgid "unrecognized authentication option name: \"%s\"" +msgstr "нерозпізнане ім’я параметра автентифікації: \"%s\"" + +#: libpq/hba.c:2199 libpq/hba.c:2613 guc-file.l:631 +#, c-format +msgid "could not open configuration file \"%s\": %m" +msgstr "не вдалося відкрити файл конфігурації \"%s\": %m" + +#: libpq/hba.c:2250 +#, c-format +msgid "configuration file \"%s\" contains no entries" +msgstr "файл конфігурації \"%s\" не містить елементів" + +#: libpq/hba.c:2768 +#, c-format +msgid "invalid regular expression \"%s\": %s" +msgstr "недійсний регулярний вираз \"%s\": %s" + +#: libpq/hba.c:2828 +#, c-format +msgid "regular expression match for \"%s\" failed: %s" +msgstr "помилка при пошуку за регулярним виразом для \"%s\": %s" + +#: libpq/hba.c:2847 +#, c-format +msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" +msgstr "регулярний вираз \"%s не містить підвиразів, необхідних для зворотного посилання в \"%s\"" + +#: libpq/hba.c:2943 +#, c-format +msgid "provided user name (%s) and authenticated user name (%s) do not match" +msgstr "вказане ім'я користувача (%s) і автентифіковане ім'я користувача (%s) не збігаються" + +#: libpq/hba.c:2963 +#, c-format +msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" +msgstr "немає відповідності у файлі зіставлень \"%s\" для користувача \"%s\" автентифікованого як \"%s\"" + +#: libpq/hba.c:2996 +#, c-format +msgid "could not open usermap file \"%s\": %m" +msgstr "не вдалося відкрити файл usermap: \"%s\": %m" + +#: libpq/pqcomm.c:218 +#, c-format +msgid "could not set socket to nonblocking mode: %m" +msgstr "не вдалося перевести сокет у неблокуючий режим: %m" + +#: libpq/pqcomm.c:372 +#, c-format +msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" +msgstr "Довжина шляху Unix-сокета \"%s\" перевищує ліміт (максимум %d байт)" + +#: libpq/pqcomm.c:393 +#, c-format +msgid "could not translate host name \"%s\", service \"%s\" to address: %s" +msgstr "не вдалось перекласти ім'я хоста \"%s\", служби \"%s\" в адресу: %s" + +#: libpq/pqcomm.c:397 +#, c-format +msgid "could not translate service \"%s\" to address: %s" +msgstr "не вдалось перекласти службу \"%s\" в адресу: %s" + +#: libpq/pqcomm.c:424 +#, c-format +msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" +msgstr "не вдалось прив'язатись до всіх запитаних адрес: MAXLISTEN (%d) перевищено" + +#: libpq/pqcomm.c:433 +msgid "IPv4" +msgstr "IPv4" + +#: libpq/pqcomm.c:437 +msgid "IPv6" +msgstr "IPv6" + +#: libpq/pqcomm.c:442 +msgid "Unix" +msgstr "Unix" + +#: libpq/pqcomm.c:447 +#, c-format +msgid "unrecognized address family %d" +msgstr "нерозпізнане сімейство адресів %d" + +#. translator: first %s is IPv4, IPv6, or Unix +#: libpq/pqcomm.c:473 +#, c-format +msgid "could not create %s socket for address \"%s\": %m" +msgstr "не вдалось створити сокет %s для адреси \"%s\": %m" + +#. translator: first %s is IPv4, IPv6, or Unix +#: libpq/pqcomm.c:499 +#, c-format +msgid "setsockopt(SO_REUSEADDR) failed for %s address \"%s\": %m" +msgstr "помилка в setsockopt(SO_REUSEADDR) для адреси %s \"%s\": %m" + +#. translator: first %s is IPv4, IPv6, or Unix +#: libpq/pqcomm.c:516 +#, c-format +msgid "setsockopt(IPV6_V6ONLY) failed for %s address \"%s\": %m" +msgstr "помилка в setsockopt(IPV6_V6ONLY) для адреси %s \"%s\": %m" + +#. translator: first %s is IPv4, IPv6, or Unix +#: libpq/pqcomm.c:536 +#, c-format +msgid "could not bind %s address \"%s\": %m" +msgstr "не вдалось прив'язатись до адреси %s \"%s\": %m" + +#: libpq/pqcomm.c:539 +#, c-format +msgid "Is another postmaster already running on port %d? If not, remove socket file \"%s\" and retry." +msgstr "Можливо порт %d вже зайнятий іншим процесом postmaster? Якщо ні, видаліть файл сокету \"%s\" і спробуйте знову." + +#: libpq/pqcomm.c:542 +#, c-format +msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." +msgstr "Можливо порт %d вже зайнятий іншим процесом postmaster? Якщо ні, почекайте пару секунд і спробуйте знову." + +#. translator: first %s is IPv4, IPv6, or Unix +#: libpq/pqcomm.c:575 +#, c-format +msgid "could not listen on %s address \"%s\": %m" +msgstr "не вдалось прослухати на адресі %s \"%s\": %m" + +#: libpq/pqcomm.c:584 +#, c-format +msgid "listening on Unix socket \"%s\"" +msgstr "прослуховувати UNIX сокет \"%s\"" + +#. translator: first %s is IPv4 or IPv6 +#: libpq/pqcomm.c:590 +#, c-format +msgid "listening on %s address \"%s\", port %d" +msgstr "прослуховувати %s адресу \"%s\", порт %d" + +#: libpq/pqcomm.c:673 +#, c-format +msgid "group \"%s\" does not exist" +msgstr "група \"%s\" не існує" + +#: libpq/pqcomm.c:683 +#, c-format +msgid "could not set group of file \"%s\": %m" +msgstr "не вдалось встановити групу для файла \"%s\": %m" + +#: libpq/pqcomm.c:694 +#, c-format +msgid "could not set permissions of file \"%s\": %m" +msgstr "не вдалось встановити дозволи для файла \"%s\": %m" + +#: libpq/pqcomm.c:724 +#, c-format +msgid "could not accept new connection: %m" +msgstr "не вдалось прийняти нове підключення: %m" + +#: libpq/pqcomm.c:914 +#, c-format +msgid "there is no client connection" +msgstr "немає клієнтського підключення" + +#: libpq/pqcomm.c:965 libpq/pqcomm.c:1061 +#, c-format +msgid "could not receive data from client: %m" +msgstr "не вдалось отримати дані від клієнта: %m" + +#: libpq/pqcomm.c:1206 tcop/postgres.c:4142 +#, c-format +msgid "terminating connection because protocol synchronization was lost" +msgstr "завершення підключення через втрату синхронізації протоколу" + +#: libpq/pqcomm.c:1272 +#, c-format +msgid "unexpected EOF within message length word" +msgstr "неочікуваний EOF в слові довжини повідомлення" + +#: libpq/pqcomm.c:1283 +#, c-format +msgid "invalid message length" +msgstr "неприпустима довжина повідомлення" + +#: libpq/pqcomm.c:1305 libpq/pqcomm.c:1318 +#, c-format +msgid "incomplete message from client" +msgstr "неповне повідомлення від клієнта" + +#: libpq/pqcomm.c:1451 +#, c-format +msgid "could not send data to client: %m" +msgstr "не вдалось надіслати дані клієнту: %m" + +#: libpq/pqformat.c:406 +#, c-format +msgid "no data left in message" +msgstr "у повідомлення не залишилось даних" + +#: libpq/pqformat.c:517 libpq/pqformat.c:535 libpq/pqformat.c:556 +#: utils/adt/arrayfuncs.c:1471 utils/adt/rowtypes.c:567 +#, c-format +msgid "insufficient data left in message" +msgstr "недостатьно даних залишилось в повідомленні" + +#: libpq/pqformat.c:597 libpq/pqformat.c:626 +#, c-format +msgid "invalid string in message" +msgstr "неприпустимий рядок в повідомленні" + +#: libpq/pqformat.c:642 +#, c-format +msgid "invalid message format" +msgstr "неприпустимий формат повідомлення" + +#: main/main.c:246 +#, c-format +msgid "%s: WSAStartup failed: %d\n" +msgstr "%s: помилка WSAStartup: %d\n" + +#: main/main.c:310 +#, c-format +msgid "%s is the PostgreSQL server.\n\n" +msgstr "%s - сервер PostgreSQL.\n\n" + +#: main/main.c:311 +#, c-format +msgid "Usage:\n" +" %s [OPTION]...\n\n" +msgstr "Використання:\n" +" %s [OPTION]...\n\n" + +#: main/main.c:312 +#, c-format +msgid "Options:\n" +msgstr "Параметри:\n" + +#: main/main.c:313 +#, c-format +msgid " -B NBUFFERS number of shared buffers\n" +msgstr " -B NBUFFERS число спільних буферів\n" + +#: main/main.c:314 +#, c-format +msgid " -c NAME=VALUE set run-time parameter\n" +msgstr " -c NAME=VALUE встановити параметр під час виконання\n" + +#: main/main.c:315 +#, c-format +msgid " -C NAME print value of run-time parameter, then exit\n" +msgstr " -C NAME вивести значення параметру під час виконання і вийти\n" + +#: main/main.c:316 +#, c-format +msgid " -d 1-5 debugging level\n" +msgstr " -d 1-5 рівень налагодження\n" + +#: main/main.c:317 +#, c-format +msgid " -D DATADIR database directory\n" +msgstr " -D DATADIR каталог бази даних\n" + +#: main/main.c:318 +#, c-format +msgid " -e use European date input format (DMY)\n" +msgstr " -e використати європейський формат дат (DMY)\n" + +#: main/main.c:319 +#, c-format +msgid " -F turn fsync off\n" +msgstr " -F вимкнути fsync\n" + +#: main/main.c:320 +#, c-format +msgid " -h HOSTNAME host name or IP address to listen on\n" +msgstr " -h HOSTNAME ім’я хоста або IP-адреса для прослуховування\n" + +#: main/main.c:321 +#, c-format +msgid " -i enable TCP/IP connections\n" +msgstr " -i активувати підключення TCP/IP\n" + +#: main/main.c:322 +#, c-format +msgid " -k DIRECTORY Unix-domain socket location\n" +msgstr " -k DIRECTORY розташування Unix-сокетів\n" + +#: main/main.c:324 +#, c-format +msgid " -l enable SSL connections\n" +msgstr " -l активувати SSL-підключення\n" + +#: main/main.c:326 +#, c-format +msgid " -N MAX-CONNECT maximum number of allowed connections\n" +msgstr " -N MAX-CONNECT максимальне число дозволених підключень\n" + +#: main/main.c:327 +#, c-format +msgid " -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n" +msgstr " -o OPTIONS передати \"ПАРАМЕТРИ\" для кожного серверного процесу (застаріле)\n" + +#: main/main.c:328 +#, c-format +msgid " -p PORT port number to listen on\n" +msgstr " -p PORT номер порту для прослуховування\n" + +#: main/main.c:329 +#, c-format +msgid " -s show statistics after each query\n" +msgstr " -s відображувати статистику після кожного запиту\n" + +#: main/main.c:330 +#, c-format +msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" +msgstr " -S WORK-MEM вказати обсяг пам'яті для сортування (в КБ)\n" + +#: main/main.c:331 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію і вийти\n" + +#: main/main.c:332 +#, c-format +msgid " --NAME=VALUE set run-time parameter\n" +msgstr " --NAME=VALUE встановити параметр під час виконання\n" + +#: main/main.c:333 +#, c-format +msgid " --describe-config describe configuration parameters, then exit\n" +msgstr " --describe-config описати параметри конфігурації і вийти\n" + +#: main/main.c:334 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати довідку і вийти\n" + +#: main/main.c:336 +#, c-format +msgid "\n" +"Developer options:\n" +msgstr "\n" +"Параметри для розробників:\n" + +#: main/main.c:337 +#, c-format +msgid " -f s|i|n|m|h forbid use of some plan types\n" +msgstr " -f s|i|n|m|h заборонити використання деяких типів плану\n" + +#: main/main.c:338 +#, c-format +msgid " -n do not reinitialize shared memory after abnormal exit\n" +msgstr " -n не повторювати ініціалізацію спільної пам'яті після ненормального виходу\n" + +#: main/main.c:339 +#, c-format +msgid " -O allow system table structure changes\n" +msgstr " -O дозволити змінювати структуру системних таблиць\n" + +#: main/main.c:340 +#, c-format +msgid " -P disable system indexes\n" +msgstr " -P вимкнути системні індекси\n" + +#: main/main.c:341 +#, c-format +msgid " -t pa|pl|ex show timings after each query\n" +msgstr " -t pa|pl|ex показувати час після кожного запиту\n" + +#: main/main.c:342 +#, c-format +msgid " -T send SIGSTOP to all backend processes if one dies\n" +msgstr " -T надіслати SIGSTOP усім внутрішнім процесам, якщо один вимкнеться\n" + +#: main/main.c:343 +#, c-format +msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" +msgstr " -W NUM очікувати NUM секунд, щоб дозволити підключення від налагоджувача\n" + +#: main/main.c:345 +#, c-format +msgid "\n" +"Options for single-user mode:\n" +msgstr "\n" +"Параметри для однокористувацького режиму:\n" + +#: main/main.c:346 +#, c-format +msgid " --single selects single-user mode (must be first argument)\n" +msgstr " --single установка однокористувацького режиму (цей аргумент повинен бути першим)\n" + +#: main/main.c:347 +#, c-format +msgid " DBNAME database name (defaults to user name)\n" +msgstr " DBNAME ім’я бази даних (за замовчуванням - ім'я користувача)\n" + +#: main/main.c:348 +#, c-format +msgid " -d 0-5 override debugging level\n" +msgstr " -d 0-5 змінити рівень налагодження\n" + +#: main/main.c:349 +#, c-format +msgid " -E echo statement before execution\n" +msgstr " -E інструкція відлуння перед виконанням\n" + +#: main/main.c:350 +#, c-format +msgid " -j do not use newline as interactive query delimiter\n" +msgstr " -j не використовувати новий рядок як роздільник інтерактивних запитів\n" + +#: main/main.c:351 main/main.c:356 +#, c-format +msgid " -r FILENAME send stdout and stderr to given file\n" +msgstr " -r FILENAME надіслати stdout і stderr до вказаного файлу\n" + +#: main/main.c:353 +#, c-format +msgid "\n" +"Options for bootstrapping mode:\n" +msgstr "\n" +"Параметри для режиму початкового завантаження:\n" + +#: main/main.c:354 +#, c-format +msgid " --boot selects bootstrapping mode (must be first argument)\n" +msgstr " --boot установка режиму початкового завантаження (цей аргумент повинен бути першим)\n" + +#: main/main.c:355 +#, c-format +msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" +msgstr " DBNAME ім'я бази даних (обов'язковий аргумент у режимі початкового завантаження)\n" + +#: main/main.c:357 +#, c-format +msgid " -x NUM internal use\n" +msgstr " -x NUM внутрішнє використання\n" + +#: main/main.c:359 +#, c-format +msgid "\n" +"Please read the documentation for the complete list of run-time\n" +"configuration settings and how to set them on the command line or in\n" +"the configuration file.\n\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Будь-ласка прочитайте інструкцію для повного списку параметрів конфігурації виконання і їх встановлення у командний рядок або в файл конфігурації.\n\n" +"Про помилки повідомляйте <%s>.\n" + +#: main/main.c:363 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: main/main.c:374 +#, c-format +msgid "\"root\" execution of the PostgreSQL server is not permitted.\n" +"The server must be started under an unprivileged user ID to prevent\n" +"possible system security compromise. See the documentation for\n" +"more information on how to properly start the server.\n" +msgstr "Запускати сервер PostgreSQL під іменем \"root\" не дозволено.\n" +"Для запобігання компрометації системи безпеки сервер повинен запускати непривілейований користувач. Дивіться документацію, щоб дізнатися більше про те, як правильно запустити сервер.\n" + +#: main/main.c:391 +#, c-format +msgid "%s: real and effective user IDs must match\n" +msgstr "%s: дійсний і ефективний ID користувача повинні збігатися\n" + +#: main/main.c:398 +#, c-format +msgid "Execution of PostgreSQL by a user with administrative permissions is not\n" +"permitted.\n" +"The server must be started under an unprivileged user ID to prevent\n" +"possible system security compromises. See the documentation for\n" +"more information on how to properly start the server.\n" +msgstr "Запускати PostgreSQL під іменем користувача з правами адміністратора не дозволено.\n" +"Для запобігання можливої компрометації системи безпеки сервер повинен запускати непривілейований користувач. Дивіться документацію, щоб дізнатися більше про те, як правильно запустити сервер.\n" + +#: nodes/extensible.c:66 +#, c-format +msgid "extensible node type \"%s\" already exists" +msgstr "розширений тип вузла \"%s\" вже існує" + +#: nodes/extensible.c:114 +#, c-format +msgid "ExtensibleNodeMethods \"%s\" was not registered" +msgstr "Методи розширеного вузла \"%s\" не зареєстровані" + +#: nodes/nodeFuncs.c:122 nodes/nodeFuncs.c:153 parser/parse_coerce.c:2208 +#: parser/parse_coerce.c:2317 parser/parse_coerce.c:2352 +#: parser/parse_expr.c:2207 parser/parse_func.c:701 parser/parse_oper.c:967 +#: utils/fmgr/funcapi.c:528 +#, c-format +msgid "could not find array type for data type %s" +msgstr "не вдалося знайти тип масиву для типу даних %s" + +#: nodes/params.c:359 +#, c-format +msgid "portal \"%s\" with parameters: %s" +msgstr "портал \"%s\" з параметрами: %s" + +#: nodes/params.c:362 +#, c-format +msgid "unnamed portal with parameters: %s" +msgstr "портал без імені з параметрами: %s" + +#: optimizer/path/joinrels.c:855 +#, c-format +msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join conditions" +msgstr "FULL JOIN підтримується лише з умовами, які допускають з'єднання злиттям або хеш-з'єднанням" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: optimizer/plan/initsplan.c:1193 +#, c-format +msgid "%s cannot be applied to the nullable side of an outer join" +msgstr "%s не можна застосовувати до нульової сторони зовнішнього з’єднання" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: optimizer/plan/planner.c:1922 parser/analyze.c:1639 parser/analyze.c:1855 +#: parser/analyze.c:2715 +#, c-format +msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" +msgstr "%s несумісно з UNION/INTERSECT/EXCEPT" + +#: optimizer/plan/planner.c:2509 optimizer/plan/planner.c:4162 +#, c-format +msgid "could not implement GROUP BY" +msgstr "не вдалося реалізувати GROUP BY" + +#: optimizer/plan/planner.c:2510 optimizer/plan/planner.c:4163 +#: optimizer/plan/planner.c:4890 optimizer/prep/prepunion.c:1045 +#, c-format +msgid "Some of the datatypes only support hashing, while others only support sorting." +msgstr "Деякі типи даних підтримують лише хешування, в той час як інші підтримують тільки сортування." + +#: optimizer/plan/planner.c:4889 +#, c-format +msgid "could not implement DISTINCT" +msgstr "не вдалося реалізувати DISTINCT" + +#: optimizer/plan/planner.c:5737 +#, c-format +msgid "could not implement window PARTITION BY" +msgstr "не вдалося реалізувати PARTITION BY для вікна" + +#: optimizer/plan/planner.c:5738 +#, c-format +msgid "Window partitioning columns must be of sortable datatypes." +msgstr "Стовпці, що розділяють вікна, повинні мати типи даних з можливістю сортування." + +#: optimizer/plan/planner.c:5742 +#, c-format +msgid "could not implement window ORDER BY" +msgstr "не вдалося реалізувати ORDER BY для вікна" + +#: optimizer/plan/planner.c:5743 +#, c-format +msgid "Window ordering columns must be of sortable datatypes." +msgstr "Стовпці, що впорядковують вікна, повинні мати типи даних з можливістю сортування." + +#: optimizer/plan/setrefs.c:451 +#, c-format +msgid "too many range table entries" +msgstr "дуже багато елементів RTE" + +#: optimizer/prep/prepunion.c:508 +#, c-format +msgid "could not implement recursive UNION" +msgstr "не вдалося реалізувати рекурсивний UNION" + +#: optimizer/prep/prepunion.c:509 +#, c-format +msgid "All column datatypes must be hashable." +msgstr "Усі стовпці повинні мати типи даних з можливістю хешування." + +#. translator: %s is UNION, INTERSECT, or EXCEPT +#: optimizer/prep/prepunion.c:1044 +#, c-format +msgid "could not implement %s" +msgstr "не вдалося реалізувати %s" + +#: optimizer/util/clauses.c:4746 +#, c-format +msgid "SQL function \"%s\" during inlining" +msgstr "Впроваджена в код SQL-функція \"%s\"" + +#: optimizer/util/plancat.c:132 +#, c-format +msgid "cannot access temporary or unlogged relations during recovery" +msgstr "отримати доступ до тимчасових або нежурнальованих відношень під час відновлення не можна" + +#: optimizer/util/plancat.c:662 +#, c-format +msgid "whole row unique index inference specifications are not supported" +msgstr "вказівки з посиланням на весь рядок для вибору унікального індексу не підтримуються" + +#: optimizer/util/plancat.c:679 +#, c-format +msgid "constraint in ON CONFLICT clause has no associated index" +msgstr "з обмеженням в реченні ON CONFLICT не пов'язаний індекс" + +#: optimizer/util/plancat.c:729 +#, c-format +msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" +msgstr "ON CONFLICT DO UPDATE не підтримується з обмеженнями-винятками" + +#: optimizer/util/plancat.c:834 +#, c-format +msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" +msgstr "немає унікального обмеження або обмеження-виключення відповідного специфікації ON CONFLICT" + +#: parser/analyze.c:705 parser/analyze.c:1401 +#, c-format +msgid "VALUES lists must all be the same length" +msgstr "Списки VALUES повинні мати однакову довжину" + +#: parser/analyze.c:904 +#, c-format +msgid "INSERT has more expressions than target columns" +msgstr "INSERT містить більше виразів, ніж цільових стовпців" + +#: parser/analyze.c:922 +#, c-format +msgid "INSERT has more target columns than expressions" +msgstr "INSERT містить більше цільових стовпців, ніж виразів" + +#: parser/analyze.c:926 +#, c-format +msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" +msgstr "Джерелом даних є вираз рядка, який містить стільки ж стовпців, скільки потребується для INSERT. Ви випадково використовували додаткові дужки?" + +#: parser/analyze.c:1210 parser/analyze.c:1612 +#, c-format +msgid "SELECT ... INTO is not allowed here" +msgstr "SELECT ... INTO не дозволяється тут" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:1542 parser/analyze.c:2894 +#, c-format +msgid "%s cannot be applied to VALUES" +msgstr "%s не можна застосовувати до VALUES" + +#: parser/analyze.c:1777 +#, c-format +msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" +msgstr "неприпустиме речення UNION/INTERSECT/EXCEPT ORDER BY" + +#: parser/analyze.c:1778 +#, c-format +msgid "Only result column names can be used, not expressions or functions." +msgstr "Дозволено використання тільки імен стовпців, але не виразів або функцій." + +#: parser/analyze.c:1779 +#, c-format +msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." +msgstr "Додайте вираз/функція до кожного SELECT, або перемістіть UNION у речення FROM." + +#: parser/analyze.c:1845 +#, c-format +msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" +msgstr "INTO дозволяється додати лише до першого SELECT в UNION/INTERSECT/EXCEPT" + +#: parser/analyze.c:1917 +#, c-format +msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" +msgstr "Учасник інструкції UNION/INTERSECT/EXCEPT не може посилатись на інші відносини на тому ж рівні" + +#: parser/analyze.c:2004 +#, c-format +msgid "each %s query must have the same number of columns" +msgstr "кожен %s запит повинен мати однакову кількість стовпців" + +#: parser/analyze.c:2426 +#, c-format +msgid "RETURNING must have at least one column" +msgstr "В RETURNING повинен бути мінімум один стовпець" + +#: parser/analyze.c:2467 +#, c-format +msgid "cannot specify both SCROLL and NO SCROLL" +msgstr "не можна вказати SCROLL і NO SCROLL одночасно" + +#: parser/analyze.c:2486 +#, c-format +msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" +msgstr "DECLARE CURSOR не повинен містити операторів, які змінюють дані в WITH" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2494 +#, c-format +msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" +msgstr "DECLARE CURSOR WITH HOLD ... %s не підтримується" + +#: parser/analyze.c:2497 +#, c-format +msgid "Holdable cursors must be READ ONLY." +msgstr "Курсори, що зберігаються повинні бути READ ONLY." + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2505 +#, c-format +msgid "DECLARE SCROLL CURSOR ... %s is not supported" +msgstr "DECLARE SCROLL CURSOR ... %s не підтримується" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2516 +#, c-format +msgid "DECLARE INSENSITIVE CURSOR ... %s is not supported" +msgstr "DECLARE INSENSITIVE CURSOR ... %s не підтримується" + +#: parser/analyze.c:2519 +#, c-format +msgid "Insensitive cursors must be READ ONLY." +msgstr "Нечутливі курсори повинні бути READ ONLY." + +#: parser/analyze.c:2585 +#, c-format +msgid "materialized views must not use data-modifying statements in WITH" +msgstr "в матеріалізованих поданнях не повинні використовуватись оператори, які змінюють дані в WITH" + +#: parser/analyze.c:2595 +#, c-format +msgid "materialized views must not use temporary tables or views" +msgstr "в матеріалізованих поданнях не повинні використовуватись тимчасові таблиці або подання" + +#: parser/analyze.c:2605 +#, c-format +msgid "materialized views may not be defined using bound parameters" +msgstr "визначати матеріалізовані подання з зв'язаними параметрами не можна" + +#: parser/analyze.c:2617 +#, c-format +msgid "materialized views cannot be unlogged" +msgstr "матеріалізовані подання не можуть бути нежурнальованими" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2722 +#, c-format +msgid "%s is not allowed with DISTINCT clause" +msgstr "%s не дозволяється з реченням DISTINCT" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2729 +#, c-format +msgid "%s is not allowed with GROUP BY clause" +msgstr "%s не дозволяється з реченням GROUP BY" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2736 +#, c-format +msgid "%s is not allowed with HAVING clause" +msgstr "%s не дозволяється з реченням HAVING" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2743 +#, c-format +msgid "%s is not allowed with aggregate functions" +msgstr "%s не дозволяється з агрегатними функціями" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2750 +#, c-format +msgid "%s is not allowed with window functions" +msgstr "%s не дозволяється з віконними функціями" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2757 +#, c-format +msgid "%s is not allowed with set-returning functions in the target list" +msgstr "%s не дозволяється з функціями, які повертають безлічі, в цільовому списку" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2836 +#, c-format +msgid "%s must specify unqualified relation names" +msgstr "для %s потрібно вказати некваліфіковані імена відносин" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2867 +#, c-format +msgid "%s cannot be applied to a join" +msgstr "%s не можна застосовувати до з'єднання" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2876 +#, c-format +msgid "%s cannot be applied to a function" +msgstr "%s не можна застосовувати до функції" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2885 +#, c-format +msgid "%s cannot be applied to a table function" +msgstr "%s не можна застосовувати до табличної функції" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2903 +#, c-format +msgid "%s cannot be applied to a WITH query" +msgstr "%s не можна застосовувати до запиту WITH" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2912 +#, c-format +msgid "%s cannot be applied to a named tuplestore" +msgstr "%s не можна застосовувати до іменованого джерела кортежів" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:2932 +#, c-format +msgid "relation \"%s\" in %s clause not found in FROM clause" +msgstr "відношення \"%s\" в реченні %s не знайдено в реченні FROM" + +#: parser/parse_agg.c:220 parser/parse_oper.c:222 +#, c-format +msgid "could not identify an ordering operator for type %s" +msgstr "для типу %s не вдалося визначити оператора сортування" + +#: parser/parse_agg.c:222 +#, c-format +msgid "Aggregates with DISTINCT must be able to sort their inputs." +msgstr "Агрегатним функціям з DISTINCT необхідно сортувати їх вхідні дані." + +#: parser/parse_agg.c:257 +#, c-format +msgid "GROUPING must have fewer than 32 arguments" +msgstr "GROUPING повинно містити меньше, ніж 32 аргумента" + +#: parser/parse_agg.c:360 +msgid "aggregate functions are not allowed in JOIN conditions" +msgstr "агрегатні функції не дозволяються в умовах JOIN" + +#: parser/parse_agg.c:362 +msgid "grouping operations are not allowed in JOIN conditions" +msgstr "операції групування не дозволяються в умовах JOIN" + +#: parser/parse_agg.c:374 +msgid "aggregate functions are not allowed in FROM clause of their own query level" +msgstr "агрегатні функції не можна застосовувати в реченні FROM їх рівня запиту" + +#: parser/parse_agg.c:376 +msgid "grouping operations are not allowed in FROM clause of their own query level" +msgstr "операції групування не можна застосовувати в реченні FROM їх рівня запиту" + +#: parser/parse_agg.c:381 +msgid "aggregate functions are not allowed in functions in FROM" +msgstr "агрегатні функції не можна застосовувати у функціях у FROM" + +#: parser/parse_agg.c:383 +msgid "grouping operations are not allowed in functions in FROM" +msgstr "операції групування не можна застосовувати у функціях у FROM" + +#: parser/parse_agg.c:391 +msgid "aggregate functions are not allowed in policy expressions" +msgstr "агрегатні функції не можна застосовувати у виразах політики" + +#: parser/parse_agg.c:393 +msgid "grouping operations are not allowed in policy expressions" +msgstr "операції групування не можна застосовувати у виразах політики" + +#: parser/parse_agg.c:410 +msgid "aggregate functions are not allowed in window RANGE" +msgstr "агрегатні функції не можна застосовувати у вікні RANGE " + +#: parser/parse_agg.c:412 +msgid "grouping operations are not allowed in window RANGE" +msgstr "операції групування не можна застосовувати у вікні RANGE" + +#: parser/parse_agg.c:417 +msgid "aggregate functions are not allowed in window ROWS" +msgstr "агрегатні функції не можна застосовувати у вікні ROWS" + +#: parser/parse_agg.c:419 +msgid "grouping operations are not allowed in window ROWS" +msgstr "операції групування не можна застосовувати у вікні ROWS" + +#: parser/parse_agg.c:424 +msgid "aggregate functions are not allowed in window GROUPS" +msgstr "агрегатні функції не можна застосовувати у вікні GROUPS" + +#: parser/parse_agg.c:426 +msgid "grouping operations are not allowed in window GROUPS" +msgstr "операції групування не можна застосовувати у вікні GROUPS" + +#: parser/parse_agg.c:460 +msgid "aggregate functions are not allowed in check constraints" +msgstr "агрегатні функції не можна застосовувати в перевірці обмежень" + +#: parser/parse_agg.c:462 +msgid "grouping operations are not allowed in check constraints" +msgstr "операції групування не можна застосовувати в перевірці обмежень" + +#: parser/parse_agg.c:469 +msgid "aggregate functions are not allowed in DEFAULT expressions" +msgstr "агрегатні функції не можна застосовувати у виразах DEFAULT" + +#: parser/parse_agg.c:471 +msgid "grouping operations are not allowed in DEFAULT expressions" +msgstr "операції групування не можна застосовувати у виразах DEFAULT" + +#: parser/parse_agg.c:476 +msgid "aggregate functions are not allowed in index expressions" +msgstr "агрегатні функції не можна застосовувати у виразах індексів" + +#: parser/parse_agg.c:478 +msgid "grouping operations are not allowed in index expressions" +msgstr "операції групування не можна застосовувати у виразах індексів" + +#: parser/parse_agg.c:483 +msgid "aggregate functions are not allowed in index predicates" +msgstr "агрегатні функції не можна застосовувати в предикатах індексів" + +#: parser/parse_agg.c:485 +msgid "grouping operations are not allowed in index predicates" +msgstr "операції групування не можна застосовувати в предикатах індексів" + +#: parser/parse_agg.c:490 +msgid "aggregate functions are not allowed in transform expressions" +msgstr "агрегатні функції не можна застосовувати у виразах перетворювання" + +#: parser/parse_agg.c:492 +msgid "grouping operations are not allowed in transform expressions" +msgstr "операції групування не можна застосовувати у виразах перетворювання" + +#: parser/parse_agg.c:497 +msgid "aggregate functions are not allowed in EXECUTE parameters" +msgstr "агрегатні функції не можна застосовувати в параметрах EXECUTE" + +#: parser/parse_agg.c:499 +msgid "grouping operations are not allowed in EXECUTE parameters" +msgstr "операції групування не можна застосовувати в параметрах EXECUTE" + +#: parser/parse_agg.c:504 +msgid "aggregate functions are not allowed in trigger WHEN conditions" +msgstr "агрегатні функції не можна застосовувати в умовах для тригерів WHEN" + +#: parser/parse_agg.c:506 +msgid "grouping operations are not allowed in trigger WHEN conditions" +msgstr "операції групування не можна застосовувати в умовах для тригерів WHEN" + +#: parser/parse_agg.c:511 +msgid "aggregate functions are not allowed in partition bound" +msgstr "агрегатні функції не можна застосовувати в границі секції" + +#: parser/parse_agg.c:513 +msgid "grouping operations are not allowed in partition bound" +msgstr "операції групування не можна застосовувати в границі секції" + +#: parser/parse_agg.c:518 +msgid "aggregate functions are not allowed in partition key expressions" +msgstr "агрегатні функції не можна застосовувати у виразах ключа секціонування" + +#: parser/parse_agg.c:520 +msgid "grouping operations are not allowed in partition key expressions" +msgstr "операції групування не можна застосовувати у виразах ключа секціонування" + +#: parser/parse_agg.c:526 +msgid "aggregate functions are not allowed in column generation expressions" +msgstr "агрегатні функції не можна застосовувати у виразах генерації стовпців" + +#: parser/parse_agg.c:528 +msgid "grouping operations are not allowed in column generation expressions" +msgstr "операції групування не можна застосовувати у виразах генерації стовпців" + +#: parser/parse_agg.c:534 +msgid "aggregate functions are not allowed in CALL arguments" +msgstr "агрегатні функції не можна застосовувати в аргументах CALL" + +#: parser/parse_agg.c:536 +msgid "grouping operations are not allowed in CALL arguments" +msgstr "операції групування не можна застосовувати в аргументах CALL" + +#: parser/parse_agg.c:542 +msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" +msgstr "агрегатні функції не можна застосовувати в умовах COPY FROM WHERE" + +#: parser/parse_agg.c:544 +msgid "grouping operations are not allowed in COPY FROM WHERE conditions" +msgstr "операції групування не можна застосовувати в умовах COPY FROM WHERE" + +#. translator: %s is name of a SQL construct, eg GROUP BY +#: parser/parse_agg.c:567 parser/parse_clause.c:1828 +#, c-format +msgid "aggregate functions are not allowed in %s" +msgstr "агрегатні функції не можна застосовувати в %s" + +#. translator: %s is name of a SQL construct, eg GROUP BY +#: parser/parse_agg.c:570 +#, c-format +msgid "grouping operations are not allowed in %s" +msgstr "операції групування не можна застосовувати в %s" + +#: parser/parse_agg.c:678 +#, c-format +msgid "outer-level aggregate cannot contain a lower-level variable in its direct arguments" +msgstr "агрегат зовнішнього рівня не може містити змінну нижчого рівня у своїх аргументах" + +#: parser/parse_agg.c:757 +#, c-format +msgid "aggregate function calls cannot contain set-returning function calls" +msgstr "виклики агрегатної функції не можуть містити викликів функції, що повертають множину" + +#: parser/parse_agg.c:758 parser/parse_expr.c:1845 parser/parse_expr.c:2332 +#: parser/parse_func.c:872 +#, c-format +msgid "You might be able to move the set-returning function into a LATERAL FROM item." +msgstr "Можливо перемістити функцію, що повертає множину, в елемент LATERAL FROM." + +#: parser/parse_agg.c:763 +#, c-format +msgid "aggregate function calls cannot contain window function calls" +msgstr "виклики агрегатних функцій не можуть містити виклики віконних функцій" + +#: parser/parse_agg.c:842 +msgid "window functions are not allowed in JOIN conditions" +msgstr "віконні функції не можна застосовувати в умовах JOIN" + +#: parser/parse_agg.c:849 +msgid "window functions are not allowed in functions in FROM" +msgstr "віконні функції не можна застосовувати у функціях в FROM" + +#: parser/parse_agg.c:855 +msgid "window functions are not allowed in policy expressions" +msgstr "віконні функції не можна застосовувати у виразах політики" + +#: parser/parse_agg.c:868 +msgid "window functions are not allowed in window definitions" +msgstr "віконні функції не можна застосовувати у визначенні вікна" + +#: parser/parse_agg.c:900 +msgid "window functions are not allowed in check constraints" +msgstr "віконні функції не можна застосовувати в перевірках обмежень" + +#: parser/parse_agg.c:904 +msgid "window functions are not allowed in DEFAULT expressions" +msgstr "віконні функції не можна застосовувати у виразах DEFAULT" + +#: parser/parse_agg.c:907 +msgid "window functions are not allowed in index expressions" +msgstr "віконні функції не можна застосовувати у виразах індексів" + +#: parser/parse_agg.c:910 +msgid "window functions are not allowed in index predicates" +msgstr "віконні функції не можна застосовувати в предикатах індексів" + +#: parser/parse_agg.c:913 +msgid "window functions are not allowed in transform expressions" +msgstr "віконні функції не можна застосовувати у виразах перетворювання" + +#: parser/parse_agg.c:916 +msgid "window functions are not allowed in EXECUTE parameters" +msgstr "віконні функції не можна застосовувати в параметрах EXECUTE" + +#: parser/parse_agg.c:919 +msgid "window functions are not allowed in trigger WHEN conditions" +msgstr "віконні функції не можна застосовувати в умовах WHEN для тригерів" + +#: parser/parse_agg.c:922 +msgid "window functions are not allowed in partition bound" +msgstr "віконні функції не можна застосовувати в границі секції" + +#: parser/parse_agg.c:925 +msgid "window functions are not allowed in partition key expressions" +msgstr "віконні функції не можна застосовувати у виразах ключа секціонування" + +#: parser/parse_agg.c:928 +msgid "window functions are not allowed in CALL arguments" +msgstr "віконні функції не можна застосовувати в аргументах CALL" + +#: parser/parse_agg.c:931 +msgid "window functions are not allowed in COPY FROM WHERE conditions" +msgstr "віконні функції не можна застосовувати в умовах COPY FROM WHERE" + +#: parser/parse_agg.c:934 +msgid "window functions are not allowed in column generation expressions" +msgstr "віконні функції не можна застосовувати у виразах генерації стовпців" + +#. translator: %s is name of a SQL construct, eg GROUP BY +#: parser/parse_agg.c:954 parser/parse_clause.c:1837 +#, c-format +msgid "window functions are not allowed in %s" +msgstr "віконні функції не можна застосовувати в %s" + +#: parser/parse_agg.c:988 parser/parse_clause.c:2671 +#, c-format +msgid "window \"%s\" does not exist" +msgstr "вікно \"%s\" не існує" + +#: parser/parse_agg.c:1072 +#, c-format +msgid "too many grouping sets present (maximum 4096)" +msgstr "забагато наборів групування (максимум 4096)" + +#: parser/parse_agg.c:1212 +#, c-format +msgid "aggregate functions are not allowed in a recursive query's recursive term" +msgstr "агрегатні функції не дозволені у рекурсивному терміні рекурсивного запиту" + +#: parser/parse_agg.c:1405 +#, c-format +msgid "column \"%s.%s\" must appear in the GROUP BY clause or be used in an aggregate function" +msgstr "стовпець \"%s.%s\" повинен з'являтися у реченні Група BY або використовуватися в агрегатній функції" + +#: parser/parse_agg.c:1408 +#, c-format +msgid "Direct arguments of an ordered-set aggregate must use only grouped columns." +msgstr "Прямі аргументи сортувального агрегату можуть використовувати лише згруповані стовпці." + +#: parser/parse_agg.c:1413 +#, c-format +msgid "subquery uses ungrouped column \"%s.%s\" from outer query" +msgstr "вкладений запит використовує не згруповані стовпці \"%s.%s\" з зовнішнього запиту" + +#: parser/parse_agg.c:1577 +#, c-format +msgid "arguments to GROUPING must be grouping expressions of the associated query level" +msgstr "аргументами групування мають бути вирази групування пов'язаного рівня запиту" + +#: parser/parse_clause.c:191 +#, c-format +msgid "relation \"%s\" cannot be the target of a modifying statement" +msgstr "відношення \"%s\" не може бути метою модифікованої інструкції" + +#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2424 +#, c-format +msgid "set-returning functions must appear at top level of FROM" +msgstr "функції, що повертають множину, мають з'являтися на вищому рівні FROM" + +#: parser/parse_clause.c:611 +#, c-format +msgid "multiple column definition lists are not allowed for the same function" +msgstr "кілька списків з визначенням стовпців не дозволені для тої самої функції" + +#: parser/parse_clause.c:644 +#, c-format +msgid "ROWS FROM() with multiple functions cannot have a column definition list" +msgstr "ROWS FROM() з декількома функціями не можуть мати список з визначенням стовпців" + +#: parser/parse_clause.c:645 +#, c-format +msgid "Put a separate column definition list for each function inside ROWS FROM()." +msgstr "Укладіть окремі списки з визначенням стовпців для кожної з функцій всередині ROWS FROM()." + +#: parser/parse_clause.c:651 +#, c-format +msgid "UNNEST() with multiple arguments cannot have a column definition list" +msgstr "UNNEST() з кількома аргументами не можуть мати список з визначенням стовпців" + +#: parser/parse_clause.c:652 +#, c-format +msgid "Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one." +msgstr "Використайте окремі виклики UNNEST() всередині ROWS FROM() і підключіть список з визначенням стовпців до кожного." + +#: parser/parse_clause.c:659 +#, c-format +msgid "WITH ORDINALITY cannot be used with a column definition list" +msgstr "WITH ORDINALITY не можна використовувати з списком з визначенням стовпців" + +#: parser/parse_clause.c:660 +#, c-format +msgid "Put the column definition list inside ROWS FROM()." +msgstr "Помістіть список з визначенням стовпців всередину ROWS FROM()." + +#: parser/parse_clause.c:760 +#, c-format +msgid "only one FOR ORDINALITY column is allowed" +msgstr "FOR ORDINALITY дозволяється лише для одного стовпця" + +#: parser/parse_clause.c:821 +#, c-format +msgid "column name \"%s\" is not unique" +msgstr "ім'я стовпця \"%s\" не є унікальним" + +#: parser/parse_clause.c:863 +#, c-format +msgid "namespace name \"%s\" is not unique" +msgstr "ім'я простору імен \"%s\" не є унікальним" + +#: parser/parse_clause.c:873 +#, c-format +msgid "only one default namespace is allowed" +msgstr "дозволено тільки один простір імен за замовчуванням" + +#: parser/parse_clause.c:933 +#, c-format +msgid "tablesample method %s does not exist" +msgstr "метод %s для отримання вибірки не існує" + +#: parser/parse_clause.c:955 +#, c-format +msgid "tablesample method %s requires %d argument, not %d" +msgid_plural "tablesample method %s requires %d arguments, not %d" +msgstr[0] "метод %s для отримання вибірки потребує аргумента: %d, отримано: %d" +msgstr[1] "метод %s для отримання вибірки потребує аргументів: %d, отримано: %d" +msgstr[2] "метод %s для отримання вибірки потребує аргументів: %d, отримано: %d" +msgstr[3] "метод %s для отримання вибірки потребує аргументів: %d, отримано: %d" + +#: parser/parse_clause.c:989 +#, c-format +msgid "tablesample method %s does not support REPEATABLE" +msgstr "метод %s для отримання вибірки не підтримує REPEATABLE" + +#: parser/parse_clause.c:1135 +#, c-format +msgid "TABLESAMPLE clause can only be applied to tables and materialized views" +msgstr "Речення TABLESAMPLE можна застосовувати лише до таблиць або матеріалізованих подань" + +#: parser/parse_clause.c:1318 +#, c-format +msgid "column name \"%s\" appears more than once in USING clause" +msgstr "ім’я стовпця \"%s\" з'являється у реченні USING неодноразово" + +#: parser/parse_clause.c:1333 +#, c-format +msgid "common column name \"%s\" appears more than once in left table" +msgstr "ім’я спільного стовпця \"%s\" з'являється у таблиці зліва неодноразово" + +#: parser/parse_clause.c:1342 +#, c-format +msgid "column \"%s\" specified in USING clause does not exist in left table" +msgstr "в таблиці зліва не існує стовпець \"%s\", вказаний в реченні USING" + +#: parser/parse_clause.c:1357 +#, c-format +msgid "common column name \"%s\" appears more than once in right table" +msgstr "ім’я спільного стовпця \"%s\" з'являється в таблиці справа неодноразово" + +#: parser/parse_clause.c:1366 +#, c-format +msgid "column \"%s\" specified in USING clause does not exist in right table" +msgstr "в таблиці справа не існує стовпець \"%s\", вказаний в реченні USING" + +#: parser/parse_clause.c:1447 +#, c-format +msgid "column alias list for \"%s\" has too many entries" +msgstr "занадто багато елементів у списку псевдонімів стовпця \"%s\"" + +#: parser/parse_clause.c:1773 +#, c-format +msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" +msgstr "кількість рядків не може бути NULL в операторі FETCH FIRST ... WITH TIES" + +#. translator: %s is name of a SQL construct, eg LIMIT +#: parser/parse_clause.c:1798 +#, c-format +msgid "argument of %s must not contain variables" +msgstr "аргумент %s не може містити змінні" + +#. translator: first %s is name of a SQL construct, eg ORDER BY +#: parser/parse_clause.c:1963 +#, c-format +msgid "%s \"%s\" is ambiguous" +msgstr "вираз %s \"%s\" неоднозначний" + +#. translator: %s is name of a SQL construct, eg ORDER BY +#: parser/parse_clause.c:1992 +#, c-format +msgid "non-integer constant in %s" +msgstr "нецілочисельна константа в %s" + +#. translator: %s is name of a SQL construct, eg ORDER BY +#: parser/parse_clause.c:2014 +#, c-format +msgid "%s position %d is not in select list" +msgstr "в списку вибірки %s немає позиції %d" + +#: parser/parse_clause.c:2453 +#, c-format +msgid "CUBE is limited to 12 elements" +msgstr "CUBE має обмеження в 12 елементів" + +#: parser/parse_clause.c:2659 +#, c-format +msgid "window \"%s\" is already defined" +msgstr "вікно \"%s\" вже визначено" + +#: parser/parse_clause.c:2720 +#, c-format +msgid "cannot override PARTITION BY clause of window \"%s\"" +msgstr "змінити речення PARTITION BY для вікна \"%s\" не можна" + +#: parser/parse_clause.c:2732 +#, c-format +msgid "cannot override ORDER BY clause of window \"%s\"" +msgstr "змінити речення ORDER BY для вікна \"%s\" не можна" + +#: parser/parse_clause.c:2762 parser/parse_clause.c:2768 +#, c-format +msgid "cannot copy window \"%s\" because it has a frame clause" +msgstr "скопіювати вікно \"%s\", яке має речення рамки, не можна" + +#: parser/parse_clause.c:2770 +#, c-format +msgid "Omit the parentheses in this OVER clause." +msgstr "Пропустіть дужки в реченні OVER." + +#: parser/parse_clause.c:2790 +#, c-format +msgid "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" +msgstr "Для RANGE з зсувом PRECEDING/FOLLOWING потребується лише один стовпець в ORDER BY" + +#: parser/parse_clause.c:2813 +#, c-format +msgid "GROUPS mode requires an ORDER BY clause" +msgstr "Для режиму GROUPS потребується речення ORDER BY" + +#: parser/parse_clause.c:2883 +#, c-format +msgid "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list" +msgstr "для агрегатної функції з DISTINCT, вирази ORDER BY повинні з'являтись у списку аргументів" + +#: parser/parse_clause.c:2884 +#, c-format +msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" +msgstr "для SELECT DISTINCT вирази ORDER BY повинні бути в списку вибірки" + +#: parser/parse_clause.c:2916 +#, c-format +msgid "an aggregate with DISTINCT must have at least one argument" +msgstr "агрегатна функція з DISTINCT повинна мати мінімум один аргумент" + +#: parser/parse_clause.c:2917 +#, c-format +msgid "SELECT DISTINCT must have at least one column" +msgstr "SELECT DISTINCT повинен мати мінімум один стовпець" + +#: parser/parse_clause.c:2983 parser/parse_clause.c:3015 +#, c-format +msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" +msgstr "Вирази SELECT DISTINCT ON повинні відповідати початковим виразам ORDER BY" + +#: parser/parse_clause.c:3093 +#, c-format +msgid "ASC/DESC is not allowed in ON CONFLICT clause" +msgstr "ASC/DESC не дозволяється в реченні ON CONFLICT" + +#: parser/parse_clause.c:3099 +#, c-format +msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" +msgstr "NULLS FIRST/LAST не довзоляється в реченні ON CONFLICT" + +#: parser/parse_clause.c:3178 +#, c-format +msgid "ON CONFLICT DO UPDATE requires inference specification or constraint name" +msgstr "ON CONFLICT DO UPDATE вимагає специфікації висновку або імені обмеження" + +#: parser/parse_clause.c:3179 +#, c-format +msgid "For example, ON CONFLICT (column_name)." +msgstr "Наприклад, ON CONFLICT (ім'я_стовпця)." + +#: parser/parse_clause.c:3190 +#, c-format +msgid "ON CONFLICT is not supported with system catalog tables" +msgstr "ON CONFLICT не підтримується таблицями системного каталогу" + +#: parser/parse_clause.c:3198 +#, c-format +msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" +msgstr "ON CONFLICT не підтримується в таблиці \"%s\", що використовується як таблиця каталогу" + +#: parser/parse_clause.c:3341 +#, c-format +msgid "operator %s is not a valid ordering operator" +msgstr "оператор %s не є дійсним оператором сортування" + +#: parser/parse_clause.c:3343 +#, c-format +msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." +msgstr "Оператори сортування повинні бути учасниками \"<\" або \">\" сімейств операторів btree." + +#: parser/parse_clause.c:3654 +#, c-format +msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" +msgstr "RANGE зі зсувом PRECEDING/FOLLOWING не підтримується для типу стовпця %s" + +#: parser/parse_clause.c:3660 +#, c-format +msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s" +msgstr "RANGE зі зсувом PRECEDING/FOLLOWING не підтримується для типу стовпця %s і типу зсуву %s" + +#: parser/parse_clause.c:3663 +#, c-format +msgid "Cast the offset value to an appropriate type." +msgstr "Приведіть значення зсуву до потрібного типу." + +#: parser/parse_clause.c:3668 +#, c-format +msgid "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s" +msgstr "RANGE зі зсувом PRECEDING/FOLLOWING має декілька інтерпретацій для типу стовпця %s і типу зсуву %s" + +#: parser/parse_clause.c:3671 +#, c-format +msgid "Cast the offset value to the exact intended type." +msgstr "Приведіть значення зсуву в точності до призначеного типу." + +#: parser/parse_coerce.c:1024 parser/parse_coerce.c:1062 +#: parser/parse_coerce.c:1080 parser/parse_coerce.c:1095 +#: parser/parse_expr.c:2241 parser/parse_expr.c:2819 parser/parse_target.c:967 +#, c-format +msgid "cannot cast type %s to %s" +msgstr "неможливо транслювати тип %s в %s" + +#: parser/parse_coerce.c:1065 +#, c-format +msgid "Input has too few columns." +msgstr "У вхідних даних дуже мало стовпців." + +#: parser/parse_coerce.c:1083 +#, c-format +msgid "Cannot cast type %s to %s in column %d." +msgstr "Неможливо транслювати тип %s в %s у стовпці %d." + +#: parser/parse_coerce.c:1098 +#, c-format +msgid "Input has too many columns." +msgstr "У вхідних даних дуже багато стовпців." + +#. translator: first %s is name of a SQL construct, eg WHERE +#. translator: first %s is name of a SQL construct, eg LIMIT +#: parser/parse_coerce.c:1153 parser/parse_coerce.c:1201 +#, c-format +msgid "argument of %s must be type %s, not type %s" +msgstr "аргумент конструкції %s повинен бути типу %s, не типу %s" + +#. translator: %s is name of a SQL construct, eg WHERE +#. translator: %s is name of a SQL construct, eg LIMIT +#: parser/parse_coerce.c:1164 parser/parse_coerce.c:1213 +#, c-format +msgid "argument of %s must not return a set" +msgstr "аргумент конструкції %s не повинен повертати набір" + +#. translator: first %s is name of a SQL construct, eg CASE +#: parser/parse_coerce.c:1353 +#, c-format +msgid "%s types %s and %s cannot be matched" +msgstr "у конструкції %s типи %s і %s не можуть бути відповідними" + +#: parser/parse_coerce.c:1465 +#, c-format +msgid "argument types %s and %s cannot be matched" +msgstr "типи аргументів %s і %s не можуть збігатись" + +#. translator: first %s is name of a SQL construct, eg CASE +#: parser/parse_coerce.c:1517 +#, c-format +msgid "%s could not convert type %s to %s" +msgstr "у конструкції %s не можна перетворити тип %s в %s" + +#: parser/parse_coerce.c:1934 +#, c-format +msgid "arguments declared \"anyelement\" are not all alike" +msgstr "аргументи, оголошенні як \"anyelement\", повинні бути схожими" + +#: parser/parse_coerce.c:1954 +#, c-format +msgid "arguments declared \"anyarray\" are not all alike" +msgstr "аргументи, оголошенні як \"anyarray\", повинні бути схожими" + +#: parser/parse_coerce.c:1974 +#, c-format +msgid "arguments declared \"anyrange\" are not all alike" +msgstr "аргументи, оголошенні як \"anyrange\", повинні бути схожими" + +#: parser/parse_coerce.c:2008 parser/parse_coerce.c:2088 +#: utils/fmgr/funcapi.c:487 +#, c-format +msgid "argument declared %s is not an array but type %s" +msgstr "аргумент, оголошений як %s , є не масивом, а типом %s" + +#: parser/parse_coerce.c:2029 +#, c-format +msgid "arguments declared \"anycompatiblerange\" are not all alike" +msgstr "аргументи, оголошенні як \"anycompatiblerange\", повинні бути схожими" + +#: parser/parse_coerce.c:2041 parser/parse_coerce.c:2122 +#: utils/fmgr/funcapi.c:501 +#, c-format +msgid "argument declared %s is not a range type but type %s" +msgstr "аргумент, оголошений як %s, є не діапазонним типом, а типом %s" + +#: parser/parse_coerce.c:2079 +#, c-format +msgid "cannot determine element type of \"anyarray\" argument" +msgstr "не можна визначити тип елемента аргументу \"anyarray\"" + +#: parser/parse_coerce.c:2105 parser/parse_coerce.c:2139 +#, c-format +msgid "argument declared %s is not consistent with argument declared %s" +msgstr "аргумент, оголошений як %s, не узгоджується з аргументом, оголошеним як %s" + +#: parser/parse_coerce.c:2163 +#, c-format +msgid "could not determine polymorphic type because input has type %s" +msgstr "не вдалося визначити поліморфний тип, тому що вхідні аргументи мають тип %s" + +#: parser/parse_coerce.c:2177 +#, c-format +msgid "type matched to anynonarray is an array type: %s" +msgstr "тип, відповідний \"anynonarray\", є масивом: %s" + +#: parser/parse_coerce.c:2187 +#, c-format +msgid "type matched to anyenum is not an enum type: %s" +msgstr "тип, відповідний \"anyenum\", не є переліком: %s" + +#: parser/parse_coerce.c:2218 parser/parse_coerce.c:2267 +#: parser/parse_coerce.c:2329 parser/parse_coerce.c:2365 +#, c-format +msgid "could not determine polymorphic type %s because input has type %s" +msgstr "не вдалося визначити поліморфний тип %s тому що вхідні дані мають тип %s" + +#: parser/parse_coerce.c:2228 +#, c-format +msgid "anycompatiblerange type %s does not match anycompatible type %s" +msgstr "тип anycompatiblerange %s не збігається з типом anycompatible %s" + +#: parser/parse_coerce.c:2242 +#, c-format +msgid "type matched to anycompatiblenonarray is an array type: %s" +msgstr "тип відповідний до anycompatiblenonarray є масивом: %s" + +#: parser/parse_coerce.c:2433 +#, c-format +msgid "A result of type %s requires at least one input of type %s." +msgstr "Результат типу %s потребує ввести як мінімум один тип %s." + +#: parser/parse_coerce.c:2445 +#, c-format +msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, or anyrange." +msgstr "Результат типу %s потребує ввести як мінімум один тип anyelement, anyarray, anynonarray, anyenum, або anyrange." + +#: parser/parse_coerce.c:2457 +#, c-format +msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, or anycompatiblerange." +msgstr "Результат типу %s потребує ввести як мінімум один тип anycompatible, anycompatiblearray, anycompatiblenonarray, або anycompatiblerange." + +#: parser/parse_coerce.c:2487 +msgid "A result of type internal requires at least one input of type internal." +msgstr "Результат внутрішнього типу потребує ввести як мінімум один внутрішній тип." + +#: parser/parse_collate.c:228 parser/parse_collate.c:475 +#: parser/parse_collate.c:981 +#, c-format +msgid "collation mismatch between implicit collations \"%s\" and \"%s\"" +msgstr "невідповідність параметрів сортування між неявними параметрами сортування \"%s\" і \"%s\"" + +#: parser/parse_collate.c:231 parser/parse_collate.c:478 +#: parser/parse_collate.c:984 +#, c-format +msgid "You can choose the collation by applying the COLLATE clause to one or both expressions." +msgstr "Ви можете обрати параметри сортування, застосувавши речення COLLATE до одного або обох виразів." + +#: parser/parse_collate.c:831 +#, c-format +msgid "collation mismatch between explicit collations \"%s\" and \"%s\"" +msgstr "невідповідність параметрів сортування між явними параметрами сортування \"%s\" і \"%s\"" + +#: parser/parse_cte.c:42 +#, c-format +msgid "recursive reference to query \"%s\" must not appear within its non-recursive term" +msgstr "рекурсивне посилання на запит \"%s\" не повинне з'являтись в його не рекурсивній частині" + +#: parser/parse_cte.c:44 +#, c-format +msgid "recursive reference to query \"%s\" must not appear within a subquery" +msgstr "рекурсивне посилання на запит \"%s\" не повинне з'являтись у підзапиті" + +#: parser/parse_cte.c:46 +#, c-format +msgid "recursive reference to query \"%s\" must not appear within an outer join" +msgstr "рекурсивне посилання на запит \"%s\" не повинне з'являтись у зовнішньому з’єднанні" + +#: parser/parse_cte.c:48 +#, c-format +msgid "recursive reference to query \"%s\" must not appear within INTERSECT" +msgstr "рекурсивне посилання на запит \"%s\" не повинне з'являтись в INTERSECT" + +#: parser/parse_cte.c:50 +#, c-format +msgid "recursive reference to query \"%s\" must not appear within EXCEPT" +msgstr "рекурсивне посилання на запит \"%s\" не повинне з'являтись в EXCEPT" + +#: parser/parse_cte.c:132 +#, c-format +msgid "WITH query name \"%s\" specified more than once" +msgstr "Ім’я запиту WITH \"%s\" вказано неодноразово" + +#: parser/parse_cte.c:264 +#, c-format +msgid "WITH clause containing a data-modifying statement must be at the top level" +msgstr "Речення WITH, яке містить оператор, що змінює дані, повинне бути на верхньому рівні" + +#: parser/parse_cte.c:313 +#, c-format +msgid "recursive query \"%s\" column %d has type %s in non-recursive term but type %s overall" +msgstr "у рекурсивному запиті \"%s\" стовпець %d має тип %s у нерекурсивній частині, але загалом тип %s" + +#: parser/parse_cte.c:319 +#, c-format +msgid "Cast the output of the non-recursive term to the correct type." +msgstr "Приведіть результат нерекурсивної частини до правильного типу." + +#: parser/parse_cte.c:324 +#, c-format +msgid "recursive query \"%s\" column %d has collation \"%s\" in non-recursive term but collation \"%s\" overall" +msgstr "у рекурсивному запиті \"%s\" стовпець %d має параметри сортування \"%s\" у нерекурсивній частині, але загалом параметри сортування \"%s\"" + +#: parser/parse_cte.c:328 +#, c-format +msgid "Use the COLLATE clause to set the collation of the non-recursive term." +msgstr "Використайте речення COLLATE, щоб встановити параметри сортування в нерекурсивній частині." + +#: parser/parse_cte.c:418 +#, c-format +msgid "WITH query \"%s\" has %d columns available but %d columns specified" +msgstr "Запит WITH \"%s\" має %d доступних стовпців, але %d стовпців вказано" + +#: parser/parse_cte.c:598 +#, c-format +msgid "mutual recursion between WITH items is not implemented" +msgstr "взаємна рекурсія між елементами WITH не реалізована" + +#: parser/parse_cte.c:650 +#, c-format +msgid "recursive query \"%s\" must not contain data-modifying statements" +msgstr "рекурсивний запит \"%s\" не повинен містити оператори, які змінюють дані" + +#: parser/parse_cte.c:658 +#, c-format +msgid "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] recursive-term" +msgstr "рекурсивний запит \"%s\" не має форми (нерекурсивна частина) UNION [ALL] (рекурсивна частина)" + +#: parser/parse_cte.c:702 +#, c-format +msgid "ORDER BY in a recursive query is not implemented" +msgstr "ORDER BY в рекурсивному запиті не реалізовано" + +#: parser/parse_cte.c:708 +#, c-format +msgid "OFFSET in a recursive query is not implemented" +msgstr "OFFSET у рекурсивному запиті не реалізовано" + +#: parser/parse_cte.c:714 +#, c-format +msgid "LIMIT in a recursive query is not implemented" +msgstr "LIMIT у рекурсивному запиті не реалізовано" + +#: parser/parse_cte.c:720 +#, c-format +msgid "FOR UPDATE/SHARE in a recursive query is not implemented" +msgstr "FOR UPDATE/SHARE в рекурсивному запиті не реалізовано" + +#: parser/parse_cte.c:777 +#, c-format +msgid "recursive reference to query \"%s\" must not appear more than once" +msgstr "рекурсивне посилання на запит \"%s\" не повинне з'являтись неодноразово" + +#: parser/parse_expr.c:349 +#, c-format +msgid "DEFAULT is not allowed in this context" +msgstr "DEFAULT не допускається в цьому контексті" + +#: parser/parse_expr.c:402 parser/parse_relation.c:3506 +#: parser/parse_relation.c:3526 +#, c-format +msgid "column %s.%s does not exist" +msgstr "стовпець %s.%s не існує" + +#: parser/parse_expr.c:414 +#, c-format +msgid "column \"%s\" not found in data type %s" +msgstr "стовпець \"%s\" не знайдено в типі даних %s" + +#: parser/parse_expr.c:420 +#, c-format +msgid "could not identify column \"%s\" in record data type" +msgstr "не вдалося ідентифікувати стовпець \"%s\" в типі запису" + +#: parser/parse_expr.c:426 +#, c-format +msgid "column notation .%s applied to type %s, which is not a composite type" +msgstr "запис імені стовпця .%s застосований до типу %s, котрий не є складеним типом" + +#: parser/parse_expr.c:457 parser/parse_target.c:729 +#, c-format +msgid "row expansion via \"*\" is not supported here" +msgstr "розширення рядка через \"*\" тут не підтримується" + +#: parser/parse_expr.c:578 +msgid "cannot use column reference in DEFAULT expression" +msgstr "у виразі DEFAULT не можна використовувати посилання на стовпець" + +#: parser/parse_expr.c:581 +msgid "cannot use column reference in partition bound expression" +msgstr "у виразі границі секції не можна використовувати посилання на стовпці" + +#: parser/parse_expr.c:850 parser/parse_relation.c:799 +#: parser/parse_relation.c:881 parser/parse_target.c:1207 +#, c-format +msgid "column reference \"%s\" is ambiguous" +msgstr "посилання на стовпець \"%s\" є неоднозначним" + +#: parser/parse_expr.c:906 parser/parse_param.c:110 parser/parse_param.c:142 +#: parser/parse_param.c:199 parser/parse_param.c:298 +#, c-format +msgid "there is no parameter $%d" +msgstr "параметр $%d не існує" + +#: parser/parse_expr.c:1149 +#, c-format +msgid "NULLIF requires = operator to yield boolean" +msgstr "NULLIF потребує = щоб оператор повертав логічне значення" + +#. translator: %s is name of a SQL construct, eg NULLIF +#: parser/parse_expr.c:1155 parser/parse_expr.c:3135 +#, c-format +msgid "%s must not return a set" +msgstr "%s не повинна повертати набір" + +#: parser/parse_expr.c:1603 parser/parse_expr.c:1635 +#, c-format +msgid "number of columns does not match number of values" +msgstr "кількість стовпців не відповідає кількості значень" + +#: parser/parse_expr.c:1649 +#, c-format +msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() expression" +msgstr "джерелом для елементу UPDATE з декількома стовпцями повинен бути вкладений SELECT або вираз ROW()" + +#. translator: %s is name of a SQL construct, eg GROUP BY +#: parser/parse_expr.c:1843 parser/parse_expr.c:2330 parser/parse_func.c:2540 +#, c-format +msgid "set-returning functions are not allowed in %s" +msgstr "функції, повертаючі набори, не дозволяються в %s" + +#: parser/parse_expr.c:1904 +msgid "cannot use subquery in check constraint" +msgstr "в обмеженні-перевірці не можна використовувати підзапити" + +#: parser/parse_expr.c:1908 +msgid "cannot use subquery in DEFAULT expression" +msgstr "у виразі DEFAULT не можна використовувати підзапити" + +#: parser/parse_expr.c:1911 +msgid "cannot use subquery in index expression" +msgstr "в індексному виразі не можна використовувати підзапити" + +#: parser/parse_expr.c:1914 +msgid "cannot use subquery in index predicate" +msgstr "в предикаті індексу не можна використовувати підзапити" + +#: parser/parse_expr.c:1917 +msgid "cannot use subquery in transform expression" +msgstr "у виразі перетворення не можна використовувати підзапити" + +#: parser/parse_expr.c:1920 +msgid "cannot use subquery in EXECUTE parameter" +msgstr "в параметрі EXECUTE не можна використовувати підзапити" + +#: parser/parse_expr.c:1923 +msgid "cannot use subquery in trigger WHEN condition" +msgstr "в умові WHEN для тригеру не можна використовувати підзапити" + +#: parser/parse_expr.c:1926 +msgid "cannot use subquery in partition bound" +msgstr "в границі секції не можна використовувати підзапити" + +#: parser/parse_expr.c:1929 +msgid "cannot use subquery in partition key expression" +msgstr "у виразі ключа секціонування не можна використовувати підзапити" + +#: parser/parse_expr.c:1932 +msgid "cannot use subquery in CALL argument" +msgstr "в аргументі CALL не можна використовувати підзапити" + +#: parser/parse_expr.c:1935 +msgid "cannot use subquery in COPY FROM WHERE condition" +msgstr "не можна використовувати підзапити в умові COPY FROM WHERE" + +#: parser/parse_expr.c:1938 +msgid "cannot use subquery in column generation expression" +msgstr "у виразі генерації стовпців не можна використовувати підзапити" + +#: parser/parse_expr.c:1991 +#, c-format +msgid "subquery must return only one column" +msgstr "підзапит повинен повертати лише один стовпець" + +#: parser/parse_expr.c:2075 +#, c-format +msgid "subquery has too many columns" +msgstr "підзапит має занадто багато стовпців" + +#: parser/parse_expr.c:2080 +#, c-format +msgid "subquery has too few columns" +msgstr "підзапит має занадто мало стовпців" + +#: parser/parse_expr.c:2181 +#, c-format +msgid "cannot determine type of empty array" +msgstr "тип пустого масиву визначити не можна" + +#: parser/parse_expr.c:2182 +#, c-format +msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." +msgstr "Приведіть його до бажаного типу явним чином, наприклад ARRAY[]::integer[]." + +#: parser/parse_expr.c:2196 +#, c-format +msgid "could not find element type for data type %s" +msgstr "не вдалося знайти тип елементу для типу даних %s" + +#: parser/parse_expr.c:2481 +#, c-format +msgid "unnamed XML attribute value must be a column reference" +msgstr "замість значення XML-атрибуту без імені повинен вказуватись стовпець" + +#: parser/parse_expr.c:2482 +#, c-format +msgid "unnamed XML element value must be a column reference" +msgstr "замість значення XML-елементу без імені повинен вказуватись стовпець" + +#: parser/parse_expr.c:2497 +#, c-format +msgid "XML attribute name \"%s\" appears more than once" +msgstr "Ім'я XML-атрибуту \"%s\" з'являється неодноразово" + +#: parser/parse_expr.c:2604 +#, c-format +msgid "cannot cast XMLSERIALIZE result to %s" +msgstr "привести результат XMLSERIALIZE до %s не можна" + +#: parser/parse_expr.c:2892 parser/parse_expr.c:3088 +#, c-format +msgid "unequal number of entries in row expressions" +msgstr "неоднакова кількість елементів у виразах рядка" + +#: parser/parse_expr.c:2902 +#, c-format +msgid "cannot compare rows of zero length" +msgstr "рядки нульової довжини порівнювати не можна" + +#: parser/parse_expr.c:2927 +#, c-format +msgid "row comparison operator must yield type boolean, not type %s" +msgstr "оператор порівняння рядків повинен видавати логічний тип, а не %s" + +#: parser/parse_expr.c:2934 +#, c-format +msgid "row comparison operator must not return a set" +msgstr "оператор порівняння рядків повинен вертати набір" + +#: parser/parse_expr.c:2993 parser/parse_expr.c:3034 +#, c-format +msgid "could not determine interpretation of row comparison operator %s" +msgstr "не вдалося визначити інтерпретацію оператора порівняння рядків %s" + +#: parser/parse_expr.c:2995 +#, c-format +msgid "Row comparison operators must be associated with btree operator families." +msgstr "Оператори порівняння рядків повинні бути пов'язанні з сімейством операторів btree." + +#: parser/parse_expr.c:3036 +#, c-format +msgid "There are multiple equally-plausible candidates." +msgstr "Існує декілька рівноцінних кандидатів." + +#: parser/parse_expr.c:3129 +#, c-format +msgid "IS DISTINCT FROM requires = operator to yield boolean" +msgstr "IS DISTINCT FROM, потребує = щоб оператор повертав логічне значення" + +#: parser/parse_expr.c:3448 parser/parse_expr.c:3466 +#, c-format +msgid "operator precedence change: %s is now lower precedence than %s" +msgstr "пріоритет оператора змінен: %s тепер має меньший пріоритет, ніж %s" + +#: parser/parse_func.c:191 +#, c-format +msgid "argument name \"%s\" used more than once" +msgstr "ім’я аргументу \"%s\" використовується неодноразово" + +#: parser/parse_func.c:202 +#, c-format +msgid "positional argument cannot follow named argument" +msgstr "позиційний аргумент не може стежити за іменованим аргументомв" + +#: parser/parse_func.c:284 parser/parse_func.c:2243 +#, c-format +msgid "%s is not a procedure" +msgstr "%s не є процедурою" + +#: parser/parse_func.c:288 +#, c-format +msgid "To call a function, use SELECT." +msgstr "Щоб викликати функцію, використайте SELECT." + +#: parser/parse_func.c:294 +#, c-format +msgid "%s is a procedure" +msgstr "%s - процедура" + +#: parser/parse_func.c:298 +#, c-format +msgid "To call a procedure, use CALL." +msgstr "Щоб викликати процедуру, використайте CALL." + +#: parser/parse_func.c:312 +#, c-format +msgid "%s(*) specified, but %s is not an aggregate function" +msgstr "%s(*) вказано, але %s не є агрегатною функцією" + +#: parser/parse_func.c:319 +#, c-format +msgid "DISTINCT specified, but %s is not an aggregate function" +msgstr "DISTINCT вказано, але %s не є агрегатною функцією" + +#: parser/parse_func.c:325 +#, c-format +msgid "WITHIN GROUP specified, but %s is not an aggregate function" +msgstr "WITHIN GROUP вказано, але %s не є агрегатною функцією" + +#: parser/parse_func.c:331 +#, c-format +msgid "ORDER BY specified, but %s is not an aggregate function" +msgstr "ORDER BY вказано, але %s не є агрегатною функцією" + +#: parser/parse_func.c:337 +#, c-format +msgid "FILTER specified, but %s is not an aggregate function" +msgstr "FILTER вказано, але %s не є агрегатною функцією" + +#: parser/parse_func.c:343 +#, c-format +msgid "OVER specified, but %s is not a window function nor an aggregate function" +msgstr "OVER вказано, але %s не є ні віконною функцією, ні агрегатною функцією" + +#: parser/parse_func.c:381 +#, c-format +msgid "WITHIN GROUP is required for ordered-set aggregate %s" +msgstr "Для сортувального агрегату %s необхідна WITHIN GROUP" + +#: parser/parse_func.c:387 +#, c-format +msgid "OVER is not supported for ordered-set aggregate %s" +msgstr "Сортувальний агрегат %s не підтримує OVER" + +#: parser/parse_func.c:418 parser/parse_func.c:447 +#, c-format +msgid "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." +msgstr "Є сортувальний агрегат %s, але він потребує %d прямих аргументів, а не %d." + +#: parser/parse_func.c:472 +#, c-format +msgid "To use the hypothetical-set aggregate %s, the number of hypothetical direct arguments (here %d) must match the number of ordering columns (here %d)." +msgstr "Для використання гіпотетичного агрегату %s кількість прямих гіпотетичних аргументів (тут %d) повинна відповідати кількості сортувальних стовпців (тут %d)." + +#: parser/parse_func.c:486 +#, c-format +msgid "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." +msgstr "Є сортувальний агрегат %s, але він потребує мінімум %d прямих аргументів." + +#: parser/parse_func.c:505 +#, c-format +msgid "%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP" +msgstr "%s не є сортувальним агрегатом, тому він не може мати WITHIN GROUP" + +#: parser/parse_func.c:518 +#, c-format +msgid "window function %s requires an OVER clause" +msgstr "віконна функція %s потребує речення OVER" + +#: parser/parse_func.c:525 +#, c-format +msgid "window function %s cannot have WITHIN GROUP" +msgstr "віконна функція %s не може матив WITHIN GROUP" + +#: parser/parse_func.c:554 +#, c-format +msgid "procedure %s is not unique" +msgstr "процедура %s не є унікальною" + +#: parser/parse_func.c:557 +#, c-format +msgid "Could not choose a best candidate procedure. You might need to add explicit type casts." +msgstr "Не вдалося обрати найкращу кандидатуру процедури. Можливо, вам слід додати явні приведення типів." + +#: parser/parse_func.c:563 +#, c-format +msgid "function %s is not unique" +msgstr "функція %s не є унікальною" + +#: parser/parse_func.c:566 +#, c-format +msgid "Could not choose a best candidate function. You might need to add explicit type casts." +msgstr "Не вдалося обрати найкращу кандидатуру функції. Можливо, вам слід додати явні приведення типів." + +#: parser/parse_func.c:605 +#, c-format +msgid "No aggregate function matches the given name and argument types. Perhaps you misplaced ORDER BY; ORDER BY must appear after all regular arguments of the aggregate." +msgstr "Агрегатну функцію з цим ім'ям і типами аргументів не знайдено. Можливо, ви невірно розмістили речення ORDER BY; речення ORDER BY повинно з'являтись після всіх звичайних аргументів агрегату." + +#: parser/parse_func.c:613 parser/parse_func.c:2286 +#, c-format +msgid "procedure %s does not exist" +msgstr "процедура %s не існує" + +#: parser/parse_func.c:616 +#, c-format +msgid "No procedure matches the given name and argument types. You might need to add explicit type casts." +msgstr "Процедуру з цим ім'ям і типами аргументів не знайдено. Можливо, вам слід додати явні приведення типів." + +#: parser/parse_func.c:625 +#, c-format +msgid "No function matches the given name and argument types. You might need to add explicit type casts." +msgstr "Функцію з цим ім'ям і типами аргументів не знайдено. Можливо, вам слід додати явні приведення типів." + +#: parser/parse_func.c:727 +#, c-format +msgid "VARIADIC argument must be an array" +msgstr "Аргумент VARIADIC повинен бути масивом" + +#: parser/parse_func.c:779 parser/parse_func.c:843 +#, c-format +msgid "%s(*) must be used to call a parameterless aggregate function" +msgstr " %s(*) треба використовувати для виклику агрегатної функції без параметрів" + +#: parser/parse_func.c:786 +#, c-format +msgid "aggregates cannot return sets" +msgstr "агрегатні функції не можуть повертати набори" + +#: parser/parse_func.c:801 +#, c-format +msgid "aggregates cannot use named arguments" +msgstr "агрегатні функції не можуть використовувати іменовані аргументи" + +#: parser/parse_func.c:833 +#, c-format +msgid "DISTINCT is not implemented for window functions" +msgstr "DISTINCT для віконних функції не реалізовано" + +#: parser/parse_func.c:853 +#, c-format +msgid "aggregate ORDER BY is not implemented for window functions" +msgstr "агрегатне речення ORDER BY для віконних функцій не реалізовано" + +#: parser/parse_func.c:862 +#, c-format +msgid "FILTER is not implemented for non-aggregate window functions" +msgstr "FILTER для неагрегатних віконних функцій не реалізовано" + +#: parser/parse_func.c:871 +#, c-format +msgid "window function calls cannot contain set-returning function calls" +msgstr "виклики віконних функцій не можуть містити виклики функцій, які повертають набори" + +#: parser/parse_func.c:879 +#, c-format +msgid "window functions cannot return sets" +msgstr "віконні функції не можуть повертати набори" + +#: parser/parse_func.c:2124 parser/parse_func.c:2315 +#, c-format +msgid "could not find a function named \"%s\"" +msgstr "не вдалося знайти функцію з іменем \"%s\"" + +#: parser/parse_func.c:2138 parser/parse_func.c:2333 +#, c-format +msgid "function name \"%s\" is not unique" +msgstr "ім’я функції \"%s\" не є унікальним" + +#: parser/parse_func.c:2140 parser/parse_func.c:2335 +#, c-format +msgid "Specify the argument list to select the function unambiguously." +msgstr "Укажіть список аргументів для однозначного вибору функції." + +#: parser/parse_func.c:2184 +#, c-format +msgid "procedures cannot have more than %d argument" +msgid_plural "procedures cannot have more than %d arguments" +msgstr[0] "процедури не можуть мати більш ніж %d аргументу" +msgstr[1] "процедури не можуть мати більш ніж %d аргументів" +msgstr[2] "процедури не можуть мати більш ніж %d аргументів" +msgstr[3] "процедури не можуть мати більш ніж %d аргументів" + +#: parser/parse_func.c:2233 +#, c-format +msgid "%s is not a function" +msgstr "%s не є функцією" + +#: parser/parse_func.c:2253 +#, c-format +msgid "function %s is not an aggregate" +msgstr "функція %s не є агрегатною" + +#: parser/parse_func.c:2281 +#, c-format +msgid "could not find a procedure named \"%s\"" +msgstr "не вдалося знайти процедуру з іменем \"%s\"" + +#: parser/parse_func.c:2295 +#, c-format +msgid "could not find an aggregate named \"%s\"" +msgstr "не вдалося знайти агрегат з ім'ям \"%s\"" + +#: parser/parse_func.c:2300 +#, c-format +msgid "aggregate %s(*) does not exist" +msgstr "агрегат %s (*) не існує" + +#: parser/parse_func.c:2305 +#, c-format +msgid "aggregate %s does not exist" +msgstr "агрегат %s не існує" + +#: parser/parse_func.c:2340 +#, c-format +msgid "procedure name \"%s\" is not unique" +msgstr "назва процедури \"%s\" не є унікальною" + +#: parser/parse_func.c:2342 +#, c-format +msgid "Specify the argument list to select the procedure unambiguously." +msgstr "Вкажіть список аргументів для однозначного вибору процедури." + +#: parser/parse_func.c:2347 +#, c-format +msgid "aggregate name \"%s\" is not unique" +msgstr "назва агрегатної функції \"%s\" не є унікальною" + +#: parser/parse_func.c:2349 +#, c-format +msgid "Specify the argument list to select the aggregate unambiguously." +msgstr "Вкажіть список аргументів для однозначного вибору агрегатної функції." + +#: parser/parse_func.c:2354 +#, c-format +msgid "routine name \"%s\" is not unique" +msgstr "назва підпрограми \"%s\" не є унікальною" + +#: parser/parse_func.c:2356 +#, c-format +msgid "Specify the argument list to select the routine unambiguously." +msgstr "Вкажіть список аргументів для однозначного вибору підпрограми." + +#: parser/parse_func.c:2411 +msgid "set-returning functions are not allowed in JOIN conditions" +msgstr "функції, що повертають множину, не можна застосовувати в умовах групування" + +#: parser/parse_func.c:2432 +msgid "set-returning functions are not allowed in policy expressions" +msgstr "функції, що повертають множину, не можна застосовувати у виразах політики" + +#: parser/parse_func.c:2448 +msgid "set-returning functions are not allowed in window definitions" +msgstr "функції, що повертають множину, не можна застосовувати у віконних визначеннях" + +#: parser/parse_func.c:2486 +msgid "set-returning functions are not allowed in check constraints" +msgstr "функції, що повертають множину, не можна застосовувати в обмеженнях Check" + +#: parser/parse_func.c:2490 +msgid "set-returning functions are not allowed in DEFAULT expressions" +msgstr "функції, що повертають множину, не можна застосовувати у стандартних виразах" + +#: parser/parse_func.c:2493 +msgid "set-returning functions are not allowed in index expressions" +msgstr "функції, що повертають множину, не можна застосовувати в індексних виразах" + +#: parser/parse_func.c:2496 +msgid "set-returning functions are not allowed in index predicates" +msgstr "функції, що повертають множину, не можна застосовувати в індексних предикатах" + +#: parser/parse_func.c:2499 +msgid "set-returning functions are not allowed in transform expressions" +msgstr "функції, що повертають множину, не можна застосовувати у виразах перетворення" + +#: parser/parse_func.c:2502 +msgid "set-returning functions are not allowed in EXECUTE parameters" +msgstr "функції, що повертають множину, не можна застосовуватив параметрах виконання" + +#: parser/parse_func.c:2505 +msgid "set-returning functions are not allowed in trigger WHEN conditions" +msgstr "функції, що повертають множину, не можна застосовувати в умовах для тригерів WHEN" + +#: parser/parse_func.c:2508 +msgid "set-returning functions are not allowed in partition bound" +msgstr "функції, що повертають множину не можна застосовувати в границі секції" + +#: parser/parse_func.c:2511 +msgid "set-returning functions are not allowed in partition key expressions" +msgstr "функції, що повертають множину, не можна застосовувати у виразах ключа розділення" + +#: parser/parse_func.c:2514 +msgid "set-returning functions are not allowed in CALL arguments" +msgstr "функції, що повертають множину, не можна застосовувати в аргументах Відеовикликів" + +#: parser/parse_func.c:2517 +msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" +msgstr "функції, що повертають множину не можна застосовувати в умовах COPY FROM WHERE" + +#: parser/parse_func.c:2520 +msgid "set-returning functions are not allowed in column generation expressions" +msgstr "функції, що повертають множину не можна застосовувати у виразах генерації стовпців" + +#: parser/parse_node.c:86 +#, c-format +msgid "target lists can have at most %d entries" +msgstr "цільові списки можуть мати максимум %d елементів" + +#: parser/parse_node.c:235 +#, c-format +msgid "cannot subscript type %s because it is not an array" +msgstr "не можливо вказати тип %s тому, що він не є масивом" + +#: parser/parse_node.c:340 parser/parse_node.c:377 +#, c-format +msgid "array subscript must have type integer" +msgstr "індекс елементу масиву має бути цілим числом" + +#: parser/parse_node.c:408 +#, c-format +msgid "array assignment requires type %s but expression is of type %s" +msgstr "для присвоєння масиву потрібен тип %s, але вираз має тип %s" + +#: parser/parse_oper.c:125 parser/parse_oper.c:724 utils/adt/regproc.c:521 +#: utils/adt/regproc.c:705 +#, c-format +msgid "operator does not exist: %s" +msgstr "оператор не існує: %s" + +#: parser/parse_oper.c:224 +#, c-format +msgid "Use an explicit ordering operator or modify the query." +msgstr "Використати явний оператор сортування або змінити запит." + +#: parser/parse_oper.c:480 +#, c-format +msgid "operator requires run-time type coercion: %s" +msgstr "оператор вимагає приведення типів під час виконання: %s" + +#: parser/parse_oper.c:716 +#, c-format +msgid "operator is not unique: %s" +msgstr "оператор не є унікальним: %s" + +#: parser/parse_oper.c:718 +#, c-format +msgid "Could not choose a best candidate operator. You might need to add explicit type casts." +msgstr "Не вдалося вибрати найкращу кандидатуру оператора. Вам, можливо треба додати явні приведення типів." + +#: parser/parse_oper.c:727 +#, c-format +msgid "No operator matches the given name and argument type. You might need to add an explicit type cast." +msgstr "Жодний оператор не відповідає даному імені та типу аргументу. Вам, можливо, треба додати явне приведення типу." + +#: parser/parse_oper.c:729 +#, c-format +msgid "No operator matches the given name and argument types. You might need to add explicit type casts." +msgstr "Жодний оператор не відповідає даному імені та типу аргументу. Вам, можливо, треба додати явні приведення типів." + +#: parser/parse_oper.c:790 parser/parse_oper.c:912 +#, c-format +msgid "operator is only a shell: %s" +msgstr "оператор є лише оболонкою: %s" + +#: parser/parse_oper.c:900 +#, c-format +msgid "op ANY/ALL (array) requires array on right side" +msgstr "op ANY/ALL (масив) вимагає масив справа" + +#: parser/parse_oper.c:942 +#, c-format +msgid "op ANY/ALL (array) requires operator to yield boolean" +msgstr "op ANY/ALL (масив) вимагає оператора для видання логічного типу" + +#: parser/parse_oper.c:947 +#, c-format +msgid "op ANY/ALL (array) requires operator not to return a set" +msgstr "op ANY/ALL (масив) вимагає оператора не для повернення множини" + +#: parser/parse_param.c:216 +#, c-format +msgid "inconsistent types deduced for parameter $%d" +msgstr "для параметру $%d виведені неузгоджені типи" + +#: parser/parse_relation.c:201 +#, c-format +msgid "table reference \"%s\" is ambiguous" +msgstr "посилання на таблицю \"%s\" неоднозначне" + +#: parser/parse_relation.c:245 +#, c-format +msgid "table reference %u is ambiguous" +msgstr "посилання на таблицю %u неоднозначне" + +#: parser/parse_relation.c:444 +#, c-format +msgid "table name \"%s\" specified more than once" +msgstr "ім'я таблиці \"%s\" вказано більше одного разу" + +#: parser/parse_relation.c:473 parser/parse_relation.c:3446 +#, c-format +msgid "invalid reference to FROM-clause entry for table \"%s\"" +msgstr "в елементі речення FROM неприпустиме посилання на таблицю \"%s\"" + +#: parser/parse_relation.c:477 parser/parse_relation.c:3451 +#, c-format +msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." +msgstr "Таблиця \"%s\" присутня в запиті, але посилатися на неї з цієї частини запиту не можна." + +#: parser/parse_relation.c:479 +#, c-format +msgid "The combining JOIN type must be INNER or LEFT for a LATERAL reference." +msgstr "Для посилання LATERAL тип JOIN повинен бути INNER або LEFT." + +#: parser/parse_relation.c:690 +#, c-format +msgid "system column \"%s\" reference in check constraint is invalid" +msgstr "недопустиме посилання системи стовпців \"%s\" в обмеженні Check" + +#: parser/parse_relation.c:699 +#, c-format +msgid "cannot use system column \"%s\" in column generation expression" +msgstr "використовувати системний стовпець \"%s\" у виразах генерації стовпців, не можна" + +#: parser/parse_relation.c:1170 parser/parse_relation.c:1620 +#: parser/parse_relation.c:2262 +#, c-format +msgid "table \"%s\" has %d columns available but %d columns specified" +msgstr "таблиця \"%s\" має %d доступних стовпців, але вказано %d стовпців" + +#: parser/parse_relation.c:1372 +#, c-format +msgid "There is a WITH item named \"%s\", but it cannot be referenced from this part of the query." +msgstr "Існує WITH елемент \"%s\" але на нього не можна посилатися з цієї частини запиту." + +#: parser/parse_relation.c:1374 +#, c-format +msgid "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." +msgstr "Використовувати WITH RECURSIVE, або перевпорядкувати елементи WITH, щоб видалити попередні посилання." + +#: parser/parse_relation.c:1747 +#, c-format +msgid "a column definition list is only allowed for functions returning \"record\"" +msgstr "список з визначенням стовпців дозволений лише для функцій, що повертають \"запис\"" + +#: parser/parse_relation.c:1756 +#, c-format +msgid "a column definition list is required for functions returning \"record\"" +msgstr "список з визначенням стовпців вимагається для функцій, що повертають \"запис\"" + +#: parser/parse_relation.c:1845 +#, c-format +msgid "function \"%s\" in FROM has unsupported return type %s" +msgstr "функція \"%s\" у FROM повертає тип, що не підтримується %s" + +#: parser/parse_relation.c:2054 +#, c-format +msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" +msgstr "VALUES списки \"%s\" мають %d доступних стовпців, але %d стовпців вказано" + +#: parser/parse_relation.c:2125 +#, c-format +msgid "joins can have at most %d columns" +msgstr "з'єднання можуть мати максимум %d стовпців" + +#: parser/parse_relation.c:2235 +#, c-format +msgid "WITH query \"%s\" does not have a RETURNING clause" +msgstr "WITH запит \"%s\" не має речення RETURNING" + +#: parser/parse_relation.c:3221 parser/parse_relation.c:3231 +#, c-format +msgid "column %d of relation \"%s\" does not exist" +msgstr "стовпець %d відношення \"%s\" не існує" + +#: parser/parse_relation.c:3449 +#, c-format +msgid "Perhaps you meant to reference the table alias \"%s\"." +msgstr "Можливо, малося на увазі посилання на псевдонім таблиці \"%s\"." + +#: parser/parse_relation.c:3457 +#, c-format +msgid "missing FROM-clause entry for table \"%s\"" +msgstr "таблиця \"%s\" відсутня в реченні FROM" + +#: parser/parse_relation.c:3509 +#, c-format +msgid "Perhaps you meant to reference the column \"%s.%s\"." +msgstr "Можливо, передбачалось посилання на стовпець \"%s.%s\"." + +#: parser/parse_relation.c:3511 +#, c-format +msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." +msgstr "Є стовпець з іменем \"%s\" в таблиці \"%s\", але на нього не можна посилатись з цієї частини запиту." + +#: parser/parse_relation.c:3528 +#, c-format +msgid "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." +msgstr "Можливо, передбачалось посилання на стовпець \"%s.%s\" або стовпець \"%s.%s\"." + +#: parser/parse_target.c:478 parser/parse_target.c:792 +#, c-format +msgid "cannot assign to system column \"%s\"" +msgstr "призначити значення системному стовпцю \"%s\" не можна" + +#: parser/parse_target.c:506 +#, c-format +msgid "cannot set an array element to DEFAULT" +msgstr "елементу масива не можна встановити значення DEFAULT" + +#: parser/parse_target.c:511 +#, c-format +msgid "cannot set a subfield to DEFAULT" +msgstr "підполю не можна встановити значення DEFAULT" + +#: parser/parse_target.c:584 +#, c-format +msgid "column \"%s\" is of type %s but expression is of type %s" +msgstr "стовпець \"%s\" має тип %s, а вираз %s" + +#: parser/parse_target.c:776 +#, c-format +msgid "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a composite type" +msgstr "призначити значення полю \"%s\" стовпця \"%s\" не можна, тому, що тип %s не є складеним типом" + +#: parser/parse_target.c:785 +#, c-format +msgid "cannot assign to field \"%s\" of column \"%s\" because there is no such column in data type %s" +msgstr "призначити значення полю \"%s\" стовпця \"%s\" не можна, тому, що в типі даних %s немає такого стовпця" + +#: parser/parse_target.c:864 +#, c-format +msgid "array assignment to \"%s\" requires type %s but expression is of type %s" +msgstr "для призначення масиву полю \"%s\" потрібен тип %s, але вираз має тип %s" + +#: parser/parse_target.c:874 +#, c-format +msgid "subfield \"%s\" is of type %s but expression is of type %s" +msgstr "підполе \"%s\" має тип %s, але вираз має тип %s" + +#: parser/parse_target.c:1295 +#, c-format +msgid "SELECT * with no tables specified is not valid" +msgstr "SELECT * повинен посилатись на таблиці" + +#: parser/parse_type.c:100 +#, c-format +msgid "improper %%TYPE reference (too few dotted names): %s" +msgstr "неправильне посилання %%TYPE (занадто мало компонентів): %s" + +#: parser/parse_type.c:122 +#, c-format +msgid "improper %%TYPE reference (too many dotted names): %s" +msgstr "неправильне посилання %%TYPE (занадто багато компонентів): %s" + +#: parser/parse_type.c:157 +#, c-format +msgid "type reference %s converted to %s" +msgstr "посилання на тип %s перетворене на тип %s" + +#: parser/parse_type.c:278 parser/parse_type.c:857 utils/cache/typcache.c:383 +#: utils/cache/typcache.c:437 +#, c-format +msgid "type \"%s\" is only a shell" +msgstr "тип \"%s\" є лише оболонкою" + +#: parser/parse_type.c:363 +#, c-format +msgid "type modifier is not allowed for type \"%s\"" +msgstr "тип \"%s\" не дозволяє використання модифікаторів" + +#: parser/parse_type.c:405 +#, c-format +msgid "type modifiers must be simple constants or identifiers" +msgstr "модифікатором типу повинна бути звичайна константа або ідентифікатор" + +#: parser/parse_type.c:721 parser/parse_type.c:820 +#, c-format +msgid "invalid type name \"%s\"" +msgstr "невірне ім'я типу \"%s\"" + +#: parser/parse_utilcmd.c:264 +#, c-format +msgid "cannot create partitioned table as inheritance child" +msgstr "створити секціоновану таблицю в якості нащадка не можна" + +#: parser/parse_utilcmd.c:428 +#, c-format +msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" +msgstr "%s створить неявну послідовність \"%s\" для послідовного стовпця \"%s.%s\"" + +#: parser/parse_utilcmd.c:559 +#, c-format +msgid "array of serial is not implemented" +msgstr "масиви послідовності не реалізовані" + +#: parser/parse_utilcmd.c:637 parser/parse_utilcmd.c:649 +#, c-format +msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" +msgstr "несумісні оголошення NULL/NOT NULL для стовпця \"%s\" таблиці \"%s\"" + +#: parser/parse_utilcmd.c:661 +#, c-format +msgid "multiple default values specified for column \"%s\" of table \"%s\"" +msgstr "для стовпця \"%s\" таблиці \"%s\" вказано декілька значень за замовчуванням" + +#: parser/parse_utilcmd.c:678 +#, c-format +msgid "identity columns are not supported on typed tables" +msgstr "ідентифікаційні стовпці не підтримуються в типізованих таблицях" + +#: parser/parse_utilcmd.c:682 +#, c-format +msgid "identity columns are not supported on partitions" +msgstr "ідентифікаційні стовпці не підтримуються з секціями" + +#: parser/parse_utilcmd.c:691 +#, c-format +msgid "multiple identity specifications for column \"%s\" of table \"%s\"" +msgstr "для стовпця \"%s\" таблиці \"%s\" властивість identity вказана неодноразово" + +#: parser/parse_utilcmd.c:711 +#, c-format +msgid "generated columns are not supported on typed tables" +msgstr "згенеровані стовпці не підтримуються в типізованих таблицях" + +#: parser/parse_utilcmd.c:715 +#, c-format +msgid "generated columns are not supported on partitions" +msgstr "згенеровані стовпці не підтримуються в секціях" + +#: parser/parse_utilcmd.c:720 +#, c-format +msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" +msgstr "для стовпця \"%s\" таблиці \"%s\" вказано декілька речень генерації" + +#: parser/parse_utilcmd.c:738 parser/parse_utilcmd.c:853 +#, c-format +msgid "primary key constraints are not supported on foreign tables" +msgstr "обмеження первинного ключа для сторонніх таблиць не підтримуються" + +#: parser/parse_utilcmd.c:747 parser/parse_utilcmd.c:863 +#, c-format +msgid "unique constraints are not supported on foreign tables" +msgstr "обмеження унікальності для сторонніх таблиць не підтримуються" + +#: parser/parse_utilcmd.c:792 +#, c-format +msgid "both default and identity specified for column \"%s\" of table \"%s\"" +msgstr "для стовпця \"%s\" таблиці \"%s\" вказано значення за замовчуванням і властивість identity" + +#: parser/parse_utilcmd.c:800 +#, c-format +msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" +msgstr "для стовпця \"%s\" таблиці \"%s\" вказано вираз за замовчуванням і вираз генерації" + +#: parser/parse_utilcmd.c:808 +#, c-format +msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" +msgstr "для стовпця \"%s\" таблиці \"%s\" вказано вираз ідентичності і вираз генерації" + +#: parser/parse_utilcmd.c:873 +#, c-format +msgid "exclusion constraints are not supported on foreign tables" +msgstr "обмеження-виключення для сторонніх таблиць не підтримуються" + +#: parser/parse_utilcmd.c:879 +#, c-format +msgid "exclusion constraints are not supported on partitioned tables" +msgstr "обмеження-виключення для секціонованих таблиць не підтримуються" + +#: parser/parse_utilcmd.c:944 +#, c-format +msgid "LIKE is not supported for creating foreign tables" +msgstr "LIKE не підтримується при створенні сторонніх таблиць" + +#: parser/parse_utilcmd.c:1704 parser/parse_utilcmd.c:1813 +#, c-format +msgid "Index \"%s\" contains a whole-row table reference." +msgstr "Індекс \"%s\" містить посилання на таблицю на весь рядок." + +#: parser/parse_utilcmd.c:2163 +#, c-format +msgid "cannot use an existing index in CREATE TABLE" +msgstr "у CREATE TABLE не можна використовувати існуючий індекс" + +#: parser/parse_utilcmd.c:2183 +#, c-format +msgid "index \"%s\" is already associated with a constraint" +msgstr "індекс \"%s\" вже пов'язаний з обмеженням" + +#: parser/parse_utilcmd.c:2198 +#, c-format +msgid "index \"%s\" is not valid" +msgstr "індекс \"%s\" не є припустимим" + +#: parser/parse_utilcmd.c:2204 +#, c-format +msgid "\"%s\" is not a unique index" +msgstr "\"%s\" не є унікальним індексом" + +#: parser/parse_utilcmd.c:2205 parser/parse_utilcmd.c:2212 +#: parser/parse_utilcmd.c:2219 parser/parse_utilcmd.c:2296 +#, c-format +msgid "Cannot create a primary key or unique constraint using such an index." +msgstr "Створити первинний ключ або обмеження унікальності, використовуючи такий індекс, не можна." + +#: parser/parse_utilcmd.c:2211 +#, c-format +msgid "index \"%s\" contains expressions" +msgstr "індекс \"%s\" містить вирази" + +#: parser/parse_utilcmd.c:2218 +#, c-format +msgid "\"%s\" is a partial index" +msgstr "\"%s\" є частковим індексом" + +#: parser/parse_utilcmd.c:2230 +#, c-format +msgid "\"%s\" is a deferrable index" +msgstr "\"%s\" є індексом, що відкладається" + +#: parser/parse_utilcmd.c:2231 +#, c-format +msgid "Cannot create a non-deferrable constraint using a deferrable index." +msgstr "Створити обмеження, що не відкладається, використовуючи індекс, що відкладається, не можна." + +#: parser/parse_utilcmd.c:2295 +#, c-format +msgid "index \"%s\" column number %d does not have default sorting behavior" +msgstr "індекс \"%s\" номер стовпця %d не має поведінки сортування за замовчуванням" + +#: parser/parse_utilcmd.c:2452 +#, c-format +msgid "column \"%s\" appears twice in primary key constraint" +msgstr "стовпець \"%s\" з'являється двічі в обмеженні первинного ключа" + +#: parser/parse_utilcmd.c:2458 +#, c-format +msgid "column \"%s\" appears twice in unique constraint" +msgstr "стовпець \"%s\" з'являється двічі в обмеженні унікальності" + +#: parser/parse_utilcmd.c:2811 +#, c-format +msgid "index expressions and predicates can refer only to the table being indexed" +msgstr "індекс-вирази й предикати можуть посилатись лише на індексовану таблицю" + +#: parser/parse_utilcmd.c:2857 +#, c-format +msgid "rules on materialized views are not supported" +msgstr "правила для матеріалізованих подань не підтримуються" + +#: parser/parse_utilcmd.c:2920 +#, c-format +msgid "rule WHERE condition cannot contain references to other relations" +msgstr "в умовах WHERE правила не можуть містити посилання на інші зв'язки" + +#: parser/parse_utilcmd.c:2994 +#, c-format +msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" +msgstr "правила з умовами WHERE можуть мати лише дії SELECT, INSERT, UPDATE або DELETE" + +#: parser/parse_utilcmd.c:3012 parser/parse_utilcmd.c:3113 +#: rewrite/rewriteHandler.c:502 rewrite/rewriteManip.c:1018 +#, c-format +msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" +msgstr "умовні оператори UNION/INTERSECT/EXCEPT не реалізовані" + +#: parser/parse_utilcmd.c:3030 +#, c-format +msgid "ON SELECT rule cannot use OLD" +msgstr "у правилі ON SELECT не можна використовувати OLD" + +#: parser/parse_utilcmd.c:3034 +#, c-format +msgid "ON SELECT rule cannot use NEW" +msgstr "у правилі ON SELECT не можна використовувати NEW" + +#: parser/parse_utilcmd.c:3043 +#, c-format +msgid "ON INSERT rule cannot use OLD" +msgstr "у правилі ON INSERT не можна використовувати OLD" + +#: parser/parse_utilcmd.c:3049 +#, c-format +msgid "ON DELETE rule cannot use NEW" +msgstr "у правилі ON DELETE не можна використовувати NEW" + +#: parser/parse_utilcmd.c:3077 +#, c-format +msgid "cannot refer to OLD within WITH query" +msgstr "у запиті WITH не можна посилатися на OLD" + +#: parser/parse_utilcmd.c:3084 +#, c-format +msgid "cannot refer to NEW within WITH query" +msgstr "у запиті WITH не можна посилатися на NEW" + +#: parser/parse_utilcmd.c:3542 +#, c-format +msgid "misplaced DEFERRABLE clause" +msgstr "речення DEFERRABLE розташовано неправильно" + +#: parser/parse_utilcmd.c:3547 parser/parse_utilcmd.c:3562 +#, c-format +msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" +msgstr "декілька речень DEFERRABLE/NOT DEFERRABLE не допускаються" + +#: parser/parse_utilcmd.c:3557 +#, c-format +msgid "misplaced NOT DEFERRABLE clause" +msgstr "речення NOT DEFERRABLE розташовано неправильно" + +#: parser/parse_utilcmd.c:3570 parser/parse_utilcmd.c:3596 gram.y:5593 +#, c-format +msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" +msgstr "обмеження, оголошене як INITIALLY DEFERRED, повинно бути оголошене як DEFERRABLE" + +#: parser/parse_utilcmd.c:3578 +#, c-format +msgid "misplaced INITIALLY DEFERRED clause" +msgstr "речення INITIALLY DEFERRED розташовано неправильно" + +#: parser/parse_utilcmd.c:3583 parser/parse_utilcmd.c:3609 +#, c-format +msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" +msgstr "декілька речень INITIALLY IMMEDIATE/DEFERRED не допускаються" + +#: parser/parse_utilcmd.c:3604 +#, c-format +msgid "misplaced INITIALLY IMMEDIATE clause" +msgstr "речення INITIALLY IMMEDIATE розташовано неправильно" + +#: parser/parse_utilcmd.c:3795 +#, c-format +msgid "CREATE specifies a schema (%s) different from the one being created (%s)" +msgstr "В CREATE вказана схема (%s), яка відрізняється від створюваної (%s)" + +#: parser/parse_utilcmd.c:3830 +#, c-format +msgid "\"%s\" is not a partitioned table" +msgstr "\"%s\" не є секціонованою таблицею" + +#: parser/parse_utilcmd.c:3837 +#, c-format +msgid "table \"%s\" is not partitioned" +msgstr "таблиця \"%s\" не є секційною" + +#: parser/parse_utilcmd.c:3844 +#, c-format +msgid "index \"%s\" is not partitioned" +msgstr "індекс \"%s\" не є секціонованим" + +#: parser/parse_utilcmd.c:3884 +#, c-format +msgid "a hash-partitioned table may not have a default partition" +msgstr "у геш-секціонованій таблиці не може бути розділу за замовчуванням" + +#: parser/parse_utilcmd.c:3901 +#, c-format +msgid "invalid bound specification for a hash partition" +msgstr "неприпустима вказівка границі для геш-секції" + +#: parser/parse_utilcmd.c:3907 partitioning/partbounds.c:4691 +#, c-format +msgid "modulus for hash partition must be a positive integer" +msgstr "модуль для геш-секції повинен бути додатним цілим" + +#: parser/parse_utilcmd.c:3914 partitioning/partbounds.c:4699 +#, c-format +msgid "remainder for hash partition must be less than modulus" +msgstr "залишок для геш-секції повинен бути меньшим, ніж модуль" + +#: parser/parse_utilcmd.c:3927 +#, c-format +msgid "invalid bound specification for a list partition" +msgstr "нерипустима вказівка границі для секції по списку" + +#: parser/parse_utilcmd.c:3980 +#, c-format +msgid "invalid bound specification for a range partition" +msgstr "неприпустима вказівка границі для секції діапазону" + +#: parser/parse_utilcmd.c:3986 +#, c-format +msgid "FROM must specify exactly one value per partitioning column" +msgstr "В FROM повинно вказуватися лише одне значення для стовпця секціонування" + +#: parser/parse_utilcmd.c:3990 +#, c-format +msgid "TO must specify exactly one value per partitioning column" +msgstr "В TO повинно вказуватися лише одне значення для стовпця секціонування" + +#: parser/parse_utilcmd.c:4104 +#, c-format +msgid "cannot specify NULL in range bound" +msgstr "вказати NULL в діапазоні границі не можна" + +#: parser/parse_utilcmd.c:4153 +#, c-format +msgid "every bound following MAXVALUE must also be MAXVALUE" +msgstr "за кожною границею MAXVALUE повинні бути лише границі MAXVALUE" + +#: parser/parse_utilcmd.c:4160 +#, c-format +msgid "every bound following MINVALUE must also be MINVALUE" +msgstr "за кожною границею MINVALUE повинні бути лише границі MINVALUE" + +#: parser/parse_utilcmd.c:4202 +#, c-format +msgid "could not determine which collation to use for partition bound expression" +msgstr "не вдалося визначити яке правило сортування використати для виразу границі розділу" + +#: parser/parse_utilcmd.c:4219 +#, c-format +msgid "collation of partition bound value for column \"%s\" does not match partition key collation \"%s\"" +msgstr "значення параметру сортування границі секції для стовпця \"%s\" не відповідає параметру сортування ключа секціонування \"%s\"" + +#: parser/parse_utilcmd.c:4236 +#, c-format +msgid "specified value cannot be cast to type %s for column \"%s\"" +msgstr "вказане значення не можна привести до типу %s для стовпця \"%s\"" + +#: parser/parser.c:228 +msgid "UESCAPE must be followed by a simple string literal" +msgstr "UESCAPE повинен відстежуватись простим літеральним рядком" + +#: parser/parser.c:233 +msgid "invalid Unicode escape character" +msgstr "неприпустимий символ спеціального коду Unicode" + +#: parser/parser.c:302 scan.l:1329 +#, c-format +msgid "invalid Unicode escape value" +msgstr "неприпустиме значення спеціального коду Unicode" + +#: parser/parser.c:449 scan.l:677 +#, c-format +msgid "invalid Unicode escape" +msgstr "неприпустимий спеціальний код Unicode" + +#: parser/parser.c:450 +#, c-format +msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." +msgstr "Спеціальні символи Unicode повинні бути \\XXXX або \\+XXXXXX." + +#: parser/parser.c:478 scan.l:638 scan.l:654 scan.l:670 +#, c-format +msgid "invalid Unicode surrogate pair" +msgstr "неприпустима сурогатна пара Unicode" + +#: parser/scansup.c:203 +#, c-format +msgid "identifier \"%s\" will be truncated to \"%s\"" +msgstr "ідентифікатор \"%s\" буде скорочено до \"%s\"" + +#: partitioning/partbounds.c:2831 +#, c-format +msgid "partition \"%s\" conflicts with existing default partition \"%s\"" +msgstr "існують конфлікти між розділом \"%s\" та існуючим розділом за замовчуванням \"%s\"" + +#: partitioning/partbounds.c:2890 +#, c-format +msgid "every hash partition modulus must be a factor of the next larger modulus" +msgstr "модуль кожної геш-секції повинен бути дільником наступних більших модулів" + +#: partitioning/partbounds.c:2986 +#, c-format +msgid "empty range bound specified for partition \"%s\"" +msgstr "для секції \"%s\" вказані границі, які утворюють пустий діапазон" + +#: partitioning/partbounds.c:2988 +#, c-format +msgid "Specified lower bound %s is greater than or equal to upper bound %s." +msgstr "Вказана нижня границя %s більша або дорівнює верхній границі %s." + +#: partitioning/partbounds.c:3085 +#, c-format +msgid "partition \"%s\" would overlap partition \"%s\"" +msgstr "секція \"%s\" буде перекривати секцію \"%s\"" + +#: partitioning/partbounds.c:3202 +#, c-format +msgid "skipped scanning foreign table \"%s\" which is a partition of default partition \"%s\"" +msgstr "пропущено сканування зовнішньої таблиці \"%s\" яка є секцією секції за замовчуванням \"%s\"" + +#: partitioning/partbounds.c:4695 +#, c-format +msgid "remainder for hash partition must be a non-negative integer" +msgstr "залишок для геш-секції повинен бути не від'ємним цілим" + +#: partitioning/partbounds.c:4722 +#, c-format +msgid "\"%s\" is not a hash partitioned table" +msgstr "\"%s\" не є геш-секціонованою таблицею" + +#: partitioning/partbounds.c:4733 partitioning/partbounds.c:4850 +#, c-format +msgid "number of partitioning columns (%d) does not match number of partition keys provided (%d)" +msgstr "кількість секціонованих стовпців (%d) не дорівнює кількості наданих ключів секціонування (%d)" + +#: partitioning/partbounds.c:4755 partitioning/partbounds.c:4787 +#, c-format +msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" +msgstr "стовпець %d ключа секціонування має тип \"%s\", але для нього вказано значення типу \"%s\"" + +#: port/pg_sema.c:209 port/pg_shmem.c:640 port/posix_sema.c:209 +#: port/sysv_sema.c:327 port/sysv_shmem.c:640 +#, c-format +msgid "could not stat data directory \"%s\": %m" +msgstr "не вдалося встановити дані каталогу \"%s\": %m" + +#: port/pg_shmem.c:216 port/sysv_shmem.c:216 +#, c-format +msgid "could not create shared memory segment: %m" +msgstr "не вдалося створити сегмент спільної пам'яті: %m" + +#: port/pg_shmem.c:217 port/sysv_shmem.c:217 +#, c-format +msgid "Failed system call was shmget(key=%lu, size=%zu, 0%o)." +msgstr "Помилка в системному виклику shmget (ключ=%lu, розмір=%zu, 0%o)." + +#: port/pg_shmem.c:221 port/sysv_shmem.c:221 +#, c-format +msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter, or possibly that it is less than your kernel's SHMMIN parameter.\n" +"The PostgreSQL documentation contains more information about shared memory configuration." +msgstr "Ця помилка зазвичай означає, що запит PostgreSQL для сегменту спільної пам'яті перевищує параметр SHMMAX вашого ядра, або можливо що він менший за параметр SHMMIN вашого ядра.\n" +"Більше інформації про налаштування спільної пам'яті міститься в інструкції PostgreSQL." + +#: port/pg_shmem.c:228 port/sysv_shmem.c:228 +#, c-format +msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMALL parameter. You might need to reconfigure the kernel with larger SHMALL.\n" +"The PostgreSQL documentation contains more information about shared memory configuration." +msgstr "Ця помилка зазвичай означає, що запит PostgreSQL для сегменту спільної пам'яті перевищує параметр SHMALL вашого ядра. Можливо, вам слід переналаштувати ваше ядро, збільшивши параметр SHMALL.\n" +"Більше інформації про налаштування спільної пам'яті міститься в інструкції PostgreSQL." + +#: port/pg_shmem.c:234 port/sysv_shmem.c:234 +#, c-format +msgid "This error does *not* mean that you have run out of disk space. It occurs either if all available shared memory IDs have been taken, in which case you need to raise the SHMMNI parameter in your kernel, or because the system's overall limit for shared memory has been reached.\n" +"The PostgreSQL documentation contains more information about shared memory configuration." +msgstr "Ця помилка НЕ означає, що на диску немає місця. Ймовірніше за все, були зайняті всі доступні ID спільної пам'яті, в такому випадку вам потрібно підвищити параметр SHMMNI у вашому ядрі, або перевищено граничний розмір спільної пам'яті.\n" +"Детальна інформація про налаштування спільної пам'яті міститься в інструкції PostgreSQL." + +#: port/pg_shmem.c:578 port/sysv_shmem.c:578 +#, c-format +msgid "could not map anonymous shared memory: %m" +msgstr "не вдалося показати анонімну спільну пам'ять: %m" + +#: port/pg_shmem.c:580 port/sysv_shmem.c:580 +#, c-format +msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently %zu bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections." +msgstr "Ця помилка зазвичай означає, що запит PostgreSQL для сегменту спільної пам'яті перевищує об'єм доступної фізичної або віртуальної пам'яті або гігантских сторінок. Щоб зменшити розмір запиту (поточний: %zu байтів), зменшіть використання спільної пам'яті PostgreSQL, можливо зменшив shared_buffers або max_connections." + +#: port/pg_shmem.c:648 port/sysv_shmem.c:648 +#, c-format +msgid "huge pages not supported on this platform" +msgstr "величезні сторінки на цій плтаформі не підтримуються" + +#: port/pg_shmem.c:709 port/sysv_shmem.c:709 utils/init/miscinit.c:1137 +#, c-format +msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" +msgstr "раніше виділений блок спільної пам'яті (ключ %lu, ідентифікатор %lu) все ще використовується" + +#: port/pg_shmem.c:712 port/sysv_shmem.c:712 utils/init/miscinit.c:1139 +#, c-format +msgid "Terminate any old server processes associated with data directory \"%s\"." +msgstr "Припинити будь-які старі серверні процеси, пов'язані з каталогом даних \"%s\"." + +#: port/sysv_sema.c:124 +#, c-format +msgid "could not create semaphores: %m" +msgstr "не вдалося створити семафори: %m" + +#: port/sysv_sema.c:125 +#, c-format +msgid "Failed system call was semget(%lu, %d, 0%o)." +msgstr "Помилка системного виклику semget(%lu, %d, 0%o)." + +#: port/sysv_sema.c:129 +#, c-format +msgid "This error does *not* mean that you have run out of disk space. It occurs when either the system limit for the maximum number of semaphore sets (SEMMNI), or the system wide maximum number of semaphores (SEMMNS), would be exceeded. You need to raise the respective kernel parameter. Alternatively, reduce PostgreSQL's consumption of semaphores by reducing its max_connections parameter.\n" +"The PostgreSQL documentation contains more information about configuring your system for PostgreSQL." +msgstr "Ця помилка НЕ означає, що на диску немає місця. Ймовірніше за все перевищено ліміт числа встановлених семафорів (SEMMNI), або загального числа семафорів (SEMMNS) в системі. Вам потрібно збільшити відповідний параметр ядра. Інший спосіб - зменшити споживання PostgreSQL в семафорах, зменшивши параметр max_connections.\n" +"Більше інформації про налаштування вашої системи для PostgreSQL міститься в інструкції PostgreSQL." + +#: port/sysv_sema.c:159 +#, c-format +msgid "You possibly need to raise your kernel's SEMVMX value to be at least %d. Look into the PostgreSQL documentation for details." +msgstr "Можливо, вам потрібно збілшити значення SEMVMX вашого ядра, мінімум до %d. Детальніше про це написано в інструкції PostgreSQL." + +#: port/win32/crashdump.c:121 +#, c-format +msgid "could not load dbghelp.dll, cannot write crash dump\n" +msgstr "не вдалося завантажити dbghelp.dll, записати аварійний дамп неможливо\n" + +#: port/win32/crashdump.c:129 +#, c-format +msgid "could not load required functions in dbghelp.dll, cannot write crash dump\n" +msgstr "не вдалося завантажити функції, що вимагалися, у dbghelp.dll, записати аварійний дамп неможливо\n" + +#: port/win32/crashdump.c:160 +#, c-format +msgid "could not open crash dump file \"%s\" for writing: error code %lu\n" +msgstr "не вдалося відкрити файл аварійного дампу \"%s\" для написання: код помилки %lu\n" + +#: port/win32/crashdump.c:167 +#, c-format +msgid "wrote crash dump to file \"%s\"\n" +msgstr "аварійний дамп записано у фай \"%s\"\n" + +#: port/win32/crashdump.c:169 +#, c-format +msgid "could not write crash dump to file \"%s\": error code %lu\n" +msgstr "не вдалося записати аварійний дамп у файл \"%s\": код помилки %lu\n" + +#: port/win32/signal.c:196 +#, c-format +msgid "could not create signal listener pipe for PID %d: error code %lu" +msgstr "не вдалося створити канал сигнального прослуховувача для PID %d: код помилки %lu" + +#: port/win32/signal.c:251 +#, c-format +msgid "could not create signal listener pipe: error code %lu; retrying\n" +msgstr "не вдалося створити канал сигнального прослуховувача: код помилки %lu; триває повторна спроба\n" + +#: port/win32_sema.c:104 +#, c-format +msgid "could not create semaphore: error code %lu" +msgstr "не вдалося створити семафори: код помилки %lu" + +#: port/win32_sema.c:180 +#, c-format +msgid "could not lock semaphore: error code %lu" +msgstr "не вдалося заблокувати семафор: код помилки %lu" + +#: port/win32_sema.c:200 +#, c-format +msgid "could not unlock semaphore: error code %lu" +msgstr "не вдалося розблокувати семафор: код помилки %lu" + +#: port/win32_sema.c:230 +#, c-format +msgid "could not try-lock semaphore: error code %lu" +msgstr "не вдалося спробувати заблокувати семафор: код помилки %lu" + +#: port/win32_shmem.c:144 port/win32_shmem.c:152 port/win32_shmem.c:164 +#: port/win32_shmem.c:179 +#, c-format +msgid "could not enable Lock Pages in Memory user right: error code %lu" +msgstr "не вдалося активізувати право користувача на блокування сторінок у пам’яті: код помилки %lu" + +#: port/win32_shmem.c:145 port/win32_shmem.c:153 port/win32_shmem.c:165 +#: port/win32_shmem.c:180 +#, c-format +msgid "Failed system call was %s." +msgstr "Помилка системного виклику %s." + +#: port/win32_shmem.c:175 +#, c-format +msgid "could not enable Lock Pages in Memory user right" +msgstr "не вдалося активізувати право користувача на блокування сторінок в пам'яті" + +#: port/win32_shmem.c:176 +#, c-format +msgid "Assign Lock Pages in Memory user right to the Windows user account which runs PostgreSQL." +msgstr "Призначити право користувача на блокування сторінок в пам'яті для облікового запису користувача Windows, що запускає PostgreSQL." + +#: port/win32_shmem.c:233 +#, c-format +msgid "the processor does not support large pages" +msgstr "процесор не підтримує великі сторінки" + +#: port/win32_shmem.c:235 port/win32_shmem.c:240 +#, c-format +msgid "disabling huge pages" +msgstr "відключення величезних сторінок" + +#: port/win32_shmem.c:302 port/win32_shmem.c:338 port/win32_shmem.c:356 +#, c-format +msgid "could not create shared memory segment: error code %lu" +msgstr "не вдалося створити сегмент спільної пам'яті: код помилки %lu" + +#: port/win32_shmem.c:303 +#, c-format +msgid "Failed system call was CreateFileMapping(size=%zu, name=%s)." +msgstr "Помилка системного виклику CreateFileMapping(розмір=%zu, ім'я=%s)." + +#: port/win32_shmem.c:328 +#, c-format +msgid "pre-existing shared memory block is still in use" +msgstr "раніше створений блок спільної пам'яті все ще використовується" + +#: port/win32_shmem.c:329 +#, c-format +msgid "Check if there are any old server processes still running, and terminate them." +msgstr "Перевірити, якщо будь-які старі серверні процеси все ще працюють, та завершити їх." + +#: port/win32_shmem.c:339 +#, c-format +msgid "Failed system call was DuplicateHandle." +msgstr "Помилка в системному виклику DuplicateHandle." + +#: port/win32_shmem.c:357 +#, c-format +msgid "Failed system call was MapViewOfFileEx." +msgstr "Помилка в системному виклику MapViewOfFileEx." + +#: postmaster/autovacuum.c:406 +#, c-format +msgid "could not fork autovacuum launcher process: %m" +msgstr "не вдалося породити процес запуску автоочистки: %m" + +#: postmaster/autovacuum.c:442 +#, c-format +msgid "autovacuum launcher started" +msgstr "процес запуску автоочистки почався" + +#: postmaster/autovacuum.c:839 +#, c-format +msgid "autovacuum launcher shutting down" +msgstr "процес запуску автоочитски завершується" + +#: postmaster/autovacuum.c:1477 +#, c-format +msgid "could not fork autovacuum worker process: %m" +msgstr "не вдалося породити робочий процес автоочитски: %m" + +#: postmaster/autovacuum.c:1686 +#, c-format +msgid "autovacuum: processing database \"%s\"" +msgstr "автоочистка: обробка бази даних \"%s\"" + +#: postmaster/autovacuum.c:2256 +#, c-format +msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" +msgstr "автоочистка: видалення застарілої тимчасової таблиці \"%s.%s.%s\"" + +#: postmaster/autovacuum.c:2485 +#, c-format +msgid "automatic vacuum of table \"%s.%s.%s\"" +msgstr "автоматична очистка таблиці \"%s.%s.%s\"" + +#: postmaster/autovacuum.c:2488 +#, c-format +msgid "automatic analyze of table \"%s.%s.%s\"" +msgstr "автоматичний аналіз таблиці \"%s.%s.%s\"" + +#: postmaster/autovacuum.c:2681 +#, c-format +msgid "processing work entry for relation \"%s.%s.%s\"" +msgstr "обробка робочого введення для відношення \"%s.%s.%s\"" + +#: postmaster/autovacuum.c:3285 +#, c-format +msgid "autovacuum not started because of misconfiguration" +msgstr "автоочистку не запущено через неправильну конфігурацію" + +#: postmaster/autovacuum.c:3286 +#, c-format +msgid "Enable the \"track_counts\" option." +msgstr "Активувати параметр \"track_counts\"." + +#: postmaster/bgworker.c:394 postmaster/bgworker.c:841 +#, c-format +msgid "registering background worker \"%s\"" +msgstr "реєстрація фонового виконавця \"%s\"" + +#: postmaster/bgworker.c:426 +#, c-format +msgid "unregistering background worker \"%s\"" +msgstr "розреєстрація фонового виконавця \"%s\"" + +#: postmaster/bgworker.c:591 +#, c-format +msgid "background worker \"%s\": must attach to shared memory in order to request a database connection" +msgstr "фоновий виконавець \"%s\": повинен підключатися до спільної пам'яті на замовлення для запиту підключення до бази даних" + +#: postmaster/bgworker.c:600 +#, c-format +msgid "background worker \"%s\": cannot request database access if starting at postmaster start" +msgstr "фоновий виконавець \"%s\": не може запитувати доступ до бази даних, якщо його запущено при старті адміністратора поштового сервісу" + +#: postmaster/bgworker.c:614 +#, c-format +msgid "background worker \"%s\": invalid restart interval" +msgstr "фоновий виконавець \"%s\": неприпустимий інтервал перезавантаження" + +#: postmaster/bgworker.c:629 +#, c-format +msgid "background worker \"%s\": parallel workers may not be configured for restart" +msgstr "фоновий виконавець\"%s\": паралельні виконавці не можуть бути налаштовані для перезавантаження" + +#: postmaster/bgworker.c:653 +#, c-format +msgid "terminating background worker \"%s\" due to administrator command" +msgstr "завершення фонового процесу \"%s\" по команді адміністратора" + +#: postmaster/bgworker.c:849 +#, c-format +msgid "background worker \"%s\": must be registered in shared_preload_libraries" +msgstr "фоновий процес \"%s\": повинен бути зареєстрований в shared_preload_libraries" + +#: postmaster/bgworker.c:861 +#, c-format +msgid "background worker \"%s\": only dynamic background workers can request notification" +msgstr "фоновий процес \"%s\": лише динамічні фонові процеси можуть запитувати сповіщення" + +#: postmaster/bgworker.c:876 +#, c-format +msgid "too many background workers" +msgstr "занадто багато фонових процесів" + +#: postmaster/bgworker.c:877 +#, c-format +msgid "Up to %d background worker can be registered with the current settings." +msgid_plural "Up to %d background workers can be registered with the current settings." +msgstr[0] "Максимальне можливе число фонового процесу при поточних параметрах: %d." +msgstr[1] "Максимальне можливе число фонових процесів при поточних параметрах: %d." +msgstr[2] "Максимальне можливе число фонових процесів при поточних параметрах: %d." +msgstr[3] "Максимальне можливе число фонових процесів при поточних параметрах: %d." + +#: postmaster/bgworker.c:881 +#, c-format +msgid "Consider increasing the configuration parameter \"max_worker_processes\"." +msgstr "Можливо, слід збільшити параметр конфігурації \"max_worker_processes\"." + +#: postmaster/checkpointer.c:418 +#, c-format +msgid "checkpoints are occurring too frequently (%d second apart)" +msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" +msgstr[0] "контрольні точки відбуваються занадто часто (через %d сек.)" +msgstr[1] "контрольні точки відбуваються занадто часто (через %d сек.)" +msgstr[2] "контрольні точки відбуваються занадто часто (через %d сек.)" +msgstr[3] "контрольні точки відбуваються занадто часто (через %d сек.)" + +#: postmaster/checkpointer.c:422 +#, c-format +msgid "Consider increasing the configuration parameter \"max_wal_size\"." +msgstr "Можливо, слід збільшити параметр конфігурації \"max_wal_size\"." + +#: postmaster/checkpointer.c:1032 +#, c-format +msgid "checkpoint request failed" +msgstr "збій при запиті контрольної точки" + +#: postmaster/checkpointer.c:1033 +#, c-format +msgid "Consult recent messages in the server log for details." +msgstr "Для деталей, зверніться до останніх повідомлень в протоколі серверу." + +#: postmaster/checkpointer.c:1217 +#, c-format +msgid "compacted fsync request queue from %d entries to %d entries" +msgstr "чергу запитів fsync стиснуто з %d елементів, до %d елементів" + +#: postmaster/pgarch.c:155 +#, c-format +msgid "could not fork archiver: %m" +msgstr "не вдалося породити процес архівації: %m" + +#: postmaster/pgarch.c:425 +#, c-format +msgid "archive_mode enabled, yet archive_command is not set" +msgstr "archive_mode активний, але archive_command не встановлена" + +#: postmaster/pgarch.c:447 +#, c-format +msgid "removed orphan archive status file \"%s\"" +msgstr "видалено залишковий файл статусу архіву \"%s\"" + +#: postmaster/pgarch.c:457 +#, c-format +msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" +msgstr "видалення залишкового файлу статусу архіву \"%s\" не вдалося занадто багато разів, пізніже спробуємо знову" + +#: postmaster/pgarch.c:493 +#, c-format +msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" +msgstr "архівація файлу випереджувальног журналювання \"%s\" не виконана багато разів, наступна спроба буде пізніже" + +#: postmaster/pgarch.c:594 +#, c-format +msgid "archive command failed with exit code %d" +msgstr "команда архівації завершилась помилкой з кодом %d" + +#: postmaster/pgarch.c:596 postmaster/pgarch.c:606 postmaster/pgarch.c:612 +#: postmaster/pgarch.c:621 +#, c-format +msgid "The failed archive command was: %s" +msgstr "Команда архівації з помилкою: %s" + +#: postmaster/pgarch.c:603 +#, c-format +msgid "archive command was terminated by exception 0x%X" +msgstr "команда архівації була перервана винятком 0x%X" + +#: postmaster/pgarch.c:605 postmaster/postmaster.c:3742 +#, c-format +msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." +msgstr "Опис цього Шістнадцяткового значення дивіться у включаємому C-файлі \"ntstatus.h\"." + +#: postmaster/pgarch.c:610 +#, c-format +msgid "archive command was terminated by signal %d: %s" +msgstr "команда архівації була перервана сигналом %d: %s" + +#: postmaster/pgarch.c:619 +#, c-format +msgid "archive command exited with unrecognized status %d" +msgstr "команда архівації завершена з нерозпізнаним статусом %d" + +#: postmaster/pgstat.c:419 +#, c-format +msgid "could not resolve \"localhost\": %s" +msgstr "не вдалося закрити \"localhost\": %s" + +#: postmaster/pgstat.c:442 +#, c-format +msgid "trying another address for the statistics collector" +msgstr "спроба іншої адреси для збирача статистики" + +#: postmaster/pgstat.c:451 +#, c-format +msgid "could not create socket for statistics collector: %m" +msgstr "не вдалося створити сокет для збирача статистики: %m" + +#: postmaster/pgstat.c:463 +#, c-format +msgid "could not bind socket for statistics collector: %m" +msgstr "не вдалося прив'язати сокет для збирача статистики: %m" + +#: postmaster/pgstat.c:474 +#, c-format +msgid "could not get address of socket for statistics collector: %m" +msgstr "не вдалося отримати адресу сокета для збирача статистики: %m" + +#: postmaster/pgstat.c:490 +#, c-format +msgid "could not connect socket for statistics collector: %m" +msgstr "не вдалося підключити сокет для збирача статистики: %m" + +#: postmaster/pgstat.c:511 +#, c-format +msgid "could not send test message on socket for statistics collector: %m" +msgstr "не вдалося надіслати тестове повідомлення в сокет для збирача статистики: %m" + +#: postmaster/pgstat.c:537 +#, c-format +msgid "select() failed in statistics collector: %m" +msgstr "помилка select() в збирачі статистики: %m" + +#: postmaster/pgstat.c:552 +#, c-format +msgid "test message did not get through on socket for statistics collector" +msgstr "тестове повідомлення не пройшло крізь сокет для збирача статистики" + +#: postmaster/pgstat.c:567 +#, c-format +msgid "could not receive test message on socket for statistics collector: %m" +msgstr "не вдалося отримати тестове повідомлення крізь сокет для збирача статистики: %m" + +#: postmaster/pgstat.c:577 +#, c-format +msgid "incorrect test message transmission on socket for statistics collector" +msgstr "неправильне передавання тестового повідомлення крізь сокет для збирача статистики" + +#: postmaster/pgstat.c:600 +#, c-format +msgid "could not set statistics collector socket to nonblocking mode: %m" +msgstr "не вдалося встановити сокет збирача статистики в неблокуючий режим: %m" + +#: postmaster/pgstat.c:642 +#, c-format +msgid "disabling statistics collector for lack of working socket" +msgstr "вимкнення збирача статистики відбувається через нестачі робочого сокету" + +#: postmaster/pgstat.c:789 +#, c-format +msgid "could not fork statistics collector: %m" +msgstr "не вдалося породити процес збирача статистики: %m" + +#: postmaster/pgstat.c:1376 +#, c-format +msgid "unrecognized reset target: \"%s\"" +msgstr "нерозпізнане відновлення мети: \"%s\"" + +#: postmaster/pgstat.c:1377 +#, c-format +msgid "Target must be \"archiver\" or \"bgwriter\"." +msgstr "Мета повинна бути \"archiver\" або \"bgwriter\"." + +#: postmaster/pgstat.c:4561 +#, c-format +msgid "could not read statistics message: %m" +msgstr "не вдалося прочитати повідомлення статистики: %m" + +#: postmaster/pgstat.c:4883 postmaster/pgstat.c:5046 +#, c-format +msgid "could not open temporary statistics file \"%s\": %m" +msgstr "не вдалося відкрити тимчасовий файл статистики \"%s\": %m" + +#: postmaster/pgstat.c:4956 postmaster/pgstat.c:5091 +#, c-format +msgid "could not write temporary statistics file \"%s\": %m" +msgstr "не вдалося записати в тимчасовий файл статистики \"%s\": %m" + +#: postmaster/pgstat.c:4965 postmaster/pgstat.c:5100 +#, c-format +msgid "could not close temporary statistics file \"%s\": %m" +msgstr "не вдалося закрити тимчасовий файл статистики \"%s\": %m" + +#: postmaster/pgstat.c:4973 postmaster/pgstat.c:5108 +#, c-format +msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" +msgstr "не вдалося перейменувати тимчасовий файл статистики з \"%s\" в \"%s\": %m" + +#: postmaster/pgstat.c:5205 postmaster/pgstat.c:5422 postmaster/pgstat.c:5576 +#, c-format +msgid "could not open statistics file \"%s\": %m" +msgstr "не вдалося відкрити файл статистики \"%s\": %m" + +#: postmaster/pgstat.c:5217 postmaster/pgstat.c:5227 postmaster/pgstat.c:5248 +#: postmaster/pgstat.c:5259 postmaster/pgstat.c:5281 postmaster/pgstat.c:5296 +#: postmaster/pgstat.c:5359 postmaster/pgstat.c:5434 postmaster/pgstat.c:5454 +#: postmaster/pgstat.c:5472 postmaster/pgstat.c:5488 postmaster/pgstat.c:5506 +#: postmaster/pgstat.c:5522 postmaster/pgstat.c:5588 postmaster/pgstat.c:5600 +#: postmaster/pgstat.c:5612 postmaster/pgstat.c:5623 postmaster/pgstat.c:5648 +#: postmaster/pgstat.c:5670 +#, c-format +msgid "corrupted statistics file \"%s\"" +msgstr "пошкоджений файл статистики \"%s\"" + +#: postmaster/pgstat.c:5799 +#, c-format +msgid "using stale statistics instead of current ones because stats collector is not responding" +msgstr "використовується застаріла статистика замість поточної, тому, що збирач статистики не відповідає" + +#: postmaster/pgstat.c:6129 +#, c-format +msgid "database hash table corrupted during cleanup --- abort" +msgstr "таблиця гешування бази даних пошкоджена під час очищення --- переривання" + +#: postmaster/postmaster.c:733 +#, c-format +msgid "%s: invalid argument for option -f: \"%s\"\n" +msgstr "%s: неприпустимий аргумент для параметру -f: \"%s\"\n" + +#: postmaster/postmaster.c:819 +#, c-format +msgid "%s: invalid argument for option -t: \"%s\"\n" +msgstr "%s: неприпустимий аргумент для параметру -t: \"%s\"\n" + +#: postmaster/postmaster.c:870 +#, c-format +msgid "%s: invalid argument: \"%s\"\n" +msgstr "%s: неприпустимий аргумент: \"%s\"\n" + +#: postmaster/postmaster.c:912 +#, c-format +msgid "%s: superuser_reserved_connections (%d) must be less than max_connections (%d)\n" +msgstr "%s: superuser_reserved_connections (%d) має бути меншим ніж max_connections (%d)\n" + +#: postmaster/postmaster.c:919 +#, c-format +msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" +msgstr "WAL архіватор не може бути активованим, коли wal_level \"мінімальний\"" + +#: postmaster/postmaster.c:922 +#, c-format +msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" +msgstr "Потокове передавання WAL (max_wal_senders > 0) вимагає wal_level \"replica\" або \"logical\"" + +#: postmaster/postmaster.c:930 +#, c-format +msgid "%s: invalid datetoken tables, please fix\n" +msgstr "%s: неприпустимі таблиці маркерів часу, будь-ласка виправіть\n" + +#: postmaster/postmaster.c:1047 +#, c-format +msgid "could not create I/O completion port for child queue" +msgstr "не вдалося створити завершений порт вводу-виводу для черги дітей" + +#: postmaster/postmaster.c:1113 +#, c-format +msgid "ending log output to stderr" +msgstr "завершення запису виводу Stderr" + +#: postmaster/postmaster.c:1114 +#, c-format +msgid "Future log output will go to log destination \"%s\"." +msgstr "В майбутньому запис виведення буде записуватися в призначення \"%s\"." + +#: postmaster/postmaster.c:1125 +#, c-format +msgid "starting %s" +msgstr "початок %s" + +#: postmaster/postmaster.c:1154 postmaster/postmaster.c:1252 +#: utils/init/miscinit.c:1597 +#, c-format +msgid "invalid list syntax in parameter \"%s\"" +msgstr "неприпустимий синтаксис списку в параметрі \"%s\"" + +#: postmaster/postmaster.c:1185 +#, c-format +msgid "could not create listen socket for \"%s\"" +msgstr "не вдалося створити сокет прослуховування для \"%s\"" + +#: postmaster/postmaster.c:1191 +#, c-format +msgid "could not create any TCP/IP sockets" +msgstr "не вдалося створити TCP/IP сокети" + +#: postmaster/postmaster.c:1274 +#, c-format +msgid "could not create Unix-domain socket in directory \"%s\"" +msgstr "не вдалося створити Unix-domain сокет в каталозі \"%s\"" + +#: postmaster/postmaster.c:1280 +#, c-format +msgid "could not create any Unix-domain sockets" +msgstr "не вдалося створити Unix-domain сокети" + +#: postmaster/postmaster.c:1292 +#, c-format +msgid "no socket created for listening" +msgstr "не створено жодного сокету для прослуховування" + +#: postmaster/postmaster.c:1323 +#, c-format +msgid "%s: could not change permissions of external PID file \"%s\": %s\n" +msgstr "%s: не вдалося змінити дозволи зовнішнього PID файлу \"%s\": %s\n" + +#: postmaster/postmaster.c:1327 +#, c-format +msgid "%s: could not write external PID file \"%s\": %s\n" +msgstr "%s: не вдалося записати зовнішній PID файл \"%s\": %s\n" + +#: postmaster/postmaster.c:1360 utils/init/postinit.c:215 +#, c-format +msgid "could not load pg_hba.conf" +msgstr "не вдалося завантажити pg_hba.conf" + +#: postmaster/postmaster.c:1386 +#, c-format +msgid "postmaster became multithreaded during startup" +msgstr "адміністратор поштового сервера став багатопотоковим під час запуску" + +#: postmaster/postmaster.c:1387 +#, c-format +msgid "Set the LC_ALL environment variable to a valid locale." +msgstr "Встановити в змінній середовища LC_ALL дійісну локаль." + +#: postmaster/postmaster.c:1488 +#, c-format +msgid "%s: could not locate matching postgres executable" +msgstr "%s: не вдалося знайти відповідний postgres файл, що виконується" + +#: postmaster/postmaster.c:1511 utils/misc/tzparser.c:340 +#, c-format +msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." +msgstr "Це може означати неповне встановлення PostgreSQL, або те, що файл \"%s\" було переміщено з його правильного розташування." + +#: postmaster/postmaster.c:1538 +#, c-format +msgid "%s: could not find the database system\n" +"Expected to find it in the directory \"%s\",\n" +"but could not open file \"%s\": %s\n" +msgstr "%s: не вдалося знайти систему бази даних\n" +"Очікувалося знайти її у каталозі \"%s\",\n" +"але не вдалося відкрити файл \"%s\": %s\n" + +#: postmaster/postmaster.c:1715 +#, c-format +msgid "select() failed in postmaster: %m" +msgstr "помилка вибирати() в адміністраторі поштового сервера: %m" + +#: postmaster/postmaster.c:1870 +#, c-format +msgid "performing immediate shutdown because data directory lock file is invalid" +msgstr "виконується негайне припинення роботи через неприпустимий файл блокування каталогу даних" + +#: postmaster/postmaster.c:1973 postmaster/postmaster.c:2004 +#, c-format +msgid "incomplete startup packet" +msgstr "неповний стартовий пакет" + +#: postmaster/postmaster.c:1985 +#, c-format +msgid "invalid length of startup packet" +msgstr "неприпустима довжина стартового пакету" + +#: postmaster/postmaster.c:2043 +#, c-format +msgid "failed to send SSL negotiation response: %m" +msgstr "помилка надсилання протоколу SSL в процесі відповіді зв'язування: %m" + +#: postmaster/postmaster.c:2074 +#, c-format +msgid "failed to send GSSAPI negotiation response: %m" +msgstr "помилка надсилання GSSAPI в процесі відповіді зв'язування: %m" + +#: postmaster/postmaster.c:2104 +#, c-format +msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" +msgstr "протокол інтерфейсу, що не підтримується, %u.%u: сервер підтримує %u.0 до %u.%u" + +#: postmaster/postmaster.c:2168 utils/misc/guc.c:6769 utils/misc/guc.c:6805 +#: utils/misc/guc.c:6875 utils/misc/guc.c:8198 utils/misc/guc.c:11044 +#: utils/misc/guc.c:11078 +#, c-format +msgid "invalid value for parameter \"%s\": \"%s\"" +msgstr "неприпустиме значення параметру \"%s\": \"%s\"" + +#: postmaster/postmaster.c:2171 +#, c-format +msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." +msgstr "Дійсні значення: \"false\", 0, \"true\", 1, \"database\"." + +#: postmaster/postmaster.c:2216 +#, c-format +msgid "invalid startup packet layout: expected terminator as last byte" +msgstr "неприпустима структура стартового пакету: останнім байтом очікувався термінатор" + +#: postmaster/postmaster.c:2254 +#, c-format +msgid "no PostgreSQL user name specified in startup packet" +msgstr "не вказано жодного ім'я користувача PostgreSQL у стартовому пакеті" + +#: postmaster/postmaster.c:2318 +#, c-format +msgid "the database system is starting up" +msgstr "система бази даних запускається" + +#: postmaster/postmaster.c:2323 +#, c-format +msgid "the database system is shutting down" +msgstr "система бази даних завершує роботу" + +#: postmaster/postmaster.c:2328 +#, c-format +msgid "the database system is in recovery mode" +msgstr "система бази даних у режимі відновлення" + +#: postmaster/postmaster.c:2333 storage/ipc/procarray.c:293 +#: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:362 +#, c-format +msgid "sorry, too many clients already" +msgstr "вибачте, вже забагато клієнтів" + +#: postmaster/postmaster.c:2423 +#, c-format +msgid "wrong key in cancel request for process %d" +msgstr "неправильний ключ в запиті скасування процесу %d" + +#: postmaster/postmaster.c:2435 +#, c-format +msgid "PID %d in cancel request did not match any process" +msgstr "PID %d в запиті на скасування не відповідає жодному процесу" + +#: postmaster/postmaster.c:2706 +#, c-format +msgid "received SIGHUP, reloading configuration files" +msgstr "отримано SIGHUP, поновлення файлів конфігурацій" + +#. translator: %s is a configuration file +#: postmaster/postmaster.c:2732 postmaster/postmaster.c:2736 +#, c-format +msgid "%s was not reloaded" +msgstr "%s не було перезавантажено" + +#: postmaster/postmaster.c:2746 +#, c-format +msgid "SSL configuration was not reloaded" +msgstr "Конфігурація протоколу SSL не була перезавантажена" + +#: postmaster/postmaster.c:2802 +#, c-format +msgid "received smart shutdown request" +msgstr "отримано smart запит на завершення роботи" + +#: postmaster/postmaster.c:2848 +#, c-format +msgid "received fast shutdown request" +msgstr "отримано швидкий запит на завершення роботи" + +#: postmaster/postmaster.c:2866 +#, c-format +msgid "aborting any active transactions" +msgstr "переривання будь-яких активних транзакцій" + +#: postmaster/postmaster.c:2890 +#, c-format +msgid "received immediate shutdown request" +msgstr "отримано запит на негайне завершення роботи" + +#: postmaster/postmaster.c:2965 +#, c-format +msgid "shutdown at recovery target" +msgstr "завершення роботи при відновленні мети" + +#: postmaster/postmaster.c:2983 postmaster/postmaster.c:3019 +msgid "startup process" +msgstr "стартовий процес" + +#: postmaster/postmaster.c:2986 +#, c-format +msgid "aborting startup due to startup process failure" +msgstr "переривання запуску через помилку в стартовому процесі" + +#: postmaster/postmaster.c:3061 +#, c-format +msgid "database system is ready to accept connections" +msgstr "система бази даних готова до отримання підключення" + +#: postmaster/postmaster.c:3082 +msgid "background writer process" +msgstr "процес фонового запису" + +#: postmaster/postmaster.c:3136 +msgid "checkpointer process" +msgstr "процес контрольних точок" + +#: postmaster/postmaster.c:3152 +msgid "WAL writer process" +msgstr "Процес запису WAL" + +#: postmaster/postmaster.c:3167 +msgid "WAL receiver process" +msgstr "Процес отримання WAL" + +#: postmaster/postmaster.c:3182 +msgid "autovacuum launcher process" +msgstr "процес запуску автоочистки" + +#: postmaster/postmaster.c:3197 +msgid "archiver process" +msgstr "процес архівації" + +#: postmaster/postmaster.c:3213 +msgid "statistics collector process" +msgstr "процес збору статистики" + +#: postmaster/postmaster.c:3227 +msgid "system logger process" +msgstr "процес системного журналювання" + +#: postmaster/postmaster.c:3291 +#, c-format +msgid "background worker \"%s\"" +msgstr "фоновий виконавець \"%s\"" + +#: postmaster/postmaster.c:3375 postmaster/postmaster.c:3395 +#: postmaster/postmaster.c:3402 postmaster/postmaster.c:3420 +msgid "server process" +msgstr "процес сервера" + +#: postmaster/postmaster.c:3474 +#, c-format +msgid "terminating any other active server processes" +msgstr "завершення будь-яких інших активних серверних процесів" + +#. translator: %s is a noun phrase describing a child process, such as +#. "server process" +#: postmaster/postmaster.c:3729 +#, c-format +msgid "%s (PID %d) exited with exit code %d" +msgstr "%s (PID %d) завершився з кодом виходу %d" + +#: postmaster/postmaster.c:3731 postmaster/postmaster.c:3743 +#: postmaster/postmaster.c:3753 postmaster/postmaster.c:3764 +#, c-format +msgid "Failed process was running: %s" +msgstr "Процес що завершився виконував дію: %s" + +#. translator: %s is a noun phrase describing a child process, such as +#. "server process" +#: postmaster/postmaster.c:3740 +#, c-format +msgid "%s (PID %d) was terminated by exception 0x%X" +msgstr "%s (PID %d) був перерваний винятком 0x%X" + +#. translator: %s is a noun phrase describing a child process, such as +#. "server process" +#: postmaster/postmaster.c:3750 +#, c-format +msgid "%s (PID %d) was terminated by signal %d: %s" +msgstr "%s (PID %d) був перерваний сигналом %d: %s" + +#. translator: %s is a noun phrase describing a child process, such as +#. "server process" +#: postmaster/postmaster.c:3762 +#, c-format +msgid "%s (PID %d) exited with unrecognized status %d" +msgstr "%s (PID %d) завершився з нерозпізнаним статусом %d" + +#: postmaster/postmaster.c:3970 +#, c-format +msgid "abnormal database system shutdown" +msgstr "ненормальне завершення роботи системи бази даних" + +#: postmaster/postmaster.c:4010 +#, c-format +msgid "all server processes terminated; reinitializing" +msgstr "усі серверні процеси перервано; повторна ініціалізація" + +#: postmaster/postmaster.c:4180 postmaster/postmaster.c:5599 +#: postmaster/postmaster.c:5986 +#, c-format +msgid "could not generate random cancel key" +msgstr "не вдалося згенерувати випадковий ключ скасування" + +#: postmaster/postmaster.c:4234 +#, c-format +msgid "could not fork new process for connection: %m" +msgstr "не вдалося породити нові процеси для з'єднання: %m" + +#: postmaster/postmaster.c:4276 +msgid "could not fork new process for connection: " +msgstr "не вдалося породити нові процеси для з'єднання: " + +#: postmaster/postmaster.c:4393 +#, c-format +msgid "connection received: host=%s port=%s" +msgstr "з'єднання отримано: хост=%s порт=%s" + +#: postmaster/postmaster.c:4398 +#, c-format +msgid "connection received: host=%s" +msgstr "з'єднання отримано: хост=%s" + +#: postmaster/postmaster.c:4668 +#, c-format +msgid "could not execute server process \"%s\": %m" +msgstr "не вдалося виконати серверні процеси \"%s\":%m" + +#: postmaster/postmaster.c:4827 +#, c-format +msgid "giving up after too many tries to reserve shared memory" +msgstr "кількість повторних спроб резервування спільної пам'яті досягло межі" + +#: postmaster/postmaster.c:4828 +#, c-format +msgid "This might be caused by ASLR or antivirus software." +msgstr "Це може бути викликано антивірусним програмним забезпеченням або ASLR." + +#: postmaster/postmaster.c:5034 +#, c-format +msgid "SSL configuration could not be loaded in child process" +msgstr "Не вдалося завантажити конфігурацію SSL в дочірній процес" + +#: postmaster/postmaster.c:5166 +#, c-format +msgid "Please report this to <%s>." +msgstr "Будь-ласка повідомте про це <%s>." + +#: postmaster/postmaster.c:5259 +#, c-format +msgid "database system is ready to accept read only connections" +msgstr "система бази даних готова до отримання підключення \"лише читати\"" + +#: postmaster/postmaster.c:5527 +#, c-format +msgid "could not fork startup process: %m" +msgstr "не вдалося породити стартовий процес: %m" + +#: postmaster/postmaster.c:5531 +#, c-format +msgid "could not fork background writer process: %m" +msgstr "не вдалося породити фоновий процес запису: %m" + +#: postmaster/postmaster.c:5535 +#, c-format +msgid "could not fork checkpointer process: %m" +msgstr "не вдалося породити процес контрольних точок: %m" + +#: postmaster/postmaster.c:5539 +#, c-format +msgid "could not fork WAL writer process: %m" +msgstr "не вдалося породити процес запису WAL: %m" + +#: postmaster/postmaster.c:5543 +#, c-format +msgid "could not fork WAL receiver process: %m" +msgstr "не вдалося породити процес отримання WAL: %m" + +#: postmaster/postmaster.c:5547 +#, c-format +msgid "could not fork process: %m" +msgstr "не вдалося породити процес: %m" + +#: postmaster/postmaster.c:5744 postmaster/postmaster.c:5767 +#, c-format +msgid "database connection requirement not indicated during registration" +msgstr "під час реєстрації не вказувалося, що вимагається підключення до бази даних" + +#: postmaster/postmaster.c:5751 postmaster/postmaster.c:5774 +#, c-format +msgid "invalid processing mode in background worker" +msgstr "неприпустимий режим обробки у фоновому записі" + +#: postmaster/postmaster.c:5847 +#, c-format +msgid "starting background worker process \"%s\"" +msgstr "початок процесу фонового запису \"%s\"" + +#: postmaster/postmaster.c:5859 +#, c-format +msgid "could not fork worker process: %m" +msgstr "не вдалося породити процес запису: %m" + +#: postmaster/postmaster.c:5972 +#, c-format +msgid "no slot available for new worker process" +msgstr "немає доступного слоту для нового робочого процесу" + +#: postmaster/postmaster.c:6307 +#, c-format +msgid "could not duplicate socket %d for use in backend: error code %d" +msgstr "не вдалося продублювати сокет %d для використання: код помилки %d" + +#: postmaster/postmaster.c:6339 +#, c-format +msgid "could not create inherited socket: error code %d\n" +msgstr "не вдалося створити успадкований сокет: код помилки %d\n" + +#: postmaster/postmaster.c:6368 +#, c-format +msgid "could not open backend variables file \"%s\": %s\n" +msgstr "не вдалося відкрити внутрішні змінні файли \"%s\": %s\n" + +#: postmaster/postmaster.c:6375 +#, c-format +msgid "could not read from backend variables file \"%s\": %s\n" +msgstr "не вдалося прочитати внутрішні змінні файли \"%s\": %s\n" + +#: postmaster/postmaster.c:6384 +#, c-format +msgid "could not remove file \"%s\": %s\n" +msgstr "не вдалося видалити файл \"%s\": %s\n" + +#: postmaster/postmaster.c:6401 +#, c-format +msgid "could not map view of backend variables: error code %lu\n" +msgstr "не вдалося відобразити файл серверних змінних: код помилки %lu\n" + +#: postmaster/postmaster.c:6410 +#, c-format +msgid "could not unmap view of backend variables: error code %lu\n" +msgstr "не вдалося вимкнути відображення файлу серверних змінних: код помилки %lu\n" + +#: postmaster/postmaster.c:6417 +#, c-format +msgid "could not close handle to backend parameter variables: error code %lu\n" +msgstr "не вдалося закрити покажчик файлу серверних змінних: код помилки %lu\n" + +#: postmaster/postmaster.c:6595 +#, c-format +msgid "could not read exit code for process\n" +msgstr "не вдалося прочитати код завершення процесу\n" + +#: postmaster/postmaster.c:6600 +#, c-format +msgid "could not post child completion status\n" +msgstr "не вдалося надіслати статус завершення нащадка\n" + +#: postmaster/syslogger.c:474 postmaster/syslogger.c:1153 +#, c-format +msgid "could not read from logger pipe: %m" +msgstr "не вдалося прочитати з каналу журналювання: %m" + +#: postmaster/syslogger.c:522 +#, c-format +msgid "logger shutting down" +msgstr "завершення журналювання" + +#: postmaster/syslogger.c:571 postmaster/syslogger.c:585 +#, c-format +msgid "could not create pipe for syslog: %m" +msgstr "не вдалося створити канал для syslog: %m" + +#: postmaster/syslogger.c:636 +#, c-format +msgid "could not fork system logger: %m" +msgstr "не вдалося породити процес системного журналювання: %m" + +#: postmaster/syslogger.c:672 +#, c-format +msgid "redirecting log output to logging collector process" +msgstr "переспрямовування виводу в протокол прочесу збирача протоколів" + +#: postmaster/syslogger.c:673 +#, c-format +msgid "Future log output will appear in directory \"%s\"." +msgstr "Наступні протоколи будуть виводитись в каталог \"%s\"." + +#: postmaster/syslogger.c:681 +#, c-format +msgid "could not redirect stdout: %m" +msgstr "не вдалося переспрямувати stdout: %m" + +#: postmaster/syslogger.c:686 postmaster/syslogger.c:703 +#, c-format +msgid "could not redirect stderr: %m" +msgstr "не вдалося переспрямувати stderr: %m" + +#: postmaster/syslogger.c:1108 +#, c-format +msgid "could not write to log file: %s\n" +msgstr "не вдалося записати до файлу протокола: %s\n" + +#: postmaster/syslogger.c:1225 +#, c-format +msgid "could not open log file \"%s\": %m" +msgstr "не вдалося відкрити файл протоколу \"%s\": %m" + +#: postmaster/syslogger.c:1287 postmaster/syslogger.c:1337 +#, c-format +msgid "disabling automatic rotation (use SIGHUP to re-enable)" +msgstr "вимкнення автоматичного обертання (щоб повторно ввімкнути, використайте SIGHUP)" + +#: regex/regc_pg_locale.c:262 +#, c-format +msgid "could not determine which collation to use for regular expression" +msgstr "не вдалося визначити які параметри сортування використати для регулярного виразу" + +#: regex/regc_pg_locale.c:269 +#, c-format +msgid "nondeterministic collations are not supported for regular expressions" +msgstr "недетерміновані правила сортування не підтримуються для регулярних виразів" + +#: replication/backup_manifest.c:231 +#, c-format +msgid "expected end timeline %u but found timeline %u" +msgstr "очікувався кінець часової шкали %u але знайдено часову шкалу %u" + +#: replication/backup_manifest.c:248 +#, c-format +msgid "expected start timeline %u but found timeline %u" +msgstr "очікувався початок часової шкали %u але знайдено часову шкалу %u" + +#: replication/backup_manifest.c:275 +#, c-format +msgid "start timeline %u not found in history of timeline %u" +msgstr "початок часової шкали %u не знайдено в історії часової шкали %u" + +#: replication/backup_manifest.c:322 +#, c-format +msgid "could not rewind temporary file" +msgstr "не вдалося перемотати назад тимчасовий файл" + +#: replication/backup_manifest.c:349 +#, c-format +msgid "could not read from temporary file: %m" +msgstr "не вдалося прочитати з тимчасового файлу: %m" + +#: replication/basebackup.c:108 +#, c-format +msgid "could not read from file \"%s\"" +msgstr "не вдалося прочитати з файлу \"%s\"" + +#: replication/basebackup.c:551 +#, c-format +msgid "could not find any WAL files" +msgstr "не вдалося знайти ні одного файла WAL" + +#: replication/basebackup.c:566 replication/basebackup.c:582 +#: replication/basebackup.c:591 +#, c-format +msgid "could not find WAL file \"%s\"" +msgstr "не вдалося знайти файл WAL \"%s\"" + +#: replication/basebackup.c:634 replication/basebackup.c:665 +#, c-format +msgid "unexpected WAL file size \"%s\"" +msgstr "неочікуаний розмір файлу WAL \"%s\"" + +#: replication/basebackup.c:648 replication/basebackup.c:1752 +#, c-format +msgid "base backup could not send data, aborting backup" +msgstr "в процесі базового резервного копіювання не вдалося передати дані, копіювання переривається" + +#: replication/basebackup.c:724 +#, c-format +msgid "%lld total checksum verification failure" +msgid_plural "%lld total checksum verification failures" +msgstr[0] "всього помилок перевірки контрольних сум: %lld" +msgstr[1] "всього помилок перевірки контрольних сум: %lld" +msgstr[2] "всього помилок перевірки контрольних сум: %lld" +msgstr[3] "всього помилок перевірки контрольних сум: %lld" + +#: replication/basebackup.c:731 +#, c-format +msgid "checksum verification failure during base backup" +msgstr "під час базового резервного копіювання виявлено неполадки контрольних сум" + +#: replication/basebackup.c:784 replication/basebackup.c:793 +#: replication/basebackup.c:802 replication/basebackup.c:811 +#: replication/basebackup.c:820 replication/basebackup.c:831 +#: replication/basebackup.c:848 replication/basebackup.c:857 +#: replication/basebackup.c:869 replication/basebackup.c:893 +#, c-format +msgid "duplicate option \"%s\"" +msgstr "повторюваний параметр \"%s\"" + +#: replication/basebackup.c:837 +#, c-format +msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" +msgstr "%d за припустимим діапазномо для параметру \"%s\" (%d .. %d)" + +#: replication/basebackup.c:882 +#, c-format +msgid "unrecognized manifest option: \"%s\"" +msgstr "нерозпізнаний параметр маніфесту: \"%s\"" + +#: replication/basebackup.c:898 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "нерозпізнаний алгоритм контрольної суми: \"%s\"" + +#: replication/basebackup.c:913 +#, c-format +msgid "manifest checksums require a backup manifest" +msgstr "контрольні суми маніфесту потребують резервного копіювання маніфесту" + +#: replication/basebackup.c:1504 +#, c-format +msgid "skipping special file \"%s\"" +msgstr "спеціальний файл \"%s\" пропускається" + +#: replication/basebackup.c:1623 +#, c-format +msgid "invalid segment number %d in file \"%s\"" +msgstr "неприпустимий номер сегменту %d в файлі \"%s\"" + +#: replication/basebackup.c:1642 +#, c-format +msgid "could not verify checksum in file \"%s\", block %d: read buffer size %d and page size %d differ" +msgstr "не вдалося перевірити контрольну суму у файлі \"%s\", блок %d: зчитаний розмір буфера %d і розмір сторінки %d відрізняються" + +#: replication/basebackup.c:1686 replication/basebackup.c:1716 +#, c-format +msgid "could not fseek in file \"%s\": %m" +msgstr "не вдалося переміститись в файлі \"%s\": %m" + +#: replication/basebackup.c:1708 +#, c-format +msgid "could not reread block %d of file \"%s\": %m" +msgstr "не вдалося перечитати блок %d файлу \"%s\": %m" + +#: replication/basebackup.c:1732 +#, c-format +msgid "checksum verification failed in file \"%s\", block %d: calculated %X but expected %X" +msgstr "помилка перевірки контрольної суми в файлі \"%s\", блоку %d: обчислено %X, але очікувалось %X" + +#: replication/basebackup.c:1739 +#, c-format +msgid "further checksum verification failures in file \"%s\" will not be reported" +msgstr "про подальші помилки під час перевірки контрольної суми в файлі \"%s\" повідомлятись не буде" + +#: replication/basebackup.c:1807 +#, c-format +msgid "file \"%s\" has a total of %d checksum verification failure" +msgid_plural "file \"%s\" has a total of %d checksum verification failures" +msgstr[0] "файл \"%s\" має загальну кількість помилок перевірки контрольної суми: %d" +msgstr[1] "файл \"%s\" має загальну кількість помилок перевірки контрольної суми: %d" +msgstr[2] "файл \"%s\" має загальну кількість помилок перевірки контрольної суми: %d" +msgstr[3] "файл \"%s\" має загальну кількість помилок перевірки контрольної суми: %d" + +#: replication/basebackup.c:1843 +#, c-format +msgid "file name too long for tar format: \"%s\"" +msgstr "ім'я файлу занадто довге для tar формату: \"%s\"" + +#: replication/basebackup.c:1848 +#, c-format +msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" +msgstr "мета символьного посилання занадто довга для формату tar: ім'я файлу \"%s\", мета \"%s\"" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:227 +#, c-format +msgid "could not clear search path: %s" +msgstr "не вдалося очистити шлях пошуку: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:251 +#, c-format +msgid "invalid connection string syntax: %s" +msgstr "неприпустимий синтаксис рядка підключення: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:275 +#, c-format +msgid "could not parse connection string: %s" +msgstr "не вдалося аналізувати рядок підключення: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:347 +#, c-format +msgid "could not receive database system identifier and timeline ID from the primary server: %s" +msgstr "не вдалося отримати ідентифікатор системи бази даних та ідентифікатор часової шкали з основного серверу: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:358 +#: replication/libpqwalreceiver/libpqwalreceiver.c:576 +#, c-format +msgid "invalid response from primary server" +msgstr "неприпустима відповідь з основного серверу" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:359 +#, c-format +msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." +msgstr "Не вдалося ідентифікувати систему: отримано %d рядків і %d полів, очікувалось %d рядків і %d або більше полів." + +#: replication/libpqwalreceiver/libpqwalreceiver.c:432 +#: replication/libpqwalreceiver/libpqwalreceiver.c:438 +#: replication/libpqwalreceiver/libpqwalreceiver.c:463 +#, c-format +msgid "could not start WAL streaming: %s" +msgstr "не вдалося почати потокове передавання WAL: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:486 +#, c-format +msgid "could not send end-of-streaming message to primary: %s" +msgstr "не вдалося передати основному серверу повідомлення про кінець передвання: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:508 +#, c-format +msgid "unexpected result set after end-of-streaming" +msgstr "неочікуваний набір результатів після кінця передачі" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:522 +#, c-format +msgid "error while shutting down streaming COPY: %s" +msgstr "помилка при завершенні потокового передавання \"копіювати\": %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:531 +#, c-format +msgid "error reading result of streaming command: %s" +msgstr "помилка при читанні результату команди потокового передавання: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:539 +#: replication/libpqwalreceiver/libpqwalreceiver.c:773 +#, c-format +msgid "unexpected result after CommandComplete: %s" +msgstr "неочікуваний результат CommandComplete: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:565 +#, c-format +msgid "could not receive timeline history file from the primary server: %s" +msgstr "не вдалося отримати файл історії часової шкали з основного сервера: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:577 +#, c-format +msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." +msgstr "Очікувалося 1 кортеж з 2 поле, отримано %d кортежів з %d полями." + +#: replication/libpqwalreceiver/libpqwalreceiver.c:737 +#: replication/libpqwalreceiver/libpqwalreceiver.c:788 +#: replication/libpqwalreceiver/libpqwalreceiver.c:794 +#, c-format +msgid "could not receive data from WAL stream: %s" +msgstr "не вдалося отримати дані з WAL потоку: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:813 +#, c-format +msgid "could not send data to WAL stream: %s" +msgstr "не вдалося передати дані потоку WAL: %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:866 +#, c-format +msgid "could not create replication slot \"%s\": %s" +msgstr "не вдалося створити слот реплікації \"%s\": %s" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:911 +#, c-format +msgid "invalid query response" +msgstr "неприпустима відповідь на запит" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:912 +#, c-format +msgid "Expected %d fields, got %d fields." +msgstr "Очікувалося %d полів, отримано %d полі." + +#: replication/libpqwalreceiver/libpqwalreceiver.c:981 +#, c-format +msgid "the query interface requires a database connection" +msgstr "інтерфейс запитів вимагає підключення до бази даних" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:1012 +msgid "empty query" +msgstr "пустий запит" + +#: replication/logical/launcher.c:295 +#, c-format +msgid "starting logical replication worker for subscription \"%s\"" +msgstr "початок логічного запису реплікації для передплати \"%s\"" + +#: replication/logical/launcher.c:302 +#, c-format +msgid "cannot start logical replication workers when max_replication_slots = 0" +msgstr "неможливо почати логічні записи реплікацій, коли max_replication_slots = 0" + +#: replication/logical/launcher.c:382 +#, c-format +msgid "out of logical replication worker slots" +msgstr "недостатньо слотів для процесів логічної реплікації" + +#: replication/logical/launcher.c:383 +#, c-format +msgid "You might need to increase max_logical_replication_workers." +msgstr "Можливо, вам слід збільшити max_logical_replication_workers." + +#: replication/logical/launcher.c:438 +#, c-format +msgid "out of background worker slots" +msgstr "недостатньо слотів для фонових робочих процесів" + +#: replication/logical/launcher.c:439 +#, c-format +msgid "You might need to increase max_worker_processes." +msgstr "Можливо, вам слід збільшити max_worker_processes." + +#: replication/logical/launcher.c:638 +#, c-format +msgid "logical replication worker slot %d is empty, cannot attach" +msgstr "слот запису логічної реплікації %d пустий, неможливо підключитися" + +#: replication/logical/launcher.c:647 +#, c-format +msgid "logical replication worker slot %d is already used by another worker, cannot attach" +msgstr "слот запису логічної реплікації %d вже використовується іншим виконавцем, неможливо підключитися" + +#: replication/logical/launcher.c:951 +#, c-format +msgid "logical replication launcher started" +msgstr "запуск логічної реплікації почався" + +#: replication/logical/logical.c:87 +#, c-format +msgid "logical decoding requires wal_level >= logical" +msgstr "логічне декодування вимагає wal_level >= logical" + +#: replication/logical/logical.c:92 +#, c-format +msgid "logical decoding requires a database connection" +msgstr "логічне декодування вимагає підключення до бази даних" + +#: replication/logical/logical.c:110 +#, c-format +msgid "logical decoding cannot be used while in recovery" +msgstr "логічне декодування неможливо використовувати під час відновлення" + +#: replication/logical/logical.c:258 replication/logical/logical.c:399 +#, c-format +msgid "cannot use physical replication slot for logical decoding" +msgstr "неможливо використовувати слот невідповідної реплікації для логічного кодування" + +#: replication/logical/logical.c:263 replication/logical/logical.c:404 +#, c-format +msgid "replication slot \"%s\" was not created in this database" +msgstr "слот реплікації \"%s\" був створений не в цій базі даних" + +#: replication/logical/logical.c:270 +#, c-format +msgid "cannot create logical replication slot in transaction that has performed writes" +msgstr "неможливо створити слот логічної реплікації у транзакції, що виконує записування" + +#: replication/logical/logical.c:444 +#, c-format +msgid "starting logical decoding for slot \"%s\"" +msgstr "початок логічного декодування для слоту \"%s\"" + +#: replication/logical/logical.c:446 +#, c-format +msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." +msgstr "Потокове передавання транзакцій, що затверджені, після %X/%X, читання WAL з %X/%X." + +#: replication/logical/logical.c:593 +#, c-format +msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" +msgstr "слот \"%s\", плагін виходу \"%s\", у зворотньому виклику %s, пов'язаний номер LSN %X/%X" + +#: replication/logical/logical.c:600 +#, c-format +msgid "slot \"%s\", output plugin \"%s\", in the %s callback" +msgstr "слот \"%s\", плагін виходу \"%s\", у зворотньому виклику %s" + +#: replication/logical/logicalfuncs.c:104 replication/slotfuncs.c:34 +#, c-format +msgid "must be superuser or replication role to use replication slots" +msgstr "має бути право суперкористувача або реплікації для використання реплікаційних слотів" + +#: replication/logical/logicalfuncs.c:134 +#, c-format +msgid "slot name must not be null" +msgstr "ім'я слоту має бути не Null-значення" + +#: replication/logical/logicalfuncs.c:150 +#, c-format +msgid "options array must not be null" +msgstr "масив параметрів має бути не Null-значення" + +#: replication/logical/logicalfuncs.c:181 +#, c-format +msgid "array must be one-dimensional" +msgstr "масив має бути одновимірним" + +#: replication/logical/logicalfuncs.c:187 +#, c-format +msgid "array must not contain nulls" +msgstr "масив не має включати nulls" + +#: replication/logical/logicalfuncs.c:203 utils/adt/json.c:1128 +#: utils/adt/jsonb.c:1303 +#, c-format +msgid "array must have even number of elements" +msgstr "масив повинен мати парну кількість елементів" + +#: replication/logical/logicalfuncs.c:251 +#, c-format +msgid "can no longer get changes from replication slot \"%s\"" +msgstr "більше не можна отримувати зміни з слоту реплікації \"%s\"" + +#: replication/logical/logicalfuncs.c:253 replication/slotfuncs.c:648 +#, c-format +msgid "This slot has never previously reserved WAL, or has been invalidated." +msgstr "Цей слот ніколи раніше не резервував WAL, або не був недійсним." + +#: replication/logical/logicalfuncs.c:265 +#, c-format +msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" +msgstr "плагін виходу логічного декодування \"%s\" виробляє бінарний вихід, але функція \"%s\" очікує текстові дані" + +#: replication/logical/origin.c:188 +#, c-format +msgid "only superusers can query or manipulate replication origins" +msgstr "лише суперкористувачі можуть вимагати або маніпулювати джерелами реплікації" + +#: replication/logical/origin.c:193 +#, c-format +msgid "cannot query or manipulate replication origin when max_replication_slots = 0" +msgstr "неможливо вимагати або маніпулювати джерелами реплікації, коли max_replication_slots = 0" + +#: replication/logical/origin.c:198 +#, c-format +msgid "cannot manipulate replication origins during recovery" +msgstr "неможливо маніпулювати джерелами реплікації під час відновлення" + +#: replication/logical/origin.c:233 +#, c-format +msgid "replication origin \"%s\" does not exist" +msgstr "джерело реплікації \"%s\" не існує" + +#: replication/logical/origin.c:324 +#, c-format +msgid "could not find free replication origin OID" +msgstr "не вдалося знайти вільний ідентифікатор OID джерела реплікації" + +#: replication/logical/origin.c:372 +#, c-format +msgid "could not drop replication origin with OID %d, in use by PID %d" +msgstr "не вдалося розірвати джерело реплікації з ідентифікатором OID %d, використовується PID %d" + +#: replication/logical/origin.c:464 +#, c-format +msgid "replication origin with OID %u does not exist" +msgstr "джерело реплікації з ідентифікатором OID %u не існує" + +#: replication/logical/origin.c:729 +#, c-format +msgid "replication checkpoint has wrong magic %u instead of %u" +msgstr "контрольна точка реплікації має неправильну сигнатуру %u замість %u" + +#: replication/logical/origin.c:770 +#, c-format +msgid "could not find free replication state, increase max_replication_slots" +msgstr "не вдалося знайти вільний слот для стану реплікації, збільшіть max_replication_slots" + +#: replication/logical/origin.c:788 +#, c-format +msgid "replication slot checkpoint has wrong checksum %u, expected %u" +msgstr "неправильна контрольна сума файлу контрольної точки для слота реплікації %u, очікувалось %u" + +#: replication/logical/origin.c:916 replication/logical/origin.c:1102 +#, c-format +msgid "replication origin with OID %d is already active for PID %d" +msgstr "джерело реплікації з OID %d вже активний для PID %d" + +#: replication/logical/origin.c:927 replication/logical/origin.c:1114 +#, c-format +msgid "could not find free replication state slot for replication origin with OID %u" +msgstr "не вдалося знайти вільний слот стану реплікації для джерела реплікації з OID %u" + +#: replication/logical/origin.c:929 replication/logical/origin.c:1116 +#: replication/slot.c:1762 +#, c-format +msgid "Increase max_replication_slots and try again." +msgstr "Збільшіть max_replication_slots і спробуйте знову." + +#: replication/logical/origin.c:1073 +#, c-format +msgid "cannot setup replication origin when one is already setup" +msgstr "не можна налаштувати джерело реплікації, коли один вже налаштований" + +#: replication/logical/origin.c:1153 replication/logical/origin.c:1369 +#: replication/logical/origin.c:1389 +#, c-format +msgid "no replication origin is configured" +msgstr "жодне джерело реплікації не налаштоване" + +#: replication/logical/origin.c:1236 +#, c-format +msgid "replication origin name \"%s\" is reserved" +msgstr "назва джерела реплікації \"%s\" зарезервована" + +#: replication/logical/origin.c:1238 +#, c-format +msgid "Origin names starting with \"pg_\" are reserved." +msgstr "Назви джерел, які починаються на \"pg_\" зарезервовані." + +#: replication/logical/relation.c:302 +#, c-format +msgid "logical replication target relation \"%s.%s\" does not exist" +msgstr "цільове відношення логічної реплікації \"%s.%s\" не існує" + +#: replication/logical/relation.c:345 +#, c-format +msgid "logical replication target relation \"%s.%s\" is missing some replicated columns" +msgstr "в цільовому відношенні логічної реплікації \"%s.%s\" пропущені деякі репліковані стовпці" + +#: replication/logical/relation.c:385 +#, c-format +msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" +msgstr "в цільовому відношенні логічної реплікації \"%s.%s\" в індексі REPLICA IDENTITY використовуються системні стовпці" + +#: replication/logical/reorderbuffer.c:2663 +#, c-format +msgid "could not write to data file for XID %u: %m" +msgstr "не вдалося записати у файл даних для XID %u: %m" + +#: replication/logical/reorderbuffer.c:2850 +#: replication/logical/reorderbuffer.c:2875 +#, c-format +msgid "could not read from reorderbuffer spill file: %m" +msgstr "не вдалося прочитати з файлу розгортання буферу пересортування: %m" + +#: replication/logical/reorderbuffer.c:2854 +#: replication/logical/reorderbuffer.c:2879 +#, c-format +msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" +msgstr "не вдалося прочитати з файлу розгортання буферу пересортування: прочитано %d замість %u байт" + +#: replication/logical/reorderbuffer.c:3114 +#, c-format +msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" +msgstr "не вдалося видалити файл \"%s\" під час видалення pg_replslot/%s/xid*: %m" + +#: replication/logical/reorderbuffer.c:3606 +#, c-format +msgid "could not read from file \"%s\": read %d instead of %d bytes" +msgstr "не вдалося прочитати з файлу \"%s\": прочитано %d замість %d байт" + +#: replication/logical/snapbuild.c:606 +#, c-format +msgid "initial slot snapshot too large" +msgstr "початковий знімок слота занадто великий" + +#: replication/logical/snapbuild.c:660 +#, c-format +msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" +msgid_plural "exported logical decoding snapshot: \"%s\" with %u transaction IDs" +msgstr[0] "експортовано знімок логічного декодування \"%s\" з %u ID транзакцією" +msgstr[1] "експортовано знімок логічного декодування \"%s\" з %u ID транзакціями" +msgstr[2] "експортовано знімок логічного декодування \"%s\" з %u ID транзакціями" +msgstr[3] "експортовано знімок логічного декодування \"%s\" з %u ID транзакціями" + +#: replication/logical/snapbuild.c:1265 replication/logical/snapbuild.c:1358 +#: replication/logical/snapbuild.c:1912 +#, c-format +msgid "logical decoding found consistent point at %X/%X" +msgstr "узгодження процесу логічного кодування знайдено в точці %X/%X" + +#: replication/logical/snapbuild.c:1267 +#, c-format +msgid "There are no running transactions." +msgstr "Більше активних транзакцій немає." + +#: replication/logical/snapbuild.c:1309 +#, c-format +msgid "logical decoding found initial starting point at %X/%X" +msgstr "початкова стартова точка процесу логічного декодування знайдена в точці %X/%X" + +#: replication/logical/snapbuild.c:1311 replication/logical/snapbuild.c:1335 +#, c-format +msgid "Waiting for transactions (approximately %d) older than %u to end." +msgstr "Очікування транзакцій (приблизно %d) старіше, ніж %u до кінця." + +#: replication/logical/snapbuild.c:1333 +#, c-format +msgid "logical decoding found initial consistent point at %X/%X" +msgstr "початкова точка узгодження процесу логічного кодування знайдена в точці %X/%X" + +#: replication/logical/snapbuild.c:1360 +#, c-format +msgid "There are no old transactions anymore." +msgstr "Більше старих транзакцій немає." + +#: replication/logical/snapbuild.c:1754 +#, c-format +msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" +msgstr "файл стану snapbuild \"%s\" має неправильне магічне число: %u замість %u" + +#: replication/logical/snapbuild.c:1760 +#, c-format +msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" +msgstr "файл стану snapbuild \"%s\" має непідтримуючу версію: %u замість %u" + +#: replication/logical/snapbuild.c:1859 +#, c-format +msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" +msgstr "у файлі стану snapbuild \"%s\" невідповідність контрольної суми: %u, повинно бути %u" + +#: replication/logical/snapbuild.c:1914 +#, c-format +msgid "Logical decoding will begin using saved snapshot." +msgstr "Логічне декодування почнеться зі збереженого знімку." + +#: replication/logical/snapbuild.c:1986 +#, c-format +msgid "could not parse file name \"%s\"" +msgstr "не вдалося аналізувати ім'я файлу \"%s\"" + +#: replication/logical/tablesync.c:132 +#, c-format +msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" +msgstr "процес синхронізації таблиці при логічній реплікації для підписки \"%s\", таблиці \"%s\" закінчив обробку" + +#: replication/logical/tablesync.c:664 +#, c-format +msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" +msgstr "не вдалося отримати інформацію про таблицю \"%s.%s\" з серверу публікації: %s" + +#: replication/logical/tablesync.c:670 +#, c-format +msgid "table \"%s.%s\" not found on publisher" +msgstr "таблиця \"%s.%s\" не знайдена на сервері публікації" + +#: replication/logical/tablesync.c:704 +#, c-format +msgid "could not fetch table info for table \"%s.%s\": %s" +msgstr "не вдалося отримати інформацію про таблицю \"%s.%s\": %s" + +#: replication/logical/tablesync.c:791 +#, c-format +msgid "could not start initial contents copy for table \"%s.%s\": %s" +msgstr "не вдалося почати копіювання початкового змісту таблиці \"%s.%s\": %s" + +#: replication/logical/tablesync.c:905 +#, c-format +msgid "table copy could not start transaction on publisher" +msgstr "під час копіювання таблиці не вдалося почати транзакцію на сервері публікації" + +#: replication/logical/tablesync.c:927 +#, c-format +msgid "table copy could not finish transaction on publisher" +msgstr "під час копіювання таблиці не вдалося завершити транзакцію на сервері публікації" + +#: replication/logical/worker.c:313 +#, c-format +msgid "processing remote data for replication target relation \"%s.%s\" column \"%s\", remote type %s, local type %s" +msgstr "обробка віддалених даних для цільового зв'язку реплікації \"%s.%s\" стовпця \"%s\", віддалений тип %s, локальний тип %s" + +#: replication/logical/worker.c:552 +#, c-format +msgid "ORIGIN message sent out of order" +msgstr "Повідомлення ORIGIN відправлено недоречно" + +#: replication/logical/worker.c:702 +#, c-format +msgid "publisher did not send replica identity column expected by the logical replication target relation \"%s.%s\"" +msgstr "сервер публікації не передав стовпець ідентифікації репліки очікуваний для цільового зв'язку логічної реплікації \"%s.%s\"" + +#: replication/logical/worker.c:709 +#, c-format +msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" +msgstr "в цільовому зв'язку логічної реплікації \"%s.%s\" немає ні індексу REPLICA IDENTITY, ні ключа PRIMARY KEY і публіковаий зв'язок не має REPLICA IDENTITY FULL" + +#: replication/logical/worker.c:1394 +#, c-format +msgid "invalid logical replication message type \"%c\"" +msgstr "неприпустимий тип повідомлення логічної реплікації \"%c\"" + +#: replication/logical/worker.c:1537 +#, c-format +msgid "data stream from publisher has ended" +msgstr "потік даних з серверу публікації завершився" + +#: replication/logical/worker.c:1692 +#, c-format +msgid "terminating logical replication worker due to timeout" +msgstr "завершення процесу логічної реплікації через тайм-аут" + +#: replication/logical/worker.c:1837 +#, c-format +msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was removed" +msgstr "застосовуючий процес логічної реплікації для підписки \"%s\" буде зупинено, тому, що підписка була видалена" + +#: replication/logical/worker.c:1851 +#, c-format +msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was disabled" +msgstr "застосовуючий процес логічної реплікації для підписки \"%s\" буде зупинено, тому, що підписка була вимкнута" + +#: replication/logical/worker.c:1865 +#, c-format +msgid "logical replication apply worker for subscription \"%s\" will restart because the connection information was changed" +msgstr "застосовуючий процес логічної реплікації для підписки \"%s\" буде перезавантажено, тому, що інформація про підключення була змінена" + +#: replication/logical/worker.c:1879 +#, c-format +msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" +msgstr "застосовуючий процес логічної реплікації для підписки \"%s\" буде перезавантажено, тому, що підписка була перейменована" + +#: replication/logical/worker.c:1896 +#, c-format +msgid "logical replication apply worker for subscription \"%s\" will restart because the replication slot name was changed" +msgstr "застосовуючий процес логічної реплікації для підписки \"%s\" буде перезавантажено, тому, що ім'я слоту реплікації було змінено" + +#: replication/logical/worker.c:1910 +#, c-format +msgid "logical replication apply worker for subscription \"%s\" will restart because subscription's publications were changed" +msgstr "застосовуючий процес логічної реплікації для підписки \"%s\" буде перезавантажено, тому, що публікації підписки були змінені" + +#: replication/logical/worker.c:2006 +#, c-format +msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" +msgstr "застосовуючий процес логічної реплікації для підписки %u не буде почато, тому, що підписка була видалена під час запуску" + +#: replication/logical/worker.c:2018 +#, c-format +msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" +msgstr "застосовуючий процес логічної реплікації для підписки \"%s\" не буде почато, тому, що підписка була вимкнута під час запуску" + +#: replication/logical/worker.c:2036 +#, c-format +msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" +msgstr "просец синхронізації таблиці під час логічної реплікації для підписки \"%s\", таблиці \"%s\" запущений" + +#: replication/logical/worker.c:2040 +#, c-format +msgid "logical replication apply worker for subscription \"%s\" has started" +msgstr "застосовуючий процес логічної реплікації для підписки \"%s\" запущений" + +#: replication/logical/worker.c:2079 +#, c-format +msgid "subscription has no replication slot set" +msgstr "для підписки не встановлений слот реплікації" + +#: replication/pgoutput/pgoutput.c:147 +#, c-format +msgid "invalid proto_version" +msgstr "неприпустиме значення proto_version" + +#: replication/pgoutput/pgoutput.c:152 +#, c-format +msgid "proto_version \"%s\" out of range" +msgstr "значення proto_version \"%s\" за межами діапазону" + +#: replication/pgoutput/pgoutput.c:169 +#, c-format +msgid "invalid publication_names syntax" +msgstr "неприпустимий синтаксис publication_names" + +#: replication/pgoutput/pgoutput.c:211 +#, c-format +msgid "client sent proto_version=%d but we only support protocol %d or lower" +msgstr "клієнт передав proto_version=%d, але ми підтримуємо лише протокол %d або нижче" + +#: replication/pgoutput/pgoutput.c:217 +#, c-format +msgid "client sent proto_version=%d but we only support protocol %d or higher" +msgstr "клієнт передав proto_version=%d, але ми підтримуємо лише протокол %d або вище" + +#: replication/pgoutput/pgoutput.c:223 +#, c-format +msgid "publication_names parameter missing" +msgstr "пропущено параметр publication_names" + +#: replication/slot.c:183 +#, c-format +msgid "replication slot name \"%s\" is too short" +msgstr "ім'я слоту реплікації \"%s\" занадто коротке" + +#: replication/slot.c:192 +#, c-format +msgid "replication slot name \"%s\" is too long" +msgstr "ім'я слоту реплікації \"%s\" занадто довге" + +#: replication/slot.c:205 +#, c-format +msgid "replication slot name \"%s\" contains invalid character" +msgstr "ім'я слоту реплікації \"%s\" містить неприпустимий символ" + +#: replication/slot.c:207 +#, c-format +msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." +msgstr "Імена слота реплікації можуть містити лише букви в нижньому кейсі, числа, і символ підкреслення." + +#: replication/slot.c:254 +#, c-format +msgid "replication slot \"%s\" already exists" +msgstr "слот реплікації \"%s\" вже існує" + +#: replication/slot.c:264 +#, c-format +msgid "all replication slots are in use" +msgstr "використовуються всі слоти реплікації" + +#: replication/slot.c:265 +#, c-format +msgid "Free one or increase max_replication_slots." +msgstr "Звільніть непотрібні або збільшіть max_replication_slots." + +#: replication/slot.c:407 replication/slotfuncs.c:760 +#, c-format +msgid "replication slot \"%s\" does not exist" +msgstr "слот реплікації \"%s\" не існує" + +#: replication/slot.c:445 replication/slot.c:1006 +#, c-format +msgid "replication slot \"%s\" is active for PID %d" +msgstr "слот реплікації \"%s\" активний для PID %d" + +#: replication/slot.c:683 replication/slot.c:1314 replication/slot.c:1697 +#, c-format +msgid "could not remove directory \"%s\"" +msgstr "не вдалося видалити каталог \"%s\"" + +#: replication/slot.c:1041 +#, c-format +msgid "replication slots can only be used if max_replication_slots > 0" +msgstr "слоти реплікації можна використовувати лише якщо max_replication_slots > 0" + +#: replication/slot.c:1046 +#, c-format +msgid "replication slots can only be used if wal_level >= replica" +msgstr "слоти реплікації можна використовувати лише якщо wal_level >= replica" + +#: replication/slot.c:1202 +#, c-format +msgid "terminating process %d because replication slot \"%s\" is too far behind" +msgstr "завершення процесу %d тому, що слот реплікації \"%s\" занадто далеко позаду" + +#: replication/slot.c:1221 +#, c-format +msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" +msgstr "припинення слоту \"%s\" тому, що його restart_lsn %X/%X перевищує max_slot_wal_keep_size" + +#: replication/slot.c:1635 +#, c-format +msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" +msgstr "файл слоту реплікації \"%s\" має неправильне магічне число: %u замість %u" + +#: replication/slot.c:1642 +#, c-format +msgid "replication slot file \"%s\" has unsupported version %u" +msgstr "файл слоту реплікації \"%s\" має непідтримуючу версію %u" + +#: replication/slot.c:1649 +#, c-format +msgid "replication slot file \"%s\" has corrupted length %u" +msgstr "файл слоту реплікації \"%s\" має пошкоджену довжину %u" + +#: replication/slot.c:1685 +#, c-format +msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" +msgstr "у файлі слоту реплікації \"%s\" невідповідність контрольної суми: %u, повинно бути %u" + +#: replication/slot.c:1719 +#, c-format +msgid "logical replication slot \"%s\" exists, but wal_level < logical" +msgstr "слот логічної реплікації \"%s\" існує, але wal_level < logical" + +#: replication/slot.c:1721 +#, c-format +msgid "Change wal_level to be logical or higher." +msgstr "Змініть wal_level на logical або вище." + +#: replication/slot.c:1725 +#, c-format +msgid "physical replication slot \"%s\" exists, but wal_level < replica" +msgstr "слот фізичної реплікації \"%s\" існує, але wal_level < replica" + +#: replication/slot.c:1727 +#, c-format +msgid "Change wal_level to be replica or higher." +msgstr "Змініть wal_level на replica або вище." + +#: replication/slot.c:1761 +#, c-format +msgid "too many replication slots active before shutdown" +msgstr "перед завершенням роботи активно занадто багато слотів реплікації" + +#: replication/slotfuncs.c:624 +#, c-format +msgid "invalid target WAL LSN" +msgstr "неприпустима ціль WAL LSN" + +#: replication/slotfuncs.c:646 +#, c-format +msgid "replication slot \"%s\" cannot be advanced" +msgstr "слот реплікації \"%s\" не може бути розширеним" + +#: replication/slotfuncs.c:664 +#, c-format +msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" +msgstr "просунути слот реплікації до позиції %X/%X не можна, мінімальна позиція %X/%X" + +#: replication/slotfuncs.c:772 +#, c-format +msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" +msgstr "не можна скопіювати слот фізичної реплікації \"%s\" як слот логічної реплікації" + +#: replication/slotfuncs.c:774 +#, c-format +msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" +msgstr "не можна скопіювати слот логічної реплікації \"%s\" як слот фізичної реплікації" + +#: replication/slotfuncs.c:781 +#, c-format +msgid "cannot copy a replication slot that doesn't reserve WAL" +msgstr "не можна скопіювати слот реплікації, який не резервує WAL" + +#: replication/slotfuncs.c:857 +#, c-format +msgid "could not copy replication slot \"%s\"" +msgstr "не вдалося скопіювати слот реплікації \"%s\"" + +#: replication/slotfuncs.c:859 +#, c-format +msgid "The source replication slot was modified incompatibly during the copy operation." +msgstr "Слот реплікації джерела був змінений несумісно під час операції копіювання." + +#: replication/slotfuncs.c:865 +#, c-format +msgid "cannot copy unfinished logical replication slot \"%s\"" +msgstr "не можна скопіювати незавершений слот логічної реплікації \"%s\"" + +#: replication/slotfuncs.c:867 +#, c-format +msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." +msgstr "Повторіть, коли confirmed_flush_lsn слоту джерела реплікації є дійсним." + +#: replication/syncrep.c:257 +#, c-format +msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" +msgstr "скасування очікування синхронної реплікації і завершення з'єднання по команді адміністратора" + +#: replication/syncrep.c:258 replication/syncrep.c:275 +#, c-format +msgid "The transaction has already committed locally, but might not have been replicated to the standby." +msgstr "Транзакція вже була затверджена локально, але можливо не була реплікована до режиму очікування." + +#: replication/syncrep.c:274 +#, c-format +msgid "canceling wait for synchronous replication due to user request" +msgstr "скасування очікування синхронної реплікації по запиту користувача" + +#: replication/syncrep.c:416 +#, c-format +msgid "standby \"%s\" now has synchronous standby priority %u" +msgstr "режим очікування \"%s\" зараз має пріоритет синхронної реплікації %u" + +#: replication/syncrep.c:483 +#, c-format +msgid "standby \"%s\" is now a synchronous standby with priority %u" +msgstr "режим очікування \"%s\" зараз є синхронним з пріоритетом %u" + +#: replication/syncrep.c:487 +#, c-format +msgid "standby \"%s\" is now a candidate for quorum synchronous standby" +msgstr "режим очікування \"%s\" зараз є кандидатом для включення в кворум синхронних" + +#: replication/syncrep.c:1034 +#, c-format +msgid "synchronous_standby_names parser failed" +msgstr "помилка при аналізуванні synchronous_standby_names" + +#: replication/syncrep.c:1040 +#, c-format +msgid "number of synchronous standbys (%d) must be greater than zero" +msgstr "кількість синхронних режимів очікування (%d) повинно бути більше нуля" + +#: replication/walreceiver.c:171 +#, c-format +msgid "terminating walreceiver process due to administrator command" +msgstr "завершення процесу walreceiver по команді адміністратора" + +#: replication/walreceiver.c:297 +#, c-format +msgid "could not connect to the primary server: %s" +msgstr "не вдалося підключитися до основного серверу: %s" + +#: replication/walreceiver.c:343 +#, c-format +msgid "database system identifier differs between the primary and standby" +msgstr "ідентифікатор системи бази даних на основному і резервному серверах відрізняються" + +#: replication/walreceiver.c:344 +#, c-format +msgid "The primary's identifier is %s, the standby's identifier is %s." +msgstr "Ідентифікатор на основному сервері %s, на резервному %s." + +#: replication/walreceiver.c:354 +#, c-format +msgid "highest timeline %u of the primary is behind recovery timeline %u" +msgstr "остання часова шкала %u на основному сервері відстає від відновлюючої часової шкали %u" + +#: replication/walreceiver.c:408 +#, c-format +msgid "started streaming WAL from primary at %X/%X on timeline %u" +msgstr "запущено потокове передавання WAL з основного серверу з позиції %X/%X на часовій шкалі %u" + +#: replication/walreceiver.c:413 +#, c-format +msgid "restarted WAL streaming at %X/%X on timeline %u" +msgstr "перезапуска потокового передавання WAL з позиції %X/%X на часовій шкалі %u" + +#: replication/walreceiver.c:442 +#, c-format +msgid "cannot continue WAL streaming, recovery has already ended" +msgstr "продовжити потокове передавання WAL не можна, відновлення вже завершено" + +#: replication/walreceiver.c:479 +#, c-format +msgid "replication terminated by primary server" +msgstr "реплікація завершена основним сервером" + +#: replication/walreceiver.c:480 +#, c-format +msgid "End of WAL reached on timeline %u at %X/%X." +msgstr "На часовій шкалі %u в позиції %X/%X WAL досяг кінця." + +#: replication/walreceiver.c:568 +#, c-format +msgid "terminating walreceiver due to timeout" +msgstr "завершення процесу walreceiver через тайм-аут" + +#: replication/walreceiver.c:606 +#, c-format +msgid "primary server contains no more WAL on requested timeline %u" +msgstr "основний сервер більше не містить WAL для запитаної часової шкали %u" + +#: replication/walreceiver.c:622 replication/walreceiver.c:929 +#, c-format +msgid "could not close log segment %s: %m" +msgstr "не вдалося закрити сегмент журналу %s: %m" + +#: replication/walreceiver.c:742 +#, c-format +msgid "fetching timeline history file for timeline %u from primary server" +msgstr "отримання файлу історії часової шкали для часової шкали %u з основного серверу" + +#: replication/walreceiver.c:976 +#, c-format +msgid "could not write to log segment %s at offset %u, length %lu: %m" +msgstr "не вдалося записати в сегмент журналу %s зсув %u, довжина %lu: %m" + +#: replication/walsender.c:523 storage/smgr/md.c:1291 +#, c-format +msgid "could not seek to end of file \"%s\": %m" +msgstr "не вдалося досягти кінця файлу \"%s\": %m" + +#: replication/walsender.c:527 +#, c-format +msgid "could not seek to beginning of file \"%s\": %m" +msgstr "не вдалося знайти початок файлу \"%s\": %m" + +#: replication/walsender.c:578 +#, c-format +msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" +msgstr "Команда IDENTIFY_SYSTEM не виконувалась до START_REPLICATION" + +#: replication/walsender.c:607 +#, c-format +msgid "cannot use a logical replication slot for physical replication" +msgstr "використовувати логічний слот реплікації для фізичної реплікації, не можна" + +#: replication/walsender.c:676 +#, c-format +msgid "requested starting point %X/%X on timeline %u is not in this server's history" +msgstr "в історії серверу немає запитаної початкової точки %X/%X на часовій шкалі %u" + +#: replication/walsender.c:680 +#, c-format +msgid "This server's history forked from timeline %u at %X/%X." +msgstr "Історія цього серверу відгалузилась від часової шкали %u в позиції %X/%X." + +#: replication/walsender.c:725 +#, c-format +msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" +msgstr "запитана початкова точка %X/%X попереду позиція очищених даних WAL на цьому сервері %X/%X" + +#. translator: %s is a CREATE_REPLICATION_SLOT statement +#: replication/walsender.c:976 +#, c-format +msgid "%s must not be called inside a transaction" +msgstr "%s не має викликатися всередині транзакції" + +#. translator: %s is a CREATE_REPLICATION_SLOT statement +#: replication/walsender.c:986 +#, c-format +msgid "%s must be called inside a transaction" +msgstr "%s має викликатися всередині транзакції" + +#. translator: %s is a CREATE_REPLICATION_SLOT statement +#: replication/walsender.c:992 +#, c-format +msgid "%s must be called in REPEATABLE READ isolation mode transaction" +msgstr "%s повинен бути викликаний в режимі ізоляції REPEATABLE READ" + +#. translator: %s is a CREATE_REPLICATION_SLOT statement +#: replication/walsender.c:998 +#, c-format +msgid "%s must be called before any query" +msgstr "%s має викликатися до будь-якого запиту" + +#. translator: %s is a CREATE_REPLICATION_SLOT statement +#: replication/walsender.c:1004 +#, c-format +msgid "%s must not be called in a subtransaction" +msgstr "%s не має викликатися всередині підтранзакції" + +#: replication/walsender.c:1148 +#, c-format +msgid "cannot read from logical replication slot \"%s\"" +msgstr "не можна прочитати із слоту логічної реплікації \"%s\"" + +#: replication/walsender.c:1150 +#, c-format +msgid "This slot has been invalidated because it exceeded the maximum reserved size." +msgstr "Цей слот визнано недійсним, тому що він перевищив максимально зарезервований розмір." + +#: replication/walsender.c:1160 +#, c-format +msgid "terminating walsender process after promotion" +msgstr "завершення процесу walsender після підвищення" + +#: replication/walsender.c:1534 +#, c-format +msgid "cannot execute new commands while WAL sender is in stopping mode" +msgstr "не можна виконувати нові команди, поки процес відправки WAL знаходиться в режимі зупинки" + +#: replication/walsender.c:1567 +#, c-format +msgid "received replication command: %s" +msgstr "отримано команду реплікації: %s" + +#: replication/walsender.c:1583 tcop/fastpath.c:279 tcop/postgres.c:1103 +#: tcop/postgres.c:1455 tcop/postgres.c:1716 tcop/postgres.c:2174 +#: tcop/postgres.c:2535 tcop/postgres.c:2614 +#, c-format +msgid "current transaction is aborted, commands ignored until end of transaction block" +msgstr "поточна транзакція перервана, команди до кінця блока транзакції пропускаються" + +#: replication/walsender.c:1669 +#, c-format +msgid "cannot execute SQL commands in WAL sender for physical replication" +msgstr "не можна виконувати команди SQL в процесі відправки WAL для фізичної реплікації" + +#: replication/walsender.c:1714 replication/walsender.c:1730 +#, c-format +msgid "unexpected EOF on standby connection" +msgstr "неочікуваний обрив з'єднання з резервним сервером" + +#: replication/walsender.c:1744 +#, c-format +msgid "unexpected standby message type \"%c\", after receiving CopyDone" +msgstr "після отримання CopyDone резервний сервер передав повідомлення неочікуваного типу \"%c\"" + +#: replication/walsender.c:1782 +#, c-format +msgid "invalid standby message type \"%c\"" +msgstr "неприпустимий тип повідомлення резервного серверу \"%c\"" + +#: replication/walsender.c:1823 +#, c-format +msgid "unexpected message type \"%c\"" +msgstr "неочікуваний тип повідомлення \"%c\"" + +#: replication/walsender.c:2241 +#, c-format +msgid "terminating walsender process due to replication timeout" +msgstr "завершення процесу walsender через тайм-аут реплікації" + +#: replication/walsender.c:2318 +#, c-format +msgid "\"%s\" has now caught up with upstream server" +msgstr "\"%s\" зараз надолужив висхідний сервер" + +#: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:989 +#, c-format +msgid "rule \"%s\" for relation \"%s\" already exists" +msgstr "правило \"%s\" для зв'язка \"%s\" вже існує" + +#: rewrite/rewriteDefine.c:301 +#, c-format +msgid "rule actions on OLD are not implemented" +msgstr "дії правил для OLD не реалізовані" + +#: rewrite/rewriteDefine.c:302 +#, c-format +msgid "Use views or triggers instead." +msgstr "Використайте подання або тригери замість." + +#: rewrite/rewriteDefine.c:306 +#, c-format +msgid "rule actions on NEW are not implemented" +msgstr "дії правил для NEW не реалізовані" + +#: rewrite/rewriteDefine.c:307 +#, c-format +msgid "Use triggers instead." +msgstr "Використайте тригери замість." + +#: rewrite/rewriteDefine.c:320 +#, c-format +msgid "INSTEAD NOTHING rules on SELECT are not implemented" +msgstr "Правила INSTEAD NOTHING для SELECT не реалізовані" + +#: rewrite/rewriteDefine.c:321 +#, c-format +msgid "Use views instead." +msgstr "Використайте подання замість." + +#: rewrite/rewriteDefine.c:329 +#, c-format +msgid "multiple actions for rules on SELECT are not implemented" +msgstr "декілька дій в правилах для SELECT не реалізовані" + +#: rewrite/rewriteDefine.c:339 +#, c-format +msgid "rules on SELECT must have action INSTEAD SELECT" +msgstr "правила для SELECT повинні мати дію INSTEAD SELECT" + +#: rewrite/rewriteDefine.c:347 +#, c-format +msgid "rules on SELECT must not contain data-modifying statements in WITH" +msgstr "правила для SELECT не повинні містити операторів, які змінюють дані в WITH" + +#: rewrite/rewriteDefine.c:355 +#, c-format +msgid "event qualifications are not implemented for rules on SELECT" +msgstr "в правилах для SELECT не може бути умов" + +#: rewrite/rewriteDefine.c:382 +#, c-format +msgid "\"%s\" is already a view" +msgstr "\"%s\" вже є поданням" + +#: rewrite/rewriteDefine.c:406 +#, c-format +msgid "view rule for \"%s\" must be named \"%s\"" +msgstr "правило подання для \"%s\" повинно називатися \"%s\"" + +#: rewrite/rewriteDefine.c:434 +#, c-format +msgid "cannot convert partitioned table \"%s\" to a view" +msgstr "перетворити секціоновану таблицю \"%s\" на подання, не можна" + +#: rewrite/rewriteDefine.c:440 +#, c-format +msgid "cannot convert partition \"%s\" to a view" +msgstr "перетворити секцію \"%s\" на подання, не можна" + +#: rewrite/rewriteDefine.c:449 +#, c-format +msgid "could not convert table \"%s\" to a view because it is not empty" +msgstr "не вдалося перетворити таблицю \"%s\" на подання, тому, що вона не пуста" + +#: rewrite/rewriteDefine.c:458 +#, c-format +msgid "could not convert table \"%s\" to a view because it has triggers" +msgstr "не вдалося перетворити таблицю \"%s\" на подання, тому, що вона має тригери" + +#: rewrite/rewriteDefine.c:460 +#, c-format +msgid "In particular, the table cannot be involved in any foreign key relationships." +msgstr "Крім того, таблиця не може бути включена в зв'язок зовнішніх ключів." + +#: rewrite/rewriteDefine.c:465 +#, c-format +msgid "could not convert table \"%s\" to a view because it has indexes" +msgstr "не вдалося перетворити таблицю \"%s\" на подання, тому, що вона має індекси" + +#: rewrite/rewriteDefine.c:471 +#, c-format +msgid "could not convert table \"%s\" to a view because it has child tables" +msgstr "не вдалося перетворити таблицю \"%s\" на подання, тому, що вона має дочірні таблиці" + +#: rewrite/rewriteDefine.c:477 +#, c-format +msgid "could not convert table \"%s\" to a view because it has row security enabled" +msgstr "не вдалося перетворити таблицю \"%s\" на подання, тому, що для неї активований захист на рівні рядків" + +#: rewrite/rewriteDefine.c:483 +#, c-format +msgid "could not convert table \"%s\" to a view because it has row security policies" +msgstr "не вдалося перетворити таблицю \"%s\" на подання, тому, що вона має політику захисту рядків" + +#: rewrite/rewriteDefine.c:510 +#, c-format +msgid "cannot have multiple RETURNING lists in a rule" +msgstr "правило не може мати декілька списків RETURNING" + +#: rewrite/rewriteDefine.c:515 +#, c-format +msgid "RETURNING lists are not supported in conditional rules" +msgstr "Умовні правила не підтримують списки RETURNING" + +#: rewrite/rewriteDefine.c:519 +#, c-format +msgid "RETURNING lists are not supported in non-INSTEAD rules" +msgstr "Правила non-INSTEAD не підтримують списки RETURNING" + +#: rewrite/rewriteDefine.c:683 +#, c-format +msgid "SELECT rule's target list has too many entries" +msgstr "Список цілей правила для SELECT має занадто багато елементів" + +#: rewrite/rewriteDefine.c:684 +#, c-format +msgid "RETURNING list has too many entries" +msgstr "Список RETURNING має занадто багато елементів" + +#: rewrite/rewriteDefine.c:711 +#, c-format +msgid "cannot convert relation containing dropped columns to view" +msgstr "перетворити зв'язок, який містить видаленні стовпці, на подання не можна" + +#: rewrite/rewriteDefine.c:712 +#, c-format +msgid "cannot create a RETURNING list for a relation containing dropped columns" +msgstr "створити список RETURNING для зв'язка, який містить видаленні стовпці, не можна" + +#: rewrite/rewriteDefine.c:718 +#, c-format +msgid "SELECT rule's target entry %d has different column name from column \"%s\"" +msgstr "Елемент результата правила для SELECT %d відрізняється іменем стовпця від стовпця \"%s\"" + +#: rewrite/rewriteDefine.c:720 +#, c-format +msgid "SELECT target entry is named \"%s\"." +msgstr "Ім'я елемента результату SELECT \"%s\"." + +#: rewrite/rewriteDefine.c:729 +#, c-format +msgid "SELECT rule's target entry %d has different type from column \"%s\"" +msgstr "Елемент результата правила для SELECT %d відрізняється типом від стовпця \"%s\"" + +#: rewrite/rewriteDefine.c:731 +#, c-format +msgid "RETURNING list's entry %d has different type from column \"%s\"" +msgstr "Елемент списку RETURNING %d відрізняється типом від стовпця \"%s\"" + +#: rewrite/rewriteDefine.c:734 rewrite/rewriteDefine.c:758 +#, c-format +msgid "SELECT target entry has type %s, but column has type %s." +msgstr "Елемент результату SELECT має тип %s, але стовпець має тип %s." + +#: rewrite/rewriteDefine.c:737 rewrite/rewriteDefine.c:762 +#, c-format +msgid "RETURNING list entry has type %s, but column has type %s." +msgstr "Елемент списку RETURNING має тип %s, але стовпець має тип %s." + +#: rewrite/rewriteDefine.c:753 +#, c-format +msgid "SELECT rule's target entry %d has different size from column \"%s\"" +msgstr "Елемент результата правил для SELECT %d відрізняється розміром від стовпця \"%s\"" + +#: rewrite/rewriteDefine.c:755 +#, c-format +msgid "RETURNING list's entry %d has different size from column \"%s\"" +msgstr "Елемент списку RETURNING %d відрізняється розміром від стовпця \"%s\"" + +#: rewrite/rewriteDefine.c:772 +#, c-format +msgid "SELECT rule's target list has too few entries" +msgstr "Список результату правила для SELECT має занадто мало елементів" + +#: rewrite/rewriteDefine.c:773 +#, c-format +msgid "RETURNING list has too few entries" +msgstr "Список RETURNING має занадто мало елементів" + +#: rewrite/rewriteDefine.c:866 rewrite/rewriteDefine.c:980 +#: rewrite/rewriteSupport.c:109 +#, c-format +msgid "rule \"%s\" for relation \"%s\" does not exist" +msgstr "правило \"%s\" для відношення \"%s\" не існує" + +#: rewrite/rewriteDefine.c:999 +#, c-format +msgid "renaming an ON SELECT rule is not allowed" +msgstr "не допускається перейменування правила ON SELECT" + +#: rewrite/rewriteHandler.c:545 +#, c-format +msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" +msgstr "Ім'я запиту WITH \"%s\" з'являється і в дії правила, і в переписаному запиті" + +#: rewrite/rewriteHandler.c:605 +#, c-format +msgid "cannot have RETURNING lists in multiple rules" +msgstr "списки RETURNING може мати лише одне правило" + +#: rewrite/rewriteHandler.c:816 rewrite/rewriteHandler.c:828 +#, c-format +msgid "cannot insert into column \"%s\"" +msgstr "вставити дані в стовпець \"%s\" не можна" + +#: rewrite/rewriteHandler.c:817 rewrite/rewriteHandler.c:839 +#, c-format +msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." +msgstr "Стовпець \"%s\" є ідентифікаційним стовпцем визначеним як GENERATED ALWAYS." + +#: rewrite/rewriteHandler.c:819 +#, c-format +msgid "Use OVERRIDING SYSTEM VALUE to override." +msgstr "Для зміни використайте OVERRIDING SYSTEM VALUE." + +#: rewrite/rewriteHandler.c:838 rewrite/rewriteHandler.c:845 +#, c-format +msgid "column \"%s\" can only be updated to DEFAULT" +msgstr "стовпець \"%s\" може бути оновлено тільки до DEFAULT" + +#: rewrite/rewriteHandler.c:1014 rewrite/rewriteHandler.c:1032 +#, c-format +msgid "multiple assignments to same column \"%s\"" +msgstr "кілька завдань для одного стовпця \"%s\"" + +#: rewrite/rewriteHandler.c:2062 +#, c-format +msgid "infinite recursion detected in policy for relation \"%s\"" +msgstr "виявлена безкінечна рекурсія в політиці для зв'язка \"%s\"" + +#: rewrite/rewriteHandler.c:2382 +msgid "Junk view columns are not updatable." +msgstr "Утилізовані стовпці подань не оновлюються." + +#: rewrite/rewriteHandler.c:2387 +msgid "View columns that are not columns of their base relation are not updatable." +msgstr "Стовпці подання, які не є стовпцями базового зв'язку, не оновлюються." + +#: rewrite/rewriteHandler.c:2390 +msgid "View columns that refer to system columns are not updatable." +msgstr "Стовпці подання, які посилаються на системні стовпці, не оновлюються." + +#: rewrite/rewriteHandler.c:2393 +msgid "View columns that return whole-row references are not updatable." +msgstr "Стовпці подання, що повертають посилання на весь рядок, не оновлюються." + +#: rewrite/rewriteHandler.c:2454 +msgid "Views containing DISTINCT are not automatically updatable." +msgstr "Подання які містять DISTINCT не оновлюються автоматично." + +#: rewrite/rewriteHandler.c:2457 +msgid "Views containing GROUP BY are not automatically updatable." +msgstr "Подання які містять GROUP BY не оновлюються автоматично." + +#: rewrite/rewriteHandler.c:2460 +msgid "Views containing HAVING are not automatically updatable." +msgstr "Подання які містять HAVING не оновлюються автоматично." + +#: rewrite/rewriteHandler.c:2463 +msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." +msgstr "Подання які містять UNION, INTERSECT, або EXCEPT не оновлюються автоматично." + +#: rewrite/rewriteHandler.c:2466 +msgid "Views containing WITH are not automatically updatable." +msgstr "Подання які містять WITH не оновлюються автоматично." + +#: rewrite/rewriteHandler.c:2469 +msgid "Views containing LIMIT or OFFSET are not automatically updatable." +msgstr "Подання які містять LIMIT або OFFSET не оновлюються автоматично." + +#: rewrite/rewriteHandler.c:2481 +msgid "Views that return aggregate functions are not automatically updatable." +msgstr "Подання які повертають агрегатні функції не оновлюються автоматично." + +#: rewrite/rewriteHandler.c:2484 +msgid "Views that return window functions are not automatically updatable." +msgstr "Подання які повертають віконні функції не оновлюються автоматично." + +#: rewrite/rewriteHandler.c:2487 +msgid "Views that return set-returning functions are not automatically updatable." +msgstr "Подання які повертають set-returning функції не оновлюються автоматично." + +#: rewrite/rewriteHandler.c:2494 rewrite/rewriteHandler.c:2498 +#: rewrite/rewriteHandler.c:2506 +msgid "Views that do not select from a single table or view are not automatically updatable." +msgstr "Подання які обирають дані не з одної таблиці або подання не оновлюються автоматично." + +#: rewrite/rewriteHandler.c:2509 +msgid "Views containing TABLESAMPLE are not automatically updatable." +msgstr "Подання які містять TABLESAMPLE не оновлюються автоматично." + +#: rewrite/rewriteHandler.c:2533 +msgid "Views that have no updatable columns are not automatically updatable." +msgstr "Подання які не мають оновлюваних стовпців не оновлюються автоматично." + +#: rewrite/rewriteHandler.c:3010 +#, c-format +msgid "cannot insert into column \"%s\" of view \"%s\"" +msgstr "вставити дані в стовпець \"%s\" подання \"%s\" не можна" + +#: rewrite/rewriteHandler.c:3018 +#, c-format +msgid "cannot update column \"%s\" of view \"%s\"" +msgstr "оновити дані в стовпці \"%s\" подання \"%s\" не можна" + +#: rewrite/rewriteHandler.c:3496 +#, c-format +msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" +msgstr "Правила DO INSTEAD NOTHING не підтримуються для операторів, які змінюють дані в WITH" + +#: rewrite/rewriteHandler.c:3510 +#, c-format +msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" +msgstr "умовні правила DO INSTEAD не підтримуються для операторів, які змінюють дані в WITH" + +#: rewrite/rewriteHandler.c:3514 +#, c-format +msgid "DO ALSO rules are not supported for data-modifying statements in WITH" +msgstr "Правила DO ALSO не підтримуються для операторів, які змінюють дані в WITH" + +#: rewrite/rewriteHandler.c:3519 +#, c-format +msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" +msgstr "складові правила DO INSTEAD не підтримуються операторами, які змінюють дані у WITH" + +#: rewrite/rewriteHandler.c:3710 rewrite/rewriteHandler.c:3718 +#: rewrite/rewriteHandler.c:3726 +#, c-format +msgid "Views with conditional DO INSTEAD rules are not automatically updatable." +msgstr "Подання з умовними правилами DO INSTEAD не оновлюються автоматично." + +#: rewrite/rewriteHandler.c:3819 +#, c-format +msgid "cannot perform INSERT RETURNING on relation \"%s\"" +msgstr "виконати INSERT RETURNING для зв'язка \"%s\" не можна" + +#: rewrite/rewriteHandler.c:3821 +#, c-format +msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." +msgstr "Вам потрібне безумовне правило ON INSERT DO INSTEAD з реченням RETURNING." + +#: rewrite/rewriteHandler.c:3826 +#, c-format +msgid "cannot perform UPDATE RETURNING on relation \"%s\"" +msgstr "виконати UPDATE RETURNING для зв'язка \"%s\" не можна" + +#: rewrite/rewriteHandler.c:3828 +#, c-format +msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." +msgstr "Вам потрібне безумовне правило ON UPDATE DO INSTEAD з реченням RETURNING." + +#: rewrite/rewriteHandler.c:3833 +#, c-format +msgid "cannot perform DELETE RETURNING on relation \"%s\"" +msgstr "виконати DELETE RETURNING для зв'язка \"%s\" не можна" + +#: rewrite/rewriteHandler.c:3835 +#, c-format +msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." +msgstr "Вам потрібне безумовне правило ON DELETE DO INSTEAD з реченням RETURNING." + +#: rewrite/rewriteHandler.c:3853 +#, c-format +msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" +msgstr "INSERT з реченням ON CONFLICT не можна використовувати з таблицею, яка має правила INSERT або UPDATE" + +#: rewrite/rewriteHandler.c:3910 +#, c-format +msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" +msgstr "WITH не можна використовувати в запиті, який переписаний правилами в декілька запитів" + +#: rewrite/rewriteManip.c:1006 +#, c-format +msgid "conditional utility statements are not implemented" +msgstr "умовні службові оператори не реалізовані" + +#: rewrite/rewriteManip.c:1172 +#, c-format +msgid "WHERE CURRENT OF on a view is not implemented" +msgstr "Умова WHERE CURRENT OF для подання не реалізована" + +#: rewrite/rewriteManip.c:1507 +#, c-format +msgid "NEW variables in ON UPDATE rules cannot reference columns that are part of a multiple assignment in the subject UPDATE command" +msgstr "Змінні NEW в правилах ON UPDATE не можуть посилатись на стовпці, які є частиною декілької призначень в команді UPDATE" + +#: snowball/dict_snowball.c:199 +#, c-format +msgid "no Snowball stemmer available for language \"%s\" and encoding \"%s\"" +msgstr "засіб визначення основи слова Snowball для мови \"%s\" і кодування \"%s\" не знайдено" + +#: snowball/dict_snowball.c:222 tsearch/dict_ispell.c:74 +#: tsearch/dict_simple.c:49 +#, c-format +msgid "multiple StopWords parameters" +msgstr "повторюваний параметр StopWords" + +#: snowball/dict_snowball.c:231 +#, c-format +msgid "multiple Language parameters" +msgstr "повторюваний параметр Language" + +#: snowball/dict_snowball.c:238 +#, c-format +msgid "unrecognized Snowball parameter: \"%s\"" +msgstr "нерозпізнаний параметр Snowball: \"%s\"" + +#: snowball/dict_snowball.c:246 +#, c-format +msgid "missing Language parameter" +msgstr "пропущений параметр Language" + +#: statistics/dependencies.c:667 statistics/dependencies.c:720 +#: statistics/mcv.c:1477 statistics/mcv.c:1508 statistics/mvdistinct.c:348 +#: statistics/mvdistinct.c:401 utils/adt/pseudotypes.c:42 +#: utils/adt/pseudotypes.c:76 +#, c-format +msgid "cannot accept a value of type %s" +msgstr "не можна прийняти значення типу %s" + +#: statistics/extended_stats.c:145 +#, c-format +msgid "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" +msgstr "об'єкт статистики \"%s.%s\" не вдалося обчислити для відношення \"%s.%s\"" + +#: statistics/mcv.c:1365 utils/adt/jsonfuncs.c:1800 +#, c-format +msgid "function returning record called in context that cannot accept type record" +msgstr "функція, що повертає набір, викликана у контексті, що не приймає тип запис" + +#: storage/buffer/bufmgr.c:588 storage/buffer/bufmgr.c:669 +#, c-format +msgid "cannot access temporary tables of other sessions" +msgstr "доступ до тимчасових таблиць з інших сесій заблоковано" + +#: storage/buffer/bufmgr.c:825 +#, c-format +msgid "unexpected data beyond EOF in block %u of relation %s" +msgstr "неочікуванні дані після EOF в блоці %u відношення %s" + +#: storage/buffer/bufmgr.c:827 +#, c-format +msgid "This has been seen to occur with buggy kernels; consider updating your system." +msgstr "Ця ситуація може виникати через помилки в ядрі; можливо, вам слід оновити вашу систему." + +#: storage/buffer/bufmgr.c:925 +#, c-format +msgid "invalid page in block %u of relation %s; zeroing out page" +msgstr "неприпустима сторінка в блоці %u відношення %s; сторінка обнуляється" + +#: storage/buffer/bufmgr.c:4211 +#, c-format +msgid "could not write block %u of %s" +msgstr "неможливо записати блок %u файлу %s" + +#: storage/buffer/bufmgr.c:4213 +#, c-format +msgid "Multiple failures --- write error might be permanent." +msgstr "Кілька неполадок --- можливо, постійна помилка запису." + +#: storage/buffer/bufmgr.c:4234 storage/buffer/bufmgr.c:4253 +#, c-format +msgid "writing block %u of relation %s" +msgstr "записування блоку %u зв'язку %s" + +#: storage/buffer/bufmgr.c:4556 +#, c-format +msgid "snapshot too old" +msgstr "знімок є застарим" + +#: storage/buffer/localbuf.c:205 +#, c-format +msgid "no empty local buffer available" +msgstr "немає жодного пустого локального буферу" + +#: storage/buffer/localbuf.c:433 +#, c-format +msgid "cannot access temporary tables during a parallel operation" +msgstr "немає доступу до тимчасових таблиць під час паралельної операції" + +#: storage/file/buffile.c:319 +#, c-format +msgid "could not open temporary file \"%s\" from BufFile \"%s\": %m" +msgstr "не вдалося відкрити тимчасовий файл \"%s\" з BufFile \"%s\": %m" + +#: storage/file/buffile.c:795 +#, c-format +msgid "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" +msgstr "не вдалося визначити розмір тимчасового файлу \"%s\" з BufFile \"%s\": %m" + +#: storage/file/fd.c:508 storage/file/fd.c:580 storage/file/fd.c:616 +#, c-format +msgid "could not flush dirty data: %m" +msgstr "не вдалося очистити \"брудні\" дані: %m" + +#: storage/file/fd.c:538 +#, c-format +msgid "could not determine dirty data size: %m" +msgstr "не вдалося визначити розмір \"брудних\" даних: %m" + +#: storage/file/fd.c:590 +#, c-format +msgid "could not munmap() while flushing data: %m" +msgstr "не вдалося munmap() під час очищення даних: %m" + +#: storage/file/fd.c:798 +#, c-format +msgid "could not link file \"%s\" to \"%s\": %m" +msgstr "для файлу \"%s\" не вдалося створити посилання \"%s\": %m" + +#: storage/file/fd.c:881 +#, c-format +msgid "getrlimit failed: %m" +msgstr "помилка getrlimit: %m" + +#: storage/file/fd.c:971 +#, c-format +msgid "insufficient file descriptors available to start server process" +msgstr "недостатньо доступних дескрипторів файлу для запуску серверного процесу" + +#: storage/file/fd.c:972 +#, c-format +msgid "System allows %d, we need at least %d." +msgstr "Система дозволяє %d, потрібно щонайменше %d." + +#: storage/file/fd.c:1023 storage/file/fd.c:2357 storage/file/fd.c:2467 +#: storage/file/fd.c:2618 +#, c-format +msgid "out of file descriptors: %m; release and retry" +msgstr "нестача дескрипторів файлу: %m; вивільніть і спробуйте знову" + +#: storage/file/fd.c:1397 +#, c-format +msgid "temporary file: path \"%s\", size %lu" +msgstr "тимчасовий файл: шлях \"%s\", розмір %lu" + +#: storage/file/fd.c:1528 +#, c-format +msgid "cannot create temporary directory \"%s\": %m" +msgstr "неможливо створити тимчасовий каталог \"%s\": %m" + +#: storage/file/fd.c:1535 +#, c-format +msgid "cannot create temporary subdirectory \"%s\": %m" +msgstr "неможливо створити тимчасовий підкаталог \"%s\": %m" + +#: storage/file/fd.c:1728 +#, c-format +msgid "could not create temporary file \"%s\": %m" +msgstr "неможливо створити тимчасовий файл \"%s\": %m" + +#: storage/file/fd.c:1763 +#, c-format +msgid "could not open temporary file \"%s\": %m" +msgstr "неможливо відкрити тимчасовий файл \"%s\": %m" + +#: storage/file/fd.c:1804 +#, c-format +msgid "could not unlink temporary file \"%s\": %m" +msgstr "помилка видалення тимчасового файлу \"%s\": %m" + +#: storage/file/fd.c:2068 +#, c-format +msgid "temporary file size exceeds temp_file_limit (%dkB)" +msgstr "розмір тимчасового файлу перевищує temp_file_limit (%d Кб)" + +#: storage/file/fd.c:2333 storage/file/fd.c:2392 +#, c-format +msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" +msgstr "перевищено maxAllocatedDescs (%d) при спробі відкрити файл \"%s\"" + +#: storage/file/fd.c:2437 +#, c-format +msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" +msgstr "перевищено maxAllocatedDescs (%d) при спробі виконати команду \"%s\"" + +#: storage/file/fd.c:2594 +#, c-format +msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" +msgstr "перевищено maxAllocatedDescs (%d) при спробі відкрити каталог \"%s\"" + +#: storage/file/fd.c:3122 +#, c-format +msgid "unexpected file found in temporary-files directory: \"%s\"" +msgstr "знайдено неочікуваний файл в каталозі тимчасових файлів: \"%s\"" + +#: storage/file/sharedfileset.c:111 +#, c-format +msgid "could not attach to a SharedFileSet that is already destroyed" +msgstr "не вдалося підключитися до вже знищеному набору SharedFileSet" + +#: storage/ipc/dsm.c:338 +#, c-format +msgid "dynamic shared memory control segment is corrupt" +msgstr "сегмент керування динамічної спільної пам'яті пошкоджений" + +#: storage/ipc/dsm.c:399 +#, c-format +msgid "dynamic shared memory control segment is not valid" +msgstr "сегмент керування динамічної спільної пам'яті недійсний" + +#: storage/ipc/dsm.c:494 +#, c-format +msgid "too many dynamic shared memory segments" +msgstr "занадто багато сегментів динамічної спільної пам'яті" + +#: storage/ipc/dsm_impl.c:230 storage/ipc/dsm_impl.c:526 +#: storage/ipc/dsm_impl.c:630 storage/ipc/dsm_impl.c:801 +#, c-format +msgid "could not unmap shared memory segment \"%s\": %m" +msgstr "не вдалося звільнити сегмент спільної пам'яті \"%s\": %m" + +#: storage/ipc/dsm_impl.c:240 storage/ipc/dsm_impl.c:536 +#: storage/ipc/dsm_impl.c:640 storage/ipc/dsm_impl.c:811 +#, c-format +msgid "could not remove shared memory segment \"%s\": %m" +msgstr "не вдалося видалити сегмент спільної пам'яті \"%s\": %m" + +#: storage/ipc/dsm_impl.c:264 storage/ipc/dsm_impl.c:711 +#: storage/ipc/dsm_impl.c:825 +#, c-format +msgid "could not open shared memory segment \"%s\": %m" +msgstr "не вдалося відкрити сегмент спільної пам'яті \"%s\": %m" + +#: storage/ipc/dsm_impl.c:289 storage/ipc/dsm_impl.c:552 +#: storage/ipc/dsm_impl.c:756 storage/ipc/dsm_impl.c:849 +#, c-format +msgid "could not stat shared memory segment \"%s\": %m" +msgstr "не вдалося звернутися до сегменту спільної пам'яті \"%s\": %m" + +#: storage/ipc/dsm_impl.c:316 storage/ipc/dsm_impl.c:900 +#, c-format +msgid "could not resize shared memory segment \"%s\" to %zu bytes: %m" +msgstr "не вдалося змінити розмір сегменту спільної пам'яті \"%s\" до %zu байтів: %m" + +#: storage/ipc/dsm_impl.c:338 storage/ipc/dsm_impl.c:573 +#: storage/ipc/dsm_impl.c:732 storage/ipc/dsm_impl.c:922 +#, c-format +msgid "could not map shared memory segment \"%s\": %m" +msgstr "не вдалося показати сегмент спільної пам'яті \"%s\": %m" + +#: storage/ipc/dsm_impl.c:508 +#, c-format +msgid "could not get shared memory segment: %m" +msgstr "не вдалося отримати сегмент спільної пам'яті: %m" + +#: storage/ipc/dsm_impl.c:696 +#, c-format +msgid "could not create shared memory segment \"%s\": %m" +msgstr "не вдалося створити сегмент спільної пам'яті \"%s\": %m" + +#: storage/ipc/dsm_impl.c:933 +#, c-format +msgid "could not close shared memory segment \"%s\": %m" +msgstr "не вдалося закрити сегмент спільної пам'яті \"%s\": %m" + +#: storage/ipc/dsm_impl.c:972 storage/ipc/dsm_impl.c:1020 +#, c-format +msgid "could not duplicate handle for \"%s\": %m" +msgstr "не вдалося продублювати маркер для \"%s\": %m" + +#. translator: %s is a syscall name, such as "poll()" +#: storage/ipc/latch.c:940 storage/ipc/latch.c:1094 storage/ipc/latch.c:1307 +#: storage/ipc/latch.c:1457 storage/ipc/latch.c:1570 +#, c-format +msgid "%s failed: %m" +msgstr "%s помилка: %m" + +#: storage/ipc/procarray.c:3014 +#, c-format +msgid "database \"%s\" is being used by prepared transactions" +msgstr "база даних \"%s\" використовується підготовленими транзакціями" + +#: storage/ipc/procarray.c:3046 storage/ipc/signalfuncs.c:142 +#, c-format +msgid "must be a superuser to terminate superuser process" +msgstr "щоб припинити процес суперкористувача потрібно бути суперкористувачем" + +#: storage/ipc/procarray.c:3053 storage/ipc/signalfuncs.c:147 +#, c-format +msgid "must be a member of the role whose process is being terminated or member of pg_signal_backend" +msgstr "потрібно бути учасником ролі, процес котрої припиняється або учасником pg_signal_backend" + +#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:982 +#: storage/lmgr/lock.c:1020 storage/lmgr/lock.c:2845 storage/lmgr/lock.c:4175 +#: storage/lmgr/lock.c:4240 storage/lmgr/lock.c:4532 +#: storage/lmgr/predicate.c:2401 storage/lmgr/predicate.c:2416 +#: storage/lmgr/predicate.c:3898 storage/lmgr/predicate.c:5009 +#: utils/hash/dynahash.c:1067 +#, c-format +msgid "out of shared memory" +msgstr "нестача спільної пам'яті" + +#: storage/ipc/shmem.c:170 storage/ipc/shmem.c:266 +#, c-format +msgid "out of shared memory (%zu bytes requested)" +msgstr "нестача спільної пам'яті (потребується %zu байт)" + +#: storage/ipc/shmem.c:441 +#, c-format +msgid "could not create ShmemIndex entry for data structure \"%s\"" +msgstr "не вдалося створити введення ShmemIndex для структури даних \"%s\"" + +#: storage/ipc/shmem.c:456 +#, c-format +msgid "ShmemIndex entry size is wrong for data structure \"%s\": expected %zu, actual %zu" +msgstr "розмір введення ShmemIndex є неправильним для структури даних \"%s\": очікувано %zu, фактично %zu" + +#: storage/ipc/shmem.c:475 +#, c-format +msgid "not enough shared memory for data structure \"%s\" (%zu bytes requested)" +msgstr "недостатньо спільної пам'яті для структури даних \"%s\" (потрібно було %zu байтів)" + +#: storage/ipc/shmem.c:507 storage/ipc/shmem.c:526 +#, c-format +msgid "requested shared memory size overflows size_t" +msgstr "запитаний сегмент спільної пам'яті не вміщається в size_t" + +#: storage/ipc/signalfuncs.c:67 +#, c-format +msgid "PID %d is not a PostgreSQL server process" +msgstr "PID %d не є серверним процесом PostgreSQL" + +#: storage/ipc/signalfuncs.c:98 storage/lmgr/proc.c:1366 +#, c-format +msgid "could not send signal to process %d: %m" +msgstr "не вдалося надіслати сигнал процесу %d: %m" + +#: storage/ipc/signalfuncs.c:118 +#, c-format +msgid "must be a superuser to cancel superuser query" +msgstr "щоб скасувати запит суперкористувача потрібно бути суперкористувачем" + +#: storage/ipc/signalfuncs.c:123 +#, c-format +msgid "must be a member of the role whose query is being canceled or member of pg_signal_backend" +msgstr "потрібно бути учасником ролі, запит котрої скасовується, або учасником pg_signal_backend" + +#: storage/ipc/signalfuncs.c:183 +#, c-format +msgid "must be superuser to rotate log files with adminpack 1.0" +msgstr "прокручувати файли протоколів використовуючи adminpack 1.0, може лише суперкористувач" + +#. translator: %s is a SQL function name +#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:253 +#, c-format +msgid "Consider using %s, which is part of core, instead." +msgstr "Розгляньте використання %s, що є частиною ядра." + +#: storage/ipc/signalfuncs.c:191 storage/ipc/signalfuncs.c:211 +#, c-format +msgid "rotation not possible because log collection not active" +msgstr "обертання неможливе тому, що записування колекції не активоване" + +#: storage/ipc/standby.c:580 tcop/postgres.c:3177 +#, c-format +msgid "canceling statement due to conflict with recovery" +msgstr "виконання оператора скасовано через конфлікт з процесом відновлення" + +#: storage/ipc/standby.c:581 tcop/postgres.c:2469 +#, c-format +msgid "User transaction caused buffer deadlock with recovery." +msgstr "Транзакція користувача призвела до взаємного блокування з процесом відновлення." + +#: storage/large_object/inv_api.c:191 +#, c-format +msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" +msgstr "у введенні pg_largeobject для OID %u, сторінка %d має неприпустимий розмір поля даних %d" + +#: storage/large_object/inv_api.c:272 +#, c-format +msgid "invalid flags for opening a large object: %d" +msgstr "неприпустимі позначки для відкриття великого об'єкту: %d" + +#: storage/large_object/inv_api.c:462 +#, c-format +msgid "invalid whence setting: %d" +msgstr "неприпустиме значення орієнтиру: %d" + +#: storage/large_object/inv_api.c:634 +#, c-format +msgid "invalid large object write request size: %d" +msgstr "неприпустимий розмір запису великого об'єкту: %d" + +#: storage/lmgr/deadlock.c:1124 +#, c-format +msgid "Process %d waits for %s on %s; blocked by process %d." +msgstr "Процес %d очікує в режимі %s блокування \"%s\"; заблокований процесом %d." + +#: storage/lmgr/deadlock.c:1143 +#, c-format +msgid "Process %d: %s" +msgstr "Процес %d: %s" + +#: storage/lmgr/deadlock.c:1152 +#, c-format +msgid "deadlock detected" +msgstr "виявлено взаємне блокування" + +#: storage/lmgr/deadlock.c:1155 +#, c-format +msgid "See server log for query details." +msgstr "Подробиці запиту перегляньте в записі серверу." + +#: storage/lmgr/lmgr.c:830 +#, c-format +msgid "while updating tuple (%u,%u) in relation \"%s\"" +msgstr "при оновленні кортежу (%u,%u) в зв'язку \"%s\"" + +#: storage/lmgr/lmgr.c:833 +#, c-format +msgid "while deleting tuple (%u,%u) in relation \"%s\"" +msgstr "при видаленні кортежу (%u,%u) в зв'язку \"%s\"" + +#: storage/lmgr/lmgr.c:836 +#, c-format +msgid "while locking tuple (%u,%u) in relation \"%s\"" +msgstr "при блокуванні кортежу (%u,%u) в зв'язку \"%s\"" + +#: storage/lmgr/lmgr.c:839 +#, c-format +msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" +msgstr "при блокуванні оновленої версії (%u,%u) кортежу в зв'язку \"%s\"" + +#: storage/lmgr/lmgr.c:842 +#, c-format +msgid "while inserting index tuple (%u,%u) in relation \"%s\"" +msgstr "при вставці кортежу індексу (%u,%u) в зв'язку \"%s\"" + +#: storage/lmgr/lmgr.c:845 +#, c-format +msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" +msgstr "під час перевірки унікальності кортежа (%u,%u) у відношенні \"%s\"" + +#: storage/lmgr/lmgr.c:848 +#, c-format +msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" +msgstr "під час повторної перевірки оновленого кортежа (%u,%u) у відношенні \"%s\"" + +#: storage/lmgr/lmgr.c:851 +#, c-format +msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" +msgstr "під час перевірки обмеження-виключення для кортежа (%u,%u) у відношенні \"%s\"" + +#: storage/lmgr/lmgr.c:1106 +#, c-format +msgid "relation %u of database %u" +msgstr "відношення %u бази даних %u" + +#: storage/lmgr/lmgr.c:1112 +#, c-format +msgid "extension of relation %u of database %u" +msgstr "розширення відношення %u бази даних %u" + +#: storage/lmgr/lmgr.c:1118 +#, c-format +msgid "pg_database.datfrozenxid of database %u" +msgstr "pg_database.datfrozenxid бази даних %u" + +#: storage/lmgr/lmgr.c:1123 +#, c-format +msgid "page %u of relation %u of database %u" +msgstr "сторінка %u відношення %u бази даних %u" + +#: storage/lmgr/lmgr.c:1130 +#, c-format +msgid "tuple (%u,%u) of relation %u of database %u" +msgstr "кортеж (%u,%u) відношення %u бази даних %u" + +#: storage/lmgr/lmgr.c:1138 +#, c-format +msgid "transaction %u" +msgstr "транзакція %u" + +#: storage/lmgr/lmgr.c:1143 +#, c-format +msgid "virtual transaction %d/%u" +msgstr "віртуальна транзакція %d/%u" + +#: storage/lmgr/lmgr.c:1149 +#, c-format +msgid "speculative token %u of transaction %u" +msgstr "орієнтовний маркер %u транзакції %u" + +#: storage/lmgr/lmgr.c:1155 +#, c-format +msgid "object %u of class %u of database %u" +msgstr "об’єкт %u класу %u бази даних %u" + +#: storage/lmgr/lmgr.c:1163 +#, c-format +msgid "user lock [%u,%u,%u]" +msgstr "користувацьке блокування [%u,%u,%u]" + +#: storage/lmgr/lmgr.c:1170 +#, c-format +msgid "advisory lock [%u,%u,%u,%u]" +msgstr "рекомендаційне блокування [%u,%u,%u,%u]" + +#: storage/lmgr/lmgr.c:1178 +#, c-format +msgid "unrecognized locktag type %d" +msgstr "нерозпізнаний тип блокування %d" + +#: storage/lmgr/lock.c:803 +#, c-format +msgid "cannot acquire lock mode %s on database objects while recovery is in progress" +msgstr "поки виконується відновлення, не можна отримати блокування об'єктів бази даних в режимі %s" + +#: storage/lmgr/lock.c:805 +#, c-format +msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." +msgstr "Під час процесу відновлення для об'єктів бази даних може бути отримане лише блокування RowExclusiveLock або менш сильна." + +#: storage/lmgr/lock.c:983 storage/lmgr/lock.c:1021 storage/lmgr/lock.c:2846 +#: storage/lmgr/lock.c:4176 storage/lmgr/lock.c:4241 storage/lmgr/lock.c:4533 +#, c-format +msgid "You might need to increase max_locks_per_transaction." +msgstr "Можливо, слід збільшити параметр max_locks_per_transaction." + +#: storage/lmgr/lock.c:3292 storage/lmgr/lock.c:3408 +#, c-format +msgid "cannot PREPARE while holding both session-level and transaction-level locks on the same object" +msgstr "не можна виконати PREPARE, під час утримання блокування на рівні сеансу і на рівні транзакції для одного об'єкта" + +#: storage/lmgr/predicate.c:700 +#, c-format +msgid "not enough elements in RWConflictPool to record a read/write conflict" +msgstr "в RWConflictPool недостатньо елементів для запису про конфлікт читання/запису" + +#: storage/lmgr/predicate.c:701 storage/lmgr/predicate.c:729 +#, c-format +msgid "You might need to run fewer transactions at a time or increase max_connections." +msgstr "Можливо, вам слід виконувати менше транзакцій в секунду або збільшити параметр max_connections." + +#: storage/lmgr/predicate.c:728 +#, c-format +msgid "not enough elements in RWConflictPool to record a potential read/write conflict" +msgstr "в RWConflictPool недостатньо елементів для запису про потенціальний конфлікт читання/запису" + +#: storage/lmgr/predicate.c:1535 +#, c-format +msgid "deferrable snapshot was unsafe; trying a new one" +msgstr "знімок, який відкладається, був небезпечним; пробуємо новий" + +#: storage/lmgr/predicate.c:1624 +#, c-format +msgid "\"default_transaction_isolation\" is set to \"serializable\"." +msgstr "параметр \"default_transaction_isolation\" має значення \"serializable\"." + +#: storage/lmgr/predicate.c:1625 +#, c-format +msgid "You can use \"SET default_transaction_isolation = 'repeatable read'\" to change the default." +msgstr "Ви можете використати \"SET default_transaction_isolation = 'repeatable read'\" щоб змінити режим за замовчуванням." + +#: storage/lmgr/predicate.c:1676 +#, c-format +msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" +msgstr "транзакція, яка імпортує знімок не повинна бутив READ ONLY DEFERRABLE" + +#: storage/lmgr/predicate.c:1755 utils/time/snapmgr.c:623 +#: utils/time/snapmgr.c:629 +#, c-format +msgid "could not import the requested snapshot" +msgstr "не вдалося імпортувати запитаний знімок" + +#: storage/lmgr/predicate.c:1756 utils/time/snapmgr.c:630 +#, c-format +msgid "The source process with PID %d is not running anymore." +msgstr "Вихідний процес з PID %d вже не виконується." + +#: storage/lmgr/predicate.c:2402 storage/lmgr/predicate.c:2417 +#: storage/lmgr/predicate.c:3899 +#, c-format +msgid "You might need to increase max_pred_locks_per_transaction." +msgstr "Можливо, вам слід збільшити параметр max_pred_locks_per_transaction." + +#: storage/lmgr/predicate.c:4030 storage/lmgr/predicate.c:4066 +#: storage/lmgr/predicate.c:4099 storage/lmgr/predicate.c:4107 +#: storage/lmgr/predicate.c:4146 storage/lmgr/predicate.c:4388 +#: storage/lmgr/predicate.c:4725 storage/lmgr/predicate.c:4737 +#: storage/lmgr/predicate.c:4780 storage/lmgr/predicate.c:4818 +#, c-format +msgid "could not serialize access due to read/write dependencies among transactions" +msgstr "не вдалося серіалізувати доступ через залежність читання/запису серед транзакцій" + +#: storage/lmgr/predicate.c:4032 storage/lmgr/predicate.c:4068 +#: storage/lmgr/predicate.c:4101 storage/lmgr/predicate.c:4109 +#: storage/lmgr/predicate.c:4148 storage/lmgr/predicate.c:4390 +#: storage/lmgr/predicate.c:4727 storage/lmgr/predicate.c:4739 +#: storage/lmgr/predicate.c:4782 storage/lmgr/predicate.c:4820 +#, c-format +msgid "The transaction might succeed if retried." +msgstr "Транзакція може завершитися успішно, якщо повторити спробу." + +#: storage/lmgr/proc.c:358 +#, c-format +msgid "number of requested standby connections exceeds max_wal_senders (currently %d)" +msgstr "кількість запитаних підключень резервного серверу перевищує max_wal_senders (поточна %d)" + +#: storage/lmgr/proc.c:1337 +#, c-format +msgid "Process %d waits for %s on %s." +msgstr "Процес %d очікує в режимі %s блокування %s." + +#: storage/lmgr/proc.c:1348 +#, c-format +msgid "sending cancel to blocking autovacuum PID %d" +msgstr "зняття блокуючого процесу автоочистки PID %d" + +#: storage/lmgr/proc.c:1468 +#, c-format +msgid "process %d avoided deadlock for %s on %s by rearranging queue order after %ld.%03d ms" +msgstr "процес %d уникнув взаємного блокування, чекаючи в режимі %s блокування %s змінивши порядок черги після %ld.%03d мс" + +#: storage/lmgr/proc.c:1483 +#, c-format +msgid "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" +msgstr "процес %d виявив взаємне блокування, чекаючи в режимі %s блокування %s після %ld.%03d мс" + +#: storage/lmgr/proc.c:1492 +#, c-format +msgid "process %d still waiting for %s on %s after %ld.%03d ms" +msgstr "процес %d все ще чекає в режимі %s блокування %s після %ld.%03d мс" + +#: storage/lmgr/proc.c:1499 +#, c-format +msgid "process %d acquired %s on %s after %ld.%03d ms" +msgstr "процес %d отримав в режимі %s блокування %s після %ld.%03d мс" + +#: storage/lmgr/proc.c:1515 +#, c-format +msgid "process %d failed to acquire %s on %s after %ld.%03d ms" +msgstr "процес %d не зміг отримати в режимі %s блокування %s після %ld.%03d мс" + +#: storage/page/bufpage.c:145 +#, c-format +msgid "page verification failed, calculated checksum %u but expected %u" +msgstr "помилка перевірки сторінки, обчислена контрольна сума %u але очікувалось %u" + +#: storage/page/bufpage.c:209 storage/page/bufpage.c:503 +#: storage/page/bufpage.c:740 storage/page/bufpage.c:873 +#: storage/page/bufpage.c:969 storage/page/bufpage.c:1081 +#, c-format +msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" +msgstr "пошкоджені вказівники сторінки: нижній = %u, верхній = %u, спеціальний = %u" + +#: storage/page/bufpage.c:525 +#, c-format +msgid "corrupted line pointer: %u" +msgstr "пошкоджений вказівник рядка: %u" + +#: storage/page/bufpage.c:552 storage/page/bufpage.c:924 +#, c-format +msgid "corrupted item lengths: total %u, available space %u" +msgstr "пошкоджена довжина елементу: загальний розмір %u, доступний розмір %u" + +#: storage/page/bufpage.c:759 storage/page/bufpage.c:897 +#: storage/page/bufpage.c:985 storage/page/bufpage.c:1097 +#, c-format +msgid "corrupted line pointer: offset = %u, size = %u" +msgstr "пошкоджений вказівник рядка: зсув = %u, розмір = %u" + +#: storage/smgr/md.c:333 storage/smgr/md.c:836 +#, c-format +msgid "could not truncate file \"%s\": %m" +msgstr "не вдалося скоротити файл \"%s\": %m" + +#: storage/smgr/md.c:407 +#, c-format +msgid "cannot extend file \"%s\" beyond %u blocks" +msgstr "не можна розширити файл \"%s\" до блоку %u" + +#: storage/smgr/md.c:422 +#, c-format +msgid "could not extend file \"%s\": %m" +msgstr "не вдалося розширити файл \"%s\": %m" + +#: storage/smgr/md.c:424 storage/smgr/md.c:431 storage/smgr/md.c:719 +#, c-format +msgid "Check free disk space." +msgstr "Перевірьте вільний дисковий простір." + +#: storage/smgr/md.c:428 +#, c-format +msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" +msgstr "не вдалося розширити файл \"%s\" записано лише %d з %d байт в блоку %u" + +#: storage/smgr/md.c:640 +#, c-format +msgid "could not read block %u in file \"%s\": %m" +msgstr "не вдалося прочитати блок %u в файлі \"%s\": %m" + +#: storage/smgr/md.c:656 +#, c-format +msgid "could not read block %u in file \"%s\": read only %d of %d bytes" +msgstr "не вдалося прочитати блок %u в файлі \"%s\": прочитано лише %d з %d байт" + +#: storage/smgr/md.c:710 +#, c-format +msgid "could not write block %u in file \"%s\": %m" +msgstr "не вдалося записати блок %u у файл \"%s\": %m" + +#: storage/smgr/md.c:715 +#, c-format +msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" +msgstr "не вдалося записати блок %u в файл \"%s\": записано лише %d з %d байт" + +#: storage/smgr/md.c:807 +#, c-format +msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" +msgstr "не вдалося скоротити файл \"%s\" до %u блоків: лише %u блоків зараз" + +#: storage/smgr/md.c:862 +#, c-format +msgid "could not truncate file \"%s\" to %u blocks: %m" +msgstr "не вдалося скоротити файл \"%s\" до %u блоків: %m" + +#: storage/smgr/md.c:957 +#, c-format +msgid "could not forward fsync request because request queue is full" +msgstr "не вдалося переслати запит синхронізації, тому, що черга запитів переповнена" + +#: storage/smgr/md.c:1256 +#, c-format +msgid "could not open file \"%s\" (target block %u): previous segment is only %u blocks" +msgstr "не вдалося відкрити файл \"%s\" (цільовий блок %u): попередній сегмент має лише %u блоків" + +#: storage/smgr/md.c:1270 +#, c-format +msgid "could not open file \"%s\" (target block %u): %m" +msgstr "не вдалося відкрити файл \"%s\" (цільовий блок %u): %m" + +#: storage/sync/sync.c:401 +#, c-format +msgid "could not fsync file \"%s\" but retrying: %m" +msgstr "не вдалося синхронізувати файл \"%s\" але триває повторна спроба: %m" + +#: tcop/fastpath.c:109 tcop/fastpath.c:461 tcop/fastpath.c:591 +#, c-format +msgid "invalid argument size %d in function call message" +msgstr "неприпустимий розмір аргументу %d в повідомленні виклику функції" + +#: tcop/fastpath.c:307 +#, c-format +msgid "fastpath function call: \"%s\" (OID %u)" +msgstr "виклик функції fastpath: \"%s\" (OID %u)" + +#: tcop/fastpath.c:389 tcop/postgres.c:1323 tcop/postgres.c:1581 +#: tcop/postgres.c:2013 tcop/postgres.c:2250 +#, c-format +msgid "duration: %s ms" +msgstr "тривалість: %s мс" + +#: tcop/fastpath.c:393 +#, c-format +msgid "duration: %s ms fastpath function call: \"%s\" (OID %u)" +msgstr "тривалість: %s мс, виклик функції fastpath: \"%s\" (OID %u)" + +#: tcop/fastpath.c:429 tcop/fastpath.c:556 +#, c-format +msgid "function call message contains %d arguments but function requires %d" +msgstr "повідомлення виклику функції містить %d аргументів, але функція потребує %d" + +#: tcop/fastpath.c:437 +#, c-format +msgid "function call message contains %d argument formats but %d arguments" +msgstr "повідомлення виклику функції містить %d форматів, але %d аргументів" + +#: tcop/fastpath.c:524 tcop/fastpath.c:607 +#, c-format +msgid "incorrect binary data format in function argument %d" +msgstr "неправильний формат двійкових даних в аргументі функції %d" + +#: tcop/postgres.c:355 tcop/postgres.c:391 tcop/postgres.c:418 +#, c-format +msgid "unexpected EOF on client connection" +msgstr "неочікуваний обрив з'єднання з клієнтом" + +#: tcop/postgres.c:441 tcop/postgres.c:453 tcop/postgres.c:464 +#: tcop/postgres.c:476 tcop/postgres.c:4539 +#, c-format +msgid "invalid frontend message type %d" +msgstr "неприпустимий тип клієнтського повідомлення %d" + +#: tcop/postgres.c:1042 +#, c-format +msgid "statement: %s" +msgstr "оператор: %s" + +#: tcop/postgres.c:1328 +#, c-format +msgid "duration: %s ms statement: %s" +msgstr "тривалість: %s мс, оператор: %s" + +#: tcop/postgres.c:1377 +#, c-format +msgid "parse %s: %s" +msgstr "аналізування %s: %s" + +#: tcop/postgres.c:1434 +#, c-format +msgid "cannot insert multiple commands into a prepared statement" +msgstr "до підтготовленого оператору не можна вставити декілька команд" + +#: tcop/postgres.c:1586 +#, c-format +msgid "duration: %s ms parse %s: %s" +msgstr "тривалість: %s мс, аналізування %s: %s" + +#: tcop/postgres.c:1633 +#, c-format +msgid "bind %s to %s" +msgstr "прив'язка %s до %s" + +#: tcop/postgres.c:1652 tcop/postgres.c:2516 +#, c-format +msgid "unnamed prepared statement does not exist" +msgstr "підготовлений оператор без імені не існує" + +#: tcop/postgres.c:1693 +#, c-format +msgid "bind message has %d parameter formats but %d parameters" +msgstr "повідомлення bind має %d форматів, але %d параметрів" + +#: tcop/postgres.c:1699 +#, c-format +msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" +msgstr "в повідомленні bind передано %d параметрів, але підготовлений оператор \"%s\" потребує %d" + +#: tcop/postgres.c:1897 +#, c-format +msgid "incorrect binary data format in bind parameter %d" +msgstr "невірний формат двійкових даних в параметрі bind %d" + +#: tcop/postgres.c:2018 +#, c-format +msgid "duration: %s ms bind %s%s%s: %s" +msgstr "тривалість: %s мс, повідомлення bind %s%s%s: %s" + +#: tcop/postgres.c:2068 tcop/postgres.c:2600 +#, c-format +msgid "portal \"%s\" does not exist" +msgstr "портал \"%s\" не існує" + +#: tcop/postgres.c:2153 +#, c-format +msgid "%s %s%s%s: %s" +msgstr "%s %s%s%s: %s" + +#: tcop/postgres.c:2155 tcop/postgres.c:2258 +msgid "execute fetch from" +msgstr "виконати витягнення з" + +#: tcop/postgres.c:2156 tcop/postgres.c:2259 +msgid "execute" +msgstr "виконувати" + +#: tcop/postgres.c:2255 +#, c-format +msgid "duration: %s ms %s %s%s%s: %s" +msgstr "тривалість: %s мс %s %s%s%s: %s" + +#: tcop/postgres.c:2401 +#, c-format +msgid "prepare: %s" +msgstr "підготовка: %s" + +#: tcop/postgres.c:2426 +#, c-format +msgid "parameters: %s" +msgstr "параметри: %s" + +#: tcop/postgres.c:2441 +#, c-format +msgid "abort reason: recovery conflict" +msgstr "причина переривання: конфлікт під час відновлення" + +#: tcop/postgres.c:2457 +#, c-format +msgid "User was holding shared buffer pin for too long." +msgstr "Користувач утримував позначку спільного буферу занадто довго." + +#: tcop/postgres.c:2460 +#, c-format +msgid "User was holding a relation lock for too long." +msgstr "Користувач утримував блокування відношення занадто довго." + +#: tcop/postgres.c:2463 +#, c-format +msgid "User was or might have been using tablespace that must be dropped." +msgstr "Користувач використовував табличний простір який повинен бути видаленим." + +#: tcop/postgres.c:2466 +#, c-format +msgid "User query might have needed to see row versions that must be removed." +msgstr "Запиту користувача потрібно було бачити версії рядків, які повинні бути видалені." + +#: tcop/postgres.c:2472 +#, c-format +msgid "User was connected to a database that must be dropped." +msgstr "Користувач був підключен до бази даних, яка повинна бути видалена." + +#: tcop/postgres.c:2796 +#, c-format +msgid "terminating connection because of crash of another server process" +msgstr "завершення підключення через аварійне завершення роботи іншого серверного процесу" + +#: tcop/postgres.c:2797 +#, c-format +msgid "The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory." +msgstr "Керуючий процес віддав команду цьому серверному процесу відкотити поточну транзакцію і завершитися, тому, що інший серверний процес завершився неправильно і можливо пошкодив спільну пам'ять." + +#: tcop/postgres.c:2801 tcop/postgres.c:3107 +#, c-format +msgid "In a moment you should be able to reconnect to the database and repeat your command." +msgstr "В цей момент ви можете повторно підключитися до бази даних і повторити вашу команду." + +#: tcop/postgres.c:2883 +#, c-format +msgid "floating-point exception" +msgstr "виняток в операції з рухомою комою" + +#: tcop/postgres.c:2884 +#, c-format +msgid "An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero." +msgstr "Надійшло повідомлення про неприпустиму операцію з рухомою комою. Можливо, це значить, що результат виявився за діапазоном або виникла неприпустима операція, така як ділення на нуль." + +#: tcop/postgres.c:3037 +#, c-format +msgid "canceling authentication due to timeout" +msgstr "скасування автентифікації через тайм-аут" + +#: tcop/postgres.c:3041 +#, c-format +msgid "terminating autovacuum process due to administrator command" +msgstr "завершення процесу автоочистки по команді адміністратора" + +#: tcop/postgres.c:3045 +#, c-format +msgid "terminating logical replication worker due to administrator command" +msgstr "завершення обробника логічної реплікації по команді адміністратора" + +#: tcop/postgres.c:3049 +#, c-format +msgid "logical replication launcher shutting down" +msgstr "процес запуску логічної реплікації зупинен" + +#: tcop/postgres.c:3062 tcop/postgres.c:3072 tcop/postgres.c:3105 +#, c-format +msgid "terminating connection due to conflict with recovery" +msgstr "завершення підключення через конфлікт з процесом відновлення" + +#: tcop/postgres.c:3078 +#, c-format +msgid "terminating connection due to administrator command" +msgstr "завершення підключення по команді адміністратора" + +#: tcop/postgres.c:3088 +#, c-format +msgid "connection to client lost" +msgstr "підключення до клієнта втрачено" + +#: tcop/postgres.c:3154 +#, c-format +msgid "canceling statement due to lock timeout" +msgstr "виконання оператора скасовано через тайм-аут блокування" + +#: tcop/postgres.c:3161 +#, c-format +msgid "canceling statement due to statement timeout" +msgstr "виконання оператора скасовано через тайм-аут" + +#: tcop/postgres.c:3168 +#, c-format +msgid "canceling autovacuum task" +msgstr "скасування завдання автоочистки" + +#: tcop/postgres.c:3191 +#, c-format +msgid "canceling statement due to user request" +msgstr "виконання оператора скасовано по запиту користувача" + +#: tcop/postgres.c:3201 +#, c-format +msgid "terminating connection due to idle-in-transaction timeout" +msgstr "завершення підключення через тайм-аут бездіяльності в транзакції" + +#: tcop/postgres.c:3318 +#, c-format +msgid "stack depth limit exceeded" +msgstr "перевищено ліміт глибини стека" + +#: tcop/postgres.c:3319 +#, c-format +msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." +msgstr "Збільште параметр конфігурації \"max_stack_depth\" (поточне значення %d КБ), попередньо переконавшись, що ОС надає достатній розмір стеку." + +#: tcop/postgres.c:3382 +#, c-format +msgid "\"max_stack_depth\" must not exceed %ldkB." +msgstr "Значення \"max_stack_depth\" не повинно перевищувати %ld КБ." + +#: tcop/postgres.c:3384 +#, c-format +msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." +msgstr "Збільшіть ліміт глибини стека в системі через команду \"ulimit -s\" або через локальний еквівалент." + +#: tcop/postgres.c:3744 +#, c-format +msgid "invalid command-line argument for server process: %s" +msgstr "неприпустимий аргумент командного рядка для серверного процесу: %s" + +#: tcop/postgres.c:3745 tcop/postgres.c:3751 +#, c-format +msgid "Try \"%s --help\" for more information." +msgstr "Спробуйте \"%s --help\" для додаткової інформації." + +#: tcop/postgres.c:3749 +#, c-format +msgid "%s: invalid command-line argument: %s" +msgstr "%s: неприпустимий аргумент командного рядка: %s" + +#: tcop/postgres.c:3811 +#, c-format +msgid "%s: no database nor user name specified" +msgstr "%s: ні база даних, ні ім'я користувача не вказані" + +#: tcop/postgres.c:4447 +#, c-format +msgid "invalid CLOSE message subtype %d" +msgstr "неприпустимий підтип повідомлення CLOSE %d" + +#: tcop/postgres.c:4482 +#, c-format +msgid "invalid DESCRIBE message subtype %d" +msgstr "неприпустимий підтип повідомлення DESCRIBE %d" + +#: tcop/postgres.c:4560 +#, c-format +msgid "fastpath function calls not supported in a replication connection" +msgstr "виклики функції fastpath не підтримуються в підключенні реплікації" + +#: tcop/postgres.c:4564 +#, c-format +msgid "extended query protocol not supported in a replication connection" +msgstr "протокол розширених запитів не підтримується в підключенні реплікації" + +#: tcop/postgres.c:4741 +#, c-format +msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" +msgstr "відключення: час сеансу: %d:%02d:%02d.%03d користувач = %s база даних = %s хост = %s%s%s" + +#: tcop/pquery.c:629 +#, c-format +msgid "bind message has %d result formats but query has %d columns" +msgstr "повідомлення bind має %d форматів, але запит має %d стовпців" + +#: tcop/pquery.c:932 +#, c-format +msgid "cursor can only scan forward" +msgstr "курсор може сканувати лише вперед" + +#: tcop/pquery.c:933 +#, c-format +msgid "Declare it with SCROLL option to enable backward scan." +msgstr "Оголосити з параметром SCROLL, щоб активувати зворотню розгортку." + +#. translator: %s is name of a SQL command, eg CREATE +#: tcop/utility.c:413 +#, c-format +msgid "cannot execute %s in a read-only transaction" +msgstr "не можна виконати %s в транзакції \"лише для читання\"" + +#. translator: %s is name of a SQL command, eg CREATE +#: tcop/utility.c:431 +#, c-format +msgid "cannot execute %s during a parallel operation" +msgstr "не можна виконати %s під час паралельних операцій" + +#. translator: %s is name of a SQL command, eg CREATE +#: tcop/utility.c:450 +#, c-format +msgid "cannot execute %s during recovery" +msgstr "не можна виконати %s під час відновлення" + +#. translator: %s is name of a SQL command, eg PREPARE +#: tcop/utility.c:468 +#, c-format +msgid "cannot execute %s within security-restricted operation" +msgstr "не можна виконати %s в межах операції з обмеженнями безпеки" + +#: tcop/utility.c:912 +#, c-format +msgid "must be superuser to do CHECKPOINT" +msgstr "для виконання CHECKPOINT потрібно бути суперкористувачем" + +#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:620 +#, c-format +msgid "multiple DictFile parameters" +msgstr "повторюваний параметр DictFile" + +#: tsearch/dict_ispell.c:63 +#, c-format +msgid "multiple AffFile parameters" +msgstr "повторюваний параметр AffFile" + +#: tsearch/dict_ispell.c:82 +#, c-format +msgid "unrecognized Ispell parameter: \"%s\"" +msgstr "нерозпізнаний параметр Ispell: \"%s\"" + +#: tsearch/dict_ispell.c:96 +#, c-format +msgid "missing AffFile parameter" +msgstr "пропущено параметр AffFile" + +#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:644 +#, c-format +msgid "missing DictFile parameter" +msgstr "пропущено параметр DictFile" + +#: tsearch/dict_simple.c:58 +#, c-format +msgid "multiple Accept parameters" +msgstr "повторюваний параметр Accept" + +#: tsearch/dict_simple.c:66 +#, c-format +msgid "unrecognized simple dictionary parameter: \"%s\"" +msgstr "нерозпізнаний параметр простого словника: \"%s\"" + +#: tsearch/dict_synonym.c:118 +#, c-format +msgid "unrecognized synonym parameter: \"%s\"" +msgstr "нерозпізнаний параметр функціїї синонімів: \"%s\"" + +#: tsearch/dict_synonym.c:125 +#, c-format +msgid "missing Synonyms parameter" +msgstr "пропущено параметр Synonyms" + +#: tsearch/dict_synonym.c:132 +#, c-format +msgid "could not open synonym file \"%s\": %m" +msgstr "не вдалося відкрити файл синонімів \"%s\": %m" + +#: tsearch/dict_thesaurus.c:179 +#, c-format +msgid "could not open thesaurus file \"%s\": %m" +msgstr "не вдалося відкрити файл тезаурусу \"%s\": %m" + +#: tsearch/dict_thesaurus.c:212 +#, c-format +msgid "unexpected delimiter" +msgstr "неочікуваний роздільник" + +#: tsearch/dict_thesaurus.c:262 tsearch/dict_thesaurus.c:278 +#, c-format +msgid "unexpected end of line or lexeme" +msgstr "неочікуваний конець рядка або лексеми" + +#: tsearch/dict_thesaurus.c:287 +#, c-format +msgid "unexpected end of line" +msgstr "неочікуваний кінець рядка" + +#: tsearch/dict_thesaurus.c:297 +#, c-format +msgid "too many lexemes in thesaurus entry" +msgstr "занадто багато лексем в елементі тезаурусу" + +#: tsearch/dict_thesaurus.c:421 +#, c-format +msgid "thesaurus sample word \"%s\" isn't recognized by subdictionary (rule %d)" +msgstr "слова-зразка в тезаурусі \"%s\" немає у внутрішньому словнику (правило %d)" + +#: tsearch/dict_thesaurus.c:427 +#, c-format +msgid "thesaurus sample word \"%s\" is a stop word (rule %d)" +msgstr "слово-зразок в тезаурусі \"%s\" має стоп-слово (правило %d)" + +#: tsearch/dict_thesaurus.c:430 +#, c-format +msgid "Use \"?\" to represent a stop word within a sample phrase." +msgstr "Для представлення стоп-слова в межах зразка використайте \"?\"." + +#: tsearch/dict_thesaurus.c:572 +#, c-format +msgid "thesaurus substitute word \"%s\" is a stop word (rule %d)" +msgstr "слово-замінник в тезаурусі \"%s\" має стоп-слово (правило %d)" + +#: tsearch/dict_thesaurus.c:579 +#, c-format +msgid "thesaurus substitute word \"%s\" isn't recognized by subdictionary (rule %d)" +msgstr "слова-замінника в тезаурусі \"%s\" немає у внутрішньому словнику (правило %d)" + +#: tsearch/dict_thesaurus.c:591 +#, c-format +msgid "thesaurus substitute phrase is empty (rule %d)" +msgstr "фраза-замінник в тезаурусі пуста (правило %d)" + +#: tsearch/dict_thesaurus.c:629 +#, c-format +msgid "multiple Dictionary parameters" +msgstr "повторюваний параметр Dictionary" + +#: tsearch/dict_thesaurus.c:636 +#, c-format +msgid "unrecognized Thesaurus parameter: \"%s\"" +msgstr "нерозпізнаний параметр тезаурусу: \"%s\"" + +#: tsearch/dict_thesaurus.c:648 +#, c-format +msgid "missing Dictionary parameter" +msgstr "пропущено параметр Dictionary" + +#: tsearch/spell.c:380 tsearch/spell.c:397 tsearch/spell.c:406 +#: tsearch/spell.c:1036 +#, c-format +msgid "invalid affix flag \"%s\"" +msgstr "неприпустимиа позначка affix \"%s\"" + +#: tsearch/spell.c:384 tsearch/spell.c:1040 +#, c-format +msgid "affix flag \"%s\" is out of range" +msgstr "позначка affix \"%s\" поза діапазоном" + +#: tsearch/spell.c:414 +#, c-format +msgid "invalid character in affix flag \"%s\"" +msgstr "неприпустимий символ в позначці affix \"%s\"" + +#: tsearch/spell.c:434 +#, c-format +msgid "invalid affix flag \"%s\" with \"long\" flag value" +msgstr "неприпустима позначка affix \"%s\" зі значенням позначки \"long\"" + +#: tsearch/spell.c:524 +#, c-format +msgid "could not open dictionary file \"%s\": %m" +msgstr "не вдалося відкрити файл словника \"%s\": %m" + +#: tsearch/spell.c:742 utils/adt/regexp.c:208 +#, c-format +msgid "invalid regular expression: %s" +msgstr "неприпустимий регулярний вираз: %s" + +#: tsearch/spell.c:956 tsearch/spell.c:973 tsearch/spell.c:990 +#: tsearch/spell.c:1007 tsearch/spell.c:1072 gram.y:15993 gram.y:16010 +#, c-format +msgid "syntax error" +msgstr "синтаксична помилка" + +#: tsearch/spell.c:1163 tsearch/spell.c:1175 tsearch/spell.c:1734 +#: tsearch/spell.c:1739 tsearch/spell.c:1744 +#, c-format +msgid "invalid affix alias \"%s\"" +msgstr "неприпустимий псевдонім affix \"%s\"" + +#: tsearch/spell.c:1216 tsearch/spell.c:1287 tsearch/spell.c:1436 +#, c-format +msgid "could not open affix file \"%s\": %m" +msgstr "не вдалося відкрити файл affix \"%s\": %m" + +#: tsearch/spell.c:1270 +#, c-format +msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" +msgstr "Словник Ispell підтримує для позначки лише значення \"default\", \"long\", і\"num\"" + +#: tsearch/spell.c:1314 +#, c-format +msgid "invalid number of flag vector aliases" +msgstr "неприпустима кількість векторів позначок" + +#: tsearch/spell.c:1337 +#, c-format +msgid "number of aliases exceeds specified number %d" +msgstr "кількість псевдонімів перевищує вказане число %d" + +#: tsearch/spell.c:1552 +#, c-format +msgid "affix file contains both old-style and new-style commands" +msgstr "файл affix містить команди і в старому, і в новому стилі" + +#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 +#, c-format +msgid "string is too long for tsvector (%d bytes, max %d bytes)" +msgstr "рядок занадто довгий для tsvector (%d байт, максимум %d байт)" + +#: tsearch/ts_locale.c:185 +#, c-format +msgid "line %d of configuration file \"%s\": \"%s\"" +msgstr "рядок %d файлу конфігурації \"%s\": \"%s\"" + +#: tsearch/ts_locale.c:302 +#, c-format +msgid "conversion from wchar_t to server encoding failed: %m" +msgstr "перетворити wchar_t в кодування серверу не вдалося: %mв" + +#: tsearch/ts_parse.c:386 tsearch/ts_parse.c:393 tsearch/ts_parse.c:562 +#: tsearch/ts_parse.c:569 +#, c-format +msgid "word is too long to be indexed" +msgstr "слово занадто довге для індексування" + +#: tsearch/ts_parse.c:387 tsearch/ts_parse.c:394 tsearch/ts_parse.c:563 +#: tsearch/ts_parse.c:570 +#, c-format +msgid "Words longer than %d characters are ignored." +msgstr "Слова довші за %d символів пропускаються." + +#: tsearch/ts_utils.c:51 +#, c-format +msgid "invalid text search configuration file name \"%s\"" +msgstr "неприпустиме ім'я файлу конфігурації текстового пошуку \"%s\"" + +#: tsearch/ts_utils.c:83 +#, c-format +msgid "could not open stop-word file \"%s\": %m" +msgstr "не вдалося відкрити файл стоп-слова \"%s\": %m" + +#: tsearch/wparser.c:313 tsearch/wparser.c:401 tsearch/wparser.c:478 +#, c-format +msgid "text search parser does not support headline creation" +msgstr "аналізатор текстового пошуку не підтримує створення заголовку" + +#: tsearch/wparser_def.c:2585 +#, c-format +msgid "unrecognized headline parameter: \"%s\"" +msgstr "нерозпізнаний параметр заголовку: \"%s\"" + +#: tsearch/wparser_def.c:2604 +#, c-format +msgid "MinWords should be less than MaxWords" +msgstr "Значення MinWords повинно бути меньшим за MaxWords" + +#: tsearch/wparser_def.c:2608 +#, c-format +msgid "MinWords should be positive" +msgstr "Значення MinWords повинно бути позитивним" + +#: tsearch/wparser_def.c:2612 +#, c-format +msgid "ShortWord should be >= 0" +msgstr "Значення ShortWord повинно бути >= 0" + +#: tsearch/wparser_def.c:2616 +#, c-format +msgid "MaxFragments should be >= 0" +msgstr "Значення MaxFragments повинно бути >= 0" + +#: utils/adt/acl.c:172 utils/adt/name.c:93 +#, c-format +msgid "identifier too long" +msgstr "занадто довгий ідентифікатор" + +#: utils/adt/acl.c:173 utils/adt/name.c:94 +#, c-format +msgid "Identifier must be less than %d characters." +msgstr "Ідентифікатор повинен бути короче ніж %d символів." + +#: utils/adt/acl.c:256 +#, c-format +msgid "unrecognized key word: \"%s\"" +msgstr "нерозпізнане ключове слово: \"%s\"" + +#: utils/adt/acl.c:257 +#, c-format +msgid "ACL key word must be \"group\" or \"user\"." +msgstr "Ключовим словом ACL повинно бути \"group\" або \"user\"." + +#: utils/adt/acl.c:262 +#, c-format +msgid "missing name" +msgstr "пропущено ім'я" + +#: utils/adt/acl.c:263 +#, c-format +msgid "A name must follow the \"group\" or \"user\" key word." +msgstr "За ключовими словами \"group\" або \"user\" повинно йти ім'я." + +#: utils/adt/acl.c:269 +#, c-format +msgid "missing \"=\" sign" +msgstr "пропущено знак \"=\"" + +#: utils/adt/acl.c:322 +#, c-format +msgid "invalid mode character: must be one of \"%s\"" +msgstr "неприпустимий символ режиму: повинен бути один з \"%s\"" + +#: utils/adt/acl.c:344 +#, c-format +msgid "a name must follow the \"/\" sign" +msgstr "за знаком \"/\" повинно прямувати ім'я" + +#: utils/adt/acl.c:352 +#, c-format +msgid "defaulting grantor to user ID %u" +msgstr "призначив права користувач з ідентифікатором %u" + +#: utils/adt/acl.c:538 +#, c-format +msgid "ACL array contains wrong data type" +msgstr "Масив ACL містить неправильний тип даних" + +#: utils/adt/acl.c:542 +#, c-format +msgid "ACL arrays must be one-dimensional" +msgstr "Масиви ACL повинні бути одновимірними" + +#: utils/adt/acl.c:546 +#, c-format +msgid "ACL arrays must not contain null values" +msgstr "Масиви ACL не повинні містити значення null" + +#: utils/adt/acl.c:570 +#, c-format +msgid "extra garbage at the end of the ACL specification" +msgstr "зайве сміття в кінці специфікації ACL" + +#: utils/adt/acl.c:1205 +#, c-format +msgid "grant options cannot be granted back to your own grantor" +msgstr "параметри призначення прав не можна повернути тому, хто призначив їх вам" + +#: utils/adt/acl.c:1266 +#, c-format +msgid "dependent privileges exist" +msgstr "залежні права існують" + +#: utils/adt/acl.c:1267 +#, c-format +msgid "Use CASCADE to revoke them too." +msgstr "Використайте CASCADE, щоб відкликати їх." + +#: utils/adt/acl.c:1521 +#, c-format +msgid "aclinsert is no longer supported" +msgstr "aclinsert більше не підтримується" + +#: utils/adt/acl.c:1531 +#, c-format +msgid "aclremove is no longer supported" +msgstr "aclremove більше не підтримується" + +#: utils/adt/acl.c:1617 utils/adt/acl.c:1671 +#, c-format +msgid "unrecognized privilege type: \"%s\"" +msgstr "нерозпізнаний тип прав: \"%s\"" + +#: utils/adt/acl.c:3471 utils/adt/regproc.c:103 utils/adt/regproc.c:278 +#, c-format +msgid "function \"%s\" does not exist" +msgstr "функція \"%s\" не існує" + +#: utils/adt/acl.c:4943 +#, c-format +msgid "must be member of role \"%s\"" +msgstr "потрібно бути учасником ролі \"%s\"" + +#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:933 +#: utils/adt/arrayfuncs.c:1533 utils/adt/arrayfuncs.c:3236 +#: utils/adt/arrayfuncs.c:3376 utils/adt/arrayfuncs.c:5911 +#: utils/adt/arrayfuncs.c:6252 utils/adt/arrayutils.c:93 +#: utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 +#, c-format +msgid "array size exceeds the maximum allowed (%d)" +msgstr "розмір масиву перевищує максимальний допустимий розмір (%d)" + +#: utils/adt/array_userfuncs.c:80 utils/adt/array_userfuncs.c:466 +#: utils/adt/array_userfuncs.c:546 utils/adt/json.c:645 utils/adt/json.c:740 +#: utils/adt/json.c:778 utils/adt/jsonb.c:1115 utils/adt/jsonb.c:1144 +#: utils/adt/jsonb.c:1538 utils/adt/jsonb.c:1702 utils/adt/jsonb.c:1712 +#, c-format +msgid "could not determine input data type" +msgstr "не вдалося визначити тип вхідних даних" + +#: utils/adt/array_userfuncs.c:85 +#, c-format +msgid "input data type is not an array" +msgstr "тип вхідних даних не є масивом" + +#: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 +#: utils/adt/arrayfuncs.c:1336 utils/adt/float.c:1243 utils/adt/float.c:1317 +#: utils/adt/float.c:3960 utils/adt/float.c:3974 utils/adt/int.c:759 +#: utils/adt/int.c:781 utils/adt/int.c:795 utils/adt/int.c:809 +#: utils/adt/int.c:840 utils/adt/int.c:861 utils/adt/int.c:978 +#: utils/adt/int.c:992 utils/adt/int.c:1006 utils/adt/int.c:1039 +#: utils/adt/int.c:1053 utils/adt/int.c:1067 utils/adt/int.c:1098 +#: utils/adt/int.c:1180 utils/adt/int.c:1244 utils/adt/int.c:1312 +#: utils/adt/int.c:1318 utils/adt/int8.c:1292 utils/adt/numeric.c:1559 +#: utils/adt/numeric.c:3435 utils/adt/varbit.c:1188 utils/adt/varbit.c:1576 +#: utils/adt/varlena.c:1087 utils/adt/varlena.c:3377 +#, c-format +msgid "integer out of range" +msgstr "ціле число поза діапазоном" + +#: utils/adt/array_userfuncs.c:136 utils/adt/array_userfuncs.c:191 +#, c-format +msgid "argument must be empty or one-dimensional array" +msgstr "аргумент повинен бути пустим або одновимірним масивом" + +#: utils/adt/array_userfuncs.c:273 utils/adt/array_userfuncs.c:312 +#: utils/adt/array_userfuncs.c:349 utils/adt/array_userfuncs.c:378 +#: utils/adt/array_userfuncs.c:406 +#, c-format +msgid "cannot concatenate incompatible arrays" +msgstr "об'єднувати несумісні масиви не можна" + +#: utils/adt/array_userfuncs.c:274 +#, c-format +msgid "Arrays with element types %s and %s are not compatible for concatenation." +msgstr "Масиви з елементами типів %s і %s не є сумісними для об'єднання." + +#: utils/adt/array_userfuncs.c:313 +#, c-format +msgid "Arrays of %d and %d dimensions are not compatible for concatenation." +msgstr "Масиви з вимірами %d і %d не є сумісними для об'єднання." + +#: utils/adt/array_userfuncs.c:350 +#, c-format +msgid "Arrays with differing element dimensions are not compatible for concatenation." +msgstr "Масиви з різними вимірами елементів не є сумісними для об'єднання." + +#: utils/adt/array_userfuncs.c:379 utils/adt/array_userfuncs.c:407 +#, c-format +msgid "Arrays with differing dimensions are not compatible for concatenation." +msgstr "Масиви з різними вимірами не є сумісними для об'єднання." + +#: utils/adt/array_userfuncs.c:662 utils/adt/array_userfuncs.c:814 +#, c-format +msgid "searching for elements in multidimensional arrays is not supported" +msgstr "пошук елементів у багатовимірних масивах не підтримується" + +#: utils/adt/array_userfuncs.c:686 +#, c-format +msgid "initial position must not be null" +msgstr "початкова позиція не повинна бути null" + +#: utils/adt/arrayfuncs.c:270 utils/adt/arrayfuncs.c:284 +#: utils/adt/arrayfuncs.c:295 utils/adt/arrayfuncs.c:317 +#: utils/adt/arrayfuncs.c:332 utils/adt/arrayfuncs.c:346 +#: utils/adt/arrayfuncs.c:352 utils/adt/arrayfuncs.c:359 +#: utils/adt/arrayfuncs.c:490 utils/adt/arrayfuncs.c:506 +#: utils/adt/arrayfuncs.c:517 utils/adt/arrayfuncs.c:532 +#: utils/adt/arrayfuncs.c:553 utils/adt/arrayfuncs.c:583 +#: utils/adt/arrayfuncs.c:590 utils/adt/arrayfuncs.c:598 +#: utils/adt/arrayfuncs.c:632 utils/adt/arrayfuncs.c:655 +#: utils/adt/arrayfuncs.c:675 utils/adt/arrayfuncs.c:787 +#: utils/adt/arrayfuncs.c:796 utils/adt/arrayfuncs.c:826 +#: utils/adt/arrayfuncs.c:841 utils/adt/arrayfuncs.c:894 +#, c-format +msgid "malformed array literal: \"%s\"" +msgstr "неправильний літерал масиву: \"%s\"" + +#: utils/adt/arrayfuncs.c:271 +#, c-format +msgid "\"[\" must introduce explicitly-specified array dimensions." +msgstr "\"[\" повинно представляти явно вказані виміри масиву." + +#: utils/adt/arrayfuncs.c:285 +#, c-format +msgid "Missing array dimension value." +msgstr "Пропущено значення виміру масиву." + +#: utils/adt/arrayfuncs.c:296 utils/adt/arrayfuncs.c:333 +#, c-format +msgid "Missing \"%s\" after array dimensions." +msgstr "Пропущено \"%s\" після вимірів масиву." + +#: utils/adt/arrayfuncs.c:305 utils/adt/arrayfuncs.c:2884 +#: utils/adt/arrayfuncs.c:2916 utils/adt/arrayfuncs.c:2931 +#, c-format +msgid "upper bound cannot be less than lower bound" +msgstr "верхня границя не може бути меньше нижньої границі" + +#: utils/adt/arrayfuncs.c:318 +#, c-format +msgid "Array value must start with \"{\" or dimension information." +msgstr "Значення масиву повинно починатись з \"{\" або з інформації про вимір." + +#: utils/adt/arrayfuncs.c:347 +#, c-format +msgid "Array contents must start with \"{\"." +msgstr "Вміст масиву повинен починатись з \"{\"." + +#: utils/adt/arrayfuncs.c:353 utils/adt/arrayfuncs.c:360 +#, c-format +msgid "Specified array dimensions do not match array contents." +msgstr "Вказані виміри масиву не відповідають його вмісту." + +#: utils/adt/arrayfuncs.c:491 utils/adt/arrayfuncs.c:518 +#: utils/adt/rangetypes.c:2181 utils/adt/rangetypes.c:2189 +#: utils/adt/rowtypes.c:210 utils/adt/rowtypes.c:218 +#, c-format +msgid "Unexpected end of input." +msgstr "Неочікуваний кінец введення." + +#: utils/adt/arrayfuncs.c:507 utils/adt/arrayfuncs.c:554 +#: utils/adt/arrayfuncs.c:584 utils/adt/arrayfuncs.c:633 +#, c-format +msgid "Unexpected \"%c\" character." +msgstr "Неочікуваний символ \"%c\"." + +#: utils/adt/arrayfuncs.c:533 utils/adt/arrayfuncs.c:656 +#, c-format +msgid "Unexpected array element." +msgstr "Неочікуваний елемент масиву." + +#: utils/adt/arrayfuncs.c:591 +#, c-format +msgid "Unmatched \"%c\" character." +msgstr "Невідповідний символ \"%c\"." + +#: utils/adt/arrayfuncs.c:599 utils/adt/jsonfuncs.c:2452 +#, c-format +msgid "Multidimensional arrays must have sub-arrays with matching dimensions." +msgstr "Багатовимірні масиви повинні мати вкладені масиви з відповідними вимірами." + +#: utils/adt/arrayfuncs.c:676 +#, c-format +msgid "Junk after closing right brace." +msgstr "Сміття після закриття правої дужки." + +#: utils/adt/arrayfuncs.c:1298 utils/adt/arrayfuncs.c:3344 +#: utils/adt/arrayfuncs.c:5817 +#, c-format +msgid "invalid number of dimensions: %d" +msgstr "неприпустима кількість вимірів: %d" + +#: utils/adt/arrayfuncs.c:1309 +#, c-format +msgid "invalid array flags" +msgstr "неприпустимі позначки масиву" + +#: utils/adt/arrayfuncs.c:1317 +#, c-format +msgid "wrong element type" +msgstr "неправильний тип елементу" + +#: utils/adt/arrayfuncs.c:1367 utils/adt/rangetypes.c:335 +#: utils/cache/lsyscache.c:2835 +#, c-format +msgid "no binary input function available for type %s" +msgstr "для типу %s немає функції введення двійкових даних" + +#: utils/adt/arrayfuncs.c:1507 +#, c-format +msgid "improper binary format in array element %d" +msgstr "неправильний двійковий формат в елементі масиву %d" + +#: utils/adt/arrayfuncs.c:1588 utils/adt/rangetypes.c:340 +#: utils/cache/lsyscache.c:2868 +#, c-format +msgid "no binary output function available for type %s" +msgstr "для типу %s немає функції виводу двійкових даних" + +#: utils/adt/arrayfuncs.c:2066 +#, c-format +msgid "slices of fixed-length arrays not implemented" +msgstr "розрізання масивів постійної довжини не реалізовано" + +#: utils/adt/arrayfuncs.c:2244 utils/adt/arrayfuncs.c:2266 +#: utils/adt/arrayfuncs.c:2315 utils/adt/arrayfuncs.c:2551 +#: utils/adt/arrayfuncs.c:2862 utils/adt/arrayfuncs.c:5803 +#: utils/adt/arrayfuncs.c:5829 utils/adt/arrayfuncs.c:5840 +#: utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 +#: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4340 utils/adt/jsonfuncs.c:4490 +#: utils/adt/jsonfuncs.c:4602 utils/adt/jsonfuncs.c:4648 +#, c-format +msgid "wrong number of array subscripts" +msgstr "невірне число верхніх індексів масива" + +#: utils/adt/arrayfuncs.c:2249 utils/adt/arrayfuncs.c:2357 +#: utils/adt/arrayfuncs.c:2615 utils/adt/arrayfuncs.c:2921 +#, c-format +msgid "array subscript out of range" +msgstr "верхній індекс масиву поза діапазоном" + +#: utils/adt/arrayfuncs.c:2254 +#, c-format +msgid "cannot assign null value to an element of a fixed-length array" +msgstr "не можна призначати значення null значення елементу масива постійної довжини" + +#: utils/adt/arrayfuncs.c:2809 +#, c-format +msgid "updates on slices of fixed-length arrays not implemented" +msgstr "оновлення в зрізах масивів постійної довжини не реалізовані" + +#: utils/adt/arrayfuncs.c:2840 +#, c-format +msgid "array slice subscript must provide both boundaries" +msgstr "у вказівці зрізу масива повинні бути задані обидві межі" + +#: utils/adt/arrayfuncs.c:2841 +#, c-format +msgid "When assigning to a slice of an empty array value, slice boundaries must be fully specified." +msgstr "Під час присвоєння значень зрізу в пустому масиві, межі зрізу повинні вказуватися повністю." + +#: utils/adt/arrayfuncs.c:2852 utils/adt/arrayfuncs.c:2947 +#, c-format +msgid "source array too small" +msgstr "вихідний масив занадто малий" + +#: utils/adt/arrayfuncs.c:3500 +#, c-format +msgid "null array element not allowed in this context" +msgstr "елемент масиву null не дозволений в цьому контексті" + +#: utils/adt/arrayfuncs.c:3602 utils/adt/arrayfuncs.c:3773 +#: utils/adt/arrayfuncs.c:4129 +#, c-format +msgid "cannot compare arrays of different element types" +msgstr "не можна порівнювати масиви з елементами різних типів" + +#: utils/adt/arrayfuncs.c:3951 utils/adt/rangetypes.c:1254 +#: utils/adt/rangetypes.c:1318 +#, c-format +msgid "could not identify a hash function for type %s" +msgstr "не вдалося визначити геш-функцію для типу %s" + +#: utils/adt/arrayfuncs.c:4044 +#, c-format +msgid "could not identify an extended hash function for type %s" +msgstr "не вдалося визначити розширену геш-функцію для типу %s" + +#: utils/adt/arrayfuncs.c:5221 +#, c-format +msgid "data type %s is not an array type" +msgstr "тип даних %s не є типом масиву" + +#: utils/adt/arrayfuncs.c:5276 +#, c-format +msgid "cannot accumulate null arrays" +msgstr "накопичувати null-масиви не можна" + +#: utils/adt/arrayfuncs.c:5304 +#, c-format +msgid "cannot accumulate empty arrays" +msgstr "накопичувати пусті масиви не можна" + +#: utils/adt/arrayfuncs.c:5331 utils/adt/arrayfuncs.c:5337 +#, c-format +msgid "cannot accumulate arrays of different dimensionality" +msgstr "накопичувати масиви різної розмірності не можна" + +#: utils/adt/arrayfuncs.c:5701 utils/adt/arrayfuncs.c:5741 +#, c-format +msgid "dimension array or low bound array cannot be null" +msgstr "масив розмірності або масив нижніх границь не може бути null" + +#: utils/adt/arrayfuncs.c:5804 utils/adt/arrayfuncs.c:5830 +#, c-format +msgid "Dimension array must be one dimensional." +msgstr "Масив розмірності повинен бути одновимірним." + +#: utils/adt/arrayfuncs.c:5809 utils/adt/arrayfuncs.c:5835 +#, c-format +msgid "dimension values cannot be null" +msgstr "значення розмірностей не можуть бути null" + +#: utils/adt/arrayfuncs.c:5841 +#, c-format +msgid "Low bound array has different size than dimensions array." +msgstr "Масив нижніх границь відрізняється за розміром від масиву розмірностей." + +#: utils/adt/arrayfuncs.c:6117 +#, c-format +msgid "removing elements from multidimensional arrays is not supported" +msgstr "видалення елементів з багатовимірних масивів не підтримується" + +#: utils/adt/arrayfuncs.c:6394 +#, c-format +msgid "thresholds must be one-dimensional array" +msgstr "граничне значення повинно вказуватись одновимірним масивом" + +#: utils/adt/arrayfuncs.c:6399 +#, c-format +msgid "thresholds array must not contain NULLs" +msgstr "масив границь не повинен містити NULL" + +#: utils/adt/arrayutils.c:209 +#, c-format +msgid "typmod array must be type cstring[]" +msgstr "масив typmod повинен мати тип cstring[]" + +#: utils/adt/arrayutils.c:214 +#, c-format +msgid "typmod array must be one-dimensional" +msgstr "масив typmod повинен бути одновимірним" + +#: utils/adt/arrayutils.c:219 +#, c-format +msgid "typmod array must not contain nulls" +msgstr "масив typmod не повинен містити елементи nulls" + +#: utils/adt/ascii.c:76 +#, c-format +msgid "encoding conversion from %s to ASCII not supported" +msgstr "перетворення кодування з %s в ASCII не підтримується" + +#. translator: first %s is inet or cidr +#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3757 +#: utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:295 +#: utils/adt/float.c:412 utils/adt/float.c:497 utils/adt/float.c:525 +#: utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 +#: utils/adt/geo_ops.c:274 utils/adt/geo_ops.c:316 utils/adt/geo_ops.c:326 +#: utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1378 utils/adt/geo_ops.c:1413 +#: utils/adt/geo_ops.c:1421 utils/adt/geo_ops.c:3476 utils/adt/geo_ops.c:4645 +#: utils/adt/geo_ops.c:4660 utils/adt/geo_ops.c:4667 utils/adt/int8.c:126 +#: utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 +#: utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 +#: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:601 +#: utils/adt/numeric.c:628 utils/adt/numeric.c:6001 utils/adt/numeric.c:6025 +#: utils/adt/numeric.c:6049 utils/adt/numeric.c:6882 utils/adt/numeric.c:6908 +#: utils/adt/numutils.c:116 utils/adt/numutils.c:126 utils/adt/numutils.c:170 +#: utils/adt/numutils.c:246 utils/adt/numutils.c:322 utils/adt/oid.c:44 +#: utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 +#: utils/adt/pg_lsn.c:73 utils/adt/tid.c:74 utils/adt/tid.c:82 +#: utils/adt/tid.c:90 utils/adt/timestamp.c:494 utils/adt/uuid.c:136 +#: utils/adt/xid8funcs.c:346 +#, c-format +msgid "invalid input syntax for type %s: \"%s\"" +msgstr "неприпустимий синтаксис для типу %s: \"%s\"" + +#: utils/adt/cash.c:215 utils/adt/cash.c:240 utils/adt/cash.c:250 +#: utils/adt/cash.c:290 utils/adt/int8.c:118 utils/adt/numutils.c:140 +#: utils/adt/numutils.c:147 utils/adt/numutils.c:240 utils/adt/numutils.c:316 +#: utils/adt/oid.c:70 utils/adt/oid.c:109 +#, c-format +msgid "value \"%s\" is out of range for type %s" +msgstr "значення \"%s\" поза діапазоном для типу %s" + +#: utils/adt/cash.c:652 utils/adt/cash.c:702 utils/adt/cash.c:753 +#: utils/adt/cash.c:802 utils/adt/cash.c:854 utils/adt/cash.c:904 +#: utils/adt/float.c:104 utils/adt/int.c:824 utils/adt/int.c:940 +#: utils/adt/int.c:1020 utils/adt/int.c:1082 utils/adt/int.c:1120 +#: utils/adt/int.c:1148 utils/adt/int8.c:593 utils/adt/int8.c:651 +#: utils/adt/int8.c:978 utils/adt/int8.c:1058 utils/adt/int8.c:1120 +#: utils/adt/int8.c:1200 utils/adt/numeric.c:7446 utils/adt/numeric.c:7736 +#: utils/adt/numeric.c:9318 utils/adt/timestamp.c:3264 +#, c-format +msgid "division by zero" +msgstr "ділення на нуль" + +#: utils/adt/char.c:169 +#, c-format +msgid "\"char\" out of range" +msgstr "значення \"char\" поза діапазоном" + +#: utils/adt/date.c:61 utils/adt/timestamp.c:95 utils/adt/varbit.c:104 +#: utils/adt/varchar.c:48 +#, c-format +msgid "invalid type modifier" +msgstr "неприпустимий тип модифікатора" + +#: utils/adt/date.c:73 +#, c-format +msgid "TIME(%d)%s precision must not be negative" +msgstr "TIME(%d)%s точність не повинна бути від'ємною" + +#: utils/adt/date.c:79 +#, c-format +msgid "TIME(%d)%s precision reduced to maximum allowed, %d" +msgstr "TIME(%d)%s точність зменшена до дозволеного максимуму, %d" + +#: utils/adt/date.c:158 utils/adt/date.c:166 utils/adt/formatting.c:4196 +#: utils/adt/formatting.c:4205 utils/adt/formatting.c:4311 +#: utils/adt/formatting.c:4321 +#, c-format +msgid "date out of range: \"%s\"" +msgstr "дата поза діапазоном: \"%s\"" + +#: utils/adt/date.c:213 utils/adt/date.c:525 utils/adt/date.c:549 +#: utils/adt/xml.c:2210 +#, c-format +msgid "date out of range" +msgstr "дата поза діапазоном" + +#: utils/adt/date.c:259 utils/adt/timestamp.c:574 +#, c-format +msgid "date field value out of range: %d-%02d-%02d" +msgstr "значення поля типу date поза діапазоном: %d-%02d-%02d" + +#: utils/adt/date.c:266 utils/adt/date.c:275 utils/adt/timestamp.c:580 +#, c-format +msgid "date out of range: %d-%02d-%02d" +msgstr "дата поза діапазоном: %d-%02d-%02d" + +#: utils/adt/date.c:313 utils/adt/date.c:336 utils/adt/date.c:362 +#: utils/adt/date.c:1170 utils/adt/date.c:1216 utils/adt/date.c:1772 +#: utils/adt/date.c:1803 utils/adt/date.c:1832 utils/adt/date.c:2664 +#: utils/adt/datetime.c:1655 utils/adt/formatting.c:4053 +#: utils/adt/formatting.c:4085 utils/adt/formatting.c:4165 +#: utils/adt/formatting.c:4287 utils/adt/json.c:418 utils/adt/json.c:457 +#: utils/adt/timestamp.c:222 utils/adt/timestamp.c:254 +#: utils/adt/timestamp.c:692 utils/adt/timestamp.c:701 +#: utils/adt/timestamp.c:779 utils/adt/timestamp.c:812 +#: utils/adt/timestamp.c:2843 utils/adt/timestamp.c:2864 +#: utils/adt/timestamp.c:2877 utils/adt/timestamp.c:2886 +#: utils/adt/timestamp.c:2894 utils/adt/timestamp.c:2949 +#: utils/adt/timestamp.c:2972 utils/adt/timestamp.c:2985 +#: utils/adt/timestamp.c:2996 utils/adt/timestamp.c:3004 +#: utils/adt/timestamp.c:3664 utils/adt/timestamp.c:3789 +#: utils/adt/timestamp.c:3830 utils/adt/timestamp.c:3920 +#: utils/adt/timestamp.c:3964 utils/adt/timestamp.c:4067 +#: utils/adt/timestamp.c:4552 utils/adt/timestamp.c:4748 +#: utils/adt/timestamp.c:5075 utils/adt/timestamp.c:5089 +#: utils/adt/timestamp.c:5094 utils/adt/timestamp.c:5108 +#: utils/adt/timestamp.c:5141 utils/adt/timestamp.c:5218 +#: utils/adt/timestamp.c:5259 utils/adt/timestamp.c:5263 +#: utils/adt/timestamp.c:5332 utils/adt/timestamp.c:5336 +#: utils/adt/timestamp.c:5350 utils/adt/timestamp.c:5384 utils/adt/xml.c:2232 +#: utils/adt/xml.c:2239 utils/adt/xml.c:2259 utils/adt/xml.c:2266 +#, c-format +msgid "timestamp out of range" +msgstr "позначка часу поза діапазоном" + +#: utils/adt/date.c:500 +#, c-format +msgid "cannot subtract infinite dates" +msgstr "віднімати безкінечні дати не можна" + +#: utils/adt/date.c:589 utils/adt/date.c:646 utils/adt/date.c:680 +#: utils/adt/date.c:2701 utils/adt/date.c:2711 +#, c-format +msgid "date out of range for timestamp" +msgstr "для позначки часу дата поза діапазоном" + +#: utils/adt/date.c:1389 utils/adt/date.c:2159 utils/adt/formatting.c:4373 +#, c-format +msgid "time out of range" +msgstr "час поза діапазоном" + +#: utils/adt/date.c:1441 utils/adt/timestamp.c:589 +#, c-format +msgid "time field value out of range: %d:%02d:%02g" +msgstr "значення поля типу time поза діапазоном: %d:%02d:%02g" + +#: utils/adt/date.c:1961 utils/adt/date.c:2463 utils/adt/float.c:1071 +#: utils/adt/float.c:1140 utils/adt/int.c:616 utils/adt/int.c:663 +#: utils/adt/int.c:698 utils/adt/int8.c:492 utils/adt/numeric.c:2197 +#: utils/adt/timestamp.c:3313 utils/adt/timestamp.c:3344 +#: utils/adt/timestamp.c:3375 +#, c-format +msgid "invalid preceding or following size in window function" +msgstr "неприпустимий розмір preceding або following у віконній функції" + +#: utils/adt/date.c:2046 utils/adt/date.c:2059 +#, c-format +msgid "\"time\" units \"%s\" not recognized" +msgstr "\"час\" містить нерозпізанін одиниці \"%s\"" + +#: utils/adt/date.c:2167 +#, c-format +msgid "time zone displacement out of range" +msgstr "зсув часового поясу поза діапазоном" + +#: utils/adt/date.c:2796 utils/adt/date.c:2809 +#, c-format +msgid "\"time with time zone\" units \"%s\" not recognized" +msgstr "\"час з часовим поясом\" містить нерозпізнані одиниці \"%s\"" + +#: utils/adt/date.c:2882 utils/adt/datetime.c:906 utils/adt/datetime.c:1813 +#: utils/adt/datetime.c:4601 utils/adt/timestamp.c:513 +#: utils/adt/timestamp.c:540 utils/adt/timestamp.c:4150 +#: utils/adt/timestamp.c:5100 utils/adt/timestamp.c:5342 +#, c-format +msgid "time zone \"%s\" not recognized" +msgstr "часовий пояс \"%s\" не розпізнаний" + +#: utils/adt/date.c:2914 utils/adt/timestamp.c:5130 utils/adt/timestamp.c:5373 +#, c-format +msgid "interval time zone \"%s\" must not include months or days" +msgstr "інтервал \"%s\", який задає часовий пояс, не повинен включати місяці або дні" + +#: utils/adt/datetime.c:3730 utils/adt/datetime.c:3737 +#, c-format +msgid "date/time field value out of range: \"%s\"" +msgstr "значення поля типу дата/час поза діапазоном: \"%s\"" + +#: utils/adt/datetime.c:3739 +#, c-format +msgid "Perhaps you need a different \"datestyle\" setting." +msgstr "Можливо, вам потрібні інші налаштування \"datestyle\"." + +#: utils/adt/datetime.c:3744 +#, c-format +msgid "interval field value out of range: \"%s\"" +msgstr "значення поля типу інтервал, поза діапазоном: \"%s\"" + +#: utils/adt/datetime.c:3750 +#, c-format +msgid "time zone displacement out of range: \"%s\"" +msgstr "зміщення часового поясу, поза діапазоном: \"%s\"" + +#: utils/adt/datetime.c:4603 +#, c-format +msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." +msgstr "Це ім'я часового поясу з'являється у файлі конфігурації часового поясу з кодом \"%s\"." + +#: utils/adt/datum.c:89 utils/adt/datum.c:101 +#, c-format +msgid "invalid Datum pointer" +msgstr "неприпустимий вказівник Datum" + +#: utils/adt/dbsize.c:759 utils/adt/dbsize.c:827 +#, c-format +msgid "invalid size: \"%s\"" +msgstr "неприпустимий розмір: \"%s\"" + +#: utils/adt/dbsize.c:828 +#, c-format +msgid "Invalid size unit: \"%s\"." +msgstr "Неприпустима одиниця вимірювання розміру: \"%s\"." + +#: utils/adt/dbsize.c:829 +#, c-format +msgid "Valid units are \"bytes\", \"kB\", \"MB\", \"GB\", and \"TB\"." +msgstr "Припустимі одиниці вимірювання: \"bytes\", \"kB\", \"MB\", \"GB\", і \"TB\"." + +#: utils/adt/domains.c:92 +#, c-format +msgid "type %s is not a domain" +msgstr "тип %s не є доменом" + +#: utils/adt/encode.c:64 utils/adt/encode.c:112 +#, c-format +msgid "unrecognized encoding: \"%s\"" +msgstr "нерозпізнане кодування: \"%s\"" + +#: utils/adt/encode.c:78 +#, c-format +msgid "result of encoding conversion is too large" +msgstr "результат перетворення кодування занадто великий" + +#: utils/adt/encode.c:126 +#, c-format +msgid "result of decoding conversion is too large" +msgstr "результат перетворення декодування занадто великий" + +#: utils/adt/encode.c:184 +#, c-format +msgid "invalid hexadecimal digit: \"%c\"" +msgstr "неприпустиме шістнадцяткове число: \"%c\"" + +#: utils/adt/encode.c:212 +#, c-format +msgid "invalid hexadecimal data: odd number of digits" +msgstr "неприпустимі шістнадцядкові дані: непарна кількість чисел" + +#: utils/adt/encode.c:329 +#, c-format +msgid "unexpected \"=\" while decoding base64 sequence" +msgstr "неочікуваний символ \"=\" під час декодування послідовності base64" + +#: utils/adt/encode.c:341 +#, c-format +msgid "invalid symbol \"%c\" while decoding base64 sequence" +msgstr "неприпустимий символ \"%c\" під час декодування послідовності base64" + +#: utils/adt/encode.c:361 +#, c-format +msgid "invalid base64 end sequence" +msgstr "неприпустима скінченна послідовність base64" + +#: utils/adt/encode.c:362 +#, c-format +msgid "Input data is missing padding, is truncated, or is otherwise corrupted." +msgstr "Вхідні дані позбавлені можливості заповнення, скорочені, або пошкоджені іншим чином." + +#: utils/adt/encode.c:476 utils/adt/encode.c:541 utils/adt/jsonfuncs.c:619 +#: utils/adt/varlena.c:319 utils/adt/varlena.c:360 jsonpath_gram.y:528 +#: jsonpath_scan.l:519 jsonpath_scan.l:530 jsonpath_scan.l:540 +#: jsonpath_scan.l:582 +#, c-format +msgid "invalid input syntax for type %s" +msgstr "неприпустимий вхідний синтаксис для типу %s" + +#: utils/adt/enum.c:100 +#, c-format +msgid "unsafe use of new value \"%s\" of enum type %s" +msgstr "небезпечне використання нового значення \"%s\" типу переліку %s" + +#: utils/adt/enum.c:103 +#, c-format +msgid "New enum values must be committed before they can be used." +msgstr "Нові значення переліку повинні бути затверджені, перш ніж їх можна використовувати." + +#: utils/adt/enum.c:121 utils/adt/enum.c:131 utils/adt/enum.c:189 +#: utils/adt/enum.c:199 +#, c-format +msgid "invalid input value for enum %s: \"%s\"" +msgstr "неприпустиме вхідне значення для переліку %s: \"%s\"" + +#: utils/adt/enum.c:161 utils/adt/enum.c:227 utils/adt/enum.c:286 +#, c-format +msgid "invalid internal value for enum: %u" +msgstr "неприпустиме внутрішнє значення для переліку: %u" + +#: utils/adt/enum.c:446 utils/adt/enum.c:475 utils/adt/enum.c:515 +#: utils/adt/enum.c:535 +#, c-format +msgid "could not determine actual enum type" +msgstr "не вдалося визначити фактичний тип переліку" + +#: utils/adt/enum.c:454 utils/adt/enum.c:483 +#, c-format +msgid "enum %s contains no values" +msgstr "перелік %s не містить значень" + +#: utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 +#: utils/cache/typcache.c:1632 utils/cache/typcache.c:1788 +#: utils/cache/typcache.c:1918 utils/fmgr/funcapi.c:456 +#, c-format +msgid "type %s is not composite" +msgstr "тип %s не є складеним" + +#: utils/adt/float.c:88 +#, c-format +msgid "value out of range: overflow" +msgstr "значення поза діапазоном: надлишок" + +#: utils/adt/float.c:96 +#, c-format +msgid "value out of range: underflow" +msgstr "значення поза діапазоном: недостача" + +#: utils/adt/float.c:265 +#, c-format +msgid "\"%s\" is out of range for type real" +msgstr "\"%s\" поза діапазоном для дійсного типу" + +#: utils/adt/float.c:489 +#, c-format +msgid "\"%s\" is out of range for type double precision" +msgstr "\"%s\" поза діапазоном для типу double precision" + +#: utils/adt/float.c:1268 utils/adt/float.c:1342 utils/adt/int.c:336 +#: utils/adt/int.c:874 utils/adt/int.c:896 utils/adt/int.c:910 +#: utils/adt/int.c:924 utils/adt/int.c:956 utils/adt/int.c:1194 +#: utils/adt/int8.c:1313 utils/adt/numeric.c:3553 utils/adt/numeric.c:3562 +#, c-format +msgid "smallint out of range" +msgstr "двобайтове ціле поза діапазоном" + +#: utils/adt/float.c:1468 utils/adt/numeric.c:8329 +#, c-format +msgid "cannot take square root of a negative number" +msgstr "вилучити квадратний корінь від'ємного числа не можна" + +#: utils/adt/float.c:1536 utils/adt/numeric.c:3239 +#, c-format +msgid "zero raised to a negative power is undefined" +msgstr "нуль у від'ємному ступені дає невизначеність" + +#: utils/adt/float.c:1540 utils/adt/numeric.c:3245 +#, c-format +msgid "a negative number raised to a non-integer power yields a complex result" +msgstr "від'ємне число у не цілому ступені дає комплексний результат" + +#: utils/adt/float.c:1614 utils/adt/float.c:1647 utils/adt/numeric.c:8993 +#, c-format +msgid "cannot take logarithm of zero" +msgstr "обчислити логарифм нуля не можна" + +#: utils/adt/float.c:1618 utils/adt/float.c:1651 utils/adt/numeric.c:8997 +#, c-format +msgid "cannot take logarithm of a negative number" +msgstr "обчислити логарифм від'ємного числа не можна" + +#: utils/adt/float.c:1684 utils/adt/float.c:1715 utils/adt/float.c:1810 +#: utils/adt/float.c:1837 utils/adt/float.c:1865 utils/adt/float.c:1892 +#: utils/adt/float.c:2039 utils/adt/float.c:2076 utils/adt/float.c:2246 +#: utils/adt/float.c:2302 utils/adt/float.c:2367 utils/adt/float.c:2424 +#: utils/adt/float.c:2615 utils/adt/float.c:2639 +#, c-format +msgid "input is out of range" +msgstr "введене значення поза діапазоном" + +#: utils/adt/float.c:2706 +#, c-format +msgid "setseed parameter %g is out of allowed range [-1,1]" +msgstr "параметр setseed %g поза допустимим діапазоном [-1,1]" + +#: utils/adt/float.c:3938 utils/adt/numeric.c:1509 +#, c-format +msgid "count must be greater than zero" +msgstr "лічильник повинен бути більше нуля" + +#: utils/adt/float.c:3943 utils/adt/numeric.c:1516 +#, c-format +msgid "operand, lower bound, and upper bound cannot be NaN" +msgstr "операнд, нижня границя і верхня границя не можуть бути NaN" + +#: utils/adt/float.c:3949 +#, c-format +msgid "lower and upper bounds must be finite" +msgstr "нижня і верхня границі повинні бути скінченними" + +#: utils/adt/float.c:3983 utils/adt/numeric.c:1529 +#, c-format +msgid "lower bound cannot equal upper bound" +msgstr "нижня границя не може дорівнювати верхній границі" + +#: utils/adt/formatting.c:532 +#, c-format +msgid "invalid format specification for an interval value" +msgstr "неприпустима специфікація формату для цілого значення" + +#: utils/adt/formatting.c:533 +#, c-format +msgid "Intervals are not tied to specific calendar dates." +msgstr "Інтервали не зв'язуються з певними календарними датами." + +#: utils/adt/formatting.c:1157 +#, c-format +msgid "\"EEEE\" must be the last pattern used" +msgstr "\"EEEE\" повинно бути останнім використаним шаблоном" + +#: utils/adt/formatting.c:1165 +#, c-format +msgid "\"9\" must be ahead of \"PR\"" +msgstr "\"9\" повинна бути до \"PR\"" + +#: utils/adt/formatting.c:1181 +#, c-format +msgid "\"0\" must be ahead of \"PR\"" +msgstr "\"0\" повинен бути до \"PR\"" + +#: utils/adt/formatting.c:1208 +#, c-format +msgid "multiple decimal points" +msgstr "численні десяткові точки" + +#: utils/adt/formatting.c:1212 utils/adt/formatting.c:1295 +#, c-format +msgid "cannot use \"V\" and decimal point together" +msgstr "використовувати \"V\" і десяткову точку разом, не можна" + +#: utils/adt/formatting.c:1224 +#, c-format +msgid "cannot use \"S\" twice" +msgstr "використовувати \"S\" двічі, не можна" + +#: utils/adt/formatting.c:1228 +#, c-format +msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" +msgstr "використовувати \"S\" і \"PL\"/\"MI\"/\"SG\"/\"PR\" разом, не можна" + +#: utils/adt/formatting.c:1248 +#, c-format +msgid "cannot use \"S\" and \"MI\" together" +msgstr "використовувати \"S\" і \"MI\" разом, не можна" + +#: utils/adt/formatting.c:1258 +#, c-format +msgid "cannot use \"S\" and \"PL\" together" +msgstr "не можна використовувати \"S\" і \"PL\" разом" + +#: utils/adt/formatting.c:1268 +#, c-format +msgid "cannot use \"S\" and \"SG\" together" +msgstr "не можна використовувати \"S\" і \"SG\" разом" + +#: utils/adt/formatting.c:1277 +#, c-format +msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" +msgstr "не можна використовувати \"PR\" і \"S\"/\"PL\"/\"MI\"/\"SG\" разом" + +#: utils/adt/formatting.c:1303 +#, c-format +msgid "cannot use \"EEEE\" twice" +msgstr "не можна використовувати \"EEEE\" двічі" + +#: utils/adt/formatting.c:1309 +#, c-format +msgid "\"EEEE\" is incompatible with other formats" +msgstr "\"EEEE\" є несумісним з іншими форматами" + +#: utils/adt/formatting.c:1310 +#, c-format +msgid "\"EEEE\" may only be used together with digit and decimal point patterns." +msgstr "\"EEEE\" може використовуватись лише разом з шаблонами цифр і десяткової точки." + +#: utils/adt/formatting.c:1392 +#, c-format +msgid "invalid datetime format separator: \"%s\"" +msgstr "неприпустимий роздільник формату дати й часу: \"%s\"" + +#: utils/adt/formatting.c:1520 +#, c-format +msgid "\"%s\" is not a number" +msgstr "\"%s\" не є числом" + +#: utils/adt/formatting.c:1598 +#, c-format +msgid "case conversion failed: %s" +msgstr "помилка при перетворенні регістру: %s" + +#: utils/adt/formatting.c:1663 utils/adt/formatting.c:1787 +#: utils/adt/formatting.c:1912 +#, c-format +msgid "could not determine which collation to use for %s function" +msgstr "не вдалося визначити який параметр сортування використати для функції %s" + +#: utils/adt/formatting.c:2284 +#, c-format +msgid "invalid combination of date conventions" +msgstr "неприпустиме поєднання стилів дат" + +#: utils/adt/formatting.c:2285 +#, c-format +msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." +msgstr "Не змішуйте Gregorian і ISO стилі дат (тижнів) в одному шаблоні форматування." + +#: utils/adt/formatting.c:2308 +#, c-format +msgid "conflicting values for \"%s\" field in formatting string" +msgstr "конфліктуючі значення для \"%s\" поля в рядку форматування" + +#: utils/adt/formatting.c:2311 +#, c-format +msgid "This value contradicts a previous setting for the same field type." +msgstr "Це значення суперечить попередньому параметри для поля того ж типу." + +#: utils/adt/formatting.c:2382 +#, c-format +msgid "source string too short for \"%s\" formatting field" +msgstr "вихідний рядок занадто короткий для \"%s\" поля форматування" + +#: utils/adt/formatting.c:2385 +#, c-format +msgid "Field requires %d characters, but only %d remain." +msgstr "Поле потребує %d символів, але залишилось лише %d." + +#: utils/adt/formatting.c:2388 utils/adt/formatting.c:2403 +#, c-format +msgid "If your source string is not fixed-width, try using the \"FM\" modifier." +msgstr "Якщо ваш вихідний рядок не має постійної ширини, спробуйте використати \"FM\" модифікатор." + +#: utils/adt/formatting.c:2398 utils/adt/formatting.c:2412 +#: utils/adt/formatting.c:2635 +#, c-format +msgid "invalid value \"%s\" for \"%s\"" +msgstr "неприпустиме значення \"%s\" для \"%s\"" + +#: utils/adt/formatting.c:2400 +#, c-format +msgid "Field requires %d characters, but only %d could be parsed." +msgstr "Поле потребує %d символів, але вдалося аналізувати лише %d." + +#: utils/adt/formatting.c:2414 +#, c-format +msgid "Value must be an integer." +msgstr "Значення повинне бути цілим числом." + +#: utils/adt/formatting.c:2419 +#, c-format +msgid "value for \"%s\" in source string is out of range" +msgstr "значення для \"%s\" у вихідному рядку поза діапазоном" + +#: utils/adt/formatting.c:2421 +#, c-format +msgid "Value must be in the range %d to %d." +msgstr "Значення повинне бути в діапазоні %d до %d." + +#: utils/adt/formatting.c:2637 +#, c-format +msgid "The given value did not match any of the allowed values for this field." +msgstr "Дане значення не відповідає жодному з доступних значень для цього поля." + +#: utils/adt/formatting.c:2854 utils/adt/formatting.c:2874 +#: utils/adt/formatting.c:2894 utils/adt/formatting.c:2914 +#: utils/adt/formatting.c:2933 utils/adt/formatting.c:2952 +#: utils/adt/formatting.c:2976 utils/adt/formatting.c:2994 +#: utils/adt/formatting.c:3012 utils/adt/formatting.c:3030 +#: utils/adt/formatting.c:3047 utils/adt/formatting.c:3064 +#, c-format +msgid "localized string format value too long" +msgstr "занадто довге значення формату локалізованого рядка" + +#: utils/adt/formatting.c:3298 +#, c-format +msgid "unmatched format separator \"%c\"" +msgstr "невідповідний роздільник формату \"%c\"" + +#: utils/adt/formatting.c:3453 utils/adt/formatting.c:3797 +#, c-format +msgid "formatting field \"%s\" is only supported in to_char" +msgstr "поле форматування \"%s\" підтримується лише в функції to_char" + +#: utils/adt/formatting.c:3628 +#, c-format +msgid "invalid input string for \"Y,YYY\"" +msgstr "неприпустимий вхідний рядок для \"Y,YYY\"" + +#: utils/adt/formatting.c:3714 +#, c-format +msgid "input string is too short for datetime format" +msgstr "вхідний рядок занадто короткий для формату дати й часу" + +#: utils/adt/formatting.c:3722 +#, c-format +msgid "trailing characters remain in input string after datetime format" +msgstr "символи наприкінці залишаються у вхідному рядку після формату дати й часу" + +#: utils/adt/formatting.c:4267 +#, c-format +msgid "missing time zone in input string for type timestamptz" +msgstr "пропущено часовий пояс у вхідному рядку для типу timestamptz" + +#: utils/adt/formatting.c:4273 +#, c-format +msgid "timestamptz out of range" +msgstr "timestamptz поза діапазоном" + +#: utils/adt/formatting.c:4301 +#, c-format +msgid "datetime format is zoned but not timed" +msgstr "формат дати й часу зоновано, але не приурочено" + +#: utils/adt/formatting.c:4353 +#, c-format +msgid "missing time zone in input string for type timetz" +msgstr "пропущено часовий пояс у вхідному рядку для типу timetz" + +#: utils/adt/formatting.c:4359 +#, c-format +msgid "timetz out of range" +msgstr "timetz поза діапазоном" + +#: utils/adt/formatting.c:4385 +#, c-format +msgid "datetime format is not dated and not timed" +msgstr "формат дати й часу не датований і не приурочений" + +#: utils/adt/formatting.c:4518 +#, c-format +msgid "hour \"%d\" is invalid for the 12-hour clock" +msgstr "година \"%d\" неприпустима для 12-часового годинника" + +#: utils/adt/formatting.c:4520 +#, c-format +msgid "Use the 24-hour clock, or give an hour between 1 and 12." +msgstr "Використайте 24-часовий годинник, або передавайте години від 1 до 12." + +#: utils/adt/formatting.c:4628 +#, c-format +msgid "cannot calculate day of year without year information" +msgstr "не можна обчислити день року без інформації про рік" + +#: utils/adt/formatting.c:5547 +#, c-format +msgid "\"EEEE\" not supported for input" +msgstr "\"EEEE\" не підтримується при введенні" + +#: utils/adt/formatting.c:5559 +#, c-format +msgid "\"RN\" not supported for input" +msgstr "\"RN\" не підтримується при введенні" + +#: utils/adt/genfile.c:75 +#, c-format +msgid "reference to parent directory (\"..\") not allowed" +msgstr "посилання на батьківський каталог (\"..\") не дозволене" + +#: utils/adt/genfile.c:86 +#, c-format +msgid "absolute path not allowed" +msgstr "абсолютний шлях не дозволений" + +#: utils/adt/genfile.c:91 +#, c-format +msgid "path must be in or below the current directory" +msgstr "шлях повинен вказувати поточний або вкладений каталог" + +#: utils/adt/genfile.c:116 utils/adt/oracle_compat.c:185 +#: utils/adt/oracle_compat.c:283 utils/adt/oracle_compat.c:759 +#: utils/adt/oracle_compat.c:1054 +#, c-format +msgid "requested length too large" +msgstr "запитана довжина занадто велика" + +#: utils/adt/genfile.c:133 +#, c-format +msgid "could not seek in file \"%s\": %m" +msgstr "не вдалося знайти в файлі \"%s\": %m" + +#: utils/adt/genfile.c:174 +#, c-format +msgid "file length too large" +msgstr "довжина файлу завелика" + +#: utils/adt/genfile.c:251 +#, c-format +msgid "must be superuser to read files with adminpack 1.0" +msgstr "щоб читати файли, використовуючи adminpack 1.0 потрібно бути суперкористувачем" + +#: utils/adt/geo_ops.c:979 utils/adt/geo_ops.c:1025 +#, c-format +msgid "invalid line specification: A and B cannot both be zero" +msgstr "неприпустима специфікація рядка: A і B не можуть бути нульовими" + +#: utils/adt/geo_ops.c:987 utils/adt/geo_ops.c:1090 +#, c-format +msgid "invalid line specification: must be two distinct points" +msgstr "неприпустима специфікація рядка: повинно бути дві різних точки" + +#: utils/adt/geo_ops.c:1399 utils/adt/geo_ops.c:3486 utils/adt/geo_ops.c:4354 +#: utils/adt/geo_ops.c:5248 +#, c-format +msgid "too many points requested" +msgstr "запитано занадто багато точок" + +#: utils/adt/geo_ops.c:1461 +#, c-format +msgid "invalid number of points in external \"path\" value" +msgstr "неприпустима кількість точок у зовнішньому значенні \"path\"" + +#: utils/adt/geo_ops.c:2537 +#, c-format +msgid "function \"dist_lb\" not implemented" +msgstr "функція \"dist_lb\" не реалізована" + +#: utils/adt/geo_ops.c:2556 +#, c-format +msgid "function \"dist_bl\" not implemented" +msgstr "функція \"dist_bl\" не реалізована" + +#: utils/adt/geo_ops.c:2975 +#, c-format +msgid "function \"close_sl\" not implemented" +msgstr "функція \"close_sl\" не реалізована" + +#: utils/adt/geo_ops.c:3122 +#, c-format +msgid "function \"close_lb\" not implemented" +msgstr "функція \"close_lb\" не реалізована" + +#: utils/adt/geo_ops.c:3533 +#, c-format +msgid "invalid number of points in external \"polygon\" value" +msgstr "неприпустима кількість точок в зовнішньому значенні \"polygon\"" + +#: utils/adt/geo_ops.c:4069 +#, c-format +msgid "function \"poly_distance\" not implemented" +msgstr "функція \"poly_distance\" не реалізована" + +#: utils/adt/geo_ops.c:4446 +#, c-format +msgid "function \"path_center\" not implemented" +msgstr "функція \"path_center\" не реалізована" + +#: utils/adt/geo_ops.c:4463 +#, c-format +msgid "open path cannot be converted to polygon" +msgstr "відкритий шлях не можна перетворити в багатокутник" + +#: utils/adt/geo_ops.c:4713 +#, c-format +msgid "invalid radius in external \"circle\" value" +msgstr "неприпустимий радіус у зовнішньому значенні \"circle\"" + +#: utils/adt/geo_ops.c:5234 +#, c-format +msgid "cannot convert circle with radius zero to polygon" +msgstr "круг з нульовим радіусом не можна перетворити в багатокутник" + +#: utils/adt/geo_ops.c:5239 +#, c-format +msgid "must request at least 2 points" +msgstr "повинно бути запитано мінімум 2 точки" + +#: utils/adt/int.c:164 +#, c-format +msgid "int2vector has too many elements" +msgstr "int2vector має занадто багато елементів" + +#: utils/adt/int.c:239 +#, c-format +msgid "invalid int2vector data" +msgstr "неприпустимі дані int2vector" + +#: utils/adt/int.c:245 utils/adt/oid.c:215 utils/adt/oid.c:296 +#, c-format +msgid "oidvector has too many elements" +msgstr "oidvector має занадто багато елементів" + +#: utils/adt/int.c:1510 utils/adt/int8.c:1439 utils/adt/numeric.c:1417 +#: utils/adt/timestamp.c:5435 utils/adt/timestamp.c:5515 +#, c-format +msgid "step size cannot equal zero" +msgstr "розмір кроку не може дорівнювати нулю" + +#: utils/adt/int8.c:527 utils/adt/int8.c:550 utils/adt/int8.c:564 +#: utils/adt/int8.c:578 utils/adt/int8.c:609 utils/adt/int8.c:633 +#: utils/adt/int8.c:715 utils/adt/int8.c:783 utils/adt/int8.c:789 +#: utils/adt/int8.c:815 utils/adt/int8.c:829 utils/adt/int8.c:853 +#: utils/adt/int8.c:866 utils/adt/int8.c:935 utils/adt/int8.c:949 +#: utils/adt/int8.c:963 utils/adt/int8.c:994 utils/adt/int8.c:1016 +#: utils/adt/int8.c:1030 utils/adt/int8.c:1044 utils/adt/int8.c:1077 +#: utils/adt/int8.c:1091 utils/adt/int8.c:1105 utils/adt/int8.c:1136 +#: utils/adt/int8.c:1158 utils/adt/int8.c:1172 utils/adt/int8.c:1186 +#: utils/adt/int8.c:1348 utils/adt/int8.c:1383 utils/adt/numeric.c:3508 +#: utils/adt/varbit.c:1656 +#, c-format +msgid "bigint out of range" +msgstr "bigint поза діапазоном" + +#: utils/adt/int8.c:1396 +#, c-format +msgid "OID out of range" +msgstr "OID поза діапазоном" + +#: utils/adt/json.c:271 utils/adt/jsonb.c:757 +#, c-format +msgid "key value must be scalar, not array, composite, or json" +msgstr "значенням ключа повинен бути скаляр, не масив, композитний тип, або json" + +#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:1812 +#, c-format +msgid "could not determine data type for argument %d" +msgstr "не вдалося визначити тип даних для аргументу %d" + +#: utils/adt/json.c:926 utils/adt/jsonb.c:1728 +#, c-format +msgid "field name must not be null" +msgstr "ім'я поля не повинно бути null" + +#: utils/adt/json.c:1010 utils/adt/jsonb.c:1178 +#, c-format +msgid "argument list must have even number of elements" +msgstr "список аргументів повинен мати парну кількість елементів" + +#. translator: %s is a SQL function name +#: utils/adt/json.c:1012 utils/adt/jsonb.c:1180 +#, c-format +msgid "The arguments of %s must consist of alternating keys and values." +msgstr "Аргументи %s повинні складатись з альтернативних ключей і значень." + +#: utils/adt/json.c:1028 +#, c-format +msgid "argument %d cannot be null" +msgstr "аргумент %d не може бути null" + +#: utils/adt/json.c:1029 +#, c-format +msgid "Object keys should be text." +msgstr "Ключі об'єктів повинні бути текстовими." + +#: utils/adt/json.c:1135 utils/adt/jsonb.c:1310 +#, c-format +msgid "array must have two columns" +msgstr "масив повинен мати два стовпця" + +#: utils/adt/json.c:1159 utils/adt/json.c:1243 utils/adt/jsonb.c:1334 +#: utils/adt/jsonb.c:1429 +#, c-format +msgid "null value not allowed for object key" +msgstr "значення null не дозволене для ключа об'єкту" + +#: utils/adt/json.c:1232 utils/adt/jsonb.c:1418 +#, c-format +msgid "mismatched array dimensions" +msgstr "невідповідні виміри масиву" + +#: utils/adt/jsonb.c:287 +#, c-format +msgid "string too long to represent as jsonb string" +msgstr "рядок занадто довгий для представлення в якості рядка jsonb" + +#: utils/adt/jsonb.c:288 +#, c-format +msgid "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." +msgstr "Через обмеження упровадження, рядки jsonb не можуть перевищувати %d байт." + +#: utils/adt/jsonb.c:1193 +#, c-format +msgid "argument %d: key must not be null" +msgstr "аргумент %d: ключ не повинен бути null" + +#: utils/adt/jsonb.c:1781 +#, c-format +msgid "object keys must be strings" +msgstr "ключі об'єктів повинні бути рядками" + +#: utils/adt/jsonb.c:1944 +#, c-format +msgid "cannot cast jsonb null to type %s" +msgstr "привести значення jsonb null до типу %s не можна" + +#: utils/adt/jsonb.c:1945 +#, c-format +msgid "cannot cast jsonb string to type %s" +msgstr "привести рядок jsonb до типу %s не можна" + +#: utils/adt/jsonb.c:1946 +#, c-format +msgid "cannot cast jsonb numeric to type %s" +msgstr "привести число jsonb до типу %s не можна" + +#: utils/adt/jsonb.c:1947 +#, c-format +msgid "cannot cast jsonb boolean to type %s" +msgstr "привести логічне значення jsonb до типу %s не можна" + +#: utils/adt/jsonb.c:1948 +#, c-format +msgid "cannot cast jsonb array to type %s" +msgstr "привести масив jsonb до типу %s не можна" + +#: utils/adt/jsonb.c:1949 +#, c-format +msgid "cannot cast jsonb object to type %s" +msgstr "привести об'єкт jsonb до типу %s не можна" + +#: utils/adt/jsonb.c:1950 +#, c-format +msgid "cannot cast jsonb array or object to type %s" +msgstr "привести масив або об'єкт jsonb до типу %s не можна" + +#: utils/adt/jsonb_util.c:699 +#, c-format +msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" +msgstr "кількість пар об'єкта jsonb перевищує максимально дозволену (%zu)" + +#: utils/adt/jsonb_util.c:740 +#, c-format +msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" +msgstr "кількість елементів масиву jsonb перевищує максимально дозволену(%zu)" + +#: utils/adt/jsonb_util.c:1614 utils/adt/jsonb_util.c:1634 +#, c-format +msgid "total size of jsonb array elements exceeds the maximum of %u bytes" +msgstr "загальний розмір елементів масиву jsonb перевищує максимум (%u байт)" + +#: utils/adt/jsonb_util.c:1695 utils/adt/jsonb_util.c:1730 +#: utils/adt/jsonb_util.c:1750 +#, c-format +msgid "total size of jsonb object elements exceeds the maximum of %u bytes" +msgstr "загальний розмір елементів об'єкту jsonb перевищує максимум (%u байт)" + +#: utils/adt/jsonfuncs.c:551 utils/adt/jsonfuncs.c:796 +#: utils/adt/jsonfuncs.c:2330 utils/adt/jsonfuncs.c:2770 +#: utils/adt/jsonfuncs.c:3560 utils/adt/jsonfuncs.c:3891 +#, c-format +msgid "cannot call %s on a scalar" +msgstr "викликати %s зі скаляром, не можна" + +#: utils/adt/jsonfuncs.c:556 utils/adt/jsonfuncs.c:783 +#: utils/adt/jsonfuncs.c:2772 utils/adt/jsonfuncs.c:3549 +#, c-format +msgid "cannot call %s on an array" +msgstr "викликати %s з масивом, не можна" + +#: utils/adt/jsonfuncs.c:613 jsonpath_scan.l:498 +#, c-format +msgid "unsupported Unicode escape sequence" +msgstr "непідтримувана спеціальна послідовність Unicode" + +#: utils/adt/jsonfuncs.c:692 +#, c-format +msgid "JSON data, line %d: %s%s%s" +msgstr "Дані JSON, рядок %d: %s%s%s" + +#: utils/adt/jsonfuncs.c:1682 utils/adt/jsonfuncs.c:1717 +#, c-format +msgid "cannot get array length of a scalar" +msgstr "отримати довжину скаляра масиву не можна" + +#: utils/adt/jsonfuncs.c:1686 utils/adt/jsonfuncs.c:1705 +#, c-format +msgid "cannot get array length of a non-array" +msgstr "отримати довжину масива для не масиву не можна" + +#: utils/adt/jsonfuncs.c:1782 +#, c-format +msgid "cannot call %s on a non-object" +msgstr "викликати %s з не об'єктом, не можна" + +#: utils/adt/jsonfuncs.c:2021 +#, c-format +msgid "cannot deconstruct an array as an object" +msgstr "вилучити масив у вигляді об'єкту не можна" + +#: utils/adt/jsonfuncs.c:2033 +#, c-format +msgid "cannot deconstruct a scalar" +msgstr "вилучити скаляр не можна" + +#: utils/adt/jsonfuncs.c:2079 +#, c-format +msgid "cannot extract elements from a scalar" +msgstr "вилучити елементи зі скаляру не можна" + +#: utils/adt/jsonfuncs.c:2083 +#, c-format +msgid "cannot extract elements from an object" +msgstr "вилучити елементи з об'єкту не можна" + +#: utils/adt/jsonfuncs.c:2317 utils/adt/jsonfuncs.c:3775 +#, c-format +msgid "cannot call %s on a non-array" +msgstr "викликати %s з не масивом не можна" + +#: utils/adt/jsonfuncs.c:2387 utils/adt/jsonfuncs.c:2392 +#: utils/adt/jsonfuncs.c:2409 utils/adt/jsonfuncs.c:2415 +#, c-format +msgid "expected JSON array" +msgstr "очікувався масив JSON" + +#: utils/adt/jsonfuncs.c:2388 +#, c-format +msgid "See the value of key \"%s\"." +msgstr "Перевірте значення ключа \"%s\"." + +#: utils/adt/jsonfuncs.c:2410 +#, c-format +msgid "See the array element %s of key \"%s\"." +msgstr "Перевірте елемент масиву %s ключа \"%s\"." + +#: utils/adt/jsonfuncs.c:2416 +#, c-format +msgid "See the array element %s." +msgstr "Перевірте елемент масиву %s." + +#: utils/adt/jsonfuncs.c:2451 +#, c-format +msgid "malformed JSON array" +msgstr "неправильний масив JSON" + +#. translator: %s is a function name, eg json_to_record +#: utils/adt/jsonfuncs.c:3278 +#, c-format +msgid "first argument of %s must be a row type" +msgstr "першим аргументом %s повинен бути тип рядка" + +#. translator: %s is a function name, eg json_to_record +#: utils/adt/jsonfuncs.c:3302 +#, c-format +msgid "could not determine row type for result of %s" +msgstr "не вдалося визначити тип рядка для результату %s" + +#: utils/adt/jsonfuncs.c:3304 +#, c-format +msgid "Provide a non-null record argument, or call the function in the FROM clause using a column definition list." +msgstr "Надайте аргумент ненульового запису, або викличте функцію в реченні FROM, використовуючи список визначення стовпців." + +#: utils/adt/jsonfuncs.c:3792 utils/adt/jsonfuncs.c:3873 +#, c-format +msgid "argument of %s must be an array of objects" +msgstr "аргументом %s повинен бути масив об'єктів" + +#: utils/adt/jsonfuncs.c:3825 +#, c-format +msgid "cannot call %s on an object" +msgstr "викликати %s з об'єктом не можна" + +#: utils/adt/jsonfuncs.c:4286 utils/adt/jsonfuncs.c:4345 +#: utils/adt/jsonfuncs.c:4425 +#, c-format +msgid "cannot delete from scalar" +msgstr "видалити зі скаляру не можна" + +#: utils/adt/jsonfuncs.c:4430 +#, c-format +msgid "cannot delete from object using integer index" +msgstr "видалити з об'єкту по числовому індексу не можна" + +#: utils/adt/jsonfuncs.c:4495 utils/adt/jsonfuncs.c:4653 +#, c-format +msgid "cannot set path in scalar" +msgstr "встановити шлях в скалярі не можна" + +#: utils/adt/jsonfuncs.c:4537 utils/adt/jsonfuncs.c:4579 +#, c-format +msgid "null_value_treatment must be \"delete_key\", \"return_target\", \"use_json_null\", or \"raise_exception\"" +msgstr "null_value_treatment має бути \"delete_key\", \"return_target\", \"use_json_null\", або \"raise_exception\"" + +#: utils/adt/jsonfuncs.c:4550 +#, c-format +msgid "JSON value must not be null" +msgstr "Значення JSON не повинне бути null" + +#: utils/adt/jsonfuncs.c:4551 +#, c-format +msgid "Exception was raised because null_value_treatment is \"raise_exception\"." +msgstr "Виняток було запущено через те, що null_value_treatment дорівнює \"raise_exception\"." + +#: utils/adt/jsonfuncs.c:4552 +#, c-format +msgid "To avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not passed." +msgstr "Щоб уникнути, або змініть аргумент null_value_treatment або переконайтесь що SQL NULL не передано." + +#: utils/adt/jsonfuncs.c:4607 +#, c-format +msgid "cannot delete path in scalar" +msgstr "видалити шлях в скалярі не можна" + +#: utils/adt/jsonfuncs.c:4776 +#, c-format +msgid "invalid concatenation of jsonb objects" +msgstr "неприпустиме злиття об'єктів jsonb" + +#: utils/adt/jsonfuncs.c:4810 +#, c-format +msgid "path element at position %d is null" +msgstr "елемент шляху в позиції %d є null" + +#: utils/adt/jsonfuncs.c:4896 +#, c-format +msgid "cannot replace existing key" +msgstr "замініти існуючий ключ не можна" + +#: utils/adt/jsonfuncs.c:4897 +#, c-format +msgid "Try using the function jsonb_set to replace key value." +msgstr "Спробуйте, використати функцію jsonb_set, щоб замінити значення ключа." + +#: utils/adt/jsonfuncs.c:4979 +#, c-format +msgid "path element at position %d is not an integer: \"%s\"" +msgstr "елмент шляху в позиції %d не є цілим числом: \"%s\"" + +#: utils/adt/jsonfuncs.c:5098 +#, c-format +msgid "wrong flag type, only arrays and scalars are allowed" +msgstr "неправильний тип позначки, дозволені лише масиви і скаляри" + +#: utils/adt/jsonfuncs.c:5105 +#, c-format +msgid "flag array element is not a string" +msgstr "елемент масиву позначок не є рядком" + +#: utils/adt/jsonfuncs.c:5106 utils/adt/jsonfuncs.c:5128 +#, c-format +msgid "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all\"." +msgstr "Можливі значення: \"string\", \"numeric\", \"boolean\", \"key\", і \"all\"." + +#: utils/adt/jsonfuncs.c:5126 +#, c-format +msgid "wrong flag in flag array: \"%s\"" +msgstr "неправильна позначка в масиві позначок: \"%s\"" + +#: utils/adt/jsonpath.c:362 +#, c-format +msgid "@ is not allowed in root expressions" +msgstr "@ не дозволяється в кореневих виразах" + +#: utils/adt/jsonpath.c:368 +#, c-format +msgid "LAST is allowed only in array subscripts" +msgstr "LAST дозволяється лише в підрядкових символах масиву" + +#: utils/adt/jsonpath_exec.c:360 +#, c-format +msgid "single boolean result is expected" +msgstr "очікується один логічний результат" + +#: utils/adt/jsonpath_exec.c:556 +#, c-format +msgid "\"vars\" argument is not an object" +msgstr "аргумент \"vars\" не є об'єктом" + +#: utils/adt/jsonpath_exec.c:557 +#, c-format +msgid "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." +msgstr "Параметри Jsonpath повинні бути закодовані в якості пар \"ключ-значення\" об'єкту \"vars\"." + +#: utils/adt/jsonpath_exec.c:674 +#, c-format +msgid "JSON object does not contain key \"%s\"" +msgstr "Об'єкт JSON не містить ключа \"%s\"" + +#: utils/adt/jsonpath_exec.c:686 +#, c-format +msgid "jsonpath member accessor can only be applied to an object" +msgstr "доступ для елемента jsonpath може бути застосований лише до об'єкта" + +#: utils/adt/jsonpath_exec.c:715 +#, c-format +msgid "jsonpath wildcard array accessor can only be applied to an array" +msgstr "доступ до підстановочного масиву jsonpath може бути застосований лише до масиву" + +#: utils/adt/jsonpath_exec.c:763 +#, c-format +msgid "jsonpath array subscript is out of bounds" +msgstr "підрядковий символ масиву jsonpath поза межами" + +#: utils/adt/jsonpath_exec.c:820 +#, c-format +msgid "jsonpath array accessor can only be applied to an array" +msgstr "доступ до масиву jsonpath може бути застосований лише до масиву" + +#: utils/adt/jsonpath_exec.c:874 +#, c-format +msgid "jsonpath wildcard member accessor can only be applied to an object" +msgstr "доступ до підстановочного елемента jsonpath може бути застосований лише до об'єкта" + +#: utils/adt/jsonpath_exec.c:1004 +#, c-format +msgid "jsonpath item method .%s() can only be applied to an array" +msgstr "метод елемента jsonpath .%s() може бути застосований лише до масиву" + +#: utils/adt/jsonpath_exec.c:1059 +#, c-format +msgid "numeric argument of jsonpath item method .%s() is out of range for type double precision" +msgstr "числовий аргумент методу елемента jsonpath .%s() поза діапазоном для типу double precision" + +#: utils/adt/jsonpath_exec.c:1080 +#, c-format +msgid "string argument of jsonpath item method .%s() is not a valid representation of a double precision number" +msgstr "строковий аргумент методу елемента jsonpath .%s() не є представленням числа double precision" + +#: utils/adt/jsonpath_exec.c:1093 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a string or numeric value" +msgstr "метод елемента jsonpath .%s() може бути застосований лише до рядка або числового значення" + +#: utils/adt/jsonpath_exec.c:1583 +#, c-format +msgid "left operand of jsonpath operator %s is not a single numeric value" +msgstr "лівий операнд оператора jsonpath %s не є єдиним числовим значенням" + +#: utils/adt/jsonpath_exec.c:1590 +#, c-format +msgid "right operand of jsonpath operator %s is not a single numeric value" +msgstr "правий операнд оператора jsonpath %s не є єдиним числовим значенням" + +#: utils/adt/jsonpath_exec.c:1658 +#, c-format +msgid "operand of unary jsonpath operator %s is not a numeric value" +msgstr "операнд унарного оператора jsonpath %s не є єдиним числовим значенням" + +#: utils/adt/jsonpath_exec.c:1756 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a numeric value" +msgstr "метод елемента jsonpath .%s() може бути застосований лише до числового значення" + +#: utils/adt/jsonpath_exec.c:1796 +#, c-format +msgid "jsonpath item method .%s() can only be applied to a string" +msgstr "метод елемента jsonpath .%s() може бути застосований лише до рядку" + +#: utils/adt/jsonpath_exec.c:1884 +#, c-format +msgid "datetime format is not recognized: \"%s\"" +msgstr "формат дати й часу не розпізнано: \"%s\"" + +#: utils/adt/jsonpath_exec.c:1886 +#, c-format +msgid "Use a datetime template argument to specify the input data format." +msgstr "Використайте аргумент шаблону дати й часу щоб вказати формат вхідних даних." + +#: utils/adt/jsonpath_exec.c:1954 +#, c-format +msgid "jsonpath item method .%s() can only be applied to an object" +msgstr "метод елемента jsonpath .%s() може бути застосований лише до об'єкта" + +#: utils/adt/jsonpath_exec.c:2137 +#, c-format +msgid "could not find jsonpath variable \"%s\"" +msgstr "не вдалося знайти змінну jsonpath \"%s\"" + +#: utils/adt/jsonpath_exec.c:2401 +#, c-format +msgid "jsonpath array subscript is not a single numeric value" +msgstr "підрядковий символ масиву jsonpath не є єдиним числовим значенням" + +#: utils/adt/jsonpath_exec.c:2413 +#, c-format +msgid "jsonpath array subscript is out of integer range" +msgstr "підрядковий символ масиву jsonpath поза цілим діапазоном" + +#: utils/adt/jsonpath_exec.c:2590 +#, c-format +msgid "cannot convert value from %s to %s without time zone usage" +msgstr "не можна перетворити значення з %s в %s без використання часового поясу" + +#: utils/adt/jsonpath_exec.c:2592 +#, c-format +msgid "Use *_tz() function for time zone support." +msgstr "Використовуйте функцію *_tz() для підтримки часового поясу." + +#: utils/adt/levenshtein.c:133 +#, c-format +msgid "levenshtein argument exceeds maximum length of %d characters" +msgstr "довжина аргументу levenshtein перевищує максимальну довжину, %d символів" + +#: utils/adt/like.c:160 +#, c-format +msgid "nondeterministic collations are not supported for LIKE" +msgstr "недетерміновані параметри сортування не підтримуються для LIKE" + +#: utils/adt/like.c:193 utils/adt/like_support.c:1002 +#, c-format +msgid "could not determine which collation to use for ILIKE" +msgstr "не вдалося визначити який параметр сортування використати для ILIKE" + +#: utils/adt/like.c:201 +#, c-format +msgid "nondeterministic collations are not supported for ILIKE" +msgstr "недетерміновані параметри сортування не підтримуються для ILIKE" + +#: utils/adt/like_match.c:108 utils/adt/like_match.c:168 +#, c-format +msgid "LIKE pattern must not end with escape character" +msgstr "Шаблон LIKE не повинен закінчуватись символом виходу" + +#: utils/adt/like_match.c:293 utils/adt/regexp.c:700 +#, c-format +msgid "invalid escape string" +msgstr "неприпустимий рядок виходу" + +#: utils/adt/like_match.c:294 utils/adt/regexp.c:701 +#, c-format +msgid "Escape string must be empty or one character." +msgstr "Рядок виходу повинен бути пустим або складатися з одного символу." + +#: utils/adt/like_support.c:987 +#, c-format +msgid "case insensitive matching not supported on type bytea" +msgstr "порівняння без урахування регістру не підтримується для типу bytea" + +#: utils/adt/like_support.c:1089 +#, c-format +msgid "regular-expression matching not supported on type bytea" +msgstr "порівняння з регулярними виразами не підтримується для типу bytea" + +#: utils/adt/mac.c:102 +#, c-format +msgid "invalid octet value in \"macaddr\" value: \"%s\"" +msgstr "неприпустиме значення октету в значенні типу \"macaddr\": \"%s\"" + +#: utils/adt/mac8.c:563 +#, c-format +msgid "macaddr8 data out of range to convert to macaddr" +msgstr "дані macaddr8 поза діапазоном, для перетворення в macaddr" + +#: utils/adt/mac8.c:564 +#, c-format +msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." +msgstr "Лише адреси, які мають FF і FE в якості значень в четвертому і п'ятому байті зліва, наприклад xx:xx:xx:ff:fe:xx:xx:xx можуть бути перетворені з macaddr8 в macaddr." + +#: utils/adt/misc.c:240 +#, c-format +msgid "global tablespace never has databases" +msgstr "в табличному просторі global николи не було баз даних" + +#: utils/adt/misc.c:262 +#, c-format +msgid "%u is not a tablespace OID" +msgstr "%u не є OID табличного простору" + +#: utils/adt/misc.c:448 +msgid "unreserved" +msgstr "не зарезервовано" + +#: utils/adt/misc.c:452 +msgid "unreserved (cannot be function or type name)" +msgstr "не зарезервовано (не може бути іменем типу або функції)" + +#: utils/adt/misc.c:456 +msgid "reserved (can be function or type name)" +msgstr "зарезервовано (може бути іменем типу або функції)" + +#: utils/adt/misc.c:460 +msgid "reserved" +msgstr "зарезервовано" + +#: utils/adt/misc.c:634 utils/adt/misc.c:648 utils/adt/misc.c:687 +#: utils/adt/misc.c:693 utils/adt/misc.c:699 utils/adt/misc.c:722 +#, c-format +msgid "string is not a valid identifier: \"%s\"" +msgstr "рядок не є припустимим ідентифікатором: \"%s\"" + +#: utils/adt/misc.c:636 +#, c-format +msgid "String has unclosed double quotes." +msgstr "Рядок має не закриті лапки." + +#: utils/adt/misc.c:650 +#, c-format +msgid "Quoted identifier must not be empty." +msgstr "Ідентифікатор в лапках не повинен бути пустим." + +#: utils/adt/misc.c:689 +#, c-format +msgid "No valid identifier before \".\"." +msgstr "Перед \".\" немає припустимого ідентифікатору." + +#: utils/adt/misc.c:695 +#, c-format +msgid "No valid identifier after \".\"." +msgstr "Після \".\" немає припустимого ідентифікатора." + +#: utils/adt/misc.c:753 +#, c-format +msgid "log format \"%s\" is not supported" +msgstr "формат журналу \"%s\" не підтримується" + +#: utils/adt/misc.c:754 +#, c-format +msgid "The supported log formats are \"stderr\" and \"csvlog\"." +msgstr "Підтримуються формати журналів \"stderr\" і \"csvlog\"." + +#: utils/adt/network.c:111 +#, c-format +msgid "invalid cidr value: \"%s\"" +msgstr "неприпустиме значення cidr: \"%s\"" + +#: utils/adt/network.c:112 utils/adt/network.c:242 +#, c-format +msgid "Value has bits set to right of mask." +msgstr "Значення має встановленні біти правіше маски." + +#: utils/adt/network.c:153 utils/adt/network.c:1199 utils/adt/network.c:1224 +#: utils/adt/network.c:1249 +#, c-format +msgid "could not format inet value: %m" +msgstr "не вдалося форматувати значення inet: %m" + +#. translator: %s is inet or cidr +#: utils/adt/network.c:210 +#, c-format +msgid "invalid address family in external \"%s\" value" +msgstr "неприпустиме сімейство адресів у зовнішньому значенні \"%s\"" + +#. translator: %s is inet or cidr +#: utils/adt/network.c:217 +#, c-format +msgid "invalid bits in external \"%s\" value" +msgstr "неприпустимі біти в зовнішньому значенні \"%s\"" + +#. translator: %s is inet or cidr +#: utils/adt/network.c:226 +#, c-format +msgid "invalid length in external \"%s\" value" +msgstr "неприпустима довжина в зовнішньому значенні \"%s\"" + +#: utils/adt/network.c:241 +#, c-format +msgid "invalid external \"cidr\" value" +msgstr "неприпустиме зовнішнє значення \"cidr\"" + +#: utils/adt/network.c:337 utils/adt/network.c:360 +#, c-format +msgid "invalid mask length: %d" +msgstr "неприпустима довжина маски: %d" + +#: utils/adt/network.c:1267 +#, c-format +msgid "could not format cidr value: %m" +msgstr "не вдалося форматувати значення cidr: %m" + +#: utils/adt/network.c:1500 +#, c-format +msgid "cannot merge addresses from different families" +msgstr "об'єднати адреси з різних сімейств не можна" + +#: utils/adt/network.c:1916 +#, c-format +msgid "cannot AND inet values of different sizes" +msgstr "не можна використовувати \"І\" (AND) для значень inet різного розміру" + +#: utils/adt/network.c:1948 +#, c-format +msgid "cannot OR inet values of different sizes" +msgstr "не можна використовувати \"АБО\" (OR) для значень inet різного розміру" + +#: utils/adt/network.c:2009 utils/adt/network.c:2085 +#, c-format +msgid "result is out of range" +msgstr "результат поза діапазоном" + +#: utils/adt/network.c:2050 +#, c-format +msgid "cannot subtract inet values of different sizes" +msgstr "не можна віднімати значення inet різного розміру" + +#: utils/adt/numeric.c:827 +#, c-format +msgid "invalid sign in external \"numeric\" value" +msgstr "неприпустимий знак у зовнішньому значенні \"numeric\"" + +#: utils/adt/numeric.c:833 +#, c-format +msgid "invalid scale in external \"numeric\" value" +msgstr "неприпустимий масштаб у зовнішньому значенні \"numeric\"" + +#: utils/adt/numeric.c:842 +#, c-format +msgid "invalid digit in external \"numeric\" value" +msgstr "неприпустиме число у зовнішньому значенні \"numeric\"" + +#: utils/adt/numeric.c:1040 utils/adt/numeric.c:1054 +#, c-format +msgid "NUMERIC precision %d must be between 1 and %d" +msgstr "Точність NUMERIC %d повинна бути між 1 і %d" + +#: utils/adt/numeric.c:1045 +#, c-format +msgid "NUMERIC scale %d must be between 0 and precision %d" +msgstr "Масштаб NUMERIC %d повинен бути між 0 і точністю %d" + +#: utils/adt/numeric.c:1063 +#, c-format +msgid "invalid NUMERIC type modifier" +msgstr "неприпустимий модифікатор типу NUMERIC" + +#: utils/adt/numeric.c:1395 +#, c-format +msgid "start value cannot be NaN" +msgstr "початкове значення не може бути NaN" + +#: utils/adt/numeric.c:1400 +#, c-format +msgid "stop value cannot be NaN" +msgstr "кінцеве значення не може бути NaN" + +#: utils/adt/numeric.c:1410 +#, c-format +msgid "step size cannot be NaN" +msgstr "розмір кроку не може бути NaN" + +#: utils/adt/numeric.c:2958 utils/adt/numeric.c:6064 utils/adt/numeric.c:6522 +#: utils/adt/numeric.c:8802 utils/adt/numeric.c:9240 utils/adt/numeric.c:9354 +#: utils/adt/numeric.c:9427 +#, c-format +msgid "value overflows numeric format" +msgstr "значення переповнюють формат numeric" + +#: utils/adt/numeric.c:3417 +#, c-format +msgid "cannot convert NaN to integer" +msgstr "перетворити NaN в ціле число не можна" + +#: utils/adt/numeric.c:3500 +#, c-format +msgid "cannot convert NaN to bigint" +msgstr "перетворити NaN в велике ціле не можна" + +#: utils/adt/numeric.c:3545 +#, c-format +msgid "cannot convert NaN to smallint" +msgstr "перетворити NaN в двобайтове ціле не можна" + +#: utils/adt/numeric.c:3582 utils/adt/numeric.c:3653 +#, c-format +msgid "cannot convert infinity to numeric" +msgstr "перетворити безкінченість в число не можна" + +#: utils/adt/numeric.c:6606 +#, c-format +msgid "numeric field overflow" +msgstr "надлишок поля numeric" + +#: utils/adt/numeric.c:6607 +#, c-format +msgid "A field with precision %d, scale %d must round to an absolute value less than %s%d." +msgstr "Поле з точністю %d, масштабом %d повинне округлятись до абсолютного значення меньше, ніж %s%d." + +#: utils/adt/numutils.c:154 +#, c-format +msgid "value \"%s\" is out of range for 8-bit integer" +msgstr "значення \"%s\" поза діапазоном для 8-бітного integer" + +#: utils/adt/oid.c:290 +#, c-format +msgid "invalid oidvector data" +msgstr "неприпустимі дані oidvector" + +#: utils/adt/oracle_compat.c:896 +#, c-format +msgid "requested character too large" +msgstr "запитаний символ занадто великий" + +#: utils/adt/oracle_compat.c:946 utils/adt/oracle_compat.c:1008 +#, c-format +msgid "requested character too large for encoding: %d" +msgstr "запитаний символ занадто великий для кодування: %d" + +#: utils/adt/oracle_compat.c:987 +#, c-format +msgid "requested character not valid for encoding: %d" +msgstr "запитаний символ не припустимий для кодування: %d" + +#: utils/adt/oracle_compat.c:1001 +#, c-format +msgid "null character not permitted" +msgstr "символ не може бути null" + +#: utils/adt/orderedsetaggs.c:442 utils/adt/orderedsetaggs.c:546 +#: utils/adt/orderedsetaggs.c:684 +#, c-format +msgid "percentile value %g is not between 0 and 1" +msgstr "значення процентиля %g не є між 0 і 1" + +#: utils/adt/pg_locale.c:1262 +#, c-format +msgid "Apply system library package updates." +msgstr "Застосуйте оновлення для пакету з системною бібліотекою." + +#: utils/adt/pg_locale.c:1477 +#, c-format +msgid "could not create locale \"%s\": %m" +msgstr "не вдалося створити локалізацію \"%s\": %m" + +#: utils/adt/pg_locale.c:1480 +#, c-format +msgid "The operating system could not find any locale data for the locale name \"%s\"." +msgstr "Операційній системі не вдалося знайти дані локалізації з іменем \"%s\"." + +#: utils/adt/pg_locale.c:1582 +#, c-format +msgid "collations with different collate and ctype values are not supported on this platform" +msgstr "параметри сортування з різними значеннями collate і ctype не підтримуються на цій платформі" + +#: utils/adt/pg_locale.c:1591 +#, c-format +msgid "collation provider LIBC is not supported on this platform" +msgstr "провайдер параметрів сортування LIBC не підтримується на цій платформі" + +#: utils/adt/pg_locale.c:1603 +#, c-format +msgid "collations with different collate and ctype values are not supported by ICU" +msgstr "ICU не підтримує параметри сортування з різними значеннями collate і ctype" + +#: utils/adt/pg_locale.c:1609 utils/adt/pg_locale.c:1696 +#: utils/adt/pg_locale.c:1969 +#, c-format +msgid "could not open collator for locale \"%s\": %s" +msgstr "не вдалося відкрити сортувальник для локалізації \"%s\": %s" + +#: utils/adt/pg_locale.c:1623 +#, c-format +msgid "ICU is not supported in this build" +msgstr "ICU не підтримується в цій збірці" + +#: utils/adt/pg_locale.c:1624 +#, c-format +msgid "You need to rebuild PostgreSQL using --with-icu." +msgstr "Необхідно перебудувати PostgreSQL з ключем --with-icu." + +#: utils/adt/pg_locale.c:1644 +#, c-format +msgid "collation \"%s\" has no actual version, but a version was specified" +msgstr "для параметру сортування \"%s\" який не має фактичної версії, була вказана версія" + +#: utils/adt/pg_locale.c:1651 +#, c-format +msgid "collation \"%s\" has version mismatch" +msgstr "невідповідність версій для параметру сортування \"%s\"" + +#: utils/adt/pg_locale.c:1653 +#, c-format +msgid "The collation in the database was created using version %s, but the operating system provides version %s." +msgstr "Параметр сортування в базі даних був створений з версією %s, але операційна система надає версію %s." + +#: utils/adt/pg_locale.c:1656 +#, c-format +msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." +msgstr "Перебудуйте всі об'єкти, які стосуються цього параметру сортування і виконайте ALTER COLLATION %s REFRESH VERSION, або побудуйте PostgreSQL з правильною версією бібліотеки." + +#: utils/adt/pg_locale.c:1747 +#, c-format +msgid "could not get collation version for locale \"%s\": error code %lu" +msgstr "не вдалося отримати версію параметрів сортування для локалізації \"%s\": код помилки %lu" + +#: utils/adt/pg_locale.c:1784 +#, c-format +msgid "encoding \"%s\" not supported by ICU" +msgstr "ICU не підтримує кодування \"%s\"" + +#: utils/adt/pg_locale.c:1791 +#, c-format +msgid "could not open ICU converter for encoding \"%s\": %s" +msgstr "не вдалося відкрити перетворювач ICU для кодування \"%s\": %s" + +#: utils/adt/pg_locale.c:1822 utils/adt/pg_locale.c:1831 +#: utils/adt/pg_locale.c:1860 utils/adt/pg_locale.c:1870 +#, c-format +msgid "%s failed: %s" +msgstr "%s помилка: %s" + +#: utils/adt/pg_locale.c:2142 +#, c-format +msgid "invalid multibyte character for locale" +msgstr "неприпустимий мультибайтний символ для локалізації" + +#: utils/adt/pg_locale.c:2143 +#, c-format +msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." +msgstr "Параметр локалізації серверу LC_CTYPE, можливо, несумісний з кодуванням бази даних." + +#: utils/adt/pg_upgrade_support.c:29 +#, c-format +msgid "function can only be called when server is in binary upgrade mode" +msgstr "функцію можна викликати тільки коли сервер знаходиться в режимі двійкового оновлення" + +#: utils/adt/pgstatfuncs.c:500 +#, c-format +msgid "invalid command name: \"%s\"" +msgstr "неприпустиме ім’я команди: \"%s\"" + +#: utils/adt/pseudotypes.c:57 utils/adt/pseudotypes.c:91 +#, c-format +msgid "cannot display a value of type %s" +msgstr "значення типу %s не можна відобразити" + +#: utils/adt/pseudotypes.c:283 +#, c-format +msgid "cannot accept a value of a shell type" +msgstr "не можна прийняти значення типу shell" + +#: utils/adt/pseudotypes.c:293 +#, c-format +msgid "cannot display a value of a shell type" +msgstr "не можна відобразити значення типу shell" + +#: utils/adt/rangetypes.c:406 +#, c-format +msgid "range constructor flags argument must not be null" +msgstr "аргумент позначок конструктору діапазону не може бути null" + +#: utils/adt/rangetypes.c:993 +#, c-format +msgid "result of range difference would not be contiguous" +msgstr "результат різниці діапазонів не буде безперервним" + +#: utils/adt/rangetypes.c:1054 +#, c-format +msgid "result of range union would not be contiguous" +msgstr "результат об'єднання діапазонів не буде безперервним" + +#: utils/adt/rangetypes.c:1600 +#, c-format +msgid "range lower bound must be less than or equal to range upper bound" +msgstr "нижня границя діапазону повинна бути менше або дорівнювати верхній границі діапазону" + +#: utils/adt/rangetypes.c:1983 utils/adt/rangetypes.c:1996 +#: utils/adt/rangetypes.c:2010 +#, c-format +msgid "invalid range bound flags" +msgstr "неприпустимі позначки границь діапазону" + +#: utils/adt/rangetypes.c:1984 utils/adt/rangetypes.c:1997 +#: utils/adt/rangetypes.c:2011 +#, c-format +msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." +msgstr "Припустимі значення \"[]\", \"[)\", \"(]\", і \"()\"." + +#: utils/adt/rangetypes.c:2076 utils/adt/rangetypes.c:2093 +#: utils/adt/rangetypes.c:2106 utils/adt/rangetypes.c:2124 +#: utils/adt/rangetypes.c:2135 utils/adt/rangetypes.c:2179 +#: utils/adt/rangetypes.c:2187 +#, c-format +msgid "malformed range literal: \"%s\"" +msgstr "неправильний літерал діапазону: \"%s\"" + +#: utils/adt/rangetypes.c:2078 +#, c-format +msgid "Junk after \"empty\" key word." +msgstr "Сміття після ключового слова \"empty\"." + +#: utils/adt/rangetypes.c:2095 +#, c-format +msgid "Missing left parenthesis or bracket." +msgstr "Пропущено ліву дужку (круглу або квадратну)." + +#: utils/adt/rangetypes.c:2108 +#, c-format +msgid "Missing comma after lower bound." +msgstr "Пропущено кому після нижньої границі." + +#: utils/adt/rangetypes.c:2126 +#, c-format +msgid "Too many commas." +msgstr "Занадто багато ком." + +#: utils/adt/rangetypes.c:2137 +#, c-format +msgid "Junk after right parenthesis or bracket." +msgstr "Сміття після правої дужки." + +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4493 +#, c-format +msgid "regular expression failed: %s" +msgstr "помилка в регулярному виразі: %s" + +#: utils/adt/regexp.c:426 +#, c-format +msgid "invalid regular expression option: \"%c\"" +msgstr "неприпустимий параметр регулярного виразу: \"%c\"" + +#: utils/adt/regexp.c:836 +#, c-format +msgid "SQL regular expression may not contain more than two escape-double-quote separators" +msgstr "Регулярний вираз SQL не може містити більше двох роздільників escape-double-quote" + +#. translator: %s is a SQL function name +#: utils/adt/regexp.c:981 utils/adt/regexp.c:1363 utils/adt/regexp.c:1418 +#, c-format +msgid "%s does not support the \"global\" option" +msgstr "%s не підтримує параметр \"global\"" + +#: utils/adt/regexp.c:983 +#, c-format +msgid "Use the regexp_matches function instead." +msgstr "Використайте функцію regexp_matches замість." + +#: utils/adt/regexp.c:1165 +#, c-format +msgid "too many regular expression matches" +msgstr "занадто багато відповідностей для регулярного виразу" + +#: utils/adt/regproc.c:107 +#, c-format +msgid "more than one function named \"%s\"" +msgstr "ім'я \"%s\" мають декілька функцій" + +#: utils/adt/regproc.c:525 +#, c-format +msgid "more than one operator named %s" +msgstr "ім'я %s мають декілька операторів" + +#: utils/adt/regproc.c:692 utils/adt/regproc.c:733 gram.y:8223 +#, c-format +msgid "missing argument" +msgstr "пропущено аргумент" + +#: utils/adt/regproc.c:693 utils/adt/regproc.c:734 gram.y:8224 +#, c-format +msgid "Use NONE to denote the missing argument of a unary operator." +msgstr "Щоб позначити пропущений аргумент унарного оператору, використайте NONE." + +#: utils/adt/regproc.c:697 utils/adt/regproc.c:738 utils/adt/regproc.c:2018 +#: utils/adt/ruleutils.c:9299 utils/adt/ruleutils.c:9468 +#, c-format +msgid "too many arguments" +msgstr "занадто багато аргументів" + +#: utils/adt/regproc.c:698 utils/adt/regproc.c:739 +#, c-format +msgid "Provide two argument types for operator." +msgstr "Надайте для оператора два типи аргументів." + +#: utils/adt/regproc.c:1602 utils/adt/regproc.c:1626 utils/adt/regproc.c:1727 +#: utils/adt/regproc.c:1751 utils/adt/regproc.c:1853 utils/adt/regproc.c:1858 +#: utils/adt/varlena.c:3642 utils/adt/varlena.c:3647 +#, c-format +msgid "invalid name syntax" +msgstr "неприпустимий синтаксис в імені" + +#: utils/adt/regproc.c:1916 +#, c-format +msgid "expected a left parenthesis" +msgstr "очікувалась ліва дужка" + +#: utils/adt/regproc.c:1932 +#, c-format +msgid "expected a right parenthesis" +msgstr "очікувалась права дужка" + +#: utils/adt/regproc.c:1951 +#, c-format +msgid "expected a type name" +msgstr "очікувалось ім'я типу" + +#: utils/adt/regproc.c:1983 +#, c-format +msgid "improper type name" +msgstr "неправильне ім'я типу" + +#: utils/adt/ri_triggers.c:296 utils/adt/ri_triggers.c:1537 +#: utils/adt/ri_triggers.c:2470 +#, c-format +msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" +msgstr "insert або update в таблиці \"%s\" порушує обмеження зовнішнього ключа \"%s\"" + +#: utils/adt/ri_triggers.c:299 utils/adt/ri_triggers.c:1540 +#, c-format +msgid "MATCH FULL does not allow mixing of null and nonnull key values." +msgstr "MATCH FULL не дозволяє змішувати в значенні ключа null і nonnull." + +#: utils/adt/ri_triggers.c:1940 +#, c-format +msgid "function \"%s\" must be fired for INSERT" +msgstr "функція \"%s\" повинна запускатись для INSERT" + +#: utils/adt/ri_triggers.c:1946 +#, c-format +msgid "function \"%s\" must be fired for UPDATE" +msgstr "функція \"%s\" повинна запускатись для UPDATE" + +#: utils/adt/ri_triggers.c:1952 +#, c-format +msgid "function \"%s\" must be fired for DELETE" +msgstr "функція \"%s\" повинна запускатись для DELETE" + +#: utils/adt/ri_triggers.c:1975 +#, c-format +msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" +msgstr "для тригеру \"%s\" таблиці \"%s\" немає введення pg_constraint" + +#: utils/adt/ri_triggers.c:1977 +#, c-format +msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." +msgstr "Видаліть цей тригер цілісності зв’язків і пов'язані об'єкти, а потім виконайте ALTER TABLE ADD CONSTRAINT." + +#: utils/adt/ri_triggers.c:2007 gram.y:3818 +#, c-format +msgid "MATCH PARTIAL not yet implemented" +msgstr "Вираз MATCH PARTIAL все ще не реалізований" + +#: utils/adt/ri_triggers.c:2295 +#, c-format +msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" +msgstr "неочікуваний результат запиту цілісності зв’язків до \"%s\" з обмеження \"%s\" таблиці \"%s\"" + +#: utils/adt/ri_triggers.c:2299 +#, c-format +msgid "This is most likely due to a rule having rewritten the query." +msgstr "Скоріше за все, це викликано правилом, яке переписало запит." + +#: utils/adt/ri_triggers.c:2460 +#, c-format +msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" +msgstr "видалення секції \"%s\" порушує обмеження зовнішнього ключа \"%s" + +#: utils/adt/ri_triggers.c:2463 utils/adt/ri_triggers.c:2488 +#, c-format +msgid "Key (%s)=(%s) is still referenced from table \"%s\"." +msgstr "На ключ (%s)=(%s) все ще є посилання в таблиці \"%s\"." + +#: utils/adt/ri_triggers.c:2474 +#, c-format +msgid "Key (%s)=(%s) is not present in table \"%s\"." +msgstr "Ключ (%s)=(%s) не присутній в таблиці \"%s\"." + +#: utils/adt/ri_triggers.c:2477 +#, c-format +msgid "Key is not present in table \"%s\"." +msgstr "Ключ не присутній в таблиці \"%s\"." + +#: utils/adt/ri_triggers.c:2483 +#, c-format +msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" +msgstr "update або delete в таблиці \"%s\" порушує обмеження зовнішнього ключа \"%s\" таблиці \"%s\"" + +#: utils/adt/ri_triggers.c:2491 +#, c-format +msgid "Key is still referenced from table \"%s\"." +msgstr "На ключ все ще є посилання в таблиці \"%s\"." + +#: utils/adt/rowtypes.c:104 utils/adt/rowtypes.c:482 +#, c-format +msgid "input of anonymous composite types is not implemented" +msgstr "введення анонімних складених типів не реалізовано" + +#: utils/adt/rowtypes.c:156 utils/adt/rowtypes.c:185 utils/adt/rowtypes.c:208 +#: utils/adt/rowtypes.c:216 utils/adt/rowtypes.c:268 utils/adt/rowtypes.c:276 +#, c-format +msgid "malformed record literal: \"%s\"" +msgstr "невірно сформований літерал запису: \"%s\"" + +#: utils/adt/rowtypes.c:157 +#, c-format +msgid "Missing left parenthesis." +msgstr "Відсутня ліва дужка." + +#: utils/adt/rowtypes.c:186 +#, c-format +msgid "Too few columns." +msgstr "Занадто мало стовпців." + +#: utils/adt/rowtypes.c:269 +#, c-format +msgid "Too many columns." +msgstr "Занадто багато стовпців." + +#: utils/adt/rowtypes.c:277 +#, c-format +msgid "Junk after right parenthesis." +msgstr "Сміття післа правої дужки." + +#: utils/adt/rowtypes.c:531 +#, c-format +msgid "wrong number of columns: %d, expected %d" +msgstr "неправильна кількість стовпців: %d, очікувалось %d" + +#: utils/adt/rowtypes.c:559 +#, c-format +msgid "wrong data type: %u, expected %u" +msgstr "неправильний тип даних: %u, очікувався %u" + +#: utils/adt/rowtypes.c:620 +#, c-format +msgid "improper binary format in record column %d" +msgstr "неправильний двійковий формат у стовпці запису %d" + +#: utils/adt/rowtypes.c:911 utils/adt/rowtypes.c:1157 utils/adt/rowtypes.c:1415 +#: utils/adt/rowtypes.c:1661 +#, c-format +msgid "cannot compare dissimilar column types %s and %s at record column %d" +msgstr "не можна порівнювати неподібні типи стовпців %s і %s, стовпець запису %d" + +#: utils/adt/rowtypes.c:1002 utils/adt/rowtypes.c:1227 +#: utils/adt/rowtypes.c:1512 utils/adt/rowtypes.c:1697 +#, c-format +msgid "cannot compare record types with different numbers of columns" +msgstr "не можна порівнювати типи записів з різної кількістю стовпців" + +#: utils/adt/ruleutils.c:4821 +#, c-format +msgid "rule \"%s\" has unsupported event type %d" +msgstr "правило \"%s\" має непідтримуваний тип подій %d" + +#: utils/adt/timestamp.c:107 +#, c-format +msgid "TIMESTAMP(%d)%s precision must not be negative" +msgstr "TIMESTAMP(%d)%s точність не повинна бути від'ємною" + +#: utils/adt/timestamp.c:113 +#, c-format +msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" +msgstr "TIMESTAMP(%d)%s точність зменшена до дозволеного максимуму, %d" + +#: utils/adt/timestamp.c:176 utils/adt/timestamp.c:434 utils/misc/guc.c:11901 +#, c-format +msgid "timestamp out of range: \"%s\"" +msgstr "позначка часу поза діапазоном: \"%s\"" + +#: utils/adt/timestamp.c:372 +#, c-format +msgid "timestamp(%d) precision must be between %d and %d" +msgstr "точність позначки часу (%d) повинна бути між %d і %d" + +#: utils/adt/timestamp.c:496 +#, c-format +msgid "Numeric time zones must have \"-\" or \"+\" as first character." +msgstr "Числові часові пояси повинні мати \"-\" або \"+\" в якості першого символу." + +#: utils/adt/timestamp.c:509 +#, c-format +msgid "numeric time zone \"%s\" out of range" +msgstr "числовий часовий пояс \"%s\" поза діапазоном" + +#: utils/adt/timestamp.c:601 utils/adt/timestamp.c:611 +#: utils/adt/timestamp.c:619 +#, c-format +msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" +msgstr "позначка часу поза діапазоном: %d-%02d-%02d %d:%02d:%02g" + +#: utils/adt/timestamp.c:720 +#, c-format +msgid "timestamp cannot be NaN" +msgstr "позначка часу не може бути NaN" + +#: utils/adt/timestamp.c:738 utils/adt/timestamp.c:750 +#, c-format +msgid "timestamp out of range: \"%g\"" +msgstr "позначка часу поза діапазоном: \"%g\"" + +#: utils/adt/timestamp.c:935 utils/adt/timestamp.c:1509 +#: utils/adt/timestamp.c:1944 utils/adt/timestamp.c:3042 +#: utils/adt/timestamp.c:3047 utils/adt/timestamp.c:3052 +#: utils/adt/timestamp.c:3102 utils/adt/timestamp.c:3109 +#: utils/adt/timestamp.c:3116 utils/adt/timestamp.c:3136 +#: utils/adt/timestamp.c:3143 utils/adt/timestamp.c:3150 +#: utils/adt/timestamp.c:3180 utils/adt/timestamp.c:3188 +#: utils/adt/timestamp.c:3232 utils/adt/timestamp.c:3659 +#: utils/adt/timestamp.c:3784 utils/adt/timestamp.c:4244 +#, c-format +msgid "interval out of range" +msgstr "інтервал поза діапазоном" + +#: utils/adt/timestamp.c:1062 utils/adt/timestamp.c:1095 +#, c-format +msgid "invalid INTERVAL type modifier" +msgstr "неприпустимий модифікатор типу INTERVAL" + +#: utils/adt/timestamp.c:1078 +#, c-format +msgid "INTERVAL(%d) precision must not be negative" +msgstr "INTERVAL(%d) точність не повинна бути від'ємною" + +#: utils/adt/timestamp.c:1084 +#, c-format +msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" +msgstr "INTERVAL(%d) точність зменшена до максимально можливої, %d" + +#: utils/adt/timestamp.c:1466 +#, c-format +msgid "interval(%d) precision must be between %d and %d" +msgstr "interval(%d) точність повинна бути між %d і %d" + +#: utils/adt/timestamp.c:2643 +#, c-format +msgid "cannot subtract infinite timestamps" +msgstr "віднімати безкінечні позначки часу не можна" + +#: utils/adt/timestamp.c:3912 utils/adt/timestamp.c:4505 +#: utils/adt/timestamp.c:4667 utils/adt/timestamp.c:4688 +#, c-format +msgid "timestamp units \"%s\" not supported" +msgstr "одиниці позначки часу \"%s\" не підтримуються" + +#: utils/adt/timestamp.c:3926 utils/adt/timestamp.c:4459 +#: utils/adt/timestamp.c:4698 +#, c-format +msgid "timestamp units \"%s\" not recognized" +msgstr "одиниці позначки часу \"%s\" не розпізнані" + +#: utils/adt/timestamp.c:4056 utils/adt/timestamp.c:4500 +#: utils/adt/timestamp.c:4863 utils/adt/timestamp.c:4885 +#, c-format +msgid "timestamp with time zone units \"%s\" not supported" +msgstr "одиниці позначки часу з часовим поясом \"%s\" не підтримуються" + +#: utils/adt/timestamp.c:4073 utils/adt/timestamp.c:4454 +#: utils/adt/timestamp.c:4894 +#, c-format +msgid "timestamp with time zone units \"%s\" not recognized" +msgstr "одиниці позначки часу з часовим поясом \"%s\" не розпізнані" + +#: utils/adt/timestamp.c:4231 +#, c-format +msgid "interval units \"%s\" not supported because months usually have fractional weeks" +msgstr "одиниці інтервалу \"%s\" не підтримуються, тому, що місяці зазвичай мають дробове число тижнів" + +#: utils/adt/timestamp.c:4237 utils/adt/timestamp.c:4988 +#, c-format +msgid "interval units \"%s\" not supported" +msgstr "одиниці інтервалу \"%s\" не підтримуються" + +#: utils/adt/timestamp.c:4253 utils/adt/timestamp.c:5011 +#, c-format +msgid "interval units \"%s\" not recognized" +msgstr "одиниці інтервалу \"%s\" не розпізнані" + +#: utils/adt/trigfuncs.c:42 +#, c-format +msgid "suppress_redundant_updates_trigger: must be called as trigger" +msgstr "suppress_redundant_updates_trigger: повинна викликатись як тригер" + +#: utils/adt/trigfuncs.c:48 +#, c-format +msgid "suppress_redundant_updates_trigger: must be called on update" +msgstr "suppress_redundant_updates_trigger: повинна викликатись при оновленні" + +#: utils/adt/trigfuncs.c:54 +#, c-format +msgid "suppress_redundant_updates_trigger: must be called before update" +msgstr "suppress_redundant_updates_trigger: повинна викликатись перед оновленням" + +#: utils/adt/trigfuncs.c:60 +#, c-format +msgid "suppress_redundant_updates_trigger: must be called for each row" +msgstr "suppress_redundant_updates_trigger: повинна викликатис перед кожним рядком" + +#: utils/adt/tsgistidx.c:92 +#, c-format +msgid "gtsvector_in not implemented" +msgstr "функція gtsvector_in не реалізована" + +#: utils/adt/tsquery.c:200 +#, c-format +msgid "distance in phrase operator should not be greater than %d" +msgstr "дистанція у фразовому операторі повинна бути не більше %d" + +#: utils/adt/tsquery.c:310 utils/adt/tsquery.c:725 +#: utils/adt/tsvector_parser.c:133 +#, c-format +msgid "syntax error in tsquery: \"%s\"" +msgstr "синтаксична помилка в tsquery: \"%s\"" + +#: utils/adt/tsquery.c:334 +#, c-format +msgid "no operand in tsquery: \"%s\"" +msgstr "немає оператора в tsquery: \"%s\"" + +#: utils/adt/tsquery.c:568 +#, c-format +msgid "value is too big in tsquery: \"%s\"" +msgstr "занадто велике значення в tsquery: \"%s\"" + +#: utils/adt/tsquery.c:573 +#, c-format +msgid "operand is too long in tsquery: \"%s\"" +msgstr "занадто довгий операнд в tsquery: \"%s\"" + +#: utils/adt/tsquery.c:601 +#, c-format +msgid "word is too long in tsquery: \"%s\"" +msgstr "занадто довге слово в tsquery: \"%s\"" + +#: utils/adt/tsquery.c:870 +#, c-format +msgid "text-search query doesn't contain lexemes: \"%s\"" +msgstr "запит пошуку тексту не містить лексем: \"%s\"" + +#: utils/adt/tsquery.c:881 utils/adt/tsquery_util.c:375 +#, c-format +msgid "tsquery is too large" +msgstr "tsquery занадто великий" + +#: utils/adt/tsquery_cleanup.c:407 +#, c-format +msgid "text-search query contains only stop words or doesn't contain lexemes, ignored" +msgstr "запит пошуку тексту ігнорується, тому, що містить лише стоп-слова або не містить лексем" + +#: utils/adt/tsquery_op.c:124 +#, c-format +msgid "distance in phrase operator should be non-negative and less than %d" +msgstr "дистанція у фразовому операторі повинна бути невід'ємною і менше %d" + +#: utils/adt/tsquery_rewrite.c:321 +#, c-format +msgid "ts_rewrite query must return two tsquery columns" +msgstr "запит ts_rewrite повинен повернути два стовпця типу tsquery" + +#: utils/adt/tsrank.c:412 +#, c-format +msgid "array of weight must be one-dimensional" +msgstr "масив значимості повинен бути одновимірним" + +#: utils/adt/tsrank.c:417 +#, c-format +msgid "array of weight is too short" +msgstr "масив значимості занадто малий" + +#: utils/adt/tsrank.c:422 +#, c-format +msgid "array of weight must not contain nulls" +msgstr "масив значимості не повинен містити null" + +#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:872 +#, c-format +msgid "weight out of range" +msgstr "значимість поза діапазоном" + +#: utils/adt/tsvector.c:215 +#, c-format +msgid "word is too long (%ld bytes, max %ld bytes)" +msgstr "слово занадто довге (%ld байт, при максимумі %ld)" + +#: utils/adt/tsvector.c:222 +#, c-format +msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" +msgstr "рядок занадто довгий для tsvector (%ld байт, при максимумі %ld)" + +#: utils/adt/tsvector_op.c:328 utils/adt/tsvector_op.c:608 +#: utils/adt/tsvector_op.c:770 +#, c-format +msgid "lexeme array may not contain nulls" +msgstr "масив лексем не може містити null" + +#: utils/adt/tsvector_op.c:840 +#, c-format +msgid "weight array may not contain nulls" +msgstr "масив значимості не може містити null" + +#: utils/adt/tsvector_op.c:864 +#, c-format +msgid "unrecognized weight: \"%c\"" +msgstr "нерозпізнана значимість: \"%c\"" + +#: utils/adt/tsvector_op.c:2414 +#, c-format +msgid "ts_stat query must return one tsvector column" +msgstr "запит ts_stat повинен повернути один стовпець tsvector" + +#: utils/adt/tsvector_op.c:2603 +#, c-format +msgid "tsvector column \"%s\" does not exist" +msgstr "стовпець типу tsvector \"%s\" не існує" + +#: utils/adt/tsvector_op.c:2610 +#, c-format +msgid "column \"%s\" is not of tsvector type" +msgstr "стовпець \"%s\" повинен мати тип tsvector" + +#: utils/adt/tsvector_op.c:2622 +#, c-format +msgid "configuration column \"%s\" does not exist" +msgstr "стовпець конфігурації \"%s\" не існує" + +#: utils/adt/tsvector_op.c:2628 +#, c-format +msgid "column \"%s\" is not of regconfig type" +msgstr "стовпець \"%s\" повинен мати тип regconfig" + +#: utils/adt/tsvector_op.c:2635 +#, c-format +msgid "configuration column \"%s\" must not be null" +msgstr "значення стовпця конфігурації \"%s\" не повинне бути null" + +#: utils/adt/tsvector_op.c:2648 +#, c-format +msgid "text search configuration name \"%s\" must be schema-qualified" +msgstr "ім'я конфігурації текстового пошуку \"%s\" повинно вказуватися зі схемою" + +#: utils/adt/tsvector_op.c:2673 +#, c-format +msgid "column \"%s\" is not of a character type" +msgstr "стовпець \"%s\" має не символьний тип" + +#: utils/adt/tsvector_parser.c:134 +#, c-format +msgid "syntax error in tsvector: \"%s\"" +msgstr "синтаксична помилка в tsvector: \"%s\"" + +#: utils/adt/tsvector_parser.c:200 +#, c-format +msgid "there is no escaped character: \"%s\"" +msgstr "немає пропущеного символу: \"%s\"" + +#: utils/adt/tsvector_parser.c:318 +#, c-format +msgid "wrong position info in tsvector: \"%s\"" +msgstr "неправильна інформація про позицію в tsvector: \"%s\"" + +#: utils/adt/uuid.c:428 +#, c-format +msgid "could not generate random values" +msgstr "не вдалося згенерувати випадкові значення" + +#: utils/adt/varbit.c:109 utils/adt/varchar.c:53 +#, c-format +msgid "length for type %s must be at least 1" +msgstr "довжина для типу %s повинна бути мінімум 1" + +#: utils/adt/varbit.c:114 utils/adt/varchar.c:57 +#, c-format +msgid "length for type %s cannot exceed %d" +msgstr "довжина для типу %s не може перевищувати %d" + +#: utils/adt/varbit.c:197 utils/adt/varbit.c:498 utils/adt/varbit.c:993 +#, c-format +msgid "bit string length exceeds the maximum allowed (%d)" +msgstr "довжина бітового рядка перевищує максимально допустиму (%d)" + +#: utils/adt/varbit.c:211 utils/adt/varbit.c:355 utils/adt/varbit.c:405 +#, c-format +msgid "bit string length %d does not match type bit(%d)" +msgstr "довжина бітового рядка %d не відповідає типу bit(%d)" + +#: utils/adt/varbit.c:233 utils/adt/varbit.c:534 +#, c-format +msgid "\"%c\" is not a valid binary digit" +msgstr "\"%c\" не є припустимою двійковою цифрою" + +#: utils/adt/varbit.c:258 utils/adt/varbit.c:559 +#, c-format +msgid "\"%c\" is not a valid hexadecimal digit" +msgstr "\"%c\" не є припустимою шістнадцятковою цифрою" + +#: utils/adt/varbit.c:346 utils/adt/varbit.c:651 +#, c-format +msgid "invalid length in external bit string" +msgstr "неприпустима довжина у зовнішньому рядку бітів" + +#: utils/adt/varbit.c:512 utils/adt/varbit.c:660 utils/adt/varbit.c:756 +#, c-format +msgid "bit string too long for type bit varying(%d)" +msgstr "рядок бітів занадто довгий для типу bit varying(%d)" + +#: utils/adt/varbit.c:1086 utils/adt/varbit.c:1184 utils/adt/varlena.c:875 +#: utils/adt/varlena.c:939 utils/adt/varlena.c:1083 utils/adt/varlena.c:3306 +#: utils/adt/varlena.c:3373 +#, c-format +msgid "negative substring length not allowed" +msgstr "від'ємна довжина підрядка не дозволена" + +#: utils/adt/varbit.c:1241 +#, c-format +msgid "cannot AND bit strings of different sizes" +msgstr "не можна використовувати \"І\" (AND) для бітових рядків різного розміру" + +#: utils/adt/varbit.c:1282 +#, c-format +msgid "cannot OR bit strings of different sizes" +msgstr "не можна використовувати \"АБО\" (OR) для бітових рядків різного розміру" + +#: utils/adt/varbit.c:1322 +#, c-format +msgid "cannot XOR bit strings of different sizes" +msgstr "не можна використовувати (XOR) для бітових рядків різного розміру" + +#: utils/adt/varbit.c:1804 utils/adt/varbit.c:1862 +#, c-format +msgid "bit index %d out of valid range (0..%d)" +msgstr "індекс біту %d поза припустимим діапазоном (0..%d)" + +#: utils/adt/varbit.c:1813 utils/adt/varlena.c:3566 +#, c-format +msgid "new bit must be 0 or 1" +msgstr "новий біт повинен бути 0 або 1" + +#: utils/adt/varchar.c:157 utils/adt/varchar.c:310 +#, c-format +msgid "value too long for type character(%d)" +msgstr "значення занадто довге для типу character(%d)" + +#: utils/adt/varchar.c:472 utils/adt/varchar.c:634 +#, c-format +msgid "value too long for type character varying(%d)" +msgstr "значення занадто довге для типу character varying(%d)" + +#: utils/adt/varchar.c:732 utils/adt/varlena.c:1475 +#, c-format +msgid "could not determine which collation to use for string comparison" +msgstr "не вдалося визначити, який параметр сортування використати для порівняння рядків" + +#: utils/adt/varlena.c:1182 utils/adt/varlena.c:1915 +#, c-format +msgid "nondeterministic collations are not supported for substring searches" +msgstr "недетерміновані параметри сортування не підтримуються для пошуку підрядків" + +#: utils/adt/varlena.c:1574 utils/adt/varlena.c:1587 +#, c-format +msgid "could not convert string to UTF-16: error code %lu" +msgstr "не вдалося перетворити рядок в UTF-16: код помилки %lu" + +#: utils/adt/varlena.c:1602 +#, c-format +msgid "could not compare Unicode strings: %m" +msgstr "не вдалося порівняти рядки в Unicode: %m" + +#: utils/adt/varlena.c:1653 utils/adt/varlena.c:2367 +#, c-format +msgid "collation failed: %s" +msgstr "помилка в бібліотеці сортування: %s" + +#: utils/adt/varlena.c:2575 +#, c-format +msgid "sort key generation failed: %s" +msgstr "не вдалося згенерувати ключ сортування: %s" + +#: utils/adt/varlena.c:3450 utils/adt/varlena.c:3517 +#, c-format +msgid "index %d out of valid range, 0..%d" +msgstr "індекс %d поза припустимим діапазоном, 0..%d" + +#: utils/adt/varlena.c:3481 utils/adt/varlena.c:3553 +#, c-format +msgid "index %lld out of valid range, 0..%lld" +msgstr "індекс %lld поза допустимим діапазоном, 0..%lld" + +#: utils/adt/varlena.c:4590 +#, c-format +msgid "field position must be greater than zero" +msgstr "позиція поля повинна бути більше нуля" + +#: utils/adt/varlena.c:5456 +#, c-format +msgid "unterminated format() type specifier" +msgstr "незавершений специфікатор типу format()" + +#: utils/adt/varlena.c:5457 utils/adt/varlena.c:5591 utils/adt/varlena.c:5712 +#, c-format +msgid "For a single \"%%\" use \"%%%%\"." +msgstr "Для представлення одного знаку \"%%\", використайте \"%%%%\"." + +#: utils/adt/varlena.c:5589 utils/adt/varlena.c:5710 +#, c-format +msgid "unrecognized format() type specifier \"%c\"" +msgstr "нерозпізнаний специфікатор типу format() \"%c\"" + +#: utils/adt/varlena.c:5602 utils/adt/varlena.c:5659 +#, c-format +msgid "too few arguments for format()" +msgstr "занадто мало аргументів для format()" + +#: utils/adt/varlena.c:5755 utils/adt/varlena.c:5937 +#, c-format +msgid "number is out of range" +msgstr "число поза діапазоном" + +#: utils/adt/varlena.c:5818 utils/adt/varlena.c:5846 +#, c-format +msgid "format specifies argument 0, but arguments are numbered from 1" +msgstr "формат посилається на аргумент 0, але аргументи нумеруются з 1" + +#: utils/adt/varlena.c:5839 +#, c-format +msgid "width argument position must be ended by \"$\"" +msgstr "вказівка аргументу ширини повинно закінчуватися \"$\"" + +#: utils/adt/varlena.c:5884 +#, c-format +msgid "null values cannot be formatted as an SQL identifier" +msgstr "значення null не можна форматувати у вигляді SQL-ідентифікатору" + +#: utils/adt/varlena.c:6010 +#, c-format +msgid "Unicode normalization can only be performed if server encoding is UTF8" +msgstr "Нормалізація Unicode може виконуватись лише тоді, коли кодування серверу - UTF8" + +#: utils/adt/varlena.c:6023 +#, c-format +msgid "invalid normalization form: %s" +msgstr "неприпустима форма нормалізації: %s" + +#: utils/adt/windowfuncs.c:243 +#, c-format +msgid "argument of ntile must be greater than zero" +msgstr "аргумент ntile повинен бути більше нуля" + +#: utils/adt/windowfuncs.c:465 +#, c-format +msgid "argument of nth_value must be greater than zero" +msgstr "аргумент nth_value повинен бути більше нуля" + +#: utils/adt/xid8funcs.c:116 +#, c-format +msgid "transaction ID %s is in the future" +msgstr "ідентифікатор транзакції %s відноситься до майбутнього" + +#: utils/adt/xid8funcs.c:547 +#, c-format +msgid "invalid external pg_snapshot data" +msgstr "неприпустимі зовнішні дані pg_snapshot" + +#: utils/adt/xml.c:222 +#, c-format +msgid "unsupported XML feature" +msgstr "XML-функції не підтримуються" + +#: utils/adt/xml.c:223 +#, c-format +msgid "This functionality requires the server to be built with libxml support." +msgstr "Ця функціональність потребує, щоб сервер був побудований з підтримкою libxml." + +#: utils/adt/xml.c:224 +#, c-format +msgid "You need to rebuild PostgreSQL using --with-libxml." +msgstr "Необхідно перебудувати PostgreSQL з ключем --with-libxml." + +#: utils/adt/xml.c:243 utils/mb/mbutils.c:570 +#, c-format +msgid "invalid encoding name \"%s\"" +msgstr "неприпустиме ім’я кодування \"%s\"" + +#: utils/adt/xml.c:486 utils/adt/xml.c:491 +#, c-format +msgid "invalid XML comment" +msgstr "неприпустимий XML-коментар" + +#: utils/adt/xml.c:620 +#, c-format +msgid "not an XML document" +msgstr "не XML-документ" + +#: utils/adt/xml.c:779 utils/adt/xml.c:802 +#, c-format +msgid "invalid XML processing instruction" +msgstr "неприпустима XML-команда обробки" + +#: utils/adt/xml.c:780 +#, c-format +msgid "XML processing instruction target name cannot be \"%s\"." +msgstr "Метою XML-команди обробки не може бути \"%s\"." + +#: utils/adt/xml.c:803 +#, c-format +msgid "XML processing instruction cannot contain \"?>\"." +msgstr "XML-команда обробки не може містити \"?>\"." + +#: utils/adt/xml.c:882 +#, c-format +msgid "xmlvalidate is not implemented" +msgstr "функція xmlvalidate не реалізована" + +#: utils/adt/xml.c:961 +#, c-format +msgid "could not initialize XML library" +msgstr "не вдалося ініціалізувати бібліотеку XML" + +#: utils/adt/xml.c:962 +#, c-format +msgid "libxml2 has incompatible char type: sizeof(char)=%u, sizeof(xmlChar)=%u." +msgstr "libxml2 має несумісний тип char: sizeof(char)=%u, sizeof(xmlChar)=%u." + +#: utils/adt/xml.c:1048 +#, c-format +msgid "could not set up XML error handler" +msgstr "не вдалося встановити обробник XML-помилок" + +#: utils/adt/xml.c:1049 +#, c-format +msgid "This probably indicates that the version of libxml2 being used is not compatible with the libxml2 header files that PostgreSQL was built with." +msgstr "Можливо це означає, що використовувана версія libxml2 несумісна з файлами-заголовками libxml2, з котрими був зібраний PostgreSQL." + +#: utils/adt/xml.c:1936 +msgid "Invalid character value." +msgstr "Неприпустиме значення символу." + +#: utils/adt/xml.c:1939 +msgid "Space required." +msgstr "Потребується пробіл." + +#: utils/adt/xml.c:1942 +msgid "standalone accepts only 'yes' or 'no'." +msgstr "значеннями атрибуту standalone можуть бути лише 'yes' або 'no'." + +#: utils/adt/xml.c:1945 +msgid "Malformed declaration: missing version." +msgstr "Неправильне оголошення: пропущена версія." + +#: utils/adt/xml.c:1948 +msgid "Missing encoding in text declaration." +msgstr "В оголошенні пропущене кодування." + +#: utils/adt/xml.c:1951 +msgid "Parsing XML declaration: '?>' expected." +msgstr "Аналіз XML-оголошення: '?>' очікується." + +#: utils/adt/xml.c:1954 +#, c-format +msgid "Unrecognized libxml error code: %d." +msgstr "Нерозпізнаний код помилки libxml: %d." + +#: utils/adt/xml.c:2211 +#, c-format +msgid "XML does not support infinite date values." +msgstr "XML не підтримує безкінечні значення в датах." + +#: utils/adt/xml.c:2233 utils/adt/xml.c:2260 +#, c-format +msgid "XML does not support infinite timestamp values." +msgstr "XML не підтримує безкінченні значення в позначках часу." + +#: utils/adt/xml.c:2676 +#, c-format +msgid "invalid query" +msgstr "неприпустимий запит" + +#: utils/adt/xml.c:4016 +#, c-format +msgid "invalid array for XML namespace mapping" +msgstr "неприпустимий масив з зіставленням простіру імен XML" + +#: utils/adt/xml.c:4017 +#, c-format +msgid "The array must be two-dimensional with length of the second axis equal to 2." +msgstr "Масив повинен бути двовимірним і містити 2 елемента по другій вісі." + +#: utils/adt/xml.c:4041 +#, c-format +msgid "empty XPath expression" +msgstr "пустий вираз XPath" + +#: utils/adt/xml.c:4093 +#, c-format +msgid "neither namespace name nor URI may be null" +msgstr "ні ім'я простіру імен ні URI не можуть бути null" + +#: utils/adt/xml.c:4100 +#, c-format +msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" +msgstr "не вдалося зареєструвати простір імен XML з ім'ям \"%s\" і URI \"%s\"" + +#: utils/adt/xml.c:4451 +#, c-format +msgid "DEFAULT namespace is not supported" +msgstr "Простір імен DEFAULT не підтримується" + +#: utils/adt/xml.c:4480 +#, c-format +msgid "row path filter must not be empty string" +msgstr "шлях фільтруючих рядків не повинен бути пустим" + +#: utils/adt/xml.c:4511 +#, c-format +msgid "column path filter must not be empty string" +msgstr "шлях фільтруючого стовпця не повинен бути пустим" + +#: utils/adt/xml.c:4661 +#, c-format +msgid "more than one value returned by column XPath expression" +msgstr "вираз XPath, який відбирає стовпець, повернув більше одного значення" + +#: utils/cache/lsyscache.c:1015 +#, c-format +msgid "cast from type %s to type %s does not exist" +msgstr "приведення від типу %s до типу %s не існує" + +#: utils/cache/lsyscache.c:2764 utils/cache/lsyscache.c:2797 +#: utils/cache/lsyscache.c:2830 utils/cache/lsyscache.c:2863 +#, c-format +msgid "type %s is only a shell" +msgstr "тип %s лише оболонка" + +#: utils/cache/lsyscache.c:2769 +#, c-format +msgid "no input function available for type %s" +msgstr "для типу %s немає доступної функції введення" + +#: utils/cache/lsyscache.c:2802 +#, c-format +msgid "no output function available for type %s" +msgstr "для типу %s немає доступної функції виводу" + +#: utils/cache/partcache.c:215 +#, c-format +msgid "operator class \"%s\" of access method %s is missing support function %d for type %s" +msgstr "в класі операторів \"%s\" методу доступу %s пропущено опорну функцію %d для типу %s" + +#: utils/cache/plancache.c:718 +#, c-format +msgid "cached plan must not change result type" +msgstr "в кешованому плані не повинен змінюватись тип результату" + +#: utils/cache/relcache.c:6078 +#, c-format +msgid "could not create relation-cache initialization file \"%s\": %m" +msgstr "не вдалося створити файл ініціалізації для кешу відношень \"%s\": %m" + +#: utils/cache/relcache.c:6080 +#, c-format +msgid "Continuing anyway, but there's something wrong." +msgstr "Продовжуємо усе одно, але щось не так." + +#: utils/cache/relcache.c:6402 +#, c-format +msgid "could not remove cache file \"%s\": %m" +msgstr "не вдалося видалити файл кешу \"%s\": %m" + +#: utils/cache/relmapper.c:531 +#, c-format +msgid "cannot PREPARE a transaction that modified relation mapping" +msgstr "виконати PREPARE для транзакції, яка змінила зіставлення відношень, не можна" + +#: utils/cache/relmapper.c:761 +#, c-format +msgid "relation mapping file \"%s\" contains invalid data" +msgstr "файл зіставлень відношень \"%s\" містить неприпустимі дані" + +#: utils/cache/relmapper.c:771 +#, c-format +msgid "relation mapping file \"%s\" contains incorrect checksum" +msgstr "файл зіставлень відношень \"%s\" містить неправильну контрольну суму" + +#: utils/cache/typcache.c:1692 utils/fmgr/funcapi.c:461 +#, c-format +msgid "record type has not been registered" +msgstr "тип запису не зареєстрований" + +#: utils/error/assert.c:37 +#, c-format +msgid "TRAP: ExceptionalCondition: bad arguments\n" +msgstr "TRAP: ExceptionalCondition: невірні аргументи\n" + +#: utils/error/assert.c:40 +#, c-format +msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n" +msgstr "TRAP: %s(\"%s\", Файл: \"%s\", Рядок: %d)\n" + +#: utils/error/elog.c:322 +#, c-format +msgid "error occurred before error message processing is available\n" +msgstr "сталася помилка перед тим, як обробка повідомлення про помилку була доступна\n" + +#: utils/error/elog.c:1868 +#, c-format +msgid "could not reopen file \"%s\" as stderr: %m" +msgstr "не вдалося повторно відкрити файл \"%s\" як stderr: %m" + +#: utils/error/elog.c:1881 +#, c-format +msgid "could not reopen file \"%s\" as stdout: %m" +msgstr "не вдалося повторно відкрити файл \"%s\" як stdout: %m" + +#: utils/error/elog.c:2373 utils/error/elog.c:2407 utils/error/elog.c:2423 +msgid "[unknown]" +msgstr "[unknown]" + +#: utils/error/elog.c:2893 utils/error/elog.c:3203 utils/error/elog.c:3311 +msgid "missing error text" +msgstr "пропущено текст помилки" + +#: utils/error/elog.c:2896 utils/error/elog.c:2899 utils/error/elog.c:3314 +#: utils/error/elog.c:3317 +#, c-format +msgid " at character %d" +msgstr " символ %d" + +#: utils/error/elog.c:2909 utils/error/elog.c:2916 +msgid "DETAIL: " +msgstr "ВІДОМОСТІ: " + +#: utils/error/elog.c:2923 +msgid "HINT: " +msgstr "УКАЗІВКА: " + +#: utils/error/elog.c:2930 +msgid "QUERY: " +msgstr "ЗАПИТ: " + +#: utils/error/elog.c:2937 +msgid "CONTEXT: " +msgstr "КОНТЕКСТ: " + +#: utils/error/elog.c:2947 +#, c-format +msgid "LOCATION: %s, %s:%d\n" +msgstr "РОЗТАШУВАННЯ: %s, %s:%d\n" + +#: utils/error/elog.c:2954 +#, c-format +msgid "LOCATION: %s:%d\n" +msgstr "РОЗТАШУВАННЯ: %s:%d\n" + +#: utils/error/elog.c:2961 +msgid "BACKTRACE: " +msgstr "ВІДСТЕЖУВАТИ: " + +#: utils/error/elog.c:2975 +msgid "STATEMENT: " +msgstr "ІНСТРУКЦІЯ: " + +#: utils/error/elog.c:3364 +msgid "DEBUG" +msgstr "НАЛАГОДЖЕННЯ" + +#: utils/error/elog.c:3368 +msgid "LOG" +msgstr "ЗАПИСУВАННЯ" + +#: utils/error/elog.c:3371 +msgid "INFO" +msgstr "ІНФОРМАЦІЯ" + +#: utils/error/elog.c:3374 +msgid "NOTICE" +msgstr "ПОВІДОМЛЕННЯ" + +#: utils/error/elog.c:3377 +msgid "WARNING" +msgstr "ПОПЕРЕДЖЕННЯ" + +#: utils/error/elog.c:3380 +msgid "ERROR" +msgstr "ПОМИЛКА" + +#: utils/error/elog.c:3383 +msgid "FATAL" +msgstr "ФАТАЛЬНО" + +#: utils/error/elog.c:3386 +msgid "PANIC" +msgstr "ПАНІКА" + +#: utils/fmgr/dfmgr.c:130 +#, c-format +msgid "could not find function \"%s\" in file \"%s\"" +msgstr "не вдалося знайти функцію \"%s\" у файлі \"%s\"" + +#: utils/fmgr/dfmgr.c:247 +#, c-format +msgid "could not load library \"%s\": %s" +msgstr "не вдалося завантажити бібліотеку \"%s\": %s" + +#: utils/fmgr/dfmgr.c:279 +#, c-format +msgid "incompatible library \"%s\": missing magic block" +msgstr "несумісная бібліотека \"%s\": пропущено магічний блок" + +#: utils/fmgr/dfmgr.c:281 +#, c-format +msgid "Extension libraries are required to use the PG_MODULE_MAGIC macro." +msgstr "Бібліотеки розширення потребують використання макросу PG_MODULE_MAGIC." + +#: utils/fmgr/dfmgr.c:327 +#, c-format +msgid "incompatible library \"%s\": version mismatch" +msgstr "несумісна бібліотека \"%s\": невідповідність версій" + +#: utils/fmgr/dfmgr.c:329 +#, c-format +msgid "Server is version %d, library is version %s." +msgstr "Версія серверу %d, версія бібліотеки %s." + +#: utils/fmgr/dfmgr.c:346 +#, c-format +msgid "Server has FUNC_MAX_ARGS = %d, library has %d." +msgstr "Сервер має FUNC_MAX_ARGS = %d, бібліотека має %d." + +#: utils/fmgr/dfmgr.c:355 +#, c-format +msgid "Server has INDEX_MAX_KEYS = %d, library has %d." +msgstr "Сервер має INDEX_MAX_KEYS = %d, бібліотека має %d." + +#: utils/fmgr/dfmgr.c:364 +#, c-format +msgid "Server has NAMEDATALEN = %d, library has %d." +msgstr "Сервер має NAMEDATALEN = %d, бібліотека має %d." + +#: utils/fmgr/dfmgr.c:373 +#, c-format +msgid "Server has FLOAT8PASSBYVAL = %s, library has %s." +msgstr "Сервер має FLOAT8PASSBYVAL = %s, бібліотека має %s." + +#: utils/fmgr/dfmgr.c:380 +msgid "Magic block has unexpected length or padding difference." +msgstr "Магічний блок має неочікувану довжину або інше заповнення." + +#: utils/fmgr/dfmgr.c:383 +#, c-format +msgid "incompatible library \"%s\": magic block mismatch" +msgstr "несумісна бібліотка \"%s\": невідповідність магічного блоку" + +#: utils/fmgr/dfmgr.c:547 +#, c-format +msgid "access to library \"%s\" is not allowed" +msgstr "доступ до бібліотеки \"%s\" не дозволений" + +#: utils/fmgr/dfmgr.c:573 +#, c-format +msgid "invalid macro name in dynamic library path: %s" +msgstr "неприпустиме ім'я макросу в шляху динамічної бібліотеки: %s" + +#: utils/fmgr/dfmgr.c:613 +#, c-format +msgid "zero-length component in parameter \"dynamic_library_path\"" +msgstr "параметр \"dynamic_library_path\" містить компонент нульової довжини" + +#: utils/fmgr/dfmgr.c:632 +#, c-format +msgid "component in parameter \"dynamic_library_path\" is not an absolute path" +msgstr "параметр \"dynamic_library_path\" містить компонент, який не є абсолютним шляхом" + +#: utils/fmgr/fmgr.c:238 +#, c-format +msgid "internal function \"%s\" is not in internal lookup table" +msgstr "внутрішньої функції \"%s\" немає у внутрішній таблиці підстановки" + +#: utils/fmgr/fmgr.c:487 +#, c-format +msgid "could not find function information for function \"%s\"" +msgstr "не вдалося знайти інформацію про функцію \"%s\"" + +#: utils/fmgr/fmgr.c:489 +#, c-format +msgid "SQL-callable functions need an accompanying PG_FUNCTION_INFO_V1(funcname)." +msgstr "Функції, які викликаються з SQL, потребують додаткове оголошення PG_FUNCTION_INFO_V1(ім'я_функції)." + +#: utils/fmgr/fmgr.c:507 +#, c-format +msgid "unrecognized API version %d reported by info function \"%s\"" +msgstr "нерозпізнана версія API %d, повідомлена інформаційною функцією \"%s\"" + +#: utils/fmgr/fmgr.c:2003 +#, c-format +msgid "operator class options info is absent in function call context" +msgstr "в контексті виклику функції відсутня інформація стосовно параметрів класів операторів" + +#: utils/fmgr/fmgr.c:2070 +#, c-format +msgid "language validation function %u called for language %u instead of %u" +msgstr "функція мовної перевірки %u викликана для мови %u замість %u" + +#: utils/fmgr/funcapi.c:384 +#, c-format +msgid "could not determine actual result type for function \"%s\" declared to return type %s" +msgstr "не вдалося визначити фактичний тип результату для функції \"%s\" оголошеної як, та, котра повертає тип %s" + +#: utils/fmgr/funcapi.c:1651 utils/fmgr/funcapi.c:1683 +#, c-format +msgid "number of aliases does not match number of columns" +msgstr "кількість псевдонімів не відповідає кількості стовпців" + +#: utils/fmgr/funcapi.c:1677 +#, c-format +msgid "no column alias was provided" +msgstr "жодного псевдоніму для стовпця не було надано" + +#: utils/fmgr/funcapi.c:1701 +#, c-format +msgid "could not determine row description for function returning record" +msgstr "не вдалося визначити опис рядка для функції, що повертає запис" + +#: utils/init/miscinit.c:285 +#, c-format +msgid "data directory \"%s\" does not exist" +msgstr "каталог даних \"%s\" не існує" + +#: utils/init/miscinit.c:290 +#, c-format +msgid "could not read permissions of directory \"%s\": %m" +msgstr "не вдалося прочитати дозволи на каталог \"%s\": %m" + +#: utils/init/miscinit.c:298 +#, c-format +msgid "specified data directory \"%s\" is not a directory" +msgstr "вказаний каталог даних \"%s\" не є каталогом" + +#: utils/init/miscinit.c:314 +#, c-format +msgid "data directory \"%s\" has wrong ownership" +msgstr "власник каталогу даних \"%s\" визначений неправильно" + +#: utils/init/miscinit.c:316 +#, c-format +msgid "The server must be started by the user that owns the data directory." +msgstr "Сервер повинен запускати користувач, який володіє каталогом даних." + +#: utils/init/miscinit.c:334 +#, c-format +msgid "data directory \"%s\" has invalid permissions" +msgstr "каталог даних \"%s\" має неприпустимі дозволи" + +#: utils/init/miscinit.c:336 +#, c-format +msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." +msgstr "Дозволи повинні бути u=rwx (0700) або u=rwx,g=rx (0750)." + +#: utils/init/miscinit.c:615 utils/misc/guc.c:7139 +#, c-format +msgid "cannot set parameter \"%s\" within security-restricted operation" +msgstr "встановити параметр \"%s\" в межах операції з обмеженнями по безпеці, не можна" + +#: utils/init/miscinit.c:683 +#, c-format +msgid "role with OID %u does not exist" +msgstr "роль з OID %u не існує" + +#: utils/init/miscinit.c:713 +#, c-format +msgid "role \"%s\" is not permitted to log in" +msgstr "для ролі \"%s\" вхід не дозволений" + +#: utils/init/miscinit.c:731 +#, c-format +msgid "too many connections for role \"%s\"" +msgstr "занадто багато підключень для ролі \"%s\"" + +#: utils/init/miscinit.c:791 +#, c-format +msgid "permission denied to set session authorization" +msgstr "немає прав для встановлення авторизації в сеансі" + +#: utils/init/miscinit.c:874 +#, c-format +msgid "invalid role OID: %u" +msgstr "неприпустимий OID ролі: %u" + +#: utils/init/miscinit.c:928 +#, c-format +msgid "database system is shut down" +msgstr "система бази даних вимкнена" + +#: utils/init/miscinit.c:1015 +#, c-format +msgid "could not create lock file \"%s\": %m" +msgstr "не вдалося створити файл блокування \"%s\": %m" + +#: utils/init/miscinit.c:1029 +#, c-format +msgid "could not open lock file \"%s\": %m" +msgstr "не вдалося відкрити файл блокування \"%s\": %m" + +#: utils/init/miscinit.c:1036 +#, c-format +msgid "could not read lock file \"%s\": %m" +msgstr "не вдалося прочитати файл блокування \"%s\": %m" + +#: utils/init/miscinit.c:1045 +#, c-format +msgid "lock file \"%s\" is empty" +msgstr "файл блокування \"%s\" пустий" + +#: utils/init/miscinit.c:1046 +#, c-format +msgid "Either another server is starting, or the lock file is the remnant of a previous server startup crash." +msgstr "Або зараз запускається інший сервер, або цей файл блокування залишився в результаті збою під час попереднього запуску." + +#: utils/init/miscinit.c:1090 +#, c-format +msgid "lock file \"%s\" already exists" +msgstr "файл блокування \"%s\" вже існує" + +#: utils/init/miscinit.c:1094 +#, c-format +msgid "Is another postgres (PID %d) running in data directory \"%s\"?" +msgstr "Інший postgres (PID %d) працює з каталогом даних \"%s\"?" + +#: utils/init/miscinit.c:1096 +#, c-format +msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" +msgstr "Інший postmaster (PID %d) працює з каталогом даних \"%s\"?" + +#: utils/init/miscinit.c:1099 +#, c-format +msgid "Is another postgres (PID %d) using socket file \"%s\"?" +msgstr "Інший postgres (PID %d) використовує файл сокету \"%s\"?" + +#: utils/init/miscinit.c:1101 +#, c-format +msgid "Is another postmaster (PID %d) using socket file \"%s\"?" +msgstr "Інший postmaster (PID %d) використовує файл сокету \"%s\"?" + +#: utils/init/miscinit.c:1152 +#, c-format +msgid "could not remove old lock file \"%s\": %m" +msgstr "не вдалося видалити старий файл блокування \"%s\": %m" + +#: utils/init/miscinit.c:1154 +#, c-format +msgid "The file seems accidentally left over, but it could not be removed. Please remove the file by hand and try again." +msgstr "Здається, файл залишився випадково, але видалити його не вийшло. Будь-ласка, видаліть файл вручну або спробуйте знову." + +#: utils/init/miscinit.c:1191 utils/init/miscinit.c:1205 +#: utils/init/miscinit.c:1216 +#, c-format +msgid "could not write lock file \"%s\": %m" +msgstr "не вдалося записати файл блокування \"%s\": %m" + +#: utils/init/miscinit.c:1327 utils/init/miscinit.c:1469 utils/misc/guc.c:10038 +#, c-format +msgid "could not read from file \"%s\": %m" +msgstr "не вдалося прочитати з файлу \"%s\": %m" + +#: utils/init/miscinit.c:1457 +#, c-format +msgid "could not open file \"%s\": %m; continuing anyway" +msgstr "не вдалося відкрити файл \"%s\": %m; все одно продовжується" + +#: utils/init/miscinit.c:1482 +#, c-format +msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" +msgstr "файл блокування \"%s\" містить неправильний PID: %ld замість %ld" + +#: utils/init/miscinit.c:1521 utils/init/miscinit.c:1537 +#, c-format +msgid "\"%s\" is not a valid data directory" +msgstr "\"%s\" не є припустимим каталогом даних" + +#: utils/init/miscinit.c:1523 +#, c-format +msgid "File \"%s\" is missing." +msgstr "Файл \"%s\" пропущено." + +#: utils/init/miscinit.c:1539 +#, c-format +msgid "File \"%s\" does not contain valid data." +msgstr "Файл \"%s\" не містить припустимих даних." + +#: utils/init/miscinit.c:1541 +#, c-format +msgid "You might need to initdb." +msgstr "Можливо, вам слід виконати initdb." + +#: utils/init/miscinit.c:1549 +#, c-format +msgid "The data directory was initialized by PostgreSQL version %s, which is not compatible with this version %s." +msgstr "Каталог даних ініціалізований сервером PostgreSQL версії %s, не сумісною з цією версією %s." + +#: utils/init/miscinit.c:1616 +#, c-format +msgid "loaded library \"%s\"" +msgstr "завантажена бібліотека \"%s\"" + +#: utils/init/postinit.c:255 +#, c-format +msgid "replication connection authorized: user=%s application_name=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +msgstr "авторизовано підключення реплікації: користувач=%s назва_програми=%s SSL активовано (протокол=%s, шифр=%s, біти=%d, стискання=%s)" + +#: utils/init/postinit.c:261 utils/init/postinit.c:267 +#: utils/init/postinit.c:289 utils/init/postinit.c:295 +msgid "off" +msgstr "вимк" + +#: utils/init/postinit.c:261 utils/init/postinit.c:267 +#: utils/init/postinit.c:289 utils/init/postinit.c:295 +msgid "on" +msgstr "увімк" + +#: utils/init/postinit.c:262 +#, c-format +msgid "replication connection authorized: user=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +msgstr "підключення для реплікації авторизовано: користувач=%s SSL активований (протокол=%s, шифр=%s, біти=%d, стискання=%s)" + +#: utils/init/postinit.c:272 +#, c-format +msgid "replication connection authorized: user=%s application_name=%s" +msgstr "авторизовано підключення реплікації: користувач=%s назва_програми=%s" + +#: utils/init/postinit.c:275 +#, c-format +msgid "replication connection authorized: user=%s" +msgstr "підключення для реплікації авторизовано: користувач=%s" + +#: utils/init/postinit.c:284 +#, c-format +msgid "connection authorized: user=%s database=%s application_name=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +msgstr "підключення авторизовано: користувач=%s база даних=%s назва_програми=%s SSL активовано (протокол=%s, шифр=%s, біти=%d, стискання=%s)" + +#: utils/init/postinit.c:290 +#, c-format +msgid "connection authorized: user=%s database=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +msgstr "підключення для реплікації авторизовано: користувач=%s база даних=%s SSL активований (протокол=%s, шифр=%s, біти=%d, стискання=%s)" + +#: utils/init/postinit.c:300 +#, c-format +msgid "connection authorized: user=%s database=%s application_name=%s" +msgstr "підключення авторизовано: користувач=%s база даних=%s назва_програми=%s" + +#: utils/init/postinit.c:302 +#, c-format +msgid "connection authorized: user=%s database=%s" +msgstr "підключення авторизовано: користувач=%s база даних=%s" + +#: utils/init/postinit.c:334 +#, c-format +msgid "database \"%s\" has disappeared from pg_database" +msgstr "база даних \"%s\" зникла з pg_database" + +#: utils/init/postinit.c:336 +#, c-format +msgid "Database OID %u now seems to belong to \"%s\"." +msgstr "Здається, база даних з OID %u тепер належить \"%s\"." + +#: utils/init/postinit.c:356 +#, c-format +msgid "database \"%s\" is not currently accepting connections" +msgstr "база даних \"%s\" не приймає підключення в даний момент" + +#: utils/init/postinit.c:369 +#, c-format +msgid "permission denied for database \"%s\"" +msgstr "доступ до бази даних \"%s\" відхилений" + +#: utils/init/postinit.c:370 +#, c-format +msgid "User does not have CONNECT privilege." +msgstr "Користувач не має права CONNECT." + +#: utils/init/postinit.c:387 +#, c-format +msgid "too many connections for database \"%s\"" +msgstr "занадто багато підключень до бази даних \"%s\"" + +#: utils/init/postinit.c:409 utils/init/postinit.c:416 +#, c-format +msgid "database locale is incompatible with operating system" +msgstr "локалізація бази даних несумісна з операційною системою" + +#: utils/init/postinit.c:410 +#, c-format +msgid "The database was initialized with LC_COLLATE \"%s\", which is not recognized by setlocale()." +msgstr "База даних була ініціалізована з параметром LC_COLLATE \"%s\", але зараз setlocale() не розпізнає його." + +#: utils/init/postinit.c:412 utils/init/postinit.c:419 +#, c-format +msgid "Recreate the database with another locale or install the missing locale." +msgstr "Повторно створіть базу даних з іншою локалізацією або встановіть пропущену локалізацію." + +#: utils/init/postinit.c:417 +#, c-format +msgid "The database was initialized with LC_CTYPE \"%s\", which is not recognized by setlocale()." +msgstr "База даних була ініціалізована з параметром LC_CTYPE \"%s\", але зараз setlocale() не розпізнає його." + +#: utils/init/postinit.c:762 +#, c-format +msgid "no roles are defined in this database system" +msgstr "в цій системі баз даних не визначено жодної ролі" + +#: utils/init/postinit.c:763 +#, c-format +msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." +msgstr "Ви повинні негайно виконати CREATE USER \"%s\" SUPERUSER;." + +#: utils/init/postinit.c:799 +#, c-format +msgid "new replication connections are not allowed during database shutdown" +msgstr "нові підключення для реплікації не дозволені під час завершення роботи бази даних" + +#: utils/init/postinit.c:803 +#, c-format +msgid "must be superuser to connect during database shutdown" +msgstr "потрібно бути суперкористувачем, щоб підключитись під час завершення роботи бази даних" + +#: utils/init/postinit.c:813 +#, c-format +msgid "must be superuser to connect in binary upgrade mode" +msgstr "потрібно бути суперкористувачем, щоб підключитись в режимі двійкового оновлення" + +#: utils/init/postinit.c:826 +#, c-format +msgid "remaining connection slots are reserved for non-replication superuser connections" +msgstr "слоти підключень, які залишились, зарезервовані для підключень суперкористувача (не для реплікації)" + +#: utils/init/postinit.c:836 +#, c-format +msgid "must be superuser or replication role to start walsender" +msgstr "для запуску процесу walsender потребується роль реплікації або бути суперкористувачем" + +#: utils/init/postinit.c:905 +#, c-format +msgid "database %u does not exist" +msgstr "база даних %u не існує" + +#: utils/init/postinit.c:994 +#, c-format +msgid "It seems to have just been dropped or renamed." +msgstr "Схоже, вона щойно була видалена або перейменована." + +#: utils/init/postinit.c:1012 +#, c-format +msgid "The database subdirectory \"%s\" is missing." +msgstr "Підкаталог бази даних \"%s\" пропущений." + +#: utils/init/postinit.c:1017 +#, c-format +msgid "could not access directory \"%s\": %m" +msgstr "немає доступу до каталогу \"%s\": %m" + +#: utils/mb/conv.c:443 utils/mb/conv.c:635 +#, c-format +msgid "invalid encoding number: %d" +msgstr "неприпустимий номер кодування: %d" + +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:122 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:154 +#, c-format +msgid "unexpected encoding ID %d for ISO 8859 character sets" +msgstr "неочікуваний ідентифікатор кодування %d для наборів символів ISO 8859" + +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:103 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:135 +#, c-format +msgid "unexpected encoding ID %d for WIN character sets" +msgstr "неочікуваний ідентифікатор кодування %d для наборів символів WIN" + +#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:842 +#, c-format +msgid "conversion between %s and %s is not supported" +msgstr "перетворення між %s і %s не підтримується" + +#: utils/mb/mbutils.c:385 +#, c-format +msgid "default conversion function for encoding \"%s\" to \"%s\" does not exist" +msgstr "функції за замовчуванням перетворення з кодування \"%s\" в \"%s\" не існує" + +#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:429 utils/mb/mbutils.c:758 +#: utils/mb/mbutils.c:784 +#, c-format +msgid "String of %d bytes is too long for encoding conversion." +msgstr "Рядок з %d байт занадто довгий для перетворення кодування." + +#: utils/mb/mbutils.c:511 +#, c-format +msgid "invalid source encoding name \"%s\"" +msgstr "неприпустиме ім’я вихідного кодування \"%s\"" + +#: utils/mb/mbutils.c:516 +#, c-format +msgid "invalid destination encoding name \"%s\"" +msgstr "неприпустиме ім’я кодування результату \"%s\"" + +#: utils/mb/mbutils.c:656 +#, c-format +msgid "invalid byte value for encoding \"%s\": 0x%02x" +msgstr "неприпустиме значення байту для кодування \"%s\": 0x%02x" + +#: utils/mb/mbutils.c:819 +#, c-format +msgid "invalid Unicode code point" +msgstr "неприпустима кодова точка Unicode" + +#: utils/mb/mbutils.c:1087 +#, c-format +msgid "bind_textdomain_codeset failed" +msgstr "помилка в bind_textdomain_codeset" + +#: utils/mb/mbutils.c:1595 +#, c-format +msgid "invalid byte sequence for encoding \"%s\": %s" +msgstr "неприпустима послідовність байтів для кодування \"%s\": %s" + +#: utils/mb/mbutils.c:1628 +#, c-format +msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" +msgstr "символ з послідовністю байтів %s в кодуванні \"%s\" не має еквіваленту в кодуванні \"%s\"" + +#: utils/misc/guc.c:679 +msgid "Ungrouped" +msgstr "Розгруповано" + +#: utils/misc/guc.c:681 +msgid "File Locations" +msgstr "Розташування файлів" + +#: utils/misc/guc.c:683 +msgid "Connections and Authentication" +msgstr "Підключення і автентифікація" + +#: utils/misc/guc.c:685 +msgid "Connections and Authentication / Connection Settings" +msgstr "Підключення і автентифікація / Параметри підключень" + +#: utils/misc/guc.c:687 +msgid "Connections and Authentication / Authentication" +msgstr "Підключення і автентифікація / Автентифікація" + +#: utils/misc/guc.c:689 +msgid "Connections and Authentication / SSL" +msgstr "Підключення і автентифікація / SSL" + +#: utils/misc/guc.c:691 +msgid "Resource Usage" +msgstr "Використання ресурсу" + +#: utils/misc/guc.c:693 +msgid "Resource Usage / Memory" +msgstr "Використання ресурсу / Пам'ять" + +#: utils/misc/guc.c:695 +msgid "Resource Usage / Disk" +msgstr "Використання ресурсу / Диск" + +#: utils/misc/guc.c:697 +msgid "Resource Usage / Kernel Resources" +msgstr "Використання ресурсу / Ресурси ядра" + +#: utils/misc/guc.c:699 +msgid "Resource Usage / Cost-Based Vacuum Delay" +msgstr "Використання ресурсу / Затримка очистки по вартості" + +#: utils/misc/guc.c:701 +msgid "Resource Usage / Background Writer" +msgstr "Використання ресурсу / Фоновий запис" + +#: utils/misc/guc.c:703 +msgid "Resource Usage / Asynchronous Behavior" +msgstr "Використання ресурсу / Асинхронна поведінка" + +#: utils/misc/guc.c:705 +msgid "Write-Ahead Log" +msgstr "Журнал WAL" + +#: utils/misc/guc.c:707 +msgid "Write-Ahead Log / Settings" +msgstr "Журнал WAL / Параметри" + +#: utils/misc/guc.c:709 +msgid "Write-Ahead Log / Checkpoints" +msgstr "Журнал WAL / Контрольні точки" + +#: utils/misc/guc.c:711 +msgid "Write-Ahead Log / Archiving" +msgstr "Журнал WAL / Архівація" + +#: utils/misc/guc.c:713 +msgid "Write-Ahead Log / Archive Recovery" +msgstr "Журнал WAL / Відновлення архіву" + +#: utils/misc/guc.c:715 +msgid "Write-Ahead Log / Recovery Target" +msgstr "Журнал WAL / Мета відновлення" + +#: utils/misc/guc.c:717 +msgid "Replication" +msgstr "Реплікація" + +#: utils/misc/guc.c:719 +msgid "Replication / Sending Servers" +msgstr "Реплікація / Надсилання серверів" + +#: utils/misc/guc.c:721 +msgid "Replication / Master Server" +msgstr "Реплікація / Головний сервер" + +#: utils/misc/guc.c:723 +msgid "Replication / Standby Servers" +msgstr "Реплікація / Резервні сервера" + +#: utils/misc/guc.c:725 +msgid "Replication / Subscribers" +msgstr "Реплікація / Підписники" + +#: utils/misc/guc.c:727 +msgid "Query Tuning" +msgstr "Налаштування запитів" + +#: utils/misc/guc.c:729 +msgid "Query Tuning / Planner Method Configuration" +msgstr "Налаштування запитів / Конфігурація методів планувальника" + +#: utils/misc/guc.c:731 +msgid "Query Tuning / Planner Cost Constants" +msgstr "Налаштування запитів / Константи вартості для планувальника" + +#: utils/misc/guc.c:733 +msgid "Query Tuning / Genetic Query Optimizer" +msgstr "Налаштування запитів / Генетичний оптимізатор запитів" + +#: utils/misc/guc.c:735 +msgid "Query Tuning / Other Planner Options" +msgstr "Налаштування запитів / Інші параметри планувальника" + +#: utils/misc/guc.c:737 +msgid "Reporting and Logging" +msgstr "Звіти і журналювання" + +#: utils/misc/guc.c:739 +msgid "Reporting and Logging / Where to Log" +msgstr "Звіти і журналювання / Куди записувати" + +#: utils/misc/guc.c:741 +msgid "Reporting and Logging / When to Log" +msgstr "Звіти і журналювання / Коли записувати" + +#: utils/misc/guc.c:743 +msgid "Reporting and Logging / What to Log" +msgstr "Звіти і журналювання / Що записувати" + +#: utils/misc/guc.c:745 +msgid "Process Title" +msgstr "Заголовок процесу" + +#: utils/misc/guc.c:747 +msgid "Statistics" +msgstr "Статистика" + +#: utils/misc/guc.c:749 +msgid "Statistics / Monitoring" +msgstr "Статистика / Моніторинг" + +#: utils/misc/guc.c:751 +msgid "Statistics / Query and Index Statistics Collector" +msgstr "Статистика / Збирач статистики по запитам і індексам" + +#: utils/misc/guc.c:753 +msgid "Autovacuum" +msgstr "Автоочистка" + +#: utils/misc/guc.c:755 +msgid "Client Connection Defaults" +msgstr "Параметри клієнтських сеансів за замовчуванням" + +#: utils/misc/guc.c:757 +msgid "Client Connection Defaults / Statement Behavior" +msgstr "Параметри клієнтських сеансів за замовчуванням / Поведінка декларацій" + +#: utils/misc/guc.c:759 +msgid "Client Connection Defaults / Locale and Formatting" +msgstr "Параметри клієнтських сеансів за замовчуванням / Локалізація і форматування" + +#: utils/misc/guc.c:761 +msgid "Client Connection Defaults / Shared Library Preloading" +msgstr "Параметри клієнтських сеансів за замовчуванням / Попереднє завантаження спільних бібліотек" + +#: utils/misc/guc.c:763 +msgid "Client Connection Defaults / Other Defaults" +msgstr "Параметри клієнтських сеансів за замовчуванням / Інші параметри за замовчуванням" + +#: utils/misc/guc.c:765 +msgid "Lock Management" +msgstr "Керування блокуванням" + +#: utils/misc/guc.c:767 +msgid "Version and Platform Compatibility" +msgstr "Сумісність версій і платформ" + +#: utils/misc/guc.c:769 +msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" +msgstr "Сумісність версій і платформ / Попередні версії PostgreSQL" + +#: utils/misc/guc.c:771 +msgid "Version and Platform Compatibility / Other Platforms and Clients" +msgstr "Сумісність версій і платформ / Інші платформи і клієнти" + +#: utils/misc/guc.c:773 +msgid "Error Handling" +msgstr "Обробка помилок" + +#: utils/misc/guc.c:775 +msgid "Preset Options" +msgstr "Визначені параметри" + +#: utils/misc/guc.c:777 +msgid "Customized Options" +msgstr "Настроєні параметри" + +#: utils/misc/guc.c:779 +msgid "Developer Options" +msgstr "Параметри для розробників" + +#: utils/misc/guc.c:837 +msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." +msgstr "Припустимі одиниці для цього параметру: \"B\", \"kB\", \"MB\", \"GB\", і \"TB\"." + +#: utils/misc/guc.c:874 +msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." +msgstr "Припустимі одиниці для цього параметру: \"us\", \"ms\", \"s\", \"min\", \"h\", і \"d\"." + +#: utils/misc/guc.c:936 +msgid "Enables the planner's use of sequential-scan plans." +msgstr "Дає змогу планувальнику використати плани послідовного сканування." + +#: utils/misc/guc.c:946 +msgid "Enables the planner's use of index-scan plans." +msgstr "Дає змогу планувальнику використати плани сканування по індексу." + +#: utils/misc/guc.c:956 +msgid "Enables the planner's use of index-only-scan plans." +msgstr "Дає змогу планувальнику використати плани сканування лише індекса." + +#: utils/misc/guc.c:966 +msgid "Enables the planner's use of bitmap-scan plans." +msgstr "Дає змогу планувальнику використати плани сканування по точковому рисунку." + +#: utils/misc/guc.c:976 +msgid "Enables the planner's use of TID scan plans." +msgstr "Дає змогу планувальнику використати плани сканування TID." + +#: utils/misc/guc.c:986 +msgid "Enables the planner's use of explicit sort steps." +msgstr "Дає змогу планувальнику використати кроки з явним сортуванням." + +#: utils/misc/guc.c:996 +msgid "Enables the planner's use of incremental sort steps." +msgstr "Дає змогу планувальнику використати кроки інкрементного сортування." + +#: utils/misc/guc.c:1005 +msgid "Enables the planner's use of hashed aggregation plans." +msgstr "Дає змогу планувальнику використовувати плани агрегації по гешу." + +#: utils/misc/guc.c:1015 +msgid "Enables the planner's use of materialization." +msgstr "Дає змогу планувальнику використовувати матеріалізацію." + +#: utils/misc/guc.c:1025 +msgid "Enables the planner's use of nested-loop join plans." +msgstr "Дає змогу планувальнику використовувати плани з'єднання з вкладеними циклами." + +#: utils/misc/guc.c:1035 +msgid "Enables the planner's use of merge join plans." +msgstr "Дає змогу планувальнику використовувати плани з'єднання об'єднанням." + +#: utils/misc/guc.c:1045 +msgid "Enables the planner's use of hash join plans." +msgstr "Дає змогу планувальнику використовувати плани з'єднання по гешу." + +#: utils/misc/guc.c:1055 +msgid "Enables the planner's use of gather merge plans." +msgstr "Дає змогу планувальнику використовувати плани збору об'єднанням." + +#: utils/misc/guc.c:1065 +msgid "Enables partitionwise join." +msgstr "Вмикає з'єднання з урахуванням секціонування." + +#: utils/misc/guc.c:1075 +msgid "Enables partitionwise aggregation and grouping." +msgstr "Вмикає агрегацію і групування з урахуванням секціонування." + +#: utils/misc/guc.c:1085 +msgid "Enables the planner's use of parallel append plans." +msgstr "Дає змогу планувальнику використовувати плани паралельного додавання." + +#: utils/misc/guc.c:1095 +msgid "Enables the planner's use of parallel hash plans." +msgstr "Дає змогу планувальнику використовувати плани паралельного з'єднання по гешу." + +#: utils/misc/guc.c:1105 +msgid "Enables plan-time and run-time partition pruning." +msgstr "Вмикає видалення секцій під час планування і виконання запитів." + +#: utils/misc/guc.c:1106 +msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." +msgstr "Дозволяє планувальнику і виконавцю запитів порівнювати границі секцій з умовами в запиті і визначати які секції повинні бути відскановані." + +#: utils/misc/guc.c:1117 +msgid "Enables genetic query optimization." +msgstr "Вмикає генетичну оптимізацію запитів." + +#: utils/misc/guc.c:1118 +msgid "This algorithm attempts to do planning without exhaustive searching." +msgstr "Цей алгоритм намагається побудувати план без повного перебору." + +#: utils/misc/guc.c:1129 +msgid "Shows whether the current user is a superuser." +msgstr "Показує, чи є поточний користувач суперкористувачем." + +#: utils/misc/guc.c:1139 +msgid "Enables advertising the server via Bonjour." +msgstr "Вмикає оголошення серверу через Bonjour." + +#: utils/misc/guc.c:1148 +msgid "Collects transaction commit time." +msgstr "Збирає час затвердження транзакцій." + +#: utils/misc/guc.c:1157 +msgid "Enables SSL connections." +msgstr "Вмикає SSL-підключення." + +#: utils/misc/guc.c:1166 +msgid "Also use ssl_passphrase_command during server reload." +msgstr "Також використовувати ssl_passphrase_command під час перезавантаження серверу." + +#: utils/misc/guc.c:1175 +msgid "Give priority to server ciphersuite order." +msgstr "Віддавати перевагу замовленню набору шрифтів сервера." + +#: utils/misc/guc.c:1184 +msgid "Forces synchronization of updates to disk." +msgstr "Примусова синхронізація оновлень на диск." + +#: utils/misc/guc.c:1185 +msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." +msgstr "Сервер буде використовувати системний виклик fsync() в декількох місцях, щоб впевнитись, що оновлення фізично записані на диск. Це дозволить привести кластер бази даних в узгоджений стан після аварійного завершення роботи операційної системи або апаратного забезпечення." + +#: utils/misc/guc.c:1196 +msgid "Continues processing after a checksum failure." +msgstr "Продовжує обробку після помилки контрольної суми." + +#: utils/misc/guc.c:1197 +msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." +msgstr "Виявляючи помилку контрольної суми, PostgreSQL звичайно повідомляє про помилку і перериває поточну транзакцію. Але якщо ignore_checksum_failure дорівнює true, система пропустить помилку (але видасть попередження) і продовжить обробку. Ця поведінка може бути причиною аварійних завершень роботи або інших серйозних проблем. Це має місце, лише якщо ввімкнен контроль цілосності сторінок." + +#: utils/misc/guc.c:1211 +msgid "Continues processing past damaged page headers." +msgstr "Продовжує обробку при пошкоджені заголовків сторінок." + +#: utils/misc/guc.c:1212 +msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." +msgstr "Виявляючи пошкоджений заголовок сторінки, PostgreSQL звичайно повідомляє про помилку, перериваючи поточну транзакцію. Але якщо zero_damaged_pages дорівнює true система видасть попередження, обнулить пошкоджену сторінку, і продовжить обробку. Ця поведінка знищить дані, а саме рядків в пошкодженій сторінці." + +#: utils/misc/guc.c:1225 +msgid "Continues recovery after an invalid pages failure." +msgstr "Продовжує відновлення після помилки неприпустимих сторінок." + +#: utils/misc/guc.c:1226 +msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." +msgstr "Виявлення WAL записів, які мають посилання на неприпустимі сторінки під час відновлення, змушує PostgreSQL підняти помилку на рівень PANIC, перериваючи відновлення. Встановлення параметру ignore_invalid_pages на true змусить систему ігнорувати неприпустимі посилання на сторінки в WAL записах (але все ще буде повідомляти про попередження), і продовжити відновлення. Ця поведінка може викликати збої, втрату даних, розповсюдження або приховання пошкоджень, або інші серйозні проблеми. Діє лише під час відновлення або в режимі очікування." + +#: utils/misc/guc.c:1244 +msgid "Writes full pages to WAL when first modified after a checkpoint." +msgstr "Запис повних сторінок до WAL при першій зміні після контрольної точки." + +#: utils/misc/guc.c:1245 +msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." +msgstr "Сторінка, записувана під час аварійного завершення роботи операційної системи може бути записаною на диск частково. Під час відновлення, журналу змін рядків в WAL буде недостатньо для відновлення. Цей параметр записує повні сторінки після першої зміни після контрольної точки, тож відновлення можливе." + +#: utils/misc/guc.c:1258 +msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications." +msgstr "Запис повних сторінок до WAL при першій зміні після контрольної точки, навіть при некритичних змінах." + +#: utils/misc/guc.c:1268 +msgid "Compresses full-page writes written in WAL file." +msgstr "Стискати дані під час запису повних сторінок до файлу WAL." + +#: utils/misc/guc.c:1278 +msgid "Writes zeroes to new WAL files before first use." +msgstr "Перед першим використанням записує нулі до нових файлів WAL." + +#: utils/misc/guc.c:1288 +msgid "Recycles WAL files by renaming them." +msgstr "Перезаписує файли WAL, перейменувавши їх." + +#: utils/misc/guc.c:1298 +msgid "Logs each checkpoint." +msgstr "Журналювати кожну контрольну точку." + +#: utils/misc/guc.c:1307 +msgid "Logs each successful connection." +msgstr "Журналювати кожне успішне підключення." + +#: utils/misc/guc.c:1316 +msgid "Logs end of a session, including duration." +msgstr "Журналювати кінець сеансу, зокрема тривалість." + +#: utils/misc/guc.c:1325 +msgid "Logs each replication command." +msgstr "Журналювати кожну команду реплікації." + +#: utils/misc/guc.c:1334 +msgid "Shows whether the running server has assertion checks enabled." +msgstr "Показує, чи активовані перевірки твердження на працюючому сервері." + +#: utils/misc/guc.c:1349 +msgid "Terminate session on any error." +msgstr "Припиняти сеанси при будь-якій помилці." + +#: utils/misc/guc.c:1358 +msgid "Reinitialize server after backend crash." +msgstr "Повторити ініціалізацію сервера, після внутрішнього аварійного завершення роботи." + +#: utils/misc/guc.c:1368 +msgid "Logs the duration of each completed SQL statement." +msgstr "Журналювати тривалість кожного виконаного SQL-оператора." + +#: utils/misc/guc.c:1377 +msgid "Logs each query's parse tree." +msgstr "Журналювати дерево аналізу для кожного запиту." + +#: utils/misc/guc.c:1386 +msgid "Logs each query's rewritten parse tree." +msgstr "Журналювати переписане дерево аналізу для кожного запиту." + +#: utils/misc/guc.c:1395 +msgid "Logs each query's execution plan." +msgstr "Журналювати план виконання кожного запиту." + +#: utils/misc/guc.c:1404 +msgid "Indents parse and plan tree displays." +msgstr "Відступи при відображенні дерев аналізу і плану запитів." + +#: utils/misc/guc.c:1413 +msgid "Writes parser performance statistics to the server log." +msgstr "Запис статистики продуктивності аналізу до запису сервера." + +#: utils/misc/guc.c:1422 +msgid "Writes planner performance statistics to the server log." +msgstr "Запис статистики продуктивності планувальника до запису сервера." + +#: utils/misc/guc.c:1431 +msgid "Writes executor performance statistics to the server log." +msgstr "Запис статистики продуктивності виконувача до запису сервера." + +#: utils/misc/guc.c:1440 +msgid "Writes cumulative performance statistics to the server log." +msgstr "Запис сукупної статистики продуктивності до запису сервера." + +#: utils/misc/guc.c:1450 +msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." +msgstr "Журналювати статистику використання системних ресурсів (пам'яті і ЦП) при різноманітних операціях з B-tree." + +#: utils/misc/guc.c:1462 +msgid "Collects information about executing commands." +msgstr "Збирати інформацію про команди які виконуються." + +#: utils/misc/guc.c:1463 +msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." +msgstr "Активує збір інформації про поточні команди, які виконуються в кожному сеансі, разом з часом запуску команди." + +#: utils/misc/guc.c:1473 +msgid "Collects statistics on database activity." +msgstr "Збирати статистику про активність бази даних." + +#: utils/misc/guc.c:1482 +msgid "Collects timing statistics for database I/O activity." +msgstr "Збирати статистику за часом активності введення/виведення для бази даних." + +#: utils/misc/guc.c:1492 +msgid "Updates the process title to show the active SQL command." +msgstr "Оновлення виводить в заголовок процесу активну SQL-команду." + +#: utils/misc/guc.c:1493 +msgid "Enables updating of the process title every time a new SQL command is received by the server." +msgstr "Відображає в заголовку процеса кожну SQL-команду, отриману сервером." + +#: utils/misc/guc.c:1506 +msgid "Starts the autovacuum subprocess." +msgstr "Запускає підпроцес автоочистки." + +#: utils/misc/guc.c:1516 +msgid "Generates debugging output for LISTEN and NOTIFY." +msgstr "Генерує налагодженні повідомлення для LISTEN і NOTIFY." + +#: utils/misc/guc.c:1528 +msgid "Emits information about lock usage." +msgstr "Видає інформацію про блокування, які використовуються." + +#: utils/misc/guc.c:1538 +msgid "Emits information about user lock usage." +msgstr "Видає інформацію про користувацькі блокування, які використовуються." + +#: utils/misc/guc.c:1548 +msgid "Emits information about lightweight lock usage." +msgstr "Видає інформацію про спрощені блокування, які використовуються." + +#: utils/misc/guc.c:1558 +msgid "Dumps information about all current locks when a deadlock timeout occurs." +msgstr "Виводить інформацію про всі поточні блокування, при тайм-ауті взаємного блокування." + +#: utils/misc/guc.c:1570 +msgid "Logs long lock waits." +msgstr "Журналювати тривалі очікування в блокуваннях." + +#: utils/misc/guc.c:1580 +msgid "Logs the host name in the connection logs." +msgstr "Журналювати ім’я хоста до записів підключення." + +#: utils/misc/guc.c:1581 +msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." +msgstr "За замовчуванням, записи підключень показують лише IP-адреси хостів, які підключилися. Якщо ви хочете бачити імена хостів ви можете ввімкнути цей параметр, але врахуйте, що це може значно вплинути на продуктивність." + +#: utils/misc/guc.c:1592 +msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." +msgstr "Вважати \"expr=NULL\" як \"expr IS NULL\"." + +#: utils/misc/guc.c:1593 +msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." +msgstr "Коли цей параметр ввімкнений, вирази форми expr = NULL (або NULL = expr) вважаються як expr IS NULL, тобто, повертають true, якщо expr співпадає зі значенням null, і false в іншому разі. Правильна поведінка expr = NULL - завжди повертати null (невідомо)." + +#: utils/misc/guc.c:1605 +msgid "Enables per-database user names." +msgstr "Вмикає зв'язування імен користувачів з базами даних." + +#: utils/misc/guc.c:1614 +msgid "Sets the default read-only status of new transactions." +msgstr "Встановлює статус \"лише читання\" за замовчуванням для нових транзакцій." + +#: utils/misc/guc.c:1623 +msgid "Sets the current transaction's read-only status." +msgstr "Встановлює статус \"лише читання\" для поточної транзакції." + +#: utils/misc/guc.c:1633 +msgid "Sets the default deferrable status of new transactions." +msgstr "Встановлює статус відкладеного виконання за замовчуванням для нових транзакцій." + +#: utils/misc/guc.c:1642 +msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." +msgstr "Визначає, чи відкладати серіалізовану транзакцію \"лише читання\" до моменту, коли збій серіалізації буде виключений." + +#: utils/misc/guc.c:1652 +msgid "Enable row security." +msgstr "Вмикає захист на рівні рядків." + +#: utils/misc/guc.c:1653 +msgid "When enabled, row security will be applied to all users." +msgstr "Коли ввімкнено, захист на рівні рядків буде застосовано до всіх користувачів." + +#: utils/misc/guc.c:1661 +msgid "Check function bodies during CREATE FUNCTION." +msgstr "Перевіряти тіло функції під час CREATE FUNCTION." + +#: utils/misc/guc.c:1670 +msgid "Enable input of NULL elements in arrays." +msgstr "Дозволяє введення NULL елементів у масивах." + +#: utils/misc/guc.c:1671 +msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." +msgstr "Коли цей параметр ввімкнений, NULL без лапок при введенні до масиву сприймається як значення null; в іншому разі як рядок." + +#: utils/misc/guc.c:1687 +msgid "WITH OIDS is no longer supported; this can only be false." +msgstr "WITH OIDS більше не підтримується; це може бути помилковим." + +#: utils/misc/guc.c:1697 +msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." +msgstr "Запускає підпроцес записування виводу stderr і/або csvlogs до файлів журналу." + +#: utils/misc/guc.c:1706 +msgid "Truncate existing log files of same name during log rotation." +msgstr "Скорочувати існуючі файли журналу з тим самим іменем під час обертання журналу." + +#: utils/misc/guc.c:1717 +msgid "Emit information about resource usage in sorting." +msgstr "Виводити інформацію про використання ресурсу при сортуванні." + +#: utils/misc/guc.c:1731 +msgid "Generate debugging output for synchronized scanning." +msgstr "Створює налагодженні повідомлення для синхронного сканування." + +#: utils/misc/guc.c:1746 +msgid "Enable bounded sorting using heap sort." +msgstr "Вмикає обмежене сортування використовуючи динамічне сортування." + +#: utils/misc/guc.c:1759 +msgid "Emit WAL-related debugging output." +msgstr "Виводити налагодженні повідомлення пов'язані з WAL." + +#: utils/misc/guc.c:1771 +msgid "Datetimes are integer based." +msgstr "Дата й час на базі цілого числа." + +#: utils/misc/guc.c:1782 +msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." +msgstr "Встановлює обробку без урахування регістру імен користувачів Kerberos і GSSAPI." + +#: utils/misc/guc.c:1792 +msgid "Warn about backslash escapes in ordinary string literals." +msgstr "Попередження про спецсимволи \"\\\" в звичайних рядках." + +#: utils/misc/guc.c:1802 +msgid "Causes '...' strings to treat backslashes literally." +msgstr "Вмикає буквальну обробку символів \"\\\" в рядках '...'." + +#: utils/misc/guc.c:1813 +msgid "Enable synchronized sequential scans." +msgstr "Вмикає синхронізацію послідовного сканування." + +#: utils/misc/guc.c:1823 +msgid "Sets whether to include or exclude transaction with recovery target." +msgstr "Встановлює, включати чи виключати транзакції з метою відновлення." + +#: utils/misc/guc.c:1833 +msgid "Allows connections and queries during recovery." +msgstr "Дозволяє підключення і запити під час відновлення." + +#: utils/misc/guc.c:1843 +msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." +msgstr "Дозволяє зворотній зв'язок серверу hot standby з основним для уникнення конфліктів запитів." + +#: utils/misc/guc.c:1853 +msgid "Allows modifications of the structure of system tables." +msgstr "Дозволяє модифікації структури системних таблиць." + +#: utils/misc/guc.c:1864 +msgid "Disables reading from system indexes." +msgstr "Вимикає читання з системних індексів." + +#: utils/misc/guc.c:1865 +msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." +msgstr "Це не забороняє оновлення індексів, тож дана поведінка безпечна. Найгірший наслідок це сповільнення." + +#: utils/misc/guc.c:1876 +msgid "Enables backward compatibility mode for privilege checks on large objects." +msgstr "Вмикає режим зворотньої сумісності при перевірці прав для великих об'єктів." + +#: utils/misc/guc.c:1877 +msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." +msgstr "Пропускає перевірки прав при читанні або зміненні великих об'єктів, для сумісності з версіями PostgreSQL до 9.0." + +#: utils/misc/guc.c:1887 +msgid "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." +msgstr "Видає попередження для конструкцій, значення яких змінилось після PostgreSQL 9.4." + +#: utils/misc/guc.c:1897 +msgid "When generating SQL fragments, quote all identifiers." +msgstr "Генеруючи SQL-фрагменти, включати всі ідентифікатори в лапки." + +#: utils/misc/guc.c:1907 +msgid "Shows whether data checksums are turned on for this cluster." +msgstr "Показує, чи ввімкнена контрольна сума даних для цього кластеру." + +#: utils/misc/guc.c:1918 +msgid "Add sequence number to syslog messages to avoid duplicate suppression." +msgstr "Додає послідовне число до повідомлень syslog, щоб уникнути ігнорування дублікатів." + +#: utils/misc/guc.c:1928 +msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." +msgstr "Розділяє повідомлення, які передаються в syslog, рядками розміром не більше 1024 байт." + +#: utils/misc/guc.c:1938 +msgid "Controls whether Gather and Gather Merge also run subplans." +msgstr "Визначає, чи вузли зібрання і зібрання об'єднанням також виконають підплани." + +#: utils/misc/guc.c:1939 +msgid "Should gather nodes also run subplans, or just gather tuples?" +msgstr "Чи повинні вузли зібрання також виконувати підплани, або тільки збирати кортежі?" + +#: utils/misc/guc.c:1949 +msgid "Allow JIT compilation." +msgstr "Дозволити JIT-компіляцію." + +#: utils/misc/guc.c:1960 +msgid "Register JIT compiled function with debugger." +msgstr "Реєструвати JIT-скомпільовані функції в налагоджувачі." + +#: utils/misc/guc.c:1977 +msgid "Write out LLVM bitcode to facilitate JIT debugging." +msgstr "Виводити бітовий код LLVM для полегшення налагодження JIT." + +#: utils/misc/guc.c:1988 +msgid "Allow JIT compilation of expressions." +msgstr "Дозволити JIT-компіляцію виразів." + +#: utils/misc/guc.c:1999 +msgid "Register JIT compiled function with perf profiler." +msgstr "Реєструвати JIT-скомпільовані функції в профілювальнику perf." + +#: utils/misc/guc.c:2016 +msgid "Allow JIT compilation of tuple deforming." +msgstr "Дозволити JIT-компіляцію перетворення кортежів." + +#: utils/misc/guc.c:2027 +msgid "Whether to continue running after a failure to sync data files." +msgstr "Чи продовжувати виконання після помилки синхронізації файлів даних на диску." + +#: utils/misc/guc.c:2036 +msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." +msgstr "Встановлює чи повинен одержувач WAL створити тимчасовий слот реплікації, якщо постійний слот не налаштований." + +#: utils/misc/guc.c:2054 +msgid "Forces a switch to the next WAL file if a new file has not been started within N seconds." +msgstr "Примусово переключитися на наступний файл WAL, якщо новий файл не був розпочат за N секунд." + +#: utils/misc/guc.c:2065 +msgid "Waits N seconds on connection startup after authentication." +msgstr "Чекати N секунд при підключенні після автентифікації." + +#: utils/misc/guc.c:2066 utils/misc/guc.c:2624 +msgid "This allows attaching a debugger to the process." +msgstr "Це дозволяє підключити налагоджувач до процесу." + +#: utils/misc/guc.c:2075 +msgid "Sets the default statistics target." +msgstr "Встановлює мету статистики за замовчуванням." + +#: utils/misc/guc.c:2076 +msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." +msgstr "Це застосовується до стовпців таблиці, для котрих мета статистики не встановлена явно через ALTER TABLE SET STATISTICS." + +#: utils/misc/guc.c:2085 +msgid "Sets the FROM-list size beyond which subqueries are not collapsed." +msgstr "Встановлює розмір для списку FROM, при перевищені котрого вкладені запити не згортаються." + +#: utils/misc/guc.c:2087 +msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." +msgstr "Планувальник об'єднає вкладені запити з зовнішніми, якщо в отриманому списку FROM буде не більше заданої кількості елементів." + +#: utils/misc/guc.c:2098 +msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." +msgstr "Встановлює розмір для списку FROM, при перевищенні котрого конструкції JOIN не подаються у вигляді рядка." + +#: utils/misc/guc.c:2100 +msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." +msgstr "Планувальник буде подавати у вигляді рядка явні конструкції JOIN в списки FROM, допоки в отриманому списку не більше заданої кількості елементів." + +#: utils/misc/guc.c:2111 +msgid "Sets the threshold of FROM items beyond which GEQO is used." +msgstr "Встановлює граничне значення для елементів FROM, при перевищенні котрого використовується GEQO." + +#: utils/misc/guc.c:2121 +msgid "GEQO: effort is used to set the default for other GEQO parameters." +msgstr "GEQO: зусилля використовувались щоб встановити значення за замовчуванням для інших параметрів GEQO." + +#: utils/misc/guc.c:2131 +msgid "GEQO: number of individuals in the population." +msgstr "GEQO: кількість користувачів у популяції." + +#: utils/misc/guc.c:2132 utils/misc/guc.c:2142 +msgid "Zero selects a suitable default value." +msgstr "Нуль вибирає придатне значення за замовчуванням." + +#: utils/misc/guc.c:2141 +msgid "GEQO: number of iterations of the algorithm." +msgstr "GEQO: кількість ітерацій в алгоритмі." + +#: utils/misc/guc.c:2153 +msgid "Sets the time to wait on a lock before checking for deadlock." +msgstr "Встановлює час очікування в блокуванні до перевірки на взаємне блокування." + +#: utils/misc/guc.c:2164 +msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." +msgstr "Встановлює максимальну затримку до скасування запитів, коли hot standby сервер обробляє архівні дані WAL." + +#: utils/misc/guc.c:2175 +msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." +msgstr "Встановлює максимальну затримку до скасування запитів, коли hot standby сервер обробляє дані WAL з потоку." + +#: utils/misc/guc.c:2186 +msgid "Sets the minimum delay for applying changes during recovery." +msgstr "Встановлює мінімальну затримку для застосування змін під час відновлення." + +#: utils/misc/guc.c:2197 +msgid "Sets the maximum interval between WAL receiver status reports to the sending server." +msgstr "Встановлює максимальний інтервал між звітами про стан одержувачів WAL для серверу надсилання." + +#: utils/misc/guc.c:2208 +msgid "Sets the maximum wait time to receive data from the sending server." +msgstr "Встановлює максимальний час очікування для отримання даних з серверу надсилання." + +#: utils/misc/guc.c:2219 +msgid "Sets the maximum number of concurrent connections." +msgstr "Встановлює максимальну кілкість паралельних підключень." + +#: utils/misc/guc.c:2230 +msgid "Sets the number of connection slots reserved for superusers." +msgstr "Встановлює кількість зарезервованих слотів підключень для суперкористувачів." + +#: utils/misc/guc.c:2244 +msgid "Sets the number of shared memory buffers used by the server." +msgstr "Встановлює кількість буферів спільної пам'яті, використовуваних сервером." + +#: utils/misc/guc.c:2255 +msgid "Sets the maximum number of temporary buffers used by each session." +msgstr "Встановлює максимальну кількість використовуваних тимчасових буферів, для кожного сеансу." + +#: utils/misc/guc.c:2266 +msgid "Sets the TCP port the server listens on." +msgstr "Встановлює TCP-порт для роботи серверу." + +#: utils/misc/guc.c:2276 +msgid "Sets the access permissions of the Unix-domain socket." +msgstr "Встановлює дозволи на доступ для Unix-сокету." + +#: utils/misc/guc.c:2277 +msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" +msgstr "Для Unix-сокетів використовується звичний набір дозволів, як у файлових системах Unix. Очікується, що значення параметра вказується у формі, яка прийнята для системних викликів chmod і umask. (Щоб використати звичний вісімковий формат, додайте в початок 0 (нуль).)" + +#: utils/misc/guc.c:2291 +msgid "Sets the file permissions for log files." +msgstr "Встановлює права дозволу для файлів журналу." + +#: utils/misc/guc.c:2292 +msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" +msgstr "Очікується, що значення параметру буде вказано в числовому форматі, який сприймається системними викликами chmod і umask. (Щоб використати звичний вісімковий формат, додайте в початок 0 (нуль).)" + +#: utils/misc/guc.c:2306 +msgid "Mode of the data directory." +msgstr "Режим каталогу даних." + +#: utils/misc/guc.c:2307 +msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" +msgstr "Значення параметру вказується в числовому форматі, який сприймається системними викликами chmod і umask. (Щоб використати звичний вісімковий формат, додайте в початок 0 (нуль).)" + +#: utils/misc/guc.c:2320 +msgid "Sets the maximum memory to be used for query workspaces." +msgstr "Встановлює максимальний об'єм пам'яті для робочих просторів запитів." + +#: utils/misc/guc.c:2321 +msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." +msgstr "Такий об'єм пам'яті може використовуватись кожною внутрішньою операцією сортування і таблицею гешування до переключення на тимчасові файли на диску." + +#: utils/misc/guc.c:2333 +msgid "Sets the maximum memory to be used for maintenance operations." +msgstr "Встановлює максимальний об'єм пам'яті для операцій по обслуговуванню." + +#: utils/misc/guc.c:2334 +msgid "This includes operations such as VACUUM and CREATE INDEX." +msgstr "Це включає такі операції як VACUUM і CREATE INDEX." + +#: utils/misc/guc.c:2344 +msgid "Sets the maximum memory to be used for logical decoding." +msgstr "Встановлює максимальний об'єм пам'яті для логічного декодування." + +#: utils/misc/guc.c:2345 +msgid "This much memory can be used by each internal reorder buffer before spilling to disk." +msgstr "Ця велика кількість пам'яті може бути використана кожним внутрішнім перевпорядковуючим буфером перед записом на диск." + +#: utils/misc/guc.c:2361 +msgid "Sets the maximum stack depth, in kilobytes." +msgstr "Встановлює максимальну глибину стека, в КБ." + +#: utils/misc/guc.c:2372 +msgid "Limits the total size of all temporary files used by each process." +msgstr "Обмежує загальний розмір всіх тимчасових файлів, які використовуються кожним процесом." + +#: utils/misc/guc.c:2373 +msgid "-1 means no limit." +msgstr "-1 вимикає обмеження." + +#: utils/misc/guc.c:2383 +msgid "Vacuum cost for a page found in the buffer cache." +msgstr "Вартість очистки для сторінки, яка була знайдена в буферному кеші." + +#: utils/misc/guc.c:2393 +msgid "Vacuum cost for a page not found in the buffer cache." +msgstr "Вартість очистки для сторінки, яка не була знайдена в буферному кеші." + +#: utils/misc/guc.c:2403 +msgid "Vacuum cost for a page dirtied by vacuum." +msgstr "Вартість очистки для сторінки, яка не була \"брудною\"." + +#: utils/misc/guc.c:2413 +msgid "Vacuum cost amount available before napping." +msgstr "Кількість доступних витрат вакууму перед від'єднанням." + +#: utils/misc/guc.c:2423 +msgid "Vacuum cost amount available before napping, for autovacuum." +msgstr "Кількість доступних витрат вакууму перед від'єднанням, для автовакууму." + +#: utils/misc/guc.c:2433 +msgid "Sets the maximum number of simultaneously open files for each server process." +msgstr "Встановлює максимальну кількість одночасно відкритих файлів для кожного процесу." + +#: utils/misc/guc.c:2446 +msgid "Sets the maximum number of simultaneously prepared transactions." +msgstr "Встановлює максимальну кількість одночасно підготовлених транзакцій." + +#: utils/misc/guc.c:2457 +msgid "Sets the minimum OID of tables for tracking locks." +msgstr "Встановлює мінімальний OID таблиць, для яких відстежуються блокування." + +#: utils/misc/guc.c:2458 +msgid "Is used to avoid output on system tables." +msgstr "Використовується для уникнення системних таблиць." + +#: utils/misc/guc.c:2467 +msgid "Sets the OID of the table with unconditionally lock tracing." +msgstr "Встановлює OID таблиці для безумовного трасування блокувань." + +#: utils/misc/guc.c:2479 +msgid "Sets the maximum allowed duration of any statement." +msgstr "Встановлює максимальну тривалість для будь-якого оператору." + +#: utils/misc/guc.c:2480 utils/misc/guc.c:2491 utils/misc/guc.c:2502 +msgid "A value of 0 turns off the timeout." +msgstr "Значення 0 (нуль) вимикає тайм-аут." + +#: utils/misc/guc.c:2490 +msgid "Sets the maximum allowed duration of any wait for a lock." +msgstr "Встановлює максимально дозволену тривалість очікування блокувань." + +#: utils/misc/guc.c:2501 +msgid "Sets the maximum allowed duration of any idling transaction." +msgstr "Встановлює максимально дозволену тривалість для транзакцій, які простоюють." + +#: utils/misc/guc.c:2512 +msgid "Minimum age at which VACUUM should freeze a table row." +msgstr "Мінімальний вік рядків таблиці, при котрому VACUUM зможе їх закріпити." + +#: utils/misc/guc.c:2522 +msgid "Age at which VACUUM should scan whole table to freeze tuples." +msgstr "Вік, при котрому VACUUM повинен сканувати всю таблицю, щоб закріпити кортежі." + +#: utils/misc/guc.c:2532 +msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." +msgstr "Мінімальний вік, при котрому VACUUM повинен закріпити MultiXactId в рядку таблиці." + +#: utils/misc/guc.c:2542 +msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." +msgstr "Вік Multixact, при котрому VACUUM повинен сканувати всю таблицю, щоб закріпити кортежі." + +#: utils/misc/guc.c:2552 +msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." +msgstr "Визначає, кількість транзакцій які потрібно буде відкласти, виконуючи VACUUM і HOT очищення." + +#: utils/misc/guc.c:2565 +msgid "Sets the maximum number of locks per transaction." +msgstr "Встановлює максимальну кілкість блокувань на транзакцію." + +#: utils/misc/guc.c:2566 +msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." +msgstr "Розмір спільної таблиці блокувань вибирається з припущення, що в один момент часу буде потрібно заблокувати не більше ніж max_locks_per_transaction * max_connections різних об'єктів." + +#: utils/misc/guc.c:2577 +msgid "Sets the maximum number of predicate locks per transaction." +msgstr "Встановлює максимальну кількість предикатних блокувань на транзакцію." + +#: utils/misc/guc.c:2578 +msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." +msgstr "Розмір спільної таблиці предикатних блокувань вибирається з припущення, що в один момент часу буде потрібно заблокувати не більше ніж max_locks_per_transaction * max_connections різних об'єктів." + +#: utils/misc/guc.c:2589 +msgid "Sets the maximum number of predicate-locked pages and tuples per relation." +msgstr "Встановлює максимальну кількість сторінок і кортежів, блокованих предикатними блокуваннями в одному відношенні." + +#: utils/misc/guc.c:2590 +msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." +msgstr "Якщо одним підключенням блокується більше цієї загальної кількості сторінок і кортежів, ці блокування замінюються блокуванням на рівні відношення." + +#: utils/misc/guc.c:2600 +msgid "Sets the maximum number of predicate-locked tuples per page." +msgstr "Встановлює максимальну кількість кортежів, блокованих предикатними блокуваннями в одній сторінці." + +#: utils/misc/guc.c:2601 +msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." +msgstr "Якщо одним підключенням блокується більше цієї кількості кортежів на одній і тій же сторінці, ці блокування замінюються блокуванням на рівні сторінки." + +#: utils/misc/guc.c:2611 +msgid "Sets the maximum allowed time to complete client authentication." +msgstr "Встановлює максимально допустимий час, за котрий клієнт повинен завершити автентифікацію." + +#: utils/misc/guc.c:2623 +msgid "Waits N seconds on connection startup before authentication." +msgstr "Чекати N секунд при підключенні до автентифікації." + +#: utils/misc/guc.c:2634 +msgid "Sets the size of WAL files held for standby servers." +msgstr "Встановлює розмір WAL файлів, які потрібно зберігати для резервних серверів." + +#: utils/misc/guc.c:2645 +msgid "Sets the minimum size to shrink the WAL to." +msgstr "Встановлює мінімальний розмір WAL при стисканні." + +#: utils/misc/guc.c:2657 +msgid "Sets the WAL size that triggers a checkpoint." +msgstr "Встановлює розмір WAL, при котрому ініціюється контрольна точка." + +#: utils/misc/guc.c:2669 +msgid "Sets the maximum time between automatic WAL checkpoints." +msgstr "Встановлює максимальний час між автоматичними контрольними точками WAL." + +#: utils/misc/guc.c:2680 +msgid "Enables warnings if checkpoint segments are filled more frequently than this." +msgstr "Видає попередження, якщо сегменти контрольних точок заповнуються частіше." + +#: utils/misc/guc.c:2682 +msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." +msgstr "Записує в запис серверу повідомлення, якщо контрольні точки, викликані переповненням файлів сегментів контрольних точок, з'являються частіше. 0 (нуль) вимикає попередження." + +#: utils/misc/guc.c:2694 utils/misc/guc.c:2910 utils/misc/guc.c:2957 +msgid "Number of pages after which previously performed writes are flushed to disk." +msgstr "Число сторінок, після досягнення якого раніше виконані операції запису скидаються на диск." + +#: utils/misc/guc.c:2705 +msgid "Sets the number of disk-page buffers in shared memory for WAL." +msgstr "Встановлює кількість буферів дискових сторінок в спільній пам'яті для WAL." + +#: utils/misc/guc.c:2716 +msgid "Time between WAL flushes performed in the WAL writer." +msgstr "Час між скиданням WAL в процесі, записуючого WAL." + +#: utils/misc/guc.c:2727 +msgid "Amount of WAL written out by WAL writer that triggers a flush." +msgstr "Обсяг WAL, оброблений пишучим WAL процесом, при котрому ініціюється скидання журналу на диск." + +#: utils/misc/guc.c:2738 +msgid "Size of new file to fsync instead of writing WAL." +msgstr "Розмір нового файлу для fsync замість записування WAL." + +#: utils/misc/guc.c:2749 +msgid "Sets the maximum number of simultaneously running WAL sender processes." +msgstr "Встановлює максимальну кількість одночасно працюючих процесів передачі WAL." + +#: utils/misc/guc.c:2760 +msgid "Sets the maximum number of simultaneously defined replication slots." +msgstr "Встановлює максимальну кількість одночасно визначених слотів реплікації." + +#: utils/misc/guc.c:2770 +msgid "Sets the maximum WAL size that can be reserved by replication slots." +msgstr "Встановлює максимальний розмір WAL, який може бути зарезервований слотами реплікації." + +#: utils/misc/guc.c:2771 +msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." +msgstr "Слоти реплікації будуть позначені як невдалі, і розблоковані сегменти для видалення або переробки, якщо цю кількість місця на диску займає WAL." + +#: utils/misc/guc.c:2783 +msgid "Sets the maximum time to wait for WAL replication." +msgstr "Встановлює максимальний час очікування реплікації WAL." + +#: utils/misc/guc.c:2794 +msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." +msgstr "Встановлює затримку в мілісекундах між затвердженням транзакцій і скиданням WAL на диск." + +#: utils/misc/guc.c:2806 +msgid "Sets the minimum concurrent open transactions before performing commit_delay." +msgstr "Встановлює мінімальну кількість одночасно відкритих транзакцій до виконання commit_delay." + +#: utils/misc/guc.c:2817 +msgid "Sets the number of digits displayed for floating-point values." +msgstr "Встановлює кількість виведених чисел для значень з плаваючою точкою." + +#: utils/misc/guc.c:2818 +msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." +msgstr "Це впливає на типи реальних, подвійної точності та геометричних даних. Нульове або від'ємне значення параметру додається до стандартної кількості цифр (FLT_DIG або DBL_DIG у відповідних випадках). Будь-яке значення більше нуля, обирає точний режим виводу." + +#: utils/misc/guc.c:2830 +msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." +msgstr "Встановлює мінімальний час виконання, понад якого вибірка тверджень буде записуватись. Вибірка визначається log_statement_sample_rate." + +#: utils/misc/guc.c:2833 +msgid "Zero logs a sample of all queries. -1 turns this feature off." +msgstr "При 0 (нуль) фіксує зразок всіх запитів. -1 вимикає цю функцію." + +#: utils/misc/guc.c:2843 +msgid "Sets the minimum execution time above which all statements will be logged." +msgstr "Встановлює мінімальний час виконання, понад якого всі твердження будуть записуватись." + +#: utils/misc/guc.c:2845 +msgid "Zero prints all queries. -1 turns this feature off." +msgstr "При 0 (нуль) протоколюються всі запити. -1 вимикає цю функцію." + +#: utils/misc/guc.c:2855 +msgid "Sets the minimum execution time above which autovacuum actions will be logged." +msgstr "Встановлює мінімальний час виконання автоочистки, при перевищенні котрого ця дія фіксується в протоколі." + +#: utils/misc/guc.c:2857 +msgid "Zero prints all actions. -1 turns autovacuum logging off." +msgstr "При 0 (нуль) протоколюються всі дії автоочистки. -1 вимикає журналювання автоочистки." + +#: utils/misc/guc.c:2867 +msgid "When logging statements, limit logged parameter values to first N bytes." +msgstr "Під час журналювання тверджень, обмежте записуваних параметрів до перших N байт." + +#: utils/misc/guc.c:2868 utils/misc/guc.c:2879 +msgid "-1 to print values in full." +msgstr "-1 для друку значень в повному вигляді." + +#: utils/misc/guc.c:2878 +msgid "When reporting an error, limit logged parameter values to first N bytes." +msgstr "Під час звітування про помилку, обмежте значення записуваних параметрів до перших N байт." + +#: utils/misc/guc.c:2889 +msgid "Background writer sleep time between rounds." +msgstr "Час призупинення в процесі фонового запису між підходами." + +#: utils/misc/guc.c:2900 +msgid "Background writer maximum number of LRU pages to flush per round." +msgstr "Максимальна кількість LRU-сторінок, які скидаються за один підхід, в процесі фонового запису." + +#: utils/misc/guc.c:2923 +msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." +msgstr "Кількість одночасних запитів, які можуть бути ефективно оброблені дисковою підсистемою." + +#: utils/misc/guc.c:2924 +msgid "For RAID arrays, this should be approximately the number of drive spindles in the array." +msgstr "Для RAID-масивів це повинно приблизно дорівнювати кількості фізичних дисків у масиві." + +#: utils/misc/guc.c:2941 +msgid "A variant of effective_io_concurrency that is used for maintenance work." +msgstr "Варіант effective_io_concurrency, що використовується для роботи з обслуговування." + +#: utils/misc/guc.c:2970 +msgid "Maximum number of concurrent worker processes." +msgstr "Максимальна кількість одночасно працюючих процесів." + +#: utils/misc/guc.c:2982 +msgid "Maximum number of logical replication worker processes." +msgstr "Максимальна кількість працюючих процесів логічної реплікації." + +#: utils/misc/guc.c:2994 +msgid "Maximum number of table synchronization workers per subscription." +msgstr "Максимальна кількість процесів синхронізації таблиць для однієї підписки." + +#: utils/misc/guc.c:3004 +msgid "Automatic log file rotation will occur after N minutes." +msgstr "Автоматичне обертання файлу протоколу буде здійснюватись через кожні N хвилин." + +#: utils/misc/guc.c:3015 +msgid "Automatic log file rotation will occur after N kilobytes." +msgstr "Автоматичне обертання файлу протоколу буде здійснюватись після кожних N кілобайт." + +#: utils/misc/guc.c:3026 +msgid "Shows the maximum number of function arguments." +msgstr "Показує максимальну кількість аргументів функції." + +#: utils/misc/guc.c:3037 +msgid "Shows the maximum number of index keys." +msgstr "Показує максимальну кількість ключів в індексі." + +#: utils/misc/guc.c:3048 +msgid "Shows the maximum identifier length." +msgstr "Показує максимальну довжину ідентифікатора." + +#: utils/misc/guc.c:3059 +msgid "Shows the size of a disk block." +msgstr "Показує розмір дискового блоку." + +#: utils/misc/guc.c:3070 +msgid "Shows the number of pages per disk file." +msgstr "Показує кількість сторінок в одному дисковому файлі." + +#: utils/misc/guc.c:3081 +msgid "Shows the block size in the write ahead log." +msgstr "Показує розмір блоку в журналі WAL." + +#: utils/misc/guc.c:3092 +msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." +msgstr "Встановлює час очікування перед повторною спробою звертання до WAL після невдачі." + +#: utils/misc/guc.c:3104 +msgid "Shows the size of write ahead log segments." +msgstr "Показує розмір сегментів WAL." + +#: utils/misc/guc.c:3117 +msgid "Time to sleep between autovacuum runs." +msgstr "Час призупинення між запусками автоочистки." + +#: utils/misc/guc.c:3127 +msgid "Minimum number of tuple updates or deletes prior to vacuum." +msgstr "Мінімальна кількість оновлень або видалень кортежів перед очисткою." + +#: utils/misc/guc.c:3136 +msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." +msgstr "Мінімальна кількість вставлених кортежів перед очищенням, або -1 щоб вимкнути очищення після вставки." + +#: utils/misc/guc.c:3145 +msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." +msgstr "Мінімальна кількість вставлень, оновлень або видалень кортежів перед аналізом." + +#: utils/misc/guc.c:3155 +msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." +msgstr "Вік, при котрому необхідна автоочистка таблиці для запобігання зациклення ID транзакцій." + +#: utils/misc/guc.c:3166 +msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." +msgstr "Вік Multixact, при котрому необхідна автоочистка таблиці для запобігання зациклення multixact." + +#: utils/misc/guc.c:3176 +msgid "Sets the maximum number of simultaneously running autovacuum worker processes." +msgstr "Встановлює максимальну кількість одночасно працюючих робочих процесів автоочистки." + +#: utils/misc/guc.c:3186 +msgid "Sets the maximum number of parallel processes per maintenance operation." +msgstr "Встановлює максимальну кількість паралельних процесів на одну операцію обслуговування." + +#: utils/misc/guc.c:3196 +msgid "Sets the maximum number of parallel processes per executor node." +msgstr "Встановлює максимальну кількість паралельних процесів на вузол виконавця." + +#: utils/misc/guc.c:3207 +msgid "Sets the maximum number of parallel workers that can be active at one time." +msgstr "Встановлює максимальну кількість паралельних процесів, які можуть бути активні в один момент." + +#: utils/misc/guc.c:3218 +msgid "Sets the maximum memory to be used by each autovacuum worker process." +msgstr "Встановлює максимальний об'єм пам'яті для кожного робочого процесу автоочистки." + +#: utils/misc/guc.c:3229 +msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." +msgstr "Термін, після закінчення котрого знімок вважається занадто старим для отримання сторінок, змінених після створення знімку." + +#: utils/misc/guc.c:3230 +msgid "A value of -1 disables this feature." +msgstr "Значення -1 вимикає цю функцію." + +#: utils/misc/guc.c:3240 +msgid "Time between issuing TCP keepalives." +msgstr "Час між видачею TCP keepalives." + +#: utils/misc/guc.c:3241 utils/misc/guc.c:3252 utils/misc/guc.c:3376 +msgid "A value of 0 uses the system default." +msgstr "Значення 0 (нуль) використовує систему за замовчуванням." + +#: utils/misc/guc.c:3251 +msgid "Time between TCP keepalive retransmits." +msgstr "Час між повтореннями TCP keepalive." + +#: utils/misc/guc.c:3262 +msgid "SSL renegotiation is no longer supported; this can only be 0." +msgstr "Повторне узгодження SSL більше не підтримується; єдине допустиме значення - 0 (нуль)." + +#: utils/misc/guc.c:3273 +msgid "Maximum number of TCP keepalive retransmits." +msgstr "Максимальна кількість повторень TCP keepalive." + +#: utils/misc/guc.c:3274 +msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." +msgstr "Цей параметр визначає, яка кількість послідовних повторень keepalive може бути втрачена, перед тим як підключення буде вважатись \"мертвим\". Значення 0 (нуль) використовує систему за замовчуванням." + +#: utils/misc/guc.c:3285 +msgid "Sets the maximum allowed result for exact search by GIN." +msgstr "Встановлює максимально допустимий результат для точного пошуку з використанням GIN." + +#: utils/misc/guc.c:3296 +msgid "Sets the planner's assumption about the total size of the data caches." +msgstr "Встановлює планувальнику припустимий загальний розмір кешей даних." + +#: utils/misc/guc.c:3297 +msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." +msgstr "Мається на увазі загальний розмір кешей (кеша ядра і спільних буферів), які використовуються для файлів даних PostgreSQL. Розмір задається в дискових сторінках, звичайно це 8 КБ." + +#: utils/misc/guc.c:3308 +msgid "Sets the minimum amount of table data for a parallel scan." +msgstr "Встановлює мінімальний обсяг даних в таблиці для паралельного сканування." + +#: utils/misc/guc.c:3309 +msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." +msgstr "Якщо планувальник вважає, що він прочитає меньше сторінок таблиці, ніж задано цим обмеженням, паралельне сканування не буде розглядатись." + +#: utils/misc/guc.c:3319 +msgid "Sets the minimum amount of index data for a parallel scan." +msgstr "Встановлює мінімальний обсяг даних в індексі для паралельного сканування." + +#: utils/misc/guc.c:3320 +msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." +msgstr "Якщо планувальник вважає, що він прочитає меньше сторінок індексу, ніж задано цим обмеженням, паралельне сканування не буде розглядатись." + +#: utils/misc/guc.c:3331 +msgid "Shows the server version as an integer." +msgstr "Показує версію сервера у вигляді цілого числа." + +#: utils/misc/guc.c:3342 +msgid "Log the use of temporary files larger than this number of kilobytes." +msgstr "Записує до протоколу перевищення тимчасовими файлами заданого розміру в КБ." + +#: utils/misc/guc.c:3343 +msgid "Zero logs all files. The default is -1 (turning this feature off)." +msgstr "0 (нуль) фіксує всі файли. -1 вимикає цю функцію (за замовчуванням)." + +#: utils/misc/guc.c:3353 +msgid "Sets the size reserved for pg_stat_activity.query, in bytes." +msgstr "Встановлює розмір, зарезервований для pg_stat_activity.query, в байтах." + +#: utils/misc/guc.c:3364 +msgid "Sets the maximum size of the pending list for GIN index." +msgstr "Встановлює максимальний розмір списку-очікування для GIN-індексу." + +#: utils/misc/guc.c:3375 +msgid "TCP user timeout." +msgstr "Таймаут користувача TCP." + +#: utils/misc/guc.c:3395 +msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." +msgstr "Встановлює для планувальника орієнтир вартості послідовного читання дискових сторінок." + +#: utils/misc/guc.c:3406 +msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." +msgstr "Встановлює для планувальника орієнтир вартості непослідовного читання дискових сторінок." + +#: utils/misc/guc.c:3417 +msgid "Sets the planner's estimate of the cost of processing each tuple (row)." +msgstr "Встановлює для планувальника орієнтир вартості обробки кожного кортежу (рядка)." + +#: utils/misc/guc.c:3428 +msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." +msgstr "Встановлює для планувальника орієнтир вартості обробки кожного елементу індекса під час сканування індексу." + +#: utils/misc/guc.c:3439 +msgid "Sets the planner's estimate of the cost of processing each operator or function call." +msgstr "Встановлює для планувальника орієнтир вартості обробки кожного оператора або виклику функції." + +#: utils/misc/guc.c:3450 +msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." +msgstr "Встановлює для планувальника орієнтир вартості передавання кожного кортежу (рядка) від робочого процесу обслуговуючому процесу." + +#: utils/misc/guc.c:3461 +msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." +msgstr "Встановлює для планувальника орієнтир вартості запуску робочих процесів для паралельного запиту." + +#: utils/misc/guc.c:3473 +msgid "Perform JIT compilation if query is more expensive." +msgstr "Якщо запит дорожчий, виконується JIT-компіляція." + +#: utils/misc/guc.c:3474 +msgid "-1 disables JIT compilation." +msgstr "-1 вимикає JIT-компіляцію." + +#: utils/misc/guc.c:3484 +msgid "Optimize JITed functions if query is more expensive." +msgstr "Якщо запит дорожчий, оптимізуютьсяв JITed-функції." + +#: utils/misc/guc.c:3485 +msgid "-1 disables optimization." +msgstr "-1 вимикає оптимізацію." + +#: utils/misc/guc.c:3495 +msgid "Perform JIT inlining if query is more expensive." +msgstr "Якщо запит дорожчий, виконується вбудовування JIT." + +#: utils/misc/guc.c:3496 +msgid "-1 disables inlining." +msgstr "-1 вимикає вбудовування." + +#: utils/misc/guc.c:3506 +msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." +msgstr "Встановлює для планувальника орієнтир частки необхідних рядків курсора в загальній кількості." + +#: utils/misc/guc.c:3518 +msgid "GEQO: selective pressure within the population." +msgstr "GEQO: вибірковий тиск в популяції." + +#: utils/misc/guc.c:3529 +msgid "GEQO: seed for random path selection." +msgstr "GEQO: відправна значення для випадкового вибору шляху." + +#: utils/misc/guc.c:3540 +msgid "Multiple of work_mem to use for hash tables." +msgstr "Декілька work_mem для використання геш-таблиць." + +#: utils/misc/guc.c:3551 +msgid "Multiple of the average buffer usage to free per round." +msgstr "Множник для середньої кількості використаних буферів, який визначає кількість буферів, які звільняються за один підхід." + +#: utils/misc/guc.c:3561 +msgid "Sets the seed for random-number generation." +msgstr "Встановлює відправне значення для генератора випадкових чисел." + +#: utils/misc/guc.c:3572 +msgid "Vacuum cost delay in milliseconds." +msgstr "Затримка вартості очистки в мілісекундах." + +#: utils/misc/guc.c:3583 +msgid "Vacuum cost delay in milliseconds, for autovacuum." +msgstr "Затримка вартості очистки в мілісекундах, для автоочистки." + +#: utils/misc/guc.c:3594 +msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." +msgstr "Кількість оновлень або видалень кортежів до reltuples, яка визначає потребу в очистці." + +#: utils/misc/guc.c:3604 +msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." +msgstr "Кількість вставлень кортежів до reltuples, яка визначає потребу в очистці." + +#: utils/misc/guc.c:3614 +msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." +msgstr "Кількість вставлень, оновлень або видалень кортежів до reltuples, яка визначає потребу в аналізі." + +#: utils/misc/guc.c:3624 +msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." +msgstr "Час тривалості очищення \"брудних\" буферів під час контрольної точки до інтервалу контрольних точок." + +#: utils/misc/guc.c:3634 +msgid "Number of tuple inserts prior to index cleanup as a fraction of reltuples." +msgstr "Кількість вставлень кортежів до reltuples, яка визначає потребу в очистці індекса." + +#: utils/misc/guc.c:3644 +msgid "Fraction of statements exceeding log_min_duration_sample to be logged." +msgstr "Частка тверджень, перевищує log_min_duration_sample, що підлягає запису." + +#: utils/misc/guc.c:3645 +msgid "Use a value between 0.0 (never log) and 1.0 (always log)." +msgstr "Використайте значення між 0.0 (ніколи не записувати) і 1.0 (завжди записувати)." + +#: utils/misc/guc.c:3654 +msgid "Set the fraction of transactions to log for new transactions." +msgstr "Встановіть частину транзакцій для запису нових транзакцій." + +#: utils/misc/guc.c:3655 +msgid "Logs all statements from a fraction of transactions. Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." +msgstr "Журналює всі вирази з частини транзакцій. Використайте значення між 0.0 (ніколи не записувати) і 1.0 (записувати всі вирази для всіх транзакцій)." + +#: utils/misc/guc.c:3675 +msgid "Sets the shell command that will be called to archive a WAL file." +msgstr "Встановлює команду оболонки, яка буде викликатись для архівації файлу WAL." + +#: utils/misc/guc.c:3685 +msgid "Sets the shell command that will be called to retrieve an archived WAL file." +msgstr "Встановлює команду оболонки, яка буде викликана для отримання архівованого файлу WAL." + +#: utils/misc/guc.c:3695 +msgid "Sets the shell command that will be executed at every restart point." +msgstr "Встановлює команду оболонки, яка буде виконуватися в кожній точці перезапуску." + +#: utils/misc/guc.c:3705 +msgid "Sets the shell command that will be executed once at the end of recovery." +msgstr "Встановлює команду оболонки, яка буде виконуватися один раз в кінці відновлення." + +#: utils/misc/guc.c:3715 +msgid "Specifies the timeline to recover into." +msgstr "Вказує лінію часу для відновлення." + +#: utils/misc/guc.c:3725 +msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." +msgstr "Встановіть на \"негайно\" щоб закінчити відновлення як тільки буде досягнуто узгодженого стану." + +#: utils/misc/guc.c:3734 +msgid "Sets the transaction ID up to which recovery will proceed." +msgstr "Встановлює ідентифікатор транзакції, до якої буде продовжуватися відновлення." + +#: utils/misc/guc.c:3743 +msgid "Sets the time stamp up to which recovery will proceed." +msgstr "Встановлює позначку часу, до якої буде продовжуватися відновлення." + +#: utils/misc/guc.c:3752 +msgid "Sets the named restore point up to which recovery will proceed." +msgstr "Встановлює назву точки відновлення, до якої буде продовжуватися відновлення." + +#: utils/misc/guc.c:3761 +msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." +msgstr "Встановлює номер LSN розташування випереджувального журналювання, до якого буде продовжуватися відновлення." + +#: utils/misc/guc.c:3771 +msgid "Specifies a file name whose presence ends recovery in the standby." +msgstr "Вказує назву файлу, наявність якого закінчує відновлення в режимі очікування." + +#: utils/misc/guc.c:3781 +msgid "Sets the connection string to be used to connect to the sending server." +msgstr "Встановлює рядок підключення який буде використовуватися для підключення до серверу надсилання." + +#: utils/misc/guc.c:3792 +msgid "Sets the name of the replication slot to use on the sending server." +msgstr "Встановлює назву слота реплікації, для використання на сервері надсилання." + +#: utils/misc/guc.c:3802 +msgid "Sets the client's character set encoding." +msgstr "Встановлює кодування символів, використовуване клієнтом." + +#: utils/misc/guc.c:3813 +msgid "Controls information prefixed to each log line." +msgstr "Визначає інформацію префікса кожного рядка протокола." + +#: utils/misc/guc.c:3814 +msgid "If blank, no prefix is used." +msgstr "При пустому значенні, префікс також відсутній." + +#: utils/misc/guc.c:3823 +msgid "Sets the time zone to use in log messages." +msgstr "Встановлює часовий пояс для виведення часу в повідомленях протокола." + +#: utils/misc/guc.c:3833 +msgid "Sets the display format for date and time values." +msgstr "Встановлює формат виведення значень часу і дат." + +#: utils/misc/guc.c:3834 +msgid "Also controls interpretation of ambiguous date inputs." +msgstr "Також визначає багатозначні задані дати, які вводяться." + +#: utils/misc/guc.c:3845 +msgid "Sets the default table access method for new tables." +msgstr "Встановлює метод доступу до таблиці за замовчуванням для нових таблиць." + +#: utils/misc/guc.c:3856 +msgid "Sets the default tablespace to create tables and indexes in." +msgstr "Встановлює табличний простір за замовчуванням, для створення таблиць і індексів." + +#: utils/misc/guc.c:3857 +msgid "An empty string selects the database's default tablespace." +msgstr "Пустий рядок вибирає табличний простір за замовчуванням бази даних." + +#: utils/misc/guc.c:3867 +msgid "Sets the tablespace(s) to use for temporary tables and sort files." +msgstr "Встановлює табличний простір(простори) для використання в тимчасових таблицях і файлах сортування." + +#: utils/misc/guc.c:3878 +msgid "Sets the path for dynamically loadable modules." +msgstr "Встановлює шлях для динамічно завантажуваних модулів." + +#: utils/misc/guc.c:3879 +msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." +msgstr "Якщо динамічно завантажений модуль потрібно відкрити і у вказаному імені немає компонента каталогу (наприклад, ім'я не містить символ \"/\"), система буде шукати цей шлях у вказаному файлі." + +#: utils/misc/guc.c:3892 +msgid "Sets the location of the Kerberos server key file." +msgstr "Встановлює розташування файлу з ключем Kerberos для даного сервера." + +#: utils/misc/guc.c:3903 +msgid "Sets the Bonjour service name." +msgstr "Встановлює ім'я служби Bonjour." + +#: utils/misc/guc.c:3915 +msgid "Shows the collation order locale." +msgstr "Показує порядок локалізації параметра сортування." + +#: utils/misc/guc.c:3926 +msgid "Shows the character classification and case conversion locale." +msgstr "Показує класифікацію символу і перетворення локалізації." + +#: utils/misc/guc.c:3937 +msgid "Sets the language in which messages are displayed." +msgstr "Встановлює мову виведених повідомлень." + +#: utils/misc/guc.c:3947 +msgid "Sets the locale for formatting monetary amounts." +msgstr "Встановлює локалізацію для форматування грошових сум." + +#: utils/misc/guc.c:3957 +msgid "Sets the locale for formatting numbers." +msgstr "Встановлює локалізацію для форматування чисел." + +#: utils/misc/guc.c:3967 +msgid "Sets the locale for formatting date and time values." +msgstr "Встановлює локалізацію для форматування значень дати і часу." + +#: utils/misc/guc.c:3977 +msgid "Lists shared libraries to preload into each backend." +msgstr "Список спільних бібліотек, попередньо завантажених до кожного внутрішнього серверу." + +#: utils/misc/guc.c:3988 +msgid "Lists shared libraries to preload into server." +msgstr "Список спільних бібліотек, попередньо завантажених до серверу." + +#: utils/misc/guc.c:3999 +msgid "Lists unprivileged shared libraries to preload into each backend." +msgstr "Список непривілейованих спільних бібліотек, попередньо завантажених до кожного внутрішнього серверу." + +#: utils/misc/guc.c:4010 +msgid "Sets the schema search order for names that are not schema-qualified." +msgstr "Встановлює порядок пошуку схеми для імен, які не є схемо-кваліфікованими." + +#: utils/misc/guc.c:4022 +msgid "Sets the server (database) character set encoding." +msgstr "Встановлює кодування символів сервера (бази даних)." + +#: utils/misc/guc.c:4034 +msgid "Shows the server version." +msgstr "Показує версію сервера." + +#: utils/misc/guc.c:4046 +msgid "Sets the current role." +msgstr "Встановлює чинну роль." + +#: utils/misc/guc.c:4058 +msgid "Sets the session user name." +msgstr "Встановлює ім'я користувача в сеансі." + +#: utils/misc/guc.c:4069 +msgid "Sets the destination for server log output." +msgstr "Встановлює, куди буде виводитися протокол серверу." + +#: utils/misc/guc.c:4070 +msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." +msgstr "Дійсними значеннями є комбінації \"stderr\", \"syslog\", \"csvlog\", і \"eventlog\" в залежності від платформи." + +#: utils/misc/guc.c:4081 +msgid "Sets the destination directory for log files." +msgstr "Встановлює каталог призначення для файлів журналу." + +#: utils/misc/guc.c:4082 +msgid "Can be specified as relative to the data directory or as absolute path." +msgstr "Шлях може бути абсолютним або вказуватися відносно каталогу даних." + +#: utils/misc/guc.c:4092 +msgid "Sets the file name pattern for log files." +msgstr "Встановлює шаблон імені для файлів журналу." + +#: utils/misc/guc.c:4103 +msgid "Sets the program name used to identify PostgreSQL messages in syslog." +msgstr "Встановлює ім'я програми для ідентифікації повідомлень PostgreSQL в syslog." + +#: utils/misc/guc.c:4114 +msgid "Sets the application name used to identify PostgreSQL messages in the event log." +msgstr "Встановлює ім'я програми для ідентифікації повідомлень PostgreSQL в журналі подій." + +#: utils/misc/guc.c:4125 +msgid "Sets the time zone for displaying and interpreting time stamps." +msgstr "Встановлює часовий пояс для відображення та інтерпретації позначок часу." + +#: utils/misc/guc.c:4135 +msgid "Selects a file of time zone abbreviations." +msgstr "Вибирає файл з скороченими іменами часових поясів." + +#: utils/misc/guc.c:4145 +msgid "Sets the owning group of the Unix-domain socket." +msgstr "Встановлює відповідальну групу Unix-сокету." + +#: utils/misc/guc.c:4146 +msgid "The owning user of the socket is always the user that starts the server." +msgstr "Відповідальний користувач сокету це завжди той користувач який запустив сервер." + +#: utils/misc/guc.c:4156 +msgid "Sets the directories where Unix-domain sockets will be created." +msgstr "Встановлює каталоги, де будуть створюватись Unix-сокети." + +#: utils/misc/guc.c:4171 +msgid "Sets the host name or IP address(es) to listen to." +msgstr "Встановлює ім'я хосту або IP-адресу для прив'язки." + +#: utils/misc/guc.c:4186 +msgid "Sets the server's data directory." +msgstr "Встановлює каталог даних серверу." + +#: utils/misc/guc.c:4197 +msgid "Sets the server's main configuration file." +msgstr "Встановлює основний файл конфігурації серверу." + +#: utils/misc/guc.c:4208 +msgid "Sets the server's \"hba\" configuration file." +msgstr "Встановлює \"hba\" файл конфігурації серверу." + +#: utils/misc/guc.c:4219 +msgid "Sets the server's \"ident\" configuration file." +msgstr "Встановлює \"ident\" файл конфігурації серверу." + +#: utils/misc/guc.c:4230 +msgid "Writes the postmaster PID to the specified file." +msgstr "Записує ідентифікатор процесу (PID) postmaster у вказаний файл." + +#: utils/misc/guc.c:4241 +msgid "Name of the SSL library." +msgstr "Назва бібліотеки SSL." + +#: utils/misc/guc.c:4256 +msgid "Location of the SSL server certificate file." +msgstr "Розташування файла сертифікату сервера для SSL." + +#: utils/misc/guc.c:4266 +msgid "Location of the SSL server private key file." +msgstr "Розташування файла з закритим ключем сервера для SSL." + +#: utils/misc/guc.c:4276 +msgid "Location of the SSL certificate authority file." +msgstr "Розташування файла центру сертифікації для SSL." + +#: utils/misc/guc.c:4286 +msgid "Location of the SSL certificate revocation list file." +msgstr "Розташування файла зі списком відкликаних сертфікатів для SSL." + +#: utils/misc/guc.c:4296 +msgid "Writes temporary statistics files to the specified directory." +msgstr "Записує тимчасові файли статистики у вказаний каталог." + +#: utils/misc/guc.c:4307 +msgid "Number of synchronous standbys and list of names of potential synchronous ones." +msgstr "Кількість потенційно синхронних режимів очікування і список їх імен." + +#: utils/misc/guc.c:4318 +msgid "Sets default text search configuration." +msgstr "Встановлює конфігурацію текстового пошуку за замовчуванням." + +#: utils/misc/guc.c:4328 +msgid "Sets the list of allowed SSL ciphers." +msgstr "Встановлює список дозволених шифрів для SSL." + +#: utils/misc/guc.c:4343 +msgid "Sets the curve to use for ECDH." +msgstr "Встановлює криву для ECDH." + +#: utils/misc/guc.c:4358 +msgid "Location of the SSL DH parameters file." +msgstr "Розташування файла з параметрами SSL DH." + +#: utils/misc/guc.c:4369 +msgid "Command to obtain passphrases for SSL." +msgstr "Команда, що дозволяє отримати парольну фразу для SSL." + +#: utils/misc/guc.c:4380 +msgid "Sets the application name to be reported in statistics and logs." +msgstr "Встановлює ім'я програми, яке буде повідомлятись у статистиці і протоколах." + +#: utils/misc/guc.c:4391 +msgid "Sets the name of the cluster, which is included in the process title." +msgstr "Встановлює ім'я кластеру, яке буде включене до заголовка процесу." + +#: utils/misc/guc.c:4402 +msgid "Sets the WAL resource managers for which WAL consistency checks are done." +msgstr "Встановлює менеджерів ресурсу WAL, для яких виконано перевірки узгодженості WAL." + +#: utils/misc/guc.c:4403 +msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." +msgstr "При цьому до журналу будуть записуватись зображення повнихс сторінок для всіх блоків даних для перевірки з результатами відтворення WAL." + +#: utils/misc/guc.c:4413 +msgid "JIT provider to use." +msgstr "Використовувати провайдер JIT." + +#: utils/misc/guc.c:4424 +msgid "Log backtrace for errors in these functions." +msgstr "Відстежувати записи помилок у ціх функціях." + +#: utils/misc/guc.c:4444 +msgid "Sets whether \"\\'\" is allowed in string literals." +msgstr "Встановлює, чи дозволене використання \"\\\" в текстових рядках." + +#: utils/misc/guc.c:4454 +msgid "Sets the output format for bytea." +msgstr "Встановлює формат виводу для типу bytea." + +#: utils/misc/guc.c:4464 +msgid "Sets the message levels that are sent to the client." +msgstr "Встановлює рівень повідомлень, переданих клієнту." + +#: utils/misc/guc.c:4465 utils/misc/guc.c:4530 utils/misc/guc.c:4541 +#: utils/misc/guc.c:4617 +msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." +msgstr "Кожен рівень включає всі наступні рівні. Чим вище рівень, тим менше повідомлень надіслано." + +#: utils/misc/guc.c:4475 +msgid "Enables the planner to use constraints to optimize queries." +msgstr "Дає змогу планувальнику оптимізувати запити, використовуючи обмеження." + +#: utils/misc/guc.c:4476 +msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." +msgstr "Сканування таблиці буде пропущено, якщо її обмеження гарантують, що запиту не відповідають ніякі рядки." + +#: utils/misc/guc.c:4487 +msgid "Sets the transaction isolation level of each new transaction." +msgstr "Встановлює рівень ізоляції транзакції для кожної нової транзакції." + +#: utils/misc/guc.c:4497 +msgid "Sets the current transaction's isolation level." +msgstr "Встановлює чинний рівень ізоляції транзакцій." + +#: utils/misc/guc.c:4508 +msgid "Sets the display format for interval values." +msgstr "Встановлює формат відображення внутрішніх значень." + +#: utils/misc/guc.c:4519 +msgid "Sets the verbosity of logged messages." +msgstr "Встановлює детальність повідомлень, які протоколюються." + +#: utils/misc/guc.c:4529 +msgid "Sets the message levels that are logged." +msgstr "Встанолвює рівні повідомлень, які протоколюються." + +#: utils/misc/guc.c:4540 +msgid "Causes all statements generating error at or above this level to be logged." +msgstr "Вмикає протоколювання для всіх операторів, виконаних з помилкою цього або вище рівня." + +#: utils/misc/guc.c:4551 +msgid "Sets the type of statements logged." +msgstr "Встановлює тип операторів, які протоколюються." + +#: utils/misc/guc.c:4561 +msgid "Sets the syslog \"facility\" to be used when syslog enabled." +msgstr "Встановлює отримувача повідомлень, які відправляються до syslog." + +#: utils/misc/guc.c:4576 +msgid "Sets the session's behavior for triggers and rewrite rules." +msgstr "Встановлює поведінку для тригерів і правил перезапису для сеансу." + +#: utils/misc/guc.c:4586 +msgid "Sets the current transaction's synchronization level." +msgstr "Встановлює рівень синхронізації поточної транзакції." + +#: utils/misc/guc.c:4596 +msgid "Allows archiving of WAL files using archive_command." +msgstr "Дозволяє архівацію файлів WAL, використовуючи archive_command." + +#: utils/misc/guc.c:4606 +msgid "Sets the action to perform upon reaching the recovery target." +msgstr "Встновлює дію яку потрібно виконати в разі досягнення мети відновлення." + +#: utils/misc/guc.c:4616 +msgid "Enables logging of recovery-related debugging information." +msgstr "Вмикає протоколювання налагодженної інформації, пов'язаної з відновленням." + +#: utils/misc/guc.c:4632 +msgid "Collects function-level statistics on database activity." +msgstr "Збирає статистику активності в базі даних на рівні функцій." + +#: utils/misc/guc.c:4642 +msgid "Set the level of information written to the WAL." +msgstr "Встановити рівень інформації, яка записується до WAL." + +#: utils/misc/guc.c:4652 +msgid "Selects the dynamic shared memory implementation used." +msgstr "Вибирає використовуване впровадження динамічної спільної пам'яті." + +#: utils/misc/guc.c:4662 +msgid "Selects the shared memory implementation used for the main shared memory region." +msgstr "Вибирає впровадження спільної пам'яті, що використовується для основної області спільної пам'яті." + +#: utils/misc/guc.c:4672 +msgid "Selects the method used for forcing WAL updates to disk." +msgstr "Вибирає метод примусового запису оновлень в WAL на диск." + +#: utils/misc/guc.c:4682 +msgid "Sets how binary values are to be encoded in XML." +msgstr "Встановлює, як повинні кодуватись двійкові значення в XML." + +#: utils/misc/guc.c:4692 +msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." +msgstr "Встановлює, чи слід розглядати XML-дані в неявних операціях аналізу і серіалізації як документи або як фрагменти змісту." + +#: utils/misc/guc.c:4703 +msgid "Use of huge pages on Linux or Windows." +msgstr "Використовувати величезні сторінки в Linux або Windows." + +#: utils/misc/guc.c:4713 +msgid "Forces use of parallel query facilities." +msgstr "Примусово використовувати паралельне виконання запитів." + +#: utils/misc/guc.c:4714 +msgid "If possible, run query using a parallel worker and with parallel restrictions." +msgstr "Якщо можливо, виконувати запит використовуючи паралельного працівника і з обмеженнями паралельності." + +#: utils/misc/guc.c:4724 +msgid "Chooses the algorithm for encrypting passwords." +msgstr "Виберіть алгоритм для шифрування паролів." + +#: utils/misc/guc.c:4734 +msgid "Controls the planner's selection of custom or generic plan." +msgstr "Контролює вибір планувальником спеціального або загального плану." + +#: utils/misc/guc.c:4735 +msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." +msgstr "Підготовлені оператори можуть мати спеціальні або загальні плани, і планувальник спробує вибрати, який краще. Це може бути встановлено для зміни поведінки за замовчуванням." + +#: utils/misc/guc.c:4747 +msgid "Sets the minimum SSL/TLS protocol version to use." +msgstr "Встановлює мінімальну версію протоколу SSL/TLS для використання." + +#: utils/misc/guc.c:4759 +msgid "Sets the maximum SSL/TLS protocol version to use." +msgstr "Встановлює максимальну версію протоколу SSL/TLS для використання." + +#: utils/misc/guc.c:5562 +#, c-format +msgid "%s: could not access directory \"%s\": %s\n" +msgstr "%s: немає доступу до каталогу \"%s\": %s\n" + +#: utils/misc/guc.c:5567 +#, c-format +msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" +msgstr "Запустіть initdb або pg_basebackup для ініціалізації каталогу даних PostgreSQL.\n" + +#: utils/misc/guc.c:5587 +#, c-format +msgid "%s does not know where to find the server configuration file.\n" +"You must specify the --config-file or -D invocation option or set the PGDATA environment variable.\n" +msgstr "%s не знає де знайти файл конфігурації сервера.\n" +"Ви повинні вказати його розташування в параметрі --config-file або -D, або встановити змінну середовища PGDATA.\n" + +#: utils/misc/guc.c:5606 +#, c-format +msgid "%s: could not access the server configuration file \"%s\": %s\n" +msgstr "%s: не вдалося отримати доступ до файлу конфігурації сервера \"%s\": %s\n" + +#: utils/misc/guc.c:5632 +#, c-format +msgid "%s does not know where to find the database system data.\n" +"This can be specified as \"data_directory\" in \"%s\", or by the -D invocation option, or by the PGDATA environment variable.\n" +msgstr "%s не знає де знайти дані системи бази даних.\n" +"Їх розташування може бути вказано як \"data_directory\" в \"%s\", або передано в параметрі -D, або встановлено змінну середовища PGDATA.\n" + +#: utils/misc/guc.c:5680 +#, c-format +msgid "%s does not know where to find the \"hba\" configuration file.\n" +"This can be specified as \"hba_file\" in \"%s\", or by the -D invocation option, or by the PGDATA environment variable.\n" +msgstr "%s не знає де знайти файл конфігурації \"hba\".\n" +"Його розташування може бути вказано як \"hba_file\" в \"%s\", або передано в параметрі -D, або встановлено змінну середовища PGDATA.\n" + +#: utils/misc/guc.c:5703 +#, c-format +msgid "%s does not know where to find the \"ident\" configuration file.\n" +"This can be specified as \"ident_file\" in \"%s\", or by the -D invocation option, or by the PGDATA environment variable.\n" +msgstr "%s не знає де знайти файл конфігурації \"ident\".\n" +"Його розташування може бути вказано як \"ident_file\" в \"%s\", або передано в параметрі -D, або встановлено змінну середовища PGDATA.\n" + +#: utils/misc/guc.c:6545 +msgid "Value exceeds integer range." +msgstr "Значення перевищує діапазон цілих чисел." + +#: utils/misc/guc.c:6781 +#, c-format +msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" +msgstr "%d%s%s поза припустимим діапазоном для параметру \"%s\" (%d .. %d)" + +#: utils/misc/guc.c:6817 +#, c-format +msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" +msgstr "%g%s%s поза припустимим діапазоном для параметру \"%s\" (%g .. %g)" + +#: utils/misc/guc.c:6973 utils/misc/guc.c:8340 +#, c-format +msgid "cannot set parameters during a parallel operation" +msgstr "встановити параметри під час паралельної операції не можна" + +#: utils/misc/guc.c:6980 utils/misc/guc.c:7732 utils/misc/guc.c:7785 +#: utils/misc/guc.c:7836 utils/misc/guc.c:8169 utils/misc/guc.c:8936 +#: utils/misc/guc.c:9198 utils/misc/guc.c:10864 +#, c-format +msgid "unrecognized configuration parameter \"%s\"" +msgstr "нерозпізнаний параметр конфігурації \"%s\"" + +#: utils/misc/guc.c:6995 utils/misc/guc.c:8181 +#, c-format +msgid "parameter \"%s\" cannot be changed" +msgstr "параметр \"%s\" не може бути змінений" + +#: utils/misc/guc.c:7018 utils/misc/guc.c:7212 utils/misc/guc.c:7302 +#: utils/misc/guc.c:7392 utils/misc/guc.c:7500 utils/misc/guc.c:7595 +#: guc-file.l:352 +#, c-format +msgid "parameter \"%s\" cannot be changed without restarting the server" +msgstr "параметр \"%s\" не може бути змінений, без перезавантаження сервера" + +#: utils/misc/guc.c:7028 +#, c-format +msgid "parameter \"%s\" cannot be changed now" +msgstr "параметр \"%s\" не може бути змінений зараз" + +#: utils/misc/guc.c:7046 utils/misc/guc.c:7093 utils/misc/guc.c:10880 +#, c-format +msgid "permission denied to set parameter \"%s\"" +msgstr "немає прав для встановлення параметру \"%s\"" + +#: utils/misc/guc.c:7083 +#, c-format +msgid "parameter \"%s\" cannot be set after connection start" +msgstr "параметр \"%s\" не можна встановити після встановлення підключення" + +#: utils/misc/guc.c:7131 +#, c-format +msgid "cannot set parameter \"%s\" within security-definer function" +msgstr "параметр \"%s\" не можна встановити в межах функції безпеки" + +#: utils/misc/guc.c:7740 utils/misc/guc.c:7790 utils/misc/guc.c:9205 +#, c-format +msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" +msgstr "щоб дослідити \"%s\" потрібно бути суперкористувачем або учасником ролі pg_read_all_settings" + +#: utils/misc/guc.c:7881 +#, c-format +msgid "SET %s takes only one argument" +msgstr "SET %s приймає лише один аргумент" + +#: utils/misc/guc.c:8129 +#, c-format +msgid "must be superuser to execute ALTER SYSTEM command" +msgstr "щоб виконати команду ALTER SYSTEM потрібно бути суперкористувачем" + +#: utils/misc/guc.c:8214 +#, c-format +msgid "parameter value for ALTER SYSTEM must not contain a newline" +msgstr "значення параметру для ALTER SYSTEM не повинне містити нового рядка" + +#: utils/misc/guc.c:8259 +#, c-format +msgid "could not parse contents of file \"%s\"" +msgstr "не вдалося аналізувати зміст файла \"%s\"" + +#: utils/misc/guc.c:8416 +#, c-format +msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" +msgstr "SET LOCAL TRANSACTION SNAPSHOT не реалізовано" + +#: utils/misc/guc.c:8500 +#, c-format +msgid "SET requires parameter name" +msgstr "SET потребує ім'я параметра" + +#: utils/misc/guc.c:8633 +#, c-format +msgid "attempt to redefine parameter \"%s\"" +msgstr "спроба перевизначити параметр \"%s\"" + +#: utils/misc/guc.c:10426 +#, c-format +msgid "while setting parameter \"%s\" to \"%s\"" +msgstr "під час налаштування параметру \"%s\" на \"%s\"" + +#: utils/misc/guc.c:10494 +#, c-format +msgid "parameter \"%s\" could not be set" +msgstr "параметр \"%s\" не вдалося встановити" + +#: utils/misc/guc.c:10584 +#, c-format +msgid "could not parse setting for parameter \"%s\"" +msgstr "не вдалося аналізувати налаштування параметру \"%s\"" + +#: utils/misc/guc.c:10942 utils/misc/guc.c:10976 +#, c-format +msgid "invalid value for parameter \"%s\": %d" +msgstr "неприпустиме значення для параметра \"%s\": %d" + +#: utils/misc/guc.c:11010 +#, c-format +msgid "invalid value for parameter \"%s\": %g" +msgstr "неприпустиме значення для параметра \"%s\": %g" + +#: utils/misc/guc.c:11280 +#, c-format +msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." +msgstr "параметр \"temp_buffers\" не можна змінити після того, як тимчасові таблиці отримали доступ в сеансі." + +#: utils/misc/guc.c:11292 +#, c-format +msgid "Bonjour is not supported by this build" +msgstr "Bonjour не підтримується даною збіркою" + +#: utils/misc/guc.c:11305 +#, c-format +msgid "SSL is not supported by this build" +msgstr "SSL не підтримується даною збіркою" + +#: utils/misc/guc.c:11317 +#, c-format +msgid "Cannot enable parameter when \"log_statement_stats\" is true." +msgstr "Не можна ввімкнути параметр, коли \"log_statement_stats\" дорівнює true." + +#: utils/misc/guc.c:11329 +#, c-format +msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." +msgstr "Не можна ввімкнути \"log_statement_stats\", коли \"log_parser_stats\", \"log_planner_stats\", або \"log_executor_stats\" дорівнюють true." + +#: utils/misc/guc.c:11559 +#, c-format +msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." +msgstr "значення effective_io_concurrency повинне дорівнювати 0 (нулю) на платформах, де відсутній posix_fadvise()." + +#: utils/misc/guc.c:11572 +#, c-format +msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." +msgstr "maintenance_io_concurrency повинне бути встановлене на 0, на платформах які не мають posix_fadvise()." + +#: utils/misc/guc.c:11688 +#, c-format +msgid "invalid character" +msgstr "неприпустимий символ" + +#: utils/misc/guc.c:11748 +#, c-format +msgid "recovery_target_timeline is not a valid number." +msgstr "recovery_target_timeline не є допустимим числом." + +#: utils/misc/guc.c:11788 +#, c-format +msgid "multiple recovery targets specified" +msgstr "вказано декілька цілей відновлення" + +#: utils/misc/guc.c:11789 +#, c-format +msgid "At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set." +msgstr "Максимум один із recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid може бути встановлений." + +#: utils/misc/guc.c:11797 +#, c-format +msgid "The only allowed value is \"immediate\"." +msgstr "Єдиним дозволеним значенням є \"immediate\"." + +#: utils/misc/help_config.c:130 +#, c-format +msgid "internal error: unrecognized run-time parameter type\n" +msgstr "внутрішня помилка: нерозпізнаний тип параметра часу виконання\n" + +#: utils/misc/pg_config.c:60 +#, c-format +msgid "query-specified return tuple and function return type are not compatible" +msgstr "вказаний у запиті кортеж і функція повертаючого типу несумісні" + +#: utils/misc/pg_controldata.c:60 utils/misc/pg_controldata.c:138 +#: utils/misc/pg_controldata.c:241 utils/misc/pg_controldata.c:306 +#, c-format +msgid "calculated CRC checksum does not match value stored in file" +msgstr "обчислена контрольна сума CRC не відповідає значенню, збереженому у файлі" + +#: utils/misc/pg_rusage.c:64 +#, c-format +msgid "CPU: user: %d.%02d s, system: %d.%02d s, elapsed: %d.%02d s" +msgstr "ЦП: користувач: %d.%02d с, система: %d.%02d с, минуло: %d.%02d с" + +#: utils/misc/rls.c:127 +#, c-format +msgid "query would be affected by row-level security policy for table \"%s\"" +msgstr "запит буде обмежений політикою безпеки на рівні рядків для таблиці \"%s\"" + +#: utils/misc/rls.c:129 +#, c-format +msgid "To disable the policy for the table's owner, use ALTER TABLE NO FORCE ROW LEVEL SECURITY." +msgstr "Щоб вимкнути політику для власника таблиці, використайте ALTER TABLE NO FORCE ROW LEVEL SECURITY." + +#: utils/misc/timeout.c:395 +#, c-format +msgid "cannot add more timeout reasons" +msgstr "додати більше причин тайм-ауту не можна" + +#: utils/misc/tzparser.c:60 +#, c-format +msgid "time zone abbreviation \"%s\" is too long (maximum %d characters) in time zone file \"%s\", line %d" +msgstr "скорочення часового поясу \"%s\" занадто довге (максимум %d символів) у файлі часового поясу \"%s\", рядок %d" + +#: utils/misc/tzparser.c:72 +#, c-format +msgid "time zone offset %d is out of range in time zone file \"%s\", line %d" +msgstr "зсув часового поясу %d поза діапазоном у файлі часового поясу \"%s\", рядок %d" + +#: utils/misc/tzparser.c:111 +#, c-format +msgid "missing time zone abbreviation in time zone file \"%s\", line %d" +msgstr "пропущено скорочення часового поясу в файлі часового поясу \"%s\", рядок %d" + +#: utils/misc/tzparser.c:120 +#, c-format +msgid "missing time zone offset in time zone file \"%s\", line %d" +msgstr "пропущено зсув часового поясу в файлі часового поясу \"%s\", рядок %d" + +#: utils/misc/tzparser.c:132 +#, c-format +msgid "invalid number for time zone offset in time zone file \"%s\", line %d" +msgstr "неприпустиме число зсуву часового поясу в файлі часового поясу \"%s\", рядок %d" + +#: utils/misc/tzparser.c:168 +#, c-format +msgid "invalid syntax in time zone file \"%s\", line %d" +msgstr "неприпустимий синтаксис у файлі часового поясу \"%s\", рядок %d" + +#: utils/misc/tzparser.c:236 +#, c-format +msgid "time zone abbreviation \"%s\" is multiply defined" +msgstr "скорочення часового поясу \"%s\" визначено неодноразово" + +#: utils/misc/tzparser.c:238 +#, c-format +msgid "Entry in time zone file \"%s\", line %d, conflicts with entry in file \"%s\", line %d." +msgstr "Запис у файлі часового поясу \"%s\", рядок %d, конфліктує з записом у файлі \"%s\", рядок %d." + +#: utils/misc/tzparser.c:300 +#, c-format +msgid "invalid time zone file name \"%s\"" +msgstr "неприпустиме ім'я файла часового поясу \"%s\"" + +#: utils/misc/tzparser.c:313 +#, c-format +msgid "time zone file recursion limit exceeded in file \"%s\"" +msgstr "ліміт рекурсії файла часового поясу перевищено у файлі \"%s\"" + +#: utils/misc/tzparser.c:352 utils/misc/tzparser.c:365 +#, c-format +msgid "could not read time zone file \"%s\": %m" +msgstr "не вдалося прочитати файл часового поясу \"%s\": %m" + +#: utils/misc/tzparser.c:375 +#, c-format +msgid "line is too long in time zone file \"%s\", line %d" +msgstr "занадто довгий рядок у файлі часового поясу \"%s\", рядок %d" + +#: utils/misc/tzparser.c:398 +#, c-format +msgid "@INCLUDE without file name in time zone file \"%s\", line %d" +msgstr "в @INCLUDE не вказано ім'я файла у файлі часового поясу \"%s\", рядок %d" + +#: utils/mmgr/aset.c:476 utils/mmgr/generation.c:234 utils/mmgr/slab.c:236 +#, c-format +msgid "Failed while creating memory context \"%s\"." +msgstr "Помилка під час створення контексту пам'яті \"%s\"." + +#: utils/mmgr/dsa.c:519 utils/mmgr/dsa.c:1332 +#, c-format +msgid "could not attach to dynamic shared area" +msgstr "не вдалося підключитись до динамічно-спільної області" + +#: utils/mmgr/mcxt.c:822 utils/mmgr/mcxt.c:858 utils/mmgr/mcxt.c:896 +#: utils/mmgr/mcxt.c:934 utils/mmgr/mcxt.c:970 utils/mmgr/mcxt.c:1001 +#: utils/mmgr/mcxt.c:1037 utils/mmgr/mcxt.c:1089 utils/mmgr/mcxt.c:1124 +#: utils/mmgr/mcxt.c:1159 +#, c-format +msgid "Failed on request of size %zu in memory context \"%s\"." +msgstr "Помилка в запиті розміру %zu в контексті пам'яті \"%s\"." + +#: utils/mmgr/portalmem.c:187 +#, c-format +msgid "cursor \"%s\" already exists" +msgstr "курсор \"%s\" вже існує" + +#: utils/mmgr/portalmem.c:191 +#, c-format +msgid "closing existing cursor \"%s\"" +msgstr "існуючий курсор \"%s\" закривається" + +#: utils/mmgr/portalmem.c:400 +#, c-format +msgid "portal \"%s\" cannot be run" +msgstr "портал \"%s\" не можна запустити" + +#: utils/mmgr/portalmem.c:478 +#, c-format +msgid "cannot drop pinned portal \"%s\"" +msgstr "видалити закріплений портал \"%s\" не можна" + +#: utils/mmgr/portalmem.c:486 +#, c-format +msgid "cannot drop active portal \"%s\"" +msgstr "видалити активний портал \"%s\" не можна" + +#: utils/mmgr/portalmem.c:731 +#, c-format +msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" +msgstr "не можна виконати PREPARE для транзакції, яка створила курсор WITH HOLD" + +#: utils/mmgr/portalmem.c:1270 +#, c-format +msgid "cannot perform transaction commands inside a cursor loop that is not read-only" +msgstr "виконати команди транзакції всередині циклу з курсором, який не є \"лише для читання\", не можна" + +#: utils/sort/logtape.c:266 utils/sort/logtape.c:289 +#, c-format +msgid "could not seek to block %ld of temporary file" +msgstr "не вдалося знайти шлях до блокування %ld тимчасового файлу" + +#: utils/sort/logtape.c:295 +#, c-format +msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" +msgstr "не вдалося прочитати блок %ld тимчасового файлу: прочитано лише %zu з %zu байт." + +#: utils/sort/sharedtuplestore.c:430 utils/sort/sharedtuplestore.c:439 +#: utils/sort/sharedtuplestore.c:462 utils/sort/sharedtuplestore.c:479 +#: utils/sort/sharedtuplestore.c:496 +#, c-format +msgid "could not read from shared tuplestore temporary file" +msgstr "не вдалося прочитати тимчасовий файл зі зпільного сховища кортежів" + +#: utils/sort/sharedtuplestore.c:485 +#, c-format +msgid "unexpected chunk in shared tuplestore temporary file" +msgstr "неочікуваний блок у тимчасовому файлі спільного сховища кортежів" + +#: utils/sort/sharedtuplestore.c:569 +#, c-format +msgid "could not seek to block %u in shared tuplestore temporary file" +msgstr "не вдалося знайти для блокування %u у тимчасовому файлі зі спільного сховища кортежів" + +#: utils/sort/sharedtuplestore.c:576 +#, c-format +msgid "could not read from shared tuplestore temporary file: read only %zu of %zu bytes" +msgstr "не вдалося прочитати з тимчасового файлу зі спільного сховища кортежів: прочитано лише %zu з %zu байт" + +#: utils/sort/tuplesort.c:3140 +#, c-format +msgid "cannot have more than %d runs for an external sort" +msgstr "кількість виконуючих процесів для зовнішнього сортування не може перевищувати %d" + +#: utils/sort/tuplesort.c:4221 +#, c-format +msgid "could not create unique index \"%s\"" +msgstr "не вдалося створити унікальний індекс \"%s\"" + +#: utils/sort/tuplesort.c:4223 +#, c-format +msgid "Key %s is duplicated." +msgstr "Ключ %s дублюється." + +#: utils/sort/tuplesort.c:4224 +#, c-format +msgid "Duplicate keys exist." +msgstr "Дублікати ключів існують." + +#: utils/sort/tuplestore.c:518 utils/sort/tuplestore.c:528 +#: utils/sort/tuplestore.c:869 utils/sort/tuplestore.c:973 +#: utils/sort/tuplestore.c:1037 utils/sort/tuplestore.c:1054 +#: utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 +#: utils/sort/tuplestore.c:1330 +#, c-format +msgid "could not seek in tuplestore temporary file" +msgstr "не вдалося знайти у тимчасовому файлі зі сховища кортежів" + +#: utils/sort/tuplestore.c:1477 utils/sort/tuplestore.c:1540 +#: utils/sort/tuplestore.c:1548 +#, c-format +msgid "could not read from tuplestore temporary file: read only %zu of %zu bytes" +msgstr "не вдалося прочитати з тимчасового файлу зі сховища кортежів: прочитано лише %zu з %zu байт" + +#: utils/time/snapmgr.c:624 +#, c-format +msgid "The source transaction is not running anymore." +msgstr "Вихідна транзакція вже не виконується." + +#: utils/time/snapmgr.c:1232 +#, c-format +msgid "cannot export a snapshot from a subtransaction" +msgstr "експортувати знімок з підтранзакції не можна" + +#: utils/time/snapmgr.c:1391 utils/time/snapmgr.c:1396 +#: utils/time/snapmgr.c:1401 utils/time/snapmgr.c:1416 +#: utils/time/snapmgr.c:1421 utils/time/snapmgr.c:1426 +#: utils/time/snapmgr.c:1441 utils/time/snapmgr.c:1446 +#: utils/time/snapmgr.c:1451 utils/time/snapmgr.c:1553 +#: utils/time/snapmgr.c:1569 utils/time/snapmgr.c:1594 +#, c-format +msgid "invalid snapshot data in file \"%s\"" +msgstr "неприпустимі дані знімку в файлі \"%s\"" + +#: utils/time/snapmgr.c:1488 +#, c-format +msgid "SET TRANSACTION SNAPSHOT must be called before any query" +msgstr "SET TRANSACTION SNAPSHOT повинна викликатись перед будь-яким запитом" + +#: utils/time/snapmgr.c:1497 +#, c-format +msgid "a snapshot-importing transaction must have isolation level SERIALIZABLE or REPEATABLE READ" +msgstr "транзакція, яка імпортує знімок, повинна мати рівень ізоляції SERIALIZABLE або REPEATABLE READ" + +#: utils/time/snapmgr.c:1506 utils/time/snapmgr.c:1515 +#, c-format +msgid "invalid snapshot identifier: \"%s\"" +msgstr "неприпустимий ідентифікатор знімка: \"%s\"" + +#: utils/time/snapmgr.c:1607 +#, c-format +msgid "a serializable transaction cannot import a snapshot from a non-serializable transaction" +msgstr "серіалізована транзакція не може імпортувати знімок з не серіалізованої транзакції" + +#: utils/time/snapmgr.c:1611 +#, c-format +msgid "a non-read-only serializable transaction cannot import a snapshot from a read-only transaction" +msgstr "серіалізована транзакція в режимі \"читання-запис\" не може імпортувати знімок з транзакції в режимі \"тільки читання\"" + +#: utils/time/snapmgr.c:1626 +#, c-format +msgid "cannot import a snapshot from a different database" +msgstr "імпортувати знімок з іншої бази даних не можна" + +#: gram.y:1047 +#, c-format +msgid "UNENCRYPTED PASSWORD is no longer supported" +msgstr "UNENCRYPTED PASSWORD більше не підтримується" + +#: gram.y:1048 +#, c-format +msgid "Remove UNENCRYPTED to store the password in encrypted form instead." +msgstr "Видаліть UNENCRYPTED, щоб зберегти пароль у зашифрованій формі." + +#: gram.y:1110 +#, c-format +msgid "unrecognized role option \"%s\"" +msgstr "нерозпізнаний параметр ролі \"%s\"" + +#: gram.y:1357 gram.y:1372 +#, c-format +msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" +msgstr "CREATE SCHEMA IF NOT EXISTS не може включати елементи схеми" + +#: gram.y:1518 +#, c-format +msgid "current database cannot be changed" +msgstr "поточна база даних не може бути змінена" + +#: gram.y:1642 +#, c-format +msgid "time zone interval must be HOUR or HOUR TO MINUTE" +msgstr "інтервал, який задає часовий пояс, повинен бути HOUR або HOUR TO MINUTE" + +#: gram.y:2177 +#, c-format +msgid "column number must be in range from 1 to %d" +msgstr "номер стовпця повинен бути в діапазоні від 1 до %d" + +#: gram.y:2709 +#, c-format +msgid "sequence option \"%s\" not supported here" +msgstr "параметр послідовності \"%s\" тут не підтримується" + +#: gram.y:2738 +#, c-format +msgid "modulus for hash partition provided more than once" +msgstr "модуль для геш-секції вказано неодноразово" + +#: gram.y:2747 +#, c-format +msgid "remainder for hash partition provided more than once" +msgstr "решта для геш-секції вказана неодноразово" + +#: gram.y:2754 +#, c-format +msgid "unrecognized hash partition bound specification \"%s\"" +msgstr "нерозпізнана специфікація границі геш-секції \"%s\"" + +#: gram.y:2762 +#, c-format +msgid "modulus for hash partition must be specified" +msgstr "потрібно вказати модуль для геш-секції" + +#: gram.y:2766 +#, c-format +msgid "remainder for hash partition must be specified" +msgstr "потрібно вказати решту для геш-секції" + +#: gram.y:2967 gram.y:3000 +#, c-format +msgid "STDIN/STDOUT not allowed with PROGRAM" +msgstr "STDIN/STDOUT не допускається з PROGRAM" + +#: gram.y:2973 +#, c-format +msgid "WHERE clause not allowed with COPY TO" +msgstr "Речення WHERE не дозволяється використовувати з COPY TO" + +#: gram.y:3305 gram.y:3312 gram.y:11647 gram.y:11655 +#, c-format +msgid "GLOBAL is deprecated in temporary table creation" +msgstr "GLOBAL при створенні тимчасових таблиць застаріло" + +#: gram.y:3552 +#, c-format +msgid "for a generated column, GENERATED ALWAYS must be specified" +msgstr "для згенерованого стовпця, потрібно вказати GENERATED ALWAYS" + +#: gram.y:4512 +#, c-format +msgid "CREATE EXTENSION ... FROM is no longer supported" +msgstr "CREATE EXTENSION ... FROM більше не підтримується" + +#: gram.y:5338 +#, c-format +msgid "unrecognized row security option \"%s\"" +msgstr "нерозпізнаний параметр безпеки рядка \"%s\"" + +#: gram.y:5339 +#, c-format +msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." +msgstr "Наразі підтримуються лише політики PERMISSIVE або RESTRICTIVE." + +#: gram.y:5452 +msgid "duplicate trigger events specified" +msgstr "вказані події тригера повторюються" + +#: gram.y:5600 +#, c-format +msgid "conflicting constraint properties" +msgstr "конфліктуючі властивості обмеження" + +#: gram.y:5696 +#, c-format +msgid "CREATE ASSERTION is not yet implemented" +msgstr "CREATE ASSERTION ще не реалізований" + +#: gram.y:6079 +#, c-format +msgid "RECHECK is no longer required" +msgstr "RECHECK більше не потребується" + +#: gram.y:6080 +#, c-format +msgid "Update your data type." +msgstr "Поновіть ваш тип даних." + +#: gram.y:7831 +#, c-format +msgid "aggregates cannot have output arguments" +msgstr "агрегатні функції не можуть мати вихідних аргументів" + +#: gram.y:10153 gram.y:10171 +#, c-format +msgid "WITH CHECK OPTION not supported on recursive views" +msgstr "WITH CHECK OPTION не підтримується для рекурсивних подань" + +#: gram.y:11779 +#, c-format +msgid "LIMIT #,# syntax is not supported" +msgstr "Синтаксис LIMIT #,# не підтримується" + +#: gram.y:11780 +#, c-format +msgid "Use separate LIMIT and OFFSET clauses." +msgstr "Використайте окремі речення LIMIT і OFFSET." + +#: gram.y:12106 gram.y:12131 +#, c-format +msgid "VALUES in FROM must have an alias" +msgstr "VALUES в FROM повинен мати псевдонім" + +#: gram.y:12107 gram.y:12132 +#, c-format +msgid "For example, FROM (VALUES ...) [AS] foo." +msgstr "Наприклад, FROM (VALUES ...) [AS] foo." + +#: gram.y:12112 gram.y:12137 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "підзапит в FROM повинен мати псевдонім" + +#: gram.y:12113 gram.y:12138 +#, c-format +msgid "For example, FROM (SELECT ...) [AS] foo." +msgstr "Наприклад, FROM (SELECT ...) [AS] foo." + +#: gram.y:12591 +#, c-format +msgid "only one DEFAULT value is allowed" +msgstr "допускається лише одне значення DEFAULT" + +#: gram.y:12600 +#, c-format +msgid "only one PATH value per column is allowed" +msgstr "для стовпця допускається лише одне значення PATH" + +#: gram.y:12609 +#, c-format +msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" +msgstr "конфліктуючі або надлишкові оголошення NULL / NOT NULL для стовпця \"%s\"" + +#: gram.y:12618 +#, c-format +msgid "unrecognized column option \"%s\"" +msgstr "нерозпізнаний параметр стовпця \"%s\"" + +#: gram.y:12872 +#, c-format +msgid "precision for type float must be at least 1 bit" +msgstr "точність для типу float повинна бути мінімум 1 біт" + +#: gram.y:12881 +#, c-format +msgid "precision for type float must be less than 54 bits" +msgstr "точність для типу float повинна бути меньше 54 біт" + +#: gram.y:13372 +#, c-format +msgid "wrong number of parameters on left side of OVERLAPS expression" +msgstr "неправильна кількість параметрів у лівій частині виразу OVERLAPS" + +#: gram.y:13377 +#, c-format +msgid "wrong number of parameters on right side of OVERLAPS expression" +msgstr "неправильна кількість параметрів у правій частині виразу OVERLAPS" + +#: gram.y:13552 +#, c-format +msgid "UNIQUE predicate is not yet implemented" +msgstr "Предикат UNIQUE ще не реалізований" + +#: gram.y:13915 +#, c-format +msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" +msgstr "використовувати речення ORDER BY з WITHIN GROUP неодноразово, не можна" + +#: gram.y:13920 +#, c-format +msgid "cannot use DISTINCT with WITHIN GROUP" +msgstr "використовувати DISTINCT з WITHIN GROUP не можна" + +#: gram.y:13925 +#, c-format +msgid "cannot use VARIADIC with WITHIN GROUP" +msgstr "використовувати VARIADIC з WITHIN GROUP не можна" + +#: gram.y:14391 gram.y:14414 +#, c-format +msgid "frame start cannot be UNBOUNDED FOLLOWING" +msgstr "початком рамки не може бути UNBOUNDED FOLLOWING" + +#: gram.y:14396 +#, c-format +msgid "frame starting from following row cannot end with current row" +msgstr "рамка, яка починається з наступного рядка не можна закінчуватись поточним рядком" + +#: gram.y:14419 +#, c-format +msgid "frame end cannot be UNBOUNDED PRECEDING" +msgstr "кінцем рамки не може бути UNBOUNDED PRECEDING" + +#: gram.y:14425 +#, c-format +msgid "frame starting from current row cannot have preceding rows" +msgstr "рамка, яка починається з поточного рядка не може мати попередніх рядків" + +#: gram.y:14432 +#, c-format +msgid "frame starting from following row cannot have preceding rows" +msgstr "рамка, яка починається з наступного рядка не може мати попередніх рядків" + +#: gram.y:15082 +#, c-format +msgid "type modifier cannot have parameter name" +msgstr "тип modifier не може мати ім'я параметра" + +#: gram.y:15088 +#, c-format +msgid "type modifier cannot have ORDER BY" +msgstr "тип modifier не може мати ORDER BY" + +#: gram.y:15153 gram.y:15160 +#, c-format +msgid "%s cannot be used as a role name here" +msgstr "%s не можна використовувати тут як ім'я ролі" + +#: gram.y:15841 gram.y:16030 +msgid "improper use of \"*\"" +msgstr "неправильне використання \"*\"" + +#: gram.y:16094 +#, c-format +msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" +msgstr "сортувальна агрегатна функція з прямим аргументом VARIADIC повинна мати один агрегатний аргумент VARIADIC того ж типу даних" + +#: gram.y:16131 +#, c-format +msgid "multiple ORDER BY clauses not allowed" +msgstr "кілька речень ORDER BY не допускається" + +#: gram.y:16142 +#, c-format +msgid "multiple OFFSET clauses not allowed" +msgstr "кілька речень OFFSET не допускається" + +#: gram.y:16151 +#, c-format +msgid "multiple LIMIT clauses not allowed" +msgstr "кілька речень LIMIT не допускається" + +#: gram.y:16160 +#, c-format +msgid "multiple limit options not allowed" +msgstr "використання декількох параметрів обмеження не дозволяється" + +#: gram.y:16164 +#, c-format +msgid "WITH TIES cannot be specified without ORDER BY clause" +msgstr "WITH TIES не можна задати без оператора ORDER BY" + +#: gram.y:16172 +#, c-format +msgid "multiple WITH clauses not allowed" +msgstr "кілька речень WITH не допускається" + +#: gram.y:16376 +#, c-format +msgid "OUT and INOUT arguments aren't allowed in TABLE functions" +msgstr "В табличних функціях аргументи OUT і INOUT не дозволяються" + +#: gram.y:16472 +#, c-format +msgid "multiple COLLATE clauses not allowed" +msgstr "кілька речень COLLATE не допускається" + +#. translator: %s is CHECK, UNIQUE, or similar +#: gram.y:16510 gram.y:16523 +#, c-format +msgid "%s constraints cannot be marked DEFERRABLE" +msgstr "обмеження %s не можуть бути позначені DEFERRABLE" + +#. translator: %s is CHECK, UNIQUE, or similar +#: gram.y:16536 +#, c-format +msgid "%s constraints cannot be marked NOT VALID" +msgstr "обмеження %s не можуть бути позначені NOT VALID" + +#. translator: %s is CHECK, UNIQUE, or similar +#: gram.y:16549 +#, c-format +msgid "%s constraints cannot be marked NO INHERIT" +msgstr "обмеження %s не можуть бути позначені NO INHERIT" + +#: guc-file.l:315 +#, c-format +msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %u" +msgstr "нерозпізнаний параметр конфігурації \"%s\" у файлі \"%s\" рядок %u" + +#: guc-file.l:388 +#, c-format +msgid "parameter \"%s\" removed from configuration file, reset to default" +msgstr "параметр \"%s\" видалений з файла конфігурації, значення скинуто до \"за замовчуванням\"" + +#: guc-file.l:454 +#, c-format +msgid "parameter \"%s\" changed to \"%s\"" +msgstr "параметр \"%s\" змінено на \"%s\"" + +#: guc-file.l:496 +#, c-format +msgid "configuration file \"%s\" contains errors" +msgstr "файл конфігурації \"%s\" містить помилки" + +#: guc-file.l:501 +#, c-format +msgid "configuration file \"%s\" contains errors; unaffected changes were applied" +msgstr "файл конфігурації \"%s\" містить помилки; були застосовані не залежні зміни" + +#: guc-file.l:506 +#, c-format +msgid "configuration file \"%s\" contains errors; no changes were applied" +msgstr "файл конфігурації \"%s\" містить помилки; зміни не були застосовані" + +#: guc-file.l:578 +#, c-format +msgid "empty configuration file name: \"%s\"" +msgstr "пуста назва файлу конфігурації: \"%s\"" + +#: guc-file.l:595 +#, c-format +msgid "could not open configuration file \"%s\": maximum nesting depth exceeded" +msgstr "не вдалося відкрити файл конфігурації \"%s\": максимальну глибину вкладення перевищено" + +#: guc-file.l:615 +#, c-format +msgid "configuration file recursion in \"%s\"" +msgstr "рекурсія файлу конфігурації в \"%s\"" + +#: guc-file.l:642 +#, c-format +msgid "skipping missing configuration file \"%s\"" +msgstr "відсутній файл конфігурації \"%s\" пропускається" + +#: guc-file.l:896 +#, c-format +msgid "syntax error in file \"%s\" line %u, near end of line" +msgstr "синтаксична помилка у файлі \"%s\" поблизу кінця рядка %u" + +#: guc-file.l:906 +#, c-format +msgid "syntax error in file \"%s\" line %u, near token \"%s\"" +msgstr "синтаксична помилка у файлі \"%s\" рядок %u, поблизу маркера \"%s\"" + +#: guc-file.l:926 +#, c-format +msgid "too many syntax errors found, abandoning file \"%s\"" +msgstr "знайдено занадто багато синтаксичних помилок, переривання файла \"%s\"" + +#: guc-file.l:981 +#, c-format +msgid "empty configuration directory name: \"%s\"" +msgstr "пуста назва каталогу конфігурації: \"%s\"" + +#: guc-file.l:1000 +#, c-format +msgid "could not open configuration directory \"%s\": %m" +msgstr "не вдалося відкрити каталог конфігурації \"%s\": %m" + +#: jsonpath_gram.y:529 +#, c-format +msgid "unrecognized flag character \"%c\" in LIKE_REGEX predicate" +msgstr "нерозпізнаний символ позначки \"%c\" в предикаті LIKE_REGEX" + +#: jsonpath_gram.y:583 +#, c-format +msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" +msgstr "XQuery \"x\" позначка (розширені регулярні вирази) не реалізовано" + +#. translator: %s is typically "syntax error" +#: jsonpath_scan.l:286 +#, c-format +msgid "%s at end of jsonpath input" +msgstr "%s в кінці введення jsonpath" + +#. translator: first %s is typically "syntax error" +#: jsonpath_scan.l:293 +#, c-format +msgid "%s at or near \"%s\" of jsonpath input" +msgstr "%s в або біля \"%s\" введення jsonpath" + +#: repl_gram.y:349 repl_gram.y:381 +#, c-format +msgid "invalid timeline %u" +msgstr "неприпустима часова шкала %u" + +#: repl_scanner.l:131 +msgid "invalid streaming start location" +msgstr "неприпустиме розташування початку потокового передавання" + +#: repl_scanner.l:182 scan.l:717 +msgid "unterminated quoted string" +msgstr "незавершений рядок в лапках" + +#: scan.l:458 +msgid "unterminated /* comment" +msgstr "незавершений коментар /*" + +#: scan.l:478 +msgid "unterminated bit string literal" +msgstr "незавершений бітовий рядок" + +#: scan.l:492 +msgid "unterminated hexadecimal string literal" +msgstr "незавершений шістнадцятковий рядок" + +#: scan.l:542 +#, c-format +msgid "unsafe use of string constant with Unicode escapes" +msgstr "небезпечне використання рядкової констани зі спеціальними кодами Unicode" + +#: scan.l:543 +#, c-format +msgid "String constants with Unicode escapes cannot be used when standard_conforming_strings is off." +msgstr "Константи рядка зі спеціальними кодами Unicode не можна використовувати, коли параметр standard_conforming_strings вимкнений." + +#: scan.l:604 +msgid "unhandled previous state in xqs" +msgstr "необроблений попередній стан у xqs" + +#: scan.l:678 +#, c-format +msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." +msgstr "Спеціальні коди Unicode повинні бути \\uXXXX або \\UXXXXXXXX." + +#: scan.l:689 +#, c-format +msgid "unsafe use of \\' in a string literal" +msgstr "небезпечне використання символу \\' в рядку" + +#: scan.l:690 +#, c-format +msgid "Use '' to write quotes in strings. \\' is insecure in client-only encodings." +msgstr "Використайте \" щоб записати лапки в рядку. Запис \\' небезпечний лише для клієнтських кодувань." + +#: scan.l:762 +msgid "unterminated dollar-quoted string" +msgstr "незавершений рядок з $" + +#: scan.l:779 scan.l:789 +msgid "zero-length delimited identifier" +msgstr "пустий ідентифікатор із роздільниками" + +#: scan.l:800 syncrep_scanner.l:91 +msgid "unterminated quoted identifier" +msgstr "незавершений ідентифікатор в лапках" + +#: scan.l:963 +msgid "operator too long" +msgstr "занадто довгий оператор" + +#. translator: %s is typically the translation of "syntax error" +#: scan.l:1171 +#, c-format +msgid "%s at end of input" +msgstr "%s в кінці введення" + +#. translator: first %s is typically the translation of "syntax error" +#: scan.l:1179 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s в або поблизу \"%s\"" + +#: scan.l:1373 +#, c-format +msgid "nonstandard use of \\' in a string literal" +msgstr "нестандартне використання \\' в рядку" + +#: scan.l:1374 +#, c-format +msgid "Use '' to write quotes in strings, or use the escape string syntax (E'...')." +msgstr "Щоб записати лапки у рядку використовуйте \" або синтаксис спеціальних рядків (E'...')." + +#: scan.l:1383 +#, c-format +msgid "nonstandard use of \\\\ in a string literal" +msgstr "нестандартне використання \\\\ в рядку" + +#: scan.l:1384 +#, c-format +msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." +msgstr "Для запису зворотніх скісних рисок \"\\\" використовуйте синтаксис спеціальних рядків, наприклад E'\\\\'." + +#: scan.l:1398 +#, c-format +msgid "nonstandard use of escape in a string literal" +msgstr "нестандартне використання спеціального символу в рядку" + +#: scan.l:1399 +#, c-format +msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." +msgstr "Для запису спеціальних символів використовуйте синтаксис спеціальних рядків E'\\r\\n'." + diff --git a/src/bin/initdb/nls.mk b/src/bin/initdb/nls.mk index 25eb45720fe74..fe7bdfc04a5f0 100644 --- a/src/bin/initdb/nls.mk +++ b/src/bin/initdb/nls.mk @@ -1,6 +1,6 @@ # src/bin/initdb/nls.mk CATALOG_NAME = initdb -AVAIL_LANGUAGES = cs de es fr he it ja ko pl pt_BR ru sv tr uk vi zh_CN +AVAIL_LANGUAGES = cs de el es fr he it ja ko pl pt_BR ru sv tr uk vi zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) findtimezone.c initdb.c ../../common/exec.c ../../common/fe_memutils.c ../../common/file_utils.c ../../common/pgfnames.c ../../common/restricted_token.c ../../common/rmtree.c ../../common/username.c ../../common/wait_error.c ../../port/dirmod.c GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) simple_prompt GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) diff --git a/src/bin/initdb/po/cs.po b/src/bin/initdb/po/cs.po index 35523060d7c98..b31d41448b4a4 100644 --- a/src/bin/initdb/po/cs.po +++ b/src/bin/initdb/po/cs.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: initdb-cs (PostgreSQL 9.3)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:14+0000\n" -"PO-Revision-Date: 2019-09-27 16:37+0200\n" +"POT-Creation-Date: 2020-10-31 16:15+0000\n" +"PO-Revision-Date: 2020-10-31 21:46+0100\n" "Last-Translator: Tomas Vondra \n" "Language-Team: Czech \n" "Language: cs\n" @@ -16,102 +16,102 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "chyba: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "varování: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "nelze získat aktuální adresář: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "neplatný binární soubor\"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "nelze číst binární soubor \"%s\"" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "nelze najít \"%s\" ke spuštění" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "nelze změnit adresář na \"%s\" : %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "nelze přečíst symbolický odkaz \"%s\": %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "volání pclose selhalo: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 -#: initdb.c:339 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: initdb.c:325 #, c-format msgid "out of memory" msgstr "nedostatek paměti" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "nedostatek paměti\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "nelze duplikovat null pointer (interní chyba)\n" -#: ../../common/file_utils.c:81 ../../common/file_utils.c:183 +#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 #, c-format msgid "could not stat file \"%s\": %m" msgstr "nelze získat informace o souboru \"%s\": %m" -#: ../../common/file_utils.c:160 ../../common/pgfnames.c:48 +#: ../../common/file_utils.c:158 ../../common/pgfnames.c:48 #, c-format msgid "could not open directory \"%s\": %m" msgstr "nelze otevřít adresář \"%s\": %m" -#: ../../common/file_utils.c:194 ../../common/pgfnames.c:69 +#: ../../common/file_utils.c:192 ../../common/pgfnames.c:69 #, c-format msgid "could not read directory \"%s\": %m" msgstr "nelze číst z adresáře \"%s\": %m" -#: ../../common/file_utils.c:226 ../../common/file_utils.c:285 -#: ../../common/file_utils.c:359 +#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 +#: ../../common/file_utils.c:357 #, c-format msgid "could not open file \"%s\": %m" msgstr "nelze otevřít soubor \"%s\": %m" -#: ../../common/file_utils.c:297 ../../common/file_utils.c:367 +#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "nelze provést fsync souboru \"%s\": %m" -#: ../../common/file_utils.c:377 +#: ../../common/file_utils.c:375 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "soubor \"%s\" nelze přejmenovat na \"%s\": %m" @@ -121,37 +121,44 @@ msgstr "soubor \"%s\" nelze přejmenovat na \"%s\": %m" msgid "could not close directory \"%s\": %m" msgstr "nelze zavřít adresář \"%s\": %m" -#: ../../common/restricted_token.c:69 +#: ../../common/restricted_token.c:64 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "na této platformě nelze vytvářet vyhrazené tokeny" +#| msgid "could not load library \"%s\": %s" +msgid "could not load library \"%s\": error code %lu" +msgstr "nelze načíst knihovnu \"%s\": kód chyby %lu" -#: ../../common/restricted_token.c:78 +#: ../../common/restricted_token.c:73 +#, c-format +#| msgid "cannot create restricted tokens on this platform" +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "na této platformě nelze vytvářet vyhrazené tokeny: kód chyby %lu" + +#: ../../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "nelze otevřít token procesu: chybový kód %lu" -#: ../../common/restricted_token.c:91 +#: ../../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "nelze alokovat SIDs: chybový kód %lu" -#: ../../common/restricted_token.c:110 +#: ../../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "nelze vytvořit vyhrazený token: chybový kód %lu" -#: ../../common/restricted_token.c:131 +#: ../../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "nelze nastartovat proces pro příkaz \"%s\": chybový kód %lu" -#: ../../common/restricted_token.c:169 +#: ../../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "nelze znovu spustit s vyhrazeným tokenem: chybový kód %lu" -#: ../../common/restricted_token.c:185 +#: ../../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "nelze získat návratový kód z podprovesu: chybový kód %lu" @@ -220,82 +227,82 @@ msgstr "nelze nastavit propojení \"%s\": %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "nelze najít funkci pro \"%s\": %s\n" -#: initdb.c:495 initdb.c:1534 +#: initdb.c:481 initdb.c:1505 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "nelze otevřít soubor \"%s\" pro čtení: %m" -#: initdb.c:550 initdb.c:858 initdb.c:884 +#: initdb.c:536 initdb.c:846 initdb.c:872 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "nelze otevřít soubor \"%s\" pro zápis: %m" -#: initdb.c:557 initdb.c:564 initdb.c:864 initdb.c:889 +#: initdb.c:543 initdb.c:550 initdb.c:852 initdb.c:877 #, c-format msgid "could not write file \"%s\": %m" msgstr "nelze zapsat soubor \"%s\": %m" -#: initdb.c:582 +#: initdb.c:568 #, c-format msgid "could not execute command \"%s\": %m" msgstr "nelze spustit příkaz \"%s\": %m" -#: initdb.c:600 +#: initdb.c:586 #, c-format msgid "removing data directory \"%s\"" msgstr "odstraňuji datový adresář \"%s\"" -#: initdb.c:602 +#: initdb.c:588 #, c-format msgid "failed to remove data directory" msgstr "selhalo odstranění datového adresáře" -#: initdb.c:606 +#: initdb.c:592 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "odstraňuji obsah datového adresáře \"%s\"" -#: initdb.c:609 +#: initdb.c:595 #, c-format msgid "failed to remove contents of data directory" msgstr "selhalo odstranění obsahu datového adresáře" -#: initdb.c:614 +#: initdb.c:600 #, c-format msgid "removing WAL directory \"%s\"" msgstr "odstraňuji WAL adresář \"%s\"" -#: initdb.c:616 +#: initdb.c:602 #, c-format msgid "failed to remove WAL directory" msgstr "selhalo odstranění WAL adresáře" -#: initdb.c:620 +#: initdb.c:606 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "odstraňuji obsah WAL adresáře \"%s\"" -#: initdb.c:622 +#: initdb.c:608 #, c-format msgid "failed to remove contents of WAL directory" msgstr "selhalo odstranění obsahu WAL adresáře" -#: initdb.c:629 +#: initdb.c:615 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "datový adresář \"%s\" nebyl na žádost uživatele odstraněn" -#: initdb.c:633 +#: initdb.c:619 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "WAL adresář \"%s\" nebyl na žádost uživatele odstraněn" -#: initdb.c:651 +#: initdb.c:637 #, c-format msgid "cannot be run as root" msgstr "nelze spouštět jako root" -#: initdb.c:653 +#: initdb.c:639 #, c-format msgid "" "Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" @@ -304,17 +311,17 @@ msgstr "" "Prosím přihlaste se jako (neprivilegovaný) uživatel, který bude vlastníkem\n" "serverového procesu (například pomocí příkazu \"su\").\n" -#: initdb.c:686 +#: initdb.c:672 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "\"%s\" není platný název kódování znaků" -#: initdb.c:817 +#: initdb.c:805 #, c-format msgid "file \"%s\" does not exist" msgstr "soubor \"%s\" neexistuje" -#: initdb.c:819 initdb.c:826 initdb.c:835 +#: initdb.c:807 initdb.c:814 initdb.c:823 #, c-format msgid "" "This might mean you have a corrupted installation or identified\n" @@ -323,124 +330,124 @@ msgstr "" "To znamená, že vaše instalace je poškozena, nebo jste\n" "zadal chybný adresář v parametru -L při spuštění.\n" -#: initdb.c:824 +#: initdb.c:812 #, c-format msgid "could not access file \"%s\": %m" msgstr "nelze přistupit k souboru \"%s\": %m" -#: initdb.c:833 +#: initdb.c:821 #, c-format msgid "file \"%s\" is not a regular file" msgstr "soubor \"%s\" není běžný soubor" -#: initdb.c:978 +#: initdb.c:966 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "vybírám implementaci dynamické sdílené paměti ... " -#: initdb.c:987 +#: initdb.c:975 #, c-format msgid "selecting default max_connections ... " msgstr "vybírám implicitní nastavení max_connections ... " -#: initdb.c:1018 +#: initdb.c:1006 #, c-format msgid "selecting default shared_buffers ... " msgstr "vybírám implicitní nastavení shared_buffers ... " -#: initdb.c:1052 +#: initdb.c:1040 #, c-format msgid "selecting default time zone ... " msgstr "vybírám implicitní časovou zónu ... " -#: initdb.c:1086 +#: initdb.c:1074 msgid "creating configuration files ... " msgstr "vytvářím konfigurační soubory ... " -#: initdb.c:1239 initdb.c:1258 initdb.c:1344 initdb.c:1359 +#: initdb.c:1227 initdb.c:1246 initdb.c:1332 initdb.c:1347 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "nelze změnit práva pro \"%s\": %m" -#: initdb.c:1381 +#: initdb.c:1369 #, c-format msgid "running bootstrap script ... " msgstr "spouštím bootstrap script ... " -#: initdb.c:1393 +#: initdb.c:1381 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "vstupní soubor \"%s\" nenáleží PostgreSQL %s" -#: initdb.c:1396 +#: initdb.c:1384 #, c-format msgid "Check your installation or specify the correct path using the option -L.\n" msgstr "Zkontrolujte vaši instalaci nebo zadejte platnou cestu pomocí parametru -L.\n" -#: initdb.c:1511 +#: initdb.c:1482 msgid "Enter new superuser password: " msgstr "Zadejte nové heslo pro superuživatele: " -#: initdb.c:1512 +#: initdb.c:1483 msgid "Enter it again: " msgstr "Zadejte ho znovu: " -#: initdb.c:1515 +#: initdb.c:1486 #, c-format msgid "Passwords didn't match.\n" msgstr "Hesla nesouhlasí.\n" -#: initdb.c:1541 +#: initdb.c:1512 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "nemohu přečíst heslo ze souboru \"%s\": %m" -#: initdb.c:1544 +#: initdb.c:1515 #, c-format msgid "password file \"%s\" is empty" msgstr "soubor s hesly \"%s\" je prázdný" -#: initdb.c:2107 +#: initdb.c:2043 #, c-format msgid "caught signal\n" msgstr "signál obdržen\n" -#: initdb.c:2113 +#: initdb.c:2049 #, c-format msgid "could not write to child process: %s\n" msgstr "nemohu zapsat do potomka: %s\n" -#: initdb.c:2121 +#: initdb.c:2057 #, c-format msgid "ok\n" msgstr "ok\n" -#: initdb.c:2211 +#: initdb.c:2147 #, c-format msgid "setlocale() failed" msgstr "setlocale() selhalo" -#: initdb.c:2232 +#: initdb.c:2168 #, c-format msgid "failed to restore old locale \"%s\"" msgstr "selhala obnova staré locale \"%s\"" -#: initdb.c:2241 +#: initdb.c:2177 #, c-format msgid "invalid locale name \"%s\"" msgstr "neplatný název národního nastavení (locale) \"%s\"" -#: initdb.c:2252 +#: initdb.c:2188 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "neplatné nastavení locale; zkontrolujte LANG a LC_* proměnné prostředí" -#: initdb.c:2279 +#: initdb.c:2215 #, c-format msgid "encoding mismatch" msgstr "nesouhlasí kódování znaků" -#: initdb.c:2281 +#: initdb.c:2217 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the\n" @@ -455,7 +462,7 @@ msgstr "" "spusťte znovu %s a buď nespecifikujte kódování znaků explicitně, nebo\n" "vyberte takovou kombinaci, která si odpovídá.\n" -#: initdb.c:2353 +#: initdb.c:2289 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -464,17 +471,17 @@ msgstr "" "%s inicializuji PostgreSQL klastr\n" "\n" -#: initdb.c:2354 +#: initdb.c:2290 #, c-format msgid "Usage:\n" msgstr "Použití:\n" -#: initdb.c:2355 +#: initdb.c:2291 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [PŘEPÍNAČ]... [DATAADR]\n" -#: initdb.c:2356 +#: initdb.c:2292 #, c-format msgid "" "\n" @@ -483,42 +490,42 @@ msgstr "" "\n" "Přepínače:\n" -#: initdb.c:2357 +#: initdb.c:2293 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr " -A, --auth=METODA výchozí autentizační metoda pro lokální spojení\n" -#: initdb.c:2358 +#: initdb.c:2294 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr " --auth-host=METHOD výchozí autentikační metoda pro lokální TCP/IP spojení\n" -#: initdb.c:2359 +#: initdb.c:2295 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr " --auth-local=METHOD výchozí autentikační metoda pro spojení pro lokální socket\n" -#: initdb.c:2360 +#: initdb.c:2296 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]DATAADR umístění tohoto databázového klastru\n" -#: initdb.c:2361 +#: initdb.c:2297 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=KÓDOVÁNÍ nastavení výchozího kódování pro nové databáze\n" -#: initdb.c:2362 +#: initdb.c:2298 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" msgstr " -g, --allow-group-access povolit čtení/spouštění pro skupinu na datovém adresáři\n" -#: initdb.c:2363 +#: initdb.c:2299 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=LOCALE nastavení implicitního národního nastavení pro novou databázi\n" -#: initdb.c:2364 +#: initdb.c:2300 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -532,17 +539,17 @@ msgstr "" " v příslušných kategoriích (výchozí hodnoty se \n" " vezmou z nastavení prostředí)\n" -#: initdb.c:2368 +#: initdb.c:2304 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale ekvivalent --locale=C\n" -#: initdb.c:2369 +#: initdb.c:2305 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=SOUBOR načti heslo pro nového superuživatele ze souboru\n" -#: initdb.c:2370 +#: initdb.c:2306 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -551,27 +558,27 @@ msgstr "" " -T, --text-search-config=CFG\n" " implicitní configurace fulltextového vyhledávání\n" -#: initdb.c:2372 +#: initdb.c:2308 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=JMÉNO jméno databázového superuživatele\n" -#: initdb.c:2373 +#: initdb.c:2309 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt zeptej se na heslo pro nového superuživatele\n" -#: initdb.c:2374 +#: initdb.c:2310 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALDIR umístění adresáře s transakčním logem\n" -#: initdb.c:2375 +#: initdb.c:2311 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=SIZE velikost WAL segmentů, v megabytech\n" -#: initdb.c:2376 +#: initdb.c:2312 #, c-format msgid "" "\n" @@ -580,42 +587,42 @@ msgstr "" "\n" "Méně často používané přepínače:\n" -#: initdb.c:2377 +#: initdb.c:2313 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug generuj spoustu ladicích informací\n" -#: initdb.c:2378 +#: initdb.c:2314 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums použij kontrolní součty datových stránek\n" -#: initdb.c:2379 +#: initdb.c:2315 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L DIRECTORY kde se nalézají vstupní soubory\n" -#: initdb.c:2380 +#: initdb.c:2316 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean neuklízet po chybách\n" -#: initdb.c:2381 +#: initdb.c:2317 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync nečekat na bezpečné zapsání změn na disk\n" -#: initdb.c:2382 +#: initdb.c:2318 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, --show ukaž interní nastavení\n" -#: initdb.c:2383 +#: initdb.c:2319 #, c-format msgid " -S, --sync-only only sync data directory\n" msgstr " -S, --sync-only pouze provést sync datového adresáře\n" -#: initdb.c:2384 +#: initdb.c:2320 #, c-format msgid "" "\n" @@ -624,17 +631,17 @@ msgstr "" "\n" "Ostatní přepínače:\n" -#: initdb.c:2385 +#: initdb.c:2321 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version vypiš informace o verzi, potom skonči\n" -#: initdb.c:2386 +#: initdb.c:2322 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ukaž tuto nápovědu, potom skonči\n" -#: initdb.c:2387 +#: initdb.c:2323 #, c-format msgid "" "\n" @@ -645,31 +652,36 @@ msgstr "" "Pokud není specifikován datový adresář, použije se proměnná\n" "prostředí PGDATA.\n" -#: initdb.c:2389 +#: initdb.c:2325 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Chyby hlaste na adresu .\n" +"Chyby hlašte na <%s>.\n" -#: initdb.c:2417 +#: initdb.c:2326 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" + +#: initdb.c:2354 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "neplatná autentikační metoda \"%s\" pro \"%s\" spojení" -#: initdb.c:2433 +#: initdb.c:2370 #, c-format msgid "must specify a password for the superuser to enable %s authentication" msgstr "musíte zadat heslo superuživatele pro použití autentizace typu %s" -#: initdb.c:2460 +#: initdb.c:2397 #, c-format msgid "no data directory specified" msgstr "není specifikován datový adresář" -#: initdb.c:2462 +#: initdb.c:2399 #, c-format msgid "" "You must identify the directory where the data for this database system\n" @@ -680,39 +692,39 @@ msgstr "" "Učiňte tak buď použitím přepínače -D nebo nastavením proměnné\n" "prostředí PGDATA.\n" -#: initdb.c:2497 +#: initdb.c:2434 #, c-format msgid "" -"The program \"postgres\" is needed by %s but was not found in the\n" +"The program \"%s\" is needed by %s but was not found in the\n" "same directory as \"%s\".\n" "Check your installation." msgstr "" -"Program \"postgres\" je vyžadován aplikací %s, ale nebyl nalezen ve\n" -"stejném adresáři jako \"%s\".\n" +"Program \"%s\" je vyžadován aplikací %s, ale nebyl nalezen ve stejném\n" +"adresáři jako \"%s\".\n" "Zkontrolujte vaši instalaci." -#: initdb.c:2502 +#: initdb.c:2439 #, c-format msgid "" -"The program \"postgres\" was found by \"%s\"\n" +"The program \"%s\" was found by \"%s\"\n" "but was not the same version as %s.\n" "Check your installation." msgstr "" -"Program \"postgres\" byl nalezen pomocí \"%s\",\n" +"Program \"%s\" byl nalezen pomocí \"%s\",\n" "ale nebyl ve stejné verzi jako %s.\n" "Zkontrolujte vaši instalaci." -#: initdb.c:2521 +#: initdb.c:2458 #, c-format msgid "input file location must be an absolute path" msgstr "cesta k umístění vstupního souboru musí být absolutní" -#: initdb.c:2538 +#: initdb.c:2475 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "Databázový klastr bude inicializován s locale %s.\n" -#: initdb.c:2541 +#: initdb.c:2478 #, c-format msgid "" "The database cluster will be initialized with locales\n" @@ -731,22 +743,22 @@ msgstr "" " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:2565 +#: initdb.c:2502 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "nemohu najít vhodné kódování pro locale \"%s\"" -#: initdb.c:2567 +#: initdb.c:2504 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "Spusťte znovu %s s přepínačem -E.\n" -#: initdb.c:2568 initdb.c:3196 initdb.c:3217 +#: initdb.c:2505 initdb.c:3127 initdb.c:3148 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" -#: initdb.c:2581 +#: initdb.c:2518 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -755,12 +767,12 @@ msgstr "" "Kódování %s vyplývající z locale není povoleno jako kódování na serveru.\n" "Implicitní kódování databáze bude nastaveno na %s.\n" -#: initdb.c:2586 +#: initdb.c:2523 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "locale \"%s\" vyžaduje nepodporované kódování \"%s\"" -#: initdb.c:2589 +#: initdb.c:2526 #, c-format msgid "" "Encoding \"%s\" is not allowed as a server-side encoding.\n" @@ -769,57 +781,57 @@ msgstr "" "Kódování %s není povoleno jako kódování na serveru.\n" "Pusťte znovu %s s jiným nastavením locale.\n" -#: initdb.c:2598 +#: initdb.c:2535 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "Výchozí kódování pro databáze bylo odpovídajícím způsobem nastaveno na %s.\n" -#: initdb.c:2666 +#: initdb.c:2597 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "nemohu najít vhodnou konfiguraci fulltextového vyhledávání \"%s\"" -#: initdb.c:2677 +#: initdb.c:2608 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "vhodná konfigurace fulltextového vyhledávání pro locale \"%s\" není známa" -#: initdb.c:2682 +#: initdb.c:2613 #, c-format msgid "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "zvolená konfigurace fulltextového vyhledávání \"%s\" nemusí souhlasit s locale \"%s\"" -#: initdb.c:2687 +#: initdb.c:2618 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "Implicitní konfigurace fulltextového vyhledávání bude nastavena na \"%s\".\n" -#: initdb.c:2731 initdb.c:2813 +#: initdb.c:2662 initdb.c:2744 #, c-format msgid "creating directory %s ... " msgstr "vytvářím adresář %s ... " -#: initdb.c:2737 initdb.c:2819 initdb.c:2884 initdb.c:2946 +#: initdb.c:2668 initdb.c:2750 initdb.c:2815 initdb.c:2877 #, c-format msgid "could not create directory \"%s\": %m" msgstr "nelze vytvořit adresář \"%s\": %m" -#: initdb.c:2748 initdb.c:2831 +#: initdb.c:2679 initdb.c:2762 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "opravuji oprávnění pro existující adresář %s ... " -#: initdb.c:2754 initdb.c:2837 +#: initdb.c:2685 initdb.c:2768 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "nelze změnit práva adresáře \"%s\": %m" -#: initdb.c:2768 initdb.c:2851 +#: initdb.c:2699 initdb.c:2782 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "adresář \"%s\" existuje, ale není prázdný" -#: initdb.c:2773 +#: initdb.c:2704 #, c-format msgid "" "If you want to create a new database system, either remove or empty\n" @@ -830,17 +842,17 @@ msgstr "" "vyprázdněte adresář \"%s\" nebo spusťte %s\n" "s argumentem jiným než \"%s\".\n" -#: initdb.c:2781 initdb.c:2863 initdb.c:3232 +#: initdb.c:2712 initdb.c:2794 initdb.c:3163 #, c-format msgid "could not access directory \"%s\": %m" msgstr "nelze přístoupit k adresáři \"%s\": %m" -#: initdb.c:2804 +#: initdb.c:2735 #, c-format msgid "WAL directory location must be an absolute path" msgstr "cesta k umístění WAL adresáře musí být absolutní" -#: initdb.c:2856 +#: initdb.c:2787 #, c-format msgid "" "If you want to store the WAL there, either remove or empty the directory\n" @@ -849,27 +861,27 @@ msgstr "" "Pokud v tomto adresáři chcete ukládat transakční log, odstraňte nebo\n" "vyprázdněte adresář \"%s\".\n" -#: initdb.c:2870 +#: initdb.c:2801 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "nelze vytvořit symbolický odkaz na \"%s\": %m" -#: initdb.c:2875 +#: initdb.c:2806 #, c-format msgid "symlinks are not supported on this platform" msgstr "na této platformě nejsou podporovány symbolické linky" -#: initdb.c:2899 +#: initdb.c:2830 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point.\n" msgstr "Obsahuje neviditelný soubor / soubor s tečkou na začátku názvu, možná proto že se jedná o mount point.\n" -#: initdb.c:2902 +#: initdb.c:2833 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point.\n" msgstr "Obsahuje lost+found adresář, možná proto že se jedná o mount point.\n" -#: initdb.c:2905 +#: initdb.c:2836 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -878,55 +890,55 @@ msgstr "" "Použití mount pointu přímo jako datového adresáře se nedoporučuje.\n" "Vytvořte v mount pointu podadresář.\n" -#: initdb.c:2931 +#: initdb.c:2862 #, c-format msgid "creating subdirectories ... " msgstr "vytvářím adresáře ... " -#: initdb.c:2977 +#: initdb.c:2908 msgid "performing post-bootstrap initialization ... " msgstr "provádím post-bootstrap inicializaci ... " -#: initdb.c:3134 +#: initdb.c:3065 #, c-format msgid "Running in debug mode.\n" msgstr "Běžím v ladicím režimu.\n" -#: initdb.c:3138 +#: initdb.c:3069 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "Běžím v režimu \"no-clean\". Chybné kroky nebudou uklizeny.\n" -#: initdb.c:3215 +#: initdb.c:3146 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "příliš mnoho argumentů v příkazové řádce (první je \"%s\")" -#: initdb.c:3236 initdb.c:3325 +#: initdb.c:3167 initdb.c:3256 msgid "syncing data to disk ... " msgstr "zapisuji data na disk ... " -#: initdb.c:3245 +#: initdb.c:3176 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "dotaz na heslo a soubor s heslem nemohou být vyžadovány najednou" -#: initdb.c:3270 +#: initdb.c:3201 #, c-format msgid "argument of --wal-segsize must be a number" msgstr "argument pro --wal-segsize musí být číslo" -#: initdb.c:3275 +#: initdb.c:3206 #, c-format msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024" msgstr "argument pro --wal-segsize musí být mocnina 2 mezi 1 a 1024" -#: initdb.c:3292 +#: initdb.c:3223 #, c-format msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" msgstr "superuživatelské jméno \"%s\" není povoleno; názvy rolí nemohou začínat \"pg_\"" -#: initdb.c:3296 +#: initdb.c:3227 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -937,17 +949,17 @@ msgstr "" "Tento uživatel musí být také vlastníkem serverového procesu.\n" "\n" -#: initdb.c:3312 +#: initdb.c:3243 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Kontrolní součty datových stránek jsou zapnuty.\n" -#: initdb.c:3314 +#: initdb.c:3245 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Kontrolní součty datových stránek jsou vypnuty.\n" -#: initdb.c:3331 +#: initdb.c:3262 #, c-format msgid "" "\n" @@ -958,18 +970,13 @@ msgstr "" "Zápis na disk přeskočen.\n" "Datový adresář může být v případě pádu operačního systému poškozený.\n" -#: initdb.c:3336 +#: initdb.c:3267 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "povoluji \"trust\" autentizační metodu pro lokální spojení" -#: initdb.c:3337 +#: initdb.c:3268 #, c-format -#| msgid "" -#| "\n" -#| "WARNING: enabling \"trust\" authentication for local connections\n" -#| "You can change this by editing pg_hba.conf or using the option -A, or\n" -#| "--auth-local and --auth-host, the next time you run initdb.\n" msgid "" "You can change this by editing pg_hba.conf or using the option -A, or\n" "--auth-local and --auth-host, the next time you run initdb.\n" @@ -978,11 +985,11 @@ msgstr "" "nebo --auth-local a --auth-host, při dalším spuštění initdb.\n" #. translator: This is a placeholder in a shell command. -#: initdb.c:3362 +#: initdb.c:3293 msgid "logfile" msgstr "logfile" -#: initdb.c:3364 +#: initdb.c:3295 #, c-format msgid "" "\n" @@ -997,134 +1004,159 @@ msgstr "" " %s\n" "\n" -#~ msgid "%s: The password file was not generated. Please report this problem.\n" -#~ msgstr "%s: Soubor s hesly nebyl vytvořen. Prosíme oznamte tento problém tvůrcům.\n" +#~ msgid "could not read symbolic link \"%s\"" +#~ msgstr "nelze číst symbolický link \"%s\"" -#~ msgid "%s: could not determine valid short version string\n" -#~ msgstr "%s: nemohu zjistit platné krátké označení verze\n" +#~ msgid "%s: could not stat file \"%s\": %s\n" +#~ msgstr "%s: nelze provést stat souboru \"%s\": %s\n" -#~ msgid "Using the top-level directory of a mount point is not recommended.\n" -#~ msgstr "Použití top-level adresáře mount pointu se nedoporučuje.\n" +#~ msgid "%s: could not open directory \"%s\": %s\n" +#~ msgstr "%s : nelze otevřít adresář \"%s\": %s\n" -#~ msgid "copying template1 to postgres ... " -#~ msgstr "kopíruji template1 do postgres ... " +#~ msgid "%s: could not read directory \"%s\": %s\n" +#~ msgstr "%s: nelze načíst adresář \"%s\": %s\n" -#~ msgid "copying template1 to template0 ... " -#~ msgstr "kopíruji template1 do template0 ... " +#~ msgid "%s: could not open file \"%s\": %s\n" +#~ msgstr "%s: nelze otevřít soubor \"%s\": %s\n" -#~ msgid "vacuuming database template1 ... " -#~ msgstr "pouštím VACUUM na databázi template1 ... " +#~ msgid "could not open directory \"%s\": %s\n" +#~ msgstr "nelze otevřít adresář \"%s\": %s\n" -#~ msgid "loading PL/pgSQL server-side language ... " -#~ msgstr "načítám PL/pgSQL jazyk ... " +#~ msgid "child process was terminated by signal %s" +#~ msgstr "potomek byl ukončen signálem %s" -#~ msgid "creating information schema ... " -#~ msgstr "vytvářím informační schéma ... " +#~ msgid "%s: out of memory\n" +#~ msgstr "%s: nedostatek paměti\n" -#~ msgid "setting privileges on built-in objects ... " -#~ msgstr "nastavuji oprávnění pro vestavěné objekty ... " +#~ msgid "%s: could not open file \"%s\" for reading: %s\n" +#~ msgstr "%s: nelze otevřít soubor \"%s\" pro čtení: %s\n" -#~ msgid "creating dictionaries ... " -#~ msgstr "vytvářím adresáře ... " +#~ msgid "%s: could not write file \"%s\": %s\n" +#~ msgstr "%s: nelze zapsat do souboru \"%s\": %s\n" -#~ msgid "creating conversions ... " -#~ msgstr "vytvářím konverze ... " +#~ msgid "%s: could not execute command \"%s\": %s\n" +#~ msgstr "%s: nelze vykonat příkaz \"%s\": %s\n" -#~ msgid "not supported on this platform\n" -#~ msgstr "na této platformě není podporováno\n" +#~ msgid "%s: failed to restore old locale \"%s\"\n" +#~ msgstr "%s: selhala obnova původní locale \"%s\"\n" -#~ msgid "Use the option \"--debug\" to see details.\n" -#~ msgstr "Pro více detailů použijte volbu \"--debug\".\n" +#~ msgid "%s: could not create directory \"%s\": %s\n" +#~ msgstr "%s: nelze vytvořít adresář \"%s\": %s\n" -#~ msgid "No usable system locales were found.\n" -#~ msgstr "Nebylo nalezené žádné použitelné systémové nárovní nastavení (locales).\n" +#~ msgid "%s: could not create symbolic link \"%s\": %s\n" +#~ msgstr "%s: nelze vytvořit symbolický link \"%s\": %s\n" -#~ msgid "%s: locale name has non-ASCII characters, skipped: \"%s\"\n" -#~ msgstr "%s: jméno locale obsahuje ne-ASCII znaky, přeskakuji: %s\n" +#~ msgid "%s: removing transaction log directory \"%s\"\n" +#~ msgstr "%s: odstraňuji adresář s transakčním logem \"%s\"\n" -#~ msgid "%s: locale name too long, skipped: \"%s\"\n" -#~ msgstr "%s: jméno locale je příliš dlouhé, přeskakuji: %s\n" +#~ msgid "%s: failed to remove transaction log directory\n" +#~ msgstr "%s: selhalo odstraňení adresáře s transakčním logem\n" -#~ msgid "creating collations ... " -#~ msgstr "vytvářím collations ... " +#~ msgid "%s: removing contents of transaction log directory \"%s\"\n" +#~ msgstr "%s: odstraňuji obsah adresáře s transakčním logem \"%s\"\n" -#~ msgid "loading system objects' descriptions ... " -#~ msgstr "nahrávám popisy systémových objektů ... " +#~ msgid "%s: failed to remove contents of transaction log directory\n" +#~ msgstr "%s: selhalo odstranění obsahu adresáře s transakčním logem\n" -#~ msgid "creating system views ... " -#~ msgstr "vytvářím systémové pohledy ... " +#~ msgid "%s: transaction log directory \"%s\" not removed at user's request\n" +#~ msgstr "%s: adresář s transakčním logem \"%s\" nebyl na žádost uživatele odstraněn\n" -#~ msgid "initializing dependencies ... " -#~ msgstr "inicializuji závislosti ... " +#~ msgid "%s: could not obtain information about current user: %s\n" +#~ msgstr "%s: nelze získat informace o aktualním uživateli: %s\n" -#~ msgid "setting password ... " -#~ msgstr "nastavuji heslo ... " +#~ msgid "%s: could not get current user name: %s\n" +#~ msgstr "%s: nelze získat jméno aktuálního uživatele: %s\n" + +#~ msgid "creating template1 database in %s/base/1 ... " +#~ msgstr "vytvářím databázi template1 v %s/base/1 ... " #~ msgid "initializing pg_authid ... " #~ msgstr "inicializuji pg_authid ... " -#~ msgid "creating template1 database in %s/base/1 ... " -#~ msgstr "vytvářím databázi template1 v %s/base/1 ... " +#~ msgid "setting password ... " +#~ msgstr "nastavuji heslo ... " -#~ msgid "%s: could not get current user name: %s\n" -#~ msgstr "%s: nelze získat jméno aktuálního uživatele: %s\n" +#~ msgid "initializing dependencies ... " +#~ msgstr "inicializuji závislosti ... " -#~ msgid "%s: could not obtain information about current user: %s\n" -#~ msgstr "%s: nelze získat informace o aktualním uživateli: %s\n" +#~ msgid "creating system views ... " +#~ msgstr "vytvářím systémové pohledy ... " -#~ msgid "%s: transaction log directory \"%s\" not removed at user's request\n" -#~ msgstr "%s: adresář s transakčním logem \"%s\" nebyl na žádost uživatele odstraněn\n" +#~ msgid "loading system objects' descriptions ... " +#~ msgstr "nahrávám popisy systémových objektů ... " -#~ msgid "%s: failed to remove contents of transaction log directory\n" -#~ msgstr "%s: selhalo odstranění obsahu adresáře s transakčním logem\n" +#~ msgid "creating collations ... " +#~ msgstr "vytvářím collations ... " -#~ msgid "%s: removing contents of transaction log directory \"%s\"\n" -#~ msgstr "%s: odstraňuji obsah adresáře s transakčním logem \"%s\"\n" +#~ msgid "%s: locale name too long, skipped: \"%s\"\n" +#~ msgstr "%s: jméno locale je příliš dlouhé, přeskakuji: %s\n" -#~ msgid "%s: failed to remove transaction log directory\n" -#~ msgstr "%s: selhalo odstraňení adresáře s transakčním logem\n" +#~ msgid "%s: locale name has non-ASCII characters, skipped: \"%s\"\n" +#~ msgstr "%s: jméno locale obsahuje ne-ASCII znaky, přeskakuji: %s\n" -#~ msgid "%s: removing transaction log directory \"%s\"\n" -#~ msgstr "%s: odstraňuji adresář s transakčním logem \"%s\"\n" +#~ msgid "No usable system locales were found.\n" +#~ msgstr "Nebylo nalezené žádné použitelné systémové nárovní nastavení (locales).\n" -#~ msgid "%s: could not create symbolic link \"%s\": %s\n" -#~ msgstr "%s: nelze vytvořit symbolický link \"%s\": %s\n" +#~ msgid "Use the option \"--debug\" to see details.\n" +#~ msgstr "Pro více detailů použijte volbu \"--debug\".\n" -#~ msgid "%s: could not create directory \"%s\": %s\n" -#~ msgstr "%s: nelze vytvořít adresář \"%s\": %s\n" +#~ msgid "not supported on this platform\n" +#~ msgstr "na této platformě není podporováno\n" -#~ msgid "%s: failed to restore old locale \"%s\"\n" -#~ msgstr "%s: selhala obnova původní locale \"%s\"\n" +#~ msgid "creating conversions ... " +#~ msgstr "vytvářím konverze ... " -#~ msgid "%s: could not execute command \"%s\": %s\n" -#~ msgstr "%s: nelze vykonat příkaz \"%s\": %s\n" +#~ msgid "creating dictionaries ... " +#~ msgstr "vytvářím adresáře ... " -#~ msgid "%s: could not write file \"%s\": %s\n" -#~ msgstr "%s: nelze zapsat do souboru \"%s\": %s\n" +#~ msgid "setting privileges on built-in objects ... " +#~ msgstr "nastavuji oprávnění pro vestavěné objekty ... " -#~ msgid "%s: could not open file \"%s\" for reading: %s\n" -#~ msgstr "%s: nelze otevřít soubor \"%s\" pro čtení: %s\n" +#~ msgid "creating information schema ... " +#~ msgstr "vytvářím informační schéma ... " -#~ msgid "%s: out of memory\n" -#~ msgstr "%s: nedostatek paměti\n" +#~ msgid "loading PL/pgSQL server-side language ... " +#~ msgstr "načítám PL/pgSQL jazyk ... " -#~ msgid "child process was terminated by signal %s" -#~ msgstr "potomek byl ukončen signálem %s" +#~ msgid "vacuuming database template1 ... " +#~ msgstr "pouštím VACUUM na databázi template1 ... " -#~ msgid "could not open directory \"%s\": %s\n" -#~ msgstr "nelze otevřít adresář \"%s\": %s\n" +#~ msgid "copying template1 to template0 ... " +#~ msgstr "kopíruji template1 do template0 ... " -#~ msgid "%s: could not open file \"%s\": %s\n" -#~ msgstr "%s: nelze otevřít soubor \"%s\": %s\n" +#~ msgid "copying template1 to postgres ... " +#~ msgstr "kopíruji template1 do postgres ... " -#~ msgid "%s: could not read directory \"%s\": %s\n" -#~ msgstr "%s: nelze načíst adresář \"%s\": %s\n" +#~ msgid "Using the top-level directory of a mount point is not recommended.\n" +#~ msgstr "Použití top-level adresáře mount pointu se nedoporučuje.\n" -#~ msgid "%s: could not open directory \"%s\": %s\n" -#~ msgstr "%s : nelze otevřít adresář \"%s\": %s\n" +#~ msgid "%s: could not determine valid short version string\n" +#~ msgstr "%s: nemohu zjistit platné krátké označení verze\n" -#~ msgid "%s: could not stat file \"%s\": %s\n" -#~ msgstr "%s: nelze provést stat souboru \"%s\": %s\n" +#~ msgid "%s: The password file was not generated. Please report this problem.\n" +#~ msgstr "%s: Soubor s hesly nebyl vytvořen. Prosíme oznamte tento problém tvůrcům.\n" -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "nelze číst symbolický link \"%s\"" +#~ msgid "" +#~ "The program \"postgres\" was found by \"%s\"\n" +#~ "but was not the same version as %s.\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Program \"postgres\" byl nalezen pomocí \"%s\",\n" +#~ "ale nebyl ve stejné verzi jako %s.\n" +#~ "Zkontrolujte vaši instalaci." + +#~ msgid "" +#~ "The program \"postgres\" is needed by %s but was not found in the\n" +#~ "same directory as \"%s\".\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Program \"postgres\" je vyžadován aplikací %s, ale nebyl nalezen ve\n" +#~ "stejném adresáři jako \"%s\".\n" +#~ "Zkontrolujte vaši instalaci." + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Chyby hlaste na adresu .\n" diff --git a/src/bin/initdb/po/de.po b/src/bin/initdb/po/de.po index 842660d5f74c3..4543e9cad3d97 100644 --- a/src/bin/initdb/po/de.po +++ b/src/bin/initdb/po/de.po @@ -1,14 +1,14 @@ # German message translation file for initdb. -# Peter Eisentraut , 2003 - 2020. +# Peter Eisentraut , 2003 - 2021. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 13\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-09 00:16+0000\n" -"PO-Revision-Date: 2020-05-09 09:55+0200\n" +"POT-Creation-Date: 2021-04-27 04:17+0000\n" +"PO-Revision-Date: 2021-04-27 07:33+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -16,58 +16,58 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "Fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "Fehler: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "Warnung: " -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "konnte aktuelles Verzeichnis nicht ermitteln: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "ungültige Programmdatei »%s«" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "konnte Programmdatei »%s« nicht lesen" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "konnte kein »%s« zum Ausführen finden" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "konnte nicht in Verzeichnis »%s« wechseln: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht lesen: %m" -#: ../../common/exec.c:410 +#: ../../common/exec.c:409 #, c-format -msgid "pclose failed: %m" -msgstr "pclose fehlgeschlagen: %m" +msgid "%s() failed: %m" +msgstr "%s() fehlgeschlagen: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 -#: initdb.c:325 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 +#: initdb.c:328 #, c-format msgid "out of memory" msgstr "Speicher aufgebraucht" @@ -83,33 +83,33 @@ msgstr "Speicher aufgebraucht\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" -#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 +#: ../../common/file_utils.c:87 ../../common/file_utils.c:451 #, c-format msgid "could not stat file \"%s\": %m" msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" -#: ../../common/file_utils.c:158 ../../common/pgfnames.c:48 +#: ../../common/file_utils.c:166 ../../common/pgfnames.c:48 #, c-format msgid "could not open directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht öffnen: %m" -#: ../../common/file_utils.c:192 ../../common/pgfnames.c:69 +#: ../../common/file_utils.c:200 ../../common/pgfnames.c:69 #, c-format msgid "could not read directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht lesen: %m" -#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 -#: ../../common/file_utils.c:357 +#: ../../common/file_utils.c:232 ../../common/file_utils.c:291 +#: ../../common/file_utils.c:365 #, c-format msgid "could not open file \"%s\": %m" msgstr "konnte Datei »%s« nicht öffnen: %m" -#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 +#: ../../common/file_utils.c:303 ../../common/file_utils.c:373 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fsyncen: %m" -#: ../../common/file_utils.c:375 +#: ../../common/file_utils.c:383 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "konnte Datei »%s« nicht in »%s« umbenennen: %m" @@ -223,82 +223,82 @@ msgstr "konnte Junction für »%s« nicht erzeugen: %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "konnte Junction für »%s« nicht ermitteln: %s\n" -#: initdb.c:481 initdb.c:1505 +#: initdb.c:461 initdb.c:1493 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %m" -#: initdb.c:536 initdb.c:846 initdb.c:872 +#: initdb.c:505 initdb.c:827 initdb.c:853 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "konnte Datei »%s« nicht zum Schreiben öffnen: %m" -#: initdb.c:543 initdb.c:550 initdb.c:852 initdb.c:877 +#: initdb.c:512 initdb.c:519 initdb.c:833 initdb.c:858 #, c-format msgid "could not write file \"%s\": %m" msgstr "konnte Datei »%s« nicht schreiben: %m" -#: initdb.c:568 +#: initdb.c:537 #, c-format msgid "could not execute command \"%s\": %m" msgstr "konnte Befehl »%s« nicht ausführen: %m" -#: initdb.c:586 +#: initdb.c:555 #, c-format msgid "removing data directory \"%s\"" msgstr "entferne Datenverzeichnis »%s«" -#: initdb.c:588 +#: initdb.c:557 #, c-format msgid "failed to remove data directory" msgstr "konnte Datenverzeichnis nicht entfernen" -#: initdb.c:592 +#: initdb.c:561 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "entferne Inhalt des Datenverzeichnisses »%s«" -#: initdb.c:595 +#: initdb.c:564 #, c-format msgid "failed to remove contents of data directory" msgstr "konnte Inhalt des Datenverzeichnisses nicht entfernen" -#: initdb.c:600 +#: initdb.c:569 #, c-format msgid "removing WAL directory \"%s\"" msgstr "entferne WAL-Verzeichnis »%s«" -#: initdb.c:602 +#: initdb.c:571 #, c-format msgid "failed to remove WAL directory" msgstr "konnte WAL-Verzeichnis nicht entfernen" -#: initdb.c:606 +#: initdb.c:575 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "entferne Inhalt des WAL-Verzeichnisses »%s«" -#: initdb.c:608 +#: initdb.c:577 #, c-format msgid "failed to remove contents of WAL directory" msgstr "konnte Inhalt des WAL-Verzeichnisses nicht entfernen" -#: initdb.c:615 +#: initdb.c:584 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "Datenverzeichnis »%s« wurde auf Anwenderwunsch nicht entfernt" -#: initdb.c:619 +#: initdb.c:588 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "WAL-Verzeichnis »%s« wurde auf Anwenderwunsch nicht entfernt" -#: initdb.c:637 +#: initdb.c:606 #, c-format msgid "cannot be run as root" msgstr "kann nicht als root ausgeführt werden" -#: initdb.c:639 +#: initdb.c:608 #, c-format msgid "" "Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" @@ -307,17 +307,17 @@ msgstr "" "Bitte loggen Sie sich (z.B. mit »su«) als der (unprivilegierte) Benutzer\n" "ein, der Eigentümer des Serverprozesses sein soll.\n" -#: initdb.c:672 +#: initdb.c:641 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "»%s« ist keine gültige Serverkodierung" -#: initdb.c:805 +#: initdb.c:786 #, c-format msgid "file \"%s\" does not exist" msgstr "Datei »%s« existiert nicht" -#: initdb.c:807 initdb.c:814 initdb.c:823 +#: initdb.c:788 initdb.c:795 initdb.c:804 #, c-format msgid "" "This might mean you have a corrupted installation or identified\n" @@ -326,126 +326,126 @@ msgstr "" "Das könnte bedeuten, dass Ihre Installation fehlerhaft ist oder dass Sie das\n" "falsche Verzeichnis mit der Kommandozeilenoption -L angegeben haben.\n" -#: initdb.c:812 +#: initdb.c:793 #, c-format msgid "could not access file \"%s\": %m" msgstr "konnte nicht auf Datei »%s« zugreifen: %m" -#: initdb.c:821 +#: initdb.c:802 #, c-format msgid "file \"%s\" is not a regular file" msgstr "Datei »%s« ist keine normale Datei" -#: initdb.c:966 +#: initdb.c:947 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "wähle Implementierung von dynamischem Shared Memory ... " -#: initdb.c:975 +#: initdb.c:956 #, c-format msgid "selecting default max_connections ... " msgstr "wähle Vorgabewert für max_connections ... " -#: initdb.c:1006 +#: initdb.c:987 #, c-format msgid "selecting default shared_buffers ... " msgstr "wähle Vorgabewert für shared_buffers ... " -#: initdb.c:1040 +#: initdb.c:1021 #, c-format msgid "selecting default time zone ... " msgstr "wähle Vorgabewert für Zeitzone ... " -#: initdb.c:1074 +#: initdb.c:1055 msgid "creating configuration files ... " msgstr "erzeuge Konfigurationsdateien ... " -#: initdb.c:1227 initdb.c:1246 initdb.c:1332 initdb.c:1347 +#: initdb.c:1214 initdb.c:1233 initdb.c:1319 initdb.c:1334 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "konnte Zugriffsrechte von »%s« nicht ändern: %m" -#: initdb.c:1369 +#: initdb.c:1356 #, c-format msgid "running bootstrap script ... " msgstr "führe Bootstrap-Skript aus ... " -#: initdb.c:1381 +#: initdb.c:1368 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "Eingabedatei »%s« gehört nicht zu PostgreSQL %s" -#: initdb.c:1384 +#: initdb.c:1371 #, c-format msgid "Check your installation or specify the correct path using the option -L.\n" msgstr "" "Prüfen Sie Ihre Installation oder geben Sie den korrekten Pfad mit der\n" "Option -L an.\n" -#: initdb.c:1482 +#: initdb.c:1470 msgid "Enter new superuser password: " msgstr "Geben Sie das neue Superuser-Passwort ein: " -#: initdb.c:1483 +#: initdb.c:1471 msgid "Enter it again: " msgstr "Geben Sie es noch einmal ein: " -#: initdb.c:1486 +#: initdb.c:1474 #, c-format msgid "Passwords didn't match.\n" msgstr "Passwörter stimmten nicht überein.\n" -#: initdb.c:1512 +#: initdb.c:1501 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "konnte Passwort nicht aus Datei »%s« lesen: %m" -#: initdb.c:1515 +#: initdb.c:1504 #, c-format msgid "password file \"%s\" is empty" msgstr "Passwortdatei »%s« ist leer" -#: initdb.c:2043 +#: initdb.c:1995 #, c-format msgid "caught signal\n" msgstr "Signal abgefangen\n" -#: initdb.c:2049 +#: initdb.c:2001 #, c-format msgid "could not write to child process: %s\n" msgstr "konnte nicht an Kindprozess schreiben: %s\n" -#: initdb.c:2057 +#: initdb.c:2009 #, c-format msgid "ok\n" msgstr "ok\n" -#: initdb.c:2147 +#: initdb.c:2099 #, c-format msgid "setlocale() failed" msgstr "setlocale() fehlgeschlagen" -#: initdb.c:2168 +#: initdb.c:2120 #, c-format msgid "failed to restore old locale \"%s\"" msgstr "konnte alte Locale »%s« nicht wiederherstellen" -#: initdb.c:2177 +#: initdb.c:2129 #, c-format msgid "invalid locale name \"%s\"" msgstr "ungültiger Locale-Name: »%s«" -#: initdb.c:2188 +#: initdb.c:2140 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "ungültige Locale-Einstellungen; prüfen Sie die Umgebungsvariablen LANG und LC_*" -#: initdb.c:2215 +#: initdb.c:2167 #, c-format msgid "encoding mismatch" msgstr "unpassende Kodierungen" -#: initdb.c:2217 +#: initdb.c:2169 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the\n" @@ -460,7 +460,7 @@ msgstr "" "führen. Starten Sie %s erneut und geben Sie entweder keine\n" "Kodierung explizit an oder wählen Sie eine passende Kombination.\n" -#: initdb.c:2289 +#: initdb.c:2241 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -469,17 +469,17 @@ msgstr "" "%s initialisiert einen PostgreSQL-Datenbankcluster.\n" "\n" -#: initdb.c:2290 +#: initdb.c:2242 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: initdb.c:2291 +#: initdb.c:2243 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPTION]... [DATENVERZEICHNIS]\n" -#: initdb.c:2292 +#: initdb.c:2244 #, c-format msgid "" "\n" @@ -488,48 +488,53 @@ msgstr "" "\n" "Optionen:\n" -#: initdb.c:2293 +#: initdb.c:2245 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr " -A, --auth=METHODE vorgegebene Authentifizierungsmethode für lokale Verbindungen\n" -#: initdb.c:2294 +#: initdb.c:2246 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr "" " --auth-host=METHODE vorgegebene Authentifizierungsmethode für lokale\n" " TCP/IP-Verbindungen\n" -#: initdb.c:2295 +#: initdb.c:2247 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr "" " --auth-local=METHODE vorgegebene Authentifizierungsmethode für Verbindungen\n" " auf lokalen Sockets\n" -#: initdb.c:2296 +#: initdb.c:2248 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]DATENVERZ Datenverzeichnis für diesen Datenbankcluster\n" -#: initdb.c:2297 +#: initdb.c:2249 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=KODIERUNG setze Standardkodierung für neue Datenbanken\n" -#: initdb.c:2298 +#: initdb.c:2250 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" msgstr "" " -g, --allow-group-access Lese- und Ausführungsrechte am Datenverzeichnis\n" " für Gruppe setzen\n" -#: initdb.c:2299 +#: initdb.c:2251 +#, c-format +msgid " -k, --data-checksums use data page checksums\n" +msgstr " -k, --data-checksums Datenseitenprüfsummen verwenden\n" + +#: initdb.c:2252 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=LOCALE setze Standardlocale für neue Datenbanken\n" -#: initdb.c:2300 +#: initdb.c:2253 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -543,17 +548,17 @@ msgstr "" " für neue Datenbanken (Voreinstellung aus der\n" " Umgebung entnommen)\n" -#: initdb.c:2304 +#: initdb.c:2257 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale entspricht --locale=C\n" -#: initdb.c:2305 +#: initdb.c:2258 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=DATEI lese Passwort des neuen Superusers aus Datei\n" -#: initdb.c:2306 +#: initdb.c:2259 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -562,27 +567,27 @@ msgstr "" " -T, --text-search-config=KFG\n" " Standardtextsuchekonfiguration\n" -#: initdb.c:2308 +#: initdb.c:2261 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=NAME Datenbank-Superusername\n" -#: initdb.c:2309 +#: initdb.c:2262 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt frage nach Passwort für neuen Superuser\n" -#: initdb.c:2310 +#: initdb.c:2263 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALVERZ Verzeichnis für das Write-Ahead-Log\n" -#: initdb.c:2311 +#: initdb.c:2264 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=ZAHL Größe eines WAL-Segments, in Megabyte\n" -#: initdb.c:2312 +#: initdb.c:2265 #, c-format msgid "" "\n" @@ -591,44 +596,44 @@ msgstr "" "\n" "Weniger häufig verwendete Optionen:\n" -#: initdb.c:2313 +#: initdb.c:2266 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug erzeuge eine Menge Debug-Ausgaben\n" -#: initdb.c:2314 -#, c-format -msgid " -k, --data-checksums use data page checksums\n" -msgstr " -k, --data-checksums Datenseitenprüfsummen verwenden\n" - -#: initdb.c:2315 +#: initdb.c:2267 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L VERZEICHNIS wo sind die Eingabedateien zu finden\n" -#: initdb.c:2316 +#: initdb.c:2268 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean nach Fehlern nicht aufräumen\n" -#: initdb.c:2317 +#: initdb.c:2269 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr "" " -N, --no-sync nicht warten, bis Änderungen sicher auf Festplatte\n" " geschrieben sind\n" -#: initdb.c:2318 +#: initdb.c:2270 +#, c-format +msgid " --no-instructions do not print instructions for next steps\n" +msgstr " --no-instructions Anleitung für nächste Schritte nicht ausgeben\n" + +#: initdb.c:2271 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, --show zeige interne Einstellungen\n" -#: initdb.c:2319 +#: initdb.c:2272 #, c-format msgid " -S, --sync-only only sync data directory\n" msgstr " -S, --sync-only nur Datenverzeichnis synchronisieren\n" -#: initdb.c:2320 +#: initdb.c:2273 #, c-format msgid "" "\n" @@ -637,17 +642,17 @@ msgstr "" "\n" "Weitere Optionen:\n" -#: initdb.c:2321 +#: initdb.c:2274 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: initdb.c:2322 +#: initdb.c:2275 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: initdb.c:2323 +#: initdb.c:2276 #, c-format msgid "" "\n" @@ -658,7 +663,7 @@ msgstr "" "Wenn kein Datenverzeichnis angegeben ist, dann wird die Umgebungsvariable\n" "PGDATA verwendet.\n" -#: initdb.c:2325 +#: initdb.c:2278 #, c-format msgid "" "\n" @@ -667,27 +672,27 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: initdb.c:2326 +#: initdb.c:2279 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: initdb.c:2354 +#: initdb.c:2307 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "ungültige Authentifizierungsmethode »%s« für »%s«-Verbindungen" -#: initdb.c:2370 +#: initdb.c:2323 #, c-format -msgid "must specify a password for the superuser to enable %s authentication" -msgstr "Superuser-Passwort muss angegeben werden um %s-Authentifizierung einzuschalten" +msgid "must specify a password for the superuser to enable password authentication" +msgstr "Superuser-Passwort muss angegeben werden um Passwortauthentifizierung einzuschalten" -#: initdb.c:2397 +#: initdb.c:2344 #, c-format msgid "no data directory specified" msgstr "kein Datenverzeichnis angegeben" -#: initdb.c:2399 +#: initdb.c:2346 #, c-format msgid "" "You must identify the directory where the data for this database system\n" @@ -698,7 +703,12 @@ msgstr "" "werden soll. Machen Sie dies entweder mit der Kommandozeilenoption -D\n" "oder mit der Umgebungsvariable PGDATA.\n" -#: initdb.c:2434 +#: initdb.c:2364 +#, c-format +msgid "could not set environment" +msgstr "konnte Umgebung nicht setzen" + +#: initdb.c:2384 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -709,7 +719,7 @@ msgstr "" "selben Verzeichnis wie »%s« gefunden.\n" "Prüfen Sie Ihre Installation." -#: initdb.c:2439 +#: initdb.c:2389 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -720,17 +730,17 @@ msgstr "" "aber es hatte nicht die gleiche Version wie %s.\n" "Prüfen Sie Ihre Installation." -#: initdb.c:2458 +#: initdb.c:2408 #, c-format msgid "input file location must be an absolute path" msgstr "Eingabedatei muss absoluten Pfad haben" -#: initdb.c:2475 +#: initdb.c:2425 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "Der Datenbankcluster wird mit der Locale »%s« initialisiert werden.\n" -#: initdb.c:2478 +#: initdb.c:2428 #, c-format msgid "" "The database cluster will be initialized with locales\n" @@ -749,22 +759,22 @@ msgstr "" " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:2502 +#: initdb.c:2452 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "konnte keine passende Kodierung für Locale »%s« finden" -#: initdb.c:2504 +#: initdb.c:2454 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "Führen Sie %s erneut mit der Option -E aus.\n" -#: initdb.c:2505 initdb.c:3127 initdb.c:3148 +#: initdb.c:2455 initdb.c:3089 initdb.c:3110 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: initdb.c:2518 +#: initdb.c:2468 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -773,12 +783,12 @@ msgstr "" "Die von der Locale gesetzte Kodierung »%s« ist nicht als serverseitige Kodierung erlaubt.\n" "Die Standarddatenbankkodierung wird stattdessen auf »%s« gesetzt.\n" -#: initdb.c:2523 +#: initdb.c:2473 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "Locale »%s« benötigt nicht unterstützte Kodierung »%s«" -#: initdb.c:2526 +#: initdb.c:2476 #, c-format msgid "" "Encoding \"%s\" is not allowed as a server-side encoding.\n" @@ -787,57 +797,57 @@ msgstr "" "Kodierung »%s« ist nicht als serverseitige Kodierung erlaubt.\n" "Starten Sie %s erneut mit einer anderen Locale-Wahl.\n" -#: initdb.c:2535 +#: initdb.c:2485 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "Die Standarddatenbankkodierung wurde entsprechend auf »%s« gesetzt.\n" -#: initdb.c:2597 +#: initdb.c:2551 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "konnte keine passende Textsuchekonfiguration für Locale »%s« finden" -#: initdb.c:2608 +#: initdb.c:2562 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "passende Textsuchekonfiguration für Locale »%s« ist unbekannt" -#: initdb.c:2613 +#: initdb.c:2567 #, c-format msgid "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "angegebene Textsuchekonfiguration »%s« passt möglicherweise nicht zur Locale »%s«" -#: initdb.c:2618 +#: initdb.c:2572 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "Die Standardtextsuchekonfiguration wird auf »%s« gesetzt.\n" -#: initdb.c:2662 initdb.c:2744 +#: initdb.c:2616 initdb.c:2698 #, c-format msgid "creating directory %s ... " msgstr "erzeuge Verzeichnis %s ... " -#: initdb.c:2668 initdb.c:2750 initdb.c:2815 initdb.c:2877 +#: initdb.c:2622 initdb.c:2704 initdb.c:2769 initdb.c:2831 #, c-format msgid "could not create directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht erzeugen: %m" -#: initdb.c:2679 initdb.c:2762 +#: initdb.c:2633 initdb.c:2716 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "berichtige Zugriffsrechte des bestehenden Verzeichnisses %s ... " -#: initdb.c:2685 initdb.c:2768 +#: initdb.c:2639 initdb.c:2722 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "konnte Rechte des Verzeichnisses »%s« nicht ändern: %m" -#: initdb.c:2699 initdb.c:2782 +#: initdb.c:2653 initdb.c:2736 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "Verzeichnis »%s« existiert aber ist nicht leer" -#: initdb.c:2704 +#: initdb.c:2658 #, c-format msgid "" "If you want to create a new database system, either remove or empty\n" @@ -848,17 +858,17 @@ msgstr "" "Sie das Verzeichnis »%s« or führen Sie %s\n" "mit einem anderen Argument als »%s« aus.\n" -#: initdb.c:2712 initdb.c:2794 initdb.c:3163 +#: initdb.c:2666 initdb.c:2748 initdb.c:3125 #, c-format msgid "could not access directory \"%s\": %m" msgstr "konnte nicht auf Verzeichnis »%s« zugreifen: %m" -#: initdb.c:2735 +#: initdb.c:2689 #, c-format msgid "WAL directory location must be an absolute path" msgstr "WAL-Verzeichnis muss absoluten Pfad haben" -#: initdb.c:2787 +#: initdb.c:2741 #, c-format msgid "" "If you want to store the WAL there, either remove or empty the directory\n" @@ -867,27 +877,27 @@ msgstr "" "Wenn Sie dort den WAL ablegen wollen, entfernen oder leeren Sie das\n" "Verzeichnis »%s«.\n" -#: initdb.c:2801 +#: initdb.c:2755 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht erstellen: %m" -#: initdb.c:2806 +#: initdb.c:2760 #, c-format msgid "symlinks are not supported on this platform" msgstr "symbolische Verknüpfungen werden auf dieser Plattform nicht unterstützt" -#: initdb.c:2830 +#: initdb.c:2784 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point.\n" msgstr "Es enthält eine unsichtbare Datei (beginnt mit Punkt), vielleicht weil es ein Einhängepunkt ist.\n" -#: initdb.c:2833 +#: initdb.c:2787 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point.\n" msgstr "Es enthält ein Verzeichnis »lost+found«, vielleicht weil es ein Einhängepunkt ist.\n" -#: initdb.c:2836 +#: initdb.c:2790 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -896,55 +906,55 @@ msgstr "" "Einen Einhängepunkt direkt als Datenverzeichnis zu verwenden wird nicht empfohlen.\n" "Erzeugen Sie ein Unterverzeichnis unter dem Einhängepunkt.\n" -#: initdb.c:2862 +#: initdb.c:2816 #, c-format msgid "creating subdirectories ... " msgstr "erzeuge Unterverzeichnisse ... " -#: initdb.c:2908 +#: initdb.c:2862 msgid "performing post-bootstrap initialization ... " msgstr "führe Post-Bootstrap-Initialisierung durch ... " -#: initdb.c:3065 +#: initdb.c:3024 #, c-format msgid "Running in debug mode.\n" msgstr "Debug-Modus ist an.\n" -#: initdb.c:3069 +#: initdb.c:3028 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "No-Clean-Modus ist an. Bei Fehlern wird nicht aufgeräumt.\n" -#: initdb.c:3146 +#: initdb.c:3108 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" -#: initdb.c:3167 initdb.c:3256 +#: initdb.c:3129 initdb.c:3218 msgid "syncing data to disk ... " msgstr "synchronisiere Daten auf Festplatte ... " -#: initdb.c:3176 +#: initdb.c:3138 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "Passwortprompt und Passwortdatei können nicht zusammen angegeben werden" -#: initdb.c:3201 +#: initdb.c:3163 #, c-format msgid "argument of --wal-segsize must be a number" msgstr "Argument von --wal-segsize muss eine Zahl sein" -#: initdb.c:3206 +#: initdb.c:3168 #, c-format msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024" msgstr "Argument von --wal-segsize muss eine Zweierpotenz zwischen 1 und 1024 sein" -#: initdb.c:3223 +#: initdb.c:3185 #, c-format msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" msgstr "Superuser-Name »%s« nicht erlaubt; Rollennamen können nicht mit »pg_« anfangen" -#: initdb.c:3227 +#: initdb.c:3189 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -955,17 +965,17 @@ msgstr "" "»%s« gehören. Diesem Benutzer muss auch der Serverprozess gehören.\n" "\n" -#: initdb.c:3243 +#: initdb.c:3205 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Datenseitenprüfsummen sind eingeschaltet.\n" -#: initdb.c:3245 +#: initdb.c:3207 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Datenseitenprüfsummen sind ausgeschaltet.\n" -#: initdb.c:3262 +#: initdb.c:3224 #, c-format msgid "" "\n" @@ -976,12 +986,12 @@ msgstr "" "Synchronisation auf Festplatte übersprungen.\n" "Das Datenverzeichnis könnte verfälscht werden, falls das Betriebssystem abstürzt.\n" -#: initdb.c:3267 +#: initdb.c:3229 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "Authentifizierung für lokale Verbindungen auf »trust« gesetzt" -#: initdb.c:3268 +#: initdb.c:3230 #, c-format msgid "" "You can change this by editing pg_hba.conf or using the option -A, or\n" @@ -992,11 +1002,11 @@ msgstr "" "--auth-host, verwenden.\n" #. translator: This is a placeholder in a shell command. -#: initdb.c:3293 +#: initdb.c:3260 msgid "logfile" msgstr "logdatei" -#: initdb.c:3295 +#: initdb.c:3262 #, c-format msgid "" "\n" diff --git a/src/bin/initdb/po/el.po b/src/bin/initdb/po/el.po new file mode 100644 index 0000000000000..0848f993efff2 --- /dev/null +++ b/src/bin/initdb/po/el.po @@ -0,0 +1,1095 @@ +# Greek message translation file for initdb +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the initdb (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: initdb (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-02-22 02:16+0000\n" +"PO-Revision-Date: 2021-02-25 11:14+0100\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"Last-Translator: Georgios Kokolatos \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: el\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "κρίσιμο:" + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "σφάλμα:" + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "προειδοποίηση:" + +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#, c-format +msgid "could not identify current directory: %m" +msgstr "δεν ήταν δυνατή η αναγνώριση του τρέχοντος καταλόγου: %m" + +#: ../../common/exec.c:156 +#, c-format +msgid "invalid binary \"%s\"" +msgstr "μη έγκυρο δυαδικό αρχείο “%s”" + +#: ../../common/exec.c:206 +#, c-format +msgid "could not read binary \"%s\"" +msgstr "δεν ήταν δυνατή η ανάγνωση του δυαδικού αρχείου “%s”" + +#: ../../common/exec.c:214 +#, c-format +msgid "could not find a \"%s\" to execute" +msgstr "δεν βρέθηκε το αρχείο “%s” για να εκτελεστεί" + +#: ../../common/exec.c:270 ../../common/exec.c:309 +#, c-format +msgid "could not change directory to \"%s\": %m" +msgstr "δεν ήταν δυνατή η μετάβαση στον κατάλογο “%s”: %m" + +#: ../../common/exec.c:287 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση του συμβολικού συνδέσμου “%s”: %m" + +#: ../../common/exec.c:410 +#, c-format +msgid "pclose failed: %m" +msgstr "απέτυχε η εντολή pclose: %m" + +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: initdb.c:325 +#, c-format +msgid "out of memory" +msgstr "έλλειψη μνήμης" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "έλλειψη μνήμης\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "δεν ήταν δυνατή η αντιγραφή δείκτη null (εσωτερικό σφάλμα)\n" + +#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "δεν ήταν δυνατή η εκτέλεση stat στο αρχείο “%s”: %m" + +#: ../../common/file_utils.c:158 ../../common/pgfnames.c:48 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του καταλόγου “%s”: %m" + +#: ../../common/file_utils.c:192 ../../common/pgfnames.c:69 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση του καταλόγου “%s”: %m" + +#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 +#: ../../common/file_utils.c:357 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου “%s”: %m" + +#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "δεν ήταν δυνατή η εκτέλεση της εντολής fsync στο αρχείο “%s”: %m" + +#: ../../common/file_utils.c:375 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "δεν ήταν δυνατή η μετονομασία του αρχείου “%s” σε “%s”: %m" + +#: ../../common/pgfnames.c:74 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "δεν ήταν δυνατό το κλείσιμο του καταλόγου “%s”: %m" + +#: ../../common/restricted_token.c:64 +#, c-format +msgid "could not load library \"%s\": error code %lu" +msgstr "δεν ήταν δυνατή η φόρτωση της βιβλιοθήκης “%s”: κωδικός σφάλματος %lu" + +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "" +"δεν ήταν δυνατή η δημιουργία διακριτικών περιορισμού στην παρούσα " +"πλατφόρμα: κωδικός σφάλματος %lu" + +#: ../../common/restricted_token.c:82 +#, c-format +msgid "could not open process token: error code %lu" +msgstr "" +"δεν ήταν δυνατό το άνοιγμα διακριτικού διεργασίας: κωδικός σφάλματος %lu" + +#: ../../common/restricted_token.c:97 +#, c-format +msgid "could not allocate SIDs: error code %lu" +msgstr "δεν ήταν δυνατή η εκχώρηση SID: κωδικός σφάλματος %lu" + +#: ../../common/restricted_token.c:119 +#, c-format +msgid "could not create restricted token: error code %lu" +msgstr "" +"δεν ήταν δυνατή η δημιουργία διακριτικού διεργασίας: κωδικός σφάλματος %lu" + +#: ../../common/restricted_token.c:140 +#, c-format +msgid "could not start process for command \"%s\": error code %lu" +msgstr "" +"δεν ήταν δυνατή η εκκίνηση διεργασίας για την εντολή “%s”: κωδικός " +"σφάλματος %lu" + +#: ../../common/restricted_token.c:178 +#, c-format +msgid "could not re-execute with restricted token: error code %lu" +msgstr "" +"δεν ήταν δυνατή η επανεκκίνηση με διακριτικό περιορισμού: κωδικός σφάλματος " +"%lu" + +#: ../../common/restricted_token.c:194 +#, c-format +msgid "could not get exit code from subprocess: error code %lu" +msgstr "" +"δεν ήταν δυνατή η απόκτηση κωδικού εξόδου από την υποδιεργασία: κωδικός " +"σφάλματος %lu" + +#: ../../common/rmtree.c:79 +#, c-format +msgid "could not stat file or directory \"%s\": %m" +msgstr "δεν ήταν δυνατή η εκτέλεση stat στο αρχείο ή κατάλογο “%s”: %m" + +#: ../../common/rmtree.c:101 ../../common/rmtree.c:113 +#, c-format +msgid "could not remove file or directory \"%s\": %m" +msgstr "δεν ήταν δυνατή η αφαίρεση αρχείου ή καταλόγου “%s”: %m" + +#: ../../common/username.c:43 +#, c-format +msgid "could not look up effective user ID %ld: %s" +msgstr "δεν ήταν δυνατή η αναζήτηση ενεργής ταυτότητας χρήστη %ld: %s" + +#: ../../common/username.c:45 +msgid "user does not exist" +msgstr "ο χρήστης δεν υπάρχει" + +#: ../../common/username.c:60 +#, c-format +msgid "user name lookup failure: error code %lu" +msgstr "αποτυχία αναζήτησης ονόματος χρήστη: κωδικός σφάλματος % lu" + +#: ../../common/wait_error.c:45 +#, c-format +msgid "command not executable" +msgstr "εντολή μη εκτελέσιμη" + +#: ../../common/wait_error.c:49 +#, c-format +msgid "command not found" +msgstr "εντολή δεν βρέθηκε" + +#: ../../common/wait_error.c:54 +#, c-format +msgid "child process exited with exit code %d" +msgstr "απόγονος διεργασίας τερμάτισε με κωδικό εξόδου %d" + +#: ../../common/wait_error.c:62 +#, c-format +msgid "child process was terminated by exception 0x%X" +msgstr "απόγονος διεργασίας τερματίστηκε με εξαίρεση 0x%X" + +#: ../../common/wait_error.c:66 +#, c-format +msgid "child process was terminated by signal %d: %s" +msgstr "απόγονος διεργασίας τερματίστηκε με σήμα %d: %s" + +#: ../../common/wait_error.c:72 +#, c-format +msgid "child process exited with unrecognized status %d" +msgstr "απόγονος διεργασίας τερμάτισε με μη αναγνωρίσιμη κατάσταση %d" + +#: ../../port/dirmod.c:221 +#, c-format +msgid "could not set junction for \"%s\": %s\n" +msgstr "δεν ήταν δυνατός ο ορισμός διασταύρωσης για “%s”: %s\n" + +#: ../../port/dirmod.c:298 +#, c-format +msgid "could not get junction for \"%s\": %s\n" +msgstr "δεν ήταν δυνατή η απόκτηση διασταύρωσης για “%s”: %s\n" + +#: initdb.c:481 initdb.c:1505 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου “%s” για ανάγνωση: %m" + +#: initdb.c:536 initdb.c:846 initdb.c:872 +#, c-format +msgid "could not open file \"%s\" for writing: %m" +msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου “%s” για εγγραφή: %m" + +#: initdb.c:543 initdb.c:550 initdb.c:852 initdb.c:877 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "δεν ήταν δυνατή η εγγραφή αρχείου “%s”: %m" + +#: initdb.c:568 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "δεν ήταν δυνατή η εκτέλεση της εντολής “%s”: %m" + +#: initdb.c:586 +#, c-format +msgid "removing data directory \"%s\"" +msgstr "αφαιρείται ο κατάλογος δεδομένων “%s”" + +#: initdb.c:588 +#, c-format +msgid "failed to remove data directory" +msgstr "απέτυχε η αφαίρεση καταλόγου δεδομένων" + +#: initdb.c:592 +#, c-format +msgid "removing contents of data directory \"%s\"" +msgstr "αφαιρούνται περιεχόμενα του καταλόγου δεδομένων “%s”" + +#: initdb.c:595 +#, c-format +msgid "failed to remove contents of data directory" +msgstr "απέτυχε η αφαίρεση περιεχομένων του καταλόγου δεδομένων" + +#: initdb.c:600 +#, c-format +msgid "removing WAL directory \"%s\"" +msgstr "αφαίρεση καταλόγου WAL “%s”" + +#: initdb.c:602 +#, c-format +msgid "failed to remove WAL directory" +msgstr "απέτυχε η αφαίρεση καταλόγου WAL" + +#: initdb.c:606 +#, c-format +msgid "removing contents of WAL directory \"%s\"" +msgstr "αφαιρούνται τα περιεχόμενα του καταλόγου WAL “%s”" + +#: initdb.c:608 +#, c-format +msgid "failed to remove contents of WAL directory" +msgstr "απέτυχε η αφαίρεση περιεχόμενων του καταλόγου WAL" + +#: initdb.c:615 +#, c-format +msgid "data directory \"%s\" not removed at user's request" +msgstr "ο κατάλογος δεδομένων “%s” δεν αφαιρείται κατα απαίτηση του χρήστη" + +#: initdb.c:619 +#, c-format +msgid "WAL directory \"%s\" not removed at user's request" +msgstr "κατάλογος WAL “%s” δεν αφαιρέθηκε κατά απαίτηση του χρήστη" + +#: initdb.c:637 +#, c-format +msgid "cannot be run as root" +msgstr "δεν δύναται η εκτέλεση ως υπερχρήστης" + +#: initdb.c:639 +#, c-format +msgid "" +"Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" +"own the server process.\n" +msgstr "" +"Παρακαλώ συνδεθείτε (χρησιμοποιώντας, π.χ. την εντολή “su”) ως ο (μη " +"προνομιούχος) χρήστης που θα\n" +"είναι κάτοχος της διεργασίας του διακομιστή.\n" + +#: initdb.c:672 +#, c-format +msgid "\"%s\" is not a valid server encoding name" +msgstr "“%s” δεν είναι έγκυρο όνομα κωδικοποίησης διακομιστή" + +#: initdb.c:805 +#, c-format +msgid "file \"%s\" does not exist" +msgstr "το αρχείο “%s” δεν υπάρχει" + +#: initdb.c:807 initdb.c:814 initdb.c:823 +#, c-format +msgid "" +"This might mean you have a corrupted installation or identified\n" +"the wrong directory with the invocation option -L.\n" +msgstr "" +"Αυτό μπορεί να σημαίνει ότι έχετε μια κατεστραμμένη εγκατάσταση ή\n" +"ορίσατε λάθος κατάλογο με την επιλογή επίκλησης -L.\n" + +#: initdb.c:812 +#, c-format +msgid "could not access file \"%s\": %m" +msgstr "δεν ήταν δυνατή η πρόσβαση του αρχείο “%s”: %m" + +#: initdb.c:821 +#, c-format +msgid "file \"%s\" is not a regular file" +msgstr "το αρχείο “%s” δεν είναι ένα κανονικό αρχείο" + +#: initdb.c:966 +#, c-format +msgid "selecting dynamic shared memory implementation ... " +msgstr "επιλογή εφαρμογής δυναμικής κοινόχρηστης μνήμης ... " + +#: initdb.c:975 +#, c-format +msgid "selecting default max_connections ... " +msgstr "επιλογή προκαθορισμένης τιμής max_connections … " + +#: initdb.c:1006 +#, c-format +msgid "selecting default shared_buffers ... " +msgstr "επιλογή προκαθορισμένης τιμής shared_buffers … " + +#: initdb.c:1040 +#, c-format +msgid "selecting default time zone ... " +msgstr "επιλογή προκαθορισμένης ζώνης ώρας … " + +#: initdb.c:1074 +msgid "creating configuration files ... " +msgstr "δημιουργία αρχείων ρύθμισης … " + +#: initdb.c:1227 initdb.c:1246 initdb.c:1332 initdb.c:1347 +#, c-format +msgid "could not change permissions of \"%s\": %m" +msgstr "δεν ήταν δυνατή η αλλαγή δικαιωμάτων του “%s”: %m" + +#: initdb.c:1369 +#, c-format +msgid "running bootstrap script ... " +msgstr "εκτέλεση σεναρίου bootstrap … " + +#: initdb.c:1381 +#, c-format +msgid "input file \"%s\" does not belong to PostgreSQL %s" +msgstr "το αρχείο εισόδου “%s” δεν ανήκει στην PostgreSQL %s" + +#: initdb.c:1384 +#, c-format +msgid "" +"Check your installation or specify the correct path using the option -L.\n" +msgstr "" +"Ελέγξτε την εγκατάστασή σας ή καθορίστε τη σωστή διαδρομή χρησιμοποιώντας " +"την επιλογή -L.\n" + +#: initdb.c:1482 +msgid "Enter new superuser password: " +msgstr "Εισάγετε νέο κωδικό πρόσβασης υπερχρήστη: " + +#: initdb.c:1483 +msgid "Enter it again: " +msgstr "Εισάγετε ξανά: " + +#: initdb.c:1486 +#, c-format +msgid "Passwords didn't match.\n" +msgstr "Οι κωδικοί πρόσβασης δεν είναι ίδιοι.\n" + +#: initdb.c:1512 +#, c-format +msgid "could not read password from file \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση κωδικού πρόσβασης από το αρχείο “%s”: %m" + +#: initdb.c:1515 +#, c-format +msgid "password file \"%s\" is empty" +msgstr "αρχείο κωδικών πρόσβασης “%s” είναι άδειο" + +#: initdb.c:2043 +#, c-format +msgid "caught signal\n" +msgstr "συνελήφθει σήμα\n" + +#: initdb.c:2049 +#, c-format +msgid "could not write to child process: %s\n" +msgstr "δεν ήταν δυνατή η εγγραφή στην απογονική διεργασία: %s\n" + +#: initdb.c:2057 +#, c-format +msgid "ok\n" +msgstr "εντάξει\n" + +#: initdb.c:2147 +#, c-format +msgid "setlocale() failed" +msgstr "εντολή setlocale() απέτυχε" + +#: initdb.c:2168 +#, c-format +msgid "failed to restore old locale \"%s\"" +msgstr "απέτυχε να επαναφέρει την παλαιά εντοπιότητα “%s”" + +#: initdb.c:2177 +#, c-format +msgid "invalid locale name \"%s\"" +msgstr "άκυρη ονομασία εντοπιότητας “%s”" + +#: initdb.c:2188 +#, c-format +msgid "invalid locale settings; check LANG and LC_* environment variables" +msgstr "" +"μη έγκυρες ρυθμίσεις εντοπιότητας, ελέγξτε τις μεταβλητές περιβάλλοντος " +"LANG και LC_*" + +#: initdb.c:2215 +#, c-format +msgid "encoding mismatch" +msgstr "αναντιστοιχία κωδικοποίησης" + +#: initdb.c:2217 +#, c-format +msgid "" +"The encoding you selected (%s) and the encoding that the\n" +"selected locale uses (%s) do not match. This would lead to\n" +"misbehavior in various character string processing functions.\n" +"Rerun %s and either do not specify an encoding explicitly,\n" +"or choose a matching combination.\n" +msgstr "" +"Η κωδικοποίηση που επιλέξατε (%s) και η κωδικοποίηση που\n" +"χρησιμοποιείται από την επιλεγμένη εντοπιότητα (%s) δεν ταιριάζουν. Αυτό " +"θα οδηγούσε σε\n" +"κακή συμπεριφορά σε διάφορες συναρτήσεις επεξεργασίας συμβολοσειρών " +"χαρακτήρων.\n" +"Επανεκτελέστε %s και είτε μην καθορίσετε ρητά κωδικοποίηση,\n" +"ή επιλέξτε έναν ταιριαστό συνδυασμό.\n" + +#: initdb.c:2289 +#, c-format +msgid "" +"%s initializes a PostgreSQL database cluster.\n" +"\n" +msgstr "" +"%s αρχικοποιεί μία συστάδα PostgreSQL βάσης δεδομένων.\n" +"\n" + +#: initdb.c:2290 +#, c-format +msgid "Usage:\n" +msgstr "Χρήση:\n" + +#: initdb.c:2291 +#, c-format +msgid " %s [OPTION]... [DATADIR]\n" +msgstr " %s [ΕΠΙΛΟΓΕΣ]… [DATADIR]\n" + +#: initdb.c:2292 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Επιλογές:\n" + +#: initdb.c:2293 +#, c-format +msgid "" +" -A, --auth=METHOD default authentication method for local " +"connections\n" +msgstr "" +" -A, —auth=METHOD προκαθορισμένη μέθοδος ταυτοποίησης για τοπικές " +"συνδέσεις\n" + +#: initdb.c:2294 +#, c-format +msgid "" +" --auth-host=METHOD default authentication method for local TCP/IP " +"connections\n" +msgstr "" +" —auth-host=METHOD προκαθορισμένη μέθοδος ταυτοποίησης για τοπικές " +"συνδέσεις πρωτοκόλλου TCP/IP\n" + +#: initdb.c:2295 +#, c-format +msgid "" +" --auth-local=METHOD default authentication method for local-socket " +"connections\n" +msgstr "" +" —auth-local=METHOD προκαθορισμένη μέθοδος ταυτοποίησης για " +"συνδέσεις τοπικής υποδοχής\n" + +#: initdb.c:2296 +#, c-format +msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" +msgstr "" +" [-D, —pgdata=]DATADIR τοποθεσία για αυτή τη συστάδα βάσης δεδομένων\n" + +#: initdb.c:2297 +#, c-format +msgid " -E, --encoding=ENCODING set default encoding for new databases\n" +msgstr "" +" -E, —encoding=ENCODING όρισε την προκαθορισμένη κωδικοποίηση για " +"καινούριες βάσεις δεδομένων\n" + +#: initdb.c:2298 +#, c-format +msgid "" +" -g, --allow-group-access allow group read/execute on data directory\n" +msgstr "" +" -g, —allow-group-access επέτρεψε εγγραφή/ανάγνωση για την ομάδα στο " +"κατάλογο δεδομένων\n" + +#: initdb.c:2299 +#, c-format +msgid " --locale=LOCALE set default locale for new databases\n" +msgstr "" +" —locale=LOCALE όρισε την προκαθορισμένη εντοπιότητα για " +"καινούριες βάσεις δεδομένων\n" + +#: initdb.c:2300 +#, c-format +msgid "" +" --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" +" --lc-monetary=, --lc-numeric=, --lc-time=LOCALE\n" +" set default locale in the respective category " +"for\n" +" new databases (default taken from environment)\n" +msgstr "" +" —lc-collate=, —lc-ctype=, —lc-messages=LOCALE\n" +" —lc-monetary=, —lc-numeric=, —lc-time=LOCALE\n" +" όρισε την προκαθορισμένη εντοπιότητα για τις " +"σχετικές κατηγορίες\n" +" καινούριων βάσεων δεδομένων (προκαθορισμένη " +"τιμή διαβάζεται από το περιβάλλον)\n" + +#: initdb.c:2304 +#, c-format +msgid " --no-locale equivalent to --locale=C\n" +msgstr " —no-locale ισοδύναμο με —locale=C\n" + +#: initdb.c:2305 +#, c-format +msgid "" +" --pwfile=FILE read password for the new superuser from file\n" +msgstr "" +" —pwfile=FILE διάβασε τον κωδικό πρόσβασης για τον νέο " +"υπερχρήστη από το αρχείο\n" + +#: initdb.c:2306 +#, c-format +msgid "" +" -T, --text-search-config=CFG\n" +" default text search configuration\n" +msgstr "" +" -T, —text-search-config=CFG\n" +" προκαθορισμένη ρύθμιση αναζήτησης κειμένου\n" + +#: initdb.c:2308 +#, c-format +msgid " -U, --username=NAME database superuser name\n" +msgstr " -U, —username=NAME όνομα υπερχρήστη βάσης δεδομένων\n" + +#: initdb.c:2309 +#, c-format +msgid "" +" -W, --pwprompt prompt for a password for the new superuser\n" +msgstr "" +" -W, —pwprompt προτροπή για κωδικό πρόσβασης για τον νέο " +"υπερχρήστη\n" + +#: initdb.c:2310 +#, c-format +msgid "" +" -X, --waldir=WALDIR location for the write-ahead log directory\n" +msgstr "" +" -X, —waldir=WALDIR τοποθεσία για τον κατάλογο write-ahead log\n" + +#: initdb.c:2311 +#, c-format +msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" +msgstr " —wal-segsize=SIZE μέγεθος των τμημάτων WAL, σε megabytes\n" + +#: initdb.c:2312 +#, c-format +msgid "" +"\n" +"Less commonly used options:\n" +msgstr "" +"\n" +"Λιγότερο συχνά χρησιμοποιούμενες επιλογές:\n" + +#: initdb.c:2313 +#, c-format +msgid " -d, --debug generate lots of debugging output\n" +msgstr "" +" -d, —debug δημιούργησε πολλές καταγραφές αποσφαλμάτωσης\n" + +#: initdb.c:2314 +#, c-format +msgid " -k, --data-checksums use data page checksums\n" +msgstr "" +" -k, —data-checksums χρησιμοποίησε αθροίσματα ελέγχου σελίδων " +"δεδομένων\n" + +#: initdb.c:2315 +#, c-format +msgid " -L DIRECTORY where to find the input files\n" +msgstr " -L DIRECTORY τοποθεσία εύρεσης αρχείων εισόδου\n" + +#: initdb.c:2316 +#, c-format +msgid " -n, --no-clean do not clean up after errors\n" +msgstr " -n, —no-clean να μην καθαριστούν σφάλματα\n" + +#: initdb.c:2317 +#, c-format +msgid "" +" -N, --no-sync do not wait for changes to be written safely to " +"disk\n" +msgstr "" +" -N, —no-sync να μην αναμένει την ασφαλή εγγραφή αλλαγών στον " +"δίσκο\n" + +#: initdb.c:2318 +#, c-format +msgid " -s, --show show internal settings\n" +msgstr " -s, —show δείξε τις εσωτερικές ρυθμίσεις\n" + +#: initdb.c:2319 +#, c-format +msgid " -S, --sync-only only sync data directory\n" +msgstr " -S, —sync-only συγχρόνισε μόνο τον κατάλογο δεδομένων\n" + +#: initdb.c:2320 +#, c-format +msgid "" +"\n" +"Other options:\n" +msgstr "" +"\n" +"Άλλες επιλογές:\n" + +#: initdb.c:2321 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, —version δείξε πληροφορίες έκδοσης και έξοδος\n" + +#: initdb.c:2322 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr "" +" -?, —help δείξε αυτό το μήνυμα βοήθειας και μετά έξοδος\n" + +#: initdb.c:2323 +#, c-format +msgid "" +"\n" +"If the data directory is not specified, the environment variable PGDATA\n" +"is used.\n" +msgstr "" +"\n" +"Εάν δεν έχει καθοριστεί ο κατάλογος δεδομένων, χρησιμοποιείται η\n" +"μεταβλητή περιβάλλοντος PGDATA.\n" + +#: initdb.c:2325 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Υποβάλετε αναφορές σφάλματων σε <%s>.\n" + +#: initdb.c:2326 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s αρχική σελίδα: <%s>\n" + +#: initdb.c:2354 +#, c-format +msgid "invalid authentication method \"%s\" for \"%s\" connections" +msgstr "μη έγκυρη μέθοδος ταυτοποίησης “%s” για συνδέσεις “%s”" + +#: initdb.c:2370 +#, c-format +msgid "must specify a password for the superuser to enable %s authentication" +msgstr "" +"απαιτείται ο καθορισμός κωδικού πρόσβασης για τον υπερχρήστη για να την " +"ενεργοποίηση του ελέγχου ταυτότητας %s" + +#: initdb.c:2397 +#, c-format +msgid "no data directory specified" +msgstr "δεν ορίστηκε κατάλογος δεδομένων" + +#: initdb.c:2399 +#, c-format +msgid "" +"You must identify the directory where the data for this database system\n" +"will reside. Do this with either the invocation option -D or the\n" +"environment variable PGDATA.\n" +msgstr "" +"Πρέπει να προσδιορίσετε τον κατάλογο όπου θα αποθηκεύονται τα δεδομένα για " +"αυτό\n" +"το σύστημα βάσης δεδομένων. Αυτό μπορείτε να το κάνετε είτε με την επιλογή " +"κλήσης -D\n" +"ή με τη μεταβλητή περιβάλλοντος PGDATA.\n" + +#: initdb.c:2434 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "" +"Το πρόγραμμα \"%s\" απαιτείται από %s αλλά δεν βρέθηκε στο\n" +"ίδιος κατάλογος με το \"%s\".\n" +"Ελέγξτε την εγκατάστασή σας." + +#: initdb.c:2439 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "" +"Το πρόγραμμα \"%s\" βρέθηκε από το \"%s\"\n" +"αλλά δεν ήταν η ίδια εκδοχή με %s.\n" +"Ελέγξτε την εγκατάστασή σας." + +#: initdb.c:2458 +#, c-format +msgid "input file location must be an absolute path" +msgstr "η τοποθεσία του αρχείου εισόδου πρέπει να είναι μία πλήρης διαδρομή" + +#: initdb.c:2475 +#, c-format +msgid "The database cluster will be initialized with locale \"%s\".\n" +msgstr "Η συστάδα βάσης δεδομένων θα αρχικοποιηθεί με εντοπιότητα “%s”.\n" + +#: initdb.c:2478 +#, c-format +msgid "" +"The database cluster will be initialized with locales\n" +" COLLATE: %s\n" +" CTYPE: %s\n" +" MESSAGES: %s\n" +" MONETARY: %s\n" +" NUMERIC: %s\n" +" TIME: %s\n" +msgstr "" +"Η συστάδα βάσης δεδομένων θα αρχικοποιηθεί με εντοπιότητες\n" +" COLLATE: %s\n" +" CTYPE: %s\n" +" MESSAGES: %s\n" +" MONETARY: %s\n" +" NUMERIC: %s\n" +" TIME: %s\n" + +#: initdb.c:2502 +#, c-format +msgid "could not find suitable encoding for locale \"%s\"" +msgstr "δεν μπόρεσε να βρεθεί κατάλληλη κωδικοποίηση για την εντοπιότητα “%s”" + +#: initdb.c:2504 +#, c-format +msgid "Rerun %s with the -E option.\n" +msgstr "Επανεκτελέστε %s με την επιλογή -E.\n" + +#: initdb.c:2505 initdb.c:3127 initdb.c:3148 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" + +#: initdb.c:2518 +#, c-format +msgid "" +"Encoding \"%s\" implied by locale is not allowed as a server-side " +"encoding.\n" +"The default database encoding will be set to \"%s\" instead.\n" +msgstr "" +"Η κωδικοποίηση \"%s\" που υπονοείται από τις τοπικές ρυθμίσεις δεν " +"επιτρέπεται ως κωδικοποίηση από την πλευρά του διακομιστή.\n" +"Η προεπιλεγμένη κωδικοποίηση βάσης δεδομένων θα οριστεί σε \"%s\".\n" + +#: initdb.c:2523 +#, c-format +msgid "locale \"%s\" requires unsupported encoding \"%s\"" +msgstr "εντοπιότητα “%s” προαπαιτεί τη μην υποστηριζόμενη κωδικοποίηση“%s”" + +#: initdb.c:2526 +#, c-format +msgid "" +"Encoding \"%s\" is not allowed as a server-side encoding.\n" +"Rerun %s with a different locale selection.\n" +msgstr "" +"Η κωδικοποίηση \"%s\" δεν επιτρέπεται ως κωδικοποίηση από την πλευρά του " +"διακομιστή.\n" +"Επανεκτελέστε %s με διαφορετική επιλογή εντοπιότητας.\n" + +#: initdb.c:2535 +#, c-format +msgid "The default database encoding has accordingly been set to \"%s\".\n" +msgstr "" +"Η προεπιλεγμένη κωδικοποίηση βάσης δεδομένων έχει οριστεί ως \"%s\".\n" + +#: initdb.c:2597 +#, c-format +msgid "could not find suitable text search configuration for locale \"%s\"" +msgstr "" +"δεν ήταν δυνατή η εύρεση κατάλληλων ρυθμίσεων για την μηχανή αναζήτησης για " +"την εντοπιότητα “%s”" + +#: initdb.c:2608 +#, c-format +msgid "suitable text search configuration for locale \"%s\" is unknown" +msgstr "" +"οι κατάλληλες ρυθμίσεις για την μηχανή αναζήτησης για την εντοπιότητα “%s” " +"δεν είναι γνωστές" + +#: initdb.c:2613 +#, c-format +msgid "" +"specified text search configuration \"%s\" might not match locale \"%s\"" +msgstr "" +"η ορισμένη ρύθμιση μηχανής αναζήτησης “%s” μπορεί να μην ταιριάζει με την " +"εντοπιότητα “%s”" + +#: initdb.c:2618 +#, c-format +msgid "The default text search configuration will be set to \"%s\".\n" +msgstr "Η προκαθορισμένη ρύθμιση μηχανής αναζήτησης θα οριστεί ως “%s”.\n" + +#: initdb.c:2662 initdb.c:2744 +#, c-format +msgid "creating directory %s ... " +msgstr "δημιουργία καταλόγου %s …" + +#: initdb.c:2668 initdb.c:2750 initdb.c:2815 initdb.c:2877 +#, c-format +msgid "could not create directory \"%s\": %m" +msgstr "δεν ήταν δυνατή η δημιουργία του καταλόγου “%s”: %m" + +#: initdb.c:2679 initdb.c:2762 +#, c-format +msgid "fixing permissions on existing directory %s ... " +msgstr "διορθώνονται τα δικαιώματα του υπάρχοντος καταλόγου %s … " + +#: initdb.c:2685 initdb.c:2768 +#, c-format +msgid "could not change permissions of directory \"%s\": %m" +msgstr "δεν ήταν δυνατή η αλλαγή δικαιωμάτων του καταλόγου “%s”: %m" + +#: initdb.c:2699 initdb.c:2782 +#, c-format +msgid "directory \"%s\" exists but is not empty" +msgstr "ο κατάλογος “%s” υπάρχει και δεν είναι άδειος" + +#: initdb.c:2704 +#, c-format +msgid "" +"If you want to create a new database system, either remove or empty\n" +"the directory \"%s\" or run %s\n" +"with an argument other than \"%s\".\n" +msgstr "" +"Εάν θέλετε να δημιουργήσετε ένα νέο σύστημα βάσης δεδομένων, διαγράψτε ή " +"αδειάστε\n" +"τον κατάλογο \"%s\" ή εκτελέστε %s\n" +"με διαφορετική παράμετρο από \"%s\".\n" + +#: initdb.c:2712 initdb.c:2794 initdb.c:3163 +#, c-format +msgid "could not access directory \"%s\": %m" +msgstr "δεν ήταν δυνατή η πρόσβαση του καταλόγου “%s”: %m" + +#: initdb.c:2735 +#, c-format +msgid "WAL directory location must be an absolute path" +msgstr "η τοποθεσία του καταλόγου WAL πρέπει να είναι μία πλήρης διαδρομή" + +#: initdb.c:2787 +#, c-format +msgid "" +"If you want to store the WAL there, either remove or empty the directory\n" +"\"%s\".\n" +msgstr "" +"Εάν θέλετε να αποθηκεύσετε το WAL εκεί, είτε αφαιρέστε ή αδειάστε τον " +"κατάλογο\n" +"\"%s\".\n" + +#: initdb.c:2801 +#, c-format +msgid "could not create symbolic link \"%s\": %m" +msgstr "δεν ήταν δυνατή η δημιουργία του συμβολικού συνδέσμου “%s”: %m" + +#: initdb.c:2806 +#, c-format +msgid "symlinks are not supported on this platform" +msgstr "συμβολικοί σύνδεσμοι δεν υποστηρίζονται στην παρούσα πλατφόρμα" + +#: initdb.c:2830 +#, c-format +msgid "" +"It contains a dot-prefixed/invisible file, perhaps due to it being a mount " +"point.\n" +msgstr "" +"Περιέχει ένα αρχείο με πρόθεμα κουκκίδας/αόρατο, ίσως λόγω του ότι είναι " +"ένα σημείο προσάρτησης.\n" + +#: initdb.c:2833 +#, c-format +msgid "" +"It contains a lost+found directory, perhaps due to it being a mount point.\n" +msgstr "" +"Περιέχει έναν κατάλογο lost+found, ίσως επειδή είναι ένα σημείο " +"προσάρτησης.\n" + +#: initdb.c:2836 +#, c-format +msgid "" +"Using a mount point directly as the data directory is not recommended.\n" +"Create a subdirectory under the mount point.\n" +msgstr "" +"Δεν προτείνεται η άμεση χρήση ενός σημείου προσάρτησης ως καταλόγου " +"δεδομένων.\n" +"Δημιουργείστε έναν υποκατάλογο υπό του σημείου προσάρτησης.\n" + +#: initdb.c:2862 +#, c-format +msgid "creating subdirectories ... " +msgstr "δημιουργία υποκαταλόγων …" + +#: initdb.c:2908 +msgid "performing post-bootstrap initialization ... " +msgstr "πραγματοποίηση σταδίου αρχικοποίησης post-bootstrap … " + +#: initdb.c:3065 +#, c-format +msgid "Running in debug mode.\n" +msgstr "Εκτέλεση σε λειτουργία αποσφαλμάτωσης.\n" + +#: initdb.c:3069 +#, c-format +msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" +msgstr "" +"Εκτέλεση σε λειτουργία μη καθαρισμού. Τα σφάλματα δεν θα καθαριστούν.\n" + +#: initdb.c:3146 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "" +"πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (ο πρώτη είναι η “%s”)" + +#: initdb.c:3167 initdb.c:3256 +msgid "syncing data to disk ... " +msgstr "συγχρονίζονται δεδομένα στο δίσκο … " + +#: initdb.c:3176 +#, c-format +msgid "password prompt and password file cannot be specified together" +msgstr "" +"η προτροπή κωδικού εισόδου και το αρχείο κωδικού εισόδου δεν δύναται να " +"οριστούν ταυτόχρονα" + +#: initdb.c:3201 +#, c-format +msgid "argument of --wal-segsize must be a number" +msgstr "η παράμετρος —wal-segsize πρέπει να είναι αριθμός" + +#: initdb.c:3206 +#, c-format +msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024" +msgstr "" +"η παράμετρος —wal-segsize πρέπει να έχει τιμή δύναμης 2 μεταξύ 1 και 1024" + +#: initdb.c:3223 +#, c-format +msgid "" +"superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" +msgstr "" +"το όνομα υπερχρήστη “%s” δεν επιτρέπεται, τα ονόματα ρόλων δεν δύναται να " +"αρχίζουν με “pg_”" + +#: initdb.c:3227 +#, c-format +msgid "" +"The files belonging to this database system will be owned by user \"%s\".\n" +"This user must also own the server process.\n" +"\n" +msgstr "" +"Τα αρχεία που ανήκουν σε αυτό το σύστημα βάσης δεδομένων θα ανήκουν στο " +"χρήστη \"%s\".\n" +"Αυτός ο χρήστης πρέπει επίσης να κατέχει τη διαδικασία διακομιστή.\n" +"\n" + +#: initdb.c:3243 +#, c-format +msgid "Data page checksums are enabled.\n" +msgstr "Τα αθροίσματα ελέγχου σελίδων δεδομένων είναι ενεργοποιημένα.\n" + +#: initdb.c:3245 +#, c-format +msgid "Data page checksums are disabled.\n" +msgstr "Τα αθροίσματα ελέγχου των σελίδων δεδομένων είναι απενεργοποιημένα.\n" + +#: initdb.c:3262 +#, c-format +msgid "" +"\n" +"Sync to disk skipped.\n" +"The data directory might become corrupt if the operating system crashes.\n" +msgstr "" +"\n" +"Ο συγχρονισμός με το δίσκο παραλείφθηκε.\n" +"Ο κατάλογος δεδομένων ενδέχεται να αλλοιωθεί εάν καταρρεύσει το " +"λειτουργικού συστήματος.\n" + +#: initdb.c:3267 +#, c-format +msgid "enabling \"trust\" authentication for local connections" +msgstr "ενεργοποιείται η μέθοδος ταυτοποίησης “trust” για τοπικές συνδέσεις" + +#: initdb.c:3268 +#, c-format +msgid "" +"You can change this by editing pg_hba.conf or using the option -A, or\n" +"--auth-local and --auth-host, the next time you run initdb.\n" +msgstr "" +"Μπορείτε να το αλλάξετε αυτό με την επεξεργασία pg_hba.conf ή " +"χρησιμοποιώντας την επιλογή -A, ή\n" +"--auth-τοπικό και --auth-host, την επόμενη φορά που θα εκτελέσετε initdb.\n" + +#. translator: This is a placeholder in a shell command. +#: initdb.c:3293 +msgid "logfile" +msgstr "logfile" + +#: initdb.c:3295 +#, c-format +msgid "" +"\n" +"Success. You can now start the database server using:\n" +"\n" +" %s\n" +"\n" +msgstr "" +"\n" +"Επιτυχία. Μπορείτε τώρα να εκκινήσετε τον διακομιστή βάσης δεδομένων " +"χρησιμοποιώντας:\n" +"\n" +" %s\n" +"\n" diff --git a/src/bin/initdb/po/es.po b/src/bin/initdb/po/es.po index e3e0b1bc024a2..2aae35de04905 100644 --- a/src/bin/initdb/po/es.po +++ b/src/bin/initdb/po/es.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: initdb (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:46+0000\n" -"PO-Revision-Date: 2019-09-29 22:06-0300\n" +"POT-Creation-Date: 2020-09-13 10:46+0000\n" +"PO-Revision-Date: 2020-06-08 15:50-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -124,16 +124,14 @@ msgid "could not close directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" #: ../../common/restricted_token.c:64 -#, fuzzy, c-format -#| msgid "could not load library \"%s\": %s" +#, c-format msgid "could not load library \"%s\": error code %lu" -msgstr "no se pudo cargar la biblioteca «%s»: %s" +msgstr "no se pudo cargar la biblioteca «%s»: código de error %lu" #: ../../common/restricted_token.c:73 -#, fuzzy, c-format -#| msgid "cannot create restricted tokens on this platform" +#, c-format msgid "cannot create restricted tokens on this platform: error code %lu" -msgstr "no se pueden crear tokens restrigidos en esta plataforma" +msgstr "no se pueden crear tokens restrigidos en esta plataforma: código de error %lu" #: ../../common/restricted_token.c:82 #, c-format @@ -670,11 +668,13 @@ msgid "" "\n" "Report bugs to <%s>.\n" msgstr "" +"\n" +"Reporte errores a <%s>.\n" #: initdb.c:2326 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" #: initdb.c:2354 #, c-format @@ -710,6 +710,9 @@ msgid "" "same directory as \"%s\".\n" "Check your installation." msgstr "" +"%s necesita el programa «%s», pero no pudo encontrarlo en el mismo\n" +"directorio que «%s».\n" +"Verifique su instalación." #: initdb.c:2439 #, c-format @@ -718,6 +721,9 @@ msgid "" "but was not the same version as %s.\n" "Check your installation." msgstr "" +"El programa «%s» fue encontrado por «%s»,\n" +"pero no es de la misma versión que %s.\n" +"Verifique su instalación." #: initdb.c:2458 #, c-format @@ -1017,28 +1023,3 @@ msgstr "" "\n" " %s\n" "\n" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Reporte errores a .\n" - -#~ msgid "" -#~ "The program \"postgres\" is needed by %s but was not found in the\n" -#~ "same directory as \"%s\".\n" -#~ "Check your installation." -#~ msgstr "" -#~ "%s necesita el programa «postgres», pero no pudo encontrarlo en el mismo\n" -#~ "directorio que «%s».\n" -#~ "Verifique su instalación." - -#~ msgid "" -#~ "The program \"postgres\" was found by \"%s\"\n" -#~ "but was not the same version as %s.\n" -#~ "Check your installation." -#~ msgstr "" -#~ "El programa «postgres» fue encontrado por %s, pero no es\n" -#~ "de la misma versión que «%s».\n" -#~ "Verifique su instalación." diff --git a/src/bin/initdb/po/fr.po b/src/bin/initdb/po/fr.po index c3cddfa9edc03..8566b394e1bec 100644 --- a/src/bin/initdb/po/fr.po +++ b/src/bin/initdb/po/fr.po @@ -7,70 +7,70 @@ # Stéphane Schildknecht , 2009. msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 12\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-10 20:46+0000\n" -"PO-Revision-Date: 2020-05-11 09:21+0200\n" +"POT-Creation-Date: 2021-04-26 06:48+0000\n" +"PO-Revision-Date: 2021-04-26 11:36+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: PostgreSQLfr \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal : " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "erreur : " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "attention : " -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "n'a pas pu identifier le répertoire courant : %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "binaire « %s » invalide" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "n'a pas pu lire le binaire « %s »" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "n'a pas pu trouver un « %s » à exécuter" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "n'a pas pu modifier le répertoire par « %s » : %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "n'a pas pu lire le lien symbolique « %s » : %m" -#: ../../common/exec.c:410 +#: ../../common/exec.c:409 #, c-format -msgid "pclose failed: %m" -msgstr "échec de pclose : %m" +msgid "%s() failed: %m" +msgstr "échec de %s() : %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 -#: initdb.c:325 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 +#: initdb.c:328 #, c-format msgid "out of memory" msgstr "mémoire épuisée" @@ -86,33 +86,33 @@ msgstr "mémoire épuisée\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" -#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 +#: ../../common/file_utils.c:87 ../../common/file_utils.c:451 #, c-format msgid "could not stat file \"%s\": %m" msgstr "n'a pas pu tester le fichier « %s » : %m" -#: ../../common/file_utils.c:158 ../../common/pgfnames.c:48 +#: ../../common/file_utils.c:166 ../../common/pgfnames.c:48 #, c-format msgid "could not open directory \"%s\": %m" msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" -#: ../../common/file_utils.c:192 ../../common/pgfnames.c:69 +#: ../../common/file_utils.c:200 ../../common/pgfnames.c:69 #, c-format msgid "could not read directory \"%s\": %m" msgstr "n'a pas pu lire le répertoire « %s » : %m" -#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 -#: ../../common/file_utils.c:357 +#: ../../common/file_utils.c:232 ../../common/file_utils.c:291 +#: ../../common/file_utils.c:365 #, c-format msgid "could not open file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier « %s » : %m" -#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 +#: ../../common/file_utils.c:303 ../../common/file_utils.c:373 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m" -#: ../../common/file_utils.c:375 +#: ../../common/file_utils.c:383 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "n'a pas pu renommer le fichier « %s » en « %s » : %m" @@ -228,82 +228,82 @@ msgstr "n'a pas pu configurer la jonction pour « %s » : %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "n'a pas pu obtenir la jonction pour « %s » : %s\n" -#: initdb.c:481 initdb.c:1505 +#: initdb.c:461 initdb.c:1493 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %m" -#: initdb.c:536 initdb.c:846 initdb.c:872 +#: initdb.c:505 initdb.c:827 initdb.c:853 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "n'a pas pu ouvrir le fichier « %s » en écriture : %m" -#: initdb.c:543 initdb.c:550 initdb.c:852 initdb.c:877 +#: initdb.c:512 initdb.c:519 initdb.c:833 initdb.c:858 #, c-format msgid "could not write file \"%s\": %m" msgstr "impossible d'écrire le fichier « %s » : %m" -#: initdb.c:568 +#: initdb.c:537 #, c-format msgid "could not execute command \"%s\": %m" msgstr "n'a pas pu exécuter la commande « %s » : %m" -#: initdb.c:586 +#: initdb.c:555 #, c-format msgid "removing data directory \"%s\"" msgstr "suppression du répertoire des données « %s »" -#: initdb.c:588 +#: initdb.c:557 #, c-format msgid "failed to remove data directory" msgstr "échec de la suppression du répertoire des données" -#: initdb.c:592 +#: initdb.c:561 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "suppression du contenu du répertoire des données « %s »" -#: initdb.c:595 +#: initdb.c:564 #, c-format msgid "failed to remove contents of data directory" msgstr "échec de la suppression du contenu du répertoire des données" -#: initdb.c:600 +#: initdb.c:569 #, c-format msgid "removing WAL directory \"%s\"" msgstr "suppression du répertoire des journaux de transactions « %s »" -#: initdb.c:602 +#: initdb.c:571 #, c-format msgid "failed to remove WAL directory" msgstr "échec de la suppression du répertoire des journaux de transactions" -#: initdb.c:606 +#: initdb.c:575 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "suppression du contenu du répertoire des journaux de transactions « %s »" -#: initdb.c:608 +#: initdb.c:577 #, c-format msgid "failed to remove contents of WAL directory" msgstr "échec de la suppression du contenu du répertoire des journaux de transactions" -#: initdb.c:615 +#: initdb.c:584 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "répertoire des données « %s » non supprimé à la demande de l'utilisateur" -#: initdb.c:619 +#: initdb.c:588 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "répertoire des journaux de transactions « %s » non supprimé à la demande de l'utilisateur" -#: initdb.c:637 +#: initdb.c:606 #, c-format msgid "cannot be run as root" msgstr "ne peut pas être exécuté en tant que root" -#: initdb.c:639 +#: initdb.c:608 #, c-format msgid "" "Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" @@ -312,17 +312,17 @@ msgstr "" "Connectez-vous (par exemple en utilisant « su ») sous l'utilisateur (non\n" " privilégié) qui sera propriétaire du processus serveur.\n" -#: initdb.c:672 +#: initdb.c:641 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "« %s » n'est pas un nom d'encodage serveur valide" -#: initdb.c:805 +#: initdb.c:786 #, c-format msgid "file \"%s\" does not exist" msgstr "le rôle « %s » n'existe pas" -#: initdb.c:807 initdb.c:814 initdb.c:823 +#: initdb.c:788 initdb.c:795 initdb.c:804 #, c-format msgid "" "This might mean you have a corrupted installation or identified\n" @@ -331,124 +331,124 @@ msgstr "" "Cela peut signifier que votre installation est corrompue ou que vous avez\n" "identifié le mauvais répertoire avec l'option -L.\n" -#: initdb.c:812 +#: initdb.c:793 #, c-format msgid "could not access file \"%s\": %m" msgstr "n'a pas pu accéder au fichier « %s » : %m" -#: initdb.c:821 +#: initdb.c:802 #, c-format msgid "file \"%s\" is not a regular file" msgstr "le fichier « %s » n'est pas un fichier standard" -#: initdb.c:966 +#: initdb.c:947 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "sélection de l'implémentation de la mémoire partagée dynamique..." -#: initdb.c:975 +#: initdb.c:956 #, c-format msgid "selecting default max_connections ... " msgstr "sélection de la valeur par défaut pour max_connections... " -#: initdb.c:1006 +#: initdb.c:987 #, c-format msgid "selecting default shared_buffers ... " msgstr "sélection de la valeur par défaut pour shared_buffers... " -#: initdb.c:1040 +#: initdb.c:1021 #, c-format msgid "selecting default time zone ... " msgstr "sélection du fuseau horaire par défaut... " -#: initdb.c:1074 +#: initdb.c:1055 msgid "creating configuration files ... " msgstr "création des fichiers de configuration... " -#: initdb.c:1227 initdb.c:1246 initdb.c:1332 initdb.c:1347 +#: initdb.c:1214 initdb.c:1233 initdb.c:1319 initdb.c:1334 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "n'a pas pu modifier les droits de « %s » : %m" -#: initdb.c:1369 +#: initdb.c:1356 #, c-format msgid "running bootstrap script ... " msgstr "lancement du script bootstrap..." -#: initdb.c:1381 +#: initdb.c:1368 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "le fichier en entrée « %s » n'appartient pas à PostgreSQL %s" -#: initdb.c:1384 +#: initdb.c:1371 #, c-format msgid "Check your installation or specify the correct path using the option -L.\n" msgstr "Vérifiez votre installation ou indiquez le bon chemin avec l'option -L.\n" -#: initdb.c:1482 +#: initdb.c:1470 msgid "Enter new superuser password: " msgstr "Saisissez le nouveau mot de passe du super-utilisateur : " -#: initdb.c:1483 +#: initdb.c:1471 msgid "Enter it again: " msgstr "Saisissez-le à nouveau : " -#: initdb.c:1486 +#: initdb.c:1474 #, c-format msgid "Passwords didn't match.\n" msgstr "Les mots de passe ne sont pas identiques.\n" -#: initdb.c:1512 +#: initdb.c:1501 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "n'a pas pu lire le mot de passe à partir du fichier « %s » : %m" -#: initdb.c:1515 +#: initdb.c:1504 #, c-format msgid "password file \"%s\" is empty" msgstr "le fichier de mots de passe « %s » est vide" -#: initdb.c:2043 +#: initdb.c:1995 #, c-format msgid "caught signal\n" msgstr "signal reçu\n" -#: initdb.c:2049 +#: initdb.c:2001 #, c-format msgid "could not write to child process: %s\n" msgstr "n'a pas pu écrire au processus fils : %s\n" -#: initdb.c:2057 +#: initdb.c:2009 #, c-format msgid "ok\n" msgstr "ok\n" -#: initdb.c:2147 +#: initdb.c:2099 #, c-format msgid "setlocale() failed" msgstr "échec de setlocale()" -#: initdb.c:2168 +#: initdb.c:2120 #, c-format msgid "failed to restore old locale \"%s\"" msgstr "a échoué pour restaurer l'ancienne locale « %s »" -#: initdb.c:2177 +#: initdb.c:2129 #, c-format msgid "invalid locale name \"%s\"" msgstr "nom de locale « %s » invalide" -#: initdb.c:2188 +#: initdb.c:2140 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "configuration invalide de la locale ; vérifiez les variables d'environnement LANG et LC_*" -#: initdb.c:2215 +#: initdb.c:2167 #, c-format msgid "encoding mismatch" msgstr "différence d'encodage" -#: initdb.c:2217 +#: initdb.c:2169 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the\n" @@ -463,7 +463,7 @@ msgstr "" "Ré-exécutez %s sans préciser d'encodage, ou en choisissant une combinaison\n" "compatible.\n" -#: initdb.c:2289 +#: initdb.c:2241 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -472,17 +472,17 @@ msgstr "" "%s initialise un cluster PostgreSQL.\n" "\n" -#: initdb.c:2290 +#: initdb.c:2242 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: initdb.c:2291 +#: initdb.c:2243 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPTION]... [RÉP_DONNÉES]\n" -#: initdb.c:2292 +#: initdb.c:2244 #, c-format msgid "" "\n" @@ -491,54 +491,59 @@ msgstr "" "\n" "Options :\n" -#: initdb.c:2293 +#: initdb.c:2245 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr "" " -A, --auth=MÉTHODE méthode d'authentification par défaut pour les\n" " connexions locales\n" -#: initdb.c:2294 +#: initdb.c:2246 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr "" " --auth-host=MÉTHODE méthode d'authentification par défaut pour les\n" " connexions locales TCP/IP\n" -#: initdb.c:2295 +#: initdb.c:2247 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr "" " --auth-local=MÉTHODE méthode d'authentification par défaut pour les\n" " connexions locales socket\n" -#: initdb.c:2296 +#: initdb.c:2248 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]RÉP_DONNÉES emplacement du cluster\n" -#: initdb.c:2297 +#: initdb.c:2249 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr "" " -E, --encoding=ENCODAGE initialise l'encodage par défaut des nouvelles\n" " bases de données\n" -#: initdb.c:2298 +#: initdb.c:2250 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" msgstr "" " -g, --allow-group-access autorise la lecture/écriture pour le groupe sur\n" " le répertoire des données\n" -#: initdb.c:2299 +#: initdb.c:2251 +#, c-format +msgid " -k, --data-checksums use data page checksums\n" +msgstr " -k, --data-checksums utilise les sommes de contrôle pour les pages de données\n" + +#: initdb.c:2252 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr "" " --locale=LOCALE initialise la locale par défaut pour les\n" " nouvelles bases de données\n" -#: initdb.c:2300 +#: initdb.c:2253 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -553,19 +558,19 @@ msgstr "" " de données (les valeurs par défaut sont prises\n" " dans l'environnement)\n" -#: initdb.c:2304 +#: initdb.c:2257 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale équivalent à --locale=C\n" -#: initdb.c:2305 +#: initdb.c:2258 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr "" " --pwfile=NOMFICHIER lit le mot de passe du nouveau\n" " super-utilisateur à partir de ce fichier\n" -#: initdb.c:2306 +#: initdb.c:2259 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -575,31 +580,31 @@ msgstr "" " configuration par défaut de la recherche plein\n" " texte\n" -#: initdb.c:2308 +#: initdb.c:2261 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=NOM nom du super-utilisateur de la base de données\n" -#: initdb.c:2309 +#: initdb.c:2262 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr "" " -W, --pwprompt demande un mot de passe pour le nouveau\n" " super-utilisateur\n" -#: initdb.c:2310 +#: initdb.c:2263 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr "" " -X, --waldir=RÉP_WAL emplacement du répertoire des journaux de\n" " transactions\n" -#: initdb.c:2311 +#: initdb.c:2264 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=TAILLE taille des segments WAL, en mégaoctets\n" -#: initdb.c:2312 +#: initdb.c:2265 #, c-format msgid "" "\n" @@ -608,44 +613,44 @@ msgstr "" "\n" "Options moins utilisées :\n" -#: initdb.c:2313 +#: initdb.c:2266 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug engendre un grand nombre de traces de débogage\n" -#: initdb.c:2314 -#, c-format -msgid " -k, --data-checksums use data page checksums\n" -msgstr " -k, --data-checksums utilise les sommes de contrôle pour les pages de données\n" - -#: initdb.c:2315 +#: initdb.c:2267 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr "" " -L RÉPERTOIRE indique où trouver les fichiers servant à la\n" " création du cluster\n" -#: initdb.c:2316 +#: initdb.c:2268 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --noclean ne nettoie pas après des erreurs\n" -#: initdb.c:2317 +#: initdb.c:2269 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --nosync n'attend pas que les modifications soient proprement écrites sur disque\n" -#: initdb.c:2318 +#: initdb.c:2270 +#, c-format +msgid " --no-instructions do not print instructions for next steps\n" +msgstr " --no-instructions n'affiche pas les instructions des prochaines étapes\n" + +#: initdb.c:2271 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, --show affiche la configuration interne\n" -#: initdb.c:2319 +#: initdb.c:2272 #, c-format msgid " -S, --sync-only only sync data directory\n" msgstr " -S, --sync-only synchronise uniquement le répertoire des données\n" -#: initdb.c:2320 +#: initdb.c:2273 #, c-format msgid "" "\n" @@ -654,17 +659,17 @@ msgstr "" "\n" "Autres options :\n" -#: initdb.c:2321 +#: initdb.c:2274 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: initdb.c:2322 +#: initdb.c:2275 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: initdb.c:2323 +#: initdb.c:2276 #, c-format msgid "" "\n" @@ -675,7 +680,7 @@ msgstr "" "Si le répertoire des données n'est pas indiqué, la variable d'environnement\n" "PGDATA est utilisée.\n" -#: initdb.c:2325 +#: initdb.c:2278 #, c-format msgid "" "\n" @@ -684,29 +689,27 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: initdb.c:2326 +#: initdb.c:2279 #, c-format msgid "%s home page: <%s>\n" msgstr "page d'accueil de %s : <%s>\n" -#: initdb.c:2354 +#: initdb.c:2307 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "méthode d'authentification « %s » invalide pour « %s » connexions" -#: initdb.c:2370 +#: initdb.c:2323 #, c-format -msgid "must specify a password for the superuser to enable %s authentication" -msgstr "" -"doit indiquer un mot de passe pour le super-utilisateur pour\n" -"activer l'authentification %s" +msgid "must specify a password for the superuser to enable password authentication" +msgstr "doit indiquer un mot de passe pour le super-utilisateur afin d'activer l'authentification par mot de passe" -#: initdb.c:2397 +#: initdb.c:2344 #, c-format msgid "no data directory specified" msgstr "aucun répertoire de données indiqué" -#: initdb.c:2399 +#: initdb.c:2346 #, c-format msgid "" "You must identify the directory where the data for this database system\n" @@ -717,7 +720,12 @@ msgstr "" "système de bases de données. Faites-le soit avec l'option -D soit avec\n" "la variable d'environnement PGDATA.\n" -#: initdb.c:2434 +#: initdb.c:2364 +#, c-format +msgid "could not set environment" +msgstr "n'a pas pu configurer l'environnement" + +#: initdb.c:2384 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -728,7 +736,7 @@ msgstr "" "dans le même répertoire que « %s ».\n" "Vérifiez votre installation." -#: initdb.c:2439 +#: initdb.c:2389 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -739,17 +747,17 @@ msgstr "" "mais n'est pas de la même version que %s.\n" "Vérifiez votre installation." -#: initdb.c:2458 +#: initdb.c:2408 #, c-format msgid "input file location must be an absolute path" msgstr "l'emplacement du fichier d'entrée doit être indiqué avec un chemin absolu" -#: initdb.c:2475 +#: initdb.c:2425 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "L'instance sera initialisée avec la locale « %s ».\n" -#: initdb.c:2478 +#: initdb.c:2428 #, c-format msgid "" "The database cluster will be initialized with locales\n" @@ -768,22 +776,22 @@ msgstr "" " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:2502 +#: initdb.c:2452 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "n'a pas pu trouver un encodage adéquat pour la locale « %s »" -#: initdb.c:2504 +#: initdb.c:2454 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "Relancez %s avec l'option -E.\n" -#: initdb.c:2505 initdb.c:3127 initdb.c:3148 +#: initdb.c:2455 initdb.c:3089 initdb.c:3110 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayer « %s --help » pour plus d'informations.\n" -#: initdb.c:2518 +#: initdb.c:2468 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -792,12 +800,12 @@ msgstr "" "L'encodage « %s » a été déduit de la locale mais n'est pas autorisé en tant qu'encodage serveur.\n" "L'encodage par défaut des bases de données sera configuré à « %s ».\n" -#: initdb.c:2523 +#: initdb.c:2473 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "la locale « %s » nécessite l'encodage « %s » non supporté" -#: initdb.c:2526 +#: initdb.c:2476 #, c-format msgid "" "Encoding \"%s\" is not allowed as a server-side encoding.\n" @@ -806,59 +814,59 @@ msgstr "" "L'encodage « %s » n'est pas autorisé en tant qu'encodage serveur.\n" "Ré-exécuter %s avec une locale différente.\n" -#: initdb.c:2535 +#: initdb.c:2485 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "" "L'encodage par défaut des bases de données a été configuré en conséquence\n" "avec « %s ».\n" -#: initdb.c:2597 +#: initdb.c:2551 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "n'a pas pu trouver la configuration de la recherche plein texte en adéquation avec la locale « %s »" -#: initdb.c:2608 +#: initdb.c:2562 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "la configuration de la recherche plein texte convenable pour la locale « %s » est inconnue" -#: initdb.c:2613 +#: initdb.c:2567 #, c-format msgid "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "la configuration indiquée pour la recherche plein texte, « %s », pourrait ne pas correspondre à la locale « %s »" -#: initdb.c:2618 +#: initdb.c:2572 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "La configuration de la recherche plein texte a été initialisée à « %s ».\n" -#: initdb.c:2662 initdb.c:2744 +#: initdb.c:2616 initdb.c:2698 #, c-format msgid "creating directory %s ... " msgstr "création du répertoire %s... " -#: initdb.c:2668 initdb.c:2750 initdb.c:2815 initdb.c:2877 +#: initdb.c:2622 initdb.c:2704 initdb.c:2769 initdb.c:2831 #, c-format msgid "could not create directory \"%s\": %m" msgstr "n'a pas pu créer le répertoire « %s » : %m" -#: initdb.c:2679 initdb.c:2762 +#: initdb.c:2633 initdb.c:2716 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "correction des droits sur le répertoire existant %s... " -#: initdb.c:2685 initdb.c:2768 +#: initdb.c:2639 initdb.c:2722 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "n'a pas pu modifier les droits du répertoire « %s » : %m" -#: initdb.c:2699 initdb.c:2782 +#: initdb.c:2653 initdb.c:2736 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "le répertoire « %s » existe mais n'est pas vide" -#: initdb.c:2704 +#: initdb.c:2658 #, c-format msgid "" "If you want to create a new database system, either remove or empty\n" @@ -869,17 +877,17 @@ msgstr "" "videz le répertoire « %s ».\n" "Vous pouvez aussi exécuter %s avec un argument autre que « %s ».\n" -#: initdb.c:2712 initdb.c:2794 initdb.c:3163 +#: initdb.c:2666 initdb.c:2748 initdb.c:3125 #, c-format msgid "could not access directory \"%s\": %m" msgstr "n'a pas pu accéder au répertoire « %s » : %m" -#: initdb.c:2735 +#: initdb.c:2689 #, c-format msgid "WAL directory location must be an absolute path" msgstr "l'emplacement du répertoire des journaux de transactions doit être indiqué avec un chemin absolu" -#: initdb.c:2787 +#: initdb.c:2741 #, c-format msgid "" "If you want to store the WAL there, either remove or empty the directory\n" @@ -888,27 +896,27 @@ msgstr "" "Si vous voulez enregistrer ici le journal des transactions, supprimez ou\n" "videz le répertoire « %s ».\n" -#: initdb.c:2801 +#: initdb.c:2755 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "n'a pas pu créer le lien symbolique « %s » : %m" -#: initdb.c:2806 +#: initdb.c:2760 #, c-format msgid "symlinks are not supported on this platform" msgstr "les liens symboliques ne sont pas supportés sur cette plateforme" -#: initdb.c:2830 +#: initdb.c:2784 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point.\n" msgstr "Il contient un fichier invisible, peut-être parce qu'il s'agit d'un point de montage.\n" -#: initdb.c:2833 +#: initdb.c:2787 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point.\n" msgstr "Il contient un répertoire lost+found, peut-être parce qu'il s'agit d'un point de montage.\n" -#: initdb.c:2836 +#: initdb.c:2790 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -917,57 +925,57 @@ msgstr "" "Utiliser un point de montage comme répertoire des données n'est pas recommandé.\n" "Créez un sous-répertoire sous le point de montage.\n" -#: initdb.c:2862 +#: initdb.c:2816 #, c-format msgid "creating subdirectories ... " msgstr "création des sous-répertoires... " -#: initdb.c:2908 +#: initdb.c:2862 msgid "performing post-bootstrap initialization ... " msgstr "exécution de l'initialisation après bootstrap... " -#: initdb.c:3065 +#: initdb.c:3024 #, c-format msgid "Running in debug mode.\n" msgstr "Lancé en mode débogage.\n" -#: initdb.c:3069 +#: initdb.c:3028 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "Lancé en mode « sans nettoyage ». Les erreurs ne seront pas nettoyées.\n" -#: initdb.c:3146 +#: initdb.c:3108 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" -#: initdb.c:3167 initdb.c:3256 +#: initdb.c:3129 initdb.c:3218 msgid "syncing data to disk ... " msgstr "synchronisation des données sur disque... " -#: initdb.c:3176 +#: initdb.c:3138 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "" "les options d'invite du mot de passe et de fichier de mots de passe ne\n" "peuvent pas être indiquées simultanément" -#: initdb.c:3201 +#: initdb.c:3163 #, c-format msgid "argument of --wal-segsize must be a number" msgstr "l'argument de --wal-segsize doit être un nombre" -#: initdb.c:3206 +#: initdb.c:3168 #, c-format msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024" msgstr "l'argument de --wal-segsize doit être une puissance de 2 comprise entre 1 et 1024" -#: initdb.c:3223 +#: initdb.c:3185 #, c-format msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" msgstr "le nom de superutilisateur « %s » n'est pas autorisé ; les noms de rôle ne peuvent pas commencer par « pg_ »" -#: initdb.c:3227 +#: initdb.c:3189 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -978,17 +986,17 @@ msgstr "" "Le processus serveur doit également lui appartenir.\n" "\n" -#: initdb.c:3243 +#: initdb.c:3205 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Les sommes de contrôle des pages de données sont activées.\n" -#: initdb.c:3245 +#: initdb.c:3207 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Les sommes de contrôle des pages de données sont désactivées.\n" -#: initdb.c:3262 +#: initdb.c:3224 #, c-format msgid "" "\n" @@ -999,12 +1007,12 @@ msgstr "" "Synchronisation sur disque ignorée.\n" "Le répertoire des données pourrait être corrompu si le système d'exploitation s'arrêtait brutalement.\n" -#: initdb.c:3267 +#: initdb.c:3229 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "activation de l'authentification « trust » pour les connexions locales" -#: initdb.c:3268 +#: initdb.c:3230 #, c-format msgid "" "You can change this by editing pg_hba.conf or using the option -A, or\n" @@ -1015,11 +1023,11 @@ msgstr "" "lancement d'initdb.\n" #. translator: This is a placeholder in a shell command. -#: initdb.c:3293 +#: initdb.c:3260 msgid "logfile" msgstr "fichier_de_trace" -#: initdb.c:3295 +#: initdb.c:3262 #, c-format msgid "" "\n" @@ -1238,3 +1246,6 @@ msgstr "" #~ "Le programme « postgres » est nécessaire à %s mais n'a pas été trouvé dans\n" #~ "le même répertoire que « %s ».\n" #~ "Vérifiez votre installation." + +#~ msgid "pclose failed: %m" +#~ msgstr "échec de pclose : %m" diff --git a/src/bin/initdb/po/ja.po b/src/bin/initdb/po/ja.po index 6ea5834cd3c0b..420caed5af988 100644 --- a/src/bin/initdb/po/ja.po +++ b/src/bin/initdb/po/ja.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: initdb (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: initdb (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-06-06 10:42+0900\n" -"PO-Revision-Date: 2019-06-11 20:10+0900\n" +"POT-Creation-Date: 2020-08-21 15:53+0900\n" +"PO-Revision-Date: 2020-09-13 08:55+0200\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -15,163 +15,158 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:241 #, c-format msgid "fatal: " msgstr "致命的エラー: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:248 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:255 #, c-format msgid "warning: " msgstr "警告: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "カレントディレクトリを特定できませんでした: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "バイナリ\"%s\"は無効です" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "バイナリ\"%s\"を読み取れませんでした" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "実行する\"%s\"がありませんでした" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "ディレクトリ\"%s\"に移動できませんでした: %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を読めませんでした: %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "pcloseが失敗しました: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 -#: initdb.c:339 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: initdb.c:325 #, c-format msgid "out of memory" msgstr "メモリ不足です" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "メモリ不足です\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "null ポインタを複製できません(内部エラー)。\n" -#: ../../common/file_utils.c:81 ../../common/file_utils.c:183 +#: ../../common/file_utils.c:84 ../../common/file_utils.c:186 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ファイル\"%s\"のstatに失敗しました: %m" -#: ../../common/file_utils.c:160 ../../common/pgfnames.c:48 +#: ../../common/file_utils.c:163 ../../common/pgfnames.c:48 #, c-format msgid "could not open directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" -#: ../../common/file_utils.c:194 ../../common/pgfnames.c:69 +#: ../../common/file_utils.c:197 ../../common/pgfnames.c:69 #, c-format msgid "could not read directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を読み取れませんでした: %m" -#: ../../common/file_utils.c:226 ../../common/file_utils.c:285 -#: ../../common/file_utils.c:359 +#: ../../common/file_utils.c:229 ../../common/file_utils.c:288 +#: ../../common/file_utils.c:362 #, c-format msgid "could not open file \"%s\": %m" msgstr "ファイル\"%s\"をオープンできませんでした: %m" -#: ../../common/file_utils.c:297 ../../common/file_utils.c:367 +#: ../../common/file_utils.c:300 ../../common/file_utils.c:370 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "ファイル\"%s\"をfsyncできませんでした: %m" -#: ../../common/file_utils.c:377 +#: ../../common/file_utils.c:380 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m" #: ../../common/pgfnames.c:74 #, c-format -#| msgid "could not close directory \"%s\": %s\n" msgid "could not close directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をクローズできませんでした: %m" -#: ../../common/restricted_token.c:69 +#: ../../common/restricted_token.c:64 #, c-format -#| msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -msgid "cannot create restricted tokens on this platform" -msgstr "このプラットフォームでは制限付きトークンを生成できません" +msgid "could not load library \"%s\": error code %lu" +msgstr "ライブラリ\"%s\"をロードできませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:78 +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "このプラットフォームでは制限付きトークンを生成できません: エラーコード %lu" + +#: ../../common/restricted_token.c:82 #, c-format -#| msgid "%s: could not open process token: error code %lu\n" msgid "could not open process token: error code %lu" msgstr "プロセストークンをオープンできませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:91 +#: ../../common/restricted_token.c:97 #, c-format -#| msgid "%s: could not allocate SIDs: error code %lu\n" msgid "could not allocate SIDs: error code %lu" msgstr "SIDを割り当てられませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:110 +#: ../../common/restricted_token.c:119 #, c-format -#| msgid "%s: could not create restricted token: error code %lu\n" msgid "could not create restricted token: error code %lu" msgstr "制限付きトークンを生成できませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:131 +#: ../../common/restricted_token.c:140 #, c-format -#| msgid "%s: could not start process for command \"%s\": error code %lu\n" msgid "could not start process for command \"%s\": error code %lu" msgstr "コマンド\"%s\"のためのプロセスを起動できませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:169 +#: ../../common/restricted_token.c:178 #, c-format -#| msgid "%s: could not re-execute with restricted token: error code %lu\n" msgid "could not re-execute with restricted token: error code %lu" msgstr "制限付きトークンで再実行できませんでした: %lu" -#: ../../common/restricted_token.c:185 +#: ../../common/restricted_token.c:194 #, c-format -#| msgid "%s: could not get exit code from subprocess: error code %lu\n" msgid "could not get exit code from subprocess: error code %lu" msgstr "サブプロセスの終了コードを取得できませんでした: エラーコード %lu" #: ../../common/rmtree.c:79 #, c-format msgid "could not stat file or directory \"%s\": %m" -msgstr "" -"\"%s\"というファイルまたはディレクトリの情報を取得できませんでした。: %m" +msgstr "\"%s\"というファイルまたはディレクトリの情報を取得できませんでした。: %m" #: ../../common/rmtree.c:101 ../../common/rmtree.c:113 #, c-format -#| msgid "could not remove file or directory \"%s\": %s\n" msgid "could not remove file or directory \"%s\": %m" msgstr "\"%s\"というファイルまたはディレクトリを削除できませんでした: %m" @@ -229,168 +224,145 @@ msgstr "\"%s\"のjunctionを設定できませんでした: %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "\"%s\"のjunctionを入手できませんでした: %s\n" -#: initdb.c:495 initdb.c:1534 +#: initdb.c:481 initdb.c:1517 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "ファイル\"%s\"を読み取り用にオープンできませんでした: %m" -#: initdb.c:550 initdb.c:858 initdb.c:884 +#: initdb.c:536 initdb.c:852 initdb.c:878 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "ファイル\"%s\"を書き込み用にオープンできませんでした: %m" -#: initdb.c:557 initdb.c:564 initdb.c:864 initdb.c:889 +#: initdb.c:543 initdb.c:550 initdb.c:858 initdb.c:883 #, c-format msgid "could not write file \"%s\": %m" msgstr "ファイル\"%s\"を書き出せませんでした: %m" -#: initdb.c:582 +#: initdb.c:568 #, c-format msgid "could not execute command \"%s\": %m" msgstr "コマンド\"%s\"を実行できませんでした: %m" -#: initdb.c:600 +#: initdb.c:586 #, c-format -#| msgid "%s: removing data directory \"%s\"\n" msgid "removing data directory \"%s\"" msgstr "データディレクトリ\"%s\"を削除しています" -#: initdb.c:602 +#: initdb.c:588 #, c-format -#| msgid "%s: failed to remove data directory\n" msgid "failed to remove data directory" msgstr "データディレクトリの削除に失敗しました" -#: initdb.c:606 +#: initdb.c:592 #, c-format -#| msgid "%s: removing contents of data directory \"%s\"\n" msgid "removing contents of data directory \"%s\"" msgstr "データディレクトリ\"%s\"の内容を削除しています" -#: initdb.c:609 +#: initdb.c:595 #, c-format -#| msgid "%s: failed to remove contents of data directory\n" msgid "failed to remove contents of data directory" msgstr "データディレクトリの内容の削除に失敗しました" -#: initdb.c:614 +#: initdb.c:600 #, c-format -#| msgid "%s: removing WAL directory \"%s\"\n" msgid "removing WAL directory \"%s\"" msgstr "WAL ディレクトリ\"%s\"を削除しています" -#: initdb.c:616 +#: initdb.c:602 #, c-format -#| msgid "%s: failed to remove WAL directory\n" msgid "failed to remove WAL directory" msgstr "WAL ディレクトリの削除に失敗しました" -#: initdb.c:620 +#: initdb.c:606 #, c-format -#| msgid "%s: removing contents of WAL directory \"%s\"\n" msgid "removing contents of WAL directory \"%s\"" msgstr "WAL ディレクトリ\"%s\"の中身を削除しています" -#: initdb.c:622 +#: initdb.c:608 #, c-format -#| msgid "%s: failed to remove contents of WAL directory\n" msgid "failed to remove contents of WAL directory" msgstr "WAL ディレクトリの中身の削除に失敗しました" -#: initdb.c:629 +#: initdb.c:615 #, c-format -#| msgid "%s: data directory \"%s\" not removed at user's request\n" msgid "data directory \"%s\" not removed at user's request" msgstr "ユーザの要求によりデータディレクトリ\"%s\"を削除しませんでした" -#: initdb.c:633 +#: initdb.c:619 #, c-format -#| msgid "%s: WAL directory \"%s\" not removed at user's request\n" msgid "WAL directory \"%s\" not removed at user's request" msgstr "ユーザの要求により WAL ディレクトリ\"%s\"を削除しませんでした" -#: initdb.c:651 +#: initdb.c:637 #, c-format -#| msgid "%s: cannot be run as root\n" msgid "cannot be run as root" msgstr "root では実行できません" -#: initdb.c:653 +#: initdb.c:639 #, c-format -#| msgid "" -#| "%s: cannot be run as root\n" -#| "Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" -#| "own the server process.\n" msgid "" "Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" "own the server process.\n" msgstr "" -"サーバプロセスの所有者となる(非特権)ユーザとして(例えば\"su\"を使用して)ログ" -"イン\n" +"サーバプロセスの所有者となる(非特権)ユーザとして(例えば\"su\"を使用して)ログイン\n" "してください。\n" -#: initdb.c:686 +#: initdb.c:672 #, c-format -#| msgid "%s: \"%s\" is not a valid server encoding name\n" msgid "\"%s\" is not a valid server encoding name" msgstr "\"%s\"は有効なサーバ符号化方式名ではありません" -#: initdb.c:817 +#: initdb.c:811 #, c-format -#| msgid "role \"%s\" does not exist" msgid "file \"%s\" does not exist" msgstr "ファイル\"%s\"は存在しません" -#: initdb.c:819 initdb.c:826 initdb.c:835 +#: initdb.c:813 initdb.c:820 initdb.c:829 #, c-format msgid "" "This might mean you have a corrupted installation or identified\n" "the wrong directory with the invocation option -L.\n" msgstr "" -"インストール先が破損しているか -L オプションで間違ったディレクトリを指定し" -"た\n" +"インストール先が破損しているか -L オプションで間違ったディレクトリを指定した\n" "可能性があります。\n" -#: initdb.c:824 +#: initdb.c:818 #, c-format msgid "could not access file \"%s\": %m" msgstr "ファイル\"%s\"にアクセスできませんでした: %m" -#: initdb.c:833 +#: initdb.c:827 #, c-format -#| msgid "%s: file \"%s\" is not a regular file\n" msgid "file \"%s\" is not a regular file" msgstr "ファイル\"%s\"は通常のファイルではありません" -#: initdb.c:978 +#: initdb.c:972 #, c-format -#| msgid "Selects the dynamic shared memory implementation used." msgid "selecting dynamic shared memory implementation ... " msgstr "動的共有メモリの実装を選択しています ... " -#: initdb.c:987 +#: initdb.c:981 #, c-format msgid "selecting default max_connections ... " msgstr "デフォルトのmax_connectionsを選択しています ... " -#: initdb.c:1018 +#: initdb.c:1012 #, c-format msgid "selecting default shared_buffers ... " -msgstr "デフォルトの shared_buffers を選択しています ... " +msgstr "デフォルトのshared_buffersを選択しています ... " -#: initdb.c:1052 +#: initdb.c:1046 #, c-format -#| msgid "selecting default max_connections ... " -msgid "selecting default timezone ... " -msgstr "デフォルトのタイムゾーンを選択しています ... " +msgid "selecting default time zone ... " +msgstr "デフォルトの時間帯を選択しています ... " -#: initdb.c:1086 +#: initdb.c:1080 msgid "creating configuration files ... " msgstr "設定ファイルを作成しています ... " #: initdb.c:1239 initdb.c:1258 initdb.c:1344 initdb.c:1359 #, c-format -#| msgid "could not set permissions of file \"%s\": %m" msgid "could not change permissions of \"%s\": %m" msgstr "\"%s\"の権限を変更できませんでした: %m" @@ -401,91 +373,78 @@ msgstr "ブートストラップスクリプトを実行しています ... " #: initdb.c:1393 #, c-format -#| msgid "index \"%s\" does not belong to table \"%s\"" msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "入力ファイル\"%s\"は PostgreSQL %s のものではありません" #: initdb.c:1396 #, c-format -#| msgid "" -#| "%s: input file \"%s\" does not belong to PostgreSQL %s\n" -#| "Check your installation or specify the correct path using the option -L.\n" -msgid "" -"Check your installation or specify the correct path using the option -L.\n" -msgstr "" -"インストール先を確認するか、-Lオプションを使用して正しいパスを指定してくださ" -"い。\n" +msgid "Check your installation or specify the correct path using the option -L.\n" +msgstr "インストール先を確認するか、-Lオプションを使用して正しいパスを指定してください。\n" -#: initdb.c:1511 +#: initdb.c:1494 msgid "Enter new superuser password: " msgstr "新しいスーパユーザのパスワードを入力してください:" -#: initdb.c:1512 +#: initdb.c:1495 msgid "Enter it again: " msgstr "再入力してください:" -#: initdb.c:1515 +#: initdb.c:1498 #, c-format msgid "Passwords didn't match.\n" msgstr "パスワードが一致しません。\n" -#: initdb.c:1541 +#: initdb.c:1524 #, c-format -#| msgid "%s: could not read password from file \"%s\": %s\n" msgid "could not read password from file \"%s\": %m" msgstr "ファイル\"%s\"からパスワードを読み取ることができませんでした: %m" -#: initdb.c:1544 +#: initdb.c:1527 #, c-format -#| msgid "lock file \"%s\" is empty" msgid "password file \"%s\" is empty" msgstr "パスワードファイル\"%s\"が空です" -#: initdb.c:2107 +#: initdb.c:2055 #, c-format msgid "caught signal\n" msgstr "シグナルが発生しました\n" -#: initdb.c:2113 +#: initdb.c:2061 #, c-format msgid "could not write to child process: %s\n" msgstr "子プロセスへの書き込みができませんでした: %s\n" -#: initdb.c:2121 +#: initdb.c:2069 #, c-format msgid "ok\n" msgstr "ok\n" -#: initdb.c:2211 +#: initdb.c:2159 #, c-format -#| msgid "select() failed: %s\n" msgid "setlocale() failed" msgstr "setlocale()が失敗しました" -#: initdb.c:2232 +#: initdb.c:2180 #, c-format -#| msgid "failed to restore old locale \"%s\"\n" msgid "failed to restore old locale \"%s\"" msgstr "古いロケール\"%s\"を復元できませんでした" -#: initdb.c:2241 +#: initdb.c:2189 #, c-format -#| msgid "invalid locale name: \"%s\"" msgid "invalid locale name \"%s\"" msgstr "ロケール名\"%s\"は不正です" -#: initdb.c:2252 +#: initdb.c:2200 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "不正なロケール設定; 環境変数LANGおよびLC_* を確認してください" -#: initdb.c:2279 +#: initdb.c:2227 #, c-format -#| msgid "%s: encoding mismatch\n" msgid "encoding mismatch" msgstr "符号化方式が合いません" -#: initdb.c:2281 +#: initdb.c:2229 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the\n" @@ -499,24 +458,24 @@ msgstr "" "なります。明示的な符号化方式の指定を止めるか合致する組み合わせを\n" "選択して %s を再実行してください\n" -#: initdb.c:2353 +#: initdb.c:2301 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" "\n" msgstr "%sはPostgreSQLデータベースクラスタを初期化します。\n" -#: initdb.c:2354 +#: initdb.c:2302 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: initdb.c:2355 +#: initdb.c:2303 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPTION]... [DATADIR]\n" -#: initdb.c:2356 +#: initdb.c:2304 #, c-format msgid "" "\n" @@ -525,123 +484,97 @@ msgstr "" "\n" "オプション:\n" -#: initdb.c:2357 +#: initdb.c:2305 #, c-format -msgid "" -" -A, --auth=METHOD default authentication method for local " -"connections\n" -msgstr "" -" -A, --auth=METHOD ローカルな接続向けのデフォルトの認証方式です\n" +msgid " -A, --auth=METHOD default authentication method for local connections\n" +msgstr " -A, --auth=METHOD ローカル接続のデフォルト認証方式\n" -#: initdb.c:2358 +#: initdb.c:2306 #, c-format -msgid "" -" --auth-host=METHOD default authentication method for local TCP/IP " -"connections\n" -msgstr "" -" --auth-host=METHOD ローカルなTCP/IP接続向けのデフォルトの認証方式で" -"す\n" +msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" +msgstr " --auth-host=METHOD ローカルTCP/IP接続のデフォルト認証方式\n" -#: initdb.c:2359 +#: initdb.c:2307 #, c-format -msgid "" -" --auth-local=METHOD default authentication method for local-socket " -"connections\n" -msgstr "" -" --auth-local=METHOD ローカルソケット接続向けのデフォルトの認証方式で" -"す\n" +msgid " --auth-local=METHOD default authentication method for local-socket connections\n" +msgstr " --auth-local=METHOD ローカルソケット接続のデフォルト認証方式\n" -#: initdb.c:2360 +#: initdb.c:2308 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" -msgstr " [-D, --pgdata=]DATADIR データベースクラスタの場所です\n" +msgstr " [-D, --pgdata=]DATADIR データベースクラスタの場所\n" -#: initdb.c:2361 +#: initdb.c:2309 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" -msgstr "" -" -E, --encoding=ENCODING 新規データベース用のデフォルトの符号化方式です\n" +msgstr " -E, --encoding=ENCODING 新規データベースのデフォルト符号化方式\n" -#: initdb.c:2362 +#: initdb.c:2310 #, c-format -msgid "" -" -g, --allow-group-access allow group read/execute on data directory\n" -msgstr "" -" -g, --allow-group-access データディレクトリでのグループ読み取り/実行を許" -"可\n" +msgid " -g, --allow-group-access allow group read/execute on data directory\n" +msgstr " -g, --allow-group-access データディレクトリのグループ読み取り/実行を許可\n" -#: initdb.c:2363 +#: initdb.c:2311 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" -msgstr "" -" --locale=LOCALE 新しいデータベースのデフォルトロケールをセット\n" +msgstr " --locale=LOCALE 新しいデータベースのデフォルトロケールをセット\n" -#: initdb.c:2364 +#: initdb.c:2312 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" " --lc-monetary=, --lc-numeric=, --lc-time=LOCALE\n" -" set default locale in the respective category " -"for\n" +" set default locale in the respective category for\n" " new databases (default taken from environment)\n" msgstr "" " --lc-collate, --lc-ctype, --lc-messages=ロケール名\n" " --lc-monetary, --lc-numeric, --lc-time=ロケール名\n" -" 新しいデータベースで使用する、おのおののカテゴリ" -"の\n" -" デフォルトロケールを設定(デフォルト値は環境変数か" -"ら\n" -" 取得します)\n" +" 新しいデータベースで使用する、おのおののカテゴリの\n" +" デフォルトロケールを設定(デフォルト値は環境変数から\n" +" 取得)\n" -#: initdb.c:2368 +#: initdb.c:2316 #, c-format msgid " --no-locale equivalent to --locale=C\n" -msgstr " --no-locale --locale=C と同じです\n" +msgstr " --no-locale --locale=C と同じ\n" -#: initdb.c:2369 +#: initdb.c:2317 #, c-format -msgid "" -" --pwfile=FILE read password for the new superuser from file\n" +msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr "" -" --pwfile=ファイル名 新しいスーパユーザのパスワードをファイルから\n" +" --pwfile=ファイル名 新しいスーパーユーザのパスワードをファイルから\n" " 読み込む\n" -#: initdb.c:2370 +#: initdb.c:2318 #, c-format msgid "" " -T, --text-search-config=CFG\n" " default text search configuration\n" msgstr "" " -T, --text-search-config=CFG\\\n" -" デフォルトのテキスト検索設定です\n" +" デフォルトのテキスト検索設定\n" -#: initdb.c:2372 +#: initdb.c:2320 #, c-format msgid " -U, --username=NAME database superuser name\n" -msgstr " -U, --username=NAME データベーススーパユーザの名前です\n" +msgstr " -U, --username=NAME データベーススーパーユーザの名前\n" -#: initdb.c:2373 +#: initdb.c:2321 #, c-format -msgid "" -" -W, --pwprompt prompt for a password for the new superuser\n" -msgstr "" -" -W, --pwprompt 新規スーパユーザに対してパスワード入力を促しま" -"す\n" +msgid " -W, --pwprompt prompt for a password for the new superuser\n" +msgstr " -W, --pwprompt 新規スーパーユーザに対してパスワード入力を促す\n" -#: initdb.c:2374 +#: initdb.c:2322 #, c-format -#| msgid "" -#| " --waldir=WALDIR location for the write-ahead log directory\n" -msgid "" -" -X, --waldir=WALDIR location for the write-ahead log directory\n" +msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALDIR 先行書き込みログ用ディレクトリの位置\n" -#: initdb.c:2375 +#: initdb.c:2323 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=SIZE WALセグメントのサイズ、メガバイト単位\n" -#: initdb.c:2376 +#: initdb.c:2324 #, c-format msgid "" "\n" @@ -650,49 +583,42 @@ msgstr "" "\n" "使用頻度の低いオプション:\n" -#: initdb.c:2377 +#: initdb.c:2325 #, c-format msgid " -d, --debug generate lots of debugging output\n" -msgstr " -d, --debug 多くのデバッグ用の出力を生成します\n" +msgstr " -d, --debug 多くのデバッグ用の出力を生成\n" -#: initdb.c:2378 +#: initdb.c:2326 #, c-format msgid " -k, --data-checksums use data page checksums\n" -msgstr " -k, --data-checksums データページのチェックサムを使用します\n" +msgstr " -k, --data-checksums データページのチェックサムを使用\n" -#: initdb.c:2379 +#: initdb.c:2327 #, c-format msgid " -L DIRECTORY where to find the input files\n" -msgstr " -L DIRECTORY 入力ファイルの場所を指定します\n" +msgstr " -L DIRECTORY 入力ファイルの場所を指定\n" -#: initdb.c:2380 +#: initdb.c:2328 #, c-format -#| msgid " -n, --noclean do not clean up after errors\n" msgid " -n, --no-clean do not clean up after errors\n" -msgstr " -n, --no-clean エラー発生後の削除を行いません\n" +msgstr " -n, --no-clean エラー発生後のクリーンアップを行わない\n" -#: initdb.c:2381 +#: initdb.c:2329 #, c-format -#| msgid "" -#| " -N, --nosync do not wait for changes to be written safely " -#| "to disk\n" -msgid "" -" -N, --no-sync do not wait for changes to be written safely to " -"disk\n" -msgstr "" -" -N, --no-sync 変更の安全なディスクへの書き出しを待機しません\n" +msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" +msgstr " -N, --no-sync 変更の安全なディスクへの書き出しを待機しない\n" -#: initdb.c:2382 +#: initdb.c:2330 #, c-format msgid " -s, --show show internal settings\n" -msgstr " -s, --show 内部設定を表示します\n" +msgstr " -s, --show 内部設定を表示\n" -#: initdb.c:2383 +#: initdb.c:2331 #, c-format msgid " -S, --sync-only only sync data directory\n" -msgstr " -S, --sync-only データディレクトリのsyncのみを実行します\n" +msgstr " -S, --sync-only データディレクトリのsyncのみを実行\n" -#: initdb.c:2384 +#: initdb.c:2332 #, c-format msgid "" "\n" @@ -701,17 +627,17 @@ msgstr "" "\n" "その他のオプション:\n" -#: initdb.c:2385 +#: initdb.c:2333 #, c-format msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version バージョン情報を表示し、終了します\n" +msgstr " -V, --version バージョン情報を表示して終了\n" -#: initdb.c:2386 +#: initdb.c:2334 #, c-format msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help このヘルプを表示し、終了します\n" +msgstr " -?, --help このヘルプを表示して終了\n" -#: initdb.c:2387 +#: initdb.c:2335 #, c-format msgid "" "\n" @@ -721,96 +647,78 @@ msgstr "" "\n" "データディレクトリが指定されない場合、PGDATA環境変数が使用されます。\n" -#: initdb.c:2389 +#: initdb.c:2337 #, c-format -#| msgid "" -#| "\n" -#| "Report bugs to .\n" msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"不具合はまで報告してください。\n" +"バグは<%s>に報告してください。\n" + +#: initdb.c:2338 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" -#: initdb.c:2417 +#: initdb.c:2366 #, c-format -#| msgid "%s: invalid authentication method \"%s\" for \"%s\" connections\n" msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "\"%2$s\"接続では認証方式\"%1$s\"は無効です" -#: initdb.c:2433 +#: initdb.c:2382 #, c-format -#| msgid "" -#| "%s: must specify a password for the superuser to enable %s " -#| "authentication\n" -msgid "must specify a password for the superuser to enable %s authentication" -msgstr "%s認証を有効にするためにスーパユーザのパスワードを指定してください" +msgid "must specify a password for the superuser to enable password authentication" +msgstr "パスワード認証を有効にするにはスーパユーザのパスワードを指定する必要があります" -#: initdb.c:2460 +#: initdb.c:2404 #, c-format -#| msgid "%s: no data directory specified\n" msgid "no data directory specified" msgstr "データディレクトリが指定されていません" -#: initdb.c:2462 +#: initdb.c:2406 #, c-format -#| msgid "" -#| "%s: no data directory specified\n" -#| "You must identify the directory where the data for this database system\n" -#| "will reside. Do this with either the invocation option -D or the\n" -#| "environment variable PGDATA.\n" msgid "" "You must identify the directory where the data for this database system\n" "will reside. Do this with either the invocation option -D or the\n" "environment variable PGDATA.\n" msgstr "" -"データベースシステムのデータを格納するディレクトリを指定する必要がありま" -"す。\n" +"データベースシステムのデータを格納するディレクトリを指定する必要があります。\n" "実行時オプション -D、もしくは、PGDATA環境変数で指定してください。\n" -#: initdb.c:2497 +#: initdb.c:2441 #, c-format -#| msgid "" -#| "The program \"postgres\" is needed by %s but was not found in the\n" -#| "same directory as \"%s\".\n" -#| "Check your installation.\n" msgid "" -"The program \"postgres\" is needed by %s but was not found in the\n" +"The program \"%s\" is needed by %s but was not found in the\n" "same directory as \"%s\".\n" "Check your installation." msgstr "" -"%sは\"postgres\"プログラムを必要としますが、\"%s\"と同じディレクトリに\n" -"ありませんでした。\n" -"インストール先を確認してください。" +"%2$sにはプログラム\"%1$s\"が必要ですが、\"%3$s\"と同じディレクトリ\n" +"にありませんでした。\n" +"インストール状況を確認してください。" -#: initdb.c:2502 +#: initdb.c:2446 #, c-format -#| msgid "" -#| "The program \"postgres\" was found by \"%s\"\n" -#| "but was not the same version as %s.\n" -#| "Check your installation.\n" msgid "" -"The program \"postgres\" was found by \"%s\"\n" +"The program \"%s\" was found by \"%s\"\n" "but was not the same version as %s.\n" "Check your installation." msgstr "" -"\"postgres\"プログラムは\"%s\"にありましたが、%sと同じバージョン\n" -"ではありませんでした。\n" -"インストール先を確認してください。" +"\"%2$s\"がプログラム\"%1$s\"を見つけましたが、これは%3$sと同じ\n" +"バージョンではありませんでした。\n" +"インストール状況を確認してください。" -#: initdb.c:2521 +#: initdb.c:2465 #, c-format -#| msgid "%s: input file location must be an absolute path\n" msgid "input file location must be an absolute path" msgstr "入力ファイルの場所は絶対パスでなければなりません" -#: initdb.c:2538 +#: initdb.c:2482 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "データベースクラスタはロケール\"%s\"で初期化されます。\n" -#: initdb.c:2541 +#: initdb.c:2485 #, c-format msgid "" "The database cluster will be initialized with locales\n" @@ -829,23 +737,22 @@ msgstr "" " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:2565 +#: initdb.c:2509 #, c-format -#| msgid "%s: could not find suitable encoding for locale \"%s\"\n" msgid "could not find suitable encoding for locale \"%s\"" msgstr "ロケール\"%s\"用に適切な符号化方式がありませんでした" -#: initdb.c:2567 +#: initdb.c:2511 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "-Eオプションを付けて%sを再実行してください。\n" -#: initdb.c:2568 initdb.c:3196 initdb.c:3217 +#: initdb.c:2512 initdb.c:3134 initdb.c:3155 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細は\"%s --help\"で確認してください。\n" -#: initdb.c:2581 +#: initdb.c:2525 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -855,13 +762,12 @@ msgstr "" "符号化方式として使用できません。\n" "デフォルトのデータベース符号化方式は代わりに\"%s\"に設定されます。\n" -#: initdb.c:2586 +#: initdb.c:2530 #, c-format -#| msgid "%s: locale \"%s\" requires unsupported encoding \"%s\"\n" msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "ロケール\"%s\"は非サポートの符号化方式\"%s\"を必要とします" -#: initdb.c:2589 +#: initdb.c:2533 #, c-format msgid "" "Encoding \"%s\" is not allowed as a server-side encoding.\n" @@ -870,67 +776,57 @@ msgstr "" "符号化方式\"%s\"はサーバ側の符号化方式として使用できません。\n" "別のロケールを選択して%sを再実行してください。\n" -#: initdb.c:2598 +#: initdb.c:2542 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" -msgstr "" -"デフォルトのデータベース符号化方式はそれに対応して%sに設定されました。\n" +msgstr "デフォルトのデータベース符号化方式はそれに対応して%sに設定されました。\n" -#: initdb.c:2666 +#: initdb.c:2604 #, c-format -msgid "" -"%s: could not find suitable text search configuration for locale \"%s\"\n" -msgstr "%s: ロケール\"%s\"用の適切なテキスト検索設定が見つかりません\n" +msgid "could not find suitable text search configuration for locale \"%s\"" +msgstr "ロケール\"%s\"用の適切なテキスト検索設定が見つかりませんでした" -#: initdb.c:2677 +#: initdb.c:2615 #, c-format -msgid "" -"%s: warning: suitable text search configuration for locale \"%s\" is " -"unknown\n" -msgstr "%s:警告:ロケール\"%s\"に適したテキスト検索設定が不明です。\n" +msgid "suitable text search configuration for locale \"%s\" is unknown" +msgstr "ロケール\"%s\"に適したテキスト検索設定が不明です" -#: initdb.c:2682 +#: initdb.c:2620 #, c-format -msgid "" -"%s: warning: specified text search configuration \"%s\" might not match " -"locale \"%s\"\n" -msgstr "" -"%s:警告:指定したテキスト検索設定\"%s\"がロケール\"%s\"に合わない可能性があり" -"ます\n" +msgid "specified text search configuration \"%s\" might not match locale \"%s\"" +msgstr "指定したテキスト検索設定\"%s\"がロケール\"%s\"に合わない可能性があります" -#: initdb.c:2687 +#: initdb.c:2625 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "デフォルトのテキスト検索構成は %s に設定されます。\n" -#: initdb.c:2731 initdb.c:2813 +#: initdb.c:2669 initdb.c:2751 #, c-format msgid "creating directory %s ... " msgstr "ディレクトリ%sを作成しています ... " -#: initdb.c:2737 initdb.c:2819 initdb.c:2884 initdb.c:2946 +#: initdb.c:2675 initdb.c:2757 initdb.c:2822 initdb.c:2884 #, c-format msgid "could not create directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を作成できませんでした: %m" -#: initdb.c:2748 initdb.c:2831 +#: initdb.c:2686 initdb.c:2769 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "ディレクトリ%sの権限を設定しています ... " -#: initdb.c:2754 initdb.c:2837 +#: initdb.c:2692 initdb.c:2775 #, c-format -#| msgid "%s: could not change permissions of directory \"%s\": %s\n" msgid "could not change permissions of directory \"%s\": %m" msgstr "ディレクトリ\"%s\"の権限を変更できませんでした: %m" -#: initdb.c:2768 initdb.c:2851 +#: initdb.c:2706 initdb.c:2789 #, c-format -#| msgid "%s: directory \"%s\" exists but is not empty\n" msgid "directory \"%s\" exists but is not empty" msgstr "ディレクトリ\"%s\"は存在しますが、空ではありません" -#: initdb.c:2773 +#: initdb.c:2711 #, c-format msgid "" "If you want to create a new database system, either remove or empty\n" @@ -941,124 +837,103 @@ msgstr "" "\"%s\"を削除するか空にしてください。\n" "または、%sを\"%s\"以外の引数で実行してください。\n" -#: initdb.c:2781 initdb.c:2863 initdb.c:3232 +#: initdb.c:2719 initdb.c:2801 initdb.c:3170 #, c-format msgid "could not access directory \"%s\": %m" msgstr "ディレクトリ\"%s\"にアクセスできませんでした: %m" -#: initdb.c:2804 +#: initdb.c:2742 #, c-format -#| msgid "%s: WAL directory location must be an absolute path\n" msgid "WAL directory location must be an absolute path" msgstr "WAL ディレクトリの位置は、絶対パスでなければなりません" -#: initdb.c:2856 +#: initdb.c:2794 #, c-format -#| msgid "" -#| "If you want to store the transaction log there, either\n" -#| "remove or empty the directory \"%s\".\n" msgid "" "If you want to store the WAL there, either remove or empty the directory\n" "\"%s\".\n" msgstr "" -"そこにトランザクションログを格納したい場合は、ディレクトリ\"%s\"を削除する" -"か\n" +"そこにトランザクションログを格納したい場合は、ディレクトリ\"%s\"を削除するか\n" "空にしてください。\n" -#: initdb.c:2870 +#: initdb.c:2808 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を作成できませんでした: %m" -#: initdb.c:2875 +#: initdb.c:2813 #, c-format -#| msgid "%s: symlinks are not supported on this platform" msgid "symlinks are not supported on this platform" msgstr "このプラットフォームでシンボリックリンクはサポートされていません" -#: initdb.c:2899 +#: initdb.c:2837 #, c-format -msgid "" -"It contains a dot-prefixed/invisible file, perhaps due to it being a mount " -"point.\n" -msgstr "" -"先頭がドットまたは不可視なファイルが含まれています。マウントポイントであるこ" -"とが原因かもしれません\n" +msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point.\n" +msgstr "先頭がドットまたは不可視なファイルが含まれています。マウントポイントであることが原因かもしれません\n" -#: initdb.c:2902 +#: initdb.c:2840 #, c-format -msgid "" -"It contains a lost+found directory, perhaps due to it being a mount point.\n" -msgstr "" -"lost+foundディレクトリが含まれています。マウントポイントであることが原因かも" -"しれません\n" +msgid "It contains a lost+found directory, perhaps due to it being a mount point.\n" +msgstr "lost+foundディレクトリが含まれています。マウントポイントであることが原因かもしれません\n" -#: initdb.c:2905 +#: initdb.c:2843 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" "Create a subdirectory under the mount point.\n" msgstr "" -"マウントポイントであるディレクトリをデータディレクトリとして使用することは勧" -"めません\n" +"マウントポイントであるディレクトリをデータディレクトリとして使用することは勧めません\n" "マウントポイントの下にサブディレクトリを作成してください\n" -#: initdb.c:2931 +#: initdb.c:2869 #, c-format msgid "creating subdirectories ... " msgstr "サブディレクトリを作成しています ... " -#: initdb.c:2977 +#: initdb.c:2915 msgid "performing post-bootstrap initialization ... " msgstr "ブートストラップ後の初期化を実行しています ... " -#: initdb.c:3134 +#: initdb.c:3072 #, c-format msgid "Running in debug mode.\n" msgstr "デバッグモードで実行しています。\n" -#: initdb.c:3138 +#: initdb.c:3076 #, c-format -#| msgid "Running in noclean mode. Mistakes will not be cleaned up.\n" msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "no-clean モードで実行しています。失敗した状況は削除されません。\n" -#: initdb.c:3215 +#: initdb.c:3153 #, c-format -#| msgid "%s: too many command-line arguments (first is \"%s\")\n" msgid "too many command-line arguments (first is \"%s\")" msgstr "コマンドライン引数が多すぎます。(先頭は\"%s\")" -#: initdb.c:3236 initdb.c:3325 +#: initdb.c:3174 initdb.c:3263 msgid "syncing data to disk ... " msgstr "データをディスクに同期しています ... " -#: initdb.c:3245 +#: initdb.c:3183 #, c-format -#| msgid "%s: password prompt and password file cannot be specified together\n" msgid "password prompt and password file cannot be specified together" msgstr "パスワードプロンプトとパスワードファイルは同時に指定できません" -#: initdb.c:3270 +#: initdb.c:3208 #, c-format -#| msgid "argument of %s must be a name" msgid "argument of --wal-segsize must be a number" msgstr "--wal-segsize の引数は数値でなければなりません" -#: initdb.c:3275 +#: initdb.c:3213 #, c-format msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024" msgstr "--wal-segsize のパラメータは1から1024の間の2の倍数でなければなりません" -#: initdb.c:3292 +#: initdb.c:3230 #, c-format -msgid "" -"superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" -msgstr "" -"スーパユーザ名\"%s\"は許可されません; ロール名は\"pg_\"で始めることはできま" -"せん" +msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" +msgstr "スーパユーザ名\"%s\"は許可されません; ロール名は\"pg_\"で始めることはできません" -#: initdb.c:3296 +#: initdb.c:3234 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -1069,17 +944,17 @@ msgstr "" "このユーザをサーバプロセスの所有者とする必要があります。\n" "\n" -#: initdb.c:3312 +#: initdb.c:3250 #, c-format msgid "Data page checksums are enabled.\n" msgstr "データページのチェックサムは有効です。\n" -#: initdb.c:3314 +#: initdb.c:3252 #, c-format msgid "Data page checksums are disabled.\n" msgstr "データベージのチェックサムは無効です。\n" -#: initdb.c:3331 +#: initdb.c:3269 #, c-format msgid "" "\n" @@ -1088,22 +963,15 @@ msgid "" msgstr "" "\n" "ディスクへの同期がスキップされました。\n" -"オペレーティングシステムがクラッシュした場合データディレクトリは破損されるか" -"もしれません。\n" +"オペレーティングシステムがクラッシュした場合データディレクトリは破損されるかもしれません。\n" -#: initdb.c:3336 +#: initdb.c:3274 #, c-format -#| msgid "%s: invalid authentication method \"%s\" for \"%s\" connections\n" msgid "enabling \"trust\" authentication for local connections" msgstr "ローカル接続に対して\"trust\"認証を有効にします " -#: initdb.c:3337 +#: initdb.c:3275 #, c-format -#| msgid "" -#| "\n" -#| "WARNING: enabling \"trust\" authentication for local connections\n" -#| "You can change this by editing pg_hba.conf or using the option -A, or\n" -#| "--auth-local and --auth-host, the next time you run initdb.\n" msgid "" "You can change this by editing pg_hba.conf or using the option -A, or\n" "--auth-local and --auth-host, the next time you run initdb.\n" @@ -1113,20 +981,12 @@ msgstr "" "ことがきます。\n" #. translator: This is a placeholder in a shell command. -#: initdb.c:3362 +#: initdb.c:3300 msgid "logfile" msgstr "ログファイル" -#: initdb.c:3364 +#: initdb.c:3302 #, c-format -#| msgid "" -#| "\n" -#| "Success. You can now start the database server using:\n" -#| "\n" -#| " %s%s%spostgres%s -D %s%s%s\n" -#| "or\n" -#| " %s%s%spg_ctl%s -D %s%s%s -l logfile start\n" -#| "\n" msgid "" "\n" "Success. You can now start the database server using:\n" @@ -1140,133 +1000,128 @@ msgstr "" " %s\n" "\n" -#~ msgid "%s: unrecognized authentication method \"%s\"\n" -#~ msgstr "%s: \"%s\"は未知の認証方式です\n" - -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "ディレクトリを\"%s\"に変更できませんでした" +#~ msgid "%s: could not open file \"%s\": %s\n" +#~ msgstr "%s: ファイル\"%s\"をオープンできませんでした: %s\n" -#~ msgid "%s: could not create symbolic link \"%s\": %s\n" -#~ msgstr "%s: シンボリックリンク\"%s\"を作成できませんでした: %s\n" +#~ msgid "%s: could not fsync file \"%s\": %s\n" +#~ msgstr "%s: ファイル\"%s\"をfsyncできませんでした: %s\n" -#~ msgid "%s: transaction log directory location must be an absolute path\n" -#~ msgstr "" -#~ "%s: トランザクションログのディレクトリの位置は、絶対パスでなければなりませ" -#~ "ん\n" +#~ msgid "%s: could not execute command \"%s\": %s\n" +#~ msgstr "%s: コマンド\"%s\"の実効に失敗しました: %s\n" -#~ msgid "%s: could not access directory \"%s\": %s\n" -#~ msgstr "%s: ディレクトリ\"%s\"にアクセスできませんでした: %s\n" +#~ msgid "%s: removing transaction log directory \"%s\"\n" +#~ msgstr "%s: トランザクションログディレクトリ\"%s\"を削除しています\n" -#~ msgid "" -#~ " -X, --xlogdir=XLOGDIR location for the transaction log directory\n" -#~ msgstr "" -#~ " -X, --xlogdir=XLOGDIR トランザクションログディレクトリの場所です\n" +#~ msgid "%s: failed to remove transaction log directory\n" +#~ msgstr "%s: トランザクションログディレクトリの削除に失敗しました\n" -#~ msgid "%s: could not to allocate SIDs: error code %lu\n" -#~ msgstr "%s: SIDを割り当てられませんでした: エラーコード %lu\n" +#~ msgid "%s: removing contents of transaction log directory \"%s\"\n" +#~ msgstr "%s: トランザクションログディレクトリ\"%s\"の内容を削除しています\n" -#~ msgid "%s: invalid locale name \"%s\"\n" -#~ msgstr "%s: ロケール名\"%s\"は無効です。\n" +#~ msgid "%s: failed to remove contents of transaction log directory\n" +#~ msgstr "%s: トランザクションログディレクトリの内容の削除に失敗しました\n" -#~ msgid "%s: failed to restore old locale \"%s\"\n" -#~ msgstr "%s:古いロケール\"%s\"を戻すことができませんでした。\n" +#~ msgid "%s: transaction log directory \"%s\" not removed at user's request\n" +#~ msgstr "%s: ユーザが要求したトランザクションログディレクトリ\"%s\"を削除しません\n" -#~ msgid "copying template1 to postgres ... " -#~ msgstr "template1からpostgresへコピーしています ... " +#~ msgid "%s: could not obtain information about current user: %s\n" +#~ msgstr "%s: 現在のユーザに関する情報を得ることができませんでした: %s\n" -#~ msgid "copying template1 to template0 ... " -#~ msgstr "template1からtemplate0へコピーしています ... " +#~ msgid "%s: could not get current user name: %s\n" +#~ msgstr "%s: 現在のユーザ名を得ることができませんでした: %s\n" -#~ msgid "vacuuming database template1 ... " -#~ msgstr "template1データベースをバキュームしています ... " +#~ msgid "%s: could not create directory \"%s\": %s\n" +#~ msgstr "%s: ディレクトリ\"%s\"を作成できませんでした。: %s\n" -#~ msgid "loading PL/pgSQL server-side language ... " -#~ msgstr "PL/pgSQL サーバサイド言語をロードしています ... " +#~ msgid "%s: file \"%s\" does not exist\n" +#~ msgstr "%s: ファイル\"%s\"がありません\n" -#~ msgid "creating information schema ... " -#~ msgstr "情報スキーマを作成しています ... " +#~ msgid "%s: could not access file \"%s\": %s\n" +#~ msgstr "%s: ファイル\"%s\"にアクセスできませんでした: %s\n" -#~ msgid "setting privileges on built-in objects ... " -#~ msgstr "組み込みオブジェクトに権限を設定しています ... " +#~ msgid "creating template1 database in %s/base/1 ... " +#~ msgstr "%s/base/1にtemplate1データベースを作成しています ... " -#~ msgid "creating dictionaries ... " -#~ msgstr "ディレクトリを作成しています ... " +#~ msgid "initializing pg_authid ... " +#~ msgstr "pg_authidを初期化しています ... " -#~ msgid "creating conversions ... " -#~ msgstr "変換を作成しています ... " +#~ msgid "setting password ... " +#~ msgstr "パスワードを設定しています ... " -#~ msgid "not supported on this platform\n" -#~ msgstr "このプラットフォームではサポートされません\n" +#~ msgid "initializing dependencies ... " +#~ msgstr "依存関係を初期化しています ... " -#~ msgid "Use the option \"--debug\" to see details.\n" -#~ msgstr "詳細を確認するためには\"--debug\"オプションを使用してください。\n" +#~ msgid "creating system views ... " +#~ msgstr "システムビューを作成しています ... " -#~ msgid "No usable system locales were found.\n" -#~ msgstr "使用できるシステムロケールが見つかりません\n" +#~ msgid "loading system objects' descriptions ... " +#~ msgstr "システムオブジェクトの定義をロードしています ... " -#~ msgid "%s: locale name has non-ASCII characters, skipped: \"%s\"\n" -#~ msgstr "%s: ロケール名に非ASCII文字がありますので飛ばします: \"%s\"\n" +#~ msgid "creating collations ... " +#~ msgstr "照合順序を作成しています ... " #~ msgid "%s: locale name too long, skipped: \"%s\"\n" #~ msgstr "%s: ロケール名が長過ぎますので飛ばします: \"%s\"\n" -#~ msgid "creating collations ... " -#~ msgstr "照合順序を作成しています ... " +#~ msgid "%s: locale name has non-ASCII characters, skipped: \"%s\"\n" +#~ msgstr "%s: ロケール名に非ASCII文字がありますので飛ばします: \"%s\"\n" -#~ msgid "loading system objects' descriptions ... " -#~ msgstr "システムオブジェクトの定義をロードしています ... " +#~ msgid "No usable system locales were found.\n" +#~ msgstr "使用できるシステムロケールが見つかりません\n" -#~ msgid "creating system views ... " -#~ msgstr "システムビューを作成しています ... " +#~ msgid "Use the option \"--debug\" to see details.\n" +#~ msgstr "詳細を確認するためには\"--debug\"オプションを使用してください。\n" -#~ msgid "initializing dependencies ... " -#~ msgstr "依存関係を初期化しています ... " +#~ msgid "not supported on this platform\n" +#~ msgstr "このプラットフォームではサポートされません\n" -#~ msgid "setting password ... " -#~ msgstr "パスワードを設定しています ... " +#~ msgid "creating conversions ... " +#~ msgstr "変換を作成しています ... " -#~ msgid "initializing pg_authid ... " -#~ msgstr "pg_authidを初期化しています ... " +#~ msgid "creating dictionaries ... " +#~ msgstr "ディレクトリを作成しています ... " -#~ msgid "creating template1 database in %s/base/1 ... " -#~ msgstr "%s/base/1にtemplate1データベースを作成しています ... " +#~ msgid "setting privileges on built-in objects ... " +#~ msgstr "組み込みオブジェクトに権限を設定しています ... " -#~ msgid "%s: could not access file \"%s\": %s\n" -#~ msgstr "%s: ファイル\"%s\"にアクセスできませんでした: %s\n" +#~ msgid "creating information schema ... " +#~ msgstr "情報スキーマを作成しています ... " -#~ msgid "%s: file \"%s\" does not exist\n" -#~ msgstr "%s: ファイル\"%s\"がありません\n" +#~ msgid "loading PL/pgSQL server-side language ... " +#~ msgstr "PL/pgSQL サーバサイド言語をロードしています ... " -#~ msgid "%s: could not create directory \"%s\": %s\n" -#~ msgstr "%s: ディレクトリ\"%s\"を作成できませんでした。: %s\n" +#~ msgid "vacuuming database template1 ... " +#~ msgstr "template1データベースをバキュームしています ... " -#~ msgid "%s: could not get current user name: %s\n" -#~ msgstr "%s: 現在のユーザ名を得ることができませんでした: %s\n" +#~ msgid "copying template1 to template0 ... " +#~ msgstr "template1からtemplate0へコピーしています ... " -#~ msgid "%s: could not obtain information about current user: %s\n" -#~ msgstr "%s: 現在のユーザに関する情報を得ることができませんでした: %s\n" +#~ msgid "copying template1 to postgres ... " +#~ msgstr "template1からpostgresへコピーしています ... " -#~ msgid "%s: transaction log directory \"%s\" not removed at user's request\n" -#~ msgstr "" -#~ "%s: ユーザが要求したトランザクションログディレクトリ\"%s\"を削除しません\n" +#~ msgid "%s: failed to restore old locale \"%s\"\n" +#~ msgstr "%s:古いロケール\"%s\"を戻すことができませんでした。\n" -#~ msgid "%s: failed to remove contents of transaction log directory\n" -#~ msgstr "%s: トランザクションログディレクトリの内容の削除に失敗しました\n" +#~ msgid "%s: invalid locale name \"%s\"\n" +#~ msgstr "%s: ロケール名\"%s\"は無効です。\n" -#~ msgid "%s: removing contents of transaction log directory \"%s\"\n" -#~ msgstr "%s: トランザクションログディレクトリ\"%s\"の内容を削除しています\n" +#~ msgid "%s: could not to allocate SIDs: error code %lu\n" +#~ msgstr "%s: SIDを割り当てられませんでした: エラーコード %lu\n" -#~ msgid "%s: failed to remove transaction log directory\n" -#~ msgstr "%s: トランザクションログディレクトリの削除に失敗しました\n" +#~ msgid " -X, --xlogdir=XLOGDIR location for the transaction log directory\n" +#~ msgstr " -X, --xlogdir=XLOGDIR トランザクションログディレクトリの場所です\n" -#~ msgid "%s: removing transaction log directory \"%s\"\n" -#~ msgstr "%s: トランザクションログディレクトリ\"%s\"を削除しています\n" +#~ msgid "%s: could not access directory \"%s\": %s\n" +#~ msgstr "%s: ディレクトリ\"%s\"にアクセスできませんでした: %s\n" -#~ msgid "%s: could not execute command \"%s\": %s\n" -#~ msgstr "%s: コマンド\"%s\"の実効に失敗しました: %s\n" +#~ msgid "%s: transaction log directory location must be an absolute path\n" +#~ msgstr "%s: トランザクションログのディレクトリの位置は、絶対パスでなければなりません\n" -#~ msgid "%s: could not fsync file \"%s\": %s\n" -#~ msgstr "%s: ファイル\"%s\"をfsyncできませんでした: %s\n" +#~ msgid "%s: could not create symbolic link \"%s\": %s\n" +#~ msgstr "%s: シンボリックリンク\"%s\"を作成できませんでした: %s\n" -#~ msgid "%s: could not open file \"%s\": %s\n" -#~ msgstr "%s: ファイル\"%s\"をオープンできませんでした: %s\n" +#~ msgid "could not change directory to \"%s\"" +#~ msgstr "ディレクトリを\"%s\"に変更できませんでした" + +#~ msgid "%s: unrecognized authentication method \"%s\"\n" +#~ msgstr "%s: \"%s\"は未知の認証方式です\n" diff --git a/src/bin/initdb/po/ko.po b/src/bin/initdb/po/ko.po index 822c286c3b358..72f9db7f21e39 100644 --- a/src/bin/initdb/po/ko.po +++ b/src/bin/initdb/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: initdb (PostgreSQL) 12\n" +"Project-Id-Version: initdb (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:15+0000\n" -"PO-Revision-Date: 2019-10-31 11:09+0900\n" +"POT-Creation-Date: 2020-10-05 01:16+0000\n" +"PO-Revision-Date: 2020-10-05 17:52+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean \n" "Language: ko\n" @@ -15,100 +15,100 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "심각: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "오류: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "경고: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "현재 디렉터리를 알 수 없음: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "\"%s\" 파일은 잘못된 바이너리 파일입니다" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "\"%s\" 바이너리 파일을 읽을 수 없음" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "\"%s\" 실행 파일을 찾을 수 없음" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "\"%s\" 이름의 디렉터리로 이동할 수 없습니다: %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "\"%s\" 심볼릭 링크 파일을 읽을 수 없음: %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "pclose 실패: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 -#: initdb.c:339 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: initdb.c:325 #, c-format msgid "out of memory" msgstr "메모리 부족" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "메모리 부족\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "null 포인터를 중복할 수 없음 (내부 오류)\n" -#: ../../common/file_utils.c:81 ../../common/file_utils.c:183 +#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 #, c-format msgid "could not stat file \"%s\": %m" msgstr "\"%s\" 파일의 상태값을 알 수 없음: %m" -#: ../../common/file_utils.c:160 ../../common/pgfnames.c:48 +#: ../../common/file_utils.c:158 ../../common/pgfnames.c:48 #, c-format msgid "could not open directory \"%s\": %m" msgstr "\"%s\" 디렉터리 열 수 없음: %m" -#: ../../common/file_utils.c:194 ../../common/pgfnames.c:69 +#: ../../common/file_utils.c:192 ../../common/pgfnames.c:69 #, c-format msgid "could not read directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 읽을 수 없음: %m" -#: ../../common/file_utils.c:226 ../../common/file_utils.c:285 -#: ../../common/file_utils.c:359 +#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 +#: ../../common/file_utils.c:357 #, c-format msgid "could not open file \"%s\": %m" msgstr "\"%s\" 파일을 열 수 없음: %m" -#: ../../common/file_utils.c:297 ../../common/file_utils.c:367 +#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "\"%s\" 파일 fsync 실패: %m" -#: ../../common/file_utils.c:377 +#: ../../common/file_utils.c:375 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m" @@ -118,37 +118,42 @@ msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m" msgid "could not close directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 닫을 수 없음: %m" -#: ../../common/restricted_token.c:69 +#: ../../common/restricted_token.c:64 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "이 운영체제에서 restricted token을 만들 수 없음" +msgid "could not load library \"%s\": error code %lu" +msgstr "\"%s\" 라이브러리를 불러 올 수 없음: 오류 코드 %lu" -#: ../../common/restricted_token.c:78 +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "이 운영체제에서 restricted token을 만들 수 없음: 오류 코드 %lu" + +#: ../../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "프로세스 토큰을 열 수 없음: 오류 코드 %lu" -#: ../../common/restricted_token.c:91 +#: ../../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "SID를 할당할 수 없음: 오류 코드 %lu" -#: ../../common/restricted_token.c:110 +#: ../../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "제한된 토큰을 만들 수 없음: 오류 코드 %lu" -#: ../../common/restricted_token.c:131 +#: ../../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "\"%s\" 명령용 프로세스를 시작할 수 없음: 오류 코드 %lu" -#: ../../common/restricted_token.c:169 +#: ../../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "제한된 토큰으로 재실행할 수 없음: 오류 코드 %lu" -#: ../../common/restricted_token.c:185 +#: ../../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "하위 프로세스의 종료 코드를 구할 수 없음: 오류 코드 %lu" @@ -217,82 +222,82 @@ msgstr "\"%s\" 파일의 연결을 설정할 수 없음: %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "\"%s\" 파일의 정션을 구할 수 없음: %s\n" -#: initdb.c:495 initdb.c:1534 +#: initdb.c:481 initdb.c:1505 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "\"%s\" 파일 일기 모드로 열기 실패: %m" -#: initdb.c:550 initdb.c:858 initdb.c:884 +#: initdb.c:536 initdb.c:846 initdb.c:872 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "\"%s\" 파일 열기 실패: %m" -#: initdb.c:557 initdb.c:564 initdb.c:864 initdb.c:889 +#: initdb.c:543 initdb.c:550 initdb.c:852 initdb.c:877 #, c-format msgid "could not write file \"%s\": %m" msgstr "\"%s\" 파일 쓰기 실패: %m" -#: initdb.c:582 +#: initdb.c:568 #, c-format msgid "could not execute command \"%s\": %m" msgstr "\"%s\" 명령을 실행할 수 없음: %m" -#: initdb.c:600 +#: initdb.c:586 #, c-format msgid "removing data directory \"%s\"" msgstr "\"%s\" 데이터 디렉터리를 지우는 중" -#: initdb.c:602 +#: initdb.c:588 #, c-format msgid "failed to remove data directory" msgstr "데이터 디렉터리를 지우는데 실패" -#: initdb.c:606 +#: initdb.c:592 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "\"%s\" 데이터 디렉터리 안의 내용을 지우는 중" -#: initdb.c:609 +#: initdb.c:595 #, c-format msgid "failed to remove contents of data directory" msgstr "데이터 디렉터리 내용을 지우는데 실패" -#: initdb.c:614 +#: initdb.c:600 #, c-format msgid "removing WAL directory \"%s\"" msgstr "\"%s\" WAL 디렉터리를 지우는 중" -#: initdb.c:616 +#: initdb.c:602 #, c-format msgid "failed to remove WAL directory" msgstr "WAL 디렉터리를 지우는데 실패" -#: initdb.c:620 +#: initdb.c:606 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "\"%s\" WAL 디렉터리 안의 내용을 지우는 중" -#: initdb.c:622 +#: initdb.c:608 #, c-format msgid "failed to remove contents of WAL directory" msgstr "WAL 디렉터리 내용을 지우는데 실패" -#: initdb.c:629 +#: initdb.c:615 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "\"%s\" 데이터 디렉터리가 사용자의 요청으로 삭제되지 않았음" -#: initdb.c:633 +#: initdb.c:619 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "\"%s\" WAL 디렉터리가 사용자의 요청으로 삭제되지 않았음" -#: initdb.c:651 +#: initdb.c:637 #, c-format msgid "cannot be run as root" msgstr "root 권한으로 실행할 수 없음" -#: initdb.c:653 +#: initdb.c:639 #, c-format msgid "" "Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" @@ -301,17 +306,17 @@ msgstr "" "시스템관리자 권한이 없는, 서버프로세스의 소유주가 될 일반 사용자로\n" "로그인 해서(\"su\" 같은 명령 이용) 실행하십시오.\n" -#: initdb.c:686 +#: initdb.c:672 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "\"%s\" 인코딩은 서버 인코딩 이름을 사용할 수 없음" -#: initdb.c:817 +#: initdb.c:805 #, c-format msgid "file \"%s\" does not exist" msgstr "\"%s\" 파일 없음" -#: initdb.c:819 initdb.c:826 initdb.c:835 +#: initdb.c:807 initdb.c:814 initdb.c:823 #, c-format msgid "" "This might mean you have a corrupted installation or identified\n" @@ -320,127 +325,127 @@ msgstr "" "설치가 잘못되었거나 –L 호출 옵션으로 식별한 디렉터리가\n" "잘못되었을 수 있습니다.\n" -#: initdb.c:824 +#: initdb.c:812 #, c-format msgid "could not access file \"%s\": %m" msgstr "\"%s\" 파일에 액세스할 수 없음: %m" -#: initdb.c:833 +#: initdb.c:821 #, c-format msgid "file \"%s\" is not a regular file" msgstr "\"%s\" 파일은 일반 파일이 아님" -#: initdb.c:978 +#: initdb.c:966 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "사용할 동적 공유 메모리 관리방식을 선택하는 중 ... " -#: initdb.c:987 +#: initdb.c:975 #, c-format msgid "selecting default max_connections ... " msgstr "max_connections 초기값을 선택하는 중 ..." -#: initdb.c:1018 +#: initdb.c:1006 #, c-format msgid "selecting default shared_buffers ... " msgstr "기본 shared_buffers를 선택하는 중... " -#: initdb.c:1052 +#: initdb.c:1040 #, c-format msgid "selecting default time zone ... " msgstr "기본 지역 시간대를 선택 중 ... " -#: initdb.c:1086 +#: initdb.c:1074 msgid "creating configuration files ... " msgstr "환경설정 파일을 만드는 중 ..." -#: initdb.c:1239 initdb.c:1258 initdb.c:1344 initdb.c:1359 +#: initdb.c:1227 initdb.c:1246 initdb.c:1332 initdb.c:1347 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "\"%s\" 접근 권한을 바꿀 수 없음: %m" -#: initdb.c:1381 +#: initdb.c:1369 #, c-format msgid "running bootstrap script ... " msgstr "부트스트랩 스크립트 실행 중 ... " -#: initdb.c:1393 +#: initdb.c:1381 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "\"%s\" 입력 파일이 PostgreSQL %s 용이 아님" -#: initdb.c:1396 +#: initdb.c:1384 #, c-format msgid "" "Check your installation or specify the correct path using the option -L.\n" msgstr "설치상태를 확인해 보고, -L 옵션으로 바른 경로를 지정하십시오.\n" -#: initdb.c:1511 +#: initdb.c:1482 msgid "Enter new superuser password: " msgstr "새 superuser 암호를 입력하십시오:" -#: initdb.c:1512 +#: initdb.c:1483 msgid "Enter it again: " msgstr "암호 확인:" -#: initdb.c:1515 +#: initdb.c:1486 #, c-format msgid "Passwords didn't match.\n" msgstr "암호가 서로 틀립니다.\n" -#: initdb.c:1541 +#: initdb.c:1512 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "\"%s\" 파일에서 암호를 읽을 수 없음: %m" -#: initdb.c:1544 +#: initdb.c:1515 #, c-format msgid "password file \"%s\" is empty" msgstr "\"%s\" 패스워드 파일이 비어있음" -#: initdb.c:2107 +#: initdb.c:2043 #, c-format msgid "caught signal\n" msgstr "시스템의 간섭 신호(signal) 받았음\n" -#: initdb.c:2113 +#: initdb.c:2049 #, c-format msgid "could not write to child process: %s\n" msgstr "하위 프로세스에 쓸 수 없음: %s\n" -#: initdb.c:2121 +#: initdb.c:2057 #, c-format msgid "ok\n" msgstr "완료\n" # # search5 끝 # # advance 부분 -#: initdb.c:2211 +#: initdb.c:2147 #, c-format msgid "setlocale() failed" msgstr "setlocale() 실패" -#: initdb.c:2232 +#: initdb.c:2168 #, c-format msgid "failed to restore old locale \"%s\"" msgstr "\"%s\" 옛 로케일을 복원할 수 없음" -#: initdb.c:2241 +#: initdb.c:2177 #, c-format msgid "invalid locale name \"%s\"" msgstr "\"%s\" 로케일 이름이 잘못됨" -#: initdb.c:2252 +#: initdb.c:2188 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "잘못된 로케일 설정; LANG 또는 LC_* OS 환경 변수를 확인하세요" -#: initdb.c:2279 +#: initdb.c:2215 #, c-format msgid "encoding mismatch" msgstr "인코딩 불일치" -#: initdb.c:2281 +#: initdb.c:2217 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the\n" @@ -455,7 +460,7 @@ msgstr "" "%s을(를) 다시 실행하고 인코딩을 명시적으로 지정하지 않거나\n" "일치하는 조합을 선택하십시오.\n" -#: initdb.c:2353 +#: initdb.c:2289 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -464,17 +469,17 @@ msgstr "" "%s PostgreSQL 데이터베이스 클러스터를 초기화 하는 프로그램.\n" "\n" -#: initdb.c:2354 +#: initdb.c:2290 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: initdb.c:2355 +#: initdb.c:2291 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [옵션]... [DATADIR]\n" -#: initdb.c:2356 +#: initdb.c:2292 #, c-format msgid "" "\n" @@ -483,50 +488,50 @@ msgstr "" "\n" "옵션들:\n" -#: initdb.c:2357 +#: initdb.c:2293 #, c-format msgid "" " -A, --auth=METHOD default authentication method for local " "connections\n" msgstr " -A, --auth=METHOD 로컬 연결의 기본 인증 방법\n" -#: initdb.c:2358 +#: initdb.c:2294 #, c-format msgid "" " --auth-host=METHOD default authentication method for local TCP/IP " "connections\n" msgstr " --auth-host=METHOD local TCP/IP 연결에 대한 기본 인증 방법\n" -#: initdb.c:2359 +#: initdb.c:2295 #, c-format msgid "" " --auth-local=METHOD default authentication method for local-socket " "connections\n" msgstr " --auth-local=METHOD local-socket 연결에 대한 기본 인증 방법\n" -#: initdb.c:2360 +#: initdb.c:2296 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]DATADIR 새 데이터베이스 클러스터를 만들 디렉터리\n" -#: initdb.c:2361 +#: initdb.c:2297 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=ENCODING 새 데이터베이스의 기본 인코딩\n" -#: initdb.c:2362 +#: initdb.c:2298 #, c-format msgid "" " -g, --allow-group-access allow group read/execute on data directory\n" msgstr "" " -g, --allow-group-access 데이터 디렉터리를 그룹이 읽고 접근할 있게 함\n" -#: initdb.c:2363 +#: initdb.c:2299 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=LOCALE 새 데이터베이스의 기본 로케일 설정\n" -#: initdb.c:2364 +#: initdb.c:2300 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -540,18 +545,18 @@ msgstr "" " 새 데이터베이스의 각 범주에 기본 로케일 설정\n" " (환경에서 가져온 기본 값)\n" -#: initdb.c:2368 +#: initdb.c:2304 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale -locale=C와 같음\n" -#: initdb.c:2369 +#: initdb.c:2305 #, c-format msgid "" " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=FILE 파일에서 새 superuser의 암호 읽기\n" -#: initdb.c:2370 +#: initdb.c:2306 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -560,29 +565,29 @@ msgstr "" " -T, --text-search-config=CFG\n" " 기본 텍스트 검색 구성\n" -#: initdb.c:2372 +#: initdb.c:2308 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=NAME 데이터베이스 superuser 이름\n" -#: initdb.c:2373 +#: initdb.c:2309 #, c-format msgid "" " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt 새 superuser 암호를 입력 받음\n" -#: initdb.c:2374 +#: initdb.c:2310 #, c-format msgid "" " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALDIR 트랜잭션 로그 디렉터리 위치\n" -#: initdb.c:2375 +#: initdb.c:2311 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=SIZE WAL 조각 파일 크기, MB단위\n" -#: initdb.c:2376 +#: initdb.c:2312 #, c-format msgid "" "\n" @@ -591,27 +596,27 @@ msgstr "" "\n" "덜 일반적으로 사용되는 옵션들:\n" -#: initdb.c:2377 +#: initdb.c:2313 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug 디버깅에 필요한 정보들도 함께 출력함\n" -#: initdb.c:2378 +#: initdb.c:2314 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums 자료 페이지 체크섬 사용\n" -#: initdb.c:2379 +#: initdb.c:2315 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L DIRECTORY 입력파일들이 있는 디렉터리\n" -#: initdb.c:2380 +#: initdb.c:2316 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean 오류가 발생되었을 경우 그대로 둠\n" -#: initdb.c:2381 +#: initdb.c:2317 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written safely to " @@ -619,17 +624,17 @@ msgid "" msgstr "" " -N, --no-sync 작업 완료 뒤 디스크 동기화 작업을 하지 않음\n" -#: initdb.c:2382 +#: initdb.c:2318 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, --show 내부 설정값들을 보여줌\n" -#: initdb.c:2383 +#: initdb.c:2319 #, c-format msgid " -S, --sync-only only sync data directory\n" msgstr " -S, --sync-only 데이터 디렉터리만 동기화\n" -#: initdb.c:2384 +#: initdb.c:2320 #, c-format msgid "" "\n" @@ -638,17 +643,17 @@ msgstr "" "\n" "기타 옵션:\n" -#: initdb.c:2385 +#: initdb.c:2321 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: initdb.c:2386 +#: initdb.c:2322 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: initdb.c:2387 +#: initdb.c:2323 #, c-format msgid "" "\n" @@ -658,31 +663,36 @@ msgstr "" "\n" "데이터 디렉터리를 지정하지 않으면, PGDATA 환경 변수값을 사용합니다.\n" -#: initdb.c:2389 +#: initdb.c:2325 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"오류보고: .\n" +"문제점 보고 주소: <%s>\n" + +#: initdb.c:2326 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" -#: initdb.c:2417 +#: initdb.c:2354 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "\"%s\" 인증 방법은 \"%s\" 연결에서는 사용할 수 없음" -#: initdb.c:2433 +#: initdb.c:2370 #, c-format msgid "must specify a password for the superuser to enable %s authentication" msgstr "%s 인증방식을 사용하려면, 반드시 superuser의 암호를 지정해야함" -#: initdb.c:2460 +#: initdb.c:2397 #, c-format msgid "no data directory specified" msgstr "데이터 디렉터리를 지정하지 않았음" -#: initdb.c:2462 +#: initdb.c:2399 #, c-format msgid "" "You must identify the directory where the data for this database system\n" @@ -693,39 +703,39 @@ msgstr "" "지정하는 방법은 -D 옵션의 값이나, PGDATA 환경 변수값으로 지정해 주면 됩니" "다.\n" -#: initdb.c:2497 +#: initdb.c:2434 #, c-format msgid "" -"The program \"postgres\" is needed by %s but was not found in the\n" +"The program \"%s\" is needed by %s but was not found in the\n" "same directory as \"%s\".\n" "Check your installation." msgstr "" -"%s 프로그램은 \"postgres\" 프로그램을 필요로 합니다. 그런데, 이 파일이\n" +"\"%s\" 프로그램이 %s 작업에서 필요합니다. 그런데, 이 파일이\n" "\"%s\" 파일이 있는 디렉터리안에 없습니다.\n" "설치 상태를 확인해 주십시오." -#: initdb.c:2502 +#: initdb.c:2439 #, c-format msgid "" -"The program \"postgres\" was found by \"%s\"\n" +"The program \"%s\" was found by \"%s\"\n" "but was not the same version as %s.\n" "Check your installation." msgstr "" -"\"%s\" 프로그램은 \"postgres\" 프로그램을 찾았지만 이 파일은\n" +"\"%s\" 프로그램을 \"%s\" 작업 때문에 찾았지만 이 파일은\n" "%s 프로그램의 버전과 다릅니다.\n" "설치 상태를 확인해 주십시오." -#: initdb.c:2521 +#: initdb.c:2458 #, c-format msgid "input file location must be an absolute path" msgstr "입력 파일 위치는 반드시 절대경로여야함" -#: initdb.c:2538 +#: initdb.c:2475 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "데이터베이스 클러스터는 \"%s\" 로케일으로 초기화될 것입니다.\n" -#: initdb.c:2541 +#: initdb.c:2478 #, c-format msgid "" "The database cluster will be initialized with locales\n" @@ -744,22 +754,22 @@ msgstr "" " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:2565 +#: initdb.c:2502 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "\"%s\" 로케일에 알맞은 인코딩을 찾을 수 없음" -#: initdb.c:2567 +#: initdb.c:2504 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "-E 옵션으로 %s 지정해 주십시오.\n" -#: initdb.c:2568 initdb.c:3196 initdb.c:3217 +#: initdb.c:2505 initdb.c:3127 initdb.c:3148 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "보다 자세한 정보를 보려면 \"%s --help\" 옵션을 사용하십시오.\n" -#: initdb.c:2581 +#: initdb.c:2518 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -768,12 +778,12 @@ msgstr "" "\"%s\" 인코딩을 서버측 인코딩으로 사용할 수 없습니다.\n" "기본 데이터베이스는 \"%s\" 인코딩으로 지정됩니다.\n" -#: initdb.c:2586 +#: initdb.c:2523 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "\"%s\" 로케일은 지원하지 않는 \"%s\" 인코딩을 필요로 함" -#: initdb.c:2589 +#: initdb.c:2526 #, c-format msgid "" "Encoding \"%s\" is not allowed as a server-side encoding.\n" @@ -782,58 +792,58 @@ msgstr "" "\"%s\" 인코딩을 서버측 인코딩으로 사용할 수 없습니다.\n" "다른 로케일을 선택하고 %s을(를) 다시 실행하십시오.\n" -#: initdb.c:2598 +#: initdb.c:2535 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "기본 데이터베이스 인코딩은 \"%s\" 인코딩으로 설정되었습니다.\n" -#: initdb.c:2666 +#: initdb.c:2597 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "\"%s\" 로케일에 알맞은 전문검색 설정을 찾을 수 없음" -#: initdb.c:2677 +#: initdb.c:2608 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "\"%s\" 로케일에 알맞은 전문검색 설정을 알 수 없음" -#: initdb.c:2682 +#: initdb.c:2613 #, c-format msgid "" "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "지정한 \"%s\" 전문검색 설정은 \"%s\" 로케일과 일치하지 않음" -#: initdb.c:2687 +#: initdb.c:2618 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "기본 텍스트 검색 구성이 \"%s\"(으)로 설정됩니다.\n" -#: initdb.c:2731 initdb.c:2813 +#: initdb.c:2662 initdb.c:2744 #, c-format msgid "creating directory %s ... " msgstr "%s 디렉터리 만드는 중 ..." -#: initdb.c:2737 initdb.c:2819 initdb.c:2884 initdb.c:2946 +#: initdb.c:2668 initdb.c:2750 initdb.c:2815 initdb.c:2877 #, c-format msgid "could not create directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 만들 수 없음: %m" -#: initdb.c:2748 initdb.c:2831 +#: initdb.c:2679 initdb.c:2762 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "이미 있는 %s 디렉터리의 액세스 권한을 고치는 중 ..." -#: initdb.c:2754 initdb.c:2837 +#: initdb.c:2685 initdb.c:2768 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "\"%s\" 디렉터리의 액세스 권한을 바꿀 수 없습니다: %m" -#: initdb.c:2768 initdb.c:2851 +#: initdb.c:2699 initdb.c:2782 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "\"%s\" 디렉터리가 있지만 비어 있지 않음" -#: initdb.c:2773 +#: initdb.c:2704 #, c-format msgid "" "If you want to create a new database system, either remove or empty\n" @@ -844,17 +854,17 @@ msgstr "" "\"%s\" 디렉터리를 제거하거나 비우십시오. 또는 %s을(를)\n" "\"%s\" 이외의 인수를 사용하여 실행하십시오.\n" -#: initdb.c:2781 initdb.c:2863 initdb.c:3232 +#: initdb.c:2712 initdb.c:2794 initdb.c:3163 #, c-format msgid "could not access directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 액세스할 수 없습니다: %m" -#: initdb.c:2804 +#: initdb.c:2735 #, c-format msgid "WAL directory location must be an absolute path" msgstr "WAL 디렉터리 위치는 절대 경로여야 함" -#: initdb.c:2856 +#: initdb.c:2787 #, c-format msgid "" "If you want to store the WAL there, either remove or empty the directory\n" @@ -863,17 +873,17 @@ msgstr "" "트랜잭션 로그를 해당 위치에 저장하려면\n" "\"%s\" 디렉터리를 제거하거나 비우십시오.\n" -#: initdb.c:2870 +#: initdb.c:2801 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "\"%s\" 심벌릭 링크를 만들 수 없음: %m" -#: initdb.c:2875 +#: initdb.c:2806 #, c-format msgid "symlinks are not supported on this platform" msgstr "이 플랫폼에서는 심볼 링크가 지원되지 않음" -#: initdb.c:2899 +#: initdb.c:2830 #, c-format msgid "" "It contains a dot-prefixed/invisible file, perhaps due to it being a mount " @@ -882,13 +892,13 @@ msgstr "" "점(.)으로 시작하는 숨은 파일이 포함되어 있습니다. 마운트 최상위 디렉터리 같습" "니다.\n" -#: initdb.c:2902 +#: initdb.c:2833 #, c-format msgid "" "It contains a lost+found directory, perhaps due to it being a mount point.\n" msgstr "lost-found 디렉터리가 있습니다. 마운트 최상위 디렉터리 같습니다.\n" -#: initdb.c:2905 +#: initdb.c:2836 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -897,51 +907,51 @@ msgstr "" "마운트 최상위 디렉터리를 데이터 디렉터리로 사용하는 것은 권장하지 않습니다.\n" "하위 디렉터리를 만들어서 그것을 데이터 디렉터리로 사용하세요.\n" -#: initdb.c:2931 +#: initdb.c:2862 #, c-format msgid "creating subdirectories ... " msgstr "하위 디렉터리 만드는 중 ..." -#: initdb.c:2977 +#: initdb.c:2908 msgid "performing post-bootstrap initialization ... " msgstr "부트스트랩 다음 초기화 작업 중 ... " -#: initdb.c:3134 +#: initdb.c:3065 #, c-format msgid "Running in debug mode.\n" msgstr "디버그 모드로 실행 중.\n" -#: initdb.c:3138 +#: initdb.c:3069 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "지저분 모드로 실행 중. 오류가 발생되어도 뒷정리를 안합니다.\n" -#: initdb.c:3215 +#: initdb.c:3146 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "너무 많은 명령행 인자를 지정했습니다. (처음 \"%s\")" -#: initdb.c:3236 initdb.c:3325 +#: initdb.c:3167 initdb.c:3256 msgid "syncing data to disk ... " msgstr "자료를 디스크에 동기화 하는 중 ... " -#: initdb.c:3245 +#: initdb.c:3176 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "" "암호를 입력받는 옵션과 암호를 파일에서 가져오는 옵션은 동시에 사용될 수 없음" -#: initdb.c:3270 +#: initdb.c:3201 #, c-format msgid "argument of --wal-segsize must be a number" msgstr "--wal-segsize 옵션 값은 숫자여야 함" -#: initdb.c:3275 +#: initdb.c:3206 #, c-format msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024" msgstr "--wal-segsize 옵션값은 1에서 1024사이 2^n 값이여야 함" -#: initdb.c:3292 +#: initdb.c:3223 #, c-format msgid "" "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" @@ -949,7 +959,7 @@ msgstr "" "\"%s\" 사용자는 슈퍼유저 이름으로 쓸 수 없습니다. \"pg_\"로 시작하는롤 이름" "은 허용하지 않음" -#: initdb.c:3296 +#: initdb.c:3227 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -960,17 +970,17 @@ msgstr "" "지정될 것입니다. 또한 이 사용자는 서버 프로세스의 소유주가 됩니다.\n" "\n" -#: initdb.c:3312 +#: initdb.c:3243 #, c-format msgid "Data page checksums are enabled.\n" msgstr "자료 페이지 체크섬 기능 사용함.\n" -#: initdb.c:3314 +#: initdb.c:3245 #, c-format msgid "Data page checksums are disabled.\n" msgstr "자료 페이지 체크섬 기능 사용 하지 않음\n" -#: initdb.c:3331 +#: initdb.c:3262 #, c-format msgid "" "\n" @@ -982,12 +992,12 @@ msgstr "" "이 상태에서 OS가 갑자기 중지 되면 데이터 디렉토리 안에 있는 자료가 깨질 수 있" "습니다.\n" -#: initdb.c:3336 +#: initdb.c:3267 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "로컬 접속용 \"trust\" 인증을 설정 함" -#: initdb.c:3337 +#: initdb.c:3268 #, c-format msgid "" "You can change this by editing pg_hba.conf or using the option -A, or\n" @@ -998,11 +1008,11 @@ msgstr "" "--auth-host 옵션을 사용해서 인증 방법을 지정할 수 있습니다.\n" #. translator: This is a placeholder in a shell command. -#: initdb.c:3362 +#: initdb.c:3293 msgid "logfile" msgstr "로그파일" -#: initdb.c:3364 +#: initdb.c:3295 #, c-format msgid "" "\n" diff --git a/src/bin/initdb/po/ru.po b/src/bin/initdb/po/ru.po index 95098bceddff2..0cfc218c9eb5d 100644 --- a/src/bin/initdb/po/ru.po +++ b/src/bin/initdb/po/ru.po @@ -6,13 +6,13 @@ # Sergey Burladyan , 2009. # Andrey Sudnik , 2010. # Dmitriy Olshevskiy , 2014. -# Alexander Lakhin , 2012-2017, 2018, 2019. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: initdb (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-09 12:21+0300\n" -"PO-Revision-Date: 2019-09-02 12:06+0300\n" +"POT-Creation-Date: 2020-09-03 11:22+0300\n" +"PO-Revision-Date: 2020-10-29 15:03+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -22,100 +22,100 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "важно: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "ошибка: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "предупреждение: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "не удалось определить текущий каталог: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "неверный исполняемый файл \"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "не удалось прочитать исполняемый файл \"%s\"" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "не удалось найти запускаемый файл \"%s\"" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "не удалось перейти в каталог \"%s\": %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "не удалось прочитать символическую ссылку \"%s\": %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "ошибка pclose: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 -#: initdb.c:339 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: initdb.c:325 #, c-format msgid "out of memory" msgstr "нехватка памяти" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" -#: ../../common/file_utils.c:81 ../../common/file_utils.c:183 +#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не удалось получить информацию о файле \"%s\": %m" -#: ../../common/file_utils.c:160 ../../common/pgfnames.c:48 +#: ../../common/file_utils.c:158 ../../common/pgfnames.c:48 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не удалось открыть каталог \"%s\": %m" -#: ../../common/file_utils.c:194 ../../common/pgfnames.c:69 +#: ../../common/file_utils.c:192 ../../common/pgfnames.c:69 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не удалось прочитать каталог \"%s\": %m" -#: ../../common/file_utils.c:226 ../../common/file_utils.c:285 -#: ../../common/file_utils.c:359 +#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 +#: ../../common/file_utils.c:357 #, c-format msgid "could not open file \"%s\": %m" msgstr "не удалось открыть файл \"%s\": %m" -#: ../../common/file_utils.c:297 ../../common/file_utils.c:367 +#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" -#: ../../common/file_utils.c:377 +#: ../../common/file_utils.c:375 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "не удалось переименовать файл \"%s\" в \"%s\": %m" @@ -125,37 +125,42 @@ msgstr "не удалось переименовать файл \"%s\" в \"%s\" msgid "could not close directory \"%s\": %m" msgstr "не удалось закрыть каталог \"%s\": %m" -#: ../../common/restricted_token.c:69 +#: ../../common/restricted_token.c:64 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "в этой ОС нельзя создавать ограниченные маркеры" +msgid "could not load library \"%s\": error code %lu" +msgstr "не удалось загрузить библиотеку \"%s\" (код ошибки: %lu)" -#: ../../common/restricted_token.c:78 +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "в этой ОС нельзя создавать ограниченные маркеры (код ошибки: %lu)" + +#: ../../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "не удалось открыть маркер процесса (код ошибки: %lu)" -#: ../../common/restricted_token.c:91 +#: ../../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "не удалось подготовить структуры SID (код ошибки: %lu)" -#: ../../common/restricted_token.c:110 +#: ../../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "не удалось создать ограниченный маркер (код ошибки: %lu)" -#: ../../common/restricted_token.c:131 +#: ../../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "не удалось запустить процесс для команды \"%s\" (код ошибки: %lu)" -#: ../../common/restricted_token.c:169 +#: ../../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "не удалось перезапуститься с ограниченным маркером (код ошибки: %lu)" -#: ../../common/restricted_token.c:185 +#: ../../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "не удалось получить код выхода от подпроцесса (код ошибки: %lu)" @@ -224,82 +229,82 @@ msgstr "не удалось создать связь для каталога \" msgid "could not get junction for \"%s\": %s\n" msgstr "не удалось получить связь для каталога \"%s\": %s\n" -#: initdb.c:495 initdb.c:1534 +#: initdb.c:481 initdb.c:1505 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "не удалось открыть файл \"%s\" для чтения: %m" -#: initdb.c:550 initdb.c:858 initdb.c:884 +#: initdb.c:536 initdb.c:846 initdb.c:872 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "не удалось открыть файл \"%s\" для записи: %m" -#: initdb.c:557 initdb.c:564 initdb.c:864 initdb.c:889 +#: initdb.c:543 initdb.c:550 initdb.c:852 initdb.c:877 #, c-format msgid "could not write file \"%s\": %m" msgstr "не удалось записать файл \"%s\": %m" -#: initdb.c:582 +#: initdb.c:568 #, c-format msgid "could not execute command \"%s\": %m" msgstr "не удалось выполнить команду \"%s\": %m" -#: initdb.c:600 +#: initdb.c:586 #, c-format msgid "removing data directory \"%s\"" msgstr "удаление каталога данных \"%s\"" -#: initdb.c:602 +#: initdb.c:588 #, c-format msgid "failed to remove data directory" msgstr "ошибка при удалении каталога данных" -#: initdb.c:606 +#: initdb.c:592 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "удаление содержимого каталога данных \"%s\"" -#: initdb.c:609 +#: initdb.c:595 #, c-format msgid "failed to remove contents of data directory" msgstr "ошибка при удалении содержимого каталога данных" -#: initdb.c:614 +#: initdb.c:600 #, c-format msgid "removing WAL directory \"%s\"" msgstr "удаление каталога WAL \"%s\"" -#: initdb.c:616 +#: initdb.c:602 #, c-format msgid "failed to remove WAL directory" msgstr "ошибка при удалении каталога WAL" -#: initdb.c:620 +#: initdb.c:606 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "удаление содержимого каталога WAL \"%s\"" -#: initdb.c:622 +#: initdb.c:608 #, c-format msgid "failed to remove contents of WAL directory" msgstr "ошибка при удалении содержимого каталога WAL" -#: initdb.c:629 +#: initdb.c:615 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "каталог данных \"%s\" не был удалён по запросу пользователя" -#: initdb.c:633 +#: initdb.c:619 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "каталог WAL \"%s\" не был удалён по запросу пользователя" -#: initdb.c:651 +#: initdb.c:637 #, c-format msgid "cannot be run as root" msgstr "программу не должен запускать root" -#: initdb.c:653 +#: initdb.c:639 #, c-format msgid "" "Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" @@ -308,17 +313,17 @@ msgstr "" "Пожалуйста, переключитесь на обычного пользователя (например,\n" "используя \"su\"), который будет запускать серверный процесс.\n" -#: initdb.c:686 +#: initdb.c:672 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "\"%s\" — некорректное имя серверной кодировки" -#: initdb.c:817 +#: initdb.c:805 #, c-format msgid "file \"%s\" does not exist" msgstr "файл \"%s\" не существует" -#: initdb.c:819 initdb.c:826 initdb.c:835 +#: initdb.c:807 initdb.c:814 initdb.c:823 #, c-format msgid "" "This might mean you have a corrupted installation or identified\n" @@ -327,56 +332,56 @@ msgstr "" "Это означает, что ваша установка PostgreSQL испорчена или в параметре -L\n" "задан неправильный каталог.\n" -#: initdb.c:824 +#: initdb.c:812 #, c-format msgid "could not access file \"%s\": %m" msgstr "нет доступа к файлу \"%s\": %m" -#: initdb.c:833 +#: initdb.c:821 #, c-format msgid "file \"%s\" is not a regular file" msgstr "\"%s\" — не обычный файл" -#: initdb.c:978 +#: initdb.c:966 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "выбирается реализация динамической разделяемой памяти... " -#: initdb.c:987 +#: initdb.c:975 #, c-format msgid "selecting default max_connections ... " msgstr "выбирается значение max_connections по умолчанию... " -#: initdb.c:1018 +#: initdb.c:1006 #, c-format msgid "selecting default shared_buffers ... " msgstr "выбирается значение shared_buffers по умолчанию... " -#: initdb.c:1052 +#: initdb.c:1040 #, c-format msgid "selecting default time zone ... " msgstr "выбирается часовой пояс по умолчанию... " -#: initdb.c:1086 +#: initdb.c:1074 msgid "creating configuration files ... " msgstr "создание конфигурационных файлов... " -#: initdb.c:1239 initdb.c:1258 initdb.c:1344 initdb.c:1359 +#: initdb.c:1227 initdb.c:1246 initdb.c:1332 initdb.c:1347 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "не удалось поменять права для \"%s\": %m" -#: initdb.c:1381 +#: initdb.c:1369 #, c-format msgid "running bootstrap script ... " msgstr "выполняется подготовительный скрипт... " -#: initdb.c:1393 +#: initdb.c:1381 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "входной файл \"%s\" не принадлежит PostgreSQL %s" -#: initdb.c:1396 +#: initdb.c:1384 #, c-format msgid "" "Check your installation or specify the correct path using the option -L.\n" @@ -384,70 +389,70 @@ msgstr "" "Проверьте правильность установки или укажите корректный путь в параметре -" "L.\n" -#: initdb.c:1511 +#: initdb.c:1482 msgid "Enter new superuser password: " msgstr "Введите новый пароль суперпользователя: " -#: initdb.c:1512 +#: initdb.c:1483 msgid "Enter it again: " msgstr "Повторите его: " -#: initdb.c:1515 +#: initdb.c:1486 #, c-format msgid "Passwords didn't match.\n" msgstr "Пароли не совпадают.\n" -#: initdb.c:1541 +#: initdb.c:1512 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "не удалось прочитать пароль из файла \"%s\": %m" -#: initdb.c:1544 +#: initdb.c:1515 #, c-format msgid "password file \"%s\" is empty" msgstr "файл пароля \"%s\" пуст" -#: initdb.c:2107 +#: initdb.c:2043 #, c-format msgid "caught signal\n" msgstr "получен сигнал\n" -#: initdb.c:2113 +#: initdb.c:2049 #, c-format msgid "could not write to child process: %s\n" msgstr "не удалось записать в поток дочернего процесса: %s\n" -#: initdb.c:2121 +#: initdb.c:2057 #, c-format msgid "ok\n" msgstr "ок\n" -#: initdb.c:2211 +#: initdb.c:2147 #, c-format msgid "setlocale() failed" msgstr "ошибка в setlocale()" -#: initdb.c:2232 +#: initdb.c:2168 #, c-format msgid "failed to restore old locale \"%s\"" msgstr "не удалось восстановить старую локаль \"%s\"" -#: initdb.c:2241 +#: initdb.c:2177 #, c-format msgid "invalid locale name \"%s\"" msgstr "ошибочное имя локали \"%s\"" -#: initdb.c:2252 +#: initdb.c:2188 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "неверные установки локали; проверьте переменные окружения LANG и LC_*" -#: initdb.c:2279 +#: initdb.c:2215 #, c-format msgid "encoding mismatch" msgstr "несоответствие кодировки" -#: initdb.c:2281 +#: initdb.c:2217 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the\n" @@ -462,7 +467,7 @@ msgstr "" "Для исправления перезапустите %s, не указывая кодировку явно, \n" "либо выберите подходящее сочетание параметров локализации.\n" -#: initdb.c:2353 +#: initdb.c:2289 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -471,17 +476,17 @@ msgstr "" "%s инициализирует кластер PostgreSQL.\n" "\n" -#: initdb.c:2354 +#: initdb.c:2290 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: initdb.c:2355 +#: initdb.c:2291 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [ПАРАМЕТР]... [КАТАЛОГ]\n" -#: initdb.c:2356 +#: initdb.c:2292 #, c-format msgid "" "\n" @@ -490,7 +495,7 @@ msgstr "" "\n" "Параметры:\n" -#: initdb.c:2357 +#: initdb.c:2293 #, c-format msgid "" " -A, --auth=METHOD default authentication method for local " @@ -499,7 +504,7 @@ msgstr "" " -A, --auth=МЕТОД метод проверки подлинности по умолчанию\n" " для локальных подключений\n" -#: initdb.c:2358 +#: initdb.c:2294 #, c-format msgid "" " --auth-host=METHOD default authentication method for local TCP/IP " @@ -508,7 +513,7 @@ msgstr "" " --auth-host=МЕТОД метод проверки подлинности по умолчанию\n" " для локальных TCP/IP-подключений\n" -#: initdb.c:2359 +#: initdb.c:2295 #, c-format msgid "" " --auth-local=METHOD default authentication method for local-socket " @@ -517,17 +522,17 @@ msgstr "" " --auth-local=МЕТОД метод проверки подлинности по умолчанию\n" " для локальных подключений через сокет\n" -#: initdb.c:2360 +#: initdb.c:2296 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]КАТАЛОГ расположение данных этого кластера БД\n" -#: initdb.c:2361 +#: initdb.c:2297 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=КОДИРОВКА кодировка по умолчанию для новых баз\n" -#: initdb.c:2362 +#: initdb.c:2298 #, c-format msgid "" " -g, --allow-group-access allow group read/execute on data directory\n" @@ -536,12 +541,12 @@ msgstr "" "для\n" " группы\n" -#: initdb.c:2363 +#: initdb.c:2299 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=ЛОКАЛЬ локаль по умолчанию для новых баз\n" -#: initdb.c:2364 +#: initdb.c:2300 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -555,19 +560,19 @@ msgstr "" " установить соответствующий параметр локали\n" " для новых баз (вместо значения из окружения)\n" -#: initdb.c:2368 +#: initdb.c:2304 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale эквивалентно --locale=C\n" -#: initdb.c:2369 +#: initdb.c:2305 #, c-format msgid "" " --pwfile=FILE read password for the new superuser from file\n" msgstr "" " --pwfile=ФАЙЛ прочитать пароль суперпользователя из файла\n" -#: initdb.c:2370 +#: initdb.c:2306 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -576,29 +581,29 @@ msgstr "" " -T, --text-search-config=КОНФИГУРАЦИЯ\n" " конфигурация текстового поиска по умолчанию\n" -#: initdb.c:2372 +#: initdb.c:2308 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=ИМЯ имя суперпользователя БД\n" -#: initdb.c:2373 +#: initdb.c:2309 #, c-format msgid "" " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt запросить пароль суперпользователя\n" -#: initdb.c:2374 +#: initdb.c:2310 #, c-format msgid "" " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=КАТАЛОГ расположение журнала предзаписи\n" -#: initdb.c:2375 +#: initdb.c:2311 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=РАЗМЕР размер сегментов WAL (в мегабайтах)\n" -#: initdb.c:2376 +#: initdb.c:2312 #, c-format msgid "" "\n" @@ -607,27 +612,27 @@ msgstr "" "\n" "Редко используемые параметры:\n" -#: initdb.c:2377 +#: initdb.c:2313 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug выдавать много отладочных сообщений\n" -#: initdb.c:2378 +#: initdb.c:2314 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums включить контроль целостности страниц\n" -#: initdb.c:2379 +#: initdb.c:2315 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L КАТАЛОГ расположение входных файлов\n" -#: initdb.c:2380 +#: initdb.c:2316 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean не очищать после ошибок\n" -#: initdb.c:2381 +#: initdb.c:2317 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written safely to " @@ -635,18 +640,18 @@ msgid "" msgstr "" " -N, --no-sync не ждать завершения сохранения данных на диске\n" -#: initdb.c:2382 +#: initdb.c:2318 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, --show показать внутренние установки\n" -#: initdb.c:2383 +#: initdb.c:2319 #, c-format msgid " -S, --sync-only only sync data directory\n" msgstr "" " -S, --sync-only только синхронизировать с ФС каталог данных\n" -#: initdb.c:2384 +#: initdb.c:2320 #, c-format msgid "" "\n" @@ -655,17 +660,17 @@ msgstr "" "\n" "Другие параметры:\n" -#: initdb.c:2385 +#: initdb.c:2321 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: initdb.c:2386 +#: initdb.c:2322 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: initdb.c:2387 +#: initdb.c:2323 #, c-format msgid "" "\n" @@ -675,32 +680,37 @@ msgstr "" "\n" "Если каталог данных не указан, используется переменная окружения PGDATA.\n" -#: initdb.c:2389 +#: initdb.c:2325 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Об ошибках сообщайте по адресу .\n" +"Об ошибках сообщайте по адресу <%s>.\n" -#: initdb.c:2417 +#: initdb.c:2326 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: initdb.c:2354 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "" "нераспознанный метод проверки подлинности \"%s\" для подключений \"%s\"" -#: initdb.c:2433 +#: initdb.c:2370 #, c-format msgid "must specify a password for the superuser to enable %s authentication" msgstr "для применения метода %s необходимо указать пароль суперпользователя" -#: initdb.c:2460 +#: initdb.c:2397 #, c-format msgid "no data directory specified" msgstr "каталог данных не указан" -#: initdb.c:2462 +#: initdb.c:2399 #, c-format msgid "" "You must identify the directory where the data for this database system\n" @@ -711,39 +721,39 @@ msgstr "" "Это можно сделать, добавив ключ -D или установив переменную\n" "окружения PGDATA.\n" -#: initdb.c:2497 +#: initdb.c:2434 #, c-format msgid "" -"The program \"postgres\" is needed by %s but was not found in the\n" +"The program \"%s\" is needed by %s but was not found in the\n" "same directory as \"%s\".\n" "Check your installation." msgstr "" -"Программа \"postgres\" нужна для %s, но она не найдена\n" +"Программа \"%s\" нужна для %s, но она не найдена\n" "в каталоге \"%s\".\n" "Проверьте правильность установки СУБД." -#: initdb.c:2502 +#: initdb.c:2439 #, c-format msgid "" -"The program \"postgres\" was found by \"%s\"\n" +"The program \"%s\" was found by \"%s\"\n" "but was not the same version as %s.\n" "Check your installation." msgstr "" -"Программа \"postgres\" найдена в \"%s\",\n" +"Программа \"%s\" найдена программой \"%s\",\n" "но её версия отличается от версии %s.\n" "Проверьте правильность установки СУБД." -#: initdb.c:2521 +#: initdb.c:2458 #, c-format msgid "input file location must be an absolute path" msgstr "расположение входных файлов должно задаваться абсолютным путём" -#: initdb.c:2538 +#: initdb.c:2475 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "Кластер баз данных будет инициализирован с локалью \"%s\".\n" -#: initdb.c:2541 +#: initdb.c:2478 #, c-format msgid "" "The database cluster will be initialized with locales\n" @@ -762,22 +772,22 @@ msgstr "" " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:2565 +#: initdb.c:2502 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "не удалось найти подходящую кодировку для локали \"%s\"" -#: initdb.c:2567 +#: initdb.c:2504 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "Перезапустите %s с параметром -E.\n" -#: initdb.c:2568 initdb.c:3196 initdb.c:3217 +#: initdb.c:2505 initdb.c:3127 initdb.c:3148 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: initdb.c:2581 +#: initdb.c:2518 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -786,12 +796,12 @@ msgstr "" "Кодировка \"%s\", подразумеваемая локалью, не годится для сервера.\n" "Вместо неё в качестве кодировки БД по умолчанию будет выбрана \"%s\".\n" -#: initdb.c:2586 +#: initdb.c:2523 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "для локали \"%s\" требуется неподдерживаемая кодировка \"%s\"" -#: initdb.c:2589 +#: initdb.c:2526 #, c-format msgid "" "Encoding \"%s\" is not allowed as a server-side encoding.\n" @@ -800,25 +810,25 @@ msgstr "" "Кодировка \"%s\" недопустима в качестве кодировки сервера.\n" "Перезапустите %s, выбрав другую локаль.\n" -#: initdb.c:2598 +#: initdb.c:2535 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "" "Кодировка БД по умолчанию, выбранная в соответствии с настройками: \"%s\".\n" -#: initdb.c:2666 +#: initdb.c:2597 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "" "не удалось найти подходящую конфигурацию текстового поиска для локали \"%s\"" -#: initdb.c:2677 +#: initdb.c:2608 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "" "внимание: для локали \"%s\" нет известной конфигурации текстового поиска" -#: initdb.c:2682 +#: initdb.c:2613 #, c-format msgid "" "specified text search configuration \"%s\" might not match locale \"%s\"" @@ -826,37 +836,37 @@ msgstr "" "указанная конфигурация текстового поиска \"%s\" может не соответствовать " "локали \"%s\"" -#: initdb.c:2687 +#: initdb.c:2618 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "Выбрана конфигурация текстового поиска по умолчанию \"%s\".\n" -#: initdb.c:2731 initdb.c:2813 +#: initdb.c:2662 initdb.c:2744 #, c-format msgid "creating directory %s ... " msgstr "создание каталога %s... " -#: initdb.c:2737 initdb.c:2819 initdb.c:2884 initdb.c:2946 +#: initdb.c:2668 initdb.c:2750 initdb.c:2815 initdb.c:2877 #, c-format msgid "could not create directory \"%s\": %m" msgstr "не удалось создать каталог \"%s\": %m" -#: initdb.c:2748 initdb.c:2831 +#: initdb.c:2679 initdb.c:2762 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "исправление прав для существующего каталога %s... " -#: initdb.c:2754 initdb.c:2837 +#: initdb.c:2685 initdb.c:2768 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "не удалось поменять права для каталога \"%s\": %m" -#: initdb.c:2768 initdb.c:2851 +#: initdb.c:2699 initdb.c:2782 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "каталог \"%s\" существует, но он не пуст" -#: initdb.c:2773 +#: initdb.c:2704 #, c-format msgid "" "If you want to create a new database system, either remove or empty\n" @@ -867,17 +877,17 @@ msgstr "" "удалите или очистите каталог \"%s\",\n" "либо при запуске %s в качестве пути укажите не \"%s\".\n" -#: initdb.c:2781 initdb.c:2863 initdb.c:3232 +#: initdb.c:2712 initdb.c:2794 initdb.c:3163 #, c-format msgid "could not access directory \"%s\": %m" msgstr "нет доступа к каталогу \"%s\": %m" -#: initdb.c:2804 +#: initdb.c:2735 #, c-format msgid "WAL directory location must be an absolute path" msgstr "расположение каталога WAL должно определяться абсолютным путём" -#: initdb.c:2856 +#: initdb.c:2787 #, c-format msgid "" "If you want to store the WAL there, either remove or empty the directory\n" @@ -886,17 +896,17 @@ msgstr "" "Если вы хотите хранить WAL здесь, удалите или очистите каталог\n" "\"%s\".\n" -#: initdb.c:2870 +#: initdb.c:2801 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "не удалось создать символическую ссылку \"%s\": %m" -#: initdb.c:2875 +#: initdb.c:2806 #, c-format msgid "symlinks are not supported on this platform" msgstr "символические ссылки не поддерживаются в этой ОС" -#: initdb.c:2899 +#: initdb.c:2830 #, c-format msgid "" "It contains a dot-prefixed/invisible file, perhaps due to it being a mount " @@ -904,13 +914,13 @@ msgid "" msgstr "" "Он содержит файл с точкой (невидимый), возможно это точка монтирования.\n" -#: initdb.c:2902 +#: initdb.c:2833 #, c-format msgid "" "It contains a lost+found directory, perhaps due to it being a mount point.\n" msgstr "Он содержит подкаталог lost+found, возможно это точка монтирования.\n" -#: initdb.c:2905 +#: initdb.c:2836 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -920,52 +930,52 @@ msgstr "" "рекомендуется.\n" "Создайте в монтируемом ресурсе подкаталог и используйте его.\n" -#: initdb.c:2931 +#: initdb.c:2862 #, c-format msgid "creating subdirectories ... " msgstr "создание подкаталогов... " -#: initdb.c:2977 +#: initdb.c:2908 msgid "performing post-bootstrap initialization ... " msgstr "выполняется заключительная инициализация... " -#: initdb.c:3134 +#: initdb.c:3065 #, c-format msgid "Running in debug mode.\n" msgstr "Программа запущена в режиме отладки.\n" -#: initdb.c:3138 +#: initdb.c:3069 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "" "Программа запущена в режиме 'no-clean' - очистки и исправления ошибок не " "будет.\n" -#: initdb.c:3215 +#: initdb.c:3146 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: initdb.c:3236 initdb.c:3325 +#: initdb.c:3167 initdb.c:3256 msgid "syncing data to disk ... " msgstr "сохранение данных на диске... " -#: initdb.c:3245 +#: initdb.c:3176 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "нельзя одновременно запросить пароль и прочитать пароль из файла" -#: initdb.c:3270 +#: initdb.c:3201 #, c-format msgid "argument of --wal-segsize must be a number" msgstr "аргументом --wal-segsize должно быть число" -#: initdb.c:3275 +#: initdb.c:3206 #, c-format msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024" msgstr "аргументом --wal-segsize должна быть степень 2 от 1 до 1024" -#: initdb.c:3292 +#: initdb.c:3223 #, c-format msgid "" "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" @@ -973,7 +983,7 @@ msgstr "" "имя \"%s\" для суперпользователя не допускается; имена ролей не могут " "начинаться с \"pg_\"" -#: initdb.c:3296 +#: initdb.c:3227 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -984,17 +994,17 @@ msgstr "" "От его имени также будет запускаться процесс сервера.\n" "\n" -#: initdb.c:3312 +#: initdb.c:3243 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Контроль целостности страниц данных включён.\n" -#: initdb.c:3314 +#: initdb.c:3245 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Контроль целостности страниц данных отключён.\n" -#: initdb.c:3331 +#: initdb.c:3262 #, c-format msgid "" "\n" @@ -1005,12 +1015,12 @@ msgstr "" "Сохранение данных на диск пропускается.\n" "Каталог данных может повредиться при сбое операционной системы.\n" -#: initdb.c:3336 +#: initdb.c:3267 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "включение метода аутентификации \"trust\" для локальных подключений" -#: initdb.c:3337 +#: initdb.c:3268 #, c-format msgid "" "You can change this by editing pg_hba.conf or using the option -A, or\n" @@ -1021,11 +1031,11 @@ msgstr "" "--auth-local или --auth-host при следующем выполнении initdb.\n" #. translator: This is a placeholder in a shell command. -#: initdb.c:3362 +#: initdb.c:3293 msgid "logfile" msgstr "файл_журнала" -#: initdb.c:3364 +#: initdb.c:3295 #, c-format msgid "" "\n" @@ -1040,6 +1050,13 @@ msgstr "" " %s\n" "\n" +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Об ошибках сообщайте по адресу .\n" + #~ msgid "%s: could not open directory \"%s\": %s\n" #~ msgstr "%s: не удалось открыть каталог \"%s\": %s\n" diff --git a/src/bin/initdb/po/uk.po b/src/bin/initdb/po/uk.po index 5cc3e5a0bd336..9851ac5e80d05 100644 --- a/src/bin/initdb/po/uk.po +++ b/src/bin/initdb/po/uk.po @@ -2,153 +2,160 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-08 14:45+0000\n" -"PO-Revision-Date: 2019-12-20 20:30\n" +"POT-Creation-Date: 2020-09-21 21:16+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" "Last-Translator: pasha_golub\n" "Language-Team: Ukrainian\n" -"Language: uk_UA\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" "X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_12_STABLE/initdb.pot\n" +"X-Crowdin-File: /DEV_13/initdb.pot\n" +"X-Crowdin-File-ID: 484\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "збій: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "помилка: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "попередження: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "не вдалося визначити поточний каталог: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "невірний бінарний файл \"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "неможливо прочитати бінарний файл \"%s\"" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "неможливо знайти \"%s\" для виконання" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" -msgstr "не вдалося змінити каталог в \"%s\": %m" +msgstr "не вдалося змінити каталог на \"%s\": %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "не можливо прочитати символічне послання \"%s\": %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "помилка pclose: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 -#: initdb.c:339 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: initdb.c:325 #, c-format msgid "out of memory" msgstr "недостатньо пам'яті" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "недостатньо пам'яті\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" -#: ../../common/file_utils.c:81 ../../common/file_utils.c:183 +#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" -#: ../../common/file_utils.c:160 ../../common/pgfnames.c:48 +#: ../../common/file_utils.c:158 ../../common/pgfnames.c:48 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не вдалося відкрити каталог \"%s\": %m" -#: ../../common/file_utils.c:194 ../../common/pgfnames.c:69 +#: ../../common/file_utils.c:192 ../../common/pgfnames.c:69 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не вдалося прочитати каталог \"%s\": %m" -#: ../../common/file_utils.c:226 ../../common/file_utils.c:285 -#: ../../common/file_utils.c:359 +#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 +#: ../../common/file_utils.c:357 #, c-format msgid "could not open file \"%s\": %m" msgstr "не можливо відкрити файл \"%s\": %m" -#: ../../common/file_utils.c:297 ../../common/file_utils.c:367 +#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 #, c-format msgid "could not fsync file \"%s\": %m" -msgstr "не вдалося відкрити файл \"%s\": %m" +msgstr "не вдалося fsync файл \"%s\": %m" -#: ../../common/file_utils.c:377 +#: ../../common/file_utils.c:375 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" -msgstr "не можливо перейменувати файл \"%s\" на \"%s\": %m" +msgstr "не вдалося перейменувати файл \"%s\" на \"%s\": %m" #: ../../common/pgfnames.c:74 #, c-format msgid "could not close directory \"%s\": %m" msgstr "не вдалося закрити каталог \"%s\": %m" -#: ../../common/restricted_token.c:69 +#: ../../common/restricted_token.c:64 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "не вдалося створити обмежені токени на цій платформі" +msgid "could not load library \"%s\": error code %lu" +msgstr "не вдалося завантажити бібліотеку \"%s\": код помилки %lu" -#: ../../common/restricted_token.c:78 +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "не вдалося створити обмежені токени на цій платформі: код помилки %lu" + +#: ../../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "не вдалося відкрити токен процесу: код помилки %lu" -#: ../../common/restricted_token.c:91 +#: ../../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "не вдалося виділити SID: код помилки %lu" -#: ../../common/restricted_token.c:110 +#: ../../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "не вдалося створити обмежений токен: код помилки %lu" -#: ../../common/restricted_token.c:131 +#: ../../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "не вдалося запустити процес для команди \"%s\": код помилки %lu" -#: ../../common/restricted_token.c:169 +#: ../../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "не вдалося перезапустити з обмеженим токеном: код помилки %lu" -#: ../../common/restricted_token.c:185 +#: ../../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "не вдалося отримати код завершення підпроцесу: код помилки %lu" @@ -217,222 +224,222 @@ msgstr "не вдалося встановити сполучення для \"% msgid "could not get junction for \"%s\": %s\n" msgstr "не вдалося встановити сполучення для \"%s\": %s\n" -#: initdb.c:495 initdb.c:1534 +#: initdb.c:481 initdb.c:1505 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "не вдалося відкрити файл \"%s\" для читання: %m" -#: initdb.c:550 initdb.c:858 initdb.c:884 +#: initdb.c:536 initdb.c:846 initdb.c:872 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "не вдалося відкрити файл \"%s\" для запису: %m" -#: initdb.c:557 initdb.c:564 initdb.c:864 initdb.c:889 +#: initdb.c:543 initdb.c:550 initdb.c:852 initdb.c:877 #, c-format msgid "could not write file \"%s\": %m" msgstr "не вдалося записати файл \"%s\": %m" -#: initdb.c:582 +#: initdb.c:568 #, c-format msgid "could not execute command \"%s\": %m" msgstr "не вдалося виконати команду \"%s\": %m" -#: initdb.c:600 +#: initdb.c:586 #, c-format msgid "removing data directory \"%s\"" msgstr "видалення даних з директорії \"%s\"" -#: initdb.c:602 +#: initdb.c:588 #, c-format msgid "failed to remove data directory" msgstr "не вдалося видалити дані директорії" -#: initdb.c:606 +#: initdb.c:592 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "видалення даних з директорії \"%s\"" -#: initdb.c:609 +#: initdb.c:595 #, c-format msgid "failed to remove contents of data directory" msgstr "не вдалося видалити дані директорії" -#: initdb.c:614 +#: initdb.c:600 #, c-format msgid "removing WAL directory \"%s\"" msgstr "видалення WAL директорії \"%s\"" -#: initdb.c:616 +#: initdb.c:602 #, c-format msgid "failed to remove WAL directory" msgstr "не вдалося видалити директорію WAL" -#: initdb.c:620 +#: initdb.c:606 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "видалення даних з директорії WAL \"%s\"" -#: initdb.c:622 +#: initdb.c:608 #, c-format msgid "failed to remove contents of WAL directory" msgstr "не вдалося видалити дані директорії WAL" -#: initdb.c:629 +#: initdb.c:615 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "директорія даних \"%s\" не видалена за запитом користувача" -#: initdb.c:633 +#: initdb.c:619 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "директорія WAL \"%s\" не видалена за запитом користувача" -#: initdb.c:651 +#: initdb.c:637 #, c-format msgid "cannot be run as root" msgstr "не може виконуватись як root" -#: initdb.c:653 +#: initdb.c:639 #, c-format msgid "Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" "own the server process.\n" msgstr "Будь ласка, увійдіть (за допомогою, наприклад, \"su\") як (непривілейований) користувач, від імені якого буде запущено серверний процес. \n" -#: initdb.c:686 +#: initdb.c:672 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "\"%s\" невірне ім'я серверного кодування" -#: initdb.c:817 +#: initdb.c:805 #, c-format msgid "file \"%s\" does not exist" msgstr "файл \"%s\" не існує" -#: initdb.c:819 initdb.c:826 initdb.c:835 +#: initdb.c:807 initdb.c:814 initdb.c:823 #, c-format msgid "This might mean you have a corrupted installation or identified\n" "the wrong directory with the invocation option -L.\n" msgstr "Це означає, що ваша інсталяція пошкоджена або в параметрі -L задана неправильна директорія.\n" -#: initdb.c:824 +#: initdb.c:812 #, c-format msgid "could not access file \"%s\": %m" msgstr "немає доступу до файлу \"%s\": %m" -#: initdb.c:833 +#: initdb.c:821 #, c-format msgid "file \"%s\" is not a regular file" msgstr "файл \"%s\" не є звичайним файлом" -#: initdb.c:978 +#: initdb.c:966 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "обирається реалізація динамічної спільної пам'яті ... " -#: initdb.c:987 +#: initdb.c:975 #, c-format msgid "selecting default max_connections ... " msgstr "обирається значення max_connections ... \n" " " -#: initdb.c:1018 +#: initdb.c:1006 #, c-format msgid "selecting default shared_buffers ... " msgstr "обирається значення shared_buffers... " -#: initdb.c:1052 +#: initdb.c:1040 #, c-format msgid "selecting default time zone ... " msgstr "обирається часовий пояс за замовчуванням ... " -#: initdb.c:1086 +#: initdb.c:1074 msgid "creating configuration files ... " msgstr "створення конфігураційних файлів... " -#: initdb.c:1239 initdb.c:1258 initdb.c:1344 initdb.c:1359 +#: initdb.c:1227 initdb.c:1246 initdb.c:1332 initdb.c:1347 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "неможливо змінити дозволи \"%s\": %m" -#: initdb.c:1381 +#: initdb.c:1369 #, c-format msgid "running bootstrap script ... " msgstr "виконуємо сценарій ініціалізації ... " -#: initdb.c:1393 +#: initdb.c:1381 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "вхідний файл \"%s\" не належить PostgreSQL %s" -#: initdb.c:1396 +#: initdb.c:1384 #, c-format msgid "Check your installation or specify the correct path using the option -L.\n" msgstr "Перевірте вашу установку або вкажіть правильний перелік дій використання параметру-L.\n" -#: initdb.c:1511 +#: initdb.c:1482 msgid "Enter new superuser password: " msgstr "Введіть новий пароль для superuser: " -#: initdb.c:1512 +#: initdb.c:1483 msgid "Enter it again: " msgstr "Введіть знову: " -#: initdb.c:1515 +#: initdb.c:1486 #, c-format msgid "Passwords didn't match.\n" msgstr "Паролі не співпадають.\n" -#: initdb.c:1541 +#: initdb.c:1512 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "не вдалося прочитати пароль з файлу \"%s\": %m" -#: initdb.c:1544 +#: initdb.c:1515 #, c-format msgid "password file \"%s\" is empty" msgstr "файл з паролями \"%s\" є порожнім" -#: initdb.c:2107 +#: initdb.c:2043 #, c-format msgid "caught signal\n" msgstr "отримано сигнал\n" -#: initdb.c:2113 +#: initdb.c:2049 #, c-format msgid "could not write to child process: %s\n" msgstr "не вдалося написати у дочірній процес: %s\n" -#: initdb.c:2121 +#: initdb.c:2057 #, c-format msgid "ok\n" msgstr "ok\n" -#: initdb.c:2211 +#: initdb.c:2147 #, c-format msgid "setlocale() failed" msgstr "setlocale() завершився невдало" -#: initdb.c:2232 +#: initdb.c:2168 #, c-format msgid "failed to restore old locale \"%s\"" msgstr "не вдалося відновити старі локалі \"%s\"" -#: initdb.c:2241 +#: initdb.c:2177 #, c-format msgid "invalid locale name \"%s\"" msgstr "не допустиме ім'я локалі \"%s\"" -#: initdb.c:2252 +#: initdb.c:2188 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "неприпустимі параметри локалі; перевірте LANG та LC_* змінні середовища" -#: initdb.c:2279 +#: initdb.c:2215 #, c-format msgid "encoding mismatch" msgstr "невідповідність кодування" -#: initdb.c:2281 +#: initdb.c:2217 #, c-format msgid "The encoding you selected (%s) and the encoding that the\n" "selected locale uses (%s) do not match. This would lead to\n" @@ -443,64 +450,64 @@ msgstr "Кодування, яке ви вибрали (%s), та кодуван "Це може спричинити некоректну поведінку у функціях, що обробляють символьні рядки.\n" "Перезапустіть %s і не вказуйте явне кодування або виберіть відповідну комбінацію.\n" -#: initdb.c:2353 +#: initdb.c:2289 #, c-format msgid "%s initializes a PostgreSQL database cluster.\n\n" msgstr "%s ініціалізує кластер баз даних PostgreSQL.\n\n" -#: initdb.c:2354 +#: initdb.c:2290 #, c-format msgid "Usage:\n" msgstr "Використання:\n" -#: initdb.c:2355 +#: initdb.c:2291 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPTION]... [DATADIR]\n" -#: initdb.c:2356 +#: initdb.c:2292 #, c-format msgid "\n" "Options:\n" msgstr "\n" "Параметри:\n" -#: initdb.c:2357 +#: initdb.c:2293 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr " -A, -- auth=METHOD метод аутентифікації за замовчуванням для локальних підключень\n" -#: initdb.c:2358 +#: initdb.c:2294 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr " --auth-host=METHOD метод аутентифікації за замовчуванням для локального TCP/IP підключення\n" -#: initdb.c:2359 +#: initdb.c:2295 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr " --auth-local=METHOD метод аутентифікації за замовчуванням для локального під'єднання через сокет\n" -#: initdb.c:2360 +#: initdb.c:2296 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D - pgdata =] DATADIR розташування кластеру цієї бази даних\n" -#: initdb.c:2361 +#: initdb.c:2297 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=ENCODING встановлення кодування за замовчуванням для нової бази даних\n" -#: initdb.c:2362 +#: initdb.c:2298 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" msgstr " -g, --allow-group-access дозволити читати/виконувати у каталозі даних для групи\n" -#: initdb.c:2363 +#: initdb.c:2299 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=LOCALE встановлює локаль за замовчуванням для нових баз даних\n" -#: initdb.c:2364 +#: initdb.c:2300 #, c-format msgid " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" " --lc-monetary=, --lc-numeric=, --lc-time=LOCALE\n" @@ -511,103 +518,103 @@ msgstr " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" " встановлення локалі за замовчуванням для відповідної категорії в\n" " нових базах даних (замість значення з середовища)\n" -#: initdb.c:2368 +#: initdb.c:2304 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale еквівалентно --locale=C\n" -#: initdb.c:2369 +#: initdb.c:2305 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=FILE прочитати пароль для нового суперкористувача з файлу\n" -#: initdb.c:2370 +#: initdb.c:2306 #, c-format msgid " -T, --text-search-config=CFG\n" " default text search configuration\n" msgstr " -T, --text-search-config=CFG конфігурація текстового пошуку за замовчуванням\n" -#: initdb.c:2372 +#: initdb.c:2308 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=NAME ім'я суперкористувача бази даних\n" -#: initdb.c:2373 +#: initdb.c:2309 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt запитувати пароль нового суперкористувача\n" -#: initdb.c:2374 +#: initdb.c:2310 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALDIR розташування журналу попереднього запису\n" -#: initdb.c:2375 +#: initdb.c:2311 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=SIZE розмір сегментів WAL у мегабайтах\n" -#: initdb.c:2376 +#: initdb.c:2312 #, c-format msgid "\n" "Less commonly used options:\n" msgstr "\n" "Рідковживані параметри:\n" -#: initdb.c:2377 +#: initdb.c:2313 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug генерувати багато налагоджувальних повідомлень\n" -#: initdb.c:2378 +#: initdb.c:2314 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums використовувати контрольні суми сторінок\n" -#: initdb.c:2379 +#: initdb.c:2315 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L DIRECTORY розташування вхідних файлів\n" -#: initdb.c:2380 +#: initdb.c:2316 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean не очищувати після помилок\n" " \n" -#: initdb.c:2381 +#: initdb.c:2317 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync не чекати на безпечний запис змін на диск\n" -#: initdb.c:2382 +#: initdb.c:2318 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, --show показати внутрішні налаштування\n" -#: initdb.c:2383 +#: initdb.c:2319 #, c-format msgid " -S, --sync-only only sync data directory\n" msgstr " -S, --sync-only синхронізувати тільки каталог даних\n" -#: initdb.c:2384 +#: initdb.c:2320 #, c-format msgid "\n" "Other options:\n" msgstr "\n" "Інші параметри:\n" -#: initdb.c:2385 +#: initdb.c:2321 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version вивести інформацію про версію і вийти\n" -#: initdb.c:2386 +#: initdb.c:2322 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показати цю довідку, потім вийти\n" -#: initdb.c:2387 +#: initdb.c:2323 #, c-format msgid "\n" "If the data directory is not specified, the environment variable PGDATA\n" @@ -615,64 +622,67 @@ msgid "\n" msgstr "\n" "Якщо каталог даних не вказано, використовується змінна середовища PGDATA.\n" -#: initdb.c:2389 +#: initdb.c:2325 #, c-format msgid "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "\n" -"Про помилки повідомляйте на .\n" +"Повідомляти про помилки на <%s>.\n" + +#: initdb.c:2326 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" -#: initdb.c:2417 +#: initdb.c:2354 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "неприпустимий спосіб автентифікації \"%s\" для \"%s\" підключення" -#: initdb.c:2433 +#: initdb.c:2370 #, c-format msgid "must specify a password for the superuser to enable %s authentication" msgstr "необхідно вказати пароль суперкористувача для активації автентифікації %s" -#: initdb.c:2460 +#: initdb.c:2397 #, c-format msgid "no data directory specified" msgstr "каталог даних не вказано" -#: initdb.c:2462 +#: initdb.c:2399 #, c-format msgid "You must identify the directory where the data for this database system\n" "will reside. Do this with either the invocation option -D or the\n" "environment variable PGDATA.\n" msgstr "Вам потрібно ідентифікувати каталог, у якому будуть розташовані дані для цієї бази даних. Зробіть це за допомогою параметру -D або змінного середовища PGDATA.\n" -#: initdb.c:2497 +#: initdb.c:2434 #, c-format -msgid "The program \"postgres\" is needed by %s but was not found in the\n" +msgid "The program \"%s\" is needed by %s but was not found in the\n" "same directory as \"%s\".\n" "Check your installation." -msgstr "Програма \"postgres\" потрібна для %s, але не знайдена в тому \n" -"ж каталозі, що й \"%s\".\n" +msgstr "Програма \"%s\" потрібна для %s, але не знайдена в тому ж каталозі, що й \"%s\".\n" "Перевірте вашу установку." -#: initdb.c:2502 +#: initdb.c:2439 #, c-format -msgid "The program \"postgres\" was found by \"%s\"\n" +msgid "The program \"%s\" was found by \"%s\"\n" "but was not the same version as %s.\n" "Check your installation." -msgstr "Програма \"postgres\" була знайдена \"%s\", \n" -"але не була тієї ж версії, що й %s.\n" +msgstr "Програма \"%s\" була знайдена \"%s\", але не була тієї ж версії, що %s.\n" "Перевірте вашу установку." -#: initdb.c:2521 +#: initdb.c:2458 #, c-format msgid "input file location must be an absolute path" msgstr "розташування вхідного файлу має бути абсолютним шляхом" -#: initdb.c:2538 +#: initdb.c:2475 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "Кластер бази даних буде ініціалізовано з локалізацією \"%s\".\n" -#: initdb.c:2541 +#: initdb.c:2478 #, c-format msgid "The database cluster will be initialized with locales\n" " COLLATE: %s\n" @@ -689,206 +699,206 @@ msgstr "Кластер бази даних буде ініціалізовано " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:2565 +#: initdb.c:2502 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "не вдалося знайти відповідне кодування для локалі \"%s\"" -#: initdb.c:2567 +#: initdb.c:2504 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "Перезапустіть %s з параметром -E.\n" -#: initdb.c:2568 initdb.c:3196 initdb.c:3217 +#: initdb.c:2505 initdb.c:3127 initdb.c:3148 #, c-format msgid "Try \"%s --help\" for more information.\n" -msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" -#: initdb.c:2581 +#: initdb.c:2518 #, c-format msgid "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" "The default database encoding will be set to \"%s\" instead.\n" msgstr "Кодування \"%s\", що очікується локалізацією, не дозволено у якості кодування сервера.\n" "Замість нього буде встановлене кодування \"%s\" за замовчуванням.\n" -#: initdb.c:2586 +#: initdb.c:2523 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "локалізація \"%s\" потребує кодування \"%s\", що не підтримується" -#: initdb.c:2589 +#: initdb.c:2526 #, c-format msgid "Encoding \"%s\" is not allowed as a server-side encoding.\n" "Rerun %s with a different locale selection.\n" msgstr "Кодування \"%s\" не дозволяється у якості кодування сервера.\n" "Перезапустіть %s, обравши іншу локалізацію.\n" -#: initdb.c:2598 +#: initdb.c:2535 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "Кодування бази даних за замовчуванням встановлено: \"%s\".\n" -#: initdb.c:2666 +#: initdb.c:2597 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "не вдалося знайти відповідну конфігурацію текстового пошуку для локалі\"%s\"" -#: initdb.c:2677 +#: initdb.c:2608 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "відповідна конфігурація текстового пошуку для локалі \"%s\" невідома" -#: initdb.c:2682 +#: initdb.c:2613 #, c-format msgid "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "вказана конфігурація текстового пошуку \"%s\" може не підходити локалі \"%s\"" -#: initdb.c:2687 +#: initdb.c:2618 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "Конфігурація текстового пошуку за замовчуванням буде встановлена в \"%s\".\n" -#: initdb.c:2731 initdb.c:2813 +#: initdb.c:2662 initdb.c:2744 #, c-format msgid "creating directory %s ... " msgstr "створення каталогу %s... " -#: initdb.c:2737 initdb.c:2819 initdb.c:2884 initdb.c:2946 +#: initdb.c:2668 initdb.c:2750 initdb.c:2815 initdb.c:2877 #, c-format msgid "could not create directory \"%s\": %m" msgstr "не вдалося створити каталог \"%s\": %m" -#: initdb.c:2748 initdb.c:2831 +#: initdb.c:2679 initdb.c:2762 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "виправляю дозволи для створеного каталогу %s... " -#: initdb.c:2754 initdb.c:2837 +#: initdb.c:2685 initdb.c:2768 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "не вдалося змінити дозволи каталогу \"%s\": %m" -#: initdb.c:2768 initdb.c:2851 +#: initdb.c:2699 initdb.c:2782 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "каталог \"%s\" існує, але він не порожній" -#: initdb.c:2773 +#: initdb.c:2704 #, c-format msgid "If you want to create a new database system, either remove or empty\n" "the directory \"%s\" or run %s\n" "with an argument other than \"%s\".\n" msgstr "Якщо ви хочете створити нову систему бази даних, видаліть або очистіть каталог \"%s\", або запустіть %s з іншим аргументом, ніж \"%s\".\n" -#: initdb.c:2781 initdb.c:2863 initdb.c:3232 +#: initdb.c:2712 initdb.c:2794 initdb.c:3163 #, c-format msgid "could not access directory \"%s\": %m" -msgstr "помилка доступу до каталогу \"%s\": %m" +msgstr "немає доступу до каталогу \"%s\": %m" -#: initdb.c:2804 +#: initdb.c:2735 #, c-format msgid "WAL directory location must be an absolute path" msgstr "розташування WAL каталогу має бути абсолютним шляхом" -#: initdb.c:2856 +#: initdb.c:2787 #, c-format msgid "If you want to store the WAL there, either remove or empty the directory\n" "\"%s\".\n" msgstr "Якщо ви хочете зберегти WAL, видаліть або спорожніть каталог \"%s\".\n" -#: initdb.c:2870 +#: initdb.c:2801 #, c-format msgid "could not create symbolic link \"%s\": %m" -msgstr "не можливо створити символічне послання \"%s\": %m" +msgstr "не вдалося створити символічне послання \"%s\": %m" -#: initdb.c:2875 +#: initdb.c:2806 #, c-format msgid "symlinks are not supported on this platform" msgstr "символічні посилання не підтримуються цією платформою" -#: initdb.c:2899 +#: initdb.c:2830 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point.\n" msgstr "Він містить файл з крапкою або невидимий файл, можливо це точка під'єднання.\n" -#: initdb.c:2902 +#: initdb.c:2833 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point.\n" msgstr "Він містить каталог lost+found, можливо це точка під'єднання.\n" -#: initdb.c:2905 +#: initdb.c:2836 #, c-format msgid "Using a mount point directly as the data directory is not recommended.\n" "Create a subdirectory under the mount point.\n" msgstr "Не рекомендується використовувати точку під'єднання у якості каталогу даних.\n" "Створіть підкаталог і використайте його.\n" -#: initdb.c:2931 +#: initdb.c:2862 #, c-format msgid "creating subdirectories ... " msgstr "створення підкаталогів... " -#: initdb.c:2977 +#: initdb.c:2908 msgid "performing post-bootstrap initialization ... " msgstr "виконується кінцева фаза ініціалізації ... " -#: initdb.c:3134 +#: initdb.c:3065 #, c-format msgid "Running in debug mode.\n" msgstr "Виконується у режимі налагодження.\n" -#: initdb.c:3138 +#: initdb.c:3069 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "Виконується у режимі 'no-clean'. Помилки не будуть виправлені.\n" -#: initdb.c:3215 +#: initdb.c:3146 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "забагато аргументів у командному рядку (перший \"%s\")" -#: initdb.c:3236 initdb.c:3325 +#: initdb.c:3167 initdb.c:3256 msgid "syncing data to disk ... " msgstr "синхронізація даних з диском ... " -#: initdb.c:3245 +#: initdb.c:3176 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "неможливо вказати одночасно пароль і файл паролю" -#: initdb.c:3270 +#: initdb.c:3201 #, c-format msgid "argument of --wal-segsize must be a number" msgstr "аргумент --wal-segsize повинен бути числом" -#: initdb.c:3275 +#: initdb.c:3206 #, c-format msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024" msgstr "аргумент --wal-segsize повинен бути ступенем 2 між 1 і 1024" -#: initdb.c:3292 +#: initdb.c:3223 #, c-format msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" msgstr "неприпустиме ім'я суперкористувача \"%s\"; імена ролей не можуть починатися на \"pg_\"" -#: initdb.c:3296 +#: initdb.c:3227 #, c-format msgid "The files belonging to this database system will be owned by user \"%s\".\n" "This user must also own the server process.\n\n" msgstr "Файли цієї бази даних будуть належати користувачеві \"%s\".\n" "Від імені цього користувача повинен запускатися процес сервера.\n\n" -#: initdb.c:3312 +#: initdb.c:3243 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Контроль цілісності сторінок даних увімкнено.\n" -#: initdb.c:3314 +#: initdb.c:3245 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Контроль цілісності сторінок даних вимкнено.\n" -#: initdb.c:3331 +#: initdb.c:3262 #, c-format msgid "\n" "Sync to disk skipped.\n" @@ -897,12 +907,12 @@ msgstr "\n" "Синхронізація з диском пропущена.\n" "Каталог з даними може бути пошкоджено під час аварійного завершення роботи операційної системи.\n" -#: initdb.c:3336 +#: initdb.c:3267 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "увімкнення автентифікації \"довіри\" для локальних підключень" -#: initdb.c:3337 +#: initdb.c:3268 #, c-format msgid "You can change this by editing pg_hba.conf or using the option -A, or\n" "--auth-local and --auth-host, the next time you run initdb.\n" @@ -910,11 +920,11 @@ msgstr "Ви можете змінити це, змінивши pg_hba.conf аб "--auth-local і --auth-host, наступний раз, коли ви запускаєте initdb.\n" #. translator: This is a placeholder in a shell command. -#: initdb.c:3362 +#: initdb.c:3293 msgid "logfile" msgstr "logfile" -#: initdb.c:3364 +#: initdb.c:3295 #, c-format msgid "\n" "Success. You can now start the database server using:\n\n" diff --git a/src/bin/pg_amcheck/nls.mk b/src/bin/pg_amcheck/nls.mk index 121529b1509b4..978eb8f7a9dec 100644 --- a/src/bin/pg_amcheck/nls.mk +++ b/src/bin/pg_amcheck/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_amcheck/nls.mk CATALOG_NAME = pg_amcheck -AVAIL_LANGUAGES = +AVAIL_LANGUAGES = fr GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \ pg_amcheck.c \ ../../fe_utils/cancel.c \ diff --git a/src/bin/pg_amcheck/po/fr.po b/src/bin/pg_amcheck/po/fr.po new file mode 100644 index 0000000000000..c26a1dc132aa1 --- /dev/null +++ b/src/bin/pg_amcheck/po/fr.po @@ -0,0 +1,464 @@ +# LANGUAGE message translation file for pg_amcheck +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_amcheck (PostgreSQL) package. +# FIRST AUTHOR , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_amcheck (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-04-26 06:48+0000\n" +"PO-Revision-Date: 2021-04-26 11:37+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "fatal : " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "erreur : " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "attention : " + +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Requête d'annulation envoyée\n" + +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 +msgid "Could not send cancel request: " +msgstr "N'a pas pu envoyer la requête d'annulation : " + +#: ../../fe_utils/connect_utils.c:92 +#, c-format +msgid "could not connect to database %s: out of memory" +msgstr "n'a pas pu se connecter à la base de données %s : plus de mémoire" + +#: ../../fe_utils/connect_utils.c:120 +#, c-format +msgid "%s" +msgstr "%s" + +#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 +#: pg_amcheck.c:1645 pg_amcheck.c:2084 +#, c-format +msgid "query failed: %s" +msgstr "échec de la requête : %s" + +#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 +#: pg_amcheck.c:597 pg_amcheck.c:1116 pg_amcheck.c:1646 pg_amcheck.c:2085 +#, c-format +msgid "query was: %s" +msgstr "la requête était : %s" + +#: pg_amcheck.c:332 +#, c-format +msgid "number of parallel jobs must be at least 1" +msgstr "le nombre maximum de jobs en parallèle doit être au moins de 1" + +#: pg_amcheck.c:405 +#, c-format +msgid "invalid skip option" +msgstr "option skip invalide" + +#: pg_amcheck.c:413 +#, c-format +msgid "invalid start block" +msgstr "bloc de début invalide" + +#: pg_amcheck.c:418 +#, c-format +msgid "start block out of bounds" +msgstr "bloc de début hors des limites" + +#: pg_amcheck.c:426 +#, c-format +msgid "invalid end block" +msgstr "bloc de fin invalide" + +#: pg_amcheck.c:431 +#, c-format +msgid "end block out of bounds" +msgstr "bloc de fin hors des limites" + +#: pg_amcheck.c:455 pg_amcheck.c:481 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Essayez « %s --help » pour plus d'informations.\n" + +#: pg_amcheck.c:463 +#, c-format +msgid "end block precedes start block" +msgstr "le bloc de fin précède le bloc de début" + +#: pg_amcheck.c:479 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" + +#: pg_amcheck.c:500 +#, c-format +msgid "cannot specify a database name with --all" +msgstr "ne peut pas spécifier un nom de base de données avec --all" + +#: pg_amcheck.c:509 +#, c-format +msgid "cannot specify both a database name and database patterns" +msgstr "ne peut pas spécifier à la fois le nom d'une base de données et des motifs de noms de base" + +#: pg_amcheck.c:539 +#, c-format +msgid "no databases to check" +msgstr "aucune base de données à vérifier" + +#: pg_amcheck.c:595 +#, c-format +msgid "database \"%s\": %s" +msgstr "base de données « %s » : %s" + +#: pg_amcheck.c:606 +#, c-format +msgid "skipping database \"%s\": amcheck is not installed" +msgstr "ignore la base « %s » : amcheck n'est pas installé" + +#: pg_amcheck.c:614 +#, c-format +msgid "in database \"%s\": using amcheck version \"%s\" in schema \"%s\"" +msgstr "dans la base de données « %s » : utilisation de la version « %s » d'amcheck dans le schéma « %s »" + +#: pg_amcheck.c:676 +#, c-format +msgid "no relations to check" +msgstr "aucune relation à vérifier" + +#: pg_amcheck.c:762 +#, c-format +msgid "checking heap table \"%s\".\"%s\".\"%s\"" +msgstr "vérification de la table heap « %s %s\".\"%s\"" + +#: pg_amcheck.c:778 +#, c-format +msgid "checking btree index \"%s\".\"%s\".\"%s\"" +msgstr "vérification de l'index btree \"%s\".\"%s\".\"%s\"" + +#: pg_amcheck.c:911 +#, c-format +msgid "error sending command to database \"%s\": %s" +msgstr "erreur de l'envoi d'une commande à la base de données « %s » : %s" + +#: pg_amcheck.c:914 +#, c-format +msgid "command was: %s" +msgstr "la commande était : %s" + +#: pg_amcheck.c:1113 +#, c-format +msgid "btree index \"%s\".\"%s\".\"%s\": btree checking function returned unexpected number of rows: %d" +msgstr "index btree \"%s\".\"%s\".\"%s\" : la fonction de vérification de btree a renvoyé un nombre de lignes inattendu : %d" + +#: pg_amcheck.c:1117 +#, c-format +msgid "are %s's and amcheck's versions compatible?" +msgstr "est-ce que les versions de %s et d'amcheck sont compatibles ?" + +#: pg_amcheck.c:1151 +#, c-format +msgid "" +"%s uses amcheck module to check objects in a PostgreSQL database for corruption.\n" +"\n" +msgstr "" +"%s utilise le module amcheck pour vérifier les objets dans une base PostgreSQL pour corruption.\n" +"\n" + +#: pg_amcheck.c:1152 +#, c-format +msgid "Usage:\n" +msgstr "Usage :\n" + +#: pg_amcheck.c:1153 +#, c-format +msgid " %s [OPTION]... [DBNAME]\n" +msgstr " %s [OPTION]... [NOMBASE]\n" + +#: pg_amcheck.c:1154 +#, c-format +msgid "" +"\n" +"Target Options:\n" +msgstr "" +"\n" +"Options de la cible :\n" + +#: pg_amcheck.c:1155 +#, c-format +msgid " -a, --all check all databases\n" +msgstr " -a, --all vérifie toutes les bases\n" + +#: pg_amcheck.c:1156 +#, c-format +msgid " -d, --database=PATTERN check matching database(s)\n" +msgstr " -d, --database=MOTIF vérifie les bases correspondantes\n" + +#: pg_amcheck.c:1157 +#, c-format +msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" +msgstr " -D, --exclude-database=MOTIF ne vérifie PAS les bases correspondantes\n" + +#: pg_amcheck.c:1158 +#, c-format +msgid " -i, --index=PATTERN check matching index(es)\n" +msgstr " -i, --index=MOTIF vérifie les index correspondants\n" + +#: pg_amcheck.c:1159 +#, c-format +msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" +msgstr " -I, --exclude-index=MOTIF ne vérifie PAS les index correspondants\n" + +#: pg_amcheck.c:1160 +#, c-format +msgid " -r, --relation=PATTERN check matching relation(s)\n" +msgstr " -r, --relation=MOTIF vérifie les relations correspondantes\n" + +#: pg_amcheck.c:1161 +#, c-format +msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" +msgstr " -R, --exclude-relation=MOTIF ne vérifie pas les relations correspondantes\n" + +#: pg_amcheck.c:1162 +#, c-format +msgid " -s, --schema=PATTERN check matching schema(s)\n" +msgstr " -s, --schema=MOTIF vérifie les schémas correspondants\n" + +#: pg_amcheck.c:1163 +#, c-format +msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" +msgstr " -S, --exclude-schema=MOTIF ne vérifie PAS les schémas correspondants\n" + +#: pg_amcheck.c:1164 +#, c-format +msgid " -t, --table=PATTERN check matching table(s)\n" +msgstr " -t, --table=MOTIF vérifie les tables correspondantes\n" + +#: pg_amcheck.c:1165 +#, c-format +msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" +msgstr " -T, --exclude-table=MOTIF ne vérifie PAS les tables correspondantes\n" + +#: pg_amcheck.c:1166 +#, c-format +msgid " --no-dependent-indexes do NOT expand list of relations to include indexes\n" +msgstr " --no-dependent-indexes n'étend PAS la liste des relations pour inclure les index\n" + +#: pg_amcheck.c:1167 +#, c-format +msgid " --no-dependent-toast do NOT expand list of relations to include toast\n" +msgstr " --no-dependent-toast n'étend PAS la liste des relations pour inclure les TOAST\n" + +#: pg_amcheck.c:1168 +#, c-format +msgid " --no-strict-names do NOT require patterns to match objects\n" +msgstr " --no-strict-names ne requiert PAS que les motifs correspondent à des objets\n" + +#: pg_amcheck.c:1169 +#, c-format +msgid "" +"\n" +"Table Checking Options:\n" +msgstr "" +"\n" +"Options de vérification des tables :\n" + +#: pg_amcheck.c:1170 +#, c-format +msgid " --exclude-toast-pointers do NOT follow relation toast pointers\n" +msgstr " --exclude-toast-pointers ne suit PAS les pointeurs de TOAST\n" + +#: pg_amcheck.c:1171 +#, c-format +msgid " --on-error-stop stop checking at end of first corrupt page\n" +msgstr " --on-error-stop arrête la vérification à la fin du premier bloc corrompu\n" + +#: pg_amcheck.c:1172 +#, c-format +msgid " --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n" +msgstr " --skip=OPTION ne vérifie PAS les blocs « all-frozen » et « all-visible »\n" + +#: pg_amcheck.c:1173 +#, c-format +msgid " --startblock=BLOCK begin checking table(s) at the given block number\n" +msgstr " --startblock=BLOC commence la vérification des tables au numéro de bloc indiqué\n" + +#: pg_amcheck.c:1174 +#, c-format +msgid " --endblock=BLOCK check table(s) only up to the given block number\n" +msgstr " --endblock=BLOC vérifie les tables jusqu'au numéro de bloc indiqué\n" + +#: pg_amcheck.c:1175 +#, c-format +msgid "" +"\n" +"Btree Index Checking Options:\n" +msgstr "" +"\n" +"Options de vérification des index Btree :\n" + +#: pg_amcheck.c:1176 +#, c-format +msgid " --heapallindexed check all heap tuples are found within indexes\n" +msgstr " --heapallindexed vérifie que tous les enregistrements de la table sont référencés dans les index\n" + +#: pg_amcheck.c:1177 +#, c-format +msgid " --parent-check check index parent/child relationships\n" +msgstr " --parent-check vérifie les relations parent/enfants dans les index\n" + +#: pg_amcheck.c:1178 +#, c-format +msgid " --rootdescend search from root page to refind tuples\n" +msgstr " --rootdescend recherche à partir de la racine pour trouver les lignes\n" + +#: pg_amcheck.c:1179 +#, c-format +msgid "" +"\n" +"Connection options:\n" +msgstr "" +"\n" +"Options de connexion :\n" + +#: pg_amcheck.c:1180 +#, c-format +msgid " -h, --host=HOSTNAME database server host or socket directory\n" +msgstr " -h, --host=HOSTNAME IP/alias du serveur ou répertoire du socket\n" + +#: pg_amcheck.c:1181 +#, c-format +msgid " -p, --port=PORT database server port\n" +msgstr " -p, --port=PORT port du serveur de bases de données\n" + +#: pg_amcheck.c:1182 +#, c-format +msgid " -U, --username=USERNAME user name to connect as\n" +msgstr " -U, --username=NOM_UTILSATEUR nom d'utilisateur pour la connexion\n" + +#: pg_amcheck.c:1183 +#, c-format +msgid " -w, --no-password never prompt for password\n" +msgstr " -w, --no-password ne demande jamais un mot de passe\n" + +#: pg_amcheck.c:1184 +#, c-format +msgid " -W, --password force password prompt\n" +msgstr " -W, --password force la saisie d'un mot de passe\n" + +#: pg_amcheck.c:1185 +#, c-format +msgid " --maintenance-db=DBNAME alternate maintenance database\n" +msgstr " --maintenance-db=NOM_BASE change la base de maintenance\n" + +#: pg_amcheck.c:1186 +#, c-format +msgid "" +"\n" +"Other Options:\n" +msgstr "" +"\n" +"Autres options:\n" + +#: pg_amcheck.c:1187 +#, c-format +msgid " -e, --echo show the commands being sent to the server\n" +msgstr " -e, --echo affiche les commandes envoyées au serveur\n" + +#: pg_amcheck.c:1188 +#, c-format +msgid " -j, --jobs=NUM use this many concurrent connections to the server\n" +msgstr " -j, --jobs=NOMBRE utilise ce nombre de connexions simultanées au serveur\n" + +#: pg_amcheck.c:1189 +#, c-format +msgid " -q, --quiet don't write any messages\n" +msgstr " -q, --quiet n'écrit aucun message\n" + +#: pg_amcheck.c:1190 +#, c-format +msgid " -v, --verbose write a lot of output\n" +msgstr " -v, --verbose mode verbeux\n" + +#: pg_amcheck.c:1191 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version affiche la version, puis quitte\n" + +#: pg_amcheck.c:1192 +#, c-format +msgid " -P, --progress show progress information\n" +msgstr " -P, --progress affiche la progression\n" + +#: pg_amcheck.c:1193 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help affiche cette aide, puis quitte\n" + +#: pg_amcheck.c:1194 +#, c-format +msgid " --install-missing install missing extensions\n" +msgstr " --install-missing installe les extensions manquantes\n" + +#: pg_amcheck.c:1196 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Rapporter les bogues à <%s>.\n" + +#: pg_amcheck.c:1197 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "page d'accueil de %s : <%s>\n" + +#: pg_amcheck.c:1255 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%) %*s" +msgstr "relations %*s/%s (%d%%) pages %*s/%s (%d%%) %*s" + +#: pg_amcheck.c:1266 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%), (%s%-*.*s)" +msgstr "relations %*s/%s (%d%%) pages %*s/%s (%d%%), (%s%-*.*s)" + +#: pg_amcheck.c:1281 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%)" +msgstr "relations %*s/%s (%d%%) pages %*s/%s (%d%%)" + +#: pg_amcheck.c:1550 pg_amcheck.c:1692 +#, c-format +msgid "including database: \"%s\"" +msgstr "en incluant la base de données : « %s »" + +#: pg_amcheck.c:1672 +#, c-format +msgid "internal error: received unexpected database pattern_id %d" +msgstr "erreur interne : a reçu un pattern_id %d inattendu de la base" + +#: pg_amcheck.c:2126 +#, c-format +msgid "internal error: received unexpected relation pattern_id %d" +msgstr "erreur interne : a reçu un pattern_id %d inattendu de la relation" + +#~ msgid "number of parallel jobs must be at least 1\n" +#~ msgstr "le nombre de jobs parallèles doit être au moins de 1\n" diff --git a/src/bin/pg_archivecleanup/po/cs.po b/src/bin/pg_archivecleanup/po/cs.po index c7f87a76a8488..3a9419cd5f186 100644 --- a/src/bin/pg_archivecleanup/po/cs.po +++ b/src/bin/pg_archivecleanup/po/cs.po @@ -7,71 +7,68 @@ msgid "" msgstr "" "Project-Id-Version: pg_archivecleanup (PostgreSQL) 11\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:15+0000\n" -"PO-Revision-Date: 2019-09-28 11:28+0200\n" +"POT-Creation-Date: 2020-10-31 16:16+0000\n" +"PO-Revision-Date: 2020-10-31 21:37+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format -#| msgid "fatal\n" msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format -#| msgid "SQL error: %s\n" msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format -#| msgid "warning" msgid "warning: " msgstr "warning: " -#: pg_archivecleanup.c:68 +#: pg_archivecleanup.c:66 #, c-format msgid "archive location \"%s\" does not exist" msgstr "archivní lokace \"%s\" neexistuje" -#: pg_archivecleanup.c:154 +#: pg_archivecleanup.c:152 #, c-format msgid "could not remove file \"%s\": %m" msgstr "nelze odstranit soubor \"%s\": %m" -#: pg_archivecleanup.c:162 +#: pg_archivecleanup.c:160 #, c-format msgid "could not read archive location \"%s\": %m" msgstr "nelze načíst archivní lokaci \"%s\": %m" -#: pg_archivecleanup.c:165 +#: pg_archivecleanup.c:163 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "nelze uzavřít archivní lokaci \"%s\": %m" -#: pg_archivecleanup.c:169 +#: pg_archivecleanup.c:167 #, c-format msgid "could not open archive location \"%s\": %m" msgstr "nelze otevřít archivní lokaci \"%s\": %m" -#: pg_archivecleanup.c:242 +#: pg_archivecleanup.c:240 #, c-format msgid "invalid file name argument" msgstr "chybný argument jména souboru" -#: pg_archivecleanup.c:243 pg_archivecleanup.c:316 pg_archivecleanup.c:337 -#: pg_archivecleanup.c:349 pg_archivecleanup.c:356 +#: pg_archivecleanup.c:241 pg_archivecleanup.c:315 pg_archivecleanup.c:336 +#: pg_archivecleanup.c:348 pg_archivecleanup.c:355 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" -#: pg_archivecleanup.c:256 +#: pg_archivecleanup.c:254 #, c-format msgid "" "%s removes older WAL files from PostgreSQL archives.\n" @@ -80,17 +77,17 @@ msgstr "" "%s odstraní starší WAL soubory z PostgreSQL archivů.\n" "\n" -#: pg_archivecleanup.c:257 +#: pg_archivecleanup.c:255 #, c-format msgid "Usage:\n" msgstr "Použití:\n" -#: pg_archivecleanup.c:258 +#: pg_archivecleanup.c:256 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" msgstr " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:257 #, c-format msgid "" "\n" @@ -99,32 +96,32 @@ msgstr "" "\n" "Přepínače:\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:258 #, c-format msgid " -d generate debug output (verbose mode)\n" msgstr " -d vygeneruje debug výstup (více informací)\n" -#: pg_archivecleanup.c:261 +#: pg_archivecleanup.c:259 #, c-format msgid " -n dry run, show the names of the files that would be removed\n" msgstr " -n zkušební běh, ukazuje jména souborů které by byly odstraněny\n" -#: pg_archivecleanup.c:262 +#: pg_archivecleanup.c:260 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version vypíše informaci o verzi, pak skončí\n" -#: pg_archivecleanup.c:263 +#: pg_archivecleanup.c:261 #, c-format msgid " -x EXT clean up files if they have this extension\n" msgstr " -x EXT vyčistí soubory pokud mají tuto příponu\n" -#: pg_archivecleanup.c:264 +#: pg_archivecleanup.c:262 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ukáže tuto nápovědu, a skončí\n" -#: pg_archivecleanup.c:265 +#: pg_archivecleanup.c:263 #, c-format msgid "" "\n" @@ -139,7 +136,7 @@ msgstr "" "e.g.\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" -#: pg_archivecleanup.c:270 +#: pg_archivecleanup.c:268 #, c-format msgid "" "\n" @@ -152,38 +149,50 @@ msgstr "" "e.g.\n" " pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:274 +#: pg_archivecleanup.c:272 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Chyby hlaste na adresu .\n" +"Chyby hlašte na <%s>.\n" -#: pg_archivecleanup.c:336 +#: pg_archivecleanup.c:273 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" + +#: pg_archivecleanup.c:335 #, c-format msgid "must specify archive location" msgstr "nutno zadat archivní lokaci" -#: pg_archivecleanup.c:348 +#: pg_archivecleanup.c:347 #, c-format msgid "must specify oldest kept WAL file" msgstr "nutno zadat nejstarčí uchovávaný WAL soubor" -#: pg_archivecleanup.c:355 +#: pg_archivecleanup.c:354 #, c-format msgid "too many command-line arguments" msgstr "příliš mnoho argumentů na příkazové řádce" -#~ msgid "%s: keeping WAL file \"%s\" and later\n" -#~ msgstr "%s: uchovávám WAL soubor \"%s\" a novější\n" +#~ msgid "%s: file \"%s\" would be removed\n" +#~ msgstr "%s: soubor \"%s\" by byl odstraněn\n" + +#~ msgid "%s: removing file \"%s\"\n" +#~ msgstr "%s: odstraňuji soubor \"%s\"\n" #~ msgid "%s: ERROR: could not remove file \"%s\": %s\n" #~ msgstr "%s: ERROR: nelze odstranit soubor \"%s\": %s\n" -#~ msgid "%s: removing file \"%s\"\n" -#~ msgstr "%s: odstraňuji soubor \"%s\"\n" +#~ msgid "%s: keeping WAL file \"%s\" and later\n" +#~ msgstr "%s: uchovávám WAL soubor \"%s\" a novější\n" -#~ msgid "%s: file \"%s\" would be removed\n" -#~ msgstr "%s: soubor \"%s\" by byl odstraněn\n" +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Chyby hlaste na adresu .\n" diff --git a/src/bin/pg_archivecleanup/po/es.po b/src/bin/pg_archivecleanup/po/es.po index f0350a1385ddc..91289be776b45 100644 --- a/src/bin/pg_archivecleanup/po/es.po +++ b/src/bin/pg_archivecleanup/po/es.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_archivecleanup (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:47+0000\n" -"PO-Revision-Date: 2019-06-06 17:21-0400\n" +"POT-Creation-Date: 2020-09-13 10:47+0000\n" +"PO-Revision-Date: 2020-09-12 23:13-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -156,11 +156,13 @@ msgid "" "\n" "Report bugs to <%s>.\n" msgstr "" +"\n" +"Reporte errores a <%s>.\n" #: pg_archivecleanup.c:273 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" #: pg_archivecleanup.c:335 #, c-format @@ -176,10 +178,3 @@ msgstr "debe especificar el fichero WAL más antiguo a mantener" #, c-format msgid "too many command-line arguments" msgstr "demasiados argumentos de línea de órdenes" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Reporte errores a .\n" diff --git a/src/bin/pg_archivecleanup/po/fr.po b/src/bin/pg_archivecleanup/po/fr.po index 02749f8a637fe..2280202a36ca6 100644 --- a/src/bin/pg_archivecleanup/po/fr.po +++ b/src/bin/pg_archivecleanup/po/fr.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_archivecleanup (PostgreSQL) 12\n" +"Project-Id-Version: pg_archivecleanup (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2020-04-16 06:16+0000\n" "PO-Revision-Date: 2020-04-16 13:39+0200\n" diff --git a/src/bin/pg_archivecleanup/po/ja.po b/src/bin/pg_archivecleanup/po/ja.po index c1d079a6dfed5..9a5d1b277e104 100644 --- a/src/bin/pg_archivecleanup/po/ja.po +++ b/src/bin/pg_archivecleanup/po/ja.po @@ -4,75 +4,70 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_archivecleanup (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: pg_archivecleanup (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-06-06 10:43+0900\n" -"PO-Revision-Date: 2019-06-06 17:02+0900\n" +"POT-Creation-Date: 2020-08-21 15:54+0900\n" +"PO-Revision-Date: 2020-09-13 08:55+0200\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:241 #, c-format msgid "fatal: " msgstr "致命的エラー: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:248 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:255 #, c-format msgid "warning: " msgstr "警告: " -#: pg_archivecleanup.c:68 +#: pg_archivecleanup.c:66 #, c-format -#| msgid "%s: archive location \"%s\" does not exist\n" msgid "archive location \"%s\" does not exist" msgstr "アーカイブの場所\"%s\"が存在しません" -#: pg_archivecleanup.c:154 +#: pg_archivecleanup.c:152 #, c-format msgid "could not remove file \"%s\": %m" msgstr "ファイル\"%s\"を削除できませんでした: %m" -#: pg_archivecleanup.c:162 +#: pg_archivecleanup.c:160 #, c-format -#| msgid "%s: could not read archive location \"%s\": %s\n" msgid "could not read archive location \"%s\": %m" msgstr "アーカイブの場所\"%s\"を読み込めませんでした: %m" -#: pg_archivecleanup.c:165 +#: pg_archivecleanup.c:163 #, c-format -#| msgid "%s: could not close archive location \"%s\": %s\n" msgid "could not close archive location \"%s\": %m" msgstr "アーカイブの場所\"%s\"をクローズできませんでした: %m" -#: pg_archivecleanup.c:169 +#: pg_archivecleanup.c:167 #, c-format -#| msgid "%s: could not open archive location \"%s\": %s\n" msgid "could not open archive location \"%s\": %m" msgstr "アーカイブの場所\"%s\"をオープンできませんでした: %m" -#: pg_archivecleanup.c:242 +#: pg_archivecleanup.c:240 #, c-format -#| msgid "%s: invalid file name argument\n" msgid "invalid file name argument" msgstr "ファイル名引数が無効です" -#: pg_archivecleanup.c:243 pg_archivecleanup.c:316 pg_archivecleanup.c:337 -#: pg_archivecleanup.c:349 pg_archivecleanup.c:356 +#: pg_archivecleanup.c:241 pg_archivecleanup.c:315 pg_archivecleanup.c:336 +#: pg_archivecleanup.c:348 pg_archivecleanup.c:355 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "\"%s --help\"で詳細が参照できます。\n" -#: pg_archivecleanup.c:256 +#: pg_archivecleanup.c:254 #, c-format msgid "" "%s removes older WAL files from PostgreSQL archives.\n" @@ -81,18 +76,17 @@ msgstr "" "%sはPostgreSQLのアーカイブから古いWALファイルを削除します。\n" "\n" -#: pg_archivecleanup.c:257 +#: pg_archivecleanup.c:255 #, c-format msgid "Usage:\n" msgstr "使用法:\n" -#: pg_archivecleanup.c:258 +#: pg_archivecleanup.c:256 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" -msgstr "" -"%s [オプション] ... {アーカイブの場所} {保存する最古の WAL ファイル名}\n" +msgstr "%s [オプション] ... {アーカイブの場所} {保存する最古の WAL ファイル名}\n" -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:257 #, c-format msgid "" "\n" @@ -101,112 +95,96 @@ msgstr "" "\n" "オプション:\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:258 #, c-format msgid " -d generate debug output (verbose mode)\n" msgstr " -d デバッグ情報を出力(冗長モード)\n" -#: pg_archivecleanup.c:261 +#: pg_archivecleanup.c:259 #, c-format -msgid "" -" -n dry run, show the names of the files that would be removed\n" +msgid " -n dry run, show the names of the files that would be removed\n" msgstr " -n リハーサル、削除対象のファイル名を表示\n" -#: pg_archivecleanup.c:262 +#: pg_archivecleanup.c:260 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を出力して終了\n" -#: pg_archivecleanup.c:263 +#: pg_archivecleanup.c:261 #, c-format msgid " -x EXT clean up files if they have this extension\n" msgstr " -x EXT この拡張子を持つファイルを削除対象とする\n" -#: pg_archivecleanup.c:264 +#: pg_archivecleanup.c:262 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_archivecleanup.c:265 -#, c-format -#| msgid "" -#| "\n" -#| "For use as archive_cleanup_command in recovery.conf when standby_mode = " -#| "on:\n" -#| " archive_cleanup_command = 'pg_archivecleanup [OPTION]... " -#| "ARCHIVELOCATION %%r'\n" -#| "e.g.\n" -#| " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir " -#| "%%r'\n" +#: pg_archivecleanup.c:263 +#, c-format msgid "" "\n" "For use as archive_cleanup_command in postgresql.conf:\n" -" archive_cleanup_command = 'pg_archivecleanup [OPTION]... ARCHIVELOCATION " -"%%r'\n" +" archive_cleanup_command = 'pg_archivecleanup [OPTION]... ARCHIVELOCATION %%r'\n" "e.g.\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" msgstr "" "\n" -"postgresql.confでarchive_cleanup_commandとして使用する場合は以下のようにしま" -"す:\n" -" archive_cleanup_command = 'pg_archivecleanup [オプション]... アーカイブの場" -"所 %%r'\n" +"postgresql.confでarchive_cleanup_commandとして使用する場合は以下のようにします:\n" +" archive_cleanup_command = 'pg_archivecleanup [オプション]... アーカイブの場所 %%r'\n" "例としては:\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" -#: pg_archivecleanup.c:270 +#: pg_archivecleanup.c:268 #, c-format msgid "" "\n" "Or for use as a standalone archive cleaner:\n" "e.g.\n" -" pg_archivecleanup /mnt/server/archiverdir " -"000000010000000000000010.00000020.backup\n" +" pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010.00000020.backup\n" msgstr "" "\n" "もしくはスタンドアロンのアーカイブクリーナーとして使う場合は:\n" "使用例\n" -" pg_archivecleanup /mnt/server/archiverdir " -"000000010000000000000010.00000020.backup\n" +" pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:274 +#: pg_archivecleanup.c:272 #, c-format -#| msgid "" -#| "\n" -#| "Report bugs to .\n" msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"バグは に報告してください。\n" +"バグは<%s>に報告してください。\n" + +#: pg_archivecleanup.c:273 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" -#: pg_archivecleanup.c:336 +#: pg_archivecleanup.c:335 #, c-format -#| msgid "%s: must specify archive location\n" msgid "must specify archive location" msgstr "アーカイブの場所を指定してください" -#: pg_archivecleanup.c:348 +#: pg_archivecleanup.c:347 #, c-format -#| msgid "%s: must specify oldest kept WAL file\n" msgid "must specify oldest kept WAL file" msgstr "保存する最古のWALファイルを指定してください" -#: pg_archivecleanup.c:355 +#: pg_archivecleanup.c:354 #, c-format -#| msgid "%s: too many command-line arguments\n" msgid "too many command-line arguments" msgstr "コマンドライン引数が多すぎます" -#~ msgid "%s: keeping WAL file \"%s\" and later\n" -#~ msgstr "%s: WAL file \"%s\" とそれ以降の分を保存しています\n" - -#~ msgid "%s: ERROR: could not remove file \"%s\": %s\n" -#~ msgstr "%s: エラー: ファイル \"%s\" を削除できませんでした: %s\n" +#~ msgid "%s: file \"%s\" would be removed\n" +#~ msgstr "%s: ファイル \"%s\" は削除されます\n" #~ msgid "%s: removing file \"%s\"\n" #~ msgstr "%s: ファイル \"%s\" を削除しています\n" -#~ msgid "%s: file \"%s\" would be removed\n" -#~ msgstr "%s: ファイル \"%s\" は削除されます\n" +#~ msgid "%s: ERROR: could not remove file \"%s\": %s\n" +#~ msgstr "%s: エラー: ファイル \"%s\" を削除できませんでした: %s\n" + +#~ msgid "%s: keeping WAL file \"%s\" and later\n" +#~ msgstr "%s: WAL file \"%s\" とそれ以降の分を保存しています\n" diff --git a/src/bin/pg_archivecleanup/po/ko.po b/src/bin/pg_archivecleanup/po/ko.po index 2a3a2fb620ea8..785839ab2fd4a 100644 --- a/src/bin/pg_archivecleanup/po/ko.po +++ b/src/bin/pg_archivecleanup/po/ko.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_archivecleanup (PostgreSQL) 12\n" +"Project-Id-Version: pg_archivecleanup (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:16+0000\n" -"PO-Revision-Date: 2019-10-31 11:13+0900\n" +"POT-Creation-Date: 2020-10-05 01:16+0000\n" +"PO-Revision-Date: 2020-10-05 17:51+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean \n" "Language: ko\n" @@ -17,58 +17,58 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "심각: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "오류: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "경고: " -#: pg_archivecleanup.c:68 +#: pg_archivecleanup.c:66 #, c-format msgid "archive location \"%s\" does not exist" msgstr "\"%s\" 이름의 아카이브 위치가 없음" -#: pg_archivecleanup.c:154 +#: pg_archivecleanup.c:152 #, c-format msgid "could not remove file \"%s\": %m" msgstr "\"%s\" 파일을 삭제할 수 없음: %m" -#: pg_archivecleanup.c:162 +#: pg_archivecleanup.c:160 #, c-format msgid "could not read archive location \"%s\": %m" msgstr "\"%s\" 아카이브 위치를 읽을 수 없음: %m" -#: pg_archivecleanup.c:165 +#: pg_archivecleanup.c:163 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "\"%s\" 아카이브 위치를 닫을 수 없음: %m" -#: pg_archivecleanup.c:169 +#: pg_archivecleanup.c:167 #, c-format msgid "could not open archive location \"%s\": %m" msgstr "\"%s\" 아카이브 위치를 열 수 없음: %m" -#: pg_archivecleanup.c:242 +#: pg_archivecleanup.c:240 #, c-format msgid "invalid file name argument" msgstr "잘못된 파일 이름 매개변수" -#: pg_archivecleanup.c:243 pg_archivecleanup.c:316 pg_archivecleanup.c:337 -#: pg_archivecleanup.c:349 pg_archivecleanup.c:356 +#: pg_archivecleanup.c:241 pg_archivecleanup.c:315 pg_archivecleanup.c:336 +#: pg_archivecleanup.c:348 pg_archivecleanup.c:355 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "보다 자세한 정보는 \"%s --help\" 명령을 참조하세요.\n" -#: pg_archivecleanup.c:256 +#: pg_archivecleanup.c:254 #, c-format msgid "" "%s removes older WAL files from PostgreSQL archives.\n" @@ -78,17 +78,17 @@ msgstr "" "WAL 파일을 지웁니다.\n" "\n" -#: pg_archivecleanup.c:257 +#: pg_archivecleanup.c:255 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: pg_archivecleanup.c:258 +#: pg_archivecleanup.c:256 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" msgstr " %s [옵션]... 아카이브위치 보관할제일오래된파일\n" -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:257 #, c-format msgid "" "\n" @@ -97,33 +97,33 @@ msgstr "" "\n" "옵션들:\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:258 #, c-format msgid " -d generate debug output (verbose mode)\n" msgstr " -d 보다 자세한 작업 내용 출력\n" -#: pg_archivecleanup.c:261 +#: pg_archivecleanup.c:259 #, c-format msgid "" " -n dry run, show the names of the files that would be removed\n" msgstr " -n 지울 대상만 확인하고 지우지는 않음\n" -#: pg_archivecleanup.c:262 +#: pg_archivecleanup.c:260 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: pg_archivecleanup.c:263 +#: pg_archivecleanup.c:261 #, c-format msgid " -x EXT clean up files if they have this extension\n" msgstr " -x EXT 해당 확장자 파일들을 작업 대상으로 함\n" -#: pg_archivecleanup.c:264 +#: pg_archivecleanup.c:262 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 도움말을 보여주고 마침\n" -#: pg_archivecleanup.c:265 +#: pg_archivecleanup.c:263 #, c-format msgid "" "\n" @@ -139,7 +139,7 @@ msgstr "" "사용예:\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" -#: pg_archivecleanup.c:270 +#: pg_archivecleanup.c:268 #, c-format msgid "" "\n" @@ -154,26 +154,31 @@ msgstr "" " pg_archivecleanup /mnt/server/archiverdir " "000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:274 +#: pg_archivecleanup.c:272 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"문제점 보고 .\n" +"문제점 보고 주소: <%s>\n" + +#: pg_archivecleanup.c:273 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" -#: pg_archivecleanup.c:336 +#: pg_archivecleanup.c:335 #, c-format msgid "must specify archive location" msgstr "아카이브 위치는 지정해야 함" -#: pg_archivecleanup.c:348 +#: pg_archivecleanup.c:347 #, c-format msgid "must specify oldest kept WAL file" msgstr "남길 가장 오래된 WAL 파일은 지정해야 함" -#: pg_archivecleanup.c:355 +#: pg_archivecleanup.c:354 #, c-format msgid "too many command-line arguments" msgstr "너무 많은 명령행 인자를 지정했음" diff --git a/src/bin/pg_archivecleanup/po/ru.po b/src/bin/pg_archivecleanup/po/ru.po index 579026ecba768..ec22c128e8418 100644 --- a/src/bin/pg_archivecleanup/po/ru.po +++ b/src/bin/pg_archivecleanup/po/ru.po @@ -1,13 +1,13 @@ # Russian message translation file for pg_archivecleanup # Copyright (C) 2017 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2017, 2019. +# Alexander Lakhin , 2017, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: pg_archivecleanup (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-09 12:21+0300\n" -"PO-Revision-Date: 2019-08-28 14:04+0300\n" +"POT-Creation-Date: 2020-09-03 11:22+0300\n" +"PO-Revision-Date: 2020-09-03 12:40+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -17,58 +17,58 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "важно: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "ошибка: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "предупреждение: " -#: pg_archivecleanup.c:68 +#: pg_archivecleanup.c:66 #, c-format msgid "archive location \"%s\" does not exist" msgstr "расположение архива \"%s\" не существует" -#: pg_archivecleanup.c:154 +#: pg_archivecleanup.c:152 #, c-format msgid "could not remove file \"%s\": %m" msgstr "не удалось стереть файл \"%s\": %m" -#: pg_archivecleanup.c:162 +#: pg_archivecleanup.c:160 #, c-format msgid "could not read archive location \"%s\": %m" msgstr "не удалось прочитать расположение архива \"%s\": %m" -#: pg_archivecleanup.c:165 +#: pg_archivecleanup.c:163 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "не удалось закрыть расположение архива \"%s\": %m" -#: pg_archivecleanup.c:169 +#: pg_archivecleanup.c:167 #, c-format msgid "could not open archive location \"%s\": %m" msgstr "не удалось открыть расположение архива \"%s\": %m" -#: pg_archivecleanup.c:242 +#: pg_archivecleanup.c:240 #, c-format msgid "invalid file name argument" msgstr "неверный аргумент с именем файла" -#: pg_archivecleanup.c:243 pg_archivecleanup.c:316 pg_archivecleanup.c:337 -#: pg_archivecleanup.c:349 pg_archivecleanup.c:356 +#: pg_archivecleanup.c:241 pg_archivecleanup.c:315 pg_archivecleanup.c:336 +#: pg_archivecleanup.c:348 pg_archivecleanup.c:355 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_archivecleanup.c:256 +#: pg_archivecleanup.c:254 #, c-format msgid "" "%s removes older WAL files from PostgreSQL archives.\n" @@ -77,18 +77,18 @@ msgstr "" "%s удаляет старые файлы WAL из архивов PostgreSQL.\n" "\n" -#: pg_archivecleanup.c:257 +#: pg_archivecleanup.c:255 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_archivecleanup.c:258 +#: pg_archivecleanup.c:256 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" msgstr "" " %s [ПАРАМЕТР]... РАСПОЛОЖЕНИЕ_АРХИВА СТАРЕЙШИЙ_СОХРАНЯЕМЫЙ_ФАЙЛ_WAL\n" -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:257 #, c-format msgid "" "\n" @@ -97,12 +97,12 @@ msgstr "" "\n" "Параметры:\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:258 #, c-format msgid " -d generate debug output (verbose mode)\n" msgstr " -d генерировать подробные сообщения (отладочный режим)\n" -#: pg_archivecleanup.c:261 +#: pg_archivecleanup.c:259 #, c-format msgid "" " -n dry run, show the names of the files that would be removed\n" @@ -110,23 +110,23 @@ msgstr "" " -n холостой запуск, только показать имена файлов, которые " "будут удалены\n" -#: pg_archivecleanup.c:262 +#: pg_archivecleanup.c:260 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" # well-spelled: РСШ -#: pg_archivecleanup.c:263 +#: pg_archivecleanup.c:261 #, c-format msgid " -x EXT clean up files if they have this extension\n" msgstr " -x РСШ убрать файлы с заданным расширением\n" -#: pg_archivecleanup.c:264 +#: pg_archivecleanup.c:262 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_archivecleanup.c:265 +#: pg_archivecleanup.c:263 #, c-format msgid "" "\n" @@ -143,7 +143,7 @@ msgstr "" "например:\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" -#: pg_archivecleanup.c:270 +#: pg_archivecleanup.c:268 #, c-format msgid "" "\n" @@ -158,30 +158,42 @@ msgstr "" " pg_archivecleanup /mnt/server/archiverdir " "000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:274 +#: pg_archivecleanup.c:272 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Об ошибках сообщайте по адресу .\n" +"Об ошибках сообщайте по адресу <%s>.\n" + +#: pg_archivecleanup.c:273 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" -#: pg_archivecleanup.c:336 +#: pg_archivecleanup.c:335 #, c-format msgid "must specify archive location" msgstr "необходимо задать расположение архива" -#: pg_archivecleanup.c:348 +#: pg_archivecleanup.c:347 #, c-format msgid "must specify oldest kept WAL file" msgstr "необходимо задать имя старейшего сохраняемого файла WAL" -#: pg_archivecleanup.c:355 +#: pg_archivecleanup.c:354 #, c-format msgid "too many command-line arguments" msgstr "слишком много аргументов командной строки" +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Об ошибках сообщайте по адресу .\n" + #~ msgid "%s: file \"%s\" would be removed\n" #~ msgstr "%s: файл \"%s\" не будет удалён\n" diff --git a/src/bin/pg_archivecleanup/po/uk.po b/src/bin/pg_archivecleanup/po/uk.po index 61b792b791595..3458cea869d99 100644 --- a/src/bin/pg_archivecleanup/po/uk.po +++ b/src/bin/pg_archivecleanup/po/uk.po @@ -2,118 +2,120 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-08 14:46+0000\n" -"PO-Revision-Date: 2019-12-20 20:23\n" +"POT-Creation-Date: 2020-09-21 21:17+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" "Last-Translator: pasha_golub\n" "Language-Team: Ukrainian\n" -"Language: uk_UA\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" "X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_12_STABLE/pg_archivecleanup.pot\n" +"X-Crowdin-File: /DEV_13/pg_archivecleanup.pot\n" +"X-Crowdin-File-ID: 488\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "збій: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "помилка: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "попередження: " -#: pg_archivecleanup.c:68 +#: pg_archivecleanup.c:66 #, c-format msgid "archive location \"%s\" does not exist" msgstr "архівного розташування \"%s\" не існує" -#: pg_archivecleanup.c:154 +#: pg_archivecleanup.c:152 #, c-format msgid "could not remove file \"%s\": %m" msgstr "не можливо видалити файл \"%s\": %m" -#: pg_archivecleanup.c:162 +#: pg_archivecleanup.c:160 #, c-format msgid "could not read archive location \"%s\": %m" msgstr "не вдалося прочитати архівне розташування \"%s\":%m" -#: pg_archivecleanup.c:165 +#: pg_archivecleanup.c:163 #, c-format msgid "could not close archive location \"%s\": %m" msgstr "не вдалося закрити архівне розташування \"%s\":%m" -#: pg_archivecleanup.c:169 +#: pg_archivecleanup.c:167 #, c-format msgid "could not open archive location \"%s\": %m" msgstr "не вдалося відкрити архівне розташування \"%s\":%m" -#: pg_archivecleanup.c:242 +#: pg_archivecleanup.c:240 #, c-format msgid "invalid file name argument" msgstr "недійсна назва файла з аргументом" -#: pg_archivecleanup.c:243 pg_archivecleanup.c:316 pg_archivecleanup.c:337 -#: pg_archivecleanup.c:349 pg_archivecleanup.c:356 +#: pg_archivecleanup.c:241 pg_archivecleanup.c:315 pg_archivecleanup.c:336 +#: pg_archivecleanup.c:348 pg_archivecleanup.c:355 #, c-format msgid "Try \"%s --help\" for more information.\n" -msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" -#: pg_archivecleanup.c:256 +#: pg_archivecleanup.c:254 #, c-format msgid "%s removes older WAL files from PostgreSQL archives.\n\n" msgstr "%s видаляє старі WAL-файли з архівів PostgreSQL.\n\n" -#: pg_archivecleanup.c:257 +#: pg_archivecleanup.c:255 #, c-format msgid "Usage:\n" msgstr "Використання:\n" -#: pg_archivecleanup.c:258 +#: pg_archivecleanup.c:256 #, c-format msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" msgstr " %s [OPTION]... РОЗТАШУВАННЯ_АРХІВА НАЙДАВНІШИЙ_ЗБЕРЕЖЕНИЙ_WAL_ФАЙЛ\n" -#: pg_archivecleanup.c:259 +#: pg_archivecleanup.c:257 #, c-format msgid "\n" "Options:\n" msgstr "\n" "Параметри:\n" -#: pg_archivecleanup.c:260 +#: pg_archivecleanup.c:258 #, c-format msgid " -d generate debug output (verbose mode)\n" msgstr " -d генерує налагоджувальні повідомлення (детальний режим)\n" -#: pg_archivecleanup.c:261 +#: pg_archivecleanup.c:259 #, c-format msgid " -n dry run, show the names of the files that would be removed\n" msgstr " -n сухий запуск, показує тільки ті файли, які будуть видалені\n" -#: pg_archivecleanup.c:262 +#: pg_archivecleanup.c:260 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показати версію, потім вийти\n" -#: pg_archivecleanup.c:263 +#: pg_archivecleanup.c:261 #, c-format msgid " -x EXT clean up files if they have this extension\n" msgstr " -x EXT прибрати файли з цим розширенням\n" -#: pg_archivecleanup.c:264 +#: pg_archivecleanup.c:262 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показати цю довідку, потім вийти\n" -#: pg_archivecleanup.c:265 +#: pg_archivecleanup.c:263 #, c-format msgid "\n" "For use as archive_cleanup_command in postgresql.conf:\n" @@ -126,7 +128,7 @@ msgstr "\n" "напр.\n" " archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" -#: pg_archivecleanup.c:270 +#: pg_archivecleanup.c:268 #, c-format msgid "\n" "Or for use as a standalone archive cleaner:\n" @@ -137,25 +139,37 @@ msgstr "\n" "наприклад:\n" " pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010.00000020.backup\n" -#: pg_archivecleanup.c:274 +#: pg_archivecleanup.c:272 #, c-format msgid "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "\n" -"Про помилки повідомляйте на .\n" +"Повідомляти про помилки на <%s>.\n" + +#: pg_archivecleanup.c:273 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" -#: pg_archivecleanup.c:336 +#: pg_archivecleanup.c:335 #, c-format msgid "must specify archive location" msgstr "необхідно вказати розташування архіва" -#: pg_archivecleanup.c:348 +#: pg_archivecleanup.c:347 #, c-format msgid "must specify oldest kept WAL file" msgstr "необхідно вказати найдавніший збережений WAL-файл" -#: pg_archivecleanup.c:355 +#: pg_archivecleanup.c:354 #, c-format msgid "too many command-line arguments" msgstr "занадто багато аргументів командного рядка" +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Про помилки повідомляйте на .\n" + diff --git a/src/bin/pg_basebackup/nls.mk b/src/bin/pg_basebackup/nls.mk index 1eae6f2423021..2d521f0683475 100644 --- a/src/bin/pg_basebackup/nls.mk +++ b/src/bin/pg_basebackup/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_basebackup/nls.mk CATALOG_NAME = pg_basebackup -AVAIL_LANGUAGES = cs de es fr he it ja ko pl pt_BR ru sv tr vi zh_CN +AVAIL_LANGUAGES = cs de es fr he it ja ko pl pt_BR ru sv tr uk vi zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) pg_basebackup.c pg_receivewal.c pg_recvlogical.c receivelog.c streamutil.c walmethods.c ../../common/fe_memutils.c ../../common/file_utils.c ../../fe_utils/recovery_gen.c GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) simple_prompt tar_set_error GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) diff --git a/src/bin/pg_basebackup/po/cs.po b/src/bin/pg_basebackup/po/cs.po index 043f6a90b5424..f74b659741b5d 100644 --- a/src/bin/pg_basebackup/po/cs.po +++ b/src/bin/pg_basebackup/po/cs.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_basebackup-cs (PostgreSQL 9.3)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:13+0000\n" -"PO-Revision-Date: 2019-09-27 17:10+0200\n" +"POT-Creation-Date: 2020-10-31 16:15+0000\n" +"PO-Revision-Date: 2020-10-31 21:35+0100\n" "Last-Translator: Tomas Vondra \n" "Language-Team: Czech \n" "Language: cs\n" @@ -16,148 +16,167 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "chyba: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "varování: " #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "nedostatek paměti\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "nelze duplikovat null pointer (interní chyba)\n" -#: ../../common/file_utils.c:81 ../../common/file_utils.c:183 -#: pg_receivewal.c:267 pg_recvlogical.c:342 +#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 +#: pg_receivewal.c:266 pg_recvlogical.c:340 #, c-format msgid "could not stat file \"%s\": %m" msgstr "nelze přistoupit k souboru \"%s\": %m" -#: ../../common/file_utils.c:160 pg_receivewal.c:170 +#: ../../common/file_utils.c:158 pg_receivewal.c:169 #, c-format msgid "could not open directory \"%s\": %m" msgstr "nelze otevřít adresář \"%s\": %m" -#: ../../common/file_utils.c:194 pg_receivewal.c:338 +#: ../../common/file_utils.c:192 pg_receivewal.c:337 #, c-format msgid "could not read directory \"%s\": %m" msgstr "nelze číst z adresáře \"%s\": %m" -#: ../../common/file_utils.c:226 ../../common/file_utils.c:285 -#: ../../common/file_utils.c:359 pg_basebackup.c:1760 +#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 +#: ../../common/file_utils.c:357 ../../fe_utils/recovery_gen.c:134 #, c-format msgid "could not open file \"%s\": %m" msgstr "nelze otevřít soubor \"%s\": %m" -#: ../../common/file_utils.c:297 ../../common/file_utils.c:367 -#: pg_recvlogical.c:195 +#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 +#: pg_recvlogical.c:193 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "nelze provést fsync souboru \"%s\": %m" -#: ../../common/file_utils.c:377 +#: ../../common/file_utils.c:375 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "nelze přejmenovat soubor \"%s\" na \"%s\": %m" -#: pg_basebackup.c:171 +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 pg_basebackup.c:1248 +#, c-format +msgid "out of memory" +msgstr "nedostatek paměti" + +#: ../../fe_utils/recovery_gen.c:140 pg_basebackup.c:1021 pg_basebackup.c:1714 +#: pg_basebackup.c:1770 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "nelze zapsat do souboru \"%s\": %m" + +#: ../../fe_utils/recovery_gen.c:152 pg_basebackup.c:1166 pg_basebackup.c:1671 +#: pg_basebackup.c:1747 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "nelze vytvořit soubor \"%s\": %m" + +#: pg_basebackup.c:224 #, c-format msgid "removing data directory \"%s\"" msgstr "odstraňuji datový adresář \"%s\"" -#: pg_basebackup.c:173 +#: pg_basebackup.c:226 #, c-format msgid "failed to remove data directory" msgstr "selhalo odstranění datového adresáře" -#: pg_basebackup.c:177 +#: pg_basebackup.c:230 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "odstraňuji obsah datového adresáře \"%s\"" -#: pg_basebackup.c:179 +#: pg_basebackup.c:232 #, c-format msgid "failed to remove contents of data directory" msgstr "selhalo odstranění obsahu datového adresáře" -#: pg_basebackup.c:184 +#: pg_basebackup.c:237 #, c-format msgid "removing WAL directory \"%s\"" msgstr "odstraňuji WAL adresář \"%s\"" -#: pg_basebackup.c:186 +#: pg_basebackup.c:239 #, c-format msgid "failed to remove WAL directory" msgstr "selhalo odstranění WAL adresáře" -#: pg_basebackup.c:190 +#: pg_basebackup.c:243 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "odstraňuji obsah WAL adresáře \"%s\"" -#: pg_basebackup.c:192 +#: pg_basebackup.c:245 #, c-format msgid "failed to remove contents of WAL directory" msgstr "selhalo odstranění obsahu WAL adresáře" -#: pg_basebackup.c:198 +#: pg_basebackup.c:251 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "datový adresář \"%s\" nebyl na žádost uživatele odstraněn" -#: pg_basebackup.c:201 +#: pg_basebackup.c:254 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "WAL adresář \"%s\" nebyl na žádost uživatele odstraněn" -#: pg_basebackup.c:205 +#: pg_basebackup.c:258 #, c-format msgid "changes to tablespace directories will not be undone" msgstr "změny v tablespace adresářích nebudou vráceny zpět" -#: pg_basebackup.c:246 +#: pg_basebackup.c:299 #, c-format msgid "directory name too long" msgstr "jméno adresáře je příliš dlouhé" -#: pg_basebackup.c:256 +#: pg_basebackup.c:309 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "více \"=\" znaků v tablespace mapování" -#: pg_basebackup.c:268 +#: pg_basebackup.c:321 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "chybný formát tablespace mapování \"%s\", musí být \"OLDDIR=NEWDIR\"" -#: pg_basebackup.c:280 +#: pg_basebackup.c:333 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "starý adresář v tablespace mapování není zadán jako absolutní cesta: %s" -#: pg_basebackup.c:287 +#: pg_basebackup.c:340 #, c-format msgid "new directory is not an absolute path in tablespace mapping: %s" msgstr "nový adresář v tablespace mapování není zadán jako absolutní cesta: %s" -#: pg_basebackup.c:326 +#: pg_basebackup.c:379 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -166,17 +185,17 @@ msgstr "" "%s vytvoří base backup běžícího PostgreSQL serveru.\n" "\n" -#: pg_basebackup.c:328 pg_receivewal.c:81 pg_recvlogical.c:78 +#: pg_basebackup.c:381 pg_receivewal.c:79 pg_recvlogical.c:75 #, c-format msgid "Usage:\n" msgstr "Použití:\n" -#: pg_basebackup.c:329 pg_receivewal.c:82 pg_recvlogical.c:79 +#: pg_basebackup.c:382 pg_receivewal.c:80 pg_recvlogical.c:76 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [VOLBA]...\n" -#: pg_basebackup.c:330 +#: pg_basebackup.c:383 #, c-format msgid "" "\n" @@ -185,17 +204,17 @@ msgstr "" "\n" "Volby ovlivňující výstup:\n" -#: pg_basebackup.c:331 +#: pg_basebackup.c:384 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=ADRESÁŘ ulož base backup do adresáře\n" -#: pg_basebackup.c:332 +#: pg_basebackup.c:385 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|t výstupní formát (plain (výchozí), tar)\n" -#: pg_basebackup.c:333 +#: pg_basebackup.c:386 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -204,7 +223,7 @@ msgstr "" " -r, --max-rate=RATE maximální rychlost pro přenos datového adresáře\n" " (v kB/s, nebo použijte příponu \"k\" nebo \"M\")\n" -#: pg_basebackup.c:335 +#: pg_basebackup.c:388 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -213,7 +232,7 @@ msgstr "" " -R, --write-recovery-conf\n" " zapíše konfiguraci pro replikaci\n" -#: pg_basebackup.c:337 +#: pg_basebackup.c:390 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -222,12 +241,12 @@ msgstr "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" " přemístit tablespace z OLDDIR do NEWDIR\n" -#: pg_basebackup.c:339 +#: pg_basebackup.c:392 #, c-format msgid " --waldir=WALDIR location for the write-ahead log directory\n" msgstr " --waldir=WALDIR umístění adresáře s transakčním logem\n" -#: pg_basebackup.c:340 +#: pg_basebackup.c:393 #, c-format msgid "" " -X, --wal-method=none|fetch|stream\n" @@ -236,17 +255,17 @@ msgstr "" " -X, --wal-method=none|fetch|stream\n" " zahrne potřebné WAL soubory zvolenou metodou\n" -#: pg_basebackup.c:342 +#: pg_basebackup.c:395 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip komprimuj výstup taru\n" -#: pg_basebackup.c:343 +#: pg_basebackup.c:396 #, c-format msgid " -Z, --compress=0-9 compress tar output with given compression level\n" msgstr " -Z, --compress=0-9 komprimuj výstup taru zvolenou úrovní komprese\n" -#: pg_basebackup.c:344 +#: pg_basebackup.c:397 #, c-format msgid "" "\n" @@ -255,7 +274,7 @@ msgstr "" "\n" "Obecné volby:\n" -#: pg_basebackup.c:345 +#: pg_basebackup.c:398 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" @@ -264,52 +283,84 @@ msgstr "" " -c, --checkpoint=fast|spread\n" " nastav fast nebo spread checkpointing\n" -#: pg_basebackup.c:347 +#: pg_basebackup.c:400 #, c-format msgid " -C, --create-slot create replication slot\n" msgstr " -C, --create-slot vytvoř replikační slot\n" -#: pg_basebackup.c:348 +#: pg_basebackup.c:401 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=NÁZEV nastav jmenovku zálohy\n" -#: pg_basebackup.c:349 +#: pg_basebackup.c:402 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean neuklízet po chybě\n" -#: pg_basebackup.c:350 +#: pg_basebackup.c:403 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync nečekat na bezpečné zapsání změn na disk\n" -#: pg_basebackup.c:351 +#: pg_basebackup.c:404 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress zobrazuj informace o průběhu\n" -#: pg_basebackup.c:352 pg_receivewal.c:91 +#: pg_basebackup.c:405 pg_receivewal.c:89 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=SLOTNAME použít tento replikační slot\n" -#: pg_basebackup.c:353 pg_receivewal.c:93 pg_recvlogical.c:99 +#: pg_basebackup.c:406 pg_receivewal.c:91 pg_recvlogical.c:96 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose zobrazuj podrobnější zprávy\n" -#: pg_basebackup.c:354 pg_receivewal.c:94 pg_recvlogical.c:100 +#: pg_basebackup.c:407 pg_receivewal.c:92 pg_recvlogical.c:97 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version vypiš informace o verzi, potom skonči\n" -#: pg_basebackup.c:355 +#: pg_basebackup.c:408 +#, c-format +msgid "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" use algorithm for manifest checksums\n" +msgstr "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" použij algoritmus pro kontrolní součet manifestu\n" + +#: pg_basebackup.c:410 +#, c-format +#| msgid "" +#| " --no-verify-checksums\n" +#| " do not verify checksums\n" +msgid "" +" --manifest-force-encode\n" +" hex encode all file names in manifest\n" +msgstr "" +" --manifest-force-encode\n" +" všechna jména souborů v manifestu kóduj pomocí hex\n" + +#: pg_basebackup.c:412 +#, c-format +msgid " --no-estimate-size do not estimate backup size in server side\n" +msgstr " --no-estimate-size neodhaduj velikost backupu na straně serveru\n" + +#: pg_basebackup.c:413 +#, c-format +#| msgid " --no-slot prevent creation of temporary replication slot\n" +msgid " --no-manifest suppress generation of backup manifest\n" +msgstr " --no-manifest zamezí vytvoření backup manifestu\n" + +#: pg_basebackup.c:414 #, c-format msgid " --no-slot prevent creation of temporary replication slot\n" msgstr " --no-slot zamezí vytvoření dočasného replikačního slotu\n" -#: pg_basebackup.c:356 +#: pg_basebackup.c:415 #, c-format msgid "" " --no-verify-checksums\n" @@ -318,12 +369,12 @@ msgstr "" " --no-verify-checksums\n" " neověřovat kontrolní součty\n" -#: pg_basebackup.c:358 pg_receivewal.c:96 pg_recvlogical.c:101 +#: pg_basebackup.c:417 pg_receivewal.c:94 pg_recvlogical.c:98 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ukaž tuto nápovědu, potom skonči\n" -#: pg_basebackup.c:359 pg_receivewal.c:97 pg_recvlogical.c:102 +#: pg_basebackup.c:418 pg_receivewal.c:95 pg_recvlogical.c:99 #, c-format msgid "" "\n" @@ -332,22 +383,22 @@ msgstr "" "\n" "Volby spojení:\n" -#: pg_basebackup.c:360 pg_receivewal.c:98 +#: pg_basebackup.c:419 pg_receivewal.c:96 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=CONNSTR connection string\n" -#: pg_basebackup.c:361 pg_receivewal.c:99 pg_recvlogical.c:104 +#: pg_basebackup.c:420 pg_receivewal.c:97 pg_recvlogical.c:101 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME host databázového serveru nebo adresář se sockety\n" -#: pg_basebackup.c:362 pg_receivewal.c:100 pg_recvlogical.c:105 +#: pg_basebackup.c:421 pg_receivewal.c:98 pg_recvlogical.c:102 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT port databázového serveru\n" -#: pg_basebackup.c:363 +#: pg_basebackup.c:422 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -356,87 +407,92 @@ msgstr "" " -s, --status-interval=INTERVAL\n" " čas mezi zasíláním packetů se stavem na server (ve vteřinách)\n" -#: pg_basebackup.c:365 pg_receivewal.c:101 pg_recvlogical.c:106 +#: pg_basebackup.c:424 pg_receivewal.c:99 pg_recvlogical.c:103 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=JMÉNO připoj se jako uvedený databázový uživatel\n" -#: pg_basebackup.c:366 pg_receivewal.c:102 pg_recvlogical.c:107 +#: pg_basebackup.c:425 pg_receivewal.c:100 pg_recvlogical.c:104 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nikdy se neptej na heslo\n" -#: pg_basebackup.c:367 pg_receivewal.c:103 pg_recvlogical.c:108 +#: pg_basebackup.c:426 pg_receivewal.c:101 pg_recvlogical.c:105 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password vynuť dotaz na heslo (mělo by se dít automaticky)\n" -#: pg_basebackup.c:368 pg_receivewal.c:107 pg_recvlogical.c:109 +#: pg_basebackup.c:427 pg_receivewal.c:105 pg_recvlogical.c:106 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Chyby hlaste na adresu .\n" +"Chyby hlašte na <%s>.\n" + +#: pg_basebackup.c:428 pg_receivewal.c:106 pg_recvlogical.c:107 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" -#: pg_basebackup.c:411 +#: pg_basebackup.c:471 #, c-format msgid "could not read from ready pipe: %m" msgstr "nelze číst z ready roury: %m" -#: pg_basebackup.c:417 pg_basebackup.c:548 pg_basebackup.c:2098 +#: pg_basebackup.c:477 pg_basebackup.c:608 pg_basebackup.c:2133 #: streamutil.c:450 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "nelze naparsovat pozici v transakčním logu \"%s\"" -#: pg_basebackup.c:513 pg_receivewal.c:442 +#: pg_basebackup.c:573 pg_receivewal.c:441 #, c-format msgid "could not finish writing WAL files: %m" msgstr "nelze dokončit zápis WAL souborů: %m" -#: pg_basebackup.c:560 +#: pg_basebackup.c:620 #, c-format msgid "could not create pipe for background process: %m" msgstr "nelze vytvořit roury pro background procesy: %m" -#: pg_basebackup.c:595 +#: pg_basebackup.c:655 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "vytvořen dočasný replikační slot \"%s\"" -#: pg_basebackup.c:598 +#: pg_basebackup.c:658 #, c-format msgid "created replication slot \"%s\"" msgstr "vytvořen replikační slot \"%s\"" -#: pg_basebackup.c:618 pg_basebackup.c:671 pg_basebackup.c:1507 +#: pg_basebackup.c:678 pg_basebackup.c:731 pg_basebackup.c:1620 #, c-format msgid "could not create directory \"%s\": %m" msgstr "nelze vytvořit adresář \"%s\": %m" -#: pg_basebackup.c:636 +#: pg_basebackup.c:696 #, c-format msgid "could not create background process: %m" msgstr "nelze vytvořit background procesy: %m" -#: pg_basebackup.c:648 +#: pg_basebackup.c:708 #, c-format msgid "could not create background thread: %m" msgstr "nelze vytvořit background vlákno: %m" -#: pg_basebackup.c:692 +#: pg_basebackup.c:752 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "adresář \"%s\" existuje, ale není prázdný" -#: pg_basebackup.c:699 +#: pg_basebackup.c:759 #, c-format msgid "could not access directory \"%s\": %m" msgstr "nelze přístoupit k adresáři \"%s\": %m" -#: pg_basebackup.c:760 +#: pg_basebackup.c:824 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" @@ -444,7 +500,7 @@ msgstr[0] "%*s/%s kB (100%%), %d/%d tablespace %*s" msgstr[1] "%*s/%s kB (100%%), %d/%d tablespacy %*s" msgstr[2] "%*s/%s kB (100%%), %d/%d tablespacy %*s" -#: pg_basebackup.c:772 +#: pg_basebackup.c:836 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" @@ -452,7 +508,7 @@ msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgstr[2] "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" -#: pg_basebackup.c:788 +#: pg_basebackup.c:852 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" @@ -460,360 +516,378 @@ msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[2] "%*s/%s kB (%d%%), %d/%d tablespaces" -#: pg_basebackup.c:812 +#: pg_basebackup.c:877 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "přenosová rychlost \"%s\" není platná hodnota" -#: pg_basebackup.c:817 +#: pg_basebackup.c:882 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "chybná přenosová rychlost \"%s\": %m" -#: pg_basebackup.c:826 +#: pg_basebackup.c:891 #, c-format msgid "transfer rate must be greater than zero" msgstr "přenosová rychlost musí být větší než nula" -#: pg_basebackup.c:858 +#: pg_basebackup.c:923 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "neplatná --max-rate jednotka: \"%s\"" -#: pg_basebackup.c:865 +#: pg_basebackup.c:930 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "přenosová rychlost \"%s\" přečkračuje rozsah typu integer" -#: pg_basebackup.c:875 +#: pg_basebackup.c:940 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "přenosová rychlost \"%s\" je mimo rozsah" -#: pg_basebackup.c:897 +#: pg_basebackup.c:961 +#, c-format +msgid "could not get COPY data stream: %s" +msgstr "nelze získat COPY data stream: %s" + +#: pg_basebackup.c:981 pg_recvlogical.c:435 pg_recvlogical.c:607 +#: receivelog.c:965 +#, c-format +msgid "could not read COPY data: %s" +msgstr "nelze číst COPY data: %s" + +#: pg_basebackup.c:1007 #, c-format msgid "could not write to compressed file \"%s\": %s" msgstr "nelze zapsat do komprimovaného souboru \"%s\": %s" -#: pg_basebackup.c:907 pg_basebackup.c:1596 pg_basebackup.c:1766 +#: pg_basebackup.c:1071 #, c-format -msgid "could not write to file \"%s\": %m" -msgstr "nelze zapsat do souboru \"%s\": %m" +msgid "could not duplicate stdout: %m" +msgstr "nelze duplikovat stdout: %m" + +#: pg_basebackup.c:1078 +#, c-format +msgid "could not open output file: %m" +msgstr "nelze otevřít výstupní soubor: %m" -#: pg_basebackup.c:972 pg_basebackup.c:992 pg_basebackup.c:1019 +#: pg_basebackup.c:1085 pg_basebackup.c:1106 pg_basebackup.c:1135 #, c-format msgid "could not set compression level %d: %s" msgstr "nelze nastavit úroveň komprese %d: %s" -#: pg_basebackup.c:1039 +#: pg_basebackup.c:1155 #, c-format msgid "could not create compressed file \"%s\": %s" msgstr "nelze vytvořit komprimovaný soubor \"%s\": %s" -#: pg_basebackup.c:1050 pg_basebackup.c:1557 pg_basebackup.c:1778 -#, c-format -msgid "could not create file \"%s\": %m" -msgstr "nelze vytvořit soubor \"%s\": %m" - -#: pg_basebackup.c:1061 pg_basebackup.c:1416 -#, c-format -msgid "could not get COPY data stream: %s" -msgstr "nelze získat COPY data stream: %s" - -#: pg_basebackup.c:1146 +#: pg_basebackup.c:1267 #, c-format msgid "could not close compressed file \"%s\": %s" msgstr "nelze uzavřít komprimovaný soubor \"%s\": %s" -#: pg_basebackup.c:1158 pg_recvlogical.c:608 +#: pg_basebackup.c:1279 pg_recvlogical.c:632 #, c-format msgid "could not close file \"%s\": %m" msgstr "nelze uzavřít soubor \"%s\": %m" -#: pg_basebackup.c:1169 pg_basebackup.c:1445 pg_recvlogical.c:437 -#: receivelog.c:968 +#: pg_basebackup.c:1541 #, c-format -msgid "could not read COPY data: %s" -msgstr "nelze číst COPY data: %s" +msgid "COPY stream ended before last file was finished" +msgstr "COPY stream skončil před dokončením posledního souboru" -#: pg_basebackup.c:1459 +#: pg_basebackup.c:1570 #, c-format -msgid "invalid tar block header size: %d" -msgstr "neplatná velikost hlavičky tar bloku: %d" +msgid "invalid tar block header size: %zu" +msgstr "neplatná velikost hlavičky tar bloku: %zu" -#: pg_basebackup.c:1514 +#: pg_basebackup.c:1627 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "nelze nastavit přístupová práva na adresáři \"%s\": %m" -#: pg_basebackup.c:1537 +#: pg_basebackup.c:1651 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "nelze vytvořit symbolický odkaz z \"%s\" na \"%s\": %m" -#: pg_basebackup.c:1544 +#: pg_basebackup.c:1658 #, c-format msgid "unrecognized link indicator \"%c\"" msgstr "nerozpoznaný indikátor odkazu \"%c\"" -#: pg_basebackup.c:1563 +#: pg_basebackup.c:1677 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "nelze nastavit přístupová práva na souboru \"%s\": %m" -#: pg_basebackup.c:1620 -#, c-format -msgid "COPY stream ended before last file was finished" -msgstr "COPY stream skončil před dokončením posledního souboru" - -#: pg_basebackup.c:1647 pg_basebackup.c:1667 pg_basebackup.c:1681 -#: pg_basebackup.c:1727 -#, c-format -msgid "out of memory" -msgstr "nedostatek paměti" - -#: pg_basebackup.c:1819 +#: pg_basebackup.c:1831 #, c-format msgid "incompatible server version %s" msgstr "nekompatibilní verze serveru %s" -#: pg_basebackup.c:1834 +#: pg_basebackup.c:1846 #, c-format msgid "HINT: use -X none or -X fetch to disable log streaming" msgstr "HINT: použijte -X none nebo -X fetch pro vypnutí streamování logu" -#: pg_basebackup.c:1859 +#: pg_basebackup.c:1882 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "inicializuji base backup, čekám na dokončení checkpointu" -#: pg_basebackup.c:1883 pg_recvlogical.c:264 receivelog.c:484 receivelog.c:533 -#: receivelog.c:572 streamutil.c:299 streamutil.c:370 streamutil.c:422 +#: pg_basebackup.c:1908 pg_recvlogical.c:262 receivelog.c:481 receivelog.c:530 +#: receivelog.c:569 streamutil.c:297 streamutil.c:370 streamutil.c:422 #: streamutil.c:533 streamutil.c:578 #, c-format msgid "could not send replication command \"%s\": %s" msgstr "nelze zaslat replikační příkaz \"%s\": %s" -#: pg_basebackup.c:1894 +#: pg_basebackup.c:1919 #, c-format msgid "could not initiate base backup: %s" msgstr "nelze inicializovat base backup: %s" -#: pg_basebackup.c:1900 +#: pg_basebackup.c:1925 #, c-format msgid "server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields" msgstr "server vrátil neočekávanou odpověď na BASE_BACKUP příkaz; přišlo %d řádeka %d položek, ořekáváno %d řádek a %d položek" -#: pg_basebackup.c:1908 +#: pg_basebackup.c:1933 #, c-format msgid "checkpoint completed" msgstr "checkpoint dokončen" -#: pg_basebackup.c:1923 +#: pg_basebackup.c:1948 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "počáteční pozice we write-ahead logu: %s na timeline %u" -#: pg_basebackup.c:1932 +#: pg_basebackup.c:1957 #, c-format msgid "could not get backup header: %s" msgstr "nelze získat hlavičku zálohy: %s" -#: pg_basebackup.c:1938 +#: pg_basebackup.c:1963 #, c-format msgid "no data returned from server" msgstr "ze serveru nebyla vrácena žádná data" -#: pg_basebackup.c:1969 +#: pg_basebackup.c:1995 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "na stdout lze zapsat jen jeden tablespace, databáze má %d" -#: pg_basebackup.c:1981 +#: pg_basebackup.c:2007 #, c-format msgid "starting background WAL receiver" msgstr "starting background WAL receiver" -#: pg_basebackup.c:2011 +#: pg_basebackup.c:2046 #, c-format msgid "could not get write-ahead log end position from server: %s" msgstr "ze serveru nelze získat koncovou pozici v transakčním logu: %s" -#: pg_basebackup.c:2017 +#: pg_basebackup.c:2052 #, c-format msgid "no write-ahead log end position returned from server" msgstr "ze serveru nebyla vrácena žádná koncová pozice v transakčním logu" -#: pg_basebackup.c:2022 +#: pg_basebackup.c:2057 #, c-format msgid "write-ahead log end point: %s" msgstr "koncová pozice ve write-ahead logu: %s" -#: pg_basebackup.c:2033 +#: pg_basebackup.c:2068 #, c-format msgid "checksum error occurred" msgstr "došlo k chybě kontrolního součtu" -#: pg_basebackup.c:2038 +#: pg_basebackup.c:2073 #, c-format msgid "final receive failed: %s" msgstr "závěrečný receive selhal: %s" -#: pg_basebackup.c:2062 +#: pg_basebackup.c:2097 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "čekám na background proces pro ukočení streamování ..." -#: pg_basebackup.c:2067 +#: pg_basebackup.c:2102 #, c-format msgid "could not send command to background pipe: %m" msgstr "nelze zaslat příkaz přes background rouru: %m" -#: pg_basebackup.c:2075 +#: pg_basebackup.c:2110 #, c-format msgid "could not wait for child process: %m" msgstr "nelze počkat na podřízený (child) proces: %m" -#: pg_basebackup.c:2080 +#: pg_basebackup.c:2115 #, c-format msgid "child %d died, expected %d" msgstr "potomek %d zemřel, očekáváno %d" -#: pg_basebackup.c:2085 streamutil.c:94 +#: pg_basebackup.c:2120 streamutil.c:92 #, c-format msgid "%s" msgstr "%s" -#: pg_basebackup.c:2110 +#: pg_basebackup.c:2145 #, c-format msgid "could not wait for child thread: %m" msgstr "nelze počkat na podřízené (child) vlákno: %m" -#: pg_basebackup.c:2116 +#: pg_basebackup.c:2151 #, c-format msgid "could not get child thread exit status: %m" msgstr "nelze získat návratový kód podřízeného vlákna: %m" -#: pg_basebackup.c:2121 +#: pg_basebackup.c:2156 #, c-format msgid "child thread exited with error %u" msgstr "podřízené vlákno skončilo s chybou %u" -#: pg_basebackup.c:2149 +#: pg_basebackup.c:2184 #, c-format msgid "syncing data to disk ..." msgstr "zapisuji data na disk ..." -#: pg_basebackup.c:2162 +#: pg_basebackup.c:2209 +#, c-format +msgid "renaming backup_manifest.tmp to backup_manifest" +msgstr "přejmenovávám backup_manifest.tmp na backup_manifest" + +#: pg_basebackup.c:2220 #, c-format msgid "base backup completed" msgstr "base backup dokončen" -#: pg_basebackup.c:2243 +#: pg_basebackup.c:2305 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "chybný formát výstupu \"%s\", musí být \"plain\" nebo \"tar\"" -#: pg_basebackup.c:2287 +#: pg_basebackup.c:2349 #, c-format msgid "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" msgstr "neplatná wal-metoda \"%s\", musí být \"fetch\", \"stream\" nebo \"none\"" -#: pg_basebackup.c:2315 pg_receivewal.c:581 +#: pg_basebackup.c:2377 pg_receivewal.c:580 #, c-format msgid "invalid compression level \"%s\"" msgstr "chybná úroveň komprese \"%s\"" -#: pg_basebackup.c:2326 +#: pg_basebackup.c:2388 #, c-format msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" msgstr "chybný checkpoint argument \"%s\", musí být \"fast\" nebo \"spread\"" -#: pg_basebackup.c:2353 pg_receivewal.c:556 pg_recvlogical.c:796 +#: pg_basebackup.c:2415 pg_receivewal.c:555 pg_recvlogical.c:820 #, c-format msgid "invalid status interval \"%s\"" msgstr "neplatný interval zasílání stavu \"%s\"" -#: pg_basebackup.c:2371 pg_basebackup.c:2384 pg_basebackup.c:2395 -#: pg_basebackup.c:2406 pg_basebackup.c:2414 pg_basebackup.c:2422 -#: pg_basebackup.c:2432 pg_basebackup.c:2445 pg_basebackup.c:2453 -#: pg_basebackup.c:2464 pg_basebackup.c:2474 pg_receivewal.c:606 -#: pg_receivewal.c:619 pg_receivewal.c:627 pg_receivewal.c:637 -#: pg_receivewal.c:645 pg_receivewal.c:656 pg_recvlogical.c:822 -#: pg_recvlogical.c:835 pg_recvlogical.c:846 pg_recvlogical.c:854 -#: pg_recvlogical.c:862 pg_recvlogical.c:870 pg_recvlogical.c:878 -#: pg_recvlogical.c:886 pg_recvlogical.c:894 +#: pg_basebackup.c:2445 pg_basebackup.c:2458 pg_basebackup.c:2469 +#: pg_basebackup.c:2480 pg_basebackup.c:2488 pg_basebackup.c:2496 +#: pg_basebackup.c:2506 pg_basebackup.c:2519 pg_basebackup.c:2527 +#: pg_basebackup.c:2538 pg_basebackup.c:2548 pg_basebackup.c:2565 +#: pg_basebackup.c:2573 pg_basebackup.c:2581 pg_receivewal.c:605 +#: pg_receivewal.c:618 pg_receivewal.c:626 pg_receivewal.c:636 +#: pg_receivewal.c:644 pg_receivewal.c:655 pg_recvlogical.c:846 +#: pg_recvlogical.c:859 pg_recvlogical.c:870 pg_recvlogical.c:878 +#: pg_recvlogical.c:886 pg_recvlogical.c:894 pg_recvlogical.c:902 +#: pg_recvlogical.c:910 pg_recvlogical.c:918 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" -#: pg_basebackup.c:2382 pg_receivewal.c:617 pg_recvlogical.c:833 +#: pg_basebackup.c:2456 pg_receivewal.c:616 pg_recvlogical.c:857 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "příliš mnoho argumentů v příkazové řádce (první je \"%s\")" -#: pg_basebackup.c:2394 pg_receivewal.c:655 +#: pg_basebackup.c:2468 pg_receivewal.c:654 #, c-format msgid "no target directory specified" msgstr "nebyl zadán cílový adresář" -#: pg_basebackup.c:2405 +#: pg_basebackup.c:2479 #, c-format msgid "only tar mode backups can be compressed" msgstr "pouze tar zálohy mohou být komprimované" -#: pg_basebackup.c:2413 +#: pg_basebackup.c:2487 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "v tar módu s výstupem na stdout nelze streamovat write-ahead logy" -#: pg_basebackup.c:2421 +#: pg_basebackup.c:2495 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "replikační sloty lze použít pouze s WAL streamováním" -#: pg_basebackup.c:2431 +#: pg_basebackup.c:2505 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "--no-slot nelze použít společně se jménem slotu" #. translator: second %s is an option name -#: pg_basebackup.c:2443 pg_receivewal.c:635 +#: pg_basebackup.c:2517 pg_receivewal.c:634 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "%s vyžaduje aby byl zadán slot pomocí --slot" -#: pg_basebackup.c:2452 +#: pg_basebackup.c:2526 #, c-format msgid "--create-slot and --no-slot are incompatible options" msgstr "--create-slot a --no-slot jsou nekompatibilní volby" -#: pg_basebackup.c:2463 +#: pg_basebackup.c:2537 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "umístění WAL adresáře lze zadat pouze v plain módu" -#: pg_basebackup.c:2473 +#: pg_basebackup.c:2547 #, c-format msgid "WAL directory location must be an absolute path" msgstr "cesta k adresáři transakčního logu musí být absolutní" -#: pg_basebackup.c:2483 pg_receivewal.c:664 +#: pg_basebackup.c:2557 pg_receivewal.c:663 #, c-format msgid "this build does not support compression" msgstr "tento build nepodporuje kompresi" -#: pg_basebackup.c:2537 +#: pg_basebackup.c:2564 +#, c-format +#| msgid "--create-slot and --no-slot are incompatible options" +msgid "--progress and --no-estimate-size are incompatible options" +msgstr "--progress a --no-estimate-size jsou nekompatibilní volby" + +#: pg_basebackup.c:2572 +#, c-format +#| msgid "--create-slot and --no-slot are incompatible options" +msgid "--no-manifest and --manifest-checksums are incompatible options" +msgstr "--no-manifest a --manifest-checksums jsou nekompatibilní volby" + +#: pg_basebackup.c:2580 +#, c-format +#| msgid "--create-slot and --no-slot are incompatible options" +msgid "--no-manifest and --manifest-force-encode are incompatible options" +msgstr "--no-manifest a --manifest-force-encode jsou nekompatibilní volby" + +#: pg_basebackup.c:2639 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "nelze vytvořit symbolický odkaz na \"%s\": %m" -#: pg_basebackup.c:2541 +#: pg_basebackup.c:2643 #, c-format msgid "symlinks are not supported on this platform" msgstr "na této platformě nejsou symbolické linky podporovány" -#: pg_receivewal.c:79 +#: pg_receivewal.c:77 #, c-format msgid "" "%s receives PostgreSQL streaming write-ahead logs.\n" @@ -822,7 +896,7 @@ msgstr "" "%s přijímá PostgreSQL streamované transakční logy\n" "\n" -#: pg_receivewal.c:83 pg_recvlogical.c:84 +#: pg_receivewal.c:81 pg_recvlogical.c:81 #, c-format msgid "" "\n" @@ -831,32 +905,32 @@ msgstr "" "\n" "Obecné volby:\n" -#: pg_receivewal.c:84 +#: pg_receivewal.c:82 #, c-format msgid " -D, --directory=DIR receive write-ahead log files into this directory\n" msgstr " -D, --directory=DIR soubory transakčního logu ukládej do tohoto adresáře\n" -#: pg_receivewal.c:85 pg_recvlogical.c:85 +#: pg_receivewal.c:83 pg_recvlogical.c:82 #, c-format msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" msgstr " -E, --endpos=LSN skončí po dosažení zadaného LSN\n" -#: pg_receivewal.c:86 pg_recvlogical.c:89 +#: pg_receivewal.c:84 pg_recvlogical.c:86 #, c-format msgid " --if-not-exists do not error if slot already exists when creating a slot\n" msgstr " --if-not-exists vytváření slotu neskončí chybou pokud slot již existuje\n" -#: pg_receivewal.c:87 pg_recvlogical.c:91 +#: pg_receivewal.c:85 pg_recvlogical.c:88 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop neopakovat pokus o spojení v případě selhání\n" -#: pg_receivewal.c:88 +#: pg_receivewal.c:86 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync nečekat na bezpečné zapsání změn na disk\n" -#: pg_receivewal.c:89 pg_recvlogical.c:96 +#: pg_receivewal.c:87 pg_recvlogical.c:93 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -865,17 +939,17 @@ msgstr "" " -s, --status-interval=SECS\n" " čas mezi zasíláním packetů se stavem na server (implicitně: %d)\n" -#: pg_receivewal.c:92 +#: pg_receivewal.c:90 #, c-format msgid " --synchronous flush write-ahead log immediately after writing\n" msgstr " --synchronous vynutí flush write-ahead logu okamžitě po zapsání\n" -#: pg_receivewal.c:95 +#: pg_receivewal.c:93 #, c-format msgid " -Z, --compress=0-9 compress logs with given compression level\n" msgstr " -Z, --compress=0-9 komprimuj logy zvolenou úrovní komprese\n" -#: pg_receivewal.c:104 +#: pg_receivewal.c:102 #, c-format msgid "" "\n" @@ -884,123 +958,123 @@ msgstr "" "\n" "Nepovinné volby:\n" -#: pg_receivewal.c:105 pg_recvlogical.c:81 +#: pg_receivewal.c:103 pg_recvlogical.c:78 #, c-format msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" msgstr " --create-slot vytvoří nový replikační slot (pro jméno slotu viz --slot)\n" -#: pg_receivewal.c:106 pg_recvlogical.c:82 +#: pg_receivewal.c:104 pg_recvlogical.c:79 #, c-format msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" msgstr " --drop-slot odstraní replikační slot (pro jméno slotu viz --slot)\n" -#: pg_receivewal.c:118 +#: pg_receivewal.c:117 #, c-format msgid "finished segment at %X/%X (timeline %u)" msgstr "dokončen segment na %X/%X (timeline %u)" -#: pg_receivewal.c:125 +#: pg_receivewal.c:124 #, c-format msgid "stopped log streaming at %X/%X (timeline %u)" msgstr "končím streamování logu na %X/%X (timeline %u)" -#: pg_receivewal.c:141 +#: pg_receivewal.c:140 #, c-format msgid "switched to timeline %u at %X/%X" msgstr "přepnuto na timeline %u v %X/%X" -#: pg_receivewal.c:151 +#: pg_receivewal.c:150 #, c-format msgid "received interrupt signal, exiting" msgstr "přijat signál k přerušení, ukončuji" -#: pg_receivewal.c:187 +#: pg_receivewal.c:186 #, c-format msgid "could not close directory \"%s\": %m" msgstr "zavřít adresář \"%s\": %m" -#: pg_receivewal.c:273 +#: pg_receivewal.c:272 #, c-format msgid "segment file \"%s\" has incorrect size %d, skipping" msgstr "segment soubor \"%s\" má neplatnou velikost %d, přeskakuji" -#: pg_receivewal.c:291 +#: pg_receivewal.c:290 #, c-format msgid "could not open compressed file \"%s\": %m" msgstr "nelze otevřít komprimovaný soubor \"%s\": %m" -#: pg_receivewal.c:297 +#: pg_receivewal.c:296 #, c-format msgid "could not seek in compressed file \"%s\": %m" msgstr "nelze nastavit pozici (seek) v komprimovaném souboru \"%s\": %m" -#: pg_receivewal.c:305 +#: pg_receivewal.c:304 #, c-format msgid "could not read compressed file \"%s\": %m" msgstr "nelze číst komprimovaný soubor \"%s\": %m" -#: pg_receivewal.c:308 +#: pg_receivewal.c:307 #, c-format msgid "could not read compressed file \"%s\": read %d of %zu" msgstr "nelze číst komprimovaný soubor \"%s\": přečteno %d z %zu" -#: pg_receivewal.c:319 +#: pg_receivewal.c:318 #, c-format msgid "compressed segment file \"%s\" has incorrect uncompressed size %d, skipping" msgstr "komprimovaný segment soubor \"%s\" má po dekompresi neplatnou velikost %d, přeskakuji" -#: pg_receivewal.c:423 +#: pg_receivewal.c:422 #, c-format msgid "starting log streaming at %X/%X (timeline %u)" msgstr "začínám streamování logu na %X/%X (timeline %u)" -#: pg_receivewal.c:538 pg_recvlogical.c:738 +#: pg_receivewal.c:537 pg_recvlogical.c:762 #, c-format msgid "invalid port number \"%s\"" msgstr "neplatné číslo portu: \"%s\"" -#: pg_receivewal.c:566 pg_recvlogical.c:764 +#: pg_receivewal.c:565 pg_recvlogical.c:788 #, c-format msgid "could not parse end position \"%s\"" msgstr "nelze zpracovat koncovou pozici \"%s\"" -#: pg_receivewal.c:626 +#: pg_receivewal.c:625 #, c-format msgid "cannot use --create-slot together with --drop-slot" msgstr "nelze použít --create-slot společně s --drop-slot" -#: pg_receivewal.c:644 +#: pg_receivewal.c:643 #, c-format msgid "cannot use --synchronous together with --no-sync" msgstr "nelze použít --synchronous společně s --no-sync" -#: pg_receivewal.c:720 +#: pg_receivewal.c:719 #, c-format msgid "replication connection using slot \"%s\" is unexpectedly database specific" msgstr "replikační spojení používající slot \"%s\" je neočekávaně specifické pro databázi" -#: pg_receivewal.c:731 pg_recvlogical.c:942 +#: pg_receivewal.c:730 pg_recvlogical.c:966 #, c-format msgid "dropping replication slot \"%s\"" msgstr "odstraňuji replikační slot \"%s\"" -#: pg_receivewal.c:742 pg_recvlogical.c:952 +#: pg_receivewal.c:741 pg_recvlogical.c:976 #, c-format msgid "creating replication slot \"%s\"" msgstr "vytvářím replikační slot \"%s\"" -#: pg_receivewal.c:768 pg_recvlogical.c:977 +#: pg_receivewal.c:767 pg_recvlogical.c:1001 #, c-format msgid "disconnected" msgstr "odpojeno" #. translator: check source for value for %d -#: pg_receivewal.c:774 pg_recvlogical.c:983 +#: pg_receivewal.c:773 pg_recvlogical.c:1007 #, c-format msgid "disconnected; waiting %d seconds to try again" msgstr "odpojeno; čekám %d vteřin pro další pokus" -#: pg_recvlogical.c:76 +#: pg_recvlogical.c:73 #, c-format msgid "" "%s controls PostgreSQL logical decoding streams.\n" @@ -1009,7 +1083,7 @@ msgstr "" "%s ovládá streamy PostgreSQL logického dekódování.\n" "\n" -#: pg_recvlogical.c:80 +#: pg_recvlogical.c:77 #, c-format msgid "" "\n" @@ -1018,17 +1092,17 @@ msgstr "" "\n" "Akce která se má vykonat:\n" -#: pg_recvlogical.c:83 +#: pg_recvlogical.c:80 #, c-format msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" msgstr " --start start streaming in a replication slot (for the slot's name see --slot)\n" -#: pg_recvlogical.c:86 +#: pg_recvlogical.c:83 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr " -f, --file=FILE log zapisuj do tohoto souboru, - pro stdout\n" -#: pg_recvlogical.c:87 +#: pg_recvlogical.c:84 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -1037,12 +1111,12 @@ msgstr "" " -F --fsync-interval=SECS\n" " interval mezi voláním fsync na výstupním souboru (implicitně: %d)\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:87 #, c-format msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" msgstr " -I, --startpos=LSN kde v existujícím slotu má začít streamování\n" -#: pg_recvlogical.c:92 +#: pg_recvlogical.c:89 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -1053,162 +1127,162 @@ msgstr "" " předá volbu JMÉNO s nepovinnou hodnotou HODNOTA\n" " výstupnímu pluginu\n" -#: pg_recvlogical.c:95 +#: pg_recvlogical.c:92 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=PLUGIN použije výstupní plugin PLUGIN (implicitně: %s)\n" -#: pg_recvlogical.c:98 +#: pg_recvlogical.c:95 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=SLOTNAME jméno logického replikačního slotu\n" -#: pg_recvlogical.c:103 +#: pg_recvlogical.c:100 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=DBNAME databáze ke které se připojit\n" -#: pg_recvlogical.c:135 +#: pg_recvlogical.c:133 #, c-format msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "potvrzuji zápis až do %X/%X, flush do %X/%X (slot %s)" -#: pg_recvlogical.c:159 receivelog.c:346 +#: pg_recvlogical.c:157 receivelog.c:343 #, c-format msgid "could not send feedback packet: %s" msgstr "nelze zaslat packet se zpětnou vazbou: %s" -#: pg_recvlogical.c:232 +#: pg_recvlogical.c:230 #, c-format msgid "starting log streaming at %X/%X (slot %s)" msgstr "začínám streamování logu na %X/%X (slot %s)" -#: pg_recvlogical.c:273 +#: pg_recvlogical.c:271 #, c-format msgid "streaming initiated" msgstr "streamování inicializováno" -#: pg_recvlogical.c:337 +#: pg_recvlogical.c:335 #, c-format msgid "could not open log file \"%s\": %m" msgstr "nelze otevřít log soubor \"%s\": %m" -#: pg_recvlogical.c:363 receivelog.c:876 +#: pg_recvlogical.c:361 receivelog.c:873 #, c-format msgid "invalid socket: %s" msgstr "neplatný socket: %s" -#: pg_recvlogical.c:416 receivelog.c:904 +#: pg_recvlogical.c:414 receivelog.c:901 #, c-format msgid "select() failed: %m" msgstr "volání select() selhalo: %m" -#: pg_recvlogical.c:423 receivelog.c:954 +#: pg_recvlogical.c:421 receivelog.c:951 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "nelze získat data z WAL streamu: %s" -#: pg_recvlogical.c:465 pg_recvlogical.c:516 receivelog.c:998 receivelog.c:1064 +#: pg_recvlogical.c:463 pg_recvlogical.c:514 receivelog.c:995 receivelog.c:1061 #, c-format msgid "streaming header too small: %d" msgstr "hlavička streamu je příliš malá: %d" -#: pg_recvlogical.c:500 receivelog.c:836 +#: pg_recvlogical.c:498 receivelog.c:833 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "nerozpoznaná hlavička streamu: \"%c\"" -#: pg_recvlogical.c:554 pg_recvlogical.c:566 +#: pg_recvlogical.c:552 pg_recvlogical.c:564 #, c-format msgid "could not write %u bytes to log file \"%s\": %m" msgstr "nelze zapsat %u bytů do log souboru \"%s\": %m" -#: pg_recvlogical.c:594 receivelog.c:632 receivelog.c:669 +#: pg_recvlogical.c:618 receivelog.c:629 receivelog.c:666 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "neočekávané ukončení replikačního streamu: %s" -#: pg_recvlogical.c:718 +#: pg_recvlogical.c:742 #, c-format msgid "invalid fsync interval \"%s\"" msgstr "neplatný fsync interval \"%s\"" -#: pg_recvlogical.c:756 +#: pg_recvlogical.c:780 #, c-format msgid "could not parse start position \"%s\"" msgstr "nelze zpracovat počáteční pozici \"%s\"" -#: pg_recvlogical.c:845 +#: pg_recvlogical.c:869 #, c-format msgid "no slot specified" msgstr "slot není specifikován" -#: pg_recvlogical.c:853 +#: pg_recvlogical.c:877 #, c-format msgid "no target file specified" msgstr "nebyl zadán cílový soubor" -#: pg_recvlogical.c:861 +#: pg_recvlogical.c:885 #, c-format msgid "no database specified" msgstr "není specifikována databáze" -#: pg_recvlogical.c:869 +#: pg_recvlogical.c:893 #, c-format msgid "at least one action needs to be specified" msgstr "alespoň jedna akce musí být zadána" -#: pg_recvlogical.c:877 +#: pg_recvlogical.c:901 #, c-format msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "nelze použít use-slot nebo --start společně s --drop-slot" -#: pg_recvlogical.c:885 +#: pg_recvlogical.c:909 #, c-format msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "nelze použít --create-slot nebo --drop-slot společně s --startpos" -#: pg_recvlogical.c:893 +#: pg_recvlogical.c:917 #, c-format msgid "--endpos may only be specified with --start" msgstr "--endpos může být použito pouze společně s --start" -#: pg_recvlogical.c:924 +#: pg_recvlogical.c:948 #, c-format msgid "could not establish database-specific replication connection" msgstr "nelze otevřít database-specific replikační spojení" -#: pg_recvlogical.c:1023 +#: pg_recvlogical.c:1047 #, c-format msgid "end position %X/%X reached by keepalive" msgstr "koncová pozice %X/%X dosažena keepalive" -#: pg_recvlogical.c:1026 +#: pg_recvlogical.c:1050 #, c-format msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "koncová pozice %X/%X doražena WAL záznamem na %X/%X" -#: receivelog.c:72 +#: receivelog.c:69 #, c-format msgid "could not create archive status file \"%s\": %s" msgstr "nelze vytvořit soubor se stavem archivace \"%s\": %s" -#: receivelog.c:119 +#: receivelog.c:116 #, c-format msgid "could not get size of write-ahead log file \"%s\": %s" msgstr "nelze získat velikost write-ahead log souboru \"%s\": %s" -#: receivelog.c:129 +#: receivelog.c:126 #, c-format msgid "could not open existing write-ahead log file \"%s\": %s" msgstr "nelze otevřít existující soubor transakčního logu \"%s\": %s" -#: receivelog.c:137 +#: receivelog.c:134 #, c-format msgid "could not fsync existing write-ahead log file \"%s\": %s" msgstr "nelze provést fsync existujícího souboru write-ahead logu \"%s\": %s" -#: receivelog.c:151 +#: receivelog.c:148 #, c-format msgid "write-ahead log file \"%s\" has %d byte, should be 0 or %d" msgid_plural "write-ahead log file \"%s\" has %d bytes, should be 0 or %d" @@ -1216,161 +1290,161 @@ msgstr[0] "soubor transakčního logu \"%s\" má %d bytů, měl by mít 0 nebo % msgstr[1] "soubor transakčního logu \"%s\" má %d bytů, měl by mít 0 nebo %d" msgstr[2] "soubor transakčního logu \"%s\" má %d bytů, měl by mít 0 nebo %d" -#: receivelog.c:166 +#: receivelog.c:163 #, c-format msgid "could not open write-ahead log file \"%s\": %s" msgstr "nelze otevřít soubor write-ahead logu \"%s\": %s" -#: receivelog.c:192 +#: receivelog.c:189 #, c-format msgid "could not determine seek position in file \"%s\": %s" msgstr "nelze určit pozici pro seek v souboru \"%s\": %s" -#: receivelog.c:206 +#: receivelog.c:203 #, c-format msgid "not renaming \"%s%s\", segment is not complete" msgstr "nepřejmenovávám \"%s%s\", segment není kompletní" -#: receivelog.c:218 receivelog.c:303 receivelog.c:678 +#: receivelog.c:215 receivelog.c:300 receivelog.c:675 #, c-format msgid "could not close file \"%s\": %s" msgstr "nelze uzavřít soubor \"%s\": %s" -#: receivelog.c:275 +#: receivelog.c:272 #, c-format msgid "server reported unexpected history file name for timeline %u: %s" msgstr "server ohlásil neočekávané jméno souboru s historií pro timeline %u: %s" -#: receivelog.c:283 +#: receivelog.c:280 #, c-format msgid "could not create timeline history file \"%s\": %s" msgstr "nelze vytvořit soubor s timeline historií \"%s\": %s" -#: receivelog.c:290 +#: receivelog.c:287 #, c-format msgid "could not write timeline history file \"%s\": %s" msgstr "nelze zapsat do souboru s timeline historií \"%s\": %s" -#: receivelog.c:380 +#: receivelog.c:377 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions older than %s" msgstr "nekompatibilní verze serveru %s; klient nepodporuje streamování ze serverů s verzí starší než %s" -#: receivelog.c:389 +#: receivelog.c:386 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions newer than %s" msgstr "nekompatibilní verze serveru %s; klient nepodporuje streamování ze serverů s verzí novější než %s" -#: receivelog.c:491 streamutil.c:430 streamutil.c:467 +#: receivelog.c:488 streamutil.c:430 streamutil.c:467 #, c-format msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "nelze identifikovat systém, načteno %d řádek a %d položek, očekáváno %d řádek a %d nebo více položek" -#: receivelog.c:498 +#: receivelog.c:495 #, c-format msgid "system identifier does not match between base backup and streaming connection" msgstr "identifikátor systému mezi base backupem a streamovacím spojením neodpovídá" -#: receivelog.c:504 +#: receivelog.c:501 #, c-format msgid "starting timeline %u is not present in the server" msgstr "počáteční timeline %u není přitomna na serveru" -#: receivelog.c:545 +#: receivelog.c:542 #, c-format msgid "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields" msgstr "neočekávaná odpověď na TIMELINE_HISTORY příkaz: načteno %d řádek a %d položek, očekáváno %d řádek a %d položek" -#: receivelog.c:616 +#: receivelog.c:613 #, c-format msgid "server reported unexpected next timeline %u, following timeline %u" msgstr "server ohlásil neočekávanou další timeline %u, následující timeline %u" -#: receivelog.c:622 +#: receivelog.c:619 #, c-format msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X" msgstr "server přestal streamovat timeline %u at %X/%X, ale začátek další timelineoznámil %u na %X/%X" -#: receivelog.c:662 +#: receivelog.c:659 #, c-format msgid "replication stream was terminated before stop point" msgstr "replikační stream byl ukončen před bodem zastavení (stop point)" -#: receivelog.c:708 +#: receivelog.c:705 #, c-format msgid "unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields" msgstr "neočekávaný výsledek po konci timeline: získáno %d řádek a %d položek, očekáváno %d řádek a %d položek" -#: receivelog.c:717 +#: receivelog.c:714 #, c-format msgid "could not parse next timeline's starting point \"%s\"" msgstr "nelze naparsovat počáteční bod další timeline \"%s\"" -#: receivelog.c:766 receivelog.c:1018 +#: receivelog.c:763 receivelog.c:1015 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "nelze provést fsync souboru \"%s\": %s" -#: receivelog.c:1081 +#: receivelog.c:1078 #, c-format msgid "received write-ahead log record for offset %u with no file open" msgstr "přijat záznam z transakčního logu pro offset %u bez otevřeného souboru" -#: receivelog.c:1091 +#: receivelog.c:1088 #, c-format msgid "got WAL data offset %08x, expected %08x" msgstr "získán WAL data offset %08x, očekáván %08x" -#: receivelog.c:1125 +#: receivelog.c:1122 #, c-format msgid "could not write %u bytes to WAL file \"%s\": %s" msgstr "nelze zapsat %u bytů do WAL souboru %s: %s" -#: receivelog.c:1150 receivelog.c:1190 receivelog.c:1221 +#: receivelog.c:1147 receivelog.c:1187 receivelog.c:1218 #, c-format msgid "could not send copy-end packet: %s" msgstr "nelze zaslat copy-end packet: %s" -#: streamutil.c:162 +#: streamutil.c:160 msgid "Password: " msgstr "Heslo: " -#: streamutil.c:187 +#: streamutil.c:185 #, c-format msgid "could not connect to server" msgstr "nelze se připojit k serveru" -#: streamutil.c:204 +#: streamutil.c:202 #, c-format msgid "could not connect to server: %s" msgstr "nelze se připojit k serveru: %s" -#: streamutil.c:233 +#: streamutil.c:231 #, c-format msgid "could not clear search_path: %s" msgstr "nelze vyčistit search_path: %s" -#: streamutil.c:249 +#: streamutil.c:247 #, c-format msgid "could not determine server setting for integer_datetimes" msgstr "nelze zjistit nastavení volby integer_datetimes na serveru" -#: streamutil.c:256 +#: streamutil.c:254 #, c-format msgid "integer_datetimes compile flag does not match server" msgstr "integer_datetimes přepínač kompilace neodpovídá serveru" -#: streamutil.c:307 +#: streamutil.c:305 #, c-format msgid "could not fetch WAL segment size: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "nelze identifikovat systém, načteno %d řádek a %d položek, očekáváno %d řádek a %d nebo více položek" -#: streamutil.c:317 +#: streamutil.c:315 #, c-format msgid "WAL segment size could not be parsed" msgstr "velikost WAL segmentu nelze naparsovat" -#: streamutil.c:332 +#: streamutil.c:333 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d bytes" @@ -1398,169 +1472,176 @@ msgstr "nelze vytvořit replikační slot \"%s\": načteno %d řádek a %d polo msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "nelze odstranit replikační slot \"%s\": načteno %d řádek a %d položek, očekáváno %d řádek a %d položek" -#: walmethods.c:439 walmethods.c:928 +#: walmethods.c:438 walmethods.c:927 msgid "could not compress data" msgstr "nelze komprimovat data" -#: walmethods.c:471 +#: walmethods.c:470 msgid "could not reset compression stream" msgstr "nelze resetovat kompresní stream" -#: walmethods.c:569 +#: walmethods.c:568 msgid "could not initialize compression library" msgstr "nelze inicializovat kompresní knihovnu" -#: walmethods.c:581 +#: walmethods.c:580 msgid "implementation error: tar files can't have more than one open file" msgstr "chyba implementace: tar soubory nemohou mít otevřeno více než jeden soubor" -#: walmethods.c:595 +#: walmethods.c:594 msgid "could not create tar header" msgstr "nelze vytvořit tar hlavičku" -#: walmethods.c:609 walmethods.c:649 walmethods.c:844 walmethods.c:855 +#: walmethods.c:608 walmethods.c:648 walmethods.c:843 walmethods.c:854 msgid "could not change compression parameters" msgstr "nelze změnit kompresní stream" -#: walmethods.c:731 +#: walmethods.c:730 msgid "unlink not supported with compression" msgstr "unlink není podporován s kompresí" -#: walmethods.c:953 +#: walmethods.c:952 msgid "could not close compression stream" msgstr "nelze uzavřít kompresní stream" -#~ msgid " -x, --xlog include required WAL files in backup (fetch mode)\n" -#~ msgstr " -x, --xlog zahrne potřebné WAL soubory do zálohy (fetch mód)\n" +#~ msgid "%s: could not stat file \"%s\": %s\n" +#~ msgstr "%s: nelze načíst stav souboru \"%s\": %s\n" -#~ msgid "%s: could not parse file size\n" -#~ msgstr "%s: nelze načíst velikost souboru\n" +#~ msgid "%s: could not open directory \"%s\": %s\n" +#~ msgstr "%s: nelze otevřít adresář \"%s\": %s\n" -#~ msgid "%s: could not parse file mode\n" -#~ msgstr "%s: nelze načíst mód souboru\n" +#~ msgid "%s: could not read directory \"%s\": %s\n" +#~ msgstr "%s: nelze načíst adresář \"%s\": %s\n" -#~ msgid "%s: cannot specify both --xlog and --xlog-method\n" -#~ msgstr "%s: volby --xlog a --xlog-method nelze zadat společně\n" +#~ msgid "%s: could not open file \"%s\": %s\n" +#~ msgstr "%s: nelze otevřít soubor \"%s\": %s\n" -#~ msgid "%s: could not parse transaction log file name \"%s\"\n" -#~ msgstr "%s: nelze naparsovat jméno souboru transakčního logu \"%s\"\n" +#~ msgid "%s: could not create directory \"%s\": %s\n" +#~ msgstr "%s: nelze vytvořít adresář \"%s\": %s\n" -#~ msgid "%s: could not stat transaction log file \"%s\": %s\n" -#~ msgstr "%s: nelze udělat stat souboru transakčního logu \"%s\": %s\n" +#~ msgid "%s: could not write to file \"%s\": %s\n" +#~ msgstr "%s: nelze zapsat do souboru \"%s\": %s\n" -#~ msgid "%s: could not pad transaction log file \"%s\": %s\n" -#~ msgstr "%s: nelze doplnit soubor transakčního logu \"%s\": %s\n" +#~ msgid "%s: could not close file \"%s\": %s\n" +#~ msgstr "%s: nelze uzavřít soubor \"%s\": %s\n" -#~ msgid "%s: could not seek to beginning of transaction log file \"%s\": %s\n" -#~ msgstr "%s: nelze skočit zpět na začátek souboru transakčního logu \"%s\": %s\n" +#~ msgid "%s: out of memory\n" +#~ msgstr "%s: nedostatek paměti\n" -#~ msgid "%s: could not rename file \"%s\": %s\n" -#~ msgstr "%s: nelze přejmenovat soubor \"%s\": %s\n" +#~ msgid "%s: child process did not exit normally\n" +#~ msgstr "%s: podřízený proces neskončil standardně\n" -#~ msgid "%s: no start point returned from server\n" -#~ msgstr "%s: server nevráti žádný počáteční bod (start point)\n" +#~ msgid "%s: child process exited with error %d\n" +#~ msgstr "%s: podřízený proces skončil s chybou %d\n" -#~ msgid "%s: timeline does not match between base backup and streaming connection\n" -#~ msgstr "%s: timeline mezi base backupem a streamovacím spojením neodpovídá\n" +#~ msgid "%s: could not create symbolic link \"%s\": %s\n" +#~ msgstr "%s: nelze vytvořit symbolický link \"%s\": %s\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help zobraz tuto nápovědu, poté skonči\n" +#~ msgid "%s: symlinks are not supported on this platform\n" +#~ msgstr "%s: symlinks nejsou na této platformě podporovány\n" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version zobraz informaci o verzi, poté skonči\n" +#~ msgid "%s: could not close directory \"%s\": %s\n" +#~ msgstr "%s: nelze uzavřít adresář \"%s\": %s\n" -#~ msgid "%s: invalid format of xlog location: %s\n" -#~ msgstr "%s: neplatný formát xlog pozice: %s\n" +#~ msgid "%s: invalid port number \"%s\"\n" +#~ msgstr "%s: neplatné číslo portu \"%s\"\n" -#~ msgid "%s: could not identify system: %s" -#~ msgstr "%s: nelze identifikovat systém: %s" +#~ msgid "%s: could not fsync log file \"%s\": %s\n" +#~ msgstr "%s: nelze provést fsync log souboru \"%s\": %s\n" -#~ msgid "%s: could not send base backup command: %s" -#~ msgstr "%s: nelze poslat base backup příkaz: %s" +#~ msgid "%s: could not open log file \"%s\": %s\n" +#~ msgstr "%s: nelze otevřít logovací soubor \"%s\": %s\n" -#~ msgid " -v, --verbose output verbose messages\n" -#~ msgstr " -v, --verbose vypisuj podrobnější zprávy\n" +#~ msgid "%s: select() failed: %s\n" +#~ msgstr "%s: select() selhal: %s\n" -#~ msgid "%s: could not identify system: %s\n" -#~ msgstr "%s: nelze identifikovat systém: %s\n" +#~ msgid "%s: could not connect to server\n" +#~ msgstr "%s: nelze se připojit k serveru\n" -#~ msgid "%s: could not parse log start position from value \"%s\"\n" -#~ msgstr "%s: nelze naparsovat počáteční pozici logu z hodnoty \"%s\"\n" +#~ msgid "%s: could not connect to server: %s" +#~ msgstr "%s: nelze se připojit k serveru: %s" -#~ msgid "%s: Could not open WAL segment %s: %s\n" -#~ msgstr "%s: nelze otevřít WAL segment %s: %s\n" +#~ msgid "%s: could not clear search_path: %s" +#~ msgstr "%s: nelze vyčistit search_path: %s" -#~ msgid "%s: could not stat WAL segment %s: %s\n" -#~ msgstr "%s: nelze načíst stav WAL segmentu %s: %s\n" +#~ msgid "%s: could not read copy data: %s\n" +#~ msgstr "%s: nelze načíst copy data: %s\n" -#~ msgid "%s: could not pad WAL segment %s: %s\n" -#~ msgstr "%s: nelze doplnit WAL segment %s: %s\n" +#~ msgid "%s: could not close file %s: %s\n" +#~ msgstr "%s: nelze zavřít soubor %s: %s\n" #~ msgid "%s: could not get current position in file %s: %s\n" #~ msgstr "%s: nelze získat aktuální pozici v souboru %s: %s\n" -#~ msgid "%s: could not close file %s: %s\n" -#~ msgstr "%s: nelze zavřít soubor %s: %s\n" +#~ msgid "%s: could not pad WAL segment %s: %s\n" +#~ msgstr "%s: nelze doplnit WAL segment %s: %s\n" -#~ msgid "%s: could not read copy data: %s\n" -#~ msgstr "%s: nelze načíst copy data: %s\n" +#~ msgid "%s: could not stat WAL segment %s: %s\n" +#~ msgstr "%s: nelze načíst stav WAL segmentu %s: %s\n" -#~ msgid "%s: could not clear search_path: %s" -#~ msgstr "%s: nelze vyčistit search_path: %s" +#~ msgid "%s: Could not open WAL segment %s: %s\n" +#~ msgstr "%s: nelze otevřít WAL segment %s: %s\n" -#~ msgid "%s: could not connect to server: %s" -#~ msgstr "%s: nelze se připojit k serveru: %s" +#~ msgid "%s: could not parse log start position from value \"%s\"\n" +#~ msgstr "%s: nelze naparsovat počáteční pozici logu z hodnoty \"%s\"\n" -#~ msgid "%s: could not connect to server\n" -#~ msgstr "%s: nelze se připojit k serveru\n" +#~ msgid "%s: could not identify system: %s\n" +#~ msgstr "%s: nelze identifikovat systém: %s\n" -#~ msgid "%s: select() failed: %s\n" -#~ msgstr "%s: select() selhal: %s\n" +#~ msgid " -v, --verbose output verbose messages\n" +#~ msgstr " -v, --verbose vypisuj podrobnější zprávy\n" -#~ msgid "%s: could not open log file \"%s\": %s\n" -#~ msgstr "%s: nelze otevřít logovací soubor \"%s\": %s\n" +#~ msgid "%s: could not send base backup command: %s" +#~ msgstr "%s: nelze poslat base backup příkaz: %s" -#~ msgid "%s: could not fsync log file \"%s\": %s\n" -#~ msgstr "%s: nelze provést fsync log souboru \"%s\": %s\n" +#~ msgid "%s: could not identify system: %s" +#~ msgstr "%s: nelze identifikovat systém: %s" -#~ msgid "%s: invalid port number \"%s\"\n" -#~ msgstr "%s: neplatné číslo portu \"%s\"\n" +#~ msgid "%s: invalid format of xlog location: %s\n" +#~ msgstr "%s: neplatný formát xlog pozice: %s\n" -#~ msgid "%s: could not close directory \"%s\": %s\n" -#~ msgstr "%s: nelze uzavřít adresář \"%s\": %s\n" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version zobraz informaci o verzi, poté skonči\n" -#~ msgid "%s: symlinks are not supported on this platform\n" -#~ msgstr "%s: symlinks nejsou na této platformě podporovány\n" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help zobraz tuto nápovědu, poté skonči\n" -#~ msgid "%s: could not create symbolic link \"%s\": %s\n" -#~ msgstr "%s: nelze vytvořit symbolický link \"%s\": %s\n" +#~ msgid "%s: timeline does not match between base backup and streaming connection\n" +#~ msgstr "%s: timeline mezi base backupem a streamovacím spojením neodpovídá\n" -#~ msgid "%s: child process exited with error %d\n" -#~ msgstr "%s: podřízený proces skončil s chybou %d\n" +#~ msgid "%s: no start point returned from server\n" +#~ msgstr "%s: server nevráti žádný počáteční bod (start point)\n" -#~ msgid "%s: child process did not exit normally\n" -#~ msgstr "%s: podřízený proces neskončil standardně\n" +#~ msgid "%s: could not rename file \"%s\": %s\n" +#~ msgstr "%s: nelze přejmenovat soubor \"%s\": %s\n" -#~ msgid "%s: out of memory\n" -#~ msgstr "%s: nedostatek paměti\n" +#~ msgid "%s: could not seek to beginning of transaction log file \"%s\": %s\n" +#~ msgstr "%s: nelze skočit zpět na začátek souboru transakčního logu \"%s\": %s\n" -#~ msgid "%s: could not close file \"%s\": %s\n" -#~ msgstr "%s: nelze uzavřít soubor \"%s\": %s\n" +#~ msgid "%s: could not pad transaction log file \"%s\": %s\n" +#~ msgstr "%s: nelze doplnit soubor transakčního logu \"%s\": %s\n" -#~ msgid "%s: could not write to file \"%s\": %s\n" -#~ msgstr "%s: nelze zapsat do souboru \"%s\": %s\n" +#~ msgid "%s: could not stat transaction log file \"%s\": %s\n" +#~ msgstr "%s: nelze udělat stat souboru transakčního logu \"%s\": %s\n" -#~ msgid "%s: could not create directory \"%s\": %s\n" -#~ msgstr "%s: nelze vytvořít adresář \"%s\": %s\n" +#~ msgid "%s: could not parse transaction log file name \"%s\"\n" +#~ msgstr "%s: nelze naparsovat jméno souboru transakčního logu \"%s\"\n" -#~ msgid "%s: could not open file \"%s\": %s\n" -#~ msgstr "%s: nelze otevřít soubor \"%s\": %s\n" +#~ msgid "%s: cannot specify both --xlog and --xlog-method\n" +#~ msgstr "%s: volby --xlog a --xlog-method nelze zadat společně\n" -#~ msgid "%s: could not read directory \"%s\": %s\n" -#~ msgstr "%s: nelze načíst adresář \"%s\": %s\n" +#~ msgid "%s: could not parse file mode\n" +#~ msgstr "%s: nelze načíst mód souboru\n" -#~ msgid "%s: could not open directory \"%s\": %s\n" -#~ msgstr "%s: nelze otevřít adresář \"%s\": %s\n" +#~ msgid "%s: could not parse file size\n" +#~ msgstr "%s: nelze načíst velikost souboru\n" -#~ msgid "%s: could not stat file \"%s\": %s\n" -#~ msgstr "%s: nelze načíst stav souboru \"%s\": %s\n" +#~ msgid " -x, --xlog include required WAL files in backup (fetch mode)\n" +#~ msgstr " -x, --xlog zahrne potřebné WAL soubory do zálohy (fetch mód)\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Chyby hlaste na adresu .\n" diff --git a/src/bin/pg_basebackup/po/de.po b/src/bin/pg_basebackup/po/de.po index 15df9e69af4ff..1c25945d0a3cb 100644 --- a/src/bin/pg_basebackup/po/de.po +++ b/src/bin/pg_basebackup/po/de.po @@ -1,16 +1,15 @@ # German message translation file for pg_basebackup -# Copyright (C) 2011 - 2020 PostgreSQL Global Development Group +# Copyright (C) 2011 - 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Peter Eisentraut , 2011 - 2020. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 13\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-18 03:45+0000\n" -"PO-Revision-Date: 2020-05-18 09:00+0200\n" +"POT-Creation-Date: 2021-04-29 03:17+0000\n" +"PO-Revision-Date: 2021-04-29 06:55+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -19,17 +18,17 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "Fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "Fehler: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "Warnung: " @@ -45,120 +44,139 @@ msgstr "Speicher aufgebraucht\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" -#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 +#: ../../common/file_utils.c:87 ../../common/file_utils.c:451 #: pg_receivewal.c:266 pg_recvlogical.c:340 #, c-format msgid "could not stat file \"%s\": %m" msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" -#: ../../common/file_utils.c:158 pg_receivewal.c:169 +#: ../../common/file_utils.c:166 pg_receivewal.c:169 #, c-format msgid "could not open directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht öffnen: %m" -#: ../../common/file_utils.c:192 pg_receivewal.c:337 +#: ../../common/file_utils.c:200 pg_receivewal.c:337 #, c-format msgid "could not read directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht lesen: %m" -#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 -#: ../../common/file_utils.c:357 +#: ../../common/file_utils.c:232 ../../common/file_utils.c:291 +#: ../../common/file_utils.c:365 ../../fe_utils/recovery_gen.c:134 #, c-format msgid "could not open file \"%s\": %m" msgstr "konnte Datei »%s« nicht öffnen: %m" -#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 +#: ../../common/file_utils.c:303 ../../common/file_utils.c:373 #: pg_recvlogical.c:193 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fsyncen: %m" -#: ../../common/file_utils.c:375 +#: ../../common/file_utils.c:383 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "konnte Datei »%s« nicht in »%s« umbenennen: %m" -#: pg_basebackup.c:223 +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 pg_basebackup.c:1248 +#, c-format +msgid "out of memory" +msgstr "Speicher aufgebraucht" + +#: ../../fe_utils/recovery_gen.c:140 pg_basebackup.c:1021 pg_basebackup.c:1714 +#: pg_basebackup.c:1770 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "konnte nicht in Datei »%s« schreiben: %m" + +#: ../../fe_utils/recovery_gen.c:152 pg_basebackup.c:1166 pg_basebackup.c:1671 +#: pg_basebackup.c:1747 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "konnte Datei »%s« nicht erstellen: %m" + +#: pg_basebackup.c:224 #, c-format msgid "removing data directory \"%s\"" msgstr "entferne Datenverzeichnis »%s«" -#: pg_basebackup.c:225 +#: pg_basebackup.c:226 #, c-format msgid "failed to remove data directory" msgstr "konnte Datenverzeichnis nicht entfernen" -#: pg_basebackup.c:229 +#: pg_basebackup.c:230 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "entferne Inhalt des Datenverzeichnisses »%s«" -#: pg_basebackup.c:231 +#: pg_basebackup.c:232 #, c-format msgid "failed to remove contents of data directory" msgstr "konnte Inhalt des Datenverzeichnisses nicht entfernen" -#: pg_basebackup.c:236 +#: pg_basebackup.c:237 #, c-format msgid "removing WAL directory \"%s\"" msgstr "entferne WAL-Verzeichnis »%s«" -#: pg_basebackup.c:238 +#: pg_basebackup.c:239 #, c-format msgid "failed to remove WAL directory" msgstr "konnte WAL-Verzeichnis nicht entfernen" -#: pg_basebackup.c:242 +#: pg_basebackup.c:243 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "entferne Inhalt des WAL-Verzeichnisses »%s«" -#: pg_basebackup.c:244 +#: pg_basebackup.c:245 #, c-format msgid "failed to remove contents of WAL directory" msgstr "konnte Inhalt des WAL-Verzeichnisses nicht entfernen" -#: pg_basebackup.c:250 +#: pg_basebackup.c:251 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "Datenverzeichnis »%s« wurde auf Anwenderwunsch nicht entfernt" -#: pg_basebackup.c:253 +#: pg_basebackup.c:254 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "WAL-Verzeichnis »%s« wurde auf Anwenderwunsch nicht entfernt" -#: pg_basebackup.c:257 +#: pg_basebackup.c:258 #, c-format msgid "changes to tablespace directories will not be undone" msgstr "Änderungen in Tablespace-Verzeichnissen werden nicht rückgängig gemacht" -#: pg_basebackup.c:298 +#: pg_basebackup.c:299 #, c-format msgid "directory name too long" msgstr "Verzeichnisname zu lang" -#: pg_basebackup.c:308 +#: pg_basebackup.c:309 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "mehrere »=«-Zeichen im Tablespace-Mapping" -#: pg_basebackup.c:320 +#: pg_basebackup.c:321 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "ungültiges Tablespace-Mapping-Format »%s«, muss »ALTES_VERZ=NEUES_VERZ« sein" -#: pg_basebackup.c:332 +#: pg_basebackup.c:333 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "altes Verzeichnis im Tablespace-Mapping ist kein absoluter Pfad: %s" -#: pg_basebackup.c:339 +#: pg_basebackup.c:340 #, c-format msgid "new directory is not an absolute path in tablespace mapping: %s" msgstr "neues Verzeichnis im Tablespace-Mapping ist kein absoluter Pfad: %s" -#: pg_basebackup.c:378 +#: pg_basebackup.c:379 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -167,17 +185,17 @@ msgstr "" "%s erzeugt eine Basissicherung eines laufenden PostgreSQL-Servers.\n" "\n" -#: pg_basebackup.c:380 pg_receivewal.c:79 pg_recvlogical.c:75 +#: pg_basebackup.c:381 pg_receivewal.c:79 pg_recvlogical.c:75 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: pg_basebackup.c:381 pg_receivewal.c:80 pg_recvlogical.c:76 +#: pg_basebackup.c:382 pg_receivewal.c:80 pg_recvlogical.c:76 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" -#: pg_basebackup.c:382 +#: pg_basebackup.c:383 #, c-format msgid "" "\n" @@ -186,17 +204,17 @@ msgstr "" "\n" "Optionen die die Ausgabe kontrollieren:\n" -#: pg_basebackup.c:383 +#: pg_basebackup.c:384 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=VERZ Basissicherung in dieses Verzeichnis empfangen\n" -#: pg_basebackup.c:384 +#: pg_basebackup.c:385 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|t Ausgabeformat (plain (Voreinstellung), tar)\n" -#: pg_basebackup.c:385 +#: pg_basebackup.c:386 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -205,7 +223,7 @@ msgstr "" " -r, --max-rate=RATE maximale Transferrate für Übertragung des Datenver-\n" " zeichnisses (in kB/s, oder Suffix »k« oder »M« abgeben)\n" -#: pg_basebackup.c:387 +#: pg_basebackup.c:388 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -214,7 +232,7 @@ msgstr "" " -R, --write-recovery-conf\n" " Konfiguration für Replikation schreiben\n" -#: pg_basebackup.c:389 +#: pg_basebackup.c:390 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -223,12 +241,12 @@ msgstr "" " -T, --tablespace-mapping=ALTES_VERZ=NEUES_VERZ\n" " Tablespace in ALTES_VERZ nach NEUES_VERZ verlagern\n" -#: pg_basebackup.c:391 +#: pg_basebackup.c:392 #, c-format msgid " --waldir=WALDIR location for the write-ahead log directory\n" msgstr " --waldir=WALVERZ Verzeichnis für das Write-Ahead-Log\n" -#: pg_basebackup.c:392 +#: pg_basebackup.c:393 #, c-format msgid "" " -X, --wal-method=none|fetch|stream\n" @@ -237,17 +255,17 @@ msgstr "" " -X, --wal-method=none|fetch|stream\n" " benötigte WAL-Dateien mit angegebener Methode einbeziehen\n" -#: pg_basebackup.c:394 +#: pg_basebackup.c:395 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip Tar-Ausgabe komprimieren\n" -#: pg_basebackup.c:395 +#: pg_basebackup.c:396 #, c-format msgid " -Z, --compress=0-9 compress tar output with given compression level\n" msgstr " -Z, --compress=0-9 Tar-Ausgabe mit angegebenem Niveau komprimieren\n" -#: pg_basebackup.c:396 +#: pg_basebackup.c:397 #, c-format msgid "" "\n" @@ -256,7 +274,7 @@ msgstr "" "\n" "Allgemeine Optionen:\n" -#: pg_basebackup.c:397 +#: pg_basebackup.c:398 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" @@ -265,49 +283,49 @@ msgstr "" " -c, --checkpoint=fast|spread\n" " schnelles oder verteiltes Checkpointing einstellen\n" -#: pg_basebackup.c:399 +#: pg_basebackup.c:400 #, c-format msgid " -C, --create-slot create replication slot\n" msgstr " -C, --create-slot Replikations-Slot erzeugen\n" -#: pg_basebackup.c:400 +#: pg_basebackup.c:401 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=LABEL Backup-Label setzen\n" -#: pg_basebackup.c:401 +#: pg_basebackup.c:402 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean nach Fehlern nicht aufräumen\n" -#: pg_basebackup.c:402 +#: pg_basebackup.c:403 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr "" " -N, --no-sync nicht warten, bis Änderungen sicher auf Festplatte\n" " geschrieben sind\n" -#: pg_basebackup.c:403 +#: pg_basebackup.c:404 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress Fortschrittsinformationen zeigen\n" -#: pg_basebackup.c:404 pg_receivewal.c:89 +#: pg_basebackup.c:405 pg_receivewal.c:89 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=SLOTNAME zu verwendender Replikations-Slot\n" -#: pg_basebackup.c:405 pg_receivewal.c:91 pg_recvlogical.c:96 +#: pg_basebackup.c:406 pg_receivewal.c:91 pg_recvlogical.c:96 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose »Verbose«-Modus\n" -#: pg_basebackup.c:406 pg_receivewal.c:92 pg_recvlogical.c:97 +#: pg_basebackup.c:407 pg_receivewal.c:92 pg_recvlogical.c:97 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_basebackup.c:407 +#: pg_basebackup.c:408 #, c-format msgid "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" @@ -316,7 +334,7 @@ msgstr "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" " Algorithmus für Manifest-Prüfsummen\n" -#: pg_basebackup.c:409 +#: pg_basebackup.c:410 #, c-format msgid "" " --manifest-force-encode\n" @@ -325,22 +343,22 @@ msgstr "" " --manifest-force-encode\n" " alle Dateinamen im Manifest hex-kodieren\n" -#: pg_basebackup.c:411 +#: pg_basebackup.c:412 #, c-format msgid " --no-estimate-size do not estimate backup size in server side\n" msgstr " --no-estimate-size nicht die Backup-Größe auf dem Server schätzen\n" -#: pg_basebackup.c:412 +#: pg_basebackup.c:413 #, c-format msgid " --no-manifest suppress generation of backup manifest\n" msgstr " --no-manifest kein Backup-Manifest erzeugen\n" -#: pg_basebackup.c:413 +#: pg_basebackup.c:414 #, c-format msgid " --no-slot prevent creation of temporary replication slot\n" msgstr " --no-slot keinen temporären Replikations-Slot erzeugen\n" -#: pg_basebackup.c:414 +#: pg_basebackup.c:415 #, c-format msgid "" " --no-verify-checksums\n" @@ -349,12 +367,12 @@ msgstr "" " --no-verify-checksums\n" " Prüfsummen nicht überprüfen\n" -#: pg_basebackup.c:416 pg_receivewal.c:94 pg_recvlogical.c:98 +#: pg_basebackup.c:417 pg_receivewal.c:94 pg_recvlogical.c:98 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_basebackup.c:417 pg_receivewal.c:95 pg_recvlogical.c:99 +#: pg_basebackup.c:418 pg_receivewal.c:95 pg_recvlogical.c:99 #, c-format msgid "" "\n" @@ -363,22 +381,22 @@ msgstr "" "\n" "Verbindungsoptionen:\n" -#: pg_basebackup.c:418 pg_receivewal.c:96 +#: pg_basebackup.c:419 pg_receivewal.c:96 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=VERBDG Verbindungsparameter\n" -#: pg_basebackup.c:419 pg_receivewal.c:97 pg_recvlogical.c:101 +#: pg_basebackup.c:420 pg_receivewal.c:97 pg_recvlogical.c:101 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n" -#: pg_basebackup.c:420 pg_receivewal.c:98 pg_recvlogical.c:102 +#: pg_basebackup.c:421 pg_receivewal.c:98 pg_recvlogical.c:102 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT Portnummer des Datenbankservers\n" -#: pg_basebackup.c:421 +#: pg_basebackup.c:422 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -387,22 +405,22 @@ msgstr "" " -s, --status-interval=INTERVALL\n" " Zeit zwischen an Server gesendeten Statuspaketen (in Sekunden)\n" -#: pg_basebackup.c:423 pg_receivewal.c:99 pg_recvlogical.c:103 +#: pg_basebackup.c:424 pg_receivewal.c:99 pg_recvlogical.c:103 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME Datenbankbenutzername\n" -#: pg_basebackup.c:424 pg_receivewal.c:100 pg_recvlogical.c:104 +#: pg_basebackup.c:425 pg_receivewal.c:100 pg_recvlogical.c:104 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password niemals nach Passwort fragen\n" -#: pg_basebackup.c:425 pg_receivewal.c:101 pg_recvlogical.c:105 +#: pg_basebackup.c:426 pg_receivewal.c:101 pg_recvlogical.c:105 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password nach Passwort fragen (sollte automatisch geschehen)\n" -#: pg_basebackup.c:426 pg_receivewal.c:105 pg_recvlogical.c:106 +#: pg_basebackup.c:427 pg_receivewal.c:105 pg_recvlogical.c:106 #, c-format msgid "" "\n" @@ -411,381 +429,366 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: pg_basebackup.c:427 pg_receivewal.c:106 pg_recvlogical.c:107 +#: pg_basebackup.c:428 pg_receivewal.c:106 pg_recvlogical.c:107 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: pg_basebackup.c:470 +#: pg_basebackup.c:471 #, c-format msgid "could not read from ready pipe: %m" msgstr "konnte nicht aus bereiter Pipe lesen: %m" -#: pg_basebackup.c:476 pg_basebackup.c:607 pg_basebackup.c:2115 +#: pg_basebackup.c:477 pg_basebackup.c:608 pg_basebackup.c:2133 #: streamutil.c:450 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "konnte Write-Ahead-Log-Position »%s« nicht interpretieren" -#: pg_basebackup.c:572 pg_receivewal.c:441 +#: pg_basebackup.c:573 pg_receivewal.c:441 #, c-format msgid "could not finish writing WAL files: %m" msgstr "konnte WAL-Dateien nicht zu Ende schreiben: %m" -#: pg_basebackup.c:619 +#: pg_basebackup.c:620 #, c-format msgid "could not create pipe for background process: %m" msgstr "konnte Pipe für Hintergrundprozess nicht erzeugen: %m" -#: pg_basebackup.c:654 +#: pg_basebackup.c:655 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "temporärer Replikations-Slot »%s« wurde erzeugt" -#: pg_basebackup.c:657 +#: pg_basebackup.c:658 #, c-format msgid "created replication slot \"%s\"" msgstr "Replikations-Slot »%s« wurde erzeugt" -#: pg_basebackup.c:677 pg_basebackup.c:730 pg_basebackup.c:1606 +#: pg_basebackup.c:678 pg_basebackup.c:731 pg_basebackup.c:1620 #, c-format msgid "could not create directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht erzeugen: %m" -#: pg_basebackup.c:695 +#: pg_basebackup.c:696 #, c-format msgid "could not create background process: %m" msgstr "konnte Hintergrundprozess nicht erzeugen: %m" -#: pg_basebackup.c:707 +#: pg_basebackup.c:708 #, c-format msgid "could not create background thread: %m" msgstr "konnte Hintergrund-Thread nicht erzeugen: %m" -#: pg_basebackup.c:751 +#: pg_basebackup.c:752 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "Verzeichnis »%s« existiert aber ist nicht leer" -#: pg_basebackup.c:758 +#: pg_basebackup.c:759 #, c-format msgid "could not access directory \"%s\": %m" msgstr "konnte nicht auf Verzeichnis »%s« zugreifen: %m" -#: pg_basebackup.c:819 +#: pg_basebackup.c:824 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s kB (100%%), %d/%d Tablespace %*s" msgstr[1] "%*s/%s kB (100%%), %d/%d Tablespaces %*s" -#: pg_basebackup.c:831 +#: pg_basebackup.c:836 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s kB (%d%%), %d/%d Tablespace (%s%-*.*s)" msgstr[1] "%*s/%s kB (%d%%), %d/%d Tablespaces (%s%-*.*s)" -#: pg_basebackup.c:847 +#: pg_basebackup.c:852 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s kB (%d%%), %d/%d Tablespace" msgstr[1] "%*s/%s kB (%d%%), %d/%d Tablespaces" -#: pg_basebackup.c:871 +#: pg_basebackup.c:877 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "Transferrate »%s« ist kein gültiger Wert" -#: pg_basebackup.c:876 +#: pg_basebackup.c:882 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "ungültige Transferrate »%s«: %m" -#: pg_basebackup.c:885 +#: pg_basebackup.c:891 #, c-format msgid "transfer rate must be greater than zero" msgstr "Transferrate muss größer als null sein" -#: pg_basebackup.c:917 +#: pg_basebackup.c:923 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "ungültige Einheit für --max-rate: »%s«" -#: pg_basebackup.c:924 +#: pg_basebackup.c:930 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "Transferrate »%s« überschreitet Bereich für ganze Zahlen" -#: pg_basebackup.c:934 +#: pg_basebackup.c:940 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "Transferrate »%s« ist außerhalb des gültigen Bereichs" -#: pg_basebackup.c:955 +#: pg_basebackup.c:961 #, c-format msgid "could not get COPY data stream: %s" msgstr "konnte COPY-Datenstrom nicht empfangen: %s" -#: pg_basebackup.c:975 pg_recvlogical.c:435 pg_recvlogical.c:607 -#: receivelog.c:965 +#: pg_basebackup.c:981 pg_recvlogical.c:435 pg_recvlogical.c:607 +#: receivelog.c:964 #, c-format msgid "could not read COPY data: %s" msgstr "konnte COPY-Daten nicht lesen: %s" -#: pg_basebackup.c:997 +#: pg_basebackup.c:1007 #, c-format msgid "could not write to compressed file \"%s\": %s" msgstr "konnte nicht in komprimierte Datei »%s« schreiben: %s" -#: pg_basebackup.c:1007 pg_basebackup.c:1696 pg_basebackup.c:1748 -#, c-format -msgid "could not write to file \"%s\": %m" -msgstr "konnte nicht in Datei »%s« schreiben: %m" - -#: pg_basebackup.c:1057 +#: pg_basebackup.c:1071 #, c-format msgid "could not duplicate stdout: %m" msgstr "konnte Standardausgabe nicht duplizieren: %m" -#: pg_basebackup.c:1064 +#: pg_basebackup.c:1078 #, c-format msgid "could not open output file: %m" msgstr "konnte Ausgabedatei nicht öffnen: %m" -#: pg_basebackup.c:1071 pg_basebackup.c:1092 pg_basebackup.c:1121 +#: pg_basebackup.c:1085 pg_basebackup.c:1106 pg_basebackup.c:1135 #, c-format msgid "could not set compression level %d: %s" msgstr "konnte Komprimierungsniveau %d nicht setzen: %s" -#: pg_basebackup.c:1141 +#: pg_basebackup.c:1155 #, c-format msgid "could not create compressed file \"%s\": %s" msgstr "konnte komprimierte Datei »%s« nicht erzeugen: %s" -#: pg_basebackup.c:1152 pg_basebackup.c:1657 pg_basebackup.c:1729 -#, c-format -msgid "could not create file \"%s\": %m" -msgstr "konnte Datei »%s« nicht erstellen: %m" - -#: pg_basebackup.c:1234 -#, c-format -msgid "out of memory" -msgstr "Speicher aufgebraucht" - -#: pg_basebackup.c:1253 +#: pg_basebackup.c:1267 #, c-format msgid "could not close compressed file \"%s\": %s" msgstr "konnte komprimierte Datei »%s« nicht schließen: %s" -#: pg_basebackup.c:1265 pg_recvlogical.c:632 +#: pg_basebackup.c:1279 pg_recvlogical.c:632 #, c-format msgid "could not close file \"%s\": %m" msgstr "konnte Datei »%s« nicht schließen: %m" -#: pg_basebackup.c:1527 +#: pg_basebackup.c:1541 #, c-format msgid "COPY stream ended before last file was finished" msgstr "COPY-Strom endete vor dem Ende der letzten Datei" -#: pg_basebackup.c:1556 +#: pg_basebackup.c:1570 #, c-format msgid "invalid tar block header size: %zu" msgstr "ungültige Tar-Block-Kopf-Größe: %zu" -#: pg_basebackup.c:1613 +#: pg_basebackup.c:1627 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "konnte Zugriffsrechte für Verzeichnis »%s« nicht setzen: %m" -#: pg_basebackup.c:1637 +#: pg_basebackup.c:1651 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "konnte symbolische Verknüpfung von »%s« nach »%s« nicht erzeugen: %m" -#: pg_basebackup.c:1644 +#: pg_basebackup.c:1658 #, c-format msgid "unrecognized link indicator \"%c\"" msgstr "unbekannter Verknüpfungsindikator »%c«" -#: pg_basebackup.c:1663 +#: pg_basebackup.c:1677 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "konnte Zugriffsrechte von Datei »%s« nicht setzen: %m" -#: pg_basebackup.c:1809 +#: pg_basebackup.c:1831 #, c-format msgid "incompatible server version %s" msgstr "inkompatible Serverversion %s" -#: pg_basebackup.c:1824 +#: pg_basebackup.c:1846 #, c-format msgid "HINT: use -X none or -X fetch to disable log streaming" msgstr "TIPP: -X none oder -X fetch verwenden um Log-Streaming abzuschalten" -#: pg_basebackup.c:1860 +#: pg_basebackup.c:1882 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "Basissicherung eingeleitet, warte auf Abschluss des Checkpoints" -#: pg_basebackup.c:1886 pg_recvlogical.c:262 receivelog.c:481 receivelog.c:530 -#: receivelog.c:569 streamutil.c:297 streamutil.c:370 streamutil.c:422 +#: pg_basebackup.c:1908 pg_recvlogical.c:262 receivelog.c:480 receivelog.c:529 +#: receivelog.c:568 streamutil.c:297 streamutil.c:370 streamutil.c:422 #: streamutil.c:533 streamutil.c:578 #, c-format msgid "could not send replication command \"%s\": %s" msgstr "konnte Replikationsbefehl »%s« nicht senden: %s" -#: pg_basebackup.c:1897 +#: pg_basebackup.c:1919 #, c-format msgid "could not initiate base backup: %s" msgstr "konnte Basissicherung nicht starten: %s" -#: pg_basebackup.c:1903 +#: pg_basebackup.c:1925 #, c-format msgid "server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields" msgstr "unerwartete Antwort auf Befehl BASE_BACKUP: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet" -#: pg_basebackup.c:1911 +#: pg_basebackup.c:1933 #, c-format msgid "checkpoint completed" msgstr "Checkpoint abgeschlossen" -#: pg_basebackup.c:1926 +#: pg_basebackup.c:1948 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "Write-Ahead-Log-Startpunkt: %s auf Zeitleiste %u" -#: pg_basebackup.c:1935 +#: pg_basebackup.c:1957 #, c-format msgid "could not get backup header: %s" msgstr "konnte Kopf der Sicherung nicht empfangen: %s" -#: pg_basebackup.c:1941 +#: pg_basebackup.c:1963 #, c-format msgid "no data returned from server" msgstr "keine Daten vom Server zurückgegeben" -#: pg_basebackup.c:1973 +#: pg_basebackup.c:1995 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "kann nur einen einzelnen Tablespace auf die Standardausgabe schreiben, Datenbank hat %d" -#: pg_basebackup.c:1985 +#: pg_basebackup.c:2007 #, c-format msgid "starting background WAL receiver" msgstr "Hintergrund-WAL-Receiver wird gestartet" -#: pg_basebackup.c:2028 +#: pg_basebackup.c:2046 #, c-format msgid "could not get write-ahead log end position from server: %s" msgstr "konnte Write-Ahead-Log-Endposition nicht vom Server empfangen: %s" -#: pg_basebackup.c:2034 +#: pg_basebackup.c:2052 #, c-format msgid "no write-ahead log end position returned from server" msgstr "keine Write-Ahead-Log-Endposition vom Server zurückgegeben" -#: pg_basebackup.c:2039 +#: pg_basebackup.c:2057 #, c-format msgid "write-ahead log end point: %s" msgstr "Write-Ahead-Log-Endposition: %s" -#: pg_basebackup.c:2050 +#: pg_basebackup.c:2068 #, c-format msgid "checksum error occurred" msgstr "ein Prüfsummenfehler ist aufgetreten" -#: pg_basebackup.c:2055 +#: pg_basebackup.c:2073 #, c-format msgid "final receive failed: %s" msgstr "letztes Empfangen fehlgeschlagen: %s" -#: pg_basebackup.c:2079 +#: pg_basebackup.c:2097 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "warte bis Hintergrundprozess Streaming beendet hat ..." -#: pg_basebackup.c:2084 +#: pg_basebackup.c:2102 #, c-format msgid "could not send command to background pipe: %m" msgstr "konnte Befehl nicht an Hintergrund-Pipe senden: %m" -#: pg_basebackup.c:2092 +#: pg_basebackup.c:2110 #, c-format msgid "could not wait for child process: %m" msgstr "konnte nicht auf Kindprozess warten: %m" -#: pg_basebackup.c:2097 +#: pg_basebackup.c:2115 #, c-format msgid "child %d died, expected %d" msgstr "Kindprozess %d endete, aber %d wurde erwartet" -#: pg_basebackup.c:2102 streamutil.c:92 +#: pg_basebackup.c:2120 streamutil.c:92 streamutil.c:203 #, c-format msgid "%s" msgstr "%s" -#: pg_basebackup.c:2127 +#: pg_basebackup.c:2145 #, c-format msgid "could not wait for child thread: %m" msgstr "konnte nicht auf Kind-Thread warten: %m" -#: pg_basebackup.c:2133 +#: pg_basebackup.c:2151 #, c-format msgid "could not get child thread exit status: %m" msgstr "konnte Statuscode des Kind-Threads nicht ermitteln: %m" -#: pg_basebackup.c:2138 +#: pg_basebackup.c:2156 #, c-format msgid "child thread exited with error %u" msgstr "Kind-Thread hat mit Fehler %u beendet" -#: pg_basebackup.c:2166 +#: pg_basebackup.c:2184 #, c-format msgid "syncing data to disk ..." msgstr "synchronisiere Daten auf Festplatte ..." -#: pg_basebackup.c:2191 +#: pg_basebackup.c:2209 #, c-format msgid "renaming backup_manifest.tmp to backup_manifest" msgstr "umbenennen von backup_manifest.tmp nach backup_manifest" -#: pg_basebackup.c:2202 +#: pg_basebackup.c:2220 #, c-format msgid "base backup completed" msgstr "Basissicherung abgeschlossen" -#: pg_basebackup.c:2287 +#: pg_basebackup.c:2305 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "ungültiges Ausgabeformat »%s«, muss »plain« oder »tar« sein" -#: pg_basebackup.c:2331 +#: pg_basebackup.c:2349 #, c-format msgid "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" msgstr "ungültige Option »%s« für --wal-method, muss »fetch«, »stream« oder »none« sein" -#: pg_basebackup.c:2359 pg_receivewal.c:580 +#: pg_basebackup.c:2377 pg_receivewal.c:580 #, c-format msgid "invalid compression level \"%s\"" msgstr "ungültiges Komprimierungsniveau »%s«" -#: pg_basebackup.c:2370 +#: pg_basebackup.c:2388 #, c-format msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" msgstr "ungültiges Checkpoint-Argument »%s«, muss »fast« oder »spread« sein" -#: pg_basebackup.c:2397 pg_receivewal.c:555 pg_recvlogical.c:820 +#: pg_basebackup.c:2415 pg_receivewal.c:555 pg_recvlogical.c:820 #, c-format msgid "invalid status interval \"%s\"" msgstr "ungültiges Statusintervall »%s«" -#: pg_basebackup.c:2427 pg_basebackup.c:2440 pg_basebackup.c:2451 -#: pg_basebackup.c:2462 pg_basebackup.c:2470 pg_basebackup.c:2478 -#: pg_basebackup.c:2488 pg_basebackup.c:2501 pg_basebackup.c:2509 -#: pg_basebackup.c:2520 pg_basebackup.c:2530 pg_basebackup.c:2547 -#: pg_basebackup.c:2555 pg_basebackup.c:2563 pg_receivewal.c:605 +#: pg_basebackup.c:2445 pg_basebackup.c:2458 pg_basebackup.c:2469 +#: pg_basebackup.c:2480 pg_basebackup.c:2488 pg_basebackup.c:2496 +#: pg_basebackup.c:2506 pg_basebackup.c:2519 pg_basebackup.c:2528 +#: pg_basebackup.c:2539 pg_basebackup.c:2549 pg_basebackup.c:2567 +#: pg_basebackup.c:2576 pg_basebackup.c:2585 pg_receivewal.c:605 #: pg_receivewal.c:618 pg_receivewal.c:626 pg_receivewal.c:636 #: pg_receivewal.c:644 pg_receivewal.c:655 pg_recvlogical.c:846 #: pg_recvlogical.c:859 pg_recvlogical.c:870 pg_recvlogical.c:878 @@ -795,83 +798,69 @@ msgstr "ungültiges Statusintervall »%s«" msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: pg_basebackup.c:2438 pg_receivewal.c:616 pg_recvlogical.c:857 +#: pg_basebackup.c:2456 pg_receivewal.c:616 pg_recvlogical.c:857 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" -#: pg_basebackup.c:2450 pg_receivewal.c:654 +#: pg_basebackup.c:2468 pg_receivewal.c:654 #, c-format msgid "no target directory specified" msgstr "kein Zielverzeichnis angegeben" -#: pg_basebackup.c:2461 +#: pg_basebackup.c:2479 #, c-format msgid "only tar mode backups can be compressed" msgstr "nur Sicherungen im Tar-Modus können komprimiert werden" -#: pg_basebackup.c:2469 +#: pg_basebackup.c:2487 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "im Tar-Modus können Write-Ahead-Logs nicht auf Standardausgabe geschrieben werden" -#: pg_basebackup.c:2477 +#: pg_basebackup.c:2495 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "Replikations-Slots können nur mit WAL-Streaming verwendet werden" -#: pg_basebackup.c:2487 +#: pg_basebackup.c:2505 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "--no-slot kann nicht zusammen mit einem Slot-Namen verwendet werden" #. translator: second %s is an option name -#: pg_basebackup.c:2499 pg_receivewal.c:634 +#: pg_basebackup.c:2517 pg_receivewal.c:634 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "für %s muss ein Slot mit --slot angegeben werden" -#: pg_basebackup.c:2508 +#: pg_basebackup.c:2526 pg_basebackup.c:2565 pg_basebackup.c:2574 +#: pg_basebackup.c:2583 #, c-format -msgid "--create-slot and --no-slot are incompatible options" -msgstr "--create-slot und --no-slot sind inkompatible Optionen" +msgid "%s and %s are incompatible options" +msgstr "%s und %s sind inkompatible Optionen" -#: pg_basebackup.c:2519 +#: pg_basebackup.c:2538 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "WAL-Verzeichnis kann nur im »plain«-Modus angegeben werden" -#: pg_basebackup.c:2529 +#: pg_basebackup.c:2548 #, c-format msgid "WAL directory location must be an absolute path" msgstr "WAL-Verzeichnis muss absoluten Pfad haben" -#: pg_basebackup.c:2539 pg_receivewal.c:663 +#: pg_basebackup.c:2558 pg_receivewal.c:663 #, c-format msgid "this build does not support compression" msgstr "diese Installation unterstützt keine Komprimierung" -#: pg_basebackup.c:2546 -#, c-format -msgid "--progress and --no-estimate-size are incompatible options" -msgstr "--progress und --no-estimate-size sind inkompatible Optionen" - -#: pg_basebackup.c:2554 -#, c-format -msgid "--no-manifest and --manifest-checksums are incompatible options" -msgstr "--no-manifest und --manifest-checksums sind inkompatible Optionen" - -#: pg_basebackup.c:2562 -#, c-format -msgid "--no-manifest and --manifest-force-encode are incompatible options" -msgstr "--no-manifest und --manifest-force-encode sind inkompatible Optionen" - -#: pg_basebackup.c:2621 +#: pg_basebackup.c:2643 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht erstellen: %m" -#: pg_basebackup.c:2625 +#: pg_basebackup.c:2647 #, c-format msgid "symlinks are not supported on this platform" msgstr "symbolische Verknüpfungen werden auf dieser Plattform nicht unterstützt" @@ -986,8 +975,8 @@ msgstr "konnte Verzeichnis »%s« nicht schließen: %m" #: pg_receivewal.c:272 #, c-format -msgid "segment file \"%s\" has incorrect size %d, skipping" -msgstr "Segmentdatei »%s« hat falsche Größe %d, wird übersprungen" +msgid "segment file \"%s\" has incorrect size %lld, skipping" +msgstr "Segmentdatei »%s« hat falsche Größe %lld, wird übersprungen" #: pg_receivewal.c:290 #, c-format @@ -1138,7 +1127,7 @@ msgstr " -d, --dbname=DBNAME Datenbank, mit der verbunden werden soll\n" msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "bestätige Schreiben bis %X/%X, Flush bis %X/%X (Slot %s)" -#: pg_recvlogical.c:157 receivelog.c:343 +#: pg_recvlogical.c:157 receivelog.c:342 #, c-format msgid "could not send feedback packet: %s" msgstr "konnte Rückmeldungspaket nicht senden: %s" @@ -1158,27 +1147,27 @@ msgstr "Streaming eingeleitet" msgid "could not open log file \"%s\": %m" msgstr "konnte Logdatei »%s« nicht öffnen: %m" -#: pg_recvlogical.c:361 receivelog.c:873 +#: pg_recvlogical.c:361 receivelog.c:872 #, c-format msgid "invalid socket: %s" msgstr "ungültiges Socket: %s" -#: pg_recvlogical.c:414 receivelog.c:901 +#: pg_recvlogical.c:414 receivelog.c:900 #, c-format -msgid "select() failed: %m" -msgstr "select() fehlgeschlagen: %m" +msgid "%s() failed: %m" +msgstr "%s() fehlgeschlagen: %m" -#: pg_recvlogical.c:421 receivelog.c:951 +#: pg_recvlogical.c:421 receivelog.c:950 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "konnte keine Daten vom WAL-Stream empfangen: %s" -#: pg_recvlogical.c:463 pg_recvlogical.c:514 receivelog.c:995 receivelog.c:1061 +#: pg_recvlogical.c:463 pg_recvlogical.c:514 receivelog.c:994 receivelog.c:1060 #, c-format msgid "streaming header too small: %d" msgstr "Streaming-Header zu klein: %d" -#: pg_recvlogical.c:498 receivelog.c:833 +#: pg_recvlogical.c:498 receivelog.c:832 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "unbekannter Streaming-Header: »%c«" @@ -1188,7 +1177,7 @@ msgstr "unbekannter Streaming-Header: »%c«" msgid "could not write %u bytes to log file \"%s\": %m" msgstr "konnte %u Bytes nicht in Logdatei »%s« schreiben: %m" -#: pg_recvlogical.c:618 receivelog.c:629 receivelog.c:666 +#: pg_recvlogical.c:618 receivelog.c:628 receivelog.c:665 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "unerwarteter Abbruch des Replikations-Streams: %s" @@ -1253,162 +1242,157 @@ msgstr "Endposition %X/%X durch Keepalive erreicht" msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "Endposition %X/%X erreicht durch WAL-Eintrag bei %X/%X" -#: receivelog.c:69 +#: receivelog.c:68 #, c-format msgid "could not create archive status file \"%s\": %s" msgstr "konnte Archivstatusdatei »%s« nicht erstellen: %s" -#: receivelog.c:116 +#: receivelog.c:115 #, c-format msgid "could not get size of write-ahead log file \"%s\": %s" msgstr "konnte Größe der Write-Ahead-Log-Datei »%s« nicht ermittlen: %s" -#: receivelog.c:126 +#: receivelog.c:125 #, c-format msgid "could not open existing write-ahead log file \"%s\": %s" msgstr "konnte bestehende Write-Ahead-Log-Datei »%s« nicht öffnen: %s" -#: receivelog.c:134 +#: receivelog.c:133 #, c-format msgid "could not fsync existing write-ahead log file \"%s\": %s" msgstr "konnte bestehende Write-Ahead-Log-Datei »%s« nicht fsyncen: %s" -#: receivelog.c:148 +#: receivelog.c:147 #, c-format msgid "write-ahead log file \"%s\" has %d byte, should be 0 or %d" msgid_plural "write-ahead log file \"%s\" has %d bytes, should be 0 or %d" msgstr[0] "Write-Ahead-Log-Datei »%s« hat %d Byte, sollte 0 oder %d sein" msgstr[1] "Write-Ahead-Log-Datei »%s« hat %d Bytes, sollte 0 oder %d sein" -#: receivelog.c:163 +#: receivelog.c:162 #, c-format msgid "could not open write-ahead log file \"%s\": %s" msgstr "konnte Write-Ahead-Log-Datei »%s« nicht öffnen: %s" -#: receivelog.c:189 +#: receivelog.c:188 #, c-format msgid "could not determine seek position in file \"%s\": %s" msgstr "konnte Positionszeiger in Datei »%s« nicht ermitteln: %s" -#: receivelog.c:203 +#: receivelog.c:202 #, c-format msgid "not renaming \"%s%s\", segment is not complete" msgstr "»%s%s« wird nicht umbenannt, Segment ist noch nicht vollständig" -#: receivelog.c:215 receivelog.c:300 receivelog.c:675 +#: receivelog.c:214 receivelog.c:299 receivelog.c:674 #, c-format msgid "could not close file \"%s\": %s" msgstr "konnte Datei »%s« nicht schließen: %s" -#: receivelog.c:272 +#: receivelog.c:271 #, c-format msgid "server reported unexpected history file name for timeline %u: %s" msgstr "Server berichtete unerwarteten History-Dateinamen für Zeitleiste %u: %s" -#: receivelog.c:280 +#: receivelog.c:279 #, c-format msgid "could not create timeline history file \"%s\": %s" msgstr "konnte Zeitleisten-History-Datei »%s« nicht erzeugen: %s" -#: receivelog.c:287 +#: receivelog.c:286 #, c-format msgid "could not write timeline history file \"%s\": %s" msgstr "konnte Zeitleisten-History-Datei »%s« nicht schreiben: %s" -#: receivelog.c:377 +#: receivelog.c:376 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions older than %s" msgstr "inkompatible Serverversion %s; Client unterstützt Streaming nicht mit Serverversionen älter als %s" -#: receivelog.c:386 +#: receivelog.c:385 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions newer than %s" msgstr "inkompatible Serverversion %s; Client unterstützt Streaming nicht mit Serverversionen neuer als %s" -#: receivelog.c:488 streamutil.c:430 streamutil.c:467 +#: receivelog.c:487 streamutil.c:430 streamutil.c:467 #, c-format msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "Konnte System nicht identifizieren: %d Zeilen und %d Felder erhalten, %d Zeilen und %d oder mehr Felder erwartet" -#: receivelog.c:495 +#: receivelog.c:494 #, c-format msgid "system identifier does not match between base backup and streaming connection" msgstr "Systemidentifikator stimmt nicht zwischen Basissicherung und Streaming-Verbindung überein" -#: receivelog.c:501 +#: receivelog.c:500 #, c-format msgid "starting timeline %u is not present in the server" msgstr "Startzeitleiste %u ist auf dem Server nicht vorhanden" -#: receivelog.c:542 +#: receivelog.c:541 #, c-format msgid "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields" msgstr "unerwartete Antwort auf Befehl TIMELINE_HISTORY: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet" -#: receivelog.c:613 +#: receivelog.c:612 #, c-format msgid "server reported unexpected next timeline %u, following timeline %u" msgstr "Server berichtete unerwartete nächste Zeitleiste %u, folgend auf Zeitleiste %u" -#: receivelog.c:619 +#: receivelog.c:618 #, c-format msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X" msgstr "Server beendete Streaming von Zeitleiste %u bei %X/%X, aber gab an, dass nächste Zeitleiste %u bei %X/%X beginnt" -#: receivelog.c:659 +#: receivelog.c:658 #, c-format msgid "replication stream was terminated before stop point" msgstr "Replikationsstrom wurde vor Stopppunkt abgebrochen" -#: receivelog.c:705 +#: receivelog.c:704 #, c-format msgid "unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields" msgstr "unerwartete Ergebnismenge nach Ende der Zeitleiste: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet" -#: receivelog.c:714 +#: receivelog.c:713 #, c-format msgid "could not parse next timeline's starting point \"%s\"" msgstr "konnte Startpunkt der nächsten Zeitleiste (»%s«) nicht interpretieren" -#: receivelog.c:763 receivelog.c:1015 +#: receivelog.c:762 receivelog.c:1014 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "konnte Datei »%s« nicht fsyncen: %s" -#: receivelog.c:1078 +#: receivelog.c:1077 #, c-format msgid "received write-ahead log record for offset %u with no file open" msgstr "Write-Ahead-Log-Eintrag für Offset %u erhalten ohne offene Datei" -#: receivelog.c:1088 +#: receivelog.c:1087 #, c-format msgid "got WAL data offset %08x, expected %08x" msgstr "WAL-Daten-Offset %08x erhalten, %08x erwartet" -#: receivelog.c:1122 +#: receivelog.c:1121 #, c-format msgid "could not write %u bytes to WAL file \"%s\": %s" msgstr "konnte %u Bytes nicht in WAL-Datei »%s« schreiben: %s" -#: receivelog.c:1147 receivelog.c:1187 receivelog.c:1218 +#: receivelog.c:1146 receivelog.c:1186 receivelog.c:1216 #, c-format msgid "could not send copy-end packet: %s" msgstr "konnte COPY-Ende-Paket nicht senden: %s" -#: streamutil.c:160 +#: streamutil.c:162 msgid "Password: " msgstr "Passwort: " -#: streamutil.c:185 +#: streamutil.c:186 #, c-format msgid "could not connect to server" msgstr "konnte nicht mit Server verbinden" -#: streamutil.c:202 -#, c-format -msgid "could not connect to server: %s" -msgstr "konnte nicht mit Server verbinden: %s" - #: streamutil.c:231 #, c-format msgid "could not clear search_path: %s" @@ -1461,7 +1445,7 @@ msgstr "konnte Replikations-Slot »%s« nicht erzeugen: %d Zeilen und %d Felder msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "konnte Replikations-Slot »%s« nicht löschen: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet" -#: walmethods.c:438 walmethods.c:927 +#: walmethods.c:438 walmethods.c:932 msgid "could not compress data" msgstr "konnte Daten nicht komprimieren" @@ -1481,14 +1465,14 @@ msgstr "Implementierungsfehler: Tar-Dateien können nicht mehr als eine offene D msgid "could not create tar header" msgstr "konnte Tar-Dateikopf nicht erzeugen" -#: walmethods.c:608 walmethods.c:648 walmethods.c:843 walmethods.c:854 +#: walmethods.c:608 walmethods.c:650 walmethods.c:847 walmethods.c:859 msgid "could not change compression parameters" msgstr "konnte Komprimierungsparameter nicht ändern" -#: walmethods.c:730 +#: walmethods.c:734 msgid "unlink not supported with compression" msgstr "Unlink wird bei Komprimierung nicht unterstützt" -#: walmethods.c:952 +#: walmethods.c:957 msgid "could not close compression stream" msgstr "konnte Komprimierungsstrom nicht schließen" diff --git a/src/bin/pg_basebackup/po/es.po b/src/bin/pg_basebackup/po/es.po index 569cd7e7a8a29..b1f138ad9b359 100644 --- a/src/bin/pg_basebackup/po/es.po +++ b/src/bin/pg_basebackup/po/es.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_basebackup (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:45+0000\n" -"PO-Revision-Date: 2019-09-29 22:12-0300\n" +"POT-Creation-Date: 2020-09-13 10:45+0000\n" +"PO-Revision-Date: 2020-09-12 21:50-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -19,7 +19,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: BlackCAT 1.0\n" +"X-Generator: Poedit 2.3\n" #: ../../../src/common/logging.c:236 #, c-format @@ -64,7 +64,7 @@ msgid "could not read directory \"%s\": %m" msgstr "no se pudo leer el directorio «%s»: %m" #: ../../common/file_utils.c:224 ../../common/file_utils.c:283 -#: ../../common/file_utils.c:357 +#: ../../common/file_utils.c:357 ../../fe_utils/recovery_gen.c:134 #, c-format msgid "could not open file \"%s\": %m" msgstr "no se pudo abrir el archivo «%s»: %m" @@ -80,87 +80,106 @@ msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "no se pudo renombrar el archivo de «%s» a «%s»: %m" -#: pg_basebackup.c:223 +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 pg_basebackup.c:1248 +#, c-format +msgid "out of memory" +msgstr "memoria agotada" + +#: ../../fe_utils/recovery_gen.c:140 pg_basebackup.c:1021 pg_basebackup.c:1714 +#: pg_basebackup.c:1770 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "no se pudo escribir a archivo «%s»: %m" + +#: ../../fe_utils/recovery_gen.c:152 pg_basebackup.c:1166 pg_basebackup.c:1671 +#: pg_basebackup.c:1747 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "no se pudo crear archivo «%s»: %m" + +#: pg_basebackup.c:224 #, c-format msgid "removing data directory \"%s\"" msgstr "eliminando el directorio de datos «%s»" -#: pg_basebackup.c:225 +#: pg_basebackup.c:226 #, c-format msgid "failed to remove data directory" msgstr "no se pudo eliminar el directorio de datos" -#: pg_basebackup.c:229 +#: pg_basebackup.c:230 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "eliminando el contenido del directorio «%s»" -#: pg_basebackup.c:231 +#: pg_basebackup.c:232 #, c-format msgid "failed to remove contents of data directory" msgstr "no se pudo eliminar el contenido del directorio de datos" -#: pg_basebackup.c:236 +#: pg_basebackup.c:237 #, c-format msgid "removing WAL directory \"%s\"" msgstr "eliminando el directorio de WAL «%s»" -#: pg_basebackup.c:238 +#: pg_basebackup.c:239 #, c-format msgid "failed to remove WAL directory" msgstr "no se pudo eliminar el directorio de WAL" -#: pg_basebackup.c:242 +#: pg_basebackup.c:243 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "eliminando el contenido del directorio de WAL «%s»" -#: pg_basebackup.c:244 +#: pg_basebackup.c:245 #, c-format msgid "failed to remove contents of WAL directory" msgstr "no se pudo eliminar el contenido del directorio de WAL" -#: pg_basebackup.c:250 +#: pg_basebackup.c:251 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "directorio de datos «%s» no eliminado a petición del usuario" -#: pg_basebackup.c:253 +#: pg_basebackup.c:254 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "directorio de WAL «%s» no eliminado a petición del usuario" -#: pg_basebackup.c:257 +#: pg_basebackup.c:258 #, c-format msgid "changes to tablespace directories will not be undone" msgstr "los cambios a los directorios de tablespaces no se desharán" -#: pg_basebackup.c:298 +#: pg_basebackup.c:299 #, c-format msgid "directory name too long" msgstr "nombre de directorio demasiado largo" -#: pg_basebackup.c:308 +#: pg_basebackup.c:309 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "múltiples signos «=» en mapeo de tablespace" -#: pg_basebackup.c:320 +#: pg_basebackup.c:321 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "formato de mapeo de tablespace «%s» no válido, debe ser «ANTIGUO=NUEVO»" -#: pg_basebackup.c:332 +#: pg_basebackup.c:333 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "directorio antiguo no es una ruta absoluta en mapeo de tablespace: %s" -#: pg_basebackup.c:339 +#: pg_basebackup.c:340 #, c-format msgid "new directory is not an absolute path in tablespace mapping: %s" msgstr "directorio nuevo no es una ruta absoluta en mapeo de tablespace: %s" -#: pg_basebackup.c:378 +#: pg_basebackup.c:379 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -169,17 +188,17 @@ msgstr "" "%s obtiene un respaldo base a partir de un servidor PostgreSQL en ejecución.\n" "\n" -#: pg_basebackup.c:380 pg_receivewal.c:79 pg_recvlogical.c:75 +#: pg_basebackup.c:381 pg_receivewal.c:79 pg_recvlogical.c:75 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_basebackup.c:381 pg_receivewal.c:80 pg_recvlogical.c:76 +#: pg_basebackup.c:382 pg_receivewal.c:80 pg_recvlogical.c:76 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPCIÓN]...\n" -#: pg_basebackup.c:382 +#: pg_basebackup.c:383 #, c-format msgid "" "\n" @@ -188,17 +207,17 @@ msgstr "" "\n" "Opciones que controlan la salida:\n" -#: pg_basebackup.c:383 +#: pg_basebackup.c:384 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=DIR directorio en el cual recibir el respaldo base\n" -#: pg_basebackup.c:384 +#: pg_basebackup.c:385 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|t formato de salida (plano (por omisión), tar)\n" -#: pg_basebackup.c:385 +#: pg_basebackup.c:386 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -207,7 +226,7 @@ msgstr "" " -r, --max-rate=TASA máxima tasa a la que transferir el directorio de datos\n" " (en kB/s, o use sufijos «k» o «M»)\n" -#: pg_basebackup.c:387 +#: pg_basebackup.c:388 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -216,7 +235,7 @@ msgstr "" " -R, --write-recovery-conf\n" " escribe configuración para replicación\n" -#: pg_basebackup.c:389 +#: pg_basebackup.c:390 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -225,12 +244,12 @@ msgstr "" " -T, --tablespace-mapping=ANTIGUO=NUEVO\n" " reubicar el directorio de tablespace de ANTIGUO a NUEVO\n" -#: pg_basebackup.c:391 +#: pg_basebackup.c:392 #, c-format msgid " --waldir=WALDIR location for the write-ahead log directory\n" msgstr " --waldir=DIRWAL ubicación para el directorio WAL\n" -#: pg_basebackup.c:392 +#: pg_basebackup.c:393 #, c-format msgid "" " -X, --wal-method=none|fetch|stream\n" @@ -240,17 +259,17 @@ msgstr "" " incluye los archivos WAL necesarios,\n" " en el modo especificado\n" -#: pg_basebackup.c:394 +#: pg_basebackup.c:395 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip comprimir la salida de tar\n" -#: pg_basebackup.c:395 +#: pg_basebackup.c:396 #, c-format msgid " -Z, --compress=0-9 compress tar output with given compression level\n" msgstr " -Z, --compress=0-9 comprimir salida tar con el nivel de compresión dado\n" -#: pg_basebackup.c:396 +#: pg_basebackup.c:397 #, c-format msgid "" "\n" @@ -259,7 +278,7 @@ msgstr "" "\n" "Opciones generales:\n" -#: pg_basebackup.c:397 +#: pg_basebackup.c:398 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" @@ -268,87 +287,80 @@ msgstr "" " -c, --checkpoint=fast|spread\n" " utilizar checkpoint rápido o extendido\n" -#: pg_basebackup.c:399 +#: pg_basebackup.c:400 #, c-format msgid " -C, --create-slot create replication slot\n" msgstr " -C, --create-slot crear un slot de replicación\n" -#: pg_basebackup.c:400 +#: pg_basebackup.c:401 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=ETIQUETA establecer etiqueta del respaldo\n" -#: pg_basebackup.c:401 +#: pg_basebackup.c:402 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean no hacer limpieza tras errores\n" -#: pg_basebackup.c:402 +#: pg_basebackup.c:403 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync no esperar que los cambios se sincronicen a disco\n" -#: pg_basebackup.c:403 +#: pg_basebackup.c:404 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress mostrar información de progreso\n" -#: pg_basebackup.c:404 pg_receivewal.c:89 +#: pg_basebackup.c:405 pg_receivewal.c:89 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=NOMBRE slot de replicación a usar\n" -#: pg_basebackup.c:405 pg_receivewal.c:91 pg_recvlogical.c:96 +#: pg_basebackup.c:406 pg_receivewal.c:91 pg_recvlogical.c:96 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose desplegar mensajes verbosos\n" -#: pg_basebackup.c:406 pg_receivewal.c:92 pg_recvlogical.c:97 +#: pg_basebackup.c:407 pg_receivewal.c:92 pg_recvlogical.c:97 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión, luego salir\n" -#: pg_basebackup.c:407 -#, fuzzy, c-format -#| msgid "" -#| " --no-verify-checksums\n" -#| " do not verify checksums\n" +#: pg_basebackup.c:408 +#, c-format msgid "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" " use algorithm for manifest checksums\n" msgstr "" -" --no-verify-checksums\n" -" no verificar checksums\n" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" usar algoritmo para sumas de comprobación del manifiesto\n" -#: pg_basebackup.c:409 -#, fuzzy, c-format -#| msgid "" -#| " --no-verify-checksums\n" -#| " do not verify checksums\n" +#: pg_basebackup.c:410 +#, c-format msgid "" " --manifest-force-encode\n" " hex encode all file names in manifest\n" msgstr "" -" --no-verify-checksums\n" -" no verificar checksums\n" +" --manifest-force-encode\n" +" codifica a hexadecimal todos los nombres de archivo en el manifiesto\n" -#: pg_basebackup.c:411 +#: pg_basebackup.c:412 #, c-format msgid " --no-estimate-size do not estimate backup size in server side\n" -msgstr "" +msgstr " --no-estimate-size no estimar el tamaño del la copia de seguridad en el lado del servidor\n" -#: pg_basebackup.c:412 -#, fuzzy, c-format -#| msgid " --no-slot prevent creation of temporary replication slot\n" +#: pg_basebackup.c:413 +#, c-format msgid " --no-manifest suppress generation of backup manifest\n" -msgstr " --no-slot evitar la creación de un slot de replicación temporal\n" +msgstr " --no-manifest suprimir la generación del manifiesto de la copia de seguridad\n" -#: pg_basebackup.c:413 +#: pg_basebackup.c:414 #, c-format msgid " --no-slot prevent creation of temporary replication slot\n" msgstr " --no-slot evitar la creación de un slot de replicación temporal\n" -#: pg_basebackup.c:414 +#: pg_basebackup.c:415 #, c-format msgid "" " --no-verify-checksums\n" @@ -357,12 +369,12 @@ msgstr "" " --no-verify-checksums\n" " no verificar checksums\n" -#: pg_basebackup.c:416 pg_receivewal.c:94 pg_recvlogical.c:98 +#: pg_basebackup.c:417 pg_receivewal.c:94 pg_recvlogical.c:98 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda, luego salir\n" -#: pg_basebackup.c:417 pg_receivewal.c:95 pg_recvlogical.c:99 +#: pg_basebackup.c:418 pg_receivewal.c:95 pg_recvlogical.c:99 #, c-format msgid "" "\n" @@ -371,22 +383,22 @@ msgstr "" "\n" "Opciones de conexión:\n" -#: pg_basebackup.c:418 pg_receivewal.c:96 +#: pg_basebackup.c:419 pg_receivewal.c:96 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" -msgstr " -s, --dbname=CONSTR cadena de conexión\n" +msgstr " -d, --dbname=CONSTR cadena de conexión\n" -#: pg_basebackup.c:419 pg_receivewal.c:97 pg_recvlogical.c:101 +#: pg_basebackup.c:420 pg_receivewal.c:97 pg_recvlogical.c:101 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=ANFITRIÓN dirección del servidor o directorio del socket\n" -#: pg_basebackup.c:420 pg_receivewal.c:98 pg_recvlogical.c:102 +#: pg_basebackup.c:421 pg_receivewal.c:98 pg_recvlogical.c:102 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT número de port del servidor\n" -#: pg_basebackup.c:421 +#: pg_basebackup.c:422 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -395,407 +407,392 @@ msgstr "" " -s, --status-interval=INTERVALO (segundos)\n" " tiempo entre envíos de paquetes de estado al servidor\n" -#: pg_basebackup.c:423 pg_receivewal.c:99 pg_recvlogical.c:103 +#: pg_basebackup.c:424 pg_receivewal.c:99 pg_recvlogical.c:103 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NOMBRE conectarse con el usuario especificado\n" -#: pg_basebackup.c:424 pg_receivewal.c:100 pg_recvlogical.c:104 +#: pg_basebackup.c:425 pg_receivewal.c:100 pg_recvlogical.c:104 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pedir contraseña\n" -#: pg_basebackup.c:425 pg_receivewal.c:101 pg_recvlogical.c:105 +#: pg_basebackup.c:426 pg_receivewal.c:101 pg_recvlogical.c:105 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password forzar un prompt para la contraseña\n" " (debería ser automático)\n" -#: pg_basebackup.c:426 pg_receivewal.c:105 pg_recvlogical.c:106 +#: pg_basebackup.c:427 pg_receivewal.c:105 pg_recvlogical.c:106 #, c-format msgid "" "\n" "Report bugs to <%s>.\n" msgstr "" +"\n" +"Reporte errores a <%s>.\n" -#: pg_basebackup.c:427 pg_receivewal.c:106 pg_recvlogical.c:107 +#: pg_basebackup.c:428 pg_receivewal.c:106 pg_recvlogical.c:107 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" -#: pg_basebackup.c:470 +#: pg_basebackup.c:471 #, c-format msgid "could not read from ready pipe: %m" msgstr "no se pudo leer desde la tubería: %m" -#: pg_basebackup.c:476 pg_basebackup.c:607 pg_basebackup.c:2115 +#: pg_basebackup.c:477 pg_basebackup.c:608 pg_basebackup.c:2133 #: streamutil.c:450 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "no se pudo interpretar la ubicación del WAL «%s»" -#: pg_basebackup.c:572 pg_receivewal.c:441 +#: pg_basebackup.c:573 pg_receivewal.c:441 #, c-format msgid "could not finish writing WAL files: %m" msgstr "no se pudo completar la escritura de archivos WAL: %m" -#: pg_basebackup.c:619 +#: pg_basebackup.c:620 #, c-format msgid "could not create pipe for background process: %m" msgstr "no se pudo crear la tubería para el proceso en segundo plano: %m" -#: pg_basebackup.c:654 +#: pg_basebackup.c:655 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "se creó slot temporal de replicación «%s»" -#: pg_basebackup.c:657 +#: pg_basebackup.c:658 #, c-format msgid "created replication slot \"%s\"" msgstr "se creó el slot de replicación «%s»" -#: pg_basebackup.c:677 pg_basebackup.c:730 pg_basebackup.c:1606 +#: pg_basebackup.c:678 pg_basebackup.c:731 pg_basebackup.c:1620 #, c-format msgid "could not create directory \"%s\": %m" msgstr "no se pudo crear el directorio «%s»: %m" -#: pg_basebackup.c:695 +#: pg_basebackup.c:696 #, c-format msgid "could not create background process: %m" msgstr "no se pudo lanzar el proceso en segundo plano: %m" -#: pg_basebackup.c:707 +#: pg_basebackup.c:708 #, c-format msgid "could not create background thread: %m" msgstr "no se pudo lanzar el hilo en segundo plano: %m" -#: pg_basebackup.c:751 +#: pg_basebackup.c:752 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "el directorio «%s» existe pero no está vacío" -#: pg_basebackup.c:758 +#: pg_basebackup.c:759 #, c-format msgid "could not access directory \"%s\": %m" msgstr "no se pudo acceder al directorio «%s»: %m" -#: pg_basebackup.c:819 +#: pg_basebackup.c:824 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s kB (100%%), %d/%d tablespace %*s" msgstr[1] "%*s/%s kB (100%%), %d/%d tablespaces %*s" -#: pg_basebackup.c:831 +#: pg_basebackup.c:836 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" -#: pg_basebackup.c:847 +#: pg_basebackup.c:852 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespaces" -#: pg_basebackup.c:871 +#: pg_basebackup.c:877 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "tasa de transferencia «%s» no es un valor válido" -#: pg_basebackup.c:876 +#: pg_basebackup.c:882 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "tasa de transferencia «%s» no válida: %m" -#: pg_basebackup.c:885 +#: pg_basebackup.c:891 #, c-format msgid "transfer rate must be greater than zero" msgstr "tasa de transferencia debe ser mayor que cero" -#: pg_basebackup.c:917 +#: pg_basebackup.c:923 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "unidad de --max-rato no válida: «%s»" -#: pg_basebackup.c:924 +#: pg_basebackup.c:930 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "la tasa de transferencia «%s» excede el rango de enteros" -#: pg_basebackup.c:934 +#: pg_basebackup.c:940 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "la tasa de transferencia «%s» está fuera de rango" -#: pg_basebackup.c:955 +#: pg_basebackup.c:961 #, c-format msgid "could not get COPY data stream: %s" msgstr "no se pudo obtener un flujo de datos COPY: %s" -#: pg_basebackup.c:975 pg_recvlogical.c:435 pg_recvlogical.c:607 +#: pg_basebackup.c:981 pg_recvlogical.c:435 pg_recvlogical.c:607 #: receivelog.c:965 #, c-format msgid "could not read COPY data: %s" msgstr "no fue posible leer datos COPY: %s" -#: pg_basebackup.c:997 +#: pg_basebackup.c:1007 #, c-format msgid "could not write to compressed file \"%s\": %s" msgstr "no se pudo escribir al archivo comprimido «%s»: %s" -#: pg_basebackup.c:1007 pg_basebackup.c:1696 pg_basebackup.c:1748 +#: pg_basebackup.c:1071 #, c-format -msgid "could not write to file \"%s\": %m" -msgstr "no se pudo escribir a archivo «%s»: %m" - -#: pg_basebackup.c:1057 -#, fuzzy, c-format -#| msgid "could not redirect stdout: %m" msgid "could not duplicate stdout: %m" -msgstr "no se pudo redirigir stdout: %m" +msgstr "no se pudo duplicar stdout: %m" -#: pg_basebackup.c:1064 +#: pg_basebackup.c:1078 #, c-format msgid "could not open output file: %m" msgstr "no se pudo abrir el archivo de salida: %m" -#: pg_basebackup.c:1071 pg_basebackup.c:1092 pg_basebackup.c:1121 +#: pg_basebackup.c:1085 pg_basebackup.c:1106 pg_basebackup.c:1135 #, c-format msgid "could not set compression level %d: %s" msgstr "no se pudo definir el nivel de compresión %d: %s" -#: pg_basebackup.c:1141 +#: pg_basebackup.c:1155 #, c-format msgid "could not create compressed file \"%s\": %s" msgstr "no se pudo crear el archivo comprimido «%s»: %s" -#: pg_basebackup.c:1152 pg_basebackup.c:1657 pg_basebackup.c:1729 -#, c-format -msgid "could not create file \"%s\": %m" -msgstr "no se pudo crear archivo «%s»: %m" - -#: pg_basebackup.c:1234 -#, c-format -msgid "out of memory" -msgstr "memoria agotada" - -#: pg_basebackup.c:1253 +#: pg_basebackup.c:1267 #, c-format msgid "could not close compressed file \"%s\": %s" msgstr "no se pudo cerrar el archivo comprimido «%s»: %s" -#: pg_basebackup.c:1265 pg_recvlogical.c:632 +#: pg_basebackup.c:1279 pg_recvlogical.c:632 #, c-format msgid "could not close file \"%s\": %m" msgstr "no se pudo cerrar el archivo «%s»: %m" -#: pg_basebackup.c:1527 +#: pg_basebackup.c:1541 #, c-format msgid "COPY stream ended before last file was finished" msgstr "el flujo COPY terminó antes que el último archivo estuviera completo" -#: pg_basebackup.c:1556 -#, fuzzy, c-format -#| msgid "invalid tar block header size: %d" +#: pg_basebackup.c:1570 +#, c-format msgid "invalid tar block header size: %zu" -msgstr "tamaño de bloque de cabecera de tar no válido: %d" +msgstr "tamaño de bloque de cabecera de tar no válido: %zu" -#: pg_basebackup.c:1613 +#: pg_basebackup.c:1627 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "no se pudo definir los permisos del directorio «%s»: %m" -#: pg_basebackup.c:1637 +#: pg_basebackup.c:1651 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "no se pudo crear un enlace simbólico desde «%s» a «%s»: %m" -#: pg_basebackup.c:1644 +#: pg_basebackup.c:1658 #, c-format msgid "unrecognized link indicator \"%c\"" msgstr "indicador de enlace «%c» no reconocido" -#: pg_basebackup.c:1663 +#: pg_basebackup.c:1677 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "no se pudo definir los permisos al archivo «%s»: %m" -#: pg_basebackup.c:1809 +#: pg_basebackup.c:1831 #, c-format msgid "incompatible server version %s" msgstr "versión del servidor %s incompatible" -#: pg_basebackup.c:1824 +#: pg_basebackup.c:1846 #, c-format msgid "HINT: use -X none or -X fetch to disable log streaming" msgstr "SUGERENCIA: use -X none o -X fetch para deshabilitar el flujo de log" -#: pg_basebackup.c:1860 +#: pg_basebackup.c:1882 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "iniciando el respaldo base, esperando que el checkpoint se complete" -#: pg_basebackup.c:1886 pg_recvlogical.c:262 receivelog.c:481 receivelog.c:530 +#: pg_basebackup.c:1908 pg_recvlogical.c:262 receivelog.c:481 receivelog.c:530 #: receivelog.c:569 streamutil.c:297 streamutil.c:370 streamutil.c:422 #: streamutil.c:533 streamutil.c:578 #, c-format msgid "could not send replication command \"%s\": %s" msgstr "no se pudo ejecutar la orden de replicación «%s»: %s" -#: pg_basebackup.c:1897 +#: pg_basebackup.c:1919 #, c-format msgid "could not initiate base backup: %s" msgstr "no se pudo iniciar el respaldo base: %s" -#: pg_basebackup.c:1903 +#: pg_basebackup.c:1925 #, c-format msgid "server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields" msgstr "el servidor envió una respuesta inesperada a la orden BASE_BACKUP; se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos" -#: pg_basebackup.c:1911 +#: pg_basebackup.c:1933 #, c-format msgid "checkpoint completed" msgstr "el checkpoint se ha completado" -#: pg_basebackup.c:1926 +#: pg_basebackup.c:1948 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "punto de inicio del WAL: %s en el timeline %u" -#: pg_basebackup.c:1935 +#: pg_basebackup.c:1957 #, c-format msgid "could not get backup header: %s" msgstr "no se pudo obtener la cabecera de respaldo: %s" -#: pg_basebackup.c:1941 +#: pg_basebackup.c:1963 #, c-format msgid "no data returned from server" msgstr "el servidor no retornó datos" -#: pg_basebackup.c:1973 +#: pg_basebackup.c:1995 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "sólo se puede escribir un tablespace a stdout, la base de datos tiene %d" -#: pg_basebackup.c:1985 +#: pg_basebackup.c:2007 #, c-format msgid "starting background WAL receiver" msgstr "iniciando el receptor de WAL en segundo plano" -#: pg_basebackup.c:2028 +#: pg_basebackup.c:2046 #, c-format msgid "could not get write-ahead log end position from server: %s" msgstr "no se pudo obtener la posición final del WAL del servidor: %s" -#: pg_basebackup.c:2034 +#: pg_basebackup.c:2052 #, c-format msgid "no write-ahead log end position returned from server" msgstr "el servidor no retornó la posición final del WAL" -#: pg_basebackup.c:2039 +#: pg_basebackup.c:2057 #, c-format msgid "write-ahead log end point: %s" msgstr "posición final del WAL: %s" -#: pg_basebackup.c:2050 +#: pg_basebackup.c:2068 #, c-format msgid "checksum error occurred" msgstr "ocurrió un error de checksums" -#: pg_basebackup.c:2055 +#: pg_basebackup.c:2073 #, c-format msgid "final receive failed: %s" msgstr "la recepción final falló: %s" -#: pg_basebackup.c:2079 +#: pg_basebackup.c:2097 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "esperando que el proceso en segundo plano complete el flujo..." -#: pg_basebackup.c:2084 +#: pg_basebackup.c:2102 #, c-format msgid "could not send command to background pipe: %m" msgstr "no se pudo enviar una orden a la tubería de segundo plano: %m" -#: pg_basebackup.c:2092 +#: pg_basebackup.c:2110 #, c-format msgid "could not wait for child process: %m" msgstr "no se pudo esperar al proceso hijo: %m" -#: pg_basebackup.c:2097 +#: pg_basebackup.c:2115 #, c-format msgid "child %d died, expected %d" msgstr "el hijo %d murió, pero se esperaba al %d" -#: pg_basebackup.c:2102 streamutil.c:92 +#: pg_basebackup.c:2120 streamutil.c:92 #, c-format msgid "%s" msgstr "%s" -#: pg_basebackup.c:2127 +#: pg_basebackup.c:2145 #, c-format msgid "could not wait for child thread: %m" msgstr "no se pudo esperar el hilo hijo: %m" -#: pg_basebackup.c:2133 +#: pg_basebackup.c:2151 #, c-format msgid "could not get child thread exit status: %m" msgstr "no se pudo obtener la cabecera de respaldo: %m" -#: pg_basebackup.c:2138 +#: pg_basebackup.c:2156 #, c-format msgid "child thread exited with error %u" msgstr "el hilo hijo terminó con error %u" -#: pg_basebackup.c:2166 +#: pg_basebackup.c:2184 #, c-format msgid "syncing data to disk ..." msgstr "sincronizando datos a disco ..." -#: pg_basebackup.c:2191 +#: pg_basebackup.c:2209 #, c-format msgid "renaming backup_manifest.tmp to backup_manifest" -msgstr "" +msgstr "renombrando backup_manifest.tmp a backup_manifest" -#: pg_basebackup.c:2202 +#: pg_basebackup.c:2220 #, c-format msgid "base backup completed" msgstr "el respaldo base se ha completado" -#: pg_basebackup.c:2287 +#: pg_basebackup.c:2305 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "formato de salida «%s» no válido, debe ser «plain» o «tar»" -#: pg_basebackup.c:2331 +#: pg_basebackup.c:2349 #, c-format msgid "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" msgstr "opción de wal-method «%s» no válida, debe ser «fetch», «stream» o «none»" -#: pg_basebackup.c:2359 pg_receivewal.c:580 +#: pg_basebackup.c:2377 pg_receivewal.c:580 #, c-format msgid "invalid compression level \"%s\"" msgstr "valor de compresión «%s» no válido" -#: pg_basebackup.c:2370 +#: pg_basebackup.c:2388 #, c-format msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" msgstr "argumento de checkpoint «%s» no válido, debe ser «fast» o «spread»" -#: pg_basebackup.c:2397 pg_receivewal.c:555 pg_recvlogical.c:820 +#: pg_basebackup.c:2415 pg_receivewal.c:555 pg_recvlogical.c:820 #, c-format msgid "invalid status interval \"%s\"" msgstr "intervalo de estado «%s» no válido" -#: pg_basebackup.c:2427 pg_basebackup.c:2440 pg_basebackup.c:2451 -#: pg_basebackup.c:2462 pg_basebackup.c:2470 pg_basebackup.c:2478 -#: pg_basebackup.c:2488 pg_basebackup.c:2501 pg_basebackup.c:2509 -#: pg_basebackup.c:2520 pg_basebackup.c:2530 pg_basebackup.c:2547 -#: pg_basebackup.c:2555 pg_basebackup.c:2563 pg_receivewal.c:605 +#: pg_basebackup.c:2445 pg_basebackup.c:2458 pg_basebackup.c:2469 +#: pg_basebackup.c:2480 pg_basebackup.c:2488 pg_basebackup.c:2496 +#: pg_basebackup.c:2506 pg_basebackup.c:2519 pg_basebackup.c:2527 +#: pg_basebackup.c:2538 pg_basebackup.c:2548 pg_basebackup.c:2565 +#: pg_basebackup.c:2573 pg_basebackup.c:2581 pg_receivewal.c:605 #: pg_receivewal.c:618 pg_receivewal.c:626 pg_receivewal.c:636 #: pg_receivewal.c:644 pg_receivewal.c:655 pg_recvlogical.c:846 #: pg_recvlogical.c:859 pg_recvlogical.c:870 pg_recvlogical.c:878 @@ -805,86 +802,83 @@ msgstr "intervalo de estado «%s» no válido" msgid "Try \"%s --help\" for more information.\n" msgstr "Use «%s --help» para obtener más información.\n" -#: pg_basebackup.c:2438 pg_receivewal.c:616 pg_recvlogical.c:857 +#: pg_basebackup.c:2456 pg_receivewal.c:616 pg_recvlogical.c:857 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: pg_basebackup.c:2450 pg_receivewal.c:654 +#: pg_basebackup.c:2468 pg_receivewal.c:654 #, c-format msgid "no target directory specified" msgstr "no se especificó un directorio de salida" -#: pg_basebackup.c:2461 +#: pg_basebackup.c:2479 #, c-format msgid "only tar mode backups can be compressed" msgstr "sólo los respaldos de modo tar pueden ser comprimidos" -#: pg_basebackup.c:2469 +#: pg_basebackup.c:2487 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "no se puede enviar WALs en modo tar a stdout" -#: pg_basebackup.c:2477 +#: pg_basebackup.c:2495 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "los slots de replicación sólo pueden usarse con flujo de WAL" -#: pg_basebackup.c:2487 +#: pg_basebackup.c:2505 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "no se puede usar --no-slot junto con nombre de slot" #. translator: second %s is an option name -#: pg_basebackup.c:2499 pg_receivewal.c:634 +#: pg_basebackup.c:2517 pg_receivewal.c:634 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "la opcón %s necesita que se especifique un slot con --slot" -#: pg_basebackup.c:2508 +#: pg_basebackup.c:2526 #, c-format msgid "--create-slot and --no-slot are incompatible options" msgstr "--create-slot y --no-slot son opciones incompatibles" -#: pg_basebackup.c:2519 +#: pg_basebackup.c:2537 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "la ubicación del directorio de WAL sólo puede especificarse en modo «plain»" -#: pg_basebackup.c:2529 +#: pg_basebackup.c:2547 #, c-format msgid "WAL directory location must be an absolute path" msgstr "la ubicación del directorio de WAL debe ser una ruta absoluta" -#: pg_basebackup.c:2539 pg_receivewal.c:663 +#: pg_basebackup.c:2557 pg_receivewal.c:663 #, c-format msgid "this build does not support compression" msgstr "esta instalación no soporta compresión" -#: pg_basebackup.c:2546 -#, fuzzy, c-format -#| msgid "--create-slot and --no-slot are incompatible options" +#: pg_basebackup.c:2564 +#, c-format msgid "--progress and --no-estimate-size are incompatible options" -msgstr "--create-slot y --no-slot son opciones incompatibles" +msgstr "--progress y --no-estimate-size son opciones incompatibles" -#: pg_basebackup.c:2554 -#, fuzzy, c-format -#| msgid "--create-slot and --no-slot are incompatible options" +#: pg_basebackup.c:2572 +#, c-format msgid "--no-manifest and --manifest-checksums are incompatible options" -msgstr "--create-slot y --no-slot son opciones incompatibles" +msgstr "--no-manifest y --manifest-checksums son opciones incompatibles" -#: pg_basebackup.c:2562 -#, fuzzy, c-format -#| msgid "--create-slot and --no-slot are incompatible options" +#: pg_basebackup.c:2580 +#, c-format msgid "--no-manifest and --manifest-force-encode are incompatible options" -msgstr "--create-slot y --no-slot son opciones incompatibles" +msgstr "--no-manifest y --manifest-force-encode son opciones incompatibles" -#: pg_basebackup.c:2621 +#: pg_basebackup.c:2639 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "no se pudo crear el enlace simbólico «%s»: %m" -#: pg_basebackup.c:2625 +#: pg_basebackup.c:2643 #, c-format msgid "symlinks are not supported on this platform" msgstr "los enlaces simbólicos no están soportados en esta plataforma" @@ -1504,10 +1498,3 @@ msgstr "unlink no soportado con compresión" #: walmethods.c:952 msgid "could not close compression stream" msgstr "no se pudo cerrar el flujo comprimido" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Reporte errores a .\n" diff --git a/src/bin/pg_basebackup/po/fr.po b/src/bin/pg_basebackup/po/fr.po index 9762f0391dfff..b6903d4a14a9d 100644 --- a/src/bin/pg_basebackup/po/fr.po +++ b/src/bin/pg_basebackup/po/fr.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 12\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-10 20:45+0000\n" -"PO-Revision-Date: 2020-05-11 09:23+0200\n" +"POT-Creation-Date: 2021-04-26 06:47+0000\n" +"PO-Revision-Date: 2021-04-26 11:37+0200\n" "Last-Translator: Christophe Courtois \n" "Language-Team: French \n" "Language: fr\n" @@ -16,19 +16,19 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal : " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "erreur : " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "attention : " @@ -44,120 +44,139 @@ msgstr "mémoire épuisée\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" -#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 +#: ../../common/file_utils.c:87 ../../common/file_utils.c:451 #: pg_receivewal.c:266 pg_recvlogical.c:340 #, c-format msgid "could not stat file \"%s\": %m" msgstr "n'a pas pu tester le fichier « %s » : %m" -#: ../../common/file_utils.c:158 pg_receivewal.c:169 +#: ../../common/file_utils.c:166 pg_receivewal.c:169 #, c-format msgid "could not open directory \"%s\": %m" msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" -#: ../../common/file_utils.c:192 pg_receivewal.c:337 +#: ../../common/file_utils.c:200 pg_receivewal.c:337 #, c-format msgid "could not read directory \"%s\": %m" msgstr "n'a pas pu lire le répertoire « %s » : %m" -#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 -#: ../../common/file_utils.c:357 +#: ../../common/file_utils.c:232 ../../common/file_utils.c:291 +#: ../../common/file_utils.c:365 ../../fe_utils/recovery_gen.c:134 #, c-format msgid "could not open file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier « %s » : %m" -#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 +#: ../../common/file_utils.c:303 ../../common/file_utils.c:373 #: pg_recvlogical.c:193 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m" -#: ../../common/file_utils.c:375 +#: ../../common/file_utils.c:383 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "n'a pas pu renommer le fichier « %s » en « %s » : %m" -#: pg_basebackup.c:223 +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 pg_basebackup.c:1248 +#, c-format +msgid "out of memory" +msgstr "mémoire épuisée" + +#: ../../fe_utils/recovery_gen.c:140 pg_basebackup.c:1021 pg_basebackup.c:1714 +#: pg_basebackup.c:1770 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "n'a pas pu écrire dans le fichier « %s » : %m" + +#: ../../fe_utils/recovery_gen.c:152 pg_basebackup.c:1166 pg_basebackup.c:1671 +#: pg_basebackup.c:1747 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "n'a pas pu créer le fichier « %s » : %m" + +#: pg_basebackup.c:224 #, c-format msgid "removing data directory \"%s\"" msgstr "suppression du répertoire des données « %s »" -#: pg_basebackup.c:225 +#: pg_basebackup.c:226 #, c-format msgid "failed to remove data directory" msgstr "échec de la suppression du répertoire des données" -#: pg_basebackup.c:229 +#: pg_basebackup.c:230 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "suppression du contenu du répertoire des données « %s »" -#: pg_basebackup.c:231 +#: pg_basebackup.c:232 #, c-format msgid "failed to remove contents of data directory" msgstr "échec de la suppression du contenu du répertoire des données" -#: pg_basebackup.c:236 +#: pg_basebackup.c:237 #, c-format msgid "removing WAL directory \"%s\"" msgstr "suppression du répertoire des journaux de transactions « %s »" -#: pg_basebackup.c:238 +#: pg_basebackup.c:239 #, c-format msgid "failed to remove WAL directory" msgstr "échec de la suppression du répertoire des journaux de transactions" -#: pg_basebackup.c:242 +#: pg_basebackup.c:243 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "suppression du contenu du répertoire des journaux de transactions « %s »" -#: pg_basebackup.c:244 +#: pg_basebackup.c:245 #, c-format msgid "failed to remove contents of WAL directory" msgstr "échec de la suppression du contenu du répertoire des journaux de transactions" -#: pg_basebackup.c:250 +#: pg_basebackup.c:251 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "répertoire des données « %s » non supprimé à la demande de l'utilisateur" -#: pg_basebackup.c:253 +#: pg_basebackup.c:254 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "répertoire des journaux de transactions « %s » non supprimé à la demande de l'utilisateur" -#: pg_basebackup.c:257 +#: pg_basebackup.c:258 #, c-format msgid "changes to tablespace directories will not be undone" msgstr "les modifications des répertoires des tablespaces ne seront pas annulées" -#: pg_basebackup.c:298 +#: pg_basebackup.c:299 #, c-format msgid "directory name too long" msgstr "nom du répertoire trop long" -#: pg_basebackup.c:308 +#: pg_basebackup.c:309 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "multiple signes « = » dans la correspondance de tablespace" -#: pg_basebackup.c:320 +#: pg_basebackup.c:321 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "format de correspondance de tablespace « %s » invalide, doit être « ANCIENREPERTOIRE=NOUVEAUREPERTOIRE »" -#: pg_basebackup.c:332 +#: pg_basebackup.c:333 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "l'ancien répertoire n'est pas un chemin absolu dans la correspondance de tablespace : %s" -#: pg_basebackup.c:339 +#: pg_basebackup.c:340 #, c-format msgid "new directory is not an absolute path in tablespace mapping: %s" msgstr "le nouveau répertoire n'est pas un chemin absolu dans la correspondance de tablespace : %s" -#: pg_basebackup.c:378 +#: pg_basebackup.c:379 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -166,17 +185,17 @@ msgstr "" "%s prend une sauvegarde binaire d'un serveur PostgreSQL en cours d'exécution.\n" "\n" -#: pg_basebackup.c:380 pg_receivewal.c:79 pg_recvlogical.c:75 +#: pg_basebackup.c:381 pg_receivewal.c:79 pg_recvlogical.c:75 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: pg_basebackup.c:381 pg_receivewal.c:80 pg_recvlogical.c:76 +#: pg_basebackup.c:382 pg_receivewal.c:80 pg_recvlogical.c:76 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" -#: pg_basebackup.c:382 +#: pg_basebackup.c:383 #, c-format msgid "" "\n" @@ -185,17 +204,17 @@ msgstr "" "\n" "Options contrôlant la sortie :\n" -#: pg_basebackup.c:383 +#: pg_basebackup.c:384 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=RÉPERTOIRE reçoit la sauvegarde de base dans ce répertoire\n" -#: pg_basebackup.c:384 +#: pg_basebackup.c:385 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|t format en sortie (plain (par défaut), tar)\n" -#: pg_basebackup.c:385 +#: pg_basebackup.c:386 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -205,14 +224,14 @@ msgstr "" " données (en Ko/s, ou utiliser le suffixe « k »\n" " ou « M »)\n" -#: pg_basebackup.c:387 +#: pg_basebackup.c:388 #, c-format msgid "" " -R, --write-recovery-conf\n" " write configuration for replication\n" msgstr " -R, --write-recovery-conf écrit la configuration pour la réplication\n" -#: pg_basebackup.c:389 +#: pg_basebackup.c:390 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -221,14 +240,14 @@ msgstr "" " -T, --tablespace-mapping=ANCIENREP=NOUVEAUREP\n" " déplacer le répertoire ANCIENREP en NOUVEAUREP\n" -#: pg_basebackup.c:391 +#: pg_basebackup.c:392 #, c-format msgid " --waldir=WALDIR location for the write-ahead log directory\n" msgstr "" " --waldir=RÉP_WAL emplacement du répertoire des journaux de\n" " transactions\n" -#: pg_basebackup.c:392 +#: pg_basebackup.c:393 #, c-format msgid "" " -X, --wal-method=none|fetch|stream\n" @@ -238,19 +257,19 @@ msgstr "" " inclut les journaux de transactions requis avec\n" " la méthode spécifiée\n" -#: pg_basebackup.c:394 +#: pg_basebackup.c:395 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip compresse la sortie tar\n" -#: pg_basebackup.c:395 +#: pg_basebackup.c:396 #, c-format msgid " -Z, --compress=0-9 compress tar output with given compression level\n" msgstr "" " -Z, --compress=0-9 compresse la sortie tar avec le niveau de\n" " compression indiqué\n" -#: pg_basebackup.c:396 +#: pg_basebackup.c:397 #, c-format msgid "" "\n" @@ -259,54 +278,54 @@ msgstr "" "\n" "Options générales :\n" -#: pg_basebackup.c:397 +#: pg_basebackup.c:398 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" " set fast or spread checkpointing\n" msgstr " -c, --checkpoint=fast|spread exécute un CHECKPOINT rapide ou réparti\n" -#: pg_basebackup.c:399 +#: pg_basebackup.c:400 #, c-format msgid " -C, --create-slot create replication slot\n" msgstr " --create-slot créer un slot de réplication\n" -#: pg_basebackup.c:400 +#: pg_basebackup.c:401 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=LABEL configure le label de sauvegarde\n" -#: pg_basebackup.c:401 +#: pg_basebackup.c:402 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean ne nettoie pas en cas d'erreur\n" -#: pg_basebackup.c:402 +#: pg_basebackup.c:403 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync n'attend pas que les modifications soient proprement écrites sur disque\n" -#: pg_basebackup.c:403 +#: pg_basebackup.c:404 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress affiche la progression de la sauvegarde\n" -#: pg_basebackup.c:404 pg_receivewal.c:89 +#: pg_basebackup.c:405 pg_receivewal.c:89 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=NOMREP slot de réplication à utiliser\n" -#: pg_basebackup.c:405 pg_receivewal.c:91 pg_recvlogical.c:96 +#: pg_basebackup.c:406 pg_receivewal.c:91 pg_recvlogical.c:96 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose affiche des messages verbeux\n" -#: pg_basebackup.c:406 pg_receivewal.c:92 pg_recvlogical.c:97 +#: pg_basebackup.c:407 pg_receivewal.c:92 pg_recvlogical.c:97 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: pg_basebackup.c:407 +#: pg_basebackup.c:408 #, c-format msgid "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" @@ -315,7 +334,7 @@ msgstr "" " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" " utilise cet algorithme pour les sommes de contrôle du manifeste\n" -#: pg_basebackup.c:409 +#: pg_basebackup.c:410 #, c-format msgid "" " --manifest-force-encode\n" @@ -324,36 +343,36 @@ msgstr "" " --manifest-force-encode\n" " encode tous les noms de fichier dans le manifeste en hexadécimal\n" -#: pg_basebackup.c:411 +#: pg_basebackup.c:412 #, c-format msgid " --no-estimate-size do not estimate backup size in server side\n" msgstr " --no-estimate-size ne réalise pas d'estimation sur la taille de la sauvegarde côté serveur\n" -#: pg_basebackup.c:412 +#: pg_basebackup.c:413 #, c-format msgid " --no-manifest suppress generation of backup manifest\n" msgstr "" " --no-manifest supprime la génération de manifeste de sauvegarde\n" "\n" -#: pg_basebackup.c:413 +#: pg_basebackup.c:414 #, c-format msgid " --no-slot prevent creation of temporary replication slot\n" msgstr " --no-slot empêche la création de slots de réplication temporaires\n" -#: pg_basebackup.c:414 +#: pg_basebackup.c:415 #, c-format msgid "" " --no-verify-checksums\n" " do not verify checksums\n" msgstr " --no-verify-checksums ne vérifie pas les sommes de contrôle\n" -#: pg_basebackup.c:416 pg_receivewal.c:94 pg_recvlogical.c:98 +#: pg_basebackup.c:417 pg_receivewal.c:94 pg_recvlogical.c:98 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: pg_basebackup.c:417 pg_receivewal.c:95 pg_recvlogical.c:99 +#: pg_basebackup.c:418 pg_receivewal.c:95 pg_recvlogical.c:99 #, c-format msgid "" "\n" @@ -362,26 +381,26 @@ msgstr "" "\n" "Options de connexion :\n" -#: pg_basebackup.c:418 pg_receivewal.c:96 +#: pg_basebackup.c:419 pg_receivewal.c:96 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=CONNSTR chaîne de connexion\n" -#: pg_basebackup.c:419 pg_receivewal.c:97 pg_recvlogical.c:101 +#: pg_basebackup.c:420 pg_receivewal.c:97 pg_recvlogical.c:101 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=NOMHÔTE hôte du serveur de bases de données ou\n" " répertoire des sockets\n" -#: pg_basebackup.c:420 pg_receivewal.c:98 pg_recvlogical.c:102 +#: pg_basebackup.c:421 pg_receivewal.c:98 pg_recvlogical.c:102 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr "" " -p, --port=PORT numéro de port du serveur de bases de\n" " données\n" -#: pg_basebackup.c:421 +#: pg_basebackup.c:422 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -390,24 +409,24 @@ msgstr "" " -s, --status-interval=INTERVAL durée entre l'envoi de paquets de statut au\n" " serveur (en secondes)\n" -#: pg_basebackup.c:423 pg_receivewal.c:99 pg_recvlogical.c:103 +#: pg_basebackup.c:424 pg_receivewal.c:99 pg_recvlogical.c:103 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NOM se connecte avec cet utilisateur\n" -#: pg_basebackup.c:424 pg_receivewal.c:100 pg_recvlogical.c:104 +#: pg_basebackup.c:425 pg_receivewal.c:100 pg_recvlogical.c:104 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password ne demande jamais le mot de passe\n" -#: pg_basebackup.c:425 pg_receivewal.c:101 pg_recvlogical.c:105 +#: pg_basebackup.c:426 pg_receivewal.c:101 pg_recvlogical.c:105 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password force la demande du mot de passe (devrait arriver\n" " automatiquement)\n" -#: pg_basebackup.c:426 pg_receivewal.c:105 pg_recvlogical.c:106 +#: pg_basebackup.c:427 pg_receivewal.c:105 pg_recvlogical.c:106 #, c-format msgid "" "\n" @@ -416,466 +435,438 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: pg_basebackup.c:427 pg_receivewal.c:106 pg_recvlogical.c:107 +#: pg_basebackup.c:428 pg_receivewal.c:106 pg_recvlogical.c:107 #, c-format msgid "%s home page: <%s>\n" msgstr "page d'accueil %s : <%s>\n" -#: pg_basebackup.c:470 +#: pg_basebackup.c:471 #, c-format msgid "could not read from ready pipe: %m" msgstr "n'a pas pu lire à partir du tube : %m" -#: pg_basebackup.c:476 pg_basebackup.c:607 pg_basebackup.c:2114 +#: pg_basebackup.c:477 pg_basebackup.c:608 pg_basebackup.c:2133 #: streamutil.c:450 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "n'a pas pu analyser l'emplacement du journal des transactions « %s »" -#: pg_basebackup.c:572 pg_receivewal.c:441 +#: pg_basebackup.c:573 pg_receivewal.c:441 #, c-format msgid "could not finish writing WAL files: %m" msgstr "n'a pas pu finir l'écriture dans les fichiers de transactions : %m" -#: pg_basebackup.c:619 +#: pg_basebackup.c:620 #, c-format msgid "could not create pipe for background process: %m" msgstr "n'a pas pu créer un tube pour le processus en tâche de fond : %m" -#: pg_basebackup.c:654 +#: pg_basebackup.c:655 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "a créé le slot de réplication temporaire « %s »" -#: pg_basebackup.c:657 +#: pg_basebackup.c:658 #, c-format msgid "created replication slot \"%s\"" msgstr "a créé le slot de réplication « %s »" -#: pg_basebackup.c:677 pg_basebackup.c:730 pg_basebackup.c:1605 +#: pg_basebackup.c:678 pg_basebackup.c:731 pg_basebackup.c:1620 #, c-format msgid "could not create directory \"%s\": %m" msgstr "n'a pas pu créer le répertoire « %s » : %m" -#: pg_basebackup.c:695 +#: pg_basebackup.c:696 #, c-format msgid "could not create background process: %m" msgstr "n'a pas pu créer un processus en tâche de fond : %m" -#: pg_basebackup.c:707 +#: pg_basebackup.c:708 #, c-format msgid "could not create background thread: %m" msgstr "n'a pas pu créer un thread en tâche de fond : %m" -#: pg_basebackup.c:751 +#: pg_basebackup.c:752 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "le répertoire « %s » existe mais n'est pas vide" -#: pg_basebackup.c:758 +#: pg_basebackup.c:759 #, c-format msgid "could not access directory \"%s\": %m" msgstr "n'a pas pu accéder au répertoire « %s » : %m" -#: pg_basebackup.c:819 +#: pg_basebackup.c:824 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s Ko (100%%), %d/%d tablespace %*s" msgstr[1] "%*s/%s Ko (100%%), %d/%d tablespaces %*s" -#: pg_basebackup.c:831 +#: pg_basebackup.c:836 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s Ko (%d%%), %d/%d tablespace (%s%-*.*s)" msgstr[1] "%*s/%s Ko (%d%%), %d/%d tablespaces (%s%-*.*s)" -#: pg_basebackup.c:847 +#: pg_basebackup.c:852 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s Ko (%d%%), %d/%d tablespace" msgstr[1] "%*s/%s Ko (%d%%), %d/%d tablespaces" -#: pg_basebackup.c:871 +#: pg_basebackup.c:877 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "le taux de transfert « %s » ne correspond pas à une valeur valide" -#: pg_basebackup.c:876 +#: pg_basebackup.c:882 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "taux de transfert invalide (« %s ») : %m" -#: pg_basebackup.c:885 +#: pg_basebackup.c:891 #, c-format msgid "transfer rate must be greater than zero" msgstr "le taux de transfert doit être supérieur à zéro" -#: pg_basebackup.c:917 +#: pg_basebackup.c:923 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "unité invalide pour --max-rate : « %s »" -#: pg_basebackup.c:924 +#: pg_basebackup.c:930 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "le taux de transfert « %s » dépasse l'échelle des entiers" -#: pg_basebackup.c:934 +#: pg_basebackup.c:940 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "le taux de transfert « %s » est en dehors des limites" -#: pg_basebackup.c:955 +#: pg_basebackup.c:961 #, c-format msgid "could not get COPY data stream: %s" msgstr "n'a pas pu obtenir le flux de données de COPY : %s" -#: pg_basebackup.c:975 pg_recvlogical.c:435 receivelog.c:965 +#: pg_basebackup.c:981 pg_recvlogical.c:435 pg_recvlogical.c:607 +#: receivelog.c:964 #, c-format msgid "could not read COPY data: %s" msgstr "n'a pas pu lire les données du COPY : %s" -#: pg_basebackup.c:997 +#: pg_basebackup.c:1007 #, c-format msgid "could not write to compressed file \"%s\": %s" msgstr "n'a pas pu écrire dans le fichier compressé « %s » : %s" -#: pg_basebackup.c:1007 pg_basebackup.c:1695 pg_basebackup.c:1747 -#, c-format -msgid "could not write to file \"%s\": %m" -msgstr "n'a pas pu écrire dans le fichier « %s » : %m" - -#: pg_basebackup.c:1056 +#: pg_basebackup.c:1071 #, c-format msgid "could not duplicate stdout: %m" msgstr "n'a pas pu dupliquer la sortie (stdout) : %m" -#: pg_basebackup.c:1063 +#: pg_basebackup.c:1078 #, c-format msgid "could not open output file: %m" msgstr "n'a pas pu ouvrir le fichier de sauvegarde : %m" -#: pg_basebackup.c:1070 pg_basebackup.c:1091 pg_basebackup.c:1120 +#: pg_basebackup.c:1085 pg_basebackup.c:1106 pg_basebackup.c:1135 #, c-format msgid "could not set compression level %d: %s" msgstr "n'a pas pu configurer le niveau de compression %d : %s" -#: pg_basebackup.c:1140 +#: pg_basebackup.c:1155 #, c-format msgid "could not create compressed file \"%s\": %s" msgstr "n'a pas pu créer le fichier compressé « %s » : %s" -#: pg_basebackup.c:1151 pg_basebackup.c:1656 pg_basebackup.c:1728 -#, c-format -msgid "could not create file \"%s\": %m" -msgstr "n'a pas pu créer le fichier « %s » : %m" - -#: pg_basebackup.c:1233 -#, c-format -msgid "out of memory" -msgstr "mémoire épuisée" - -#: pg_basebackup.c:1252 +#: pg_basebackup.c:1267 #, c-format msgid "could not close compressed file \"%s\": %s" msgstr "n'a pas pu fermer le fichier compressé « %s » : %s" -#: pg_basebackup.c:1264 pg_recvlogical.c:606 +#: pg_basebackup.c:1279 pg_recvlogical.c:632 #, c-format msgid "could not close file \"%s\": %m" msgstr "n'a pas pu fermer le fichier « %s » : %m" -#: pg_basebackup.c:1526 +#: pg_basebackup.c:1541 #, c-format msgid "COPY stream ended before last file was finished" msgstr "le flux COPY s'est terminé avant que le dernier fichier soit terminé" -#: pg_basebackup.c:1555 +#: pg_basebackup.c:1570 #, c-format msgid "invalid tar block header size: %zu" msgstr "taille invalide de l'en-tête de bloc du fichier tar : %zu" -#: pg_basebackup.c:1612 +#: pg_basebackup.c:1627 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "n'a pas pu configurer les droits du répertoire « %s » : %m" -#: pg_basebackup.c:1636 +#: pg_basebackup.c:1651 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "n'a pas pu créer le lien symbolique de « %s » vers « %s » : %m" -#: pg_basebackup.c:1643 +#: pg_basebackup.c:1658 #, c-format msgid "unrecognized link indicator \"%c\"" msgstr "indicateur de lien « %c » non reconnu" -#: pg_basebackup.c:1662 +#: pg_basebackup.c:1677 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "n'a pas pu initialiser les droits du fichier « %s » : %m" -#: pg_basebackup.c:1808 +#: pg_basebackup.c:1831 #, c-format msgid "incompatible server version %s" msgstr "version « %s » du serveur incompatible" -#: pg_basebackup.c:1823 +#: pg_basebackup.c:1846 #, c-format msgid "HINT: use -X none or -X fetch to disable log streaming" msgstr "ASTUCE : utilisez -X none ou -X fetch pour désactiver la réplication en flux" -#: pg_basebackup.c:1859 +#: pg_basebackup.c:1882 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "début de la sauvegarde de base, en attente de la fin du checkpoint" -#: pg_basebackup.c:1885 pg_recvlogical.c:262 receivelog.c:481 receivelog.c:530 -#: receivelog.c:569 streamutil.c:297 streamutil.c:370 streamutil.c:422 +#: pg_basebackup.c:1908 pg_recvlogical.c:262 receivelog.c:480 receivelog.c:529 +#: receivelog.c:568 streamutil.c:297 streamutil.c:370 streamutil.c:422 #: streamutil.c:533 streamutil.c:578 #, c-format msgid "could not send replication command \"%s\": %s" msgstr "n'a pas pu envoyer la commande de réplication « %s » : %s" -#: pg_basebackup.c:1896 +#: pg_basebackup.c:1919 #, c-format msgid "could not initiate base backup: %s" msgstr "n'a pas pu initier la sauvegarde de base : %s" -#: pg_basebackup.c:1902 +#: pg_basebackup.c:1925 #, c-format msgid "server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields" msgstr "le serveur a renvoyé une réponse inattendue à la commande BASE_BACKUP ; a récupéré %d lignes et %d champs, alors qu'il attendait %d lignes et %d champs" -#: pg_basebackup.c:1910 +#: pg_basebackup.c:1933 #, c-format msgid "checkpoint completed" msgstr "checkpoint terminé" -#: pg_basebackup.c:1925 +#: pg_basebackup.c:1948 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "point de départ du journal de transactions : %s sur la timeline %u" -#: pg_basebackup.c:1934 +#: pg_basebackup.c:1957 #, c-format msgid "could not get backup header: %s" msgstr "n'a pas pu obtenir l'en-tête du serveur : %s" -#: pg_basebackup.c:1940 +#: pg_basebackup.c:1963 #, c-format msgid "no data returned from server" msgstr "aucune donnée renvoyée du serveur" -#: pg_basebackup.c:1972 +#: pg_basebackup.c:1995 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "peut seulement écrire un tablespace sur la sortie standard, la base en a %d" -#: pg_basebackup.c:1984 +#: pg_basebackup.c:2007 #, c-format msgid "starting background WAL receiver" msgstr "lance le récepteur de journaux de transactions en tâche de fond" -#: pg_basebackup.c:2027 +#: pg_basebackup.c:2046 #, c-format msgid "could not get write-ahead log end position from server: %s" msgstr "n'a pas pu obtenir la position finale des journaux de transactions à partir du serveur : %s" -#: pg_basebackup.c:2033 +#: pg_basebackup.c:2052 #, c-format msgid "no write-ahead log end position returned from server" msgstr "aucune position de fin du journal de transactions renvoyée par le serveur" -#: pg_basebackup.c:2038 +#: pg_basebackup.c:2057 #, c-format msgid "write-ahead log end point: %s" msgstr "point final du journal de transactions : %s" -#: pg_basebackup.c:2049 +#: pg_basebackup.c:2068 #, c-format msgid "checksum error occurred" msgstr "erreur de somme de contrôle" -#: pg_basebackup.c:2054 +#: pg_basebackup.c:2073 #, c-format msgid "final receive failed: %s" msgstr "échec lors de la réception finale : %s" -#: pg_basebackup.c:2078 +#: pg_basebackup.c:2097 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "en attente que le processus en tâche de fond termine le flux..." -#: pg_basebackup.c:2083 +#: pg_basebackup.c:2102 #, c-format msgid "could not send command to background pipe: %m" msgstr "n'a pas pu envoyer la commande au tube du processus : %m" -#: pg_basebackup.c:2091 +#: pg_basebackup.c:2110 #, c-format msgid "could not wait for child process: %m" msgstr "n'a pas pu attendre le processus fils : %m" -#: pg_basebackup.c:2096 +#: pg_basebackup.c:2115 #, c-format msgid "child %d died, expected %d" msgstr "le fils %d est mort, %d attendu" -#: pg_basebackup.c:2101 streamutil.c:92 +#: pg_basebackup.c:2120 streamutil.c:92 streamutil.c:203 #, c-format msgid "%s" msgstr "%s" -#: pg_basebackup.c:2126 +#: pg_basebackup.c:2145 #, c-format msgid "could not wait for child thread: %m" msgstr "n'a pas pu attendre le thread : %m" -#: pg_basebackup.c:2132 +#: pg_basebackup.c:2151 #, c-format msgid "could not get child thread exit status: %m" msgstr "n'a pas pu obtenir le code de sortie du thread : %m" -#: pg_basebackup.c:2137 +#: pg_basebackup.c:2156 #, c-format msgid "child thread exited with error %u" msgstr "le thread a quitté avec le code d'erreur %u" -#: pg_basebackup.c:2165 +#: pg_basebackup.c:2184 #, c-format msgid "syncing data to disk ..." msgstr "synchronisation des données sur disque..." -#: pg_basebackup.c:2190 +#: pg_basebackup.c:2209 #, c-format msgid "renaming backup_manifest.tmp to backup_manifest" msgstr "renommage de backup_manifest.tmp en backup_manifest" -#: pg_basebackup.c:2201 +#: pg_basebackup.c:2220 #, c-format msgid "base backup completed" msgstr "sauvegarde de base terminée" -#: pg_basebackup.c:2286 +#: pg_basebackup.c:2305 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "format de sortie « %s » invalide, doit être soit « plain » soit « tar »" -#: pg_basebackup.c:2330 +#: pg_basebackup.c:2349 #, c-format msgid "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" msgstr "option wal-method « %s » invalide, doit être soit « fetch » soit « stream » soit « none »" -#: pg_basebackup.c:2358 pg_receivewal.c:580 +#: pg_basebackup.c:2377 pg_receivewal.c:580 #, c-format msgid "invalid compression level \"%s\"" msgstr "niveau de compression « %s » invalide" -#: pg_basebackup.c:2369 +#: pg_basebackup.c:2388 #, c-format msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" msgstr "argument « %s » invalide pour le CHECKPOINT, doit être soit « fast » soit « spread »" -#: pg_basebackup.c:2396 pg_receivewal.c:555 pg_recvlogical.c:794 +#: pg_basebackup.c:2415 pg_receivewal.c:555 pg_recvlogical.c:820 #, c-format msgid "invalid status interval \"%s\"" msgstr "intervalle « %s » invalide du statut" -#: pg_basebackup.c:2426 pg_basebackup.c:2439 pg_basebackup.c:2450 -#: pg_basebackup.c:2461 pg_basebackup.c:2469 pg_basebackup.c:2477 -#: pg_basebackup.c:2487 pg_basebackup.c:2500 pg_basebackup.c:2508 -#: pg_basebackup.c:2519 pg_basebackup.c:2529 pg_basebackup.c:2546 -#: pg_basebackup.c:2554 pg_basebackup.c:2562 pg_receivewal.c:605 +#: pg_basebackup.c:2445 pg_basebackup.c:2458 pg_basebackup.c:2469 +#: pg_basebackup.c:2480 pg_basebackup.c:2488 pg_basebackup.c:2496 +#: pg_basebackup.c:2506 pg_basebackup.c:2519 pg_basebackup.c:2528 +#: pg_basebackup.c:2539 pg_basebackup.c:2549 pg_basebackup.c:2567 +#: pg_basebackup.c:2576 pg_basebackup.c:2585 pg_receivewal.c:605 #: pg_receivewal.c:618 pg_receivewal.c:626 pg_receivewal.c:636 -#: pg_receivewal.c:644 pg_receivewal.c:655 pg_recvlogical.c:820 -#: pg_recvlogical.c:833 pg_recvlogical.c:844 pg_recvlogical.c:852 -#: pg_recvlogical.c:860 pg_recvlogical.c:868 pg_recvlogical.c:876 -#: pg_recvlogical.c:884 pg_recvlogical.c:892 +#: pg_receivewal.c:644 pg_receivewal.c:655 pg_recvlogical.c:846 +#: pg_recvlogical.c:859 pg_recvlogical.c:870 pg_recvlogical.c:878 +#: pg_recvlogical.c:886 pg_recvlogical.c:894 pg_recvlogical.c:902 +#: pg_recvlogical.c:910 pg_recvlogical.c:918 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayer « %s --help » pour plus d'informations.\n" -#: pg_basebackup.c:2437 pg_receivewal.c:616 pg_recvlogical.c:831 +#: pg_basebackup.c:2456 pg_receivewal.c:616 pg_recvlogical.c:857 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" -#: pg_basebackup.c:2449 pg_receivewal.c:654 +#: pg_basebackup.c:2468 pg_receivewal.c:654 #, c-format msgid "no target directory specified" msgstr "aucun répertoire cible indiqué" -#: pg_basebackup.c:2460 +#: pg_basebackup.c:2479 #, c-format msgid "only tar mode backups can be compressed" msgstr "seules les sauvegardes en mode tar peuvent être compressées" -#: pg_basebackup.c:2468 +#: pg_basebackup.c:2487 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "ne peut pas envoyer les journaux de transactions vers stdout en mode tar" -#: pg_basebackup.c:2476 +#: pg_basebackup.c:2495 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "les slots de réplications peuvent seulement être utilisés avec la réplication en flux des WAL" -#: pg_basebackup.c:2486 +#: pg_basebackup.c:2505 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "--no-slot ne peut pas être utilisé avec un nom de slot" #. translator: second %s is an option name -#: pg_basebackup.c:2498 pg_receivewal.c:634 +#: pg_basebackup.c:2517 pg_receivewal.c:634 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "%s a besoin du slot avec l'option --slot" -#: pg_basebackup.c:2507 +#: pg_basebackup.c:2526 pg_basebackup.c:2565 pg_basebackup.c:2574 +#: pg_basebackup.c:2583 #, c-format -msgid "--create-slot and --no-slot are incompatible options" -msgstr "--create-slot et --no-slot sont des options incompatibles" +msgid "%s and %s are incompatible options" +msgstr "%s et %s sont des options incompatibles" -#: pg_basebackup.c:2518 +#: pg_basebackup.c:2538 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "l'emplacement du répertoire des journaux de transactions doit être indiqué uniquement dans le mode plain" -#: pg_basebackup.c:2528 +#: pg_basebackup.c:2548 #, c-format msgid "WAL directory location must be an absolute path" msgstr "l'emplacement du répertoire des journaux de transactions doit être indiqué avec un chemin absolu" -#: pg_basebackup.c:2538 pg_receivewal.c:663 +#: pg_basebackup.c:2558 pg_receivewal.c:663 #, c-format msgid "this build does not support compression" msgstr "cette construction ne supporte pas la compression" -#: pg_basebackup.c:2545 -#, c-format -msgid "--progress and --no-estimate-size are incompatible options" -msgstr "--progress et --no-estimate-size sont des options incompatibles" - -#: pg_basebackup.c:2553 -#, c-format -msgid "--no-manifest and --manifest-checksums are incompatible options" -msgstr "--no-manifest et --manifest-checksums sont des options incompatibles" - -#: pg_basebackup.c:2561 -#, c-format -msgid "--no-manifest and --manifest-force-encode are incompatible options" -msgstr "--no-manifest et --manifest-force-encode sont des options incompatibles" - -#: pg_basebackup.c:2620 +#: pg_basebackup.c:2643 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "n'a pas pu créer le lien symbolique « %s » : %m" -#: pg_basebackup.c:2624 +#: pg_basebackup.c:2647 #, c-format msgid "symlinks are not supported on this platform" msgstr "les liens symboliques ne sont pas supportés sur cette plateforme" @@ -1000,8 +991,8 @@ msgstr "n'a pas pu fermer le répertoire « %s » : %m" #: pg_receivewal.c:272 #, c-format -msgid "segment file \"%s\" has incorrect size %d, skipping" -msgstr "le segment « %s » a une taille %d incorrecte, ignoré" +msgid "segment file \"%s\" has incorrect size %lld, skipping" +msgstr "le segment « %s » a une taille incorrecte (%lld), ignoré" #: pg_receivewal.c:290 #, c-format @@ -1033,12 +1024,12 @@ msgstr "le segment compressé « %s » a une taille %d non compressé incorrecte msgid "starting log streaming at %X/%X (timeline %u)" msgstr "commence le flux des journaux à %X/%X (timeline %u)" -#: pg_receivewal.c:537 pg_recvlogical.c:736 +#: pg_receivewal.c:537 pg_recvlogical.c:762 #, c-format msgid "invalid port number \"%s\"" msgstr "numéro de port invalide : « %s »" -#: pg_receivewal.c:565 pg_recvlogical.c:762 +#: pg_receivewal.c:565 pg_recvlogical.c:788 #, c-format msgid "could not parse end position \"%s\"" msgstr "n'a pas pu analyser la position finale « %s »" @@ -1058,23 +1049,23 @@ msgstr "ne peut pas utiliser --synchronous avec --no-sync" msgid "replication connection using slot \"%s\" is unexpectedly database specific" msgstr "la connexion de réplication utilisant le slot « %s » est spécifique à une base, ce qui est inattendu" -#: pg_receivewal.c:730 pg_recvlogical.c:940 +#: pg_receivewal.c:730 pg_recvlogical.c:966 #, c-format msgid "dropping replication slot \"%s\"" msgstr "suppression du slot de réplication « %s »" -#: pg_receivewal.c:741 pg_recvlogical.c:950 +#: pg_receivewal.c:741 pg_recvlogical.c:976 #, c-format msgid "creating replication slot \"%s\"" msgstr "création du slot de réplication « %s »" -#: pg_receivewal.c:767 pg_recvlogical.c:975 +#: pg_receivewal.c:767 pg_recvlogical.c:1001 #, c-format msgid "disconnected" msgstr "déconnecté" #. translator: check source for value for %d -#: pg_receivewal.c:773 pg_recvlogical.c:981 +#: pg_receivewal.c:773 pg_recvlogical.c:1007 #, c-format msgid "disconnected; waiting %d seconds to try again" msgstr "déconnecté, attente de %d secondes avant une nouvelle tentative" @@ -1157,7 +1148,7 @@ msgstr " -d, --dbname=NOMBASE base de données de connexion\n" msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "confirmation d'écriture jusqu'à %X/%X et de synchronisation jusqu'à %X/%X (slot %s)" -#: pg_recvlogical.c:157 receivelog.c:343 +#: pg_recvlogical.c:157 receivelog.c:342 #, c-format msgid "could not send feedback packet: %s" msgstr "n'a pas pu envoyer le paquet d'informations en retour : %s" @@ -1177,27 +1168,27 @@ msgstr "flux lancé" msgid "could not open log file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier applicatif « %s » : %m" -#: pg_recvlogical.c:361 receivelog.c:873 +#: pg_recvlogical.c:361 receivelog.c:872 #, c-format msgid "invalid socket: %s" msgstr "socket invalide : %s" -#: pg_recvlogical.c:414 receivelog.c:901 +#: pg_recvlogical.c:414 receivelog.c:900 #, c-format -msgid "select() failed: %m" -msgstr "échec de select() : %m" +msgid "%s() failed: %m" +msgstr "échec de %s() : %m" -#: pg_recvlogical.c:421 receivelog.c:951 +#: pg_recvlogical.c:421 receivelog.c:950 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "n'a pas pu recevoir des données du flux de WAL : %s" -#: pg_recvlogical.c:463 pg_recvlogical.c:514 receivelog.c:995 receivelog.c:1061 +#: pg_recvlogical.c:463 pg_recvlogical.c:514 receivelog.c:994 receivelog.c:1060 #, c-format msgid "streaming header too small: %d" msgstr "en-tête de flux trop petit : %d" -#: pg_recvlogical.c:498 receivelog.c:833 +#: pg_recvlogical.c:498 receivelog.c:832 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "entête non reconnu du flux : « %c »" @@ -1207,227 +1198,222 @@ msgstr "entête non reconnu du flux : « %c »" msgid "could not write %u bytes to log file \"%s\": %m" msgstr "n'a pas pu écrire %u octets dans le journal de transactions « %s » : %m" -#: pg_recvlogical.c:592 receivelog.c:629 receivelog.c:666 +#: pg_recvlogical.c:618 receivelog.c:628 receivelog.c:665 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "fin inattendue du flux de réplication : %s" -#: pg_recvlogical.c:716 +#: pg_recvlogical.c:742 #, c-format msgid "invalid fsync interval \"%s\"" msgstr "intervalle fsync « %s » invalide" -#: pg_recvlogical.c:754 +#: pg_recvlogical.c:780 #, c-format msgid "could not parse start position \"%s\"" msgstr "n'a pas pu analyser la position de départ « %s »" -#: pg_recvlogical.c:843 +#: pg_recvlogical.c:869 #, c-format msgid "no slot specified" msgstr "aucun slot de réplication indiqué" -#: pg_recvlogical.c:851 +#: pg_recvlogical.c:877 #, c-format msgid "no target file specified" msgstr "aucun fichier cible indiqué" -#: pg_recvlogical.c:859 +#: pg_recvlogical.c:885 #, c-format msgid "no database specified" msgstr "aucune base de données indiquée" -#: pg_recvlogical.c:867 +#: pg_recvlogical.c:893 #, c-format msgid "at least one action needs to be specified" msgstr "au moins une action doit être indiquée" -#: pg_recvlogical.c:875 +#: pg_recvlogical.c:901 #, c-format msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "ne peut pas utiliser --create-slot ou --start avec --drop-slot" -#: pg_recvlogical.c:883 +#: pg_recvlogical.c:909 #, c-format msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "ne peut pas utiliser --create-slot ou --drop-slot avec --startpos" -#: pg_recvlogical.c:891 +#: pg_recvlogical.c:917 #, c-format msgid "--endpos may only be specified with --start" msgstr "--endpos peut seulement être spécifié avec --start" -#: pg_recvlogical.c:922 +#: pg_recvlogical.c:948 #, c-format msgid "could not establish database-specific replication connection" msgstr "n'a pas pu établir une connexion de réplication spécifique à la base" -#: pg_recvlogical.c:1021 +#: pg_recvlogical.c:1047 #, c-format msgid "end position %X/%X reached by keepalive" msgstr "position finale %X/%X atteinte par keepalive" -#: pg_recvlogical.c:1024 +#: pg_recvlogical.c:1050 #, c-format msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "position finale %X/%X atteinte à l'enregistrement WAL %X/%X" -#: receivelog.c:69 +#: receivelog.c:68 #, c-format msgid "could not create archive status file \"%s\": %s" msgstr "n'a pas pu créer le fichier de statut d'archivage « %s » : %s" -#: receivelog.c:116 +#: receivelog.c:115 #, c-format msgid "could not get size of write-ahead log file \"%s\": %s" msgstr "n'a pas pu obtenir la taille du journal de transactions « %s » : %s" -#: receivelog.c:126 +#: receivelog.c:125 #, c-format msgid "could not open existing write-ahead log file \"%s\": %s" msgstr "n'a pas pu ouvrir le journal des transactions « %s » existant : %s" -#: receivelog.c:134 +#: receivelog.c:133 #, c-format msgid "could not fsync existing write-ahead log file \"%s\": %s" msgstr "n'a pas pu synchroniser sur disque le journal de transactions « %s » existant : %s" -#: receivelog.c:148 +#: receivelog.c:147 #, c-format msgid "write-ahead log file \"%s\" has %d byte, should be 0 or %d" msgid_plural "write-ahead log file \"%s\" has %d bytes, should be 0 or %d" msgstr[0] "le journal de transactions « %s » comprend %d octet, cela devrait être 0 ou %d" msgstr[1] "le journal de transactions « %s » comprend %d octets, cela devrait être 0 ou %d" -#: receivelog.c:163 +#: receivelog.c:162 #, c-format msgid "could not open write-ahead log file \"%s\": %s" msgstr "n'a pas pu ouvrir le journal de transactions « %s » : %s" -#: receivelog.c:189 +#: receivelog.c:188 #, c-format msgid "could not determine seek position in file \"%s\": %s" msgstr "n'a pas pu déterminer la position de recherche dans le fichier d'archive « %s » : %s" -#: receivelog.c:203 +#: receivelog.c:202 #, c-format msgid "not renaming \"%s%s\", segment is not complete" msgstr "pas de renommage de « %s%s », le segment n'est pas complet" -#: receivelog.c:215 receivelog.c:300 receivelog.c:675 +#: receivelog.c:214 receivelog.c:299 receivelog.c:674 #, c-format msgid "could not close file \"%s\": %s" msgstr "n'a pas pu fermer le fichier « %s » : %s" -#: receivelog.c:272 +#: receivelog.c:271 #, c-format msgid "server reported unexpected history file name for timeline %u: %s" msgstr "le serveur a renvoyé un nom de fichier historique inattendu pour la timeline %u : %s" -#: receivelog.c:280 +#: receivelog.c:279 #, c-format msgid "could not create timeline history file \"%s\": %s" msgstr "n'a pas pu créer le fichier historique de la timeline « %s » : %s" -#: receivelog.c:287 +#: receivelog.c:286 #, c-format msgid "could not write timeline history file \"%s\": %s" msgstr "n'a pas pu écrire dans le fichier historique de la timeline « %s » : %s" -#: receivelog.c:377 +#: receivelog.c:376 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions older than %s" msgstr "version %s du serveur incompatible ; le client ne supporte pas le streaming de versions plus anciennes que %s" -#: receivelog.c:386 +#: receivelog.c:385 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions newer than %s" msgstr "version %s du serveur incompatible ; le client ne supporte pas le streaming de versions plus récentes que %s" -#: receivelog.c:488 streamutil.c:430 streamutil.c:467 +#: receivelog.c:487 streamutil.c:430 streamutil.c:467 #, c-format msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "n'a pas pu identifier le système : a récupéré %d lignes et %d champs, attendait %d lignes et %d champs (ou plus)." -#: receivelog.c:495 +#: receivelog.c:494 #, c-format msgid "system identifier does not match between base backup and streaming connection" msgstr "l'identifiant système ne correspond pas entre la sauvegarde des fichiers et la connexion de réplication" -#: receivelog.c:501 +#: receivelog.c:500 #, c-format msgid "starting timeline %u is not present in the server" msgstr "la timeline %u de départ n'est pas dans le serveur" -#: receivelog.c:542 +#: receivelog.c:541 #, c-format msgid "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields" msgstr "réponse inattendue à la commande TIMELINE_HISTORY : a récupéré %d lignes et %d champs, alors qu'il attendait %d lignes et %d champs" -#: receivelog.c:613 +#: receivelog.c:612 #, c-format msgid "server reported unexpected next timeline %u, following timeline %u" msgstr "le serveur a renvoyé une timeline suivante %u inattendue, après la timeline %u" -#: receivelog.c:619 +#: receivelog.c:618 #, c-format msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X" msgstr "le serveur a arrêté l'envoi de la timeline %u à %X/%X, mais a indiqué que la timeline suivante, %u, commence à %X/%X" -#: receivelog.c:659 +#: receivelog.c:658 #, c-format msgid "replication stream was terminated before stop point" msgstr "le flux de réplication a été abandonné avant d'arriver au point d'arrêt" -#: receivelog.c:705 +#: receivelog.c:704 #, c-format msgid "unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields" msgstr "ensemble de résultats inattendu après la fin de la timeline : a récupéré %d lignes et %d champs, alors qu'il attendait %d lignes et %d champs" -#: receivelog.c:714 +#: receivelog.c:713 #, c-format msgid "could not parse next timeline's starting point \"%s\"" msgstr "n'a pas pu analyser la position de départ de la prochaine timeline « %s »" -#: receivelog.c:763 receivelog.c:1015 +#: receivelog.c:762 receivelog.c:1014 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %s" -#: receivelog.c:1078 +#: receivelog.c:1077 #, c-format msgid "received write-ahead log record for offset %u with no file open" msgstr "a reçu l'enregistrement du journal de transactions pour le décalage %u sans fichier ouvert" -#: receivelog.c:1088 +#: receivelog.c:1087 #, c-format msgid "got WAL data offset %08x, expected %08x" msgstr "a obtenu le décalage %08x pour les données du journal, attendait %08x" -#: receivelog.c:1122 +#: receivelog.c:1121 #, c-format msgid "could not write %u bytes to WAL file \"%s\": %s" msgstr "n'a pas pu écrire %u octets dans le journal de transactions « %s » : %s" -#: receivelog.c:1147 receivelog.c:1187 receivelog.c:1218 +#: receivelog.c:1146 receivelog.c:1186 receivelog.c:1216 #, c-format msgid "could not send copy-end packet: %s" msgstr "n'a pas pu envoyer le paquet de fin de copie : %s" -#: streamutil.c:160 +#: streamutil.c:162 msgid "Password: " msgstr "Mot de passe : " -#: streamutil.c:185 +#: streamutil.c:186 #, c-format msgid "could not connect to server" msgstr "n'a pas pu se connecter au serveur" -#: streamutil.c:202 -#, c-format -msgid "could not connect to server: %s" -msgstr "n'a pas pu se connecter au serveur : %s" - #: streamutil.c:231 #, c-format msgid "could not clear search_path: %s" @@ -1480,7 +1466,7 @@ msgstr "n'a pas pu créer le slot de réplication « %s » : a récupéré %d li msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "n'a pas pu supprimer le slot de réplication « %s » : a récupéré %d lignes et %d champs, attendait %d lignes et %d champs" -#: walmethods.c:438 walmethods.c:927 +#: walmethods.c:438 walmethods.c:932 msgid "could not compress data" msgstr "n'a pas pu compresser les données" @@ -1500,18 +1486,33 @@ msgstr "erreur d'implémentation : les fichiers tar ne peuvent pas avoir plus d' msgid "could not create tar header" msgstr "n'a pas pu créer l'en-tête du fichier tar" -#: walmethods.c:608 walmethods.c:648 walmethods.c:843 walmethods.c:854 +#: walmethods.c:608 walmethods.c:650 walmethods.c:847 walmethods.c:859 msgid "could not change compression parameters" msgstr "n'a pas pu modifier les paramètres de compression" -#: walmethods.c:730 +#: walmethods.c:734 msgid "unlink not supported with compression" msgstr "suppression non supportée avec la compression" -#: walmethods.c:952 +#: walmethods.c:957 msgid "could not close compression stream" msgstr "n'a pas pu fermer le flux de compression" +#~ msgid "--create-slot and --no-slot are incompatible options" +#~ msgstr "--create-slot et --no-slot sont des options incompatibles" + +#~ msgid "--progress and --no-estimate-size are incompatible options" +#~ msgstr "--progress et --no-estimate-size sont des options incompatibles" + +#~ msgid "--no-manifest and --manifest-checksums are incompatible options" +#~ msgstr "--no-manifest et --manifest-checksums sont des options incompatibles" + +#~ msgid "--no-manifest and --manifest-force-encode are incompatible options" +#~ msgstr "--no-manifest et --manifest-force-encode sont des options incompatibles" + +#~ msgid "could not connect to server: %s" +#~ msgstr "n'a pas pu se connecter au serveur : %s" + #~ msgid "" #~ "\n" #~ "Report bugs to .\n" @@ -1768,3 +1769,6 @@ msgstr "n'a pas pu fermer le flux de compression" #~ msgid "%s: could not stat file \"%s\": %s\n" #~ msgstr "%s : n'a pas pu récupérer les informations sur le fichier « %s » : %s\n" + +#~ msgid "select() failed: %m" +#~ msgstr "échec de select() : %m" diff --git a/src/bin/pg_basebackup/po/ja.po b/src/bin/pg_basebackup/po/ja.po index e610f119a1cd3..1ecac3c55c32e 100644 --- a/src/bin/pg_basebackup/po/ja.po +++ b/src/bin/pg_basebackup/po/ja.po @@ -4,10 +4,10 @@ # , 2013 msgid "" msgstr "" -"Project-Id-Version: pg_basebackup (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: pg_basebackup (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-06-06 10:43+0900\n" -"PO-Revision-Date: 2019-06-06 16:58+0900\n" +"POT-Creation-Date: 2020-08-21 15:54+0900\n" +"PO-Revision-Date: 2020-09-13 08:55+0200\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -15,171 +15,167 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:241 #, c-format msgid "fatal: " msgstr "致命的エラー: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:248 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:255 #, c-format msgid "warning: " msgstr "警告: " #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "メモリ不足です\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" -msgstr "null ポインタを複製できません(内部エラー)。\n" +msgstr "null ポインタを複製できません (内部エラー)\n" -#: ../../common/file_utils.c:81 ../../common/file_utils.c:183 -#: pg_receivewal.c:267 pg_recvlogical.c:342 +#: ../../common/file_utils.c:84 ../../common/file_utils.c:186 +#: pg_receivewal.c:266 pg_recvlogical.c:340 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ファイル\"%s\"のstatに失敗しました: %m" -#: ../../common/file_utils.c:160 pg_receivewal.c:170 +#: ../../common/file_utils.c:163 pg_receivewal.c:169 #, c-format msgid "could not open directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" -#: ../../common/file_utils.c:194 pg_receivewal.c:338 +#: ../../common/file_utils.c:197 pg_receivewal.c:337 #, c-format msgid "could not read directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を読み取れませんでした: %m" -#: ../../common/file_utils.c:226 ../../common/file_utils.c:285 -#: ../../common/file_utils.c:359 pg_basebackup.c:1761 +#: ../../common/file_utils.c:229 ../../common/file_utils.c:288 +#: ../../common/file_utils.c:362 ../../fe_utils/recovery_gen.c:134 #, c-format msgid "could not open file \"%s\": %m" msgstr "ファイル\"%s\"をオープンできませんでした: %m" -#: ../../common/file_utils.c:297 ../../common/file_utils.c:367 -#: pg_recvlogical.c:195 +#: ../../common/file_utils.c:300 ../../common/file_utils.c:370 +#: pg_recvlogical.c:193 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "ファイル\"%s\"をfsyncできませんでした: %m" -#: ../../common/file_utils.c:377 +#: ../../common/file_utils.c:380 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m" -#: pg_basebackup.c:171 +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 pg_basebackup.c:1248 +#, c-format +msgid "out of memory" +msgstr "メモリ不足です" + +#: ../../fe_utils/recovery_gen.c:140 pg_basebackup.c:1021 pg_basebackup.c:1714 +#: pg_basebackup.c:1770 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "ファイル\"%s\"を書き込めませんでした: %m" + +#: ../../fe_utils/recovery_gen.c:152 pg_basebackup.c:1166 pg_basebackup.c:1671 +#: pg_basebackup.c:1747 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "ファイル\"%s\"を作成できませんでした: %m" + +#: pg_basebackup.c:224 #, c-format -#| msgid "%s: removing data directory \"%s\"\n" msgid "removing data directory \"%s\"" msgstr "データディレクトリ\"%s\"を削除しています" -#: pg_basebackup.c:173 +#: pg_basebackup.c:226 #, c-format -#| msgid "%s: failed to remove data directory\n" msgid "failed to remove data directory" msgstr "データディレクトリの削除に失敗しました" -#: pg_basebackup.c:177 +#: pg_basebackup.c:230 #, c-format -#| msgid "%s: removing contents of data directory \"%s\"\n" msgid "removing contents of data directory \"%s\"" msgstr "データディレクトリ\"%s\"の内容を削除しています" -#: pg_basebackup.c:179 +#: pg_basebackup.c:232 #, c-format -#| msgid "%s: failed to remove contents of data directory\n" msgid "failed to remove contents of data directory" msgstr "データディレクトリの中身の削除に失敗しました" -#: pg_basebackup.c:184 +#: pg_basebackup.c:237 #, c-format -#| msgid "%s: removing WAL directory \"%s\"\n" msgid "removing WAL directory \"%s\"" msgstr "WAL ディレクトリ\"%s\"を削除しています" -#: pg_basebackup.c:186 +#: pg_basebackup.c:239 #, c-format -#| msgid "%s: failed to remove WAL directory\n" msgid "failed to remove WAL directory" msgstr "WAL ディレクトリの削除に失敗しました" -#: pg_basebackup.c:190 +#: pg_basebackup.c:243 #, c-format -#| msgid "%s: removing contents of WAL directory \"%s\"\n" msgid "removing contents of WAL directory \"%s\"" msgstr "WAL ディレクトリ\"%s\"の中身を削除しています" -#: pg_basebackup.c:192 +#: pg_basebackup.c:245 #, c-format -#| msgid "%s: failed to remove contents of WAL directory\n" msgid "failed to remove contents of WAL directory" msgstr "WAL ディレクトリの中身の削除に失敗しました" -#: pg_basebackup.c:198 +#: pg_basebackup.c:251 #, c-format -#| msgid "%s: data directory \"%s\" not removed at user's request\n" msgid "data directory \"%s\" not removed at user's request" msgstr "ユーザの要求により、データディレクトリ\"%s\"を削除しませんでした" -#: pg_basebackup.c:201 +#: pg_basebackup.c:254 #, c-format -#| msgid "%s: WAL directory \"%s\" not removed at user's request\n" msgid "WAL directory \"%s\" not removed at user's request" msgstr "ユーザの要求により、WAL ディレクトリ\"%s\"を削除しませんでした" -#: pg_basebackup.c:205 +#: pg_basebackup.c:258 #, c-format -#| msgid "%s: changes to tablespace directories will not be undone\n" msgid "changes to tablespace directories will not be undone" msgstr "テーブル空間用ディレクトリへの変更は取り消されません" -#: pg_basebackup.c:246 +#: pg_basebackup.c:299 #, c-format -#| msgid "%s: directory name too long\n" msgid "directory name too long" msgstr "ディレクトリ名が長すぎます" -#: pg_basebackup.c:256 +#: pg_basebackup.c:309 #, c-format -#| msgid "%s: multiple \"=\" signs in tablespace mapping\n" msgid "multiple \"=\" signs in tablespace mapping" msgstr "テーブル空間のマッピングに複数の\"=\"記号があります" -#: pg_basebackup.c:268 +#: pg_basebackup.c:321 #, c-format -#| msgid "" -#| "%s: invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"\n" msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" -msgstr "" -"テーブル空間のマッピング形式\"%s\"が不正です。\"旧DIR=新DIR\"でなければなりま" -"せん" +msgstr "テーブル空間のマッピング形式\"%s\"が不正です。\"旧DIR=新DIR\"でなければなりません" -#: pg_basebackup.c:280 +#: pg_basebackup.c:333 #, c-format -#| msgid "" -#| "%s: old directory is not an absolute path in tablespace mapping: %s\n" msgid "old directory is not an absolute path in tablespace mapping: %s" -msgstr "" -"テーブル空間のマッピングにおいて、旧ディレクトリが絶対パスではありません: %s" +msgstr "テーブル空間のマッピングにおいて、旧ディレクトリが絶対パスではありません: %s" -#: pg_basebackup.c:287 +#: pg_basebackup.c:340 #, c-format -#| msgid "" -#| "%s: new directory is not an absolute path in tablespace mapping: %s\n" msgid "new directory is not an absolute path in tablespace mapping: %s" -msgstr "" -"テーブル空間のマッピングにおいて、新ディレクトリが絶対パスではありません: %s" +msgstr "テーブル空間のマッピングにおいて、新ディレクトリが絶対パスではありません: %s" -#: pg_basebackup.c:326 +#: pg_basebackup.c:379 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -188,17 +184,17 @@ msgstr "" "%sは実行中のPostgreSQLサーバのベースバックアップを取得します。\n" "\n" -#: pg_basebackup.c:328 pg_receivewal.c:81 pg_recvlogical.c:78 +#: pg_basebackup.c:381 pg_receivewal.c:79 pg_recvlogical.c:75 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: pg_basebackup.c:329 pg_receivewal.c:82 pg_recvlogical.c:79 +#: pg_basebackup.c:382 pg_receivewal.c:80 pg_recvlogical.c:76 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [オプション]...\n" -#: pg_basebackup.c:330 +#: pg_basebackup.c:383 #, c-format msgid "" "\n" @@ -207,19 +203,17 @@ msgstr "" "\n" "出力を制御するオプション:\n" -#: pg_basebackup.c:331 +#: pg_basebackup.c:384 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" -msgstr "" -" -D, --pgdata=DIRECTORY ディレクトリ内にベースバックアップを格納します\n" +msgstr " -D, --pgdata=DIRECTORY ベースバックアップをディレクトリ内に格納\n" -#: pg_basebackup.c:332 +#: pg_basebackup.c:385 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" -msgstr "" -" -F, --format=p|t 出力フォーマット(プレイン(デフォルト)またはtar)\n" +msgstr " -F, --format=p|t 出力フォーマット(プレイン(デフォルト)またはtar)\n" -#: pg_basebackup.c:333 +#: pg_basebackup.c:386 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -228,11 +222,8 @@ msgstr "" " -r, --max-rate=RATE データディレクトリ転送の際の最大転送速度\n" " (kB/s 単位、または 接尾辞 \"k\" か\"M\" を使用)\n" -#: pg_basebackup.c:335 +#: pg_basebackup.c:388 #, c-format -#| msgid "" -#| " -R, --write-recovery-conf\n" -#| " write recovery.conf for replication\n" msgid "" " -R, --write-recovery-conf\n" " write configuration for replication\n" @@ -240,7 +231,7 @@ msgstr "" " -R, --write-recovery-conf\n" " レプリケーションのための設定を書き込む\n" -#: pg_basebackup.c:337 +#: pg_basebackup.c:390 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -249,34 +240,32 @@ msgstr "" " -T, --tablespace-mapping=旧DIR=新DIR\n" " テーブル空間を旧DIRから新DIRに移動する\n" -#: pg_basebackup.c:339 +#: pg_basebackup.c:392 #, c-format msgid " --waldir=WALDIR location for the write-ahead log directory\n" msgstr " --waldir=WALDIR 先行書き込みログ用ディレクトリの位置\n" -#: pg_basebackup.c:340 +#: pg_basebackup.c:393 #, c-format msgid "" " -X, --wal-method=none|fetch|stream\n" " include required WAL files with specified method\n" msgstr "" " -X, --wal-method=none|fetch|stream\n" -" 要求されたWALファイルを指定のメソッドを使ってバッ" -"ク\n" +" 要求されたWALファイルを指定のメソッドを使ってバック\n" " アップに含める\n" -#: pg_basebackup.c:342 +#: pg_basebackup.c:395 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip tar の出力を圧縮する\n" -#: pg_basebackup.c:343 +#: pg_basebackup.c:396 #, c-format -msgid "" -" -Z, --compress=0-9 compress tar output with given compression level\n" +msgid " -Z, --compress=0-9 compress tar output with given compression level\n" msgstr " -Z, --compress=0-9 指定した圧縮レベルで tar の出力を圧縮する\n" -#: pg_basebackup.c:344 +#: pg_basebackup.c:397 #, c-format msgid "" "\n" @@ -285,7 +274,7 @@ msgstr "" "\n" "汎用オプション:\n" -#: pg_basebackup.c:345 +#: pg_basebackup.c:398 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" @@ -294,60 +283,80 @@ msgstr "" " -c, --checkpoint=fast|spread\n" " 高速または分散チェックポイント処理の指定\n" -#: pg_basebackup.c:347 +#: pg_basebackup.c:400 #, c-format -#| msgid "" -#| " --create-slot create a new replication slot (for the slot's " -#| "name see --slot)\n" msgid " -C, --create-slot create replication slot\n" msgstr " -C, --create-slot 新しいレプリケーションスロットを作成する\n" -#: pg_basebackup.c:348 +#: pg_basebackup.c:401 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=LABEL バックアップラベルの設定\n" -#: pg_basebackup.c:349 +#: pg_basebackup.c:402 #, c-format msgid " -n, --no-clean do not clean up after errors\n" -msgstr "" -" -n, --noclean エラー発生後作成したファイルの削除を行わない\n" +msgstr " -n, --noclean エラー発生後作成したファイルの削除を行わない\n" -#: pg_basebackup.c:350 +#: pg_basebackup.c:403 #, c-format -msgid "" -" -N, --no-sync do not wait for changes to be written safely to " -"disk\n" +msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --nosync ディスクへの安全な書き込みを待機しない\n" -#: pg_basebackup.c:351 +#: pg_basebackup.c:404 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress 進行状況の表示\n" -#: pg_basebackup.c:352 pg_receivewal.c:91 +#: pg_basebackup.c:405 pg_receivewal.c:89 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=スロット名 使用するレプリケーションスロット\n" -#: pg_basebackup.c:353 pg_receivewal.c:93 pg_recvlogical.c:99 +#: pg_basebackup.c:406 pg_receivewal.c:91 pg_recvlogical.c:96 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose 冗長メッセージの出力\n" -#: pg_basebackup.c:354 pg_receivewal.c:94 pg_recvlogical.c:100 +#: pg_basebackup.c:407 pg_receivewal.c:92 pg_recvlogical.c:97 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_basebackup.c:355 +#: pg_basebackup.c:408 #, c-format msgid "" -" --no-slot prevent creation of temporary replication slot\n" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" use algorithm for manifest checksums\n" msgstr "" -" --no-slot 一時レプリケーションスロットの作成を行わない\n" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" 目録チェックサムに使用するアルゴリズム\n" + +#: pg_basebackup.c:410 +#, c-format +msgid "" +" --manifest-force-encode\n" +" hex encode all file names in manifest\n" +msgstr "" +" --manifest-force-encode\n" +" 目録中の全てのファイル名を16進エンコードする\n" + +#: pg_basebackup.c:412 +#, c-format +msgid " --no-estimate-size do not estimate backup size in server side\n" +msgstr " --no-estimate-size サーバ側でバックアップサイズを見積もらない\n" + +#: pg_basebackup.c:413 +#, c-format +msgid " --no-manifest suppress generation of backup manifest\n" +msgstr " --no-manifest バックアップ目録の作成を省略する\n" -#: pg_basebackup.c:356 +#: pg_basebackup.c:414 +#, c-format +msgid " --no-slot prevent creation of temporary replication slot\n" +msgstr " --no-slot 一時レプリケーションスロットの作成を行わない\n" + +#: pg_basebackup.c:415 #, c-format msgid "" " --no-verify-checksums\n" @@ -356,12 +365,12 @@ msgstr "" " --no-verify-checksums\n" " チェックサムを検証しない\n" -#: pg_basebackup.c:358 pg_receivewal.c:96 pg_recvlogical.c:101 +#: pg_basebackup.c:417 pg_receivewal.c:94 pg_recvlogical.c:98 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_basebackup.c:359 pg_receivewal.c:97 pg_recvlogical.c:102 +#: pg_basebackup.c:418 pg_receivewal.c:95 pg_recvlogical.c:99 #, c-format msgid "" "\n" @@ -370,573 +379,488 @@ msgstr "" "\n" "接続オプション:\n" -#: pg_basebackup.c:360 pg_receivewal.c:98 +#: pg_basebackup.c:419 pg_receivewal.c:96 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=CONNSTR 接続文字列\n" -#: pg_basebackup.c:361 pg_receivewal.c:99 pg_recvlogical.c:104 +#: pg_basebackup.c:420 pg_receivewal.c:97 pg_recvlogical.c:101 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" -msgstr "" -" -h, --host=HOSTNAME データベースサーバホストまたはソケットディレクトリ\n" +msgstr " -h, --host=HOSTNAME データベースサーバホストまたはソケットディレクトリ\n" -#: pg_basebackup.c:362 pg_receivewal.c:100 pg_recvlogical.c:105 +#: pg_basebackup.c:421 pg_receivewal.c:98 pg_recvlogical.c:102 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT データベースサーバのポート番号\n" -#: pg_basebackup.c:363 +#: pg_basebackup.c:422 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" -" time between status packets sent to server (in " -"seconds)\n" +" time between status packets sent to server (in seconds)\n" msgstr "" " -s, --status-interval=INTERVAL\n" " サーバへ送出するステータスパケットの間隔(秒単位)\n" -#: pg_basebackup.c:365 pg_receivewal.c:101 pg_recvlogical.c:106 +#: pg_basebackup.c:424 pg_receivewal.c:99 pg_recvlogical.c:103 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME 指定したデータベースユーザで接続\n" -#: pg_basebackup.c:366 pg_receivewal.c:102 pg_recvlogical.c:107 +#: pg_basebackup.c:425 pg_receivewal.c:100 pg_recvlogical.c:104 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password パスワードの入力を要求しない\n" -#: pg_basebackup.c:367 pg_receivewal.c:103 pg_recvlogical.c:108 +#: pg_basebackup.c:426 pg_receivewal.c:101 pg_recvlogical.c:105 #, c-format -msgid "" -" -W, --password force password prompt (should happen " -"automatically)\n" -msgstr "" -" -W, --password パスワード入力要求を強制(自動的に行われるはず)\n" +msgid " -W, --password force password prompt (should happen automatically)\n" +msgstr " -W, --password パスワード入力要求を強制(自動的に行われるはず)\n" -#: pg_basebackup.c:368 pg_receivewal.c:107 pg_recvlogical.c:109 +#: pg_basebackup.c:427 pg_receivewal.c:105 pg_recvlogical.c:106 #, c-format -#| msgid "" -#| "\n" -#| "Report bugs to .\n" msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"不具合があれば宛てに報告してください。\n" +"バグは<%s>に報告してください。\n" + +#: pg_basebackup.c:428 pg_receivewal.c:106 pg_recvlogical.c:107 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" -#: pg_basebackup.c:411 +#: pg_basebackup.c:471 #, c-format -#| msgid "%s: could not read from ready pipe: %s\n" msgid "could not read from ready pipe: %m" msgstr "準備ができたパイプからの読み込みが失敗しました: %m" -#: pg_basebackup.c:417 pg_basebackup.c:545 pg_basebackup.c:2099 +#: pg_basebackup.c:477 pg_basebackup.c:608 pg_basebackup.c:2133 #: streamutil.c:450 #, c-format -#| msgid "%s: could not parse write-ahead log location \"%s\"\n" msgid "could not parse write-ahead log location \"%s\"" msgstr "先行書き込みログの位置\"%s\"をパースできませんでした" -#: pg_basebackup.c:510 pg_receivewal.c:442 +#: pg_basebackup.c:573 pg_receivewal.c:441 #, c-format -#| msgid "%s: could not finish writing WAL files: %s\n" msgid "could not finish writing WAL files: %m" msgstr "WALファイルの書き込みを終了できませんでした: %m" -#: pg_basebackup.c:557 +#: pg_basebackup.c:620 #, c-format -#| msgid "%s: could not create pipe for background process: %s\n" msgid "could not create pipe for background process: %m" msgstr "バックグランドプロセス用のパイプを作成できませんでした: \"%m" -#: pg_basebackup.c:592 +#: pg_basebackup.c:655 #, c-format -#| msgid "%s: could not create temporary replication slot \"%s\": %s" msgid "created temporary replication slot \"%s\"" msgstr "一時レプリケーションスロット\"%s\"を作成しました" -#: pg_basebackup.c:595 +#: pg_basebackup.c:658 #, c-format -#| msgid "%s: creating replication slot \"%s\"\n" msgid "created replication slot \"%s\"" msgstr "レプリケーションスロット\"%s\"を作成していました" -#: pg_basebackup.c:615 pg_basebackup.c:668 pg_basebackup.c:1503 +#: pg_basebackup.c:678 pg_basebackup.c:731 pg_basebackup.c:1620 #, c-format msgid "could not create directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を作成できませんでした: %m" -#: pg_basebackup.c:633 +#: pg_basebackup.c:696 #, c-format -#| msgid "%s: could not create background process: %s\n" msgid "could not create background process: %m" msgstr "バックグラウンドプロセスを生成できませんでした: %m" -#: pg_basebackup.c:645 +#: pg_basebackup.c:708 #, c-format -#| msgid "%s: could not create background thread: %s\n" msgid "could not create background thread: %m" msgstr "バックグラウンドスレッドを生成できませんでした: %m" -#: pg_basebackup.c:689 +#: pg_basebackup.c:752 #, c-format -#| msgid "%s: directory \"%s\" exists but is not empty\n" msgid "directory \"%s\" exists but is not empty" msgstr "ディレクトリ\"%s\"は存在しますが空ではありません" -#: pg_basebackup.c:696 +#: pg_basebackup.c:759 #, c-format msgid "could not access directory \"%s\": %m" msgstr "ディレクトリ\"%s\"にアクセスできませんでした: %m" -#: pg_basebackup.c:757 +#: pg_basebackup.c:824 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s kB (100%%), %d/%d テーブル空間 %*s" -#: pg_basebackup.c:769 +#: pg_basebackup.c:836 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s kB (%d%%), %d/%d テーブル空間 (%s%-*.*s)" -#: pg_basebackup.c:785 +#: pg_basebackup.c:852 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s kB (%d%%), %d/%d テーブル空間" -#: pg_basebackup.c:809 +#: pg_basebackup.c:877 #, c-format -#| msgid "%s: transfer rate \"%s\" is not a valid value\n" msgid "transfer rate \"%s\" is not a valid value" msgstr "転送速度\"%s\"は無効な値です" -#: pg_basebackup.c:814 +#: pg_basebackup.c:882 #, c-format -#| msgid "%s: invalid transfer rate \"%s\": %s\n" msgid "invalid transfer rate \"%s\": %m" msgstr "転送速度\"%s\"は無効です: %m" -#: pg_basebackup.c:823 +#: pg_basebackup.c:891 #, c-format -#| msgid "%s: transfer rate must be greater than zero\n" msgid "transfer rate must be greater than zero" msgstr "転送速度は0より大きな値でなければなりません" -#: pg_basebackup.c:855 +#: pg_basebackup.c:923 #, c-format -#| msgid "%s: invalid --max-rate unit: \"%s\"\n" msgid "invalid --max-rate unit: \"%s\"" msgstr "--max-rate の単位が不正です: \"%s\"" -#: pg_basebackup.c:862 +#: pg_basebackup.c:930 #, c-format -#| msgid "%s: transfer rate \"%s\" exceeds integer range\n" msgid "transfer rate \"%s\" exceeds integer range" msgstr "転送速度\"%s\"がintegerの範囲を超えています" -#: pg_basebackup.c:872 +#: pg_basebackup.c:940 #, c-format -#| msgid "%s: transfer rate \"%s\" is out of range\n" msgid "transfer rate \"%s\" is out of range" msgstr "転送速度\"%s\"が範囲外です" -#: pg_basebackup.c:894 +#: pg_basebackup.c:961 +#, c-format +msgid "could not get COPY data stream: %s" +msgstr "COPYデータストリームを取得できませんでした: %s" + +#: pg_basebackup.c:981 pg_recvlogical.c:435 pg_recvlogical.c:607 +#: receivelog.c:965 +#, c-format +msgid "could not read COPY data: %s" +msgstr "COPYデータを読み取ることができませんでした: %s" + +#: pg_basebackup.c:1007 #, c-format -#| msgid "%s: could not write to compressed file \"%s\": %s\n" msgid "could not write to compressed file \"%s\": %s" msgstr "圧縮ファイル\"%s\"に書き込めませんでした: %s" -#: pg_basebackup.c:904 pg_basebackup.c:1592 pg_basebackup.c:1767 +#: pg_basebackup.c:1071 #, c-format -msgid "could not write to file \"%s\": %m" -msgstr "ファイル\"%s\"を書き込めませんでした: %m" +msgid "could not duplicate stdout: %m" +msgstr "標準出力の複製に失敗しました: %m" + +#: pg_basebackup.c:1078 +#, c-format +msgid "could not open output file: %m" +msgstr "出力ファイルをオープンできませんでした: %m" -#: pg_basebackup.c:969 pg_basebackup.c:989 pg_basebackup.c:1016 +#: pg_basebackup.c:1085 pg_basebackup.c:1106 pg_basebackup.c:1135 #, c-format -#| msgid "%s: could not set compression level %d: %s\n" msgid "could not set compression level %d: %s" msgstr "圧縮レベルを%dに設定できませんでした: %s" -#: pg_basebackup.c:1036 +#: pg_basebackup.c:1155 #, c-format -#| msgid "%s: could not create compressed file \"%s\": %s\n" msgid "could not create compressed file \"%s\": %s" msgstr "圧縮ファイル\"%s\"を作成できませんでした: %s" -#: pg_basebackup.c:1047 pg_basebackup.c:1553 pg_basebackup.c:1779 -#, c-format -msgid "could not create file \"%s\": %m" -msgstr "ファイル\"%s\"を作成できませんでした: %m" - -#: pg_basebackup.c:1058 pg_basebackup.c:1412 -#, c-format -#| msgid "%s: could not get COPY data stream: %s" -msgid "could not get COPY data stream: %s" -msgstr "COPYデータストリームを取得できませんでした: %s" - -#: pg_basebackup.c:1143 +#: pg_basebackup.c:1267 #, c-format -#| msgid "%s: could not close compressed file \"%s\": %s\n" msgid "could not close compressed file \"%s\": %s" msgstr "圧縮ファイル\"%s\"を閉じることができませんでした: %s" -#: pg_basebackup.c:1155 pg_recvlogical.c:608 +#: pg_basebackup.c:1279 pg_recvlogical.c:632 #, c-format msgid "could not close file \"%s\": %m" msgstr "ファイル\"%s\"をクローズできませんでした: %m" -#: pg_basebackup.c:1166 pg_basebackup.c:1441 pg_recvlogical.c:437 -#: receivelog.c:968 +#: pg_basebackup.c:1541 #, c-format -#| msgid "%s: could not read COPY data: %s" -msgid "could not read COPY data: %s" -msgstr "COPYデータを読み取ることができませんでした: %s" +msgid "COPY stream ended before last file was finished" +msgstr "最後のファイルが終わる前にCOPYストリームが終了しました" -#: pg_basebackup.c:1455 +#: pg_basebackup.c:1570 #, c-format -#| msgid "%s: invalid tar block header size: %d\n" -msgid "invalid tar block header size: %d" -msgstr "無効な tar ブロックヘッダサイズ: %d" +msgid "invalid tar block header size: %zu" +msgstr "無効なtarブロックヘッダサイズ: %zu" -#: pg_basebackup.c:1510 +#: pg_basebackup.c:1627 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "ディレクトリ\"%s\"に権限を設定できませんでした: %m" -#: pg_basebackup.c:1533 +#: pg_basebackup.c:1651 #, c-format -#| msgid "%s: could not create symbolic link from \"%s\" to \"%s\": %s\n" msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "\"%s\"から\"%s\"へのシンボリックリンクを作成できませんでした: %m" -#: pg_basebackup.c:1540 +#: pg_basebackup.c:1658 #, c-format -#| msgid "%s: unrecognized link indicator \"%c\"\n" msgid "unrecognized link indicator \"%c\"" msgstr "リンク指示子\"%c\"を認識できません" -#: pg_basebackup.c:1559 +#: pg_basebackup.c:1677 #, c-format -#| msgid "could not set permissions of file \"%s\": %m" msgid "could not set permissions on file \"%s\": %m" msgstr "ファイル\"%s\"の権限を設定できませんでした: %m" -#: pg_basebackup.c:1616 -#, c-format -#| msgid "%s: COPY stream ended before last file was finished\n" -msgid "COPY stream ended before last file was finished" -msgstr "最後のファイルが終わる前にCOPYストリームが終了しました" - -#: pg_basebackup.c:1643 pg_basebackup.c:1663 pg_basebackup.c:1677 -#: pg_basebackup.c:1728 -#, c-format -msgid "out of memory" -msgstr "メモリ不足です" - -#: pg_basebackup.c:1820 +#: pg_basebackup.c:1831 #, c-format -#| msgid "%s: incompatible server version %s\n" msgid "incompatible server version %s" msgstr "非互換のサーババージョン \"%s\"" -#: pg_basebackup.c:1835 +#: pg_basebackup.c:1846 #, c-format -#| msgid "HINT: use -X none or -X fetch to disable log streaming\n" msgid "HINT: use -X none or -X fetch to disable log streaming" msgstr "ヒント: -X none または -X fetch でログストリーミングを無効にできます" -#: pg_basebackup.c:1860 +#: pg_basebackup.c:1882 #, c-format -#| msgid "%s: initiating base backup, waiting for checkpoint to complete\n" msgid "initiating base backup, waiting for checkpoint to complete" msgstr "ベースバックアップを開始しています - チェックポイントの完了を待機中" -#: pg_basebackup.c:1884 pg_recvlogical.c:264 receivelog.c:484 receivelog.c:533 -#: receivelog.c:572 streamutil.c:299 streamutil.c:370 streamutil.c:422 +#: pg_basebackup.c:1908 pg_recvlogical.c:262 receivelog.c:481 receivelog.c:530 +#: receivelog.c:569 streamutil.c:297 streamutil.c:370 streamutil.c:422 #: streamutil.c:533 streamutil.c:578 #, c-format -#| msgid "%s: could not send replication command \"%s\": %s" msgid "could not send replication command \"%s\": %s" msgstr "レプリケーションコマンド\"%s\"を送信できませんでした: %s" -#: pg_basebackup.c:1895 +#: pg_basebackup.c:1919 #, c-format -#| msgid "%s: could not initiate base backup: %s" msgid "could not initiate base backup: %s" msgstr "ベースバックアップを開始できませんでした: %s" -#: pg_basebackup.c:1901 +#: pg_basebackup.c:1925 #, c-format -#| msgid "" -#| "%s: server returned unexpected response to BASE_BACKUP command; got %d " -#| "rows and %d fields, expected %d rows and %d fields\n" -msgid "" -"server returned unexpected response to BASE_BACKUP command; got %d rows and " -"%d fields, expected %d rows and %d fields" -msgstr "" -"サーバが BASE_BACKUP コマンドに期待していない応答を返しました; %d行 %d列を受" -"信しましたが期待は %d列 %d行でした" +msgid "server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields" +msgstr "サーバが BASE_BACKUP コマンドに期待していない応答を返しました; %d行 %d列を受信しましたが期待は %d列 %d行でした" -#: pg_basebackup.c:1909 +#: pg_basebackup.c:1933 #, c-format -#| msgid "%s: checkpoint completed\n" msgid "checkpoint completed" msgstr "チェックポイントが完了しました" -#: pg_basebackup.c:1924 +#: pg_basebackup.c:1948 #, c-format -#| msgid "%s: write-ahead log start point: %s on timeline %u\n" msgid "write-ahead log start point: %s on timeline %u" msgstr "先行書き込みログの開始ポイント: タイムライン %2$u 上の %1$s" -#: pg_basebackup.c:1933 +#: pg_basebackup.c:1957 #, c-format -#| msgid "%s: could not get backup header: %s" msgid "could not get backup header: %s" msgstr "バックアップヘッダを取得できませんでした: %s" -#: pg_basebackup.c:1939 +#: pg_basebackup.c:1963 #, c-format -#| msgid "%s: no data returned from server\n" msgid "no data returned from server" msgstr "サーバからデータが返されませんでした" -#: pg_basebackup.c:1970 +#: pg_basebackup.c:1995 #, c-format -#| msgid "%s: can only write single tablespace to stdout, database has %d\n" msgid "can only write single tablespace to stdout, database has %d" -msgstr "" -"標準出力に書き出せるテーブル空間は1つだけですが、データベースには%d個ありま" -"す" +msgstr "標準出力に書き出せるテーブル空間は1つだけですが、データベースには%d個あります" -#: pg_basebackup.c:1982 +#: pg_basebackup.c:2007 #, c-format -#| msgid "%s: starting background WAL receiver\n" msgid "starting background WAL receiver" msgstr "バックグランドWAL受信処理を起動します" -#: pg_basebackup.c:2012 +#: pg_basebackup.c:2046 #, c-format -#| msgid "%s: could not get write-ahead log end position from server: %s" msgid "could not get write-ahead log end position from server: %s" msgstr "サーバから先行書き込みログの終了位置を取得できませんでした: %s" -#: pg_basebackup.c:2018 +#: pg_basebackup.c:2052 #, c-format -#| msgid "%s: no write-ahead log end position returned from server\n" msgid "no write-ahead log end position returned from server" msgstr "サーバから先行書き込みログの終了位置が返されませんでした" -#: pg_basebackup.c:2023 +#: pg_basebackup.c:2057 #, c-format -#| msgid "%s: write-ahead log end point: %s\n" msgid "write-ahead log end point: %s" msgstr "先行書き込みログの終了ポイント: %s" -#: pg_basebackup.c:2034 +#: pg_basebackup.c:2068 #, c-format msgid "checksum error occurred" msgstr "チェックサムエラーが発生しました" -#: pg_basebackup.c:2039 +#: pg_basebackup.c:2073 #, c-format -#| msgid "%s: final receive failed: %s" msgid "final receive failed: %s" msgstr "終端の受信に失敗しました: %s" -#: pg_basebackup.c:2063 +#: pg_basebackup.c:2097 #, c-format -#| msgid "%s: waiting for background process to finish streaming ...\n" msgid "waiting for background process to finish streaming ..." msgstr "バックグランドプロセスがストリーミング処理が終わるまで待機します ..." -#: pg_basebackup.c:2068 +#: pg_basebackup.c:2102 #, c-format -#| msgid "%s: could not send command to background pipe: %s\n" msgid "could not send command to background pipe: %m" msgstr "バックグランドへのパイプにコマンドを送信できませんでした: %m" -#: pg_basebackup.c:2076 +#: pg_basebackup.c:2110 #, c-format -#| msgid "%s: could not wait for child process: %s\n" msgid "could not wait for child process: %m" msgstr "子プロセスの待機ができませんでした: %m" -#: pg_basebackup.c:2081 +#: pg_basebackup.c:2115 #, c-format -#| msgid "%s: child %d died, expected %d\n" msgid "child %d died, expected %d" msgstr "子プロセス %d が終了しましたが、期待していたのは %d でした" -#: pg_basebackup.c:2086 streamutil.c:94 +#: pg_basebackup.c:2120 streamutil.c:92 #, c-format msgid "%s" msgstr "%s" -#: pg_basebackup.c:2111 +#: pg_basebackup.c:2145 #, c-format -#| msgid "%s: could not wait for child thread: %s\n" msgid "could not wait for child thread: %m" msgstr "子スレッドの待機ができませんでした: %m" -#: pg_basebackup.c:2117 +#: pg_basebackup.c:2151 #, c-format -#| msgid "%s: could not get child thread exit status: %s\n" msgid "could not get child thread exit status: %m" msgstr "子スレッドの終了ステータスを取得できませんでした: %m" -#: pg_basebackup.c:2122 +#: pg_basebackup.c:2156 #, c-format -#| msgid "%s: child thread exited with error %u\n" msgid "child thread exited with error %u" msgstr "子スレッドがエラー%uで終了しました" -#: pg_basebackup.c:2150 +#: pg_basebackup.c:2184 #, c-format -#| msgid "syncing data to disk ... " msgid "syncing data to disk ..." msgstr "データをディスクに同期しています..." -#: pg_basebackup.c:2163 +#: pg_basebackup.c:2209 +#, c-format +msgid "renaming backup_manifest.tmp to backup_manifest" +msgstr "backup_manifest.tmp の名前を backup_manifest に変更してください" + +#: pg_basebackup.c:2220 #, c-format -#| msgid "%s: base backup completed\n" msgid "base backup completed" msgstr "ベースバックアップが完了しました" -#: pg_basebackup.c:2244 +#: pg_basebackup.c:2305 #, c-format -#| msgid "%s: invalid output format \"%s\", must be \"plain\" or \"tar\"\n" -msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"\n" -msgstr "不正な出力フォーマット\"%s\"、\"plain\"か\"tar\"でなければなりません\n" +msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" +msgstr "不正な出力フォーマット\"%s\"、\"plain\"か\"tar\"でなければなりません" -#: pg_basebackup.c:2288 +#: pg_basebackup.c:2349 #, c-format -#| msgid "" -#| "%s: invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or " -#| "\"none\"\n" -msgid "" -"invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" -msgstr "" -"不正な wal-method オプション\"%s\"、\"fetch\"、\"stream\" または \"none\" の" -"いずれかでなければなりません" +msgid "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" +msgstr "不正な wal-method オプション\"%s\"、\"fetch\"、\"stream\" または \"none\" のいずれかでなければなりません" -#: pg_basebackup.c:2316 +#: pg_basebackup.c:2377 pg_receivewal.c:580 #, c-format -#| msgid "%s: invalid compression level \"%s\"\n" -msgid "invalid compression level \"%s\"\n" -msgstr "不正な圧縮レベル\"%s\"\n" +msgid "invalid compression level \"%s\"" +msgstr "無効な圧縮レベル \"%s\"" -#: pg_basebackup.c:2327 +#: pg_basebackup.c:2388 #, c-format -#| msgid "" -#| "%s: invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"\n" msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" -msgstr "" -"不正な checkpoint の引数\"%s\"、\"fast\" または \"spreadでなければなりません" +msgstr "不正な checkpoint の引数\"%s\"、\"fast\" または \"spreadでなければなりません" -#: pg_basebackup.c:2354 pg_receivewal.c:556 pg_recvlogical.c:796 +#: pg_basebackup.c:2415 pg_receivewal.c:555 pg_recvlogical.c:820 #, c-format -#| msgid "%s: invalid status interval \"%s\"\n" msgid "invalid status interval \"%s\"" msgstr "不正な status-interval \"%s\"" -#: pg_basebackup.c:2372 pg_basebackup.c:2385 pg_basebackup.c:2396 -#: pg_basebackup.c:2407 pg_basebackup.c:2415 pg_basebackup.c:2423 -#: pg_basebackup.c:2433 pg_basebackup.c:2446 pg_basebackup.c:2454 -#: pg_basebackup.c:2465 pg_basebackup.c:2475 pg_receivewal.c:606 -#: pg_receivewal.c:619 pg_receivewal.c:627 pg_receivewal.c:637 -#: pg_receivewal.c:645 pg_receivewal.c:656 pg_recvlogical.c:822 -#: pg_recvlogical.c:835 pg_recvlogical.c:846 pg_recvlogical.c:854 -#: pg_recvlogical.c:862 pg_recvlogical.c:870 pg_recvlogical.c:878 -#: pg_recvlogical.c:886 pg_recvlogical.c:894 +#: pg_basebackup.c:2445 pg_basebackup.c:2458 pg_basebackup.c:2469 +#: pg_basebackup.c:2480 pg_basebackup.c:2488 pg_basebackup.c:2496 +#: pg_basebackup.c:2506 pg_basebackup.c:2519 pg_basebackup.c:2528 +#: pg_basebackup.c:2539 pg_basebackup.c:2549 pg_basebackup.c:2567 +#: pg_basebackup.c:2576 pg_basebackup.c:2585 pg_receivewal.c:605 +#: pg_receivewal.c:618 pg_receivewal.c:626 pg_receivewal.c:636 +#: pg_receivewal.c:644 pg_receivewal.c:655 pg_recvlogical.c:846 +#: pg_recvlogical.c:859 pg_recvlogical.c:870 pg_recvlogical.c:878 +#: pg_recvlogical.c:886 pg_recvlogical.c:894 pg_recvlogical.c:902 +#: pg_recvlogical.c:910 pg_recvlogical.c:918 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細は\"%s --help\"で確認してください。\n" -#: pg_basebackup.c:2383 pg_receivewal.c:617 pg_recvlogical.c:833 +#: pg_basebackup.c:2456 pg_receivewal.c:616 pg_recvlogical.c:857 #, c-format -#| msgid "%s: too many command-line arguments (first is \"%s\")\n" msgid "too many command-line arguments (first is \"%s\")" msgstr "コマンドライン引数が多過ぎます(先頭は\"%s\"です)" -#: pg_basebackup.c:2395 pg_receivewal.c:655 +#: pg_basebackup.c:2468 pg_receivewal.c:654 #, c-format -#| msgid "%s: no target directory specified\n" msgid "no target directory specified" msgstr "格納先ディレクトリが指定されていません" -#: pg_basebackup.c:2406 +#: pg_basebackup.c:2479 #, c-format -#| msgid "%s: only tar mode backups can be compressed\n" msgid "only tar mode backups can be compressed" msgstr "tarモードでのバックアップのみが圧縮可能です" -#: pg_basebackup.c:2414 +#: pg_basebackup.c:2487 #, c-format -#| msgid "%s: cannot stream write-ahead logs in tar mode to stdout\n" msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "標準出力への tar モードでは書き込み先行ログをストリーム出力できません" -#: pg_basebackup.c:2422 +#: pg_basebackup.c:2495 #, c-format -#| msgid "%s: replication slots can only be used with WAL streaming\n" msgid "replication slots can only be used with WAL streaming" msgstr "レプリケーションスロットはWALストリーミングでのみ使用可能です" -#: pg_basebackup.c:2432 +#: pg_basebackup.c:2505 #, c-format -#| msgid "%s: --no-slot cannot be used with slot name\n" msgid "--no-slot cannot be used with slot name" msgstr "--no-slot はスロット名と同時には指定できません" #. translator: second %s is an option name -#: pg_basebackup.c:2444 pg_receivewal.c:635 +#: pg_basebackup.c:2517 pg_receivewal.c:634 #, c-format -#| msgid "%s: %s needs a slot to be specified using --slot\n" msgid "%s needs a slot to be specified using --slot" msgstr "%s は --slot でスロットを指定する必要があります" -#: pg_basebackup.c:2453 +#: pg_basebackup.c:2526 pg_basebackup.c:2565 pg_basebackup.c:2574 +#: pg_basebackup.c:2583 #, c-format -#| msgid "-C and -1 are incompatible options\n" -msgid "--create-slot and --no-slot are incompatible options" -msgstr "--create-slot と --no-slot は同時に指定できません" +msgid "%s and %s are incompatible options" +msgstr "%s と %s は非互換なオプションです" -#: pg_basebackup.c:2464 +#: pg_basebackup.c:2538 #, c-format -#| msgid "%s: WAL directory location can only be specified in plain mode\n" msgid "WAL directory location can only be specified in plain mode" msgstr "WALディレクトリの位置は plainモードでのみ指定可能です" -#: pg_basebackup.c:2474 +#: pg_basebackup.c:2548 #, c-format -#| msgid "%s: WAL directory location must be an absolute path\n" msgid "WAL directory location must be an absolute path" msgstr "WALディレクトリの位置は、絶対パスでなければなりません" -#: pg_basebackup.c:2484 pg_receivewal.c:664 +#: pg_basebackup.c:2558 pg_receivewal.c:663 #, c-format -#| msgid "%s: this build does not support compression\n" msgid "this build does not support compression" msgstr "このビルドでは圧縮をサポートしていません" -#: pg_basebackup.c:2538 +#: pg_basebackup.c:2643 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を作成できませんでした: %m" -#: pg_basebackup.c:2542 +#: pg_basebackup.c:2647 #, c-format -#| msgid "%s: symlinks are not supported on this platform" msgid "symlinks are not supported on this platform" msgstr "このプラットフォームでシンボリックリンクはサポートされていません" -#: pg_receivewal.c:79 +#: pg_receivewal.c:77 #, c-format msgid "" "%s receives PostgreSQL streaming write-ahead logs.\n" @@ -945,7 +869,7 @@ msgstr "" "%sはPostgreSQLの先行書き込みログストリームを受信します。\n" "\n" -#: pg_receivewal.c:83 pg_recvlogical.c:84 +#: pg_receivewal.c:81 pg_recvlogical.c:81 #, c-format msgid "" "\n" @@ -954,64 +878,52 @@ msgstr "" "\n" "オプション:\n" -#: pg_receivewal.c:84 +#: pg_receivewal.c:82 #, c-format -msgid "" -" -D, --directory=DIR receive write-ahead log files into this directory\n" +msgid " -D, --directory=DIR receive write-ahead log files into this directory\n" msgstr " -D, --directory=DIR 受信した先行書き込みログの格納ディレクトリ\n" -#: pg_receivewal.c:85 pg_recvlogical.c:85 +#: pg_receivewal.c:83 pg_recvlogical.c:82 #, c-format msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" msgstr " -E, --endpos=LSN 指定したLSNの受信後に終了\n" -#: pg_receivewal.c:86 pg_recvlogical.c:89 +#: pg_receivewal.c:84 pg_recvlogical.c:86 #, c-format -msgid "" -" --if-not-exists do not error if slot already exists when creating a " -"slot\n" -msgstr "" -"   --if-not-exists スロットの作成時に既に存在していてもエラーとしない\n" +msgid " --if-not-exists do not error if slot already exists when creating a slot\n" +msgstr "   --if-not-exists スロットの作成時に既に存在していてもエラーとしない\n" -#: pg_receivewal.c:87 pg_recvlogical.c:91 +#: pg_receivewal.c:85 pg_recvlogical.c:88 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop 接続断の際にループしない\n" -#: pg_receivewal.c:88 +#: pg_receivewal.c:86 #, c-format -#| msgid "" -#| " -N, --no-sync do not wait for changes to be written safely to " -#| "disk\n" -msgid "" -" --no-sync do not wait for changes to be written safely to " -"disk\n" +msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync ディスクへの安全な書き込みの待機を行わない\n" -#: pg_receivewal.c:89 pg_recvlogical.c:96 +#: pg_receivewal.c:87 pg_recvlogical.c:93 #, c-format msgid "" " -s, --status-interval=SECS\n" -" time between status packets sent to server " -"(default: %d)\n" +" time between status packets sent to server (default: %d)\n" msgstr "" " -s, --status-interval=SECS\n" " サーバへ送出するステータスパケットの間隔\n" " (デフォルト: %d)\n" -#: pg_receivewal.c:92 +#: pg_receivewal.c:90 #, c-format -msgid "" -" --synchronous flush write-ahead log immediately after writing\n" -msgstr "" -" --synchronous 先行書き込みログを書き込み後直ちにフラッシュ\n" +msgid " --synchronous flush write-ahead log immediately after writing\n" +msgstr " --synchronous 先行書き込みログを書き込み後直ちにフラッシュ\n" -#: pg_receivewal.c:95 +#: pg_receivewal.c:93 #, c-format msgid " -Z, --compress=0-9 compress logs with given compression level\n" msgstr " -Z, --compress=0-9 指定した圧縮レベルでログを圧縮\n" -#: pg_receivewal.c:104 +#: pg_receivewal.c:102 #, c-format msgid "" "\n" @@ -1020,168 +932,127 @@ msgstr "" "\n" "追加の動作:\n" -#: pg_receivewal.c:105 pg_recvlogical.c:81 +#: pg_receivewal.c:103 pg_recvlogical.c:78 #, c-format -msgid "" -" --create-slot create a new replication slot (for the slot's name " -"see --slot)\n" +msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" msgstr "" " --create-slot 新しいレプリケーションスロットを作成する\n" " (スロット名については --slot を参照)\n" -#: pg_receivewal.c:106 pg_recvlogical.c:82 +#: pg_receivewal.c:104 pg_recvlogical.c:79 #, c-format -msgid "" -" --drop-slot drop the replication slot (for the slot's name see " -"--slot)\n" +msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" msgstr "" " --drop-slot レプリケーションスロットを削除する\n" " (スロット名については --slot を参照)\n" -#: pg_receivewal.c:118 +#: pg_receivewal.c:117 #, c-format -#| msgid "%s: finished segment at %X/%X (timeline %u)\n" msgid "finished segment at %X/%X (timeline %u)" msgstr "%X/%X (タイムライン %u)でセグメントが完了" -#: pg_receivewal.c:125 +#: pg_receivewal.c:124 #, c-format -#| msgid "%s: starting log streaming at %X/%X (timeline %u)\n" msgid "stopped log streaming at %X/%X (timeline %u)" msgstr "%X/%X (タイムライン %u)でログのストリーミングを停止しました" -#: pg_receivewal.c:141 +#: pg_receivewal.c:140 #, c-format -#| msgid "%s: switched to timeline %u at %X/%X\n" msgid "switched to timeline %u at %X/%X" msgstr "%3$X/%2$Xで タイムライン%1$uに切り替えました" -#: pg_receivewal.c:151 +#: pg_receivewal.c:150 #, c-format -#| msgid "%s: received interrupt signal, exiting\n" msgid "received interrupt signal, exiting" msgstr "割り込みシグナルを受信、終了します" -#: pg_receivewal.c:187 +#: pg_receivewal.c:186 #, c-format -#| msgid "could not close directory \"%s\": %s\n" msgid "could not close directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をクローズできませんでした: %m" -#: pg_receivewal.c:273 +#: pg_receivewal.c:272 #, c-format -#| msgid "%s: segment file \"%s\" has incorrect size %d, skipping\n" msgid "segment file \"%s\" has incorrect size %d, skipping" msgstr "セグメントファイル\"%s\"のサイズ %d が不正です、スキップします" -#: pg_receivewal.c:291 +#: pg_receivewal.c:290 #, c-format -#| msgid "%s: could not open compressed file \"%s\": %s\n" msgid "could not open compressed file \"%s\": %m" msgstr "圧縮ファイル\"%s\"を開けませんでした: %m" -#: pg_receivewal.c:297 +#: pg_receivewal.c:296 #, c-format -#| msgid "%s: could not seek in compressed file \"%s\": %s\n" msgid "could not seek in compressed file \"%s\": %m" msgstr "圧縮ファイル\"%s\"でseekできませんでした: %m" -#: pg_receivewal.c:305 +#: pg_receivewal.c:304 #, c-format -#| msgid "%s: could not read compressed file \"%s\": %s\n" msgid "could not read compressed file \"%s\": %m" msgstr "圧縮ファイル\"%s\"を読めませんでした: %m" -#: pg_receivewal.c:308 +#: pg_receivewal.c:307 #, c-format -#| msgid "could not read file \"%s\": read %d of %zu" msgid "could not read compressed file \"%s\": read %d of %zu" -msgstr "" -"圧縮ファイル\"%1$s\"を読めませんでした: %3$zuバイトのうち%2$dバイトを読み込み" -"済み" +msgstr "圧縮ファイル\"%1$s\"を読めませんでした: %3$zuバイトのうち%2$dバイトを読み込み済み" -#: pg_receivewal.c:319 +#: pg_receivewal.c:318 #, c-format -#| msgid "" -#| "%s: compressed segment file \"%s\" has incorrect uncompressed size %d, " -#| "skipping\n" -msgid "" -"compressed segment file \"%s\" has incorrect uncompressed size %d, skipping" +msgid "compressed segment file \"%s\" has incorrect uncompressed size %d, skipping" msgstr "圧縮セグメントファイル\"%s\"の展開後サイズ%dが不正です、スキップします" -#: pg_receivewal.c:423 +#: pg_receivewal.c:422 #, c-format -#| msgid "%s: starting log streaming at %X/%X (timeline %u)\n" msgid "starting log streaming at %X/%X (timeline %u)" msgstr "%X/%X (タイムライン %u)からログのストリーミングを開始" -#: pg_receivewal.c:538 pg_recvlogical.c:738 +#: pg_receivewal.c:537 pg_recvlogical.c:762 #, c-format -#| msgid "invalid port number: \"%s\"\n" msgid "invalid port number \"%s\"" msgstr "不正なポート番号: \"%s\"" -#: pg_receivewal.c:566 pg_recvlogical.c:764 +#: pg_receivewal.c:565 pg_recvlogical.c:788 #, c-format -#| msgid "%s: could not parse end position \"%s\"\n" msgid "could not parse end position \"%s\"" msgstr "終了位置\"%s\"をパースできませんでした" -#: pg_receivewal.c:581 -#, c-format -#| msgid "%s: invalid compression level \"%s\"\n" -msgid "invalid compression level \"%s\"" -msgstr "無効な圧縮レベル \"%s\"" - -#: pg_receivewal.c:626 +#: pg_receivewal.c:625 #, c-format -#| msgid "%s: cannot use --create-slot together with --drop-slot\n" msgid "cannot use --create-slot together with --drop-slot" msgstr "--create-slot は --drop-slot と同時には指定できません" -#: pg_receivewal.c:644 +#: pg_receivewal.c:643 #, c-format -#| msgid "%s: cannot use --create-slot together with --drop-slot\n" msgid "cannot use --synchronous together with --no-sync" msgstr "--synchronous は --no-sync と同時には指定できません" -#: pg_receivewal.c:720 +#: pg_receivewal.c:719 #, c-format -#| msgid "" -#| "%s: replication connection using slot \"%s\" is unexpectedly database " -#| "specific\n" -msgid "" -"replication connection using slot \"%s\" is unexpectedly database specific" -msgstr "" -"スロット\"%s\"を使用するレプリケーション接続で、想定に反してデータベースが指" -"定されています" +msgid "replication connection using slot \"%s\" is unexpectedly database specific" +msgstr "スロット\"%s\"を使用するレプリケーション接続で、想定に反してデータベースが指定されています" -#: pg_receivewal.c:731 pg_recvlogical.c:942 +#: pg_receivewal.c:730 pg_recvlogical.c:966 #, c-format -#| msgid "%s: dropping replication slot \"%s\"\n" msgid "dropping replication slot \"%s\"" msgstr "レプリケーションスロット\"%s\"を削除しています" -#: pg_receivewal.c:742 pg_recvlogical.c:952 +#: pg_receivewal.c:741 pg_recvlogical.c:976 #, c-format -#| msgid "%s: creating replication slot \"%s\"\n" msgid "creating replication slot \"%s\"" msgstr "レプリケーションスロット\"%s\"を作成しています" -#: pg_receivewal.c:768 pg_recvlogical.c:977 +#: pg_receivewal.c:767 pg_recvlogical.c:1001 #, c-format -#| msgid "%s: disconnected\n" msgid "disconnected" msgstr "切断しました" #. translator: check source for value for %d -#: pg_receivewal.c:774 pg_recvlogical.c:983 +#: pg_receivewal.c:773 pg_recvlogical.c:1007 #, c-format -#| msgid "%s: disconnected; waiting %d seconds to try again\n" msgid "disconnected; waiting %d seconds to try again" msgstr "切断しました; %d秒待機して再試行します" -#: pg_recvlogical.c:76 +#: pg_recvlogical.c:73 #, c-format msgid "" "%s controls PostgreSQL logical decoding streams.\n" @@ -1190,7 +1061,7 @@ msgstr "" "%s はPostgreSQLの論理デコードストリームを制御します。\n" "\n" -#: pg_recvlogical.c:80 +#: pg_recvlogical.c:77 #, c-format msgid "" "\n" @@ -1199,38 +1070,33 @@ msgstr "" "\n" "実行する動作:\n" -#: pg_recvlogical.c:83 +#: pg_recvlogical.c:80 #, c-format -msgid "" -" --start start streaming in a replication slot (for the " -"slot's name see --slot)\n" +msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" msgstr "" " --start レプリケーションスロットでストリーミングを開始する\n" " (スロット名については --slot を参照)\n" -#: pg_recvlogical.c:86 +#: pg_recvlogical.c:83 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr " -f, --file=FILE このファイルにログを受け取る、 - で標準出力\n" -#: pg_recvlogical.c:87 +#: pg_recvlogical.c:84 #, c-format msgid "" " -F --fsync-interval=SECS\n" -" time between fsyncs to the output file (default: " -"%d)\n" +" time between fsyncs to the output file (default: %d)\n" msgstr "" " -F --fsync-interval=SECS\n" " 出力ファイルへのfsync時間間隔(デフォルト: %d)\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:87 #, c-format -msgid "" -" -I, --startpos=LSN where in an existing slot should the streaming " -"start\n" +msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" msgstr " -I, --startpos=LSN 既存スロット内のストリーミング開始位置\n" -#: pg_recvlogical.c:92 +#: pg_recvlogical.c:89 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -1238,619 +1104,465 @@ msgid "" " output plugin\n" msgstr "" " -o, --option=NAME[=VALUE]\n" -" 出力プラグインにオプションNAMEをオプション値VALUE" -"と\n" +" 出力プラグインにオプションNAMEをオプション値VALUEと\n" " ともに渡す\n" -#: pg_recvlogical.c:95 +#: pg_recvlogical.c:92 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=PLUGIN 出力プラグインPLUGINを使う(デフォルト: %s)\n" -#: pg_recvlogical.c:98 +#: pg_recvlogical.c:95 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=SLOTNAME 論理レプリケーションスロットの名前\n" -#: pg_recvlogical.c:103 +#: pg_recvlogical.c:100 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=DBNAME 接続先データベース\n" -#: pg_recvlogical.c:135 +#: pg_recvlogical.c:133 #, c-format -#| msgid "%s: confirming write up to %X/%X, flush to %X/%X (slot %s)\n" msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" -msgstr "" -"PrecPpg%X/%Xまでの書き込みと、%X/%X (スロット %s)までのフラッシュを確認して" -"います" +msgstr "PrecPpg%X/%Xまでの書き込みと、%X/%X (スロット %s)までのフラッシュを確認しています" -#: pg_recvlogical.c:159 receivelog.c:346 +#: pg_recvlogical.c:157 receivelog.c:343 #, c-format -#| msgid "%s: could not send feedback packet: %s" msgid "could not send feedback packet: %s" msgstr "フィードバックパケットを送信できませんでした: %s" -#: pg_recvlogical.c:232 +#: pg_recvlogical.c:230 #, c-format -#| msgid "%s: starting log streaming at %X/%X (slot %s)\n" msgid "starting log streaming at %X/%X (slot %s)" msgstr "%X/%X (スロット %s)からログのストリーミングを開始します" -#: pg_recvlogical.c:273 +#: pg_recvlogical.c:271 #, c-format -#| msgid "%s: streaming initiated\n" msgid "streaming initiated" msgstr "ストリーミングを開始しました" -#: pg_recvlogical.c:337 +#: pg_recvlogical.c:335 #, c-format msgid "could not open log file \"%s\": %m" msgstr "ロックファイル\"%s\"をオープンできませんでした: %m" -#: pg_recvlogical.c:363 receivelog.c:876 +#: pg_recvlogical.c:361 receivelog.c:873 #, c-format -#| msgid "%s: invalid socket: %s" msgid "invalid socket: %s" msgstr "無効なソケット: %s" -#: pg_recvlogical.c:416 receivelog.c:904 +#: pg_recvlogical.c:414 receivelog.c:901 #, c-format -#| msgid "select() failed: %s\n" msgid "select() failed: %m" msgstr "select()が失敗しました: %m" -#: pg_recvlogical.c:423 receivelog.c:954 +#: pg_recvlogical.c:421 receivelog.c:951 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "WAL ストリームからデータを受信できませんでした: %s" -#: pg_recvlogical.c:465 pg_recvlogical.c:516 receivelog.c:998 -#: receivelog.c:1064 +#: pg_recvlogical.c:463 pg_recvlogical.c:514 receivelog.c:995 receivelog.c:1061 #, c-format -#| msgid "%s: streaming header too small: %d\n" msgid "streaming header too small: %d" msgstr "ストリーミングヘッダが小さ過ぎます: %d" -#: pg_recvlogical.c:500 receivelog.c:836 +#: pg_recvlogical.c:498 receivelog.c:833 #, c-format -#| msgid "%s: unrecognized streaming header: \"%c\"\n" msgid "unrecognized streaming header: \"%c\"" msgstr "ストリーミングヘッダを認識できませんでした: \"%c\"" -#: pg_recvlogical.c:554 pg_recvlogical.c:566 +#: pg_recvlogical.c:552 pg_recvlogical.c:564 #, c-format -#| msgid "%s: could not write %u bytes to log file \"%s\": %s\n" msgid "could not write %u bytes to log file \"%s\": %m" msgstr "%u バイトをログファイル\"%s\"に書き込めませんでした: %m" -#: pg_recvlogical.c:594 receivelog.c:632 receivelog.c:669 +#: pg_recvlogical.c:618 receivelog.c:629 receivelog.c:666 #, c-format -#| msgid "%s: unexpected termination of replication stream: %s" msgid "unexpected termination of replication stream: %s" msgstr "レプリケーションストリームが突然終了しました: %s" -#: pg_recvlogical.c:718 +#: pg_recvlogical.c:742 #, c-format -#| msgid "%s: invalid fsync interval \"%s\"\n" msgid "invalid fsync interval \"%s\"" msgstr "不正なfsync間隔 \"%s\"" -#: pg_recvlogical.c:756 +#: pg_recvlogical.c:780 #, c-format -#| msgid "%s: could not parse start position \"%s\"\n" msgid "could not parse start position \"%s\"" msgstr "開始位置\"%s\"をパースできませんでした" -#: pg_recvlogical.c:845 +#: pg_recvlogical.c:869 #, c-format -#| msgid "%s: no slot specified\n" msgid "no slot specified" msgstr "スロットが指定されていません" -#: pg_recvlogical.c:853 +#: pg_recvlogical.c:877 #, c-format -#| msgid "%s: no target file specified\n" msgid "no target file specified" msgstr "ターゲットファイルが指定されていません" -#: pg_recvlogical.c:861 +#: pg_recvlogical.c:885 #, c-format -#| msgid "%s: no database specified\n" msgid "no database specified" msgstr "データベースが指定されていません" -#: pg_recvlogical.c:869 +#: pg_recvlogical.c:893 #, c-format -#| msgid "%s: at least one action needs to be specified\n" msgid "at least one action needs to be specified" msgstr "少なくとも一つのアクションを指定する必要があります" -#: pg_recvlogical.c:877 +#: pg_recvlogical.c:901 #, c-format -#| msgid "%s: cannot use --create-slot or --start together with --drop-slot\n" msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "--create-slot や --start は --drop-slot と同時には指定できません" -#: pg_recvlogical.c:885 +#: pg_recvlogical.c:909 #, c-format -#| msgid "" -#| "%s: cannot use --create-slot or --drop-slot together with --startpos\n" msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "--create-slot や --drop-slot は --startpos と同時には指定できません" -#: pg_recvlogical.c:893 +#: pg_recvlogical.c:917 #, c-format -#| msgid "%s: --endpos may only be specified with --start\n" msgid "--endpos may only be specified with --start" msgstr "--endpos は --start が指定されているときにのみ指定可能です" -#: pg_recvlogical.c:924 +#: pg_recvlogical.c:948 #, c-format -#| msgid "%s: could not establish database-specific replication connection\n" msgid "could not establish database-specific replication connection" msgstr "データベース指定のレプリケーション接続が確立できませんでした" -#: pg_recvlogical.c:1023 +#: pg_recvlogical.c:1047 #, c-format -msgid "endpos %X/%X reached by keepalive" -msgstr "キープアライブで endpos %X/%X に到達しました " +msgid "end position %X/%X reached by keepalive" +msgstr "キープアライブで終了位置 %X/%X に到達しました " -#: pg_recvlogical.c:1026 +#: pg_recvlogical.c:1050 #, c-format -#| msgid "could not read WAL record at %X/%X\n" -msgid "endpos %X/%X reached by record at %X/%X" -msgstr "%X/%X のWALレコードでendpos %X/%Xに到達しました" +msgid "end position %X/%X reached by WAL record at %X/%X" +msgstr "%X/%X のWALレコードで終了位置 %X/%X に到達しました" -#: receivelog.c:72 +#: receivelog.c:69 #, c-format -#| msgid "could not create archive status file \"%s\": %m" msgid "could not create archive status file \"%s\": %s" msgstr "アーカイブステータスファイル\"%s\"を作成できませんでした: %s" -#: receivelog.c:119 +#: receivelog.c:116 #, c-format -#| msgid "%s: could not get size of write-ahead log file \"%s\": %s\n" msgid "could not get size of write-ahead log file \"%s\": %s" msgstr "先行書き込みログファイル\"%s\"のサイズを取得できませんでした: %s" -#: receivelog.c:129 +#: receivelog.c:126 #, c-format -#| msgid "%s: could not open existing write-ahead log file \"%s\": %s\n" msgid "could not open existing write-ahead log file \"%s\": %s" msgstr "既存の先行書き込みログファイル\"%s\"をオープンできませんでした: %s" -#: receivelog.c:137 +#: receivelog.c:134 #, c-format -#| msgid "%s: could not fsync existing write-ahead log file \"%s\": %s\n" msgid "could not fsync existing write-ahead log file \"%s\": %s" msgstr "既存の先行書き込みログファイル\"%s\"をfsyncできませんでした: %s" -#: receivelog.c:151 +#: receivelog.c:148 #, c-format -#| msgid "%s: write-ahead log file \"%s\" has %d byte, should be 0 or %d\n" -#| msgid_plural "" -#| "%s: write-ahead log file \"%s\" has %d bytes, should be 0 or %d\n" msgid "write-ahead log file \"%s\" has %d byte, should be 0 or %d" msgid_plural "write-ahead log file \"%s\" has %d bytes, should be 0 or %d" -msgstr[0] "" -"先行書き込みログファイル\"%s\"は%dバイトですが、0または%dであるはずです" +msgstr[0] "先行書き込みログファイル\"%s\"は%dバイトですが、0または%dであるはずです" -#: receivelog.c:166 +#: receivelog.c:163 #, c-format -#| msgid "could not open write-ahead log file \"%s\": %m" msgid "could not open write-ahead log file \"%s\": %s" msgstr "先行書き込みログファイル\"%s\"をオープンできませんでした: %s" -#: receivelog.c:192 +#: receivelog.c:189 #, c-format -#| msgid "%s: could not determine seek position in file \"%s\": %s\n" msgid "could not determine seek position in file \"%s\": %s" msgstr "ファイル\"%s\"のシーク位置を取得できませんでした: %s" -#: receivelog.c:206 +#: receivelog.c:203 #, c-format -#| msgid "%s: not renaming \"%s%s\", segment is not complete\n" msgid "not renaming \"%s%s\", segment is not complete" msgstr "\"%s%s\"の名前を変更しません、セグメントが完全ではありません" -#: receivelog.c:218 receivelog.c:303 receivelog.c:678 +#: receivelog.c:215 receivelog.c:300 receivelog.c:675 #, c-format -#| msgid "could not close file \"%s\": %s\n" msgid "could not close file \"%s\": %s" msgstr "ファイル\"%s\"をクローズできませんでした: %s" -#: receivelog.c:275 +#: receivelog.c:272 #, c-format -#| msgid "" -#| "%s: server reported unexpected history file name for timeline %u: %s\n" msgid "server reported unexpected history file name for timeline %u: %s" -msgstr "" -"サーバがタイムライン%uに対する想定外の履歴ファイル名を通知してきました: %s" +msgstr "サーバがタイムライン%uに対する想定外の履歴ファイル名を通知してきました: %s" -#: receivelog.c:283 +#: receivelog.c:280 #, c-format -#| msgid "%s: could not create timeline history file \"%s\": %s\n" msgid "could not create timeline history file \"%s\": %s" msgstr "タイムライン履歴ファイル\"%s\"を作成できませんでした: %s" -#: receivelog.c:290 +#: receivelog.c:287 #, c-format -#| msgid "%s: could not write timeline history file \"%s\": %s\n" msgid "could not write timeline history file \"%s\": %s" msgstr "タイムライン履歴ファイル\"%s\"に書き込めませんでした: %s" -#: receivelog.c:380 +#: receivelog.c:377 #, c-format -#| msgid "" -#| "%s: incompatible server version %s; client does not support streaming " -#| "from server versions older than %s\n" -msgid "" -"incompatible server version %s; client does not support streaming from " -"server versions older than %s" -msgstr "" -"非互換のサーババージョン%s、クライアントは%sより古いサーババージョンからのス" -"トリーミングをサポートしていません" +msgid "incompatible server version %s; client does not support streaming from server versions older than %s" +msgstr "非互換のサーババージョン%s、クライアントは%sより古いサーババージョンからのストリーミングをサポートしていません" -#: receivelog.c:389 +#: receivelog.c:386 #, c-format -#| msgid "" -#| "%s: incompatible server version %s; client does not support streaming " -#| "from server versions newer than %s\n" -msgid "" -"incompatible server version %s; client does not support streaming from " -"server versions newer than %s" -msgstr "" -"非互換のサーババージョン%s、クライアントは%sより新しいサーババージョンからの" -"ストリーミングをサポートしていません" +msgid "incompatible server version %s; client does not support streaming from server versions newer than %s" +msgstr "非互換のサーババージョン%s、クライアントは%sより新しいサーババージョンからのストリーミングをサポートしていません" -#: receivelog.c:491 streamutil.c:430 streamutil.c:467 +#: receivelog.c:488 streamutil.c:430 streamutil.c:467 #, c-format -#| msgid "" -#| "Could not identify system: got %d rows and %d fields, expected %d rows " -#| "and %d or more fields." -msgid "" -"could not identify system: got %d rows and %d fields, expected %d rows and " -"%d or more fields" -msgstr "" -"システムを識別できませんでした: 受信したのは%d行%d列、想定は%d行%d列以上" +msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" +msgstr "システムを識別できませんでした: 受信したのは%d行%d列、想定は%d行%d列以上" -#: receivelog.c:498 +#: receivelog.c:495 #, c-format -#| msgid "" -#| "%s: system identifier does not match between base backup and streaming " -#| "connection\n" -msgid "" -"system identifier does not match between base backup and streaming connection" -msgstr "" -"システム識別子がベースバックアップとストリーミング接続の間で一致しません" +msgid "system identifier does not match between base backup and streaming connection" +msgstr "システム識別子がベースバックアップとストリーミング接続の間で一致しません" -#: receivelog.c:504 +#: receivelog.c:501 #, c-format -#| msgid "%s: starting timeline %u is not present in the server\n" msgid "starting timeline %u is not present in the server" msgstr "開始タイムライン%uがサーバに存在しません" -#: receivelog.c:545 +#: receivelog.c:542 #, c-format -#| msgid "" -#| "%s: unexpected response to TIMELINE_HISTORY command: got %d rows and %d " -#| "fields, expected %d rows and %d fields\n" -msgid "" -"unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, " -"expected %d rows and %d fields" -msgstr "" -"TIMELINE_HISTORYコマンドへの想定外の応答: 受信したのは%d行%d列、想定は%d行%d" -"列" +msgid "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields" +msgstr "TIMELINE_HISTORYコマンドへの想定外の応答: 受信したのは%d行%d列、想定は%d行%d列" -#: receivelog.c:616 +#: receivelog.c:613 #, c-format -#| msgid "" -#| "%s: server reported unexpected next timeline %u, following timeline %u\n" msgid "server reported unexpected next timeline %u, following timeline %u" -msgstr "" -"サーバがタイムライン%2$uに続いて想定外のタイムライン%1$uを通知してきました" +msgstr "サーバがタイムライン%2$uに続いて想定外のタイムライン%1$uを通知してきました" -#: receivelog.c:622 +#: receivelog.c:619 #, c-format -#| msgid "" -#| "%s: server stopped streaming timeline %u at %X/%X, but reported next " -#| "timeline %u to begin at %X/%X\n" -msgid "" -"server stopped streaming timeline %u at %X/%X, but reported next timeline %u " -"to begin at %X/%X" -msgstr "" -"サーバはタイムライン%uのストリーミングを%X/%Xで停止しました、しかし次のタイム" -"ライン%uが%X/%Xから開始すると通知してきています" +msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X" +msgstr "サーバはタイムライン%uのストリーミングを%X/%Xで停止しました、しかし次のタイムライン%uが%X/%Xから開始すると通知してきています" -#: receivelog.c:662 +#: receivelog.c:659 #, c-format -#| msgid "%s: replication stream was terminated before stop point\n" msgid "replication stream was terminated before stop point" msgstr "レプリケーションストリームが停止ポイントより前で終了しました" -#: receivelog.c:708 +#: receivelog.c:705 #, c-format -#| msgid "" -#| "%s: unexpected result set after end-of-timeline: got %d rows and %d " -#| "fields, expected %d rows and %d fields\n" -msgid "" -"unexpected result set after end-of-timeline: got %d rows and %d fields, " -"expected %d rows and %d fields" -msgstr "" -"タイムライン終了後に想定外の結果セット: 受信したのは%d行%d列、想定は%d行%d列" +msgid "unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields" +msgstr "タイムライン終了後に想定外の結果セット: 受信したのは%d行%d列、想定は%d行%d列" -#: receivelog.c:717 +#: receivelog.c:714 #, c-format -#| msgid "%s: could not parse next timeline's starting point \"%s\"\n" msgid "could not parse next timeline's starting point \"%s\"" msgstr "次のタイムラインの開始ポイント\"%s\"をパースできませんでした" -#: receivelog.c:766 receivelog.c:1018 +#: receivelog.c:763 receivelog.c:1015 #, c-format -#| msgid "could not fsync file \"%s\": %m" msgid "could not fsync file \"%s\": %s" msgstr "ファイル\"%s\"をfsyncできませんでした: %s" -#: receivelog.c:1081 +#: receivelog.c:1078 #, c-format -#| msgid "" -#| "%s: received write-ahead log record for offset %u with no file open\n" msgid "received write-ahead log record for offset %u with no file open" -msgstr "" -"ファイルがオープンされていない状態で、オフセット%uに対する先行書き込みログレ" -"コードを受信しました" +msgstr "ファイルがオープンされていない状態で、オフセット%uに対する先行書き込みログレコードを受信しました" -#: receivelog.c:1091 +#: receivelog.c:1088 #, c-format -#| msgid "%s: got WAL data offset %08x, expected %08x\n" msgid "got WAL data offset %08x, expected %08x" msgstr "WALデータオフセット%08xを受信、想定は%08x" -#: receivelog.c:1125 +#: receivelog.c:1122 #, c-format -#| msgid "%s: could not write %u bytes to WAL file \"%s\": %s\n" msgid "could not write %u bytes to WAL file \"%s\": %s" msgstr "WALファイル\"%2$s\"に%1$uバイト書き込めませんでした: %3$s" -#: receivelog.c:1150 receivelog.c:1190 receivelog.c:1221 +#: receivelog.c:1147 receivelog.c:1187 receivelog.c:1218 #, c-format -#| msgid "%s: could not send copy-end packet: %s" msgid "could not send copy-end packet: %s" msgstr "コピー終端パケットを送信できませんでした: %s" -#: streamutil.c:162 +#: streamutil.c:160 msgid "Password: " msgstr "パスワード: " -#: streamutil.c:187 +#: streamutil.c:185 #, c-format -#| msgid "could not connect to server: %s" msgid "could not connect to server" msgstr "サーバに接続できませんでした" -#: streamutil.c:204 +#: streamutil.c:202 #, c-format msgid "could not connect to server: %s" msgstr "サーバに接続できませんでした: %s" -#: streamutil.c:233 +#: streamutil.c:231 #, c-format -#| msgid "could not set search_path to \"%s\": %s" msgid "could not clear search_path: %s" msgstr "search_pathを消去できませんでした: %s" -#: streamutil.c:249 +#: streamutil.c:247 #, c-format -#| msgid "%s: could not determine server setting for integer_datetimes\n" msgid "could not determine server setting for integer_datetimes" msgstr "integer_datetimesのサーバ設定を取得できませんでした" -#: streamutil.c:256 +#: streamutil.c:254 #, c-format -#| msgid "%s: integer_datetimes compile flag does not match server\n" msgid "integer_datetimes compile flag does not match server" msgstr "integer_datetimesコンパイル時フラグがサーバと一致しません" -#: streamutil.c:307 +#: streamutil.c:305 #, c-format -#| msgid "" -#| "Could not identify system: got %d rows and %d fields, expected %d rows " -#| "and %d or more fields." -msgid "" -"could not fetch WAL segment size: got %d rows and %d fields, expected %d " -"rows and %d or more fields" -msgstr "" -"WALセグメントサイズを取得できませんでした: 受信したのは%d行で%d列、想定は%d行" -"で%d列以上" +msgid "could not fetch WAL segment size: got %d rows and %d fields, expected %d rows and %d or more fields" +msgstr "WALセグメントサイズを取得できませんでした: 受信したのは%d行で%d列、想定は%d行で%d列以上" -#: streamutil.c:317 +#: streamutil.c:315 #, c-format -#| msgid "parameter \"%s\" could not be set" msgid "WAL segment size could not be parsed" msgstr "WALセグメントサイズがパースできませんでした" -#: streamutil.c:332 +#: streamutil.c:333 #, c-format -#| msgid "" -#| "WAL segment size must be a power of two between 1 MB and 1 GB, but the " -#| "control file specifies %d byte" -#| msgid_plural "" -#| "WAL segment size must be a power of two between 1 MB and 1 GB, but the " -#| "control file specifies %d bytes" -msgid "" -"WAL segment size must be a power of two between 1 MB and 1 GB, but the " -"remote server reported a value of %d byte" -msgid_plural "" -"WAL segment size must be a power of two between 1 MB and 1 GB, but the " -"remote server reported a value of %d bytes" -msgstr[0] "" -"WALセグメントのサイズ指定は1MBと1GBの間の2の累乗でなければなりません、しかし" -"対向サーバは%dバイトと報告してきました" +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d bytes" +msgstr[0] "WALセグメントのサイズ指定は1MBと1GBの間の2の累乗でなければなりません、しかし対向サーバは%dバイトと報告してきました" #: streamutil.c:378 #, c-format -#| msgid "" -#| "Could not identify system: got %d rows and %d fields, expected %d rows " -#| "and %d or more fields." -msgid "" -"could not fetch group access flag: got %d rows and %d fields, expected %d " -"rows and %d or more fields" -msgstr "" -"グループアクセスフラグを取得できませんでした: 受信したのは%d行で%d列、想定" -"は%d行で%d列以上" +msgid "could not fetch group access flag: got %d rows and %d fields, expected %d rows and %d or more fields" +msgstr "グループアクセスフラグを取得できませんでした: 受信したのは%d行で%d列、想定は%d行で%d列以上" #: streamutil.c:387 #, c-format -#| msgid "certificate could not be obtained: %s\n" msgid "group access flag could not be parsed: %s" msgstr "グループアクセスフラグがパースできませんでした: %s" #: streamutil.c:544 #, c-format -#| msgid "" -#| "%s: could not create replication slot \"%s\": got %d rows and %d fields, " -#| "expected %d rows and %d fields\n" -msgid "" -"could not create replication slot \"%s\": got %d rows and %d fields, " -"expected %d rows and %d fields" -msgstr "" -"レプリケーションスロット\"%s\"を作成できませんでした: 受信したのは%d行%d列、" -"想定は%d行%d列" +msgid "could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" +msgstr "レプリケーションスロット\"%s\"を作成できませんでした: 受信したのは%d行%d列、想定は%d行%d列" #: streamutil.c:588 #, c-format -#| msgid "" -#| "%s: could not drop replication slot \"%s\": got %d rows and %d fields, " -#| "expected %d rows and %d fields\n" -msgid "" -"could not drop replication slot \"%s\": got %d rows and %d fields, expected " -"%d rows and %d fields" -msgstr "" -"レプリケーションスロット\"%s\"を削除できませんでした: 受信したのは%d行%d列、" -"想定は%d行%d列" +msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" +msgstr "レプリケーションスロット\"%s\"を削除できませんでした: 受信したのは%d行%d列、想定は%d行%d列" -#: walmethods.c:439 walmethods.c:928 +#: walmethods.c:438 walmethods.c:932 msgid "could not compress data" msgstr "データを圧縮できませんでした" -#: walmethods.c:471 +#: walmethods.c:470 msgid "could not reset compression stream" msgstr "圧縮ストリームをリセットできませんでした" -#: walmethods.c:569 +#: walmethods.c:568 msgid "could not initialize compression library" msgstr "圧縮ライブラリを初期化できませんでした" -#: walmethods.c:581 +#: walmethods.c:580 msgid "implementation error: tar files can't have more than one open file" msgstr "実装エラー:tar ファイルが複数のオープンされたファイルを保持できません" -#: walmethods.c:595 +#: walmethods.c:594 msgid "could not create tar header" msgstr "tar ヘッダを作成できませんでした" -#: walmethods.c:609 walmethods.c:649 walmethods.c:844 walmethods.c:855 +#: walmethods.c:608 walmethods.c:650 walmethods.c:847 walmethods.c:859 msgid "could not change compression parameters" msgstr "圧縮用パラメーターを変更できませんでした" -#: walmethods.c:731 +#: walmethods.c:734 msgid "unlink not supported with compression" msgstr "圧縮モードにおける unlink はサポートしていません" -#: walmethods.c:953 +#: walmethods.c:957 msgid "could not close compression stream" msgstr "圧縮ストリームをクローズできませんでした" -#~ msgid "%s: could not connect to server: %s" -#~ msgstr "%s: サーバに接続できませんでした: %s" +#~ msgid "%s: could not stat file \"%s\": %s\n" +#~ msgstr "%s: \"%s\"ファイルをstatできませんでした: %s\n" -#~ msgid "%s: could not connect to server\n" -#~ msgstr "%s: サーバに接続できませんでした\n" +#~ msgid "%s: could not open directory \"%s\": %s\n" +#~ msgstr "%s: ディレクトリ\"%s\"をオープンできませんでした: %s\n" -#~ msgid "" -#~ "%s: could not identify system: got %d rows and %d fields, expected %d " -#~ "rows and %d or more fields\n" -#~ msgstr "" -#~ "%s: システムを識別できませんでした: 受信したのは %d 行で %d フィールド、期" -#~ "待していたのは%d 行で %d 以上のフィールドでした\n" +#~ msgid "%s: could not read directory \"%s\": %s\n" +#~ msgstr "%s: ディレクトリ\"%s\"を読み取ることができませんでした。: %s\n" -#~ msgid "%s: could not open write-ahead log file \"%s\": %s\n" -#~ msgstr "" -#~ "%s: 先行書き込みログファイル \"%s\" をオープンできませんでした: %s\n" +#~ msgid "%s: could not open file \"%s\": %s\n" +#~ msgstr "%s: ファイル\"%s\"をオープンできませんでした: %s\n" -#~ msgid "%s: could not create archive status file \"%s\": %s\n" -#~ msgstr "%s: アーカイブ状態ファイル \"%s\" を作成できませんでした: %s\n" +#~ msgid "%s: could not fsync file \"%s\": %s\n" +#~ msgstr "%s: ファイル\"%s\"をfsyncできませんでした: %s\n" -#~ msgid "%s: could not receive data from WAL stream: %s" -#~ msgstr "%s: WALストリームからデータを受信できませんでした: %s" +#~ msgid "%s: could not rename file \"%s\" to \"%s\": %s\n" +#~ msgstr "%s: ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %s\n" -#~ msgid "%s: select() failed: %s\n" -#~ msgstr "%s: select()が失敗しました: %s\n" +#~ msgid "%s: could not create directory \"%s\": %s\n" +#~ msgstr "%s: ディレクトリ \"%s\" を作成できませんでした: %s\n" -#~ msgid "%s: could not open log file \"%s\": %s\n" -#~ msgstr "%s: ログファイル \"%s\" をオープンできませんでした: %s\n" +#~ msgid "%s: could not access directory \"%s\": %s\n" +#~ msgstr "%s: ディレクトリ \"%s\" にアクセスできませんでした: %s\n" -#~ msgid "%s: could not fsync log file \"%s\": %s\n" -#~ msgstr "%s: ログファイル\"%s\"をfsyncできませんでした: %s\n" +#~ msgid "%s: could not write to file \"%s\": %s\n" +#~ msgstr "%s: ファイル \"%s\" に書き出すことができませんでした: %s\n" -#~ msgid "%s: invalid port number \"%s\"\n" -#~ msgstr "%s: 無効なポート番号です: \"%s\"\n" +#~ msgid "%s: could not create file \"%s\": %s\n" +#~ msgstr "%s: ファイル \"%s\" を作成できませんでした: %s\n" -#~ msgid "%s: could not close directory \"%s\": %s\n" -#~ msgstr "%s: ディレクトリ \"%s\" をクローズできませんでした: %s\n" +#~ msgid "%s: could not close file \"%s\": %s\n" +#~ msgstr "%s: ファイル\"%s\"を閉じることができませんでした: %s\n" -#~ msgid "%s: symlinks are not supported on this platform\n" -#~ msgstr "" -#~ "%s: シンボリックリンクはこのプラットフォームではサポートされていません\n" +#~ msgid "%s: could not set permissions on directory \"%s\": %s\n" +#~ msgstr "%s: \"%s\"ディレクトリの権限を設定できませんでした: %s\n" -#~ msgid "%s: could not create symbolic link \"%s\": %s\n" -#~ msgstr "%s: シンボリックリンク\"%s\"を作成できませんでした: %s\n" +#~ msgid "%s: could not set permissions on file \"%s\": %s\n" +#~ msgstr "%s: ファイル \"%s\" の権限を設定できませんでした: %s\n" -#~ msgid "%s: child process exited with error %d\n" -#~ msgstr "%s: 子プロセスが終了コード%dで終了しました\n" +#~ msgid "%s: out of memory\n" +#~ msgstr "%s: メモリ不足です\n" #~ msgid "%s: child process did not exit normally\n" #~ msgstr "%s: 子プロセスが正常に終了しませんでした\n" -#~ msgid "%s: out of memory\n" -#~ msgstr "%s: メモリ不足です\n" +#~ msgid "%s: child process exited with error %d\n" +#~ msgstr "%s: 子プロセスが終了コード%dで終了しました\n" -#~ msgid "%s: could not set permissions on file \"%s\": %s\n" -#~ msgstr "%s: ファイル \"%s\" の権限を設定できませんでした: %s\n" +#~ msgid "%s: could not create symbolic link \"%s\": %s\n" +#~ msgstr "%s: シンボリックリンク\"%s\"を作成できませんでした: %s\n" -#~ msgid "%s: could not set permissions on directory \"%s\": %s\n" -#~ msgstr "%s: \"%s\"ディレクトリの権限を設定できませんでした: %s\n" +#~ msgid "%s: symlinks are not supported on this platform\n" +#~ msgstr "%s: シンボリックリンクはこのプラットフォームではサポートされていません\n" -#~ msgid "%s: could not close file \"%s\": %s\n" -#~ msgstr "%s: ファイル\"%s\"を閉じることができませんでした: %s\n" +#~ msgid "%s: could not close directory \"%s\": %s\n" +#~ msgstr "%s: ディレクトリ \"%s\" をクローズできませんでした: %s\n" -#~ msgid "%s: could not create file \"%s\": %s\n" -#~ msgstr "%s: ファイル \"%s\" を作成できませんでした: %s\n" +#~ msgid "%s: invalid port number \"%s\"\n" +#~ msgstr "%s: 無効なポート番号です: \"%s\"\n" -#~ msgid "%s: could not write to file \"%s\": %s\n" -#~ msgstr "%s: ファイル \"%s\" に書き出すことができませんでした: %s\n" +#~ msgid "%s: could not fsync log file \"%s\": %s\n" +#~ msgstr "%s: ログファイル\"%s\"をfsyncできませんでした: %s\n" -#~ msgid "%s: could not access directory \"%s\": %s\n" -#~ msgstr "%s: ディレクトリ \"%s\" にアクセスできませんでした: %s\n" +#~ msgid "%s: could not open log file \"%s\": %s\n" +#~ msgstr "%s: ログファイル \"%s\" をオープンできませんでした: %s\n" -#~ msgid "%s: could not create directory \"%s\": %s\n" -#~ msgstr "%s: ディレクトリ \"%s\" を作成できませんでした: %s\n" +#~ msgid "%s: select() failed: %s\n" +#~ msgstr "%s: select()が失敗しました: %s\n" -#~ msgid "%s: could not rename file \"%s\" to \"%s\": %s\n" -#~ msgstr "%s: ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %s\n" +#~ msgid "%s: could not receive data from WAL stream: %s" +#~ msgstr "%s: WALストリームからデータを受信できませんでした: %s" -#~ msgid "%s: could not fsync file \"%s\": %s\n" -#~ msgstr "%s: ファイル\"%s\"をfsyncできませんでした: %s\n" +#~ msgid "%s: could not create archive status file \"%s\": %s\n" +#~ msgstr "%s: アーカイブ状態ファイル \"%s\" を作成できませんでした: %s\n" -#~ msgid "%s: could not open file \"%s\": %s\n" -#~ msgstr "%s: ファイル\"%s\"をオープンできませんでした: %s\n" +#~ msgid "%s: could not open write-ahead log file \"%s\": %s\n" +#~ msgstr "%s: 先行書き込みログファイル \"%s\" をオープンできませんでした: %s\n" -#~ msgid "%s: could not read directory \"%s\": %s\n" -#~ msgstr "%s: ディレクトリ\"%s\"を読み取ることができませんでした。: %s\n" +#~ msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n" +#~ msgstr "%s: システムを識別できませんでした: 受信したのは %d 行で %d フィールド、期待していたのは%d 行で %d 以上のフィールドでした\n" -#~ msgid "%s: could not open directory \"%s\": %s\n" -#~ msgstr "%s: ディレクトリ\"%s\"をオープンできませんでした: %s\n" +#~ msgid "%s: could not connect to server\n" +#~ msgstr "%s: サーバに接続できませんでした\n" -#~ msgid "%s: could not stat file \"%s\": %s\n" -#~ msgstr "%s: \"%s\"ファイルをstatできませんでした: %s\n" +#~ msgid "%s: could not connect to server: %s" +#~ msgstr "%s: サーバに接続できませんでした: %s" diff --git a/src/bin/pg_basebackup/po/ko.po b/src/bin/pg_basebackup/po/ko.po index 4b0d6af250ca2..bbd19de74311b 100644 --- a/src/bin/pg_basebackup/po/ko.po +++ b/src/bin/pg_basebackup/po/ko.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_basebackup (PostgreSQL) 12\n" +"Project-Id-Version: pg_basebackup (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:14+0000\n" -"PO-Revision-Date: 2019-11-01 12:49+0900\n" +"POT-Creation-Date: 2020-10-05 01:15+0000\n" +"PO-Revision-Date: 2020-10-06 11:02+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean \n" "Language: ko\n" @@ -17,148 +17,167 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "심각: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "오류: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "경고: " #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "메모리 부족\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "null 포인터를 복제할 수 없음(내부 오류)\n" -#: ../../common/file_utils.c:81 ../../common/file_utils.c:183 -#: pg_receivewal.c:267 pg_recvlogical.c:342 +#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 +#: pg_receivewal.c:266 pg_recvlogical.c:340 #, c-format msgid "could not stat file \"%s\": %m" msgstr "\"%s\" 파일의 상태값을 알 수 없음: %m" -#: ../../common/file_utils.c:160 pg_receivewal.c:170 +#: ../../common/file_utils.c:158 pg_receivewal.c:169 #, c-format msgid "could not open directory \"%s\": %m" msgstr "\"%s\" 디렉터리 열 수 없음: %m" -#: ../../common/file_utils.c:194 pg_receivewal.c:338 +#: ../../common/file_utils.c:192 pg_receivewal.c:337 #, c-format msgid "could not read directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 읽을 수 없음: %m" -#: ../../common/file_utils.c:226 ../../common/file_utils.c:285 -#: ../../common/file_utils.c:359 pg_basebackup.c:1760 +#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 +#: ../../common/file_utils.c:357 ../../fe_utils/recovery_gen.c:134 #, c-format msgid "could not open file \"%s\": %m" msgstr "\"%s\" 파일을 열 수 없음: %m" -#: ../../common/file_utils.c:297 ../../common/file_utils.c:367 -#: pg_recvlogical.c:195 +#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 +#: pg_recvlogical.c:193 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "\"%s\" 파일 fsync 실패: %m" -#: ../../common/file_utils.c:377 +#: ../../common/file_utils.c:375 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m" -#: pg_basebackup.c:171 +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 pg_basebackup.c:1248 +#, c-format +msgid "out of memory" +msgstr "메모리 부족" + +#: ../../fe_utils/recovery_gen.c:140 pg_basebackup.c:1021 pg_basebackup.c:1714 +#: pg_basebackup.c:1770 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "\"%s\" 파일 쓰기 실패: %m" + +#: ../../fe_utils/recovery_gen.c:152 pg_basebackup.c:1166 pg_basebackup.c:1671 +#: pg_basebackup.c:1747 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "\"%s\" 파일을 만들 수 없음: %m" + +#: pg_basebackup.c:224 #, c-format msgid "removing data directory \"%s\"" msgstr "\"%s\" 디렉터리를 지우는 중" -#: pg_basebackup.c:173 +#: pg_basebackup.c:226 #, c-format msgid "failed to remove data directory" msgstr "데이터 디렉터리 삭제 실패" -#: pg_basebackup.c:177 +#: pg_basebackup.c:230 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "\"%s\" 데이터 디렉터리의 내용을 지우는 중" -#: pg_basebackup.c:179 +#: pg_basebackup.c:232 #, c-format msgid "failed to remove contents of data directory" msgstr "데이터 디렉터리의 내용을 지울 수 없음" -#: pg_basebackup.c:184 +#: pg_basebackup.c:237 #, c-format msgid "removing WAL directory \"%s\"" msgstr "\"%s\" WAL 디렉터리를 지우는 중" -#: pg_basebackup.c:186 +#: pg_basebackup.c:239 #, c-format msgid "failed to remove WAL directory" msgstr "WAL 디렉터리 삭제 실패" -#: pg_basebackup.c:190 +#: pg_basebackup.c:243 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "\"%s\" WAL 디렉터리 내용을 지우는 중" -#: pg_basebackup.c:192 +#: pg_basebackup.c:245 #, c-format msgid "failed to remove contents of WAL directory" msgstr "WAL 디렉터리의 내용을 지울 수 없음" -#: pg_basebackup.c:198 +#: pg_basebackup.c:251 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "사용자 요청으로 \"%s\" 데이터 디렉터리를 지우지 않았음" -#: pg_basebackup.c:201 +#: pg_basebackup.c:254 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "사용자 요청으로 \"%s\" WAL 디렉터리를 지우지 않았음" -#: pg_basebackup.c:205 +#: pg_basebackup.c:258 #, c-format msgid "changes to tablespace directories will not be undone" msgstr "아직 마무리 되지 않은 테이블스페이스 디렉터리 변경함" -#: pg_basebackup.c:246 +#: pg_basebackup.c:299 #, c-format msgid "directory name too long" msgstr "디렉터리 이름이 너무 김" -#: pg_basebackup.c:256 +#: pg_basebackup.c:309 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "테이블스페이스 맵핑 하는 곳에서 \"=\" 문자가 중복 되어 있음" -#: pg_basebackup.c:268 +#: pg_basebackup.c:321 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "" "\"%s\" 형식의 테이블스페이스 맵핑이 잘못 되었음, \"OLDDIR=NEWDIR\" 형식이어" "야 함" -#: pg_basebackup.c:280 +#: pg_basebackup.c:333 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "테이블스페이스 맵핑용 옛 디렉터리가 절대 경로가 아님: %s" -#: pg_basebackup.c:287 +#: pg_basebackup.c:340 #, c-format msgid "new directory is not an absolute path in tablespace mapping: %s" msgstr "테이블스페이스 맵핑용 새 디렉터리가 절대 경로가 아님: %s" -#: pg_basebackup.c:326 +#: pg_basebackup.c:379 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -168,17 +187,17 @@ msgstr "" "다.\n" "\n" -#: pg_basebackup.c:328 pg_receivewal.c:81 pg_recvlogical.c:78 +#: pg_basebackup.c:381 pg_receivewal.c:79 pg_recvlogical.c:75 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: pg_basebackup.c:329 pg_receivewal.c:82 pg_recvlogical.c:79 +#: pg_basebackup.c:382 pg_receivewal.c:80 pg_recvlogical.c:76 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [옵션]...\n" -#: pg_basebackup.c:330 +#: pg_basebackup.c:383 #, c-format msgid "" "\n" @@ -187,17 +206,17 @@ msgstr "" "\n" "출력물을 제어야하는 옵션들:\n" -#: pg_basebackup.c:331 +#: pg_basebackup.c:384 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=디렉터리 베이스 백업 결과물이 저장될 디렉터리\n" -#: pg_basebackup.c:332 +#: pg_basebackup.c:385 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|t 출력 형식 (plain (초기값), tar)\n" -#: pg_basebackup.c:333 +#: pg_basebackup.c:386 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -207,7 +226,7 @@ msgstr "" " (단위는 kB/s, 또는 숫자 뒤에 \"k\" 또는 \"M\" 단위 " "문자 지정 가능)\n" -#: pg_basebackup.c:335 +#: pg_basebackup.c:388 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -216,7 +235,7 @@ msgstr "" " -R, --write-recovery-conf\n" " 복제를 위한 환경 설정 함\n" -#: pg_basebackup.c:337 +#: pg_basebackup.c:390 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -225,12 +244,12 @@ msgstr "" " -T, --tablespace-mapping=옛DIR=새DIR\n" " 테이블스페이스 디렉터리 새 맵핑\n" -#: pg_basebackup.c:339 +#: pg_basebackup.c:392 #, c-format msgid " --waldir=WALDIR location for the write-ahead log directory\n" msgstr " --waldir=WALDIR 트랜잭션 로그 디렉터리 지정\n" -#: pg_basebackup.c:340 +#: pg_basebackup.c:393 #, c-format msgid "" " -X, --wal-method=none|fetch|stream\n" @@ -239,18 +258,18 @@ msgstr "" " -X, --wal-method=none|fetch|stream\n" " 필요한 WAL 파일을 백업하는 방법\n" -#: pg_basebackup.c:342 +#: pg_basebackup.c:395 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip tar 출력물을 압축\n" -#: pg_basebackup.c:343 +#: pg_basebackup.c:396 #, c-format msgid "" " -Z, --compress=0-9 compress tar output with given compression level\n" msgstr " -Z, --compress=0-9 압축된 tar 파일의 압축 수위 지정\n" -#: pg_basebackup.c:344 +#: pg_basebackup.c:397 #, c-format msgid "" "\n" @@ -259,7 +278,7 @@ msgstr "" "\n" "일반 옵션들:\n" -#: pg_basebackup.c:345 +#: pg_basebackup.c:398 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" @@ -268,55 +287,83 @@ msgstr "" " -c, --checkpoint=fast|spread\n" " 체크포인트 방법\n" -#: pg_basebackup.c:347 +#: pg_basebackup.c:400 #, c-format msgid " -C, --create-slot create replication slot\n" msgstr " -C, --create-slot 새 복제 슬롯을 만듬\n" -#: pg_basebackup.c:348 +#: pg_basebackup.c:401 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=라벨 백업 라벨 지정\n" -#: pg_basebackup.c:349 +#: pg_basebackup.c:402 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean 오류 발생 시 정리하지 않음\n" -#: pg_basebackup.c:350 +#: pg_basebackup.c:403 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written safely to " "disk\n" msgstr " -N, --no-sync 디스크 쓰기 뒤 sync 작업 생략\n" -#: pg_basebackup.c:351 +#: pg_basebackup.c:404 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress 진행 과정 보여줌\n" -#: pg_basebackup.c:352 pg_receivewal.c:91 +#: pg_basebackup.c:405 pg_receivewal.c:89 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=슬롯이름 지정한 복제 슬롯을 사용함\n" -#: pg_basebackup.c:353 pg_receivewal.c:93 pg_recvlogical.c:99 +#: pg_basebackup.c:406 pg_receivewal.c:91 pg_recvlogical.c:96 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose 자세한 작업 메시지 보여줌\n" -#: pg_basebackup.c:354 pg_receivewal.c:94 pg_recvlogical.c:100 +#: pg_basebackup.c:407 pg_receivewal.c:92 pg_recvlogical.c:97 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보 보여주고 마침\n" -#: pg_basebackup.c:355 +#: pg_basebackup.c:408 +#, c-format +msgid "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" use algorithm for manifest checksums\n" +msgstr "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" 사용할 manifest 체크섬 알고리즘\n" + +#: pg_basebackup.c:410 +#, c-format +msgid "" +" --manifest-force-encode\n" +" hex encode all file names in manifest\n" +msgstr "" +" --manifest-force-encode\n" +" manifest 내 모든 파일 이름을 16진수 인코딩함\n" + +#: pg_basebackup.c:412 +#, c-format +msgid " --no-estimate-size do not estimate backup size in server side\n" +msgstr " --no-estimate-size 서버측 백업 크기를 예상하지 않음\n" + +#: pg_basebackup.c:413 +#, c-format +msgid " --no-manifest suppress generation of backup manifest\n" +msgstr " --no-manifest 백업 매니페스트 만들지 않음\n" + +#: pg_basebackup.c:414 #, c-format msgid "" " --no-slot prevent creation of temporary replication slot\n" msgstr " --no-slot 임시 복제 슬롯 만들지 않음\n" -#: pg_basebackup.c:356 +#: pg_basebackup.c:415 #, c-format msgid "" " --no-verify-checksums\n" @@ -325,12 +372,12 @@ msgstr "" " --no-verify-checksums\n" " 체크섬 검사 안함\n" -#: pg_basebackup.c:358 pg_receivewal.c:96 pg_recvlogical.c:101 +#: pg_basebackup.c:417 pg_receivewal.c:94 pg_recvlogical.c:98 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: pg_basebackup.c:359 pg_receivewal.c:97 pg_recvlogical.c:102 +#: pg_basebackup.c:418 pg_receivewal.c:95 pg_recvlogical.c:99 #, c-format msgid "" "\n" @@ -339,22 +386,22 @@ msgstr "" "\n" "연결 옵션들:\n" -#: pg_basebackup.c:360 pg_receivewal.c:98 +#: pg_basebackup.c:419 pg_receivewal.c:96 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=접속문자열 서버 접속 문자열\n" -#: pg_basebackup.c:361 pg_receivewal.c:99 pg_recvlogical.c:104 +#: pg_basebackup.c:420 pg_receivewal.c:97 pg_recvlogical.c:101 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=호스트이름 접속할 데이터베이스 서버나 소켓 디렉터리\n" -#: pg_basebackup.c:362 pg_receivewal.c:100 pg_recvlogical.c:105 +#: pg_basebackup.c:421 pg_receivewal.c:98 pg_recvlogical.c:102 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=포트 데이터베이스 서버 포트 번호\n" -#: pg_basebackup.c:363 +#: pg_basebackup.c:422 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -364,17 +411,17 @@ msgstr "" " -s, --status-interval=초\n" " 초 단위 매번 서버로 상태 패킷을 보냄\n" -#: pg_basebackup.c:365 pg_receivewal.c:101 pg_recvlogical.c:106 +#: pg_basebackup.c:424 pg_receivewal.c:99 pg_recvlogical.c:103 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=사용자 접속할 특정 데이터베이스 사용자\n" -#: pg_basebackup.c:366 pg_receivewal.c:102 pg_recvlogical.c:107 +#: pg_basebackup.c:425 pg_receivewal.c:100 pg_recvlogical.c:104 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password 비밀번호 물어 보지 않음\n" -#: pg_basebackup.c:367 pg_receivewal.c:103 pg_recvlogical.c:108 +#: pg_basebackup.c:426 pg_receivewal.c:101 pg_recvlogical.c:105 #, c-format msgid "" " -W, --password force password prompt (should happen " @@ -382,231 +429,230 @@ msgid "" msgstr "" " -W, --password 항상 비밀번호 프롬프트 보임 (자동으로 판단 함)\n" -#: pg_basebackup.c:368 pg_receivewal.c:107 pg_recvlogical.c:109 +#: pg_basebackup.c:427 pg_receivewal.c:105 pg_recvlogical.c:106 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"오류보고: .\n" +"문제점 보고 주소: <%s>\n" -#: pg_basebackup.c:411 +#: pg_basebackup.c:428 pg_receivewal.c:106 pg_recvlogical.c:107 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" + +#: pg_basebackup.c:471 #, c-format msgid "could not read from ready pipe: %m" msgstr "준비된 파이프로부터 읽기 실패: %m" -#: pg_basebackup.c:417 pg_basebackup.c:548 pg_basebackup.c:2098 +#: pg_basebackup.c:477 pg_basebackup.c:608 pg_basebackup.c:2133 #: streamutil.c:450 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "트랜잭션 로그 위치 \"%s\" 분석 실패" -#: pg_basebackup.c:513 pg_receivewal.c:442 +#: pg_basebackup.c:573 pg_receivewal.c:441 #, c-format msgid "could not finish writing WAL files: %m" msgstr "WAL 파일 쓰기 마무리 실패: %m" -#: pg_basebackup.c:560 +#: pg_basebackup.c:620 #, c-format msgid "could not create pipe for background process: %m" msgstr "백그라운드 프로세스를 위한 파이프 만들기 실패: %m" -#: pg_basebackup.c:595 +#: pg_basebackup.c:655 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "\"%s\" 임시 복제 슬롯을 만들 수 없음" -#: pg_basebackup.c:598 +#: pg_basebackup.c:658 #, c-format msgid "created replication slot \"%s\"" msgstr "\"%s\" 이름의 복제 슬롯을 만듦" -#: pg_basebackup.c:618 pg_basebackup.c:671 pg_basebackup.c:1507 +#: pg_basebackup.c:678 pg_basebackup.c:731 pg_basebackup.c:1620 #, c-format msgid "could not create directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 만들 수 없음: %m" -#: pg_basebackup.c:636 +#: pg_basebackup.c:696 #, c-format msgid "could not create background process: %m" msgstr "백그라운드 프로세스 만들기 실패: %m" -#: pg_basebackup.c:648 +#: pg_basebackup.c:708 #, c-format msgid "could not create background thread: %m" msgstr "백그라운드 스래드 만들기 실패: %m" -#: pg_basebackup.c:692 +#: pg_basebackup.c:752 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "\"%s\" 디렉터리가 있지만 비어 있지 않음" -#: pg_basebackup.c:699 +#: pg_basebackup.c:759 #, c-format msgid "could not access directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 액세스할 수 없습니다: %m" -#: pg_basebackup.c:760 +#: pg_basebackup.c:824 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s kB (100%%), %d/%d 테이블스페이스 %*s" -#: pg_basebackup.c:772 +#: pg_basebackup.c:836 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s kB (%d%%), %d/%d 테이블스페이스 (%s%-*.*s)" -#: pg_basebackup.c:788 +#: pg_basebackup.c:852 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s kB (%d%%), %d/%d 테이블스페이스" -#: pg_basebackup.c:812 +#: pg_basebackup.c:877 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "\"%s\" 전송 속도는 잘못된 값임" -#: pg_basebackup.c:817 +#: pg_basebackup.c:882 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "잘못된 전송 속도 \"%s\": %m" -#: pg_basebackup.c:826 +#: pg_basebackup.c:891 #, c-format msgid "transfer rate must be greater than zero" msgstr "전송 속도는 0보다 커야 함" -#: pg_basebackup.c:858 +#: pg_basebackup.c:923 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "잘못된 --max-rate 단위: \"%s\"" -#: pg_basebackup.c:865 +#: pg_basebackup.c:930 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "\"%s\" 전송 속도는 정수형 범위가 아님" -#: pg_basebackup.c:875 +#: pg_basebackup.c:940 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "\"%s\" 전송 속도는 범위 초과" -#: pg_basebackup.c:897 +#: pg_basebackup.c:961 +#, c-format +msgid "could not get COPY data stream: %s" +msgstr "COPY 데이터 스트림을 사용할 수 없음: %s" + +#: pg_basebackup.c:981 pg_recvlogical.c:435 pg_recvlogical.c:607 +#: receivelog.c:965 +#, c-format +msgid "could not read COPY data: %s" +msgstr "COPY 자료를 읽을 수 없음: %s" + +#: pg_basebackup.c:1007 #, c-format msgid "could not write to compressed file \"%s\": %s" msgstr "\"%s\" 압축 파일 쓰기 실패: %s" -#: pg_basebackup.c:907 pg_basebackup.c:1596 pg_basebackup.c:1766 +#: pg_basebackup.c:1071 #, c-format -msgid "could not write to file \"%s\": %m" -msgstr "\"%s\" 파일 쓰기 실패: %m" +msgid "could not duplicate stdout: %m" +msgstr "stdout을 중복할 수 없음: %m" -#: pg_basebackup.c:972 pg_basebackup.c:992 pg_basebackup.c:1019 +#: pg_basebackup.c:1078 +#, c-format +msgid "could not open output file: %m" +msgstr "출력파일을 열 수 없음: %m" + +#: pg_basebackup.c:1085 pg_basebackup.c:1106 pg_basebackup.c:1135 #, c-format msgid "could not set compression level %d: %s" msgstr "잘못된 압축 수위 %d: %s" -#: pg_basebackup.c:1039 +#: pg_basebackup.c:1155 #, c-format msgid "could not create compressed file \"%s\": %s" msgstr "\"%s\" 압축 파일 만들기 실패: %s" -#: pg_basebackup.c:1050 pg_basebackup.c:1557 pg_basebackup.c:1778 -#, c-format -msgid "could not create file \"%s\": %m" -msgstr "\"%s\" 파일을 만들 수 없음: %m" - -#: pg_basebackup.c:1061 pg_basebackup.c:1416 -#, c-format -msgid "could not get COPY data stream: %s" -msgstr "COPY 데이터 스트림을 사용할 수 없음: %s" - -#: pg_basebackup.c:1146 +#: pg_basebackup.c:1267 #, c-format msgid "could not close compressed file \"%s\": %s" msgstr "\"%s\" 압축 파일 닫기 실패: %s" -#: pg_basebackup.c:1158 pg_recvlogical.c:608 +#: pg_basebackup.c:1279 pg_recvlogical.c:632 #, c-format msgid "could not close file \"%s\": %m" msgstr "\"%s\" 파일을 닫을 수 없음: %m" -#: pg_basebackup.c:1169 pg_basebackup.c:1445 pg_recvlogical.c:437 -#: receivelog.c:968 +#: pg_basebackup.c:1541 #, c-format -msgid "could not read COPY data: %s" -msgstr "COPY 자료를 읽을 수 없음: %s" +msgid "COPY stream ended before last file was finished" +msgstr "마지막 파일을 끝내기 전에 COPY 스트림이 끝났음" -#: pg_basebackup.c:1459 +#: pg_basebackup.c:1570 #, c-format -msgid "invalid tar block header size: %d" -msgstr "잘못된 블럭 헤더 크기: %d" +msgid "invalid tar block header size: %zu" +msgstr "잘못된 tar 블럭 헤더 크기: %zu" -#: pg_basebackup.c:1514 +#: pg_basebackup.c:1627 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "\"%s\" 디렉터리 액세스 권한을 지정할 수 없음: %m" -#: pg_basebackup.c:1537 +#: pg_basebackup.c:1651 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "\"%s\" 파일을 \"%s\" 심볼릭 링크로 만들 수 없음: %m" -#: pg_basebackup.c:1544 +#: pg_basebackup.c:1658 #, c-format msgid "unrecognized link indicator \"%c\"" msgstr "알 수 없는 링크 지시자 \"%c\"" -#: pg_basebackup.c:1563 +#: pg_basebackup.c:1677 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "파일 \"%s\" 의 접근권한을 지정할 수 없음: %m" -#: pg_basebackup.c:1620 -#, c-format -msgid "COPY stream ended before last file was finished" -msgstr "마지막 파일을 끝내기 전에 COPY 스트림이 끝났음" - -#: pg_basebackup.c:1647 pg_basebackup.c:1667 pg_basebackup.c:1681 -#: pg_basebackup.c:1727 -#, c-format -msgid "out of memory" -msgstr "메모리 부족" - -#: pg_basebackup.c:1819 +#: pg_basebackup.c:1831 #, c-format msgid "incompatible server version %s" msgstr "호환하지 않는 서버 버전 %s" -#: pg_basebackup.c:1834 +#: pg_basebackup.c:1846 #, c-format msgid "HINT: use -X none or -X fetch to disable log streaming" msgstr "" "힌트: 트랜잭션 로그 스트리밍을 사용하지 않으려면 -X none 또는 -X fetch 옵션" "을 사용하세요." -#: pg_basebackup.c:1859 +#: pg_basebackup.c:1882 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "베이스 백업을 초기화 중, 체크포인트 완료를 기다리는 중" -#: pg_basebackup.c:1883 pg_recvlogical.c:264 receivelog.c:484 receivelog.c:533 -#: receivelog.c:572 streamutil.c:299 streamutil.c:370 streamutil.c:422 +#: pg_basebackup.c:1908 pg_recvlogical.c:262 receivelog.c:481 receivelog.c:530 +#: receivelog.c:569 streamutil.c:297 streamutil.c:370 streamutil.c:422 #: streamutil.c:533 streamutil.c:578 #, c-format msgid "could not send replication command \"%s\": %s" msgstr "\"%s\" 복제 명령을 보낼 수 없음: %s" -#: pg_basebackup.c:1894 +#: pg_basebackup.c:1919 #, c-format msgid "could not initiate base backup: %s" msgstr "베이스 백업을 초기화 할 수 없음: %s" -#: pg_basebackup.c:1900 +#: pg_basebackup.c:1925 #, c-format msgid "" "server returned unexpected response to BASE_BACKUP command; got %d rows and " @@ -615,119 +661,124 @@ msgstr "" "서버가 BASE_BACKUP 명령에 대해서 잘못된 응답을 했습니다; 응답값: %d 로우, %d " "필드, (기대값: %d 로우, %d 필드)" -#: pg_basebackup.c:1908 +#: pg_basebackup.c:1933 #, c-format msgid "checkpoint completed" msgstr "체크포인트 완료" -#: pg_basebackup.c:1923 +#: pg_basebackup.c:1948 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "트랙잭션 로그 시작 위치: %s, 타임라인: %u" -#: pg_basebackup.c:1932 +#: pg_basebackup.c:1957 #, c-format msgid "could not get backup header: %s" msgstr "백업 헤더를 구할 수 없음: %s" -#: pg_basebackup.c:1938 +#: pg_basebackup.c:1963 #, c-format msgid "no data returned from server" msgstr "서버가 아무런 자료도 주지 않았음" -#: pg_basebackup.c:1969 +#: pg_basebackup.c:1995 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "" "표준 출력으로는 하나의 테이블스페이스만 쓸 수 있음, 데이터베이스는 %d 개의 테" "이블 스페이스가 있음" -#: pg_basebackup.c:1981 +#: pg_basebackup.c:2007 #, c-format msgid "starting background WAL receiver" msgstr "백그라운드 WAL 수신자 시작 중" -#: pg_basebackup.c:2011 +#: pg_basebackup.c:2046 #, c-format msgid "could not get write-ahead log end position from server: %s" msgstr "서버에서 트랜잭션 로그 마지막 위치를 구할 수 없음: %s" -#: pg_basebackup.c:2017 +#: pg_basebackup.c:2052 #, c-format msgid "no write-ahead log end position returned from server" msgstr "서버에서 트랜잭션 로그 마지막 위치가 수신 되지 않았음" -#: pg_basebackup.c:2022 +#: pg_basebackup.c:2057 #, c-format msgid "write-ahead log end point: %s" msgstr "트랜잭션 로그 마지막 위치: %s" -#: pg_basebackup.c:2033 +#: pg_basebackup.c:2068 #, c-format msgid "checksum error occurred" msgstr "체크섬 오류 발생" -#: pg_basebackup.c:2038 +#: pg_basebackup.c:2073 #, c-format msgid "final receive failed: %s" msgstr "수신 작업 마무리 실패: %s" -#: pg_basebackup.c:2062 +#: pg_basebackup.c:2097 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "스트리밍을 끝내기 위해서 백그라운드 프로세스를 기다리는 중 ..." -#: pg_basebackup.c:2067 +#: pg_basebackup.c:2102 #, c-format msgid "could not send command to background pipe: %m" msgstr "백그라운드 파이프로 명령을 보낼 수 없음: %m" -#: pg_basebackup.c:2075 +#: pg_basebackup.c:2110 #, c-format msgid "could not wait for child process: %m" msgstr "하위 프로세스를 기다릴 수 없음: %m" -#: pg_basebackup.c:2080 +#: pg_basebackup.c:2115 #, c-format msgid "child %d died, expected %d" msgstr "%d 개의 하위 프로세스가 종료됨, 기대값 %d" -#: pg_basebackup.c:2085 streamutil.c:94 +#: pg_basebackup.c:2120 streamutil.c:92 #, c-format msgid "%s" msgstr "%s" -#: pg_basebackup.c:2110 +#: pg_basebackup.c:2145 #, c-format msgid "could not wait for child thread: %m" msgstr "하위 스레드를 기다릴 수 없음: %m" -#: pg_basebackup.c:2116 +#: pg_basebackup.c:2151 #, c-format msgid "could not get child thread exit status: %m" msgstr "하위 스레드 종료 상태가 정상적이지 않음: %m" -#: pg_basebackup.c:2121 +#: pg_basebackup.c:2156 #, c-format msgid "child thread exited with error %u" msgstr "하위 스레드가 비정상 종료됨: 오류 코드 %u" -#: pg_basebackup.c:2149 +#: pg_basebackup.c:2184 #, c-format msgid "syncing data to disk ..." msgstr "자료를 디스크에 동기화 하는 중 ... " -#: pg_basebackup.c:2162 +#: pg_basebackup.c:2209 +#, c-format +msgid "renaming backup_manifest.tmp to backup_manifest" +msgstr "backup_manifest.tmp 파일을 backup_manifest로 바꾸는 중" + +#: pg_basebackup.c:2220 #, c-format msgid "base backup completed" msgstr "베이스 백업 완료" -#: pg_basebackup.c:2243 +#: pg_basebackup.c:2305 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "\"%s\" 값은 잘못된 출력 형식, \"plain\" 또는 \"tar\" 만 사용 가능" -#: pg_basebackup.c:2287 +#: pg_basebackup.c:2349 #, c-format msgid "" "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" @@ -735,101 +786,118 @@ msgstr "" "\"%s\" 값은 잘못된 wal-method 옵션값, \"fetch\", \"stream\" 또는 \"none\"만 " "사용 가능" -#: pg_basebackup.c:2315 pg_receivewal.c:581 +#: pg_basebackup.c:2377 pg_receivewal.c:580 #, c-format msgid "invalid compression level \"%s\"" msgstr "잘못된 압축 수위 \"%s\"" -#: pg_basebackup.c:2326 +#: pg_basebackup.c:2388 #, c-format msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" msgstr "잘못된 체크포인트 옵션값 \"%s\", \"fast\" 또는 \"spread\"만 사용 가능" -#: pg_basebackup.c:2353 pg_receivewal.c:556 pg_recvlogical.c:796 +#: pg_basebackup.c:2415 pg_receivewal.c:555 pg_recvlogical.c:820 #, c-format msgid "invalid status interval \"%s\"" msgstr "잘못된 상태값 간격: \"%s\"" -#: pg_basebackup.c:2371 pg_basebackup.c:2384 pg_basebackup.c:2395 -#: pg_basebackup.c:2406 pg_basebackup.c:2414 pg_basebackup.c:2422 -#: pg_basebackup.c:2432 pg_basebackup.c:2445 pg_basebackup.c:2453 -#: pg_basebackup.c:2464 pg_basebackup.c:2474 pg_receivewal.c:606 -#: pg_receivewal.c:619 pg_receivewal.c:627 pg_receivewal.c:637 -#: pg_receivewal.c:645 pg_receivewal.c:656 pg_recvlogical.c:822 -#: pg_recvlogical.c:835 pg_recvlogical.c:846 pg_recvlogical.c:854 -#: pg_recvlogical.c:862 pg_recvlogical.c:870 pg_recvlogical.c:878 -#: pg_recvlogical.c:886 pg_recvlogical.c:894 +#: pg_basebackup.c:2445 pg_basebackup.c:2458 pg_basebackup.c:2469 +#: pg_basebackup.c:2480 pg_basebackup.c:2488 pg_basebackup.c:2496 +#: pg_basebackup.c:2506 pg_basebackup.c:2519 pg_basebackup.c:2527 +#: pg_basebackup.c:2538 pg_basebackup.c:2548 pg_basebackup.c:2565 +#: pg_basebackup.c:2573 pg_basebackup.c:2581 pg_receivewal.c:605 +#: pg_receivewal.c:618 pg_receivewal.c:626 pg_receivewal.c:636 +#: pg_receivewal.c:644 pg_receivewal.c:655 pg_recvlogical.c:846 +#: pg_recvlogical.c:859 pg_recvlogical.c:870 pg_recvlogical.c:878 +#: pg_recvlogical.c:886 pg_recvlogical.c:894 pg_recvlogical.c:902 +#: pg_recvlogical.c:910 pg_recvlogical.c:918 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "자제한 사항은 \"%s --help\" 명령으로 살펴보십시오.\n" -#: pg_basebackup.c:2382 pg_receivewal.c:617 pg_recvlogical.c:833 +#: pg_basebackup.c:2456 pg_receivewal.c:616 pg_recvlogical.c:857 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "너무 많은 명령행 인자를 지정했습니다. (처음 \"%s\")" -#: pg_basebackup.c:2394 pg_receivewal.c:655 +#: pg_basebackup.c:2468 pg_receivewal.c:654 #, c-format msgid "no target directory specified" msgstr "대상 디렉터리를 지정하지 않음" -#: pg_basebackup.c:2405 +#: pg_basebackup.c:2479 #, c-format msgid "only tar mode backups can be compressed" msgstr "tar 형식만 압축을 사용할 수 있음" -#: pg_basebackup.c:2413 +#: pg_basebackup.c:2487 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "tar 방식에서 stdout으로 트랜잭션 로그 스트리밍 불가" -#: pg_basebackup.c:2421 +#: pg_basebackup.c:2495 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "복제 슬롯은 WAL 스트리밍 방식에서만 사용할 수 있음" -#: pg_basebackup.c:2431 +#: pg_basebackup.c:2505 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "슬롯 이름을 지정한 경우 --no-slot 옵션을 사용할 수 없음" #. translator: second %s is an option name -#: pg_basebackup.c:2443 pg_receivewal.c:635 +#: pg_basebackup.c:2517 pg_receivewal.c:634 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "%s 옵션은 --slot 옵션을 함께 사용해야 함" -#: pg_basebackup.c:2452 +#: pg_basebackup.c:2526 #, c-format msgid "--create-slot and --no-slot are incompatible options" msgstr "--create-slot 옵션과 -no-slot 옵션은 함께 사용할 수 없음" -#: pg_basebackup.c:2463 +#: pg_basebackup.c:2537 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "트랜잭션 로그 디렉터리 위치는 plain 모드에서만 사용할 수 있음" -#: pg_basebackup.c:2473 +#: pg_basebackup.c:2547 #, c-format msgid "WAL directory location must be an absolute path" msgstr "트랜잭션 로그 디렉터리 위치는 절대 경로여야 함" -#: pg_basebackup.c:2483 pg_receivewal.c:664 +#: pg_basebackup.c:2557 pg_receivewal.c:663 #, c-format msgid "this build does not support compression" msgstr "이 버전은 압축 하는 기능을 포함 하지 않고 빌드 되었습니다." -#: pg_basebackup.c:2537 +#: pg_basebackup.c:2564 +#, c-format +msgid "--progress and --no-estimate-size are incompatible options" +msgstr "--progress 옵션과 --no-estimate-size 옵션은 함께 사용할 수 없음" + +#: pg_basebackup.c:2572 +#, c-format +msgid "--no-manifest and --manifest-checksums are incompatible options" +msgstr "--no-manifest 옵션과 --manifest-checksums 옵션은 함께 사용할 수 없음" + +#: pg_basebackup.c:2580 +#, c-format +msgid "--no-manifest and --manifest-force-encode are incompatible options" +msgstr "" +"--no-manifest 옵션과 --manifest-force-encode 옵션은 함께 사용할 수 없음" + +#: pg_basebackup.c:2639 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "\"%s\" 심벌릭 링크를 만들 수 없음: %m" -#: pg_basebackup.c:2541 +#: pg_basebackup.c:2643 #, c-format msgid "symlinks are not supported on this platform" msgstr "이 플랫폼에서는 심볼 링크가 지원되지 않음" -#: pg_receivewal.c:79 +#: pg_receivewal.c:77 #, c-format msgid "" "%s receives PostgreSQL streaming write-ahead logs.\n" @@ -838,7 +906,7 @@ msgstr "" "%s 프로그램은 PostgreSQL 스트리밍 트랜잭션 로그를 수신하는 도구입니다.\n" "\n" -#: pg_receivewal.c:83 pg_recvlogical.c:84 +#: pg_receivewal.c:81 pg_recvlogical.c:81 #, c-format msgid "" "\n" @@ -847,19 +915,19 @@ msgstr "" "\n" "옵션들:\n" -#: pg_receivewal.c:84 +#: pg_receivewal.c:82 #, c-format msgid "" " -D, --directory=DIR receive write-ahead log files into this directory\n" msgstr "" " -D, --directory=DIR 지정한 디렉터리로 트랜잭션 로그 파일을 백업함\n" -#: pg_receivewal.c:85 pg_recvlogical.c:85 +#: pg_receivewal.c:83 pg_recvlogical.c:82 #, c-format msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" msgstr " -E, --endpos=LSN 지정한 LSN까지 받고 종료함\n" -#: pg_receivewal.c:86 pg_recvlogical.c:89 +#: pg_receivewal.c:84 pg_recvlogical.c:86 #, c-format msgid "" " --if-not-exists do not error if slot already exists when creating a " @@ -867,19 +935,19 @@ msgid "" msgstr "" " --if-not-exists 슬롯을 새로 만들 때 이미 있어도 오류 내지 않음\n" -#: pg_receivewal.c:87 pg_recvlogical.c:91 +#: pg_receivewal.c:85 pg_recvlogical.c:88 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop 접속이 끊겼을 때 재연결 하지 않음\n" -#: pg_receivewal.c:88 +#: pg_receivewal.c:86 #, c-format msgid "" " --no-sync do not wait for changes to be written safely to " "disk\n" msgstr " --no-sync 디스크 쓰기 뒤 sync 작업 생략\n" -#: pg_receivewal.c:89 pg_recvlogical.c:96 +#: pg_receivewal.c:87 pg_recvlogical.c:93 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -890,18 +958,18 @@ msgstr "" " 지정한 초 간격으로 서버로 상태 패킷을 보냄 (초기값: " "%d)\n" -#: pg_receivewal.c:92 +#: pg_receivewal.c:90 #, c-format msgid "" " --synchronous flush write-ahead log immediately after writing\n" msgstr " --synchronous 쓰기 작업 후 즉시 트랜잭션 로그를 플러시 함\n" -#: pg_receivewal.c:95 +#: pg_receivewal.c:93 #, c-format msgid " -Z, --compress=0-9 compress logs with given compression level\n" msgstr " -Z, --compress=0-9 압축된 로그 파일의 압축 수위 지정\n" -#: pg_receivewal.c:104 +#: pg_receivewal.c:102 #, c-format msgid "" "\n" @@ -910,7 +978,7 @@ msgstr "" "\n" "추가 기능:\n" -#: pg_receivewal.c:105 pg_recvlogical.c:81 +#: pg_receivewal.c:103 pg_recvlogical.c:78 #, c-format msgid "" " --create-slot create a new replication slot (for the slot's name " @@ -919,7 +987,7 @@ msgstr "" " --create-slot 새 복제 슬롯을 만듬 (--slot 옵션에서 슬롯 이름 지" "정)\n" -#: pg_receivewal.c:106 pg_recvlogical.c:82 +#: pg_receivewal.c:104 pg_recvlogical.c:79 #, c-format msgid "" " --drop-slot drop the replication slot (for the slot's name see " @@ -927,115 +995,115 @@ msgid "" msgstr "" " --drop-slot 복제 슬롯 삭제 (--slot 옵션에서 슬롯 이름 지정)\n" -#: pg_receivewal.c:118 +#: pg_receivewal.c:117 #, c-format msgid "finished segment at %X/%X (timeline %u)" msgstr "마무리된 세그먼트 위치: %X/%X (타임라인 %u)" -#: pg_receivewal.c:125 +#: pg_receivewal.c:124 #, c-format msgid "stopped log streaming at %X/%X (timeline %u)" msgstr "로그 스트리밍 중지된 위치: %X/%X (타임라인 %u)" -#: pg_receivewal.c:141 +#: pg_receivewal.c:140 #, c-format msgid "switched to timeline %u at %X/%X" msgstr "전환됨: 타임라인 %u, 위치 %X/%X" -#: pg_receivewal.c:151 +#: pg_receivewal.c:150 #, c-format msgid "received interrupt signal, exiting" msgstr "인터럽터 시그널을 받음, 종료함" -#: pg_receivewal.c:187 +#: pg_receivewal.c:186 #, c-format msgid "could not close directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 닫을 수 없음: %m" -#: pg_receivewal.c:273 +#: pg_receivewal.c:272 #, c-format msgid "segment file \"%s\" has incorrect size %d, skipping" msgstr "\"%s\" 조각 파일은 잘못된 크기임: %d, 무시함" -#: pg_receivewal.c:291 +#: pg_receivewal.c:290 #, c-format msgid "could not open compressed file \"%s\": %m" msgstr "\"%s\" 압축 파일 열기 실패: %m" -#: pg_receivewal.c:297 +#: pg_receivewal.c:296 #, c-format msgid "could not seek in compressed file \"%s\": %m" msgstr "\"%s\" 압축 파일 작업 위치 찾기 실패: %m" -#: pg_receivewal.c:305 +#: pg_receivewal.c:304 #, c-format msgid "could not read compressed file \"%s\": %m" msgstr "\"%s\" 압축 파일 읽기 실패: %m" -#: pg_receivewal.c:308 +#: pg_receivewal.c:307 #, c-format msgid "could not read compressed file \"%s\": read %d of %zu" msgstr "\"%s\" 압축 파일을 읽을 수 없음: %d 읽음, 전체 %zu" -#: pg_receivewal.c:319 +#: pg_receivewal.c:318 #, c-format msgid "" "compressed segment file \"%s\" has incorrect uncompressed size %d, skipping" msgstr "\"%s\" 압축 파일은 압축 풀었을 때 잘못된 크기임: %d, 무시함" -#: pg_receivewal.c:423 +#: pg_receivewal.c:422 #, c-format msgid "starting log streaming at %X/%X (timeline %u)" msgstr "로그 스트리밍 시작 위치: %X/%X (타임라인 %u)" -#: pg_receivewal.c:538 pg_recvlogical.c:738 +#: pg_receivewal.c:537 pg_recvlogical.c:762 #, c-format msgid "invalid port number \"%s\"" msgstr "잘못된 포트 번호: \"%s\"" -#: pg_receivewal.c:566 pg_recvlogical.c:764 +#: pg_receivewal.c:565 pg_recvlogical.c:788 #, c-format msgid "could not parse end position \"%s\"" msgstr "시작 위치 구문이 잘못됨 \"%s\"" -#: pg_receivewal.c:626 +#: pg_receivewal.c:625 #, c-format msgid "cannot use --create-slot together with --drop-slot" msgstr "--create-slot 옵션과 --drop-slot 옵션을 함께 사용할 수 없음" -#: pg_receivewal.c:644 +#: pg_receivewal.c:643 #, c-format msgid "cannot use --synchronous together with --no-sync" msgstr "--synchronous 옵션과 --no-sync 옵션을 함께 사용할 수 없음" -#: pg_receivewal.c:720 +#: pg_receivewal.c:719 #, c-format msgid "" "replication connection using slot \"%s\" is unexpectedly database specific" msgstr "\"%s\" 슬롯을 이용한 복제 연결은 이 데이터베이스에서 사용할 수 없음" -#: pg_receivewal.c:731 pg_recvlogical.c:942 +#: pg_receivewal.c:730 pg_recvlogical.c:966 #, c-format msgid "dropping replication slot \"%s\"" msgstr "\"%s\" 이름의 복제 슬롯을 삭제 중" -#: pg_receivewal.c:742 pg_recvlogical.c:952 +#: pg_receivewal.c:741 pg_recvlogical.c:976 #, c-format msgid "creating replication slot \"%s\"" msgstr "\"%s\" 이름의 복제 슬롯을 만드는 중" -#: pg_receivewal.c:768 pg_recvlogical.c:977 +#: pg_receivewal.c:767 pg_recvlogical.c:1001 #, c-format msgid "disconnected" msgstr "연결 끊김" #. translator: check source for value for %d -#: pg_receivewal.c:774 pg_recvlogical.c:983 +#: pg_receivewal.c:773 pg_recvlogical.c:1007 #, c-format msgid "disconnected; waiting %d seconds to try again" msgstr "연결 끊김; 다시 연결 하기 위해 %d 초를 기다리는 중" -#: pg_recvlogical.c:76 +#: pg_recvlogical.c:73 #, c-format msgid "" "%s controls PostgreSQL logical decoding streams.\n" @@ -1044,7 +1112,7 @@ msgstr "" "%s 프로그램은 논리 디코딩 스트림을 제어하는 도구입니다.\n" "\n" -#: pg_recvlogical.c:80 +#: pg_recvlogical.c:77 #, c-format msgid "" "\n" @@ -1053,7 +1121,7 @@ msgstr "" "\n" "성능에 관계된 기능들:\n" -#: pg_recvlogical.c:83 +#: pg_recvlogical.c:80 #, c-format msgid "" " --start start streaming in a replication slot (for the " @@ -1062,12 +1130,12 @@ msgstr "" " --start 복제 슬롯을 이용한 스트리밍 시작 (--slot 옵션에서 슬" "롯 이름 지정)\n" -#: pg_recvlogical.c:86 +#: pg_recvlogical.c:83 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr " -f, --file=파일 작업 로그를 해당 파일에 기록, 표준 출력은 -\n" -#: pg_recvlogical.c:87 +#: pg_recvlogical.c:84 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -1078,14 +1146,14 @@ msgstr "" " 지정한 초 간격으로 파일 fsync 작업을 함 (초기값: " "%d)\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:87 #, c-format msgid "" " -I, --startpos=LSN where in an existing slot should the streaming " "start\n" msgstr " -I, --startpos=LSN 스트리밍을 시작할 기존 슬롯 위치\n" -#: pg_recvlogical.c:92 +#: pg_recvlogical.c:89 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -1096,206 +1164,206 @@ msgstr "" " 출력 플러그인에서 사용할 옵션들의 옵션 이름과 그 " "값\n" -#: pg_recvlogical.c:95 +#: pg_recvlogical.c:92 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=PLUGIN 사용할 출력 플러그인 (초기값: %s)\n" -#: pg_recvlogical.c:98 +#: pg_recvlogical.c:95 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=슬롯이름 논리 복제 슬롯 이름\n" -#: pg_recvlogical.c:103 +#: pg_recvlogical.c:100 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=디비이름 접속할 데이터베이스\n" -#: pg_recvlogical.c:135 +#: pg_recvlogical.c:133 #, c-format msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "쓰기 확인 위치: %X/%X, 플러시 위치 %X/%X (슬롯 %s)" -#: pg_recvlogical.c:159 receivelog.c:346 +#: pg_recvlogical.c:157 receivelog.c:343 #, c-format msgid "could not send feedback packet: %s" msgstr "피드백 패킷을 보낼 수 없음: %s" -#: pg_recvlogical.c:232 +#: pg_recvlogical.c:230 #, c-format msgid "starting log streaming at %X/%X (slot %s)" msgstr "로그 스트리밍 시작 함, 위치: %X/%X (슬롯 %s)" -#: pg_recvlogical.c:273 +#: pg_recvlogical.c:271 #, c-format msgid "streaming initiated" msgstr "스트리밍 초기화 됨" -#: pg_recvlogical.c:337 +#: pg_recvlogical.c:335 #, c-format msgid "could not open log file \"%s\": %m" msgstr "\"%s\" 잠금파일을 열 수 없음: %m" -#: pg_recvlogical.c:363 receivelog.c:876 +#: pg_recvlogical.c:361 receivelog.c:873 #, c-format msgid "invalid socket: %s" msgstr "잘못된 소켓: %s" -#: pg_recvlogical.c:416 receivelog.c:904 +#: pg_recvlogical.c:414 receivelog.c:901 #, c-format msgid "select() failed: %m" msgstr "select() 실패: %m" -#: pg_recvlogical.c:423 receivelog.c:954 +#: pg_recvlogical.c:421 receivelog.c:951 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "WAL 스트림에서 자료 받기 실패: %s" -#: pg_recvlogical.c:465 pg_recvlogical.c:516 receivelog.c:998 receivelog.c:1064 +#: pg_recvlogical.c:463 pg_recvlogical.c:514 receivelog.c:995 receivelog.c:1061 #, c-format msgid "streaming header too small: %d" msgstr "스트리밍 헤더 크기가 너무 작음: %d" -#: pg_recvlogical.c:500 receivelog.c:836 +#: pg_recvlogical.c:498 receivelog.c:833 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "알 수 없는 스트리밍 헤더: \"%c\"" -#: pg_recvlogical.c:554 pg_recvlogical.c:566 +#: pg_recvlogical.c:552 pg_recvlogical.c:564 #, c-format msgid "could not write %u bytes to log file \"%s\": %m" msgstr "%u 바이트 쓰기 실패, 로그파일 \"%s\": %m" -#: pg_recvlogical.c:594 receivelog.c:632 receivelog.c:669 +#: pg_recvlogical.c:618 receivelog.c:629 receivelog.c:666 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "복제 스트림의 예상치 못한 종료: %s" -#: pg_recvlogical.c:718 +#: pg_recvlogical.c:742 #, c-format msgid "invalid fsync interval \"%s\"" msgstr "\"%s\" 값은 잘못된 fsync 반복주기 임" -#: pg_recvlogical.c:756 +#: pg_recvlogical.c:780 #, c-format msgid "could not parse start position \"%s\"" msgstr "시작 위치 구문이 잘못됨 \"%s\"" -#: pg_recvlogical.c:845 +#: pg_recvlogical.c:869 #, c-format msgid "no slot specified" msgstr "슬롯을 지정하지 않았음" -#: pg_recvlogical.c:853 +#: pg_recvlogical.c:877 #, c-format msgid "no target file specified" msgstr "대상 파일을 지정하지 않았음" -#: pg_recvlogical.c:861 +#: pg_recvlogical.c:885 #, c-format msgid "no database specified" msgstr "데이터베이스 지정하지 않았음" -#: pg_recvlogical.c:869 +#: pg_recvlogical.c:893 #, c-format msgid "at least one action needs to be specified" msgstr "적어도 하나 이상의 작업 방법을 지정해야 함" -#: pg_recvlogical.c:877 +#: pg_recvlogical.c:901 #, c-format msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "" "--create-slot 옵션 또는 --start 옵션은 --drop-slot 옵션과 함께 사용할 수 없음" -#: pg_recvlogical.c:885 +#: pg_recvlogical.c:909 #, c-format msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "" " --create-slot 옵션이나 --drop-slot 옵션은 --startpos 옵션과 함께 쓸 수 없음" -#: pg_recvlogical.c:893 +#: pg_recvlogical.c:917 #, c-format msgid "--endpos may only be specified with --start" msgstr "--endpos 옵션은 --start 옵션과 함께 사용해야 함" -#: pg_recvlogical.c:924 +#: pg_recvlogical.c:948 #, c-format msgid "could not establish database-specific replication connection" msgstr "데이터베이스 의존적인 복제 연결을 할 수 없음" -#: pg_recvlogical.c:1023 +#: pg_recvlogical.c:1047 #, c-format msgid "end position %X/%X reached by keepalive" msgstr "keepalive에 의해서 %X/%X 마지막 위치에 도달했음" -#: pg_recvlogical.c:1026 +#: pg_recvlogical.c:1050 #, c-format msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "%X/%X 마지막 위치가 WAL 레코드 %X/%X 위치에서 도달했음" -#: receivelog.c:72 +#: receivelog.c:69 #, c-format msgid "could not create archive status file \"%s\": %s" msgstr "\"%s\" archive status 파일을 만들 수 없습니다: %s" -#: receivelog.c:119 +#: receivelog.c:116 #, c-format msgid "could not get size of write-ahead log file \"%s\": %s" msgstr "\"%s\" WAL 파일 크기를 알 수 없음: %s" -#: receivelog.c:129 +#: receivelog.c:126 #, c-format msgid "could not open existing write-ahead log file \"%s\": %s" msgstr "이미 있는 \"%s\" 트랜잭션 로그 파일을 열 수 없음: %s" -#: receivelog.c:137 +#: receivelog.c:134 #, c-format msgid "could not fsync existing write-ahead log file \"%s\": %s" msgstr "이미 있는 \"%s\" WAL 파일 fsync 실패: %s" -#: receivelog.c:151 +#: receivelog.c:148 #, c-format msgid "write-ahead log file \"%s\" has %d byte, should be 0 or %d" msgid_plural "write-ahead log file \"%s\" has %d bytes, should be 0 or %d" msgstr[0] "" "\"%s\" 트랜잭션 로그파일의 크기가 %d 바이트임, 0 또는 %d 바이트여야 함" -#: receivelog.c:166 +#: receivelog.c:163 #, c-format msgid "could not open write-ahead log file \"%s\": %s" msgstr "\"%s\" WAL 파일을 열 수 없음: %s" -#: receivelog.c:192 +#: receivelog.c:189 #, c-format msgid "could not determine seek position in file \"%s\": %s" msgstr "\"%s\" 파일의 시작 위치를 결정할 수 없음: %s" -#: receivelog.c:206 +#: receivelog.c:203 #, c-format msgid "not renaming \"%s%s\", segment is not complete" msgstr "\"%s%s\" 이름 변경 실패, 세그먼트가 완료되지 않았음" -#: receivelog.c:218 receivelog.c:303 receivelog.c:678 +#: receivelog.c:215 receivelog.c:300 receivelog.c:675 #, c-format msgid "could not close file \"%s\": %s" msgstr "\"%s\" 파일을 닫을 수 없음: %s" -#: receivelog.c:275 +#: receivelog.c:272 #, c-format msgid "server reported unexpected history file name for timeline %u: %s" msgstr "타임라인 %u 번을 위한 내역 파일 이름이 잘못 되었음: %s" -#: receivelog.c:283 +#: receivelog.c:280 #, c-format msgid "could not create timeline history file \"%s\": %s" msgstr "\"%s\" 타임라인 내역 파일을 만들 수 없음: %s" -#: receivelog.c:290 +#: receivelog.c:287 #, c-format msgid "could not write timeline history file \"%s\": %s" msgstr "\"%s\" 타임라인 내역 파일에 쓸 수 없음: %s" -#: receivelog.c:380 +#: receivelog.c:377 #, c-format msgid "" "incompatible server version %s; client does not support streaming from " @@ -1304,7 +1372,7 @@ msgstr "" "%s 서버 버전은 호환되지 않음; 클라이언트는 %s 버전 보다 오래된 서버의 스트리" "밍은 지원하지 않음" -#: receivelog.c:389 +#: receivelog.c:386 #, c-format msgid "" "incompatible server version %s; client does not support streaming from " @@ -1313,7 +1381,7 @@ msgstr "" "%s 서버 버전은 호환되지 않음; 클라이언트는 %s 버전 보다 새로운 서버의 스트리" "밍은 지원하지 않음" -#: receivelog.c:491 streamutil.c:430 streamutil.c:467 +#: receivelog.c:488 streamutil.c:430 streamutil.c:467 #, c-format msgid "" "could not identify system: got %d rows and %d fields, expected %d rows and " @@ -1322,18 +1390,18 @@ msgstr "" "시스템을 식별할 수 없음: 로우수 %d, 필드수 %d, 예상값: 로우수 %d, 필드수 %d " "이상" -#: receivelog.c:498 +#: receivelog.c:495 #, c-format msgid "" "system identifier does not match between base backup and streaming connection" msgstr "시스템 식별자가 베이스 백업과 스트리밍 연결에서 서로 다름" -#: receivelog.c:504 +#: receivelog.c:501 #, c-format msgid "starting timeline %u is not present in the server" msgstr "%u 타임라인으로 시작하는 것을 서버에서 제공 하지 않음" -#: receivelog.c:545 +#: receivelog.c:542 #, c-format msgid "" "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, " @@ -1342,12 +1410,12 @@ msgstr "" "TIMELINE_HISTORY 명령 결과가 잘못됨: 받은 값: 로우수 %d, 필드수 %d, 예상값: " "로우수 %d, 필드수 %d" -#: receivelog.c:616 +#: receivelog.c:613 #, c-format msgid "server reported unexpected next timeline %u, following timeline %u" msgstr "서버가 잘못된 다음 타임라인 번호 %u 보고함, 이전 타임라인 번호 %u" -#: receivelog.c:622 +#: receivelog.c:619 #, c-format msgid "" "server stopped streaming timeline %u at %X/%X, but reported next timeline %u " @@ -1356,12 +1424,12 @@ msgstr "" "서버의 중지 위치: 타임라인 %u, 위치 %X/%X, 하지만 보고 받은 위치: 타임라인 " "%u 위치 %X/%X" -#: receivelog.c:662 +#: receivelog.c:659 #, c-format msgid "replication stream was terminated before stop point" msgstr "복제 스트림이 중지 위치 전에 종료 되었음" -#: receivelog.c:708 +#: receivelog.c:705 #, c-format msgid "" "unexpected result set after end-of-timeline: got %d rows and %d fields, " @@ -1370,66 +1438,66 @@ msgstr "" "타임라인 끝에 잘못된 결과가 발견 됨: 로우수 %d, 필드수 %d / 예상값: 로우수 " "%d, 필드수 %d" -#: receivelog.c:717 +#: receivelog.c:714 #, c-format msgid "could not parse next timeline's starting point \"%s\"" msgstr "다음 타임라인 시작 위치 분석 실패 \"%s\"" -#: receivelog.c:766 receivelog.c:1018 +#: receivelog.c:763 receivelog.c:1015 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "\"%s\" 파일 fsync 실패: %s" -#: receivelog.c:1081 +#: receivelog.c:1078 #, c-format msgid "received write-ahead log record for offset %u with no file open" msgstr "%u 위치의 수신된 트랜잭션 로그 레코드에 파일을 열 수 없음" -#: receivelog.c:1091 +#: receivelog.c:1088 #, c-format msgid "got WAL data offset %08x, expected %08x" msgstr "잘못된 WAL 자료 위치 %08x, 기대값 %08x" -#: receivelog.c:1125 +#: receivelog.c:1122 #, c-format msgid "could not write %u bytes to WAL file \"%s\": %s" msgstr "%u 바이트를 \"%s\" WAL 파일에 쓸 수 없음: %s" -#: receivelog.c:1150 receivelog.c:1190 receivelog.c:1221 +#: receivelog.c:1147 receivelog.c:1187 receivelog.c:1218 #, c-format msgid "could not send copy-end packet: %s" msgstr "copy-end 패킷을 보낼 수 없음: %s" -#: streamutil.c:162 +#: streamutil.c:160 msgid "Password: " msgstr "암호: " -#: streamutil.c:187 +#: streamutil.c:185 #, c-format msgid "could not connect to server" msgstr "서버 접속 실패" -#: streamutil.c:204 +#: streamutil.c:202 #, c-format msgid "could not connect to server: %s" msgstr "서버 접속 실패: %s" -#: streamutil.c:233 +#: streamutil.c:231 #, c-format msgid "could not clear search_path: %s" msgstr "search_path를 지울 수 없음: %s" -#: streamutil.c:249 +#: streamutil.c:247 #, c-format msgid "could not determine server setting for integer_datetimes" msgstr "integer_datetimes 서버 설정을 알 수 없음" -#: streamutil.c:256 +#: streamutil.c:254 #, c-format msgid "integer_datetimes compile flag does not match server" msgstr "integer_datetimes 컴파일 플래그가 서버와 일치하지 않음" -#: streamutil.c:307 +#: streamutil.c:305 #, c-format msgid "" "could not fetch WAL segment size: got %d rows and %d fields, expected %d " @@ -1438,11 +1506,23 @@ msgstr "" "WAL 조각 크기 계산 실패: 로우수 %d, 필드수 %d, 예상값: 로우수 %d, 필드수 %d " "이상" -#: streamutil.c:317 +#: streamutil.c:315 #, c-format msgid "WAL segment size could not be parsed" msgstr "WAL 조각 크기 분석 못함" +#: streamutil.c:333 +#, c-format +msgid "" +"WAL segment size must be a power of two between 1 MB and 1 GB, but the " +"remote server reported a value of %d byte" +msgid_plural "" +"WAL segment size must be a power of two between 1 MB and 1 GB, but the " +"remote server reported a value of %d bytes" +msgstr[0] "" +"WAL 조각 파일 크기는 1MB에서 1GB사이 2의 제곱 크기여야 하는데, " +"원격 서버는 %d 바이트입니다." + #: streamutil.c:378 #, c-format msgid "" @@ -1475,34 +1555,34 @@ msgstr "" "\"%s\" 복제 슬롯을 삭제할 수 없음: 로우수 %d, 필드수 %d, 기대값 로우수 %d, 필" "드수 %d" -#: walmethods.c:439 walmethods.c:928 +#: walmethods.c:438 walmethods.c:927 msgid "could not compress data" msgstr "자료를 압축할 수 없음" -#: walmethods.c:471 +#: walmethods.c:470 msgid "could not reset compression stream" msgstr "압축 스트림을 리셋할 수 없음" -#: walmethods.c:569 +#: walmethods.c:568 msgid "could not initialize compression library" msgstr "압축 라이브러리를 초기화할 수 없음" -#: walmethods.c:581 +#: walmethods.c:580 msgid "implementation error: tar files can't have more than one open file" msgstr "구현 오류: tar 파일은 하나 이상 열 수 없음" -#: walmethods.c:595 +#: walmethods.c:594 msgid "could not create tar header" msgstr "tar 해더를 만들 수 없음" -#: walmethods.c:609 walmethods.c:649 walmethods.c:844 walmethods.c:855 +#: walmethods.c:608 walmethods.c:648 walmethods.c:843 walmethods.c:854 msgid "could not change compression parameters" msgstr "압축 매개 변수를 바꿀 수 없음" -#: walmethods.c:731 +#: walmethods.c:730 msgid "unlink not supported with compression" msgstr "압축 상태에서 파일 삭제는 지원하지 않음" -#: walmethods.c:953 +#: walmethods.c:952 msgid "could not close compression stream" msgstr "압축 스트림을 닫을 수 없음" diff --git a/src/bin/pg_basebackup/po/ru.po b/src/bin/pg_basebackup/po/ru.po index ad30940734a6a..05722aed848d2 100644 --- a/src/bin/pg_basebackup/po/ru.po +++ b/src/bin/pg_basebackup/po/ru.po @@ -1,13 +1,13 @@ # Russian message translation file for pg_basebackup # Copyright (C) 2012-2016 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2012-2017, 2018, 2019. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: pg_basebackup (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-09 12:21+0300\n" -"PO-Revision-Date: 2019-09-02 12:28+0300\n" +"POT-Creation-Date: 2020-11-09 07:34+0300\n" +"PO-Revision-Date: 2020-09-03 17:44+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -17,152 +17,171 @@ msgstr "" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "важно: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "ошибка: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "предупреждение: " #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" -#: ../../common/file_utils.c:81 ../../common/file_utils.c:183 -#: pg_receivewal.c:267 pg_recvlogical.c:342 +#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 +#: pg_receivewal.c:266 pg_recvlogical.c:340 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не удалось получить информацию о файле \"%s\": %m" -#: ../../common/file_utils.c:160 pg_receivewal.c:170 +#: ../../common/file_utils.c:158 pg_receivewal.c:169 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не удалось открыть каталог \"%s\": %m" -#: ../../common/file_utils.c:194 pg_receivewal.c:338 +#: ../../common/file_utils.c:192 pg_receivewal.c:337 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не удалось прочитать каталог \"%s\": %m" -#: ../../common/file_utils.c:226 ../../common/file_utils.c:285 -#: ../../common/file_utils.c:359 pg_basebackup.c:1760 +#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 +#: ../../common/file_utils.c:357 ../../fe_utils/recovery_gen.c:134 #, c-format msgid "could not open file \"%s\": %m" msgstr "не удалось открыть файл \"%s\": %m" -#: ../../common/file_utils.c:297 ../../common/file_utils.c:367 -#: pg_recvlogical.c:195 +#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 +#: pg_recvlogical.c:193 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" -#: ../../common/file_utils.c:377 +#: ../../common/file_utils.c:375 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "не удалось переименовать файл \"%s\" в \"%s\": %m" -#: pg_basebackup.c:171 +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 pg_basebackup.c:1248 +#, c-format +msgid "out of memory" +msgstr "нехватка памяти" + +#: ../../fe_utils/recovery_gen.c:140 pg_basebackup.c:1021 pg_basebackup.c:1714 +#: pg_basebackup.c:1770 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "не удалось записать файл \"%s\": %m" + +#: ../../fe_utils/recovery_gen.c:152 pg_basebackup.c:1166 pg_basebackup.c:1671 +#: pg_basebackup.c:1747 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "не удалось создать файл \"%s\": %m" + +#: pg_basebackup.c:224 #, c-format msgid "removing data directory \"%s\"" msgstr "удаление каталога данных \"%s\"" -#: pg_basebackup.c:173 +#: pg_basebackup.c:226 #, c-format msgid "failed to remove data directory" msgstr "ошибка при удалении каталога данных" -#: pg_basebackup.c:177 +#: pg_basebackup.c:230 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "удаление содержимого каталога данных \"%s\"" -#: pg_basebackup.c:179 +#: pg_basebackup.c:232 #, c-format msgid "failed to remove contents of data directory" msgstr "ошибка при удалении содержимого каталога данных" -#: pg_basebackup.c:184 +#: pg_basebackup.c:237 #, c-format msgid "removing WAL directory \"%s\"" msgstr "удаление каталога WAL \"%s\"" -#: pg_basebackup.c:186 +#: pg_basebackup.c:239 #, c-format msgid "failed to remove WAL directory" msgstr "ошибка при удалении каталога WAL" -#: pg_basebackup.c:190 +#: pg_basebackup.c:243 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "удаление содержимого каталога WAL \"%s\"" -#: pg_basebackup.c:192 +#: pg_basebackup.c:245 #, c-format msgid "failed to remove contents of WAL directory" msgstr "ошибка при удалении содержимого каталога WAL" -#: pg_basebackup.c:198 +#: pg_basebackup.c:251 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "каталог данных \"%s\" не был удалён по запросу пользователя" -#: pg_basebackup.c:201 +#: pg_basebackup.c:254 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "каталог WAL \"%s\" не был удалён по запросу пользователя" -#: pg_basebackup.c:205 +#: pg_basebackup.c:258 #, c-format msgid "changes to tablespace directories will not be undone" msgstr "изменения в каталогах табличных пространств не будут отменены" -#: pg_basebackup.c:246 +#: pg_basebackup.c:299 #, c-format msgid "directory name too long" msgstr "слишком длинное имя каталога" -#: pg_basebackup.c:256 +#: pg_basebackup.c:309 #, c-format msgid "multiple \"=\" signs in tablespace mapping" msgstr "несколько знаков \"=\" в сопоставлении табличного пространства" -#: pg_basebackup.c:268 +#: pg_basebackup.c:321 #, c-format msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" msgstr "" "сопоставление табл. пространства записано неверно: \"%s\"; должно быть " "\"СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ\"" -#: pg_basebackup.c:280 +#: pg_basebackup.c:333 #, c-format msgid "old directory is not an absolute path in tablespace mapping: %s" msgstr "" "старый каталог в сопоставлении табл. пространства задан не абсолютным путём: " "%s" -#: pg_basebackup.c:287 +#: pg_basebackup.c:340 #, c-format msgid "new directory is not an absolute path in tablespace mapping: %s" msgstr "" "новый каталог в сопоставлении табл. пространства задан не абсолютным путём: " "%s" -#: pg_basebackup.c:326 +#: pg_basebackup.c:379 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -171,17 +190,17 @@ msgstr "" "%s делает базовую резервную копию работающего сервера PostgreSQL.\n" "\n" -#: pg_basebackup.c:328 pg_receivewal.c:81 pg_recvlogical.c:78 +#: pg_basebackup.c:381 pg_receivewal.c:79 pg_recvlogical.c:75 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_basebackup.c:329 pg_receivewal.c:82 pg_recvlogical.c:79 +#: pg_basebackup.c:382 pg_receivewal.c:80 pg_recvlogical.c:76 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [ПАРАМЕТР]...\n" -#: pg_basebackup.c:330 +#: pg_basebackup.c:383 #, c-format msgid "" "\n" @@ -190,19 +209,19 @@ msgstr "" "\n" "Параметры, управляющие выводом:\n" -#: pg_basebackup.c:331 +#: pg_basebackup.c:384 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=КАТАЛОГ сохранить базовую копию в указанный каталог\n" -#: pg_basebackup.c:332 +#: pg_basebackup.c:385 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr "" " -F, --format=p|t формат вывода (p (по умолчанию) - простой, t - " "tar)\n" -#: pg_basebackup.c:333 +#: pg_basebackup.c:386 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -211,7 +230,7 @@ msgstr "" " -r, --max-rate=СКОРОСТЬ макс. скорость передачи данных в целевой каталог\n" " (в КБ/с, либо добавьте суффикс \"k\" или \"M\")\n" -#: pg_basebackup.c:335 +#: pg_basebackup.c:388 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -220,7 +239,7 @@ msgstr "" " -R, --write-recovery-conf\n" " записать конфигурацию для репликации\n" -#: pg_basebackup.c:337 +#: pg_basebackup.c:390 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -231,14 +250,14 @@ msgstr "" "каталога\n" " в новый\n" -#: pg_basebackup.c:339 +#: pg_basebackup.c:392 #, c-format msgid " --waldir=WALDIR location for the write-ahead log directory\n" msgstr "" " --waldir=КАТАЛОГ_WAL\n" " расположение каталога с журналом предзаписи\n" -#: pg_basebackup.c:340 +#: pg_basebackup.c:393 #, c-format msgid "" " -X, --wal-method=none|fetch|stream\n" @@ -248,18 +267,18 @@ msgstr "" " включить в копию требуемые файлы WAL, используя\n" " заданный метод\n" -#: pg_basebackup.c:342 +#: pg_basebackup.c:395 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip сжать выходной tar\n" -#: pg_basebackup.c:343 +#: pg_basebackup.c:396 #, c-format msgid "" " -Z, --compress=0-9 compress tar output with given compression level\n" msgstr " -Z, --compress=0-9 установить уровень сжатия выходного архива\n" -#: pg_basebackup.c:344 +#: pg_basebackup.c:397 #, c-format msgid "" "\n" @@ -268,7 +287,7 @@ msgstr "" "\n" "Общие параметры:\n" -#: pg_basebackup.c:345 +#: pg_basebackup.c:398 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" @@ -277,22 +296,22 @@ msgstr "" " -c, --checkpoint=fast|spread\n" " режим быстрых или распределённых контрольных точек\n" -#: pg_basebackup.c:347 +#: pg_basebackup.c:400 #, c-format msgid " -C, --create-slot create replication slot\n" msgstr " -C, --create-slot создать слот репликации\n" -#: pg_basebackup.c:348 +#: pg_basebackup.c:401 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=МЕТКА установить метку резервной копии\n" -#: pg_basebackup.c:349 +#: pg_basebackup.c:402 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean не очищать после ошибок\n" -#: pg_basebackup.c:350 +#: pg_basebackup.c:403 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written safely to " @@ -300,34 +319,66 @@ msgid "" msgstr "" " -N, --no-sync не ждать завершения сохранения данных на диске\n" -#: pg_basebackup.c:351 +#: pg_basebackup.c:404 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress показывать прогресс операции\n" -#: pg_basebackup.c:352 pg_receivewal.c:91 +#: pg_basebackup.c:405 pg_receivewal.c:89 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=ИМЯ_СЛОТА использовать заданный слот репликации\n" -#: pg_basebackup.c:353 pg_receivewal.c:93 pg_recvlogical.c:99 +#: pg_basebackup.c:406 pg_receivewal.c:91 pg_recvlogical.c:96 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose выводить подробные сообщения\n" -#: pg_basebackup.c:354 pg_receivewal.c:94 pg_recvlogical.c:100 +#: pg_basebackup.c:407 pg_receivewal.c:92 pg_recvlogical.c:97 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_basebackup.c:355 +#: pg_basebackup.c:408 +#, c-format +msgid "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" use algorithm for manifest checksums\n" +msgstr "" +" --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" алгоритм подсчёта контрольных сумм в манифесте\n" + +# skip-rule: capital-letter-first +# well-spelled: шестнадц +#: pg_basebackup.c:410 +#, c-format +msgid "" +" --manifest-force-encode\n" +" hex encode all file names in manifest\n" +msgstr "" +" --manifest-force-encode\n" +" записывать все имена файлов в манифесте в шестнадц. " +"виде\n" + +#: pg_basebackup.c:412 +#, c-format +msgid " --no-estimate-size do not estimate backup size in server side\n" +msgstr "" +" --no-estimate-size не рассчитывать размер копии на стороне сервера\n" + +#: pg_basebackup.c:413 +#, c-format +msgid " --no-manifest suppress generation of backup manifest\n" +msgstr " --no-manifest отключить создание манифеста копии\n" + +#: pg_basebackup.c:414 #, c-format msgid "" " --no-slot prevent creation of temporary replication slot\n" msgstr "" " --no-slot предотвратить создание временного слота репликации\n" -#: pg_basebackup.c:356 +#: pg_basebackup.c:415 #, c-format msgid "" " --no-verify-checksums\n" @@ -336,12 +387,12 @@ msgstr "" " --no-verify-checksums\n" " не проверять контрольные суммы\n" -#: pg_basebackup.c:358 pg_receivewal.c:96 pg_recvlogical.c:101 +#: pg_basebackup.c:417 pg_receivewal.c:94 pg_recvlogical.c:98 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_basebackup.c:359 pg_receivewal.c:97 pg_recvlogical.c:102 +#: pg_basebackup.c:418 pg_receivewal.c:95 pg_recvlogical.c:99 #, c-format msgid "" "\n" @@ -350,22 +401,22 @@ msgstr "" "\n" "Параметры подключения:\n" -#: pg_basebackup.c:360 pg_receivewal.c:98 +#: pg_basebackup.c:419 pg_receivewal.c:96 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=СТРОКА строка подключения\n" -#: pg_basebackup.c:361 pg_receivewal.c:99 pg_recvlogical.c:104 +#: pg_basebackup.c:420 pg_receivewal.c:97 pg_recvlogical.c:101 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n" -#: pg_basebackup.c:362 pg_receivewal.c:100 pg_recvlogical.c:105 +#: pg_basebackup.c:421 pg_receivewal.c:98 pg_recvlogical.c:102 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=ПОРТ номер порта сервера БД\n" -#: pg_basebackup.c:363 +#: pg_basebackup.c:422 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -376,19 +427,19 @@ msgstr "" " интервал между передаваемыми серверу\n" " пакетами состояния (в секундах)\n" -#: pg_basebackup.c:365 pg_receivewal.c:101 pg_recvlogical.c:106 +#: pg_basebackup.c:424 pg_receivewal.c:99 pg_recvlogical.c:103 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr "" " -U, --username=NAME connect as specified database user\n" " -U, --username=ИМЯ имя пользователя баз данных\n" -#: pg_basebackup.c:366 pg_receivewal.c:102 pg_recvlogical.c:107 +#: pg_basebackup.c:425 pg_receivewal.c:100 pg_recvlogical.c:104 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: pg_basebackup.c:367 pg_receivewal.c:103 pg_recvlogical.c:108 +#: pg_basebackup.c:426 pg_receivewal.c:101 pg_recvlogical.c:105 #, c-format msgid "" " -W, --password force password prompt (should happen " @@ -396,72 +447,77 @@ msgid "" msgstr "" " -W, --password запрашивать пароль всегда (обычно не требуется)\n" -#: pg_basebackup.c:368 pg_receivewal.c:107 pg_recvlogical.c:109 +#: pg_basebackup.c:427 pg_receivewal.c:105 pg_recvlogical.c:106 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Об ошибках сообщайте по адресу .\n" +"Об ошибках сообщайте по адресу <%s>.\n" -#: pg_basebackup.c:411 +#: pg_basebackup.c:428 pg_receivewal.c:106 pg_recvlogical.c:107 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: pg_basebackup.c:471 #, c-format msgid "could not read from ready pipe: %m" msgstr "не удалось прочитать из готового канала: %m" -#: pg_basebackup.c:417 pg_basebackup.c:548 pg_basebackup.c:2098 -#: streamutil.c:450 +#: pg_basebackup.c:477 pg_basebackup.c:608 pg_basebackup.c:2133 +#: streamutil.c:449 #, c-format msgid "could not parse write-ahead log location \"%s\"" msgstr "не удалось разобрать положение в журнале предзаписи \"%s\"" -#: pg_basebackup.c:513 pg_receivewal.c:442 +#: pg_basebackup.c:573 pg_receivewal.c:441 #, c-format msgid "could not finish writing WAL files: %m" msgstr "не удалось завершить запись файлов WAL: %m" -#: pg_basebackup.c:560 +#: pg_basebackup.c:620 #, c-format msgid "could not create pipe for background process: %m" msgstr "не удалось создать канал для фонового процесса: %m" -#: pg_basebackup.c:595 +#: pg_basebackup.c:655 #, c-format msgid "created temporary replication slot \"%s\"" msgstr "создан временный слот репликации \"%s\"" -#: pg_basebackup.c:598 +#: pg_basebackup.c:658 #, c-format msgid "created replication slot \"%s\"" msgstr "создан слот репликации \"%s\"" -#: pg_basebackup.c:618 pg_basebackup.c:671 pg_basebackup.c:1507 +#: pg_basebackup.c:678 pg_basebackup.c:731 pg_basebackup.c:1620 #, c-format msgid "could not create directory \"%s\": %m" msgstr "не удалось создать каталог \"%s\": %m" -#: pg_basebackup.c:636 +#: pg_basebackup.c:696 #, c-format msgid "could not create background process: %m" msgstr "не удалось создать фоновый процесс: %m" -#: pg_basebackup.c:648 +#: pg_basebackup.c:708 #, c-format msgid "could not create background thread: %m" msgstr "не удалось создать фоновый поток выполнения: %m" -#: pg_basebackup.c:692 +#: pg_basebackup.c:752 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "каталог \"%s\" существует, но он не пуст" -#: pg_basebackup.c:699 +#: pg_basebackup.c:759 #, c-format msgid "could not access directory \"%s\": %m" msgstr "ошибка доступа к каталогу \"%s\": %m" -#: pg_basebackup.c:760 +#: pg_basebackup.c:824 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" @@ -469,7 +525,7 @@ msgstr[0] "%*s/%s КБ (100%%), табличное пространство %d/% msgstr[1] "%*s/%s КБ (100%%), табличное пространство %d/%d %*s" msgstr[2] "%*s/%s КБ (100%%), табличное пространство %d/%d %*s" -#: pg_basebackup.c:772 +#: pg_basebackup.c:836 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" @@ -477,7 +533,7 @@ msgstr[0] "%*s/%s КБ (%d%%), табличное пространство %d/%d msgstr[1] "%*s/%s КБ (%d%%), табличное пространство %d/%d (%s%-*.*s)" msgstr[2] "%*s/%s КБ (%d%%), табличное пространство %d/%d (%s%-*.*s)" -#: pg_basebackup.c:788 +#: pg_basebackup.c:852 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" @@ -485,149 +541,143 @@ msgstr[0] "%*s/%s КБ (%d%%), табличное пространство %d/%d msgstr[1] "%*s/%s КБ (%d%%), табличное пространство %d/%d" msgstr[2] "%*s/%s КБ (%d%%), табличное пространство %d/%d" -#: pg_basebackup.c:812 +#: pg_basebackup.c:877 #, c-format msgid "transfer rate \"%s\" is not a valid value" msgstr "неверное значение (\"%s\") для скорости передачи данных" -#: pg_basebackup.c:817 +#: pg_basebackup.c:882 #, c-format msgid "invalid transfer rate \"%s\": %m" msgstr "неверная скорость передачи данных \"%s\": %m" -#: pg_basebackup.c:826 +#: pg_basebackup.c:891 #, c-format msgid "transfer rate must be greater than zero" msgstr "скорость передачи должна быть больше 0" -#: pg_basebackup.c:858 +#: pg_basebackup.c:923 #, c-format msgid "invalid --max-rate unit: \"%s\"" msgstr "неверная единица измерения в --max-rate: \"%s\"" -#: pg_basebackup.c:865 +#: pg_basebackup.c:930 #, c-format msgid "transfer rate \"%s\" exceeds integer range" msgstr "скорость передачи \"%s\" вне целочисленного диапазона" -#: pg_basebackup.c:875 +#: pg_basebackup.c:940 #, c-format msgid "transfer rate \"%s\" is out of range" msgstr "скорость передачи \"%s\" вне диапазона" -#: pg_basebackup.c:897 +#: pg_basebackup.c:961 +#, c-format +msgid "could not get COPY data stream: %s" +msgstr "не удалось получить поток данных COPY: %s" + +#: pg_basebackup.c:981 pg_recvlogical.c:435 pg_recvlogical.c:607 +#: receivelog.c:965 +#, c-format +msgid "could not read COPY data: %s" +msgstr "не удалось прочитать данные COPY: %s" + +#: pg_basebackup.c:1007 #, c-format msgid "could not write to compressed file \"%s\": %s" msgstr "не удалось записать сжатый файл \"%s\": %s" -#: pg_basebackup.c:907 pg_basebackup.c:1596 pg_basebackup.c:1766 +#: pg_basebackup.c:1071 #, c-format -msgid "could not write to file \"%s\": %m" -msgstr "не удалось записать файл \"%s\": %m" +msgid "could not duplicate stdout: %m" +msgstr "не удалось продублировать stdout: %m" + +#: pg_basebackup.c:1078 +#, c-format +msgid "could not open output file: %m" +msgstr "не удалось открыть выходной файл: %m" -#: pg_basebackup.c:972 pg_basebackup.c:992 pg_basebackup.c:1019 +#: pg_basebackup.c:1085 pg_basebackup.c:1106 pg_basebackup.c:1135 #, c-format msgid "could not set compression level %d: %s" msgstr "не удалось установить уровень сжатия %d: %s" -#: pg_basebackup.c:1039 +#: pg_basebackup.c:1155 #, c-format msgid "could not create compressed file \"%s\": %s" msgstr "не удалось создать сжатый файл \"%s\": %s" -#: pg_basebackup.c:1050 pg_basebackup.c:1557 pg_basebackup.c:1778 -#, c-format -msgid "could not create file \"%s\": %m" -msgstr "не удалось создать файл \"%s\": %m" - -#: pg_basebackup.c:1061 pg_basebackup.c:1416 -#, c-format -msgid "could not get COPY data stream: %s" -msgstr "не удалось получить поток данных COPY: %s" - -#: pg_basebackup.c:1146 +#: pg_basebackup.c:1267 #, c-format msgid "could not close compressed file \"%s\": %s" msgstr "не удалось закрыть сжатый файл \"%s\": %s" -#: pg_basebackup.c:1158 pg_recvlogical.c:608 +#: pg_basebackup.c:1279 pg_recvlogical.c:632 #, c-format msgid "could not close file \"%s\": %m" msgstr "не удалось закрыть файл \"%s\": %m" -#: pg_basebackup.c:1169 pg_basebackup.c:1445 pg_recvlogical.c:437 -#: receivelog.c:968 +#: pg_basebackup.c:1541 #, c-format -msgid "could not read COPY data: %s" -msgstr "не удалось прочитать данные COPY: %s" +msgid "COPY stream ended before last file was finished" +msgstr "поток COPY закончился до завершения последнего файла" -#: pg_basebackup.c:1459 +#: pg_basebackup.c:1570 #, c-format -msgid "invalid tar block header size: %d" -msgstr "неверный размер заголовка блока tar: %d" +msgid "invalid tar block header size: %zu" +msgstr "неверный размер заголовка блока tar: %zu" -#: pg_basebackup.c:1514 +#: pg_basebackup.c:1627 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "не удалось установить права для каталога \"%s\": %m" -#: pg_basebackup.c:1537 +#: pg_basebackup.c:1651 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "не удалось создать символическую ссылку \"%s\" в \"%s\": %m" -#: pg_basebackup.c:1544 +#: pg_basebackup.c:1658 #, c-format msgid "unrecognized link indicator \"%c\"" msgstr "нераспознанный индикатор связи \"%c\"" -#: pg_basebackup.c:1563 +#: pg_basebackup.c:1677 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "не удалось установить права доступа для файла \"%s\": %m" -#: pg_basebackup.c:1620 -#, c-format -msgid "COPY stream ended before last file was finished" -msgstr "поток COPY закончился до завершения последнего файла" - -#: pg_basebackup.c:1647 pg_basebackup.c:1667 pg_basebackup.c:1681 -#: pg_basebackup.c:1727 -#, c-format -msgid "out of memory" -msgstr "нехватка памяти" - -#: pg_basebackup.c:1819 +#: pg_basebackup.c:1831 #, c-format msgid "incompatible server version %s" msgstr "несовместимая версия сервера %s" -#: pg_basebackup.c:1834 +#: pg_basebackup.c:1846 #, c-format msgid "HINT: use -X none or -X fetch to disable log streaming" msgstr "" "ПОДСКАЗКА: укажите -X none или -X fetch для отключения трансляции журнала" -#: pg_basebackup.c:1859 +#: pg_basebackup.c:1882 #, c-format msgid "initiating base backup, waiting for checkpoint to complete" msgstr "" "начинается базовое резервное копирование, ожидается завершение контрольной " "точки" -#: pg_basebackup.c:1883 pg_recvlogical.c:264 receivelog.c:484 receivelog.c:533 -#: receivelog.c:572 streamutil.c:299 streamutil.c:370 streamutil.c:422 -#: streamutil.c:533 streamutil.c:578 +#: pg_basebackup.c:1908 pg_recvlogical.c:262 receivelog.c:481 receivelog.c:530 +#: receivelog.c:569 streamutil.c:296 streamutil.c:369 streamutil.c:421 +#: streamutil.c:532 streamutil.c:577 #, c-format msgid "could not send replication command \"%s\": %s" msgstr "не удалось передать команду репликации \"%s\": %s" -#: pg_basebackup.c:1894 +#: pg_basebackup.c:1919 #, c-format msgid "could not initiate base backup: %s" msgstr "не удалось инициализировать базовое резервное копирование: %s" -#: pg_basebackup.c:1900 +#: pg_basebackup.c:1925 #, c-format msgid "" "server returned unexpected response to BASE_BACKUP command; got %d rows and " @@ -636,119 +686,124 @@ msgstr "" "сервер вернул неожиданный ответ на команду BASE_BACKUP; получено строк: %d, " "полей: %d, а ожидалось строк: %d, полей: %d" -#: pg_basebackup.c:1908 +#: pg_basebackup.c:1933 #, c-format msgid "checkpoint completed" msgstr "контрольная точка завершена" -#: pg_basebackup.c:1923 +#: pg_basebackup.c:1948 #, c-format msgid "write-ahead log start point: %s on timeline %u" msgstr "стартовая точка в журнале предзаписи: %s на линии времени %u" -#: pg_basebackup.c:1932 +#: pg_basebackup.c:1957 #, c-format msgid "could not get backup header: %s" msgstr "не удалось получить заголовок резервной копии: %s" -#: pg_basebackup.c:1938 +#: pg_basebackup.c:1963 #, c-format msgid "no data returned from server" msgstr "сервер не вернул данные" -#: pg_basebackup.c:1969 +#: pg_basebackup.c:1995 #, c-format msgid "can only write single tablespace to stdout, database has %d" msgstr "" "в stdout можно вывести только одно табличное пространство, всего в СУБД их %d" -#: pg_basebackup.c:1981 +#: pg_basebackup.c:2007 #, c-format msgid "starting background WAL receiver" msgstr "запуск фонового процесса считывания WAL" -#: pg_basebackup.c:2011 +#: pg_basebackup.c:2046 #, c-format msgid "could not get write-ahead log end position from server: %s" msgstr "" "не удалось получить от сервера конечную позицию в журнале предзаписи: %s" -#: pg_basebackup.c:2017 +#: pg_basebackup.c:2052 #, c-format msgid "no write-ahead log end position returned from server" msgstr "сервер не передал конечную позицию в журнале предзаписи" -#: pg_basebackup.c:2022 +#: pg_basebackup.c:2057 #, c-format msgid "write-ahead log end point: %s" msgstr "конечная точка в журнале предзаписи: %s" -#: pg_basebackup.c:2033 +#: pg_basebackup.c:2068 #, c-format msgid "checksum error occurred" msgstr "выявлена ошибка контрольной суммы" -#: pg_basebackup.c:2038 +#: pg_basebackup.c:2073 #, c-format msgid "final receive failed: %s" msgstr "ошибка в конце передачи: %s" -#: pg_basebackup.c:2062 +#: pg_basebackup.c:2097 #, c-format msgid "waiting for background process to finish streaming ..." msgstr "ожидание завершения потоковой передачи фоновым процессом..." -#: pg_basebackup.c:2067 +#: pg_basebackup.c:2102 #, c-format msgid "could not send command to background pipe: %m" msgstr "не удалось отправить команду в канал фонового процесса: %m" -#: pg_basebackup.c:2075 +#: pg_basebackup.c:2110 #, c-format msgid "could not wait for child process: %m" msgstr "сбой при ожидании дочернего процесса: %m" -#: pg_basebackup.c:2080 +#: pg_basebackup.c:2115 #, c-format msgid "child %d died, expected %d" msgstr "завершился дочерний процесс %d вместо ожидаемого %d" -#: pg_basebackup.c:2085 streamutil.c:94 +#: pg_basebackup.c:2120 streamutil.c:92 streamutil.c:202 #, c-format msgid "%s" msgstr "%s" -#: pg_basebackup.c:2110 +#: pg_basebackup.c:2145 #, c-format msgid "could not wait for child thread: %m" msgstr "сбой при ожидании дочернего потока: %m" -#: pg_basebackup.c:2116 +#: pg_basebackup.c:2151 #, c-format msgid "could not get child thread exit status: %m" msgstr "не удалось получить состояние завершения дочернего потока: %m" -#: pg_basebackup.c:2121 +#: pg_basebackup.c:2156 #, c-format msgid "child thread exited with error %u" msgstr "дочерний поток завершился с ошибкой %u" -#: pg_basebackup.c:2149 +#: pg_basebackup.c:2184 #, c-format msgid "syncing data to disk ..." msgstr "сохранение данных на диске..." -#: pg_basebackup.c:2162 +#: pg_basebackup.c:2209 +#, c-format +msgid "renaming backup_manifest.tmp to backup_manifest" +msgstr "переименование backup_manifest.tmp в backup_manifest" + +#: pg_basebackup.c:2220 #, c-format msgid "base backup completed" msgstr "базовое резервное копирование завершено" -#: pg_basebackup.c:2243 +#: pg_basebackup.c:2305 #, c-format msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" msgstr "неверный формат вывода \"%s\", должен быть \"plain\" или \"tar\"" -#: pg_basebackup.c:2287 +#: pg_basebackup.c:2349 #, c-format msgid "" "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" @@ -756,103 +811,119 @@ msgstr "" "неверный аргумент для wal-method — \"%s\", допускается только \"fetch\", " "\"stream\" или \"none\"" -#: pg_basebackup.c:2315 pg_receivewal.c:581 +#: pg_basebackup.c:2377 pg_receivewal.c:580 #, c-format msgid "invalid compression level \"%s\"" msgstr "неверный уровень сжатия \"%s\"" -#: pg_basebackup.c:2326 +#: pg_basebackup.c:2388 #, c-format msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" msgstr "" "неверный аргумент режима контрольных точек \"%s\"; должен быть \"fast\" или " "\"spread\"" -#: pg_basebackup.c:2353 pg_receivewal.c:556 pg_recvlogical.c:796 +#: pg_basebackup.c:2415 pg_receivewal.c:555 pg_recvlogical.c:820 #, c-format msgid "invalid status interval \"%s\"" msgstr "неверный интервал сообщений о состоянии \"%s\"" -#: pg_basebackup.c:2371 pg_basebackup.c:2384 pg_basebackup.c:2395 -#: pg_basebackup.c:2406 pg_basebackup.c:2414 pg_basebackup.c:2422 -#: pg_basebackup.c:2432 pg_basebackup.c:2445 pg_basebackup.c:2453 -#: pg_basebackup.c:2464 pg_basebackup.c:2474 pg_receivewal.c:606 -#: pg_receivewal.c:619 pg_receivewal.c:627 pg_receivewal.c:637 -#: pg_receivewal.c:645 pg_receivewal.c:656 pg_recvlogical.c:822 -#: pg_recvlogical.c:835 pg_recvlogical.c:846 pg_recvlogical.c:854 -#: pg_recvlogical.c:862 pg_recvlogical.c:870 pg_recvlogical.c:878 -#: pg_recvlogical.c:886 pg_recvlogical.c:894 +#: pg_basebackup.c:2445 pg_basebackup.c:2458 pg_basebackup.c:2469 +#: pg_basebackup.c:2480 pg_basebackup.c:2488 pg_basebackup.c:2496 +#: pg_basebackup.c:2506 pg_basebackup.c:2519 pg_basebackup.c:2527 +#: pg_basebackup.c:2538 pg_basebackup.c:2548 pg_basebackup.c:2565 +#: pg_basebackup.c:2573 pg_basebackup.c:2581 pg_receivewal.c:605 +#: pg_receivewal.c:618 pg_receivewal.c:626 pg_receivewal.c:636 +#: pg_receivewal.c:644 pg_receivewal.c:655 pg_recvlogical.c:846 +#: pg_recvlogical.c:859 pg_recvlogical.c:870 pg_recvlogical.c:878 +#: pg_recvlogical.c:886 pg_recvlogical.c:894 pg_recvlogical.c:902 +#: pg_recvlogical.c:910 pg_recvlogical.c:918 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_basebackup.c:2382 pg_receivewal.c:617 pg_recvlogical.c:833 +#: pg_basebackup.c:2456 pg_receivewal.c:616 pg_recvlogical.c:857 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: pg_basebackup.c:2394 pg_receivewal.c:655 +#: pg_basebackup.c:2468 pg_receivewal.c:654 #, c-format msgid "no target directory specified" msgstr "целевой каталог не указан" -#: pg_basebackup.c:2405 +#: pg_basebackup.c:2479 #, c-format msgid "only tar mode backups can be compressed" msgstr "сжиматься могут только резервные копии в архиве tar" -#: pg_basebackup.c:2413 +#: pg_basebackup.c:2487 #, c-format msgid "cannot stream write-ahead logs in tar mode to stdout" msgstr "транслировать журналы предзаписи в режиме tar в поток stdout нельзя" -#: pg_basebackup.c:2421 +#: pg_basebackup.c:2495 #, c-format msgid "replication slots can only be used with WAL streaming" msgstr "слоты репликации можно использовать только при потоковой передаче WAL" -#: pg_basebackup.c:2431 +#: pg_basebackup.c:2505 #, c-format msgid "--no-slot cannot be used with slot name" msgstr "--no-slot нельзя использовать с именем слота" #. translator: second %s is an option name -#: pg_basebackup.c:2443 pg_receivewal.c:635 +#: pg_basebackup.c:2517 pg_receivewal.c:634 #, c-format msgid "%s needs a slot to be specified using --slot" msgstr "для %s необходимо задать слот с помощью параметра --slot" -#: pg_basebackup.c:2452 +#: pg_basebackup.c:2526 #, c-format msgid "--create-slot and --no-slot are incompatible options" msgstr "параметры --create-slot и --no-slot несовместимы" -#: pg_basebackup.c:2463 +#: pg_basebackup.c:2537 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "расположение каталога журнала WAL можно указать только в режиме plain" -#: pg_basebackup.c:2473 +#: pg_basebackup.c:2547 #, c-format msgid "WAL directory location must be an absolute path" msgstr "расположение каталога журнала WAL должно определяться абсолютным путём" -#: pg_basebackup.c:2483 pg_receivewal.c:664 +#: pg_basebackup.c:2557 pg_receivewal.c:663 #, c-format msgid "this build does not support compression" msgstr "эта сборка программы не поддерживает сжатие" -#: pg_basebackup.c:2537 +#: pg_basebackup.c:2564 +#, c-format +msgid "--progress and --no-estimate-size are incompatible options" +msgstr "параметры --progress и --no-estimate-size несовместимы" + +#: pg_basebackup.c:2572 +#, c-format +msgid "--no-manifest and --manifest-checksums are incompatible options" +msgstr "параметры --no-manifest и --manifest-checksums несовместимы" + +#: pg_basebackup.c:2580 +#, c-format +msgid "--no-manifest and --manifest-force-encode are incompatible options" +msgstr "параметры --no-manifest и --manifest-force-encode несовместимы" + +#: pg_basebackup.c:2639 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "не удалось создать символическую ссылку \"%s\": %m" -#: pg_basebackup.c:2541 +#: pg_basebackup.c:2643 #, c-format msgid "symlinks are not supported on this platform" msgstr "символические ссылки не поддерживаются в этой ОС" -#: pg_receivewal.c:79 +#: pg_receivewal.c:77 #, c-format msgid "" "%s receives PostgreSQL streaming write-ahead logs.\n" @@ -861,7 +932,7 @@ msgstr "" "%s получает транслируемые журналы предзаписи PostgreSQL.\n" "\n" -#: pg_receivewal.c:83 pg_recvlogical.c:84 +#: pg_receivewal.c:81 pg_recvlogical.c:81 #, c-format msgid "" "\n" @@ -870,7 +941,7 @@ msgstr "" "\n" "Параметры:\n" -#: pg_receivewal.c:84 +#: pg_receivewal.c:82 #, c-format msgid "" " -D, --directory=DIR receive write-ahead log files into this directory\n" @@ -878,14 +949,14 @@ msgstr "" " -D, --directory=ПУТЬ сохранять файлы журнала предзаписи в данный " "каталог\n" -#: pg_receivewal.c:85 pg_recvlogical.c:85 +#: pg_receivewal.c:83 pg_recvlogical.c:82 #, c-format msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" msgstr "" " -E, --endpos=LSN определяет позицию, после которой нужно " "остановиться\n" -#: pg_receivewal.c:86 pg_recvlogical.c:89 +#: pg_receivewal.c:84 pg_recvlogical.c:86 #, c-format msgid "" " --if-not-exists do not error if slot already exists when creating a " @@ -894,12 +965,12 @@ msgstr "" " --if-not-exists не выдавать ошибку при попытке создать уже " "существующий слот\n" -#: pg_receivewal.c:87 pg_recvlogical.c:91 +#: pg_receivewal.c:85 pg_recvlogical.c:88 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop прерывать работу при потере соединения\n" -#: pg_receivewal.c:88 +#: pg_receivewal.c:86 #, c-format msgid "" " --no-sync do not wait for changes to be written safely to " @@ -907,7 +978,7 @@ msgid "" msgstr "" " --no-sync не ждать надёжного сохранения изменений на диске\n" -#: pg_receivewal.c:89 pg_recvlogical.c:96 +#: pg_receivewal.c:87 pg_recvlogical.c:93 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -918,19 +989,19 @@ msgstr "" " интервал между отправкой статусных пакетов серверу " "(по умолчанию: %d)\n" -#: pg_receivewal.c:92 +#: pg_receivewal.c:90 #, c-format msgid "" " --synchronous flush write-ahead log immediately after writing\n" msgstr "" " --synchronous сбрасывать журнал предзаписи сразу после записи\n" -#: pg_receivewal.c:95 +#: pg_receivewal.c:93 #, c-format msgid " -Z, --compress=0-9 compress logs with given compression level\n" msgstr " -Z, --compress=0-9 установить уровень сжатия журналов\n" -#: pg_receivewal.c:104 +#: pg_receivewal.c:102 #, c-format msgid "" "\n" @@ -939,7 +1010,7 @@ msgstr "" "\n" "Дополнительные действия:\n" -#: pg_receivewal.c:105 pg_recvlogical.c:81 +#: pg_receivewal.c:103 pg_recvlogical.c:78 #, c-format msgid "" " --create-slot create a new replication slot (for the slot's name " @@ -948,7 +1019,7 @@ msgstr "" " --create-slot создать новый слот репликации (имя слота задаёт " "параметр --slot)\n" -#: pg_receivewal.c:106 pg_recvlogical.c:82 +#: pg_receivewal.c:104 pg_recvlogical.c:79 #, c-format msgid "" " --drop-slot drop the replication slot (for the slot's name see " @@ -957,57 +1028,57 @@ msgstr "" " --drop-slot удалить слот репликации (имя слота задаёт параметр " "--slot)\n" -#: pg_receivewal.c:118 +#: pg_receivewal.c:117 #, c-format msgid "finished segment at %X/%X (timeline %u)" msgstr "завершён сегмент %X/%X (линия времени %u)" -#: pg_receivewal.c:125 +#: pg_receivewal.c:124 #, c-format msgid "stopped log streaming at %X/%X (timeline %u)" msgstr "завершена передача журнала с позиции %X/%X (линия времени %u)" -#: pg_receivewal.c:141 +#: pg_receivewal.c:140 #, c-format msgid "switched to timeline %u at %X/%X" msgstr "переключение на линию времени %u (позиция %X/%X)" -#: pg_receivewal.c:151 +#: pg_receivewal.c:150 #, c-format msgid "received interrupt signal, exiting" msgstr "получен сигнал прерывания, работа завершается" -#: pg_receivewal.c:187 +#: pg_receivewal.c:186 #, c-format msgid "could not close directory \"%s\": %m" msgstr "не удалось закрыть каталог \"%s\": %m" -#: pg_receivewal.c:273 +#: pg_receivewal.c:272 #, c-format msgid "segment file \"%s\" has incorrect size %d, skipping" msgstr "файл сегмента \"%s\" имеет неправильный размер %d, файл пропускается" -#: pg_receivewal.c:291 +#: pg_receivewal.c:290 #, c-format msgid "could not open compressed file \"%s\": %m" msgstr "не удалось открыть сжатый файл \"%s\": %m" -#: pg_receivewal.c:297 +#: pg_receivewal.c:296 #, c-format msgid "could not seek in compressed file \"%s\": %m" msgstr "ошибка позиционирования в сжатом файле \"%s\": %m" -#: pg_receivewal.c:305 +#: pg_receivewal.c:304 #, c-format msgid "could not read compressed file \"%s\": %m" msgstr "не удалось прочитать сжатый файл \"%s\": %m" -#: pg_receivewal.c:308 +#: pg_receivewal.c:307 #, c-format msgid "could not read compressed file \"%s\": read %d of %zu" msgstr "не удалось прочитать сжатый файл \"%s\" (прочитано байт: %d из %zu)" -#: pg_receivewal.c:319 +#: pg_receivewal.c:318 #, c-format msgid "" "compressed segment file \"%s\" has incorrect uncompressed size %d, skipping" @@ -1015,32 +1086,32 @@ msgstr "" "файл сжатого сегмента \"%s\" имеет неправильный исходный размер %d, файл " "пропускается" -#: pg_receivewal.c:423 +#: pg_receivewal.c:422 #, c-format msgid "starting log streaming at %X/%X (timeline %u)" msgstr "начало передачи журнала с позиции %X/%X (линия времени %u)" -#: pg_receivewal.c:538 pg_recvlogical.c:738 +#: pg_receivewal.c:537 pg_recvlogical.c:762 #, c-format msgid "invalid port number \"%s\"" msgstr "неверный номер порта \"%s\"" -#: pg_receivewal.c:566 pg_recvlogical.c:764 +#: pg_receivewal.c:565 pg_recvlogical.c:788 #, c-format msgid "could not parse end position \"%s\"" msgstr "не удалось разобрать конечную позицию \"%s\"" -#: pg_receivewal.c:626 +#: pg_receivewal.c:625 #, c-format msgid "cannot use --create-slot together with --drop-slot" msgstr "--create-slot нельзя применять вместе с --drop-slot" -#: pg_receivewal.c:644 +#: pg_receivewal.c:643 #, c-format msgid "cannot use --synchronous together with --no-sync" msgstr "--synchronous нельзя применять вместе с --no-sync" -#: pg_receivewal.c:720 +#: pg_receivewal.c:719 #, c-format msgid "" "replication connection using slot \"%s\" is unexpectedly database specific" @@ -1048,28 +1119,28 @@ msgstr "" "подключение для репликации через слот \"%s\" оказалось привязано к базе " "данных" -#: pg_receivewal.c:731 pg_recvlogical.c:942 +#: pg_receivewal.c:730 pg_recvlogical.c:966 #, c-format msgid "dropping replication slot \"%s\"" msgstr "удаление слота репликации \"%s\"" -#: pg_receivewal.c:742 pg_recvlogical.c:952 +#: pg_receivewal.c:741 pg_recvlogical.c:976 #, c-format msgid "creating replication slot \"%s\"" msgstr "создание слота репликации \"%s\"" -#: pg_receivewal.c:768 pg_recvlogical.c:977 +#: pg_receivewal.c:767 pg_recvlogical.c:1001 #, c-format msgid "disconnected" msgstr "отключение" #. translator: check source for value for %d -#: pg_receivewal.c:774 pg_recvlogical.c:983 +#: pg_receivewal.c:773 pg_recvlogical.c:1007 #, c-format msgid "disconnected; waiting %d seconds to try again" msgstr "отключение; через %d сек. последует повторное подключение" -#: pg_recvlogical.c:76 +#: pg_recvlogical.c:73 #, c-format msgid "" "%s controls PostgreSQL logical decoding streams.\n" @@ -1078,7 +1149,7 @@ msgstr "" "%s управляет потоками логического декодирования PostgreSQL.\n" "\n" -#: pg_recvlogical.c:80 +#: pg_recvlogical.c:77 #, c-format msgid "" "\n" @@ -1087,7 +1158,7 @@ msgstr "" "\n" "Действие, которое будет выполнено:\n" -#: pg_recvlogical.c:83 +#: pg_recvlogical.c:80 #, c-format msgid "" " --start start streaming in a replication slot (for the " @@ -1096,13 +1167,13 @@ msgstr "" " --start начать передачу в слоте репликации (имя слота " "задаёт параметр --slot)\n" -#: pg_recvlogical.c:86 +#: pg_recvlogical.c:83 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr "" " -f, --file=ФАЙЛ сохранять журнал в этот файл, - обозначает stdout\n" -#: pg_recvlogical.c:87 +#: pg_recvlogical.c:84 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -1113,7 +1184,7 @@ msgstr "" " периодичность сброса на диск выходного файла (по " "умолчанию: %d)\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:87 #, c-format msgid "" " -I, --startpos=LSN where in an existing slot should the streaming " @@ -1122,7 +1193,7 @@ msgstr "" " -I, --startpos=LSN определяет, с какой позиции в существующем слоте " "начнётся передача\n" -#: pg_recvlogical.c:92 +#: pg_recvlogical.c:89 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -1134,166 +1205,166 @@ msgstr "" "необязательным\n" " значением модулю вывода\n" -#: pg_recvlogical.c:95 +#: pg_recvlogical.c:92 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr "" " -P, --plugin=МОДУЛЬ использовать заданный модуль вывода (по умолчанию: " "%s)\n" -#: pg_recvlogical.c:98 +#: pg_recvlogical.c:95 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=ИМЯ_СЛОТА имя слота логической репликации\n" -#: pg_recvlogical.c:103 +#: pg_recvlogical.c:100 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=ИМЯ_БД целевая база данных\n" -#: pg_recvlogical.c:135 +#: pg_recvlogical.c:133 #, c-format msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "подтверждается запись до %X/%X, синхронизация с ФС до %X/%X (слот %s)" -#: pg_recvlogical.c:159 receivelog.c:346 +#: pg_recvlogical.c:157 receivelog.c:343 #, c-format msgid "could not send feedback packet: %s" msgstr "не удалось отправить пакет ответа: %s" -#: pg_recvlogical.c:232 +#: pg_recvlogical.c:230 #, c-format msgid "starting log streaming at %X/%X (slot %s)" msgstr "начало передачи журнала с позиции %X/%X (слот %s)" -#: pg_recvlogical.c:273 +#: pg_recvlogical.c:271 #, c-format msgid "streaming initiated" msgstr "передача запущена" -#: pg_recvlogical.c:337 +#: pg_recvlogical.c:335 #, c-format msgid "could not open log file \"%s\": %m" msgstr "не удалось открыть файл протокола \"%s\": %m" -#: pg_recvlogical.c:363 receivelog.c:876 +#: pg_recvlogical.c:361 receivelog.c:873 #, c-format msgid "invalid socket: %s" msgstr "неверный сокет: %s" -#: pg_recvlogical.c:416 receivelog.c:904 +#: pg_recvlogical.c:414 receivelog.c:901 #, c-format msgid "select() failed: %m" msgstr "ошибка в select(): %m" -#: pg_recvlogical.c:423 receivelog.c:954 +#: pg_recvlogical.c:421 receivelog.c:951 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "не удалось получить данные из потока WAL: %s" -#: pg_recvlogical.c:465 pg_recvlogical.c:516 receivelog.c:998 receivelog.c:1064 +#: pg_recvlogical.c:463 pg_recvlogical.c:514 receivelog.c:995 receivelog.c:1061 #, c-format msgid "streaming header too small: %d" msgstr "заголовок потока слишком мал: %d" -#: pg_recvlogical.c:500 receivelog.c:836 +#: pg_recvlogical.c:498 receivelog.c:833 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "нераспознанный заголовок потока: \"%c\"" -#: pg_recvlogical.c:554 pg_recvlogical.c:566 +#: pg_recvlogical.c:552 pg_recvlogical.c:564 #, c-format msgid "could not write %u bytes to log file \"%s\": %m" msgstr "не удалось записать %u Б в файл журнала \"%s\": %m" -#: pg_recvlogical.c:594 receivelog.c:632 receivelog.c:669 +#: pg_recvlogical.c:618 receivelog.c:629 receivelog.c:666 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "неожиданный конец потока репликации: %s" -#: pg_recvlogical.c:718 +#: pg_recvlogical.c:742 #, c-format msgid "invalid fsync interval \"%s\"" msgstr "неверный интервал синхронизации с ФС \"%s\"" -#: pg_recvlogical.c:756 +#: pg_recvlogical.c:780 #, c-format msgid "could not parse start position \"%s\"" msgstr "не удалось разобрать начальную позицию \"%s\"" -#: pg_recvlogical.c:845 +#: pg_recvlogical.c:869 #, c-format msgid "no slot specified" msgstr "слот не указан" -#: pg_recvlogical.c:853 +#: pg_recvlogical.c:877 #, c-format msgid "no target file specified" msgstr "целевой файл не задан" -#: pg_recvlogical.c:861 +#: pg_recvlogical.c:885 #, c-format msgid "no database specified" msgstr "база данных не задана" -#: pg_recvlogical.c:869 +#: pg_recvlogical.c:893 #, c-format msgid "at least one action needs to be specified" msgstr "необходимо задать минимум одно действие" -#: pg_recvlogical.c:877 +#: pg_recvlogical.c:901 #, c-format msgid "cannot use --create-slot or --start together with --drop-slot" msgstr "--create-slot или --start нельзя применять вместе с --drop-slot" -#: pg_recvlogical.c:885 +#: pg_recvlogical.c:909 #, c-format msgid "cannot use --create-slot or --drop-slot together with --startpos" msgstr "--create-slot или --drop-slot нельзя применять вместе с --startpos" -#: pg_recvlogical.c:893 +#: pg_recvlogical.c:917 #, c-format msgid "--endpos may only be specified with --start" msgstr "--endpos можно задать только вместе с --start" -#: pg_recvlogical.c:924 +#: pg_recvlogical.c:948 #, c-format msgid "could not establish database-specific replication connection" msgstr "" "не удалось установить подключение для репликации к определённой базе данных" -#: pg_recvlogical.c:1023 +#: pg_recvlogical.c:1047 #, c-format msgid "end position %X/%X reached by keepalive" msgstr "конечная позиция %X/%X достигнута при обработке keepalive" -#: pg_recvlogical.c:1026 +#: pg_recvlogical.c:1050 #, c-format msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "конечная позиция %X/%X достигнута при обработке записи WAL %X/%X" -#: receivelog.c:72 +#: receivelog.c:69 #, c-format msgid "could not create archive status file \"%s\": %s" msgstr "не удалось создать файл статуса архива \"%s\": %s" -#: receivelog.c:119 +#: receivelog.c:116 #, c-format msgid "could not get size of write-ahead log file \"%s\": %s" msgstr "не удалось получить размер файла журнала предзаписи \"%s\": %s" -#: receivelog.c:129 +#: receivelog.c:126 #, c-format msgid "could not open existing write-ahead log file \"%s\": %s" msgstr "не удалось открыть существующий файл журнала предзаписи \"%s\": %s" -#: receivelog.c:137 +#: receivelog.c:134 #, c-format msgid "could not fsync existing write-ahead log file \"%s\": %s" msgstr "" "не удалось сбросить на диск существующий файл журнала предзаписи \"%s\": %s" -#: receivelog.c:151 +#: receivelog.c:148 #, c-format msgid "write-ahead log file \"%s\" has %d byte, should be 0 or %d" msgid_plural "write-ahead log file \"%s\" has %d bytes, should be 0 or %d" @@ -1304,42 +1375,42 @@ msgstr[1] "" msgstr[2] "" "файл журнала предзаписи \"%s\" имеет размер %d Б, а должен — 0 или %d" -#: receivelog.c:166 +#: receivelog.c:163 #, c-format msgid "could not open write-ahead log file \"%s\": %s" msgstr "не удалось открыть файл журнала предзаписи \"%s\": %s" -#: receivelog.c:192 +#: receivelog.c:189 #, c-format msgid "could not determine seek position in file \"%s\": %s" msgstr "не удалось определить текущую позицию в файле \"%s\": %s" -#: receivelog.c:206 +#: receivelog.c:203 #, c-format msgid "not renaming \"%s%s\", segment is not complete" msgstr "файл \"%s%s\" не переименовывается, так как это не полный сегмент" -#: receivelog.c:218 receivelog.c:303 receivelog.c:678 +#: receivelog.c:215 receivelog.c:300 receivelog.c:675 #, c-format msgid "could not close file \"%s\": %s" msgstr "не удалось закрыть файл \"%s\": %s" -#: receivelog.c:275 +#: receivelog.c:272 #, c-format msgid "server reported unexpected history file name for timeline %u: %s" msgstr "сервер сообщил неожиданное имя файла истории для линии времени %u: %s" -#: receivelog.c:283 +#: receivelog.c:280 #, c-format msgid "could not create timeline history file \"%s\": %s" msgstr "не удалось создать файл истории линии времени \"%s\": %s" -#: receivelog.c:290 +#: receivelog.c:287 #, c-format msgid "could not write timeline history file \"%s\": %s" msgstr "не удалось записать файл истории линии времени \"%s\": %s" -#: receivelog.c:380 +#: receivelog.c:377 #, c-format msgid "" "incompatible server version %s; client does not support streaming from " @@ -1348,7 +1419,7 @@ msgstr "" "несовместимая версия сервера %s; клиент не поддерживает репликацию с " "серверов версии ниже %s" -#: receivelog.c:389 +#: receivelog.c:386 #, c-format msgid "" "incompatible server version %s; client does not support streaming from " @@ -1357,7 +1428,7 @@ msgstr "" "несовместимая версия сервера %s; клиент не поддерживает репликацию с " "серверов версии выше %s" -#: receivelog.c:491 streamutil.c:430 streamutil.c:467 +#: receivelog.c:488 streamutil.c:429 streamutil.c:466 #, c-format msgid "" "could not identify system: got %d rows and %d fields, expected %d rows and " @@ -1366,7 +1437,7 @@ msgstr "" "не удалось идентифицировать систему; получено строк: %d, полей: %d " "(ожидалось: %d и %d (или более))" -#: receivelog.c:498 +#: receivelog.c:495 #, c-format msgid "" "system identifier does not match between base backup and streaming connection" @@ -1374,12 +1445,12 @@ msgstr "" "системный идентификатор базовой резервной копии отличается от идентификатора " "потоковой передачи" -#: receivelog.c:504 +#: receivelog.c:501 #, c-format msgid "starting timeline %u is not present in the server" msgstr "на сервере нет начальной линии времени %u" -#: receivelog.c:545 +#: receivelog.c:542 #, c-format msgid "" "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, " @@ -1388,12 +1459,12 @@ msgstr "" "сервер вернул неожиданный ответ на команду TIMELINE_HISTORY; получено строк: " "%d, полей: %d, а ожидалось строк: %d, полей: %d" -#: receivelog.c:616 +#: receivelog.c:613 #, c-format msgid "server reported unexpected next timeline %u, following timeline %u" msgstr "сервер неожиданно сообщил линию времени %u после линии времени %u" -#: receivelog.c:622 +#: receivelog.c:619 #, c-format msgid "" "server stopped streaming timeline %u at %X/%X, but reported next timeline %u " @@ -1402,12 +1473,12 @@ msgstr "" "сервер прекратил передачу линии времени %u в %X/%X, но сообщил, что " "следующая линии времени %u начнётся в %X/%X" -#: receivelog.c:662 +#: receivelog.c:659 #, c-format msgid "replication stream was terminated before stop point" msgstr "поток репликации закончился до точки остановки" -#: receivelog.c:708 +#: receivelog.c:705 #, c-format msgid "" "unexpected result set after end-of-timeline: got %d rows and %d fields, " @@ -1416,66 +1487,61 @@ msgstr "" "сервер вернул неожиданный набор данных после конца линии времени; получено " "строк: %d, полей: %d, а ожидалось строк: %d, полей: %d" -#: receivelog.c:717 +#: receivelog.c:714 #, c-format msgid "could not parse next timeline's starting point \"%s\"" msgstr "не удалось разобрать начальную точку следующей линии времени \"%s\"" -#: receivelog.c:766 receivelog.c:1018 +#: receivelog.c:763 receivelog.c:1015 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "не удалось синхронизировать с ФС файл \"%s\": %s" -#: receivelog.c:1081 +#: receivelog.c:1078 #, c-format msgid "received write-ahead log record for offset %u with no file open" msgstr "получена запись журнала предзаписи по смещению %u, но файл не открыт" -#: receivelog.c:1091 +#: receivelog.c:1088 #, c-format msgid "got WAL data offset %08x, expected %08x" msgstr "получено смещение данных WAL %08x, но ожидалось %08x" -#: receivelog.c:1125 +#: receivelog.c:1122 #, c-format msgid "could not write %u bytes to WAL file \"%s\": %s" msgstr "не удалось записать %u Б в файл WAL \"%s\": %s" -#: receivelog.c:1150 receivelog.c:1190 receivelog.c:1221 +#: receivelog.c:1147 receivelog.c:1187 receivelog.c:1218 #, c-format msgid "could not send copy-end packet: %s" msgstr "не удалось отправить пакет \"конец COPY\": %s" -#: streamutil.c:162 +#: streamutil.c:160 msgid "Password: " msgstr "Пароль: " -#: streamutil.c:187 +#: streamutil.c:185 #, c-format msgid "could not connect to server" msgstr "не удалось подключиться к серверу" -#: streamutil.c:204 -#, c-format -msgid "could not connect to server: %s" -msgstr "не удалось подключиться к серверу: %s" - -#: streamutil.c:233 +#: streamutil.c:230 #, c-format msgid "could not clear search_path: %s" msgstr "не удалось очистить search_path: %s" -#: streamutil.c:249 +#: streamutil.c:246 #, c-format msgid "could not determine server setting for integer_datetimes" msgstr "не удалось получить настройку сервера integer_datetimes" -#: streamutil.c:256 +#: streamutil.c:253 #, c-format msgid "integer_datetimes compile flag does not match server" msgstr "флаг компиляции integer_datetimes не соответствует настройке сервера" -#: streamutil.c:307 +#: streamutil.c:304 #, c-format msgid "" "could not fetch WAL segment size: got %d rows and %d fields, expected %d " @@ -1484,7 +1550,7 @@ msgstr "" "не удалось извлечь размер сегмента WAL; получено строк: %d, полей: %d " "(ожидалось: %d и %d (или более))" -#: streamutil.c:317 +#: streamutil.c:314 #, c-format msgid "WAL segment size could not be parsed" msgstr "разобрать размер сегмента WAL не удалось" @@ -1507,7 +1573,7 @@ msgstr[2] "" "размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " "ГБ, но удалённый сервер сообщил значение: %d" -#: streamutil.c:378 +#: streamutil.c:377 #, c-format msgid "" "could not fetch group access flag: got %d rows and %d fields, expected %d " @@ -1516,12 +1582,12 @@ msgstr "" "не удалось извлечь флаг доступа группы; получено строк: %d, полей: %d " "(ожидалось: %d и %d (или более))" -#: streamutil.c:387 +#: streamutil.c:386 #, c-format msgid "group access flag could not be parsed: %s" msgstr "не удалось разобрать флаг доступа группы: %s" -#: streamutil.c:544 +#: streamutil.c:543 #, c-format msgid "" "could not create replication slot \"%s\": got %d rows and %d fields, " @@ -1530,7 +1596,7 @@ msgstr "" "создать слот репликации \"%s\" не удалось; получено строк: %d, полей: %d " "(ожидалось: %d и %d)" -#: streamutil.c:588 +#: streamutil.c:587 #, c-format msgid "" "could not drop replication slot \"%s\": got %d rows and %d fields, expected " @@ -1539,39 +1605,49 @@ msgstr "" "удалить слот репликации \"%s\" не получилось; получено строк: %d, полей: %d " "(ожидалось: %d и %d)" -#: walmethods.c:439 walmethods.c:928 +#: walmethods.c:438 walmethods.c:927 msgid "could not compress data" msgstr "не удалось сжать данные" -#: walmethods.c:471 +#: walmethods.c:470 msgid "could not reset compression stream" msgstr "не удалось сбросить поток сжатых данных" -#: walmethods.c:569 +#: walmethods.c:568 msgid "could not initialize compression library" msgstr "не удалось инициализировать библиотеку сжатия" -#: walmethods.c:581 +#: walmethods.c:580 msgid "implementation error: tar files can't have more than one open file" msgstr "" "ошибка реализации: в файлах tar не может быть больше одно открытого файла" -#: walmethods.c:595 +#: walmethods.c:594 msgid "could not create tar header" msgstr "не удалось создать заголовок tar" -#: walmethods.c:609 walmethods.c:649 walmethods.c:844 walmethods.c:855 +#: walmethods.c:608 walmethods.c:648 walmethods.c:843 walmethods.c:854 msgid "could not change compression parameters" msgstr "не удалось изменить параметры сжатия" -#: walmethods.c:731 +#: walmethods.c:730 msgid "unlink not supported with compression" msgstr "со сжатием закрытие файла с удалением не поддерживается" -#: walmethods.c:953 +#: walmethods.c:952 msgid "could not close compression stream" msgstr "не удалось закрыть поток сжатых данных" +#~ msgid "could not connect to server: %s" +#~ msgstr "не удалось подключиться к серверу: %s" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Об ошибках сообщайте по адресу .\n" + #~ msgid "%s: out of memory\n" #~ msgstr "%s: нехватка памяти\n" diff --git a/src/bin/pg_basebackup/po/uk.po b/src/bin/pg_basebackup/po/uk.po new file mode 100644 index 0000000000000..6c717a732189f --- /dev/null +++ b/src/bin/pg_basebackup/po/uk.po @@ -0,0 +1,1452 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:15+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: pasha_golub\n" +"Language-Team: Ukrainian\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /DEV_13/pg_basebackup.pot\n" +"X-Crowdin-File-ID: 490\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "збій: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "помилка: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "попередження: " + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "недостатньо пам'яті\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" + +#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 +#: pg_receivewal.c:266 pg_recvlogical.c:340 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" + +#: ../../common/file_utils.c:158 pg_receivewal.c:169 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не вдалося відкрити каталог \"%s\": %m" + +#: ../../common/file_utils.c:192 pg_receivewal.c:337 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "не вдалося прочитати каталог \"%s\": %m" + +#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 +#: ../../common/file_utils.c:357 ../../fe_utils/recovery_gen.c:134 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" + +#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 +#: pg_recvlogical.c:193 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "не вдалося fsync файл \"%s\": %m" + +#: ../../common/file_utils.c:375 +#, c-format +msgid "could not rename file \"%s\" to \"%s\": %m" +msgstr "не вдалося перейменувати файл \"%s\" на \"%s\": %m" + +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 pg_basebackup.c:1248 +#, c-format +msgid "out of memory" +msgstr "недостатньо пам'яті" + +#: ../../fe_utils/recovery_gen.c:140 pg_basebackup.c:1021 pg_basebackup.c:1714 +#: pg_basebackup.c:1770 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "неможливо записати до файлу \"%s\": %m" + +#: ../../fe_utils/recovery_gen.c:152 pg_basebackup.c:1166 pg_basebackup.c:1671 +#: pg_basebackup.c:1747 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "неможливо створити файл \"%s\": %m" + +#: pg_basebackup.c:224 +#, c-format +msgid "removing data directory \"%s\"" +msgstr "видалення даних з директорії \"%s\"" + +#: pg_basebackup.c:226 +#, c-format +msgid "failed to remove data directory" +msgstr "не вдалося видалити дані директорії" + +#: pg_basebackup.c:230 +#, c-format +msgid "removing contents of data directory \"%s\"" +msgstr "видалення даних з директорії \"%s\"" + +#: pg_basebackup.c:232 +#, c-format +msgid "failed to remove contents of data directory" +msgstr "не вдалося видалити дані директорії" + +#: pg_basebackup.c:237 +#, c-format +msgid "removing WAL directory \"%s\"" +msgstr "видалення WAL директорії \"%s\"" + +#: pg_basebackup.c:239 +#, c-format +msgid "failed to remove WAL directory" +msgstr "не вдалося видалити директорію WAL" + +#: pg_basebackup.c:243 +#, c-format +msgid "removing contents of WAL directory \"%s\"" +msgstr "видалення даних з директорії WAL \"%s\"" + +#: pg_basebackup.c:245 +#, c-format +msgid "failed to remove contents of WAL directory" +msgstr "не вдалося видалити дані директорії WAL" + +#: pg_basebackup.c:251 +#, c-format +msgid "data directory \"%s\" not removed at user's request" +msgstr "директорія даних \"%s\" не видалена за запитом користувача" + +#: pg_basebackup.c:254 +#, c-format +msgid "WAL directory \"%s\" not removed at user's request" +msgstr "директорія WAL \"%s\" не видалена за запитом користувача" + +#: pg_basebackup.c:258 +#, c-format +msgid "changes to tablespace directories will not be undone" +msgstr "зміни в каталогах табличних просторів незворотні" + +#: pg_basebackup.c:299 +#, c-format +msgid "directory name too long" +msgstr "ім'я директорії задовге" + +#: pg_basebackup.c:309 +#, c-format +msgid "multiple \"=\" signs in tablespace mapping" +msgstr "кілька знаків \"=\" зіставленні табличних просторів" + +#: pg_basebackup.c:321 +#, c-format +msgid "invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"" +msgstr "неприпустимий табличний простір зіставлення формату \"%s\", має бути \"OLDDIR = NEWDIR\"" + +#: pg_basebackup.c:333 +#, c-format +msgid "old directory is not an absolute path in tablespace mapping: %s" +msgstr "старий каталог не є абсолютним шляхом у зіставлення табличного простору: %s" + +#: pg_basebackup.c:340 +#, c-format +msgid "new directory is not an absolute path in tablespace mapping: %s" +msgstr "новий каталог не є абсолютним шляхом у зіставлення табличного простору: %s" + +#: pg_basebackup.c:379 +#, c-format +msgid "%s takes a base backup of a running PostgreSQL server.\n\n" +msgstr "%s робить базову резервну копію працюючого сервера PostgreSQL.\n\n" + +#: pg_basebackup.c:381 pg_receivewal.c:79 pg_recvlogical.c:75 +#, c-format +msgid "Usage:\n" +msgstr "Використання:\n" + +#: pg_basebackup.c:382 pg_receivewal.c:80 pg_recvlogical.c:76 +#, c-format +msgid " %s [OPTION]...\n" +msgstr " %s: [OPTION]...\n" + +#: pg_basebackup.c:383 +#, c-format +msgid "\n" +"Options controlling the output:\n" +msgstr "\n" +"Параметри, що контролюють вивід:\n" + +#: pg_basebackup.c:384 +#, c-format +msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" +msgstr " -D, -- pgdata=DIRECTORY директорія, в яку зберегти резервну копію бази\n" + +#: pg_basebackup.c:385 +#, c-format +msgid " -F, --format=p|t output format (plain (default), tar)\n" +msgstr " -F, --format=p|т формат виводу (звичайний за замовчуванням, tar)\n" + +#: pg_basebackup.c:386 +#, c-format +msgid " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" +" (in kB/s, or use suffix \"k\" or \"M\")\n" +msgstr " -r, --max-rate=RATE максимальна швидкість передавання даних до директорії\n" +" (у кБ/с або з використанням суфіксів \"k\" або \"М\")\n" + +#: pg_basebackup.c:388 +#, c-format +msgid " -R, --write-recovery-conf\n" +" write configuration for replication\n" +msgstr " -R, --write-recovery-conf\n" +" записати конфігурацію для реплікації\n" + +#: pg_basebackup.c:390 +#, c-format +msgid " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" +" relocate tablespace in OLDDIR to NEWDIR\n" +msgstr " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" +" перенестb табличний простір з OLDDIR до NEWDIR\n" + +#: pg_basebackup.c:392 +#, c-format +msgid " --waldir=WALDIR location for the write-ahead log directory\n" +msgstr "--waldir=WALDIR розташування журналу попереднього запису\n" + +#: pg_basebackup.c:393 +#, c-format +msgid " -X, --wal-method=none|fetch|stream\n" +" include required WAL files with specified method\n" +msgstr " -X, --wal-method=none|fetch|stream\n" +" додати необхідні WAL файли за допомогою вказаного методу\n" + +#: pg_basebackup.c:395 +#, c-format +msgid " -z, --gzip compress tar output\n" +msgstr " -z, --gzip стиснути вихідний tar\n" + +#: pg_basebackup.c:396 +#, c-format +msgid " -Z, --compress=0-9 compress tar output with given compression level\n" +msgstr " -Z, --compress=0-9 рівень стискання вихідного архіву \n" + +#: pg_basebackup.c:397 +#, c-format +msgid "\n" +"General options:\n" +msgstr "\n" +"Основні налаштування:\n" + +#: pg_basebackup.c:398 +#, c-format +msgid " -c, --checkpoint=fast|spread\n" +" set fast or spread checkpointing\n" +msgstr " -c, --checkpoint=fast|spread\n" +" режим швидких або розділених контрольних точок\n" + +#: pg_basebackup.c:400 +#, c-format +msgid " -C, --create-slot create replication slot\n" +msgstr " -C, --create-slot створити слот для реплікації\n" + +#: pg_basebackup.c:401 +#, c-format +msgid " -l, --label=LABEL set backup label\n" +msgstr " -l, --label=LABEL встановити мітку резервної копії\n" + +#: pg_basebackup.c:402 +#, c-format +msgid " -n, --no-clean do not clean up after errors\n" +msgstr " -n, --no-clean не очищати після помилок\n" + +#: pg_basebackup.c:403 +#, c-format +msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" +msgstr " -N, --no-sync не чекати завершення збереження даних на диску\n" + +#: pg_basebackup.c:404 +#, c-format +msgid " -P, --progress show progress information\n" +msgstr " -P, --progress відображати інформацію про прогрес\n" + +#: pg_basebackup.c:405 pg_receivewal.c:89 +#, c-format +msgid " -S, --slot=SLOTNAME replication slot to use\n" +msgstr " -S, --slot=ИМ'Я_СЛОТА використовувати вказаний слот реплікації\n" + +#: pg_basebackup.c:406 pg_receivewal.c:91 pg_recvlogical.c:96 +#, c-format +msgid " -v, --verbose output verbose messages\n" +msgstr " -v, --verbose виводити детальні повідомлення\n" + +#: pg_basebackup.c:407 pg_receivewal.c:92 pg_recvlogical.c:97 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію і вийти\n" + +#: pg_basebackup.c:408 +#, c-format +msgid " --manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE\n" +" use algorithm for manifest checksums\n" +msgstr " --manifest-checksums=SHA{224,256,384,512}|CRC32C|НЕ\n" +" використовувати алгоритм для контрольних сум маніфесту\n" + +#: pg_basebackup.c:410 +#, c-format +msgid " --manifest-force-encode\n" +" hex encode all file names in manifest\n" +msgstr " --manifest-force-encode\n" +" кодувати у hex всі імена файлів у маніфесті\n" + +#: pg_basebackup.c:412 +#, c-format +msgid " --no-estimate-size do not estimate backup size in server side\n" +msgstr " --no-estimate-size не оцінювати розмір резервної копії на стороні сервера\n" + +#: pg_basebackup.c:413 +#, c-format +msgid " --no-manifest suppress generation of backup manifest\n" +msgstr " --no-manifest пропустити створення маніфесту резервного копіювання\n" + +#: pg_basebackup.c:414 +#, c-format +msgid " --no-slot prevent creation of temporary replication slot\n" +msgstr " --no-slot не створювати тимчасового слоту реплікації\n" + +#: pg_basebackup.c:415 +#, c-format +msgid " --no-verify-checksums\n" +" do not verify checksums\n" +msgstr " --no-verify-checksums\n" +" не перевіряти контрольні суми\n" + +#: pg_basebackup.c:417 pg_receivewal.c:94 pg_recvlogical.c:98 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку потім вийти\n" + +#: pg_basebackup.c:418 pg_receivewal.c:95 pg_recvlogical.c:99 +#, c-format +msgid "\n" +"Connection options:\n" +msgstr "\n" +"Налаштування з'єднання:\n" + +#: pg_basebackup.c:419 pg_receivewal.c:96 +#, c-format +msgid " -d, --dbname=CONNSTR connection string\n" +msgstr " -d, --dbname=CONNSTR рядок з'єднання\n" + +#: pg_basebackup.c:420 pg_receivewal.c:97 pg_recvlogical.c:101 +#, c-format +msgid " -h, --host=HOSTNAME database server host or socket directory\n" +msgstr " -h, --host=HOSTNAME хост сервера бази даних або каталог сокетів\n" + +#: pg_basebackup.c:421 pg_receivewal.c:98 pg_recvlogical.c:102 +#, c-format +msgid " -p, --port=PORT database server port number\n" +msgstr " -p, --port=PORT порт сервера бази даних\n" + +#: pg_basebackup.c:422 +#, c-format +msgid " -s, --status-interval=INTERVAL\n" +" time between status packets sent to server (in seconds)\n" +msgstr " -s, --status-interval=INTERVAL часу між пакетами статусу до сервера (у секундах)\n" + +#: pg_basebackup.c:424 pg_receivewal.c:99 pg_recvlogical.c:103 +#, c-format +msgid " -U, --username=NAME connect as specified database user\n" +msgstr " -U, --username=NAME підключатись як вказаний користувач бази даних\n" + +#: pg_basebackup.c:425 pg_receivewal.c:100 pg_recvlogical.c:104 +#, c-format +msgid " -w, --no-password never prompt for password\n" +msgstr " -w, --no-password ніколи не питати пароль\n" + +#: pg_basebackup.c:426 pg_receivewal.c:101 pg_recvlogical.c:105 +#, c-format +msgid " -W, --password force password prompt (should happen automatically)\n" +msgstr " -W, --password обов'язково питати пароль (повинно відбуватися автоматично)\n" + +#: pg_basebackup.c:427 pg_receivewal.c:105 pg_recvlogical.c:106 +#, c-format +msgid "\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Повідомляти про помилки на <%s>.\n" + +#: pg_basebackup.c:428 pg_receivewal.c:106 pg_recvlogical.c:107 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: pg_basebackup.c:471 +#, c-format +msgid "could not read from ready pipe: %m" +msgstr "не можливо прочитати з готових каналів: %m" + +#: pg_basebackup.c:477 pg_basebackup.c:608 pg_basebackup.c:2133 +#: streamutil.c:450 +#, c-format +msgid "could not parse write-ahead log location \"%s\"" +msgstr "не вдалося проаналізувати наперед журнал локації \"%s\"" + +#: pg_basebackup.c:573 pg_receivewal.c:441 +#, c-format +msgid "could not finish writing WAL files: %m" +msgstr "не можливо закінчити написання файлів WAL: %m" + +#: pg_basebackup.c:620 +#, c-format +msgid "could not create pipe for background process: %m" +msgstr "не можливо створити канал для фонового процесу: %m" + +#: pg_basebackup.c:655 +#, c-format +msgid "created temporary replication slot \"%s\"" +msgstr "створено слот тимчасових реплікацій \"%s\"" + +#: pg_basebackup.c:658 +#, c-format +msgid "created replication slot \"%s\"" +msgstr "створено слот реплікацій \"%s\"" + +#: pg_basebackup.c:678 pg_basebackup.c:731 pg_basebackup.c:1620 +#, c-format +msgid "could not create directory \"%s\": %m" +msgstr "не вдалося створити каталог \"%s\": %m" + +#: pg_basebackup.c:696 +#, c-format +msgid "could not create background process: %m" +msgstr "не можливо створити фоновий процес: %m" + +#: pg_basebackup.c:708 +#, c-format +msgid "could not create background thread: %m" +msgstr "не можливо створити фоновий потік: %m" + +#: pg_basebackup.c:752 +#, c-format +msgid "directory \"%s\" exists but is not empty" +msgstr "каталог \"%s\" існує, але він не порожній" + +#: pg_basebackup.c:759 +#, c-format +msgid "could not access directory \"%s\": %m" +msgstr "немає доступу до каталогу \"%s\": %m" + +#: pg_basebackup.c:824 +#, c-format +msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" +msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" +msgstr[0] "%*s/%s kB (100%%), %d/%d табличний простір %*s" +msgstr[1] "%*s/%s kB (100%%), %d/%d табличних простори %*s" +msgstr[2] "%*s/%s kB (100%%), %d/%d табличних просторів %*s" +msgstr[3] "%*s/%s kB (100%%), %d/%d табличних просторів %*s" + +#: pg_basebackup.c:836 +#, c-format +msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" +msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" +msgstr[0] "%*s/%s kB (%d%%), %d/%d табличний простір (%s%-*.*s)" +msgstr[1] "%*s/%s kB (%d%%), %d/%d табличних простори (%s%-*.*s)" +msgstr[2] "%*s/%s kB (%d%%), %d/%d табличних просторів (%s%-*.*s)" +msgstr[3] "%*s/%s kB (%d%%), %d/%d табличних просторів (%s%-*.*s)" + +#: pg_basebackup.c:852 +#, c-format +msgid "%*s/%s kB (%d%%), %d/%d tablespace" +msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" +msgstr[0] "%*s/%s kB (%d%%), %d/%d табличний простір" +msgstr[1] "%*s/%s kB (%d%%), %d/%d табличних простори" +msgstr[2] "%*s/%s kB (%d%%), %d/%d табличних просторів" +msgstr[3] "%*s/%s kB (%d%%), %d/%d табличних просторів" + +#: pg_basebackup.c:877 +#, c-format +msgid "transfer rate \"%s\" is not a valid value" +msgstr "частота передач \"%s\" не є припустимим значенням" + +#: pg_basebackup.c:882 +#, c-format +msgid "invalid transfer rate \"%s\": %m" +msgstr "неприпустима частота передач \"%s\": %m" + +#: pg_basebackup.c:891 +#, c-format +msgid "transfer rate must be greater than zero" +msgstr "частота передач повинна бути більша за нуль" + +#: pg_basebackup.c:923 +#, c-format +msgid "invalid --max-rate unit: \"%s\"" +msgstr "неприпустима одиниця виміру в --max-rate: \"%s\"" + +#: pg_basebackup.c:930 +#, c-format +msgid "transfer rate \"%s\" exceeds integer range" +msgstr "швидкість передачі \"%s\" перевищує діапазон цілого числа" + +#: pg_basebackup.c:940 +#, c-format +msgid "transfer rate \"%s\" is out of range" +msgstr "швидкість передавання \"%s\" поза діапазоном" + +#: pg_basebackup.c:961 +#, c-format +msgid "could not get COPY data stream: %s" +msgstr "не вдалося отримати потік даних COPY: %s" + +#: pg_basebackup.c:981 pg_recvlogical.c:435 pg_recvlogical.c:607 +#: receivelog.c:965 +#, c-format +msgid "could not read COPY data: %s" +msgstr "не вдалося прочитати дані COPY: %s" + +#: pg_basebackup.c:1007 +#, c-format +msgid "could not write to compressed file \"%s\": %s" +msgstr "не вдалося записати до стиснутого файлу \"%s\": %s" + +#: pg_basebackup.c:1071 +#, c-format +msgid "could not duplicate stdout: %m" +msgstr "не вдалося дублювати stdout: %m" + +#: pg_basebackup.c:1078 +#, c-format +msgid "could not open output file: %m" +msgstr "не вдалося відкрити вихідний файл: %m" + +#: pg_basebackup.c:1085 pg_basebackup.c:1106 pg_basebackup.c:1135 +#, c-format +msgid "could not set compression level %d: %s" +msgstr "не вдалося встановити рівень стискання %d: %s" + +#: pg_basebackup.c:1155 +#, c-format +msgid "could not create compressed file \"%s\": %s" +msgstr "не вдалося створити стиснутий файл \"%s\": %s" + +#: pg_basebackup.c:1267 +#, c-format +msgid "could not close compressed file \"%s\": %s" +msgstr "не вдалося закрити стиснутий файл \"%s\": %s" + +#: pg_basebackup.c:1279 pg_recvlogical.c:632 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "неможливо закрити файл \"%s\": %m" + +#: pg_basebackup.c:1541 +#, c-format +msgid "COPY stream ended before last file was finished" +msgstr "потік COPY завершився до завершення останнього файлу" + +#: pg_basebackup.c:1570 +#, c-format +msgid "invalid tar block header size: %zu" +msgstr "неприпустимий розмір заголовка блоку tar: %zu" + +#: pg_basebackup.c:1627 +#, c-format +msgid "could not set permissions on directory \"%s\": %m" +msgstr "не вдалося встановити права для каталогу \"%s\": %m" + +#: pg_basebackup.c:1651 +#, c-format +msgid "could not create symbolic link from \"%s\" to \"%s\": %m" +msgstr "не вдалося створити символічне послання з \"%s\" на \"%s\": %m" + +#: pg_basebackup.c:1658 +#, c-format +msgid "unrecognized link indicator \"%c\"" +msgstr "нерозпізнаний індикатор зв'язку \"%c\"" + +#: pg_basebackup.c:1677 +#, c-format +msgid "could not set permissions on file \"%s\": %m" +msgstr "не вдалося встановити права на файл \"%s\": %m" + +#: pg_basebackup.c:1831 +#, c-format +msgid "incompatible server version %s" +msgstr "несумісна версія серверу %s" + +#: pg_basebackup.c:1846 +#, c-format +msgid "HINT: use -X none or -X fetch to disable log streaming" +msgstr "ПІДКАЗКА: використайте -X none або -X fetch, щоб вимкнути потокову передачу журналу" + +#: pg_basebackup.c:1882 +#, c-format +msgid "initiating base backup, waiting for checkpoint to complete" +msgstr "початок базового резервного копіювання, очікується завершення контрольної точки" + +#: pg_basebackup.c:1908 pg_recvlogical.c:262 receivelog.c:481 receivelog.c:530 +#: receivelog.c:569 streamutil.c:297 streamutil.c:370 streamutil.c:422 +#: streamutil.c:533 streamutil.c:578 +#, c-format +msgid "could not send replication command \"%s\": %s" +msgstr "не вдалося відправити реплікаційну команду \"%s\": %s" + +#: pg_basebackup.c:1919 +#, c-format +msgid "could not initiate base backup: %s" +msgstr "не вдалося почати базове резервне копіювання: %s" + +#: pg_basebackup.c:1925 +#, c-format +msgid "server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields" +msgstr "сервер повернув неочікувану відповідь на команду BASE_BACKUP; отримано %d рядків і %d полів, очікувалось %d рядків і %d полів" + +#: pg_basebackup.c:1933 +#, c-format +msgid "checkpoint completed" +msgstr "контрольна точка завершена" + +#: pg_basebackup.c:1948 +#, c-format +msgid "write-ahead log start point: %s on timeline %u" +msgstr "стартова точка у випереджувальному журналюванні: %s на часовій шкалі %u" + +#: pg_basebackup.c:1957 +#, c-format +msgid "could not get backup header: %s" +msgstr "не вдалося отримати заголовок резервної копії: %s" + +#: pg_basebackup.c:1963 +#, c-format +msgid "no data returned from server" +msgstr "сервер не повернув дані" + +#: pg_basebackup.c:1995 +#, c-format +msgid "can only write single tablespace to stdout, database has %d" +msgstr "можна записати лише один табличний простір в stdout, всього їх в базі даних %d" + +#: pg_basebackup.c:2007 +#, c-format +msgid "starting background WAL receiver" +msgstr "запуск фонового процесу зчитування WAL" + +#: pg_basebackup.c:2046 +#, c-format +msgid "could not get write-ahead log end position from server: %s" +msgstr "не вдалося отримати кінцеву позицію у випереджувальному журналюванні з сервера: %s" + +#: pg_basebackup.c:2052 +#, c-format +msgid "no write-ahead log end position returned from server" +msgstr "сервер не повернув кінцеву позицію у випереджувальному журналюванні" + +#: pg_basebackup.c:2057 +#, c-format +msgid "write-ahead log end point: %s" +msgstr "кінцева точка у випереджувальному журналюванні: %s" + +#: pg_basebackup.c:2068 +#, c-format +msgid "checksum error occurred" +msgstr "сталася помилка контрольної суми" + +#: pg_basebackup.c:2073 +#, c-format +msgid "final receive failed: %s" +msgstr "помилка в кінці передачі: %s" + +#: pg_basebackup.c:2097 +#, c-format +msgid "waiting for background process to finish streaming ..." +msgstr "очікування завершення потокового передавання фоновим процесом ..." + +#: pg_basebackup.c:2102 +#, c-format +msgid "could not send command to background pipe: %m" +msgstr "не вдалося надіслати команду до канала фонового процесу: %m" + +#: pg_basebackup.c:2110 +#, c-format +msgid "could not wait for child process: %m" +msgstr "збій при очікуванні дочірнього процесу: %m" + +#: pg_basebackup.c:2115 +#, c-format +msgid "child %d died, expected %d" +msgstr "завершився дочірній процес %d, очікувалося %d" + +#: pg_basebackup.c:2120 streamutil.c:92 +#, c-format +msgid "%s" +msgstr "%s" + +#: pg_basebackup.c:2145 +#, c-format +msgid "could not wait for child thread: %m" +msgstr "неможливо дочекатися дочірнього потоку: %m" + +#: pg_basebackup.c:2151 +#, c-format +msgid "could not get child thread exit status: %m" +msgstr "не можливо отримати статус завершення дочірнього потоку: %m" + +#: pg_basebackup.c:2156 +#, c-format +msgid "child thread exited with error %u" +msgstr "дочірній потік завершився з помилкою %u" + +#: pg_basebackup.c:2184 +#, c-format +msgid "syncing data to disk ..." +msgstr "синхронізація даних з диском ..." + +#: pg_basebackup.c:2209 +#, c-format +msgid "renaming backup_manifest.tmp to backup_manifest" +msgstr "перейменування backup_manifest.tmp в backup_manifest" + +#: pg_basebackup.c:2220 +#, c-format +msgid "base backup completed" +msgstr "базове резервне копіювання завершено" + +#: pg_basebackup.c:2305 +#, c-format +msgid "invalid output format \"%s\", must be \"plain\" or \"tar\"" +msgstr "неприпустимий формат виводу \"%s\", повинен бути \"plain\" або \"tar\"" + +#: pg_basebackup.c:2349 +#, c-format +msgid "invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"" +msgstr "неприпустимий параметр wal-method \"%s\", повинен бути \"fetch\", \"stream\" або \"none\"" + +#: pg_basebackup.c:2377 pg_receivewal.c:580 +#, c-format +msgid "invalid compression level \"%s\"" +msgstr "неприпустимий рівень стискання \"%s\"" + +#: pg_basebackup.c:2388 +#, c-format +msgid "invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"" +msgstr "неприпустимий аргумент контрольної точки \"%s\", повинен бути \"fast\" або \"spread\"" + +#: pg_basebackup.c:2415 pg_receivewal.c:555 pg_recvlogical.c:820 +#, c-format +msgid "invalid status interval \"%s\"" +msgstr "неприпустимий інтервал повідомлень про стан \"%s\"" + +#: pg_basebackup.c:2445 pg_basebackup.c:2458 pg_basebackup.c:2469 +#: pg_basebackup.c:2480 pg_basebackup.c:2488 pg_basebackup.c:2496 +#: pg_basebackup.c:2506 pg_basebackup.c:2519 pg_basebackup.c:2527 +#: pg_basebackup.c:2538 pg_basebackup.c:2548 pg_basebackup.c:2565 +#: pg_basebackup.c:2573 pg_basebackup.c:2581 pg_receivewal.c:605 +#: pg_receivewal.c:618 pg_receivewal.c:626 pg_receivewal.c:636 +#: pg_receivewal.c:644 pg_receivewal.c:655 pg_recvlogical.c:846 +#: pg_recvlogical.c:859 pg_recvlogical.c:870 pg_recvlogical.c:878 +#: pg_recvlogical.c:886 pg_recvlogical.c:894 pg_recvlogical.c:902 +#: pg_recvlogical.c:910 pg_recvlogical.c:918 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" + +#: pg_basebackup.c:2456 pg_receivewal.c:616 pg_recvlogical.c:857 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "забагато аргументів у командному рядку (перший \"%s\")" + +#: pg_basebackup.c:2468 pg_receivewal.c:654 +#, c-format +msgid "no target directory specified" +msgstr "цільовий каталог не вказано" + +#: pg_basebackup.c:2479 +#, c-format +msgid "only tar mode backups can be compressed" +msgstr "лише резервні копії в архіві tar можуть стискатись" + +#: pg_basebackup.c:2487 +#, c-format +msgid "cannot stream write-ahead logs in tar mode to stdout" +msgstr "транслювати випереджувальні журналювання в режимі tar в потік stdout не можна" + +#: pg_basebackup.c:2495 +#, c-format +msgid "replication slots can only be used with WAL streaming" +msgstr "слоти реплікації можуть використовуватись тільки з потоковим передаванням WAL" + +#: pg_basebackup.c:2505 +#, c-format +msgid "--no-slot cannot be used with slot name" +msgstr "--no-slot не можна використовувати з іменем слота" + +#. translator: second %s is an option name +#: pg_basebackup.c:2517 pg_receivewal.c:634 +#, c-format +msgid "%s needs a slot to be specified using --slot" +msgstr "для %s потрібно вказати слот за допомогою --slot" + +#: pg_basebackup.c:2526 +#, c-format +msgid "--create-slot and --no-slot are incompatible options" +msgstr "параметри --create-slot і --no-slot несумісні" + +#: pg_basebackup.c:2537 +#, c-format +msgid "WAL directory location can only be specified in plain mode" +msgstr "розташування каталога WAL можна вказати лише в режимі plain" + +#: pg_basebackup.c:2547 +#, c-format +msgid "WAL directory location must be an absolute path" +msgstr "розташування WAL каталогу має бути абсолютним шляхом" + +#: pg_basebackup.c:2557 pg_receivewal.c:663 +#, c-format +msgid "this build does not support compression" +msgstr "ця збірка не підтримує стискання" + +#: pg_basebackup.c:2564 +#, c-format +msgid "--progress and --no-estimate-size are incompatible options" +msgstr "--progress і --no-estimate-size є несумісними параметрами" + +#: pg_basebackup.c:2572 +#, c-format +msgid "--no-manifest and --manifest-checksums are incompatible options" +msgstr "--no-manifest і --manifest-checksums є несумісними параметрами" + +#: pg_basebackup.c:2580 +#, c-format +msgid "--no-manifest and --manifest-force-encode are incompatible options" +msgstr "--no-manifest і --manifest-force-encode є несумісними параметрами" + +#: pg_basebackup.c:2639 +#, c-format +msgid "could not create symbolic link \"%s\": %m" +msgstr "не вдалося створити символічне послання \"%s\": %m" + +#: pg_basebackup.c:2643 +#, c-format +msgid "symlinks are not supported on this platform" +msgstr "символічні посилання не підтримуються цією платформою" + +#: pg_receivewal.c:77 +#, c-format +msgid "%s receives PostgreSQL streaming write-ahead logs.\n\n" +msgstr "%s отримує передачу випереджувальних журналів PostgreSQL.\n\n" + +#: pg_receivewal.c:81 pg_recvlogical.c:81 +#, c-format +msgid "\n" +"Options:\n" +msgstr "\n" +"Параметри:\n" + +#: pg_receivewal.c:82 +#, c-format +msgid " -D, --directory=DIR receive write-ahead log files into this directory\n" +msgstr " -D, --directory=DIR зберігати файли випереджувального журналювання до цього каталогу\n" + +#: pg_receivewal.c:83 pg_recvlogical.c:82 +#, c-format +msgid " -E, --endpos=LSN exit after receiving the specified LSN\n" +msgstr " -E, --endpos=LSN вийти після отримання вказаного LSN\n" + +#: pg_receivewal.c:84 pg_recvlogical.c:86 +#, c-format +msgid " --if-not-exists do not error if slot already exists when creating a slot\n" +msgstr " --if-not-exists не видавати помилку, при створенні слота, якщо слот вже існує\n" + +#: pg_receivewal.c:85 pg_recvlogical.c:88 +#, c-format +msgid " -n, --no-loop do not loop on connection lost\n" +msgstr " -n, --no-loop переривати роботу при втраті підключення\n" + +#: pg_receivewal.c:86 +#, c-format +msgid " --no-sync do not wait for changes to be written safely to disk\n" +msgstr " --no-sync не чекати безпечного збереження змін на диск\n" + +#: pg_receivewal.c:87 pg_recvlogical.c:93 +#, c-format +msgid " -s, --status-interval=SECS\n" +" time between status packets sent to server (default: %d)\n" +msgstr " -s, --status-interval=SECS\n" +" інтервал між відправкою статусних пакетів серверу (за замовчуванням: %d)\n" + +#: pg_receivewal.c:90 +#, c-format +msgid " --synchronous flush write-ahead log immediately after writing\n" +msgstr " --synchronous очистити випереджувальне журналювання відразу після запису\n" + +#: pg_receivewal.c:93 +#, c-format +msgid " -Z, --compress=0-9 compress logs with given compression level\n" +msgstr " -Z, --compress=0-9 стискати журнали заданим рівнем стискання\n" + +#: pg_receivewal.c:102 +#, c-format +msgid "\n" +"Optional actions:\n" +msgstr "\n" +"Додаткові дії:\n" + +#: pg_receivewal.c:103 pg_recvlogical.c:78 +#, c-format +msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" +msgstr " --create-slot створити новий слот реплікації (ім'я слота задає параметр --slot)\n" + +#: pg_receivewal.c:104 pg_recvlogical.c:79 +#, c-format +msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" +msgstr " --drop-slot видалити слот реплікації (ім'я слота задає параметр --slot)\n" + +#: pg_receivewal.c:117 +#, c-format +msgid "finished segment at %X/%X (timeline %u)" +msgstr "завершено сегмент в позиції %X/%X (часова шкала %u)" + +#: pg_receivewal.c:124 +#, c-format +msgid "stopped log streaming at %X/%X (timeline %u)" +msgstr "зупинено потокове передавання журналу в позиції %X/%X (часова шкала %u)" + +#: pg_receivewal.c:140 +#, c-format +msgid "switched to timeline %u at %X/%X" +msgstr "переключено на часову шкалу %u в позиції %X/%X" + +#: pg_receivewal.c:150 +#, c-format +msgid "received interrupt signal, exiting" +msgstr "отримано сигнал переривання, завершення роботи" + +#: pg_receivewal.c:186 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "не вдалося закрити каталог \"%s\": %m" + +#: pg_receivewal.c:272 +#, c-format +msgid "segment file \"%s\" has incorrect size %d, skipping" +msgstr "файл сегмента \"%s\" має неправильний розмір %d, пропускається" + +#: pg_receivewal.c:290 +#, c-format +msgid "could not open compressed file \"%s\": %m" +msgstr "не вдалося відкрити стиснутий файл \"%s\": %m" + +#: pg_receivewal.c:296 +#, c-format +msgid "could not seek in compressed file \"%s\": %m" +msgstr "не вдалося знайти в стиснутому файлі \"%s\": %m" + +#: pg_receivewal.c:304 +#, c-format +msgid "could not read compressed file \"%s\": %m" +msgstr "не вдалося прочитати стиснутий файл \"%s\": %m" + +#: pg_receivewal.c:307 +#, c-format +msgid "could not read compressed file \"%s\": read %d of %zu" +msgstr "не вдалося прочитати стиснутий файл \"%s\": прочитано %d з %zu" + +#: pg_receivewal.c:318 +#, c-format +msgid "compressed segment file \"%s\" has incorrect uncompressed size %d, skipping" +msgstr "файл стиснутого сегменту \"%s\" має неправильний розмір без стискання %d, пропускається" + +#: pg_receivewal.c:422 +#, c-format +msgid "starting log streaming at %X/%X (timeline %u)" +msgstr "початок потокового передавання журналу в позиції %X/%X (часова шкала %u)" + +#: pg_receivewal.c:537 pg_recvlogical.c:762 +#, c-format +msgid "invalid port number \"%s\"" +msgstr "неприпустимий номер порту \"%s\"" + +#: pg_receivewal.c:565 pg_recvlogical.c:788 +#, c-format +msgid "could not parse end position \"%s\"" +msgstr "не вдалося проаналізувати кінцеву позицію \"%s\"" + +#: pg_receivewal.c:625 +#, c-format +msgid "cannot use --create-slot together with --drop-slot" +msgstr "використовувати --create-slot разом з --drop-slot не можна" + +#: pg_receivewal.c:643 +#, c-format +msgid "cannot use --synchronous together with --no-sync" +msgstr "використовувати --synchronous разом з --no-sync не можна" + +#: pg_receivewal.c:719 +#, c-format +msgid "replication connection using slot \"%s\" is unexpectedly database specific" +msgstr "підключення для реплікації з використанням слоту \"%s\" неочікувано виявилось прив'язаним до бази даних" + +#: pg_receivewal.c:730 pg_recvlogical.c:966 +#, c-format +msgid "dropping replication slot \"%s\"" +msgstr "видалення слоту реплікації \"%s\"" + +#: pg_receivewal.c:741 pg_recvlogical.c:976 +#, c-format +msgid "creating replication slot \"%s\"" +msgstr "створення слоту реплікації \"%s\"" + +#: pg_receivewal.c:767 pg_recvlogical.c:1001 +#, c-format +msgid "disconnected" +msgstr "роз’єднано" + +#. translator: check source for value for %d +#: pg_receivewal.c:773 pg_recvlogical.c:1007 +#, c-format +msgid "disconnected; waiting %d seconds to try again" +msgstr "роз’єднано; через %d секунд буде повторна спроба" + +#: pg_recvlogical.c:73 +#, c-format +msgid "%s controls PostgreSQL logical decoding streams.\n\n" +msgstr "%s керує потоковими передаваннями логічного декодування PostgreSQL.\n\n" + +#: pg_recvlogical.c:77 +#, c-format +msgid "\n" +"Action to be performed:\n" +msgstr "\n" +"Дія до виконання:\n" + +#: pg_recvlogical.c:80 +#, c-format +msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" +msgstr " --start почати потокове передавання в слоті реплікації (ім'я слоту задає параметр --slot)\n" + +#: pg_recvlogical.c:83 +#, c-format +msgid " -f, --file=FILE receive log into this file, - for stdout\n" +msgstr " -f, --file=FILE зберігати журнал до цього файлу, - позначає stdout\n" + +#: pg_recvlogical.c:84 +#, c-format +msgid " -F --fsync-interval=SECS\n" +" time between fsyncs to the output file (default: %d)\n" +msgstr " -F --fsync-interval=SECS\n" +" час між fsyncs до файлу виводу (за замовчуванням: %d)\n" + +#: pg_recvlogical.c:87 +#, c-format +msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" +msgstr " -I, --startpos=LSN де в існуючому слоті слід почати потокове передавання\n" + +#: pg_recvlogical.c:89 +#, c-format +msgid " -o, --option=NAME[=VALUE]\n" +" pass option NAME with optional value VALUE to the\n" +" output plugin\n" +msgstr " -o, --option=NAME[=VALUE]\n" +" передати параметр NAME з додатковим значенням VALUE до\n" +" плагіну виводу\n" + +#: pg_recvlogical.c:92 +#, c-format +msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" +msgstr " -P, --plugin=PLUGIN використовувати плагін виводу PLUGIN (за замовчуванням: %s)\n" + +#: pg_recvlogical.c:95 +#, c-format +msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" +msgstr " -S, --slot=SLOTNAME ім'я слоту логічної реплікації\n" + +#: pg_recvlogical.c:100 +#, c-format +msgid " -d, --dbname=DBNAME database to connect to\n" +msgstr " -d, --dbname=DBNAME бази даних для підключення\n" + +#: pg_recvlogical.c:133 +#, c-format +msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" +msgstr "підтвердження запису до %X/%X, очищення до %X/%X (слот %s)" + +#: pg_recvlogical.c:157 receivelog.c:343 +#, c-format +msgid "could not send feedback packet: %s" +msgstr "не вдалося відправити пакет зворотнього зв'язку: %s" + +#: pg_recvlogical.c:230 +#, c-format +msgid "starting log streaming at %X/%X (slot %s)" +msgstr "початок потокового передавання журналу в позиції %X/%X (слот %s)" + +#: pg_recvlogical.c:271 +#, c-format +msgid "streaming initiated" +msgstr "потокове передавання ініційовано" + +#: pg_recvlogical.c:335 +#, c-format +msgid "could not open log file \"%s\": %m" +msgstr "не вдалося відкрити файл протоколу \"%s\": %m" + +#: pg_recvlogical.c:361 receivelog.c:873 +#, c-format +msgid "invalid socket: %s" +msgstr "неприпустимий сокет: %s" + +#: pg_recvlogical.c:414 receivelog.c:901 +#, c-format +msgid "select() failed: %m" +msgstr "помилка в select(): %m" + +#: pg_recvlogical.c:421 receivelog.c:951 +#, c-format +msgid "could not receive data from WAL stream: %s" +msgstr "не вдалося отримати дані з WAL потоку: %s" + +#: pg_recvlogical.c:463 pg_recvlogical.c:514 receivelog.c:995 receivelog.c:1061 +#, c-format +msgid "streaming header too small: %d" +msgstr "заголовок потокового передавання занадто малий: %d" + +#: pg_recvlogical.c:498 receivelog.c:833 +#, c-format +msgid "unrecognized streaming header: \"%c\"" +msgstr "нерозпізнаний заголовок потокового передавання: \"%c\"" + +#: pg_recvlogical.c:552 pg_recvlogical.c:564 +#, c-format +msgid "could not write %u bytes to log file \"%s\": %m" +msgstr "не вдалося записати %u байт до файлу журналу \"%s\": %m" + +#: pg_recvlogical.c:618 receivelog.c:629 receivelog.c:666 +#, c-format +msgid "unexpected termination of replication stream: %s" +msgstr "неочікуване завершення роботи потоку реплікації: %s" + +#: pg_recvlogical.c:742 +#, c-format +msgid "invalid fsync interval \"%s\"" +msgstr "неприпустимий інтервал fsync \"%s\"" + +#: pg_recvlogical.c:780 +#, c-format +msgid "could not parse start position \"%s\"" +msgstr "не вдалося аналізувати початкову позицію \"%s\"" + +#: pg_recvlogical.c:869 +#, c-format +msgid "no slot specified" +msgstr "слот не вказано" + +#: pg_recvlogical.c:877 +#, c-format +msgid "no target file specified" +msgstr "цільовий файл не вказано" + +#: pg_recvlogical.c:885 +#, c-format +msgid "no database specified" +msgstr "база даних не вказана" + +#: pg_recvlogical.c:893 +#, c-format +msgid "at least one action needs to be specified" +msgstr "необхідно вказати щонайменше одну дію" + +#: pg_recvlogical.c:901 +#, c-format +msgid "cannot use --create-slot or --start together with --drop-slot" +msgstr "використовувати --create-slot або --start разом з --drop-slot не можна" + +#: pg_recvlogical.c:909 +#, c-format +msgid "cannot use --create-slot or --drop-slot together with --startpos" +msgstr "використовувати --create-slot або --drop-slot разом з --startpos не можна" + +#: pg_recvlogical.c:917 +#, c-format +msgid "--endpos may only be specified with --start" +msgstr "--endpos можна вказати лише з --start" + +#: pg_recvlogical.c:948 +#, c-format +msgid "could not establish database-specific replication connection" +msgstr "не вдалося встановити підключення для реплікації до вказаної бази даних" + +#: pg_recvlogical.c:1047 +#, c-format +msgid "end position %X/%X reached by keepalive" +msgstr "кінцева позиція %X/%X досягнута наживо" + +#: pg_recvlogical.c:1050 +#, c-format +msgid "end position %X/%X reached by WAL record at %X/%X" +msgstr "кінцева позиція %X/%X досягнута WAL записом %X/%X" + +#: receivelog.c:69 +#, c-format +msgid "could not create archive status file \"%s\": %s" +msgstr "не вдалося створити файл статусу архіву \"%s\": %s" + +#: receivelog.c:116 +#, c-format +msgid "could not get size of write-ahead log file \"%s\": %s" +msgstr "не вдалося отримати розмір файлу випереджувального журналювання \"%s\": %s" + +#: receivelog.c:126 +#, c-format +msgid "could not open existing write-ahead log file \"%s\": %s" +msgstr "не вдалося відкрити існуючий файл випереджувального журналювання \"%s\": %s" + +#: receivelog.c:134 +#, c-format +msgid "could not fsync existing write-ahead log file \"%s\": %s" +msgstr "не вдалося fsync існуючий файл випереджувального журналювання \"%s\": %s" + +#: receivelog.c:148 +#, c-format +msgid "write-ahead log file \"%s\" has %d byte, should be 0 or %d" +msgid_plural "write-ahead log file \"%s\" has %d bytes, should be 0 or %d" +msgstr[0] "файл випереджувального журналювання \"%s\" має %d байт, а повинен мати 0 або %d" +msgstr[1] "файл випереджувального журналювання \"%s\" має %d байти, а повинен мати 0 або %d" +msgstr[2] "файл випереджувального журналювання \"%s\" має %d байтів, а повинен мати 0 або %d" +msgstr[3] "файл випереджувального журналювання \"%s\" має %d байтів, а повинен мати 0 або %d" + +#: receivelog.c:163 +#, c-format +msgid "could not open write-ahead log file \"%s\": %s" +msgstr "не вдалося відкрити файл випереджувального журналювання \"%s\": %s" + +#: receivelog.c:189 +#, c-format +msgid "could not determine seek position in file \"%s\": %s" +msgstr "не вдалося визначити позицію у файлі \"%s\": %s" + +#: receivelog.c:203 +#, c-format +msgid "not renaming \"%s%s\", segment is not complete" +msgstr "не перейменовується \"%s%s\", сегмент не завершено" + +#: receivelog.c:215 receivelog.c:300 receivelog.c:675 +#, c-format +msgid "could not close file \"%s\": %s" +msgstr "не вдалося закрити файл \"%s\": %s" + +#: receivelog.c:272 +#, c-format +msgid "server reported unexpected history file name for timeline %u: %s" +msgstr "сервер повідомив неочікуване ім'я файлу історії часової шкали %u: %s" + +#: receivelog.c:280 +#, c-format +msgid "could not create timeline history file \"%s\": %s" +msgstr "не вдалося створити файл історії часової шкали \"%s\": %s" + +#: receivelog.c:287 +#, c-format +msgid "could not write timeline history file \"%s\": %s" +msgstr "не вдалося записати файл історії часової шкали \"%s\": %s" + +#: receivelog.c:377 +#, c-format +msgid "incompatible server version %s; client does not support streaming from server versions older than %s" +msgstr "несумісна версія серверу %s; клієнт не підтримує потокове передавання з версій серверу старіших, ніж %s" + +#: receivelog.c:386 +#, c-format +msgid "incompatible server version %s; client does not support streaming from server versions newer than %s" +msgstr "несумісна версія серверу %s; клієнт не підтримує потокове передавання з версій серверу новіших, ніж %s" + +#: receivelog.c:488 streamutil.c:430 streamutil.c:467 +#, c-format +msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" +msgstr "не вдалося ідентифікувати систему: отримано %d рядків і %d полів, очікувалось %d рядків і %d або більше полів" + +#: receivelog.c:495 +#, c-format +msgid "system identifier does not match between base backup and streaming connection" +msgstr "системний ідентифікатор базової резервної копії не відповідає ідентифікатору потокового передавання підключення" + +#: receivelog.c:501 +#, c-format +msgid "starting timeline %u is not present in the server" +msgstr "початкова часова шкала %u не існує на сервері" + +#: receivelog.c:542 +#, c-format +msgid "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields" +msgstr "неочікувана відповідь на команду TIMELINE_HISTORY: отримано %d рядків і %d полів, очікувалось %d рядків і %d полів" + +#: receivelog.c:613 +#, c-format +msgid "server reported unexpected next timeline %u, following timeline %u" +msgstr "сервер неочікувано повідомив наступну часову шкалу %u після часової шкали %u" + +#: receivelog.c:619 +#, c-format +msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X" +msgstr "сервер зупинив потокове передавання часової шкали %u в позиції %X/%X, але повідомив, що наступна часова шкала %u почнеться в позиції %X/%X" + +#: receivelog.c:659 +#, c-format +msgid "replication stream was terminated before stop point" +msgstr "потік реплікації перервано до точки зупинки" + +#: receivelog.c:705 +#, c-format +msgid "unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields" +msgstr "неочікуваний набір результатів після кінця часової шкали: отримано %d рядків і %d полів, очікувалось %d рядків і %d полів" + +#: receivelog.c:714 +#, c-format +msgid "could not parse next timeline's starting point \"%s\"" +msgstr "не вдалося аналізувати початкову точку наступної часової шкали \"%s\"" + +#: receivelog.c:763 receivelog.c:1015 +#, c-format +msgid "could not fsync file \"%s\": %s" +msgstr "не вдалося fsync файл \"%s\": %s" + +#: receivelog.c:1078 +#, c-format +msgid "received write-ahead log record for offset %u with no file open" +msgstr "отримано запис випереджувального журналювання для зсуву %u з закритим файлом" + +#: receivelog.c:1088 +#, c-format +msgid "got WAL data offset %08x, expected %08x" +msgstr "отримано дані зсуву WAL %08x, очікувалось %08x" + +#: receivelog.c:1122 +#, c-format +msgid "could not write %u bytes to WAL file \"%s\": %s" +msgstr "не вдалося записати %u байт до файла WAL \"%s\": %s" + +#: receivelog.c:1147 receivelog.c:1187 receivelog.c:1218 +#, c-format +msgid "could not send copy-end packet: %s" +msgstr "не вдалося відправити пакет кінця копіювання \"copy-end\": %s" + +#: streamutil.c:160 +msgid "Password: " +msgstr "Пароль: " + +#: streamutil.c:185 +#, c-format +msgid "could not connect to server" +msgstr "не вдалося підключитись до серверу" + +#: streamutil.c:202 +#, c-format +msgid "could not connect to server: %s" +msgstr "не вдалося підключитися до сервера: %s" + +#: streamutil.c:231 +#, c-format +msgid "could not clear search_path: %s" +msgstr "не вдалося очистити search_path: %s" + +#: streamutil.c:247 +#, c-format +msgid "could not determine server setting for integer_datetimes" +msgstr "не вдалося визначити настроювання серверу для integer_datetimes" + +#: streamutil.c:254 +#, c-format +msgid "integer_datetimes compile flag does not match server" +msgstr "параметри компіляції integer_datetimes не відповідають серверу" + +#: streamutil.c:305 +#, c-format +msgid "could not fetch WAL segment size: got %d rows and %d fields, expected %d rows and %d or more fields" +msgstr "не вдалося отримати розмір сегменту WAL: отримано %d рядків і %d полів, очікувалось %d рядків і %d або більше полів" + +#: streamutil.c:315 +#, c-format +msgid "WAL segment size could not be parsed" +msgstr "не вдалося аналізувати розмір сегмента WAL" + +#: streamutil.c:333 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d bytes" +msgstr[0] "Розмір сегменту WAL повинен бути двійкою, піднесеною до степеня в інтервалі між 1 МБ і 1 ГБ, але віддалений сервер повідомив значення %d байт" +msgstr[1] "Розмір сегменту WAL повинен бути двійкою, піднесеною до степеня в інтервалі між 1 МБ і 1 ГБ, але віддалений сервер повідомив значення %d байти" +msgstr[2] "Розмір сегменту WAL повинен бути двійкою, піднесеною до степеня в інтервалі між 1 МБ і 1 ГБ, але віддалений сервер повідомив значення %d байтів" +msgstr[3] "Розмір сегменту WAL повинен бути двійкою, піднесеною до степеня в інтервалі між 1 МБ і 1 ГБ, але віддалений сервер повідомив значення %d байтів" + +#: streamutil.c:378 +#, c-format +msgid "could not fetch group access flag: got %d rows and %d fields, expected %d rows and %d or more fields" +msgstr "не вдалося вилучити позначку доступа групи: отримано %d рядків і %d полів, очікувалось %d рядків і %d або більше полів" + +#: streamutil.c:387 +#, c-format +msgid "group access flag could not be parsed: %s" +msgstr "не вдалося аналізувати позначку доступа групи: %s" + +#: streamutil.c:544 +#, c-format +msgid "could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" +msgstr "не вдалося створити слот реплікації \"%s\": отримано %d рядків і %d полів, очікувалось %d рядків і %d полів" + +#: streamutil.c:588 +#, c-format +msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" +msgstr "не вдалося видалити слот реплікації \"%s\": отримано %d рядків і %d полів, очікувалось %d рядків і %d полів" + +#: walmethods.c:438 walmethods.c:927 +msgid "could not compress data" +msgstr "не вдалося стиснути дані" + +#: walmethods.c:470 +msgid "could not reset compression stream" +msgstr "не вдалося скинути потік стискання" + +#: walmethods.c:568 +msgid "could not initialize compression library" +msgstr "не вдалося ініціалізувати бібліотеку стискання" + +#: walmethods.c:580 +msgid "implementation error: tar files can't have more than one open file" +msgstr "помилка реалізації: файли tar не можуть мати більше одного відкритого файлу" + +#: walmethods.c:594 +msgid "could not create tar header" +msgstr "не вдалося створити заголовок tar" + +#: walmethods.c:608 walmethods.c:648 walmethods.c:843 walmethods.c:854 +msgid "could not change compression parameters" +msgstr "не вдалося змінити параметри стискання" + +#: walmethods.c:730 +msgid "unlink not supported with compression" +msgstr "unink не підтримується зі стисканням" + +#: walmethods.c:952 +msgid "could not close compression stream" +msgstr "не вдалося закрити потік стискання" + diff --git a/src/bin/pg_checksums/nls.mk b/src/bin/pg_checksums/nls.mk index f0532d81f1c28..28a1e8182ad4f 100644 --- a/src/bin/pg_checksums/nls.mk +++ b/src/bin/pg_checksums/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_checksums/nls.mk CATALOG_NAME = pg_checksums -AVAIL_LANGUAGES = cs de es fr ja ko ru sv tr +AVAIL_LANGUAGES = cs de es fr ja ko ru sv tr uk zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) pg_checksums.c GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) diff --git a/src/bin/pg_checksums/po/cs.po b/src/bin/pg_checksums/po/cs.po index e928e572d6e4e..df56be82bbf25 100644 --- a/src/bin/pg_checksums/po/cs.po +++ b/src/bin/pg_checksums/po/cs.po @@ -7,27 +7,27 @@ msgid "" msgstr "" "Project-Id-Version: pg_checksums (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:15+0000\n" -"PO-Revision-Date: 2019-09-27 17:23+0200\n" +"POT-Creation-Date: 2020-10-31 16:17+0000\n" +"PO-Revision-Date: 2020-10-31 21:31+0100\n" +"Last-Translator: \n" +"Language-Team: \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Last-Translator: \n" -"Language-Team: \n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "warning: " @@ -125,180 +125,188 @@ msgstr "" #: pg_checksums.c:91 #, c-format -msgid "Report bugs to .\n" -msgstr "Chyby hlaste na adresu .\n" +msgid "Report bugs to <%s>.\n" +msgstr "Chyby hlašte na <%s>.\n" + +#: pg_checksums.c:92 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" -#: pg_checksums.c:149 +#: pg_checksums.c:161 #, c-format msgid "%*s/%s MB (%d%%) computed" msgstr "%*s/%s MB (%d%%) zpracováno" -#: pg_checksums.c:186 +#: pg_checksums.c:207 #, c-format msgid "could not open file \"%s\": %m" msgstr "nelze otevřít soubor \"%s\": %m" -#: pg_checksums.c:202 +#: pg_checksums.c:223 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "nelze přečíst blok %u v souboru \"%s\": %m" -#: pg_checksums.c:205 +#: pg_checksums.c:226 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "nelze přečíst blok %u v souboru \"%s\": načteno %d z %d" -#: pg_checksums.c:222 +#: pg_checksums.c:243 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" msgstr "ověření kontrolnícou součtů selhalo v souboru \"%s\", blok %u: spočtený kontrolní součet %X ale klok obsahuje %X" -#: pg_checksums.c:237 +#: pg_checksums.c:258 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "nastavení pozice (seek) selhalo pro blok %u v souboru \"%s\": %m" -#: pg_checksums.c:246 +#: pg_checksums.c:267 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "nelze zapsat blok %u v souboru \"%s\": %m" -#: pg_checksums.c:249 +#: pg_checksums.c:270 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "nelze zapsat blok %u v souboru \"%s\": zapsáno %d z %d" -#: pg_checksums.c:262 +#: pg_checksums.c:283 #, c-format msgid "checksums verified in file \"%s\"" msgstr "kontrolní součty ověřeny v souboru \"%s\"" -#: pg_checksums.c:264 +#: pg_checksums.c:285 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "kontrolní součty zapnuty v souboru \"%s\"" -#: pg_checksums.c:289 +#: pg_checksums.c:310 #, c-format msgid "could not open directory \"%s\": %m" msgstr "nelze otevřít adresář \"%s\": %m" -#: pg_checksums.c:316 +#: pg_checksums.c:337 pg_checksums.c:416 #, c-format msgid "could not stat file \"%s\": %m" msgstr "nelze načíst informace o souboru \"%s\": %m" -#: pg_checksums.c:343 +#: pg_checksums.c:364 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "chybné číslo segmentu %d ve jménu souboru \"%s\"" -#: pg_checksums.c:431 +#: pg_checksums.c:497 #, c-format msgid "invalid filenode specification, must be numeric: %s" msgstr "chybně zadaný filenode, vyžadována číselná hodnota: %s" -#: pg_checksums.c:449 pg_checksums.c:465 pg_checksums.c:475 pg_checksums.c:484 +#: pg_checksums.c:515 pg_checksums.c:531 pg_checksums.c:541 pg_checksums.c:550 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" -#: pg_checksums.c:464 +#: pg_checksums.c:530 #, c-format msgid "no data directory specified" msgstr "datový adresář nebyl zadán" -#: pg_checksums.c:473 +#: pg_checksums.c:539 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "příliš mnoho parametrů na příkazové řádce (první je \"%s\")" -#: pg_checksums.c:483 +#: pg_checksums.c:549 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "volba -f/--filenode může být použita pouze s volbou --check" -#: pg_checksums.c:493 +#: pg_checksums.c:559 #, c-format msgid "pg_control CRC value is incorrect" msgstr "pg_control CRC hodnota je neplatná" -#: pg_checksums.c:499 +#: pg_checksums.c:565 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "cluster není kompatibilní s touto verzí pg_checksums" -#: pg_checksums.c:505 +#: pg_checksums.c:571 #, c-format msgid "database cluster is not compatible" msgstr "databázový cluster není kompatibilní" -#: pg_checksums.c:506 +#: pg_checksums.c:572 #, c-format msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u.\n" msgstr "Databázový cluster byl inicializován s bloky velikosti %u, ale pg_checksums byl zkompilován pro velikost bloku %u.\n" -#: pg_checksums.c:519 +#: pg_checksums.c:585 #, c-format msgid "cluster must be shut down" msgstr "cluster musí být vypnutý" -#: pg_checksums.c:526 +#: pg_checksums.c:592 #, c-format msgid "data checksums are not enabled in cluster" msgstr "kontrolní součty nejsou v clusteru zapnuty" -#: pg_checksums.c:533 +#: pg_checksums.c:599 #, c-format msgid "data checksums are already disabled in cluster" msgstr "kontrolní součty jsou v clusteru již vypnuty" -#: pg_checksums.c:540 +#: pg_checksums.c:606 #, c-format msgid "data checksums are already enabled in cluster" msgstr "kontrolní součty jsou v clusteru již zapnuty" -#: pg_checksums.c:569 +#: pg_checksums.c:632 #, c-format msgid "Checksum operation completed\n" msgstr "Operace s kontrolními součty dokončena\n" -#: pg_checksums.c:570 +#: pg_checksums.c:633 #, c-format msgid "Files scanned: %s\n" msgstr "Souborů přečteno: %s\n" -#: pg_checksums.c:571 +#: pg_checksums.c:634 #, c-format msgid "Blocks scanned: %s\n" msgstr "Přečtené datové bloky: %s\n" -#: pg_checksums.c:574 +#: pg_checksums.c:637 #, c-format msgid "Bad checksums: %s\n" msgstr "Chybné kontrolní součty: %s\n" -#: pg_checksums.c:575 pg_checksums.c:602 +#: pg_checksums.c:638 pg_checksums.c:665 #, c-format msgid "Data checksum version: %d\n" msgstr "Verze kontrolních součtů: %d\n" -#: pg_checksums.c:594 +#: pg_checksums.c:657 #, c-format msgid "syncing data directory" msgstr "provádím sync datového adresáře" -#: pg_checksums.c:598 +#: pg_checksums.c:661 #, c-format msgid "updating control file" msgstr "aktualizuji control coubor" -#: pg_checksums.c:604 +#: pg_checksums.c:667 #, c-format msgid "Checksums enabled in cluster\n" msgstr "Kontrolní součty zapnuty v clusteru\n" -#: pg_checksums.c:606 +#: pg_checksums.c:669 #, c-format msgid "Checksums disabled in cluster\n" msgstr "Kontrolní součty vypnuty v clusteru\n" + +#~ msgid "Report bugs to .\n" +#~ msgstr "Chyby hlaste na adresu .\n" diff --git a/src/bin/pg_checksums/po/de.po b/src/bin/pg_checksums/po/de.po index fb0f06a30ec37..d30fb2bd5564e 100644 --- a/src/bin/pg_checksums/po/de.po +++ b/src/bin/pg_checksums/po/de.po @@ -1,14 +1,14 @@ # German message translation file for pg_checksums -# Copyright (C) 2020 PostgreSQL Global Development Group +# Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Peter Eisentraut , 2018 - 2020. +# Peter Eisentraut , 2018 - 2021. # msgid "" msgstr "" "Project-Id-Version: PostgreSQL 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-04-09 10:17+0000\n" -"PO-Revision-Date: 2020-04-09 15:12+0200\n" +"POT-Creation-Date: 2021-01-12 03:47+0000\n" +"PO-Revision-Date: 2021-01-12 09:21+0100\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -139,127 +139,127 @@ msgstr "%s Homepage: <%s>\n" msgid "%*s/%s MB (%d%%) computed" msgstr "%*s/%s MB (%d%%) berechnet" -#: pg_checksums.c:204 +#: pg_checksums.c:207 #, c-format msgid "could not open file \"%s\": %m" msgstr "konnte Datei »%s« nicht öffnen: %m" -#: pg_checksums.c:220 +#: pg_checksums.c:223 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "konnte Block %u in Datei »%s« nicht lesen: %m" -#: pg_checksums.c:223 +#: pg_checksums.c:226 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "konnte Block %u in Datei »%s« nicht lesen: %d von %d gelesen" -#: pg_checksums.c:240 +#: pg_checksums.c:243 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" msgstr "Prüfsummenprüfung fehlgeschlagen in Datei »%s«, Block %u: berechnete Prüfsumme ist %X, aber der Block enthält %X" -#: pg_checksums.c:255 +#: pg_checksums.c:258 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "seek fehlgeschlagen für Block %u in Datei »%s«: %m" -#: pg_checksums.c:264 +#: pg_checksums.c:267 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "konnte Block %u in Datei »%s« nicht schreiben: %m" -#: pg_checksums.c:267 +#: pg_checksums.c:270 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "konnte Block %u in Datei »%s« nicht schreiben: %d von %d geschrieben" -#: pg_checksums.c:280 +#: pg_checksums.c:283 #, c-format msgid "checksums verified in file \"%s\"" msgstr "Prüfsummen wurden überprüft in Datei »%s«" -#: pg_checksums.c:282 +#: pg_checksums.c:285 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "Prüfsummen wurden eingeschaltet in Datei »%s«" -#: pg_checksums.c:307 +#: pg_checksums.c:310 #, c-format msgid "could not open directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht öffnen: %m" -#: pg_checksums.c:334 pg_checksums.c:413 +#: pg_checksums.c:337 pg_checksums.c:416 #, c-format msgid "could not stat file \"%s\": %m" msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" -#: pg_checksums.c:361 +#: pg_checksums.c:364 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "ungültige Segmentnummer %d in Dateiname »%s«" -#: pg_checksums.c:494 +#: pg_checksums.c:497 #, c-format msgid "invalid filenode specification, must be numeric: %s" msgstr "ungültige Relfilenode-Angabe, muss numerisch sein: %s" -#: pg_checksums.c:512 pg_checksums.c:528 pg_checksums.c:538 pg_checksums.c:547 +#: pg_checksums.c:515 pg_checksums.c:531 pg_checksums.c:541 pg_checksums.c:550 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: pg_checksums.c:527 +#: pg_checksums.c:530 #, c-format msgid "no data directory specified" msgstr "kein Datenverzeichnis angegeben" -#: pg_checksums.c:536 +#: pg_checksums.c:539 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" -#: pg_checksums.c:546 +#: pg_checksums.c:549 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "Option -f/--filenode kann nur mit --check verwendet werden" -#: pg_checksums.c:556 +#: pg_checksums.c:559 #, c-format msgid "pg_control CRC value is incorrect" msgstr "CRC-Wert in pg_control ist falsch" -#: pg_checksums.c:562 +#: pg_checksums.c:565 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "die Cluster sind nicht mit dieser Version von pg_checksums kompatibel" -#: pg_checksums.c:568 +#: pg_checksums.c:571 #, c-format msgid "database cluster is not compatible" msgstr "Datenbank-Cluster ist nicht kompatibel" -#: pg_checksums.c:569 +#: pg_checksums.c:572 #, c-format msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u.\n" msgstr "Der Datenbank-Cluster wurde mit Blockgröße %u initialisiert, aber pg_checksums wurde mit Blockgröße %u kompiliert.\n" -#: pg_checksums.c:582 +#: pg_checksums.c:585 #, c-format msgid "cluster must be shut down" msgstr "Cluster muss heruntergefahren sein" -#: pg_checksums.c:589 +#: pg_checksums.c:592 #, c-format msgid "data checksums are not enabled in cluster" msgstr "Datenprüfsummen sind im Cluster nicht eingeschaltet" -#: pg_checksums.c:596 +#: pg_checksums.c:599 #, c-format msgid "data checksums are already disabled in cluster" msgstr "Datenprüfsummen sind im Cluster bereits ausgeschaltet" -#: pg_checksums.c:603 +#: pg_checksums.c:606 #, c-format msgid "data checksums are already enabled in cluster" msgstr "Datenprüfsummen sind im Cluster bereits eingeschaltet" @@ -286,8 +286,8 @@ msgstr "Falsche Prüfsummen: %s\n" #: pg_checksums.c:638 pg_checksums.c:665 #, c-format -msgid "Data checksum version: %d\n" -msgstr "Datenprüfsummenversion: %d\n" +msgid "Data checksum version: %u\n" +msgstr "Datenprüfsummenversion: %u\n" #: pg_checksums.c:657 #, c-format diff --git a/src/bin/pg_checksums/po/es.po b/src/bin/pg_checksums/po/es.po index 671423c50bee1..71e68a7b8bb1b 100644 --- a/src/bin/pg_checksums/po/es.po +++ b/src/bin/pg_checksums/po/es.po @@ -9,14 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: pg_checksums (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:47+0000\n" -"PO-Revision-Date: 2019-09-29 22:13-0300\n" +"POT-Creation-Date: 2020-09-13 10:48+0000\n" +"PO-Revision-Date: 2020-09-12 10:54-0500\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: pgsql-es-ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" #: ../../../src/common/logging.c:236 #, c-format @@ -127,139 +128,139 @@ msgstr "" #: pg_checksums.c:91 #, c-format msgid "Report bugs to <%s>.\n" -msgstr "" +msgstr "Reportar errores a <%s>.\n" #: pg_checksums.c:92 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" #: pg_checksums.c:161 #, c-format msgid "%*s/%s MB (%d%%) computed" msgstr "%*s/%s MB (%d%%) calculado" -#: pg_checksums.c:204 +#: pg_checksums.c:207 #, c-format msgid "could not open file \"%s\": %m" msgstr "no se pudo abrir el archivo «%s»: %m" -#: pg_checksums.c:220 +#: pg_checksums.c:223 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "no se pudo leer el bloque %u del archivo «%s»: %m" -#: pg_checksums.c:223 +#: pg_checksums.c:226 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "no se pudo leer bloque %u en archivo «%s»: leídos %d de %d" -#: pg_checksums.c:240 +#: pg_checksums.c:243 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" msgstr "verificación de checksums falló en archivo «%s», bloque %u: checksum calculado %X pero bloque contiene %X" -#: pg_checksums.c:255 +#: pg_checksums.c:258 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "posicionamiento (seek) falló para el bloque %u en archivo «%s»: %m" -#: pg_checksums.c:264 +#: pg_checksums.c:267 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "no se pudo escribir el bloque %u en el archivo «%s»: %m" -#: pg_checksums.c:267 +#: pg_checksums.c:270 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "no se pudo escribir el bloque %u en el archivo «%s»: se escribieron %d de %d" -#: pg_checksums.c:280 +#: pg_checksums.c:283 #, c-format msgid "checksums verified in file \"%s\"" msgstr "checksums verificados en archivo «%s»" -#: pg_checksums.c:282 +#: pg_checksums.c:285 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "checksums activados en archivo «%s»" -#: pg_checksums.c:307 +#: pg_checksums.c:310 #, c-format msgid "could not open directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" -#: pg_checksums.c:334 pg_checksums.c:413 +#: pg_checksums.c:337 pg_checksums.c:416 #, c-format msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" -#: pg_checksums.c:361 +#: pg_checksums.c:364 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "número de segmento %d no válido en nombre de archivo «%s»" -#: pg_checksums.c:494 +#: pg_checksums.c:497 #, c-format msgid "invalid filenode specification, must be numeric: %s" msgstr "especificación de filenode no válida: deben ser numérica: %s" -#: pg_checksums.c:512 pg_checksums.c:528 pg_checksums.c:538 pg_checksums.c:547 +#: pg_checksums.c:515 pg_checksums.c:531 pg_checksums.c:541 pg_checksums.c:550 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Pruebe «%s --help» para mayor información.\n" -#: pg_checksums.c:527 +#: pg_checksums.c:530 #, c-format msgid "no data directory specified" msgstr "no se especificó el directorio de datos" -#: pg_checksums.c:536 +#: pg_checksums.c:539 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: pg_checksums.c:546 +#: pg_checksums.c:549 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "la opción -f/--filenode sólo puede usarse con --check" -#: pg_checksums.c:556 +#: pg_checksums.c:559 #, c-format msgid "pg_control CRC value is incorrect" msgstr "el valor de CRC de pg_control es incorrecto" -#: pg_checksums.c:562 +#: pg_checksums.c:565 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "el clúster no es compatible con esta versión de pg_checksums" -#: pg_checksums.c:568 +#: pg_checksums.c:571 #, c-format msgid "database cluster is not compatible" msgstr "el clúster de bases de datos no es compatible" -#: pg_checksums.c:569 +#: pg_checksums.c:572 #, c-format msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u.\n" msgstr "El clúster fue inicializado con tamaño de bloque %u, pero pg_checksums fue compilado con tamaño de bloques %u.\n" -#: pg_checksums.c:582 +#: pg_checksums.c:585 #, c-format msgid "cluster must be shut down" msgstr "el clúster debe estar apagado" -#: pg_checksums.c:589 +#: pg_checksums.c:592 #, c-format msgid "data checksums are not enabled in cluster" msgstr "los checksums de datos no están activados en el clúster" -#: pg_checksums.c:596 +#: pg_checksums.c:599 #, c-format msgid "data checksums are already disabled in cluster" msgstr "los checksums de datos ya están desactivados en el clúster" -#: pg_checksums.c:603 +#: pg_checksums.c:606 #, c-format msgid "data checksums are already enabled in cluster" msgstr "los checksums de datos ya están activados en el clúster" @@ -308,6 +309,3 @@ msgstr "Checksums activos en el clúster\n" #, c-format msgid "Checksums disabled in cluster\n" msgstr "Checksums inactivos en el clúster\n" - -#~ msgid "Report bugs to .\n" -#~ msgstr "Reporte errores a .\n" diff --git a/src/bin/pg_checksums/po/fr.po b/src/bin/pg_checksums/po/fr.po index 9d5f8ed24a3ce..40633c5166c1e 100644 --- a/src/bin/pg_checksums/po/fr.po +++ b/src/bin/pg_checksums/po/fr.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: pg_verify_checksums (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-04-16 06:17+0000\n" -"PO-Revision-Date: 2020-04-16 13:40+0200\n" +"POT-Creation-Date: 2020-12-23 15:18+0000\n" +"PO-Revision-Date: 2020-12-24 11:45+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" #: ../../../src/common/logging.c:236 #, c-format @@ -138,127 +138,127 @@ msgstr "page d'accueil de %s : <%s>\n" msgid "%*s/%s MB (%d%%) computed" msgstr "%*s/%s Mo (%d%%) traités" -#: pg_checksums.c:204 +#: pg_checksums.c:207 #, c-format msgid "could not open file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier « %s » : %m" -#: pg_checksums.c:220 +#: pg_checksums.c:223 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "n'a pas pu lire le bloc %u dans le fichier « %s » : %m" -#: pg_checksums.c:223 +#: pg_checksums.c:226 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "n'a pas pu lire le bloc %u dans le fichier « %s » : %d lus sur %d" -#: pg_checksums.c:240 +#: pg_checksums.c:243 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" msgstr "échec de la vérification de la somme de contrôle dans le fichier « %s », bloc %u : somme de contrôle calculée %X, alors que le bloc contient %X" -#: pg_checksums.c:255 +#: pg_checksums.c:258 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "n'a pas pu rechercher le bloc %u dans le fichier « %s » : %m" -#: pg_checksums.c:264 +#: pg_checksums.c:267 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "n'a pas pu écrire le bloc %u dans le fichier « %s » : %m" -#: pg_checksums.c:267 +#: pg_checksums.c:270 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "n'a pas pu écrire le bloc %u du fichier « %s » : a écrit %d octets sur %d" -#: pg_checksums.c:280 +#: pg_checksums.c:283 #, c-format msgid "checksums verified in file \"%s\"" msgstr "sommes de contrôle vérifiées dans le fichier « %s »" -#: pg_checksums.c:282 +#: pg_checksums.c:285 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "sommes de contrôle activées dans le fichier « %s »" -#: pg_checksums.c:307 +#: pg_checksums.c:310 #, c-format msgid "could not open directory \"%s\": %m" msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" -#: pg_checksums.c:334 pg_checksums.c:413 +#: pg_checksums.c:337 pg_checksums.c:416 #, c-format msgid "could not stat file \"%s\": %m" msgstr "n'a pas pu tester le fichier « %s » : %m" -#: pg_checksums.c:361 +#: pg_checksums.c:364 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "numéro de segment %d invalide dans le nom de fichier « %s »" -#: pg_checksums.c:494 +#: pg_checksums.c:497 #, c-format msgid "invalid filenode specification, must be numeric: %s" msgstr "spécification invalide du relfilnode, doit être numérique : %s" -#: pg_checksums.c:512 pg_checksums.c:528 pg_checksums.c:538 pg_checksums.c:547 +#: pg_checksums.c:515 pg_checksums.c:531 pg_checksums.c:541 pg_checksums.c:550 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayez « %s --help » pour plus d'informations.\n" -#: pg_checksums.c:527 +#: pg_checksums.c:530 #, c-format msgid "no data directory specified" msgstr "aucun répertoire de données indiqué" -#: pg_checksums.c:536 +#: pg_checksums.c:539 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" -#: pg_checksums.c:546 +#: pg_checksums.c:549 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "l'option « -f/--filenode » peut seulement être utilisée avec --check" -#: pg_checksums.c:556 +#: pg_checksums.c:559 #, c-format msgid "pg_control CRC value is incorrect" msgstr "la valeur CRC de pg_control n'est pas correcte" -#: pg_checksums.c:562 +#: pg_checksums.c:565 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "l'instance n'est pas compatible avec cette version de pg_checksums" -#: pg_checksums.c:568 +#: pg_checksums.c:571 #, c-format msgid "database cluster is not compatible" msgstr "l'instance n'est pas compatible" -#: pg_checksums.c:569 +#: pg_checksums.c:572 #, c-format msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u.\n" msgstr "L'instance a été initialisée avec une taille de bloc à %u alors que pg_checksums a été compilé avec une taille de bloc à %u.\n" -#: pg_checksums.c:582 +#: pg_checksums.c:585 #, c-format msgid "cluster must be shut down" msgstr "l'instance doit être arrêtée" -#: pg_checksums.c:589 +#: pg_checksums.c:592 #, c-format msgid "data checksums are not enabled in cluster" msgstr "les sommes de contrôle sur les données ne sont pas activées sur cette instance" -#: pg_checksums.c:596 +#: pg_checksums.c:599 #, c-format msgid "data checksums are already disabled in cluster" msgstr "les sommes de contrôle sur les données sont déjà désactivées sur cette instance" -#: pg_checksums.c:603 +#: pg_checksums.c:606 #, c-format msgid "data checksums are already enabled in cluster" msgstr "les sommes de contrôle sur les données sont déjà activées sur cette instance" @@ -285,8 +285,8 @@ msgstr "Mauvaises sommes de contrôle : %s\n" #: pg_checksums.c:638 pg_checksums.c:665 #, c-format -msgid "Data checksum version: %d\n" -msgstr "Version des sommes de contrôle sur les données : %d\n" +msgid "Data checksum version: %u\n" +msgstr "Version des sommes de contrôle sur les données : %u\n" #: pg_checksums.c:657 #, c-format @@ -308,26 +308,26 @@ msgstr "Sommes de contrôle sur les données activées sur cette instance\n" msgid "Checksums disabled in cluster\n" msgstr "Sommes de contrôle sur les données désactivées sur cette instance\n" -#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" -#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" - -#~ msgid "%s: no data directory specified\n" -#~ msgstr "%s : aucun répertoire de données indiqué\n" +#~ msgid "Report bugs to .\n" +#~ msgstr "Rapporter les bogues à .\n" -#~ msgid "%s: could not stat file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu récupérer les informations sur le fichier « %s » : %s\n" +#~ msgid " -V, --version output version information, then exit\n" +#~ msgstr " -V, --version affiche la version puis quitte\n" -#~ msgid "%s: could not open directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le répertoire « %s » : %s\n" +#~ msgid " -?, --help show this help, then exit\n" +#~ msgstr " -?, --help affiche cette aide puis quitte\n" #~ msgid "%s: could not open file \"%s\": %s\n" #~ msgstr "%s : n'a pas pu ouvrir le fichier « %s » : %s\n" -#~ msgid " -?, --help show this help, then exit\n" -#~ msgstr " -?, --help affiche cette aide puis quitte\n" +#~ msgid "%s: could not open directory \"%s\": %s\n" +#~ msgstr "%s : n'a pas pu ouvrir le répertoire « %s » : %s\n" -#~ msgid " -V, --version output version information, then exit\n" -#~ msgstr " -V, --version affiche la version puis quitte\n" +#~ msgid "%s: could not stat file \"%s\": %s\n" +#~ msgstr "%s : n'a pas pu récupérer les informations sur le fichier « %s » : %s\n" -#~ msgid "Report bugs to .\n" -#~ msgstr "Rapporter les bogues à .\n" +#~ msgid "%s: no data directory specified\n" +#~ msgstr "%s : aucun répertoire de données indiqué\n" + +#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" +#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" diff --git a/src/bin/pg_checksums/po/ja.po b/src/bin/pg_checksums/po/ja.po index d789c5439682e..f43465a0e408d 100644 --- a/src/bin/pg_checksums/po/ja.po +++ b/src/bin/pg_checksums/po/ja.po @@ -4,29 +4,29 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_checksums (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: pg_checksums (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-06-06 18:38+0900\n" -"PO-Revision-Date: 2019-06-06 18:38+0900\n" +"POT-Creation-Date: 2020-08-21 15:54+0900\n" +"PO-Revision-Date: 2020-08-21 23:22+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:241 #, c-format msgid "fatal: " msgstr "致命的エラー: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:248 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:255 #, c-format msgid "warning: " msgstr "警告: " @@ -34,12 +34,10 @@ msgstr "警告: " #: pg_checksums.c:75 #, c-format msgid "" -"%s enables, disables or verifies data checksums in a PostgreSQL database " -"cluster.\n" +"%s enables, disables, or verifies data checksums in a PostgreSQL database cluster.\n" "\n" msgstr "" -"%s はPostgreSQLデータベースクラスタにおけるデータチェックサムの有効化、無効化" -"および検証を行います。\n" +"%s はPostgreSQLデータベースクラスタにおけるデータチェックサムの有効化、無効化および検証を行います。\n" "\n" #: pg_checksums.c:76 @@ -83,16 +81,12 @@ msgstr " -e, --enable データチェックサムを有効化\n" #: pg_checksums.c:83 #, c-format -msgid "" -" -f, --filenode=FILENODE check only relation with specified filenode\n" -msgstr "" -" -f, --filenode=FILENODE 指定したファイルノードのリレーションのみ検証\n" +msgid " -f, --filenode=FILENODE check only relation with specified filenode\n" +msgstr " -f, --filenode=FILENODE 指定したファイルノードのリレーションのみ検証\n" #: pg_checksums.c:84 #, c-format -msgid "" -" -N, --no-sync do not wait for changes to be written safely to " -"disk\n" +msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync ディスクへの安全な書き込みを待機しない\n" #: pg_checksums.c:85 @@ -119,192 +113,201 @@ msgstr " -?, --help このヘルプを表示して終了\n" #, c-format msgid "" "\n" -"If no data directory (DATADIR) is specified, the environment variable " -"PGDATA\n" +"If no data directory (DATADIR) is specified, the environment variable PGDATA\n" "is used.\n" "\n" msgstr "" "\n" -"データディレクトリ(DATADIR)が指定されない場合、PGDATA環境変数が使用されま" -"す。\n" +"データディレクトリ(DATADIR)が指定されない場合、PGDATA環境変数が使用されます。\n" "\n" #: pg_checksums.c:91 #, c-format -msgid "Report bugs to .\n" -msgstr "バグは に報告してください。\n" +msgid "Report bugs to <%s>.\n" +msgstr "バグは<%s>に報告してください。\n" + +#: pg_checksums.c:92 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" -#: pg_checksums.c:149 +#: pg_checksums.c:161 #, c-format -#| msgid "%*s/%s kB (%d%%) copied" msgid "%*s/%s MB (%d%%) computed" msgstr "%*s/%s MB (%d%%) 完了" -#: pg_checksums.c:186 +#: pg_checksums.c:207 #, c-format msgid "could not open file \"%s\": %m" msgstr "ファイル\"%s\"をオープンできませんでした: %m" -#: pg_checksums.c:201 +#: pg_checksums.c:223 +#, c-format +msgid "could not read block %u in file \"%s\": %m" +msgstr "ファイル\"%2$s\"で%1$uブロックを読み取れませんでした: %3$m" + +#: pg_checksums.c:226 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" -msgstr "" -" ファイル\"%2$s\"のブロック%1$uが読み込めませんでした: %4$d中%3$d読み込み済み" +msgstr " ファイル\"%2$s\"のブロック%1$uが読み込めませんでした: %4$d中%3$d読み込み済み" -#: pg_checksums.c:218 +#: pg_checksums.c:243 #, c-format -msgid "" -"checksum verification failed in file \"%s\", block %u: calculated checksum " -"%X but block contains %X" -msgstr "" -"ファイル\"%s\" ブロック%uでチェックサム検証が失敗: 算出したチェックサム" -"は%X 、しかしブロック上の値は%X" +msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" +msgstr "ファイル\"%s\" ブロック%uでチェックサム検証が失敗: 算出したチェックサムは%X 、しかしブロック上の値は%X" -#: pg_checksums.c:231 +#: pg_checksums.c:258 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "ファイル\"%2$s\" ブロック%1$uへのシーク失敗: %3$m" -#: pg_checksums.c:238 +#: pg_checksums.c:267 +#, c-format +msgid "could not write block %u in file \"%s\": %m" +msgstr "ファイル\"%2$s\"で%1$uブロックが書き出せませんでした: %3$m" + +#: pg_checksums.c:270 #, c-format -msgid "could not update checksum of block %u in file \"%s\": %m" -msgstr "ファイル\"%2$s\" ブロック%1$uのチェックサム更新失敗: %3$m" +msgid "could not write block %u in file \"%s\": wrote %d of %d" +msgstr "ファイル\"%2$s\"のブロック%1$uの書き込みに失敗しました: %4$dバイト中%3$dバイトのみ書き込みました" -#: pg_checksums.c:251 +#: pg_checksums.c:283 #, c-format msgid "checksums verified in file \"%s\"" msgstr "ファイル\"%s\"のチェックサムは検証されました" -#: pg_checksums.c:253 +#: pg_checksums.c:285 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "ファイル\"%s\"のチェックサムは有効化されました" -#: pg_checksums.c:278 +#: pg_checksums.c:310 #, c-format msgid "could not open directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" -#: pg_checksums.c:305 +#: pg_checksums.c:337 pg_checksums.c:416 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ファイル\"%s\"のstatに失敗しました: %m" -#: pg_checksums.c:332 +#: pg_checksums.c:364 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "ファイル名\"%2$s\"の不正なセグメント番号%1$d" -#: pg_checksums.c:420 +#: pg_checksums.c:497 #, c-format msgid "invalid filenode specification, must be numeric: %s" msgstr "不正なファイルノード指定、数値である必要があります: %s" -#: pg_checksums.c:438 pg_checksums.c:454 pg_checksums.c:464 pg_checksums.c:473 +#: pg_checksums.c:515 pg_checksums.c:531 pg_checksums.c:541 pg_checksums.c:550 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細については\"%s --help\"を実行してください。\n" -#: pg_checksums.c:453 +#: pg_checksums.c:530 #, c-format msgid "no data directory specified" msgstr "データディレクトリが指定されていません" -#: pg_checksums.c:462 +#: pg_checksums.c:539 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "コマンドライン引数が多すぎます (最初は\"%s\")" -#: pg_checksums.c:472 +#: pg_checksums.c:549 #, c-format -msgid "--filenode option only possible with --check" -msgstr "--filenodeは--checkを指定したときのみ指定可能" +msgid "option -f/--filenode can only be used with --check" +msgstr "オプション-f/--filenodeは--checkを指定したときのみ指定可能" -#: pg_checksums.c:482 +#: pg_checksums.c:559 #, c-format msgid "pg_control CRC value is incorrect" msgstr "pg_controlのCRC値が正しくありません" -#: pg_checksums.c:488 +#: pg_checksums.c:565 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "クラスタはこのバージョンのpg_checksumsと互換性がありません" -#: pg_checksums.c:494 +#: pg_checksums.c:571 #, c-format msgid "database cluster is not compatible" msgstr "データベースクラスタが非互換です" -#: pg_checksums.c:495 +#: pg_checksums.c:572 #, c-format -msgid "" -"The database cluster was initialized with block size %u, but pg_checksums " -"was compiled with block size %u.\n" -msgstr "" -"データベースクラスタはブロックサイズ%uで初期化されています、しかし" -"pg_checksumsはブロックサイズ%uでコンパイルされています。\n" +msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u.\n" +msgstr "データベースクラスタはブロックサイズ%uで初期化されています、しかしpg_checksumsはブロックサイズ%uでコンパイルされています。\n" -#: pg_checksums.c:503 +#: pg_checksums.c:585 #, c-format msgid "cluster must be shut down" msgstr "クラスタはシャットダウンされていなければなりません" -#: pg_checksums.c:510 +#: pg_checksums.c:592 #, c-format msgid "data checksums are not enabled in cluster" msgstr "クラスタのデータチェックサムは有効になっていません" -#: pg_checksums.c:517 +#: pg_checksums.c:599 #, c-format msgid "data checksums are already disabled in cluster" msgstr "クラスタのデータチェックサムはすでに無効になっています" -#: pg_checksums.c:524 +#: pg_checksums.c:606 #, c-format msgid "data checksums are already enabled in cluster" msgstr "クラスタのデータチェックサムはすでに有効になっています" -#: pg_checksums.c:553 +#: pg_checksums.c:632 #, c-format msgid "Checksum operation completed\n" msgstr "チェックサム操作が完了しました\n" -#: pg_checksums.c:554 +#: pg_checksums.c:633 #, c-format msgid "Files scanned: %s\n" msgstr "スキャンしたファイル数: %s\n" -#: pg_checksums.c:555 +#: pg_checksums.c:634 #, c-format msgid "Blocks scanned: %s\n" msgstr "スキャンしたブロック数: %s\n" -#: pg_checksums.c:558 +#: pg_checksums.c:637 #, c-format msgid "Bad checksums: %s\n" msgstr "不正なチェックサム数: %s\n" -#: pg_checksums.c:559 pg_checksums.c:586 +#: pg_checksums.c:638 pg_checksums.c:665 #, c-format msgid "Data checksum version: %d\n" msgstr "データチェックサムバージョン: %d\n" -#: pg_checksums.c:578 +#: pg_checksums.c:657 #, c-format msgid "syncing data directory" msgstr "データディレクトリを同期しています" -#: pg_checksums.c:582 +#: pg_checksums.c:661 #, c-format msgid "updating control file" msgstr "コントロールファイルを更新しています" -#: pg_checksums.c:588 +#: pg_checksums.c:667 #, c-format msgid "Checksums enabled in cluster\n" msgstr "クラスタのチェックサムが有効化されました\n" -#: pg_checksums.c:590 +#: pg_checksums.c:669 #, c-format msgid "Checksums disabled in cluster\n" msgstr "クラスタのチェックサムが無効化されました\n" + +#~ msgid "could not update checksum of block %u in file \"%s\": %m" +#~ msgstr "ファイル\"%2$s\" ブロック%1$uのチェックサム更新失敗: %3$m" + +#~ msgid "Report bugs to .\n" +#~ msgstr "バグは に報告してください。\n" diff --git a/src/bin/pg_checksums/po/ko.po b/src/bin/pg_checksums/po/ko.po index d723be66586d1..ff767cfc7df3d 100644 --- a/src/bin/pg_checksums/po/ko.po +++ b/src/bin/pg_checksums/po/ko.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_checksums (PostgreSQL) 12\n" +"Project-Id-Version: pg_checksums (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:17+0000\n" -"PO-Revision-Date: 2020-02-10 10:09+0900\n" +"POT-Creation-Date: 2020-10-05 20:47+0000\n" +"PO-Revision-Date: 2020-10-06 11:13+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: PostgreSQL Korea \n" "Language: ko\n" @@ -16,17 +16,17 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "심각: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "오류: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "경고: " @@ -131,30 +131,35 @@ msgstr "" #: pg_checksums.c:91 #, c-format -msgid "Report bugs to .\n" -msgstr "오류보고: .\n" +msgid "Report bugs to <%s>.\n" +msgstr "문제점 보고 주소: <%s>\n" -#: pg_checksums.c:149 +#: pg_checksums.c:92 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" + +#: pg_checksums.c:161 #, c-format msgid "%*s/%s MB (%d%%) computed" msgstr "%*s/%s MB (%d%%) 계산됨" -#: pg_checksums.c:186 +#: pg_checksums.c:207 #, c-format msgid "could not open file \"%s\": %m" msgstr "\"%s\" 파일을 열 수 없음: %m" -#: pg_checksums.c:202 +#: pg_checksums.c:223 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "%u 블럭을 \"%s\" 파일에서 읽을 수 없음: %m" -#: pg_checksums.c:205 +#: pg_checksums.c:226 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "%u 블럭을 \"%s\" 파일에서 읽을 수 없음: %d / %d 바이트만 읽음" -#: pg_checksums.c:222 +#: pg_checksums.c:243 #, c-format msgid "" "checksum verification failed in file \"%s\", block %u: calculated checksum " @@ -163,87 +168,87 @@ msgstr "" "\"%s\" 파일, %u 블럭의 체크섬 검사 실패: 계산된 체크섬은 %X 값이지만, 블럭에" "는 %X 값이 있음" -#: pg_checksums.c:237 +#: pg_checksums.c:258 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "%u 블럭을 \"%s\" 파일에서 찾을 수 없음: %m" -#: pg_checksums.c:246 +#: pg_checksums.c:267 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "%u 블럭을 \"%s\" 파일에 쓸 수 없음: %m" -#: pg_checksums.c:249 +#: pg_checksums.c:270 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "%u 블럭을 \"%s\" 파일에 쓸 수 없음: %d / %d 바이트만 씀" -#: pg_checksums.c:262 +#: pg_checksums.c:283 #, c-format msgid "checksums verified in file \"%s\"" msgstr "\"%s\" 파일 체크섬 검사 마침" -#: pg_checksums.c:264 +#: pg_checksums.c:285 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "\"%s\" 파일 체크섬 활성화 함" -#: pg_checksums.c:289 +#: pg_checksums.c:310 #, c-format msgid "could not open directory \"%s\": %m" msgstr "\"%s\" 디렉터리 열 수 없음: %m" -#: pg_checksums.c:316 +#: pg_checksums.c:337 pg_checksums.c:416 #, c-format msgid "could not stat file \"%s\": %m" msgstr "\"%s\" 파일의 상태값을 알 수 없음: %m" -#: pg_checksums.c:343 +#: pg_checksums.c:364 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "잘못된 조각 번호 %d, 해당 파일: \"%s\"" -#: pg_checksums.c:431 +#: pg_checksums.c:497 #, c-format msgid "invalid filenode specification, must be numeric: %s" msgstr "파일노드 값이 이상함. 이 값은 숫자여야 함: %s" -#: pg_checksums.c:449 pg_checksums.c:465 pg_checksums.c:475 pg_checksums.c:484 +#: pg_checksums.c:515 pg_checksums.c:531 pg_checksums.c:541 pg_checksums.c:550 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "자제한 사항은 \"%s --help\" 명령으로 살펴보십시오.\n" -#: pg_checksums.c:464 +#: pg_checksums.c:530 #, c-format msgid "no data directory specified" msgstr "데이터 디렉터리를 지정하지 않았음" -#: pg_checksums.c:473 +#: pg_checksums.c:539 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "너무 많은 명령행 인수를 지정했음 (처음 \"%s\")" -#: pg_checksums.c:483 +#: pg_checksums.c:549 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "-f/--filenode 옵션은 --check 옵션만 사용할 수 있음" -#: pg_checksums.c:493 +#: pg_checksums.c:559 #, c-format msgid "pg_control CRC value is incorrect" msgstr "pg_control CRC 값이 잘못되었음" -#: pg_checksums.c:499 +#: pg_checksums.c:565 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "해당 클러스터는 이 버전 pg_checksum과 호환되지 않음" -#: pg_checksums.c:505 +#: pg_checksums.c:571 #, c-format msgid "database cluster is not compatible" msgstr "데이터베이스 클러스터는 호환되지 않음" -#: pg_checksums.c:506 +#: pg_checksums.c:572 #, c-format msgid "" "The database cluster was initialized with block size %u, but pg_checksums " @@ -252,67 +257,67 @@ msgstr "" "이 데이터베이스 클러스터는 %u 블록 크기로 초기화 되었지만, pg_checksum은 %u " "블록 크기로 컴파일 되어있습니다.\n" -#: pg_checksums.c:519 +#: pg_checksums.c:585 #, c-format msgid "cluster must be shut down" msgstr "먼저 서버가 중지되어야 함" -#: pg_checksums.c:526 +#: pg_checksums.c:592 #, c-format msgid "data checksums are not enabled in cluster" msgstr "이 클러스터는 자료 체크섬이 비활성화 상태임" -#: pg_checksums.c:533 +#: pg_checksums.c:599 #, c-format msgid "data checksums are already disabled in cluster" msgstr "이 클러스터는 이미 자료 체크섬이 비활성화 상태임" -#: pg_checksums.c:540 +#: pg_checksums.c:606 #, c-format msgid "data checksums are already enabled in cluster" msgstr "이 클러스터는 이미 자료 체크섬이 활성화 상태임" -#: pg_checksums.c:569 +#: pg_checksums.c:632 #, c-format msgid "Checksum operation completed\n" msgstr "체크섬 작업 완료\n" -#: pg_checksums.c:570 +#: pg_checksums.c:633 #, c-format msgid "Files scanned: %s\n" msgstr "조사한 파일수: %s\n" -#: pg_checksums.c:571 +#: pg_checksums.c:634 #, c-format msgid "Blocks scanned: %s\n" msgstr "조사한 블럭수: %s\n" -#: pg_checksums.c:574 +#: pg_checksums.c:637 #, c-format msgid "Bad checksums: %s\n" msgstr "잘못된 체크섬: %s\n" -#: pg_checksums.c:575 pg_checksums.c:602 +#: pg_checksums.c:638 pg_checksums.c:665 #, c-format msgid "Data checksum version: %d\n" msgstr "자료 체크섬 버전: %d\n" -#: pg_checksums.c:594 +#: pg_checksums.c:657 #, c-format msgid "syncing data directory" msgstr "데이터 디렉터리 fsync 중" -#: pg_checksums.c:598 +#: pg_checksums.c:661 #, c-format msgid "updating control file" msgstr "컨트롤 파일 바꾸는 중" -#: pg_checksums.c:604 +#: pg_checksums.c:667 #, c-format msgid "Checksums enabled in cluster\n" msgstr "이 클러스터는 자료 체크섬 옵션이 활성화 되었음\n" -#: pg_checksums.c:606 +#: pg_checksums.c:669 #, c-format msgid "Checksums disabled in cluster\n" msgstr "이 클러스터는 자료 체크섬 옵션이 비활성화 되었음\n" diff --git a/src/bin/pg_checksums/po/ru.po b/src/bin/pg_checksums/po/ru.po index 2b0db344e0b39..8e48580af06a0 100644 --- a/src/bin/pg_checksums/po/ru.po +++ b/src/bin/pg_checksums/po/ru.po @@ -1,10 +1,10 @@ -# Alexander Lakhin , 2019. +# Alexander Lakhin , 2019, 2020, 2021. msgid "" msgstr "" "Project-Id-Version: pg_verify_checksums (PostgreSQL) 11\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-09 12:21+0300\n" -"PO-Revision-Date: 2019-09-09 13:32+0300\n" +"POT-Creation-Date: 2020-12-11 07:48+0300\n" +"PO-Revision-Date: 2021-02-08 07:59+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -12,17 +12,17 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "важно: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "ошибка: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "предупреждение: " @@ -131,30 +131,35 @@ msgstr "" #: pg_checksums.c:91 #, c-format -msgid "Report bugs to .\n" -msgstr "Об ошибках сообщайте по адресу .\n" +msgid "Report bugs to <%s>.\n" +msgstr "Об ошибках сообщайте по адресу <%s>.\n" -#: pg_checksums.c:149 +#: pg_checksums.c:92 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: pg_checksums.c:161 #, c-format msgid "%*s/%s MB (%d%%) computed" msgstr "%*s/%s МБ (%d%%) обработано" -#: pg_checksums.c:186 +#: pg_checksums.c:207 #, c-format msgid "could not open file \"%s\": %m" msgstr "не удалось открыть файл \"%s\": %m" -#: pg_checksums.c:202 +#: pg_checksums.c:223 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "не удалось прочитать блок %u в файле \"%s\": %m" -#: pg_checksums.c:205 +#: pg_checksums.c:226 #, c-format msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "не удалось прочитать блок %u в файле \"%s\" (прочитано байт: %d из %d)" -#: pg_checksums.c:222 +#: pg_checksums.c:243 #, c-format msgid "" "checksum verification failed in file \"%s\", block %u: calculated checksum " @@ -163,87 +168,87 @@ msgstr "" "ошибка контрольных сумм в файле \"%s\", блоке %u: вычислена контрольная " "сумма %X, но блок содержит %X" -#: pg_checksums.c:237 +#: pg_checksums.c:258 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "ошибка при переходе к блоку %u в файле \"%s\": %m" -#: pg_checksums.c:246 +#: pg_checksums.c:267 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "не удалось записать блок %u в файл \"%s\": %m" -#: pg_checksums.c:249 +#: pg_checksums.c:270 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "не удалось записать блок %u в файле \"%s\" (записано байт: %d из %d)" -#: pg_checksums.c:262 +#: pg_checksums.c:283 #, c-format msgid "checksums verified in file \"%s\"" msgstr "контрольные суммы в файле \"%s\" проверены" -#: pg_checksums.c:264 +#: pg_checksums.c:285 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "контрольные суммы в файле \"%s\" включены" -#: pg_checksums.c:289 +#: pg_checksums.c:310 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не удалось открыть каталог \"%s\": %m" -#: pg_checksums.c:316 +#: pg_checksums.c:337 pg_checksums.c:416 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не удалось получить информацию о файле \"%s\": %m" -#: pg_checksums.c:343 +#: pg_checksums.c:364 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "неверный номер сегмента %d в имени файла \"%s\"" -#: pg_checksums.c:431 +#: pg_checksums.c:497 #, c-format msgid "invalid filenode specification, must be numeric: %s" msgstr "неверное указание файлового узла, требуется число: %s" -#: pg_checksums.c:449 pg_checksums.c:465 pg_checksums.c:475 pg_checksums.c:484 +#: pg_checksums.c:515 pg_checksums.c:531 pg_checksums.c:541 pg_checksums.c:550 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_checksums.c:464 +#: pg_checksums.c:530 #, c-format msgid "no data directory specified" msgstr "каталог данных не указан" -#: pg_checksums.c:473 +#: pg_checksums.c:539 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: pg_checksums.c:483 +#: pg_checksums.c:549 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "параметр -f/--filenode можно использовать только с --check" -#: pg_checksums.c:493 +#: pg_checksums.c:559 #, c-format msgid "pg_control CRC value is incorrect" msgstr "ошибка контрольного значения в pg_control" -#: pg_checksums.c:499 +#: pg_checksums.c:565 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "кластер несовместим с этой версией pg_checksums" -#: pg_checksums.c:505 +#: pg_checksums.c:571 #, c-format msgid "database cluster is not compatible" msgstr "несовместимый кластер баз данных" -#: pg_checksums.c:506 +#: pg_checksums.c:572 #, c-format msgid "" "The database cluster was initialized with block size %u, but pg_checksums " @@ -252,67 +257,70 @@ msgstr "" "Кластер баз данных был инициализирован с размером блока %u, а утилита " "pg_checksums скомпилирована для размера блока %u.\n" -#: pg_checksums.c:519 +#: pg_checksums.c:585 #, c-format msgid "cluster must be shut down" msgstr "кластер должен быть отключён" -#: pg_checksums.c:526 +#: pg_checksums.c:592 #, c-format msgid "data checksums are not enabled in cluster" msgstr "контрольные суммы в кластере не включены" -#: pg_checksums.c:533 +#: pg_checksums.c:599 #, c-format msgid "data checksums are already disabled in cluster" msgstr "контрольные суммы в кластере уже отключены" -#: pg_checksums.c:540 +#: pg_checksums.c:606 #, c-format msgid "data checksums are already enabled in cluster" msgstr "контрольные суммы в кластере уже включены" -#: pg_checksums.c:569 +#: pg_checksums.c:632 #, c-format msgid "Checksum operation completed\n" msgstr "Обработка контрольных сумм завершена\n" -#: pg_checksums.c:570 +#: pg_checksums.c:633 #, c-format msgid "Files scanned: %s\n" msgstr "Просканировано файлов: %s\n" -#: pg_checksums.c:571 +#: pg_checksums.c:634 #, c-format msgid "Blocks scanned: %s\n" msgstr "Просканировано блоков: %s\n" -#: pg_checksums.c:574 +#: pg_checksums.c:637 #, c-format msgid "Bad checksums: %s\n" msgstr "Неверные контрольные суммы: %s\n" -#: pg_checksums.c:575 pg_checksums.c:602 +#: pg_checksums.c:638 pg_checksums.c:665 #, c-format -msgid "Data checksum version: %d\n" -msgstr "Версия контрольных сумм данных: %d\n" +msgid "Data checksum version: %u\n" +msgstr "Версия контрольных сумм данных: %u\n" -#: pg_checksums.c:594 +#: pg_checksums.c:657 #, c-format msgid "syncing data directory" msgstr "синхронизация каталога данных" -#: pg_checksums.c:598 +#: pg_checksums.c:661 #, c-format msgid "updating control file" msgstr "модификация управляющего файла" -#: pg_checksums.c:604 +#: pg_checksums.c:667 #, c-format msgid "Checksums enabled in cluster\n" msgstr "Контрольные суммы в кластере включены\n" -#: pg_checksums.c:606 +#: pg_checksums.c:669 #, c-format msgid "Checksums disabled in cluster\n" msgstr "Контрольные суммы в кластере отключены\n" + +#~ msgid "Report bugs to .\n" +#~ msgstr "Об ошибках сообщайте по адресу .\n" diff --git a/src/bin/pg_checksums/po/uk.po b/src/bin/pg_checksums/po/uk.po new file mode 100644 index 0000000000000..15bfe6a47c792 --- /dev/null +++ b/src/bin/pg_checksums/po/uk.po @@ -0,0 +1,299 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:18+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: pasha_golub\n" +"Language-Team: Ukrainian\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /DEV_13/pg_checksums.pot\n" +"X-Crowdin-File-ID: 492\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "збій: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "помилка: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "попередження: " + +#: pg_checksums.c:75 +#, c-format +msgid "%s enables, disables, or verifies data checksums in a PostgreSQL database cluster.\n\n" +msgstr "%s активує, деактивує або перевіряє контрольні суми даних в кластері бази даних PostgreSQL.\n\n" + +#: pg_checksums.c:76 +#, c-format +msgid "Usage:\n" +msgstr "Використання:\n" + +#: pg_checksums.c:77 +#, c-format +msgid " %s [OPTION]... [DATADIR]\n" +msgstr " %s [OPTION]... [DATADIR]\n" + +#: pg_checksums.c:78 +#, c-format +msgid "\n" +"Options:\n" +msgstr "\n" +"Параметри:\n" + +#: pg_checksums.c:79 +#, c-format +msgid " [-D, --pgdata=]DATADIR data directory\n" +msgstr " [-D, --pgdata=]DATADIR каталог даних\n" + +#: pg_checksums.c:80 +#, c-format +msgid " -c, --check check data checksums (default)\n" +msgstr " -c, --check перевірити контрольні суми даних (за замовчуванням)\n" + +#: pg_checksums.c:81 +#, c-format +msgid " -d, --disable disable data checksums\n" +msgstr " -d, --disable вимкнути контрольні суми даних\n" + +#: pg_checksums.c:82 +#, c-format +msgid " -e, --enable enable data checksums\n" +msgstr " -e, --enable активувати контрольні суми даних\n" + +#: pg_checksums.c:83 +#, c-format +msgid " -f, --filenode=FILENODE check only relation with specified filenode\n" +msgstr " -f, --filenode=FILENODE перевіряти відношення лише із вказаним файлом\n" + +#: pg_checksums.c:84 +#, c-format +msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" +msgstr " -N, --no-sync не чекати на безпечний запис змін на диск\n" + +#: pg_checksums.c:85 +#, c-format +msgid " -P, --progress show progress information\n" +msgstr " -P, --progress показати інформацію про прогрес\n" + +#: pg_checksums.c:86 +#, c-format +msgid " -v, --verbose output verbose messages\n" +msgstr " -v, --verbose виводити детальні повідомлення\n" + +#: pg_checksums.c:87 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію, потім вийти\n" + +#: pg_checksums.c:88 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку, потім вийти\n" + +#: pg_checksums.c:89 +#, c-format +msgid "\n" +"If no data directory (DATADIR) is specified, the environment variable PGDATA\n" +"is used.\n\n" +msgstr "\n" +"Якщо каталог даних не вказано (DATADIR), використовується змінна середовища PGDATA.\n\n" + +#: pg_checksums.c:91 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "Повідомляти про помилки на <%s>.\n" + +#: pg_checksums.c:92 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: pg_checksums.c:161 +#, c-format +msgid "%*s/%s MB (%d%%) computed" +msgstr "%*s/%s MB (%d%%) обчислено" + +#: pg_checksums.c:207 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" + +#: pg_checksums.c:223 +#, c-format +msgid "could not read block %u in file \"%s\": %m" +msgstr "не вдалося прочитати блок %u в файлі \"%s\": %m" + +#: pg_checksums.c:226 +#, c-format +msgid "could not read block %u in file \"%s\": read %d of %d" +msgstr "не вдалося прочитати блок %u у файлі \"%s\": прочитано %d з %d" + +#: pg_checksums.c:243 +#, c-format +msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" +msgstr "помилка перевірки контрольних сум у файлі \"%s\", блок %u: обчислена контрольна сума %X, але блок містить %X" + +#: pg_checksums.c:258 +#, c-format +msgid "seek failed for block %u in file \"%s\": %m" +msgstr "помилка пошуку для блоку %u у файлі \"%s\": %m" + +#: pg_checksums.c:267 +#, c-format +msgid "could not write block %u in file \"%s\": %m" +msgstr "не вдалося записати блок %u у файл \"%s\": %m" + +#: pg_checksums.c:270 +#, c-format +msgid "could not write block %u in file \"%s\": wrote %d of %d" +msgstr "не вдалося записати блок %u у файлі \"%s\": записано %d з %d" + +#: pg_checksums.c:283 +#, c-format +msgid "checksums verified in file \"%s\"" +msgstr "контрольні суми у файлі \"%s\" перевірені" + +#: pg_checksums.c:285 +#, c-format +msgid "checksums enabled in file \"%s\"" +msgstr "контрольні суми у файлі \"%s\" активовані" + +#: pg_checksums.c:310 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не вдалося відкрити каталог \"%s\": %m" + +#: pg_checksums.c:337 pg_checksums.c:416 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" + +#: pg_checksums.c:364 +#, c-format +msgid "invalid segment number %d in file name \"%s\"" +msgstr "неприпустимий номер сегменту %d в імені файлу \"%s\"" + +#: pg_checksums.c:497 +#, c-format +msgid "invalid filenode specification, must be numeric: %s" +msgstr "неприпустима специфікація filenode, повинна бути числовою: %s" + +#: pg_checksums.c:515 pg_checksums.c:531 pg_checksums.c:541 pg_checksums.c:550 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" + +#: pg_checksums.c:530 +#, c-format +msgid "no data directory specified" +msgstr "каталог даних не вказано" + +#: pg_checksums.c:539 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "забагато аргументів у командному рядку (перший \"%s\")" + +#: pg_checksums.c:549 +#, c-format +msgid "option -f/--filenode can only be used with --check" +msgstr "параметр -f/--filenode може бути використаний тільки з --check" + +#: pg_checksums.c:559 +#, c-format +msgid "pg_control CRC value is incorrect" +msgstr "значення CRC pg_control неправильне" + +#: pg_checksums.c:565 +#, c-format +msgid "cluster is not compatible with this version of pg_checksums" +msgstr "кластер не сумісний з цією версією pg_checksum" + +#: pg_checksums.c:571 +#, c-format +msgid "database cluster is not compatible" +msgstr "кластер бази даних не сумісний" + +#: pg_checksums.c:572 +#, c-format +msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u.\n" +msgstr "Кластер бази даних було ініціалізовано з розміром блоку %u, але pg_checksums було скомпільовано з розміром блоку %u.\n" + +#: pg_checksums.c:585 +#, c-format +msgid "cluster must be shut down" +msgstr "кластер повинен бути закритий" + +#: pg_checksums.c:592 +#, c-format +msgid "data checksums are not enabled in cluster" +msgstr "контрольні суми в кластері неактивовані" + +#: pg_checksums.c:599 +#, c-format +msgid "data checksums are already disabled in cluster" +msgstr "контрольні суми вже неактивовані в кластері" + +#: pg_checksums.c:606 +#, c-format +msgid "data checksums are already enabled in cluster" +msgstr "контрольні суми вже активовані в кластері" + +#: pg_checksums.c:632 +#, c-format +msgid "Checksum operation completed\n" +msgstr "Операція контрольної суми завершена\n" + +#: pg_checksums.c:633 +#, c-format +msgid "Files scanned: %s\n" +msgstr "Файлів відскановано: %s\n" + +#: pg_checksums.c:634 +#, c-format +msgid "Blocks scanned: %s\n" +msgstr "Блоків відскановано: %s\n" + +#: pg_checksums.c:637 +#, c-format +msgid "Bad checksums: %s\n" +msgstr "Неправильні контрольні суми: %s\n" + +#: pg_checksums.c:638 pg_checksums.c:665 +#, c-format +msgid "Data checksum version: %d\n" +msgstr "Версія контрольних сум даних: %d\n" + +#: pg_checksums.c:657 +#, c-format +msgid "syncing data directory" +msgstr "синхронізація даних каталогу" + +#: pg_checksums.c:661 +#, c-format +msgid "updating control file" +msgstr "оновлення контрольного файлу" + +#: pg_checksums.c:667 +#, c-format +msgid "Checksums enabled in cluster\n" +msgstr "Контрольні суми активовані в кластері\n" + +#: pg_checksums.c:669 +#, c-format +msgid "Checksums disabled in cluster\n" +msgstr "Контрольні суми вимкнені у кластері\n" + diff --git a/src/bin/pg_checksums/po/zh_CN.po b/src/bin/pg_checksums/po/zh_CN.po new file mode 100644 index 0000000000000..012872b87aade --- /dev/null +++ b/src/bin/pg_checksums/po/zh_CN.po @@ -0,0 +1,308 @@ +# LANGUAGE message translation file for pg_checksums +# Copyright (C) 2020 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# FIRST AUTHOR , 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_checksums (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-06-05 01:47+0000\n" +"PO-Revision-Date: 2020-06-21 16:00+0800\n" +"Last-Translator: Jie Zhang \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "致命的: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "错误: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "警告: " + +#: pg_checksums.c:75 +#, c-format +msgid "" +"%s enables, disables, or verifies data checksums in a PostgreSQL database cluster.\n" +"\n" +msgstr "" +"%s启用、禁用或验证PostgreSQL数据库群集中的数据校验和.\n" +"\n" + +#: pg_checksums.c:76 +#, c-format +msgid "Usage:\n" +msgstr "使用方法:\n" + +#: pg_checksums.c:77 +#, c-format +msgid " %s [OPTION]... [DATADIR]\n" +msgstr " %s [选项]... [DATADIR]\n" + +#: pg_checksums.c:78 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"选项:\n" + +#: pg_checksums.c:79 +#, c-format +msgid " [-D, --pgdata=]DATADIR data directory\n" +msgstr " [-D, --pgdata=]DATADIR 数据目录\n" + +#: pg_checksums.c:80 +#, c-format +msgid " -c, --check check data checksums (default)\n" +msgstr " -c, --check 检查数据校验和(默认)\n" + +#: pg_checksums.c:81 +#, c-format +msgid " -d, --disable disable data checksums\n" +msgstr " -d, --disable 禁用数据校验和\n" + +#: pg_checksums.c:82 +#, c-format +msgid " -e, --enable enable data checksums\n" +msgstr " -e, --enable 启用数据校验和\n" + +#: pg_checksums.c:83 +#, c-format +msgid " -f, --filenode=FILENODE check only relation with specified filenode\n" +msgstr " -f, --filenode=FILENODE 仅检查与指定filenode的关系\n" + +#: pg_checksums.c:84 +#, c-format +msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" +msgstr " -N, --no-sync 不用等待变化安全写入磁盘\n" + +#: pg_checksums.c:85 +#, c-format +msgid " -P, --progress show progress information\n" +msgstr " -P, --progress 显示进度信息\n" + +#: pg_checksums.c:86 +#, c-format +msgid " -v, --verbose output verbose messages\n" +msgstr " -v, --verbose 输出详细的消息\n" + +#: pg_checksums.c:87 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version 输出版本信息, 然后退出\n" + +#: pg_checksums.c:88 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help 显示此帮助, 然后退出\n" + +#: pg_checksums.c:89 +#, c-format +msgid "" +"\n" +"If no data directory (DATADIR) is specified, the environment variable PGDATA\n" +"is used.\n" +"\n" +msgstr "" +"\n" +"如果没有指定数据目录(DATADIR), 将使用\n" +"环境变量PGDATA.\n" +"\n" + +#: pg_checksums.c:91 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "臭虫报告至 <%s>.\n" + +#: pg_checksums.c:92 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 主页: <%s>\n" + +#: pg_checksums.c:161 +#, c-format +msgid "%*s/%s MB (%d%%) computed" +msgstr "已计算%*s/%s MB (%d%%)" + +#: pg_checksums.c:204 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "无法打开文件 \"%s\": %m" + +#: pg_checksums.c:220 +#, c-format +msgid "could not read block %u in file \"%s\": %m" +msgstr "无法在文件\"%2$s\"中读取块%1$u: %3$m" + +#: pg_checksums.c:223 +#, c-format +msgid "could not read block %u in file \"%s\": read %d of %d" +msgstr "无法读取文件\"%2$s\"中的块%1$u:读取第%3$d个,共%4$d个" + +#: pg_checksums.c:240 +#, c-format +msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" +msgstr "校验和验证在文件\"%s\"中失败,块%u:计算的校验和 %X ,但块包含 %X" + +#: pg_checksums.c:255 +#, c-format +msgid "seek failed for block %u in file \"%s\": %m" +msgstr "在文件\"%2$s\"中查找块%1$u失败: %3$m" + +#: pg_checksums.c:264 +#, c-format +msgid "could not write block %u in file \"%s\": %m" +msgstr "无法在文件 \"%2$s\"中写入块%1$u: %3$m" + +#: pg_checksums.c:267 +#, c-format +msgid "could not write block %u in file \"%s\": wrote %d of %d" +msgstr "无法对文件\"%2$s\"写操作数据块%1$u: 已写入%3$d个,共%4$d个" + +#: pg_checksums.c:280 +#, c-format +msgid "checksums verified in file \"%s\"" +msgstr "在文件\"%s\"中验证的校验和" + +#: pg_checksums.c:282 +#, c-format +msgid "checksums enabled in file \"%s\"" +msgstr "文件\"%s\"中启用的校验和" + +#: pg_checksums.c:307 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "无法打开目录 \"%s\": %m" + +#: pg_checksums.c:334 pg_checksums.c:413 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "无法取文件 \"%s\" 的状态: %m" + +#: pg_checksums.c:361 +#, c-format +msgid "invalid segment number %d in file name \"%s\"" +msgstr "文件名\"%2$s\"中的无效段号%1$d" + +#: pg_checksums.c:494 +#, c-format +msgid "invalid filenode specification, must be numeric: %s" +msgstr "filenode指定无效,必须是数字: %s" + +#: pg_checksums.c:512 pg_checksums.c:528 pg_checksums.c:538 pg_checksums.c:547 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "请用 \"%s --help\" 获取更多的信息.\n" + +#: pg_checksums.c:527 +#, c-format +msgid "no data directory specified" +msgstr "未指定数据目录" + +#: pg_checksums.c:536 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "命令行参数太多(第一个是\"%s\")" + +#: pg_checksums.c:546 +#, c-format +msgid "option -f/--filenode can only be used with --check" +msgstr " -f/--filenode选项只能与--check一起使用" + +#: pg_checksums.c:556 +#, c-format +msgid "pg_control CRC value is incorrect" +msgstr "pg_control的CRC值不正确 " + +#: pg_checksums.c:562 +#, c-format +msgid "cluster is not compatible with this version of pg_checksums" +msgstr "群集与此版本的pg_checksums不兼容”" + +#: pg_checksums.c:568 +#, c-format +msgid "database cluster is not compatible" +msgstr "数据库群集不兼容" + +#: pg_checksums.c:569 +#, c-format +msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u.\n" +msgstr "数据库群集是用块大小%u初始化的,但pg_checksums是用块大小%u编译的.\n" + +#: pg_checksums.c:582 +#, c-format +msgid "cluster must be shut down" +msgstr "必须关闭群集" + +#: pg_checksums.c:589 +#, c-format +msgid "data checksums are not enabled in cluster" +msgstr "群集中未启用数据校验和" + +#: pg_checksums.c:596 +#, c-format +msgid "data checksums are already disabled in cluster" +msgstr "群集中已禁用数据校验和" + +#: pg_checksums.c:603 +#, c-format +msgid "data checksums are already enabled in cluster" +msgstr "群集中已启用数据校验和" + +#: pg_checksums.c:632 +#, c-format +msgid "Checksum operation completed\n" +msgstr "校验和操作已完成\n" + +#: pg_checksums.c:633 +#, c-format +msgid "Files scanned: %s\n" +msgstr "扫描的文件: %s\n" + +#: pg_checksums.c:634 +#, c-format +msgid "Blocks scanned: %s\n" +msgstr "扫描的块: %s\n" + +#: pg_checksums.c:637 +#, c-format +msgid "Bad checksums: %s\n" +msgstr "坏校验和: %s\n" + +#: pg_checksums.c:638 pg_checksums.c:665 +#, c-format +msgid "Data checksum version: %d\n" +msgstr "数据校验和版本: %d\n" + +#: pg_checksums.c:657 +#, c-format +msgid "syncing data directory" +msgstr "同步数据目录" + +#: pg_checksums.c:661 +#, c-format +msgid "updating control file" +msgstr "正在更新控制文件" + +#: pg_checksums.c:667 +#, c-format +msgid "Checksums enabled in cluster\n" +msgstr "群集中启用的校验和\n" + +#: pg_checksums.c:669 +#, c-format +msgid "Checksums disabled in cluster\n" +msgstr "在群集中禁用校验和\n" \ No newline at end of file diff --git a/src/bin/pg_config/po/cs.po b/src/bin/pg_config/po/cs.po index c4a6483be974e..9a616830cb107 100644 --- a/src/bin/pg_config/po/cs.po +++ b/src/bin/pg_config/po/cs.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_config-cs (PostgreSQL 9.3)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:13+0000\n" -"PO-Revision-Date: 2019-09-28 11:28+0200\n" +"POT-Creation-Date: 2020-10-31 16:14+0000\n" +"PO-Revision-Date: 2020-10-31 21:30+0100\n" "Last-Translator: Tomas Vondra \n" "Language-Team: Czech \n" "Language: cs\n" @@ -16,52 +16,51 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" -#: ../../common/config_info.c:130 ../../common/config_info.c:138 -#: ../../common/config_info.c:146 ../../common/config_info.c:154 -#: ../../common/config_info.c:162 ../../common/config_info.c:170 -#: ../../common/config_info.c:178 ../../common/config_info.c:186 -#: ../../common/config_info.c:194 +#: ../../common/config_info.c:134 ../../common/config_info.c:142 +#: ../../common/config_info.c:150 ../../common/config_info.c:158 +#: ../../common/config_info.c:166 ../../common/config_info.c:174 +#: ../../common/config_info.c:182 ../../common/config_info.c:190 msgid "not recorded" msgstr "nezaznamenáno" -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "nelze získat aktuální adresář: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "neplatný binární soubor\"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "nelze číst binární soubor \"%s\"" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "nelze najít soubor \"%s\" ke spuštění" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "nelze změnit adresář na \"%s\" : %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "nelze přečíst symbolický odkaz \"%s\": %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "volání pclose selhalo: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 msgid "out of memory" msgstr "nedostatek paměti" @@ -236,38 +235,46 @@ msgstr "" #: pg_config.c:105 #, c-format -msgid "Report bugs to .\n" -msgstr "Oznámení o chybách zasílejte na .\n" +msgid "Report bugs to <%s>.\n" +msgstr "Chyby hlašte na <%s>.\n" -#: pg_config.c:111 +#: pg_config.c:106 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" + +#: pg_config.c:112 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" -#: pg_config.c:153 +#: pg_config.c:154 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: nelze najít vlastní spustitelný soubor\n" -#: pg_config.c:180 +#: pg_config.c:181 #, c-format msgid "%s: invalid argument: %s\n" msgstr "%s: neplatný parametr: %s\n" -#~ msgid "child process exited with unrecognized status %d" -#~ msgstr "potomek skončil s nerozponaným stavem %d" +#~ msgid "could not read symbolic link \"%s\"" +#~ msgstr "nelze číst symbolický link \"%s\"" -#~ msgid "child process was terminated by signal %d" -#~ msgstr "potomek byl ukončen signálem %d" +#~ msgid "child process exited with exit code %d" +#~ msgstr "potomek skončil s návratovým kódem %d" + +#~ msgid "child process was terminated by exception 0x%X" +#~ msgstr "potomek byl ukončen vyjímkou 0x%X" #~ msgid "child process was terminated by signal %s" #~ msgstr "potomek byl ukončen signálem %s" -#~ msgid "child process was terminated by exception 0x%X" -#~ msgstr "potomek byl ukončen vyjímkou 0x%X" +#~ msgid "child process was terminated by signal %d" +#~ msgstr "potomek byl ukončen signálem %d" -#~ msgid "child process exited with exit code %d" -#~ msgstr "potomek skončil s návratovým kódem %d" +#~ msgid "child process exited with unrecognized status %d" +#~ msgstr "potomek skončil s nerozponaným stavem %d" -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "nelze číst symbolický link \"%s\"" +#~ msgid "Report bugs to .\n" +#~ msgstr "Oznámení o chybách zasílejte na .\n" diff --git a/src/bin/pg_config/po/de.po b/src/bin/pg_config/po/de.po index fd8be01228b62..93c9088186ee1 100644 --- a/src/bin/pg_config/po/de.po +++ b/src/bin/pg_config/po/de.po @@ -1,14 +1,14 @@ # German message translation file for pg_config -# Peter Eisentraut , 2004 - 2020. +# Peter Eisentraut , 2004 - 2021. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 13\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-04-09 10:14+0000\n" -"PO-Revision-Date: 2020-04-09 15:12+0200\n" +"POT-Creation-Date: 2021-04-29 03:16+0000\n" +"PO-Revision-Date: 2021-04-29 06:58+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -23,42 +23,42 @@ msgstr "" msgid "not recorded" msgstr "nicht aufgezeichnet" -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "konnte aktuelles Verzeichnis nicht ermitteln: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "ungültige Programmdatei »%s«" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "konnte Programmdatei »%s« nicht lesen" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "konnte kein »%s« zum Ausführen finden" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "konnte nicht in Verzeichnis »%s« wechseln: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht lesen: %m" -#: ../../common/exec.c:410 +#: ../../common/exec.c:409 #, c-format -msgid "pclose failed: %m" -msgstr "pclose fehlgeschlagen: %m" +msgid "%s() failed: %m" +msgstr "%s() fehlgeschlagen: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" msgstr "Speicher aufgebraucht" diff --git a/src/bin/pg_config/po/es.po b/src/bin/pg_config/po/es.po index 8164d564bf4ed..1b40049e27469 100644 --- a/src/bin/pg_config/po/es.po +++ b/src/bin/pg_config/po/es.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_config (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:44+0000\n" -"PO-Revision-Date: 2019-06-06 17:22-0400\n" +"POT-Creation-Date: 2020-09-13 10:45+0000\n" +"PO-Revision-Date: 2020-09-12 22:54-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -265,12 +265,12 @@ msgstr "" #: pg_config.c:105 #, c-format msgid "Report bugs to <%s>.\n" -msgstr "" +msgstr "Reporte errores a <%s>.\n" #: pg_config.c:106 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" #: pg_config.c:112 #, c-format @@ -286,6 +286,3 @@ msgstr "%s: no se pudo encontrar el ejecutable propio\n" #, c-format msgid "%s: invalid argument: %s\n" msgstr "%s: el argumento no es válido: %s\n" - -#~ msgid "Report bugs to .\n" -#~ msgstr "Reporte errores a .\n" diff --git a/src/bin/pg_config/po/fr.po b/src/bin/pg_config/po/fr.po index c0da8724f8472..aa7b5e0806a36 100644 --- a/src/bin/pg_config/po/fr.po +++ b/src/bin/pg_config/po/fr.po @@ -9,15 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-04-16 06:14+0000\n" -"PO-Revision-Date: 2020-04-16 14:06+0200\n" +"POT-Creation-Date: 2021-04-26 06:46+0000\n" +"PO-Revision-Date: 2021-04-26 11:37+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: PostgreSQLfr \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" #: ../../common/config_info.c:134 ../../common/config_info.c:142 #: ../../common/config_info.c:150 ../../common/config_info.c:158 @@ -26,42 +26,42 @@ msgstr "" msgid "not recorded" msgstr "non enregistré" -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "n'a pas pu identifier le répertoire courant : %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "binaire « %s » invalide" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "n'a pas pu lire le binaire « %s »" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "n'a pas pu trouver un « %s » à exécuter" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "n'a pas pu modifier le répertoire par « %s » : %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "n'a pas pu lire le lien symbolique « %s » : %m" -#: ../../common/exec.c:410 +#: ../../common/exec.c:409 #, c-format -msgid "pclose failed: %m" -msgstr "échec de pclose : %m" +msgid "%s() failed: %m" +msgstr "échec de %s() : %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" msgstr "mémoire épuisée" @@ -289,32 +289,35 @@ msgstr "%s : n'a pas pu trouver son propre exécutable\n" msgid "%s: invalid argument: %s\n" msgstr "%s : argument invalide : %s\n" -#~ msgid "could not change directory to \"%s\": %s" -#~ msgstr "n'a pas pu changer le répertoire par « %s » : %s" +#~ msgid "Report bugs to .\n" +#~ msgstr "Rapporter les bogues à .\n" -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "n'a pas pu lire le lien symbolique « %s »" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help affiche cette aide puis quitte\n" -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "n'a pas pu accéder au répertoire « %s »" +#~ msgid "child process exited with unrecognized status %d" +#~ msgstr "le processus fils a quitté avec un statut %d non reconnu" -#~ msgid "child process exited with exit code %d" -#~ msgstr "le processus fils a quitté avec le code de sortie %d" +#~ msgid "child process was terminated by signal %d" +#~ msgstr "le processus fils a été terminé par le signal %d" + +#~ msgid "child process was terminated by signal %s" +#~ msgstr "le processus fils a été terminé par le signal %s" #~ msgid "child process was terminated by exception 0x%X" #~ msgstr "le processus fils a été terminé par l'exception 0x%X" -#~ msgid "child process was terminated by signal %s" -#~ msgstr "le processus fils a été terminé par le signal %s" +#~ msgid "child process exited with exit code %d" +#~ msgstr "le processus fils a quitté avec le code de sortie %d" -#~ msgid "child process was terminated by signal %d" -#~ msgstr "le processus fils a été terminé par le signal %d" +#~ msgid "could not change directory to \"%s\"" +#~ msgstr "n'a pas pu accéder au répertoire « %s »" -#~ msgid "child process exited with unrecognized status %d" -#~ msgstr "le processus fils a quitté avec un statut %d non reconnu" +#~ msgid "could not read symbolic link \"%s\"" +#~ msgstr "n'a pas pu lire le lien symbolique « %s »" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide puis quitte\n" +#~ msgid "could not change directory to \"%s\": %s" +#~ msgstr "n'a pas pu changer le répertoire par « %s » : %s" -#~ msgid "Report bugs to .\n" -#~ msgstr "Rapporter les bogues à .\n" +#~ msgid "pclose failed: %m" +#~ msgstr "échec de pclose : %m" diff --git a/src/bin/pg_config/po/ja.po b/src/bin/pg_config/po/ja.po index 409038af75f52..0252ccfac0549 100644 --- a/src/bin/pg_config/po/ja.po +++ b/src/bin/pg_config/po/ja.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_config (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: pg_config (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-06-06 10:43+0900\n" -"PO-Revision-Date: 2019-06-06 19:08+0900\n" +"POT-Creation-Date: 2020-08-21 15:54+0900\n" +"PO-Revision-Date: 2020-09-13 08:56+0200\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -16,52 +16,51 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" -#: ../../common/config_info.c:130 ../../common/config_info.c:138 -#: ../../common/config_info.c:146 ../../common/config_info.c:154 -#: ../../common/config_info.c:162 ../../common/config_info.c:170 -#: ../../common/config_info.c:178 ../../common/config_info.c:186 -#: ../../common/config_info.c:194 +#: ../../common/config_info.c:134 ../../common/config_info.c:142 +#: ../../common/config_info.c:150 ../../common/config_info.c:158 +#: ../../common/config_info.c:166 ../../common/config_info.c:174 +#: ../../common/config_info.c:182 ../../common/config_info.c:190 msgid "not recorded" msgstr "記録されていません" -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "カレントディレクトリを識別できませんでした: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "バイナリ\"%s\"は無効です" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "バイナリ\"%s\"を読み取れませんでした" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "実行する\"%s\"がありませんでした" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "ディレクトリ\"%s\"に移動できませんでした: %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を読めませんでした: %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "pcloseが失敗しました: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 msgid "out of memory" msgstr "メモリ不足です" @@ -98,78 +97,69 @@ msgstr "オプション:\n" #: pg_config.c:78 #, c-format msgid " --bindir show location of user executables\n" -msgstr " --bindir ユーザ実行ファイルの場所を表示します\n" +msgstr " --bindir ユーザ実行ファイルの場所を表示\n" #: pg_config.c:79 #, c-format msgid " --docdir show location of documentation files\n" -msgstr " --docdir 文書ファイルの場所を表示します\n" +msgstr " --docdir 文書ファイルの場所を表示\n" #: pg_config.c:80 #, c-format msgid " --htmldir show location of HTML documentation files\n" -msgstr " --htmldir html文書ファイルの場所を表示します\n" +msgstr " --htmldir html文書ファイルの場所を表示\n" #: pg_config.c:81 #, c-format msgid "" " --includedir show location of C header files of the client\n" " interfaces\n" -msgstr "" -" --includedir クライアントインタフェースのCヘッダファイルの場所を\n" -" 表示します\n" +msgstr " --includedir クライアントインタフェースのCヘッダファイルの場所を表示\n" #: pg_config.c:83 #, c-format msgid " --pkgincludedir show location of other C header files\n" -msgstr " --pkgincludedir その他のCヘッダファイルの場所を表示します\n" +msgstr " --pkgincludedir その他のCヘッダファイルの場所を表示\n" #: pg_config.c:84 #, c-format -msgid "" -" --includedir-server show location of C header files for the server\n" -msgstr " --includedir-server サーバ用Cヘッダファイルの場所を表示します\n" +msgid " --includedir-server show location of C header files for the server\n" +msgstr " --includedir-server サーバ用Cヘッダファイルの場所を表示\n" #: pg_config.c:85 #, c-format msgid " --libdir show location of object code libraries\n" -msgstr "" -" --libdir オブジェクトコードライブラリの場所を表示します\n" +msgstr " --libdir オブジェクトコードライブラリの場所を表示\n" #: pg_config.c:86 #, c-format msgid " --pkglibdir show location of dynamically loadable modules\n" -msgstr " --pkglibdir 動的ロード可能モジュールの場所を表示します\n" +msgstr " --pkglibdir 動的ロード可能モジュールの場所を表示\n" #: pg_config.c:87 #, c-format msgid " --localedir show location of locale support files\n" -msgstr " --localedir ロケールサポートファイルの場所を表示します\n" +msgstr " --localedir ロケールサポートファイルの場所を表示\n" #: pg_config.c:88 #, c-format msgid " --mandir show location of manual pages\n" -msgstr " --mandir マニュアルページの場所を表示します\n" +msgstr " --mandir マニュアルページの場所を表示\n" #: pg_config.c:89 #, c-format -msgid "" -" --sharedir show location of architecture-independent support " -"files\n" -msgstr "" -" --sharedir アーキテクチャ非依存のサポートファイルの場所を\n" -" 表示します。\n" +msgid " --sharedir show location of architecture-independent support files\n" +msgstr " --sharedir アーキテクチャ非依存のサポートファイルの場所を表示\n" #: pg_config.c:90 #, c-format -msgid "" -" --sysconfdir show location of system-wide configuration files\n" -msgstr " --sysconfdir システム全体の設定ファイルの場所を表示します\n" +msgid " --sysconfdir show location of system-wide configuration files\n" +msgstr " --sysconfdir システム全体の設定ファイルの場所を表示\n" #: pg_config.c:91 #, c-format msgid " --pgxs show location of extension makefile\n" -msgstr " --pgxs 拡張makefileの場所を表示します\n" +msgstr " --pgxs 機能拡張のmakefileの場所を表示\n" #: pg_config.c:92 #, c-format @@ -177,76 +167,58 @@ msgid "" " --configure show options given to \"configure\" script when\n" " PostgreSQL was built\n" msgstr "" -" --configure PostgreSQL構築時の\"configure\"スクリプトに与えた\n" -" オプションを表示します\n" +" --configure PostgreSQL構築時に\"configure\"スクリプトに与えた\n" +" オプションを表示\n" #: pg_config.c:94 #, c-format msgid " --cc show CC value used when PostgreSQL was built\n" -msgstr " --cc PostgreSQL構築時に使用したCCの値を表示します\n" +msgstr " --cc PostgreSQL構築時に使用したCCの値を表示\n" #: pg_config.c:95 #, c-format -msgid "" -" --cppflags show CPPFLAGS value used when PostgreSQL was built\n" -msgstr "" -" --cppflags PostgreSQL構築時に使用したCPPFLAGSの値を表示します\n" +msgid " --cppflags show CPPFLAGS value used when PostgreSQL was built\n" +msgstr " --cppflags PostgreSQL構築時に使用したCPPFLAGSの値を表示\n" #: pg_config.c:96 #, c-format -msgid "" -" --cflags show CFLAGS value used when PostgreSQL was built\n" -msgstr "" -" --cflags PostgreSQL構築時に使用したCFLAGSの値を表示します\n" +msgid " --cflags show CFLAGS value used when PostgreSQL was built\n" +msgstr " --cflags PostgreSQL構築時に使用したCFLAGSの値を表示\n" #: pg_config.c:97 #, c-format -msgid "" -" --cflags_sl show CFLAGS_SL value used when PostgreSQL was built\n" -msgstr "" -" --cflags_sl PostgreSQL構築時に使用したCFLAGS_SLの値を表示します\n" +msgid " --cflags_sl show CFLAGS_SL value used when PostgreSQL was built\n" +msgstr " --cflags_sl PostgreSQL構築時に使用したCFLAGS_SLの値を表示\n" #: pg_config.c:98 #, c-format -msgid "" -" --ldflags show LDFLAGS value used when PostgreSQL was built\n" -msgstr "" -" --ldflags PostgreSQL構築時に使用したLDFLAGSの値を表示します\n" +msgid " --ldflags show LDFLAGS value used when PostgreSQL was built\n" +msgstr " --ldflags PostgreSQL構築時に使用したLDFLAGSの値を表示\n" #: pg_config.c:99 #, c-format -msgid "" -" --ldflags_ex show LDFLAGS_EX value used when PostgreSQL was " -"built\n" -msgstr "" -" --ldflags_ex PostgreSQL構築時に使用したLDFLAGS_EXの値を表示しま" -"す\n" +msgid " --ldflags_ex show LDFLAGS_EX value used when PostgreSQL was built\n" +msgstr " --ldflags_ex PostgreSQL構築時に使用したLDFLAGS_EXの値を表示\n" #: pg_config.c:100 #, c-format -msgid "" -" --ldflags_sl show LDFLAGS_SL value used when PostgreSQL was " -"built\n" -msgstr "" -" --ldflags_sl PostgreSQL構築時に使用したLDFLAGS_SLの値を表示しま" -"す\n" +msgid " --ldflags_sl show LDFLAGS_SL value used when PostgreSQL was built\n" +msgstr " --ldflags_sl PostgreSQL構築時に使用したLDFLAGS_SLの値を表示\n" #: pg_config.c:101 #, c-format -msgid "" -" --libs show LIBS value used when PostgreSQL was built\n" -msgstr "" -" --libs PostgreSQL構築時に使用したLIBSの値を表示します\n" +msgid " --libs show LIBS value used when PostgreSQL was built\n" +msgstr " --libs PostgreSQL構築時に使用したLIBSの値を表示\n" #: pg_config.c:102 #, c-format msgid " --version show the PostgreSQL version\n" -msgstr " --version PostgreSQLのバージョンを表示します\n" +msgstr " --version PostgreSQLのバージョンを表示\n" #: pg_config.c:103 #, c-format msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help このヘルプを表示し、終了します\n" +msgstr " -?, --help このヘルプを表示して終了\n" #: pg_config.c:104 #, c-format @@ -261,54 +233,58 @@ msgstr "" #: pg_config.c:105 #, c-format -#| msgid "Report bugs to .\n" -msgid "Report bugs to .\n" -msgstr "不具合はまで報告してください。\n" +msgid "Report bugs to <%s>.\n" +msgstr "バグは<%s>に報告してください。\n" -#: pg_config.c:111 +#: pg_config.c:106 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" + +#: pg_config.c:112 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細は\"%s --help\"を行ってください\n" -#: pg_config.c:153 +#: pg_config.c:154 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: 実行ファイル自体がありませんでした\n" -#: pg_config.c:180 +#: pg_config.c:181 #, c-format msgid "%s: invalid argument: %s\n" msgstr "%s: 無効な引数です: %s\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help ヘルプを表示し、終了します\n" +#~ msgid "could not identify current directory: %s" +#~ msgstr "現在のディレクトリを認識できませんでした: %s" -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "ディレクトリ\"%s\"に移動できませんでした" +#~ msgid "could not change directory to \"%s\": %s" +#~ msgstr "ディレクトリ\"%s\"に移動できませんでした: %s" -#~ msgid "child process was terminated by signal %s" -#~ msgstr "子プロセスがシグナル%sで終了しました" +#~ msgid "could not read symbolic link \"%s\"" +#~ msgstr "シンボリックリンク\"%s\"を読み取ることができませんでした" -#~ msgid "child process was terminated by exception 0x%X" -#~ msgstr "子プロセスが例外0x%Xで終了しました" +#~ msgid "pclose failed: %s" +#~ msgstr "pcloseが失敗しました: %s" -#~ msgid "child process exited with exit code %d" -#~ msgstr "子プロセスが終了コード%dで終了しました" +#~ msgid "child process was terminated by signal %d" +#~ msgstr "子プロセスがシグナル%dで終了しました" #~ msgid "child process exited with unrecognized status %d" #~ msgstr "子プロセスが未知のステータス%dで終了しました" -#~ msgid "child process was terminated by signal %d" -#~ msgstr "子プロセスがシグナル%dで終了しました" +#~ msgid "child process exited with exit code %d" +#~ msgstr "子プロセスが終了コード%dで終了しました" -#~ msgid "pclose failed: %s" -#~ msgstr "pcloseが失敗しました: %s" +#~ msgid "child process was terminated by exception 0x%X" +#~ msgstr "子プロセスが例外0x%Xで終了しました" -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "シンボリックリンク\"%s\"を読み取ることができませんでした" +#~ msgid "child process was terminated by signal %s" +#~ msgstr "子プロセスがシグナル%sで終了しました" -#~ msgid "could not change directory to \"%s\": %s" -#~ msgstr "ディレクトリ\"%s\"に移動できませんでした: %s" +#~ msgid "could not change directory to \"%s\"" +#~ msgstr "ディレクトリ\"%s\"に移動できませんでした" -#~ msgid "could not identify current directory: %s" -#~ msgstr "現在のディレクトリを認識できませんでした: %s" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help ヘルプを表示し、終了します\n" diff --git a/src/bin/pg_config/po/ko.po b/src/bin/pg_config/po/ko.po index 263ac5e072b88..2d44f89e73124 100644 --- a/src/bin/pg_config/po/ko.po +++ b/src/bin/pg_config/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_config (PostgreSQL) 12\n" +"Project-Id-Version: pg_config (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:14+0000\n" -"PO-Revision-Date: 2019-11-01 11:34+0900\n" +"POT-Creation-Date: 2020-10-05 20:44+0000\n" +"PO-Revision-Date: 2020-10-06 11:15+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean team \n" "Language: ko\n" @@ -15,50 +15,49 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../common/config_info.c:130 ../../common/config_info.c:138 -#: ../../common/config_info.c:146 ../../common/config_info.c:154 -#: ../../common/config_info.c:162 ../../common/config_info.c:170 -#: ../../common/config_info.c:178 ../../common/config_info.c:186 -#: ../../common/config_info.c:194 +#: ../../common/config_info.c:134 ../../common/config_info.c:142 +#: ../../common/config_info.c:150 ../../common/config_info.c:158 +#: ../../common/config_info.c:166 ../../common/config_info.c:174 +#: ../../common/config_info.c:182 ../../common/config_info.c:190 msgid "not recorded" msgstr "기록되어 있지 않음" -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "현재 디렉터리를 알 수 없음: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "잘못된 바이너리 파일: \"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "\"%s\" 바이너리 파일을 읽을 수 없음" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "실행할 \"%s\" 파일 찾을 수 없음" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "\"%s\" 디렉터리로 바꿀 수 없음: %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "\"%s\" 심벌릭 링크를 읽을 수 없음: %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "pclose 실패: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 msgid "out of memory" msgstr "메모리 부족" @@ -252,20 +251,25 @@ msgstr "" #: pg_config.c:105 #, c-format -msgid "Report bugs to .\n" -msgstr "오류보고: .\n" +msgid "Report bugs to <%s>.\n" +msgstr "문제점 보고 주소: <%s>\n" -#: pg_config.c:111 +#: pg_config.c:106 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" + +#: pg_config.c:112 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "보다 자세한 정보가 필요하면, \"%s --help\"\n" -#: pg_config.c:153 +#: pg_config.c:154 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: 실행 가능한 프로그램을 찾을 수 없습니다\n" -#: pg_config.c:180 +#: pg_config.c:181 #, c-format msgid "%s: invalid argument: %s\n" msgstr "%s: 잘못된 인수: %s\n" diff --git a/src/bin/pg_config/po/ru.po b/src/bin/pg_config/po/ru.po index 5a1b114b5502f..75c7f89599492 100644 --- a/src/bin/pg_config/po/ru.po +++ b/src/bin/pg_config/po/ru.po @@ -5,13 +5,13 @@ # Serguei A. Mokhov , 2004-2005. # Sergey Burladyan , 2009, 2012. # Andrey Sudnik , 2010. -# Alexander Lakhin , 2012-2016, 2017, 2019. +# Alexander Lakhin , 2012-2016, 2017, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: pg_config (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-09 12:21+0300\n" -"PO-Revision-Date: 2019-08-29 12:50+0300\n" +"POT-Creation-Date: 2020-09-03 11:22+0300\n" +"PO-Revision-Date: 2020-09-03 13:28+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -21,50 +21,49 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../../common/config_info.c:130 ../../common/config_info.c:138 -#: ../../common/config_info.c:146 ../../common/config_info.c:154 -#: ../../common/config_info.c:162 ../../common/config_info.c:170 -#: ../../common/config_info.c:178 ../../common/config_info.c:186 -#: ../../common/config_info.c:194 +#: ../../common/config_info.c:134 ../../common/config_info.c:142 +#: ../../common/config_info.c:150 ../../common/config_info.c:158 +#: ../../common/config_info.c:166 ../../common/config_info.c:174 +#: ../../common/config_info.c:182 ../../common/config_info.c:190 msgid "not recorded" msgstr "не записано" -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "не удалось определить текущий каталог: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "неверный исполняемый файл \"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "не удалось прочитать исполняемый файл \"%s\"" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "не удалось найти запускаемый файл \"%s\"" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "не удалось перейти в каталог \"%s\": %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "не удалось прочитать символическую ссылку \"%s\": %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "ошибка pclose: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 msgid "out of memory" msgstr "нехватка памяти" @@ -279,24 +278,32 @@ msgstr "" #: pg_config.c:105 #, c-format -msgid "Report bugs to .\n" -msgstr "Об ошибках сообщайте по адресу .\n" +msgid "Report bugs to <%s>.\n" +msgstr "Об ошибках сообщайте по адресу <%s>.\n" -#: pg_config.c:111 +#: pg_config.c:106 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: pg_config.c:112 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_config.c:153 +#: pg_config.c:154 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: не удалось найти свой исполняемый файл\n" -#: pg_config.c:180 +#: pg_config.c:181 #, c-format msgid "%s: invalid argument: %s\n" msgstr "%s: неверный аргумент: %s\n" +#~ msgid "Report bugs to .\n" +#~ msgstr "Об ошибках сообщайте по адресу .\n" + #~ msgid "child process exited with unrecognized status %d" #~ msgstr "дочерний процесс завершился с нераспознанным состоянием %d" diff --git a/src/bin/pg_config/po/uk.po b/src/bin/pg_config/po/uk.po index 8a332b740b58a..407ef9fc1b870 100644 --- a/src/bin/pg_config/po/uk.po +++ b/src/bin/pg_config/po/uk.po @@ -1,63 +1,67 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2018-12-04 20:35+0100\n" -"PO-Revision-Date: 2019-05-07 12:57\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:14+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" "Last-Translator: pasha_golub\n" "Language-Team: Ukrainian\n" -"Language: uk_UA\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_11_STABLE/src/bin/pg_config/po/pg_config.pot\n" +"X-Crowdin-File: /DEV_13/pg_config.pot\n" +"X-Crowdin-File-ID: 494\n" -#: ../../common/config_info.c:130 ../../common/config_info.c:138 -#: ../../common/config_info.c:146 ../../common/config_info.c:154 -#: ../../common/config_info.c:162 ../../common/config_info.c:170 -#: ../../common/config_info.c:178 ../../common/config_info.c:186 -#: ../../common/config_info.c:194 +#: ../../common/config_info.c:134 ../../common/config_info.c:142 +#: ../../common/config_info.c:150 ../../common/config_info.c:158 +#: ../../common/config_info.c:166 ../../common/config_info.c:174 +#: ../../common/config_info.c:182 ../../common/config_info.c:190 msgid "not recorded" msgstr "не записано" -#: ../../common/exec.c:127 ../../common/exec.c:241 ../../common/exec.c:284 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format -msgid "could not identify current directory: %s" -msgstr "не вдалося визначити поточний каталог: %s" +msgid "could not identify current directory: %m" +msgstr "не вдалося визначити поточний каталог: %m" -#: ../../common/exec.c:146 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "невірний бінарний файл \"%s\"" -#: ../../common/exec.c:195 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "неможливо прочитати бінарний файл \"%s\"" -#: ../../common/exec.c:202 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "неможливо знайти \"%s\" для виконання" -#: ../../common/exec.c:257 ../../common/exec.c:293 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format -msgid "could not change directory to \"%s\": %s" -msgstr "неможливо змінити директорію на \"%s\": %s" +msgid "could not change directory to \"%s\": %m" +msgstr "не вдалося змінити каталог на \"%s\": %m" -#: ../../common/exec.c:272 +#: ../../common/exec.c:287 #, c-format -msgid "could not read symbolic link \"%s\"" -msgstr "неможливо прочитати символічне посилання \"%s\"" +msgid "could not read symbolic link \"%s\": %m" +msgstr "не можливо прочитати символічне послання \"%s\": %m" -#: ../../common/exec.c:523 +#: ../../common/exec.c:410 #, c-format -msgid "pclose failed: %s" -msgstr "помилка pclose: %s" +msgid "pclose failed: %m" +msgstr "помилка pclose: %m" + +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +msgid "out of memory" +msgstr "недостатньо пам'яті" #: pg_config.c:74 #, c-format @@ -212,21 +216,29 @@ msgstr "\n" #: pg_config.c:105 #, c-format -msgid "Report bugs to .\n" -msgstr "Про помилки повідомляйте .\n" +msgid "Report bugs to <%s>.\n" +msgstr "Повідомляти про помилки на <%s>.\n" + +#: pg_config.c:106 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" -#: pg_config.c:111 +#: pg_config.c:112 #, c-format msgid "Try \"%s --help\" for more information.\n" -msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" -#: pg_config.c:153 +#: pg_config.c:154 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: не вдалося знайти ехе файл власної програми\n" -#: pg_config.c:180 +#: pg_config.c:181 #, c-format msgid "%s: invalid argument: %s\n" msgstr "%s: недопустимий аргумент: %s\n" +#~ msgid "Report bugs to .\n" +#~ msgstr "Про помилки повідомляйте на .\n" + diff --git a/src/bin/pg_controldata/po/cs.po b/src/bin/pg_controldata/po/cs.po index f960f85a2a21b..4774832b805ee 100644 --- a/src/bin/pg_controldata/po/cs.po +++ b/src/bin/pg_controldata/po/cs.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_controldata-cs (PostgreSQL 9.3)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:15+0000\n" -"PO-Revision-Date: 2019-09-27 17:26+0200\n" +"POT-Creation-Date: 2020-10-31 16:17+0000\n" +"PO-Revision-Date: 2020-10-31 20:50+0100\n" "Last-Translator: Tomas Vondra \n" "Language-Team: Czech \n" "Language: cs\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" #: ../../common/controldata_utils.c:73 #, c-format @@ -74,7 +74,7 @@ msgstr "nelze zapsat soubor \"%s\": %m" msgid "could not fsync file \"%s\": %m" msgstr "nelze provést fsync souboru \"%s\": %m" -#: pg_controldata.c:36 +#: pg_controldata.c:35 #, c-format msgid "" "%s displays control information of a PostgreSQL database cluster.\n" @@ -83,17 +83,17 @@ msgstr "" "%s vypíše kontrolní informace o PostgreSQL databázi.\n" "\n" -#: pg_controldata.c:37 +#: pg_controldata.c:36 #, c-format msgid "Usage:\n" msgstr "Použití:\n" -#: pg_controldata.c:38 +#: pg_controldata.c:37 #, c-format msgid " %s [OPTION] [DATADIR]\n" msgstr " %s [VOLBY] [DATOVÝ-ADRESÁŘ]\n" -#: pg_controldata.c:39 +#: pg_controldata.c:38 #, c-format msgid "" "\n" @@ -102,22 +102,22 @@ msgstr "" "\n" "Volby:\n" -#: pg_controldata.c:40 +#: pg_controldata.c:39 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]DATADIR datový adresář\n" -#: pg_controldata.c:41 +#: pg_controldata.c:40 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version vypiš informaci o verzi, potom skonči\n" -#: pg_controldata.c:42 +#: pg_controldata.c:41 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help vypiš tuto nápovědu, potom skonči\n" -#: pg_controldata.c:43 +#: pg_controldata.c:42 #, c-format msgid "" "\n" @@ -131,10 +131,15 @@ msgstr "" "PGDATA.\n" "\n" +#: pg_controldata.c:44 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "Chyby hlašte na <%s>.\n" + #: pg_controldata.c:45 #, c-format -msgid "Report bugs to .\n" -msgstr "Oznámení o chybách zasílejte na .\n" +msgid "%s home page: <%s>\n" +msgstr "%s domovská stránka: <%s>\n" #: pg_controldata.c:55 msgid "starting up" @@ -172,22 +177,22 @@ msgstr "neznámý stavový kód" msgid "unrecognized wal_level" msgstr "neznámý wal_level" -#: pg_controldata.c:138 pg_controldata.c:156 pg_controldata.c:164 +#: pg_controldata.c:137 pg_controldata.c:155 pg_controldata.c:163 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" -#: pg_controldata.c:154 +#: pg_controldata.c:153 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "příliš mnoho argumentů v příkazové řádce (první je \"%s\")" -#: pg_controldata.c:163 +#: pg_controldata.c:162 #, c-format msgid "no data directory specified" msgstr "není specifikován datový adresář" -#: pg_controldata.c:171 +#: pg_controldata.c:170 #, c-format msgid "" "WARNING: Calculated CRC checksum does not match value stored in file.\n" @@ -202,12 +207,12 @@ msgstr "" "očekává. Níže uvedené výsledky jsou nedůvěryhodné.\n" "\n" -#: pg_controldata.c:180 +#: pg_controldata.c:179 #, c-format msgid "WARNING: invalid WAL segment size\n" msgstr "WARNING: neplatná velikost WAL segmentu\n" -#: pg_controldata.c:181 +#: pg_controldata.c:180 #, c-format msgid "" "The WAL segment size stored in the file, %d byte, is not a power of two\n" @@ -235,301 +240,295 @@ msgstr[2] "" "nedůvěryhodné.\n" "\n" -#: pg_controldata.c:223 +#: pg_controldata.c:222 msgid "???" msgstr "???" -#: pg_controldata.c:236 +#: pg_controldata.c:228 #, c-format msgid "pg_control version number: %u\n" msgstr "Číslo verze pg_controlu: %u\n" -#: pg_controldata.c:238 +#: pg_controldata.c:230 #, c-format msgid "Catalog version number: %u\n" msgstr "Číslo verze katalogu: %u\n" -#: pg_controldata.c:240 +#: pg_controldata.c:232 #, c-format -msgid "Database system identifier: %s\n" -msgstr "Identifikátor databázového systému: %s\n" +msgid "Database system identifier: %llu\n" +msgstr "" +"Identifikátor databázového systému: %llu\n" +"\n" -#: pg_controldata.c:242 +#: pg_controldata.c:234 #, c-format msgid "Database cluster state: %s\n" msgstr "Status databázového klastru: %s\n" -#: pg_controldata.c:244 +#: pg_controldata.c:236 #, c-format msgid "pg_control last modified: %s\n" msgstr "Poslední modifikace pg_control: %s\n" -#: pg_controldata.c:246 +#: pg_controldata.c:238 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "Poslední umístění checkpointu: %X/%X\n" -#: pg_controldata.c:249 +#: pg_controldata.c:241 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "Poslední umístění REDO checkpointu: %X/%X\n" -#: pg_controldata.c:252 +#: pg_controldata.c:244 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "REDO WAL file posledního checkpointu: %s\n" -#: pg_controldata.c:254 +#: pg_controldata.c:246 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "TimeLineID posledního checkpointu: %u\n" -#: pg_controldata.c:256 +#: pg_controldata.c:248 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "PrevTimeLineID posledního checkpointu: %u\n" -#: pg_controldata.c:258 +#: pg_controldata.c:250 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "Poslední full_page_writes checkpointu: %s\n" -#: pg_controldata.c:259 pg_controldata.c:304 pg_controldata.c:316 +#: pg_controldata.c:251 pg_controldata.c:296 pg_controldata.c:308 msgid "off" msgstr "vypnuto" -#: pg_controldata.c:259 pg_controldata.c:304 pg_controldata.c:316 +#: pg_controldata.c:251 pg_controldata.c:296 pg_controldata.c:308 msgid "on" msgstr "zapnuto" -#: pg_controldata.c:260 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "NextXID posledního checkpointu: %u:%u\n" -#: pg_controldata.c:263 +#: pg_controldata.c:255 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "Poslední umístění NextOID checkpointu: %u\n" -#: pg_controldata.c:265 +#: pg_controldata.c:257 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId posledního checkpointu: %u\n" -#: pg_controldata.c:267 +#: pg_controldata.c:259 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset posledního checkpointu: %u\n" -#: pg_controldata.c:269 +#: pg_controldata.c:261 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID posledního checkpointu: %u\n" -#: pg_controldata.c:271 +#: pg_controldata.c:263 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "DB k oldestXID posledního checkpointu: %u\n" -#: pg_controldata.c:273 +#: pg_controldata.c:265 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID posledního checkpointu: %u\n" -#: pg_controldata.c:275 +#: pg_controldata.c:267 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid posledního checkpointu: %u\n" -#: pg_controldata.c:277 +#: pg_controldata.c:269 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "DB k oldestMulti posledního checkpointu: %u\n" -#: pg_controldata.c:279 +#: pg_controldata.c:271 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "oldestCommitTsXid posledního checkpointu: %u\n" -#: pg_controldata.c:281 +#: pg_controldata.c:273 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "newestCommitTsXid posledního checkpointu: %u\n" -#: pg_controldata.c:283 +#: pg_controldata.c:275 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "Čas posledního checkpointu: %s\n" -#: pg_controldata.c:285 +#: pg_controldata.c:277 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "Falešné LSN počítadlo pro unlogged relace: %X/%X\n" -#: pg_controldata.c:288 +#: pg_controldata.c:280 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "Minimální pozice ukončení obnovy: %X/%X\n" -#: pg_controldata.c:291 +#: pg_controldata.c:283 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "Timeline minimální pozice ukončení obnovy: %u\n" -#: pg_controldata.c:293 +#: pg_controldata.c:285 #, c-format msgid "Backup start location: %X/%X\n" msgstr "Pozice počátku backupu: %X/%X\n" -#: pg_controldata.c:296 +#: pg_controldata.c:288 #, c-format msgid "Backup end location: %X/%X\n" msgstr "Koncová pozice zálohy: %X/%X\n" -#: pg_controldata.c:299 +#: pg_controldata.c:291 #, c-format msgid "End-of-backup record required: %s\n" msgstr "Vyžadován záznam konce backupu: %s\n" -#: pg_controldata.c:300 +#: pg_controldata.c:292 msgid "no" msgstr "ne" -#: pg_controldata.c:300 +#: pg_controldata.c:292 msgid "yes" msgstr "ano" -#: pg_controldata.c:301 +#: pg_controldata.c:293 #, c-format msgid "wal_level setting: %s\n" msgstr "wal_level hodnota: %s\n" -#: pg_controldata.c:303 +#: pg_controldata.c:295 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "wal_log_hints hodnota: %s\n" -#: pg_controldata.c:305 +#: pg_controldata.c:297 #, c-format msgid "max_connections setting: %d\n" msgstr "max_connections hodnota: %d\n" -#: pg_controldata.c:307 +#: pg_controldata.c:299 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "max_worker_processes hodnota: %d\n" -#: pg_controldata.c:309 +#: pg_controldata.c:301 #, c-format msgid "max_wal_senders setting: %d\n" msgstr "max_wal_senders setting: %d\n" -#: pg_controldata.c:311 +#: pg_controldata.c:303 #, c-format msgid "max_prepared_xacts setting: %d\n" msgstr "max_prepared_xacts hodnota: %d\n" -#: pg_controldata.c:313 +#: pg_controldata.c:305 #, c-format msgid "max_locks_per_xact setting: %d\n" msgstr "max_locks_per_xact hodnota: %d\n" -#: pg_controldata.c:315 +#: pg_controldata.c:307 #, c-format msgid "track_commit_timestamp setting: %s\n" msgstr "track_commit_timestamp hodnota: %s\n" -#: pg_controldata.c:317 +#: pg_controldata.c:309 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Maximální zarovnání dat: %u\n" -#: pg_controldata.c:320 +#: pg_controldata.c:312 #, c-format msgid "Database block size: %u\n" msgstr "Velikost databázového bloku: %u\n" -#: pg_controldata.c:322 +#: pg_controldata.c:314 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Bloků v segmentu velké relace: %u\n" -#: pg_controldata.c:324 +#: pg_controldata.c:316 #, c-format msgid "WAL block size: %u\n" msgstr "Velikost WAL bloku: %u\n" -#: pg_controldata.c:326 +#: pg_controldata.c:318 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Bytů ve WAL segmentu: %u\n" -#: pg_controldata.c:328 +#: pg_controldata.c:320 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Maximální délka identifikátorů: %u\n" -#: pg_controldata.c:330 +#: pg_controldata.c:322 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Maximální počet sloupců v indexu: %u\n" -#: pg_controldata.c:332 +#: pg_controldata.c:324 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Maximální velikost úseku TOAST: %u\n" -#: pg_controldata.c:334 +#: pg_controldata.c:326 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Velikost large-object chunku: %u\n" -#: pg_controldata.c:337 +#: pg_controldata.c:329 #, c-format msgid "Date/time type storage: %s\n" msgstr "Způsob uložení typu date/time: %s\n" -#: pg_controldata.c:338 +#: pg_controldata.c:330 msgid "64-bit integers" msgstr "64-bitová čísla" -#: pg_controldata.c:339 +#: pg_controldata.c:331 #, c-format -msgid "Float4 argument passing: %s\n" -msgstr "Způsob předávání float4 hodnot: %s\n" +msgid "Float8 argument passing: %s\n" +msgstr "Způsob předávání float8 hodnot: %s\n" -#: pg_controldata.c:340 pg_controldata.c:342 +#: pg_controldata.c:332 msgid "by reference" msgstr "odkazem" -#: pg_controldata.c:340 pg_controldata.c:342 +#: pg_controldata.c:332 msgid "by value" msgstr "hodnotou" -#: pg_controldata.c:341 -#, c-format -msgid "Float8 argument passing: %s\n" -msgstr "Způsob předávání float8 hodnot: %s\n" - -#: pg_controldata.c:343 +#: pg_controldata.c:333 #, c-format msgid "Data page checksum version: %u\n" msgstr "Verze kontrolních součtů datových stránek: %u\n" -#: pg_controldata.c:345 +#: pg_controldata.c:335 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "Zkušební authentizační nonce: %s\n" -#~ msgid " -V, --version output version information, then exit\n" -#~ msgstr " -V, --version vypíše informaci o verzi, pak skončí\n" - -#~ msgid " -?, --help show this help, then exit\n" -#~ msgstr " -?, --help ukáže tuto nápovědu, a skončí\n" +#~ msgid "%s: could not open file \"%s\" for reading: %s\n" +#~ msgstr "%s: nelze otevřít soubor \"%s\" pro čtení: %s\n" -#~ msgid "floating-point numbers" -#~ msgstr "čísla s plovoucí řádovou čárkou" +#~ msgid "%s: could not read file \"%s\": %s\n" +#~ msgstr "%s: nelze číst soubor \"%s\": %s\n" #~ msgid "" #~ "Usage:\n" @@ -546,8 +545,17 @@ msgstr "Zkušební authentizační nonce: %s\n" #~ " --help ukáže tuto nápovědu a skončí\n" #~ " --version ukáže verzi tohoto programu a skončí\n" -#~ msgid "%s: could not read file \"%s\": %s\n" -#~ msgstr "%s: nelze číst soubor \"%s\": %s\n" +#~ msgid "floating-point numbers" +#~ msgstr "čísla s plovoucí řádovou čárkou" -#~ msgid "%s: could not open file \"%s\" for reading: %s\n" -#~ msgstr "%s: nelze otevřít soubor \"%s\" pro čtení: %s\n" +#~ msgid " -?, --help show this help, then exit\n" +#~ msgstr " -?, --help ukáže tuto nápovědu, a skončí\n" + +#~ msgid " -V, --version output version information, then exit\n" +#~ msgstr " -V, --version vypíše informaci o verzi, pak skončí\n" + +#~ msgid "Float4 argument passing: %s\n" +#~ msgstr "Způsob předávání float4 hodnot: %s\n" + +#~ msgid "Report bugs to .\n" +#~ msgstr "Oznámení o chybách zasílejte na .\n" diff --git a/src/bin/pg_controldata/po/es.po b/src/bin/pg_controldata/po/es.po index 4a2e360726e01..2764c38466f44 100644 --- a/src/bin/pg_controldata/po/es.po +++ b/src/bin/pg_controldata/po/es.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_controldata (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:47+0000\n" -"PO-Revision-Date: 2019-06-06 17:23-0400\n" +"POT-Creation-Date: 2020-09-13 10:47+0000\n" +"PO-Revision-Date: 2020-09-12 22:55-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -134,12 +134,12 @@ msgstr "" #: pg_controldata.c:44 #, c-format msgid "Report bugs to <%s>.\n" -msgstr "" +msgstr "Reporte errores a <%s>.\n" #: pg_controldata.c:45 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" #: pg_controldata.c:55 msgid "starting up" @@ -247,10 +247,9 @@ msgid "Catalog version number: %u\n" msgstr "Número de versión del catálogo: %u\n" #: pg_controldata.c:232 -#, fuzzy, c-format -#| msgid "Database system identifier: %s\n" +#, c-format msgid "Database system identifier: %llu\n" -msgstr "Identificador de sistema: %s\n" +msgstr "Identificador de sistema: %llu\n" #: pg_controldata.c:234 #, c-format @@ -514,9 +513,3 @@ msgstr "Versión de sumas de verificación de datos: %u\n" #, c-format msgid "Mock authentication nonce: %s\n" msgstr "Nonce para autentificación simulada: %s\n" - -#~ msgid "Report bugs to .\n" -#~ msgstr "Reporte errores a .\n" - -#~ msgid "Float4 argument passing: %s\n" -#~ msgstr "Paso de parámetros float4: %s\n" diff --git a/src/bin/pg_controldata/po/ja.po b/src/bin/pg_controldata/po/ja.po index 5e4430d1bf116..a98a05fbf1b69 100644 --- a/src/bin/pg_controldata/po/ja.po +++ b/src/bin/pg_controldata/po/ja.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_controldata (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: pg_controldata (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-06-06 10:43+0900\n" -"PO-Revision-Date: 2019-06-11 20:10+0900\n" +"POT-Creation-Date: 2020-08-21 15:54+0900\n" +"PO-Revision-Date: 2020-09-13 08:56+0200\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" #: ../../common/controldata_utils.c:73 #, c-format @@ -32,8 +32,8 @@ msgstr "ファイル\"%s\"の読み取りに失敗しました: %m" #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "" -"ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込み" -"ました" +"ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込" +"みました" #: ../../common/controldata_utils.c:117 ../../common/controldata_utils.c:259 #, c-format @@ -46,26 +46,21 @@ msgstr "バイトオーダの不整合" #: ../../common/controldata_utils.c:137 #, c-format -#| msgid "" -#| "WARNING: possible byte ordering mismatch\n" -#| "The byte ordering used to store the pg_control file might not match the " -#| "one\n" -#| "used by this program. In that case the results below would be incorrect, " -#| "and\n" -#| "the PostgreSQL installation would be incompatible with this data " -#| "directory.\n" msgid "" "possible byte ordering mismatch\n" -"The byte ordering used to store the pg_control file might not match the one\n" +"The byte ordering used to store the pg_control file might not match the " +"one\n" "used by this program. In that case the results below would be incorrect, " "and\n" "the PostgreSQL installation would be incompatible with this data directory." msgstr "" "バイトオーダが異なる可能性があります。\n" -"pg_controlファイルを格納するために使用するバイトオーダが本プログラムで使用\n" +"pg_controlファイルを格納するために使用するバイトオーダが本プログラムで使" +"用\n" "されるものと一致しないようです。この場合以下の結果は不正確になります。ま" "た、\n" -"PostgreSQLインストレーションはこのデータディレクトリと互換性がなくなります。" +"PostgreSQLインストレーションはこのデータディレクトリと互換性がなくなりま" +"す。" #: ../../common/controldata_utils.c:203 #, c-format @@ -82,7 +77,7 @@ msgstr "ファイル\"%s\"を書き出せませんでした: %m" msgid "could not fsync file \"%s\": %m" msgstr "ファイル\"%s\"をfsyncできませんでした: %m" -#: pg_controldata.c:36 +#: pg_controldata.c:35 #, c-format msgid "" "%s displays control information of a PostgreSQL database cluster.\n" @@ -91,17 +86,17 @@ msgstr "" "%s はPostgreSQLデータベースクラスタの制御情報を表示します。\n" "\n" -#: pg_controldata.c:37 +#: pg_controldata.c:36 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: pg_controldata.c:38 +#: pg_controldata.c:37 #, c-format msgid " %s [OPTION] [DATADIR]\n" msgstr " %s [OPTION] [DATADIR]\n" -#: pg_controldata.c:39 +#: pg_controldata.c:38 #, c-format msgid "" "\n" @@ -110,22 +105,22 @@ msgstr "" "\n" "オプション:\n" -#: pg_controldata.c:40 +#: pg_controldata.c:39 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]DATADIR データディレクトリ\n" -#: pg_controldata.c:41 +#: pg_controldata.c:40 #, c-format msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version バージョン情報を表示して終了します\n" +msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_controldata.c:42 +#: pg_controldata.c:41 #, c-format msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help このヘルプを表示して終了します\n" +msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_controldata.c:43 +#: pg_controldata.c:42 #, c-format msgid "" "\n" @@ -139,11 +134,15 @@ msgstr "" "す。\n" "\n" +#: pg_controldata.c:44 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "バグは<%s>に報告してください。\n" + #: pg_controldata.c:45 #, c-format -#| msgid "Report bugs to .\n" -msgid "Report bugs to .\n" -msgstr "不具合はまで報告してください。\n" +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" #: pg_controldata.c:55 msgid "starting up" @@ -181,28 +180,27 @@ msgstr "未知のステータスコード" msgid "unrecognized wal_level" msgstr "wal_level を認識できません" -#: pg_controldata.c:138 pg_controldata.c:156 pg_controldata.c:164 +#: pg_controldata.c:137 pg_controldata.c:155 pg_controldata.c:163 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細は\"%s --help\"を実行してください\n" -#: pg_controldata.c:154 +#: pg_controldata.c:153 #, c-format -#| msgid "%s: too many command-line arguments (first is \"%s\")\n" msgid "too many command-line arguments (first is \"%s\")" msgstr "コマンドライン引数が多すぎます。(先頭は\"%s\")" -#: pg_controldata.c:163 +#: pg_controldata.c:162 #, c-format -#| msgid "%s: no data directory specified\n" msgid "no data directory specified" msgstr "データディレクトリが指定されていません" -#: pg_controldata.c:171 +#: pg_controldata.c:170 #, c-format msgid "" "WARNING: Calculated CRC checksum does not match value stored in file.\n" -"Either the file is corrupt, or it has a different layout than this program\n" +"Either the file is corrupt, or it has a different layout than this " +"program\n" "is expecting. The results below are untrustworthy.\n" "\n" msgstr "" @@ -211,12 +209,12 @@ msgstr "" "可能性があります。以下の結果は信頼できません。\n" "\n" -#: pg_controldata.c:180 +#: pg_controldata.c:179 #, c-format msgid "WARNING: invalid WAL segment size\n" msgstr "警告: 不正なWALセグメントサイズ\n" -#: pg_controldata.c:181 +#: pg_controldata.c:180 #, c-format msgid "" "The WAL segment size stored in the file, %d byte, is not a power of two\n" @@ -234,310 +232,307 @@ msgstr[0] "" "以下の情報は信頼できません。\n" "\n" -#: pg_controldata.c:223 +#: pg_controldata.c:222 msgid "???" msgstr "???" -#: pg_controldata.c:236 +#: pg_controldata.c:228 #, c-format msgid "pg_control version number: %u\n" msgstr "pg_controlバージョン番号: %u\n" -#: pg_controldata.c:238 +#: pg_controldata.c:230 #, c-format msgid "Catalog version number: %u\n" msgstr "カタログバージョン番号: %u\n" -#: pg_controldata.c:240 +#: pg_controldata.c:232 #, c-format -msgid "Database system identifier: %s\n" -msgstr "データベースシステム識別子: %s\n" +msgid "Database system identifier: %llu\n" +msgstr "データベースシステム識別子: %llu\n" -#: pg_controldata.c:242 +#: pg_controldata.c:234 #, c-format msgid "Database cluster state: %s\n" msgstr "データベースクラスタの状態: %s\n" -#: pg_controldata.c:244 +#: pg_controldata.c:236 #, c-format msgid "pg_control last modified: %s\n" msgstr "pg_control最終更新: %s\n" -#: pg_controldata.c:246 +#: pg_controldata.c:238 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "最終チェックポイント位置: %X/%X\n" -#: pg_controldata.c:249 +#: pg_controldata.c:241 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "最終チェックポイントのREDO位置: %X/%X\n" -#: pg_controldata.c:252 +#: pg_controldata.c:244 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "最終チェックポイントのREDO WALファイル: %s\n" -#: pg_controldata.c:254 +#: pg_controldata.c:246 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "最終チェックポイントの時系列ID: %u\n" -#: pg_controldata.c:256 +#: pg_controldata.c:248 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "最終チェックポイントのPrevTimeLineID: %u\n" -#: pg_controldata.c:258 +#: pg_controldata.c:250 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "最終チェックポイントのfull_page_writes: %s\n" -#: pg_controldata.c:259 pg_controldata.c:304 pg_controldata.c:316 +#: pg_controldata.c:251 pg_controldata.c:296 pg_controldata.c:308 msgid "off" msgstr "オフ" -#: pg_controldata.c:259 pg_controldata.c:304 pg_controldata.c:316 +#: pg_controldata.c:251 pg_controldata.c:296 pg_controldata.c:308 msgid "on" msgstr "オン" -#: pg_controldata.c:260 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "最終チェックポイントのNextXID: %u:%u\n" -#: pg_controldata.c:263 +#: pg_controldata.c:255 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "最終チェックポイントのNextOID: %u\n" -#: pg_controldata.c:265 +#: pg_controldata.c:257 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "最終チェックポイントのNextMultiXactId: %u\n" -#: pg_controldata.c:267 +#: pg_controldata.c:259 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "最終チェックポイントのNextMultiOffset: %u\n" -#: pg_controldata.c:269 +#: pg_controldata.c:261 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "最終チェックポイントのoldestXID: %u\n" -#: pg_controldata.c:271 +#: pg_controldata.c:263 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "最終チェックポイントのoldestXIDのDB: %u\n" -#: pg_controldata.c:273 +#: pg_controldata.c:265 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "最終チェックポイントのoldestActiveXID: %u\n" -#: pg_controldata.c:275 +#: pg_controldata.c:267 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "最終チェックポイントのoldestMultiXid: %u\n" -#: pg_controldata.c:277 +#: pg_controldata.c:269 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "最終チェックポイントのoldestMultiのDB: %u\n" -#: pg_controldata.c:279 +#: pg_controldata.c:271 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "最終チェックポイントのoldestCommitTsXid: %u\n" -#: pg_controldata.c:281 +#: pg_controldata.c:273 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "最終チェックポイントのnewestCommitTsXid: %u\n" -#: pg_controldata.c:283 +#: pg_controldata.c:275 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "最終チェックポイント時刻: %s\n" -#: pg_controldata.c:285 +#: pg_controldata.c:277 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "UNLOGGEDリレーションの偽のLSNカウンタ: %X/%X\n" -#: pg_controldata.c:288 +#: pg_controldata.c:280 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "最小リカバリ終了位置: %X/%X\n" -#: pg_controldata.c:291 +#: pg_controldata.c:283 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "最小リカバリ終了位置のタイムライン: %u\n" -#: pg_controldata.c:293 +#: pg_controldata.c:285 #, c-format msgid "Backup start location: %X/%X\n" msgstr "バックアップ開始位置: %X/%X\n" -#: pg_controldata.c:296 +#: pg_controldata.c:288 #, c-format msgid "Backup end location: %X/%X\n" msgstr "バックアップ終了位置: %X/%X\n" -#: pg_controldata.c:299 +#: pg_controldata.c:291 #, c-format msgid "End-of-backup record required: %s\n" msgstr "必要なバックアップ最終レコード: %s\n" -#: pg_controldata.c:300 +#: pg_controldata.c:292 msgid "no" msgstr "いいえ" -#: pg_controldata.c:300 +#: pg_controldata.c:292 msgid "yes" msgstr "はい" -#: pg_controldata.c:301 +#: pg_controldata.c:293 #, c-format msgid "wal_level setting: %s\n" msgstr "wal_levelの設定: %s\n" -#: pg_controldata.c:303 +#: pg_controldata.c:295 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "wal_log_hintsの設定: %s\n" -#: pg_controldata.c:305 +#: pg_controldata.c:297 #, c-format msgid "max_connections setting: %d\n" msgstr "max_connectionsの設定: %d\n" -#: pg_controldata.c:307 +#: pg_controldata.c:299 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "max_worker_processesの設定: %d\n" -#: pg_controldata.c:309 +#: pg_controldata.c:301 #, c-format -#| msgid "max_connections setting: %d\n" msgid "max_wal_senders setting: %d\n" msgstr "max_wal_sendersの設定: %d\n" -#: pg_controldata.c:311 +#: pg_controldata.c:303 #, c-format msgid "max_prepared_xacts setting: %d\n" msgstr "max_prepared_xactsの設定: %d\n" -#: pg_controldata.c:313 +#: pg_controldata.c:305 #, c-format msgid "max_locks_per_xact setting: %d\n" msgstr "max_locks_per_xactの設定: %d\n" -#: pg_controldata.c:315 +#: pg_controldata.c:307 #, c-format msgid "track_commit_timestamp setting: %s\n" msgstr "track_commit_timestampの設定: %s\n" -#: pg_controldata.c:317 +#: pg_controldata.c:309 #, c-format msgid "Maximum data alignment: %u\n" msgstr "最大データアラインメント: %u\n" -#: pg_controldata.c:320 +#: pg_controldata.c:312 #, c-format msgid "Database block size: %u\n" msgstr "データベースのブロックサイズ: %u\n" -#: pg_controldata.c:322 +#: pg_controldata.c:314 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "大きなリレーションのセグメント毎のブロック数:%u\n" -#: pg_controldata.c:324 +#: pg_controldata.c:316 #, c-format msgid "WAL block size: %u\n" msgstr "WALのブロックサイズ: %u\n" -#: pg_controldata.c:326 +#: pg_controldata.c:318 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "WALセグメント当たりのバイト数: %u\n" -#: pg_controldata.c:328 +#: pg_controldata.c:320 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "識別子の最大長: %u\n" -#: pg_controldata.c:330 +#: pg_controldata.c:322 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "インデックス内の最大列数: %u\n" -#: pg_controldata.c:332 +#: pg_controldata.c:324 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "TOASTチャンクの最大サイズ: %u\n" -#: pg_controldata.c:334 +#: pg_controldata.c:326 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "ラージオブジェクトチャンクのサイズ: %u\n" -#: pg_controldata.c:337 +#: pg_controldata.c:329 #, c-format msgid "Date/time type storage: %s\n" msgstr "日付/時刻型の格納方式: %s\n" -#: pg_controldata.c:338 +#: pg_controldata.c:330 msgid "64-bit integers" msgstr "64ビット整数" -#: pg_controldata.c:339 +#: pg_controldata.c:331 #, c-format -msgid "Float4 argument passing: %s\n" -msgstr "Float4引数の渡し方: %s\n" +msgid "Float8 argument passing: %s\n" +msgstr "Float8引数の渡し方: %s\n" -#: pg_controldata.c:340 pg_controldata.c:342 +#: pg_controldata.c:332 msgid "by reference" msgstr "参照渡し" -#: pg_controldata.c:340 pg_controldata.c:342 +#: pg_controldata.c:332 msgid "by value" msgstr "値渡し" -#: pg_controldata.c:341 -#, c-format -msgid "Float8 argument passing: %s\n" -msgstr "Float8引数の渡し方: %s\n" - -#: pg_controldata.c:343 +#: pg_controldata.c:333 #, c-format msgid "Data page checksum version: %u\n" msgstr "データベージチェックサムのバージョン: %u\n" -#: pg_controldata.c:345 +#: pg_controldata.c:335 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "認証用の疑似nonce: %s\n" -#~ msgid " -V, --version output version information, then exit\n" -#~ msgstr " -V, --version バージョン情報を表示して、終了します\n" +#~ msgid "%s: could not open file \"%s\" for reading: %s\n" +#~ msgstr "%s: 読み取り用の\"%s\"ファイルのオープンに失敗しました: %s\n" -#~ msgid " -?, --help show this help, then exit\n" -#~ msgstr " -?, --help このヘルプを表示して、終了します\n" +#~ msgid "%s: could not read file \"%s\": %s\n" +#~ msgstr "%s: \"%s\"ファイルの読み取りに失敗しました: %s\n" + +#~ msgid "%s: could not read file \"%s\": read %d of %d\n" +#~ msgstr "" +#~ "%1$s: ファイル\"%2$s\"を読み込めませんでした: %4$dバイトのうち%3$dバイト" +#~ "を読み込みました\n" #~ msgid "Prior checkpoint location: %X/%X\n" #~ msgstr "前回のチェックポイント位置: %X/%X\n" -#~ msgid "%s: could not read file \"%s\": read %d of %d\n" -#~ msgstr "" -#~ "%1$s: ファイル\"%2$s\"を読み込めませんでした: %4$dバイトのうち%3$dバイトを" -#~ "読み込みました\n" +#~ msgid " -?, --help show this help, then exit\n" +#~ msgstr " -?, --help このヘルプを表示して、終了します\n" -#~ msgid "%s: could not read file \"%s\": %s\n" -#~ msgstr "%s: \"%s\"ファイルの読み取りに失敗しました: %s\n" +#~ msgid " -V, --version output version information, then exit\n" +#~ msgstr " -V, --version バージョン情報を表示して、終了します\n" -#~ msgid "%s: could not open file \"%s\" for reading: %s\n" -#~ msgstr "%s: 読み取り用の\"%s\"ファイルのオープンに失敗しました: %s\n" +#~ msgid "Float4 argument passing: %s\n" +#~ msgstr "Float4引数の渡し方: %s\n" diff --git a/src/bin/pg_controldata/po/ko.po b/src/bin/pg_controldata/po/ko.po index cc06a1093effc..962b36ece7286 100644 --- a/src/bin/pg_controldata/po/ko.po +++ b/src/bin/pg_controldata/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_controldata (PostgreSQL) 12\n" +"Project-Id-Version: pg_controldata (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:16+0000\n" -"PO-Revision-Date: 2019-11-01 11:32+0900\n" +"POT-Creation-Date: 2020-10-05 20:46+0000\n" +"PO-Revision-Date: 2020-10-06 11:18+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean Team \n" "Language: ko\n" @@ -68,7 +68,7 @@ msgstr "\"%s\" 파일을 쓸 수 없습니다: %m" msgid "could not fsync file \"%s\": %m" msgstr "\"%s\" 파일을 fsync 할 수 없습니다: %m" -#: pg_controldata.c:36 +#: pg_controldata.c:35 #, c-format msgid "" "%s displays control information of a PostgreSQL database cluster.\n" @@ -77,17 +77,17 @@ msgstr "" "%s 프로그램은 PostgreSQL 데이터베이스 클러스터의 제어정보를 보여줌.\n" "\n" -#: pg_controldata.c:37 +#: pg_controldata.c:36 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: pg_controldata.c:38 +#: pg_controldata.c:37 #, c-format msgid " %s [OPTION] [DATADIR]\n" msgstr " %s [옵션] [DATADIR]\n" -#: pg_controldata.c:39 +#: pg_controldata.c:38 #, c-format msgid "" "\n" @@ -96,22 +96,22 @@ msgstr "" "\n" "옵션들:\n" -#: pg_controldata.c:40 +#: pg_controldata.c:39 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]DATADIR 데이터 디렉터리\n" -#: pg_controldata.c:41 +#: pg_controldata.c:40 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보 보여주고 마침\n" -#: pg_controldata.c:42 +#: pg_controldata.c:41 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: pg_controldata.c:43 +#: pg_controldata.c:42 #, c-format msgid "" "\n" @@ -125,10 +125,15 @@ msgstr "" "사용합니다.\n" "\n" +#: pg_controldata.c:44 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "문제점 보고 주소: <%s>\n" + #: pg_controldata.c:45 #, c-format -msgid "Report bugs to .\n" -msgstr "오류보고: .\n" +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" #: pg_controldata.c:55 msgid "starting up" @@ -166,22 +171,22 @@ msgstr "알수 없는 상태 코드" msgid "unrecognized wal_level" msgstr "알 수 없는 wal_level" -#: pg_controldata.c:138 pg_controldata.c:156 pg_controldata.c:164 +#: pg_controldata.c:137 pg_controldata.c:155 pg_controldata.c:163 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "보다 자세한 정보는 \"%s --help\"\n" -#: pg_controldata.c:154 +#: pg_controldata.c:153 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "너무 많은 명령행 인수를 지정했습니다. (처음 \"%s\")" -#: pg_controldata.c:163 +#: pg_controldata.c:162 #, c-format msgid "no data directory specified" msgstr "데이터 디렉터리를 지정하지 않았습니다" -#: pg_controldata.c:171 +#: pg_controldata.c:170 #, c-format msgid "" "WARNING: Calculated CRC checksum does not match value stored in file.\n" @@ -194,12 +199,12 @@ msgstr "" "경우입니다. 결과값들은 믿지 못할 값들이 출력될 수 있습니다.\n" "\n" -#: pg_controldata.c:180 +#: pg_controldata.c:179 #, c-format msgid "WARNING: invalid WAL segment size\n" msgstr "경고: 잘못된 WAL 조각 크기\n" -#: pg_controldata.c:181 +#: pg_controldata.c:180 #, c-format msgid "" "The WAL segment size stored in the file, %d byte, is not a power of two\n" @@ -216,289 +221,284 @@ msgstr[0] "" "2^n 값이 아닙니다. 파일이 손상되었으며, 결과 또한 믿을 수 없습니다.\n" "\n" -#: pg_controldata.c:223 +#: pg_controldata.c:222 msgid "???" msgstr "???" -#: pg_controldata.c:236 +#: pg_controldata.c:228 #, c-format msgid "pg_control version number: %u\n" msgstr "pg_control 버전 번호: %u\n" -#: pg_controldata.c:238 +#: pg_controldata.c:230 #, c-format msgid "Catalog version number: %u\n" msgstr "카탈로그 버전 번호: %u\n" -#: pg_controldata.c:240 +#: pg_controldata.c:232 #, c-format -msgid "Database system identifier: %s\n" -msgstr "데이터베이스 시스템 식별자: %s\n" +msgid "Database system identifier: %llu\n" +msgstr "데이터베이스 시스템 식별자: %llu\n" -#: pg_controldata.c:242 +#: pg_controldata.c:234 #, c-format msgid "Database cluster state: %s\n" msgstr "데이터베이스 클러스터 상태: %s\n" -#: pg_controldata.c:244 +#: pg_controldata.c:236 #, c-format msgid "pg_control last modified: %s\n" msgstr "pg_control 마지막 변경시간: %s\n" -#: pg_controldata.c:246 +#: pg_controldata.c:238 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "마지막 체크포인트 위치: %X/%X\n" -#: pg_controldata.c:249 +#: pg_controldata.c:241 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "마지막 체크포인트 REDO 위치: %X/%X\n" -#: pg_controldata.c:252 +#: pg_controldata.c:244 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "마지막 체크포인트 REDO WAL 파일: %s\n" -#: pg_controldata.c:254 +#: pg_controldata.c:246 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "마지막 체크포인트 TimeLineID: %u\n" -#: pg_controldata.c:256 +#: pg_controldata.c:248 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "마지막 체크포인트 PrevTimeLineID: %u\n" -#: pg_controldata.c:258 +#: pg_controldata.c:250 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "마지막 체크포인트 full_page_writes: %s\n" -#: pg_controldata.c:259 pg_controldata.c:304 pg_controldata.c:316 +#: pg_controldata.c:251 pg_controldata.c:296 pg_controldata.c:308 msgid "off" msgstr "off" -#: pg_controldata.c:259 pg_controldata.c:304 pg_controldata.c:316 +#: pg_controldata.c:251 pg_controldata.c:296 pg_controldata.c:308 msgid "on" msgstr "on" -#: pg_controldata.c:260 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "마지막 체크포인트 NextXID: %u:%u\n" -#: pg_controldata.c:263 +#: pg_controldata.c:255 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "마지막 체크포인트 NextOID: %u\n" -#: pg_controldata.c:265 +#: pg_controldata.c:257 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "마지막 체크포인트 NextMultiXactId: %u\n" -#: pg_controldata.c:267 +#: pg_controldata.c:259 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "마지막 체크포인트 NextMultiOffset: %u\n" -#: pg_controldata.c:269 +#: pg_controldata.c:261 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "마지막 체크포인트 제일오래된XID: %u\n" -#: pg_controldata.c:271 +#: pg_controldata.c:263 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "마지막 체크포인트 제일오래된XID의 DB: %u\n" -#: pg_controldata.c:273 +#: pg_controldata.c:265 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "마지막 체크포인트 제일오래된ActiveXID:%u\n" -#: pg_controldata.c:275 +#: pg_controldata.c:267 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "마지막 체크포인트 제일오래된MultiXid: %u\n" -#: pg_controldata.c:277 +#: pg_controldata.c:269 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "마지막 체크포인트 제일오래된멀티Xid DB:%u\n" -#: pg_controldata.c:279 +#: pg_controldata.c:271 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "마지막 체크포인트 제일오래된CommitTsXid:%u\n" -#: pg_controldata.c:281 +#: pg_controldata.c:273 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "마지막 체크포인트 최신CommitTsXid: %u\n" -#: pg_controldata.c:283 +#: pg_controldata.c:275 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "마지막 체크포인트 시간: %s\n" -#: pg_controldata.c:285 +#: pg_controldata.c:277 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "언로그 릴레이션의 가짜 LSN 카운터: %X/%X\n" -#: pg_controldata.c:288 +#: pg_controldata.c:280 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "최소 복구 마지막 위치: %X/%X\n" -#: pg_controldata.c:291 +#: pg_controldata.c:283 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "최소 복구 종료 위치의 타임라인: %u\n" -#: pg_controldata.c:293 +#: pg_controldata.c:285 #, c-format msgid "Backup start location: %X/%X\n" msgstr "백업 시작 위치: %X/%X\n" -#: pg_controldata.c:296 +#: pg_controldata.c:288 #, c-format msgid "Backup end location: %X/%X\n" msgstr "백업 종료 위치: %X/%X\n" -#: pg_controldata.c:299 +#: pg_controldata.c:291 #, c-format msgid "End-of-backup record required: %s\n" msgstr "백업 종료 레코드 필요 여부: %s\n" -#: pg_controldata.c:300 +#: pg_controldata.c:292 msgid "no" msgstr "아니오" -#: pg_controldata.c:300 +#: pg_controldata.c:292 msgid "yes" msgstr "예" -#: pg_controldata.c:301 +#: pg_controldata.c:293 #, c-format msgid "wal_level setting: %s\n" msgstr "wal_level 설정값: %s\n" -#: pg_controldata.c:303 +#: pg_controldata.c:295 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "wal_log_hints 설정값: %s\n" -#: pg_controldata.c:305 +#: pg_controldata.c:297 #, c-format msgid "max_connections setting: %d\n" msgstr "max_connections 설정값: %d\n" -#: pg_controldata.c:307 +#: pg_controldata.c:299 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "max_worker_processes 설정값: %d\n" -#: pg_controldata.c:309 +#: pg_controldata.c:301 #, c-format msgid "max_wal_senders setting: %d\n" msgstr "max_wal_senders 설정값: %d\n" -#: pg_controldata.c:311 +#: pg_controldata.c:303 #, c-format msgid "max_prepared_xacts setting: %d\n" msgstr "max_prepared_xacts 설정값: %d\n" -#: pg_controldata.c:313 +#: pg_controldata.c:305 #, c-format msgid "max_locks_per_xact setting: %d\n" msgstr "max_locks_per_xact 설정값: %d\n" -#: pg_controldata.c:315 +#: pg_controldata.c:307 #, c-format msgid "track_commit_timestamp setting: %s\n" msgstr "track_commit_timestamp 설정값: %s\n" -#: pg_controldata.c:317 +#: pg_controldata.c:309 #, c-format msgid "Maximum data alignment: %u\n" msgstr "최대 자료 정렬: %u\n" -#: pg_controldata.c:320 +#: pg_controldata.c:312 #, c-format msgid "Database block size: %u\n" msgstr "데이터베이스 블록 크기: %u\n" -#: pg_controldata.c:322 +#: pg_controldata.c:314 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "대형 릴레이션의 세그먼트당 블럭 개수: %u\n" -#: pg_controldata.c:324 +#: pg_controldata.c:316 #, c-format msgid "WAL block size: %u\n" msgstr "WAL 블록 크기: %u\n" -#: pg_controldata.c:326 +#: pg_controldata.c:318 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "WAL 세그먼트의 크기(byte): %u\n" -#: pg_controldata.c:328 +#: pg_controldata.c:320 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "식별자 최대 길이: %u\n" -#: pg_controldata.c:330 +#: pg_controldata.c:322 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "인덱스에서 사용하는 최대 열 수: %u\n" -#: pg_controldata.c:332 +#: pg_controldata.c:324 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "TOAST 청크 최대 크기: %u\n" -#: pg_controldata.c:334 +#: pg_controldata.c:326 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "대형 객체 청크 크기: %u\n" -#: pg_controldata.c:337 +#: pg_controldata.c:329 #, c-format msgid "Date/time type storage: %s\n" msgstr "날짜/시간형 자료의 저장방식: %s\n" -#: pg_controldata.c:338 +#: pg_controldata.c:330 msgid "64-bit integers" msgstr "64-비트 정수" -#: pg_controldata.c:339 +#: pg_controldata.c:331 #, c-format -msgid "Float4 argument passing: %s\n" -msgstr "Float4 인수 전달: %s\n" +msgid "Float8 argument passing: %s\n" +msgstr "Float8 인수 전달: %s\n" -#: pg_controldata.c:340 pg_controldata.c:342 +#: pg_controldata.c:332 msgid "by reference" msgstr "참조별" -#: pg_controldata.c:340 pg_controldata.c:342 +#: pg_controldata.c:332 msgid "by value" msgstr "값별" -#: pg_controldata.c:341 -#, c-format -msgid "Float8 argument passing: %s\n" -msgstr "Float8 인수 전달: %s\n" - -#: pg_controldata.c:343 +#: pg_controldata.c:333 #, c-format msgid "Data page checksum version: %u\n" msgstr "데이터 페이지 체크섬 버전: %u\n" -#: pg_controldata.c:345 +#: pg_controldata.c:335 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "임시 모의 인증: %s\n" diff --git a/src/bin/pg_controldata/po/ru.po b/src/bin/pg_controldata/po/ru.po index 50169743fdfec..39343c05a1aa7 100644 --- a/src/bin/pg_controldata/po/ru.po +++ b/src/bin/pg_controldata/po/ru.po @@ -4,13 +4,13 @@ # Serguei A. Mokhov , 2002-2004. # Oleg Bartunov , 2004. # Andrey Sudnik , 2011. -# Alexander Lakhin , 2012-2017, 2018, 2019. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: pg_controldata (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-09 12:21+0300\n" -"PO-Revision-Date: 2019-08-29 14:03+0300\n" +"POT-Creation-Date: 2020-09-03 11:22+0300\n" +"PO-Revision-Date: 2020-09-03 13:28+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -73,7 +73,7 @@ msgstr "не удалось записать файл \"%s\": %m" msgid "could not fsync file \"%s\": %m" msgstr "не удалось прочитать файл \"%s\": %m" -#: pg_controldata.c:36 +#: pg_controldata.c:35 #, c-format msgid "" "%s displays control information of a PostgreSQL database cluster.\n" @@ -82,17 +82,17 @@ msgstr "" "%s показывает информацию о работе кластера баз PostgreSQL.\n" "\n" -#: pg_controldata.c:37 +#: pg_controldata.c:36 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_controldata.c:38 +#: pg_controldata.c:37 #, c-format msgid " %s [OPTION] [DATADIR]\n" msgstr " %s [ПАРАМЕТР] [КАТ_ДАННЫХ]\n" -#: pg_controldata.c:39 +#: pg_controldata.c:38 #, c-format msgid "" "\n" @@ -101,22 +101,22 @@ msgstr "" "\n" "Параметры:\n" -#: pg_controldata.c:40 +#: pg_controldata.c:39 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]КАТ_ДАННЫХ каталог данных\n" -#: pg_controldata.c:41 +#: pg_controldata.c:40 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_controldata.c:42 +#: pg_controldata.c:41 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_controldata.c:43 +#: pg_controldata.c:42 #, c-format msgid "" "\n" @@ -130,10 +130,15 @@ msgstr "" "PGDATA.\n" "\n" +#: pg_controldata.c:44 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "Об ошибках сообщайте по адресу <%s>.\n" + #: pg_controldata.c:45 #, c-format -msgid "Report bugs to .\n" -msgstr "Об ошибках сообщайте по адресу .\n" +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" #: pg_controldata.c:55 msgid "starting up" @@ -171,22 +176,22 @@ msgstr "нераспознанный код состояния" msgid "unrecognized wal_level" msgstr "нераспознанный уровень WAL" -#: pg_controldata.c:138 pg_controldata.c:156 pg_controldata.c:164 +#: pg_controldata.c:137 pg_controldata.c:155 pg_controldata.c:163 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_controldata.c:154 +#: pg_controldata.c:153 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: pg_controldata.c:163 +#: pg_controldata.c:162 #, c-format msgid "no data directory specified" msgstr "каталог данных не указан" -#: pg_controldata.c:171 +#: pg_controldata.c:170 #, c-format msgid "" "WARNING: Calculated CRC checksum does not match value stored in file.\n" @@ -200,12 +205,12 @@ msgstr "" "Следующая информация может быть недостоверной.\n" "\n" -#: pg_controldata.c:180 +#: pg_controldata.c:179 #, c-format msgid "WARNING: invalid WAL segment size\n" msgstr "ПРЕДУПРЕЖДЕНИЕ: неверный размер сегмента WAL\n" -#: pg_controldata.c:181 +#: pg_controldata.c:180 #, c-format msgid "" "The WAL segment size stored in the file, %d byte, is not a power of two\n" @@ -236,315 +241,316 @@ msgstr[2] "" "подлежит сомнению.\n" "\n" -#: pg_controldata.c:223 +#: pg_controldata.c:222 msgid "???" msgstr "???" -#: pg_controldata.c:236 +#: pg_controldata.c:228 #, c-format msgid "pg_control version number: %u\n" msgstr "Номер версии pg_control: %u\n" -#: pg_controldata.c:238 +#: pg_controldata.c:230 #, c-format msgid "Catalog version number: %u\n" msgstr "Номер версии каталога: %u\n" -#: pg_controldata.c:240 +#: pg_controldata.c:232 #, c-format -msgid "Database system identifier: %s\n" -msgstr "Идентификатор системы баз данных: %s\n" +msgid "Database system identifier: %llu\n" +msgstr "Идентификатор системы баз данных: %llu\n" -#: pg_controldata.c:242 +#: pg_controldata.c:234 #, c-format msgid "Database cluster state: %s\n" msgstr "Состояние кластера БД: %s\n" -#: pg_controldata.c:244 +#: pg_controldata.c:236 #, c-format msgid "pg_control last modified: %s\n" msgstr "Последнее обновление pg_control: %s\n" # skip-rule: capital-letter-first -#: pg_controldata.c:246 +#: pg_controldata.c:238 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "Положение последней конт. точки: %X/%X\n" # skip-rule: capital-letter-first -#: pg_controldata.c:249 +#: pg_controldata.c:241 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "Положение REDO последней конт. точки: %X/%X\n" # skip-rule: capital-letter-first -#: pg_controldata.c:252 +#: pg_controldata.c:244 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "Файл WAL c REDO последней к. т.: %s\n" # skip-rule: capital-letter-first -#: pg_controldata.c:254 +#: pg_controldata.c:246 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "Линия времени последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:256 +#: pg_controldata.c:248 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "Пред. линия времени последней к. т.: %u\n" # skip-rule: no-space-after-period -#: pg_controldata.c:258 +#: pg_controldata.c:250 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "Режим full_page_writes последней к.т: %s\n" -#: pg_controldata.c:259 pg_controldata.c:304 pg_controldata.c:316 +#: pg_controldata.c:251 pg_controldata.c:296 pg_controldata.c:308 msgid "off" msgstr "выкл." -#: pg_controldata.c:259 pg_controldata.c:304 pg_controldata.c:316 +#: pg_controldata.c:251 pg_controldata.c:296 pg_controldata.c:308 msgid "on" msgstr "вкл." # skip-rule: capital-letter-first -#: pg_controldata.c:260 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "NextXID последней конт. точки: %u:%u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:263 +#: pg_controldata.c:255 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:265 +#: pg_controldata.c:257 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId послед. конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:267 +#: pg_controldata.c:259 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset послед. конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:269 +#: pg_controldata.c:261 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:271 +#: pg_controldata.c:263 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "БД с oldestXID последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:273 +#: pg_controldata.c:265 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID последней к. т.: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:275 +#: pg_controldata.c:267 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid последней конт. точки: %u\n" # skip-rule: double-space, capital-letter-first -#: pg_controldata.c:277 +#: pg_controldata.c:269 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "БД с oldestMulti последней к. т.: %u\n" # skip-rule: double-space, capital-letter-first -#: pg_controldata.c:279 +#: pg_controldata.c:271 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "oldestCommitTsXid последней к. т.: %u\n" # skip-rule: capital-letter-first, double-space -#: pg_controldata.c:281 +#: pg_controldata.c:273 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "newestCommitTsXid последней к. т.: %u\n" -#: pg_controldata.c:283 +#: pg_controldata.c:275 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "Время последней контрольной точки: %s\n" # skip-rule: capital-letter-first # well-spelled: нежурналир -#: pg_controldata.c:285 +#: pg_controldata.c:277 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "Фиктивный LSN для нежурналир. таблиц: %X/%X\n" -#: pg_controldata.c:288 +#: pg_controldata.c:280 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "Мин. положение конца восстановления: %X/%X\n" # skip-rule: capital-letter-first -#: pg_controldata.c:291 +#: pg_controldata.c:283 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "Линия времени мин. положения к. в.: %u\n" -#: pg_controldata.c:293 +#: pg_controldata.c:285 #, c-format msgid "Backup start location: %X/%X\n" msgstr "Положение начала копии: %X/%X\n" -#: pg_controldata.c:296 +#: pg_controldata.c:288 #, c-format msgid "Backup end location: %X/%X\n" msgstr "Положение конца копии: %X/%X\n" -#: pg_controldata.c:299 +#: pg_controldata.c:291 #, c-format msgid "End-of-backup record required: %s\n" msgstr "Требуется запись конец-копии: %s\n" -#: pg_controldata.c:300 +#: pg_controldata.c:292 msgid "no" msgstr "нет" -#: pg_controldata.c:300 +#: pg_controldata.c:292 msgid "yes" msgstr "да" -#: pg_controldata.c:301 +#: pg_controldata.c:293 #, c-format msgid "wal_level setting: %s\n" msgstr "Значение wal_level: %s\n" -#: pg_controldata.c:303 +#: pg_controldata.c:295 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "Значение wal_log_hints: %s\n" -#: pg_controldata.c:305 +#: pg_controldata.c:297 #, c-format msgid "max_connections setting: %d\n" msgstr "Значение max_connections: %d\n" -#: pg_controldata.c:307 +#: pg_controldata.c:299 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "Значение max_worker_processes: %d\n" -#: pg_controldata.c:309 +#: pg_controldata.c:301 #, c-format msgid "max_wal_senders setting: %d\n" msgstr "Значение max_wal_senders: %d\n" -#: pg_controldata.c:311 +#: pg_controldata.c:303 #, c-format msgid "max_prepared_xacts setting: %d\n" msgstr "Значение max_prepared_xacts: %d\n" -#: pg_controldata.c:313 +#: pg_controldata.c:305 #, c-format msgid "max_locks_per_xact setting: %d\n" msgstr "Значение max_locks_per_xact: %d\n" -#: pg_controldata.c:315 +#: pg_controldata.c:307 #, c-format msgid "track_commit_timestamp setting: %s\n" msgstr "Значение track_commit_timestamp: %s\n" -#: pg_controldata.c:317 +#: pg_controldata.c:309 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Макс. предел выравнивания данных: %u\n" -#: pg_controldata.c:320 +#: pg_controldata.c:312 #, c-format msgid "Database block size: %u\n" msgstr "Размер блока БД: %u\n" # skip-rule: double-space -#: pg_controldata.c:322 +#: pg_controldata.c:314 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Блоков в макс. сегменте отношений: %u\n" -#: pg_controldata.c:324 +#: pg_controldata.c:316 #, c-format msgid "WAL block size: %u\n" msgstr "Размер блока WAL: %u\n" -#: pg_controldata.c:326 +#: pg_controldata.c:318 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Байт в сегменте WAL: %u\n" -#: pg_controldata.c:328 +#: pg_controldata.c:320 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Максимальная длина идентификаторов: %u\n" -#: pg_controldata.c:330 +#: pg_controldata.c:322 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Макс. число столбцов в индексе: %u\n" -#: pg_controldata.c:332 +#: pg_controldata.c:324 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Максимальный размер порции TOAST: %u\n" -#: pg_controldata.c:334 +#: pg_controldata.c:326 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Размер порции большого объекта: %u\n" -#: pg_controldata.c:337 +#: pg_controldata.c:329 #, c-format msgid "Date/time type storage: %s\n" msgstr "Формат хранения даты/времени: %s\n" -#: pg_controldata.c:338 +#: pg_controldata.c:330 msgid "64-bit integers" msgstr "64-битные целые" -#: pg_controldata.c:339 +#: pg_controldata.c:331 #, c-format -msgid "Float4 argument passing: %s\n" -msgstr "Передача аргумента Float4: %s\n" +msgid "Float8 argument passing: %s\n" +msgstr "Передача аргумента float8: %s\n" -#: pg_controldata.c:340 pg_controldata.c:342 +#: pg_controldata.c:332 msgid "by reference" msgstr "по ссылке" -#: pg_controldata.c:340 pg_controldata.c:342 +#: pg_controldata.c:332 msgid "by value" msgstr "по значению" -#: pg_controldata.c:341 -#, c-format -msgid "Float8 argument passing: %s\n" -msgstr "Передача аргумента Float8: %s\n" - -#: pg_controldata.c:343 +#: pg_controldata.c:333 #, c-format msgid "Data page checksum version: %u\n" msgstr "Версия контрольных сумм страниц: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:345 +#: pg_controldata.c:335 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "Случ. число для псевдоаутентификации: %s\n" +#~ msgid "Report bugs to .\n" +#~ msgstr "Об ошибках сообщайте по адресу .\n" + +#~ msgid "Float4 argument passing: %s\n" +#~ msgstr "Передача аргумента Float4: %s\n" + # skip-rule: capital-letter-first #~ msgid "Prior checkpoint location: %X/%X\n" #~ msgstr "Положение предыдущей конт. точки: %X/%X\n" diff --git a/src/bin/pg_controldata/po/uk.po b/src/bin/pg_controldata/po/uk.po index 345263acd788b..23c5dfb714825 100644 --- a/src/bin/pg_controldata/po/uk.po +++ b/src/bin/pg_controldata/po/uk.po @@ -1,87 +1,108 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2018-12-04 20:35+0100\n" -"PO-Revision-Date: 2019-07-11 16:20\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:17+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" "Last-Translator: pasha_golub\n" "Language-Team: Ukrainian\n" -"Language: uk_UA\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_11_STABLE/src/bin/pg_controldata/po/pg_controldata.pot\n" +"X-Crowdin-File: /DEV_13/pg_controldata.pot\n" +"X-Crowdin-File-ID: 496\n" -#: ../../common/controldata_utils.c:62 +#: ../../common/controldata_utils.c:73 #, c-format -msgid "%s: could not open file \"%s\" for reading: %s\n" -msgstr "%s: не вдалося відкрити файл \"%s\" для читання: %s\n" +msgid "could not open file \"%s\" for reading: %m" +msgstr "не вдалося відкрити файл \"%s\" для читання: %m" -#: ../../common/controldata_utils.c:78 +#: ../../common/controldata_utils.c:89 #, c-format -msgid "%s: could not read file \"%s\": %s\n" -msgstr "%s: не вдалося прочитати файл \"%s\": %s\n" +msgid "could not read file \"%s\": %m" +msgstr "не вдалося прочитати файл \"%s\": %m" -#: ../../common/controldata_utils.c:90 +#: ../../common/controldata_utils.c:101 #, c-format -msgid "%s: could not read file \"%s\": read %d of %d\n" -msgstr "%s: не вдалося прочитати файл \"%s\": прочитано %d з %d\n" +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не вдалося прочитати файл \"%s\": прочитано %d з %zu" -#: ../../common/controldata_utils.c:112 +#: ../../common/controldata_utils.c:117 ../../common/controldata_utils.c:259 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "неможливо закрити файл \"%s\": %m" + +#: ../../common/controldata_utils.c:135 msgid "byte ordering mismatch" msgstr "неправильний порядок байтів" -#: ../../common/controldata_utils.c:114 +#: ../../common/controldata_utils.c:137 #, c-format -msgid "WARNING: possible byte ordering mismatch\n" +msgid "possible byte ordering mismatch\n" "The byte ordering used to store the pg_control file might not match the one\n" "used by this program. In that case the results below would be incorrect, and\n" -"the PostgreSQL installation would be incompatible with this data directory.\n" -msgstr "УВАГА: можлива помилка у послідовності байтів \n" -"Порядок байтів, що використовують для зберігання файлу pg_control може не відповідати тому, який використовується цією програмою. У такому випадку результати нижче будуть неправильним, і інсталяція PostgreSQL буде несумісною з цим каталогом даних.\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "можлива помилка у послідовності байтів.\n" +"Порядок байтів, що використовують для зберігання файлу pg_control, може не відповідати тому, який використовується цією програмою. У такому випадку результати нижче будуть неправильним, і інсталяція PostgreSQL буде несумісною з цим каталогом даних." + +#: ../../common/controldata_utils.c:203 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" -#: pg_controldata.c:34 +#: ../../common/controldata_utils.c:224 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "не вдалося записати файл \"%s\": %m" + +#: ../../common/controldata_utils.c:245 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "не вдалося fsync файл \"%s\": %m" + +#: pg_controldata.c:35 #, c-format msgid "%s displays control information of a PostgreSQL database cluster.\n\n" msgstr "%s відображає контрольну інформацію щодо кластеру PostgreSQL.\n\n" -#: pg_controldata.c:35 +#: pg_controldata.c:36 #, c-format msgid "Usage:\n" msgstr "Використання:\n" -#: pg_controldata.c:36 +#: pg_controldata.c:37 #, c-format msgid " %s [OPTION] [DATADIR]\n" msgstr " %s [OPTION] [DATADIR]\n" -#: pg_controldata.c:37 +#: pg_controldata.c:38 #, c-format msgid "\n" "Options:\n" msgstr "\n" "Параметри:\n" -#: pg_controldata.c:38 +#: pg_controldata.c:39 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]DATADIR каталог з даними\n" -#: pg_controldata.c:39 +#: pg_controldata.c:40 #, c-format msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version вивести інформацію про версію і вийти\n" +msgstr " -V, --version вивести інформацію про версію і вийти\n" -#: pg_controldata.c:40 +#: pg_controldata.c:41 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показати цю довідку потім вийти\n" -#: pg_controldata.c:41 +#: pg_controldata.c:42 #, c-format msgid "\n" "If no data directory (DATADIR) is specified, the environment variable PGDATA\n" @@ -89,75 +110,80 @@ msgid "\n" msgstr "\n" "Якщо каталог даних не вказано (DATADIR), використовується змінна середовища PGDATA.\n\n" -#: pg_controldata.c:43 +#: pg_controldata.c:44 #, c-format -msgid "Report bugs to .\n" -msgstr "Про помилки повідомляйте .\n" +msgid "Report bugs to <%s>.\n" +msgstr "Повідомляти про помилки на <%s>.\n" -#: pg_controldata.c:53 +#: pg_controldata.c:45 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: pg_controldata.c:55 msgid "starting up" msgstr "запуск" -#: pg_controldata.c:55 +#: pg_controldata.c:57 msgid "shut down" msgstr "завершення роботи" -#: pg_controldata.c:57 +#: pg_controldata.c:59 msgid "shut down in recovery" msgstr "завершення роботи у відновленні" -#: pg_controldata.c:59 +#: pg_controldata.c:61 msgid "shutting down" msgstr "завершення роботи" -#: pg_controldata.c:61 +#: pg_controldata.c:63 msgid "in crash recovery" msgstr "відновлення при збої" -#: pg_controldata.c:63 +#: pg_controldata.c:65 msgid "in archive recovery" msgstr "відновлення в архіві" -#: pg_controldata.c:65 +#: pg_controldata.c:67 msgid "in production" msgstr "у виробництві" -#: pg_controldata.c:67 +#: pg_controldata.c:69 msgid "unrecognized status code" msgstr "невизнаний код статусу" -#: pg_controldata.c:82 +#: pg_controldata.c:84 msgid "unrecognized wal_level" msgstr "невизнаний wal_рівень" -#: pg_controldata.c:136 pg_controldata.c:154 pg_controldata.c:162 +#: pg_controldata.c:137 pg_controldata.c:155 pg_controldata.c:163 #, c-format msgid "Try \"%s --help\" for more information.\n" -msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" -#: pg_controldata.c:152 +#: pg_controldata.c:153 #, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s: забагато аргументів у командному рядку (перший \"%s\")\n" +msgid "too many command-line arguments (first is \"%s\")" +msgstr "забагато аргументів у командному рядку (перший \"%s\")" -#: pg_controldata.c:161 +#: pg_controldata.c:162 #, c-format -msgid "%s: no data directory specified\n" -msgstr "%s: каталог даних не вказано\n" +msgid "no data directory specified" +msgstr "каталог даних не вказано" -#: pg_controldata.c:169 +#: pg_controldata.c:170 #, c-format msgid "WARNING: Calculated CRC checksum does not match value stored in file.\n" "Either the file is corrupt, or it has a different layout than this program\n" "is expecting. The results below are untrustworthy.\n\n" msgstr "ПОПЕРЕДЖЕННЯ: Контрольна сума CRC не відповідає збереженому значенню у файлі. Або файл пошкоджено, або він містить іншу структуру, ніж очікує ця програма. Результати нижче є недостовірними.\n\n" -#: pg_controldata.c:178 +#: pg_controldata.c:179 #, c-format msgid "WARNING: invalid WAL segment size\n" msgstr "ПОПЕРЕДЖЕННЯ: неправильний розмір WAL сегменту \n" -#: pg_controldata.c:179 +#: pg_controldata.c:180 #, c-format msgid "The WAL segment size stored in the file, %d byte, is not a power of two\n" "between 1 MB and 1 GB. The file is corrupt and the results below are\n" @@ -170,284 +196,284 @@ msgstr[1] "Розмір WAL сегменту збережений у файлі, msgstr[2] "Розмір WAL сегменту збережений у файлі, %d байтів, не є степенем двійки між 1 MB та 1 GB. Файл пошкоджено та результати нижче є недостовірними.\n\n" msgstr[3] "Розмір WAL сегменту збережений у файлі, %d байта, не є степенем двійки між 1 MB та 1 GB. Файл пошкоджено та результати нижче є недостовірними.\n\n" -#: pg_controldata.c:221 +#: pg_controldata.c:222 msgid "???" msgstr "???" -#: pg_controldata.c:234 +#: pg_controldata.c:228 #, c-format msgid "pg_control version number: %u\n" msgstr "pg_control номер версії: %u\n" -#: pg_controldata.c:236 +#: pg_controldata.c:230 #, c-format msgid "Catalog version number: %u\n" msgstr "Номер версії каталогу: %u\n" -#: pg_controldata.c:238 +#: pg_controldata.c:232 #, c-format -msgid "Database system identifier: %s\n" -msgstr "Системний ідентифікатор бази даних: %s\n" +msgid "Database system identifier: %llu\n" +msgstr "Системний ідентифікатор бази даних: %llu\n" -#: pg_controldata.c:240 +#: pg_controldata.c:234 #, c-format msgid "Database cluster state: %s\n" msgstr "Стан кластеру бази даних: %s\n" -#: pg_controldata.c:242 +#: pg_controldata.c:236 #, c-format msgid "pg_control last modified: %s\n" msgstr "pg_control був модифікований востаннє: %s\n" -#: pg_controldata.c:244 +#: pg_controldata.c:238 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "Останнє місце знаходження контрольної точки: %X/%X\n" -#: pg_controldata.c:247 +#: pg_controldata.c:241 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "Розташування останньої контрольної точки: %X%X\n" -#: pg_controldata.c:250 +#: pg_controldata.c:244 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "Останній файл контрольної точки REDO WAL: %s\n" -#: pg_controldata.c:252 +#: pg_controldata.c:246 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "Останній TimeLineID контрольної точки: %u\n" -#: pg_controldata.c:254 +#: pg_controldata.c:248 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "Останній PrevTimeLineID контрольної точки: %u\n" -#: pg_controldata.c:256 +#: pg_controldata.c:250 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "Останній full_page_writes контрольної точки: %s\n" -#: pg_controldata.c:257 pg_controldata.c:302 pg_controldata.c:312 +#: pg_controldata.c:251 pg_controldata.c:296 pg_controldata.c:308 msgid "off" -msgstr "вимк." +msgstr "вимк" -#: pg_controldata.c:257 pg_controldata.c:302 pg_controldata.c:312 +#: pg_controldata.c:251 pg_controldata.c:296 pg_controldata.c:308 msgid "on" -msgstr "увімк." +msgstr "увімк" -#: pg_controldata.c:258 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "Останній NextXID контрольної точки: %u%u\n" -#: pg_controldata.c:261 +#: pg_controldata.c:255 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "Останній NextOID контрольної точки: %u\n" -#: pg_controldata.c:263 +#: pg_controldata.c:257 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "Останній NextMultiXactId контрольної точки: %u\n" -#: pg_controldata.c:265 +#: pg_controldata.c:259 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "Останній NextMultiOffset контрольної точки: %u\n" -#: pg_controldata.c:267 +#: pg_controldata.c:261 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "Останній oldestXID контрольної точки: %u\n" -#: pg_controldata.c:269 +#: pg_controldata.c:263 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "Остання DB останнього oldestXID контрольної точки: %u\n" -#: pg_controldata.c:271 +#: pg_controldata.c:265 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "Останній oldestActiveXID контрольної точки: %u\n" -#: pg_controldata.c:273 +#: pg_controldata.c:267 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "Останній oldestMultiXid контрольної точки: %u \n" -#: pg_controldata.c:275 +#: pg_controldata.c:269 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "Остання DB останньої oldestMulti контрольної точки: %u\n" -#: pg_controldata.c:277 +#: pg_controldata.c:271 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "Останній oldestCommitTsXid контрольної точки:%u\n" -#: pg_controldata.c:279 +#: pg_controldata.c:273 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "Останній newestCommitTsXid контрольної точки: %u\n" -#: pg_controldata.c:281 +#: pg_controldata.c:275 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "Час останньої контрольної точки: %s\n" -#: pg_controldata.c:283 +#: pg_controldata.c:277 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "Фіктивний LSN для таблиць без журналювання: %X/%X\n" -#: pg_controldata.c:286 +#: pg_controldata.c:280 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "Мінімальне розташування кінця відновлення: %X/%X\n" -#: pg_controldata.c:289 +#: pg_controldata.c:283 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "Мінімальна позиція історії часу завершення відновлення: %u\n" -#: pg_controldata.c:291 +#: pg_controldata.c:285 #, c-format msgid "Backup start location: %X/%X\n" msgstr "Початкове розташування резервного копіювання: %X/%X\n" -#: pg_controldata.c:294 +#: pg_controldata.c:288 #, c-format msgid "Backup end location: %X/%X\n" msgstr "Кінцеве розташування резервного копіювання: %X/%X\n" -#: pg_controldata.c:297 +#: pg_controldata.c:291 #, c-format msgid "End-of-backup record required: %s\n" msgstr "Вимагається запис кінця резервного копіювання: %s\n" -#: pg_controldata.c:298 +#: pg_controldata.c:292 msgid "no" msgstr "ні" -#: pg_controldata.c:298 +#: pg_controldata.c:292 msgid "yes" msgstr "так" -#: pg_controldata.c:299 +#: pg_controldata.c:293 #, c-format msgid "wal_level setting: %s\n" msgstr "налаштування wal_рівня: %s\n" -#: pg_controldata.c:301 +#: pg_controldata.c:295 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "налаштування wal_log_hints: %s\n" -#: pg_controldata.c:303 +#: pg_controldata.c:297 #, c-format msgid "max_connections setting: %d\n" msgstr "налаштування max_connections: %d\n" -#: pg_controldata.c:305 +#: pg_controldata.c:299 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "налаштування max_worker_processes: %d\n" -#: pg_controldata.c:307 +#: pg_controldata.c:301 +#, c-format +msgid "max_wal_senders setting: %d\n" +msgstr "налаштування max_wal_senders: %d\n" + +#: pg_controldata.c:303 #, c-format msgid "max_prepared_xacts setting: %d\n" msgstr "налаштування max_prepared_xacts: %d\n" -#: pg_controldata.c:309 +#: pg_controldata.c:305 #, c-format msgid "max_locks_per_xact setting: %d\n" msgstr "налаштування max_locks_per_xact: %d\n" -#: pg_controldata.c:311 +#: pg_controldata.c:307 #, c-format msgid "track_commit_timestamp setting: %s\n" msgstr "налаштування track_commit_timestamp: %s\n" -#: pg_controldata.c:313 +#: pg_controldata.c:309 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Максимальне вирівнювання даних: %u\n" -#: pg_controldata.c:316 +#: pg_controldata.c:312 #, c-format msgid "Database block size: %u\n" msgstr "Розмір блоку бази даних: %u\n" -#: pg_controldata.c:318 +#: pg_controldata.c:314 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Блоків на сегмент великого відношення: %u\n" -#: pg_controldata.c:320 +#: pg_controldata.c:316 #, c-format msgid "WAL block size: %u\n" msgstr "Pозмір блоку WAL: %u\n" -#: pg_controldata.c:322 +#: pg_controldata.c:318 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Байтів на сегмент WAL: %u\n" -#: pg_controldata.c:324 +#: pg_controldata.c:320 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Максимальна довжина ідентифікаторів: %u\n" -#: pg_controldata.c:326 +#: pg_controldata.c:322 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Максимальна кількість стовпців в індексі: %u\n" -#: pg_controldata.c:328 +#: pg_controldata.c:324 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Максимальний розмір сегменту TOAST: %u\n" -#: pg_controldata.c:330 +#: pg_controldata.c:326 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Розмір сегменту великих обїєктів: %u\n" -#: pg_controldata.c:333 +#: pg_controldata.c:329 #, c-format msgid "Date/time type storage: %s\n" msgstr "Дата/час типу сховища: %s\n" -#: pg_controldata.c:334 +#: pg_controldata.c:330 msgid "64-bit integers" msgstr "64-бітні цілі" -#: pg_controldata.c:335 +#: pg_controldata.c:331 #, c-format -msgid "Float4 argument passing: %s\n" -msgstr "Передача аргументу Float4: %s\n" +msgid "Float8 argument passing: %s\n" +msgstr "Передача аргументу Float8: %s\n" -#: pg_controldata.c:336 pg_controldata.c:338 +#: pg_controldata.c:332 msgid "by reference" msgstr "за посиланням" -#: pg_controldata.c:336 pg_controldata.c:338 +#: pg_controldata.c:332 msgid "by value" msgstr "за значенням" -#: pg_controldata.c:337 -#, c-format -msgid "Float8 argument passing: %s\n" -msgstr "Передача аргументу Float8: %s\n" - -#: pg_controldata.c:339 +#: pg_controldata.c:333 #, c-format msgid "Data page checksum version: %u\n" msgstr "Версія контрольних сум сторінок даних: %u\n" -#: pg_controldata.c:341 +#: pg_controldata.c:335 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "Імітувати нонс для аутентифікації: %s\n" diff --git a/src/bin/pg_ctl/nls.mk b/src/bin/pg_ctl/nls.mk index 1a8a4bafe1239..15b5b4851a20f 100644 --- a/src/bin/pg_ctl/nls.mk +++ b/src/bin/pg_ctl/nls.mk @@ -1,4 +1,4 @@ # src/bin/pg_ctl/nls.mk CATALOG_NAME = pg_ctl -AVAIL_LANGUAGES = cs de es fr he it ja ko pl pt_BR ru sv tr uk zh_CN +AVAIL_LANGUAGES = cs de el es fr he it ja ko pl pt_BR ru sv tr uk zh_CN GETTEXT_FILES = pg_ctl.c ../../common/exec.c ../../common/fe_memutils.c ../../common/wait_error.c ../../port/path.c diff --git a/src/bin/pg_ctl/po/cs.po b/src/bin/pg_ctl/po/cs.po index fc36f766411f3..c7b3237b8c2cd 100644 --- a/src/bin/pg_ctl/po/cs.po +++ b/src/bin/pg_ctl/po/cs.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_ctl-cs (PostgreSQL 9.3)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:13+0000\n" -"PO-Revision-Date: 2019-09-27 18:51+0200\n" +"POT-Creation-Date: 2020-10-31 16:14+0000\n" +"PO-Revision-Date: 2020-10-31 21:30+0100\n" "Last-Translator: Tomas Vondra \n" "Language-Team: Czech \n" "Language: cs\n" @@ -16,55 +16,55 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "nelze identifikovat aktuální adresář: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "neplatný binární soubor\"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "nelze číst binární soubor \"%s\"" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "nelze najít soubor \"%s\" ke spuštění" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "nelze změnit adresář na \"%s\" : %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "nelze přečíst symbolický odkaz \"%s\": %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "volání pclose selhalo: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 msgid "out of memory" msgstr "nedostatek paměti" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 ../../port/path.c:632 ../../port/path.c:670 -#: ../../port/path.c:687 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#: ../../port/path.c:632 ../../port/path.c:670 ../../port/path.c:687 #, c-format msgid "out of memory\n" msgstr "nedostatek paměti\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "nelze duplikovat null pointer (interní chyba)\n" @@ -104,72 +104,77 @@ msgstr "potomek skončil s nerozponaným stavem %d" msgid "could not get current working directory: %s\n" msgstr "nelze získat aktuální pracovní adresář: %s\n" -#: pg_ctl.c:262 +#: pg_ctl.c:258 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: adresář \"%s\" neexistuje\n" -#: pg_ctl.c:265 +#: pg_ctl.c:261 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: nelze otevřít adresář \"%s\": %s\n" -#: pg_ctl.c:278 +#: pg_ctl.c:274 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: adresář \"%s\" není datový adresář databázového clusteru\n" -#: pg_ctl.c:291 +#: pg_ctl.c:287 #, c-format msgid "%s: could not open PID file \"%s\": %s\n" msgstr "%s: nelze otevřít PID soubor \"%s\": %s\n" -#: pg_ctl.c:300 +#: pg_ctl.c:296 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: PID soubor \"%s\" je prázdný\n" -#: pg_ctl.c:303 +#: pg_ctl.c:299 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: neplatná data v PID souboru \"%s\"\n" -#: pg_ctl.c:464 pg_ctl.c:506 +#: pg_ctl.c:458 pg_ctl.c:500 #, c-format msgid "%s: could not start server: %s\n" msgstr "%s: nelze nastartovat server: %s\n" -#: pg_ctl.c:484 +#: pg_ctl.c:478 #, c-format msgid "%s: could not start server due to setsid() failure: %s\n" msgstr "%s: nelze nastartovat server kvůli selhání setsid(): %s\n" -#: pg_ctl.c:530 +#: pg_ctl.c:548 +#, c-format +msgid "%s: could not open log file \"%s\": %s\n" +msgstr "%s: nelze otevřít logovací soubor \"%s\": %s\n" + +#: pg_ctl.c:565 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s: nelze nastartovat server: chybový kód %lu\n" -#: pg_ctl.c:677 +#: pg_ctl.c:712 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "%s: nelze nastavit limit pro core soubor; zakázáno hard limitem\n" -#: pg_ctl.c:703 +#: pg_ctl.c:738 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: nelze číst soubor \"%s\"\n" -#: pg_ctl.c:708 +#: pg_ctl.c:743 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: soubor s volbami \"%s\" musí mít přesně jednu řádku\n" -#: pg_ctl.c:750 pg_ctl.c:941 pg_ctl.c:1037 +#: pg_ctl.c:785 pg_ctl.c:975 pg_ctl.c:1071 #, c-format msgid "%s: could not send stop signal (PID: %ld): %s\n" msgstr "%s: nelze poslat stop signál (PID: %ld): %s\n" -#: pg_ctl.c:778 +#: pg_ctl.c:813 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -180,7 +185,7 @@ msgstr "" "adresáři jako \"%s\".\n" "Zkontrolujte vaši instalaci.\n" -#: pg_ctl.c:784 +#: pg_ctl.c:818 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -191,38 +196,38 @@ msgstr "" "ale nebyl ve stejné verzi jako %s.\n" "Zkontrolujte vaši instalaci.\n" -#: pg_ctl.c:817 +#: pg_ctl.c:851 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: inicializace databáze selhala\n" -#: pg_ctl.c:832 +#: pg_ctl.c:866 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: další server možná běží; i tak zkouším start\n" -#: pg_ctl.c:881 +#: pg_ctl.c:915 msgid "waiting for server to start..." msgstr "čekám na start serveru ..." -#: pg_ctl.c:886 pg_ctl.c:991 pg_ctl.c:1083 pg_ctl.c:1213 +#: pg_ctl.c:920 pg_ctl.c:1025 pg_ctl.c:1117 pg_ctl.c:1247 msgid " done\n" msgstr " hotovo\n" -#: pg_ctl.c:887 +#: pg_ctl.c:921 msgid "server started\n" msgstr "server spuštěn\n" -#: pg_ctl.c:890 pg_ctl.c:896 pg_ctl.c:1218 +#: pg_ctl.c:924 pg_ctl.c:930 pg_ctl.c:1252 msgid " stopped waiting\n" msgstr " přestávám čekat\n" -#: pg_ctl.c:891 +#: pg_ctl.c:925 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: server nenastartoval v časovém limitu\n" -#: pg_ctl.c:897 +#: pg_ctl.c:931 #, c-format msgid "" "%s: could not start server\n" @@ -231,29 +236,29 @@ msgstr "" "%s: nelze spustit server\n" "Zkontrolujte záznam v logu.\n" -#: pg_ctl.c:905 +#: pg_ctl.c:939 msgid "server starting\n" msgstr "server startuje\n" -#: pg_ctl.c:926 pg_ctl.c:1013 pg_ctl.c:1104 pg_ctl.c:1143 pg_ctl.c:1242 +#: pg_ctl.c:960 pg_ctl.c:1047 pg_ctl.c:1138 pg_ctl.c:1177 pg_ctl.c:1276 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: PID soubor \"%s\" neexistuje\n" -#: pg_ctl.c:927 pg_ctl.c:1015 pg_ctl.c:1105 pg_ctl.c:1144 pg_ctl.c:1243 +#: pg_ctl.c:961 pg_ctl.c:1049 pg_ctl.c:1139 pg_ctl.c:1178 pg_ctl.c:1277 msgid "Is server running?\n" msgstr "Běží server?\n" -#: pg_ctl.c:933 +#: pg_ctl.c:967 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" msgstr "%s: nemohu zastavit server; postgres běží v single-user módu (PID: %ld)\n" -#: pg_ctl.c:948 +#: pg_ctl.c:982 msgid "server shutting down\n" msgstr "server se ukončuje\n" -#: pg_ctl.c:963 pg_ctl.c:1052 +#: pg_ctl.c:997 pg_ctl.c:1086 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" @@ -263,20 +268,20 @@ msgstr "" "Shutdown nebude ukončen dokud nebude zavolán pg_stop_backup().\n" "\n" -#: pg_ctl.c:967 pg_ctl.c:1056 +#: pg_ctl.c:1001 pg_ctl.c:1090 msgid "waiting for server to shut down..." msgstr "čekám na ukončení serveru ..." -#: pg_ctl.c:983 pg_ctl.c:1074 +#: pg_ctl.c:1017 pg_ctl.c:1108 msgid " failed\n" msgstr " selhalo\n" -#: pg_ctl.c:985 pg_ctl.c:1076 +#: pg_ctl.c:1019 pg_ctl.c:1110 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: server se neukončuje\n" -#: pg_ctl.c:987 pg_ctl.c:1078 +#: pg_ctl.c:1021 pg_ctl.c:1112 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -284,245 +289,245 @@ msgstr "" "TIP: Volba \"-m fast\" okamžitě ukončí sezení namísto aby čekala\n" "na odpojení iniciované přímo session.\n" -#: pg_ctl.c:993 pg_ctl.c:1084 +#: pg_ctl.c:1027 pg_ctl.c:1118 msgid "server stopped\n" msgstr "server zastaven\n" -#: pg_ctl.c:1016 +#: pg_ctl.c:1050 msgid "trying to start server anyway\n" msgstr "přesto zkouším server spustit\n" -#: pg_ctl.c:1025 +#: pg_ctl.c:1059 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" msgstr "%s: nemohu restartovat server; postgres běží v single-user módu (PID: %ld)\n" -#: pg_ctl.c:1028 pg_ctl.c:1114 +#: pg_ctl.c:1062 pg_ctl.c:1148 msgid "Please terminate the single-user server and try again.\n" msgstr "Prosím ukončete single-user postgres a zkuste to znovu.\n" -#: pg_ctl.c:1088 +#: pg_ctl.c:1122 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" msgstr "%s: starý proces serveru (PID: %ld) zřejmě skončil\n" -#: pg_ctl.c:1090 +#: pg_ctl.c:1124 msgid "starting server anyway\n" msgstr "přesto server spouštím\n" -#: pg_ctl.c:1111 +#: pg_ctl.c:1145 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" msgstr "%s: nemohu znovunačíst server; server běží v single-user módu (PID: %ld)\n" -#: pg_ctl.c:1120 +#: pg_ctl.c:1154 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" msgstr "%s: nelze poslat signál pro reload (PID: %ld): %s\n" -#: pg_ctl.c:1125 +#: pg_ctl.c:1159 msgid "server signaled\n" msgstr "server obdržel signál\n" -#: pg_ctl.c:1150 +#: pg_ctl.c:1184 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" msgstr "%s: nelze povýšit (promote) server; server běží v single-user módu (PID: %ld)\n" -#: pg_ctl.c:1158 +#: pg_ctl.c:1192 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: nelze povýšit (promote) server; server není ve standby módu\n" -#: pg_ctl.c:1173 +#: pg_ctl.c:1207 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" msgstr "%s: nelze vytvořit signální soubor pro povýšení (promote) \"%s\": %s\n" -#: pg_ctl.c:1179 +#: pg_ctl.c:1213 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" msgstr "%s: nelze zapsat do signálního souboru pro povýšení (promote) \"%s\": %s\n" -#: pg_ctl.c:1187 +#: pg_ctl.c:1221 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" msgstr "%s: nelze poslat signál pro povýšení (promote, PID: %ld): %s\n" -#: pg_ctl.c:1190 +#: pg_ctl.c:1224 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" msgstr "%s: nelze odstranit signální soubor pro povýšení (promote) \"%s\": %s\n" -#: pg_ctl.c:1200 +#: pg_ctl.c:1234 msgid "waiting for server to promote..." msgstr "čekám na promote serveru ..." -#: pg_ctl.c:1214 +#: pg_ctl.c:1248 msgid "server promoted\n" msgstr "server je povyšován (promote)\n" -#: pg_ctl.c:1219 +#: pg_ctl.c:1253 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: server neprovedl promote v časovém intervalu\n" -#: pg_ctl.c:1225 +#: pg_ctl.c:1259 msgid "server promoting\n" msgstr "server je povyšován (promote)\n" -#: pg_ctl.c:1249 +#: pg_ctl.c:1283 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %ld)\n" msgstr "%s: nemohu odrotovat log soubor; server běží v single-user módu (PID: %ld)\n" -#: pg_ctl.c:1259 +#: pg_ctl.c:1293 #, c-format msgid "%s: could not create log rotation signal file \"%s\": %s\n" msgstr "%s: nelze vytvořit signální soubor pro odrotování logu \"%s\": %s\n" -#: pg_ctl.c:1265 +#: pg_ctl.c:1299 #, c-format msgid "%s: could not write log rotation signal file \"%s\": %s\n" msgstr "%s: nelze zapsat do signálního souboru pro odrotování logu \"%s\": %s\n" -#: pg_ctl.c:1273 +#: pg_ctl.c:1307 #, c-format msgid "%s: could not send log rotation signal (PID: %ld): %s\n" msgstr "%s: nelze poslat signál pro odrotování logu (PID: %ld): %s\n" -#: pg_ctl.c:1276 +#: pg_ctl.c:1310 #, c-format msgid "%s: could not remove log rotation signal file \"%s\": %s\n" msgstr "%s: nelze odstranit signální soubor pro odrotování logu \"%s\": %s\n" -#: pg_ctl.c:1281 +#: pg_ctl.c:1315 msgid "server signaled to rotate log file\n" msgstr "server obdržel signál pro odrotování logu\n" -#: pg_ctl.c:1328 +#: pg_ctl.c:1362 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s: server běží v single-user módu (PID: %ld)\n" -#: pg_ctl.c:1342 +#: pg_ctl.c:1376 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: server běží (PID: %ld)\n" -#: pg_ctl.c:1358 +#: pg_ctl.c:1392 #, c-format msgid "%s: no server running\n" msgstr "%s: žádný server neběží\n" -#: pg_ctl.c:1375 +#: pg_ctl.c:1409 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s: nelze poslat signál pro reload %d (PID: %ld): %s\n" -#: pg_ctl.c:1432 +#: pg_ctl.c:1440 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: nelze najít vlastní spustitelný soubor\n" -#: pg_ctl.c:1442 +#: pg_ctl.c:1450 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: nelze najít spustitelný program postgres\n" -#: pg_ctl.c:1512 pg_ctl.c:1546 +#: pg_ctl.c:1520 pg_ctl.c:1554 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: nelze otevřít manažera služeb\n" -#: pg_ctl.c:1518 +#: pg_ctl.c:1526 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: služba \"%s\" je již registrována\n" -#: pg_ctl.c:1529 +#: pg_ctl.c:1537 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: nelze zaregistrovat službu \"%s\": chybový kód %lu\n" -#: pg_ctl.c:1552 +#: pg_ctl.c:1560 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: služba \"%s\" není registrována\n" -#: pg_ctl.c:1559 +#: pg_ctl.c:1567 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: nelze otevřít službu \"%s\": chybový kód %lu\n" -#: pg_ctl.c:1568 +#: pg_ctl.c:1576 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: nelze odregistrovat službu \"%s\": chybový kód %lu\n" -#: pg_ctl.c:1655 +#: pg_ctl.c:1663 msgid "Waiting for server startup...\n" msgstr "Čekám na start serveru ...\n" -#: pg_ctl.c:1658 +#: pg_ctl.c:1666 msgid "Timed out waiting for server startup\n" msgstr "Časový limit pro čekání na start serveru vypršel\n" -#: pg_ctl.c:1662 +#: pg_ctl.c:1670 msgid "Server started and accepting connections\n" msgstr "Server nastartoval a přijímá spojení\n" -#: pg_ctl.c:1717 +#: pg_ctl.c:1725 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: nelze nastartovat službu \"%s\": chybový kód %lu\n" -#: pg_ctl.c:1787 +#: pg_ctl.c:1795 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" msgstr "%s: VAROVÁNÍ: na této platformě nelze vytvořit tajné tokeny\n" -#: pg_ctl.c:1800 +#: pg_ctl.c:1808 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: nelze otevřít token procesu: chybový kód %lu\n" -#: pg_ctl.c:1814 +#: pg_ctl.c:1822 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: nelze alokovat SIDs: chybový kód %lu\n" -#: pg_ctl.c:1841 +#: pg_ctl.c:1849 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: nelze vytvořit vyhrazený token: chybový kód %lu\n" -#: pg_ctl.c:1872 +#: pg_ctl.c:1880 #, c-format msgid "%s: WARNING: could not locate all job object functions in system API\n" msgstr "%s: VAROVÁNÍ: v systémovém API nelze najít všechny \"job object\" funkce\n" -#: pg_ctl.c:1969 +#: pg_ctl.c:1977 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: nelze získat seznam LUID pro privilegia: chybový kód %lu\n" -#: pg_ctl.c:1977 pg_ctl.c:1992 +#: pg_ctl.c:1985 pg_ctl.c:2000 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: nelze získat informace o tokenu: chybový kód %lu\n" -#: pg_ctl.c:1986 +#: pg_ctl.c:1994 #, c-format msgid "%s: out of memory\n" msgstr "%s: nedostatek paměti\n" -#: pg_ctl.c:2016 +#: pg_ctl.c:2024 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" -#: pg_ctl.c:2024 +#: pg_ctl.c:2032 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -531,23 +536,20 @@ msgstr "" "%s je nástroj pro inicializaci, spuštění, zastavení, nebo ovládání PostgreSQL serveru.\n" "\n" -#: pg_ctl.c:2025 +#: pg_ctl.c:2033 #, c-format msgid "Usage:\n" msgstr "Použití:\n" -#: pg_ctl.c:2026 +#: pg_ctl.c:2034 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr "" " %s init[db] [-D ADRESÁŘ] [-s] [-o PŘEPÍNAČE]\n" "\n" -#: pg_ctl.c:2027 +#: pg_ctl.c:2035 #, c-format -#| msgid "" -#| " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" -#| " [-o OPTIONS] [-p PATH] [-c]\n" msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" " [-o OPTIONS] [-p PATH] [-c]\n" @@ -555,19 +557,15 @@ msgstr "" " %s start [-D ADRESÁŘ] [-l SOUBOR] [-W] [-t SECS] [-s]\n" " [-o VOLBY] [-p CESTA] [-c]\n" -#: pg_ctl.c:2029 +#: pg_ctl.c:2037 #, c-format -#| msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr "" " %s stop [-D ADRESÁŘ] [-m MÓD-UKONČENÍ] [-W] [-t SECS] [-s]\n" "\n" -#: pg_ctl.c:2030 +#: pg_ctl.c:2038 #, c-format -#| msgid "" -#| " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" -#| " [-o OPTIONS] [-c]\n" msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" " [-o OPTIONS] [-c]\n" @@ -575,40 +573,33 @@ msgstr "" " %s restart [-D ADRESÁŘ] [-m MÓD-UKONČENÍ] [-W] [-t SECS] [-s]\n" " [-o VOLBY] [-c]\n" -#: pg_ctl.c:2032 +#: pg_ctl.c:2040 #, c-format -#| msgid " %s reload [-D DATADIR] [-s]\n" msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D ADRESÁŘ] [-s]\n" -#: pg_ctl.c:2033 +#: pg_ctl.c:2041 #, c-format -#| msgid " %s status [-D DATADIR]\n" msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D ADRESÁŘ]\n" -#: pg_ctl.c:2034 +#: pg_ctl.c:2042 #, c-format -#| msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D ADRESÁŘ] [-W] [-t SECS] [-s]\n" -#: pg_ctl.c:2035 +#: pg_ctl.c:2043 #, c-format -#| msgid " %s reload [-D DATADIR] [-s]\n" msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s reload [-D ADRESÁŘ] [-s]\n" -#: pg_ctl.c:2036 +#: pg_ctl.c:2044 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill NAZEVSIGNALU PID\n" -#: pg_ctl.c:2038 +#: pg_ctl.c:2046 #, c-format -#| msgid "" -#| " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" -#| " [-S START-TYPE] [-e SOURCE] [-W] [-t SECS] [-s] [-o OPTIONS]\n" msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" " [-S START-TYPE] [-e SOURCE] [-W] [-t SECS] [-s] [-o OPTIONS]\n" @@ -616,12 +607,12 @@ msgstr "" " %s register [-D ADRESÁŘ] [-N NÁZEVSLUŽBY] [-U UŽIVATEL] [-P HESLO]\n" " [-S MÓD-STARTU] [-e ZDROJ] [-W] [-t SECS] [-s] [-o VOLBY]\n" -#: pg_ctl.c:2040 +#: pg_ctl.c:2048 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N SERVICENAME]\n" -#: pg_ctl.c:2043 +#: pg_ctl.c:2051 #, c-format msgid "" "\n" @@ -630,52 +621,52 @@ msgstr "" "\n" "Společné přepínače:\n" -#: pg_ctl.c:2044 +#: pg_ctl.c:2052 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=ADRESÁŘ umístění úložiště databáze\n" -#: pg_ctl.c:2046 +#: pg_ctl.c:2054 #, c-format msgid " -e SOURCE event source for logging when running as a service\n" msgstr " -e SOURCE název zdroje pro logování při běhu jako služba\n" -#: pg_ctl.c:2048 +#: pg_ctl.c:2056 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent vypisuj jen chyby, žádné informativní zprávy\n" -#: pg_ctl.c:2049 +#: pg_ctl.c:2057 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=SECS počet vteřin pro čekání při využití volby -w\n" -#: pg_ctl.c:2050 +#: pg_ctl.c:2058 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version vypsat informace o verzi, potom skončit\n" -#: pg_ctl.c:2051 +#: pg_ctl.c:2059 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait čekat na dokončení operace (výchozí)\n" -#: pg_ctl.c:2052 +#: pg_ctl.c:2060 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait nečekat na dokončení operace\n" -#: pg_ctl.c:2053 +#: pg_ctl.c:2061 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help vypsat tuto nápovědu, potom skončit\n" -#: pg_ctl.c:2054 +#: pg_ctl.c:2062 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Pokud je vynechán parametr -D, použije se proměnná prostředí PGDATA.\n" -#: pg_ctl.c:2056 +#: pg_ctl.c:2064 #, c-format msgid "" "\n" @@ -684,22 +675,22 @@ msgstr "" "\n" "Přepínače pro start nebo restart:\n" -#: pg_ctl.c:2058 +#: pg_ctl.c:2066 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files povolit postgresu vytvářet core soubory\n" -#: pg_ctl.c:2060 +#: pg_ctl.c:2068 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files nepoužitelné pro tuto platformu\n" -#: pg_ctl.c:2062 +#: pg_ctl.c:2070 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l, --log=SOUBOR zapisuj (nebo připoj na konec) log serveru do SOUBORU.\n" -#: pg_ctl.c:2063 +#: pg_ctl.c:2071 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -708,12 +699,12 @@ msgstr "" " -o, --options=VOLBY přepínače, které budou předány postgresu\n" " (spustitelnému souboru PostgreSQL) či initdb\n" -#: pg_ctl.c:2065 +#: pg_ctl.c:2073 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p CESTA-K-POSTGRESU za normálních okolností není potřeba\n" -#: pg_ctl.c:2066 +#: pg_ctl.c:2074 #, c-format msgid "" "\n" @@ -722,12 +713,12 @@ msgstr "" "\n" "Přepínače pro start nebo restart:\n" -#: pg_ctl.c:2067 +#: pg_ctl.c:2075 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=MODE může být \"smart\", \"fast\", or \"immediate\"\n" -#: pg_ctl.c:2069 +#: pg_ctl.c:2077 #, c-format msgid "" "\n" @@ -736,24 +727,24 @@ msgstr "" "\n" "Módy ukončení jsou:\n" -#: pg_ctl.c:2070 +#: pg_ctl.c:2078 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart skonči potom, co se odpojí všichni klienti\n" -#: pg_ctl.c:2071 +#: pg_ctl.c:2079 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast skonči okamžitě, s korektním zastavením serveru (výchozí)\n" -#: pg_ctl.c:2072 +#: pg_ctl.c:2080 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr "" " immediate skonči bez kompletního zastavení; po restartu se provede\n" " obnova po pádu (crash recovery)\n" -#: pg_ctl.c:2074 +#: pg_ctl.c:2082 #, c-format msgid "" "\n" @@ -762,7 +753,7 @@ msgstr "" "\n" "Povolené signály pro \"kill\":\n" -#: pg_ctl.c:2078 +#: pg_ctl.c:2086 #, c-format msgid "" "\n" @@ -771,27 +762,27 @@ msgstr "" "\n" "Přepínače pro register nebo unregister:\n" -#: pg_ctl.c:2079 +#: pg_ctl.c:2087 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N SERVICENAME jméno služby, pod kterým registrovat PostgreSQL server\n" -#: pg_ctl.c:2080 +#: pg_ctl.c:2088 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr " -P PASSWORD heslo k účtu pro registraci PostgreSQL serveru\n" -#: pg_ctl.c:2081 +#: pg_ctl.c:2089 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr " -U USERNAME uživatelské jméno pro registraci PostgreSQL server\n" -#: pg_ctl.c:2082 +#: pg_ctl.c:2090 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S TYP-STARTU typ spuštění služby pro registraci PostgreSQL serveru\n" -#: pg_ctl.c:2084 +#: pg_ctl.c:2092 #, c-format msgid "" "\n" @@ -800,51 +791,56 @@ msgstr "" "\n" "Módy spuštění jsou:\n" -#: pg_ctl.c:2085 +#: pg_ctl.c:2093 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr " auto spusť službu automaticky během startu systému (implicitní)\n" -#: pg_ctl.c:2086 +#: pg_ctl.c:2094 #, c-format msgid " demand start service on demand\n" msgstr " demand spusť službu na vyžádání\n" -#: pg_ctl.c:2089 +#: pg_ctl.c:2097 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Chyby hlaste na adresu .\n" +"Chyby hlašte na <%s>.\n" + +#: pg_ctl.c:2098 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" -#: pg_ctl.c:2114 +#: pg_ctl.c:2123 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: neplatný mód ukončení mode \"%s\"\n" -#: pg_ctl.c:2143 +#: pg_ctl.c:2152 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: neplatné jméno signálu \"%s\"\n" -#: pg_ctl.c:2160 +#: pg_ctl.c:2169 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: neplatný typ spuštění \"%s\"\n" -#: pg_ctl.c:2215 +#: pg_ctl.c:2224 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: nelze najít datový adresář pomocí příkazu \"%s\"\n" -#: pg_ctl.c:2240 +#: pg_ctl.c:2248 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: control file se zdá být poškozený\n" -#: pg_ctl.c:2308 +#: pg_ctl.c:2316 #, c-format msgid "" "%s: cannot be run as root\n" @@ -855,88 +851,95 @@ msgstr "" "Prosím přihlaste se jako (neprivilegovaný) uživatel, který bude vlastníkem\n" "serverového procesu (například pomocí příkazu \"su\").\n" -#: pg_ctl.c:2392 +#: pg_ctl.c:2400 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: -S nepoužitelné pro tuto platformu\n" -#: pg_ctl.c:2429 +#: pg_ctl.c:2437 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: příliš mnoho argumentů v příkazové řádce (první je \"%s\")\n" -#: pg_ctl.c:2455 +#: pg_ctl.c:2463 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: chýbějící parametr pro \"kill\" mód\n" -#: pg_ctl.c:2473 +#: pg_ctl.c:2481 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: neplatný mód operace \"%s\"\n" -#: pg_ctl.c:2483 +#: pg_ctl.c:2491 #, c-format msgid "%s: no operation specified\n" msgstr "%s: není specifikována operace\n" -#: pg_ctl.c:2504 +#: pg_ctl.c:2512 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: není zadán datový adresář a ani není nastavena proměnná prostředí PGDATA\n" -#~ msgid " fast promote quickly without waiting for checkpoint completion\n" -#~ msgstr " fast promote rychlé bez čekání na dokončení checkpointu\n" +#~ msgid "could not read symbolic link \"%s\"" +#~ msgstr "nelze číst symbolický link \"%s\"" -#~ msgid " smart promote after performing a checkpoint\n" -#~ msgstr " smart promote po provedení checkpointu\n" +#~ msgid "child process was terminated by signal %s" +#~ msgstr "potomek byl ukončen signálem %s" #~ msgid "" #~ "\n" -#~ "Options for stop, restart, or promote:\n" +#~ "%s: -w option is not supported when starting a pre-9.1 server\n" #~ msgstr "" #~ "\n" -#~ "Přepínače pro zastavení, restart a promote:\n" +#~ "%s: -w volba není podporována při startu pre-9.1 serveru\n" #~ msgid "" -#~ "(The default is to wait for shutdown, but not for start or restart.)\n" #~ "\n" +#~ "%s: -w option cannot use a relative socket directory specification\n" #~ msgstr "" -#~ "(Implicitní chování je čekat na ukončení, ale ne při startu nebo restartu.)\n" #~ "\n" +#~ "%s: -w volba nemůže používat relativně zadaný adresář socketu\n" -#~ msgid " %s start [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS\"]\n" -#~ msgstr " %s start [-w] [-t SECS] [-D ADRESÁŘ] [-s] [-l SOUBOR] [-o \"PŘEPÍNAČE\"]\n" +#~ msgid "" +#~ "\n" +#~ "%s: this data directory appears to be running a pre-existing postmaster\n" +#~ msgstr "" +#~ "\n" +#~ "%s: zdá se že v tomto datovém adresáři již běží existující postmaster\n" + +#~ msgid "server is still starting up\n" +#~ msgstr "server stále startuje\n" #~ msgid "%s: could not wait for server because of misconfiguration\n" #~ msgstr "%s: nelze čekat na server kvůli chybné konfiguraci\n" -#~ msgid "server is still starting up\n" -#~ msgstr "server stále startuje\n" +#~ msgid " %s start [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS\"]\n" +#~ msgstr " %s start [-w] [-t SECS] [-D ADRESÁŘ] [-s] [-l SOUBOR] [-o \"PŘEPÍNAČE\"]\n" #~ msgid "" +#~ "(The default is to wait for shutdown, but not for start or restart.)\n" #~ "\n" -#~ "%s: this data directory appears to be running a pre-existing postmaster\n" #~ msgstr "" +#~ "(Implicitní chování je čekat na ukončení, ale ne při startu nebo restartu.)\n" #~ "\n" -#~ "%s: zdá se že v tomto datovém adresáři již běží existující postmaster\n" #~ msgid "" #~ "\n" -#~ "%s: -w option cannot use a relative socket directory specification\n" +#~ "Options for stop, restart, or promote:\n" #~ msgstr "" #~ "\n" -#~ "%s: -w volba nemůže používat relativně zadaný adresář socketu\n" +#~ "Přepínače pro zastavení, restart a promote:\n" + +#~ msgid " smart promote after performing a checkpoint\n" +#~ msgstr " smart promote po provedení checkpointu\n" + +#~ msgid " fast promote quickly without waiting for checkpoint completion\n" +#~ msgstr " fast promote rychlé bez čekání na dokončení checkpointu\n" #~ msgid "" #~ "\n" -#~ "%s: -w option is not supported when starting a pre-9.1 server\n" +#~ "Report bugs to .\n" #~ msgstr "" #~ "\n" -#~ "%s: -w volba není podporována při startu pre-9.1 serveru\n" - -#~ msgid "child process was terminated by signal %s" -#~ msgstr "potomek byl ukončen signálem %s" - -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "nelze číst symbolický link \"%s\"" +#~ "Chyby hlaste na adresu .\n" diff --git a/src/bin/pg_ctl/po/de.po b/src/bin/pg_ctl/po/de.po index 76247a3097475..61afaf1f248e2 100644 --- a/src/bin/pg_ctl/po/de.po +++ b/src/bin/pg_ctl/po/de.po @@ -1,14 +1,14 @@ # German message translation file for pg_ctl -# Peter Eisentraut , 2004 - 2020. +# Peter Eisentraut , 2004 - 2021. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 13\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-04-09 10:15+0000\n" -"PO-Revision-Date: 2020-04-09 15:09+0200\n" +"POT-Creation-Date: 2021-04-24 06:46+0000\n" +"PO-Revision-Date: 2021-04-24 09:40+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -16,42 +16,42 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "konnte aktuelles Verzeichnis nicht ermitteln: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "ungültige Programmdatei »%s«" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "konnte Programmdatei »%s« nicht lesen" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "konnte kein »%s« zum Ausführen finden" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "konnte nicht in Verzeichnis »%s« wechseln: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht lesen: %m" -#: ../../common/exec.c:410 +#: ../../common/exec.c:409 #, c-format -msgid "pclose failed: %m" -msgstr "pclose fehlgeschlagen: %m" +msgid "%s() failed: %m" +msgstr "%s() fehlgeschlagen: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" msgstr "Speicher aufgebraucht" @@ -167,7 +167,7 @@ msgstr "%s: konnte Datei »%s« nicht lesen\n" msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: Optionsdatei »%s« muss genau eine Zeile haben\n" -#: pg_ctl.c:785 pg_ctl.c:976 pg_ctl.c:1072 +#: pg_ctl.c:785 pg_ctl.c:974 pg_ctl.c:1070 #, c-format msgid "%s: could not send stop signal (PID: %ld): %s\n" msgstr "%s: konnte Stopp-Signal nicht senden (PID: %ld): %s\n" @@ -183,7 +183,7 @@ msgstr "" "selben Verzeichnis wie »%s« gefunden.\n" "Prüfen Sie Ihre Installation.\n" -#: pg_ctl.c:819 +#: pg_ctl.c:818 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -194,38 +194,38 @@ msgstr "" "aber es hatte nicht die gleiche Version wie %s.\n" "Prüfen Sie Ihre Installation.\n" -#: pg_ctl.c:852 +#: pg_ctl.c:851 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: Initialisierung des Datenbanksystems fehlgeschlagen\n" -#: pg_ctl.c:867 +#: pg_ctl.c:866 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: ein anderer Server läuft möglicherweise; versuche trotzdem zu starten\n" -#: pg_ctl.c:916 +#: pg_ctl.c:914 msgid "waiting for server to start..." msgstr "warte auf Start des Servers..." -#: pg_ctl.c:921 pg_ctl.c:1026 pg_ctl.c:1118 pg_ctl.c:1248 +#: pg_ctl.c:919 pg_ctl.c:1024 pg_ctl.c:1116 pg_ctl.c:1241 msgid " done\n" msgstr " fertig\n" -#: pg_ctl.c:922 +#: pg_ctl.c:920 msgid "server started\n" msgstr "Server gestartet\n" -#: pg_ctl.c:925 pg_ctl.c:931 pg_ctl.c:1253 +#: pg_ctl.c:923 pg_ctl.c:929 pg_ctl.c:1246 msgid " stopped waiting\n" msgstr " Warten beendet\n" -#: pg_ctl.c:926 +#: pg_ctl.c:924 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: Starten des Servers hat nicht rechtzeitig abgeschlossen\n" -#: pg_ctl.c:932 +#: pg_ctl.c:930 #, c-format msgid "" "%s: could not start server\n" @@ -234,29 +234,29 @@ msgstr "" "%s: konnte Server nicht starten\n" "Prüfen Sie die Logausgabe.\n" -#: pg_ctl.c:940 +#: pg_ctl.c:938 msgid "server starting\n" msgstr "Server startet\n" -#: pg_ctl.c:961 pg_ctl.c:1048 pg_ctl.c:1139 pg_ctl.c:1178 pg_ctl.c:1277 +#: pg_ctl.c:959 pg_ctl.c:1046 pg_ctl.c:1137 pg_ctl.c:1176 pg_ctl.c:1270 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: PID-Datei »%s« existiert nicht\n" -#: pg_ctl.c:962 pg_ctl.c:1050 pg_ctl.c:1140 pg_ctl.c:1179 pg_ctl.c:1278 +#: pg_ctl.c:960 pg_ctl.c:1048 pg_ctl.c:1138 pg_ctl.c:1177 pg_ctl.c:1271 msgid "Is server running?\n" msgstr "Läuft der Server?\n" -#: pg_ctl.c:968 +#: pg_ctl.c:966 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" msgstr "%s: kann Server nicht anhalten; Einzelbenutzerserver läuft (PID: %ld)\n" -#: pg_ctl.c:983 +#: pg_ctl.c:981 msgid "server shutting down\n" msgstr "Server fährt herunter\n" -#: pg_ctl.c:998 pg_ctl.c:1087 +#: pg_ctl.c:996 pg_ctl.c:1085 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" @@ -266,20 +266,20 @@ msgstr "" "Herunterfahren wird erst abgeschlossen werden, wenn pg_stop_backup() aufgerufen wird.\n" "\n" -#: pg_ctl.c:1002 pg_ctl.c:1091 +#: pg_ctl.c:1000 pg_ctl.c:1089 msgid "waiting for server to shut down..." msgstr "warte auf Herunterfahren des Servers..." -#: pg_ctl.c:1018 pg_ctl.c:1109 +#: pg_ctl.c:1016 pg_ctl.c:1107 msgid " failed\n" msgstr " Fehler\n" -#: pg_ctl.c:1020 pg_ctl.c:1111 +#: pg_ctl.c:1018 pg_ctl.c:1109 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: Server fährt nicht herunter\n" -#: pg_ctl.c:1022 pg_ctl.c:1113 +#: pg_ctl.c:1020 pg_ctl.c:1111 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -287,245 +287,245 @@ msgstr "" "TIPP: Die Option »-m fast« beendet Sitzungen sofort, statt auf das Beenden\n" "durch die Sitzungen selbst zu warten.\n" -#: pg_ctl.c:1028 pg_ctl.c:1119 +#: pg_ctl.c:1026 pg_ctl.c:1117 msgid "server stopped\n" msgstr "Server angehalten\n" -#: pg_ctl.c:1051 +#: pg_ctl.c:1049 msgid "trying to start server anyway\n" msgstr "versuche Server trotzdem zu starten\n" -#: pg_ctl.c:1060 +#: pg_ctl.c:1058 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" msgstr "%s: kann Server nicht neu starten; Einzelbenutzerserver läuft (PID: %ld)\n" -#: pg_ctl.c:1063 pg_ctl.c:1149 +#: pg_ctl.c:1061 pg_ctl.c:1147 msgid "Please terminate the single-user server and try again.\n" msgstr "Bitte beenden Sie den Einzelbenutzerserver und versuchen Sie es noch einmal.\n" -#: pg_ctl.c:1123 +#: pg_ctl.c:1121 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" msgstr "%s: alter Serverprozess (PID: %ld) scheint verschwunden zu sein\n" -#: pg_ctl.c:1125 +#: pg_ctl.c:1123 msgid "starting server anyway\n" msgstr "starte Server trotzdem\n" -#: pg_ctl.c:1146 +#: pg_ctl.c:1144 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" msgstr "%s: kann Server nicht neu laden; Einzelbenutzerserver läuft (PID: %ld)\n" -#: pg_ctl.c:1155 +#: pg_ctl.c:1153 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" msgstr "%s: konnte Signal zum Neuladen nicht senden (PID: %ld): %s\n" -#: pg_ctl.c:1160 +#: pg_ctl.c:1158 msgid "server signaled\n" msgstr "Signal an Server gesendet\n" -#: pg_ctl.c:1185 +#: pg_ctl.c:1183 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" msgstr "%s: kann Server nicht befördern; Einzelbenutzerserver läuft (PID: %ld)\n" -#: pg_ctl.c:1193 +#: pg_ctl.c:1191 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: kann Server nicht befördern; Server ist nicht im Standby-Modus\n" -#: pg_ctl.c:1208 +#: pg_ctl.c:1201 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" msgstr "%s: konnte Signaldatei zum Befördern »%s« nicht erzeugen: %s\n" -#: pg_ctl.c:1214 +#: pg_ctl.c:1207 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" msgstr "%s: konnte Signaldatei zum Befördern »%s« nicht schreiben: %s\n" -#: pg_ctl.c:1222 +#: pg_ctl.c:1215 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" msgstr "%s: konnte Signal zum Befördern nicht senden (PID: %ld): %s\n" -#: pg_ctl.c:1225 +#: pg_ctl.c:1218 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" msgstr "%s: konnte Signaldatei zum Befördern »%s« nicht entfernen: %s\n" -#: pg_ctl.c:1235 +#: pg_ctl.c:1228 msgid "waiting for server to promote..." msgstr "warte auf Befördern des Servers..." -#: pg_ctl.c:1249 +#: pg_ctl.c:1242 msgid "server promoted\n" msgstr "Server wurde befördert\n" -#: pg_ctl.c:1254 +#: pg_ctl.c:1247 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: Befördern des Servers hat nicht rechtzeitig abgeschlossen\n" -#: pg_ctl.c:1260 +#: pg_ctl.c:1253 msgid "server promoting\n" msgstr "Server wird befördert\n" -#: pg_ctl.c:1284 +#: pg_ctl.c:1277 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %ld)\n" msgstr "%s: kann Logdatei nicht rotieren; Einzelbenutzerserver läuft (PID: %ld)\n" -#: pg_ctl.c:1294 +#: pg_ctl.c:1287 #, c-format msgid "%s: could not create log rotation signal file \"%s\": %s\n" msgstr "%s: konnte Signaldatei zum Logrotieren »%s« nicht erzeugen: %s\n" -#: pg_ctl.c:1300 +#: pg_ctl.c:1293 #, c-format msgid "%s: could not write log rotation signal file \"%s\": %s\n" msgstr "%s: konnte Signaldatei zum Logrotieren »%s« nicht schreiben: %s\n" -#: pg_ctl.c:1308 +#: pg_ctl.c:1301 #, c-format msgid "%s: could not send log rotation signal (PID: %ld): %s\n" msgstr "%s: konnte Signal zum Logrotieren nicht senden (PID: %ld): %s\n" -#: pg_ctl.c:1311 +#: pg_ctl.c:1304 #, c-format msgid "%s: could not remove log rotation signal file \"%s\": %s\n" msgstr "%s: konnte Signaldatei zum Logrotieren »%s« nicht entfernen: %s\n" -#: pg_ctl.c:1316 +#: pg_ctl.c:1309 msgid "server signaled to rotate log file\n" msgstr "Signal zum Logrotieren an Server gesendet\n" -#: pg_ctl.c:1363 +#: pg_ctl.c:1356 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s: Einzelbenutzerserver läuft (PID: %ld)\n" -#: pg_ctl.c:1377 +#: pg_ctl.c:1370 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: Server läuft (PID: %ld)\n" -#: pg_ctl.c:1393 +#: pg_ctl.c:1386 #, c-format msgid "%s: no server running\n" msgstr "%s: kein Server läuft\n" -#: pg_ctl.c:1410 +#: pg_ctl.c:1403 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s: konnte Signal %d nicht senden (PID: %ld): %s\n" -#: pg_ctl.c:1441 +#: pg_ctl.c:1434 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: konnte eigene Programmdatei nicht finden\n" -#: pg_ctl.c:1451 +#: pg_ctl.c:1444 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: konnte »postgres« Programmdatei nicht finden\n" -#: pg_ctl.c:1521 pg_ctl.c:1555 +#: pg_ctl.c:1514 pg_ctl.c:1548 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: konnte Servicemanager nicht öffnen\n" -#: pg_ctl.c:1527 +#: pg_ctl.c:1520 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: Systemdienst »%s« ist bereits registriert\n" -#: pg_ctl.c:1538 +#: pg_ctl.c:1531 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: konnte Systemdienst »%s« nicht registrieren: Fehlercode %lu\n" -#: pg_ctl.c:1561 +#: pg_ctl.c:1554 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: Systemdienst »%s« ist nicht registriert\n" -#: pg_ctl.c:1568 +#: pg_ctl.c:1561 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: konnte Systemdienst »%s« nicht öffnen: Fehlercode %lu\n" -#: pg_ctl.c:1577 +#: pg_ctl.c:1570 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: konnte Systemdienst »%s« nicht deregistrieren: Fehlercode %lu\n" -#: pg_ctl.c:1664 +#: pg_ctl.c:1657 msgid "Waiting for server startup...\n" msgstr "Warte auf Start des Servers...\n" -#: pg_ctl.c:1667 +#: pg_ctl.c:1660 msgid "Timed out waiting for server startup\n" msgstr "Zeitüberschreitung beim Warten auf Start des Servers\n" -#: pg_ctl.c:1671 +#: pg_ctl.c:1664 msgid "Server started and accepting connections\n" msgstr "Server wurde gestartet und nimmt Verbindungen an\n" -#: pg_ctl.c:1726 +#: pg_ctl.c:1719 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: konnte Systemdienst »%s« nicht starten: Fehlercode %lu\n" -#: pg_ctl.c:1796 +#: pg_ctl.c:1789 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" msgstr "%s: WARNUNG: auf dieser Plattform können keine beschränkten Token erzeugt werden\n" -#: pg_ctl.c:1809 +#: pg_ctl.c:1802 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: konnte Prozess-Token nicht öffnen: Fehlercode %lu\n" -#: pg_ctl.c:1823 +#: pg_ctl.c:1816 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: konnte SIDs nicht erzeugen: Fehlercode %lu\n" -#: pg_ctl.c:1850 +#: pg_ctl.c:1843 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: konnte beschränktes Token nicht erzeugen: Fehlercode %lu\n" -#: pg_ctl.c:1881 +#: pg_ctl.c:1874 #, c-format msgid "%s: WARNING: could not locate all job object functions in system API\n" msgstr "%s: WARNUNG: konnte nicht alle Job-Objekt-Funtionen in der System-API finden\n" -#: pg_ctl.c:1978 +#: pg_ctl.c:1971 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: konnte LUIDs für Privilegien nicht ermitteln: Fehlercode %lu\n" -#: pg_ctl.c:1986 pg_ctl.c:2001 +#: pg_ctl.c:1979 pg_ctl.c:1994 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: konnte Token-Informationen nicht ermitteln: Fehlercode %lu\n" -#: pg_ctl.c:1995 +#: pg_ctl.c:1988 #, c-format msgid "%s: out of memory\n" msgstr "%s: Speicher aufgebraucht\n" -#: pg_ctl.c:2025 +#: pg_ctl.c:2018 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: pg_ctl.c:2033 +#: pg_ctl.c:2026 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -535,17 +535,17 @@ msgstr "" "starten, anzuhalten oder zu steuern.\n" "\n" -#: pg_ctl.c:2034 +#: pg_ctl.c:2027 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: pg_ctl.c:2035 +#: pg_ctl.c:2028 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D DATENVERZ] [-s] [-o OPTIONEN]\n" -#: pg_ctl.c:2036 +#: pg_ctl.c:2029 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -554,12 +554,12 @@ msgstr "" " %s start [-D DATENVERZ] [-l DATEINAME] [-W] [-t SEK] [-s]\n" " [-o OPTIONEN] [-p PFAD] [-c]\n" -#: pg_ctl.c:2038 +#: pg_ctl.c:2031 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr " %s stop [-D DATENVERZ] [-m SHUTDOWN-MODUS] [-W] [-t SEK] [-s]\n" -#: pg_ctl.c:2039 +#: pg_ctl.c:2032 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -568,32 +568,32 @@ msgstr "" " %s restart [-D DATENVERZ] [-m SHUTDOWN-MODUS] [-W] [-t SEK] [-s]\n" " [-o OPTIONEN] [-c]\n" -#: pg_ctl.c:2041 +#: pg_ctl.c:2034 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D DATENVERZ] [-s]\n" -#: pg_ctl.c:2042 +#: pg_ctl.c:2035 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D DATENVERZ]\n" -#: pg_ctl.c:2043 +#: pg_ctl.c:2036 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D DATENVERZ] [-W] [-t SEK] [-s]\n" -#: pg_ctl.c:2044 +#: pg_ctl.c:2037 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D DATENVERZ] [-s]\n" -#: pg_ctl.c:2045 +#: pg_ctl.c:2038 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill SIGNALNAME PID\n" -#: pg_ctl.c:2047 +#: pg_ctl.c:2040 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -602,12 +602,12 @@ msgstr "" " %s register [-D DATENVERZ] [-N DIENSTNAME] [-U BENUTZERNAME] [-P PASSWORT]\n" " [-S STARTTYP] [-e QUELLE] [-W] [-t SEK] [-s] [-o OPTIONEN]\n" -#: pg_ctl.c:2049 +#: pg_ctl.c:2042 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N DIENSTNAME]\n" -#: pg_ctl.c:2052 +#: pg_ctl.c:2045 #, c-format msgid "" "\n" @@ -616,56 +616,56 @@ msgstr "" "\n" "Optionen für alle Modi:\n" -#: pg_ctl.c:2053 +#: pg_ctl.c:2046 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=DATENVERZ Datenbankverzeichnis\n" -#: pg_ctl.c:2055 +#: pg_ctl.c:2048 #, c-format msgid " -e SOURCE event source for logging when running as a service\n" msgstr "" " -e QUELLE Ereignisquelle fürs Loggen, wenn als Systemdienst\n" " gestartet\n" -#: pg_ctl.c:2057 +#: pg_ctl.c:2050 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent nur Fehler zeigen, keine Informationsmeldungen\n" -#: pg_ctl.c:2058 +#: pg_ctl.c:2051 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=SEK Sekunden zu warten bei Option -w\n" -#: pg_ctl.c:2059 +#: pg_ctl.c:2052 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_ctl.c:2060 +#: pg_ctl.c:2053 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait warten bis Operation abgeschlossen ist (Voreinstellung)\n" -#: pg_ctl.c:2061 +#: pg_ctl.c:2054 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait nicht warten bis Operation abgeschlossen ist\n" -#: pg_ctl.c:2062 +#: pg_ctl.c:2055 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_ctl.c:2063 +#: pg_ctl.c:2056 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "" "Wenn die Option -D weggelassen wird, dann wird die Umgebungsvariable\n" "PGDATA verwendet.\n" -#: pg_ctl.c:2065 +#: pg_ctl.c:2058 #, c-format msgid "" "\n" @@ -674,24 +674,24 @@ msgstr "" "\n" "Optionen für Start oder Neustart:\n" -#: pg_ctl.c:2067 +#: pg_ctl.c:2060 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files erlaubt postgres Core-Dateien zu erzeugen\n" -#: pg_ctl.c:2069 +#: pg_ctl.c:2062 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files betrifft diese Plattform nicht\n" -#: pg_ctl.c:2071 +#: pg_ctl.c:2064 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr "" " -l, --log=DATEINAME Serverlog in DATEINAME schreiben (wird an bestehende\n" " Datei angehängt)\n" -#: pg_ctl.c:2072 +#: pg_ctl.c:2065 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -700,12 +700,12 @@ msgstr "" " -o, --options=OPTIONEN Kommandozeilenoptionen für postgres (PostgreSQL-\n" " Serverprogramm) oder initdb\n" -#: pg_ctl.c:2074 +#: pg_ctl.c:2067 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p PFAD-ZU-POSTGRES normalerweise nicht notwendig\n" -#: pg_ctl.c:2075 +#: pg_ctl.c:2068 #, c-format msgid "" "\n" @@ -714,12 +714,12 @@ msgstr "" "\n" "Optionen für Anhalten oder Neustart:\n" -#: pg_ctl.c:2076 +#: pg_ctl.c:2069 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=MODUS MODUS kann »smart«, »fast« oder »immediate« sein\n" -#: pg_ctl.c:2078 +#: pg_ctl.c:2071 #, c-format msgid "" "\n" @@ -728,24 +728,24 @@ msgstr "" "\n" "Shutdown-Modi sind:\n" -#: pg_ctl.c:2079 +#: pg_ctl.c:2072 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart beenden nachdem alle Clientverbindungen geschlossen sind\n" -#: pg_ctl.c:2080 +#: pg_ctl.c:2073 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast sofort beenden, mit richtigem Shutdown (Voreinstellung)\n" -#: pg_ctl.c:2081 +#: pg_ctl.c:2074 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr "" " immediate beenden ohne vollständigen Shutdown; führt zu Recovery-Lauf\n" " beim Neustart\n" -#: pg_ctl.c:2083 +#: pg_ctl.c:2076 #, c-format msgid "" "\n" @@ -754,7 +754,7 @@ msgstr "" "\n" "Erlaubte Signalnamen für »kill«:\n" -#: pg_ctl.c:2087 +#: pg_ctl.c:2080 #, c-format msgid "" "\n" @@ -763,27 +763,27 @@ msgstr "" "\n" "Optionen für »register« und »unregister«:\n" -#: pg_ctl.c:2088 +#: pg_ctl.c:2081 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N DIENSTNAME Systemdienstname für Registrierung des PostgreSQL-Servers\n" -#: pg_ctl.c:2089 +#: pg_ctl.c:2082 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr " -P PASSWORD Passwort des Benutzers für Registrierung des PostgreSQL-Servers\n" -#: pg_ctl.c:2090 +#: pg_ctl.c:2083 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr " -U USERNAME Benutzername für Registrierung des PostgreSQL-Servers\n" -#: pg_ctl.c:2091 +#: pg_ctl.c:2084 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S STARTTYP Systemdienst-Starttyp für PostgreSQL-Server\n" -#: pg_ctl.c:2093 +#: pg_ctl.c:2086 #, c-format msgid "" "\n" @@ -792,19 +792,19 @@ msgstr "" "\n" "Starttypen sind:\n" -#: pg_ctl.c:2094 +#: pg_ctl.c:2087 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr "" " auto Dienst automatisch starten beim Start des Betriebssystems\n" " (Voreinstellung)\n" -#: pg_ctl.c:2095 +#: pg_ctl.c:2088 #, c-format msgid " demand start service on demand\n" msgstr " demand Dienst bei Bedarf starten\n" -#: pg_ctl.c:2098 +#: pg_ctl.c:2091 #, c-format msgid "" "\n" @@ -813,37 +813,37 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: pg_ctl.c:2099 +#: pg_ctl.c:2092 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: pg_ctl.c:2124 +#: pg_ctl.c:2117 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: unbekannter Shutdown-Modus »%s«\n" -#: pg_ctl.c:2153 +#: pg_ctl.c:2146 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: unbekannter Signalname »%s«\n" -#: pg_ctl.c:2170 +#: pg_ctl.c:2163 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: unbekannter Starttyp »%s«\n" -#: pg_ctl.c:2225 +#: pg_ctl.c:2218 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: konnte das Datenverzeichnis mit Befehl »%s« nicht ermitteln\n" -#: pg_ctl.c:2249 +#: pg_ctl.c:2242 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: Kontrolldatei scheint kaputt zu sein\n" -#: pg_ctl.c:2317 +#: pg_ctl.c:2310 #, c-format msgid "" "%s: cannot be run as root\n" @@ -854,32 +854,32 @@ msgstr "" "Bitte loggen Sie sich (z.B. mit »su«) als der (unprivilegierte) Benutzer\n" "ein, der Eigentümer des Serverprozesses sein soll.\n" -#: pg_ctl.c:2401 +#: pg_ctl.c:2393 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: Option -S wird auf dieser Plattform nicht unterstützt\n" -#: pg_ctl.c:2438 +#: pg_ctl.c:2430 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: zu viele Kommandozeilenargumente (das erste ist »%s«)\n" -#: pg_ctl.c:2464 +#: pg_ctl.c:2456 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: fehlende Argumente für »kill«-Modus\n" -#: pg_ctl.c:2482 +#: pg_ctl.c:2474 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: unbekannter Operationsmodus »%s«\n" -#: pg_ctl.c:2492 +#: pg_ctl.c:2484 #, c-format msgid "%s: no operation specified\n" msgstr "%s: keine Operation angegeben\n" -#: pg_ctl.c:2513 +#: pg_ctl.c:2505 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: kein Datenbankverzeichnis angegeben und Umgebungsvariable PGDATA nicht gesetzt\n" diff --git a/src/bin/pg_ctl/po/el.po b/src/bin/pg_ctl/po/el.po new file mode 100644 index 0000000000000..a6fda2f21928f --- /dev/null +++ b/src/bin/pg_ctl/po/el.po @@ -0,0 +1,1020 @@ +# Greek message translation file for pg_ctl +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_ctl (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_ctl (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-03-23 18:45+0000\n" +"PO-Revision-Date: 2021-03-30 10:28+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"Last-Translator: Georgios Kokolatos \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: el\n" + +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#, c-format +msgid "could not identify current directory: %m" +msgstr "δεν ήταν δυνατή η αναγνώριση του τρέχοντος καταλόγου: %m" + +#: ../../common/exec.c:156 +#, c-format +msgid "invalid binary \"%s\"" +msgstr "μη έγκυρο δυαδικό αρχείο “%s”" + +#: ../../common/exec.c:206 +#, c-format +msgid "could not read binary \"%s\"" +msgstr "δεν ήταν δυνατή η ανάγνωση του δυαδικού αρχείου “%s”" + +#: ../../common/exec.c:214 +#, c-format +msgid "could not find a \"%s\" to execute" +msgstr "δεν βρέθηκε το αρχείο “%s” για να εκτελεστεί" + +#: ../../common/exec.c:270 ../../common/exec.c:309 +#, c-format +msgid "could not change directory to \"%s\": %m" +msgstr "δεν ήταν δυνατή η μετάβαση στον κατάλογο “%s”: %m" + +#: ../../common/exec.c:287 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση του συμβολικού συνδέσμου “%s”: %m" + +#: ../../common/exec.c:410 +#, c-format +msgid "pclose failed: %m" +msgstr "απέτυχε η εντολή pclose: %m" + +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +msgid "out of memory" +msgstr "έλλειψη μνήμης" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#: ../../port/path.c:632 ../../port/path.c:670 ../../port/path.c:687 +#, c-format +msgid "out of memory\n" +msgstr "έλλειψη μνήμης\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "δεν ήταν δυνατή η αντιγραφή δείκτη null (εσωτερικό σφάλμα)\n" + +#: ../../common/wait_error.c:45 +#, c-format +msgid "command not executable" +msgstr "εντολή μη εκτελέσιμη" + +#: ../../common/wait_error.c:49 +#, c-format +msgid "command not found" +msgstr "εντολή δεν βρέθηκε" + +#: ../../common/wait_error.c:54 +#, c-format +msgid "child process exited with exit code %d" +msgstr "απόγονος διεργασίας τερμάτισε με κωδικό εξόδου %d" + +#: ../../common/wait_error.c:62 +#, c-format +msgid "child process was terminated by exception 0x%X" +msgstr "απόγονος διεργασίας τερματίστηκε με εξαίρεση 0x%X" + +#: ../../common/wait_error.c:66 +#, c-format +msgid "child process was terminated by signal %d: %s" +msgstr "απόγονος διεργασίας τερματίστηκε με σήμα %d: %s" + +#: ../../common/wait_error.c:72 +#, c-format +msgid "child process exited with unrecognized status %d" +msgstr "απόγονος διεργασίας τερμάτισε με μη αναγνωρίσιμη κατάσταση %d" + +#: ../../port/path.c:654 +#, c-format +msgid "could not get current working directory: %s\n" +msgstr "" +"δεν ήταν δυνατή η επεξεργασία του τρέχοντος καταλόγου εργασίας: %s\n" + +#: pg_ctl.c:258 +#, c-format +msgid "%s: directory \"%s\" does not exist\n" +msgstr "%s: ο κατάλογος \"%s\" δεν υπάρχει\n" + +#: pg_ctl.c:261 +#, c-format +msgid "%s: could not access directory \"%s\": %s\n" +msgstr "%s: δεν ήταν δυνατή η πρόσβαση στον κατάλογο \"%s\": %s\n" + +#: pg_ctl.c:274 +#, c-format +msgid "%s: directory \"%s\" is not a database cluster directory\n" +msgstr "" +"%s: ο κατάλογος \"%s\" δεν είναι κατάλογος συστάδας βάσης δεδομένων\n" + +#: pg_ctl.c:287 +#, c-format +msgid "%s: could not open PID file \"%s\": %s\n" +msgstr "%s: δεν ήταν δυνατό το άνοιγμα αρχείου PID “%s”: %s\n" + +#: pg_ctl.c:296 +#, c-format +msgid "%s: the PID file \"%s\" is empty\n" +msgstr "%s: το αρχείο PID “%s” είναι άδειο\n" + +#: pg_ctl.c:299 +#, c-format +msgid "%s: invalid data in PID file \"%s\"\n" +msgstr "%s: μη έγκυρα δεδομένα στο αρχείο PID “%s”\n" + +#: pg_ctl.c:458 pg_ctl.c:500 +#, c-format +msgid "%s: could not start server: %s\n" +msgstr "%s: δεν μπόρεσε να εκκινήσει τον διακομιστή: %s\n" + +#: pg_ctl.c:478 +#, c-format +msgid "%s: could not start server due to setsid() failure: %s\n" +msgstr "" +"%s: δεν ήταν δυνατή η εκκίνηση του διακομιστή λόγω αποτυχίας του " +"setsid(): %s\n" + +#: pg_ctl.c:548 +#, c-format +msgid "%s: could not open log file \"%s\": %s\n" +msgstr "%s: δεν ήταν δυνατό το άνοιγμα του αρχείου καταγραφής “%s”: %s\n" + +#: pg_ctl.c:565 +#, c-format +msgid "%s: could not start server: error code %lu\n" +msgstr "" +"%s: δεν ήταν δυνατή η εκκίνηση διακομιστή: κωδικός σφάλματος %lu\n" + +#: pg_ctl.c:712 +#, c-format +msgid "%s: cannot set core file size limit; disallowed by hard limit\n" +msgstr "" +"%s: δεν είναι δυνατός ο ορισμός ορίου μεγέθους αρχείου πυρήνα· " +"απαγορεύεται από το σκληρό όριο\n" + +#: pg_ctl.c:738 +#, c-format +msgid "%s: could not read file \"%s\"\n" +msgstr "%s: δεν ήταν δυνατή η ανάγνωση αρχείου “%s”\n" + +#: pg_ctl.c:743 +#, c-format +msgid "%s: option file \"%s\" must have exactly one line\n" +msgstr "%s: το αρχείο επιλογής \"%s\" πρέπει να έχει ακριβώς μία γραμμή\n" + +#: pg_ctl.c:785 pg_ctl.c:975 pg_ctl.c:1071 +#, c-format +msgid "%s: could not send stop signal (PID: %ld): %s\n" +msgstr "%s: δεν ήταν δυνατή η αποστολή σήματος διακοπής (PID: %ld): %s\n" + +#: pg_ctl.c:813 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation.\n" +msgstr "" +"Το πρόγραμμα \"%s\" απαιτείται από %s αλλά δεν βρέθηκε στον\n" +"ίδιο κατάλογο με το \"%s\".\n" +"Ελέγξτε την εγκατάστασή σας.\n" + +#: pg_ctl.c:818 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation.\n" +msgstr "" +"Το πρόγραμμα \"%s\" βρέθηκε από το \"%s\"\n" +"αλλά δεν ήταν στην ίδια έκδοση με %s.\n" +"Ελέγξτε την εγκατάστασή σας.\n" + +#: pg_ctl.c:851 +#, c-format +msgid "%s: database system initialization failed\n" +msgstr "%s: αρχικοποίηση του συστήματος βάσης δεδομένων απέτυχε\n" + +#: pg_ctl.c:866 +#, c-format +msgid "" +"%s: another server might be running; trying to start server anyway\n" +msgstr "" +"%s: ενδέχεται να εκτελείται ένας άλλος διακομιστής· γίνεται προσπάθεια " +"εκκίνησης του διακομιστή ούτως ή άλλως\n" + +#: pg_ctl.c:915 +msgid "waiting for server to start..." +msgstr "αναμονή για την εκκίνηση του διακομιστή..." + +#: pg_ctl.c:920 pg_ctl.c:1025 pg_ctl.c:1117 pg_ctl.c:1247 +msgid " done\n" +msgstr " ολοκλήρωση\n" + +#: pg_ctl.c:921 +msgid "server started\n" +msgstr "ο διακομιστής ξεκίνησε\n" + +#: pg_ctl.c:924 pg_ctl.c:930 pg_ctl.c:1252 +msgid " stopped waiting\n" +msgstr " διακοπή αναμονής\n" + +#: pg_ctl.c:925 +#, c-format +msgid "%s: server did not start in time\n" +msgstr "%s: ο διακομιστής δεν ξεκίνησε εγκαίρως\n" + +#: pg_ctl.c:931 +#, c-format +msgid "" +"%s: could not start server\n" +"Examine the log output.\n" +msgstr "" +"%s: δεν ήταν δυνατή η εκκίνηση του διακομιστή\n" +"Εξετάστε την έξοδο του αρχείου καταγραφής.\n" + +#: pg_ctl.c:939 +msgid "server starting\n" +msgstr "εκκίνηση διακομιστή\n" + +#: pg_ctl.c:960 pg_ctl.c:1047 pg_ctl.c:1138 pg_ctl.c:1177 pg_ctl.c:1276 +#, c-format +msgid "%s: PID file \"%s\" does not exist\n" +msgstr "%s: το αρχείο PID “%s” δεν υπάρχει\n" + +#: pg_ctl.c:961 pg_ctl.c:1049 pg_ctl.c:1139 pg_ctl.c:1178 pg_ctl.c:1277 +msgid "Is server running?\n" +msgstr "Εκτελείται ο διακομιστής;\n" + +#: pg_ctl.c:967 +#, c-format +msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" +msgstr "" +"%s: δεν είναι δυνατή η διακοπή του διακομιστή· εκτελείται διακομιστής " +"μοναδικού-χρήστη (PID: %ld)\n" + +#: pg_ctl.c:982 +msgid "server shutting down\n" +msgstr "τερματισμός λειτουργίας διακομιστή\n" + +#: pg_ctl.c:997 pg_ctl.c:1086 +msgid "" +"WARNING: online backup mode is active\n" +"Shutdown will not complete until pg_stop_backup() is called.\n" +"\n" +msgstr "" +"WARNING: Η λειτουργία δημιουργίας αντιγράφων ασφαλείας σε απευθείας " +"σύνδεση είναι ενεργή\n" +"Ο τερματισμός λειτουργίας δεν θα ολοκληρωθεί μέχρι να κληθεί " +"pg_stop_backup().\n" +"\n" + +#: pg_ctl.c:1001 pg_ctl.c:1090 +msgid "waiting for server to shut down..." +msgstr "αναμονή για τερματισμό λειτουργίας του διακομιστή..." + +#: pg_ctl.c:1017 pg_ctl.c:1108 +msgid " failed\n" +msgstr " απέτυχε.\n" + +#: pg_ctl.c:1019 pg_ctl.c:1110 +#, c-format +msgid "%s: server does not shut down\n" +msgstr "%s: ο διακομιστής δεν τερματίζεται\n" + +#: pg_ctl.c:1021 pg_ctl.c:1112 +msgid "" +"HINT: The \"-m fast\" option immediately disconnects sessions rather " +"than\n" +"waiting for session-initiated disconnection.\n" +msgstr "" +"HINT: Η επιλογή \"-m fast\" αποσυνδέει αμέσως τις συνεδρίες αντί\n" +"να αναμένει για εκ’ συνεδρίας εκκινούμενη αποσύνδεση.\n" + +#: pg_ctl.c:1027 pg_ctl.c:1118 +msgid "server stopped\n" +msgstr "ο διακομιστής διακόπηκε\n" + +#: pg_ctl.c:1050 +msgid "trying to start server anyway\n" +msgstr "προσπάθεια εκκίνησης του διακομιστή ούτως ή άλλως\n" + +#: pg_ctl.c:1059 +#, c-format +msgid "" +"%s: cannot restart server; single-user server is running (PID: %ld)\n" +msgstr "" +"%s: δεν είναι δυνατή η επανεκκίνηση του διακομιστή· εκτελείται " +"διακομιστής μοναδικού-χρήστη (PID: %ld)\n" + +#: pg_ctl.c:1062 pg_ctl.c:1148 +msgid "Please terminate the single-user server and try again.\n" +msgstr "Τερματίστε το διακομιστή μοναδικού-χρήστη και προσπαθήστε ξανά.\n" + +#: pg_ctl.c:1122 +#, c-format +msgid "%s: old server process (PID: %ld) seems to be gone\n" +msgstr "" +"%s: παλεά διαδικασία διακομιστή (PID: %ld) φαίνεται να έχει χαθεί\n" + +#: pg_ctl.c:1124 +msgid "starting server anyway\n" +msgstr "εκκίνηση του διακομιστή ούτως ή άλλως\n" + +#: pg_ctl.c:1145 +#, c-format +msgid "" +"%s: cannot reload server; single-user server is running (PID: %ld)\n" +msgstr "" +"%s: δεν είναι δυνατή η επαναφόρτωση του διακομιστή· εκτελείται " +"διακομιστής μοναδικού-χρήστη (PID: %ld)\n" + +#: pg_ctl.c:1154 +#, c-format +msgid "%s: could not send reload signal (PID: %ld): %s\n" +msgstr "" +"%s: δεν ήταν δυνατή η αποστολή σήματος επαναφόρτωσης (PID: %ld): %s\n" + +#: pg_ctl.c:1159 +msgid "server signaled\n" +msgstr "στάλθηκε σήμα στον διακομιστή\n" + +#: pg_ctl.c:1184 +#, c-format +msgid "" +"%s: cannot promote server; single-user server is running (PID: %ld)\n" +msgstr "" +"%s: δεν είναι δυνατή η προβίβαση του διακομιστή· εκτελείται διακομιστής " +"μοναδικού-χρήστη (PID: %ld)\n" + +#: pg_ctl.c:1192 +#, c-format +msgid "%s: cannot promote server; server is not in standby mode\n" +msgstr "" +"%s: δεν είναι δυνατή η προβίβαση του διακομιστή· ο διακομιστής δεν " +"βρίσκεται σε κατάσταση αναμονής\n" + +#: pg_ctl.c:1207 +#, c-format +msgid "%s: could not create promote signal file \"%s\": %s\n" +msgstr "" +"%s: δεν ήταν δυνατή η δημιουργία του αρχείου σήματος προβιβασμού \"%s" +"\": %s\n" + +#: pg_ctl.c:1213 +#, c-format +msgid "%s: could not write promote signal file \"%s\": %s\n" +msgstr "" +"%s: δεν ήταν δυνατή η εγγραφή του αρχείου σήματος προβιβασμού \"%s\": " +"%s\n" + +#: pg_ctl.c:1221 +#, c-format +msgid "%s: could not send promote signal (PID: %ld): %s\n" +msgstr "" +"%s: δεν ήταν δυνατή η αποστολή σήματος προβιβασμού (PID: %ld): %s\n" + +#: pg_ctl.c:1224 +#, c-format +msgid "%s: could not remove promote signal file \"%s\": %s\n" +msgstr "" +"%s: δεν ήταν δυνατή η κατάργηση του αρχείου σήματος προβιβασμού \"%s\": " +"%s\n" + +#: pg_ctl.c:1234 +msgid "waiting for server to promote..." +msgstr "αναμονή για την προβίβαση του διακομιστή..." + +#: pg_ctl.c:1248 +msgid "server promoted\n" +msgstr "ο διακομιστής προβιβάστηκε\n" + +#: pg_ctl.c:1253 +#, c-format +msgid "%s: server did not promote in time\n" +msgstr "%s: ο διακομιστής δεν προβιβάστηκε εγκαίρως\n" + +#: pg_ctl.c:1259 +msgid "server promoting\n" +msgstr "προβίβαση διακομιστή\n" + +#: pg_ctl.c:1283 +#, c-format +msgid "" +"%s: cannot rotate log file; single-user server is running (PID: %ld)\n" +msgstr "" +"%s: δεν είναι δυνατή η περιστροφή του αρχείου καταγραφής· εκτελείται " +"διακομιστής μοναδικού-χρήστη (PID: %ld)\n" + +#: pg_ctl.c:1293 +#, c-format +msgid "%s: could not create log rotation signal file \"%s\": %s\n" +msgstr "" +"%s: δεν ήταν δυνατή η δημιουργία αρχείου σήματος περιστροφής αρχείου " +"καταγραφής \"%s\": %s\n" + +#: pg_ctl.c:1299 +#, c-format +msgid "%s: could not write log rotation signal file \"%s\": %s\n" +msgstr "" +"%s: δεν ήταν δυνατή η εγγραφή του αρχείου σήματος περιστροφής αρχείου " +"καταγραφής \"%s\": %s\n" + +#: pg_ctl.c:1307 +#, c-format +msgid "%s: could not send log rotation signal (PID: %ld): %s\n" +msgstr "" +"%s: δεν ήταν δυνατή η αποστολή σήματος περιστροφής αρχείου καταγραφής " +"(PID: %ld): %s\n" + +#: pg_ctl.c:1310 +#, c-format +msgid "%s: could not remove log rotation signal file \"%s\": %s\n" +msgstr "" +"%s: δεν ήταν δυνατή η κατάργηση του αρχείου σήματος περιστροφής αρχείου " +"καταγραφής \"%s\": %s\n" + +#: pg_ctl.c:1315 +msgid "server signaled to rotate log file\n" +msgstr "" +"ο διακομιστής έλαβε σήμα για την περιστροφή του αρχείου καταγραφής\n" + +#: pg_ctl.c:1362 +#, c-format +msgid "%s: single-user server is running (PID: %ld)\n" +msgstr "%s: εκτελείται διακομιστής μοναδικού-χρήστη (PID: %ld)\n" + +#: pg_ctl.c:1376 +#, c-format +msgid "%s: server is running (PID: %ld)\n" +msgstr "%s: εκτελείται διακομιστής (PID: %ld)\n" + +#: pg_ctl.c:1392 +#, c-format +msgid "%s: no server running\n" +msgstr "%s: δεν εκτελείται κανένας διακομιστής\n" + +#: pg_ctl.c:1409 +#, c-format +msgid "%s: could not send signal %d (PID: %ld): %s\n" +msgstr "%s: δεν ήταν δυνατή η αποστολή %d σήματος (PID: %ld): %s\n" + +#: pg_ctl.c:1440 +#, c-format +msgid "%s: could not find own program executable\n" +msgstr "%s: δεν ήταν δυνατή η εύρεση του ιδίου εκτελέσιμου προγράμματος\n" + +#: pg_ctl.c:1450 +#, c-format +msgid "%s: could not find postgres program executable\n" +msgstr "" +"%s: δεν ήταν δυνατή η εύρεση του εκτελέσιμου προγράμματος postgres\n" + +#: pg_ctl.c:1520 pg_ctl.c:1554 +#, c-format +msgid "%s: could not open service manager\n" +msgstr "%s: δεν ήταν δυνατό το άνοιγμα του διαχειριστή υπηρεσιών\n" + +#: pg_ctl.c:1526 +#, c-format +msgid "%s: service \"%s\" already registered\n" +msgstr "%s: η υπηρεσία \"%s\" έχει ήδη καταχωρηθεί\n" + +#: pg_ctl.c:1537 +#, c-format +msgid "%s: could not register service \"%s\": error code %lu\n" +msgstr "" +"%s: δεν ήταν δυνατή η καταχώρηση της υπηρεσίας \"%s\": κωδικός " +"σφάλματος %lu\n" + +#: pg_ctl.c:1560 +#, c-format +msgid "%s: service \"%s\" not registered\n" +msgstr "%s: η υπηρεσία \"%s\" δεν έχει καταχωρηθεί\n" + +#: pg_ctl.c:1567 +#, c-format +msgid "%s: could not open service \"%s\": error code %lu\n" +msgstr "" +"%s: δεν ήταν δυνατό το άνοιγμα της υπηρεσίας \"%s\": κωδικός σφάλματος " +"%lu\n" + +#: pg_ctl.c:1576 +#, c-format +msgid "%s: could not unregister service \"%s\": error code %lu\n" +msgstr "" +"%s: δεν ήταν δυνατή η διαγραφή καταχώρησης της υπηρεσίας \"%s\": " +"κωδικός σφάλματος %lu\n" + +#: pg_ctl.c:1663 +msgid "Waiting for server startup...\n" +msgstr "Αναμονή για εκκίνηση διακομιστή...\n" + +#: pg_ctl.c:1666 +msgid "Timed out waiting for server startup\n" +msgstr "Λήξη χρονικού ορίου αναμονής για εκκίνηση διακομιστή\n" + +#: pg_ctl.c:1670 +msgid "Server started and accepting connections\n" +msgstr "Ο διακομιστής ξεκίνησε και αποδέχτηκε συνδέσεις\n" + +#: pg_ctl.c:1725 +#, c-format +msgid "%s: could not start service \"%s\": error code %lu\n" +msgstr "" +"%s: δεν ήταν δυνατή η εκκίνηση της υπηρεσίας \"%s\": κωδικός σφάλματος " +"%lu\n" + +#: pg_ctl.c:1795 +#, c-format +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "" +"%s: WARNING: δεν είναι δυνατή η δημιουργία περιορισμένων διακριτικών σε " +"αυτήν την πλατφόρμα\n" + +#: pg_ctl.c:1808 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "" +"%s: δεν ήταν δυνατό το άνοιγμα διακριτικού διεργασίας: κωδικός " +"σφάλματος %lu\n" + +#: pg_ctl.c:1822 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: δεν ήταν δυνατή η εκχώρηση SIDs: κωδικός σφάλματος %lu\n" + +#: pg_ctl.c:1849 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "" +"%s: δεν ήταν δυνατή η δημιουργία περιορισμένου διακριτικού: κωδικός " +"σφάλματος %lu\n" + +#: pg_ctl.c:1880 +#, c-format +msgid "" +"%s: WARNING: could not locate all job object functions in system API\n" +msgstr "" +"%s: WARNING: δεν ήταν δυνατός ο εντοπισμός όλων των λειτουργιών " +"αντικειμένου εργασίας στο API συστήματος\n" + +#: pg_ctl.c:1977 +#, c-format +msgid "%s: could not get LUIDs for privileges: error code %lu\n" +msgstr "" +"%s: δεν ήταν δυνατή η ανάκτηση LUIDs για δικαιώματα: κωδικός σφάλματος " +"%lu\n" + +#: pg_ctl.c:1985 pg_ctl.c:2000 +#, c-format +msgid "%s: could not get token information: error code %lu\n" +msgstr "" +"%s: δεν ήταν δυνατή η ανάκτηση πληροφοριών διακριτικού: κωδικός " +"σφάλματος %lu\n" + +#: pg_ctl.c:1994 +#, c-format +msgid "%s: out of memory\n" +msgstr "%s: έλλειψη μνήμης\n" + +#: pg_ctl.c:2024 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" + +#: pg_ctl.c:2032 +#, c-format +msgid "" +"%s is a utility to initialize, start, stop, or control a PostgreSQL " +"server.\n" +"\n" +msgstr "" +"%s είναι ένα βοηθητικό πρόγραμμα για την αρχικοποίηση, την εκκίνηση, τη " +"διακοπή ή τον έλεγχο ενός διακομιστή PostgreSQL.\n" +"\n" + +#: pg_ctl.c:2033 +#, c-format +msgid "Usage:\n" +msgstr "Χρήση:\n" + +#: pg_ctl.c:2034 +#, c-format +msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" +msgstr " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" + +#: pg_ctl.c:2035 +#, c-format +msgid "" +" %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" +" [-o OPTIONS] [-p PATH] [-c]\n" +msgstr "" +" %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" +" [-o OPTIONS] [-p PATH] [-c]\n" +"\n" + +#: pg_ctl.c:2037 +#, c-format +msgid "" +" %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" +msgstr "" +" %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" +"\n" + +#: pg_ctl.c:2038 +#, c-format +msgid "" +" %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" +" [-o OPTIONS] [-c]\n" +msgstr "" +" %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" +" [-o OPTIONS] [-c]\n" + +#: pg_ctl.c:2040 +#, c-format +msgid " %s reload [-D DATADIR] [-s]\n" +msgstr " %s reload [-D DATADIR] [-s]\n" + +#: pg_ctl.c:2041 +#, c-format +msgid " %s status [-D DATADIR]\n" +msgstr " %s status [-D DATADIR]\n" + +#: pg_ctl.c:2042 +#, c-format +msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" +msgstr " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" + +#: pg_ctl.c:2043 +#, c-format +msgid " %s logrotate [-D DATADIR] [-s]\n" +msgstr " %s logrotate [-D DATADIR] [-s]\n" + +#: pg_ctl.c:2044 +#, c-format +msgid " %s kill SIGNALNAME PID\n" +msgstr " %s kill SIGNALNAME PID\n" + +#: pg_ctl.c:2046 +#, c-format +msgid "" +" %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P " +"PASSWORD]\n" +" [-S START-TYPE] [-e SOURCE] [-W] [-t SECS] [-s] [-o " +"OPTIONS]\n" +msgstr "" +" %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P " +"PASSWORD]\n" +" [-S START-TYPE] [-e SOURCE] [-W] [-t SECS] [-s] [-o " +"OPTIONS]\n" + +#: pg_ctl.c:2048 +#, c-format +msgid " %s unregister [-N SERVICENAME]\n" +msgstr " %s unregister [-N SERVICENAME]\n" + +#: pg_ctl.c:2051 +#, c-format +msgid "" +"\n" +"Common options:\n" +msgstr "" +"\n" +"Κοινές επιλογές:\n" + +#: pg_ctl.c:2052 +#, c-format +msgid " -D, --pgdata=DATADIR location of the database storage area\n" +msgstr "" +" [-D, —pgdata=]DATADIR τοποθεσία για τη περιοχή αποθήκευσης της " +"βάσης δεδομένων\n" + +#: pg_ctl.c:2054 +#, c-format +msgid "" +" -e SOURCE event source for logging when running as a " +"service\n" +msgstr "" +" -e SOURCE πηγή προέλευσης συμβάντων για καταγραφή κατά " +"την εκτέλεση ως υπηρεσία\n" + +#: pg_ctl.c:2056 +#, c-format +msgid "" +" -s, --silent only print errors, no informational messages\n" +msgstr "" +" -s, —silent εκτύπωση μόνο σφαλμάτων, χωρίς ενημερωτικά " +"μηνύματα\n" + +#: pg_ctl.c:2057 +#, c-format +msgid " -t, --timeout=SECS seconds to wait when using -w option\n" +msgstr "" +" -t, —timeout=SECS δευτερόλεπτα αναμονής κατά τη χρήση της " +"επιλογής -w\n" + +#: pg_ctl.c:2058 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr "" +" -V, —version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, " +"έξοδος\n" + +#: pg_ctl.c:2059 +#, c-format +msgid "" +" -w, --wait wait until operation completes (default)\n" +msgstr "" +" -w, —wait περίμενε μέχρι να ολοκληρωθεί η λειτουργία " +"(προεπιλογή)\n" + +#: pg_ctl.c:2060 +#, c-format +msgid " -W, --no-wait do not wait until operation completes\n" +msgstr "" +" -W, —no-wait να μην περιμένει μέχρι να ολοκληρωθεί η " +"λειτουργία\n" + +#: pg_ctl.c:2061 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr "" +" -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, και μετά " +"έξοδος\n" + +#: pg_ctl.c:2062 +#, c-format +msgid "" +"If the -D option is omitted, the environment variable PGDATA is used.\n" +msgstr "" +"Εάν παραλειφθεί η επιλογή -D, χρησιμοποιείται η μεταβλητή περιβάλλοντος " +"PGDATA.\n" + +#: pg_ctl.c:2064 +#, c-format +msgid "" +"\n" +"Options for start or restart:\n" +msgstr "" +"\n" +"Επιλογές για έναρξη ή επανεκκίνηση:\n" + +#: pg_ctl.c:2066 +#, c-format +msgid " -c, --core-files allow postgres to produce core files\n" +msgstr "" +" -c, —core-files επίτρεψε στην postgres να παράγει αρχεία " +"αποτύπωσης μνήμης\n" + +#: pg_ctl.c:2068 +#, c-format +msgid " -c, --core-files not applicable on this platform\n" +msgstr " -c, —core-files ανεφάρμοστο σε αυτήν την πλατφόρμα\n" + +#: pg_ctl.c:2070 +#, c-format +msgid "" +" -l, --log=FILENAME write (or append) server log to FILENAME\n" +msgstr "" +" -l, --log=FILENAME ενέγραψε (ή προσάρτησε) το αρχείο καταγραφής " +"διακομιστή στο FILENAME\n" + +#: pg_ctl.c:2071 +#, c-format +msgid "" +" -o, --options=OPTIONS command line options to pass to postgres\n" +" (PostgreSQL server executable) or initdb\n" +msgstr "" +" -o, —options=OPTIONS επιλογές γραμμής εντολών που θα διαβιστούν στη " +"postgres\n" +" (εκτελέσιμο αρχείο διακομιστή PostgreSQL) ή " +"initdb\n" + +#: pg_ctl.c:2073 +#, c-format +msgid " -p PATH-TO-POSTGRES normally not necessary\n" +msgstr " -p ΤΟ PATH-TO-POSTGRES κανονικά δεν είναι απαραίτητο\n" + +#: pg_ctl.c:2074 +#, c-format +msgid "" +"\n" +"Options for stop or restart:\n" +msgstr "" +"\n" +"Επιλογές διακοπής ή επανεκκίνησης:\n" + +#: pg_ctl.c:2075 +#, c-format +msgid "" +" -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate" +"\"\n" +msgstr "" +" -m, —mode=MODE MODE μπορεί να είνα “smart”, “fast”, ή " +"“immediate”\n" + +#: pg_ctl.c:2077 +#, c-format +msgid "" +"\n" +"Shutdown modes are:\n" +msgstr "" +"\n" +"Οι λειτουργίες τερματισμού λειτουργίας είναι:\n" + +#: pg_ctl.c:2078 +#, c-format +msgid " smart quit after all clients have disconnected\n" +msgstr " smart διάκοψε μετά την αποσύνδεση όλων των πελατών\n" + +#: pg_ctl.c:2079 +#, c-format +msgid " fast quit directly, with proper shutdown (default)\n" +msgstr "" +" fast διάκοψε απευθείας, με σωστό τερματισμό (προεπιλογή)\n" + +#: pg_ctl.c:2080 +#, c-format +msgid "" +" immediate quit without complete shutdown; will lead to recovery on " +"restart\n" +msgstr "" +" immediate διάκοψε άμεσα χωρίς πλήρη τερματισμό· Θα οδηγήσει σε " +"αποκατάσταση κατά την επανεκκίνηση\n" + +#: pg_ctl.c:2082 +#, c-format +msgid "" +"\n" +"Allowed signal names for kill:\n" +msgstr "" +"\n" +"Επιτρεπόμενα ονόματα σημάτων για θανάτωση:\n" + +#: pg_ctl.c:2086 +#, c-format +msgid "" +"\n" +"Options for register and unregister:\n" +msgstr "" +"\n" +"Επιλογές καταχώρησης και διαγραφής καταχώρησης:\n" + +#: pg_ctl.c:2087 +#, c-format +msgid "" +" -N SERVICENAME service name with which to register PostgreSQL " +"server\n" +msgstr "" +" -N SERVICENAME όνομα υπηρεσίας με το οποίο θα καταχωρηθεί ο " +"διακομιστής PostgreSQL\n" + +#: pg_ctl.c:2088 +#, c-format +msgid "" +" -P PASSWORD password of account to register PostgreSQL server\n" +msgstr "" +" -P PASSWORD κωδικός πρόσβασης του λογαριασμού για την καταγραφή " +"του διακομιστή PostgreSQL\n" + +#: pg_ctl.c:2089 +#, c-format +msgid "" +" -U USERNAME user name of account to register PostgreSQL server\n" +msgstr "" +" -U USERNAME όνομα χρήστη του λογαριασμού για την καταγραφή του " +"διακομιστή PostgreSQL\n" + +#: pg_ctl.c:2090 +#, c-format +msgid "" +" -S START-TYPE service start type to register PostgreSQL server\n" +msgstr "" +" -S START-TYPE τύπος έναρξης υπηρεσίας για την καταχώρηση διακομιστή " +"PostgreSQL\n" + +#: pg_ctl.c:2092 +#, c-format +msgid "" +"\n" +"Start types are:\n" +msgstr "" +"\n" +"Οι τύποι έναρξης είναι:\n" + +#: pg_ctl.c:2093 +#, c-format +msgid "" +" auto start service automatically during system startup " +"(default)\n" +msgstr "" +" auto αυτόματη εκκίνηση της υπηρεσίας κατά την εκκίνηση του " +"συστήματος (προεπιλογή)\n" + +#: pg_ctl.c:2094 +#, c-format +msgid " demand start service on demand\n" +msgstr " demand έναρξη υπηρεσίας κατ' απαίτηση\n" + +#: pg_ctl.c:2097 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Υποβάλετε αναφορές σφάλματων σε <%s>.\n" + +#: pg_ctl.c:2098 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s αρχική σελίδα: <%s>\n" + +#: pg_ctl.c:2123 +#, c-format +msgid "%s: unrecognized shutdown mode \"%s\"\n" +msgstr "%s: μη αναγνωρισμένη λειτουργία τερματισμού λειτουργίας \"%s\"\n" + +#: pg_ctl.c:2152 +#, c-format +msgid "%s: unrecognized signal name \"%s\"\n" +msgstr "%s: μη αναγνωρισμένο όνομα σήματος \"%s\"\n" + +#: pg_ctl.c:2169 +#, c-format +msgid "%s: unrecognized start type \"%s\"\n" +msgstr "%s: μη αναγνωρίσιμος τύπος έναρξης \"%s\"\n" + +#: pg_ctl.c:2224 +#, c-format +msgid "%s: could not determine the data directory using command \"%s\"\n" +msgstr "" +"%s: δεν ήταν δυνατός ο προσδιορισμός του καταλόγου δεδομένων με χρήση " +"της εντολής \"%s\"\n" + +#: pg_ctl.c:2248 +#, c-format +msgid "%s: control file appears to be corrupt\n" +msgstr "%s: το αρχείο ελέγχου φαίνεται να είναι αλλοιωμένο\n" + +#: pg_ctl.c:2316 +#, c-format +msgid "" +"%s: cannot be run as root\n" +"Please log in (using, e.g., \"su\") as the (unprivileged) user that " +"will\n" +"own the server process.\n" +msgstr "" +"%s: δεν είναι δυνατή η εκτέλεση ως υπερχρήστης\n" +"Συνδεθείτε (χρησιμοποιώντας, π.χ. \"su\") ως (μη προνομιούχο) χρήστη " +"που θα\n" +"να είναι στην κατοχή της η διαδικασία διακομιστή.\n" + +#: pg_ctl.c:2400 +#, c-format +msgid "%s: -S option not supported on this platform\n" +msgstr "%s: επιλογή -S δεν υποστηρίζεται σε αυτήν την πλατφόρμα\n" + +#: pg_ctl.c:2437 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "" +"%s: πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (πρώτη είναι " +"η “%s”)\n" + +#: pg_ctl.c:2463 +#, c-format +msgid "%s: missing arguments for kill mode\n" +msgstr "%s: λείπουν παράμετροι για τη λειτουργία kill\n" + +#: pg_ctl.c:2481 +#, c-format +msgid "%s: unrecognized operation mode \"%s\"\n" +msgstr "%s: μη αναγνωρισμένη λειτουργία \"%s\"\n" + +#: pg_ctl.c:2491 +#, c-format +msgid "%s: no operation specified\n" +msgstr "%s: δεν καθορίστηκε καμία λειτουργία\n" + +#: pg_ctl.c:2512 +#, c-format +msgid "" +"%s: no database directory specified and environment variable PGDATA " +"unset\n" +msgstr "" +"%s: δεν έχει καθοριστεί κατάλογος βάσης δεδομένων και δεν έχει " +"καθοριστεί μεταβλητή περιβάλλοντος PGDATA\n" diff --git a/src/bin/pg_ctl/po/es.po b/src/bin/pg_ctl/po/es.po index 5a2ab262bc26c..a774433a35337 100644 --- a/src/bin/pg_ctl/po/es.po +++ b/src/bin/pg_ctl/po/es.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_ctl (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:45+0000\n" -"PO-Revision-Date: 2019-06-06 17:23-0400\n" +"POT-Creation-Date: 2020-09-13 10:45+0000\n" +"PO-Revision-Date: 2020-09-12 22:56-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -147,10 +147,9 @@ msgid "%s: could not start server due to setsid() failure: %s\n" msgstr "%s: no se pudo iniciar el servidor debido a falla en setsid(): %s\n" #: pg_ctl.c:548 -#, fuzzy, c-format -#| msgid "%s: could not open file \"%s\": %s\n" +#, c-format msgid "%s: could not open log file \"%s\": %s\n" -msgstr "%s: no se pudo abrir el archivo «%s»: %s\n" +msgstr "%s: no se pudo abrir el archivo de log «%s»: %s\n" #: pg_ctl.c:565 #, c-format @@ -829,11 +828,13 @@ msgid "" "\n" "Report bugs to <%s>.\n" msgstr "" +"\n" +"Reporte errores a <%s>.\n" #: pg_ctl.c:2098 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" #: pg_ctl.c:2123 #, c-format @@ -900,10 +901,3 @@ msgstr "%s: no se especificó operación\n" #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: no se especificó directorio de datos y la variable PGDATA no está definida\n" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Reporte errores a .\n" diff --git a/src/bin/pg_ctl/po/fr.po b/src/bin/pg_ctl/po/fr.po index 8aa733525608e..3c72fe5f6084d 100644 --- a/src/bin/pg_ctl/po/fr.po +++ b/src/bin/pg_ctl/po/fr.po @@ -9,52 +9,52 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-04-16 06:15+0000\n" -"PO-Revision-Date: 2020-04-16 14:06+0200\n" +"POT-Creation-Date: 2021-04-26 06:46+0000\n" +"PO-Revision-Date: 2021-04-26 11:37+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: PostgreSQLfr \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "n'a pas pu identifier le répertoire courant : %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "binaire « %s » invalide" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "n'a pas pu lire le binaire « %s »" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "n'a pas pu trouver un « %s » à exécuter" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "n'a pas pu modifier le répertoire par « %s » : %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "n'a pas pu lire le lien symbolique « %s » : %m" -#: ../../common/exec.c:410 +#: ../../common/exec.c:409 #, c-format -msgid "pclose failed: %m" -msgstr "échec de pclose : %m" +msgid "%s() failed: %m" +msgstr "échec de %s() : %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" msgstr "mémoire épuisée" @@ -172,7 +172,7 @@ msgstr "%s : n'a pas pu lire le fichier « %s »\n" msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s : le fichier d'options « %s » ne doit comporter qu'une seule ligne\n" -#: pg_ctl.c:785 pg_ctl.c:976 pg_ctl.c:1072 +#: pg_ctl.c:785 pg_ctl.c:974 pg_ctl.c:1070 #, c-format msgid "%s: could not send stop signal (PID: %ld): %s\n" msgstr "%s : n'a pas pu envoyer le signal d'arrêt (PID : %ld) : %s\n" @@ -188,7 +188,7 @@ msgstr "" "dans le même répertoire que « %s ».\n" "Vérifiez votre installation.\n" -#: pg_ctl.c:819 +#: pg_ctl.c:818 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -199,40 +199,40 @@ msgstr "" "que %s.\n" "Vérifiez votre installation.\n" -#: pg_ctl.c:852 +#: pg_ctl.c:851 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s : l'initialisation du système a échoué\n" -#: pg_ctl.c:867 +#: pg_ctl.c:866 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "" "%s : un autre serveur semble en cours d'exécution ; le démarrage du serveur\n" "va toutefois être tenté\n" -#: pg_ctl.c:916 +#: pg_ctl.c:914 msgid "waiting for server to start..." msgstr "en attente du démarrage du serveur..." -#: pg_ctl.c:921 pg_ctl.c:1026 pg_ctl.c:1118 pg_ctl.c:1248 +#: pg_ctl.c:919 pg_ctl.c:1024 pg_ctl.c:1116 pg_ctl.c:1241 msgid " done\n" msgstr " effectué\n" -#: pg_ctl.c:922 +#: pg_ctl.c:920 msgid "server started\n" msgstr "serveur démarré\n" -#: pg_ctl.c:925 pg_ctl.c:931 pg_ctl.c:1253 +#: pg_ctl.c:923 pg_ctl.c:929 pg_ctl.c:1246 msgid " stopped waiting\n" msgstr " attente arrêtée\n" -#: pg_ctl.c:926 +#: pg_ctl.c:924 #, c-format msgid "%s: server did not start in time\n" msgstr "%s : le serveur ne s'est pas lancé à temps\n" -#: pg_ctl.c:932 +#: pg_ctl.c:930 #, c-format msgid "" "%s: could not start server\n" @@ -241,31 +241,31 @@ msgstr "" "%s : n'a pas pu démarrer le serveur\n" "Examinez le journal applicatif.\n" -#: pg_ctl.c:940 +#: pg_ctl.c:938 msgid "server starting\n" msgstr "serveur en cours de démarrage\n" -#: pg_ctl.c:961 pg_ctl.c:1048 pg_ctl.c:1139 pg_ctl.c:1178 pg_ctl.c:1277 +#: pg_ctl.c:959 pg_ctl.c:1046 pg_ctl.c:1137 pg_ctl.c:1176 pg_ctl.c:1270 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s : le fichier de PID « %s » n'existe pas\n" -#: pg_ctl.c:962 pg_ctl.c:1050 pg_ctl.c:1140 pg_ctl.c:1179 pg_ctl.c:1278 +#: pg_ctl.c:960 pg_ctl.c:1048 pg_ctl.c:1138 pg_ctl.c:1177 pg_ctl.c:1271 msgid "Is server running?\n" msgstr "Le serveur est-il en cours d'exécution ?\n" -#: pg_ctl.c:968 +#: pg_ctl.c:966 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" msgstr "" "%s : ne peut pas arrêter le serveur ; le serveur mono-utilisateur est en\n" "cours d'exécution (PID : %ld)\n" -#: pg_ctl.c:983 +#: pg_ctl.c:981 msgid "server shutting down\n" msgstr "serveur en cours d'arrêt\n" -#: pg_ctl.c:998 pg_ctl.c:1087 +#: pg_ctl.c:996 pg_ctl.c:1085 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" @@ -275,20 +275,20 @@ msgstr "" "L'arrêt ne surviendra qu'au moment où pg_stop_backup() sera appelé.\n" "\n" -#: pg_ctl.c:1002 pg_ctl.c:1091 +#: pg_ctl.c:1000 pg_ctl.c:1089 msgid "waiting for server to shut down..." msgstr "en attente de l'arrêt du serveur..." -#: pg_ctl.c:1018 pg_ctl.c:1109 +#: pg_ctl.c:1016 pg_ctl.c:1107 msgid " failed\n" msgstr " a échoué\n" -#: pg_ctl.c:1020 pg_ctl.c:1111 +#: pg_ctl.c:1018 pg_ctl.c:1109 #, c-format msgid "%s: server does not shut down\n" msgstr "%s : le serveur ne s'est pas arrêté\n" -#: pg_ctl.c:1022 pg_ctl.c:1113 +#: pg_ctl.c:1020 pg_ctl.c:1111 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -296,253 +296,253 @@ msgstr "" "ASTUCE : l'option « -m fast » déconnecte immédiatement les sessions plutôt que\n" "d'attendre la déconnexion des sessions déjà présentes.\n" -#: pg_ctl.c:1028 pg_ctl.c:1119 +#: pg_ctl.c:1026 pg_ctl.c:1117 msgid "server stopped\n" msgstr "serveur arrêté\n" -#: pg_ctl.c:1051 +#: pg_ctl.c:1049 msgid "trying to start server anyway\n" msgstr "tentative de lancement du serveur malgré tout\n" -#: pg_ctl.c:1060 +#: pg_ctl.c:1058 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" msgstr "" "%s : ne peut pas relancer le serveur ; le serveur mono-utilisateur est en\n" "cours d'exécution (PID : %ld)\n" -#: pg_ctl.c:1063 pg_ctl.c:1149 +#: pg_ctl.c:1061 pg_ctl.c:1147 msgid "Please terminate the single-user server and try again.\n" msgstr "Merci d'arrêter le serveur mono-utilisateur et de réessayer.\n" -#: pg_ctl.c:1123 +#: pg_ctl.c:1121 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" msgstr "%s : l'ancien processus serveur (PID : %ld) semble être parti\n" -#: pg_ctl.c:1125 +#: pg_ctl.c:1123 msgid "starting server anyway\n" msgstr "lancement du serveur malgré tout\n" -#: pg_ctl.c:1146 +#: pg_ctl.c:1144 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" msgstr "" "%s : ne peut pas recharger le serveur ; le serveur mono-utilisateur est en\n" "cours d'exécution (PID : %ld)\n" -#: pg_ctl.c:1155 +#: pg_ctl.c:1153 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" msgstr "%s : n'a pas pu envoyer le signal de rechargement (PID : %ld) : %s\n" -#: pg_ctl.c:1160 +#: pg_ctl.c:1158 msgid "server signaled\n" msgstr "envoi d'un signal au serveur\n" -#: pg_ctl.c:1185 +#: pg_ctl.c:1183 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" msgstr "" "%s : ne peut pas promouvoir le serveur ; le serveur mono-utilisateur est en\n" "cours d'exécution (PID : %ld)\n" -#: pg_ctl.c:1193 +#: pg_ctl.c:1191 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s : ne peut pas promouvoir le serveur ; le serveur n'est pas en standby\n" -#: pg_ctl.c:1208 +#: pg_ctl.c:1201 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" msgstr "%s : n'a pas pu créer le fichier « %s » signalant la promotion : %s\n" -#: pg_ctl.c:1214 +#: pg_ctl.c:1207 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" msgstr "%s : n'a pas pu écrire le fichier « %s » signalant la promotion : %s\n" -#: pg_ctl.c:1222 +#: pg_ctl.c:1215 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" msgstr "%s : n'a pas pu envoyer le signal de promotion (PID : %ld) : %s\n" -#: pg_ctl.c:1225 +#: pg_ctl.c:1218 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" msgstr "%s : n'a pas pu supprimer le fichier « %s » signalant la promotion : %s\n" -#: pg_ctl.c:1235 +#: pg_ctl.c:1228 msgid "waiting for server to promote..." msgstr "en attente du serveur à promouvoir..." -#: pg_ctl.c:1249 +#: pg_ctl.c:1242 msgid "server promoted\n" msgstr "serveur promu\n" -#: pg_ctl.c:1254 +#: pg_ctl.c:1247 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s : le serveur ne s'est pas promu à temps\n" -#: pg_ctl.c:1260 +#: pg_ctl.c:1253 msgid "server promoting\n" msgstr "serveur en cours de promotion\n" -#: pg_ctl.c:1284 +#: pg_ctl.c:1277 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %ld)\n" msgstr "" "%s : ne peut pas faire une rotation de fichier de traces ; le serveur mono-utilisateur est en\n" "cours d'exécution (PID : %ld)\n" -#: pg_ctl.c:1294 +#: pg_ctl.c:1287 #, c-format msgid "%s: could not create log rotation signal file \"%s\": %s\n" msgstr "%s : n'a pas pu créer le fichier « %s » de demande de rotation des fichiers de trace : %s\n" -#: pg_ctl.c:1300 +#: pg_ctl.c:1293 #, c-format msgid "%s: could not write log rotation signal file \"%s\": %s\n" msgstr "%s : n'a pas pu écrire le fichier « %s » de demande de rotation des fichiers de trace : %s\n" -#: pg_ctl.c:1308 +#: pg_ctl.c:1301 #, c-format msgid "%s: could not send log rotation signal (PID: %ld): %s\n" msgstr "%s : n'a pas pu envoyer le signal de rotation des fichiers de trace (PID : %ld) : %s\n" -#: pg_ctl.c:1311 +#: pg_ctl.c:1304 #, c-format msgid "%s: could not remove log rotation signal file \"%s\": %s\n" msgstr "%s : n'a pas pu supprimer le fichier « %s » signalant la demande de rotation des fichiers de trace : %s\n" -#: pg_ctl.c:1316 +#: pg_ctl.c:1309 msgid "server signaled to rotate log file\n" msgstr "envoi d'un signal au serveur pour faire une rotation des traces\n" -#: pg_ctl.c:1363 +#: pg_ctl.c:1356 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s : le serveur mono-utilisateur est en cours d'exécution (PID : %ld)\n" -#: pg_ctl.c:1377 +#: pg_ctl.c:1370 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s : le serveur est en cours d'exécution (PID : %ld)\n" -#: pg_ctl.c:1393 +#: pg_ctl.c:1386 #, c-format msgid "%s: no server running\n" msgstr "%s : aucun serveur en cours d'exécution\n" -#: pg_ctl.c:1410 +#: pg_ctl.c:1403 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s : n'a pas pu envoyer le signal %d (PID : %ld) : %s\n" -#: pg_ctl.c:1441 +#: pg_ctl.c:1434 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s : n'a pas pu trouver l'exécutable du programme\n" -#: pg_ctl.c:1451 +#: pg_ctl.c:1444 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s : n'a pas pu trouver l'exécutable postgres\n" -#: pg_ctl.c:1521 pg_ctl.c:1555 +#: pg_ctl.c:1514 pg_ctl.c:1548 #, c-format msgid "%s: could not open service manager\n" msgstr "%s : n'a pas pu ouvrir le gestionnaire de services\n" -#: pg_ctl.c:1527 +#: pg_ctl.c:1520 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s : le service « %s » est déjà enregistré\n" -#: pg_ctl.c:1538 +#: pg_ctl.c:1531 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s : n'a pas pu enregistrer le service « %s » : code d'erreur %lu\n" -#: pg_ctl.c:1561 +#: pg_ctl.c:1554 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s : le service « %s » n'est pas enregistré\n" -#: pg_ctl.c:1568 +#: pg_ctl.c:1561 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s : n'a pas pu ouvrir le service « %s » : code d'erreur %lu\n" -#: pg_ctl.c:1577 +#: pg_ctl.c:1570 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s : n'a pas pu supprimer le service « %s » : code d'erreur %lu\n" -#: pg_ctl.c:1664 +#: pg_ctl.c:1657 msgid "Waiting for server startup...\n" msgstr "En attente du démarrage du serveur...\n" -#: pg_ctl.c:1667 +#: pg_ctl.c:1660 msgid "Timed out waiting for server startup\n" msgstr "Dépassement du délai pour le démarrage du serveur\n" -#: pg_ctl.c:1671 +#: pg_ctl.c:1664 msgid "Server started and accepting connections\n" msgstr "Serveur lancé et acceptant les connexions\n" -#: pg_ctl.c:1726 +#: pg_ctl.c:1719 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s : n'a pas pu démarrer le service « %s » : code d'erreur %lu\n" -#: pg_ctl.c:1796 +#: pg_ctl.c:1789 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" msgstr "%s : ATTENTION : ne peut pas créer les jetons restreints sur cette plateforme\n" -#: pg_ctl.c:1809 +#: pg_ctl.c:1802 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s : n'a pas pu ouvrir le jeton du processus : code d'erreur %lu\n" -#: pg_ctl.c:1823 +#: pg_ctl.c:1816 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s : n'a pas pu allouer les SID : code d'erreur %lu\n" -#: pg_ctl.c:1850 +#: pg_ctl.c:1843 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s : n'a pas pu créer le jeton restreint : code d'erreur %lu\n" -#: pg_ctl.c:1881 +#: pg_ctl.c:1874 #, c-format msgid "%s: WARNING: could not locate all job object functions in system API\n" msgstr "%s : ATTENTION : n'a pas pu localiser toutes les fonctions objet de job dans l'API système\n" -#: pg_ctl.c:1978 +#: pg_ctl.c:1971 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s : n'a pas pu obtenir les LUID pour les droits : code d'erreur %lu\n" -#: pg_ctl.c:1986 pg_ctl.c:2001 +#: pg_ctl.c:1979 pg_ctl.c:1994 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s : n'a pas pu obtenir l'information sur le jeton : code d'erreur %lu\n" -#: pg_ctl.c:1995 +#: pg_ctl.c:1988 #, c-format msgid "%s: out of memory\n" msgstr "%s : mémoire épuisée\n" -#: pg_ctl.c:2025 +#: pg_ctl.c:2018 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayer « %s --help » pour plus d'informations.\n" -#: pg_ctl.c:2033 +#: pg_ctl.c:2026 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -552,17 +552,17 @@ msgstr "" "PostgreSQL.\n" "\n" -#: pg_ctl.c:2034 +#: pg_ctl.c:2027 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: pg_ctl.c:2035 +#: pg_ctl.c:2028 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D RÉP_DONNÉES] [-s] [-o OPTIONS]\n" -#: pg_ctl.c:2036 +#: pg_ctl.c:2029 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -571,12 +571,12 @@ msgstr "" " %s start [-D RÉP_DONNÉES] [-l NOM_FICHIER] [-W] [-t SECS] [-s]\n" " [-o OPTIONS] [-p CHEMIN] [-c]\n" -#: pg_ctl.c:2038 +#: pg_ctl.c:2031 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr " %s stop [-D RÉP_DONNÉES] [-m MODE_ARRÊT] [-W] [-t SECS] [-s]\n" -#: pg_ctl.c:2039 +#: pg_ctl.c:2032 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -585,32 +585,32 @@ msgstr "" " %s restart [-D RÉP_DONNÉES] [-m MODE_ARRÊT] [-W] [-t SECS] [-s]\n" " [-o OPTIONS] [-c]\n" -#: pg_ctl.c:2041 +#: pg_ctl.c:2034 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D RÉP_DONNÉES] [-s]\n" -#: pg_ctl.c:2042 +#: pg_ctl.c:2035 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D RÉP_DONNÉES]\n" -#: pg_ctl.c:2043 +#: pg_ctl.c:2036 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D RÉP_DONNÉES] [-W] [-t SECS] [-s]\n" -#: pg_ctl.c:2044 +#: pg_ctl.c:2037 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s reload [-D RÉP_DONNÉES] [-s]\n" -#: pg_ctl.c:2045 +#: pg_ctl.c:2038 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill NOM_SIGNAL PID\n" -#: pg_ctl.c:2047 +#: pg_ctl.c:2040 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -619,12 +619,12 @@ msgstr "" " %s register [-D RÉP_DONNÉES] [-N NOM_SERVICE] [-U NOM_UTILISATEUR] [-P MOT_DE_PASSE]\n" " [-S TYPE_DÉMARRAGE] [-e SOURCE] [-W] [-t SECS] [-s] [-o OPTIONS]\n" -#: pg_ctl.c:2049 +#: pg_ctl.c:2042 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N NOM_SERVICE]\n" -#: pg_ctl.c:2052 +#: pg_ctl.c:2045 #, c-format msgid "" "\n" @@ -633,58 +633,58 @@ msgstr "" "\n" "Options générales :\n" -#: pg_ctl.c:2053 +#: pg_ctl.c:2046 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=RÉP_DONNÉES emplacement de stockage du cluster\n" -#: pg_ctl.c:2055 +#: pg_ctl.c:2048 #, c-format msgid " -e SOURCE event source for logging when running as a service\n" msgstr "" " -e SOURCE source de l'événement pour la trace lors de\n" " l'exécution en tant que service\n" -#: pg_ctl.c:2057 +#: pg_ctl.c:2050 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr "" " -s, --silent affiche uniquement les erreurs, aucun message\n" " d'informations\n" -#: pg_ctl.c:2058 +#: pg_ctl.c:2051 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr "" " -t, --timeout=SECS durée en secondes à attendre lors de\n" " l'utilisation de l'option -w\n" -#: pg_ctl.c:2059 +#: pg_ctl.c:2052 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: pg_ctl.c:2060 +#: pg_ctl.c:2053 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait attend la fin de l'opération (par défaut)\n" -#: pg_ctl.c:2061 +#: pg_ctl.c:2054 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait n'attend pas la fin de l'opération\n" -#: pg_ctl.c:2062 +#: pg_ctl.c:2055 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: pg_ctl.c:2063 +#: pg_ctl.c:2056 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Si l'option -D est omise, la variable d'environnement PGDATA est utilisée.\n" -#: pg_ctl.c:2065 +#: pg_ctl.c:2058 #, c-format msgid "" "\n" @@ -693,24 +693,24 @@ msgstr "" "\n" "Options pour le démarrage ou le redémarrage :\n" -#: pg_ctl.c:2067 +#: pg_ctl.c:2060 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files autorise postgres à produire des fichiers core\n" -#: pg_ctl.c:2069 +#: pg_ctl.c:2062 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files non applicable à cette plateforme\n" -#: pg_ctl.c:2071 +#: pg_ctl.c:2064 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr "" " -l, --log=NOM_FICHIER écrit (ou ajoute) le journal du serveur dans\n" " NOM_FICHIER\n" -#: pg_ctl.c:2072 +#: pg_ctl.c:2065 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -720,12 +720,12 @@ msgstr "" " postgres (exécutable du serveur PostgreSQL)\n" " ou à initdb\n" -#: pg_ctl.c:2074 +#: pg_ctl.c:2067 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p CHEMIN_POSTGRES normalement pas nécessaire\n" -#: pg_ctl.c:2075 +#: pg_ctl.c:2068 #, c-format msgid "" "\n" @@ -734,14 +734,14 @@ msgstr "" "\n" "Options pour l'arrêt ou le redémarrage :\n" -#: pg_ctl.c:2076 +#: pg_ctl.c:2069 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr "" " -m, --mode=MODE MODE peut valoir « smart », « fast » ou\n" " « immediate »\n" -#: pg_ctl.c:2078 +#: pg_ctl.c:2071 #, c-format msgid "" "\n" @@ -750,24 +750,24 @@ msgstr "" "\n" "Les modes d'arrêt sont :\n" -#: pg_ctl.c:2079 +#: pg_ctl.c:2072 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart quitte après déconnexion de tous les clients\n" -#: pg_ctl.c:2080 +#: pg_ctl.c:2073 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast quitte directement, et arrête correctement (par défaut)\n" -#: pg_ctl.c:2081 +#: pg_ctl.c:2074 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr "" " immediate quitte sans arrêt complet ; entraîne une\n" " restauration au démarrage suivant\n" -#: pg_ctl.c:2083 +#: pg_ctl.c:2076 #, c-format msgid "" "\n" @@ -776,7 +776,7 @@ msgstr "" "\n" "Signaux autorisés pour kill :\n" -#: pg_ctl.c:2087 +#: pg_ctl.c:2080 #, c-format msgid "" "\n" @@ -785,35 +785,35 @@ msgstr "" "\n" "Options d'enregistrement ou de dés-enregistrement :\n" -#: pg_ctl.c:2088 +#: pg_ctl.c:2081 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr "" " -N NOM_SERVICE nom du service utilisé pour l'enregistrement du\n" " serveur PostgreSQL\n" -#: pg_ctl.c:2089 +#: pg_ctl.c:2082 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr "" " -P MOT_DE_PASSE mot de passe du compte utilisé pour\n" " l'enregistrement du serveur PostgreSQL\n" -#: pg_ctl.c:2090 +#: pg_ctl.c:2083 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr "" " -U NOM_UTILISATEUR nom de l'utilisateur du compte utilisé pour\n" " l'enregistrement du serveur PostgreSQL\n" -#: pg_ctl.c:2091 +#: pg_ctl.c:2084 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr "" " -S TYPE_DÉMARRAGE type de démarrage du service pour enregistrer le\n" " serveur PostgreSQL\n" -#: pg_ctl.c:2093 +#: pg_ctl.c:2086 #, c-format msgid "" "\n" @@ -822,19 +822,19 @@ msgstr "" "\n" "Les types de démarrage sont :\n" -#: pg_ctl.c:2094 +#: pg_ctl.c:2087 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr "" " auto démarre le service automatiquement lors du démarrage du système\n" " (par défaut)\n" -#: pg_ctl.c:2095 +#: pg_ctl.c:2088 #, c-format msgid " demand start service on demand\n" msgstr " demand démarre le service à la demande\n" -#: pg_ctl.c:2098 +#: pg_ctl.c:2091 #, c-format msgid "" "\n" @@ -843,37 +843,37 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: pg_ctl.c:2099 +#: pg_ctl.c:2092 #, c-format msgid "%s home page: <%s>\n" msgstr "page d'accueil %s : %s\n" -#: pg_ctl.c:2124 +#: pg_ctl.c:2117 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s : mode d'arrêt non reconnu « %s »\n" -#: pg_ctl.c:2153 +#: pg_ctl.c:2146 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s : signal non reconnu « %s »\n" -#: pg_ctl.c:2170 +#: pg_ctl.c:2163 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s : type de redémarrage « %s » non reconnu\n" -#: pg_ctl.c:2225 +#: pg_ctl.c:2218 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s : n'a pas déterminer le répertoire des données en utilisant la commande « %s »\n" -#: pg_ctl.c:2249 +#: pg_ctl.c:2242 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s : le fichier de contrôle semble corrompu\n" -#: pg_ctl.c:2317 +#: pg_ctl.c:2310 #, c-format msgid "" "%s: cannot be run as root\n" @@ -884,69 +884,92 @@ msgstr "" "Connectez-vous (par exemple en utilisant « su ») sous l'utilisateur (non\n" " privilégié) qui sera propriétaire du processus serveur.\n" -#: pg_ctl.c:2401 +#: pg_ctl.c:2393 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s : option -S non supportée sur cette plateforme\n" -#: pg_ctl.c:2438 +#: pg_ctl.c:2430 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" -#: pg_ctl.c:2464 +#: pg_ctl.c:2456 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s : arguments manquant pour le mode kill\n" -#: pg_ctl.c:2482 +#: pg_ctl.c:2474 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s : mode d'opération « %s » non reconnu\n" -#: pg_ctl.c:2492 +#: pg_ctl.c:2484 #, c-format msgid "%s: no operation specified\n" msgstr "%s : aucune opération indiquée\n" -#: pg_ctl.c:2513 +#: pg_ctl.c:2505 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "" "%s : aucun répertoire de bases de données indiqué et variable\n" "d'environnement PGDATA non initialisée\n" +#~ msgid "%s: could not create log file \"%s\": %s\n" +#~ msgstr "%s : n'a pas pu créer le fichier de traces « %s » : %s\n" + #~ msgid "" #~ "\n" -#~ "%s: -w option is not supported when starting a pre-9.1 server\n" +#~ "Report bugs to .\n" #~ msgstr "" #~ "\n" -#~ "%s : l'option -w n'est pas supportée lors du démarrage d'un serveur pré-9.1\n" +#~ "Rapporter les bogues à .\n" + +#~ msgid "could not change directory to \"%s\": %s" +#~ msgstr "n'a pas pu modifier le répertoire par « %s » : %s" + +#~ msgid "could not read symbolic link \"%s\"" +#~ msgstr "n'a pas pu lire le lien symbolique « %s »" + +#~ msgid "child process was terminated by signal %s" +#~ msgstr "le processus fils a été terminé par le signal %s" + +#~ msgid "server is still starting up\n" +#~ msgstr "le serveur est toujours en cours de démarrage\n" #~ msgid "" #~ "\n" -#~ "%s: -w option cannot use a relative socket directory specification\n" +#~ "%s: this data directory appears to be running a pre-existing postmaster\n" #~ msgstr "" #~ "\n" -#~ "%s : l'option -w ne peut pas utiliser un chemin relatif vers le répertoire de\n" -#~ "la socket\n" +#~ "%s : ce répertoire des données semble être utilisé par un postmaster déjà existant\n" -#~ msgid "%s: could not wait for server because of misconfiguration\n" -#~ msgstr "%s : n'a pas pu attendre le serveur à cause d'une mauvaise configuration\n" +#~ msgid "%s: could not start server: exit code was %d\n" +#~ msgstr "%s : n'a pas pu démarrer le serveur : le code de sortie est %d\n" -#~ msgid " %s start [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS\"]\n" -#~ msgstr "" -#~ " %s start [-w] [-t SECS] [-D RÉP_DONNÉES] [-s] [-l NOM_FICHIER]\n" -#~ " [-o \"OPTIONS\"]\n" +#~ msgid "%s: could not open process token: %lu\n" +#~ msgstr "%s : n'a pas pu ouvrir le jeton du processus : %lu\n" + +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help affiche cette aide et quitte\n" + +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version affiche la version et quitte\n" #~ msgid "" -#~ "(The default is to wait for shutdown, but not for start or restart.)\n" +#~ "%s is a utility to start, stop, restart, reload configuration files,\n" +#~ "report the status of a PostgreSQL server, or signal a PostgreSQL process.\n" #~ "\n" #~ msgstr "" -#~ "(Le comportement par défaut attend l'arrêt, pas le démarrage ou le\n" -#~ "redémarrage.)\n" +#~ "%s est un outil qui permet de démarrer, arrêter, redémarrer, recharger les\n" +#~ "les fichiers de configuration, rapporter le statut d'un serveur PostgreSQL\n" +#~ "ou d'envoyer un signal à un processus PostgreSQL\n" #~ "\n" +#~ msgid "could not change directory to \"%s\"" +#~ msgstr "n'a pas pu accéder au répertoire « %s »" + #~ msgid "" #~ "\n" #~ "Options for stop, restart, or promote:\n" @@ -954,56 +977,36 @@ msgstr "" #~ "\n" #~ "Options pour l'arrêt, le redémarrage ou la promotion :\n" -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "n'a pas pu accéder au répertoire « %s »" - #~ msgid "" -#~ "%s is a utility to start, stop, restart, reload configuration files,\n" -#~ "report the status of a PostgreSQL server, or signal a PostgreSQL process.\n" +#~ "(The default is to wait for shutdown, but not for start or restart.)\n" #~ "\n" #~ msgstr "" -#~ "%s est un outil qui permet de démarrer, arrêter, redémarrer, recharger les\n" -#~ "les fichiers de configuration, rapporter le statut d'un serveur PostgreSQL\n" -#~ "ou d'envoyer un signal à un processus PostgreSQL\n" +#~ "(Le comportement par défaut attend l'arrêt, pas le démarrage ou le\n" +#~ "redémarrage.)\n" #~ "\n" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version et quitte\n" - -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide et quitte\n" - -#~ msgid "%s: could not open process token: %lu\n" -#~ msgstr "%s : n'a pas pu ouvrir le jeton du processus : %lu\n" +#~ msgid " %s start [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS\"]\n" +#~ msgstr "" +#~ " %s start [-w] [-t SECS] [-D RÉP_DONNÉES] [-s] [-l NOM_FICHIER]\n" +#~ " [-o \"OPTIONS\"]\n" -#~ msgid "%s: could not start server: exit code was %d\n" -#~ msgstr "%s : n'a pas pu démarrer le serveur : le code de sortie est %d\n" +#~ msgid "%s: could not wait for server because of misconfiguration\n" +#~ msgstr "%s : n'a pas pu attendre le serveur à cause d'une mauvaise configuration\n" #~ msgid "" #~ "\n" -#~ "%s: this data directory appears to be running a pre-existing postmaster\n" +#~ "%s: -w option cannot use a relative socket directory specification\n" #~ msgstr "" #~ "\n" -#~ "%s : ce répertoire des données semble être utilisé par un postmaster déjà existant\n" - -#~ msgid "server is still starting up\n" -#~ msgstr "le serveur est toujours en cours de démarrage\n" - -#~ msgid "child process was terminated by signal %s" -#~ msgstr "le processus fils a été terminé par le signal %s" - -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "n'a pas pu lire le lien symbolique « %s »" - -#~ msgid "could not change directory to \"%s\": %s" -#~ msgstr "n'a pas pu modifier le répertoire par « %s » : %s" +#~ "%s : l'option -w ne peut pas utiliser un chemin relatif vers le répertoire de\n" +#~ "la socket\n" #~ msgid "" #~ "\n" -#~ "Report bugs to .\n" +#~ "%s: -w option is not supported when starting a pre-9.1 server\n" #~ msgstr "" #~ "\n" -#~ "Rapporter les bogues à .\n" +#~ "%s : l'option -w n'est pas supportée lors du démarrage d'un serveur pré-9.1\n" -#~ msgid "%s: could not create log file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu créer le fichier de traces « %s » : %s\n" +#~ msgid "pclose failed: %m" +#~ msgstr "échec de pclose : %m" diff --git a/src/bin/pg_ctl/po/ja.po b/src/bin/pg_ctl/po/ja.po index 480581e3b13ac..b16284c3e5963 100644 --- a/src/bin/pg_ctl/po/ja.po +++ b/src/bin/pg_ctl/po/ja.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_ctl (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: pg_ctl (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-11-05 01:43+0000\n" -"PO-Revision-Date: 2019-06-06 19:43+0900\n" +"POT-Creation-Date: 2020-08-21 15:54+0900\n" +"PO-Revision-Date: 2020-08-21 23:23+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -16,55 +16,55 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "カレントディレクトリを識別できませんでした: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "バイナリ\"%s\"は無効です" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "バイナリ\"%s\"を読み取れませんでした" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "実行する\"%s\"がありませんでした" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "ディレクトリ\"%s\"に移動できませんでした: %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を読めませんでした: %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "pcloseが失敗しました: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 msgid "out of memory" msgstr "メモリ不足です" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 ../../port/path.c:632 ../../port/path.c:670 -#: ../../port/path.c:687 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#: ../../port/path.c:632 ../../port/path.c:670 ../../port/path.c:687 #, c-format msgid "out of memory\n" msgstr "メモリ不足です\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "null ポインタを複製できません(内部エラー)。\n" @@ -104,72 +104,77 @@ msgstr "子プロセスが未知のステータス%dで終了しました" msgid "could not get current working directory: %s\n" msgstr "現在の作業ディレクトリを取得できませんでした: %s\n" -#: pg_ctl.c:262 +#: pg_ctl.c:258 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: ディレクトリ \"%s\" は存在しません\n" -#: pg_ctl.c:265 +#: pg_ctl.c:261 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: ディレクトリ\"%s\"にアクセスできませんでした: %s\n" -#: pg_ctl.c:278 +#: pg_ctl.c:274 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: ディレクトリ\"%s\"はデータベースクラスタディレクトリではありません\n" -#: pg_ctl.c:291 +#: pg_ctl.c:287 #, c-format msgid "%s: could not open PID file \"%s\": %s\n" msgstr "%s: PIDファイル\"%s\"をオープンできませんでした: %s\n" -#: pg_ctl.c:300 +#: pg_ctl.c:296 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: PIDファイル\"%s\"が空です\n" -#: pg_ctl.c:303 +#: pg_ctl.c:299 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: PIDファイル\"%s\"内に無効なデータがあります\n" -#: pg_ctl.c:464 pg_ctl.c:506 +#: pg_ctl.c:458 pg_ctl.c:500 #, c-format msgid "%s: could not start server: %s\n" msgstr "%s: サーバに接続できませんでした: %s\n" -#: pg_ctl.c:484 +#: pg_ctl.c:478 #, c-format msgid "%s: could not start server due to setsid() failure: %s\n" msgstr "%s: setsid()に失敗したためサーバに接続できませんでした: %s\n" -#: pg_ctl.c:530 +#: pg_ctl.c:548 +#, c-format +msgid "%s: could not open log file \"%s\": %s\n" +msgstr "%s: ログファイル \"%s\" をオープンできませんでした: %s\n" + +#: pg_ctl.c:565 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s: サーバの起動に失敗しました: エラーコード %lu\n" -#: pg_ctl.c:677 +#: pg_ctl.c:712 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "%s: コアファイルのサイズ制限を設定できません:固定の制限により許されていません\n" -#: pg_ctl.c:703 +#: pg_ctl.c:738 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: ファイル\"%s\"を読み取ることに失敗しました\n" -#: pg_ctl.c:708 +#: pg_ctl.c:743 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: オプションファイル\"%s\"は1行のみでなければなりません\n" -#: pg_ctl.c:750 pg_ctl.c:941 pg_ctl.c:1037 +#: pg_ctl.c:785 pg_ctl.c:975 pg_ctl.c:1071 #, c-format msgid "%s: could not send stop signal (PID: %ld): %s\n" msgstr "%s: 停止シグナルを送信できませんでした。(PID: %ld): %s\n" -#: pg_ctl.c:778 +#: pg_ctl.c:813 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -180,7 +185,7 @@ msgstr "" "にありませんでした。\n" "インストール状況を確認してください。\n" -#: pg_ctl.c:784 +#: pg_ctl.c:818 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -191,38 +196,38 @@ msgstr "" "バージョンではありませんでした。\n" "インストレーションを検査してください。\n" -#: pg_ctl.c:817 +#: pg_ctl.c:851 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: データベースシステムが初期化に失敗しました\n" -#: pg_ctl.c:832 +#: pg_ctl.c:866 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: 他のサーバが動作中の可能性がありますが、とにかくpostmasterの起動を試みます。\n" -#: pg_ctl.c:881 +#: pg_ctl.c:915 msgid "waiting for server to start..." msgstr "サーバの起動完了を待っています..." -#: pg_ctl.c:886 pg_ctl.c:991 pg_ctl.c:1083 pg_ctl.c:1213 +#: pg_ctl.c:920 pg_ctl.c:1025 pg_ctl.c:1117 pg_ctl.c:1242 msgid " done\n" msgstr "完了\n" -#: pg_ctl.c:887 +#: pg_ctl.c:921 msgid "server started\n" msgstr "サーバ起動完了\n" -#: pg_ctl.c:890 pg_ctl.c:896 pg_ctl.c:1218 +#: pg_ctl.c:924 pg_ctl.c:930 pg_ctl.c:1247 msgid " stopped waiting\n" msgstr " 待機処理が停止されました\n" -#: pg_ctl.c:891 +#: pg_ctl.c:925 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: サーバは時間内に停止しませんでした\n" -#: pg_ctl.c:897 +#: pg_ctl.c:931 #, c-format msgid "" "%s: could not start server\n" @@ -231,29 +236,29 @@ msgstr "" "%s: サーバを起動できませんでした。\n" "ログ出力を確認してください。\n" -#: pg_ctl.c:905 +#: pg_ctl.c:939 msgid "server starting\n" msgstr "サーバは起動中です。\n" -#: pg_ctl.c:926 pg_ctl.c:1013 pg_ctl.c:1104 pg_ctl.c:1143 pg_ctl.c:1242 +#: pg_ctl.c:960 pg_ctl.c:1047 pg_ctl.c:1138 pg_ctl.c:1177 pg_ctl.c:1271 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: PIDファイル\"%s\"がありません\n" -#: pg_ctl.c:927 pg_ctl.c:1015 pg_ctl.c:1105 pg_ctl.c:1144 pg_ctl.c:1243 +#: pg_ctl.c:961 pg_ctl.c:1049 pg_ctl.c:1139 pg_ctl.c:1178 pg_ctl.c:1272 msgid "Is server running?\n" msgstr "サーバが動作していますか?\n" -#: pg_ctl.c:933 +#: pg_ctl.c:967 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" msgstr "%s: サーバを停止できません。シングルユーザサーバ(PID: %ld)が動作しています。\n" -#: pg_ctl.c:948 +#: pg_ctl.c:982 msgid "server shutting down\n" msgstr "サーバの停止中です\n" -#: pg_ctl.c:963 pg_ctl.c:1052 +#: pg_ctl.c:997 pg_ctl.c:1086 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" @@ -263,20 +268,20 @@ msgstr "" "pg_stop_backup()が呼び出されるまでシャットダウンは完了しません\n" "\n" -#: pg_ctl.c:967 pg_ctl.c:1056 +#: pg_ctl.c:1001 pg_ctl.c:1090 msgid "waiting for server to shut down..." msgstr "サーバ停止処理の完了を待っています..." -#: pg_ctl.c:983 pg_ctl.c:1074 +#: pg_ctl.c:1017 pg_ctl.c:1108 msgid " failed\n" msgstr "失敗しました\n" -#: pg_ctl.c:985 pg_ctl.c:1076 +#: pg_ctl.c:1019 pg_ctl.c:1110 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: サーバは停止していません\n" -#: pg_ctl.c:987 pg_ctl.c:1078 +#: pg_ctl.c:1021 pg_ctl.c:1112 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -284,262 +289,262 @@ msgstr "" "ヒント: \"-m fast\"オプションは、セッション切断が始まるまで待機するのではなく\n" "即座にセッションを切断します。\n" -#: pg_ctl.c:993 pg_ctl.c:1084 +#: pg_ctl.c:1027 pg_ctl.c:1118 msgid "server stopped\n" msgstr "サーバは停止しました\n" -#: pg_ctl.c:1016 +#: pg_ctl.c:1050 msgid "trying to start server anyway\n" msgstr "とにかくサーバの起動を試みます\n" -#: pg_ctl.c:1025 +#: pg_ctl.c:1059 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" msgstr "%s: サーバを再起動できません。シングルユーザサーバ(PID: %ld)が動作中です。\n" -#: pg_ctl.c:1028 pg_ctl.c:1114 +#: pg_ctl.c:1062 pg_ctl.c:1148 msgid "Please terminate the single-user server and try again.\n" msgstr "シングルユーザサーバを終了させてから、再度実行してください\n" -#: pg_ctl.c:1088 +#: pg_ctl.c:1122 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" msgstr "%s: 古いサーバプロセス(PID: %ld)が動作していないようです\n" -#: pg_ctl.c:1090 +#: pg_ctl.c:1124 msgid "starting server anyway\n" msgstr "とにかくサーバを起動しています\n" -#: pg_ctl.c:1111 +#: pg_ctl.c:1145 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" msgstr "%s: サーバをリロードできません。シングルユーザサーバ(PID: %ld)が動作中です\n" -#: pg_ctl.c:1120 +#: pg_ctl.c:1154 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" msgstr "%s: リロードシグナルを送信できませんでした。(PID: %ld): %s\n" -#: pg_ctl.c:1125 +#: pg_ctl.c:1159 msgid "server signaled\n" msgstr "サーバにシグナルを送信しました\n" -#: pg_ctl.c:1150 +#: pg_ctl.c:1184 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" msgstr "%s: サーバを昇格できません; シングルユーザサーバ(PID: %ld)が動作中です\n" -#: pg_ctl.c:1158 +#: pg_ctl.c:1192 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: サーバを昇格できません; サーバはスタンバイモードではありません\n" -#: pg_ctl.c:1173 +#: pg_ctl.c:1202 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" msgstr "%s: 昇格指示ファイル\"%s\"を作成することができませんでした: %s\n" -#: pg_ctl.c:1179 +#: pg_ctl.c:1208 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" msgstr "%s: 昇格指示ファイル\"%s\"に書き出すことができませんでした: %s\n" -#: pg_ctl.c:1187 +#: pg_ctl.c:1216 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" msgstr "%s: 昇格シグナルを送信できませんでした (PID: %ld): %s\n" -#: pg_ctl.c:1190 +#: pg_ctl.c:1219 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" msgstr "%s: 昇格指示ファイル\"%s\"の削除に失敗しました: %s\n" -#: pg_ctl.c:1200 +#: pg_ctl.c:1229 msgid "waiting for server to promote..." msgstr "サーバの昇格を待っています..." -#: pg_ctl.c:1214 +#: pg_ctl.c:1243 msgid "server promoted\n" msgstr "サーバは昇格しました\n" -#: pg_ctl.c:1219 +#: pg_ctl.c:1248 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: サーバは時間内に昇格しませんでした\n" -#: pg_ctl.c:1225 +#: pg_ctl.c:1254 msgid "server promoting\n" msgstr "サーバを昇格中です\n" -#: pg_ctl.c:1249 +#: pg_ctl.c:1278 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %ld)\n" msgstr "%s: ログをローテートできません; シングルユーザサーバが動作中です (PID: %ld)\n" -#: pg_ctl.c:1259 +#: pg_ctl.c:1288 #, c-format msgid "%s: could not create log rotation signal file \"%s\": %s\n" msgstr "%s: ログローテート指示ファイル\"%s\"を作成することができませんでした: %s\n" -#: pg_ctl.c:1265 +#: pg_ctl.c:1294 #, c-format msgid "%s: could not write log rotation signal file \"%s\": %s\n" msgstr "%s: ログローテート指示ファイル\"%s\"に書き出すことができませんでした: %s\n" -#: pg_ctl.c:1273 +#: pg_ctl.c:1302 #, c-format msgid "%s: could not send log rotation signal (PID: %ld): %s\n" msgstr "%s: ログローテートシグナルを送信できませんでした (PID: %ld): %s\n" -#: pg_ctl.c:1276 +#: pg_ctl.c:1305 #, c-format msgid "%s: could not remove log rotation signal file \"%s\": %s\n" msgstr "%s: ログローテーション指示ファイル\"%s\"の削除に失敗しました: %s\n" -#: pg_ctl.c:1281 +#: pg_ctl.c:1310 msgid "server signaled to rotate log file\n" msgstr "サーバがログローテートをシグナルされました\n" -#: pg_ctl.c:1328 +#: pg_ctl.c:1357 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s: シングルユーザサーバが動作中です(PID: %ld)\n" -#: pg_ctl.c:1342 +#: pg_ctl.c:1371 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: サーバが動作中です(PID: %ld)\n" -#: pg_ctl.c:1358 +#: pg_ctl.c:1387 #, c-format msgid "%s: no server running\n" msgstr "%s: サーバが動作していません\n" -#: pg_ctl.c:1375 +#: pg_ctl.c:1404 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s: シグナル%dを送信できませんでした(PID: %ld): %s\n" -#: pg_ctl.c:1432 +#: pg_ctl.c:1435 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: 本プログラムの実行ファイルの検索に失敗しました\n" -#: pg_ctl.c:1442 +#: pg_ctl.c:1445 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: postgres の実行ファイルが見つかりません\n" -#: pg_ctl.c:1512 pg_ctl.c:1546 +#: pg_ctl.c:1515 pg_ctl.c:1549 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: サービスマネージャのオープンに失敗しました\n" -#: pg_ctl.c:1518 +#: pg_ctl.c:1521 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: サービス\\\"%s\\\"は登録済みです\n" -#: pg_ctl.c:1529 +#: pg_ctl.c:1532 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: サービス\"%s\"の登録に失敗しました: エラーコード %lu\n" -#: pg_ctl.c:1552 +#: pg_ctl.c:1555 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: サービス\"%s\"は登録されていません\n" -#: pg_ctl.c:1559 +#: pg_ctl.c:1562 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: サービス\"%s\"のオープンに失敗しました: エラーコード %lu\n" -#: pg_ctl.c:1568 +#: pg_ctl.c:1571 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: サービス\"%s\"の登録削除に失敗しました: エラーコード %lu\n" -#: pg_ctl.c:1655 +#: pg_ctl.c:1658 msgid "Waiting for server startup...\n" msgstr "サーバの起動完了を待っています...\n" -#: pg_ctl.c:1658 +#: pg_ctl.c:1661 msgid "Timed out waiting for server startup\n" msgstr "サーバの起動待機がタイムアウトしました\n" -#: pg_ctl.c:1662 +#: pg_ctl.c:1665 msgid "Server started and accepting connections\n" msgstr "サーバは起動し、接続を受け付けています\n" -#: pg_ctl.c:1717 +#: pg_ctl.c:1720 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: サービス\"%s\"の起動に失敗しました: エラーコード %lu\n" -#: pg_ctl.c:1787 +#: pg_ctl.c:1790 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" msgstr "%s: 警告: このプラットフォームでは制限付きトークンを作成できません\n" -#: pg_ctl.c:1800 +#: pg_ctl.c:1803 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: プロセストークンをオープンできませんでした: エラーコード %lu\n" -#: pg_ctl.c:1814 +#: pg_ctl.c:1817 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: SIDを割り当てられませんでした: エラーコード %lu\n" -#: pg_ctl.c:1841 +#: pg_ctl.c:1844 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: 制限付きトークンを作成できませんでした: エラーコード %lu\n" -#: pg_ctl.c:1872 +#: pg_ctl.c:1875 #, c-format msgid "%s: WARNING: could not locate all job object functions in system API\n" msgstr "%s: 警告: システムAPI内にすべてのジョブオブジェクト関数を格納できませんでした\n" -#: pg_ctl.c:1969 +#: pg_ctl.c:1972 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: 権限の LUID を取得できません: エラーコード %lu\n" -#: pg_ctl.c:1977 pg_ctl.c:1992 +#: pg_ctl.c:1980 pg_ctl.c:1995 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: トークン情報を取得できませんでした: エラーコード %lu\n" -#: pg_ctl.c:1986 +#: pg_ctl.c:1989 #, c-format msgid "%s: out of memory\n" msgstr "%s: メモリ不足です\n" -#: pg_ctl.c:2016 +#: pg_ctl.c:2019 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細は\"%s --help\"を実行してください。\n" -#: pg_ctl.c:2024 +#: pg_ctl.c:2027 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" "\n" msgstr "%sはPostgreSQLサーバの初期化、起動、停止、制御を行うユーティリティです。\n" -#: pg_ctl.c:2025 +#: pg_ctl.c:2028 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: pg_ctl.c:2026 +#: pg_ctl.c:2029 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" -#: pg_ctl.c:2027 +#: pg_ctl.c:2030 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -548,12 +553,12 @@ msgstr "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" " [-o OPTIONS] [-p PATH] [-c]\n" -#: pg_ctl.c:2029 +#: pg_ctl.c:2032 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" -#: pg_ctl.c:2030 +#: pg_ctl.c:2033 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -562,32 +567,32 @@ msgstr "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" " [-o OPTIONS] [-c]\n" -#: pg_ctl.c:2032 +#: pg_ctl.c:2035 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D DATADIR] [-s]\n" -#: pg_ctl.c:2033 +#: pg_ctl.c:2036 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D DATADIR]\n" -#: pg_ctl.c:2034 +#: pg_ctl.c:2037 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" -#: pg_ctl.c:2035 +#: pg_ctl.c:2038 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D DATADIR] [-s]\n" -#: pg_ctl.c:2036 +#: pg_ctl.c:2039 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill SIGNALNAME PID\n" -#: pg_ctl.c:2038 +#: pg_ctl.c:2041 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -596,12 +601,12 @@ msgstr "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" " [-S START-TYPE] [-e SOURCE] [-W] [-t SECS] [-s] [-o OPTIONS]\n" -#: pg_ctl.c:2040 +#: pg_ctl.c:2043 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N SERVICENAME]\n" -#: pg_ctl.c:2043 +#: pg_ctl.c:2046 #, c-format msgid "" "\n" @@ -610,54 +615,52 @@ msgstr "" "\n" "共通のオプション:\n" -#: pg_ctl.c:2044 +#: pg_ctl.c:2047 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=DATADIR データベース格納領域の場所\n" -#: pg_ctl.c:2046 +#: pg_ctl.c:2049 #, c-format msgid " -e SOURCE event source for logging when running as a service\n" msgstr " -e SOURCE サービスとして起動させたときのログのイベントソース\n" -#: pg_ctl.c:2048 +#: pg_ctl.c:2051 #, c-format msgid " -s, --silent only print errors, no informational messages\n" -msgstr "" -" -s, --silent エラーメッセージのみを表示し、情報メッセージは表示しま\n" -" せん\n" +msgstr " -s, --silent エラーメッセージのみを表示、情報メッセージは表示しない\n" -#: pg_ctl.c:2049 +#: pg_ctl.c:2052 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=SECS -wオプションを使用する時に待機する秒数\n" -#: pg_ctl.c:2050 +#: pg_ctl.c:2053 #, c-format msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version バージョン情報を表示して、終了します\n" +msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_ctl.c:2051 +#: pg_ctl.c:2054 #, c-format msgid " -w, --wait wait until operation completes (default)\n" -msgstr " -w, --wait 操作が完了するまで待機します (デフォルト)\n" +msgstr " -w, --wait 操作が完了するまで待機 (デフォルト)\n" -#: pg_ctl.c:2052 +#: pg_ctl.c:2055 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" -msgstr " -W, --no-wait 作業の完了を待ちません\n" +msgstr " -W, --no-wait 作業の完了を待たない\n" -#: pg_ctl.c:2053 +#: pg_ctl.c:2056 #, c-format msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help このヘルプを表示して、終了します\n" +msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_ctl.c:2054 +#: pg_ctl.c:2057 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "-Dオプションの省略時はPGDATA環境変数が使用されます。\n" -#: pg_ctl.c:2056 +#: pg_ctl.c:2059 #, c-format msgid "" "\n" @@ -666,22 +669,22 @@ msgstr "" "\n" "起動、再起動のオプション\n" -#: pg_ctl.c:2058 +#: pg_ctl.c:2061 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" -msgstr " -c, --core-files postgresのコアファイル生成を許可します\n" +msgstr " -c, --core-files postgresのコアファイル生成を許可\n" -#: pg_ctl.c:2060 +#: pg_ctl.c:2063 #, c-format msgid " -c, --core-files not applicable on this platform\n" -msgstr " -c, --core-files このプラットフォームでは指定できません\n" +msgstr " -c, --core-files このプラットフォームでは適用されない\n" -#: pg_ctl.c:2062 +#: pg_ctl.c:2065 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" -msgstr " -l, --log FILENAME サーバログをFILENAMEへ出力(あるいは追加)します\n" +msgstr " -l, --log FILENAME サーバログをFILENAMEへ書き込む(または追加する)\n" -#: pg_ctl.c:2063 +#: pg_ctl.c:2066 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -690,12 +693,12 @@ msgstr "" " -o, --options=OPTIONS postgres(PostgreSQLサーバ実行ファイル)または\n" " initdb に渡すコマンドラインオプション\n" -#: pg_ctl.c:2065 +#: pg_ctl.c:2068 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" -msgstr " -p PATH-TO-POSTGRES 通常は不要です\n" +msgstr " -p PATH-TO-POSTGRES 通常は不要\n" -#: pg_ctl.c:2066 +#: pg_ctl.c:2069 #, c-format msgid "" "\n" @@ -704,36 +707,36 @@ msgstr "" "\n" "停止、再起動のオプション\n" -#: pg_ctl.c:2067 +#: pg_ctl.c:2070 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" -msgstr " -m, --mode=MODE MODEは\"smart\"、\"fast\"、\"immediate\"のいずれかです\n" +msgstr " -m, --mode=MODE MODEは\"smart\"、\"fast\"、\"immediate\"のいずれか\n" -#: pg_ctl.c:2069 +#: pg_ctl.c:2072 #, c-format msgid "" "\n" "Shutdown modes are:\n" msgstr "" "\n" -"シャットダウンモードは以下の通りです:\n" +"シャットダウンモードは以下の通り:\n" -#: pg_ctl.c:2070 +#: pg_ctl.c:2073 #, c-format msgid " smart quit after all clients have disconnected\n" -msgstr " smart 全クライアントの接続切断後に停止します\n" +msgstr " smart 全クライアントの接続切断後に停止\n" -#: pg_ctl.c:2071 +#: pg_ctl.c:2074 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" -msgstr " fast 正しい手順で直ちに停止します(デフォルト)\n" +msgstr " fast 適切な手続きで直ちに停止(デフォルト)\n" -#: pg_ctl.c:2072 +#: pg_ctl.c:2075 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" -msgstr " immediate 正しい手順をスキップして停止します。再起動時にはリカバリを行います\n" +msgstr " immediate 適切な手続き抜きで停止; 再起動時にはリカバリが実行される\n" -#: pg_ctl.c:2074 +#: pg_ctl.c:2077 #, c-format msgid "" "\n" @@ -742,7 +745,7 @@ msgstr "" "\n" "killモードで利用できるシグナル名:\n" -#: pg_ctl.c:2078 +#: pg_ctl.c:2081 #, c-format msgid "" "\n" @@ -751,80 +754,85 @@ msgstr "" "\n" "登録、登録解除のオプション:\n" -#: pg_ctl.c:2079 +#: pg_ctl.c:2082 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" -msgstr " -N SERVICENAME PostgreSQLサーバを登録する際のサービス名です\n" +msgstr " -N SERVICENAME PostgreSQLサーバを登録する際のサービス名\n" -#: pg_ctl.c:2080 +#: pg_ctl.c:2083 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" -msgstr " -P PASSWORD PostgreSQLサーバを登録するためのアカウントのパスワードです\n" +msgstr " -P PASSWORD PostgreSQLサーバを登録するためのアカウントのパスワード\n" -#: pg_ctl.c:2081 +#: pg_ctl.c:2084 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" -msgstr " -U USERNAME PostgreSQLサーバを登録するためのアカウント名です\n" +msgstr " -U USERNAME PostgreSQLサーバを登録するためのアカウント名\n" -#: pg_ctl.c:2082 +#: pg_ctl.c:2085 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" -msgstr " -S START-TYPE PostgreSQLサーバを登録する際のサービス起動タイプです\n" +msgstr " -S START-TYPE PostgreSQLサーバを登録する際のサービス起動タイプ\n" -#: pg_ctl.c:2084 +#: pg_ctl.c:2087 #, c-format msgid "" "\n" "Start types are:\n" msgstr "" "\n" -"起動タイプは以下の通りです:\n" +"起動タイプは以下の通り:\n" -#: pg_ctl.c:2085 +#: pg_ctl.c:2088 #, c-format msgid " auto start service automatically during system startup (default)\n" -msgstr " auto システムの起動時にサービスを自動的に開始します(デフォルト)\n" +msgstr " auto システムの起動時にサービスを自動的に開始(デフォルト)\n" -#: pg_ctl.c:2086 +#: pg_ctl.c:2089 #, c-format msgid " demand start service on demand\n" -msgstr " demand 要求に応じてサービスを開始します\n" +msgstr " demand 要求に応じてサービスを開始\n" -#: pg_ctl.c:2089 +#: pg_ctl.c:2092 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"不具合はまで報告してください。\n" +"バグは<%s>に報告してください。\n" + +#: pg_ctl.c:2093 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" -#: pg_ctl.c:2114 +#: pg_ctl.c:2118 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: 不正なシャットダウンモード\"%s\"\n" -#: pg_ctl.c:2143 +#: pg_ctl.c:2147 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: 不正なシグナル名\"%s\"\n" -#: pg_ctl.c:2160 +#: pg_ctl.c:2164 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: 不正な起動タイプ\"%s\"\n" -#: pg_ctl.c:2215 +#: pg_ctl.c:2219 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: コマンド\"%s\"を使用するデータディレクトリを決定できませんでした\n" -#: pg_ctl.c:2240 +#: pg_ctl.c:2243 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: 制御ファイルが壊れているようです\n" -#: pg_ctl.c:2308 +#: pg_ctl.c:2311 #, c-format msgid "" "%s: cannot be run as root\n" @@ -835,50 +843,57 @@ msgstr "" "サーバプロセスの所有者となる(非特権)ユーザとして(\"su\"などを使用して)\n" "ログインしてください。\n" -#: pg_ctl.c:2392 +#: pg_ctl.c:2395 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: -Sオプションはこのプラットフォームでサポートされていません\n" -#: pg_ctl.c:2429 +#: pg_ctl.c:2432 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: コマンドライン引数が多すぎます(先頭は\"%s\")\n" -#: pg_ctl.c:2455 +#: pg_ctl.c:2458 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: killモード用の引数がありません\n" -#: pg_ctl.c:2473 +#: pg_ctl.c:2476 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: 操作モード\"%s\"は不明です\n" -#: pg_ctl.c:2483 +#: pg_ctl.c:2486 #, c-format msgid "%s: no operation specified\n" msgstr "%s: 操作モードが指定されていません\n" -#: pg_ctl.c:2504 +#: pg_ctl.c:2507 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: データベースの指定も、PGDATA環境変数の設定もありません\n" -#~ msgid "could not identify current directory: %s" -#~ msgstr "現在のディレクトリを特定できませんでした: %s" +#~ msgid "child process was terminated by signal %d" +#~ msgstr "子プロセスがシグナル%dで終了しました" -#~ msgid "could not change directory to \"%s\": %s" -#~ msgstr "ディレクトリ\"%s\"に移動できませんでした: %s" +#~ msgid "child process was terminated by signal %s" +#~ msgstr "子プロセスがシグナル%sで終了しました" + +#~ msgid "pclose failed: %s" +#~ msgstr "pcloseが失敗しました: %s" #~ msgid "could not read symbolic link \"%s\"" #~ msgstr "シンボリックリンク\"%s\"の読み取りに失敗しました" -#~ msgid "pclose failed: %s" -#~ msgstr "pcloseが失敗しました: %s" +#~ msgid "could not change directory to \"%s\": %s" +#~ msgstr "ディレクトリ\"%s\"に移動できませんでした: %s" -#~ msgid "child process was terminated by signal %s" -#~ msgstr "子プロセスがシグナル%sで終了しました" +#~ msgid "could not identify current directory: %s" +#~ msgstr "現在のディレクトリを特定できませんでした: %s" -#~ msgid "child process was terminated by signal %d" -#~ msgstr "子プロセスがシグナル%dで終了しました" +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "不具合はまで報告してください。\n" diff --git a/src/bin/pg_ctl/po/ko.po b/src/bin/pg_ctl/po/ko.po index d30b721fd5ba7..8ba592369b3a2 100644 --- a/src/bin/pg_ctl/po/ko.po +++ b/src/bin/pg_ctl/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_ctl (PostgreSQL) 12\n" +"Project-Id-Version: pg_ctl (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:14+0000\n" -"PO-Revision-Date: 2020-02-10 10:20+0900\n" +"POT-Creation-Date: 2020-10-05 20:44+0000\n" +"PO-Revision-Date: 2020-10-06 11:22+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean Team \n" "Language: ko\n" @@ -15,53 +15,53 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "현재 디렉터리를 알 수 없음: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "잘못된 바이너리 파일 \"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "\"%s\" 바이너리 파일을 읽을 수 없음" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "실행할 \"%s\" 파일을 찾을 수 없음" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "\"%s\" 이름의 디렉터리로 이동할 수 없습니다: %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "\"%s\" 심벌릭 링크를 읽을 수 없음: %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "pclose 실패: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 msgid "out of memory" msgstr "메모리 부족" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 ../../port/path.c:632 ../../port/path.c:670 -#: ../../port/path.c:687 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#: ../../port/path.c:632 ../../port/path.c:670 ../../port/path.c:687 #, c-format msgid "out of memory\n" msgstr "메모리 부족\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "null 포인터를 복제할 수 없음(내부 오류)\n" @@ -101,79 +101,79 @@ msgstr "하위 프로세스가 종료되었음, 알수 없는 상태 %d" msgid "could not get current working directory: %s\n" msgstr "현재 작업 디렉터리를 알 수 없음: %s\n" -#: pg_ctl.c:262 +#: pg_ctl.c:258 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: \"%s\" 디렉터리 없음\n" -#: pg_ctl.c:265 +#: pg_ctl.c:261 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: \"%s\" 디렉터리에 액세스할 수 없음: %s\n" -#: pg_ctl.c:278 +#: pg_ctl.c:274 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: 지정한 \"%s\" 디렉터리는 데이터베이스 클러스트 디렉터리가 아님\n" -#: pg_ctl.c:291 +#: pg_ctl.c:287 #, c-format msgid "%s: could not open PID file \"%s\": %s\n" msgstr "%s: \"%s\" PID 파일을 열 수 없음: %s\n" -#: pg_ctl.c:300 +#: pg_ctl.c:296 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: \"%s\" PID 파일에 내용이 없습니다\n" -#: pg_ctl.c:303 +#: pg_ctl.c:299 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: \"%s\" PID 파일이 비었음\n" -#: pg_ctl.c:464 pg_ctl.c:506 +#: pg_ctl.c:458 pg_ctl.c:500 #, c-format msgid "%s: could not start server: %s\n" msgstr "%s: 서버를 시작 할 수 없음: %s\n" -#: pg_ctl.c:484 +#: pg_ctl.c:478 #, c-format msgid "%s: could not start server due to setsid() failure: %s\n" msgstr "%s: setsid() 실패로 서버를 시작 할 수 없음: %s\n" -#: pg_ctl.c:536 +#: pg_ctl.c:548 #, c-format -msgid "%s: could not create log file \"%s\": %s\n" -msgstr "%s: \"%s\" 로그 파일을 만들 수 없음: %s\n" +msgid "%s: could not open log file \"%s\": %s\n" +msgstr "%s: \"%s\" 로그 파일을 열 수 없음: %s\n" -#: pg_ctl.c:551 +#: pg_ctl.c:565 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s: 서버를 시작할 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:698 +#: pg_ctl.c:712 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "" "%s: 코어 파일 크기 한도를 설정할 수 없음, 하드 디스크 용량 초과로 허용되지 않" "음\n" -#: pg_ctl.c:724 +#: pg_ctl.c:738 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: \"%s\" 파일을 읽을 수 없음\n" -#: pg_ctl.c:729 +#: pg_ctl.c:743 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: \"%s\" 환경설정파일은 반드시 한 줄을 가져야한다?\n" -#: pg_ctl.c:771 pg_ctl.c:962 pg_ctl.c:1058 +#: pg_ctl.c:785 pg_ctl.c:975 pg_ctl.c:1071 #, c-format msgid "%s: could not send stop signal (PID: %ld): %s\n" msgstr "%s: stop 시그널을 보낼 수 없음 (PID: %ld): %s\n" -#: pg_ctl.c:799 +#: pg_ctl.c:813 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -184,7 +184,7 @@ msgstr "" "\"%s\" 디렉터리 안에 없습니다.\n" "설치 상태를 확인해 주십시오.\n" -#: pg_ctl.c:805 +#: pg_ctl.c:818 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -195,38 +195,38 @@ msgstr "" "%s 버전과 같지 않습니다.\n" "설치 상태를 확인해 주십시오.\n" -#: pg_ctl.c:838 +#: pg_ctl.c:851 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: 데이터베이스 초기화 실패\n" -#: pg_ctl.c:853 +#: pg_ctl.c:866 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: 다른 서버가 가동 중인 것 같음; 어째든 서버 가동을 시도함\n" -#: pg_ctl.c:902 +#: pg_ctl.c:915 msgid "waiting for server to start..." msgstr "서버를 시작하기 위해 기다리는 중..." -#: pg_ctl.c:907 pg_ctl.c:1012 pg_ctl.c:1104 pg_ctl.c:1234 +#: pg_ctl.c:920 pg_ctl.c:1025 pg_ctl.c:1117 pg_ctl.c:1247 msgid " done\n" msgstr " 완료\n" -#: pg_ctl.c:908 +#: pg_ctl.c:921 msgid "server started\n" msgstr "서버 시작됨\n" -#: pg_ctl.c:911 pg_ctl.c:917 pg_ctl.c:1239 +#: pg_ctl.c:924 pg_ctl.c:930 pg_ctl.c:1252 msgid " stopped waiting\n" msgstr " 중지 기다리는 중\n" -#: pg_ctl.c:912 +#: pg_ctl.c:925 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: 서버가 제 시간에 시작되지 못했음\n" -#: pg_ctl.c:918 +#: pg_ctl.c:931 #, c-format msgid "" "%s: could not start server\n" @@ -235,29 +235,29 @@ msgstr "" "%s: 서버를 시작 할 수 없음\n" "로그 출력을 살펴보십시오.\n" -#: pg_ctl.c:926 +#: pg_ctl.c:939 msgid "server starting\n" msgstr "서버를 시작합니다\n" -#: pg_ctl.c:947 pg_ctl.c:1034 pg_ctl.c:1125 pg_ctl.c:1164 pg_ctl.c:1263 +#: pg_ctl.c:960 pg_ctl.c:1047 pg_ctl.c:1138 pg_ctl.c:1177 pg_ctl.c:1276 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: \"%s\" PID 파일이 없습니다\n" -#: pg_ctl.c:948 pg_ctl.c:1036 pg_ctl.c:1126 pg_ctl.c:1165 pg_ctl.c:1264 +#: pg_ctl.c:961 pg_ctl.c:1049 pg_ctl.c:1139 pg_ctl.c:1178 pg_ctl.c:1277 msgid "Is server running?\n" msgstr "서버가 실행 중입니까?\n" -#: pg_ctl.c:954 +#: pg_ctl.c:967 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" msgstr "%s: 서버 중지 실패; 단일 사용자 서버가 실행 중 (PID: %ld)\n" -#: pg_ctl.c:969 +#: pg_ctl.c:982 msgid "server shutting down\n" msgstr "서버를 멈춥니다\n" -#: pg_ctl.c:984 pg_ctl.c:1073 +#: pg_ctl.c:997 pg_ctl.c:1086 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" @@ -267,20 +267,20 @@ msgstr "" "pg_stop_backup()이 호출될 때까지 종료가 완료되지 않습니다.\n" "\n" -#: pg_ctl.c:988 pg_ctl.c:1077 +#: pg_ctl.c:1001 pg_ctl.c:1090 msgid "waiting for server to shut down..." msgstr "서버를 멈추기 위해 기다리는 중..." -#: pg_ctl.c:1004 pg_ctl.c:1095 +#: pg_ctl.c:1017 pg_ctl.c:1108 msgid " failed\n" msgstr " 실패\n" -#: pg_ctl.c:1006 pg_ctl.c:1097 +#: pg_ctl.c:1019 pg_ctl.c:1110 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: 서버를 멈추지 못했음\n" -#: pg_ctl.c:1008 pg_ctl.c:1099 +#: pg_ctl.c:1021 pg_ctl.c:1112 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -288,249 +288,249 @@ msgstr "" "힌트: \"-m fast\" 옵션을 사용하면 접속한 세션들을 즉시 정리합니다.\n" "이 옵션을 사용하지 않으면 접속한 세션들 스스로 끊을 때까지 기다립니다.\n" -#: pg_ctl.c:1014 pg_ctl.c:1105 +#: pg_ctl.c:1027 pg_ctl.c:1118 msgid "server stopped\n" msgstr "서버 멈추었음\n" -#: pg_ctl.c:1037 +#: pg_ctl.c:1050 msgid "trying to start server anyway\n" msgstr "어째든 서버를 시작해 봅니다\n" -#: pg_ctl.c:1046 +#: pg_ctl.c:1059 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" msgstr "" "%s: 서버를 다시 시작 할 수 없음; 단일사용자 서버가 실행 중임 (PID: %ld)\n" -#: pg_ctl.c:1049 pg_ctl.c:1135 +#: pg_ctl.c:1062 pg_ctl.c:1148 msgid "Please terminate the single-user server and try again.\n" msgstr "단일 사용자 서버를 멈추고 다시 시도하십시오.\n" -#: pg_ctl.c:1109 +#: pg_ctl.c:1122 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" msgstr "%s: 이전 서버 프로세스(PID: %ld)가 없어졌습니다\n" -#: pg_ctl.c:1111 +#: pg_ctl.c:1124 msgid "starting server anyway\n" msgstr "어째든 서버를 시작합니다\n" -#: pg_ctl.c:1132 +#: pg_ctl.c:1145 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" msgstr "" "%s: 서버 환경설정을 다시 불러올 수 없음; 단일 사용자 서버가 실행 중임 (PID: " "%ld)\n" -#: pg_ctl.c:1141 +#: pg_ctl.c:1154 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" msgstr "%s: reload 시그널을 보낼 수 없음 (PID: %ld): %s\n" -#: pg_ctl.c:1146 +#: pg_ctl.c:1159 msgid "server signaled\n" msgstr "서버가 시스템 시그널을 받았음\n" -#: pg_ctl.c:1171 +#: pg_ctl.c:1184 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" msgstr "%s: 운영서버 전환 실패; 단일사용자 서버가 실행 중(PID: %ld)\n" -#: pg_ctl.c:1179 +#: pg_ctl.c:1192 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: 운영서버 전환 실패; 서버가 대기 모드로 상태가 아님\n" -#: pg_ctl.c:1194 +#: pg_ctl.c:1207 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" msgstr "%s: 운영전환 시그널 파일인 \"%s\" 파일을 만들 수 없음: %s\n" -#: pg_ctl.c:1200 +#: pg_ctl.c:1213 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" msgstr "%s: 운영전환 시그널 파일인 \"%s\" 파일에 쓰기 실패: %s\n" -#: pg_ctl.c:1208 +#: pg_ctl.c:1221 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" msgstr "%s: 운영전환 시그널을 서버(PID: %ld)로 보낼 수 없음: %s\n" -#: pg_ctl.c:1211 +#: pg_ctl.c:1224 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" msgstr "%s: 운영전환 시그널 파일인 \"%s\" 파일을 지울 수 없음: %s\n" -#: pg_ctl.c:1221 +#: pg_ctl.c:1234 msgid "waiting for server to promote..." msgstr "서버를 운영 모드로 전환하는 중 ..." -#: pg_ctl.c:1235 +#: pg_ctl.c:1248 msgid "server promoted\n" msgstr "운영 모드 전환 완료\n" -#: pg_ctl.c:1240 +#: pg_ctl.c:1253 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: 서버를 제 시간에 운영 모드로 전환하지 못했음\n" -#: pg_ctl.c:1246 +#: pg_ctl.c:1259 msgid "server promoting\n" msgstr "서버를 운영 모드로 전환합니다\n" -#: pg_ctl.c:1270 +#: pg_ctl.c:1283 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %ld)\n" msgstr "" "%s: 서버 로그 파일을 바꿀 수 없음; 단일 사용자 서버가 실행 중임 (PID: %ld)\n" -#: pg_ctl.c:1280 +#: pg_ctl.c:1293 #, c-format msgid "%s: could not create log rotation signal file \"%s\": %s\n" msgstr "%s: 로그 전환 시그널 파일인 \"%s\" 파일을 만들 수 없음: %s\n" -#: pg_ctl.c:1286 +#: pg_ctl.c:1299 #, c-format msgid "%s: could not write log rotation signal file \"%s\": %s\n" msgstr "%s: 로그 전환 시그널 파일인 \"%s\" 파일에 쓰기 실패: %s\n" -#: pg_ctl.c:1294 +#: pg_ctl.c:1307 #, c-format msgid "%s: could not send log rotation signal (PID: %ld): %s\n" msgstr "%s: 로그 전환 시그널을 보낼 수 없음 (PID: %ld): %s\n" -#: pg_ctl.c:1297 +#: pg_ctl.c:1310 #, c-format msgid "%s: could not remove log rotation signal file \"%s\": %s\n" msgstr "%s: 로그 전환 시그널 파일인 \"%s\" 파일을 지울 수 없음: %s\n" -#: pg_ctl.c:1302 +#: pg_ctl.c:1315 msgid "server signaled to rotate log file\n" msgstr "서버가 로그 전환 시그널을 받았음\n" -#: pg_ctl.c:1349 +#: pg_ctl.c:1362 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s: 단일사용자 서버가 실행 중임 (PID: %ld)\n" -#: pg_ctl.c:1363 +#: pg_ctl.c:1376 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: 서버가 실행 중임 (PID: %ld)\n" -#: pg_ctl.c:1379 +#: pg_ctl.c:1392 #, c-format msgid "%s: no server running\n" msgstr "%s: 가동 중인 서버가 없음\n" -#: pg_ctl.c:1396 +#: pg_ctl.c:1409 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s: %d 시그널을 보낼 수 없음 (PID: %ld): %s\n" -#: pg_ctl.c:1453 +#: pg_ctl.c:1440 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: 실행 가능한 프로그램을 찾을 수 없습니다\n" -#: pg_ctl.c:1463 +#: pg_ctl.c:1450 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: 실행 가능한 postgres 프로그램을 찾을 수 없음\n" -#: pg_ctl.c:1533 pg_ctl.c:1567 +#: pg_ctl.c:1520 pg_ctl.c:1554 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: 서비스 관리자를 열 수 없음\n" -#: pg_ctl.c:1539 +#: pg_ctl.c:1526 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: \"%s\" 서비스가 이미 등록 되어 있음\n" -#: pg_ctl.c:1550 +#: pg_ctl.c:1537 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: \"%s\" 서비스를 등록할 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1573 +#: pg_ctl.c:1560 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: \"%s\" 서비스가 등록되어 있지 않음\n" -#: pg_ctl.c:1580 +#: pg_ctl.c:1567 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: \"%s\" 서비스를 열 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1589 +#: pg_ctl.c:1576 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: \"%s\" 서비스를 서비스 목록에서 뺄 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1676 +#: pg_ctl.c:1663 msgid "Waiting for server startup...\n" msgstr "서버를 시작하기 위해 기다리는 중...\n" -#: pg_ctl.c:1679 +#: pg_ctl.c:1666 msgid "Timed out waiting for server startup\n" msgstr "서버 시작을 기다리는 동안 시간 초과됨\n" -#: pg_ctl.c:1683 +#: pg_ctl.c:1670 msgid "Server started and accepting connections\n" msgstr "서버가 시작되었으며 연결을 허용함\n" -#: pg_ctl.c:1738 +#: pg_ctl.c:1725 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: \"%s\" 서비스를 시작할 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1808 +#: pg_ctl.c:1795 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" msgstr "%s: 경고: 이 운영체제에서 restricted token을 만들 수 없음\n" -#: pg_ctl.c:1821 +#: pg_ctl.c:1808 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: 프로세스 토큰을 열 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1835 +#: pg_ctl.c:1822 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: SID를 할당할 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1862 +#: pg_ctl.c:1849 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: restricted token을 만들 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1893 +#: pg_ctl.c:1880 #, c-format msgid "%s: WARNING: could not locate all job object functions in system API\n" msgstr "%s: 경고: 시스템 API에서 모든 job 객체 함수를 찾을 수 없음\n" -#: pg_ctl.c:1990 +#: pg_ctl.c:1977 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: 접근 권한용 LUID를 구할 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:1998 pg_ctl.c:2013 +#: pg_ctl.c:1985 pg_ctl.c:2000 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: 토큰 정보를 구할 수 없음: 오류 코드 %lu\n" -#: pg_ctl.c:2007 +#: pg_ctl.c:1994 #, c-format msgid "%s: out of memory\n" msgstr "%s: 메모리 부족\n" -#: pg_ctl.c:2037 +#: pg_ctl.c:2024 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "보다 자세한 사용법은 \"%s --help\"\n" -#: pg_ctl.c:2045 +#: pg_ctl.c:2032 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -539,17 +539,17 @@ msgstr "" "%s 프로그램은 PostgreSQL 서버를 초기화, 시작, 중지, 제어하는 도구입니다.\n" "\n" -#: pg_ctl.c:2046 +#: pg_ctl.c:2033 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: pg_ctl.c:2047 +#: pg_ctl.c:2034 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D 데이터디렉터리] [-s] [-o 옵션]\n" -#: pg_ctl.c:2048 +#: pg_ctl.c:2035 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -558,12 +558,12 @@ msgstr "" " %s start [-D 데이터디렉터리] [-l 파일이름] [-W] [-t 초] [-s]\n" " [-o 옵션] [-p 경로] [-c]\n" -#: pg_ctl.c:2050 +#: pg_ctl.c:2037 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr " %s stop [-D 데이터디렉터리] [-m 중지방법] [-W] [-t 초] [-s]\n" -#: pg_ctl.c:2051 +#: pg_ctl.c:2038 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -572,32 +572,32 @@ msgstr "" " %s restart [-D 데이터디렉터리] [-m 중지방법] [-W] [-t 초] [-s]\n" " [-o 옵션] [-c]\n" -#: pg_ctl.c:2053 +#: pg_ctl.c:2040 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D 데이터디렉터리] [-s]\n" -#: pg_ctl.c:2054 +#: pg_ctl.c:2041 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D 데이터디렉터리]\n" -#: pg_ctl.c:2055 +#: pg_ctl.c:2042 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D 데이터디렉터리] [-W] [-t 초] [-s]\n" -#: pg_ctl.c:2056 +#: pg_ctl.c:2043 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D 데이터디렉터리] [-s]\n" -#: pg_ctl.c:2057 +#: pg_ctl.c:2044 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill 시그널이름 PID\n" -#: pg_ctl.c:2059 +#: pg_ctl.c:2046 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -608,12 +608,12 @@ msgstr "" "호]\n" " [-S 시작형태] [-e SOURCE] [-w] [-t 초] [-o 옵션]\n" -#: pg_ctl.c:2061 +#: pg_ctl.c:2048 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N 서비스이름]\n" -#: pg_ctl.c:2064 +#: pg_ctl.c:2051 #, c-format msgid "" "\n" @@ -622,56 +622,56 @@ msgstr "" "\n" "일반 옵션들:\n" -#: pg_ctl.c:2065 +#: pg_ctl.c:2052 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr "" " -D, --pgdata=데이터디렉터리 데이터베이스 자료가 저장되어있는 디렉터리\n" -#: pg_ctl.c:2067 +#: pg_ctl.c:2054 #, c-format msgid "" " -e SOURCE event source for logging when running as a service\n" msgstr "" " -e SOURCE 서비스가 실행 중일때 쌓을 로그를 위한 이벤트 소스\n" -#: pg_ctl.c:2069 +#: pg_ctl.c:2056 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr "" " -s, --silent 일반적인 메시지는 보이지 않고, 오류만 보여줌\n" -#: pg_ctl.c:2070 +#: pg_ctl.c:2057 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=초 -w 옵션 사용 시 대기 시간(초)\n" -#: pg_ctl.c:2071 +#: pg_ctl.c:2058 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: pg_ctl.c:2072 +#: pg_ctl.c:2059 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait 작업이 끝날 때까지 기다림 (기본값)\n" -#: pg_ctl.c:2073 +#: pg_ctl.c:2060 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait 작업이 끝날 때까지 기다리지 않음\n" -#: pg_ctl.c:2074 +#: pg_ctl.c:2061 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: pg_ctl.c:2075 +#: pg_ctl.c:2062 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "-D 옵션을 사용하지 않으면, PGDATA 환경변수값을 사용함.\n" -#: pg_ctl.c:2077 +#: pg_ctl.c:2064 #, c-format msgid "" "\n" @@ -680,22 +680,22 @@ msgstr "" "\n" "start, restart 때 사용할 수 있는 옵션들:\n" -#: pg_ctl.c:2079 +#: pg_ctl.c:2066 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files 코어 덤프 파일을 만듬\n" -#: pg_ctl.c:2081 +#: pg_ctl.c:2068 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files 이 플랫폼에서는 사용할 수 없음\n" -#: pg_ctl.c:2083 +#: pg_ctl.c:2070 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l, --log=로그파일 서버 로그를 이 로그파일에 기록함\n" -#: pg_ctl.c:2084 +#: pg_ctl.c:2071 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -704,12 +704,12 @@ msgstr "" " -o, --options=옵션들 PostgreSQL 서버프로그램인 postgres나 initdb\n" " 명령에서 사용할 명령행 옵션들\n" -#: pg_ctl.c:2086 +#: pg_ctl.c:2073 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p PATH-TO-POSTGRES 보통은 필요치 않음\n" -#: pg_ctl.c:2087 +#: pg_ctl.c:2074 #, c-format msgid "" "\n" @@ -718,14 +718,14 @@ msgstr "" "\n" "stop, restart 때 사용 할 수 있는 옵션들:\n" -#: pg_ctl.c:2088 +#: pg_ctl.c:2075 #, c-format msgid "" " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr "" " -m, --mode=모드 모드는 \"smart\", \"fast\", \"immediate\" 중 하나\n" -#: pg_ctl.c:2090 +#: pg_ctl.c:2077 #, c-format msgid "" "\n" @@ -734,18 +734,18 @@ msgstr "" "\n" "중지방법 설명:\n" -#: pg_ctl.c:2091 +#: pg_ctl.c:2078 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart 모든 클라이언트의 연결이 끊기게 되면 중지 됨\n" -#: pg_ctl.c:2092 +#: pg_ctl.c:2079 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr "" " fast 클라이언트의 연결을 강제로 끊고 정상적으로 중지 됨 (기본값)\n" -#: pg_ctl.c:2093 +#: pg_ctl.c:2080 #, c-format msgid "" " immediate quit without complete shutdown; will lead to recovery on " @@ -753,7 +753,7 @@ msgid "" msgstr "" " immediate 그냥 무조건 중지함; 다시 시작할 때 복구 작업을 할 수도 있음\n" -#: pg_ctl.c:2095 +#: pg_ctl.c:2082 #, c-format msgid "" "\n" @@ -762,7 +762,7 @@ msgstr "" "\n" "사용할 수 있는 중지용(for kill) 시그널 이름:\n" -#: pg_ctl.c:2099 +#: pg_ctl.c:2086 #, c-format msgid "" "\n" @@ -771,28 +771,28 @@ msgstr "" "\n" "서비스 등록/제거용 옵션들:\n" -#: pg_ctl.c:2100 +#: pg_ctl.c:2087 #, c-format msgid "" " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N SERVICENAME 서비스 목록에 등록될 PostgreSQL 서비스 이름\n" -#: pg_ctl.c:2101 +#: pg_ctl.c:2088 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr " -P PASSWORD 이 서비스를 실행할 사용자의 암호\n" -#: pg_ctl.c:2102 +#: pg_ctl.c:2089 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr " -U USERNAME 이 서비스를 실행할 사용자 이름\n" -#: pg_ctl.c:2103 +#: pg_ctl.c:2090 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S 시작형태 서비스로 등록된 PostgreSQL 서버 시작 방법\n" -#: pg_ctl.c:2105 +#: pg_ctl.c:2092 #, c-format msgid "" "\n" @@ -801,52 +801,57 @@ msgstr "" "\n" "시작형태 설명:\n" -#: pg_ctl.c:2106 +#: pg_ctl.c:2093 #, c-format msgid "" " auto start service automatically during system startup (default)\n" msgstr " auto 시스템이 시작되면 자동으로 서비스가 시작됨 (초기값)\n" -#: pg_ctl.c:2107 +#: pg_ctl.c:2094 #, c-format msgid " demand start service on demand\n" msgstr " demand 수동 시작\n" -#: pg_ctl.c:2110 +#: pg_ctl.c:2097 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"오류보고: .\n" +"문제점 보고 주소: <%s>\n" -#: pg_ctl.c:2135 +#: pg_ctl.c:2098 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" + +#: pg_ctl.c:2123 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: 잘못된 중지 방법 \"%s\"\n" -#: pg_ctl.c:2164 +#: pg_ctl.c:2152 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: 잘못된 시그널 이름 \"%s\"\n" -#: pg_ctl.c:2181 +#: pg_ctl.c:2169 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: 알 수 없는 시작형태 \"%s\"\n" -#: pg_ctl.c:2236 +#: pg_ctl.c:2224 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: \"%s\" 명령에서 사용할 데이터 디렉터리를 알 수 없음\n" -#: pg_ctl.c:2261 +#: pg_ctl.c:2248 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: 컨트롤 파일이 깨졌음\n" -#: pg_ctl.c:2329 +#: pg_ctl.c:2316 #, c-format msgid "" "%s: cannot be run as root\n" @@ -857,36 +862,33 @@ msgstr "" "시스템관리자 권한이 없는, 서버프로세스의 소유주가 될 일반 사용자로\n" "로그인 해서(\"su\", \"runas\" 같은 명령 이용) 실행하십시오.\n" -#: pg_ctl.c:2413 +#: pg_ctl.c:2400 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: -S 옵션은 이 운영체제에서는 지원하지 않음\n" -#: pg_ctl.c:2450 +#: pg_ctl.c:2437 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: 너무 많은 명령행 인수들 (시작 \"%s\")\n" -#: pg_ctl.c:2476 +#: pg_ctl.c:2463 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: kill 작업에 필요한 인수가 빠졌습니다\n" -#: pg_ctl.c:2494 +#: pg_ctl.c:2481 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: 알 수 없는 작업 모드 \"%s\"\n" -#: pg_ctl.c:2504 +#: pg_ctl.c:2491 #, c-format msgid "%s: no operation specified\n" msgstr "%s: 수행할 작업을 지정하지 않았습니다\n" -#: pg_ctl.c:2525 +#: pg_ctl.c:2512 #, c-format msgid "" "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: -D 옵션도 없고, PGDATA 환경변수값도 지정되어 있지 않습니다.\n" - -#~ msgid "child process was terminated by signal %s" -#~ msgstr "%s 시그널 감지로 하위 프로세스가 종료되었음" diff --git a/src/bin/pg_ctl/po/ru.po b/src/bin/pg_ctl/po/ru.po index c0e5070609483..86fa24b9e03af 100644 --- a/src/bin/pg_ctl/po/ru.po +++ b/src/bin/pg_ctl/po/ru.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_ctl (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-05 11:03+0300\n" -"PO-Revision-Date: 2020-02-06 07:38+0300\n" +"POT-Creation-Date: 2020-09-03 11:22+0300\n" +"PO-Revision-Date: 2020-10-29 15:01+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -22,53 +22,53 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "не удалось определить текущий каталог: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "неверный исполняемый файл \"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "не удалось прочитать исполняемый файл \"%s\"" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "не удалось найти запускаемый файл \"%s\"" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "не удалось перейти в каталог \"%s\": %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "не удалось прочитать символическую ссылку \"%s\": %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "ошибка pclose: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 msgid "out of memory" msgstr "нехватка памяти" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 ../../port/path.c:632 ../../port/path.c:670 -#: ../../port/path.c:687 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#: ../../port/path.c:632 ../../port/path.c:670 ../../port/path.c:687 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" @@ -108,79 +108,79 @@ msgstr "дочерний процесс завершился с нераспоз msgid "could not get current working directory: %s\n" msgstr "не удалось определить текущий рабочий каталог: %s\n" -#: pg_ctl.c:262 +#: pg_ctl.c:258 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: каталог \"%s\" не существует\n" -#: pg_ctl.c:265 +#: pg_ctl.c:261 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: нет доступа к каталогу \"%s\": %s\n" -#: pg_ctl.c:278 +#: pg_ctl.c:274 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: каталог \"%s\" не содержит структуры кластера баз данных\n" -#: pg_ctl.c:291 +#: pg_ctl.c:287 #, c-format msgid "%s: could not open PID file \"%s\": %s\n" msgstr "%s: не удалось открыть файл PID \"%s\": %s\n" -#: pg_ctl.c:300 +#: pg_ctl.c:296 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: файл PID \"%s\" пуст\n" -#: pg_ctl.c:303 +#: pg_ctl.c:299 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: неверные данные в файле PID \"%s\"\n" -#: pg_ctl.c:464 pg_ctl.c:506 +#: pg_ctl.c:458 pg_ctl.c:500 #, c-format msgid "%s: could not start server: %s\n" msgstr "%s: не удалось запустить сервер: %s\n" -#: pg_ctl.c:484 +#: pg_ctl.c:478 #, c-format msgid "%s: could not start server due to setsid() failure: %s\n" msgstr "%s: не удалось запустить сервер из-за ошибки в setsid(): %s\n" -#: pg_ctl.c:536 +#: pg_ctl.c:548 #, c-format -msgid "%s: could not create log file \"%s\": %s\n" -msgstr "%s: не удалось создать файл журнала \"%s\": %s\n" +msgid "%s: could not open log file \"%s\": %s\n" +msgstr "%s: не удалось открыть файл журнала \"%s\": %s\n" -#: pg_ctl.c:551 +#: pg_ctl.c:565 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s: не удалось запустить сервер (код ошибки: %lu)\n" -#: pg_ctl.c:698 +#: pg_ctl.c:712 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "" "%s: не удалось ограничить размер дампа памяти; запрещено жёстким " "ограничением\n" -#: pg_ctl.c:724 +#: pg_ctl.c:738 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: не удалось прочитать файл \"%s\"\n" -#: pg_ctl.c:729 +#: pg_ctl.c:743 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: в файле параметров \"%s\" должна быть ровно одна строка\n" -#: pg_ctl.c:771 pg_ctl.c:962 pg_ctl.c:1058 +#: pg_ctl.c:785 pg_ctl.c:975 pg_ctl.c:1071 #, c-format msgid "%s: could not send stop signal (PID: %ld): %s\n" msgstr "%s: не удалось отправить сигнал остановки (PID: %ld): %s\n" -#: pg_ctl.c:799 +#: pg_ctl.c:813 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -191,51 +191,51 @@ msgstr "" "в каталоге \"%s\".\n" "Проверьте правильность установки СУБД.\n" -#: pg_ctl.c:805 +#: pg_ctl.c:818 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" "but was not the same version as %s.\n" "Check your installation.\n" msgstr "" -"Программа \"%s\" найдена в \"%s\",\n" +"Программа \"%s\" найдена программой \"%s\",\n" "но её версия отличается от версии %s.\n" "Проверьте правильность установки СУБД.\n" -#: pg_ctl.c:838 +#: pg_ctl.c:851 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: сбой при инициализации системы баз данных\n" -#: pg_ctl.c:853 +#: pg_ctl.c:866 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "" "%s: возможно, уже работает другой сервер; всё же пробуем запустить этот " "сервер\n" -#: pg_ctl.c:902 +#: pg_ctl.c:915 msgid "waiting for server to start..." msgstr "ожидание запуска сервера..." -#: pg_ctl.c:907 pg_ctl.c:1012 pg_ctl.c:1104 pg_ctl.c:1234 +#: pg_ctl.c:920 pg_ctl.c:1025 pg_ctl.c:1117 pg_ctl.c:1247 msgid " done\n" msgstr " готово\n" -#: pg_ctl.c:908 +#: pg_ctl.c:921 msgid "server started\n" msgstr "сервер запущен\n" -#: pg_ctl.c:911 pg_ctl.c:917 pg_ctl.c:1239 +#: pg_ctl.c:924 pg_ctl.c:930 pg_ctl.c:1252 msgid " stopped waiting\n" msgstr " прекращение ожидания\n" -#: pg_ctl.c:912 +#: pg_ctl.c:925 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: сервер не запустился за отведённое время\n" -#: pg_ctl.c:918 +#: pg_ctl.c:931 #, c-format msgid "" "%s: could not start server\n" @@ -244,30 +244,30 @@ msgstr "" "%s: не удалось запустить сервер\n" "Изучите протокол выполнения.\n" -#: pg_ctl.c:926 +#: pg_ctl.c:939 msgid "server starting\n" msgstr "сервер запускается\n" -#: pg_ctl.c:947 pg_ctl.c:1034 pg_ctl.c:1125 pg_ctl.c:1164 pg_ctl.c:1263 +#: pg_ctl.c:960 pg_ctl.c:1047 pg_ctl.c:1138 pg_ctl.c:1177 pg_ctl.c:1276 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: файл PID \"%s\" не существует\n" -#: pg_ctl.c:948 pg_ctl.c:1036 pg_ctl.c:1126 pg_ctl.c:1165 pg_ctl.c:1264 +#: pg_ctl.c:961 pg_ctl.c:1049 pg_ctl.c:1139 pg_ctl.c:1178 pg_ctl.c:1277 msgid "Is server running?\n" msgstr "Запущен ли сервер?\n" -#: pg_ctl.c:954 +#: pg_ctl.c:967 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" msgstr "" "%s: остановить сервер с PID %ld нельзя - он запущен в монопольном режиме\n" -#: pg_ctl.c:969 +#: pg_ctl.c:982 msgid "server shutting down\n" msgstr "сервер останавливается\n" -#: pg_ctl.c:984 pg_ctl.c:1073 +#: pg_ctl.c:997 pg_ctl.c:1086 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" @@ -277,20 +277,20 @@ msgstr "" "Выключение произойдёт только при вызове pg_stop_backup().\n" "\n" -#: pg_ctl.c:988 pg_ctl.c:1077 +#: pg_ctl.c:1001 pg_ctl.c:1090 msgid "waiting for server to shut down..." msgstr "ожидание завершения работы сервера..." -#: pg_ctl.c:1004 pg_ctl.c:1095 +#: pg_ctl.c:1017 pg_ctl.c:1108 msgid " failed\n" msgstr " ошибка\n" -#: pg_ctl.c:1006 pg_ctl.c:1097 +#: pg_ctl.c:1019 pg_ctl.c:1110 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: сервер не останавливается\n" -#: pg_ctl.c:1008 pg_ctl.c:1099 +#: pg_ctl.c:1021 pg_ctl.c:1112 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -298,255 +298,255 @@ msgstr "" "ПОДСКАЗКА: Параметр \"-m fast\" может сбросить сеансы принудительно,\n" "не дожидаясь, пока они завершатся сами.\n" -#: pg_ctl.c:1014 pg_ctl.c:1105 +#: pg_ctl.c:1027 pg_ctl.c:1118 msgid "server stopped\n" msgstr "сервер остановлен\n" -#: pg_ctl.c:1037 +#: pg_ctl.c:1050 msgid "trying to start server anyway\n" msgstr "производится попытка запуска сервера в любом случае\n" -#: pg_ctl.c:1046 +#: pg_ctl.c:1059 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" msgstr "" "%s: перезапустить сервер с PID %ld нельзя - он запущен в монопольном режиме\n" -#: pg_ctl.c:1049 pg_ctl.c:1135 +#: pg_ctl.c:1062 pg_ctl.c:1148 msgid "Please terminate the single-user server and try again.\n" msgstr "Пожалуйста, остановите его и повторите попытку.\n" -#: pg_ctl.c:1109 +#: pg_ctl.c:1122 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" msgstr "%s: похоже, что старый серверный процесс (PID: %ld) исчез\n" -#: pg_ctl.c:1111 +#: pg_ctl.c:1124 msgid "starting server anyway\n" msgstr "сервер запускается, несмотря на это\n" -#: pg_ctl.c:1132 +#: pg_ctl.c:1145 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" msgstr "" "%s: перезагрузить сервер с PID %ld нельзя - он запущен в монопольном режиме\n" -#: pg_ctl.c:1141 +#: pg_ctl.c:1154 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" msgstr "%s: не удалось отправить сигнал перезагрузки (PID: %ld): %s\n" -#: pg_ctl.c:1146 +#: pg_ctl.c:1159 msgid "server signaled\n" msgstr "сигнал отправлен серверу\n" -#: pg_ctl.c:1171 +#: pg_ctl.c:1184 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" msgstr "" "%s: повысить сервер с PID %ld нельзя - он выполняется в монопольном режиме\n" -#: pg_ctl.c:1179 +#: pg_ctl.c:1192 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: повысить сервер нельзя - он работает не в режиме резерва\n" -#: pg_ctl.c:1194 +#: pg_ctl.c:1207 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" msgstr "%s: не удалось создать файл \"%s\" с сигналом к повышению: %s\n" -#: pg_ctl.c:1200 +#: pg_ctl.c:1213 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" msgstr "%s: не удалось записать файл \"%s\" с сигналом к повышению: %s\n" -#: pg_ctl.c:1208 +#: pg_ctl.c:1221 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" msgstr "%s: не удалось отправить сигнал к повышению (PID: %ld): %s\n" -#: pg_ctl.c:1211 +#: pg_ctl.c:1224 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" msgstr "%s: ошибка при удалении файла \"%s\" с сигналом к повышению: %s\n" -#: pg_ctl.c:1221 +#: pg_ctl.c:1234 msgid "waiting for server to promote..." msgstr "ожидание повышения сервера..." -#: pg_ctl.c:1235 +#: pg_ctl.c:1248 msgid "server promoted\n" msgstr "сервер повышен\n" -#: pg_ctl.c:1240 +#: pg_ctl.c:1253 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: повышение сервера не завершилось за отведённое время\n" -#: pg_ctl.c:1246 +#: pg_ctl.c:1259 msgid "server promoting\n" msgstr "сервер повышается\n" -#: pg_ctl.c:1270 +#: pg_ctl.c:1283 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %ld)\n" msgstr "" "%s: не удалось прокрутить файл журнала; сервер работает в монопольном режиме " "(PID: %ld)\n" -#: pg_ctl.c:1280 +#: pg_ctl.c:1293 #, c-format msgid "%s: could not create log rotation signal file \"%s\": %s\n" msgstr "" "%s: не удалось создать файл \"%s\" с сигналом к прокрутке журнала: %s\n" -#: pg_ctl.c:1286 +#: pg_ctl.c:1299 #, c-format msgid "%s: could not write log rotation signal file \"%s\": %s\n" msgstr "" "%s: не удалось записать файл \"%s\" с сигналом к прокрутке журнала: %s\n" -#: pg_ctl.c:1294 +#: pg_ctl.c:1307 #, c-format msgid "%s: could not send log rotation signal (PID: %ld): %s\n" msgstr "%s: не удалось отправить сигнал к прокрутке журнала (PID: %ld): %s\n" -#: pg_ctl.c:1297 +#: pg_ctl.c:1310 #, c-format msgid "%s: could not remove log rotation signal file \"%s\": %s\n" msgstr "" "%s: ошибка при удалении файла \"%s\" с сигналом к прокрутке журнала: %s\n" -#: pg_ctl.c:1302 +#: pg_ctl.c:1315 msgid "server signaled to rotate log file\n" msgstr "сигнал для прокрутки файла журнала отправлен серверу\n" -#: pg_ctl.c:1349 +#: pg_ctl.c:1362 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s: сервер работает в монопольном режиме (PID: %ld)\n" -#: pg_ctl.c:1363 +#: pg_ctl.c:1376 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: сервер работает (PID: %ld)\n" -#: pg_ctl.c:1379 +#: pg_ctl.c:1392 #, c-format msgid "%s: no server running\n" msgstr "%s: сервер не работает\n" -#: pg_ctl.c:1396 +#: pg_ctl.c:1409 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s: не удалось отправить сигнал %d (PID: %ld): %s\n" -#: pg_ctl.c:1453 +#: pg_ctl.c:1440 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: не удалось найти свой исполняемый файл\n" -#: pg_ctl.c:1463 +#: pg_ctl.c:1450 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: не удалось найти исполняемый файл postgres\n" -#: pg_ctl.c:1533 pg_ctl.c:1567 +#: pg_ctl.c:1520 pg_ctl.c:1554 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: не удалось открыть менеджер служб\n" -#: pg_ctl.c:1539 +#: pg_ctl.c:1526 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: служба \"%s\" уже зарегистрирована\n" -#: pg_ctl.c:1550 +#: pg_ctl.c:1537 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: не удалось зарегистрировать службу \"%s\" (код ошибки: %lu)\n" -#: pg_ctl.c:1573 +#: pg_ctl.c:1560 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: служба \"%s\" не зарегистрирована\n" -#: pg_ctl.c:1580 +#: pg_ctl.c:1567 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: не удалось открыть службу \"%s\" (код ошибки: %lu)\n" -#: pg_ctl.c:1589 +#: pg_ctl.c:1576 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: ошибка при удалении службы \"%s\" (код ошибки: %lu)\n" -#: pg_ctl.c:1676 +#: pg_ctl.c:1663 msgid "Waiting for server startup...\n" msgstr "Ожидание запуска сервера...\n" -#: pg_ctl.c:1679 +#: pg_ctl.c:1666 msgid "Timed out waiting for server startup\n" msgstr "Превышено время ожидания запуска сервера\n" -#: pg_ctl.c:1683 +#: pg_ctl.c:1670 msgid "Server started and accepting connections\n" msgstr "Сервер запущен и принимает подключения\n" -#: pg_ctl.c:1738 +#: pg_ctl.c:1725 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: не удалось запустить службу \"%s\" (код ошибки: %lu)\n" -#: pg_ctl.c:1808 +#: pg_ctl.c:1795 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" msgstr "%s: ПРЕДУПРЕЖДЕНИЕ: в этой ОС нельзя создавать ограниченные маркеры\n" -#: pg_ctl.c:1821 +#: pg_ctl.c:1808 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: не удалось открыть маркер процесса (код ошибки: %lu)\n" -#: pg_ctl.c:1835 +#: pg_ctl.c:1822 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: не удалось подготовить структуры SID (код ошибки: %lu)\n" -#: pg_ctl.c:1862 +#: pg_ctl.c:1849 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: не удалось создать ограниченный маркер (код ошибки: %lu)\n" -#: pg_ctl.c:1893 +#: pg_ctl.c:1880 #, c-format msgid "%s: WARNING: could not locate all job object functions in system API\n" msgstr "" "%s: ПРЕДУПРЕЖДЕНИЕ: не удалось найти все функции для работы с задачами в " "системном API\n" -#: pg_ctl.c:1990 +#: pg_ctl.c:1977 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: не удалось получить LUID для привилегий (код ошибки: %lu)\n" -#: pg_ctl.c:1998 pg_ctl.c:2013 +#: pg_ctl.c:1985 pg_ctl.c:2000 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: не удалось получить информацию о маркере (код ошибки: %lu)\n" -#: pg_ctl.c:2007 +#: pg_ctl.c:1994 #, c-format msgid "%s: out of memory\n" msgstr "%s: нехватка памяти\n" -#: pg_ctl.c:2037 +#: pg_ctl.c:2024 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_ctl.c:2045 +#: pg_ctl.c:2032 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -556,17 +556,17 @@ msgstr "" "PostgreSQL.\n" "\n" -#: pg_ctl.c:2046 +#: pg_ctl.c:2033 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_ctl.c:2047 +#: pg_ctl.c:2034 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D КАТАЛОГ-ДАННЫХ] [-s] [-o ПАРАМЕТРЫ]\n" -#: pg_ctl.c:2048 +#: pg_ctl.c:2035 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -575,13 +575,13 @@ msgstr "" " %s start [-D КАТАЛОГ-ДАННЫХ] [-l ИМЯ-ФАЙЛА] [-W] [-t СЕК] [-s]\n" " [-o ПАРАМЕТРЫ] [-p ПУТЬ] [-c]\n" -#: pg_ctl.c:2050 +#: pg_ctl.c:2037 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr "" " %s stop [-D КАТАЛОГ-ДАННЫХ] [-m РЕЖИМ-ОСТАНОВКИ] [-W] [-t СЕК] [-s]\n" -#: pg_ctl.c:2051 +#: pg_ctl.c:2038 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -590,32 +590,32 @@ msgstr "" " %s restart [-D КАТАЛОГ-ДАННЫХ] [-m РЕЖИМ-ОСТАНОВКИ] [-W] [-t СЕК] [-s]\n" " [-o ПАРАМЕТРЫ] [-c]\n" -#: pg_ctl.c:2053 +#: pg_ctl.c:2040 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D КАТАЛОГ-ДАННЫХ] [-s]\n" -#: pg_ctl.c:2054 +#: pg_ctl.c:2041 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D КАТАЛОГ-ДАННЫХ]\n" -#: pg_ctl.c:2055 +#: pg_ctl.c:2042 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D КАТАЛОГ-ДАННЫХ] [-W] [-t СЕК] [-s]\n" -#: pg_ctl.c:2056 +#: pg_ctl.c:2043 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D КАТАЛОГ-ДАННЫХ] [-s]\n" -#: pg_ctl.c:2057 +#: pg_ctl.c:2044 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill СИГНАЛ PID\n" -#: pg_ctl.c:2059 +#: pg_ctl.c:2046 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -627,12 +627,12 @@ msgstr "" " [-S ТИП-ЗАПУСКА] [-e ИСТОЧНИК] [-W] [-t СЕК] [-s] [-o " "ПАРАМЕТРЫ]\n" -#: pg_ctl.c:2061 +#: pg_ctl.c:2048 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N ИМЯ-СЛУЖБЫ]\n" -#: pg_ctl.c:2064 +#: pg_ctl.c:2051 #, c-format msgid "" "\n" @@ -641,12 +641,12 @@ msgstr "" "\n" "Общие параметры:\n" -#: pg_ctl.c:2065 +#: pg_ctl.c:2052 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=КАТАЛОГ расположение хранилища баз данных\n" -#: pg_ctl.c:2067 +#: pg_ctl.c:2054 #, c-format msgid "" " -e SOURCE event source for logging when running as a service\n" @@ -655,45 +655,45 @@ msgstr "" "журнал,\n" " когда сервер работает в виде службы\n" -#: pg_ctl.c:2069 +#: pg_ctl.c:2056 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr "" " -s, --silent выводить только ошибки, без информационных " "сообщений\n" -#: pg_ctl.c:2070 +#: pg_ctl.c:2057 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr "" " -t, --timeout=СЕК время ожидания при использовании параметра -w\n" -#: pg_ctl.c:2071 +#: pg_ctl.c:2058 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_ctl.c:2072 +#: pg_ctl.c:2059 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait ждать завершения операции (по умолчанию)\n" -#: pg_ctl.c:2073 +#: pg_ctl.c:2060 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait не ждать завершения операции\n" -#: pg_ctl.c:2074 +#: pg_ctl.c:2061 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_ctl.c:2075 +#: pg_ctl.c:2062 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Если параметр -D опущен, используется переменная окружения PGDATA.\n" -#: pg_ctl.c:2077 +#: pg_ctl.c:2064 #, c-format msgid "" "\n" @@ -702,24 +702,24 @@ msgstr "" "\n" "Параметры запуска и перезапуска:\n" -#: pg_ctl.c:2079 +#: pg_ctl.c:2066 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files указать postgres создавать дампы памяти\n" -#: pg_ctl.c:2081 +#: pg_ctl.c:2068 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files неприменимо на этой платформе\n" -#: pg_ctl.c:2083 +#: pg_ctl.c:2070 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr "" " -l, --log=ФАЙЛ записывать (или добавлять) протокол сервера в " "ФАЙЛ.\n" -#: pg_ctl.c:2084 +#: pg_ctl.c:2071 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -729,12 +729,12 @@ msgstr "" "PostgreSQL)\n" " или initdb параметры командной строки\n" -#: pg_ctl.c:2086 +#: pg_ctl.c:2073 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p ПУТЬ-К-POSTGRES обычно не требуется\n" -#: pg_ctl.c:2087 +#: pg_ctl.c:2074 #, c-format msgid "" "\n" @@ -743,14 +743,14 @@ msgstr "" "\n" "Параметры остановки и перезапуска:\n" -#: pg_ctl.c:2088 +#: pg_ctl.c:2075 #, c-format msgid "" " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr "" " -m, --mode=РЕЖИМ может быть \"smart\", \"fast\" или \"immediate\"\n" -#: pg_ctl.c:2090 +#: pg_ctl.c:2077 #, c-format msgid "" "\n" @@ -759,17 +759,17 @@ msgstr "" "\n" "Режимы остановки:\n" -#: pg_ctl.c:2091 +#: pg_ctl.c:2078 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart закончить работу после отключения всех клиентов\n" -#: pg_ctl.c:2092 +#: pg_ctl.c:2079 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast закончить сразу, в штатном режиме (по умолчанию)\n" -#: pg_ctl.c:2093 +#: pg_ctl.c:2080 #, c-format msgid "" " immediate quit without complete shutdown; will lead to recovery on " @@ -778,7 +778,7 @@ msgstr "" " immediate закончить немедленно, в экстренном режиме; влечёт за собой\n" " восстановление при перезапуске\n" -#: pg_ctl.c:2095 +#: pg_ctl.c:2082 #, c-format msgid "" "\n" @@ -787,7 +787,7 @@ msgstr "" "\n" "Разрешённые сигналы для команды kill:\n" -#: pg_ctl.c:2099 +#: pg_ctl.c:2086 #, c-format msgid "" "\n" @@ -796,30 +796,30 @@ msgstr "" "\n" "Параметры для регистрации и удаления:\n" -#: pg_ctl.c:2100 +#: pg_ctl.c:2087 #, c-format msgid "" " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N ИМЯ-СЛУЖБЫ имя службы для регистрации сервера PostgreSQL\n" -#: pg_ctl.c:2101 +#: pg_ctl.c:2088 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr "" " -P ПАРОЛЬ пароль учётной записи для регистрации сервера PostgreSQL\n" -#: pg_ctl.c:2102 +#: pg_ctl.c:2089 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr "" " -U ПОЛЬЗОВАТЕЛЬ имя пользователя для регистрации сервера PostgreSQL\n" -#: pg_ctl.c:2103 +#: pg_ctl.c:2090 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S ТИП-ЗАПУСКА тип запуска службы сервера PostgreSQL\n" -#: pg_ctl.c:2105 +#: pg_ctl.c:2092 #, c-format msgid "" "\n" @@ -828,7 +828,7 @@ msgstr "" "\n" "Типы запуска:\n" -#: pg_ctl.c:2106 +#: pg_ctl.c:2093 #, c-format msgid "" " auto start service automatically during system startup (default)\n" @@ -836,46 +836,51 @@ msgstr "" " auto запускать службу автоматически при старте системы (по " "умолчанию)\n" -#: pg_ctl.c:2107 +#: pg_ctl.c:2094 #, c-format msgid " demand start service on demand\n" msgstr " demand запускать службу по требованию\n" -#: pg_ctl.c:2110 +#: pg_ctl.c:2097 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Об ошибках сообщайте по адресу .\n" +"Об ошибках сообщайте по адресу <%s>.\n" + +#: pg_ctl.c:2098 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" -#: pg_ctl.c:2135 +#: pg_ctl.c:2123 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: неизвестный режим остановки \"%s\"\n" -#: pg_ctl.c:2164 +#: pg_ctl.c:2152 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: нераспознанное имя сигнала \"%s\"\n" -#: pg_ctl.c:2181 +#: pg_ctl.c:2169 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: нераспознанный тип запуска \"%s\"\n" -#: pg_ctl.c:2236 +#: pg_ctl.c:2224 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: не удалось определить каталог данных с помощью команды \"%s\"\n" -#: pg_ctl.c:2261 +#: pg_ctl.c:2248 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: управляющий файл, по-видимому, испорчен\n" -#: pg_ctl.c:2329 +#: pg_ctl.c:2316 #, c-format msgid "" "%s: cannot be run as root\n" @@ -886,32 +891,32 @@ msgstr "" "Пожалуйста, переключитесь на обычного пользователя (например,\n" "используя \"su\"), который будет запускать серверный процесс.\n" -#: pg_ctl.c:2413 +#: pg_ctl.c:2400 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: параметр -S не поддерживается в этой ОС\n" -#: pg_ctl.c:2450 +#: pg_ctl.c:2437 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: слишком много аргументов командной строки (первый: \"%s\")\n" -#: pg_ctl.c:2476 +#: pg_ctl.c:2463 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: отсутствуют аргументы для режима kill\n" -#: pg_ctl.c:2494 +#: pg_ctl.c:2481 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: нераспознанный режим работы \"%s\"\n" -#: pg_ctl.c:2504 +#: pg_ctl.c:2491 #, c-format msgid "%s: no operation specified\n" msgstr "%s: команда не указана\n" -#: pg_ctl.c:2525 +#: pg_ctl.c:2512 #, c-format msgid "" "%s: no database directory specified and environment variable PGDATA unset\n" @@ -919,6 +924,16 @@ msgstr "" "%s: каталог баз данных не указан и переменная окружения PGDATA не " "установлена\n" +#~ msgid "%s: could not create log file \"%s\": %s\n" +#~ msgstr "%s: не удалось создать файл журнала \"%s\": %s\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Об ошибках сообщайте по адресу .\n" + #~ msgid "child process was terminated by signal %s" #~ msgstr "дочерний процесс завершён по сигналу %s" diff --git a/src/bin/pg_ctl/po/uk.po b/src/bin/pg_ctl/po/uk.po index a12f7e88d2fb1..34c19e3a28824 100644 --- a/src/bin/pg_ctl/po/uk.po +++ b/src/bin/pg_ctl/po/uk.po @@ -1,64 +1,69 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2018-12-04 20:35+0100\n" -"PO-Revision-Date: 2019-05-12 22:09\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:15+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" "Last-Translator: pasha_golub\n" "Language-Team: Ukrainian\n" -"Language: uk_UA\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_11_STABLE/src/bin/pg_ctl/po/pg_ctl.pot\n" +"X-Crowdin-File: /DEV_13/pg_ctl.pot\n" +"X-Crowdin-File-ID: 498\n" -#: ../../common/exec.c:127 ../../common/exec.c:241 ../../common/exec.c:284 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format -msgid "could not identify current directory: %s" -msgstr "не вдалося визначити поточний каталог: %s" +msgid "could not identify current directory: %m" +msgstr "не вдалося визначити поточний каталог: %m" -#: ../../common/exec.c:146 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "невірний бінарний файл \"%s\"" -#: ../../common/exec.c:195 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "неможливо прочитати бінарний файл \"%s\"" -#: ../../common/exec.c:202 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "неможливо знайти \"%s\" для виконання" -#: ../../common/exec.c:257 ../../common/exec.c:293 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format -msgid "could not change directory to \"%s\": %s" -msgstr "неможливо змінити директорію на \"%s\": %s" +msgid "could not change directory to \"%s\": %m" +msgstr "не вдалося змінити каталог на \"%s\": %m" -#: ../../common/exec.c:272 +#: ../../common/exec.c:287 #, c-format -msgid "could not read symbolic link \"%s\"" -msgstr "неможливо прочитати символічне посилання \"%s\"" +msgid "could not read symbolic link \"%s\": %m" +msgstr "не можливо прочитати символічне послання \"%s\": %m" -#: ../../common/exec.c:523 +#: ../../common/exec.c:410 #, c-format -msgid "pclose failed: %s" -msgstr "помилка pclose: %s" +msgid "pclose failed: %m" +msgstr "помилка pclose: %m" + +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +msgid "out of memory" +msgstr "недостатньо пам'яті" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 ../../port/path.c:632 ../../port/path.c:670 -#: ../../port/path.c:687 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#: ../../port/path.c:632 ../../port/path.c:670 ../../port/path.c:687 #, c-format msgid "out of memory\n" msgstr "недостатньо пам'яті\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" @@ -78,22 +83,17 @@ msgstr "команду не знайдено" msgid "child process exited with exit code %d" msgstr "дочірній процес завершився з кодом виходу %d" -#: ../../common/wait_error.c:61 +#: ../../common/wait_error.c:62 #, c-format msgid "child process was terminated by exception 0x%X" msgstr "дочірній процес перервано через помилку 0х%X" -#: ../../common/wait_error.c:71 -#, c-format -msgid "child process was terminated by signal %s" -msgstr "дочірній процес перервано через сигнал %s" - -#: ../../common/wait_error.c:75 +#: ../../common/wait_error.c:66 #, c-format -msgid "child process was terminated by signal %d" -msgstr "дочірній процес перервано через сигнал %d" +msgid "child process was terminated by signal %d: %s" +msgstr "дочірній процес перервано через сигнал %d: %s" -#: ../../common/wait_error.c:80 +#: ../../common/wait_error.c:72 #, c-format msgid "child process exited with unrecognized status %d" msgstr "дочірній процес завершився з невизнаним статусом %d" @@ -103,62 +103,77 @@ msgstr "дочірній процес завершився з невизнани msgid "could not get current working directory: %s\n" msgstr "не вдалося отримати поточний робочий каталог: %s\n" -#: pg_ctl.c:257 +#: pg_ctl.c:258 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: директорія \"%s\" не існує\n" -#: pg_ctl.c:260 +#: pg_ctl.c:261 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: немає доступу до каталогу \"%s\": %s\n" -#: pg_ctl.c:273 +#: pg_ctl.c:274 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: каталог \"%s\" не є каталогом кластера бази даних\n" -#: pg_ctl.c:286 +#: pg_ctl.c:287 #, c-format msgid "%s: could not open PID file \"%s\": %s\n" msgstr "%s: не вдалося відкрити файл PID \"%s\": %s\n" -#: pg_ctl.c:295 +#: pg_ctl.c:296 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: файл PID \"%s\" пустий\n" -#: pg_ctl.c:298 +#: pg_ctl.c:299 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: невірні дані у файлі PID \"%s\"\n" -#: pg_ctl.c:459 pg_ctl.c:487 +#: pg_ctl.c:458 pg_ctl.c:500 #, c-format msgid "%s: could not start server: %s\n" msgstr "%s: не вдалося запустити сервер: %s\n" -#: pg_ctl.c:511 +#: pg_ctl.c:478 +#, c-format +msgid "%s: could not start server due to setsid() failure: %s\n" +msgstr "%s: не вдалося запустити сервер через помилку setsid(): %s\n" + +#: pg_ctl.c:548 +#, c-format +msgid "%s: could not open log file \"%s\": %s\n" +msgstr "%s: не вдалося відкрити файл журналу \"%s\": %s\n" + +#: pg_ctl.c:565 #, c-format msgid "%s: could not start server: error code %lu\n" msgstr "%s: не вдалося запустити сервер: код помилки %lu\n" -#: pg_ctl.c:658 +#: pg_ctl.c:712 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "%s: не вдалося встановити обмеження на розмір файлу; заборонено жорстким лімітом\n" -#: pg_ctl.c:684 +#: pg_ctl.c:738 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: не вдалося прочитати файл \"%s\"\n" -#: pg_ctl.c:689 +#: pg_ctl.c:743 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: файл параметрів \"%s\" повинен містити рівно один рядок\n" -#: pg_ctl.c:735 +#: pg_ctl.c:785 pg_ctl.c:975 pg_ctl.c:1071 +#, c-format +msgid "%s: could not send stop signal (PID: %ld): %s\n" +msgstr "%s: не вдалося надіслати стоп-сигнал (PID: %ld): %s\n" + +#: pg_ctl.c:813 #, c-format msgid "The program \"%s\" is needed by %s but was not found in the\n" "same directory as \"%s\".\n" @@ -166,7 +181,7 @@ msgid "The program \"%s\" is needed by %s but was not found in the\n" msgstr "Програма \"%s\" потрібна для %s, але не знайдена в тому ж каталозі, що й \"%s\".\n" "Перевірте вашу установку.\n" -#: pg_ctl.c:741 +#: pg_ctl.c:818 #, c-format msgid "The program \"%s\" was found by \"%s\"\n" "but was not the same version as %s.\n" @@ -174,573 +189,607 @@ msgid "The program \"%s\" was found by \"%s\"\n" msgstr "Програма \"%s\" була знайдена \"%s\", але не була тієї ж версії, що %s.\n" "Перевірте вашу установку.\n" -#: pg_ctl.c:774 +#: pg_ctl.c:851 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: не вдалося виконати ініціалізацію системи бази даних\n" -#: pg_ctl.c:789 +#: pg_ctl.c:866 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: мабуть, інший сервер вже працює; у будь-якому разі спробуємо запустити сервер\n" -#: pg_ctl.c:827 +#: pg_ctl.c:915 msgid "waiting for server to start..." msgstr "очікується запуск серверу..." -#: pg_ctl.c:832 pg_ctl.c:937 pg_ctl.c:1029 pg_ctl.c:1159 +#: pg_ctl.c:920 pg_ctl.c:1025 pg_ctl.c:1117 pg_ctl.c:1247 msgid " done\n" msgstr " готово\n" -#: pg_ctl.c:833 +#: pg_ctl.c:921 msgid "server started\n" msgstr "сервер запущено\n" -#: pg_ctl.c:836 pg_ctl.c:842 pg_ctl.c:1164 +#: pg_ctl.c:924 pg_ctl.c:930 pg_ctl.c:1252 msgid " stopped waiting\n" msgstr " очікування припинено\n" -#: pg_ctl.c:837 +#: pg_ctl.c:925 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: сервер не було запущено вчасно\n" -#: pg_ctl.c:843 +#: pg_ctl.c:931 #, c-format msgid "%s: could not start server\n" "Examine the log output.\n" msgstr "%s: неможливо запустити сервер\n" "Передивіться протокол виконання.\n" -#: pg_ctl.c:851 +#: pg_ctl.c:939 msgid "server starting\n" msgstr "запуск серверу\n" -#: pg_ctl.c:872 pg_ctl.c:959 pg_ctl.c:1050 pg_ctl.c:1089 +#: pg_ctl.c:960 pg_ctl.c:1047 pg_ctl.c:1138 pg_ctl.c:1177 pg_ctl.c:1276 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: файл PID \"%s\" не існує\n" -#: pg_ctl.c:873 pg_ctl.c:961 pg_ctl.c:1051 pg_ctl.c:1090 +#: pg_ctl.c:961 pg_ctl.c:1049 pg_ctl.c:1139 pg_ctl.c:1178 pg_ctl.c:1277 msgid "Is server running?\n" msgstr "Сервер працює?\n" -#: pg_ctl.c:879 +#: pg_ctl.c:967 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" msgstr "%s: не можливо зупинити сервер; сервер запущений в режимі single-user (PID: %ld)\n" -#: pg_ctl.c:887 pg_ctl.c:983 -#, c-format -msgid "%s: could not send stop signal (PID: %ld): %s\n" -msgstr "%s: не вдалося надіслати стоп-сигнал (PID: %ld): %s\n" - -#: pg_ctl.c:894 +#: pg_ctl.c:982 msgid "server shutting down\n" msgstr "сервер зупиняється\n" -#: pg_ctl.c:909 pg_ctl.c:998 +#: pg_ctl.c:997 pg_ctl.c:1086 msgid "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n\n" msgstr "ПОПЕРЕДЖЕННЯ: режим онлайн копіювання активний\n" "Зупинку не буде завершено поки не буде викликано pg_stop_backup().\n\n" -#: pg_ctl.c:913 pg_ctl.c:1002 +#: pg_ctl.c:1001 pg_ctl.c:1090 msgid "waiting for server to shut down..." msgstr "очікується зупинка серверу..." -#: pg_ctl.c:929 pg_ctl.c:1020 +#: pg_ctl.c:1017 pg_ctl.c:1108 msgid " failed\n" msgstr " помилка\n" -#: pg_ctl.c:931 pg_ctl.c:1022 +#: pg_ctl.c:1019 pg_ctl.c:1110 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: сервер не зупинено\n" -#: pg_ctl.c:933 pg_ctl.c:1024 +#: pg_ctl.c:1021 pg_ctl.c:1112 msgid "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" msgstr "ПІДКАЗКА: Режим \"-m fast\" закриває сесії відразу, не чекаючи на відключення ініційовані сесіями.\n" -#: pg_ctl.c:939 pg_ctl.c:1030 +#: pg_ctl.c:1027 pg_ctl.c:1118 msgid "server stopped\n" msgstr "сервер зупинено\n" -#: pg_ctl.c:962 +#: pg_ctl.c:1050 msgid "trying to start server anyway\n" msgstr "спроба запуску серверу в будь-якому разі\n" -#: pg_ctl.c:971 +#: pg_ctl.c:1059 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" msgstr "%s: не можливо перезапустити сервер; сервер запущений в режимі single-user (PID: %ld)\n" -#: pg_ctl.c:974 pg_ctl.c:1060 +#: pg_ctl.c:1062 pg_ctl.c:1148 msgid "Please terminate the single-user server and try again.\n" msgstr "Будь ласка, припиніть однокористувацький сервер та спробуйте ще раз.\n" -#: pg_ctl.c:1034 +#: pg_ctl.c:1122 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" msgstr "%s: старий серверний процес (PID: %ld), здається, зник\n" -#: pg_ctl.c:1036 +#: pg_ctl.c:1124 msgid "starting server anyway\n" msgstr "запуск серверу в будь-якому разі\n" -#: pg_ctl.c:1057 +#: pg_ctl.c:1145 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" msgstr "%s: неможливо перезавантажити сервер; сервер запущено в однокористувацькому режимі (PID: %ld)\n" -#: pg_ctl.c:1066 +#: pg_ctl.c:1154 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" msgstr "%s: не можливо надіслати сигнал перезавантаження (PID: %ld): %s\n" -#: pg_ctl.c:1071 +#: pg_ctl.c:1159 msgid "server signaled\n" msgstr "серверу надіслано сигнал\n" -#: pg_ctl.c:1096 +#: pg_ctl.c:1184 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" msgstr "%s: неможливо підвищити сервер; сервер запущено в режимі single-user (PID: %ld)\n" -#: pg_ctl.c:1104 +#: pg_ctl.c:1192 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: неможливо підвищити сервер; сервер запущено не в режимі резерву\n" -#: pg_ctl.c:1119 +#: pg_ctl.c:1207 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" msgstr "%s: неможливо створити файл \"%s\" із сигналом для підвищення: %s\n" -#: pg_ctl.c:1125 +#: pg_ctl.c:1213 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" msgstr "%s: неможливо записати файл \"%s\" із сигналом для підвищення: %s\n" -#: pg_ctl.c:1133 +#: pg_ctl.c:1221 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" msgstr "%s: неможливо надіслати сигнал підвищення (PID: %ld): %s\n" -#: pg_ctl.c:1136 +#: pg_ctl.c:1224 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" msgstr "%s: неможливо видалити файл \"%s\" із сигналом для підвищення: %s\n" -#: pg_ctl.c:1146 +#: pg_ctl.c:1234 msgid "waiting for server to promote..." msgstr "очікується підвищення серверу..." -#: pg_ctl.c:1160 +#: pg_ctl.c:1248 msgid "server promoted\n" msgstr "сервер підвищено\n" -#: pg_ctl.c:1165 +#: pg_ctl.c:1253 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: сервер не було підвищено вчасно\n" -#: pg_ctl.c:1171 +#: pg_ctl.c:1259 msgid "server promoting\n" msgstr "сервер підвищується\n" -#: pg_ctl.c:1218 +#: pg_ctl.c:1283 +#, c-format +msgid "%s: cannot rotate log file; single-user server is running (PID: %ld)\n" +msgstr "%s: не можливо розвернути файл журналу; сервер працює в режимі одного користувача (PID: %ld)\n" + +#: pg_ctl.c:1293 +#, c-format +msgid "%s: could not create log rotation signal file \"%s\": %s\n" +msgstr "%s: не вдалося створити файл сигналу розвороту журналу \"%s\": %s\n" + +#: pg_ctl.c:1299 +#, c-format +msgid "%s: could not write log rotation signal file \"%s\": %s\n" +msgstr "%s: не вдалося записати у файл сигналу розвороту журналу \"%s\": %s\n" + +#: pg_ctl.c:1307 +#, c-format +msgid "%s: could not send log rotation signal (PID: %ld): %s\n" +msgstr "%s: не вдалося надіслати сигнал розвороту журналу (PID: %ld): %s\n" + +#: pg_ctl.c:1310 +#, c-format +msgid "%s: could not remove log rotation signal file \"%s\": %s\n" +msgstr "%s: не вдалося видалити файл сигналу розвороту журналу \"%s\": %s\n" + +#: pg_ctl.c:1315 +msgid "server signaled to rotate log file\n" +msgstr "серверу надіслано сигнал для розворот файлу журналу\n" + +#: pg_ctl.c:1362 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s: однокористувацький сервер працює (PID: %ld)\n" -#: pg_ctl.c:1232 +#: pg_ctl.c:1376 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: сервер працює (PID: %ld)\n" -#: pg_ctl.c:1248 +#: pg_ctl.c:1392 #, c-format msgid "%s: no server running\n" msgstr "%s: сервер не працює \n" -#: pg_ctl.c:1265 +#: pg_ctl.c:1409 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s: не вдалося надіслати сигнал %d (PID: %ld): %s\n" -#: pg_ctl.c:1322 +#: pg_ctl.c:1440 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: не вдалося знайти ехе файл власної програми\n" -#: pg_ctl.c:1332 +#: pg_ctl.c:1450 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: не вдалося знайти виконану програму postgres\n" -#: pg_ctl.c:1402 pg_ctl.c:1436 +#: pg_ctl.c:1520 pg_ctl.c:1554 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: не вдалося відкрити менеджер служб\n" -#: pg_ctl.c:1408 +#: pg_ctl.c:1526 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: служба \"%s\" вже зареєстрована \n" -#: pg_ctl.c:1419 +#: pg_ctl.c:1537 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: не вдалося зареєструвати службу \"%s\": код помилки %lu\n" -#: pg_ctl.c:1442 +#: pg_ctl.c:1560 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: служба \"%s\" не зареєстрована \n" -#: pg_ctl.c:1449 +#: pg_ctl.c:1567 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: не вдалося відкрити службу \"%s\": код помилки %lu\n" -#: pg_ctl.c:1458 +#: pg_ctl.c:1576 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: не вдалося видалити службу \"%s\": код помилки %lu\n" -#: pg_ctl.c:1545 +#: pg_ctl.c:1663 msgid "Waiting for server startup...\n" msgstr "Очікування запуску сервера...\n" -#: pg_ctl.c:1548 +#: pg_ctl.c:1666 msgid "Timed out waiting for server startup\n" msgstr "Перевищено час очікування запуску сервера\n" -#: pg_ctl.c:1552 +#: pg_ctl.c:1670 msgid "Server started and accepting connections\n" msgstr "Сервер запущений і приймає з'єднання\n" -#: pg_ctl.c:1607 +#: pg_ctl.c:1725 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: не вдалося почати службу \"%s\": код помилки %lu\n" -#: pg_ctl.c:1677 +#: pg_ctl.c:1795 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" msgstr "%s: УВАГА: не вдалося створити обмежені токени на цій платформі\n" -#: pg_ctl.c:1690 +#: pg_ctl.c:1808 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: не вдалося відкрити токен процесу: код помилки %lu\n" -#: pg_ctl.c:1704 +#: pg_ctl.c:1822 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: не вдалося виділити SID: код помилки %lu\n" -#: pg_ctl.c:1731 +#: pg_ctl.c:1849 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: не вдалося створити обмежений токен: код помилки %lu\n" -#: pg_ctl.c:1762 +#: pg_ctl.c:1880 #, c-format msgid "%s: WARNING: could not locate all job object functions in system API\n" msgstr "%s: ПОПЕРЕДЖЕННЯ: не вдалося знайти усі робочі функції у системному API для завдань\n" -#: pg_ctl.c:1859 +#: pg_ctl.c:1977 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: не вдалося отримати LUIDs для прав: код помилки %lu\n" -#: pg_ctl.c:1867 pg_ctl.c:1881 +#: pg_ctl.c:1985 pg_ctl.c:2000 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: не вдалося отримати інформацію токену: код помилки %lu\n" -#: pg_ctl.c:1875 +#: pg_ctl.c:1994 #, c-format msgid "%s: out of memory\n" msgstr "%s: бракує пам'яті\n" -#: pg_ctl.c:1905 +#: pg_ctl.c:2024 #, c-format msgid "Try \"%s --help\" for more information.\n" -msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" -#: pg_ctl.c:1913 +#: pg_ctl.c:2032 #, c-format msgid "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n\n" msgstr "%s - це утиліта для ініціалізації, запуску, зупинки і контролю серверу PostgreSQL.\n\n" -#: pg_ctl.c:1914 +#: pg_ctl.c:2033 #, c-format msgid "Usage:\n" msgstr "Використання:\n" -#: pg_ctl.c:1915 +#: pg_ctl.c:2034 #, c-format -msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" -msgstr " %s init[db] [-D КАТАЛОГ-ДАНИХ] [-s] [-o ПАРАМЕТРИ]\n" +msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" +msgstr " %s init[db] [-D КАТАЛОГ-ДАНИХ] [-s] [-o ПАРАМЕТРИ]\n" -#: pg_ctl.c:1916 +#: pg_ctl.c:2035 #, c-format -msgid " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" -" [-o OPTIONS] [-p PATH] [-c]\n" -msgstr " %s start [-D КАТАЛОГ-ДАНИХ] [-l ІМ'Я-ФАЙЛУ] [-W] [-t СЕК] [-s]\n" -" [-o ПАРАМЕТРИ] [-p ШЛЯХ] [-c]\n" +msgid " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" +" [-o OPTIONS] [-p PATH] [-c]\n" +msgstr " %s start [-D КАТАЛОГ-ДАНИХ] [-l ІМ'Я-ФАЙЛ] [-W] [-t СЕК] [-s]\n" +" [-o ПАРАМЕТРИ] [-p ШЛЯХ] [-c]\n" -#: pg_ctl.c:1918 +#: pg_ctl.c:2037 #, c-format -msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" -msgstr " %s stop [-D КАТАЛОГ-ДАНИХ] [-m РЕЖИМ-ЗУПИНКИ] [-W] [-t СЕК] [-s]\n" +msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" +msgstr " %s stop [-D КАТАЛОГ-ДАНИХ] [-m РЕЖИМ-ЗУПИНКИ] [-W] [-t СЕК] [-s]\n" -#: pg_ctl.c:1919 +#: pg_ctl.c:2038 #, c-format -msgid " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" -" [-o OPTIONS] [-c]\n" -msgstr " %s restart [-D КАТАЛОГ-ДАНИХ] [-m -РЕЖИМ-ЗУПИНКИ] [-W] [-t СЕК] [-s]\n" -" [-o ПАРАМЕТРИ] [-c]\n" +msgid " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" +" [-o OPTIONS] [-c]\n" +msgstr " %s restart [-D КАТАЛОГ-ДАНИХ] [-m РЕЖИМ-ЗУПИНКИ] [-W] [-t СЕК] [-s]\n" +" [-o ПАРАМЕТРИ] [-c]\n" -#: pg_ctl.c:1921 +#: pg_ctl.c:2040 #, c-format -msgid " %s reload [-D DATADIR] [-s]\n" +msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D КАТАЛОГ-ДАНИХ] [-s]\n" -#: pg_ctl.c:1922 +#: pg_ctl.c:2041 #, c-format -msgid " %s status [-D DATADIR]\n" -msgstr " %s status [-D КАТАЛОГ-ДАНИХ]\n" +msgid " %s status [-D DATADIR]\n" +msgstr " %s status [-D DATADIR]\n" -#: pg_ctl.c:1923 +#: pg_ctl.c:2042 #, c-format -msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" +msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D КАТАЛОГ-ДАНИХ] [-W] [-t СЕК] [-s]\n" -#: pg_ctl.c:1924 +#: pg_ctl.c:2043 +#, c-format +msgid " %s logrotate [-D DATADIR] [-s]\n" +msgstr " %s logrotate [-D DATADIR] [-s]\n" + +#: pg_ctl.c:2044 #, c-format -msgid " %s kill SIGNALNAME PID\n" -msgstr " %s kill ІМ'Я-СИГНАЛУ PID\n" +msgid " %s kill SIGNALNAME PID\n" +msgstr " %s kill ІМ'Я-СИГНАЛУ PID\n" -#: pg_ctl.c:1926 +#: pg_ctl.c:2046 #, c-format -msgid " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" -" [-S START-TYPE] [-e SOURCE] [-W] [-t SECS] [-s] [-o OPTIONS]\n" +msgid " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" +" [-S START-TYPE] [-e SOURCE] [-W] [-t SECS] [-s] [-o OPTIONS]\n" msgstr " %s register [-D КАТАЛОГ-ДАНИХ] [-N ІМ'Я-СЛУЖБИ] [-U ІМ'Я-КОРИСТУВАЧА] [-P ПАРОЛЬ]\n" -" [-S ТИП-ЗАПУСКУ] [-e ДЖЕРЕЛО] [-W] [-t СЕК][-s] [-o ПАРАМЕТРИ]\n" +" [-S ТИП-ЗАПУСКУ] [-e ДЖЕРЕЛО] [-W] [-t СЕК] [-s] [-o ПАРАМЕТРИ]\n" -#: pg_ctl.c:1928 +#: pg_ctl.c:2048 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N ІМ'Я-СЛУЖБИ]\n" -#: pg_ctl.c:1931 +#: pg_ctl.c:2051 #, c-format msgid "\n" "Common options:\n" msgstr "\n" "Загальні параметри:\n" -#: pg_ctl.c:1932 +#: pg_ctl.c:2052 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=КАТАЛОГ-ДАНИХ розташування простору зберігання бази даних\n" -#: pg_ctl.c:1934 +#: pg_ctl.c:2054 #, c-format msgid " -e SOURCE event source for logging when running as a service\n" msgstr " -e ДЖЕРЕЛО джерело подій для протоколу при запуску в якості послуги\n" -#: pg_ctl.c:1936 +#: pg_ctl.c:2056 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent виводити лише помилки, без інформаційних повідомлень\n" -#: pg_ctl.c:1937 +#: pg_ctl.c:2057 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=СЕК час очікування при використанні -w параметра\n" -#: pg_ctl.c:1938 +#: pg_ctl.c:2058 #, c-format msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version вивести інформацію про версію і вийти\n" +msgstr " -V, --version вивести інформацію про версію і вийти\n" -#: pg_ctl.c:1939 +#: pg_ctl.c:2059 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait чекати завершення операції (за замовчуванням)\n" -#: pg_ctl.c:1940 +#: pg_ctl.c:2060 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait не чекати завершення операції\n" -#: pg_ctl.c:1941 +#: pg_ctl.c:2061 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показати цю довідку потім вийти\n" -#: pg_ctl.c:1942 +#: pg_ctl.c:2062 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Якщо -D параметр пропущено, використовувати змінну середовища PGDATA.\n" -#: pg_ctl.c:1944 +#: pg_ctl.c:2064 #, c-format msgid "\n" "Options for start or restart:\n" msgstr "\n" "Параметри запуску або перезапуску:\n" -#: pg_ctl.c:1946 +#: pg_ctl.c:2066 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files дозволяти postgres створювати дампи пам'яті\n" -#: pg_ctl.c:1948 +#: pg_ctl.c:2068 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files недопустимо цією платформою\n" -#: pg_ctl.c:1950 +#: pg_ctl.c:2070 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l, --log=ФАЙЛ записувати (або додавати) протокол служби до ФАЙЛ\n" -#: pg_ctl.c:1951 +#: pg_ctl.c:2071 #, c-format msgid " -o, --options=OPTIONS command line options to pass to postgres\n" " (PostgreSQL server executable) or initdb\n" msgstr " -o, --options=ПАРАМЕТРИ параметри командного рядку для PostgreSQL або initdb\n" -#: pg_ctl.c:1953 +#: pg_ctl.c:2073 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p ШЛЯХ-ДО-СЕРВЕРУ зазвичай зайвий\n" -#: pg_ctl.c:1954 +#: pg_ctl.c:2074 #, c-format msgid "\n" "Options for stop or restart:\n" msgstr "\n" "Параметри припинення або перезапуску:\n" -#: pg_ctl.c:1955 +#: pg_ctl.c:2075 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=РЕЖИМ РЕЖИМ може бути \"smart\", \"fast\", або \"immediate\"\n" -#: pg_ctl.c:1957 +#: pg_ctl.c:2077 #, c-format msgid "\n" "Shutdown modes are:\n" msgstr "\n" "Режими зупинки:\n" -#: pg_ctl.c:1958 +#: pg_ctl.c:2078 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart вийти після від'єднання усіх клієнтів\n" -#: pg_ctl.c:1959 +#: pg_ctl.c:2079 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast вийти негайно з коректним вимкненням (за замовченням)\n" -#: pg_ctl.c:1960 +#: pg_ctl.c:2080 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr " immediate вийти негайно без повної процедури. Приведе до відновлення під час перезапуску\n" -#: pg_ctl.c:1962 +#: pg_ctl.c:2082 #, c-format msgid "\n" "Allowed signal names for kill:\n" msgstr "\n" "Дозволенні сигнали для команди kill:\n" -#: pg_ctl.c:1966 +#: pg_ctl.c:2086 #, c-format msgid "\n" "Options for register and unregister:\n" msgstr "\n" "Параметри для реєстрації і видалення: \n" -#: pg_ctl.c:1967 +#: pg_ctl.c:2087 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N ІМ'Я-СЛУЖБИ ім'я служби під яким зареєструвати сервер PostgreSQL\n" -#: pg_ctl.c:1968 +#: pg_ctl.c:2088 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr " -P ПАРОЛЬ пароль облікового запису для реєстрації серверу PostgreSQL\n" -#: pg_ctl.c:1969 +#: pg_ctl.c:2089 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr " -U КОРИСТУВАЧ ім'я користувача під яким зареєструвати сервер PostgreSQL\n" -#: pg_ctl.c:1970 +#: pg_ctl.c:2090 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S ТИП-ЗАПУСКУ тип запуску служби для реєстрації серверу PostgreSQL\n" -#: pg_ctl.c:1972 +#: pg_ctl.c:2092 #, c-format msgid "\n" "Start types are:\n" msgstr "\n" "Типи запуску:\n" -#: pg_ctl.c:1973 +#: pg_ctl.c:2093 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr " auto запускати сервер автоматично під час запуску системи (за замовчуванням)\n" -#: pg_ctl.c:1974 +#: pg_ctl.c:2094 #, c-format msgid " demand start service on demand\n" msgstr " demand запускати сервер за потреби\n" -#: pg_ctl.c:1977 +#: pg_ctl.c:2097 #, c-format msgid "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "\n" -"Про помилки повідомляйте .\n" +"Повідомляти про помилки на <%s>.\n" -#: pg_ctl.c:2002 +#: pg_ctl.c:2098 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: pg_ctl.c:2123 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: невідомий режим завершення \"%s\"\n" -#: pg_ctl.c:2031 +#: pg_ctl.c:2152 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: невідомий сигнал \"%s\"\n" -#: pg_ctl.c:2048 +#: pg_ctl.c:2169 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: невідомий тип запуску \"%s\"\n" -#: pg_ctl.c:2103 +#: pg_ctl.c:2224 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: неможливо визначити каталог даних за допомогою команди \"%s\"\n" -#: pg_ctl.c:2128 +#: pg_ctl.c:2248 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: контрольний файл видається пошкодженим\n" -#: pg_ctl.c:2199 +#: pg_ctl.c:2316 #, c-format msgid "%s: cannot be run as root\n" "Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" @@ -749,33 +798,40 @@ msgstr "%s: не може бути запущеним від ім'я супер- " Будь ласка увійдіть (використовуючи наприклад, \"su\") як (непривілейований) користувач який буде мати\n" "свій серверний процес. \n" -#: pg_ctl.c:2283 +#: pg_ctl.c:2400 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: параметр -S не підтримується цією платформою\n" -#: pg_ctl.c:2320 +#: pg_ctl.c:2437 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: забагато аргументів у командному рядку (перший \"%s\")\n" -#: pg_ctl.c:2344 +#: pg_ctl.c:2463 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: відсутні аргументи для режиму kill\n" -#: pg_ctl.c:2362 +#: pg_ctl.c:2481 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: невідомий режим роботи \"%s\"\n" -#: pg_ctl.c:2372 +#: pg_ctl.c:2491 #, c-format msgid "%s: no operation specified\n" msgstr "%s: команда не вказана\n" -#: pg_ctl.c:2393 +#: pg_ctl.c:2512 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: не вказано каталог даних і змінна середовища PGDATA не встановлена\n" +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Про помилки повідомляйте на .\n" + diff --git a/src/bin/pg_dump/nls.mk b/src/bin/pg_dump/nls.mk index 2a6fd597cb133..6276fd443b171 100644 --- a/src/bin/pg_dump/nls.mk +++ b/src/bin/pg_dump/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_dump/nls.mk CATALOG_NAME = pg_dump -AVAIL_LANGUAGES = cs de es fr he it ja ko pl pt_BR ru sv tr zh_CN +AVAIL_LANGUAGES = cs de el es fr he it ja ko pl pt_BR ru sv tr uk zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \ pg_backup_archiver.c pg_backup_db.c pg_backup_custom.c \ pg_backup_null.c pg_backup_tar.c \ diff --git a/src/bin/pg_dump/po/cs.po b/src/bin/pg_dump/po/cs.po index e494920bb437c..ca7d2b84f15c2 100644 --- a/src/bin/pg_dump/po/cs.po +++ b/src/bin/pg_dump/po/cs.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_dump-cs (PostgreSQL 9.3)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:14+0000\n" -"PO-Revision-Date: 2019-09-27 19:57+0200\n" +"POT-Creation-Date: 2020-10-31 16:16+0000\n" +"PO-Revision-Date: 2020-11-01 01:00+0100\n" "Last-Translator: Tomas Vondra \n" "Language-Team: Czech \n" "Language: cs\n" @@ -16,69 +16,69 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "chyba " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "varování: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "nelze získat aktuální adresář: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "neplatný binární soubor\"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "nelze číst binární soubor \"%s\"" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "nelze najít soubor \"%s\" ke spuštění" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "nelze změnit adresář na \"%s\" : %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "nelze přečíst symbolický odkaz \"%s\": %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "volání pclose selhalo: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 msgid "out of memory" msgstr "nedostatek paměti" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "nedostatek paměti\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "nelze duplikovat null pointer (interní chyba)\n" @@ -113,212 +113,212 @@ msgstr "potomek byl ukončen signálem %d: %s" msgid "child process exited with unrecognized status %d" msgstr "potomek skončil s nerozponaným stavem %d" -#: common.c:123 +#: common.c:121 #, c-format msgid "reading extensions" msgstr "čtu rozšíření" -#: common.c:127 +#: common.c:125 #, c-format msgid "identifying extension members" msgstr "hledám položky rozšíření (extenze)" -#: common.c:130 +#: common.c:128 #, c-format msgid "reading schemas" msgstr "čtu schémata" -#: common.c:140 +#: common.c:138 #, c-format msgid "reading user-defined tables" msgstr "čtu uživatelem definované tabulky" -#: common.c:147 +#: common.c:145 #, c-format msgid "reading user-defined functions" msgstr "čtu uživatelem definované funkce" -#: common.c:152 +#: common.c:150 #, c-format msgid "reading user-defined types" msgstr "čtu uživatelem definované typy" -#: common.c:157 +#: common.c:155 #, c-format msgid "reading procedural languages" msgstr "čtu procedurální jazyky" -#: common.c:160 +#: common.c:158 #, c-format msgid "reading user-defined aggregate functions" msgstr "čtu uživatelem definované agregátní funkce" -#: common.c:163 +#: common.c:161 #, c-format msgid "reading user-defined operators" msgstr "čtu uživatelem definované operátory" -#: common.c:167 +#: common.c:165 #, c-format msgid "reading user-defined access methods" msgstr "čtu uživatelem definované přístupové metody" -#: common.c:170 +#: common.c:168 #, c-format msgid "reading user-defined operator classes" msgstr "čtu uživatelem definované třídy operátorů" -#: common.c:173 +#: common.c:171 #, c-format msgid "reading user-defined operator families" msgstr "čtu uživatelem definované rodiny operátorů" -#: common.c:176 +#: common.c:174 #, c-format msgid "reading user-defined text search parsers" msgstr "čtu uživatelem definované fulltextové parsery" -#: common.c:179 +#: common.c:177 #, c-format msgid "reading user-defined text search templates" msgstr "čtu uživatelem definované fulltextové šablony" -#: common.c:182 +#: common.c:180 #, c-format msgid "reading user-defined text search dictionaries" msgstr "čtu uživatelem definované fulltextové slovníky" -#: common.c:185 +#: common.c:183 #, c-format msgid "reading user-defined text search configurations" msgstr "čtu uživatelské fulltextového konfigurace" -#: common.c:188 +#: common.c:186 #, c-format msgid "reading user-defined foreign-data wrappers" msgstr "čtu uživatelem definované foreign-data wrappery" -#: common.c:191 +#: common.c:189 #, c-format msgid "reading user-defined foreign servers" msgstr "čtu uživatelem definované foreign servery" -#: common.c:194 +#: common.c:192 #, c-format msgid "reading default privileges" msgstr "čtu implicitní přístupová práva" -#: common.c:197 +#: common.c:195 #, c-format msgid "reading user-defined collations" msgstr "čtu uživatelem definované collations" -#: common.c:201 +#: common.c:199 #, c-format msgid "reading user-defined conversions" msgstr "čtu uživatelem definované konverze" -#: common.c:204 +#: common.c:202 #, c-format msgid "reading type casts" msgstr "čtu přetypování" -#: common.c:207 +#: common.c:205 #, c-format msgid "reading transforms" msgstr "čtu transformace" -#: common.c:210 +#: common.c:208 #, c-format msgid "reading table inheritance information" msgstr "čtu informace dědičnosti tabulky" -#: common.c:213 +#: common.c:211 #, c-format msgid "reading event triggers" msgstr "čtu event triggery" -#: common.c:217 +#: common.c:215 #, c-format msgid "finding extension tables" msgstr "hledám tabulky pro rozšíření" -#: common.c:221 +#: common.c:219 #, c-format msgid "finding inheritance relationships" msgstr "hledám informace o dědičnosti" -#: common.c:224 +#: common.c:222 #, c-format msgid "reading column info for interesting tables" msgstr "čtu informace o sloupcích pro tabulky" -#: common.c:227 +#: common.c:225 #, c-format msgid "flagging inherited columns in subtables" msgstr "označuji zděděné sloupce v pod-tabulkách" -#: common.c:230 +#: common.c:228 #, c-format msgid "reading indexes" msgstr "čtu indexy" -#: common.c:233 +#: common.c:231 #, c-format msgid "flagging indexes in partitioned tables" msgstr "označuji indexy na partitionovaných tabulkách" -#: common.c:236 +#: common.c:234 #, c-format msgid "reading extended statistics" msgstr "čtu rozšířené statistiky" -#: common.c:239 +#: common.c:237 #, c-format msgid "reading constraints" msgstr "čtu omezení" -#: common.c:242 +#: common.c:240 #, c-format msgid "reading triggers" msgstr "čtu triggery" -#: common.c:245 +#: common.c:243 #, c-format msgid "reading rewrite rules" msgstr "čtu přepisovací pravidla" -#: common.c:248 +#: common.c:246 #, c-format msgid "reading policies" msgstr "čtu přístupové politiky" -#: common.c:251 +#: common.c:249 #, c-format msgid "reading publications" msgstr "čtu publikace" -#: common.c:254 +#: common.c:252 #, c-format msgid "reading publication membership" msgstr "čtu členství v publikacích" -#: common.c:257 +#: common.c:255 #, c-format msgid "reading subscriptions" msgstr "čtu subskripce" -#: common.c:1023 +#: common.c:1025 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "selhala kontrola, rodičovské OID %u tabulky \"%s\" (OID %u) nenalez" -#: common.c:1065 +#: common.c:1067 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "nemohu zpracovat numerické pole \"%s\": příliš mnoho čísel" -#: common.c:1080 +#: common.c:1082 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "nemohu zpracovat numerické pole \"%s\": neplatný znak v čísle" @@ -328,74 +328,74 @@ msgstr "nemohu zpracovat numerické pole \"%s\": neplatný znak v čísle" msgid "invalid compression code: %d" msgstr "neplatný kompresní kód: %d" -#: compress_io.c:134 compress_io.c:170 compress_io.c:188 compress_io.c:508 -#: compress_io.c:551 +#: compress_io.c:134 compress_io.c:170 compress_io.c:188 compress_io.c:504 +#: compress_io.c:547 #, c-format msgid "not built with zlib support" msgstr "nezkompilováno s podporou zlib" -#: compress_io.c:237 compress_io.c:336 +#: compress_io.c:236 compress_io.c:333 #, c-format msgid "could not initialize compression library: %s" msgstr "nelze inicializovat kompresní knihovnu: %s" -#: compress_io.c:257 +#: compress_io.c:256 #, c-format msgid "could not close compression stream: %s" msgstr "nelze uzavřít kompresní stream: %s" -#: compress_io.c:274 +#: compress_io.c:273 #, c-format msgid "could not compress data: %s" msgstr "nelze komprimovat data: %s" -#: compress_io.c:352 compress_io.c:367 +#: compress_io.c:349 compress_io.c:364 #, c-format msgid "could not uncompress data: %s" msgstr "nelze dekomprimovat data: %s" -#: compress_io.c:374 +#: compress_io.c:371 #, c-format msgid "could not close compression library: %s" msgstr "nelze uzavřít kompresní knihovnu: %s" -#: compress_io.c:588 compress_io.c:625 pg_backup_tar.c:555 pg_backup_tar.c:558 +#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:557 pg_backup_tar.c:560 #, c-format msgid "could not read from input file: %s" msgstr "nelze číst vstupní soubor: %s" -#: compress_io.c:627 pg_backup_custom.c:578 pg_backup_directory.c:539 -#: pg_backup_tar.c:795 pg_backup_tar.c:818 +#: compress_io.c:623 pg_backup_custom.c:646 pg_backup_directory.c:552 +#: pg_backup_tar.c:793 pg_backup_tar.c:816 #, c-format msgid "could not read from input file: end of file" msgstr "nelze číst vstupní soubor: end of file" -#: parallel.c:263 +#: parallel.c:254 #, c-format msgid "WSAStartup failed: %d" msgstr "WSAStartup selhal: %d" -#: parallel.c:968 +#: parallel.c:964 #, c-format msgid "could not create communication channels: %m" msgstr "nelze vytvořit komunikační kanály: %m" -#: parallel.c:1031 +#: parallel.c:1021 #, c-format msgid "could not create worker process: %m" msgstr "nelze vytvořit pracovní proces: %m" -#: parallel.c:1160 +#: parallel.c:1151 #, c-format msgid "unrecognized command received from master: \"%s\"" msgstr "nerozpoznaný příkaz obdržen od mastera: %s" -#: parallel.c:1203 parallel.c:1441 +#: parallel.c:1194 parallel.c:1432 #, c-format msgid "invalid message received from worker: \"%s\"" msgstr "z pracovního procesu dorazila neplatná zpráva: \"%s\"" -#: parallel.c:1335 +#: parallel.c:1326 #, c-format msgid "" "could not obtain lock on relation \"%s\"\n" @@ -404,167 +404,167 @@ msgstr "" "nelze získat zámek na relaci \"%s\"\n" "Toto obvykle znamená že někdo si vyžádal ACCESS EXCLUSIVE zámek na tabulce poté co rodičovský pg_dump proces získal výchozí ACCESS SHARE zámek na dané tabulce." -#: parallel.c:1424 +#: parallel.c:1415 #, c-format msgid "a worker process died unexpectedly" msgstr "pracovní proces neočekávaně selhal" -#: parallel.c:1546 parallel.c:1662 +#: parallel.c:1537 parallel.c:1655 #, c-format msgid "could not write to the communication channel: %m" msgstr "nelze zapsat do komunikačního kanálu: %m" -#: parallel.c:1623 +#: parallel.c:1614 #, c-format msgid "select() failed: %m" msgstr "select() selhalo: %m" -#: parallel.c:1746 +#: parallel.c:1739 #, c-format msgid "pgpipe: could not create socket: error code %d" msgstr "pgpipe: nelze vytvořit soket: chybový kód %d" -#: parallel.c:1757 +#: parallel.c:1750 #, c-format msgid "pgpipe: could not bind: error code %d" msgstr "pgpipe: nelze provést bind: chybový kód %d" -#: parallel.c:1764 +#: parallel.c:1757 #, c-format msgid "pgpipe: could not listen: error code %d" msgstr "pgpipe: nelze poslouchat: chybový kód %d" -#: parallel.c:1771 +#: parallel.c:1764 #, c-format msgid "pgpipe: getsockname() failed: error code %d" msgstr "pgpipe: getsockname() selhal: chybový kód %d" -#: parallel.c:1782 +#: parallel.c:1775 #, c-format msgid "pgpipe: could not create second socket: error code %d" msgstr "pgpipe: nelze vytvořit druhý soket: chybový kód %d" -#: parallel.c:1791 +#: parallel.c:1784 #, c-format msgid "pgpipe: could not connect socket: error code %d" msgstr "pgpipe: nelze se připojit k soketu: chybový kód %d" -#: parallel.c:1800 +#: parallel.c:1793 #, c-format msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: nelze přijmout spojení: chybový kód %d" -#: pg_backup_archiver.c:272 pg_backup_archiver.c:1595 +#: pg_backup_archiver.c:277 pg_backup_archiver.c:1587 #, c-format msgid "could not close output file: %m" msgstr "nelze zavřít výstupní soubor: %m" -#: pg_backup_archiver.c:316 pg_backup_archiver.c:320 +#: pg_backup_archiver.c:321 pg_backup_archiver.c:325 #, c-format msgid "archive items not in correct section order" msgstr "archivované položky v nesprávném pořadí sekcí" -#: pg_backup_archiver.c:326 +#: pg_backup_archiver.c:331 #, c-format msgid "unexpected section code %d" msgstr "neočekávaný kód sekce %d" -#: pg_backup_archiver.c:363 +#: pg_backup_archiver.c:368 #, c-format msgid "parallel restore is not supported with this archive file format" msgstr "paralelní obnova není pro tento formát archivu podporována" -#: pg_backup_archiver.c:367 +#: pg_backup_archiver.c:372 #, c-format msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump" msgstr "paralelní obnova není podporována s archivy z pre-8.0 verzí pg_dump" -#: pg_backup_archiver.c:385 +#: pg_backup_archiver.c:390 #, c-format msgid "cannot restore from compressed archive (compression not supported in this installation)" msgstr "nelze obnovit z komprimovaného archivu (není nastavena podpora komprese)" -#: pg_backup_archiver.c:402 +#: pg_backup_archiver.c:407 #, c-format msgid "connecting to database for restore" msgstr "navazováno spojení s databází pro obnovu" -#: pg_backup_archiver.c:404 +#: pg_backup_archiver.c:409 #, c-format msgid "direct database connections are not supported in pre-1.3 archives" msgstr "přímé spojení s databází nejsou podporovány v archivech před verzí 1.3" -#: pg_backup_archiver.c:449 +#: pg_backup_archiver.c:452 #, c-format msgid "implied data-only restore" msgstr "předpokládána pouze obnova dat" -#: pg_backup_archiver.c:515 +#: pg_backup_archiver.c:518 #, c-format msgid "dropping %s %s" msgstr "odstraňuji %s %s" -#: pg_backup_archiver.c:610 +#: pg_backup_archiver.c:613 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "nelze zjistit kam přidat IF EXISTS v příkazu \"%s\"" -#: pg_backup_archiver.c:766 pg_backup_archiver.c:768 +#: pg_backup_archiver.c:769 pg_backup_archiver.c:771 #, c-format msgid "warning from original dump file: %s" msgstr "varování z originálního dump souboru: %s" -#: pg_backup_archiver.c:783 +#: pg_backup_archiver.c:786 #, c-format msgid "creating %s \"%s.%s\"" msgstr "vytvářím %s \"%s.%s\"" -#: pg_backup_archiver.c:786 +#: pg_backup_archiver.c:789 #, c-format msgid "creating %s \"%s\"" msgstr "vytvářím %s \"%s\"" -#: pg_backup_archiver.c:843 +#: pg_backup_archiver.c:839 #, c-format msgid "connecting to new database \"%s\"" msgstr "připojuji se k nové databázi \"%s\"" -#: pg_backup_archiver.c:871 +#: pg_backup_archiver.c:866 #, c-format msgid "processing %s" msgstr "zpracovávám %s" -#: pg_backup_archiver.c:891 +#: pg_backup_archiver.c:886 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "zpracovávám data pro tabulku \"%s.%s\"" -#: pg_backup_archiver.c:953 +#: pg_backup_archiver.c:948 #, c-format msgid "executing %s %s" msgstr "vykonávám %s %s" -#: pg_backup_archiver.c:992 +#: pg_backup_archiver.c:987 #, c-format msgid "disabling triggers for %s" msgstr "vypínám triggery pro %s" -#: pg_backup_archiver.c:1018 +#: pg_backup_archiver.c:1013 #, c-format msgid "enabling triggers for %s" msgstr "zapínám triggery pro %s" -#: pg_backup_archiver.c:1046 +#: pg_backup_archiver.c:1041 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" msgstr "interní chyba -- WriteData není možno volat mimo kontext rutiny DataDumper" -#: pg_backup_archiver.c:1231 +#: pg_backup_archiver.c:1224 #, c-format msgid "large-object output not supported in chosen format" msgstr "\"large object\" výstup není podporován ve vybraném formátu" -#: pg_backup_archiver.c:1289 +#: pg_backup_archiver.c:1282 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" @@ -572,55 +572,55 @@ msgstr[0] "obnoven %d large objekt" msgstr[1] "obnoveny %d large objekty" msgstr[2] "obnoveny %d large objektů" -#: pg_backup_archiver.c:1310 pg_backup_tar.c:738 +#: pg_backup_archiver.c:1303 pg_backup_tar.c:736 #, c-format msgid "restoring large object with OID %u" msgstr "obnovován \"large object\" s OID %u" -#: pg_backup_archiver.c:1322 +#: pg_backup_archiver.c:1315 #, c-format msgid "could not create large object %u: %s" msgstr "nelze vytvořit \"large object\" %u: %s" -#: pg_backup_archiver.c:1327 pg_dump.c:3471 +#: pg_backup_archiver.c:1320 pg_dump.c:3555 #, c-format msgid "could not open large object %u: %s" msgstr "nelze otevřít \"large object\" %u:%s" -#: pg_backup_archiver.c:1384 +#: pg_backup_archiver.c:1377 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "nelze otevřít TOC soubor \"%s\": %m" -#: pg_backup_archiver.c:1424 +#: pg_backup_archiver.c:1417 #, c-format msgid "line ignored: %s" msgstr "řádka ignorována: %s" -#: pg_backup_archiver.c:1431 +#: pg_backup_archiver.c:1424 #, c-format msgid "could not find entry for ID %d" msgstr "nelze najít záznam ID %d" -#: pg_backup_archiver.c:1452 pg_backup_directory.c:222 -#: pg_backup_directory.c:587 +#: pg_backup_archiver.c:1445 pg_backup_directory.c:222 +#: pg_backup_directory.c:598 #, c-format msgid "could not close TOC file: %m" msgstr "nelze zavřít TOC soubor: %m" -#: pg_backup_archiver.c:1567 pg_backup_custom.c:159 pg_backup_directory.c:332 -#: pg_backup_directory.c:574 pg_backup_directory.c:637 -#: pg_backup_directory.c:656 pg_dumpall.c:485 +#: pg_backup_archiver.c:1559 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_directory.c:585 pg_backup_directory.c:648 +#: pg_backup_directory.c:667 pg_dumpall.c:484 #, c-format msgid "could not open output file \"%s\": %m" msgstr "nelze otevřít výstupní soubor \"%s\": %m" -#: pg_backup_archiver.c:1569 pg_backup_custom.c:165 +#: pg_backup_archiver.c:1561 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "nelze otevřít výstupní soubor: %m" -#: pg_backup_archiver.c:1662 +#: pg_backup_archiver.c:1654 #, c-format msgid "wrote %lu byte of large object data (result = %lu)" msgid_plural "wrote %lu bytes of large object data (result = %lu)" @@ -628,419 +628,399 @@ msgstr[0] "zapsán %lu byte dat large objektů (result = %lu)" msgstr[1] "zapsán %lu byty dat large objektů (result = %lu)" msgstr[2] "zapsán %lu bytů dat large objektů (result = %lu)" -#: pg_backup_archiver.c:1667 +#: pg_backup_archiver.c:1659 #, c-format msgid "could not write to large object (result: %lu, expected: %lu)" msgstr "nelze zapsat \"large object\" (výsledek = %lu, očekáváno: %lu)" -#: pg_backup_archiver.c:1759 +#: pg_backup_archiver.c:1749 #, c-format msgid "while INITIALIZING:" msgstr "během INICIALIZACE:" -#: pg_backup_archiver.c:1764 +#: pg_backup_archiver.c:1754 #, c-format msgid "while PROCESSING TOC:" msgstr "během ZPRACOVÁNÍ TOC:" -#: pg_backup_archiver.c:1769 +#: pg_backup_archiver.c:1759 #, c-format msgid "while FINALIZING:" msgstr "během FINALIZACE:" -#: pg_backup_archiver.c:1774 +#: pg_backup_archiver.c:1764 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "z TOC záznamu %d; %u %u %s %s %s" -#: pg_backup_archiver.c:1850 +#: pg_backup_archiver.c:1840 #, c-format msgid "bad dumpId" msgstr "neplatné dumpId" -#: pg_backup_archiver.c:1871 +#: pg_backup_archiver.c:1861 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "špatné dumpId tabulky pro TABLE DATA položku" -#: pg_backup_archiver.c:1963 +#: pg_backup_archiver.c:1953 #, c-format msgid "unexpected data offset flag %d" msgstr "neočekávaný příznak datového offsetu %d" -#: pg_backup_archiver.c:1976 +#: pg_backup_archiver.c:1966 #, c-format msgid "file offset in dump file is too large" msgstr "offset souboru v dumpu je příliš velký" -#: pg_backup_archiver.c:2113 pg_backup_archiver.c:2123 +#: pg_backup_archiver.c:2103 pg_backup_archiver.c:2113 #, c-format msgid "directory name too long: \"%s\"" msgstr "jméno adresáře je příliš dlouhé: \"%s\"" -#: pg_backup_archiver.c:2131 +#: pg_backup_archiver.c:2121 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" msgstr "adresář \"%s\" zřejmě není platným archivem (\"toc.dat\" neexistuje)" -#: pg_backup_archiver.c:2139 pg_backup_custom.c:176 pg_backup_custom.c:760 -#: pg_backup_directory.c:207 pg_backup_directory.c:391 +#: pg_backup_archiver.c:2129 pg_backup_custom.c:173 pg_backup_custom.c:812 +#: pg_backup_directory.c:207 pg_backup_directory.c:394 #, c-format msgid "could not open input file \"%s\": %m" msgstr "nelze otevřít vstupní soubor \"%s\": %m" -#: pg_backup_archiver.c:2146 pg_backup_custom.c:182 +#: pg_backup_archiver.c:2136 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "nelze otevřít vstupní soubor: %m" -#: pg_backup_archiver.c:2152 +#: pg_backup_archiver.c:2142 #, c-format msgid "could not read input file: %m" msgstr "nelze číst vstupní soubor: %m" -#: pg_backup_archiver.c:2154 +#: pg_backup_archiver.c:2144 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "vstupní soubor je příliš krátký (čteno %lu, očekáváno 5)" -#: pg_backup_archiver.c:2239 +#: pg_backup_archiver.c:2229 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "vstupní soubor se zdá být dump v textovém formátu. Použijte prosím psql." -#: pg_backup_archiver.c:2245 +#: pg_backup_archiver.c:2235 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "vstupní soubor se nezdá být korektním archivem (příliš krátký?)" -#: pg_backup_archiver.c:2251 +#: pg_backup_archiver.c:2241 #, c-format msgid "input file does not appear to be a valid archive" msgstr "vstupní soubor se nezdá být korektním archivem" -#: pg_backup_archiver.c:2271 +#: pg_backup_archiver.c:2261 #, c-format msgid "could not close input file: %m" msgstr "nelze zavřít výstupní soubor: %m" -#: pg_backup_archiver.c:2385 +#: pg_backup_archiver.c:2373 #, c-format msgid "unrecognized file format \"%d\"" msgstr "neznámý formát souboru \"%d\"" -#: pg_backup_archiver.c:2467 pg_backup_archiver.c:4475 +#: pg_backup_archiver.c:2455 pg_backup_archiver.c:4458 #, c-format msgid "finished item %d %s %s" msgstr "dokončena položka %d %s %s" -#: pg_backup_archiver.c:2471 pg_backup_archiver.c:4488 +#: pg_backup_archiver.c:2459 pg_backup_archiver.c:4471 #, c-format msgid "worker process failed: exit code %d" msgstr "worker proces selhal: exit kód %d" -#: pg_backup_archiver.c:2591 +#: pg_backup_archiver.c:2579 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "ID záznamu %d je mimo rozsah -- možná je poškozena TOC" -#: pg_backup_archiver.c:2658 +#: pg_backup_archiver.c:2646 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "obnova tabulek s volbou WITH OIDS již není podporována" -#: pg_backup_archiver.c:2740 +#: pg_backup_archiver.c:2728 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "neplatné kódování \"%s\"" -#: pg_backup_archiver.c:2745 +#: pg_backup_archiver.c:2733 #, c-format msgid "invalid ENCODING item: %s" msgstr "chybná položka ENCODING: %s" -#: pg_backup_archiver.c:2763 +#: pg_backup_archiver.c:2751 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "chybná položka STDSTRINGS: %s" -#: pg_backup_archiver.c:2788 +#: pg_backup_archiver.c:2776 #, c-format msgid "schema \"%s\" not found" msgstr "schéma \"%s\" nenalezeno" -#: pg_backup_archiver.c:2795 +#: pg_backup_archiver.c:2783 #, c-format msgid "table \"%s\" not found" msgstr "tabulka \"%s\" nenalezena" -#: pg_backup_archiver.c:2802 +#: pg_backup_archiver.c:2790 #, c-format msgid "index \"%s\" not found" msgstr "index \"%s\" nenalezen" -#: pg_backup_archiver.c:2809 +#: pg_backup_archiver.c:2797 #, c-format msgid "function \"%s\" not found" msgstr "funkce \"%s\" nenalezena" -#: pg_backup_archiver.c:2816 +#: pg_backup_archiver.c:2804 #, c-format msgid "trigger \"%s\" not found" msgstr "trigger \"%s\" nenalezen" -#: pg_backup_archiver.c:3195 +#: pg_backup_archiver.c:3196 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "nelze nastavit uživatele session na \"%s\": %s" -#: pg_backup_archiver.c:3334 +#: pg_backup_archiver.c:3328 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "nelze nastavit search_path na \"%s\": %s" -#: pg_backup_archiver.c:3396 +#: pg_backup_archiver.c:3390 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "nelze nastavit default_tablespace na %s: %s" -#: pg_backup_archiver.c:3441 +#: pg_backup_archiver.c:3435 #, c-format msgid "could not set default_table_access_method: %s" msgstr "nelze nastavit default_table_access_method na: %s" -#: pg_backup_archiver.c:3533 pg_backup_archiver.c:3691 +#: pg_backup_archiver.c:3527 pg_backup_archiver.c:3685 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "nevím jak nastavit vlastníka pro typ objektu \"%s\"" -#: pg_backup_archiver.c:3795 +#: pg_backup_archiver.c:3789 #, c-format msgid "did not find magic string in file header" msgstr "nelze najít identifikační řetězec v hlavičce souboru" -#: pg_backup_archiver.c:3808 +#: pg_backup_archiver.c:3802 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "nepodporovaná verze (%d.%d) v hlavičce souboru" -#: pg_backup_archiver.c:3813 +#: pg_backup_archiver.c:3807 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "kontrola velikosti integeru (%lu) selhala" -#: pg_backup_archiver.c:3817 +#: pg_backup_archiver.c:3811 #, c-format msgid "archive was made on a machine with larger integers, some operations might fail" msgstr "archiv byl vytvořen na stroji s většími celými čísly (integer), některé operace mohou selhat" -#: pg_backup_archiver.c:3827 +#: pg_backup_archiver.c:3821 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "očekávaný formát (%d) se liší se od formátu nalezeného v souboru (%d)" -#: pg_backup_archiver.c:3843 +#: pg_backup_archiver.c:3837 #, c-format msgid "archive is compressed, but this installation does not support compression -- no data will be available" msgstr "archiv je komprimován, ale tato instalace nepodporuje kompresi -- data nebudou dostupná" -#: pg_backup_archiver.c:3861 +#: pg_backup_archiver.c:3855 #, c-format msgid "invalid creation date in header" msgstr "v hlavičce je neplatné datum vytvoření" -#: pg_backup_archiver.c:3998 +#: pg_backup_archiver.c:3983 #, c-format msgid "processing item %d %s %s" msgstr "zpracovávám položku %d %s %s" -#: pg_backup_archiver.c:4077 +#: pg_backup_archiver.c:4062 #, c-format msgid "entering main parallel loop" msgstr "vstupuji do hlavní paralelní smyčky" -#: pg_backup_archiver.c:4088 +#: pg_backup_archiver.c:4073 #, c-format msgid "skipping item %d %s %s" msgstr "přeskakuji položku %d %s %s" -#: pg_backup_archiver.c:4097 +#: pg_backup_archiver.c:4082 #, c-format msgid "launching item %d %s %s" msgstr "spouštím položku %d %s %s" -#: pg_backup_archiver.c:4151 +#: pg_backup_archiver.c:4136 #, c-format msgid "finished main parallel loop" msgstr "ukončuji hlavní paralelní smyčku" -#: pg_backup_archiver.c:4189 +#: pg_backup_archiver.c:4172 #, c-format msgid "processing missed item %d %s %s" msgstr "zpracování vynechalo položku %d %s %s" -#: pg_backup_archiver.c:4794 +#: pg_backup_archiver.c:4777 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "tabulku \"%s\" nelze vytvořit, její data nebudou obnovena" -#: pg_backup_custom.c:377 pg_backup_null.c:150 +#: pg_backup_custom.c:378 pg_backup_null.c:147 #, c-format msgid "invalid OID for large object" msgstr "neplatné OID pro \"large object\"" -#: pg_backup_custom.c:447 -#, c-format -msgid "unrecognized data block type (%d) while searching archive" -msgstr "nepřípustný typ datového bloku (%d) během prohledávání archivu" - -#: pg_backup_custom.c:458 pg_backup_custom.c:818 +#: pg_backup_custom.c:441 pg_backup_custom.c:507 pg_backup_custom.c:632 +#: pg_backup_custom.c:870 pg_backup_tar.c:1086 pg_backup_tar.c:1091 #, c-format msgid "error during file seek: %m" msgstr "chyba během posunu v souboru: %m" -#: pg_backup_custom.c:467 +#: pg_backup_custom.c:480 #, c-format -msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive" -msgstr "v archivu nelze najít blok ID %d -- možná kvůli out-of-order restore požadavku, který nemohl být vyřízen kvůli chybějícím datovým offsetům v archivu" +msgid "data block %d has wrong seek position" +msgstr "datový blok %d má chybnou seek pozici" -#: pg_backup_custom.c:472 +#: pg_backup_custom.c:497 +#, c-format +msgid "unrecognized data block type (%d) while searching archive" +msgstr "nepřípustný typ datového bloku (%d) během prohledávání archivu" + +#: pg_backup_custom.c:519 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to non-seekable input file" msgstr "v archivu nelze najít blok ID %d -- možná kvůli out-of-order restore požadavku, který nemohl být vyřízen kvůli non-seekable vstupnímu souboru" -#: pg_backup_custom.c:477 +#: pg_backup_custom.c:524 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive" msgstr "v archivu nelze najít blok ID %d -- archiv může být poškozen" -#: pg_backup_custom.c:484 +#: pg_backup_custom.c:531 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d" msgstr "nalezeno neočekávané ID bloku (%d) při čtení dat - očekáváno %d" -#: pg_backup_custom.c:498 +#: pg_backup_custom.c:545 #, c-format msgid "unrecognized data block type %d while restoring archive" msgstr "nepřípustný typ datového bloku %d během obnovení archivu" -#: pg_backup_custom.c:580 +#: pg_backup_custom.c:648 #, c-format msgid "could not read from input file: %m" msgstr "nelze číst vstupní soubor: %m" -#: pg_backup_custom.c:698 pg_backup_custom.c:751 pg_backup_custom.c:891 -#: pg_backup_tar.c:1091 +#: pg_backup_custom.c:751 pg_backup_custom.c:803 pg_backup_custom.c:948 +#: pg_backup_tar.c:1089 #, c-format msgid "could not determine seek position in archive file: %m" msgstr "nelze určit seek pozici v archivním souboru: %m" -#: pg_backup_custom.c:715 pg_backup_custom.c:755 +#: pg_backup_custom.c:767 pg_backup_custom.c:807 #, c-format msgid "could not close archive file: %m" msgstr "nelze uzavřít archivní soubor: %m" -#: pg_backup_custom.c:738 +#: pg_backup_custom.c:790 #, c-format msgid "can only reopen input archives" msgstr "vstupní archivy lze pouze znovu otevřít" -#: pg_backup_custom.c:745 +#: pg_backup_custom.c:797 #, c-format msgid "parallel restore from standard input is not supported" msgstr "paralelní obnova ze standardního vstupnu není podporována" -#: pg_backup_custom.c:747 +#: pg_backup_custom.c:799 #, c-format msgid "parallel restore from non-seekable file is not supported" msgstr "paralelní obnova z neseekovatelného souboru není podporována" -#: pg_backup_custom.c:763 +#: pg_backup_custom.c:815 #, c-format msgid "could not set seek position in archive file: %m" msgstr "nelze nastavit seek pozici v archivním souboru: %m" -#: pg_backup_custom.c:839 +#: pg_backup_custom.c:894 #, c-format msgid "compressor active" msgstr "compressor aktivní" -#: pg_backup_custom.c:894 -#, c-format -msgid "ftell mismatch with expected position -- ftell used" -msgstr "ftell neodpovídá očekávané pozici -- použit ftell" - -#: pg_backup_db.c:44 +#: pg_backup_db.c:41 #, c-format msgid "could not get server_version from libpq" msgstr "nelze získat server_version z libpq" -#: pg_backup_db.c:55 pg_dumpall.c:1826 +#: pg_backup_db.c:52 pg_dumpall.c:1826 #, c-format msgid "server version: %s; %s version: %s" msgstr "verze serveru: %s; %s verze: %s" -#: pg_backup_db.c:57 pg_dumpall.c:1828 +#: pg_backup_db.c:54 pg_dumpall.c:1828 #, c-format msgid "aborting because of server version mismatch" msgstr "končím kvůli rozdílnosti verzí serverů" -#: pg_backup_db.c:140 +#: pg_backup_db.c:124 #, c-format -msgid "connecting to database \"%s\" as user \"%s\"" -msgstr "připojuji se k databázi \"%s\" jako uživatel \"%s\"" +msgid "already connected to a database" +msgstr "spojení s databází již existuje" -#: pg_backup_db.c:147 pg_backup_db.c:196 pg_backup_db.c:257 pg_backup_db.c:298 -#: pg_dumpall.c:1651 pg_dumpall.c:1764 +#: pg_backup_db.c:133 pg_backup_db.c:185 pg_dumpall.c:1651 pg_dumpall.c:1764 msgid "Password: " msgstr "Heslo: " -#: pg_backup_db.c:179 +#: pg_backup_db.c:177 #, c-format -msgid "could not reconnect to database" +msgid "could not connect to database" msgstr "nelze znovu navázat spojení s databází" -#: pg_backup_db.c:184 -#, c-format -msgid "could not reconnect to database: %s" -msgstr "nelze znovu navázat spojení s databází: %s" - -#: pg_backup_db.c:200 -#, c-format -msgid "connection needs password" -msgstr "spojení vyžaduje heslo" - -#: pg_backup_db.c:251 -#, c-format -msgid "already connected to a database" -msgstr "spojení s databází již existuje" - -#: pg_backup_db.c:290 +#: pg_backup_db.c:195 #, c-format -msgid "could not connect to database" -msgstr "nelze znovu navázat spojení s databází" +msgid "reconnection to database \"%s\" failed: %s" +msgstr "připojení k databázi \"%s\" selhalo: %s" -#: pg_backup_db.c:306 +#: pg_backup_db.c:199 #, c-format msgid "connection to database \"%s\" failed: %s" msgstr "spojení s databází \"%s\" selhalo: %s" -#: pg_backup_db.c:378 pg_dumpall.c:1684 +#: pg_backup_db.c:272 pg_dumpall.c:1684 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:385 pg_dumpall.c:1889 pg_dumpall.c:1912 +#: pg_backup_db.c:279 pg_dumpall.c:1889 pg_dumpall.c:1912 #, c-format msgid "query failed: %s" msgstr "dotaz selhal: %s" -#: pg_backup_db.c:387 pg_dumpall.c:1890 pg_dumpall.c:1913 +#: pg_backup_db.c:281 pg_dumpall.c:1890 pg_dumpall.c:1913 #, c-format msgid "query was: %s" msgstr "dotaz byl: %s" -#: pg_backup_db.c:428 +#: pg_backup_db.c:322 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" @@ -1048,40 +1028,45 @@ msgstr[0] "dotaz vrátil %d řádku namísto jedné: %s" msgstr[1] "dotaz vrátil %d řádky namísto jedné: %s" msgstr[2] "dotaz vrátil %d řádek namísto jedné: %s" -#: pg_backup_db.c:464 +#: pg_backup_db.c:358 #, c-format msgid "%s: %sCommand was: %s" msgstr "%s: %sPříkaz byl: %s" -#: pg_backup_db.c:520 pg_backup_db.c:594 pg_backup_db.c:601 +#: pg_backup_db.c:414 pg_backup_db.c:488 pg_backup_db.c:495 msgid "could not execute query" msgstr "nelze provést dotaz" -#: pg_backup_db.c:573 +#: pg_backup_db.c:467 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "chyba vrácená voláním PQputCopyData: %s" -#: pg_backup_db.c:622 +#: pg_backup_db.c:516 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "chyba vrícená voláním PQputCopyEnd: %s" -#: pg_backup_db.c:628 +#: pg_backup_db.c:522 #, c-format msgid "COPY failed for table \"%s\": %s" msgstr "COPY selhal pro tabulku \"%s\": %s" -#: pg_backup_db.c:634 pg_dump.c:1924 +#: pg_backup_db.c:528 pg_dump.c:1991 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "neočekávané další výsledky během COPY tabulky \"%s\"" -#: pg_backup_db.c:646 +#: pg_backup_db.c:586 +#, c-format +msgid "LOCK TABLE failed for \"%s\": %s" +msgstr "LOCK TABLE selhal pro \"%s\": %s" + +#: pg_backup_db.c:604 msgid "could not start database transaction" msgstr "nelze spustit databázovou transakci" -#: pg_backup_db.c:654 +#: pg_backup_db.c:612 msgid "could not commit database transaction" msgstr "nelze provést commit transakce" @@ -1105,48 +1090,48 @@ msgstr "nelze zavřít adresář \"%s\": %m" msgid "could not create directory \"%s\": %m" msgstr "nelze vytvořit adresář \"%s\": %m" -#: pg_backup_directory.c:350 pg_backup_directory.c:488 -#: pg_backup_directory.c:518 +#: pg_backup_directory.c:355 pg_backup_directory.c:496 +#: pg_backup_directory.c:532 #, c-format msgid "could not write to output file: %s" msgstr "nelze zapsat do výstupního souboru: %s" -#: pg_backup_directory.c:403 +#: pg_backup_directory.c:406 #, c-format -msgid "could not close data file: %m" -msgstr "nelze uzavřít datový soubor: %m" +msgid "could not close data file \"%s\": %m" +msgstr "nelze uzavřít datový soubor \"%s\": %m" -#: pg_backup_directory.c:443 +#: pg_backup_directory.c:446 #, c-format msgid "could not open large object TOC file \"%s\" for input: %m" msgstr "nelze otevřít TOC soubor pro large objekty \"%s\" pro vstup: %m" -#: pg_backup_directory.c:454 +#: pg_backup_directory.c:457 #, c-format msgid "invalid line in large object TOC file \"%s\": \"%s\"" msgstr "neplatný řádek v TOC souboru pro large objekty \"%s\" : \"%s\"" -#: pg_backup_directory.c:463 +#: pg_backup_directory.c:466 #, c-format msgid "error reading large object TOC file \"%s\"" msgstr "chyba při čtení TOC souboru pro large objekty \"%s\"" -#: pg_backup_directory.c:467 +#: pg_backup_directory.c:470 #, c-format msgid "could not close large object TOC file \"%s\": %m" msgstr "nelze uzavřít TOC soubor pro large objekty \"%s\": %m" -#: pg_backup_directory.c:678 +#: pg_backup_directory.c:689 #, c-format msgid "could not write to blobs TOC file" msgstr "nelze zapsat do TOC souboru pro bloby" -#: pg_backup_directory.c:710 +#: pg_backup_directory.c:721 #, c-format msgid "file name too long: \"%s\"" msgstr "jméno souboru je příliš dlouhé: \"%s\"" -#: pg_backup_null.c:75 +#: pg_backup_null.c:74 #, c-format msgid "this format cannot be read" msgstr "tento formát nelze číst" @@ -1196,42 +1181,37 @@ msgstr "nelze otevřít dočasný soubor" msgid "could not close tar member" msgstr "nelze zavřít tar položku" -#: pg_backup_tar.c:571 -#, c-format -msgid "internal error -- neither th nor fh specified in tarReadRaw()" -msgstr "interní chyba -- ani th ani fh nespecifikován v tarReadRaw()" - -#: pg_backup_tar.c:693 +#: pg_backup_tar.c:691 #, c-format msgid "unexpected COPY statement syntax: \"%s\"" msgstr "neočekávaná syntaxe příkazu COPY: \"%s\"" -#: pg_backup_tar.c:961 +#: pg_backup_tar.c:958 #, c-format msgid "invalid OID for large object (%u)" msgstr "neplatné OID pro \"large object\" (%u)" -#: pg_backup_tar.c:1106 +#: pg_backup_tar.c:1105 #, c-format msgid "could not close temporary file: %m" msgstr "nelze otevřít dočasný soubor: %m" -#: pg_backup_tar.c:1115 +#: pg_backup_tar.c:1114 #, c-format msgid "actual file length (%s) does not match expected (%s)" msgstr "skutečná délka souboru (%s) neodpovídá očekávané (%s)" -#: pg_backup_tar.c:1172 pg_backup_tar.c:1202 +#: pg_backup_tar.c:1171 pg_backup_tar.c:1201 #, c-format msgid "could not find header for file \"%s\" in tar archive" msgstr "nelze najít hlavičku pro soubor %s v tar archivu" -#: pg_backup_tar.c:1190 +#: pg_backup_tar.c:1189 #, c-format msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file." msgstr "obnova dat mimo pořadí není podporována v tomto formátu archivu: \"%s\" je vyžadován, ale v archivu předchází \"%s\"." -#: pg_backup_tar.c:1235 +#: pg_backup_tar.c:1234 #, c-format msgid "incomplete tar header found (%lu byte)" msgid_plural "incomplete tar header found (%lu bytes)" @@ -1239,7 +1219,7 @@ msgstr[0] "nalezena nekompletní tar hlavička (%lu byte)" msgstr[1] "nalezena nekompletní tar hlavička (%lu byty)" msgstr[2] "nalezena nekompletní tar hlavička (%lu bytů)" -#: pg_backup_tar.c:1286 +#: pg_backup_tar.c:1285 #, c-format msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s" msgstr "nalezena poškozená tar hlavička v %s (očekáváno %d, vypočteno %d) pozice souboru %s" @@ -1249,10 +1229,10 @@ msgstr "nalezena poškozená tar hlavička v %s (očekáváno %d, vypočteno %d) msgid "unrecognized section name: \"%s\"" msgstr "neznámý název sekce \"%s\"" -#: pg_backup_utils.c:55 pg_dump.c:611 pg_dump.c:628 pg_dumpall.c:339 -#: pg_dumpall.c:349 pg_dumpall.c:358 pg_dumpall.c:367 pg_dumpall.c:375 -#: pg_dumpall.c:389 pg_dumpall.c:465 pg_restore.c:288 pg_restore.c:304 -#: pg_restore.c:322 +#: pg_backup_utils.c:55 pg_dump.c:607 pg_dump.c:624 pg_dumpall.c:338 +#: pg_dumpall.c:348 pg_dumpall.c:357 pg_dumpall.c:366 pg_dumpall.c:374 +#: pg_dumpall.c:388 pg_dumpall.c:464 pg_restore.c:284 pg_restore.c:300 +#: pg_restore.c:318 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" @@ -1262,62 +1242,72 @@ msgstr "Zkuste \"%s --help\" pro více informací.\n" msgid "out of on_exit_nicely slots" msgstr "vyčerpány dostupné on_exit_nicely sloty" -#: pg_dump.c:542 +#: pg_dump.c:533 #, c-format msgid "compression level must be in range 0..9" msgstr "úroveň komprese musí být v rozsahu 0..9" -#: pg_dump.c:580 +#: pg_dump.c:571 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digits musí být v intervalu -15..3" -#: pg_dump.c:603 +#: pg_dump.c:594 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "počet řádek na insert musí být v rozsahu %d..%d" -#: pg_dump.c:626 pg_dumpall.c:347 pg_restore.c:302 +#: pg_dump.c:622 pg_dumpall.c:346 pg_restore.c:298 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "příliš mnoho argumentů v příkazové řádce (první je \"%s\")" -#: pg_dump.c:647 pg_restore.c:331 +#: pg_dump.c:643 pg_restore.c:327 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "volby -s/--schema-only a -a/--data-only nelze používat společně" -#: pg_dump.c:653 pg_restore.c:337 +#: pg_dump.c:648 +#, c-format +msgid "options -s/--schema-only and --include-foreign-data cannot be used together" +msgstr "volby -s/--schema-only a --include-foreign-data nelze používat společně" + +#: pg_dump.c:651 +#, c-format +msgid "option --include-foreign-data is not supported with parallel backup" +msgstr "volba --include-foreign-data není podporována pro paralelní backupy" + +#: pg_dump.c:655 pg_restore.c:333 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "volby -c/--clean a -a/--data-only nelze používat společně" -#: pg_dump.c:658 pg_dumpall.c:382 pg_restore.c:386 +#: pg_dump.c:660 pg_dumpall.c:381 pg_restore.c:382 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "volba --if-exists vyžaduje volbu -c/--clean" -#: pg_dump.c:665 +#: pg_dump.c:667 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "volba --on-conflict-do-nothing vyžaduje volbu --inserts, --rows-per-insert, nebo --column-inserts" -#: pg_dump.c:687 +#: pg_dump.c:689 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "požadovaná komprese není v této instalaci dostupná -- archiv bude nekomprimovaný" -#: pg_dump.c:708 pg_restore.c:353 +#: pg_dump.c:710 pg_restore.c:349 #, c-format msgid "invalid number of parallel jobs" msgstr "neplatný počet paralelních jobů" -#: pg_dump.c:712 +#: pg_dump.c:714 #, c-format msgid "parallel backup only supported by the directory format" msgstr "paralelní záloha je podporována pouze directory formátem" -#: pg_dump.c:767 +#: pg_dump.c:769 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1328,27 +1318,27 @@ msgstr "" "Pokud nepotřebujete synchronizované snapshoty, použijte přepínač\n" "--no-synchronized-snapshots." -#: pg_dump.c:773 +#: pg_dump.c:775 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Exportované snapshoty nejsou touto verzí serveru podporovány." -#: pg_dump.c:785 +#: pg_dump.c:787 #, c-format msgid "last built-in OID is %u" msgstr "poslední vestavěné OID je %u" -#: pg_dump.c:794 +#: pg_dump.c:796 #, c-format msgid "no matching schemas were found" msgstr "nebyla nalezena žádná odovídající schémata" -#: pg_dump.c:808 +#: pg_dump.c:810 #, c-format msgid "no matching tables were found" msgstr "nebyla nalezena žádná odpovídající tabulka" -#: pg_dump.c:980 +#: pg_dump.c:990 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1357,17 +1347,17 @@ msgstr "" "%s vytvoří dump databáze jako textový soubor nebo v jiném formátu.\n" "\n" -#: pg_dump.c:981 pg_dumpall.c:618 pg_restore.c:466 +#: pg_dump.c:991 pg_dumpall.c:617 pg_restore.c:462 #, c-format msgid "Usage:\n" msgstr "Použití:\n" -#: pg_dump.c:982 +#: pg_dump.c:992 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [PŘEPÍNAČ]... [DATABÁZE]\n" -#: pg_dump.c:984 pg_dumpall.c:621 pg_restore.c:469 +#: pg_dump.c:994 pg_dumpall.c:620 pg_restore.c:465 #, c-format msgid "" "\n" @@ -1376,12 +1366,12 @@ msgstr "" "\n" "Obecné volby:\n" -#: pg_dump.c:985 +#: pg_dump.c:995 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=SOUBOR výstupní soubor nebo adresář\n" -#: pg_dump.c:986 +#: pg_dump.c:996 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1390,42 +1380,42 @@ msgstr "" " -F, --format=c|d|t|p formát výstupního soubor (custom, directory, tar,\n" " plain text (výchozí))\n" -#: pg_dump.c:988 +#: pg_dump.c:998 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM použij tento počet paralelních jobů pro zálohu\n" -#: pg_dump.c:989 pg_dumpall.c:623 +#: pg_dump.c:999 pg_dumpall.c:622 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose vypisovat více informací\n" -#: pg_dump.c:990 pg_dumpall.c:624 +#: pg_dump.c:1000 pg_dumpall.c:623 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version zobraz informaci o verzi, poté skonči\n" -#: pg_dump.c:991 +#: pg_dump.c:1001 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 úroveň komprese při použití komprimovaného formátu\n" -#: pg_dump.c:992 pg_dumpall.c:625 +#: pg_dump.c:1002 pg_dumpall.c:624 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr " --lock-wait-timeout=TIMEOUT selže po uplynutí TIMEOUT čekáním na zámek tabulky\n" -#: pg_dump.c:993 pg_dumpall.c:652 +#: pg_dump.c:1003 pg_dumpall.c:651 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync nečekat než budou změny bezpečně zapsány na disk\n" -#: pg_dump.c:994 pg_dumpall.c:626 +#: pg_dump.c:1004 pg_dumpall.c:625 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help zobraz tuto nápovědu, poté skonči\n" -#: pg_dump.c:996 pg_dumpall.c:627 +#: pg_dump.c:1006 pg_dumpall.c:626 #, c-format msgid "" "\n" @@ -1434,53 +1424,51 @@ msgstr "" "\n" "Přepínače ovlivňující výstup:\n" -#: pg_dump.c:997 pg_dumpall.c:628 +#: pg_dump.c:1007 pg_dumpall.c:627 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only dump pouze dat bez definic databázových objektů\n" -#: pg_dump.c:998 +#: pg_dump.c:1008 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs zahrnout \"large objects\" do dumpu\n" -#: pg_dump.c:999 +#: pg_dump.c:1009 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs nezahrnovat \"large objects\" do dumpu\n" -#: pg_dump.c:1000 pg_restore.c:480 +#: pg_dump.c:1010 pg_restore.c:476 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr " -c, --clean odstranit (drop) databázi před jejím vytvořením\n" -#: pg_dump.c:1001 +#: pg_dump.c:1011 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr " -C, --create zahrnout příkazy pro vytvoření databáze do dumpu\n" -#: pg_dump.c:1002 pg_dumpall.c:630 +#: pg_dump.c:1012 pg_dumpall.c:629 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=KÓDOVÁNÍ kódování znaků databáze\n" -#: pg_dump.c:1003 +#: pg_dump.c:1013 #, c-format -#| msgid " -n, --schema=SCHEMA dump the named schema(s) only\n" msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr "" " -n, --schema=PATTERN vytvořit dump pouze specifikovaného schématu\n" "\n" -#: pg_dump.c:1004 +#: pg_dump.c:1014 #, c-format -#| msgid " -N, --exclude-schema=SCHEMA do NOT dump the named schema(s)\n" msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr "" " -N, --exclude-schema=PATTERN nedumpuj uvedená schéma(ta)\n" "\n" -#: pg_dump.c:1005 +#: pg_dump.c:1015 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1489,62 +1477,60 @@ msgstr "" " -O, --no-owner nevypisovat příkazy pro nastavení vlastníka objektu\n" " v čistě textovém formátu\n" -#: pg_dump.c:1007 pg_dumpall.c:634 +#: pg_dump.c:1017 pg_dumpall.c:633 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr "" " -s, --schema-only dump pouze definic databázových objektů\n" " (tabulek apod.) bez dat\n" -#: pg_dump.c:1008 +#: pg_dump.c:1018 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr " -S, --superuser=JMÉNO uživatelské jméno superuživatele použité při dumpu\n" -#: pg_dump.c:1009 +#: pg_dump.c:1019 #, c-format -#| msgid " -t, --table=TABLE dump the named table(s) only\n" msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr "" " -t, --table=PATTERN provést dump pouze uvedené tabulky\n" "\n" -#: pg_dump.c:1010 +#: pg_dump.c:1020 #, c-format -#| msgid " -T, --exclude-table=TABLE do NOT dump the named table(s)\n" msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr "" " -T, --exclude-table=PATTERN neprováděj dump uvedených tabulek\n" "\n" -#: pg_dump.c:1011 pg_dumpall.c:637 +#: pg_dump.c:1021 pg_dumpall.c:636 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges neprovádět dump přístupových práv (grant/revoke)\n" -#: pg_dump.c:1012 pg_dumpall.c:638 +#: pg_dump.c:1022 pg_dumpall.c:637 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade pouze pro použití upgradovacími nástroji\n" -#: pg_dump.c:1013 pg_dumpall.c:639 +#: pg_dump.c:1023 pg_dumpall.c:638 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr " --column-inserts použije pro dump dat příkaz INSERT se jmény sloupců\n" -#: pg_dump.c:1014 pg_dumpall.c:640 +#: pg_dump.c:1024 pg_dumpall.c:639 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr "" " --disable-dollar-quoting nepoužívat znak dolaru místo uvozovek, používat\n" " standardní SQL uvozování\n" -#: pg_dump.c:1015 pg_dumpall.c:641 pg_restore.c:497 +#: pg_dump.c:1025 pg_dumpall.c:640 pg_restore.c:493 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr " --disable-triggers zakázat volání triggerů během obnovy dat\n" -#: pg_dump.c:1016 +#: pg_dump.c:1026 #, c-format msgid "" " --enable-row-security enable row security (dump only content user has\n" @@ -1553,99 +1539,110 @@ msgstr "" " --enable-row-security povolit row security (vypíše pouze data ke kterým má\n" " uživatel přístup)\n" -#: pg_dump.c:1018 +#: pg_dump.c:1028 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr "" " --exclude-table-data=VZOR nedumpuj data pro zadané tabulky\n" "\n" -#: pg_dump.c:1019 pg_dumpall.c:643 +#: pg_dump.c:1029 pg_dumpall.c:642 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=NUM přenastav výchozí nastavení pro extra_float_digits\n" -#: pg_dump.c:1020 pg_dumpall.c:644 pg_restore.c:499 +#: pg_dump.c:1030 pg_dumpall.c:643 pg_restore.c:495 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists použít IF EXISTS při mazání objektů\n" -#: pg_dump.c:1021 pg_dumpall.c:645 +#: pg_dump.c:1031 +#, c-format +msgid "" +" --include-foreign-data=PATTERN\n" +" include data of foreign tables on foreign\n" +" servers matching PATTERN\n" +msgstr "" +" --include-foreign-data=PATTERN\n" +" zahrne data z foreign tabulek náležících k foreign\n" +" serverům odpovídajícím PATTERN\n" + +#: pg_dump.c:1034 pg_dumpall.c:644 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts použít pro dump dat příkazy INSERT místo COPY\n" -#: pg_dump.c:1022 pg_dumpall.c:646 +#: pg_dump.c:1035 pg_dumpall.c:645 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root data do partition tabulek načítat přes root tabulku\n" -#: pg_dump.c:1023 pg_dumpall.c:647 +#: pg_dump.c:1036 pg_dumpall.c:646 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments neprovádět dump komentářů\n" -#: pg_dump.c:1024 pg_dumpall.c:648 +#: pg_dump.c:1037 pg_dumpall.c:647 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications neprovádět dump publikací\n" -#: pg_dump.c:1025 pg_dumpall.c:650 +#: pg_dump.c:1038 pg_dumpall.c:649 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels neprovádět dump bezpečnostních štítků\n" -#: pg_dump.c:1026 pg_dumpall.c:651 +#: pg_dump.c:1039 pg_dumpall.c:650 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions neprovádět dump subsckripcí\n" -#: pg_dump.c:1027 +#: pg_dump.c:1040 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr " --no-synchronized-snapshots nepoužívat synchronizované snapshoty v paralelních jobech\n" -#: pg_dump.c:1028 pg_dumpall.c:653 +#: pg_dump.c:1041 pg_dumpall.c:652 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces neprovádět dump přiřazení tablespaces\n" -#: pg_dump.c:1029 pg_dumpall.c:654 +#: pg_dump.c:1042 pg_dumpall.c:653 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data nedumpuj data unlogged tabulek\n" -#: pg_dump.c:1030 pg_dumpall.c:655 +#: pg_dump.c:1043 pg_dumpall.c:654 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" msgstr " --on-conflict-do-nothing přidej ON CONFLICT DO NOTHING do INSERT příkazů\n" -#: pg_dump.c:1031 pg_dumpall.c:656 +#: pg_dump.c:1044 pg_dumpall.c:655 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr " --quote-all-identifiers všechny identifikátory uveď v uvozovkách, i když se nejedná o klíčová slova\n" -#: pg_dump.c:1032 pg_dumpall.c:657 +#: pg_dump.c:1045 pg_dumpall.c:656 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=NROWS počet řádek per INSERT; implikuje --inserts\n" -#: pg_dump.c:1033 +#: pg_dump.c:1046 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr " --section=SECTION dump pojmenované sekce (pre-data, data, nebo post-data)\n" -#: pg_dump.c:1034 +#: pg_dump.c:1047 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr " --serializable-deferrable počkej než bude možné provést dump bez anomálií\n" -#: pg_dump.c:1035 +#: pg_dump.c:1048 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT pro dump použít zadaný snapshot\n" -#: pg_dump.c:1036 pg_restore.c:508 +#: pg_dump.c:1049 pg_restore.c:504 #, c-format msgid "" " --strict-names require table and/or schema include patterns to\n" @@ -1654,7 +1651,7 @@ msgstr "" " --strict-names vyžadovat aby každý vzor pro zahrnutí tabulek a/nebo schémat\n" " odpovídal alespoň jednomu objektu\n" -#: pg_dump.c:1038 pg_dumpall.c:658 pg_restore.c:510 +#: pg_dump.c:1051 pg_dumpall.c:657 pg_restore.c:506 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1665,7 +1662,7 @@ msgstr "" " používat příkaz SET SESSION AUTHORIZATION namísto\n" " příkazu ALTER OWNER pro nastavení vlastníka\n" -#: pg_dump.c:1042 pg_dumpall.c:662 pg_restore.c:514 +#: pg_dump.c:1055 pg_dumpall.c:661 pg_restore.c:510 #, c-format msgid "" "\n" @@ -1674,42 +1671,42 @@ msgstr "" "\n" "Volby spojení:\n" -#: pg_dump.c:1043 +#: pg_dump.c:1056 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=JMÉNO jméno zdrojové databáze\n" -#: pg_dump.c:1044 pg_dumpall.c:664 pg_restore.c:515 +#: pg_dump.c:1057 pg_dumpall.c:663 pg_restore.c:511 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME host databázového serveru nebo adresář se sockety\n" -#: pg_dump.c:1045 pg_dumpall.c:666 pg_restore.c:516 +#: pg_dump.c:1058 pg_dumpall.c:665 pg_restore.c:512 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT port databázového serveru\n" -#: pg_dump.c:1046 pg_dumpall.c:667 pg_restore.c:517 +#: pg_dump.c:1059 pg_dumpall.c:666 pg_restore.c:513 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=JMÉNO připoj se jako uvedený uživatel\n" -#: pg_dump.c:1047 pg_dumpall.c:668 pg_restore.c:518 +#: pg_dump.c:1060 pg_dumpall.c:667 pg_restore.c:514 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nikdy se neptej na heslo\n" -#: pg_dump.c:1048 pg_dumpall.c:669 pg_restore.c:519 +#: pg_dump.c:1061 pg_dumpall.c:668 pg_restore.c:515 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password zeptej se na heslo (mělo by se dít automaticky)\n" -#: pg_dump.c:1049 pg_dumpall.c:670 +#: pg_dump.c:1062 pg_dumpall.c:669 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROLENAME před dumpem proveď SET ROLE\n" -#: pg_dump.c:1051 +#: pg_dump.c:1064 #, c-format msgid "" "\n" @@ -1722,17 +1719,22 @@ msgstr "" "PGDATABASE.\n" "\n" -#: pg_dump.c:1053 pg_dumpall.c:674 pg_restore.c:526 +#: pg_dump.c:1066 pg_dumpall.c:673 pg_restore.c:522 #, c-format -msgid "Report bugs to .\n" -msgstr "Oznámení o chybách zasílejte na .\n" +msgid "Report bugs to <%s>.\n" +msgstr "Chyby hlašte na <%s>.\n" -#: pg_dump.c:1072 pg_dumpall.c:500 +#: pg_dump.c:1067 pg_dumpall.c:674 pg_restore.c:523 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" + +#: pg_dump.c:1086 pg_dumpall.c:499 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "specifikováno neplatné klientské kódování \"%s\"" -#: pg_dump.c:1218 +#: pg_dump.c:1235 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server version.\n" @@ -1743,232 +1745,237 @@ msgstr "" "Pokud nepotřebujete synchronizované snapshoty, použijte přepínač\n" "--no-synchronized-snapshots." -#: pg_dump.c:1287 +#: pg_dump.c:1304 #, c-format msgid "invalid output format \"%s\" specified" msgstr "specifikován neplatný formát \"%s\" výstupu" -#: pg_dump.c:1325 +#: pg_dump.c:1342 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "nebyla nalezena žádná schémata odpovídající vzoru \"%s\"" -#: pg_dump.c:1390 +#: pg_dump.c:1389 +#, c-format +msgid "no matching foreign servers were found for pattern \"%s\"" +msgstr "nebyly nalezeny žádné foreign servery odpovídající vzoru \"%s\"" + +#: pg_dump.c:1452 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "nebyla nalezena žádná tabulka odpovídající vzoru \"%s\"" -#: pg_dump.c:1804 +#: pg_dump.c:1865 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "dumpuji obsah tabulky \"%s.%s\"" -#: pg_dump.c:1905 +#: pg_dump.c:1972 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Dumpování obsahu tabulky \"%s\" selhalo: volání PQgetCopyData() selhalo." -#: pg_dump.c:1906 pg_dump.c:1916 +#: pg_dump.c:1973 pg_dump.c:1983 #, c-format msgid "Error message from server: %s" msgstr "Chybová zpráva ze serveru: %s" -#: pg_dump.c:1907 pg_dump.c:1917 +#: pg_dump.c:1974 pg_dump.c:1984 #, c-format msgid "The command was: %s" msgstr "Příkaz byl: %s" -#: pg_dump.c:1915 +#: pg_dump.c:1982 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Dumpování obsahu tabulky \"%s\" selhalo: volání PQgetResult() selhalo." -#: pg_dump.c:2666 +#: pg_dump.c:2742 #, c-format msgid "saving database definition" msgstr "ukládám definice databáze" -#: pg_dump.c:3130 +#: pg_dump.c:3214 #, c-format msgid "saving encoding = %s" msgstr "ukládám kódování znaků = %s" -#: pg_dump.c:3155 +#: pg_dump.c:3239 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "ukládám standard_conforming_strings = %s" -#: pg_dump.c:3194 +#: pg_dump.c:3278 #, c-format msgid "could not parse result of current_schemas()" msgstr "nelze zpracovat výsledek current_schemas()" -#: pg_dump.c:3213 +#: pg_dump.c:3297 #, c-format msgid "saving search_path = %s" msgstr "ukládám search_path = %s" -#: pg_dump.c:3253 +#: pg_dump.c:3337 #, c-format msgid "reading large objects" msgstr "čtu \"large objects\"" -#: pg_dump.c:3435 +#: pg_dump.c:3519 #, c-format msgid "saving large objects" msgstr "ukládám \"large objects\"" -#: pg_dump.c:3481 +#: pg_dump.c:3565 #, c-format msgid "error reading large object %u: %s" msgstr "chyba při čtení large objektu %u: %s" -#: pg_dump.c:3533 +#: pg_dump.c:3617 #, c-format msgid "reading row security enabled for table \"%s.%s\"" msgstr "čtu row security enabled pro tabulku \"%s.%s\"" -#: pg_dump.c:3564 +#: pg_dump.c:3648 #, c-format msgid "reading policies for table \"%s.%s\"" msgstr "čtu policies pro tablku \"%s.%s\"" -#: pg_dump.c:3714 +#: pg_dump.c:3800 #, c-format msgid "unexpected policy command type: %c" msgstr "neočekáváný typ policy příkazu: %c" -#: pg_dump.c:3841 +#: pg_dump.c:3951 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "vlastník publikace \"%s\" se zdá být neplatný" -#: pg_dump.c:3978 +#: pg_dump.c:4096 #, c-format msgid "reading publication membership for table \"%s.%s\"" msgstr "čtu členství v publikacích pro tabulku \"%s.%s\"" -#: pg_dump.c:4121 +#: pg_dump.c:4239 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "subscriptions nejsou zahrnuty do dumpu protože aktuální uživatel není superuživatl" -#: pg_dump.c:4175 +#: pg_dump.c:4293 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "vlastník subskripce \"%s\" se zdá být neplatný" -#: pg_dump.c:4219 +#: pg_dump.c:4337 #, c-format msgid "could not parse subpublications array" msgstr "nelze naparsovat pole \"subpublications\"" -#: pg_dump.c:4491 +#: pg_dump.c:4659 #, c-format msgid "could not find parent extension for %s %s" msgstr "nelze najít nadřízené rozšíření pro %s %s" -#: pg_dump.c:4623 +#: pg_dump.c:4791 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "vlastník schématu \"%s\" se zdá být neplatný" -#: pg_dump.c:4646 +#: pg_dump.c:4814 #, c-format msgid "schema with OID %u does not exist" msgstr "schéma s OID %u neexistuje" -#: pg_dump.c:4971 +#: pg_dump.c:5139 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "vlastník datového typu \"%s\" se zdá být neplatný" -#: pg_dump.c:5056 +#: pg_dump.c:5224 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "vlastník operátoru \"%s\" se zdá být neplatný" -#: pg_dump.c:5358 +#: pg_dump.c:5526 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "vlastník třídy operátorů \"%s\" se zdá být neplatný" -#: pg_dump.c:5442 +#: pg_dump.c:5610 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "vlastník rodiny operátorů \"%s\" se zdá být neplatný" -#: pg_dump.c:5611 +#: pg_dump.c:5779 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "vlastník agregační funkce \"%s\" se zdá být neplatný" -#: pg_dump.c:5871 +#: pg_dump.c:6039 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "vlastník funkce \"%s\" se zdá být neplatný" -#: pg_dump.c:6675 +#: pg_dump.c:6867 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "vlastník tabulky \"%s\" se zdá být neplatný" -#: pg_dump.c:6717 pg_dump.c:17065 +#: pg_dump.c:6909 pg_dump.c:17389 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "selhala kontrola, OID %u rodičovské tabulky u sekvence s OID %u nelze najít" -#: pg_dump.c:6861 +#: pg_dump.c:7051 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "čtu indexy pro tabulku \"%s.%s\"" -#: pg_dump.c:7262 +#: pg_dump.c:7466 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "čtu cizí klíče pro tabulku \"%s.%s\"" -#: pg_dump.c:7481 +#: pg_dump.c:7747 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "selhala kontrola, OID %u rodičovské tabulky u pg_rewrite položky OID %u nelze najít" -#: pg_dump.c:7564 +#: pg_dump.c:7830 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "čtu triggery pro tabulku \"%s.%s\"" -#: pg_dump.c:7697 +#: pg_dump.c:7963 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "dotaz vrátil prázdné jméno referencované tabulky pro trigger \"%s\" cizího klíče pro tabulku \"%s\" (OID tabulky: %u)" -#: pg_dump.c:8252 +#: pg_dump.c:8518 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "hledám sloupce a typy pro tabulku \"%s.%s\"" -#: pg_dump.c:8388 +#: pg_dump.c:8654 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "neplatné číslování sloupců v tabulce \"%s\"" -#: pg_dump.c:8425 +#: pg_dump.c:8691 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "hledám DEFAULT výrazy pro tabulku \"%s.%s\"" -#: pg_dump.c:8447 +#: pg_dump.c:8713 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "neplatná \"adnum\" hodnota %d pro tabulku \"%s\"" -#: pg_dump.c:8512 +#: pg_dump.c:8778 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "hledám CHECK omezení pro tabulku \"%s.%s\"" -#: pg_dump.c:8561 +#: pg_dump.c:8827 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" @@ -1976,172 +1983,172 @@ msgstr[0] "očekáván %d check constraint na tabulce \"%s\" nalezeno %d" msgstr[1] "očekávány %d check constrainty na tabulce \"%s\" nalezeno %d" msgstr[2] "očekáváno %d check constraintů na tabulce \"%s\" nalezeno %d" -#: pg_dump.c:8565 +#: pg_dump.c:8831 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Systémové katalogy mohou být poškozeny.)" -#: pg_dump.c:10146 +#: pg_dump.c:10417 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "typtype datového typu \"%s\" se zdá být neplatný" -#: pg_dump.c:11500 +#: pg_dump.c:11771 #, c-format msgid "bogus value in proargmodes array" msgstr "nesmyslná hodnota v \"proargmodes\" poli" -#: pg_dump.c:11872 +#: pg_dump.c:12143 #, c-format msgid "could not parse proallargtypes array" msgstr "nelze naparsovat pole \"proallargtypes\"" -#: pg_dump.c:11888 +#: pg_dump.c:12159 #, c-format msgid "could not parse proargmodes array" msgstr "nelze naparsovat pole \"proargmodes\"" -#: pg_dump.c:11902 +#: pg_dump.c:12173 #, c-format msgid "could not parse proargnames array" msgstr "nelze naparsovat pole \"proargnames\"" -#: pg_dump.c:11913 +#: pg_dump.c:12184 #, c-format msgid "could not parse proconfig array" msgstr "nelze naparsovat pole \"proconfig\"" -#: pg_dump.c:11993 +#: pg_dump.c:12264 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "nerozpoznaná \"provolatile\" hodnota pro funkci \"%s\"" -#: pg_dump.c:12043 pg_dump.c:14095 +#: pg_dump.c:12314 pg_dump.c:14372 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "nerozpoznaná proparallel\" hodnota pro funkci \"%s\"" -#: pg_dump.c:12176 pg_dump.c:12285 pg_dump.c:12292 +#: pg_dump.c:12453 pg_dump.c:12562 pg_dump.c:12569 #, c-format msgid "could not find function definition for function with OID %u" msgstr "nelze najít definici pro funkci ID %u" -#: pg_dump.c:12215 +#: pg_dump.c:12492 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "chybná hodnota v položce pg_cast.castfunc nebo pg_cast.castmethod" -#: pg_dump.c:12218 +#: pg_dump.c:12495 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "nesmyslná hodnota v položce \"pg_cast.castmethod\"" -#: pg_dump.c:12311 +#: pg_dump.c:12588 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "chybná definice transformace, alespoň jedno z trffromsql a trftosql by mělo být nenulové" -#: pg_dump.c:12328 +#: pg_dump.c:12605 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "nesmyslná hodnota v položce pg_transform.trffromsql" -#: pg_dump.c:12349 +#: pg_dump.c:12626 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "nesmyslná hodnota v položce pg_transform.trftosql" -#: pg_dump.c:12665 +#: pg_dump.c:12942 #, c-format msgid "could not find operator with OID %s" msgstr "nelze najít operátor s OID %s" -#: pg_dump.c:12733 +#: pg_dump.c:13010 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "neplatný typ \"%c\" access metody \"%s\"" -#: pg_dump.c:13487 +#: pg_dump.c:13764 #, c-format msgid "unrecognized collation provider: %s" msgstr "neočekávaný poskytovatel collation: %s" -#: pg_dump.c:13959 +#: pg_dump.c:14236 #, c-format msgid "aggregate function %s could not be dumped correctly for this database version; ignored" msgstr "agregační funkci %s nelze dumpovat korektně pro tuto verzi databáze; ignorováno" -#: pg_dump.c:14014 +#: pg_dump.c:14291 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "neznámá aggfinalmodify hodnota for agregační funkci \"%s\"" -#: pg_dump.c:14070 +#: pg_dump.c:14347 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "neznámá aggmfinalmodify hodnota for agregační funkci \"%s\"" -#: pg_dump.c:14792 +#: pg_dump.c:15069 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "neznámý typ objektu (%d) ve výchozích privilegiích" -#: pg_dump.c:14810 +#: pg_dump.c:15087 #, c-format msgid "could not parse default ACL list (%s)" msgstr "nelze zpracovat seznam oprávnění ACL (%s)" -#: pg_dump.c:14890 +#: pg_dump.c:15172 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "nelze zpracovat výchozí GRANT ACL seznam (%s) nebo výchozí REVOKE ACL seznam (%s) pro objekt \"%s\" (%s)" -#: pg_dump.c:14898 +#: pg_dump.c:15180 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "nelze zpracovat GRANT ACL seznam (%s) nebo REVOKE ACL seznam (%s) pro objekt \"%s\" (%s)" -#: pg_dump.c:15397 +#: pg_dump.c:15695 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "dotaz na získání definice view \"%s\" nevrátil žádná data" -#: pg_dump.c:15400 +#: pg_dump.c:15698 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "dotaz na získání definice view \"%s\" vrátil více jak jednu definici" -#: pg_dump.c:15407 +#: pg_dump.c:15705 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "definice view \"%s\" se zdá být prázdná (nulová délka)" -#: pg_dump.c:15489 +#: pg_dump.c:15789 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS již není podporováno (tabulka \"%s\")" -#: pg_dump.c:15959 +#: pg_dump.c:16269 #, c-format msgid "invalid number of parents %d for table \"%s\"" msgstr "neplatný počet rodičů %d pro tabulku \"%s\"" -#: pg_dump.c:16296 +#: pg_dump.c:16592 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "neplatné číslo sloupce %d pro tabulku \"%s\"" -#: pg_dump.c:16558 +#: pg_dump.c:16877 #, c-format msgid "missing index for constraint \"%s\"" msgstr "chybí index pro omezení \"%s\"" -#: pg_dump.c:16778 +#: pg_dump.c:17102 #, c-format msgid "unrecognized constraint type: %c" msgstr "neočekávaný typ omezení: %c" -#: pg_dump.c:16910 pg_dump.c:17130 +#: pg_dump.c:17234 pg_dump.c:17454 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" @@ -2149,67 +2156,67 @@ msgstr[0] "dotaz pro načtení dat sekvence \"%s\" vrátil %d řádek (expected msgstr[1] "dotaz pro načtení dat sekvence \"%s\" vrátil %d řádky (expected 1)" msgstr[2] "dotaz pro načtení dat sekvence \"%s\" vrátil %d řádek (expected 1)" -#: pg_dump.c:16944 +#: pg_dump.c:17268 #, c-format msgid "unrecognized sequence type: %s" msgstr "neočekávaný typ sekvence: %s" -#: pg_dump.c:17226 +#: pg_dump.c:17552 #, c-format msgid "unexpected tgtype value: %d" msgstr "neočekávaná hodnota tgtype: %d" -#: pg_dump.c:17300 +#: pg_dump.c:17626 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "neplatný řetězec argumentů (%s) pro trigger \"%s\" tabulky \"%s\"" -#: pg_dump.c:17529 +#: pg_dump.c:17862 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "dotaz k získání pravidla (RULE) \"%s\" pro tabulku \"%s\" selhal: vrácen chybný počet řádků" -#: pg_dump.c:17691 +#: pg_dump.c:18024 #, c-format msgid "could not find referenced extension %u" msgstr "nelze najít odkazované rozšíření %u" -#: pg_dump.c:17903 +#: pg_dump.c:18236 #, c-format msgid "reading dependency data" msgstr "čtu data o závislostech" -#: pg_dump.c:17996 +#: pg_dump.c:18329 #, c-format msgid "no referencing object %u %u" msgstr "žádný odkazující objekt %u: %u" -#: pg_dump.c:18007 +#: pg_dump.c:18340 #, c-format msgid "no referenced object %u %u" msgstr "žádný odkazovaný objekt %u: %u" -#: pg_dump.c:18375 +#: pg_dump.c:18713 #, c-format msgid "could not parse reloptions array" msgstr "nelze naparsovat pole \"reloptions\"" -#: pg_dump_sort.c:327 +#: pg_dump_sort.c:360 #, c-format msgid "invalid dumpId %d" msgstr "neplatné dumpId %d" -#: pg_dump_sort.c:333 +#: pg_dump_sort.c:366 #, c-format msgid "invalid dependency %d" msgstr "neplatná závislost %d" -#: pg_dump_sort.c:566 +#: pg_dump_sort.c:599 #, c-format msgid "could not identify dependency loop" msgstr "nelze identifikovat smyčku závislostí" -#: pg_dump_sort.c:1137 +#: pg_dump_sort.c:1170 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" @@ -2217,74 +2224,74 @@ msgstr[0] "na této tabulce existuje cyklus cizích klíčů:" msgstr[1] "mezi těmito tabulkami existuje cyklus cizích klíčů:" msgstr[2] "mezi těmito tabulkami existuje cyklus cizích klíčů:" -#: pg_dump_sort.c:1141 pg_dump_sort.c:1161 +#: pg_dump_sort.c:1174 pg_dump_sort.c:1194 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1142 +#: pg_dump_sort.c:1175 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." msgstr "Bez zadání volby --disable-triggers nebo dočasného vypnutí constraintů zřejmě nebudete schopni tento dump obnovit." -#: pg_dump_sort.c:1143 +#: pg_dump_sort.c:1176 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." msgstr "Zvažte použití kompletního (full) dumpu namísto --data-only dumpu pro odstranění tohoto problému." -#: pg_dump_sort.c:1155 +#: pg_dump_sort.c:1188 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "nelze vyřešit smyčku závislostí mezi těmito položkami:" -#: pg_dumpall.c:200 +#: pg_dumpall.c:199 #, c-format msgid "" -"The program \"pg_dump\" is needed by %s but was not found in the\n" +"The program \"%s\" is needed by %s but was not found in the\n" "same directory as \"%s\".\n" "Check your installation." msgstr "" -"Program \"pg_dump\" je potřebný pro %s, ale nebyl nalezen ve stejném\n" +"Program \"%s\" je vyžadován aplikací %s, ale nebyl nalezen ve stejném\n" "adresáři jako \"%s\".\n" "Zkontrolujte vaši instalaci." -#: pg_dumpall.c:205 +#: pg_dumpall.c:204 #, c-format msgid "" -"The program \"pg_dump\" was found by \"%s\"\n" +"The program \"%s\" was found by \"%s\"\n" "but was not the same version as %s.\n" "Check your installation." msgstr "" -"Program \"pg_dump\" byl nalezen \"%s\",\n" -"který ale není stejné verze jako %s.\n" +"Program \"%s\" byl nalezen pomocí \"%s\",\n" +"ale nebyl ve stejné verzi jako %s.\n" "Zkontrolujte vaši instalaci." -#: pg_dumpall.c:357 +#: pg_dumpall.c:356 #, c-format msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" msgstr "volba --exclude-database nemůže být použita společně s -g/--globals-only, -r/--roles-only, nebo -t/--tablespaces-only" -#: pg_dumpall.c:366 +#: pg_dumpall.c:365 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "volby -g/--globals-only a -r/--roles-only nelze používat společně" -#: pg_dumpall.c:374 +#: pg_dumpall.c:373 #, c-format msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "volby -g/--globals-only a -t/--tablespaces-only nelze používat společně" -#: pg_dumpall.c:388 +#: pg_dumpall.c:387 #, c-format msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "volby -r/--roles-only a -t/--tablespaces-only nelze používat společně" -#: pg_dumpall.c:449 pg_dumpall.c:1754 +#: pg_dumpall.c:448 pg_dumpall.c:1754 #, c-format msgid "could not connect to database \"%s\"" msgstr "nelze navázat spojení s databází \"%s\"" -#: pg_dumpall.c:463 +#: pg_dumpall.c:462 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" @@ -2293,7 +2300,7 @@ msgstr "" "nelze navázat spojení s databází \"postgres\" nebo \"template1\"\n" "Zadejte prosím alternativní databázi." -#: pg_dumpall.c:617 +#: pg_dumpall.c:616 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2302,67 +2309,67 @@ msgstr "" "%s extrahuje PostgreSQL databázi do souboru s SQL skriptem.\n" "\n" -#: pg_dumpall.c:619 +#: pg_dumpall.c:618 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [VOLBA]...\n" -#: pg_dumpall.c:622 +#: pg_dumpall.c:621 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=SOUBOR výstupní soubor\n" -#: pg_dumpall.c:629 +#: pg_dumpall.c:628 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr " -c, --clean odstranit (drop) databázi před jejím vytvořením\n" -#: pg_dumpall.c:631 +#: pg_dumpall.c:630 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr " -g, --globals-only dump pouze globálních objektů, ne databáze\n" -#: pg_dumpall.c:632 pg_restore.c:489 +#: pg_dumpall.c:631 pg_restore.c:485 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner nevypisuje příkazy k nastavení vlastníka objektů\n" -#: pg_dumpall.c:633 +#: pg_dumpall.c:632 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr " -r, --roles-only dump pouze rolí, ne databází nebo tablespaců\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:634 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr " -S, --superuser=JMÉNO uživatelské jméno superuživatele použité při dumpu\n" -#: pg_dumpall.c:636 +#: pg_dumpall.c:635 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr " -t, --tablespaces-only dump pouze tablespaců, ne databází nebo rolí\n" -#: pg_dumpall.c:642 +#: pg_dumpall.c:641 #, c-format msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" msgstr " --exclude-database=VZOR nedumpuj databáze jejichž jména odpovídají VZORu\n" -#: pg_dumpall.c:649 +#: pg_dumpall.c:648 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords hesla pro role nezahrnovat do dumpu\n" -#: pg_dumpall.c:663 +#: pg_dumpall.c:662 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=CONNSTR specifikace připojení do databáze\n" -#: pg_dumpall.c:665 +#: pg_dumpall.c:664 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=DBNAME alternativní výchozí databáze\n" -#: pg_dumpall.c:672 +#: pg_dumpall.c:671 #, c-format msgid "" "\n" @@ -2430,42 +2437,42 @@ msgstr "nelze zpracovat verzi serveru \"%s\"" msgid "executing %s" msgstr "spouštím: %s" -#: pg_restore.c:312 +#: pg_restore.c:308 #, c-format msgid "one of -d/--dbname and -f/--file must be specified" msgstr "musí být specifikována jedna z voleb -d/--dbname a -f/--file" -#: pg_restore.c:321 +#: pg_restore.c:317 #, c-format msgid "options -d/--dbname and -f/--file cannot be used together" msgstr "volby -d/--dbname a -f/--file nelze používat společně" -#: pg_restore.c:347 +#: pg_restore.c:343 #, c-format msgid "options -C/--create and -1/--single-transaction cannot be used together" msgstr "volby -C/--create a -1/--single-transaction nelze používat společně" -#: pg_restore.c:361 +#: pg_restore.c:357 #, c-format msgid "maximum number of parallel jobs is %d" msgstr "maximální počet paralelních jobů je %d" -#: pg_restore.c:370 +#: pg_restore.c:366 #, c-format msgid "cannot specify both --single-transaction and multiple jobs" msgstr "nelze zadat --single-transaction a několik úloh" -#: pg_restore.c:412 +#: pg_restore.c:408 #, c-format msgid "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" msgstr "neznámý formát archivu \"%s\"; zadejte prosím \"c\", \"d\" nebo \"t\"" -#: pg_restore.c:452 +#: pg_restore.c:448 #, c-format msgid "errors ignored on restore: %d" msgstr "chyby ignorovány při obnovení: %d" -#: pg_restore.c:465 +#: pg_restore.c:461 #, c-format msgid "" "%s restores a PostgreSQL database from an archive created by pg_dump.\n" @@ -2474,47 +2481,47 @@ msgstr "" "%s obnovuje PostgreSQL databázi z archivu vytvořeného pomocí pg_dump.\n" "\n" -#: pg_restore.c:467 +#: pg_restore.c:463 #, c-format msgid " %s [OPTION]... [FILE]\n" msgstr " %s [PŘEPÍNAČ]... [SOUBOR]\n" -#: pg_restore.c:470 +#: pg_restore.c:466 #, c-format msgid " -d, --dbname=NAME connect to database name\n" msgstr " -d, --dbname=JMÉNO jméno cílové databáze\n" -#: pg_restore.c:471 +#: pg_restore.c:467 #, c-format msgid " -f, --file=FILENAME output file name (- for stdout)\n" msgstr " -f, --file=SOUBOR výstupní soubor (- pro stdout)\n" -#: pg_restore.c:472 +#: pg_restore.c:468 #, c-format msgid " -F, --format=c|d|t backup file format (should be automatic)\n" msgstr " -F, --format=c|d|t formát záložního souboru (měl by být automatický)\n" -#: pg_restore.c:473 +#: pg_restore.c:469 #, c-format msgid " -l, --list print summarized TOC of the archive\n" msgstr " -l, --list zobrazit sumarizovaný obsah (TOC) archivu\n" -#: pg_restore.c:474 +#: pg_restore.c:470 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose vypisovat více informací\n" -#: pg_restore.c:475 +#: pg_restore.c:471 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version zobraz informaci o verzi, poté skonči\n" -#: pg_restore.c:476 +#: pg_restore.c:472 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help zobraz tuto nápovědu, poté skonči\n" -#: pg_restore.c:478 +#: pg_restore.c:474 #, c-format msgid "" "\n" @@ -2523,32 +2530,32 @@ msgstr "" "\n" "Přepínače ovlivňující obnovu:\n" -#: pg_restore.c:479 +#: pg_restore.c:475 #, c-format msgid " -a, --data-only restore only the data, no schema\n" msgstr " -a, --data-only obnovit pouze data, ne definice databázových objektů\n" -#: pg_restore.c:481 +#: pg_restore.c:477 #, c-format msgid " -C, --create create the target database\n" msgstr " -C, --create vypíše příkazy pro vytvoření databáze\n" -#: pg_restore.c:482 +#: pg_restore.c:478 #, c-format msgid " -e, --exit-on-error exit on error, default is to continue\n" msgstr " -e, --exit-on-error ukončit při chybě, implicitně pokračuje\n" -#: pg_restore.c:483 +#: pg_restore.c:479 #, c-format msgid " -I, --index=NAME restore named index\n" msgstr " -I, --index=JMÉNO obnovit jmenovaný index\n" -#: pg_restore.c:484 +#: pg_restore.c:480 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" msgstr " -j, --jobs=NUM použij pro obnovu daný počet paralelních jobů\n" -#: pg_restore.c:485 +#: pg_restore.c:481 #, c-format msgid "" " -L, --use-list=FILENAME use table of contents from this file for\n" @@ -2557,68 +2564,68 @@ msgstr "" " -L, --use-list=SOUBOR použít specifikovaný obsah (TOC) pro řazení\n" " výstupu z tohoto souboru\n" -#: pg_restore.c:487 +#: pg_restore.c:483 #, c-format msgid " -n, --schema=NAME restore only objects in this schema\n" msgstr " -n, --schema=NAME obnovit pouze objekty v tomto schématu\n" -#: pg_restore.c:488 +#: pg_restore.c:484 #, c-format msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" msgstr " -N, --exclude-schema=NAME neobnovovat objekty v tomto schématu\n" -#: pg_restore.c:490 +#: pg_restore.c:486 #, c-format msgid " -P, --function=NAME(args) restore named function\n" msgstr "" " -P, --function=JMÉNO(args)\n" " obnovit funkci daného jména\n" -#: pg_restore.c:491 +#: pg_restore.c:487 #, c-format msgid " -s, --schema-only restore only the schema, no data\n" msgstr " -s, --schema-only obnovit pouze definice objektů, bez dat\n" -#: pg_restore.c:492 +#: pg_restore.c:488 #, c-format msgid " -S, --superuser=NAME superuser user name to use for disabling triggers\n" msgstr "" " -S, --superuser=JMÉNO jméno superuživatele použité pro\n" " zakázaní triggerů\n" -#: pg_restore.c:493 +#: pg_restore.c:489 #, c-format msgid " -t, --table=NAME restore named relation (table, view, etc.)\n" msgstr " -t, --table=JMÉNO obnovit pouze jmenovanou relaci (tabulka, pohled, etc.)\n" -#: pg_restore.c:494 +#: pg_restore.c:490 #, c-format msgid " -T, --trigger=NAME restore named trigger\n" msgstr " -T, --trigger=JMÉNO obnovit pouze jmenovaný trigger\n" -#: pg_restore.c:495 +#: pg_restore.c:491 #, c-format msgid " -x, --no-privileges skip restoration of access privileges (grant/revoke)\n" msgstr " -x, --no-privileges přeskočit obnovu přístupových práv (grant/revoke)\n" -#: pg_restore.c:496 +#: pg_restore.c:492 #, c-format msgid " -1, --single-transaction restore as a single transaction\n" msgstr "" " -1, --single-transaction\n" " zpracuj soubor v rámci jedné transakce\n" -#: pg_restore.c:498 +#: pg_restore.c:494 #, c-format msgid " --enable-row-security enable row security\n" msgstr " --enable-row-security povolit row security\n" -#: pg_restore.c:500 +#: pg_restore.c:496 #, c-format msgid " --no-comments do not restore comments\n" msgstr " --no-comments neobnovovat komentáře\n" -#: pg_restore.c:501 +#: pg_restore.c:497 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not be\n" @@ -2627,37 +2634,37 @@ msgstr "" " --no-data-for-failed-tables\n" " neobnovuj data tabulek které nemohly být vytvořeny\n" -#: pg_restore.c:503 +#: pg_restore.c:499 #, c-format msgid " --no-publications do not restore publications\n" msgstr " --no-publications do not restore publications\n" -#: pg_restore.c:504 +#: pg_restore.c:500 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels neobnovuj bezpečnostní štítky\n" -#: pg_restore.c:505 +#: pg_restore.c:501 #, c-format msgid " --no-subscriptions do not restore subscriptions\n" msgstr " --no-subscriptions neobnovovat subskripce\n" -#: pg_restore.c:506 +#: pg_restore.c:502 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces neobnovuj přiřazení tablespaces\n" -#: pg_restore.c:507 +#: pg_restore.c:503 #, c-format msgid " --section=SECTION restore named section (pre-data, data, or post-data)\n" msgstr " --section=SECTION obnov pojmenovanou sekci (pre-data, data, nebo post-data)\n" -#: pg_restore.c:520 +#: pg_restore.c:516 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=ROLENAME před obnovou proveď SET ROLE\n" -#: pg_restore.c:522 +#: pg_restore.c:518 #, c-format msgid "" "\n" @@ -2668,7 +2675,7 @@ msgstr "" "Volby -I, -n, -N, -P, -t, -T, a --section mohou být kombinovány a zadány několikrát\n" "pro výběr více objektů.\n" -#: pg_restore.c:525 +#: pg_restore.c:521 #, c-format msgid "" "\n" @@ -2679,242 +2686,284 @@ msgstr "" "Není-li definován vstupní soubor, je použit standardní vstup.\n" "\n" -#~ msgid "" -#~ " --use-set-session-authorization\n" -#~ " use SET SESSION AUTHORIZATION commands instead of\n" -#~ " ALTER OWNER commands to set ownership\n" -#~ msgstr "" -#~ " --use-set-session-authorization\n" -#~ " používat příkaz SET SESSION AUTHORIZATION namísto\n" -#~ " příkazu ALTER OWNER pro nastavení vlastníka\n" +#~ msgid "could not read symbolic link \"%s\"" +#~ msgstr "nelze číst symbolický link \"%s\"" -#~ msgid " --disable-triggers disable triggers during data-only restore\n" -#~ msgstr " --disable-triggers zakázat volání triggerů během obnovy dat\n" +#~ msgid "child process was terminated by signal %s" +#~ msgstr "potomek byl ukončen signálem %s" -#~ msgid " -O, --no-owner skip restoration of object ownership\n" -#~ msgstr " -O, --no-owner přeskoč nastavení vlastníka objektů\n" +#~ msgid "compress_io" +#~ msgstr "compress_io" -#~ msgid " -c, --clean clean (drop) database objects before recreating\n" -#~ msgstr " -c, --clean odstranit (drop) databázi před jejím vytvořením\n" +#~ msgid "parallel archiver" +#~ msgstr "paralelní archivář" -#~ msgid "%s: options -s/--schema-only and -a/--data-only cannot be used with --section\n" -#~ msgstr "%s: volby -s/--schema-only a -a/--data-only nelze použít s --section\n" +#~ msgid "archiver" +#~ msgstr "archivář" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version ukáže informace o verzi a skončí\n" +#~ msgid "-C and -1 are incompatible options\n" +#~ msgstr "-C a -1 jsou nekompatibilní přepínače\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help ukáže tento text a skončí\n" +#~ msgid "attempting to ascertain archive format\n" +#~ msgstr "pokouším se zjistit formát archivu\n" -#~ msgid "options -s/--schema-only and -a/--data-only cannot be used with --section\n" -#~ msgstr "volby -s/--schema-only a -a/--data-only nelze použít s --section\n" +#~ msgid "allocating AH for %s, format %d\n" +#~ msgstr "alokován AH pro %s, formát %d\n" -#~ msgid "restoring large object OID %u\n" -#~ msgstr "obnovuji \"large object\" s OID %u\n" +#~ msgid "read TOC entry %d (ID %d) for %s %s\n" +#~ msgstr "přečetl jsem TOC záznam %d (ID %d) pro %s %s\n" -#~ msgid "path name too long: %s" -#~ msgstr "cesta příliš dlouhá: %s" +#~ msgid "could not set default_with_oids: %s" +#~ msgstr "nelze nastavit default_with_oids: %s" -#~ msgid "cannot create directory %s, a file with this name exists already\n" -#~ msgstr "nelze vytvořit adresář %s, soubor s tímto jménem již existuje\n" +#~ msgid "entering restore_toc_entries_prefork\n" +#~ msgstr "vstupuji do restore_toc_entries_prefork\n" -#~ msgid "cannot create directory %s, it exists already\n" -#~ msgstr "nelze vytvořit adresář %s, již existuje\n" +#~ msgid "entering restore_toc_entries_parallel\n" +#~ msgstr "vstupuji do restore_toc_entries_parallel\n" -#~ msgid "invalid COPY statement -- could not find \"from stdin\" in string \"%s\" starting at position %lu\n" -#~ msgstr "neplatný COPY příkaz -- nelze najít \"from stdin\" v řetězci \"%s\" začínající na pozici %lu\n" +#~ msgid "entering restore_toc_entries_postfork\n" +#~ msgstr "vstupuji do restore_toc_entries_postfork\n" -#~ msgid "invalid COPY statement -- could not find \"copy\" in string \"%s\"\n" -#~ msgstr "neplatný COPY příkaz -- nelze najít \"copy\" v řetězci \"%s\"\n" +#~ msgid "no item ready\n" +#~ msgstr "žádná položka není připravena\n" -#~ msgid "-C and -c are incompatible options\n" -#~ msgstr "-C a -c jsou nekompatibilní přepínače\n" +#~ msgid "transferring dependency %d -> %d to %d\n" +#~ msgstr "přenáším závislost %d -> %d to %d\n" -#~ msgid "%s: could not parse version \"%s\"\n" -#~ msgstr "%s: nelze zpracovat verzi serveru \"%s\"\n" +#~ msgid "reducing dependencies for %d\n" +#~ msgstr "redukuji závislosti pro %d\n" -#~ msgid "could not parse version string \"%s\"\n" -#~ msgstr "neplatný formát řetězce s verzí \"%s\"\n" +#~ msgid "custom archiver" +#~ msgstr "vlastní archivář" -#~ msgid "could not create worker thread: %s\n" -#~ msgstr "nelze vytvořit worker thread: %s\n" +#~ msgid "archiver (db)" +#~ msgstr "archivář (db)" -#~ msgid "parallel_restore should not return\n" -#~ msgstr "parallel_restore by neměl skončit\n" +#~ msgid "failed to reconnect to database\n" +#~ msgstr "selhalo znovunavázání spojení s databází\n" -#~ msgid "worker process crashed: status %d\n" -#~ msgstr "worker proces selhal: status %d\n" +#~ msgid "failed to connect to database\n" +#~ msgstr "selhalo spojení s databází\n" -#~ msgid "%s: could not parse ACL list (%s) for database \"%s\"\n" -#~ msgstr "%s: nelze zpracovat ACL seznam (%s) pro databázi \"%s\"\n" +#~ msgid "directory archiver" +#~ msgstr "directory archiver" -#~ msgid "query to get data of sequence \"%s\" returned name \"%s\"\n" -#~ msgstr "dotaz na získání dat sekvence \"%s\" vrátil jméno \"%s\"\n" +#~ msgid "tar archiver" +#~ msgstr "tar archivář" -#~ msgid "server version must be at least 7.3 to use schema selection switches\n" -#~ msgstr "verze serveru musí být alespoň 7.3 pro použití přepínačů prů výběr schématu\n" +#~ msgid "moving from position %s to next member at file position %s\n" +#~ msgstr "přecházím z pozice %s na následujícího položky na pozici souboru %s\n" -#~ msgid "could not open output file \"%s\" for writing\n" -#~ msgstr "nelze otevřít výstupní soubor \"%s\" pro zápis\n" +#~ msgid "now at file position %s\n" +#~ msgstr "nyní na pozici souboru %s\n" -#~ msgid "mismatch in actual vs. predicted file position (%s vs. %s)\n" -#~ msgstr "aktuální a předpokládaná pozice souboru se neshodují (%s vs. %s)\n" +#~ msgid "skipping tar member %s\n" +#~ msgstr "přeskakován tar člen %s\n" -#~ msgid "could not output padding at end of tar member\n" -#~ msgstr "nelze zapsat vycpávku (padding) na konec položky taru\n" +#~ msgid "TOC Entry %s at %s (length %s, checksum %d)\n" +#~ msgstr "TOC položka %s na %s (délka %s, kontrolní součet %d)\n" -#~ msgid "archive member too large for tar format\n" -#~ msgstr "položka archivu je příliš velká pro formát tar\n" +#~ msgid "options --inserts/--column-inserts and -o/--oids cannot be used together\n" +#~ msgstr "volby --inserts/--column-inserts a -o/--oids nelze používat společně\n" -#~ msgid "could not write null block at end of tar archive\n" -#~ msgstr "nelze zapsat null blok na konec tar archivu\n" +#~ msgid "(The INSERT command cannot set OIDs.)\n" +#~ msgstr "(Příkaz INSERT nemůže nastavovat OID.)\n" -#~ msgid "could not write byte\n" -#~ msgstr "nelze zapsat byte\n" +#~ msgid " -o, --oids include OIDs in dump\n" +#~ msgstr " -o, --oids zahrnout OID do dumpu\n" -#~ msgid "could not write byte: %s\n" -#~ msgstr "nelze zapsat byte: %s\n" +#~ msgid "WARNING: could not parse reloptions array\n" +#~ msgstr "VAROVÁNÍ: nelze naparsovat pole reloptions\n" -#~ msgid "could not find slot of finished worker\n" -#~ msgstr "nelze najít slot ukončeného workera\n" +#~ msgid "sorter" +#~ msgstr "sorter" -#~ msgid "unexpected end of file\n" -#~ msgstr "neočekávaný konec souboru\n" +#~ msgid " %s\n" +#~ msgstr " %s\n" -#~ msgid "could not write to custom output routine\n" -#~ msgstr "nelze zapsat do vlastní výstupní rutiny\n" +#~ msgid "%s: option --if-exists requires option -c/--clean\n" +#~ msgstr "%s: volba --if-exists vyžaduje volbu -c/--clean\n" -#~ msgid "setting owner and privileges for %s %s\n" -#~ msgstr "nastavuji vlastníka a přístupová práva pro %s %s\n" +#~ msgid "%s: could not open the output file \"%s\": %s\n" +#~ msgstr "%s: nelze otevřít výstupní soubor \"%s\": %s\n" -#~ msgid "terminated by user\n" -#~ msgstr "ukončeno uživatelem\n" +#~ msgid "%s: invalid client encoding \"%s\" specified\n" +#~ msgstr "%s: specifikováno neplatné klientské kódování \"%s\"\n" -#~ msgid "error processing a parallel work item\n" -#~ msgstr "chyba při paralelním zpracovávání položky\n" +#~ msgid "%s: executing %s\n" +#~ msgstr "%s: vykonávám %s\n" -#~ msgid "worker is terminating\n" -#~ msgstr "worker končí\n" +#~ msgid "%s: query failed: %s" +#~ msgstr "%s: dotaz selhal: %s" -#~ msgid "%s: invalid number of parallel jobs\n" -#~ msgstr "%s: neplatný počet paralelních jobů\n" +#~ msgid "%s: query was: %s\n" +#~ msgstr "%s: dotaz byl: %s\n" + +#~ msgid "%s: options -s/--schema-only and -a/--data-only cannot be used together\n" +#~ msgstr "%s: volby -s/--schema-only a -a/--data-only nelze použít najednou\n" #~ msgid "%s: options -c/--clean and -a/--data-only cannot be used together\n" #~ msgstr "%s: volby -c/--clean a -a/--data-only nelze používat společně\n" -#~ msgid "%s: options -s/--schema-only and -a/--data-only cannot be used together\n" -#~ msgstr "%s: volby -s/--schema-only a -a/--data-only nelze použít najednou\n" +#~ msgid "%s: invalid number of parallel jobs\n" +#~ msgstr "%s: neplatný počet paralelních jobů\n" -#~ msgid "%s: query was: %s\n" -#~ msgstr "%s: dotaz byl: %s\n" +#~ msgid "worker is terminating\n" +#~ msgstr "worker končí\n" -#~ msgid "%s: query failed: %s" -#~ msgstr "%s: dotaz selhal: %s" +#~ msgid "error processing a parallel work item\n" +#~ msgstr "chyba při paralelním zpracovávání položky\n" -#~ msgid "%s: executing %s\n" -#~ msgstr "%s: vykonávám %s\n" +#~ msgid "terminated by user\n" +#~ msgstr "ukončeno uživatelem\n" -#~ msgid "%s: invalid client encoding \"%s\" specified\n" -#~ msgstr "%s: specifikováno neplatné klientské kódování \"%s\"\n" +#~ msgid "setting owner and privileges for %s %s\n" +#~ msgstr "nastavuji vlastníka a přístupová práva pro %s %s\n" -#~ msgid "%s: could not open the output file \"%s\": %s\n" -#~ msgstr "%s: nelze otevřít výstupní soubor \"%s\": %s\n" +#~ msgid "could not write to custom output routine\n" +#~ msgstr "nelze zapsat do vlastní výstupní rutiny\n" -#~ msgid "%s: option --if-exists requires option -c/--clean\n" -#~ msgstr "%s: volba --if-exists vyžaduje volbu -c/--clean\n" +#~ msgid "unexpected end of file\n" +#~ msgstr "neočekávaný konec souboru\n" -#~ msgid " %s\n" -#~ msgstr " %s\n" +#~ msgid "could not find slot of finished worker\n" +#~ msgstr "nelze najít slot ukončeného workera\n" -#~ msgid "sorter" -#~ msgstr "sorter" +#~ msgid "could not write byte: %s\n" +#~ msgstr "nelze zapsat byte: %s\n" -#~ msgid "WARNING: could not parse reloptions array\n" -#~ msgstr "VAROVÁNÍ: nelze naparsovat pole reloptions\n" +#~ msgid "could not write byte\n" +#~ msgstr "nelze zapsat byte\n" -#~ msgid " -o, --oids include OIDs in dump\n" -#~ msgstr " -o, --oids zahrnout OID do dumpu\n" +#~ msgid "could not write null block at end of tar archive\n" +#~ msgstr "nelze zapsat null blok na konec tar archivu\n" -#~ msgid "(The INSERT command cannot set OIDs.)\n" -#~ msgstr "(Příkaz INSERT nemůže nastavovat OID.)\n" +#~ msgid "archive member too large for tar format\n" +#~ msgstr "položka archivu je příliš velká pro formát tar\n" -#~ msgid "options --inserts/--column-inserts and -o/--oids cannot be used together\n" -#~ msgstr "volby --inserts/--column-inserts a -o/--oids nelze používat společně\n" +#~ msgid "could not output padding at end of tar member\n" +#~ msgstr "nelze zapsat vycpávku (padding) na konec položky taru\n" -#~ msgid "TOC Entry %s at %s (length %s, checksum %d)\n" -#~ msgstr "TOC položka %s na %s (délka %s, kontrolní součet %d)\n" +#~ msgid "mismatch in actual vs. predicted file position (%s vs. %s)\n" +#~ msgstr "aktuální a předpokládaná pozice souboru se neshodují (%s vs. %s)\n" -#~ msgid "skipping tar member %s\n" -#~ msgstr "přeskakován tar člen %s\n" +#~ msgid "could not open output file \"%s\" for writing\n" +#~ msgstr "nelze otevřít výstupní soubor \"%s\" pro zápis\n" -#~ msgid "now at file position %s\n" -#~ msgstr "nyní na pozici souboru %s\n" +#~ msgid "server version must be at least 7.3 to use schema selection switches\n" +#~ msgstr "verze serveru musí být alespoň 7.3 pro použití přepínačů prů výběr schématu\n" -#~ msgid "moving from position %s to next member at file position %s\n" -#~ msgstr "přecházím z pozice %s na následujícího položky na pozici souboru %s\n" +#~ msgid "query to get data of sequence \"%s\" returned name \"%s\"\n" +#~ msgstr "dotaz na získání dat sekvence \"%s\" vrátil jméno \"%s\"\n" -#~ msgid "tar archiver" -#~ msgstr "tar archivář" +#~ msgid "%s: could not parse ACL list (%s) for database \"%s\"\n" +#~ msgstr "%s: nelze zpracovat ACL seznam (%s) pro databázi \"%s\"\n" -#~ msgid "directory archiver" -#~ msgstr "directory archiver" +#~ msgid "worker process crashed: status %d\n" +#~ msgstr "worker proces selhal: status %d\n" -#~ msgid "failed to connect to database\n" -#~ msgstr "selhalo spojení s databází\n" +#~ msgid "parallel_restore should not return\n" +#~ msgstr "parallel_restore by neměl skončit\n" -#~ msgid "failed to reconnect to database\n" -#~ msgstr "selhalo znovunavázání spojení s databází\n" +#~ msgid "could not create worker thread: %s\n" +#~ msgstr "nelze vytvořit worker thread: %s\n" -#~ msgid "archiver (db)" -#~ msgstr "archivář (db)" +#~ msgid "could not parse version string \"%s\"\n" +#~ msgstr "neplatný formát řetězce s verzí \"%s\"\n" -#~ msgid "custom archiver" -#~ msgstr "vlastní archivář" +#~ msgid "%s: could not parse version \"%s\"\n" +#~ msgstr "%s: nelze zpracovat verzi serveru \"%s\"\n" -#~ msgid "reducing dependencies for %d\n" -#~ msgstr "redukuji závislosti pro %d\n" +#~ msgid "-C and -c are incompatible options\n" +#~ msgstr "-C a -c jsou nekompatibilní přepínače\n" -#~ msgid "transferring dependency %d -> %d to %d\n" -#~ msgstr "přenáším závislost %d -> %d to %d\n" +#~ msgid "invalid COPY statement -- could not find \"copy\" in string \"%s\"\n" +#~ msgstr "neplatný COPY příkaz -- nelze najít \"copy\" v řetězci \"%s\"\n" -#~ msgid "no item ready\n" -#~ msgstr "žádná položka není připravena\n" +#~ msgid "invalid COPY statement -- could not find \"from stdin\" in string \"%s\" starting at position %lu\n" +#~ msgstr "neplatný COPY příkaz -- nelze najít \"from stdin\" v řetězci \"%s\" začínající na pozici %lu\n" -#~ msgid "entering restore_toc_entries_postfork\n" -#~ msgstr "vstupuji do restore_toc_entries_postfork\n" +#~ msgid "cannot create directory %s, it exists already\n" +#~ msgstr "nelze vytvořit adresář %s, již existuje\n" -#~ msgid "entering restore_toc_entries_parallel\n" -#~ msgstr "vstupuji do restore_toc_entries_parallel\n" +#~ msgid "cannot create directory %s, a file with this name exists already\n" +#~ msgstr "nelze vytvořit adresář %s, soubor s tímto jménem již existuje\n" -#~ msgid "entering restore_toc_entries_prefork\n" -#~ msgstr "vstupuji do restore_toc_entries_prefork\n" +#~ msgid "path name too long: %s" +#~ msgstr "cesta příliš dlouhá: %s" -#~ msgid "could not set default_with_oids: %s" -#~ msgstr "nelze nastavit default_with_oids: %s" +#~ msgid "restoring large object OID %u\n" +#~ msgstr "obnovuji \"large object\" s OID %u\n" -#~ msgid "read TOC entry %d (ID %d) for %s %s\n" -#~ msgstr "přečetl jsem TOC záznam %d (ID %d) pro %s %s\n" +#~ msgid "options -s/--schema-only and -a/--data-only cannot be used with --section\n" +#~ msgstr "volby -s/--schema-only a -a/--data-only nelze použít s --section\n" -#~ msgid "allocating AH for %s, format %d\n" -#~ msgstr "alokován AH pro %s, formát %d\n" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help ukáže tento text a skončí\n" -#~ msgid "attempting to ascertain archive format\n" -#~ msgstr "pokouším se zjistit formát archivu\n" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version ukáže informace o verzi a skončí\n" -#~ msgid "-C and -1 are incompatible options\n" -#~ msgstr "-C a -1 jsou nekompatibilní přepínače\n" +#~ msgid "%s: options -s/--schema-only and -a/--data-only cannot be used with --section\n" +#~ msgstr "%s: volby -s/--schema-only a -a/--data-only nelze použít s --section\n" -#~ msgid "archiver" -#~ msgstr "archivář" +#~ msgid " -c, --clean clean (drop) database objects before recreating\n" +#~ msgstr " -c, --clean odstranit (drop) databázi před jejím vytvořením\n" -#~ msgid "parallel archiver" -#~ msgstr "paralelní archivář" +#~ msgid " -O, --no-owner skip restoration of object ownership\n" +#~ msgstr " -O, --no-owner přeskoč nastavení vlastníka objektů\n" -#~ msgid "compress_io" -#~ msgstr "compress_io" +#~ msgid " --disable-triggers disable triggers during data-only restore\n" +#~ msgstr " --disable-triggers zakázat volání triggerů během obnovy dat\n" -#~ msgid "child process was terminated by signal %s" -#~ msgstr "potomek byl ukončen signálem %s" +#~ msgid "" +#~ " --use-set-session-authorization\n" +#~ " use SET SESSION AUTHORIZATION commands instead of\n" +#~ " ALTER OWNER commands to set ownership\n" +#~ msgstr "" +#~ " --use-set-session-authorization\n" +#~ " používat příkaz SET SESSION AUTHORIZATION namísto\n" +#~ " příkazu ALTER OWNER pro nastavení vlastníka\n" -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "nelze číst symbolický link \"%s\"" +#~ msgid "" +#~ "The program \"pg_dump\" was found by \"%s\"\n" +#~ "but was not the same version as %s.\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Program \"pg_dump\" byl nalezen \"%s\",\n" +#~ "který ale není stejné verze jako %s.\n" +#~ "Zkontrolujte vaši instalaci." + +#~ msgid "" +#~ "The program \"pg_dump\" is needed by %s but was not found in the\n" +#~ "same directory as \"%s\".\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Program \"pg_dump\" je potřebný pro %s, ale nebyl nalezen ve stejném\n" +#~ "adresáři jako \"%s\".\n" +#~ "Zkontrolujte vaši instalaci." + +#~ msgid "Report bugs to .\n" +#~ msgstr "Oznámení o chybách zasílejte na .\n" + +#~ msgid "internal error -- neither th nor fh specified in tarReadRaw()" +#~ msgstr "interní chyba -- ani th ani fh nespecifikován v tarReadRaw()" + +#~ msgid "connection needs password" +#~ msgstr "spojení vyžaduje heslo" + +#~ msgid "could not reconnect to database: %s" +#~ msgstr "nelze znovu navázat spojení s databází: %s" + +#~ msgid "could not reconnect to database" +#~ msgstr "nelze znovu navázat spojení s databází" + +#~ msgid "connecting to database \"%s\" as user \"%s\"" +#~ msgstr "připojuji se k databázi \"%s\" jako uživatel \"%s\"" + +#~ msgid "ftell mismatch with expected position -- ftell used" +#~ msgstr "ftell neodpovídá očekávané pozici -- použit ftell" + +#~ msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive" +#~ msgstr "v archivu nelze najít blok ID %d -- možná kvůli out-of-order restore požadavku, který nemohl být vyřízen kvůli chybějícím datovým offsetům v archivu" diff --git a/src/bin/pg_dump/po/de.po b/src/bin/pg_dump/po/de.po index 96fdda843d545..21298e4e61020 100644 --- a/src/bin/pg_dump/po/de.po +++ b/src/bin/pg_dump/po/de.po @@ -1,14 +1,14 @@ # German message translation file for pg_dump and friends -# Peter Eisentraut , 2001 - 2020. +# Peter Eisentraut , 2001 - 2021. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 13\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-09 00:17+0000\n" -"PO-Revision-Date: 2020-05-09 09:54+0200\n" +"POT-Creation-Date: 2021-05-01 15:18+0000\n" +"PO-Revision-Date: 2021-05-02 09:32+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -17,57 +17,57 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "Fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "Fehler: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "Warnung: " -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "konnte aktuelles Verzeichnis nicht ermitteln: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "ungültige Programmdatei »%s«" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "konnte Programmdatei »%s« nicht lesen" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "konnte kein »%s« zum Ausführen finden" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "konnte nicht in Verzeichnis »%s« wechseln: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht lesen: %m" -#: ../../common/exec.c:410 +#: ../../common/exec.c:409 parallel.c:1614 #, c-format -msgid "pclose failed: %m" -msgstr "pclose fehlgeschlagen: %m" +msgid "%s() failed: %m" +msgstr "%s() fehlgeschlagen: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" msgstr "Speicher aufgebraucht" @@ -112,212 +112,217 @@ msgstr "Kindprozess wurde von Signal %d beendet: %s" msgid "child process exited with unrecognized status %d" msgstr "Kindprozess hat mit unbekanntem Status %d beendet" -#: common.c:121 +#: common.c:124 #, c-format msgid "reading extensions" msgstr "lese Erweiterungen" -#: common.c:125 +#: common.c:128 #, c-format msgid "identifying extension members" msgstr "identifiziere Erweiterungselemente" -#: common.c:128 +#: common.c:131 #, c-format msgid "reading schemas" msgstr "lese Schemas" -#: common.c:138 +#: common.c:141 #, c-format msgid "reading user-defined tables" msgstr "lese benutzerdefinierte Tabellen" -#: common.c:145 +#: common.c:148 #, c-format msgid "reading user-defined functions" msgstr "lese benutzerdefinierte Funktionen" -#: common.c:150 +#: common.c:153 #, c-format msgid "reading user-defined types" msgstr "lese benutzerdefinierte Typen" -#: common.c:155 +#: common.c:158 #, c-format msgid "reading procedural languages" msgstr "lese prozedurale Sprachen" -#: common.c:158 +#: common.c:161 #, c-format msgid "reading user-defined aggregate functions" msgstr "lese benutzerdefinierte Aggregatfunktionen" -#: common.c:161 +#: common.c:164 #, c-format msgid "reading user-defined operators" msgstr "lese benutzerdefinierte Operatoren" -#: common.c:165 +#: common.c:168 #, c-format msgid "reading user-defined access methods" msgstr "lese benutzerdefinierte Zugriffsmethoden" -#: common.c:168 +#: common.c:171 #, c-format msgid "reading user-defined operator classes" msgstr "lese benutzerdefinierte Operatorklassen" -#: common.c:171 +#: common.c:174 #, c-format msgid "reading user-defined operator families" msgstr "lese benutzerdefinierte Operatorfamilien" -#: common.c:174 +#: common.c:177 #, c-format msgid "reading user-defined text search parsers" msgstr "lese benutzerdefinierte Textsuche-Parser" -#: common.c:177 +#: common.c:180 #, c-format msgid "reading user-defined text search templates" msgstr "lese benutzerdefinierte Textsuche-Templates" -#: common.c:180 +#: common.c:183 #, c-format msgid "reading user-defined text search dictionaries" msgstr "lese benutzerdefinierte Textsuchewörterbücher" -#: common.c:183 +#: common.c:186 #, c-format msgid "reading user-defined text search configurations" msgstr "lese benutzerdefinierte Textsuchekonfigurationen" -#: common.c:186 +#: common.c:189 #, c-format msgid "reading user-defined foreign-data wrappers" msgstr "lese benutzerdefinierte Fremddaten-Wrapper" -#: common.c:189 +#: common.c:192 #, c-format msgid "reading user-defined foreign servers" msgstr "lese benutzerdefinierte Fremdserver" -#: common.c:192 +#: common.c:195 #, c-format msgid "reading default privileges" msgstr "lese Vorgabeprivilegien" -#: common.c:195 +#: common.c:198 #, c-format msgid "reading user-defined collations" msgstr "lese benutzerdefinierte Sortierfolgen" -#: common.c:199 +#: common.c:202 #, c-format msgid "reading user-defined conversions" msgstr "lese benutzerdefinierte Konversionen" -#: common.c:202 +#: common.c:205 #, c-format msgid "reading type casts" msgstr "lese Typumwandlungen" -#: common.c:205 +#: common.c:208 #, c-format msgid "reading transforms" msgstr "lese Transformationen" -#: common.c:208 +#: common.c:211 #, c-format msgid "reading table inheritance information" msgstr "lese Tabellenvererbungsinformationen" -#: common.c:211 +#: common.c:214 #, c-format msgid "reading event triggers" msgstr "lese Ereignistrigger" -#: common.c:215 +#: common.c:218 #, c-format msgid "finding extension tables" msgstr "finde Erweiterungstabellen" -#: common.c:219 +#: common.c:222 #, c-format msgid "finding inheritance relationships" msgstr "fine Vererbungsbeziehungen" -#: common.c:222 +#: common.c:225 #, c-format msgid "reading column info for interesting tables" msgstr "lese Spalteninfo für interessante Tabellen" -#: common.c:225 +#: common.c:228 #, c-format msgid "flagging inherited columns in subtables" msgstr "markiere vererbte Spalten in abgeleiteten Tabellen" -#: common.c:228 +#: common.c:231 #, c-format msgid "reading indexes" msgstr "lese Indexe" -#: common.c:231 +#: common.c:234 #, c-format msgid "flagging indexes in partitioned tables" msgstr "markiere Indexe in partitionierten Tabellen" -#: common.c:234 +#: common.c:237 #, c-format msgid "reading extended statistics" msgstr "lese erweiterte Statistiken" -#: common.c:237 +#: common.c:240 #, c-format msgid "reading constraints" msgstr "lese Constraints" -#: common.c:240 +#: common.c:243 #, c-format msgid "reading triggers" msgstr "lese Trigger" -#: common.c:243 +#: common.c:246 #, c-format msgid "reading rewrite rules" msgstr "lese Umschreiberegeln" -#: common.c:246 +#: common.c:249 #, c-format msgid "reading policies" msgstr "lese Policies" -#: common.c:249 +#: common.c:252 #, c-format msgid "reading publications" msgstr "lese Publikationen" -#: common.c:252 +#: common.c:257 #, c-format msgid "reading publication membership" msgstr "lese Publikationsmitgliedschaft" -#: common.c:255 +#: common.c:260 #, c-format msgid "reading subscriptions" msgstr "lese Subskriptionen" -#: common.c:1025 +#: common.c:338 +#, c-format +msgid "invalid number of parents %d for table \"%s\"" +msgstr "ungültige Anzahl Eltern %d für Tabelle »%s«" + +#: common.c:1098 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "Sanity-Check fehlgeschlagen, Eltern-OID %u von Tabelle »%s« (OID %u) nicht gefunden" -#: common.c:1067 +#: common.c:1140 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "konnte numerisches Array »%s« nicht parsen: zu viele Zahlen" -#: common.c:1082 +#: common.c:1155 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "konnte numerisches Array »%s« nicht parsen: ungültiges Zeichen in Zahl" @@ -358,43 +363,43 @@ msgstr "konnte Daten nicht dekomprimieren: %s" msgid "could not close compression library: %s" msgstr "konnte Komprimierungsbibliothek nicht schließen: %s" -#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:557 pg_backup_tar.c:560 +#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:551 pg_backup_tar.c:554 #, c-format msgid "could not read from input file: %s" msgstr "konnte nicht aus Eingabedatei lesen: %s" -#: compress_io.c:623 pg_backup_custom.c:575 pg_backup_directory.c:534 -#: pg_backup_tar.c:793 pg_backup_tar.c:816 +#: compress_io.c:623 pg_backup_custom.c:643 pg_backup_directory.c:552 +#: pg_backup_tar.c:787 pg_backup_tar.c:810 #, c-format msgid "could not read from input file: end of file" msgstr "konnte nicht aus Eingabedatei lesen: Dateiende" -#: parallel.c:267 +#: parallel.c:254 #, c-format -msgid "WSAStartup failed: %d" -msgstr "WSAStartup fehlgeschlagen: %d" +msgid "%s() failed: error code %d" +msgstr "%s() fehlgeschlagen: Fehlercode %d" -#: parallel.c:978 +#: parallel.c:964 #, c-format msgid "could not create communication channels: %m" msgstr "konnte Kommunikationskanäle nicht erzeugen: %m" -#: parallel.c:1035 +#: parallel.c:1021 #, c-format msgid "could not create worker process: %m" msgstr "konnte Arbeitsprozess nicht erzeugen: %m" -#: parallel.c:1165 +#: parallel.c:1151 #, c-format -msgid "unrecognized command received from master: \"%s\"" -msgstr "unbekannter Befehl vom Master empfangen: »%s«" +msgid "unrecognized command received from leader: \"%s\"" +msgstr "unbekannter Befehl vom Leader-Prozess empfangen: »%s«" -#: parallel.c:1208 parallel.c:1446 +#: parallel.c:1194 parallel.c:1432 #, c-format msgid "invalid message received from worker: \"%s\"" msgstr "ungültige Nachricht vom Arbeitsprozess empfangen: »%s«" -#: parallel.c:1340 +#: parallel.c:1326 #, c-format msgid "" "could not obtain lock on relation \"%s\"\n" @@ -403,681 +408,656 @@ msgstr "" "konnte Sperre für Relation »%s« nicht setzen\n" "Das bedeutet meistens, dass jemand eine ACCESS-EXCLUSIVE-Sperre auf die Tabelle gesetzt hat, nachdem der pg-dump-Elternprozess die anfängliche ACCESS-SHARE-Sperre gesetzt hatte." -#: parallel.c:1429 +#: parallel.c:1415 #, c-format msgid "a worker process died unexpectedly" msgstr "ein Arbeitsprozess endete unerwartet" -#: parallel.c:1551 parallel.c:1669 +#: parallel.c:1537 parallel.c:1655 #, c-format msgid "could not write to the communication channel: %m" msgstr "konnte nicht in den Kommunikationskanal schreiben: %m" -#: parallel.c:1628 -#, c-format -msgid "select() failed: %m" -msgstr "select() fehlgeschlagen: %m" - -#: parallel.c:1753 +#: parallel.c:1739 #, c-format msgid "pgpipe: could not create socket: error code %d" msgstr "pgpipe: konnte Socket nicht erzeugen: Fehlercode %d" -#: parallel.c:1764 +#: parallel.c:1750 #, c-format msgid "pgpipe: could not bind: error code %d" msgstr "pgpipe: konnte nicht binden: Fehlercode %d" -#: parallel.c:1771 +#: parallel.c:1757 #, c-format msgid "pgpipe: could not listen: error code %d" msgstr "pgpipe: konnte nicht auf Socket hören: Fehlercode %d" -#: parallel.c:1778 +#: parallel.c:1764 #, c-format -msgid "pgpipe: getsockname() failed: error code %d" -msgstr "pgpipe: getsockname() fehlgeschlagen: Fehlercode %d" +msgid "pgpipe: %s() failed: error code %d" +msgstr "pgpipe: %s() fehlgeschlagen: Fehlercode %d" -#: parallel.c:1789 +#: parallel.c:1775 #, c-format msgid "pgpipe: could not create second socket: error code %d" msgstr "pgpipe: konnte zweites Socket nicht erzeugen: Fehlercode %d" -#: parallel.c:1798 +#: parallel.c:1784 #, c-format msgid "pgpipe: could not connect socket: error code %d" msgstr "pgpipe: konnte Socket nicht verbinden: Fehlercode %d" -#: parallel.c:1807 +#: parallel.c:1793 #, c-format msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: konnte Verbindung nicht annehmen: Fehlercode %d" -#: pg_backup_archiver.c:271 pg_backup_archiver.c:1591 +#: pg_backup_archiver.c:278 pg_backup_archiver.c:1577 #, c-format msgid "could not close output file: %m" msgstr "konnte Ausgabedatei nicht schließen: %m" -#: pg_backup_archiver.c:315 pg_backup_archiver.c:319 +#: pg_backup_archiver.c:322 pg_backup_archiver.c:326 #, c-format msgid "archive items not in correct section order" msgstr "Archivelemente nicht in richtiger Abschnittsreihenfolge" -#: pg_backup_archiver.c:325 +#: pg_backup_archiver.c:332 #, c-format msgid "unexpected section code %d" msgstr "unerwarteter Abschnittscode %d" -#: pg_backup_archiver.c:362 +#: pg_backup_archiver.c:369 #, c-format msgid "parallel restore is not supported with this archive file format" msgstr "parallele Wiederherstellung wird von diesem Archivdateiformat nicht unterstützt" -#: pg_backup_archiver.c:366 +#: pg_backup_archiver.c:373 #, c-format msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump" msgstr "parallele Wiederherstellung wird mit Archiven, die mit pg_dump vor 8.0 erstellt worden sind, nicht unterstützt" -#: pg_backup_archiver.c:384 +#: pg_backup_archiver.c:391 #, c-format msgid "cannot restore from compressed archive (compression not supported in this installation)" msgstr "kann komprimiertes Archiv nicht wiederherstellen (Komprimierung in dieser Installation nicht unterstützt)" -#: pg_backup_archiver.c:401 +#: pg_backup_archiver.c:408 #, c-format msgid "connecting to database for restore" msgstr "verbinde mit der Datenbank zur Wiederherstellung" -#: pg_backup_archiver.c:403 +#: pg_backup_archiver.c:410 #, c-format msgid "direct database connections are not supported in pre-1.3 archives" msgstr "direkte Datenbankverbindungen sind in Archiven vor Version 1.3 nicht unterstützt" -#: pg_backup_archiver.c:448 +#: pg_backup_archiver.c:453 #, c-format msgid "implied data-only restore" msgstr "implizit werden nur Daten wiederhergestellt" -#: pg_backup_archiver.c:514 +#: pg_backup_archiver.c:519 #, c-format msgid "dropping %s %s" msgstr "entferne %s %s" -#: pg_backup_archiver.c:609 +#: pg_backup_archiver.c:614 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "konnte nicht bestimmen, wo IF EXISTS in die Anweisung »%s« eingefügt werden soll" -#: pg_backup_archiver.c:765 pg_backup_archiver.c:767 +#: pg_backup_archiver.c:770 pg_backup_archiver.c:772 #, c-format msgid "warning from original dump file: %s" msgstr "Warnung aus der ursprünglichen Ausgabedatei: %s" -#: pg_backup_archiver.c:782 +#: pg_backup_archiver.c:787 #, c-format msgid "creating %s \"%s.%s\"" msgstr "erstelle %s »%s.%s«" -#: pg_backup_archiver.c:785 +#: pg_backup_archiver.c:790 #, c-format msgid "creating %s \"%s\"" msgstr "erstelle %s »%s«" -#: pg_backup_archiver.c:842 +#: pg_backup_archiver.c:840 #, c-format msgid "connecting to new database \"%s\"" msgstr "verbinde mit neuer Datenbank »%s«" -#: pg_backup_archiver.c:870 +#: pg_backup_archiver.c:867 #, c-format msgid "processing %s" msgstr "verarbeite %s" -#: pg_backup_archiver.c:890 +#: pg_backup_archiver.c:887 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "verarbeite Daten für Tabelle »%s.%s«" -#: pg_backup_archiver.c:952 +#: pg_backup_archiver.c:949 #, c-format msgid "executing %s %s" msgstr "führe %s %s aus" -#: pg_backup_archiver.c:991 +#: pg_backup_archiver.c:988 #, c-format msgid "disabling triggers for %s" msgstr "schalte Trigger für %s aus" -#: pg_backup_archiver.c:1017 +#: pg_backup_archiver.c:1014 #, c-format msgid "enabling triggers for %s" msgstr "schalte Trigger für %s ein" -#: pg_backup_archiver.c:1045 +#: pg_backup_archiver.c:1042 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" msgstr "interner Fehler -- WriteData kann nicht außerhalb des Kontexts einer DataDumper-Routine aufgerufen werden" -#: pg_backup_archiver.c:1228 +#: pg_backup_archiver.c:1225 #, c-format msgid "large-object output not supported in chosen format" msgstr "Large-Object-Ausgabe im gewählten Format nicht unterstützt" -#: pg_backup_archiver.c:1286 +#: pg_backup_archiver.c:1283 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" msgstr[0] "%d Large Object wiederhergestellt" msgstr[1] "%d Large Objects wiederhergestellt" -#: pg_backup_archiver.c:1307 pg_backup_tar.c:736 +#: pg_backup_archiver.c:1304 pg_backup_tar.c:730 #, c-format msgid "restoring large object with OID %u" msgstr "Wiederherstellung von Large Object mit OID %u" -#: pg_backup_archiver.c:1319 +#: pg_backup_archiver.c:1316 #, c-format msgid "could not create large object %u: %s" msgstr "konnte Large Object %u nicht erstellen: %s" -#: pg_backup_archiver.c:1324 pg_dump.c:3549 +#: pg_backup_archiver.c:1321 pg_dump.c:3702 #, c-format msgid "could not open large object %u: %s" msgstr "konnte Large Object %u nicht öffnen: %s" -#: pg_backup_archiver.c:1381 +#: pg_backup_archiver.c:1377 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "konnte Inhaltsverzeichnisdatei »%s« nicht öffnen: %m" -#: pg_backup_archiver.c:1421 +#: pg_backup_archiver.c:1405 #, c-format msgid "line ignored: %s" msgstr "Zeile ignoriert: %s" -#: pg_backup_archiver.c:1428 +#: pg_backup_archiver.c:1412 #, c-format msgid "could not find entry for ID %d" msgstr "konnte Eintrag für ID %d nicht finden" -#: pg_backup_archiver.c:1449 pg_backup_directory.c:222 -#: pg_backup_directory.c:580 +#: pg_backup_archiver.c:1435 pg_backup_directory.c:222 +#: pg_backup_directory.c:598 #, c-format msgid "could not close TOC file: %m" msgstr "konnte Inhaltsverzeichnisdatei nicht schließen: %m" -#: pg_backup_archiver.c:1563 pg_backup_custom.c:158 pg_backup_directory.c:332 -#: pg_backup_directory.c:567 pg_backup_directory.c:630 -#: pg_backup_directory.c:649 pg_dumpall.c:484 +#: pg_backup_archiver.c:1549 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_directory.c:585 pg_backup_directory.c:648 +#: pg_backup_directory.c:667 pg_dumpall.c:485 #, c-format msgid "could not open output file \"%s\": %m" msgstr "konnte Ausgabedatei »%s« nicht öffnen: %m" -#: pg_backup_archiver.c:1565 pg_backup_custom.c:164 +#: pg_backup_archiver.c:1551 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "konnte Ausgabedatei nicht öffnen: %m" -#: pg_backup_archiver.c:1658 +#: pg_backup_archiver.c:1644 #, c-format -msgid "wrote %lu byte of large object data (result = %lu)" -msgid_plural "wrote %lu bytes of large object data (result = %lu)" -msgstr[0] "%lu Byte Large-Object-Daten geschrieben (Ergebnis = %lu)" -msgstr[1] "%lu Bytes Large-Object-Daten geschrieben (Ergebnis = %lu)" +msgid "wrote %zu byte of large object data (result = %d)" +msgid_plural "wrote %zu bytes of large object data (result = %d)" +msgstr[0] "%zu Byte Large-Object-Daten geschrieben (Ergebnis = %d)" +msgstr[1] "%zu Bytes Large-Object-Daten geschrieben (Ergebnis = %d)" -#: pg_backup_archiver.c:1663 +#: pg_backup_archiver.c:1650 #, c-format -msgid "could not write to large object (result: %lu, expected: %lu)" -msgstr "konnte Large Object nicht schreiben (Ergebis: %lu, erwartet: %lu)" +msgid "could not write to large object: %s" +msgstr "konnte Large Object nicht schreiben: %s" -#: pg_backup_archiver.c:1753 +#: pg_backup_archiver.c:1740 #, c-format msgid "while INITIALIZING:" msgstr "in Phase INITIALIZING:" -#: pg_backup_archiver.c:1758 +#: pg_backup_archiver.c:1745 #, c-format msgid "while PROCESSING TOC:" msgstr "in Phase PROCESSING TOC:" -#: pg_backup_archiver.c:1763 +#: pg_backup_archiver.c:1750 #, c-format msgid "while FINALIZING:" msgstr "in Phase FINALIZING:" -#: pg_backup_archiver.c:1768 +#: pg_backup_archiver.c:1755 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "in Inhaltsverzeichniseintrag %d; %u %u %s %s %s" -#: pg_backup_archiver.c:1844 +#: pg_backup_archiver.c:1831 #, c-format msgid "bad dumpId" msgstr "ungültige DumpId" -#: pg_backup_archiver.c:1865 +#: pg_backup_archiver.c:1852 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "ungültige Tabellen-DumpId für »TABLE DATA«-Eintrag" -#: pg_backup_archiver.c:1957 +#: pg_backup_archiver.c:1944 #, c-format msgid "unexpected data offset flag %d" msgstr "unerwartete Datenoffsetmarkierung %d" -#: pg_backup_archiver.c:1970 +#: pg_backup_archiver.c:1957 #, c-format msgid "file offset in dump file is too large" msgstr "Dateioffset in Dumpdatei ist zu groß" -#: pg_backup_archiver.c:2107 pg_backup_archiver.c:2117 +#: pg_backup_archiver.c:2095 pg_backup_archiver.c:2105 #, c-format msgid "directory name too long: \"%s\"" msgstr "Verzeichnisname zu lang: »%s«" -#: pg_backup_archiver.c:2125 +#: pg_backup_archiver.c:2113 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" msgstr "Verzeichnis »%s« scheint kein gültiges Archiv zu sein (»toc.dat« existiert nicht)" -#: pg_backup_archiver.c:2133 pg_backup_custom.c:175 pg_backup_custom.c:753 -#: pg_backup_directory.c:207 pg_backup_directory.c:388 +#: pg_backup_archiver.c:2121 pg_backup_custom.c:173 pg_backup_custom.c:807 +#: pg_backup_directory.c:207 pg_backup_directory.c:394 #, c-format msgid "could not open input file \"%s\": %m" msgstr "konnte Eingabedatei »%s« nicht öffnen: %m" -#: pg_backup_archiver.c:2140 pg_backup_custom.c:181 +#: pg_backup_archiver.c:2128 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "konnte Eingabedatei nicht öffnen: %m" -#: pg_backup_archiver.c:2146 +#: pg_backup_archiver.c:2134 #, c-format msgid "could not read input file: %m" msgstr "konnte Eingabedatei nicht lesen: %m" -#: pg_backup_archiver.c:2148 +#: pg_backup_archiver.c:2136 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "Eingabedatei ist zu kurz (gelesen: %lu, erwartet: 5)" -#: pg_backup_archiver.c:2233 +#: pg_backup_archiver.c:2168 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "Eingabedatei ist anscheinend ein Dump im Textformat. Bitte verwenden Sie psql." -#: pg_backup_archiver.c:2239 +#: pg_backup_archiver.c:2174 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "Eingabedatei scheint kein gültiges Archiv zu sein (zu kurz?)" -#: pg_backup_archiver.c:2245 +#: pg_backup_archiver.c:2180 #, c-format msgid "input file does not appear to be a valid archive" msgstr "Eingabedatei scheint kein gültiges Archiv zu sein" -#: pg_backup_archiver.c:2265 +#: pg_backup_archiver.c:2189 #, c-format msgid "could not close input file: %m" msgstr "konnte Eingabedatei nicht schließen: %m" -#: pg_backup_archiver.c:2379 +#: pg_backup_archiver.c:2306 #, c-format msgid "unrecognized file format \"%d\"" msgstr "nicht erkanntes Dateiformat »%d«" -#: pg_backup_archiver.c:2461 pg_backup_archiver.c:4473 +#: pg_backup_archiver.c:2388 pg_backup_archiver.c:4422 #, c-format msgid "finished item %d %s %s" msgstr "Element %d %s %s abgeschlossen" -#: pg_backup_archiver.c:2465 pg_backup_archiver.c:4486 +#: pg_backup_archiver.c:2392 pg_backup_archiver.c:4435 #, c-format msgid "worker process failed: exit code %d" msgstr "Arbeitsprozess fehlgeschlagen: Code %d" -#: pg_backup_archiver.c:2585 +#: pg_backup_archiver.c:2512 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "ID %d des Eintrags außerhalb des gültigen Bereichs -- vielleicht ein verfälschtes Inhaltsverzeichnis" -#: pg_backup_archiver.c:2652 +#: pg_backup_archiver.c:2579 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "Wiederherstellung von Tabellen mit WITH OIDS wird nicht mehr unterstützt" -#: pg_backup_archiver.c:2734 +#: pg_backup_archiver.c:2663 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "nicht erkannte Kodierung »%s«" -#: pg_backup_archiver.c:2739 +#: pg_backup_archiver.c:2668 #, c-format msgid "invalid ENCODING item: %s" msgstr "ungültiger ENCODING-Eintrag: %s" -#: pg_backup_archiver.c:2757 +#: pg_backup_archiver.c:2686 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "ungültiger STDSTRINGS-Eintrag: %s" -#: pg_backup_archiver.c:2782 +#: pg_backup_archiver.c:2717 +#, c-format +msgid "invalid TOASTCOMPRESSION item: %s" +msgstr "ungültiger TOASTCOMPRESSION-Eintrag: %s" + +#: pg_backup_archiver.c:2734 #, c-format msgid "schema \"%s\" not found" msgstr "Schema »%s« nicht gefunden" -#: pg_backup_archiver.c:2789 +#: pg_backup_archiver.c:2741 #, c-format msgid "table \"%s\" not found" msgstr "Tabelle »%s« nicht gefunden" -#: pg_backup_archiver.c:2796 +#: pg_backup_archiver.c:2748 #, c-format msgid "index \"%s\" not found" msgstr "Index »%s« nicht gefunden" -#: pg_backup_archiver.c:2803 +#: pg_backup_archiver.c:2755 #, c-format msgid "function \"%s\" not found" msgstr "Funktion »%s« nicht gefunden" -#: pg_backup_archiver.c:2810 +#: pg_backup_archiver.c:2762 #, c-format msgid "trigger \"%s\" not found" msgstr "Trigger »%s« nicht gefunden" -#: pg_backup_archiver.c:3202 +#: pg_backup_archiver.c:3160 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "konnte Sitzungsbenutzer nicht auf »%s« setzen: %s" -#: pg_backup_archiver.c:3341 +#: pg_backup_archiver.c:3292 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "konnte search_path nicht auf »%s« setzen: %s" -#: pg_backup_archiver.c:3403 +#: pg_backup_archiver.c:3354 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "konnte default_tablespace nicht auf »%s« setzen: %s" -#: pg_backup_archiver.c:3448 +#: pg_backup_archiver.c:3399 #, c-format msgid "could not set default_table_access_method: %s" msgstr "konnte default_table_access_method nicht setzen: %s" -#: pg_backup_archiver.c:3540 pg_backup_archiver.c:3698 +#: pg_backup_archiver.c:3491 pg_backup_archiver.c:3649 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "kann Eigentümer für Objekttyp »%s« nicht setzen" -#: pg_backup_archiver.c:3802 +#: pg_backup_archiver.c:3753 #, c-format msgid "did not find magic string in file header" msgstr "magische Zeichenkette im Dateikopf nicht gefunden" -#: pg_backup_archiver.c:3815 +#: pg_backup_archiver.c:3767 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "nicht unterstützte Version (%d.%d) im Dateikopf" -#: pg_backup_archiver.c:3820 +#: pg_backup_archiver.c:3772 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "Prüfung der Integer-Größe (%lu) fehlgeschlagen" -#: pg_backup_archiver.c:3824 +#: pg_backup_archiver.c:3776 #, c-format msgid "archive was made on a machine with larger integers, some operations might fail" msgstr "Archiv wurde auf einer Maschine mit größeren Integers erstellt; einige Operationen könnten fehlschlagen" -#: pg_backup_archiver.c:3834 +#: pg_backup_archiver.c:3786 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "erwartetes Format (%d) ist nicht das gleiche wie das in der Datei gefundene (%d)" -#: pg_backup_archiver.c:3850 +#: pg_backup_archiver.c:3801 #, c-format msgid "archive is compressed, but this installation does not support compression -- no data will be available" msgstr "Archiv ist komprimiert, aber diese Installation unterstützt keine Komprimierung -- keine Daten verfügbar" -#: pg_backup_archiver.c:3868 +#: pg_backup_archiver.c:3819 #, c-format msgid "invalid creation date in header" msgstr "ungültiges Erstellungsdatum im Kopf" -#: pg_backup_archiver.c:3996 +#: pg_backup_archiver.c:3947 #, c-format msgid "processing item %d %s %s" msgstr "verarbeite Element %d %s %s" -#: pg_backup_archiver.c:4075 +#: pg_backup_archiver.c:4026 #, c-format msgid "entering main parallel loop" msgstr "Eintritt in Hauptparallelschleife" -#: pg_backup_archiver.c:4086 +#: pg_backup_archiver.c:4037 #, c-format msgid "skipping item %d %s %s" msgstr "Element %d %s %s wird übersprungen" -#: pg_backup_archiver.c:4095 +#: pg_backup_archiver.c:4046 #, c-format msgid "launching item %d %s %s" msgstr "starte Element %d %s %s" -#: pg_backup_archiver.c:4149 +#: pg_backup_archiver.c:4100 #, c-format msgid "finished main parallel loop" msgstr "Hauptparallelschleife beendet" -#: pg_backup_archiver.c:4187 +#: pg_backup_archiver.c:4136 #, c-format msgid "processing missed item %d %s %s" msgstr "verarbeite verpasstes Element %d %s %s" -#: pg_backup_archiver.c:4792 +#: pg_backup_archiver.c:4741 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "Tabelle »%s« konnte nicht erzeugt werden, ihre Daten werden nicht wiederhergestellt werden" -#: pg_backup_custom.c:374 pg_backup_null.c:147 +#: pg_backup_custom.c:376 pg_backup_null.c:147 #, c-format msgid "invalid OID for large object" msgstr "ungültige OID für Large Object" -#: pg_backup_custom.c:444 -#, c-format -msgid "unrecognized data block type (%d) while searching archive" -msgstr "unerkannter Datenblocktyp (%d) beim Suchen im Archiv gefunden" - -#: pg_backup_custom.c:455 pg_backup_custom.c:811 +#: pg_backup_custom.c:439 pg_backup_custom.c:505 pg_backup_custom.c:629 +#: pg_backup_custom.c:865 pg_backup_tar.c:1080 pg_backup_tar.c:1085 #, c-format msgid "error during file seek: %m" msgstr "Fehler beim Suchen in Datei: %m" -#: pg_backup_custom.c:464 +#: pg_backup_custom.c:478 +#, c-format +msgid "data block %d has wrong seek position" +msgstr "Datenblock %d hat falsche Seek-Position" + +#: pg_backup_custom.c:495 #, c-format -msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive" -msgstr "konnte Block-ID %d nicht im Archiv finden -- möglicherweise wegen Wiederherstellung außer der Reihe, was wegen fehlender Datenoffsets im Archiv nicht möglich ist" +msgid "unrecognized data block type (%d) while searching archive" +msgstr "unerkannter Datenblocktyp (%d) beim Suchen im Archiv gefunden" -#: pg_backup_custom.c:469 +#: pg_backup_custom.c:517 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to non-seekable input file" msgstr "konnte Block-ID %d nicht im Archiv finden -- möglicherweise wegen Wiederherstellung außer der Reihe, was nicht möglich ist, weil die Eingabedatei kein Suchen unterstützt" -#: pg_backup_custom.c:474 +#: pg_backup_custom.c:522 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive" msgstr "konnte Block-ID %d nicht im Archiv finden -- möglicherweise beschädigtes Archiv" -#: pg_backup_custom.c:481 +#: pg_backup_custom.c:529 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d" msgstr "unerwartete Block-ID (%d) beim Lesen der Daten gefunden -- erwartet wurde %d" -#: pg_backup_custom.c:495 +#: pg_backup_custom.c:543 #, c-format msgid "unrecognized data block type %d while restoring archive" msgstr "unerkannter Datenblocktyp %d beim Wiederherstellen des Archivs gefunden" -#: pg_backup_custom.c:577 +#: pg_backup_custom.c:645 #, c-format msgid "could not read from input file: %m" msgstr "konnte nicht aus Eingabedatei lesen: %m" -#: pg_backup_custom.c:691 pg_backup_custom.c:744 pg_backup_custom.c:884 -#: pg_backup_tar.c:1088 +#: pg_backup_custom.c:746 pg_backup_custom.c:798 pg_backup_custom.c:943 +#: pg_backup_tar.c:1083 #, c-format msgid "could not determine seek position in archive file: %m" msgstr "konnte Positionszeiger in Archivdatei nicht ermitteln: %m" -#: pg_backup_custom.c:708 pg_backup_custom.c:748 +#: pg_backup_custom.c:762 pg_backup_custom.c:802 #, c-format msgid "could not close archive file: %m" msgstr "konnte Archivdatei nicht schließen: %m" -#: pg_backup_custom.c:731 +#: pg_backup_custom.c:785 #, c-format msgid "can only reopen input archives" msgstr "nur Eingabearchive können neu geöffnet werden" -#: pg_backup_custom.c:738 +#: pg_backup_custom.c:792 #, c-format msgid "parallel restore from standard input is not supported" msgstr "parallele Wiederherstellung aus der Standardeingabe wird nicht unterstützt" -#: pg_backup_custom.c:740 +#: pg_backup_custom.c:794 #, c-format msgid "parallel restore from non-seekable file is not supported" msgstr "parallele Wiederherstellung aus einer Datei, die kein Suchen ermöglicht, wird nicht unterstützt" -#: pg_backup_custom.c:756 +#: pg_backup_custom.c:810 #, c-format msgid "could not set seek position in archive file: %m" msgstr "konnte Positionszeiger in Archivdatei nicht setzen: %m" -#: pg_backup_custom.c:832 +#: pg_backup_custom.c:889 #, c-format msgid "compressor active" msgstr "Kompressor ist aktiv" -#: pg_backup_custom.c:887 -#, c-format -msgid "ftell mismatch with expected position -- ftell used" -msgstr "erwartete Dateiposition stimmt nicht mit ftell überein -- benutze ftell" - #: pg_backup_db.c:42 #, c-format msgid "could not get server_version from libpq" msgstr "konnte server_version nicht von libpq ermitteln" -#: pg_backup_db.c:53 pg_dumpall.c:1826 +#: pg_backup_db.c:53 pg_dumpall.c:1821 #, c-format msgid "server version: %s; %s version: %s" msgstr "Version des Servers: %s; Version von %s: %s" -#: pg_backup_db.c:55 pg_dumpall.c:1828 +#: pg_backup_db.c:55 pg_dumpall.c:1823 #, c-format msgid "aborting because of server version mismatch" msgstr "Abbruch wegen unpassender Serverversion" -#: pg_backup_db.c:138 +#: pg_backup_db.c:124 #, c-format -msgid "connecting to database \"%s\" as user \"%s\"" -msgstr "verbinde mit Datenbank »%s« als Benutzer »%s«" +msgid "already connected to a database" +msgstr "bereits mit einer Datenbank verbunden" -#: pg_backup_db.c:145 pg_backup_db.c:194 pg_backup_db.c:255 pg_backup_db.c:296 -#: pg_dumpall.c:1651 pg_dumpall.c:1764 +#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1650 pg_dumpall.c:1761 msgid "Password: " msgstr "Passwort: " -#: pg_backup_db.c:177 -#, c-format -msgid "could not reconnect to database" -msgstr "konnte nicht wieder zur Datenbank verbinden" - -#: pg_backup_db.c:182 -#, c-format -msgid "could not reconnect to database: %s" -msgstr "konnte nicht wieder zur Datenbank verbinden: %s" - -#: pg_backup_db.c:198 -#, c-format -msgid "connection needs password" -msgstr "Verbindung benötigt Passwort" - -#: pg_backup_db.c:249 -#, c-format -msgid "already connected to a database" -msgstr "bereits mit einer Datenbank verbunden" - -#: pg_backup_db.c:288 +#: pg_backup_db.c:174 #, c-format msgid "could not connect to database" msgstr "konnte nicht mit der Datenbank verbinden" -#: pg_backup_db.c:304 +#: pg_backup_db.c:191 #, c-format -msgid "connection to database \"%s\" failed: %s" -msgstr "Verbindung zur Datenbank »%s« fehlgeschlagen: %s" +msgid "reconnection failed: %s" +msgstr "Wiederverbindung fehlgeschlagen: %s" -#: pg_backup_db.c:376 pg_dumpall.c:1684 +#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1681 pg_dumpall.c:1771 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:383 pg_dumpall.c:1889 pg_dumpall.c:1912 +#: pg_backup_db.c:276 pg_dumpall.c:1884 pg_dumpall.c:1907 #, c-format msgid "query failed: %s" msgstr "Anfrage fehlgeschlagen: %s" -#: pg_backup_db.c:385 pg_dumpall.c:1890 pg_dumpall.c:1913 +#: pg_backup_db.c:278 pg_dumpall.c:1885 pg_dumpall.c:1908 #, c-format msgid "query was: %s" msgstr "Anfrage war: %s" -#: pg_backup_db.c:426 +#: pg_backup_db.c:319 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" msgstr[0] "Anfrage ergab %d Zeile anstatt einer: %s" msgstr[1] "Anfrage ergab %d Zeilen anstatt einer: %s" -#: pg_backup_db.c:462 +#: pg_backup_db.c:355 #, c-format msgid "%s: %sCommand was: %s" msgstr "%s: %sDie Anweisung war: %s" -#: pg_backup_db.c:518 pg_backup_db.c:592 pg_backup_db.c:599 +#: pg_backup_db.c:411 pg_backup_db.c:485 pg_backup_db.c:492 msgid "could not execute query" msgstr "konnte Anfrage nicht ausführen" -#: pg_backup_db.c:571 +#: pg_backup_db.c:464 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "Fehler in PQputCopyData: %s" -#: pg_backup_db.c:620 +#: pg_backup_db.c:513 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "Fehler in PQputCopyEnd: %s" -#: pg_backup_db.c:626 +#: pg_backup_db.c:519 #, c-format msgid "COPY failed for table \"%s\": %s" msgstr "COPY fehlgeschlagen für Tabelle »%s«: %s" -#: pg_backup_db.c:632 pg_dump.c:1991 +#: pg_backup_db.c:525 pg_dump.c:2086 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "unerwartete zusätzliche Ergebnisse während COPY von Tabelle »%s«" -#: pg_backup_db.c:644 +#: pg_backup_db.c:537 msgid "could not start database transaction" msgstr "konnte Datenbanktransaktion nicht starten" -#: pg_backup_db.c:652 +#: pg_backup_db.c:545 msgid "could not commit database transaction" msgstr "konnte Datenbanktransaktion nicht beenden" @@ -1101,43 +1081,43 @@ msgstr "konnte Verzeichnis »%s« nicht schließen: %m" msgid "could not create directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht erzeugen: %m" -#: pg_backup_directory.c:350 pg_backup_directory.c:485 -#: pg_backup_directory.c:515 +#: pg_backup_directory.c:355 pg_backup_directory.c:496 +#: pg_backup_directory.c:532 #, c-format msgid "could not write to output file: %s" msgstr "konnte nicht in Ausgabedatei schreiben: %s" -#: pg_backup_directory.c:400 +#: pg_backup_directory.c:406 #, c-format msgid "could not close data file \"%s\": %m" msgstr "konnte Datendatei »%s« nicht schließen: %m" -#: pg_backup_directory.c:440 +#: pg_backup_directory.c:446 #, c-format msgid "could not open large object TOC file \"%s\" for input: %m" msgstr "konnte Large-Object-Inhaltsverzeichnisdatei »%s« nicht zur Eingabe öffnen: %m" -#: pg_backup_directory.c:451 +#: pg_backup_directory.c:457 #, c-format msgid "invalid line in large object TOC file \"%s\": \"%s\"" msgstr "ungültige Zeile in Large-Object-Inhaltsverzeichnisdatei »%s«: %s" -#: pg_backup_directory.c:460 +#: pg_backup_directory.c:466 #, c-format msgid "error reading large object TOC file \"%s\"" msgstr "Fehler beim Lesen von Large-Object-Inhaltsverzeichnisdatei »%s«" -#: pg_backup_directory.c:464 +#: pg_backup_directory.c:470 #, c-format msgid "could not close large object TOC file \"%s\": %m" msgstr "konnte Large-Object-Inhaltsverzeichnisdatei »%s« nicht schließen: %m" -#: pg_backup_directory.c:671 +#: pg_backup_directory.c:689 #, c-format msgid "could not write to blobs TOC file" msgstr "konnte nicht in Blobs-Inhaltsverzeichnisdatei schreiben" -#: pg_backup_directory.c:703 +#: pg_backup_directory.c:721 #, c-format msgid "file name too long: \"%s\"" msgstr "Dateiname zu lang: »%s«" @@ -1157,7 +1137,7 @@ msgstr "konnte Inhaltsverzeichnisdatei »%s« nicht zur Ausgabe öffnen: %m" msgid "could not open TOC file for output: %m" msgstr "konnte Inhaltsverzeichnisdatei nicht zur Ausgabe öffnen: %m" -#: pg_backup_tar.c:203 pg_backup_tar.c:358 +#: pg_backup_tar.c:203 pg_backup_tar.c:352 #, c-format msgid "compression is not supported by tar archive format" msgstr "Komprimierung ist im Tar-Format nicht unterstützt" @@ -1172,64 +1152,64 @@ msgstr "konnte Inhaltsverzeichnisdatei »%s« nicht zur Eingabe öffnen: %m" msgid "could not open TOC file for input: %m" msgstr "konnte Inhaltsverzeichnisdatei nicht zur Eingabe öffnen: %m" -#: pg_backup_tar.c:344 +#: pg_backup_tar.c:338 #, c-format msgid "could not find file \"%s\" in archive" msgstr "konnte Datei »%s« nicht im Archiv finden" -#: pg_backup_tar.c:410 +#: pg_backup_tar.c:404 #, c-format msgid "could not generate temporary file name: %m" msgstr "konnte keine temporären Dateinamen erzeugen: %m" -#: pg_backup_tar.c:421 +#: pg_backup_tar.c:415 #, c-format msgid "could not open temporary file" msgstr "konnte temporäre Datei nicht öffnen" -#: pg_backup_tar.c:448 +#: pg_backup_tar.c:442 #, c-format msgid "could not close tar member" msgstr "konnte Tar-Mitglied nicht schließen" -#: pg_backup_tar.c:691 +#: pg_backup_tar.c:685 #, c-format msgid "unexpected COPY statement syntax: \"%s\"" msgstr "unerwartete Syntax der COPY-Anweisung: »%s«" -#: pg_backup_tar.c:958 +#: pg_backup_tar.c:952 #, c-format msgid "invalid OID for large object (%u)" msgstr "Large Object hat ungültige OID (%u)" -#: pg_backup_tar.c:1103 +#: pg_backup_tar.c:1099 #, c-format msgid "could not close temporary file: %m" msgstr "konnte temporäre Datei nicht schließen: %m" -#: pg_backup_tar.c:1112 +#: pg_backup_tar.c:1108 #, c-format msgid "actual file length (%s) does not match expected (%s)" msgstr "tatsächliche Dateilänge (%s) stimmt nicht mit erwarteter Länge (%s) überein" -#: pg_backup_tar.c:1169 pg_backup_tar.c:1199 +#: pg_backup_tar.c:1165 pg_backup_tar.c:1196 #, c-format msgid "could not find header for file \"%s\" in tar archive" msgstr "konnte Kopf für Datei »%s« im Tar-Archiv nicht finden" -#: pg_backup_tar.c:1187 +#: pg_backup_tar.c:1183 #, c-format msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file." msgstr "Ausgabe der Daten in anderer Reihenfolge wird in diesem Archivformat nicht unterstützt: »%s« wird benötigt, aber es kommt vor »%s« in der Archivdatei." -#: pg_backup_tar.c:1232 +#: pg_backup_tar.c:1230 #, c-format msgid "incomplete tar header found (%lu byte)" msgid_plural "incomplete tar header found (%lu bytes)" msgstr[0] "unvollständiger Tar-Dateikopf gefunden (%lu Byte)" msgstr[1] "unvollständiger Tar-Dateikopf gefunden (%lu Bytes)" -#: pg_backup_tar.c:1283 +#: pg_backup_tar.c:1281 #, c-format msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s" msgstr "beschädigter Tar-Kopf in %s gefunden (%d erwartet, %d berechnet), Dateiposition %s" @@ -1239,9 +1219,9 @@ msgstr "beschädigter Tar-Kopf in %s gefunden (%d erwartet, %d berechnet), Datei msgid "unrecognized section name: \"%s\"" msgstr "unbekannter Abschnittsname: »%s«" -#: pg_backup_utils.c:55 pg_dump.c:615 pg_dump.c:632 pg_dumpall.c:338 -#: pg_dumpall.c:348 pg_dumpall.c:357 pg_dumpall.c:366 pg_dumpall.c:374 -#: pg_dumpall.c:388 pg_dumpall.c:464 pg_restore.c:284 pg_restore.c:300 +#: pg_backup_utils.c:55 pg_dump.c:628 pg_dump.c:645 pg_dumpall.c:339 +#: pg_dumpall.c:349 pg_dumpall.c:358 pg_dumpall.c:367 pg_dumpall.c:375 +#: pg_dumpall.c:389 pg_dumpall.c:465 pg_restore.c:284 pg_restore.c:300 #: pg_restore.c:318 #, c-format msgid "Try \"%s --help\" for more information.\n" @@ -1252,72 +1232,77 @@ msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" msgid "out of on_exit_nicely slots" msgstr "on_exit_nicely-Slots aufgebraucht" -#: pg_dump.c:541 +#: pg_dump.c:554 #, c-format msgid "compression level must be in range 0..9" msgstr "Komprimierungsniveau muss im Bereich 0..9 sein" -#: pg_dump.c:579 +#: pg_dump.c:592 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digits muss im Bereich -15..3 sein" -#: pg_dump.c:602 +#: pg_dump.c:615 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "Zeilen-pro-Insert muss im Bereich %d..%d sein" -#: pg_dump.c:630 pg_dumpall.c:346 pg_restore.c:298 +#: pg_dump.c:643 pg_dumpall.c:347 pg_restore.c:298 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" -#: pg_dump.c:651 pg_restore.c:327 +#: pg_dump.c:664 pg_restore.c:327 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "Optionen -s/--schema-only und -a/--data-only können nicht zusammen verwendet werden" -#: pg_dump.c:656 +#: pg_dump.c:669 #, c-format msgid "options -s/--schema-only and --include-foreign-data cannot be used together" msgstr "Optionen -s/--schema-only und --include-foreign-data können nicht zusammen verwendet werden" -#: pg_dump.c:659 +#: pg_dump.c:672 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" msgstr "Option --include-foreign-data wird nicht mit paralleler Sicherung unterstützt" -#: pg_dump.c:663 pg_restore.c:333 +#: pg_dump.c:676 pg_restore.c:333 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "Optionen -c/--clean und -a/--data-only können nicht zusammen verwendet werden" -#: pg_dump.c:668 pg_dumpall.c:381 pg_restore.c:382 +#: pg_dump.c:681 pg_dumpall.c:382 pg_restore.c:382 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "Option --if-exists benötigt Option -c/--clean" -#: pg_dump.c:675 +#: pg_dump.c:688 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "Option --on-conflict-do-nothing benötigt Option --inserts, --rows-per-insert oder --column-inserts" -#: pg_dump.c:697 +#: pg_dump.c:710 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "Komprimierung ist in dieser Installation nicht verfügbar -- Archiv wird nicht komprimiert" -#: pg_dump.c:718 pg_restore.c:349 +#: pg_dump.c:731 pg_restore.c:349 #, c-format msgid "invalid number of parallel jobs" msgstr "ungültige Anzahl paralleler Jobs" -#: pg_dump.c:722 +#: pg_dump.c:735 #, c-format msgid "parallel backup only supported by the directory format" msgstr "parallele Sicherung wird nur vom Ausgabeformat »Verzeichnis« unterstützt" -#: pg_dump.c:777 +#: pg_dump.c:739 +#, c-format +msgid "option --index-collation-versions-unknown only works in binary upgrade mode" +msgstr "Option --index-collation-versions-unknown funktioniert nur im Binary-Upgrade-Modus" + +#: pg_dump.c:794 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1328,27 +1313,32 @@ msgstr "" "Verwenden Sie --no-synchronized-snapshots, wenn Sie keine synchronisierten\n" "Snapshots benötigen." -#: pg_dump.c:783 +#: pg_dump.c:800 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Exportierte Snapshots werden in dieser Serverversion nicht unterstützt." -#: pg_dump.c:795 +#: pg_dump.c:812 #, c-format msgid "last built-in OID is %u" msgstr "letzte eingebaute OID ist %u" -#: pg_dump.c:804 +#: pg_dump.c:821 #, c-format msgid "no matching schemas were found" msgstr "keine passenden Schemas gefunden" -#: pg_dump.c:818 +#: pg_dump.c:835 #, c-format msgid "no matching tables were found" msgstr "keine passenden Tabellen gefunden" -#: pg_dump.c:993 +#: pg_dump.c:857 +#, c-format +msgid "no matching extensions were found" +msgstr "keine passenden Erweiterungen gefunden" + +#: pg_dump.c:1029 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1357,17 +1347,17 @@ msgstr "" "%s gibt eine Datenbank als Textdatei oder in anderen Formaten aus.\n" "\n" -#: pg_dump.c:994 pg_dumpall.c:617 pg_restore.c:462 +#: pg_dump.c:1030 pg_dumpall.c:618 pg_restore.c:462 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: pg_dump.c:995 +#: pg_dump.c:1031 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [DBNAME]\n" -#: pg_dump.c:997 pg_dumpall.c:620 pg_restore.c:465 +#: pg_dump.c:1033 pg_dumpall.c:621 pg_restore.c:465 #, c-format msgid "" "\n" @@ -1376,12 +1366,12 @@ msgstr "" "\n" "Allgemeine Optionen:\n" -#: pg_dump.c:998 +#: pg_dump.c:1034 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=DATEINAME Name der Ausgabedatei oder des -verzeichnisses\n" -#: pg_dump.c:999 +#: pg_dump.c:1035 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1390,44 +1380,44 @@ msgstr "" " -F, --format=c|d|t|p Ausgabeformat (custom, d=Verzeichnis, tar,\n" " plain text)\n" -#: pg_dump.c:1001 +#: pg_dump.c:1037 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM so viele parallele Jobs zur Sicherung verwenden\n" -#: pg_dump.c:1002 pg_dumpall.c:622 +#: pg_dump.c:1038 pg_dumpall.c:623 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose »Verbose«-Modus\n" -#: pg_dump.c:1003 pg_dumpall.c:623 +#: pg_dump.c:1039 pg_dumpall.c:624 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_dump.c:1004 +#: pg_dump.c:1040 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 Komprimierungsniveau für komprimierte Formate\n" -#: pg_dump.c:1005 pg_dumpall.c:624 +#: pg_dump.c:1041 pg_dumpall.c:625 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr " --lock-wait-timeout=ZEIT Abbruch nach ZEIT Warten auf Tabellensperre\n" -#: pg_dump.c:1006 pg_dumpall.c:651 +#: pg_dump.c:1042 pg_dumpall.c:652 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr "" " --no-sync nicht warten, bis Änderungen sicher auf Festplatte\n" " geschrieben sind\n" -#: pg_dump.c:1007 pg_dumpall.c:625 +#: pg_dump.c:1043 pg_dumpall.c:626 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_dump.c:1009 pg_dumpall.c:626 +#: pg_dump.c:1045 pg_dumpall.c:627 #, c-format msgid "" "\n" @@ -1436,49 +1426,54 @@ msgstr "" "\n" "Optionen die den Inhalt der Ausgabe kontrollieren:\n" -#: pg_dump.c:1010 pg_dumpall.c:627 +#: pg_dump.c:1046 pg_dumpall.c:628 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only nur Daten ausgeben, nicht das Schema\n" -#: pg_dump.c:1011 +#: pg_dump.c:1047 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs Large Objects mit ausgeben\n" -#: pg_dump.c:1012 +#: pg_dump.c:1048 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs Large Objects nicht mit ausgeben\n" -#: pg_dump.c:1013 pg_restore.c:476 +#: pg_dump.c:1049 pg_restore.c:476 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr " -c, --clean Datenbankobjekte vor der Wiedererstellung löschen\n" -#: pg_dump.c:1014 +#: pg_dump.c:1050 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr "" " -C, --create Anweisungen zum Erstellen der Datenbank in\n" " Ausgabe einfügen\n" -#: pg_dump.c:1015 pg_dumpall.c:629 +#: pg_dump.c:1051 +#, c-format +msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" +msgstr " -e, --extension=MUSTER nur die angegebene(n) Erweiterung(en) ausgeben\n" + +#: pg_dump.c:1052 pg_dumpall.c:630 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=KODIERUNG Daten in Kodierung KODIERUNG ausgeben\n" -#: pg_dump.c:1016 +#: pg_dump.c:1053 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=MUSTER nur das/die angegebene(n) Schema(s) ausgeben\n" -#: pg_dump.c:1017 +#: pg_dump.c:1054 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=MUSTER das/die angegebene(n) Schema(s) NICHT ausgeben\n" -#: pg_dump.c:1018 +#: pg_dump.c:1055 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1487,58 +1482,58 @@ msgstr "" " -O, --no-owner Wiederherstellung der Objekteigentümerschaft im\n" " »plain text«-Format auslassen\n" -#: pg_dump.c:1020 pg_dumpall.c:633 +#: pg_dump.c:1057 pg_dumpall.c:634 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only nur das Schema, nicht die Daten, ausgeben\n" -#: pg_dump.c:1021 +#: pg_dump.c:1058 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr " -S, --superuser=NAME Superusername für »plain text«-Format\n" -#: pg_dump.c:1022 +#: pg_dump.c:1059 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=MUSTER nur die angegebene(n) Tabelle(n) ausgeben\n" -#: pg_dump.c:1023 +#: pg_dump.c:1060 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=MUSTER die angegebene(n) Tabelle(n) NICHT ausgeben\n" -#: pg_dump.c:1024 pg_dumpall.c:636 +#: pg_dump.c:1061 pg_dumpall.c:637 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges Zugriffsprivilegien (grant/revoke) nicht ausgeben\n" -#: pg_dump.c:1025 pg_dumpall.c:637 +#: pg_dump.c:1062 pg_dumpall.c:638 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade wird nur von Upgrade-Programmen verwendet\n" -#: pg_dump.c:1026 pg_dumpall.c:638 +#: pg_dump.c:1063 pg_dumpall.c:639 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr "" " --column-inserts Daten als INSERT-Anweisungen mit Spaltennamen\n" " ausgeben\n" -#: pg_dump.c:1027 pg_dumpall.c:639 +#: pg_dump.c:1064 pg_dumpall.c:640 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr "" " --disable-dollar-quoting Dollar-Quoting abschalten, normales SQL-Quoting\n" " verwenden\n" -#: pg_dump.c:1028 pg_dumpall.c:640 pg_restore.c:493 +#: pg_dump.c:1065 pg_dumpall.c:641 pg_restore.c:493 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr "" " --disable-triggers Trigger während der Datenwiederherstellung\n" " abschalten\n" -#: pg_dump.c:1029 +#: pg_dump.c:1066 #, c-format msgid "" " --enable-row-security enable row security (dump only content user has\n" @@ -1547,22 +1542,22 @@ msgstr "" " --enable-row-security Sicherheit auf Zeilenebene einschalten (nur Daten\n" " ausgeben, auf die der Benutzer Zugriff hat)\n" -#: pg_dump.c:1031 +#: pg_dump.c:1068 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=MUSTER Daten der angegebenen Tabelle(n) NICHT ausgeben\n" -#: pg_dump.c:1032 pg_dumpall.c:642 +#: pg_dump.c:1069 pg_dumpall.c:643 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=ZAHL Einstellung für extra_float_digits\n" -#: pg_dump.c:1033 pg_dumpall.c:643 pg_restore.c:495 +#: pg_dump.c:1070 pg_dumpall.c:644 pg_restore.c:495 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists IF EXISTS verwenden, wenn Objekte gelöscht werden\n" -#: pg_dump.c:1034 +#: pg_dump.c:1071 #, c-format msgid "" " --include-foreign-data=PATTERN\n" @@ -1573,88 +1568,93 @@ msgstr "" " Daten von Fremdtabellen auf Fremdservern, die\n" " mit MUSTER übereinstimmen, mit sichern\n" -#: pg_dump.c:1037 pg_dumpall.c:644 +#: pg_dump.c:1074 pg_dumpall.c:645 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts Daten als INSERT-Anweisungen statt COPY ausgeben\n" -#: pg_dump.c:1038 pg_dumpall.c:645 +#: pg_dump.c:1075 pg_dumpall.c:646 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root Partitionen über die Wurzeltabelle laden\n" -#: pg_dump.c:1039 pg_dumpall.c:646 +#: pg_dump.c:1076 pg_dumpall.c:647 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments Kommentare nicht ausgeben\n" -#: pg_dump.c:1040 pg_dumpall.c:647 +#: pg_dump.c:1077 pg_dumpall.c:648 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications Publikationen nicht ausgeben\n" -#: pg_dump.c:1041 pg_dumpall.c:649 +#: pg_dump.c:1078 pg_dumpall.c:650 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels Security-Label-Zuweisungen nicht ausgeben\n" -#: pg_dump.c:1042 pg_dumpall.c:650 +#: pg_dump.c:1079 pg_dumpall.c:651 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions Subskriptionen nicht ausgeben\n" -#: pg_dump.c:1043 +#: pg_dump.c:1080 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr "" " --no-synchronized-snapshots keine synchronisierten Snapshots in parallelen\n" " Jobs verwenden\n" -#: pg_dump.c:1044 pg_dumpall.c:652 +#: pg_dump.c:1081 pg_dumpall.c:653 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces Tablespace-Zuordnungen nicht ausgeben\n" -#: pg_dump.c:1045 pg_dumpall.c:653 +#: pg_dump.c:1082 +#, c-format +msgid " --no-toast-compression do not dump toast compression methods\n" +msgstr " --no-toast-compression TOAST-Komprimierungsmethoden nicht ausgeben\n" + +#: pg_dump.c:1083 pg_dumpall.c:654 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data Daten in ungeloggten Tabellen nicht ausgeben\n" -#: pg_dump.c:1046 pg_dumpall.c:654 +#: pg_dump.c:1084 pg_dumpall.c:655 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" msgstr " --on-conflict-do-nothing INSERT-Befehle mit ON CONFLICT DO NOTHING ausgeben\n" -#: pg_dump.c:1047 pg_dumpall.c:655 +#: pg_dump.c:1085 pg_dumpall.c:656 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers alle Bezeichner in Anführungszeichen, selbst wenn\n" " kein Schlüsselwort\n" -#: pg_dump.c:1048 pg_dumpall.c:656 +#: pg_dump.c:1086 pg_dumpall.c:657 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=ANZAHL Anzahl Zeilen pro INSERT; impliziert --inserts\n" -#: pg_dump.c:1049 +#: pg_dump.c:1087 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr "" " --section=ABSCHNITT angegebenen Abschnitt ausgeben (pre-data, data\n" " oder post-data)\n" -#: pg_dump.c:1050 +#: pg_dump.c:1088 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr " --serializable-deferrable warten bis der Dump ohne Anomalien laufen kann\n" -#: pg_dump.c:1051 +#: pg_dump.c:1089 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT angegebenen Snapshot für den Dump verwenden\n" -#: pg_dump.c:1052 pg_restore.c:504 +#: pg_dump.c:1090 pg_restore.c:504 #, c-format msgid "" " --strict-names require table and/or schema include patterns to\n" @@ -1663,7 +1663,7 @@ msgstr "" " --strict-names Tabellen- oder Schemamuster müssen auf mindestens\n" " je ein Objekt passen\n" -#: pg_dump.c:1054 pg_dumpall.c:657 pg_restore.c:506 +#: pg_dump.c:1092 pg_dumpall.c:658 pg_restore.c:506 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1675,7 +1675,7 @@ msgstr "" " OWNER Befehle verwenden, um Eigentümerschaft zu\n" " setzen\n" -#: pg_dump.c:1058 pg_dumpall.c:661 pg_restore.c:510 +#: pg_dump.c:1096 pg_dumpall.c:662 pg_restore.c:510 #, c-format msgid "" "\n" @@ -1684,42 +1684,42 @@ msgstr "" "\n" "Verbindungsoptionen:\n" -#: pg_dump.c:1059 +#: pg_dump.c:1097 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=DBNAME auszugebende Datenbank\n" -#: pg_dump.c:1060 pg_dumpall.c:663 pg_restore.c:511 +#: pg_dump.c:1098 pg_dumpall.c:664 pg_restore.c:511 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n" -#: pg_dump.c:1061 pg_dumpall.c:665 pg_restore.c:512 +#: pg_dump.c:1099 pg_dumpall.c:666 pg_restore.c:512 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT Portnummer des Datenbankservers\n" -#: pg_dump.c:1062 pg_dumpall.c:666 pg_restore.c:513 +#: pg_dump.c:1100 pg_dumpall.c:667 pg_restore.c:513 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME Datenbankbenutzername\n" -#: pg_dump.c:1063 pg_dumpall.c:667 pg_restore.c:514 +#: pg_dump.c:1101 pg_dumpall.c:668 pg_restore.c:514 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password niemals nach Passwort fragen\n" -#: pg_dump.c:1064 pg_dumpall.c:668 pg_restore.c:515 +#: pg_dump.c:1102 pg_dumpall.c:669 pg_restore.c:515 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password nach Passwort fragen (sollte automatisch geschehen)\n" -#: pg_dump.c:1065 pg_dumpall.c:669 +#: pg_dump.c:1103 pg_dumpall.c:670 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROLLENNAME vor der Ausgabe SET ROLE ausführen\n" -#: pg_dump.c:1067 +#: pg_dump.c:1105 #, c-format msgid "" "\n" @@ -1732,22 +1732,22 @@ msgstr "" "PGDATABASE verwendet.\n" "\n" -#: pg_dump.c:1069 pg_dumpall.c:673 pg_restore.c:522 +#: pg_dump.c:1107 pg_dumpall.c:674 pg_restore.c:522 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Berichten Sie Fehler an <%s>.\n" -#: pg_dump.c:1070 pg_dumpall.c:674 pg_restore.c:523 +#: pg_dump.c:1108 pg_dumpall.c:675 pg_restore.c:523 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: pg_dump.c:1089 pg_dumpall.c:499 +#: pg_dump.c:1127 pg_dumpall.c:500 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "ungültige Clientkodierung »%s« angegeben" -#: pg_dump.c:1235 +#: pg_dump.c:1273 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server version.\n" @@ -1758,503 +1758,548 @@ msgstr "" "Verwenden Sie --no-synchronized-snapshots, wenn Sie keine synchronisierten\n" "Snapshots benötigen." -#: pg_dump.c:1304 +#: pg_dump.c:1342 #, c-format msgid "invalid output format \"%s\" specified" msgstr "ungültiges Ausgabeformat »%s« angegeben" -#: pg_dump.c:1342 +#: pg_dump.c:1380 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "keine passenden Schemas für Muster »%s« gefunden" -#: pg_dump.c:1389 +#: pg_dump.c:1427 +#, c-format +msgid "no matching extensions were found for pattern \"%s\"" +msgstr "keine passenden Erweiterungen für Muster »%s« gefunden" + +#: pg_dump.c:1474 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "keine passenden Fremdserver für Muster »%s« gefunden" -#: pg_dump.c:1452 +#: pg_dump.c:1537 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "keine passenden Tabellen für Muster »%s« gefunden" -#: pg_dump.c:1865 +#: pg_dump.c:1960 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "gebe Inhalt der Tabelle »%s.%s« aus" -#: pg_dump.c:1972 +#: pg_dump.c:2067 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Ausgabe des Inhalts der Tabelle »%s« fehlgeschlagen: PQgetCopyData() fehlgeschlagen." -#: pg_dump.c:1973 pg_dump.c:1983 +#: pg_dump.c:2068 pg_dump.c:2078 #, c-format msgid "Error message from server: %s" msgstr "Fehlermeldung vom Server: %s" -#: pg_dump.c:1974 pg_dump.c:1984 +#: pg_dump.c:2069 pg_dump.c:2079 #, c-format msgid "The command was: %s" msgstr "Die Anweisung war: %s" -#: pg_dump.c:1982 +#: pg_dump.c:2077 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Ausgabe des Inhalts der Tabelle »%s« fehlgeschlagen: PQgetResult() fehlgeschlagen." -#: pg_dump.c:2736 +#: pg_dump.c:2837 #, c-format msgid "saving database definition" msgstr "sichere Datenbankdefinition" -#: pg_dump.c:3208 +#: pg_dump.c:3309 #, c-format msgid "saving encoding = %s" msgstr "sichere Kodierung = %s" -#: pg_dump.c:3233 +#: pg_dump.c:3334 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "sichere standard_conforming_strings = %s" -#: pg_dump.c:3272 +#: pg_dump.c:3373 #, c-format msgid "could not parse result of current_schemas()" msgstr "konnte Ergebnis von current_schemas() nicht interpretieren" -#: pg_dump.c:3291 +#: pg_dump.c:3392 #, c-format msgid "saving search_path = %s" msgstr "sichere search_path = %s" -#: pg_dump.c:3331 +#: pg_dump.c:3445 +#, c-format +msgid "saving default_toast_compression = %s" +msgstr "sichere default_toast_compression = %s" + +#: pg_dump.c:3484 #, c-format msgid "reading large objects" msgstr "lese Large Objects" -#: pg_dump.c:3513 +#: pg_dump.c:3666 #, c-format msgid "saving large objects" msgstr "sichere Large Objects" -#: pg_dump.c:3559 +#: pg_dump.c:3712 #, c-format msgid "error reading large object %u: %s" msgstr "Fehler beim Lesen von Large Object %u: %s" -#: pg_dump.c:3611 +#: pg_dump.c:3764 #, c-format msgid "reading row security enabled for table \"%s.%s\"" msgstr "lese Einstellung von Sicherheit auf Zeilenebene für Tabelle »%s.%s«" -#: pg_dump.c:3642 +#: pg_dump.c:3795 #, c-format msgid "reading policies for table \"%s.%s\"" msgstr "lese Policys von Tabelle »%s.%s«" -#: pg_dump.c:3794 +#: pg_dump.c:3947 #, c-format msgid "unexpected policy command type: %c" msgstr "unerwarteter Policy-Befehlstyp: %c" -#: pg_dump.c:3945 +#: pg_dump.c:4101 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "Eigentümer der Publikation »%s« scheint ungültig zu sein" -#: pg_dump.c:4091 -#, c-format -msgid "reading publication membership for table \"%s.%s\"" -msgstr "lese Publikationsmitgliedschaft für Tabelle »%s.%s«" - -#: pg_dump.c:4234 +#: pg_dump.c:4393 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "Subskriptionen werden nicht ausgegeben, weil der aktuelle Benutzer kein Superuser ist" -#: pg_dump.c:4288 +#: pg_dump.c:4464 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "Eigentümer der Subskription »%s« scheint ungültig zu sein" -#: pg_dump.c:4332 +#: pg_dump.c:4507 #, c-format msgid "could not parse subpublications array" msgstr "konnte subpublications-Array nicht interpretieren" -#: pg_dump.c:4654 +#: pg_dump.c:4865 #, c-format msgid "could not find parent extension for %s %s" msgstr "konnte Erweiterung, zu der %s %s gehört, nicht finden" -#: pg_dump.c:4786 +#: pg_dump.c:4997 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "Eigentümer des Schemas »%s« scheint ungültig zu sein" -#: pg_dump.c:4809 +#: pg_dump.c:5020 #, c-format msgid "schema with OID %u does not exist" msgstr "Schema mit OID %u existiert nicht" -#: pg_dump.c:5134 +#: pg_dump.c:5349 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "Eigentümer des Datentypen »%s« scheint ungültig zu sein" -#: pg_dump.c:5219 +#: pg_dump.c:5433 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "Eigentümer des Operatoren »%s« scheint ungültig zu sein" -#: pg_dump.c:5521 +#: pg_dump.c:5732 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "Eigentümer der Operatorklasse »%s« scheint ungültig zu sein" -#: pg_dump.c:5605 +#: pg_dump.c:5815 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "Eigentümer der Operatorfamilie »%s« scheint ungültig zu sein" -#: pg_dump.c:5774 +#: pg_dump.c:5983 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "Eigentümer der Aggregatfunktion »%s« scheint ungültig zu sein" -#: pg_dump.c:6034 +#: pg_dump.c:6242 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "Eigentümer der Funktion »%s« scheint ungültig zu sein" -#: pg_dump.c:6862 +#: pg_dump.c:7069 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "Eigentümer der Tabelle »%s« scheint ungültig zu sein" -#: pg_dump.c:6904 pg_dump.c:17330 +#: pg_dump.c:7111 pg_dump.c:17573 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "Sanity-Check fehlgeschlagen, Elterntabelle mit OID %u von Sequenz mit OID %u nicht gefunden" -#: pg_dump.c:7046 +#: pg_dump.c:7252 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "lese Indexe von Tabelle »%s.%s«" -#: pg_dump.c:7458 +#: pg_dump.c:7737 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "lese Fremdschlüssel-Constraints von Tabelle »%s.%s«" -#: pg_dump.c:7713 +#: pg_dump.c:8016 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "Sanity-Check fehlgeschlagen, Elterntabelle mit OID %u von pg_rewrite-Eintrag mit OID %u nicht gefunden" -#: pg_dump.c:7796 +#: pg_dump.c:8099 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "lese Trigger von Tabelle »%s.%s«" -#: pg_dump.c:7929 +#: pg_dump.c:8232 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "Anfrage ergab NULL als Name der Tabelle auf die sich Fremdschlüssel-Trigger »%s« von Tabelle »%s« bezieht (OID der Tabelle: %u)" -#: pg_dump.c:8484 +#: pg_dump.c:8782 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "finde Spalten und Typen von Tabelle »%s.%s«" -#: pg_dump.c:8620 +#: pg_dump.c:8906 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "ungültige Spaltennummerierung in Tabelle »%s«" -#: pg_dump.c:8657 +#: pg_dump.c:8945 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "finde DEFAULT-Ausdrücke von Tabelle »%s.%s«" -#: pg_dump.c:8679 +#: pg_dump.c:8967 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "ungültiger adnum-Wert %d für Tabelle »%s«" -#: pg_dump.c:8744 +#: pg_dump.c:9060 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "finde Check-Constraints für Tabelle »%s.%s«" -#: pg_dump.c:8793 +#: pg_dump.c:9109 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "%d Check-Constraint für Tabelle %s erwartet, aber %d gefunden" msgstr[1] "%d Check-Constraints für Tabelle %s erwartet, aber %d gefunden" -#: pg_dump.c:8797 +#: pg_dump.c:9113 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Die Systemkataloge sind wahrscheinlich verfälscht.)" -#: pg_dump.c:10383 +#: pg_dump.c:10698 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "typtype des Datentypen »%s« scheint ungültig zu sein" -#: pg_dump.c:11737 +#: pg_dump.c:12050 #, c-format msgid "bogus value in proargmodes array" msgstr "unsinniger Wert in proargmodes-Array" -#: pg_dump.c:12109 +#: pg_dump.c:12357 #, c-format msgid "could not parse proallargtypes array" msgstr "konnte proallargtypes-Array nicht interpretieren" -#: pg_dump.c:12125 +#: pg_dump.c:12373 #, c-format msgid "could not parse proargmodes array" msgstr "konnte proargmodes-Array nicht interpretieren" -#: pg_dump.c:12139 +#: pg_dump.c:12387 #, c-format msgid "could not parse proargnames array" msgstr "konnte proargnames-Array nicht interpretieren" -#: pg_dump.c:12150 +#: pg_dump.c:12397 #, c-format msgid "could not parse proconfig array" msgstr "konnte proconfig-Array nicht interpretieren" -#: pg_dump.c:12230 +#: pg_dump.c:12477 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "ungültiger provolatile-Wert für Funktion »%s«" -#: pg_dump.c:12280 pg_dump.c:14338 +#: pg_dump.c:12527 pg_dump.c:14458 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "ungültiger proparallel-Wert für Funktion »%s«" -#: pg_dump.c:12419 pg_dump.c:12528 pg_dump.c:12535 +#: pg_dump.c:12666 pg_dump.c:12775 pg_dump.c:12782 #, c-format msgid "could not find function definition for function with OID %u" msgstr "konnte Funktionsdefinition für Funktion mit OID %u nicht finden" -#: pg_dump.c:12458 +#: pg_dump.c:12705 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "unsinniger Wert in Feld pg_cast.castfunc oder pg_cast.castmethod" -#: pg_dump.c:12461 +#: pg_dump.c:12708 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "unsinniger Wert in Feld pg_cast.castmethod" -#: pg_dump.c:12554 +#: pg_dump.c:12801 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "unsinnige Transformationsdefinition, mindestens eins von trffromsql und trftosql sollte nicht null sein" -#: pg_dump.c:12571 +#: pg_dump.c:12818 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "unsinniger Wert in Feld pg_transform.trffromsql" -#: pg_dump.c:12592 +#: pg_dump.c:12839 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "unsinniger Wert in Feld pg_transform.trftosql" -#: pg_dump.c:12908 +#: pg_dump.c:12991 +#, c-format +msgid "postfix operators are not supported anymore (operator \"%s\")" +msgstr "Postfix-Operatoren werden nicht mehr unterstützt (Operator »%s«)" + +#: pg_dump.c:13161 #, c-format msgid "could not find operator with OID %s" msgstr "konnte Operator mit OID %s nicht finden" -#: pg_dump.c:12976 +#: pg_dump.c:13229 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "ungültiger Typ »%c« für Zugriffsmethode »%s«" -#: pg_dump.c:13730 +#: pg_dump.c:13981 #, c-format msgid "unrecognized collation provider: %s" msgstr "unbekannter Sortierfolgen-Provider: %s" -#: pg_dump.c:14202 -#, c-format -msgid "aggregate function %s could not be dumped correctly for this database version; ignored" -msgstr "Aggregatfunktion %s konnte für diese Datenbankversion nicht korrekt ausgegeben werden; ignoriert" - -#: pg_dump.c:14257 +#: pg_dump.c:14377 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "unbekannter aggfinalmodify-Wert für Aggregat »%s«" -#: pg_dump.c:14313 +#: pg_dump.c:14433 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "unbekannter aggmfinalmodify-Wert für Aggregat »%s«" -#: pg_dump.c:15035 +#: pg_dump.c:15155 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "unbekannter Objekttyp in den Vorgabeprivilegien: %d" -#: pg_dump.c:15053 +#: pg_dump.c:15173 #, c-format msgid "could not parse default ACL list (%s)" msgstr "konnte Vorgabe-ACL-Liste (%s) nicht interpretieren" -#: pg_dump.c:15133 +#: pg_dump.c:15258 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "konnte initiale GRANT-ACL-Liste (%s) oder initiale REVOKE-ACL-Liste (%s) für Objekt »%s« (%s) nicht interpretieren" -#: pg_dump.c:15141 +#: pg_dump.c:15266 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "konnte GRANT-ACL-Liste (%s) oder REVOKE-ACL-Liste (%s) für Objekt »%s« (%s) nicht interpretieren" -#: pg_dump.c:15638 +#: pg_dump.c:15781 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "Anfrage um die Definition der Sicht »%s« zu ermitteln lieferte keine Daten" -#: pg_dump.c:15641 +#: pg_dump.c:15784 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "Anfrage um die Definition der Sicht »%s« zu ermitteln lieferte mehr als eine Definition" -#: pg_dump.c:15648 +#: pg_dump.c:15791 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "Definition der Sicht »%s« scheint leer zu sein (Länge null)" -#: pg_dump.c:15730 +#: pg_dump.c:15875 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS wird nicht mehr unterstützt (Tabelle »%s«)" -#: pg_dump.c:16210 -#, c-format -msgid "invalid number of parents %d for table \"%s\"" -msgstr "ungültige Anzahl Eltern %d für Tabelle »%s«" - -#: pg_dump.c:16533 +#: pg_dump.c:16742 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "ungültige Spaltennummer %d in Tabelle »%s«" -#: pg_dump.c:16818 +#: pg_dump.c:16820 +#, c-format +msgid "could not parse index statistic columns" +msgstr "konnte Indexstatistikspalten nicht interpretieren" + +#: pg_dump.c:16822 +#, c-format +msgid "could not parse index statistic values" +msgstr "konnte Indexstatistikwerte nicht interpretieren" + +#: pg_dump.c:16824 +#, c-format +msgid "mismatched number of columns and values for index stats" +msgstr "Anzahl Spalten und Werte für Indexstatistiken stimmt nicht überein" + +#: pg_dump.c:17058 #, c-format msgid "missing index for constraint \"%s\"" msgstr "fehlender Index für Constraint »%s«" -#: pg_dump.c:17043 +#: pg_dump.c:17283 #, c-format msgid "unrecognized constraint type: %c" msgstr "unbekannter Constraint-Typ: %c" -#: pg_dump.c:17175 pg_dump.c:17395 +#: pg_dump.c:17415 pg_dump.c:17638 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" msgstr[0] "Anfrage nach Daten der Sequenz %s ergab %d Zeile (erwartete 1)" msgstr[1] "Anfrage nach Daten der Sequenz %s ergab %d Zeilen (erwartete 1)" -#: pg_dump.c:17209 +#: pg_dump.c:17449 #, c-format msgid "unrecognized sequence type: %s" msgstr "unbekannter Sequenztyp: %s" -#: pg_dump.c:17493 +#: pg_dump.c:17736 #, c-format msgid "unexpected tgtype value: %d" msgstr "unerwarteter tgtype-Wert: %d" -#: pg_dump.c:17567 +#: pg_dump.c:17810 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "fehlerhafte Argumentzeichenkette (%s) für Trigger »%s« von Tabelle »%s«" -#: pg_dump.c:17803 +#: pg_dump.c:18046 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "Anfrage nach Regel »%s« der Tabelle »%s« fehlgeschlagen: falsche Anzahl Zeilen zurückgegeben" -#: pg_dump.c:17965 +#: pg_dump.c:18208 #, c-format msgid "could not find referenced extension %u" msgstr "konnte referenzierte Erweiterung %u nicht finden" -#: pg_dump.c:18177 +#: pg_dump.c:18299 +#, c-format +msgid "could not parse extension configuration array" +msgstr "konnte Erweiterungskonfigurations-Array nicht interpretieren" + +#: pg_dump.c:18301 +#, c-format +msgid "could not parse extension condition array" +msgstr "konnte Erweiterungsbedingungs-Array nicht interpretieren" + +#: pg_dump.c:18303 +#, c-format +msgid "mismatched number of configurations and conditions for extension" +msgstr "Anzahl Konfigurationen und Bedingungen für Erweiterung stimmt nicht überein" + +#: pg_dump.c:18435 #, c-format msgid "reading dependency data" msgstr "lese Abhängigkeitsdaten" -#: pg_dump.c:18270 +#: pg_dump.c:18528 #, c-format msgid "no referencing object %u %u" msgstr "kein referenzierendes Objekt %u %u" -#: pg_dump.c:18281 +#: pg_dump.c:18539 #, c-format msgid "no referenced object %u %u" msgstr "kein referenziertes Objekt %u %u" -#: pg_dump.c:18654 +#: pg_dump.c:18942 +#, c-format +msgid "could not parse index collation name array" +msgstr "konnte Array der Indexsortierfolgennamen nicht interpretieren" + +#: pg_dump.c:18946 +#, c-format +msgid "could not parse index collation version array" +msgstr "konnte Array der Indexsortierfolgenversionen nicht interpretieren" + +#: pg_dump.c:18950 +#, c-format +msgid "mismatched number of collation names and versions for index" +msgstr "Anzahl Sortierfolgennamen und -versionen für Index stimmt nicht überein" + +#: pg_dump.c:18989 #, c-format msgid "could not parse reloptions array" msgstr "konnte reloptions-Array nicht interpretieren" -#: pg_dump_sort.c:360 +#: pg_dump_sort.c:411 #, c-format msgid "invalid dumpId %d" msgstr "ungültige dumpId %d" -#: pg_dump_sort.c:366 +#: pg_dump_sort.c:417 #, c-format msgid "invalid dependency %d" msgstr "ungültige Abhängigkeit %d" -#: pg_dump_sort.c:599 +#: pg_dump_sort.c:650 #, c-format msgid "could not identify dependency loop" msgstr "konnte Abhängigkeitsschleife nicht bestimmen" -#: pg_dump_sort.c:1170 +#: pg_dump_sort.c:1221 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" msgstr[0] "Es gibt zirkuläre Fremdschlüssel-Constraints für diese Tabelle:" msgstr[1] "Es gibt zirkuläre Fremdschlüssel-Constraints zwischen diesen Tabellen:" -#: pg_dump_sort.c:1174 pg_dump_sort.c:1194 +#: pg_dump_sort.c:1225 pg_dump_sort.c:1245 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1175 +#: pg_dump_sort.c:1226 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." msgstr "Möglicherweise kann der Dump nur wiederhergestellt werden, wenn --disable-triggers verwendet wird oder die Constraints vorübergehend entfernt werden." -#: pg_dump_sort.c:1176 +#: pg_dump_sort.c:1227 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." msgstr "Führen Sie einen vollen Dump statt eines Dumps mit --data-only durch, um dieses Problem zu vermeiden." -#: pg_dump_sort.c:1188 +#: pg_dump_sort.c:1239 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "konnte Abhängigkeitsschleife zwischen diesen Elementen nicht auflösen:" -#: pg_dumpall.c:199 +#: pg_dumpall.c:200 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -2265,7 +2310,7 @@ msgstr "" "selben Verzeichnis wie »%s« gefunden.\n" "Prüfen Sie Ihre Installation." -#: pg_dumpall.c:204 +#: pg_dumpall.c:205 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -2276,32 +2321,32 @@ msgstr "" "aber es hatte nicht die gleiche Version wie %s.\n" "Prüfen Sie Ihre Installation." -#: pg_dumpall.c:356 +#: pg_dumpall.c:357 #, c-format msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" msgstr "Option --exclude-database kann nicht zusammen mit -g/--globals-only, -r/--roles-only oder -t/--tablesspaces-only verwendet werden" -#: pg_dumpall.c:365 +#: pg_dumpall.c:366 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "Optionen -g/--globals-only und -r/--roles-only können nicht zusammen verwendet werden" -#: pg_dumpall.c:373 +#: pg_dumpall.c:374 #, c-format msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "Optionen -g/--globals-only und -t/--tablespaces-only können nicht zusammen verwendet werden" -#: pg_dumpall.c:387 +#: pg_dumpall.c:388 #, c-format msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "Optionen -r/--roles-only und -t/--tablespaces-only können nicht zusammen verwendet werden" -#: pg_dumpall.c:448 pg_dumpall.c:1754 +#: pg_dumpall.c:449 pg_dumpall.c:1751 #, c-format msgid "could not connect to database \"%s\"" msgstr "konnte nicht mit der Datenbank »%s« verbinden" -#: pg_dumpall.c:462 +#: pg_dumpall.c:463 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" @@ -2310,7 +2355,7 @@ msgstr "" "konnte nicht mit Datenbank »postgres« oder »template1« verbinden\n" "Bitte geben Sie eine alternative Datenbank an." -#: pg_dumpall.c:616 +#: pg_dumpall.c:617 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2319,75 +2364,75 @@ msgstr "" "%s gibt einen PostgreSQL-Datenbankcluster in eine SQL-Skriptdatei aus.\n" "\n" -#: pg_dumpall.c:618 +#: pg_dumpall.c:619 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" -#: pg_dumpall.c:621 +#: pg_dumpall.c:622 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=DATEINAME Name der Ausgabedatei\n" -#: pg_dumpall.c:628 +#: pg_dumpall.c:629 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr " -c, --clean Datenbanken vor der Wiedererstellung löschen\n" -#: pg_dumpall.c:630 +#: pg_dumpall.c:631 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr " -g, --globals-only nur globale Objekte ausgeben, keine Datenbanken\n" -#: pg_dumpall.c:631 pg_restore.c:485 +#: pg_dumpall.c:632 pg_restore.c:485 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr "" " -O, --no-owner Wiederherstellung der Objekteigentümerschaft\n" " auslassen\n" -#: pg_dumpall.c:632 +#: pg_dumpall.c:633 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr "" " -r, --roles-only nur Rollen ausgeben, keine Datenbanken oder\n" " Tablespaces\n" -#: pg_dumpall.c:634 +#: pg_dumpall.c:635 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr " -S, --superuser=NAME Superusername für den Dump\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:636 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr "" " -t, --tablespaces-only nur Tablespaces ausgeben, keine Datenbanken oder\n" " Rollen\n" -#: pg_dumpall.c:641 +#: pg_dumpall.c:642 #, c-format msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" msgstr "" " --exclude-database=MUSTER Datenbanken deren Name mit MUSTER übereinstimmt\n" " überspringen\n" -#: pg_dumpall.c:648 +#: pg_dumpall.c:649 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords Rollenpasswörter nicht mit ausgeben\n" -#: pg_dumpall.c:662 +#: pg_dumpall.c:663 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=VERBDG mit angegebenen Verbindungsparametern verbinden\n" -#: pg_dumpall.c:664 +#: pg_dumpall.c:665 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=DBNAME alternative Standarddatenbank\n" -#: pg_dumpall.c:671 +#: pg_dumpall.c:672 #, c-format msgid "" "\n" @@ -2400,57 +2445,52 @@ msgstr "" "Standardausgabe geschrieben.\n" "\n" -#: pg_dumpall.c:877 +#: pg_dumpall.c:878 #, c-format msgid "role name starting with \"pg_\" skipped (%s)" msgstr "mit »pg_« anfangender Rollenname übersprungen (%s)" -#: pg_dumpall.c:1278 +#: pg_dumpall.c:1279 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "konnte ACL-Zeichenkette (%s) für Tablespace »%s« nicht interpretieren" -#: pg_dumpall.c:1495 +#: pg_dumpall.c:1496 #, c-format msgid "excluding database \"%s\"" msgstr "Datenbank »%s« übersprungen" -#: pg_dumpall.c:1499 +#: pg_dumpall.c:1500 #, c-format msgid "dumping database \"%s\"" msgstr "Ausgabe der Datenbank »%s«" -#: pg_dumpall.c:1531 +#: pg_dumpall.c:1532 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "pg_dump für Datenbank »%s« fehlgeschlagen; beende" -#: pg_dumpall.c:1540 +#: pg_dumpall.c:1541 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "konnte die Ausgabedatei »%s« nicht neu öffnen: %m" -#: pg_dumpall.c:1584 +#: pg_dumpall.c:1585 #, c-format msgid "running \"%s\"" msgstr "führe »%s« aus" -#: pg_dumpall.c:1775 -#, c-format -msgid "could not connect to database \"%s\": %s" -msgstr "konnte nicht mit Datenbank »%s« verbinden: %s" - -#: pg_dumpall.c:1805 +#: pg_dumpall.c:1800 #, c-format msgid "could not get server version" msgstr "konnte Version des Servers nicht ermitteln" -#: pg_dumpall.c:1811 +#: pg_dumpall.c:1806 #, c-format msgid "could not parse server version \"%s\"" msgstr "konnte Versionszeichenkette »%s« nicht entziffern" -#: pg_dumpall.c:1883 pg_dumpall.c:1906 +#: pg_dumpall.c:1878 pg_dumpall.c:1901 #, c-format msgid "executing %s" msgstr "führe %s aus" diff --git a/src/bin/pg_dump/po/el.po b/src/bin/pg_dump/po/el.po new file mode 100644 index 0000000000000..c423b85035689 --- /dev/null +++ b/src/bin/pg_dump/po/el.po @@ -0,0 +1,2994 @@ +# Greek message translation file for pg_dump +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_dump (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_dump (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-03-30 04:16+0000\n" +"PO-Revision-Date: 2021-04-26 09:13+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.4.2\n" +"Last-Translator: Georgios Kokolatos \n" +"Language: el\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "κρίσιμο:" + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "σφάλμα:" + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "προειδοποίηση:" + +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#, c-format +msgid "could not identify current directory: %m" +msgstr "δεν ήταν δυνατή η αναγνώριση του τρέχοντος καταλόγου: %m" + +#: ../../common/exec.c:156 +#, c-format +msgid "invalid binary \"%s\"" +msgstr "μη έγκυρο δυαδικό αρχείο “%s”" + +#: ../../common/exec.c:206 +#, c-format +msgid "could not read binary \"%s\"" +msgstr "δεν ήταν δυνατή η ανάγνωση του δυαδικού αρχείου “%s”" + +#: ../../common/exec.c:214 +#, c-format +msgid "could not find a \"%s\" to execute" +msgstr "δεν βρέθηκε το αρχείο “%s” για να εκτελεστεί" + +#: ../../common/exec.c:270 ../../common/exec.c:309 +#, c-format +msgid "could not change directory to \"%s\": %m" +msgstr "δεν ήταν δυνατή η μετάβαση στον κατάλογο “%s”: %m" + +#: ../../common/exec.c:287 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση του συμβολικού συνδέσμου “%s”: %m" + +#: ../../common/exec.c:410 +#, c-format +msgid "pclose failed: %m" +msgstr "απέτυχε η εντολή pclose: %m" + +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +msgid "out of memory" +msgstr "έλλειψη μνήμης" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "έλλειψη μνήμης\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "δεν ήταν δυνατή η αντιγραφή δείκτη null (εσωτερικό σφάλμα)\n" + +#: ../../common/wait_error.c:45 +#, c-format +msgid "command not executable" +msgstr "εντολή μη εκτελέσιμη" + +#: ../../common/wait_error.c:49 +#, c-format +msgid "command not found" +msgstr "εντολή δεν βρέθηκε" + +#: ../../common/wait_error.c:54 +#, c-format +msgid "child process exited with exit code %d" +msgstr "απόγονος διεργασίας τερμάτισε με κωδικό εξόδου %d" + +#: ../../common/wait_error.c:62 +#, c-format +msgid "child process was terminated by exception 0x%X" +msgstr "απόγονος διεργασίας τερματίστηκε με εξαίρεση 0x%X" + +#: ../../common/wait_error.c:66 +#, c-format +msgid "child process was terminated by signal %d: %s" +msgstr "απόγονος διεργασίας τερματίστηκε με σήμα %d: %s" + +#: ../../common/wait_error.c:72 +#, c-format +msgid "child process exited with unrecognized status %d" +msgstr "απόγονος διεργασίας τερμάτισε με μη αναγνωρίσιμη κατάσταση %d" + +#: common.c:124 +#, c-format +msgid "reading extensions" +msgstr "ανάγνωση επεκτάσεων" + +#: common.c:128 +#, c-format +msgid "identifying extension members" +msgstr "προσδιορισμός μελών επέκτασεων" + +#: common.c:131 +#, c-format +msgid "reading schemas" +msgstr "ανάγνωση σχημάτων" + +#: common.c:141 +#, c-format +msgid "reading user-defined tables" +msgstr "ανάγνωση πινάκων ορισμένων από το χρήστη" + +#: common.c:148 +#, c-format +msgid "reading user-defined functions" +msgstr "ανάγνωση συναρτήσεων ορισμένων από το χρήστη" + +#: common.c:153 +#, c-format +msgid "reading user-defined types" +msgstr "ανάγνωση τύπων ορισμένων από το χρήστη" + +#: common.c:158 +#, c-format +msgid "reading procedural languages" +msgstr "ανάγνωση δομημένων γλωσσών" + +#: common.c:161 +#, c-format +msgid "reading user-defined aggregate functions" +msgstr "" +"ανάγνωση συναρτήσεων συγκεντρωτικών αποτελεσμάτων ορισμένων από το χρήστη" + +#: common.c:164 +#, c-format +msgid "reading user-defined operators" +msgstr "ανάγνωση χειριστών ορισμένων από το χρήστη" + +#: common.c:168 +#, c-format +msgid "reading user-defined access methods" +msgstr "ανάγνωση μεθόδων πρόσβασης ορισμένων από το χρήστη" + +#: common.c:171 +#, c-format +msgid "reading user-defined operator classes" +msgstr "ανάγνωση κλάσεων χειριστών ορισμένων από το χρήστη" + +#: common.c:174 +#, c-format +msgid "reading user-defined operator families" +msgstr "ανάγνωση οικογενειών χειριστών ορισμένων από το χρήστη" + +#: common.c:177 +#, c-format +msgid "reading user-defined text search parsers" +msgstr "ανάγνωση αναλυτών αναζήτησης κειμένου ορισμένων από το χρήστη" + +#: common.c:180 +#, c-format +msgid "reading user-defined text search templates" +msgstr "ανάγνωση προτύπων αναζήτησης κειμένου ορισμένων από το χρήστη" + +#: common.c:183 +#, c-format +msgid "reading user-defined text search dictionaries" +msgstr "ανάγνωση λεξικών αναζήτησης κειμένου ορισμένων από το χρήστη" + +#: common.c:186 +#, c-format +msgid "reading user-defined text search configurations" +msgstr "" +"ανάγνωση ρυθμίσεων παραμέτρων αναζήτησης κειμένου ορισμένων από το χρήστη" + +#: common.c:189 +#, c-format +msgid "reading user-defined foreign-data wrappers" +msgstr "ανάγνωση περιτυλίξεων ξενικών δεδομένων ορισμένων από το χρήστη" + +#: common.c:192 +#, c-format +msgid "reading user-defined foreign servers" +msgstr "ανάγνωση ξενικών διακομιστών ορισμένων από το χρήστη" + +#: common.c:195 +#, c-format +msgid "reading default privileges" +msgstr "ανάγνωση προεπιλεγμένων δικαιωμάτων" + +#: common.c:198 +#, c-format +msgid "reading user-defined collations" +msgstr "ανάγνωση συρραφών ορισμένων από το χρήστη" + +#: common.c:202 +#, c-format +msgid "reading user-defined conversions" +msgstr "ανάγνωση μετατροπών ορισμένων από το χρήστη" + +#: common.c:205 +#, c-format +msgid "reading type casts" +msgstr "ανάγνωση τύπων καστ" + +#: common.c:208 +#, c-format +msgid "reading transforms" +msgstr "ανάγωση μετατροπών" + +#: common.c:211 +#, c-format +msgid "reading table inheritance information" +msgstr "ανάγωση πληροφοριών κληρονομιάς πινάκων" + +#: common.c:214 +#, c-format +msgid "reading event triggers" +msgstr "ανάγνωση ενεργοποιήσεων συμβάντων" + +#: common.c:218 +#, c-format +msgid "finding extension tables" +msgstr "εύρεση πινάκων επέκτασης" + +#: common.c:222 +#, c-format +msgid "finding inheritance relationships" +msgstr "εύρεση σχέσεων κληρονιμιά" + +#: common.c:225 +#, c-format +msgid "reading column info for interesting tables" +msgstr "ανάγνωση πληροφοριών στήλης για ενδιαφέροντες πίνακες" + +#: common.c:228 +#, c-format +msgid "flagging inherited columns in subtables" +msgstr "επισήμανση κληρονομούμενων στηλών σε υποπίνακες" + +#: common.c:231 +#, c-format +msgid "reading indexes" +msgstr "ανάγνωση ευρετηρίων" + +#: common.c:234 +#, c-format +msgid "flagging indexes in partitioned tables" +msgstr "επισήμανση ευρετηρίων σε κατατμημένους πινάκες" + +#: common.c:237 +#, c-format +msgid "reading extended statistics" +msgstr "ανάγνωση εκτεταμένων στατιστικών στοιχείων" + +#: common.c:240 +#, c-format +msgid "reading constraints" +msgstr "ανάγνωση περιορισμών" + +#: common.c:243 +#, c-format +msgid "reading triggers" +msgstr "ανάγνωση ενεργοποιήσεων συμβάντων" + +#: common.c:246 +#, c-format +msgid "reading rewrite rules" +msgstr "ανάγνωση κανόνων επανεγγραφής" + +#: common.c:249 +#, c-format +msgid "reading policies" +msgstr "ανάγνωση πολιτικών" + +#: common.c:252 +#, c-format +msgid "reading publications" +msgstr "ανάγνωση δημοσιεύσεων" + +#: common.c:257 +#, c-format +msgid "reading publication membership" +msgstr "ανάγνωση ιδιοτήτων μελών δημοσίευσεων" + +#: common.c:260 +#, c-format +msgid "reading subscriptions" +msgstr "ανάγνωση συνδρομών" + +#: common.c:1058 +#, c-format +msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" +msgstr "" +"απέτυχε ο έλεγχος ακεραιότητας, το γονικό OID %u του πίνακα \"%s\" (OID %u) " +"δεν βρέθηκε" + +#: common.c:1100 +#, c-format +msgid "could not parse numeric array \"%s\": too many numbers" +msgstr "" +"δεν ήταν δυνατή η ανάλυση της αριθμητικής συστυχίας \"%s\": πάρα πολλοί " +"αριθμοί" + +#: common.c:1115 +#, c-format +msgid "could not parse numeric array \"%s\": invalid character in number" +msgstr "" +"δεν ήταν δυνατή η ανάλυση της αριθμητικής συστυχίας \"%s\": μη έγκυρος " +"χαρακτήρας σε αριθμό" + +#: compress_io.c:111 +#, c-format +msgid "invalid compression code: %d" +msgstr "μη έγκυρος κωδικός συμπίεσης: %d" + +#: compress_io.c:134 compress_io.c:170 compress_io.c:188 compress_io.c:504 +#: compress_io.c:547 +#, c-format +msgid "not built with zlib support" +msgstr "δεν έχει κατασκευαστεί με υποστήριξη zlib" + +#: compress_io.c:236 compress_io.c:333 +#, c-format +msgid "could not initialize compression library: %s" +msgstr "δεν ήταν δυνατή η αρχικοποίηση της βιβλιοθήκης συμπίεσης: %s" + +#: compress_io.c:256 +#, c-format +msgid "could not close compression stream: %s" +msgstr "δεν ήταν δυνατό το κλείσιμο της ροής συμπίεσης: %s" + +#: compress_io.c:273 +#, c-format +msgid "could not compress data: %s" +msgstr "δεν ήταν δυνατή η συμπίεση δεδομένων: %s" + +#: compress_io.c:349 compress_io.c:364 +#, c-format +msgid "could not uncompress data: %s" +msgstr "δεν ήταν δυνατή η αποσυμπίεση δεδομένων: %s" + +#: compress_io.c:371 +#, c-format +msgid "could not close compression library: %s" +msgstr "δεν ήταν δυνατό το κλείσιμο της βιβλιοθήκης συμπίεσης: %s" + +#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:557 pg_backup_tar.c:560 +#, c-format +msgid "could not read from input file: %s" +msgstr "δεν ήταν δυνατή η ανάγνωση από το αρχείο εισόδου: %s" + +#: compress_io.c:623 pg_backup_custom.c:646 pg_backup_directory.c:552 +#: pg_backup_tar.c:793 pg_backup_tar.c:816 +#, c-format +msgid "could not read from input file: end of file" +msgstr "δεν ήταν δυνατή η ανάγνωση από το αρχείο εισόδου: τέλος αρχείου" + +#: parallel.c:254 +#, c-format +msgid "WSAStartup failed: %d" +msgstr "WSAStartup απέτυχε: %d" + +#: parallel.c:964 +#, c-format +msgid "could not create communication channels: %m" +msgstr "δεν ήταν δυνατή η δημιουργία καναλιών επικοινωνίας: %m" + +#: parallel.c:1021 +#, c-format +msgid "could not create worker process: %m" +msgstr "δεν ήταν δυνατή η δημιουργία διεργασίας εργάτη: %m" + +#: parallel.c:1151 +#, c-format +msgid "unrecognized command received from master: \"%s\"" +msgstr "μη αναγνωρίσιμη εντολή που ελήφθη από τον μάστερ: “%s”" + +#: parallel.c:1194 parallel.c:1432 +#, c-format +msgid "invalid message received from worker: \"%s\"" +msgstr "άκυρο μήνυμα που ελήφθη από εργάτη: “%s”" + +#: parallel.c:1326 +#, c-format +msgid "" +"could not obtain lock on relation \"%s\"\n" +"This usually means that someone requested an ACCESS EXCLUSIVE lock on the " +"table after the pg_dump parent process had gotten the initial ACCESS SHARE " +"lock on the table." +msgstr "" +"δεν ήταν δυνατή η απόκτηση κλειδιού για τη σχέση \"%s\"\n" +"Αυτό συνήθως σημαίνει ότι κάποιος ζήτησε ένα κλειδί ACCESS EXCLUSIVE στον " +"πίνακα αφού η γονική διεργασία pg_dump είχε ήδη αποκτήσει το αρχικό κλειδί " +"ACCESS SHARE στον πίνακα." + +#: parallel.c:1415 +#, c-format +msgid "a worker process died unexpectedly" +msgstr "μία διεργασία εργάτη τερματίστηκε απρόσμενα" + +#: parallel.c:1537 parallel.c:1655 +#, c-format +msgid "could not write to the communication channel: %m" +msgstr "δεν ήταν δυνατή η εγγραφή στο κανάλι επικοινωνίας: %m" + +#: parallel.c:1614 +#, c-format +msgid "select() failed: %m" +msgstr "απέτυχε το select(): %m" + +#: parallel.c:1739 +#, c-format +msgid "pgpipe: could not create socket: error code %d" +msgstr "pgpipe: δεν ήταν δυνατή η δημιουργία υποδοχέα: κωδικός σφάλματος %d" + +#: parallel.c:1750 +#, c-format +msgid "pgpipe: could not bind: error code %d" +msgstr "pgpipe: δεν ήταν δυνατή η δέσμευση: κωδικός σφάλματος %d" + +#: parallel.c:1757 +#, c-format +msgid "pgpipe: could not listen: error code %d" +msgstr "pgpipe: δεν ήταν δυνατή η ακρόαση: κωδικός σφάλματος %d" + +#: parallel.c:1764 +#, c-format +msgid "pgpipe: getsockname() failed: error code %d" +msgstr "pgpipe: getsockname() απέτυχε: κωδικός σφάλματος %d" + +#: parallel.c:1775 +#, c-format +msgid "pgpipe: could not create second socket: error code %d" +msgstr "" +"pgpipe: δεν ήταν δυνατή η δημιουργία δεύτερης υποδοχής: κωδικός σφάλματος %d" + +#: parallel.c:1784 +#, c-format +msgid "pgpipe: could not connect socket: error code %d" +msgstr "pgpipe: δεν ήταν δυνατή η σύνδεση της υποδοχής: κωδικός σφάλματος %d" + +#: parallel.c:1793 +#, c-format +msgid "pgpipe: could not accept connection: error code %d" +msgstr "pgpipe: δεν ήταν δυνατή η αποδοχή σύνδεσης: κωδικός σφάλματος %d" + +#: pg_backup_archiver.c:277 pg_backup_archiver.c:1587 +#, c-format +msgid "could not close output file: %m" +msgstr "δεν ήταν δυνατό το κλείσιμο αρχείου εξόδου: %m" + +#: pg_backup_archiver.c:321 pg_backup_archiver.c:325 +#, c-format +msgid "archive items not in correct section order" +msgstr "αρχειοθέτηση στοιχείων που δεν βρίσκονται σε σωστή σειρά ενότητας" + +#: pg_backup_archiver.c:331 +#, c-format +msgid "unexpected section code %d" +msgstr "μη αναμενόμενος κώδικας ενότητας %d" + +#: pg_backup_archiver.c:368 +#, c-format +msgid "parallel restore is not supported with this archive file format" +msgstr "" +"η παράλληλη επαναφορά δεν υποστηρίζεται από αυτήν τη μορφή αρχείου " +"αρχειοθέτησης" + +#: pg_backup_archiver.c:372 +#, c-format +msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump" +msgstr "" +"η παράλληλη επαναφορά δεν υποστηρίζεται με αρχεία που έγιναν από pg_dump προ " +"έκδοσης 8.0" + +#: pg_backup_archiver.c:390 +#, c-format +msgid "" +"cannot restore from compressed archive (compression not supported in this " +"installation)" +msgstr "" +"δεν είναι δυνατή η επαναφορά από συμπιεσμένη αρχειοθήκη (η συμπίεση δεν " +"υποστηρίζεται σε αυτήν την εγκατάσταση)" + +#: pg_backup_archiver.c:407 +#, c-format +msgid "connecting to database for restore" +msgstr "σύνδεση με βάση δεδομένων για επαναφορά" + +#: pg_backup_archiver.c:409 +#, c-format +msgid "direct database connections are not supported in pre-1.3 archives" +msgstr "" +"οι απευθείας συνδέσεις βάσεων δεδομένων δεν υποστηρίζονται σε προ-1.3 αρχεία" + +#: pg_backup_archiver.c:452 +#, c-format +msgid "implied data-only restore" +msgstr "υποδηλούμενη επαναφορά μόνο δεδομένων" + +#: pg_backup_archiver.c:518 +#, c-format +msgid "dropping %s %s" +msgstr "εγκαταλείπει %s: %s" + +#: pg_backup_archiver.c:613 +#, c-format +msgid "could not find where to insert IF EXISTS in statement \"%s\"" +msgstr "" +"δεν ήταν δυνατή η εύρεση του σημείου εισαγωγής IF EXISTS στη δήλωση \"%s\"" + +#: pg_backup_archiver.c:769 pg_backup_archiver.c:771 +#, c-format +msgid "warning from original dump file: %s" +msgstr "προειδοποίηση από το αρχικό αρχείο απόθεσης: %s" + +#: pg_backup_archiver.c:786 +#, c-format +msgid "creating %s \"%s.%s\"" +msgstr "δημιουργία %s “%s.%s”" + +#: pg_backup_archiver.c:789 +#, c-format +msgid "creating %s \"%s\"" +msgstr "δημιουργία %s “%s”" + +#: pg_backup_archiver.c:839 +#, c-format +msgid "connecting to new database \"%s\"" +msgstr "σύνδεση με νέα βάση δεδομένων \"%s\"" + +#: pg_backup_archiver.c:866 +#, c-format +msgid "processing %s" +msgstr "επεξεργασία %s" + +#: pg_backup_archiver.c:886 +#, c-format +msgid "processing data for table \"%s.%s\"" +msgstr "επεξεργασία δεδομένων για τον πίνακα “%s.%s”" + +#: pg_backup_archiver.c:948 +#, c-format +msgid "executing %s %s" +msgstr "εκτέλεση %s %s" + +#: pg_backup_archiver.c:987 +#, c-format +msgid "disabling triggers for %s" +msgstr "απενεργοποίηση ενεργοποιήσεων για %s" + +#: pg_backup_archiver.c:1013 +#, c-format +msgid "enabling triggers for %s" +msgstr "ενεργοποίηση ενεργοποιήσεων για %s" + +#: pg_backup_archiver.c:1041 +#, c-format +msgid "" +"internal error -- WriteData cannot be called outside the context of a " +"DataDumper routine" +msgstr "" +"εσωτερικό σφάλμα -- Δεν είναι δυνατή η κλήση του WriteData εκτός του " +"περιβάλλοντος μιας ρουτίνας DataDumper" + +#: pg_backup_archiver.c:1224 +#, c-format +msgid "large-object output not supported in chosen format" +msgstr "η έξοδος μεγάλου αντικειμένου δεν υποστηρίζεται στην επιλεγμένη μορφή" + +#: pg_backup_archiver.c:1282 +#, c-format +msgid "restored %d large object" +msgid_plural "restored %d large objects" +msgstr[0] "επανέφερε %d μεγάλο αντικείμενο" +msgstr[1] "επανέφερε %d μεγάλα αντικείμενα" + +#: pg_backup_archiver.c:1303 pg_backup_tar.c:736 +#, c-format +msgid "restoring large object with OID %u" +msgstr "επαναφορά μεγάλου αντικειμένου με OID %u" + +#: pg_backup_archiver.c:1315 +#, c-format +msgid "could not create large object %u: %s" +msgstr "δεν ήταν δυνατή η δημιουργία μεγάλου αντικειμένου %u: %s" + +#: pg_backup_archiver.c:1320 pg_dump.c:3552 +#, c-format +msgid "could not open large object %u: %s" +msgstr "δεν ήταν δυνατό το άνοιγμα μεγάλου αντικειμένου %u: %s" + +#: pg_backup_archiver.c:1377 +#, c-format +msgid "could not open TOC file \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου TOC “%s”: %m" + +#: pg_backup_archiver.c:1417 +#, c-format +msgid "line ignored: %s" +msgstr "παραβλέπεται γραμμή: %s" + +#: pg_backup_archiver.c:1424 +#, c-format +msgid "could not find entry for ID %d" +msgstr "δεν ήταν δυνατή η εύρεση καταχώρησης για ID %d" + +#: pg_backup_archiver.c:1445 pg_backup_directory.c:222 +#: pg_backup_directory.c:598 +#, c-format +msgid "could not close TOC file: %m" +msgstr "δεν ήταν δυνατό το κλείσιμο του αρχείου TOC %m" + +#: pg_backup_archiver.c:1559 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_directory.c:585 pg_backup_directory.c:648 +#: pg_backup_directory.c:667 pg_dumpall.c:484 +#, c-format +msgid "could not open output file \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου εξόδου “%s”: %m" + +#: pg_backup_archiver.c:1561 pg_backup_custom.c:162 +#, c-format +msgid "could not open output file: %m" +msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου εξόδου %m" + +#: pg_backup_archiver.c:1654 +#, c-format +msgid "wrote %lu byte of large object data (result = %lu)" +msgid_plural "wrote %lu bytes of large object data (result = %lu)" +msgstr[0] "έγραψε %lu byte δεδομένων μεγάλου αντικειμένου (αποτέλεσμα = %lu)" +msgstr[1] "έγραψε %lu bytes δεδομένων μεγάλου αντικειμένου (αποτέλεσμα = %lu)" + +#: pg_backup_archiver.c:1659 +#, c-format +msgid "could not write to large object (result: %lu, expected: %lu)" +msgstr "" +"δεν ήταν δυνατή η εγγραφή σε μεγάλο αντικείμενο (αποτέλεσμα: %lu, " +"αναμένεται: %lu)" + +#: pg_backup_archiver.c:1749 +#, c-format +msgid "while INITIALIZING:" +msgstr "ενόσω INITIALIZING:" + +#: pg_backup_archiver.c:1754 +#, c-format +msgid "while PROCESSING TOC:" +msgstr "ενόσω PROCESSING TOC:" + +#: pg_backup_archiver.c:1759 +#, c-format +msgid "while FINALIZING:" +msgstr "ενόσω FINALIZING:" + +#: pg_backup_archiver.c:1764 +#, c-format +msgid "from TOC entry %d; %u %u %s %s %s" +msgstr "από καταχώρηση TOC %d; %u %u %s %s %s" + +#: pg_backup_archiver.c:1840 +#, c-format +msgid "bad dumpId" +msgstr "εσφαλμένο dumpId" + +#: pg_backup_archiver.c:1861 +#, c-format +msgid "bad table dumpId for TABLE DATA item" +msgstr "εσφαλμένος πίνακας dumpId για στοιχείο TABLE DATA" + +#: pg_backup_archiver.c:1953 +#, c-format +msgid "unexpected data offset flag %d" +msgstr "μη αναμενόμενη σημαία όφσετ δεδομένων %d" + +#: pg_backup_archiver.c:1966 +#, c-format +msgid "file offset in dump file is too large" +msgstr "το όφσετ αρχείου στο αρχείο απόθεσης είναι πολύ μεγάλο" + +#: pg_backup_archiver.c:2103 pg_backup_archiver.c:2113 +#, c-format +msgid "directory name too long: \"%s\"" +msgstr "πολύ μακρύ όνομα καταλόγου: “%s”" + +#: pg_backup_archiver.c:2121 +#, c-format +msgid "" +"directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not " +"exist)" +msgstr "" +"ο κατάλογος \"%s\" δεν φαίνεται να είναι έγκυρη αρχειοθήκη (το \"toc.dat\" " +"δεν υπάρχει)" + +#: pg_backup_archiver.c:2129 pg_backup_custom.c:173 pg_backup_custom.c:812 +#: pg_backup_directory.c:207 pg_backup_directory.c:394 +#, c-format +msgid "could not open input file \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου εισόδου “%s”: %m" + +#: pg_backup_archiver.c:2136 pg_backup_custom.c:179 +#, c-format +msgid "could not open input file: %m" +msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου εισόδου %m" + +#: pg_backup_archiver.c:2142 +#, c-format +msgid "could not read input file: %m" +msgstr "δεν ήταν δυνατή η ανάγνωση αρχείου εισόδου: %m" + +#: pg_backup_archiver.c:2144 +#, c-format +msgid "input file is too short (read %lu, expected 5)" +msgstr "το αρχείο εισόδου είναι πολύ σύντομο (διάβασε %lu, ανάμενε 5)" + +#: pg_backup_archiver.c:2229 +#, c-format +msgid "input file appears to be a text format dump. Please use psql." +msgstr "" +"το αρχείο εισαγωγής φαίνεται να είναι απόθεση μορφής κειμένου. Παρακαλώ " +"χρησιμοποιήστε το psql." + +#: pg_backup_archiver.c:2235 +#, c-format +msgid "input file does not appear to be a valid archive (too short?)" +msgstr "" +"το αρχείο εισόδου δεν φαίνεται να είναι έγκυρη αρχειοθήκη (πολύ σύντομο;)" + +#: pg_backup_archiver.c:2241 +#, c-format +msgid "input file does not appear to be a valid archive" +msgstr "το αρχείο εισόδου δεν φαίνεται να είναι έγκυρη αρχειοθήκη" + +#: pg_backup_archiver.c:2261 +#, c-format +msgid "could not close input file: %m" +msgstr "δεν ήταν δυνατό το κλείσιμο αρχείου εισόδου: %m" + +#: pg_backup_archiver.c:2373 +#, c-format +msgid "unrecognized file format \"%d\"" +msgstr "μη αναγνωρίσιμη μορφή αρχείου \"%d\"" + +#: pg_backup_archiver.c:2455 pg_backup_archiver.c:4458 +#, c-format +msgid "finished item %d %s %s" +msgstr "τερματισμός στοιχείου %d %s %s" + +#: pg_backup_archiver.c:2459 pg_backup_archiver.c:4471 +#, c-format +msgid "worker process failed: exit code %d" +msgstr "διεργασία εργάτη απέτυχε: κωδικός εξόδου %d" + +#: pg_backup_archiver.c:2579 +#, c-format +msgid "entry ID %d out of range -- perhaps a corrupt TOC" +msgstr "καταχώρηση με ID %d εκτός εύρους τιμών — ίσως αλλοιωμένο TOC" + +#: pg_backup_archiver.c:2646 +#, c-format +msgid "restoring tables WITH OIDS is not supported anymore" +msgstr "η επαναφορά πινάκων WITH OIDS δεν υποστηρίζεται πλέον" + +#: pg_backup_archiver.c:2728 +#, c-format +msgid "unrecognized encoding \"%s\"" +msgstr "μη αναγνωρίσιμη κωδικοποίηση “%s”" + +#: pg_backup_archiver.c:2733 +#, c-format +msgid "invalid ENCODING item: %s" +msgstr "μη έγκυρο στοιχείο ENCODING: %s" + +#: pg_backup_archiver.c:2751 +#, c-format +msgid "invalid STDSTRINGS item: %s" +msgstr "μη έγκυρο στοιχείο STDSTRINGS: %s" + +#: pg_backup_archiver.c:2776 +#, c-format +msgid "schema \"%s\" not found" +msgstr "το σχήμα \"%s\" δεν βρέθηκε" + +#: pg_backup_archiver.c:2783 +#, c-format +msgid "table \"%s\" not found" +msgstr "ο πίνακας “%s” δεν βρέθηκε" + +#: pg_backup_archiver.c:2790 +#, c-format +msgid "index \"%s\" not found" +msgstr "το ευρετήριο “%s” δεν βρέθηκε" + +#: pg_backup_archiver.c:2797 +#, c-format +msgid "function \"%s\" not found" +msgstr "η συνάρτηση “%s” δεν βρέθηκε" + +#: pg_backup_archiver.c:2804 +#, c-format +msgid "trigger \"%s\" not found" +msgstr "η ενεργοποίηση \"%s\" δεν βρέθηκε" + +#: pg_backup_archiver.c:3196 +#, c-format +msgid "could not set session user to \"%s\": %s" +msgstr "δεν ήταν δυνατός ο ορισμός του χρήστη συνεδρίας σε \"%s\": %s" + +#: pg_backup_archiver.c:3328 +#, c-format +msgid "could not set search_path to \"%s\": %s" +msgstr "δεν ήταν δυνατός ο ορισμός του search_path σε “%s”: %s" + +#: pg_backup_archiver.c:3390 +#, c-format +msgid "could not set default_tablespace to %s: %s" +msgstr "δεν ήταν δυνατός ο ορισμός του default_tablespace σε “%s”: %s" + +#: pg_backup_archiver.c:3435 +#, c-format +msgid "could not set default_table_access_method: %s" +msgstr "δεν ήταν δυνατός ο ορισμός του default_table_access_method: %s" + +#: pg_backup_archiver.c:3527 pg_backup_archiver.c:3685 +#, c-format +msgid "don't know how to set owner for object type \"%s\"" +msgstr "δεν γνωρίζω πώς να οριστεί κάτοχος για τύπο αντικειμένου \"%s\"" + +#: pg_backup_archiver.c:3789 +#, c-format +msgid "did not find magic string in file header" +msgstr "δεν βρέθηκε μαγική συμβολοσειρά στην κεφαλίδα αρχείου" + +#: pg_backup_archiver.c:3802 +#, c-format +msgid "unsupported version (%d.%d) in file header" +msgstr "μη υποστηριζόμενη έκδοση (%d.%d) στην κεφαλίδα αρχείου" + +#: pg_backup_archiver.c:3807 +#, c-format +msgid "sanity check on integer size (%lu) failed" +msgstr "απέτυχε έλεγχος ακεραιότητας για μέγεθος ακεραίου (%lu)" + +#: pg_backup_archiver.c:3811 +#, c-format +msgid "" +"archive was made on a machine with larger integers, some operations might " +"fail" +msgstr "" +"το αρχείο δημιουργήθηκε σε έναν υπολογιστή με μεγαλύτερους ακέραιους, " +"ορισμένες λειτουργίες ενδέχεται να αποτύχουν" + +#: pg_backup_archiver.c:3821 +#, c-format +msgid "expected format (%d) differs from format found in file (%d)" +msgstr "" +"η αναμενόμενη μορφή (%d) διαφέρει από τη μορφή που βρίσκεται στο αρχείο (%d)" + +#: pg_backup_archiver.c:3837 +#, c-format +msgid "" +"archive is compressed, but this installation does not support compression -- " +"no data will be available" +msgstr "" +"το αρχείο είναι συμπιεσμένο, αλλά αυτή η εγκατάσταση δεν υποστηρίζει " +"συμπίεση -- δεν θα υπάρχουν διαθέσιμα δεδομένα" + +#: pg_backup_archiver.c:3855 +#, c-format +msgid "invalid creation date in header" +msgstr "μη έγκυρη ημερομηνία δημιουργίας στην κεφαλίδα" + +#: pg_backup_archiver.c:3983 +#, c-format +msgid "processing item %d %s %s" +msgstr "επεξεργασία στοιχείου %d %s %s" + +#: pg_backup_archiver.c:4062 +#, c-format +msgid "entering main parallel loop" +msgstr "εισέρχεται στο κύριο παράλληλο βρόχο" + +#: pg_backup_archiver.c:4073 +#, c-format +msgid "skipping item %d %s %s" +msgstr "παράβλεψη στοιχείου %d %s %s" + +#: pg_backup_archiver.c:4082 +#, c-format +msgid "launching item %d %s %s" +msgstr "εκκίνηση στοιχείου %d %s %s" + +#: pg_backup_archiver.c:4136 +#, c-format +msgid "finished main parallel loop" +msgstr "εξέρχεται από το κύριο παράλληλο βρόχο" + +#: pg_backup_archiver.c:4172 +#, c-format +msgid "processing missed item %d %s %s" +msgstr "επεξεργασία παραβλεπόμενου στοιχείου %d %s %s" + +#: pg_backup_archiver.c:4777 +#, c-format +msgid "table \"%s\" could not be created, will not restore its data" +msgstr "" +"δεν ήταν δυνατή η δημιουργία του πίνακα \"%s\", δεν θα επαναφερθούν τα " +"δεδομένα του" + +#: pg_backup_custom.c:378 pg_backup_null.c:147 +#, c-format +msgid "invalid OID for large object" +msgstr "μη έγκυρο OID για μεγάλο αντικειμένο" + +#: pg_backup_custom.c:441 pg_backup_custom.c:507 pg_backup_custom.c:632 +#: pg_backup_custom.c:870 pg_backup_tar.c:1086 pg_backup_tar.c:1091 +#, c-format +msgid "error during file seek: %m" +msgstr "σφάλμα κατά τη διάρκεια αναζήτησης σε αρχείο: %m" + +#: pg_backup_custom.c:480 +#, c-format +msgid "data block %d has wrong seek position" +msgstr "%d μπλοκ δεδομένων έχει εσφαλμένη θέση αναζήτησης" + +#: pg_backup_custom.c:497 +#, c-format +msgid "unrecognized data block type (%d) while searching archive" +msgstr "" +"τύπος μπλοκ δεδομένων (%d) που δεν αναγνωρίζεται κατά την αναζήτηση " +"αρχειοθέτησης" + +#: pg_backup_custom.c:519 +#, c-format +msgid "" +"could not find block ID %d in archive -- possibly due to out-of-order " +"restore request, which cannot be handled due to non-seekable input file" +msgstr "" +"δεν ήταν δυνατή η εύρεση μπλοκ ID %d στο αρχείο -- πιθανώς λόγω αίτησης " +"επαναφοράς εκτός σειράς, η οποία δεν είναι δυνατό να αντιμετωπιστεί λόγω μη " +"αναζητήσιμου αρχείου εισόδου" + +#: pg_backup_custom.c:524 +#, c-format +msgid "could not find block ID %d in archive -- possibly corrupt archive" +msgstr "" +"δεν ήταν δυνατή η εύρεση μπλοκ ID %d στην αρχειοθήκη -- πιθανώς αλλοιωμένη " +"αρχειοθήκη" + +#: pg_backup_custom.c:531 +#, c-format +msgid "found unexpected block ID (%d) when reading data -- expected %d" +msgstr "" +"βρέθηκε μη αναμενόμενο μπλοκ ID (%d) κατά την ανάγνωση δεδομένων -- " +"αναμενόμενο %d" + +#: pg_backup_custom.c:545 +#, c-format +msgid "unrecognized data block type %d while restoring archive" +msgstr "" +"μη αναγνωρίσιμος τύπος μπλοκ δεδομένων %d κατά την επαναφορά της αρχειοθήκης" + +#: pg_backup_custom.c:648 +#, c-format +msgid "could not read from input file: %m" +msgstr "δεν ήταν δυνατή η ανάγνωση από αρχείο: %m" + +#: pg_backup_custom.c:751 pg_backup_custom.c:803 pg_backup_custom.c:948 +#: pg_backup_tar.c:1089 +#, c-format +msgid "could not determine seek position in archive file: %m" +msgstr "" +"δεν ήταν δυνατός ο προσδιορισμός της θέσης αναζήτησης στην αρχειοθήκη: %m" + +#: pg_backup_custom.c:767 pg_backup_custom.c:807 +#, c-format +msgid "could not close archive file: %m" +msgstr "δεν ήταν δυνατό το κλείσιμο της αρχειοθήκης: %m" + +#: pg_backup_custom.c:790 +#, c-format +msgid "can only reopen input archives" +msgstr "μπορεί να επα-ανοίξει μόνο αρχειοθήκες εισόδου" + +#: pg_backup_custom.c:797 +#, c-format +msgid "parallel restore from standard input is not supported" +msgstr "η επαναφορά από τυπική είσοδο δεν υποστηρίζεται" + +#: pg_backup_custom.c:799 +#, c-format +msgid "parallel restore from non-seekable file is not supported" +msgstr "η παράλληλη επαναφορά από μη αναζητήσιμο αρχείο δεν υποστηρίζεται" + +#: pg_backup_custom.c:815 +#, c-format +msgid "could not set seek position in archive file: %m" +msgstr "δεν ήταν δυνατή η αναζήτηση θέσης στο αρχείο αρχειοθέτησης: %m" + +#: pg_backup_custom.c:894 +#, c-format +msgid "compressor active" +msgstr "συμπιεστής ενεργός" + +#: pg_backup_db.c:41 +#, c-format +msgid "could not get server_version from libpq" +msgstr "δεν ήταν δυνατή η απόκτηση server_version από libpq" + +#: pg_backup_db.c:52 pg_dumpall.c:1826 +#, c-format +msgid "server version: %s; %s version: %s" +msgstr "έκδοση διακομιστή: %s; %s έκδοση: %s" + +#: pg_backup_db.c:54 pg_dumpall.c:1828 +#, c-format +msgid "aborting because of server version mismatch" +msgstr "ματαίωση λόγω ασυμφωνίας έκδοσης διακομιστή" + +#: pg_backup_db.c:124 +#, c-format +msgid "already connected to a database" +msgstr "ήδη συνδεδεμένος σε βάση δεδομένων" + +#: pg_backup_db.c:133 pg_backup_db.c:185 pg_dumpall.c:1651 pg_dumpall.c:1764 +msgid "Password: " +msgstr "Κωδικός πρόσβασης: " + +#: pg_backup_db.c:177 +#, c-format +msgid "could not connect to database" +msgstr "δεν ήταν δυνατή η σύνδεση σε βάση δεδομένων" + +#: pg_backup_db.c:195 +#, c-format +msgid "reconnection to database \"%s\" failed: %s" +msgstr "επανασύνδεση στη βάση δεδομένων “%s” απέτυχε: %s" + +#: pg_backup_db.c:199 +#, c-format +msgid "connection to database \"%s\" failed: %s" +msgstr "σύνδεση στη βάση δεδομένων “%s” απέτυχε: %s" + +#: pg_backup_db.c:272 pg_dumpall.c:1684 +#, c-format +msgid "%s" +msgstr "%s" + +#: pg_backup_db.c:279 pg_dumpall.c:1889 pg_dumpall.c:1912 +#, c-format +msgid "query failed: %s" +msgstr "το ερώτημα απέτυχε: %s" + +#: pg_backup_db.c:281 pg_dumpall.c:1890 pg_dumpall.c:1913 +#, c-format +msgid "query was: %s" +msgstr "το ερώτημα ήταν: %s" + +#: pg_backup_db.c:322 +#, c-format +msgid "query returned %d row instead of one: %s" +msgid_plural "query returned %d rows instead of one: %s" +msgstr[0] "το ερώτημα επέστρεψε %d σειρά αντί μίας: %s" +msgstr[1] "το ερώτημα επέστρεψε %d σειρές αντί μίας: %s" + +#: pg_backup_db.c:358 +#, c-format +msgid "%s: %sCommand was: %s" +msgstr "%s: %s η εντολή ήταν: %s" + +#: pg_backup_db.c:414 pg_backup_db.c:488 pg_backup_db.c:495 +msgid "could not execute query" +msgstr "δεν ήταν δυνατή η εκτέλεση ερωτήματος" + +#: pg_backup_db.c:467 +#, c-format +msgid "error returned by PQputCopyData: %s" +msgstr "επιστράφηκε σφάλμα από PQputCopyData: %s" + +#: pg_backup_db.c:516 +#, c-format +msgid "error returned by PQputCopyEnd: %s" +msgstr "επιστράφηκε σφάλμα από PQputCopyEnd: %s" + +#: pg_backup_db.c:522 +#, c-format +msgid "COPY failed for table \"%s\": %s" +msgstr "COPY απέτυχε για πίνακα “%s”: %s" + +#: pg_backup_db.c:528 pg_dump.c:1988 +#, c-format +msgid "unexpected extra results during COPY of table \"%s\"" +msgstr "μη αναμενόμενα αποτελέσματα κατά τη διάρκεια COPY του πίνακα “%s”" + +#: pg_backup_db.c:540 +msgid "could not start database transaction" +msgstr "δεν ήταν δυνατή η εκκίνηση συναλλαγής βάσης δεδομένων" + +#: pg_backup_db.c:548 +msgid "could not commit database transaction" +msgstr "δεν ήταν δυνατή η ολοκλήρωση της συναλλαγής βάσης δεδομένων" + +#: pg_backup_directory.c:156 +#, c-format +msgid "no output directory specified" +msgstr "δεν ορίστηκε κατάλογος δεδομένων εξόδου" + +#: pg_backup_directory.c:185 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση του καταλόγου “%s”: %m" + +#: pg_backup_directory.c:189 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "δεν ήταν δυνατό το κλείσιμο του καταλόγου “%s”: %m" + +#: pg_backup_directory.c:195 +#, c-format +msgid "could not create directory \"%s\": %m" +msgstr "δεν ήταν δυνατή η δημιουργία του καταλόγου “%s”: %m" + +#: pg_backup_directory.c:355 pg_backup_directory.c:496 +#: pg_backup_directory.c:532 +#, c-format +msgid "could not write to output file: %s" +msgstr "δεν ήταν δυνατή η εγγραφή εξόδου στο αρχείο: %s" + +#: pg_backup_directory.c:406 +#, c-format +msgid "could not close data file \"%s\": %m" +msgstr "δεν ήταν δυνατό το κλείσιμο του αρχείου δεδομένων “%s”: %m" + +#: pg_backup_directory.c:446 +#, c-format +msgid "could not open large object TOC file \"%s\" for input: %m" +msgstr "" +"δεν ήταν δυνατό το άνοιγμα αρχείου TOC μεγάλου αντικειμένου \"%s\" για " +"είσοδο: %m" + +#: pg_backup_directory.c:457 +#, c-format +msgid "invalid line in large object TOC file \"%s\": \"%s\"" +msgstr "μη έγκυρη γραμμή σε αρχείο TOC μεγάλου αντικειμένου “%s”: “%s”" + +#: pg_backup_directory.c:466 +#, c-format +msgid "error reading large object TOC file \"%s\"" +msgstr "σφάλμα κατά την ανάγνωση αρχείου TOC μεγάλου αντικειμένου “%s”" + +#: pg_backup_directory.c:470 +#, c-format +msgid "could not close large object TOC file \"%s\": %m" +msgstr "δεν ήταν δυνατό το κλείσιμο αρχείου TOC μεγάλου αντικειμένου “%s”: %m" + +#: pg_backup_directory.c:689 +#, c-format +msgid "could not write to blobs TOC file" +msgstr "δεν ήταν δυνατή η εγγραφή σε αρχείο TOC blobs" + +#: pg_backup_directory.c:721 +#, c-format +msgid "file name too long: \"%s\"" +msgstr "πολύ μακρύ όνομα αρχείου: \"%s\"" + +#: pg_backup_null.c:74 +#, c-format +msgid "this format cannot be read" +msgstr "δεν είναι δυνατή η ανάγνωση αυτής της μορφής" + +#: pg_backup_tar.c:177 +#, c-format +msgid "could not open TOC file \"%s\" for output: %m" +msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου TOC “%s” για έξοδο: %m" + +#: pg_backup_tar.c:184 +#, c-format +msgid "could not open TOC file for output: %m" +msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου TOC για έξοδο: %m" + +#: pg_backup_tar.c:203 pg_backup_tar.c:358 +#, c-format +msgid "compression is not supported by tar archive format" +msgstr "δεν υποστηρίζεται συμπίεση από τη μορφή αρχειοθέτησης tar" + +#: pg_backup_tar.c:211 +#, c-format +msgid "could not open TOC file \"%s\" for input: %m" +msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου TOC “%s” για είσοδο: %m" + +#: pg_backup_tar.c:218 +#, c-format +msgid "could not open TOC file for input: %m" +msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου TOC για είσοδο: %m" + +#: pg_backup_tar.c:344 +#, c-format +msgid "could not find file \"%s\" in archive" +msgstr "δεν ήταν δυνατή η εύρεση του αρχείου \"%s\" στην αρχειοθήκη" + +#: pg_backup_tar.c:410 +#, c-format +msgid "could not generate temporary file name: %m" +msgstr "δεν ήταν δυνατή η δημιουργία ονόματος προσωρινού αρχείου: %m" + +#: pg_backup_tar.c:421 +#, c-format +msgid "could not open temporary file" +msgstr "δεν ήταν δυνατό το άνοιγμα του προσωρινού αρχείου" + +#: pg_backup_tar.c:448 +#, c-format +msgid "could not close tar member" +msgstr "δεν ήταν δυνατό το κλείσιμο μέλους tar" + +#: pg_backup_tar.c:691 +#, c-format +msgid "unexpected COPY statement syntax: \"%s\"" +msgstr "μη αναμενόμενη σύνταξη πρότασης COPY: \"%s\"" + +#: pg_backup_tar.c:958 +#, c-format +msgid "invalid OID for large object (%u)" +msgstr "μη έγκυρο OID για μεγάλο αντικείμενο (%u)" + +#: pg_backup_tar.c:1105 +#, c-format +msgid "could not close temporary file: %m" +msgstr "δεν ήταν δυνατό το κλείσιμο προσωρινού αρχείου: %m" + +#: pg_backup_tar.c:1114 +#, c-format +msgid "actual file length (%s) does not match expected (%s)" +msgstr "πραγματικό μήκος αρχείου (%s) δεν συμφωνεί με το αναμενόμενο (%s)" + +#: pg_backup_tar.c:1171 pg_backup_tar.c:1201 +#, c-format +msgid "could not find header for file \"%s\" in tar archive" +msgstr "δεν ήταν δυνατή η εύρεση κεφαλίδας για το αρχείο \"%s\" στο αρχείο tar" + +#: pg_backup_tar.c:1189 +#, c-format +msgid "" +"restoring data out of order is not supported in this archive format: \"%s\" " +"is required, but comes before \"%s\" in the archive file." +msgstr "" +"η επαναφορά δεδομένων εκτός σειράς δεν υποστηρίζεται σε αυτήν τη μορφή " +"αρχειοθέτησης: απαιτείται \"%s\", αλλά προηγείται της \"%s\" στο αρχείο " +"αρχειοθέτησης." + +#: pg_backup_tar.c:1234 +#, c-format +msgid "incomplete tar header found (%lu byte)" +msgid_plural "incomplete tar header found (%lu bytes)" +msgstr[0] "βρέθηκε ατελής κεφαλίδα tar (%lu byte)" +msgstr[1] "βρέθηκε ατελής κεφαλίδα tar (%lu bytes)" + +#: pg_backup_tar.c:1285 +#, c-format +msgid "" +"corrupt tar header found in %s (expected %d, computed %d) file position %s" +msgstr "" +"αλλοιωμένη κεφαλίδα tar βρέθηκε σε %s (αναμενόμενη %d, υπολογισμένη %d) θέση " +"αρχείου %s" + +#: pg_backup_utils.c:54 +#, c-format +msgid "unrecognized section name: \"%s\"" +msgstr "μη αναγνωρισμένο όνομα τμήματος: \"%s\"" + +#: pg_backup_utils.c:55 pg_dump.c:607 pg_dump.c:624 pg_dumpall.c:338 +#: pg_dumpall.c:348 pg_dumpall.c:357 pg_dumpall.c:366 pg_dumpall.c:374 +#: pg_dumpall.c:388 pg_dumpall.c:464 pg_restore.c:284 pg_restore.c:300 +#: pg_restore.c:318 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" + +#: pg_backup_utils.c:68 +#, c-format +msgid "out of on_exit_nicely slots" +msgstr "έλλειψη υποδοχών on_exit_nicely" + +#: pg_dump.c:533 +#, c-format +msgid "compression level must be in range 0..9" +msgstr "το επίπεδο συμπίεσης πρέπει να βρίσκεται στο εύρος 0..9" + +#: pg_dump.c:571 +#, c-format +msgid "extra_float_digits must be in range -15..3" +msgstr "extra_float_digits πρέπει να βρίσκονται στο εύρος -15..3" + +#: pg_dump.c:594 +#, c-format +msgid "rows-per-insert must be in range %d..%d" +msgstr "rows-per-insert πρέπει να βρίσκονται στο εύρος %d..%d" + +#: pg_dump.c:622 pg_dumpall.c:346 pg_restore.c:298 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "" +"πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (η πρώτη είναι η “%s”)" + +#: pg_dump.c:643 pg_restore.c:327 +#, c-format +msgid "options -s/--schema-only and -a/--data-only cannot be used together" +msgstr "" +"οι επιλογές -s/—schema-only και -a/--data-only δεν είναι δυνατό να " +"χρησιμοποιηθούν μαζί" + +#: pg_dump.c:648 +#, c-format +msgid "" +"options -s/--schema-only and --include-foreign-data cannot be used together" +msgstr "" +"οι επιλογές -s/—schema-only και —include-foreign-data δεν είναι δυνατό να " +"χρησιμοποιηθούν μαζί" + +#: pg_dump.c:651 +#, c-format +msgid "option --include-foreign-data is not supported with parallel backup" +msgstr "" +"η επιλογή —include-foreign-data δεν υποστηρίζεται με παράλληλη δημιουργία " +"αντιγράφων ασφαλείας" + +#: pg_dump.c:655 pg_restore.c:333 +#, c-format +msgid "options -c/--clean and -a/--data-only cannot be used together" +msgstr "" +"οι επιλογές -c/—clean και -a/—data-only δεν είναι δυνατό να χρησιμοποιηθούν " +"μαζί" + +#: pg_dump.c:660 pg_dumpall.c:381 pg_restore.c:382 +#, c-format +msgid "option --if-exists requires option -c/--clean" +msgstr "η επιλογή —if-exists απαιτεί την επιλογή -c/—clean" + +#: pg_dump.c:667 +#, c-format +msgid "" +"option --on-conflict-do-nothing requires option --inserts, --rows-per-" +"insert, or --column-inserts" +msgstr "" +"η επιλογή —on-conflict-do-nothing απαιτεί την επιλογή —inserts, —rows-per-" +"insert, ή —column-inserts" + +#: pg_dump.c:689 +#, c-format +msgid "" +"requested compression not available in this installation -- archive will be " +"uncompressed" +msgstr "" +"η συμπίεση που ζητήθηκε δεν είναι διαθέσιμη σε αυτήν την εγκατάσταση -- η " +"αρχειοθήκη θα είναι ασυμπίεστη" + +#: pg_dump.c:710 pg_restore.c:349 +#, c-format +msgid "invalid number of parallel jobs" +msgstr "μη έγκυρος αριθμός παράλληλων εργασιών" + +#: pg_dump.c:714 +#, c-format +msgid "parallel backup only supported by the directory format" +msgstr "παράλληλο αντίγραφο ασφαλείας υποστηρίζεται μόνο από μορφή καταλόγου" + +#: pg_dump.c:769 +#, c-format +msgid "" +"Synchronized snapshots are not supported by this server version.\n" +"Run with --no-synchronized-snapshots instead if you do not need\n" +"synchronized snapshots." +msgstr "" +"Τα συγχρονισμένα στιγμιότυπα δεν υποστηρίζονται από αυτήν την έκδοση " +"διακομιστή.\n" +"Εκτελέστε με —no-synchronized-snapshots, εάν δεν χρειάζεστε\n" +"συγχρονισμένα στιγμιότυπα." + +#: pg_dump.c:775 +#, c-format +msgid "Exported snapshots are not supported by this server version." +msgstr "" +"Τα εξαγόμενα στιγμιότυπα δεν υποστηρίζονται από αυτήν την έκδοση διακομιστή." + +#: pg_dump.c:787 +#, c-format +msgid "last built-in OID is %u" +msgstr "το τελευταίο ενσωματωμένο OID είναι %u" + +#: pg_dump.c:796 +#, c-format +msgid "no matching schemas were found" +msgstr "δεν βρέθηκαν σχήματα που να ταιριάζουν" + +#: pg_dump.c:810 +#, c-format +msgid "no matching tables were found" +msgstr "δεν βρέθηκαν πίνακες που να ταιριάζουν" + +#: pg_dump.c:990 +#, c-format +msgid "" +"%s dumps a database as a text file or to other formats.\n" +"\n" +msgstr "" +"%s αποθέτει μια βάση δεδομένων ως αρχείο κειμένου ή σε άλλες μορφές.\n" +"\n" + +#: pg_dump.c:991 pg_dumpall.c:617 pg_restore.c:462 +#, c-format +msgid "Usage:\n" +msgstr "Χρήση:\n" + +#: pg_dump.c:992 +#, c-format +msgid " %s [OPTION]... [DBNAME]\n" +msgstr " %s [OPTION]… [DBNAME]\n" + +#: pg_dump.c:994 pg_dumpall.c:620 pg_restore.c:465 +#, c-format +msgid "" +"\n" +"General options:\n" +msgstr "" +"\n" +"Γενικές επιλογές:\n" + +#: pg_dump.c:995 +#, c-format +msgid " -f, --file=FILENAME output file or directory name\n" +msgstr " -f, —file=FILENAME αρχείο εξόδου ή όνομα καταλόγου\n" + +#: pg_dump.c:996 +#, c-format +msgid "" +" -F, --format=c|d|t|p output file format (custom, directory, tar,\n" +" plain text (default))\n" +msgstr "" +" -F, —format=c|d|t|p μορφή αρχείου εξόδου (προσαρμοσμένη, " +"κατάλογος, tar,\n" +" απλό κείμενο (προεπιλογή))\n" + +#: pg_dump.c:998 +#, c-format +msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" +msgstr "" +" -j, —jobs=NUM χρησιμοποιήστε τόσες πολλές παράλληλες " +"εργασίες για απόθεση\n" + +#: pg_dump.c:999 pg_dumpall.c:622 +#, c-format +msgid " -v, --verbose verbose mode\n" +msgstr " -v, —verbose περιφραστική λειτουργία\n" + +#: pg_dump.c:1000 pg_dumpall.c:623 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr "" +" -V, —version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, " +"έξοδος\n" + +#: pg_dump.c:1001 +#, c-format +msgid "" +" -Z, --compress=0-9 compression level for compressed formats\n" +msgstr "" +" -Z, —compress=0-9 επίπεδο συμπίεσης για συμπιεσμένες μορφές\n" + +#: pg_dump.c:1002 pg_dumpall.c:624 +#, c-format +msgid "" +" --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" +msgstr "" +" —lock-wait-timeout=TIMEOUT αποτυγχάνει μετά την αναμονή TIMEOUT για το " +"κλείδωμα πίνακα\n" + +#: pg_dump.c:1003 pg_dumpall.c:651 +#, c-format +msgid "" +" --no-sync do not wait for changes to be written safely " +"to disk\n" +msgstr "" +" —no-sync να μην αναμένει την ασφαλή εγγραφή αλλαγών " +"στον δίσκο\n" + +#: pg_dump.c:1004 pg_dumpall.c:625 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr "" +" -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, και μετά " +"έξοδος\n" + +#: pg_dump.c:1006 pg_dumpall.c:626 +#, c-format +msgid "" +"\n" +"Options controlling the output content:\n" +msgstr "" +"\n" +"Επιλογές που ελέγχουν το περιεχόμενο εξόδου:\n" + +#: pg_dump.c:1007 pg_dumpall.c:627 +#, c-format +msgid " -a, --data-only dump only the data, not the schema\n" +msgstr "" +" -a, —data-only αποθέτει μόνο τα δεδομένα, όχι το σχήμα\n" + +#: pg_dump.c:1008 +#, c-format +msgid " -b, --blobs include large objects in dump\n" +msgstr "" +" -b, —blobs περιέλαβε μεγάλα αντικείμενα στην απόθεση\n" + +#: pg_dump.c:1009 +#, c-format +msgid " -B, --no-blobs exclude large objects in dump\n" +msgstr "" +" -B, —no-blobs εξαίρεσε μεγάλα αντικείμενα στην απόθεση\n" + +#: pg_dump.c:1010 pg_restore.c:476 +#, c-format +msgid "" +" -c, --clean clean (drop) database objects before " +"recreating\n" +msgstr "" +" -c, —clean καθάρισε (εγκατάληψε) αντικείμενα βάσης " +"δεδομένων πριν από την αναδημιουργία\n" + +#: pg_dump.c:1011 +#, c-format +msgid "" +" -C, --create include commands to create database in dump\n" +msgstr "" +" -C, —create συμπεριέλαβε εντολές για τη δημιουργία βάσης " +"δεδομένων στην απόθεση\n" + +#: pg_dump.c:1012 pg_dumpall.c:629 +#, c-format +msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" +msgstr "" +" -E, —encoding=ENCODING απόθεσε τα δεδομένα στην κωδικοποίηση " +"ENCODING\n" + +#: pg_dump.c:1013 +#, c-format +msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" +msgstr "" +" -n, —schema=PATTERN απόθεση μόνο για τα καθορισμένα σχήματα\n" + +#: pg_dump.c:1014 +#, c-format +msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" +msgstr " -N, —exclude-schema=PATTERN να ΜΗΝ αποθέσει τα καθορισμένα σχήματα\n" + +#: pg_dump.c:1015 +#, c-format +msgid "" +" -O, --no-owner skip restoration of object ownership in\n" +" plain-text format\n" +msgstr "" +" -O, —no-owner παράλειπε την αποκατάσταση της κυριότητας των " +"αντικειμένων στη\n" +" μορφή απλού κειμένου\n" + +#: pg_dump.c:1017 pg_dumpall.c:633 +#, c-format +msgid " -s, --schema-only dump only the schema, no data\n" +msgstr " -s, —schema-only απόθεση μόνο το σχήμα, χωρίς δεδομένα\n" + +#: pg_dump.c:1018 +#, c-format +msgid "" +" -S, --superuser=NAME superuser user name to use in plain-text " +"format\n" +msgstr "" +" -S, —superuser=NAME όνομα χρήστη υπερ-χρήστη που θα χρησιμοποιηθεί " +"σε μορφή απλού κειμένου\n" + +#: pg_dump.c:1019 +#, c-format +msgid " -t, --table=PATTERN dump the specified table(s) only\n" +msgstr " -t, —table=PATTERN απόθεση μόνο των καθορισμένων πινάκων\n" + +#: pg_dump.c:1020 +#, c-format +msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" +msgstr "" +" -T, —exclude-table=PATTERN να ΜΗΝ αποθέτει τους καθορισμένους πίνακες\n" + +#: pg_dump.c:1021 pg_dumpall.c:636 +#, c-format +msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" +msgstr "" +" -x, —no-privileges να ΜΗΝ αποθέτει δικαιώματα (εκχώρηση/" +"ανάκληση)\n" + +#: pg_dump.c:1022 pg_dumpall.c:637 +#, c-format +msgid " --binary-upgrade for use by upgrade utilities only\n" +msgstr "" +" —binary-upgrade μόνο για χρήση μόνο από βοηθητικά προγράμματα " +"αναβάθμισης\n" + +#: pg_dump.c:1023 pg_dumpall.c:638 +#, c-format +msgid "" +" --column-inserts dump data as INSERT commands with column " +"names\n" +msgstr "" +" —column-inserts αποθέτει δεδομένα ως εντολές INSERT με ονόματα " +"στηλών\n" + +#: pg_dump.c:1024 pg_dumpall.c:639 +#, c-format +msgid "" +" --disable-dollar-quoting disable dollar quoting, use SQL standard " +"quoting\n" +msgstr "" +" —disable-dollar-quoting απενεργοποίησε την παράθεση δολαρίου, χρήση " +"τυποποιημένης παράθεσης SQL\n" + +#: pg_dump.c:1025 pg_dumpall.c:640 pg_restore.c:493 +#, c-format +msgid "" +" --disable-triggers disable triggers during data-only restore\n" +msgstr "" +" —disable-triggers απενεργοποίησε τα εναύσματα κατά την επαναφορά " +"δεδομένων-μόνο\n" + +#: pg_dump.c:1026 +#, c-format +msgid "" +" --enable-row-security enable row security (dump only content user " +"has\n" +" access to)\n" +msgstr "" +" —enable-row-security ενεργοποιήστε την ασφάλεια σειρών (απόθεση " +"μόνο του περιεχομένου που ο χρήστης έχει\n" +" πρόσβαση)\n" + +#: pg_dump.c:1028 +#, c-format +msgid "" +" --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" +msgstr "" +" —exclude-table-data=PATTERN να ΜΗΝ αποθέσει δεδομένα για τους " +"καθορισμένους πίνακες\n" + +#: pg_dump.c:1029 pg_dumpall.c:642 +#, c-format +msgid "" +" --extra-float-digits=NUM override default setting for " +"extra_float_digits\n" +msgstr "" +" --extra-float-digits=NUM παράκαμψε την προεπιλεγμένη ρύθμιση για " +"extra_float_digits\n" + +#: pg_dump.c:1030 pg_dumpall.c:643 pg_restore.c:495 +#, c-format +msgid " --if-exists use IF EXISTS when dropping objects\n" +msgstr "" +" —if-exists χρησιμοποίησε το IF EXISTS κατά την εγκαταλήψη " +"αντικειμένων\n" + +#: pg_dump.c:1031 +#, c-format +msgid "" +" --include-foreign-data=PATTERN\n" +" include data of foreign tables on foreign\n" +" servers matching PATTERN\n" +msgstr "" +" —include-foreign-data=PATTERN\n" +" περιέλαβε δεδομένα ξένων πινάκων για\n" +" διακομιστές που ταιριάζουν με PATTERN\n" + +#: pg_dump.c:1034 pg_dumpall.c:644 +#, c-format +msgid "" +" --inserts dump data as INSERT commands, rather than " +"COPY\n" +msgstr "" +" —inserts απόθεσε δεδομένα ως εντολές INSERT, αντί για " +"COPY\n" + +#: pg_dump.c:1035 pg_dumpall.c:645 +#, c-format +msgid " --load-via-partition-root load partitions via the root table\n" +msgstr "" +" —load-via-partition-root φόρτωσε διαχωρίσματα μέσω του βασικού πίνακα\n" + +#: pg_dump.c:1036 pg_dumpall.c:646 +#, c-format +msgid " --no-comments do not dump comments\n" +msgstr " —no-comments να μην αποθέσεις σχόλια\n" + +#: pg_dump.c:1037 pg_dumpall.c:647 +#, c-format +msgid " --no-publications do not dump publications\n" +msgstr " —no-publications να μην αποθέσεις δημοσιεύσεις\n" + +#: pg_dump.c:1038 pg_dumpall.c:649 +#, c-format +msgid " --no-security-labels do not dump security label assignments\n" +msgstr "" +" —no-security-labels να μην αποθέσεις αντιστοιχίσεις ετικετών " +"ασφαλείας\n" + +#: pg_dump.c:1039 pg_dumpall.c:650 +#, c-format +msgid " --no-subscriptions do not dump subscriptions\n" +msgstr " —no-publications να μην αποθέσεις συνδρομές\n" + +#: pg_dump.c:1040 +#, c-format +msgid "" +" --no-synchronized-snapshots do not use synchronized snapshots in parallel " +"jobs\n" +msgstr "" +" —no-synchronized-snapshots να μην χρησιμοποιήσει συγχρονισμένα " +"στιγμιότυπα σε παράλληλες εργασίες\n" + +#: pg_dump.c:1041 pg_dumpall.c:652 +#, c-format +msgid " --no-tablespaces do not dump tablespace assignments\n" +msgstr " —no-tablespaces να μην αποθέσει αναθέσεις πινακοχώρος\n" + +#: pg_dump.c:1042 pg_dumpall.c:653 +#, c-format +msgid " --no-unlogged-table-data do not dump unlogged table data\n" +msgstr "" +" —no-unlogged-table-data να μην αποθέσει μη δεδομένα μη-καταγραμένου " +"πίνακα\n" + +#: pg_dump.c:1043 pg_dumpall.c:654 +#, c-format +msgid "" +" --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT " +"commands\n" +msgstr "" +" —on-conflict-do-nothing προσθέστε ON CONFLICT DO NOTHING στις εντολές " +"INSERT\n" + +#: pg_dump.c:1044 pg_dumpall.c:655 +#, c-format +msgid "" +" --quote-all-identifiers quote all identifiers, even if not key words\n" +msgstr "" +" —quote-all-identifiers παράθεσε όλα τα αναγνωριστικά, ακόμα και αν " +"δεν είναι λέξεις κλειδιά\n" + +#: pg_dump.c:1045 pg_dumpall.c:656 +#, c-format +msgid "" +" --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" +msgstr "" +" —rows-per-insert=NROWS αριθμός γραμμών ανά INSERT; υπονοεί —inserts\n" + +#: pg_dump.c:1046 +#, c-format +msgid "" +" --section=SECTION dump named section (pre-data, data, or post-" +"data)\n" +msgstr "" +" —section=SECTION απόθεσε ονομασμένες ενότητες (προ-δεδομένα, " +"δεδομένα, ή μετα-δεδομένα)\n" + +#: pg_dump.c:1047 +#, c-format +msgid "" +" --serializable-deferrable wait until the dump can run without " +"anomalies\n" +msgstr "" +" —serializable-deferrable ανάμενε έως ότου η απόθεση να μπορεί να τρέξει " +"χωρίς ανωμαλίες\n" + +#: pg_dump.c:1048 +#, c-format +msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" +msgstr "" +" —snapshot=SNAPSHOT χρησιμοποίησε το δοσμένο στιγμιότυπο για την " +"απόθεση\n" + +#: pg_dump.c:1049 pg_restore.c:504 +#, c-format +msgid "" +" --strict-names require table and/or schema include patterns " +"to\n" +" match at least one entity each\n" +msgstr "" +" —strict-names απαίτησε τα μοτίβα περίληψης πίνακα ή/και " +"σχήματος να\n" +" αντιστοιχήσουν τουλάχιστον μία οντότητα το " +"καθένα\n" + +#: pg_dump.c:1051 pg_dumpall.c:657 pg_restore.c:506 +#, c-format +msgid "" +" --use-set-session-authorization\n" +" use SET SESSION AUTHORIZATION commands " +"instead of\n" +" ALTER OWNER commands to set ownership\n" +msgstr "" +" —use-set-session-authorization\n" +" χρησιμοποιήσε τις εντολές SET SESSION " +"AUTHORIZATION αντί των\n" +" ALTER OWNER για τον ορισμό ιδιοκτησίας\n" + +#: pg_dump.c:1055 pg_dumpall.c:661 pg_restore.c:510 +#, c-format +msgid "" +"\n" +"Connection options:\n" +msgstr "" +"\n" +"Επιλογές σύνδεσης:\n" + +#: pg_dump.c:1056 +#, c-format +msgid " -d, --dbname=DBNAME database to dump\n" +msgstr " -d, —dbname=DBNAME βάση δεδομένων για απόθεση\n" + +#: pg_dump.c:1057 pg_dumpall.c:663 pg_restore.c:511 +#, c-format +msgid " -h, --host=HOSTNAME database server host or socket directory\n" +msgstr "" +" -h, —host=HOSTNAME διακομιστής βάσης δεδομένων ή κατάλογος υποδοχών\n" + +#: pg_dump.c:1058 pg_dumpall.c:665 pg_restore.c:512 +#, c-format +msgid " -p, --port=PORT database server port number\n" +msgstr " -p, —port=PORT θύρα διακομιστή βάσης δεδομένων\n" + +#: pg_dump.c:1059 pg_dumpall.c:666 pg_restore.c:513 +#, c-format +msgid " -U, --username=NAME connect as specified database user\n" +msgstr "" +" -U, —username=USERNAME σύνδεση ως ο ορισμένος χρήστης βάσης δεδομένων\n" + +#: pg_dump.c:1060 pg_dumpall.c:667 pg_restore.c:514 +#, c-format +msgid " -w, --no-password never prompt for password\n" +msgstr " -w, —no-password να μην ζητείται ποτέ κωδικός πρόσβασης\n" + +#: pg_dump.c:1061 pg_dumpall.c:668 pg_restore.c:515 +#, c-format +msgid "" +" -W, --password force password prompt (should happen " +"automatically)\n" +msgstr "" +" -W, —password αναγκαστική προτροπή κωδικού πρόσβασης (πρέπει να " +"συμβεί αυτόματα)\n" + +#: pg_dump.c:1062 pg_dumpall.c:669 +#, c-format +msgid " --role=ROLENAME do SET ROLE before dump\n" +msgstr " —role=ROLENAME κάνε SET ROLE πριν την απόθεση\n" + +#: pg_dump.c:1064 +#, c-format +msgid "" +"\n" +"If no database name is supplied, then the PGDATABASE environment\n" +"variable value is used.\n" +"\n" +msgstr "" +"\n" +"Εάν δεν παρέχεται όνομα βάσης δεδομένων, τότε χρησιμοποιείται η μεταβλητή\n" +"περιβάλλοντος PGDATABASE .\n" +"\n" + +#: pg_dump.c:1066 pg_dumpall.c:673 pg_restore.c:522 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "Υποβάλετε αναφορές σφάλματων σε <%s>.\n" + +#: pg_dump.c:1067 pg_dumpall.c:674 pg_restore.c:523 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s αρχική σελίδα: <%s>\n" + +#: pg_dump.c:1086 pg_dumpall.c:499 +#, c-format +msgid "invalid client encoding \"%s\" specified" +msgstr "καθορίστηκε μη έγκυρη κωδικοποίηση προγράμματος-πελάτη \"%s\"" + +#: pg_dump.c:1232 +#, c-format +msgid "" +"Synchronized snapshots on standby servers are not supported by this server " +"version.\n" +"Run with --no-synchronized-snapshots instead if you do not need\n" +"synchronized snapshots." +msgstr "" +"Τα συγχρονισμένα στιγμιότυπα σε διακομιστές αναμονής δεν υποστηρίζονται από " +"αυτήν την έκδοση διακομιστή.\n" +"Εκτελέστε με —no-synchronized-snapshots, εάν δεν χρειάζεστε\n" +"συγχρονισμένα στιγμιότυπα." + +#: pg_dump.c:1301 +#, c-format +msgid "invalid output format \"%s\" specified" +msgstr "ορίστηκε μη έγκυρη μορφή εξόδου “%s”" + +#: pg_dump.c:1339 +#, c-format +msgid "no matching schemas were found for pattern \"%s\"" +msgstr "δεν βρέθηκαν σχήματα που να ταιριάζουν με το μοτίβο \"%s\"" + +#: pg_dump.c:1386 +#, c-format +msgid "no matching foreign servers were found for pattern \"%s\"" +msgstr "δεν βρέθηκαν ξένοι διακομιστές που να ταιριάζουν με το μοτίβο \"%s\"" + +#: pg_dump.c:1449 +#, c-format +msgid "no matching tables were found for pattern \"%s\"" +msgstr "δεν βρέθηκαν πίνακες που να ταιριάζουν για το μοτίβο \"%s\"" + +#: pg_dump.c:1862 +#, c-format +msgid "dumping contents of table \"%s.%s\"" +msgstr "αποθέτει τα δεδομένα του πίνακα “%s.%s”" + +#: pg_dump.c:1969 +#, c-format +msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." +msgstr "" +"Η απόθεση των περιεχομένων του πίνακα \"%s\" απέτυχε: PQgetCopyData() " +"απέτυχε." + +#: pg_dump.c:1970 pg_dump.c:1980 +#, c-format +msgid "Error message from server: %s" +msgstr "Μήνυμα σφάλματος από διακομιστή: %s" + +#: pg_dump.c:1971 pg_dump.c:1981 +#, c-format +msgid "The command was: %s" +msgstr "Η εντολή ήταν: %s" + +#: pg_dump.c:1979 +#, c-format +msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." +msgstr "" +"Η απόθεση των περιεχομένων του πίνακα \"%s\" απέτυχε: PQgetResult() απέτυχε." + +#: pg_dump.c:2739 +#, c-format +msgid "saving database definition" +msgstr "αποθήκευση ορισμού βάσης δεδομένων" + +#: pg_dump.c:3211 +#, c-format +msgid "saving encoding = %s" +msgstr "αποθηκεύει encoding = %s" + +#: pg_dump.c:3236 +#, c-format +msgid "saving standard_conforming_strings = %s" +msgstr "αποθηκεύει standard_conforming_strings = %s" + +#: pg_dump.c:3275 +#, c-format +msgid "could not parse result of current_schemas()" +msgstr "δεν ήταν δυνατή η ανάλυση του αποτελέσματος της current_schemas()" + +#: pg_dump.c:3294 +#, c-format +msgid "saving search_path = %s" +msgstr "αποθηκεύει search_path = %s" + +#: pg_dump.c:3334 +#, c-format +msgid "reading large objects" +msgstr "ανάγνωση μεγάλων αντικειμένων" + +#: pg_dump.c:3516 +#, c-format +msgid "saving large objects" +msgstr "αποθηκεύει μεγάλων αντικειμένων" + +#: pg_dump.c:3562 +#, c-format +msgid "error reading large object %u: %s" +msgstr "σφάλμα κατά την ανάγνωση %u μεγάλου αντικειμένου: %s" + +#: pg_dump.c:3614 +#, c-format +msgid "reading row security enabled for table \"%s.%s\"" +msgstr "ανάγνωση ενεργοποιημένης ασφάλειας γραμμής για τον πίνακα \"%s.%s\"" + +#: pg_dump.c:3645 +#, c-format +msgid "reading policies for table \"%s.%s\"" +msgstr "ανάγνωση πολιτικών για τον πίνακα \"%s.%s\"" + +#: pg_dump.c:3797 +#, c-format +msgid "unexpected policy command type: %c" +msgstr "μη αναμενόμενος τύπος εντολής πολιτικής: %c" + +#: pg_dump.c:3951 +#, c-format +msgid "owner of publication \"%s\" appears to be invalid" +msgstr "ο κάτοχος της δημοσίευσης \"%s\" φαίνεται να μην είναι έγκυρος" + +#: pg_dump.c:4241 +#, c-format +msgid "subscriptions not dumped because current user is not a superuser" +msgstr "" +"οι συνδρομές δεν απορρίπτονται, επειδή ο τρέχων χρήστης δεν είναι υπερχρήστης" + +#: pg_dump.c:4295 +#, c-format +msgid "owner of subscription \"%s\" appears to be invalid" +msgstr "ο κάτοχος της συνδρομής \"%s\" φαίνεται να μην είναι έγκυρος" + +#: pg_dump.c:4339 +#, c-format +msgid "could not parse subpublications array" +msgstr "δεν ήταν δυνατή η ανάλυση της συστυχίας υποδημοσιεύσεων" + +#: pg_dump.c:4661 +#, c-format +msgid "could not find parent extension for %s %s" +msgstr "δεν ήταν δυνατή η εύρεση γονικής επέκτασης για %s %s" + +#: pg_dump.c:4793 +#, c-format +msgid "owner of schema \"%s\" appears to be invalid" +msgstr "ο κάτοχος του σχήματος \"%s\" φαίνεται να μην είναι έγκυρος" + +#: pg_dump.c:4816 +#, c-format +msgid "schema with OID %u does not exist" +msgstr "το σχήμα με %u OID δεν υπάρχει" + +#: pg_dump.c:5141 +#, c-format +msgid "owner of data type \"%s\" appears to be invalid" +msgstr "ο κάτοχος του τύπου δεδομένων \"%s\" φαίνεται να μην είναι έγκυρος" + +#: pg_dump.c:5226 +#, c-format +msgid "owner of operator \"%s\" appears to be invalid" +msgstr "ο κάτοχος του χειριστή “%s” φαίνεται να μην είναι έγκυρος" + +#: pg_dump.c:5528 +#, c-format +msgid "owner of operator class \"%s\" appears to be invalid" +msgstr "ο κάτοχος της κλάσης χειριστή \"%s\" φαίνεται να μην είναι έγκυρος" + +#: pg_dump.c:5612 +#, c-format +msgid "owner of operator family \"%s\" appears to be invalid" +msgstr "" +"ο κάτοχος της οικογένειας χειριστών \"%s\" φαίνεται να μην είναι έγκυρος" + +#: pg_dump.c:5781 +#, c-format +msgid "owner of aggregate function \"%s\" appears to be invalid" +msgstr "" +"ο κάτοχος της συνάρτησης συγκεντρωτικών αποτελεσμάτων \"%s\" φαίνεται να μην " +"είναι έγκυρος" + +#: pg_dump.c:6041 +#, c-format +msgid "owner of function \"%s\" appears to be invalid" +msgstr "ο κάτοχος της συνάρτησης \"%s\" φαίνεται να μην είναι έγκυρος" + +#: pg_dump.c:6869 +#, c-format +msgid "owner of table \"%s\" appears to be invalid" +msgstr "ο κάτοχος του πίνακα \"%s\" φαίνεται να μην είναι έγκυρος" + +#: pg_dump.c:6911 pg_dump.c:17426 +#, c-format +msgid "" +"failed sanity check, parent table with OID %u of sequence with OID %u not " +"found" +msgstr "" +"απέτυχε ο έλεγχος ακεραιότητας, ο γονικός πίνακας με OID %u της ακολουθίας " +"με OID %u δεν βρέθηκε" + +#: pg_dump.c:7053 +#, c-format +msgid "reading indexes for table \"%s.%s\"" +msgstr "ανάγνωση ευρετηρίων για τον πίνακα \"%s.%s\"" + +#: pg_dump.c:7468 +#, c-format +msgid "reading foreign key constraints for table \"%s.%s\"" +msgstr "ανάγνωση περιορισμών ξένου κλειδιού για τον πίνακα \"%s.%s\"" + +#: pg_dump.c:7749 +#, c-format +msgid "" +"failed sanity check, parent table with OID %u of pg_rewrite entry with OID " +"%u not found" +msgstr "" +"απέτυχε ο έλεγχος ακεραιότητας, ο γονικός πίνακας με OID %u της καταχώρησης " +"pg_rewrite με OID %u δεν βρέθηκε" + +#: pg_dump.c:7832 +#, c-format +msgid "reading triggers for table \"%s.%s\"" +msgstr "ανάγνωση εναυσμάτων για τον πίνακα “%s.%s”" + +#: pg_dump.c:7965 +#, c-format +msgid "" +"query produced null referenced table name for foreign key trigger \"%s\" on " +"table \"%s\" (OID of table: %u)" +msgstr "" +"το ερώτημα παρήγαγε null πίνακα αναφοράς για το έναυσμα ξένου κλειδιού \"%s" +"\" στον πίνακα \"%s\" (OID του πίνακα: %u)" + +#: pg_dump.c:8520 +#, c-format +msgid "finding the columns and types of table \"%s.%s\"" +msgstr "εύρεση των στηλών και των τύπων του πίνακα “%s.%s”" + +#: pg_dump.c:8656 +#, c-format +msgid "invalid column numbering in table \"%s\"" +msgstr "μη έγκυρη αρίθμηση στηλών στον πίνακα \"%s\"" + +#: pg_dump.c:8693 +#, c-format +msgid "finding default expressions of table \"%s.%s\"" +msgstr "εύρεση προεπιλεγμένων εκφράσεων για τον πίνακα \"%s.%s\"" + +#: pg_dump.c:8715 +#, c-format +msgid "invalid adnum value %d for table \"%s\"" +msgstr "μη έγκυρη τιμή adnum %d για τον πίνακα \"%s\"" + +#: pg_dump.c:8807 +#, c-format +msgid "finding check constraints for table \"%s.%s\"" +msgstr "εύρεση περιορισμών ελέγχου για τον πίνακα \"%s.%s\"" + +#: pg_dump.c:8856 +#, c-format +msgid "expected %d check constraint on table \"%s\" but found %d" +msgid_plural "expected %d check constraints on table \"%s\" but found %d" +msgstr[0] "" +"αναμενόμενος %d περιορισμός ελέγχου στον πίνακα \"%s\", αλλά βρήκε %d" +msgstr[1] "αναμενόμενοι %d περιορισμοί ελέγχου στον πίνακα “%s”, αλλά βρήκε %d" + +#: pg_dump.c:8860 +#, c-format +msgid "(The system catalogs might be corrupted.)" +msgstr "(Οι κατάλογοι συστήματος ενδέχεται να είναι αλλοιωμένοι.)" + +#: pg_dump.c:10446 +#, c-format +msgid "typtype of data type \"%s\" appears to be invalid" +msgstr "typtype του τύπου δεδομένων \"%s\" φαίνεται να μην είναι έγκυρο" + +#: pg_dump.c:11800 +#, c-format +msgid "bogus value in proargmodes array" +msgstr "πλαστή τιμή στη συστυχία proargmodes" + +#: pg_dump.c:12172 +#, c-format +msgid "could not parse proallargtypes array" +msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας proallargtypes" + +#: pg_dump.c:12188 +#, c-format +msgid "could not parse proargmodes array" +msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας proargmodes" + +#: pg_dump.c:12202 +#, c-format +msgid "could not parse proargnames array" +msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας proargnames" + +#: pg_dump.c:12213 +#, c-format +msgid "could not parse proconfig array" +msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας proconfig" + +#: pg_dump.c:12293 +#, c-format +msgid "unrecognized provolatile value for function \"%s\"" +msgstr "μη αναγνωρίσιμη τιμή provolatile για τη συνάρτηση \"%s\"" + +#: pg_dump.c:12343 pg_dump.c:14401 +#, c-format +msgid "unrecognized proparallel value for function \"%s\"" +msgstr "μη αναγνωρίσιμη τιμή proparallel για τη συνάρτηση “%s”" + +#: pg_dump.c:12482 pg_dump.c:12591 pg_dump.c:12598 +#, c-format +msgid "could not find function definition for function with OID %u" +msgstr "" +"δεν ήταν δυνατή η εύρεση ορισμού συνάντησης για την συνάρτηση με OID %u" + +#: pg_dump.c:12521 +#, c-format +msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" +msgstr "πλαστή τιμή στο πεδίο pg_cast.castfunc ή pg_cast.castmethod" + +#: pg_dump.c:12524 +#, c-format +msgid "bogus value in pg_cast.castmethod field" +msgstr "πλαστή τιμή στο πεδίο pg_cast.castmethod" + +#: pg_dump.c:12617 +#, c-format +msgid "" +"bogus transform definition, at least one of trffromsql and trftosql should " +"be nonzero" +msgstr "" +"πλαστός ορισμός μετασχηματισμού, τουλάχιστον μία από trffromsql και trftosql " +"θα πρέπει να είναι μη μηδενική" + +#: pg_dump.c:12634 +#, c-format +msgid "bogus value in pg_transform.trffromsql field" +msgstr "πλαστή τιμή στο πεδίο pg_transform.trffromsql" + +#: pg_dump.c:12655 +#, c-format +msgid "bogus value in pg_transform.trftosql field" +msgstr "πλαστή τιμή στο πεδίοpg_transform.trftosql" + +#: pg_dump.c:12971 +#, c-format +msgid "could not find operator with OID %s" +msgstr "δεν ήταν δυνατή η εύρεση χειριστή με OID %s" + +#: pg_dump.c:13039 +#, c-format +msgid "invalid type \"%c\" of access method \"%s\"" +msgstr "μη έγκυρος τύπος \"%c\" για την μεθόδο πρόσβασης \"%s\"" + +#: pg_dump.c:13793 +#, c-format +msgid "unrecognized collation provider: %s" +msgstr "μη αναγνωρίσιμος πάροχος συρραφής: %s" + +#: pg_dump.c:14265 +#, c-format +msgid "" +"aggregate function %s could not be dumped correctly for this database " +"version; ignored" +msgstr "" +"δεν ήταν δυνατή η σωστή απόθεση της συνάρτησης συγκεντρωτικών αποτελεσμάτων " +"%s για αυτήν την έκδοση της βάσης δεδομένων· παραβλέπεται" + +#: pg_dump.c:14320 +#, c-format +msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" +msgstr "μη αναγνωρίσιμη τιμή aggfinalmodify για το συγκεντρωτικό \"%s\"" + +#: pg_dump.c:14376 +#, c-format +msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" +msgstr "μη αναγνωρίσιμη τιμή aggmfinalmodify για το συγκεντρωτικό “%s”" + +#: pg_dump.c:15098 +#, c-format +msgid "unrecognized object type in default privileges: %d" +msgstr "μη αναγνωρίσιμος τύπος αντικειμένου σε προεπιλεγμένα δικαιώματα: %d" + +#: pg_dump.c:15116 +#, c-format +msgid "could not parse default ACL list (%s)" +msgstr "δεν ήταν δυνατή η ανάλυση της προεπιλεγμένης λίστας ACL (%s)" + +#: pg_dump.c:15201 +#, c-format +msgid "" +"could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) " +"for object \"%s\" (%s)" +msgstr "" +"δεν ήταν δυνατή η ανάλυση της αρχικής λίστας ACL GRANT (%s) ή της αρχικής " +"λίστας REVOKE ACL (%s) για το αντικείμενο \"%s\" (%s)" + +#: pg_dump.c:15209 +#, c-format +msgid "" +"could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s" +"\" (%s)" +msgstr "" +"δεν ήταν δυνατή η ανάλυση της λίστας GRANT ACL (%s) ή της λίστας REVOKE ACL " +"(%s) για το αντικείμενο \"%s\" (%s)" + +#: pg_dump.c:15724 +#, c-format +msgid "query to obtain definition of view \"%s\" returned no data" +msgstr "το ερώτημα για τη λήψη ορισμού της όψης \"%s\" δεν επέστρεψε δεδομένα" + +#: pg_dump.c:15727 +#, c-format +msgid "" +"query to obtain definition of view \"%s\" returned more than one definition" +msgstr "" +"το ερώτημα για τη λήψη ορισμού της όψης \"%s\" επέστρεψε περισσότερους από " +"έναν ορισμούς" + +#: pg_dump.c:15734 +#, c-format +msgid "definition of view \"%s\" appears to be empty (length zero)" +msgstr "ο ορισμός της όψης \"%s\" φαίνεται να είναι κενός (μηδενικό μήκος)" + +#: pg_dump.c:15818 +#, c-format +msgid "WITH OIDS is not supported anymore (table \"%s\")" +msgstr "WITH OIDS δεν υποστηρίζεται πλέον (πίνακας \"%s\")" + +#: pg_dump.c:16298 +#, c-format +msgid "invalid number of parents %d for table \"%s\"" +msgstr "μη έγκυρος αριθμός γονέων %d για τον πίνακα \"%s\"" + +#: pg_dump.c:16621 +#, c-format +msgid "invalid column number %d for table \"%s\"" +msgstr "μη έγκυρος αριθμός στήλης %d για τον πίνακα \"%s\"" + +#: pg_dump.c:16914 +#, c-format +msgid "missing index for constraint \"%s\"" +msgstr "λείπει ευρετήριο για τον περιορισμό \"%s\"" + +#: pg_dump.c:17139 +#, c-format +msgid "unrecognized constraint type: %c" +msgstr "μη αναγνωρίσιμος τύπος περιορισμού: %c" + +#: pg_dump.c:17271 pg_dump.c:17491 +#, c-format +msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" +msgid_plural "" +"query to get data of sequence \"%s\" returned %d rows (expected 1)" +msgstr[0] "" +"ερώτημα για τη λήψη δεδομένων ακολουθίας \"%s\" επέστρεψε %d γραμμή " +"(αναμένεται 1)" +msgstr[1] "" +"ερώτημα για τη λήψη δεδομένων ακολουθίας “%s” επέστρεψε %d γραμμές " +"(αναμένεται 1)" + +#: pg_dump.c:17305 +#, c-format +msgid "unrecognized sequence type: %s" +msgstr "μη αναγνωρίσιμος τύπος ακολουθίας: %s" + +#: pg_dump.c:17589 +#, c-format +msgid "unexpected tgtype value: %d" +msgstr "μη αναγνωρίσιμος τύπος tgtype: %d" + +#: pg_dump.c:17663 +#, c-format +msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" +msgstr "" +"μη έγκυρη συμβολοσειρά παραμέτρου (%s) για το έναυσμα \"%s\" στον πίνακα \"%s" +"\"" + +#: pg_dump.c:17899 +#, c-format +msgid "" +"query to get rule \"%s\" for table \"%s\" failed: wrong number of rows " +"returned" +msgstr "" +"ερώτημα για τη λήψη κανόνα \"%s\" για τον πίνακα \"%s\" απέτυχε: επιστράφηκε " +"εσφαλμένος αριθμός γραμμών" + +#: pg_dump.c:18061 +#, c-format +msgid "could not find referenced extension %u" +msgstr "δεν ήταν δυνατή η εύρεση της αναφερόμενης επέκτασης %u" + +#: pg_dump.c:18273 +#, c-format +msgid "reading dependency data" +msgstr "ανάγνωση δεδομένων εξάρτησης" + +#: pg_dump.c:18366 +#, c-format +msgid "no referencing object %u %u" +msgstr "δεν αναφέρεται αντικείμενο %u %u" + +#: pg_dump.c:18377 +#, c-format +msgid "no referenced object %u %u" +msgstr "μη αναφερόμενο αντικείμενο %u %u" + +#: pg_dump.c:18750 +#, c-format +msgid "could not parse reloptions array" +msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας reloptions" + +#: pg_dump_sort.c:360 +#, c-format +msgid "invalid dumpId %d" +msgstr "μη έγκυρο dumpId %d" + +#: pg_dump_sort.c:366 +#, c-format +msgid "invalid dependency %d" +msgstr "μη έγκυρη εξάρτηση %d" + +#: pg_dump_sort.c:599 +#, c-format +msgid "could not identify dependency loop" +msgstr "δεν ήταν δυνατός ο προσδιορισμός βρόχου εξάρτησης" + +#: pg_dump_sort.c:1170 +#, c-format +msgid "there are circular foreign-key constraints on this table:" +msgid_plural "there are circular foreign-key constraints among these tables:" +msgstr[0] "υπάρχουν κυκλικοί περιορισμοί ξένου κλειδιού σε αυτόν τον πίνακα:" +msgstr[1] "" +"υπάρχουν κυκλικοί περιορισμοί ξένου κλειδιού σε αυτούς τους πίνακες:" + +#: pg_dump_sort.c:1174 pg_dump_sort.c:1194 +#, c-format +msgid " %s" +msgstr " %s" + +#: pg_dump_sort.c:1175 +#, c-format +msgid "" +"You might not be able to restore the dump without using --disable-triggers " +"or temporarily dropping the constraints." +msgstr "" +"Ενδέχεται να μην μπορείτε να επαναφέρετε την ένδειξη χωρίς να " +"χρησιμοποιήσετε --disable-triggers ή να εγκαταλήψετε προσωρινά τους " +"περιορισμούς." + +#: pg_dump_sort.c:1176 +#, c-format +msgid "" +"Consider using a full dump instead of a --data-only dump to avoid this " +"problem." +msgstr "" +"Εξετάστε το ενδεχόμενο να χρησιμοποιήσετε μια πλήρη απόθεση αντί για μια —" +"data-only απόθεση για να αποφύγετε αυτό το πρόβλημα." + +#: pg_dump_sort.c:1188 +#, c-format +msgid "could not resolve dependency loop among these items:" +msgstr "" +"δεν ήταν δυνατή η επίλυση του βρόχου εξάρτησης μεταξύ αυτών των στοιχείων:" + +#: pg_dumpall.c:199 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "" +"Το πρόγραμμα \"%s\" απαιτείται από %s αλλά δεν βρέθηκε στο\n" +"ίδιος κατάλογος με το \"%s\".\n" +"Ελέγξτε την εγκατάστασή σας." + +#: pg_dumpall.c:204 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "" +"Το πρόγραμμα \"%s\" βρέθηκε από το \"%s\"\n" +"αλλά δεν ήταν η ίδια εκδοχή με %s.\n" +"Ελέγξτε την εγκατάστασή σας." + +#: pg_dumpall.c:356 +#, c-format +msgid "" +"option --exclude-database cannot be used together with -g/--globals-only, -" +"r/--roles-only, or -t/--tablespaces-only" +msgstr "" +"επιλογή —exclude-database δεν μπορεί να χρησιμοποιηθεί μαζί με -g/—globals-" +"only, -r/—roles-only, ή -t/—tablespaces-only" + +#: pg_dumpall.c:365 +#, c-format +msgid "options -g/--globals-only and -r/--roles-only cannot be used together" +msgstr "" +"οι επιλογές -g/—globals-only και -r/—roles-only δεν μπορούν να " +"χρησιμοποιηθούν μαζί" + +#: pg_dumpall.c:373 +#, c-format +msgid "" +"options -g/--globals-only and -t/--tablespaces-only cannot be used together" +msgstr "" +"Οι επιλογές -g/--καθολικές μόνο και -t/--επιτραπέζιοι χώροι δεν μπορούν να " +"χρησιμοποιηθούν μαζί" + +#: pg_dumpall.c:387 +#, c-format +msgid "" +"options -r/--roles-only and -t/--tablespaces-only cannot be used together" +msgstr "" +"οι επιλογές -r/—roles-only και -t/—tablespaces-only δεν μπορούν να " +"χρησιμοποιηθούν μαζί" + +#: pg_dumpall.c:448 pg_dumpall.c:1754 +#, c-format +msgid "could not connect to database \"%s\"" +msgstr "δεν ήταν δυνατή η σύνδεση στη βάση δεδομένων “%s”" + +#: pg_dumpall.c:462 +#, c-format +msgid "" +"could not connect to databases \"postgres\" or \"template1\"\n" +"Please specify an alternative database." +msgstr "" +"δεν ήταν δυνατή η σύνδεση με τις βάσεις δεδομένων \"postgres\" ή " +"\"Template1\"\n" +"Παρακαλώ καθορίστε μία εναλλακτική βάση δεδομένων." + +#: pg_dumpall.c:616 +#, c-format +msgid "" +"%s extracts a PostgreSQL database cluster into an SQL script file.\n" +"\n" +msgstr "" +"%s εξάγει μία συστάδα βάσεων δεδομένων PostgreSQL σε ένα αρχείο σεναρίου " +"SQL.\n" +"\n" + +#: pg_dumpall.c:618 +#, c-format +msgid " %s [OPTION]...\n" +msgstr " %s [ΕΠΙΛΟΓΗ]…\n" + +#: pg_dumpall.c:621 +#, c-format +msgid " -f, --file=FILENAME output file name\n" +msgstr " -f, —file=FILENAME όνομα αρχείου εξόδου\n" + +#: pg_dumpall.c:628 +#, c-format +msgid "" +" -c, --clean clean (drop) databases before recreating\n" +msgstr "" +" -c, —clean καθάρισε (εγκατάληψε) βάσεις δεδομένων πριν " +"από την αναδημιουργία\n" + +#: pg_dumpall.c:630 +#, c-format +msgid " -g, --globals-only dump only global objects, no databases\n" +msgstr "" +" -g, —globals-only απόθεσε μόνο καθολικά αντικείμενα, όχι βάσεις " +"δεδομένων\n" + +#: pg_dumpall.c:631 pg_restore.c:485 +#, c-format +msgid " -O, --no-owner skip restoration of object ownership\n" +msgstr "" +" -O, —no-owner παράλειψε την αποκατάσταση της κυριότητας " +"αντικειμένων\n" + +#: pg_dumpall.c:632 +#, c-format +msgid "" +" -r, --roles-only dump only roles, no databases or tablespaces\n" +msgstr "" +" -r, —roles-only απόθεσε μόνο ρόλους, όχι βάσεις δεδομένων ή " +"πινακοχώρους\n" + +#: pg_dumpall.c:634 +#, c-format +msgid " -S, --superuser=NAME superuser user name to use in the dump\n" +msgstr "" +" -S, —superuser=NAME όνομα υπερχρήστη για να χρησιμοποιηθεί στην " +"απόθεση\n" + +#: pg_dumpall.c:635 +#, c-format +msgid "" +" -t, --tablespaces-only dump only tablespaces, no databases or roles\n" +msgstr "" +" -t, —tablespaces-only απόθεσε μόνο πινακοχώρους, όχι βάσεις " +"δεδομένων ή ρόλους\n" + +#: pg_dumpall.c:641 +#, c-format +msgid "" +" --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" +msgstr "" +" —exclude-database=PATTERN εξαίρεσε βάσεις δεδομένων των οποίων το όνομα " +"ταιριάζει με PATTERN\n" + +#: pg_dumpall.c:648 +#, c-format +msgid " --no-role-passwords do not dump passwords for roles\n" +msgstr "" +" —no-role-passwords να μην αποθέσει κωδικούς πρόσβασης για ρόλους\n" + +#: pg_dumpall.c:662 +#, c-format +msgid " -d, --dbname=CONNSTR connect using connection string\n" +msgstr " -d, —dbname=CONNSTR σύνδεση με χρήση συμβολοσειράς σύνδεσης\n" + +#: pg_dumpall.c:664 +#, c-format +msgid " -l, --database=DBNAME alternative default database\n" +msgstr "" +" -l, —database=DBNAME εναλλακτική προεπιλεγμένη βάση δεδομένων\n" +"\n" + +#: pg_dumpall.c:671 +#, c-format +msgid "" +"\n" +"If -f/--file is not used, then the SQL script will be written to the " +"standard\n" +"output.\n" +"\n" +msgstr "" +"\n" +"Εάν δεν χρησιμοποιηθεί -f/—file , τότε η δέσμη ενεργειών SQL θα εγγραφεί στη " +"τυπική\n" +"έξοδο.\n" +"\n" + +#: pg_dumpall.c:877 +#, c-format +msgid "role name starting with \"pg_\" skipped (%s)" +msgstr "όνομα ρόλου που αρχίζει \"pg_\" παραλείπεται (%s)" + +#: pg_dumpall.c:1278 +#, c-format +msgid "could not parse ACL list (%s) for tablespace \"%s\"" +msgstr "" +"δεν ήταν δυνατή η ανάλυση της λίστας ACL (%s) για τον πινακοχώρο \"%s\"" + +#: pg_dumpall.c:1495 +#, c-format +msgid "excluding database \"%s\"" +msgstr "εξαιρεί τη βάση δεδομένων \"%s\"" + +#: pg_dumpall.c:1499 +#, c-format +msgid "dumping database \"%s\"" +msgstr "αποθέτει τη βάση δεδομένων “%s”" + +#: pg_dumpall.c:1531 +#, c-format +msgid "pg_dump failed on database \"%s\", exiting" +msgstr "pg_dump απέτυχε στη βάση δεδομένων \"%s\", εξέρχεται" + +#: pg_dumpall.c:1540 +#, c-format +msgid "could not re-open the output file \"%s\": %m" +msgstr "δεν ήταν δυνατό το εκ νέου άνοιγμα του αρχείου εξόδου \"%s\": %m" + +#: pg_dumpall.c:1584 +#, c-format +msgid "running \"%s\"" +msgstr "εκτελείται “%s”" + +#: pg_dumpall.c:1775 +#, c-format +msgid "could not connect to database \"%s\": %s" +msgstr "δεν ήταν δυνατή η σύνδεση στη βάση δεδομένων “%s”: %s" + +#: pg_dumpall.c:1805 +#, c-format +msgid "could not get server version" +msgstr "δεν ήταν δυνατή η απόκτηση έκδοσης διακομιστή" + +#: pg_dumpall.c:1811 +#, c-format +msgid "could not parse server version \"%s\"" +msgstr "δεν ήταν δυνατή η ανάλυση έκδοσης διακομιστή “%s”" + +#: pg_dumpall.c:1883 pg_dumpall.c:1906 +#, c-format +msgid "executing %s" +msgstr "εκτελείται %s" + +#: pg_restore.c:308 +#, c-format +msgid "one of -d/--dbname and -f/--file must be specified" +msgstr "ένα από τα -d/--dbname και -f/--file πρέπει να καθοριστεί" + +#: pg_restore.c:317 +#, c-format +msgid "options -d/--dbname and -f/--file cannot be used together" +msgstr "" +"οι επιλογές -d/—dbname και -f/—file δεν μπορούν να χρησιμοποιηθούν μαζί" + +#: pg_restore.c:343 +#, c-format +msgid "options -C/--create and -1/--single-transaction cannot be used together" +msgstr "" +"οι επιλογές -C/--create και -1/--single-transaction δεν μπορούν να " +"χρησιμοποιηθούν μαζί" + +#: pg_restore.c:357 +#, c-format +msgid "maximum number of parallel jobs is %d" +msgstr "ο μέγιστος αριθμός παράλληλων εργασιών είναι %d" + +#: pg_restore.c:366 +#, c-format +msgid "cannot specify both --single-transaction and multiple jobs" +msgstr "" +"δεν είναι δυνατό να οριστούν —single-transaction και multiple jobs και τα " +"δύο μαζί " + +#: pg_restore.c:408 +#, c-format +msgid "" +"unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" +msgstr "" +"μη αναγνωρισμένη μορφή αρχειοθέτησης “%s”· παρακαλώ καθορίστε \"c\", \"d\" ή " +"\"t\"" + +#: pg_restore.c:448 +#, c-format +msgid "errors ignored on restore: %d" +msgstr "σφάλματα που παραβλέφθηκαν κατά την επαναφορά: %d" + +#: pg_restore.c:461 +#, c-format +msgid "" +"%s restores a PostgreSQL database from an archive created by pg_dump.\n" +"\n" +msgstr "" +"%s επαναφέρει μια βάση δεδομένων PostgreSQL από μια αρχειοθήκη που " +"δημιουργήθηκε από τη pg_dump.\n" +"\n" + +#: pg_restore.c:463 +#, c-format +msgid " %s [OPTION]... [FILE]\n" +msgstr " %s [OPTION]… [FILE]\n" + +#: pg_restore.c:466 +#, c-format +msgid " -d, --dbname=NAME connect to database name\n" +msgstr " -d, —dbname=NAME σύνδεση με τη βάσης δεδομένων με όνομα\n" + +#: pg_restore.c:467 +#, c-format +msgid " -f, --file=FILENAME output file name (- for stdout)\n" +msgstr " -f, —file=FILENAME όνομα αρχείου εξόδου (- για stdout)\n" + +#: pg_restore.c:468 +#, c-format +msgid " -F, --format=c|d|t backup file format (should be automatic)\n" +msgstr "" +" -F, —format=c|d|t μορφή αρχείου αντιγράφου ασφαλείας (θα πρέπει να " +"είναι αυτόματη)\n" + +#: pg_restore.c:469 +#, c-format +msgid " -l, --list print summarized TOC of the archive\n" +msgstr " -l, —list εκτύπωσε συνοπτικό TOC της αρχειοθήκης\n" + +#: pg_restore.c:470 +#, c-format +msgid " -v, --verbose verbose mode\n" +msgstr " -v, —verbose περιφραστική λειτουργία\n" + +#: pg_restore.c:471 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr "" +" -V, —version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, " +"έξοδος\n" + +#: pg_restore.c:472 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr "" +" -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, και μετά " +"έξοδος\n" + +#: pg_restore.c:474 +#, c-format +msgid "" +"\n" +"Options controlling the restore:\n" +msgstr "" +"\n" +"Επιλογές που ελέγχουν την επαναφορά:\n" + +#: pg_restore.c:475 +#, c-format +msgid " -a, --data-only restore only the data, no schema\n" +msgstr "" +" -a, —data-only επαναφέρε μόνο τα δεδομένα, όχι το σχήμα\n" + +#: pg_restore.c:477 +#, c-format +msgid " -C, --create create the target database\n" +msgstr "" +" -C, —create δημιούργησε τη βάσης δεδομένων προορισμού\n" + +#: pg_restore.c:478 +#, c-format +msgid " -e, --exit-on-error exit on error, default is to continue\n" +msgstr "" +" -e, —exit-on-error να εξέλθει σε σφάλμα, η προεπιλογή είναι να " +"συνεχίσει\n" + +#: pg_restore.c:479 +#, c-format +msgid " -I, --index=NAME restore named index\n" +msgstr " -I, —index=NAME επανάφερε το ευρετήριο με όνομα\n" + +#: pg_restore.c:480 +#, c-format +msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" +msgstr "" +" -j, —jobs=NUM χρησιμοποίησε τόσες πολλές παράλληλες εργασίες " +"για την επαναφορά\n" + +#: pg_restore.c:481 +#, c-format +msgid "" +" -L, --use-list=FILENAME use table of contents from this file for\n" +" selecting/ordering output\n" +msgstr "" +" -L, —use-list=FILENAME χρησιμοποίησε τον πίνακα περιεχομένων από αυτό " +"το αρχείο για\n" +" επιλογή/ταξινόμηση εξόδου\n" + +#: pg_restore.c:483 +#, c-format +msgid " -n, --schema=NAME restore only objects in this schema\n" +msgstr "" +" -n, —schema=NAME επανάφερε μόνο αντικείμενα σε αυτό το σχήμα\n" + +#: pg_restore.c:484 +#, c-format +msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" +msgstr "" +" -N, —exclude-schema=NAME να μην επαναφέρει αντικείμενα από αυτό το " +"σχήμα\n" + +#: pg_restore.c:486 +#, c-format +msgid " -P, --function=NAME(args) restore named function\n" +msgstr "P, —function=NAME(args) επανάφερε την καθορισμένη συνάρτηση\n" + +#: pg_restore.c:487 +#, c-format +msgid " -s, --schema-only restore only the schema, no data\n" +msgstr "" +" -s, —schema-only επανάφερε μόνο το σχήμα, χωρίς δεδομένα\n" + +#: pg_restore.c:488 +#, c-format +msgid "" +" -S, --superuser=NAME superuser user name to use for disabling " +"triggers\n" +msgstr "" +" -S, —superuser=NAME όνομα υπερχρήστη για χρήση κατά την " +"απενεργοποίηση εναυσμάτων\n" + +#: pg_restore.c:489 +#, c-format +msgid "" +" -t, --table=NAME restore named relation (table, view, etc.)\n" +msgstr "" +" -t, —table=NAME επανάφερε την καθορισμένη σχέση (πίνακας, " +"προβολή κ.λπ.)\n" + +#: pg_restore.c:490 +#, c-format +msgid " -T, --trigger=NAME restore named trigger\n" +msgstr "" +" -T, —trigger=NAME επανάφερε το καθορισμένο έναυσμα\n" +"\n" + +#: pg_restore.c:491 +#, c-format +msgid "" +" -x, --no-privileges skip restoration of access privileges (grant/" +"revoke)\n" +msgstr "" +" -x, —no-privileges παράλειπε την επαναφορά των δικαιωμάτων " +"πρόσβασης (εκχώρηση/ανάκληση)\n" + +#: pg_restore.c:492 +#, c-format +msgid " -1, --single-transaction restore as a single transaction\n" +msgstr " -1, —single-transaction επανάφερε ως μεμονωμένη συναλλαγή\n" + +#: pg_restore.c:494 +#, c-format +msgid " --enable-row-security enable row security\n" +msgstr " —enable-row-security ενεργοποίησε ασφαλεία σειράς\n" + +#: pg_restore.c:496 +#, c-format +msgid " --no-comments do not restore comments\n" +msgstr " —no-comments να μην επαναφέρεις σχόλια\n" + +#: pg_restore.c:497 +#, c-format +msgid "" +" --no-data-for-failed-tables do not restore data of tables that could not " +"be\n" +" created\n" +msgstr "" +" —no-data-for-failed-tables να μην επαναφέρεις δεδομένα πινάκων που δεν " +"ήταν\n" +" δυνατό να δημιουργήθουν\n" + +#: pg_restore.c:499 +#, c-format +msgid " --no-publications do not restore publications\n" +msgstr " —no-publications να μην επαναφέρεις δημοσιεύσεις\n" + +#: pg_restore.c:500 +#, c-format +msgid " --no-security-labels do not restore security labels\n" +msgstr " —no-security-labels να μην επαναφέρεις ετικέτες ασφαλείας\n" + +#: pg_restore.c:501 +#, c-format +msgid " --no-subscriptions do not restore subscriptions\n" +msgstr " —no-publications να μην επαναφέρεις συνδρομές\n" + +#: pg_restore.c:502 +#, c-format +msgid " --no-tablespaces do not restore tablespace assignments\n" +msgstr "" +" —no-tablespaces να μην επαναφέρεις αναθέσεις πινακοχώρων\n" + +#: pg_restore.c:503 +#, c-format +msgid "" +" --section=SECTION restore named section (pre-data, data, or " +"post-data)\n" +msgstr "" +" —section=SECTION επανάφερε ονομασμένες ενότητες (προ-δεδομένα, " +"δεδομένα, ή μετα-δεδομένα)\n" + +#: pg_restore.c:516 +#, c-format +msgid " --role=ROLENAME do SET ROLE before restore\n" +msgstr " —role=ROLENAME κάνε SET ROLE πριν την επαναφορά\n" + +#: pg_restore.c:518 +#, c-format +msgid "" +"\n" +"The options -I, -n, -N, -P, -t, -T, and --section can be combined and " +"specified\n" +"multiple times to select multiple objects.\n" +msgstr "" +"\n" +"Οι επιλογές -I, -n, -N, -P, -t, -T και —section μπορούν να συνδυαστούν και " +"να καθοριστούν\n" +"πολλές φορές για την επιλογή πολλών αντικειμένων.\n" + +#: pg_restore.c:521 +#, c-format +msgid "" +"\n" +"If no input file name is supplied, then standard input is used.\n" +"\n" +msgstr "" +"\n" +"Εάν δεν παρέχεται όνομα αρχείου εισόδου, τότε χρησιμοποιείται η τυπική " +"είσοδος.\n" +"\n" diff --git a/src/bin/pg_dump/po/es.po b/src/bin/pg_dump/po/es.po index b932cc508398f..faf9ecd501c04 100644 --- a/src/bin/pg_dump/po/es.po +++ b/src/bin/pg_dump/po/es.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_dump (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:46+0000\n" -"PO-Revision-Date: 2020-05-18 12:43+0200\n" +"POT-Creation-Date: 2020-09-13 10:46+0000\n" +"PO-Revision-Date: 2020-09-14 12:57-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -20,7 +20,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: BlackCAT 1.0\n" +"X-Generator: Poedit 2.3\n" #: ../../../src/common/logging.c:236 #, c-format @@ -368,7 +368,7 @@ msgstr "no se pudo cerrar la biblioteca de compresión: %s" msgid "could not read from input file: %s" msgstr "no se pudo leer el archivo de entrada: %s" -#: compress_io.c:623 pg_backup_custom.c:575 pg_backup_directory.c:534 +#: compress_io.c:623 pg_backup_custom.c:646 pg_backup_directory.c:552 #: pg_backup_tar.c:793 pg_backup_tar.c:816 #, c-format msgid "could not read from input file: end of file" @@ -585,7 +585,7 @@ msgstr "reestableciendo objeto grande con OID %u" msgid "could not create large object %u: %s" msgstr "no se pudo crear el objeto grande %u: %s" -#: pg_backup_archiver.c:1324 pg_dump.c:3549 +#: pg_backup_archiver.c:1324 pg_dump.c:3544 #, c-format msgid "could not open large object %u: %s" msgstr "no se pudo abrir el objeto grande %u: %s" @@ -606,19 +606,19 @@ msgid "could not find entry for ID %d" msgstr "no se pudo encontrar una entrada para el ID %d" #: pg_backup_archiver.c:1449 pg_backup_directory.c:222 -#: pg_backup_directory.c:580 +#: pg_backup_directory.c:598 #, c-format msgid "could not close TOC file: %m" msgstr "no se pudo cerrar el archivo TOC: %m" -#: pg_backup_archiver.c:1563 pg_backup_custom.c:158 pg_backup_directory.c:332 -#: pg_backup_directory.c:567 pg_backup_directory.c:630 -#: pg_backup_directory.c:649 pg_dumpall.c:484 +#: pg_backup_archiver.c:1563 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_directory.c:585 pg_backup_directory.c:648 +#: pg_backup_directory.c:667 pg_dumpall.c:484 #, c-format msgid "could not open output file \"%s\": %m" msgstr "no se pudo abrir el archivo de salida «%s»: %m" -#: pg_backup_archiver.c:1565 pg_backup_custom.c:164 +#: pg_backup_archiver.c:1565 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "no se pudo abrir el archivo de salida: %m" @@ -685,13 +685,13 @@ msgstr "nombre de directorio demasiado largo: «%s»" msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" msgstr "el directorio «%s» no parece ser un archivador válido (no existe «toc.dat»)" -#: pg_backup_archiver.c:2133 pg_backup_custom.c:175 pg_backup_custom.c:753 -#: pg_backup_directory.c:207 pg_backup_directory.c:388 +#: pg_backup_archiver.c:2133 pg_backup_custom.c:173 pg_backup_custom.c:812 +#: pg_backup_directory.c:207 pg_backup_directory.c:394 #, c-format msgid "could not open input file \"%s\": %m" msgstr "no se pudo abrir el archivo de entrada «%s»: %m" -#: pg_backup_archiver.c:2140 pg_backup_custom.c:181 +#: pg_backup_archiver.c:2140 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "no se pudo abrir el archivo de entrada: %m" @@ -886,92 +886,88 @@ msgstr "procesando el elemento saltado %d %s %s" msgid "table \"%s\" could not be created, will not restore its data" msgstr "la tabla «%s» no pudo ser creada, no se recuperarán sus datos" -#: pg_backup_custom.c:374 pg_backup_null.c:147 +#: pg_backup_custom.c:378 pg_backup_null.c:147 #, c-format msgid "invalid OID for large object" msgstr "OID no válido para objeto grande" -#: pg_backup_custom.c:444 -#, c-format -msgid "unrecognized data block type (%d) while searching archive" -msgstr "tipo de bloque de datos (%d) no conocido al buscar en el archivador" - -#: pg_backup_custom.c:455 pg_backup_custom.c:811 +#: pg_backup_custom.c:441 pg_backup_custom.c:507 pg_backup_custom.c:632 +#: pg_backup_custom.c:870 pg_backup_tar.c:1086 pg_backup_tar.c:1091 #, c-format msgid "error during file seek: %m" msgstr "error durante el posicionamiento (seek) en el archivo: %m" -#: pg_backup_custom.c:464 +#: pg_backup_custom.c:480 #, c-format -msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive" -msgstr "no se pudo encontrar el bloque con ID %d en archivo -- posiblemente debido a una petición de restauración fuera de orden, la que no puede ser satisfecha debido a la falta de información de posicionamiento en el archivo" +msgid "data block %d has wrong seek position" +msgstr "el bloque de datos %d tiene una posición de búsqueda incorrecta" -#: pg_backup_custom.c:469 +#: pg_backup_custom.c:497 +#, c-format +msgid "unrecognized data block type (%d) while searching archive" +msgstr "tipo de bloque de datos (%d) no conocido al buscar en el archivador" + +#: pg_backup_custom.c:519 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to non-seekable input file" msgstr "no se pudo encontrar el bloque con ID %d en archivo -- posiblemente debido a una petición de restauración fuera de orden, la que no puede ser completada debido a que en el archivo de entrada no es reposicionable (seekable)" -#: pg_backup_custom.c:474 +#: pg_backup_custom.c:524 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive" msgstr "no se pudo encontrar el bloque con ID %d en archivo -- posiblemente el archivo está corrupto" -#: pg_backup_custom.c:481 +#: pg_backup_custom.c:531 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d" msgstr "se encontró un bloque no esperado ID (%d) mientras se leían los datos -- se esperaba %d" -#: pg_backup_custom.c:495 +#: pg_backup_custom.c:545 #, c-format msgid "unrecognized data block type %d while restoring archive" msgstr "se encontró un bloque tipo %d no reconocido al restablecer el archivador" -#: pg_backup_custom.c:577 +#: pg_backup_custom.c:648 #, c-format msgid "could not read from input file: %m" msgstr "no se pudo leer el archivo de entrada: %m" -#: pg_backup_custom.c:691 pg_backup_custom.c:744 pg_backup_custom.c:884 -#: pg_backup_tar.c:1088 +#: pg_backup_custom.c:751 pg_backup_custom.c:803 pg_backup_custom.c:948 +#: pg_backup_tar.c:1089 #, c-format msgid "could not determine seek position in archive file: %m" msgstr "no se pudo determinar la posición (seek) en el archivo del archivador: %m" -#: pg_backup_custom.c:708 pg_backup_custom.c:748 +#: pg_backup_custom.c:767 pg_backup_custom.c:807 #, c-format msgid "could not close archive file: %m" msgstr "no se pudo cerrar el archivo del archivador: %m" -#: pg_backup_custom.c:731 +#: pg_backup_custom.c:790 #, c-format msgid "can only reopen input archives" msgstr "sólo se pueden reabrir archivos de entrada" -#: pg_backup_custom.c:738 +#: pg_backup_custom.c:797 #, c-format msgid "parallel restore from standard input is not supported" msgstr "la restauración en paralelo desde entrada estándar (stdin) no está soportada" -#: pg_backup_custom.c:740 +#: pg_backup_custom.c:799 #, c-format msgid "parallel restore from non-seekable file is not supported" msgstr "la restauración en paralelo desde un archivo no posicionable no está soportada" -#: pg_backup_custom.c:756 +#: pg_backup_custom.c:815 #, c-format msgid "could not set seek position in archive file: %m" msgstr "no se pudo posicionar (seek) en el archivo del archivador: %m" -#: pg_backup_custom.c:832 +#: pg_backup_custom.c:894 #, c-format msgid "compressor active" msgstr "compresor activo" -#: pg_backup_custom.c:887 -#, c-format -msgid "ftell mismatch with expected position -- ftell used" -msgstr "ftell no coincide con la posición esperada -- se usó ftell" - #: pg_backup_db.c:42 #, c-format msgid "could not get server_version from libpq" @@ -1073,7 +1069,7 @@ msgstr "PQputCopyEnd regresó un error: %s" msgid "COPY failed for table \"%s\": %s" msgstr "COPY falló para la tabla «%s»: %s" -#: pg_backup_db.c:632 pg_dump.c:1991 +#: pg_backup_db.c:632 pg_dump.c:1984 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "resultados extra inesperados durante el COPY de la tabla «%s»" @@ -1106,44 +1102,43 @@ msgstr "no se pudo abrir el directorio «%s»: %m" msgid "could not create directory \"%s\": %m" msgstr "no se pudo crear el directorio «%s»: %m" -#: pg_backup_directory.c:350 pg_backup_directory.c:485 -#: pg_backup_directory.c:515 +#: pg_backup_directory.c:355 pg_backup_directory.c:496 +#: pg_backup_directory.c:532 #, c-format msgid "could not write to output file: %s" msgstr "no se pudo escribir al archivo de salida: %s" -#: pg_backup_directory.c:400 -#, fuzzy, c-format -#| msgid "could not close data file: %m" +#: pg_backup_directory.c:406 +#, c-format msgid "could not close data file \"%s\": %m" -msgstr "no se pudo cerrar el archivo de datos: %m" +msgstr "no se pudo cerrar el archivo de datos «%s»: %m" -#: pg_backup_directory.c:440 +#: pg_backup_directory.c:446 #, c-format msgid "could not open large object TOC file \"%s\" for input: %m" msgstr "no se pudo abrir el archivo de la tabla de contenidos de objetos grandes «%s» para su lectura: %m" -#: pg_backup_directory.c:451 +#: pg_backup_directory.c:457 #, c-format msgid "invalid line in large object TOC file \"%s\": \"%s\"" msgstr "línea no válida en el archivo de la tabla de contenido de objetos grandes «%s»: «%s»" -#: pg_backup_directory.c:460 +#: pg_backup_directory.c:466 #, c-format msgid "error reading large object TOC file \"%s\"" msgstr "error al leer el archivo de la tabla de contenidos de objetos grandes «%s»" -#: pg_backup_directory.c:464 +#: pg_backup_directory.c:470 #, c-format msgid "could not close large object TOC file \"%s\": %m" msgstr "no se pudo cerrar el archivo de la tabla de contenido de los objetos grandes «%s»: %m" -#: pg_backup_directory.c:671 +#: pg_backup_directory.c:689 #, c-format msgid "could not write to blobs TOC file" msgstr "no se pudo escribir al archivo de la tabla de contenidos de objetos grandes" -#: pg_backup_directory.c:703 +#: pg_backup_directory.c:721 #, c-format msgid "file name too long: \"%s\"" msgstr "nombre de archivo demasiado largo: «%s»" @@ -1208,34 +1203,34 @@ msgstr "sintaxis de sentencia COPY inesperada: «%s»" msgid "invalid OID for large object (%u)" msgstr "el OID del objeto grande no es válido (%u)" -#: pg_backup_tar.c:1103 +#: pg_backup_tar.c:1105 #, c-format msgid "could not close temporary file: %m" msgstr "no se pudo abrir archivo temporal: %m" -#: pg_backup_tar.c:1112 +#: pg_backup_tar.c:1114 #, c-format msgid "actual file length (%s) does not match expected (%s)" msgstr "el tamaño real del archivo (%s) no coincide con el esperado (%s)" -#: pg_backup_tar.c:1169 pg_backup_tar.c:1199 +#: pg_backup_tar.c:1171 pg_backup_tar.c:1201 #, c-format msgid "could not find header for file \"%s\" in tar archive" msgstr "no se pudo encontrar el encabezado para el archivo «%s» en el archivo tar" -#: pg_backup_tar.c:1187 +#: pg_backup_tar.c:1189 #, c-format msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file." msgstr "la extracción de datos fuera de orden no está soportada en este formato: se requiere «%s», pero viene antes de «%s» en el archivador." -#: pg_backup_tar.c:1232 +#: pg_backup_tar.c:1234 #, c-format msgid "incomplete tar header found (%lu byte)" msgid_plural "incomplete tar header found (%lu bytes)" msgstr[0] "se encontró un encabezado incompleto (%lu byte)" msgstr[1] "se encontró un encabezado incompleto (%lu bytes)" -#: pg_backup_tar.c:1283 +#: pg_backup_tar.c:1285 #, c-format msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s" msgstr "se encontró un encabezado corrupto en %s (esperado %d, calculado %d) en la posición %s" @@ -1245,7 +1240,7 @@ msgstr "se encontró un encabezado corrupto en %s (esperado %d, calculado %d) en msgid "unrecognized section name: \"%s\"" msgstr "nombre de sección «%s» no reconocido" -#: pg_backup_utils.c:55 pg_dump.c:615 pg_dump.c:632 pg_dumpall.c:338 +#: pg_backup_utils.c:55 pg_dump.c:608 pg_dump.c:625 pg_dumpall.c:338 #: pg_dumpall.c:348 pg_dumpall.c:357 pg_dumpall.c:366 pg_dumpall.c:374 #: pg_dumpall.c:388 pg_dumpall.c:464 pg_restore.c:284 pg_restore.c:300 #: pg_restore.c:318 @@ -1258,73 +1253,72 @@ msgstr "Prueba «%s --help» para más información.\n" msgid "out of on_exit_nicely slots" msgstr "elementos on_exit_nicely agotados" -#: pg_dump.c:541 +#: pg_dump.c:534 #, c-format msgid "compression level must be in range 0..9" msgstr "nivel de compresión debe estar en el rango 0..9" -#: pg_dump.c:579 +#: pg_dump.c:572 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_floats_digits debe estar en el rango -15..3" -#: pg_dump.c:602 +#: pg_dump.c:595 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "rows-per-insert debe estar en el rango %d..%d" -#: pg_dump.c:630 pg_dumpall.c:346 pg_restore.c:298 +#: pg_dump.c:623 pg_dumpall.c:346 pg_restore.c:298 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: pg_dump.c:651 pg_restore.c:327 +#: pg_dump.c:644 pg_restore.c:327 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "las opciones -s/--schema-only y -a/--data-only no pueden usarse juntas" -#: pg_dump.c:656 -#, fuzzy, c-format -#| msgid "options -s/--schema-only and -a/--data-only cannot be used together" +#: pg_dump.c:649 +#, c-format msgid "options -s/--schema-only and --include-foreign-data cannot be used together" -msgstr "las opciones -s/--schema-only y -a/--data-only no pueden usarse juntas" +msgstr "las opciones -s/--schema-only y --include-foreign-data no pueden usarse juntas" -#: pg_dump.c:659 +#: pg_dump.c:652 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" -msgstr "" +msgstr "la opción --include-foreign-data no está soportado con respaldo en paralelo" -#: pg_dump.c:663 pg_restore.c:333 +#: pg_dump.c:656 pg_restore.c:333 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "las opciones -c/--clean y -a/--data-only no pueden usarse juntas" -#: pg_dump.c:668 pg_dumpall.c:381 pg_restore.c:382 +#: pg_dump.c:661 pg_dumpall.c:381 pg_restore.c:382 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "la opción --if-exists requiere la opción -c/--clean" -#: pg_dump.c:675 +#: pg_dump.c:668 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "la opción --on-conflict-do-nothing requiere la opción --inserts, --rows-per-insert o --column-inserts" -#: pg_dump.c:697 +#: pg_dump.c:690 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "la compresión solicitada no está soportada en esta instalación -- el archivador será sin compresión" -#: pg_dump.c:718 pg_restore.c:349 +#: pg_dump.c:711 pg_restore.c:349 #, c-format msgid "invalid number of parallel jobs" msgstr "número no válido de trabajos paralelos" -#: pg_dump.c:722 +#: pg_dump.c:715 #, c-format msgid "parallel backup only supported by the directory format" msgstr "el volcado en paralelo sólo está soportado por el formato «directory»" -#: pg_dump.c:777 +#: pg_dump.c:770 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1334,27 +1328,27 @@ msgstr "" "Los snapshots sincronizados no están soportados por esta versión del servidor.\n" "Ejecute con --no-synchronized-snapshots si no los necesita." -#: pg_dump.c:783 +#: pg_dump.c:776 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Los snapshot exportados no están soportados por esta versión de servidor." -#: pg_dump.c:795 +#: pg_dump.c:788 #, c-format msgid "last built-in OID is %u" msgstr "el último OID interno es %u" -#: pg_dump.c:804 +#: pg_dump.c:797 #, c-format msgid "no matching schemas were found" msgstr "no se encontraron esquemas coincidentes" -#: pg_dump.c:818 +#: pg_dump.c:811 #, c-format msgid "no matching tables were found" msgstr "no se encontraron tablas coincidentes" -#: pg_dump.c:993 +#: pg_dump.c:986 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1363,17 +1357,17 @@ msgstr "" "%s extrae una base de datos en formato de texto o en otros formatos.\n" "\n" -#: pg_dump.c:994 pg_dumpall.c:617 pg_restore.c:462 +#: pg_dump.c:987 pg_dumpall.c:617 pg_restore.c:462 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_dump.c:995 +#: pg_dump.c:988 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPCIÓN]... [NOMBREDB]\n" -#: pg_dump.c:997 pg_dumpall.c:620 pg_restore.c:465 +#: pg_dump.c:990 pg_dumpall.c:620 pg_restore.c:465 #, c-format msgid "" "\n" @@ -1382,12 +1376,12 @@ msgstr "" "\n" "Opciones generales:\n" -#: pg_dump.c:998 +#: pg_dump.c:991 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=ARCHIVO nombre del archivo o directorio de salida\n" -#: pg_dump.c:999 +#: pg_dump.c:992 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1396,42 +1390,42 @@ msgstr "" " -F, --format=c|d|t|p Formato del archivo de salida (c=personalizado, \n" " d=directorio, t=tar, p=texto (por omisión))\n" -#: pg_dump.c:1001 +#: pg_dump.c:994 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM máximo de procesos paralelos para volcar\n" -#: pg_dump.c:1002 pg_dumpall.c:622 +#: pg_dump.c:995 pg_dumpall.c:622 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose modo verboso\n" -#: pg_dump.c:1003 pg_dumpall.c:623 +#: pg_dump.c:996 pg_dumpall.c:623 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de version y salir\n" -#: pg_dump.c:1004 +#: pg_dump.c:997 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 nivel de compresión para formatos comprimidos\n" -#: pg_dump.c:1005 pg_dumpall.c:624 +#: pg_dump.c:998 pg_dumpall.c:624 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr " --lock-wait-timeout=SEGS espera a lo más SEGS segundos obtener un lock\n" -#: pg_dump.c:1006 pg_dumpall.c:651 +#: pg_dump.c:999 pg_dumpall.c:651 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync no esperar que los cambios se sincronicen a disco\n" -#: pg_dump.c:1007 pg_dumpall.c:625 +#: pg_dump.c:1000 pg_dumpall.c:625 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: pg_dump.c:1009 pg_dumpall.c:626 +#: pg_dump.c:1002 pg_dumpall.c:626 #, c-format msgid "" "\n" @@ -1440,49 +1434,49 @@ msgstr "" "\n" "Opciones que controlan el contenido de la salida:\n" -#: pg_dump.c:1010 pg_dumpall.c:627 +#: pg_dump.c:1003 pg_dumpall.c:627 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only extrae sólo los datos, no el esquema\n" -#: pg_dump.c:1011 +#: pg_dump.c:1004 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs incluye objetos grandes en la extracción\n" -#: pg_dump.c:1012 +#: pg_dump.c:1005 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs excluye objetos grandes en la extracción\n" -#: pg_dump.c:1013 pg_restore.c:476 +#: pg_dump.c:1006 pg_restore.c:476 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr " -c, --clean tira (drop) la base de datos antes de crearla\n" -#: pg_dump.c:1014 +#: pg_dump.c:1007 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr "" " -C, --create incluye órdenes para crear la base de datos\n" " en la extracción\n" -#: pg_dump.c:1015 pg_dumpall.c:629 +#: pg_dump.c:1008 pg_dumpall.c:629 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=CODIF extrae los datos con la codificación CODIF\n" -#: pg_dump.c:1016 +#: pg_dump.c:1009 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=PATRÓN extrae sólo el o los esquemas nombrados\n" -#: pg_dump.c:1017 +#: pg_dump.c:1010 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=PATRÓN NO extrae el o los esquemas nombrados\n" -#: pg_dump.c:1018 +#: pg_dump.c:1011 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1491,58 +1485,58 @@ msgstr "" " -O, --no-owner en formato de sólo texto, no reestablece\n" " los dueños de los objetos\n" -#: pg_dump.c:1020 pg_dumpall.c:633 +#: pg_dump.c:1013 pg_dumpall.c:633 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only extrae sólo el esquema, no los datos\n" -#: pg_dump.c:1021 +#: pg_dump.c:1014 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr " -S, --superuser=NAME superusuario a utilizar en el volcado de texto\n" -#: pg_dump.c:1022 +#: pg_dump.c:1015 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=PATRÓN extrae sólo la o las tablas nombradas\n" -#: pg_dump.c:1023 +#: pg_dump.c:1016 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=PATRÓN NO extrae la o las tablas nombradas\n" -#: pg_dump.c:1024 pg_dumpall.c:636 +#: pg_dump.c:1017 pg_dumpall.c:636 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges no extrae los privilegios (grant/revoke)\n" -#: pg_dump.c:1025 pg_dumpall.c:637 +#: pg_dump.c:1018 pg_dumpall.c:637 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade sólo para uso de utilidades de upgrade\n" -#: pg_dump.c:1026 pg_dumpall.c:638 +#: pg_dump.c:1019 pg_dumpall.c:638 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr "" " --column-inserts extrae los datos usando INSERT con nombres\n" " de columnas\n" -#: pg_dump.c:1027 pg_dumpall.c:639 +#: pg_dump.c:1020 pg_dumpall.c:639 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr "" " --disable-dollar-quoting deshabilita el uso de «delimitadores de dólar»,\n" " usa delimitadores de cadena estándares\n" -#: pg_dump.c:1028 pg_dumpall.c:640 pg_restore.c:493 +#: pg_dump.c:1021 pg_dumpall.c:640 pg_restore.c:493 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr "" " --disable-triggers deshabilita los disparadores (triggers) durante el\n" " restablecimiento de la extracción de sólo-datos\n" -#: pg_dump.c:1029 +#: pg_dump.c:1022 #, c-format msgid "" " --enable-row-security enable row security (dump only content user has\n" @@ -1551,113 +1545,116 @@ msgstr "" " --enable-row-security activa seguridad de filas (volcar sólo el\n" " contenido al que el usuario tiene acceso)\n" -#: pg_dump.c:1031 +#: pg_dump.c:1024 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=PATRÓN NO extrae los datos de la(s) tablas nombradas\n" -#: pg_dump.c:1032 pg_dumpall.c:642 +#: pg_dump.c:1025 pg_dumpall.c:642 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=NUM usa este valor para extra_float_digits\n" -#: pg_dump.c:1033 pg_dumpall.c:643 pg_restore.c:495 +#: pg_dump.c:1026 pg_dumpall.c:643 pg_restore.c:495 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists usa IF EXISTS al eliminar objetos\n" -#: pg_dump.c:1034 +#: pg_dump.c:1027 #, c-format msgid "" " --include-foreign-data=PATTERN\n" " include data of foreign tables on foreign\n" " servers matching PATTERN\n" msgstr "" +" --include-foreign-data=PATRÓN\n" +" incluye datos de tablas foráneas en servidores\n" +" que coinciden con PATRÓN\n" -#: pg_dump.c:1037 pg_dumpall.c:644 +#: pg_dump.c:1030 pg_dumpall.c:644 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts extrae los datos usando INSERT, en vez de COPY\n" -#: pg_dump.c:1038 pg_dumpall.c:645 +#: pg_dump.c:1031 pg_dumpall.c:645 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root cargar particiones a través de tabla raíz\n" -#: pg_dump.c:1039 pg_dumpall.c:646 +#: pg_dump.c:1032 pg_dumpall.c:646 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments no volcar los comentarios\n" -#: pg_dump.c:1040 pg_dumpall.c:647 +#: pg_dump.c:1033 pg_dumpall.c:647 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications no volcar las publicaciones\n" -#: pg_dump.c:1041 pg_dumpall.c:649 +#: pg_dump.c:1034 pg_dumpall.c:649 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels no volcar asignaciones de etiquetas de seguridad\n" -#: pg_dump.c:1042 pg_dumpall.c:650 +#: pg_dump.c:1035 pg_dumpall.c:650 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions no volcar las suscripciones\n" -#: pg_dump.c:1043 +#: pg_dump.c:1036 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr "" " --no-synchronized-snapshots no usar snapshots sincronizados en trabajos\n" " en paralelo\n" -#: pg_dump.c:1044 pg_dumpall.c:652 +#: pg_dump.c:1037 pg_dumpall.c:652 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces no volcar asignaciones de tablespace\n" -#: pg_dump.c:1045 pg_dumpall.c:653 +#: pg_dump.c:1038 pg_dumpall.c:653 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data no volcar datos de tablas unlogged\n" -#: pg_dump.c:1046 pg_dumpall.c:654 +#: pg_dump.c:1039 pg_dumpall.c:654 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" -msgstr " --on-confict-do-nothing agregar ON CONFLICT DO NOTHING a órdenes INSERT\n" +msgstr " --on-conflict-do-nothing agregar ON CONFLICT DO NOTHING a órdenes INSERT\n" -#: pg_dump.c:1047 pg_dumpall.c:655 +#: pg_dump.c:1040 pg_dumpall.c:655 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers entrecomilla todos los identificadores, incluso\n" " si no son palabras clave\n" -#: pg_dump.c:1048 pg_dumpall.c:656 +#: pg_dump.c:1041 pg_dumpall.c:656 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=NUMFILAS número de filas por INSERT; implica --inserts\n" -#: pg_dump.c:1049 +#: pg_dump.c:1042 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr "" " --section=SECCIÓN volcar la sección nombrada (pre-data, data,\n" " post-data)\n" -#: pg_dump.c:1050 +#: pg_dump.c:1043 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr "" " --serializable-deferrable espera hasta que el respaldo pueda completarse\n" " sin anomalías\n" -#: pg_dump.c:1051 +#: pg_dump.c:1044 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT use el snapshot dado para la extracción\n" -#: pg_dump.c:1052 pg_restore.c:504 +#: pg_dump.c:1045 pg_restore.c:504 #, c-format msgid "" " --strict-names require table and/or schema include patterns to\n" @@ -1666,7 +1663,7 @@ msgstr "" " --strict-names requerir al menos una coincidencia para cada patrón\n" " de nombre de tablas y esquemas\n" -#: pg_dump.c:1054 pg_dumpall.c:657 pg_restore.c:506 +#: pg_dump.c:1047 pg_dumpall.c:657 pg_restore.c:506 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1677,7 +1674,7 @@ msgstr "" " usa órdenes SESSION AUTHORIZATION en lugar de\n" " ALTER OWNER para cambiar los dueño de los objetos\n" -#: pg_dump.c:1058 pg_dumpall.c:661 pg_restore.c:510 +#: pg_dump.c:1051 pg_dumpall.c:661 pg_restore.c:510 #, c-format msgid "" "\n" @@ -1686,46 +1683,46 @@ msgstr "" "\n" "Opciones de conexión:\n" -#: pg_dump.c:1059 +#: pg_dump.c:1052 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=NOMBRE nombre de la base de datos que volcar\n" -#: pg_dump.c:1060 pg_dumpall.c:663 pg_restore.c:511 +#: pg_dump.c:1053 pg_dumpall.c:663 pg_restore.c:511 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=ANFITRIÓN anfitrión de la base de datos o\n" " directorio del enchufe (socket)\n" -#: pg_dump.c:1061 pg_dumpall.c:665 pg_restore.c:512 +#: pg_dump.c:1054 pg_dumpall.c:665 pg_restore.c:512 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PUERTO número del puerto de la base de datos\n" -#: pg_dump.c:1062 pg_dumpall.c:666 pg_restore.c:513 +#: pg_dump.c:1055 pg_dumpall.c:666 pg_restore.c:513 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=USUARIO nombre de usuario con el cual conectarse\n" -#: pg_dump.c:1063 pg_dumpall.c:667 pg_restore.c:514 +#: pg_dump.c:1056 pg_dumpall.c:667 pg_restore.c:514 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pedir una contraseña\n" -#: pg_dump.c:1064 pg_dumpall.c:668 pg_restore.c:515 +#: pg_dump.c:1057 pg_dumpall.c:668 pg_restore.c:515 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password fuerza un prompt para la contraseña\n" " (debería ser automático)\n" -#: pg_dump.c:1065 pg_dumpall.c:669 +#: pg_dump.c:1058 pg_dumpall.c:669 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROL ejecuta SET ROLE antes del volcado\n" -#: pg_dump.c:1067 +#: pg_dump.c:1060 #, c-format msgid "" "\n" @@ -1738,22 +1735,22 @@ msgstr "" "de la variable de ambiente PGDATABASE.\n" "\n" -#: pg_dump.c:1069 pg_dumpall.c:673 pg_restore.c:522 +#: pg_dump.c:1062 pg_dumpall.c:673 pg_restore.c:522 #, c-format msgid "Report bugs to <%s>.\n" -msgstr "" +msgstr "Reporte errores a <%s>.\n" -#: pg_dump.c:1070 pg_dumpall.c:674 pg_restore.c:523 +#: pg_dump.c:1063 pg_dumpall.c:674 pg_restore.c:523 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" -#: pg_dump.c:1089 pg_dumpall.c:499 +#: pg_dump.c:1082 pg_dumpall.c:499 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "la codificación de cliente especificada «%s» no es válida" -#: pg_dump.c:1235 +#: pg_dump.c:1228 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server version.\n" @@ -1763,457 +1760,456 @@ msgstr "" "Los snapshots sincronizados en servidores standby no están soportados por esta versión del servidor.\n" "Ejecute con --no-synchronized-snapshots si no los necesita." -#: pg_dump.c:1304 +#: pg_dump.c:1297 #, c-format msgid "invalid output format \"%s\" specified" msgstr "el formato de salida especificado «%s» no es válido" -#: pg_dump.c:1342 +#: pg_dump.c:1335 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "no se encontraron esquemas coincidentes para el patrón «%s»" -#: pg_dump.c:1389 -#, fuzzy, c-format -#| msgid "no matching schemas were found for pattern \"%s\"" +#: pg_dump.c:1382 +#, c-format msgid "no matching foreign servers were found for pattern \"%s\"" -msgstr "no se encontraron esquemas coincidentes para el patrón «%s»" +msgstr "no se encontraron servidores foráneos coincidentes para el patrón «%s»" -#: pg_dump.c:1452 +#: pg_dump.c:1445 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "no se encontraron tablas coincidentes para el patrón «%s»" -#: pg_dump.c:1865 +#: pg_dump.c:1858 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "extrayendo el contenido de la tabla «%s.%s»" -#: pg_dump.c:1972 +#: pg_dump.c:1965 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Falló la extracción del contenido de la tabla «%s»: PQgetCopyData() falló." -#: pg_dump.c:1973 pg_dump.c:1983 +#: pg_dump.c:1966 pg_dump.c:1976 #, c-format msgid "Error message from server: %s" msgstr "Mensaje de error del servidor: %s" -#: pg_dump.c:1974 pg_dump.c:1984 +#: pg_dump.c:1967 pg_dump.c:1977 #, c-format msgid "The command was: %s" msgstr "La orden era: %s" -#: pg_dump.c:1982 +#: pg_dump.c:1975 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Falló la extracción del contenido de la tabla «%s»: PQgetResult() falló." -#: pg_dump.c:2736 +#: pg_dump.c:2731 #, c-format msgid "saving database definition" msgstr "salvando las definiciones de la base de datos" -#: pg_dump.c:3208 +#: pg_dump.c:3203 #, c-format msgid "saving encoding = %s" msgstr "salvando codificaciones = %s" -#: pg_dump.c:3233 +#: pg_dump.c:3228 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "salvando standard_conforming_strings = %s" -#: pg_dump.c:3272 +#: pg_dump.c:3267 #, c-format msgid "could not parse result of current_schemas()" msgstr "no se pudo interpretar la salida de current_schemas()" -#: pg_dump.c:3291 +#: pg_dump.c:3286 #, c-format msgid "saving search_path = %s" msgstr "salvando search_path = %s" -#: pg_dump.c:3331 +#: pg_dump.c:3326 #, c-format msgid "reading large objects" msgstr "leyendo objetos grandes" -#: pg_dump.c:3513 +#: pg_dump.c:3508 #, c-format msgid "saving large objects" msgstr "salvando objetos grandes" -#: pg_dump.c:3559 +#: pg_dump.c:3554 #, c-format msgid "error reading large object %u: %s" msgstr "error al leer el objeto grande %u: %s" -#: pg_dump.c:3611 +#: pg_dump.c:3606 #, c-format msgid "reading row security enabled for table \"%s.%s\"" msgstr "leyendo si seguridad de filas está activa para la tabla «%s.%s»" -#: pg_dump.c:3642 +#: pg_dump.c:3637 #, c-format msgid "reading policies for table \"%s.%s\"" msgstr "extrayendo las políticas para la tabla «%s.%s»" -#: pg_dump.c:3794 +#: pg_dump.c:3789 #, c-format msgid "unexpected policy command type: %c" msgstr "tipo de orden inesperada en política: %c" -#: pg_dump.c:3945 +#: pg_dump.c:3940 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "el dueño de la publicación «%s» parece no ser válido" -#: pg_dump.c:4090 +#: pg_dump.c:4085 #, c-format msgid "reading publication membership for table \"%s.%s\"" msgstr "extrayendo la membresía en publicaciones para la tabla «%s.%s»" -#: pg_dump.c:4233 +#: pg_dump.c:4228 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "no se volcaron las suscripciones porque el usuario actual no es un superusuario" -#: pg_dump.c:4287 +#: pg_dump.c:4282 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "el dueño de la suscripción «%s» parece no ser válido" -#: pg_dump.c:4331 +#: pg_dump.c:4326 #, c-format msgid "could not parse subpublications array" msgstr "no se pudo interpretar el arreglo subpublications" -#: pg_dump.c:4653 +#: pg_dump.c:4648 #, c-format msgid "could not find parent extension for %s %s" msgstr "no se pudo encontrar la extensión padre para %s %s" -#: pg_dump.c:4785 +#: pg_dump.c:4780 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "el dueño del esquema «%s» parece no ser válido" -#: pg_dump.c:4808 +#: pg_dump.c:4803 #, c-format msgid "schema with OID %u does not exist" msgstr "no existe el esquema con OID %u" -#: pg_dump.c:5133 +#: pg_dump.c:5128 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "el dueño del tipo «%s» parece no ser válido" -#: pg_dump.c:5218 +#: pg_dump.c:5213 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "el dueño del operador «%s» parece no ser válido" -#: pg_dump.c:5520 +#: pg_dump.c:5515 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "el dueño de la clase de operadores «%s» parece no ser válido" -#: pg_dump.c:5604 +#: pg_dump.c:5599 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "el dueño de la familia de operadores «%s» parece no ser válido" -#: pg_dump.c:5773 +#: pg_dump.c:5768 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "el dueño de la función de agregación «%s» parece no ser válido" -#: pg_dump.c:6033 +#: pg_dump.c:6028 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "el dueño de la función «%s» parece no ser válido" -#: pg_dump.c:6861 +#: pg_dump.c:6856 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "el dueño de la tabla «%s» parece no ser válido" -#: pg_dump.c:6903 pg_dump.c:17332 +#: pg_dump.c:6898 pg_dump.c:17376 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "falló la revisión de integridad, no se encontró la tabla padre con OID %u de la secuencia con OID %u" -#: pg_dump.c:7045 +#: pg_dump.c:7040 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "extrayendo los índices para la tabla «%s.%s»" -#: pg_dump.c:7460 +#: pg_dump.c:7455 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "extrayendo restricciones de llave foránea para la tabla «%s.%s»" -#: pg_dump.c:7715 +#: pg_dump.c:7736 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "falló la revisión de integridad, no se encontró la tabla padre con OID %u del elemento con OID %u de pg_rewrite" -#: pg_dump.c:7798 +#: pg_dump.c:7819 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "extrayendo los disparadores (triggers) para la tabla «%s.%s»" -#: pg_dump.c:7931 +#: pg_dump.c:7952 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "la consulta produjo un nombre de tabla nulo para la llave foránea del disparador \"%s\" en la tabla «%s» (OID de la tabla: %u)" -#: pg_dump.c:8486 +#: pg_dump.c:8507 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "buscando las columnas y tipos de la tabla «%s.%s»" -#: pg_dump.c:8622 +#: pg_dump.c:8643 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "numeración de columnas no válida en la tabla «%s»" -#: pg_dump.c:8659 +#: pg_dump.c:8680 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "buscando expresiones por omisión de la tabla «%s.%s»" -#: pg_dump.c:8681 +#: pg_dump.c:8702 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "el valor de adnum %d para la tabla «%s» no es válido" -#: pg_dump.c:8746 +#: pg_dump.c:8767 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "buscando restricciones de revisión (check) para la tabla «%s.%s»" -#: pg_dump.c:8795 +#: pg_dump.c:8816 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "se esperaban %d restricciones CHECK en la tabla «%s» pero se encontraron %d" msgstr[1] "se esperaban %d restricciones CHECK en la tabla «%s» pero se encontraron %d" -#: pg_dump.c:8799 +#: pg_dump.c:8820 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Los catálogos del sistema podrían estar corruptos)" -#: pg_dump.c:10385 +#: pg_dump.c:10406 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "el typtype del tipo «%s» parece no ser válido" -#: pg_dump.c:11739 +#: pg_dump.c:11760 #, c-format msgid "bogus value in proargmodes array" msgstr "valor no válido en el arreglo proargmodes" -#: pg_dump.c:12111 +#: pg_dump.c:12132 #, c-format msgid "could not parse proallargtypes array" msgstr "no se pudo interpretar el arreglo proallargtypes" -#: pg_dump.c:12127 +#: pg_dump.c:12148 #, c-format msgid "could not parse proargmodes array" msgstr "no se pudo interpretar el arreglo proargmodes" -#: pg_dump.c:12141 +#: pg_dump.c:12162 #, c-format msgid "could not parse proargnames array" msgstr "no se pudo interpretar el arreglo proargnames" -#: pg_dump.c:12152 +#: pg_dump.c:12173 #, c-format msgid "could not parse proconfig array" msgstr "no se pudo interpretar el arreglo proconfig" -#: pg_dump.c:12232 +#: pg_dump.c:12253 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "el valor del atributo «provolatile» para la función «%s» es desconocido" -#: pg_dump.c:12282 pg_dump.c:14340 +#: pg_dump.c:12303 pg_dump.c:14361 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "el valor del atributo «proparallel» para la función «%s» es desconocido" -#: pg_dump.c:12421 pg_dump.c:12530 pg_dump.c:12537 +#: pg_dump.c:12442 pg_dump.c:12551 pg_dump.c:12558 #, c-format msgid "could not find function definition for function with OID %u" msgstr "no se encontró la definición de la función con OID %u" -#: pg_dump.c:12460 +#: pg_dump.c:12481 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "valor no válido en los campos pg_cast.castfunc o pg_cast.castmethod" -#: pg_dump.c:12463 +#: pg_dump.c:12484 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "valor no válido en el campo pg_cast.castmethod" -#: pg_dump.c:12556 +#: pg_dump.c:12577 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "definición errónea de transformación; al menos uno de trffromsql and trftosql debe ser distinto de cero" -#: pg_dump.c:12573 +#: pg_dump.c:12594 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "valor erróneo en el campo pg_transform.trffromsql" -#: pg_dump.c:12594 +#: pg_dump.c:12615 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "valor erróneo en el campo pg_transform.trftosql" -#: pg_dump.c:12910 +#: pg_dump.c:12931 #, c-format msgid "could not find operator with OID %s" msgstr "no se pudo encontrar el operador con OID %s" -#: pg_dump.c:12978 +#: pg_dump.c:12999 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "el tipo «%c» para el método de acceso «%s» no es válido" -#: pg_dump.c:13732 +#: pg_dump.c:13753 #, c-format msgid "unrecognized collation provider: %s" msgstr "proveedor de ordenamiento no reconocido: %s" -#: pg_dump.c:14204 +#: pg_dump.c:14225 #, c-format msgid "aggregate function %s could not be dumped correctly for this database version; ignored" msgstr "la función de agregación «%s» no se pudo extraer correctamente para esta versión de la base de datos; ignorada" -#: pg_dump.c:14259 +#: pg_dump.c:14280 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "valor de aggfinalmodify no reconocido para la agregación «%s»" -#: pg_dump.c:14315 +#: pg_dump.c:14336 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "valor de aggmfinalmodify no reconocido para la agregación «%s»" -#: pg_dump.c:15037 +#: pg_dump.c:15058 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "tipo de objeto desconocido en privilegios por omisión: %d" -#: pg_dump.c:15055 +#: pg_dump.c:15076 #, c-format msgid "could not parse default ACL list (%s)" msgstr "no se pudo interpretar la lista de ACL (%s)" -#: pg_dump.c:15135 +#: pg_dump.c:15161 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "no se pudo interpretar la lista inicial de GRANT ACL (%s) o la lista inicial de REVOKE ACL (%s) para el objeto «%s» (%s)" -#: pg_dump.c:15143 +#: pg_dump.c:15169 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "no se pudo interpretar la lista de GRANT ACL (%s) o la lista de REVOKE ACL (%s) para el objeto «%s» (%s)" -#: pg_dump.c:15640 +#: pg_dump.c:15684 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "la consulta para obtener la definición de la vista «%s» no regresó datos" -#: pg_dump.c:15643 +#: pg_dump.c:15687 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "la consulta para obtener la definición de la vista «%s» regresó más de una definición" -#: pg_dump.c:15650 +#: pg_dump.c:15694 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "la definición de la vista «%s» parece estar vacía (tamaño cero)" -#: pg_dump.c:15732 +#: pg_dump.c:15776 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS ya no está soportado (tabla «%s»)" -#: pg_dump.c:16212 +#: pg_dump.c:16256 #, c-format msgid "invalid number of parents %d for table \"%s\"" msgstr "número de padres %d para la tabla «%s» no es válido" -#: pg_dump.c:16535 +#: pg_dump.c:16579 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "el número de columna %d no es válido para la tabla «%s»" -#: pg_dump.c:16820 +#: pg_dump.c:16864 #, c-format msgid "missing index for constraint \"%s\"" msgstr "falta un índice para restricción «%s»" -#: pg_dump.c:17045 +#: pg_dump.c:17089 #, c-format msgid "unrecognized constraint type: %c" msgstr "tipo de restricción inesperado: %c" -#: pg_dump.c:17177 pg_dump.c:17397 +#: pg_dump.c:17221 pg_dump.c:17441 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" msgstr[0] "la consulta para obtener los datos de la secuencia «%s» regresó %d entrada, pero se esperaba 1" msgstr[1] "la consulta para obtener los datos de la secuencia «%s» regresó %d entradas, pero se esperaba 1" -#: pg_dump.c:17211 +#: pg_dump.c:17255 #, c-format msgid "unrecognized sequence type: %s" msgstr "tipo no reconocido de secuencia: %s" -#: pg_dump.c:17495 +#: pg_dump.c:17539 #, c-format msgid "unexpected tgtype value: %d" msgstr "tgtype no esperado: %d" -#: pg_dump.c:17569 +#: pg_dump.c:17613 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "argumento de cadena (%s) no válido para el disparador (trigger) «%s» en la tabla «%s»" -#: pg_dump.c:17805 +#: pg_dump.c:17849 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "la consulta para obtener la regla «%s» asociada con la tabla «%s» falló: retornó un número incorrecto de renglones" -#: pg_dump.c:17967 +#: pg_dump.c:18011 #, c-format msgid "could not find referenced extension %u" msgstr "no se pudo encontrar la extensión referenciada %u" -#: pg_dump.c:18179 +#: pg_dump.c:18225 #, c-format msgid "reading dependency data" msgstr "obteniendo datos de dependencias" -#: pg_dump.c:18272 +#: pg_dump.c:18318 #, c-format msgid "no referencing object %u %u" msgstr "no existe el objeto referenciante %u %u" -#: pg_dump.c:18283 +#: pg_dump.c:18329 #, c-format msgid "no referenced object %u %u" msgstr "no existe el objeto referenciado %u %u" -#: pg_dump.c:18656 +#: pg_dump.c:18702 #, c-format msgid "could not parse reloptions array" msgstr "no se pudo interpretar el arreglo reloptions" @@ -2267,6 +2263,9 @@ msgid "" "same directory as \"%s\".\n" "Check your installation." msgstr "" +"%s necesita el programa «%s» pero no fue encontrado en el\n" +"mismo directorio que «%s».\n" +"Verifique su instalación." #: pg_dumpall.c:204 #, c-format @@ -2275,6 +2274,9 @@ msgid "" "but was not the same version as %s.\n" "Check your installation." msgstr "" +"El programa «%s» fue encontrado por «%s»\n" +"but no era de la misma versión que %s.\n" +"Verifique su instalación." #: pg_dumpall.c:356 #, c-format @@ -2704,24 +2706,3 @@ msgstr "" "\n" "Si no se especifica un archivo de entrada, se usa la entrada estándar.\n" "\n" - -#~ msgid "Report bugs to .\n" -#~ msgstr "Reporta errores a .\n" - -#~ msgid "" -#~ "The program \"pg_dump\" is needed by %s but was not found in the\n" -#~ "same directory as \"%s\".\n" -#~ "Check your installation." -#~ msgstr "" -#~ "%s necesita el programa «pg_dump», pero no fue encontrado en el mismo\n" -#~ "directorio que «%s».\n" -#~ "Verifique su instalación." - -#~ msgid "" -#~ "The program \"pg_dump\" was found by \"%s\"\n" -#~ "but was not the same version as %s.\n" -#~ "Check your installation." -#~ msgstr "" -#~ "«pg_dump» fue encontrado por «%s»,\n" -#~ "pero no es de la misma versión que %s.\n" -#~ "Verifique su instalación." diff --git a/src/bin/pg_dump/po/fr.po b/src/bin/pg_dump/po/fr.po index 660dc2e4837f0..711e7a7bf3088 100644 --- a/src/bin/pg_dump/po/fr.po +++ b/src/bin/pg_dump/po/fr.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-10 20:47+0000\n" -"PO-Revision-Date: 2020-05-11 09:26+0200\n" +"POT-Creation-Date: 2021-04-26 06:48+0000\n" +"PO-Revision-Date: 2021-04-26 11:39+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: PostgreSQLfr \n" "Language: fr\n" @@ -18,59 +18,59 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal : " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "erreur : " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "attention : " -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "n'a pas pu identifier le répertoire courant : %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "binaire « %s » invalide" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "n'a pas pu lire le binaire « %s »" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "n'a pas pu trouver un « %s » à exécuter" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "n'a pas pu modifier le répertoire par « %s » : %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "n'a pas pu lire le lien symbolique « %s » : %m" -#: ../../common/exec.c:410 +#: ../../common/exec.c:409 parallel.c:1614 #, c-format -msgid "pclose failed: %m" -msgstr "échec de pclose : %m" +msgid "%s() failed: %m" +msgstr "échec de %s() : %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" msgstr "mémoire épuisée" @@ -115,212 +115,217 @@ msgstr "le processus fils a été terminé par le signal %d : %s" msgid "child process exited with unrecognized status %d" msgstr "le processus fils a quitté avec un statut %d non reconnu" -#: common.c:121 +#: common.c:124 #, c-format msgid "reading extensions" msgstr "lecture des extensions" -#: common.c:125 +#: common.c:128 #, c-format msgid "identifying extension members" msgstr "identification des membres d'extension" -#: common.c:128 +#: common.c:131 #, c-format msgid "reading schemas" msgstr "lecture des schémas" -#: common.c:138 +#: common.c:141 #, c-format msgid "reading user-defined tables" msgstr "lecture des tables utilisateur" -#: common.c:145 +#: common.c:148 #, c-format msgid "reading user-defined functions" msgstr "lecture des fonctions utilisateur" -#: common.c:150 +#: common.c:153 #, c-format msgid "reading user-defined types" msgstr "lecture des types utilisateur" -#: common.c:155 +#: common.c:158 #, c-format msgid "reading procedural languages" msgstr "lecture des langages procéduraux" -#: common.c:158 +#: common.c:161 #, c-format msgid "reading user-defined aggregate functions" msgstr "lecture des fonctions d'agrégats utilisateur" -#: common.c:161 +#: common.c:164 #, c-format msgid "reading user-defined operators" msgstr "lecture des opérateurs utilisateur" -#: common.c:165 +#: common.c:168 #, c-format msgid "reading user-defined access methods" msgstr "lecture des méthodes d'accès définis par les utilisateurs" -#: common.c:168 +#: common.c:171 #, c-format msgid "reading user-defined operator classes" msgstr "lecture des classes d'opérateurs utilisateur" -#: common.c:171 +#: common.c:174 #, c-format msgid "reading user-defined operator families" msgstr "lecture des familles d'opérateurs utilisateur" -#: common.c:174 +#: common.c:177 #, c-format msgid "reading user-defined text search parsers" msgstr "lecture des analyseurs utilisateur pour la recherche plein texte" -#: common.c:177 +#: common.c:180 #, c-format msgid "reading user-defined text search templates" msgstr "lecture des modèles utilisateur pour la recherche plein texte" -#: common.c:180 +#: common.c:183 #, c-format msgid "reading user-defined text search dictionaries" msgstr "lecture des dictionnaires utilisateur pour la recherche plein texte" -#: common.c:183 +#: common.c:186 #, c-format msgid "reading user-defined text search configurations" msgstr "lecture des configurations utilisateur pour la recherche plein texte" -#: common.c:186 +#: common.c:189 #, c-format msgid "reading user-defined foreign-data wrappers" msgstr "lecture des wrappers de données distantes utilisateur" -#: common.c:189 +#: common.c:192 #, c-format msgid "reading user-defined foreign servers" msgstr "lecture des serveurs distants utilisateur" -#: common.c:192 +#: common.c:195 #, c-format msgid "reading default privileges" msgstr "lecture des droits par défaut" -#: common.c:195 +#: common.c:198 #, c-format msgid "reading user-defined collations" msgstr "lecture des collationnements utilisateurs" -#: common.c:199 +#: common.c:202 #, c-format msgid "reading user-defined conversions" msgstr "lecture des conversions utilisateur" -#: common.c:202 +#: common.c:205 #, c-format msgid "reading type casts" msgstr "lecture des conversions de type" -#: common.c:205 +#: common.c:208 #, c-format msgid "reading transforms" msgstr "lecture des transformations" -#: common.c:208 +#: common.c:211 #, c-format msgid "reading table inheritance information" msgstr "lecture des informations d'héritage des tables" -#: common.c:211 +#: common.c:214 #, c-format msgid "reading event triggers" msgstr "lecture des triggers sur évènement" -#: common.c:215 +#: common.c:218 #, c-format msgid "finding extension tables" msgstr "recherche des tables d'extension" -#: common.c:219 +#: common.c:222 #, c-format msgid "finding inheritance relationships" msgstr "recherche des relations d'héritage" -#: common.c:222 +#: common.c:225 #, c-format msgid "reading column info for interesting tables" msgstr "lecture des informations de colonnes des tables intéressantes" -#: common.c:225 +#: common.c:228 #, c-format msgid "flagging inherited columns in subtables" msgstr "marquage des colonnes héritées dans les sous-tables" -#: common.c:228 +#: common.c:231 #, c-format msgid "reading indexes" msgstr "lecture des index" -#: common.c:231 +#: common.c:234 #, c-format msgid "flagging indexes in partitioned tables" msgstr "décrit les index des tables partitionnées" -#: common.c:234 +#: common.c:237 #, c-format msgid "reading extended statistics" msgstr "lecture des statistiques étendues" -#: common.c:237 +#: common.c:240 #, c-format msgid "reading constraints" msgstr "lecture des contraintes" -#: common.c:240 +#: common.c:243 #, c-format msgid "reading triggers" msgstr "lecture des triggers" -#: common.c:243 +#: common.c:246 #, c-format msgid "reading rewrite rules" msgstr "lecture des règles de réécriture" -#: common.c:246 +#: common.c:249 #, c-format msgid "reading policies" msgstr "lecture des politiques" -#: common.c:249 +#: common.c:252 #, c-format msgid "reading publications" msgstr "lecture des publications" -#: common.c:252 +#: common.c:257 #, c-format msgid "reading publication membership" msgstr "lecture des appartenances aux publications" -#: common.c:255 +#: common.c:260 #, c-format msgid "reading subscriptions" msgstr "lecture des souscriptions" -#: common.c:1025 +#: common.c:338 +#, c-format +msgid "invalid number of parents %d for table \"%s\"" +msgstr "nombre de parents invalide (%d) pour la table « %s »" + +#: common.c:1098 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "vérification échouée, OID %u parent de la table « %s » (OID %u) introuvable" -#: common.c:1067 +#: common.c:1140 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "n'a pas pu analyser le tableau numérique « %s » : trop de nombres" -#: common.c:1082 +#: common.c:1155 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "n'a pas pu analyser le tableau numérique « %s » : caractère invalide dans le nombre" @@ -361,43 +366,43 @@ msgstr "n'a pas pu décompresser les données : %s" msgid "could not close compression library: %s" msgstr "n'a pas pu fermer la bibliothèque de compression : %s" -#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:557 pg_backup_tar.c:560 +#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:551 pg_backup_tar.c:554 #, c-format msgid "could not read from input file: %s" msgstr "n'a pas pu lire à partir du fichier en entrée : %s" -#: compress_io.c:623 pg_backup_custom.c:575 pg_backup_directory.c:534 -#: pg_backup_tar.c:793 pg_backup_tar.c:816 +#: compress_io.c:623 pg_backup_custom.c:643 pg_backup_directory.c:552 +#: pg_backup_tar.c:787 pg_backup_tar.c:810 #, c-format msgid "could not read from input file: end of file" msgstr "n'a pas pu lire à partir du fichier en entrée : fin du fichier" -#: parallel.c:267 +#: parallel.c:254 #, c-format -msgid "WSAStartup failed: %d" -msgstr "WSAStartup a échoué : %d" +msgid "%s() failed: error code %d" +msgstr "échec de %s() : code d'erreur %d" -#: parallel.c:978 +#: parallel.c:964 #, c-format msgid "could not create communication channels: %m" msgstr "n'a pas pu créer le canal de communication : %m" -#: parallel.c:1035 +#: parallel.c:1021 #, c-format msgid "could not create worker process: %m" msgstr "n'a pas pu créer le processus worker : %m" -#: parallel.c:1165 +#: parallel.c:1151 #, c-format -msgid "unrecognized command received from master: \"%s\"" -msgstr "commande non reconnue reçue du maître : « %s »" +msgid "unrecognized command received from leader: \"%s\"" +msgstr "commande non reconnue reçue du leader : « %s »" -#: parallel.c:1208 parallel.c:1446 +#: parallel.c:1194 parallel.c:1432 #, c-format msgid "invalid message received from worker: \"%s\"" msgstr "message invalide reçu du worker: « %s »" -#: parallel.c:1340 +#: parallel.c:1326 #, c-format msgid "" "could not obtain lock on relation \"%s\"\n" @@ -406,509 +411,506 @@ msgstr "" "impossible d'obtenir un verrou sur la relation « %s »\n" "Cela signifie en général que quelqu'un a demandé un verrou ACCESS EXCLUSIVE sur la table après que pg_dump ait obtenu son verrou ACCESS SHARE initial sur la table." -#: parallel.c:1429 +#: parallel.c:1415 #, c-format msgid "a worker process died unexpectedly" msgstr "un processus worker a subi un arrêt brutal inattendu" -#: parallel.c:1551 parallel.c:1669 +#: parallel.c:1537 parallel.c:1655 #, c-format msgid "could not write to the communication channel: %m" msgstr "n'a pas pu écrire dans le canal de communication: %m" -#: parallel.c:1628 -#, c-format -msgid "select() failed: %m" -msgstr "échec de select() : %m" - -#: parallel.c:1753 +#: parallel.c:1739 #, c-format msgid "pgpipe: could not create socket: error code %d" msgstr "pgpipe: n'a pas pu créer le socket: code d'erreur %d" -#: parallel.c:1764 +#: parallel.c:1750 #, c-format msgid "pgpipe: could not bind: error code %d" msgstr "pgpipe: n'a pas pu se lier: code d'erreur %d" -#: parallel.c:1771 +#: parallel.c:1757 #, c-format msgid "pgpipe: could not listen: error code %d" msgstr "pgpipe : n'a pas pu se mettre en écoute: code d'erreur %d" -#: parallel.c:1778 +#: parallel.c:1764 #, c-format -msgid "pgpipe: getsockname() failed: error code %d" -msgstr "pgpipe: getsocketname() a échoué: code d'erreur %d" +msgid "pgpipe: %s() failed: error code %d" +msgstr "pgpipe: échec de %s() : code d'erreur %d" -#: parallel.c:1789 +#: parallel.c:1775 #, c-format msgid "pgpipe: could not create second socket: error code %d" msgstr "pgpipe: n'a pas pu créer un deuxième socket: code d'erreur %d" -#: parallel.c:1798 +#: parallel.c:1784 #, c-format msgid "pgpipe: could not connect socket: error code %d" msgstr "pgpipe: n'a pas pu se connecter au socket: code d'erreur %d" -#: parallel.c:1807 +#: parallel.c:1793 #, c-format msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: n'a pas pu accepter de connexion: code d'erreur %d" -#: pg_backup_archiver.c:271 pg_backup_archiver.c:1591 +#: pg_backup_archiver.c:278 pg_backup_archiver.c:1577 #, c-format msgid "could not close output file: %m" msgstr "n'a pas pu fermer le fichier en sortie : %m" -#: pg_backup_archiver.c:315 pg_backup_archiver.c:319 +#: pg_backup_archiver.c:322 pg_backup_archiver.c:326 #, c-format msgid "archive items not in correct section order" msgstr "les éléments de l'archive ne sont pas dans l'ordre correct de la section" -#: pg_backup_archiver.c:325 +#: pg_backup_archiver.c:332 #, c-format msgid "unexpected section code %d" msgstr "code de section inattendu %d" -#: pg_backup_archiver.c:362 +#: pg_backup_archiver.c:369 #, c-format msgid "parallel restore is not supported with this archive file format" msgstr "la restauration parallélisée n'est pas supportée avec ce format de fichier d'archive" -#: pg_backup_archiver.c:366 +#: pg_backup_archiver.c:373 #, c-format msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump" msgstr "la restauration parallélisée n'est pas supportée avec les archives réalisées par un pg_dump antérieur à la 8.0" -#: pg_backup_archiver.c:384 +#: pg_backup_archiver.c:391 #, c-format msgid "cannot restore from compressed archive (compression not supported in this installation)" msgstr "ne peut pas restaurer à partir de l'archive compressée (compression indisponible dans cette installation)" -#: pg_backup_archiver.c:401 +#: pg_backup_archiver.c:408 #, c-format msgid "connecting to database for restore" msgstr "connexion à la base de données pour la restauration" -#: pg_backup_archiver.c:403 +#: pg_backup_archiver.c:410 #, c-format msgid "direct database connections are not supported in pre-1.3 archives" msgstr "les connexions directes à la base de données ne sont pas supportées dans les archives pre-1.3" -#: pg_backup_archiver.c:448 +#: pg_backup_archiver.c:453 #, c-format msgid "implied data-only restore" msgstr "a impliqué une restauration des données uniquement" -#: pg_backup_archiver.c:514 +#: pg_backup_archiver.c:519 #, c-format msgid "dropping %s %s" msgstr "suppression de %s %s" -#: pg_backup_archiver.c:609 +#: pg_backup_archiver.c:614 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "n'a pas pu trouver où insérer IF EXISTS dans l'instruction « %s »" -#: pg_backup_archiver.c:765 pg_backup_archiver.c:767 +#: pg_backup_archiver.c:770 pg_backup_archiver.c:772 #, c-format msgid "warning from original dump file: %s" msgstr "message d'avertissement du fichier de sauvegarde original : %s" -#: pg_backup_archiver.c:782 +#: pg_backup_archiver.c:787 #, c-format msgid "creating %s \"%s.%s\"" msgstr "création de %s « %s.%s »" -#: pg_backup_archiver.c:785 +#: pg_backup_archiver.c:790 #, c-format msgid "creating %s \"%s\"" msgstr "création de %s « %s »" -#: pg_backup_archiver.c:842 +#: pg_backup_archiver.c:840 #, c-format msgid "connecting to new database \"%s\"" msgstr "connexion à la nouvelle base de données « %s »" -#: pg_backup_archiver.c:870 +#: pg_backup_archiver.c:867 #, c-format msgid "processing %s" msgstr "traitement de %s" -#: pg_backup_archiver.c:890 +#: pg_backup_archiver.c:887 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "traitement des données de la table « %s.%s »" -#: pg_backup_archiver.c:952 +#: pg_backup_archiver.c:949 #, c-format msgid "executing %s %s" msgstr "exécution de %s %s" -#: pg_backup_archiver.c:991 +#: pg_backup_archiver.c:988 #, c-format msgid "disabling triggers for %s" msgstr "désactivation des triggers pour %s" -#: pg_backup_archiver.c:1017 +#: pg_backup_archiver.c:1014 #, c-format msgid "enabling triggers for %s" msgstr "activation des triggers pour %s" -#: pg_backup_archiver.c:1045 +#: pg_backup_archiver.c:1042 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" msgstr "erreur interne -- WriteData ne peut pas être appelé en dehors du contexte de la routine DataDumper" -#: pg_backup_archiver.c:1228 +#: pg_backup_archiver.c:1225 #, c-format msgid "large-object output not supported in chosen format" msgstr "la sauvegarde des « Large Objects » n'est pas supportée dans le format choisi" -#: pg_backup_archiver.c:1286 +#: pg_backup_archiver.c:1283 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" msgstr[0] "restauration de %d « Large Object »" msgstr[1] "restauration de %d « Large Objects »" -#: pg_backup_archiver.c:1307 pg_backup_tar.c:736 +#: pg_backup_archiver.c:1304 pg_backup_tar.c:730 #, c-format msgid "restoring large object with OID %u" msgstr "restauration du « Large Object » d'OID %u" -#: pg_backup_archiver.c:1319 +#: pg_backup_archiver.c:1316 #, c-format msgid "could not create large object %u: %s" msgstr "n'a pas pu créer le « Large Object » %u : %s" -#: pg_backup_archiver.c:1324 pg_dump.c:3549 +#: pg_backup_archiver.c:1321 pg_dump.c:3702 #, c-format msgid "could not open large object %u: %s" msgstr "n'a pas pu ouvrir le « Large Object » %u : %s" -#: pg_backup_archiver.c:1381 +#: pg_backup_archiver.c:1377 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier TOC « %s » : %m" -#: pg_backup_archiver.c:1421 +#: pg_backup_archiver.c:1405 #, c-format msgid "line ignored: %s" msgstr "ligne ignorée : %s" -#: pg_backup_archiver.c:1428 +#: pg_backup_archiver.c:1412 #, c-format msgid "could not find entry for ID %d" msgstr "n'a pas pu trouver l'entrée pour l'ID %d" -#: pg_backup_archiver.c:1449 pg_backup_directory.c:222 -#: pg_backup_directory.c:580 +#: pg_backup_archiver.c:1435 pg_backup_directory.c:222 +#: pg_backup_directory.c:598 #, c-format msgid "could not close TOC file: %m" msgstr "n'a pas pu fermer le fichier TOC : %m" -#: pg_backup_archiver.c:1563 pg_backup_custom.c:158 pg_backup_directory.c:332 -#: pg_backup_directory.c:567 pg_backup_directory.c:630 -#: pg_backup_directory.c:649 pg_dumpall.c:484 +#: pg_backup_archiver.c:1549 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_directory.c:585 pg_backup_directory.c:648 +#: pg_backup_directory.c:667 pg_dumpall.c:485 #, c-format msgid "could not open output file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier de sauvegarde « %s » : %m" -#: pg_backup_archiver.c:1565 pg_backup_custom.c:164 +#: pg_backup_archiver.c:1551 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "n'a pas pu ouvrir le fichier de sauvegarde : %m" -#: pg_backup_archiver.c:1658 +#: pg_backup_archiver.c:1644 #, c-format -msgid "wrote %lu byte of large object data (result = %lu)" -msgid_plural "wrote %lu bytes of large object data (result = %lu)" -msgstr[0] "a écrit %lu octet de données d'un « Large Object » (résultat = %lu)" -msgstr[1] "a écrit %lu octets de données d'un « Large Object » (résultat = %lu)" +msgid "wrote %zu byte of large object data (result = %d)" +msgid_plural "wrote %zu bytes of large object data (result = %d)" +msgstr[0] "a écrit %zu octet de données d'un « Large Object » (résultat = %d)" +msgstr[1] "a écrit %zu octets de données d'un « Large Object » (résultat = %d)" -#: pg_backup_archiver.c:1663 +#: pg_backup_archiver.c:1650 #, c-format -msgid "could not write to large object (result: %lu, expected: %lu)" -msgstr "n'a pas pu écrire le « Large Object » (résultat : %lu, attendu : %lu)" +msgid "could not write to large object: %s" +msgstr "n'a pas pu écrire dans le « Large Object » : %s" -#: pg_backup_archiver.c:1753 +#: pg_backup_archiver.c:1740 #, c-format msgid "while INITIALIZING:" msgstr "pendant l'initialisation (« INITIALIZING ») :" -#: pg_backup_archiver.c:1758 +#: pg_backup_archiver.c:1745 #, c-format msgid "while PROCESSING TOC:" msgstr "pendant le traitement de la TOC (« PROCESSING TOC ») :" -#: pg_backup_archiver.c:1763 +#: pg_backup_archiver.c:1750 #, c-format msgid "while FINALIZING:" msgstr "pendant la finalisation (« FINALIZING ») :" -#: pg_backup_archiver.c:1768 +#: pg_backup_archiver.c:1755 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "de l'entrée TOC %d ; %u %u %s %s %s" -#: pg_backup_archiver.c:1844 +#: pg_backup_archiver.c:1831 #, c-format msgid "bad dumpId" msgstr "mauvais dumpId" -#: pg_backup_archiver.c:1865 +#: pg_backup_archiver.c:1852 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "mauvais dumpId de table pour l'élément TABLE DATA" -#: pg_backup_archiver.c:1957 +#: pg_backup_archiver.c:1944 #, c-format msgid "unexpected data offset flag %d" msgstr "drapeau de décalage de données inattendu %d" -#: pg_backup_archiver.c:1970 +#: pg_backup_archiver.c:1957 #, c-format msgid "file offset in dump file is too large" msgstr "le décalage dans le fichier de sauvegarde est trop important" -#: pg_backup_archiver.c:2107 pg_backup_archiver.c:2117 +#: pg_backup_archiver.c:2095 pg_backup_archiver.c:2105 #, c-format msgid "directory name too long: \"%s\"" msgstr "nom du répertoire trop long : « %s »" -#: pg_backup_archiver.c:2125 +#: pg_backup_archiver.c:2113 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" msgstr "le répertoire « %s » ne semble pas être une archive valide (« toc.dat » n'existe pas)" -#: pg_backup_archiver.c:2133 pg_backup_custom.c:175 pg_backup_custom.c:753 -#: pg_backup_directory.c:207 pg_backup_directory.c:388 +#: pg_backup_archiver.c:2121 pg_backup_custom.c:173 pg_backup_custom.c:807 +#: pg_backup_directory.c:207 pg_backup_directory.c:394 #, c-format msgid "could not open input file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier en entrée « %s » : %m" -#: pg_backup_archiver.c:2140 pg_backup_custom.c:181 +#: pg_backup_archiver.c:2128 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "n'a pas pu ouvrir le fichier en entrée : %m" -#: pg_backup_archiver.c:2146 +#: pg_backup_archiver.c:2134 #, c-format msgid "could not read input file: %m" msgstr "n'a pas pu lire le fichier en entrée : %m" -#: pg_backup_archiver.c:2148 +#: pg_backup_archiver.c:2136 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "le fichier en entrée est trop petit (%lu lus, 5 attendus)" -#: pg_backup_archiver.c:2233 +#: pg_backup_archiver.c:2168 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "Le fichier en entrée semble être une sauvegarde au format texte. Merci d'utiliser psql." -#: pg_backup_archiver.c:2239 +#: pg_backup_archiver.c:2174 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "le fichier en entrée ne semble pas être une archive valide (trop petit ?)" -#: pg_backup_archiver.c:2245 +#: pg_backup_archiver.c:2180 #, c-format msgid "input file does not appear to be a valid archive" msgstr "le fichier en entrée ne semble pas être une archive valide" -#: pg_backup_archiver.c:2265 +#: pg_backup_archiver.c:2189 #, c-format msgid "could not close input file: %m" msgstr "n'a pas pu fermer le fichier en entrée : %m" -#: pg_backup_archiver.c:2379 +#: pg_backup_archiver.c:2306 #, c-format msgid "unrecognized file format \"%d\"" msgstr "format de fichier « %d » non reconnu" -#: pg_backup_archiver.c:2461 pg_backup_archiver.c:4473 +#: pg_backup_archiver.c:2388 pg_backup_archiver.c:4422 #, c-format msgid "finished item %d %s %s" msgstr "élément terminé %d %s %s" -#: pg_backup_archiver.c:2465 pg_backup_archiver.c:4486 +#: pg_backup_archiver.c:2392 pg_backup_archiver.c:4435 #, c-format msgid "worker process failed: exit code %d" msgstr "échec du processus worker : code de sortie %d" -#: pg_backup_archiver.c:2585 +#: pg_backup_archiver.c:2512 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "ID %d de l'entrée en dehors de la plage -- peut-être un TOC corrompu" -#: pg_backup_archiver.c:2652 +#: pg_backup_archiver.c:2579 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "la restauration des tables avec WITH OIDS n'est plus supportée" -#: pg_backup_archiver.c:2734 +#: pg_backup_archiver.c:2663 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "encodage « %s » non reconnu" -#: pg_backup_archiver.c:2739 +#: pg_backup_archiver.c:2668 #, c-format msgid "invalid ENCODING item: %s" msgstr "élément ENCODING invalide : %s" -#: pg_backup_archiver.c:2757 +#: pg_backup_archiver.c:2686 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "élément STDSTRINGS invalide : %s" -#: pg_backup_archiver.c:2782 +#: pg_backup_archiver.c:2717 +#, c-format +msgid "invalid TOASTCOMPRESSION item: %s" +msgstr "élément TOASTCOMPRESSION invalide : %s" + +#: pg_backup_archiver.c:2734 #, c-format msgid "schema \"%s\" not found" msgstr "schéma « %s » non trouvé" -#: pg_backup_archiver.c:2789 +#: pg_backup_archiver.c:2741 #, c-format msgid "table \"%s\" not found" msgstr "table « %s » non trouvée" -#: pg_backup_archiver.c:2796 +#: pg_backup_archiver.c:2748 #, c-format msgid "index \"%s\" not found" msgstr "index « %s » non trouvé" -#: pg_backup_archiver.c:2803 +#: pg_backup_archiver.c:2755 #, c-format msgid "function \"%s\" not found" msgstr "fonction « %s » non trouvée" -#: pg_backup_archiver.c:2810 +#: pg_backup_archiver.c:2762 #, c-format msgid "trigger \"%s\" not found" msgstr "trigger « %s » non trouvé" -#: pg_backup_archiver.c:3202 +#: pg_backup_archiver.c:3160 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "n'a pas pu initialiser la session utilisateur à « %s »: %s" -#: pg_backup_archiver.c:3341 +#: pg_backup_archiver.c:3292 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "n'a pas pu configurer search_path à « %s » : %s" -#: pg_backup_archiver.c:3403 +#: pg_backup_archiver.c:3354 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "n'a pas pu configurer default_tablespace à %s : %s" -#: pg_backup_archiver.c:3448 +#: pg_backup_archiver.c:3399 #, c-format msgid "could not set default_table_access_method: %s" msgstr "n'a pas pu configurer la méthode default_table_access_method à %s" -#: pg_backup_archiver.c:3540 pg_backup_archiver.c:3698 +#: pg_backup_archiver.c:3491 pg_backup_archiver.c:3649 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "ne sait pas comment initialiser le propriétaire du type d'objet « %s »" -#: pg_backup_archiver.c:3802 +#: pg_backup_archiver.c:3753 #, c-format msgid "did not find magic string in file header" msgstr "n'a pas trouver la chaîne magique dans le fichier d'en-tête" -#: pg_backup_archiver.c:3815 +#: pg_backup_archiver.c:3767 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "version non supportée (%d.%d) dans le fichier d'en-tête" -#: pg_backup_archiver.c:3820 +#: pg_backup_archiver.c:3772 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "échec de la vérification sur la taille de l'entier (%lu)" -#: pg_backup_archiver.c:3824 +#: pg_backup_archiver.c:3776 #, c-format msgid "archive was made on a machine with larger integers, some operations might fail" msgstr "l'archive a été créée sur une machine disposant d'entiers plus larges, certaines opérations peuvent échouer" -#: pg_backup_archiver.c:3834 +#: pg_backup_archiver.c:3786 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "le format attendu (%d) diffère du format du fichier (%d)" -#: pg_backup_archiver.c:3850 +#: pg_backup_archiver.c:3801 #, c-format msgid "archive is compressed, but this installation does not support compression -- no data will be available" msgstr "l'archive est compressée mais cette installation ne supporte pas la compression -- aucune donnée ne sera disponible" -#: pg_backup_archiver.c:3868 +#: pg_backup_archiver.c:3819 #, c-format msgid "invalid creation date in header" msgstr "date de création invalide dans l'en-tête" -#: pg_backup_archiver.c:3996 +#: pg_backup_archiver.c:3947 #, c-format msgid "processing item %d %s %s" msgstr "traitement de l'élément %d %s %s" -#: pg_backup_archiver.c:4075 +#: pg_backup_archiver.c:4026 #, c-format msgid "entering main parallel loop" msgstr "entrée dans la boucle parallèle principale" -#: pg_backup_archiver.c:4086 +#: pg_backup_archiver.c:4037 #, c-format msgid "skipping item %d %s %s" msgstr "omission de l'élément %d %s %s" -#: pg_backup_archiver.c:4095 +#: pg_backup_archiver.c:4046 #, c-format msgid "launching item %d %s %s" msgstr "lancement de l'élément %d %s %s" -#: pg_backup_archiver.c:4149 +#: pg_backup_archiver.c:4100 #, c-format msgid "finished main parallel loop" msgstr "fin de la boucle parallèle principale" -#: pg_backup_archiver.c:4187 +#: pg_backup_archiver.c:4136 #, c-format msgid "processing missed item %d %s %s" msgstr "traitement de l'élément manquant %d %s %s" -#: pg_backup_archiver.c:4792 +#: pg_backup_archiver.c:4741 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "la table « %s » n'a pas pu être créée, ses données ne seront pas restaurées" -#: pg_backup_custom.c:374 pg_backup_null.c:147 +#: pg_backup_custom.c:376 pg_backup_null.c:147 #, c-format msgid "invalid OID for large object" msgstr "OID invalide pour le « Large Object »" -#: pg_backup_custom.c:444 -#, c-format -msgid "unrecognized data block type (%d) while searching archive" -msgstr "type de bloc de données non reconnu (%d) lors de la recherche dans l'archive" - -#: pg_backup_custom.c:455 pg_backup_custom.c:811 +#: pg_backup_custom.c:439 pg_backup_custom.c:505 pg_backup_custom.c:629 +#: pg_backup_custom.c:865 pg_backup_tar.c:1080 pg_backup_tar.c:1085 #, c-format msgid "error during file seek: %m" msgstr "erreur lors de la recherche dans le fichier : %m" -#: pg_backup_custom.c:464 +#: pg_backup_custom.c:478 #, c-format -msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive" -msgstr "" -"n'a pas pu trouver l'identifiant de bloc %d dans l'archive --\n" -"il est possible que cela soit dû à une demande de restauration dans un ordre\n" -"différent, qui n'a pas pu être géré à cause d'un manque d'information de\n" -"position dans l'archive" +msgid "data block %d has wrong seek position" +msgstr "le bloc de données %d a une mauvaise position de recherche" + +#: pg_backup_custom.c:495 +#, c-format +msgid "unrecognized data block type (%d) while searching archive" +msgstr "type de bloc de données non reconnu (%d) lors de la recherche dans l'archive" -#: pg_backup_custom.c:469 +#: pg_backup_custom.c:517 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to non-seekable input file" msgstr "" @@ -917,178 +919,152 @@ msgstr "" "différent, ce qui ne peut pas être géré à cause d'un fichier non gérable en\n" "recherche" -#: pg_backup_custom.c:474 +#: pg_backup_custom.c:522 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive" msgstr "n'a pas pu trouver l'identifiant de bloc %d dans l'archive -- possible corruption de l'archive" -#: pg_backup_custom.c:481 +#: pg_backup_custom.c:529 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d" msgstr "ID de bloc inattendu (%d) lors de la lecture des données -- %d attendu" -#: pg_backup_custom.c:495 +#: pg_backup_custom.c:543 #, c-format msgid "unrecognized data block type %d while restoring archive" msgstr "type de bloc de données %d non reconnu lors de la restauration de l'archive" -#: pg_backup_custom.c:577 +#: pg_backup_custom.c:645 #, c-format msgid "could not read from input file: %m" msgstr "n'a pas pu lire à partir du fichier en entrée : %m" -#: pg_backup_custom.c:691 pg_backup_custom.c:744 pg_backup_custom.c:884 -#: pg_backup_tar.c:1088 +#: pg_backup_custom.c:746 pg_backup_custom.c:798 pg_backup_custom.c:943 +#: pg_backup_tar.c:1083 #, c-format msgid "could not determine seek position in archive file: %m" msgstr "n'a pas pu déterminer la position de recherche dans le fichier d'archive : %m" -#: pg_backup_custom.c:708 pg_backup_custom.c:748 +#: pg_backup_custom.c:762 pg_backup_custom.c:802 #, c-format msgid "could not close archive file: %m" msgstr "n'a pas pu fermer le fichier d'archive : %m" -#: pg_backup_custom.c:731 +#: pg_backup_custom.c:785 #, c-format msgid "can only reopen input archives" msgstr "peut seulement rouvrir l'archive en entrée" -#: pg_backup_custom.c:738 +#: pg_backup_custom.c:792 #, c-format msgid "parallel restore from standard input is not supported" msgstr "la restauration parallélisée n'est pas supportée à partir de stdin" -#: pg_backup_custom.c:740 +#: pg_backup_custom.c:794 #, c-format msgid "parallel restore from non-seekable file is not supported" msgstr "la restauration parallélisée n'est pas supportée à partir de fichiers sans table de matière" -#: pg_backup_custom.c:756 +#: pg_backup_custom.c:810 #, c-format msgid "could not set seek position in archive file: %m" msgstr "n'a pas pu initialiser la recherche de position dans le fichier d'archive : %m" -#: pg_backup_custom.c:832 +#: pg_backup_custom.c:889 #, c-format msgid "compressor active" msgstr "compression activée" -#: pg_backup_custom.c:887 -#, c-format -msgid "ftell mismatch with expected position -- ftell used" -msgstr "ftell ne correspond pas à la position attendue -- ftell utilisé" - #: pg_backup_db.c:42 #, c-format msgid "could not get server_version from libpq" msgstr "n'a pas pu obtenir server_version de libpq" -#: pg_backup_db.c:53 pg_dumpall.c:1826 +#: pg_backup_db.c:53 pg_dumpall.c:1821 #, c-format msgid "server version: %s; %s version: %s" msgstr "version du serveur : %s ; %s version : %s" -#: pg_backup_db.c:55 pg_dumpall.c:1828 +#: pg_backup_db.c:55 pg_dumpall.c:1823 #, c-format msgid "aborting because of server version mismatch" msgstr "annulation à cause de la différence des versions" -#: pg_backup_db.c:138 +#: pg_backup_db.c:124 #, c-format -msgid "connecting to database \"%s\" as user \"%s\"" -msgstr "connexion à la base de données « %s » en tant qu'utilisateur « %s »" +msgid "already connected to a database" +msgstr "déjà connecté à une base de données" -#: pg_backup_db.c:145 pg_backup_db.c:194 pg_backup_db.c:255 pg_backup_db.c:296 -#: pg_dumpall.c:1651 pg_dumpall.c:1764 +#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1650 pg_dumpall.c:1761 msgid "Password: " msgstr "Mot de passe : " -#: pg_backup_db.c:177 -#, c-format -msgid "could not reconnect to database" -msgstr "n'a pas pu se reconnecter à la base de données" - -#: pg_backup_db.c:182 -#, c-format -msgid "could not reconnect to database: %s" -msgstr "n'a pas pu se reconnecter à la base de données : %s" - -#: pg_backup_db.c:198 -#, c-format -msgid "connection needs password" -msgstr "la connexion nécessite un mot de passe" - -#: pg_backup_db.c:249 -#, c-format -msgid "already connected to a database" -msgstr "déjà connecté à une base de données" - -#: pg_backup_db.c:288 +#: pg_backup_db.c:174 #, c-format msgid "could not connect to database" msgstr "n'a pas pu se connecter à la base de données" -#: pg_backup_db.c:304 +#: pg_backup_db.c:191 #, c-format -msgid "connection to database \"%s\" failed: %s" -msgstr "la connexion à la base de données « %s » a échoué : %s" +msgid "reconnection failed: %s" +msgstr "échec de la reconnexion : %s" -#: pg_backup_db.c:376 pg_dumpall.c:1684 +#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1681 pg_dumpall.c:1771 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:383 pg_dumpall.c:1889 pg_dumpall.c:1912 +#: pg_backup_db.c:276 pg_dumpall.c:1884 pg_dumpall.c:1907 #, c-format msgid "query failed: %s" msgstr "échec de la requête : %s" -#: pg_backup_db.c:385 pg_dumpall.c:1890 pg_dumpall.c:1913 +#: pg_backup_db.c:278 pg_dumpall.c:1885 pg_dumpall.c:1908 #, c-format msgid "query was: %s" msgstr "la requête était : %s" -#: pg_backup_db.c:426 +#: pg_backup_db.c:319 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" msgstr[0] "la requête a renvoyé %d ligne au lieu d'une seule : %s" msgstr[1] "la requête a renvoyé %d lignes au lieu d'une seule : %s" -#: pg_backup_db.c:462 +#: pg_backup_db.c:355 #, c-format msgid "%s: %sCommand was: %s" msgstr "%s: %sLa commande était : %s" -#: pg_backup_db.c:518 pg_backup_db.c:592 pg_backup_db.c:599 +#: pg_backup_db.c:411 pg_backup_db.c:485 pg_backup_db.c:492 msgid "could not execute query" msgstr "n'a pas pu exécuter la requête" -#: pg_backup_db.c:571 +#: pg_backup_db.c:464 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "erreur renvoyée par PQputCopyData : %s" -#: pg_backup_db.c:620 +#: pg_backup_db.c:513 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "erreur renvoyée par PQputCopyEnd : %s" -#: pg_backup_db.c:626 +#: pg_backup_db.c:519 #, c-format msgid "COPY failed for table \"%s\": %s" msgstr "COPY échoué pour la table « %s » : %s" -#: pg_backup_db.c:632 pg_dump.c:1991 +#: pg_backup_db.c:525 pg_dump.c:2086 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "résultats supplémentaires non attendus durant l'exécution de COPY sur la table « %s »" -#: pg_backup_db.c:644 +#: pg_backup_db.c:537 msgid "could not start database transaction" msgstr "n'a pas pu démarrer la transaction de la base de données" -#: pg_backup_db.c:652 +#: pg_backup_db.c:545 msgid "could not commit database transaction" msgstr "n'a pas pu valider la transaction de la base de données" @@ -1112,43 +1088,43 @@ msgstr "n'a pas pu fermer le répertoire « %s » : %m" msgid "could not create directory \"%s\": %m" msgstr "n'a pas pu créer le répertoire « %s » : %m" -#: pg_backup_directory.c:350 pg_backup_directory.c:485 -#: pg_backup_directory.c:515 +#: pg_backup_directory.c:355 pg_backup_directory.c:496 +#: pg_backup_directory.c:532 #, c-format msgid "could not write to output file: %s" msgstr "n'a pas pu écrire dans le fichier en sortie : %s" -#: pg_backup_directory.c:400 +#: pg_backup_directory.c:406 #, c-format msgid "could not close data file \"%s\": %m" msgstr "n'a pas pu fermer le fichier de données « %s » : %m" -#: pg_backup_directory.c:440 +#: pg_backup_directory.c:446 #, c-format msgid "could not open large object TOC file \"%s\" for input: %m" msgstr "n'a pas pu ouvrir le fichier TOC « %s » du Large Object en entrée : %m" -#: pg_backup_directory.c:451 +#: pg_backup_directory.c:457 #, c-format msgid "invalid line in large object TOC file \"%s\": \"%s\"" msgstr "ligne invalide dans le fichier TOC du Large Object « %s » : « %s »" -#: pg_backup_directory.c:460 +#: pg_backup_directory.c:466 #, c-format msgid "error reading large object TOC file \"%s\"" msgstr "erreur lors de la lecture du TOC du fichier Large Object « %s »" -#: pg_backup_directory.c:464 +#: pg_backup_directory.c:470 #, c-format msgid "could not close large object TOC file \"%s\": %m" msgstr "n'a pas pu fermer le TOC du Large Object « %s » : %m" -#: pg_backup_directory.c:671 +#: pg_backup_directory.c:689 #, c-format msgid "could not write to blobs TOC file" msgstr "n'a pas pu écrire dans le fichier TOC des Large Objects" -#: pg_backup_directory.c:703 +#: pg_backup_directory.c:721 #, c-format msgid "file name too long: \"%s\"" msgstr "nom du fichier trop long : « %s »" @@ -1168,7 +1144,7 @@ msgstr "n'a pas pu ouvrir le fichier TOC « %s » en sortie : %m" msgid "could not open TOC file for output: %m" msgstr "n'a pas pu ouvrir le fichier TOC en sortie : %m" -#: pg_backup_tar.c:203 pg_backup_tar.c:358 +#: pg_backup_tar.c:203 pg_backup_tar.c:352 #, c-format msgid "compression is not supported by tar archive format" msgstr "compression non supportée par le format des archives tar" @@ -1183,64 +1159,64 @@ msgstr "n'a pas pu ouvrir le fichier TOC « %s » en entrée : %m" msgid "could not open TOC file for input: %m" msgstr "n'a pas pu ouvrir le fichier TOC en entrée : %m" -#: pg_backup_tar.c:344 +#: pg_backup_tar.c:338 #, c-format msgid "could not find file \"%s\" in archive" msgstr "n'a pas pu trouver le fichier « %s » dans l'archive" -#: pg_backup_tar.c:410 +#: pg_backup_tar.c:404 #, c-format msgid "could not generate temporary file name: %m" msgstr "impossible de créer le nom du fichier temporaire : %m" -#: pg_backup_tar.c:421 +#: pg_backup_tar.c:415 #, c-format msgid "could not open temporary file" msgstr "n'a pas pu ouvrir le fichier temporaire" -#: pg_backup_tar.c:448 +#: pg_backup_tar.c:442 #, c-format msgid "could not close tar member" msgstr "n'a pas pu fermer le membre de tar" -#: pg_backup_tar.c:691 +#: pg_backup_tar.c:685 #, c-format msgid "unexpected COPY statement syntax: \"%s\"" msgstr "syntaxe inattendue de l'instruction COPY : « %s »" -#: pg_backup_tar.c:958 +#: pg_backup_tar.c:952 #, c-format msgid "invalid OID for large object (%u)" msgstr "OID invalide pour le « Large Object » (%u)" -#: pg_backup_tar.c:1103 +#: pg_backup_tar.c:1099 #, c-format msgid "could not close temporary file: %m" msgstr "n'a pas pu fermer le fichier temporaire : m" -#: pg_backup_tar.c:1112 +#: pg_backup_tar.c:1108 #, c-format msgid "actual file length (%s) does not match expected (%s)" msgstr "la longueur réelle du fichier (%s) ne correspond pas à ce qui était attendu (%s)" -#: pg_backup_tar.c:1169 pg_backup_tar.c:1199 +#: pg_backup_tar.c:1165 pg_backup_tar.c:1196 #, c-format msgid "could not find header for file \"%s\" in tar archive" msgstr "n'a pas pu trouver l'en-tête du fichier « %s » dans l'archive tar" -#: pg_backup_tar.c:1187 +#: pg_backup_tar.c:1183 #, c-format msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file." msgstr "la restauration désordonnée de données n'est pas supportée avec ce format d'archive : « %s » est requis mais vient avant « %s » dans le fichier d'archive." -#: pg_backup_tar.c:1232 +#: pg_backup_tar.c:1230 #, c-format msgid "incomplete tar header found (%lu byte)" msgid_plural "incomplete tar header found (%lu bytes)" msgstr[0] "en-tête incomplet du fichier tar (%lu octet)" msgstr[1] "en-tête incomplet du fichier tar (%lu octets)" -#: pg_backup_tar.c:1283 +#: pg_backup_tar.c:1281 #, c-format msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s" msgstr "en-tête tar corrompu trouvé dans %s (%d attendu, %d calculé ) à la position %s du fichier" @@ -1250,9 +1226,9 @@ msgstr "en-tête tar corrompu trouvé dans %s (%d attendu, %d calculé ) à la p msgid "unrecognized section name: \"%s\"" msgstr "nom de section non reconnu : « %s »" -#: pg_backup_utils.c:55 pg_dump.c:615 pg_dump.c:632 pg_dumpall.c:338 -#: pg_dumpall.c:348 pg_dumpall.c:357 pg_dumpall.c:366 pg_dumpall.c:374 -#: pg_dumpall.c:388 pg_dumpall.c:464 pg_restore.c:284 pg_restore.c:300 +#: pg_backup_utils.c:55 pg_dump.c:628 pg_dump.c:645 pg_dumpall.c:339 +#: pg_dumpall.c:349 pg_dumpall.c:358 pg_dumpall.c:367 pg_dumpall.c:375 +#: pg_dumpall.c:389 pg_dumpall.c:465 pg_restore.c:284 pg_restore.c:300 #: pg_restore.c:318 #, c-format msgid "Try \"%s --help\" for more information.\n" @@ -1263,72 +1239,77 @@ msgstr "Essayer « %s --help » pour plus d'informations.\n" msgid "out of on_exit_nicely slots" msgstr "plus d'emplacements on_exit_nicely" -#: pg_dump.c:541 +#: pg_dump.c:554 #, c-format msgid "compression level must be in range 0..9" msgstr "le niveau de compression doit être compris entre 0 et 9" -#: pg_dump.c:579 +#: pg_dump.c:592 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digits doit être dans l'intervalle -15 à 3" -#: pg_dump.c:602 +#: pg_dump.c:615 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "le nombre de lignes par insertion doit être compris entre %d et %d" -#: pg_dump.c:630 pg_dumpall.c:346 pg_restore.c:298 +#: pg_dump.c:643 pg_dumpall.c:347 pg_restore.c:298 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" -#: pg_dump.c:651 pg_restore.c:327 +#: pg_dump.c:664 pg_restore.c:327 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "les options « -s/--schema-only » et « -a/--data-only » ne peuvent pas être utilisées ensemble" -#: pg_dump.c:656 +#: pg_dump.c:669 #, c-format msgid "options -s/--schema-only and --include-foreign-data cannot be used together" msgstr "les options « -s/--schema-only » et « --include-foreign-data » ne peuvent pas être utilisées ensemble" -#: pg_dump.c:659 +#: pg_dump.c:672 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" msgstr "l'option --include-foreign-data n'est pas supportée avec une sauvegarde parallélisée" -#: pg_dump.c:663 pg_restore.c:333 +#: pg_dump.c:676 pg_restore.c:333 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "les options « -c/--clean » et « -a/--data-only » ne peuvent pas être utilisées ensemble" -#: pg_dump.c:668 pg_dumpall.c:381 pg_restore.c:382 +#: pg_dump.c:681 pg_dumpall.c:382 pg_restore.c:382 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "l'option --if-exists nécessite l'option -c/--clean" -#: pg_dump.c:675 +#: pg_dump.c:688 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "l'option --on-conflict-do-nothing requiert l'option --inserts, --rows-per-insert, ou --column-inserts" -#: pg_dump.c:697 +#: pg_dump.c:710 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "la compression requise n'est pas disponible avec cette installation -- l'archive ne sera pas compressée" -#: pg_dump.c:718 pg_restore.c:349 +#: pg_dump.c:731 pg_restore.c:349 #, c-format msgid "invalid number of parallel jobs" msgstr "nombre de jobs parallèles invalide" -#: pg_dump.c:722 +#: pg_dump.c:735 #, c-format msgid "parallel backup only supported by the directory format" msgstr "la sauvegarde parallélisée n'est supportée qu'avec le format directory" -#: pg_dump.c:777 +#: pg_dump.c:739 +#, c-format +msgid "option --index-collation-versions-unknown only works in binary upgrade mode" +msgstr "l'option --index-collation-versions-unknown fonctionne seulement dans le mode de mise à jour binaire" + +#: pg_dump.c:794 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1339,27 +1320,32 @@ msgstr "" "Lancez avec --no-synchronized-snapshots à la place si vous n'avez pas besoin\n" "de snapshots synchronisés." -#: pg_dump.c:783 +#: pg_dump.c:800 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Les images exportées de la base ne sont pas supportées par cette version du serveur." -#: pg_dump.c:795 +#: pg_dump.c:812 #, c-format msgid "last built-in OID is %u" msgstr "le dernier OID interne est %u" -#: pg_dump.c:804 +#: pg_dump.c:821 #, c-format msgid "no matching schemas were found" msgstr "aucun schéma correspondant n'a été trouvé" -#: pg_dump.c:818 +#: pg_dump.c:835 #, c-format msgid "no matching tables were found" msgstr "aucune table correspondante n'a été trouvée" -#: pg_dump.c:993 +#: pg_dump.c:857 +#, c-format +msgid "no matching extensions were found" +msgstr "aucune extension correspondante n'a été trouvée" + +#: pg_dump.c:1029 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1369,17 +1355,17 @@ msgstr "" "formats.\n" "\n" -#: pg_dump.c:994 pg_dumpall.c:617 pg_restore.c:462 +#: pg_dump.c:1030 pg_dumpall.c:618 pg_restore.c:462 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: pg_dump.c:995 +#: pg_dump.c:1031 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [NOMBASE]\n" -#: pg_dump.c:997 pg_dumpall.c:620 pg_restore.c:465 +#: pg_dump.c:1033 pg_dumpall.c:621 pg_restore.c:465 #, c-format msgid "" "\n" @@ -1388,12 +1374,12 @@ msgstr "" "\n" "Options générales :\n" -#: pg_dump.c:998 +#: pg_dump.c:1034 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=NOMFICHIER nom du fichier ou du répertoire en sortie\n" -#: pg_dump.c:999 +#: pg_dump.c:1035 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1402,48 +1388,48 @@ msgstr "" " -F, --format=c|d|t|p format du fichier de sortie (personnalisé,\n" " répertoire, tar, texte (par défaut))\n" -#: pg_dump.c:1001 +#: pg_dump.c:1037 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr "" " -j, --jobs=NUMERO utilise ce nombre de jobs en parallèle pour\n" " la sauvegarde\n" -#: pg_dump.c:1002 pg_dumpall.c:622 +#: pg_dump.c:1038 pg_dumpall.c:623 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose mode verbeux\n" -#: pg_dump.c:1003 pg_dumpall.c:623 +#: pg_dump.c:1039 pg_dumpall.c:624 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: pg_dump.c:1004 +#: pg_dump.c:1040 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr "" " -Z, --compress=0-9 niveau de compression pour les formats\n" " compressés\n" -#: pg_dump.c:1005 pg_dumpall.c:624 +#: pg_dump.c:1041 pg_dumpall.c:625 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr "" " --lock-wait-timeout=DÉLAI échec après l'attente du DÉLAI pour un verrou\n" " de table\n" -#: pg_dump.c:1006 pg_dumpall.c:651 +#: pg_dump.c:1042 pg_dumpall.c:652 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync n'attend pas que les modifications soient proprement écrites sur disque\n" -#: pg_dump.c:1007 pg_dumpall.c:625 +#: pg_dump.c:1043 pg_dumpall.c:626 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: pg_dump.c:1009 pg_dumpall.c:626 +#: pg_dump.c:1045 pg_dumpall.c:627 #, c-format msgid "" "\n" @@ -1452,59 +1438,64 @@ msgstr "" "\n" "Options contrôlant le contenu en sortie :\n" -#: pg_dump.c:1010 pg_dumpall.c:627 +#: pg_dump.c:1046 pg_dumpall.c:628 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr "" " -a, --data-only sauvegarde uniquement les données, pas le\n" " schéma\n" -#: pg_dump.c:1011 +#: pg_dump.c:1047 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr "" " -b, --blobs inclut les « Large Objects » dans la\n" " sauvegarde\n" -#: pg_dump.c:1012 +#: pg_dump.c:1048 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr "" " -B, --no-blobs exclut les « Large Objects » dans la\n" " sauvegarde\n" -#: pg_dump.c:1013 pg_restore.c:476 +#: pg_dump.c:1049 pg_restore.c:476 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr "" " -c, --clean nettoie/supprime les objets de la base de\n" " données avant de les créer\n" -#: pg_dump.c:1014 +#: pg_dump.c:1050 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr "" " -C, --create inclut les commandes de création de la base\n" " dans la sauvegarde\n" -#: pg_dump.c:1015 pg_dumpall.c:629 +#: pg_dump.c:1051 +#, c-format +msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" +msgstr " -e, --extension=MOTIF sauvegarde uniquement les extensions indiquées\n" + +#: pg_dump.c:1052 pg_dumpall.c:630 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr "" " -E, --encoding=ENCODAGE sauvegarde les données dans l'encodage\n" " ENCODAGE\n" -#: pg_dump.c:1016 +#: pg_dump.c:1053 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=MOTIF sauvegarde uniquement les schémas indiqués\n" -#: pg_dump.c:1017 +#: pg_dump.c:1054 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=MOTIF ne sauvegarde pas les schémas indiqués\n" -#: pg_dump.c:1018 +#: pg_dump.c:1055 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1513,50 +1504,50 @@ msgstr "" " -O, --no-owner ne sauvegarde pas les propriétaires des\n" " objets lors de l'utilisation du format texte\n" -#: pg_dump.c:1020 pg_dumpall.c:633 +#: pg_dump.c:1057 pg_dumpall.c:634 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr "" " -s, --schema-only sauvegarde uniquement la structure, pas les\n" " données\n" -#: pg_dump.c:1021 +#: pg_dump.c:1058 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr "" " -S, --superuser=NOM indique le nom du super-utilisateur à\n" " utiliser avec le format texte\n" -#: pg_dump.c:1022 +#: pg_dump.c:1059 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=MOTIF sauvegarde uniquement les tables indiquées\n" -#: pg_dump.c:1023 +#: pg_dump.c:1060 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=MOTIF ne sauvegarde pas les tables indiquées\n" -#: pg_dump.c:1024 pg_dumpall.c:636 +#: pg_dump.c:1061 pg_dumpall.c:637 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges ne sauvegarde pas les droits sur les objets\n" -#: pg_dump.c:1025 pg_dumpall.c:637 +#: pg_dump.c:1062 pg_dumpall.c:638 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr "" " --binary-upgrade à n'utiliser que par les outils de mise à\n" " jour seulement\n" -#: pg_dump.c:1026 pg_dumpall.c:638 +#: pg_dump.c:1063 pg_dumpall.c:639 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr "" " --column-inserts sauvegarde les données avec des commandes\n" " INSERT en précisant les noms des colonnes\n" -#: pg_dump.c:1027 pg_dumpall.c:639 +#: pg_dump.c:1064 pg_dumpall.c:640 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr "" @@ -1564,14 +1555,14 @@ msgstr "" " dollar dans le but de respecter le standard\n" " SQL en matière de guillemets\n" -#: pg_dump.c:1028 pg_dumpall.c:640 pg_restore.c:493 +#: pg_dump.c:1065 pg_dumpall.c:641 pg_restore.c:493 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr "" " --disable-triggers désactive les triggers en mode de restauration\n" " des données seules\n" -#: pg_dump.c:1029 +#: pg_dump.c:1066 #, c-format msgid "" " --enable-row-security enable row security (dump only content user has\n" @@ -1581,22 +1572,22 @@ msgstr "" " sauvegarde uniquement le contenu visible par\\n\n" " cet utilisateur)\n" -#: pg_dump.c:1031 +#: pg_dump.c:1068 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=MOTIF ne sauvegarde pas les tables indiquées\n" -#: pg_dump.c:1032 pg_dumpall.c:642 +#: pg_dump.c:1069 pg_dumpall.c:643 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=NUM surcharge la configuration par défaut de extra_float_digits\n" -#: pg_dump.c:1033 pg_dumpall.c:643 pg_restore.c:495 +#: pg_dump.c:1070 pg_dumpall.c:644 pg_restore.c:495 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists utilise IF EXISTS lors de la suppression des objets\n" -#: pg_dump.c:1034 +#: pg_dump.c:1071 #, c-format msgid "" " --include-foreign-data=PATTERN\n" @@ -1607,96 +1598,101 @@ msgstr "" " inclut les données des tables externes pour les\n" " serveurs distants correspondant au motif MOTIF\n" -#: pg_dump.c:1037 pg_dumpall.c:644 +#: pg_dump.c:1074 pg_dumpall.c:645 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr "" " --inserts sauvegarde les données avec des instructions\n" " INSERT plutôt que COPY\n" -#: pg_dump.c:1038 pg_dumpall.c:645 +#: pg_dump.c:1075 pg_dumpall.c:646 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root charger les partitions via la table racine\n" -#: pg_dump.c:1039 pg_dumpall.c:646 +#: pg_dump.c:1076 pg_dumpall.c:647 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments ne sauvegarde pas les commentaires\n" -#: pg_dump.c:1040 pg_dumpall.c:647 +#: pg_dump.c:1077 pg_dumpall.c:648 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications ne sauvegarde pas les publications\n" -#: pg_dump.c:1041 pg_dumpall.c:649 +#: pg_dump.c:1078 pg_dumpall.c:650 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr "" " --no-security-labels ne sauvegarde pas les affectations de labels de\n" " sécurité\n" -#: pg_dump.c:1042 pg_dumpall.c:650 +#: pg_dump.c:1079 pg_dumpall.c:651 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions ne sauvegarde pas les souscriptions\n" -#: pg_dump.c:1043 +#: pg_dump.c:1080 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr " --no-synchronized-snapshots n'utilise pas de snapshots synchronisés pour les jobs en parallèle\n" -#: pg_dump.c:1044 pg_dumpall.c:652 +#: pg_dump.c:1081 pg_dumpall.c:653 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr "" " --no-tablespaces ne sauvegarde pas les affectations de\n" " tablespaces\n" -#: pg_dump.c:1045 pg_dumpall.c:653 +#: pg_dump.c:1082 +#, c-format +msgid " --no-toast-compression do not dump toast compression methods\n" +msgstr " --no-toast-compression ne sauvegarde pas les méthodes de compression de TOAST\n" + +#: pg_dump.c:1083 pg_dumpall.c:654 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr "" " --no-unlogged-table-data ne sauvegarde pas les données des tables non\n" " journalisées\n" -#: pg_dump.c:1046 pg_dumpall.c:654 +#: pg_dump.c:1084 pg_dumpall.c:655 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" msgstr " --on-conflict-do-nothing ajoute ON CONFLICT DO NOTHING aux commandes INSERT\n" -#: pg_dump.c:1047 pg_dumpall.c:655 +#: pg_dump.c:1085 pg_dumpall.c:656 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers met entre guillemets tous les identifiants\n" " même s'il ne s'agit pas de mots clés\n" -#: pg_dump.c:1048 pg_dumpall.c:656 +#: pg_dump.c:1086 pg_dumpall.c:657 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=NROWS nombre de lignes par INSERT ; implique --inserts\n" -#: pg_dump.c:1049 +#: pg_dump.c:1087 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr "" " --section=SECTION sauvegarde la section indiquée (pre-data, data\n" " ou post-data)\n" -#: pg_dump.c:1050 +#: pg_dump.c:1088 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr "" " --serializable-deferrable attend jusqu'à ce que la sauvegarde puisse\n" " s'exécuter sans anomalies\n" -#: pg_dump.c:1051 +#: pg_dump.c:1089 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT utilise l'image donnée pour la sauvegarde\n" -#: pg_dump.c:1052 pg_restore.c:504 +#: pg_dump.c:1090 pg_restore.c:504 #, c-format msgid "" " --strict-names require table and/or schema include patterns to\n" @@ -1705,7 +1701,7 @@ msgstr "" " --strict-names requiert que le motifs de table et/ou schéma\n" " correspondent à au moins une entité de chaque\n" -#: pg_dump.c:1054 pg_dumpall.c:657 pg_restore.c:506 +#: pg_dump.c:1092 pg_dumpall.c:658 pg_restore.c:506 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1717,7 +1713,7 @@ msgstr "" " au lieu des commandes ALTER OWNER pour\n" " modifier les propriétaires\n" -#: pg_dump.c:1058 pg_dumpall.c:661 pg_restore.c:510 +#: pg_dump.c:1096 pg_dumpall.c:662 pg_restore.c:510 #, c-format msgid "" "\n" @@ -1726,48 +1722,48 @@ msgstr "" "\n" "Options de connexion :\n" -#: pg_dump.c:1059 +#: pg_dump.c:1097 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=NOMBASE base de données à sauvegarder\n" -#: pg_dump.c:1060 pg_dumpall.c:663 pg_restore.c:511 +#: pg_dump.c:1098 pg_dumpall.c:664 pg_restore.c:511 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=NOMHÔTE hôte du serveur de bases de données ou\n" " répertoire des sockets\n" -#: pg_dump.c:1061 pg_dumpall.c:665 pg_restore.c:512 +#: pg_dump.c:1099 pg_dumpall.c:666 pg_restore.c:512 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr "" " -p, --port=PORT numéro de port du serveur de bases de\n" " données\n" -#: pg_dump.c:1062 pg_dumpall.c:666 pg_restore.c:513 +#: pg_dump.c:1100 pg_dumpall.c:667 pg_restore.c:513 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NOM se connecter avec cet utilisateur\n" -#: pg_dump.c:1063 pg_dumpall.c:667 pg_restore.c:514 +#: pg_dump.c:1101 pg_dumpall.c:668 pg_restore.c:514 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password ne demande jamais le mot de passe\n" -#: pg_dump.c:1064 pg_dumpall.c:668 pg_restore.c:515 +#: pg_dump.c:1102 pg_dumpall.c:669 pg_restore.c:515 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password force la demande du mot de passe (par\n" " défaut)\n" -#: pg_dump.c:1065 pg_dumpall.c:669 +#: pg_dump.c:1103 pg_dumpall.c:670 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=NOMROLE exécute SET ROLE avant la sauvegarde\n" -#: pg_dump.c:1067 +#: pg_dump.c:1105 #, c-format msgid "" "\n" @@ -1780,22 +1776,22 @@ msgstr "" "d'environnement PGDATABASE est alors utilisée.\n" "\n" -#: pg_dump.c:1069 pg_dumpall.c:673 pg_restore.c:522 +#: pg_dump.c:1107 pg_dumpall.c:674 pg_restore.c:522 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Rapporter les bogues à <%s>.\n" -#: pg_dump.c:1070 pg_dumpall.c:674 pg_restore.c:523 +#: pg_dump.c:1108 pg_dumpall.c:675 pg_restore.c:523 #, c-format msgid "%s home page: <%s>\n" msgstr "page d'accueil de %s : <%s>\n" -#: pg_dump.c:1089 pg_dumpall.c:499 +#: pg_dump.c:1127 pg_dumpall.c:500 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "encodage client indiqué (« %s ») invalide" -#: pg_dump.c:1235 +#: pg_dump.c:1273 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server version.\n" @@ -1806,503 +1802,548 @@ msgstr "" "Lancez avec --no-synchronized-snapshots à la place si vous n'avez pas besoin\n" "de snapshots synchronisés." -#: pg_dump.c:1304 +#: pg_dump.c:1342 #, c-format msgid "invalid output format \"%s\" specified" msgstr "format de sortie « %s » invalide" -#: pg_dump.c:1342 +#: pg_dump.c:1380 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "aucun schéma correspondant n'a été trouvé avec le motif « %s »" -#: pg_dump.c:1389 +#: pg_dump.c:1427 +#, c-format +msgid "no matching extensions were found for pattern \"%s\"" +msgstr "aucune extension correspondante n'a été trouvée avec le motif « %s »" + +#: pg_dump.c:1474 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "aucun serveur distant correspondant n'a été trouvé avec le motif « %s »" -#: pg_dump.c:1452 +#: pg_dump.c:1537 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "aucune table correspondante n'a été trouvée avec le motif « %s »" -#: pg_dump.c:1865 +#: pg_dump.c:1960 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "sauvegarde du contenu de la table « %s.%s »" -#: pg_dump.c:1972 +#: pg_dump.c:2067 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Sauvegarde du contenu de la table « %s » échouée : échec de PQgetCopyData()." -#: pg_dump.c:1973 pg_dump.c:1983 +#: pg_dump.c:2068 pg_dump.c:2078 #, c-format msgid "Error message from server: %s" msgstr "Message d'erreur du serveur : %s" -#: pg_dump.c:1974 pg_dump.c:1984 +#: pg_dump.c:2069 pg_dump.c:2079 #, c-format msgid "The command was: %s" msgstr "La commande était : %s" -#: pg_dump.c:1982 +#: pg_dump.c:2077 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Sauvegarde du contenu de la table « %s » échouée : échec de PQgetResult()." -#: pg_dump.c:2736 +#: pg_dump.c:2837 #, c-format msgid "saving database definition" msgstr "sauvegarde de la définition de la base de données" -#: pg_dump.c:3208 +#: pg_dump.c:3309 #, c-format msgid "saving encoding = %s" msgstr "encodage de la sauvegarde = %s" -#: pg_dump.c:3233 +#: pg_dump.c:3334 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "sauvegarde de standard_conforming_strings = %s" -#: pg_dump.c:3272 +#: pg_dump.c:3373 #, c-format msgid "could not parse result of current_schemas()" msgstr "n'a pas pu analyser le résultat de current_schema()" -#: pg_dump.c:3291 +#: pg_dump.c:3392 #, c-format msgid "saving search_path = %s" msgstr "sauvegarde de search_path = %s" -#: pg_dump.c:3331 +#: pg_dump.c:3445 +#, c-format +msgid "saving default_toast_compression = %s" +msgstr "sauvegarde de default_toast_compression = %s" + +#: pg_dump.c:3484 #, c-format msgid "reading large objects" msgstr "lecture des « Large Objects »" -#: pg_dump.c:3513 +#: pg_dump.c:3666 #, c-format msgid "saving large objects" msgstr "sauvegarde des « Large Objects »" -#: pg_dump.c:3559 +#: pg_dump.c:3712 #, c-format msgid "error reading large object %u: %s" msgstr "erreur lors de la lecture du « Large Object » %u : %s" -#: pg_dump.c:3611 +#: pg_dump.c:3764 #, c-format msgid "reading row security enabled for table \"%s.%s\"" msgstr "lecture de l'activation de la sécurité niveau ligne pour la table « %s.%s »" -#: pg_dump.c:3642 +#: pg_dump.c:3795 #, c-format msgid "reading policies for table \"%s.%s\"" msgstr "lecture des politiques pour la table « %s.%s »" -#: pg_dump.c:3794 +#: pg_dump.c:3947 #, c-format msgid "unexpected policy command type: %c" msgstr "type de commande inattendu pour la politique : %c" -#: pg_dump.c:3945 +#: pg_dump.c:4101 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "le propriétaire de la publication « %s » semble être invalide" -#: pg_dump.c:4091 -#, c-format -msgid "reading publication membership for table \"%s.%s\"" -msgstr "lecture des appartenances aux publications pour la table « %s.%s »" - -#: pg_dump.c:4234 +#: pg_dump.c:4393 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "les souscriptions ne sont pas sauvegardées parce que l'utilisateur courant n'est pas un superutilisateur" -#: pg_dump.c:4288 +#: pg_dump.c:4464 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "le propriétaire de la souscription « %s » semble être invalide" -#: pg_dump.c:4332 +#: pg_dump.c:4507 #, c-format msgid "could not parse subpublications array" msgstr "n'a pas pu analyser le tableau de sous-publications" -#: pg_dump.c:4654 +#: pg_dump.c:4865 #, c-format msgid "could not find parent extension for %s %s" msgstr "n'a pas pu trouver l'extension parent pour %s %s" -#: pg_dump.c:4786 +#: pg_dump.c:4997 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "le propriétaire du schéma « %s » semble être invalide" -#: pg_dump.c:4809 +#: pg_dump.c:5020 #, c-format msgid "schema with OID %u does not exist" msgstr "le schéma d'OID %u n'existe pas" -#: pg_dump.c:5134 +#: pg_dump.c:5349 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "le propriétaire du type de données « %s » semble être invalide" -#: pg_dump.c:5219 +#: pg_dump.c:5433 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "le propriétaire de l'opérateur « %s » semble être invalide" -#: pg_dump.c:5521 +#: pg_dump.c:5732 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "le propriétaire de la classe d'opérateur « %s » semble être invalide" -#: pg_dump.c:5605 +#: pg_dump.c:5815 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "le propriétaire de la famille d'opérateur « %s » semble être invalide" -#: pg_dump.c:5774 +#: pg_dump.c:5983 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "le propriétaire de la fonction d'agrégat « %s » semble être invalide" -#: pg_dump.c:6034 +#: pg_dump.c:6242 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "le propriétaire de la fonction « %s » semble être invalide" -#: pg_dump.c:6862 +#: pg_dump.c:7069 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "le propriétaire de la table « %s » semble être invalide" -#: pg_dump.c:6904 pg_dump.c:17330 +#: pg_dump.c:7111 pg_dump.c:17573 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "vérification échouée, OID %u de la table parent de l'OID %u de la séquence introuvable" -#: pg_dump.c:7046 +#: pg_dump.c:7252 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "lecture des index de la table « %s.%s »" -#: pg_dump.c:7458 +#: pg_dump.c:7737 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "lecture des contraintes de clés étrangères pour la table « %s.%s »" -#: pg_dump.c:7713 +#: pg_dump.c:8016 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "vérification échouée, OID %u de la table parent de l'OID %u de l'entrée de pg_rewrite introuvable" -#: pg_dump.c:7796 +#: pg_dump.c:8099 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "lecture des triggers pour la table « %s.%s »" -#: pg_dump.c:7929 +#: pg_dump.c:8232 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "la requête a produit une réference de nom de table null pour le trigger de la clé étrangère « %s » sur la table « %s » (OID de la table : %u)" -#: pg_dump.c:8484 +#: pg_dump.c:8782 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "recherche des colonnes et types de la table « %s.%s »" -#: pg_dump.c:8620 +#: pg_dump.c:8906 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "numérotation des colonnes invalide pour la table « %s »" -#: pg_dump.c:8657 +#: pg_dump.c:8945 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "recherche des expressions par défaut de la table « %s.%s »" -#: pg_dump.c:8679 +#: pg_dump.c:8967 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "valeur adnum %d invalide pour la table « %s »" -#: pg_dump.c:8744 +#: pg_dump.c:9060 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "recherche des contraintes de vérification pour la table « %s.%s »" -#: pg_dump.c:8793 +#: pg_dump.c:9109 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "%d contrainte de vérification attendue pour la table « %s » mais %d trouvée" msgstr[1] "%d contraintes de vérification attendues pour la table « %s » mais %d trouvée" -#: pg_dump.c:8797 +#: pg_dump.c:9113 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Les catalogues système sont peut-être corrompus.)" -#: pg_dump.c:10383 +#: pg_dump.c:10698 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "la colonne typtype du type de données « %s » semble être invalide" -#: pg_dump.c:11737 +#: pg_dump.c:12050 #, c-format msgid "bogus value in proargmodes array" msgstr "valeur erronée dans le tableau proargmodes" -#: pg_dump.c:12109 +#: pg_dump.c:12357 #, c-format msgid "could not parse proallargtypes array" msgstr "n'a pas pu analyser le tableau proallargtypes" -#: pg_dump.c:12125 +#: pg_dump.c:12373 #, c-format msgid "could not parse proargmodes array" msgstr "n'a pas pu analyser le tableau proargmodes" -#: pg_dump.c:12139 +#: pg_dump.c:12387 #, c-format msgid "could not parse proargnames array" msgstr "n'a pas pu analyser le tableau proargnames" -#: pg_dump.c:12150 +#: pg_dump.c:12397 #, c-format msgid "could not parse proconfig array" msgstr "n'a pas pu analyser le tableau proconfig" -#: pg_dump.c:12230 +#: pg_dump.c:12477 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "valeur provolatile non reconnue pour la fonction « %s »" -#: pg_dump.c:12280 pg_dump.c:14338 +#: pg_dump.c:12527 pg_dump.c:14458 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "valeur proparallel non reconnue pour la fonction « %s »" -#: pg_dump.c:12419 pg_dump.c:12528 pg_dump.c:12535 +#: pg_dump.c:12666 pg_dump.c:12775 pg_dump.c:12782 #, c-format msgid "could not find function definition for function with OID %u" msgstr "n'a pas pu trouver la définition de la fonction d'OID %u" -#: pg_dump.c:12458 +#: pg_dump.c:12705 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "valeur erronée dans le champ pg_cast.castfunc ou pg_cast.castmethod" -#: pg_dump.c:12461 +#: pg_dump.c:12708 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "valeur erronée dans pg_cast.castmethod" -#: pg_dump.c:12554 +#: pg_dump.c:12801 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "définition de transformation invalide, au moins un de trffromsql et trftosql ne doit pas valoir 0" -#: pg_dump.c:12571 +#: pg_dump.c:12818 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "valeur erronée dans pg_transform.trffromsql" -#: pg_dump.c:12592 +#: pg_dump.c:12839 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "valeur erronée dans pg_transform.trftosql" -#: pg_dump.c:12908 +#: pg_dump.c:12991 +#, c-format +msgid "postfix operators are not supported anymore (operator \"%s\")" +msgstr "les opérateurs postfixes ne sont plus supportés (opérateur « %s »)" + +#: pg_dump.c:13161 #, c-format msgid "could not find operator with OID %s" msgstr "n'a pas pu trouver l'opérateur d'OID %s" -#: pg_dump.c:12976 +#: pg_dump.c:13229 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "type « %c » invalide de la méthode d'accès « %s »" -#: pg_dump.c:13730 +#: pg_dump.c:13981 #, c-format msgid "unrecognized collation provider: %s" msgstr "fournisseur de collationnement non reconnu : %s" -#: pg_dump.c:14202 -#, c-format -msgid "aggregate function %s could not be dumped correctly for this database version; ignored" -msgstr "la fonction d'aggrégat %s n'a pas pu être sauvegardée correctement avec cette version de la base de données ; ignorée" - -#: pg_dump.c:14257 +#: pg_dump.c:14377 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "valeur non reconnue de aggfinalmodify pour l'agrégat « %s »" -#: pg_dump.c:14313 +#: pg_dump.c:14433 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "valeur non reconnue de aggmfinalmodify pour l'agrégat « %s »" -#: pg_dump.c:15035 +#: pg_dump.c:15155 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "type d'objet inconnu dans les droits par défaut : %d" -#: pg_dump.c:15053 +#: pg_dump.c:15173 #, c-format msgid "could not parse default ACL list (%s)" msgstr "n'a pas pu analyser la liste ACL par défaut (%s)" -#: pg_dump.c:15133 +#: pg_dump.c:15258 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "n'a pas pu analyser la liste ACL GRANT initiale (%s) ou la liste ACL REVOKE initiale (%s) de l'objet « %s » (%s)" -#: pg_dump.c:15141 +#: pg_dump.c:15266 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "n'a pas pu analyser la liste ACL GRANT (%s) ou REVOKE (%s) de l'objet « %s » (%s)" -#: pg_dump.c:15638 +#: pg_dump.c:15781 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "la requête permettant d'obtenir la définition de la vue « %s » n'a renvoyé aucune donnée" -#: pg_dump.c:15641 +#: pg_dump.c:15784 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "la requête permettant d'obtenir la définition de la vue « %s » a renvoyé plusieurs définitions" -#: pg_dump.c:15648 +#: pg_dump.c:15791 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "la définition de la vue « %s » semble être vide (longueur nulle)" -#: pg_dump.c:15730 +#: pg_dump.c:15875 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS n'est plus supporté (table « %s »)" -#: pg_dump.c:16210 -#, c-format -msgid "invalid number of parents %d for table \"%s\"" -msgstr "nombre de parents invalide (%d) pour la table « %s »" - -#: pg_dump.c:16533 +#: pg_dump.c:16742 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "numéro de colonne %d invalide pour la table « %s »" -#: pg_dump.c:16818 +#: pg_dump.c:16820 +#, c-format +msgid "could not parse index statistic columns" +msgstr "n'a pas pu analyser les colonnes statistiques de l'index" + +#: pg_dump.c:16822 +#, c-format +msgid "could not parse index statistic values" +msgstr "n'a pas pu analyser les valeurs statistiques de l'index" + +#: pg_dump.c:16824 +#, c-format +msgid "mismatched number of columns and values for index stats" +msgstr "nombre de colonnes et de valeurs différentes pour les statistiques des index" + +#: pg_dump.c:17058 #, c-format msgid "missing index for constraint \"%s\"" msgstr "index manquant pour la contrainte « %s »" -#: pg_dump.c:17043 +#: pg_dump.c:17283 #, c-format msgid "unrecognized constraint type: %c" msgstr "type de contrainte inconnu : %c" -#: pg_dump.c:17175 pg_dump.c:17395 +#: pg_dump.c:17415 pg_dump.c:17638 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" msgstr[0] "la requête permettant d'obtenir les données de la séquence « %s » a renvoyé %d ligne (une seule attendue)" msgstr[1] "la requête permettant d'obtenir les données de la séquence « %s » a renvoyé %d ligne (une seule attendue)" -#: pg_dump.c:17209 +#: pg_dump.c:17449 #, c-format msgid "unrecognized sequence type: %s" msgstr "type de séquence non reconnu : « %s »" -#: pg_dump.c:17493 +#: pg_dump.c:17736 #, c-format msgid "unexpected tgtype value: %d" msgstr "valeur tgtype inattendue : %d" -#: pg_dump.c:17567 +#: pg_dump.c:17810 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "chaîne argument invalide (%s) pour le trigger « %s » sur la table « %s »" -#: pg_dump.c:17803 +#: pg_dump.c:18046 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "la requête permettant d'obtenir la règle « %s » associée à la table « %s » a échoué : mauvais nombre de lignes renvoyées" -#: pg_dump.c:17965 +#: pg_dump.c:18208 #, c-format msgid "could not find referenced extension %u" msgstr "n'a pas pu trouver l'extension référencée %u" -#: pg_dump.c:18177 +#: pg_dump.c:18299 +#, c-format +msgid "could not parse extension configuration array" +msgstr "n'a pas pu analyser le tableau de configuration des extensions" + +#: pg_dump.c:18301 +#, c-format +msgid "could not parse extension condition array" +msgstr "n'a pas pu analyser le tableau de condition de l'extension" + +#: pg_dump.c:18303 +#, c-format +msgid "mismatched number of configurations and conditions for extension" +msgstr "nombre différent de configurations et de conditions pour l'extension" + +#: pg_dump.c:18435 #, c-format msgid "reading dependency data" msgstr "lecture des données de dépendance" -#: pg_dump.c:18270 +#: pg_dump.c:18528 #, c-format msgid "no referencing object %u %u" msgstr "pas d'objet référant %u %u" -#: pg_dump.c:18281 +#: pg_dump.c:18539 #, c-format msgid "no referenced object %u %u" msgstr "pas d'objet référencé %u %u" -#: pg_dump.c:18654 +#: pg_dump.c:18942 +#, c-format +msgid "could not parse index collation name array" +msgstr "n'a pas pu analyser le tableau des noms de collation de l'index" + +#: pg_dump.c:18946 +#, c-format +msgid "could not parse index collation version array" +msgstr "n'a pas pu analyser le tableau des versions de collation de l'index" + +#: pg_dump.c:18950 +#, c-format +msgid "mismatched number of collation names and versions for index" +msgstr "nombre différent de noms et versions de collation pour l'index" + +#: pg_dump.c:18989 #, c-format msgid "could not parse reloptions array" msgstr "n'a pas pu analyser le tableau reloptions" -#: pg_dump_sort.c:360 +#: pg_dump_sort.c:411 #, c-format msgid "invalid dumpId %d" msgstr "dumpId %d invalide" -#: pg_dump_sort.c:366 +#: pg_dump_sort.c:417 #, c-format msgid "invalid dependency %d" msgstr "dépendance invalide %d" -#: pg_dump_sort.c:599 +#: pg_dump_sort.c:650 #, c-format msgid "could not identify dependency loop" msgstr "n'a pas pu identifier la boucle de dépendance" -#: pg_dump_sort.c:1170 +#: pg_dump_sort.c:1221 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" msgstr[0] "NOTE : il existe des constraintes de clés étrangères circulaires sur cette table :" msgstr[1] "NOTE : il existe des constraintes de clés étrangères circulaires sur ces tables :" -#: pg_dump_sort.c:1174 pg_dump_sort.c:1194 +#: pg_dump_sort.c:1225 pg_dump_sort.c:1245 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1175 +#: pg_dump_sort.c:1226 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." msgstr "Il est possible de restaurer la sauvegarde sans utiliser --disable-triggers ou sans supprimer temporairement les constraintes." -#: pg_dump_sort.c:1176 +#: pg_dump_sort.c:1227 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." msgstr "Considérez l'utilisation d'une sauvegarde complète au lieu d'une sauvegarde des données seulement pour éviter ce problème." -#: pg_dump_sort.c:1188 +#: pg_dump_sort.c:1239 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "n'a pas pu résoudre la boucle de dépendances parmi ces éléments :" -#: pg_dumpall.c:199 +#: pg_dumpall.c:200 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -2313,7 +2354,7 @@ msgstr "" "dans le même répertoire que « %s ».\n" "Vérifiez votre installation." -#: pg_dumpall.c:204 +#: pg_dumpall.c:205 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -2324,32 +2365,32 @@ msgstr "" "mais n'est pas de la même version que %s.\n" "Vérifiez votre installation." -#: pg_dumpall.c:356 +#: pg_dumpall.c:357 #, c-format msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" msgstr "l'option --exclude-database ne peut pas être utilisée avec -g/--globals-only, -r/--roles-only ou -t/--tablespaces-only" -#: pg_dumpall.c:365 +#: pg_dumpall.c:366 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "les options « -g/--globals-only » et « -r/--roles-only » ne peuvent pas être utilisées ensemble" -#: pg_dumpall.c:373 +#: pg_dumpall.c:374 #, c-format msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "les options « -g/--globals-only » et « -t/--tablespaces-only » ne peuvent pas être utilisées ensemble" -#: pg_dumpall.c:387 +#: pg_dumpall.c:388 #, c-format msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "les options « -r/--roles-only » et « -t/--tablespaces-only » ne peuvent pas être utilisées ensemble" -#: pg_dumpall.c:448 pg_dumpall.c:1754 +#: pg_dumpall.c:449 pg_dumpall.c:1751 #, c-format msgid "could not connect to database \"%s\"" msgstr "n'a pas pu se connecter à la base de données « %s »" -#: pg_dumpall.c:462 +#: pg_dumpall.c:463 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" @@ -2358,7 +2399,7 @@ msgstr "" "n'a pas pu se connecter aux bases « postgres » et « template1 ».\n" "Merci de préciser une autre base de données." -#: pg_dumpall.c:616 +#: pg_dumpall.c:617 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2368,79 +2409,79 @@ msgstr "" "commandes SQL.\n" "\n" -#: pg_dumpall.c:618 +#: pg_dumpall.c:619 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" -#: pg_dumpall.c:621 +#: pg_dumpall.c:622 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=NOMFICHIER nom du fichier de sortie\n" -#: pg_dumpall.c:628 +#: pg_dumpall.c:629 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr "" " -c, --clean nettoie (supprime) les bases de données avant de\n" " les créer\n" -#: pg_dumpall.c:630 +#: pg_dumpall.c:631 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr "" " -g, --globals-only sauvegarde uniquement les objets système, pas\n" " le contenu des bases de données\n" -#: pg_dumpall.c:631 pg_restore.c:485 +#: pg_dumpall.c:632 pg_restore.c:485 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr "" " -O, --no-owner omet la restauration des propriétaires des\n" " objets\n" -#: pg_dumpall.c:632 +#: pg_dumpall.c:633 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr "" " -r, --roles-only sauvegarde uniquement les rôles, pas les bases\n" " de données ni les tablespaces\n" -#: pg_dumpall.c:634 +#: pg_dumpall.c:635 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr "" " -S, --superuser=NOM indique le nom du super-utilisateur à utiliser\n" " avec le format texte\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:636 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr "" " -t, --tablespaces-only sauvegarde uniquement les tablespaces, pas les\n" " bases de données ni les rôles\n" -#: pg_dumpall.c:641 +#: pg_dumpall.c:642 #, c-format msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" msgstr " --exclude-database=MOTIF exclut les bases de données dont le nom correspond au motif\n" -#: pg_dumpall.c:648 +#: pg_dumpall.c:649 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords ne sauvegarde pas les mots de passe des rôles\n" -#: pg_dumpall.c:662 +#: pg_dumpall.c:663 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=CHAINE_CONN connexion à l'aide de la chaîne de connexion\n" -#: pg_dumpall.c:664 +#: pg_dumpall.c:665 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=NOM_BASE indique une autre base par défaut\n" -#: pg_dumpall.c:671 +#: pg_dumpall.c:672 #, c-format msgid "" "\n" @@ -2453,57 +2494,52 @@ msgstr "" "standard.\n" "\n" -#: pg_dumpall.c:877 +#: pg_dumpall.c:878 #, c-format msgid "role name starting with \"pg_\" skipped (%s)" msgstr "nom de rôle commençant par « pg_ » ignoré (« %s »)" -#: pg_dumpall.c:1278 +#: pg_dumpall.c:1279 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "n'a pas pu analyser la liste d'ACL (%s) pour le tablespace « %s »" -#: pg_dumpall.c:1495 +#: pg_dumpall.c:1496 #, c-format msgid "excluding database \"%s\"" msgstr "exclusion de la base de données « %s »" -#: pg_dumpall.c:1499 +#: pg_dumpall.c:1500 #, c-format msgid "dumping database \"%s\"" msgstr "sauvegarde de la base de données « %s »" -#: pg_dumpall.c:1531 +#: pg_dumpall.c:1532 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "échec de pg_dump sur la base de données « %s », quitte" -#: pg_dumpall.c:1540 +#: pg_dumpall.c:1541 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "n'a pas pu ré-ouvrir le fichier de sortie « %s » : %m" -#: pg_dumpall.c:1584 +#: pg_dumpall.c:1585 #, c-format msgid "running \"%s\"" msgstr "exécute « %s »" -#: pg_dumpall.c:1775 -#, c-format -msgid "could not connect to database \"%s\": %s" -msgstr "n'a pas pu se connecter à la base de données « %s » : %s" - -#: pg_dumpall.c:1805 +#: pg_dumpall.c:1800 #, c-format msgid "could not get server version" msgstr "n'a pas pu obtenir la version du serveur" -#: pg_dumpall.c:1811 +#: pg_dumpall.c:1806 #, c-format msgid "could not parse server version \"%s\"" msgstr "n'a pas pu analyser la version du serveur « %s »" -#: pg_dumpall.c:1883 pg_dumpall.c:1906 +#: pg_dumpall.c:1878 pg_dumpall.c:1901 #, c-format msgid "executing %s" msgstr "exécution %s" @@ -2772,256 +2808,241 @@ msgstr "" "utilisée.\n" "\n" -#~ msgid "Report bugs to .\n" -#~ msgstr "Rapporter les bogues à .\n" - -#~ msgid "reading extended statistics for table \"%s.%s\"\n" -#~ msgstr "lecture des statistiques étendues pour la table « %s.%s »\n" - -#~ msgid "worker is terminating\n" -#~ msgstr "le worker est en cours d'arrêt\n" +#~ msgid "could not write to large object (result: %lu, expected: %lu)" +#~ msgstr "n'a pas pu écrire le « Large Object » (résultat : %lu, attendu : %lu)" -#~ msgid "could not get relation name for OID %u: %s\n" -#~ msgstr "n'a pas pu obtenir le nom de la relation pour l'OID %u: %s\n" +#~ msgid "reconnection to database \"%s\" failed: %s" +#~ msgstr "reconnexion à la base de données « %s » échouée : %s" -#~ msgid "unrecognized command on communication channel: %s\n" -#~ msgstr "commande inconnue sur le canal de communucation: %s\n" +#~ msgid "connection to database \"%s\" failed: %s" +#~ msgstr "la connexion à la base de données « %s » a échoué : %s" -#~ msgid "terminated by user\n" -#~ msgstr "terminé par l'utilisateur\n" +#~ msgid "LOCK TABLE failed for \"%s\": %s" +#~ msgstr "LOCK TABLE échoué pour la table « %s » : %s" -#~ msgid "error in ListenToWorkers(): %s\n" -#~ msgstr "erreur dans ListenToWorkers(): %s\n" +#~ msgid "reading publication membership for table \"%s.%s\"" +#~ msgstr "lecture des appartenances aux publications pour la table « %s.%s »" -#~ msgid "archive member too large for tar format\n" -#~ msgstr "membre de l'archive trop volumineux pour le format tar\n" +#~ msgid "aggregate function %s could not be dumped correctly for this database version; ignored" +#~ msgstr "la fonction d'aggrégat %s n'a pas pu être sauvegardée correctement avec cette version de la base de données ; ignorée" -#~ msgid "could not open output file \"%s\" for writing\n" -#~ msgstr "n'a pas pu ouvrir le fichier de sauvegarde « %s » en écriture\n" +#~ msgid "could not connect to database \"%s\": %s" +#~ msgstr "n'a pas pu se connecter à la base de données « %s » : %s" -#~ msgid "could not write to custom output routine\n" -#~ msgstr "n'a pas pu écrire vers la routine de sauvegarde personnalisée\n" +#~ msgid "connecting to database \"%s\" as user \"%s\"" +#~ msgstr "connexion à la base de données « %s » en tant qu'utilisateur « %s »" -#~ msgid "unexpected end of file\n" -#~ msgstr "fin de fichier inattendu\n" +#~ msgid "could not reconnect to database" +#~ msgstr "n'a pas pu se reconnecter à la base de données" -#~ msgid "could not write byte: %s\n" -#~ msgstr "n'a pas pu écrire un octet : %s\n" +#~ msgid "could not reconnect to database: %s" +#~ msgstr "n'a pas pu se reconnecter à la base de données : %s" -#~ msgid "could not write byte\n" -#~ msgstr "n'a pas pu écrire l'octet\n" +#~ msgid "connection needs password" +#~ msgstr "la connexion nécessite un mot de passe" -#~ msgid "could not write null block at end of tar archive\n" -#~ msgstr "n'a pas pu écrire le bloc nul à la fin de l'archive tar\n" +#~ msgid "internal error -- neither th nor fh specified in _tarReadRaw()" +#~ msgstr "erreur interne -- ni th ni fh ne sont précisés dans _tarReadRaw()" -#~ msgid "could not output padding at end of tar member\n" -#~ msgstr "n'a pas pu remplir la fin du membre de tar\n" +#~ msgid "" +#~ "The program \"pg_dump\" is needed by %s but was not found in the\n" +#~ "same directory as \"%s\".\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Le programme « pg_dump » est nécessaire à %s mais n'a pas été trouvé dans le\n" +#~ "même répertoire que « %s ».\n" +#~ "Vérifiez votre installation." -#~ msgid "mismatch in actual vs. predicted file position (%s vs. %s)\n" +#~ msgid "" +#~ "The program \"pg_dump\" was found by \"%s\"\n" +#~ "but was not the same version as %s.\n" +#~ "Check your installation." #~ msgstr "" -#~ "pas de correspondance entre la position réelle et celle prévue du fichier\n" -#~ "(%s vs. %s)\n" +#~ "Le programme « pg_dump » a été trouvé par « %s »\n" +#~ "mais n'a pas la même version que %s.\n" +#~ "Vérifiez votre installation." -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide puis quitte\n" +#~ msgid "could not identify current directory: %s" +#~ msgstr "n'a pas pu identifier le répertoire courant : %s" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version puis quitte\n" +#~ msgid "could not change directory to \"%s\": %s" +#~ msgstr "n'a pas pu changer le répertoire par « %s » : %s" -#~ msgid "*** aborted because of error\n" -#~ msgstr "*** interrompu du fait d'erreurs\n" +#~ msgid "could not read symbolic link \"%s\"" +#~ msgstr "n'a pas pu lire le lien symbolique « %s »" -#~ msgid "missing pg_database entry for database \"%s\"\n" -#~ msgstr "entrée manquante dans pg_database pour la base de données « %s »\n" +#~ msgid "pclose failed: %s" +#~ msgstr "échec de pclose : %s" -#~ msgid "query returned more than one (%d) pg_database entry for database \"%s\"\n" -#~ msgstr "" -#~ "la requête a renvoyé plusieurs (%d) entrées pg_database pour la base de\n" -#~ "données « %s »\n" +#~ msgid "child process was terminated by signal %s" +#~ msgstr "le processus fils a été terminé par le signal %s" -#~ msgid "dumpDatabase(): could not find pg_largeobject.relfrozenxid\n" -#~ msgstr "dumpDatabase() : n'a pas pu trouver pg_largeobject.relfrozenxid\n" +#~ msgid "child process was terminated by signal %d" +#~ msgstr "le processus fils a été terminé par le signal %d" -#~ msgid "dumpDatabase(): could not find pg_largeobject_metadata.relfrozenxid\n" -#~ msgstr "dumpDatabase() : n'a pas pu trouver pg_largeobject_metadata.relfrozenxid\n" +#~ msgid "compress_io" +#~ msgstr "compression_io" -#~ msgid "query returned %d foreign server entry for foreign table \"%s\"\n" -#~ msgid_plural "query returned %d foreign server entries for foreign table \"%s\"\n" -#~ msgstr[0] "la requête a renvoyé %d entrée de serveur distant pour la table distante « %s »\n" -#~ msgstr[1] "la requête a renvoyé %d entrées de serveurs distants pour la table distante « %s »\n" +#~ msgid "parallel archiver" +#~ msgstr "archiveur en parallèle" -#~ msgid "missing pg_database entry for this database\n" -#~ msgstr "entrée pg_database manquante pour cette base de données\n" +#~ msgid "select() failed: %s\n" +#~ msgstr "échec de select() : %s\n" -#~ msgid "found more than one pg_database entry for this database\n" -#~ msgstr "a trouvé plusieurs entrées dans pg_database pour cette base de données\n" +#~ msgid "archiver" +#~ msgstr "archiveur" -#~ msgid "could not find entry for pg_indexes in pg_class\n" -#~ msgstr "n'a pas pu trouver l'entrée de pg_indexes dans pg_class\n" +#~ msgid "-C and -1 are incompatible options\n" +#~ msgstr "-C et -1 sont des options incompatibles\n" -#~ msgid "found more than one entry for pg_indexes in pg_class\n" -#~ msgstr "a trouvé plusieurs entrées pour pg_indexes dans la table pg_class\n" +#~ msgid "attempting to ascertain archive format\n" +#~ msgstr "tentative d'identification du format de l'archive\n" -#~ msgid "SQL command failed\n" -#~ msgstr "la commande SQL a échoué\n" +#~ msgid "allocating AH for %s, format %d\n" +#~ msgstr "allocation d'AH pour %s, format %d\n" -#~ msgid "file archiver" -#~ msgstr "programme d'archivage de fichiers" +#~ msgid "read TOC entry %d (ID %d) for %s %s\n" +#~ msgstr "lecture de l'entrée %d de la TOC (ID %d) pour %s %s\n" -#~ msgid "" -#~ "WARNING:\n" -#~ " This format is for demonstration purposes; it is not intended for\n" -#~ " normal use. Files will be written in the current working directory.\n" -#~ msgstr "" -#~ "ATTENTION :\n" -#~ " Ce format est présent dans un but de démonstration ; il n'est pas prévu\n" -#~ " pour une utilisation normale. Les fichiers seront écrits dans le\n" -#~ " répertoire actuel.\n" +#~ msgid "could not set default_with_oids: %s" +#~ msgstr "n'a pas pu configurer default_with_oids : %s" -#~ msgid "could not close data file after reading\n" -#~ msgstr "n'a pas pu fermer le fichier de données après lecture\n" +#~ msgid "entering restore_toc_entries_prefork\n" +#~ msgstr "entrée dans restore_toc_entries_prefork\n" -#~ msgid "could not open large object TOC for input: %s\n" -#~ msgstr "n'a pas pu ouvrir la TOC du « Large Object » en entrée : %s\n" +#~ msgid "entering restore_toc_entries_parallel\n" +#~ msgstr "entrée dans restore_toc_entries_parallel\n" -#~ msgid "could not open large object TOC for output: %s\n" -#~ msgstr "n'a pas pu ouvrir la TOC du « Large Object » en sortie : %s\n" +#~ msgid "entering restore_toc_entries_postfork\n" +#~ msgstr "entrée dans restore_toc_entries_prefork\n" -#~ msgid "could not close large object file\n" -#~ msgstr "n'a pas pu fermer le fichier du « Large Object »\n" +#~ msgid "no item ready\n" +#~ msgstr "aucun élément prêt\n" -#~ msgid "restoring large object OID %u\n" -#~ msgstr "restauration du « Large Object » d'OID %u\n" +#~ msgid "transferring dependency %d -> %d to %d\n" +#~ msgstr "transfert de la dépendance %d -> %d vers %d\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide et quitte\n" +#~ msgid "reducing dependencies for %d\n" +#~ msgstr "réduction des dépendances pour %d\n" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version et quitte\n" +#~ msgid "custom archiver" +#~ msgstr "programme d'archivage personnalisé" -#~ msgid " -c, --clean clean (drop) database objects before recreating\n" -#~ msgstr "" -#~ " -c, --clean nettoie/supprime les bases de données avant de\n" -#~ " les créer\n" +#~ msgid "archiver (db)" +#~ msgstr "programme d'archivage (db)" -#~ msgid " -O, --no-owner skip restoration of object ownership\n" -#~ msgstr "" -#~ " -O, --no-owner omettre la restauration des possessions des\n" -#~ " objets\n" +#~ msgid "failed to reconnect to database\n" +#~ msgstr "la reconnexion à la base de données a échoué\n" -#~ msgid " --disable-triggers disable triggers during data-only restore\n" -#~ msgstr "" -#~ " --disable-triggers désactiver les déclencheurs lors de la\n" -#~ " restauration des données seules\n" +#~ msgid "failed to connect to database\n" +#~ msgstr "n'a pas pu se connecter à la base de données\n" -#~ msgid "" -#~ " --use-set-session-authorization\n" -#~ " use SET SESSION AUTHORIZATION commands instead of\n" -#~ " ALTER OWNER commands to set ownership\n" -#~ msgstr "" -#~ " --use-set-session-authorization\n" -#~ " utilise les commandes SET SESSION AUTHORIZATION\n" -#~ " au lieu des commandes ALTER OWNER pour les\n" -#~ " modifier les propriétaires\n" +#~ msgid "query was: %s\n" +#~ msgstr "la requête était : %s\n" -#~ msgid "%s: out of memory\n" -#~ msgstr "%s : mémoire épuisée\n" +#~ msgid "query returned %d row instead of one: %s\n" +#~ msgid_plural "query returned %d rows instead of one: %s\n" +#~ msgstr[0] "la requête a renvoyé %d ligne au lieu d'une seule : %s\n" +#~ msgstr[1] "la requête a renvoyé %d lignes au lieu d'une seule : %s\n" -#~ msgid "cannot reopen stdin\n" -#~ msgstr "ne peut pas rouvrir stdin\n" +#~ msgid "directory archiver" +#~ msgstr "archiveur répertoire" -#~ msgid "cannot reopen non-seekable file\n" -#~ msgstr "ne peut pas rouvrir le fichier non cherchable\n" +#~ msgid "could not read directory \"%s\": %s\n" +#~ msgstr "n'a pas pu lire le répertoire « %s » : %s\n" -#~ msgid "%s: invalid -X option -- %s\n" -#~ msgstr "%s : option -X invalide -- %s\n" +#~ msgid "could not close directory \"%s\": %s\n" +#~ msgstr "n'a pas pu fermer le répertoire « %s » : %s\n" -#~ msgid "query returned no rows: %s\n" -#~ msgstr "la requête n'a renvoyé aucune ligne : %s\n" +#~ msgid "could not create directory \"%s\": %s\n" +#~ msgstr "n'a pas pu créer le répertoire « %s » : %s\n" -#~ msgid "dumping a specific TOC data block out of order is not supported without ID on this input stream (fseek required)\n" -#~ msgstr "" -#~ "la sauvegarde d'un bloc de données spécifique du TOC dans le désordre n'est\n" -#~ "pas supporté sans identifiant sur ce flux d'entrée (fseek requis)\n" +#~ msgid "tar archiver" +#~ msgstr "archiveur tar" -#~ msgid "dumpBlobs(): could not open large object %u: %s" -#~ msgstr "dumpBlobs() : n'a pas pu ouvrir le « Large Object » %u : %s" +#~ msgid "moving from position %s to next member at file position %s\n" +#~ msgstr "déplacement de la position %s vers le prochain membre à la position %s du fichier\n" -#~ msgid "saving large object properties\n" -#~ msgstr "sauvegarde des propriétés des « Large Objects »\n" +#~ msgid "now at file position %s\n" +#~ msgstr "maintenant en position %s du fichier\n" -#~ msgid "could not parse ACL (%s) for large object %u" -#~ msgstr "n'a pas pu analyser la liste ACL (%s) du « Large Object » %u" +#~ msgid "skipping tar member %s\n" +#~ msgstr "omission du membre %s du tar\n" -#~ msgid "compression support is disabled in this format\n" -#~ msgstr "le support de la compression est désactivé avec ce format\n" +#~ msgid "TOC Entry %s at %s (length %s, checksum %d)\n" +#~ msgstr "entrée TOC %s à %s (longueur %s, somme de contrôle %d)\n" -#~ msgid "no label definitions found for enum ID %u\n" -#~ msgstr "aucune définition de label trouvée pour l'ID enum %u\n" +#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" +#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" -#~ msgid "query returned %d rows instead of one: %s\n" -#~ msgstr "la requête a renvoyé %d lignes au lieu d'une seule : %s\n" +#~ msgid "options --inserts/--column-inserts and -o/--oids cannot be used together\n" +#~ msgstr "" +#~ "les options « --inserts/--column-inserts » et « -o/--oids » ne\n" +#~ "peuvent pas être utilisées conjointement\n" -#~ msgid "read %lu byte into lookahead buffer\n" -#~ msgid_plural "read %lu bytes into lookahead buffer\n" -#~ msgstr[0] "lecture de %lu octet dans le tampon prévisionnel\n" -#~ msgstr[1] "lecture de %lu octets dans le tampon prévisionnel\n" +#~ msgid "(The INSERT command cannot set OIDs.)\n" +#~ msgstr "(La commande INSERT ne peut pas positionner les OID.)\n" -#~ msgid "requested %d byte, got %d from lookahead and %d from file\n" -#~ msgid_plural "requested %d bytes, got %d from lookahead and %d from file\n" -#~ msgstr[0] "%d octet requis, %d obtenu de « lookahead » et %d du fichier\n" -#~ msgstr[1] "%d octets requis, %d obtenus de « lookahead » et %d du fichier\n" +#~ msgid " -o, --oids include OIDs in dump\n" +#~ msgstr " -o, --oids inclut les OID dans la sauvegarde\n" -#~ msgid "invalid COPY statement -- could not find \"from stdin\" in string \"%s\" starting at position %lu\n" -#~ msgstr "" -#~ "instruction COPY invalide -- n'a pas pu trouver « from stdin » dans la\n" -#~ "chaîne « %s » à partir de la position %lu\n" +#~ msgid "Report bugs to .\n" +#~ msgstr "Rapporter les bogues à .\n" -#~ msgid "invalid COPY statement -- could not find \"copy\" in string \"%s\"\n" -#~ msgstr "instruction COPY invalide -- n'a pas pu trouver « copy » dans la chaîne « %s »\n" +#~ msgid "schema with OID %u does not exist\n" +#~ msgstr "le schéma d'OID %u n'existe pas\n" -#~ msgid "-C and -c are incompatible options\n" -#~ msgstr "-C et -c sont des options incompatibles\n" +#~ msgid "unrecognized collation provider: %s\n" +#~ msgstr "fournisseur de collationnement non reconnu : %s\n" -#~ msgid "%s: could not parse version \"%s\"\n" -#~ msgstr "%s : n'a pas pu analyser la version « %s »\n" +#~ msgid "WARNING: could not parse reloptions array\n" +#~ msgstr "ATTENTION : n'a pas pu analyser le tableau reloptions\n" -#~ msgid "could not parse version string \"%s\"\n" -#~ msgstr "n'a pas pu analyser la chaîne de version « %s »\n" +#~ msgid "sorter" +#~ msgstr "tri" -#~ msgid "could not create worker thread: %s\n" -#~ msgstr "n'a pas pu créer le fil de travail: %s\n" +#~ msgid "%s: option --if-exists requires option -c/--clean\n" +#~ msgstr "%s : l'option --if-exists nécessite l'option -c/--clean\n" -#~ msgid "parallel_restore should not return\n" -#~ msgstr "parallel_restore ne devrait pas retourner\n" +#~ msgid "%s: could not open the output file \"%s\": %s\n" +#~ msgstr "%s : n'a pas pu ouvrir le fichier de sauvegarde « %s » : %s\n" -#~ msgid "worker process crashed: status %d\n" -#~ msgstr "crash du processus worker : statut %d\n" +#~ msgid "%s: invalid client encoding \"%s\" specified\n" +#~ msgstr "%s : encodage client indiqué (« %s ») invalide\n" -#~ msgid "cannot duplicate null pointer\n" -#~ msgstr "ne peut pas dupliquer un pointeur nul\n" +#~ msgid "%s: could not connect to database \"%s\": %s" +#~ msgstr "%s : n'a pas pu se connecter à la base de données « %s » : %s" -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "n'a pas pu accéder au répertoire « %s »" +#~ msgid "%s: executing %s\n" +#~ msgstr "%s : exécute %s\n" -#~ msgid "query to get data of sequence \"%s\" returned name \"%s\"\n" +#~ msgid "%s: query failed: %s" +#~ msgstr "%s : échec de la requête : %s" + +#~ msgid "%s: query was: %s\n" +#~ msgstr "%s : la requête était : %s\n" + +#~ msgid "%s: options -s/--schema-only and -a/--data-only cannot be used together\n" #~ msgstr "" -#~ "la requête permettant d'obtenir les données de la séquence « %s » a renvoyé\n" -#~ "le nom « %s »\n" +#~ "%s : les options « -s/--schema-only » et « -a/--data-only » ne peuvent pas être\n" +#~ "utilisées conjointement\n" -#~ msgid "server version must be at least 7.3 to use schema selection switches\n" +#~ msgid "%s: options -c/--clean and -a/--data-only cannot be used together\n" #~ msgstr "" -#~ "le serveur doit être de version 7.3 ou supérieure pour utiliser les options\n" -#~ "de sélection du schéma\n" +#~ "%s : les options « -c/--clean » et « -a/--data-only » ne peuvent pas être\n" +#~ "utilisées conjointement\n" -#~ msgid "error during backup\n" -#~ msgstr "erreur lors de la sauvegarde\n" +#~ msgid "%s: invalid number of parallel jobs\n" +#~ msgstr "%s : nombre de jobs en parallèle invalide\n" -#~ msgid "could not find slot of finished worker\n" -#~ msgstr "n'a pas pu trouver l'emplacement du worker qui vient de terminer\n" +#~ msgid "%s: could not parse ACL list (%s) for database \"%s\"\n" +#~ msgstr "%s : n'a pas pu analyser la liste d'ACL (%s) pour la base de données « %s »\n" -#~ msgid "error processing a parallel work item\n" -#~ msgstr "erreur durant le traitement en parallèle d'un item\n" +#~ msgid "setting owner and privileges for %s \"%s.%s\"\n" +#~ msgstr "réglage du propriétaire et des droits pour %s « %s.%s»\n" + +#~ msgid "setting owner and privileges for %s \"%s\"\n" +#~ msgstr "réglage du propriétaire et des droits pour %s « %s »\n" #~ msgid "" #~ "Synchronized snapshots are not supported on standby servers.\n" @@ -3032,205 +3053,272 @@ msgstr "" #~ "Lancez avec --no-synchronized-snapshots à la place si vous n'avez pas besoin\n" #~ "de snapshots synchronisés.\n" -#~ msgid "setting owner and privileges for %s \"%s\"\n" -#~ msgstr "réglage du propriétaire et des droits pour %s « %s »\n" - -#~ msgid "setting owner and privileges for %s \"%s.%s\"\n" -#~ msgstr "réglage du propriétaire et des droits pour %s « %s.%s»\n" +#~ msgid "error processing a parallel work item\n" +#~ msgstr "erreur durant le traitement en parallèle d'un item\n" -#~ msgid "%s: could not parse ACL list (%s) for database \"%s\"\n" -#~ msgstr "%s : n'a pas pu analyser la liste d'ACL (%s) pour la base de données « %s »\n" +#~ msgid "could not find slot of finished worker\n" +#~ msgstr "n'a pas pu trouver l'emplacement du worker qui vient de terminer\n" -#~ msgid "%s: invalid number of parallel jobs\n" -#~ msgstr "%s : nombre de jobs en parallèle invalide\n" +#~ msgid "error during backup\n" +#~ msgstr "erreur lors de la sauvegarde\n" -#~ msgid "%s: options -c/--clean and -a/--data-only cannot be used together\n" +#~ msgid "server version must be at least 7.3 to use schema selection switches\n" #~ msgstr "" -#~ "%s : les options « -c/--clean » et « -a/--data-only » ne peuvent pas être\n" -#~ "utilisées conjointement\n" +#~ "le serveur doit être de version 7.3 ou supérieure pour utiliser les options\n" +#~ "de sélection du schéma\n" -#~ msgid "%s: options -s/--schema-only and -a/--data-only cannot be used together\n" +#~ msgid "query to get data of sequence \"%s\" returned name \"%s\"\n" #~ msgstr "" -#~ "%s : les options « -s/--schema-only » et « -a/--data-only » ne peuvent pas être\n" -#~ "utilisées conjointement\n" +#~ "la requête permettant d'obtenir les données de la séquence « %s » a renvoyé\n" +#~ "le nom « %s »\n" -#~ msgid "%s: query was: %s\n" -#~ msgstr "%s : la requête était : %s\n" +#~ msgid "could not change directory to \"%s\"" +#~ msgstr "n'a pas pu accéder au répertoire « %s »" -#~ msgid "%s: query failed: %s" -#~ msgstr "%s : échec de la requête : %s" +#~ msgid "cannot duplicate null pointer\n" +#~ msgstr "ne peut pas dupliquer un pointeur nul\n" -#~ msgid "%s: executing %s\n" -#~ msgstr "%s : exécute %s\n" +#~ msgid "worker process crashed: status %d\n" +#~ msgstr "crash du processus worker : statut %d\n" -#~ msgid "%s: could not connect to database \"%s\": %s" -#~ msgstr "%s : n'a pas pu se connecter à la base de données « %s » : %s" +#~ msgid "parallel_restore should not return\n" +#~ msgstr "parallel_restore ne devrait pas retourner\n" -#~ msgid "%s: invalid client encoding \"%s\" specified\n" -#~ msgstr "%s : encodage client indiqué (« %s ») invalide\n" +#~ msgid "could not create worker thread: %s\n" +#~ msgstr "n'a pas pu créer le fil de travail: %s\n" -#~ msgid "%s: could not open the output file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le fichier de sauvegarde « %s » : %s\n" +#~ msgid "could not parse version string \"%s\"\n" +#~ msgstr "n'a pas pu analyser la chaîne de version « %s »\n" -#~ msgid "%s: option --if-exists requires option -c/--clean\n" -#~ msgstr "%s : l'option --if-exists nécessite l'option -c/--clean\n" +#~ msgid "%s: could not parse version \"%s\"\n" +#~ msgstr "%s : n'a pas pu analyser la version « %s »\n" -#~ msgid "sorter" -#~ msgstr "tri" +#~ msgid "-C and -c are incompatible options\n" +#~ msgstr "-C et -c sont des options incompatibles\n" -#~ msgid "WARNING: could not parse reloptions array\n" -#~ msgstr "ATTENTION : n'a pas pu analyser le tableau reloptions\n" +#~ msgid "invalid COPY statement -- could not find \"copy\" in string \"%s\"\n" +#~ msgstr "instruction COPY invalide -- n'a pas pu trouver « copy » dans la chaîne « %s »\n" -#~ msgid "unrecognized collation provider: %s\n" -#~ msgstr "fournisseur de collationnement non reconnu : %s\n" +#~ msgid "invalid COPY statement -- could not find \"from stdin\" in string \"%s\" starting at position %lu\n" +#~ msgstr "" +#~ "instruction COPY invalide -- n'a pas pu trouver « from stdin » dans la\n" +#~ "chaîne « %s » à partir de la position %lu\n" -#~ msgid "schema with OID %u does not exist\n" -#~ msgstr "le schéma d'OID %u n'existe pas\n" +#~ msgid "requested %d byte, got %d from lookahead and %d from file\n" +#~ msgid_plural "requested %d bytes, got %d from lookahead and %d from file\n" +#~ msgstr[0] "%d octet requis, %d obtenu de « lookahead » et %d du fichier\n" +#~ msgstr[1] "%d octets requis, %d obtenus de « lookahead » et %d du fichier\n" -#~ msgid "Report bugs to .\n" -#~ msgstr "Rapporter les bogues à .\n" +#~ msgid "read %lu byte into lookahead buffer\n" +#~ msgid_plural "read %lu bytes into lookahead buffer\n" +#~ msgstr[0] "lecture de %lu octet dans le tampon prévisionnel\n" +#~ msgstr[1] "lecture de %lu octets dans le tampon prévisionnel\n" -#~ msgid " -o, --oids include OIDs in dump\n" -#~ msgstr " -o, --oids inclut les OID dans la sauvegarde\n" +#~ msgid "query returned %d rows instead of one: %s\n" +#~ msgstr "la requête a renvoyé %d lignes au lieu d'une seule : %s\n" -#~ msgid "(The INSERT command cannot set OIDs.)\n" -#~ msgstr "(La commande INSERT ne peut pas positionner les OID.)\n" +#~ msgid "no label definitions found for enum ID %u\n" +#~ msgstr "aucune définition de label trouvée pour l'ID enum %u\n" -#~ msgid "options --inserts/--column-inserts and -o/--oids cannot be used together\n" +#~ msgid "compression support is disabled in this format\n" +#~ msgstr "le support de la compression est désactivé avec ce format\n" + +#~ msgid "could not parse ACL (%s) for large object %u" +#~ msgstr "n'a pas pu analyser la liste ACL (%s) du « Large Object » %u" + +#~ msgid "saving large object properties\n" +#~ msgstr "sauvegarde des propriétés des « Large Objects »\n" + +#~ msgid "dumpBlobs(): could not open large object %u: %s" +#~ msgstr "dumpBlobs() : n'a pas pu ouvrir le « Large Object » %u : %s" + +#~ msgid "dumping a specific TOC data block out of order is not supported without ID on this input stream (fseek required)\n" #~ msgstr "" -#~ "les options « --inserts/--column-inserts » et « -o/--oids » ne\n" -#~ "peuvent pas être utilisées conjointement\n" +#~ "la sauvegarde d'un bloc de données spécifique du TOC dans le désordre n'est\n" +#~ "pas supporté sans identifiant sur ce flux d'entrée (fseek requis)\n" -#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" -#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" +#~ msgid "query returned no rows: %s\n" +#~ msgstr "la requête n'a renvoyé aucune ligne : %s\n" -#~ msgid "TOC Entry %s at %s (length %s, checksum %d)\n" -#~ msgstr "entrée TOC %s à %s (longueur %s, somme de contrôle %d)\n" +#~ msgid "%s: invalid -X option -- %s\n" +#~ msgstr "%s : option -X invalide -- %s\n" -#~ msgid "skipping tar member %s\n" -#~ msgstr "omission du membre %s du tar\n" +#~ msgid "cannot reopen non-seekable file\n" +#~ msgstr "ne peut pas rouvrir le fichier non cherchable\n" -#~ msgid "now at file position %s\n" -#~ msgstr "maintenant en position %s du fichier\n" +#~ msgid "cannot reopen stdin\n" +#~ msgstr "ne peut pas rouvrir stdin\n" -#~ msgid "moving from position %s to next member at file position %s\n" -#~ msgstr "déplacement de la position %s vers le prochain membre à la position %s du fichier\n" +#~ msgid "%s: out of memory\n" +#~ msgstr "%s : mémoire épuisée\n" -#~ msgid "tar archiver" -#~ msgstr "archiveur tar" +#~ msgid "" +#~ " --use-set-session-authorization\n" +#~ " use SET SESSION AUTHORIZATION commands instead of\n" +#~ " ALTER OWNER commands to set ownership\n" +#~ msgstr "" +#~ " --use-set-session-authorization\n" +#~ " utilise les commandes SET SESSION AUTHORIZATION\n" +#~ " au lieu des commandes ALTER OWNER pour les\n" +#~ " modifier les propriétaires\n" -#~ msgid "could not create directory \"%s\": %s\n" -#~ msgstr "n'a pas pu créer le répertoire « %s » : %s\n" +#~ msgid " --disable-triggers disable triggers during data-only restore\n" +#~ msgstr "" +#~ " --disable-triggers désactiver les déclencheurs lors de la\n" +#~ " restauration des données seules\n" -#~ msgid "could not close directory \"%s\": %s\n" -#~ msgstr "n'a pas pu fermer le répertoire « %s » : %s\n" +#~ msgid " -O, --no-owner skip restoration of object ownership\n" +#~ msgstr "" +#~ " -O, --no-owner omettre la restauration des possessions des\n" +#~ " objets\n" -#~ msgid "could not read directory \"%s\": %s\n" -#~ msgstr "n'a pas pu lire le répertoire « %s » : %s\n" +#~ msgid " -c, --clean clean (drop) database objects before recreating\n" +#~ msgstr "" +#~ " -c, --clean nettoie/supprime les bases de données avant de\n" +#~ " les créer\n" -#~ msgid "directory archiver" -#~ msgstr "archiveur répertoire" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version affiche la version et quitte\n" -#~ msgid "query returned %d row instead of one: %s\n" -#~ msgid_plural "query returned %d rows instead of one: %s\n" -#~ msgstr[0] "la requête a renvoyé %d ligne au lieu d'une seule : %s\n" -#~ msgstr[1] "la requête a renvoyé %d lignes au lieu d'une seule : %s\n" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help affiche cette aide et quitte\n" -#~ msgid "query was: %s\n" -#~ msgstr "la requête était : %s\n" +#~ msgid "restoring large object OID %u\n" +#~ msgstr "restauration du « Large Object » d'OID %u\n" -#~ msgid "failed to connect to database\n" -#~ msgstr "n'a pas pu se connecter à la base de données\n" +#~ msgid "could not close large object file\n" +#~ msgstr "n'a pas pu fermer le fichier du « Large Object »\n" -#~ msgid "failed to reconnect to database\n" -#~ msgstr "la reconnexion à la base de données a échoué\n" +#~ msgid "could not open large object TOC for output: %s\n" +#~ msgstr "n'a pas pu ouvrir la TOC du « Large Object » en sortie : %s\n" -#~ msgid "archiver (db)" -#~ msgstr "programme d'archivage (db)" +#~ msgid "could not open large object TOC for input: %s\n" +#~ msgstr "n'a pas pu ouvrir la TOC du « Large Object » en entrée : %s\n" -#~ msgid "custom archiver" -#~ msgstr "programme d'archivage personnalisé" +#~ msgid "could not close data file after reading\n" +#~ msgstr "n'a pas pu fermer le fichier de données après lecture\n" -#~ msgid "reducing dependencies for %d\n" -#~ msgstr "réduction des dépendances pour %d\n" +#~ msgid "" +#~ "WARNING:\n" +#~ " This format is for demonstration purposes; it is not intended for\n" +#~ " normal use. Files will be written in the current working directory.\n" +#~ msgstr "" +#~ "ATTENTION :\n" +#~ " Ce format est présent dans un but de démonstration ; il n'est pas prévu\n" +#~ " pour une utilisation normale. Les fichiers seront écrits dans le\n" +#~ " répertoire actuel.\n" -#~ msgid "transferring dependency %d -> %d to %d\n" -#~ msgstr "transfert de la dépendance %d -> %d vers %d\n" +#~ msgid "file archiver" +#~ msgstr "programme d'archivage de fichiers" -#~ msgid "no item ready\n" -#~ msgstr "aucun élément prêt\n" +#~ msgid "SQL command failed\n" +#~ msgstr "la commande SQL a échoué\n" -#~ msgid "entering restore_toc_entries_postfork\n" -#~ msgstr "entrée dans restore_toc_entries_prefork\n" +#~ msgid "found more than one entry for pg_indexes in pg_class\n" +#~ msgstr "a trouvé plusieurs entrées pour pg_indexes dans la table pg_class\n" -#~ msgid "entering restore_toc_entries_parallel\n" -#~ msgstr "entrée dans restore_toc_entries_parallel\n" +#~ msgid "could not find entry for pg_indexes in pg_class\n" +#~ msgstr "n'a pas pu trouver l'entrée de pg_indexes dans pg_class\n" -#~ msgid "entering restore_toc_entries_prefork\n" -#~ msgstr "entrée dans restore_toc_entries_prefork\n" +#~ msgid "found more than one pg_database entry for this database\n" +#~ msgstr "a trouvé plusieurs entrées dans pg_database pour cette base de données\n" -#~ msgid "could not set default_with_oids: %s" -#~ msgstr "n'a pas pu configurer default_with_oids : %s" +#~ msgid "missing pg_database entry for this database\n" +#~ msgstr "entrée pg_database manquante pour cette base de données\n" -#~ msgid "read TOC entry %d (ID %d) for %s %s\n" -#~ msgstr "lecture de l'entrée %d de la TOC (ID %d) pour %s %s\n" +#~ msgid "query returned %d foreign server entry for foreign table \"%s\"\n" +#~ msgid_plural "query returned %d foreign server entries for foreign table \"%s\"\n" +#~ msgstr[0] "la requête a renvoyé %d entrée de serveur distant pour la table distante « %s »\n" +#~ msgstr[1] "la requête a renvoyé %d entrées de serveurs distants pour la table distante « %s »\n" -#~ msgid "allocating AH for %s, format %d\n" -#~ msgstr "allocation d'AH pour %s, format %d\n" +#~ msgid "dumpDatabase(): could not find pg_largeobject_metadata.relfrozenxid\n" +#~ msgstr "dumpDatabase() : n'a pas pu trouver pg_largeobject_metadata.relfrozenxid\n" -#~ msgid "attempting to ascertain archive format\n" -#~ msgstr "tentative d'identification du format de l'archive\n" +#~ msgid "dumpDatabase(): could not find pg_largeobject.relfrozenxid\n" +#~ msgstr "dumpDatabase() : n'a pas pu trouver pg_largeobject.relfrozenxid\n" -#~ msgid "-C and -1 are incompatible options\n" -#~ msgstr "-C et -1 sont des options incompatibles\n" +#~ msgid "query returned more than one (%d) pg_database entry for database \"%s\"\n" +#~ msgstr "" +#~ "la requête a renvoyé plusieurs (%d) entrées pg_database pour la base de\n" +#~ "données « %s »\n" -#~ msgid "archiver" -#~ msgstr "archiveur" +#~ msgid "missing pg_database entry for database \"%s\"\n" +#~ msgstr "entrée manquante dans pg_database pour la base de données « %s »\n" -#~ msgid "select() failed: %s\n" -#~ msgstr "échec de select() : %s\n" +#~ msgid "*** aborted because of error\n" +#~ msgstr "*** interrompu du fait d'erreurs\n" -#~ msgid "parallel archiver" -#~ msgstr "archiveur en parallèle" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version affiche la version puis quitte\n" -#~ msgid "compress_io" -#~ msgstr "compression_io" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help affiche cette aide puis quitte\n" -#~ msgid "child process was terminated by signal %d" -#~ msgstr "le processus fils a été terminé par le signal %d" +#~ msgid "mismatch in actual vs. predicted file position (%s vs. %s)\n" +#~ msgstr "" +#~ "pas de correspondance entre la position réelle et celle prévue du fichier\n" +#~ "(%s vs. %s)\n" -#~ msgid "child process was terminated by signal %s" -#~ msgstr "le processus fils a été terminé par le signal %s" +#~ msgid "could not output padding at end of tar member\n" +#~ msgstr "n'a pas pu remplir la fin du membre de tar\n" -#~ msgid "pclose failed: %s" -#~ msgstr "échec de pclose : %s" +#~ msgid "could not write null block at end of tar archive\n" +#~ msgstr "n'a pas pu écrire le bloc nul à la fin de l'archive tar\n" -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "n'a pas pu lire le lien symbolique « %s »" +#~ msgid "could not write byte\n" +#~ msgstr "n'a pas pu écrire l'octet\n" -#~ msgid "could not change directory to \"%s\": %s" -#~ msgstr "n'a pas pu changer le répertoire par « %s » : %s" +#~ msgid "could not write byte: %s\n" +#~ msgstr "n'a pas pu écrire un octet : %s\n" -#~ msgid "could not identify current directory: %s" -#~ msgstr "n'a pas pu identifier le répertoire courant : %s" +#~ msgid "unexpected end of file\n" +#~ msgstr "fin de fichier inattendu\n" -#~ msgid "" -#~ "The program \"pg_dump\" was found by \"%s\"\n" -#~ "but was not the same version as %s.\n" -#~ "Check your installation." -#~ msgstr "" -#~ "Le programme « pg_dump » a été trouvé par « %s »\n" -#~ "mais n'a pas la même version que %s.\n" -#~ "Vérifiez votre installation." +#~ msgid "could not write to custom output routine\n" +#~ msgstr "n'a pas pu écrire vers la routine de sauvegarde personnalisée\n" -#~ msgid "" -#~ "The program \"pg_dump\" is needed by %s but was not found in the\n" -#~ "same directory as \"%s\".\n" -#~ "Check your installation." +#~ msgid "could not open output file \"%s\" for writing\n" +#~ msgstr "n'a pas pu ouvrir le fichier de sauvegarde « %s » en écriture\n" + +#~ msgid "archive member too large for tar format\n" +#~ msgstr "membre de l'archive trop volumineux pour le format tar\n" + +#~ msgid "error in ListenToWorkers(): %s\n" +#~ msgstr "erreur dans ListenToWorkers(): %s\n" + +#~ msgid "terminated by user\n" +#~ msgstr "terminé par l'utilisateur\n" + +#~ msgid "unrecognized command on communication channel: %s\n" +#~ msgstr "commande inconnue sur le canal de communucation: %s\n" + +#~ msgid "could not get relation name for OID %u: %s\n" +#~ msgstr "n'a pas pu obtenir le nom de la relation pour l'OID %u: %s\n" + +#~ msgid "worker is terminating\n" +#~ msgstr "le worker est en cours d'arrêt\n" + +#~ msgid "reading extended statistics for table \"%s.%s\"\n" +#~ msgstr "lecture des statistiques étendues pour la table « %s.%s »\n" + +#~ msgid "Report bugs to .\n" +#~ msgstr "Rapporter les bogues à .\n" + +#~ msgid "ftell mismatch with expected position -- ftell used" +#~ msgstr "ftell ne correspond pas à la position attendue -- ftell utilisé" + +#~ msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive" #~ msgstr "" -#~ "Le programme « pg_dump » est nécessaire à %s mais n'a pas été trouvé dans le\n" -#~ "même répertoire que « %s ».\n" -#~ "Vérifiez votre installation." +#~ "n'a pas pu trouver l'identifiant de bloc %d dans l'archive --\n" +#~ "il est possible que cela soit dû à une demande de restauration dans un ordre\n" +#~ "différent, qui n'a pas pu être géré à cause d'un manque d'information de\n" +#~ "position dans l'archive" -#~ msgid "internal error -- neither th nor fh specified in _tarReadRaw()" -#~ msgstr "erreur interne -- ni th ni fh ne sont précisés dans _tarReadRaw()" +#~ msgid "select() failed: %m" +#~ msgstr "échec de select() : %m" + +#~ msgid "WSAStartup failed: %d" +#~ msgstr "WSAStartup a échoué : %d" + +#~ msgid "pclose failed: %m" +#~ msgstr "échec de pclose : %m" diff --git a/src/bin/pg_dump/po/ja.po b/src/bin/pg_dump/po/ja.po index e1629676a5d82..721a1487044e3 100644 --- a/src/bin/pg_dump/po/ja.po +++ b/src/bin/pg_dump/po/ja.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_dump (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: pg_dump (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-06-06 10:43+0900\n" -"PO-Revision-Date: 2019-06-07 16:14+0900\n" +"POT-Creation-Date: 2020-08-21 15:55+0900\n" +"PO-Revision-Date: 2020-09-13 08:56+0200\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -16,69 +16,69 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:241 #, c-format msgid "fatal: " msgstr "致命的エラー: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:248 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:255 #, c-format msgid "warning: " msgstr "警告: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "カレントディレクトリを識別できませんでした: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "不正なバイナリ\"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "バイナリ\"%s\"を読み取れませんでした" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "実行する\"%s\"がありませんでした" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "ディレクトリ\"%s\"に移動できませんでした: %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を読めませんでした: %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "pcloseが失敗しました: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 msgid "out of memory" msgstr "メモリ不足です" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "メモリ不足です\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "null ポインタを複製できません(内部エラー)。\n" @@ -113,1190 +113,973 @@ msgstr "子プロセスはシグナル%dにより終了しました: %s" msgid "child process exited with unrecognized status %d" msgstr "子プロセスが未知のステータス%dで終了しました" -#: common.c:123 +#: common.c:121 #, c-format -#| msgid "reading extensions\n" msgid "reading extensions" msgstr "機能拡張を読み込んでいます" -#: common.c:127 +#: common.c:125 #, c-format -#| msgid "finding extension members\n" msgid "identifying extension members" msgstr "機能拡張の構成要素を特定しています" -#: common.c:130 +#: common.c:128 #, c-format -#| msgid "reading schemas\n" msgid "reading schemas" msgstr "スキーマを読み込んでいます" -#: common.c:140 +#: common.c:138 #, c-format -#| msgid "reading user-defined tables\n" msgid "reading user-defined tables" msgstr "ユーザ定義テーブルを読み込んでいます" -#: common.c:147 +#: common.c:145 #, c-format -#| msgid "reading user-defined functions\n" msgid "reading user-defined functions" msgstr "ユーザ定義関数を読み込んでいます" -#: common.c:152 +#: common.c:150 #, c-format -#| msgid "reading user-defined types\n" msgid "reading user-defined types" msgstr "ユーザ定義型を読み込んでいます" -#: common.c:157 +#: common.c:155 #, c-format -#| msgid "reading procedural languages\n" msgid "reading procedural languages" msgstr "手続き言語を読み込んでいます" -#: common.c:160 +#: common.c:158 #, c-format -#| msgid "reading user-defined aggregate functions\n" msgid "reading user-defined aggregate functions" msgstr "ユーザ定義集約関数を読み込んでいます" -#: common.c:163 +#: common.c:161 #, c-format -#| msgid "reading user-defined operators\n" msgid "reading user-defined operators" msgstr "ユーザ定義演算子を読み込んでいます" -#: common.c:167 +#: common.c:165 #, c-format -#| msgid "reading user-defined conversions\n" msgid "reading user-defined access methods" msgstr "ユーザ定義アクセスメソッドを読み込んでいます" -#: common.c:170 +#: common.c:168 #, c-format -#| msgid "reading user-defined operator classes\n" msgid "reading user-defined operator classes" msgstr "ユーザ定義演算子クラスを読み込んでいます" -#: common.c:173 +#: common.c:171 #, c-format -#| msgid "reading user-defined operator families\n" msgid "reading user-defined operator families" msgstr "ユーザ定義演算子族を読み込んでいます" -#: common.c:176 +#: common.c:174 #, c-format -#| msgid "reading user-defined text search parsers\n" msgid "reading user-defined text search parsers" msgstr "ユーザ定義のテキスト検索パーサを読み込んでいます" -#: common.c:179 +#: common.c:177 #, c-format -#| msgid "reading user-defined text search templates\n" msgid "reading user-defined text search templates" msgstr "ユーザ定義のテキスト検索テンプレートを読み込んでいます" -#: common.c:182 +#: common.c:180 #, c-format -#| msgid "reading user-defined text search dictionaries\n" msgid "reading user-defined text search dictionaries" msgstr "ユーザ定義のテキスト検索辞書を読み込んでいます" -#: common.c:185 +#: common.c:183 #, c-format -#| msgid "reading user-defined text search configurations\n" msgid "reading user-defined text search configurations" msgstr "ユーザ定義のテキスト検索設定を読み込んでいます" -#: common.c:188 +#: common.c:186 #, c-format -#| msgid "reading user-defined foreign-data wrappers\n" msgid "reading user-defined foreign-data wrappers" msgstr "ユーザ定義の外部データラッパーを読み込んでいます" -#: common.c:191 +#: common.c:189 #, c-format -#| msgid "reading user-defined foreign servers\n" msgid "reading user-defined foreign servers" msgstr "ユーザ定義の外部サーバーを読み込んでいます" -#: common.c:194 +#: common.c:192 #, c-format -#| msgid "reading default privileges\n" msgid "reading default privileges" msgstr "デフォルト権限設定を読み込んでいます" -#: common.c:197 +#: common.c:195 #, c-format -#| msgid "reading user-defined collations\n" msgid "reading user-defined collations" msgstr "ユーザ定義の照合順序を読み込んでいます" -#: common.c:201 +#: common.c:199 #, c-format -#| msgid "reading user-defined conversions\n" msgid "reading user-defined conversions" msgstr "ユーザ定義の変換を読み込んでいます" -#: common.c:204 +#: common.c:202 #, c-format -#| msgid "reading type casts\n" msgid "reading type casts" msgstr "型キャストを読み込んでいます" -#: common.c:207 +#: common.c:205 #, c-format -#| msgid "remove a transform" msgid "reading transforms" msgstr "変換を読み込んでいます" -#: common.c:210 +#: common.c:208 #, c-format -#| msgid "reading table inheritance information\n" msgid "reading table inheritance information" msgstr "テーブル継承情報を読み込んでいます" -#: common.c:213 +#: common.c:211 #, c-format -#| msgid "reading event triggers\n" msgid "reading event triggers" msgstr "イベントトリガを読み込んでいます" -#: common.c:217 +#: common.c:215 #, c-format -#| msgid "finding extension members\n" msgid "finding extension tables" msgstr "機能拡張構成テーブルを探しています" -#: common.c:221 +#: common.c:219 #, c-format -#| msgid "finding inheritance relationships\n" msgid "finding inheritance relationships" msgstr "継承関係を検索しています" -#: common.c:224 +#: common.c:222 #, c-format -#| msgid "reading column info for interesting tables\n" msgid "reading column info for interesting tables" msgstr "対象テーブルの列情報を読み込んでいます" -#: common.c:227 +#: common.c:225 #, c-format -#| msgid "flagging inherited columns in subtables\n" msgid "flagging inherited columns in subtables" msgstr "子テーブルの継承列にフラグを設定しています" -#: common.c:230 +#: common.c:228 #, c-format -#| msgid "reading indexes\n" msgid "reading indexes" msgstr "インデックスを読み込んでいます" -#: common.c:233 +#: common.c:231 #, c-format -#| msgid "cannot create index on partitioned table \"%s\"" msgid "flagging indexes in partitioned tables" msgstr "パーティション親テーブルのインデックスにフラグを設定しています" -#: common.c:236 +#: common.c:234 #, c-format -#| msgid "define extended statistics" msgid "reading extended statistics" msgstr "拡張統計情報を読み込んでいます" -#: common.c:239 +#: common.c:237 #, c-format -#| msgid "reading constraints\n" msgid "reading constraints" msgstr "制約を読み込んでいます" -#: common.c:242 +#: common.c:240 #, c-format -#| msgid "reading triggers\n" msgid "reading triggers" msgstr "トリガを読み込んでいます" -#: common.c:245 +#: common.c:243 #, c-format -#| msgid "reading rewrite rules\n" msgid "reading rewrite rules" msgstr "書き換えルールを読み込んでいます" -#: common.c:248 +#: common.c:246 #, c-format -#| msgid "reading schemas\n" msgid "reading policies" msgstr "ポリシを読み込んでいます" -#: common.c:251 +#: common.c:249 #, c-format -#| msgid "%s in publication %s" msgid "reading publications" msgstr "パブリケーションを読み込んでいます" -#: common.c:254 +#: common.c:252 #, c-format -#| msgid "%s in publication %s" msgid "reading publication membership" msgstr "パブリケーションの構成要素を読み込んでいます" -#: common.c:257 +#: common.c:255 #, c-format -#| msgid "remove a subscription" msgid "reading subscriptions" msgstr "サブスクリプションを読み込んでいます" -#: common.c:1023 +#: common.c:1025 #, c-format -#| msgid "" -#| "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found\n" msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" -msgstr "" -"健全性検査に失敗しました、テーブル\"%2$s\"(OID %3$u)の親のOID %1$uがありませ" -"ん" +msgstr "健全性検査に失敗しました、テーブル\"%2$s\"(OID %3$u)の親のOID %1$uがありません" -#: common.c:1065 +#: common.c:1067 #, c-format -#| msgid "could not parse numeric array \"%s\": too many numbers\n" msgid "could not parse numeric array \"%s\": too many numbers" msgstr "数値配列\"%s\"のパースに失敗しました: 要素が多すぎます" -#: common.c:1080 +#: common.c:1082 #, c-format -#| msgid "could not parse numeric array \"%s\": invalid character in number\n" msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "数値配列\"%s\"のパースに失敗しました: 数値に不正な文字が含まれています" #: compress_io.c:111 #, c-format -#| msgid "invalid compression code: %d\n" msgid "invalid compression code: %d" msgstr "不正な圧縮コード: %d" -#: compress_io.c:134 compress_io.c:170 compress_io.c:188 compress_io.c:508 -#: compress_io.c:551 +#: compress_io.c:134 compress_io.c:170 compress_io.c:188 compress_io.c:504 +#: compress_io.c:547 #, c-format -#| msgid "not built with zlib support\n" msgid "not built with zlib support" msgstr "zlibサポートなしでビルドされています" -#: compress_io.c:237 compress_io.c:336 +#: compress_io.c:236 compress_io.c:333 #, c-format -#| msgid "could not initialize compression library: %s\n" msgid "could not initialize compression library: %s" msgstr "圧縮ライブラリを初期化できませんでした: %s" -#: compress_io.c:257 +#: compress_io.c:256 #, c-format -#| msgid "could not close compression stream: %s\n" msgid "could not close compression stream: %s" msgstr "圧縮ストリームをクローズできませんでした: %s" -#: compress_io.c:274 +#: compress_io.c:273 #, c-format -#| msgid "could not compress data: %s\n" msgid "could not compress data: %s" msgstr "データを圧縮できませんでした: %s" -#: compress_io.c:352 compress_io.c:367 +#: compress_io.c:349 compress_io.c:364 #, c-format -#| msgid "could not uncompress data: %s\n" msgid "could not uncompress data: %s" msgstr "データを伸長できませんでした: %s" -#: compress_io.c:374 +#: compress_io.c:371 #, c-format -#| msgid "could not close compression library: %s\n" msgid "could not close compression library: %s" msgstr "圧縮ライブラリをクローズできませんでした: %s" -#: compress_io.c:588 compress_io.c:625 pg_backup_tar.c:555 pg_backup_tar.c:558 +#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:557 pg_backup_tar.c:560 #, c-format -#| msgid "could not read from input file: %s\n" msgid "could not read from input file: %s" msgstr "入力ファイルから読み込めませんでした: %s" -#: compress_io.c:627 pg_backup_custom.c:578 pg_backup_directory.c:539 -#: pg_backup_tar.c:795 pg_backup_tar.c:818 +#: compress_io.c:623 pg_backup_custom.c:644 pg_backup_directory.c:552 +#: pg_backup_tar.c:793 pg_backup_tar.c:816 #, c-format -#| msgid "could not read from input file: end of file\n" msgid "could not read from input file: end of file" msgstr "入力ファイルから読み込めませんでした: ファイルの終端" -#: parallel.c:263 +#: parallel.c:267 #, c-format -#| msgid "%s: WSAStartup failed: %d\n" msgid "WSAStartup failed: %d" msgstr "WSAStartupが失敗しました: %d" -#: parallel.c:968 +#: parallel.c:978 #, c-format -#| msgid "could not create communication channels: %s\n" msgid "could not create communication channels: %m" msgstr "通信チャンネルを作成できませんでした: %m" -#: parallel.c:1031 +#: parallel.c:1035 #, c-format -#| msgid "could not create worker process: %s\n" msgid "could not create worker process: %m" msgstr "ワーカプロセスを作成できませんでした: %m" -#: parallel.c:1160 +#: parallel.c:1165 #, c-format -#| msgid "unrecognized recovery parameter \"%s\"" -msgid "unrecognized command received from master: \"%s\"" -msgstr "マスタから認識不能のコマンドを受信しました: \"%s\"" +msgid "unrecognized command received from leader: \"%s\"" +msgstr "リーダーから認識不能のコマンドを受信しました: \"%s\"" -#: parallel.c:1203 parallel.c:1441 +#: parallel.c:1208 parallel.c:1446 #, c-format -#| msgid "invalid message received from worker: %s\n" msgid "invalid message received from worker: \"%s\"" msgstr "ワーカから不正なメッセージを受信しました: \"%s\"" -#: parallel.c:1335 +#: parallel.c:1340 #, c-format -#| msgid "" -#| "could not obtain lock on relation \"%s\"\n" -#| "This usually means that someone requested an ACCESS EXCLUSIVE lock on the " -#| "table after the pg_dump parent process had gotten the initial ACCESS " -#| "SHARE lock on the table.\n" msgid "" "could not obtain lock on relation \"%s\"\n" -"This usually means that someone requested an ACCESS EXCLUSIVE lock on the " -"table after the pg_dump parent process had gotten the initial ACCESS SHARE " -"lock on the table." +"This usually means that someone requested an ACCESS EXCLUSIVE lock on the table after the pg_dump parent process had gotten the initial ACCESS SHARE lock on the table." msgstr "" "リレーション\"%s\"のロックを獲得できませんでした。\n" -"通常これは、pg_dumpの親プロセスが初期のACCESS SHAREロックを獲得した後にだれか" -"がテーブルに対してACCESS EXCLUSIVEロックを要求したことを意味しています。" +"通常これは、pg_dumpの親プロセスが初期のACCESS SHAREロックを獲得した後にだれかがテーブルに対してACCESS EXCLUSIVEロックを要求したことを意味しています。" -#: parallel.c:1424 +#: parallel.c:1429 #, c-format -#| msgid "a worker process died unexpectedly\n" msgid "a worker process died unexpectedly" msgstr "ワーカプロセスが突然終了しました" -#: parallel.c:1546 parallel.c:1662 +#: parallel.c:1551 parallel.c:1669 #, c-format -#| msgid "could not write to the communication channel: %s\n" msgid "could not write to the communication channel: %m" msgstr "通信チャンネルに書き込めませんでした: %m" -#: parallel.c:1623 +#: parallel.c:1628 #, c-format -#| msgid "select() failed: %s\n" msgid "select() failed: %m" msgstr "select()が失敗しました: %m" -#: parallel.c:1746 +#: parallel.c:1753 #, c-format -#| msgid "pgpipe: could not create socket: error code %d\n" msgid "pgpipe: could not create socket: error code %d" msgstr "pgpipe: ソケットを作成できませんでした: エラーコード %d" -#: parallel.c:1757 +#: parallel.c:1764 #, c-format -#| msgid "pgpipe: could not bind: error code %d\n" msgid "pgpipe: could not bind: error code %d" msgstr "pgpipe: バインドできませんでした: エラーコード %d" -#: parallel.c:1764 +#: parallel.c:1771 #, c-format -#| msgid "pgpipe: could not listen: error code %d\n" msgid "pgpipe: could not listen: error code %d" msgstr "pgpipe: リッスンできませんでした: エラーコード %d" -#: parallel.c:1771 +#: parallel.c:1778 #, c-format -#| msgid "pgpipe: getsockname() failed: error code %d\n" msgid "pgpipe: getsockname() failed: error code %d" msgstr "pgpipe: getsockname()が失敗しました: エラーコード %d" -#: parallel.c:1782 +#: parallel.c:1789 #, c-format -#| msgid "pgpipe: could not create second socket: error code %d\n" msgid "pgpipe: could not create second socket: error code %d" msgstr "pgpipe: 第二ソケットを作成できませんでした: エラーコード %d" -#: parallel.c:1791 +#: parallel.c:1798 #, c-format -#| msgid "pgpipe: could not connect socket: error code %d\n" msgid "pgpipe: could not connect socket: error code %d" msgstr "pgpipe: ソケットを接続できませんでした: エラーコード %d" -#: parallel.c:1800 +#: parallel.c:1807 #, c-format -#| msgid "pgpipe: could not accept connection: error code %d\n" msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: 接続を受け付けられませんでした: エラーコード %d" -#: pg_backup_archiver.c:272 pg_backup_archiver.c:1595 +#: pg_backup_archiver.c:271 pg_backup_archiver.c:1591 #, c-format -#| msgid "could not close output file: %s\n" msgid "could not close output file: %m" msgstr "出力ファイルをクローズできませんでした: %m" -#: pg_backup_archiver.c:316 pg_backup_archiver.c:320 +#: pg_backup_archiver.c:315 pg_backup_archiver.c:319 #, c-format -#| msgid "WARNING: archive items not in correct section order\n" msgid "archive items not in correct section order" msgstr "アーカイブ項目が正しいセクション順ではありません" -#: pg_backup_archiver.c:326 +#: pg_backup_archiver.c:325 #, c-format -#| msgid "unexpected section code %d\n" msgid "unexpected section code %d" msgstr "想定外のセクションコード %d" -#: pg_backup_archiver.c:363 +#: pg_backup_archiver.c:362 #, c-format -#| msgid "parallel restore is not supported with this archive file format\n" msgid "parallel restore is not supported with this archive file format" msgstr "このアーカイブファイル形式での並列リストアはサポートしていません" -#: pg_backup_archiver.c:367 +#: pg_backup_archiver.c:366 #, c-format -#| msgid "" -#| "parallel restore is not supported with archives made by pre-8.0 pg_dump\n" msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump" -msgstr "" -"8.0 より古い pg_dump で作られたアーカイブでの並列リストアはサポートしていませ" -"ん" +msgstr "8.0 より古い pg_dump で作られたアーカイブでの並列リストアはサポートしていません" -#: pg_backup_archiver.c:385 +#: pg_backup_archiver.c:384 #, c-format -#| msgid "" -#| "cannot restore from compressed archive (compression not supported in this " -#| "installation)\n" -msgid "" -"cannot restore from compressed archive (compression not supported in this " -"installation)" -msgstr "" -"圧縮アーカイブからのリストアができません(このインストールは圧縮をサポートして" -"いません)" +msgid "cannot restore from compressed archive (compression not supported in this installation)" +msgstr "圧縮アーカイブからのリストアができません(このインストールは圧縮をサポートしていません)" -#: pg_backup_archiver.c:402 +#: pg_backup_archiver.c:401 #, c-format -#| msgid "connecting to database for restore\n" msgid "connecting to database for restore" msgstr "リストアのためデータベースに接続しています" -#: pg_backup_archiver.c:404 +#: pg_backup_archiver.c:403 #, c-format -#| msgid "direct database connections are not supported in pre-1.3 archives\n" msgid "direct database connections are not supported in pre-1.3 archives" -msgstr "" -"1.3より古いアーカイブではデータベースへの直接接続はサポートされていません" +msgstr "1.3より古いアーカイブではデータベースへの直接接続はサポートされていません" -#: pg_backup_archiver.c:449 +#: pg_backup_archiver.c:448 #, c-format -#| msgid "implied data-only restore\n" msgid "implied data-only restore" msgstr "暗黙的にデータのみのリストアを行います" -#: pg_backup_archiver.c:515 +#: pg_backup_archiver.c:514 #, c-format -#| msgid "dropping %s %s\n" msgid "dropping %s %s" msgstr "%s %sを削除しています" -#: pg_backup_archiver.c:610 +#: pg_backup_archiver.c:609 #, c-format -#| msgid "could not find a function named \"%s\"" msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "文\"%s\"中に IF EXISTS を挿入すべき場所が見つかりませでした" -#: pg_backup_archiver.c:766 pg_backup_archiver.c:768 +#: pg_backup_archiver.c:765 pg_backup_archiver.c:767 #, c-format -#| msgid "warning from original dump file: %s\n" msgid "warning from original dump file: %s" msgstr "オリジナルのダンプファイルからの警告: %s" -#: pg_backup_archiver.c:783 +#: pg_backup_archiver.c:782 #, c-format -#| msgid "creating %s %s\n" msgid "creating %s \"%s.%s\"" msgstr "%s \"%s.%s\"を作成しています" -#: pg_backup_archiver.c:786 +#: pg_backup_archiver.c:785 #, c-format -#| msgid "creating %s %s\n" msgid "creating %s \"%s\"" msgstr "%s \"%s\"を作成しています" -#: pg_backup_archiver.c:843 +#: pg_backup_archiver.c:842 #, c-format -#| msgid "connecting to new database \"%s\"\n" msgid "connecting to new database \"%s\"" msgstr "新しいデータベース\"%s\"に接続しています" -#: pg_backup_archiver.c:871 +#: pg_backup_archiver.c:870 #, c-format -#| msgid "processing %s\n" msgid "processing %s" msgstr "%sを処理しています" -#: pg_backup_archiver.c:891 +#: pg_backup_archiver.c:890 #, c-format -#| msgid "processing data for table \"%s\"\n" msgid "processing data for table \"%s.%s\"" msgstr "テーブル\"%s.%s\"のデータを処理しています" -#: pg_backup_archiver.c:953 +#: pg_backup_archiver.c:952 #, c-format -#| msgid "executing %s %s\n" msgid "executing %s %s" msgstr "%s %sを実行しています" -#: pg_backup_archiver.c:992 +#: pg_backup_archiver.c:991 #, c-format -#| msgid "disabling triggers for %s\n" msgid "disabling triggers for %s" msgstr "%sのトリガを無効にしています" -#: pg_backup_archiver.c:1018 +#: pg_backup_archiver.c:1017 #, c-format -#| msgid "enabling triggers for %s\n" msgid "enabling triggers for %s" msgstr "%sのトリガを有効にしています" -#: pg_backup_archiver.c:1046 +#: pg_backup_archiver.c:1045 #, c-format -#| msgid "" -#| "internal error -- WriteData cannot be called outside the context of a " -#| "DataDumper routine\n" -msgid "" -"internal error -- WriteData cannot be called outside the context of a " -"DataDumper routine" -msgstr "" -"内部エラー -- WriteDataはDataDumperルーチンのコンテクスト外では呼び出せません" +msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" +msgstr "内部エラー -- WriteDataはDataDumperルーチンのコンテクスト外では呼び出せません" -#: pg_backup_archiver.c:1231 +#: pg_backup_archiver.c:1228 #, c-format -#| msgid "large-object output not supported in chosen format\n" msgid "large-object output not supported in chosen format" msgstr "選択した形式ではラージオブジェクト出力をサポートしていません" -#: pg_backup_archiver.c:1289 +#: pg_backup_archiver.c:1286 #, c-format -#| msgid "restored %d large object\n" -#| msgid_plural "restored %d large objects\n" msgid "restored %d large object" msgid_plural "restored %d large objects" msgstr[0] "%d個のラージオブジェクトをリストアしました" msgstr[1] "%d個のラージオブジェクトをリストアしました" -#: pg_backup_archiver.c:1310 pg_backup_tar.c:738 +#: pg_backup_archiver.c:1307 pg_backup_tar.c:736 #, c-format -#| msgid "restoring large object with OID %u\n" msgid "restoring large object with OID %u" msgstr "OID %uのラージオブジェクトをリストアしています" -#: pg_backup_archiver.c:1322 +#: pg_backup_archiver.c:1319 #, c-format msgid "could not create large object %u: %s" msgstr "ラージオブジェクト %u を作成できませんでした: %s" -#: pg_backup_archiver.c:1327 pg_dump.c:3471 +#: pg_backup_archiver.c:1324 pg_dump.c:3542 #, c-format msgid "could not open large object %u: %s" msgstr "ラージオブジェクト %u をオープンできませんでした: %s" -#: pg_backup_archiver.c:1384 +#: pg_backup_archiver.c:1381 #, c-format -#| msgid "could not open TOC file \"%s\": %s\n" msgid "could not open TOC file \"%s\": %m" msgstr "TOCファイル\"%s\"をオープンできませんでした: %m" -#: pg_backup_archiver.c:1424 +#: pg_backup_archiver.c:1421 #, c-format -#| msgid "WARNING: line ignored: %s\n" msgid "line ignored: %s" msgstr "行を無視しました: %s" -#: pg_backup_archiver.c:1431 +#: pg_backup_archiver.c:1428 #, c-format -#| msgid "could not find entry for ID %d\n" msgid "could not find entry for ID %d" msgstr "ID %dのエントリがありませんでした" -#: pg_backup_archiver.c:1452 pg_backup_directory.c:222 -#: pg_backup_directory.c:587 +#: pg_backup_archiver.c:1449 pg_backup_directory.c:222 +#: pg_backup_directory.c:598 #, c-format -#| msgid "could not close TOC file: %s\n" msgid "could not close TOC file: %m" msgstr "TOCファイルをクローズできませんでした: %m" -#: pg_backup_archiver.c:1567 pg_backup_custom.c:159 pg_backup_directory.c:332 -#: pg_backup_directory.c:574 pg_backup_directory.c:637 -#: pg_backup_directory.c:656 +#: pg_backup_archiver.c:1563 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_directory.c:585 pg_backup_directory.c:648 +#: pg_backup_directory.c:667 pg_dumpall.c:484 #, c-format -#| msgid "could not open output file \"%s\": %s\n" msgid "could not open output file \"%s\": %m" msgstr "出力ファイル\"%s\"をオープンできませんでした: %m" -#: pg_backup_archiver.c:1569 pg_backup_custom.c:165 +#: pg_backup_archiver.c:1565 pg_backup_custom.c:162 #, c-format -#| msgid "could not open output file: %s\n" msgid "could not open output file: %m" msgstr "出力ファイルをオープンできませんでした: %m" -#: pg_backup_archiver.c:1662 +#: pg_backup_archiver.c:1658 #, c-format -#| msgid "wrote %lu byte of large object data (result = %lu)\n" -#| msgid_plural "wrote %lu bytes of large object data (result = %lu)\n" msgid "wrote %lu byte of large object data (result = %lu)" msgid_plural "wrote %lu bytes of large object data (result = %lu)" msgstr[0] "ラージオブジェクトデータを%luバイト書き出しました(結果は%lu)" msgstr[1] "ラージオブジェクトデータを%luバイト書き出しました(結果は%lu)" -#: pg_backup_archiver.c:1667 +#: pg_backup_archiver.c:1663 #, c-format -#| msgid "could not write to large object (result: %lu, expected: %lu)\n" msgid "could not write to large object (result: %lu, expected: %lu)" -msgstr "" -"ラージオブジェクトを書き出すことができませんでした(結果は%lu、想定は%lu)" +msgstr "ラージオブジェクトを書き出すことができませんでした(結果は%lu、想定は%lu)" -#: pg_backup_archiver.c:1759 +#: pg_backup_archiver.c:1753 #, c-format -#| msgid "Error while INITIALIZING:\n" msgid "while INITIALIZING:" msgstr "初期化中:" -#: pg_backup_archiver.c:1764 +#: pg_backup_archiver.c:1758 #, c-format -#| msgid "Error while PROCESSING TOC:\n" msgid "while PROCESSING TOC:" msgstr "TOC処理中:" -#: pg_backup_archiver.c:1769 +#: pg_backup_archiver.c:1763 #, c-format -#| msgid "Error while FINALIZING:\n" msgid "while FINALIZING:" msgstr "終了処理中:" -#: pg_backup_archiver.c:1774 +#: pg_backup_archiver.c:1768 #, c-format -#| msgid "Error from TOC entry %d; %u %u %s %s %s\n" msgid "from TOC entry %d; %u %u %s %s %s" msgstr "TOCエントリ%d; %u %u %s %s %s から" -#: pg_backup_archiver.c:1850 +#: pg_backup_archiver.c:1844 #, c-format -#| msgid "bad dumpId\n" msgid "bad dumpId" msgstr "不正なdumpId" -#: pg_backup_archiver.c:1871 +#: pg_backup_archiver.c:1865 #, c-format -#| msgid "bad table dumpId for TABLE DATA item\n" msgid "bad table dumpId for TABLE DATA item" msgstr "TABLE DATA項目に対する不正なテーブルdumpId" -#: pg_backup_archiver.c:1963 +#: pg_backup_archiver.c:1957 #, c-format -#| msgid "unexpected data offset flag %d\n" msgid "unexpected data offset flag %d" msgstr "想定外のデータオフセットフラグ %d" -#: pg_backup_archiver.c:1976 +#: pg_backup_archiver.c:1970 #, c-format -#| msgid "file offset in dump file is too large\n" msgid "file offset in dump file is too large" msgstr "ダンプファイルのファイルオフセットが大きすぎます" -#: pg_backup_archiver.c:2113 pg_backup_archiver.c:2123 +#: pg_backup_archiver.c:2107 pg_backup_archiver.c:2117 #, c-format -#| msgid "directory name too long: \"%s\"\n" msgid "directory name too long: \"%s\"" msgstr "ディレクトリ名が長すぎます: \"%s\"" -#: pg_backup_archiver.c:2131 +#: pg_backup_archiver.c:2125 #, c-format -#| msgid "" -#| "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does " -#| "not exist)\n" -msgid "" -"directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not " -"exist)" -msgstr "" -"ディレクトリ\"%s\"は有効なアーカイブではないようです(\"toc.dat\"がありませ" -"ん)" +msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" +msgstr "ディレクトリ\"%s\"は有効なアーカイブではないようです(\"toc.dat\"がありません)" -#: pg_backup_archiver.c:2139 pg_backup_custom.c:176 pg_backup_custom.c:760 -#: pg_backup_directory.c:207 pg_backup_directory.c:391 +#: pg_backup_archiver.c:2133 pg_backup_custom.c:173 pg_backup_custom.c:810 +#: pg_backup_directory.c:207 pg_backup_directory.c:394 #, c-format -#| msgid "could not open input file \"%s\": %s\n" msgid "could not open input file \"%s\": %m" msgstr "入力ファイル\"%s\"をオープンできませんでした: %m" -#: pg_backup_archiver.c:2146 pg_backup_custom.c:182 +#: pg_backup_archiver.c:2140 pg_backup_custom.c:179 #, c-format -#| msgid "could not open input file: %s\n" msgid "could not open input file: %m" msgstr "入力ファイルをオープンできませんでした: %m" -#: pg_backup_archiver.c:2152 +#: pg_backup_archiver.c:2146 #, c-format -#| msgid "could not read input file: %s\n" msgid "could not read input file: %m" msgstr "入力ファイルを読み込めませんでした: %m" -#: pg_backup_archiver.c:2154 +#: pg_backup_archiver.c:2148 #, c-format -#| msgid "input file is too short (read %lu, expected 5)\n" msgid "input file is too short (read %lu, expected 5)" msgstr "入力ファイルが小さすぎます(読み取り%lu、想定は 5)" -#: pg_backup_archiver.c:2239 +#: pg_backup_archiver.c:2233 #, c-format -#| msgid "input file appears to be a text format dump. Please use psql.\n" msgid "input file appears to be a text format dump. Please use psql." msgstr "入力ファイルがテキスト形式のダンプのようです。psqlを使用してください。" -#: pg_backup_archiver.c:2245 +#: pg_backup_archiver.c:2239 #, c-format -#| msgid "input file does not appear to be a valid archive (too short?)\n" msgid "input file does not appear to be a valid archive (too short?)" msgstr "入力ファイルが有効なアーカイブではないようです(小さすぎる?)" -#: pg_backup_archiver.c:2251 +#: pg_backup_archiver.c:2245 #, c-format -#| msgid "input file does not appear to be a valid archive\n" msgid "input file does not appear to be a valid archive" msgstr "入力ファイルが有効なアーカイブではないようです" -#: pg_backup_archiver.c:2271 +#: pg_backup_archiver.c:2265 #, c-format -#| msgid "could not close input file: %s\n" msgid "could not close input file: %m" msgstr "入力ファイルをクローズできませんでした: %m" -#: pg_backup_archiver.c:2385 +#: pg_backup_archiver.c:2379 #, c-format -#| msgid "unrecognized file format \"%d\"\n" msgid "unrecognized file format \"%d\"" msgstr "認識不能のファイル形式\"%d\"" -#: pg_backup_archiver.c:2467 pg_backup_archiver.c:4475 +#: pg_backup_archiver.c:2461 pg_backup_archiver.c:4473 #, c-format -#| msgid "finished item %d %s %s\n" msgid "finished item %d %s %s" msgstr "項目 %d %s %s の処理が完了" -#: pg_backup_archiver.c:2471 pg_backup_archiver.c:4488 +#: pg_backup_archiver.c:2465 pg_backup_archiver.c:4486 #, c-format -#| msgid "worker process failed: exit code %d\n" msgid "worker process failed: exit code %d" msgstr "ワーカープロセスの処理失敗: 終了コード %d" -#: pg_backup_archiver.c:2591 +#: pg_backup_archiver.c:2585 #, c-format -#| msgid "entry ID %d out of range -- perhaps a corrupt TOC\n" msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "エントリID%dは範囲外です -- おそらくTOCの破損です" -#: pg_backup_archiver.c:2658 +#: pg_backup_archiver.c:2652 #, c-format -#| msgid "tables declared WITH OIDS are not supported" msgid "restoring tables WITH OIDS is not supported anymore" msgstr "WITH OIDSと定義されたテーブルのリストアは今後サポートされません" -#: pg_backup_archiver.c:2740 +#: pg_backup_archiver.c:2734 #, c-format -#| msgid "unrecognized encoding \"%s\"\n" msgid "unrecognized encoding \"%s\"" msgstr "認識不能のエンコーディング\"%s\"" -#: pg_backup_archiver.c:2745 +#: pg_backup_archiver.c:2739 #, c-format -#| msgid "invalid ENCODING item: %s\n" msgid "invalid ENCODING item: %s" msgstr "不正なENCODING項目: %s" -#: pg_backup_archiver.c:2763 +#: pg_backup_archiver.c:2757 #, c-format -#| msgid "invalid STDSTRINGS item: %s\n" msgid "invalid STDSTRINGS item: %s" msgstr "不正なSTDSTRINGS項目: %s" -#: pg_backup_archiver.c:2788 +#: pg_backup_archiver.c:2782 #, c-format -#| msgid "case not found" msgid "schema \"%s\" not found" msgstr "スキーマ \"%s\"が見つかりません" -#: pg_backup_archiver.c:2795 +#: pg_backup_archiver.c:2789 #, c-format -#| msgid "option \"%s\" not found" msgid "table \"%s\" not found" msgstr "テーブル\"%s\"が見つかりません" -#: pg_backup_archiver.c:2802 +#: pg_backup_archiver.c:2796 #, c-format -#| msgid "option \"%s\" not found" msgid "index \"%s\" not found" msgstr "インデックス\"%s\"が見つかりません" -#: pg_backup_archiver.c:2809 +#: pg_backup_archiver.c:2803 #, c-format -#| msgid "option \"%s\" not found" msgid "function \"%s\" not found" msgstr "関数\"%s\"が見つかりません" -#: pg_backup_archiver.c:2816 +#: pg_backup_archiver.c:2810 #, c-format -#| msgid "option \"%s\" not found" msgid "trigger \"%s\" not found" msgstr "トリガ\"%s\"が見つかりません" -#: pg_backup_archiver.c:3195 +#: pg_backup_archiver.c:3202 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "セッションユーザを\"%s\"に設定できませんでした: %s" -#: pg_backup_archiver.c:3533 pg_backup_archiver.c:3691 +#: pg_backup_archiver.c:3341 +#, c-format +msgid "could not set search_path to \"%s\": %s" +msgstr "search_pathを\"%s\"に設定できませんでした: %s" + +#: pg_backup_archiver.c:3403 +#, c-format +msgid "could not set default_tablespace to %s: %s" +msgstr "default_tablespaceを\"%s\"に設定できませんでした: %s" + +#: pg_backup_archiver.c:3448 +#, c-format +msgid "could not set default_table_access_method: %s" +msgstr "default_table_access_methodを設定できませんでした: %s" + +#: pg_backup_archiver.c:3540 pg_backup_archiver.c:3698 #, c-format -#| msgid "WARNING: don't know how to set owner for object type %s\n" msgid "don't know how to set owner for object type \"%s\"" msgstr "オブジェクトタイプ%sに対する所有者の設定方法がわかりません" -#: pg_backup_archiver.c:3795 +#: pg_backup_archiver.c:3802 #, c-format -#| msgid "did not find magic string in file header\n" msgid "did not find magic string in file header" msgstr "ファイルヘッダにマジック文字列がありませんでした" -#: pg_backup_archiver.c:3808 +#: pg_backup_archiver.c:3815 #, c-format -#| msgid "unsupported version (%d.%d) in file header\n" msgid "unsupported version (%d.%d) in file header" msgstr "ファイルヘッダ内のバージョン(%d.%d)はサポートされていません" -#: pg_backup_archiver.c:3813 +#: pg_backup_archiver.c:3820 #, c-format -#| msgid "sanity check on integer size (%lu) failed\n" msgid "sanity check on integer size (%lu) failed" msgstr "整数のサイズ(%lu)に関する健全性検査が失敗しました" -#: pg_backup_archiver.c:3817 +#: pg_backup_archiver.c:3824 #, c-format -#| msgid "" -#| "WARNING: archive was made on a machine with larger integers, some " -#| "operations might fail\n" -msgid "" -"archive was made on a machine with larger integers, some operations might " -"fail" -msgstr "" -"アーカイブはより大きなサイズの整数を持つマシンで作成されました、一部の操作が" -"失敗する可能性があります" +msgid "archive was made on a machine with larger integers, some operations might fail" +msgstr "アーカイブはより大きなサイズの整数を持つマシンで作成されました、一部の操作が失敗する可能性があります" -#: pg_backup_archiver.c:3827 +#: pg_backup_archiver.c:3834 #, c-format -#| msgid "expected format (%d) differs from format found in file (%d)\n" msgid "expected format (%d) differs from format found in file (%d)" msgstr "想定した形式(%d)はファイル内にある形式(%d)と異なります" -#: pg_backup_archiver.c:3843 +#: pg_backup_archiver.c:3850 #, c-format -#| msgid "" -#| "WARNING: archive is compressed, but this installation does not support " -#| "compression -- no data will be available\n" -msgid "" -"archive is compressed, but this installation does not support compression -- " -"no data will be available" -msgstr "" -"アーカイブは圧縮されていますが、このインストールでは圧縮をサポートしていませ" -"ん -- 利用できるデータはありません" +msgid "archive is compressed, but this installation does not support compression -- no data will be available" +msgstr "アーカイブは圧縮されていますが、このインストールでは圧縮をサポートしていません -- 利用できるデータはありません" -#: pg_backup_archiver.c:3861 +#: pg_backup_archiver.c:3868 #, c-format -#| msgid "WARNING: invalid creation date in header\n" msgid "invalid creation date in header" msgstr "ヘッダ内の作成日付が不正です" -#: pg_backup_archiver.c:3998 +#: pg_backup_archiver.c:3996 #, c-format -#| msgid "processing item %d %s %s\n" msgid "processing item %d %s %s" msgstr "項目 %d %s %s を処理しています" -#: pg_backup_archiver.c:4077 +#: pg_backup_archiver.c:4075 #, c-format -#| msgid "entering main parallel loop\n" msgid "entering main parallel loop" msgstr "メインの並列ループに入ります" -#: pg_backup_archiver.c:4088 +#: pg_backup_archiver.c:4086 #, c-format -#| msgid "skipping item %d %s %s\n" msgid "skipping item %d %s %s" msgstr "項目 %d %s %s をスキップしています" -#: pg_backup_archiver.c:4097 +#: pg_backup_archiver.c:4095 #, c-format -#| msgid "launching item %d %s %s\n" msgid "launching item %d %s %s" msgstr "項目 %d %s %s に着手します" -#: pg_backup_archiver.c:4151 +#: pg_backup_archiver.c:4149 #, c-format -#| msgid "finished main parallel loop\n" msgid "finished main parallel loop" msgstr "メインの並列ループが終了しました" -#: pg_backup_archiver.c:4189 +#: pg_backup_archiver.c:4187 #, c-format -#| msgid "processing missed item %d %s %s\n" msgid "processing missed item %d %s %s" msgstr "やり残し項目 %d %s %s を処理しています" -#: pg_backup_archiver.c:4794 +#: pg_backup_archiver.c:4792 #, c-format -#| msgid "table \"%s\" could not be created, will not restore its data\n" msgid "table \"%s\" could not be created, will not restore its data" -msgstr "" -"テーブル\"%s\"を作成できませんでした、このテーブルのデータは復元されません" +msgstr "テーブル\"%s\"を作成できませんでした、このテーブルのデータは復元されません" -#: pg_backup_custom.c:377 pg_backup_null.c:150 +#: pg_backup_custom.c:376 pg_backup_null.c:147 #, c-format -#| msgid "invalid OID for large object\n" msgid "invalid OID for large object" msgstr "ラージオブジェクトのOIDが不正です" -#: pg_backup_custom.c:447 -#, c-format -#| msgid "unrecognized data block type (%d) while searching archive\n" -msgid "unrecognized data block type (%d) while searching archive" -msgstr "アーカイブの探索中に認識不能のデータブロックタイプ(%d)がありました" - -#: pg_backup_custom.c:458 pg_backup_custom.c:818 +#: pg_backup_custom.c:439 pg_backup_custom.c:505 pg_backup_custom.c:630 +#: pg_backup_custom.c:868 pg_backup_tar.c:1086 pg_backup_tar.c:1091 #, c-format -#| msgid "error during file seek: %s\n" msgid "error during file seek: %m" msgstr "ファイルシーク中にエラーがありました: %m" -#: pg_backup_custom.c:467 +#: pg_backup_custom.c:478 #, c-format -#| msgid "" -#| "could not find block ID %d in archive -- possibly due to out-of-order " -#| "restore request, which cannot be handled due to lack of data offsets in " -#| "archive\n" -msgid "" -"could not find block ID %d in archive -- possibly due to out-of-order " -"restore request, which cannot be handled due to lack of data offsets in " -"archive" -msgstr "" -"アーカイブ中にブロックID %d がありません -- おそらくリストア要求が順不同だっ" -"たためですが、アーカイブ中のデータオフセットがないため処理できません" +msgid "data block %d has wrong seek position" +msgstr "データブロック%dのシーク位置が間違っています" -#: pg_backup_custom.c:472 +#: pg_backup_custom.c:495 #, c-format -#| msgid "" -#| "could not find block ID %d in archive -- possibly due to out-of-order " -#| "restore request, which cannot be handled due to non-seekable input file\n" -msgid "" -"could not find block ID %d in archive -- possibly due to out-of-order " -"restore request, which cannot be handled due to non-seekable input file" -msgstr "" -"アーカイブ中にブロックID %d がありません -- おそらくリストア要求が順不同だっ" -"たためですが、入力ファイルがシーク不可なため処理できません" +msgid "unrecognized data block type (%d) while searching archive" +msgstr "アーカイブの探索中に認識不能のデータブロックタイプ(%d)がありました" -#: pg_backup_custom.c:477 +#: pg_backup_custom.c:517 +#, c-format +msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to non-seekable input file" +msgstr "アーカイブ中にブロックID %d がありません -- おそらくリストア要求が順不同だったためですが、入力ファイルがシーク不可なため処理できません" + +#: pg_backup_custom.c:522 #, c-format -#| msgid "could not find block ID %d in archive -- possibly corrupt archive\n" msgid "could not find block ID %d in archive -- possibly corrupt archive" -msgstr "" -"アーカイブ内にブロック ID %d がありませんでした -- おそらくアーカイブが壊れて" -"います" +msgstr "アーカイブ内にブロック ID %d がありませんでした -- おそらくアーカイブが壊れています" -#: pg_backup_custom.c:484 +#: pg_backup_custom.c:529 #, c-format -#| msgid "found unexpected block ID (%d) when reading data -- expected %d\n" msgid "found unexpected block ID (%d) when reading data -- expected %d" msgstr "データ読み込み時に想定外のブロックID(%d)がありました --想定は%d" -#: pg_backup_custom.c:498 +#: pg_backup_custom.c:543 #, c-format -#| msgid "unrecognized data block type %d while restoring archive\n" msgid "unrecognized data block type %d while restoring archive" msgstr "アーカイブのりストア中に認識不可のデータブロックタイプ%dがありました" -#: pg_backup_custom.c:580 +#: pg_backup_custom.c:646 #, c-format -#| msgid "could not read from input file: %s\n" msgid "could not read from input file: %m" msgstr "入力ファイルから読み込めませんでした: %m" -#: pg_backup_custom.c:698 pg_backup_custom.c:751 pg_backup_custom.c:891 -#: pg_backup_tar.c:1091 +#: pg_backup_custom.c:749 pg_backup_custom.c:801 pg_backup_custom.c:946 +#: pg_backup_tar.c:1089 #, c-format -#| msgid "could not determine seek position in archive file: %s\n" msgid "could not determine seek position in archive file: %m" msgstr "アーカイブファイルのシーク位置を決定できませんでした: %m" -#: pg_backup_custom.c:715 pg_backup_custom.c:755 +#: pg_backup_custom.c:765 pg_backup_custom.c:805 #, c-format -#| msgid "could not close archive file: %s\n" msgid "could not close archive file: %m" msgstr "アーカイブファイルをクローズできませんでした: %m" -#: pg_backup_custom.c:738 +#: pg_backup_custom.c:788 #, c-format -#| msgid "can only reopen input archives\n" msgid "can only reopen input archives" msgstr "入力アーカイブだけが再オープン可能です" -#: pg_backup_custom.c:745 +#: pg_backup_custom.c:795 #, c-format -#| msgid "parallel restore from standard input is not supported\n" msgid "parallel restore from standard input is not supported" msgstr "標準入力からの並列リストアはサポートされていません" -#: pg_backup_custom.c:747 +#: pg_backup_custom.c:797 #, c-format -#| msgid "parallel restore from non-seekable file is not supported\n" msgid "parallel restore from non-seekable file is not supported" msgstr "シーク不可のファイルからの並列リストアはサポートされていません" -#: pg_backup_custom.c:763 +#: pg_backup_custom.c:813 #, c-format -#| msgid "could not set seek position in archive file: %s\n" msgid "could not set seek position in archive file: %m" msgstr "アーカイブファイルのシークができませんでした: %m" -#: pg_backup_custom.c:839 +#: pg_backup_custom.c:892 #, c-format -#| msgid "compressor active\n" msgid "compressor active" msgstr "圧縮処理が有効です" -#: pg_backup_custom.c:894 +#: pg_backup_db.c:42 #, c-format -#| msgid "WARNING: ftell mismatch with expected position -- ftell used\n" -msgid "ftell mismatch with expected position -- ftell used" -msgstr "ftellが想定位置と一致していません -- ftellの結果を使用します" - -#: pg_backup_db.c:44 -#, c-format -#| msgid "could not get server_version from libpq\n" msgid "could not get server_version from libpq" msgstr "libpqからserver_versionを取得できませんでした" -#: pg_backup_db.c:55 pg_dumpall.c:1819 +#: pg_backup_db.c:53 pg_dumpall.c:1826 #, c-format -#| msgid "server version: %s; %s version: %s\n" msgid "server version: %s; %s version: %s" msgstr "サーババージョン: %s、%s バージョン: %s" -#: pg_backup_db.c:57 pg_dumpall.c:1821 +#: pg_backup_db.c:55 pg_dumpall.c:1828 #, c-format -#| msgid "aborting because of server version mismatch\n" msgid "aborting because of server version mismatch" msgstr "サーババージョンの不一致のため処理を中断します" -#: pg_backup_db.c:140 +#: pg_backup_db.c:138 #, c-format -#| msgid "connecting to database \"%s\" as user \"%s\"\n" msgid "connecting to database \"%s\" as user \"%s\"" msgstr "データベース\"%s\"にユーザ\"%s\"で接続しています" -#: pg_backup_db.c:147 pg_backup_db.c:196 pg_backup_db.c:257 pg_backup_db.c:298 -#: pg_dumpall.c:1644 pg_dumpall.c:1757 +#: pg_backup_db.c:145 pg_backup_db.c:194 pg_backup_db.c:255 pg_backup_db.c:296 +#: pg_dumpall.c:1651 pg_dumpall.c:1764 msgid "Password: " msgstr "パスワード: " -#: pg_backup_db.c:179 +#: pg_backup_db.c:177 #, c-format -#| msgid "failed to reconnect to database\n" -msgid "failed to reconnect to database" -msgstr "データベースへの再接続に失敗しました" +msgid "could not reconnect to database" +msgstr "データベースへの再接続ができませんでした" -#: pg_backup_db.c:184 +#: pg_backup_db.c:182 #, c-format msgid "could not reconnect to database: %s" msgstr "データベース%sへの再接続ができませんでした" -#: pg_backup_db.c:200 +#: pg_backup_db.c:198 #, c-format -#| msgid "connection needs password\n" msgid "connection needs password" msgstr "接続にパスワードが必要です" -#: pg_backup_db.c:251 +#: pg_backup_db.c:249 #, c-format -#| msgid "already connected to a database\n" msgid "already connected to a database" msgstr "データベースはすでに接続済みです" -#: pg_backup_db.c:290 +#: pg_backup_db.c:288 #, c-format -#| msgid "failed to connect to database\n" -msgid "failed to connect to database" -msgstr "データベースへの接続に失敗しました" +msgid "could not connect to database" +msgstr "データベースへの接続ができませんでした" -#: pg_backup_db.c:306 +#: pg_backup_db.c:304 #, c-format msgid "connection to database \"%s\" failed: %s" msgstr "データベース\"%s\"への接続が失敗しました: %s" -#: pg_backup_db.c:378 pg_dumpall.c:1677 +#: pg_backup_db.c:376 pg_dumpall.c:1684 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:385 pg_dumpall.c:1882 pg_dumpall.c:1905 +#: pg_backup_db.c:383 pg_dumpall.c:1889 pg_dumpall.c:1912 #, c-format msgid "query failed: %s" msgstr "問い合わせが失敗しました: %s" -#: pg_backup_db.c:387 pg_dumpall.c:1883 pg_dumpall.c:1906 +#: pg_backup_db.c:385 pg_dumpall.c:1890 pg_dumpall.c:1913 #, c-format -#| msgid "query was: %s\n" msgid "query was: %s" msgstr "問い合わせ: %s" -#: pg_backup_db.c:428 +#: pg_backup_db.c:426 #, c-format -#| msgid "query returned %d row instead of one: %s\n" -#| msgid_plural "query returned %d rows instead of one: %s\n" msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" msgstr[0] "問い合わせが1行ではなく%d行返しました: %s" msgstr[1] "問い合わせが1行ではなく%d行返しました: %s" -#: pg_backup_db.c:520 pg_backup_db.c:594 pg_backup_db.c:601 +#: pg_backup_db.c:462 +#, c-format +msgid "%s: %sCommand was: %s" +msgstr "%s: %sコマンド: %s" + +#: pg_backup_db.c:518 pg_backup_db.c:592 pg_backup_db.c:599 msgid "could not execute query" msgstr "問い合わせを実行できませんでした" -#: pg_backup_db.c:573 +#: pg_backup_db.c:571 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "PQputCopyData からエラーが返されました: %s" -#: pg_backup_db.c:622 +#: pg_backup_db.c:620 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "PQputCopyEnd からエラーが返されました: %s" -#: pg_backup_db.c:634 pg_dump.c:1924 +#: pg_backup_db.c:626 +#, c-format +msgid "COPY failed for table \"%s\": %s" +msgstr "テーブル\"%s\"へのコピーに失敗しました: %s" + +#: pg_backup_db.c:632 pg_dump.c:1984 #, c-format -#| msgid "unexpected EOF while reading file \"%s\"\n" msgid "unexpected extra results during COPY of table \"%s\"" msgstr "ファイル\"%s\"をCOPY中に想定していない余分な結果がありました" -#: pg_backup_db.c:646 +#: pg_backup_db.c:644 msgid "could not start database transaction" msgstr "データベーストランザクションを開始できませんでした" -#: pg_backup_db.c:654 +#: pg_backup_db.c:652 msgid "could not commit database transaction" msgstr "データベーストランザクションをコミットできませんでした" #: pg_backup_directory.c:156 #, c-format -#| msgid "no output directory specified\n" msgid "no output directory specified" msgstr "出力ディレクトリが指定されていません" @@ -1307,7 +1090,6 @@ msgstr "ディレクトリ\"%s\"を読み取れませんでした: %m" #: pg_backup_directory.c:189 #, c-format -#| msgid "could not close directory \"%s\": %s\n" msgid "could not close directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をクローズできませんでした: %m" @@ -1316,281 +1098,224 @@ msgstr "ディレクトリ\"%s\"をクローズできませんでした: %m" msgid "could not create directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を作成できませんでした: %m" -#: pg_backup_directory.c:350 pg_backup_directory.c:488 -#: pg_backup_directory.c:518 +#: pg_backup_directory.c:355 pg_backup_directory.c:496 +#: pg_backup_directory.c:532 #, c-format -#| msgid "could not write to output file: %s\n" msgid "could not write to output file: %s" msgstr "出力ファイルに書き込めませんでした: %s" -#: pg_backup_directory.c:403 +#: pg_backup_directory.c:406 #, c-format -#| msgid "could not close data file: %s\n" -msgid "could not close data file: %m" -msgstr "データファイルをクローズできませんでした: %m" +msgid "could not close data file \"%s\": %m" +msgstr "データファイル\"%s\"をクローズできませんでした: %m" -#: pg_backup_directory.c:443 +#: pg_backup_directory.c:446 #, c-format -#| msgid "could not open large object TOC file \"%s\" for input: %s\n" msgid "could not open large object TOC file \"%s\" for input: %m" -msgstr "" -"ラージオブジェクトTOCファイル\"%s\"を入力用としてオープンできませんでした: %m" +msgstr "ラージオブジェクトTOCファイル\"%s\"を入力用としてオープンできませんでした: %m" -#: pg_backup_directory.c:454 +#: pg_backup_directory.c:457 #, c-format -#| msgid "invalid line in large object TOC file \"%s\": \"%s\"\n" msgid "invalid line in large object TOC file \"%s\": \"%s\"" msgstr "ラージオブジェクトTOCファイル\"%s\"の中に不正な行がありました: \"%s\"" -#: pg_backup_directory.c:463 +#: pg_backup_directory.c:466 #, c-format -#| msgid "error reading large object TOC file \"%s\"\n" msgid "error reading large object TOC file \"%s\"" msgstr "ラージオブジェクトTOCファイル\"%s\"の読み取り中にエラーがありました" -#: pg_backup_directory.c:467 +#: pg_backup_directory.c:470 #, c-format -#| msgid "could not close large object TOC file \"%s\": %s\n" msgid "could not close large object TOC file \"%s\": %m" msgstr "ラージオブジェクトTOCファイル\"%s\"をクローズできませんでした: %m" -#: pg_backup_directory.c:678 +#: pg_backup_directory.c:689 #, c-format -#| msgid "could not write to blobs TOC file\n" msgid "could not write to blobs TOC file" msgstr "blobs TOCファイルに書き出せませんでした" -#: pg_backup_directory.c:710 +#: pg_backup_directory.c:721 #, c-format -#| msgid "file name too long: \"%s\"\n" msgid "file name too long: \"%s\"" msgstr "ファイル名が長すぎます: \"%s\"" -#: pg_backup_null.c:75 +#: pg_backup_null.c:74 #, c-format -#| msgid "this format cannot be read\n" msgid "this format cannot be read" msgstr "この形式は読み込めません" #: pg_backup_tar.c:177 #, c-format -#| msgid "could not open TOC file \"%s\" for output: %s\n" msgid "could not open TOC file \"%s\" for output: %m" msgstr "TOCファイル\"%s\"を出力用にオープンできませんでした: %m" #: pg_backup_tar.c:184 #, c-format -#| msgid "could not open TOC file for output: %s\n" msgid "could not open TOC file for output: %m" msgstr "TOCファイルを出力用にオープンできませんでした: %m" #: pg_backup_tar.c:203 pg_backup_tar.c:358 #, c-format -#| msgid "compression is not supported by tar archive format\n" msgid "compression is not supported by tar archive format" msgstr "tar アーカイブ形式では圧縮をサポートしていません" #: pg_backup_tar.c:211 #, c-format -#| msgid "could not open TOC file \"%s\" for input: %s\n" msgid "could not open TOC file \"%s\" for input: %m" msgstr "TOCファイル\"%s\"を入力用にオープンできませんでした: %m" #: pg_backup_tar.c:218 #, c-format -#| msgid "could not open TOC file for input: %s\n" msgid "could not open TOC file for input: %m" msgstr "TOCファイルを入力用にオープンできませんでした: %m" #: pg_backup_tar.c:344 #, c-format -#| msgid "could not find file \"%s\" in archive\n" msgid "could not find file \"%s\" in archive" msgstr "アーカイブ内にファイル\"%s\"がありませんでした" #: pg_backup_tar.c:410 #, c-format -#| msgid "could not generate temporary file name: %s\n" msgid "could not generate temporary file name: %m" msgstr "一時ファイル名を生成できませんでした: %m" #: pg_backup_tar.c:421 #, c-format -#| msgid "could not open temporary file\n" msgid "could not open temporary file" msgstr "一時ファイルをオープンできませんでした" #: pg_backup_tar.c:448 #, c-format -#| msgid "could not close tar member\n" msgid "could not close tar member" msgstr "tarメンバをクローズできませんでした" -#: pg_backup_tar.c:571 -#, c-format -msgid "internal error -- neither th nor fh specified in tarReadRaw()\n" -msgstr "内部エラー -- tarReadRaw()にてthもfhも指定されていませんでした\n" - -#: pg_backup_tar.c:693 +#: pg_backup_tar.c:691 #, c-format -#| msgid "unexpected COPY statement syntax: \"%s\"\n" msgid "unexpected COPY statement syntax: \"%s\"" msgstr "想定外のCOPY文の構文: \"%s\"" -#: pg_backup_tar.c:961 +#: pg_backup_tar.c:958 #, c-format -#| msgid "invalid OID for large object (%u)\n" msgid "invalid OID for large object (%u)" msgstr "ラージオブジェクトの不正なOID(%u)" -#: pg_backup_tar.c:1106 +#: pg_backup_tar.c:1105 #, c-format -#| msgid "could not close temporary file: %s\n" msgid "could not close temporary file: %m" msgstr "一時ファイルを開けませんでした: %m" -#: pg_backup_tar.c:1115 +#: pg_backup_tar.c:1114 #, c-format -#| msgid "actual file length (%s) does not match expected (%s)\n" msgid "actual file length (%s) does not match expected (%s)" msgstr "実際の長さ(%s)が想定(%s)と一致しません" -#: pg_backup_tar.c:1172 pg_backup_tar.c:1202 +#: pg_backup_tar.c:1171 pg_backup_tar.c:1202 #, c-format -#| msgid "could not find header for file \"%s\" in tar archive\n" msgid "could not find header for file \"%s\" in tar archive" msgstr "tar アーカイブ内でファイル\"%s\"のヘッダがありませんでした" -#: pg_backup_tar.c:1190 +#: pg_backup_tar.c:1189 #, c-format -#| msgid "" -#| "restoring data out of order is not supported in this archive format: \"%s" -#| "\" is required, but comes before \"%s\" in the archive file.\n" -msgid "" -"restoring data out of order is not supported in this archive format: \"%s\" " -"is required, but comes before \"%s\" in the archive file." -msgstr "" -"このアーカイブ形式では、順不同でのデータのリストアはサポートされていません: " -"\"%s\"は必要ですが、アーカイブファイル内で\"%s\"より前に来ました。" +msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file." +msgstr "このアーカイブ形式では、順不同でのデータのリストアはサポートされていません: \"%s\"は必要ですが、アーカイブファイル内で\"%s\"より前に来ました。" -#: pg_backup_tar.c:1235 +#: pg_backup_tar.c:1236 #, c-format -#| msgid "incomplete tar header found (%lu byte)\n" -#| msgid_plural "incomplete tar header found (%lu bytes)\n" msgid "incomplete tar header found (%lu byte)" msgid_plural "incomplete tar header found (%lu bytes)" msgstr[0] "不完全なtarヘッダがありました(%luバイト)" msgstr[1] "不完全なtarヘッダがありました(%luバイト)" -#: pg_backup_tar.c:1286 +#: pg_backup_tar.c:1287 #, c-format -#| msgid "" -#| "corrupt tar header found in %s (expected %d, computed %d) file position " -#| "%s\n" -msgid "" -"corrupt tar header found in %s (expected %d, computed %d) file position %s" -msgstr "" -"破損したtarヘッダが%sにありました(想定 %d、算出結果 %d) ファイル位置 %s" +msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s" +msgstr "破損したtarヘッダが%sにありました(想定 %d、算出結果 %d) ファイル位置 %s" #: pg_backup_utils.c:54 #, c-format -#| msgid "%s: unrecognized section name: \"%s\"\n" msgid "unrecognized section name: \"%s\"" msgstr "認識不可のセクション名: \"%s\"" -#: pg_backup_utils.c:55 pg_dump.c:611 pg_dump.c:628 pg_dumpall.c:333 -#: pg_dumpall.c:343 pg_dumpall.c:352 pg_dumpall.c:361 pg_dumpall.c:369 -#: pg_dumpall.c:383 pg_dumpall.c:459 pg_restore.c:288 pg_restore.c:304 -#: pg_restore.c:322 +#: pg_backup_utils.c:55 pg_dump.c:608 pg_dump.c:625 pg_dumpall.c:338 +#: pg_dumpall.c:348 pg_dumpall.c:357 pg_dumpall.c:366 pg_dumpall.c:374 +#: pg_dumpall.c:388 pg_dumpall.c:464 pg_restore.c:284 pg_restore.c:300 +#: pg_restore.c:318 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細は \"%s --help\" を実行してください\n" #: pg_backup_utils.c:68 #, c-format -#| msgid "out of on_exit_nicely slots\n" msgid "out of on_exit_nicely slots" msgstr "on_exit_nicelyスロットが足りません" -#: pg_dump.c:542 +#: pg_dump.c:534 #, c-format msgid "compression level must be in range 0..9" msgstr "圧縮レベルは 0..9 の範囲でなければなりません" -#: pg_dump.c:580 +#: pg_dump.c:572 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digitsは -15..3 の範囲でなければなりません" -#: pg_dump.c:603 +#: pg_dump.c:595 #, c-format -#| msgid "Value must be in the range %d to %d." msgid "rows-per-insert must be in range %d..%d" msgstr "rows-per-insertは%d..%dの範囲でなければなりません" -#: pg_dump.c:626 pg_dumpall.c:341 pg_restore.c:302 +#: pg_dump.c:623 pg_dumpall.c:346 pg_restore.c:298 #, c-format -#| msgid "%s: too many command-line arguments (first is \"%s\")\n" msgid "too many command-line arguments (first is \"%s\")" msgstr "コマンドライン引数が多すぎます(先頭は\"%s\")" -#: pg_dump.c:647 pg_restore.c:331 +#: pg_dump.c:644 pg_restore.c:327 #, c-format -#| msgid "" -#| "options -s/--schema-only and -a/--data-only cannot be used together\n" msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "-s/--schema-only と -a/--data-only オプションは同時には使用できません" -#: pg_dump.c:653 pg_restore.c:337 +#: pg_dump.c:649 +#, c-format +msgid "options -s/--schema-only and --include-foreign-data cannot be used together" +msgstr "-s/--schema-only と --include-foreign-data オプションは同時には使用できません" + +#: pg_dump.c:652 +#, c-format +msgid "option --include-foreign-data is not supported with parallel backup" +msgstr "オプション --include-foreign-data はパラレルバックアップではサポートされません" + +#: pg_dump.c:656 pg_restore.c:333 #, c-format -#| msgid "options -c/--clean and -a/--data-only cannot be used together\n" msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "-c/--clean と -a/--data-only オプションは同時には使用できません" -#: pg_dump.c:658 pg_dumpall.c:376 pg_restore.c:386 +#: pg_dump.c:661 pg_dumpall.c:381 pg_restore.c:382 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "--if-existsは -c/--clean の指定が必要です" -#: pg_dump.c:665 +#: pg_dump.c:668 #, c-format -msgid "" -"option --on-conflict-do-nothing requires option --inserts, --rows-per-insert " -"or --column-inserts" -msgstr "" -"--on-conflict-do-nothingオプションは--inserts、--rows-per-insert または --" -"column-insertsを必要とします" +msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" +msgstr "--on-conflict-do-nothingオプションは--inserts、--rows-per-insert または --column-insertsを必要とします" -#: pg_dump.c:687 +#: pg_dump.c:690 #, c-format -#| msgid "" -#| "WARNING: requested compression not available in this installation -- " -#| "archive will be uncompressed\n" -msgid "" -"requested compression not available in this installation -- archive will be " -"uncompressed" -msgstr "" -"圧縮が要求されましたがこのインストールでは利用できません -- アーカイブは圧縮" -"されません" +msgid "requested compression not available in this installation -- archive will be uncompressed" +msgstr "圧縮が要求されましたがこのインストールでは利用できません -- アーカイブは圧縮されません" -#: pg_dump.c:708 pg_restore.c:353 +#: pg_dump.c:711 pg_restore.c:349 #, c-format -#| msgid "%s: invalid number of parallel jobs\n" msgid "invalid number of parallel jobs" msgstr "不正な並列ジョブ数" -#: pg_dump.c:712 +#: pg_dump.c:715 #, c-format -#| msgid "parallel backup only supported by the directory format\n" msgid "parallel backup only supported by the directory format" msgstr "並列バックアップはディレクトリ形式でのみサポートされます" -#: pg_dump.c:767 +#: pg_dump.c:770 #, c-format -#| msgid "" -#| "Synchronized snapshots are not supported by this server version.\n" -#| "Run with --no-synchronized-snapshots instead if you do not need\n" -#| "synchronized snapshots.\n" msgid "" "Synchronized snapshots are not supported by this server version.\n" "Run with --no-synchronized-snapshots instead if you do not need\n" @@ -1600,32 +1325,27 @@ msgstr "" "同期スナップショットが不要ならば--no-synchronized-snapshotsを付けて\n" "実行してください。" -#: pg_dump.c:773 +#: pg_dump.c:776 #, c-format -#| msgid "collations are not supported by type %s" msgid "Exported snapshots are not supported by this server version." -msgstr "" -"スナップショットのエクスポートはこのサーババージョンではサポートされません" +msgstr "スナップショットのエクスポートはこのサーババージョンではサポートされません" -#: pg_dump.c:785 +#: pg_dump.c:788 #, c-format -#| msgid "last built-in OID is %u\n" msgid "last built-in OID is %u" msgstr "最後の組み込みOIDは%u" -#: pg_dump.c:794 +#: pg_dump.c:797 #, c-format -#| msgid "No matching schemas were found\n" msgid "no matching schemas were found" msgstr "マッチするスキーマが見つかりません" -#: pg_dump.c:808 +#: pg_dump.c:811 #, c-format -#| msgid "No matching tables were found\n" msgid "no matching tables were found" msgstr "マッチするテーブルが見つかりません" -#: pg_dump.c:980 +#: pg_dump.c:986 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1634,17 +1354,17 @@ msgstr "" "%sはデータベースをテキストファイルまたはその他の形式でダンプします。\n" "\n" -#: pg_dump.c:981 pg_dumpall.c:612 pg_restore.c:466 +#: pg_dump.c:987 pg_dumpall.c:617 pg_restore.c:462 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: pg_dump.c:982 +#: pg_dump.c:988 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [DBNAME]\n" -#: pg_dump.c:984 pg_dumpall.c:615 pg_restore.c:469 +#: pg_dump.c:990 pg_dumpall.c:620 pg_restore.c:465 #, c-format msgid "" "\n" @@ -1653,12 +1373,12 @@ msgstr "" "\n" "一般的なオプション;\n" -#: pg_dump.c:985 +#: pg_dump.c:991 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=ファイル名 出力ファイルまたはディレクトリの名前\n" -#: pg_dump.c:986 +#: pg_dump.c:992 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1667,50 +1387,42 @@ msgstr "" " -F, --format=c|d|t|p 出力ファイルの形式(custom, directory, tar, \n" " plain text(デフォルト))\n" -#: pg_dump.c:988 +#: pg_dump.c:994 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM ダンプ時に指定した数の並列ジョブを使用\n" -#: pg_dump.c:989 pg_dumpall.c:617 +#: pg_dump.c:995 pg_dumpall.c:622 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose 冗長モード\n" -#: pg_dump.c:990 pg_dumpall.c:618 +#: pg_dump.c:996 pg_dumpall.c:623 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_dump.c:991 +#: pg_dump.c:997 #, c-format -msgid "" -" -Z, --compress=0-9 compression level for compressed formats\n" +msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 圧縮形式における圧縮レベル\n" -#: pg_dump.c:992 pg_dumpall.c:619 +#: pg_dump.c:998 pg_dumpall.c:624 #, c-format -msgid "" -" --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" +msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr " --lock-wait-timeout=TIMEOUT テーブルロックをTIMEOUT待ってから失敗\n" -#: pg_dump.c:993 pg_dumpall.c:646 +#: pg_dump.c:999 pg_dumpall.c:651 #, c-format -#| msgid "" -#| " -N, --nosync do not wait for changes to be written safely " -#| "to disk\n" -msgid "" -" --no-sync do not wait for changes to be written safely " -"to disk\n" -msgstr "" -" --no-sync 変更のディスクへの安全な書き出しを待機しない\n" +msgid " --no-sync do not wait for changes to be written safely to disk\n" +msgstr " --no-sync 変更のディスクへの安全な書き出しを待機しない\n" -#: pg_dump.c:994 pg_dumpall.c:620 +#: pg_dump.c:1000 pg_dumpall.c:625 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_dump.c:996 pg_dumpall.c:621 +#: pg_dump.c:1002 pg_dumpall.c:626 #, c-format msgid "" "\n" @@ -1719,55 +1431,47 @@ msgstr "" "\n" "出力内容を制御するためのオプション:\n" -#: pg_dump.c:997 pg_dumpall.c:622 +#: pg_dump.c:1003 pg_dumpall.c:627 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" -msgstr "" -" -a, --data-only データのみをダンプし、スキーマをダンプしない\n" +msgstr " -a, --data-only データのみをダンプし、スキーマをダンプしない\n" -#: pg_dump.c:998 +#: pg_dump.c:1004 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs ダンプにラージオブジェクトを含める\n" -#: pg_dump.c:999 +#: pg_dump.c:1005 #, c-format -#| msgid " -b, --blobs include large objects in dump\n" msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs ダンプにラージオブジェクトを含めない\n" -#: pg_dump.c:1000 pg_restore.c:480 +#: pg_dump.c:1006 pg_restore.c:476 #, c-format -msgid "" -" -c, --clean clean (drop) database objects before " -"recreating\n" -msgstr "" -" -c, --clean 再作成前にデータベースオブジェクトを整理(削" -"除)\n" +msgid " -c, --clean clean (drop) database objects before recreating\n" +msgstr " -c, --clean 再作成前にデータベースオブジェクトを整理(削除)\n" -#: pg_dump.c:1001 +#: pg_dump.c:1007 #, c-format -msgid "" -" -C, --create include commands to create database in dump\n" -msgstr "" -" -C, --create ダンプにデータベース生成用コマンドを含める\n" +msgid " -C, --create include commands to create database in dump\n" +msgstr " -C, --create ダンプにデータベース生成用コマンドを含める\n" -#: pg_dump.c:1002 pg_dumpall.c:624 +#: pg_dump.c:1008 pg_dumpall.c:629 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=ENCODING ENCODING符号化方式でデータをダンプ\n" -#: pg_dump.c:1003 +#: pg_dump.c:1009 #, c-format -msgid " -n, --schema=SCHEMA dump the named schema(s) only\n" -msgstr " -n, --schema=SCHEMA 指名したスキーマのみをダンプ\n" +msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" +msgstr " -n, --schema=SCHEMA 指定したスキーマのみをダンプ\n" -#: pg_dump.c:1004 +#: pg_dump.c:1010 #, c-format -msgid " -N, --exclude-schema=SCHEMA do NOT dump the named schema(s)\n" -msgstr " -N, --exclude-schema=SCHEMA 指名されたスキーマをダンプしない\n" +msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" +msgstr " -N, --exclude-schema=SCHEMA 指定したスキーマをダンプしない\n" -#: pg_dump.c:1005 +#: pg_dump.c:1011 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1776,233 +1480,188 @@ msgstr "" " -O, --no-owner プレインテキスト形式で、オブジェクト所有権の\n" " 復元を行わない\n" -#: pg_dump.c:1007 pg_dumpall.c:628 +#: pg_dump.c:1013 pg_dumpall.c:633 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" -msgstr "" -" -s, --schema-only スキーマのみをダンプし、データはダンプしない\n" +msgstr " -s, --schema-only スキーマのみをダンプし、データはダンプしない\n" -#: pg_dump.c:1008 +#: pg_dump.c:1014 #, c-format -msgid "" -" -S, --superuser=NAME superuser user name to use in plain-text " -"format\n" -msgstr "" -" -S, --superuser=NAME プレインテキスト形式で使用するスーパユーザの" -"名前\n" +msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" +msgstr " -S, --superuser=NAME プレインテキスト形式で使用するスーパユーザの名前\n" -#: pg_dump.c:1009 +#: pg_dump.c:1015 #, c-format -msgid " -t, --table=TABLE dump the named table(s) only\n" -msgstr " -t, --table=TABLE 指定したテーブルのみをダンプ\n" +msgid " -t, --table=PATTERN dump the specified table(s) only\n" +msgstr " -t, --table=PATTERN 指定したテーブルのみをダンプ\n" -#: pg_dump.c:1010 +#: pg_dump.c:1016 #, c-format -msgid " -T, --exclude-table=TABLE do NOT dump the named table(s)\n" -msgstr " -T, --exclude-table=TABLE 指定したテーブルをダンプしない\n" +msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" +msgstr " -T, --exclude-table=PATTERN 指定したテーブルをダンプしない\n" -#: pg_dump.c:1011 pg_dumpall.c:631 +#: pg_dump.c:1017 pg_dumpall.c:636 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges 権限(grant/revoke)をダンプしない\n" -#: pg_dump.c:1012 pg_dumpall.c:632 +#: pg_dump.c:1018 pg_dumpall.c:637 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade アップグレードユーティリティ専用\n" -#: pg_dump.c:1013 pg_dumpall.c:633 +#: pg_dump.c:1019 pg_dumpall.c:638 #, c-format -msgid "" -" --column-inserts dump data as INSERT commands with column " -"names\n" -msgstr "" -" --column-inserts 列名指定のINSERTコマンドでデータをダンプ\n" +msgid " --column-inserts dump data as INSERT commands with column names\n" +msgstr " --column-inserts 列名指定のINSERTコマンドでデータをダンプ\n" -#: pg_dump.c:1014 pg_dumpall.c:634 +#: pg_dump.c:1020 pg_dumpall.c:639 #, c-format -msgid "" -" --disable-dollar-quoting disable dollar quoting, use SQL standard " -"quoting\n" +msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr "" -" --disable-dollar-quoting ドル記号による引用符付けを禁止、SQL標準の引用" -"符\n" +" --disable-dollar-quoting ドル記号による引用符付けを禁止、SQL標準の引用符\n" " 付けを使用\n" -#: pg_dump.c:1015 pg_dumpall.c:635 pg_restore.c:497 +#: pg_dump.c:1021 pg_dumpall.c:640 pg_restore.c:493 #, c-format -msgid "" -" --disable-triggers disable triggers during data-only restore\n" -msgstr "" -" --disable-triggers データのみのリストアの際にトリガを無効化\n" +msgid " --disable-triggers disable triggers during data-only restore\n" +msgstr " --disable-triggers データのみのリストアの際にトリガを無効化\n" -#: pg_dump.c:1016 +#: pg_dump.c:1022 #, c-format msgid "" -" --enable-row-security enable row security (dump only content user " -"has\n" +" --enable-row-security enable row security (dump only content user has\n" " access to)\n" msgstr "" " --enable-row-security 行セキュリティを有効化(ユーザがアクセス可能な\n" " 内容のみをダンプ)\n" -#: pg_dump.c:1018 +#: pg_dump.c:1024 #, c-format -msgid "" -" --exclude-table-data=TABLE do NOT dump data for the named table(s)\n" -msgstr " --exclude-table-data=TABLE 指定したテーブルのデータをダンプしない\n" +msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" +msgstr " --exclude-table-data=PATTERN 指定したテーブルのデータをダンプしない\n" -#: pg_dump.c:1019 pg_dumpall.c:637 +#: pg_dump.c:1025 pg_dumpall.c:642 #, c-format -msgid "" -" --extra-float-digits=NUM override default setting for " -"extra_float_digits\n" +msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=NUM extra_float_digitsの設定を上書きする\n" -#: pg_dump.c:1020 pg_dumpall.c:638 pg_restore.c:499 +#: pg_dump.c:1026 pg_dumpall.c:643 pg_restore.c:495 #, c-format -#| msgid "" -#| " --if-exists don't report error if user doesn't exist\n" msgid " --if-exists use IF EXISTS when dropping objects\n" -msgstr "" -" --if-exists オブジェクト削除の際に IF EXISTS を使用\n" +msgstr " --if-exists オブジェクト削除の際に IF EXISTS を使用\n" -#: pg_dump.c:1021 pg_dumpall.c:639 +#: pg_dump.c:1027 #, c-format msgid "" -" --inserts dump data as INSERT commands, rather than " -"COPY\n" +" --include-foreign-data=PATTERN\n" +" include data of foreign tables on foreign\n" +" servers matching PATTERN\n" msgstr "" -" --inserts COPYではなくINSERTコマンドでデータをダンプ\n" +" --include-foreign-data=PATTERN\n" +" PATTERNに合致する外部サーバ上の外部テーブルの\n" +" データを含める\n" + +#: pg_dump.c:1030 pg_dumpall.c:644 +#, c-format +msgid " --inserts dump data as INSERT commands, rather than COPY\n" +msgstr " --inserts COPYではなくINSERTコマンドでデータをダンプ\n" -#: pg_dump.c:1022 pg_dumpall.c:640 +#: pg_dump.c:1031 pg_dumpall.c:645 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" -msgstr "" -" --load-via-partition-root 子テーブルをルートテーブル経由でロードする\n" +msgstr " --load-via-partition-root 子テーブルをルートテーブル経由でロードする\n" -#: pg_dump.c:1023 pg_dumpall.c:641 +#: pg_dump.c:1032 pg_dumpall.c:646 #, c-format -#| msgid " --no-tablespaces do not dump tablespace assignments\n" msgid " --no-comments do not dump comments\n" msgstr " --no-comments コメントをダンプしない\n" -#: pg_dump.c:1024 pg_dumpall.c:642 +#: pg_dump.c:1033 pg_dumpall.c:647 #, c-format -#| msgid " --no-replication role cannot initiate replication\n" msgid " --no-publications do not dump publications\n" msgstr " --no-publications パブリケーションをダンプしない\n" -#: pg_dump.c:1025 pg_dumpall.c:644 +#: pg_dump.c:1034 pg_dumpall.c:649 #, c-format msgid " --no-security-labels do not dump security label assignments\n" -msgstr "" -" --no-security-labels セキュリティラベルの割り当てをダンプしない\n" +msgstr " --no-security-labels セキュリティラベルの割り当てをダンプしない\n" -#: pg_dump.c:1026 pg_dumpall.c:645 +#: pg_dump.c:1035 pg_dumpall.c:650 #, c-format -#| msgid "" -#| " --no-security-labels do not dump security label assignments\n" msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions サブスクリプションをダンプしない\n" -#: pg_dump.c:1027 +#: pg_dump.c:1036 #, c-format -msgid "" -" --no-synchronized-snapshots do not use synchronized snapshots in parallel " -"jobs\n" -msgstr "" -" --no-synchronized-snapshots 並列ジョブにおいて同期スナップショットを使用し" -"ない\n" +msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" +msgstr " --no-synchronized-snapshots 並列ジョブにおいて同期スナップショットを使用しない\n" -#: pg_dump.c:1028 pg_dumpall.c:647 +#: pg_dump.c:1037 pg_dumpall.c:652 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" -msgstr "" -" --no-tablespaces テーブルスペースの割り当てをダンプしない\n" +msgstr " --no-tablespaces テーブルスペースの割り当てをダンプしない\n" -#: pg_dump.c:1029 pg_dumpall.c:648 +#: pg_dump.c:1038 pg_dumpall.c:653 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data 非ログテーブルのデータをダンプしない\n" -#: pg_dump.c:1030 pg_dumpall.c:649 +#: pg_dump.c:1039 pg_dumpall.c:654 #, c-format -msgid "" -" --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT " -"commands\n" -msgstr "" -" --on-conflict-do-nothing INSERTコマンドにON CONFLICT DO NOTHINGを付加す" -"る\n" +msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" +msgstr " --on-conflict-do-nothing INSERTコマンドにON CONFLICT DO NOTHINGを付加する\n" -#: pg_dump.c:1031 pg_dumpall.c:650 +#: pg_dump.c:1040 pg_dumpall.c:655 #, c-format -msgid "" -" --quote-all-identifiers quote all identifiers, even if not key words\n" +msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers すべての識別子をキーワードでなかったとしても\n" " 引用符でくくる\n" -#: pg_dump.c:1032 +#: pg_dump.c:1041 pg_dumpall.c:656 #, c-format -msgid "" -" --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" -msgstr "" -" --rows-per-insert=NROWS INSERT毎の行数; --insertsを暗黙的に指定する\n" +msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" +msgstr " --rows-per-insert=NROWS INSERT毎の行数; --insertsを暗黙的に指定する\n" -#: pg_dump.c:1033 +#: pg_dump.c:1042 #, c-format -msgid "" -" --section=SECTION dump named section (pre-data, data, or post-" -"data)\n" +msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr "" -" --section=SECTION 指定したセクション(データ前、データ、データ後)" -"を\n" +" --section=SECTION 指定したセクション(データ前、データ、データ後)を\n" " ダンプする\n" -#: pg_dump.c:1034 +#: pg_dump.c:1043 #, c-format -msgid "" -" --serializable-deferrable wait until the dump can run without " -"anomalies\n" -msgstr "" -" --serializable-deferrable ダンプを異常なく実行できるようになるまで待機\n" +msgid " --serializable-deferrable wait until the dump can run without anomalies\n" +msgstr " --serializable-deferrable ダンプを異常なく実行できるようになるまで待機\n" -#: pg_dump.c:1035 +#: pg_dump.c:1044 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" -msgstr "" -" --snapshot=SNAPSHOT ダンプに指定のスナップショットを使用する\n" +msgstr " --snapshot=SNAPSHOT ダンプに指定のスナップショットを使用する\n" -#: pg_dump.c:1036 pg_restore.c:508 +#: pg_dump.c:1045 pg_restore.c:504 #, c-format -#| msgid "" -#| " --interactive prompt for missing role name and attributes " -#| "rather\n" -#| " than using defaults\n" msgid "" -" --strict-names require table and/or schema include patterns " -"to\n" +" --strict-names require table and/or schema include patterns to\n" " match at least one entity each\n" msgstr "" " --strict-names テーブル/スキーマの対象パターンが最低でも\n" " 一つの実体にマッチすることを必須とする\n" -#: pg_dump.c:1038 pg_dumpall.c:651 pg_restore.c:510 +#: pg_dump.c:1047 pg_dumpall.c:657 pg_restore.c:506 #, c-format msgid "" " --use-set-session-authorization\n" -" use SET SESSION AUTHORIZATION commands " -"instead of\n" +" use SET SESSION AUTHORIZATION commands instead of\n" " ALTER OWNER commands to set ownership\n" msgstr "" " --use-set-session-authorization\n" -" 所有者をセットする際、ALTER OWNER コマンドの代" -"わり\n" -" に SET SESSION AUTHORIZATION コマンドを使用す" -"る\n" +" 所有者をセットする際、ALTER OWNER コマンドの代わり\n" +" に SET SESSION AUTHORIZATION コマンドを使用する\n" -#: pg_dump.c:1042 pg_dumpall.c:655 pg_restore.c:514 +#: pg_dump.c:1051 pg_dumpall.c:661 pg_restore.c:510 #, c-format msgid "" "\n" @@ -2011,48 +1670,44 @@ msgstr "" "\n" "接続オプション:\n" -#: pg_dump.c:1043 +#: pg_dump.c:1052 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=DBNAME ダンプするデータベース\n" -#: pg_dump.c:1044 pg_dumpall.c:657 pg_restore.c:515 +#: pg_dump.c:1053 pg_dumpall.c:663 pg_restore.c:511 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" -msgstr "" -" -h, --host=HOSTNAME データベースサーバのホストまたはソケットディレクト" -"リ\n" +msgstr " -h, --host=HOSTNAME データベースサーバのホストまたはソケットディレクトリ\n" -#: pg_dump.c:1045 pg_dumpall.c:659 pg_restore.c:516 +#: pg_dump.c:1054 pg_dumpall.c:665 pg_restore.c:512 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT データベースサーバのポート番号\n" -#: pg_dump.c:1046 pg_dumpall.c:660 pg_restore.c:517 +#: pg_dump.c:1055 pg_dumpall.c:666 pg_restore.c:513 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME 指定したデータベースユーザで接続\n" -#: pg_dump.c:1047 pg_dumpall.c:661 pg_restore.c:518 +#: pg_dump.c:1056 pg_dumpall.c:667 pg_restore.c:514 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password パスワード入力を要求しない\n" -#: pg_dump.c:1048 pg_dumpall.c:662 pg_restore.c:519 +#: pg_dump.c:1057 pg_dumpall.c:668 pg_restore.c:515 #, c-format -msgid "" -" -W, --password force password prompt (should happen " -"automatically)\n" +msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password パスワードプロンプトを強制表示します\n" " (自動的に表示されるはず)\n" -#: pg_dump.c:1049 pg_dumpall.c:663 +#: pg_dump.c:1058 pg_dumpall.c:669 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROLENAME ダンプの前に SET ROLE を行う\n" -#: pg_dump.c:1051 +#: pg_dump.c:1060 #, c-format msgid "" "\n" @@ -2064,27 +1719,25 @@ msgstr "" "データベース名が指定されなかった場合、環境変数PGDATABASEが使用されます\n" "\n" -#: pg_dump.c:1053 pg_dumpall.c:667 pg_restore.c:526 +#: pg_dump.c:1062 pg_dumpall.c:673 pg_restore.c:522 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "バグは<%s>に報告してください。\n" + +#: pg_dump.c:1063 pg_dumpall.c:674 pg_restore.c:523 #, c-format -#| msgid "Report bugs to .\n" -msgid "Report bugs to .\n" -msgstr "不具合はまで報告してください。\n" +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" -#: pg_dump.c:1072 pg_dumpall.c:494 +#: pg_dump.c:1082 pg_dumpall.c:499 #, c-format -#| msgid "invalid client encoding \"%s\" specified\n" msgid "invalid client encoding \"%s\" specified" msgstr "不正なクライアントエンコーディング\"%s\"が指定されました" -#: pg_dump.c:1218 +#: pg_dump.c:1228 #, c-format -#| msgid "" -#| "Synchronized snapshots are not supported by this server version.\n" -#| "Run with --no-synchronized-snapshots instead if you do not need\n" -#| "synchronized snapshots.\n" msgid "" -"Synchronized snapshots on standby servers are not supported by this server " -"version.\n" +"Synchronized snapshots on standby servers are not supported by this server version.\n" "Run with --no-synchronized-snapshots instead if you do not need\n" "synchronized snapshots." msgstr "" @@ -2092,737 +1745,546 @@ msgstr "" "同期スナップショットが不要ならば--no-synchronized-snapshotsを付けて\n" "実行してください。" -#: pg_dump.c:1287 +#: pg_dump.c:1297 #, c-format -#| msgid "invalid output format \"%s\" specified\n" msgid "invalid output format \"%s\" specified" msgstr "不正な出力形式\"%s\"が指定されました" -#: pg_dump.c:1325 +#: pg_dump.c:1335 #, c-format -#| msgid "No matching schemas were found\n" msgid "no matching schemas were found for pattern \"%s\"" msgstr "パターン\"%s\"にマッチするスキーマが見つかりません" -#: pg_dump.c:1390 +#: pg_dump.c:1382 +#, c-format +msgid "no matching foreign servers were found for pattern \"%s\"" +msgstr "パターン\"%s\"にマッチする外部サーバーが見つかりません" + +#: pg_dump.c:1445 #, c-format -#| msgid "No matching tables were found\n" msgid "no matching tables were found for pattern \"%s\"" msgstr "パターン \"%s\"にマッチするテーブルが見つかりません" -#: pg_dump.c:1804 +#: pg_dump.c:1858 #, c-format -#| msgid "dumping contents of table %s\n" msgid "dumping contents of table \"%s.%s\"" msgstr "テーブル \"%s.%s\"の内容をダンプしています" -#: pg_dump.c:1905 +#: pg_dump.c:1965 #, c-format -#| msgid "" -#| "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed.\n" msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "テーブル\"%s\"の内容のダンプに失敗: PQgetCopyData()が失敗しました。" -#: pg_dump.c:1906 pg_dump.c:1916 +#: pg_dump.c:1966 pg_dump.c:1976 #, c-format msgid "Error message from server: %s" msgstr "サーバのエラーメッセージ: %s" -#: pg_dump.c:1907 pg_dump.c:1917 +#: pg_dump.c:1967 pg_dump.c:1977 #, c-format -#| msgid "The command was: %s\n" msgid "The command was: %s" msgstr "コマンド: %s" -#: pg_dump.c:1915 +#: pg_dump.c:1975 #, c-format -#| msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed.\n" msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "テーブル\"%s\"の内容のダンプに失敗: PQgetResult()が失敗しました。" -#: pg_dump.c:2666 +#: pg_dump.c:2729 #, c-format -#| msgid "saving database definition\n" msgid "saving database definition" msgstr "データベース定義を保存しています" -#: pg_dump.c:3130 +#: pg_dump.c:3201 #, c-format -#| msgid "saving encoding = %s\n" msgid "saving encoding = %s" msgstr "encoding = %s を保存しています" -#: pg_dump.c:3155 +#: pg_dump.c:3226 #, c-format -#| msgid "saving standard_conforming_strings = %s\n" msgid "saving standard_conforming_strings = %s" msgstr "standard_conforming_strings = %s を保存しています" -#: pg_dump.c:3194 +#: pg_dump.c:3265 #, c-format -#| msgid "could not parse reloptions array\n" msgid "could not parse result of current_schemas()" msgstr "current_schemas()の結果をパースできませんでした" -#: pg_dump.c:3213 +#: pg_dump.c:3284 #, c-format -#| msgid "saving encoding = %s\n" msgid "saving search_path = %s" msgstr "search_path = %s を保存しています" -#: pg_dump.c:3253 +#: pg_dump.c:3324 #, c-format -#| msgid "reading large objects\n" msgid "reading large objects" msgstr "ラージオブジェクトを読み込んでいます" -#: pg_dump.c:3435 +#: pg_dump.c:3506 #, c-format -#| msgid "saving large objects\n" msgid "saving large objects" msgstr "ラージオブジェクトを保存しています" -#: pg_dump.c:3481 +#: pg_dump.c:3552 #, c-format msgid "error reading large object %u: %s" msgstr "ラージオブジェクト %u を読み取り中にエラーがありました: %s" -#: pg_dump.c:3533 +#: pg_dump.c:3604 #, c-format -#| msgid "reading indexes for table \"%s\"\n" msgid "reading row security enabled for table \"%s.%s\"" msgstr "テーブル\"%s.%s\"で有効な行セキュリティ設定を読み込んでいます" -#: pg_dump.c:3564 +#: pg_dump.c:3635 #, c-format -#| msgid "reading indexes for table \"%s\"\n" msgid "reading policies for table \"%s.%s\"" msgstr "テーブル\"%s.%s\"のポリシを読み込んでいます" -#: pg_dump.c:3714 +#: pg_dump.c:3787 #, c-format -#| msgid "unexpected message type \"%c\"" msgid "unexpected policy command type: %c" msgstr "想定外のポリシコマンドタイプ: \"%c\"" -#: pg_dump.c:3841 +#: pg_dump.c:3938 #, c-format -#| msgid "WARNING: owner of function \"%s\" appears to be invalid\n" msgid "owner of publication \"%s\" appears to be invalid" msgstr "パブリケーション\"%s\"の所有者が不正なようです" -#: pg_dump.c:3978 +#: pg_dump.c:4083 #, c-format -#| msgid "reading indexes for table \"%s\"\n" msgid "reading publication membership for table \"%s.%s\"" msgstr "パブリケーション\"%s.%s\"の構成要素を読み込んでいます" -#: pg_dump.c:4121 +#: pg_dump.c:4227 #, c-format -#| msgid "Shows whether the current user is a superuser." msgid "subscriptions not dumped because current user is not a superuser" -msgstr "" -"現在のユーザがスーパユーザではないため、サブスクリプションはダンプされませ" -"ん" +msgstr "現在のユーザがスーパユーザではないため、サブスクリプションはダンプされません" -#: pg_dump.c:4175 +#: pg_dump.c:4292 #, c-format -#| msgid "WARNING: owner of function \"%s\" appears to be invalid\n" msgid "owner of subscription \"%s\" appears to be invalid" msgstr "サブスクリプション\"%s\"の所有者が無効なようです" -#: pg_dump.c:4219 +#: pg_dump.c:4336 #, c-format -#| msgid "could not parse reloptions array\n" msgid "could not parse subpublications array" msgstr "subpublications配列をパースできませんでした" -#: pg_dump.c:4491 +#: pg_dump.c:4649 #, c-format -#| msgid "could not find parent extension for %s\n" msgid "could not find parent extension for %s %s" msgstr "%s %sの親となる機能拡張がありませんでした" -#: pg_dump.c:4623 +#: pg_dump.c:4781 #, c-format -#| msgid "WARNING: owner of schema \"%s\" appears to be invalid\n" msgid "owner of schema \"%s\" appears to be invalid" msgstr "スキーマ\"%s\"の所有者が無効なようです" -#: pg_dump.c:4646 +#: pg_dump.c:4804 #, c-format msgid "schema with OID %u does not exist" msgstr "OID %uのスキーマは存在しません" -#: pg_dump.c:4971 +#: pg_dump.c:5129 #, c-format -#| msgid "WARNING: owner of data type \"%s\" appears to be invalid\n" msgid "owner of data type \"%s\" appears to be invalid" msgstr "データ型\"%s\"の所有者が無効なようです" -#: pg_dump.c:5056 +#: pg_dump.c:5214 #, c-format -#| msgid "WARNING: owner of operator \"%s\" appears to be invalid\n" msgid "owner of operator \"%s\" appears to be invalid" msgstr "演算子\"%s\"の所有者が無効なようです" -#: pg_dump.c:5358 +#: pg_dump.c:5516 #, c-format -#| msgid "WARNING: owner of operator class \"%s\" appears to be invalid\n" msgid "owner of operator class \"%s\" appears to be invalid" msgstr "演算子クラス\"%s\"の所有者が無効なようです" -#: pg_dump.c:5442 +#: pg_dump.c:5600 #, c-format -#| msgid "WARNING: owner of operator family \"%s\" appears to be invalid\n" msgid "owner of operator family \"%s\" appears to be invalid" msgstr "演算子族\"%s\"の所有者が無効なようです" -#: pg_dump.c:5611 +#: pg_dump.c:5769 #, c-format -#| msgid "WARNING: owner of aggregate function \"%s\" appears to be invalid\n" msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "集約関数\"%s\"の所有者が無効なようです" -#: pg_dump.c:5871 +#: pg_dump.c:6029 #, c-format -#| msgid "WARNING: owner of function \"%s\" appears to be invalid\n" msgid "owner of function \"%s\" appears to be invalid" msgstr "関数\"%s\"の所有者が無効なようです" -#: pg_dump.c:6675 +#: pg_dump.c:6857 #, c-format -#| msgid "WARNING: owner of table \"%s\" appears to be invalid\n" msgid "owner of table \"%s\" appears to be invalid" msgstr "テーブル\"%s\"の所有者が無効なようです" -#: pg_dump.c:6717 pg_dump.c:17067 +#: pg_dump.c:6899 pg_dump.c:17136 #, c-format -#| msgid "" -#| "failed sanity check, parent table OID %u of pg_rewrite entry OID %u not " -#| "found\n" -msgid "" -"failed sanity check, parent table with OID %u of sequence with OID %u not " -"found" -msgstr "" -"健全性検査に失敗しました、OID %2$u であるシーケンスの OID %1$u である親テーブ" -"ルがありません" +msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" +msgstr "健全性検査に失敗しました、OID %2$u であるシーケンスの OID %1$u である親テーブルがありません" -#: pg_dump.c:6861 +#: pg_dump.c:7041 #, c-format -#| msgid "reading indexes for table \"%s\"\n" msgid "reading indexes for table \"%s.%s\"" msgstr "テーブル\"%s.%s\"のインデックスを読み込んでいます" -#: pg_dump.c:7262 +#: pg_dump.c:7456 #, c-format -#| msgid "reading foreign key constraints for table \"%s\"\n" msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "テーブル\"%s.%s\"の外部キー制約を読み込んでいます" -#: pg_dump.c:7481 +#: pg_dump.c:7735 #, c-format -#| msgid "" -#| "failed sanity check, parent table OID %u of pg_rewrite entry OID %u not " -#| "found\n" -msgid "" -"failed sanity check, parent table with OID %u of pg_rewrite entry with OID " -"%u not found" -msgstr "" -"健全性検査に失敗しました、OID %2$u であるpg_rewriteエントリのOID %1$u である" -"親テーブルが見つかりません" +msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" +msgstr "健全性検査に失敗しました、OID %2$u であるpg_rewriteエントリのOID %1$u である親テーブルが見つかりません" -#: pg_dump.c:7564 +#: pg_dump.c:7818 #, c-format -#| msgid "reading triggers for table \"%s\"\n" msgid "reading triggers for table \"%s.%s\"" msgstr "テーブル\"%s.%s\"のトリガを読み込んでいます" -#: pg_dump.c:7697 +#: pg_dump.c:7951 #, c-format -#| msgid "" -#| "query produced null referenced table name for foreign key trigger \"%s\" " -#| "on table \"%s\" (OID of table: %u)\n" -msgid "" -"query produced null referenced table name for foreign key trigger \"%s\" on " -"table \"%s\" (OID of table: %u)" -msgstr "" -"問い合わせがテーブル\"%2$s\"上の外部キートリガ\"%1$s\"の参照テーブル名として" -"NULLを返しました(テーブルのOID: %3$u)" +msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" +msgstr "問い合わせがテーブル\"%2$s\"上の外部キートリガ\"%1$s\"の参照テーブル名としてNULLを返しました(テーブルのOID: %3$u)" -#: pg_dump.c:8252 +#: pg_dump.c:8485 #, c-format -#| msgid "finding the columns and types of table \"%s\"\n" msgid "finding the columns and types of table \"%s.%s\"" msgstr "テーブル\"%s.%s\"の列と型を探しています" -#: pg_dump.c:8388 +#: pg_dump.c:8601 #, c-format -#| msgid "invalid column numbering in table \"%s\"\n" msgid "invalid column numbering in table \"%s\"" msgstr "テーブル\"%s\"の列番号が不正です" -#: pg_dump.c:8425 +#: pg_dump.c:8638 #, c-format -#| msgid "finding default expressions of table \"%s\"\n" msgid "finding default expressions of table \"%s.%s\"" msgstr "テーブル\"%s.%s\"のデフォルト式を探しています" -#: pg_dump.c:8447 +#: pg_dump.c:8660 #, c-format -#| msgid "invalid adnum value %d for table \"%s\"\n" msgid "invalid adnum value %d for table \"%s\"" msgstr "テーブル\"%2$s\"用のadnumの値%1$dが不正です" -#: pg_dump.c:8512 +#: pg_dump.c:8725 #, c-format -#| msgid "finding check constraints for table \"%s\"\n" msgid "finding check constraints for table \"%s.%s\"" msgstr "テーブル\"%s.%s\"の検査制約を探しています" -#: pg_dump.c:8561 +#: pg_dump.c:8774 #, c-format -#| msgid "expected %d check constraint on table \"%s\" but found %d\n" -#| msgid_plural "expected %d check constraints on table \"%s\" but found %d\n" msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "テーブル\"%2$s\"で想定する検査制約は%1$d個でしたが、%3$dありました" msgstr[1] "テーブル\"%2$s\"で想定する検査制約は%1$d個でしたが、%3$dありました" -#: pg_dump.c:8565 +#: pg_dump.c:8778 #, c-format -#| msgid "(The system catalogs might be corrupted.)\n" msgid "(The system catalogs might be corrupted.)" msgstr "(システムカタログが破損している可能性があります)" -#: pg_dump.c:10141 +#: pg_dump.c:10364 #, c-format -#| msgid "WARNING: typtype of data type \"%s\" appears to be invalid\n" msgid "typtype of data type \"%s\" appears to be invalid" msgstr "データ型\"%s\"のtyptypeが不正なようです" -#: pg_dump.c:11495 +#: pg_dump.c:11718 #, c-format -#| msgid "WARNING: bogus value in proargmodes array\n" msgid "bogus value in proargmodes array" msgstr "proargmodes配列内におかしな値があります" -#: pg_dump.c:11867 +#: pg_dump.c:12002 #, c-format -#| msgid "WARNING: could not parse proallargtypes array\n" msgid "could not parse proallargtypes array" msgstr "proallargtypes配列のパースができませんでした" -#: pg_dump.c:11883 +#: pg_dump.c:12018 #, c-format -#| msgid "WARNING: could not parse proargmodes array\n" msgid "could not parse proargmodes array" msgstr "proargmodes配列のパースができませんでした" -#: pg_dump.c:11897 +#: pg_dump.c:12032 #, c-format -#| msgid "WARNING: could not parse proargnames array\n" msgid "could not parse proargnames array" msgstr "proargnames配列のパースができませんでした" -#: pg_dump.c:11908 +#: pg_dump.c:12043 #, c-format -#| msgid "WARNING: could not parse proconfig array\n" msgid "could not parse proconfig array" msgstr "proconfig配列のパースができませんでした" -#: pg_dump.c:11988 +#: pg_dump.c:12123 #, c-format -#| msgid "unrecognized provolatile value for function \"%s\"\n" msgid "unrecognized provolatile value for function \"%s\"" msgstr "関数\"%s\"のprovolatileの値が認識できません" -#: pg_dump.c:12038 pg_dump.c:14090 +#: pg_dump.c:12173 pg_dump.c:14118 #, c-format -#| msgid "unrecognized provolatile value for function \"%s\"\n" msgid "unrecognized proparallel value for function \"%s\"" msgstr "関数\"%s\"のproparallel値が認識できません" -#: pg_dump.c:12171 pg_dump.c:12280 pg_dump.c:12287 +#: pg_dump.c:12312 pg_dump.c:12421 pg_dump.c:12428 #, c-format -#| msgid "could not find function information for function \"%s\"" msgid "could not find function definition for function with OID %u" msgstr "OID %uの関数の関数定義が見つかりませんでした" -#: pg_dump.c:12210 +#: pg_dump.c:12351 #, c-format -#| msgid "" -#| "WARNING: bogus value in pg_cast.castfunc or pg_cast.castmethod field\n" msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "pg_cast.castfuncまたはpg_cast.castmethodフィールドの値がおかしいです" -#: pg_dump.c:12213 +#: pg_dump.c:12354 #, c-format -#| msgid "WARNING: bogus value in pg_cast.castmethod field\n" msgid "bogus value in pg_cast.castmethod field" msgstr "pg_cast.castmethod フィールドの値がおかしいです" -#: pg_dump.c:12306 +#: pg_dump.c:12447 #, c-format -msgid "" -"bogus transform definition, at least one of trffromsql and trftosql should " -"be nonzero" -msgstr "" -"おかしな変換定義、trffromsql か trftosql の少なくとも一方は非ゼロであるはずで" -"す" +msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" +msgstr "おかしな変換定義、trffromsql か trftosql の少なくとも一方は非ゼロであるはずです" -#: pg_dump.c:12323 +#: pg_dump.c:12464 #, c-format -#| msgid "WARNING: bogus value in pg_cast.castmethod field\n" msgid "bogus value in pg_transform.trffromsql field" msgstr "pg_cast.castmethod フィールドの値がおかしいです" -#: pg_dump.c:12344 +#: pg_dump.c:12485 #, c-format -#| msgid "WARNING: bogus value in pg_cast.castmethod field\n" msgid "bogus value in pg_transform.trftosql field" msgstr "pg_cast.castmethod フィールドの値がおかしいです" -#: pg_dump.c:12660 +#: pg_dump.c:12801 #, c-format -#| msgid "WARNING: could not find operator with OID %s\n" msgid "could not find operator with OID %s" msgstr "OID %sの演算子がありませんでした" -#: pg_dump.c:12728 +#: pg_dump.c:12869 #, c-format -#| msgid "invalid type name \"%s\"" msgid "invalid type \"%c\" of access method \"%s\"" msgstr "アクセスメソッド\"%2$s\"の不正なタイプ\"%1$c\"" -#: pg_dump.c:13482 +#: pg_dump.c:13623 #, c-format -#| msgid "unrecognized collation provider: %s" -msgid "unrecognized collation provider: %s\n" -msgstr "認識できないの照合順序プロバイダ: %s\n" +msgid "unrecognized collation provider: %s" +msgstr "認識できないの照合順序プロバイダ: %s" -#: pg_dump.c:13954 +#: pg_dump.c:14037 #, c-format -#| msgid "" -#| "WARNING: aggregate function %s could not be dumped correctly for this " -#| "database version; ignored\n" -msgid "" -"aggregate function %s could not be dumped correctly for this database " -"version; ignored" -msgstr "" -"このデータベースバージョンでは集約関数%sを正しくダンプできませんでした、無視" -"します" - -#: pg_dump.c:14009 -#, c-format -#| msgid "unrecognized filter variable \"%s\"" msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "集約\"%s\"のaggfinalmodifyの値が識別できません" -#: pg_dump.c:14065 +#: pg_dump.c:14093 #, c-format -#| msgid "unrecognized filter variable \"%s\"" msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "集約\"%s\"のaggmfinalmodifyの値が識別できません" -#: pg_dump.c:14787 +#: pg_dump.c:14815 #, c-format -#| msgid "unrecognized object type in default privileges: %d\n" msgid "unrecognized object type in default privileges: %d" msgstr "デフォルト権限設定中の認識できないオブジェクト型: %d" -#: pg_dump.c:14805 +#: pg_dump.c:14833 #, c-format -#| msgid "could not parse default ACL list (%s)\n" msgid "could not parse default ACL list (%s)" msgstr "デフォルトの ACL リスト(%s)をパースできませんでした" -#: pg_dump.c:14885 +#: pg_dump.c:14918 #, c-format -#| msgid "could not parse ACL list (%s) for object \"%s\" (%s)\n" -msgid "" -"could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) " -"for object \"%s\" (%s)" -msgstr "" -"オブジェクト\"%3$s\"(%4$s)の初期GRANT ACLリスト(%1$s)または初期REVOKE ACLリス" -"ト(%2$s)をパースできませんでした" +msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" +msgstr "オブジェクト\"%3$s\"(%4$s)の初期GRANT ACLリスト(%1$s)または初期REVOKE ACLリスト(%2$s)をパースできませんでした" -#: pg_dump.c:14893 +#: pg_dump.c:14926 #, c-format -#| msgid "could not parse ACL list (%s) for object \"%s\" (%s)\n" -msgid "" -"could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s" -"\" (%s)" -msgstr "" -"オブジェクト\"%3$s\"(%4$s)のGRANT ACLリスト(%1$s)またはREVOKE ACLリスト(%2$s)" -"をパースできませんでした" +msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" +msgstr "オブジェクト\"%3$s\"(%4$s)のGRANT ACLリスト(%1$s)またはREVOKE ACLリスト(%2$s)をパースできませんでした" -#: pg_dump.c:15392 +#: pg_dump.c:15441 #, c-format -#| msgid "query to obtain definition of view \"%s\" returned no data\n" msgid "query to obtain definition of view \"%s\" returned no data" -msgstr "" -"ビュー\"%s\"の定義を取り出すための問い合わせがデータを返却しませんでした" +msgstr "ビュー\"%s\"の定義を取り出すための問い合わせがデータを返却しませんでした" -#: pg_dump.c:15395 +#: pg_dump.c:15444 #, c-format -#| msgid "" -#| "query to obtain definition of view \"%s\" returned more than one " -#| "definition\n" -msgid "" -"query to obtain definition of view \"%s\" returned more than one definition" -msgstr "" -"ビュー\"%s\"の定義を取り出すための問い合わせが2つ以上の定義を返却しました" +msgid "query to obtain definition of view \"%s\" returned more than one definition" +msgstr "ビュー\"%s\"の定義を取り出すための問い合わせが2つ以上の定義を返却しました" -#: pg_dump.c:15402 +#: pg_dump.c:15451 #, c-format -#| msgid "definition of view \"%s\" appears to be empty (length zero)\n" msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "ビュー\"%s\"の定義が空のようです(長さが0)" -#: pg_dump.c:15484 +#: pg_dump.c:15533 #, c-format -#| msgid "LOCATION is not supported anymore" msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDSは今後サポートされません(テーブル\"%s\")" -#: pg_dump.c:15611 +#: pg_dump.c:16013 #, c-format -#| msgid "invalid adnum value %d for table \"%s\"\n" msgid "invalid number of parents %d for table \"%s\"" msgstr "テーブル\"%2$s\"用の親テーブルの数%1$dが不正です" -#: pg_dump.c:16298 +#: pg_dump.c:16336 #, c-format -#| msgid "invalid column number %d for table \"%s\"\n" msgid "invalid column number %d for table \"%s\"" msgstr "テーブル\"%2$s\"の列番号%1$dは不正です" -#: pg_dump.c:16560 +#: pg_dump.c:16621 #, c-format -#| msgid "missing index for constraint \"%s\"\n" msgid "missing index for constraint \"%s\"" msgstr "制約\"%s\"のインデックスが見つかりません" -#: pg_dump.c:16780 +#: pg_dump.c:16846 #, c-format -#| msgid "unrecognized constraint type: %c\n" msgid "unrecognized constraint type: %c" msgstr "制約のタイプが識別できません: %c" -#: pg_dump.c:16912 pg_dump.c:17132 +#: pg_dump.c:16978 pg_dump.c:17201 #, c-format -#| msgid "query to get data of sequence \"%s\" returned %d row (expected 1)\n" -#| msgid_plural "" -#| "query to get data of sequence \"%s\" returned %d rows (expected 1)\n" msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" -msgid_plural "" -"query to get data of sequence \"%s\" returned %d rows (expected 1)" -msgstr[0] "" -"シーケンス\"%s\"のデータを得るための問い合わせが%d行返却しました(想定は1)" -msgstr[1] "" -"シーケンス\"%s\"のデータを得るための問い合わせが%d行返却しました(想定は1)" +msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" +msgstr[0] "シーケンス\"%s\"のデータを得るための問い合わせが%d行返却しました(想定は1)" +msgstr[1] "シーケンス\"%s\"のデータを得るための問い合わせが%d行返却しました(想定は1)" -#: pg_dump.c:16946 +#: pg_dump.c:17012 #, c-format -#| msgid "unrecognized object type \"%s\"" msgid "unrecognized sequence type: %s" msgstr "認識されないシーケンスの型\"%s\"" -#: pg_dump.c:17228 +#: pg_dump.c:17299 #, c-format -#| msgid "unexpected tgtype value: %d\n" msgid "unexpected tgtype value: %d" msgstr "想定外のtgtype値: %d" -#: pg_dump.c:17302 +#: pg_dump.c:17373 #, c-format -#| msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"\n" msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "テーブル\"%3$s\"上のトリガ\"%2$s\"の引数文字列(%1$s)が不正です" -#: pg_dump.c:17531 +#: pg_dump.c:17609 #, c-format -#| msgid "" -#| "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows " -#| "returned\n" -msgid "" -"query to get rule \"%s\" for table \"%s\" failed: wrong number of rows " -"returned" -msgstr "" -"テーブル\"%2$s\"のルール\"%1$s\"を得るための問い合わせが失敗しました: 間違っ" -"た行数が返却されました" +msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" +msgstr "テーブル\"%2$s\"のルール\"%1$s\"を得るための問い合わせが失敗しました: 間違った行数が返却されました" -#: pg_dump.c:17693 +#: pg_dump.c:17771 #, c-format -#| msgid "could not find parent extension for %s\n" msgid "could not find referenced extension %u" msgstr "親の機能拡張%uが見つかりません" -#: pg_dump.c:17905 +#: pg_dump.c:17983 #, c-format -#| msgid "reading dependency data\n" msgid "reading dependency data" msgstr "データの依存データを読み込んでいます" -#: pg_dump.c:17960 +#: pg_dump.c:18076 #, c-format -#| msgid "could not create large object %u: %s" msgid "no referencing object %u %u" msgstr "参照元オブジェクト%u %uがありません" -#: pg_dump.c:17971 +#: pg_dump.c:18087 #, c-format -#| msgid "could not create large object %u: %s" msgid "no referenced object %u %u" msgstr "参照先オブジェクト%u %uがありません" -#: pg_dump.c:18339 +#: pg_dump.c:18460 #, c-format -#| msgid "could not parse reloptions array\n" msgid "could not parse reloptions array" msgstr "reloptions 配列をパースできませんでした" -#: pg_dump_sort.c:327 +#: pg_dump_sort.c:360 #, c-format -#| msgid "invalid dumpId %d\n" msgid "invalid dumpId %d" msgstr "不正なdumpId %d" -#: pg_dump_sort.c:333 +#: pg_dump_sort.c:366 #, c-format -#| msgid "invalid dependency %d\n" msgid "invalid dependency %d" msgstr "不正な依存関係 %d" -#: pg_dump_sort.c:566 +#: pg_dump_sort.c:599 #, c-format -#| msgid "could not identify dependency loop\n" msgid "could not identify dependency loop" msgstr "依存関係のループが見つかりませんでした" -#: pg_dump_sort.c:1129 +#: pg_dump_sort.c:1170 #, c-format -#| msgid "" -#| "NOTICE: there are circular foreign-key constraints among these table(s):\n" msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" msgstr[0] "次のテーブルの中で外部キー制約の循環があります: " msgstr[1] "次のテーブルの中で外部キー制約の循環があります: " -#: pg_dump_sort.c:1133 pg_dump_sort.c:1153 +#: pg_dump_sort.c:1174 pg_dump_sort.c:1194 #, c-format -#| msgid " %s\n" msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1134 +#: pg_dump_sort.c:1175 #, c-format -#| msgid "" -#| "You might not be able to restore the dump without using --disable-" -#| "triggers or temporarily dropping the constraints.\n" -msgid "" -"You might not be able to restore the dump without using --disable-triggers " -"or temporarily dropping the constraints." -msgstr "" -"--disable-triggersの使用または一時的な制約の削除を行わずにこのダンプをリスト" -"アすることはできないかもしれません。" +msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." +msgstr "--disable-triggersの使用または一時的な制約の削除を行わずにこのダンプをリストアすることはできないかもしれません。" -#: pg_dump_sort.c:1135 +#: pg_dump_sort.c:1176 #, c-format -#| msgid "" -#| "Consider using a full dump instead of a --data-only dump to avoid this " -#| "problem.\n" -msgid "" -"Consider using a full dump instead of a --data-only dump to avoid this " -"problem." -msgstr "" -"この問題を回避するために--data-onlyダンプの代わりに完全なダンプを使用すること" -"を検討してください。" +msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." +msgstr "この問題を回避するために--data-onlyダンプの代わりに完全なダンプを使用することを検討してください。" -#: pg_dump_sort.c:1147 +#: pg_dump_sort.c:1188 #, c-format -#| msgid "WARNING: could not resolve dependency loop among these items:\n" msgid "could not resolve dependency loop among these items:" msgstr "以下の項目の間の依存関係のループを解決できませんでした:" #: pg_dumpall.c:199 #, c-format -#| msgid "" -#| "The program \"pg_dump\" is needed by %s but was not found in the\n" -#| "same directory as \"%s\".\n" -#| "Check your installation.\n" msgid "" -"The program \"pg_dump\" is needed by %s but was not found in the\n" +"The program \"%s\" is needed by %s but was not found in the\n" "same directory as \"%s\".\n" "Check your installation." msgstr "" -"プログラム\"pg_dump\"が%sで必要ですが、\"%s\"と同じディレクトリにありません\n" -"でした。\n" -"インストールの状況を確認してください。" +"%2$sには\"%1$s\"プログラムが必要ですが、\"%3$s\"と同じディレクトリ\n" +"にありませんでした。\n" +"インストール状況を確認してください。" #: pg_dumpall.c:204 #, c-format -#| msgid "" -#| "The program \"pg_dump\" was found by \"%s\"\n" -#| "but was not the same version as %s.\n" -#| "Check your installation.\n" msgid "" -"The program \"pg_dump\" was found by \"%s\"\n" +"The program \"%s\" was found by \"%s\"\n" "but was not the same version as %s.\n" "Check your installation." msgstr "" -"プログラム\"pg_dump\"が\"%s\"にありましたが、%sと同じバージョンではありま\n" -"せんでした。\n" -"インストールの状況を確認してください。" +"\"%2$s\"がプログラム\"%1$s\"を見つけましたが、これは%3$sと同じ\n" +"バージョンではありませんでした。\n" +"インストール状況を確認してください。" -#: pg_dumpall.c:351 +#: pg_dumpall.c:356 #, c-format -msgid "" -"option --exclude-database cannot be used together with -g/--globals-only, -" -"r/--roles-only or -t/--tablespaces-only" -msgstr "" -"--exclude-database オプションは -g/--globals-only、-r/--roles-only もしくは -" -"t/--tablespaces-only と一緒には使用できません" +msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" +msgstr "--exclude-database オプションは -g/--globals-only、-r/--roles-only もしくは -t/--tablespaces-only と一緒には使用できません" -#: pg_dumpall.c:360 +#: pg_dumpall.c:365 #, c-format -#| msgid "" -#| "%s: options -g/--globals-only and -r/--roles-only cannot be used " -#| "together\n" msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "-g/--globals-onlyと-r/--roles-onlyオプションは同時に使用できません" -#: pg_dumpall.c:368 +#: pg_dumpall.c:373 #, c-format -#| msgid "" -#| "%s: options -g/--globals-only and -t/--tablespaces-only cannot be used " -#| "together\n" -msgid "" -"options -g/--globals-only and -t/--tablespaces-only cannot be used together" -msgstr "" -"-g/--globals-onlyと-t/--tablespaces-onlyオプションは同時に使用できません" +msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" +msgstr "-g/--globals-onlyと-t/--tablespaces-onlyオプションは同時に使用できません" -#: pg_dumpall.c:382 +#: pg_dumpall.c:387 #, c-format -#| msgid "" -#| "%s: options -r/--roles-only and -t/--tablespaces-only cannot be used " -#| "together\n" -msgid "" -"options -r/--roles-only and -t/--tablespaces-only cannot be used together" +msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "-r/--roles-onlyと-t/--tablespaces-onlyオプションは同時に使用できません" -#: pg_dumpall.c:443 pg_dumpall.c:1747 +#: pg_dumpall.c:448 pg_dumpall.c:1754 #, c-format -#| msgid "%s: could not connect to database \"%s\"\n" msgid "could not connect to database \"%s\"" msgstr "データベース\"%s\"へ接続できませんでした" -#: pg_dumpall.c:457 +#: pg_dumpall.c:462 #, c-format -#| msgid "" -#| "%s: could not connect to databases \"postgres\" or \"template1\"\n" -#| "Please specify an alternative database.\n" msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" "Please specify an alternative database." @@ -2830,13 +2292,7 @@ msgstr "" "\"postgres\"または\"template1\"データベースに接続できませんでした\n" "代わりのデータベースを指定してください。" -#: pg_dumpall.c:479 -#, c-format -#| msgid "%s: could not open the output file \"%s\": %s\n" -msgid "could not open the output file \"%s\": %m" -msgstr "出力ファイル \"%s\" をオープンできませんでした: %m" - -#: pg_dumpall.c:611 +#: pg_dumpall.c:616 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2845,85 +2301,73 @@ msgstr "" "%sはPostgreSQLデータベースクラスタをSQLスクリプトファイルに展開します。\n" "\n" -#: pg_dumpall.c:613 +#: pg_dumpall.c:618 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" -#: pg_dumpall.c:616 +#: pg_dumpall.c:621 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=ファイル名 出力ファイル名\n" -#: pg_dumpall.c:623 +#: pg_dumpall.c:628 #, c-format -msgid "" -" -c, --clean clean (drop) databases before recreating\n" +msgid " -c, --clean clean (drop) databases before recreating\n" msgstr " -c, --clean 再作成前にデータベースを整理(削除)\n" -#: pg_dumpall.c:625 +#: pg_dumpall.c:630 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" -msgstr "" -" -g, --globals-only グローバルオブジェクトのみをダンプし、データベース" -"をダンプしません\n" +msgstr " -g, --globals-only グローバルオブジェクトのみをダンプし、データベースをダンプしません\n" -#: pg_dumpall.c:626 pg_restore.c:489 +#: pg_dumpall.c:631 pg_restore.c:485 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner オブジェクトの所有権の復元を省略\n" -#: pg_dumpall.c:627 +#: pg_dumpall.c:632 #, c-format -msgid "" -" -r, --roles-only dump only roles, no databases or tablespaces\n" +msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr "" " -r, --roles-only ロールのみをダンプ。\n" " データベースとテーブル空間をダンプしません\n" -#: pg_dumpall.c:629 +#: pg_dumpall.c:634 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" -msgstr "" -" -S, --superuser=NAME ダンプで使用するスーパユーザのユーザ名を指定\n" +msgstr " -S, --superuser=NAME ダンプで使用するスーパユーザのユーザ名を指定\n" -#: pg_dumpall.c:630 +#: pg_dumpall.c:635 #, c-format -msgid "" -" -t, --tablespaces-only dump only tablespaces, no databases or roles\n" -msgstr "" -" -t, --tablespaces-only テーブル空間のみをダンプ。データベースとロールをダ" -"ンプしません\n" +msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" +msgstr " -t, --tablespaces-only テーブル空間のみをダンプ。データベースとロールをダンプしません\n" -#: pg_dumpall.c:636 +#: pg_dumpall.c:641 #, c-format -msgid "" -" --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" -msgstr "" -" --exclude-database=PATTERN PATTERNに合致する名前のデータベースを除外\n" +msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" +msgstr " --exclude-database=PATTERN PATTERNに合致する名前のデータベースを除外\n" -#: pg_dumpall.c:643 +#: pg_dumpall.c:648 #, c-format -#| msgid " -W, --password force password prompt\n" msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords ロールのパスワードをダンプしない\n" -#: pg_dumpall.c:656 +#: pg_dumpall.c:662 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=CONSTR 接続文字列を用いた接続\n" -#: pg_dumpall.c:658 +#: pg_dumpall.c:664 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=DBNAME 代替のデフォルトデータベースを指定\n" -#: pg_dumpall.c:665 +#: pg_dumpall.c:671 #, c-format msgid "" "\n" -"If -f/--file is not used, then the SQL script will be written to the " -"standard\n" +"If -f/--file is not used, then the SQL script will be written to the standard\n" "output.\n" "\n" msgstr "" @@ -2931,121 +2375,97 @@ msgstr "" "-f/--file が指定されない場合、SQLスクリプトは標準出力に書き出されます。\n" "\n" -#: pg_dumpall.c:870 +#: pg_dumpall.c:877 #, c-format -#| msgid "Role names starting with \"pg_\" are reserved." msgid "role name starting with \"pg_\" skipped (%s)" msgstr "\"pg_\"で始まるロール名はスキップされました(%s)" -#: pg_dumpall.c:1271 +#: pg_dumpall.c:1278 #, c-format -#| msgid "%s: could not parse ACL list (%s) for tablespace \"%s\"\n" msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "テーブル空間\"%2$s\"のACLリスト(%1$s)をパースできませんでした" -#: pg_dumpall.c:1488 +#: pg_dumpall.c:1495 #, c-format -#| msgid "%s: dumping database \"%s\"...\n" -msgid "excluding database \"%s\"..." -msgstr "データベース\"%s\"除外します..." +msgid "excluding database \"%s\"" +msgstr "データベース\"%s\"除外します" -#: pg_dumpall.c:1492 +#: pg_dumpall.c:1499 #, c-format -#| msgid "%s: dumping database \"%s\"...\n" -msgid "dumping database \"%s\"..." -msgstr "データベース\"%s\"をダンプしています..." +msgid "dumping database \"%s\"" +msgstr "データベース\"%s\"をダンプしています" -#: pg_dumpall.c:1524 +#: pg_dumpall.c:1531 #, c-format -#| msgid "%s: pg_dump failed on database \"%s\", exiting\n" msgid "pg_dump failed on database \"%s\", exiting" msgstr "データベース\"%s\"のダンプが失敗しました、終了します" -#: pg_dumpall.c:1533 +#: pg_dumpall.c:1540 #, c-format -#| msgid "%s: could not re-open the output file \"%s\": %s\n" msgid "could not re-open the output file \"%s\": %m" msgstr "出力ファイル\"%s\"を再オープンできませんでした: %m" -#: pg_dumpall.c:1577 +#: pg_dumpall.c:1584 #, c-format -#| msgid "%s: running \"%s\"\n" msgid "running \"%s\"" msgstr "\"%s\"を実行しています" -#: pg_dumpall.c:1768 +#: pg_dumpall.c:1775 #, c-format -#| msgid "%s: could not connect to database \"%s\": %s\n" msgid "could not connect to database \"%s\": %s" msgstr "データベース\"%s\"へ接続できませんでした: %s" -#: pg_dumpall.c:1798 +#: pg_dumpall.c:1805 #, c-format -#| msgid "%s: could not get server version\n" msgid "could not get server version" msgstr "サーババージョンを取得できませんでした" -#: pg_dumpall.c:1804 +#: pg_dumpall.c:1811 #, c-format -#| msgid "%s: could not parse server version \"%s\"\n" msgid "could not parse server version \"%s\"" msgstr "サーババージョン\"%s\"をパースできませんでした" -#: pg_dumpall.c:1876 pg_dumpall.c:1899 +#: pg_dumpall.c:1883 pg_dumpall.c:1906 #, c-format -#| msgid "executing: %s\n" msgid "executing %s" msgstr "%s を実行しています" -#: pg_restore.c:312 +#: pg_restore.c:308 #, c-format -#| msgid "%s: options -d/--dbname and -f/--file cannot be used together\n" msgid "one of -d/--dbname and -f/--file must be specified" msgstr "-d/--dbnameと-f/--fileのどちらか一方が指定されていなければなりません" -#: pg_restore.c:321 +#: pg_restore.c:317 #, c-format -#| msgid "%s: options -d/--dbname and -f/--file cannot be used together\n" msgid "options -d/--dbname and -f/--file cannot be used together" msgstr "オプション-d/--dbnameと-f/--fileは同時に使用できません" -#: pg_restore.c:347 +#: pg_restore.c:343 #, c-format -#| msgid "options -c/--clean and -a/--data-only cannot be used together\n" msgid "options -C/--create and -1/--single-transaction cannot be used together" -msgstr "" -"オプション-C/--createと-1/--single-transactionとは同時には使用できません" +msgstr "オプション-C/--createと-1/--single-transactionとは同時には使用できません" -#: pg_restore.c:361 +#: pg_restore.c:357 #, c-format -#| msgid "%s: maximum number of parallel jobs is %d\n" msgid "maximum number of parallel jobs is %d" msgstr "並列ジョブ数の最大値は%dです" -#: pg_restore.c:370 +#: pg_restore.c:366 #, c-format -#| msgid "%s: cannot specify both --single-transaction and multiple jobs\n" msgid "cannot specify both --single-transaction and multiple jobs" msgstr "--single-transaction と複数ジョブは同時には指定できません" -#: pg_restore.c:412 +#: pg_restore.c:408 #, c-format -#| msgid "" -#| "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t" -#| "\"\n" -msgid "" -"unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" -msgstr "" -"アーカイブ形式\"%s\"が認識できません; \"c\"、\"d\"または\"t\"を指定してくださ" -"い" +msgid "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" +msgstr "アーカイブ形式\"%s\"が認識できません; \"c\"、\"d\"または\"t\"を指定してください" -#: pg_restore.c:452 +#: pg_restore.c:448 #, c-format -#| msgid "WARNING: errors ignored on restore: %d\n" msgid "errors ignored on restore: %d" msgstr "リストア中に無視されたエラー数: %d" -#: pg_restore.c:465 +#: pg_restore.c:461 #, c-format msgid "" "%s restores a PostgreSQL database from an archive created by pg_dump.\n" @@ -3054,50 +2474,49 @@ msgstr "" "%sはpg_dumpで作成したアーカイブからPostgreSQLデータベースをリストアします。\n" "\n" -#: pg_restore.c:467 +#: pg_restore.c:463 #, c-format msgid " %s [OPTION]... [FILE]\n" msgstr " %s [OPTION]... [FILE]\n" -#: pg_restore.c:470 +#: pg_restore.c:466 #, c-format msgid " -d, --dbname=NAME connect to database name\n" msgstr " -d, --dbname=NAME 接続するデータベース名\n" -#: pg_restore.c:471 +#: pg_restore.c:467 #, c-format -#| msgid " -f, --file=FILENAME output file name\n" msgid " -f, --file=FILENAME output file name (- for stdout)\n" msgstr " -f, --file=FILENAME 出力ファイル名(- で標準出力)\n" -#: pg_restore.c:472 +#: pg_restore.c:468 #, c-format msgid " -F, --format=c|d|t backup file format (should be automatic)\n" msgstr "" " -F, --format=c|d|t バックアップファイルの形式\n" " (自動的に設定されるはずです)\n" -#: pg_restore.c:473 +#: pg_restore.c:469 #, c-format msgid " -l, --list print summarized TOC of the archive\n" msgstr " -l, --list アーカイブのTOCの要約を表示\n" -#: pg_restore.c:474 +#: pg_restore.c:470 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose 冗長モードです\n" -#: pg_restore.c:475 +#: pg_restore.c:471 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示し、終了します\n" -#: pg_restore.c:476 +#: pg_restore.c:472 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示し、終了します\n" -#: pg_restore.c:478 +#: pg_restore.c:474 #, c-format msgid "" "\n" @@ -3106,33 +2525,32 @@ msgstr "" "\n" "リストア制御用のオプション:\n" -#: pg_restore.c:479 +#: pg_restore.c:475 #, c-format msgid " -a, --data-only restore only the data, no schema\n" -msgstr "" -" -a, --data-only データのみをリストア。スキーマをリストアしません\n" +msgstr " -a, --data-only データのみをリストア。スキーマをリストアしません\n" -#: pg_restore.c:481 +#: pg_restore.c:477 #, c-format msgid " -C, --create create the target database\n" msgstr " -C, --create 対象のデータベースを作成\n" -#: pg_restore.c:482 +#: pg_restore.c:478 #, c-format msgid " -e, --exit-on-error exit on error, default is to continue\n" msgstr " -e, --exit-on-error エラー時に終了。デフォルトは継続\n" -#: pg_restore.c:483 +#: pg_restore.c:479 #, c-format msgid " -I, --index=NAME restore named index\n" msgstr " -I, --index=NAME 指名したインデックスをリストア\n" -#: pg_restore.c:484 +#: pg_restore.c:480 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" msgstr " -j, --jobs=NUM リストア時に指定した数の並列ジョブを使用\n" -#: pg_restore.c:485 +#: pg_restore.c:481 #, c-format msgid "" " -L, --use-list=FILENAME use table of contents from this file for\n" @@ -3141,138 +2559,112 @@ msgstr "" " -L, --use-list=FILENAME このファイルの内容に従って SELECT や\n" " 出力のソートを行います\n" -#: pg_restore.c:487 +#: pg_restore.c:483 #, c-format msgid " -n, --schema=NAME restore only objects in this schema\n" -msgstr "" -" -n, --schema=NAME 指定したスキーマのオブジェクトのみをリストア\n" +msgstr " -n, --schema=NAME 指定したスキーマのオブジェクトのみをリストア\n" -#: pg_restore.c:488 +#: pg_restore.c:484 #, c-format -#| msgid " -n, --schema=NAME restore only objects in this schema\n" msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" -msgstr "" -" -N, --exclude-schema=NAME 指定したスキーマのオブジェクトはリストアしな" -"い\n" +msgstr " -N, --exclude-schema=NAME 指定したスキーマのオブジェクトはリストアしない\n" -#: pg_restore.c:490 +#: pg_restore.c:486 #, c-format msgid " -P, --function=NAME(args) restore named function\n" msgstr " -P, --function=NAME(args) 指名された関数をリストア\n" -#: pg_restore.c:491 +#: pg_restore.c:487 #, c-format msgid " -s, --schema-only restore only the schema, no data\n" -msgstr "" -" -s, --schema-only スキーマのみをリストア。データをリストアしません\n" +msgstr " -s, --schema-only スキーマのみをリストア。データをリストアしません\n" -#: pg_restore.c:492 +#: pg_restore.c:488 #, c-format -msgid "" -" -S, --superuser=NAME superuser user name to use for disabling " -"triggers\n" -msgstr "" -" -S, --superuser=NAME トリガを無効にするためのスーパユーザの名前\n" +msgid " -S, --superuser=NAME superuser user name to use for disabling triggers\n" +msgstr " -S, --superuser=NAME トリガを無効にするためのスーパユーザの名前\n" -#: pg_restore.c:493 +#: pg_restore.c:489 #, c-format -#| msgid " -t, --table=NAME restore named table(s)\n" -msgid "" -" -t, --table=NAME restore named relation (table, view, etc.)\n" -msgstr "" -" -t, --table=NAME 指名したリレーション(テーブル、ビューなど)をリ" -"ストア\n" +msgid " -t, --table=NAME restore named relation (table, view, etc.)\n" +msgstr " -t, --table=NAME 指名したリレーション(テーブル、ビューなど)をリストア\n" -#: pg_restore.c:494 +#: pg_restore.c:490 #, c-format msgid " -T, --trigger=NAME restore named trigger\n" msgstr " -T, --trigger=NAME 指名したトリガをリストア\n" -#: pg_restore.c:495 +#: pg_restore.c:491 #, c-format -msgid "" -" -x, --no-privileges skip restoration of access privileges (grant/" -"revoke)\n" +msgid " -x, --no-privileges skip restoration of access privileges (grant/revoke)\n" msgstr " -x, --no-privileges アクセス権限(grant/revoke)の復元を省略\n" -#: pg_restore.c:496 +#: pg_restore.c:492 #, c-format msgid " -1, --single-transaction restore as a single transaction\n" msgstr " -1, --single-transaction 単一のトランザクションとしてリストア\n" -#: pg_restore.c:498 +#: pg_restore.c:494 #, c-format -#| msgid " --no-security-labels do not restore security labels\n" msgid " --enable-row-security enable row security\n" msgstr " --enable-row-security 行セキュリティを有効にします\n" -#: pg_restore.c:500 +#: pg_restore.c:496 #, c-format -#| msgid "" -#| " --no-tablespaces do not restore tablespace assignments\n" msgid " --no-comments do not restore comments\n" msgstr " --no-comments コメントをリストアしない\n" -#: pg_restore.c:501 +#: pg_restore.c:497 #, c-format msgid "" -" --no-data-for-failed-tables do not restore data of tables that could not " -"be\n" +" --no-data-for-failed-tables do not restore data of tables that could not be\n" " created\n" msgstr "" -" --no-data-for-failed-tables 作成できなかったテーッブルのデータはリスト" -"ア\n" +" --no-data-for-failed-tables 作成できなかったテーッブルのデータはリストア\n" " しません\n" -#: pg_restore.c:503 +#: pg_restore.c:499 #, c-format -#| msgid " --no-replication role cannot initiate replication\n" msgid " --no-publications do not restore publications\n" msgstr " --no-publications パブリケーションをリストアしない\n" -#: pg_restore.c:504 +#: pg_restore.c:500 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels セキュリティラベルをリストアしません\n" -#: pg_restore.c:505 +#: pg_restore.c:501 #, c-format -#| msgid " --no-security-labels do not restore security labels\n" msgid " --no-subscriptions do not restore subscriptions\n" msgstr " --no-subscriptions サブスクリプションをリストアしない\n" -#: pg_restore.c:506 +#: pg_restore.c:502 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces テーブル空間の割り当てをリストアしません\n" -#: pg_restore.c:507 +#: pg_restore.c:503 #, c-format -msgid "" -" --section=SECTION restore named section (pre-data, data, or " -"post-data)\n" -msgstr "" -" --section=SECTION 指定されたセクション(データ前部、データ、データ後" -"部)をリストア\n" +msgid " --section=SECTION restore named section (pre-data, data, or post-data)\n" +msgstr " --section=SECTION 指定されたセクション(データ前部、データ、データ後部)をリストア\n" -#: pg_restore.c:520 +#: pg_restore.c:516 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=ROLENAME リストアに先立って SET ROLE します\n" -#: pg_restore.c:522 +#: pg_restore.c:518 #, c-format msgid "" "\n" -"The options -I, -n, -N, -P, -t, -T, and --section can be combined and " -"specified\n" +"The options -I, -n, -N, -P, -t, -T, and --section can be combined and specified\n" "multiple times to select multiple objects.\n" msgstr "" "\n" " -I, -n, -N, -P, -t, -T および --section オプションは組み合わせて複数回\n" "指定することで複数のオブジェクトを指定できます。\n" -#: pg_restore.c:525 +#: pg_restore.c:521 #, c-format msgid "" "\n" @@ -3283,95 +2675,62 @@ msgstr "" "入力ファイル名が指定されない場合、標準入力が使用されます。\n" "\n" -#~ msgid "worker process crashed: status %d\n" -#~ msgstr "ワーカープロセスがクラッシュしました:ステータス %d\n" - -#~ msgid "parallel_restore should not return\n" -#~ msgstr "parallel_restore は return しません\n" - -#~ msgid "missing pg_database entry for this database\n" -#~ msgstr "このデータベース用のpg_databaseエントリが見つかりません\n" - -#~ msgid "-C and -c are incompatible options\n" -#~ msgstr "オプション-Cと-cは互換性がありません\n" +#~ msgid "child process was terminated by signal %d" +#~ msgstr "子プロセスがシグナル%dで終了しました" -#~ msgid "could not close data file after reading\n" -#~ msgstr "読み込んだ後データファイルをクローズできませんでした\n" +#~ msgid "could not change directory to \"%s\"" +#~ msgstr "ディレクトリを\"%s\"に変更できませんでした" -#~ msgid "" -#~ " --version output version information, then exit\n" -#~ msgstr " --version バージョン情報を表示して終了\n" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version バージョン情報を表示し、終了します\n" -#~ msgid "child process was terminated by signal %s" -#~ msgstr "子プロセスがシグナル%sで終了しました" +#~ msgid "file archiver" +#~ msgstr "ファイルアーカイバ" -#~ msgid "" -#~ "dumpDatabase(): could not find pg_largeobject_metadata.relfrozenxid\n" -#~ msgstr "" -#~ "dumpDatabase(): pg_largeobject_metadata.relfrozenxidが見つかりません\n" +#~ msgid "could not create worker thread: %s\n" +#~ msgstr "ワーカースレッドを作成できませんでした: %s\n" -#~ msgid "could not parse version string \"%s\"\n" -#~ msgstr "バージョン文字列\"%s\"を解析できませんでした\n" +#~ msgid "*** aborted because of error\n" +#~ msgstr "*** エラーのため中断\n" -#~ msgid "found more than one pg_database entry for this database\n" -#~ msgstr "このデータベース用のpg_databaseエントリが複数ありました\n" +#~ msgid "found more than one entry for pg_indexes in pg_class\n" +#~ msgstr "pg_class内にpg_indexes用のエントリが複数ありました\n" -#~ msgid "" -#~ "invalid COPY statement -- could not find \"from stdin\" in string \"%s\" " -#~ "starting at position %lu\n" -#~ msgstr "" -#~ "COPY文が無効です -- 文字列\"%s\"の%lu位置から\"from stdin\"がありませんで" -#~ "した\n" +#~ msgid "cannot reopen non-seekable file\n" +#~ msgstr "シークできないファイルを再オープンできません\n" -#~ msgid "" -#~ "query returned more than one (%d) pg_database entry for database \"%s\"\n" -#~ msgstr "" -#~ "問い合わせにより、データベース\"%2$s\"用のエントリがpg_databaseから複数" -#~ "(%1$d)返されました\n" +#~ msgid "restoring large object OID %u\n" +#~ msgstr "OID %uのラージオブジェクトをリストアしています\n" -#~ msgid "" -#~ " --disable-triggers disable triggers during data-only restore\n" -#~ msgstr "" -#~ " --disable-triggers \n" -#~ " データのみの復元中にトリガを無効にします\n" +#~ msgid "cannot reopen stdin\n" +#~ msgstr "標準入力を再オープンできません\n" -#~ msgid "SQL command failed\n" -#~ msgstr "SQLコマンドが失敗しました\n" +#~ msgid "could not find entry for pg_indexes in pg_class\n" +#~ msgstr "pg_class内にpg_indexes用のエントリがありませんでした\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help ヘルプを表示して終了\n" +#~ msgid "could not open large object TOC for output: %s\n" +#~ msgstr "出力用のラージオブジェクトTOCをオープンできませんでした: %s\n" -#~ msgid "" -#~ " -c, --clean clean (drop) database objects before " -#~ "recreating\n" -#~ msgstr " -c, --clean 再作成前にデータベースを削除します\n" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help ヘルプを表示し、終了します\n" -#~ msgid "%s: out of memory\n" -#~ msgstr "%s: メモリ不足です\n" +#~ msgid "invalid COPY statement -- could not find \"copy\" in string \"%s\"\n" +#~ msgstr "COPY文が無効です -- 文字列\"%s\"に\"copy\"がありませんでした\n" -#~ msgid "" -#~ " --use-set-session-authorization\n" -#~ " use SET SESSION AUTHORIZATION commands instead " -#~ "of\n" -#~ " ALTER OWNER commands to set ownership\n" -#~ msgstr "" -#~ " --use-set-session-authorization\n" -#~ " 所有者をセットする際、ALTER OWNER コマンドの代" -#~ "り\n" -#~ " に SET SESSION AUTHORIZATION コマンドを使用す" -#~ "る\n" +#~ msgid "could not open large object TOC for input: %s\n" +#~ msgstr "入力用のラージオブジェクトTOCをオープンできませんでした: %s\n" -#~ msgid "cannot duplicate null pointer\n" -#~ msgstr "null ポインタを複製できません\n" +#~ msgid "query returned no rows: %s\n" +#~ msgstr "問い合わせの結果行がありませんでした: %s\n" -#~ msgid " -O, --no-owner skip restoration of object ownership\n" -#~ msgstr " -O, --no-owner オブジェクトの所有権の復元を省略\n" +#~ msgid "dumpDatabase(): could not find pg_largeobject.relfrozenxid\n" +#~ msgstr "dumpDatabase(): pg_largeobject.relfrozenxid が見つかりません\n" -#~ msgid "could not close large object file\n" -#~ msgstr "ラージオブジェクトファイルをクローズできませんでした\n" +#~ msgid "missing pg_database entry for database \"%s\"\n" +#~ msgstr "データベース\"%s\"用のエントリがpg_databaseにありません\n" -#~ msgid "%s: could not parse version \"%s\"\n" -#~ msgstr "%s: バージョン\"%s\"を解析できませんでした\n" +#~ msgid "%s: invalid -X option -- %s\n" +#~ msgstr "%s: 無効な -X オプション -- %s\n" #~ msgid "" #~ "WARNING:\n" @@ -3382,59 +2741,79 @@ msgstr "" #~ "この書式はデモを目的としたものです。通常の使用を意図したものではありま\n" #~ "せん。ファイルは現在の作業ディレクトリに書き出されます\n" -#~ msgid "%s: invalid -X option -- %s\n" -#~ msgstr "%s: 無効な -X オプション -- %s\n" +#~ msgid "%s: could not parse version \"%s\"\n" +#~ msgstr "%s: バージョン\"%s\"を解析できませんでした\n" -#~ msgid "missing pg_database entry for database \"%s\"\n" -#~ msgstr "データベース\"%s\"用のエントリがpg_databaseにありません\n" +#~ msgid "could not close large object file\n" +#~ msgstr "ラージオブジェクトファイルをクローズできませんでした\n" -#~ msgid "dumpDatabase(): could not find pg_largeobject.relfrozenxid\n" -#~ msgstr "dumpDatabase(): pg_largeobject.relfrozenxid が見つかりません\n" +#~ msgid " -O, --no-owner skip restoration of object ownership\n" +#~ msgstr " -O, --no-owner オブジェクトの所有権の復元を省略\n" -#~ msgid "query returned no rows: %s\n" -#~ msgstr "問い合わせの結果行がありませんでした: %s\n" +#~ msgid "cannot duplicate null pointer\n" +#~ msgstr "null ポインタを複製できません\n" -#~ msgid "could not open large object TOC for input: %s\n" -#~ msgstr "入力用のラージオブジェクトTOCをオープンできませんでした: %s\n" +#~ msgid "" +#~ " --use-set-session-authorization\n" +#~ " use SET SESSION AUTHORIZATION commands instead of\n" +#~ " ALTER OWNER commands to set ownership\n" +#~ msgstr "" +#~ " --use-set-session-authorization\n" +#~ " 所有者をセットする際、ALTER OWNER コマンドの代り\n" +#~ " に SET SESSION AUTHORIZATION コマンドを使用する\n" -#~ msgid "invalid COPY statement -- could not find \"copy\" in string \"%s\"\n" -#~ msgstr "COPY文が無効です -- 文字列\"%s\"に\"copy\"がありませんでした\n" +#~ msgid "%s: out of memory\n" +#~ msgstr "%s: メモリ不足です\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help ヘルプを表示し、終了します\n" +#~ msgid " -c, --clean clean (drop) database objects before recreating\n" +#~ msgstr " -c, --clean 再作成前にデータベースを削除します\n" -#~ msgid "could not open large object TOC for output: %s\n" -#~ msgstr "出力用のラージオブジェクトTOCをオープンできませんでした: %s\n" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help ヘルプを表示して終了\n" -#~ msgid "could not find entry for pg_indexes in pg_class\n" -#~ msgstr "pg_class内にpg_indexes用のエントリがありませんでした\n" +#~ msgid "SQL command failed\n" +#~ msgstr "SQLコマンドが失敗しました\n" -#~ msgid "cannot reopen stdin\n" -#~ msgstr "標準入力を再オープンできません\n" +#~ msgid " --disable-triggers disable triggers during data-only restore\n" +#~ msgstr "" +#~ " --disable-triggers \n" +#~ " データのみの復元中にトリガを無効にします\n" -#~ msgid "restoring large object OID %u\n" -#~ msgstr "OID %uのラージオブジェクトをリストアしています\n" +#~ msgid "query returned more than one (%d) pg_database entry for database \"%s\"\n" +#~ msgstr "問い合わせにより、データベース\"%2$s\"用のエントリがpg_databaseから複数(%1$d)返されました\n" -#~ msgid "cannot reopen non-seekable file\n" -#~ msgstr "シークできないファイルを再オープンできません\n" +#~ msgid "invalid COPY statement -- could not find \"from stdin\" in string \"%s\" starting at position %lu\n" +#~ msgstr "COPY文が無効です -- 文字列\"%s\"の%lu位置から\"from stdin\"がありませんでした\n" -#~ msgid "found more than one entry for pg_indexes in pg_class\n" -#~ msgstr "pg_class内にpg_indexes用のエントリが複数ありました\n" +#~ msgid "found more than one pg_database entry for this database\n" +#~ msgstr "このデータベース用のpg_databaseエントリが複数ありました\n" -#~ msgid "*** aborted because of error\n" -#~ msgstr "*** エラーのため中断\n" +#~ msgid "could not parse version string \"%s\"\n" +#~ msgstr "バージョン文字列\"%s\"を解析できませんでした\n" -#~ msgid "could not create worker thread: %s\n" -#~ msgstr "ワーカースレッドを作成できませんでした: %s\n" +#~ msgid "dumpDatabase(): could not find pg_largeobject_metadata.relfrozenxid\n" +#~ msgstr "dumpDatabase(): pg_largeobject_metadata.relfrozenxidが見つかりません\n" -#~ msgid "file archiver" -#~ msgstr "ファイルアーカイバ" +#~ msgid "child process was terminated by signal %s" +#~ msgstr "子プロセスがシグナル%sで終了しました" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version バージョン情報を表示し、終了します\n" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version バージョン情報を表示して終了\n" -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "ディレクトリを\"%s\"に変更できませんでした" +#~ msgid "could not close data file after reading\n" +#~ msgstr "読み込んだ後データファイルをクローズできませんでした\n" -#~ msgid "child process was terminated by signal %d" -#~ msgstr "子プロセスがシグナル%dで終了しました" +#~ msgid "-C and -c are incompatible options\n" +#~ msgstr "オプション-Cと-cは互換性がありません\n" + +#~ msgid "missing pg_database entry for this database\n" +#~ msgstr "このデータベース用のpg_databaseエントリが見つかりません\n" + +#~ msgid "parallel_restore should not return\n" +#~ msgstr "parallel_restore は return しません\n" + +#~ msgid "worker process crashed: status %d\n" +#~ msgstr "ワーカープロセスがクラッシュしました:ステータス %d\n" + +#~ msgid "internal error -- neither th nor fh specified in tarReadRaw()\n" +#~ msgstr "内部エラー -- tarReadRaw()にてthもfhも指定されていませんでした\n" diff --git a/src/bin/pg_dump/po/ko.po b/src/bin/pg_dump/po/ko.po index 86971bc5274a8..f533f7e4729de 100644 --- a/src/bin/pg_dump/po/ko.po +++ b/src/bin/pg_dump/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_dump (PostgreSQL) 12\n" +"Project-Id-Version: pg_dump (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:16+0000\n" -"PO-Revision-Date: 2019-10-31 16:59+0900\n" +"POT-Creation-Date: 2020-10-05 20:46+0000\n" +"PO-Revision-Date: 2020-10-06 13:40+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean Team \n" "Language: ko\n" @@ -15,67 +15,67 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "심각: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "오류: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "경고: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "현재 디렉터리를 알 수 없음: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "잘못된 바이너리 파일 \"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "\"%s\" 바이너리 파일을 읽을 수 없음" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "실행 할 \"%s\" 파일을 찾을 수 없음" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "\"%s\" 이름의 디렉터리로 이동할 수 없습니다: %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "\"%s\" 심볼릭 링크 파일을 읽을 수 없음: %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "pclose 실패: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 msgid "out of memory" msgstr "메모리 부족" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "메모리 부족\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "null 포인터를 중복할 수 없음 (내부 오류)\n" @@ -110,212 +110,212 @@ msgstr "하위 프로세스가 종료되었음, 시그널 %d: %s" msgid "child process exited with unrecognized status %d" msgstr "하위 프로세스가 종료되었음, 알수 없는 상태 %d" -#: common.c:123 +#: common.c:121 #, c-format msgid "reading extensions" msgstr "확장 기능 읽는 중" -#: common.c:127 +#: common.c:125 #, c-format msgid "identifying extension members" msgstr "확장 멤버를 식별 중" -#: common.c:130 +#: common.c:128 #, c-format msgid "reading schemas" msgstr "스키마들을 읽는 중" -#: common.c:140 +#: common.c:138 #, c-format msgid "reading user-defined tables" msgstr "사용자 정의 테이블들을 읽는 중" -#: common.c:147 +#: common.c:145 #, c-format msgid "reading user-defined functions" msgstr "사용자 정의 함수들 읽는 중" -#: common.c:152 +#: common.c:150 #, c-format msgid "reading user-defined types" msgstr "사용자 정의 자료형을 읽는 중" -#: common.c:157 +#: common.c:155 #, c-format msgid "reading procedural languages" msgstr "프로시쥬얼 언어를 읽는 중" -#: common.c:160 +#: common.c:158 #, c-format msgid "reading user-defined aggregate functions" msgstr "사용자 정의 집계 함수를 읽는 중" -#: common.c:163 +#: common.c:161 #, c-format msgid "reading user-defined operators" msgstr "사용자 정의 연산자를 읽는 중" -#: common.c:167 +#: common.c:165 #, c-format msgid "reading user-defined access methods" msgstr "사용자 정의 접근 방법을 읽는 중" -#: common.c:170 +#: common.c:168 #, c-format msgid "reading user-defined operator classes" msgstr "사용자 정의 연산자 클래스를 읽는 중" -#: common.c:173 +#: common.c:171 #, c-format msgid "reading user-defined operator families" msgstr "사용자 정의 연산자 부류들 읽는 중" -#: common.c:176 +#: common.c:174 #, c-format msgid "reading user-defined text search parsers" msgstr "사용자 정의 텍스트 검색 파서를 읽는 중" -#: common.c:179 +#: common.c:177 #, c-format msgid "reading user-defined text search templates" msgstr "사용자 정의 텍스트 검색 템플릿을 읽는 중" -#: common.c:182 +#: common.c:180 #, c-format msgid "reading user-defined text search dictionaries" msgstr "사용자 정의 텍스트 검색 사전을 읽는 중" -#: common.c:185 +#: common.c:183 #, c-format msgid "reading user-defined text search configurations" msgstr "사용자 정의 텍스트 검색 구성을 읽는 중" -#: common.c:188 +#: common.c:186 #, c-format msgid "reading user-defined foreign-data wrappers" msgstr "사용자 정의 외부 데이터 래퍼를 읽는 중" -#: common.c:191 +#: common.c:189 #, c-format msgid "reading user-defined foreign servers" msgstr "사용자 정의 외부 서버를 읽는 중" -#: common.c:194 +#: common.c:192 #, c-format msgid "reading default privileges" msgstr "기본 접근 권한 읽는 중" -#: common.c:197 +#: common.c:195 #, c-format msgid "reading user-defined collations" msgstr "사용자 정의 글자 정렬(collation) 읽는 중" -#: common.c:201 +#: common.c:199 #, c-format msgid "reading user-defined conversions" msgstr "사용자 정의 인코딩 변환규칙을 읽는 중" -#: common.c:204 +#: common.c:202 #, c-format msgid "reading type casts" msgstr "형변환자(type cast)들을 읽는 중" -#: common.c:207 +#: common.c:205 #, c-format msgid "reading transforms" msgstr "변환자(transform) 읽는 중" -#: common.c:210 +#: common.c:208 #, c-format msgid "reading table inheritance information" msgstr "테이블 상속 정보를 읽는 중" -#: common.c:213 +#: common.c:211 #, c-format msgid "reading event triggers" msgstr "이벤트 트리거들을 읽는 중" -#: common.c:217 +#: common.c:215 #, c-format msgid "finding extension tables" msgstr "확장 테이블을 찾는 중" -#: common.c:221 +#: common.c:219 #, c-format msgid "finding inheritance relationships" msgstr "상속 관계를 조사중" -#: common.c:224 +#: common.c:222 #, c-format msgid "reading column info for interesting tables" msgstr "재미난 테이블들(interesting tables)을 위해 열 정보를 읽는 중" -#: common.c:227 +#: common.c:225 #, c-format msgid "flagging inherited columns in subtables" msgstr "하위 테이블에서 상속된 열 구분중" -#: common.c:230 +#: common.c:228 #, c-format msgid "reading indexes" msgstr "인덱스들을 읽는 중" -#: common.c:233 +#: common.c:231 #, c-format msgid "flagging indexes in partitioned tables" msgstr "하위 파티션 테이블에서 인덱스를 플래그 처리하는 중" -#: common.c:236 +#: common.c:234 #, c-format msgid "reading extended statistics" msgstr "확장 통계들을 읽는 중" -#: common.c:239 +#: common.c:237 #, c-format msgid "reading constraints" msgstr "제약 조건들을 읽는 중" -#: common.c:242 +#: common.c:240 #, c-format msgid "reading triggers" msgstr "트리거들을 읽는 중" -#: common.c:245 +#: common.c:243 #, c-format msgid "reading rewrite rules" msgstr "룰(rule) 읽는 중" -#: common.c:248 +#: common.c:246 #, c-format msgid "reading policies" msgstr "정책 읽는 중" -#: common.c:251 +#: common.c:249 #, c-format msgid "reading publications" msgstr "발행 정보를 읽는 중" -#: common.c:254 +#: common.c:252 #, c-format msgid "reading publication membership" msgstr "발행 맵버쉽을 읽을 중" -#: common.c:257 +#: common.c:255 #, c-format msgid "reading subscriptions" msgstr "구독정보를 읽는 중" -#: common.c:1026 +#: common.c:1025 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "안전 검사 실패, OID %u인 부모 개체가 없음. 해당 테이블 \"%s\" (OID %u)" -#: common.c:1068 +#: common.c:1067 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "\"%s\" 숫자 배열을 분석할 수 없음: 너무 많은 숫자들이 있음" -#: common.c:1083 +#: common.c:1082 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "\"%s\" 숫자 배열을 분석할 수 없음: 숫자안에 이상한 글자가 있음" @@ -325,76 +325,76 @@ msgstr "\"%s\" 숫자 배열을 분석할 수 없음: 숫자안에 이상한 글 msgid "invalid compression code: %d" msgstr "잘못된 압축 수위: %d" -#: compress_io.c:134 compress_io.c:170 compress_io.c:188 compress_io.c:508 -#: compress_io.c:551 +#: compress_io.c:134 compress_io.c:170 compress_io.c:188 compress_io.c:504 +#: compress_io.c:547 #, c-format msgid "not built with zlib support" msgstr "zlib 지원 기능이 없음" -#: compress_io.c:237 compress_io.c:336 +#: compress_io.c:236 compress_io.c:333 #, c-format msgid "could not initialize compression library: %s" msgstr "압축 라이브러리를 초기화 할 수 없음: %s" -#: compress_io.c:257 +#: compress_io.c:256 #, c-format msgid "could not close compression stream: %s" msgstr "압축 스트림을 닫을 수 없음: %s" -#: compress_io.c:274 +#: compress_io.c:273 #, c-format msgid "could not compress data: %s" msgstr "자료를 압축할 수 없음: %s" -#: compress_io.c:352 compress_io.c:367 +#: compress_io.c:349 compress_io.c:364 #, c-format msgid "could not uncompress data: %s" msgstr "자료 압축을 풀 수 없습니다: %s" -#: compress_io.c:374 +#: compress_io.c:371 #, c-format msgid "could not close compression library: %s" msgstr "압축 라이브러리를 닫을 수 없음: %s" -#: compress_io.c:588 compress_io.c:625 pg_backup_tar.c:555 pg_backup_tar.c:558 +#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:557 pg_backup_tar.c:560 #, c-format msgid "could not read from input file: %s" msgstr "입력 파일을 읽을 수 없음: %s" -#: compress_io.c:627 pg_backup_custom.c:578 pg_backup_directory.c:539 -#: pg_backup_tar.c:795 pg_backup_tar.c:818 +#: compress_io.c:623 pg_backup_custom.c:646 pg_backup_directory.c:552 +#: pg_backup_tar.c:793 pg_backup_tar.c:816 #, c-format msgid "could not read from input file: end of file" msgstr "입력 파일을 읽을 수 없음: 파일 끝" # # search5 끝 # # advance 부분 -#: parallel.c:268 +#: parallel.c:267 #, c-format msgid "WSAStartup failed: %d" msgstr "WSAStartup 작업 실패: %d" -#: parallel.c:979 +#: parallel.c:978 #, c-format msgid "could not create communication channels: %m" msgstr "통신 체널을 만들 수 없음: %m" -#: parallel.c:1036 +#: parallel.c:1035 #, c-format msgid "could not create worker process: %m" msgstr "작업자 프로세스를 만들 수 없음: %m" -#: parallel.c:1166 +#: parallel.c:1165 #, c-format msgid "unrecognized command received from master: \"%s\"" msgstr "마스터에서 알 수 없는 명령을 받음: \"%s\"" -#: parallel.c:1209 parallel.c:1447 +#: parallel.c:1208 parallel.c:1446 #, c-format msgid "invalid message received from worker: \"%s\"" msgstr "작업 프로세스로부터 잘못된 메시지를 받음: \"%s\"" -#: parallel.c:1341 +#: parallel.c:1340 #, c-format msgid "" "could not obtain lock on relation \"%s\"\n" @@ -406,82 +406,82 @@ msgstr "" "이 상황은 일반적으로 다른 세션에서 해당 테이블을 이미 덤프하고 있거나 기타 다" "른 이유로 다른 세션에 의해서 선점 된 경우입니다." -#: parallel.c:1430 +#: parallel.c:1429 #, c-format msgid "a worker process died unexpectedly" msgstr "작업 프로세스가 예상치 않게 종료됨" -#: parallel.c:1552 parallel.c:1670 +#: parallel.c:1551 parallel.c:1669 #, c-format msgid "could not write to the communication channel: %m" msgstr "통신 체널에에 쓸 수 없음: %m" -#: parallel.c:1629 +#: parallel.c:1628 #, c-format msgid "select() failed: %m" msgstr "select() 실패: %m" -#: parallel.c:1754 +#: parallel.c:1753 #, c-format msgid "pgpipe: could not create socket: error code %d" msgstr "pgpipe: 소켓을 만들 수 없음: 오류 코드 %d" -#: parallel.c:1765 +#: parallel.c:1764 #, c-format msgid "pgpipe: could not bind: error code %d" msgstr "pgpipe: 바인딩 할 수 없음: 오류 코드 %d" -#: parallel.c:1772 +#: parallel.c:1771 #, c-format msgid "pgpipe: could not listen: error code %d" msgstr "pgpipe: 리슨 할 수 없음: 오류 코드 %d" -#: parallel.c:1779 +#: parallel.c:1778 #, c-format msgid "pgpipe: getsockname() failed: error code %d" msgstr "pgpipe: getsockname() 실패: 오류 코드 %d" -#: parallel.c:1790 +#: parallel.c:1789 #, c-format msgid "pgpipe: could not create second socket: error code %d" msgstr "pgpipe: 두번째 소켓을 만들 수 없음: 오류 코드 %d" -#: parallel.c:1799 +#: parallel.c:1798 #, c-format msgid "pgpipe: could not connect socket: error code %d" msgstr "pgpipe: 소켓 접속 실패: 오류 코드 %d" -#: parallel.c:1808 +#: parallel.c:1807 #, c-format msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: 접속을 승인할 수 없음: 오류 코드 %d" -#: pg_backup_archiver.c:272 pg_backup_archiver.c:1595 +#: pg_backup_archiver.c:277 pg_backup_archiver.c:1587 #, c-format msgid "could not close output file: %m" msgstr "출력 파일을 닫을 수 없음: %m" -#: pg_backup_archiver.c:316 pg_backup_archiver.c:320 +#: pg_backup_archiver.c:321 pg_backup_archiver.c:325 #, c-format msgid "archive items not in correct section order" msgstr "아카이브 아이템의 순서가 섹션에서 비정상적임" -#: pg_backup_archiver.c:326 +#: pg_backup_archiver.c:331 #, c-format msgid "unexpected section code %d" msgstr "예상치 못한 섹션 코드 %d" -#: pg_backup_archiver.c:363 +#: pg_backup_archiver.c:368 #, c-format msgid "parallel restore is not supported with this archive file format" msgstr "이 아카이브 파일 형식에서는 병렬 복원이 지원되지 않음" -#: pg_backup_archiver.c:367 +#: pg_backup_archiver.c:372 #, c-format msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump" msgstr "8.0 이전 pg_dump로 만든 아카이브에서는 병렬 복원이 지원되지 않음" -#: pg_backup_archiver.c:385 +#: pg_backup_archiver.c:390 #, c-format msgid "" "cannot restore from compressed archive (compression not supported in this " @@ -490,352 +490,352 @@ msgstr "" "압축된 자료파일을 복원용으로 사용할 수 없습니다(압축기능을 지원하지 않고 컴파" "일되었음)" -#: pg_backup_archiver.c:402 +#: pg_backup_archiver.c:407 #, c-format msgid "connecting to database for restore" msgstr "복원 작업을 위해 데이터베이스에 접속 중" -#: pg_backup_archiver.c:404 +#: pg_backup_archiver.c:409 #, c-format msgid "direct database connections are not supported in pre-1.3 archives" msgstr "pre-1.3 archive에서 직통 데이터베이스 접속은 지원되지 않음" -#: pg_backup_archiver.c:449 +#: pg_backup_archiver.c:452 #, c-format msgid "implied data-only restore" msgstr "암묵적으로 자료만 복원" -#: pg_backup_archiver.c:515 +#: pg_backup_archiver.c:518 #, c-format msgid "dropping %s %s" msgstr "%s %s 삭제 중" -#: pg_backup_archiver.c:610 +#: pg_backup_archiver.c:613 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "\"%s\" 구문에서 insert IF EXISTS 부분을 찾을 수 없음" -#: pg_backup_archiver.c:766 pg_backup_archiver.c:768 +#: pg_backup_archiver.c:769 pg_backup_archiver.c:771 #, c-format msgid "warning from original dump file: %s" msgstr "원본 덤프 파일에서 발생한 경고: %s" -#: pg_backup_archiver.c:783 +#: pg_backup_archiver.c:786 #, c-format msgid "creating %s \"%s.%s\"" msgstr "%s \"%s.%s\" 만드는 중" -#: pg_backup_archiver.c:786 +#: pg_backup_archiver.c:789 #, c-format msgid "creating %s \"%s\"" msgstr "%s \"%s\" 만드는 중" -#: pg_backup_archiver.c:843 +#: pg_backup_archiver.c:839 #, c-format msgid "connecting to new database \"%s\"" msgstr "\"%s\" 새 데이터베이스에 접속중" -#: pg_backup_archiver.c:871 +#: pg_backup_archiver.c:866 #, c-format msgid "processing %s" msgstr "%s 처리 중" -#: pg_backup_archiver.c:891 +#: pg_backup_archiver.c:886 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "\"%s.%s\" 테이블의 자료를 처리 중" -#: pg_backup_archiver.c:953 +#: pg_backup_archiver.c:948 #, c-format msgid "executing %s %s" msgstr "실행중: %s %s" -#: pg_backup_archiver.c:992 +#: pg_backup_archiver.c:987 #, c-format msgid "disabling triggers for %s" msgstr "%s 트리거 작동을 비활성화 하는 중" -#: pg_backup_archiver.c:1018 +#: pg_backup_archiver.c:1013 #, c-format msgid "enabling triggers for %s" msgstr "%s 트리거 작동을 활성화 하는 중" -#: pg_backup_archiver.c:1046 +#: pg_backup_archiver.c:1041 #, c-format msgid "" "internal error -- WriteData cannot be called outside the context of a " "DataDumper routine" msgstr "내부 오류 -- WriteData는 DataDumper 루틴 영역 밖에서 호출 될 수 없음" -#: pg_backup_archiver.c:1231 +#: pg_backup_archiver.c:1224 #, c-format msgid "large-object output not supported in chosen format" msgstr "선택한 파일 양식으로는 large-object를 덤프할 수 없음" -#: pg_backup_archiver.c:1289 +#: pg_backup_archiver.c:1282 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" msgstr[0] "%d개의 큰 개체가 복원됨" -#: pg_backup_archiver.c:1310 pg_backup_tar.c:738 +#: pg_backup_archiver.c:1303 pg_backup_tar.c:736 #, c-format msgid "restoring large object with OID %u" msgstr "%u OID large object를 복원중" -#: pg_backup_archiver.c:1322 +#: pg_backup_archiver.c:1315 #, c-format msgid "could not create large object %u: %s" msgstr "%u large object를 만들 수 없음: %s" -#: pg_backup_archiver.c:1327 pg_dump.c:3471 +#: pg_backup_archiver.c:1320 pg_dump.c:3548 #, c-format msgid "could not open large object %u: %s" msgstr "%u large object를 열 수 없음: %s" -#: pg_backup_archiver.c:1384 +#: pg_backup_archiver.c:1377 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "TOC 파일 \"%s\"을(를) 열 수 없음: %m" -#: pg_backup_archiver.c:1424 +#: pg_backup_archiver.c:1417 #, c-format msgid "line ignored: %s" msgstr "줄 무시됨: %s" -#: pg_backup_archiver.c:1431 +#: pg_backup_archiver.c:1424 #, c-format msgid "could not find entry for ID %d" msgstr "%d ID에 대한 항목을 찾지 못했음" -#: pg_backup_archiver.c:1452 pg_backup_directory.c:222 -#: pg_backup_directory.c:587 +#: pg_backup_archiver.c:1445 pg_backup_directory.c:222 +#: pg_backup_directory.c:598 #, c-format msgid "could not close TOC file: %m" msgstr "TOC 파일을 닫을 수 없음: %m" -#: pg_backup_archiver.c:1567 pg_backup_custom.c:159 pg_backup_directory.c:332 -#: pg_backup_directory.c:574 pg_backup_directory.c:637 -#: pg_backup_directory.c:656 pg_dumpall.c:485 +#: pg_backup_archiver.c:1559 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_directory.c:585 pg_backup_directory.c:648 +#: pg_backup_directory.c:667 pg_dumpall.c:484 #, c-format msgid "could not open output file \"%s\": %m" msgstr "\"%s\" 출력 파일을 열 수 없음: %m" -#: pg_backup_archiver.c:1569 pg_backup_custom.c:165 +#: pg_backup_archiver.c:1561 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "출력 파일을 열 수 없음: %m" -#: pg_backup_archiver.c:1662 +#: pg_backup_archiver.c:1654 #, c-format msgid "wrote %lu byte of large object data (result = %lu)" msgid_plural "wrote %lu bytes of large object data (result = %lu)" msgstr[0] "%lu바이트의 큰 개체 데이터를 씀(결과 = %lu)" -#: pg_backup_archiver.c:1667 +#: pg_backup_archiver.c:1659 #, c-format msgid "could not write to large object (result: %lu, expected: %lu)" msgstr "large object를 쓸 수 없음 (결과값: %lu, 예상값: %lu)" -#: pg_backup_archiver.c:1759 +#: pg_backup_archiver.c:1749 #, c-format msgid "while INITIALIZING:" msgstr "초기화 작업 중:" -#: pg_backup_archiver.c:1764 +#: pg_backup_archiver.c:1754 #, c-format msgid "while PROCESSING TOC:" msgstr "TOC 처리하는 중:" -#: pg_backup_archiver.c:1769 +#: pg_backup_archiver.c:1759 #, c-format msgid "while FINALIZING:" msgstr "뒷 마무리 작업 중:" -#: pg_backup_archiver.c:1774 +#: pg_backup_archiver.c:1764 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "%d TOC 항목에서; %u %u %s %s %s" -#: pg_backup_archiver.c:1850 +#: pg_backup_archiver.c:1840 #, c-format msgid "bad dumpId" msgstr "잘못된 dumpID" -#: pg_backup_archiver.c:1871 +#: pg_backup_archiver.c:1861 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "TABLE DATA 아이템에 대한 잘못된 테이블 dumpId" -#: pg_backup_archiver.c:1963 +#: pg_backup_archiver.c:1953 #, c-format msgid "unexpected data offset flag %d" msgstr "예상치 못한 자료 옵셋 플래그 %d" -#: pg_backup_archiver.c:1976 +#: pg_backup_archiver.c:1966 #, c-format msgid "file offset in dump file is too large" msgstr "덤프 파일에서 파일 옵셋 값이 너무 큽니다" -#: pg_backup_archiver.c:2113 pg_backup_archiver.c:2123 +#: pg_backup_archiver.c:2103 pg_backup_archiver.c:2113 #, c-format msgid "directory name too long: \"%s\"" msgstr "디렉터리 이름이 너무 긺: \"%s\"" -#: pg_backup_archiver.c:2131 +#: pg_backup_archiver.c:2121 #, c-format msgid "" "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not " "exist)" msgstr "\"%s\" 디렉터리가 알맞은 아카이브용이 아님 (\"toc.dat\" 파일이 없음)" -#: pg_backup_archiver.c:2139 pg_backup_custom.c:176 pg_backup_custom.c:760 -#: pg_backup_directory.c:207 pg_backup_directory.c:391 +#: pg_backup_archiver.c:2129 pg_backup_custom.c:173 pg_backup_custom.c:812 +#: pg_backup_directory.c:207 pg_backup_directory.c:394 #, c-format msgid "could not open input file \"%s\": %m" msgstr "\"%s\" 입력 파일을 열 수 없음: %m" -#: pg_backup_archiver.c:2146 pg_backup_custom.c:182 +#: pg_backup_archiver.c:2136 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "입력 파일을 열 수 없음: %m" -#: pg_backup_archiver.c:2152 +#: pg_backup_archiver.c:2142 #, c-format msgid "could not read input file: %m" msgstr "입력 파일을 읽을 수 없음: %m" -#: pg_backup_archiver.c:2154 +#: pg_backup_archiver.c:2144 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "입력 파일이 너무 짧습니다 (%lu 읽었음, 예상치 5)" -#: pg_backup_archiver.c:2239 +#: pg_backup_archiver.c:2229 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "입력 파일은 일반 텍스트 덤프 파일입니다. psql 명령을 사용하세요." -#: pg_backup_archiver.c:2245 +#: pg_backup_archiver.c:2235 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "입력 파일에서 타당한 아카이브를 찾을 수 없습니다(너무 짧은지?)" -#: pg_backup_archiver.c:2251 +#: pg_backup_archiver.c:2241 #, c-format msgid "input file does not appear to be a valid archive" msgstr "입력 파일에서 타당한 아카이브를 찾을 수 없음" -#: pg_backup_archiver.c:2271 +#: pg_backup_archiver.c:2261 #, c-format msgid "could not close input file: %m" msgstr "입력 파일을 닫을 수 없음: %m" -#: pg_backup_archiver.c:2385 +#: pg_backup_archiver.c:2373 #, c-format msgid "unrecognized file format \"%d\"" msgstr "알 수 없는 파일 포멧: \"%d\"" -#: pg_backup_archiver.c:2467 pg_backup_archiver.c:4475 +#: pg_backup_archiver.c:2455 pg_backup_archiver.c:4458 #, c-format msgid "finished item %d %s %s" msgstr "%d %s %s 항목 마침" -#: pg_backup_archiver.c:2471 pg_backup_archiver.c:4488 +#: pg_backup_archiver.c:2459 pg_backup_archiver.c:4471 #, c-format msgid "worker process failed: exit code %d" msgstr "작업자 프로세스 실패: 종료 코드 %d" -#: pg_backup_archiver.c:2591 +#: pg_backup_archiver.c:2579 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "%d ID 항목은 범위를 벗어났음 -- TOC 정보가 손상된 듯 합니다" -#: pg_backup_archiver.c:2658 +#: pg_backup_archiver.c:2646 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "WITH OIDS 옵션이 있는 테이블의 복원은 이제 지원하지 않습니다" -#: pg_backup_archiver.c:2740 +#: pg_backup_archiver.c:2728 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "알 수 없는 인코딩: \"%s\"" -#: pg_backup_archiver.c:2745 +#: pg_backup_archiver.c:2733 #, c-format msgid "invalid ENCODING item: %s" msgstr "잘못된 ENCODING 항목: %s" -#: pg_backup_archiver.c:2763 +#: pg_backup_archiver.c:2751 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "잘못된 STDSTRINGS 항목: %s" -#: pg_backup_archiver.c:2788 +#: pg_backup_archiver.c:2776 #, c-format msgid "schema \"%s\" not found" msgstr "\"%s\" 스키마를 찾을 수 없음" -#: pg_backup_archiver.c:2795 +#: pg_backup_archiver.c:2783 #, c-format msgid "table \"%s\" not found" msgstr "\"%s\" 테이블을 찾을 수 없음" -#: pg_backup_archiver.c:2802 +#: pg_backup_archiver.c:2790 #, c-format msgid "index \"%s\" not found" msgstr "\"%s\" 인덱스를 찾을 수 없음" -#: pg_backup_archiver.c:2809 +#: pg_backup_archiver.c:2797 #, c-format msgid "function \"%s\" not found" msgstr "\"%s\" 함수를 찾을 수 없음" -#: pg_backup_archiver.c:2816 +#: pg_backup_archiver.c:2804 #, c-format msgid "trigger \"%s\" not found" msgstr "\"%s\" 트리거를 찾을 수 없음" -#: pg_backup_archiver.c:3195 +#: pg_backup_archiver.c:3196 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "\"%s\" 사용자로 세션 사용자를 지정할 수 없음: %s" -#: pg_backup_archiver.c:3334 +#: pg_backup_archiver.c:3328 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "search_path를 \"%s\"(으)로 지정할 수 없음: %s" -#: pg_backup_archiver.c:3396 +#: pg_backup_archiver.c:3390 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "default_tablespace로 %s(으)로 지정할 수 없음: %s" -#: pg_backup_archiver.c:3441 +#: pg_backup_archiver.c:3435 #, c-format msgid "could not set default_table_access_method: %s" msgstr "default_table_access_method를 지정할 수 없음: %s" -#: pg_backup_archiver.c:3533 pg_backup_archiver.c:3691 +#: pg_backup_archiver.c:3527 pg_backup_archiver.c:3685 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "\"%s\" 개체의 소유주를 지정할 수 없습니다" -#: pg_backup_archiver.c:3795 +#: pg_backup_archiver.c:3789 #, c-format msgid "did not find magic string in file header" msgstr "파일 헤더에서 매직 문자열을 찾지 못했습니다" -#: pg_backup_archiver.c:3808 +#: pg_backup_archiver.c:3802 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "파일 헤더에 있는 %d.%d 버전은 지원되지 않습니다" -#: pg_backup_archiver.c:3813 +#: pg_backup_archiver.c:3807 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "정수 크기 (%lu) 안전성 검사 실패" -#: pg_backup_archiver.c:3817 +#: pg_backup_archiver.c:3811 #, c-format msgid "" "archive was made on a machine with larger integers, some operations might " @@ -844,12 +844,12 @@ msgstr "" "이 아카이브는 큰 정수를 지원하는 시스템에서 만들어졌습니다. 그래서 몇 동작이 " "실패할 수도 있습니다." -#: pg_backup_archiver.c:3827 +#: pg_backup_archiver.c:3821 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "예상되는 포멧 (%d)와 발견된 파일 포멧 (%d)이 서로 다름" -#: pg_backup_archiver.c:3843 +#: pg_backup_archiver.c:3837 #, c-format msgid "" "archive is compressed, but this installation does not support compression -- " @@ -858,72 +858,68 @@ msgstr "" "아카이브는 압축되어있지만, 이 프로그램에서는 압축기능을 지원하지 못합니다 -- " "이 안에 있는 자료를 모두 사용할 수 없습니다." -#: pg_backup_archiver.c:3861 +#: pg_backup_archiver.c:3855 #, c-format msgid "invalid creation date in header" msgstr "헤더에 잘못된 생성 날짜가 있음" -#: pg_backup_archiver.c:3998 +#: pg_backup_archiver.c:3983 #, c-format msgid "processing item %d %s %s" msgstr "%d %s %s 항목을 처리하는 중" -#: pg_backup_archiver.c:4077 +#: pg_backup_archiver.c:4062 #, c-format msgid "entering main parallel loop" msgstr "기본 병렬 루프로 시작 중" -#: pg_backup_archiver.c:4088 +#: pg_backup_archiver.c:4073 #, c-format msgid "skipping item %d %s %s" msgstr "%d %s %s 항목을 건너뛰는 중" -#: pg_backup_archiver.c:4097 +#: pg_backup_archiver.c:4082 #, c-format msgid "launching item %d %s %s" msgstr "%d %s %s 항목을 시작하는 중" -#: pg_backup_archiver.c:4151 +#: pg_backup_archiver.c:4136 #, c-format msgid "finished main parallel loop" msgstr "기본 병렬 루프 마침" -#: pg_backup_archiver.c:4189 +#: pg_backup_archiver.c:4172 #, c-format msgid "processing missed item %d %s %s" msgstr "누락된 %d %s %s 항목 처리 중" -#: pg_backup_archiver.c:4794 +#: pg_backup_archiver.c:4777 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "\"%s\" 테이블을 만들 수 없어, 해당 자료는 복원되지 않을 것입니다." -#: pg_backup_custom.c:377 pg_backup_null.c:150 +#: pg_backup_custom.c:378 pg_backup_null.c:147 #, c-format msgid "invalid OID for large object" msgstr "잘못된 large object용 OID" -#: pg_backup_custom.c:447 -#, c-format -msgid "unrecognized data block type (%d) while searching archive" -msgstr "아카이브 검색하는 동안 알 수 없는 자료 블럭 형태(%d)를 발견함" - -#: pg_backup_custom.c:458 pg_backup_custom.c:818 +#: pg_backup_custom.c:441 pg_backup_custom.c:507 pg_backup_custom.c:632 +#: pg_backup_custom.c:870 pg_backup_tar.c:1086 pg_backup_tar.c:1091 #, c-format msgid "error during file seek: %m" msgstr "파일 seek 작업하는 도중 오류가 발생했습니다: %m" -#: pg_backup_custom.c:467 +#: pg_backup_custom.c:480 #, c-format -msgid "" -"could not find block ID %d in archive -- possibly due to out-of-order " -"restore request, which cannot be handled due to lack of data offsets in " -"archive" -msgstr "" -"아카이브에서 블록 ID %d을(를) 찾지 못했습니다. 복원 요청이 잘못된 것 같습니" -"다. 아카이브의 데이터 오프셋이 부족하여 요청을 처리할 수 없습니다." +msgid "data block %d has wrong seek position" +msgstr "%d 자료 블록에 잘못된 접근 위치가 있음" -#: pg_backup_custom.c:472 +#: pg_backup_custom.c:497 +#, c-format +msgid "unrecognized data block type (%d) while searching archive" +msgstr "아카이브 검색하는 동안 알 수 없는 자료 블럭 형태(%d)를 발견함" + +#: pg_backup_custom.c:519 #, c-format msgid "" "could not find block ID %d in archive -- possibly due to out-of-order " @@ -932,180 +928,159 @@ msgstr "" "아카이브에서 블록 ID %d을(를) 찾지 못했습니다. 복원 요청이 잘못된 것 같습니" "다. 입력 파일을 검색할 수 없으므로 요청을 처리할 수 없습니다." -#: pg_backup_custom.c:477 +#: pg_backup_custom.c:524 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive" msgstr "" "아카이브에서 블록 ID %d을(를) 찾을 수 없습니다. 아카이브가 손상된 것 같습니" "다." -#: pg_backup_custom.c:484 +#: pg_backup_custom.c:531 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d" msgstr "자료를 읽는 동안 예상치 못한 ID (%d) 발견됨 -- 예상값 %d" -#: pg_backup_custom.c:498 +#: pg_backup_custom.c:545 #, c-format msgid "unrecognized data block type %d while restoring archive" msgstr "아카이브 복원하는 중에, 알 수 없는 자료 블럭 형태 %d 를 발견함" -#: pg_backup_custom.c:580 +#: pg_backup_custom.c:648 #, c-format msgid "could not read from input file: %m" msgstr "입력 파일을 읽을 수 없음: %m" -#: pg_backup_custom.c:698 pg_backup_custom.c:751 pg_backup_custom.c:891 -#: pg_backup_tar.c:1091 +#: pg_backup_custom.c:751 pg_backup_custom.c:803 pg_backup_custom.c:948 +#: pg_backup_tar.c:1089 #, c-format msgid "could not determine seek position in archive file: %m" msgstr "아카이브 파일에서 검색 위치를 확인할 수 없음: %m" -#: pg_backup_custom.c:715 pg_backup_custom.c:755 +#: pg_backup_custom.c:767 pg_backup_custom.c:807 #, c-format msgid "could not close archive file: %m" msgstr "자료 파일을 닫을 수 없음: %m" -#: pg_backup_custom.c:738 +#: pg_backup_custom.c:790 #, c-format msgid "can only reopen input archives" msgstr "입력 아카이브만 다시 열 수 있음" -#: pg_backup_custom.c:745 +#: pg_backup_custom.c:797 #, c-format msgid "parallel restore from standard input is not supported" msgstr "표준 입력을 이용한 병렬 복원 작업은 지원하지 않습니다" -#: pg_backup_custom.c:747 +#: pg_backup_custom.c:799 #, c-format msgid "parallel restore from non-seekable file is not supported" msgstr "" "시작 위치를 임의로 지정할 수 없는 파일로는 병렬 복원 작업을 할 수 없습니다." -#: pg_backup_custom.c:763 +#: pg_backup_custom.c:815 #, c-format msgid "could not set seek position in archive file: %m" msgstr "아카이브 파일에서 검색 위치를 설정할 수 없음: %m" -#: pg_backup_custom.c:839 +#: pg_backup_custom.c:894 #, c-format msgid "compressor active" msgstr "압축기 사용" -#: pg_backup_custom.c:894 -#, c-format -msgid "ftell mismatch with expected position -- ftell used" -msgstr "ftell 값과, 예상되는 위치값이 틀림 -- ftell 값이 사용됨" - -#: pg_backup_db.c:44 +#: pg_backup_db.c:41 #, c-format msgid "could not get server_version from libpq" msgstr "libpq에서 server_verion 값을 구할 수 없음" -#: pg_backup_db.c:55 pg_dumpall.c:1826 +#: pg_backup_db.c:52 pg_dumpall.c:1826 #, c-format msgid "server version: %s; %s version: %s" msgstr "서버 버전: %s; %s 버전: %s" -#: pg_backup_db.c:57 pg_dumpall.c:1828 +#: pg_backup_db.c:54 pg_dumpall.c:1828 #, c-format msgid "aborting because of server version mismatch" msgstr "서버 버전이 일치하지 않아 중단하는 중" -#: pg_backup_db.c:140 +#: pg_backup_db.c:124 #, c-format -msgid "connecting to database \"%s\" as user \"%s\"" -msgstr "\"%s\" 데이터베이스를 \"%s\" 사용자로 접속하는 중" +msgid "already connected to a database" +msgstr "데이터베이스에 이미 접속해 있음" -#: pg_backup_db.c:147 pg_backup_db.c:196 pg_backup_db.c:257 pg_backup_db.c:298 -#: pg_dumpall.c:1651 pg_dumpall.c:1764 +#: pg_backup_db.c:133 pg_backup_db.c:185 pg_dumpall.c:1651 pg_dumpall.c:1764 msgid "Password: " msgstr "암호: " -#: pg_backup_db.c:179 -#, c-format -msgid "could not reconnect to database" -msgstr "데이터베이스 재접속을 할 수 없음" - -#: pg_backup_db.c:184 +#: pg_backup_db.c:177 #, c-format -msgid "could not reconnect to database: %s" -msgstr "데이터베이스 재접속을 할 수 없음: %s" - -#: pg_backup_db.c:200 -#, c-format -msgid "connection needs password" -msgstr "연결하려면 암호가 필요함" - -#: pg_backup_db.c:251 -#, c-format -msgid "already connected to a database" -msgstr "데이터베이스에 이미 접속해 있음" +msgid "could not connect to database" +msgstr "데이터베이스 접속을 할 수 없음" -#: pg_backup_db.c:290 +#: pg_backup_db.c:195 #, c-format -msgid "could not connect to database" -msgstr "데이터베이스 재접속을 할 수 없음" +msgid "reconnection to database \"%s\" failed: %s" +msgstr "\"%s\" 데이터베이스 재접속 실패: %s" -#: pg_backup_db.c:306 +#: pg_backup_db.c:199 #, c-format msgid "connection to database \"%s\" failed: %s" msgstr "\"%s\" 데이터베이스에 접속 할 수 없음: %s" -#: pg_backup_db.c:378 pg_dumpall.c:1684 +#: pg_backup_db.c:272 pg_dumpall.c:1684 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:385 pg_dumpall.c:1889 pg_dumpall.c:1912 +#: pg_backup_db.c:279 pg_dumpall.c:1889 pg_dumpall.c:1912 #, c-format msgid "query failed: %s" msgstr "쿼리 실패: %s" -#: pg_backup_db.c:387 pg_dumpall.c:1890 pg_dumpall.c:1913 +#: pg_backup_db.c:281 pg_dumpall.c:1890 pg_dumpall.c:1913 #, c-format msgid "query was: %s" msgstr "사용한 쿼리: %s" -#: pg_backup_db.c:428 +#: pg_backup_db.c:322 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" msgstr[0] "쿼리에서 한 개가 아닌 %d개의 행을 반환: %s" -#: pg_backup_db.c:464 +#: pg_backup_db.c:358 #, c-format msgid "%s: %sCommand was: %s" msgstr "%s: %s사용된 명령: %s" -#: pg_backup_db.c:520 pg_backup_db.c:594 pg_backup_db.c:601 +#: pg_backup_db.c:414 pg_backup_db.c:488 pg_backup_db.c:495 msgid "could not execute query" msgstr "쿼리를 실행 할 수 없음" -#: pg_backup_db.c:573 +#: pg_backup_db.c:467 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "PQputCopyData에 의해서 오류가 반환되었음: %s" -#: pg_backup_db.c:622 +#: pg_backup_db.c:516 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "PQputCopyEnd에 의해서 오류가 반환되었음: %s" -#: pg_backup_db.c:628 +#: pg_backup_db.c:522 #, c-format msgid "COPY failed for table \"%s\": %s" msgstr "\"%s\" 테이블을 위한 COPY 실패: %s" -#: pg_backup_db.c:634 pg_dump.c:1924 +#: pg_backup_db.c:528 pg_dump.c:1988 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "\"%s\" 테이블 COPY 작업 중 잘못된 부가 결과가 있음" -#: pg_backup_db.c:646 +#: pg_backup_db.c:540 msgid "could not start database transaction" msgstr "데이터베이스 트랜잭션을 시작할 수 없음" -#: pg_backup_db.c:654 +#: pg_backup_db.c:548 msgid "could not commit database transaction" msgstr "데이터베이스 트랜잭션을 commit 할 수 없음" @@ -1129,48 +1104,48 @@ msgstr "\"%s\" 디렉터리를 닫을 수 없음: %m" msgid "could not create directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 만들 수 없음: %m" -#: pg_backup_directory.c:350 pg_backup_directory.c:488 -#: pg_backup_directory.c:518 +#: pg_backup_directory.c:355 pg_backup_directory.c:496 +#: pg_backup_directory.c:532 #, c-format msgid "could not write to output file: %s" msgstr "출력 파일을 쓸 수 없음: %s" -#: pg_backup_directory.c:403 +#: pg_backup_directory.c:406 #, c-format -msgid "could not close data file: %m" -msgstr "자료 파일을 닫을 수 없음: %m" +msgid "could not close data file \"%s\": %m" +msgstr "\"%s\" 자료 파일을 닫을 수 없음: %m" -#: pg_backup_directory.c:443 +#: pg_backup_directory.c:446 #, c-format msgid "could not open large object TOC file \"%s\" for input: %m" msgstr "입력용 large object TOC 파일(\"%s\")을 열 수 없음: %m" -#: pg_backup_directory.c:454 +#: pg_backup_directory.c:457 #, c-format msgid "invalid line in large object TOC file \"%s\": \"%s\"" msgstr "large object TOC 파일(\"%s\")을 닫을 수 없음: \"%s\"" -#: pg_backup_directory.c:463 +#: pg_backup_directory.c:466 #, c-format msgid "error reading large object TOC file \"%s\"" msgstr "large object TOC 파일(\"%s\")을 닫을 수 없음" -#: pg_backup_directory.c:467 +#: pg_backup_directory.c:470 #, c-format msgid "could not close large object TOC file \"%s\": %m" msgstr "large object TOC 파일(\"%s\")을 닫을 수 없음: %m" -#: pg_backup_directory.c:678 +#: pg_backup_directory.c:689 #, c-format msgid "could not write to blobs TOC file" msgstr "blob TOC 파일에 쓸 수 없음" -#: pg_backup_directory.c:710 +#: pg_backup_directory.c:721 #, c-format msgid "file name too long: \"%s\"" msgstr "파일 이름이 너무 긺: \"%s\"" -#: pg_backup_null.c:75 +#: pg_backup_null.c:74 #, c-format msgid "this format cannot be read" msgstr "이 파일 형태는 읽을 수 없음" @@ -1220,37 +1195,32 @@ msgstr "임시 파일을 열 수 없음" msgid "could not close tar member" msgstr "tar 맴버를 닫지 못했습니다" -#: pg_backup_tar.c:571 -#, c-format -msgid "internal error -- neither th nor fh specified in tarReadRaw()" -msgstr "내부 오류 -- tarReadRaw()에서 th, fh 둘다 지정하지 않았음" - -#: pg_backup_tar.c:693 +#: pg_backup_tar.c:691 #, c-format msgid "unexpected COPY statement syntax: \"%s\"" msgstr "COPY 구문 오류: \"%s\"" -#: pg_backup_tar.c:961 +#: pg_backup_tar.c:958 #, c-format msgid "invalid OID for large object (%u)" msgstr "잘못된 large object OID: %u" -#: pg_backup_tar.c:1106 +#: pg_backup_tar.c:1105 #, c-format msgid "could not close temporary file: %m" msgstr "임시 파일을 열 수 없음: %m" -#: pg_backup_tar.c:1115 +#: pg_backup_tar.c:1114 #, c-format msgid "actual file length (%s) does not match expected (%s)" msgstr "실재 파일 길이(%s)와 예상되는 값(%s)이 다릅니다" -#: pg_backup_tar.c:1172 pg_backup_tar.c:1202 +#: pg_backup_tar.c:1171 pg_backup_tar.c:1201 #, c-format msgid "could not find header for file \"%s\" in tar archive" msgstr "tar 아카이브에서 \"%s\" 파일을 위한 헤더를 찾을 수 없음" -#: pg_backup_tar.c:1190 +#: pg_backup_tar.c:1189 #, c-format msgid "" "restoring data out of order is not supported in this archive format: \"%s\" " @@ -1259,22 +1229,27 @@ msgstr "" "순서를 넘어서는 자료 덤프 작업은 이 아카이브 포멧에서는 지원하지 않습니다: " "\"%s\" 요구되었지만, 이 아카이브 파일에서는 \"%s\" 전에 옵니다." -#: pg_backup_tar.c:1235 +#: pg_backup_tar.c:1234 #, c-format msgid "incomplete tar header found (%lu byte)" msgid_plural "incomplete tar header found (%lu bytes)" msgstr[0] "불완전한 tar 헤더가 있음(%lu 바이트)" -#: pg_backup_tar.c:1286 +#: pg_backup_tar.c:1285 #, c-format msgid "" "corrupt tar header found in %s (expected %d, computed %d) file position %s" msgstr "%s 안에 손상된 tar 헤더 발견 (예상치 %d, 계산된 값 %d), 파일 위치 %s" -#: pg_backup_utils.c:55 pg_dump.c:611 pg_dump.c:628 pg_dumpall.c:339 -#: pg_dumpall.c:349 pg_dumpall.c:358 pg_dumpall.c:367 pg_dumpall.c:375 -#: pg_dumpall.c:389 pg_dumpall.c:465 pg_restore.c:288 pg_restore.c:304 -#: pg_restore.c:322 +#: pg_backup_utils.c:54 +#, c-format +msgid "unrecognized section name: \"%s\"" +msgstr "알 수 없는 섹션 이름: \"%s\"" + +#: pg_backup_utils.c:55 pg_dump.c:607 pg_dump.c:624 pg_dumpall.c:338 +#: pg_dumpall.c:348 pg_dumpall.c:357 pg_dumpall.c:366 pg_dumpall.c:374 +#: pg_dumpall.c:388 pg_dumpall.c:464 pg_restore.c:284 pg_restore.c:300 +#: pg_restore.c:318 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "보다 자세한 사용법은 \"%s --help\"\n" @@ -1284,37 +1259,54 @@ msgstr "보다 자세한 사용법은 \"%s --help\"\n" msgid "out of on_exit_nicely slots" msgstr "on_exit_nicely 슬롯 범위 벗어남" -#: pg_dump.c:542 +#: pg_dump.c:533 #, c-format msgid "compression level must be in range 0..9" msgstr "압축 수위는 0부터 9까지 지정할 수 있음" -#: pg_dump.c:580 +#: pg_dump.c:571 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digits 값은 -15..3 사이값이어야 함" -#: pg_dump.c:603 +#: pg_dump.c:594 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "rows-per-insert 값은 %d부터 %d까지 지정할 수 있습니다." -#: pg_dump.c:647 pg_restore.c:331 +#: pg_dump.c:622 pg_dumpall.c:346 pg_restore.c:298 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "너무 많은 명령행 인자를 지정했음 (시작: \"%s\")" + +#: pg_dump.c:643 pg_restore.c:327 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" -msgstr "-s/--schema-only 및 -a/--data-only 옵션은 함께 사용할 수 없음" +msgstr "-s/--schema-only 옵션과 -a/--data-only 옵션은 함께 사용할 수 없음" + +#: pg_dump.c:648 +#, c-format +msgid "" +"options -s/--schema-only and --include-foreign-data cannot be used together" +msgstr "" +"-s/--schema-only 옵션과 --include-foreign-data 옵션은 함께 사용할 수 없음" + +#: pg_dump.c:651 +#, c-format +msgid "option --include-foreign-data is not supported with parallel backup" +msgstr "--include-foreign-data 옵션은 병렬 백업 작업에서 지원하지 않음" -#: pg_dump.c:653 pg_restore.c:337 +#: pg_dump.c:655 pg_restore.c:333 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" -msgstr "-c/--clean 및 -a/--data-only 옵션은 함께 사용할 수 없음" +msgstr "-c/--clean 옵션과 -a/--data-only 옵션은 함께 사용할 수 없음" -#: pg_dump.c:658 pg_dumpall.c:382 pg_restore.c:386 +#: pg_dump.c:660 pg_dumpall.c:381 pg_restore.c:382 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "--if-exists 옵션은 -c/--clean 옵션과 함께 사용해야 함" -#: pg_dump.c:665 +#: pg_dump.c:667 #, c-format msgid "" "option --on-conflict-do-nothing requires option --inserts, --rows-per-" @@ -1323,7 +1315,7 @@ msgstr "" "--on-conflict-do-nothing 옵션은 --inserts, --rows-per-insert 또는 --column-" "inserts 옵션과 함께 사용해야 함" -#: pg_dump.c:687 +#: pg_dump.c:689 #, c-format msgid "" "requested compression not available in this installation -- archive will be " @@ -1332,17 +1324,17 @@ msgstr "" "요청한 압축 기능은 이 설치판에서는 사용할 수 없습니다 -- 자료 파일은 압축 없" "이 만들어질 것입니다" -#: pg_dump.c:708 pg_restore.c:353 +#: pg_dump.c:710 pg_restore.c:349 #, c-format msgid "invalid number of parallel jobs" msgstr "잘못된 병렬 작업 수" -#: pg_dump.c:712 +#: pg_dump.c:714 #, c-format msgid "parallel backup only supported by the directory format" msgstr "병렬 백업은 디렉터리 기반 출력일 때만 사용할 수 있습니다." -#: pg_dump.c:767 +#: pg_dump.c:769 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1353,27 +1345,27 @@ msgstr "" "동기화된 스냅샷 기능이 필요 없다면, --no-synchronized-snapshots\n" "옵션을 지정해서 덤프할 수 있습니다." -#: pg_dump.c:773 +#: pg_dump.c:775 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "이 서버는 exported snapshot을 지원하지 않음." -#: pg_dump.c:785 +#: pg_dump.c:787 #, c-format msgid "last built-in OID is %u" msgstr "마지막 내장 OID는 %u" -#: pg_dump.c:794 +#: pg_dump.c:796 #, c-format msgid "no matching schemas were found" msgstr "조건에 맞는 스키마가 없습니다" -#: pg_dump.c:808 +#: pg_dump.c:810 #, c-format msgid "no matching tables were found" msgstr "조건에 맞는 테이블이 없습니다" -#: pg_dump.c:980 +#: pg_dump.c:990 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1383,17 +1375,17 @@ msgstr "" "다른 형태의 파일로 덤프합니다.\n" "\n" -#: pg_dump.c:981 pg_dumpall.c:618 pg_restore.c:466 +#: pg_dump.c:991 pg_dumpall.c:617 pg_restore.c:462 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: pg_dump.c:982 +#: pg_dump.c:992 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [옵션]... [DB이름]\n" -#: pg_dump.c:984 pg_dumpall.c:621 pg_restore.c:469 +#: pg_dump.c:994 pg_dumpall.c:620 pg_restore.c:465 #, c-format msgid "" "\n" @@ -1402,12 +1394,12 @@ msgstr "" "\n" "일반 옵션들:\n" -#: pg_dump.c:985 +#: pg_dump.c:995 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=파일이름 출력 파일 또는 디렉터리 이름\n" -#: pg_dump.c:986 +#: pg_dump.c:996 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1416,47 +1408,47 @@ msgstr "" " -F, --format=c|d|t|p 출력 파일 형식(사용자 지정, 디렉터리, tar,\n" " 일반 텍스트(초기값))\n" -#: pg_dump.c:988 +#: pg_dump.c:998 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=개수 덤프 작업을 병렬 처리 함\n" -#: pg_dump.c:989 pg_dumpall.c:623 +#: pg_dump.c:999 pg_dumpall.c:622 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose 작업 내역을 자세히 봄\n" -#: pg_dump.c:990 pg_dumpall.c:624 +#: pg_dump.c:1000 pg_dumpall.c:623 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: pg_dump.c:991 +#: pg_dump.c:1001 #, c-format msgid "" " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 출력 자료 압축 수위\n" -#: pg_dump.c:992 pg_dumpall.c:625 +#: pg_dump.c:1002 pg_dumpall.c:624 #, c-format msgid "" " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr "" " --lock-wait-timeout=초 테이블 잠금 시 지정한 초만큼 기다린 후 실패\n" -#: pg_dump.c:993 pg_dumpall.c:652 +#: pg_dump.c:1003 pg_dumpall.c:651 #, c-format msgid "" " --no-sync do not wait for changes to be written safely " "to disk\n" msgstr " --no-sync fsync 작업 생략\n" -#: pg_dump.c:994 pg_dumpall.c:626 +#: pg_dump.c:1004 pg_dumpall.c:625 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: pg_dump.c:996 pg_dumpall.c:627 +#: pg_dump.c:1006 pg_dumpall.c:626 #, c-format msgid "" "\n" @@ -1465,22 +1457,22 @@ msgstr "" "\n" "출력 내용을 다루는 옵션들:\n" -#: pg_dump.c:997 pg_dumpall.c:628 +#: pg_dump.c:1007 pg_dumpall.c:627 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only 스키마 빼고 자료만 덤프\n" -#: pg_dump.c:998 +#: pg_dump.c:1008 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs Large Object들도 함께 덤프함\n" -#: pg_dump.c:999 +#: pg_dump.c:1009 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs Large Object들을 제외하고 덤프함\n" -#: pg_dump.c:1000 pg_restore.c:480 +#: pg_dump.c:1010 pg_restore.c:476 #, c-format msgid "" " -c, --clean clean (drop) database objects before " @@ -1489,29 +1481,29 @@ msgstr "" " -c, --clean 다시 만들기 전에 데이터베이스 개체 지우기(삭" "제)\n" -#: pg_dump.c:1001 +#: pg_dump.c:1011 #, c-format msgid "" " -C, --create include commands to create database in dump\n" msgstr "" " -C, --create 데이터베이스 만드는 명령구문도 포함시킴\n" -#: pg_dump.c:1002 pg_dumpall.c:630 +#: pg_dump.c:1012 pg_dumpall.c:629 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=인코딩 지정한 인코딩으로 자료를 덤프 함\n" -#: pg_dump.c:1003 +#: pg_dump.c:1013 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=PATTERN 지정한 SCHEMA들 자료만 덤프\n" -#: pg_dump.c:1004 +#: pg_dump.c:1014 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=PATTERN 지정한 SCHEMA들만 빼고 모두 덤프\n" -#: pg_dump.c:1005 +#: pg_dump.c:1015 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1520,12 +1512,12 @@ msgstr "" " -O, --no-owner 일반 텍스트 형식에서\n" " 개체 소유권 복원 건너뛰기\n" -#: pg_dump.c:1007 pg_dumpall.c:634 +#: pg_dump.c:1017 pg_dumpall.c:633 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only 자료구조(스키마)만 덤프\n" -#: pg_dump.c:1008 +#: pg_dump.c:1018 #, c-format msgid "" " -S, --superuser=NAME superuser user name to use in plain-text " @@ -1534,28 +1526,28 @@ msgstr "" " -S, --superuser=NAME 일반 텍스트 형식에서 사용할 슈퍼유저 사용자 이" "름\n" -#: pg_dump.c:1009 +#: pg_dump.c:1019 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=PATTERN 지정한 이름의 테이블들만 덤프\n" -#: pg_dump.c:1010 +#: pg_dump.c:1020 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=PATTERN 지정한 테이블들만 빼고 덤프\n" -#: pg_dump.c:1011 pg_dumpall.c:637 +#: pg_dump.c:1021 pg_dumpall.c:636 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr "" " -x, --no-privileges 접근 권한 (grant/revoke) 정보는 덤프 안 함\n" -#: pg_dump.c:1012 pg_dumpall.c:638 +#: pg_dump.c:1022 pg_dumpall.c:637 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade 업그레이드 유틸리티 전용\n" -#: pg_dump.c:1013 pg_dumpall.c:639 +#: pg_dump.c:1023 pg_dumpall.c:638 #, c-format msgid "" " --column-inserts dump data as INSERT commands with column " @@ -1563,7 +1555,7 @@ msgid "" msgstr "" " --column-inserts 칼럼 이름과 함께 INSERT 명령으로 자료 덤프\n" -#: pg_dump.c:1014 pg_dumpall.c:640 +#: pg_dump.c:1024 pg_dumpall.c:639 #, c-format msgid "" " --disable-dollar-quoting disable dollar quoting, use SQL standard " @@ -1571,13 +1563,13 @@ msgid "" msgstr "" " --disable-dollar-quoting $ 인용 구문 사용안함, SQL 표준 따옴표 사용\n" -#: pg_dump.c:1015 pg_dumpall.c:641 pg_restore.c:497 +#: pg_dump.c:1025 pg_dumpall.c:640 pg_restore.c:493 #, c-format msgid "" " --disable-triggers disable triggers during data-only restore\n" msgstr " --disable-triggers 자료만 복원할 때 트리거 사용을 안함\n" -#: pg_dump.c:1016 +#: pg_dump.c:1026 #, c-format msgid "" " --enable-row-security enable row security (dump only content user " @@ -1587,58 +1579,69 @@ msgstr "" " --enable-row-security 로우 보안 활성화 (현재 작업자가 접근할 수\n" " 있는 자료만 덤프 함)\n" -#: pg_dump.c:1018 +#: pg_dump.c:1028 #, c-format msgid "" " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=PATTERN 해당 테이블 자료는 덤프 안함\n" -#: pg_dump.c:1019 pg_dumpall.c:643 +#: pg_dump.c:1029 pg_dumpall.c:642 #, c-format msgid "" " --extra-float-digits=NUM override default setting for " "extra_float_digits\n" msgstr " --extra-float-digits=NUM 기본 extra_float_digits 값 바꿈\n" -#: pg_dump.c:1020 pg_dumpall.c:644 pg_restore.c:499 +#: pg_dump.c:1030 pg_dumpall.c:643 pg_restore.c:495 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists 객체 삭제 시 IF EXISTS 구문 사용\n" -#: pg_dump.c:1021 pg_dumpall.c:645 +#: pg_dump.c:1031 +#, c-format +msgid "" +" --include-foreign-data=PATTERN\n" +" include data of foreign tables on foreign\n" +" servers matching PATTERN\n" +msgstr "" +" --include-foreign-data=패턴\n" +" 지정한 패턴과 일치하는 외부 서버의 외부\n" +" 테이블 자료를 포함\n" + +#: pg_dump.c:1034 pg_dumpall.c:644 #, c-format msgid "" " --inserts dump data as INSERT commands, rather than " "COPY\n" msgstr " --inserts COPY 대신 INSERT 명령으로 자료 덤프\n" -#: pg_dump.c:1022 pg_dumpall.c:646 +#: pg_dump.c:1035 pg_dumpall.c:645 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr "" " --load-via-partition-root 상위 테이블을 통해 하위 테이블을 로드함\n" -#: pg_dump.c:1023 pg_dumpall.c:647 +#: pg_dump.c:1036 pg_dumpall.c:646 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments 코멘트는 덤프 안함\n" -#: pg_dump.c:1024 pg_dumpall.c:648 +#: pg_dump.c:1037 pg_dumpall.c:647 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications 발행 정보는 덤프하지 않음\n" -#: pg_dump.c:1025 pg_dumpall.c:650 +#: pg_dump.c:1038 pg_dumpall.c:649 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels 보안 라벨 할당을 덤프 하지 않음\n" -#: pg_dump.c:1026 pg_dumpall.c:651 +#: pg_dump.c:1039 pg_dumpall.c:650 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions 구독 정보는 덤프하지 않음\n" -#: pg_dump.c:1027 +#: pg_dump.c:1040 #, c-format msgid "" " --no-synchronized-snapshots do not use synchronized snapshots in parallel " @@ -1646,17 +1649,17 @@ msgid "" msgstr "" " --no-synchronized-snapshots 병렬 작업에서 스냅샷 일관성을 맞추지 않음\n" -#: pg_dump.c:1028 pg_dumpall.c:653 +#: pg_dump.c:1041 pg_dumpall.c:652 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces 테이블스페이스 할당을 덤프하지 않음\n" -#: pg_dump.c:1029 pg_dumpall.c:654 +#: pg_dump.c:1042 pg_dumpall.c:653 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data 언로그드 테이블 자료는 덤프하지 않음\n" -#: pg_dump.c:1030 pg_dumpall.c:655 +#: pg_dump.c:1043 pg_dumpall.c:654 #, c-format msgid "" " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT " @@ -1665,14 +1668,14 @@ msgstr "" " --on-conflict-do-nothing INSERT 구문에 ON CONFLICT DO NOTHING 옵션 추" "가\n" -#: pg_dump.c:1031 pg_dumpall.c:656 +#: pg_dump.c:1044 pg_dumpall.c:655 #, c-format msgid "" " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers 예약어가 아니여도 모든 식별자는 따옴표를 씀\n" -#: pg_dump.c:1032 pg_dumpall.c:657 +#: pg_dump.c:1045 pg_dumpall.c:656 #, c-format msgid "" " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" @@ -1680,7 +1683,7 @@ msgstr "" " --rows-per-insert=NROWS 한 INSERT 명령으로 입력할 로우 수; --inserts\n" " 옵션을 사용한 것으로 가정 함\n" -#: pg_dump.c:1033 +#: pg_dump.c:1046 #, c-format msgid "" " --section=SECTION dump named section (pre-data, data, or post-" @@ -1688,7 +1691,7 @@ msgid "" msgstr "" " --section=SECTION 해당 섹션(pre-data, data, post-data)만 덤프\n" -#: pg_dump.c:1034 +#: pg_dump.c:1047 #, c-format msgid "" " --serializable-deferrable wait until the dump can run without " @@ -1697,12 +1700,12 @@ msgstr "" " --serializable-deferrable 자료 정합성을 보장하기 위해 덤프 작업을\n" " 직렬화 가능한 트랜잭션으로 처리 함\n" -#: pg_dump.c:1035 +#: pg_dump.c:1048 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT 지정한 스냅샷을 덤프 함\n" -#: pg_dump.c:1036 pg_restore.c:508 +#: pg_dump.c:1049 pg_restore.c:504 #, c-format msgid "" " --strict-names require table and/or schema include patterns " @@ -1713,7 +1716,7 @@ msgstr "" "는\n" " 객체가 적어도 하나 이상 있어야 함\n" -#: pg_dump.c:1038 pg_dumpall.c:658 pg_restore.c:510 +#: pg_dump.c:1051 pg_dumpall.c:657 pg_restore.c:506 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1726,7 +1729,7 @@ msgstr "" "명령\n" " 대신 사용하여 소유권 설정\n" -#: pg_dump.c:1042 pg_dumpall.c:662 pg_restore.c:514 +#: pg_dump.c:1055 pg_dumpall.c:661 pg_restore.c:510 #, c-format msgid "" "\n" @@ -1735,45 +1738,45 @@ msgstr "" "\n" "연결 옵션들:\n" -#: pg_dump.c:1043 +#: pg_dump.c:1056 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=DBNAME 덤프할 데이터베이스\n" -#: pg_dump.c:1044 pg_dumpall.c:664 pg_restore.c:515 +#: pg_dump.c:1057 pg_dumpall.c:663 pg_restore.c:511 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=HOSTNAME 접속할 데이터베이스 서버 또는 소켓 디렉터리\n" -#: pg_dump.c:1045 pg_dumpall.c:666 pg_restore.c:516 +#: pg_dump.c:1058 pg_dumpall.c:665 pg_restore.c:512 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT 데이터베이스 서버의 포트 번호\n" -#: pg_dump.c:1046 pg_dumpall.c:667 pg_restore.c:517 +#: pg_dump.c:1059 pg_dumpall.c:666 pg_restore.c:513 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME 연결할 데이터베이스 사용자\n" -#: pg_dump.c:1047 pg_dumpall.c:668 pg_restore.c:518 +#: pg_dump.c:1060 pg_dumpall.c:667 pg_restore.c:514 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password 암호 프롬프트 표시 안 함\n" -#: pg_dump.c:1048 pg_dumpall.c:669 pg_restore.c:519 +#: pg_dump.c:1061 pg_dumpall.c:668 pg_restore.c:515 #, c-format msgid "" " -W, --password force password prompt (should happen " "automatically)\n" msgstr " -W, --password 암호 입력 프롬프트 보임(자동으로 처리함)\n" -#: pg_dump.c:1049 pg_dumpall.c:670 +#: pg_dump.c:1062 pg_dumpall.c:669 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROLENAME 덤프 전에 SET ROLE 수행\n" -#: pg_dump.c:1051 +#: pg_dump.c:1064 #, c-format msgid "" "\n" @@ -1786,17 +1789,22 @@ msgstr "" "사용합니다.\n" "\n" -#: pg_dump.c:1053 pg_dumpall.c:674 pg_restore.c:526 +#: pg_dump.c:1066 pg_dumpall.c:673 pg_restore.c:522 #, c-format -msgid "Report bugs to .\n" -msgstr "오류보고: .\n" +msgid "Report bugs to <%s>.\n" +msgstr "문제점 보고 주소 <%s>\n" -#: pg_dump.c:1072 pg_dumpall.c:500 +#: pg_dump.c:1067 pg_dumpall.c:674 pg_restore.c:523 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" + +#: pg_dump.c:1086 pg_dumpall.c:499 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "클라이언트 인코딩 값이 잘못되었습니다: \"%s\"" -#: pg_dump.c:1218 +#: pg_dump.c:1232 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server " @@ -1808,207 +1816,212 @@ msgstr "" "동기화된 스냅샷 기능이 필요 없다면, --no-synchronized-snapshots\n" "옵션을 지정해서 덤프할 수 있습니다." -#: pg_dump.c:1287 +#: pg_dump.c:1301 #, c-format msgid "invalid output format \"%s\" specified" msgstr "\"%s\" 값은 잘못된 출력 파일 형태입니다." -#: pg_dump.c:1325 +#: pg_dump.c:1339 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "\"%s\" 검색 조건에 만족하는 스키마가 없습니다" -#: pg_dump.c:1390 +#: pg_dump.c:1386 +#, c-format +msgid "no matching foreign servers were found for pattern \"%s\"" +msgstr "\"%s\" 검색 조건에 만족하는 외부 서버가 없습니다" + +#: pg_dump.c:1449 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "\"%s\" 검색 조건에 만족하는 테이블이 없습니다" -#: pg_dump.c:1804 +#: pg_dump.c:1862 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "\"%s.%s\" 테이블의 내용 덤프 중" -#: pg_dump.c:1905 +#: pg_dump.c:1969 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "\"%s\" 테이블 내용을 덤프하면서 오류 발생: PQgetCopyData() 실패." -#: pg_dump.c:1906 pg_dump.c:1916 +#: pg_dump.c:1970 pg_dump.c:1980 #, c-format msgid "Error message from server: %s" msgstr "서버에서 보낸 오류 메시지: %s" -#: pg_dump.c:1907 pg_dump.c:1917 +#: pg_dump.c:1971 pg_dump.c:1981 #, c-format msgid "The command was: %s" msgstr "사용된 명령: %s" -#: pg_dump.c:1915 +#: pg_dump.c:1979 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "\"%s\" 테이블 내용을 덤프하면서 오류 발생: PQgetResult() 실패." -#: pg_dump.c:2666 +#: pg_dump.c:2735 #, c-format msgid "saving database definition" msgstr "데이터베이스 구성정보를 저장 중" -#: pg_dump.c:3130 +#: pg_dump.c:3207 #, c-format msgid "saving encoding = %s" msgstr "인코딩 = %s 저장 중" -#: pg_dump.c:3155 +#: pg_dump.c:3232 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "standard_conforming_strings = %s 저장 중" -#: pg_dump.c:3194 +#: pg_dump.c:3271 #, c-format msgid "could not parse result of current_schemas()" msgstr "current_schemas() 결과를 분석할 수 없음" -#: pg_dump.c:3213 +#: pg_dump.c:3290 #, c-format msgid "saving search_path = %s" msgstr "search_path = %s 저장 중" -#: pg_dump.c:3253 +#: pg_dump.c:3330 #, c-format msgid "reading large objects" msgstr "large object 읽는 중" -#: pg_dump.c:3435 +#: pg_dump.c:3512 #, c-format msgid "saving large objects" msgstr "large object들을 저장 중" -#: pg_dump.c:3481 +#: pg_dump.c:3558 #, c-format msgid "error reading large object %u: %s" msgstr "%u large object 읽는 중 오류: %s" -#: pg_dump.c:3533 +#: pg_dump.c:3610 #, c-format msgid "reading row security enabled for table \"%s.%s\"" msgstr "\"%s.%s\" 테이블을 위한 로우 보안 활성화를 읽는 중" -#: pg_dump.c:3564 +#: pg_dump.c:3641 #, c-format msgid "reading policies for table \"%s.%s\"" msgstr "\"%s.%s\" 테이블을 위한 정책 읽는 중" -#: pg_dump.c:3714 +#: pg_dump.c:3793 #, c-format msgid "unexpected policy command type: %c" msgstr "예상치 못한 정책 명령 형태: %c" -#: pg_dump.c:3841 +#: pg_dump.c:3944 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "\"%s\" 구독의 소유주가 적당하지 않습니다." -#: pg_dump.c:3978 +#: pg_dump.c:4089 #, c-format msgid "reading publication membership for table \"%s.%s\"" msgstr "\"%s.%s\" 테이블을 위한 발행 맵버쉽을 읽는 중" -#: pg_dump.c:4121 +#: pg_dump.c:4232 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "" "현재 사용자가 슈퍼유저가 아니기 때문에 서브스크립션들은 덤프하지 못했음" -#: pg_dump.c:4175 +#: pg_dump.c:4286 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "\"%s\" 구독의 소유주가 적당하지 않습니다." -#: pg_dump.c:4219 +#: pg_dump.c:4330 #, c-format msgid "could not parse subpublications array" msgstr "구독 배열을 분석할 수 없음" -#: pg_dump.c:4491 +#: pg_dump.c:4652 #, c-format msgid "could not find parent extension for %s %s" msgstr "%s %s 객체와 관련된 상위 확장 기능을 찾을 수 없음" -#: pg_dump.c:4623 +#: pg_dump.c:4784 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "\"%s\" 스키마의 소유주가 바르지 않습니다" -#: pg_dump.c:4646 +#: pg_dump.c:4807 #, c-format msgid "schema with OID %u does not exist" msgstr "OID %u 스키마 없음" -#: pg_dump.c:4971 +#: pg_dump.c:5132 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "\"%s\" 자료형의 소유주가 적당하지 않습니다." -#: pg_dump.c:5056 +#: pg_dump.c:5217 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "\"%s\" 연산자의 소유주가 적당하지 않습니다." -#: pg_dump.c:5358 +#: pg_dump.c:5519 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "\"%s\" 연산자 클래스의 소유주가 적당하지 않습니다." -#: pg_dump.c:5442 +#: pg_dump.c:5603 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "\"%s\" 연산자 부류의 소유주가 적당하지 않습니다." -#: pg_dump.c:5611 +#: pg_dump.c:5772 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "\"%s\" 집계 함수의 소유주가 적당하지 않습니다." -#: pg_dump.c:5871 +#: pg_dump.c:6032 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "\"%s\" 함수의 소유주가 적당하지 않습니다." -#: pg_dump.c:6675 +#: pg_dump.c:6860 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "\"%s\" 테이블의 소유주가 적당하지 않습니다." -#: pg_dump.c:6717 pg_dump.c:17103 +#: pg_dump.c:6902 pg_dump.c:17380 #, c-format msgid "" "failed sanity check, parent table with OID %u of sequence with OID %u not " "found" msgstr "의존성 검사 실패, 부모 테이블 OID %u 없음. 해당 시퀀스 개체 OID %u" -#: pg_dump.c:6861 +#: pg_dump.c:7044 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "\"%s.%s\" 테이블에서 사용하는 인덱스들을 읽는 중" -#: pg_dump.c:7264 +#: pg_dump.c:7459 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "\"%s.%s\" 테이블에서 사용하는 참조키 제약조건을 읽는 중" -#: pg_dump.c:7519 +#: pg_dump.c:7740 #, c-format msgid "" "failed sanity check, parent table with OID %u of pg_rewrite entry with OID " "%u not found" msgstr "의존성 검사 실패, 부모 테이블 OID %u 없음. 해당 pg_rewrite 개체 OID %u" -#: pg_dump.c:7602 +#: pg_dump.c:7823 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "\"%s.%s\" 테이블에서 사용하는 트리거들을 읽는 중" -#: pg_dump.c:7735 +#: pg_dump.c:7956 #, c-format msgid "" "query produced null referenced table name for foreign key trigger \"%s\" on " @@ -2017,131 +2030,131 @@ msgstr "" "쿼리가 참조테이블 정보가 없는 \"%s\" 참조키 트리거를 \"%s\" (해당 OID: %u) 테" "이블에서 만들었습니다." -#: pg_dump.c:8290 +#: pg_dump.c:8511 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "\"%s.%s\" 테이블의 칼럼과 자료형을 찾는 중" -#: pg_dump.c:8426 +#: pg_dump.c:8647 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "\"%s\" 테이블에 매겨져 있는 열 번호가 잘못되었습니다" -#: pg_dump.c:8463 +#: pg_dump.c:8684 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "\"%s.%s\" 테이블에서 default 표현들 찾는 중" -#: pg_dump.c:8485 +#: pg_dump.c:8706 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "적당하지 않는 adnum 값: %d, 해당 테이블 \"%s\"" -#: pg_dump.c:8550 +#: pg_dump.c:8771 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "\"%s.%s\" 테이블에서 사용하는 체크 제약 조건을 찾는 중" -#: pg_dump.c:8599 +#: pg_dump.c:8820 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "" "%d개의 제약 조건이 \"%s\" 테이블에 있을 것으로 예상했으나 %d개를 찾음" -#: pg_dump.c:8603 +#: pg_dump.c:8824 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(시스템 카탈로그가 손상되었는 것 같습니다)" -#: pg_dump.c:10184 +#: pg_dump.c:10410 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "\"%s\" 자료형의 typtype가 잘못 되어 있음" -#: pg_dump.c:11538 +#: pg_dump.c:11764 #, c-format msgid "bogus value in proargmodes array" msgstr "proargmodes 배열에 잘못된 값이 있음" -#: pg_dump.c:11910 +#: pg_dump.c:12136 #, c-format msgid "could not parse proallargtypes array" msgstr "proallargtypes 배열을 분석할 수 없습니다" -#: pg_dump.c:11926 +#: pg_dump.c:12152 #, c-format msgid "could not parse proargmodes array" msgstr "proargmodes 배열을 분석할 수 없습니다" -#: pg_dump.c:11940 +#: pg_dump.c:12166 #, c-format msgid "could not parse proargnames array" msgstr "proargnames 배열을 분석할 수 없습니다" -#: pg_dump.c:11951 +#: pg_dump.c:12177 #, c-format msgid "could not parse proconfig array" msgstr "proconfig 배열을 구문 분석할 수 없음" -#: pg_dump.c:12031 +#: pg_dump.c:12257 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "\"%s\" 함수의 provolatile 값이 잘못 되었습니다" -#: pg_dump.c:12081 pg_dump.c:14133 +#: pg_dump.c:12307 pg_dump.c:14365 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "\"%s\" 함수의 proparallel 값이 잘못 되었습니다" -#: pg_dump.c:12214 pg_dump.c:12323 pg_dump.c:12330 +#: pg_dump.c:12446 pg_dump.c:12555 pg_dump.c:12562 #, c-format msgid "could not find function definition for function with OID %u" msgstr "%u OID 함수에 대한 함수 정의를 찾을 수 없음" -#: pg_dump.c:12253 +#: pg_dump.c:12485 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "pg_cast.castfunc 또는 pg_cast.castmethod 필드에 잘못된 값이 있음" -#: pg_dump.c:12256 +#: pg_dump.c:12488 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "pg_cast.castmethod 필드에 잘못된 값이 있음" -#: pg_dump.c:12349 +#: pg_dump.c:12581 #, c-format msgid "" "bogus transform definition, at least one of trffromsql and trftosql should " "be nonzero" msgstr "잘못된 전송 정의, trffromsql 또는 trftosql 중 하나는 비어 있으면 안됨" -#: pg_dump.c:12366 +#: pg_dump.c:12598 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "pg_transform.trffromsql 필드에 잘못된 값이 있음" -#: pg_dump.c:12387 +#: pg_dump.c:12619 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "pg_transform.trftosql 필드에 잘못된 값이 있음" -#: pg_dump.c:12703 +#: pg_dump.c:12935 #, c-format msgid "could not find operator with OID %s" msgstr "%s OID의 연산자를 찾을 수 없음" -#: pg_dump.c:12771 +#: pg_dump.c:13003 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "\"%c\" 잘못된 자료형, 해당 접근 방법: \"%s\"" -#: pg_dump.c:13525 +#: pg_dump.c:13757 #, c-format msgid "unrecognized collation provider: %s" msgstr "알 수 없는 정렬규칙 제공자 이름: %s" -#: pg_dump.c:13997 +#: pg_dump.c:14229 #, c-format msgid "" "aggregate function %s could not be dumped correctly for this database " @@ -2149,27 +2162,27 @@ msgid "" msgstr "" "%s 집계 함수는 이 데이터베이스 버전에서는 바르게 덤프되질 못했습니다; 무시함" -#: pg_dump.c:14052 +#: pg_dump.c:14284 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "\"%s\" 집계 함수용 aggfinalmodify 값이 이상함" -#: pg_dump.c:14108 +#: pg_dump.c:14340 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "\"%s\" 집계 함수용 aggmfinalmodify 값이 이상함" -#: pg_dump.c:14830 +#: pg_dump.c:15062 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "기본 접근 권한에서 알 수 없는 객체형이 있음: %d" -#: pg_dump.c:14848 +#: pg_dump.c:15080 #, c-format msgid "could not parse default ACL list (%s)" msgstr "기본 ACL 목록 (%s)을 분석할 수 없음" -#: pg_dump.c:14928 +#: pg_dump.c:15165 #, c-format msgid "" "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) " @@ -2178,7 +2191,7 @@ msgstr "" "GRANT ACL 목록 초기값 (%s) 또는 REVOKE ACL 목록 초기값 (%s) 분석할 수 없음, " "해당 객체: \"%s\" (%s)" -#: pg_dump.c:14936 +#: pg_dump.c:15173 #, c-format msgid "" "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s" @@ -2187,48 +2200,48 @@ msgstr "" "GRANT ACL 목록 (%s) 또는 REVOKE ACL 목록 (%s) 분석할 수 없음, 해당 객체: \"%s" "\" (%s)" -#: pg_dump.c:15435 +#: pg_dump.c:15688 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "\"%s\" 뷰 정의 정보가 없습니다." -#: pg_dump.c:15438 +#: pg_dump.c:15691 #, c-format msgid "" "query to obtain definition of view \"%s\" returned more than one definition" msgstr "\"%s\" 뷰 정의 정보가 하나 이상 있습니다." -#: pg_dump.c:15445 +#: pg_dump.c:15698 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "\"%s\" 뷰의 정의 내용이 비어있습니다." -#: pg_dump.c:15527 +#: pg_dump.c:15780 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS 옵션은 더이상 지원하지 않음 (\"%s\" 테이블)" -#: pg_dump.c:15997 +#: pg_dump.c:16260 #, c-format msgid "invalid number of parents %d for table \"%s\"" msgstr "잘못된 부모 수: %d, 해당 테이블 \"%s\"" -#: pg_dump.c:16334 +#: pg_dump.c:16583 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "잘못된 열 번호 %d, 해당 테이블 \"%s\"" -#: pg_dump.c:16596 +#: pg_dump.c:16868 #, c-format msgid "missing index for constraint \"%s\"" msgstr "\"%s\" 제약 조건을 위한 인덱스가 빠졌습니다" -#: pg_dump.c:16816 +#: pg_dump.c:17093 #, c-format msgid "unrecognized constraint type: %c" msgstr "알 수 없는 제약 조건 종류: %c" -#: pg_dump.c:16948 pg_dump.c:17168 +#: pg_dump.c:17225 pg_dump.c:17445 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "" @@ -2236,22 +2249,22 @@ msgid_plural "" msgstr[0] "" "\"%s\" 시퀀스의 데이터를 가져오기 위한 쿼리에서 %d개의 행 반환(1개 필요)" -#: pg_dump.c:16982 +#: pg_dump.c:17259 #, c-format msgid "unrecognized sequence type: %s" msgstr "알 수 없는 시퀀스 형태: %s" -#: pg_dump.c:17264 +#: pg_dump.c:17543 #, c-format msgid "unexpected tgtype value: %d" msgstr "기대되지 않은 tgtype 값: %d" -#: pg_dump.c:17338 +#: pg_dump.c:17617 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "잘못된 인수 문자열 (%s), 해당 트리거 \"%s\", 사용되는 테이블 \"%s\"" -#: pg_dump.c:17567 +#: pg_dump.c:17853 #, c-format msgid "" "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows " @@ -2259,58 +2272,58 @@ msgid "" msgstr "" "\"%s\" 규칙(\"%s\" 테이블)을 가져오기 위한 쿼리 실패: 잘못된 행 수 반환" -#: pg_dump.c:17729 +#: pg_dump.c:18015 #, c-format msgid "could not find referenced extension %u" msgstr "%u 확장기능과 관련된 상위 확장 기능을 찾을 수 없음" -#: pg_dump.c:17941 +#: pg_dump.c:18229 #, c-format msgid "reading dependency data" msgstr "의존 관계 자료 읽는 중" -#: pg_dump.c:18034 +#: pg_dump.c:18322 #, c-format msgid "no referencing object %u %u" msgstr "%u %u 개체의 하위 관련 개체가 없음" -#: pg_dump.c:18045 +#: pg_dump.c:18333 #, c-format msgid "no referenced object %u %u" msgstr "%u %u 개체의 상위 관련 개체가 없음" -#: pg_dump.c:18413 +#: pg_dump.c:18706 #, c-format msgid "could not parse reloptions array" msgstr "reloptions 배열을 분석할 수 없음" -#: pg_dump_sort.c:351 +#: pg_dump_sort.c:360 #, c-format msgid "invalid dumpId %d" msgstr "잘못된 dumpId %d" -#: pg_dump_sort.c:357 +#: pg_dump_sort.c:366 #, c-format msgid "invalid dependency %d" msgstr "잘못된 의존성 %d" -#: pg_dump_sort.c:590 +#: pg_dump_sort.c:599 #, c-format msgid "could not identify dependency loop" msgstr "의존 관계를 식별 할 수 없음" -#: pg_dump_sort.c:1161 +#: pg_dump_sort.c:1170 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" msgstr[0] "다음 데이블 간 참조키가 서로 교차하고 있음:" -#: pg_dump_sort.c:1165 pg_dump_sort.c:1185 +#: pg_dump_sort.c:1174 pg_dump_sort.c:1194 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1166 +#: pg_dump_sort.c:1175 #, c-format msgid "" "You might not be able to restore the dump without using --disable-triggers " @@ -2319,7 +2332,7 @@ msgstr "" "--disable-triggers 옵션으로 복원할 수 있습니다. 또는 임시로 제약 조건을 삭제" "하고 복원하세요." -#: pg_dump_sort.c:1167 +#: pg_dump_sort.c:1176 #, c-format msgid "" "Consider using a full dump instead of a --data-only dump to avoid this " @@ -2327,34 +2340,34 @@ msgid "" msgstr "" "이 문제를 피하려면, --data-only 덤프 대신에 모든 덤프를 사용하길 권합니다." -#: pg_dump_sort.c:1179 +#: pg_dump_sort.c:1188 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "다음 항목 간 의존 관계를 분석할 수 없음:" -#: pg_dumpall.c:200 +#: pg_dumpall.c:199 #, c-format msgid "" -"The program \"pg_dump\" is needed by %s but was not found in the\n" +"The program \"%s\" is needed by %s but was not found in the\n" "same directory as \"%s\".\n" "Check your installation." msgstr "" -"\"pg_dump\" 프로그램이 %s 작업에서 필요로 하지만, \"%s\" 프로그램이\n" +"\"%s\" 프로그램이 %s 작업에서 필요로 하지만, \"%s\" 프로그램이\n" "있는 같은 디렉터리에서 찾을 수 없습니다.\n" "설치 상태를 살펴 보십시오." -#: pg_dumpall.c:205 +#: pg_dumpall.c:204 #, c-format msgid "" -"The program \"pg_dump\" was found by \"%s\"\n" +"The program \"%s\" was found by \"%s\"\n" "but was not the same version as %s.\n" "Check your installation." msgstr "" -"\"pg_dump\" 프로그램이 \"%s\" 작업 때문에 찾았지만, \n" +"\"%s\" 프로그램이 \"%s\" 작업 때문에 찾았지만, \n" "%s 버전과 같지 않습니다.\n" "설치 상태를 살펴 보십시오." -#: pg_dumpall.c:357 +#: pg_dumpall.c:356 #, c-format msgid "" "option --exclude-database cannot be used together with -g/--globals-only, -" @@ -2363,31 +2376,31 @@ msgstr "" "--exclude-database 옵션은 -g/--globals-only, -r/--roles-only, 또는 -t/--" "tablespaces-only 옵션과 함께 쓸 수 없음" -#: pg_dumpall.c:366 +#: pg_dumpall.c:365 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "-g/--globals-only 옵션과 -r/--roles-only 옵션은 함께 사용할 수 없음" -#: pg_dumpall.c:374 +#: pg_dumpall.c:373 #, c-format msgid "" "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "" "-g/--globals-only 옵션과 -t/--tablespaces-only 옵션은 함께 사용할 수 없음" -#: pg_dumpall.c:388 +#: pg_dumpall.c:387 #, c-format msgid "" "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "" "-r/--roles-only 옵션과 -t/--tablespaces-only 옵션은 함께 사용할 수 없음" -#: pg_dumpall.c:449 pg_dumpall.c:1754 +#: pg_dumpall.c:448 pg_dumpall.c:1754 #, c-format msgid "could not connect to database \"%s\"" msgstr "\"%s\" 데이터베이스에 접속할 수 없음" -#: pg_dumpall.c:463 +#: pg_dumpall.c:462 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" @@ -2396,7 +2409,7 @@ msgstr "" "\"postgres\" 또는 \"template1\" 데이터베이스에 연결할 수 없습니다.\n" "다른 데이터베이스를 지정하십시오." -#: pg_dumpall.c:617 +#: pg_dumpall.c:616 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2406,35 +2419,35 @@ msgstr "" "추출하는 프로그램입니다.\n" "\n" -#: pg_dumpall.c:619 +#: pg_dumpall.c:618 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [옵션]...\n" -#: pg_dumpall.c:622 +#: pg_dumpall.c:621 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=파일이름 출력 파일 이름\n" -#: pg_dumpall.c:629 +#: pg_dumpall.c:628 #, c-format msgid "" " -c, --clean clean (drop) databases before recreating\n" msgstr "" " -c, --clean 다시 만들기 전에 데이터베이스 지우기(삭제)\n" -#: pg_dumpall.c:631 +#: pg_dumpall.c:630 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr "" " -g, --globals-only 데이터베이스는 제외하고 글로벌 개체만 덤프\n" -#: pg_dumpall.c:632 pg_restore.c:489 +#: pg_dumpall.c:631 pg_restore.c:485 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner 개체 소유권 복원 건너뛰기\n" -#: pg_dumpall.c:633 +#: pg_dumpall.c:632 #, c-format msgid "" " -r, --roles-only dump only roles, no databases or tablespaces\n" @@ -2442,12 +2455,12 @@ msgstr "" " -r, --roles-only 데이터베이스나 테이블스페이스는 제외하고 역할" "만 덤프\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:634 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr " -S, --superuser=NAME 덤프에 사용할 슈퍼유저 사용자 이름\n" -#: pg_dumpall.c:636 +#: pg_dumpall.c:635 #, c-format msgid "" " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" @@ -2455,29 +2468,29 @@ msgstr "" " -t, --tablespaces-only 데이터베이스나 역할은 제외하고 테이블스페이스" "만 덤프\n" -#: pg_dumpall.c:642 +#: pg_dumpall.c:641 #, c-format msgid "" " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" msgstr "" " --exclude-database=PATTERN 해당 PATTERN에 일치하는 데이터베이스 제외\n" -#: pg_dumpall.c:649 +#: pg_dumpall.c:648 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords 롤용 비밀번호를 덤프하지 않음\n" -#: pg_dumpall.c:663 +#: pg_dumpall.c:662 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=접속문자열 서버 접속 문자열\n" -#: pg_dumpall.c:665 +#: pg_dumpall.c:664 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=DBNAME 대체용 기본 데이터베이스\n" -#: pg_dumpall.c:672 +#: pg_dumpall.c:671 #, c-format msgid "" "\n" @@ -2546,44 +2559,44 @@ msgstr "\"%s\" 서버 버전을 분석할 수 없음" msgid "executing %s" msgstr "실행중: %s" -#: pg_restore.c:312 +#: pg_restore.c:308 #, c-format msgid "one of -d/--dbname and -f/--file must be specified" msgstr "-d/--dbname 옵션 또는 -f/--file 옵션 중 하나를 지정해야 함" -#: pg_restore.c:321 +#: pg_restore.c:317 #, c-format msgid "options -d/--dbname and -f/--file cannot be used together" msgstr "-d/--dbname 옵션과 -f/--file 옵션은 함께 사용할 수 없음" -#: pg_restore.c:347 +#: pg_restore.c:343 #, c-format msgid "options -C/--create and -1/--single-transaction cannot be used together" msgstr "-C/--clean 옵션과 -1/--single-transaction 옵션은 함께 사용할 수 없음" -#: pg_restore.c:361 +#: pg_restore.c:357 #, c-format msgid "maximum number of parallel jobs is %d" msgstr "병렬 작업 최대수는 %d 입니다." -#: pg_restore.c:370 +#: pg_restore.c:366 #, c-format msgid "cannot specify both --single-transaction and multiple jobs" msgstr "--single-transaction 및 병렬 작업을 함께 지정할 수는 없음" -#: pg_restore.c:412 +#: pg_restore.c:408 #, c-format msgid "" "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" msgstr "" "알 수 없는 아카이브 형식: \"%s\"; 사용할 수 있는 값: \"c\", \"d\", \"t\"" -#: pg_restore.c:452 +#: pg_restore.c:448 #, c-format msgid "errors ignored on restore: %d" msgstr "복원작업에서의 오류들이 무시되었음: %d" -#: pg_restore.c:465 +#: pg_restore.c:461 #, c-format msgid "" "%s restores a PostgreSQL database from an archive created by pg_dump.\n" @@ -2593,47 +2606,47 @@ msgstr "" "그 자료를 일괄 입력합니다.\n" "\n" -#: pg_restore.c:467 +#: pg_restore.c:463 #, c-format msgid " %s [OPTION]... [FILE]\n" msgstr " %s [옵션]... [파일]\n" -#: pg_restore.c:470 +#: pg_restore.c:466 #, c-format msgid " -d, --dbname=NAME connect to database name\n" msgstr " -d, --dbname=NAME 접속할 데이터베이스 이름\n" -#: pg_restore.c:471 +#: pg_restore.c:467 #, c-format msgid " -f, --file=FILENAME output file name (- for stdout)\n" msgstr " -f, --file=FILENAME 출력 파일 이름 (표준 출력: -)\n" -#: pg_restore.c:472 +#: pg_restore.c:468 #, c-format msgid " -F, --format=c|d|t backup file format (should be automatic)\n" msgstr " -F, --format=c|d|t 백업 파일 형식 (지정하지 않으면 자동분석)\n" -#: pg_restore.c:473 +#: pg_restore.c:469 #, c-format msgid " -l, --list print summarized TOC of the archive\n" msgstr " -l, --list 자료의 요약된 목차를 보여줌\n" -#: pg_restore.c:474 +#: pg_restore.c:470 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose 자세한 정보 보여줌\n" -#: pg_restore.c:475 +#: pg_restore.c:471 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: pg_restore.c:476 +#: pg_restore.c:472 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: pg_restore.c:478 +#: pg_restore.c:474 #, c-format msgid "" "\n" @@ -2642,33 +2655,33 @@ msgstr "" "\n" "리스토어 처리를 위한 옵션들:\n" -#: pg_restore.c:479 +#: pg_restore.c:475 #, c-format msgid " -a, --data-only restore only the data, no schema\n" msgstr " -a, --data-only 스키마는 빼고 자료만 입력함\n" -#: pg_restore.c:481 +#: pg_restore.c:477 #, c-format msgid " -C, --create create the target database\n" msgstr " -C, --create 작업 대상 데이터베이스를 만듦\n" -#: pg_restore.c:482 +#: pg_restore.c:478 #, c-format msgid " -e, --exit-on-error exit on error, default is to continue\n" msgstr "" " -e, --exit-on-error 오류가 생기면 끝냄, 기본은 계속 진행함\n" -#: pg_restore.c:483 +#: pg_restore.c:479 #, c-format msgid " -I, --index=NAME restore named index\n" msgstr " -I, --index=NAME 지정한 인덱스 만듦\n" -#: pg_restore.c:484 +#: pg_restore.c:480 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" msgstr " -j, --jobs=NUM 여러 병렬 작업을 사용하여 복원\n" -#: pg_restore.c:485 +#: pg_restore.c:481 #, c-format msgid "" " -L, --use-list=FILENAME use table of contents from this file for\n" @@ -2677,27 +2690,27 @@ msgstr "" " -L, --use-list=FILENAME 출력을 선택하고 해당 순서를 지정하기 위해\n" " 이 파일의 목차 사용\n" -#: pg_restore.c:487 +#: pg_restore.c:483 #, c-format msgid " -n, --schema=NAME restore only objects in this schema\n" msgstr " -n, --schema=NAME 해당 스키마의 개체들만 복원함\n" -#: pg_restore.c:488 +#: pg_restore.c:484 #, c-format msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" msgstr " -N, --exclude-schema=NAME 해당 스키마의 개체들은 복원 안함\n" -#: pg_restore.c:490 +#: pg_restore.c:486 #, c-format msgid " -P, --function=NAME(args) restore named function\n" msgstr " -P, --function=NAME(args) 지정한 함수 만듦\n" -#: pg_restore.c:491 +#: pg_restore.c:487 #, c-format msgid " -s, --schema-only restore only the schema, no data\n" msgstr " -s, --schema-only 자료구조(스키마)만 만듦\n" -#: pg_restore.c:492 +#: pg_restore.c:488 #, c-format msgid "" " -S, --superuser=NAME superuser user name to use for disabling " @@ -2706,40 +2719,40 @@ msgstr "" " -S, --superuser=NAME 트리거를 사용하지 않기 위해 사용할 슈퍼유저\n" " 사용자 이름\n" -#: pg_restore.c:493 +#: pg_restore.c:489 #, c-format msgid "" " -t, --table=NAME restore named relation (table, view, etc.)\n" msgstr " -t, --table=NAME 복원할 객체 이름 (테이블, 뷰, 기타)\n" -#: pg_restore.c:494 +#: pg_restore.c:490 #, c-format msgid " -T, --trigger=NAME restore named trigger\n" msgstr " -T, --trigger=NAME 지정한 트리거 만듦\n" -#: pg_restore.c:495 +#: pg_restore.c:491 #, c-format msgid "" " -x, --no-privileges skip restoration of access privileges (grant/" "revoke)\n" msgstr " -x, --no-privileges 접근 권한(grant/revoke) 지정 안함\n" -#: pg_restore.c:496 +#: pg_restore.c:492 #, c-format msgid " -1, --single-transaction restore as a single transaction\n" msgstr " -1, --single-transaction 하나의 트랜잭션 작업으로 복원함\n" -#: pg_restore.c:498 +#: pg_restore.c:494 #, c-format msgid " --enable-row-security enable row security\n" msgstr " --enable-row-security 로우 보안 활성화\n" -#: pg_restore.c:500 +#: pg_restore.c:496 #, c-format msgid " --no-comments do not restore comments\n" msgstr " --no-comments 코멘트는 복원하지 않음\n" -#: pg_restore.c:501 +#: pg_restore.c:497 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not " @@ -2749,27 +2762,27 @@ msgstr "" " --no-data-for-failed-tables 만들 수 없는 테이블에 대해서는 자료를 덤프하" "지 않음\n" -#: pg_restore.c:503 +#: pg_restore.c:499 #, c-format msgid " --no-publications do not restore publications\n" msgstr " --no-publications 발행 정보는 복원 안함\n" -#: pg_restore.c:504 +#: pg_restore.c:500 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels 보안 라벨을 복원하지 않음\n" -#: pg_restore.c:505 +#: pg_restore.c:501 #, c-format msgid " --no-subscriptions do not restore subscriptions\n" msgstr " --no-subscriptions 구독 정보는 복원 안함\n" -#: pg_restore.c:506 +#: pg_restore.c:502 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces 테이블스페이스 할당을 복원하지 않음\n" -#: pg_restore.c:507 +#: pg_restore.c:503 #, c-format msgid "" " --section=SECTION restore named section (pre-data, data, or " @@ -2778,12 +2791,12 @@ msgstr "" " --section=SECTION 지정한 섹션만 복원함\n" " 섹션 종류: pre-data, data, post-data\n" -#: pg_restore.c:520 +#: pg_restore.c:516 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=ROLENAME 복원 전에 SET ROLE 수행\n" -#: pg_restore.c:522 +#: pg_restore.c:518 #, c-format msgid "" "\n" @@ -2796,7 +2809,7 @@ msgstr "" "기\n" "위해서 여러번 사용할 수 있습니다.\n" -#: pg_restore.c:525 +#: pg_restore.c:521 #, c-format msgid "" "\n" diff --git a/src/bin/pg_dump/po/ru.po b/src/bin/pg_dump/po/ru.po index 0cef748163c10..7235c01df17f9 100644 --- a/src/bin/pg_dump/po/ru.po +++ b/src/bin/pg_dump/po/ru.po @@ -5,13 +5,13 @@ # Oleg Bartunov , 2004. # Sergey Burladyan , 2012. # Dmitriy Olshevskiy , 2014. -# Alexander Lakhin , 2012-2017, 2018, 2019. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: pg_dump (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-05 11:03+0300\n" -"PO-Revision-Date: 2019-09-09 14:03+0300\n" +"POT-Creation-Date: 2021-02-08 07:28+0300\n" +"PO-Revision-Date: 2020-11-09 08:28+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -21,67 +21,67 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "важно: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "ошибка: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "предупреждение: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "не удалось определить текущий каталог: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "неверный исполняемый файл \"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "не удалось прочитать исполняемый файл \"%s\"" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "не удалось найти запускаемый файл \"%s\"" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "не удалось перейти в каталог \"%s\": %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "не удалось прочитать символическую ссылку \"%s\": %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "ошибка pclose: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 msgid "out of memory" msgstr "нехватка памяти" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" @@ -116,214 +116,214 @@ msgstr "дочерний процесс завершён по сигналу %d: msgid "child process exited with unrecognized status %d" msgstr "дочерний процесс завершился с нераспознанным состоянием %d" -#: common.c:123 +#: common.c:124 #, c-format msgid "reading extensions" msgstr "чтение расширений" -#: common.c:127 +#: common.c:128 #, c-format msgid "identifying extension members" msgstr "выявление членов расширений" -#: common.c:130 +#: common.c:131 #, c-format msgid "reading schemas" msgstr "чтение схем" -#: common.c:140 +#: common.c:141 #, c-format msgid "reading user-defined tables" msgstr "чтение пользовательских таблиц" -#: common.c:147 +#: common.c:148 #, c-format msgid "reading user-defined functions" msgstr "чтение пользовательских функций" -#: common.c:152 +#: common.c:153 #, c-format msgid "reading user-defined types" msgstr "чтение пользовательских типов" -#: common.c:157 +#: common.c:158 #, c-format msgid "reading procedural languages" msgstr "чтение процедурных языков" -#: common.c:160 +#: common.c:161 #, c-format msgid "reading user-defined aggregate functions" msgstr "чтение пользовательских агрегатных функций" -#: common.c:163 +#: common.c:164 #, c-format msgid "reading user-defined operators" msgstr "чтение пользовательских операторов" -#: common.c:167 +#: common.c:168 #, c-format msgid "reading user-defined access methods" msgstr "чтение пользовательских методов доступа" -#: common.c:170 +#: common.c:171 #, c-format msgid "reading user-defined operator classes" msgstr "чтение пользовательских классов операторов" -#: common.c:173 +#: common.c:174 #, c-format msgid "reading user-defined operator families" msgstr "чтение пользовательских семейств операторов" -#: common.c:176 +#: common.c:177 #, c-format msgid "reading user-defined text search parsers" msgstr "чтение пользовательских анализаторов текстового поиска" -#: common.c:179 +#: common.c:180 #, c-format msgid "reading user-defined text search templates" msgstr "чтение пользовательских шаблонов текстового поиска" -#: common.c:182 +#: common.c:183 #, c-format msgid "reading user-defined text search dictionaries" msgstr "чтение пользовательских словарей текстового поиска" -#: common.c:185 +#: common.c:186 #, c-format msgid "reading user-defined text search configurations" msgstr "чтение пользовательских конфигураций текстового поиска" -#: common.c:188 +#: common.c:189 #, c-format msgid "reading user-defined foreign-data wrappers" msgstr "чтение пользовательских оболочек сторонних данных" -#: common.c:191 +#: common.c:192 #, c-format msgid "reading user-defined foreign servers" msgstr "чтение пользовательских сторонних серверов" -#: common.c:194 +#: common.c:195 #, c-format msgid "reading default privileges" msgstr "чтение прав по умолчанию" -#: common.c:197 +#: common.c:198 #, c-format msgid "reading user-defined collations" msgstr "чтение пользовательских правил сортировки" -#: common.c:201 +#: common.c:202 #, c-format msgid "reading user-defined conversions" msgstr "чтение пользовательских преобразований" -#: common.c:204 +#: common.c:205 #, c-format msgid "reading type casts" msgstr "чтение приведений типов" -#: common.c:207 +#: common.c:208 #, c-format msgid "reading transforms" msgstr "чтение преобразований" -#: common.c:210 +#: common.c:211 #, c-format msgid "reading table inheritance information" msgstr "чтение информации о наследовании таблиц" -#: common.c:213 +#: common.c:214 #, c-format msgid "reading event triggers" msgstr "чтение событийных триггеров" -#: common.c:217 +#: common.c:218 #, c-format msgid "finding extension tables" msgstr "поиск таблиц расширений" -#: common.c:221 +#: common.c:222 #, c-format msgid "finding inheritance relationships" msgstr "поиск связей наследования" -#: common.c:224 +#: common.c:225 #, c-format msgid "reading column info for interesting tables" msgstr "чтение информации о столбцах интересующих таблиц" -#: common.c:227 +#: common.c:228 #, c-format msgid "flagging inherited columns in subtables" msgstr "пометка наследованных столбцов в подтаблицах" -#: common.c:230 +#: common.c:231 #, c-format msgid "reading indexes" msgstr "чтение индексов" -#: common.c:233 +#: common.c:234 #, c-format msgid "flagging indexes in partitioned tables" msgstr "пометка индексов в секционированных таблицах" -#: common.c:236 +#: common.c:237 #, c-format msgid "reading extended statistics" msgstr "чтение расширенной статистики" -#: common.c:239 +#: common.c:240 #, c-format msgid "reading constraints" msgstr "чтение ограничений" -#: common.c:242 +#: common.c:243 #, c-format msgid "reading triggers" msgstr "чтение триггеров" -#: common.c:245 +#: common.c:246 #, c-format msgid "reading rewrite rules" msgstr "чтение правил перезаписи" -#: common.c:248 +#: common.c:249 #, c-format msgid "reading policies" msgstr "чтение политик" -#: common.c:251 +#: common.c:252 #, c-format msgid "reading publications" msgstr "чтение публикаций" -#: common.c:254 +#: common.c:257 #, c-format msgid "reading publication membership" msgstr "чтение участников публикаций" -#: common.c:257 +#: common.c:260 #, c-format msgid "reading subscriptions" msgstr "чтение подписок" -#: common.c:1026 +#: common.c:1058 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "" "нарушение целостности: родительская таблица с OID %u для таблицы \"%s\" (OID " "%u) не найдена" -#: common.c:1068 +#: common.c:1100 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "не удалось разобрать числовой массив \"%s\": слишком много чисел" -#: common.c:1083 +#: common.c:1115 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "не удалось разобрать числовой массив \"%s\": неверный символ в числе" @@ -333,74 +333,74 @@ msgstr "не удалось разобрать числовой массив \"% msgid "invalid compression code: %d" msgstr "неверный код сжатия: %d" -#: compress_io.c:134 compress_io.c:170 compress_io.c:188 compress_io.c:508 -#: compress_io.c:551 +#: compress_io.c:134 compress_io.c:170 compress_io.c:188 compress_io.c:504 +#: compress_io.c:547 #, c-format msgid "not built with zlib support" msgstr "программа собрана без поддержки zlib" -#: compress_io.c:237 compress_io.c:336 +#: compress_io.c:236 compress_io.c:333 #, c-format msgid "could not initialize compression library: %s" msgstr "не удалось инициализировать библиотеку сжатия: %s" -#: compress_io.c:257 +#: compress_io.c:256 #, c-format msgid "could not close compression stream: %s" msgstr "не удалось закрыть поток сжатых данных: %s" -#: compress_io.c:274 +#: compress_io.c:273 #, c-format msgid "could not compress data: %s" msgstr "не удалось сжать данные: %s" -#: compress_io.c:352 compress_io.c:367 +#: compress_io.c:349 compress_io.c:364 #, c-format msgid "could not uncompress data: %s" msgstr "не удалось распаковать данные: %s" -#: compress_io.c:374 +#: compress_io.c:371 #, c-format msgid "could not close compression library: %s" msgstr "не удалось закрыть библиотеку сжатия: %s" -#: compress_io.c:588 compress_io.c:625 pg_backup_tar.c:555 pg_backup_tar.c:558 +#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:557 pg_backup_tar.c:560 #, c-format msgid "could not read from input file: %s" msgstr "не удалось прочитать входной файл: %s" -#: compress_io.c:627 pg_backup_custom.c:578 pg_backup_directory.c:539 -#: pg_backup_tar.c:795 pg_backup_tar.c:818 +#: compress_io.c:623 pg_backup_custom.c:646 pg_backup_directory.c:552 +#: pg_backup_tar.c:793 pg_backup_tar.c:816 #, c-format msgid "could not read from input file: end of file" msgstr "не удалось прочитать входной файл: конец файла" -#: parallel.c:268 +#: parallel.c:254 #, c-format msgid "WSAStartup failed: %d" msgstr "ошибка WSAStartup: %d" -#: parallel.c:979 +#: parallel.c:964 #, c-format msgid "could not create communication channels: %m" msgstr "не удалось создать каналы межпроцессного взаимодействия: %m" -#: parallel.c:1036 +#: parallel.c:1021 #, c-format msgid "could not create worker process: %m" msgstr "не удалось создать рабочий процесс: %m" -#: parallel.c:1166 +#: parallel.c:1151 #, c-format msgid "unrecognized command received from master: \"%s\"" msgstr "от ведущего получена нераспознанная команда: \"%s\"" -#: parallel.c:1209 parallel.c:1447 +#: parallel.c:1194 parallel.c:1432 #, c-format msgid "invalid message received from worker: \"%s\"" msgstr "от рабочего процесса получено ошибочное сообщение: \"%s\"" -#: parallel.c:1341 +#: parallel.c:1326 #, c-format msgid "" "could not obtain lock on relation \"%s\"\n" @@ -413,86 +413,86 @@ msgstr "" "этой таблицы после того, как родительский процесс pg_dump получил для неё " "начальную блокировку ACCESS SHARE." -#: parallel.c:1430 +#: parallel.c:1415 #, c-format msgid "a worker process died unexpectedly" msgstr "рабочий процесс неожиданно завершился" -#: parallel.c:1552 parallel.c:1670 +#: parallel.c:1537 parallel.c:1655 #, c-format msgid "could not write to the communication channel: %m" msgstr "не удалось записать в канал взаимодействия: %m" -#: parallel.c:1629 +#: parallel.c:1614 #, c-format msgid "select() failed: %m" msgstr "ошибка в select(): %m" -#: parallel.c:1754 +#: parallel.c:1739 #, c-format msgid "pgpipe: could not create socket: error code %d" msgstr "pgpipe: не удалось создать сокет (код ошибки: %d)" -#: parallel.c:1765 +#: parallel.c:1750 #, c-format msgid "pgpipe: could not bind: error code %d" msgstr "pgpipe: не удалось привязаться к сокету (код ошибки: %d)" -#: parallel.c:1772 +#: parallel.c:1757 #, c-format msgid "pgpipe: could not listen: error code %d" msgstr "pgpipe: не удалось начать приём (код ошибки: %d)" -#: parallel.c:1779 +#: parallel.c:1764 #, c-format msgid "pgpipe: getsockname() failed: error code %d" msgstr "pgpipe: ошибка в getsockname() (код ошибки: %d)" -#: parallel.c:1790 +#: parallel.c:1775 #, c-format msgid "pgpipe: could not create second socket: error code %d" msgstr "pgpipe: не удалось создать второй сокет (код ошибки: %d)" -#: parallel.c:1799 +#: parallel.c:1784 #, c-format msgid "pgpipe: could not connect socket: error code %d" msgstr "pgpipe: не удалось подключить сокет (код ошибки: %d)" -#: parallel.c:1808 +#: parallel.c:1793 #, c-format msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: не удалось принять соединение (код ошибки: %d)" -#: pg_backup_archiver.c:272 pg_backup_archiver.c:1595 +#: pg_backup_archiver.c:277 pg_backup_archiver.c:1587 #, c-format msgid "could not close output file: %m" msgstr "не удалось закрыть выходной файл: %m" -#: pg_backup_archiver.c:316 pg_backup_archiver.c:320 +#: pg_backup_archiver.c:321 pg_backup_archiver.c:325 #, c-format msgid "archive items not in correct section order" msgstr "в последовательности элементов архива нарушен порядок разделов" -#: pg_backup_archiver.c:326 +#: pg_backup_archiver.c:331 #, c-format msgid "unexpected section code %d" msgstr "неожиданный код раздела %d" -#: pg_backup_archiver.c:363 +#: pg_backup_archiver.c:368 #, c-format msgid "parallel restore is not supported with this archive file format" msgstr "" "параллельное восстановление не поддерживается с выбранным форматом архивного " "файла" -#: pg_backup_archiver.c:367 +#: pg_backup_archiver.c:372 #, c-format msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump" msgstr "" "параллельное восстановление возможно только для архивов, созданных pg_dump " "версии 8.0 и новее" -#: pg_backup_archiver.c:385 +#: pg_backup_archiver.c:390 #, c-format msgid "" "cannot restore from compressed archive (compression not supported in this " @@ -501,78 +501,78 @@ msgstr "" "восстановить данные из сжатого архива нельзя (установленная версия не " "поддерживает сжатие)" -#: pg_backup_archiver.c:402 +#: pg_backup_archiver.c:407 #, c-format msgid "connecting to database for restore" msgstr "подключение к базе данных для восстановления" -#: pg_backup_archiver.c:404 +#: pg_backup_archiver.c:409 #, c-format msgid "direct database connections are not supported in pre-1.3 archives" msgstr "" "прямые подключения к базе данных не поддерживаются в архивах до версии 1.3" -#: pg_backup_archiver.c:449 +#: pg_backup_archiver.c:452 #, c-format msgid "implied data-only restore" msgstr "подразумевается восстановление только данных" -#: pg_backup_archiver.c:515 +#: pg_backup_archiver.c:518 #, c-format msgid "dropping %s %s" msgstr "удаляется %s %s" -#: pg_backup_archiver.c:610 +#: pg_backup_archiver.c:613 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "не удалось определить, куда добавить IF EXISTS в оператор \"%s\"" -#: pg_backup_archiver.c:766 pg_backup_archiver.c:768 +#: pg_backup_archiver.c:769 pg_backup_archiver.c:771 #, c-format msgid "warning from original dump file: %s" msgstr "предупреждение из исходного файла: %s" -#: pg_backup_archiver.c:783 +#: pg_backup_archiver.c:786 #, c-format msgid "creating %s \"%s.%s\"" msgstr "создаётся %s \"%s.%s\"" -#: pg_backup_archiver.c:786 +#: pg_backup_archiver.c:789 #, c-format msgid "creating %s \"%s\"" msgstr "создаётся %s \"%s\"" -#: pg_backup_archiver.c:843 +#: pg_backup_archiver.c:839 #, c-format msgid "connecting to new database \"%s\"" msgstr "подключение к новой базе данных \"%s\"" -#: pg_backup_archiver.c:871 +#: pg_backup_archiver.c:866 #, c-format msgid "processing %s" msgstr "обрабатывается %s" -#: pg_backup_archiver.c:891 +#: pg_backup_archiver.c:886 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "обрабатываются данные таблицы \"%s.%s\"" -#: pg_backup_archiver.c:953 +#: pg_backup_archiver.c:948 #, c-format msgid "executing %s %s" msgstr "выполняется %s %s" -#: pg_backup_archiver.c:992 +#: pg_backup_archiver.c:987 #, c-format msgid "disabling triggers for %s" msgstr "отключаются триггеры таблицы %s" -#: pg_backup_archiver.c:1018 +#: pg_backup_archiver.c:1013 #, c-format msgid "enabling triggers for %s" msgstr "включаются триггеры таблицы %s" -#: pg_backup_archiver.c:1046 +#: pg_backup_archiver.c:1041 #, c-format msgid "" "internal error -- WriteData cannot be called outside the context of a " @@ -581,12 +581,12 @@ msgstr "" "внутренняя ошибка -- WriteData нельзя вызывать вне контекста процедуры " "DataDumper" -#: pg_backup_archiver.c:1231 +#: pg_backup_archiver.c:1224 #, c-format msgid "large-object output not supported in chosen format" msgstr "выбранный формат не поддерживает выгрузку больших объектов" -#: pg_backup_archiver.c:1289 +#: pg_backup_archiver.c:1282 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" @@ -594,55 +594,55 @@ msgstr[0] "восстановлен %d большой объект" msgstr[1] "восстановлено %d больших объекта" msgstr[2] "восстановлено %d больших объектов" -#: pg_backup_archiver.c:1310 pg_backup_tar.c:738 +#: pg_backup_archiver.c:1303 pg_backup_tar.c:736 #, c-format msgid "restoring large object with OID %u" msgstr "восстановление большого объекта с OID %u" -#: pg_backup_archiver.c:1322 +#: pg_backup_archiver.c:1315 #, c-format msgid "could not create large object %u: %s" msgstr "не удалось создать большой объект %u: %s" -#: pg_backup_archiver.c:1327 pg_dump.c:3471 +#: pg_backup_archiver.c:1320 pg_dump.c:3552 #, c-format msgid "could not open large object %u: %s" msgstr "не удалось открыть большой объект %u: %s" -#: pg_backup_archiver.c:1384 +#: pg_backup_archiver.c:1377 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "не удалось открыть файл оглавления \"%s\": %m" -#: pg_backup_archiver.c:1424 +#: pg_backup_archiver.c:1417 #, c-format msgid "line ignored: %s" msgstr "строка проигнорирована: %s" -#: pg_backup_archiver.c:1431 +#: pg_backup_archiver.c:1424 #, c-format msgid "could not find entry for ID %d" msgstr "не найдена запись для ID %d" -#: pg_backup_archiver.c:1452 pg_backup_directory.c:222 -#: pg_backup_directory.c:587 +#: pg_backup_archiver.c:1445 pg_backup_directory.c:222 +#: pg_backup_directory.c:598 #, c-format msgid "could not close TOC file: %m" msgstr "не удалось закрыть файл оглавления: %m" -#: pg_backup_archiver.c:1567 pg_backup_custom.c:159 pg_backup_directory.c:332 -#: pg_backup_directory.c:574 pg_backup_directory.c:637 -#: pg_backup_directory.c:656 pg_dumpall.c:485 +#: pg_backup_archiver.c:1559 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_directory.c:585 pg_backup_directory.c:648 +#: pg_backup_directory.c:667 pg_dumpall.c:484 #, c-format msgid "could not open output file \"%s\": %m" msgstr "не удалось открыть выходной файл \"%s\": %m" -#: pg_backup_archiver.c:1569 pg_backup_custom.c:165 +#: pg_backup_archiver.c:1561 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "не удалось открыть выходной файл: %m" -#: pg_backup_archiver.c:1662 +#: pg_backup_archiver.c:1654 #, c-format msgid "wrote %lu byte of large object data (result = %lu)" msgid_plural "wrote %lu bytes of large object data (result = %lu)" @@ -650,211 +650,211 @@ msgstr[0] "записан %lu байт данных большого объек msgstr[1] "записано %lu байта данных большого объекта (результат = %lu)" msgstr[2] "записано %lu байт данных большого объекта (результат = %lu)" -#: pg_backup_archiver.c:1667 +#: pg_backup_archiver.c:1659 #, c-format msgid "could not write to large object (result: %lu, expected: %lu)" msgstr "не удалось записать большой объект (результат: %lu, ожидалось: %lu)" -#: pg_backup_archiver.c:1759 +#: pg_backup_archiver.c:1749 #, c-format msgid "while INITIALIZING:" msgstr "при инициализации:" -#: pg_backup_archiver.c:1764 +#: pg_backup_archiver.c:1754 #, c-format msgid "while PROCESSING TOC:" msgstr "при обработке оглавления:" -#: pg_backup_archiver.c:1769 +#: pg_backup_archiver.c:1759 #, c-format msgid "while FINALIZING:" msgstr "при завершении:" -#: pg_backup_archiver.c:1774 +#: pg_backup_archiver.c:1764 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "из записи оглавления %d; %u %u %s %s %s" -#: pg_backup_archiver.c:1850 +#: pg_backup_archiver.c:1840 #, c-format msgid "bad dumpId" msgstr "неверный dumpId" -#: pg_backup_archiver.c:1871 +#: pg_backup_archiver.c:1861 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "неверный dumpId таблицы в элементе TABLE DATA" -#: pg_backup_archiver.c:1963 +#: pg_backup_archiver.c:1953 #, c-format msgid "unexpected data offset flag %d" msgstr "неожиданный флаг смещения данных: %d" -#: pg_backup_archiver.c:1976 +#: pg_backup_archiver.c:1966 #, c-format msgid "file offset in dump file is too large" msgstr "слишком большое смещение в файле выгрузки" -#: pg_backup_archiver.c:2113 pg_backup_archiver.c:2123 +#: pg_backup_archiver.c:2103 pg_backup_archiver.c:2113 #, c-format msgid "directory name too long: \"%s\"" msgstr "слишком длинное имя каталога: \"%s\"" -#: pg_backup_archiver.c:2131 +#: pg_backup_archiver.c:2121 #, c-format msgid "" "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not " "exist)" msgstr "каталог \"%s\" не похож на архивный (в нём отсутствует \"toc.dat\")" -#: pg_backup_archiver.c:2139 pg_backup_custom.c:176 pg_backup_custom.c:760 -#: pg_backup_directory.c:207 pg_backup_directory.c:391 +#: pg_backup_archiver.c:2129 pg_backup_custom.c:173 pg_backup_custom.c:812 +#: pg_backup_directory.c:207 pg_backup_directory.c:394 #, c-format msgid "could not open input file \"%s\": %m" msgstr "не удалось открыть входной файл \"%s\": %m" -#: pg_backup_archiver.c:2146 pg_backup_custom.c:182 +#: pg_backup_archiver.c:2136 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "не удалось открыть входной файл: %m" -#: pg_backup_archiver.c:2152 +#: pg_backup_archiver.c:2142 #, c-format msgid "could not read input file: %m" msgstr "не удалось прочитать входной файл: %m" -#: pg_backup_archiver.c:2154 +#: pg_backup_archiver.c:2144 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "входной файл слишком короткий (прочитано байт: %lu, ожидалось: 5)" -#: pg_backup_archiver.c:2239 +#: pg_backup_archiver.c:2229 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "" "входной файл, видимо, имеет текстовый формат. Загрузите его с помощью psql." -#: pg_backup_archiver.c:2245 +#: pg_backup_archiver.c:2235 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "входной файл не похож на архив (возможно, слишком мал?)" -#: pg_backup_archiver.c:2251 +#: pg_backup_archiver.c:2241 #, c-format msgid "input file does not appear to be a valid archive" msgstr "входной файл не похож на архив" -#: pg_backup_archiver.c:2271 +#: pg_backup_archiver.c:2261 #, c-format msgid "could not close input file: %m" msgstr "не удалось закрыть входной файл: %m" -#: pg_backup_archiver.c:2385 +#: pg_backup_archiver.c:2373 #, c-format msgid "unrecognized file format \"%d\"" msgstr "неопознанный формат файла: \"%d\"" -#: pg_backup_archiver.c:2467 pg_backup_archiver.c:4475 +#: pg_backup_archiver.c:2455 pg_backup_archiver.c:4458 #, c-format msgid "finished item %d %s %s" msgstr "закончен объект %d %s %s" -#: pg_backup_archiver.c:2471 pg_backup_archiver.c:4488 +#: pg_backup_archiver.c:2459 pg_backup_archiver.c:4471 #, c-format msgid "worker process failed: exit code %d" msgstr "рабочий процесс завершился с кодом возврата %d" -#: pg_backup_archiver.c:2591 +#: pg_backup_archiver.c:2579 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "ID записи %d вне диапазона - возможно повреждено оглавление" -#: pg_backup_archiver.c:2658 +#: pg_backup_archiver.c:2646 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "восстановление таблиц со свойством WITH OIDS больше не поддерживается" -#: pg_backup_archiver.c:2740 +#: pg_backup_archiver.c:2728 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "нераспознанная кодировка \"%s\"" -#: pg_backup_archiver.c:2745 +#: pg_backup_archiver.c:2733 #, c-format msgid "invalid ENCODING item: %s" msgstr "неверный элемент ENCODING: %s" -#: pg_backup_archiver.c:2763 +#: pg_backup_archiver.c:2751 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "неверный элемент STDSTRINGS: %s" -#: pg_backup_archiver.c:2788 +#: pg_backup_archiver.c:2776 #, c-format msgid "schema \"%s\" not found" msgstr "схема \"%s\" не найдена" -#: pg_backup_archiver.c:2795 +#: pg_backup_archiver.c:2783 #, c-format msgid "table \"%s\" not found" msgstr "таблица \"%s\" не найдена" -#: pg_backup_archiver.c:2802 +#: pg_backup_archiver.c:2790 #, c-format msgid "index \"%s\" not found" msgstr "индекс \"%s\" не найден" -#: pg_backup_archiver.c:2809 +#: pg_backup_archiver.c:2797 #, c-format msgid "function \"%s\" not found" msgstr "функция \"%s\" не найдена" -#: pg_backup_archiver.c:2816 +#: pg_backup_archiver.c:2804 #, c-format msgid "trigger \"%s\" not found" msgstr "триггер \"%s\" не найден" -#: pg_backup_archiver.c:3195 +#: pg_backup_archiver.c:3196 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "не удалось переключить пользователя сессии на \"%s\": %s" -#: pg_backup_archiver.c:3334 +#: pg_backup_archiver.c:3328 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "не удалось присвоить search_path значение \"%s\": %s" -#: pg_backup_archiver.c:3396 +#: pg_backup_archiver.c:3390 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "не удалось задать для default_tablespace значение %s: %s" -#: pg_backup_archiver.c:3441 +#: pg_backup_archiver.c:3435 #, c-format msgid "could not set default_table_access_method: %s" msgstr "не удалось задать default_table_access_method: %s" -#: pg_backup_archiver.c:3533 pg_backup_archiver.c:3691 +#: pg_backup_archiver.c:3527 pg_backup_archiver.c:3685 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "неизвестно, как назначить владельца для объекта типа \"%s\"" -#: pg_backup_archiver.c:3795 +#: pg_backup_archiver.c:3789 #, c-format msgid "did not find magic string in file header" msgstr "в заголовке файла не найдена нужная сигнатура" -#: pg_backup_archiver.c:3808 +#: pg_backup_archiver.c:3802 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "неподдерживаемая версия (%d.%d) в заголовке файла" -#: pg_backup_archiver.c:3813 +#: pg_backup_archiver.c:3807 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "несоответствие размера integer (%lu)" -#: pg_backup_archiver.c:3817 +#: pg_backup_archiver.c:3811 #, c-format msgid "" "archive was made on a machine with larger integers, some operations might " @@ -863,12 +863,12 @@ msgstr "" "архив был сделан на компьютере большей разрядности -- возможен сбой " "некоторых операций" -#: pg_backup_archiver.c:3827 +#: pg_backup_archiver.c:3821 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "ожидаемый формат (%d) отличается от формата, указанного в файле (%d)" -#: pg_backup_archiver.c:3843 +#: pg_backup_archiver.c:3837 #, c-format msgid "" "archive is compressed, but this installation does not support compression -- " @@ -877,73 +877,68 @@ msgstr "" "архив сжат, но установленная версия не поддерживает сжатие -- данные " "недоступны" -#: pg_backup_archiver.c:3861 +#: pg_backup_archiver.c:3855 #, c-format msgid "invalid creation date in header" msgstr "неверная дата создания в заголовке" -#: pg_backup_archiver.c:3998 +#: pg_backup_archiver.c:3983 #, c-format msgid "processing item %d %s %s" msgstr "обработка объекта %d %s %s" -#: pg_backup_archiver.c:4077 +#: pg_backup_archiver.c:4062 #, c-format msgid "entering main parallel loop" msgstr "вход в основной параллельный цикл" -#: pg_backup_archiver.c:4088 +#: pg_backup_archiver.c:4073 #, c-format msgid "skipping item %d %s %s" msgstr "объект %d %s %s пропускается" -#: pg_backup_archiver.c:4097 +#: pg_backup_archiver.c:4082 #, c-format msgid "launching item %d %s %s" msgstr "объект %d %s %s запускается" -#: pg_backup_archiver.c:4151 +#: pg_backup_archiver.c:4136 #, c-format msgid "finished main parallel loop" msgstr "основной параллельный цикл закончен" -#: pg_backup_archiver.c:4189 +#: pg_backup_archiver.c:4172 #, c-format msgid "processing missed item %d %s %s" msgstr "обработка пропущенного объекта %d %s %s" -#: pg_backup_archiver.c:4794 +#: pg_backup_archiver.c:4777 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "создать таблицу \"%s\" не удалось, её данные не будут восстановлены" -#: pg_backup_custom.c:377 pg_backup_null.c:150 +#: pg_backup_custom.c:378 pg_backup_null.c:147 #, c-format msgid "invalid OID for large object" msgstr "неверный OID большого объекта" -#: pg_backup_custom.c:447 -#, c-format -msgid "unrecognized data block type (%d) while searching archive" -msgstr "нераспознанный тип блока данных (%d) при поиске архива" - -#: pg_backup_custom.c:458 pg_backup_custom.c:818 +#: pg_backup_custom.c:441 pg_backup_custom.c:507 pg_backup_custom.c:632 +#: pg_backup_custom.c:870 pg_backup_tar.c:1086 pg_backup_tar.c:1091 #, c-format msgid "error during file seek: %m" msgstr "ошибка при перемещении в файле: %m" -#: pg_backup_custom.c:467 +#: pg_backup_custom.c:480 #, c-format -msgid "" -"could not find block ID %d in archive -- possibly due to out-of-order " -"restore request, which cannot be handled due to lack of data offsets in " -"archive" -msgstr "" -"не удалось найти в архиве блок с ID %d -- возможно, по причине не " -"последовательного запроса восстановления, который нельзя обработать из-за " -"отсутствия смещений данных в архиве" +msgid "data block %d has wrong seek position" +msgstr "в блоке данных %d задана неверная позиция" + +#: pg_backup_custom.c:497 +#, c-format +msgid "unrecognized data block type (%d) while searching archive" +msgstr "нераспознанный тип блока данных (%d) при поиске архива" -#: pg_backup_custom.c:472 +#: pg_backup_custom.c:519 #, c-format msgid "" "could not find block ID %d in archive -- possibly due to out-of-order " @@ -953,139 +948,118 @@ msgstr "" "последовательного запроса восстановления, который нельзя обработать с " "файлом, не допускающим произвольный доступ" -#: pg_backup_custom.c:477 +#: pg_backup_custom.c:524 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive" msgstr "не удалось найти в архиве блок с ID %d -- возможно, архив испорчен" -#: pg_backup_custom.c:484 +#: pg_backup_custom.c:531 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d" msgstr "при чтении данных получен неожиданный ID блока (%d) -- ожидался: %d" -#: pg_backup_custom.c:498 +#: pg_backup_custom.c:545 #, c-format msgid "unrecognized data block type %d while restoring archive" msgstr "нераспознанный тип блока данных %d при восстановлении архива" -#: pg_backup_custom.c:580 +#: pg_backup_custom.c:648 #, c-format msgid "could not read from input file: %m" msgstr "не удалось прочитать входной файл: %m" -#: pg_backup_custom.c:698 pg_backup_custom.c:751 pg_backup_custom.c:891 -#: pg_backup_tar.c:1091 +#: pg_backup_custom.c:751 pg_backup_custom.c:803 pg_backup_custom.c:948 +#: pg_backup_tar.c:1089 #, c-format msgid "could not determine seek position in archive file: %m" msgstr "не удалось определить позицию в файле архива: %m" -#: pg_backup_custom.c:715 pg_backup_custom.c:755 +#: pg_backup_custom.c:767 pg_backup_custom.c:807 #, c-format msgid "could not close archive file: %m" msgstr "не удалось закрыть файл архива: %m" -#: pg_backup_custom.c:738 +#: pg_backup_custom.c:790 #, c-format msgid "can only reopen input archives" msgstr "повторно открыть можно только входные файлы" -#: pg_backup_custom.c:745 +#: pg_backup_custom.c:797 #, c-format msgid "parallel restore from standard input is not supported" msgstr "параллельное восстановление из стандартного ввода не поддерживается" -#: pg_backup_custom.c:747 +#: pg_backup_custom.c:799 #, c-format msgid "parallel restore from non-seekable file is not supported" msgstr "" "параллельное восстановление возможно только с файлом произвольного доступа" -#: pg_backup_custom.c:763 +#: pg_backup_custom.c:815 #, c-format msgid "could not set seek position in archive file: %m" msgstr "не удалось задать текущую позицию в файле архива: %m" -#: pg_backup_custom.c:839 +#: pg_backup_custom.c:894 #, c-format msgid "compressor active" msgstr "сжатие активно" -#: pg_backup_custom.c:894 -#, c-format -msgid "ftell mismatch with expected position -- ftell used" -msgstr "позиция ftell не соответствует ожидаемой -- используется ftell" - -#: pg_backup_db.c:44 +#: pg_backup_db.c:41 #, c-format msgid "could not get server_version from libpq" msgstr "не удалось получить версию сервера из libpq" -#: pg_backup_db.c:55 pg_dumpall.c:1826 +#: pg_backup_db.c:52 pg_dumpall.c:1826 #, c-format msgid "server version: %s; %s version: %s" msgstr "версия сервера: %s; версия %s: %s" -#: pg_backup_db.c:57 pg_dumpall.c:1828 +#: pg_backup_db.c:54 pg_dumpall.c:1828 #, c-format msgid "aborting because of server version mismatch" msgstr "продолжение работы с другой версией сервера невозможно" -#: pg_backup_db.c:140 +#: pg_backup_db.c:124 #, c-format -msgid "connecting to database \"%s\" as user \"%s\"" -msgstr "подключение к базе \"%s\" с именем пользователя \"%s\"" +msgid "already connected to a database" +msgstr "подключение к базе данных уже установлено" -#: pg_backup_db.c:147 pg_backup_db.c:196 pg_backup_db.c:257 pg_backup_db.c:298 -#: pg_dumpall.c:1651 pg_dumpall.c:1764 +#: pg_backup_db.c:133 pg_backup_db.c:185 pg_dumpall.c:1651 pg_dumpall.c:1764 msgid "Password: " msgstr "Пароль: " -#: pg_backup_db.c:179 +#: pg_backup_db.c:177 #, c-format -msgid "could not reconnect to database" +msgid "could not connect to database" msgstr "не удалось переподключиться к базе" -#: pg_backup_db.c:184 -#, c-format -msgid "could not reconnect to database: %s" -msgstr "не удалось переподключиться к базе: %s" - -#: pg_backup_db.c:200 +#: pg_backup_db.c:195 #, c-format -msgid "connection needs password" -msgstr "для подключения необходим пароль" +msgid "reconnection to database \"%s\" failed: %s" +msgstr "не удалось переподключиться к базе \"%s\": %s" -#: pg_backup_db.c:251 -#, c-format -msgid "already connected to a database" -msgstr "подключение к базе данных уже установлено" - -#: pg_backup_db.c:290 -#, c-format -msgid "could not connect to database" -msgstr "не удалось переподключиться к базе" - -#: pg_backup_db.c:306 +#: pg_backup_db.c:199 #, c-format msgid "connection to database \"%s\" failed: %s" msgstr "не удалось подключиться к базе \"%s\": %s" -#: pg_backup_db.c:378 pg_dumpall.c:1684 +#: pg_backup_db.c:272 pg_dumpall.c:1684 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:385 pg_dumpall.c:1889 pg_dumpall.c:1912 +#: pg_backup_db.c:279 pg_dumpall.c:1889 pg_dumpall.c:1912 #, c-format msgid "query failed: %s" msgstr "ошибка при выполнении запроса: %s" -#: pg_backup_db.c:387 pg_dumpall.c:1890 pg_dumpall.c:1913 +#: pg_backup_db.c:281 pg_dumpall.c:1890 pg_dumpall.c:1913 #, c-format msgid "query was: %s" msgstr "запрос: %s" -#: pg_backup_db.c:428 +#: pg_backup_db.c:322 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" @@ -1094,40 +1068,40 @@ msgstr[1] "запрос вернул %d строки вместо одной: %s msgstr[2] "запрос вернул %d строк вместо одной: %s" # skip-rule: language-mix -#: pg_backup_db.c:464 +#: pg_backup_db.c:358 #, c-format msgid "%s: %sCommand was: %s" msgstr "%s: %sВыполнялась команда: %s" -#: pg_backup_db.c:520 pg_backup_db.c:594 pg_backup_db.c:601 +#: pg_backup_db.c:414 pg_backup_db.c:488 pg_backup_db.c:495 msgid "could not execute query" msgstr "не удалось выполнить запрос" -#: pg_backup_db.c:573 +#: pg_backup_db.c:467 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "ошибка в PQputCopyData: %s" -#: pg_backup_db.c:622 +#: pg_backup_db.c:516 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "ошибка в PQputCopyEnd: %s" -#: pg_backup_db.c:628 +#: pg_backup_db.c:522 #, c-format msgid "COPY failed for table \"%s\": %s" msgstr "сбой команды COPY для таблицы \"%s\": %s" -#: pg_backup_db.c:634 pg_dump.c:1924 +#: pg_backup_db.c:528 pg_dump.c:1988 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "неожиданные лишние результаты получены при COPY для таблицы \"%s\"" -#: pg_backup_db.c:646 +#: pg_backup_db.c:540 msgid "could not start database transaction" msgstr "не удаётся начать транзакцию" -#: pg_backup_db.c:654 +#: pg_backup_db.c:548 msgid "could not commit database transaction" msgstr "не удалось зафиксировать транзакцию" @@ -1151,49 +1125,49 @@ msgstr "не удалось закрыть каталог \"%s\": %m" msgid "could not create directory \"%s\": %m" msgstr "создать каталог \"%s\" не удалось: %m" -#: pg_backup_directory.c:350 pg_backup_directory.c:488 -#: pg_backup_directory.c:518 +#: pg_backup_directory.c:355 pg_backup_directory.c:496 +#: pg_backup_directory.c:532 #, c-format msgid "could not write to output file: %s" msgstr "не удалось записать в выходной файл: %s" -#: pg_backup_directory.c:403 +#: pg_backup_directory.c:406 #, c-format -msgid "could not close data file: %m" -msgstr "не удалось закрыть файл данных: %m" +msgid "could not close data file \"%s\": %m" +msgstr "не удалось закрыть файл данных \"%s\": %m" -#: pg_backup_directory.c:443 +#: pg_backup_directory.c:446 #, c-format msgid "could not open large object TOC file \"%s\" for input: %m" msgstr "" "не удалось открыть для чтения файл оглавления больших объектов \"%s\": %m" -#: pg_backup_directory.c:454 +#: pg_backup_directory.c:457 #, c-format msgid "invalid line in large object TOC file \"%s\": \"%s\"" msgstr "неверная строка в файле оглавления больших объектов \"%s\": \"%s\"" -#: pg_backup_directory.c:463 +#: pg_backup_directory.c:466 #, c-format msgid "error reading large object TOC file \"%s\"" msgstr "ошибка чтения файла оглавления больших объектов \"%s\"" -#: pg_backup_directory.c:467 +#: pg_backup_directory.c:470 #, c-format msgid "could not close large object TOC file \"%s\": %m" msgstr "не удалось закрыть файл оглавления больших объектов \"%s\": %m" -#: pg_backup_directory.c:678 +#: pg_backup_directory.c:689 #, c-format msgid "could not write to blobs TOC file" msgstr "не удалось записать в файл оглавления больших объектов" -#: pg_backup_directory.c:710 +#: pg_backup_directory.c:721 #, c-format msgid "file name too long: \"%s\"" msgstr "слишком длинное имя файла: \"%s\"" -#: pg_backup_null.c:75 +#: pg_backup_null.c:74 #, c-format msgid "this format cannot be read" msgstr "этот формат нельзя прочитать" @@ -1243,37 +1217,32 @@ msgstr "не удалось открыть временный файл" msgid "could not close tar member" msgstr "не удалось закрыть компонент tar-архива" -#: pg_backup_tar.c:571 -#, c-format -msgid "internal error -- neither th nor fh specified in tarReadRaw()" -msgstr "внутренняя ошибка -- в tarReadRaw() не указан ни th, ни fh" - -#: pg_backup_tar.c:693 +#: pg_backup_tar.c:691 #, c-format msgid "unexpected COPY statement syntax: \"%s\"" msgstr "недопустимый синтаксис оператора COPY: \"%s\"" -#: pg_backup_tar.c:961 +#: pg_backup_tar.c:958 #, c-format msgid "invalid OID for large object (%u)" msgstr "неверный OID для большого объекта (%u)" -#: pg_backup_tar.c:1106 +#: pg_backup_tar.c:1105 #, c-format msgid "could not close temporary file: %m" msgstr "не удалось закрыть временный файл: %m" -#: pg_backup_tar.c:1115 +#: pg_backup_tar.c:1114 #, c-format msgid "actual file length (%s) does not match expected (%s)" msgstr "действительная длина файла (%s) не равна ожидаемой (%s)" -#: pg_backup_tar.c:1172 pg_backup_tar.c:1202 +#: pg_backup_tar.c:1171 pg_backup_tar.c:1201 #, c-format msgid "could not find header for file \"%s\" in tar archive" msgstr "в архиве tar не найден заголовок для файла \"%s\"" -#: pg_backup_tar.c:1190 +#: pg_backup_tar.c:1189 #, c-format msgid "" "restoring data out of order is not supported in this archive format: \"%s\" " @@ -1283,7 +1252,7 @@ msgstr "" "поддерживается: требуется компонент \"%s\", но в файле архива прежде идёт " "\"%s\"." -#: pg_backup_tar.c:1235 +#: pg_backup_tar.c:1234 #, c-format msgid "incomplete tar header found (%lu byte)" msgid_plural "incomplete tar header found (%lu bytes)" @@ -1291,7 +1260,7 @@ msgstr[0] "найден неполный заголовок tar (размер %l msgstr[1] "найден неполный заголовок tar (размер %lu байта)" msgstr[2] "найден неполный заголовок tar (размер %lu байт)" -#: pg_backup_tar.c:1286 +#: pg_backup_tar.c:1285 #, c-format msgid "" "corrupt tar header found in %s (expected %d, computed %d) file position %s" @@ -1304,10 +1273,10 @@ msgstr "" msgid "unrecognized section name: \"%s\"" msgstr "нераспознанное имя раздела: \"%s\"" -#: pg_backup_utils.c:55 pg_dump.c:611 pg_dump.c:628 pg_dumpall.c:339 -#: pg_dumpall.c:349 pg_dumpall.c:358 pg_dumpall.c:367 pg_dumpall.c:375 -#: pg_dumpall.c:389 pg_dumpall.c:465 pg_restore.c:288 pg_restore.c:304 -#: pg_restore.c:322 +#: pg_backup_utils.c:55 pg_dump.c:607 pg_dump.c:624 pg_dumpall.c:338 +#: pg_dumpall.c:348 pg_dumpall.c:357 pg_dumpall.c:366 pg_dumpall.c:374 +#: pg_dumpall.c:388 pg_dumpall.c:464 pg_restore.c:284 pg_restore.c:300 +#: pg_restore.c:318 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" @@ -1317,42 +1286,56 @@ msgstr "Для дополнительной информации попробу msgid "out of on_exit_nicely slots" msgstr "превышен предел обработчиков штатного выхода" -#: pg_dump.c:542 +#: pg_dump.c:533 #, c-format msgid "compression level must be in range 0..9" msgstr "уровень сжатия должен быть в диапазоне 0..9" -#: pg_dump.c:580 +#: pg_dump.c:571 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "значение extra_float_digits должно быть в диапазоне -15..3" -#: pg_dump.c:603 +#: pg_dump.c:594 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "значение rows-per-insert должно быть в диапазоне %d..%d" -#: pg_dump.c:626 pg_dumpall.c:347 pg_restore.c:302 +#: pg_dump.c:622 pg_dumpall.c:346 pg_restore.c:298 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: pg_dump.c:647 pg_restore.c:331 +#: pg_dump.c:643 pg_restore.c:327 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "параметры -s/--schema-only и -a/--data-only исключают друг друга" -#: pg_dump.c:653 pg_restore.c:337 +#: pg_dump.c:648 +#, c-format +msgid "" +"options -s/--schema-only and --include-foreign-data cannot be used together" +msgstr "" +"параметры -s/--schema-only и --include-foreign-data исключают друг друга" + +#: pg_dump.c:651 +#, c-format +msgid "option --include-foreign-data is not supported with parallel backup" +msgstr "" +"параметр --include-foreign-data не поддерживается при копировании в " +"параллельном режиме" + +#: pg_dump.c:655 pg_restore.c:333 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "параметры -c/--clean и -a/--data-only исключают друг друга" -#: pg_dump.c:658 pg_dumpall.c:382 pg_restore.c:386 +#: pg_dump.c:660 pg_dumpall.c:381 pg_restore.c:382 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "параметр --if-exists требует указания -c/--clean" -#: pg_dump.c:665 +#: pg_dump.c:667 #, c-format msgid "" "option --on-conflict-do-nothing requires option --inserts, --rows-per-" @@ -1361,7 +1344,7 @@ msgstr "" "параметр --on-conflict-do-nothing требует указания --inserts, --rows-per-" "insert или --column-inserts" -#: pg_dump.c:687 +#: pg_dump.c:689 #, c-format msgid "" "requested compression not available in this installation -- archive will be " @@ -1370,19 +1353,19 @@ msgstr "" "установленная версия программы не поддерживает сжатие -- архив не будет " "сжиматься" -#: pg_dump.c:708 pg_restore.c:353 +#: pg_dump.c:710 pg_restore.c:349 #, c-format msgid "invalid number of parallel jobs" msgstr "неверное число параллельных заданий" -#: pg_dump.c:712 +#: pg_dump.c:714 #, c-format msgid "parallel backup only supported by the directory format" msgstr "" "параллельное резервное копирование поддерживается только с форматом \"каталог" "\"" -#: pg_dump.c:767 +#: pg_dump.c:769 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1393,27 +1376,27 @@ msgstr "" "Если они вам не нужны, укажите при запуске ключ\n" "--no-synchronized-snapshots." -#: pg_dump.c:773 +#: pg_dump.c:775 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Экспортированные снимки не поддерживаются этой версией сервера." -#: pg_dump.c:785 +#: pg_dump.c:787 #, c-format msgid "last built-in OID is %u" msgstr "последний системный OID: %u" -#: pg_dump.c:794 +#: pg_dump.c:796 #, c-format msgid "no matching schemas were found" msgstr "соответствующие схемы не найдены" -#: pg_dump.c:808 +#: pg_dump.c:810 #, c-format msgid "no matching tables were found" msgstr "соответствующие таблицы не найдены" -#: pg_dump.c:980 +#: pg_dump.c:990 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1422,17 +1405,17 @@ msgstr "" "%s сохраняет резервную копию БД в текстовом файле или другом виде.\n" "\n" -#: pg_dump.c:981 pg_dumpall.c:618 pg_restore.c:466 +#: pg_dump.c:991 pg_dumpall.c:617 pg_restore.c:462 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_dump.c:982 +#: pg_dump.c:992 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД]\n" -#: pg_dump.c:984 pg_dumpall.c:621 pg_restore.c:469 +#: pg_dump.c:994 pg_dumpall.c:620 pg_restore.c:465 #, c-format msgid "" "\n" @@ -1441,12 +1424,12 @@ msgstr "" "\n" "Общие параметры:\n" -#: pg_dump.c:985 +#: pg_dump.c:995 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=ИМЯ имя выходного файла или каталога\n" -#: pg_dump.c:986 +#: pg_dump.c:996 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1456,7 +1439,7 @@ msgstr "" " (пользовательский | каталог | tar |\n" " текстовый (по умолчанию))\n" -#: pg_dump.c:988 +#: pg_dump.c:998 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr "" @@ -1464,23 +1447,23 @@ msgstr "" "число\n" " заданий\n" -#: pg_dump.c:989 pg_dumpall.c:623 +#: pg_dump.c:999 pg_dumpall.c:622 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose режим подробных сообщений\n" -#: pg_dump.c:990 pg_dumpall.c:624 +#: pg_dump.c:1000 pg_dumpall.c:623 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_dump.c:991 +#: pg_dump.c:1001 #, c-format msgid "" " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 уровень сжатия при архивации\n" -#: pg_dump.c:992 pg_dumpall.c:625 +#: pg_dump.c:1002 pg_dumpall.c:624 #, c-format msgid "" " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" @@ -1488,7 +1471,7 @@ msgstr "" " --lock-wait-timeout=ТАЙМ-АУТ прервать операцию при тайм-ауте блокировки " "таблицы\n" -#: pg_dump.c:993 pg_dumpall.c:652 +#: pg_dump.c:1003 pg_dumpall.c:651 #, c-format msgid "" " --no-sync do not wait for changes to be written safely " @@ -1497,12 +1480,12 @@ msgstr "" " --no-sync не ждать надёжного сохранения изменений на " "диске\n" -#: pg_dump.c:994 pg_dumpall.c:626 +#: pg_dump.c:1004 pg_dumpall.c:625 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_dump.c:996 pg_dumpall.c:627 +#: pg_dump.c:1006 pg_dumpall.c:626 #, c-format msgid "" "\n" @@ -1511,22 +1494,22 @@ msgstr "" "\n" "Параметры, управляющие выводом:\n" -#: pg_dump.c:997 pg_dumpall.c:628 +#: pg_dump.c:1007 pg_dumpall.c:627 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only выгрузить только данные, без схемы\n" -#: pg_dump.c:998 +#: pg_dump.c:1008 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs выгрузить также большие объекты\n" -#: pg_dump.c:999 +#: pg_dump.c:1009 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs исключить из выгрузки большие объекты\n" -#: pg_dump.c:1000 pg_restore.c:480 +#: pg_dump.c:1010 pg_restore.c:476 #, c-format msgid "" " -c, --clean clean (drop) database objects before " @@ -1535,7 +1518,7 @@ msgstr "" " -c, --clean очистить (удалить) объекты БД при " "восстановлении\n" -#: pg_dump.c:1001 +#: pg_dump.c:1011 #, c-format msgid "" " -C, --create include commands to create database in dump\n" @@ -1543,22 +1526,22 @@ msgstr "" " -C, --create добавить в копию команды создания базы " "данных\n" -#: pg_dump.c:1002 pg_dumpall.c:630 +#: pg_dump.c:1012 pg_dumpall.c:629 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=КОДИРОВКА выгружать данные в заданной кодировке\n" -#: pg_dump.c:1003 +#: pg_dump.c:1013 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=ШАБЛОН выгрузить только указанную схему(ы)\n" -#: pg_dump.c:1004 +#: pg_dump.c:1014 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=ШАБЛОН НЕ выгружать указанную схему(ы)\n" -#: pg_dump.c:1005 +#: pg_dump.c:1015 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1567,12 +1550,12 @@ msgstr "" " -O, --no-owner не восстанавливать владение объектами\n" " при использовании текстового формата\n" -#: pg_dump.c:1007 pg_dumpall.c:634 +#: pg_dump.c:1017 pg_dumpall.c:633 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only выгрузить только схему, без данных\n" -#: pg_dump.c:1008 +#: pg_dump.c:1018 #, c-format msgid "" " -S, --superuser=NAME superuser user name to use in plain-text " @@ -1581,27 +1564,27 @@ msgstr "" " -S, --superuser=ИМЯ имя пользователя, который будет задействован\n" " при восстановлении из текстового формата\n" -#: pg_dump.c:1009 +#: pg_dump.c:1019 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=ШАБЛОН выгрузить только указанную таблицу(ы)\n" -#: pg_dump.c:1010 +#: pg_dump.c:1020 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=ШАБЛОН НЕ выгружать указанную таблицу(ы)\n" -#: pg_dump.c:1011 pg_dumpall.c:637 +#: pg_dump.c:1021 pg_dumpall.c:636 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges не выгружать права (назначение/отзыв)\n" -#: pg_dump.c:1012 pg_dumpall.c:638 +#: pg_dump.c:1022 pg_dumpall.c:637 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade только для утилит обновления БД\n" -#: pg_dump.c:1013 pg_dumpall.c:639 +#: pg_dump.c:1023 pg_dumpall.c:638 #, c-format msgid "" " --column-inserts dump data as INSERT commands with column " @@ -1610,7 +1593,7 @@ msgstr "" " --column-inserts выгружать данные в виде INSERT с именами " "столбцов\n" -#: pg_dump.c:1014 pg_dumpall.c:640 +#: pg_dump.c:1024 pg_dumpall.c:639 #, c-format msgid "" " --disable-dollar-quoting disable dollar quoting, use SQL standard " @@ -1619,7 +1602,7 @@ msgstr "" " --disable-dollar-quoting отключить спецстроки с $, выводить строки\n" " по стандарту SQL\n" -#: pg_dump.c:1015 pg_dumpall.c:641 pg_restore.c:497 +#: pg_dump.c:1025 pg_dumpall.c:640 pg_restore.c:493 #, c-format msgid "" " --disable-triggers disable triggers during data-only restore\n" @@ -1627,7 +1610,7 @@ msgstr "" " --disable-triggers отключить триггеры при восстановлении\n" " только данных, без схемы\n" -#: pg_dump.c:1016 +#: pg_dump.c:1026 #, c-format msgid "" " --enable-row-security enable row security (dump only content user " @@ -1638,7 +1621,7 @@ msgstr "" "только\n" " те данные, которые доступны пользователю)\n" -#: pg_dump.c:1018 +#: pg_dump.c:1028 #, c-format msgid "" " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" @@ -1646,7 +1629,7 @@ msgstr "" " --exclude-table-data=ШАБЛОН НЕ выгружать данные указанной таблицы " "(таблиц)\n" -#: pg_dump.c:1019 pg_dumpall.c:643 +#: pg_dump.c:1029 pg_dumpall.c:642 #, c-format msgid "" " --extra-float-digits=NUM override default setting for " @@ -1654,13 +1637,24 @@ msgid "" msgstr "" " --extra-float-digits=ЧИСЛО переопределить значение extra_float_digits\n" -#: pg_dump.c:1020 pg_dumpall.c:644 pg_restore.c:499 +#: pg_dump.c:1030 pg_dumpall.c:643 pg_restore.c:495 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr "" " --if-exists применять IF EXISTS при удалении объектов\n" -#: pg_dump.c:1021 pg_dumpall.c:645 +#: pg_dump.c:1031 +#, c-format +msgid "" +" --include-foreign-data=PATTERN\n" +" include data of foreign tables on foreign\n" +" servers matching PATTERN\n" +msgstr "" +" --include-foreign-data=ШАБЛОН\n" +" включать в копию данные сторонних таблиц с\n" +" серверов с именами, подпадающими под ШАБЛОН\n" + +#: pg_dump.c:1034 pg_dumpall.c:644 #, c-format msgid "" " --inserts dump data as INSERT commands, rather than " @@ -1669,34 +1663,34 @@ msgstr "" " --inserts выгрузить данные в виде команд INSERT, не " "COPY\n" -#: pg_dump.c:1022 pg_dumpall.c:646 +#: pg_dump.c:1035 pg_dumpall.c:645 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr "" " --load-via-partition-root загружать секции через главную таблицу\n" -#: pg_dump.c:1023 pg_dumpall.c:647 +#: pg_dump.c:1036 pg_dumpall.c:646 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments не выгружать комментарии\n" -#: pg_dump.c:1024 pg_dumpall.c:648 +#: pg_dump.c:1037 pg_dumpall.c:647 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications не выгружать публикации\n" -#: pg_dump.c:1025 pg_dumpall.c:650 +#: pg_dump.c:1038 pg_dumpall.c:649 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr "" " --no-security-labels не выгружать назначения меток безопасности\n" -#: pg_dump.c:1026 pg_dumpall.c:651 +#: pg_dump.c:1039 pg_dumpall.c:650 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions не выгружать подписки\n" -#: pg_dump.c:1027 +#: pg_dump.c:1040 #, c-format msgid "" " --no-synchronized-snapshots do not use synchronized snapshots in parallel " @@ -1705,20 +1699,20 @@ msgstr "" " --no-synchronized-snapshots не использовать синхронизированные снимки\n" " в параллельных заданиях\n" -#: pg_dump.c:1028 pg_dumpall.c:653 +#: pg_dump.c:1041 pg_dumpall.c:652 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr "" " --no-tablespaces не выгружать назначения табличных " "пространств\n" -#: pg_dump.c:1029 pg_dumpall.c:654 +#: pg_dump.c:1042 pg_dumpall.c:653 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr "" " --no-unlogged-table-data не выгружать данные нежурналируемых таблиц\n" -#: pg_dump.c:1030 pg_dumpall.c:655 +#: pg_dump.c:1043 pg_dumpall.c:654 #, c-format msgid "" " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT " @@ -1727,7 +1721,7 @@ msgstr "" " --on-conflict-do-nothing добавлять ON CONFLICT DO NOTHING в команды " "INSERT\n" -#: pg_dump.c:1031 pg_dumpall.c:656 +#: pg_dump.c:1044 pg_dumpall.c:655 #, c-format msgid "" " --quote-all-identifiers quote all identifiers, even if not key words\n" @@ -1735,7 +1729,7 @@ msgstr "" " --quote-all-identifiers заключать в кавычки все идентификаторы,\n" " а не только ключевые слова\n" -#: pg_dump.c:1032 pg_dumpall.c:657 +#: pg_dump.c:1045 pg_dumpall.c:656 #, c-format msgid "" " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" @@ -1743,7 +1737,7 @@ msgstr "" " --rows-per-insert=ЧИСЛО число строк в одном INSERT; подразумевает --" "inserts\n" -#: pg_dump.c:1033 +#: pg_dump.c:1046 #, c-format msgid "" " --section=SECTION dump named section (pre-data, data, or post-" @@ -1752,7 +1746,7 @@ msgstr "" " --section=РАЗДЕЛ выгрузить заданный раздел\n" " (pre-data, data или post-data)\n" -#: pg_dump.c:1034 +#: pg_dump.c:1047 #, c-format msgid "" " --serializable-deferrable wait until the dump can run without " @@ -1761,13 +1755,13 @@ msgstr "" " --serializable-deferrable дождаться момента для выгрузки данных без " "аномалий\n" -#: pg_dump.c:1035 +#: pg_dump.c:1048 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr "" " --snapshot=СНИМОК использовать при выгрузке заданный снимок\n" -#: pg_dump.c:1036 pg_restore.c:508 +#: pg_dump.c:1049 pg_restore.c:504 #, c-format msgid "" " --strict-names require table and/or schema include patterns " @@ -1780,7 +1774,7 @@ msgstr "" "минимум\n" " один объект\n" -#: pg_dump.c:1038 pg_dumpall.c:658 pg_restore.c:510 +#: pg_dump.c:1051 pg_dumpall.c:657 pg_restore.c:506 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1792,7 +1786,7 @@ msgstr "" " устанавливать владельца, используя команды\n" " SET SESSION AUTHORIZATION вместо ALTER OWNER\n" -#: pg_dump.c:1042 pg_dumpall.c:662 pg_restore.c:514 +#: pg_dump.c:1055 pg_dumpall.c:661 pg_restore.c:510 #, c-format msgid "" "\n" @@ -1801,33 +1795,33 @@ msgstr "" "\n" "Параметры подключения:\n" -#: pg_dump.c:1043 +#: pg_dump.c:1056 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=БД имя базы данных для выгрузки\n" -#: pg_dump.c:1044 pg_dumpall.c:664 pg_restore.c:515 +#: pg_dump.c:1057 pg_dumpall.c:663 pg_restore.c:511 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n" -#: pg_dump.c:1045 pg_dumpall.c:666 pg_restore.c:516 +#: pg_dump.c:1058 pg_dumpall.c:665 pg_restore.c:512 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=ПОРТ номер порта сервера БД\n" -#: pg_dump.c:1046 pg_dumpall.c:667 pg_restore.c:517 +#: pg_dump.c:1059 pg_dumpall.c:666 pg_restore.c:513 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=ИМЯ имя пользователя баз данных\n" -#: pg_dump.c:1047 pg_dumpall.c:668 pg_restore.c:518 +#: pg_dump.c:1060 pg_dumpall.c:667 pg_restore.c:514 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: pg_dump.c:1048 pg_dumpall.c:669 pg_restore.c:519 +#: pg_dump.c:1061 pg_dumpall.c:668 pg_restore.c:515 #, c-format msgid "" " -W, --password force password prompt (should happen " @@ -1835,12 +1829,12 @@ msgid "" msgstr "" " -W, --password запрашивать пароль всегда (обычно не требуется)\n" -#: pg_dump.c:1049 pg_dumpall.c:670 +#: pg_dump.c:1062 pg_dumpall.c:669 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ИМЯ_РОЛИ выполнить SET ROLE перед выгрузкой\n" -#: pg_dump.c:1051 +#: pg_dump.c:1064 #, c-format msgid "" "\n" @@ -1853,17 +1847,22 @@ msgstr "" "PGDATABASE.\n" "\n" -#: pg_dump.c:1053 pg_dumpall.c:674 pg_restore.c:526 +#: pg_dump.c:1066 pg_dumpall.c:673 pg_restore.c:522 #, c-format -msgid "Report bugs to .\n" -msgstr "Об ошибках сообщайте по адресу .\n" +msgid "Report bugs to <%s>.\n" +msgstr "Об ошибках сообщайте по адресу <%s>.\n" -#: pg_dump.c:1072 pg_dumpall.c:500 +#: pg_dump.c:1067 pg_dumpall.c:674 pg_restore.c:523 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: pg_dump.c:1086 pg_dumpall.c:499 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "указана неверная клиентская кодировка \"%s\"" -#: pg_dump.c:1218 +#: pg_dump.c:1232 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server " @@ -1876,179 +1875,179 @@ msgstr "" "Если они вам не нужны, укажите при запуске ключ\n" "--no-synchronized-snapshots." -#: pg_dump.c:1287 +#: pg_dump.c:1301 #, c-format msgid "invalid output format \"%s\" specified" msgstr "указан неверный формат вывода: \"%s\"" -#: pg_dump.c:1325 +#: pg_dump.c:1339 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "схемы, соответствующие шаблону \"%s\", не найдены" -#: pg_dump.c:1390 +#: pg_dump.c:1386 +#, c-format +msgid "no matching foreign servers were found for pattern \"%s\"" +msgstr "сторонние серверы, соответствующие шаблону \"%s\", не найдены" + +#: pg_dump.c:1449 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "таблицы, соответствующие шаблону \"%s\", не найдены" -#: pg_dump.c:1804 +#: pg_dump.c:1862 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "выгрузка содержимого таблицы \"%s.%s\"" -#: pg_dump.c:1905 +#: pg_dump.c:1969 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Ошибка выгрузки таблицы \"%s\": сбой в PQgetCopyData()." -#: pg_dump.c:1906 pg_dump.c:1916 +#: pg_dump.c:1970 pg_dump.c:1980 #, c-format msgid "Error message from server: %s" msgstr "Сообщение об ошибке с сервера: %s" -#: pg_dump.c:1907 pg_dump.c:1917 +#: pg_dump.c:1971 pg_dump.c:1981 #, c-format msgid "The command was: %s" msgstr "Выполнялась команда: %s" -#: pg_dump.c:1915 +#: pg_dump.c:1979 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Ошибка выгрузки таблицы \"%s\": сбой в PQgetResult()." -#: pg_dump.c:2666 +#: pg_dump.c:2739 #, c-format msgid "saving database definition" msgstr "сохранение определения базы данных" -#: pg_dump.c:3130 +#: pg_dump.c:3211 #, c-format msgid "saving encoding = %s" msgstr "сохранение кодировки (%s)" -#: pg_dump.c:3155 +#: pg_dump.c:3236 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "сохранение standard_conforming_strings (%s)" -#: pg_dump.c:3194 +#: pg_dump.c:3275 #, c-format msgid "could not parse result of current_schemas()" msgstr "не удалось разобрать результат current_schemas()" -#: pg_dump.c:3213 +#: pg_dump.c:3294 #, c-format msgid "saving search_path = %s" msgstr "сохранение search_path (%s)" -#: pg_dump.c:3253 +#: pg_dump.c:3334 #, c-format msgid "reading large objects" msgstr "чтение больших объектов" -#: pg_dump.c:3435 +#: pg_dump.c:3516 #, c-format msgid "saving large objects" msgstr "сохранение больших объектов" -#: pg_dump.c:3481 +#: pg_dump.c:3562 #, c-format msgid "error reading large object %u: %s" msgstr "ошибка чтения большого объекта %u: %s" -#: pg_dump.c:3533 +#: pg_dump.c:3614 #, c-format msgid "reading row security enabled for table \"%s.%s\"" msgstr "чтение информации о защите строк для таблицы \"%s.%s\"" -#: pg_dump.c:3564 +#: pg_dump.c:3645 #, c-format msgid "reading policies for table \"%s.%s\"" msgstr "чтение политик таблицы \"%s.%s\"" -#: pg_dump.c:3714 +#: pg_dump.c:3797 #, c-format msgid "unexpected policy command type: %c" msgstr "нераспознанный тип команды в политике: %c" -#: pg_dump.c:3841 +#: pg_dump.c:3951 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "у публикации \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:3978 -#, c-format -msgid "reading publication membership for table \"%s.%s\"" -msgstr "чтение информации об участии в репликации таблицы \"%s.%s\"" - -#: pg_dump.c:4121 +#: pg_dump.c:4241 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "" "подписки не выгружены, так как текущий пользователь не суперпользователь" -#: pg_dump.c:4175 +#: pg_dump.c:4295 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "у подписки \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:4219 +#: pg_dump.c:4339 #, c-format msgid "could not parse subpublications array" msgstr "не удалось разобрать массив subpublications" -#: pg_dump.c:4491 +#: pg_dump.c:4661 #, c-format msgid "could not find parent extension for %s %s" msgstr "не удалось найти родительское расширение для %s %s" # TO REVIEW -#: pg_dump.c:4623 +#: pg_dump.c:4793 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "у схемы \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:4646 +#: pg_dump.c:4816 #, c-format msgid "schema with OID %u does not exist" msgstr "схема с OID %u не существует" -#: pg_dump.c:4971 +#: pg_dump.c:5141 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "у типа данных \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:5056 +#: pg_dump.c:5226 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "у оператора \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:5358 +#: pg_dump.c:5528 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "у класса операторов \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:5442 +#: pg_dump.c:5612 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "у семейства операторов \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:5611 +#: pg_dump.c:5781 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "у агрегатной функции \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:5871 +#: pg_dump.c:6041 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "у функции \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:6675 +#: pg_dump.c:6869 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "у таблицы \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:6717 pg_dump.c:17103 +#: pg_dump.c:6911 pg_dump.c:17426 #, c-format msgid "" "failed sanity check, parent table with OID %u of sequence with OID %u not " @@ -2057,17 +2056,17 @@ msgstr "" "нарушение целостности: по OID %u не удалось найти родительскую таблицу " "последовательности с OID %u" -#: pg_dump.c:6861 +#: pg_dump.c:7053 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "чтение индексов таблицы \"%s.%s\"" -#: pg_dump.c:7264 +#: pg_dump.c:7468 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "чтение ограничений внешних ключей таблицы \"%s.%s\"" -#: pg_dump.c:7519 +#: pg_dump.c:7749 #, c-format msgid "" "failed sanity check, parent table with OID %u of pg_rewrite entry with OID " @@ -2076,12 +2075,12 @@ msgstr "" "нарушение целостности: по OID %u не удалось найти родительскую таблицу для " "записи pg_rewrite с OID %u" -#: pg_dump.c:7602 +#: pg_dump.c:7832 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "чтение триггеров таблицы \"%s.%s\"" -#: pg_dump.c:7735 +#: pg_dump.c:7965 #, c-format msgid "" "query produced null referenced table name for foreign key trigger \"%s\" on " @@ -2090,32 +2089,32 @@ msgstr "" "запрос вернул NULL вместо имени целевой таблицы для триггера внешнего ключа " "\"%s\" в таблице \"%s\" (OID таблицы: %u)" -#: pg_dump.c:8290 +#: pg_dump.c:8520 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "поиск столбцов и типов таблицы \"%s.%s\"" -#: pg_dump.c:8426 +#: pg_dump.c:8656 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "неверная нумерация столбцов в таблице \"%s\"" -#: pg_dump.c:8463 +#: pg_dump.c:8693 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "поиск выражений по умолчанию для таблицы \"%s.%s\"" -#: pg_dump.c:8485 +#: pg_dump.c:8715 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "неверное значение adnum (%d) в таблице \"%s\"" -#: pg_dump.c:8550 +#: pg_dump.c:8807 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "поиск ограничений-проверок для таблицы \"%s.%s\"" -#: pg_dump.c:8599 +#: pg_dump.c:8856 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" @@ -2126,69 +2125,69 @@ msgstr[1] "" msgstr[2] "" "ожидалось %d ограничений-проверок для таблицы \"%s\", но найдено: %d" -#: pg_dump.c:8603 +#: pg_dump.c:8860 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Возможно, повреждены системные каталоги.)" -#: pg_dump.c:10184 +#: pg_dump.c:10446 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "у типа данных \"%s\" по-видимому неправильный тип типа" -#: pg_dump.c:11538 +#: pg_dump.c:11800 #, c-format msgid "bogus value in proargmodes array" msgstr "неприемлемое значение в массиве proargmodes" -#: pg_dump.c:11910 +#: pg_dump.c:12172 #, c-format msgid "could not parse proallargtypes array" msgstr "не удалось разобрать массив proallargtypes" -#: pg_dump.c:11926 +#: pg_dump.c:12188 #, c-format msgid "could not parse proargmodes array" msgstr "не удалось разобрать массив proargmodes" -#: pg_dump.c:11940 +#: pg_dump.c:12202 #, c-format msgid "could not parse proargnames array" msgstr "не удалось разобрать массив proargnames" -#: pg_dump.c:11951 +#: pg_dump.c:12213 #, c-format msgid "could not parse proconfig array" msgstr "не удалось разобрать массив proconfig" # TO REVEIW -#: pg_dump.c:12031 +#: pg_dump.c:12293 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "недопустимое значение provolatile для функции \"%s\"" # TO REVEIW -#: pg_dump.c:12081 pg_dump.c:14133 +#: pg_dump.c:12343 pg_dump.c:14401 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "недопустимое значение proparallel для функции \"%s\"" -#: pg_dump.c:12214 pg_dump.c:12323 pg_dump.c:12330 +#: pg_dump.c:12482 pg_dump.c:12591 pg_dump.c:12598 #, c-format msgid "could not find function definition for function with OID %u" msgstr "не удалось найти определение функции для функции с OID %u" -#: pg_dump.c:12253 +#: pg_dump.c:12521 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "неприемлемое значение в поле pg_cast.castfunc или pg_cast.castmethod" -#: pg_dump.c:12256 +#: pg_dump.c:12524 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "неприемлемое значение в поле pg_cast.castmethod" -#: pg_dump.c:12349 +#: pg_dump.c:12617 #, c-format msgid "" "bogus transform definition, at least one of trffromsql and trftosql should " @@ -2197,32 +2196,32 @@ msgstr "" "неприемлемое определение преобразования (trffromsql или trftosql должно быть " "ненулевым)" -#: pg_dump.c:12366 +#: pg_dump.c:12634 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "неприемлемое значение в поле pg_transform.trffromsql" -#: pg_dump.c:12387 +#: pg_dump.c:12655 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "неприемлемое значение в поле pg_transform.trftosql" -#: pg_dump.c:12703 +#: pg_dump.c:12971 #, c-format msgid "could not find operator with OID %s" msgstr "оператор с OID %s не найден" -#: pg_dump.c:12771 +#: pg_dump.c:13039 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "неверный тип \"%c\" метода доступа \"%s\"" -#: pg_dump.c:13525 +#: pg_dump.c:13793 #, c-format msgid "unrecognized collation provider: %s" msgstr "нераспознанный поставщик правил сортировки: %s" -#: pg_dump.c:13997 +#: pg_dump.c:14265 #, c-format msgid "" "aggregate function %s could not be dumped correctly for this database " @@ -2231,27 +2230,27 @@ msgstr "" "агрегатная функция %s не может быть правильно выгружена для этой версии базы " "данных; функция проигнорирована" -#: pg_dump.c:14052 +#: pg_dump.c:14320 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "нераспознанное значение aggfinalmodify для агрегата \"%s\"" -#: pg_dump.c:14108 +#: pg_dump.c:14376 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "нераспознанное значение aggmfinalmodify для агрегата \"%s\"" -#: pg_dump.c:14830 +#: pg_dump.c:15098 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "нераспознанный тип объекта в определении прав по умолчанию: %d" -#: pg_dump.c:14848 +#: pg_dump.c:15116 #, c-format msgid "could not parse default ACL list (%s)" msgstr "не удалось разобрать список прав по умолчанию (%s)" -#: pg_dump.c:14928 +#: pg_dump.c:15201 #, c-format msgid "" "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) " @@ -2260,7 +2259,7 @@ msgstr "" "не удалось разобрать изначальный список GRANT ACL (%s) или изначальный " "список REVOKE ACL (%s) для объекта \"%s\" (%s)" -#: pg_dump.c:14936 +#: pg_dump.c:15209 #, c-format msgid "" "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s" @@ -2269,13 +2268,13 @@ msgstr "" "не удалось разобрать список GRANT ACL (%s) или список REVOKE ACL (%s) для " "объекта \"%s\" (%s)" -#: pg_dump.c:15435 +#: pg_dump.c:15724 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "" "запрос на получение определения представления \"%s\" не возвратил данные" -#: pg_dump.c:15438 +#: pg_dump.c:15727 #, c-format msgid "" "query to obtain definition of view \"%s\" returned more than one definition" @@ -2283,37 +2282,37 @@ msgstr "" "запрос на получение определения представления \"%s\" возвратил несколько " "определений" -#: pg_dump.c:15445 +#: pg_dump.c:15734 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "определение представления \"%s\" пустое (длина равна нулю)" -#: pg_dump.c:15527 +#: pg_dump.c:15818 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "свойство WITH OIDS больше не поддерживается (таблица \"%s\")" -#: pg_dump.c:15997 +#: pg_dump.c:16298 #, c-format msgid "invalid number of parents %d for table \"%s\"" msgstr "неверное число родителей (%d) для таблицы \"%s\"" -#: pg_dump.c:16334 +#: pg_dump.c:16621 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "неверный номер столбца %d для таблицы \"%s\"" -#: pg_dump.c:16596 +#: pg_dump.c:16914 #, c-format msgid "missing index for constraint \"%s\"" msgstr "отсутствует индекс для ограничения \"%s\"" -#: pg_dump.c:16816 +#: pg_dump.c:17139 #, c-format msgid "unrecognized constraint type: %c" msgstr "нераспознанный тип ограничения: %c" -#: pg_dump.c:16948 pg_dump.c:17168 +#: pg_dump.c:17271 pg_dump.c:17491 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "" @@ -2328,22 +2327,22 @@ msgstr[2] "" "запрос на получение данных последовательности \"%s\" вернул %d строк " "(ожидалась 1)" -#: pg_dump.c:16982 +#: pg_dump.c:17305 #, c-format msgid "unrecognized sequence type: %s" msgstr "нераспознанный тип последовательности: %s" -#: pg_dump.c:17264 +#: pg_dump.c:17589 #, c-format msgid "unexpected tgtype value: %d" msgstr "неожиданное значение tgtype: %d" -#: pg_dump.c:17338 +#: pg_dump.c:17663 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "неверная строка аргументов (%s) для триггера \"%s\" таблицы \"%s\"" -#: pg_dump.c:17567 +#: pg_dump.c:17899 #, c-format msgid "" "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows " @@ -2352,47 +2351,47 @@ msgstr "" "запрос на получение правила \"%s\" для таблицы \"%s\" возвратил неверное " "число строк" -#: pg_dump.c:17729 +#: pg_dump.c:18061 #, c-format msgid "could not find referenced extension %u" msgstr "не удалось найти упомянутое расширение %u" -#: pg_dump.c:17941 +#: pg_dump.c:18273 #, c-format msgid "reading dependency data" msgstr "чтение информации о зависимостях" -#: pg_dump.c:18034 +#: pg_dump.c:18366 #, c-format msgid "no referencing object %u %u" msgstr "нет подчинённого объекта %u %u" -#: pg_dump.c:18045 +#: pg_dump.c:18377 #, c-format msgid "no referenced object %u %u" msgstr "нет вышестоящего объекта %u %u" -#: pg_dump.c:18413 +#: pg_dump.c:18750 #, c-format msgid "could not parse reloptions array" msgstr "не удалось разобрать массив reloptions" -#: pg_dump_sort.c:351 +#: pg_dump_sort.c:360 #, c-format msgid "invalid dumpId %d" msgstr "неверный dumpId %d" -#: pg_dump_sort.c:357 +#: pg_dump_sort.c:366 #, c-format msgid "invalid dependency %d" msgstr "неверная зависимость %d" -#: pg_dump_sort.c:590 +#: pg_dump_sort.c:599 #, c-format msgid "could not identify dependency loop" msgstr "не удалось определить цикл зависимостей" -#: pg_dump_sort.c:1161 +#: pg_dump_sort.c:1170 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" @@ -2400,12 +2399,12 @@ msgstr[0] "в следующей таблице зациклены ограни msgstr[1] "в следующих таблицах зациклены ограничения внешних ключей:" msgstr[2] "в следующих таблицах зациклены ограничения внешних ключей:" -#: pg_dump_sort.c:1165 pg_dump_sort.c:1185 +#: pg_dump_sort.c:1174 pg_dump_sort.c:1194 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1166 +#: pg_dump_sort.c:1175 #, c-format msgid "" "You might not be able to restore the dump without using --disable-triggers " @@ -2414,7 +2413,7 @@ msgstr "" "Возможно, для восстановления базы потребуется использовать --disable-" "triggers или временно удалить ограничения." -#: pg_dump_sort.c:1167 +#: pg_dump_sort.c:1176 #, c-format msgid "" "Consider using a full dump instead of a --data-only dump to avoid this " @@ -2423,34 +2422,34 @@ msgstr "" "Во избежание этой проблемы, вероятно, стоит выгружать всю базу данных, а не " "только данные (--data-only)." -#: pg_dump_sort.c:1179 +#: pg_dump_sort.c:1188 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "не удалось разрешить цикл зависимостей для следующих объектов:" -#: pg_dumpall.c:200 +#: pg_dumpall.c:199 #, c-format msgid "" -"The program \"pg_dump\" is needed by %s but was not found in the\n" +"The program \"%s\" is needed by %s but was not found in the\n" "same directory as \"%s\".\n" "Check your installation." msgstr "" -"Для %s необходима программа \"pg_dump\", но она не найдена\n" +"Программа \"%s\" нужна для %s, но она не найдена\n" "в каталоге \"%s\".\n" "Проверьте правильность установки СУБД." -#: pg_dumpall.c:205 +#: pg_dumpall.c:204 #, c-format msgid "" -"The program \"pg_dump\" was found by \"%s\"\n" +"The program \"%s\" was found by \"%s\"\n" "but was not the same version as %s.\n" "Check your installation." msgstr "" -"Программа \"pg_dump\" найдена в \"%s\",\n" +"Программа \"%s\" найдена программой \"%s\",\n" "но её версия отличается от версии %s.\n" "Проверьте правильность установки СУБД." -#: pg_dumpall.c:357 +#: pg_dumpall.c:356 #, c-format msgid "" "option --exclude-database cannot be used together with -g/--globals-only, -" @@ -2459,30 +2458,30 @@ msgstr "" "параметр --exclude-database несовместим с -g/--globals-only, -r/--roles-only " "и -t/--tablespaces-only" -#: pg_dumpall.c:366 +#: pg_dumpall.c:365 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "параметры -g/--globals-only и -r/--roles-only исключают друг друга" -#: pg_dumpall.c:374 +#: pg_dumpall.c:373 #, c-format msgid "" "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "" "параметры -g/--globals-only и -t/--tablespaces-only исключают друг друга" -#: pg_dumpall.c:388 +#: pg_dumpall.c:387 #, c-format msgid "" "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "параметры -r/--roles-only и -t/--tablespaces-only исключают друг друга" -#: pg_dumpall.c:449 pg_dumpall.c:1754 +#: pg_dumpall.c:448 pg_dumpall.c:1754 #, c-format msgid "could not connect to database \"%s\"" msgstr "не удалось подключиться к базе данных: \"%s\"" -#: pg_dumpall.c:463 +#: pg_dumpall.c:462 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" @@ -2491,7 +2490,7 @@ msgstr "" "не удалось подключиться к базе данных \"postgres\" или \"template1\"\n" "Укажите другую базу данных." -#: pg_dumpall.c:617 +#: pg_dumpall.c:616 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2500,17 +2499,17 @@ msgstr "" "%s экспортирует всё содержимое кластера баз данных PostgreSQL в SQL-скрипт.\n" "\n" -#: pg_dumpall.c:619 +#: pg_dumpall.c:618 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [ПАРАМЕТР]...\n" -#: pg_dumpall.c:622 +#: pg_dumpall.c:621 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=ИМЯ_ФАЙЛА имя выходного файла\n" -#: pg_dumpall.c:629 +#: pg_dumpall.c:628 #, c-format msgid "" " -c, --clean clean (drop) databases before recreating\n" @@ -2518,18 +2517,18 @@ msgstr "" " -c, --clean очистить (удалить) базы данных перед\n" " восстановлением\n" -#: pg_dumpall.c:631 +#: pg_dumpall.c:630 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr "" " -g, --globals-only выгрузить только глобальные объекты, без баз\n" -#: pg_dumpall.c:632 pg_restore.c:489 +#: pg_dumpall.c:631 pg_restore.c:485 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner не восстанавливать владение объектами\n" -#: pg_dumpall.c:633 +#: pg_dumpall.c:632 #, c-format msgid "" " -r, --roles-only dump only roles, no databases or tablespaces\n" @@ -2537,13 +2536,13 @@ msgstr "" " -r, --roles-only выгрузить только роли, без баз данных\n" " и табличных пространств\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:634 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr "" " -S, --superuser=ИМЯ имя пользователя для выполнения выгрузки\n" -#: pg_dumpall.c:636 +#: pg_dumpall.c:635 #, c-format msgid "" " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" @@ -2551,7 +2550,7 @@ msgstr "" " -t, --tablespaces-only выгружать только табличные пространства,\n" " без баз данных и ролей\n" -#: pg_dumpall.c:642 +#: pg_dumpall.c:641 #, c-format msgid "" " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" @@ -2559,22 +2558,22 @@ msgstr "" " --exclude-database=ШАБЛОН исключить базы с именами, подпадающими под " "шаблон\n" -#: pg_dumpall.c:649 +#: pg_dumpall.c:648 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords не выгружать пароли ролей\n" -#: pg_dumpall.c:663 +#: pg_dumpall.c:662 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=СТРОКА подключиться с данной строкой подключения\n" -#: pg_dumpall.c:665 +#: pg_dumpall.c:664 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=ИМЯ_БД выбор другой базы данных по умолчанию\n" -#: pg_dumpall.c:672 +#: pg_dumpall.c:671 #, c-format msgid "" "\n" @@ -2646,44 +2645,44 @@ msgid "executing %s" msgstr "выполняется %s" # TO REVEIW -#: pg_restore.c:312 +#: pg_restore.c:308 #, c-format msgid "one of -d/--dbname and -f/--file must be specified" msgstr "необходимо указать -d/--dbname или -f/--file" # TO REVEIW -#: pg_restore.c:321 +#: pg_restore.c:317 #, c-format msgid "options -d/--dbname and -f/--file cannot be used together" msgstr "параметры -d/--dbname и -f/--file исключают друг друга" -#: pg_restore.c:347 +#: pg_restore.c:343 #, c-format msgid "options -C/--create and -1/--single-transaction cannot be used together" msgstr "параметры -C/--create и -1/--single-transaction исключают друг друга" -#: pg_restore.c:361 +#: pg_restore.c:357 #, c-format msgid "maximum number of parallel jobs is %d" msgstr "максимальное число параллельных заданий равно %d" -#: pg_restore.c:370 +#: pg_restore.c:366 #, c-format msgid "cannot specify both --single-transaction and multiple jobs" msgstr "параметр --single-transaction допускается только с одним заданием" -#: pg_restore.c:412 +#: pg_restore.c:408 #, c-format msgid "" "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" msgstr "нераспознанный формат архива \"%s\"; укажите \"c\", \"d\" или \"t\"" -#: pg_restore.c:452 +#: pg_restore.c:448 #, c-format msgid "errors ignored on restore: %d" msgstr "при восстановлении проигнорировано ошибок: %d" -#: pg_restore.c:465 +#: pg_restore.c:461 #, c-format msgid "" "%s restores a PostgreSQL database from an archive created by pg_dump.\n" @@ -2693,49 +2692,49 @@ msgstr "" "pg_dump.\n" "\n" -#: pg_restore.c:467 +#: pg_restore.c:463 #, c-format msgid " %s [OPTION]... [FILE]\n" msgstr " %s [ПАРАМЕТР]... [ФАЙЛ]\n" -#: pg_restore.c:470 +#: pg_restore.c:466 #, c-format msgid " -d, --dbname=NAME connect to database name\n" msgstr " -d, --dbname=БД подключиться к указанной базе данных\n" -#: pg_restore.c:471 +#: pg_restore.c:467 #, c-format msgid " -f, --file=FILENAME output file name (- for stdout)\n" msgstr "" " -f, --file=ИМЯ_ФАЙЛА имя выходного файла (или - для вывода в stdout)\n" -#: pg_restore.c:472 +#: pg_restore.c:468 #, c-format msgid " -F, --format=c|d|t backup file format (should be automatic)\n" msgstr "" " -F, --format=c|d|t формат файла (должен определяться автоматически)\n" -#: pg_restore.c:473 +#: pg_restore.c:469 #, c-format msgid " -l, --list print summarized TOC of the archive\n" msgstr " -l, --list вывести краткое оглавление архива\n" -#: pg_restore.c:474 +#: pg_restore.c:470 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose выводить подробные сообщения\n" -#: pg_restore.c:475 +#: pg_restore.c:471 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_restore.c:476 +#: pg_restore.c:472 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_restore.c:478 +#: pg_restore.c:474 #, c-format msgid "" "\n" @@ -2744,35 +2743,35 @@ msgstr "" "\n" "Параметры, управляющие восстановлением:\n" -#: pg_restore.c:479 +#: pg_restore.c:475 #, c-format msgid " -a, --data-only restore only the data, no schema\n" msgstr " -a, --data-only восстановить только данные, без схемы\n" -#: pg_restore.c:481 +#: pg_restore.c:477 #, c-format msgid " -C, --create create the target database\n" msgstr " -C, --create создать целевую базу данных\n" -#: pg_restore.c:482 +#: pg_restore.c:478 #, c-format msgid " -e, --exit-on-error exit on error, default is to continue\n" msgstr "" " -e, --exit-on-error выйти при ошибке (по умолчанию - продолжать)\n" -#: pg_restore.c:483 +#: pg_restore.c:479 #, c-format msgid " -I, --index=NAME restore named index\n" msgstr " -I, --index=ИМЯ восстановить указанный индекс\n" -#: pg_restore.c:484 +#: pg_restore.c:480 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" msgstr "" " -j, --jobs=ЧИСЛО распараллелить восстановление на указанное " "число заданий\n" -#: pg_restore.c:485 +#: pg_restore.c:481 #, c-format msgid "" " -L, --use-list=FILENAME use table of contents from this file for\n" @@ -2781,13 +2780,13 @@ msgstr "" " -L, --use-list=ИМЯ_ФАЙЛА использовать оглавление из этого файла для\n" " чтения/упорядочивания данных\n" -#: pg_restore.c:487 +#: pg_restore.c:483 #, c-format msgid " -n, --schema=NAME restore only objects in this schema\n" msgstr "" " -n, --schema=ИМЯ восстановить объекты только в этой схеме\n" -#: pg_restore.c:488 +#: pg_restore.c:484 #, c-format msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" msgstr "" @@ -2795,17 +2794,17 @@ msgstr "" # skip-rule: no-space-before-parentheses # well-spelled: арг -#: pg_restore.c:490 +#: pg_restore.c:486 #, c-format msgid " -P, --function=NAME(args) restore named function\n" msgstr " -P, --function=ИМЯ(арг-ты) восстановить заданную функцию\n" -#: pg_restore.c:491 +#: pg_restore.c:487 #, c-format msgid " -s, --schema-only restore only the schema, no data\n" msgstr " -s, --schema-only восстановить только схему, без данных\n" -#: pg_restore.c:492 +#: pg_restore.c:488 #, c-format msgid "" " -S, --superuser=NAME superuser user name to use for disabling " @@ -2814,7 +2813,7 @@ msgstr "" " -S, --superuser=ИМЯ имя суперпользователя для отключения " "триггеров\n" -#: pg_restore.c:493 +#: pg_restore.c:489 #, c-format msgid "" " -t, --table=NAME restore named relation (table, view, etc.)\n" @@ -2822,12 +2821,12 @@ msgstr "" " -t, --table=ИМЯ восстановить заданное отношение (таблицу, " "представление и т. п.)\n" -#: pg_restore.c:494 +#: pg_restore.c:490 #, c-format msgid " -T, --trigger=NAME restore named trigger\n" msgstr " -T, --trigger=ИМЯ восстановить заданный триггер\n" -#: pg_restore.c:495 +#: pg_restore.c:491 #, c-format msgid "" " -x, --no-privileges skip restoration of access privileges (grant/" @@ -2836,23 +2835,23 @@ msgstr "" " -x, --no-privileges не восстанавливать права доступа\n" " (назначение/отзыв)\n" -#: pg_restore.c:496 +#: pg_restore.c:492 #, c-format msgid " -1, --single-transaction restore as a single transaction\n" msgstr "" " -1, --single-transaction выполнить восстановление в одной транзакции\n" -#: pg_restore.c:498 +#: pg_restore.c:494 #, c-format msgid " --enable-row-security enable row security\n" msgstr " --enable-row-security включить защиту на уровне строк\n" -#: pg_restore.c:500 +#: pg_restore.c:496 #, c-format msgid " --no-comments do not restore comments\n" msgstr " --no-comments не восстанавливать комментарии\n" -#: pg_restore.c:501 +#: pg_restore.c:497 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not " @@ -2862,29 +2861,29 @@ msgstr "" " --no-data-for-failed-tables не восстанавливать данные таблиц, которые\n" " не удалось создать\n" -#: pg_restore.c:503 +#: pg_restore.c:499 #, c-format msgid " --no-publications do not restore publications\n" msgstr " --no-publications не восстанавливать публикации\n" -#: pg_restore.c:504 +#: pg_restore.c:500 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels не восстанавливать метки безопасности\n" -#: pg_restore.c:505 +#: pg_restore.c:501 #, c-format msgid " --no-subscriptions do not restore subscriptions\n" msgstr " --no-subscriptions не восстанавливать подписки\n" -#: pg_restore.c:506 +#: pg_restore.c:502 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr "" " --no-tablespaces не восстанавливать назначения табл. " "пространств\n" -#: pg_restore.c:507 +#: pg_restore.c:503 #, c-format msgid "" " --section=SECTION restore named section (pre-data, data, or " @@ -2893,12 +2892,12 @@ msgstr "" " --section=РАЗДЕЛ восстановить заданный раздел\n" " (pre-data, data или post-data)\n" -#: pg_restore.c:520 +#: pg_restore.c:516 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=ИМЯ_РОЛИ выполнить SET ROLE перед восстановлением\n" -#: pg_restore.c:522 +#: pg_restore.c:518 #, c-format msgid "" "\n" @@ -2911,7 +2910,7 @@ msgstr "" "указывать\n" "несколько раз для выбора нескольких объектов.\n" -#: pg_restore.c:525 +#: pg_restore.c:521 #, c-format msgid "" "\n" @@ -2923,6 +2922,39 @@ msgstr "" "ввода.\n" "\n" +#~ msgid "reading publication membership for table \"%s.%s\"" +#~ msgstr "чтение информации об участии в репликации таблицы \"%s.%s\"" + +#~ msgid "connecting to database \"%s\" as user \"%s\"" +#~ msgstr "подключение к базе \"%s\" с именем пользователя \"%s\"" + +#~ msgid "could not reconnect to database" +#~ msgstr "не удалось переподключиться к базе" + +#~ msgid "could not reconnect to database: %s" +#~ msgstr "не удалось переподключиться к базе: %s" + +#~ msgid "connection needs password" +#~ msgstr "для подключения необходим пароль" + +#~ msgid "" +#~ "could not find block ID %d in archive -- possibly due to out-of-order " +#~ "restore request, which cannot be handled due to lack of data offsets in " +#~ "archive" +#~ msgstr "" +#~ "не удалось найти в архиве блок с ID %d -- возможно, по причине не " +#~ "последовательного запроса восстановления, который нельзя обработать из-за " +#~ "отсутствия смещений данных в архиве" + +#~ msgid "ftell mismatch with expected position -- ftell used" +#~ msgstr "позиция ftell не соответствует ожидаемой -- используется ftell" + +#~ msgid "internal error -- neither th nor fh specified in tarReadRaw()" +#~ msgstr "внутренняя ошибка -- в tarReadRaw() не указан ни th, ни fh" + +#~ msgid "Report bugs to .\n" +#~ msgstr "Об ошибках сообщайте по адресу .\n" + #~ msgid "child process was terminated by signal %s" #~ msgstr "дочерний процесс завершён по сигналу %s" diff --git a/src/bin/pg_dump/po/sv.po b/src/bin/pg_dump/po/sv.po index 1dbf30b97a087..45090f6a78815 100644 --- a/src/bin/pg_dump/po/sv.po +++ b/src/bin/pg_dump/po/sv.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-09 08:47+0000\n" -"PO-Revision-Date: 2020-05-09 13:54+0200\n" +"POT-Creation-Date: 2020-10-20 16:46+0000\n" +"PO-Revision-Date: 2020-10-20 20:32+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -362,38 +362,38 @@ msgstr "kunde inte stänga komprimeringsbiblioteket: %s" msgid "could not read from input file: %s" msgstr "kunde inte läsa från infilen: %s" -#: compress_io.c:623 pg_backup_custom.c:575 pg_backup_directory.c:534 +#: compress_io.c:623 pg_backup_custom.c:646 pg_backup_directory.c:552 #: pg_backup_tar.c:793 pg_backup_tar.c:816 #, c-format msgid "could not read from input file: end of file" msgstr "kunde inte läsa från infilen: slut på filen" -#: parallel.c:267 +#: parallel.c:254 #, c-format msgid "WSAStartup failed: %d" msgstr "WSAStartup misslyckades: %d" -#: parallel.c:978 +#: parallel.c:964 #, c-format msgid "could not create communication channels: %m" msgstr "kunde inte skapa kommunikationskanaler: %m" -#: parallel.c:1035 +#: parallel.c:1021 #, c-format msgid "could not create worker process: %m" msgstr "kunde inte skapa arbetsprocess: %m" -#: parallel.c:1165 +#: parallel.c:1151 #, c-format msgid "unrecognized command received from master: \"%s\"" msgstr "okänt kommando mottaget från master: \"%s\"" -#: parallel.c:1208 parallel.c:1446 +#: parallel.c:1194 parallel.c:1432 #, c-format msgid "invalid message received from worker: \"%s\"" msgstr "ogiltigt meddelande mottaget från arbetare: \"%s\"" -#: parallel.c:1340 +#: parallel.c:1326 #, c-format msgid "" "could not obtain lock on relation \"%s\"\n" @@ -403,681 +403,661 @@ msgstr "" "Dette beror oftast på att någon tagit ett ACCESS EXCLUSIVE-lås på tabellen\n" "efter att pg_dumps föräldraprocess tagit ett ACCESS SHARE-lås på tabellen." -#: parallel.c:1429 +#: parallel.c:1415 #, c-format msgid "a worker process died unexpectedly" msgstr "en arbetsprocess dog oväntat" -#: parallel.c:1551 parallel.c:1669 +#: parallel.c:1537 parallel.c:1655 #, c-format msgid "could not write to the communication channel: %m" msgstr "kunde inte skriva till kommunikationskanal: %m" -#: parallel.c:1628 +#: parallel.c:1614 #, c-format msgid "select() failed: %m" msgstr "select() misslyckades: %m" -#: parallel.c:1753 +#: parallel.c:1739 #, c-format msgid "pgpipe: could not create socket: error code %d" msgstr "pgpipe: kunde inte skapa uttag (socket): felkod %d" -#: parallel.c:1764 +#: parallel.c:1750 #, c-format msgid "pgpipe: could not bind: error code %d" msgstr "pgpipe: kunde inte göra \"bind\": felkod %d" -#: parallel.c:1771 +#: parallel.c:1757 #, c-format msgid "pgpipe: could not listen: error code %d" msgstr "pgpipe: kunde inte göra \"listen\": felkod %d" -#: parallel.c:1778 +#: parallel.c:1764 #, c-format msgid "pgpipe: getsockname() failed: error code %d" msgstr "pgpipe: getsockname() misslyckades: felkod %d" -#: parallel.c:1789 +#: parallel.c:1775 #, c-format msgid "pgpipe: could not create second socket: error code %d" msgstr "pgpipe: kunde inte skapa ett andra uttag (socket): felkod %d" -#: parallel.c:1798 +#: parallel.c:1784 #, c-format msgid "pgpipe: could not connect socket: error code %d" msgstr "pgpipe: kunde itne ansluta till uttag (socket): felkod %d" -#: parallel.c:1807 +#: parallel.c:1793 #, c-format msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: kunde inte acceptera anslutning: felkod %d" -#: pg_backup_archiver.c:271 pg_backup_archiver.c:1591 +#: pg_backup_archiver.c:277 pg_backup_archiver.c:1587 #, c-format msgid "could not close output file: %m" msgstr "kunde inte stänga utdatafilen: %m" -#: pg_backup_archiver.c:315 pg_backup_archiver.c:319 +#: pg_backup_archiver.c:321 pg_backup_archiver.c:325 #, c-format msgid "archive items not in correct section order" msgstr "arkivobjekten är inte i korrekt sektionsordning" -#: pg_backup_archiver.c:325 +#: pg_backup_archiver.c:331 #, c-format msgid "unexpected section code %d" msgstr "oväntad sektionskod %d" -#: pg_backup_archiver.c:362 +#: pg_backup_archiver.c:368 #, c-format msgid "parallel restore is not supported with this archive file format" msgstr "parallell återställning stöds inte med detta arkivformat" -#: pg_backup_archiver.c:366 +#: pg_backup_archiver.c:372 #, c-format msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump" msgstr "parallell återställning stöds inte med arkiv som skapats av en pre-8.0 pg_dump" -#: pg_backup_archiver.c:384 +#: pg_backup_archiver.c:390 #, c-format msgid "cannot restore from compressed archive (compression not supported in this installation)" msgstr "kan inte återställa från komprimerat arkiv (inte konfigurerad med stöd för komprimering)" -#: pg_backup_archiver.c:401 +#: pg_backup_archiver.c:407 #, c-format msgid "connecting to database for restore" msgstr "kopplar upp mot databas för återställning" -#: pg_backup_archiver.c:403 +#: pg_backup_archiver.c:409 #, c-format msgid "direct database connections are not supported in pre-1.3 archives" msgstr "direkta databasuppkopplingar stöds inte i arkiv från före version 1.3" -#: pg_backup_archiver.c:448 +#: pg_backup_archiver.c:452 #, c-format msgid "implied data-only restore" msgstr "implicerad återställning av enbart data" -#: pg_backup_archiver.c:514 +#: pg_backup_archiver.c:518 #, c-format msgid "dropping %s %s" msgstr "tar bort %s %s" -#: pg_backup_archiver.c:609 +#: pg_backup_archiver.c:613 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "kunde inte hitta var IF EXISTS skulle stoppas in i sats \"%s\"" -#: pg_backup_archiver.c:765 pg_backup_archiver.c:767 +#: pg_backup_archiver.c:769 pg_backup_archiver.c:771 #, c-format msgid "warning from original dump file: %s" msgstr "varning från orginaldumpfilen: %s" -#: pg_backup_archiver.c:782 +#: pg_backup_archiver.c:786 #, c-format msgid "creating %s \"%s.%s\"" msgstr "skapar %s \"%s.%s\"" -#: pg_backup_archiver.c:785 +#: pg_backup_archiver.c:789 #, c-format msgid "creating %s \"%s\"" msgstr "skapar %s \"%s\"" -#: pg_backup_archiver.c:842 +#: pg_backup_archiver.c:839 #, c-format msgid "connecting to new database \"%s\"" msgstr "kopplar upp mot ny databas \"%s\"" -#: pg_backup_archiver.c:870 +#: pg_backup_archiver.c:866 #, c-format msgid "processing %s" msgstr "processar %s" -#: pg_backup_archiver.c:890 +#: pg_backup_archiver.c:886 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "processar data för tabell \"%s.%s\"" -#: pg_backup_archiver.c:952 +#: pg_backup_archiver.c:948 #, c-format msgid "executing %s %s" msgstr "kör %s %s" -#: pg_backup_archiver.c:991 +#: pg_backup_archiver.c:987 #, c-format msgid "disabling triggers for %s" msgstr "stänger av utlösare för %s" -#: pg_backup_archiver.c:1017 +#: pg_backup_archiver.c:1013 #, c-format msgid "enabling triggers for %s" msgstr "slår på utlösare för %s" -#: pg_backup_archiver.c:1045 +#: pg_backup_archiver.c:1041 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" msgstr "internt fel -- WriteData kan inte anropas utanför kontexten av en DataDumper-rutin" -#: pg_backup_archiver.c:1228 +#: pg_backup_archiver.c:1224 #, c-format msgid "large-object output not supported in chosen format" msgstr "utmatning av stora objekt stöds inte i det valda formatet" -#: pg_backup_archiver.c:1286 +#: pg_backup_archiver.c:1282 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" msgstr[0] "återställde %d stor objekt" msgstr[1] "återställde %d stora objekt" -#: pg_backup_archiver.c:1307 pg_backup_tar.c:736 +#: pg_backup_archiver.c:1303 pg_backup_tar.c:736 #, c-format msgid "restoring large object with OID %u" msgstr "återställer stort objekt med OID %u" -#: pg_backup_archiver.c:1319 +#: pg_backup_archiver.c:1315 #, c-format msgid "could not create large object %u: %s" msgstr "kunde inte skapa stort objekt %u: %s" -#: pg_backup_archiver.c:1324 pg_dump.c:3549 +#: pg_backup_archiver.c:1320 pg_dump.c:3552 #, c-format msgid "could not open large object %u: %s" msgstr "kunde inte öppna stort objekt %u: %s" -#: pg_backup_archiver.c:1381 +#: pg_backup_archiver.c:1377 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "kunde inte öppna TOC-filen \"%s\": %m" -#: pg_backup_archiver.c:1421 +#: pg_backup_archiver.c:1417 #, c-format msgid "line ignored: %s" msgstr "rad ignorerad: %s" -#: pg_backup_archiver.c:1428 +#: pg_backup_archiver.c:1424 #, c-format msgid "could not find entry for ID %d" msgstr "kunde inte hitta en post för ID %d" -#: pg_backup_archiver.c:1449 pg_backup_directory.c:222 -#: pg_backup_directory.c:580 +#: pg_backup_archiver.c:1445 pg_backup_directory.c:222 +#: pg_backup_directory.c:598 #, c-format msgid "could not close TOC file: %m" msgstr "kunde inte stänga TOC-filen: %m" -#: pg_backup_archiver.c:1563 pg_backup_custom.c:158 pg_backup_directory.c:332 -#: pg_backup_directory.c:567 pg_backup_directory.c:630 -#: pg_backup_directory.c:649 pg_dumpall.c:484 +#: pg_backup_archiver.c:1559 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_directory.c:585 pg_backup_directory.c:648 +#: pg_backup_directory.c:667 pg_dumpall.c:484 #, c-format msgid "could not open output file \"%s\": %m" msgstr "kunde inte öppna utdatafilen \"%s\": %m" -#: pg_backup_archiver.c:1565 pg_backup_custom.c:164 +#: pg_backup_archiver.c:1561 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "kunde inte öppna utdatafilen: %m" -#: pg_backup_archiver.c:1658 +#: pg_backup_archiver.c:1654 #, c-format msgid "wrote %lu byte of large object data (result = %lu)" msgid_plural "wrote %lu bytes of large object data (result = %lu)" msgstr[0] "skrev %lu byte av stort objekt-data (resultat = %lu)" msgstr[1] "skrev %lu bytes av stort objekt-data (resultat = %lu)" -#: pg_backup_archiver.c:1663 +#: pg_backup_archiver.c:1659 #, c-format msgid "could not write to large object (result: %lu, expected: %lu)" msgstr "kunde inte skriva till stort objekt (resultat: %lu, förväntat: %lu)" -#: pg_backup_archiver.c:1753 +#: pg_backup_archiver.c:1749 #, c-format msgid "while INITIALIZING:" msgstr "vid INITIERING:" -#: pg_backup_archiver.c:1758 +#: pg_backup_archiver.c:1754 #, c-format msgid "while PROCESSING TOC:" msgstr "vid HANTERING AV TOC:" -#: pg_backup_archiver.c:1763 +#: pg_backup_archiver.c:1759 #, c-format msgid "while FINALIZING:" msgstr "vid SLUTFÖRANDE:" -#: pg_backup_archiver.c:1768 +#: pg_backup_archiver.c:1764 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "från TOC-post %d; %u %u %s %s %s" -#: pg_backup_archiver.c:1844 +#: pg_backup_archiver.c:1840 #, c-format msgid "bad dumpId" msgstr "felaktigt dumpId" -#: pg_backup_archiver.c:1865 +#: pg_backup_archiver.c:1861 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "felaktig tabell-dumpId för TABLE DATA-objekt" -#: pg_backup_archiver.c:1957 +#: pg_backup_archiver.c:1953 #, c-format msgid "unexpected data offset flag %d" msgstr "oväntad data-offset-flagga %d" -#: pg_backup_archiver.c:1970 +#: pg_backup_archiver.c:1966 #, c-format msgid "file offset in dump file is too large" msgstr "fil-offset i dumpfilen är för stort" -#: pg_backup_archiver.c:2107 pg_backup_archiver.c:2117 +#: pg_backup_archiver.c:2103 pg_backup_archiver.c:2113 #, c-format msgid "directory name too long: \"%s\"" msgstr "katalognamn för långt: \"%s\"" -#: pg_backup_archiver.c:2125 +#: pg_backup_archiver.c:2121 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" msgstr "katalogen \"%s\" verkar inte vara ett giltigt arkiv (\"toc.dat\" finns inte)" -#: pg_backup_archiver.c:2133 pg_backup_custom.c:175 pg_backup_custom.c:753 -#: pg_backup_directory.c:207 pg_backup_directory.c:388 +#: pg_backup_archiver.c:2129 pg_backup_custom.c:173 pg_backup_custom.c:812 +#: pg_backup_directory.c:207 pg_backup_directory.c:394 #, c-format msgid "could not open input file \"%s\": %m" msgstr "kunde inte öppna indatafilen \"%s\": %m" -#: pg_backup_archiver.c:2140 pg_backup_custom.c:181 +#: pg_backup_archiver.c:2136 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "kan inte öppna infil: %m" -#: pg_backup_archiver.c:2146 +#: pg_backup_archiver.c:2142 #, c-format msgid "could not read input file: %m" msgstr "kan inte läsa infilen: %m" -#: pg_backup_archiver.c:2148 +#: pg_backup_archiver.c:2144 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "indatafilen är för kort (läste %lu, förväntade 5)" -#: pg_backup_archiver.c:2233 +#: pg_backup_archiver.c:2229 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "indatafilen verkar vara en dump i textformat. Använd psql." -#: pg_backup_archiver.c:2239 +#: pg_backup_archiver.c:2235 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "indatafilen verkar inte vara ett korrekt arkiv (för kort?)" -#: pg_backup_archiver.c:2245 +#: pg_backup_archiver.c:2241 #, c-format msgid "input file does not appear to be a valid archive" msgstr "indatafilen verkar inte vara ett korrekt arkiv" -#: pg_backup_archiver.c:2265 +#: pg_backup_archiver.c:2261 #, c-format msgid "could not close input file: %m" msgstr "kunde inte stänga indatafilen: %m" -#: pg_backup_archiver.c:2379 +#: pg_backup_archiver.c:2373 #, c-format msgid "unrecognized file format \"%d\"" msgstr "känner inte igen filformat \"%d\"" -#: pg_backup_archiver.c:2461 pg_backup_archiver.c:4473 +#: pg_backup_archiver.c:2455 pg_backup_archiver.c:4458 #, c-format msgid "finished item %d %s %s" msgstr "klar med objekt %d %s %s" -#: pg_backup_archiver.c:2465 pg_backup_archiver.c:4486 +#: pg_backup_archiver.c:2459 pg_backup_archiver.c:4471 #, c-format msgid "worker process failed: exit code %d" msgstr "arbetsprocess misslyckades: felkod %d" -#: pg_backup_archiver.c:2585 +#: pg_backup_archiver.c:2579 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "post-ID %d utanför sitt intervall -- kanske en trasig TOC" -#: pg_backup_archiver.c:2652 +#: pg_backup_archiver.c:2646 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "återeställa tabeller med WITH OIDS stöds inte längre" -#: pg_backup_archiver.c:2734 +#: pg_backup_archiver.c:2728 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "okänd teckenkodning \"%s\"" -#: pg_backup_archiver.c:2739 +#: pg_backup_archiver.c:2733 #, c-format msgid "invalid ENCODING item: %s" msgstr "ogiltigt ENCODING-val: %s" -#: pg_backup_archiver.c:2757 +#: pg_backup_archiver.c:2751 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "ogiltigt STDSTRINGS-val: %s" -#: pg_backup_archiver.c:2782 +#: pg_backup_archiver.c:2776 #, c-format msgid "schema \"%s\" not found" msgstr "schema \"%s\" hittades inte" -#: pg_backup_archiver.c:2789 +#: pg_backup_archiver.c:2783 #, c-format msgid "table \"%s\" not found" msgstr "tabell \"%s\" hittades inte" -#: pg_backup_archiver.c:2796 +#: pg_backup_archiver.c:2790 #, c-format msgid "index \"%s\" not found" msgstr "index \"%s\" hittades inte" -#: pg_backup_archiver.c:2803 +#: pg_backup_archiver.c:2797 #, c-format msgid "function \"%s\" not found" msgstr "funktion \"%s\" hittades inte" -#: pg_backup_archiver.c:2810 +#: pg_backup_archiver.c:2804 #, c-format msgid "trigger \"%s\" not found" msgstr "utlösare \"%s\" hittades inte" -#: pg_backup_archiver.c:3202 +#: pg_backup_archiver.c:3196 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "kunde inte sätta sessionsanvändare till \"%s\": %s" -#: pg_backup_archiver.c:3341 +#: pg_backup_archiver.c:3328 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "kunde inte sätta search_path till \"%s\": %s" -#: pg_backup_archiver.c:3403 +#: pg_backup_archiver.c:3390 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "kunde inte sätta default_tablespace till %s: %s" -#: pg_backup_archiver.c:3448 +#: pg_backup_archiver.c:3435 #, c-format msgid "could not set default_table_access_method: %s" msgstr "kunde inte sätta default_table_access_method: %s" -#: pg_backup_archiver.c:3540 pg_backup_archiver.c:3698 +#: pg_backup_archiver.c:3527 pg_backup_archiver.c:3685 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "vet inte hur man sätter ägare för objekttyp \"%s\"" -#: pg_backup_archiver.c:3802 +#: pg_backup_archiver.c:3789 #, c-format msgid "did not find magic string in file header" msgstr "kunde inte hitta den magiska strängen i filhuvudet" -#: pg_backup_archiver.c:3815 +#: pg_backup_archiver.c:3802 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "ej supportad version (%d.%d) i filhuvudet" -#: pg_backup_archiver.c:3820 +#: pg_backup_archiver.c:3807 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "riktighetskontroll på heltalsstorlek (%lu) misslyckades" -#: pg_backup_archiver.c:3824 +#: pg_backup_archiver.c:3811 #, c-format msgid "archive was made on a machine with larger integers, some operations might fail" msgstr "arkivet skapades på en maskin med större heltal, en del operationer kan misslyckas" -#: pg_backup_archiver.c:3834 +#: pg_backup_archiver.c:3821 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "förväntat format (%d) skiljer sig från formatet som fanns i filen (%d)" -#: pg_backup_archiver.c:3850 +#: pg_backup_archiver.c:3837 #, c-format msgid "archive is compressed, but this installation does not support compression -- no data will be available" msgstr "arkivet är komprimerat, men denna installation stödjer inte komprimering -- ingen data kommer kunna läsas" -#: pg_backup_archiver.c:3868 +#: pg_backup_archiver.c:3855 #, c-format msgid "invalid creation date in header" msgstr "ogiltig skapandedatum i huvud" -#: pg_backup_archiver.c:3996 +#: pg_backup_archiver.c:3983 #, c-format msgid "processing item %d %s %s" msgstr "processar objekt %d %s %s" -#: pg_backup_archiver.c:4075 +#: pg_backup_archiver.c:4062 #, c-format msgid "entering main parallel loop" msgstr "går in i parallella huvudloopen" -#: pg_backup_archiver.c:4086 +#: pg_backup_archiver.c:4073 #, c-format msgid "skipping item %d %s %s" msgstr "hoppar över objekt %d %s %s" -#: pg_backup_archiver.c:4095 +#: pg_backup_archiver.c:4082 #, c-format msgid "launching item %d %s %s" msgstr "startar objekt %d %s %s" -#: pg_backup_archiver.c:4149 +#: pg_backup_archiver.c:4136 #, c-format msgid "finished main parallel loop" msgstr "klar med parallella huvudloopen" -#: pg_backup_archiver.c:4187 +#: pg_backup_archiver.c:4172 #, c-format msgid "processing missed item %d %s %s" msgstr "processar saknat objekt %d %s %s" -#: pg_backup_archiver.c:4792 +#: pg_backup_archiver.c:4777 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "tabell \"%s\" kunde inte skapas, dess data kommer ej återställas" -#: pg_backup_custom.c:374 pg_backup_null.c:147 +#: pg_backup_custom.c:378 pg_backup_null.c:147 #, c-format msgid "invalid OID for large object" msgstr "ogiltig OID för stort objekt" -#: pg_backup_custom.c:444 -#, c-format -msgid "unrecognized data block type (%d) while searching archive" -msgstr "känner inte igen datablocktyp (%d) vid genomsökning av arkiv" - -#: pg_backup_custom.c:455 pg_backup_custom.c:811 +#: pg_backup_custom.c:441 pg_backup_custom.c:507 pg_backup_custom.c:632 +#: pg_backup_custom.c:870 pg_backup_tar.c:1086 pg_backup_tar.c:1091 #, c-format msgid "error during file seek: %m" msgstr "fel vid sökning: %m" -#: pg_backup_custom.c:464 +#: pg_backup_custom.c:480 +#, c-format +msgid "data block %d has wrong seek position" +msgstr "datablock %d har fel sökposition" + +#: pg_backup_custom.c:497 #, c-format -msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive" -msgstr "kunde inte hitta block ID %d i arkiv -- kanske på grund av en återställningbegäran i oordning vilket inte kan hanteras då det saknas dataoffsets i arkivet" +msgid "unrecognized data block type (%d) while searching archive" +msgstr "känner inte igen datablocktyp (%d) vid genomsökning av arkiv" -#: pg_backup_custom.c:469 +#: pg_backup_custom.c:519 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to non-seekable input file" msgstr "kunde inte hitta block ID %d i arkiv -- kanske på grund av en återställningbegäran i oordning vilket inte kan hanteras då inputfilen inte är sökbar" -#: pg_backup_custom.c:474 +#: pg_backup_custom.c:524 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive" msgstr "kunde inte hitta block ID %d i arkiv -- möjligen ett trasigt arkiv" -#: pg_backup_custom.c:481 +#: pg_backup_custom.c:531 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d" msgstr "hittade oväntat block-ID (%d) vid läsning av data -- förväntade %d" -#: pg_backup_custom.c:495 +#: pg_backup_custom.c:545 #, c-format msgid "unrecognized data block type %d while restoring archive" msgstr "ej igenkänd datablockstyp %d vid återställande av arkiv" -#: pg_backup_custom.c:577 +#: pg_backup_custom.c:648 #, c-format msgid "could not read from input file: %m" msgstr "kunde inte läsa från infilen: %m" -#: pg_backup_custom.c:691 pg_backup_custom.c:744 pg_backup_custom.c:884 -#: pg_backup_tar.c:1088 +#: pg_backup_custom.c:751 pg_backup_custom.c:803 pg_backup_custom.c:948 +#: pg_backup_tar.c:1089 #, c-format msgid "could not determine seek position in archive file: %m" msgstr "kunde inte bestämma sökposition i arkivfil: %m" -#: pg_backup_custom.c:708 pg_backup_custom.c:748 +#: pg_backup_custom.c:767 pg_backup_custom.c:807 #, c-format msgid "could not close archive file: %m" msgstr "kan inte stänga arkivfilen: %m" -#: pg_backup_custom.c:731 +#: pg_backup_custom.c:790 #, c-format msgid "can only reopen input archives" msgstr "kan inte återöppna indataarkiven" -#: pg_backup_custom.c:738 +#: pg_backup_custom.c:797 #, c-format msgid "parallel restore from standard input is not supported" msgstr "parallell återställning från standard in stöds inte" -#: pg_backup_custom.c:740 +#: pg_backup_custom.c:799 #, c-format msgid "parallel restore from non-seekable file is not supported" msgstr "parallell återställning för en icke sökbar fil stöds inte" -#: pg_backup_custom.c:756 +#: pg_backup_custom.c:815 #, c-format msgid "could not set seek position in archive file: %m" msgstr "kunde inte söka till rätt position i arkivfilen: %m" -#: pg_backup_custom.c:832 +#: pg_backup_custom.c:894 #, c-format msgid "compressor active" msgstr "komprimerare aktiv" -#: pg_backup_custom.c:887 -#, c-format -msgid "ftell mismatch with expected position -- ftell used" -msgstr "ftell stämmer inte med förväntad position -- ftell använd" - -#: pg_backup_db.c:42 +#: pg_backup_db.c:41 #, c-format msgid "could not get server_version from libpq" msgstr "kunde inte hämta serverversionen från libpq" -#: pg_backup_db.c:53 pg_dumpall.c:1826 +#: pg_backup_db.c:52 pg_dumpall.c:1826 #, c-format msgid "server version: %s; %s version: %s" msgstr "server version: %s; %s version: %s" -#: pg_backup_db.c:55 pg_dumpall.c:1828 +#: pg_backup_db.c:54 pg_dumpall.c:1828 #, c-format msgid "aborting because of server version mismatch" msgstr "avbryter då serverversionerna i matchar" -#: pg_backup_db.c:138 +#: pg_backup_db.c:124 #, c-format -msgid "connecting to database \"%s\" as user \"%s\"" -msgstr "kopplar upp mot databas \"%s\" som användare \"%s\"" +msgid "already connected to a database" +msgstr "är redan uppkopplad mot en databas" -#: pg_backup_db.c:145 pg_backup_db.c:194 pg_backup_db.c:255 pg_backup_db.c:296 -#: pg_dumpall.c:1651 pg_dumpall.c:1764 +#: pg_backup_db.c:133 pg_backup_db.c:185 pg_dumpall.c:1651 pg_dumpall.c:1764 msgid "Password: " msgstr "Lösenord: " #: pg_backup_db.c:177 #, c-format -msgid "could not reconnect to database" -msgstr "kunde inte återuppkoppla mot databasen" - -#: pg_backup_db.c:182 -#, c-format -msgid "could not reconnect to database: %s" -msgstr "kunde inte återuppkoppla mot databasen: %s" - -#: pg_backup_db.c:198 -#, c-format -msgid "connection needs password" -msgstr "anslutningen kräver lösenord" - -#: pg_backup_db.c:249 -#, c-format -msgid "already connected to a database" -msgstr "är redan uppkopplad mot en databas" - -#: pg_backup_db.c:288 -#, c-format msgid "could not connect to database" msgstr "kunde inte ansluta till databasen" -#: pg_backup_db.c:304 +#: pg_backup_db.c:195 +#, c-format +msgid "reconnection to database \"%s\" failed: %s" +msgstr "återuppkoppling mot databas \"%s\" misslyckades: %s" + +#: pg_backup_db.c:199 #, c-format msgid "connection to database \"%s\" failed: %s" msgstr "uppkoppling mot databas \"%s\" misslyckades: %s" -#: pg_backup_db.c:376 pg_dumpall.c:1684 +#: pg_backup_db.c:272 pg_dumpall.c:1684 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:383 pg_dumpall.c:1889 pg_dumpall.c:1912 +#: pg_backup_db.c:279 pg_dumpall.c:1889 pg_dumpall.c:1912 #, c-format msgid "query failed: %s" msgstr "fråga misslyckades: %s" -#: pg_backup_db.c:385 pg_dumpall.c:1890 pg_dumpall.c:1913 +#: pg_backup_db.c:281 pg_dumpall.c:1890 pg_dumpall.c:1913 #, c-format msgid "query was: %s" msgstr "frågan var: %s" -#: pg_backup_db.c:426 +#: pg_backup_db.c:322 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" msgstr[0] "fråga gav %d rad istället för en: %s" msgstr[1] "fråga gav %d rader istället för en: %s" -#: pg_backup_db.c:462 +#: pg_backup_db.c:358 #, c-format msgid "%s: %sCommand was: %s" msgstr "%s: %sKommandot var: %s" -#: pg_backup_db.c:518 pg_backup_db.c:592 pg_backup_db.c:599 +#: pg_backup_db.c:414 pg_backup_db.c:488 pg_backup_db.c:495 msgid "could not execute query" msgstr "kunde inte utföra fråga" -#: pg_backup_db.c:571 +#: pg_backup_db.c:467 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "fel returnerat av PQputCopyData: %s" -#: pg_backup_db.c:620 +#: pg_backup_db.c:516 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "fel returnerat av PQputCopyEnd: %s" -#: pg_backup_db.c:626 +#: pg_backup_db.c:522 #, c-format msgid "COPY failed for table \"%s\": %s" msgstr "COPY misslyckades för tabell \"%s\": %s" -#: pg_backup_db.c:632 pg_dump.c:1991 +#: pg_backup_db.c:528 pg_dump.c:1988 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "oväntade extraresultat under kopiering (COPY) av tabell \"%s\"" -#: pg_backup_db.c:644 +#: pg_backup_db.c:540 msgid "could not start database transaction" msgstr "kunde inte starta databastransaktionen" -#: pg_backup_db.c:652 +#: pg_backup_db.c:548 msgid "could not commit database transaction" msgstr "kunde inte genomföra databastransaktionen" @@ -1101,43 +1081,43 @@ msgstr "kunde inte stänga katalog \"%s\": %m" msgid "could not create directory \"%s\": %m" msgstr "kunde inte skapa katalog \"%s\": %m" -#: pg_backup_directory.c:350 pg_backup_directory.c:485 -#: pg_backup_directory.c:515 +#: pg_backup_directory.c:355 pg_backup_directory.c:496 +#: pg_backup_directory.c:532 #, c-format msgid "could not write to output file: %s" msgstr "kunde inte skriva till utdatafil: %s" -#: pg_backup_directory.c:400 +#: pg_backup_directory.c:406 #, c-format msgid "could not close data file \"%s\": %m" msgstr "kan inte stänga datafil \"%s\": %m" -#: pg_backup_directory.c:440 +#: pg_backup_directory.c:446 #, c-format msgid "could not open large object TOC file \"%s\" for input: %m" msgstr "kunde inte öppna stora objekts TOC-fil \"%s\" för läsning: %m" -#: pg_backup_directory.c:451 +#: pg_backup_directory.c:457 #, c-format msgid "invalid line in large object TOC file \"%s\": \"%s\"" msgstr "ogiltig rad i stora objekts TOC-fil \"%s\": \"%s\"" -#: pg_backup_directory.c:460 +#: pg_backup_directory.c:466 #, c-format msgid "error reading large object TOC file \"%s\"" msgstr "fel vid lösning av stora objekts TOC-fil \"%s\"" -#: pg_backup_directory.c:464 +#: pg_backup_directory.c:470 #, c-format msgid "could not close large object TOC file \"%s\": %m" msgstr "kunde inte stänga stora objekts TOC-fil \"%s\": %m" -#: pg_backup_directory.c:671 +#: pg_backup_directory.c:689 #, c-format msgid "could not write to blobs TOC file" msgstr "kunde inte skriva till blobbars TOC-fil" -#: pg_backup_directory.c:703 +#: pg_backup_directory.c:721 #, c-format msgid "file name too long: \"%s\"" msgstr "filnamnet är för långt: \"%s\"" @@ -1202,34 +1182,34 @@ msgstr "oväntad COPY-satssyntax: \"%s\"" msgid "invalid OID for large object (%u)" msgstr "ogiltig OID för stort objekt (%u)" -#: pg_backup_tar.c:1103 +#: pg_backup_tar.c:1105 #, c-format msgid "could not close temporary file: %m" msgstr "kunde inte stänga temporär fil: %m" -#: pg_backup_tar.c:1112 +#: pg_backup_tar.c:1114 #, c-format msgid "actual file length (%s) does not match expected (%s)" msgstr "verklig fillängd (%s) matchar inte det förväntade (%s)" -#: pg_backup_tar.c:1169 pg_backup_tar.c:1199 +#: pg_backup_tar.c:1171 pg_backup_tar.c:1201 #, c-format msgid "could not find header for file \"%s\" in tar archive" msgstr "kunde inte hitta filhuvud för fil \"%s\" i tar-arkiv" -#: pg_backup_tar.c:1187 +#: pg_backup_tar.c:1189 #, c-format msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file." msgstr "dumpa data i oordning stöds inte av detta arkivformat: \"%s\" krävs, men kommer före \"%s\" i denna arkivfil." -#: pg_backup_tar.c:1232 +#: pg_backup_tar.c:1234 #, c-format msgid "incomplete tar header found (%lu byte)" msgid_plural "incomplete tar header found (%lu bytes)" msgstr[0] "inkomplett tar-huvud hittat (%lu byte)" msgstr[1] "inkomplett tar-huvud hittat (%lu bytes)" -#: pg_backup_tar.c:1283 +#: pg_backup_tar.c:1285 #, c-format msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s" msgstr "trasigt tar-huvud hittat i %s (förväntade %d, beräknad %d) filposition %s" @@ -1239,7 +1219,7 @@ msgstr "trasigt tar-huvud hittat i %s (förväntade %d, beräknad %d) filpositio msgid "unrecognized section name: \"%s\"" msgstr "okänt sektionsnamn: \"%s\"" -#: pg_backup_utils.c:55 pg_dump.c:615 pg_dump.c:632 pg_dumpall.c:338 +#: pg_backup_utils.c:55 pg_dump.c:607 pg_dump.c:624 pg_dumpall.c:338 #: pg_dumpall.c:348 pg_dumpall.c:357 pg_dumpall.c:366 pg_dumpall.c:374 #: pg_dumpall.c:388 pg_dumpall.c:464 pg_restore.c:284 pg_restore.c:300 #: pg_restore.c:318 @@ -1252,72 +1232,72 @@ msgstr "Försök med \"%s --help\" för mer information.\n" msgid "out of on_exit_nicely slots" msgstr "slut på on_exit_nicely-slottar" -#: pg_dump.c:541 +#: pg_dump.c:533 #, c-format msgid "compression level must be in range 0..9" msgstr "komprimeringsnivå måste vara i intervallet 0..9" -#: pg_dump.c:579 +#: pg_dump.c:571 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digits måste vara i intervallet -15..3" -#: pg_dump.c:602 +#: pg_dump.c:594 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "rows-per-insert måste vara i intervallet %d..%d" -#: pg_dump.c:630 pg_dumpall.c:346 pg_restore.c:298 +#: pg_dump.c:622 pg_dumpall.c:346 pg_restore.c:298 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "för många kommandoradsargument (första är \"%s\")" -#: pg_dump.c:651 pg_restore.c:327 +#: pg_dump.c:643 pg_restore.c:327 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "flaggorna \"bara schema\" (-s) och \"bara data\" (-a) kan inte användas tillsammans" -#: pg_dump.c:656 +#: pg_dump.c:648 #, c-format msgid "options -s/--schema-only and --include-foreign-data cannot be used together" msgstr "flaggorna -s/--schema-only och --include-foreign-data kan inte användas tillsammans" -#: pg_dump.c:659 +#: pg_dump.c:651 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" msgstr "flaggan --include-foreign-data stöds inte med parallell backup" -#: pg_dump.c:663 pg_restore.c:333 +#: pg_dump.c:655 pg_restore.c:333 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "flaggorna \"nollställ\" (-c) och \"bara data\" (-a) kan inte användas tillsammans" -#: pg_dump.c:668 pg_dumpall.c:381 pg_restore.c:382 +#: pg_dump.c:660 pg_dumpall.c:381 pg_restore.c:382 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "flaggan --if-exists kräver flaggan -c/--clean" -#: pg_dump.c:675 +#: pg_dump.c:667 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "flagga --on-conflict-do-nothing kräver --inserts, --rows-per-insert eller --column-inserts" -#: pg_dump.c:697 +#: pg_dump.c:689 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "efterfrågad komprimering finns inte i denna installation -- arkivet kommer sparas okomprimerat" -#: pg_dump.c:718 pg_restore.c:349 +#: pg_dump.c:710 pg_restore.c:349 #, c-format msgid "invalid number of parallel jobs" msgstr "felaktigt antal parallella job" -#: pg_dump.c:722 +#: pg_dump.c:714 #, c-format msgid "parallel backup only supported by the directory format" msgstr "parallell backup stöds bara med katalogformat" -#: pg_dump.c:777 +#: pg_dump.c:769 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1328,27 +1308,27 @@ msgstr "" "Kör med --no-synchronized-snapshots istället om du inte kräver\n" "synkroniserade snapshots." -#: pg_dump.c:783 +#: pg_dump.c:775 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Exporterade snapshots stöds inte i denna serverversion." -#: pg_dump.c:795 +#: pg_dump.c:787 #, c-format msgid "last built-in OID is %u" msgstr "sista inbyggda OID är %u" -#: pg_dump.c:804 +#: pg_dump.c:796 #, c-format msgid "no matching schemas were found" msgstr "hittade inga matchande scheman" -#: pg_dump.c:818 +#: pg_dump.c:810 #, c-format msgid "no matching tables were found" msgstr "hittade inga matchande tabeller" -#: pg_dump.c:993 +#: pg_dump.c:990 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1357,17 +1337,17 @@ msgstr "" "%s dumpar en databas som en textfil eller i andra format.\n" "\n" -#: pg_dump.c:994 pg_dumpall.c:617 pg_restore.c:462 +#: pg_dump.c:991 pg_dumpall.c:617 pg_restore.c:462 #, c-format msgid "Usage:\n" msgstr "Användning:\n" -#: pg_dump.c:995 +#: pg_dump.c:992 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [FLAGGA]... [DBNAMN]\n" -#: pg_dump.c:997 pg_dumpall.c:620 pg_restore.c:465 +#: pg_dump.c:994 pg_dumpall.c:620 pg_restore.c:465 #, c-format msgid "" "\n" @@ -1376,12 +1356,12 @@ msgstr "" "\n" "Allmänna flaggor:\n" -#: pg_dump.c:998 +#: pg_dump.c:995 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=FILENAME fil eller katalognamn för utdata\n" -#: pg_dump.c:999 +#: pg_dump.c:996 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1390,42 +1370,42 @@ msgstr "" " -F, --format=c|d|t|p utdatans filformat (egen (c), katalog (d), tar (t),\n" " ren text (p) (standard))\n" -#: pg_dump.c:1001 +#: pg_dump.c:998 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM använd så här många parellella job för att dumpa\n" -#: pg_dump.c:1002 pg_dumpall.c:622 +#: pg_dump.c:999 pg_dumpall.c:622 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose visa mer information\n" -#: pg_dump.c:1003 pg_dumpall.c:623 +#: pg_dump.c:1000 pg_dumpall.c:623 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version visa versionsinformation, avsluta sedan\n" -#: pg_dump.c:1004 +#: pg_dump.c:1001 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 komprimeringsnivå för komprimerade format\n" -#: pg_dump.c:1005 pg_dumpall.c:624 +#: pg_dump.c:1002 pg_dumpall.c:624 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr " --lock-wait-timeout=TIMEOUT misslyckas efter att ha väntat i TIMEOUT på tabellås\n" -#: pg_dump.c:1006 pg_dumpall.c:651 +#: pg_dump.c:1003 pg_dumpall.c:651 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync vänta inte på att ändingar säkert skrivits till disk\n" -#: pg_dump.c:1007 pg_dumpall.c:625 +#: pg_dump.c:1004 pg_dumpall.c:625 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help visa denna hjälp, avsluta sedan\n" -#: pg_dump.c:1009 pg_dumpall.c:626 +#: pg_dump.c:1006 pg_dumpall.c:626 #, c-format msgid "" "\n" @@ -1434,47 +1414,47 @@ msgstr "" "\n" "Flaggor som styr utmatning:\n" -#: pg_dump.c:1010 pg_dumpall.c:627 +#: pg_dump.c:1007 pg_dumpall.c:627 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only dumpa bara data, inte schema\n" -#: pg_dump.c:1011 +#: pg_dump.c:1008 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs inkludera stora objekt i dumpen\n" -#: pg_dump.c:1012 +#: pg_dump.c:1009 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs exkludera stora objekt i dumpen\n" -#: pg_dump.c:1013 pg_restore.c:476 +#: pg_dump.c:1010 pg_restore.c:476 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" -msgstr " -c, --clean nollställ (drop) databaser innan återskapande\n" +msgstr " -c, --clean nollställ (drop) databasobjekt innan återskapande\n" -#: pg_dump.c:1014 +#: pg_dump.c:1011 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr " -C, --create inkludera kommandon för att skapa databasen i dumpen\n" -#: pg_dump.c:1015 pg_dumpall.c:629 +#: pg_dump.c:1012 pg_dumpall.c:629 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=KODNING dumpa data i teckenkodning KODNING\n" -#: pg_dump.c:1016 +#: pg_dump.c:1013 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=MALL dumpa bara de angivna scheman\n" -#: pg_dump.c:1017 +#: pg_dump.c:1014 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=MALL dumpa INTE de angivna scheman\n" -#: pg_dump.c:1018 +#: pg_dump.c:1015 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1483,52 +1463,52 @@ msgstr "" " -O, --no-owner hoppa över återställande av objektägare i\n" " textformatdumpar\n" -#: pg_dump.c:1020 pg_dumpall.c:633 +#: pg_dump.c:1017 pg_dumpall.c:633 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only dumpa bara scheman, inte data\n" -#: pg_dump.c:1021 +#: pg_dump.c:1018 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr " -S, --superuser=NAME superanvändarens namn för textformatdumpar\n" -#: pg_dump.c:1022 +#: pg_dump.c:1019 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=MALL dumpa bara de angivna tabellerna\n" -#: pg_dump.c:1023 +#: pg_dump.c:1020 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=MALL dumpa INTE de angivna tabellerna\n" -#: pg_dump.c:1024 pg_dumpall.c:636 +#: pg_dump.c:1021 pg_dumpall.c:636 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges dumpa inte rättigheter (grant/revoke)\n" -#: pg_dump.c:1025 pg_dumpall.c:637 +#: pg_dump.c:1022 pg_dumpall.c:637 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade används bara av uppgraderingsverktyg\n" -#: pg_dump.c:1026 pg_dumpall.c:638 +#: pg_dump.c:1023 pg_dumpall.c:638 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr " --column-inserts dumpa data som INSERT med kolumnnamn\n" -#: pg_dump.c:1027 pg_dumpall.c:639 +#: pg_dump.c:1024 pg_dumpall.c:639 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr " --disable-dollar-quoting slå av dollar-citering, använd standard SQL-citering\n" -#: pg_dump.c:1028 pg_dumpall.c:640 pg_restore.c:493 +#: pg_dump.c:1025 pg_dumpall.c:640 pg_restore.c:493 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr " --disable-triggers slå av utlösare vid återställning av enbart data\n" -#: pg_dump.c:1029 +#: pg_dump.c:1026 #, c-format msgid "" " --enable-row-security enable row security (dump only content user has\n" @@ -1537,22 +1517,22 @@ msgstr "" " --enable-row-security slå på radsäkerhet (dumpa bara data användaren\n" " har rätt till)\n" -#: pg_dump.c:1031 +#: pg_dump.c:1028 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=MALL dumpa INTE data för de angivna tabellerna\n" -#: pg_dump.c:1032 pg_dumpall.c:642 +#: pg_dump.c:1029 pg_dumpall.c:642 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=NUM övertrumfa standardinställningen för extra_float_digits\n" -#: pg_dump.c:1033 pg_dumpall.c:643 pg_restore.c:495 +#: pg_dump.c:1030 pg_dumpall.c:643 pg_restore.c:495 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists använd IF EXISTS när objekt droppas\n" -#: pg_dump.c:1034 +#: pg_dump.c:1031 #, c-format msgid "" " --include-foreign-data=PATTERN\n" @@ -1563,82 +1543,82 @@ msgstr "" " inkludera data i främmande tabeller från\n" " främmande servrar som matchar MALL\n" -#: pg_dump.c:1037 pg_dumpall.c:644 +#: pg_dump.c:1034 pg_dumpall.c:644 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts dumpa data som INSERT, istället för COPY\n" -#: pg_dump.c:1038 pg_dumpall.c:645 +#: pg_dump.c:1035 pg_dumpall.c:645 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root ladda partitioner via root-tabellen\n" -#: pg_dump.c:1039 pg_dumpall.c:646 +#: pg_dump.c:1036 pg_dumpall.c:646 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments dumpa inte kommentarer\n" -#: pg_dump.c:1040 pg_dumpall.c:647 +#: pg_dump.c:1037 pg_dumpall.c:647 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications dumpa inte publiceringar\n" -#: pg_dump.c:1041 pg_dumpall.c:649 +#: pg_dump.c:1038 pg_dumpall.c:649 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels dumpa inte tilldelning av säkerhetsetiketter\n" -#: pg_dump.c:1042 pg_dumpall.c:650 +#: pg_dump.c:1039 pg_dumpall.c:650 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions dumpa inte prenumereringar\n" -#: pg_dump.c:1043 +#: pg_dump.c:1040 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr " --no-synchronized-snapshots använd inte synkroniserade snapshots i parallella job\n" -#: pg_dump.c:1044 pg_dumpall.c:652 +#: pg_dump.c:1041 pg_dumpall.c:652 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces dumpa inte användning av tabellutymmen\n" -#: pg_dump.c:1045 pg_dumpall.c:653 +#: pg_dump.c:1042 pg_dumpall.c:653 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data dumpa inte ologgad tabelldata\n" -#: pg_dump.c:1046 pg_dumpall.c:654 +#: pg_dump.c:1043 pg_dumpall.c:654 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" msgstr " --on-conflict-do-nothing addera ON CONFLICT DO NOTHING till INSERT-kommandon\n" -#: pg_dump.c:1047 pg_dumpall.c:655 +#: pg_dump.c:1044 pg_dumpall.c:655 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr " --quote-all-identifiers citera alla identifierar, även om de inte är nyckelord\n" -#: pg_dump.c:1048 pg_dumpall.c:656 +#: pg_dump.c:1045 pg_dumpall.c:656 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=NRADER antal rader per INSERT; implicerar --inserts\n" -#: pg_dump.c:1049 +#: pg_dump.c:1046 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr " --section=SEKTION dumpa namngiven sektion (pre-data, data eller post-data)\n" -#: pg_dump.c:1050 +#: pg_dump.c:1047 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr " --serializable-deferrable wait until the dump can run without anomalies\n" -#: pg_dump.c:1051 +#: pg_dump.c:1048 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT använda namngivet snapshot för att dumpa\n" -#: pg_dump.c:1052 pg_restore.c:504 +#: pg_dump.c:1049 pg_restore.c:504 #, c-format msgid "" " --strict-names require table and/or schema include patterns to\n" @@ -1647,7 +1627,7 @@ msgstr "" " --strict-names kräv att mallar för tabeller och/eller scheman matchar\n" " minst en sak var\n" -#: pg_dump.c:1054 pg_dumpall.c:657 pg_restore.c:506 +#: pg_dump.c:1051 pg_dumpall.c:657 pg_restore.c:506 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1658,7 +1638,7 @@ msgstr "" " använd kommandot SET SESSION AUTHORIZATION istället för\n" " kommandot ALTER OWNER för att sätta ägare\n" -#: pg_dump.c:1058 pg_dumpall.c:661 pg_restore.c:510 +#: pg_dump.c:1055 pg_dumpall.c:661 pg_restore.c:510 #, c-format msgid "" "\n" @@ -1667,42 +1647,42 @@ msgstr "" "\n" "Flaggor för anslutning:\n" -#: pg_dump.c:1059 +#: pg_dump.c:1056 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=DBNAMN databasens som skall dumpas\n" -#: pg_dump.c:1060 pg_dumpall.c:663 pg_restore.c:511 +#: pg_dump.c:1057 pg_dumpall.c:663 pg_restore.c:511 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=VÄRDNAMN databasens värdnamn eller socketkatalog\n" -#: pg_dump.c:1061 pg_dumpall.c:665 pg_restore.c:512 +#: pg_dump.c:1058 pg_dumpall.c:665 pg_restore.c:512 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT databasens värdport\n" -#: pg_dump.c:1062 pg_dumpall.c:666 pg_restore.c:513 +#: pg_dump.c:1059 pg_dumpall.c:666 pg_restore.c:513 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAMN anslut med datta användarnamn mot databasen\n" -#: pg_dump.c:1063 pg_dumpall.c:667 pg_restore.c:514 +#: pg_dump.c:1060 pg_dumpall.c:667 pg_restore.c:514 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password fråga aldrig efter lösenord\n" -#: pg_dump.c:1064 pg_dumpall.c:668 pg_restore.c:515 +#: pg_dump.c:1061 pg_dumpall.c:668 pg_restore.c:515 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password fråga om lösenord (borde ske automatiskt)\n" -#: pg_dump.c:1065 pg_dumpall.c:669 +#: pg_dump.c:1062 pg_dumpall.c:669 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROLLNAMN gör SET ROLE innan dumpen\n" -#: pg_dump.c:1067 +#: pg_dump.c:1064 #, c-format msgid "" "\n" @@ -1715,22 +1695,22 @@ msgstr "" "PGDATABASE att användas.\n" "\n" -#: pg_dump.c:1069 pg_dumpall.c:673 pg_restore.c:522 +#: pg_dump.c:1066 pg_dumpall.c:673 pg_restore.c:522 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Rapportera fel till <%s>.\n" -#: pg_dump.c:1070 pg_dumpall.c:674 pg_restore.c:523 +#: pg_dump.c:1067 pg_dumpall.c:674 pg_restore.c:523 #, c-format msgid "%s home page: <%s>\n" msgstr "hemsida för %s: <%s>\n" -#: pg_dump.c:1089 pg_dumpall.c:499 +#: pg_dump.c:1086 pg_dumpall.c:499 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "ogiltig klientteckenkodning \"%s\" angiven" -#: pg_dump.c:1235 +#: pg_dump.c:1232 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server version.\n" @@ -1741,456 +1721,456 @@ msgstr "" "Kör med --no-synchronized-snapshots istället om du inte behöver\n" "synkroniserade snapshots." -#: pg_dump.c:1304 +#: pg_dump.c:1301 #, c-format msgid "invalid output format \"%s\" specified" msgstr "ogiltigt utdataformat \"%s\" angivet" -#: pg_dump.c:1342 +#: pg_dump.c:1339 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "hittade inga matchande scheman för mallen \"%s\"" -#: pg_dump.c:1389 +#: pg_dump.c:1386 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "hittade inga matchande främmande servrar för mallen \"%s\"" -#: pg_dump.c:1452 +#: pg_dump.c:1449 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "hittade inga matchande tabeller för mallen \"%s\"" -#: pg_dump.c:1865 +#: pg_dump.c:1862 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "dumpar innehållet i tabell \"%s.%s\"" -#: pg_dump.c:1972 +#: pg_dump.c:1969 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Dumpning av innehållet i tabellen \"%s\" misslyckades: PQendcopy() misslyckades." -#: pg_dump.c:1973 pg_dump.c:1983 +#: pg_dump.c:1970 pg_dump.c:1980 #, c-format msgid "Error message from server: %s" msgstr "Felmeddelandet från servern: %s" -#: pg_dump.c:1974 pg_dump.c:1984 +#: pg_dump.c:1971 pg_dump.c:1981 #, c-format msgid "The command was: %s" msgstr "Kommandot var: %s" -#: pg_dump.c:1982 +#: pg_dump.c:1979 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Dumpning av innehållet i tabellen \"%s\" misslyckades: PQgetResult() misslyckades." -#: pg_dump.c:2736 +#: pg_dump.c:2739 #, c-format msgid "saving database definition" msgstr "sparar databasdefinition" -#: pg_dump.c:3208 +#: pg_dump.c:3211 #, c-format msgid "saving encoding = %s" msgstr "sparar kodning = %s" -#: pg_dump.c:3233 +#: pg_dump.c:3236 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "sparar standard_conforming_strings = %s" -#: pg_dump.c:3272 +#: pg_dump.c:3275 #, c-format msgid "could not parse result of current_schemas()" msgstr "kunde inte parsa resultat från current_schemas()" -#: pg_dump.c:3291 +#: pg_dump.c:3294 #, c-format msgid "saving search_path = %s" msgstr "sparar search_path = %s" -#: pg_dump.c:3331 +#: pg_dump.c:3334 #, c-format msgid "reading large objects" msgstr "läser stora objekt" -#: pg_dump.c:3513 +#: pg_dump.c:3516 #, c-format msgid "saving large objects" msgstr "sparar stora objekt" -#: pg_dump.c:3559 +#: pg_dump.c:3562 #, c-format msgid "error reading large object %u: %s" msgstr "fel vid läsning av stort objekt %u: %s" -#: pg_dump.c:3611 +#: pg_dump.c:3614 #, c-format msgid "reading row security enabled for table \"%s.%s\"" msgstr "läser aktiverad radsäkerhet för tabell \"%s.%s\"" -#: pg_dump.c:3642 +#: pg_dump.c:3645 #, c-format msgid "reading policies for table \"%s.%s\"" msgstr "läser policys för tabell \"%s.%s\"" -#: pg_dump.c:3794 +#: pg_dump.c:3797 #, c-format msgid "unexpected policy command type: %c" msgstr "oväntad kommandotyp för policy: %c" -#: pg_dump.c:3945 +#: pg_dump.c:3948 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "ägare av publicering \"%s\" verkar vara ogiltig" -#: pg_dump.c:4091 +#: pg_dump.c:4093 #, c-format msgid "reading publication membership for table \"%s.%s\"" msgstr "läser publiceringsmedlemskap för tabell \"%s.%s\"" -#: pg_dump.c:4234 +#: pg_dump.c:4236 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "prenumerationer har inte dumpats få aktuell användare inte är en superanvändare" -#: pg_dump.c:4288 +#: pg_dump.c:4290 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "ägare av prenumeration \"%s\" verkar vara ogiltig" -#: pg_dump.c:4332 +#: pg_dump.c:4334 #, c-format msgid "could not parse subpublications array" msgstr "kunde inte parsa arrayen för subpubliceringar" -#: pg_dump.c:4654 +#: pg_dump.c:4656 #, c-format msgid "could not find parent extension for %s %s" msgstr "kunde inte hitta föräldrautökning för %s %s" -#: pg_dump.c:4786 +#: pg_dump.c:4788 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "ägare av schema \"%s\" verkar vara ogiltig" -#: pg_dump.c:4809 +#: pg_dump.c:4811 #, c-format msgid "schema with OID %u does not exist" msgstr "schema med OID %u existerar inte" -#: pg_dump.c:5134 +#: pg_dump.c:5136 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "ägare av datatyp \"%s\" verkar vara ogiltig" -#: pg_dump.c:5219 +#: pg_dump.c:5221 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "ägare av operator \"%s\" verkar vara ogiltig" -#: pg_dump.c:5521 +#: pg_dump.c:5523 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "ägare av operatorklass \"%s\" verkar vara ogiltig" -#: pg_dump.c:5605 +#: pg_dump.c:5607 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "ägare av operator-familj \"%s\" verkar vara ogiltig" -#: pg_dump.c:5774 +#: pg_dump.c:5776 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "ägare av aggregatfunktion \"%s\" verkar vara ogiltig" -#: pg_dump.c:6034 +#: pg_dump.c:6036 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "ägare av funktion \"%s\" verkar vara ogiltig" -#: pg_dump.c:6862 +#: pg_dump.c:6864 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "ägare av tabell \"%s\" verkar vara ogiltig" -#: pg_dump.c:6904 pg_dump.c:17330 +#: pg_dump.c:6906 pg_dump.c:17386 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "misslyckades med riktighetskontroll, föräldratabell med OID %u för sekvens med OID %u hittas inte" -#: pg_dump.c:7046 +#: pg_dump.c:7048 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "läser index för tabell \"%s.%s\"" -#: pg_dump.c:7458 +#: pg_dump.c:7463 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "läser främmande nyckel-villkor för tabell \"%s.%s\"" -#: pg_dump.c:7713 +#: pg_dump.c:7744 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "misslyckades med riktighetskontroll, föräldratabell med OID %u för pg_rewrite-rad med OID %u hittades inte" -#: pg_dump.c:7796 +#: pg_dump.c:7827 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "läser utlösare för tabell \"%s.%s\"" -#: pg_dump.c:7929 +#: pg_dump.c:7960 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "fråga producerade null som refererad tabell för främmande nyckel-utlösare \"%s\" i tabell \"%s\" (OID för tabell : %u)" -#: pg_dump.c:8484 +#: pg_dump.c:8515 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "hittar kolumner och typer för tabell \"%s.%s\"" -#: pg_dump.c:8620 +#: pg_dump.c:8651 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "ogiltigt kolumnnumrering i tabell \"%s\"" -#: pg_dump.c:8657 +#: pg_dump.c:8688 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "hittar default-uttryck för tabell \"%s.%s\"" -#: pg_dump.c:8679 +#: pg_dump.c:8710 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "felaktigt adnum-värde %d för tabell \"%s\"" -#: pg_dump.c:8744 +#: pg_dump.c:8775 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "hittar check-villkor för tabell \"%s.%s\"" -#: pg_dump.c:8793 +#: pg_dump.c:8824 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "förväntade %d check-villkor för tabell \"%s\" men hittade %d" msgstr[1] "förväntade %d check-villkor för tabell \"%s\" men hittade %d" -#: pg_dump.c:8797 +#: pg_dump.c:8828 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(systemkatalogerna kan vara trasiga.)" -#: pg_dump.c:10383 +#: pg_dump.c:10414 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "typtype för datatyp \"%s\" verkar vara ogiltig" -#: pg_dump.c:11737 +#: pg_dump.c:11768 #, c-format msgid "bogus value in proargmodes array" msgstr "felaktigt värde i arrayen proargmodes" -#: pg_dump.c:12109 +#: pg_dump.c:12140 #, c-format msgid "could not parse proallargtypes array" msgstr "kunde inte tolka arrayen proallargtypes" -#: pg_dump.c:12125 +#: pg_dump.c:12156 #, c-format msgid "could not parse proargmodes array" msgstr "kunde inte tolka arrayen proargmodes" -#: pg_dump.c:12139 +#: pg_dump.c:12170 #, c-format msgid "could not parse proargnames array" msgstr "kunde inte tolka arrayen proargnames" -#: pg_dump.c:12150 +#: pg_dump.c:12181 #, c-format msgid "could not parse proconfig array" msgstr "kunde inte tolka arrayen proconfig" -#: pg_dump.c:12230 +#: pg_dump.c:12261 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "okänt provolatile-värde för funktion \"%s\"" -#: pg_dump.c:12280 pg_dump.c:14338 +#: pg_dump.c:12311 pg_dump.c:14369 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "okänt proparallel-värde för funktion \"%s\"" -#: pg_dump.c:12419 pg_dump.c:12528 pg_dump.c:12535 +#: pg_dump.c:12450 pg_dump.c:12559 pg_dump.c:12566 #, c-format msgid "could not find function definition for function with OID %u" msgstr "kunde inte hitta funktionsdefinitionen för funktion med OID %u" -#: pg_dump.c:12458 +#: pg_dump.c:12489 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "felaktigt värde i fältet pg_cast.castfunc eller pg_cast.castmethod" -#: pg_dump.c:12461 +#: pg_dump.c:12492 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "felaktigt värde i fältet pg_cast.castmethod" -#: pg_dump.c:12554 +#: pg_dump.c:12585 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "felaktig transform-definition, minst en av trffromsql och trftosql måste vara ickenoll" -#: pg_dump.c:12571 +#: pg_dump.c:12602 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "felaktigt värde i fältet pg_transform.trffromsql" -#: pg_dump.c:12592 +#: pg_dump.c:12623 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "felaktigt värde i fältet pg_transform.trftosql" -#: pg_dump.c:12908 +#: pg_dump.c:12939 #, c-format msgid "could not find operator with OID %s" msgstr "kunde inte hitta en operator med OID %s." -#: pg_dump.c:12976 +#: pg_dump.c:13007 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "ogiltig typ \"%c\" för accessmetod \"%s\"" -#: pg_dump.c:13730 +#: pg_dump.c:13761 #, c-format msgid "unrecognized collation provider: %s" msgstr "okänd jämförelseleverantör: %s" -#: pg_dump.c:14202 +#: pg_dump.c:14233 #, c-format msgid "aggregate function %s could not be dumped correctly for this database version; ignored" msgstr "aggregatfunktion %s kunde inte dumpas korrekt för denna databasversion; ignorerad" -#: pg_dump.c:14257 +#: pg_dump.c:14288 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "okänt aggfinalmodify-värde för aggregat \"%s\"" -#: pg_dump.c:14313 +#: pg_dump.c:14344 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "okänt aggmfinalmodify-värde för aggregat \"%s\"" -#: pg_dump.c:15035 +#: pg_dump.c:15066 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "okänd objekttyp i standardrättigheter: %d" -#: pg_dump.c:15053 +#: pg_dump.c:15084 #, c-format msgid "could not parse default ACL list (%s)" msgstr "kunde inte parsa standard-ACL-lista (%s)" -#: pg_dump.c:15133 +#: pg_dump.c:15169 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "kunde inte parsa initial GRANT ACL-lista (%s) eller initial REVOKE ACL-lista (%s) för objekt \"%s\" (%s)" -#: pg_dump.c:15141 +#: pg_dump.c:15177 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "kunde inte parsa GRANT ACL-lista (%s) eller REVOKE ACL-lista (%s) för objekt \"%s\" (%s)" -#: pg_dump.c:15638 +#: pg_dump.c:15692 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "fråga för att hämta definition av vy \"%s\" returnerade ingen data" -#: pg_dump.c:15641 +#: pg_dump.c:15695 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "fråga för att hämta definition av vy \"%s\" returnerade mer än en definition" -#: pg_dump.c:15648 +#: pg_dump.c:15702 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "definition av vy \"%s\" verkar vara tom (längd noll)" -#: pg_dump.c:15730 +#: pg_dump.c:15786 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS stöds inte längre (tabell \"%s\")" -#: pg_dump.c:16210 +#: pg_dump.c:16266 #, c-format msgid "invalid number of parents %d for table \"%s\"" msgstr "ogiltigt antal (%d) föräldrar för tabell \"%s\"" -#: pg_dump.c:16533 +#: pg_dump.c:16589 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "ogiltigt kolumnnummer %d för tabell \"%s\"" -#: pg_dump.c:16818 +#: pg_dump.c:16874 #, c-format msgid "missing index for constraint \"%s\"" msgstr "saknar index för integritetsvillkor \"%s\"" -#: pg_dump.c:17043 +#: pg_dump.c:17099 #, c-format msgid "unrecognized constraint type: %c" msgstr "oväntad integritetsvillkorstyp: %c" -#: pg_dump.c:17175 pg_dump.c:17395 +#: pg_dump.c:17231 pg_dump.c:17451 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" msgstr[0] "fråga för att hämta data för sekvens \"%s\" returnerade %d rad (förväntade 1)" msgstr[1] "fråga för att hämta data för sekvens \"%s\" returnerade %d rader (förväntade 1)" -#: pg_dump.c:17209 +#: pg_dump.c:17265 #, c-format msgid "unrecognized sequence type: %s" msgstr "okänd sekvenstyp: %s" -#: pg_dump.c:17493 +#: pg_dump.c:17549 #, c-format msgid "unexpected tgtype value: %d" msgstr "oväntat tgtype-värde: %d" -#: pg_dump.c:17567 +#: pg_dump.c:17623 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "felaktig argumentsträng (%s) för utlösare \"%s\" i tabell \"%s\"" -#: pg_dump.c:17803 +#: pg_dump.c:17859 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "fråga för att hämta regel \"%s\" för tabell \"%s\" misslyckades: fel antal rader returnerades" -#: pg_dump.c:17965 +#: pg_dump.c:18021 #, c-format msgid "could not find referenced extension %u" msgstr "kunde inte hitta refererad utökning %u" -#: pg_dump.c:18177 +#: pg_dump.c:18233 #, c-format msgid "reading dependency data" msgstr "läser beroendedata" -#: pg_dump.c:18270 +#: pg_dump.c:18326 #, c-format msgid "no referencing object %u %u" msgstr "inget refererande objekt %u %u" -#: pg_dump.c:18281 +#: pg_dump.c:18337 #, c-format msgid "no referenced object %u %u" msgstr "inget refererat objekt %u %u" -#: pg_dump.c:18654 +#: pg_dump.c:18710 #, c-format msgid "could not parse reloptions array" msgstr "kunde inte parsa arrayen reloptions" @@ -2315,7 +2295,7 @@ msgstr " -f, --file=FILENAME utdatafilnamn\n" #: pg_dumpall.c:628 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" -msgstr " -c, --clean nollställa (droppa) databaser innan återskapning\n" +msgstr " -c, --clean nollställ (drop) databaser innan återskapning\n" #: pg_dumpall.c:630 #, c-format @@ -2672,6 +2652,12 @@ msgstr "" "Om inget indatafilnamn är angivet, så kommer standard in att användas.\n" "\n" +#~ msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive" +#~ msgstr "kunde inte hitta block ID %d i arkiv -- kanske på grund av en återställningbegäran i oordning vilket inte kan hanteras då det saknas dataoffsets i arkivet" + +#~ msgid "ftell mismatch with expected position -- ftell used" +#~ msgstr "ftell stämmer inte med förväntad position -- ftell använd" + #~ msgid "" #~ "The program \"pg_dump\" was found by \"%s\"\n" #~ "but was not the same version as %s.\n" @@ -2692,3 +2678,15 @@ msgstr "" #~ msgid "internal error -- neither th nor fh specified in _tarReadRaw()" #~ msgstr "internt fel -- varken th eller fh angiven i _tarReadRaw()" + +#~ msgid "connection needs password" +#~ msgstr "anslutningen kräver lösenord" + +#~ msgid "could not reconnect to database: %s" +#~ msgstr "kunde inte återuppkoppla mot databasen: %s" + +#~ msgid "could not reconnect to database" +#~ msgstr "kunde inte återuppkoppla mot databasen" + +#~ msgid "connecting to database \"%s\" as user \"%s\"" +#~ msgstr "kopplar upp mot databas \"%s\" som användare \"%s\"" diff --git a/src/bin/pg_dump/po/uk.po b/src/bin/pg_dump/po/uk.po new file mode 100644 index 0000000000000..a774aa116c89b --- /dev/null +++ b/src/bin/pg_dump/po/uk.po @@ -0,0 +1,2622 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:16+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: pasha_golub\n" +"Language-Team: Ukrainian\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /DEV_13/pg_dump.pot\n" +"X-Crowdin-File-ID: 500\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "збій: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "помилка: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "попередження: " + +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#, c-format +msgid "could not identify current directory: %m" +msgstr "не вдалося визначити поточний каталог: %m" + +#: ../../common/exec.c:156 +#, c-format +msgid "invalid binary \"%s\"" +msgstr "невірний бінарний файл \"%s\"" + +#: ../../common/exec.c:206 +#, c-format +msgid "could not read binary \"%s\"" +msgstr "неможливо прочитати бінарний файл \"%s\"" + +#: ../../common/exec.c:214 +#, c-format +msgid "could not find a \"%s\" to execute" +msgstr "неможливо знайти \"%s\" для виконання" + +#: ../../common/exec.c:270 ../../common/exec.c:309 +#, c-format +msgid "could not change directory to \"%s\": %m" +msgstr "не вдалося змінити каталог на \"%s\": %m" + +#: ../../common/exec.c:287 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "не можливо прочитати символічне послання \"%s\": %m" + +#: ../../common/exec.c:410 +#, c-format +msgid "pclose failed: %m" +msgstr "помилка pclose: %m" + +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +msgid "out of memory" +msgstr "недостатньо пам'яті" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "недостатньо пам'яті\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" + +#: ../../common/wait_error.c:45 +#, c-format +msgid "command not executable" +msgstr "неможливо виконати команду" + +#: ../../common/wait_error.c:49 +#, c-format +msgid "command not found" +msgstr "команду не знайдено" + +#: ../../common/wait_error.c:54 +#, c-format +msgid "child process exited with exit code %d" +msgstr "дочірній процес завершився з кодом виходу %d" + +#: ../../common/wait_error.c:62 +#, c-format +msgid "child process was terminated by exception 0x%X" +msgstr "дочірній процес перервано через помилку 0х%X" + +#: ../../common/wait_error.c:66 +#, c-format +msgid "child process was terminated by signal %d: %s" +msgstr "дочірній процес перервано через сигнал %d: %s" + +#: ../../common/wait_error.c:72 +#, c-format +msgid "child process exited with unrecognized status %d" +msgstr "дочірній процес завершився з невизнаним статусом %d" + +#: common.c:121 +#, c-format +msgid "reading extensions" +msgstr "читання розширень" + +#: common.c:125 +#, c-format +msgid "identifying extension members" +msgstr "ідентифікація членів розширення" + +#: common.c:128 +#, c-format +msgid "reading schemas" +msgstr "читання схемів" + +#: common.c:138 +#, c-format +msgid "reading user-defined tables" +msgstr "читання користувацьких таблиць" + +#: common.c:145 +#, c-format +msgid "reading user-defined functions" +msgstr "читання користувацьких функцій" + +#: common.c:150 +#, c-format +msgid "reading user-defined types" +msgstr "читання користувацьких типів" + +#: common.c:155 +#, c-format +msgid "reading procedural languages" +msgstr "читання процедурних мов" + +#: common.c:158 +#, c-format +msgid "reading user-defined aggregate functions" +msgstr "читання користувацьких агрегатних функцій" + +#: common.c:161 +#, c-format +msgid "reading user-defined operators" +msgstr "читання користувацьких операторів" + +#: common.c:165 +#, c-format +msgid "reading user-defined access methods" +msgstr "читання користувацьких методів доступу" + +#: common.c:168 +#, c-format +msgid "reading user-defined operator classes" +msgstr "читання користувацьких класів операторів" + +#: common.c:171 +#, c-format +msgid "reading user-defined operator families" +msgstr "читання користувацьких сімейств операторів" + +#: common.c:174 +#, c-format +msgid "reading user-defined text search parsers" +msgstr "читання користувацьких парсерів текстового пошуку" + +#: common.c:177 +#, c-format +msgid "reading user-defined text search templates" +msgstr "читання користувацьких шаблонів текстового пошуку" + +#: common.c:180 +#, c-format +msgid "reading user-defined text search dictionaries" +msgstr "читання користувацьких словників текстового пошуку" + +#: common.c:183 +#, c-format +msgid "reading user-defined text search configurations" +msgstr "читання користувацьких конфігурацій текстового пошуку" + +#: common.c:186 +#, c-format +msgid "reading user-defined foreign-data wrappers" +msgstr "читання користувацьких джерел сторонніх даних" + +#: common.c:189 +#, c-format +msgid "reading user-defined foreign servers" +msgstr "читання користувацьких сторонніх серверів" + +#: common.c:192 +#, c-format +msgid "reading default privileges" +msgstr "читання прав за замовчуванням" + +#: common.c:195 +#, c-format +msgid "reading user-defined collations" +msgstr "читання користувацьких сортувань" + +#: common.c:199 +#, c-format +msgid "reading user-defined conversions" +msgstr "читання користувацьких перетворень" + +#: common.c:202 +#, c-format +msgid "reading type casts" +msgstr "читання типу приведення" + +#: common.c:205 +#, c-format +msgid "reading transforms" +msgstr "читання перетворень" + +#: common.c:208 +#, c-format +msgid "reading table inheritance information" +msgstr "читання інформації про успадкування таблиці" + +#: common.c:211 +#, c-format +msgid "reading event triggers" +msgstr "читання тригерів подій" + +#: common.c:215 +#, c-format +msgid "finding extension tables" +msgstr "пошук таблиць розширень" + +#: common.c:219 +#, c-format +msgid "finding inheritance relationships" +msgstr "пошук відносин успадкування" + +#: common.c:222 +#, c-format +msgid "reading column info for interesting tables" +msgstr "читання інформації про стовпці цікавлячої таблиці" + +#: common.c:225 +#, c-format +msgid "flagging inherited columns in subtables" +msgstr "помітка успадкованих стовпців в підтаблицях" + +#: common.c:228 +#, c-format +msgid "reading indexes" +msgstr "читання індексів" + +#: common.c:231 +#, c-format +msgid "flagging indexes in partitioned tables" +msgstr "помітка індексів в секційних таблицях" + +#: common.c:234 +#, c-format +msgid "reading extended statistics" +msgstr "читання розширеної статистики" + +#: common.c:237 +#, c-format +msgid "reading constraints" +msgstr "читання обмежень" + +#: common.c:240 +#, c-format +msgid "reading triggers" +msgstr "читання тригерів" + +#: common.c:243 +#, c-format +msgid "reading rewrite rules" +msgstr "читання правил перезаписування" + +#: common.c:246 +#, c-format +msgid "reading policies" +msgstr "читання політик" + +#: common.c:249 +#, c-format +msgid "reading publications" +msgstr "читання публікацій" + +#: common.c:252 +#, c-format +msgid "reading publication membership" +msgstr "читання публікацій учасників" + +#: common.c:255 +#, c-format +msgid "reading subscriptions" +msgstr "читання підписок" + +#: common.c:1025 +#, c-format +msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" +msgstr "помилка перевірки, батьківський елемент ідентифікатора OID %u для таблиці \"%s\" (ідентифікатор OID %u) не знайдено" + +#: common.c:1067 +#, c-format +msgid "could not parse numeric array \"%s\": too many numbers" +msgstr "не вдалося проаналізувати числовий масив \"%s\": забагато чисел" + +#: common.c:1082 +#, c-format +msgid "could not parse numeric array \"%s\": invalid character in number" +msgstr "не вдалося проаналізувати числовий масив \"%s\": неприпустимий характер числа" + +#: compress_io.c:111 +#, c-format +msgid "invalid compression code: %d" +msgstr "невірний код стиснення: %d" + +#: compress_io.c:134 compress_io.c:170 compress_io.c:188 compress_io.c:504 +#: compress_io.c:547 +#, c-format +msgid "not built with zlib support" +msgstr "зібрано без підтримки zlib" + +#: compress_io.c:236 compress_io.c:333 +#, c-format +msgid "could not initialize compression library: %s" +msgstr "не вдалося ініціалізувати бібліотеку стиснення: %s" + +#: compress_io.c:256 +#, c-format +msgid "could not close compression stream: %s" +msgstr "не вдалося закрити потік стиснення: %s" + +#: compress_io.c:273 +#, c-format +msgid "could not compress data: %s" +msgstr "не вдалося стиснути дані: %s" + +#: compress_io.c:349 compress_io.c:364 +#, c-format +msgid "could not uncompress data: %s" +msgstr "не вдалося розпакувати дані: %s" + +#: compress_io.c:371 +#, c-format +msgid "could not close compression library: %s" +msgstr "не вдалося закрити бібліотеку стиснення: %s" + +#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:557 pg_backup_tar.c:560 +#, c-format +msgid "could not read from input file: %s" +msgstr "не вдалося прочитати з вхідного файлу: %s" + +#: compress_io.c:623 pg_backup_custom.c:646 pg_backup_directory.c:552 +#: pg_backup_tar.c:793 pg_backup_tar.c:816 +#, c-format +msgid "could not read from input file: end of file" +msgstr "не вдалося прочитати з вхідного файлу: кінець файлу" + +#: parallel.c:267 +#, c-format +msgid "WSAStartup failed: %d" +msgstr "Помилка WSAStartup: %d" + +#: parallel.c:978 +#, c-format +msgid "could not create communication channels: %m" +msgstr "не вдалося створити канали зв'язку: %m" + +#: parallel.c:1035 +#, c-format +msgid "could not create worker process: %m" +msgstr "не вдалося створити робочий процес: %m" + +#: parallel.c:1165 +#, c-format +msgid "unrecognized command received from master: \"%s\"" +msgstr "отримана нерозпізнана команда від майстра: \"%s\"" + +#: parallel.c:1208 parallel.c:1446 +#, c-format +msgid "invalid message received from worker: \"%s\"" +msgstr "отримане невірне повідомлення від робочого процесу: \"%s\"" + +#: parallel.c:1340 +#, c-format +msgid "could not obtain lock on relation \"%s\"\n" +"This usually means that someone requested an ACCESS EXCLUSIVE lock on the table after the pg_dump parent process had gotten the initial ACCESS SHARE lock on the table." +msgstr "не вдалося отримати блокування відношення \"%s\"\n" +"Це, зазвичай, означає, що хтось зробив запит на монопольне блокування таблиці після того, як батьківський процес pg_dump отримав початкове блокування спільного доступу для таблиці." + +#: parallel.c:1429 +#, c-format +msgid "a worker process died unexpectedly" +msgstr "робочий процес завершився несподівано" + +#: parallel.c:1551 parallel.c:1669 +#, c-format +msgid "could not write to the communication channel: %m" +msgstr "не вдалося записати до каналу зв'язку: %m" + +#: parallel.c:1628 +#, c-format +msgid "select() failed: %m" +msgstr "помилка в select(): %m" + +#: parallel.c:1753 +#, c-format +msgid "pgpipe: could not create socket: error code %d" +msgstr "pgpipe: не вдалося створити сокет: код помилки %d" + +#: parallel.c:1764 +#, c-format +msgid "pgpipe: could not bind: error code %d" +msgstr "pgpipe: не вдалося прив'язати: код помилки %d" + +#: parallel.c:1771 +#, c-format +msgid "pgpipe: could not listen: error code %d" +msgstr "pgpipe: не вдалося прослухати: код помилки %d" + +#: parallel.c:1778 +#, c-format +msgid "pgpipe: getsockname() failed: error code %d" +msgstr "pgpipe: помилка в getsockname(): код помилки %d" + +#: parallel.c:1789 +#, c-format +msgid "pgpipe: could not create second socket: error code %d" +msgstr "pgpipe: не вдалося створити другий сокет: код помилки %d" + +#: parallel.c:1798 +#, c-format +msgid "pgpipe: could not connect socket: error code %d" +msgstr "pgpipe: не вдалося зв'язатися з сокетом: код помилки %d" + +#: parallel.c:1807 +#, c-format +msgid "pgpipe: could not accept connection: error code %d" +msgstr "pgpipe: не вдалося прийняти зв'язок: код помилки %d" + +#: pg_backup_archiver.c:271 pg_backup_archiver.c:1591 +#, c-format +msgid "could not close output file: %m" +msgstr "не вдалося закрити вихідний файл: %m" + +#: pg_backup_archiver.c:315 pg_backup_archiver.c:319 +#, c-format +msgid "archive items not in correct section order" +msgstr "елементи архіву в неправильному порядку" + +#: pg_backup_archiver.c:325 +#, c-format +msgid "unexpected section code %d" +msgstr "неочікуваний код розділу %d" + +#: pg_backup_archiver.c:362 +#, c-format +msgid "parallel restore is not supported with this archive file format" +msgstr "паралельне відновлення не підтримується з цим файлом архівного формату" + +#: pg_backup_archiver.c:366 +#, c-format +msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump" +msgstr "паралельне відновлення не підтримується з архівами, зробленими pre-8.0 pg_dump" + +#: pg_backup_archiver.c:384 +#, c-format +msgid "cannot restore from compressed archive (compression not supported in this installation)" +msgstr "не вдалося відновити зі стиснутого архіву (встановлена версія не підтримує стискання)" + +#: pg_backup_archiver.c:401 +#, c-format +msgid "connecting to database for restore" +msgstr "підключення до бази даних для відновлення" + +#: pg_backup_archiver.c:403 +#, c-format +msgid "direct database connections are not supported in pre-1.3 archives" +msgstr "прямі з'днання з базою даних не підтримуються в архівах у версіях до 1.3" + +#: pg_backup_archiver.c:448 +#, c-format +msgid "implied data-only restore" +msgstr "мається на увазі відновлення лише даних" + +#: pg_backup_archiver.c:514 +#, c-format +msgid "dropping %s %s" +msgstr "видалення %s %s" + +#: pg_backup_archiver.c:609 +#, c-format +msgid "could not find where to insert IF EXISTS in statement \"%s\"" +msgstr "не вдалося знайти, куди вставити IF EXISTS в інструкції \"%s\"" + +#: pg_backup_archiver.c:765 pg_backup_archiver.c:767 +#, c-format +msgid "warning from original dump file: %s" +msgstr "попередження з оригінального файлу дамп: %s" + +#: pg_backup_archiver.c:782 +#, c-format +msgid "creating %s \"%s.%s\"" +msgstr "створення %s \"%s.%s\"" + +#: pg_backup_archiver.c:785 +#, c-format +msgid "creating %s \"%s\"" +msgstr "створення %s \" \"%s\"" + +#: pg_backup_archiver.c:842 +#, c-format +msgid "connecting to new database \"%s\"" +msgstr "підключення до нової бази даних \"%s\"" + +#: pg_backup_archiver.c:870 +#, c-format +msgid "processing %s" +msgstr "обробка %s" + +#: pg_backup_archiver.c:890 +#, c-format +msgid "processing data for table \"%s.%s\"" +msgstr "обробка даних для таблиці \"%s.%s\"" + +#: pg_backup_archiver.c:952 +#, c-format +msgid "executing %s %s" +msgstr "виконання %s %s" + +#: pg_backup_archiver.c:991 +#, c-format +msgid "disabling triggers for %s" +msgstr "вимкнення тригерів для %s" + +#: pg_backup_archiver.c:1017 +#, c-format +msgid "enabling triggers for %s" +msgstr "увімкнення тригерів для %s" + +#: pg_backup_archiver.c:1045 +#, c-format +msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" +msgstr "внутрішня помилка - WriteData не може бути викликана поза контекстом підпрограми DataDumper " + +#: pg_backup_archiver.c:1228 +#, c-format +msgid "large-object output not supported in chosen format" +msgstr "вивід великих об'єктів не підтримується у вибраному форматі" + +#: pg_backup_archiver.c:1286 +#, c-format +msgid "restored %d large object" +msgid_plural "restored %d large objects" +msgstr[0] "відновлено %d великий об'єкт" +msgstr[1] "відновлено %d великих об'єкти" +msgstr[2] "відновлено %d великих об'єктів" +msgstr[3] "відновлено %d великих об'єктів" + +#: pg_backup_archiver.c:1307 pg_backup_tar.c:736 +#, c-format +msgid "restoring large object with OID %u" +msgstr "відновлення великого об'єкту з OID %u" + +#: pg_backup_archiver.c:1319 +#, c-format +msgid "could not create large object %u: %s" +msgstr "не вдалося створити великий об'єкт %u: %s" + +#: pg_backup_archiver.c:1324 pg_dump.c:3544 +#, c-format +msgid "could not open large object %u: %s" +msgstr "не вдалося відкрити великий об'єкт %u: %s" + +#: pg_backup_archiver.c:1381 +#, c-format +msgid "could not open TOC file \"%s\": %m" +msgstr "не вдалося відкрити файл TOC \"%s\": %m" + +#: pg_backup_archiver.c:1421 +#, c-format +msgid "line ignored: %s" +msgstr "рядок проігноровано: %s" + +#: pg_backup_archiver.c:1428 +#, c-format +msgid "could not find entry for ID %d" +msgstr "не вдалося знайти введення для ID %d" + +#: pg_backup_archiver.c:1449 pg_backup_directory.c:222 +#: pg_backup_directory.c:598 +#, c-format +msgid "could not close TOC file: %m" +msgstr "не вдалося закрити файл TOC: %m" + +#: pg_backup_archiver.c:1563 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_directory.c:585 pg_backup_directory.c:648 +#: pg_backup_directory.c:667 pg_dumpall.c:484 +#, c-format +msgid "could not open output file \"%s\": %m" +msgstr "не вдалося відкрити вихідний файл \"%s\": %m" + +#: pg_backup_archiver.c:1565 pg_backup_custom.c:162 +#, c-format +msgid "could not open output file: %m" +msgstr "не вдалося відкрити вихідний файл: %m" + +#: pg_backup_archiver.c:1658 +#, c-format +msgid "wrote %lu byte of large object data (result = %lu)" +msgid_plural "wrote %lu bytes of large object data (result = %lu)" +msgstr[0] "записано %lu байт даних великого об'єкта (результат = %lu)" +msgstr[1] "записано %lu байти даних великого об'єкта (результат = %lu)" +msgstr[2] "записано %lu байтів даних великого об'єкта (результат = %lu)" +msgstr[3] "записано %lu байтів даних великого об'єкта (результат = %lu)" + +#: pg_backup_archiver.c:1663 +#, c-format +msgid "could not write to large object (result: %lu, expected: %lu)" +msgstr "не вдалося записати великий об'єкт (результат: %lu, очікувано: %lu)" + +#: pg_backup_archiver.c:1753 +#, c-format +msgid "while INITIALIZING:" +msgstr "при ІНІЦІАЛІЗАЦІЇ:" + +#: pg_backup_archiver.c:1758 +#, c-format +msgid "while PROCESSING TOC:" +msgstr "при ОБРОБЦІ TOC:" + +#: pg_backup_archiver.c:1763 +#, c-format +msgid "while FINALIZING:" +msgstr "при ЗАВЕРШЕННІ:" + +#: pg_backup_archiver.c:1768 +#, c-format +msgid "from TOC entry %d; %u %u %s %s %s" +msgstr "зі входження до TOC %d; %u %u %s %s %s" + +#: pg_backup_archiver.c:1844 +#, c-format +msgid "bad dumpId" +msgstr "невірний dumpId" + +#: pg_backup_archiver.c:1865 +#, c-format +msgid "bad table dumpId for TABLE DATA item" +msgstr "невірна таблиця dumpId для елементу даних таблиці" + +#: pg_backup_archiver.c:1957 +#, c-format +msgid "unexpected data offset flag %d" +msgstr "неочікувана позначка зсуву даних %d" + +#: pg_backup_archiver.c:1970 +#, c-format +msgid "file offset in dump file is too large" +msgstr "зсув файлу у файлі дампу завеликий" + +#: pg_backup_archiver.c:2107 pg_backup_archiver.c:2117 +#, c-format +msgid "directory name too long: \"%s\"" +msgstr "ім'я каталогу задовге: \"%s\"" + +#: pg_backup_archiver.c:2125 +#, c-format +msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" +msgstr "каталог \"%s\" не схожий на архівний (\"toc.dat\" не існує)" + +#: pg_backup_archiver.c:2133 pg_backup_custom.c:173 pg_backup_custom.c:812 +#: pg_backup_directory.c:207 pg_backup_directory.c:394 +#, c-format +msgid "could not open input file \"%s\": %m" +msgstr "не вдалося відкрити вхідний файл \"%s\": %m" + +#: pg_backup_archiver.c:2140 pg_backup_custom.c:179 +#, c-format +msgid "could not open input file: %m" +msgstr "не вдалося відкрити вхідний файл: %m" + +#: pg_backup_archiver.c:2146 +#, c-format +msgid "could not read input file: %m" +msgstr "не вдалося прочитати вхідний файл: %m" + +#: pg_backup_archiver.c:2148 +#, c-format +msgid "input file is too short (read %lu, expected 5)" +msgstr "вхідний файл закороткий (прочитано %lu, очікувалось 5)" + +#: pg_backup_archiver.c:2233 +#, c-format +msgid "input file appears to be a text format dump. Please use psql." +msgstr "вхідний файл схожий на дамп текстового формату. Будь ласка, використайте psql." + +#: pg_backup_archiver.c:2239 +#, c-format +msgid "input file does not appear to be a valid archive (too short?)" +msgstr "вхідний файл не схожий на архівний (закороткий?)" + +#: pg_backup_archiver.c:2245 +#, c-format +msgid "input file does not appear to be a valid archive" +msgstr "вхідний файл не схожий на архівний" + +#: pg_backup_archiver.c:2265 +#, c-format +msgid "could not close input file: %m" +msgstr "не вдалося закрити вхідний файл: %m" + +#: pg_backup_archiver.c:2379 +#, c-format +msgid "unrecognized file format \"%d\"" +msgstr "нерозпізнаний формат файлу \"%d\"" + +#: pg_backup_archiver.c:2461 pg_backup_archiver.c:4473 +#, c-format +msgid "finished item %d %s %s" +msgstr "завершений об'єкт %d %s %s" + +#: pg_backup_archiver.c:2465 pg_backup_archiver.c:4486 +#, c-format +msgid "worker process failed: exit code %d" +msgstr "помилка при робочому процесі: код виходу %d" + +#: pg_backup_archiver.c:2585 +#, c-format +msgid "entry ID %d out of range -- perhaps a corrupt TOC" +msgstr "введення ідентифікатора %d поза діапазоном -- можливо, зміст пошкоджений" + +#: pg_backup_archiver.c:2652 +#, c-format +msgid "restoring tables WITH OIDS is not supported anymore" +msgstr "відновлення таблиць WITH OIDS більше не підтримується" + +#: pg_backup_archiver.c:2734 +#, c-format +msgid "unrecognized encoding \"%s\"" +msgstr "нерозпізнане кодування \"%s\"" + +#: pg_backup_archiver.c:2739 +#, c-format +msgid "invalid ENCODING item: %s" +msgstr "невірний об'єкт КОДУВАННЯ: %s" + +#: pg_backup_archiver.c:2757 +#, c-format +msgid "invalid STDSTRINGS item: %s" +msgstr "невірний об'єкт STDSTRINGS: %s" + +#: pg_backup_archiver.c:2782 +#, c-format +msgid "schema \"%s\" not found" +msgstr "схему \"%s\" не знайдено" + +#: pg_backup_archiver.c:2789 +#, c-format +msgid "table \"%s\" not found" +msgstr "таблицю \"%s\" не знайдено" + +#: pg_backup_archiver.c:2796 +#, c-format +msgid "index \"%s\" not found" +msgstr "індекс \"%s\" не знайдено" + +#: pg_backup_archiver.c:2803 +#, c-format +msgid "function \"%s\" not found" +msgstr "функцію \"%s\" не знайдено" + +#: pg_backup_archiver.c:2810 +#, c-format +msgid "trigger \"%s\" not found" +msgstr "тригер \"%s\" не знайдено" + +#: pg_backup_archiver.c:3202 +#, c-format +msgid "could not set session user to \"%s\": %s" +msgstr "не вдалося встановити користувача сеансу для \"%s\": %s" + +#: pg_backup_archiver.c:3341 +#, c-format +msgid "could not set search_path to \"%s\": %s" +msgstr "не вдалося встановити search_path для \"%s\": %s" + +#: pg_backup_archiver.c:3403 +#, c-format +msgid "could not set default_tablespace to %s: %s" +msgstr "не вдалося встановити default_tablespace для %s: %s" + +#: pg_backup_archiver.c:3448 +#, c-format +msgid "could not set default_table_access_method: %s" +msgstr "не вдалося встановити default_table_access_method для : %s" + +#: pg_backup_archiver.c:3540 pg_backup_archiver.c:3698 +#, c-format +msgid "don't know how to set owner for object type \"%s\"" +msgstr "невідомо, як встановити власника об'єкту типу \"%s\"" + +#: pg_backup_archiver.c:3802 +#, c-format +msgid "did not find magic string in file header" +msgstr "в заголовку файлу не знайдено магічного рядка" + +#: pg_backup_archiver.c:3815 +#, c-format +msgid "unsupported version (%d.%d) in file header" +msgstr "в заголовку непідтримувана версія (%d.%d)" + +#: pg_backup_archiver.c:3820 +#, c-format +msgid "sanity check on integer size (%lu) failed" +msgstr "перевірка на розмір цілого числа (%lu) не вдалася" + +#: pg_backup_archiver.c:3824 +#, c-format +msgid "archive was made on a machine with larger integers, some operations might fail" +msgstr "архів зроблено на архітектурі з більшими цілими числами, деякі операції можуть не виконуватися" + +#: pg_backup_archiver.c:3834 +#, c-format +msgid "expected format (%d) differs from format found in file (%d)" +msgstr "очікуваний формат (%d) відрізняється від знайденого формату у файлі (%d)" + +#: pg_backup_archiver.c:3850 +#, c-format +msgid "archive is compressed, but this installation does not support compression -- no data will be available" +msgstr "архів стиснено, але ця інсталяція не підтримує стискання -- дані не будуть доступними " + +#: pg_backup_archiver.c:3868 +#, c-format +msgid "invalid creation date in header" +msgstr "неприпустима дата створення у заголовку" + +#: pg_backup_archiver.c:3996 +#, c-format +msgid "processing item %d %s %s" +msgstr "обробка елементу %d %s %s" + +#: pg_backup_archiver.c:4075 +#, c-format +msgid "entering main parallel loop" +msgstr "введення головного паралельного циклу" + +#: pg_backup_archiver.c:4086 +#, c-format +msgid "skipping item %d %s %s" +msgstr "пропускається елемент %d %s %s " + +#: pg_backup_archiver.c:4095 +#, c-format +msgid "launching item %d %s %s" +msgstr "запуск елементу %d %s %s " + +#: pg_backup_archiver.c:4149 +#, c-format +msgid "finished main parallel loop" +msgstr "головний паралельний цикл завершився" + +#: pg_backup_archiver.c:4187 +#, c-format +msgid "processing missed item %d %s %s" +msgstr "обробка втраченого елементу %d %s %s" + +#: pg_backup_archiver.c:4792 +#, c-format +msgid "table \"%s\" could not be created, will not restore its data" +msgstr "не вдалося створити таблицю \"%s\", дані не будуть відновлені" + +#: pg_backup_custom.c:378 pg_backup_null.c:147 +#, c-format +msgid "invalid OID for large object" +msgstr "неприпустимий ідентифікатор OID для великого об’єкту" + +#: pg_backup_custom.c:441 pg_backup_custom.c:507 pg_backup_custom.c:632 +#: pg_backup_custom.c:870 pg_backup_tar.c:1086 pg_backup_tar.c:1091 +#, c-format +msgid "error during file seek: %m" +msgstr "помилка під час пошуку файлу oobe. xml: %m" + +#: pg_backup_custom.c:480 +#, c-format +msgid "data block %d has wrong seek position" +msgstr "блок даних %d має неправильну позицію пошуку" + +#: pg_backup_custom.c:497 +#, c-format +msgid "unrecognized data block type (%d) while searching archive" +msgstr "нерозпізнаний тип блоку даних (%d) під час пошуку архіву" + +#: pg_backup_custom.c:519 +#, c-format +msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to non-seekable input file" +msgstr "не вдалося зайти в архіві блок з ідентифікатором %d -- можливо, через непослідовність запиту відновлення, який не можна обробити через файл, що не допускає довільний вхід" + +#: pg_backup_custom.c:524 +#, c-format +msgid "could not find block ID %d in archive -- possibly corrupt archive" +msgstr "не вдалося знайти в архіві блок з ідентифікатором %d -- можливо, архів пошкоджений" + +#: pg_backup_custom.c:531 +#, c-format +msgid "found unexpected block ID (%d) when reading data -- expected %d" +msgstr "знайдено неочікуваний блок з ідентифікатором (%d) під час читання даних -- очікувалося %d" + +#: pg_backup_custom.c:545 +#, c-format +msgid "unrecognized data block type %d while restoring archive" +msgstr "нерозпізнаний тип блоку даних %d при відновленні архіву" + +#: pg_backup_custom.c:648 +#, c-format +msgid "could not read from input file: %m" +msgstr "не вдалося прочитати з вхідного файлу: %m" + +#: pg_backup_custom.c:751 pg_backup_custom.c:803 pg_backup_custom.c:948 +#: pg_backup_tar.c:1089 +#, c-format +msgid "could not determine seek position in archive file: %m" +msgstr "не вдалося визначити позицію пошуку у файлі архіву: %m" + +#: pg_backup_custom.c:767 pg_backup_custom.c:807 +#, c-format +msgid "could not close archive file: %m" +msgstr "не вдалося закрити архівний файл: %m" + +#: pg_backup_custom.c:790 +#, c-format +msgid "can only reopen input archives" +msgstr "можливо повторно відкрити лише вхідні архіви" + +#: pg_backup_custom.c:797 +#, c-format +msgid "parallel restore from standard input is not supported" +msgstr "паралельне відновлення зі стандартного вводу не підтримується" + +#: pg_backup_custom.c:799 +#, c-format +msgid "parallel restore from non-seekable file is not supported" +msgstr "паралельне відновлення з файлу без вільного доступу не підтримується" + +#: pg_backup_custom.c:815 +#, c-format +msgid "could not set seek position in archive file: %m" +msgstr "не вдалося набрати позицію пошуку у файлі архіву: %m" + +#: pg_backup_custom.c:894 +#, c-format +msgid "compressor active" +msgstr "ущільнювач активний" + +#: pg_backup_db.c:42 +#, c-format +msgid "could not get server_version from libpq" +msgstr "не вдалося отримати версію серверу з libpq" + +#: pg_backup_db.c:53 pg_dumpall.c:1826 +#, c-format +msgid "server version: %s; %s version: %s" +msgstr "версія серверу: %s; версія %s: %s" + +#: pg_backup_db.c:55 pg_dumpall.c:1828 +#, c-format +msgid "aborting because of server version mismatch" +msgstr "переривання через невідповідність версії серверу" + +#: pg_backup_db.c:138 +#, c-format +msgid "connecting to database \"%s\" as user \"%s\"" +msgstr "підключення до бази даних \"%s\" як користувача \"%s\"" + +#: pg_backup_db.c:145 pg_backup_db.c:194 pg_backup_db.c:255 pg_backup_db.c:296 +#: pg_dumpall.c:1651 pg_dumpall.c:1764 +msgid "Password: " +msgstr "Пароль: " + +#: pg_backup_db.c:177 +#, c-format +msgid "could not reconnect to database" +msgstr "неможливо заново під'єднатися до бази даних" + +#: pg_backup_db.c:182 +#, c-format +msgid "could not reconnect to database: %s" +msgstr "неможливо заново під'єднатися до бази даних: %s" + +#: pg_backup_db.c:198 +#, c-format +msgid "connection needs password" +msgstr "для з'єднання потрібен пароль" + +#: pg_backup_db.c:249 +#, c-format +msgid "already connected to a database" +msgstr "вже під'єднано до бази даних" + +#: pg_backup_db.c:288 +#, c-format +msgid "could not connect to database" +msgstr "не вдалося зв'язатися з базою даних" + +#: pg_backup_db.c:304 +#, c-format +msgid "connection to database \"%s\" failed: %s" +msgstr "підключення до бази даних \"%s\" не вдалося: %s" + +#: pg_backup_db.c:376 pg_dumpall.c:1684 +#, c-format +msgid "%s" +msgstr "%s" + +#: pg_backup_db.c:383 pg_dumpall.c:1889 pg_dumpall.c:1912 +#, c-format +msgid "query failed: %s" +msgstr "запит не вдався: %s" + +#: pg_backup_db.c:385 pg_dumpall.c:1890 pg_dumpall.c:1913 +#, c-format +msgid "query was: %s" +msgstr "запит був: %s" + +#: pg_backup_db.c:426 +#, c-format +msgid "query returned %d row instead of one: %s" +msgid_plural "query returned %d rows instead of one: %s" +msgstr[0] "запит повернув %d рядок замість одного: %s" +msgstr[1] "запит повернув %d рядки замість одного: %s" +msgstr[2] "запит повернув %d рядків замість одного: %s" +msgstr[3] "запит повернув %d рядків замість одного: %s" + +#: pg_backup_db.c:462 +#, c-format +msgid "%s: %sCommand was: %s" +msgstr "%s:%sКоманда була: %s" + +#: pg_backup_db.c:518 pg_backup_db.c:592 pg_backup_db.c:599 +msgid "could not execute query" +msgstr "не вдалося виконати запит" + +#: pg_backup_db.c:571 +#, c-format +msgid "error returned by PQputCopyData: %s" +msgstr "помилка повернулася від PQputCopyData: %s" + +#: pg_backup_db.c:620 +#, c-format +msgid "error returned by PQputCopyEnd: %s" +msgstr "помилка повернулася від PQputCopyEnd: %s" + +#: pg_backup_db.c:626 +#, c-format +msgid "COPY failed for table \"%s\": %s" +msgstr "КОПІЮВАННЯ для таблиці \"%s\" не вдалося: %s" + +#: pg_backup_db.c:632 pg_dump.c:1984 +#, c-format +msgid "unexpected extra results during COPY of table \"%s\"" +msgstr "неочікувані зайві результати під час копіювання таблиці \"%s\"" + +#: pg_backup_db.c:644 +msgid "could not start database transaction" +msgstr "не вдалося почати транзакцію бази даних" + +#: pg_backup_db.c:652 +msgid "could not commit database transaction" +msgstr "не вдалося затвердити транзакцію бази даних" + +#: pg_backup_directory.c:156 +#, c-format +msgid "no output directory specified" +msgstr "вихідний каталог не вказано" + +#: pg_backup_directory.c:185 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "не вдалося прочитати каталог \"%s\": %m" + +#: pg_backup_directory.c:189 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "не вдалося закрити каталог \"%s\": %m" + +#: pg_backup_directory.c:195 +#, c-format +msgid "could not create directory \"%s\": %m" +msgstr "не вдалося створити каталог \"%s\": %m" + +#: pg_backup_directory.c:355 pg_backup_directory.c:496 +#: pg_backup_directory.c:532 +#, c-format +msgid "could not write to output file: %s" +msgstr "не можливо записати у вихідний файл: %s" + +#: pg_backup_directory.c:406 +#, c-format +msgid "could not close data file \"%s\": %m" +msgstr "не вдалося закрити файл даних \"%s\": %m" + +#: pg_backup_directory.c:446 +#, c-format +msgid "could not open large object TOC file \"%s\" for input: %m" +msgstr "не вдалося відкрити великий об'єкт файлу TOC \"%s\" для вводу: %m" + +#: pg_backup_directory.c:457 +#, c-format +msgid "invalid line in large object TOC file \"%s\": \"%s\"" +msgstr "невірна лінія у великому об'єкті файлу TOC \"%s\": \"%s\"" + +#: pg_backup_directory.c:466 +#, c-format +msgid "error reading large object TOC file \"%s\"" +msgstr "помилка читання великого об'єкту файлу TOC \"%s\"" + +#: pg_backup_directory.c:470 +#, c-format +msgid "could not close large object TOC file \"%s\": %m" +msgstr "не вдалося закрити великий об'єкт файлу TOC \"%s\" %m" + +#: pg_backup_directory.c:689 +#, c-format +msgid "could not write to blobs TOC file" +msgstr "не вдалося записати зміст у файл oobe. xml" + +#: pg_backup_directory.c:721 +#, c-format +msgid "file name too long: \"%s\"" +msgstr "ім'я файлу задовге: \"%s\"" + +#: pg_backup_null.c:74 +#, c-format +msgid "this format cannot be read" +msgstr "цей формат не може бути прочитаним" + +#: pg_backup_tar.c:177 +#, c-format +msgid "could not open TOC file \"%s\" for output: %m" +msgstr "не вдалося відкрити файл TOC \"%s\" для виводу: %m" + +#: pg_backup_tar.c:184 +#, c-format +msgid "could not open TOC file for output: %m" +msgstr "не вдалося відкрити файл TOC для виводу: %m" + +#: pg_backup_tar.c:203 pg_backup_tar.c:358 +#, c-format +msgid "compression is not supported by tar archive format" +msgstr "стиснення не підтримується форматом архіватора tar" + +#: pg_backup_tar.c:211 +#, c-format +msgid "could not open TOC file \"%s\" for input: %m" +msgstr "не вдалося відкрити файл TOC \"%s\" для вводу: %m" + +#: pg_backup_tar.c:218 +#, c-format +msgid "could not open TOC file for input: %m" +msgstr "не вдалося відкрити файл TOC для вводу: %m" + +#: pg_backup_tar.c:344 +#, c-format +msgid "could not find file \"%s\" in archive" +msgstr "не вдалося знайти файл \"%s\" в архіві" + +#: pg_backup_tar.c:410 +#, c-format +msgid "could not generate temporary file name: %m" +msgstr "не вдалося згенерувати тимчасове ім'я файлу: %m" + +#: pg_backup_tar.c:421 +#, c-format +msgid "could not open temporary file" +msgstr "неможливо відкрити тимчасовий файл" + +#: pg_backup_tar.c:448 +#, c-format +msgid "could not close tar member" +msgstr "не вдалося закрити tar-елемент" + +#: pg_backup_tar.c:691 +#, c-format +msgid "unexpected COPY statement syntax: \"%s\"" +msgstr "неочікуваний синтаксис інструкції копіювання: \"%s\"" + +#: pg_backup_tar.c:958 +#, c-format +msgid "invalid OID for large object (%u)" +msgstr "неприпустимий ідентифікатор OID для великих об’єктів (%u)" + +#: pg_backup_tar.c:1105 +#, c-format +msgid "could not close temporary file: %m" +msgstr "не вдалося закрити тимчасовий файл oobe. xml: %m" + +#: pg_backup_tar.c:1114 +#, c-format +msgid "actual file length (%s) does not match expected (%s)" +msgstr "фактична довжина файлу (%s) не відповідає очікуваному (%s)" + +#: pg_backup_tar.c:1171 pg_backup_tar.c:1201 +#, c-format +msgid "could not find header for file \"%s\" in tar archive" +msgstr "не вдалося знайти верхній колонтитул для файлу oobe. xml \"%s\" в архіві tar" + +#: pg_backup_tar.c:1189 +#, c-format +msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file." +msgstr "відновлення даних поза замовленням не підтримується у цьому форматі архіву: вимагаєтсья \"%s\", але перед цим іде \"%s\" у файлі архіву." + +#: pg_backup_tar.c:1234 +#, c-format +msgid "incomplete tar header found (%lu byte)" +msgid_plural "incomplete tar header found (%lu bytes)" +msgstr[0] "знайдено незавершений tar-заголовок (%lu байт)" +msgstr[1] "знайдено незавершений tar-заголовок (%lu байт)" +msgstr[2] "знайдено незавершений tar-заголовок (%lu байт)" +msgstr[3] "знайдено незавершений tar-заголовок (%lu байт)" + +#: pg_backup_tar.c:1285 +#, c-format +msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s" +msgstr "знайдено пошкоджений tar-верхній колонтитул у %s(очікувалося %d, обчислюється %d) позиція файлу oobe. xml %s" + +#: pg_backup_utils.c:54 +#, c-format +msgid "unrecognized section name: \"%s\"" +msgstr "нерозпізнане ім’я розділу: \"%s\"" + +#: pg_backup_utils.c:55 pg_dump.c:608 pg_dump.c:625 pg_dumpall.c:338 +#: pg_dumpall.c:348 pg_dumpall.c:357 pg_dumpall.c:366 pg_dumpall.c:374 +#: pg_dumpall.c:388 pg_dumpall.c:464 pg_restore.c:284 pg_restore.c:300 +#: pg_restore.c:318 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" + +#: pg_backup_utils.c:68 +#, c-format +msgid "out of on_exit_nicely slots" +msgstr "перевищено межу on_exit_nicely слотів" + +#: pg_dump.c:534 +#, c-format +msgid "compression level must be in range 0..9" +msgstr "рівень стискання має бути у діапазоні 0..9" + +#: pg_dump.c:572 +#, c-format +msgid "extra_float_digits must be in range -15..3" +msgstr "extra_float_digits повинні бути у діапазоні -15..3" + +#: pg_dump.c:595 +#, c-format +msgid "rows-per-insert must be in range %d..%d" +msgstr "рядків-на-вставку має бути у діапазоні %d..%d" + +#: pg_dump.c:623 pg_dumpall.c:346 pg_restore.c:298 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "забагато аргументів у командному рядку (перший \"%s\")" + +#: pg_dump.c:644 pg_restore.c:327 +#, c-format +msgid "options -s/--schema-only and -a/--data-only cannot be used together" +msgstr "параметри -s/--schema-only і -a/--data-only не можуть використовуватись разом" + +#: pg_dump.c:649 +#, c-format +msgid "options -s/--schema-only and --include-foreign-data cannot be used together" +msgstr "параметри -s/--schema-only і --include-foreign-data не можуть використовуватись разом" + +#: pg_dump.c:652 +#, c-format +msgid "option --include-foreign-data is not supported with parallel backup" +msgstr "параметр --include-foreign-data не підтримується з паралельним резервним копіюванням" + +#: pg_dump.c:656 pg_restore.c:333 +#, c-format +msgid "options -c/--clean and -a/--data-only cannot be used together" +msgstr "параметри -c/--clean і -a/--data-only не можна використовувати разом" + +#: pg_dump.c:661 pg_dumpall.c:381 pg_restore.c:382 +#, c-format +msgid "option --if-exists requires option -c/--clean" +msgstr "параметр --if-exists потребує параметр -c/--clean" + +#: pg_dump.c:668 +#, c-format +msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" +msgstr "параметр --on-conflict-do-nothing вимагає опції --inserts, --rows-per-insert або --column-inserts" + +#: pg_dump.c:690 +#, c-format +msgid "requested compression not available in this installation -- archive will be uncompressed" +msgstr "затребуване стискання недоступне на цій системі -- архів не буде стискатися" + +#: pg_dump.c:711 pg_restore.c:349 +#, c-format +msgid "invalid number of parallel jobs" +msgstr "неприпустима кількість паралельних завдань" + +#: pg_dump.c:715 +#, c-format +msgid "parallel backup only supported by the directory format" +msgstr "паралельне резервне копіювання підтримується лише з форматом \"каталог\"" + +#: pg_dump.c:770 +#, c-format +msgid "Synchronized snapshots are not supported by this server version.\n" +"Run with --no-synchronized-snapshots instead if you do not need\n" +"synchronized snapshots." +msgstr "У цій версії серверу синхронізовані знімки не підтримуються.\n" +"Якщо вам не потрібні синхронізовані знімки, виконайте \n" +" --no-synchronized-snapshots." + +#: pg_dump.c:776 +#, c-format +msgid "Exported snapshots are not supported by this server version." +msgstr "Експортовані знімки не підтримуються цією версією серверу." + +#: pg_dump.c:788 +#, c-format +msgid "last built-in OID is %u" +msgstr "останній вбудований OID %u" + +#: pg_dump.c:797 +#, c-format +msgid "no matching schemas were found" +msgstr "відповідних схем не знайдено" + +#: pg_dump.c:811 +#, c-format +msgid "no matching tables were found" +msgstr "відповідних таблиць не знайдено" + +#: pg_dump.c:986 +#, c-format +msgid "%s dumps a database as a text file or to other formats.\n\n" +msgstr "%s зберігає резервну копію бази даних в текстовому файлі або в інших форматах.\n\n" + +#: pg_dump.c:987 pg_dumpall.c:617 pg_restore.c:462 +#, c-format +msgid "Usage:\n" +msgstr "Використання:\n" + +#: pg_dump.c:988 +#, c-format +msgid " %s [OPTION]... [DBNAME]\n" +msgstr " %s [OPTION]... [DBNAME]\n" + +#: pg_dump.c:990 pg_dumpall.c:620 pg_restore.c:465 +#, c-format +msgid "\n" +"General options:\n" +msgstr "\n" +"Основні налаштування:\n" + +#: pg_dump.c:991 +#, c-format +msgid " -f, --file=FILENAME output file or directory name\n" +msgstr " -f, --file=FILENAME ім'я файлу виводу або каталогу\n" + +#: pg_dump.c:992 +#, c-format +msgid " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" +" plain text (default))\n" +msgstr " -F, --format=c|d|t|p формат файлу виводу (спеціальний, каталог, tar,\n" +" звичайний текст (за замовчуванням))\n" + +#: pg_dump.c:994 +#, c-format +msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" +msgstr " -j, --jobs=NUM використовувати ці паралельні завдання для вивантаження\n" + +#: pg_dump.c:995 pg_dumpall.c:622 +#, c-format +msgid " -v, --verbose verbose mode\n" +msgstr " -v, --verbose детальний режим\n" + +#: pg_dump.c:996 pg_dumpall.c:623 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію, потім вийти\n" + +#: pg_dump.c:997 +#, c-format +msgid " -Z, --compress=0-9 compression level for compressed formats\n" +msgstr " -Z, --compress=0-9 рівень стискання для стиснутих форматів\n" + +#: pg_dump.c:998 pg_dumpall.c:624 +#, c-format +msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" +msgstr " --lock-wait-timeout=TIMEOUT помилка після очікування TIMEOUT для блокування таблиці\n" + +#: pg_dump.c:999 pg_dumpall.c:651 +#, c-format +msgid " --no-sync do not wait for changes to be written safely to disk\n" +msgstr " --no-sync не чекати безпечного збереження змін на диск\n" + +#: pg_dump.c:1000 pg_dumpall.c:625 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку, потім вийти\n" + +#: pg_dump.c:1002 pg_dumpall.c:626 +#, c-format +msgid "\n" +"Options controlling the output content:\n" +msgstr "\n" +"Параметри, що керують вихідним вмістом:\n" + +#: pg_dump.c:1003 pg_dumpall.c:627 +#, c-format +msgid " -a, --data-only dump only the data, not the schema\n" +msgstr " -a, --data-only вивантажити лише дані, без схеми\n" + +#: pg_dump.c:1004 +#, c-format +msgid " -b, --blobs include large objects in dump\n" +msgstr " -b, --blobs включити у вивантаження великі об'єкти\n" + +#: pg_dump.c:1005 +#, c-format +msgid " -B, --no-blobs exclude large objects in dump\n" +msgstr " -B, --no-blobs виключити з вивантаження великі об'єкти\n" + +#: pg_dump.c:1006 pg_restore.c:476 +#, c-format +msgid " -c, --clean clean (drop) database objects before recreating\n" +msgstr " -c, --clean видалити об'єкти бази даних перед перед повторним створенням\n" + +#: pg_dump.c:1007 +#, c-format +msgid " -C, --create include commands to create database in dump\n" +msgstr " -C, --create включити у вивантаження команди для створення бази даних\n" + +#: pg_dump.c:1008 pg_dumpall.c:629 +#, c-format +msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" +msgstr " -E, --encoding=ENCODING вивантажити дані в кодуванні ENCODING\n" + +#: pg_dump.c:1009 +#, c-format +msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" +msgstr " -n, --schema=PATTERN вивантажити лише вказану схему(и)\n" + +#: pg_dump.c:1010 +#, c-format +msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" +msgstr " -N, --exclude-schema=PATTERN НЕ вивантажувати вказану схему(и)\n" + +#: pg_dump.c:1011 +#, c-format +msgid " -O, --no-owner skip restoration of object ownership in\n" +" plain-text format\n" +msgstr " -O, --no-owner пропускати відновлення володіння об'єктами\n" +" при використанні текстового формату\n" + +#: pg_dump.c:1013 pg_dumpall.c:633 +#, c-format +msgid " -s, --schema-only dump only the schema, no data\n" +msgstr " -s, --schema-only вивантажити лише схему, без даних\n" + +#: pg_dump.c:1014 +#, c-format +msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" +msgstr " -S, --superuser=NAME ім'я користувача, яке буде використовуватись у звичайних текстових форматах\n" + +#: pg_dump.c:1015 +#, c-format +msgid " -t, --table=PATTERN dump the specified table(s) only\n" +msgstr " -t, --table=PATTERN вивантажити лише вказані таблиці\n" + +#: pg_dump.c:1016 +#, c-format +msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" +msgstr " -T, --exclude-table=PATTERN НЕ вивантажувати вказані таблиці\n" + +#: pg_dump.c:1017 pg_dumpall.c:636 +#, c-format +msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" +msgstr " -x, --no-privileges не вивантажувати права (надання/відкликання)\n" + +#: pg_dump.c:1018 pg_dumpall.c:637 +#, c-format +msgid " --binary-upgrade for use by upgrade utilities only\n" +msgstr " --binary-upgrade для використання лише утилітами оновлення\n" + +#: pg_dump.c:1019 pg_dumpall.c:638 +#, c-format +msgid " --column-inserts dump data as INSERT commands with column names\n" +msgstr " --column-inserts вивантажити дані у вигляді команд INSERT з іменами стовпців\n" + +#: pg_dump.c:1020 pg_dumpall.c:639 +#, c-format +msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" +msgstr " --disable-dollar-quoting вимкнути цінову пропозицію $, використовувати SQL стандартну цінову пропозицію\n" + +#: pg_dump.c:1021 pg_dumpall.c:640 pg_restore.c:493 +#, c-format +msgid " --disable-triggers disable triggers during data-only restore\n" +msgstr " --disable-triggers вимкнути тригери лише під час відновлення даних\n" + +#: pg_dump.c:1022 +#, c-format +msgid " --enable-row-security enable row security (dump only content user has\n" +" access to)\n" +msgstr " --enable-row-security активувати захист на рівні рядків (вивантажити лише той вміст, до якого\n" +" користувач має доступ)\n" + +#: pg_dump.c:1024 +#, c-format +msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" +msgstr " --exclude-table-data=PATTERN НЕ вивантажувати дані вказаних таблиць\n" + +#: pg_dump.c:1025 pg_dumpall.c:642 +#, c-format +msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" +msgstr " --extra-float-digits=NUM змінити параметр за замовчуванням для extra_float_digits\n" + +#: pg_dump.c:1026 pg_dumpall.c:643 pg_restore.c:495 +#, c-format +msgid " --if-exists use IF EXISTS when dropping objects\n" +msgstr " --if-exists використовувати IF EXISTS під час видалення об'єктів\n" + +#: pg_dump.c:1027 +#, c-format +msgid " --include-foreign-data=PATTERN\n" +" include data of foreign tables on foreign\n" +" servers matching PATTERN\n" +msgstr " --include-foreign-data=ШАБЛОН\n" +" включають дані підлеглих таблиць на підлеглих\n" +" сервери, що відповідають ШАБЛОНУ\n" + +#: pg_dump.c:1030 pg_dumpall.c:644 +#, c-format +msgid " --inserts dump data as INSERT commands, rather than COPY\n" +msgstr " --inserts вивантажити дані у вигляді команд INSERT, не COPY\n" + +#: pg_dump.c:1031 pg_dumpall.c:645 +#, c-format +msgid " --load-via-partition-root load partitions via the root table\n" +msgstr " --load-via-partition-root завантажувати секції через головну таблицю\n" + +#: pg_dump.c:1032 pg_dumpall.c:646 +#, c-format +msgid " --no-comments do not dump comments\n" +msgstr " --no-comments не вивантажувати коментарі\n" + +#: pg_dump.c:1033 pg_dumpall.c:647 +#, c-format +msgid " --no-publications do not dump publications\n" +msgstr " --no-publications не вивантажувати публікації\n" + +#: pg_dump.c:1034 pg_dumpall.c:649 +#, c-format +msgid " --no-security-labels do not dump security label assignments\n" +msgstr " --no-security-labels не вивантажувати завдання міток безпеки\n" + +#: pg_dump.c:1035 pg_dumpall.c:650 +#, c-format +msgid " --no-subscriptions do not dump subscriptions\n" +msgstr " --no-subscriptions не вивантажувати підписки\n" + +#: pg_dump.c:1036 +#, c-format +msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" +msgstr " --no-synchronized-snapshots не використовувати синхронізовані знімки в паралельних завданнях\n" + +#: pg_dump.c:1037 pg_dumpall.c:652 +#, c-format +msgid " --no-tablespaces do not dump tablespace assignments\n" +msgstr " --no-tablespaces не вивантажувати призначення табличних просторів\n" + +#: pg_dump.c:1038 pg_dumpall.c:653 +#, c-format +msgid " --no-unlogged-table-data do not dump unlogged table data\n" +msgstr " --no-unlogged-table-data не вивантажувати дані таблиць, які не журналюються\n" + +#: pg_dump.c:1039 pg_dumpall.c:654 +#, c-format +msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" +msgstr " --on-conflict-do-nothing додавати ON CONFLICT DO NOTHING до команди INSERT\n" + +#: pg_dump.c:1040 pg_dumpall.c:655 +#, c-format +msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" +msgstr " --quote-all-identifiers укладати в лапки всі ідентифікатори, а не тільки ключові слова\n" + +#: pg_dump.c:1041 pg_dumpall.c:656 +#, c-format +msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" +msgstr " --rows-per-insert=NROWS кількість рядків для INSERT; вимагає параметру --inserts\n" + +#: pg_dump.c:1042 +#, c-format +msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" +msgstr " --section=SECTION вивантажити вказану секцію (pre-data, data або post-data)\n" + +#: pg_dump.c:1043 +#, c-format +msgid " --serializable-deferrable wait until the dump can run without anomalies\n" +msgstr " --serializable-deferrable чекати коли вивантаження можна буде виконати без аномалій\n" + +#: pg_dump.c:1044 +#, c-format +msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" +msgstr " --snapshot=SNAPSHOT використовувати під час вивантаження вказаний знімок\n" + +#: pg_dump.c:1045 pg_restore.c:504 +#, c-format +msgid " --strict-names require table and/or schema include patterns to\n" +" match at least one entity each\n" +msgstr " --strict-names потребувати, щоб при вказівці шаблону включення\n" +" таблиці і/або схеми йому відповідав мінімум один об'єкт\n" + +#: pg_dump.c:1047 pg_dumpall.c:657 pg_restore.c:506 +#, c-format +msgid " --use-set-session-authorization\n" +" use SET SESSION AUTHORIZATION commands instead of\n" +" ALTER OWNER commands to set ownership\n" +msgstr " --use-set-session-authorization\n" +" щоб встановити власника, використати команди SET SESSION AUTHORIZATION,\n" +" замість команд ALTER OWNER\n" + +#: pg_dump.c:1051 pg_dumpall.c:661 pg_restore.c:510 +#, c-format +msgid "\n" +"Connection options:\n" +msgstr "\n" +"Налаштування з'єднання:\n" + +#: pg_dump.c:1052 +#, c-format +msgid " -d, --dbname=DBNAME database to dump\n" +msgstr " -d, --dbname=DBNAME ім'я бази даних для вивантаження\n" + +#: pg_dump.c:1053 pg_dumpall.c:663 pg_restore.c:511 +#, c-format +msgid " -h, --host=HOSTNAME database server host or socket directory\n" +msgstr " -h, --host=HOSTNAME хост серверу баз даних або каталог сокетів\n" + +#: pg_dump.c:1054 pg_dumpall.c:665 pg_restore.c:512 +#, c-format +msgid " -p, --port=PORT database server port number\n" +msgstr " -p, --port=PORT номер порту сервера бази даних\n" + +#: pg_dump.c:1055 pg_dumpall.c:666 pg_restore.c:513 +#, c-format +msgid " -U, --username=NAME connect as specified database user\n" +msgstr " -U, --username=NAME підключатись як вказаний користувач бази даних\n" + +#: pg_dump.c:1056 pg_dumpall.c:667 pg_restore.c:514 +#, c-format +msgid " -w, --no-password never prompt for password\n" +msgstr " -w, --no-password ніколи не запитувати пароль\n" + +#: pg_dump.c:1057 pg_dumpall.c:668 pg_restore.c:515 +#, c-format +msgid " -W, --password force password prompt (should happen automatically)\n" +msgstr " -W, --password запитувати пароль завжди (повинно траплятись автоматично)\n" + +#: pg_dump.c:1058 pg_dumpall.c:669 +#, c-format +msgid " --role=ROLENAME do SET ROLE before dump\n" +msgstr " --role=ROLENAME виконати SET ROLE до вивантаження\n" + +#: pg_dump.c:1060 +#, c-format +msgid "\n" +"If no database name is supplied, then the PGDATABASE environment\n" +"variable value is used.\n\n" +msgstr "\n" +"Якщо ім'я бази даних не вказано, тоді використовується значення змінної середовища PGDATABASE.\n\n" + +#: pg_dump.c:1062 pg_dumpall.c:673 pg_restore.c:522 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "Повідомляти про помилки на <%s>.\n" + +#: pg_dump.c:1063 pg_dumpall.c:674 pg_restore.c:523 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: pg_dump.c:1082 pg_dumpall.c:499 +#, c-format +msgid "invalid client encoding \"%s\" specified" +msgstr "вказано неприпустиме клієнтське кодування \"%s\"" + +#: pg_dump.c:1228 +#, c-format +msgid "Synchronized snapshots on standby servers are not supported by this server version.\n" +"Run with --no-synchronized-snapshots instead if you do not need\n" +"synchronized snapshots." +msgstr "Синхронізовані знімки на резервному сервері не підтримуються цією версією сервера. Запустіть із параметром --no-synchronized-snapshots, якщо вам не потрібні синхронізовані знімки." + +#: pg_dump.c:1297 +#, c-format +msgid "invalid output format \"%s\" specified" +msgstr "вказано неприпустимий формат виводу \"%s\"" + +#: pg_dump.c:1335 +#, c-format +msgid "no matching schemas were found for pattern \"%s\"" +msgstr "не знайдено відповідних схем для візерунку \"%s\"" + +#: pg_dump.c:1382 +#, c-format +msgid "no matching foreign servers were found for pattern \"%s\"" +msgstr "не знайдено відповідних підлеглих серверів для шаблону \"%s\"" + +#: pg_dump.c:1445 +#, c-format +msgid "no matching tables were found for pattern \"%s\"" +msgstr "не знайдено відповідних таблиць для візерунку\"%s\"" + +#: pg_dump.c:1858 +#, c-format +msgid "dumping contents of table \"%s.%s\"" +msgstr "вивантажування змісту таблиці \"%s.%s\"" + +#: pg_dump.c:1965 +#, c-format +msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." +msgstr "Помилка вивантажування змісту таблиці \"%s\": помилка в PQgetCopyData()." + +#: pg_dump.c:1966 pg_dump.c:1976 +#, c-format +msgid "Error message from server: %s" +msgstr "Повідомлення про помилку від сервера: %s" + +#: pg_dump.c:1967 pg_dump.c:1977 +#, c-format +msgid "The command was: %s" +msgstr "Команда була: %s" + +#: pg_dump.c:1975 +#, c-format +msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." +msgstr "Помилка вивантажування змісту таблиці \"%s\": помилка в PQgetResult(). " + +#: pg_dump.c:2731 +#, c-format +msgid "saving database definition" +msgstr "збереження визначення бази даних" + +#: pg_dump.c:3203 +#, c-format +msgid "saving encoding = %s" +msgstr "збереження кодування = %s" + +#: pg_dump.c:3228 +#, c-format +msgid "saving standard_conforming_strings = %s" +msgstr "збереження standard_conforming_strings = %s" + +#: pg_dump.c:3267 +#, c-format +msgid "could not parse result of current_schemas()" +msgstr "не вдалося проаналізувати результат current_schemas()" + +#: pg_dump.c:3286 +#, c-format +msgid "saving search_path = %s" +msgstr "збереження search_path = %s" + +#: pg_dump.c:3326 +#, c-format +msgid "reading large objects" +msgstr "читання великих об’єктів" + +#: pg_dump.c:3508 +#, c-format +msgid "saving large objects" +msgstr "збереження великих об’єктів" + +#: pg_dump.c:3554 +#, c-format +msgid "error reading large object %u: %s" +msgstr "помилка читання великих об’єктів %u: %s" + +#: pg_dump.c:3606 +#, c-format +msgid "reading row security enabled for table \"%s.%s\"" +msgstr "читання рядка безпеки активовано для таблиці \"%s.%s\"" + +#: pg_dump.c:3637 +#, c-format +msgid "reading policies for table \"%s.%s\"" +msgstr "читання політики для таблиці \"%s.%s\"" + +#: pg_dump.c:3789 +#, c-format +msgid "unexpected policy command type: %c" +msgstr "неочікуваний тип команди в політиці: %c" + +#: pg_dump.c:3940 +#, c-format +msgid "owner of publication \"%s\" appears to be invalid" +msgstr "власник публікації \"%s\" здається недійсним" + +#: pg_dump.c:4085 +#, c-format +msgid "reading publication membership for table \"%s.%s\"" +msgstr "читання членства публікації для таблиці \"%s.%s\"" + +#: pg_dump.c:4228 +#, c-format +msgid "subscriptions not dumped because current user is not a superuser" +msgstr "підписки не вивантажені через те, що чинний користувач не є суперкористувачем" + +#: pg_dump.c:4282 +#, c-format +msgid "owner of subscription \"%s\" appears to be invalid" +msgstr "власник підписки \"%s\" є недійсним" + +#: pg_dump.c:4326 +#, c-format +msgid "could not parse subpublications array" +msgstr "не вдалося аналізувати масив підпублікацій" + +#: pg_dump.c:4648 +#, c-format +msgid "could not find parent extension for %s %s" +msgstr "не вдалося знайти батьківський елемент для %s %s" + +#: pg_dump.c:4780 +#, c-format +msgid "owner of schema \"%s\" appears to be invalid" +msgstr "власник схеми \"%s\" виглядає недійсним" + +#: pg_dump.c:4803 +#, c-format +msgid "schema with OID %u does not exist" +msgstr "схема з OID %u не існує" + +#: pg_dump.c:5128 +#, c-format +msgid "owner of data type \"%s\" appears to be invalid" +msgstr "власник типу даних \"%s\" здається недійсним" + +#: pg_dump.c:5213 +#, c-format +msgid "owner of operator \"%s\" appears to be invalid" +msgstr "власник оператора \"%s\" здається недійсним" + +#: pg_dump.c:5515 +#, c-format +msgid "owner of operator class \"%s\" appears to be invalid" +msgstr "власник класу операторів \"%s\" здається недійсним" + +#: pg_dump.c:5599 +#, c-format +msgid "owner of operator family \"%s\" appears to be invalid" +msgstr "власник сімейства операторів \"%s\" здається недійсним" + +#: pg_dump.c:5768 +#, c-format +msgid "owner of aggregate function \"%s\" appears to be invalid" +msgstr "власник агрегатної функції \"%s\" є недійсним" + +#: pg_dump.c:6028 +#, c-format +msgid "owner of function \"%s\" appears to be invalid" +msgstr "власник функції \"%s\" здається недійсним" + +#: pg_dump.c:6856 +#, c-format +msgid "owner of table \"%s\" appears to be invalid" +msgstr "власник таблиці \"%s\" здається недійсним" + +#: pg_dump.c:6898 pg_dump.c:17376 +#, c-format +msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" +msgstr "помилка цілісності, за OID %u не вдалося знайти батьківську таблицю послідовності з OID %u" + +#: pg_dump.c:7040 +#, c-format +msgid "reading indexes for table \"%s.%s\"" +msgstr "читання індексів таблиці \"%s.%s\"" + +#: pg_dump.c:7455 +#, c-format +msgid "reading foreign key constraints for table \"%s.%s\"" +msgstr "читання обмежень зовнішніх ключів таблиці \"%s.%s\"" + +#: pg_dump.c:7736 +#, c-format +msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" +msgstr "помилка цілісності, за OID %u не вдалося знайти батьківську таблицю для запису pg_rewrite з OID %u" + +#: pg_dump.c:7819 +#, c-format +msgid "reading triggers for table \"%s.%s\"" +msgstr "читання тригерів таблиці \"%s.%s\"" + +#: pg_dump.c:7952 +#, c-format +msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" +msgstr "запит не повернув ім'я цільової таблиці для тригера зовнішнього ключа \"%s\" в таблиці \"%s\" (OID цільової таблиці: %u)" + +#: pg_dump.c:8507 +#, c-format +msgid "finding the columns and types of table \"%s.%s\"" +msgstr "пошук стовпців і типів таблиці \"%s.%s\"" + +#: pg_dump.c:8643 +#, c-format +msgid "invalid column numbering in table \"%s\"" +msgstr "неприпустима нумерація стовпців у таблиці \"%s\"" + +#: pg_dump.c:8680 +#, c-format +msgid "finding default expressions of table \"%s.%s\"" +msgstr "пошук виразів за замовчуванням для таблиці \"%s.%s\"" + +#: pg_dump.c:8702 +#, c-format +msgid "invalid adnum value %d for table \"%s\"" +msgstr "неприпустиме значення adnum %d для таблиці \"%s\"" + +#: pg_dump.c:8767 +#, c-format +msgid "finding check constraints for table \"%s.%s\"" +msgstr "пошук обмежень-перевірок для таблиці \"%s.%s\"" + +#: pg_dump.c:8816 +#, c-format +msgid "expected %d check constraint on table \"%s\" but found %d" +msgid_plural "expected %d check constraints on table \"%s\" but found %d" +msgstr[0] "очікувалось %d обмеження-перевірка для таблиці \"%s\", але знайдено %d" +msgstr[1] "очікувалось %d обмеження-перевірки для таблиці \"%s\", але знайдено %d" +msgstr[2] "очікувалось %d обмежень-перевірок для таблиці \"%s\", але знайдено %d" +msgstr[3] "очікувалось %d обмежень-перевірок для таблиці \"%s\", але знайдено %d" + +#: pg_dump.c:8820 +#, c-format +msgid "(The system catalogs might be corrupted.)" +msgstr "(Можливо, системні каталоги пошкоджені.)" + +#: pg_dump.c:10406 +#, c-format +msgid "typtype of data type \"%s\" appears to be invalid" +msgstr "typtype типу даних \"%s\" має неприпустимий вигляд" + +#: pg_dump.c:11760 +#, c-format +msgid "bogus value in proargmodes array" +msgstr "неприпустиме значення в масиві proargmodes" + +#: pg_dump.c:12132 +#, c-format +msgid "could not parse proallargtypes array" +msgstr "не вдалося аналізувати масив proallargtypes" + +#: pg_dump.c:12148 +#, c-format +msgid "could not parse proargmodes array" +msgstr "не вдалося аналізувати масив proargmodes" + +#: pg_dump.c:12162 +#, c-format +msgid "could not parse proargnames array" +msgstr "не вдалося аналізувати масив proargnames" + +#: pg_dump.c:12173 +#, c-format +msgid "could not parse proconfig array" +msgstr "не вдалося аналізувати масив proconfig" + +#: pg_dump.c:12253 +#, c-format +msgid "unrecognized provolatile value for function \"%s\"" +msgstr "нерозпізнане значення provolatile для функції \"%s\"" + +#: pg_dump.c:12303 pg_dump.c:14361 +#, c-format +msgid "unrecognized proparallel value for function \"%s\"" +msgstr "нерозпізнане значення proparallel для функції \"%s\"" + +#: pg_dump.c:12442 pg_dump.c:12551 pg_dump.c:12558 +#, c-format +msgid "could not find function definition for function with OID %u" +msgstr "не вдалося знайти визначення функції для функції з OID %u" + +#: pg_dump.c:12481 +#, c-format +msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" +msgstr "неприпустиме значення в полі pg_cast.castfunc або pg_cast.castmethod" + +#: pg_dump.c:12484 +#, c-format +msgid "bogus value in pg_cast.castmethod field" +msgstr "неприпустиме значення в полі pg_cast.castmethod" + +#: pg_dump.c:12577 +#, c-format +msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" +msgstr "неприпустиме визначення перетворення, як мінімум одне з trffromsql і trftosql повинно бути ненульовим" + +#: pg_dump.c:12594 +#, c-format +msgid "bogus value in pg_transform.trffromsql field" +msgstr "неприпустиме значення в полі pg_transform.trffromsql" + +#: pg_dump.c:12615 +#, c-format +msgid "bogus value in pg_transform.trftosql field" +msgstr "неприпустиме значення в полі pg_transform.trftosql" + +#: pg_dump.c:12931 +#, c-format +msgid "could not find operator with OID %s" +msgstr "не вдалося знайти оператора з OID %s" + +#: pg_dump.c:12999 +#, c-format +msgid "invalid type \"%c\" of access method \"%s\"" +msgstr "неприпустимий тип \"%c\" методу доступу \"%s\"" + +#: pg_dump.c:13753 +#, c-format +msgid "unrecognized collation provider: %s" +msgstr "нерозпізнаний постачальник правил сортування: %s" + +#: pg_dump.c:14225 +#, c-format +msgid "aggregate function %s could not be dumped correctly for this database version; ignored" +msgstr "агрегатна функція %s не може бути вивантажена правильно для цієї версії бази даних; пропускається" + +#: pg_dump.c:14280 +#, c-format +msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" +msgstr "нерозпізнане значення aggfinalmodify для агрегату \"%s\"" + +#: pg_dump.c:14336 +#, c-format +msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" +msgstr "нерозпізнане значення aggmfinalmodify для агрегату \"%s\"" + +#: pg_dump.c:15058 +#, c-format +msgid "unrecognized object type in default privileges: %d" +msgstr "нерозпізнаний тип об’єкта у стандартному праві: %d" + +#: pg_dump.c:15076 +#, c-format +msgid "could not parse default ACL list (%s)" +msgstr "не вдалося проаналізувати стандартний ACL список (%s)" + +#: pg_dump.c:15161 +#, c-format +msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" +msgstr "не вдалося аналізувати початковий список GRANT ACL (%s) або початковий список REVOKE ACL (%s) для об'єкта \"%s\" (%s)" + +#: pg_dump.c:15169 +#, c-format +msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" +msgstr "не вдалося аналізувати список GRANT ACL (%s) або список REVOKE ACL (%s) для об'єкта \"%s\" (%s)" + +#: pg_dump.c:15684 +#, c-format +msgid "query to obtain definition of view \"%s\" returned no data" +msgstr "запит на отримання визначення перегляду \"%s\" не повернув дані" + +#: pg_dump.c:15687 +#, c-format +msgid "query to obtain definition of view \"%s\" returned more than one definition" +msgstr "запит на отримання визначення перегляду \"%s\" повернув більше, ніж одне визначення" + +#: pg_dump.c:15694 +#, c-format +msgid "definition of view \"%s\" appears to be empty (length zero)" +msgstr "визначення перегляду \"%s\" пусте (довжина нуль)" + +#: pg_dump.c:15776 +#, c-format +msgid "WITH OIDS is not supported anymore (table \"%s\")" +msgstr "WITH OIDS більше не підтримується (таблиця\"%s\")" + +#: pg_dump.c:16256 +#, c-format +msgid "invalid number of parents %d for table \"%s\"" +msgstr "неприпустиме число батьківських елементів %d для таблиці \"%s\"" + +#: pg_dump.c:16579 +#, c-format +msgid "invalid column number %d for table \"%s\"" +msgstr "неприпустиме число стовпців %d для таблиці \"%s\"" + +#: pg_dump.c:16864 +#, c-format +msgid "missing index for constraint \"%s\"" +msgstr "пропущено індекс для обмеження \"%s\"" + +#: pg_dump.c:17089 +#, c-format +msgid "unrecognized constraint type: %c" +msgstr "нерозпізнаний тип обмеження: %c" + +#: pg_dump.c:17221 pg_dump.c:17441 +#, c-format +msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" +msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" +msgstr[0] "запит на отримання даних послідовності \"%s\" повернув %d рядки (очікувалося 1)" +msgstr[1] "запит на отримання даних послідовності \"%s\" повернув %d рядки (очікувалося 1)" +msgstr[2] "запит на отримання даних послідовності \"%s\" повернув %d рядків (очікувалося 1)" +msgstr[3] "запит на отримання даних послідовності \"%s\" повернув %d рядків (очікувалося 1)" + +#: pg_dump.c:17255 +#, c-format +msgid "unrecognized sequence type: %s" +msgstr "нерозпізнаний тип послідовності: %s" + +#: pg_dump.c:17539 +#, c-format +msgid "unexpected tgtype value: %d" +msgstr "неочікуване значення tgtype: %d" + +#: pg_dump.c:17613 +#, c-format +msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" +msgstr "неприпустимий рядок аргументу (%s) для тригера \"%s\" у таблиці \"%s\"" + +#: pg_dump.c:17849 +#, c-format +msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" +msgstr "помилка запиту на отримання правила \"%s\" для таблиці \"%s\": повернено неправильне число рядків " + +#: pg_dump.c:18011 +#, c-format +msgid "could not find referenced extension %u" +msgstr "не вдалося знайти згадане розширення %u" + +#: pg_dump.c:18225 +#, c-format +msgid "reading dependency data" +msgstr "читання даних залежності" + +#: pg_dump.c:18318 +#, c-format +msgid "no referencing object %u %u" +msgstr "немає об’єкту посилання %u %u" + +#: pg_dump.c:18329 +#, c-format +msgid "no referenced object %u %u" +msgstr "немає посилання на об'єкт %u %u" + +#: pg_dump.c:18702 +#, c-format +msgid "could not parse reloptions array" +msgstr "неможливо розібрати масив reloptions" + +#: pg_dump_sort.c:360 +#, c-format +msgid "invalid dumpId %d" +msgstr "неприпустимий dumpId %d" + +#: pg_dump_sort.c:366 +#, c-format +msgid "invalid dependency %d" +msgstr "неприпустима залежність %d" + +#: pg_dump_sort.c:599 +#, c-format +msgid "could not identify dependency loop" +msgstr "не вдалося ідентифікувати цикл залежності" + +#: pg_dump_sort.c:1170 +#, c-format +msgid "there are circular foreign-key constraints on this table:" +msgid_plural "there are circular foreign-key constraints among these tables:" +msgstr[0] "у наступній таблиці зациклені зовнішні ключі:" +msgstr[1] "у наступних таблицях зациклені зовнішні ключі:" +msgstr[2] "у наступних таблицях зациклені зовнішні ключі:" +msgstr[3] "у наступних таблицях зациклені зовнішні ключі:" + +#: pg_dump_sort.c:1174 pg_dump_sort.c:1194 +#, c-format +msgid " %s" +msgstr " %s" + +#: pg_dump_sort.c:1175 +#, c-format +msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." +msgstr "Ви не зможете відновити дамп без використання --disable-triggers або тимчасово розірвати обмеження." + +#: pg_dump_sort.c:1176 +#, c-format +msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." +msgstr "Можливо, використання повного вивантажування замість --data-only вивантажування допоможе уникнути цієї проблеми." + +#: pg_dump_sort.c:1188 +#, c-format +msgid "could not resolve dependency loop among these items:" +msgstr "не вдалося вирішити цикл залежності серед цих елементів:" + +#: pg_dumpall.c:199 +#, c-format +msgid "The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "Програма \"%s\" потрібна для %s, але не знайдена в тому ж каталозі, що й \"%s\".\n" +"Перевірте вашу установку." + +#: pg_dumpall.c:204 +#, c-format +msgid "The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "Програма \"%s\" була знайдена \"%s\", але не була тієї ж версії, що %s.\n" +"Перевірте вашу установку." + +#: pg_dumpall.c:356 +#, c-format +msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" +msgstr "параметр --exclude-database не можна використовувати разом з -g/--globals-only, -r/--roles-only або -t/--tablespaces-only" + +#: pg_dumpall.c:365 +#, c-format +msgid "options -g/--globals-only and -r/--roles-only cannot be used together" +msgstr "параметри -g/--globals-only і -r/--roles-only не можна використовувати разом" + +#: pg_dumpall.c:373 +#, c-format +msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" +msgstr "параметри -g/--globals-only і -t/--tablespaces-only не можна використовувати разом" + +#: pg_dumpall.c:387 +#, c-format +msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" +msgstr "параметри -r/--roles-only і -t/--tablespaces-only не можна використовувати разом" + +#: pg_dumpall.c:448 pg_dumpall.c:1754 +#, c-format +msgid "could not connect to database \"%s\"" +msgstr "не вдалося зв'язатися з базою даних \"%s\"" + +#: pg_dumpall.c:462 +#, c-format +msgid "could not connect to databases \"postgres\" or \"template1\"\n" +"Please specify an alternative database." +msgstr "не вдалося зв'язатися з базами даних \"postgres\" або \"template1\"\n" +"Будь ласка, вкажіть альтернативну базу даних." + +#: pg_dumpall.c:616 +#, c-format +msgid "%s extracts a PostgreSQL database cluster into an SQL script file.\n\n" +msgstr "%s експортує кластер баз даних PostgreSQL до SQL-скрипту.\n\n" + +#: pg_dumpall.c:618 +#, c-format +msgid " %s [OPTION]...\n" +msgstr " %s: [OPTION]...\n" + +#: pg_dumpall.c:621 +#, c-format +msgid " -f, --file=FILENAME output file name\n" +msgstr " -f, --file=FILENAME ім'я вихідного файлу\n" + +#: pg_dumpall.c:628 +#, c-format +msgid " -c, --clean clean (drop) databases before recreating\n" +msgstr " -c, --clean очистити (видалити) бази даних перед відтворенням\n" + +#: pg_dumpall.c:630 +#, c-format +msgid " -g, --globals-only dump only global objects, no databases\n" +msgstr " -g, --globals-only вивантажувати лише глобальні об’єкти, не бази даних\n" + +#: pg_dumpall.c:631 pg_restore.c:485 +#, c-format +msgid " -O, --no-owner skip restoration of object ownership\n" +msgstr " -O, --no-owner пропускається відновлення форми власності об’єктом\n" + +#: pg_dumpall.c:632 +#, c-format +msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" +msgstr " -r, --roles-only вивантажувати лише ролі, не бази даних або табличні простори\n" + +#: pg_dumpall.c:634 +#, c-format +msgid " -S, --superuser=NAME superuser user name to use in the dump\n" +msgstr " -S, --superuser=NAME ім'я суперкористувача для використання при вивантажуванні\n" + +#: pg_dumpall.c:635 +#, c-format +msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" +msgstr " -t, --tablespaces-only вивантажувати лише табличні простори, не бази даних або ролі\n" + +#: pg_dumpall.c:641 +#, c-format +msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" +msgstr " --exclude-database=PATTERN виключити бази даних, ім'я яких відповідає PATTERN\n" + +#: pg_dumpall.c:648 +#, c-format +msgid " --no-role-passwords do not dump passwords for roles\n" +msgstr " --no-role-passwords не вивантажувати паролі для ролей\n" + +#: pg_dumpall.c:662 +#, c-format +msgid " -d, --dbname=CONNSTR connect using connection string\n" +msgstr " -d, --dbname=CONNSTR підключення з використанням рядку підключення \n" + +#: pg_dumpall.c:664 +#, c-format +msgid " -l, --database=DBNAME alternative default database\n" +msgstr " -l, --database=DBNAME альтернативна база даних за замовчуванням\n" + +#: pg_dumpall.c:671 +#, c-format +msgid "\n" +"If -f/--file is not used, then the SQL script will be written to the standard\n" +"output.\n\n" +msgstr "\n" +"Якщо -f/--file не використовується, тоді SQL- сценарій буде записаний до стандартного виводу.\n\n" + +#: pg_dumpall.c:877 +#, c-format +msgid "role name starting with \"pg_\" skipped (%s)" +msgstr "пропущено ім’я ролі, що починається з \"pg_\" (%s)" + +#: pg_dumpall.c:1278 +#, c-format +msgid "could not parse ACL list (%s) for tablespace \"%s\"" +msgstr "не вдалося аналізувати список ACL (%s) для табличного простору \"%s\"" + +#: pg_dumpall.c:1495 +#, c-format +msgid "excluding database \"%s\"" +msgstr "виключаємо базу даних \"%s\"" + +#: pg_dumpall.c:1499 +#, c-format +msgid "dumping database \"%s\"" +msgstr "вивантажуємо базу даних \"%s\"" + +#: pg_dumpall.c:1531 +#, c-format +msgid "pg_dump failed on database \"%s\", exiting" +msgstr "помилка pg_dump для бази даних \"%s\", завершення роботи" + +#: pg_dumpall.c:1540 +#, c-format +msgid "could not re-open the output file \"%s\": %m" +msgstr "не вдалося повторно відкрити файл виводу \"%s\": %m" + +#: pg_dumpall.c:1584 +#, c-format +msgid "running \"%s\"" +msgstr "виконується \"%s\"" + +#: pg_dumpall.c:1775 +#, c-format +msgid "could not connect to database \"%s\": %s" +msgstr "не вдалося підключитись до бази даних \"%s\": %s" + +#: pg_dumpall.c:1805 +#, c-format +msgid "could not get server version" +msgstr "не вдалося отримати версію серверу" + +#: pg_dumpall.c:1811 +#, c-format +msgid "could not parse server version \"%s\"" +msgstr "не вдалося аналізувати версію серверу \"%s\"" + +#: pg_dumpall.c:1883 pg_dumpall.c:1906 +#, c-format +msgid "executing %s" +msgstr "виконується %s" + +#: pg_restore.c:308 +#, c-format +msgid "one of -d/--dbname and -f/--file must be specified" +msgstr "необхідно вказати один з -d/--dbname або -f/--file" + +#: pg_restore.c:317 +#, c-format +msgid "options -d/--dbname and -f/--file cannot be used together" +msgstr "параметри -d/--dbname і -f/--file не можуть використовуватись разом" + +#: pg_restore.c:343 +#, c-format +msgid "options -C/--create and -1/--single-transaction cannot be used together" +msgstr "параметри -C/--create і -1/--single-transaction не можуть використовуватись разом" + +#: pg_restore.c:357 +#, c-format +msgid "maximum number of parallel jobs is %d" +msgstr "максимальна кількість паралельних завдань: %d" + +#: pg_restore.c:366 +#, c-format +msgid "cannot specify both --single-transaction and multiple jobs" +msgstr "параметр --single-transaction допускається лише з одним завданням" + +#: pg_restore.c:408 +#, c-format +msgid "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" +msgstr "нерозпізнаний формат архіву \"%s\"; будь ласка, вкажіть \"c\", \"d\" або \"t\"" + +#: pg_restore.c:448 +#, c-format +msgid "errors ignored on restore: %d" +msgstr "при відновленні проігноровано помилок: %d" + +#: pg_restore.c:461 +#, c-format +msgid "%s restores a PostgreSQL database from an archive created by pg_dump.\n\n" +msgstr "%s відновлює базу даних PostgreSQL з архіву, створеного командою pg_dump.\n\n" + +#: pg_restore.c:463 +#, c-format +msgid " %s [OPTION]... [FILE]\n" +msgstr " %s [OPTION]... [FILE]\n" + +#: pg_restore.c:466 +#, c-format +msgid " -d, --dbname=NAME connect to database name\n" +msgstr " -d, --dbname=NAME підключитись до вказаної бази даних\n" + +#: pg_restore.c:467 +#, c-format +msgid " -f, --file=FILENAME output file name (- for stdout)\n" +msgstr " -f, --file=FILENAME ім'я файлу виводу (- для stdout)\n" + +#: pg_restore.c:468 +#, c-format +msgid " -F, --format=c|d|t backup file format (should be automatic)\n" +msgstr " -F, --format=c|d|t формат файлу резервної копії (розпізнається автоматично)\n" + +#: pg_restore.c:469 +#, c-format +msgid " -l, --list print summarized TOC of the archive\n" +msgstr " -l, --list вивести короткий зміст архіву\n" + +#: pg_restore.c:470 +#, c-format +msgid " -v, --verbose verbose mode\n" +msgstr " -v, --verbose детальний режим\n" + +#: pg_restore.c:471 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію, потім вийти\n" + +#: pg_restore.c:472 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку, потім вийти\n" + +#: pg_restore.c:474 +#, c-format +msgid "\n" +"Options controlling the restore:\n" +msgstr "\n" +"Параметри, що керують відновленням:\n" + +#: pg_restore.c:475 +#, c-format +msgid " -a, --data-only restore only the data, no schema\n" +msgstr " -a, --data-only відновити лише дані, без схеми\n" + +#: pg_restore.c:477 +#, c-format +msgid " -C, --create create the target database\n" +msgstr " -C, --create створити цільову базу даних\n" + +#: pg_restore.c:478 +#, c-format +msgid " -e, --exit-on-error exit on error, default is to continue\n" +msgstr " -e, --exit-on-error вийти при помилці, продовжувати за замовчуванням\n" + +#: pg_restore.c:479 +#, c-format +msgid " -I, --index=NAME restore named index\n" +msgstr " -I, --index=NAME відновити вказаний індекс\n" + +#: pg_restore.c:480 +#, c-format +msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" +msgstr " -j, --jobs=NUM щоб виконати відновлення, використайте ці паралельні завдання\n" + +#: pg_restore.c:481 +#, c-format +msgid " -L, --use-list=FILENAME use table of contents from this file for\n" +" selecting/ordering output\n" +msgstr " -L, --use-list=FILENAME використовувати зміст з цього файлу для \n" +" вибору/упорядкування даних\n" + +#: pg_restore.c:483 +#, c-format +msgid " -n, --schema=NAME restore only objects in this schema\n" +msgstr " -n, --schema=NAME відновити об'єкти лише в цій схемі\n" + +#: pg_restore.c:484 +#, c-format +msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" +msgstr " -N, --exclude-schema=NAME не відновлювати об'єкти в цій схемі\n" + +#: pg_restore.c:486 +#, c-format +msgid " -P, --function=NAME(args) restore named function\n" +msgstr " -P, --function=NAME(args) відновити вказану функцію\n" + +#: pg_restore.c:487 +#, c-format +msgid " -s, --schema-only restore only the schema, no data\n" +msgstr " -s, --schema-only відновити лише схему, без даних\n" + +#: pg_restore.c:488 +#, c-format +msgid " -S, --superuser=NAME superuser user name to use for disabling triggers\n" +msgstr " -S, --superuser=NAME ім'я суперкористувача для вимкнення тригерів\n" + +#: pg_restore.c:489 +#, c-format +msgid " -t, --table=NAME restore named relation (table, view, etc.)\n" +msgstr " -t, --table=NAME відновити вказане відношення (таблицю, подання і т. д.)\n" + +#: pg_restore.c:490 +#, c-format +msgid " -T, --trigger=NAME restore named trigger\n" +msgstr " -T, --trigger=NAME відновити вказаний тригер\n" + +#: pg_restore.c:491 +#, c-format +msgid " -x, --no-privileges skip restoration of access privileges (grant/revoke)\n" +msgstr " -x, --no-privileges пропустити відновлення прав доступу (grant/revoke)\n" + +#: pg_restore.c:492 +#, c-format +msgid " -1, --single-transaction restore as a single transaction\n" +msgstr " -1, --single-transaction відновити в одній транзакції\n" + +#: pg_restore.c:494 +#, c-format +msgid " --enable-row-security enable row security\n" +msgstr " --enable-row-security активувати захист на рівні рядків\n" + +#: pg_restore.c:496 +#, c-format +msgid " --no-comments do not restore comments\n" +msgstr " --no-comments не відновлювати коментарі\n" + +#: pg_restore.c:497 +#, c-format +msgid " --no-data-for-failed-tables do not restore data of tables that could not be\n" +" created\n" +msgstr " --no-data-for-failed-tables не відновлювати дані таблиць, які не вдалося створити\n" + +#: pg_restore.c:499 +#, c-format +msgid " --no-publications do not restore publications\n" +msgstr " --no-publications не відновлювати публікації \n" + +#: pg_restore.c:500 +#, c-format +msgid " --no-security-labels do not restore security labels\n" +msgstr " --no-security-labels не відновлювати мітки безпеки \n" + +#: pg_restore.c:501 +#, c-format +msgid " --no-subscriptions do not restore subscriptions\n" +msgstr " --no-subscriptions не відновлювати підписки\n" + +#: pg_restore.c:502 +#, c-format +msgid " --no-tablespaces do not restore tablespace assignments\n" +msgstr " --no-tablespaces не відновлювати завдання табличного простору\n" + +#: pg_restore.c:503 +#, c-format +msgid " --section=SECTION restore named section (pre-data, data, or post-data)\n" +msgstr " --section=SECTION відновлювати названий розділ (pre-data, data або post-data)\n" + +#: pg_restore.c:516 +#, c-format +msgid " --role=ROLENAME do SET ROLE before restore\n" +msgstr " --role=ROLENAME виконати SET ROLE перед відновленням\n" + +#: pg_restore.c:518 +#, c-format +msgid "\n" +"The options -I, -n, -N, -P, -t, -T, and --section can be combined and specified\n" +"multiple times to select multiple objects.\n" +msgstr "\n" +"Параметри -I, -n, -N, -P, -t, -T, і --section можна групувати і вказувати\n" +"декілька разів для вибору декількох об'єктів.\n" + +#: pg_restore.c:521 +#, c-format +msgid "\n" +"If no input file name is supplied, then standard input is used.\n\n" +msgstr "\n" +"Якщо ім'я файлу введеня не вказано, тоді використовується стандартне введення.\n\n" + +#~ msgid "ftell mismatch with expected position -- ftell used" +#~ msgstr "невідповідність позиції ftell з очікуваною -- використовується ftell" + +#~ msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive" +#~ msgstr "не вдалося знайти в архіві блок з ідентифікатором %d -- можливо, через непослідовність запиту відновлення, який не можна обробити через нестачу зсувів даних в архіві" + diff --git a/src/bin/pg_resetwal/nls.mk b/src/bin/pg_resetwal/nls.mk index cc40875b482b9..5b54c18a3c9d2 100644 --- a/src/bin/pg_resetwal/nls.mk +++ b/src/bin/pg_resetwal/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_resetwal/nls.mk CATALOG_NAME = pg_resetwal -AVAIL_LANGUAGES = cs de es fr it ja ko pl pt_BR ru sv tr zh_CN +AVAIL_LANGUAGES = cs de es fr it ja ko pl pt_BR ru sv tr uk zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) pg_resetwal.c ../../common/restricted_token.c GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) diff --git a/src/bin/pg_resetwal/po/cs.po b/src/bin/pg_resetwal/po/cs.po index 53f0e4b355a30..f1ec4d9da15c2 100644 --- a/src/bin/pg_resetwal/po/cs.po +++ b/src/bin/pg_resetwal/po/cs.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_resetxlog-cs (PostgreSQL 9.3)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:14+0000\n" -"PO-Revision-Date: 2019-09-27 20:03+0200\n" +"POT-Creation-Date: 2020-10-31 16:15+0000\n" +"PO-Revision-Date: 2020-10-31 21:25+0100\n" "Last-Translator: Tomas Vondra \n" "Language-Team: Czech \n" "Language: cs\n" @@ -16,55 +16,59 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format -#| msgid "fatal\n" msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "warning: " -#: ../../common/restricted_token.c:69 +#: ../../common/restricted_token.c:64 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "na této platformě nelze vytvářet vyhrazené tokeny" +msgid "could not load library \"%s\": error code %lu" +msgstr "nelze načíst knihovnu \"%s\": kód chyby %lu" -#: ../../common/restricted_token.c:78 +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "na této platformě nelze vytvářet vyhrazené tokeny: kód chyby %lu" + +#: ../../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "nelze otevřít process token: chybový kód %lu" -#: ../../common/restricted_token.c:91 +#: ../../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "nelze alokovat SIDs: chybový kód %lu" -#: ../../common/restricted_token.c:110 +#: ../../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "nelze vytvořit vyhrazený token: chybový kód %lu" -#: ../../common/restricted_token.c:131 +#: ../../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "nelze spustit proces pro příkaz \"%s\": chybový kód %lu" -#: ../../common/restricted_token.c:169 +#: ../../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "nelze znovu spustit s vyhrazeným tokenem: chybový kód %lu" -#: ../../common/restricted_token.c:185 +#: ../../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "nelze získat návratový kód ze subprocesu: chybový kód %lu" @@ -159,7 +163,7 @@ msgstr "nelze zjistit přístupová práva adresáře \"%s\": %m" msgid "could not change directory to \"%s\": %m" msgstr "nelze změnit adresář na \"%s\" : %m" -#: pg_resetwal.c:381 pg_resetwal.c:545 pg_resetwal.c:602 +#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "nelze otevřít soubor \"%s\" pro čtení: %m" @@ -199,27 +203,27 @@ msgstr "" msgid "Write-ahead log reset\n" msgstr "Transakční log resetován\n" -#: pg_resetwal.c:554 +#: pg_resetwal.c:553 #, c-format msgid "unexpected empty file \"%s\"" msgstr "neočekávaný prázdný soubor \"%s\"" -#: pg_resetwal.c:556 pg_resetwal.c:618 +#: pg_resetwal.c:555 pg_resetwal.c:611 #, c-format msgid "could not read file \"%s\": %m" msgstr "nelze číst soubor \"%s\": %m" -#: pg_resetwal.c:571 +#: pg_resetwal.c:564 #, c-format msgid "data directory is of wrong version" msgstr "datový adresář pochází z nesprávné verze" -#: pg_resetwal.c:572 +#: pg_resetwal.c:565 #, c-format msgid "File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\"." msgstr "Soubor \"%s\" obsahuje \"%s\", což je nekompatibilní s verzí \"%s\" tohoto programu." -#: pg_resetwal.c:605 +#: pg_resetwal.c:598 #, c-format msgid "" "If you are sure the data directory path is correct, execute\n" @@ -230,12 +234,12 @@ msgstr "" " touch %s\n" "a zkuste to znovu." -#: pg_resetwal.c:636 +#: pg_resetwal.c:629 #, c-format msgid "pg_control exists but has invalid CRC; proceed with caution" msgstr "pg_control existuje, ale s neplatným kontrolním součtem CRC; postupujte opatrně" -#: pg_resetwal.c:645 +#: pg_resetwal.c:638 #, c-format msgid "pg_control specifies invalid WAL segment size (%d byte); proceed with caution" msgid_plural "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution" @@ -243,12 +247,12 @@ msgstr[0] "pg_control obsahuje neplatnou velikost WAL segmentu (%d byte); pokra msgstr[1] "pg_control obsahuje neplatnou velikost WAL segmentu (%d bytů); pokračujte obezřetně" msgstr[2] "pg_control obsahuje neplatnou velikost WAL segmentu (%d bytů); pokračujte obezřetně" -#: pg_resetwal.c:656 +#: pg_resetwal.c:649 #, c-format msgid "pg_control exists but is broken or wrong version; ignoring it" msgstr "pg_control existuje, ale je poškozen nebo neznámé verze; ignoruji to" -#: pg_resetwal.c:754 +#: pg_resetwal.c:744 #, c-format msgid "" "Guessed pg_control values:\n" @@ -257,7 +261,7 @@ msgstr "" "Odhadnuté hodnoty pg_controlu:\n" "\n" -#: pg_resetwal.c:756 +#: pg_resetwal.c:746 #, c-format msgid "" "Current pg_control values:\n" @@ -266,172 +270,169 @@ msgstr "" "Současné pg_control hodnoty:\n" "\n" -#: pg_resetwal.c:765 +#: pg_resetwal.c:748 #, c-format msgid "pg_control version number: %u\n" msgstr "Číslo verze pg_controlu: %u\n" -#: pg_resetwal.c:767 +#: pg_resetwal.c:750 #, c-format msgid "Catalog version number: %u\n" msgstr "Číslo verze katalogu: %u\n" -#: pg_resetwal.c:769 +#: pg_resetwal.c:752 #, c-format -msgid "Database system identifier: %s\n" -msgstr "Identifikátor databázového systému: %s\n" +msgid "Database system identifier: %llu\n" +msgstr "" +"Identifikátor databázového systému: %llu\n" +"\n" -#: pg_resetwal.c:771 +#: pg_resetwal.c:754 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "TimeLineID posledního checkpointu: %u\n" -#: pg_resetwal.c:773 +#: pg_resetwal.c:756 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "Poslední full_page_writes checkpointu: %s\n" -#: pg_resetwal.c:774 +#: pg_resetwal.c:757 msgid "off" msgstr "vypnuto" -#: pg_resetwal.c:774 +#: pg_resetwal.c:757 msgid "on" msgstr "zapnuto" -#: pg_resetwal.c:775 +#: pg_resetwal.c:758 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "NextXID posledního checkpointu: %u:%u\n" -#: pg_resetwal.c:778 +#: pg_resetwal.c:761 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "Poslední umístění NextOID checkpointu: %u\n" -#: pg_resetwal.c:780 +#: pg_resetwal.c:763 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId posledního checkpointu: %u\n" -#: pg_resetwal.c:782 +#: pg_resetwal.c:765 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset posledního checkpointu: %u\n" -#: pg_resetwal.c:784 +#: pg_resetwal.c:767 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID posledního checkpointu: %u\n" -#: pg_resetwal.c:786 +#: pg_resetwal.c:769 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "DB k oldestXID posledního checkpointu: %u\n" -#: pg_resetwal.c:788 +#: pg_resetwal.c:771 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID posledního checkpointu: %u\n" -#: pg_resetwal.c:790 +#: pg_resetwal.c:773 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid posledního checkpointu: %u\n" -#: pg_resetwal.c:792 +#: pg_resetwal.c:775 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "DB k oldestMulti posledního checkpointu: %u\n" -#: pg_resetwal.c:794 +#: pg_resetwal.c:777 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "oldestCommitTsXid posledního checkpointu: %u\n" -#: pg_resetwal.c:796 +#: pg_resetwal.c:779 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "newestCommitTsXid posledního checkpointu: %u\n" -#: pg_resetwal.c:798 +#: pg_resetwal.c:781 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Maximální zarovnání dat: %u\n" -#: pg_resetwal.c:801 +#: pg_resetwal.c:784 #, c-format msgid "Database block size: %u\n" msgstr "Velikost databázového bloku: %u\n" -#: pg_resetwal.c:803 +#: pg_resetwal.c:786 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Bloků v segmentu velké relace: %u\n" -#: pg_resetwal.c:805 +#: pg_resetwal.c:788 #, c-format msgid "WAL block size: %u\n" msgstr "Velikost WAL bloku: %u\n" -#: pg_resetwal.c:807 pg_resetwal.c:895 +#: pg_resetwal.c:790 pg_resetwal.c:876 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Bytů ve WAL segmentu: %u\n" -#: pg_resetwal.c:809 +#: pg_resetwal.c:792 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Maximální délka identifikátorů: %u\n" -#: pg_resetwal.c:811 +#: pg_resetwal.c:794 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Maximální počet sloupců v indexu: %u\n" -#: pg_resetwal.c:813 +#: pg_resetwal.c:796 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Maximální velikost úseku TOAST: %u\n" -#: pg_resetwal.c:815 +#: pg_resetwal.c:798 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Velikost large-object chunku: %u\n" -#: pg_resetwal.c:818 +#: pg_resetwal.c:801 #, c-format msgid "Date/time type storage: %s\n" msgstr "Způsob uložení typu date/time: %s\n" -#: pg_resetwal.c:819 +#: pg_resetwal.c:802 msgid "64-bit integers" msgstr "64-bitová čísla" -#: pg_resetwal.c:820 +#: pg_resetwal.c:803 #, c-format -msgid "Float4 argument passing: %s\n" -msgstr "Způsob předávání float4 hodnot: %s\n" +msgid "Float8 argument passing: %s\n" +msgstr "Způsob předávání float8 hodnot: %s\n" -#: pg_resetwal.c:821 pg_resetwal.c:823 +#: pg_resetwal.c:804 msgid "by reference" msgstr "odkazem" -#: pg_resetwal.c:821 pg_resetwal.c:823 +#: pg_resetwal.c:804 msgid "by value" msgstr "hodnotou" -#: pg_resetwal.c:822 -#, c-format -msgid "Float8 argument passing: %s\n" -msgstr "Způsob předávání float8 hodnot: %s\n" - -#: pg_resetwal.c:824 +#: pg_resetwal.c:805 #, c-format msgid "Data page checksum version: %u\n" msgstr "Verze kontrolních součtů datových stránek: %u\n" -#: pg_resetwal.c:838 +#: pg_resetwal.c:819 #, c-format msgid "" "\n" @@ -444,103 +445,102 @@ msgstr "" "Hodnoty které se změní:\n" "\n" -#: pg_resetwal.c:842 +#: pg_resetwal.c:823 #, c-format msgid "First log segment after reset: %s\n" msgstr "První log segment po resetu: %s\n" -#: pg_resetwal.c:846 +#: pg_resetwal.c:827 #, c-format msgid "NextMultiXactId: %u\n" msgstr "NextMultiXactId: %u\n" -#: pg_resetwal.c:848 +#: pg_resetwal.c:829 #, c-format msgid "OldestMultiXid: %u\n" msgstr "OldestMultiXid: %u\n" -#: pg_resetwal.c:850 +#: pg_resetwal.c:831 #, c-format msgid "OldestMulti's DB: %u\n" msgstr "DB k OldestMulti: %u\n" -#: pg_resetwal.c:856 +#: pg_resetwal.c:837 #, c-format msgid "NextMultiOffset: %u\n" msgstr "NextMultiOffset: %u\n" -#: pg_resetwal.c:862 +#: pg_resetwal.c:843 #, c-format msgid "NextOID: %u\n" msgstr "NextOID: %u\n" -#: pg_resetwal.c:868 +#: pg_resetwal.c:849 #, c-format msgid "NextXID: %u\n" msgstr "NextXID: %u\n" -#: pg_resetwal.c:870 +#: pg_resetwal.c:851 #, c-format msgid "OldestXID: %u\n" msgstr "OldestXID: %u\n" -#: pg_resetwal.c:872 +#: pg_resetwal.c:853 #, c-format msgid "OldestXID's DB: %u\n" msgstr "DB k OldestXID: %u\n" -#: pg_resetwal.c:878 +#: pg_resetwal.c:859 #, c-format msgid "NextXID epoch: %u\n" msgstr "NextXID epoch: %u\n" -#: pg_resetwal.c:884 +#: pg_resetwal.c:865 #, c-format msgid "oldestCommitTsXid: %u\n" msgstr "oldestCommitTsXid: %u\n" -#: pg_resetwal.c:889 +#: pg_resetwal.c:870 #, c-format msgid "newestCommitTsXid: %u\n" msgstr "newestCommitTsXid: %u\n" -#: pg_resetwal.c:975 pg_resetwal.c:1043 pg_resetwal.c:1090 +#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071 #, c-format msgid "could not open directory \"%s\": %m" msgstr "nelze otevřít adresář \"%s\": %m" -#: pg_resetwal.c:1010 pg_resetwal.c:1063 pg_resetwal.c:1113 +#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094 #, c-format msgid "could not read directory \"%s\": %m" msgstr "nelze číst z adresáře \"%s\": %m" -#: pg_resetwal.c:1016 pg_resetwal.c:1069 pg_resetwal.c:1119 +#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100 #, c-format msgid "could not close directory \"%s\": %m" msgstr "nelze zavřít adresář \"%s\": %m" -#: pg_resetwal.c:1055 pg_resetwal.c:1105 +#: pg_resetwal.c:1036 pg_resetwal.c:1086 #, c-format msgid "could not delete file \"%s\": %m" msgstr "nelze smazat soubor \"%s\": %m" -#: pg_resetwal.c:1186 +#: pg_resetwal.c:1167 #, c-format msgid "could not open file \"%s\": %m" msgstr "nelze otevřít soubor \"%s\": %m" -#: pg_resetwal.c:1196 pg_resetwal.c:1209 +#: pg_resetwal.c:1177 pg_resetwal.c:1190 #, c-format msgid "could not write file \"%s\": %m" msgstr "nelze zapsat soubor \"%s\": %m" -#: pg_resetwal.c:1216 +#: pg_resetwal.c:1197 #, c-format -#| msgid "%s: fsync error: %s\n" msgid "fsync error: %m" -msgstr "fsync error: " +msgstr "fsync error: %m" -#: pg_resetwal.c:1227 +#: pg_resetwal.c:1208 #, c-format msgid "" "%s resets the PostgreSQL write-ahead log.\n" @@ -549,7 +549,7 @@ msgstr "" "%s resetuje PostgreSQL transakční log.\n" "\n" -#: pg_resetwal.c:1228 +#: pg_resetwal.c:1209 #, c-format msgid "" "Usage:\n" @@ -560,12 +560,12 @@ msgstr "" " %s [VOLBA]... ADRESÁŘ\n" "\n" -#: pg_resetwal.c:1229 +#: pg_resetwal.c:1210 #, c-format msgid "Options:\n" msgstr "Přepínače:\n" -#: pg_resetwal.c:1230 +#: pg_resetwal.c:1211 #, c-format msgid "" " -c, --commit-timestamp-ids=XID,XID\n" @@ -576,131 +576,146 @@ msgstr "" " nastaví nejstarší a nejnovější s nastaveným\n" " commit timestamp (nula znamená beze změny)\n" -#: pg_resetwal.c:1233 +#: pg_resetwal.c:1214 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]ADRESÁŘ datový adresář\n" -#: pg_resetwal.c:1234 +#: pg_resetwal.c:1215 #, c-format msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n" msgstr " -e, --epoch=XIDEPOCH nastaví epochu následujícího ID transakce\n" -#: pg_resetwal.c:1235 +#: pg_resetwal.c:1216 #, c-format msgid " -f, --force force update to be done\n" msgstr " -f, --force vynutí provedení update\n" -#: pg_resetwal.c:1236 +#: pg_resetwal.c:1217 #, c-format msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n" msgstr " -l, --next-wal-file=WALFILE vynutí minimální počáteční WAL pozici pro nový transakční log\n" -#: pg_resetwal.c:1237 +#: pg_resetwal.c:1218 #, c-format msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n" msgstr " -m, --multixact-ids=MXID,MXID nastav další a nejstarší ID multitransakce\n" -#: pg_resetwal.c:1238 +#: pg_resetwal.c:1219 #, c-format msgid " -n, --dry-run no update, just show what would be done\n" msgstr " -n, --dry-run bez update, pouze ukáže co by bylo provedeno\n" -#: pg_resetwal.c:1239 +#: pg_resetwal.c:1220 #, c-format msgid " -o, --next-oid=OID set next OID\n" msgstr " -o, --next-oid=OID nastaví následující OID\n" -#: pg_resetwal.c:1240 +#: pg_resetwal.c:1221 #, c-format msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n" msgstr " -O, --multixact-offset=OFFSET nastaví offset následující multitransakce\n" -#: pg_resetwal.c:1241 +#: pg_resetwal.c:1222 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ukáže informace o verzi a skončí\n" -#: pg_resetwal.c:1242 +#: pg_resetwal.c:1223 #, c-format msgid " -x, --next-transaction-id=XID set next transaction ID\n" msgstr " -x, --next-transaction-id=XID nastaví ID následující transakce\n" -#: pg_resetwal.c:1243 +#: pg_resetwal.c:1224 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=VELIKOST velikost WAL segmentů, v megabytech\n" -#: pg_resetwal.c:1244 +#: pg_resetwal.c:1225 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ukáže tuto nápovědu a skončí\n" -#: pg_resetwal.c:1245 +#: pg_resetwal.c:1226 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Chyby hlaste na adresu .\n" +"Chyby hlašte na <%s>.\n" -#~ msgid "First log file ID after reset: %u\n" -#~ msgstr "První ID log souboru po resetu: %u\n" +#: pg_resetwal.c:1227 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" -#~ msgid "%s: internal error -- sizeof(ControlFileData) is too large ... fix PG_CONTROL_SIZE\n" -#~ msgstr "%s: interní chyba -- sizeof(ControlFileData) je příliš velký ... opravte PG_CONTROL_SIZE\n" +#~ msgid "%s: cannot be executed by \"root\"\n" +#~ msgstr "%s: nemůže být spuštěn uživatelem \"root\"\n" -#~ msgid "floating-point numbers" -#~ msgstr "čísla s plovoucí řádovou čárkou" +#~ msgid "%s: could not read permissions of directory \"%s\": %s\n" +#~ msgstr "%s: nelze načíst přístupová práva pro adresář \"%s\": %s\n" -#~ msgid "%s: invalid argument for option -l\n" -#~ msgstr "%s: neplatný argument pro volbu -l\n" +#~ msgid "%s: could not change directory to \"%s\": %s\n" +#~ msgstr "%s: nelze změnit adresář na \"%s\": %s\n" -#~ msgid "%s: invalid argument for option -O\n" -#~ msgstr "%s: neplatný argument pro volbu -O\n" +#~ msgid "%s: could not open file \"%s\" for reading: %s\n" +#~ msgstr "%s: nelze otevřít soubor \"%s\" pro čtení: %s\n" -#~ msgid "%s: invalid argument for option -m\n" -#~ msgstr "%s: neplatný argument pro volbu -m\n" +#~ msgid "%s: could not read file \"%s\": %s\n" +#~ msgstr "%s: nelze číst soubor \"%s\": %s\n" -#~ msgid "%s: invalid argument for option -o\n" -#~ msgstr "%s: neplatný argument pro volbu -o\n" +#~ msgid "%s: could not create pg_control file: %s\n" +#~ msgstr "%s: nelze vytvořit pg_control soubor: %s\n" -#~ msgid "%s: invalid argument for option -x\n" -#~ msgstr "%s: neplatný argument pro volbu -x\n" +#~ msgid "%s: could not write pg_control file: %s\n" +#~ msgstr "%s: nelze zapsat pg_control soubor: %s\n" -#~ msgid "%s: could not write file \"%s\": %s\n" -#~ msgstr "%s: nelze zapsat do souboru \"%s\": %s\n" +#~ msgid "%s: could not open directory \"%s\": %s\n" +#~ msgstr "%s: nelze otevřít adresář \"%s\": %s\n" -#~ msgid "%s: could not open file \"%s\": %s\n" -#~ msgstr "%s: nelze otevřít soubor \"%s\": %s\n" +#~ msgid "%s: could not read directory \"%s\": %s\n" +#~ msgstr "%s: nelze číst z adresáře \"%s\": %s\n" #~ msgid "%s: could not close directory \"%s\": %s\n" #~ msgstr "%s: nelze zavřít adresář \"%s\": %s\n" -#~ msgid "%s: could not read directory \"%s\": %s\n" -#~ msgstr "%s: nelze číst z adresáře \"%s\": %s\n" +#~ msgid "%s: could not open file \"%s\": %s\n" +#~ msgstr "%s: nelze otevřít soubor \"%s\": %s\n" -#~ msgid "%s: could not open directory \"%s\": %s\n" -#~ msgstr "%s: nelze otevřít adresář \"%s\": %s\n" +#~ msgid "%s: could not write file \"%s\": %s\n" +#~ msgstr "%s: nelze zapsat do souboru \"%s\": %s\n" -#~ msgid "%s: could not write pg_control file: %s\n" -#~ msgstr "%s: nelze zapsat pg_control soubor: %s\n" +#~ msgid "%s: invalid argument for option -x\n" +#~ msgstr "%s: neplatný argument pro volbu -x\n" -#~ msgid "%s: could not create pg_control file: %s\n" -#~ msgstr "%s: nelze vytvořit pg_control soubor: %s\n" +#~ msgid "%s: invalid argument for option -o\n" +#~ msgstr "%s: neplatný argument pro volbu -o\n" -#~ msgid "%s: could not read file \"%s\": %s\n" -#~ msgstr "%s: nelze číst soubor \"%s\": %s\n" +#~ msgid "%s: invalid argument for option -m\n" +#~ msgstr "%s: neplatný argument pro volbu -m\n" -#~ msgid "%s: could not open file \"%s\" for reading: %s\n" -#~ msgstr "%s: nelze otevřít soubor \"%s\" pro čtení: %s\n" +#~ msgid "%s: invalid argument for option -O\n" +#~ msgstr "%s: neplatný argument pro volbu -O\n" -#~ msgid "%s: could not change directory to \"%s\": %s\n" -#~ msgstr "%s: nelze změnit adresář na \"%s\": %s\n" +#~ msgid "%s: invalid argument for option -l\n" +#~ msgstr "%s: neplatný argument pro volbu -l\n" -#~ msgid "%s: could not read permissions of directory \"%s\": %s\n" -#~ msgstr "%s: nelze načíst přístupová práva pro adresář \"%s\": %s\n" +#~ msgid "floating-point numbers" +#~ msgstr "čísla s plovoucí řádovou čárkou" -#~ msgid "%s: cannot be executed by \"root\"\n" -#~ msgstr "%s: nemůže být spuštěn uživatelem \"root\"\n" +#~ msgid "%s: internal error -- sizeof(ControlFileData) is too large ... fix PG_CONTROL_SIZE\n" +#~ msgstr "%s: interní chyba -- sizeof(ControlFileData) je příliš velký ... opravte PG_CONTROL_SIZE\n" + +#~ msgid "First log file ID after reset: %u\n" +#~ msgstr "První ID log souboru po resetu: %u\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Chyby hlaste na adresu .\n" + +#~ msgid "Float4 argument passing: %s\n" +#~ msgstr "Způsob předávání float4 hodnot: %s\n" diff --git a/src/bin/pg_resetwal/po/es.po b/src/bin/pg_resetwal/po/es.po index 26927bd7b8fd2..4403bc0908c83 100644 --- a/src/bin/pg_resetwal/po/es.po +++ b/src/bin/pg_resetwal/po/es.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_resetwal (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:46+0000\n" +"POT-Creation-Date: 2020-09-13 10:46+0000\n" "PO-Revision-Date: 2019-06-06 17:24-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -39,16 +39,14 @@ msgid "warning: " msgstr "precaución: " #: ../../common/restricted_token.c:64 -#, fuzzy, c-format -#| msgid "could not load library \"%s\": %s" +#, c-format msgid "could not load library \"%s\": error code %lu" -msgstr "no se pudo cargar la biblioteca «%s»: %s" +msgstr "no se pudo cargar la biblioteca «%s»: código de error %lu" #: ../../common/restricted_token.c:73 -#, fuzzy, c-format -#| msgid "cannot create restricted tokens on this platform" +#, c-format msgid "cannot create restricted tokens on this platform: error code %lu" -msgstr "no se pueden crear tokens restrigidos en esta plataforma" +msgstr "no se pueden crear tokens restrigidos en esta plataforma: código de error %lu" #: ../../common/restricted_token.c:82 #, c-format @@ -287,10 +285,9 @@ msgid "Catalog version number: %u\n" msgstr "Número de versión de catálogo: %u\n" #: pg_resetwal.c:752 -#, fuzzy, c-format -#| msgid "Database system identifier: %s\n" +#, c-format msgid "Database system identifier: %llu\n" -msgstr "Identificador de sistema: %s\n" +msgstr "Identificador de sistema: %llu\n" #: pg_resetwal.c:754 #, c-format @@ -657,24 +654,10 @@ msgid "" "\n" "Report bugs to <%s>.\n" msgstr "" +"\n" +"Reporte errores a <%s>.\n" #: pg_resetwal.c:1227 #, c-format msgid "%s home page: <%s>\n" -msgstr "" - -#~ msgid "cannot create restricted tokens on this platform" -#~ msgstr "no se pueden crear tokens restrigidos en esta plataforma" - -#~ msgid "Database system identifier: %s\n" -#~ msgstr "Identificador de sistema: %s\n" - -#~ msgid "Float4 argument passing: %s\n" -#~ msgstr "Paso de parámetros float4: %s\n" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Reporte errores a .\n" +msgstr "Sitio web de %s: <%s>\n" diff --git a/src/bin/pg_resetwal/po/ja.po b/src/bin/pg_resetwal/po/ja.po index 068f75eb05dc4..b14af6e21dd08 100644 --- a/src/bin/pg_resetwal/po/ja.po +++ b/src/bin/pg_resetwal/po/ja.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_resetwal (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: pg_resetwal (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-06-06 10:43+0900\n" -"PO-Revision-Date: 2019-06-11 20:10+0900\n" +"POT-Creation-Date: 2020-08-21 15:55+0900\n" +"PO-Revision-Date: 2020-09-13 08:56+0200\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -16,62 +16,60 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:241 #, c-format msgid "fatal: " msgstr "致命的エラー: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:248 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:255 #, c-format msgid "warning: " msgstr "警告: " -#: ../../common/restricted_token.c:69 +#: ../../common/restricted_token.c:64 #, c-format -#| msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -msgid "cannot create restricted tokens on this platform" -msgstr "このプラットフォームでは制限付きトークンを作成できません" +msgid "could not load library \"%s\": error code %lu" +msgstr "ライブラリ\"%s\"をロードできませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:78 +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "このプラットフォームでは制限付きトークンを生成できません: エラーコード %lu" + +#: ../../common/restricted_token.c:82 #, c-format -#| msgid "%s: could not open process token: error code %lu\n" msgid "could not open process token: error code %lu" msgstr "プロセストークンをオープンできませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:91 +#: ../../common/restricted_token.c:97 #, c-format -#| msgid "%s: could not allocate SIDs: error code %lu\n" msgid "could not allocate SIDs: error code %lu" msgstr "SIDを割り当てられませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:110 +#: ../../common/restricted_token.c:119 #, c-format -#| msgid "%s: could not create restricted token: error code %lu\n" msgid "could not create restricted token: error code %lu" msgstr "制限付きトークンを作成できませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:131 +#: ../../common/restricted_token.c:140 #, c-format -#| msgid "%s: could not start process for command \"%s\": error code %lu\n" msgid "could not start process for command \"%s\": error code %lu" msgstr "\"%s\"コマンドのプロセスを起動できませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:169 +#: ../../common/restricted_token.c:178 #, c-format -#| msgid "%s: could not re-execute with restricted token: error code %lu\n" msgid "could not re-execute with restricted token: error code %lu" msgstr "制限付きトークンで再実行できませんでした: %lu" -#: ../../common/restricted_token.c:185 +#: ../../common/restricted_token.c:194 #, c-format -#| msgid "%s: could not get exit code from subprocess: error code %lu\n" msgid "could not get exit code from subprocess: error code %lu" msgstr "サブプロセスの終了コードを入手できませんでした。: エラーコード %lu" @@ -80,7 +78,6 @@ msgstr "サブプロセスの終了コードを入手できませんでした。 #: pg_resetwal.c:221 pg_resetwal.c:236 pg_resetwal.c:244 pg_resetwal.c:269 #: pg_resetwal.c:283 #, c-format -#| msgid "%s: invalid argument for option %s\n" msgid "invalid argument for option %s" msgstr "オプション%sの引数が不正です" @@ -93,50 +90,41 @@ msgstr "詳細は\"%s --help\"を実行してください。\n" #: pg_resetwal.c:166 #, c-format -#| msgid "%s: transaction ID epoch (-e) must not be -1\n" msgid "transaction ID epoch (-e) must not be -1" msgstr "トランザクションIDの基点(-e)は-1にはできません" #: pg_resetwal.c:181 #, c-format -#| msgid "%s: transaction ID (-x) must not be 0\n" msgid "transaction ID (-x) must not be 0" msgstr "トランザクションID(-x)は0にはできません" #: pg_resetwal.c:205 pg_resetwal.c:212 #, c-format -#| msgid "" -#| "%s: transaction ID (-c) must be either 0 or greater than or equal to 2\n" msgid "transaction ID (-c) must be either 0 or greater than or equal to 2" msgstr "トランザクションID(-c)は0もしくは2以上でなければなりません" #: pg_resetwal.c:227 #, c-format -#| msgid "%s: OID (-o) must not be 0\n" msgid "OID (-o) must not be 0" msgstr "OID(-o)は0にはできません" #: pg_resetwal.c:250 #, c-format -#| msgid "%s: multitransaction ID (-m) must not be 0\n" msgid "multitransaction ID (-m) must not be 0" msgstr "マルチトランザクションID(-m)は0にはできません" #: pg_resetwal.c:260 #, c-format -#| msgid "%s: oldest multitransaction ID (-m) must not be 0\n" msgid "oldest multitransaction ID (-m) must not be 0" msgstr "最古のマルチトランザクションID(-m)は0にはできません" #: pg_resetwal.c:275 #, c-format -#| msgid "%s: multitransaction offset (-O) must not be -1\n" msgid "multitransaction offset (-O) must not be -1" msgstr "マルチトランザクションオフセット(-O)は-1にはできません" #: pg_resetwal.c:299 #, c-format -#| msgid "argument of %s must be a name" msgid "argument of --wal-segsize must be a number" msgstr "--wal-segsizの引数は数値でなければなりません" @@ -147,25 +135,21 @@ msgstr "--wal-segsizeの引数は1から1024の間の2のべき乗でなけれ #: pg_resetwal.c:321 #, c-format -#| msgid "%s: too many command-line arguments (first is \"%s\")\n" msgid "too many command-line arguments (first is \"%s\")" msgstr "コマンドライン引数が多すぎます。(先頭は\"%s\")" #: pg_resetwal.c:330 #, c-format -#| msgid "%s: no data directory specified\n" msgid "no data directory specified" msgstr "データディレクトリが指定されていません" #: pg_resetwal.c:344 #, c-format -#| msgid "cannot be executed by \"root\"\n" msgid "cannot be executed by \"root\"" msgstr "\"root\"では実行できません" #: pg_resetwal.c:345 #, c-format -#| msgid "You must run %s as the PostgreSQL superuser.\n" msgid "You must run %s as the PostgreSQL superuser." msgstr "PostgreSQLのスーパユーザで%sを実行しなければなりません" @@ -179,26 +163,20 @@ msgstr "ディレクトリ\"%s\"の権限を読み取れませんでした: %m" msgid "could not change directory to \"%s\": %m" msgstr "ディレクトリ\"%s\"に移動できませんでした: %m" -#: pg_resetwal.c:381 pg_resetwal.c:545 pg_resetwal.c:602 +#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "ファイル\"%s\"を読み取り用にオープンできませんでした: %m" #: pg_resetwal.c:388 #, c-format -#| msgid "lock file \"%s\" already exists" msgid "lock file \"%s\" exists" msgstr "ロックファイル\"%s\"が存在します" #: pg_resetwal.c:389 #, c-format -#| msgid "" -#| "%s: lock file \"%s\" exists\n" -#| "Is a server running? If not, delete the lock file and try again.\n" msgid "Is a server running? If not, delete the lock file and try again." -msgstr "" -"サーバが稼動していませんか? そうでなければロックファイルを削除し再実行してく" -"ださい。" +msgstr "サーバが稼動していませんか? そうでなければロックファイルを削除し再実行してください。" #: pg_resetwal.c:492 #, c-format @@ -211,10 +189,6 @@ msgstr "" #: pg_resetwal.c:504 #, c-format -#| msgid "" -#| "The database server was not shut down cleanly.\n" -#| "Resetting the transaction log might cause data to be lost.\n" -#| "If you want to proceed anyway, use -f to force reset.\n" msgid "" "The database server was not shut down cleanly.\n" "Resetting the write-ahead log might cause data to be lost.\n" @@ -226,45 +200,31 @@ msgstr "" #: pg_resetwal.c:518 #, c-format -#| msgid "Write-Ahead Log" msgid "Write-ahead log reset\n" msgstr "先行書き込みログがリセットされました\n" -#: pg_resetwal.c:554 +#: pg_resetwal.c:553 #, c-format -#| msgid "unexpected WAL file size \"%s\"" msgid "unexpected empty file \"%s\"" msgstr "想定外の空のファイル\"%s\"" -#: pg_resetwal.c:556 pg_resetwal.c:618 +#: pg_resetwal.c:555 pg_resetwal.c:611 #, c-format msgid "could not read file \"%s\": %m" msgstr "ファイル\"%s\"の読み取りに失敗しました: %m" -#: pg_resetwal.c:571 +#: pg_resetwal.c:564 #, c-format -#| msgid "data directory \"%s\" has wrong ownership" msgid "data directory is of wrong version" msgstr "データディレクトリのバージョンが違います" -#: pg_resetwal.c:572 +#: pg_resetwal.c:565 #, c-format -#| msgid "" -#| "The data directory was initialized by PostgreSQL version %s, which is not " -#| "compatible with this version %s." -msgid "" -"File \"%s\" contains \"%s\", which is not compatible with this program's " -"version \"%s\"." -msgstr "" -"ファイル\"%s\"では\"%s\"となっています、これはこのプログラムのバージョン\"%s" -"\"と互換性がありません" +msgid "File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\"." +msgstr "ファイル\"%s\"では\"%s\"となっています、これはこのプログラムのバージョン\"%s\"と互換性がありません" -#: pg_resetwal.c:605 +#: pg_resetwal.c:598 #, c-format -#| msgid "" -#| "If you are sure the data directory path is correct, execute\n" -#| " touch %s\n" -#| "and try again.\n" msgid "" "If you are sure the data directory path is correct, execute\n" " touch %s\n" @@ -274,33 +234,23 @@ msgstr "" " touch %s\n" "の後に再実行してください。" -#: pg_resetwal.c:636 +#: pg_resetwal.c:629 #, c-format -#| msgid "%s: pg_control exists but has invalid CRC; proceed with caution\n" msgid "pg_control exists but has invalid CRC; proceed with caution" msgstr "pg_controlがありましたが、CRCが不正でした; 注意して進めてください" -#: pg_resetwal.c:645 +#: pg_resetwal.c:638 +#, c-format +msgid "pg_control specifies invalid WAL segment size (%d byte); proceed with caution" +msgid_plural "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution" +msgstr[0] "pg_controlにあるWALセグメントサイズ(%dバイト)は不正です; 注意して進めてください" + +#: pg_resetwal.c:649 #, c-format -#| msgid "%s: pg_control exists but has invalid CRC; proceed with caution\n" -msgid "" -"pg_control specifies invalid WAL segment size (%d byte); proceed with caution" -msgid_plural "" -"pg_control specifies invalid WAL segment size (%d bytes); proceed with " -"caution" -msgstr[0] "" -"pg_controlにあるWALセグメントサイズ(%dバイト)は不正です; 注意して進めてくださ" -"い" - -#: pg_resetwal.c:656 -#, c-format -#| msgid "" -#| "%s: pg_control exists but is broken or unknown version; ignoring it\n" msgid "pg_control exists but is broken or wrong version; ignoring it" -msgstr "" -"pg_controlがありましたが、破損あるいは間違ったバージョンです; 無視します" +msgstr "pg_controlがありましたが、破損あるいは間違ったバージョンです; 無視します" -#: pg_resetwal.c:754 +#: pg_resetwal.c:744 #, c-format msgid "" "Guessed pg_control values:\n" @@ -309,7 +259,7 @@ msgstr "" "pg_controlの推測値:\n" "\n" -#: pg_resetwal.c:756 +#: pg_resetwal.c:746 #, c-format msgid "" "Current pg_control values:\n" @@ -318,172 +268,167 @@ msgstr "" "現在のpg_controlの値:\n" "\n" -#: pg_resetwal.c:765 +#: pg_resetwal.c:748 #, c-format msgid "pg_control version number: %u\n" msgstr "pg_controlバージョン番号: %u\n" -#: pg_resetwal.c:767 +#: pg_resetwal.c:750 #, c-format msgid "Catalog version number: %u\n" msgstr "カタログバージョン番号: %u\n" -#: pg_resetwal.c:769 +#: pg_resetwal.c:752 #, c-format -msgid "Database system identifier: %s\n" -msgstr "データベースシステム識別子: %s\n" +msgid "Database system identifier: %llu\n" +msgstr "データベースシステム識別子: %llu\n" -#: pg_resetwal.c:771 +#: pg_resetwal.c:754 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "最終チェックポイントの時系列ID: %u\n" -#: pg_resetwal.c:773 +#: pg_resetwal.c:756 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "最終チェックポイントのfull_page_writes: %s\n" -#: pg_resetwal.c:774 +#: pg_resetwal.c:757 msgid "off" msgstr "オフ" -#: pg_resetwal.c:774 +#: pg_resetwal.c:757 msgid "on" msgstr "オン" -#: pg_resetwal.c:775 +#: pg_resetwal.c:758 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "最終チェックポイントのNextXID: %u:%u\n" -#: pg_resetwal.c:778 +#: pg_resetwal.c:761 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "最終チェックポイントのNextOID: %u\n" -#: pg_resetwal.c:780 +#: pg_resetwal.c:763 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "最終チェックポイントのNextMultiXactId: %u\n" -#: pg_resetwal.c:782 +#: pg_resetwal.c:765 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "最終チェックポイントのNextMultiOffset: %u\n" -#: pg_resetwal.c:784 +#: pg_resetwal.c:767 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "最終チェックポイントのoldestXID: %u\n" -#: pg_resetwal.c:786 +#: pg_resetwal.c:769 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "最終チェックポイントのoldestXIDのDB: %u\n" -#: pg_resetwal.c:788 +#: pg_resetwal.c:771 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "最終チェックポイントのoldestActiveXID: %u\n" -#: pg_resetwal.c:790 +#: pg_resetwal.c:773 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "最終チェックポイントのoldestMultiXid: %u\n" -#: pg_resetwal.c:792 +#: pg_resetwal.c:775 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "最終チェックポイントのoldestMultiのDB: %u\n" -#: pg_resetwal.c:794 +#: pg_resetwal.c:777 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "最終チェックポイントのoldestCommitTsXid: %u\n" -#: pg_resetwal.c:796 +#: pg_resetwal.c:779 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "最終チェックポイントのnewestCommitTsXid: %u\n" -#: pg_resetwal.c:798 +#: pg_resetwal.c:781 #, c-format msgid "Maximum data alignment: %u\n" msgstr "最大データアラインメント: %u\n" -#: pg_resetwal.c:801 +#: pg_resetwal.c:784 #, c-format msgid "Database block size: %u\n" msgstr "データベースのブロックサイズ: %u\n" -#: pg_resetwal.c:803 +#: pg_resetwal.c:786 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "大きなリレーションのセグメント毎のブロック数:%u\n" -#: pg_resetwal.c:805 +#: pg_resetwal.c:788 #, c-format msgid "WAL block size: %u\n" msgstr "WALのブロックサイズ: %u\n" -#: pg_resetwal.c:807 pg_resetwal.c:895 +#: pg_resetwal.c:790 pg_resetwal.c:876 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "WALセグメント当たりのバイト数: %u\n" -#: pg_resetwal.c:809 +#: pg_resetwal.c:792 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "識別子の最大長: %u\n" -#: pg_resetwal.c:811 +#: pg_resetwal.c:794 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "インデックス内の最大列数: %u\n" -#: pg_resetwal.c:813 +#: pg_resetwal.c:796 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "TOASTチャンクの最大サイズ: %u\n" -#: pg_resetwal.c:815 +#: pg_resetwal.c:798 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "ラージオブジェクトチャンクのサイズ: %u\n" -#: pg_resetwal.c:818 +#: pg_resetwal.c:801 #, c-format msgid "Date/time type storage: %s\n" msgstr "日付/時刻型の格納方式: %s\n" -#: pg_resetwal.c:819 +#: pg_resetwal.c:802 msgid "64-bit integers" msgstr "64ビット整数" -#: pg_resetwal.c:820 +#: pg_resetwal.c:803 #, c-format -msgid "Float4 argument passing: %s\n" -msgstr "Float4引数の渡し方: %s\n" +msgid "Float8 argument passing: %s\n" +msgstr "Float8引数の渡し方: %s\n" -#: pg_resetwal.c:821 pg_resetwal.c:823 +#: pg_resetwal.c:804 msgid "by reference" msgstr "参照渡し" -#: pg_resetwal.c:821 pg_resetwal.c:823 +#: pg_resetwal.c:804 msgid "by value" msgstr "値渡し" -#: pg_resetwal.c:822 -#, c-format -msgid "Float8 argument passing: %s\n" -msgstr "Float8引数の渡し方: %s\n" - -#: pg_resetwal.c:824 +#: pg_resetwal.c:805 #, c-format msgid "Data page checksum version: %u\n" msgstr "データベージチェックサムのバージョン: %u\n" -#: pg_resetwal.c:838 +#: pg_resetwal.c:819 #, c-format msgid "" "\n" @@ -496,109 +441,103 @@ msgstr "" "変更される値:\n" "\n" -#: pg_resetwal.c:842 +#: pg_resetwal.c:823 #, c-format msgid "First log segment after reset: %s\n" msgstr "リセット後最初のログセグメント: %s\n" -#: pg_resetwal.c:846 +#: pg_resetwal.c:827 #, c-format msgid "NextMultiXactId: %u\n" msgstr "NextMultiXactId: %u\n" -#: pg_resetwal.c:848 +#: pg_resetwal.c:829 #, c-format msgid "OldestMultiXid: %u\n" msgstr "OldestMultiXid: %u\n" -#: pg_resetwal.c:850 +#: pg_resetwal.c:831 #, c-format msgid "OldestMulti's DB: %u\n" msgstr "OldestMultiのDB: %u\n" -#: pg_resetwal.c:856 +#: pg_resetwal.c:837 #, c-format msgid "NextMultiOffset: %u\n" msgstr "NextMultiOffset: %u\n" -#: pg_resetwal.c:862 +#: pg_resetwal.c:843 #, c-format msgid "NextOID: %u\n" msgstr "NextOID: %u\n" -#: pg_resetwal.c:868 +#: pg_resetwal.c:849 #, c-format msgid "NextXID: %u\n" msgstr "NextXID: %u\n" -#: pg_resetwal.c:870 +#: pg_resetwal.c:851 #, c-format msgid "OldestXID: %u\n" msgstr "OldestXID: %u\n" -#: pg_resetwal.c:872 +#: pg_resetwal.c:853 #, c-format msgid "OldestXID's DB: %u\n" msgstr "OldestXIDのDB: %u\n" -#: pg_resetwal.c:878 +#: pg_resetwal.c:859 #, c-format msgid "NextXID epoch: %u\n" msgstr "NextXID基点: %u\n" -#: pg_resetwal.c:884 +#: pg_resetwal.c:865 #, c-format msgid "oldestCommitTsXid: %u\n" msgstr "oldestCommitTsXid: %u\n" -#: pg_resetwal.c:889 +#: pg_resetwal.c:870 #, c-format msgid "newestCommitTsXid: %u\n" msgstr "newestCommitTsXid: %u\n" -#: pg_resetwal.c:975 pg_resetwal.c:1043 pg_resetwal.c:1090 +#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071 #, c-format msgid "could not open directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" -#: pg_resetwal.c:1010 pg_resetwal.c:1063 pg_resetwal.c:1113 +#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094 #, c-format msgid "could not read directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を読み取れませんでした: %m" -#: pg_resetwal.c:1016 pg_resetwal.c:1069 pg_resetwal.c:1119 +#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100 #, c-format -#| msgid "could not close directory \"%s\": %s\n" msgid "could not close directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をクローズできませんでした: %m" -#: pg_resetwal.c:1055 pg_resetwal.c:1105 +#: pg_resetwal.c:1036 pg_resetwal.c:1086 #, c-format -#| msgid "could not recreate file \"%s\": %m" msgid "could not delete file \"%s\": %m" msgstr "ファイル\"%s\"を削除できませんでした: %m" -#: pg_resetwal.c:1186 +#: pg_resetwal.c:1167 #, c-format msgid "could not open file \"%s\": %m" msgstr "ファイル\"%s\"をオープンできませんでした: %m" -#: pg_resetwal.c:1196 pg_resetwal.c:1209 +#: pg_resetwal.c:1177 pg_resetwal.c:1190 #, c-format msgid "could not write file \"%s\": %m" msgstr "ファイル\"%s\"を書き出せませんでした: %m" -#: pg_resetwal.c:1216 +#: pg_resetwal.c:1197 #, c-format -#| msgid "%s: fsync error: %s\n" msgid "fsync error: %m" msgstr "fsyncエラー: %m" -#: pg_resetwal.c:1227 +#: pg_resetwal.c:1208 #, c-format -#| msgid "" -#| "%s resets the PostgreSQL transaction log.\n" -#| "\n" msgid "" "%s resets the PostgreSQL write-ahead log.\n" "\n" @@ -606,7 +545,7 @@ msgstr "" "%sはPostgreSQLの先行書き込みログをリセットします。\n" "\n" -#: pg_resetwal.c:1228 +#: pg_resetwal.c:1209 #, c-format msgid "" "Usage:\n" @@ -617,12 +556,12 @@ msgstr "" " %s [OPTION]... DATADIR\n" "\n" -#: pg_resetwal.c:1229 +#: pg_resetwal.c:1210 #, c-format msgid "Options:\n" msgstr "オプション:\n" -#: pg_resetwal.c:1230 +#: pg_resetwal.c:1211 #, c-format msgid "" " -c, --commit-timestamp-ids=XID,XID\n" @@ -631,197 +570,171 @@ msgid "" msgstr "" " -c, --commit-timestamp-ids=XID,XID\n" " コミットタイムスタンプを持つ最古と最新の\n" -" トランザクション(0は変更しないことを意味す" -"る)\n" +" トランザクション(0は変更しないことを意味する)\n" -#: pg_resetwal.c:1233 +#: pg_resetwal.c:1214 #, c-format -#| msgid " [-D, --pgdata=]DATADIR data directory\n" msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]DATADIR データディレクトリ\n" -#: pg_resetwal.c:1234 +#: pg_resetwal.c:1215 #, c-format -#| msgid " -e XIDEPOCH set next transaction ID epoch\n" msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n" msgstr " -e, --epoch=XIDEPOCH 次のトランザクションIDの基点を設定\n" -#: pg_resetwal.c:1235 +#: pg_resetwal.c:1216 #, c-format -#| msgid " -f force update to be done\n" msgid " -f, --force force update to be done\n" msgstr " -f, --force 強制的に更新を実施\n" -#: pg_resetwal.c:1236 +#: pg_resetwal.c:1217 #, c-format -#| msgid "" -#| " -l XLOGFILE force minimum WAL starting location for new " -#| "transaction log\n" -msgid "" -" -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n" +msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n" msgstr " -l, --next-wal-file=WALFILE 新しいWALの最小開始ポイントを設定\n" -#: pg_resetwal.c:1237 +#: pg_resetwal.c:1218 #, c-format -#| msgid " -m MXID,MXID set next and oldest multitransaction ID\n" -msgid "" -" -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n" -msgstr "" -" -m, --multixact-ids=MXID,MXID 次および最古のマルチトランザクションIDを設" -"定\n" +msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n" +msgstr " -m, --multixact-ids=MXID,MXID 次および最古のマルチトランザクションIDを設定\n" -#: pg_resetwal.c:1238 +#: pg_resetwal.c:1219 #, c-format -#| msgid "" -#| " -n no update, just show what would be done (for testing)\n" -msgid "" -" -n, --dry-run no update, just show what would be done\n" -msgstr "" -" -n, --dry-run 更新をせず、単に何が行なわれるかを表示\n" +msgid " -n, --dry-run no update, just show what would be done\n" +msgstr " -n, --dry-run 更新をせず、単に何が行なわれるかを表示\n" -#: pg_resetwal.c:1239 +#: pg_resetwal.c:1220 #, c-format -#| msgid " -o OID set next OID\n" msgid " -o, --next-oid=OID set next OID\n" msgstr " -o, --next-oid=OID 次のOIDを設定\n" -#: pg_resetwal.c:1240 +#: pg_resetwal.c:1221 #, c-format -#| msgid " -O OFFSET set next multitransaction offset\n" msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n" -msgstr "" -" -O, --multixact-offset=OFFSET 次のマルチトランザクションオフセットを設定\n" +msgstr " -O, --multixact-offset=OFFSET 次のマルチトランザクションオフセットを設定\n" -#: pg_resetwal.c:1241 +#: pg_resetwal.c:1222 #, c-format -msgid "" -" -V, --version output version information, then exit\n" +msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_resetwal.c:1242 +#: pg_resetwal.c:1223 #, c-format -#| msgid " -1, --single-transaction restore as a single transaction\n" msgid " -x, --next-transaction-id=XID set next transaction ID\n" msgstr " -x, --next-transaction-id=XID 次のトランザクションIDを設定\n" -#: pg_resetwal.c:1243 +#: pg_resetwal.c:1224 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" -msgstr "" -" --wal-segsize=SIZE WALセグメントのサイズ、単位はメガバイト\n" +msgstr " --wal-segsize=SIZE WALセグメントのサイズ、単位はメガバイト\n" -#: pg_resetwal.c:1244 +#: pg_resetwal.c:1225 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_resetwal.c:1245 +#: pg_resetwal.c:1226 #, c-format -#| msgid "" -#| "\n" -#| "Report bugs to .\n" msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"不具合はまで報告してください。\n" +"バグは<%s>に報告してください。\n" -#~ msgid "%s: invalid argument for option -x\n" -#~ msgstr "%s: オプション-xの引数が無効です\n" +#: pg_resetwal.c:1227 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" -#~ msgid "%s: invalid argument for option -o\n" -#~ msgstr "%s: オプション-oの引数が無効です\n" +#~ msgid "%s: cannot be executed by \"root\"\n" +#~ msgstr "%s: \"root\"では実行できません\n" -#~ msgid "%s: invalid argument for option -m\n" -#~ msgstr "%s: オプション-mの引数が無効です\n" +#~ msgid "%s: could not change directory to \"%s\": %s\n" +#~ msgstr "%s: ディレクトリ\"%s\"に移動できませんでした: %s\n" -#~ msgid "%s: invalid argument for option -O\n" -#~ msgstr "%s: オプション-Oの引数が無効です\n" +#~ msgid "%s: could not open file \"%s\" for reading: %s\n" +#~ msgstr "%s: 読み取り用のファイル\"%s\"をオープンできませんでした: %s\n" -#~ msgid "%s: invalid argument for option -l\n" -#~ msgstr "%s: オプション-lの引数が無効です\n" +#~ msgid "Transaction log reset\n" +#~ msgstr "トランザクションログをリセットします。\n" -#~ msgid "%s: could not read from directory \"%s\": %s\n" -#~ msgstr "%s: ディレクトリ\"%s\"から読み込めませんでした: %s\n" +#~ msgid "%s: could not read file \"%s\": %s\n" +#~ msgstr "%s: ファイル\"%s\"を読み込めませんでした: %s\n" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version バージョン情報を表示し、終了します\n" +#~ msgid "floating-point numbers" +#~ msgstr "浮動小数点数" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help ヘルプを表示し、終了します\n" +#~ msgid "%s: internal error -- sizeof(ControlFileData) is too large ... fix PG_CONTROL_SIZE\n" +#~ msgstr "%s: 内部エラー -- sizeof(ControlFileData)が大きすぎます ... PG_CONTROL_SIZEを修正してください\n" -#~ msgid "First log file ID after reset: %u\n" -#~ msgstr "リセット後、現在のログファイルID: %u\n" +#~ msgid "%s: could not create pg_control file: %s\n" +#~ msgstr "%s: pg_controlファイルを作成できませんでした: %s\n" -#~ msgid " -?, --help show this help, then exit\n" -#~ msgstr " -?, --help このヘルプを表示し、終了します\n" +#~ msgid "%s: could not write pg_control file: %s\n" +#~ msgstr "%s: pg_controlファイルを書き込めませんでした: %s\n" -#~ msgid " -x XID set next transaction ID\n" -#~ msgstr " -x XID 次のトランザクションIDを設定します\n" +#~ msgid "%s: could not open directory \"%s\": %s\n" +#~ msgstr "%s: ディレクトリ\"%s\"をオープンできませんでした: %s\n" -#~ msgid " -V, --version output version information, then exit\n" -#~ msgstr " -V, --version バージョン情報を出力、終了します\n" +#~ msgid "%s: could not read directory \"%s\": %s\n" +#~ msgstr "%s: ディレクトリ\"%s\"を読み取ることができませんでした。: %s\n" -#~ msgid " [-D] DATADIR data directory\n" -#~ msgstr " [-D] DATADIR データベースディレクトリ\n" +#~ msgid "%s: could not close directory \"%s\": %s\n" +#~ msgstr "%s: ディレクトリ \"%s\" をクローズできませんでした: %s\n" -#~ msgid " (zero in either value means no change)\n" -#~ msgstr "" -#~ " (いずれかの値での0は変更がないことを意味します)\n" +#~ msgid "%s: could not delete file \"%s\": %s\n" +#~ msgstr "%s: ファイル\"%s\"を削除できませんでした: %s\n" -#~ msgid "" -#~ " -c XID,XID set oldest and newest transactions bearing commit " -#~ "timestamp\n" -#~ msgstr "" -#~ " -c XID,XID コミットタイムスタンプを作成する最も古いトランザクショ" -#~ "ンと最も新しいトランザクションを設定します\n" +#~ msgid "%s: could not open file \"%s\": %s\n" +#~ msgstr "%s: ファイル\"%s\"をオープンできませんでした: %s\n" #~ msgid "%s: could not write file \"%s\": %s\n" #~ msgstr "%s: ファイル\"%s\"を書き込めませんでした: %s\n" -#~ msgid "%s: could not open file \"%s\": %s\n" -#~ msgstr "%s: ファイル\"%s\"をオープンできませんでした: %s\n" +#~ msgid " -c XID,XID set oldest and newest transactions bearing commit timestamp\n" +#~ msgstr " -c XID,XID コミットタイムスタンプを作成する最も古いトランザクションと最も新しいトランザクションを設定します\n" -#~ msgid "%s: could not delete file \"%s\": %s\n" -#~ msgstr "%s: ファイル\"%s\"を削除できませんでした: %s\n" +#~ msgid " (zero in either value means no change)\n" +#~ msgstr " (いずれかの値での0は変更がないことを意味します)\n" -#~ msgid "%s: could not close directory \"%s\": %s\n" -#~ msgstr "%s: ディレクトリ \"%s\" をクローズできませんでした: %s\n" +#~ msgid " [-D] DATADIR data directory\n" +#~ msgstr " [-D] DATADIR データベースディレクトリ\n" -#~ msgid "%s: could not read directory \"%s\": %s\n" -#~ msgstr "%s: ディレクトリ\"%s\"を読み取ることができませんでした。: %s\n" +#~ msgid " -V, --version output version information, then exit\n" +#~ msgstr " -V, --version バージョン情報を出力、終了します\n" -#~ msgid "%s: could not open directory \"%s\": %s\n" -#~ msgstr "%s: ディレクトリ\"%s\"をオープンできませんでした: %s\n" +#~ msgid " -x XID set next transaction ID\n" +#~ msgstr " -x XID 次のトランザクションIDを設定します\n" -#~ msgid "%s: could not write pg_control file: %s\n" -#~ msgstr "%s: pg_controlファイルを書き込めませんでした: %s\n" +#~ msgid " -?, --help show this help, then exit\n" +#~ msgstr " -?, --help このヘルプを表示し、終了します\n" -#~ msgid "%s: could not create pg_control file: %s\n" -#~ msgstr "%s: pg_controlファイルを作成できませんでした: %s\n" +#~ msgid "First log file ID after reset: %u\n" +#~ msgstr "リセット後、現在のログファイルID: %u\n" -#~ msgid "" -#~ "%s: internal error -- sizeof(ControlFileData) is too large ... fix " -#~ "PG_CONTROL_SIZE\n" -#~ msgstr "" -#~ "%s: 内部エラー -- sizeof(ControlFileData)が大きすぎます ... " -#~ "PG_CONTROL_SIZEを修正してください\n" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help ヘルプを表示し、終了します\n" -#~ msgid "floating-point numbers" -#~ msgstr "浮動小数点数" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version バージョン情報を表示し、終了します\n" -#~ msgid "%s: could not read file \"%s\": %s\n" -#~ msgstr "%s: ファイル\"%s\"を読み込めませんでした: %s\n" +#~ msgid "%s: could not read from directory \"%s\": %s\n" +#~ msgstr "%s: ディレクトリ\"%s\"から読み込めませんでした: %s\n" -#~ msgid "Transaction log reset\n" -#~ msgstr "トランザクションログをリセットします。\n" +#~ msgid "%s: invalid argument for option -l\n" +#~ msgstr "%s: オプション-lの引数が無効です\n" -#~ msgid "%s: could not open file \"%s\" for reading: %s\n" -#~ msgstr "%s: 読み取り用のファイル\"%s\"をオープンできませんでした: %s\n" +#~ msgid "%s: invalid argument for option -O\n" +#~ msgstr "%s: オプション-Oの引数が無効です\n" -#~ msgid "%s: could not change directory to \"%s\": %s\n" -#~ msgstr "%s: ディレクトリ\"%s\"に移動できませんでした: %s\n" +#~ msgid "%s: invalid argument for option -m\n" +#~ msgstr "%s: オプション-mの引数が無効です\n" -#~ msgid "%s: cannot be executed by \"root\"\n" -#~ msgstr "%s: \"root\"では実行できません\n" +#~ msgid "%s: invalid argument for option -o\n" +#~ msgstr "%s: オプション-oの引数が無効です\n" + +#~ msgid "%s: invalid argument for option -x\n" +#~ msgstr "%s: オプション-xの引数が無効です\n" + +#~ msgid "Float4 argument passing: %s\n" +#~ msgstr "Float4引数の渡し方: %s\n" diff --git a/src/bin/pg_resetwal/po/ko.po b/src/bin/pg_resetwal/po/ko.po index 4d7cc83ab1698..03e30bc6d88cf 100644 --- a/src/bin/pg_resetwal/po/ko.po +++ b/src/bin/pg_resetwal/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_resetwal (PostgreSQL) 12\n" +"Project-Id-Version: pg_resetwal (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:15+0000\n" -"PO-Revision-Date: 2019-10-31 17:14+0900\n" +"POT-Creation-Date: 2020-10-05 20:45+0000\n" +"PO-Revision-Date: 2020-10-06 13:44+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean Team \n" "Language: ko\n" @@ -15,52 +15,57 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "심각: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "오류: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "경고: " -#: ../../common/restricted_token.c:69 +#: ../../common/restricted_token.c:64 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "이 운영체제에서 restricted token을 만들 수 없음" +msgid "could not load library \"%s\": error code %lu" +msgstr "\"%s\" 라이브러리를 로드할 수 없음: 오류 코드 %lu" -#: ../../common/restricted_token.c:78 +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "이 운영체제에서 restricted token을 만들 수 없음: 오류 코드 %lu" + +#: ../../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "프로세스 토큰을 열 수 없음: 오류 코드 %lu" -#: ../../common/restricted_token.c:91 +#: ../../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "SID를 할당할 수 없음: 오류 코드 %lu" -#: ../../common/restricted_token.c:110 +#: ../../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "상속된 토큰을 만들 수 없음: 오류 코드 %lu" -#: ../../common/restricted_token.c:131 +#: ../../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "\"%s\" 명령용 프로세스를 시작할 수 없음: 오류 코드 %lu" -#: ../../common/restricted_token.c:169 +#: ../../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "상속된 토큰으로 재실행할 수 없음: 오류 코드 %lu" -#: ../../common/restricted_token.c:185 +#: ../../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "하위 프로세스의 종료 코드를 구할 수 없음: 오류 코드 %lu" @@ -155,7 +160,7 @@ msgstr "\"%s\" 디렉터리 읽기 권한 없음: %m" msgid "could not change directory to \"%s\": %m" msgstr "\"%s\" 이름의 디렉터리로 이동할 수 없습니다: %m" -#: pg_resetwal.c:381 pg_resetwal.c:545 pg_resetwal.c:602 +#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "\"%s\" 파일 일기 모드로 열기 실패: %m" @@ -196,29 +201,29 @@ msgstr "" msgid "Write-ahead log reset\n" msgstr "트랜잭션 로그 재설정\n" -#: pg_resetwal.c:554 +#: pg_resetwal.c:553 #, c-format msgid "unexpected empty file \"%s\"" msgstr "\"%s\" 파일은 예상치 않게 비었음" -#: pg_resetwal.c:556 pg_resetwal.c:618 +#: pg_resetwal.c:555 pg_resetwal.c:611 #, c-format msgid "could not read file \"%s\": %m" msgstr "\"%s\" 파일을 읽을 수 없음: %m" -#: pg_resetwal.c:571 +#: pg_resetwal.c:564 #, c-format msgid "data directory is of wrong version" msgstr "잘못된 버전의 데이터 디렉터리입니다." -#: pg_resetwal.c:572 +#: pg_resetwal.c:565 #, c-format msgid "" "File \"%s\" contains \"%s\", which is not compatible with this program's " "version \"%s\"." msgstr "\"%s\" 파일 버전은 \"%s\", 이 프로그램 버전은 \"%s\"." -#: pg_resetwal.c:605 +#: pg_resetwal.c:598 #, c-format msgid "" "If you are sure the data directory path is correct, execute\n" @@ -229,12 +234,12 @@ msgstr "" "보십시오.\n" " touch %s" -#: pg_resetwal.c:636 +#: pg_resetwal.c:629 #, c-format msgid "pg_control exists but has invalid CRC; proceed with caution" msgstr "pg_control 파일이 있지만, CRC값이 잘못되었습니다; 경고와 함께 진행함" -#: pg_resetwal.c:645 +#: pg_resetwal.c:638 #, c-format msgid "" "pg_control specifies invalid WAL segment size (%d byte); proceed with caution" @@ -245,12 +250,12 @@ msgstr[0] "" "pg_control 파일에 잘못된 WAL 조각 파일 크기(%d 바이트)가 지정됨; 경고와 함께 " "진행함" -#: pg_resetwal.c:656 +#: pg_resetwal.c:649 #, c-format msgid "pg_control exists but is broken or wrong version; ignoring it" msgstr "pg_control 파일이 있지만, 손상되었거나 버전을 알 수 없음; 무시함" -#: pg_resetwal.c:754 +#: pg_resetwal.c:744 #, c-format msgid "" "Guessed pg_control values:\n" @@ -259,7 +264,7 @@ msgstr "" "추측된 pg_control 설정값들:\n" "\n" -#: pg_resetwal.c:756 +#: pg_resetwal.c:746 #, c-format msgid "" "Current pg_control values:\n" @@ -268,172 +273,167 @@ msgstr "" "현재 pg_control 설정값들:\n" "\n" -#: pg_resetwal.c:765 +#: pg_resetwal.c:748 #, c-format msgid "pg_control version number: %u\n" msgstr "pg_control 버전 번호: %u\n" -#: pg_resetwal.c:767 +#: pg_resetwal.c:750 #, c-format msgid "Catalog version number: %u\n" msgstr "카탈로그 버전 번호: %u\n" -#: pg_resetwal.c:769 +#: pg_resetwal.c:752 #, c-format -msgid "Database system identifier: %s\n" -msgstr "데이터베이스 시스템 식별자: %s\n" +msgid "Database system identifier: %llu\n" +msgstr "데이터베이스 시스템 식별자: %llu\n" -#: pg_resetwal.c:771 +#: pg_resetwal.c:754 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "마지막 체크포인트 TimeLineID: %u\n" -#: pg_resetwal.c:773 +#: pg_resetwal.c:756 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "마지막 체크포인트 full_page_writes: %s\n" -#: pg_resetwal.c:774 +#: pg_resetwal.c:757 msgid "off" msgstr "off" -#: pg_resetwal.c:774 +#: pg_resetwal.c:757 msgid "on" msgstr "on" -#: pg_resetwal.c:775 +#: pg_resetwal.c:758 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "마지막 체크포인트 NextXID: %u:%u\n" -#: pg_resetwal.c:778 +#: pg_resetwal.c:761 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "마지막 체크포인트 NextOID: %u\n" -#: pg_resetwal.c:780 +#: pg_resetwal.c:763 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "마지막 체크포인트 NextMultiXactId: %u\n" -#: pg_resetwal.c:782 +#: pg_resetwal.c:765 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "마지막 체크포인트 NextMultiOffset: %u\n" -#: pg_resetwal.c:784 +#: pg_resetwal.c:767 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "마지막 체크포인트 제일 오래된 XID: %u\n" -#: pg_resetwal.c:786 +#: pg_resetwal.c:769 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "마지막 체크포인트 제일 오래된 XID의 DB:%u\n" -#: pg_resetwal.c:788 +#: pg_resetwal.c:771 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "마지막 체크포인트 제일 오래된 ActiveXID:%u\n" -#: pg_resetwal.c:790 +#: pg_resetwal.c:773 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "마지막 체크포인트 제일 오래된 MultiXid:%u\n" -#: pg_resetwal.c:792 +#: pg_resetwal.c:775 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "마지막 체크포인트 제일 오래된 MultiXid의 DB:%u\n" -#: pg_resetwal.c:794 +#: pg_resetwal.c:777 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "마지막 체크포인트 제일 오래된 CommitTsXid:%u\n" -#: pg_resetwal.c:796 +#: pg_resetwal.c:779 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "마지막 체크포인트 최신 CommitTsXid: %u\n" -#: pg_resetwal.c:798 +#: pg_resetwal.c:781 #, c-format msgid "Maximum data alignment: %u\n" msgstr "최대 자료 정렬: %u\n" -#: pg_resetwal.c:801 +#: pg_resetwal.c:784 #, c-format msgid "Database block size: %u\n" msgstr "데이터베이스 블록 크기: %u\n" -#: pg_resetwal.c:803 +#: pg_resetwal.c:786 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "대형 릴레이션의 세그먼트당 블럭 갯수: %u\n" -#: pg_resetwal.c:805 +#: pg_resetwal.c:788 #, c-format msgid "WAL block size: %u\n" msgstr "WAL 블록 크기: %u\n" -#: pg_resetwal.c:807 pg_resetwal.c:895 +#: pg_resetwal.c:790 pg_resetwal.c:876 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "WAL 세그먼트의 크기(byte): %u\n" -#: pg_resetwal.c:809 +#: pg_resetwal.c:792 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "식별자 최대 길이: %u\n" -#: pg_resetwal.c:811 +#: pg_resetwal.c:794 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "인덱스에서 사용하는 최대 열 수: %u\n" -#: pg_resetwal.c:813 +#: pg_resetwal.c:796 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "TOAST 청크의 최대 크기: %u\n" -#: pg_resetwal.c:815 +#: pg_resetwal.c:798 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "대형객체 청크의 최대 크기: %u\n" -#: pg_resetwal.c:818 +#: pg_resetwal.c:801 #, c-format msgid "Date/time type storage: %s\n" msgstr "날짜/시간형 자료의 저장방식: %s\n" -#: pg_resetwal.c:819 +#: pg_resetwal.c:802 msgid "64-bit integers" msgstr "64-비트 정수" -#: pg_resetwal.c:820 +#: pg_resetwal.c:803 #, c-format -msgid "Float4 argument passing: %s\n" -msgstr "Float4 인수 전달: %s\n" +msgid "Float8 argument passing: %s\n" +msgstr "Float8 인수 전달: %s\n" -#: pg_resetwal.c:821 pg_resetwal.c:823 +#: pg_resetwal.c:804 msgid "by reference" msgstr "참조별" -#: pg_resetwal.c:821 pg_resetwal.c:823 +#: pg_resetwal.c:804 msgid "by value" msgstr "값별" -#: pg_resetwal.c:822 -#, c-format -msgid "Float8 argument passing: %s\n" -msgstr "Float8 인수 전달: %s\n" - -#: pg_resetwal.c:824 +#: pg_resetwal.c:805 #, c-format msgid "Data page checksum version: %u\n" msgstr "데이터 페이지 체크섬 버전: %u\n" -#: pg_resetwal.c:838 +#: pg_resetwal.c:819 #, c-format msgid "" "\n" @@ -446,102 +446,102 @@ msgstr "" "변경될 값:\n" "\n" -#: pg_resetwal.c:842 +#: pg_resetwal.c:823 #, c-format msgid "First log segment after reset: %s\n" msgstr "리셋 뒤 첫 로그 세그먼트: %s\n" -#: pg_resetwal.c:846 +#: pg_resetwal.c:827 #, c-format msgid "NextMultiXactId: %u\n" msgstr "NextMultiXactId: %u\n" -#: pg_resetwal.c:848 +#: pg_resetwal.c:829 #, c-format msgid "OldestMultiXid: %u\n" msgstr "OldestMultiXid: %u\n" -#: pg_resetwal.c:850 +#: pg_resetwal.c:831 #, c-format msgid "OldestMulti's DB: %u\n" msgstr "OldestMultiXid의 DB: %u\n" -#: pg_resetwal.c:856 +#: pg_resetwal.c:837 #, c-format msgid "NextMultiOffset: %u\n" msgstr "NextMultiOffset: %u\n" -#: pg_resetwal.c:862 +#: pg_resetwal.c:843 #, c-format msgid "NextOID: %u\n" msgstr "NextOID: %u\n" -#: pg_resetwal.c:868 +#: pg_resetwal.c:849 #, c-format msgid "NextXID: %u\n" msgstr "NextXID: %u\n" -#: pg_resetwal.c:870 +#: pg_resetwal.c:851 #, c-format msgid "OldestXID: %u\n" msgstr "OldestXID: %u\n" -#: pg_resetwal.c:872 +#: pg_resetwal.c:853 #, c-format msgid "OldestXID's DB: %u\n" msgstr "OldestXID의 DB: %u\n" -#: pg_resetwal.c:878 +#: pg_resetwal.c:859 #, c-format msgid "NextXID epoch: %u\n" msgstr "NextXID epoch: %u\n" -#: pg_resetwal.c:884 +#: pg_resetwal.c:865 #, c-format msgid "oldestCommitTsXid: %u\n" msgstr "제일 오래된 CommitTsXid: %u\n" -#: pg_resetwal.c:889 +#: pg_resetwal.c:870 #, c-format msgid "newestCommitTsXid: %u\n" msgstr "최근 CommitTsXid: %u\n" -#: pg_resetwal.c:975 pg_resetwal.c:1043 pg_resetwal.c:1090 +#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071 #, c-format msgid "could not open directory \"%s\": %m" msgstr "\"%s\" 디렉터리 열 수 없음: %m" -#: pg_resetwal.c:1010 pg_resetwal.c:1063 pg_resetwal.c:1113 +#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094 #, c-format msgid "could not read directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 읽을 수 없음: %m" -#: pg_resetwal.c:1016 pg_resetwal.c:1069 pg_resetwal.c:1119 +#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100 #, c-format msgid "could not close directory \"%s\": %m" msgstr "\"%s\" 디렉터리를 닫을 수 없음: %m" -#: pg_resetwal.c:1055 pg_resetwal.c:1105 +#: pg_resetwal.c:1036 pg_resetwal.c:1086 #, c-format msgid "could not delete file \"%s\": %m" msgstr "\"%s\" 파일을 지울 수 없음: %m" -#: pg_resetwal.c:1186 +#: pg_resetwal.c:1167 #, c-format msgid "could not open file \"%s\": %m" msgstr "\"%s\" 파일을 열 수 없음: %m" -#: pg_resetwal.c:1196 pg_resetwal.c:1209 +#: pg_resetwal.c:1177 pg_resetwal.c:1190 #, c-format msgid "could not write file \"%s\": %m" msgstr "\"%s\" 파일 쓰기 실패: %m" -#: pg_resetwal.c:1216 +#: pg_resetwal.c:1197 #, c-format msgid "fsync error: %m" msgstr "fsync 오류: %m" -#: pg_resetwal.c:1227 +#: pg_resetwal.c:1208 #, c-format msgid "" "%s resets the PostgreSQL write-ahead log.\n" @@ -550,7 +550,7 @@ msgstr "" "%s 프로그램은 PostgreSQL 트랜잭션 로그를 다시 설정합니다.\n" "\n" -#: pg_resetwal.c:1228 +#: pg_resetwal.c:1209 #, c-format msgid "" "Usage:\n" @@ -561,12 +561,12 @@ msgstr "" " %s [옵션]... DATADIR\n" "\n" -#: pg_resetwal.c:1229 +#: pg_resetwal.c:1210 #, c-format msgid "Options:\n" msgstr "옵션들:\n" -#: pg_resetwal.c:1230 +#: pg_resetwal.c:1211 #, c-format msgid "" " -c, --commit-timestamp-ids=XID,XID\n" @@ -578,22 +578,22 @@ msgstr "" "션\n" " ID 값 (0이면 바꾸지 않음)\n" -#: pg_resetwal.c:1233 +#: pg_resetwal.c:1214 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]DATADIR 데이터 디렉터리\n" -#: pg_resetwal.c:1234 +#: pg_resetwal.c:1215 #, c-format msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n" msgstr " -e, --epoch=XIDEPOCH 다음 트랙잭션 ID epoch 지정\n" -#: pg_resetwal.c:1235 +#: pg_resetwal.c:1216 #, c-format msgid " -f, --force force update to be done\n" msgstr " -f, --force 강제로 갱신함\n" -#: pg_resetwal.c:1236 +#: pg_resetwal.c:1217 #, c-format msgid "" " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n" @@ -601,14 +601,14 @@ msgstr "" " -l, --next-wal-file=WALFILE 새 트랜잭션 로그를 위한 WAL 최소 시작 위치" "를 강제로 지정\n" -#: pg_resetwal.c:1237 +#: pg_resetwal.c:1218 #, c-format msgid "" " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n" msgstr "" " -m, --multixact-ids=MXID,MXID 다음 제일 오래된 멀티트랜잭션 ID 지정\n" -#: pg_resetwal.c:1238 +#: pg_resetwal.c:1219 #, c-format msgid "" " -n, --dry-run no update, just show what would be done\n" @@ -616,42 +616,47 @@ msgstr "" " -n, --dry-run 갱신하지 않음, 컨트롤 값들을 보여주기만 함" "(테스트용)\n" -#: pg_resetwal.c:1239 +#: pg_resetwal.c:1220 #, c-format msgid " -o, --next-oid=OID set next OID\n" msgstr " -o, --next-oid=OID 다음 OID 지정\n" -#: pg_resetwal.c:1240 +#: pg_resetwal.c:1221 #, c-format msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n" msgstr " -O, --multixact-offset=OFFSET 다음 멀티트랜잭션 옵셋 지정\n" -#: pg_resetwal.c:1241 +#: pg_resetwal.c:1222 #, c-format msgid "" " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: pg_resetwal.c:1242 +#: pg_resetwal.c:1223 #, c-format msgid " -x, --next-transaction-id=XID set next transaction ID\n" msgstr " -x, --next-transaction-id=XID 다음 트랜잭션 ID 지정\n" -#: pg_resetwal.c:1243 +#: pg_resetwal.c:1224 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=SIZE WAL 조각 파일 크기, MB 단위\n" -#: pg_resetwal.c:1244 +#: pg_resetwal.c:1225 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: pg_resetwal.c:1245 +#: pg_resetwal.c:1226 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"오류보고: .\n" +"문제점 보고 주소: <%s>\n" + +#: pg_resetwal.c:1227 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" diff --git a/src/bin/pg_resetwal/po/ru.po b/src/bin/pg_resetwal/po/ru.po index f005ddefa9a79..d0f196d807568 100644 --- a/src/bin/pg_resetwal/po/ru.po +++ b/src/bin/pg_resetwal/po/ru.po @@ -5,13 +5,13 @@ # Oleg Bartunov , 2004. # Sergey Burladyan , 2009. # Dmitriy Olshevskiy , 2014. -# Alexander Lakhin , 2012-2017, 2018, 2019. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: pg_resetxlog (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-09 12:21+0300\n" -"PO-Revision-Date: 2019-08-29 14:03+0300\n" +"POT-Creation-Date: 2020-09-03 11:22+0300\n" +"PO-Revision-Date: 2020-09-03 13:37+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -21,52 +21,57 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "важно: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "ошибка: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "предупреждение: " -#: ../../common/restricted_token.c:69 +#: ../../common/restricted_token.c:64 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "в этой ОС нельзя создавать ограниченные маркеры" +msgid "could not load library \"%s\": error code %lu" +msgstr "не удалось загрузить библиотеку \"%s\" (код ошибки: %lu)" -#: ../../common/restricted_token.c:78 +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "в этой ОС нельзя создавать ограниченные маркеры (код ошибки: %lu)" + +#: ../../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "не удалось открыть маркер процесса (код ошибки: %lu)" -#: ../../common/restricted_token.c:91 +#: ../../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "не удалось подготовить структуры SID (код ошибки: %lu)" -#: ../../common/restricted_token.c:110 +#: ../../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "не удалось создать ограниченный маркер (код ошибки: %lu)" -#: ../../common/restricted_token.c:131 +#: ../../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "не удалось запустить процесс для команды \"%s\" (код ошибки: %lu)" -#: ../../common/restricted_token.c:169 +#: ../../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "не удалось перезапуститься с ограниченным маркером (код ошибки: %lu)" -#: ../../common/restricted_token.c:185 +#: ../../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "не удалось получить код выхода от подпроцесса (код ошибки: %lu)" @@ -161,7 +166,7 @@ msgstr "не удалось считать права на каталог \"%s\" msgid "could not change directory to \"%s\": %m" msgstr "не удалось перейти в каталог \"%s\": %m" -#: pg_resetwal.c:381 pg_resetwal.c:545 pg_resetwal.c:602 +#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "не удалось открыть файл \"%s\" для чтения: %m" @@ -203,22 +208,22 @@ msgstr "" msgid "Write-ahead log reset\n" msgstr "Журнал предзаписи сброшен\n" -#: pg_resetwal.c:554 +#: pg_resetwal.c:553 #, c-format msgid "unexpected empty file \"%s\"" msgstr "файл \"%s\" оказался пустым" -#: pg_resetwal.c:556 pg_resetwal.c:618 +#: pg_resetwal.c:555 pg_resetwal.c:611 #, c-format msgid "could not read file \"%s\": %m" msgstr "не удалось прочитать файл \"%s\": %m" -#: pg_resetwal.c:571 +#: pg_resetwal.c:564 #, c-format msgid "data directory is of wrong version" msgstr "каталог данных имеет неверную версию" -#: pg_resetwal.c:572 +#: pg_resetwal.c:565 #, c-format msgid "" "File \"%s\" contains \"%s\", which is not compatible with this program's " @@ -226,7 +231,7 @@ msgid "" msgstr "" "Файл \"%s\" содержит строку \"%s\", а ожидается версия программы \"%s\"." -#: pg_resetwal.c:605 +#: pg_resetwal.c:598 #, c-format msgid "" "If you are sure the data directory path is correct, execute\n" @@ -237,14 +242,14 @@ msgstr "" " touch %s\n" "и повторите попытку." -#: pg_resetwal.c:636 +#: pg_resetwal.c:629 #, c-format msgid "pg_control exists but has invalid CRC; proceed with caution" msgstr "" "pg_control существует, но его контрольная сумма неверна; продолжайте с " "осторожностью" -#: pg_resetwal.c:645 +#: pg_resetwal.c:638 #, c-format msgid "" "pg_control specifies invalid WAL segment size (%d byte); proceed with caution" @@ -261,14 +266,14 @@ msgstr[2] "" "в pg_control указан некорректный размер сегмента WAL (%d Б); продолжайте с " "осторожностью" -#: pg_resetwal.c:656 +#: pg_resetwal.c:649 #, c-format msgid "pg_control exists but is broken or wrong version; ignoring it" msgstr "" "pg_control испорчен или имеет неизвестную либо недопустимую версию; " "игнорируется..." -#: pg_resetwal.c:754 +#: pg_resetwal.c:744 #, c-format msgid "" "Guessed pg_control values:\n" @@ -277,7 +282,7 @@ msgstr "" "Предполагаемые значения pg_control:\n" "\n" -#: pg_resetwal.c:756 +#: pg_resetwal.c:746 #, c-format msgid "" "Current pg_control values:\n" @@ -286,186 +291,181 @@ msgstr "" "Текущие значения pg_control:\n" "\n" -#: pg_resetwal.c:765 +#: pg_resetwal.c:748 #, c-format msgid "pg_control version number: %u\n" msgstr "Номер версии pg_control: %u\n" -#: pg_resetwal.c:767 +#: pg_resetwal.c:750 #, c-format msgid "Catalog version number: %u\n" msgstr "Номер версии каталога: %u\n" -#: pg_resetwal.c:769 +#: pg_resetwal.c:752 #, c-format -msgid "Database system identifier: %s\n" -msgstr "Идентификатор системы баз данных: %s\n" +msgid "Database system identifier: %llu\n" +msgstr "Идентификатор системы баз данных: %llu\n" # skip-rule: capital-letter-first -#: pg_resetwal.c:771 +#: pg_resetwal.c:754 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "Линия времени последней конт. точки: %u\n" # skip-rule: no-space-after-period -#: pg_resetwal.c:773 +#: pg_resetwal.c:756 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "Режим full_page_writes последней к.т: %s\n" -#: pg_resetwal.c:774 +#: pg_resetwal.c:757 msgid "off" msgstr "выкл." -#: pg_resetwal.c:774 +#: pg_resetwal.c:757 msgid "on" msgstr "вкл." # skip-rule: capital-letter-first -#: pg_resetwal.c:775 +#: pg_resetwal.c:758 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "NextXID последней конт. точки: %u:%u\n" # skip-rule: capital-letter-first -#: pg_resetwal.c:778 +#: pg_resetwal.c:761 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_resetwal.c:780 +#: pg_resetwal.c:763 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId послед. конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_resetwal.c:782 +#: pg_resetwal.c:765 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset послед. конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_resetwal.c:784 +#: pg_resetwal.c:767 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_resetwal.c:786 +#: pg_resetwal.c:769 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "БД с oldestXID последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_resetwal.c:788 +#: pg_resetwal.c:771 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID последней к. т.: %u\n" # skip-rule: capital-letter-first -#: pg_resetwal.c:790 +#: pg_resetwal.c:773 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid последней конт. точки: %u\n" # skip-rule: capital-letter-first, double-space -#: pg_resetwal.c:792 +#: pg_resetwal.c:775 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "БД с oldestMulti последней к. т.: %u\n" # skip-rule: capital-letter-first, double-space -#: pg_resetwal.c:794 +#: pg_resetwal.c:777 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "oldestCommitTsXid последней к. т.: %u\n" # skip-rule: capital-letter-first, double-space -#: pg_resetwal.c:796 +#: pg_resetwal.c:779 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "newestCommitTsXid последней к. т.: %u\n" -#: pg_resetwal.c:798 +#: pg_resetwal.c:781 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Макс. предел выравнивания данных: %u\n" -#: pg_resetwal.c:801 +#: pg_resetwal.c:784 #, c-format msgid "Database block size: %u\n" msgstr "Размер блока БД: %u\n" # skip-rule: double-space -#: pg_resetwal.c:803 +#: pg_resetwal.c:786 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Блоков в макс. сегменте отношений: %u\n" -#: pg_resetwal.c:805 +#: pg_resetwal.c:788 #, c-format msgid "WAL block size: %u\n" msgstr "Размер блока WAL: %u\n" -#: pg_resetwal.c:807 pg_resetwal.c:895 +#: pg_resetwal.c:790 pg_resetwal.c:876 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Байт в сегменте WAL: %u\n" -#: pg_resetwal.c:809 +#: pg_resetwal.c:792 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Максимальная длина идентификаторов: %u\n" -#: pg_resetwal.c:811 +#: pg_resetwal.c:794 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Максимальное число столбцов в индексе: %u\n" -#: pg_resetwal.c:813 +#: pg_resetwal.c:796 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Максимальный размер порции TOAST: %u\n" -#: pg_resetwal.c:815 +#: pg_resetwal.c:798 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Размер порции большого объекта: %u\n" -#: pg_resetwal.c:818 +#: pg_resetwal.c:801 #, c-format msgid "Date/time type storage: %s\n" msgstr "Формат хранения даты/времени: %s\n" -#: pg_resetwal.c:819 +#: pg_resetwal.c:802 msgid "64-bit integers" msgstr "64-битные целые" -#: pg_resetwal.c:820 +#: pg_resetwal.c:803 #, c-format -msgid "Float4 argument passing: %s\n" -msgstr "Передача аргумента Float4: %s\n" +msgid "Float8 argument passing: %s\n" +msgstr "Передача аргумента Float8: %s\n" -#: pg_resetwal.c:821 pg_resetwal.c:823 +#: pg_resetwal.c:804 msgid "by reference" msgstr "по ссылке" -#: pg_resetwal.c:821 pg_resetwal.c:823 +#: pg_resetwal.c:804 msgid "by value" msgstr "по значению" -#: pg_resetwal.c:822 -#, c-format -msgid "Float8 argument passing: %s\n" -msgstr "Передача аргумента Float8: %s\n" - -#: pg_resetwal.c:824 +#: pg_resetwal.c:805 #, c-format msgid "Data page checksum version: %u\n" msgstr "Версия контрольных сумм страниц: %u\n" -#: pg_resetwal.c:838 +#: pg_resetwal.c:819 #, c-format msgid "" "\n" @@ -478,102 +478,102 @@ msgstr "" "Значения, которые будут изменены:\n" "\n" -#: pg_resetwal.c:842 +#: pg_resetwal.c:823 #, c-format msgid "First log segment after reset: %s\n" msgstr "Первый сегмент журнала после сброса: %s\n" -#: pg_resetwal.c:846 +#: pg_resetwal.c:827 #, c-format msgid "NextMultiXactId: %u\n" msgstr "NextMultiXactId: %u\n" -#: pg_resetwal.c:848 +#: pg_resetwal.c:829 #, c-format msgid "OldestMultiXid: %u\n" msgstr "OldestMultiXid: %u\n" -#: pg_resetwal.c:850 +#: pg_resetwal.c:831 #, c-format msgid "OldestMulti's DB: %u\n" msgstr "БД с oldestMultiXid: %u\n" -#: pg_resetwal.c:856 +#: pg_resetwal.c:837 #, c-format msgid "NextMultiOffset: %u\n" msgstr "NextMultiOffset: %u\n" -#: pg_resetwal.c:862 +#: pg_resetwal.c:843 #, c-format msgid "NextOID: %u\n" msgstr "NextOID: %u\n" -#: pg_resetwal.c:868 +#: pg_resetwal.c:849 #, c-format msgid "NextXID: %u\n" msgstr "NextXID: %u\n" -#: pg_resetwal.c:870 +#: pg_resetwal.c:851 #, c-format msgid "OldestXID: %u\n" msgstr "OldestXID: %u\n" -#: pg_resetwal.c:872 +#: pg_resetwal.c:853 #, c-format msgid "OldestXID's DB: %u\n" msgstr "БД с oldestXID: %u\n" -#: pg_resetwal.c:878 +#: pg_resetwal.c:859 #, c-format msgid "NextXID epoch: %u\n" msgstr "Эпоха NextXID: %u\n" -#: pg_resetwal.c:884 +#: pg_resetwal.c:865 #, c-format msgid "oldestCommitTsXid: %u\n" msgstr "oldestCommitTsXid: %u\n" -#: pg_resetwal.c:889 +#: pg_resetwal.c:870 #, c-format msgid "newestCommitTsXid: %u\n" msgstr "newestCommitTsXid: %u\n" -#: pg_resetwal.c:975 pg_resetwal.c:1043 pg_resetwal.c:1090 +#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не удалось открыть каталог \"%s\": %m" -#: pg_resetwal.c:1010 pg_resetwal.c:1063 pg_resetwal.c:1113 +#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не удалось прочитать каталог \"%s\": %m" -#: pg_resetwal.c:1016 pg_resetwal.c:1069 pg_resetwal.c:1119 +#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100 #, c-format msgid "could not close directory \"%s\": %m" msgstr "не удалось закрыть каталог \"%s\": %m" -#: pg_resetwal.c:1055 pg_resetwal.c:1105 +#: pg_resetwal.c:1036 pg_resetwal.c:1086 #, c-format msgid "could not delete file \"%s\": %m" msgstr "ошибка при удалении файла \"%s\": %m" -#: pg_resetwal.c:1186 +#: pg_resetwal.c:1167 #, c-format msgid "could not open file \"%s\": %m" msgstr "не удалось открыть файл \"%s\": %m" -#: pg_resetwal.c:1196 pg_resetwal.c:1209 +#: pg_resetwal.c:1177 pg_resetwal.c:1190 #, c-format msgid "could not write file \"%s\": %m" msgstr "не удалось записать файл \"%s\": %m" -#: pg_resetwal.c:1216 +#: pg_resetwal.c:1197 #, c-format msgid "fsync error: %m" msgstr "ошибка синхронизации с ФС: %m" -#: pg_resetwal.c:1227 +#: pg_resetwal.c:1208 #, c-format msgid "" "%s resets the PostgreSQL write-ahead log.\n" @@ -582,7 +582,7 @@ msgstr "" "%s сбрасывает журнал предзаписи PostgreSQL.\n" "\n" -#: pg_resetwal.c:1228 +#: pg_resetwal.c:1209 #, c-format msgid "" "Usage:\n" @@ -593,12 +593,12 @@ msgstr "" " %s [ПАРАМЕТР]... КАТ_ДАННЫХ\n" "\n" -#: pg_resetwal.c:1229 +#: pg_resetwal.c:1210 #, c-format msgid "Options:\n" msgstr "Параметры:\n" -#: pg_resetwal.c:1230 +#: pg_resetwal.c:1211 #, c-format msgid "" " -c, --commit-timestamp-ids=XID,XID\n" @@ -609,23 +609,23 @@ msgstr "" " задать старейшую и новейшую транзакции,\n" " несущие метки времени (0 — не менять)\n" -#: pg_resetwal.c:1233 +#: pg_resetwal.c:1214 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]КАТ_ДАННЫХ каталог данных\n" -#: pg_resetwal.c:1234 +#: pg_resetwal.c:1215 #, c-format msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n" msgstr "" " -e, --epoch=XIDEPOCH задать эпоху для ID следующей транзакции\n" -#: pg_resetwal.c:1235 +#: pg_resetwal.c:1216 #, c-format msgid " -f, --force force update to be done\n" msgstr " -f, --force принудительное выполнение операции\n" -#: pg_resetwal.c:1236 +#: pg_resetwal.c:1217 #, c-format msgid "" " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n" @@ -633,7 +633,7 @@ msgstr "" " -l, --next-wal-file=ФАЙЛ_WAL задать минимальное начальное положение\n" " для нового WAL\n" -#: pg_resetwal.c:1237 +#: pg_resetwal.c:1218 #, c-format msgid "" " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n" @@ -641,7 +641,7 @@ msgstr "" " -m, --multixact-ids=MXID,MXID задать ID следующей и старейшей " "мультитранзакции\n" -#: pg_resetwal.c:1238 +#: pg_resetwal.c:1219 #, c-format msgid "" " -n, --dry-run no update, just show what would be done\n" @@ -649,47 +649,62 @@ msgstr "" " -n, --dry-run показать, какие действия будут выполнены,\n" " но не выполнять их\n" -#: pg_resetwal.c:1239 +#: pg_resetwal.c:1220 #, c-format msgid " -o, --next-oid=OID set next OID\n" msgstr " -o, --next-oid=OID задать следующий OID\n" -#: pg_resetwal.c:1240 +#: pg_resetwal.c:1221 #, c-format msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n" msgstr "" " -O, --multixact-offset=СМЕЩЕНИЕ задать смещение следующей " "мультитранзакции\n" -#: pg_resetwal.c:1241 +#: pg_resetwal.c:1222 #, c-format msgid "" " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_resetwal.c:1242 +#: pg_resetwal.c:1223 #, c-format msgid " -x, --next-transaction-id=XID set next transaction ID\n" msgstr " -x, --next-transaction-id=XID задать ID следующей транзакции\n" -#: pg_resetwal.c:1243 +#: pg_resetwal.c:1224 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=РАЗМЕР размер сегментов WAL (в мегабайтах)\n" -#: pg_resetwal.c:1244 +#: pg_resetwal.c:1225 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_resetwal.c:1245 +#: pg_resetwal.c:1226 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Об ошибках сообщайте по адресу .\n" +"Об ошибках сообщайте по адресу <%s>.\n" + +#: pg_resetwal.c:1227 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#~ msgid "Float4 argument passing: %s\n" +#~ msgstr "Передача аргумента Float4: %s\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Об ошибках сообщайте по адресу .\n" #~ msgid "%s: could not create pg_control file: %s\n" #~ msgstr "%s: не удалось создать файл pg_control: %s\n" diff --git a/src/bin/pg_resetwal/po/uk.po b/src/bin/pg_resetwal/po/uk.po new file mode 100644 index 0000000000000..b6c024e7aa026 --- /dev/null +++ b/src/bin/pg_resetwal/po/uk.po @@ -0,0 +1,618 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:16+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: \n" +"Language-Team: Ukrainian\n" +"Language: uk_UA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /DEV_13/pg_resetwal.pot\n" +"X-Crowdin-File-ID: 502\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "збій: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "помилка: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "попередження: " + +#: ../../common/restricted_token.c:64 +#, c-format +msgid "could not load library \"%s\": error code %lu" +msgstr "не вдалося завантажити бібліотеку \"%s\": код помилки %lu" + +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "не вдалося створити обмежені токени на цій платформі: код помилки %lu" + +#: ../../common/restricted_token.c:82 +#, c-format +msgid "could not open process token: error code %lu" +msgstr "не вдалося відкрити токен процесу: код помилки %lu" + +#: ../../common/restricted_token.c:97 +#, c-format +msgid "could not allocate SIDs: error code %lu" +msgstr "не вдалося виділити SID: код помилки %lu" + +#: ../../common/restricted_token.c:119 +#, c-format +msgid "could not create restricted token: error code %lu" +msgstr "не вдалося створити обмежений токен: код помилки %lu" + +#: ../../common/restricted_token.c:140 +#, c-format +msgid "could not start process for command \"%s\": error code %lu" +msgstr "не вдалося запустити процес для команди \"%s\": код помилки %lu" + +#: ../../common/restricted_token.c:178 +#, c-format +msgid "could not re-execute with restricted token: error code %lu" +msgstr "не вдалося перезапустити з обмеженим токеном: код помилки %lu" + +#: ../../common/restricted_token.c:194 +#, c-format +msgid "could not get exit code from subprocess: error code %lu" +msgstr "не вдалося отримати код завершення підпроцесу: код помилки %lu" + +#. translator: the second %s is a command line argument (-e, etc) +#: pg_resetwal.c:160 pg_resetwal.c:175 pg_resetwal.c:190 pg_resetwal.c:197 +#: pg_resetwal.c:221 pg_resetwal.c:236 pg_resetwal.c:244 pg_resetwal.c:269 +#: pg_resetwal.c:283 +#, c-format +msgid "invalid argument for option %s" +msgstr "неприпустимий аргумент для параметру %s" + +#: pg_resetwal.c:161 pg_resetwal.c:176 pg_resetwal.c:191 pg_resetwal.c:198 +#: pg_resetwal.c:222 pg_resetwal.c:237 pg_resetwal.c:245 pg_resetwal.c:270 +#: pg_resetwal.c:284 pg_resetwal.c:310 pg_resetwal.c:323 pg_resetwal.c:331 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" + +#: pg_resetwal.c:166 +#, c-format +msgid "transaction ID epoch (-e) must not be -1" +msgstr "епоха ID транзакції (-e) не повинна бути -1" + +#: pg_resetwal.c:181 +#, c-format +msgid "transaction ID (-x) must not be 0" +msgstr "ID транзакції (-x) не повинна бути 0" + +#: pg_resetwal.c:205 pg_resetwal.c:212 +#, c-format +msgid "transaction ID (-c) must be either 0 or greater than or equal to 2" +msgstr "ID транзакції (-c) повинен дорівнювати 0, бути більшим за або дорівнювати 2" + +#: pg_resetwal.c:227 +#, c-format +msgid "OID (-o) must not be 0" +msgstr "OID (-o) не може бути 0" + +#: pg_resetwal.c:250 +#, c-format +msgid "multitransaction ID (-m) must not be 0" +msgstr "ID мультитранзакції (-m) не повинен бути 0" + +#: pg_resetwal.c:260 +#, c-format +msgid "oldest multitransaction ID (-m) must not be 0" +msgstr "найстарший ID мультитранзакції (-m) не повинен бути 0" + +#: pg_resetwal.c:275 +#, c-format +msgid "multitransaction offset (-O) must not be -1" +msgstr "зсув мультитранзакції (-O) не повинен бути -1" + +#: pg_resetwal.c:299 +#, c-format +msgid "argument of --wal-segsize must be a number" +msgstr "аргумент --wal-segsize повинен бути числом" + +#: pg_resetwal.c:304 +#, c-format +msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024" +msgstr "аргумент --wal-segsize повинен бути ступенем 2 між 1 і 1024" + +#: pg_resetwal.c:321 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "забагато аргументів у командному рядку (перший \"%s\")" + +#: pg_resetwal.c:330 +#, c-format +msgid "no data directory specified" +msgstr "каталог даних не вказано" + +#: pg_resetwal.c:344 +#, c-format +msgid "cannot be executed by \"root\"" +msgstr "\"root\" не може це виконувати" + +#: pg_resetwal.c:345 +#, c-format +msgid "You must run %s as the PostgreSQL superuser." +msgstr "Запускати %s треба від суперкористувача PostgreSQL." + +#: pg_resetwal.c:356 +#, c-format +msgid "could not read permissions of directory \"%s\": %m" +msgstr "не вдалося прочитати дозволи на каталог \"%s\": %m" + +#: pg_resetwal.c:365 +#, c-format +msgid "could not change directory to \"%s\": %m" +msgstr "не вдалося змінити каталог на \"%s\": %m" + +#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "не вдалося відкрити файл \"%s\" для читання: %m" + +#: pg_resetwal.c:388 +#, c-format +msgid "lock file \"%s\" exists" +msgstr "файл блокування \"%s\" вже існує" + +#: pg_resetwal.c:389 +#, c-format +msgid "Is a server running? If not, delete the lock file and try again." +msgstr "Чи запущений сервер? Якщо ні, видаліть файл блокування і спробуйте знову." + +#: pg_resetwal.c:492 +#, c-format +msgid "\n" +"If these values seem acceptable, use -f to force reset.\n" +msgstr "\n" +"Якщо ці значення виглядають допустимими, використайте -f, щоб провести перевстановлення.\n" + +#: pg_resetwal.c:504 +#, c-format +msgid "The database server was not shut down cleanly.\n" +"Resetting the write-ahead log might cause data to be lost.\n" +"If you want to proceed anyway, use -f to force reset.\n" +msgstr "Сервер баз даних був зупинений некоректно.\n" +"Очищення журналу передзапису може привести до втрати даних.\n" +"Якщо ви все одно хочете продовжити, використайте параметр -f.\n" + +#: pg_resetwal.c:518 +#, c-format +msgid "Write-ahead log reset\n" +msgstr "Журнал передзапису скинуто\n" + +#: pg_resetwal.c:553 +#, c-format +msgid "unexpected empty file \"%s\"" +msgstr "неочікуваний порожній файл \"%s\"" + +#: pg_resetwal.c:555 pg_resetwal.c:611 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не вдалося прочитати файл \"%s\": %m" + +#: pg_resetwal.c:564 +#, c-format +msgid "data directory is of wrong version" +msgstr "каталог даних неправильної версії" + +#: pg_resetwal.c:565 +#, c-format +msgid "File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\"." +msgstr "Файл \"%s\" містить \"%s\", який не сумісний з версією цієї програми \"%s\"." + +#: pg_resetwal.c:598 +#, c-format +msgid "If you are sure the data directory path is correct, execute\n" +" touch %s\n" +"and try again." +msgstr "Якщо Ви впевнені, що шлях каталогу даних є правильним, виконайте \n" +" touch %s\n" +"і спробуйте знову." + +#: pg_resetwal.c:629 +#, c-format +msgid "pg_control exists but has invalid CRC; proceed with caution" +msgstr "pg_control існує, але має недопустимий CRC; продовжуйте з обережністю" + +#: pg_resetwal.c:638 +#, c-format +msgid "pg_control specifies invalid WAL segment size (%d byte); proceed with caution" +msgid_plural "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution" +msgstr[0] "pg_control вказує неприпустимий розмір сегмента WAL (%d байт); продовжуйте з обережністю" +msgstr[1] "pg_control вказує неприпустимий розмір сегмента WAL (%d байти); продовжуйте з обережністю" +msgstr[2] "pg_control вказує неприпустимий розмір сегмента WAL (%d байтів); продовжуйте з обережністю" +msgstr[3] "pg_control вказує неприпустимий розмір сегмента WAL (%d байтів); продовжуйте з обережністю" + +#: pg_resetwal.c:649 +#, c-format +msgid "pg_control exists but is broken or wrong version; ignoring it" +msgstr "pg_control існує, але зламаний або неправильної версії; ігнорується" + +#: pg_resetwal.c:744 +#, c-format +msgid "Guessed pg_control values:\n\n" +msgstr "Припустимі значення pg_control:\n\n" + +#: pg_resetwal.c:746 +#, c-format +msgid "Current pg_control values:\n\n" +msgstr "Поточні значення pg_control:\n\n" + +#: pg_resetwal.c:748 +#, c-format +msgid "pg_control version number: %u\n" +msgstr "pg_control номер версії: %u\n" + +#: pg_resetwal.c:750 +#, c-format +msgid "Catalog version number: %u\n" +msgstr "Номер версії каталогу: %u\n" + +#: pg_resetwal.c:752 +#, c-format +msgid "Database system identifier: %llu\n" +msgstr "Системний ідентифікатор бази даних: %llu\n" + +#: pg_resetwal.c:754 +#, c-format +msgid "Latest checkpoint's TimeLineID: %u\n" +msgstr "Останній TimeLineID контрольної точки: %u\n" + +#: pg_resetwal.c:756 +#, c-format +msgid "Latest checkpoint's full_page_writes: %s\n" +msgstr "Останній full_page_writes контрольної точки: %s\n" + +#: pg_resetwal.c:757 +msgid "off" +msgstr "вимк" + +#: pg_resetwal.c:757 +msgid "on" +msgstr "увімк" + +#: pg_resetwal.c:758 +#, c-format +msgid "Latest checkpoint's NextXID: %u:%u\n" +msgstr "Останній NextXID контрольної точки: %u%u\n" + +#: pg_resetwal.c:761 +#, c-format +msgid "Latest checkpoint's NextOID: %u\n" +msgstr "Останній NextOID контрольної точки: %u\n" + +#: pg_resetwal.c:763 +#, c-format +msgid "Latest checkpoint's NextMultiXactId: %u\n" +msgstr "Останній NextMultiXactId контрольної точки: %u\n" + +#: pg_resetwal.c:765 +#, c-format +msgid "Latest checkpoint's NextMultiOffset: %u\n" +msgstr "Останній NextMultiOffset контрольної точки: %u\n" + +#: pg_resetwal.c:767 +#, c-format +msgid "Latest checkpoint's oldestXID: %u\n" +msgstr "Останній oldestXID контрольної точки: %u\n" + +#: pg_resetwal.c:769 +#, c-format +msgid "Latest checkpoint's oldestXID's DB: %u\n" +msgstr "Остання DB останнього oldestXID контрольної точки: %u\n" + +#: pg_resetwal.c:771 +#, c-format +msgid "Latest checkpoint's oldestActiveXID: %u\n" +msgstr "Останній oldestActiveXID контрольної точки: %u\n" + +#: pg_resetwal.c:773 +#, c-format +msgid "Latest checkpoint's oldestMultiXid: %u\n" +msgstr "Останній oldestMultiXid контрольної точки: %u \n" + +#: pg_resetwal.c:775 +#, c-format +msgid "Latest checkpoint's oldestMulti's DB: %u\n" +msgstr "Остання DB останньої oldestMulti контрольної точки: %u\n" + +#: pg_resetwal.c:777 +#, c-format +msgid "Latest checkpoint's oldestCommitTsXid:%u\n" +msgstr "Останній oldestCommitTsXid контрольної точки:%u\n" + +#: pg_resetwal.c:779 +#, c-format +msgid "Latest checkpoint's newestCommitTsXid:%u\n" +msgstr "Останній newestCommitTsXid контрольної точки: %u\n" + +#: pg_resetwal.c:781 +#, c-format +msgid "Maximum data alignment: %u\n" +msgstr "Максимальне вирівнювання даних: %u\n" + +#: pg_resetwal.c:784 +#, c-format +msgid "Database block size: %u\n" +msgstr "Розмір блоку бази даних: %u\n" + +#: pg_resetwal.c:786 +#, c-format +msgid "Blocks per segment of large relation: %u\n" +msgstr "Блоків на сегмент великого відношення: %u\n" + +#: pg_resetwal.c:788 +#, c-format +msgid "WAL block size: %u\n" +msgstr "Pозмір блоку WAL: %u\n" + +#: pg_resetwal.c:790 pg_resetwal.c:876 +#, c-format +msgid "Bytes per WAL segment: %u\n" +msgstr "Байтів на сегмент WAL: %u\n" + +#: pg_resetwal.c:792 +#, c-format +msgid "Maximum length of identifiers: %u\n" +msgstr "Максимальна довжина ідентифікаторів: %u\n" + +#: pg_resetwal.c:794 +#, c-format +msgid "Maximum columns in an index: %u\n" +msgstr "Максимальна кількість стовпців в індексі: %u\n" + +#: pg_resetwal.c:796 +#, c-format +msgid "Maximum size of a TOAST chunk: %u\n" +msgstr "Максимальний розмір сегменту TOAST: %u\n" + +#: pg_resetwal.c:798 +#, c-format +msgid "Size of a large-object chunk: %u\n" +msgstr "Розмір сегменту великих обїєктів: %u\n" + +#: pg_resetwal.c:801 +#, c-format +msgid "Date/time type storage: %s\n" +msgstr "Дата/час типу сховища: %s\n" + +#: pg_resetwal.c:802 +msgid "64-bit integers" +msgstr "64-бітні цілі" + +#: pg_resetwal.c:803 +#, c-format +msgid "Float8 argument passing: %s\n" +msgstr "Передача аргументу Float8: %s\n" + +#: pg_resetwal.c:804 +msgid "by reference" +msgstr "за посиланням" + +#: pg_resetwal.c:804 +msgid "by value" +msgstr "за значенням" + +#: pg_resetwal.c:805 +#, c-format +msgid "Data page checksum version: %u\n" +msgstr "Версія контрольних сум сторінок даних: %u\n" + +#: pg_resetwal.c:819 +#, c-format +msgid "\n\n" +"Values to be changed:\n\n" +msgstr "\n\n" +"Значення, що потребують зміни:\n\n" + +#: pg_resetwal.c:823 +#, c-format +msgid "First log segment after reset: %s\n" +msgstr "Перший сегмент журналу після скидання: %s\n" + +#: pg_resetwal.c:827 +#, c-format +msgid "NextMultiXactId: %u\n" +msgstr "NextMultiXactId: %u\n" + +#: pg_resetwal.c:829 +#, c-format +msgid "OldestMultiXid: %u\n" +msgstr "OldestMultiXid: %u\n" + +#: pg_resetwal.c:831 +#, c-format +msgid "OldestMulti's DB: %u\n" +msgstr "OldestMulti's DB: %u\n" + +#: pg_resetwal.c:837 +#, c-format +msgid "NextMultiOffset: %u\n" +msgstr "NextMultiOffset: %u\n" + +#: pg_resetwal.c:843 +#, c-format +msgid "NextOID: %u\n" +msgstr "NextOID: %u\n" + +#: pg_resetwal.c:849 +#, c-format +msgid "NextXID: %u\n" +msgstr "NextXID: %u\n" + +#: pg_resetwal.c:851 +#, c-format +msgid "OldestXID: %u\n" +msgstr "OldestXID: %u\n" + +#: pg_resetwal.c:853 +#, c-format +msgid "OldestXID's DB: %u\n" +msgstr "OldestXID's DB: %u\n" + +#: pg_resetwal.c:859 +#, c-format +msgid "NextXID epoch: %u\n" +msgstr "Епоха NextXID: %u\n" + +#: pg_resetwal.c:865 +#, c-format +msgid "oldestCommitTsXid: %u\n" +msgstr "oldestCommitTsXid: %u\n" + +#: pg_resetwal.c:870 +#, c-format +msgid "newestCommitTsXid: %u\n" +msgstr "newestCommitTsXid: %u\n" + +#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не вдалося відкрити каталог \"%s\": %m" + +#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "не вдалося прочитати каталог \"%s\": %m" + +#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "не вдалося закрити каталог \"%s\": %m" + +#: pg_resetwal.c:1036 pg_resetwal.c:1086 +#, c-format +msgid "could not delete file \"%s\": %m" +msgstr "не вдалося видалити файл \"%s\": %m" + +#: pg_resetwal.c:1167 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" + +#: pg_resetwal.c:1177 pg_resetwal.c:1190 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "не вдалося записати файл \"%s\": %m" + +#: pg_resetwal.c:1197 +#, c-format +msgid "fsync error: %m" +msgstr "помилка fsync: %m" + +#: pg_resetwal.c:1208 +#, c-format +msgid "%s resets the PostgreSQL write-ahead log.\n\n" +msgstr "%s скидає журнал передзапису PostgreSQL.\n\n" + +#: pg_resetwal.c:1209 +#, c-format +msgid "Usage:\n" +" %s [OPTION]... DATADIR\n\n" +msgstr "Використання:\n" +" %s [OPTION]... КАТАЛОГ_ДАНИХ\n\n" + +#: pg_resetwal.c:1210 +#, c-format +msgid "Options:\n" +msgstr "Параметри:\n" + +#: pg_resetwal.c:1211 +#, c-format +msgid " -c, --commit-timestamp-ids=XID,XID\n" +" set oldest and newest transactions bearing\n" +" commit timestamp (zero means no change)\n" +msgstr " -c, --commit-timestamp-ids=XID,XID \n" +" встановити найстарішу та найновішу транзакції\n" +" затвердити позначку часу (0 -- не змінювати)\n" + +#: pg_resetwal.c:1214 +#, c-format +msgid " [-D, --pgdata=]DATADIR data directory\n" +msgstr " [-D, --pgdata=]DATADIR каталог даних\n" + +#: pg_resetwal.c:1215 +#, c-format +msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n" +msgstr " -e, --epoch=XIDEPOCH встановити наступну епоху ID транзакцій\n" + +#: pg_resetwal.c:1216 +#, c-format +msgid " -f, --force force update to be done\n" +msgstr " -f, --force потрібно виконати оновлення\n" + +#: pg_resetwal.c:1217 +#, c-format +msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n" +msgstr " -l, --next-wal-file=WALFILE задати мінімальне початкове розташування для нового WAL\n" + +#: pg_resetwal.c:1218 +#, c-format +msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n" +msgstr " -m, --multixact-ids=MXID,MXID задати ідентифікатор наступної і найстарішої мультитранзакції\n" + +#: pg_resetwal.c:1219 +#, c-format +msgid " -n, --dry-run no update, just show what would be done\n" +msgstr " -n, --dry-run не оновлювати, лише показати, що буде зроблено\n" + +#: pg_resetwal.c:1220 +#, c-format +msgid " -o, --next-oid=OID set next OID\n" +msgstr " -o, --next-oid=OID задати наступний OID\n" + +#: pg_resetwal.c:1221 +#, c-format +msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n" +msgstr " -O, --multixact-offset=OFFSET задати зсув наступної мультітранзакції\n" + +#: pg_resetwal.c:1222 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію і вийти\n" + +#: pg_resetwal.c:1223 +#, c-format +msgid " -x, --next-transaction-id=XID set next transaction ID\n" +msgstr " -x, --next-transaction-id=XID задати ідентифікатор наступної транзакції\n" + +#: pg_resetwal.c:1224 +#, c-format +msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" +msgstr " --wal-segsize=SIZE розміри сегментів WAL у мегабайтах\n" + +#: pg_resetwal.c:1225 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати довідку, потім вийти\n" + +#: pg_resetwal.c:1226 +#, c-format +msgid "\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Повідомляти про помилки на <%s>.\n" + +#: pg_resetwal.c:1227 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + diff --git a/src/bin/pg_rewind/nls.mk b/src/bin/pg_rewind/nls.mk index 5786a05ef2a2a..a561f965df7c5 100644 --- a/src/bin/pg_rewind/nls.mk +++ b/src/bin/pg_rewind/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_rewind/nls.mk CATALOG_NAME = pg_rewind -AVAIL_LANGUAGES = cs de es fr it ja ko pl pt_BR ru sv tr zh_CN +AVAIL_LANGUAGES = cs de es fr it ja ko pl pt_BR ru sv tr uk zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) datapagemap.c file_ops.c filemap.c libpq_source.c local_source.c parsexlog.c pg_rewind.c timeline.c xlogreader.c ../../common/fe_memutils.c ../../common/restricted_token.c ../../fe_utils/archive.c ../../fe_utils/recovery_gen.c GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) pg_fatal report_invalid_record:2 GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) \ diff --git a/src/bin/pg_rewind/po/cs.po b/src/bin/pg_rewind/po/cs.po index 1f1db7d524882..1f4a8ebce1992 100644 --- a/src/bin/pg_rewind/po/cs.po +++ b/src/bin/pg_rewind/po/cs.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_rewind (PostgreSQL) 11\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:15+0000\n" -"PO-Revision-Date: 2019-09-27 20:08+0200\n" +"POT-Creation-Date: 2020-10-31 16:16+0000\n" +"PO-Revision-Date: 2020-10-31 21:24+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: cs\n" @@ -16,82 +16,133 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" "X-Poedit-Bookmarks: -1,-1,-1,-1,-1,-1,-1,-1,-1,17\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format -#| msgid "SQL error: %s\n" msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format -#| msgid "warning" msgid "warning: " msgstr "warning: " #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "nedostatek paměti\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "nelze duplikovat null pointer (interní chyba)\n" -#: ../../common/restricted_token.c:69 +#: ../../common/restricted_token.c:64 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "na této platformě nelze vytvářet vyhrazené tokeny" +msgid "could not load library \"%s\": error code %lu" +msgstr "nelze načíst knihovnu \"%s\": kód chyby %lu" -#: ../../common/restricted_token.c:78 +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "na této platformě nelze vytvářet vyhrazené tokeny: kód chyby %lu" + +#: ../../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "nelze otevřít token procesu: chybový kód %lu" -#: ../../common/restricted_token.c:91 +#: ../../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "nelze alokovat SIDs: chybový kód %lu" -#: ../../common/restricted_token.c:110 +#: ../../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "nelze vytvořit vyhrazený token: chybový kód %lu" -#: ../../common/restricted_token.c:131 +#: ../../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "nelze nastartovat proces pro příkaz \"%s\": chybový kód %lu" -#: ../../common/restricted_token.c:169 +#: ../../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "nelze znovu spustit s vyhrazeným tokenem: chybový kód %lu" -#: ../../common/restricted_token.c:185 +#: ../../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "nelze získat návratový kód z podprovesu: chybový kód %lu" -#: copy_fetch.c:59 +#: ../../fe_utils/archive.c:53 #, c-format -msgid "could not open directory \"%s\": %m" -msgstr "nelze otevřít adresář \"%s\": %m" +msgid "cannot use restore_command with %%r placeholder" +msgstr "nelze použít restore_command se zástupnou hodnotou %%r" + +#: ../../fe_utils/archive.c:74 +#, c-format +msgid "unexpected file size for \"%s\": %lu instead of %lu" +msgstr "neočekávaná velikost souboru \"%s\": %lu namísto %lu" -#: copy_fetch.c:88 filemap.c:187 filemap.c:348 +#: ../../fe_utils/archive.c:85 +#, c-format +msgid "could not open file \"%s\" restored from archive: %m" +msgstr "nelze otevřít soubor \"%s\" obnovený z archivu: %m" + +#: ../../fe_utils/archive.c:97 copy_fetch.c:88 filemap.c:208 #, c-format msgid "could not stat file \"%s\": %m" msgstr "nelze přistoupit k souboru \"%s\": %m" +#: ../../fe_utils/archive.c:112 +#, c-format +msgid "restore_command failed: %s" +msgstr "restore_command selhal: %s" + +#: ../../fe_utils/archive.c:121 +#, c-format +msgid "could not restore file \"%s\" from archive" +msgstr "nelze obnovit soubor\"%s\" z archivu" + +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:73 parsexlog.c:125 +#: parsexlog.c:185 +#, c-format +msgid "out of memory" +msgstr "nedostatek paměti" + +#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:298 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "nelze otevřít soubor \"%s\": %m" + +#: ../../fe_utils/recovery_gen.c:140 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "nelze zapsat do souboru \"%s\": %m" + +#: ../../fe_utils/recovery_gen.c:152 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "nelze vytvořit soubor \"%s\": %m" + +#: copy_fetch.c:59 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "nelze otevřít adresář \"%s\": %m" + #: copy_fetch.c:117 #, c-format msgid "could not read symbolic link \"%s\": %m" @@ -127,7 +178,7 @@ msgstr "nelze otevřít zdrojový soubor \"%s\": %m" msgid "could not seek in source file: %m" msgstr "nelze změnit pozici (seek) ve zdrojovém souboru: %m" -#: copy_fetch.c:187 file_ops.c:311 parsexlog.c:314 +#: copy_fetch.c:187 file_ops.c:311 parsexlog.c:336 #, c-format msgid "could not read file \"%s\": %m" msgstr "nelze číst soubor \"%s\": %m" @@ -207,202 +258,197 @@ msgstr "nelze odstranit symbolický odkaz \"%s\": %m" msgid "could not open file \"%s\" for reading: %m" msgstr "nelze otevřít soubor \"%s\" pro čtení: %m" -#: file_ops.c:314 parsexlog.c:316 +#: file_ops.c:314 parsexlog.c:338 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "nelze číst soubor \"%s\": načteno %d z %zu" -#: filemap.c:179 +#: filemap.c:200 #, c-format msgid "data file \"%s\" in source is not a regular file" msgstr "datový soubor \"%s\" ve zdroji není obyčejný soubor" -#: filemap.c:201 +#: filemap.c:222 #, c-format msgid "\"%s\" is not a directory" msgstr "\"%s\" není adresář" -#: filemap.c:224 +#: filemap.c:245 #, c-format msgid "\"%s\" is not a symbolic link" msgstr "\"%s\" není symbolický odkaz" -#: filemap.c:236 +#: filemap.c:257 #, c-format msgid "\"%s\" is not a regular file" msgstr "\"%s\" není obyčejný soubor" -#: filemap.c:360 +#: filemap.c:369 #, c-format msgid "source file list is empty" msgstr "seznam zdrojových souborů je prázdný" -#: filemap.c:475 +#: filemap.c:484 #, c-format msgid "unexpected page modification for directory or symbolic link \"%s\"" msgstr "neočekávaná modifikace stránky pro adresář nebo symbolický odkaz \"%s\"" -#: libpq_fetch.c:52 +#: libpq_fetch.c:50 #, c-format msgid "could not connect to server: %s" msgstr "nelze se připojit k serveru: %s" -#: libpq_fetch.c:56 +#: libpq_fetch.c:54 #, c-format msgid "connected to server" msgstr "připojen k serveru" -#: libpq_fetch.c:65 +#: libpq_fetch.c:63 #, c-format msgid "could not clear search_path: %s" msgstr "nelze vyčistit search_path: %s" -#: libpq_fetch.c:77 +#: libpq_fetch.c:75 #, c-format msgid "source server must not be in recovery mode" msgstr "zdrojový server musí být v recovery módu" -#: libpq_fetch.c:87 +#: libpq_fetch.c:85 #, c-format msgid "full_page_writes must be enabled in the source server" msgstr "full_page_writes musí být zapnuty na zdrojovém serveru" -#: libpq_fetch.c:113 libpq_fetch.c:139 +#: libpq_fetch.c:111 #, c-format -msgid "error running query (%s) in source server: %s" +msgid "error running query (%s) on source server: %s" msgstr "chyba při spuštění dotazu (%s) na zdrojovém serveru: %s" -#: libpq_fetch.c:118 +#: libpq_fetch.c:116 #, c-format msgid "unexpected result set from query" msgstr "neočekávaný výsledek dotazu" -#: libpq_fetch.c:159 +#: libpq_fetch.c:137 +#, c-format +msgid "error running query (%s) in source server: %s" +msgstr "chyba při spuštění dotazu (%s) na zdrojovém serveru: %s" + +#: libpq_fetch.c:157 #, c-format msgid "unrecognized result \"%s\" for current WAL insert location" msgstr "nerozpoznaný výsledek \"%s\" pro aktuální WAL insert pozici" -#: libpq_fetch.c:209 +#: libpq_fetch.c:207 #, c-format msgid "could not fetch file list: %s" msgstr "nelze načíst seznam souborů: %s" -#: libpq_fetch.c:214 +#: libpq_fetch.c:212 #, c-format msgid "unexpected result set while fetching file list" msgstr "neočekávaný výsledek při načítání seznamu souborů" -#: libpq_fetch.c:262 +#: libpq_fetch.c:265 #, c-format msgid "could not send query: %s" msgstr "nelze zaslat dotaz: %s" -#: libpq_fetch.c:267 +#: libpq_fetch.c:270 #, c-format msgid "could not set libpq connection to single row mode" msgstr "nelze nastavit libpq spojení na single row mód" -#: libpq_fetch.c:288 +#: libpq_fetch.c:290 #, c-format msgid "unexpected result while fetching remote files: %s" msgstr "neočekávaný výsledek při načítání vzdálených souborů: %s" -#: libpq_fetch.c:294 +#: libpq_fetch.c:296 #, c-format msgid "unexpected result set size while fetching remote files" msgstr "neočekávaná velikost výsledku při načítání vzdálených souborů" -#: libpq_fetch.c:300 +#: libpq_fetch.c:302 #, c-format msgid "unexpected data types in result set while fetching remote files: %u %u %u" msgstr "neočekávané datové typy ve vysledku při načítání vzdálených souborů: %u %u %u" -#: libpq_fetch.c:308 +#: libpq_fetch.c:310 #, c-format msgid "unexpected result format while fetching remote files" msgstr "neočekávaný formát výsledku při načítání vzdálených souborů" -#: libpq_fetch.c:314 +#: libpq_fetch.c:316 #, c-format msgid "unexpected null values in result while fetching remote files" msgstr "neočekávané null hodnoty ve výsledku při načítání vzdálených souborů" -#: libpq_fetch.c:318 +#: libpq_fetch.c:320 #, c-format msgid "unexpected result length while fetching remote files" msgstr "neočekávaná délka výsledku při načítání vzdálených souborů" -#: libpq_fetch.c:384 +#: libpq_fetch.c:381 #, c-format msgid "could not fetch remote file \"%s\": %s" msgstr "nelze načíst vzdálený soubor \"%s\": %s" -#: libpq_fetch.c:389 +#: libpq_fetch.c:386 #, c-format msgid "unexpected result set while fetching remote file \"%s\"" msgstr "neočekávaný výsledek při načítání vzdáleného souboru \"%s\"" -#: libpq_fetch.c:433 +#: libpq_fetch.c:430 #, c-format msgid "could not send COPY data: %s" msgstr "nelze poslat COPY data: %s" -#: libpq_fetch.c:462 +#: libpq_fetch.c:459 #, c-format msgid "could not send file list: %s" msgstr "nelze poslat seznam souborů: %s" -#: libpq_fetch.c:504 +#: libpq_fetch.c:501 #, c-format msgid "could not send end-of-COPY: %s" msgstr "nelze poslat end-of-COPY: %s" -#: libpq_fetch.c:510 +#: libpq_fetch.c:507 #, c-format msgid "unexpected result while sending file list: %s" msgstr "neočekávaný výsledek při posílání seznamu souborů: %s" -#: parsexlog.c:74 parsexlog.c:127 parsexlog.c:185 -#, c-format -msgid "out of memory" -msgstr "nedostatek paměti" - -#: parsexlog.c:87 parsexlog.c:133 +#: parsexlog.c:85 parsexlog.c:132 #, c-format msgid "could not read WAL record at %X/%X: %s" msgstr "nelze načíst WAL záznam na %X/%X: %s" -#: parsexlog.c:91 parsexlog.c:136 +#: parsexlog.c:89 parsexlog.c:135 #, c-format msgid "could not read WAL record at %X/%X" msgstr "nelze načíst WAL záznam na %X/%X" -#: parsexlog.c:197 +#: parsexlog.c:198 #, c-format msgid "could not find previous WAL record at %X/%X: %s" msgstr "nelze nalézt předchozí WAL záznam na %X/%X: %s" -#: parsexlog.c:201 +#: parsexlog.c:202 #, c-format msgid "could not find previous WAL record at %X/%X" msgstr "nelze načíst předchozí WAL záznam na %X/%X" -#: parsexlog.c:292 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "nelze otevřít soubor \"%s\": %m" - -#: parsexlog.c:305 +#: parsexlog.c:327 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "nelze nastavit pozici (seek) v souboru \"%s\": %m" -#: parsexlog.c:385 +#: parsexlog.c:407 #, c-format msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmgr: %s, info: %02X" msgstr "WAL záznam modifikuje relaci, ale typ záznamu není rozpoznán: lsn: %X/%X, rmgr: %s, info: %02X" -#: pg_rewind.c:72 +#: pg_rewind.c:78 #, c-format msgid "" "%s resynchronizes a PostgreSQL cluster with another copy of the cluster.\n" @@ -411,7 +457,7 @@ msgstr "" "%s resynchronizuje PostgreSQL cluster s jinou kopií daného clusteru.\n" "\n" -#: pg_rewind.c:73 +#: pg_rewind.c:79 #, c-format msgid "" "Usage:\n" @@ -422,34 +468,42 @@ msgstr "" " %s [OPTION]...\n" "\n" -#: pg_rewind.c:74 +#: pg_rewind.c:80 #, c-format msgid "Options:\n" msgstr "Přepínače:\n" -#: pg_rewind.c:75 +#: pg_rewind.c:81 +#, c-format +msgid "" +" -c, --restore-target-wal use restore_command in target configuration to\n" +" retrieve WAL files from archives\n" +msgstr "" +" -c, --restore-target-wal použij restore_command v cílové konfiguraci pro\n" +" získání WAL souborů z archivu\n" + +#: pg_rewind.c:83 #, c-format msgid " -D, --target-pgdata=DIRECTORY existing data directory to modify\n" msgstr " -D, --target-pgdata=ADRESÁŘ existující datový adresář pro modifikaci\n" -#: pg_rewind.c:76 +#: pg_rewind.c:84 #, c-format msgid " --source-pgdata=DIRECTORY source data directory to synchronize with\n" msgstr " --source-pgdata=ADRESÁŘ zdrojový datový adresář proti kterému se synchronizovat\n" -#: pg_rewind.c:77 +#: pg_rewind.c:85 #, c-format msgid " --source-server=CONNSTR source server to synchronize with\n" msgstr " --source-server=CONNSTR zdrojový server se kterým se synchronizovat\n" -#: pg_rewind.c:78 +#: pg_rewind.c:86 #, c-format msgid " -n, --dry-run stop before modifying anything\n" msgstr " -n, --dry-run zastavit před modifikací čehokoliv\n" -#: pg_rewind.c:79 +#: pg_rewind.c:87 #, c-format -#| msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgid "" " -N, --no-sync do not wait for changes to be written\n" " safely to disk\n" @@ -457,187 +511,212 @@ msgstr "" " -N, --no-sync nečekat na bezpečné zapsání změn na disk\n" "\n" -#: pg_rewind.c:81 +#: pg_rewind.c:89 #, c-format msgid " -P, --progress write progress messages\n" msgstr " -P, --progress průběžně vypisovat zprávy o postupu\n" -#: pg_rewind.c:82 +#: pg_rewind.c:90 +#, c-format +msgid "" +" -R, --write-recovery-conf write configuration for replication\n" +" (requires --source-server)\n" +msgstr "" +" -R, --write-recovery-conf zapíše konfiguraci pro replikaci\n" +" (vyžaduje zadání --source-server)\n" +"\n" + +#: pg_rewind.c:92 #, c-format msgid " --debug write a lot of debug messages\n" msgstr " --debug vypisovat mnoho zpráv s debug informacemi\n" -#: pg_rewind.c:83 +#: pg_rewind.c:93 +#, c-format +msgid " --no-ensure-shutdown do not automatically fix unclean shutdown\n" +msgstr " --no-ensure-shutdown neopravuj automaticky nečisté vypnutí databáze\n" + +#: pg_rewind.c:94 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version vypíše informaci o verzi, poté skončí\n" -#: pg_rewind.c:84 +#: pg_rewind.c:95 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help vypíše tuto nápovědu, poté skončí\n" -#: pg_rewind.c:85 +#: pg_rewind.c:96 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Chyby hlaste na adresu .\n" +"Chyby oznamujte na <%s>.\n" + +#: pg_rewind.c:97 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" -#: pg_rewind.c:142 pg_rewind.c:178 pg_rewind.c:185 pg_rewind.c:192 -#: pg_rewind.c:200 +#: pg_rewind.c:159 pg_rewind.c:208 pg_rewind.c:215 pg_rewind.c:222 +#: pg_rewind.c:229 pg_rewind.c:237 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" -#: pg_rewind.c:177 +#: pg_rewind.c:207 #, c-format msgid "no source specified (--source-pgdata or --source-server)" msgstr "nespecifikován žádný zdroj (--source-pgdata nebo --source-server)" -#: pg_rewind.c:184 +#: pg_rewind.c:214 #, c-format msgid "only one of --source-pgdata or --source-server can be specified" msgstr "pouze jedna z voleb --source-pgdata nebo --source-server může být zadána" -#: pg_rewind.c:191 +#: pg_rewind.c:221 #, c-format msgid "no target data directory specified (--target-pgdata)" msgstr "cílový datový adresář nespecifikován (--target-pgdata)" -#: pg_rewind.c:198 +#: pg_rewind.c:228 +#, c-format +msgid "no source server information (--source-server) specified for --write-recovery-conf" +msgstr "" + +#: pg_rewind.c:235 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "příliš mnoho argumentů v příkazové řádce (první je \"%s\")" -#: pg_rewind.c:213 +#: pg_rewind.c:250 #, c-format msgid "cannot be executed by \"root\"" msgstr "nelze spouštět jako \"root\"" -#: pg_rewind.c:214 +#: pg_rewind.c:251 #, c-format msgid "You must run %s as the PostgreSQL superuser.\n" msgstr "Musíte spustit %s jako PostgreSQL superuživatel.\n" -#: pg_rewind.c:225 +#: pg_rewind.c:262 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "nelze zjistit přístupová práva adresáře \"%s\": %m" -#: pg_rewind.c:256 +#: pg_rewind.c:316 #, c-format msgid "source and target cluster are on the same timeline" msgstr "zdrojový a cílový cluster jsou na stejné timeline" -#: pg_rewind.c:262 +#: pg_rewind.c:322 #, c-format msgid "servers diverged at WAL location %X/%X on timeline %u" msgstr "servery se rozešly na WAL pozici %X/%X na timeline %u" -#: pg_rewind.c:299 +#: pg_rewind.c:360 #, c-format msgid "no rewind required" msgstr "rewind není potřeba" -#: pg_rewind.c:306 +#: pg_rewind.c:369 #, c-format msgid "rewinding from last common checkpoint at %X/%X on timeline %u" msgstr "provádím rewind z posledního společného checkpointu na %X/%X na timeline %u" -#: pg_rewind.c:315 +#: pg_rewind.c:378 #, c-format msgid "reading source file list" msgstr "načítám seznam zdrojových souborů" -#: pg_rewind.c:318 +#: pg_rewind.c:381 #, c-format msgid "reading target file list" msgstr "načítám seznam cílových souborů" -#: pg_rewind.c:329 +#: pg_rewind.c:392 #, c-format msgid "reading WAL in target" msgstr "čtu WAL na cílovém clusteru" -#: pg_rewind.c:346 +#: pg_rewind.c:409 #, c-format msgid "need to copy %lu MB (total source directory size is %lu MB)" msgstr "je třeba zkopírovat %lu MB (celková velikost zdrojového adresáře je %lu MB)" -#: pg_rewind.c:365 +#: pg_rewind.c:427 #, c-format msgid "creating backup label and updating control file" msgstr "vytvářím backup label a aktualizuji control file" -#: pg_rewind.c:394 +#: pg_rewind.c:457 #, c-format msgid "syncing target data directory" msgstr "provádím sync cílového datového adresáře" -#: pg_rewind.c:397 +#: pg_rewind.c:464 #, c-format msgid "Done!" msgstr "Hotovo!" -#: pg_rewind.c:409 +#: pg_rewind.c:476 #, c-format msgid "source and target clusters are from different systems" msgstr "zdrojový a cílový cluster jsou z různých systémů" -#: pg_rewind.c:417 +#: pg_rewind.c:484 #, c-format msgid "clusters are not compatible with this version of pg_rewind" msgstr "clustery nejsou kompatibilní s touto verzí pg_rewind" -#: pg_rewind.c:427 +#: pg_rewind.c:494 #, c-format msgid "target server needs to use either data checksums or \"wal_log_hints = on\"" msgstr "cílový server musí používat buď data checksums nebo \"wal_log_hints = on\"" -#: pg_rewind.c:438 +#: pg_rewind.c:505 #, c-format msgid "target server must be shut down cleanly" msgstr "cílový server musí být zastaven čistě" -#: pg_rewind.c:448 +#: pg_rewind.c:515 #, c-format msgid "source data directory must be shut down cleanly" msgstr "zdrojový datový adresář musí být zastaven čistě" -#: pg_rewind.c:497 +#: pg_rewind.c:567 #, c-format msgid "%*s/%s kB (%d%%) copied" msgstr "%*s/%s kB (%d%%) zkopírováno" -#: pg_rewind.c:558 +#: pg_rewind.c:630 #, c-format msgid "invalid control file" msgstr "neplatný control file" -#: pg_rewind.c:642 +#: pg_rewind.c:714 #, c-format msgid "could not find common ancestor of the source and target cluster's timelines" msgstr "nelze najít společného předka pro timeline ze zdrojového a cílového clusteru" -#: pg_rewind.c:683 +#: pg_rewind.c:755 #, c-format msgid "backup label buffer too small" msgstr "backup label buffer je příliš malý" -#: pg_rewind.c:706 +#: pg_rewind.c:778 #, c-format msgid "unexpected control file CRC" msgstr "neočekávaná CRC hodnota control file" -#: pg_rewind.c:716 +#: pg_rewind.c:788 #, c-format msgid "unexpected control file size %d, expected %d" msgstr "neočekávaná velikost control file %d, očekáváno %d" -#: pg_rewind.c:725 +#: pg_rewind.c:797 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" @@ -645,247 +724,296 @@ msgstr[0] "Velikost WAL segmentu musí být mocnina dvou mezi 1 MB a 1 GB, ale c msgstr[1] "Velikost WAL segmentu musí být mocnina dvou mezi 1 MB a 1 GB, ale control file udává %d bytů" msgstr[2] "Velikost WAL segmentu musí být mocnina dvou mezi 1 MB a 1 GB, ale control file udává %d bytů" -#: timeline.c:76 timeline.c:82 +#: pg_rewind.c:854 pg_rewind.c:912 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "" +"Program \"%s\" je vyžadován aplikací %s, ale nebyl nalezen ve stejném\n" +"adresáři jako \"%s\".\n" +"Zkontrolujte vaši instalaci." + +#: pg_rewind.c:859 pg_rewind.c:917 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "" +"Program \"%s\" byl nalezen pomocí \"%s\",\n" +"ale nebyl ve stejné verzi jako %s.\n" +"Zkontrolujte vaši instalaci." + +#: pg_rewind.c:880 +#, c-format +msgid "restore_command is not set in the target cluster" +msgstr "restore_command není nastaven pro cílový cluster" + +#: pg_rewind.c:923 +#, c-format +msgid "executing \"%s\" for target server to complete crash recovery" +msgstr "spouštím \"%s\" na cílovém serveru pro dokončení crash recovery" + +#: pg_rewind.c:943 +#, c-format +msgid "postgres single-user mode in target cluster failed" +msgstr "postgres single-user mód v cílovém clusteru selhal" + +#: pg_rewind.c:944 +#, c-format +msgid "Command was: %s" +msgstr "Příkaz byl: %s" + +#: timeline.c:75 timeline.c:81 #, c-format msgid "syntax error in history file: %s" msgstr "syntaktická chyba v souboru s historií: %s" -#: timeline.c:77 +#: timeline.c:76 #, c-format msgid "Expected a numeric timeline ID." msgstr "Očekávána číselná hodnota timeline ID." -#: timeline.c:83 +#: timeline.c:82 #, c-format msgid "Expected a write-ahead log switchpoint location." msgstr "Očekávána pozice pro switchpoint write-ahead logu." -#: timeline.c:88 +#: timeline.c:87 #, c-format msgid "invalid data in history file: %s" msgstr "chybná data v souboru s historií: %s" -#: timeline.c:89 +#: timeline.c:88 #, c-format msgid "Timeline IDs must be in increasing sequence." msgstr "Timeline IDs musí být rostoucí posloupnost." -#: timeline.c:109 +#: timeline.c:108 #, c-format msgid "invalid data in history file" msgstr "chybná data v souboru s historií" -#: timeline.c:110 +#: timeline.c:109 #, c-format msgid "Timeline IDs must be less than child timeline's ID." msgstr "Timeline IDs musí být nižší než timeline ID potomka." -#: xlogreader.c:299 +#: xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "neplatný offset záznamu na %X/%X" -#: xlogreader.c:307 +#: xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "contrecord je vyžadován %X/%X" -#: xlogreader.c:348 xlogreader.c:645 +#: xlogreader.c:398 xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "neplatná délka záznamu na %X/%X: potřeba %u, získáno %u" -#: xlogreader.c:372 +#: xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "délka záznamu %u na %X/%X je příliš vysoká" -#: xlogreader.c:404 +#: xlogreader.c:454 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "na %X/%X není nastaven contrecord flag" -#: xlogreader.c:417 +#: xlogreader.c:467 #, c-format msgid "invalid contrecord length %u at %X/%X" msgstr "chybná contrecord délka %u na %X/%X" -#: xlogreader.c:653 +#: xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "chybný ID resource managera %u na %X/%X" -#: xlogreader.c:667 xlogreader.c:684 +#: xlogreader.c:717 xlogreader.c:734 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "záznam s neplatnou hodnotou prev-link %X/%X na %X/%X" -#: xlogreader.c:721 +#: xlogreader.c:771 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "neplatný data checksum resource managera v záznamu na %X/%X" -#: xlogreader.c:758 +#: xlogreader.c:808 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "neplatné magické číslo %04X v log segmentu %s, offset %u" -#: xlogreader.c:772 xlogreader.c:823 +#: xlogreader.c:822 xlogreader.c:863 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "neplatné info bity %04X v log segmentu %s, offset %u" -#: xlogreader.c:798 +#: xlogreader.c:837 #, c-format -msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" -msgstr "WAL soubor je z jiného databázového systému: systémový identifikátor z WAL souboru je %s, systémový identifikátor z pg_control je %s" +msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" +msgstr "WAL soubor je z jiného databázového systému: systémový identifikátor z WAL souboru je %llu, systémový identifikátor z pg_control je %llu" -#: xlogreader.c:805 +#: xlogreader.c:845 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL soubor je z jiného databázového systému: neplatná velikost segmentu v hlavičce stránky" -#: xlogreader.c:811 +#: xlogreader.c:851 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL soubor je z jiného databázového systému: neplatná hodnota XLOG_BLCKSZ v hlavičce stránky" -#: xlogreader.c:842 +#: xlogreader.c:882 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "neočekávaná pageaddr hodnota %X/%X v log segmentu %s, offset %u" -#: xlogreader.c:867 +#: xlogreader.c:907 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "timeline ID %u mimo pořadí (po %u) v log segmentu %s, offset %u" -#: xlogreader.c:1112 +#: xlogreader.c:1247 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u mimo pořadí na %X/%X" -#: xlogreader.c:1135 +#: xlogreader.c:1270 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA flag nastaven, ale žádná data nejsou přiložena na %X/%X" -#: xlogreader.c:1142 +#: xlogreader.c:1277 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA flag nenastaven, ale délka dat je %u na %X/%X" -#: xlogreader.c:1178 +#: xlogreader.c:1313 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE flag nastaven, ale hole offset %u length %u block image length %u na %X/%X" -#: xlogreader.c:1194 +#: xlogreader.c:1329 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE flag nenastaven, ale hole offset %u length %u na %X/%X" -#: xlogreader.c:1209 +#: xlogreader.c:1344 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED flag nastaven, ale block image length %u na %X/%X" -#: xlogreader.c:1224 +#: xlogreader.c:1359 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE ani BKPIMAGE_IS_COMPRESSED flag nenastaven, ale block image length je %u na %X/%X" -#: xlogreader.c:1240 +#: xlogreader.c:1375 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL flag nastaven, ale žádná předchozí rel hodnota na %X/%X" -#: xlogreader.c:1252 +#: xlogreader.c:1387 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "neplatné block_id %u na %X/%X" -#: xlogreader.c:1341 +#: xlogreader.c:1476 #, c-format msgid "record with invalid length at %X/%X" msgstr "záznam s neplatnou délkou na %X/%X" -#: xlogreader.c:1430 +#: xlogreader.c:1565 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "neplatný komprimovaný image na %X/%X, block %d" -#~ msgid "sync of target directory failed\n" -#~ msgstr "sync na cílovém adresáři selhal\n" +#~ msgid "could not open directory \"%s\": %s\n" +#~ msgstr "nelze otevřít adresář \"%s\": %s\n" -#~ msgid "" -#~ "The program \"initdb\" was found by \"%s\"\n" -#~ "but was not the same version as %s.\n" -#~ "Check your installation.\n" -#~ msgstr "" -#~ "Program \"initdb\" byl nalezen \"%s\"\n" -#~ "ale nemá stejnou verzi jako \"%s\".\n" -#~ "Zkontrolujte svou instalaci.\n" +#~ msgid "could not read file \"%s\": %s\n" +#~ msgstr "nelze číst soubor \"%s\": %s\n" -#~ msgid "" -#~ "The program \"initdb\" is needed by %s but was\n" -#~ "not found in the same directory as \"%s\".\n" -#~ "Check your installation.\n" -#~ msgstr "" -#~ "Program \"initdb\" je vyžadován %s ale nebyl\n" -#~ "nalezen ve stejném adresáři jako \"%s\".\n" -#~ "Zkontrolujte svou instalaci.\n" +#~ msgid " block %u\n" +#~ msgstr " blok %u\n" -#~ msgid "%d: %X/%X - %X/%X\n" -#~ msgstr "%d: %X/%X - %X/%X\n" +#~ msgid "entry \"%s\" excluded from %s file list\n" +#~ msgstr "položka \"%s\" vyloučena ze %s seznamu souborů\n" -#~ msgid "Target timeline history:\n" -#~ msgstr "Cílová timeline history:\n" +#~ msgid "%s (%s)\n" +#~ msgstr "%s (%s)\n" -#~ msgid "Source timeline history:\n" -#~ msgstr "Zdrojová timeline history:\n" +#~ msgid "could not set up connection context: %s" +#~ msgstr "nelze nastavit kontext spojení: %s" -#~ msgid "%s: could not read permissions of directory \"%s\": %s\n" -#~ msgstr "%s: nelze načíst práva adresáře \"%s\": %s\n" +#~ msgid "getting file chunks\n" +#~ msgstr "načítám části souborů\n" -#~ msgid "could not read from file \"%s\": %s\n" -#~ msgstr "nelze číst ze souboru \"%s\": %s\n" +#~ msgid "received null value for chunk for file \"%s\", file has been deleted\n" +#~ msgstr "přijata null hodnota pro chunk souboru \"%s\", soubor byl smazán\n" -#~ msgid "could not open file \"%s\": %s\n" -#~ msgstr "nelze otevřít soubor \"%s\": %s\n" +#~ msgid "received chunk for file \"%s\", offset %s, size %d\n" +#~ msgstr "přijat chunk souboru \"%s\", offset %s, délka %d\n" -#~ msgid "Failure, exiting\n" -#~ msgstr "Chyba, končím\n" +#~ msgid "fetched file \"%s\", length %d\n" +#~ msgstr "načten soubor \"%s\", délka %d\n" #~ msgid "could not create temporary table: %s" #~ msgstr "nelze vytvořit temporary tabulku: %s" -#~ msgid "fetched file \"%s\", length %d\n" -#~ msgstr "načten soubor \"%s\", délka %d\n" +#~ msgid "Failure, exiting\n" +#~ msgstr "Chyba, končím\n" -#~ msgid "received chunk for file \"%s\", offset %s, size %d\n" -#~ msgstr "přijat chunk souboru \"%s\", offset %s, délka %d\n" +#~ msgid "could not open file \"%s\": %s\n" +#~ msgstr "nelze otevřít soubor \"%s\": %s\n" -#~ msgid "received null value for chunk for file \"%s\", file has been deleted\n" -#~ msgstr "přijata null hodnota pro chunk souboru \"%s\", soubor byl smazán\n" +#~ msgid "could not read from file \"%s\": %s\n" +#~ msgstr "nelze číst ze souboru \"%s\": %s\n" -#~ msgid "getting file chunks\n" -#~ msgstr "načítám části souborů\n" +#~ msgid "%s: could not read permissions of directory \"%s\": %s\n" +#~ msgstr "%s: nelze načíst práva adresáře \"%s\": %s\n" -#~ msgid "could not set up connection context: %s" -#~ msgstr "nelze nastavit kontext spojení: %s" +#~ msgid "Source timeline history:\n" +#~ msgstr "Zdrojová timeline history:\n" -#~ msgid "%s (%s)\n" -#~ msgstr "%s (%s)\n" +#~ msgid "Target timeline history:\n" +#~ msgstr "Cílová timeline history:\n" -#~ msgid "entry \"%s\" excluded from %s file list\n" -#~ msgstr "položka \"%s\" vyloučena ze %s seznamu souborů\n" +#~ msgid "%d: %X/%X - %X/%X\n" +#~ msgstr "%d: %X/%X - %X/%X\n" -#~ msgid " block %u\n" -#~ msgstr " blok %u\n" +#~ msgid "" +#~ "The program \"initdb\" is needed by %s but was\n" +#~ "not found in the same directory as \"%s\".\n" +#~ "Check your installation.\n" +#~ msgstr "" +#~ "Program \"initdb\" je vyžadován %s ale nebyl\n" +#~ "nalezen ve stejném adresáři jako \"%s\".\n" +#~ "Zkontrolujte svou instalaci.\n" -#~ msgid "could not read file \"%s\": %s\n" -#~ msgstr "nelze číst soubor \"%s\": %s\n" +#~ msgid "" +#~ "The program \"initdb\" was found by \"%s\"\n" +#~ "but was not the same version as %s.\n" +#~ "Check your installation.\n" +#~ msgstr "" +#~ "Program \"initdb\" byl nalezen \"%s\"\n" +#~ "ale nemá stejnou verzi jako \"%s\".\n" +#~ "Zkontrolujte svou instalaci.\n" -#~ msgid "could not open directory \"%s\": %s\n" -#~ msgstr "nelze otevřít adresář \"%s\": %s\n" +#~ msgid "sync of target directory failed\n" +#~ msgstr "sync na cílovém adresáři selhal\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Chyby hlaste na adresu .\n" diff --git a/src/bin/pg_rewind/po/de.po b/src/bin/pg_rewind/po/de.po index a4eb559d39fec..708e971f3d670 100644 --- a/src/bin/pg_rewind/po/de.po +++ b/src/bin/pg_rewind/po/de.po @@ -1,14 +1,13 @@ # German message translation file for pg_rewind -# Copyright (C) 2015-2020 PostgreSQL Global Development Group +# Copyright (C) 2015-2021 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Peter Eisentraut , 2015-2020. # msgid "" msgstr "" -"Project-Id-Version: pg_rewind (PostgreSQL) 13\n" +"Project-Id-Version: pg_rewind (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-09 00:17+0000\n" -"PO-Revision-Date: 2020-05-09 10:00+0200\n" +"POT-Creation-Date: 2021-05-06 06:49+0000\n" +"PO-Revision-Date: 2021-05-06 13:01+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -17,17 +16,17 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "Fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "Fehler: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "Warnung: " @@ -83,332 +82,370 @@ msgstr "konnte Prozess nicht mit beschränktem Token neu starten: Fehlercode %lu msgid "could not get exit code from subprocess: error code %lu" msgstr "konnte Statuscode des Subprozesses nicht ermitteln: Fehlercode %lu" -#: copy_fetch.c:59 +#: ../../fe_utils/archive.c:53 #, c-format -msgid "could not open directory \"%s\": %m" -msgstr "konnte Verzeichnis »%s« nicht öffnen: %m" - -#: copy_fetch.c:88 filemap.c:208 filemap.c:369 -#, c-format -msgid "could not stat file \"%s\": %m" -msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" - -#: copy_fetch.c:117 -#, c-format -msgid "could not read symbolic link \"%s\": %m" -msgstr "konnte symbolische Verknüpfung »%s« nicht lesen: %m" +msgid "cannot use restore_command with %%r placeholder" +msgstr "kann restore_command mit Platzhalter %%r nicht verwenden" -#: copy_fetch.c:120 +#: ../../fe_utils/archive.c:74 #, c-format -msgid "symbolic link \"%s\" target is too long" -msgstr "Ziel für symbolische Verknüpfung »%s« ist zu lang" +msgid "unexpected file size for \"%s\": %lld instead of %lld" +msgstr "unerwartete Dateigröße für »%s«: %lld statt %lld" -#: copy_fetch.c:135 +#: ../../fe_utils/archive.c:85 #, c-format -msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform" -msgstr "»%s« ist eine symbolische Verknüpfung, aber symbolische Verknüpfungen werden auf dieser Plattform nicht unterstützt" +msgid "could not open file \"%s\" restored from archive: %m" +msgstr "konnte aus dem Archiv wiederhergestellte Datei »%s« nicht öffnen: %m" -#: copy_fetch.c:142 +#: ../../fe_utils/archive.c:97 file_ops.c:417 #, c-format -msgid "could not read directory \"%s\": %m" -msgstr "konnte Verzeichnis »%s« nicht lesen: %m" +msgid "could not stat file \"%s\": %m" +msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" -#: copy_fetch.c:146 +#: ../../fe_utils/archive.c:112 #, c-format -msgid "could not close directory \"%s\": %m" -msgstr "konnte Verzeichnis »%s« nicht schließen: %m" +msgid "restore_command failed: %s" +msgstr "restore_command fehlgeschlagen: %s" -#: copy_fetch.c:166 +#: ../../fe_utils/archive.c:121 #, c-format -msgid "could not open source file \"%s\": %m" -msgstr "konnte Quelldatei »%s« nicht öffnen: %m" +msgid "could not restore file \"%s\" from archive" +msgstr "konnte Datei »%s« nicht aus Archiv wiederherstellen" -#: copy_fetch.c:170 +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:67 parsexlog.c:126 +#: parsexlog.c:186 #, c-format -msgid "could not seek in source file: %m" -msgstr "konnte Positionszeiger in Quelldatei nicht setzen: %m" +msgid "out of memory" +msgstr "Speicher aufgebraucht" -#: copy_fetch.c:187 file_ops.c:311 parsexlog.c:336 +#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:308 #, c-format -msgid "could not read file \"%s\": %m" -msgstr "konnte Datei »%s« nicht lesen: %m" +msgid "could not open file \"%s\": %m" +msgstr "konnte Datei »%s« nicht öffnen: %m" -#: copy_fetch.c:190 +#: ../../fe_utils/recovery_gen.c:140 #, c-format -msgid "unexpected EOF while reading file \"%s\"" -msgstr "unerwartetes EOF beim Lesen der Datei »%s«" +msgid "could not write to file \"%s\": %m" +msgstr "konnte nicht in Datei »%s« schreiben: %m" -#: copy_fetch.c:197 +#: ../../fe_utils/recovery_gen.c:152 #, c-format -msgid "could not close file \"%s\": %m" -msgstr "konnte Datei »%s« nicht schließen: %m" +msgid "could not create file \"%s\": %m" +msgstr "konnte Datei »%s« nicht erstellen: %m" -#: file_ops.c:62 +#: file_ops.c:67 #, c-format msgid "could not open target file \"%s\": %m" msgstr "konnte Zieldatei »%s« nicht öffnen: %m" -#: file_ops.c:76 +#: file_ops.c:81 #, c-format msgid "could not close target file \"%s\": %m" msgstr "konnte Zieldatei »%s« nicht schließen: %m" -#: file_ops.c:96 +#: file_ops.c:101 #, c-format msgid "could not seek in target file \"%s\": %m" msgstr "konnte Positionszeiger in Zieldatei »%s« nicht setzen: %m" -#: file_ops.c:112 +#: file_ops.c:117 #, c-format msgid "could not write file \"%s\": %m" msgstr "konnte Datei »%s« nicht schreiben: %m" -#: file_ops.c:162 +#: file_ops.c:150 file_ops.c:177 +#, c-format +msgid "undefined file type for \"%s\"" +msgstr "undefinierter Dateityp für »%s«" + +#: file_ops.c:173 #, c-format msgid "invalid action (CREATE) for regular file" msgstr "ungültige Aktion (CREATE) für normale Datei" -#: file_ops.c:185 +#: file_ops.c:200 #, c-format msgid "could not remove file \"%s\": %m" msgstr "konnte Datei »%s« nicht löschen: %m" -#: file_ops.c:203 +#: file_ops.c:218 #, c-format msgid "could not open file \"%s\" for truncation: %m" msgstr "konnte Datei »%s« nicht zum Kürzen öffnen: %m" -#: file_ops.c:207 +#: file_ops.c:222 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "konnte Datei »%s« nicht auf %u kürzen: %m" -#: file_ops.c:223 +#: file_ops.c:238 #, c-format msgid "could not create directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht erzeugen: %m" -#: file_ops.c:237 +#: file_ops.c:252 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht löschen: %m" -#: file_ops.c:251 +#: file_ops.c:266 #, c-format msgid "could not create symbolic link at \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht erstellen: %m" -#: file_ops.c:265 +#: file_ops.c:280 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht löschen: %m" -#: file_ops.c:296 file_ops.c:300 +#: file_ops.c:326 file_ops.c:330 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %m" -#: file_ops.c:314 parsexlog.c:338 +#: file_ops.c:341 local_source.c:107 parsexlog.c:351 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "konnte Datei »%s« nicht lesen: %m" + +#: file_ops.c:344 parsexlog.c:353 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "konnte Datei »%s« nicht lesen: %d von %zu gelesen" -#: filemap.c:200 +#: file_ops.c:388 #, c-format -msgid "data file \"%s\" in source is not a regular file" -msgstr "Datendatei »%s« in der Quelle ist keine normale Datei" +msgid "could not open directory \"%s\": %m" +msgstr "konnte Verzeichnis »%s« nicht öffnen: %m" -#: filemap.c:222 +#: file_ops.c:446 #, c-format -msgid "\"%s\" is not a directory" -msgstr "»%s« ist kein Verzeichnis" +msgid "could not read symbolic link \"%s\": %m" +msgstr "konnte symbolische Verknüpfung »%s« nicht lesen: %m" -#: filemap.c:245 +#: file_ops.c:449 #, c-format -msgid "\"%s\" is not a symbolic link" -msgstr "»%s« ist keine symbolische Verknüpfung" +msgid "symbolic link \"%s\" target is too long" +msgstr "Ziel für symbolische Verknüpfung »%s« ist zu lang" -#: filemap.c:257 +#: file_ops.c:464 #, c-format -msgid "\"%s\" is not a regular file" -msgstr "»%s« ist keine normale Datei" +msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform" +msgstr "»%s« ist eine symbolische Verknüpfung, aber symbolische Verknüpfungen werden auf dieser Plattform nicht unterstützt" -#: filemap.c:381 +#: file_ops.c:471 #, c-format -msgid "source file list is empty" -msgstr "Quelldateiliste ist leer" +msgid "could not read directory \"%s\": %m" +msgstr "konnte Verzeichnis »%s« nicht lesen: %m" -#: filemap.c:496 +#: file_ops.c:475 #, c-format -msgid "unexpected page modification for directory or symbolic link \"%s\"" -msgstr "unerwartete Seitenänderung für Verzeichnis oder symbolische Verknüpfung »%s«" +msgid "could not close directory \"%s\": %m" +msgstr "konnte Verzeichnis »%s« nicht schließen: %m" -#: libpq_fetch.c:50 +#: filemap.c:237 #, c-format -msgid "could not connect to server: %s" -msgstr "konnte nicht mit Server verbinden: %s" +msgid "data file \"%s\" in source is not a regular file" +msgstr "Datendatei »%s« in der Quelle ist keine normale Datei" -#: libpq_fetch.c:54 +#: filemap.c:242 filemap.c:275 #, c-format -msgid "connected to server" -msgstr "mit Server verbunden" +msgid "duplicate source file \"%s\"" +msgstr "doppelte Quelldatei »%s«" -#: libpq_fetch.c:63 +#: filemap.c:330 #, c-format -msgid "could not clear search_path: %s" -msgstr "konnte search_path nicht auf leer setzen: %s" +msgid "unexpected page modification for non-regular file \"%s\"" +msgstr "unerwartete Seitenänderung für nicht normale Datei »%s«" + +#: filemap.c:680 filemap.c:774 +#, c-format +msgid "unknown file type for \"%s\"" +msgstr "unbekannter Dateityp für »%s«" -#: libpq_fetch.c:75 +#: filemap.c:707 #, c-format -msgid "source server must not be in recovery mode" -msgstr "Quell-Server darf nicht im Wiederherstellungsmodus sein" +msgid "file \"%s\" is of different type in source and target" +msgstr "Datei »%s« hat unterschiedlichen Typ in Quelle und Ziel" -#: libpq_fetch.c:85 +#: filemap.c:779 +#, c-format +msgid "could not decide what to do with file \"%s\"" +msgstr "konnte nicht entscheiden, was mit Datei »%s« zu tun ist" + +#: libpq_source.c:128 +#, c-format +msgid "could not clear search_path: %s" +msgstr "konnte search_path nicht auf leer setzen: %s" + +#: libpq_source.c:139 #, c-format msgid "full_page_writes must be enabled in the source server" msgstr "full_page_writes muss im Quell-Server eingeschaltet sein" -#: libpq_fetch.c:111 +#: libpq_source.c:150 +#, c-format +msgid "could not prepare statement to fetch file contents: %s" +msgstr "konnte Anfrage zum Holen des Dateiinhalts nicht vorbereiten: %s" + +#: libpq_source.c:169 #, c-format msgid "error running query (%s) on source server: %s" msgstr "Fehler beim Ausführen einer Anfrage (%s) auf dem Quellserver: %s" -#: libpq_fetch.c:116 +#: libpq_source.c:174 #, c-format msgid "unexpected result set from query" msgstr "Anfrage ergab unerwartete Ergebnismenge" -#: libpq_fetch.c:137 +#: libpq_source.c:196 #, c-format msgid "error running query (%s) in source server: %s" msgstr "Fehler beim Ausführen einer Anfrage (%s) im Quellserver: %s" -#: libpq_fetch.c:157 +#: libpq_source.c:217 #, c-format msgid "unrecognized result \"%s\" for current WAL insert location" msgstr "unbekanntes Ergebnis »%s« für aktuelle WAL-Einfügeposition" -#: libpq_fetch.c:207 +#: libpq_source.c:268 #, c-format msgid "could not fetch file list: %s" msgstr "konnte Dateiliste nicht holen: %s" -#: libpq_fetch.c:212 +#: libpq_source.c:273 #, c-format msgid "unexpected result set while fetching file list" msgstr "unerwartete Ergebnismenge beim Holen der Dateiliste" -#: libpq_fetch.c:260 +#: libpq_source.c:435 #, c-format msgid "could not send query: %s" msgstr "konnte Anfrage nicht senden: %s" -#: libpq_fetch.c:265 +#: libpq_source.c:438 #, c-format msgid "could not set libpq connection to single row mode" msgstr "konnte libpq-Verbindung nicht in den Einzelzeilenmodus setzen" -#: libpq_fetch.c:285 +#: libpq_source.c:468 #, c-format msgid "unexpected result while fetching remote files: %s" msgstr "unerwartetes Ergebnis beim Holen von fernen Dateien: %s" -#: libpq_fetch.c:291 +#: libpq_source.c:473 +#, c-format +msgid "received more data chunks than requested" +msgstr "mehr Daten-Chunks erhalten als verlangt" + +#: libpq_source.c:477 #, c-format msgid "unexpected result set size while fetching remote files" msgstr "unerwartete Ergebnismengengröße beim Holen von fernen Dateien" -#: libpq_fetch.c:297 +#: libpq_source.c:483 #, c-format msgid "unexpected data types in result set while fetching remote files: %u %u %u" msgstr "unerwartete Datentypen in Ergebnismenge beim Holen von fernen Dateien: %u %u %u" -#: libpq_fetch.c:305 +#: libpq_source.c:491 #, c-format msgid "unexpected result format while fetching remote files" msgstr "unerwartetes Ergebnisformat beim Holen von fernen Dateien" -#: libpq_fetch.c:311 +#: libpq_source.c:497 #, c-format msgid "unexpected null values in result while fetching remote files" msgstr "unerwartete NULL-Werte im Ergebnis beim Holen von fernen Dateien" -#: libpq_fetch.c:315 +#: libpq_source.c:501 #, c-format msgid "unexpected result length while fetching remote files" msgstr "unerwartete Ergebnislänge beim Holen von fernen Dateien" -#: libpq_fetch.c:376 +#: libpq_source.c:534 +#, c-format +msgid "received data for file \"%s\", when requested for \"%s\"" +msgstr "Daten für Datei »%s« erhalten, aber »%s« wurde verlangt" + +#: libpq_source.c:538 +#, c-format +msgid "received data at offset %lld of file \"%s\", when requested for offset %lld" +msgstr "Daten für Offset %lld von Datei »%s« erhalten, aber Offset %lld wurde verlangt" + +#: libpq_source.c:550 +#, c-format +msgid "received more than requested for file \"%s\"" +msgstr "mehr als verlangt erhalten für Datei »%s«" + +#: libpq_source.c:563 +#, c-format +msgid "unexpected number of data chunks received" +msgstr "unerwartete Anzahl Daten-Chunks erhalten" + +#: libpq_source.c:606 #, c-format msgid "could not fetch remote file \"%s\": %s" msgstr "konnte ferne Datei »%s« nicht holen: %s" -#: libpq_fetch.c:381 +#: libpq_source.c:611 #, c-format msgid "unexpected result set while fetching remote file \"%s\"" msgstr "unerwartete Ergebnismenge beim Holen der fernen Datei »%s«" -#: libpq_fetch.c:425 +#: local_source.c:86 #, c-format -msgid "could not send COPY data: %s" -msgstr "konnte COPY-Daten nicht senden: %s" - -#: libpq_fetch.c:454 -#, c-format -msgid "could not send file list: %s" -msgstr "konnte Dateiliste nicht senden: %s" +msgid "could not open source file \"%s\": %m" +msgstr "konnte Quelldatei »%s« nicht öffnen: %m" -#: libpq_fetch.c:496 +#: local_source.c:90 #, c-format -msgid "could not send end-of-COPY: %s" -msgstr "konnte COPY-Ende nicht senden: %s" +msgid "could not seek in source file: %m" +msgstr "konnte Positionszeiger in Quelldatei nicht setzen: %m" -#: libpq_fetch.c:502 +#: local_source.c:109 #, c-format -msgid "unexpected result while sending file list: %s" -msgstr "unerwartetes Ergebnis beim Senden der Dateiliste: %s" +msgid "unexpected EOF while reading file \"%s\"" +msgstr "unerwartetes EOF beim Lesen der Datei »%s«" -#: parsexlog.c:73 parsexlog.c:125 parsexlog.c:185 +#: local_source.c:116 #, c-format -msgid "out of memory" -msgstr "Speicher aufgebraucht" +msgid "could not close file \"%s\": %m" +msgstr "konnte Datei »%s« nicht schließen: %m" -#: parsexlog.c:85 parsexlog.c:132 +#: parsexlog.c:85 parsexlog.c:138 #, c-format msgid "could not read WAL record at %X/%X: %s" msgstr "konnte WAL-Eintrag bei %X/%X nicht lesen: %s" -#: parsexlog.c:89 parsexlog.c:135 +#: parsexlog.c:89 parsexlog.c:141 #, c-format msgid "could not read WAL record at %X/%X" msgstr "konnte WAL-Eintrag bei %X/%X nicht lesen" -#: parsexlog.c:198 +#: parsexlog.c:205 #, c-format msgid "could not find previous WAL record at %X/%X: %s" msgstr "konnte vorangegangenen WAL-Eintrag bei %X/%X nicht finden: %s" -#: parsexlog.c:202 +#: parsexlog.c:209 #, c-format msgid "could not find previous WAL record at %X/%X" msgstr "konnte vorangegangenen WAL-Eintrag bei %X/%X nicht finden" -#: parsexlog.c:298 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "konnte Datei »%s« nicht öffnen: %m" - -#: parsexlog.c:327 +#: parsexlog.c:341 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "konnte Positionszeiger in Datei »%s« nicht setzen: %m" -#: parsexlog.c:407 +#: parsexlog.c:436 #, c-format msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmgr: %s, info: %02X" msgstr "WAL-Eintrag modifiziert eine Relation, aber Typ des Eintrags wurde nicht erkannt: lsn: %X/%X, rmgr: %s, info: %02X" -#: pg_rewind.c:78 +#: pg_rewind.c:84 #, c-format msgid "" "%s resynchronizes a PostgreSQL cluster with another copy of the cluster.\n" @@ -417,7 +454,7 @@ msgstr "" "%s resynchronisiert einen PostgreSQL-Cluster mit einer Kopie des Clusters.\n" "\n" -#: pg_rewind.c:79 +#: pg_rewind.c:85 #, c-format msgid "" "Usage:\n" @@ -428,12 +465,12 @@ msgstr "" " %s [OPTION]...\n" "\n" -#: pg_rewind.c:80 +#: pg_rewind.c:86 #, c-format msgid "Options:\n" msgstr "Optionen:\n" -#: pg_rewind.c:81 +#: pg_rewind.c:87 #, c-format msgid "" " -c, --restore-target-wal use restore_command in target configuration to\n" @@ -442,29 +479,29 @@ msgstr "" " -c, --restore-target-wal restore_command in der Zielkonfiguration zum\n" " Laden von WAL-Dateien aus Archiv verwenden\n" -#: pg_rewind.c:83 +#: pg_rewind.c:89 #, c-format msgid " -D, --target-pgdata=DIRECTORY existing data directory to modify\n" msgstr " -D, --target-pgdata=VERZ bestehendes zu modifizierendes Datenverzeichnis\n" -#: pg_rewind.c:84 +#: pg_rewind.c:90 #, c-format msgid " --source-pgdata=DIRECTORY source data directory to synchronize with\n" msgstr "" " --source-pgdata=VERZ Quelldatenverzeichnis, mit dem synchronisiert\n" " werden soll\n" -#: pg_rewind.c:85 +#: pg_rewind.c:91 #, c-format msgid " --source-server=CONNSTR source server to synchronize with\n" msgstr " --source-server=VERB Quellserver, mit dem synchronisiert werden soll\n" -#: pg_rewind.c:86 +#: pg_rewind.c:92 #, c-format msgid " -n, --dry-run stop before modifying anything\n" msgstr " -n, --dry-run anhalten, bevor etwas geändert wird\n" -#: pg_rewind.c:87 +#: pg_rewind.c:93 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written\n" @@ -473,12 +510,12 @@ msgstr "" " -N, --no-sync nicht warten, bis Änderungen sicher auf Festplatte\n" " geschrieben sind\n" -#: pg_rewind.c:89 +#: pg_rewind.c:95 #, c-format msgid " -P, --progress write progress messages\n" msgstr " -P, --progress Fortschrittsmeldungen ausgeben\n" -#: pg_rewind.c:90 +#: pg_rewind.c:96 #, c-format msgid "" " -R, --write-recovery-conf write configuration for replication\n" @@ -487,27 +524,27 @@ msgstr "" " -R, --write-recovery-conf Konfiguration für Replikation schreiben\n" " (benötigt --source-server)\n" -#: pg_rewind.c:92 +#: pg_rewind.c:98 #, c-format msgid " --debug write a lot of debug messages\n" msgstr " --debug viele Debug-Meldungen ausgeben\n" -#: pg_rewind.c:93 +#: pg_rewind.c:99 #, c-format msgid " --no-ensure-shutdown do not automatically fix unclean shutdown\n" msgstr " --no-ensure-shutdown unsauberen Shutdown nicht automatisch reparieren\n" -#: pg_rewind.c:94 +#: pg_rewind.c:100 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_rewind.c:95 +#: pg_rewind.c:101 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_rewind.c:96 +#: pg_rewind.c:102 #, c-format msgid "" "\n" @@ -516,175 +553,200 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: pg_rewind.c:97 +#: pg_rewind.c:103 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: pg_rewind.c:159 pg_rewind.c:208 pg_rewind.c:215 pg_rewind.c:222 -#: pg_rewind.c:229 pg_rewind.c:237 +#: pg_rewind.c:164 pg_rewind.c:213 pg_rewind.c:220 pg_rewind.c:227 +#: pg_rewind.c:234 pg_rewind.c:242 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: pg_rewind.c:207 +#: pg_rewind.c:212 #, c-format msgid "no source specified (--source-pgdata or --source-server)" msgstr "keine Quelle angegeben (--source-pgdata oder --source-server)" -#: pg_rewind.c:214 +#: pg_rewind.c:219 #, c-format msgid "only one of --source-pgdata or --source-server can be specified" msgstr "--source-pgdata und --source-server können nicht zusammen angegeben werden" -#: pg_rewind.c:221 +#: pg_rewind.c:226 #, c-format msgid "no target data directory specified (--target-pgdata)" msgstr "kein Zielverzeichnis angegeben (--target-pgdata)" -#: pg_rewind.c:228 +#: pg_rewind.c:233 #, c-format msgid "no source server information (--source-server) specified for --write-recovery-conf" msgstr "kein Quellserver (--source-server) angegeben für --write-recovery-conf" -#: pg_rewind.c:235 +#: pg_rewind.c:240 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" -#: pg_rewind.c:250 +#: pg_rewind.c:255 #, c-format msgid "cannot be executed by \"root\"" msgstr "kann nicht von »root« ausgeführt werden" -#: pg_rewind.c:251 +#: pg_rewind.c:256 #, c-format msgid "You must run %s as the PostgreSQL superuser.\n" msgstr "Sie müssen %s als PostgreSQL-Superuser ausführen.\n" -#: pg_rewind.c:262 +#: pg_rewind.c:267 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "konnte Zugriffsrechte von Verzeichnis »%s« nicht lesen: %m" -#: pg_rewind.c:316 +#: pg_rewind.c:287 +#, c-format +msgid "%s" +msgstr "%s" + +#: pg_rewind.c:290 +#, c-format +msgid "connected to server" +msgstr "mit Server verbunden" + +#: pg_rewind.c:337 #, c-format msgid "source and target cluster are on the same timeline" msgstr "Quell- und Ziel-Cluster sind auf der gleichen Zeitleiste" -#: pg_rewind.c:322 +#: pg_rewind.c:346 #, c-format msgid "servers diverged at WAL location %X/%X on timeline %u" msgstr "Server divergierten bei WAL-Position %X/%X auf Zeitleiste %u" -#: pg_rewind.c:360 +#: pg_rewind.c:394 #, c-format msgid "no rewind required" msgstr "kein Rückspulen nötig" -#: pg_rewind.c:369 +#: pg_rewind.c:403 #, c-format msgid "rewinding from last common checkpoint at %X/%X on timeline %u" msgstr "Rückspulen ab letztem gemeinsamen Checkpoint bei %X/%X auf Zeitleiste %u" -#: pg_rewind.c:378 +#: pg_rewind.c:413 #, c-format msgid "reading source file list" msgstr "lese Quelldateiliste" -#: pg_rewind.c:381 +#: pg_rewind.c:417 #, c-format msgid "reading target file list" msgstr "lese Zieldateiliste" -#: pg_rewind.c:392 +#: pg_rewind.c:426 #, c-format msgid "reading WAL in target" msgstr "lese WAL im Ziel-Cluster" -#: pg_rewind.c:409 +#: pg_rewind.c:447 #, c-format msgid "need to copy %lu MB (total source directory size is %lu MB)" msgstr "%lu MB müssen kopiert werden (Gesamtgröße des Quellverzeichnisses ist %lu MB)" -#: pg_rewind.c:428 -#, c-format -msgid "creating backup label and updating control file" -msgstr "erzeuge Backup-Label und aktualisiere Kontrolldatei" - -#: pg_rewind.c:458 +#: pg_rewind.c:465 #, c-format msgid "syncing target data directory" msgstr "synchronisiere Zieldatenverzeichnis" -#: pg_rewind.c:465 +#: pg_rewind.c:481 #, c-format msgid "Done!" msgstr "Fertig!" -#: pg_rewind.c:477 +#: pg_rewind.c:564 +#, c-format +msgid "no action decided for \"%s\"" +msgstr "keine Aktion bestimmt für »%s«" + +#: pg_rewind.c:596 +#, c-format +msgid "source system was modified while pg_rewind was running" +msgstr "Quellsystem wurde verändert, während pg_rewind lief" + +#: pg_rewind.c:600 +#, c-format +msgid "creating backup label and updating control file" +msgstr "erzeuge Backup-Label und aktualisiere Kontrolldatei" + +#: pg_rewind.c:650 +#, c-format +msgid "source system was in unexpected state at end of rewind" +msgstr "Quellsystem war in einem unerwarteten Zustand am Ende des Rückspulens" + +#: pg_rewind.c:681 #, c-format msgid "source and target clusters are from different systems" msgstr "Quell- und Ziel-Cluster sind von verschiedenen Systemen" -#: pg_rewind.c:485 +#: pg_rewind.c:689 #, c-format msgid "clusters are not compatible with this version of pg_rewind" msgstr "die Cluster sind nicht mit dieser Version von pg_rewind kompatibel" -#: pg_rewind.c:495 +#: pg_rewind.c:699 #, c-format msgid "target server needs to use either data checksums or \"wal_log_hints = on\"" msgstr "Zielserver muss entweder Datenprüfsummen oder »wal_log_hints = on« verwenden" -#: pg_rewind.c:506 +#: pg_rewind.c:710 #, c-format msgid "target server must be shut down cleanly" msgstr "Zielserver muss sauber heruntergefahren worden sein" -#: pg_rewind.c:516 +#: pg_rewind.c:720 #, c-format msgid "source data directory must be shut down cleanly" msgstr "Quelldatenverzeichnis muss sauber heruntergefahren worden sein" -#: pg_rewind.c:565 +#: pg_rewind.c:772 #, c-format msgid "%*s/%s kB (%d%%) copied" msgstr "%*s/%s kB (%d%%) kopiert" -#: pg_rewind.c:626 +#: pg_rewind.c:835 #, c-format msgid "invalid control file" msgstr "ungültige Kontrolldatei" -#: pg_rewind.c:710 +#: pg_rewind.c:919 #, c-format msgid "could not find common ancestor of the source and target cluster's timelines" msgstr "konnte keinen gemeinsamen Anfangspunkt in den Zeitleisten von Quell- und Ziel-Cluster finden" -#: pg_rewind.c:751 +#: pg_rewind.c:960 #, c-format msgid "backup label buffer too small" msgstr "Puffer für Backup-Label ist zu klein" -#: pg_rewind.c:774 +#: pg_rewind.c:983 #, c-format msgid "unexpected control file CRC" msgstr "unerwartete CRC in Kontrolldatei" -#: pg_rewind.c:784 +#: pg_rewind.c:995 #, c-format msgid "unexpected control file size %d, expected %d" msgstr "unerwartete Kontrolldateigröße %d, erwartet wurde %d" -#: pg_rewind.c:793 +#: pg_rewind.c:1004 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "WAL-Segmentgröße muss eine Zweierpotenz zwischen 1 MB und 1 GB sein, aber die Kontrolldatei gibt %d Byte an" msgstr[1] "WAL-Segmentgröße muss eine Zweierpotenz zwischen 1 MB und 1 GB sein, aber die Kontrolldatei gibt %d Bytes an" -#: pg_rewind.c:850 pg_rewind.c:908 +#: pg_rewind.c:1043 pg_rewind.c:1101 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -695,7 +757,7 @@ msgstr "" "selben Verzeichnis wie »%s« gefunden.\n" "Prüfen Sie Ihre Installation." -#: pg_rewind.c:855 pg_rewind.c:913 +#: pg_rewind.c:1048 pg_rewind.c:1106 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -706,22 +768,22 @@ msgstr "" "aber es hatte nicht die gleiche Version wie %s.\n" "Prüfen Sie Ihre Installation." -#: pg_rewind.c:876 +#: pg_rewind.c:1069 #, c-format msgid "restore_command is not set in the target cluster" msgstr "restore_command ist im Ziel-Cluster nicht gesetzt" -#: pg_rewind.c:919 +#: pg_rewind.c:1112 #, c-format msgid "executing \"%s\" for target server to complete crash recovery" msgstr "führe »%s« für Zielserver aus, um Wiederherstellung abzuschließen" -#: pg_rewind.c:939 +#: pg_rewind.c:1132 #, c-format msgid "postgres single-user mode in target cluster failed" msgstr "postgres im Einzelbenutzermodus im Ziel-Cluster fehlgeschlagen" -#: pg_rewind.c:940 +#: pg_rewind.c:1133 #, c-format msgid "Command was: %s" msgstr "Die Anweisung war: %s" @@ -761,137 +823,137 @@ msgstr "ungültige Daten in History-Datei" msgid "Timeline IDs must be less than child timeline's ID." msgstr "Zeitleisten-IDs müssen kleiner als die Zeitleisten-ID des Kindes sein." -#: xlogreader.c:347 +#: xlogreader.c:747 #, c-format msgid "invalid record offset at %X/%X" msgstr "ungültiger Datensatz-Offset bei %X/%X" -#: xlogreader.c:355 +#: xlogreader.c:756 #, c-format msgid "contrecord is requested by %X/%X" msgstr "Contrecord angefordert von %X/%X" -#: xlogreader.c:396 xlogreader.c:693 +#: xlogreader.c:818 xlogreader.c:1277 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "ungültige Datensatzlänge bei %X/%X: %u erwartet, %u erhalten" -#: xlogreader.c:420 +#: xlogreader.c:909 #, c-format msgid "record length %u at %X/%X too long" msgstr "Datensatzlänge %u bei %X/%X ist zu lang" -#: xlogreader.c:452 +#: xlogreader.c:969 #, c-format -msgid "there is no contrecord flag at %X/%X" -msgstr "keine Contrecord-Flag bei %X/%X" +msgid "there is no contrecord flag at %X/%X reading %X/%X" +msgstr "keine Contrecord-Flag bei %X/%X beim Lesen von %X/%X" -#: xlogreader.c:465 +#: xlogreader.c:984 #, c-format -msgid "invalid contrecord length %u at %X/%X" -msgstr "ungültige Contrecord-Länge %u bei %X/%X" +msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" +msgstr "ungültige Contrecord-Länge %u bei %X/%X beim Lesen von %X/%X, erwartet wurde %u" -#: xlogreader.c:701 +#: xlogreader.c:1285 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ungültige Resource-Manager-ID %u bei %X/%X" -#: xlogreader.c:715 xlogreader.c:732 +#: xlogreader.c:1298 xlogreader.c:1314 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "Datensatz mit falschem Prev-Link %X/%X bei %X/%X" -#: xlogreader.c:769 +#: xlogreader.c:1350 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "ungültige Resource-Manager-Datenprüfsumme in Datensatz bei %X/%X" -#: xlogreader.c:806 +#: xlogreader.c:1387 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "ungültige magische Zahl %04X in Logsegment %s, Offset %u" -#: xlogreader.c:820 xlogreader.c:861 +#: xlogreader.c:1401 xlogreader.c:1442 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "ungültige Info-Bits %04X in Logsegment %s, Offset %u" -#: xlogreader.c:835 +#: xlogreader.c:1416 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Datenbanksystemidentifikator in WAL-Datei ist %llu, Datenbanksystemidentifikator in pg_control ist %llu" -#: xlogreader.c:843 +#: xlogreader.c:1424 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: falsche Segmentgröße im Seitenkopf" -#: xlogreader.c:849 +#: xlogreader.c:1430 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: falsche XLOG_BLCKSZ im Seitenkopf" -#: xlogreader.c:880 +#: xlogreader.c:1461 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "unerwartete Pageaddr %X/%X in Logsegment %s, Offset %u" -#: xlogreader.c:905 +#: xlogreader.c:1486 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "Zeitleisten-ID %u außer der Reihe (nach %u) in Logsegment %s, Offset %u" -#: xlogreader.c:1246 +#: xlogreader.c:1908 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u außer der Reihe bei %X/%X" -#: xlogreader.c:1269 +#: xlogreader.c:1932 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA gesetzt, aber keine Daten enthalten bei %X/%X" -#: xlogreader.c:1276 +#: xlogreader.c:1939 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA nicht gesetzt, aber Datenlänge ist %u bei %X/%X" -#: xlogreader.c:1312 +#: xlogreader.c:1975 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE gesetzt, aber Loch Offset %u Länge %u Block-Abbild-Länge %u bei %X/%X" -#: xlogreader.c:1328 +#: xlogreader.c:1991 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE nicht gesetzt, aber Loch Offset %u Länge %u bei %X/%X" -#: xlogreader.c:1343 +#: xlogreader.c:2006 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge %u bei %X/%X" -#: xlogreader.c:1358 +#: xlogreader.c:2021 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "weder BKPIMAGE_HAS_HOLE noch BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge ist %u bei %X/%X" -#: xlogreader.c:1374 +#: xlogreader.c:2037 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL gesetzt, aber keine vorangehende Relation bei %X/%X" -#: xlogreader.c:1386 +#: xlogreader.c:2049 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "ungültige block_id %u bei %X/%X" -#: xlogreader.c:1475 +#: xlogreader.c:2116 #, c-format msgid "record with invalid length at %X/%X" msgstr "Datensatz mit ungültiger Länge bei %X/%X" -#: xlogreader.c:1564 +#: xlogreader.c:2219 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "ungültiges komprimiertes Abbild bei %X/%X, Block %d" diff --git a/src/bin/pg_rewind/po/es.po b/src/bin/pg_rewind/po/es.po index f2d1e9bd44b34..cd6e48980d2ee 100644 --- a/src/bin/pg_rewind/po/es.po +++ b/src/bin/pg_rewind/po/es.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_rewind (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:47+0000\n" -"PO-Revision-Date: 2019-09-29 22:26-0300\n" +"POT-Creation-Date: 2020-09-13 10:47+0000\n" +"PO-Revision-Date: 2020-10-16 15:59-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -48,16 +48,14 @@ msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" #: ../../common/restricted_token.c:64 -#, fuzzy, c-format -#| msgid "could not load library \"%s\": %s" +#, c-format msgid "could not load library \"%s\": error code %lu" -msgstr "no se pudo cargar la biblioteca «%s»: %s" +msgstr "no se pudo cargar la biblioteca «%s»: código de error %lu" #: ../../common/restricted_token.c:73 -#, fuzzy, c-format -#| msgid "cannot create restricted tokens on this platform" +#, c-format msgid "cannot create restricted tokens on this platform: error code %lu" -msgstr "no se pueden crear tokens restrigidos en esta plataforma" +msgstr "no se pueden crear tokens restrigidos en esta plataforma: código de error %lu" #: ../../common/restricted_token.c:82 #, c-format @@ -89,16 +87,66 @@ msgstr "no se pudo re-ejecutar con el token restringido: código de error %lu" msgid "could not get exit code from subprocess: error code %lu" msgstr "no se pudo obtener el código de salida del subproceso»: código de error %lu" -#: copy_fetch.c:59 +#: ../../fe_utils/archive.c:53 #, c-format -msgid "could not open directory \"%s\": %m" -msgstr "no se pudo abrir el directorio «%s»: %m" +#| msgid "cannot use restore_command with %%r placeholder" +msgid "could not use restore_command with %%r alias" +msgstr "no se puede usar restore_command con el alias %%r" + +#: ../../fe_utils/archive.c:74 +#, c-format +msgid "unexpected file size for \"%s\": %lu instead of %lu" +msgstr "el archivo «%s» tiene tamaño inesperado: %lu en lugar de %lu" -#: copy_fetch.c:88 filemap.c:208 filemap.c:369 +#: ../../fe_utils/archive.c:85 +#, c-format +msgid "could not open file \"%s\" restored from archive: %m" +msgstr "no se pudo abrir el archivo «%s» restaurado del archivo: %m" + +#: ../../fe_utils/archive.c:97 copy_fetch.c:88 filemap.c:208 #, c-format msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" +#: ../../fe_utils/archive.c:112 +#, c-format +#| msgid "restore_command failed: %s" +msgid "restore_command failed due to the signal: %s" +msgstr "restore_command falló debido a la señal: %s" + +#: ../../fe_utils/archive.c:121 +#, c-format +msgid "could not restore file \"%s\" from archive" +msgstr "no se pudo recuperar el archivo «%s» del archivo" + +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:73 parsexlog.c:125 +#: parsexlog.c:185 +#, c-format +msgid "out of memory" +msgstr "memoria agotada" + +#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:298 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "no se pudo abrir el archivo «%s»: %m" + +#: ../../fe_utils/recovery_gen.c:140 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "no se pudo escribir a archivo «%s»: %m" + +#: ../../fe_utils/recovery_gen.c:152 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "no se pudo crear archivo «%s»: %m" + +#: copy_fetch.c:59 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "no se pudo abrir el directorio «%s»: %m" + #: copy_fetch.c:117 #, c-format msgid "could not read symbolic link \"%s\": %m" @@ -239,12 +287,12 @@ msgstr "«%s» no es un link simbólico" msgid "\"%s\" is not a regular file" msgstr "«%s» no es un archivo regular" -#: filemap.c:381 +#: filemap.c:369 #, c-format msgid "source file list is empty" msgstr "el listado de archivos de origen está vacío" -#: filemap.c:496 +#: filemap.c:484 #, c-format msgid "unexpected page modification for directory or symbolic link \"%s\"" msgstr "modificación de página inesperada para el directorio o link simbólico «%s»" @@ -275,8 +323,7 @@ msgid "full_page_writes must be enabled in the source server" msgstr "full_page_writes debe estar activado en el servidor de origen" #: libpq_fetch.c:111 -#, fuzzy, c-format -#| msgid "error running query (%s) in source server: %s" +#, c-format msgid "error running query (%s) on source server: %s" msgstr "error ejecutando consulta (%s) en el servidor de origen: %s" @@ -305,81 +352,76 @@ msgstr "no se pudo obtener el listado de archivos: %s" msgid "unexpected result set while fetching file list" msgstr "conjunto de resultados inesperado mientras se obtenía el listado de archivos" -#: libpq_fetch.c:260 +#: libpq_fetch.c:265 #, c-format msgid "could not send query: %s" msgstr "no se pudo enviar la consulta: %s" -#: libpq_fetch.c:265 +#: libpq_fetch.c:270 #, c-format msgid "could not set libpq connection to single row mode" msgstr "no se pudo establecer la coneción libpq a modo «single row»" -#: libpq_fetch.c:285 +#: libpq_fetch.c:290 #, c-format msgid "unexpected result while fetching remote files: %s" msgstr "resultados inesperados mientras se obtenían archivos remotos: %s" -#: libpq_fetch.c:291 +#: libpq_fetch.c:296 #, c-format msgid "unexpected result set size while fetching remote files" msgstr "tamaño del conjunto de resultados inesperado mientras se obtenían archivos remotos" -#: libpq_fetch.c:297 +#: libpq_fetch.c:302 #, c-format msgid "unexpected data types in result set while fetching remote files: %u %u %u" msgstr "tipos de dato inesperados en el conjunto de resultados mientras se obtenían archivos remotos: %u %u %u" -#: libpq_fetch.c:305 +#: libpq_fetch.c:310 #, c-format msgid "unexpected result format while fetching remote files" msgstr "formato de resultados inesperado mientras se obtenían archivos remotos" -#: libpq_fetch.c:311 +#: libpq_fetch.c:316 #, c-format msgid "unexpected null values in result while fetching remote files" msgstr "valores nulos inesperados en el resultado mientras se obtenían archivos remotos" -#: libpq_fetch.c:315 +#: libpq_fetch.c:320 #, c-format msgid "unexpected result length while fetching remote files" msgstr "largo del resultado inesperado mientras se obtenían los archivos remotos" -#: libpq_fetch.c:376 +#: libpq_fetch.c:381 #, c-format msgid "could not fetch remote file \"%s\": %s" msgstr "no se pudo obtener el archivo remoto «%s»: %s" -#: libpq_fetch.c:381 +#: libpq_fetch.c:386 #, c-format msgid "unexpected result set while fetching remote file \"%s\"" msgstr "conjunto de resultados inesperado mientras se obtenía el archivo remoto «%s»" -#: libpq_fetch.c:425 +#: libpq_fetch.c:430 #, c-format msgid "could not send COPY data: %s" msgstr "no se pudo enviar datos COPY: %s" -#: libpq_fetch.c:454 +#: libpq_fetch.c:459 #, c-format msgid "could not send file list: %s" msgstr "no se pudo enviar el listado de archivos: %s" -#: libpq_fetch.c:496 +#: libpq_fetch.c:501 #, c-format msgid "could not send end-of-COPY: %s" msgstr "no se pudo enviar fin-de-COPY: %s" -#: libpq_fetch.c:502 +#: libpq_fetch.c:507 #, c-format msgid "unexpected result while sending file list: %s" msgstr "resultados inesperados mientras se enviaba el listado de archivos: %s" -#: parsexlog.c:73 parsexlog.c:125 parsexlog.c:185 -#, c-format -msgid "out of memory" -msgstr "memoria agotada" - #: parsexlog.c:85 parsexlog.c:132 #, c-format msgid "could not read WAL record at %X/%X: %s" @@ -400,11 +442,6 @@ msgstr "no se pudo encontrar el registro WAL anterior en %X/%X: %s" msgid "could not find previous WAL record at %X/%X" msgstr "no se pudo encontrar el registro WAL anterior en %X/%X" -#: parsexlog.c:298 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "no se pudo abrir el archivo «%s»: %m" - #: parsexlog.c:327 #, c-format msgid "could not seek in file \"%s\": %m" @@ -446,6 +483,8 @@ msgid "" " -c, --restore-target-wal use restore_command in target configuration to\n" " retrieve WAL files from archives\n" msgstr "" +" -c, --restore-target-wal utilizar restore_command de la configuración\n" +" de destino para obtener archivos WAL\n" #: pg_rewind.c:83 #, c-format @@ -480,16 +519,13 @@ msgid " -P, --progress write progress messages\n" msgstr " -P, --progress escribir mensajes de progreso\n" #: pg_rewind.c:90 -#, fuzzy, c-format -#| msgid "" -#| " -R, --write-recovery-conf\n" -#| " write configuration for replication\n" +#, c-format msgid "" " -R, --write-recovery-conf write configuration for replication\n" " (requires --source-server)\n" msgstr "" -" -R, --write-recovery-conf\n" -" escribe configuración para replicación\n" +" -R, --write-recovery-conf escribe configuración para replicación\n" +" (requiere --source-server)\n" #: pg_rewind.c:92 #, c-format @@ -500,6 +536,8 @@ msgstr " --debug escribir muchos mensajes de depuración #, c-format msgid " --no-ensure-shutdown do not automatically fix unclean shutdown\n" msgstr "" +" --no-ensure-shutdown no corregir automáticamente un apagado\n" +" no-limpio\n" #: pg_rewind.c:94 #, c-format @@ -517,11 +555,13 @@ msgid "" "\n" "Report bugs to <%s>.\n" msgstr "" +"\n" +"Reporte errores a <%s>.\n" #: pg_rewind.c:97 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" #: pg_rewind.c:159 pg_rewind.c:208 pg_rewind.c:215 pg_rewind.c:222 #: pg_rewind.c:229 pg_rewind.c:237 @@ -547,7 +587,7 @@ msgstr "no se especificó directorio de datos de destino (--target-pgdata)" #: pg_rewind.c:228 #, c-format msgid "no source server information (--source-server) specified for --write-recovery-conf" -msgstr "" +msgstr "no se especificó información de servidor de origen (--source-server) para --write-recovery-conf" #: pg_rewind.c:235 #, c-format @@ -609,120 +649,124 @@ msgstr "leyendo WAL en destino" msgid "need to copy %lu MB (total source directory size is %lu MB)" msgstr "se necesitan copiar %lu MB (tamaño total de directorio de origen es %lu MB)" -#: pg_rewind.c:428 +#: pg_rewind.c:427 #, c-format msgid "creating backup label and updating control file" msgstr "creando etiqueta de respaldo y actualizando archivo de control" -#: pg_rewind.c:458 +#: pg_rewind.c:457 #, c-format msgid "syncing target data directory" msgstr "sincronizando directorio de datos de destino" -#: pg_rewind.c:465 +#: pg_rewind.c:464 #, c-format msgid "Done!" msgstr "¡Listo!" -#: pg_rewind.c:477 +#: pg_rewind.c:476 #, c-format msgid "source and target clusters are from different systems" msgstr "clusters de origen y destino son de sistemas diferentes" -#: pg_rewind.c:485 +#: pg_rewind.c:484 #, c-format msgid "clusters are not compatible with this version of pg_rewind" msgstr "los clusters no son compatibles con esta versión de pg_rewind" -#: pg_rewind.c:495 +#: pg_rewind.c:494 #, c-format msgid "target server needs to use either data checksums or \"wal_log_hints = on\"" msgstr "el servidor de destino necesita tener sumas de verificación de datos o «wal_log_hints» activados" -#: pg_rewind.c:506 +#: pg_rewind.c:505 #, c-format msgid "target server must be shut down cleanly" msgstr "el directorio de destino debe estar apagado limpiamente" -#: pg_rewind.c:516 +#: pg_rewind.c:515 #, c-format msgid "source data directory must be shut down cleanly" msgstr "el directorio de origen debe estar apagado limpiamente" -#: pg_rewind.c:565 +#: pg_rewind.c:567 #, c-format msgid "%*s/%s kB (%d%%) copied" msgstr "%*s/%s kB (%d%%) copiados" -#: pg_rewind.c:626 +#: pg_rewind.c:630 #, c-format msgid "invalid control file" msgstr "archivo de control no válido" -#: pg_rewind.c:710 +#: pg_rewind.c:714 #, c-format msgid "could not find common ancestor of the source and target cluster's timelines" msgstr "no se pudo encontrar un ancestro común en el timeline de los clusters de origen y destino" -#: pg_rewind.c:751 +#: pg_rewind.c:755 #, c-format msgid "backup label buffer too small" msgstr "el búfer del backup label es demasiado pequeño" -#: pg_rewind.c:774 +#: pg_rewind.c:778 #, c-format msgid "unexpected control file CRC" msgstr "CRC de archivo de control inesperado" -#: pg_rewind.c:784 +#: pg_rewind.c:788 #, c-format msgid "unexpected control file size %d, expected %d" msgstr "tamaño del archivo de control %d inesperado, se esperaba %d" -#: pg_rewind.c:793 +#: pg_rewind.c:797 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "El tamaño del segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el archivo de control especifica %d byte" msgstr[1] "El tamaño del segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el archivo de control especifica %d bytes" -#: pg_rewind.c:850 pg_rewind.c:908 +#: pg_rewind.c:854 pg_rewind.c:912 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" "same directory as \"%s\".\n" "Check your installation." msgstr "" +"%s necesita el programa «%s», pero no pudo encontrarlo en el mismo\n" +"directorio que «%s».\n" +"Verifique su instalación." -#: pg_rewind.c:855 pg_rewind.c:913 +#: pg_rewind.c:859 pg_rewind.c:917 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" "but was not the same version as %s.\n" "Check your installation." msgstr "" +"El programa «%s» fue encontrado por «%s»,\n" +"pero no es de la misma versión que %s.\n" +"Verifique su instalación." -#: pg_rewind.c:876 -#, fuzzy, c-format -#| msgid "Restoring global objects in the new cluster" +#: pg_rewind.c:880 +#, c-format msgid "restore_command is not set in the target cluster" -msgstr "Restaurando objetos globales en el nuevo clúster" +msgstr "restore_command no está definido en el clúster de destino" -#: pg_rewind.c:919 +#: pg_rewind.c:923 #, c-format msgid "executing \"%s\" for target server to complete crash recovery" -msgstr "" +msgstr "ejecutando «%s» en el servidor de destino para completar la recuperación de caídas" -#: pg_rewind.c:939 +#: pg_rewind.c:943 #, c-format msgid "postgres single-user mode in target cluster failed" -msgstr "" +msgstr "el modo «single-user» en el servidor de destino falló" -#: pg_rewind.c:940 -#, fuzzy, c-format -#| msgid "%s: %sCommand was: %s" +#: pg_rewind.c:944 +#, c-format msgid "Command was: %s" -msgstr "%s: %sLa orden era: %s" +msgstr "La orden era: % s" #: timeline.c:75 timeline.c:81 #, c-format @@ -759,148 +803,137 @@ msgstr "datos no válidos en archivo de historia" msgid "Timeline IDs must be less than child timeline's ID." msgstr "IDs de timeline deben ser menores que el ID de timeline del hijo." -#: xlogreader.c:347 +#: xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "posición de registro no válida en %X/%X" -#: xlogreader.c:355 +#: xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "contrecord solicitado por %X/%X" -#: xlogreader.c:396 xlogreader.c:693 +#: xlogreader.c:398 xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "largo de registro no válido en %X/%X: se esperaba %u, se obtuvo %u" -#: xlogreader.c:420 +#: xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "largo de registro %u en %X/%X demasiado largo" -#: xlogreader.c:452 +#: xlogreader.c:454 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "no hay bandera de contrecord en %X/%X" -#: xlogreader.c:465 +#: xlogreader.c:467 #, c-format msgid "invalid contrecord length %u at %X/%X" msgstr "largo de contrecord %u no válido en %X/%X" -#: xlogreader.c:701 +#: xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ID de gestor de recursos %u no válido en %X/%X" -#: xlogreader.c:715 xlogreader.c:732 +#: xlogreader.c:717 xlogreader.c:734 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "registro con prev-link %X/%X incorrecto en %X/%X" -#: xlogreader.c:769 +#: xlogreader.c:771 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "suma de verificación de los datos del gestor de recursos incorrecta en el registro en %X/%X" -#: xlogreader.c:806 +#: xlogreader.c:808 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "número mágico %04X no válido en archivo %s, posición %u" -#: xlogreader.c:820 xlogreader.c:861 +#: xlogreader.c:822 xlogreader.c:863 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "info bits %04X no válidos en archivo %s, posición %u" -#: xlogreader.c:835 -#, fuzzy, c-format -#| msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" +#: xlogreader.c:837 +#, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" -msgstr "archivo WAL es de un sistema de bases de datos distinto: identificador de sistema en archivo WAL es %s, identificador en pg_control es %s" +msgstr "archivo WAL es de un sistema de bases de datos distinto: identificador de sistema en archivo WAL es %llu, identificador en pg_control es %llu" -#: xlogreader.c:843 +#: xlogreader.c:845 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: tamaño de segmento incorrecto en cabecera de paǵina" -#: xlogreader.c:849 +#: xlogreader.c:851 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: XLOG_BLCKSZ incorrecto en cabecera de paǵina" -#: xlogreader.c:880 +#: xlogreader.c:882 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "pageaddr %X/%X inesperado en archivo %s, posición %u" -#: xlogreader.c:905 +#: xlogreader.c:907 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "ID de timeline %u fuera de secuencia (después de %u) en archivo %s, posición %u" -#: xlogreader.c:1245 +#: xlogreader.c:1247 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u fuera de orden en %X/%X" -#: xlogreader.c:1268 +#: xlogreader.c:1270 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA está definido, pero no hay datos en %X/%X" -#: xlogreader.c:1275 +#: xlogreader.c:1277 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA no está definido, pero el largo de los datos es %u en %X/%X" -#: xlogreader.c:1311 +#: xlogreader.c:1313 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE está definido, pero posición del agujero es %u largo %u largo de imagen %u en %X/%X" -#: xlogreader.c:1327 +#: xlogreader.c:1329 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE no está definido, pero posición del agujero es %u largo %u en %X/%X" -#: xlogreader.c:1342 +#: xlogreader.c:1344 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%X" -#: xlogreader.c:1357 +#: xlogreader.c:1359 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED está definido, pero largo de imagen de bloque es %u en %X/%X" -#: xlogreader.c:1373 +#: xlogreader.c:1375 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL está definido, pero no hay «rel» anterior en %X/%X " -#: xlogreader.c:1385 +#: xlogreader.c:1387 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "block_id %u no válido en %X/%X" -#: xlogreader.c:1474 +#: xlogreader.c:1476 #, c-format msgid "record with invalid length at %X/%X" msgstr "registro con largo no válido en %X/%X" -#: xlogreader.c:1563 +#: xlogreader.c:1565 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "imagen comprimida no válida en %X/%X, bloque %d" - -#~ msgid "cannot create restricted tokens on this platform" -#~ msgstr "no se pueden crear tokens restrigidos en esta plataforma" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Reporte errores a .\n" diff --git a/src/bin/pg_rewind/po/fr.po b/src/bin/pg_rewind/po/fr.po index 345cf36882e42..762900591f92c 100644 --- a/src/bin/pg_rewind/po/fr.po +++ b/src/bin/pg_rewind/po/fr.po @@ -7,28 +7,28 @@ msgid "" msgstr "" "Project-Id-Version: pg_rewind (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-10 20:47+0000\n" -"PO-Revision-Date: 2020-05-11 09:25+0200\n" +"POT-Creation-Date: 2021-04-23 08:19+0000\n" +"PO-Revision-Date: 2021-04-23 10:43+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal : " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "erreur : " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "attention : " @@ -84,332 +84,370 @@ msgstr "n'a pas pu ré-exécuter le jeton restreint : code d'erreur %lu" msgid "could not get exit code from subprocess: error code %lu" msgstr "n'a pas pu récupérer le code de statut du sous-processus : code d'erreur %lu" -#: copy_fetch.c:59 +#: ../../fe_utils/archive.c:53 #, c-format -msgid "could not open directory \"%s\": %m" -msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" - -#: copy_fetch.c:88 filemap.c:208 filemap.c:369 -#, c-format -msgid "could not stat file \"%s\": %m" -msgstr "n'a pas pu tester le fichier « %s » : %m" +msgid "cannot use restore_command with %%r placeholder" +msgstr "ne peut pas utiliser restore_command avec le joker %%r" -#: copy_fetch.c:117 +#: ../../fe_utils/archive.c:74 #, c-format -msgid "could not read symbolic link \"%s\": %m" -msgstr "n'a pas pu lire le lien symbolique « %s » : %m" +msgid "unexpected file size for \"%s\": %lld instead of %lld" +msgstr "taille de fichier inattendu pour « %s » : %lld au lieu de %lld" -#: copy_fetch.c:120 +#: ../../fe_utils/archive.c:85 #, c-format -msgid "symbolic link \"%s\" target is too long" -msgstr "la cible du lien symbolique « %s » est trop long" +msgid "could not open file \"%s\" restored from archive: %m" +msgstr "n'a pas pu ouvrir le fichier « %s » à partir de l'archive : %m" -#: copy_fetch.c:135 +#: ../../fe_utils/archive.c:97 file_ops.c:417 #, c-format -msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform" -msgstr "« %s » est un lien symbolique mais les liens symboliques ne sont pas supportés sur cette plateforme" +msgid "could not stat file \"%s\": %m" +msgstr "n'a pas pu tester le fichier « %s » : %m" -#: copy_fetch.c:142 +#: ../../fe_utils/archive.c:112 #, c-format -msgid "could not read directory \"%s\": %m" -msgstr "n'a pas pu lire le répertoire « %s » : %m" +msgid "restore_command failed: %s" +msgstr "échec de la restore_command : %s" -#: copy_fetch.c:146 +#: ../../fe_utils/archive.c:121 #, c-format -msgid "could not close directory \"%s\": %m" -msgstr "n'a pas pu fermer le répertoire « %s » : %m" +msgid "could not restore file \"%s\" from archive" +msgstr "n'a pas pu restaurer le fichier « %s » à partir de l'archive" -#: copy_fetch.c:166 +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:67 parsexlog.c:126 +#: parsexlog.c:186 #, c-format -msgid "could not open source file \"%s\": %m" -msgstr "n'a pas pu ouvrir le fichier source « %s » : %m" +msgid "out of memory" +msgstr "mémoire épuisée" -#: copy_fetch.c:170 +#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:308 #, c-format -msgid "could not seek in source file: %m" -msgstr "n'a pas pu chercher dans le fichier source : %m" +msgid "could not open file \"%s\": %m" +msgstr "n'a pas pu ouvrir le fichier « %s » : %m" -#: copy_fetch.c:187 file_ops.c:311 parsexlog.c:336 +#: ../../fe_utils/recovery_gen.c:140 #, c-format -msgid "could not read file \"%s\": %m" -msgstr "n'a pas pu lire le fichier « %s » : %m" +msgid "could not write to file \"%s\": %m" +msgstr "n'a pas pu écrire dans le fichier « %s » : %m" -#: copy_fetch.c:190 +#: ../../fe_utils/recovery_gen.c:152 #, c-format -msgid "unexpected EOF while reading file \"%s\"" -msgstr "EOF inattendu lors de la lecture du fichier « %s »" +msgid "could not create file \"%s\": %m" +msgstr "n'a pas pu créer le fichier « %s » : %m" -#: copy_fetch.c:197 -#, c-format -msgid "could not close file \"%s\": %m" -msgstr "n'a pas pu fermer le fichier « %s » : %m" - -#: file_ops.c:62 +#: file_ops.c:67 #, c-format msgid "could not open target file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier cible « %s » : %m" -#: file_ops.c:76 +#: file_ops.c:81 #, c-format msgid "could not close target file \"%s\": %m" msgstr "n'a pas pu fermer le fichier cible « %s » : %m" -#: file_ops.c:96 +#: file_ops.c:101 #, c-format msgid "could not seek in target file \"%s\": %m" msgstr "n'a pas pu chercher dans le fichier cible « %s » : %m" -#: file_ops.c:112 +#: file_ops.c:117 #, c-format msgid "could not write file \"%s\": %m" msgstr "impossible d'écrire le fichier « %s » : %m" -#: file_ops.c:162 +#: file_ops.c:150 file_ops.c:177 +#, c-format +msgid "undefined file type for \"%s\"" +msgstr "type de fichier non défini pour « %s »" + +#: file_ops.c:173 #, c-format msgid "invalid action (CREATE) for regular file" msgstr "action (CREATE) invalide pour le fichier régulier" -#: file_ops.c:185 +#: file_ops.c:200 #, c-format msgid "could not remove file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier « %s » : %m" -#: file_ops.c:203 +#: file_ops.c:218 #, c-format msgid "could not open file \"%s\" for truncation: %m" msgstr "n'a pas pu ouvrir le fichier « %s » pour le troncage : %m" -#: file_ops.c:207 +#: file_ops.c:222 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "n'a pas pu tronquer le fichier « %s » en %u : %m" -#: file_ops.c:223 +#: file_ops.c:238 #, c-format msgid "could not create directory \"%s\": %m" msgstr "n'a pas pu créer le répertoire « %s » : %m" -#: file_ops.c:237 +#: file_ops.c:252 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "n'a pas pu supprimer le répertoire « %s » : %m" -#: file_ops.c:251 +#: file_ops.c:266 #, c-format msgid "could not create symbolic link at \"%s\": %m" msgstr "n'a pas pu créer le lien symbolique à « %s » : %m" -#: file_ops.c:265 +#: file_ops.c:280 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "n'a pas pu supprimer le lien symbolique « %s » : %m" -#: file_ops.c:296 file_ops.c:300 +#: file_ops.c:326 file_ops.c:330 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %m" -#: file_ops.c:314 parsexlog.c:338 +#: file_ops.c:341 local_source.c:107 parsexlog.c:351 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "n'a pas pu lire le fichier « %s » : %m" + +#: file_ops.c:344 parsexlog.c:353 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %zu" -#: filemap.c:200 +#: file_ops.c:388 #, c-format -msgid "data file \"%s\" in source is not a regular file" -msgstr "le fichier de données « %s » en source n'est pas un fichier standard" +msgid "could not open directory \"%s\": %m" +msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" -#: filemap.c:222 +#: file_ops.c:446 #, c-format -msgid "\"%s\" is not a directory" -msgstr "« %s » n'est pas un répertoire" +msgid "could not read symbolic link \"%s\": %m" +msgstr "n'a pas pu lire le lien symbolique « %s » : %m" -#: filemap.c:245 +#: file_ops.c:449 #, c-format -msgid "\"%s\" is not a symbolic link" -msgstr "« %s » n'est pas un lien symbolique" +msgid "symbolic link \"%s\" target is too long" +msgstr "la cible du lien symbolique « %s » est trop long" -#: filemap.c:257 +#: file_ops.c:464 #, c-format -msgid "\"%s\" is not a regular file" -msgstr "« %s » n'est pas un fichier standard" +msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform" +msgstr "« %s » est un lien symbolique mais les liens symboliques ne sont pas supportés sur cette plateforme" -#: filemap.c:381 +#: file_ops.c:471 #, c-format -msgid "source file list is empty" -msgstr "la liste de fichiers sources est vide" +msgid "could not read directory \"%s\": %m" +msgstr "n'a pas pu lire le répertoire « %s » : %m" -#: filemap.c:496 +#: file_ops.c:475 #, c-format -msgid "unexpected page modification for directory or symbolic link \"%s\"" -msgstr "modification inattendue de page pour le répertoire ou le lien symbolique « %s »" +msgid "could not close directory \"%s\": %m" +msgstr "n'a pas pu fermer le répertoire « %s » : %m" -#: libpq_fetch.c:50 +#: filemap.c:237 #, c-format -msgid "could not connect to server: %s" -msgstr "n'a pas pu se connecter au serveur : %s" +msgid "data file \"%s\" in source is not a regular file" +msgstr "le fichier de données « %s » en source n'est pas un fichier standard" -#: libpq_fetch.c:54 +#: filemap.c:242 filemap.c:275 #, c-format -msgid "connected to server" -msgstr "connecté au serveur" +msgid "duplicate source file \"%s\"" +msgstr "fichier source « %s » dupliqué" -#: libpq_fetch.c:63 +#: filemap.c:330 #, c-format -msgid "could not clear search_path: %s" -msgstr "n'a pas pu effacer search_path : %s" +msgid "unexpected page modification for non-regular file \"%s\"" +msgstr "modification inattendue de page pour le fichier non standard « %s »" + +#: filemap.c:680 filemap.c:774 +#, c-format +msgid "unknown file type for \"%s\"" +msgstr "type de fichier inconnu pour « %s »" + +#: filemap.c:707 +#, c-format +msgid "file \"%s\" is of different type in source and target" +msgstr "le fichier « %s » a un type différent pour la source et la cible" + +#: filemap.c:779 +#, c-format +msgid "could not decide what to do with file \"%s\"" +msgstr "n'a pas pu décider que faire avec le fichier « %s » : %m" -#: libpq_fetch.c:75 +#: libpq_source.c:128 #, c-format -msgid "source server must not be in recovery mode" -msgstr "le serveur source ne doit pas être en mode restauration" +msgid "could not clear search_path: %s" +msgstr "n'a pas pu effacer search_path : %s" -#: libpq_fetch.c:85 +#: libpq_source.c:139 #, c-format msgid "full_page_writes must be enabled in the source server" msgstr "full_page_writes doit être activé sur le serveur source" -#: libpq_fetch.c:111 +#: libpq_source.c:150 +#, c-format +msgid "could not prepare statement to fetch file contents: %s" +msgstr "n'a pas pu préparer l'instruction pour récupérer le contenu du fichier : %s" + +#: libpq_source.c:169 #, c-format msgid "error running query (%s) on source server: %s" msgstr "erreur lors de l'exécution de la requête (%s) sur le serveur source : %s" -#: libpq_fetch.c:116 +#: libpq_source.c:174 #, c-format msgid "unexpected result set from query" msgstr "ensemble de résultats inattendu provenant de la requête" -#: libpq_fetch.c:137 +#: libpq_source.c:196 #, c-format msgid "error running query (%s) in source server: %s" msgstr "erreur lors de l'exécution de la requête (%s) dans le serveur source : %s" -#: libpq_fetch.c:157 +#: libpq_source.c:217 #, c-format msgid "unrecognized result \"%s\" for current WAL insert location" msgstr "résultat non reconnu « %s » pour l'emplacement d'insertion actuel dans les WAL" -#: libpq_fetch.c:207 +#: libpq_source.c:268 #, c-format msgid "could not fetch file list: %s" msgstr "n'a pas pu récupérer la liste des fichiers : %s" -#: libpq_fetch.c:212 +#: libpq_source.c:273 #, c-format msgid "unexpected result set while fetching file list" msgstr "ensemble de résultats inattendu lors de la récupération de la liste des fichiers" -#: libpq_fetch.c:260 +#: libpq_source.c:435 #, c-format msgid "could not send query: %s" msgstr "n'a pas pu envoyer la requête : %s" -#: libpq_fetch.c:265 +#: libpq_source.c:438 #, c-format msgid "could not set libpq connection to single row mode" msgstr "n'a pas pu configurer la connexion libpq en mode ligne seule" -#: libpq_fetch.c:285 +#: libpq_source.c:468 #, c-format msgid "unexpected result while fetching remote files: %s" msgstr "résultat inattendu lors de la récupération des fichiers cibles : %s" -#: libpq_fetch.c:291 +#: libpq_source.c:473 +#, c-format +msgid "received more data chunks than requested" +msgstr "a reçu plus de morceaux de données que demandé" + +#: libpq_source.c:477 #, c-format msgid "unexpected result set size while fetching remote files" msgstr "taille inattendue de l'ensemble de résultats lors de la récupération des fichiers distants" -#: libpq_fetch.c:297 +#: libpq_source.c:483 #, c-format msgid "unexpected data types in result set while fetching remote files: %u %u %u" msgstr "types de données inattendus dans l'ensemble de résultats lors de la récupération des fichiers distants : %u %u %u" -#: libpq_fetch.c:305 +#: libpq_source.c:491 #, c-format msgid "unexpected result format while fetching remote files" msgstr "format de résultat inattendu lors de la récupération des fichiers distants" -#: libpq_fetch.c:311 +#: libpq_source.c:497 #, c-format msgid "unexpected null values in result while fetching remote files" msgstr "valeurs NULL inattendues dans le résultat lors de la récupération des fichiers distants" -#: libpq_fetch.c:315 +#: libpq_source.c:501 #, c-format msgid "unexpected result length while fetching remote files" msgstr "longueur de résultats inattendu lors de la récupération des fichiers distants" -#: libpq_fetch.c:376 +#: libpq_source.c:534 +#, c-format +msgid "received data for file \"%s\", when requested for \"%s\"" +msgstr "a reçu des données du fichier « %s » alors que « %s » était demandé" + +#: libpq_source.c:538 +#, c-format +msgid "received data at offset %lld of file \"%s\", when requested for offset %lld" +msgstr "a reçu des données au décalage %lld du fichier « %s » alors que le décalage %lld était demandé" + +#: libpq_source.c:550 +#, c-format +msgid "received more than requested for file \"%s\"" +msgstr "a reçu plus que demandé pour le fichier « %s »" + +#: libpq_source.c:563 +#, c-format +msgid "unexpected number of data chunks received" +msgstr "nombre de morceaux de données reçus inattendu" + +#: libpq_source.c:606 #, c-format msgid "could not fetch remote file \"%s\": %s" msgstr "n'a pas pu récupérer le fichier distant « %s » : %s" -#: libpq_fetch.c:381 +#: libpq_source.c:611 #, c-format msgid "unexpected result set while fetching remote file \"%s\"" msgstr "ensemble de résultats inattendu lors de la récupération du fichier distant « %s »" -#: libpq_fetch.c:425 -#, c-format -msgid "could not send COPY data: %s" -msgstr "n'a pas pu envoyer les données COPY : %s" - -#: libpq_fetch.c:454 +#: local_source.c:86 #, c-format -msgid "could not send file list: %s" -msgstr "n'a pas pu envoyer la liste de fichiers : %s" +msgid "could not open source file \"%s\": %m" +msgstr "n'a pas pu ouvrir le fichier source « %s » : %m" -#: libpq_fetch.c:496 +#: local_source.c:90 #, c-format -msgid "could not send end-of-COPY: %s" -msgstr "n'a pas pu envoyer end-of-COPY : %s" +msgid "could not seek in source file: %m" +msgstr "n'a pas pu chercher dans le fichier source : %m" -#: libpq_fetch.c:502 +#: local_source.c:109 #, c-format -msgid "unexpected result while sending file list: %s" -msgstr "résultat inattendu lors de l'envoi de la liste de fichiers : %s" +msgid "unexpected EOF while reading file \"%s\"" +msgstr "EOF inattendu lors de la lecture du fichier « %s »" -#: parsexlog.c:73 parsexlog.c:125 parsexlog.c:185 +#: local_source.c:116 #, c-format -msgid "out of memory" -msgstr "mémoire épuisée" +msgid "could not close file \"%s\": %m" +msgstr "n'a pas pu fermer le fichier « %s » : %m" -#: parsexlog.c:85 parsexlog.c:132 +#: parsexlog.c:85 parsexlog.c:138 #, c-format msgid "could not read WAL record at %X/%X: %s" msgstr "n'a pas pu lire l'enregistrement WAL précédent à %X/%X : %s" -#: parsexlog.c:89 parsexlog.c:135 +#: parsexlog.c:89 parsexlog.c:141 #, c-format msgid "could not read WAL record at %X/%X" msgstr "n'a pas pu lire l'enregistrement WAL précédent à %X/%X" -#: parsexlog.c:198 +#: parsexlog.c:205 #, c-format msgid "could not find previous WAL record at %X/%X: %s" msgstr "n'a pas pu trouver l'enregistrement WAL précédent à %X/%X : %s" -#: parsexlog.c:202 +#: parsexlog.c:209 #, c-format msgid "could not find previous WAL record at %X/%X" msgstr "n'a pas pu trouver l'enregistrement WAL précédent à %X/%X" -#: parsexlog.c:298 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "n'a pas pu ouvrir le fichier « %s » : %m" - -#: parsexlog.c:327 +#: parsexlog.c:341 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "n'a pas pu parcourir le fichier « %s » : %m" -#: parsexlog.c:407 +#: parsexlog.c:436 #, c-format msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmgr: %s, info: %02X" msgstr "l'enregistrement WAL modifie une relation mais le type d'enregistrement n'est pas reconnu: lsn : %X/%X, rmgr : %s, info : %02X" -#: pg_rewind.c:78 +#: pg_rewind.c:84 #, c-format msgid "" "%s resynchronizes a PostgreSQL cluster with another copy of the cluster.\n" @@ -418,7 +456,7 @@ msgstr "" "%s resynchronise une instance PostgreSQL avec une autre copie de l'instance.\n" "\n" -#: pg_rewind.c:79 +#: pg_rewind.c:85 #, c-format msgid "" "Usage:\n" @@ -429,12 +467,12 @@ msgstr "" " %s [OPTION]...\n" "\n" -#: pg_rewind.c:80 +#: pg_rewind.c:86 #, c-format msgid "Options:\n" msgstr "Options :\n" -#: pg_rewind.c:81 +#: pg_rewind.c:87 #, c-format msgid "" " -c, --restore-target-wal use restore_command in target configuration to\n" @@ -443,39 +481,39 @@ msgstr "" " -c, --restore-target-wal utilise restore_command pour la configuration cible\n" " de récupération des fichiers WAL des archives\n" -#: pg_rewind.c:83 +#: pg_rewind.c:89 #, c-format msgid " -D, --target-pgdata=DIRECTORY existing data directory to modify\n" msgstr " -D, --target-pgdata=RÉPERTOIRE répertoire de données existant à modifier\n" -#: pg_rewind.c:84 +#: pg_rewind.c:90 #, c-format msgid " --source-pgdata=DIRECTORY source data directory to synchronize with\n" msgstr " --source-pgdata=RÉPERTOIRE répertoire des données source pour la synchronisation\n" -#: pg_rewind.c:85 +#: pg_rewind.c:91 #, c-format msgid " --source-server=CONNSTR source server to synchronize with\n" msgstr " --source-server=CONNSTR serveur source pour la synchronisation\n" -#: pg_rewind.c:86 +#: pg_rewind.c:92 #, c-format msgid " -n, --dry-run stop before modifying anything\n" msgstr " -n, --dry-run arrête avant de modifier quoi que ce soit\n" -#: pg_rewind.c:87 +#: pg_rewind.c:93 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written\n" " safely to disk\n" msgstr " -N, --nosync n'attend pas que les modifications soient proprement écrites sur disque\n" -#: pg_rewind.c:89 +#: pg_rewind.c:95 #, c-format msgid " -P, --progress write progress messages\n" msgstr " -P, --progress écrit les messages de progression\n" -#: pg_rewind.c:90 +#: pg_rewind.c:96 #, c-format msgid "" " -R, --write-recovery-conf write configuration for replication\n" @@ -485,27 +523,27 @@ msgstr "" " (requiert --source-server)\n" "\n" -#: pg_rewind.c:92 +#: pg_rewind.c:98 #, c-format msgid " --debug write a lot of debug messages\n" msgstr " --debug écrit beaucoup de messages de débogage\n" -#: pg_rewind.c:93 +#: pg_rewind.c:99 #, c-format msgid " --no-ensure-shutdown do not automatically fix unclean shutdown\n" msgstr " --no-ensure-shutdown ne corrige pas automatiquement l'arrêt non propre\n" -#: pg_rewind.c:94 +#: pg_rewind.c:100 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version, puis quitte\n" -#: pg_rewind.c:95 +#: pg_rewind.c:101 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide, puis quitte\n" -#: pg_rewind.c:96 +#: pg_rewind.c:102 #, c-format msgid "" "\n" @@ -514,175 +552,200 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: pg_rewind.c:97 +#: pg_rewind.c:103 #, c-format msgid "%s home page: <%s>\n" msgstr "page d'accueil %s : <%s>\n" -#: pg_rewind.c:159 pg_rewind.c:208 pg_rewind.c:215 pg_rewind.c:222 -#: pg_rewind.c:229 pg_rewind.c:237 +#: pg_rewind.c:164 pg_rewind.c:213 pg_rewind.c:220 pg_rewind.c:227 +#: pg_rewind.c:234 pg_rewind.c:242 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayez « %s --help » pour plus d'informations.\n" -#: pg_rewind.c:207 +#: pg_rewind.c:212 #, c-format msgid "no source specified (--source-pgdata or --source-server)" msgstr "aucune source indiquée (--source-pgdata ou --source-server)" -#: pg_rewind.c:214 +#: pg_rewind.c:219 #, c-format msgid "only one of --source-pgdata or --source-server can be specified" msgstr "une seule des options --source-pgdata et --source-server peut être indiquée" -#: pg_rewind.c:221 +#: pg_rewind.c:226 #, c-format msgid "no target data directory specified (--target-pgdata)" msgstr "aucun répertoire de données cible indiqué (--target-pgdata)" -#: pg_rewind.c:228 +#: pg_rewind.c:233 #, c-format msgid "no source server information (--source-server) specified for --write-recovery-conf" msgstr "aucune information sur le serveur source (--source-server) indiquée pour --write-recovery-conf" -#: pg_rewind.c:235 +#: pg_rewind.c:240 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" -#: pg_rewind.c:250 +#: pg_rewind.c:255 #, c-format msgid "cannot be executed by \"root\"" msgstr "ne peut pas être exécuté par « root »" -#: pg_rewind.c:251 +#: pg_rewind.c:256 #, c-format msgid "You must run %s as the PostgreSQL superuser.\n" msgstr "Vous devez exécuter %s en tant que super-utilisateur PostgreSQL.\n" -#: pg_rewind.c:262 +#: pg_rewind.c:267 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "n'a pas pu lire les droits du répertoire « %s » : %m" -#: pg_rewind.c:316 +#: pg_rewind.c:287 +#, c-format +msgid "%s" +msgstr "%s" + +#: pg_rewind.c:290 +#, c-format +msgid "connected to server" +msgstr "connecté au serveur" + +#: pg_rewind.c:337 #, c-format msgid "source and target cluster are on the same timeline" msgstr "les instances source et cible sont sur la même ligne de temps" -#: pg_rewind.c:322 +#: pg_rewind.c:346 #, c-format msgid "servers diverged at WAL location %X/%X on timeline %u" msgstr "les serveurs ont divergé à la position %X/%X des WAL sur la timeline %u" -#: pg_rewind.c:360 +#: pg_rewind.c:394 #, c-format msgid "no rewind required" msgstr "pas de retour en arrière requis" -#: pg_rewind.c:369 +#: pg_rewind.c:403 #, c-format msgid "rewinding from last common checkpoint at %X/%X on timeline %u" msgstr "retour en arrière depuis le dernier checkpoint commun à %X/%X sur la ligne de temps %u" -#: pg_rewind.c:378 +#: pg_rewind.c:413 #, c-format msgid "reading source file list" msgstr "lecture de la liste des fichiers sources" -#: pg_rewind.c:381 +#: pg_rewind.c:417 #, c-format msgid "reading target file list" msgstr "lecture de la liste des fichiers cibles" -#: pg_rewind.c:392 +#: pg_rewind.c:426 #, c-format msgid "reading WAL in target" msgstr "lecture du WAL dans la cible" -#: pg_rewind.c:409 +#: pg_rewind.c:447 #, c-format msgid "need to copy %lu MB (total source directory size is %lu MB)" msgstr "a besoin de copier %lu Mo (la taille totale du répertoire source est %lu Mo)" -#: pg_rewind.c:428 -#, c-format -msgid "creating backup label and updating control file" -msgstr "création du fichier backup_label et mise à jour du fichier contrôle" - -#: pg_rewind.c:458 +#: pg_rewind.c:465 #, c-format msgid "syncing target data directory" msgstr "synchronisation du répertoire des données cible" -#: pg_rewind.c:465 +#: pg_rewind.c:481 #, c-format msgid "Done!" msgstr "Terminé !" -#: pg_rewind.c:477 +#: pg_rewind.c:564 +#, c-format +msgid "no action decided for \"%s\"" +msgstr "aucune action décidée pour « %s »" + +#: pg_rewind.c:596 +#, c-format +msgid "source system was modified while pg_rewind was running" +msgstr "le système source a été modifié alors que pg_rewind était en cours d'exécution" + +#: pg_rewind.c:600 +#, c-format +msgid "creating backup label and updating control file" +msgstr "création du fichier backup_label et mise à jour du fichier contrôle" + +#: pg_rewind.c:650 +#, c-format +msgid "source system was in unexpected state at end of rewind" +msgstr "le système source était dans un état inattendu en fin de rewind" + +#: pg_rewind.c:681 #, c-format msgid "source and target clusters are from different systems" msgstr "les instances source et cible proviennent de systèmes différents" -#: pg_rewind.c:485 +#: pg_rewind.c:689 #, c-format msgid "clusters are not compatible with this version of pg_rewind" msgstr "les instances ne sont pas compatibles avec cette version de pg_rewind" -#: pg_rewind.c:495 +#: pg_rewind.c:699 #, c-format msgid "target server needs to use either data checksums or \"wal_log_hints = on\"" msgstr "le serveur cible doit soit utiliser les sommes de contrôle sur les données soit avoir wal_log_hints configuré à on" -#: pg_rewind.c:506 +#: pg_rewind.c:710 #, c-format msgid "target server must be shut down cleanly" msgstr "le serveur cible doit être arrêté proprement" -#: pg_rewind.c:516 +#: pg_rewind.c:720 #, c-format msgid "source data directory must be shut down cleanly" msgstr "le répertoire de données source doit être arrêté proprement" -#: pg_rewind.c:565 +#: pg_rewind.c:772 #, c-format msgid "%*s/%s kB (%d%%) copied" msgstr "%*s/%s Ko (%d%%) copiés" -#: pg_rewind.c:626 +#: pg_rewind.c:835 #, c-format msgid "invalid control file" msgstr "fichier de contrôle invalide" -#: pg_rewind.c:710 +#: pg_rewind.c:919 #, c-format msgid "could not find common ancestor of the source and target cluster's timelines" msgstr "n'a pas pu trouver l'ancêtre commun des lignes de temps des instances source et cible" -#: pg_rewind.c:751 +#: pg_rewind.c:960 #, c-format msgid "backup label buffer too small" msgstr "tampon du label de sauvegarde trop petit" -#: pg_rewind.c:774 +#: pg_rewind.c:983 #, c-format msgid "unexpected control file CRC" msgstr "CRC inattendu pour le fichier de contrôle" -#: pg_rewind.c:784 +#: pg_rewind.c:995 #, c-format msgid "unexpected control file size %d, expected %d" msgstr "taille %d inattendue du fichier de contrôle, %d attendu" -#: pg_rewind.c:793 +#: pg_rewind.c:1004 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octet" msgstr[1] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octets" -#: pg_rewind.c:850 pg_rewind.c:908 +#: pg_rewind.c:1043 pg_rewind.c:1101 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -693,7 +756,7 @@ msgstr "" "dans le même répertoire que « %s ».\n" "Vérifiez votre installation." -#: pg_rewind.c:855 pg_rewind.c:913 +#: pg_rewind.c:1048 pg_rewind.c:1106 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -704,22 +767,22 @@ msgstr "" "mais n'est pas de la même version que %s.\n" "Vérifiez votre installation." -#: pg_rewind.c:876 +#: pg_rewind.c:1069 #, c-format msgid "restore_command is not set in the target cluster" msgstr "restore_command n'est pas configuré sur l'instance cible" -#: pg_rewind.c:919 +#: pg_rewind.c:1112 #, c-format msgid "executing \"%s\" for target server to complete crash recovery" msgstr "exécution de « %s » pour terminer la restauration après crash du serveur cible" -#: pg_rewind.c:939 +#: pg_rewind.c:1132 #, c-format msgid "postgres single-user mode in target cluster failed" msgstr "le mot simple-utilisateur de postgres a échoué pour l'instance cible" -#: pg_rewind.c:940 +#: pg_rewind.c:1133 #, c-format msgid "Command was: %s" msgstr "La commande était : %s" @@ -761,143 +824,170 @@ msgstr "" "Les identifiants timeline doivent être plus petits que les enfants des\n" "identifiants timeline." -#: xlogreader.c:347 +#: xlogreader.c:747 #, c-format msgid "invalid record offset at %X/%X" msgstr "décalage invalide de l'enregistrement %X/%X" -#: xlogreader.c:355 +#: xlogreader.c:756 #, c-format msgid "contrecord is requested by %X/%X" msgstr "« contrecord » est requis par %X/%X" -#: xlogreader.c:396 xlogreader.c:693 +#: xlogreader.c:819 xlogreader.c:1282 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "longueur invalide de l'enregistrement à %X/%X : voulait %u, a eu %u" -#: xlogreader.c:420 +#: xlogreader.c:910 #, c-format msgid "record length %u at %X/%X too long" msgstr "longueur trop importante de l'enregistrement %u à %X/%X" -#: xlogreader.c:452 +#: xlogreader.c:970 #, c-format -msgid "there is no contrecord flag at %X/%X" -msgstr "il n'existe pas de drapeau contrecord à %X/%X" +msgid "there is no contrecord flag at %X/%X reading %X/%X" +msgstr "il n'existe pas de drapeau contrecord à %X/%X en lisant %X/%X" -#: xlogreader.c:465 +#: xlogreader.c:987 #, c-format -msgid "invalid contrecord length %u at %X/%X" -msgstr "longueur %u invalide du contrecord à %X/%X" +msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" +msgstr "longueur %u invalide du contrecord à %X/%X en lisant %X/%X, attendait %u" -#: xlogreader.c:701 +#: xlogreader.c:1290 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "identifiant du gestionnaire de ressources invalide %u à %X/%X" -#: xlogreader.c:715 xlogreader.c:732 +#: xlogreader.c:1303 xlogreader.c:1319 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "enregistrement avec prev-link %X/%X incorrect à %X/%X" -#: xlogreader.c:769 +#: xlogreader.c:1355 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "" "somme de contrôle des données du gestionnaire de ressources incorrecte à\n" "l'enregistrement %X/%X" -#: xlogreader.c:806 +#: xlogreader.c:1392 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "numéro magique invalide %04X dans le segment %s, décalage %u" -#: xlogreader.c:820 xlogreader.c:861 +#: xlogreader.c:1406 xlogreader.c:1447 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "bits d'information %04X invalides dans le segment %s, décalage %u" -#: xlogreader.c:835 +#: xlogreader.c:1421 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "le fichier WAL provient d'un système différent : l'identifiant système de la base dans le fichier WAL est %llu, alors que l'identifiant système de la base dans pg_control est %llu" -#: xlogreader.c:843 +#: xlogreader.c:1429 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "Le fichier WAL provient d'un système différent : taille invalide du segment dans l'en-tête de page" -#: xlogreader.c:849 +#: xlogreader.c:1435 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "Le fichier WAL provient d'un système différent : XLOG_BLCKSZ invalide dans l'en-tête de page" -#: xlogreader.c:880 +#: xlogreader.c:1466 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "pageaddr %X/%X inattendue dans le journal de transactions %s, segment %u" -#: xlogreader.c:905 +#: xlogreader.c:1491 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "identifiant timeline %u hors de la séquence (après %u) dans le segment %s, décalage %u" -#: xlogreader.c:1246 +#: xlogreader.c:1913 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u désordonné à %X/%X" -#: xlogreader.c:1269 +#: xlogreader.c:1937 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA configuré, mais aucune donnée inclus à %X/%X" -#: xlogreader.c:1276 +#: xlogreader.c:1944 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA non configuré, mais la longueur des données est %u à %X/%X" -#: xlogreader.c:1312 +#: xlogreader.c:1980 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE activé, mais décalage trou %u longueur %u longueur image bloc %u à %X/%X" -#: xlogreader.c:1328 +#: xlogreader.c:1996 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE désactivé, mais décalage trou %u longueur %u à %X/%X" -#: xlogreader.c:1343 +#: xlogreader.c:2011 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X" -#: xlogreader.c:1358 +#: xlogreader.c:2026 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X" -#: xlogreader.c:1374 +#: xlogreader.c:2042 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL configuré, mais pas de relation précédente à %X/%X" -#: xlogreader.c:1386 +#: xlogreader.c:2054 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "block_id %u invalide à %X/%X" -#: xlogreader.c:1475 +#: xlogreader.c:2121 #, c-format msgid "record with invalid length at %X/%X" msgstr "enregistrement de longueur invalide à %X/%X" -#: xlogreader.c:1564 +#: xlogreader.c:2224 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "image compressée invalide à %X/%X, bloc %d" +#~ msgid "\"%s\" is not a directory" +#~ msgstr "« %s » n'est pas un répertoire" + +#~ msgid "\"%s\" is not a symbolic link" +#~ msgstr "« %s » n'est pas un lien symbolique" + +#~ msgid "\"%s\" is not a regular file" +#~ msgstr "« %s » n'est pas un fichier standard" + +#~ msgid "source file list is empty" +#~ msgstr "la liste de fichiers sources est vide" + +#~ msgid "source server must not be in recovery mode" +#~ msgstr "le serveur source ne doit pas être en mode restauration" + +#~ msgid "could not send COPY data: %s" +#~ msgstr "n'a pas pu envoyer les données COPY : %s" + +#~ msgid "could not send file list: %s" +#~ msgstr "n'a pas pu envoyer la liste de fichiers : %s" + +#~ msgid "could not send end-of-COPY: %s" +#~ msgstr "n'a pas pu envoyer end-of-COPY : %s" + +#~ msgid "unexpected result while sending file list: %s" +#~ msgstr "résultat inattendu lors de l'envoi de la liste de fichiers : %s" + #~ msgid "%s: WARNING: cannot create restricted tokens on this platform\n" #~ msgstr "%s : ATTENTION : ne peut pas créer les jetons restreints sur cette plateforme\n" @@ -985,9 +1075,6 @@ msgstr "image compressée invalide à %X/%X, bloc %d" #~ msgid "received null value for chunk for file \"%s\", file has been deleted\n" #~ msgstr "a reçu une valeur NULL pour une partie du fichier « %s », le fichier a été supprimé\n" -#~ msgid "received chunk for file \"%s\", offset %s, size %d\n" -#~ msgstr "a reçu une partie du fichier « %s », décalage %s, taille %d\n" - #~ msgid "fetched file \"%s\", length %d\n" #~ msgstr "fichier récupéré « %s », longueur %d\n" @@ -1110,3 +1197,9 @@ msgstr "image compressée invalide à %X/%X, bloc %d" #~ "Le programme « postgres » est nécessaire à %s mais n'a pas été trouvé dans\n" #~ "le même répertoire que « %s ».\n" #~ "Vérifiez votre installation." + +#~ msgid "could not connect to server: %s" +#~ msgstr "n'a pas pu se connecter au serveur : %s" + +#~ msgid "received data at offset " +#~ msgstr "a reçu des données au décalage " diff --git a/src/bin/pg_rewind/po/ja.po b/src/bin/pg_rewind/po/ja.po index 9f67e3584df1d..bfaea375ec539 100644 --- a/src/bin/pg_rewind/po/ja.po +++ b/src/bin/pg_rewind/po/ja.po @@ -4,90 +4,143 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_rewind (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: pg_rewind (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-11-05 01:45+0000\n" -"PO-Revision-Date: 2019-06-11 20:11+0900\n" +"POT-Creation-Date: 2020-08-21 15:55+0900\n" +"PO-Revision-Date: 2020-08-21 23:25+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" "Plural-Forms: nplurals=2; plural=n!=1;\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:241 #, c-format msgid "fatal: " msgstr "致命的エラー: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:248 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:255 #, c-format msgid "warning: " msgstr "警告: " #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "メモリ不足です\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "null ポインタを複製できません(内部エラー)\n" -#: ../../common/restricted_token.c:69 +#: ../../common/restricted_token.c:64 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "このプラットフォームでは制限付きトークンを作成できません" +msgid "could not load library \"%s\": error code %lu" +msgstr "ライブラリ\"%s\"をロードできませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:78 +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "このプラットフォームでは制限付きトークンを生成できません: エラーコード %lu" + +#: ../../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "プロセストークンをオープンできませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:91 +#: ../../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "SIDを割り当てられませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:110 +#: ../../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "制限付きトークンを作成できませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:131 +#: ../../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "\"%s\"コマンドのプロセスを起動できませんでした: エラーコード %lu" -#: ../../common/restricted_token.c:169 +#: ../../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "制限付きトークンで再実行できませんでした: %lu" -#: ../../common/restricted_token.c:185 +#: ../../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "サブプロセスの終了コードを取得できませんでした。: エラーコード %lu" -#: copy_fetch.c:59 +#: ../../fe_utils/archive.c:53 #, c-format -msgid "could not open directory \"%s\": %m" -msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" +msgid "could not use restore_command with %%r alias" +msgstr "%%rエイリアスを含むrestore_commandは使用できません" + +#: ../../fe_utils/archive.c:74 +#, c-format +msgid "unexpected file size for \"%s\": %lu instead of %lu" +msgstr "予期しない\"%1$s\"のサイズ: %3$lu ではなく %2$lu" + +#: ../../fe_utils/archive.c:85 +#, c-format +msgid "could not open file \"%s\" restored from archive: %m" +msgstr "アーカイブからリストアされたファイル\"%s\"のオープンに失敗しました: %m" -#: copy_fetch.c:88 filemap.c:187 filemap.c:348 +#: ../../fe_utils/archive.c:97 copy_fetch.c:88 filemap.c:208 filemap.c:369 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ファイル\"%s\"のstatに失敗しました: %m" +#: ../../fe_utils/archive.c:112 +#, c-format +msgid "restore_command failed due to the signal: %s" +msgstr "restore_commandがシグナルにより失敗しました: %s" + +#: ../../fe_utils/archive.c:121 +#, c-format +msgid "could not restore file \"%s\" from archive" +msgstr "ファイル\"%s\"をアーカイブからリストアできませんでした" + +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:74 parsexlog.c:126 +#: parsexlog.c:186 +#, c-format +msgid "out of memory" +msgstr "メモリ不足です" + +#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:299 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "ファイル\"%s\"をオープンできませんでした: %m" + +#: ../../fe_utils/recovery_gen.c:140 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "ファイル\"%s\"を書き出せませんでした: %m" + +#: ../../fe_utils/recovery_gen.c:152 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "ファイル\"%s\"を作成できませんでした: %m" + +#: copy_fetch.c:59 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" + #: copy_fetch.c:117 #, c-format msgid "could not read symbolic link \"%s\": %m" @@ -123,7 +176,7 @@ msgstr "ソースファイル\"%s\"をオープンすることができません msgid "could not seek in source file: %m" msgstr "ソースファイルをシークすることができませんでした: %m" -#: copy_fetch.c:187 file_ops.c:311 parsexlog.c:314 +#: copy_fetch.c:187 file_ops.c:311 parsexlog.c:337 #, c-format msgid "could not read file \"%s\": %m" msgstr "ファイル\"%s\"の読み取りに失敗しました: %m" @@ -203,202 +256,197 @@ msgstr "シンボリックリンク\"%s\"を削除できませんでした: %m" msgid "could not open file \"%s\" for reading: %m" msgstr "ファイル\"%s\"を読み取り用にオープンできませんでした: %m" -#: file_ops.c:314 parsexlog.c:316 +#: file_ops.c:314 parsexlog.c:339 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込みました" -#: filemap.c:179 +#: filemap.c:200 #, c-format msgid "data file \"%s\" in source is not a regular file" msgstr "ソースのデータファイル\"%s\"は通常のファイルではありません" -#: filemap.c:201 +#: filemap.c:222 #, c-format msgid "\"%s\" is not a directory" msgstr "\"%s\"はディレクトリではありません" -#: filemap.c:224 +#: filemap.c:245 #, c-format msgid "\"%s\" is not a symbolic link" msgstr "\"%s\"はシンボリックリンクではありません" -#: filemap.c:236 +#: filemap.c:257 #, c-format msgid "\"%s\" is not a regular file" msgstr "\"%s\" は通常のファイルではありません" -#: filemap.c:360 +#: filemap.c:381 #, c-format msgid "source file list is empty" msgstr "ソースファイルリストが空です" -#: filemap.c:475 +#: filemap.c:496 #, c-format msgid "unexpected page modification for directory or symbolic link \"%s\"" msgstr "ディレクトリまたはシンボリックリンク\"%s\"に対する想定外のページの書き換えです" -#: libpq_fetch.c:52 +#: libpq_fetch.c:50 #, c-format msgid "could not connect to server: %s" msgstr "サーバに接続できませんでした: %s" -#: libpq_fetch.c:56 +#: libpq_fetch.c:54 #, c-format msgid "connected to server" msgstr "サーバへ接続しました" -#: libpq_fetch.c:65 +#: libpq_fetch.c:63 #, c-format msgid "could not clear search_path: %s" msgstr "search_pathを消去できませんでした: %s" -#: libpq_fetch.c:77 +#: libpq_fetch.c:75 #, c-format msgid "source server must not be in recovery mode" msgstr "ソースサーバはリカバリモードであってはなりません" -#: libpq_fetch.c:87 +#: libpq_fetch.c:85 #, c-format msgid "full_page_writes must be enabled in the source server" msgstr "ソースサーバではfull_pate_writesは有効でなければなりません" -#: libpq_fetch.c:113 libpq_fetch.c:139 +#: libpq_fetch.c:111 #, c-format -msgid "error running query (%s) in source server: %s" -msgstr "ソースサーバの実行中のクエリ(%s)でエラー: %s" +msgid "error running query (%s) on source server: %s" +msgstr "ソースサーバで実行中のクエリ(%s)でエラー: %s" -#: libpq_fetch.c:118 +#: libpq_fetch.c:116 #, c-format msgid "unexpected result set from query" msgstr "クエリから想定外の結果セット" -#: libpq_fetch.c:159 +#: libpq_fetch.c:137 +#, c-format +msgid "error running query (%s) in source server: %s" +msgstr "ソースサーバの実行中のクエリ(%s)でエラー: %s" + +#: libpq_fetch.c:157 #, c-format msgid "unrecognized result \"%s\" for current WAL insert location" msgstr "現在のWAL挿入位置として認識不可の結果\"%s\"" -#: libpq_fetch.c:209 +#: libpq_fetch.c:207 #, c-format msgid "could not fetch file list: %s" msgstr "ファイルリストをフェッチできませんでした: %s" -#: libpq_fetch.c:214 +#: libpq_fetch.c:212 #, c-format msgid "unexpected result set while fetching file list" msgstr "ファイルリストのフェッチ中に想定外の結果セット" -#: libpq_fetch.c:262 +#: libpq_fetch.c:265 #, c-format msgid "could not send query: %s" msgstr "クエリを送信できませんでした: %s" -#: libpq_fetch.c:267 +#: libpq_fetch.c:270 #, c-format msgid "could not set libpq connection to single row mode" msgstr "libpq接続を単一行モードに設定できませんでした" -#: libpq_fetch.c:288 +#: libpq_fetch.c:290 #, c-format msgid "unexpected result while fetching remote files: %s" msgstr "リモートファイルをフェッチ中に想定外の結果: %s" -#: libpq_fetch.c:294 +#: libpq_fetch.c:296 #, c-format msgid "unexpected result set size while fetching remote files" msgstr "リモートファイルのフェッチ中に想定外の結果セットサイズ" -#: libpq_fetch.c:300 +#: libpq_fetch.c:302 #, c-format msgid "unexpected data types in result set while fetching remote files: %u %u %u" msgstr "リモートファイルのフェッチ中の結果セットに想定外のデータ型: %u %u %u" -#: libpq_fetch.c:308 +#: libpq_fetch.c:310 #, c-format msgid "unexpected result format while fetching remote files" msgstr "リモートファイルのフェッチ中に想定外の結果形式" -#: libpq_fetch.c:314 +#: libpq_fetch.c:316 #, c-format msgid "unexpected null values in result while fetching remote files" msgstr "リモートファイルのフェッチ中の結果に想定外のNULL値" -#: libpq_fetch.c:318 +#: libpq_fetch.c:320 #, c-format msgid "unexpected result length while fetching remote files" msgstr "リモートファイルのフェッチ中に想定外の結果の長さ" -#: libpq_fetch.c:384 +#: libpq_fetch.c:381 #, c-format msgid "could not fetch remote file \"%s\": %s" msgstr "リモートファイル\"%s\"をフェッチできませんでした: %s" -#: libpq_fetch.c:389 +#: libpq_fetch.c:386 #, c-format msgid "unexpected result set while fetching remote file \"%s\"" msgstr "リモートファイル\"%s\"のフェッチ中に想定外の結果セット" -#: libpq_fetch.c:433 +#: libpq_fetch.c:430 #, c-format msgid "could not send COPY data: %s" msgstr "COPY 対象データを送信できませんでした: %s" -#: libpq_fetch.c:462 +#: libpq_fetch.c:459 #, c-format msgid "could not send file list: %s" msgstr "ファイルリストを送信できませんでした: %s" -#: libpq_fetch.c:504 +#: libpq_fetch.c:501 #, c-format msgid "could not send end-of-COPY: %s" msgstr "コピー終端を送信できませんでした: %s" -#: libpq_fetch.c:510 +#: libpq_fetch.c:507 #, c-format msgid "unexpected result while sending file list: %s" msgstr "ファイルリストを送信中に想定外の結果: %s" -#: parsexlog.c:74 parsexlog.c:127 parsexlog.c:185 -#, c-format -msgid "out of memory" -msgstr "メモリ不足です" - -#: parsexlog.c:87 parsexlog.c:133 +#: parsexlog.c:86 parsexlog.c:133 #, c-format msgid "could not read WAL record at %X/%X: %s" msgstr "%X/%XのWALレコードを読み取れませんでした: %s" -#: parsexlog.c:91 parsexlog.c:136 +#: parsexlog.c:90 parsexlog.c:136 #, c-format msgid "could not read WAL record at %X/%X" msgstr "%X/%XのWALレコードを読み取れませんでした" -#: parsexlog.c:197 +#: parsexlog.c:199 #, c-format msgid "could not find previous WAL record at %X/%X: %s" msgstr "%X/%Xの前のWALレコードが見つかりませんでした: %s" -#: parsexlog.c:201 +#: parsexlog.c:203 #, c-format msgid "could not find previous WAL record at %X/%X" msgstr "%X/%Xの前のWALレコードが見つかりませんでした" -#: parsexlog.c:292 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "ファイル\"%s\"をオープンできませんでした: %m" - -#: parsexlog.c:305 +#: parsexlog.c:328 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "ファイル\"%s\"をシークできませんでした: %m" -#: parsexlog.c:385 +#: parsexlog.c:420 #, c-format msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmgr: %s, info: %02X" msgstr "WALレコードはリレーションを修正しますが、レコードの型を認識できません: lsn: %X/%X、rmgr: %s、info: %02X" -#: pg_rewind.c:72 +#: pg_rewind.c:78 #, c-format msgid "" "%s resynchronizes a PostgreSQL cluster with another copy of the cluster.\n" @@ -407,7 +455,7 @@ msgstr "" "%s はPostgreSQLクラスタをそのクラスタのコピーで再同期します。\n" "\n" -#: pg_rewind.c:73 +#: pg_rewind.c:79 #, c-format msgid "" "Usage:\n" @@ -418,518 +466,605 @@ msgstr "" " %s [オプション]...\n" "\n" -#: pg_rewind.c:74 +#: pg_rewind.c:80 #, c-format msgid "Options:\n" msgstr "オプション:\n" -#: pg_rewind.c:75 +#: pg_rewind.c:81 +#, c-format +msgid "" +" -c, --restore-target-wal use restore_command in target configuration to\n" +" retrieve WAL files from archives\n" +msgstr "" +" -c, --restore-target-wal ターゲットの設定の中のrestore_commandを使用して\n" +" アーカイブからWALファイルを取得する\n" + +#: pg_rewind.c:83 #, c-format msgid " -D, --target-pgdata=DIRECTORY existing data directory to modify\n" msgstr " -D, --target-pgdata=DIRECTORY 修正を行う既存データディレクトリ\n" -#: pg_rewind.c:76 +#: pg_rewind.c:84 #, c-format msgid " --source-pgdata=DIRECTORY source data directory to synchronize with\n" msgstr " --source-pgdata=DIRECTORY 同期元とするデータディレクトリ\n" -#: pg_rewind.c:77 +#: pg_rewind.c:85 #, c-format msgid " --source-server=CONNSTR source server to synchronize with\n" msgstr " --source-server=CONNSTR 同期元とするサーバ\n" -#: pg_rewind.c:78 +#: pg_rewind.c:86 #, c-format msgid " -n, --dry-run stop before modifying anything\n" msgstr " -n, --dry-run 修正を始める前に停止する\n" -#: pg_rewind.c:79 +#: pg_rewind.c:87 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written\n" " safely to disk\n" msgstr " -N, --no-sync 変更のディスクへの安全な書き出しを待機しない\n" -#: pg_rewind.c:81 +#: pg_rewind.c:89 #, c-format msgid " -P, --progress write progress messages\n" msgstr " -P, --progress 進捗メッセージを出力\n" -#: pg_rewind.c:82 +#: pg_rewind.c:90 +#, c-format +msgid "" +" -R, --write-recovery-conf write configuration for replication\n" +" (requires --source-server)\n" +msgstr "" +" -R, --write-recovery-conf レプリケーションのための設定を書き込む\n" +" (--source-server が必要となります)\n" + +#: pg_rewind.c:92 #, c-format msgid " --debug write a lot of debug messages\n" msgstr " --debug 多量のデバッグメッセージを出力\n" -#: pg_rewind.c:83 +#: pg_rewind.c:93 +#, c-format +msgid " --no-ensure-shutdown do not automatically fix unclean shutdown\n" +msgstr " --no-ensure-shutdown 非クリーンシャットダウン後の修正を自動で行わない\n" + +#: pg_rewind.c:94 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_rewind.c:84 +#: pg_rewind.c:95 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_rewind.c:85 +#: pg_rewind.c:96 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"不具合はまで報告してください。\n" +"バグは<%s>に報告してください。\n" + +#: pg_rewind.c:97 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" -#: pg_rewind.c:142 pg_rewind.c:178 pg_rewind.c:185 pg_rewind.c:192 -#: pg_rewind.c:200 +#: pg_rewind.c:159 pg_rewind.c:208 pg_rewind.c:215 pg_rewind.c:222 +#: pg_rewind.c:229 pg_rewind.c:237 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細は\"%s --help\"を実行してください。\n" -#: pg_rewind.c:177 +#: pg_rewind.c:207 #, c-format msgid "no source specified (--source-pgdata or --source-server)" msgstr "ソースが指定されていません(--source-pgdata または --source-server)" -#: pg_rewind.c:184 +#: pg_rewind.c:214 #, c-format msgid "only one of --source-pgdata or --source-server can be specified" msgstr "--source-pgdataか--source-server はいずれか一方のみ指定可能です" -#: pg_rewind.c:191 +#: pg_rewind.c:221 #, c-format msgid "no target data directory specified (--target-pgdata)" msgstr "ターゲットデータディレクトリが指定されていません(--target-pgdata)" -#: pg_rewind.c:198 +#: pg_rewind.c:228 +#, c-format +msgid "no source server information (--source-server) specified for --write-recovery-conf" +msgstr "--write-recovery-confにソースサーバ情報(--source-server)が指定されていません" + +#: pg_rewind.c:235 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr " コマンドライン引数が多すぎます(先頭は\"%s\")" -#: pg_rewind.c:213 +#: pg_rewind.c:250 #, c-format msgid "cannot be executed by \"root\"" msgstr "\"root\"では実行できません" -#: pg_rewind.c:214 +#: pg_rewind.c:251 #, c-format msgid "You must run %s as the PostgreSQL superuser.\n" msgstr "PostgreSQLのスーパユーザで%sを実行しなければなりません\n" -#: pg_rewind.c:225 +#: pg_rewind.c:262 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "ディレクトリ\"%s\"の権限を読み取れませんでした: %m" -#: pg_rewind.c:256 +#: pg_rewind.c:316 #, c-format msgid "source and target cluster are on the same timeline" msgstr "ソースとターゲットのクラスタが同一タイムライン上にあります" -#: pg_rewind.c:262 +#: pg_rewind.c:322 #, c-format msgid "servers diverged at WAL location %X/%X on timeline %u" msgstr "タイムライン%3$uのWAL位置%1$X/%2$Xで両サーバが分岐しています" -#: pg_rewind.c:299 +#: pg_rewind.c:360 #, c-format msgid "no rewind required" msgstr "巻き戻しは必要ありません" -#: pg_rewind.c:306 +#: pg_rewind.c:369 #, c-format msgid "rewinding from last common checkpoint at %X/%X on timeline %u" msgstr "タイムライン%3$uの%1$X/%2$Xにある最新の共通チェックポイントから巻き戻しています" -#: pg_rewind.c:315 +#: pg_rewind.c:378 #, c-format msgid "reading source file list" msgstr "ソースファイルリストを読み込んでいます" -#: pg_rewind.c:318 +#: pg_rewind.c:381 #, c-format msgid "reading target file list" msgstr "ターゲットファイルリストを読み込んでいます" -#: pg_rewind.c:329 +#: pg_rewind.c:392 #, c-format msgid "reading WAL in target" msgstr "ターゲットでWALを読み込んでいます" -#: pg_rewind.c:346 +#: pg_rewind.c:409 #, c-format msgid "need to copy %lu MB (total source directory size is %lu MB)" msgstr "%lu MBコピーする必要があります(ソースディレクトリの合計サイズは%lu MBです)" -#: pg_rewind.c:365 +#: pg_rewind.c:427 #, c-format msgid "creating backup label and updating control file" msgstr "backup labelを作成して制御ファイルを更新しています" -#: pg_rewind.c:395 +#: pg_rewind.c:457 #, c-format msgid "syncing target data directory" msgstr "ターゲットデータディレクトリを同期しています" -#: pg_rewind.c:398 +#: pg_rewind.c:464 #, c-format msgid "Done!" msgstr "完了!" -#: pg_rewind.c:410 +#: pg_rewind.c:476 #, c-format msgid "source and target clusters are from different systems" msgstr "ソースクラスタとターゲットクラスタは異なるシステムのものです" -#: pg_rewind.c:418 +#: pg_rewind.c:484 #, c-format msgid "clusters are not compatible with this version of pg_rewind" msgstr "クラスタは、このバージョンのpg_rewindとの互換性がありません" -#: pg_rewind.c:428 +#: pg_rewind.c:494 #, c-format msgid "target server needs to use either data checksums or \"wal_log_hints = on\"" msgstr "ターゲットサーバはデータチェックサムを利用している、または\"wal_log_hints = on\"である必要があります" -#: pg_rewind.c:439 +#: pg_rewind.c:505 #, c-format msgid "target server must be shut down cleanly" msgstr "ターゲットサーバはきれいにシャットダウンされていなければなりません" -#: pg_rewind.c:449 +#: pg_rewind.c:515 #, c-format msgid "source data directory must be shut down cleanly" msgstr "ソースデータディレクトリはきれいにシャットダウンされていなければなりません" -#: pg_rewind.c:498 +#: pg_rewind.c:567 #, c-format msgid "%*s/%s kB (%d%%) copied" msgstr "%*s/%s kB (%d%%) コピーしました" -#: pg_rewind.c:559 -#, fuzzy, c-format -#| msgid "invalid control file\n" +#: pg_rewind.c:630 +#, c-format msgid "invalid control file" -msgstr "不正な制御ファイル\n" +msgstr "不正な制御ファイル" -#: pg_rewind.c:643 +#: pg_rewind.c:714 #, c-format msgid "could not find common ancestor of the source and target cluster's timelines" msgstr "ソースクラスタとターゲットクラスタのタイムラインの共通の祖先を見つけられません" -#: pg_rewind.c:684 +#: pg_rewind.c:755 #, c-format msgid "backup label buffer too small" msgstr "バックアップラベルのバッファが小さすぎます" -#: pg_rewind.c:707 +#: pg_rewind.c:778 #, c-format msgid "unexpected control file CRC" msgstr "想定外の制御ファイルCRCです" -#: pg_rewind.c:717 +#: pg_rewind.c:788 #, c-format msgid "unexpected control file size %d, expected %d" msgstr "想定外の制御ファイルのサイズ%d、想定は%d" -#: pg_rewind.c:726 +#: pg_rewind.c:797 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "WALセグメントのサイズ指定は1MBと1GBの間の2の累乗でなければなりません、しかしコントロールファイルでは%dバイトとなっています" msgstr[1] "WALセグメントのサイズ指定は1MBと1GBの間の2の累乗でなければなりません、しかしコントロールファイルでは%dバイトとなっています" -#: timeline.c:76 timeline.c:82 +#: pg_rewind.c:854 pg_rewind.c:912 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "" +"%2$sには\"%1$s\"プログラムが必要ですが、\"%3$s\"と同じディレクトリ\n" +"にありませんでした。\n" +"インストール状況を確認してください。" + +#: pg_rewind.c:859 pg_rewind.c:917 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "" +"\"%2$s\"がプログラム\"%1$s\"を見つけましたが、これは%3$sと同じ\n" +"バージョンではありませんでした。\n" +"インストール状況を確認してください。" + +#: pg_rewind.c:880 +#, c-format +msgid "restore_command is not set in the target cluster" +msgstr "ターゲットクラスタでrestore_commandが設定されていません" + +#: pg_rewind.c:923 +#, c-format +msgid "executing \"%s\" for target server to complete crash recovery" +msgstr "ターゲットサーバに対して\"%s\"を実行してクラッシュリカバリを完了させます" + +#: pg_rewind.c:943 +#, c-format +msgid "postgres single-user mode in target cluster failed" +msgstr "ターゲットクラスタでのpostgresコマンドのシングルユーザモード実行に失敗しました" + +#: pg_rewind.c:944 +#, c-format +msgid "Command was: %s" +msgstr "コマンド: %s" + +#: timeline.c:75 timeline.c:81 #, c-format msgid "syntax error in history file: %s" msgstr "履歴ファイル内の構文エラー: %s" -#: timeline.c:77 +#: timeline.c:76 #, c-format msgid "Expected a numeric timeline ID." msgstr "数字のタイムラインIDを想定しました。" -#: timeline.c:83 +#: timeline.c:82 #, c-format msgid "Expected a write-ahead log switchpoint location." msgstr "先行書き込みログの切り替え点の場所があるはずでした。" -#: timeline.c:88 +#: timeline.c:87 #, c-format msgid "invalid data in history file: %s" msgstr "履歴ファイル内の不正なデータ: %s" -#: timeline.c:89 +#: timeline.c:88 #, c-format msgid "Timeline IDs must be in increasing sequence." msgstr "タイムラインIDは昇順でなければなりません" -#: timeline.c:109 +#: timeline.c:108 #, c-format msgid "invalid data in history file" msgstr "履歴ファイル内の無効なデータ" -#: timeline.c:110 +#: timeline.c:109 #, c-format msgid "Timeline IDs must be less than child timeline's ID." msgstr "タイムラインIDは子のタイムラインIDより小さくなければなりません。" -#: xlogreader.c:299 +#: xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "%X/%Xのレコードオフセットが無効です" -#: xlogreader.c:307 +#: xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "%X/%Xではcontrecordが必要です" -#: xlogreader.c:348 xlogreader.c:645 +#: xlogreader.c:398 xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "%X/%Xのレコード長が無効です:長さは%uである必要がありますが、長さは%uでした" -#: xlogreader.c:372 +#: xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "%2$X/%3$Xのレコード長%1$uが大きすぎます" -#: xlogreader.c:404 +#: xlogreader.c:454 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "%X/%Xで contrecord フラグがありません" -#: xlogreader.c:417 +#: xlogreader.c:467 #, c-format msgid "invalid contrecord length %u at %X/%X" msgstr "%2$X/%3$Xのcontrecordの長さ %1$u が無効です" -#: xlogreader.c:653 +#: xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "%2$X/%3$XのリソースマネージャID %1$uが無効です" -#: xlogreader.c:667 xlogreader.c:684 +#: xlogreader.c:717 xlogreader.c:734 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "直前のリンク%1$X/%2$Xが不正なレコードが%3$X/%4$Xにあります" -#: xlogreader.c:721 +#: xlogreader.c:771 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "%X/%Xのレコード内のリソースマネージャデータのチェックサムが不正です" -#: xlogreader.c:758 +#: xlogreader.c:808 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "ログセグメント%2$s、オフセット%3$uのマジックナンバー%1$04Xは無効です" -#: xlogreader.c:772 xlogreader.c:823 +#: xlogreader.c:822 xlogreader.c:863 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "ログセグメント %2$s、オフセット %3$u の情報ビット %1$04X は無効です" -#: xlogreader.c:798 +#: xlogreader.c:837 #, c-format -msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" -msgstr "WAL ファイルは異なるデータベースシステム由来ものです: WAL ファイルにおけるデータベースシステムの識別子は %s で、pg_control におけるデータベースシステムの識別子は %s です。" +msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" +msgstr "WALファイルは異なるデータベースシステム由来のものです: WALファイルのデータベースシステム識別子は %lluで、pg_control におけるデータベースシステム識別子は %lluです" -#: xlogreader.c:805 +#: xlogreader.c:845 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL ファイルは異なるデータベースシステム由来のものです: ページヘッダーのセグメントサイズが正しくありません" -#: xlogreader.c:811 +#: xlogreader.c:851 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL ファイルは異なるデータベースシステム由来のものです: ページヘッダーのXLOG_BLCKSZが正しくありません" -#: xlogreader.c:842 +#: xlogreader.c:882 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "ログセグメント%3$s、オフセット%4$uのページアドレス%1$X/%2$Xは想定外です" -#: xlogreader.c:867 +#: xlogreader.c:907 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "ログセグメント%3$s、オフセット%4$uの時系列ID %1$u(%2$uの後)は順序に従っていません" -#: xlogreader.c:1112 +#: xlogreader.c:1252 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %uが%X/%Xで無効です" -#: xlogreader.c:1135 +#: xlogreader.c:1275 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATAが設定されていますが、%X/%Xにデータがありません" -#: xlogreader.c:1142 +#: xlogreader.c:1282 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATAが設定されていませんが、%2$X/%3$Xのデータ長は%1$u" -#: xlogreader.c:1178 +#: xlogreader.c:1318 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLEが設定されていますが、%4$X/%5$Xでホールオフセット%1$u、長さ%2$u、ブロックイメージ長%3$u" -#: xlogreader.c:1194 +#: xlogreader.c:1334 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLEが設定されていませんが、%3$X/%4$Xにホールオフセット%1$u、長さ%2$u" -#: xlogreader.c:1209 +#: xlogreader.c:1349 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSEDが設定されていますが、%2$X/%3$Xにおいてブロックイメージ長が%1$u" -#: xlogreader.c:1224 +#: xlogreader.c:1364 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLEもBKPIMAGE_IS_COMPRESSEDも設定されていませんが、%2$X/%3$Xにおいてブロックイメージ長が%1$u" -#: xlogreader.c:1240 +#: xlogreader.c:1380 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_RELが設定されていますが、%X/%Xにおいて以前のリレーションがありません" -#: xlogreader.c:1252 +#: xlogreader.c:1392 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "%2$X/%3$Xにおけるblock_id %1$uが無効です" -#: xlogreader.c:1341 +#: xlogreader.c:1481 #, c-format msgid "record with invalid length at %X/%X" msgstr "%X/%Xのレコードのサイズが無効です" -#: xlogreader.c:1430 +#: xlogreader.c:1570 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "%X/%X、ブロック %d での圧縮イメージが無効です" -#~ msgid "could not open directory \"%s\": %s\n" -#~ msgstr "ディレクトリ\"%s\"をオープンできませんでした: %s\n" +#~ msgid "could not create temporary table: %s" +#~ msgstr "一時テーブルを作成できませんでした: %s" -#~ msgid "could not stat file \"%s\": %s\n" -#~ msgstr "ファイル\"%s\"のstatができませんでした: %s\n" +#~ msgid "WAL file is from different database system: incorrect XLOG_SEG_SIZE in page header" +#~ msgstr "WAL ファイルは異なるデータベースシステム由来のものです: ページヘッダーのXLOG_SEG_SIZEが正しくありません" -#~ msgid "could not read symbolic link \"%s\": %s\n" -#~ msgstr "シンボリックリンク \"%s\" を読み込めませんでした: %s\n" +#~ msgid "Timeline IDs must be less than child timeline's ID.\n" +#~ msgstr "時系列IDは副時系列IDより小さくなければなりません。\n" -#~ msgid "symbolic link \"%s\" target is too long\n" -#~ msgstr "シンボリックリンク\"%s\"の参照先は長すぎます\n" +#~ msgid "Timeline IDs must be in increasing sequence.\n" +#~ msgstr "時系列IDは昇順の並びでなければなりません\n" -#~ msgid "could not read directory \"%s\": %s\n" -#~ msgstr "ディレクトリ\"%s\"を読み取れませんでした: %s\n" +#~ msgid "invalid data in history file: %s\n" +#~ msgstr "履歴ファイル内の無効なデータ: %s\n" -#~ msgid "could not read file \"%s\": %s\n" -#~ msgstr "ファイル \"%s\" を読み込めませんでした: %s\n" +#~ msgid "Expected a transaction log switchpoint location.\n" +#~ msgstr "トランザクションログの切替えポイントを想定しています。\n" -#~ msgid "could not close file \"%s\": %s\n" -#~ msgstr "ファイル \"%s\" をクローズできませんでした: %s\n" +#~ msgid "Expected a numeric timeline ID.\n" +#~ msgstr "数字の時系列IDを想定しました。\n" -#~ msgid " block %u\n" -#~ msgstr "ブロック数 %u\n" +#~ msgid "syntax error in history file: %s\n" +#~ msgstr "履歴ファイル内の構文エラー: %s\n" -#~ msgid "could not write file \"%s\": %s\n" -#~ msgstr "ファイル\"%s\"に書き込めませんでした: %s\n" +#~ msgid "sync of target directory failed\n" +#~ msgstr "ターゲットディレクトリの同期が失敗しました\n" -#~ msgid "could not remove file \"%s\": %s\n" -#~ msgstr "ファイル\"%s\"を削除できませんでした: %s\n" +#~ msgid "" +#~ "The program \"initdb\" was found by \"%s\"\n" +#~ "but was not the same version as %s.\n" +#~ "Check your installation.\n" +#~ msgstr "" +#~ "\"%s\"がプログラム \"initdb\" を見つけましたが、これは%sと同じ\n" +#~ "バージョンではありませんでした。\n" +#~ "インストレーションを検査してください。\n" -#~ msgid "could not truncate file \"%s\" to %u: %s\n" -#~ msgstr "ファイル \"%s\" を%uに切り詰められませんでした: %s\n" +#~ msgid "" +#~ "The program \"initdb\" is needed by %s but was\n" +#~ "not found in the same directory as \"%s\".\n" +#~ "Check your installation.\n" +#~ msgstr "" +#~ "%sには \"initdb\" プログラムが必要ですが、\"%s\"と同じディレクトリ\n" +#~ "にありませんでした。\n" +#~ "インストール状況を確認してください。\n" -#~ msgid "could not create directory \"%s\": %s\n" -#~ msgstr "ディレクトリ\"%s\"を作成できませんでした: %s\n" +#~ msgid "%d: %X/%X - %X/%X\n" +#~ msgstr "%d: %X/%X - %X/%X\n" -#~ msgid "could not remove directory \"%s\": %s\n" -#~ msgstr "ディレクトリ\"%s\"を削除できませんでした: %s\n" +#~ msgid "Target timeline history:\n" +#~ msgstr "ターゲットタイムラインの履歴:\n" -#~ msgid "could not remove symbolic link \"%s\": %s\n" -#~ msgstr "シンボリックリンク \"%s\" を削除できませんでした: %s\n" +#~ msgid "Source timeline history:\n" +#~ msgstr "ソースタイムラインの履歴\n" -#~ msgid "could not open file \"%s\" for reading: %s\n" -#~ msgstr "読み取り用のファイル\"%s\"をオープンできませんでした:%s\n" +#~ msgid "could not read from file \"%s\": %s\n" +#~ msgstr "ファイル\"%s\"を読み込めませんでした: %s\n" -#~ msgid "%s (%s)\n" -#~ msgstr "%s (%s)\n" +#~ msgid "could not seek in file \"%s\": %s\n" +#~ msgstr "ファイル\"%s\"をシークできませんでした: %s\n" -#~ msgid "getting file chunks\n" -#~ msgstr "ファイルチャンクの取得\n" +#~ msgid "could not open file \"%s\": %s\n" +#~ msgstr "ファイル \"%s\" をオープンできませんでした: %s\n" -#~ msgid "received null value for chunk for file \"%s\", file has been deleted\n" -#~ msgstr "ファイル\"%s\"のNULL値のチャンクを受け取りました。ファイルは削除されました。\n" +#~ msgid "Failure, exiting\n" +#~ msgstr "失敗しました、終了します\n" + +#~ msgid "fetched file \"%s\", length %d\n" +#~ msgstr "フェッチしたファイル \"%s\",長さ %d\n" #~ msgid "received chunk for file \"%s\", offset %d, size %d\n" #~ msgstr "ファイル \"%s\",オフセット %d, サイズ %dのチャンクを受け取りました\n" -#~ msgid "fetched file \"%s\", length %d\n" -#~ msgstr "フェッチしたファイル \"%s\",長さ %d\n" +#~ msgid "received null value for chunk for file \"%s\", file has been deleted\n" +#~ msgstr "ファイル\"%s\"のNULL値のチャンクを受け取りました。ファイルは削除されました。\n" -#~ msgid "Failure, exiting\n" -#~ msgstr "失敗しました、終了します\n" +#~ msgid "getting file chunks\n" +#~ msgstr "ファイルチャンクの取得\n" -#~ msgid "could not open file \"%s\": %s\n" -#~ msgstr "ファイル \"%s\" をオープンできませんでした: %s\n" +#~ msgid "%s (%s)\n" +#~ msgstr "%s (%s)\n" -#~ msgid "could not seek in file \"%s\": %s\n" -#~ msgstr "ファイル\"%s\"をシークできませんでした: %s\n" +#~ msgid "could not open file \"%s\" for reading: %s\n" +#~ msgstr "読み取り用のファイル\"%s\"をオープンできませんでした:%s\n" -#~ msgid "could not read from file \"%s\": %s\n" -#~ msgstr "ファイル\"%s\"を読み込めませんでした: %s\n" +#~ msgid "could not remove symbolic link \"%s\": %s\n" +#~ msgstr "シンボリックリンク \"%s\" を削除できませんでした: %s\n" -#~ msgid "Source timeline history:\n" -#~ msgstr "ソースタイムラインの履歴\n" +#~ msgid "could not remove directory \"%s\": %s\n" +#~ msgstr "ディレクトリ\"%s\"を削除できませんでした: %s\n" -#~ msgid "Target timeline history:\n" -#~ msgstr "ターゲットタイムラインの履歴:\n" +#~ msgid "could not create directory \"%s\": %s\n" +#~ msgstr "ディレクトリ\"%s\"を作成できませんでした: %s\n" -#~ msgid "%d: %X/%X - %X/%X\n" -#~ msgstr "%d: %X/%X - %X/%X\n" +#~ msgid "could not truncate file \"%s\" to %u: %s\n" +#~ msgstr "ファイル \"%s\" を%uに切り詰められませんでした: %s\n" -#~ msgid "" -#~ "The program \"initdb\" is needed by %s but was\n" -#~ "not found in the same directory as \"%s\".\n" -#~ "Check your installation.\n" -#~ msgstr "" -#~ "%sには \"initdb\" プログラムが必要ですが、\"%s\"と同じディレクトリ\n" -#~ "にありませんでした。\n" -#~ "インストール状況を確認してください。\n" +#~ msgid "could not remove file \"%s\": %s\n" +#~ msgstr "ファイル\"%s\"を削除できませんでした: %s\n" -#~ msgid "" -#~ "The program \"initdb\" was found by \"%s\"\n" -#~ "but was not the same version as %s.\n" -#~ "Check your installation.\n" -#~ msgstr "" -#~ "\"%s\"がプログラム \"initdb\" を見つけましたが、これは%sと同じ\n" -#~ "バージョンではありませんでした。\n" -#~ "インストレーションを検査してください。\n" +#~ msgid "could not write file \"%s\": %s\n" +#~ msgstr "ファイル\"%s\"に書き込めませんでした: %s\n" -#~ msgid "sync of target directory failed\n" -#~ msgstr "ターゲットディレクトリの同期が失敗しました\n" +#~ msgid " block %u\n" +#~ msgstr "ブロック数 %u\n" -#~ msgid "syntax error in history file: %s\n" -#~ msgstr "履歴ファイル内の構文エラー: %s\n" +#~ msgid "could not close file \"%s\": %s\n" +#~ msgstr "ファイル \"%s\" をクローズできませんでした: %s\n" -#~ msgid "Expected a numeric timeline ID.\n" -#~ msgstr "数字の時系列IDを想定しました。\n" +#~ msgid "could not read file \"%s\": %s\n" +#~ msgstr "ファイル \"%s\" を読み込めませんでした: %s\n" -#~ msgid "Expected a transaction log switchpoint location.\n" -#~ msgstr "トランザクションログの切替えポイントを想定しています。\n" +#~ msgid "could not read directory \"%s\": %s\n" +#~ msgstr "ディレクトリ\"%s\"を読み取れませんでした: %s\n" -#~ msgid "invalid data in history file: %s\n" -#~ msgstr "履歴ファイル内の無効なデータ: %s\n" +#~ msgid "symbolic link \"%s\" target is too long\n" +#~ msgstr "シンボリックリンク\"%s\"の参照先は長すぎます\n" -#~ msgid "Timeline IDs must be in increasing sequence.\n" -#~ msgstr "時系列IDは昇順の並びでなければなりません\n" +#~ msgid "could not read symbolic link \"%s\": %s\n" +#~ msgstr "シンボリックリンク \"%s\" を読み込めませんでした: %s\n" -#~ msgid "Timeline IDs must be less than child timeline's ID.\n" -#~ msgstr "時系列IDは副時系列IDより小さくなければなりません。\n" +#~ msgid "could not stat file \"%s\": %s\n" +#~ msgstr "ファイル\"%s\"のstatができませんでした: %s\n" -#~ msgid "WAL file is from different database system: incorrect XLOG_SEG_SIZE in page header" -#~ msgstr "WAL ファイルは異なるデータベースシステム由来のものです: ページヘッダーのXLOG_SEG_SIZEが正しくありません" +#~ msgid "could not open directory \"%s\": %s\n" +#~ msgstr "ディレクトリ\"%s\"をオープンできませんでした: %s\n" -#~ msgid "could not create temporary table: %s" -#~ msgstr "一時テーブルを作成できませんでした: %s" +#~ msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" +#~ msgstr "WAL ファイルは異なるデータベースシステム由来ものです: WAL ファイルにおけるデータベースシステムの識別子は %s で、pg_control におけるデータベースシステムの識別子は %s です。" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "不具合はまで報告してください。\n" + +#~ msgid "cannot create restricted tokens on this platform" +#~ msgstr "このプラットフォームでは制限付きトークンを作成できません" diff --git a/src/bin/pg_rewind/po/ru.po b/src/bin/pg_rewind/po/ru.po index 0cfe3f4472ff9..88f1f4cc9c076 100644 --- a/src/bin/pg_rewind/po/ru.po +++ b/src/bin/pg_rewind/po/ru.po @@ -1,13 +1,13 @@ # Russian message translation file for pg_rewind # Copyright (C) 2015-2016 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2015-2017, 2018, 2019. +# Alexander Lakhin , 2015-2017, 2018, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: pg_rewind (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-10-08 21:31+0300\n" -"PO-Revision-Date: 2019-09-02 12:32+0300\n" +"POT-Creation-Date: 2020-12-11 07:48+0300\n" +"PO-Revision-Date: 2020-11-09 08:33+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -17,77 +17,130 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "важно: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "ошибка: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "предупреждение: " #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" -#: ../../common/restricted_token.c:69 +#: ../../common/restricted_token.c:64 #, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "в этой ОС нельзя создавать ограниченные маркеры" +msgid "could not load library \"%s\": error code %lu" +msgstr "не удалось загрузить библиотеку \"%s\" (код ошибки: %lu)" -#: ../../common/restricted_token.c:78 +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "в этой ОС нельзя создавать ограниченные маркеры (код ошибки: %lu)" + +#: ../../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "не удалось открыть маркер процесса (код ошибки: %lu)" -#: ../../common/restricted_token.c:91 +#: ../../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "не удалось подготовить структуры SID (код ошибки: %lu)" -#: ../../common/restricted_token.c:110 +#: ../../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "не удалось создать ограниченный маркер (код ошибки: %lu)" -#: ../../common/restricted_token.c:131 +#: ../../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "не удалось запустить процесс для команды \"%s\" (код ошибки: %lu)" -#: ../../common/restricted_token.c:169 +#: ../../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "не удалось перезапуститься с ограниченным маркером (код ошибки: %lu)" -#: ../../common/restricted_token.c:185 +#: ../../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "не удалось получить код выхода от подпроцесса (код ошибки: %lu)" -#: copy_fetch.c:59 +#: ../../fe_utils/archive.c:53 #, c-format -msgid "could not open directory \"%s\": %m" -msgstr "не удалось открыть каталог \"%s\": %m" +msgid "cannot use restore_command with %%r placeholder" +msgstr "нельзя использовать restore_command со знаком подстановки %%r" + +#: ../../fe_utils/archive.c:74 +#, c-format +msgid "unexpected file size for \"%s\": %lu instead of %lu" +msgstr "неподходящий размер файла \"%s\": %lu вместо %lu байт" -#: copy_fetch.c:88 filemap.c:187 filemap.c:348 +#: ../../fe_utils/archive.c:85 +#, c-format +msgid "could not open file \"%s\" restored from archive: %m" +msgstr "не удалось открыть файл \"%s\", восстановленный из архива: %m" + +#: ../../fe_utils/archive.c:97 copy_fetch.c:88 filemap.c:208 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не удалось получить информацию о файле \"%s\": %m" +#: ../../fe_utils/archive.c:112 +#, c-format +msgid "restore_command failed: %s" +msgstr "ошибка при выполнении restore_command: %s" + +#: ../../fe_utils/archive.c:121 +#, c-format +msgid "could not restore file \"%s\" from archive" +msgstr "восстановить файл \"%s\" из архива не удалось" + +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:76 parsexlog.c:134 +#: parsexlog.c:194 +#, c-format +msgid "out of memory" +msgstr "нехватка памяти" + +#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:307 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не удалось открыть файл \"%s\": %m" + +#: ../../fe_utils/recovery_gen.c:140 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "не удалось записать в файл \"%s\": %m" + +#: ../../fe_utils/recovery_gen.c:152 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "не удалось создать файл \"%s\": %m" + +#: copy_fetch.c:59 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не удалось открыть каталог \"%s\": %m" + #: copy_fetch.c:117 #, c-format msgid "could not read symbolic link \"%s\": %m" @@ -127,7 +180,7 @@ msgstr "не удалось открыть исходный файл \"%s\": %m" msgid "could not seek in source file: %m" msgstr "не удалось переместиться в исходном файле: %m" -#: copy_fetch.c:187 file_ops.c:311 parsexlog.c:314 +#: copy_fetch.c:187 file_ops.c:311 parsexlog.c:345 #, c-format msgid "could not read file \"%s\": %m" msgstr "не удалось прочитать файл \"%s\": %m" @@ -207,114 +260,119 @@ msgstr "ошибка при удалении символической ссыл msgid "could not open file \"%s\" for reading: %m" msgstr "не удалось открыть файл \"%s\" для чтения: %m" -#: file_ops.c:314 parsexlog.c:316 +#: file_ops.c:314 parsexlog.c:347 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %zu)" -#: filemap.c:179 +#: filemap.c:200 #, c-format msgid "data file \"%s\" in source is not a regular file" msgstr "файл данных \"%s\" в источнике не является обычным файлом" -#: filemap.c:201 +#: filemap.c:222 #, c-format msgid "\"%s\" is not a directory" msgstr "\"%s\" не является каталогом" -#: filemap.c:224 +#: filemap.c:245 #, c-format msgid "\"%s\" is not a symbolic link" msgstr "\"%s\" не является символической ссылкой" -#: filemap.c:236 +#: filemap.c:257 #, c-format msgid "\"%s\" is not a regular file" msgstr "\"%s\" не является обычным файлом" -#: filemap.c:360 +#: filemap.c:369 #, c-format msgid "source file list is empty" msgstr "список файлов в источнике пуст" -#: filemap.c:475 +#: filemap.c:484 #, c-format msgid "unexpected page modification for directory or symbolic link \"%s\"" msgstr "" "неожиданная модификация страницы для каталога или символической ссылки \"%s\"" -#: libpq_fetch.c:52 +#: libpq_fetch.c:50 #, c-format -msgid "could not connect to server: %s" -msgstr "не удалось подключиться к серверу: %s" +msgid "%s" +msgstr "%s" -#: libpq_fetch.c:56 +#: libpq_fetch.c:53 #, c-format msgid "connected to server" msgstr "подключение к серверу установлено" -#: libpq_fetch.c:65 +#: libpq_fetch.c:62 #, c-format msgid "could not clear search_path: %s" msgstr "не удалось очистить search_path: %s" -#: libpq_fetch.c:77 +#: libpq_fetch.c:74 #, c-format msgid "source server must not be in recovery mode" msgstr "исходный сервер должен выйти из режима восстановления" -#: libpq_fetch.c:87 +#: libpq_fetch.c:84 #, c-format msgid "full_page_writes must be enabled in the source server" msgstr "на исходном сервере должен быть включён режим full_page_writes" -#: libpq_fetch.c:113 libpq_fetch.c:139 +#: libpq_fetch.c:110 #, c-format -msgid "error running query (%s) in source server: %s" +msgid "error running query (%s) on source server: %s" msgstr "ошибка выполнения запроса (%s) на исходном сервере: %s" -#: libpq_fetch.c:118 +#: libpq_fetch.c:115 #, c-format msgid "unexpected result set from query" msgstr "неожиданный результат запроса" -#: libpq_fetch.c:159 +#: libpq_fetch.c:136 +#, c-format +msgid "error running query (%s) in source server: %s" +msgstr "ошибка выполнения запроса (%s) на исходном сервере: %s" + +#: libpq_fetch.c:156 #, c-format msgid "unrecognized result \"%s\" for current WAL insert location" msgstr "" "нераспознанный результат \"%s\" вместо текущей позиции добавления в WAL" -#: libpq_fetch.c:209 +#: libpq_fetch.c:206 #, c-format msgid "could not fetch file list: %s" msgstr "не удалось получить список файлов: %s" -#: libpq_fetch.c:214 +#: libpq_fetch.c:211 #, c-format msgid "unexpected result set while fetching file list" msgstr "неожиданный результат при получении списка файлов" -#: libpq_fetch.c:262 +#: libpq_fetch.c:264 #, c-format msgid "could not send query: %s" msgstr "не удалось отправить запрос: %s" -#: libpq_fetch.c:267 +#: libpq_fetch.c:269 #, c-format msgid "could not set libpq connection to single row mode" msgstr "не удалось перевести подключение libpq в однострочный режим" -#: libpq_fetch.c:288 +#: libpq_fetch.c:289 #, c-format msgid "unexpected result while fetching remote files: %s" msgstr "неожиданный результат при получении файлов с сервера: %s" -#: libpq_fetch.c:294 +#: libpq_fetch.c:295 #, c-format msgid "unexpected result set size while fetching remote files" msgstr "неожиданный размер набора результатов при получении файлов с сервера" -#: libpq_fetch.c:300 +#: libpq_fetch.c:301 #, c-format msgid "" "unexpected data types in result set while fetching remote files: %u %u %u" @@ -322,87 +380,77 @@ msgstr "" "неожиданные типы данных в наборе результатов при получении файлов с сервера: " "%u %u %u" -#: libpq_fetch.c:308 +#: libpq_fetch.c:309 #, c-format msgid "unexpected result format while fetching remote files" msgstr "неожиданный формат результата при получении файлов с сервера" -#: libpq_fetch.c:314 +#: libpq_fetch.c:315 #, c-format msgid "unexpected null values in result while fetching remote files" msgstr "неожиданные значения NULL в результате при получении файлов с сервера" -#: libpq_fetch.c:318 +#: libpq_fetch.c:319 #, c-format msgid "unexpected result length while fetching remote files" msgstr "неожиданная длина результата при получении файлов с сервера" -#: libpq_fetch.c:384 +#: libpq_fetch.c:380 #, c-format msgid "could not fetch remote file \"%s\": %s" msgstr "не удалось получить с сервера файл \"%s\": %s" -#: libpq_fetch.c:389 +#: libpq_fetch.c:385 #, c-format msgid "unexpected result set while fetching remote file \"%s\"" msgstr "неожиданный набор результатов при получении файла \"%s\" с сервера" -#: libpq_fetch.c:433 +#: libpq_fetch.c:429 #, c-format msgid "could not send COPY data: %s" msgstr "не удалось отправить данные COPY: %s" -#: libpq_fetch.c:462 +#: libpq_fetch.c:458 #, c-format msgid "could not send file list: %s" msgstr "не удалось отправить список файлов: %s" -#: libpq_fetch.c:504 +#: libpq_fetch.c:500 #, c-format msgid "could not send end-of-COPY: %s" msgstr "не удалось отправить сообщение о завершении копирования: %s" -#: libpq_fetch.c:510 +#: libpq_fetch.c:506 #, c-format msgid "unexpected result while sending file list: %s" msgstr "неожиданный результат при передаче списка: %s" -#: parsexlog.c:74 parsexlog.c:127 parsexlog.c:185 -#, c-format -msgid "out of memory" -msgstr "нехватка памяти" - -#: parsexlog.c:87 parsexlog.c:133 +#: parsexlog.c:88 parsexlog.c:141 #, c-format msgid "could not read WAL record at %X/%X: %s" msgstr "не удалось прочитать запись WAL в позиции %X/%X: %s" -#: parsexlog.c:91 parsexlog.c:136 +#: parsexlog.c:92 parsexlog.c:144 #, c-format msgid "could not read WAL record at %X/%X" msgstr "не удалось прочитать запись WAL в позиции %X/%X" -#: parsexlog.c:197 +#: parsexlog.c:207 #, c-format msgid "could not find previous WAL record at %X/%X: %s" msgstr "не удалось найти предыдущую запись WAL в позиции %X/%X: %s" -#: parsexlog.c:201 +#: parsexlog.c:211 #, c-format msgid "could not find previous WAL record at %X/%X" msgstr "не удалось найти предыдущую запись WAL в позиции %X/%X" -#: parsexlog.c:292 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "не удалось открыть файл \"%s\": %m" - -#: parsexlog.c:305 +#: parsexlog.c:336 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "не удалось переместиться в файле \"%s\": %m" -#: parsexlog.c:385 +#: parsexlog.c:416 #, c-format msgid "" "WAL record modifies a relation, but record type is not recognized: lsn: %X/" @@ -411,7 +459,7 @@ msgstr "" "Запись WAL модифицирует отношение, но тип записи не распознан: lsn: %X/%X, " "rmgr: %s, info: %02X" -#: pg_rewind.c:72 +#: pg_rewind.c:78 #, c-format msgid "" "%s resynchronizes a PostgreSQL cluster with another copy of the cluster.\n" @@ -420,30 +468,41 @@ msgstr "" "%s синхронизирует кластер PostgreSQL с другой копией кластера.\n" "\n" -#: pg_rewind.c:73 +#: pg_rewind.c:79 #, c-format msgid "" "Usage:\n" " %s [OPTION]...\n" "\n" msgstr "" -"Пример запуска:\n" +"Использование:\n" " %s [ПАРАМЕТР]...\n" "\n" -#: pg_rewind.c:74 +#: pg_rewind.c:80 #, c-format msgid "Options:\n" msgstr "Параметры:\n" -#: pg_rewind.c:75 +#: pg_rewind.c:81 +#, c-format +msgid "" +" -c, --restore-target-wal use restore_command in target configuration " +"to\n" +" retrieve WAL files from archives\n" +msgstr "" +" -c, --restore-target-wal использовать для получения файлов WAL из\n" +" архива команду restore_command из целевой\n" +" конфигурации\n" + +#: pg_rewind.c:83 #, c-format msgid " -D, --target-pgdata=DIRECTORY existing data directory to modify\n" msgstr "" " -D, --target-pgdata=КАТАЛОГ существующий каталог, куда будут записаны " "данные\n" -#: pg_rewind.c:76 +#: pg_rewind.c:84 #, c-format msgid "" " --source-pgdata=DIRECTORY source data directory to synchronize with\n" @@ -452,21 +511,21 @@ msgstr "" "синхронизация\n" # well-spelled: ПОДКЛ -#: pg_rewind.c:77 +#: pg_rewind.c:85 #, c-format msgid " --source-server=CONNSTR source server to synchronize with\n" msgstr "" " --source-server=СТР_ПОДКЛ сервер, с которым будет проведена " "синхронизация\n" -#: pg_rewind.c:78 +#: pg_rewind.c:86 #, c-format msgid " -n, --dry-run stop before modifying anything\n" msgstr "" " -n, --dry-run остановиться до внесения каких-либо " "изменений\n" -#: pg_rewind.c:79 +#: pg_rewind.c:87 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written\n" @@ -475,146 +534,177 @@ msgstr "" " -N, --no-sync не ждать завершения сохранения данных на " "диске\n" -#: pg_rewind.c:81 +#: pg_rewind.c:89 #, c-format msgid " -P, --progress write progress messages\n" msgstr " -P, --progress выводить сообщения о ходе процесса\n" -#: pg_rewind.c:82 +#: pg_rewind.c:90 +#, c-format +msgid "" +" -R, --write-recovery-conf write configuration for replication\n" +" (requires --source-server)\n" +msgstr "" +" -R, --write-recovery-conf записать конфигурацию для репликации\n" +" (требуется указание --source-server)\n" + +#: pg_rewind.c:92 #, c-format msgid " --debug write a lot of debug messages\n" msgstr "" " --debug выдавать множество отладочных сообщений\n" -#: pg_rewind.c:83 +#: pg_rewind.c:93 +#, c-format +msgid "" +" --no-ensure-shutdown do not automatically fix unclean shutdown\n" +msgstr "" +" --no-ensure-shutdown не исправлять автоматически состояние,\n" +" возникающее при нештатном отключении\n" + +#: pg_rewind.c:94 #, c-format msgid "" " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_rewind.c:84 +#: pg_rewind.c:95 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_rewind.c:85 +#: pg_rewind.c:96 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Об ошибках сообщайте по адресу .\n" +"Об ошибках сообщайте по адресу <%s>.\n" -#: pg_rewind.c:142 pg_rewind.c:178 pg_rewind.c:185 pg_rewind.c:192 -#: pg_rewind.c:200 +#: pg_rewind.c:97 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: pg_rewind.c:160 pg_rewind.c:209 pg_rewind.c:216 pg_rewind.c:223 +#: pg_rewind.c:230 pg_rewind.c:238 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_rewind.c:177 +#: pg_rewind.c:208 #, c-format msgid "no source specified (--source-pgdata or --source-server)" msgstr "источник не указан (требуется --source-pgdata или --source-server)" -#: pg_rewind.c:184 +#: pg_rewind.c:215 #, c-format msgid "only one of --source-pgdata or --source-server can be specified" msgstr "указать можно только --source-pgdata либо --source-server" -#: pg_rewind.c:191 +#: pg_rewind.c:222 #, c-format msgid "no target data directory specified (--target-pgdata)" msgstr "целевой каталог данных не указан (--target-pgdata)" -#: pg_rewind.c:198 +#: pg_rewind.c:229 +#, c-format +msgid "" +"no source server information (--source-server) specified for --write-" +"recovery-conf" +msgstr "" +"отсутствует информация об исходном сервере (--source-server) для --write-" +"recovery-conf" + +#: pg_rewind.c:236 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: pg_rewind.c:213 +#: pg_rewind.c:251 #, c-format msgid "cannot be executed by \"root\"" msgstr "программу не должен запускать root" -#: pg_rewind.c:214 +#: pg_rewind.c:252 #, c-format msgid "You must run %s as the PostgreSQL superuser.\n" msgstr "Запускать %s нужно от имени суперпользователя PostgreSQL.\n" -#: pg_rewind.c:225 +#: pg_rewind.c:263 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "не удалось считать права на каталог \"%s\": %m" -#: pg_rewind.c:256 +#: pg_rewind.c:317 #, c-format msgid "source and target cluster are on the same timeline" msgstr "исходный и целевой кластер уже на одной линии времени" -#: pg_rewind.c:262 +#: pg_rewind.c:326 #, c-format msgid "servers diverged at WAL location %X/%X on timeline %u" msgstr "серверы разошлись в позиции WAL %X/%X на линии времени %u" -#: pg_rewind.c:299 +#: pg_rewind.c:374 #, c-format msgid "no rewind required" msgstr "перемотка не требуется" -#: pg_rewind.c:306 +#: pg_rewind.c:383 #, c-format msgid "rewinding from last common checkpoint at %X/%X on timeline %u" msgstr "" "перемотка от последней общей контрольной точки в позиции %X/%X на линии " "времени %u" -#: pg_rewind.c:315 +#: pg_rewind.c:392 #, c-format msgid "reading source file list" msgstr "чтение списка исходных файлов" -#: pg_rewind.c:318 +#: pg_rewind.c:395 #, c-format msgid "reading target file list" msgstr "чтение списка целевых файлов" -#: pg_rewind.c:329 +#: pg_rewind.c:404 #, c-format msgid "reading WAL in target" msgstr "чтение WAL в целевом кластере" -#: pg_rewind.c:346 +#: pg_rewind.c:421 #, c-format msgid "need to copy %lu MB (total source directory size is %lu MB)" msgstr "требуется скопировать %lu МБ (общий размер исходного каталога: %lu МБ)" -#: pg_rewind.c:365 +#: pg_rewind.c:439 #, c-format msgid "creating backup label and updating control file" msgstr "создание метки копии и модификация управляющего файла" -#: pg_rewind.c:395 +#: pg_rewind.c:469 #, c-format msgid "syncing target data directory" msgstr "синхронизация целевого каталога данных" -#: pg_rewind.c:398 +#: pg_rewind.c:476 #, c-format msgid "Done!" msgstr "Готово!" -#: pg_rewind.c:410 +#: pg_rewind.c:488 #, c-format msgid "source and target clusters are from different systems" msgstr "исходный и целевой кластеры относятся к разным системам" -#: pg_rewind.c:418 +#: pg_rewind.c:496 #, c-format msgid "clusters are not compatible with this version of pg_rewind" msgstr "кластеры несовместимы с этой версией pg_rewind" -#: pg_rewind.c:428 +#: pg_rewind.c:506 #, c-format msgid "" "target server needs to use either data checksums or \"wal_log_hints = on\"" @@ -622,49 +712,49 @@ msgstr "" "на целевом сервере должны быть контрольные суммы данных или \"wal_log_hints " "= on\"" -#: pg_rewind.c:439 +#: pg_rewind.c:517 #, c-format msgid "target server must be shut down cleanly" msgstr "целевой сервер должен быть выключен штатно" -#: pg_rewind.c:449 +#: pg_rewind.c:527 #, c-format msgid "source data directory must be shut down cleanly" msgstr "работа с исходным каталогом данных должна быть завершена штатно" -#: pg_rewind.c:498 +#: pg_rewind.c:579 #, c-format msgid "%*s/%s kB (%d%%) copied" msgstr "%*s/%s КБ (%d%%) скопировано" -#: pg_rewind.c:559 +#: pg_rewind.c:642 #, c-format msgid "invalid control file" msgstr "неверный управляющий файл" -#: pg_rewind.c:643 +#: pg_rewind.c:726 #, c-format msgid "" "could not find common ancestor of the source and target cluster's timelines" msgstr "" "не удалось найти общего предка линий времени исходного и целевого кластеров" -#: pg_rewind.c:684 +#: pg_rewind.c:767 #, c-format msgid "backup label buffer too small" msgstr "буфер для метки копии слишком мал" -#: pg_rewind.c:707 +#: pg_rewind.c:790 #, c-format msgid "unexpected control file CRC" msgstr "неверная контрольная сумма управляющего файла" -#: pg_rewind.c:717 +#: pg_rewind.c:800 #, c-format msgid "unexpected control file size %d, expected %d" msgstr "неверный размер управляющего файла (%d), ожидалось: %d" -#: pg_rewind.c:726 +#: pg_rewind.c:809 #, c-format msgid "" "WAL segment size must be a power of two between 1 MB and 1 GB, but the " @@ -682,109 +772,154 @@ msgstr[2] "" "Размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " "ГБ, но в управляющем файле указано значение: %d" -#: timeline.c:76 timeline.c:82 +#: pg_rewind.c:866 pg_rewind.c:924 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "" +"Программа \"%s\" нужна для %s, но она не найдена\n" +"в каталоге \"%s\".\n" +"Проверьте правильность установки СУБД." + +#: pg_rewind.c:871 pg_rewind.c:929 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "" +"Программа \"%s\" найдена программой \"%s\",\n" +"но её версия отличается от версии %s.\n" +"Проверьте правильность установки СУБД." + +#: pg_rewind.c:892 +#, c-format +msgid "restore_command is not set in the target cluster" +msgstr "команда restore_command в целевом кластере не определена" + +#: pg_rewind.c:935 +#, c-format +msgid "executing \"%s\" for target server to complete crash recovery" +msgstr "" +"выполнение \"%s\" для восстановления согласованности на целевом сервере" + +#: pg_rewind.c:955 +#, c-format +msgid "postgres single-user mode in target cluster failed" +msgstr "" +"не удалось запустить postgres в целевом кластере в однопользовательском " +"режиме" + +#: pg_rewind.c:956 +#, c-format +msgid "Command was: %s" +msgstr "Выполнялась команда: %s" + +#: timeline.c:75 timeline.c:81 #, c-format msgid "syntax error in history file: %s" msgstr "синтаксическая ошибка в файле истории: %s" -#: timeline.c:77 +#: timeline.c:76 #, c-format msgid "Expected a numeric timeline ID." msgstr "Ожидается числовой идентификатор линии времени." -#: timeline.c:83 +#: timeline.c:82 #, c-format msgid "Expected a write-ahead log switchpoint location." msgstr "Ожидается положение точки переключения журнала предзаписи." -#: timeline.c:88 +#: timeline.c:87 #, c-format msgid "invalid data in history file: %s" msgstr "неверные данные в файле истории: %s" -#: timeline.c:89 +#: timeline.c:88 #, c-format msgid "Timeline IDs must be in increasing sequence." msgstr "Идентификаторы линий времени должны возрастать." -#: timeline.c:109 +#: timeline.c:108 #, c-format msgid "invalid data in history file" msgstr "неверные данные в файле истории" -#: timeline.c:110 +#: timeline.c:109 #, c-format msgid "Timeline IDs must be less than child timeline's ID." msgstr "" "Идентификаторы линий времени должны быть меньше идентификатора линии-потомка." -#: xlogreader.c:299 +#: xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "неверное смещение записи: %X/%X" -#: xlogreader.c:307 +#: xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "по смещению %X/%X запрошено продолжение записи" -#: xlogreader.c:348 xlogreader.c:645 +#: xlogreader.c:398 xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "неверная длина записи по смещению %X/%X: ожидалось %u, получено %u" -#: xlogreader.c:372 +#: xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "длина записи %u по смещению %X/%X слишком велика" -#: xlogreader.c:404 +#: xlogreader.c:454 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "нет флага contrecord в позиции %X/%X" -#: xlogreader.c:417 +#: xlogreader.c:467 #, c-format msgid "invalid contrecord length %u at %X/%X" msgstr "неверная длина contrecord (%u) в позиции %X/%X" -#: xlogreader.c:653 +#: xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "неверный ID менеджера ресурсов %u по смещению %X/%X" -#: xlogreader.c:667 xlogreader.c:684 +#: xlogreader.c:717 xlogreader.c:734 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "запись с неверной ссылкой назад %X/%X по смещению %X/%X" -#: xlogreader.c:721 +#: xlogreader.c:771 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "" "некорректная контрольная сумма данных менеджера ресурсов в записи по " "смещению %X/%X" -#: xlogreader.c:758 +#: xlogreader.c:808 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "неверное магическое число %04X в сегменте журнала %s, смещение %u" -#: xlogreader.c:772 xlogreader.c:823 +#: xlogreader.c:822 xlogreader.c:863 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "неверные информационные биты %04X в сегменте журнала %s, смещение %u" -#: xlogreader.c:798 +#: xlogreader.c:837 #, c-format msgid "" "WAL file is from different database system: WAL file database system " -"identifier is %s, pg_control database system identifier is %s" +"identifier is %llu, pg_control database system identifier is %llu" msgstr "" -"файл WAL принадлежит другой СУБД: в нём указан идентификатор системы БД %s, " -"а идентификатор системы pg_control: %s" +"файл WAL принадлежит другой СУБД: в нём указан идентификатор системы БД " +"%llu, а идентификатор системы pg_control: %llu" -#: xlogreader.c:805 +#: xlogreader.c:845 #, c-format msgid "" "WAL file is from different database system: incorrect segment size in page " @@ -793,7 +928,7 @@ msgstr "" "файл WAL принадлежит другой СУБД: некорректный размер сегмента в заголовке " "страницы" -#: xlogreader.c:811 +#: xlogreader.c:851 #, c-format msgid "" "WAL file is from different database system: incorrect XLOG_BLCKSZ in page " @@ -802,35 +937,35 @@ msgstr "" "файл WAL принадлежит другой СУБД: некорректный XLOG_BLCKSZ в заголовке " "страницы" -#: xlogreader.c:842 +#: xlogreader.c:882 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "неожиданный pageaddr %X/%X в сегменте журнала %s, смещение %u" -#: xlogreader.c:867 +#: xlogreader.c:907 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "" "нарушение последовательности ID линии времени %u (после %u) в сегменте " "журнала %s, смещение %u" -#: xlogreader.c:1112 +#: xlogreader.c:1247 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%X" -#: xlogreader.c:1135 +#: xlogreader.c:1270 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%X нет" -#: xlogreader.c:1142 +#: xlogreader.c:1277 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "" "BKPBLOCK_HAS_DATA не установлен, но длина данных равна %u в позиции %X/%X" -#: xlogreader.c:1178 +#: xlogreader.c:1313 #, c-format msgid "" "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at " @@ -839,21 +974,21 @@ msgstr "" "BKPIMAGE_HAS_HOLE установлен, но для пропуска заданы смещение %u и длина %u " "при длине образа блока %u в позиции %X/%X" -#: xlogreader.c:1194 +#: xlogreader.c:1329 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "" "BKPIMAGE_HAS_HOLE не установлен, но для пропуска заданы смещение %u и длина " "%u в позиции %X/%X" -#: xlogreader.c:1209 +#: xlogreader.c:1344 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "" "BKPIMAGE_IS_COMPRESSED установлен, но длина образа блока равна %u в позиции " "%X/%X" -#: xlogreader.c:1224 +#: xlogreader.c:1359 #, c-format msgid "" "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image " @@ -862,28 +997,38 @@ msgstr "" "ни BKPIMAGE_HAS_HOLE, ни BKPIMAGE_IS_COMPRESSED не установлены, но длина " "образа блока равна %u в позиции %X/%X" -#: xlogreader.c:1240 +#: xlogreader.c:1375 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "" "BKPBLOCK_SAME_REL установлен, но предыдущее значение не задано в позиции %X/" "%X" -#: xlogreader.c:1252 +#: xlogreader.c:1387 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "неверный идентификатор блока %u в позиции %X/%X" -#: xlogreader.c:1341 +#: xlogreader.c:1476 #, c-format msgid "record with invalid length at %X/%X" msgstr "запись с неверной длиной в позиции %X/%X" -#: xlogreader.c:1430 +#: xlogreader.c:1565 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "неверный сжатый образ в позиции %X/%X, блок %d" +#~ msgid "could not connect to server: %s" +#~ msgstr "не удалось подключиться к серверу: %s" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Об ошибках сообщайте по адресу .\n" + #~ msgid " block %u\n" #~ msgstr " блок %u\n" @@ -933,24 +1078,6 @@ msgstr "неверный сжатый образ в позиции %X/%X, бло #~ msgid "%d: %X/%X - %X/%X\n" #~ msgstr "%d: %X/%X - %X/%X\n" -#~ msgid "" -#~ "The program \"initdb\" is needed by %s but was\n" -#~ "not found in the same directory as \"%s\".\n" -#~ "Check your installation.\n" -#~ msgstr "" -#~ "Для %s необходима программа \"initdb\", но она не найдена\n" -#~ "в каталоге \"%s\".\n" -#~ "Проверьте правильность установки СУБД.\n" - -#~ msgid "" -#~ "The program \"initdb\" was found by \"%s\"\n" -#~ "but was not the same version as %s.\n" -#~ "Check your installation.\n" -#~ msgstr "" -#~ "Программа \"initdb\" найдена в \"%s\",\n" -#~ "но её версия отличается от версии %s.\n" -#~ "Проверьте правильность установки СУБД.\n" - #~ msgid "sync of target directory failed\n" #~ msgstr "сбой синхронизации целевого каталога\n" diff --git a/src/bin/pg_rewind/po/sv.po b/src/bin/pg_rewind/po/sv.po index 927745d90ff6b..0df9e35b8604f 100644 --- a/src/bin/pg_rewind/po/sv.po +++ b/src/bin/pg_rewind/po/sv.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-09 08:47+0000\n" -"PO-Revision-Date: 2020-05-09 13:53+0200\n" +"POT-Creation-Date: 2020-09-16 05:17+0000\n" +"PO-Revision-Date: 2020-09-16 07:53+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -83,16 +83,64 @@ msgstr "kunde inte köra igen med token för begränsad åtkomst: felkod %lu" msgid "could not get exit code from subprocess: error code %lu" msgstr "kunde inte hämta statuskod för underprocess: felkod %lu" -#: copy_fetch.c:59 +#: ../../fe_utils/archive.c:53 #, c-format -msgid "could not open directory \"%s\": %m" -msgstr "kunde inte öppna katalog \"%s\": %m" +msgid "cannot use restore_command with %%r placeholder" +msgstr "kan inte använda restore_command med %%r-platshållare" + +#: ../../fe_utils/archive.c:74 +#, c-format +msgid "unexpected file size for \"%s\": %lu instead of %lu" +msgstr "oväntad filstorlek på \"%s\": %lu istället för %lu" -#: copy_fetch.c:88 filemap.c:208 filemap.c:369 +#: ../../fe_utils/archive.c:85 +#, c-format +msgid "could not open file \"%s\" restored from archive: %m" +msgstr "kunde inte öppna fil \"%s\" återställd från arkiv: %m" + +#: ../../fe_utils/archive.c:97 copy_fetch.c:88 filemap.c:208 #, c-format msgid "could not stat file \"%s\": %m" msgstr "kunde inte göra stat() på fil \"%s\": %m" +#: ../../fe_utils/archive.c:112 +#, c-format +msgid "restore_command failed: %s" +msgstr "restore_command misslyckades: %s" + +#: ../../fe_utils/archive.c:121 +#, c-format +msgid "could not restore file \"%s\" from archive" +msgstr "kunde inte återställa fil \"%s\" från arkiv" + +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:73 parsexlog.c:125 +#: parsexlog.c:185 +#, c-format +msgid "out of memory" +msgstr "slut på minne" + +#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:298 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "kunde inte öppna fil \"%s\": %m" + +#: ../../fe_utils/recovery_gen.c:140 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "kunde inte skriva till fil \"%s\": %m" + +#: ../../fe_utils/recovery_gen.c:152 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "kan inte skapa fil \"%s\": %m" + +#: copy_fetch.c:59 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "kunde inte öppna katalog \"%s\": %m" + #: copy_fetch.c:117 #, c-format msgid "could not read symbolic link \"%s\": %m" @@ -233,12 +281,12 @@ msgstr "\"%s\" är inte en symbolisk länk" msgid "\"%s\" is not a regular file" msgstr "\"%s\" är inte en vanlig fil" -#: filemap.c:381 +#: filemap.c:369 #, c-format msgid "source file list is empty" msgstr "källfillistan är tom" -#: filemap.c:496 +#: filemap.c:484 #, c-format msgid "unexpected page modification for directory or symbolic link \"%s\"" msgstr "oväntad sidmodifiering för katalog eller symbolisk länk \"%s\"" @@ -298,81 +346,76 @@ msgstr "kunde inte hämta fillista: %s" msgid "unexpected result set while fetching file list" msgstr "oväntad resultatmängd vid hämtning av fillista" -#: libpq_fetch.c:260 +#: libpq_fetch.c:265 #, c-format msgid "could not send query: %s" msgstr "kunde inte skicka fråga: %s" -#: libpq_fetch.c:265 +#: libpq_fetch.c:270 #, c-format msgid "could not set libpq connection to single row mode" msgstr "kunde inte sätta libpq-anslutning till enradsläge" -#: libpq_fetch.c:285 +#: libpq_fetch.c:290 #, c-format msgid "unexpected result while fetching remote files: %s" msgstr "oväntat resultat vid hämtning av extern fil: %s" -#: libpq_fetch.c:291 +#: libpq_fetch.c:296 #, c-format msgid "unexpected result set size while fetching remote files" msgstr "oväntad resultatmängdstorlek vid hämtning av externa filer" -#: libpq_fetch.c:297 +#: libpq_fetch.c:302 #, c-format msgid "unexpected data types in result set while fetching remote files: %u %u %u" msgstr "oväntade datayper i resultatmängd vid hämtning av externa filer: %u %u %u" -#: libpq_fetch.c:305 +#: libpq_fetch.c:310 #, c-format msgid "unexpected result format while fetching remote files" msgstr "oväntat resultatformat vid hämtning av externa filer" -#: libpq_fetch.c:311 +#: libpq_fetch.c:316 #, c-format msgid "unexpected null values in result while fetching remote files" msgstr "oväntade null-värden i resultat vid hämtning av externa filer" -#: libpq_fetch.c:315 +#: libpq_fetch.c:320 #, c-format msgid "unexpected result length while fetching remote files" msgstr "oväntad resultatlängd vid hämtning av externa filer" -#: libpq_fetch.c:376 +#: libpq_fetch.c:381 #, c-format msgid "could not fetch remote file \"%s\": %s" msgstr "kunde inte hämta extern fil \"%s\": %s" -#: libpq_fetch.c:381 +#: libpq_fetch.c:386 #, c-format msgid "unexpected result set while fetching remote file \"%s\"" msgstr "oväntat resultatmängd vid hämtning av extern fil \"%s\"" -#: libpq_fetch.c:425 +#: libpq_fetch.c:430 #, c-format msgid "could not send COPY data: %s" msgstr "kunde inte skicka COPY-data: %s" -#: libpq_fetch.c:454 +#: libpq_fetch.c:459 #, c-format msgid "could not send file list: %s" msgstr "kunde inte skicka fillista: %s" -#: libpq_fetch.c:496 +#: libpq_fetch.c:501 #, c-format msgid "could not send end-of-COPY: %s" msgstr "kunde inte skicka slut-på-COPY: %s" -#: libpq_fetch.c:502 +#: libpq_fetch.c:507 #, c-format msgid "unexpected result while sending file list: %s" msgstr "oväntat resultat vid skickande av fillista: %s" -#: parsexlog.c:73 parsexlog.c:125 parsexlog.c:185 -#, c-format -msgid "out of memory" -msgstr "slut på minne" - #: parsexlog.c:85 parsexlog.c:132 #, c-format msgid "could not read WAL record at %X/%X: %s" @@ -393,11 +436,6 @@ msgstr "kunde inte hitta föregående WAL-post vid %X/%X: %s" msgid "could not find previous WAL record at %X/%X" msgstr "kunde inte hitta förgående WAL-post vid %X/%X" -#: parsexlog.c:298 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "kunde inte öppna fil \"%s\": %m" - #: parsexlog.c:327 #, c-format msgid "could not seek in file \"%s\": %m" @@ -606,84 +644,84 @@ msgstr "läser WAL i målet" msgid "need to copy %lu MB (total source directory size is %lu MB)" msgstr "behöver kopiera %lu MB (total källkatalogstorlek är %lu MB)" -#: pg_rewind.c:428 +#: pg_rewind.c:427 #, c-format msgid "creating backup label and updating control file" msgstr "skapar backupetikett och uppdaterar kontrollfil" -#: pg_rewind.c:458 +#: pg_rewind.c:457 #, c-format msgid "syncing target data directory" msgstr "synkar måldatakatalog" -#: pg_rewind.c:465 +#: pg_rewind.c:464 #, c-format msgid "Done!" msgstr "Klar!" -#: pg_rewind.c:477 +#: pg_rewind.c:476 #, c-format msgid "source and target clusters are from different systems" msgstr "källa och målkluster är från olika system" -#: pg_rewind.c:485 +#: pg_rewind.c:484 #, c-format msgid "clusters are not compatible with this version of pg_rewind" msgstr "klustren är inte kompatibla med denna version av pg_rewind" -#: pg_rewind.c:495 +#: pg_rewind.c:494 #, c-format msgid "target server needs to use either data checksums or \"wal_log_hints = on\"" msgstr "målservern behöver använda antingen datachecksums eller \"wal_log_hints = on\"" -#: pg_rewind.c:506 +#: pg_rewind.c:505 #, c-format msgid "target server must be shut down cleanly" msgstr "målserver måste stängas ner utan fel" -#: pg_rewind.c:516 +#: pg_rewind.c:515 #, c-format msgid "source data directory must be shut down cleanly" msgstr "måldatakatalog måste stängas ner utan fel" -#: pg_rewind.c:565 +#: pg_rewind.c:567 #, c-format msgid "%*s/%s kB (%d%%) copied" msgstr "%*s/%s kB (%d%%) kopierad" -#: pg_rewind.c:626 +#: pg_rewind.c:630 #, c-format msgid "invalid control file" msgstr "ogiltig kontrollfil" -#: pg_rewind.c:710 +#: pg_rewind.c:714 #, c-format msgid "could not find common ancestor of the source and target cluster's timelines" msgstr "kunde inte finna en gemensam anfader av källa och målklusterets tidslinjer" -#: pg_rewind.c:751 +#: pg_rewind.c:755 #, c-format msgid "backup label buffer too small" msgstr "backupetikett-buffer för liten" -#: pg_rewind.c:774 +#: pg_rewind.c:778 #, c-format msgid "unexpected control file CRC" msgstr "oväntad kontrollfil-CRC" -#: pg_rewind.c:784 +#: pg_rewind.c:788 #, c-format msgid "unexpected control file size %d, expected %d" msgstr "oväntad kontrollfilstorlek %d, förväntade %d" -#: pg_rewind.c:793 +#: pg_rewind.c:797 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men kontrollfilen anger %d byte" msgstr[1] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men kontrollfilen anger %d byte" -#: pg_rewind.c:850 pg_rewind.c:908 +#: pg_rewind.c:854 pg_rewind.c:912 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -694,7 +732,7 @@ msgstr "" "katalog som \"%s\".\n" "Kontrollera din installation." -#: pg_rewind.c:855 pg_rewind.c:913 +#: pg_rewind.c:859 pg_rewind.c:917 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -705,22 +743,22 @@ msgstr "" "men är inte av samma version som %s.\n" "Kontrollera din installation." -#: pg_rewind.c:876 +#: pg_rewind.c:880 #, c-format msgid "restore_command is not set in the target cluster" msgstr "restore_command är inte satt i målklustret" -#: pg_rewind.c:919 +#: pg_rewind.c:923 #, c-format msgid "executing \"%s\" for target server to complete crash recovery" msgstr "kör \"%s\" för målservern för att slutföra krashåterställning" -#: pg_rewind.c:939 +#: pg_rewind.c:943 #, c-format msgid "postgres single-user mode in target cluster failed" msgstr "postgres enanvändarläge misslyckades i målklustret" -#: pg_rewind.c:940 +#: pg_rewind.c:944 #, c-format msgid "Command was: %s" msgstr "Kommandot var: %s" @@ -760,137 +798,137 @@ msgstr "ogiltig data i historikfil" msgid "Timeline IDs must be less than child timeline's ID." msgstr "Tidslinje-ID:er måste vara mindre än barnens tidslinje-ID:er." -#: xlogreader.c:347 +#: xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "ogiltig postoffset vid %X/%X" -#: xlogreader.c:355 +#: xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "contrecord är begärd vid %X/%X" -#: xlogreader.c:396 xlogreader.c:693 +#: xlogreader.c:398 xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "ogiltig postlängd vid %X/%X: förväntade %u, fick %u" -#: xlogreader.c:420 +#: xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "postlängd %u vid %X/%X är för lång" -#: xlogreader.c:452 +#: xlogreader.c:454 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "det finns ingen contrecord-flagga vid %X/%X" -#: xlogreader.c:465 +#: xlogreader.c:467 #, c-format msgid "invalid contrecord length %u at %X/%X" msgstr "ogiltig contrecord-längd %u vid %X/%X" -#: xlogreader.c:701 +#: xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ogiltigt resurshanterar-ID %u vid %X/%X" -#: xlogreader.c:715 xlogreader.c:732 +#: xlogreader.c:717 xlogreader.c:734 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "post med inkorrekt prev-link %X/%X vid %X/%X" -#: xlogreader.c:769 +#: xlogreader.c:771 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "felaktig resurshanterardatakontrollsumma i post vid %X/%X" -#: xlogreader.c:806 +#: xlogreader.c:808 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "felaktigt magiskt nummer %04X i loggsegment %s, offset %u" -#: xlogreader.c:820 xlogreader.c:861 +#: xlogreader.c:822 xlogreader.c:863 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "ogiltiga infobitar %04X i loggsegment %s, offset %u" -#: xlogreader.c:835 +#: xlogreader.c:837 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "WAL-fil är från ett annat databassystem: WAL-filens databassystemidentifierare är %llu, pg_control databassystemidentifierare är %llu" -#: xlogreader.c:843 +#: xlogreader.c:845 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL-fil är från ett annat databassystem: inkorrekt segmentstorlek i sidhuvud" -#: xlogreader.c:849 +#: xlogreader.c:851 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL-fil är från ett annat databassystem: inkorrekt XLOG_BLCKSZ i sidhuvud" -#: xlogreader.c:880 +#: xlogreader.c:882 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "oväntad sidadress %X/%X i loggsegment %s, offset %u" -#: xlogreader.c:905 +#: xlogreader.c:907 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "ej-i-sekvens för tidslinje-ID %u (efter %u) i loggsegment %s, offset %u" -#: xlogreader.c:1246 +#: xlogreader.c:1247 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "ej-i-sekvens block_id %u vid %X/%X" -#: xlogreader.c:1269 +#: xlogreader.c:1270 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA satt, men ingen data inkluderad vid %X/%X" -#: xlogreader.c:1276 +#: xlogreader.c:1277 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA ej satt, men datalängd är %u vid %X/%X" -#: xlogreader.c:1312 +#: xlogreader.c:1313 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE satt, men håloffset %u längd %u block-image-längd %u vid %X/%X" -#: xlogreader.c:1328 +#: xlogreader.c:1329 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE ej satt, men håloffset %u längd %u vid %X/%X" -#: xlogreader.c:1343 +#: xlogreader.c:1344 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED satt, men block-image-längd %u vid %X/%X" -#: xlogreader.c:1358 +#: xlogreader.c:1359 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "varken BKPIMAGE_HAS_HOLE eller BKPIMAGE_IS_COMPRESSED satt, men block-image-längd är %u vid %X/%X" -#: xlogreader.c:1374 +#: xlogreader.c:1375 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL satt men ingen tidigare rel vid %X/%X" -#: xlogreader.c:1386 +#: xlogreader.c:1387 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "ogiltig block_id %u vid %X/%X" -#: xlogreader.c:1475 +#: xlogreader.c:1476 #, c-format msgid "record with invalid length at %X/%X" msgstr "post med ogiltig längd vid %X/%X" -#: xlogreader.c:1564 +#: xlogreader.c:1565 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "ogiltig komprimerad image vid %X/%X, block %d" diff --git a/src/bin/pg_rewind/po/uk.po b/src/bin/pg_rewind/po/uk.po new file mode 100644 index 0000000000000..841576cec1b03 --- /dev/null +++ b/src/bin/pg_rewind/po/uk.po @@ -0,0 +1,913 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:17+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: \n" +"Language-Team: Ukrainian\n" +"Language: uk_UA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /DEV_13/pg_rewind.pot\n" +"X-Crowdin-File-ID: 504\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "збій: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "помилка: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "попередження: " + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "недостатньо пам'яті\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" + +#: ../../common/restricted_token.c:64 +#, c-format +msgid "could not load library \"%s\": error code %lu" +msgstr "не вдалося завантажити бібліотеку \"%s\": код помилки %lu" + +#: ../../common/restricted_token.c:73 +#, c-format +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "не вдалося створити обмежені токени на цій платформі: код помилки %lu" + +#: ../../common/restricted_token.c:82 +#, c-format +msgid "could not open process token: error code %lu" +msgstr "не вдалося відкрити токен процесу: код помилки %lu" + +#: ../../common/restricted_token.c:97 +#, c-format +msgid "could not allocate SIDs: error code %lu" +msgstr "не вдалося виділити SID: код помилки %lu" + +#: ../../common/restricted_token.c:119 +#, c-format +msgid "could not create restricted token: error code %lu" +msgstr "не вдалося створити обмежений токен: код помилки %lu" + +#: ../../common/restricted_token.c:140 +#, c-format +msgid "could not start process for command \"%s\": error code %lu" +msgstr "не вдалося запустити процес для команди \"%s\": код помилки %lu" + +#: ../../common/restricted_token.c:178 +#, c-format +msgid "could not re-execute with restricted token: error code %lu" +msgstr "не вдалося перезапустити з обмеженим токеном: код помилки %lu" + +#: ../../common/restricted_token.c:194 +#, c-format +msgid "could not get exit code from subprocess: error code %lu" +msgstr "не вдалося отримати код завершення підпроцесу: код помилки %lu" + +#: ../../fe_utils/archive.c:53 +#, c-format +msgid "cannot use restore_command with %%r placeholder" +msgstr "не вдалося використати restore_command із заповнювачем %%r" + +#: ../../fe_utils/archive.c:74 +#, c-format +msgid "unexpected file size for \"%s\": %lu instead of %lu" +msgstr "неочікуваний розмір файлу для \"%s\": %lu замість %lu" + +#: ../../fe_utils/archive.c:85 +#, c-format +msgid "could not open file \"%s\" restored from archive: %m" +msgstr "не вдалося відкрити файл \"%s\" відновлений з архіву: %m" + +#: ../../fe_utils/archive.c:97 copy_fetch.c:88 filemap.c:208 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" + +#: ../../fe_utils/archive.c:112 +#, c-format +msgid "restore_command failed: %s" +msgstr "помилка restore_command: %s" + +#: ../../fe_utils/archive.c:121 +#, c-format +msgid "could not restore file \"%s\" from archive" +msgstr "не вдалося відновити файл \"%s\" з архіву" + +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:73 parsexlog.c:125 +#: parsexlog.c:185 +#, c-format +msgid "out of memory" +msgstr "недостатньо пам'яті" + +#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:298 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" + +#: ../../fe_utils/recovery_gen.c:140 +#, c-format +msgid "could not write to file \"%s\": %m" +msgstr "неможливо записати до файлу \"%s\": %m" + +#: ../../fe_utils/recovery_gen.c:152 +#, c-format +msgid "could not create file \"%s\": %m" +msgstr "неможливо створити файл \"%s\": %m" + +#: copy_fetch.c:59 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не вдалося відкрити каталог \"%s\": %m" + +#: copy_fetch.c:117 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "не можливо прочитати символічне послання \"%s\": %m" + +#: copy_fetch.c:120 +#, c-format +msgid "symbolic link \"%s\" target is too long" +msgstr "таргет символічного посилання \"%s\" задовгий" + +#: copy_fetch.c:135 +#, c-format +msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform" +msgstr "\"%s\"є символічним посиланням, але символічні посилання не підтримуються на даній платформі" + +#: copy_fetch.c:142 +#, c-format +msgid "could not read directory \"%s\": %m" +msgstr "не вдалося прочитати каталог \"%s\": %m" + +#: copy_fetch.c:146 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "не вдалося закрити каталог \"%s\": %m" + +#: copy_fetch.c:166 +#, c-format +msgid "could not open source file \"%s\": %m" +msgstr "не вдалося відкрити вихідний файл \"%s\": %m" + +#: copy_fetch.c:170 +#, c-format +msgid "could not seek in source file: %m" +msgstr "не вдалося знайти у вихідному файлі: %m" + +#: copy_fetch.c:187 file_ops.c:311 parsexlog.c:336 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не вдалося прочитати файл \"%s\": %m" + +#: copy_fetch.c:190 +#, c-format +msgid "unexpected EOF while reading file \"%s\"" +msgstr "неочікуваний кінець при читанні файлу \"%s\"" + +#: copy_fetch.c:197 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "неможливо закрити файл \"%s\": %m" + +#: file_ops.c:62 +#, c-format +msgid "could not open target file \"%s\": %m" +msgstr "не вдалося відкрити цільовий файл \"%s\": %m" + +#: file_ops.c:76 +#, c-format +msgid "could not close target file \"%s\": %m" +msgstr "не вдалося закрити цільовий файл \"%s\": %m" + +#: file_ops.c:96 +#, c-format +msgid "could not seek in target file \"%s\": %m" +msgstr "не вдалося знайти в цільовому файлі \"%s\": %m" + +#: file_ops.c:112 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "не вдалося записати файл \"%s\": %m" + +#: file_ops.c:162 +#, c-format +msgid "invalid action (CREATE) for regular file" +msgstr "неприпустима дія (CREATE) для звичайного файлу" + +#: file_ops.c:185 +#, c-format +msgid "could not remove file \"%s\": %m" +msgstr "не можливо видалити файл \"%s\": %m" + +#: file_ops.c:203 +#, c-format +msgid "could not open file \"%s\" for truncation: %m" +msgstr "не вдалося відкрити файл \"%s\" для скорочення: %m" + +#: file_ops.c:207 +#, c-format +msgid "could not truncate file \"%s\" to %u: %m" +msgstr "не вдалося скоротити файл \"%s\" до потрібного розміру %u: %m" + +#: file_ops.c:223 +#, c-format +msgid "could not create directory \"%s\": %m" +msgstr "не вдалося створити каталог \"%s\": %m" + +#: file_ops.c:237 +#, c-format +msgid "could not remove directory \"%s\": %m" +msgstr "не вдалося видалити каталог \"%s\": %m" + +#: file_ops.c:251 +#, c-format +msgid "could not create symbolic link at \"%s\": %m" +msgstr "неможливо створити символічне послання на \"%s\": %m" + +#: file_ops.c:265 +#, c-format +msgid "could not remove symbolic link \"%s\": %m" +msgstr "не вдалося видалити символьне посилання \"%s\": %m" + +#: file_ops.c:296 file_ops.c:300 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "не вдалося відкрити файл \"%s\" для читання: %m" + +#: file_ops.c:314 parsexlog.c:338 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не вдалося прочитати файл \"%s\": прочитано %d з %zu" + +#: filemap.c:200 +#, c-format +msgid "data file \"%s\" in source is not a regular file" +msgstr "файл даних \"%s\" в джерелі не є регулярним файлом" + +#: filemap.c:222 +#, c-format +msgid "\"%s\" is not a directory" +msgstr "\"%s\" не є каталогом" + +#: filemap.c:245 +#, c-format +msgid "\"%s\" is not a symbolic link" +msgstr "\"%s\" не є символічним посиланням" + +#: filemap.c:257 +#, c-format +msgid "\"%s\" is not a regular file" +msgstr "\"%s\" не є регулярним файлом" + +#: filemap.c:369 +#, c-format +msgid "source file list is empty" +msgstr "список файлів в джерелі порожній" + +#: filemap.c:484 +#, c-format +msgid "unexpected page modification for directory or symbolic link \"%s\"" +msgstr "неочікувана модифікація сторінки для каталогу або символічного посилання \"%s\"" + +#: libpq_fetch.c:50 +#, c-format +msgid "could not connect to server: %s" +msgstr "не вдалося підключитися до сервера: %s" + +#: libpq_fetch.c:54 +#, c-format +msgid "connected to server" +msgstr "під'єднано до серверу" + +#: libpq_fetch.c:63 +#, c-format +msgid "could not clear search_path: %s" +msgstr "не вдалося очистити search_path: %s" + +#: libpq_fetch.c:75 +#, c-format +msgid "source server must not be in recovery mode" +msgstr "початковий сервер не повинен бути у стані відновлення" + +#: libpq_fetch.c:85 +#, c-format +msgid "full_page_writes must be enabled in the source server" +msgstr "на початковому сервері повинно бути увімкнено full_page_writes" + +#: libpq_fetch.c:111 +#, c-format +msgid "error running query (%s) on source server: %s" +msgstr "помилка при виконанні запиту (%s) на вихідному сервері: %s" + +#: libpq_fetch.c:116 +#, c-format +msgid "unexpected result set from query" +msgstr "неочікуваний результат запиту" + +#: libpq_fetch.c:137 +#, c-format +msgid "error running query (%s) in source server: %s" +msgstr "помилка при виконанні запиту (%s) на початковому сервері: %s" + +#: libpq_fetch.c:157 +#, c-format +msgid "unrecognized result \"%s\" for current WAL insert location" +msgstr "нерозпізнаний результат \"%s\" замість поточної добавленої позиції WAL" + +#: libpq_fetch.c:207 +#, c-format +msgid "could not fetch file list: %s" +msgstr "не вдалося отримати список файлів: %s" + +#: libpq_fetch.c:212 +#, c-format +msgid "unexpected result set while fetching file list" +msgstr "неочікуваний результат при отриманні списку файлів" + +#: libpq_fetch.c:265 +#, c-format +msgid "could not send query: %s" +msgstr "не вдалося надіслати запит: %s" + +#: libpq_fetch.c:270 +#, c-format +msgid "could not set libpq connection to single row mode" +msgstr "не вдалося встановити libpq з'єднання для однорядкового режиму" + +#: libpq_fetch.c:290 +#, c-format +msgid "unexpected result while fetching remote files: %s" +msgstr "неочікуваний результат при отриманні віддалених файлів: %s" + +#: libpq_fetch.c:296 +#, c-format +msgid "unexpected result set size while fetching remote files" +msgstr "неочікуваний розмір набору результатів при отриманні віддалених файлів" + +#: libpq_fetch.c:302 +#, c-format +msgid "unexpected data types in result set while fetching remote files: %u %u %u" +msgstr "неочікувані типи даних в результаті при отриманні віддалених файлів: %u %u %u" + +#: libpq_fetch.c:310 +#, c-format +msgid "unexpected result format while fetching remote files" +msgstr "неочікуваний формат результату при отриманні віддалених файлів" + +#: libpq_fetch.c:316 +#, c-format +msgid "unexpected null values in result while fetching remote files" +msgstr "неочікувані нульові значення в результаті при отриманні віддалених файлів" + +#: libpq_fetch.c:320 +#, c-format +msgid "unexpected result length while fetching remote files" +msgstr "неочікувана довжина результату при отриманні віддалених файлів" + +#: libpq_fetch.c:381 +#, c-format +msgid "could not fetch remote file \"%s\": %s" +msgstr "не вдалося отримати віддалений файл \"%s\": %s" + +#: libpq_fetch.c:386 +#, c-format +msgid "unexpected result set while fetching remote file \"%s\"" +msgstr "неочікуваний набір результатів при отриманні віддаленого файлу \"%s\"" + +#: libpq_fetch.c:430 +#, c-format +msgid "could not send COPY data: %s" +msgstr "не вдалося надіслати дані COPY: %s" + +#: libpq_fetch.c:459 +#, c-format +msgid "could not send file list: %s" +msgstr "не вдалося надіслати список файлів: %s" + +#: libpq_fetch.c:501 +#, c-format +msgid "could not send end-of-COPY: %s" +msgstr "не вдалося надіслати сповіщення про закінчення копіювання: %s" + +#: libpq_fetch.c:507 +#, c-format +msgid "unexpected result while sending file list: %s" +msgstr "неочікуваний результат при надсиланні списку файлів: %s" + +#: parsexlog.c:85 parsexlog.c:132 +#, c-format +msgid "could not read WAL record at %X/%X: %s" +msgstr "не вдалося прочитати запис WAL на %X/%X: %s" + +#: parsexlog.c:89 parsexlog.c:135 +#, c-format +msgid "could not read WAL record at %X/%X" +msgstr "не вдалося прочитати запис WAL на %X/%X" + +#: parsexlog.c:198 +#, c-format +msgid "could not find previous WAL record at %X/%X: %s" +msgstr "не вдалося знайти попередній запис WAL на %X/%X: %s" + +#: parsexlog.c:202 +#, c-format +msgid "could not find previous WAL record at %X/%X" +msgstr "не вдалося знайти попередній запис WAL на %X/%X" + +#: parsexlog.c:327 +#, c-format +msgid "could not seek in file \"%s\": %m" +msgstr "не вдалося знайти в файлі \"%s\": %m" + +#: parsexlog.c:407 +#, c-format +msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmgr: %s, info: %02X" +msgstr "WAL модифікує відношення, але тип запису не розпізнано: lsn: %X/%X, rmgr: %s, info: %02X" + +#: pg_rewind.c:78 +#, c-format +msgid "%s resynchronizes a PostgreSQL cluster with another copy of the cluster.\n\n" +msgstr "%s синхронізує кластер PostgreSQL з іншою копією кластеру.\n\n" + +#: pg_rewind.c:79 +#, c-format +msgid "Usage:\n" +" %s [OPTION]...\n\n" +msgstr "Використання:\n" +" %s [OPTION]...\n\n" + +#: pg_rewind.c:80 +#, c-format +msgid "Options:\n" +msgstr "Параметри:\n" + +#: pg_rewind.c:81 +#, c-format +msgid " -c, --restore-target-wal use restore_command in target configuration to\n" +" retrieve WAL files from archives\n" +msgstr " -c, --restore-target-wal використовує restore_command в цільовій конфігурації, щоб\n" +" отримати файли WAL з архівів\n" + +#: pg_rewind.c:83 +#, c-format +msgid " -D, --target-pgdata=DIRECTORY existing data directory to modify\n" +msgstr " -D, --target-pgdata=DIRECTORY існуючий каталог для змін\n" + +#: pg_rewind.c:84 +#, c-format +msgid " --source-pgdata=DIRECTORY source data directory to synchronize with\n" +msgstr " --source-pgdata=DIRECTORY початковий каталог даних для синхронізації\n" + +#: pg_rewind.c:85 +#, c-format +msgid " --source-server=CONNSTR source server to synchronize with\n" +msgstr " --source-server=CONNSTR початковий сервер для синхронізації\n" + +#: pg_rewind.c:86 +#, c-format +msgid " -n, --dry-run stop before modifying anything\n" +msgstr " -n, --dry-run зупинитися до внесення будь-яких змін\n" + +#: pg_rewind.c:87 +#, c-format +msgid " -N, --no-sync do not wait for changes to be written\n" +" safely to disk\n" +msgstr " -N, --no-sync не чекати поки зміни будуть записані на диск\n" + +#: pg_rewind.c:89 +#, c-format +msgid " -P, --progress write progress messages\n" +msgstr " -P, --progress повідомляти про хід процесу\n" + +#: pg_rewind.c:90 +#, c-format +msgid " -R, --write-recovery-conf write configuration for replication\n" +" (requires --source-server)\n" +msgstr " -R, --write-recovery-conf записує конфігурацію для реплікації \n" +" (потребує --source-server)\n" + +#: pg_rewind.c:92 +#, c-format +msgid " --debug write a lot of debug messages\n" +msgstr " --debug виводити багато налагоджувальних повідомлень\n" + +#: pg_rewind.c:93 +#, c-format +msgid " --no-ensure-shutdown do not automatically fix unclean shutdown\n" +msgstr " --no-ensure-shutdown не виправляти автоматично неочищене завершення роботи\n" + +#: pg_rewind.c:94 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію і вийти\n" + +#: pg_rewind.c:95 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати довідку, потім вийти\n" + +#: pg_rewind.c:96 +#, c-format +msgid "\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Повідомляти про помилки на <%s>.\n" + +#: pg_rewind.c:97 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: pg_rewind.c:159 pg_rewind.c:208 pg_rewind.c:215 pg_rewind.c:222 +#: pg_rewind.c:229 pg_rewind.c:237 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" + +#: pg_rewind.c:207 +#, c-format +msgid "no source specified (--source-pgdata or --source-server)" +msgstr "джерело не вказано (--source-pgdata чи --source-server)" + +#: pg_rewind.c:214 +#, c-format +msgid "only one of --source-pgdata or --source-server can be specified" +msgstr "може бути вказано лише --source-pgdata чи --source-server" + +#: pg_rewind.c:221 +#, c-format +msgid "no target data directory specified (--target-pgdata)" +msgstr "не вказано жодного каталогу цільових даних (--target-pgdata)" + +#: pg_rewind.c:228 +#, c-format +msgid "no source server information (--source-server) specified for --write-recovery-conf" +msgstr "немає інформації про вихідний сервер (--source-server) вказаної для --write-recovery-conf" + +#: pg_rewind.c:235 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "забагато аргументів у командному рядку (перший \"%s\")" + +#: pg_rewind.c:250 +#, c-format +msgid "cannot be executed by \"root\"" +msgstr "\"root\" не може це виконувати" + +#: pg_rewind.c:251 +#, c-format +msgid "You must run %s as the PostgreSQL superuser.\n" +msgstr "Запускати %s треба від суперкористувача PostgreSQL.\n" + +#: pg_rewind.c:262 +#, c-format +msgid "could not read permissions of directory \"%s\": %m" +msgstr "не вдалося прочитати дозволи на каталог \"%s\": %m" + +#: pg_rewind.c:316 +#, c-format +msgid "source and target cluster are on the same timeline" +msgstr "початковий і цільовий кластери знаходяться на одній лінії часу" + +#: pg_rewind.c:322 +#, c-format +msgid "servers diverged at WAL location %X/%X on timeline %u" +msgstr "сервери розійшлись в позиції WAL %X/%X на лінії часу %u" + +#: pg_rewind.c:360 +#, c-format +msgid "no rewind required" +msgstr "перемотування не потрібне" + +#: pg_rewind.c:369 +#, c-format +msgid "rewinding from last common checkpoint at %X/%X on timeline %u" +msgstr "перемотування від останньої спільної контрольної точки на %X/%X на лінії часу %u" + +#: pg_rewind.c:378 +#, c-format +msgid "reading source file list" +msgstr "читання списку файлів із джерела" + +#: pg_rewind.c:381 +#, c-format +msgid "reading target file list" +msgstr "читання списку цільових файлів" + +#: pg_rewind.c:392 +#, c-format +msgid "reading WAL in target" +msgstr "читання WAL у цілі" + +#: pg_rewind.c:409 +#, c-format +msgid "need to copy %lu MB (total source directory size is %lu MB)" +msgstr "треба скопіювати %lu МБ (загальний розмір каталогу джерела становить %lu МБ)" + +#: pg_rewind.c:427 +#, c-format +msgid "creating backup label and updating control file" +msgstr "створення мітки резервного копіювання і оновлення контрольного файлу" + +#: pg_rewind.c:457 +#, c-format +msgid "syncing target data directory" +msgstr "синхронізація цільового каталогу даних" + +#: pg_rewind.c:464 +#, c-format +msgid "Done!" +msgstr "Готово!" + +#: pg_rewind.c:476 +#, c-format +msgid "source and target clusters are from different systems" +msgstr "початковий і цільовий кластер належать до різних систем" + +#: pg_rewind.c:484 +#, c-format +msgid "clusters are not compatible with this version of pg_rewind" +msgstr "кластери не сумісні з даною версією pg_rewind" + +#: pg_rewind.c:494 +#, c-format +msgid "target server needs to use either data checksums or \"wal_log_hints = on\"" +msgstr "цільовий сервер потребує використання контрольної суми даних або \"wal_log_hints = on\"" + +#: pg_rewind.c:505 +#, c-format +msgid "target server must be shut down cleanly" +msgstr "цільовий сервер повинен бути вимкненим штатно" + +#: pg_rewind.c:515 +#, c-format +msgid "source data directory must be shut down cleanly" +msgstr "робота з початковим каталогом даних повинна бути завершена штатно" + +#: pg_rewind.c:567 +#, c-format +msgid "%*s/%s kB (%d%%) copied" +msgstr "скопійовано %*s/%s кБ (%d%%)" + +#: pg_rewind.c:630 +#, c-format +msgid "invalid control file" +msgstr "неприпустимий контрольний файл" + +#: pg_rewind.c:714 +#, c-format +msgid "could not find common ancestor of the source and target cluster's timelines" +msgstr "не вдалося знайти спільного предка ліній часу початкового та цільового кластерів" + +#: pg_rewind.c:755 +#, c-format +msgid "backup label buffer too small" +msgstr "буфер для мітки резервного копіювання замалий" + +#: pg_rewind.c:778 +#, c-format +msgid "unexpected control file CRC" +msgstr "неочікуваний контрольний файл CRC" + +#: pg_rewind.c:788 +#, c-format +msgid "unexpected control file size %d, expected %d" +msgstr "неочікуваний розмір контрольного файлу %d, очікувалося %d" + +#: pg_rewind.c:797 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" +msgstr[0] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" +msgstr[1] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" +msgstr[2] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" +msgstr[3] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" + +#: pg_rewind.c:854 pg_rewind.c:912 +#, c-format +msgid "The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "Програма \"%s\" потрібна для %s, але не знайдена в тому ж каталозі, що й \"%s\".\n" +"Перевірте вашу установку." + +#: pg_rewind.c:859 pg_rewind.c:917 +#, c-format +msgid "The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "Програма \"%s\" була знайдена \"%s\", але не була тієї ж версії, що %s.\n" +"Перевірте вашу установку." + +#: pg_rewind.c:880 +#, c-format +msgid "restore_command is not set in the target cluster" +msgstr "команда restore_command не встановлена в цільовому кластері" + +#: pg_rewind.c:923 +#, c-format +msgid "executing \"%s\" for target server to complete crash recovery" +msgstr "виконання \"%s\" для цільового серверу, щоб завершити відновлення після аварійного завершення роботи" + +#: pg_rewind.c:943 +#, c-format +msgid "postgres single-user mode in target cluster failed" +msgstr "не вдалося ввімкнути однокористувацький режим postgres в цільовому кластері" + +#: pg_rewind.c:944 +#, c-format +msgid "Command was: %s" +msgstr "Команда була: %s" + +#: timeline.c:75 timeline.c:81 +#, c-format +msgid "syntax error in history file: %s" +msgstr "синтаксична помилка у файлі історії: %s" + +#: timeline.c:76 +#, c-format +msgid "Expected a numeric timeline ID." +msgstr "Очікується числовий ідентифікатор лінії часу." + +#: timeline.c:82 +#, c-format +msgid "Expected a write-ahead log switchpoint location." +msgstr "Очікується положення точки випереджувального журналювання." + +#: timeline.c:87 +#, c-format +msgid "invalid data in history file: %s" +msgstr "неприпустимі дані у файлу історії: %s" + +#: timeline.c:88 +#, c-format +msgid "Timeline IDs must be in increasing sequence." +msgstr "Ідентифікатори ліній часу повинні збільшуватись." + +#: timeline.c:108 +#, c-format +msgid "invalid data in history file" +msgstr "неприпустимі дані у файлі історії" + +#: timeline.c:109 +#, c-format +msgid "Timeline IDs must be less than child timeline's ID." +msgstr "Ідентифікатори ліній часу повинні бути меншими від ідентифікатора дочірньої лінії." + +#: xlogreader.c:349 +#, c-format +msgid "invalid record offset at %X/%X" +msgstr "невірний зсув запису: %X/%X" + +#: xlogreader.c:357 +#, c-format +msgid "contrecord is requested by %X/%X" +msgstr "по зсуву %X/%X запитано продовження запису" + +#: xlogreader.c:398 xlogreader.c:695 +#, c-format +msgid "invalid record length at %X/%X: wanted %u, got %u" +msgstr "невірна довжина запису по зсуву %X/%X: очікувалось %u, отримано %u" + +#: xlogreader.c:422 +#, c-format +msgid "record length %u at %X/%X too long" +msgstr "довжина запису %u на %X/%X є задовгою" + +#: xlogreader.c:454 +#, c-format +msgid "there is no contrecord flag at %X/%X" +msgstr "немає флага contrecord в позиції %X/%X" + +#: xlogreader.c:467 +#, c-format +msgid "invalid contrecord length %u at %X/%X" +msgstr "невірна довижна contrecord (%u) в позиції %X/%X" + +#: xlogreader.c:703 +#, c-format +msgid "invalid resource manager ID %u at %X/%X" +msgstr "невірний ID менеджера ресурсів %u в %X/%X" + +#: xlogreader.c:717 xlogreader.c:734 +#, c-format +msgid "record with incorrect prev-link %X/%X at %X/%X" +msgstr "запис з неправильним попереднім посиланням %X/%X на %X/%X" + +#: xlogreader.c:771 +#, c-format +msgid "incorrect resource manager data checksum in record at %X/%X" +msgstr "некоректна контрольна сума даних менеджера ресурсів у запису по зсуву %X/%X" + +#: xlogreader.c:808 +#, c-format +msgid "invalid magic number %04X in log segment %s, offset %u" +msgstr "невірне магічне число %04X в сегменті журналу %s, зсув %u" + +#: xlogreader.c:822 xlogreader.c:863 +#, c-format +msgid "invalid info bits %04X in log segment %s, offset %u" +msgstr "невірні інформаційні біти %04X в сегменті журналу %s, зсув %u" + +#: xlogreader.c:837 +#, c-format +msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" +msgstr "WAL файл належить іншій системі баз даних: ідентифікатор системи баз даних де міститься WAL файл - %llu, а ідентифікатор системи баз даних pg_control - %llu" + +#: xlogreader.c:845 +#, c-format +msgid "WAL file is from different database system: incorrect segment size in page header" +msgstr "Файл WAL належить іншій системі баз даних: некоректний розмір сегменту в заголовку сторінки" + +#: xlogreader.c:851 +#, c-format +msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" +msgstr "Файл WAL належить іншій системі баз даних: некоректний XLOG_BLCKSZ в заголовку сторінки" + +#: xlogreader.c:882 +#, c-format +msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" +msgstr "неочікуваний pageaddr %X/%X в сегменті журналу %s, зсув %u" + +#: xlogreader.c:907 +#, c-format +msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" +msgstr "порушення послідовності ID лінії часу %u (після %u) в сегменті журналу %s, зсув %u" + +#: xlogreader.c:1247 +#, c-format +msgid "out-of-order block_id %u at %X/%X" +msgstr "ідентифікатор блока %u out-of-order в позиції %X/%X" + +#: xlogreader.c:1270 +#, c-format +msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" +msgstr "BKPBLOCK_HAS_DATA встановлений, але немає даних в позиції %X/%X" + +#: xlogreader.c:1277 +#, c-format +msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" +msgstr "BKPBLOCK_HAS_DATA встановлений, але довжина даних дорівнює %u в позиції %X/%X" + +#: xlogreader.c:1313 +#, c-format +msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" +msgstr "BKPIMAGE_HAS_HOLE встановлений, але для пропуску задані: зсув %u, довжина %u, при довжині образу блока %u в позиції %X/%X" + +#: xlogreader.c:1329 +#, c-format +msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" +msgstr "BKPIMAGE_HAS_HOLE не встановлений, але для пропуску задані: зсув %u, довжина %u в позиції %X/%X" + +#: xlogreader.c:1344 +#, c-format +msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" +msgstr "BKPIMAGE_IS_COMPRESSED встановлений, але довжина образу блока дорівнює %u в позиції %X/%X" + +#: xlogreader.c:1359 +#, c-format +msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" +msgstr "ні BKPIMAGE_HAS_HOLE, ні BKPIMAGE_IS_COMPRESSED не встановлені, але довжина образу блока дорвінює %u в позиції %X/%X" + +#: xlogreader.c:1375 +#, c-format +msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" +msgstr "BKPBLOCK_SAME_REL встановлений, але попереднє значення не задано в позиції %X/%X" + +#: xlogreader.c:1387 +#, c-format +msgid "invalid block_id %u at %X/%X" +msgstr "невірний ідентифікатор блоку %u в позиції %X/%X" + +#: xlogreader.c:1476 +#, c-format +msgid "record with invalid length at %X/%X" +msgstr "запис з невірною довжиною на %X/%X" + +#: xlogreader.c:1565 +#, c-format +msgid "invalid compressed image at %X/%X, block %d" +msgstr "невірно стиснутий образ в позиції %X/%X, блок %d" + diff --git a/src/bin/pg_test_fsync/po/de.po b/src/bin/pg_test_fsync/po/de.po index 92b4146bdc8fa..290551e16edbf 100644 --- a/src/bin/pg_test_fsync/po/de.po +++ b/src/bin/pg_test_fsync/po/de.po @@ -1,15 +1,14 @@ # German message translation file for pg_test_fsync -# Copyright (C) 2017 PostgreSQL Global Development Group +# Copyright (C) 2017-2021 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Peter Eisentraut , 2017. # msgid "" msgstr "" -"Project-Id-Version: pg_test_fsync (PostgreSQL) 10\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2017-08-26 15:46+0000\n" -"PO-Revision-Date: 2017-08-26 12:30-0400\n" -"Last-Translator: Peter Eisentraut \n" +"Project-Id-Version: pg_test_fsync (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-04-13 21:19+0000\n" +"PO-Revision-Date: 2021-04-14 00:04+0200\n" +"Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" @@ -18,67 +17,57 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" #. translator: maintain alignment with NA_FORMAT -#: pg_test_fsync.c:30 +#: pg_test_fsync.c:31 #, c-format msgid "%13.3f ops/sec %6.0f usecs/op\n" msgstr " %13.3f Op./s %6.0f µs/Op.\n" -#: pg_test_fsync.c:49 -#, c-format -msgid "Could not create thread for alarm\n" -msgstr "Konnte Thread für Alarm nicht erzeugen\n" - -#: pg_test_fsync.c:154 +#: pg_test_fsync.c:159 #, c-format msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n" msgstr "Aufruf: %s [-f DATEINAME] [-s SEK-PRO-TEST]\n" -#: pg_test_fsync.c:178 pg_test_fsync.c:190 +#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: pg_test_fsync.c:188 -#, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s: zu viele Kommandozeilenargumente (das erste ist »%s«)\n" - -#: pg_test_fsync.c:195 +#: pg_test_fsync.c:216 #, c-format -msgid "%d second per test\n" -msgid_plural "%d seconds per test\n" -msgstr[0] "%d Sekunde pro Test\n" -msgstr[1] "%d Sekunden pro Test\n" +msgid "%u second per test\n" +msgid_plural "%u seconds per test\n" +msgstr[0] "%u Sekunde pro Test\n" +msgstr[1] "%u Sekunden pro Test\n" -#: pg_test_fsync.c:200 +#: pg_test_fsync.c:221 #, c-format msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n" msgstr "O_DIRECT wird auf dieser Plattform für open_datasync und open_sync unterstützt.\n" -#: pg_test_fsync.c:202 +#: pg_test_fsync.c:223 #, c-format msgid "Direct I/O is not supported on this platform.\n" msgstr "Direct-I/O wird auf dieser Plattform nicht unterstützt.\n" -#: pg_test_fsync.c:227 pg_test_fsync.c:291 pg_test_fsync.c:315 -#: pg_test_fsync.c:338 pg_test_fsync.c:479 pg_test_fsync.c:491 -#: pg_test_fsync.c:507 pg_test_fsync.c:513 pg_test_fsync.c:538 +#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339 +#: pg_test_fsync.c:363 pg_test_fsync.c:506 pg_test_fsync.c:518 +#: pg_test_fsync.c:534 pg_test_fsync.c:540 pg_test_fsync.c:562 msgid "could not open output file" msgstr "konnte Ausgabedatei nicht öffnen" -#: pg_test_fsync.c:230 pg_test_fsync.c:272 pg_test_fsync.c:297 -#: pg_test_fsync.c:321 pg_test_fsync.c:344 pg_test_fsync.c:382 -#: pg_test_fsync.c:440 pg_test_fsync.c:481 pg_test_fsync.c:509 -#: pg_test_fsync.c:540 +#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323 +#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:410 +#: pg_test_fsync.c:469 pg_test_fsync.c:508 pg_test_fsync.c:536 +#: pg_test_fsync.c:567 msgid "write failed" msgstr "Schreiben fehlgeschlagen" -#: pg_test_fsync.c:234 pg_test_fsync.c:323 pg_test_fsync.c:346 -#: pg_test_fsync.c:483 pg_test_fsync.c:515 +#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374 +#: pg_test_fsync.c:510 pg_test_fsync.c:542 msgid "fsync failed" msgstr "fsync fehlgeschlagen" -#: pg_test_fsync.c:248 +#: pg_test_fsync.c:270 #, c-format msgid "" "\n" @@ -87,7 +76,7 @@ msgstr "" "\n" "Vergleich von Datei-Sync-Methoden bei einem Schreibvorgang aus %dkB:\n" -#: pg_test_fsync.c:250 +#: pg_test_fsync.c:272 #, c-format msgid "" "\n" @@ -96,26 +85,21 @@ msgstr "" "\n" "Vergleich von Datei-Sync-Methoden bei zwei Schreibvorgängen aus je %dkB:\n" -#: pg_test_fsync.c:251 +#: pg_test_fsync.c:273 #, c-format msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n" msgstr "(in Rangordnung von wal_sync_method, außer dass fdatasync auf Linux Standard ist)\n" -#: pg_test_fsync.c:262 pg_test_fsync.c:365 pg_test_fsync.c:431 +#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:457 msgid "n/a*" msgstr "entf.*" -#: pg_test_fsync.c:274 pg_test_fsync.c:300 pg_test_fsync.c:325 -#: pg_test_fsync.c:348 pg_test_fsync.c:384 pg_test_fsync.c:442 -msgid "seek failed" -msgstr "seek fehlgeschlagen" - -#: pg_test_fsync.c:280 pg_test_fsync.c:305 pg_test_fsync.c:353 -#: pg_test_fsync.c:390 pg_test_fsync.c:448 +#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379 +#: pg_test_fsync.c:416 pg_test_fsync.c:475 msgid "n/a" msgstr "entf." -#: pg_test_fsync.c:395 +#: pg_test_fsync.c:421 #, c-format msgid "" "* This file system and its mount options do not support direct\n" @@ -124,7 +108,7 @@ msgstr "" "* Dieses Dateisystem und die Mount-Optionen unterstützen kein Direct-I/O,\n" " z.B. ext4 im Journaled-Modus.\n" -#: pg_test_fsync.c:403 +#: pg_test_fsync.c:429 #, c-format msgid "" "\n" @@ -133,7 +117,7 @@ msgstr "" "\n" "Vergleich von open_sync mit verschiedenen Schreibgrößen:\n" -#: pg_test_fsync.c:404 +#: pg_test_fsync.c:430 #, c-format msgid "" "(This is designed to compare the cost of writing 16kB in different write\n" @@ -142,27 +126,27 @@ msgstr "" "(Damit werden die Kosten für das Schreiben von 16kB in verschieden Größen mit\n" "open_sync verglichen.)\n" -#: pg_test_fsync.c:407 +#: pg_test_fsync.c:433 msgid " 1 * 16kB open_sync write" msgstr " 1 * 16kB open_sync schreiben" -#: pg_test_fsync.c:408 +#: pg_test_fsync.c:434 msgid " 2 * 8kB open_sync writes" msgstr " 2 * 8kB open_sync schreiben" -#: pg_test_fsync.c:409 +#: pg_test_fsync.c:435 msgid " 4 * 4kB open_sync writes" msgstr " 4 * 4kB open_sync schreiben" -#: pg_test_fsync.c:410 +#: pg_test_fsync.c:436 msgid " 8 * 2kB open_sync writes" msgstr " 8 * 2kB open_sync schreiben" -#: pg_test_fsync.c:411 +#: pg_test_fsync.c:437 msgid "16 * 1kB open_sync writes" msgstr "16 * 1kB open_sync schreiben" -#: pg_test_fsync.c:464 +#: pg_test_fsync.c:491 #, c-format msgid "" "\n" @@ -171,7 +155,7 @@ msgstr "" "\n" "Probe ob fsync auf einem anderen Dateideskriptor funktioniert:\n" -#: pg_test_fsync.c:465 +#: pg_test_fsync.c:492 #, c-format msgid "" "(If the times are similar, fsync() can sync data written on a different\n" @@ -180,7 +164,7 @@ msgstr "" "(Wenn die Zeiten ähnlich sind, dann kann fsync() auf einem anderen Deskriptor\n" "geschriebene Daten syncen.)\n" -#: pg_test_fsync.c:530 +#: pg_test_fsync.c:557 #, c-format msgid "" "\n" @@ -188,8 +172,3 @@ msgid "" msgstr "" "\n" "Nicht gesynctes Schreiben von %dkB:\n" - -#: pg_test_fsync.c:607 -#, c-format -msgid "%s: %s\n" -msgstr "%s: %s\n" diff --git a/src/bin/pg_test_fsync/po/es.po b/src/bin/pg_test_fsync/po/es.po index 2fbe9c21515cb..52867707c47bb 100644 --- a/src/bin/pg_test_fsync/po/es.po +++ b/src/bin/pg_test_fsync/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_test_fsync (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:47+0000\n" +"POT-Creation-Date: 2020-09-13 10:47+0000\n" "PO-Revision-Date: 2019-06-06 17:25-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/bin/pg_test_fsync/po/fr.po b/src/bin/pg_test_fsync/po/fr.po index 184c66b91fb41..cc9800aa24add 100644 --- a/src/bin/pg_test_fsync/po/fr.po +++ b/src/bin/pg_test_fsync/po/fr.po @@ -6,80 +6,70 @@ msgid "" msgstr "" "Project-Id-Version: pg_test_fsync (PostgreSQL) 12\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2017-08-26 21:16+0000\n" -"PO-Revision-Date: 2017-08-27 09:02+0200\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-04-15 01:49+0000\n" +"PO-Revision-Date: 2021-04-15 08:43+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.3\n" +"X-Generator: Poedit 2.4.2\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. translator: maintain alignment with NA_FORMAT -#: pg_test_fsync.c:30 +#: pg_test_fsync.c:31 #, c-format msgid "%13.3f ops/sec %6.0f usecs/op\n" msgstr "%13.3f ops/sec %6.0f usecs/op\n" -#: pg_test_fsync.c:49 -#, c-format -msgid "Could not create thread for alarm\n" -msgstr "N'a pas pu créer un thread pour l'alarme\n" - -#: pg_test_fsync.c:154 +#: pg_test_fsync.c:159 #, c-format msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n" msgstr "Usage: %s [-f NOMFICHIER] [-s SECS-PAR-TEST]\n" -#: pg_test_fsync.c:178 pg_test_fsync.c:190 +#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayez « %s --help » pour plus d'informations.\n" -#: pg_test_fsync.c:188 +#: pg_test_fsync.c:216 #, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" +msgid "%u second per test\n" +msgid_plural "%u seconds per test\n" +msgstr[0] "%u seconde par test\n" +msgstr[1] "%u secondes par test\n" -#: pg_test_fsync.c:195 -#, c-format -msgid "%d second per test\n" -msgid_plural "%d seconds per test\n" -msgstr[0] "%d seconde par test\n" -msgstr[1] "%d secondes par test\n" - -#: pg_test_fsync.c:200 +#: pg_test_fsync.c:221 #, c-format msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n" msgstr "O_DIRECT supporté sur cette plateforme pour open_datasync et open_sync.\n" -#: pg_test_fsync.c:202 +#: pg_test_fsync.c:223 #, c-format msgid "Direct I/O is not supported on this platform.\n" msgstr "Direct I/O n'est pas supporté sur cette plateforme.\n" -#: pg_test_fsync.c:227 pg_test_fsync.c:291 pg_test_fsync.c:315 -#: pg_test_fsync.c:338 pg_test_fsync.c:479 pg_test_fsync.c:491 -#: pg_test_fsync.c:507 pg_test_fsync.c:513 pg_test_fsync.c:538 +#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339 +#: pg_test_fsync.c:363 pg_test_fsync.c:506 pg_test_fsync.c:518 +#: pg_test_fsync.c:534 pg_test_fsync.c:540 pg_test_fsync.c:562 msgid "could not open output file" msgstr "n'a pas pu ouvrir le fichier en sortie" -#: pg_test_fsync.c:230 pg_test_fsync.c:272 pg_test_fsync.c:297 -#: pg_test_fsync.c:321 pg_test_fsync.c:344 pg_test_fsync.c:382 -#: pg_test_fsync.c:440 pg_test_fsync.c:481 pg_test_fsync.c:509 -#: pg_test_fsync.c:540 +#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323 +#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:410 +#: pg_test_fsync.c:469 pg_test_fsync.c:508 pg_test_fsync.c:536 +#: pg_test_fsync.c:567 msgid "write failed" msgstr "échec en écriture" -#: pg_test_fsync.c:234 pg_test_fsync.c:323 pg_test_fsync.c:346 -#: pg_test_fsync.c:483 pg_test_fsync.c:515 +#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374 +#: pg_test_fsync.c:510 pg_test_fsync.c:542 msgid "fsync failed" msgstr "échec de la synchronisation (fsync)" -#: pg_test_fsync.c:248 +#: pg_test_fsync.c:270 #, c-format msgid "" "\n" @@ -88,7 +78,7 @@ msgstr "" "\n" "Comparer les méthodes de synchronisation de fichier en utilisant une écriture de %d Ko :\n" -#: pg_test_fsync.c:250 +#: pg_test_fsync.c:272 #, c-format msgid "" "\n" @@ -97,26 +87,21 @@ msgstr "" "\n" "Comparer les méthodes de synchronisation de fichier sur disque en utilisant deux écritures de %d Ko :\n" -#: pg_test_fsync.c:251 +#: pg_test_fsync.c:273 #, c-format msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n" msgstr "(dans l'ordre de préférence de wal_sync_method, sauf fdatasync qui est la valeur par défaut sous Linux)\n" -#: pg_test_fsync.c:262 pg_test_fsync.c:365 pg_test_fsync.c:431 +#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:457 msgid "n/a*" msgstr "n/a*" -#: pg_test_fsync.c:274 pg_test_fsync.c:300 pg_test_fsync.c:325 -#: pg_test_fsync.c:348 pg_test_fsync.c:384 pg_test_fsync.c:442 -msgid "seek failed" -msgstr "seek échoué" - -#: pg_test_fsync.c:280 pg_test_fsync.c:305 pg_test_fsync.c:353 -#: pg_test_fsync.c:390 pg_test_fsync.c:448 +#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379 +#: pg_test_fsync.c:416 pg_test_fsync.c:475 msgid "n/a" msgstr "n/a" -#: pg_test_fsync.c:395 +#: pg_test_fsync.c:421 #, c-format msgid "" "* This file system and its mount options do not support direct\n" @@ -125,7 +110,7 @@ msgstr "" "* Ce système de fichiers et ses options de montage ne supportent pas les\n" " I/O directes, par exemple ext4 en journalisé.\n" -#: pg_test_fsync.c:403 +#: pg_test_fsync.c:429 #, c-format msgid "" "\n" @@ -134,7 +119,7 @@ msgstr "" "\n" "Comparer open_sync avec différentes tailles d'écriture :\n" -#: pg_test_fsync.c:404 +#: pg_test_fsync.c:430 #, c-format msgid "" "(This is designed to compare the cost of writing 16kB in different write\n" @@ -143,27 +128,27 @@ msgstr "" "(Ceci est conçu pour comparer le coût d'écriture de 16 Ko dans différentes tailles\n" "d'écritures open_sync.)\n" -#: pg_test_fsync.c:407 +#: pg_test_fsync.c:433 msgid " 1 * 16kB open_sync write" msgstr " 1 * 16 Ko, écriture avec open_sync" -#: pg_test_fsync.c:408 +#: pg_test_fsync.c:434 msgid " 2 * 8kB open_sync writes" msgstr " 2 * 8 Ko, écriture avec open_sync" -#: pg_test_fsync.c:409 +#: pg_test_fsync.c:435 msgid " 4 * 4kB open_sync writes" msgstr " 4 * 4 Ko, écriture avec open_sync" -#: pg_test_fsync.c:410 +#: pg_test_fsync.c:436 msgid " 8 * 2kB open_sync writes" msgstr " 8 * 2 Ko, écriture avec open_sync" -#: pg_test_fsync.c:411 +#: pg_test_fsync.c:437 msgid "16 * 1kB open_sync writes" msgstr " 16 * 1 Ko, écriture avec open_sync" -#: pg_test_fsync.c:464 +#: pg_test_fsync.c:491 #, c-format msgid "" "\n" @@ -172,7 +157,7 @@ msgstr "" "\n" "Teste si fsync est honoré sur un descripteur de fichiers sans écriture :\n" -#: pg_test_fsync.c:465 +#: pg_test_fsync.c:492 #, c-format msgid "" "(If the times are similar, fsync() can sync data written on a different\n" @@ -181,7 +166,7 @@ msgstr "" "(Si les temps sont similaires, fsync() peut synchroniser sur disque les données écrites sur\n" "un descripteur différent.)\n" -#: pg_test_fsync.c:530 +#: pg_test_fsync.c:557 #, c-format msgid "" "\n" @@ -190,7 +175,14 @@ msgstr "" "\n" "%d Ko d'écritures non synchronisées :\n" -#: pg_test_fsync.c:607 -#, c-format -msgid "%s: %s\n" -msgstr "%s : %s\n" +#~ msgid "%s: %s\n" +#~ msgstr "%s : %s\n" + +#~ msgid "seek failed" +#~ msgstr "seek échoué" + +#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" +#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" + +#~ msgid "Could not create thread for alarm\n" +#~ msgstr "N'a pas pu créer un thread pour l'alarme\n" diff --git a/src/bin/pg_test_fsync/po/ru.po b/src/bin/pg_test_fsync/po/ru.po index 084c5e2113242..a73b146ade174 100644 --- a/src/bin/pg_test_fsync/po/ru.po +++ b/src/bin/pg_test_fsync/po/ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_test_fsync (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-09 12:21+0300\n" +"POT-Creation-Date: 2020-09-03 11:22+0300\n" "PO-Revision-Date: 2017-09-21 14:03+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -18,22 +18,22 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. translator: maintain alignment with NA_FORMAT -#: pg_test_fsync.c:31 +#: pg_test_fsync.c:30 #, c-format msgid "%13.3f ops/sec %6.0f usecs/op\n" msgstr "%13.3f оп/с %6.0f мкс/оп\n" -#: pg_test_fsync.c:157 +#: pg_test_fsync.c:156 #, c-format msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n" msgstr "Использование: %s [-f ИМЯ_ФАЙЛА ] [-s ТЕСТ_СЕК]\n" -#: pg_test_fsync.c:181 pg_test_fsync.c:192 +#: pg_test_fsync.c:180 pg_test_fsync.c:191 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_test_fsync.c:197 +#: pg_test_fsync.c:196 #, c-format msgid "%d second per test\n" msgid_plural "%d seconds per test\n" @@ -41,36 +41,36 @@ msgstr[0] "на тест отводится %d сек.\n" msgstr[1] "на тест отводится %d сек.\n" msgstr[2] "на тест отводится %d сек.\n" -#: pg_test_fsync.c:202 +#: pg_test_fsync.c:201 #, c-format msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n" msgstr "" "O_DIRECT на этой платформе не поддерживается для open_datasync и open_sync.\n" -#: pg_test_fsync.c:204 +#: pg_test_fsync.c:203 #, c-format msgid "Direct I/O is not supported on this platform.\n" msgstr "Прямой ввод/вывод не поддерживается на этой платформе.\n" -#: pg_test_fsync.c:229 pg_test_fsync.c:294 pg_test_fsync.c:318 -#: pg_test_fsync.c:341 pg_test_fsync.c:482 pg_test_fsync.c:494 -#: pg_test_fsync.c:510 pg_test_fsync.c:516 pg_test_fsync.c:541 +#: pg_test_fsync.c:228 pg_test_fsync.c:293 pg_test_fsync.c:317 +#: pg_test_fsync.c:340 pg_test_fsync.c:481 pg_test_fsync.c:493 +#: pg_test_fsync.c:509 pg_test_fsync.c:515 pg_test_fsync.c:540 msgid "could not open output file" msgstr "не удалось открыть выходной файл" -#: pg_test_fsync.c:233 pg_test_fsync.c:275 pg_test_fsync.c:300 -#: pg_test_fsync.c:324 pg_test_fsync.c:347 pg_test_fsync.c:385 -#: pg_test_fsync.c:443 pg_test_fsync.c:484 pg_test_fsync.c:512 -#: pg_test_fsync.c:543 +#: pg_test_fsync.c:232 pg_test_fsync.c:274 pg_test_fsync.c:299 +#: pg_test_fsync.c:323 pg_test_fsync.c:346 pg_test_fsync.c:384 +#: pg_test_fsync.c:442 pg_test_fsync.c:483 pg_test_fsync.c:511 +#: pg_test_fsync.c:542 msgid "write failed" msgstr "ошибка записи" -#: pg_test_fsync.c:237 pg_test_fsync.c:326 pg_test_fsync.c:349 -#: pg_test_fsync.c:486 pg_test_fsync.c:518 +#: pg_test_fsync.c:236 pg_test_fsync.c:325 pg_test_fsync.c:348 +#: pg_test_fsync.c:485 pg_test_fsync.c:517 msgid "fsync failed" msgstr "ошибка синхронизации с ФС" -#: pg_test_fsync.c:251 +#: pg_test_fsync.c:250 #, c-format msgid "" "\n" @@ -79,7 +79,7 @@ msgstr "" "\n" "Сравнение методов синхронизации файлов при однократной записи %d КБ:\n" -#: pg_test_fsync.c:253 +#: pg_test_fsync.c:252 #, c-format msgid "" "\n" @@ -88,7 +88,7 @@ msgstr "" "\n" "Сравнение методов синхронизации файлов при двухкратной записи %d КБ:\n" -#: pg_test_fsync.c:254 +#: pg_test_fsync.c:253 #, c-format msgid "" "(in wal_sync_method preference order, except fdatasync is Linux's default)\n" @@ -96,21 +96,21 @@ msgstr "" "(в порядке предпочтения для wal_sync_method, без учёта наибольшего " "предпочтения fdatasync в Linux)\n" -#: pg_test_fsync.c:265 pg_test_fsync.c:368 pg_test_fsync.c:434 +#: pg_test_fsync.c:264 pg_test_fsync.c:367 pg_test_fsync.c:433 msgid "n/a*" msgstr "н/д*" -#: pg_test_fsync.c:277 pg_test_fsync.c:303 pg_test_fsync.c:328 -#: pg_test_fsync.c:351 pg_test_fsync.c:387 pg_test_fsync.c:445 +#: pg_test_fsync.c:276 pg_test_fsync.c:302 pg_test_fsync.c:327 +#: pg_test_fsync.c:350 pg_test_fsync.c:386 pg_test_fsync.c:444 msgid "seek failed" msgstr "ошибка позиционирования" -#: pg_test_fsync.c:283 pg_test_fsync.c:308 pg_test_fsync.c:356 -#: pg_test_fsync.c:393 pg_test_fsync.c:451 +#: pg_test_fsync.c:282 pg_test_fsync.c:307 pg_test_fsync.c:355 +#: pg_test_fsync.c:392 pg_test_fsync.c:450 msgid "n/a" msgstr "н/д" -#: pg_test_fsync.c:398 +#: pg_test_fsync.c:397 #, c-format msgid "" "* This file system and its mount options do not support direct\n" @@ -119,7 +119,7 @@ msgstr "" "* Эта файловая система с текущими параметрами монтирования не поддерживает\n" " прямой ввод/вывод, как например, ext4 в режиме журналирования.\n" -#: pg_test_fsync.c:406 +#: pg_test_fsync.c:405 #, c-format msgid "" "\n" @@ -128,7 +128,7 @@ msgstr "" "\n" "Сравнение open_sync при различных объёмах записываемых данных:\n" -#: pg_test_fsync.c:407 +#: pg_test_fsync.c:406 #, c-format msgid "" "(This is designed to compare the cost of writing 16kB in different write\n" @@ -139,27 +139,27 @@ msgstr "" "записи с open_sync.)\n" # skip-rule: double-space -#: pg_test_fsync.c:410 +#: pg_test_fsync.c:409 msgid " 1 * 16kB open_sync write" msgstr "запись с open_sync 1 * 16 КБ" -#: pg_test_fsync.c:411 +#: pg_test_fsync.c:410 msgid " 2 * 8kB open_sync writes" msgstr "запись с open_sync 2 * 8 КБ" -#: pg_test_fsync.c:412 +#: pg_test_fsync.c:411 msgid " 4 * 4kB open_sync writes" msgstr "запись с open_sync 4 * 4 КБ" -#: pg_test_fsync.c:413 +#: pg_test_fsync.c:412 msgid " 8 * 2kB open_sync writes" msgstr "запись с open_sync 8 * 2 КБ" -#: pg_test_fsync.c:414 +#: pg_test_fsync.c:413 msgid "16 * 1kB open_sync writes" msgstr "запись с open_sync 16 * 1 КБ" -#: pg_test_fsync.c:467 +#: pg_test_fsync.c:466 #, c-format msgid "" "\n" @@ -169,7 +169,7 @@ msgstr "" "Проверка, производится ли fsync с указателем файла, открытого не для " "записи:\n" -#: pg_test_fsync.c:468 +#: pg_test_fsync.c:467 #, c-format msgid "" "(If the times are similar, fsync() can sync data written on a different\n" @@ -179,7 +179,7 @@ msgstr "" "данные,\n" "записанные через другой дескриптор.)\n" -#: pg_test_fsync.c:533 +#: pg_test_fsync.c:532 #, c-format msgid "" "\n" diff --git a/src/bin/pg_test_fsync/po/uk.po b/src/bin/pg_test_fsync/po/uk.po index 35b02906e7f7c..e12dba9aaea2b 100644 --- a/src/bin/pg_test_fsync/po/uk.po +++ b/src/bin/pg_test_fsync/po/uk.po @@ -1,20 +1,21 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2018-12-04 20:35+0100\n" -"PO-Revision-Date: 2019-08-10 13:19\n" -"Last-Translator: pasha_golub\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:17+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_11_STABLE/src/bin/pg_test_fsync/po/pg_test_fsync.pot\n" +"X-Crowdin-File: /DEV_13/pg_test_fsync.pot\n" +"X-Crowdin-File-ID: 506\n" #. translator: maintain alignment with NA_FORMAT #: pg_test_fsync.c:30 @@ -22,27 +23,17 @@ msgstr "" msgid "%13.3f ops/sec %6.0f usecs/op\n" msgstr "%13.3f оп/с %6.0f мкс/оп\n" -#: pg_test_fsync.c:49 -#, c-format -msgid "Could not create thread for alarm\n" -msgstr "Не вдалося створити потік для обробки сигналів\n" - -#: pg_test_fsync.c:154 +#: pg_test_fsync.c:156 #, c-format msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n" msgstr "Використання: %s [-f FILENAME] [-s SECS-PER-TEST]\n" -#: pg_test_fsync.c:178 pg_test_fsync.c:190 +#: pg_test_fsync.c:180 pg_test_fsync.c:191 #, c-format msgid "Try \"%s --help\" for more information.\n" -msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" -#: pg_test_fsync.c:188 -#, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s: забагато аргументів у командному рядку (перший \"%s\")\n" - -#: pg_test_fsync.c:195 +#: pg_test_fsync.c:196 #, c-format msgid "%d second per test\n" msgid_plural "%d seconds per test\n" @@ -51,130 +42,125 @@ msgstr[1] "%d секунди для тесту\n" msgstr[2] "%d секунд для тесту\n" msgstr[3] "%d секунда для тесту\n" -#: pg_test_fsync.c:200 +#: pg_test_fsync.c:201 #, c-format msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n" msgstr "O_DIRECT на цій платформі підтримується для open_datasync і open_sync.\n" -#: pg_test_fsync.c:202 +#: pg_test_fsync.c:203 #, c-format msgid "Direct I/O is not supported on this platform.\n" msgstr "Пряме введення/виведення не підтримується на цій платформі.\n" -#: pg_test_fsync.c:227 pg_test_fsync.c:292 pg_test_fsync.c:316 -#: pg_test_fsync.c:339 pg_test_fsync.c:480 pg_test_fsync.c:492 -#: pg_test_fsync.c:508 pg_test_fsync.c:514 pg_test_fsync.c:539 +#: pg_test_fsync.c:228 pg_test_fsync.c:293 pg_test_fsync.c:317 +#: pg_test_fsync.c:340 pg_test_fsync.c:481 pg_test_fsync.c:493 +#: pg_test_fsync.c:509 pg_test_fsync.c:515 pg_test_fsync.c:540 msgid "could not open output file" msgstr "неможливо відкрити файл виводу" -#: pg_test_fsync.c:231 pg_test_fsync.c:273 pg_test_fsync.c:298 -#: pg_test_fsync.c:322 pg_test_fsync.c:345 pg_test_fsync.c:383 -#: pg_test_fsync.c:441 pg_test_fsync.c:482 pg_test_fsync.c:510 -#: pg_test_fsync.c:541 +#: pg_test_fsync.c:232 pg_test_fsync.c:274 pg_test_fsync.c:299 +#: pg_test_fsync.c:323 pg_test_fsync.c:346 pg_test_fsync.c:384 +#: pg_test_fsync.c:442 pg_test_fsync.c:483 pg_test_fsync.c:511 +#: pg_test_fsync.c:542 msgid "write failed" msgstr "записування не вдалося" -#: pg_test_fsync.c:235 pg_test_fsync.c:324 pg_test_fsync.c:347 -#: pg_test_fsync.c:484 pg_test_fsync.c:516 +#: pg_test_fsync.c:236 pg_test_fsync.c:325 pg_test_fsync.c:348 +#: pg_test_fsync.c:485 pg_test_fsync.c:517 msgid "fsync failed" msgstr "помилка fsync" -#: pg_test_fsync.c:249 +#: pg_test_fsync.c:250 #, c-format msgid "\n" "Compare file sync methods using one %dkB write:\n" msgstr "\n" "Порівнювання методів синхронізації файлу, використовуючи один запис %dkB:\n" -#: pg_test_fsync.c:251 +#: pg_test_fsync.c:252 #, c-format msgid "\n" "Compare file sync methods using two %dkB writes:\n" msgstr "\n" "Порівнювання методів синхронізації файлу, використовуючи два записи %dkB: \n" -#: pg_test_fsync.c:252 +#: pg_test_fsync.c:253 #, c-format msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n" msgstr "(в порядку переваги для wal_sync_method, окрім переваги fdatasync в Linux)\n" -#: pg_test_fsync.c:263 pg_test_fsync.c:366 pg_test_fsync.c:432 +#: pg_test_fsync.c:264 pg_test_fsync.c:367 pg_test_fsync.c:433 msgid "n/a*" msgstr "н/д*" -#: pg_test_fsync.c:275 pg_test_fsync.c:301 pg_test_fsync.c:326 -#: pg_test_fsync.c:349 pg_test_fsync.c:385 pg_test_fsync.c:443 +#: pg_test_fsync.c:276 pg_test_fsync.c:302 pg_test_fsync.c:327 +#: pg_test_fsync.c:350 pg_test_fsync.c:386 pg_test_fsync.c:444 msgid "seek failed" msgstr "помилка пошуку" -#: pg_test_fsync.c:281 pg_test_fsync.c:306 pg_test_fsync.c:354 -#: pg_test_fsync.c:391 pg_test_fsync.c:449 +#: pg_test_fsync.c:282 pg_test_fsync.c:307 pg_test_fsync.c:355 +#: pg_test_fsync.c:392 pg_test_fsync.c:450 msgid "n/a" msgstr "н/д" -#: pg_test_fsync.c:396 +#: pg_test_fsync.c:397 #, c-format msgid "* This file system and its mount options do not support direct\n" " I/O, e.g. ext4 in journaled mode.\n" msgstr "* Ця файлова система з поточними параметрами монтування не підтримує\n" " пряме введення/виведення, наприклад, ext4 в режимі журналювання.\n" -#: pg_test_fsync.c:404 +#: pg_test_fsync.c:405 #, c-format msgid "\n" "Compare open_sync with different write sizes:\n" msgstr "\n" "Порівняння open_sync з різними розмірами записування:\n" -#: pg_test_fsync.c:405 +#: pg_test_fsync.c:406 #, c-format msgid "(This is designed to compare the cost of writing 16kB in different write\n" "open_sync sizes.)\n" msgstr "(Це створено для порівняння вартості запису 16 КБ з різними розмірами\n" "записування open_sync.)\n" -#: pg_test_fsync.c:408 +#: pg_test_fsync.c:409 msgid " 1 * 16kB open_sync write" msgstr " запис з open_sync 1 * 16 КБ" -#: pg_test_fsync.c:409 +#: pg_test_fsync.c:410 msgid " 2 * 8kB open_sync writes" msgstr " запис з open_sync 2 * 8 КБ" -#: pg_test_fsync.c:410 +#: pg_test_fsync.c:411 msgid " 4 * 4kB open_sync writes" msgstr " запис з open_sync 4 * 4 КБ" -#: pg_test_fsync.c:411 +#: pg_test_fsync.c:412 msgid " 8 * 2kB open_sync writes" msgstr " запис з open_sync 8 * 2 КБ" -#: pg_test_fsync.c:412 +#: pg_test_fsync.c:413 msgid "16 * 1kB open_sync writes" msgstr "запис з open_sync 16 * 1 КБ" -#: pg_test_fsync.c:465 +#: pg_test_fsync.c:466 #, c-format msgid "\n" "Test if fsync on non-write file descriptor is honored:\n" msgstr "\n" "Перевірка, чи здійснюється fsync з дескриптором файлу, відкритого не для запису:\n" -#: pg_test_fsync.c:466 +#: pg_test_fsync.c:467 #, c-format msgid "(If the times are similar, fsync() can sync data written on a different\n" "descriptor.)\n" msgstr "(Якщо час однаковий, fsync() може синхронізувати дані, записані іншим дескриптором.)\n" -#: pg_test_fsync.c:531 +#: pg_test_fsync.c:532 #, c-format msgid "\n" "Non-sync'ed %dkB writes:\n" msgstr "\n" "Несинхронізований запис %d КБ:\n" -#: pg_test_fsync.c:608 -#, c-format -msgid "%s: %s\n" -msgstr "%s: %s\n" - diff --git a/src/bin/pg_test_timing/po/de.po b/src/bin/pg_test_timing/po/de.po index 57984f8dd9d3c..6bcbc73064caf 100644 --- a/src/bin/pg_test_timing/po/de.po +++ b/src/bin/pg_test_timing/po/de.po @@ -1,17 +1,16 @@ # German message translation file for pg_test_timing -# Copyright (C) 2017 PostgreSQL Global Development Group +# Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Peter Eisentraut , 2017. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: pg_test_timing (PostgreSQL) 10\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2017-08-26 15:45+0000\n" -"PO-Revision-Date: 2017-08-26 12:30-0400\n" -"Last-Translator: Peter Eisentraut \n" +"Project-Id-Version: pg_test_timing (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-04-12 14:17+0000\n" +"PO-Revision-Date: 2021-04-12 16:37+0200\n" +"Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" @@ -19,62 +18,67 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: pg_test_timing.c:55 +#: pg_test_timing.c:59 #, c-format msgid "Usage: %s [-d DURATION]\n" msgstr "Aufruf: %s [-d DAUER]\n" -#: pg_test_timing.c:75 pg_test_timing.c:87 pg_test_timing.c:104 +#: pg_test_timing.c:81 +#, c-format +msgid "%s: invalid argument for option %s\n" +msgstr "%s: ungültiges Argument für Option %s\n" + +#: pg_test_timing.c:83 pg_test_timing.c:97 pg_test_timing.c:109 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: pg_test_timing.c:85 +#: pg_test_timing.c:90 #, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s: zu viele Kommandozeilenargumente (das erste ist »%s«)\n" +msgid "%s: %s must be in range %u..%u\n" +msgstr "%s: %s muss im Bereich %u..%u sein\n" -#: pg_test_timing.c:94 +#: pg_test_timing.c:107 #, c-format -msgid "Testing timing overhead for %d second.\n" -msgid_plural "Testing timing overhead for %d seconds.\n" -msgstr[0] "Testen des Overheads der Zeitmessung für %d Sekunde\n" -msgstr[1] "Testen des Overheads der Zeitmessung für %d Sekunden\n" +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: zu viele Kommandozeilenargumente (das erste ist »%s«)\n" -#: pg_test_timing.c:102 +#: pg_test_timing.c:115 #, c-format -msgid "%s: duration must be a positive integer (duration is \"%d\")\n" -msgstr "%s: Dauer muss eine positive ganze Zahl sein (Dauer ist »%d«)\n" +msgid "Testing timing overhead for %u second.\n" +msgid_plural "Testing timing overhead for %u seconds.\n" +msgstr[0] "Testen des Overheads der Zeitmessung für %u Sekunde\n" +msgstr[1] "Testen des Overheads der Zeitmessung für %u Sekunden\n" -#: pg_test_timing.c:140 +#: pg_test_timing.c:151 #, c-format msgid "Detected clock going backwards in time.\n" msgstr "Rückwärts gehende Uhr festgestellt.\n" -#: pg_test_timing.c:141 +#: pg_test_timing.c:152 #, c-format msgid "Time warp: %d ms\n" msgstr "Zeitdifferenz: %d ms\n" -#: pg_test_timing.c:164 +#: pg_test_timing.c:175 #, c-format msgid "Per loop time including overhead: %0.2f ns\n" msgstr "Zeit pro Durchlauf einschließlich Overhead: %0.2f ns\n" -#: pg_test_timing.c:175 +#: pg_test_timing.c:186 msgid "< us" msgstr "< µs" -#: pg_test_timing.c:176 +#: pg_test_timing.c:187 #, no-c-format msgid "% of total" msgstr "% von gesamt" -#: pg_test_timing.c:177 +#: pg_test_timing.c:188 msgid "count" msgstr "Anzahl" -#: pg_test_timing.c:186 +#: pg_test_timing.c:197 #, c-format msgid "Histogram of timing durations:\n" msgstr "Histogramm der Dauern der Zeitmessungen:\n" diff --git a/src/bin/pg_test_timing/po/fr.po b/src/bin/pg_test_timing/po/fr.po index 94123570c7456..17d321c60d902 100644 --- a/src/bin/pg_test_timing/po/fr.po +++ b/src/bin/pg_test_timing/po/fr.po @@ -6,9 +6,9 @@ msgid "" msgstr "" "Project-Id-Version: pg_test_timing (PostgreSQL) 12\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2017-11-06 09:45+0000\n" -"PO-Revision-Date: 2017-11-11 14:21+0100\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-04-22 04:17+0000\n" +"PO-Revision-Date: 2021-04-22 10:10+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -16,64 +16,72 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -"X-Generator: Poedit 2.0.3\n" +"X-Generator: Poedit 2.4.2\n" -#: pg_test_timing.c:55 +#: pg_test_timing.c:59 #, c-format msgid "Usage: %s [-d DURATION]\n" msgstr "Usage: %s [-d DURÉE]\n" -#: pg_test_timing.c:75 pg_test_timing.c:87 pg_test_timing.c:104 +#: pg_test_timing.c:81 +#, c-format +msgid "%s: invalid argument for option %s\n" +msgstr "%s : argument invalide pour l'option %s\n" + +#: pg_test_timing.c:83 pg_test_timing.c:97 pg_test_timing.c:109 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayez « %s --help » pour plus d'informations.\n" -#: pg_test_timing.c:85 +#: pg_test_timing.c:90 #, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" +msgid "%s: %s must be in range %u..%u\n" +msgstr "%s : %s doit être compris entre %u et %u\n" -#: pg_test_timing.c:94 +#: pg_test_timing.c:107 #, c-format -msgid "Testing timing overhead for %d second.\n" -msgid_plural "Testing timing overhead for %d seconds.\n" -msgstr[0] "Test du coût du chronométrage pour %d seconde.\n" -msgstr[1] "Test du coût du chronométrage pour %d secondes.\n" +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" -#: pg_test_timing.c:102 +#: pg_test_timing.c:115 #, c-format -msgid "%s: duration must be a positive integer (duration is \"%d\")\n" -msgstr "%s : la durée doit être un entier positif (la durée est « %d »)\n" +msgid "Testing timing overhead for %u second.\n" +msgid_plural "Testing timing overhead for %u seconds.\n" +msgstr[0] "Test du coût du chronométrage pour %u seconde.\n" +msgstr[1] "Test du coût du chronométrage pour %u secondes.\n" -#: pg_test_timing.c:140 +#: pg_test_timing.c:151 #, c-format msgid "Detected clock going backwards in time.\n" msgstr "Détection d'une horloge partant à rebours.\n" -#: pg_test_timing.c:141 +#: pg_test_timing.c:152 #, c-format msgid "Time warp: %d ms\n" msgstr "Décalage de temps : %d ms\n" -#: pg_test_timing.c:164 +#: pg_test_timing.c:175 #, c-format msgid "Per loop time including overhead: %0.2f ns\n" msgstr "Durée par boucle incluant le coût : %0.2f ns\n" -#: pg_test_timing.c:175 +#: pg_test_timing.c:186 msgid "< us" msgstr "< us" -#: pg_test_timing.c:176 +#: pg_test_timing.c:187 #, no-c-format msgid "% of total" msgstr "% du total" -#: pg_test_timing.c:177 +#: pg_test_timing.c:188 msgid "count" msgstr "nombre" -#: pg_test_timing.c:186 +#: pg_test_timing.c:197 #, c-format msgid "Histogram of timing durations:\n" msgstr "Histogramme des durées de chronométrage\n" + +#~ msgid "%s: duration must be a positive integer (duration is \"%d\")\n" +#~ msgstr "%s : la durée doit être un entier positif (la durée est « %d »)\n" diff --git a/src/bin/pg_upgrade/nls.mk b/src/bin/pg_upgrade/nls.mk index fa05b3292b142..06308bdf78884 100644 --- a/src/bin/pg_upgrade/nls.mk +++ b/src/bin/pg_upgrade/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_upgrade/nls.mk CATALOG_NAME = pg_upgrade -AVAIL_LANGUAGES = cs de es fr ja ko ru sv tr zh_CN +AVAIL_LANGUAGES = cs de es fr ja ko ru sv tr uk zh_CN GETTEXT_FILES = check.c controldata.c dump.c exec.c file.c function.c \ info.c option.c parallel.c pg_upgrade.c relfilenode.c \ server.c tablespace.c util.c version.c diff --git a/src/bin/pg_upgrade/po/cs.po b/src/bin/pg_upgrade/po/cs.po index da9d1ef1ed8f7..9ffcaca49fd63 100644 --- a/src/bin/pg_upgrade/po/cs.po +++ b/src/bin/pg_upgrade/po/cs.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 11\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:14+0000\n" -"PO-Revision-Date: 2019-09-27 20:18+0200\n" +"POT-Creation-Date: 2020-10-31 16:15+0000\n" +"PO-Revision-Date: 2020-10-31 21:14+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" #: check.c:67 #, c-format @@ -35,7 +35,7 @@ msgstr "" "Provádím Kontrolu Konzistence\n" "-----------------------------\n" -#: check.c:183 +#: check.c:193 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "*Clustery jsou kompatibilní*\n" -#: check.c:189 +#: check.c:199 #, c-format msgid "" "\n" @@ -55,7 +55,7 @@ msgstr "" "Pokud pg_upgrade selže po tomto místě, musíte reinicializovat\n" "(initdb) nový cluster než budete pokračovat.\n" -#: check.c:225 +#: check.c:233 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade so,\n" @@ -68,20 +68,7 @@ msgstr "" " %s\n" "\n" -#: check.c:230 -#, c-format -msgid "" -"Optimizer statistics and free space information are not transferred\n" -"by pg_upgrade so, once you start the new server, consider running:\n" -" %s\n" -"\n" -msgstr "" -"Statistiky optimalizéru a informace o volném místě nejsou zachovány\n" -"při pg_upgrade, takže po nastartování nového serveru zvažte spuštění:\n" -" %s\n" -"\n" - -#: check.c:237 +#: check.c:239 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -90,7 +77,7 @@ msgstr "" "Spuštění tohoto skriptu smaže datové soubory starého clusteru:\n" " %s\n" -#: check.c:242 +#: check.c:244 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -103,85 +90,95 @@ msgstr "" "clusteru jsou v adresáři starého clusteru. Obsah starého clusteru musí\n" "být smazán manuálně.\n" -#: check.c:252 +#: check.c:254 #, c-format msgid "Checking cluster versions" msgstr "Kontroluji verze clusterů" -#: check.c:264 +#: check.c:266 #, c-format msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" msgstr "Tato utilita může upgradovat pouze z PostgreSQL verze 8.4 a novějších.\n" -#: check.c:268 +#: check.c:270 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Tato utilita může upgradovat pouze na PostgreSQL verze %s.\n" -#: check.c:277 +#: check.c:279 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Tato utilita nemůže být použita pro downgrade na starší major PostgreSQL verze.\n" -#: check.c:282 +#: check.c:284 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "Data a binární adresáře starého clusteru jsou z jiných major verzí.\n" -#: check.c:285 +#: check.c:287 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "Data a binární adresáře nového clusteru jsou z různých minárních verzí.\n" -#: check.c:302 +#: check.c:304 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Při kontrole pre-PG 9.1 živého starého serveru, musíte zadat číslo portu starého serveru.\n" -#: check.c:306 +#: check.c:308 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Při kontrole živého serveru, staré a nové číslo portu musí být různá.\n" -#: check.c:321 +#: check.c:323 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "kódování databáze \"%s\" neodpovídají: stará \"%s\", nová \"%s\"\n" -#: check.c:326 +#: check.c:328 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_collate hodnoty pro databázi \"%s\" neodpovídají: stará \"%s\", nová \"%s\"\n" -#: check.c:329 +#: check.c:331 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_ctype hodnoty pro databázi \"%s\" neodpovídají: stará \"%s\", nová \"%s\"\n" -#: check.c:402 +#: check.c:404 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "Databáze \"%s\" na novém clusteru není prázdná: nalezena relace \"%s.%s\"\n" -#: check.c:451 +#: check.c:453 #, c-format msgid "Creating script to analyze new cluster" msgstr "Vytvářím skript pro analyze nového clusteru" -#: check.c:465 check.c:593 check.c:857 check.c:936 check.c:1045 check.c:1136 -#: file.c:341 function.c:246 option.c:495 version.c:57 version.c:156 -#: version.c:257 version.c:339 +#: check.c:467 check.c:626 check.c:890 check.c:969 check.c:1079 check.c:1170 +#: file.c:336 function.c:240 option.c:497 version.c:54 version.c:199 +#: version.c:341 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "nelze otevřít soubor \"%s\": %s\n" -#: check.c:520 check.c:649 +#: check.c:515 check.c:682 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "nelze přidat právo na spuštění pro soubor \"%s\": %s\n" +#: check.c:545 +#, c-format +msgid "Checking for new cluster tablespace directories" +msgstr "Kontroluji tablespace adresáře v novém clusteru" + #: check.c:556 #, c-format +msgid "new cluster tablespace directory already exists: \"%s\"\n" +msgstr "tablespace adresář v novém clusteru již existuje \"%s\"\n" + +#: check.c:589 +#, c-format msgid "" "\n" "WARNING: new data directory should not be inside the old data directory, e.g. %s\n" @@ -189,7 +186,7 @@ msgstr "" "\n" "VAROVÁNÍ: nový datový adresář by neměl být ve starém datovém adresáři, e.g. %s\n" -#: check.c:580 +#: check.c:613 #, c-format msgid "" "\n" @@ -198,81 +195,81 @@ msgstr "" "\n" "VAROVÁNÍ: umístění uživatelem definovaných tablespaces by neměly být v datovém adresáři, e.g. %s\n" -#: check.c:590 +#: check.c:623 #, c-format msgid "Creating script to delete old cluster" msgstr "Vytvářím skript pro smazání starého clusteru" -#: check.c:669 +#: check.c:702 #, c-format msgid "Checking database user is the install user" msgstr "Kontroluji že databázový uživatel je použit pro instalaci" -#: check.c:685 +#: check.c:718 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "databázový uživatel \"%s\" nebyl použit pro instalaci\n" -#: check.c:696 +#: check.c:729 #, c-format msgid "could not determine the number of users\n" msgstr "nelže určit počet uživatelů\n" -#: check.c:704 +#: check.c:737 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "Pouze instalační uživatel může být definován pro nový cluster.\n" -#: check.c:724 +#: check.c:757 #, c-format msgid "Checking database connection settings" msgstr "Kontroluji nastavení databázového spojení" -#: check.c:746 +#: check.c:779 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 nesmí povolovat spojení, i.e. příslušná hodnota pg_database.datallowconn musí být false\n" -#: check.c:756 +#: check.c:789 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Všechny non-template0 databáze musí povolovat spojení, i.e. jejich pg_database.datallowconn musí být true\n" -#: check.c:781 +#: check.c:814 #, c-format msgid "Checking for prepared transactions" msgstr "Kontroluji prepared transakce" -#: check.c:790 +#: check.c:823 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "Zdrojový cluster obsahuje prepared transakce\n" -#: check.c:792 +#: check.c:825 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "Cílový cluster obsahuje prepared transakce\n" -#: check.c:818 +#: check.c:851 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Kontroluji contrib/isn s bigint-passing rozdílem" -#: check.c:879 check.c:958 check.c:1068 check.c:1159 function.c:268 -#: version.c:179 version.c:280 +#: check.c:912 check.c:991 check.c:1102 check.c:1193 function.c:262 +#: version.c:245 version.c:282 version.c:425 #, c-format msgid "fatal\n" msgstr "fatal\n" -#: check.c:880 +#: check.c:913 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" "bigint data type. Your old and new clusters pass bigint values\n" "differently so this cluster cannot currently be upgraded. You can\n" -"manually upgrade databases that use \"contrib/isn\" facilities and remove\n" -"\"contrib/isn\" from the old cluster and restart the upgrade. A list of\n" -"the problem functions is in the file:\n" +"manually dump databases in the old cluster that use \"contrib/isn\"\n" +"facilities, drop them, perform the upgrade, and then restore them. A\n" +"list of the problem functions is in the file:\n" " %s\n" "\n" msgstr "" @@ -285,16 +282,16 @@ msgstr "" " %s\n" "\n" -#: check.c:904 +#: check.c:937 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Kontrola tabulek s WITH OIDS" -#: check.c:959 +#: check.c:992 #, c-format msgid "" -"Your installation contains tables declared WITH OIDS, which is not supported\n" -"anymore. Consider removing the oid column using\n" +"Your installation contains tables declared WITH OIDS, which is not\n" +"supported anymore. Consider removing the oid column using\n" " ALTER TABLE ... SET WITHOUT OIDS;\n" "A list of tables with the problem is in the file:\n" " %s\n" @@ -307,19 +304,19 @@ msgstr "" " %s\n" "\n" -#: check.c:989 +#: check.c:1022 #, c-format msgid "Checking for reg* data types in user tables" msgstr "Kontroluji reg* datové typy v uživatelských tabulkách" -#: check.c:1069 +#: check.c:1103 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" "These data types reference system OIDs that are not preserved by\n" "pg_upgrade, so this cluster cannot currently be upgraded. You can\n" -"remove the problem tables and restart the upgrade. A list of the problem\n" -"columns is in the file:\n" +"remove the problem tables and restart the upgrade. A list of the\n" +"problem columns is in the file:\n" " %s\n" "\n" msgstr "" @@ -331,18 +328,19 @@ msgstr "" " %s\n" "\n" -#: check.c:1094 +#: check.c:1128 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Kontroluji nekompatibilní \"jsonb\" datový typ" -#: check.c:1160 +#: check.c:1194 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" -"The internal format of \"jsonb\" changed during 9.4 beta so this cluster cannot currently\n" -"be upgraded. You can remove the problem tables and restart the upgrade. A list\n" -"of the problem columns is in the file:\n" +"The internal format of \"jsonb\" changed during 9.4 beta so this\n" +"cluster cannot currently be upgraded. You can remove the problem\n" +"tables and restart the upgrade. A list of the problem columns is\n" +"in the file:\n" " %s\n" "\n" msgstr "" @@ -353,32 +351,32 @@ msgstr "" " %s\n" "\n" -#: check.c:1181 +#: check.c:1216 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Kontroluji existenci rolí začínajících na \"pg_\"" -#: check.c:1191 +#: check.c:1226 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "Zdrojový cluster obsahuje role začínající na \"pg_\"\n" -#: check.c:1193 +#: check.c:1228 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "Cílový cluster obsahuje role začínající na \"pg_\"\n" -#: check.c:1219 +#: check.c:1254 #, c-format msgid "failed to get the current locale\n" msgstr "selhalo získání aktuální hodnoty locale\n" -#: check.c:1228 +#: check.c:1263 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "selhalo získání jména systémové locale pro \"%s\"\n" -#: check.c:1234 +#: check.c:1269 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "selhala obnova staré locale \"%s\"\n" @@ -390,7 +388,6 @@ msgstr "nelze získat control data pomocí %s: %s\n" #: controldata.c:138 #, c-format -#| msgid "%d: pg_resetwal problem\n" msgid "%d: database cluster state problem\n" msgstr "%d: problém se stavem databázového clusteru\n" @@ -402,8 +399,7 @@ msgstr "Zdrojový cluster byl vypnut v recovery módu. Pro upgrade použijte \" #: controldata.c:158 #, c-format msgid "The target cluster was shut down while in recovery mode. To upgrade, use \"rsync\" as documented or shut it down as a primary.\n" -msgstr "" -"Cílový cluster byl vypnut v recovery módu. Pro upgrade použijte \"rsync\" jak je uvedeno v dokumentaci nebo ho vypněte jako primary.\n" +msgstr "Cílový cluster byl vypnut v recovery módu. Pro upgrade použijte \"rsync\" jak je uvedeno v dokumentaci nebo ho vypněte jako primary.\n" #: controldata.c:163 #, c-format @@ -425,8 +421,8 @@ msgstr "Zdrojový cluster postrádá některé nutné informace o stavu:\n" msgid "The target cluster lacks cluster state information:\n" msgstr "Cílový cluster postrádá některé nutné informace o stavu:\n" -#: controldata.c:208 dump.c:51 pg_upgrade.c:336 pg_upgrade.c:373 -#: relfilenode.c:252 util.c:80 +#: controldata.c:208 dump.c:49 pg_upgrade.c:339 pg_upgrade.c:375 +#: relfilenode.c:243 util.c:79 #, c-format msgid "%s" msgstr "%s" @@ -648,12 +644,12 @@ msgstr "" "spuštěn jakmile bude nastartován nový cluster.\n" "\n" -#: dump.c:22 +#: dump.c:20 #, c-format msgid "Creating dump of global objects" msgstr "Vytvářím dump globálních objektů" -#: dump.c:33 +#: dump.c:31 #, c-format msgid "Creating dump of database schemas\n" msgstr "Vytvářím dump databázových schémat\n" @@ -673,12 +669,12 @@ msgstr "nelze získat výstup s pg_ctl verzí z %s\n" msgid "command too long\n" msgstr "příkaz je příliš dlouhý\n" -#: exec.c:110 util.c:38 util.c:226 +#: exec.c:110 util.c:37 util.c:225 #, c-format msgid "%s\n" msgstr "%s\n" -#: exec.c:149 option.c:220 +#: exec.c:149 option.c:217 #, c-format msgid "could not open log file \"%s\": %m\n" msgstr "nelze otevřít logovací soubor \"%s\": %m\n" @@ -715,7 +711,7 @@ msgstr "" "Pro pravděpodobnou příčinu selhání prozkoumejte posledních pár\n" "řádek z \"%s\".\n" -#: exec.c:204 option.c:229 +#: exec.c:204 option.c:226 #, c-format msgid "could not write to log file \"%s\": %m\n" msgstr "nelze zapsat do log souboru \"%s\": %m\n" @@ -730,7 +726,7 @@ msgstr "nelze otevřít soubor \"%s\" pro čtení: %s\n" msgid "You must have read and write access in the current directory.\n" msgstr "Musíte mít práva na čtení a zápis v aktuálním adresáři.\n" -#: exec.c:310 exec.c:372 exec.c:427 +#: exec.c:310 exec.c:372 exec.c:436 #, c-format msgid "check for \"%s\" failed: %s\n" msgstr "kontrola pro \"%s\" selhala: %s\n" @@ -740,92 +736,92 @@ msgstr "kontrola pro \"%s\" selhala: %s\n" msgid "\"%s\" is not a directory\n" msgstr "\"%s\" není adresář\n" -#: exec.c:430 +#: exec.c:439 #, c-format msgid "check for \"%s\" failed: not a regular file\n" msgstr "check for \"%s\" failed: not a regular file\n" -#: exec.c:442 +#: exec.c:451 #, c-format msgid "check for \"%s\" failed: cannot read file (permission denied)\n" msgstr "kontrola \"%s\" selhala: nelze číst soubor (přístup odepřen)\n" -#: exec.c:450 +#: exec.c:459 #, c-format msgid "check for \"%s\" failed: cannot execute (permission denied)\n" msgstr "kontrola \"%s\" selhala: nelze spustit soubor (přístup odepřen)\n" -#: file.c:48 file.c:66 +#: file.c:43 file.c:61 #, c-format msgid "error while cloning relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "chyba při klonování relace \"%s.%s\" (\"%s\" na \"%s\"): %s\n" -#: file.c:55 +#: file.c:50 #, c-format msgid "error while cloning relation \"%s.%s\": could not open file \"%s\": %s\n" msgstr "chyba při klonování relace \"%s.%s\": nelze otevřít soubor \"%s\": %s\n" -#: file.c:60 +#: file.c:55 #, c-format msgid "error while cloning relation \"%s.%s\": could not create file \"%s\": %s\n" msgstr "chyba při klonování relace \"%s.%s\": nelze vytvořit soubor \"%s\": %s\n" -#: file.c:92 file.c:195 +#: file.c:87 file.c:190 #, c-format msgid "error while copying relation \"%s.%s\": could not open file \"%s\": %s\n" msgstr "chyba při kopírování relace \"%s.%s\": nelze otevřít soubor \"%s\": %s\n" -#: file.c:97 file.c:204 +#: file.c:92 file.c:199 #, c-format msgid "error while copying relation \"%s.%s\": could not create file \"%s\": %s\n" msgstr "chyba při kopírování relace \"%s.%s\": nelze vytvořit soubor \"%s\": %s\n" -#: file.c:111 file.c:228 +#: file.c:106 file.c:223 #, c-format msgid "error while copying relation \"%s.%s\": could not read file \"%s\": %s\n" msgstr "chyba při kopírování relace \"%s.%s\": nelze číst ze souboru \"%s\": %s\n" -#: file.c:123 file.c:306 +#: file.c:118 file.c:301 #, c-format msgid "error while copying relation \"%s.%s\": could not write file \"%s\": %s\n" msgstr "chyba při kopírování relace \"%s.%s\": nelze zapsat do souboru \"%s\": %s\n" -#: file.c:137 +#: file.c:132 #, c-format msgid "error while copying relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "chyba při kopírování relace \"%s.%s\" (\"%s\" na \"%s\"): %s\n" -#: file.c:156 +#: file.c:151 #, c-format msgid "error while creating link for relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "chyba při vytváření odkazů pro relaci \"%s.%s\" (\"%s\" na \"%s\"): %s\n" -#: file.c:199 +#: file.c:194 #, c-format msgid "error while copying relation \"%s.%s\": could not stat file \"%s\": %s\n" msgstr "chyba při kopírování relace \"%s.%s\": nelze získat informace o souboru \"%s\": %s\n" -#: file.c:231 +#: file.c:226 #, c-format msgid "error while copying relation \"%s.%s\": partial page found in file \"%s\"\n" msgstr "chyba při kopírování relace \"%s.%s\": částečně zapsaná stránka nalezena v souboru \"%s\"\n" -#: file.c:333 file.c:350 +#: file.c:328 file.c:345 #, c-format msgid "could not clone file between old and new data directories: %s\n" msgstr "nelze klonovat soubory mezi starým a novým datovým adresářem: %s\n" -#: file.c:346 +#: file.c:341 #, c-format msgid "could not create file \"%s\": %s\n" msgstr "nelze vytvořit soubor \"%s\": %s\n" -#: file.c:357 +#: file.c:352 #, c-format msgid "file cloning not supported on this platform\n" msgstr "klonování souborů na této platformě není podporováno\n" -#: file.c:374 +#: file.c:369 #, c-format msgid "" "could not create hard link between old and new data directories: %s\n" @@ -834,7 +830,7 @@ msgstr "" "nelze vytvořit hard link mezi starým a novým datovým adresářem: %s\n" "V link módu musí být starý a nový datový adresář na stejném souborovém systému.\n" -#: function.c:116 +#: function.c:114 #, c-format msgid "" "\n" @@ -873,32 +869,32 @@ msgstr "" "v každé postižené databázi:\n" "\n" -#: function.c:134 +#: function.c:132 #, c-format msgid " %s\n" msgstr " %s\n" -#: function.c:144 +#: function.c:142 #, c-format msgid "Remove the problem functions from the old cluster to continue.\n" msgstr "Pro pokračování ze starého clusteru odstraňte problematické funkce.\n" -#: function.c:191 +#: function.c:189 #, c-format msgid "Checking for presence of required libraries" msgstr "Kontroluji dostupnost potřebných knihoven" -#: function.c:248 +#: function.c:242 #, c-format msgid "could not load library \"%s\": %s" msgstr "nelze načíst knihovnu \"%s\": %s" -#: function.c:259 info.c:633 +#: function.c:253 #, c-format -msgid "Database: %s\n" +msgid "In database: %s\n" msgstr "Databáze: %s\n" -#: function.c:269 +#: function.c:263 #, c-format msgid "" "Your installation references loadable libraries that are missing from the\n" @@ -914,57 +910,57 @@ msgstr "" " %s\n" "\n" -#: info.c:133 +#: info.c:131 #, c-format msgid "Relation names for OID %u in database \"%s\" do not match: old name \"%s.%s\", new name \"%s.%s\"\n" msgstr "Názvy relace pro OID %u v databázi \"%s\" neodpovídají: staré jméno \"%s.%s\", nové jméno \"%s.%s\"\n" -#: info.c:153 +#: info.c:151 #, c-format msgid "Failed to match up old and new tables in database \"%s\"\n" msgstr "Chyba při párování starých a nových tabulek v databázi \"%s\"\n" -#: info.c:242 +#: info.c:240 #, c-format msgid " which is an index on \"%s.%s\"" msgstr " což je index na \"%s.%s\"" -#: info.c:252 +#: info.c:250 #, c-format msgid " which is an index on OID %u" msgstr " což je index na OID %u" -#: info.c:264 +#: info.c:262 #, c-format msgid " which is the TOAST table for \"%s.%s\"" msgstr " což je TOAST tabulka pro \"%s.%s\"" -#: info.c:272 +#: info.c:270 #, c-format msgid " which is the TOAST table for OID %u" msgstr " což je TOAST tabulka pro OID %u" -#: info.c:276 +#: info.c:274 #, c-format msgid "No match found in old cluster for new relation with OID %u in database \"%s\": %s\n" msgstr "Ve starém clusteru nebyl nalezen odpovídající záznam pro novou relaci s OID %u v databázi \"%s\": %s\n" -#: info.c:279 +#: info.c:277 #, c-format msgid "No match found in new cluster for old relation with OID %u in database \"%s\": %s\n" msgstr "V novém clusteru nebyl nalezen odpovídající záznam pro relaci s OID %u v databázi \"%s\": %s\n" -#: info.c:291 +#: info.c:289 #, c-format msgid "mappings for database \"%s\":\n" msgstr "mapování pro databázi \"%s\":\n" -#: info.c:294 +#: info.c:292 #, c-format msgid "%s.%s: %u to %u\n" msgstr "%s.%s: %u na %u\n" -#: info.c:299 info.c:635 +#: info.c:297 info.c:633 #, c-format msgid "" "\n" @@ -973,7 +969,7 @@ msgstr "" "\n" "\n" -#: info.c:324 +#: info.c:322 #, c-format msgid "" "\n" @@ -982,7 +978,7 @@ msgstr "" "\n" "zdrojové databáze:\n" -#: info.c:326 +#: info.c:324 #, c-format msgid "" "\n" @@ -991,7 +987,12 @@ msgstr "" "\n" "cílové databáze:\n" -#: info.c:646 +#: info.c:631 +#, c-format +msgid "Database: %s\n" +msgstr "Databáze: %s\n" + +#: info.c:644 #, c-format msgid "relname: %s.%s: reloid: %u reltblspace: %s\n" msgstr "relname: %s.%s: reloid: %u reltblspace: %s\n" @@ -1001,57 +1002,62 @@ msgstr "relname: %s.%s: reloid: %u reltblspace: %s\n" msgid "%s: cannot be run as root\n" msgstr "%s: nelze spouštět jako root\n" -#: option.c:171 +#: option.c:170 #, c-format msgid "invalid old port number\n" msgstr "neplatné staré číslo portu\n" -#: option.c:179 +#: option.c:175 #, c-format msgid "invalid new port number\n" msgstr "neplatné nové číslo portu\n" -#: option.c:213 +#: option.c:207 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" -#: option.c:223 +#: option.c:214 +#, c-format +msgid "too many command-line arguments (first is \"%s\")\n" +msgstr "příliš mnoho argumentů v příkazové řádce (první je \"%s\")\n" + +#: option.c:220 #, c-format msgid "Running in verbose mode\n" msgstr "Běží v módu s detailním (verbose) logováním.\n" -#: option.c:254 +#: option.c:251 msgid "old cluster binaries reside" msgstr "binárky starého clusteru jsou umístěny" -#: option.c:256 +#: option.c:253 msgid "new cluster binaries reside" msgstr "binárky nového clusteru jsou umístěny" -#: option.c:258 +#: option.c:255 msgid "old cluster data resides" msgstr "data starého clusteru jsou umístěna" -#: option.c:260 +#: option.c:257 msgid "new cluster data resides" msgstr "data nového clusteru jsou umístěna" -#: option.c:262 +#: option.c:259 msgid "sockets will be created" msgstr "sockety budou vytvořeny" -#: option.c:279 option.c:373 +#: option.c:276 option.c:374 #, c-format msgid "could not determine current directory\n" msgstr "nelze určit aktuální adresář\n" -#: option.c:282 +#: option.c:279 #, c-format msgid "cannot run pg_upgrade from inside the new cluster data directory on Windows\n" msgstr "na Windows nelze spouštět pg_upgrade z datového adresáře nového clusteru\n" -#: option.c:291 +#: option.c:288 #, c-format msgid "" "pg_upgrade upgrades a PostgreSQL cluster to a different major version.\n" @@ -1060,12 +1066,12 @@ msgstr "" "pg_upgrade upgraduje PostgreSQL cluster na jinou major verzi.\n" "\n" -#: option.c:292 +#: option.c:289 #, c-format msgid "Usage:\n" msgstr "Použití:\n" -#: option.c:293 +#: option.c:290 #, c-format msgid "" " pg_upgrade [OPTION]...\n" @@ -1074,108 +1080,110 @@ msgstr "" " pg_upgrade [VOLBA]...\n" "\n" -#: option.c:294 +#: option.c:291 #, c-format msgid "Options:\n" msgstr "Přepínače:\n" -#: option.c:295 +#: option.c:292 #, c-format msgid " -b, --old-bindir=BINDIR old cluster executable directory\n" msgstr " -b, --old-bindir=BINDIR adresář se spustitelnými soubory starého clusteru\n" -#: option.c:296 +#: option.c:293 #, c-format -msgid " -B, --new-bindir=BINDIR new cluster executable directory\n" -msgstr " -B, --new-bindir=BINDIR adresář se spustitelnými soubory nového clusteru\n" +msgid "" +" -B, --new-bindir=BINDIR new cluster executable directory (default\n" +" same directory as pg_upgrade)\n" +msgstr "" +" -B, --new-bindir=BINDIR adresář se spustitelnými soubory nového clusteru\n" +" (výchozí hodnota je stejný adresář jako pg_upgrade)\n" -#: option.c:297 +#: option.c:295 #, c-format msgid " -c, --check check clusters only, don't change any data\n" msgstr " -c, --check pouze kontroluje clustery, nemění žádná data\n" -#: option.c:298 +#: option.c:296 #, c-format msgid " -d, --old-datadir=DATADIR old cluster data directory\n" msgstr " -d, --old-datadir=DATADIR datový adresář starého clusteru\n" -#: option.c:299 +#: option.c:297 #, c-format msgid " -D, --new-datadir=DATADIR new cluster data directory\n" msgstr " -D, --new-datadir=DATADIR datový adresář nového clusteru\n" -#: option.c:300 +#: option.c:298 #, c-format -msgid " -j, --jobs number of simultaneous processes or threads to use\n" -msgstr " -j, --jobs počet paralelních procesů nebo threadů\n" +msgid " -j, --jobs=NUM number of simultaneous processes or threads to use\n" +msgstr " -j, --jobs=NUM počet paralelních procesů nebo threadů\n" -#: option.c:301 +#: option.c:299 #, c-format msgid " -k, --link link instead of copying files to new cluster\n" msgstr " -k, --link vytváří odkazy namísto kopírování souborů do nového clusteru\n" -#: option.c:302 +#: option.c:300 #, c-format msgid " -o, --old-options=OPTIONS old cluster options to pass to the server\n" msgstr " -o, --old-options=VOLBY volby pro starý cluster které se mají předat serveru\n" -#: option.c:303 +#: option.c:301 #, c-format msgid " -O, --new-options=OPTIONS new cluster options to pass to the server\n" msgstr " -O, --new-options=VOLBY volby pro nový cluster které se mají předat serveru\n" -#: option.c:304 +#: option.c:302 #, c-format msgid " -p, --old-port=PORT old cluster port number (default %d)\n" msgstr " -p, --old-port=PORT číslo portu pro starý cluster (implicitně %d)\n" -#: option.c:305 +#: option.c:303 #, c-format msgid " -P, --new-port=PORT new cluster port number (default %d)\n" msgstr " -P, --new-port=PORT číslo portu pro nový cluster (implicitně %d)\n" -#: option.c:306 +#: option.c:304 #, c-format msgid " -r, --retain retain SQL and log files after success\n" msgstr " -r, --retain v případě úspěchu zachovat SQL a log soubory\n" -#: option.c:307 +#: option.c:305 #, c-format -#| msgid " -p, --old-port=PORT old cluster port number (default %d)\n" msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" msgstr "" " -s, --socketdir=DIR adresář pro sockety (implicitně současný adresář)\n" "\n" -#: option.c:308 +#: option.c:306 #, c-format msgid " -U, --username=NAME cluster superuser (default \"%s\")\n" msgstr " -U, --username=JMÉNO superuživatel pro cluster (implicitně \"%s\")\n" -#: option.c:309 +#: option.c:307 #, c-format msgid " -v, --verbose enable verbose internal logging\n" msgstr " -v, --verbose zapné podrobné interní logování\n" -#: option.c:310 +#: option.c:308 #, c-format msgid " -V, --version display version information, then exit\n" msgstr " -V, --version zobrazí informaci o verzi, poté skončí\n" -#: option.c:311 +#: option.c:309 #, c-format -#| msgid " -k, --link link instead of copying files to new cluster\n" msgid " --clone clone instead of copying files to new cluster\n" msgstr "" " --clone klonuje namísto kopírování souborů do nového clusteru\n" "\n" -#: option.c:312 +#: option.c:310 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help zobrazí tuto nápovědu, poté skončí\n" -#: option.c:313 +#: option.c:311 #, c-format msgid "" "\n" @@ -1190,7 +1198,7 @@ msgstr "" " zastavit postmaster proces běžící nad starým clusterem\n" " zastavit postmaster proces běžízí nad novým clusterem\n" -#: option.c:318 +#: option.c:316 #, c-format msgid "" "\n" @@ -1207,7 +1215,7 @@ msgstr "" " \"bin\" adresář pro starou verzi (-b BINDIR)\n" " \"bin\" adresář pro novou verzi (-B BINDIR)\n" -#: option.c:324 +#: option.c:322 #, c-format msgid "" "\n" @@ -1220,7 +1228,7 @@ msgstr "" " pg_upgrade -d oldCluster/data -D newCluster/data -b oldCluster/bin -B newCluster/bin\n" "nebo\n" -#: option.c:329 +#: option.c:327 #, c-format msgid "" " $ export PGDATAOLD=oldCluster/data\n" @@ -1235,7 +1243,7 @@ msgstr "" " $ export PGBINNEW=newCluster/bin\n" " $ pg_upgrade\n" -#: option.c:335 +#: option.c:333 #, c-format msgid "" " C:\\> set PGDATAOLD=oldCluster/data\n" @@ -1250,16 +1258,21 @@ msgstr "" " C:\\> set PGBINNEW=newCluster/bin\n" " C:\\> pg_upgrade\n" -#: option.c:341 +#: option.c:339 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Chyby hlaste na adresu .\n" +"Chyby hlašte na <%s>.\n" + +#: option.c:340 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" -#: option.c:377 +#: option.c:380 #, c-format msgid "" "You must identify the directory where the %s.\n" @@ -1268,62 +1281,62 @@ msgstr "" "Musíte zadat adresář kde %s.\n" "Použijte prosím volbu %s na příkazové řádce nebo proměnnou prostředí %s.\n" -#: option.c:429 +#: option.c:432 #, c-format msgid "Finding the real data directory for the source cluster" msgstr "Vyhledávám skutečný datový adresář pro zdrojový cluster" -#: option.c:431 +#: option.c:434 #, c-format msgid "Finding the real data directory for the target cluster" msgstr "Vyhledávám skutečný datový adresář pro cílový cluster" -#: option.c:443 +#: option.c:446 #, c-format msgid "could not get data directory using %s: %s\n" msgstr "nelze získat datový adresář pomocí %s: %s\n" -#: option.c:503 +#: option.c:505 #, c-format msgid "could not read line %d from file \"%s\": %s\n" msgstr "nelze načíst řádek %d ze souboru \"%s\": %s\n" -#: option.c:521 +#: option.c:522 #, c-format msgid "user-supplied old port number %hu corrected to %hu\n" msgstr "uživatelem-zadané číslo starého portu %hu opraveno na %hu\n" -#: parallel.c:128 parallel.c:241 +#: parallel.c:127 parallel.c:238 #, c-format msgid "could not create worker process: %s\n" msgstr "nelze vytvořit worker proces: %s\n" -#: parallel.c:147 parallel.c:262 +#: parallel.c:146 parallel.c:259 #, c-format msgid "could not create worker thread: %s\n" msgstr "nelze vytvořit worker thread: %s\n" -#: parallel.c:305 +#: parallel.c:300 #, c-format msgid "waitpid() failed: %s\n" msgstr "volání waitpid() selhalo: %s\n" -#: parallel.c:309 +#: parallel.c:304 #, c-format msgid "child process exited abnormally: status %d\n" msgstr "podřízený proces abnormálně skončil: status %d\n" -#: parallel.c:324 +#: parallel.c:319 #, c-format msgid "child worker exited abnormally: %s\n" msgstr "podřízený proces neočekávaně skončil: %s\n" -#: pg_upgrade.c:109 +#: pg_upgrade.c:108 #, c-format msgid "could not read permissions of directory \"%s\": %s\n" msgstr "nelze zjistit přístupová práva adresáře \"%s\": %s\n" -#: pg_upgrade.c:126 +#: pg_upgrade.c:123 #, c-format msgid "" "\n" @@ -1334,17 +1347,17 @@ msgstr "" "Provádím Upgrade\n" "----------------\n" -#: pg_upgrade.c:169 +#: pg_upgrade.c:166 #, c-format msgid "Setting next OID for new cluster" msgstr "Nastavuji další OID pro nový cluster" -#: pg_upgrade.c:176 +#: pg_upgrade.c:173 #, c-format msgid "Sync data directory to disk" msgstr "Synchronizuji datový adresář na disk" -#: pg_upgrade.c:188 +#: pg_upgrade.c:185 #, c-format msgid "" "\n" @@ -1355,7 +1368,12 @@ msgstr "" "Upgrade Dokončen\n" "----------------\n" -#: pg_upgrade.c:234 +#: pg_upgrade.c:220 +#, c-format +msgid "%s: could not find own program executable\n" +msgstr "%s: nelze najít vlastní spustitelný soubor\n" + +#: pg_upgrade.c:246 #, c-format msgid "" "There seems to be a postmaster servicing the old cluster.\n" @@ -1364,7 +1382,7 @@ msgstr "" "Zdá se že postmaster nad starým clusterem stále běží.\n" "Prosím zastavte příslušný postmaster proces a zkuste to znovu.\n" -#: pg_upgrade.c:247 +#: pg_upgrade.c:259 #, c-format msgid "" "There seems to be a postmaster servicing the new cluster.\n" @@ -1373,137 +1391,132 @@ msgstr "" "Zdá se že postmaster nad novým clusterem stále běží.\n" "Prosím zastavte příslušný postmaster proces a zkuste to znovu.\n" -#: pg_upgrade.c:253 -#, c-format -msgid "%s: could not find own program executable\n" -msgstr "%s: nelze najít vlastní spustitelný soubor\n" - -#: pg_upgrade.c:270 +#: pg_upgrade.c:273 #, c-format msgid "Analyzing all rows in the new cluster" msgstr "Analyzuji všechny řádky v novém clusteru" -#: pg_upgrade.c:283 +#: pg_upgrade.c:286 #, c-format msgid "Freezing all rows in the new cluster" msgstr "Provádím freeze na všech řádcích v novém clusteru" -#: pg_upgrade.c:303 +#: pg_upgrade.c:306 #, c-format msgid "Restoring global objects in the new cluster" msgstr "Obnovuji globální objekty v novém clusteru" -#: pg_upgrade.c:318 +#: pg_upgrade.c:321 #, c-format msgid "Restoring database schemas in the new cluster\n" msgstr "Obnovuji databázová schémata v novém clusteru\n" -#: pg_upgrade.c:424 +#: pg_upgrade.c:425 #, c-format msgid "Deleting files from new %s" msgstr "Mažu soubory z nového %s" -#: pg_upgrade.c:428 +#: pg_upgrade.c:429 #, c-format msgid "could not delete directory \"%s\"\n" msgstr "nelze smazat adresář \"%s\"\n" -#: pg_upgrade.c:447 +#: pg_upgrade.c:448 #, c-format msgid "Copying old %s to new server" msgstr "Kopíruji starý %s do nového serveru" -#: pg_upgrade.c:474 +#: pg_upgrade.c:475 #, c-format msgid "Setting next transaction ID and epoch for new cluster" msgstr "Nastavuij následující transaction ID a epochu pro nový cluster" -#: pg_upgrade.c:504 +#: pg_upgrade.c:505 #, c-format msgid "Setting next multixact ID and offset for new cluster" msgstr "Nastavuji následující multixact ID a offset pro nový cluster" -#: pg_upgrade.c:528 +#: pg_upgrade.c:529 #, c-format msgid "Setting oldest multixact ID in new cluster" msgstr "Nastavuji nejstarší multixact ID v novém clusteru" -#: pg_upgrade.c:548 +#: pg_upgrade.c:549 #, c-format msgid "Resetting WAL archives" msgstr "Resetuji WAL archivy" -#: pg_upgrade.c:591 +#: pg_upgrade.c:592 #, c-format msgid "Setting frozenxid and minmxid counters in new cluster" msgstr "Nastavuji frozenxid a minmxid v novém clusteru" -#: pg_upgrade.c:593 +#: pg_upgrade.c:594 #, c-format msgid "Setting minmxid counter in new cluster" msgstr "Nastavuji minmxid v novém clustreru" -#: relfilenode.c:36 +#: relfilenode.c:35 #, c-format msgid "Cloning user relation files\n" msgstr "Klonuji soubory pro uživatelské relace\n" -#: relfilenode.c:39 +#: relfilenode.c:38 #, c-format msgid "Copying user relation files\n" msgstr "Kopíruji soubory pro uživatelské relace\n" -#: relfilenode.c:42 +#: relfilenode.c:41 #, c-format msgid "Linking user relation files\n" msgstr "Linkuji soubory pro uživatelské relace\n" -#: relfilenode.c:118 +#: relfilenode.c:115 #, c-format msgid "old database \"%s\" not found in the new cluster\n" msgstr "stará databáze \"%s\" nenalezena v novém clusteru\n" -#: relfilenode.c:239 +#: relfilenode.c:230 #, c-format msgid "error while checking for file existence \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "chyba při kontrole existence souboru \"%s.%s\" (\"%s\" na \"%s\"): %s\n" -#: relfilenode.c:257 +#: relfilenode.c:248 #, c-format msgid "rewriting \"%s\" to \"%s\"\n" msgstr "přepisuji \"%s\" na \"%s\"\n" -#: relfilenode.c:265 +#: relfilenode.c:256 #, c-format msgid "cloning \"%s\" to \"%s\"\n" msgstr "klonuji \"%s\" do \"%s\"\n" -#: relfilenode.c:270 +#: relfilenode.c:261 #, c-format msgid "copying \"%s\" to \"%s\"\n" msgstr "kopíruji \"%s\" do \"%s\"\n" -#: relfilenode.c:275 +#: relfilenode.c:266 #, c-format msgid "linking \"%s\" to \"%s\"\n" msgstr "linkuji \"%s\" na \"%s\"\n" -#: server.c:34 +#: server.c:33 #, c-format msgid "connection to database failed: %s" msgstr "spojení do databáze selhalo: %s" -#: server.c:40 server.c:142 util.c:136 util.c:166 +#: server.c:39 server.c:141 util.c:135 util.c:165 #, c-format msgid "Failure, exiting\n" msgstr "Chyba, končím\n" -#: server.c:132 +#: server.c:131 #, c-format msgid "executing: %s\n" msgstr "spouštím: %s\n" -#: server.c:138 +#: server.c:137 #, c-format msgid "" "SQL command failed\n" @@ -1514,17 +1527,17 @@ msgstr "" "%s\n" "%s" -#: server.c:168 +#: server.c:167 #, c-format -msgid "could not open version file: %s\n" -msgstr "nelze otevřít soubor s verzí: %s\n" +msgid "could not open version file \"%s\": %m\n" +msgstr "nelze otevřít soubor s verzí: \"%s\": %m\n" -#: server.c:172 +#: server.c:171 #, c-format -msgid "could not parse PG_VERSION file from %s\n" -msgstr "nelze naparsovat PG_VERSION soubor z %s\n" +msgid "could not parse version file \"%s\"\n" +msgstr "neplatný formát řetězce s verzí \"%s\"\n" -#: server.c:295 +#: server.c:297 #, c-format msgid "" "\n" @@ -1533,7 +1546,7 @@ msgstr "" "\n" "spojení na databázi selhalo: %s" -#: server.c:300 +#: server.c:302 #, c-format msgid "" "could not connect to source postmaster started with the command:\n" @@ -1542,7 +1555,7 @@ msgstr "" "nelze se připojit ke zdrojovému postmaster procesu příkazem:\n" "%s\n" -#: server.c:304 +#: server.c:306 #, c-format msgid "" "could not connect to target postmaster started with the command:\n" @@ -1551,22 +1564,22 @@ msgstr "" "nelze se připojit k cílovému postmaster procesu příkazem:\n" "%s\n" -#: server.c:318 +#: server.c:320 #, c-format msgid "pg_ctl failed to start the source server, or connection failed\n" msgstr "pg_ctl selhal při pokusu nastartovat zdrojový server, nebo selhal pokus o spojení\n" -#: server.c:320 +#: server.c:322 #, c-format msgid "pg_ctl failed to start the target server, or connection failed\n" msgstr "pg_ctl selhal při pokusu nastartovat cílový server, nebo selhal pokus o spojení\n" -#: server.c:365 +#: server.c:367 #, c-format msgid "out of memory\n" msgstr "nedostatek paměti\n" -#: server.c:378 +#: server.c:380 #, c-format msgid "libpq environment variable %s has a non-local server value: %s\n" msgstr "libpq proměnná prostředí %s má hodnotu odkazující na nelokální server: %s\n" @@ -1580,47 +1593,47 @@ msgstr "" "Při použití tablespaces nelze provádět upgrade na/ze stejné verze\n" "systémových katalogů.\n" -#: tablespace.c:87 +#: tablespace.c:86 #, c-format msgid "tablespace directory \"%s\" does not exist\n" msgstr "adresář pro tablespace \"%s\" neexistuje\n" -#: tablespace.c:91 +#: tablespace.c:90 #, c-format msgid "could not stat tablespace directory \"%s\": %s\n" msgstr "nelze přistoupit k tablespace adresáři \"%s\": %s\n" -#: tablespace.c:96 +#: tablespace.c:95 #, c-format msgid "tablespace path \"%s\" is not a directory\n" msgstr "cesta k tabespace \"%s\" není adresář\n" -#: util.c:50 +#: util.c:49 #, c-format msgid " " msgstr " " -#: util.c:83 +#: util.c:82 #, c-format msgid "%-*s" msgstr "%-*s" -#: util.c:175 +#: util.c:174 #, c-format msgid "ok" msgstr "ok" -#: version.c:32 +#: version.c:29 #, c-format msgid "Checking for large objects" msgstr "Kontrola velkých objektů" -#: version.c:80 version.c:382 +#: version.c:77 version.c:384 #, c-format msgid "warning" msgstr "varování" -#: version.c:82 +#: version.c:79 #, c-format msgid "" "\n" @@ -1636,7 +1649,7 @@ msgstr "" "naplnění tabulky pg_largeobject_metadata s výchozími právy.\n" "\n" -#: version.c:88 +#: version.c:85 #, c-format msgid "" "\n" @@ -1656,12 +1669,12 @@ msgstr "" "po spuštění z psql pod superuživatelským účtem tato výchozí práva nastaví.\n" "\n" -#: version.c:118 +#: version.c:239 #, c-format msgid "Checking for incompatible \"line\" data type" msgstr "Kontrola nekompatibilního \"line\" datového typu" -#: version.c:180 +#: version.c:246 #, c-format msgid "" "Your installation contains the \"line\" data type in user tables. This\n" @@ -1680,12 +1693,12 @@ msgstr "" " %s\n" "\n" -#: version.c:215 +#: version.c:276 #, c-format msgid "Checking for invalid \"unknown\" user columns" msgstr "Kontrola pro neplatné \"unknown\" uživatelské sloupce" -#: version.c:281 +#: version.c:283 #, c-format msgid "" "Your installation contains the \"unknown\" data type in user tables. This\n" @@ -1702,12 +1715,12 @@ msgstr "" " %s\n" "\n" -#: version.c:304 +#: version.c:306 #, c-format msgid "Checking for hash indexes" msgstr "Kontrola hash indexů" -#: version.c:384 +#: version.c:386 #, c-format msgid "" "\n" @@ -1724,7 +1737,7 @@ msgstr "" "jak REINDEX provést.\n" "\n" -#: version.c:390 +#: version.c:392 #, c-format msgid "" "\n" @@ -1744,3 +1757,48 @@ msgstr "" "po spuštění z psql pod superuživatelským účtem znovu vytvoří všechny\n" "neplatné indexy; dokud k tomu nedojde tyto indexy nebudou používány.\n" "\n" + +#: version.c:418 +#, c-format +msgid "Checking for invalid \"sql_identifier\" user columns" +msgstr "Kontrola pro neplatné \"sql_identifier\" uživatelské sloupce" + +#: version.c:426 +#, c-format +msgid "" +"Your installation contains the \"sql_identifier\" data type in user tables\n" +"and/or indexes. The on-disk format for this data type has changed, so this\n" +"cluster cannot currently be upgraded. You can remove the problem tables or\n" +"change the data type to \"name\" and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" +" %s\n" +"\n" +msgstr "" +"Vaše instalace obsahuje \"sql_identifier\" datový typ v uživatelských tabulkách\n" +"a/nebo indexech. Formát uložení na disku pro tento datový typ se změnil, takže\n" +"tento cluster nelze aktuálně upgradovat. Můžete problematické tabulky\n" +"odstranit nebo datový typ změnit na \"name\" a znovu spustit upgrade.\n" +"Seznam problematických sloupců je v souboru:\n" +" %s\n" +"\n" + +#~ msgid "could not parse PG_VERSION file from %s\n" +#~ msgstr "nelze naparsovat PG_VERSION soubor z %s\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Chyby hlaste na adresu .\n" + +#~ msgid "" +#~ "Optimizer statistics and free space information are not transferred\n" +#~ "by pg_upgrade so, once you start the new server, consider running:\n" +#~ " %s\n" +#~ "\n" +#~ msgstr "" +#~ "Statistiky optimalizéru a informace o volném místě nejsou zachovány\n" +#~ "při pg_upgrade, takže po nastartování nového serveru zvažte spuštění:\n" +#~ " %s\n" +#~ "\n" diff --git a/src/bin/pg_upgrade/po/de.po b/src/bin/pg_upgrade/po/de.po index 0fa90be5ec44b..0f16024b7f967 100644 --- a/src/bin/pg_upgrade/po/de.po +++ b/src/bin/pg_upgrade/po/de.po @@ -1,14 +1,13 @@ # German message translation file for pg_upgrade -# Copyright (C) 2020 PostgreSQL Global Development Group +# Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Peter Eisentraut , 2018 - 2020. # msgid "" msgstr "" -"Project-Id-Version: pg_upgrade (PostgreSQL) 13\n" +"Project-Id-Version: pg_upgrade (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-04-11 13:15+0000\n" -"PO-Revision-Date: 2020-04-11 15:40+0200\n" +"POT-Creation-Date: 2021-04-29 03:17+0000\n" +"PO-Revision-Date: 2021-04-29 06:56+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -16,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: check.c:66 +#: check.c:69 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -25,7 +24,7 @@ msgstr "" "Führe Konsistenzprüfungen am alten laufenden Server durch\n" "---------------------------------------------------------\n" -#: check.c:72 +#: check.c:75 #, c-format msgid "" "Performing Consistency Checks\n" @@ -34,7 +33,7 @@ msgstr "" "Führe Konsistenzprüfungen durch\n" "-------------------------------\n" -#: check.c:190 +#: check.c:211 #, c-format msgid "" "\n" @@ -43,7 +42,7 @@ msgstr "" "\n" "*Cluster sind kompatibel*\n" -#: check.c:196 +#: check.c:217 #, c-format msgid "" "\n" @@ -55,34 +54,20 @@ msgstr "" "neuen Cluster neu mit initdb initialisieren, bevor fortgesetzt\n" "werden kann.\n" -#: check.c:232 +#: check.c:260 #, c-format msgid "" -"Optimizer statistics are not transferred by pg_upgrade so,\n" -"once you start the new server, consider running:\n" -" %s\n" +"Optimizer statistics are not transferred by pg_upgrade.\n" +"Once you start the new server, consider running:\n" +" %s/vacuumdb %s--all --analyze-in-stages\n" "\n" msgstr "" "Optimizer-Statistiken werden von pg_upgrade nicht übertragen. Wenn Sie\n" "den neuen Server starten, sollte Sie diesen Befehl ausführen:\n" -" %s\n" -"\n" - -#: check.c:237 -#, c-format -msgid "" -"Optimizer statistics and free space information are not transferred\n" -"by pg_upgrade so, once you start the new server, consider running:\n" -" %s\n" -"\n" -msgstr "" -"Optimizer-Statistiken und Informationen über freien Platz werden von\n" -"pg_upgrade nicht übertragen. Wenn Sie den neuen Server starten, sollten\n" -"Sie diesen Befehl ausführen:\n" -" %s\n" +" %s/vacuumdb %s--all --analyze-in-stages\n" "\n" -#: check.c:244 +#: check.c:266 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -91,7 +76,7 @@ msgstr "" "Mit diesem Skript können die Dateien des alten Clusters gelöscht werden:\n" " %s\n" -#: check.c:249 +#: check.c:271 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -104,84 +89,77 @@ msgstr "" "Datenverzeichnis des neuen Clusters im alten Cluster-Verzeichnis\n" "liegen. Der Inhalt des alten Clusters muss von Hand gelöscht werden.\n" -#: check.c:259 +#: check.c:283 #, c-format msgid "Checking cluster versions" msgstr "Prüfe Cluster-Versionen" -#: check.c:271 +#: check.c:295 #, c-format msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" msgstr "Dieses Programm kann nur Upgrades von PostgreSQL Version 8.4 oder später durchführen.\n" -#: check.c:275 +#: check.c:299 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Dieses Programm kann nur Upgrades auf PostgreSQL Version %s durchführen.\n" -#: check.c:284 +#: check.c:308 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Dieses Programm kann keine Downgrades auf ältere Hauptversionen von PostgreSQL durchführen.\n" -#: check.c:289 +#: check.c:313 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "Die Daten- und Programmverzeichnisse des alten Clusters stammen von verschiedenen Hauptversionen.\n" -#: check.c:292 +#: check.c:316 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "Die Daten- und Programmverzeichnisse des neuen Clusters stammen von verschiedenen Hauptversionen.\n" -#: check.c:309 +#: check.c:333 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Wenn ein laufender alter Server vor Version 9.1 geprüft wird, muss die Portnummer des alten Servers angegeben werden.\n" -#: check.c:313 +#: check.c:337 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Wenn ein laufender Server geprüft wird, müssen die alte und die neue Portnummer verschieden sein.\n" -#: check.c:328 +#: check.c:352 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "Kodierungen für Datenbank »%s« stimmen nicht überein: alt »%s«, neu »%s«\n" -#: check.c:333 +#: check.c:357 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_collate-Werte für Datenbank »%s« stimmen nicht überein: alt »%s«, neu »%s«\n" -#: check.c:336 +#: check.c:360 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_ctype-Werte für Datenbank »%s« stimmen nicht überein: alt »%s«, neu »%s«\n" -#: check.c:409 +#: check.c:433 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "Datenbank »%s« im neuen Cluster ist nicht leer: Relation »%s.%s« gefunden\n" -#: check.c:458 +#: check.c:490 #, c-format -msgid "Creating script to analyze new cluster" -msgstr "Erzeuge Skript zum Analysieren des neuen Clusters" +msgid "Checking for new cluster tablespace directories" +msgstr "Prüfe Tablespace-Verzeichnisse des neuen Clusters" -#: check.c:472 check.c:600 check.c:864 check.c:943 check.c:1053 check.c:1144 -#: file.c:336 function.c:240 option.c:497 version.c:54 version.c:199 -#: version.c:341 +#: check.c:501 #, c-format -msgid "could not open file \"%s\": %s\n" -msgstr "konnte Datei »%s« nicht öffnen: %s\n" - -#: check.c:527 check.c:656 -#, c-format -msgid "could not add execute permission to file \"%s\": %s\n" -msgstr "konnte Datei »%s« nicht ausführbar machen: %s\n" +msgid "new cluster tablespace directory already exists: \"%s\"\n" +msgstr "Tablespace-Verzeichnis für neuen Cluster existiert bereits: »%s«\n" -#: check.c:563 +#: check.c:534 #, c-format msgid "" "\n" @@ -190,7 +168,7 @@ msgstr "" "\n" "WARNUNG: das neue Datenverzeichnis sollte nicht im alten Datenverzeichnis liegen, z.B. %s\n" -#: check.c:587 +#: check.c:558 #, c-format msgid "" "\n" @@ -199,73 +177,85 @@ msgstr "" "\n" "WARNUNG: benutzerdefinierte Tablespace-Pfade sollten nicht im Datenverzeichnis liegen, z.B. %s\n" -#: check.c:597 +#: check.c:568 #, c-format msgid "Creating script to delete old cluster" msgstr "Erzeuge Skript zum Löschen des alten Clusters" -#: check.c:676 +#: check.c:571 check.c:835 check.c:933 check.c:1012 check.c:1122 check.c:1213 +#: check.c:1331 file.c:336 function.c:240 option.c:504 version.c:54 +#: version.c:199 version.c:341 +#, c-format +msgid "could not open file \"%s\": %s\n" +msgstr "konnte Datei »%s« nicht öffnen: %s\n" + +#: check.c:627 +#, c-format +msgid "could not add execute permission to file \"%s\": %s\n" +msgstr "konnte Datei »%s« nicht ausführbar machen: %s\n" + +#: check.c:647 #, c-format msgid "Checking database user is the install user" msgstr "Prüfe ob der Datenbankbenutzer der Installationsbenutzer ist" -#: check.c:692 +#: check.c:663 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "Datenbankbenutzer »%s« ist nicht der Installationsbenutzer\n" -#: check.c:703 +#: check.c:674 #, c-format msgid "could not determine the number of users\n" msgstr "konnte die Anzahl der Benutzer nicht ermitteln\n" -#: check.c:711 +#: check.c:682 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "Nur der Installationsbenutzer darf im neuen Cluster definiert sein.\n" -#: check.c:731 +#: check.c:702 #, c-format msgid "Checking database connection settings" msgstr "Prüfe Verbindungseinstellungen der Datenbank" -#: check.c:753 +#: check.c:724 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 darf keine Verbindungen erlauben, d.h. ihr pg_database.datallowconn muss falsch sein\n" -#: check.c:763 +#: check.c:734 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Alle Datenbanken außer template0 müssen Verbindungen erlauben, d.h. ihr pg_database.datallowconn muss wahr sein\n" -#: check.c:788 +#: check.c:759 #, c-format msgid "Checking for prepared transactions" msgstr "Prüfe auf vorbereitete Transaktionen" -#: check.c:797 +#: check.c:768 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "Der alte Cluster enthält vorbereitete Transaktionen\n" -#: check.c:799 +#: check.c:770 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "Der neue Cluster enthält vorbereitete Transaktionen\n" -#: check.c:825 +#: check.c:796 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Prüfe auf contrib/isn mit unpassender bigint-Übergabe" -#: check.c:886 check.c:965 check.c:1076 check.c:1167 function.c:262 -#: version.c:245 version.c:282 version.c:425 +#: check.c:857 check.c:958 check.c:1034 check.c:1145 check.c:1236 check.c:1354 +#: function.c:262 version.c:245 version.c:282 version.c:425 #, c-format msgid "fatal\n" msgstr "fatal\n" -#: check.c:887 +#: check.c:858 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -287,12 +277,34 @@ msgstr "" " %s\n" "\n" -#: check.c:911 +#: check.c:881 +#, c-format +msgid "Checking for user-defined postfix operators" +msgstr "Prüfe auf benutzerdefinierte Postfix-Operatoren" + +#: check.c:959 +#, c-format +msgid "" +"Your installation contains user-defined postfix operators, which are not\n" +"supported anymore. Consider dropping the postfix operators and replacing\n" +"them with prefix operators or function calls.\n" +"A list of user-defined postfix operators is in the file:\n" +" %s\n" +"\n" +msgstr "" +"Ihre Installation enthält benutzerdefinierte Postfixoperatoren, was\n" +"nicht mehr unterstützt wird. Entfernen Sie die Postfixoperatoren und\n" +"ersetzten Sie sie durch Präfixoperatoren oder Funktionsaufrufe. Eine\n" +"Liste der benutzerdefinierten Postfixoperatoren ist in der Datei:\n" +" %s\n" +"\n" + +#: check.c:980 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Prüfe auf Tabellen mit WITH OIDS" -#: check.c:966 +#: check.c:1035 #, c-format msgid "" "Your installation contains tables declared WITH OIDS, which is not\n" @@ -309,12 +321,12 @@ msgstr "" " %s\n" "\n" -#: check.c:996 +#: check.c:1065 #, c-format msgid "Checking for reg* data types in user tables" msgstr "Prüfe auf reg*-Datentypen in Benutzertabellen" -#: check.c:1077 +#: check.c:1146 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" @@ -334,12 +346,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1102 +#: check.c:1171 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Prüfe auf inkompatiblen Datentyp »jsonb«" -#: check.c:1168 +#: check.c:1237 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" @@ -358,32 +370,58 @@ msgstr "" " %s\n" "\n" -#: check.c:1190 +#: check.c:1259 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Prüfe auf Rollen, die mit »pg_« anfangen" -#: check.c:1200 +#: check.c:1269 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "Der alte Cluster enthält Rollen, die mit »pg_« anfangen\n" -#: check.c:1202 +#: check.c:1271 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "Der neue Cluster enthält Rollen, die mit »pg_« anfangen\n" -#: check.c:1228 +#: check.c:1292 +#, c-format +msgid "Checking for user-defined encoding conversions" +msgstr "Prüfe auf benutzerdefinierte Kodierungsumwandlungen" + +#: check.c:1355 +#, c-format +msgid "" +"Your installation contains user-defined encoding conversions.\n" +"The conversion function parameters changed in PostgreSQL version 14\n" +"so this cluster cannot currently be upgraded. You can remove the\n" +"encoding conversions in the old cluster and restart the upgrade.\n" +"A list of user-defined encoding conversions is in the file:\n" +" %s\n" +"\n" +msgstr "" +"Ihre Installation enthält benutzerdefinierte\n" +"Kodierungsumwandlungen. Die Parameter von Umwandlungsfunktionen wurden\n" +"in PostgreSQL Version 14 geändert. Daher kann dieser Cluster\n" +"gegenwärtig nicht aktualisiert werden. Sie können die\n" +"Kodierungsumwandlungen im alten Cluster entfernen und das Upgrade neu\n" +"starten. Eine Liste der benutzerdefinierten Kodierungsumwandlungen ist\n" +"in der Datei:\n" +" %s\n" +"\n" + +#: check.c:1382 #, c-format msgid "failed to get the current locale\n" msgstr "konnte aktuelle Locale nicht ermitteln\n" -#: check.c:1237 +#: check.c:1391 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "konnte System-Locale-Namen für »%s« nicht ermitteln\n" -#: check.c:1243 +#: check.c:1397 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "konnte alte Locale »%s« nicht wiederherstellen\n" @@ -428,8 +466,8 @@ msgstr "Im alten Cluster fehlen Cluster-Zustandsinformationen:\n" msgid "The target cluster lacks cluster state information:\n" msgstr "Im neuen Cluster fehlen Cluster-Zustandsinformationen:\n" -#: controldata.c:208 dump.c:49 pg_upgrade.c:339 pg_upgrade.c:375 -#: relfilenode.c:247 util.c:79 +#: controldata.c:208 dump.c:49 pg_upgrade.c:335 pg_upgrade.c:371 +#: relfilenode.c:243 server.c:33 util.c:79 #, c-format msgid "%s" msgstr "%s" @@ -450,112 +488,112 @@ msgstr "%d: Problem mit pg_resetwal\n" msgid "%d: controldata retrieval problem\n" msgstr "%d: Problem beim Ermitteln der Kontrolldaten\n" -#: controldata.c:546 +#: controldata.c:560 #, c-format msgid "The source cluster lacks some required control information:\n" msgstr "Im alten Cluster fehlen einige notwendige Kontrollinformationen:\n" -#: controldata.c:549 +#: controldata.c:563 #, c-format msgid "The target cluster lacks some required control information:\n" msgstr "Im neuen Cluster fehlen einige notwendige Kontrollinformationen:\n" -#: controldata.c:552 +#: controldata.c:566 #, c-format msgid " checkpoint next XID\n" msgstr " Checkpoint nächste XID\n" -#: controldata.c:555 +#: controldata.c:569 #, c-format msgid " latest checkpoint next OID\n" msgstr " NextOID des letzten Checkpoints\n" -#: controldata.c:558 +#: controldata.c:572 #, c-format msgid " latest checkpoint next MultiXactId\n" msgstr " NextMultiXactId des letzten Checkpoints\n" -#: controldata.c:562 +#: controldata.c:576 #, c-format msgid " latest checkpoint oldest MultiXactId\n" msgstr " oldestMultiXid des letzten Checkpoints\n" -#: controldata.c:565 +#: controldata.c:579 #, c-format msgid " latest checkpoint next MultiXactOffset\n" msgstr " NextMultiOffset des letzten Checkpoints\n" -#: controldata.c:568 +#: controldata.c:582 #, c-format msgid " first WAL segment after reset\n" msgstr " erstes WAL-Segment nach dem Reset\n" -#: controldata.c:571 +#: controldata.c:585 #, c-format msgid " float8 argument passing method\n" msgstr " Übergabe von Float8-Argumenten\n" -#: controldata.c:574 +#: controldata.c:588 #, c-format msgid " maximum alignment\n" msgstr " maximale Ausrichtung (Alignment)\n" -#: controldata.c:577 +#: controldata.c:591 #, c-format msgid " block size\n" msgstr " Blockgröße\n" -#: controldata.c:580 +#: controldata.c:594 #, c-format msgid " large relation segment size\n" msgstr " Segmentgröße für große Relationen\n" -#: controldata.c:583 +#: controldata.c:597 #, c-format msgid " WAL block size\n" msgstr " WAL-Blockgröße\n" -#: controldata.c:586 +#: controldata.c:600 #, c-format msgid " WAL segment size\n" msgstr " WAL-Segmentgröße\n" -#: controldata.c:589 +#: controldata.c:603 #, c-format msgid " maximum identifier length\n" msgstr " maximale Bezeichnerlänge\n" -#: controldata.c:592 +#: controldata.c:606 #, c-format msgid " maximum number of indexed columns\n" msgstr " maximale Anzahl indizierter Spalten\n" -#: controldata.c:595 +#: controldata.c:609 #, c-format msgid " maximum TOAST chunk size\n" msgstr " maximale TOAST-Chunk-Größe\n" -#: controldata.c:599 +#: controldata.c:613 #, c-format msgid " large-object chunk size\n" msgstr " Large-Object-Chunk-Größe\n" -#: controldata.c:602 +#: controldata.c:616 #, c-format msgid " dates/times are integers?\n" msgstr " Datum/Zeit sind Ganzzahlen?\n" -#: controldata.c:606 +#: controldata.c:620 #, c-format msgid " data checksum version\n" msgstr " Datenprüfsummenversion\n" -#: controldata.c:608 +#: controldata.c:622 #, c-format msgid "Cannot continue without required control information, terminating\n" msgstr "Kann ohne die benötigten Kontrollinformationen nicht fortsetzen, Programm wird beendet\n" -#: controldata.c:623 +#: controldata.c:637 #, c-format msgid "" "old and new pg_controldata alignments are invalid or do not match\n" @@ -564,77 +602,77 @@ msgstr "" "altes und neues Alignment in pg_controldata ist ungültig oder stimmt nicht überein\n" "Wahrscheinlich ist ein Cluster eine 32-Bit-Installation und der andere 64-Bit\n" -#: controldata.c:627 +#: controldata.c:641 #, c-format msgid "old and new pg_controldata block sizes are invalid or do not match\n" msgstr "alte und neue Blockgrößen von pg_controldata sind ungültig oder stimmen nicht überein\n" -#: controldata.c:630 +#: controldata.c:644 #, c-format msgid "old and new pg_controldata maximum relation segment sizes are invalid or do not match\n" msgstr "alte und neue maximale Relationssegmentgrößen von pg_controldata sind ungültig oder stimmen nicht überein\n" -#: controldata.c:633 +#: controldata.c:647 #, c-format msgid "old and new pg_controldata WAL block sizes are invalid or do not match\n" msgstr "alte und neue WAL-Blockgrößen von pg_controldata sind ungültig oder stimmen nicht überein\n" -#: controldata.c:636 +#: controldata.c:650 #, c-format msgid "old and new pg_controldata WAL segment sizes are invalid or do not match\n" msgstr "alte und neue WAL-Segmentgrößen von pg_controldata sind ungültig oder stimmen nicht überein\n" -#: controldata.c:639 +#: controldata.c:653 #, c-format msgid "old and new pg_controldata maximum identifier lengths are invalid or do not match\n" msgstr "alte und neue maximale Bezeichnerlängen von pg_controldata sind ungültig oder stimmen nicht überein\n" -#: controldata.c:642 +#: controldata.c:656 #, c-format msgid "old and new pg_controldata maximum indexed columns are invalid or do not match\n" msgstr "alte und neue Maximalzahlen indizierter Spalten von pg_controldata sind ungültig oder stimmen nicht überein\n" -#: controldata.c:645 +#: controldata.c:659 #, c-format msgid "old and new pg_controldata maximum TOAST chunk sizes are invalid or do not match\n" msgstr "alte und neue maximale TOAST-Chunk-Größen von pg_controldata sind ungültig oder stimmen nicht überein\n" -#: controldata.c:650 +#: controldata.c:664 #, c-format msgid "old and new pg_controldata large-object chunk sizes are invalid or do not match\n" msgstr "alte und neue Large-Object-Chunk-Größen von pg_controldata sind ungültig oder stimmen nicht überein\n" -#: controldata.c:653 +#: controldata.c:667 #, c-format msgid "old and new pg_controldata date/time storage types do not match\n" msgstr "alte und neue Speicherung von Datums- und Zeittypen von pg_controldata ist ungültig oder stimmt nicht überein\n" -#: controldata.c:666 +#: controldata.c:680 #, c-format msgid "old cluster does not use data checksums but the new one does\n" msgstr "der alte Cluster verwendet keine Datenprüfsummen, aber der neue verwendet sie\n" -#: controldata.c:669 +#: controldata.c:683 #, c-format msgid "old cluster uses data checksums but the new one does not\n" msgstr "die alte Cluster verwendet Datenprüfsummen, aber der neue nicht\n" -#: controldata.c:671 +#: controldata.c:685 #, c-format msgid "old and new cluster pg_controldata checksum versions do not match\n" msgstr "Prüfsummenversionen im alten und neuen Cluster stimmen nicht überein\n" -#: controldata.c:682 +#: controldata.c:696 #, c-format msgid "Adding \".old\" suffix to old global/pg_control" msgstr "Füge Endung ».old« an altes global/pg_control an" -#: controldata.c:687 +#: controldata.c:701 #, c-format msgid "Unable to rename %s to %s.\n" msgstr "Konnte %s nicht in %s umbenennen.\n" -#: controldata.c:690 +#: controldata.c:704 #, c-format msgid "" "\n" @@ -661,32 +699,32 @@ msgstr "Erzeuge Dump der globalen Objekte" msgid "Creating dump of database schemas\n" msgstr "Erzeuge Dump der Datenbankschemas\n" -#: exec.c:44 +#: exec.c:45 #, c-format msgid "could not get pg_ctl version data using %s: %s\n" msgstr "konnte pg_ctl-Versionsdaten mit %s nicht ermitteln: %s\n" -#: exec.c:50 +#: exec.c:51 #, c-format msgid "could not get pg_ctl version output from %s\n" msgstr "konnte pg_ctl-Version nicht ermitteln von %s\n" -#: exec.c:104 exec.c:108 +#: exec.c:105 exec.c:109 #, c-format msgid "command too long\n" msgstr "Befehl zu lang\n" -#: exec.c:110 util.c:37 util.c:225 +#: exec.c:111 util.c:37 util.c:225 #, c-format msgid "%s\n" msgstr "%s\n" -#: exec.c:149 option.c:217 +#: exec.c:150 option.c:222 #, c-format msgid "could not open log file \"%s\": %m\n" msgstr "konnte Logdatei »%s« nicht öffnen: %m\n" -#: exec.c:178 +#: exec.c:179 #, c-format msgid "" "\n" @@ -695,12 +733,12 @@ msgstr "" "\n" "*fehlgeschlagen*" -#: exec.c:181 +#: exec.c:182 #, c-format msgid "There were problems executing \"%s\"\n" msgstr "Probleme beim Ausführen von »%s«\n" -#: exec.c:184 +#: exec.c:185 #, c-format msgid "" "Consult the last few lines of \"%s\" or \"%s\" for\n" @@ -709,7 +747,7 @@ msgstr "" "Prüfen Sie die letzten Zeilen von »%s« oder »%s« für den\n" "wahrscheinlichen Grund für das Scheitern.\n" -#: exec.c:189 +#: exec.c:190 #, c-format msgid "" "Consult the last few lines of \"%s\" for\n" @@ -718,46 +756,51 @@ msgstr "" "Prüfen Sie die letzten Zeilen von »%s« für den\n" "wahrscheinlichen Grund für das Scheitern.\n" -#: exec.c:204 option.c:226 +#: exec.c:205 option.c:231 #, c-format msgid "could not write to log file \"%s\": %m\n" msgstr "konnte nicht in Logdatei »%s «schreiben: %m\n" -#: exec.c:230 +#: exec.c:231 #, c-format msgid "could not open file \"%s\" for reading: %s\n" msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %s\n" -#: exec.c:257 +#: exec.c:258 #, c-format msgid "You must have read and write access in the current directory.\n" msgstr "Sie müssen Lese- und Schreibzugriff im aktuellen Verzeichnis haben.\n" -#: exec.c:310 exec.c:372 exec.c:436 +#: exec.c:311 exec.c:377 #, c-format msgid "check for \"%s\" failed: %s\n" msgstr "Prüfen von »%s« fehlgeschlagen: %s\n" -#: exec.c:313 exec.c:375 +#: exec.c:314 exec.c:380 #, c-format msgid "\"%s\" is not a directory\n" msgstr "»%s« ist kein Verzeichnis\n" -#: exec.c:439 +#: exec.c:430 #, c-format msgid "check for \"%s\" failed: not a regular file\n" msgstr "Prüfen von »%s« fehlgeschlagen: keine reguläre Datei\n" -#: exec.c:451 -#, c-format -msgid "check for \"%s\" failed: cannot read file (permission denied)\n" -msgstr "Prüfen von »%s« fehlgeschlagen: kann nicht gelesen werden (keine Berechtigung)\n" - -#: exec.c:459 +#: exec.c:433 #, c-format msgid "check for \"%s\" failed: cannot execute (permission denied)\n" msgstr "Prüfen von »%s« fehlgeschlagen: kann nicht ausgeführt werden (keine Berechtigung)\n" +#: exec.c:439 +#, c-format +msgid "check for \"%s\" failed: cannot execute\n" +msgstr "Prüfen von »%s« fehlgeschlagen: kann nicht ausgeführt werden\n" + +#: exec.c:449 +#, c-format +msgid "check for \"%s\" failed: incorrect version: found \"%s\", expected \"%s\"\n" +msgstr "Prüfen von »%s« fehlgeschlagen: falsche Version: gefunden »%s«, erwartet »%s«\n" + #: file.c:43 file.c:61 #, c-format msgid "error while cloning relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" @@ -1008,67 +1051,67 @@ msgstr "Datenbank: %s\n" msgid "relname: %s.%s: reloid: %u reltblspace: %s\n" msgstr "relname: %s.%s: reloid: %u reltblspace: %s\n" -#: option.c:102 +#: option.c:103 #, c-format msgid "%s: cannot be run as root\n" msgstr "%s: kann nicht als root ausgeführt werden\n" -#: option.c:170 +#: option.c:171 #, c-format msgid "invalid old port number\n" msgstr "ungültige alte Portnummer\n" -#: option.c:175 +#: option.c:176 #, c-format msgid "invalid new port number\n" msgstr "ungültige neue Portnummer\n" -#: option.c:207 +#: option.c:212 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: option.c:214 +#: option.c:219 #, c-format msgid "too many command-line arguments (first is \"%s\")\n" msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)\n" -#: option.c:220 +#: option.c:225 #, c-format msgid "Running in verbose mode\n" msgstr "Ausführung im Verbose-Modus\n" -#: option.c:251 +#: option.c:256 msgid "old cluster binaries reside" msgstr "die Programmdateien des alten Clusters liegen" -#: option.c:253 +#: option.c:258 msgid "new cluster binaries reside" msgstr "die Programmdateien des neuen Clusters liegen" -#: option.c:255 +#: option.c:260 msgid "old cluster data resides" msgstr "die Daten das alten Clusters liegen" -#: option.c:257 +#: option.c:262 msgid "new cluster data resides" msgstr "die Daten des neuen Clusters liegen" -#: option.c:259 +#: option.c:264 msgid "sockets will be created" msgstr "die Sockets erzeugt werden sollen" -#: option.c:276 option.c:374 +#: option.c:281 option.c:381 #, c-format msgid "could not determine current directory\n" msgstr "konnte aktuelles Verzeichnis nicht ermitteln\n" -#: option.c:279 +#: option.c:284 #, c-format msgid "cannot run pg_upgrade from inside the new cluster data directory on Windows\n" msgstr "auf Windows kann pg_upgrade nicht von innerhalb des Cluster-Datenverzeichnisses ausgeführt werden\n" -#: option.c:288 +#: option.c:293 #, c-format msgid "" "pg_upgrade upgrades a PostgreSQL cluster to a different major version.\n" @@ -1077,12 +1120,12 @@ msgstr "" "pg_upgrade aktualisiert einen PostgreSQL-Cluster auf eine neue Hauptversion.\n" "\n" -#: option.c:289 +#: option.c:294 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: option.c:290 +#: option.c:295 #, c-format msgid "" " pg_upgrade [OPTION]...\n" @@ -1091,17 +1134,17 @@ msgstr "" " pg_upgrade [OPTION]...\n" "\n" -#: option.c:291 +#: option.c:296 #, c-format msgid "Options:\n" msgstr "Optionen:\n" -#: option.c:292 +#: option.c:297 #, c-format msgid " -b, --old-bindir=BINDIR old cluster executable directory\n" msgstr " -b, --old-bindir=BINVERZ Programmverzeichnis des alten Clusters\n" -#: option.c:293 +#: option.c:298 #, c-format msgid "" " -B, --new-bindir=BINDIR new cluster executable directory (default\n" @@ -1110,87 +1153,97 @@ msgstr "" " -B, --new-bindir=BINVERZ Programmverzeichnis des neuen Clusters\n" " (Standard: gleiches Verzeichnis wie pg_upgrade)\n" -#: option.c:295 +#: option.c:300 #, c-format msgid " -c, --check check clusters only, don't change any data\n" msgstr " -c, --check nur Cluster prüfen, keine Daten ändern\n" -#: option.c:296 +#: option.c:301 #, c-format msgid " -d, --old-datadir=DATADIR old cluster data directory\n" msgstr " -d, --old-datadir=DATENVERZ Datenverzeichnis des alten Clusters\n" -#: option.c:297 +#: option.c:302 #, c-format msgid " -D, --new-datadir=DATADIR new cluster data directory\n" msgstr " -D, --new-datadir=DATENVERZ Datenverzeichnis des neuen Clusters\n" -#: option.c:298 +#: option.c:303 #, c-format msgid " -j, --jobs=NUM number of simultaneous processes or threads to use\n" msgstr " -j, --jobs=NUM Anzahl paralleler Prozesse oder Threads\n" -#: option.c:299 +#: option.c:304 #, c-format msgid " -k, --link link instead of copying files to new cluster\n" msgstr " -k, --link Dateien in den neuen Cluster verknüpfen statt kopieren\n" -#: option.c:300 +#: option.c:305 #, c-format msgid " -o, --old-options=OPTIONS old cluster options to pass to the server\n" msgstr " -o, --old-options=OPTIONEN Serveroptionen für den alten Cluster\n" -#: option.c:301 +#: option.c:306 #, c-format msgid " -O, --new-options=OPTIONS new cluster options to pass to the server\n" msgstr " -O, --new-options=OPTIONEN Serveroptionen für den neuen Cluster\n" -#: option.c:302 +#: option.c:307 #, c-format msgid " -p, --old-port=PORT old cluster port number (default %d)\n" msgstr " -p, --old-port=PORT Portnummer für den alten Cluster (Standard: %d)\n" -#: option.c:303 +#: option.c:308 #, c-format msgid " -P, --new-port=PORT new cluster port number (default %d)\n" msgstr " -P, --new-port=PORT Portnummer für den neuen Cluster (Standard: %d)\n" -#: option.c:304 +#: option.c:309 #, c-format msgid " -r, --retain retain SQL and log files after success\n" msgstr " -r, --retain SQL- und Logdateien bei Erfolg aufheben\n" -#: option.c:305 +#: option.c:310 #, c-format msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" msgstr " -s, --socketdir=VERZ Verzeichnis für Socket (Standard: aktuelles Verz.)\n" -#: option.c:306 +#: option.c:311 #, c-format msgid " -U, --username=NAME cluster superuser (default \"%s\")\n" msgstr " -U, --username=NAME Cluster-Superuser (Standard: »%s«)\n" -#: option.c:307 +#: option.c:312 #, c-format msgid " -v, --verbose enable verbose internal logging\n" msgstr " -v, --verbose »Verbose«-Modus einschalten\n" -#: option.c:308 +#: option.c:313 #, c-format msgid " -V, --version display version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: option.c:309 +#: option.c:314 #, c-format msgid " --clone clone instead of copying files to new cluster\n" msgstr " --clone Dateien in den neuen Cluster klonen statt kopieren\n" -#: option.c:310 +#: option.c:315 +#, c-format +msgid "" +" --index-collation-versions-unknown\n" +" mark text indexes as needing to be rebuilt\n" +msgstr "" +" --index-collation-versions-unknown\n" +" Textindexe markieren, dass sie neu gebaut werden\n" +" müssen\n" + +#: option.c:317 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: option.c:311 +#: option.c:318 #, c-format msgid "" "\n" @@ -1205,7 +1258,7 @@ msgstr "" " den Postmaster für den alten Cluster anhalten\n" " den Postmaster für den neuen Cluster anhalten\n" -#: option.c:316 +#: option.c:323 #, c-format msgid "" "\n" @@ -1222,7 +1275,7 @@ msgstr "" " das »bin«-Verzeichnis der alten Version (-b BINVERZ)\n" " das »bin«-Verzeichnis der neuen Version (-B BINVERZ)\n" -#: option.c:322 +#: option.c:329 #, c-format msgid "" "\n" @@ -1235,7 +1288,7 @@ msgstr "" " pg_upgrade -d alterCluster/data -D neuerCluster/data -b alterCluster/bin -B neuerCluster/bin\n" "oder\n" -#: option.c:327 +#: option.c:334 #, c-format msgid "" " $ export PGDATAOLD=oldCluster/data\n" @@ -1250,7 +1303,7 @@ msgstr "" " $ export PGBINNEW=neuerCluster/bin\n" " $ pg_upgrade\n" -#: option.c:333 +#: option.c:340 #, c-format msgid "" " C:\\> set PGDATAOLD=oldCluster/data\n" @@ -1265,7 +1318,7 @@ msgstr "" " C:\\> set PGBINNEW=neuerCluster/bin\n" " C:\\> pg_upgrade\n" -#: option.c:339 +#: option.c:346 #, c-format msgid "" "\n" @@ -1274,12 +1327,12 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: option.c:340 +#: option.c:347 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: option.c:380 +#: option.c:387 #, c-format msgid "" "You must identify the directory where the %s.\n" @@ -1288,27 +1341,27 @@ msgstr "" "Sie müssen das Verzeichnis angeben, wo %s.\n" "Bitte verwenden Sie die Kommandzeilenoption %s oder die Umgebungsvariable %s.\n" -#: option.c:432 +#: option.c:439 #, c-format msgid "Finding the real data directory for the source cluster" msgstr "Suche das tatsächliche Datenverzeichnis des alten Clusters" -#: option.c:434 +#: option.c:441 #, c-format msgid "Finding the real data directory for the target cluster" msgstr "Suche das tatsächliche Datenverzeichnis des neuen Clusters" -#: option.c:446 +#: option.c:453 #, c-format msgid "could not get data directory using %s: %s\n" msgstr "konnte Datenverzeichnis mit %s nicht ermitteln: %s\n" -#: option.c:505 +#: option.c:512 #, c-format msgid "could not read line %d from file \"%s\": %s\n" msgstr "konnte Zeile %d aus Datei »%s« nicht lesen: %s\n" -#: option.c:522 +#: option.c:529 #, c-format msgid "user-supplied old port number %hu corrected to %hu\n" msgstr "vom Benutzer angegebene Portnummer %hu wurde auf %hu korrigiert\n" @@ -1325,8 +1378,8 @@ msgstr "konnte Arbeits-Thread nicht erzeugen: %s\n" #: parallel.c:300 #, c-format -msgid "waitpid() failed: %s\n" -msgstr "waitpid() fehlgeschlagen: %s\n" +msgid "%s() failed: %s\n" +msgstr "%s() fehlgeschlagen: %s\n" #: parallel.c:304 #, c-format @@ -1338,12 +1391,12 @@ msgstr "Kindprozess wurde abnormal beendet: Status %d\n" msgid "child worker exited abnormally: %s\n" msgstr "Kindprozess wurde abnormal beendet: %s\n" -#: pg_upgrade.c:108 +#: pg_upgrade.c:107 #, c-format msgid "could not read permissions of directory \"%s\": %s\n" msgstr "konnte Zugriffsrechte von Verzeichnis »%s« nicht lesen: %s\n" -#: pg_upgrade.c:123 +#: pg_upgrade.c:122 #, c-format msgid "" "\n" @@ -1354,17 +1407,17 @@ msgstr "" "Führe Upgrade durch\n" "-------------------\n" -#: pg_upgrade.c:166 +#: pg_upgrade.c:165 #, c-format msgid "Setting next OID for new cluster" msgstr "Setze nächste OID im neuen Cluster" -#: pg_upgrade.c:173 +#: pg_upgrade.c:172 #, c-format msgid "Sync data directory to disk" msgstr "Synchronisiere Datenverzeichnis auf Festplatte" -#: pg_upgrade.c:185 +#: pg_upgrade.c:183 #, c-format msgid "" "\n" @@ -1375,12 +1428,12 @@ msgstr "" "Upgrade abgeschlossen\n" "---------------------\n" -#: pg_upgrade.c:220 +#: pg_upgrade.c:216 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: konnte eigene Programmdatei nicht finden\n" -#: pg_upgrade.c:246 +#: pg_upgrade.c:242 #, c-format msgid "" "There seems to be a postmaster servicing the old cluster.\n" @@ -1389,7 +1442,7 @@ msgstr "" "Es läuft scheinbar ein Postmaster für den alten Cluster.\n" "Bitte beenden Sie diesen Postmaster und versuchen Sie es erneut.\n" -#: pg_upgrade.c:259 +#: pg_upgrade.c:255 #, c-format msgid "" "There seems to be a postmaster servicing the new cluster.\n" @@ -1398,67 +1451,67 @@ msgstr "" "Es läuft scheinbar ein Postmaster für den neuen Cluster.\n" "Bitte beenden Sie diesen Postmaster und versuchen Sie es erneut.\n" -#: pg_upgrade.c:273 +#: pg_upgrade.c:269 #, c-format msgid "Analyzing all rows in the new cluster" msgstr "Analysiere alle Zeilen im neuen Cluster" -#: pg_upgrade.c:286 +#: pg_upgrade.c:282 #, c-format msgid "Freezing all rows in the new cluster" msgstr "Friere alle Zeilen im neuen Cluster ein" -#: pg_upgrade.c:306 +#: pg_upgrade.c:302 #, c-format msgid "Restoring global objects in the new cluster" msgstr "Stelle globale Objekte im neuen Cluster wieder her" -#: pg_upgrade.c:321 +#: pg_upgrade.c:317 #, c-format msgid "Restoring database schemas in the new cluster\n" msgstr "Stelle Datenbankschemas im neuen Cluster wieder her\n" -#: pg_upgrade.c:425 +#: pg_upgrade.c:421 #, c-format msgid "Deleting files from new %s" msgstr "Lösche Dateien aus neuem %s" -#: pg_upgrade.c:429 +#: pg_upgrade.c:425 #, c-format msgid "could not delete directory \"%s\"\n" msgstr "konnte Verzeichnis »%s« nicht löschen\n" -#: pg_upgrade.c:448 +#: pg_upgrade.c:444 #, c-format msgid "Copying old %s to new server" msgstr "Kopiere altes %s zum neuen Server" -#: pg_upgrade.c:475 +#: pg_upgrade.c:471 #, c-format msgid "Setting next transaction ID and epoch for new cluster" msgstr "Setze nächste Transaktions-ID und -epoche im neuen Cluster" -#: pg_upgrade.c:505 +#: pg_upgrade.c:501 #, c-format msgid "Setting next multixact ID and offset for new cluster" msgstr "Setze nächste Multixact-ID und nächstes Offset im neuen Cluster" -#: pg_upgrade.c:529 +#: pg_upgrade.c:525 #, c-format msgid "Setting oldest multixact ID in new cluster" msgstr "Setze älteste Multixact-ID im neuen Cluster" -#: pg_upgrade.c:549 +#: pg_upgrade.c:545 #, c-format msgid "Resetting WAL archives" msgstr "Setze WAL-Archive zurück" -#: pg_upgrade.c:592 +#: pg_upgrade.c:588 #, c-format msgid "Setting frozenxid and minmxid counters in new cluster" msgstr "Setze frozenxid und minmxid im neuen Cluster" -#: pg_upgrade.c:594 +#: pg_upgrade.c:590 #, c-format msgid "Setting minmxid counter in new cluster" msgstr "Setze minmxid im neuen Cluster" @@ -1483,47 +1536,42 @@ msgstr "Verknüpfe Benutzertabellendateien\n" msgid "old database \"%s\" not found in the new cluster\n" msgstr "alte Datenbank »%s« nicht im neuen Cluster gefunden\n" -#: relfilenode.c:234 +#: relfilenode.c:230 #, c-format msgid "error while checking for file existence \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "Fehler beim Prüfen auf Existenz der Datei für »%s.%s« (»%s« nach »%s«): %s\n" -#: relfilenode.c:252 +#: relfilenode.c:248 #, c-format msgid "rewriting \"%s\" to \"%s\"\n" msgstr "konvertiere »%s« nach »%s«\n" -#: relfilenode.c:260 +#: relfilenode.c:256 #, c-format msgid "cloning \"%s\" to \"%s\"\n" msgstr "klone »%s« nach »%s«\n" -#: relfilenode.c:265 +#: relfilenode.c:261 #, c-format msgid "copying \"%s\" to \"%s\"\n" msgstr "kopiere »%s« nach »%s«\n" -#: relfilenode.c:270 +#: relfilenode.c:266 #, c-format msgid "linking \"%s\" to \"%s\"\n" msgstr "verknüpfe »%s« nach »%s«\n" -#: server.c:33 -#, c-format -msgid "connection to database failed: %s" -msgstr "Verbindung zur Datenbank fehlgeschlagen: %s" - -#: server.c:39 server.c:141 util.c:135 util.c:165 +#: server.c:38 server.c:142 util.c:135 util.c:165 #, c-format msgid "Failure, exiting\n" msgstr "Fehlgeschlagen, Programm wird beendet\n" -#: server.c:131 +#: server.c:132 #, c-format msgid "executing: %s\n" msgstr "führe aus: %s\n" -#: server.c:137 +#: server.c:138 #, c-format msgid "" "SQL command failed\n" @@ -1534,26 +1582,26 @@ msgstr "" "%s\n" "%s" -#: server.c:167 +#: server.c:168 #, c-format msgid "could not open version file \"%s\": %m\n" msgstr "konnte Versionsdatei »%s« nicht öffnen: %m\n" -#: server.c:171 +#: server.c:172 #, c-format msgid "could not parse version file \"%s\"\n" msgstr "konnte Versionsdatei »%s« nicht interpretieren\n" -#: server.c:294 +#: server.c:298 #, c-format msgid "" "\n" -"connection to database failed: %s" +"%s" msgstr "" "\n" -"Verbindung zur Datenbank fehlgeschlagen: %s" +"%s" -#: server.c:299 +#: server.c:302 #, c-format msgid "" "could not connect to source postmaster started with the command:\n" @@ -1562,7 +1610,7 @@ msgstr "" "konnte nicht mit dem Postmaster für den alten Cluster verbinden, gestartet mit dem Befehl:\n" "%s\n" -#: server.c:303 +#: server.c:306 #, c-format msgid "" "could not connect to target postmaster started with the command:\n" @@ -1571,22 +1619,22 @@ msgstr "" "konnte nicht mit dem Postmaster für den neuen Cluster verbinden, gestartet mit dem Befehl:\n" "%s\n" -#: server.c:317 +#: server.c:320 #, c-format msgid "pg_ctl failed to start the source server, or connection failed\n" msgstr "pg_ctl konnte den Quellserver nicht starten, oder Verbindung fehlgeschlagen\n" -#: server.c:319 +#: server.c:322 #, c-format msgid "pg_ctl failed to start the target server, or connection failed\n" msgstr "pg_ctl konnte den Zielserver nicht starten, oder Verbindung fehlgeschlagen\n" -#: server.c:364 +#: server.c:367 #, c-format msgid "out of memory\n" msgstr "Speicher aufgebraucht\n" -#: server.c:377 +#: server.c:380 #, c-format msgid "libpq environment variable %s has a non-local server value: %s\n" msgstr "libpq-Umgebungsvariable %s hat einen nicht lokalen Serverwert: %s\n" diff --git a/src/bin/pg_upgrade/po/es.po b/src/bin/pg_upgrade/po/es.po index 271759801fcb7..d96f366bfa508 100644 --- a/src/bin/pg_upgrade/po/es.po +++ b/src/bin/pg_upgrade/po/es.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:45+0000\n" -"PO-Revision-Date: 2019-09-29 22:26-0300\n" +"POT-Creation-Date: 2020-09-13 10:45+0000\n" +"PO-Revision-Date: 2020-09-18 18:34-0300\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -274,16 +274,7 @@ msgid "fatal\n" msgstr "fatal\n" #: check.c:887 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains \"contrib/isn\" functions which rely on the\n" -#| "bigint data type. Your old and new clusters pass bigint values\n" -#| "differently so this cluster cannot currently be upgraded. You can\n" -#| "manually upgrade databases that use \"contrib/isn\" facilities and remove\n" -#| "\"contrib/isn\" from the old cluster and restart the upgrade. A list of\n" -#| "the problem functions is in the file:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" "bigint data type. Your old and new clusters pass bigint values\n" @@ -294,12 +285,12 @@ msgid "" " %s\n" "\n" msgstr "" -"Su instalación contiene funciones «contrib/isn» que usan el tipo de dato\n" -"bigint. Los clústers origen y destino pasan valores bigint de distintas\n" -"maneras, por lo que este clúster no puede ser actualizado en este momento.\n" -"Puede actualizar manualmente las bases de datos que contengan funcionalidad\n" -"«contrib/isn» y eliminar el módulo de la base de datos de origen.\n" -"A continuación se provee una lista de funciones problemáticas:\n" +"Su instalación contiene funciones de «contrib/isn» que usan el tip de dato\n" +"bigint. Sus clústers nuevo y antiguo pasar el tipo bigint de distinta forma,\n" +"por lo que este clúster no puede ser actualizado.\n" +"Puede hacer un volcado (dump) de las bases de datos que usan «contrib/isn»,\n" +"eliminarlas, hacer el upgrade, y luego restaurarlas.\n" +"Un listado de funciones problemáticas está en el archivo:\n" " %s\n" "\n" @@ -309,14 +300,7 @@ msgid "Checking for tables WITH OIDS" msgstr "Verificando tablas WITH OIDS" #: check.c:966 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains tables declared WITH OIDS, which is not supported\n" -#| "anymore. Consider removing the oid column using\n" -#| " ALTER TABLE ... SET WITHOUT OIDS;\n" -#| "A list of tables with the problem is in the file:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Your installation contains tables declared WITH OIDS, which is not\n" "supported anymore. Consider removing the oid column using\n" @@ -325,11 +309,12 @@ msgid "" " %s\n" "\n" msgstr "" -"Su instalación contiene tablas declaradas WITH OIDS, que ya no es soportado.\n" -"Considere eliminar las columns oid usando\n" +"Su instalación contiene tablas declaradas WITH OIDS, que ya no está\n" +"soportado. Considere eliminar la columna oid usando\n" " ALTER TABLE ... SET WITHOUT OIDS;\n" -"Una lista de tablas con el problema está en el archivo:\n" +"Una lista de tablas con este problema aparece en el archivo:\n" " %s\n" +"\n" #: check.c:996 #, c-format @@ -337,15 +322,7 @@ msgid "Checking for reg* data types in user tables" msgstr "Verificando tipos de datos reg* en datos de usuario" #: check.c:1077 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains one of the reg* data types in user tables.\n" -#| "These data types reference system OIDs that are not preserved by\n" -#| "pg_upgrade, so this cluster cannot currently be upgraded. You can\n" -#| "remove the problem tables and restart the upgrade. A list of the problem\n" -#| "columns is in the file:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" "These data types reference system OIDs that are not preserved by\n" @@ -355,11 +332,11 @@ msgid "" " %s\n" "\n" msgstr "" -"Su instalación contiene uno de los tipos de dato reg* en tablas de usuario.\n" -"Estos tipos de dato hacen referencia a OIDs de sistema que no son preservados\n" -"por pg_upgrade, por lo que este clúster no puede actualmente actualizarse.\n" -"Puede eliminar las tablas problemáticas y reiniciar la actualización.\n" -"Puede encontrar una lista de columnas problemáticas en el archivo:\n" +"Su instalación contiene uno de los tipos reg* en tablas de usuario. Estos tipos\n" +"de dato hacen referencia a OIDs de sistema que no son preservados por pg_upgrade,\n" +"por lo que este clúster no puede ser actualizado.\n" +"Puede eliminar las tablas y reiniciar la actualización.\n" +"Un listado de columnas problemáticas está en el archivo:\n" " %s\n" "\n" @@ -369,14 +346,7 @@ msgid "Checking for incompatible \"jsonb\" data type" msgstr "Verificando datos de usuario en tipo «jsonb» incompatible" #: check.c:1168 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains the \"jsonb\" data type in user tables.\n" -#| "The internal format of \"jsonb\" changed during 9.4 beta so this cluster cannot currently\n" -#| "be upgraded. You can remove the problem tables and restart the upgrade. A list\n" -#| "of the problem columns is in the file:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" "The internal format of \"jsonb\" changed during 9.4 beta so this\n" @@ -386,11 +356,11 @@ msgid "" " %s\n" "\n" msgstr "" -"Su instalación contiene alguno de los tipos de dato «jsonb» en tablas de usuario.\n" -"El formato interno de «jsonb» cambió durante 9.4 beta, de manera que este clúster\n" -"no puede ser actualizado en este momento. Puede eliminar las tablas\n" -"problemáticas y reiniciar la actualización. Una lista de columnas puede\n" -"encontrarse en el archivo:\n" +"Su instalación contiene el tipo «jsonb» en tablas de usuario. Este tipo\n" +"El formato interno de «jsonb» cambió durante 9.4 beta, por lo que este clúster\n" +"no puede ser actualizado.\n" +"Puede eliminar las tablas y reiniciar la actualización.\n" +"Un listado de columnas problemáticas está en el archivo:\n" " %s\n" "\n" @@ -906,8 +876,9 @@ msgstr "" "La versión del esquema «public» de esta función fue creada por una\n" "instalación pre-8.1 de plpython, y debe eliminarse para que pg_upgrade\n" "pueda completar puesto que hace referencia a un archivo objeto compartido\n" -"«plpython» ahora obsoleto. Puede eliminar la versión del esquema «public»\n" -"de esta función ejecutando la siguiente orden:\n" +"«plpython» ahora obsoleto.\n" +"Puede eliminar la versión del esquema «public» de esta función ejecutando\n" +"la siguiente orden:\n" "\n" " DROP FUNCTION public.plpython_call_handler()\n" "\n" @@ -935,10 +906,9 @@ msgid "could not load library \"%s\": %s" msgstr "no se pudo cargar la biblioteca «%s»: %s" #: function.c:253 -#, fuzzy, c-format -#| msgid "Database: %s\n" +#, c-format msgid "In database: %s\n" -msgstr "Base de datos: %s\n" +msgstr "En la base de datos: %s\n" #: function.c:263 #, c-format @@ -1069,10 +1039,9 @@ msgid "Try \"%s --help\" for more information.\n" msgstr "Pruebe «%s --help» para mayor información.\n" #: option.c:214 -#, fuzzy, c-format -#| msgid "too many command-line arguments (first is \"%s\")" +#, c-format msgid "too many command-line arguments (first is \"%s\")\n" -msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" +msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)\n" #: option.c:220 #, c-format @@ -1143,12 +1112,13 @@ msgid " -b, --old-bindir=BINDIR old cluster executable directory\n" msgstr " -b, --old-bindir=BINDIR directorio de ejecutables del clúster antiguo\n" #: option.c:293 -#, fuzzy, c-format -#| msgid " -B, --new-bindir=BINDIR new cluster executable directory\n" +#, c-format msgid "" " -B, --new-bindir=BINDIR new cluster executable directory (default\n" " same directory as pg_upgrade)\n" -msgstr " -B, --new-bindir=BINDIR directorio de ejecutables del clúster nuevo\n" +msgstr "" +" -B, --new-bindir=BINDIR directorio de ejecutables del clúster nuevo\n" +" (por omisión el mismo directorio que pg_upgrade)\n" #: option.c:295 #, c-format @@ -1166,10 +1136,9 @@ msgid " -D, --new-datadir=DATADIR new cluster data directory\n" msgstr " -D, --new-datadir=DATADIR directorio de datos del clúster nuevo\n" #: option.c:298 -#, fuzzy, c-format -#| msgid " -j, --jobs number of simultaneous processes or threads to use\n" +#, c-format msgid " -j, --jobs=NUM number of simultaneous processes or threads to use\n" -msgstr " -j, --jobs número de procesos o hilos simultáneos a usar\n" +msgstr " -j, --jobs=NUM máximo de procesos paralelos para restaurar\n" #: option.c:299 #, c-format @@ -1312,11 +1281,13 @@ msgid "" "\n" "Report bugs to <%s>.\n" msgstr "" +"\n" +"Reporte errores a <%s>.\n" #: option.c:340 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" #: option.c:380 #, c-format @@ -1574,18 +1545,16 @@ msgstr "" "%s" #: server.c:167 -#, fuzzy, c-format -#| msgid "could not open version file: %s\n" +#, c-format msgid "could not open version file \"%s\": %m\n" -msgstr "no se pudo abrir el archivo de versión: %s\n" +msgstr "no se pudo abrir el archivo de versión «%s»: %m\n" #: server.c:171 -#, fuzzy, c-format -#| msgid "could not open version file: %s\n" +#, c-format msgid "could not parse version file \"%s\"\n" -msgstr "no se pudo abrir el archivo de versión: %s\n" +msgstr "no se pudo interpretar el archivo de versión «%s»\n" -#: server.c:294 +#: server.c:297 #, c-format msgid "" "\n" @@ -1594,7 +1563,7 @@ msgstr "" "\n" "falló la conexión a la base de datos: %s" -#: server.c:299 +#: server.c:302 #, c-format msgid "" "could not connect to source postmaster started with the command:\n" @@ -1603,7 +1572,7 @@ msgstr "" "no se pudo conectar al postmaster de origen iniciado con la orden:\n" "%s\n" -#: server.c:303 +#: server.c:306 #, c-format msgid "" "could not connect to target postmaster started with the command:\n" @@ -1612,22 +1581,22 @@ msgstr "" "no se pudo conectar al postmaster de destino iniciado con la orden:\n" "%s\n" -#: server.c:317 +#: server.c:320 #, c-format msgid "pg_ctl failed to start the source server, or connection failed\n" msgstr "pg_ctl no pudo iniciar el servidor de origen, o la conexión falló\n" -#: server.c:319 +#: server.c:322 #, c-format msgid "pg_ctl failed to start the target server, or connection failed\n" msgstr "pg_ctl no pudo iniciar el servidor de destino, o la conexión falló\n" -#: server.c:364 +#: server.c:367 #, c-format msgid "out of memory\n" msgstr "memoria agotada\n" -#: server.c:377 +#: server.c:380 #, c-format msgid "libpq environment variable %s has a non-local server value: %s\n" msgstr "la variable de ambiente libpq %s tiene un valor de servidor no-local: %s\n" @@ -1759,7 +1728,7 @@ msgid "" msgstr "" "Su instalación contiene el tipo «unknown» en tablas de usuario. Este tipo\n" "ya no es permitido en tablas, por lo que este clúster no puede ser actualizado.\n" -"Puede elimiar las tablas y reiniciar la actualización.\n" +"Puede eliminar las tablas y reiniciar la actualización.\n" "Un listado de columnas problemáticas está en el archivo:\n" " %s\n" "\n" @@ -1808,20 +1777,12 @@ msgstr "" "\n" #: version.c:418 -#, fuzzy, c-format -#| msgid "Checking for invalid \"unknown\" user columns" +#, c-format msgid "Checking for invalid \"sql_identifier\" user columns" -msgstr "Verificando columnas de usuario del tipo no válido «unknown»" +msgstr "Verificando columnas de usuario del tipo «sql_identifier»" #: version.c:426 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains the \"unknown\" data type in user tables. This\n" -#| "data type is no longer allowed in tables, so this cluster cannot currently\n" -#| "be upgraded. You can remove the problem tables and restart the upgrade.\n" -#| "A list of the problem columns is in the file:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Your installation contains the \"sql_identifier\" data type in user tables\n" "and/or indexes. The on-disk format for this data type has changed, so this\n" @@ -1831,19 +1792,11 @@ msgid "" " %s\n" "\n" msgstr "" -"Su instalación contiene el tipo «unknown» en tablas de usuario. Este tipo\n" -"ya no es permitido en tablas, por lo que este clúster no puede ser actualizado.\n" -"Puede elimiar las tablas y reiniciar la actualización.\n" +"Su instalación contiene el tipo «sql_identifier» en tablas de usuario y/o índices.\n" +"Este tipo ya no es permitido en tablas, por lo que este clúster no puede ser\n" +"actualizado.\n" +"Puede eliminar las tablas o cambiar el tipo a «name» y reiniciar la\n" +"actualización.\n" "Un listado de columnas problemáticas está en el archivo:\n" " %s\n" "\n" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Reporte errores a .\n" - -#~ msgid "could not parse PG_VERSION file from %s\n" -#~ msgstr "no se pudo interpretar el archivo PG_VERSION de %s\n" diff --git a/src/bin/pg_upgrade/po/fr.po b/src/bin/pg_upgrade/po/fr.po index d7d6b2829a9b0..4487104347566 100644 --- a/src/bin/pg_upgrade/po/fr.po +++ b/src/bin/pg_upgrade/po/fr.po @@ -7,17 +7,17 @@ msgid "" msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-04-16 06:15+0000\n" -"PO-Revision-Date: 2020-04-16 14:34+0200\n" +"POT-Creation-Date: 2021-04-26 06:47+0000\n" +"PO-Revision-Date: 2021-04-26 11:37+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" -#: check.c:66 +#: check.c:69 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -26,7 +26,7 @@ msgstr "" "Exécution de tests de cohérence sur l'ancien serveur\n" "----------------------------------------------------\n" -#: check.c:72 +#: check.c:75 #, c-format msgid "" "Performing Consistency Checks\n" @@ -35,7 +35,7 @@ msgstr "" "Exécution de tests de cohérence\n" "-------------------------------\n" -#: check.c:190 +#: check.c:211 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "*Les instances sont compatibles*\n" -#: check.c:196 +#: check.c:217 #, c-format msgid "" "\n" @@ -55,34 +55,20 @@ msgstr "" "Si pg_upgrade échoue après cela, vous devez ré-exécuter initdb\n" "sur la nouvelle instance avant de continuer.\n" -#: check.c:232 +#: check.c:260 #, c-format msgid "" -"Optimizer statistics are not transferred by pg_upgrade so,\n" -"once you start the new server, consider running:\n" -" %s\n" -"\n" -msgstr "" -"Les statistiques de l'optimiseur ne sont pas transférées par pg_upgrade,\n" -"donc une fois le nouveau serveur démarré, pensez à exécuter :\n" -" %s\n" -"\n" - -#: check.c:237 -#, c-format -msgid "" -"Optimizer statistics and free space information are not transferred\n" -"by pg_upgrade so, once you start the new server, consider running:\n" -" %s\n" +"Optimizer statistics are not transferred by pg_upgrade.\n" +"Once you start the new server, consider running:\n" +" %s/vacuumdb %s--all --analyze-in-stages\n" "\n" msgstr "" -"Les statistiques de l'optimiseur et les informations sur l'espace libre\n" -"ne sont pas transférées par pg_upgrade, donc une fois le nouveau\n" -"serveur démarré, pensez à exécuter :\n" -" %s\n" +"Les statistiques de l'optimiseur ne sont pas transférées par pg_upgrade.\n" +"Une fois le nouveau serveur démarré, pensez à exécuter :\n" +" %s/vacuumdb %s--all --analyze-in-stages\n" "\n" -#: check.c:244 +#: check.c:266 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -92,7 +78,7 @@ msgstr "" "instance :\n" " %s\n" -#: check.c:249 +#: check.c:271 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -106,84 +92,77 @@ msgstr "" "de l'ancienne instance. Le contenu de l'ancienne instance doit être supprimé\n" "manuellement.\n" -#: check.c:259 +#: check.c:283 #, c-format msgid "Checking cluster versions" msgstr "Vérification des versions des instances" -#: check.c:271 +#: check.c:295 #, c-format msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" msgstr "Cet outil peut seulement mettre à jour les versions 8.4 et ultérieures de PostgreSQL.\n" -#: check.c:275 +#: check.c:299 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Cet outil peut seulement mettre à jour vers la version %s de PostgreSQL.\n" -#: check.c:284 +#: check.c:308 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Cet outil ne peut pas être utilisé pour mettre à jour vers des versions majeures plus anciennes de PostgreSQL.\n" -#: check.c:289 +#: check.c:313 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "Les répertoires des données de l'ancienne instance et des binaires sont de versions majeures différentes.\n" -#: check.c:292 +#: check.c:316 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "Les répertoires des données de la nouvelle instance et des binaires sont de versions majeures différentes.\n" -#: check.c:309 +#: check.c:333 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Lors de la vérification d'un serveur antérieur à la 9.1, vous devez spécifier le numéro de port de l'ancien serveur.\n" -#: check.c:313 +#: check.c:337 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Lors de la vérification d'un serveur en production, l'ancien numéro de port doit être différent du nouveau.\n" -#: check.c:328 +#: check.c:352 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "les encodages de la base de données « %s » ne correspondent pas : ancien « %s », nouveau « %s »\n" -#: check.c:333 +#: check.c:357 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "les valeurs de lc_collate de la base de données « %s » ne correspondent pas : ancien « %s », nouveau « %s »\n" -#: check.c:336 +#: check.c:360 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "les valeurs de lc_ctype de la base de données « %s » ne correspondent pas : ancien « %s », nouveau « %s »\n" -#: check.c:409 +#: check.c:433 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "La nouvelle instance « %s » n'est pas vide : relation « %s.%s » trouvée\n" -#: check.c:458 +#: check.c:490 #, c-format -msgid "Creating script to analyze new cluster" -msgstr "Création d'un script pour analyser la nouvelle instance" +msgid "Checking for new cluster tablespace directories" +msgstr "Vérification des répertoires de tablespace de la nouvelle instance" -#: check.c:472 check.c:600 check.c:864 check.c:943 check.c:1053 check.c:1144 -#: file.c:336 function.c:240 option.c:497 version.c:54 version.c:199 -#: version.c:341 +#: check.c:501 #, c-format -msgid "could not open file \"%s\": %s\n" -msgstr "n'a pas pu ouvrir le fichier « %s » : %s\n" +msgid "new cluster tablespace directory already exists: \"%s\"\n" +msgstr "le répertoire du tablespace de la nouvelle instance existe déjà : « %s »\n" -#: check.c:527 check.c:656 -#, c-format -msgid "could not add execute permission to file \"%s\": %s\n" -msgstr "n'a pas pu ajouter les droits d'exécution pour le fichier « %s » : %s\n" - -#: check.c:563 +#: check.c:534 #, c-format msgid "" "\n" @@ -192,7 +171,7 @@ msgstr "" "\n" "AVERTISSEMENT : le nouveau répertoire de données ne doit pas être à l'intérieur de l'ancien répertoire de données, %s\n" -#: check.c:587 +#: check.c:558 #, c-format msgid "" "\n" @@ -201,73 +180,85 @@ msgstr "" "\n" "AVERTISSEMENT : les emplacements de tablespaces utilisateurs ne doivent pas être à l'intérieur du répertoire de données, %s\n" -#: check.c:597 +#: check.c:568 #, c-format msgid "Creating script to delete old cluster" msgstr "Création du script pour supprimer l'ancienne instance" -#: check.c:676 +#: check.c:571 check.c:835 check.c:933 check.c:1012 check.c:1122 check.c:1213 +#: check.c:1331 file.c:336 function.c:240 option.c:504 version.c:54 +#: version.c:199 version.c:341 +#, c-format +msgid "could not open file \"%s\": %s\n" +msgstr "n'a pas pu ouvrir le fichier « %s » : %s\n" + +#: check.c:627 +#, c-format +msgid "could not add execute permission to file \"%s\": %s\n" +msgstr "n'a pas pu ajouter les droits d'exécution pour le fichier « %s » : %s\n" + +#: check.c:647 #, c-format msgid "Checking database user is the install user" msgstr "Vérification que l'utilisateur de la base de données est l'utilisateur d'installation" -#: check.c:692 +#: check.c:663 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "l'utilisateur de la base de données « %s » n'est pas l'utilisateur d'installation\n" -#: check.c:703 +#: check.c:674 #, c-format msgid "could not determine the number of users\n" msgstr "n'a pas pu déterminer le nombre d'utilisateurs\n" -#: check.c:711 +#: check.c:682 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "Seul l'utilisateur d'installation peut être défini dans la nouvelle instance.\n" -#: check.c:731 +#: check.c:702 #, c-format msgid "Checking database connection settings" msgstr "Vérification des paramètres de connexion de la base de données" -#: check.c:753 +#: check.c:724 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 ne doit pas autoriser les connexions, ie pg_database.datallowconn doit valoir false\n" -#: check.c:763 +#: check.c:734 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Toutes les bases de données, autre que template0, doivent autoriser les connexions, ie pg_database.datallowconn doit valoir true\n" -#: check.c:788 +#: check.c:759 #, c-format msgid "Checking for prepared transactions" msgstr "Vérification des transactions préparées" -#: check.c:797 +#: check.c:768 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "L'instance source contient des transactions préparées\n" -#: check.c:799 +#: check.c:770 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "L'instance cible contient des transactions préparées\n" -#: check.c:825 +#: check.c:796 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Vérification de contrib/isn avec une différence sur le passage des bigint" -#: check.c:886 check.c:965 check.c:1076 check.c:1167 function.c:262 -#: version.c:245 version.c:282 version.c:425 +#: check.c:857 check.c:958 check.c:1034 check.c:1145 check.c:1236 check.c:1354 +#: function.c:262 version.c:245 version.c:282 version.c:425 #, c-format msgid "fatal\n" msgstr "fatal\n" -#: check.c:887 +#: check.c:858 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -290,12 +281,33 @@ msgstr "" " %s\n" "\n" -#: check.c:911 +#: check.c:881 +#, c-format +msgid "Checking for user-defined postfix operators" +msgstr "Vérification des opérateurs postfixes définis par les utilisateurs" + +#: check.c:959 +#, c-format +msgid "" +"Your installation contains user-defined postfix operators, which are not\n" +"supported anymore. Consider dropping the postfix operators and replacing\n" +"them with prefix operators or function calls.\n" +"A list of user-defined postfix operators is in the file:\n" +" %s\n" +"\n" +msgstr "" +"Votre installation contient des opérateurs postfixes définis par des utilisateurs,\n" +"qui ne sont plus supportés. Supprimez les opérateurs postfixes et remplacez-les\n" +"avec des opérateurs préfixes ou des appels de fonctions.\n" +"Une liste des opérateurs postfixes définis par les utilisateurs se trouve dans le fichier :\n" +" %s\n" + +#: check.c:980 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Vérification des tables WITH OIDS" -#: check.c:966 +#: check.c:1035 #, c-format msgid "" "Your installation contains tables declared WITH OIDS, which is not\n" @@ -311,12 +323,12 @@ msgstr "" "Une liste des tables ayant ce problème se trouve dans le fichier :\n" " %s\n" -#: check.c:996 +#: check.c:1065 #, c-format msgid "Checking for reg* data types in user tables" msgstr "Vérification des types de données reg* dans les tables utilisateurs" -#: check.c:1077 +#: check.c:1146 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" @@ -336,12 +348,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1102 +#: check.c:1171 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Vérification des types de données « jsonb » incompatibles" -#: check.c:1168 +#: check.c:1237 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" @@ -360,32 +372,56 @@ msgstr "" " %s\n" "\n" -#: check.c:1190 +#: check.c:1259 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Vérification des rôles commençant avec « pg_ »" -#: check.c:1200 +#: check.c:1269 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "L'instance source contient des rôles commençant avec « pg_ »\n" -#: check.c:1202 +#: check.c:1271 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "L'instance cible contient des rôles commençant avec « pg_ »\n" -#: check.c:1228 +#: check.c:1292 +#, c-format +msgid "Checking for user-defined encoding conversions" +msgstr "Vérification des conversions d'encodage définies par les utilisateurs" + +#: check.c:1355 +#, c-format +msgid "" +"Your installation contains user-defined encoding conversions.\n" +"The conversion function parameters changed in PostgreSQL version 14\n" +"so this cluster cannot currently be upgraded. You can remove the\n" +"encoding conversions in the old cluster and restart the upgrade.\n" +"A list of user-defined encoding conversions is in the file:\n" +" %s\n" +"\n" +msgstr "" +"Votre installation contient des conversions définies par un utilisateur.\n" +"Les paramètres des fonctions de conversion ont changé dans PostgreSQL version 14\n" +"donc cette instance ne peut pas être mise à jour actuellement. Vous devez supprimer\n" +"les conversions d'encodage de l'ancienne instance puis relancer la mise à jour.\n" +"Une liste des conversions d'encodage définies par l'utilisateur se trouve dans le fichier :\n" +" %s\n" +"\n" + +#: check.c:1382 #, c-format msgid "failed to get the current locale\n" msgstr "a échoué pour obtenir la locale courante\n" -#: check.c:1237 +#: check.c:1391 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "a échoué pour obtenir le nom de la locale système « %s »\n" -#: check.c:1243 +#: check.c:1397 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "a échoué pour restaurer l'ancienne locale « %s »\n" @@ -432,8 +468,8 @@ msgstr "Il manque certaines informations d'état requises sur l'instance source msgid "The target cluster lacks cluster state information:\n" msgstr "Il manque certaines informations d'état requises sur l'instance cible :\n" -#: controldata.c:208 dump.c:49 pg_upgrade.c:339 pg_upgrade.c:375 -#: relfilenode.c:247 util.c:79 +#: controldata.c:208 dump.c:49 pg_upgrade.c:335 pg_upgrade.c:371 +#: relfilenode.c:243 server.c:33 util.c:79 #, c-format msgid "%s" msgstr "%s" @@ -454,112 +490,112 @@ msgstr "%d : problème avec pg_resetwal\n" msgid "%d: controldata retrieval problem\n" msgstr "%d : problème de récupération des controldata\n" -#: controldata.c:546 +#: controldata.c:560 #, c-format msgid "The source cluster lacks some required control information:\n" msgstr "Il manque certaines informations de contrôle requises sur l'instance source :\n" -#: controldata.c:549 +#: controldata.c:563 #, c-format msgid "The target cluster lacks some required control information:\n" msgstr "Il manque certaines informations de contrôle requises sur l'instance cible :\n" -#: controldata.c:552 +#: controldata.c:566 #, c-format msgid " checkpoint next XID\n" msgstr " XID du prochain checkpoint\n" -#: controldata.c:555 +#: controldata.c:569 #, c-format msgid " latest checkpoint next OID\n" msgstr " prochain OID du dernier checkpoint\n" -#: controldata.c:558 +#: controldata.c:572 #, c-format msgid " latest checkpoint next MultiXactId\n" msgstr " prochain MultiXactId du dernier checkpoint\n" -#: controldata.c:562 +#: controldata.c:576 #, c-format msgid " latest checkpoint oldest MultiXactId\n" msgstr " plus ancien MultiXactId du dernier checkpoint\n" -#: controldata.c:565 +#: controldata.c:579 #, c-format msgid " latest checkpoint next MultiXactOffset\n" msgstr " prochain MultiXactOffset du dernier checkpoint\n" -#: controldata.c:568 +#: controldata.c:582 #, c-format msgid " first WAL segment after reset\n" msgstr " premier segment WAL après réinitialisation\n" -#: controldata.c:571 +#: controldata.c:585 #, c-format msgid " float8 argument passing method\n" msgstr " méthode de passage de arguments float8\n" -#: controldata.c:574 +#: controldata.c:588 #, c-format msgid " maximum alignment\n" msgstr " alignement maximale\n" -#: controldata.c:577 +#: controldata.c:591 #, c-format msgid " block size\n" msgstr " taille de bloc\n" -#: controldata.c:580 +#: controldata.c:594 #, c-format msgid " large relation segment size\n" msgstr " taille de segment des relations\n" -#: controldata.c:583 +#: controldata.c:597 #, c-format msgid " WAL block size\n" msgstr " taille de bloc d'un WAL\n" -#: controldata.c:586 +#: controldata.c:600 #, c-format msgid " WAL segment size\n" msgstr " taille d'un segment WAL\n" -#: controldata.c:589 +#: controldata.c:603 #, c-format msgid " maximum identifier length\n" msgstr " longueur maximum d'un identifiant\n" -#: controldata.c:592 +#: controldata.c:606 #, c-format msgid " maximum number of indexed columns\n" msgstr " nombre maximum de colonnes indexées\n" -#: controldata.c:595 +#: controldata.c:609 #, c-format msgid " maximum TOAST chunk size\n" msgstr " taille maximale d'un morceau de TOAST\n" -#: controldata.c:599 +#: controldata.c:613 #, c-format msgid " large-object chunk size\n" msgstr " taille d'un morceau Large-Object\n" -#: controldata.c:602 +#: controldata.c:616 #, c-format msgid " dates/times are integers?\n" msgstr " les dates/heures sont-ils des integers?\n" -#: controldata.c:606 +#: controldata.c:620 #, c-format msgid " data checksum version\n" msgstr " version des sommes de contrôle des données\n" -#: controldata.c:608 +#: controldata.c:622 #, c-format msgid "Cannot continue without required control information, terminating\n" msgstr "Ne peut pas continuer sans les informations de contrôle requises, en arrêt\n" -#: controldata.c:623 +#: controldata.c:637 #, c-format msgid "" "old and new pg_controldata alignments are invalid or do not match\n" @@ -568,77 +604,77 @@ msgstr "" "les alignements sont invalides ou ne correspondent pas entre l'ancien et le nouveau pg_controldata.\n" "Il est probable qu'une installation soit en 32 bits et l'autre en 64 bits.\n" -#: controldata.c:627 +#: controldata.c:641 #, c-format msgid "old and new pg_controldata block sizes are invalid or do not match\n" msgstr "les tailles de bloc sont invalides ou ne correspondent pas entre l'ancien et le nouveau pg_controldata.\n" -#: controldata.c:630 +#: controldata.c:644 #, c-format msgid "old and new pg_controldata maximum relation segment sizes are invalid or do not match\n" msgstr "les tailles maximales de segment de relation sont invalides ou ne correspondent pas entre l'ancien et le nouveau pg_controldata.\n" -#: controldata.c:633 +#: controldata.c:647 #, c-format msgid "old and new pg_controldata WAL block sizes are invalid or do not match\n" msgstr "les tailles de bloc des WAL sont invalides ou ne correspondent pas entre l'ancien et le nouveau pg_controldata.\n" -#: controldata.c:636 +#: controldata.c:650 #, c-format msgid "old and new pg_controldata WAL segment sizes are invalid or do not match\n" msgstr "les tailles de segment de WAL sont invalides ou ne correspondent pas entre l'ancien et le nouveau pg_controldata.\n" -#: controldata.c:639 +#: controldata.c:653 #, c-format msgid "old and new pg_controldata maximum identifier lengths are invalid or do not match\n" msgstr "les longueurs maximales des identifiants sont invalides ou ne correspondent pas entre l'ancien et le nouveau pg_controldata.\n" -#: controldata.c:642 +#: controldata.c:656 #, c-format msgid "old and new pg_controldata maximum indexed columns are invalid or do not match\n" msgstr "les nombres maximums de colonnes indexées sont invalides ou ne correspondent pas entre l'ancien et le nouveau pg_controldata.\n" -#: controldata.c:645 +#: controldata.c:659 #, c-format msgid "old and new pg_controldata maximum TOAST chunk sizes are invalid or do not match\n" msgstr "les tailles maximales de morceaux des TOAST sont invalides ou ne correspondent pas entre l'ancien et le nouveau pg_controldata.\n" -#: controldata.c:650 +#: controldata.c:664 #, c-format msgid "old and new pg_controldata large-object chunk sizes are invalid or do not match\n" msgstr "les tailles des morceaux de Large Objects sont invalides ou ne correspondent pas entre l'ancien et le nouveau pg_controldata.\n" -#: controldata.c:653 +#: controldata.c:667 #, c-format msgid "old and new pg_controldata date/time storage types do not match\n" msgstr "les types de stockage date/heure ne correspondent pas entre l'ancien et le nouveau pg_controldata.\n" -#: controldata.c:666 +#: controldata.c:680 #, c-format msgid "old cluster does not use data checksums but the new one does\n" msgstr "l'ancienne instance n'utilise pas les sommes de contrôle alors que la nouvelle les utilise\n" -#: controldata.c:669 +#: controldata.c:683 #, c-format msgid "old cluster uses data checksums but the new one does not\n" msgstr "l'ancienne instance utilise les sommes de contrôle alors que la nouvelle ne les utilise pas\n" -#: controldata.c:671 +#: controldata.c:685 #, c-format msgid "old and new cluster pg_controldata checksum versions do not match\n" msgstr "les versions des sommes de contrôle ne correspondent pas entre l'ancien et le nouveau pg_controldata.\n" -#: controldata.c:682 +#: controldata.c:696 #, c-format msgid "Adding \".old\" suffix to old global/pg_control" msgstr "Ajout du suffixe « .old » à l'ancien global/pg_control" -#: controldata.c:687 +#: controldata.c:701 #, c-format msgid "Unable to rename %s to %s.\n" msgstr "Incapable de renommer %s à %s.\n" -#: controldata.c:690 +#: controldata.c:704 #, c-format msgid "" "\n" @@ -664,32 +700,32 @@ msgstr "Création de la sauvegarde des objets globaux" msgid "Creating dump of database schemas\n" msgstr "Création de la sauvegarde des schémas des bases\n" -#: exec.c:44 +#: exec.c:45 #, c-format msgid "could not get pg_ctl version data using %s: %s\n" msgstr "n'a pas pu obtenir la version de pg_ctl en utilisant %s : %s\n" -#: exec.c:50 +#: exec.c:51 #, c-format msgid "could not get pg_ctl version output from %s\n" msgstr "n'a pas pu obtenir la version de pg_ctl à partir de %s\n" -#: exec.c:104 exec.c:108 +#: exec.c:105 exec.c:109 #, c-format msgid "command too long\n" msgstr "commande trop longue\n" -#: exec.c:110 util.c:37 util.c:225 +#: exec.c:111 util.c:37 util.c:225 #, c-format msgid "%s\n" msgstr "%s\n" -#: exec.c:149 option.c:217 +#: exec.c:150 option.c:222 #, c-format msgid "could not open log file \"%s\": %m\n" msgstr "n'a pas pu ouvrir le fichier de traces « %s » : %m\n" -#: exec.c:178 +#: exec.c:179 #, c-format msgid "" "\n" @@ -698,65 +734,72 @@ msgstr "" "\n" "*échec*" -#: exec.c:181 +#: exec.c:182 #, c-format msgid "There were problems executing \"%s\"\n" msgstr "Il y a eu des problèmes lors de l'exécution de « %s »\n" -#: exec.c:184 +#: exec.c:185 #, c-format msgid "" "Consult the last few lines of \"%s\" or \"%s\" for\n" "the probable cause of the failure.\n" msgstr "Consultez les dernières lignes de « %s » ou « %s » pour trouver la cause probable de l'échec.\n" -#: exec.c:189 +#: exec.c:190 #, c-format msgid "" "Consult the last few lines of \"%s\" for\n" "the probable cause of the failure.\n" msgstr "Consultez les dernières lignes de « %s » pour trouver la cause probable de l'échec.\n" -#: exec.c:204 option.c:226 +#: exec.c:205 option.c:231 #, c-format msgid "could not write to log file \"%s\": %m\n" msgstr "n'a pas pu écrire dans le fichier de traces « %s »\n" -#: exec.c:230 +#: exec.c:231 #, c-format msgid "could not open file \"%s\" for reading: %s\n" msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %s\n" -#: exec.c:257 +#: exec.c:258 #, c-format msgid "You must have read and write access in the current directory.\n" msgstr "Vous devez avoir les droits de lecture et d'écriture dans le répertoire actuel.\n" -#: exec.c:310 exec.c:372 exec.c:436 +#: exec.c:311 exec.c:377 #, c-format msgid "check for \"%s\" failed: %s\n" msgstr "échec de la vérification de « %s » : %s\n" -#: exec.c:313 exec.c:375 +#: exec.c:314 exec.c:380 #, c-format msgid "\"%s\" is not a directory\n" msgstr "« %s » n'est pas un répertoire\n" -#: exec.c:439 +#: exec.c:430 #, c-format msgid "check for \"%s\" failed: not a regular file\n" msgstr "échec de la vérification de « %s » : pas un fichier régulier\n" -#: exec.c:451 -#, c-format -msgid "check for \"%s\" failed: cannot read file (permission denied)\n" -msgstr "échec de la vérification de « %s » : ne peut pas lire le fichier (droit refusé)\n" - -#: exec.c:459 +#: exec.c:433 #, c-format msgid "check for \"%s\" failed: cannot execute (permission denied)\n" msgstr "échec de la vérification de « %s » : ne peut pas exécuter (droit refusé)\n" +#: exec.c:439 +#, c-format +msgid "check for \"%s\" failed: cannot execute\n" +msgstr "échec de la vérification de « %s » : ne peut pas exécuter\n" + +#: exec.c:449 +#, c-format +msgid "check for \"%s\" failed: incorrect version: found \"%s\", expected \"%s\"\n" +msgstr "" +"échec de la vérification de « %s » : version incorrect : « %s » trouvée, « %s » attendue\n" +"\n" + #: file.c:43 file.c:61 #, c-format msgid "error while cloning relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" @@ -1007,79 +1050,79 @@ msgstr "Base de données : %s\n" msgid "relname: %s.%s: reloid: %u reltblspace: %s\n" msgstr "relname : %s.%s : reloid : %u reltblspace : %s\n" -#: option.c:102 +#: option.c:103 #, c-format msgid "%s: cannot be run as root\n" msgstr "%s : ne peut pas être exécuté en tant que root\n" -#: option.c:170 +#: option.c:171 #, c-format msgid "invalid old port number\n" msgstr "ancien numéro de port invalide\n" -#: option.c:175 +#: option.c:176 #, c-format msgid "invalid new port number\n" msgstr "nouveau numéro de port invalide\n" -#: option.c:207 +#: option.c:212 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayez « %s --help » pour plus d'informations.\n" -#: option.c:214 +#: option.c:219 #, c-format msgid "too many command-line arguments (first is \"%s\")\n" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)\n" -#: option.c:220 +#: option.c:225 #, c-format msgid "Running in verbose mode\n" msgstr "Exécution en mode verbeux\n" -#: option.c:251 +#: option.c:256 msgid "old cluster binaries reside" msgstr "les binaires de l'ancienne instance résident" -#: option.c:253 +#: option.c:258 msgid "new cluster binaries reside" msgstr "les binaires de la nouvelle instance résident" -#: option.c:255 +#: option.c:260 msgid "old cluster data resides" msgstr "les données de l'ancienne instance résident" -#: option.c:257 +#: option.c:262 msgid "new cluster data resides" msgstr "les données de la nouvelle instance résident" -#: option.c:259 +#: option.c:264 msgid "sockets will be created" msgstr "les sockets seront créés" -#: option.c:276 option.c:374 +#: option.c:281 option.c:381 #, c-format msgid "could not determine current directory\n" msgstr "n'a pas pu déterminer le répertoire courant\n" -#: option.c:279 +#: option.c:284 #, c-format msgid "cannot run pg_upgrade from inside the new cluster data directory on Windows\n" msgstr "ne peut pas exécuter pg_upgrade depuis le répertoire de données de la nouvelle instance sur Windows\n" -#: option.c:288 +#: option.c:293 #, c-format msgid "" "pg_upgrade upgrades a PostgreSQL cluster to a different major version.\n" "\n" msgstr "pg_upgrade met à jour une instance PostgreSQL vers une version majeure différente.\n" -#: option.c:289 +#: option.c:294 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: option.c:290 +#: option.c:295 #, c-format msgid "" " pg_upgrade [OPTION]...\n" @@ -1088,17 +1131,17 @@ msgstr "" " pg_upgrade [OPTION]...\n" "\n" -#: option.c:291 +#: option.c:296 #, c-format msgid "Options:\n" msgstr "Options :\n" -#: option.c:292 +#: option.c:297 #, c-format msgid " -b, --old-bindir=BINDIR old cluster executable directory\n" msgstr " -b, --old-bindir=DIRBIN répertoire des exécutables de l'ancienne instance\n" -#: option.c:293 +#: option.c:298 #, c-format msgid "" " -B, --new-bindir=BINDIR new cluster executable directory (default\n" @@ -1108,87 +1151,96 @@ msgstr "" " le même répertoire que pg_upgrade)\n" "\n" -#: option.c:295 +#: option.c:300 #, c-format msgid " -c, --check check clusters only, don't change any data\n" msgstr " -c, --check vérifie seulement les instances, pas de modifications\n" -#: option.c:296 +#: option.c:301 #, c-format msgid " -d, --old-datadir=DATADIR old cluster data directory\n" msgstr " -d, --old-datadir=DIRDONNEES répertoire des données de l'ancienne instance\n" -#: option.c:297 +#: option.c:302 #, c-format msgid " -D, --new-datadir=DATADIR new cluster data directory\n" msgstr " -D, --new-datadir=DIRDONNEES répertoire des données de la nouvelle instance\n" -#: option.c:298 +#: option.c:303 #, c-format msgid " -j, --jobs=NUM number of simultaneous processes or threads to use\n" msgstr " -j, --jobs=NUM nombre de processus ou threads simultanés à utiliser\n" -#: option.c:299 +#: option.c:304 #, c-format msgid " -k, --link link instead of copying files to new cluster\n" msgstr " -k, --link lie les fichiers au lieu de les copier vers la nouvelle instance\n" -#: option.c:300 +#: option.c:305 #, c-format msgid " -o, --old-options=OPTIONS old cluster options to pass to the server\n" msgstr " -o, --old-options=OPTIONS options à passer au serveur de l'ancienne instance\n" -#: option.c:301 +#: option.c:306 #, c-format msgid " -O, --new-options=OPTIONS new cluster options to pass to the server\n" msgstr " -O, --new-options=OPTIONS options à passer au serveur de la nouvelle instance\n" -#: option.c:302 +#: option.c:307 #, c-format msgid " -p, --old-port=PORT old cluster port number (default %d)\n" msgstr " -p, --old-port=PORT numéro de port de l'ancienne instance (par défaut %d)\n" -#: option.c:303 +#: option.c:308 #, c-format msgid " -P, --new-port=PORT new cluster port number (default %d)\n" msgstr " -P, --new-port=PORT numéro de port de la nouvelle instance (par défaut %d)\n" -#: option.c:304 +#: option.c:309 #, c-format msgid " -r, --retain retain SQL and log files after success\n" msgstr " -r, --retain conserve les fichiers SQL et de traces en cas de succès\n" -#: option.c:305 +#: option.c:310 #, c-format msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" msgstr " -s, --socketdir=DIR répertoire de la socket à utiliser (par défaut le répertoire courant)\n" -#: option.c:306 +#: option.c:311 #, c-format msgid " -U, --username=NAME cluster superuser (default \"%s\")\n" msgstr " -U, --username=NOM superutilisateur de l'instance (par défaut « %s »)\n" -#: option.c:307 +#: option.c:312 #, c-format msgid " -v, --verbose enable verbose internal logging\n" msgstr " -v, --verbose active des traces internes verbeuses\n" -#: option.c:308 +#: option.c:313 #, c-format msgid " -V, --version display version information, then exit\n" msgstr " -V, --version affiche la version, puis quitte\n" -#: option.c:309 +#: option.c:314 #, c-format msgid " --clone clone instead of copying files to new cluster\n" msgstr " --clone clone au lieu de copier les fichiers vers la nouvelle instance\n" -#: option.c:310 +#: option.c:315 +#, c-format +msgid "" +" --index-collation-versions-unknown\n" +" mark text indexes as needing to be rebuilt\n" +msgstr "" +" --index-collation-versions-unknown\n" +" marque les index de colonnes de type text comme nécessitant une reconstruction\n" + +#: option.c:317 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide, puis quitte\n" -#: option.c:311 +#: option.c:318 #, c-format msgid "" "\n" @@ -1204,7 +1256,7 @@ msgstr "" " arrêter le postmaster de la nouvelle instance\n" "\n" -#: option.c:316 +#: option.c:323 #, c-format msgid "" "\n" @@ -1221,7 +1273,7 @@ msgstr "" " le répertoire « bin » pour l'ancienne version (-b DIRBIN)\n" " le répertoire « bin » pour la nouvelle version (-B DIRBIN)\n" -#: option.c:322 +#: option.c:329 #, c-format msgid "" "\n" @@ -1234,7 +1286,7 @@ msgstr "" " pg_upgrade -d oldCluster/data -D newCluster/data -b oldCluster/bin -B newCluster/bin\n" "ou\n" -#: option.c:327 +#: option.c:334 #, c-format msgid "" " $ export PGDATAOLD=oldCluster/data\n" @@ -1249,7 +1301,7 @@ msgstr "" " $ export PGBINNEW=newCluster/bin\n" " $ pg_upgrade\n" -#: option.c:333 +#: option.c:340 #, c-format msgid "" " C:\\> set PGDATAOLD=oldCluster/data\n" @@ -1264,7 +1316,7 @@ msgstr "" " C:\\> set PGBINNEW=newCluster/bin\n" " C:\\> pg_upgrade\n" -#: option.c:339 +#: option.c:346 #, c-format msgid "" "\n" @@ -1273,12 +1325,12 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: option.c:340 +#: option.c:347 #, c-format msgid "%s home page: <%s>\n" msgstr "page d'accueil %s : <%s>\n" -#: option.c:380 +#: option.c:387 #, c-format msgid "" "You must identify the directory where the %s.\n" @@ -1287,27 +1339,27 @@ msgstr "" "Vous devez identifier le répertoire où le %s.\n" "Merci d'utiliser l'option en ligne de commande %s ou la variable d'environnement %s.\n" -#: option.c:432 +#: option.c:439 #, c-format msgid "Finding the real data directory for the source cluster" msgstr "Recherche du vrai répertoire des données pour l'instance source" -#: option.c:434 +#: option.c:441 #, c-format msgid "Finding the real data directory for the target cluster" msgstr "Recherche du vrai répertoire des données pour l'instance cible" -#: option.c:446 +#: option.c:453 #, c-format msgid "could not get data directory using %s: %s\n" msgstr "n'a pas pu obtenir le répertoire des données en utilisant %s : %s\n" -#: option.c:505 +#: option.c:512 #, c-format msgid "could not read line %d from file \"%s\": %s\n" msgstr "n'a pas pu lire la ligne %d du fichier « %s » : %s\n" -#: option.c:522 +#: option.c:529 #, c-format msgid "user-supplied old port number %hu corrected to %hu\n" msgstr "ancien numéro de port %hu fourni par l'utilisateur corrigé en %hu\n" @@ -1324,8 +1376,8 @@ msgstr "n'a pas pu créer le fil de travail: %s\n" #: parallel.c:300 #, c-format -msgid "waitpid() failed: %s\n" -msgstr "échec de waitpid() : %s\n" +msgid "%s() failed: %s\n" +msgstr "échec de %s() : %s\n" #: parallel.c:304 #, c-format @@ -1337,12 +1389,12 @@ msgstr "le processus fils a quitté anormalement : statut %d\n" msgid "child worker exited abnormally: %s\n" msgstr "le processus fils a quitté anormalement : %s\n" -#: pg_upgrade.c:108 +#: pg_upgrade.c:107 #, c-format msgid "could not read permissions of directory \"%s\": %s\n" msgstr "n'a pas pu lire les droits du répertoire « %s » : %s\n" -#: pg_upgrade.c:123 +#: pg_upgrade.c:122 #, c-format msgid "" "\n" @@ -1353,17 +1405,17 @@ msgstr "" "Réalisation de la mise à jour\n" "-----------------------------\n" -#: pg_upgrade.c:166 +#: pg_upgrade.c:165 #, c-format msgid "Setting next OID for new cluster" msgstr "Configuration du prochain OID sur la nouvelle instance" -#: pg_upgrade.c:173 +#: pg_upgrade.c:172 #, c-format msgid "Sync data directory to disk" msgstr "Synchronisation du répertoire des données sur disque" -#: pg_upgrade.c:185 +#: pg_upgrade.c:183 #, c-format msgid "" "\n" @@ -1374,12 +1426,12 @@ msgstr "" "Mise à jour terminée\n" "--------------------\n" -#: pg_upgrade.c:220 +#: pg_upgrade.c:216 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s : n'a pas pu trouver son propre exécutable\n" -#: pg_upgrade.c:246 +#: pg_upgrade.c:242 #, c-format msgid "" "There seems to be a postmaster servicing the old cluster.\n" @@ -1388,7 +1440,7 @@ msgstr "" "Il semble qu'un postmaster est démarré sur l'ancienne instance.\n" "Merci d'arrêter ce postmaster et d'essayer de nouveau.\n" -#: pg_upgrade.c:259 +#: pg_upgrade.c:255 #, c-format msgid "" "There seems to be a postmaster servicing the new cluster.\n" @@ -1397,67 +1449,67 @@ msgstr "" "Il semble qu'un postmaster est démarré sur la nouvelle instance.\n" "Merci d'arrêter ce postmaster et d'essayer de nouveau.\n" -#: pg_upgrade.c:273 +#: pg_upgrade.c:269 #, c-format msgid "Analyzing all rows in the new cluster" msgstr "Analyse de toutes les lignes dans la nouvelle instance" -#: pg_upgrade.c:286 +#: pg_upgrade.c:282 #, c-format msgid "Freezing all rows in the new cluster" msgstr "Gel de toutes les lignes dans la nouvelle instance" -#: pg_upgrade.c:306 +#: pg_upgrade.c:302 #, c-format msgid "Restoring global objects in the new cluster" msgstr "Restauration des objets globaux dans la nouvelle instance" -#: pg_upgrade.c:321 +#: pg_upgrade.c:317 #, c-format msgid "Restoring database schemas in the new cluster\n" msgstr "Restauration des schémas des bases de données dans la nouvelle instance\n" -#: pg_upgrade.c:425 +#: pg_upgrade.c:421 #, c-format msgid "Deleting files from new %s" msgstr "Suppression des fichiers à partir du nouveau %s" -#: pg_upgrade.c:429 +#: pg_upgrade.c:425 #, c-format msgid "could not delete directory \"%s\"\n" msgstr "n'a pas pu supprimer le répertoire « %s »\n" -#: pg_upgrade.c:448 +#: pg_upgrade.c:444 #, c-format msgid "Copying old %s to new server" msgstr "Copie de l'ancien %s vers le nouveau serveur" -#: pg_upgrade.c:475 +#: pg_upgrade.c:471 #, c-format msgid "Setting next transaction ID and epoch for new cluster" msgstr "Configuration du prochain identifiant de transaction et de l'epoch pour la nouvelle instance" -#: pg_upgrade.c:505 +#: pg_upgrade.c:501 #, c-format msgid "Setting next multixact ID and offset for new cluster" msgstr "Configuration du prochain MultiXactId et décalage pour la nouvelle instance" -#: pg_upgrade.c:529 +#: pg_upgrade.c:525 #, c-format msgid "Setting oldest multixact ID in new cluster" msgstr "Configuration du plus ancien identifiant multixact sur la nouvelle instance" -#: pg_upgrade.c:549 +#: pg_upgrade.c:545 #, c-format msgid "Resetting WAL archives" msgstr "Réinitialisation des archives WAL" -#: pg_upgrade.c:592 +#: pg_upgrade.c:588 #, c-format msgid "Setting frozenxid and minmxid counters in new cluster" msgstr "Configuration des compteurs frozenxid et minmxid dans la nouvelle instance" -#: pg_upgrade.c:594 +#: pg_upgrade.c:590 #, c-format msgid "Setting minmxid counter in new cluster" msgstr "Configuration du compteur minmxid dans la nouvelle instance" @@ -1482,47 +1534,42 @@ msgstr "Création des liens pour les fichiers des relations utilisateurs\n" msgid "old database \"%s\" not found in the new cluster\n" msgstr "ancienne base de données « %s » introuvable dans la nouvelle instance\n" -#: relfilenode.c:234 +#: relfilenode.c:230 #, c-format msgid "error while checking for file existence \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "erreur lors de la vérification de l'existence du fichier « %s.%s » (« %s » vers « %s ») : %s\n" -#: relfilenode.c:252 +#: relfilenode.c:248 #, c-format msgid "rewriting \"%s\" to \"%s\"\n" msgstr "réécriture de « %s » en « %s »\n" -#: relfilenode.c:260 +#: relfilenode.c:256 #, c-format msgid "cloning \"%s\" to \"%s\"\n" msgstr "clonage de « %s » en « %s »\n" -#: relfilenode.c:265 +#: relfilenode.c:261 #, c-format msgid "copying \"%s\" to \"%s\"\n" msgstr "copie de « %s » en « %s »\n" -#: relfilenode.c:270 +#: relfilenode.c:266 #, c-format msgid "linking \"%s\" to \"%s\"\n" msgstr "lien de « %s » vers « %s »\n" -#: server.c:33 -#, c-format -msgid "connection to database failed: %s" -msgstr "échec de la connexion à la base de données : %s" - -#: server.c:39 server.c:141 util.c:135 util.c:165 +#: server.c:38 server.c:142 util.c:135 util.c:165 #, c-format msgid "Failure, exiting\n" msgstr "Échec, sortie\n" -#: server.c:131 +#: server.c:132 #, c-format msgid "executing: %s\n" msgstr "exécution : %s\n" -#: server.c:137 +#: server.c:138 #, c-format msgid "" "SQL command failed\n" @@ -1533,26 +1580,26 @@ msgstr "" "%s\n" "%s" -#: server.c:167 +#: server.c:168 #, c-format msgid "could not open version file \"%s\": %m\n" msgstr "n'a pas pu ouvrir le fichier de version « %s » : %m\n" -#: server.c:171 +#: server.c:172 #, c-format msgid "could not parse version file \"%s\"\n" msgstr "n'a pas pu analyser le fichier de version « %s »\n" -#: server.c:294 +#: server.c:298 #, c-format msgid "" "\n" -"connection to database failed: %s" +"%s" msgstr "" "\n" -"échec de la connexion à la base de données : %s" +"%s" -#: server.c:299 +#: server.c:302 #, c-format msgid "" "could not connect to source postmaster started with the command:\n" @@ -1561,7 +1608,7 @@ msgstr "" "n'a pas pu se connecter au postmaster source lancé avec la commande :\n" "%s\n" -#: server.c:303 +#: server.c:306 #, c-format msgid "" "could not connect to target postmaster started with the command:\n" @@ -1570,22 +1617,22 @@ msgstr "" "n'a pas pu se connecter au postmaster cible lancé avec la commande :\n" "%s\n" -#: server.c:317 +#: server.c:320 #, c-format msgid "pg_ctl failed to start the source server, or connection failed\n" msgstr "pg_ctl a échoué à démarrer le serveur source ou connexion échouée\n" -#: server.c:319 +#: server.c:322 #, c-format msgid "pg_ctl failed to start the target server, or connection failed\n" msgstr "pg_ctl a échoué à démarrer le serveur cible ou connexion échouée\n" -#: server.c:364 +#: server.c:367 #, c-format msgid "out of memory\n" msgstr "mémoire épuisée\n" -#: server.c:377 +#: server.c:380 #, c-format msgid "libpq environment variable %s has a non-local server value: %s\n" msgstr "la variable d'environnement libpq %s a une valeur serveur non locale : %s\n" @@ -1789,33 +1836,37 @@ msgstr "" " %s\n" "\n" -#~ msgid "cannot write to log file %s\n" -#~ msgstr "ne peut pas écrire dans le fichier de traces %s\n" - -#~ msgid "cannot find current directory\n" -#~ msgstr "ne peut pas trouver le répertoire courant\n" - -#~ msgid "Cannot open file %s: %m\n" -#~ msgstr "Ne peut pas ouvrir le fichier %s : %m\n" +#~ msgid "Creating script to analyze new cluster" +#~ msgstr "Création d'un script pour analyser la nouvelle instance" -#~ msgid "Cannot read line %d from %s: %m\n" -#~ msgstr "Ne peut pas lire la ligne %d à partir de %s : %m\n" +#~ msgid "check for \"%s\" failed: cannot read file (permission denied)\n" +#~ msgstr "échec de la vérification de « %s » : ne peut pas lire le fichier (droit refusé)\n" -#~ msgid "----------------\n" -#~ msgstr "----------------\n" +#~ msgid "connection to database failed: %s" +#~ msgstr "échec de la connexion à la base de données : %s" -#~ msgid "------------------\n" -#~ msgstr "------------------\n" +#~ msgid "" +#~ "\n" +#~ "connection to database failed: %s" +#~ msgstr "" +#~ "\n" +#~ "échec de la connexion à la base de données : %s" #~ msgid "" -#~ "could not load library \"%s\":\n" -#~ "%s\n" +#~ "\n" +#~ "Report bugs to .\n" #~ msgstr "" -#~ "n'a pas pu charger la biblothèque « %s »:\n" -#~ "%s\n" +#~ "\n" +#~ "Rapporter les bogues à .\n" -#~ msgid "%s is not a directory\n" -#~ msgstr "%s n'est pas un répertoire\n" +#~ msgid "could not parse PG_VERSION file from %s\n" +#~ msgstr "n'a pas pu analyser le fichier PG_VERSION à partir de %s\n" + +#~ msgid "------------------------------------------------\n" +#~ msgstr "------------------------------------------------\n" + +#~ msgid "-----------------------------\n" +#~ msgstr "-----------------------------\n" #~ msgid "" #~ "This utility can only upgrade to PostgreSQL version 9.0 after 2010-01-11\n" @@ -1824,18 +1875,45 @@ msgstr "" #~ "Cet outil peut seulement mettre à jour à partir de la version 9.0 de PostgreSQL (après le 11 janvier 2010)\n" #~ "à cause de changements dans l'API du moteur fait lors du développement.\n" -#~ msgid "-----------------------------\n" -#~ msgstr "-----------------------------\n" +#~ msgid "%s is not a directory\n" +#~ msgstr "%s n'est pas un répertoire\n" -#~ msgid "------------------------------------------------\n" -#~ msgstr "------------------------------------------------\n" +#~ msgid "" +#~ "could not load library \"%s\":\n" +#~ "%s\n" +#~ msgstr "" +#~ "n'a pas pu charger la biblothèque « %s »:\n" +#~ "%s\n" -#~ msgid "could not parse PG_VERSION file from %s\n" -#~ msgstr "n'a pas pu analyser le fichier PG_VERSION à partir de %s\n" +#~ msgid "------------------\n" +#~ msgstr "------------------\n" + +#~ msgid "----------------\n" +#~ msgstr "----------------\n" + +#~ msgid "Cannot read line %d from %s: %m\n" +#~ msgstr "Ne peut pas lire la ligne %d à partir de %s : %m\n" + +#~ msgid "Cannot open file %s: %m\n" +#~ msgstr "Ne peut pas ouvrir le fichier %s : %m\n" + +#~ msgid "cannot find current directory\n" +#~ msgstr "ne peut pas trouver le répertoire courant\n" + +#~ msgid "cannot write to log file %s\n" +#~ msgstr "ne peut pas écrire dans le fichier de traces %s\n" #~ msgid "" +#~ "Optimizer statistics and free space information are not transferred\n" +#~ "by pg_upgrade so, once you start the new server, consider running:\n" +#~ " %s\n" #~ "\n" -#~ "Report bugs to .\n" #~ msgstr "" +#~ "Les statistiques de l'optimiseur et les informations sur l'espace libre\n" +#~ "ne sont pas transférées par pg_upgrade, donc une fois le nouveau\n" +#~ "serveur démarré, pensez à exécuter :\n" +#~ " %s\n" #~ "\n" -#~ "Rapporter les bogues à .\n" + +#~ msgid "waitpid() failed: %s\n" +#~ msgstr "échec de waitpid() : %s\n" diff --git a/src/bin/pg_upgrade/po/ja.po b/src/bin/pg_upgrade/po/ja.po index d974ee723b462..17aae06271c79 100644 --- a/src/bin/pg_upgrade/po/ja.po +++ b/src/bin/pg_upgrade/po/ja.po @@ -4,20 +4,20 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_upgrade (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: pg_upgrade (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-11-05 01:44+0000\n" -"PO-Revision-Date: 2019-06-11 20:26+0900\n" +"POT-Creation-Date: 2020-08-21 15:55+0900\n" +"PO-Revision-Date: 2020-08-21 18:53+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" "Plural-Forms: nplural=1; plural=0;\n" -#: check.c:67 +#: check.c:66 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -26,7 +26,7 @@ msgstr "" "元の実行中サーバーの一貫性チェックを実行しています。\n" "--------------------------------------------------\n" -#: check.c:73 +#: check.c:72 #, c-format msgid "" "Performing Consistency Checks\n" @@ -35,7 +35,7 @@ msgstr "" "整合性チェックを実行しています。\n" "-----------------------------\n" -#: check.c:191 +#: check.c:190 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "* クラスタは互換性があります *\n" -#: check.c:197 +#: check.c:196 #, c-format msgid "" "\n" @@ -55,7 +55,7 @@ msgstr "" "この後pg_upgradeが失敗した場合は、続ける前に新しいクラスタを\n" "initdbで再作成する必要があります。\n" -#: check.c:233 +#: check.c:232 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade so,\n" @@ -68,7 +68,7 @@ msgstr "" "\n" "\n" -#: check.c:238 +#: check.c:237 #, c-format msgid "" "Optimizer statistics and free space information are not transferred\n" @@ -81,7 +81,7 @@ msgstr "" "\n" "\n" -#: check.c:245 +#: check.c:244 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -90,7 +90,7 @@ msgstr "" "このスクリプトを実行すると、旧クラスタのデータファイル %sが削除されます:\n" "\n" -#: check.c:250 +#: check.c:249 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -103,84 +103,84 @@ msgstr "" "ファイルを削除するためのスクリプトを作成できませんでした。 古い\n" "クラスタの内容は手動で削除する必要があります。\n" -#: check.c:260 +#: check.c:259 #, c-format msgid "Checking cluster versions" msgstr "クラスタのバージョンを確認しています" -#: check.c:272 +#: check.c:271 #, c-format msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" msgstr "このユーティリティでは PostgreSQL 8.4 以降のバージョンからのみアップグレードできます。\n" -#: check.c:276 +#: check.c:275 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "このユーティリティは、PostgreSQL バージョン %s にのみアップグレードできます。\n" -#: check.c:285 +#: check.c:284 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "このユーティリティは PostgreSQL の過去のメジャーバージョンにダウングレードする用途では使用できません。\n" -#: check.c:290 +#: check.c:289 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "旧クラスタのデータとバイナリのディレクトリは異なるメジャーバージョンのものです。\n" -#: check.c:293 +#: check.c:292 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "新クラスタのデータとバイナリのディレクトリは異なるメジャーバージョンのものです。\n" -#: check.c:310 +#: check.c:309 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "現在動作中の PG 9.1 以前の旧サーバをチェックする場合、旧サーバのポート番号を指定する必要があります。\n" -#: check.c:314 +#: check.c:313 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "稼働中のサーバをチェックする場合、新旧のポート番号が異なっている必要があります。\n" -#: check.c:329 +#: check.c:328 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "データベース\"%s\"のエンコーディングが一致しません: 旧 \"%s\"、新 \"%s\"\n" -#: check.c:334 +#: check.c:333 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "データベース\"%s\"の lc_collate 値が一致しません:旧 \"%s\"、新 \"%s\"\n" -#: check.c:337 +#: check.c:336 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "データベース\"%s\"の lc_ctype 値が一致しません:旧 \"%s\"、新 \"%s\"\n" -#: check.c:410 +#: check.c:409 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "新クラスタのデータベース\"%s\"が空ではありません: リレーション\"%s.%s\"が見つかりました\n" -#: check.c:459 +#: check.c:458 #, c-format msgid "Creating script to analyze new cluster" msgstr "新クラスタをANALYZEするためのスクリプトを作成しています" -#: check.c:473 check.c:601 check.c:865 check.c:944 check.c:1053 check.c:1144 -#: file.c:341 function.c:246 option.c:495 version.c:57 version.c:184 -#: version.c:309 version.c:391 version.c:539 +#: check.c:472 check.c:600 check.c:864 check.c:943 check.c:1053 check.c:1144 +#: file.c:336 function.c:240 option.c:497 version.c:54 version.c:199 +#: version.c:341 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "ファイル \"%s\" をオープンできませんでした: %s\n" -#: check.c:528 check.c:657 +#: check.c:527 check.c:656 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "ファイル\"%s\"に実行権限を追加できませんでした: %s\n" -#: check.c:564 +#: check.c:563 #, c-format msgid "" "\n" @@ -189,7 +189,7 @@ msgstr "" "\n" "警告: 新データディレクトリが旧データディレクトリの中にあってはなりません、例えば%s\n" -#: check.c:588 +#: check.c:587 #, c-format msgid "" "\n" @@ -198,116 +198,117 @@ msgstr "" "\n" "警告: ユーザー定義テーブル空間の場所がデータディレクトリ、例えば %s の中にあってはなりません。\n" -#: check.c:598 +#: check.c:597 #, c-format msgid "Creating script to delete old cluster" msgstr "旧クラスタを削除するスクリプトを作成しています" -#: check.c:677 +#: check.c:676 #, c-format msgid "Checking database user is the install user" msgstr "データベースユーザーがインストールユーザーかどうかをチェックしています" -#: check.c:693 +#: check.c:692 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "データベースユーザー\"%s\"がインストールユーザーではありません\n" -#: check.c:704 +#: check.c:703 #, c-format msgid "could not determine the number of users\n" msgstr "ユーザー数を特定できませんでした\n" -#: check.c:712 +#: check.c:711 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "新クラスタ内で定義できるのはインストールユーザーのみです。\n" -#: check.c:732 +#: check.c:731 #, c-format msgid "Checking database connection settings" msgstr "データベース接続の設定を確認しています" -#: check.c:754 +#: check.c:753 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 には接続を許可してはなりません。すなわち、pg_database.datallowconn は false である必要があります。\n" -#: check.c:764 +#: check.c:763 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "template0 以外のすべてのデータベースは接続を許可する必要があります。すなわち pg_database.datallowconn が true でなければなりません。\n" -#: check.c:789 +#: check.c:788 #, c-format msgid "Checking for prepared transactions" msgstr "準備済みトランザクションをチェックしています" -#: check.c:798 +#: check.c:797 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "移行元クラスタに準備済みトランザクションがあります\n" -#: check.c:800 +#: check.c:799 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "移行先クラスタに準備済みトランザクションがあります\n" -#: check.c:826 +#: check.c:825 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "bigint を渡す際にミスマッチが発生する contrib/isn をチェックしています" -#: check.c:887 check.c:966 check.c:1076 check.c:1167 function.c:268 -#: version.c:207 version.c:332 version.c:562 +#: check.c:886 check.c:965 check.c:1076 check.c:1167 function.c:262 +#: version.c:245 version.c:282 version.c:425 #, c-format msgid "fatal\n" msgstr "致命的\n" -#: check.c:888 +#: check.c:887 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" "bigint data type. Your old and new clusters pass bigint values\n" "differently so this cluster cannot currently be upgraded. You can\n" -"manually upgrade databases that use \"contrib/isn\" facilities and remove\n" -"\"contrib/isn\" from the old cluster and restart the upgrade. A list of\n" -"the problem functions is in the file:\n" +"manually dump databases in the old cluster that use \"contrib/isn\"\n" +"facilities, drop them, perform the upgrade, and then restore them. A\n" +"list of the problem functions is in the file:\n" " %s\n" "\n" msgstr "" "移行元インストールに、bigint データ型に依存する「contrib/isn」の関数が\n" "含まれています。新旧のクラスタ間でのbigint値の受け渡し方法が異なるため、\n" "現時点ではこのクラスタをアップグレードすることはできません。\n" -"「contrib/isn」の関数を使うデータベースを手動でアップグレードし、\n" -"旧クラスタから「contrib/isn」を削除した後、アップグレードを継続してください。 \n" +"旧クラスタ中の「contrib/isn」の関数等を使うデータベースを手動でダンプして、\n" +"それらを削除してからアップグレードを実行し、その後削除したデータベースを\n" +"リストアすることができます。 \n" "問題のある関数の一覧は以下のファイルにあります:\n" " %s\n" "\n" -#: check.c:912 +#: check.c:911 #, c-format msgid "Checking for tables WITH OIDS" msgstr "WITH OIDS宣言されたテーブルをチェックしています" -#: check.c:967 +#: check.c:966 #, c-format msgid "" -"Your installation contains tables declared WITH OIDS, which is not supported\n" -"anymore. Consider removing the oid column using\n" +"Your installation contains tables declared WITH OIDS, which is not\n" +"supported anymore. Consider removing the oid column using\n" " ALTER TABLE ... SET WITHOUT OIDS;\n" "A list of tables with the problem is in the file:\n" " %s\n" "\n" msgstr "" -"このインストールではWITH OIDS宣言されたテーブルが存在しますが、これは今後サポートされません。\n" -"以下のコマンドでoidカラムを削除することを検討してください:\n" +"このインストールではWITH OIDS宣言されたテーブルが存在しますが、これは今後\n" +"サポートされません。以下のコマンドでoidカラムを削除することを検討してください:\n" " ALTER TABLE ... SET WITHOUT OIDS;\n" "以下のファイルにこの問題を抱えるテーブルの一覧があります:\n" " %s\n" "\n" -#: check.c:997 +#: check.c:996 #, c-format msgid "Checking for reg* data types in user tables" msgstr "ユーザーテーブル内の reg * データ型をチェックしています" @@ -318,8 +319,8 @@ msgid "" "Your installation contains one of the reg* data types in user tables.\n" "These data types reference system OIDs that are not preserved by\n" "pg_upgrade, so this cluster cannot currently be upgraded. You can\n" -"remove the problem tables and restart the upgrade. A list of the problem\n" -"columns is in the file:\n" +"remove the problem tables and restart the upgrade. A list of the\n" +"problem columns is in the file:\n" " %s\n" "\n" msgstr "" @@ -340,9 +341,10 @@ msgstr "互換性のない\"jsonb\"データ型をチェックしています" #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" -"The internal format of \"jsonb\" changed during 9.4 beta so this cluster cannot currently\n" -"be upgraded. You can remove the problem tables and restart the upgrade. A list\n" -"of the problem columns is in the file:\n" +"The internal format of \"jsonb\" changed during 9.4 beta so this\n" +"cluster cannot currently be upgraded. You can remove the problem\n" +"tables and restart the upgrade. A list of the problem columns is\n" +"in the file:\n" " %s\n" "\n" msgstr "" @@ -354,32 +356,32 @@ msgstr "" " %s\n" "\n" -#: check.c:1189 +#: check.c:1190 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "'pg_' で始まるロールをチェックしています" -#: check.c:1199 +#: check.c:1200 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "移行元クラスタに 'pg_' で始まるロールが含まれています\n" -#: check.c:1201 +#: check.c:1202 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "移行先クラスタに \"pg_\" で始まるロールが含まれています\n" -#: check.c:1227 +#: check.c:1228 #, c-format msgid "failed to get the current locale\n" msgstr "現在のロケールを取得できませんでした。\n" -#: check.c:1236 +#: check.c:1237 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "\"%s\"のシステムロケール名を取得できませんでした。\n" -#: check.c:1242 +#: check.c:1243 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "古いロケール\"%s\"を復元できませんでした。\n" @@ -424,8 +426,8 @@ msgstr "移行元クラスタにクラスタ状態情報がありません:\n" msgid "The target cluster lacks cluster state information:\n" msgstr "移行先クラスタにクラスタ状態情報がありません:\n" -#: controldata.c:208 dump.c:51 pg_upgrade.c:336 pg_upgrade.c:373 -#: relfilenode.c:252 util.c:80 +#: controldata.c:208 dump.c:49 pg_upgrade.c:339 pg_upgrade.c:375 +#: relfilenode.c:247 util.c:79 #, c-format msgid "%s" msgstr "%s" @@ -647,12 +649,12 @@ msgstr "" "することができなくなります。\n" "\n" -#: dump.c:22 +#: dump.c:20 #, c-format msgid "Creating dump of global objects" msgstr "グローバルオブジェクトのダンプを作成しています" -#: dump.c:33 +#: dump.c:31 #, c-format msgid "Creating dump of database schemas\n" msgstr "データベーススキーマのダンプを作成しています。\n" @@ -672,16 +674,15 @@ msgstr "pg_ctl のバージョン出力を %s から取得できませんでし msgid "command too long\n" msgstr "コマンドが長すぎます\n" -#: exec.c:110 util.c:38 util.c:226 +#: exec.c:110 util.c:37 util.c:225 #, c-format msgid "%s\n" msgstr "%s\n" -#: exec.c:149 option.c:220 -#, fuzzy, c-format -#| msgid "could not open log file \"%s\": %m" +#: exec.c:149 option.c:217 +#, c-format msgid "could not open log file \"%s\": %m\n" -msgstr "ロックファイル\"%s\"をオープンできませんでした: %m" +msgstr "ログファイル\"%s\"をオープンできませんでした: %m\n" #: exec.c:178 #, c-format @@ -715,11 +716,10 @@ msgstr "" "失敗の原因については、\"%s\"の最後の数行を参照してください。\n" "\n" -#: exec.c:204 option.c:229 -#, fuzzy, c-format -#| msgid "could not write to log file \"%s\"\n" +#: exec.c:204 option.c:226 +#, c-format msgid "could not write to log file \"%s\": %m\n" -msgstr "ログ ファイル\"%s\"に書き込めませんでした。\n" +msgstr "ログファイル\"%s\"に書き込めませんでした。\n" #: exec.c:230 #, c-format @@ -731,7 +731,7 @@ msgstr "ファイル\"%s\"を読み取り用としてオープンできません msgid "You must have read and write access in the current directory.\n" msgstr "カレントディレクトリに対して読み書き可能なアクセス権が必要です。\n" -#: exec.c:310 exec.c:372 exec.c:427 +#: exec.c:310 exec.c:372 exec.c:436 #, c-format msgid "check for \"%s\" failed: %s\n" msgstr "\"%s\"のチェックに失敗しました: %s\n" @@ -741,92 +741,92 @@ msgstr "\"%s\"のチェックに失敗しました: %s\n" msgid "\"%s\" is not a directory\n" msgstr "\"%s\"はディレクトリではありません\n" -#: exec.c:430 +#: exec.c:439 #, c-format msgid "check for \"%s\" failed: not a regular file\n" msgstr "\"%s\"のチェックに失敗しました:通常ファイルではありません\n" -#: exec.c:442 +#: exec.c:451 #, c-format msgid "check for \"%s\" failed: cannot read file (permission denied)\n" msgstr "\"%s\"のチェックに失敗しました:ファイルが読めません(権限が拒否されました)\n" -#: exec.c:450 +#: exec.c:459 #, c-format msgid "check for \"%s\" failed: cannot execute (permission denied)\n" msgstr "\"%s\"のチェックに失敗しました:実行できません(権限が拒否されました)\n" -#: file.c:48 file.c:66 +#: file.c:43 file.c:61 #, c-format msgid "error while cloning relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "リレーション\"%s.%s\"の(\"%s\"から\"%s\"への)クローン中にエラー: %s\n" -#: file.c:55 +#: file.c:50 #, c-format msgid "error while cloning relation \"%s.%s\": could not open file \"%s\": %s\n" msgstr "リレーション\"%s.%s\"のクローン中にエラー: ファイル\"%s\"を開けませんでした: %s\n" -#: file.c:60 +#: file.c:55 #, c-format msgid "error while cloning relation \"%s.%s\": could not create file \"%s\": %s\n" msgstr "リレーション\"%s.%s\"のクローン中にエラー: ファイル\"%s\"を作成できませんでした: %s\n" -#: file.c:92 file.c:195 +#: file.c:87 file.c:190 #, c-format msgid "error while copying relation \"%s.%s\": could not open file \"%s\": %s\n" msgstr "リレーション\"%s.%s\"のコピー中にエラー: ファイル\"%s\"を開けませんでした: %s\n" -#: file.c:97 file.c:204 +#: file.c:92 file.c:199 #, c-format msgid "error while copying relation \"%s.%s\": could not create file \"%s\": %s\n" msgstr "リレーション\"%s.%s\"のコピー中にエラー: ファイル\"%s\"を作成できませんでした: %s\n" -#: file.c:111 file.c:228 +#: file.c:106 file.c:223 #, c-format msgid "error while copying relation \"%s.%s\": could not read file \"%s\": %s\n" msgstr "リレーション\"%s.%s\"のコピー中にエラー: ファイル\"%s\"を読めませんでした: %s\n" -#: file.c:123 file.c:306 +#: file.c:118 file.c:301 #, c-format msgid "error while copying relation \"%s.%s\": could not write file \"%s\": %s\n" msgstr "リレーション\"%s.%s\"のコピー中にエラー: ファイル\"%s\"に書けませんでした: %s\n" -#: file.c:137 +#: file.c:132 #, c-format msgid "error while copying relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "リレーション\"%s.%s\"のコピー(\"%s\" -> \"%s\")中にエラー:%s\n" -#: file.c:156 +#: file.c:151 #, c-format msgid "error while creating link for relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "リレーション\"%s.%s\"へのリンク(\"%s\" -> \"%s\")作成中にエラー:%s\n" -#: file.c:199 +#: file.c:194 #, c-format msgid "error while copying relation \"%s.%s\": could not stat file \"%s\": %s\n" msgstr "リレーション\"%s.%s\"のコピー中にエラー: ファイル\"%s\"を stat できませんでした: %s\n" -#: file.c:231 +#: file.c:226 #, c-format msgid "error while copying relation \"%s.%s\": partial page found in file \"%s\"\n" msgstr "リレーション\"%s.%s\"のコピー中にエラー: ファイル\"%s\"中に不完全なページがありました\n" -#: file.c:333 file.c:350 +#: file.c:328 file.c:345 #, c-format msgid "could not clone file between old and new data directories: %s\n" msgstr "新旧ディレクトリ間のファイルのクローンができませんでした: %s\n" -#: file.c:346 +#: file.c:341 #, c-format msgid "could not create file \"%s\": %s\n" msgstr "ファイル\"%s\"を作成できませんでした: %s\n" -#: file.c:357 +#: file.c:352 #, c-format msgid "file cloning not supported on this platform\n" msgstr "このプラットフォームではファイルのクローニングはサポートされません\n" -#: file.c:374 +#: file.c:369 #, c-format msgid "" "could not create hard link between old and new data directories: %s\n" @@ -835,7 +835,7 @@ msgstr "" "新旧のデータディレクトリ間でハードリンクを作成できませんでした: %s\n" "リンクモードでは、新旧のデータディレクトリが同じファイルシステム上に存在しなければなりません。\n" -#: function.c:116 +#: function.c:114 #, c-format msgid "" "\n" @@ -874,32 +874,32 @@ msgstr "" " DROP FUNCTION public.plpython_call_handler()\n" "\n" -#: function.c:134 +#: function.c:132 #, c-format msgid " %s\n" msgstr " %s\n" -#: function.c:144 +#: function.c:142 #, c-format msgid "Remove the problem functions from the old cluster to continue.\n" msgstr "継続するには、旧クラスタから問題となっている関数を削除してください。\n" -#: function.c:191 +#: function.c:189 #, c-format msgid "Checking for presence of required libraries" msgstr "必要なライブラリの有無を確認しています" -#: function.c:248 +#: function.c:242 #, c-format msgid "could not load library \"%s\": %s" msgstr "ライブラリ\"%s\"をロードできませんでした: %s" -#: function.c:259 info.c:633 +#: function.c:253 #, c-format -msgid "Database: %s\n" +msgid "In database: %s\n" msgstr "データベース: %s\n" -#: function.c:269 +#: function.c:263 #, c-format msgid "" "Your installation references loadable libraries that are missing from the\n" @@ -916,57 +916,57 @@ msgstr "" " %s\n" "\n" -#: info.c:133 +#: info.c:131 #, c-format msgid "Relation names for OID %u in database \"%s\" do not match: old name \"%s.%s\", new name \"%s.%s\"\n" msgstr "データベース\"%2$s\"で OID %1$u のリレーション名が一致しません: 元の名前 \"%3$s.%4$s\"、新しい名前 \"%5$s.%6$s\"\n" -#: info.c:153 +#: info.c:151 #, c-format msgid "Failed to match up old and new tables in database \"%s\"\n" msgstr "データベース\"%s\"で新旧のテーブルの照合に失敗しました。\n" -#: info.c:242 +#: info.c:240 #, c-format msgid " which is an index on \"%s.%s\"" msgstr " これは \"%s.%s\" 上のインデックスです" -#: info.c:252 +#: info.c:250 #, c-format msgid " which is an index on OID %u" msgstr " これは OID %u 上のインデックスです" -#: info.c:264 +#: info.c:262 #, c-format msgid " which is the TOAST table for \"%s.%s\"" msgstr " これは \"%s.%s\" の TOAST テーブルです" -#: info.c:272 +#: info.c:270 #, c-format msgid " which is the TOAST table for OID %u" msgstr " これは OID %u の TOAST テーブルです" -#: info.c:276 +#: info.c:274 #, c-format msgid "No match found in old cluster for new relation with OID %u in database \"%s\": %s\n" msgstr "データベース\"%2$s\"でOID%1$uを持つ新リレーションに対応するものが旧クラスタ内にありません: %3$s\n" -#: info.c:279 +#: info.c:277 #, c-format msgid "No match found in new cluster for old relation with OID %u in database \"%s\": %s\n" msgstr "データベース\"%2$s\"でOID %1$uを持つ旧リレーションに対応するものが新クラスタ内にありません: %3$s\n" -#: info.c:291 +#: info.c:289 #, c-format msgid "mappings for database \"%s\":\n" msgstr "データベース\"%s\"のマッピング:\n" -#: info.c:294 +#: info.c:292 #, c-format msgid "%s.%s: %u to %u\n" msgstr "%s.%s: %u -> %u\n" -#: info.c:299 info.c:635 +#: info.c:297 info.c:633 #, c-format msgid "" "\n" @@ -975,7 +975,7 @@ msgstr "" "\n" "\n" -#: info.c:324 +#: info.c:322 #, c-format msgid "" "\n" @@ -984,7 +984,7 @@ msgstr "" "\n" "移行元データベース:\n" -#: info.c:326 +#: info.c:324 #, c-format msgid "" "\n" @@ -993,7 +993,12 @@ msgstr "" "\n" "移行先データベース:\n" -#: info.c:646 +#: info.c:631 +#, c-format +msgid "Database: %s\n" +msgstr "データベース: %s\n" + +#: info.c:644 #, c-format msgid "relname: %s.%s: reloid: %u reltblspace: %s\n" msgstr "relname: %s.%s: reloid: %u reltblspace: %s\n" @@ -1003,57 +1008,62 @@ msgstr "relname: %s.%s: reloid: %u reltblspace: %s\n" msgid "%s: cannot be run as root\n" msgstr "%s: root では実行できません\n" -#: option.c:171 +#: option.c:170 #, c-format msgid "invalid old port number\n" msgstr "旧ポート番号が無効です\n" -#: option.c:179 +#: option.c:175 #, c-format msgid "invalid new port number\n" msgstr "新ポート番号が無効です\n" -#: option.c:213 +#: option.c:207 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細は\"%s --help\"を参照してください。\n" -#: option.c:223 +#: option.c:214 +#, c-format +msgid "too many command-line arguments (first is \"%s\")\n" +msgstr "コマンドライン引数が多すぎます。(先頭は\"%s\")\n" + +#: option.c:220 #, c-format msgid "Running in verbose mode\n" msgstr "冗長モードで実行しています\n" -#: option.c:254 +#: option.c:251 msgid "old cluster binaries reside" msgstr "旧クラスタのバイナリが置かれている" -#: option.c:256 +#: option.c:253 msgid "new cluster binaries reside" msgstr "新クラスタのバイナリが置かれている" -#: option.c:258 +#: option.c:255 msgid "old cluster data resides" msgstr "旧クラスタのデータが置かれている" -#: option.c:260 +#: option.c:257 msgid "new cluster data resides" msgstr "新クラスタのデータが置かれている" -#: option.c:262 +#: option.c:259 msgid "sockets will be created" msgstr "ソケットが作成される" -#: option.c:279 option.c:373 +#: option.c:276 option.c:374 #, c-format msgid "could not determine current directory\n" msgstr "カレントディレクトリを特定できませんでした。\n" -#: option.c:282 +#: option.c:279 #, c-format msgid "cannot run pg_upgrade from inside the new cluster data directory on Windows\n" msgstr "Windowsでは、新クラスタのデータディレクトリの中でpg_upgradeを実行することはできません\n" -#: option.c:291 +#: option.c:288 #, c-format msgid "" "pg_upgrade upgrades a PostgreSQL cluster to a different major version.\n" @@ -1062,12 +1072,12 @@ msgstr "" "pg_upgradeは、PostgreSQLのクラスタを別のメジャーバージョンにアップグレードします。\n" "\n" -#: option.c:292 +#: option.c:289 #, c-format msgid "Usage:\n" msgstr "使い方:\n" -#: option.c:293 +#: option.c:290 #, c-format msgid "" " pg_upgrade [OPTION]...\n" @@ -1076,107 +1086,112 @@ msgstr "" " pg_upgrade [オプション]...\n" "\n" -#: option.c:294 +#: option.c:291 #, c-format msgid "Options:\n" msgstr "オプション:\n" -#: option.c:295 +#: option.c:292 #, c-format msgid " -b, --old-bindir=BINDIR old cluster executable directory\n" msgstr " -b, --old-bindir=BINDIR 旧クラスタの実行ファイルディレクトリ\n" -#: option.c:296 +#: option.c:293 #, c-format -msgid " -B, --new-bindir=BINDIR new cluster executable directory\n" -msgstr " -B, --new-bindir=BINDIR 新クラスタの実行ファイルディレクトリ\n" +msgid "" +" -B, --new-bindir=BINDIR new cluster executable directory (default\n" +" same directory as pg_upgrade)\n" +msgstr "" +" -B, --new-bindir=BINDIR 新クラスタの実行ファイルディレクトリ(デフォルト\n" +" はpg_upgradeと同じディレクトリ)\n" -#: option.c:297 +#: option.c:295 #, c-format msgid " -c, --check check clusters only, don't change any data\n" msgstr " -c, --check クラスタのチェックのみ、データを一切変更しない\n" -#: option.c:298 +#: option.c:296 #, c-format msgid " -d, --old-datadir=DATADIR old cluster data directory\n" msgstr " -d, --old-datadir=DATADIR 旧クラスタのデータディレクトリ\n" -#: option.c:299 +#: option.c:297 #, c-format msgid " -D, --new-datadir=DATADIR new cluster data directory\n" msgstr " -D, --new-datadir=DATADIR 新クラスタのデータディレクトリ\n" -#: option.c:300 +#: option.c:298 #, c-format -msgid " -j, --jobs number of simultaneous processes or threads to use\n" -msgstr " -j, --jobs 同時並行プロセス数または使用スレッド数\n" +msgid " -j, --jobs=NUM number of simultaneous processes or threads to use\n" +msgstr " -j, --jobs 使用する同時実行プロセスまたはスレッドの数\n" -#: option.c:301 +#: option.c:299 #, c-format msgid " -k, --link link instead of copying files to new cluster\n" msgstr "" " -k, --link 新クラスタにファイルをコピーする代わりに\n" " リンクする\n" -#: option.c:302 +#: option.c:300 #, c-format msgid " -o, --old-options=OPTIONS old cluster options to pass to the server\n" msgstr " -o, --old-options=OPTIONS サーバに渡す旧クラスタのオプション\n" -#: option.c:303 +#: option.c:301 #, c-format msgid " -O, --new-options=OPTIONS new cluster options to pass to the server\n" msgstr " -O, --new-options=OPTIONS サーバに渡す新クラスタのオプション\n" -#: option.c:304 +#: option.c:302 #, c-format msgid " -p, --old-port=PORT old cluster port number (default %d)\n" msgstr " -p, --old-port=PORT 旧クラスタのポート番号(デフォルト %d)\n" -#: option.c:305 +#: option.c:303 #, c-format msgid " -P, --new-port=PORT new cluster port number (default %d)\n" msgstr " -P, --new-port=PORT 新クラスタのポート番号(デフォルト %d)\n" -#: option.c:306 +#: option.c:304 #, c-format msgid " -r, --retain retain SQL and log files after success\n" msgstr " -r, --retain SQLとログファイルを、成功後も消さずに残す\n" -#: option.c:307 -#, fuzzy, c-format -#| msgid " -s, --socketdir=DIR socket directory to use (default CWD)\n" +#: option.c:305 +#, c-format msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" -msgstr " -s, --socketdir=DIR 使用するソケットディレクトリ(デフォルト CWD)\n" +msgstr "" +" -s, --socketdir=DIR 使用するソケットディレクトリ(デフォルトは\n" +" カレントディレクトリ)\n" -#: option.c:308 +#: option.c:306 #, c-format msgid " -U, --username=NAME cluster superuser (default \"%s\")\n" msgstr " -U, --username=NAME クラスタのスーパユーザ(デフォルト\"%s\")\n" -#: option.c:309 +#: option.c:307 #, c-format msgid " -v, --verbose enable verbose internal logging\n" msgstr " -v, --verbose 詳細な内部ログを有効化\n" -#: option.c:310 +#: option.c:308 #, c-format msgid " -V, --version display version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: option.c:311 +#: option.c:309 #, c-format msgid " --clone clone instead of copying files to new cluster\n" msgstr "" " --clone 新クラスタにファイルをコピーする代わりに\n" " クローンする\n" -#: option.c:312 +#: option.c:310 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: option.c:313 +#: option.c:311 #, c-format msgid "" "\n" @@ -1191,7 +1206,7 @@ msgstr "" " 旧クラスタのpostmasterをシャットダウンする\n" " 新クラスタのpostmasterをシャットダウンする\n" -#: option.c:318 +#: option.c:316 #, c-format msgid "" "\n" @@ -1208,7 +1223,7 @@ msgstr "" " 旧バージョンの\"bin\"ディレクトリ (-b BINDIR)\n" " 新バージョンの\"bin\"ディレクトリ(-B BINDIR)\n" -#: option.c:324 +#: option.c:322 #, c-format msgid "" "\n" @@ -1221,7 +1236,7 @@ msgstr "" " pg_upgrade -d oldCluster/data -D newCluster/data -b oldCluster/bin -B newCluster/bin\n" "または\n" -#: option.c:329 +#: option.c:327 #, c-format msgid "" " $ export PGDATAOLD=oldCluster/data\n" @@ -1236,7 +1251,7 @@ msgstr "" " $ export PGBINNEW=newCluster/bin\n" " $ pg_upgrade\n" -#: option.c:335 +#: option.c:333 #, c-format msgid "" " C:\\> set PGDATAOLD=oldCluster/data\n" @@ -1251,16 +1266,21 @@ msgstr "" " C:\\> set PGBINNEW=newCluster/bin\n" " C:\\> pg_upgrade\n" -#: option.c:341 +#: option.c:339 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"不具合は まで報告してください。\n" +"バグは<%s>に報告してください。\n" + +#: option.c:340 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" -#: option.c:377 +#: option.c:380 #, c-format msgid "" "You must identify the directory where the %s.\n" @@ -1269,62 +1289,62 @@ msgstr "" "%sディレクトリを指定する必要があります。\n" "コマンドラインオプション %s または環境変数 %s を使用してください。\n" -#: option.c:429 +#: option.c:432 #, c-format msgid "Finding the real data directory for the source cluster" msgstr "移行元クラスタの実際のデータディレクトリを探しています" -#: option.c:431 +#: option.c:434 #, c-format msgid "Finding the real data directory for the target cluster" msgstr "移行先クラスタの実際のデータディレクトリを探しています" -#: option.c:443 +#: option.c:446 #, c-format msgid "could not get data directory using %s: %s\n" msgstr "%s を使ってデータディレクトリを取得できませんでした。: %s\n" -#: option.c:503 +#: option.c:505 #, c-format msgid "could not read line %d from file \"%s\": %s\n" msgstr "ファイル\"%2$s\"の%1$d行目を読み取れませんでした: %3$s\n" -#: option.c:521 +#: option.c:522 #, c-format msgid "user-supplied old port number %hu corrected to %hu\n" msgstr "ユーザー指定の旧ポート番号 %hu は %hu に訂正されました\n" -#: parallel.c:128 parallel.c:241 +#: parallel.c:127 parallel.c:238 #, c-format msgid "could not create worker process: %s\n" msgstr "ワーカープロセスを作成できませんでした: %s\n" -#: parallel.c:147 parallel.c:262 +#: parallel.c:146 parallel.c:259 #, c-format msgid "could not create worker thread: %s\n" msgstr "ワーカースレッドを作成できませんでした: %s\n" -#: parallel.c:305 +#: parallel.c:300 #, c-format msgid "waitpid() failed: %s\n" msgstr "waitpid()が失敗しました: %s\n" -#: parallel.c:309 +#: parallel.c:304 #, c-format msgid "child process exited abnormally: status %d\n" msgstr "子プロセスが異常終了しました: ステータス %d\n" -#: parallel.c:324 +#: parallel.c:319 #, c-format msgid "child worker exited abnormally: %s\n" msgstr "子ワーカーが異常終了しました: %s\n" -#: pg_upgrade.c:109 +#: pg_upgrade.c:108 #, c-format msgid "could not read permissions of directory \"%s\": %s\n" msgstr "ディレクトリ\"%s\"の権限を読み取れませんでした: %s\n" -#: pg_upgrade.c:126 +#: pg_upgrade.c:123 #, c-format msgid "" "\n" @@ -1335,17 +1355,17 @@ msgstr "" "アップグレードを実行しています。\n" "------------------\n" -#: pg_upgrade.c:169 +#: pg_upgrade.c:166 #, c-format msgid "Setting next OID for new cluster" msgstr "新クラスタの、次の OID を設定しています" -#: pg_upgrade.c:176 +#: pg_upgrade.c:173 #, c-format msgid "Sync data directory to disk" msgstr "データディレクトリをディスクに同期します" -#: pg_upgrade.c:188 +#: pg_upgrade.c:185 #, c-format msgid "" "\n" @@ -1356,7 +1376,12 @@ msgstr "" "アップグレードが完了しました\n" "----------------\n" -#: pg_upgrade.c:234 +#: pg_upgrade.c:220 +#, c-format +msgid "%s: could not find own program executable\n" +msgstr "%s: 自身のための実行ファイルが見つかりませんでした\n" + +#: pg_upgrade.c:246 #, c-format msgid "" "There seems to be a postmaster servicing the old cluster.\n" @@ -1365,7 +1390,7 @@ msgstr "" "旧クラスタで稼働中のpostmasterがあるようです。\n" "そのpostmasterをシャットダウンしたのちにやり直してください。\n" -#: pg_upgrade.c:247 +#: pg_upgrade.c:259 #, c-format msgid "" "There seems to be a postmaster servicing the new cluster.\n" @@ -1374,137 +1399,132 @@ msgstr "" "新クラスタで稼働中のpostmasterがあるようです。\n" "そのpostmasterをシャットダウンしたのちやり直してください。\n" -#: pg_upgrade.c:253 -#, c-format -msgid "%s: could not find own program executable\n" -msgstr "%s: 自身のための実行ファイルが見つかりませんでした\n" - -#: pg_upgrade.c:270 +#: pg_upgrade.c:273 #, c-format msgid "Analyzing all rows in the new cluster" msgstr "新クラスタ内のすべての行を分析しています" -#: pg_upgrade.c:283 +#: pg_upgrade.c:286 #, c-format msgid "Freezing all rows in the new cluster" msgstr "新クラスタ内のすべての行を凍結しています" -#: pg_upgrade.c:303 +#: pg_upgrade.c:306 #, c-format msgid "Restoring global objects in the new cluster" msgstr "新クラスタ内のグローバルオブジェクトを復元しています" -#: pg_upgrade.c:318 +#: pg_upgrade.c:321 #, c-format msgid "Restoring database schemas in the new cluster\n" msgstr "新クラスタ内のデータベーススキーマを復元しています\n" -#: pg_upgrade.c:424 +#: pg_upgrade.c:425 #, c-format msgid "Deleting files from new %s" msgstr "新しい %s からファイルを削除しています" -#: pg_upgrade.c:428 +#: pg_upgrade.c:429 #, c-format msgid "could not delete directory \"%s\"\n" msgstr "ディレクトリ\"%s\"を削除できませんでした。\n" -#: pg_upgrade.c:447 +#: pg_upgrade.c:448 #, c-format msgid "Copying old %s to new server" msgstr "旧の %s を新サーバーにコピーしています" -#: pg_upgrade.c:474 +#: pg_upgrade.c:475 #, c-format msgid "Setting next transaction ID and epoch for new cluster" msgstr "新クラスタの、次のトランザクションIDと基点を設定しています" -#: pg_upgrade.c:504 +#: pg_upgrade.c:505 #, c-format msgid "Setting next multixact ID and offset for new cluster" msgstr "新クラスタの、次のmultixact IDとオフセットを設定しています" -#: pg_upgrade.c:528 +#: pg_upgrade.c:529 #, c-format msgid "Setting oldest multixact ID in new cluster" msgstr "新クラスタの最古のmultixact IDを設定しています" -#: pg_upgrade.c:548 +#: pg_upgrade.c:549 #, c-format msgid "Resetting WAL archives" msgstr "WAL アーカイブをリセットしています" -#: pg_upgrade.c:591 +#: pg_upgrade.c:592 #, c-format msgid "Setting frozenxid and minmxid counters in new cluster" msgstr "新クラスタのfrozenxidとminmxidカウンタを設定しています" -#: pg_upgrade.c:593 +#: pg_upgrade.c:594 #, c-format msgid "Setting minmxid counter in new cluster" msgstr "新クラスタのminmxidカウンタを設定しています" -#: relfilenode.c:36 +#: relfilenode.c:35 #, c-format msgid "Cloning user relation files\n" msgstr "ユーザリレーションをクローニングしています\n" -#: relfilenode.c:39 +#: relfilenode.c:38 #, c-format msgid "Copying user relation files\n" msgstr "ユーザリレーションのファイルをコピーしています\n" -#: relfilenode.c:42 +#: relfilenode.c:41 #, c-format msgid "Linking user relation files\n" msgstr "ユーザリレーションのファイルをリンクしています\n" -#: relfilenode.c:118 +#: relfilenode.c:115 #, c-format msgid "old database \"%s\" not found in the new cluster\n" msgstr "新クラスタ内に旧データベース\"%s\"が見つかりません\n" -#: relfilenode.c:239 +#: relfilenode.c:234 #, c-format msgid "error while checking for file existence \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "\"%s.%s\"ファイル (\"%s\" -> \"%s\")の存在を確認中にエラー: %s\n" -#: relfilenode.c:257 +#: relfilenode.c:252 #, c-format msgid "rewriting \"%s\" to \"%s\"\n" msgstr "\"%s\"を\"%s\"に書き換えています\n" -#: relfilenode.c:265 +#: relfilenode.c:260 #, c-format msgid "cloning \"%s\" to \"%s\"\n" msgstr "\"%s\"から\"%s\"へクローニングしています\n" -#: relfilenode.c:270 +#: relfilenode.c:265 #, c-format msgid "copying \"%s\" to \"%s\"\n" msgstr "\"%s\"を\"%s\"にコピーしています\n" -#: relfilenode.c:275 +#: relfilenode.c:270 #, c-format msgid "linking \"%s\" to \"%s\"\n" msgstr "\"%s\"から\"%s\"へリンクを作成しています\n" -#: server.c:34 +#: server.c:33 #, c-format msgid "connection to database failed: %s" msgstr "データベースへの接続に失敗しました: %s" -#: server.c:40 server.c:142 util.c:136 util.c:166 +#: server.c:39 server.c:141 util.c:135 util.c:165 #, c-format msgid "Failure, exiting\n" msgstr "失敗しました、終了しています\n" -#: server.c:132 +#: server.c:131 #, c-format msgid "executing: %s\n" msgstr "実行中: %s\n" -#: server.c:138 +#: server.c:137 #, c-format msgid "" "SQL command failed\n" @@ -1515,17 +1535,17 @@ msgstr "" "%s\n" "%s" -#: server.c:168 +#: server.c:167 #, c-format -msgid "could not open version file: %s\n" -msgstr "バージョンファイルを開けません: %s\n" +msgid "could not open version file \"%s\": %m\n" +msgstr "バージョンファイル\"%s\"をオープンできませんでした: %m\n" -#: server.c:172 +#: server.c:171 #, c-format -msgid "could not parse PG_VERSION file from %s\n" -msgstr "%s から PG_VERSION ファイルを読み取れませんでした。\n" +msgid "could not parse version file \"%s\"\n" +msgstr "バージョンファイル\"%s\"をパースできませんでした\n" -#: server.c:295 +#: server.c:297 #, c-format msgid "" "\n" @@ -1534,7 +1554,7 @@ msgstr "" "\n" "データベースへの接続に失敗しました: %s" -#: server.c:300 +#: server.c:302 #, c-format msgid "" "could not connect to source postmaster started with the command:\n" @@ -1543,7 +1563,7 @@ msgstr "" "以下のコマンドで起動した移行元postmasterに接続できませんでした:\n" "%s\n" -#: server.c:304 +#: server.c:306 #, c-format msgid "" "could not connect to target postmaster started with the command:\n" @@ -1552,22 +1572,22 @@ msgstr "" "以下のコマンドで起動した移行先postmasterに接続できませんでした:\n" "%s\n" -#: server.c:318 +#: server.c:320 #, c-format msgid "pg_ctl failed to start the source server, or connection failed\n" msgstr "pg_ctl が移行元サーバの起動に失敗した、あるいは接続に失敗しました\n" -#: server.c:320 +#: server.c:322 #, c-format msgid "pg_ctl failed to start the target server, or connection failed\n" msgstr "pg_ctl が移行先サーバの起動に失敗した、あるいは接続に失敗しました\n" -#: server.c:365 +#: server.c:367 #, c-format msgid "out of memory\n" msgstr "メモリ不足です\n" -#: server.c:378 +#: server.c:380 #, c-format msgid "libpq environment variable %s has a non-local server value: %s\n" msgstr "libpq の環境変数 %s で、ローカルでないサーバ値が設定されています: %s\n" @@ -1581,47 +1601,47 @@ msgstr "" "テーブル空間を使用する場合、\n" "同一のバージョンのシステムカタログ同士でアップグレードすることができません。\n" -#: tablespace.c:87 +#: tablespace.c:86 #, c-format msgid "tablespace directory \"%s\" does not exist\n" msgstr "テーブル空間のディレクトリ\"%s\"が存在しません\n" -#: tablespace.c:91 +#: tablespace.c:90 #, c-format msgid "could not stat tablespace directory \"%s\": %s\n" msgstr "テーブル空間のディレクトリ\"%s\"を stat できませんでした: %s\n" -#: tablespace.c:96 +#: tablespace.c:95 #, c-format msgid "tablespace path \"%s\" is not a directory\n" msgstr "テーブル空間のパス\"%s\"がディレクトリではありません。\n" -#: util.c:50 +#: util.c:49 #, c-format msgid " " msgstr " " -#: util.c:83 +#: util.c:82 #, c-format msgid "%-*s" msgstr "%-*s" -#: util.c:175 +#: util.c:174 #, c-format msgid "ok" msgstr "ok" -#: version.c:32 +#: version.c:29 #, c-format msgid "Checking for large objects" msgstr "ラージオブジェクトをチェックしています" -#: version.c:80 version.c:434 +#: version.c:77 version.c:384 #, c-format msgid "warning" msgstr "警告" -#: version.c:82 +#: version.c:79 #, c-format msgid "" "\n" @@ -1638,7 +1658,7 @@ msgstr "" "デフォルトのパーミッションを投入するためのコマンドが案内されます。\n" "\n" -#: version.c:88 +#: version.c:85 #, c-format msgid "" "\n" @@ -1659,12 +1679,12 @@ msgstr "" " %s\n" "\n" -#: version.c:118 +#: version.c:239 #, c-format msgid "Checking for incompatible \"line\" data type" msgstr "非互換の \"line\" データ型を確認しています" -#: version.c:208 +#: version.c:246 #, c-format msgid "" "Your installation contains the \"line\" data type in user tables. This\n" @@ -1683,12 +1703,12 @@ msgstr "" " %s\n" "\n" -#: version.c:244 +#: version.c:276 #, c-format msgid "Checking for invalid \"unknown\" user columns" msgstr "無効な \"unknown\" ユーザ列をチェックしています" -#: version.c:333 +#: version.c:283 #, c-format msgid "" "Your installation contains the \"unknown\" data type in user tables. This\n" @@ -1706,12 +1726,12 @@ msgstr "" " %s\n" "\n" -#: version.c:356 +#: version.c:306 #, c-format msgid "Checking for hash indexes" msgstr "ハッシュインデックスをチェックしています" -#: version.c:436 +#: version.c:386 #, c-format msgid "" "\n" @@ -1727,7 +1747,7 @@ msgstr "" "アップグレードが終わったら、REINDEX を使った操作方法が表示されます。\n" "\n" -#: version.c:442 +#: version.c:392 #, c-format msgid "" "\n" @@ -1748,21 +1768,13 @@ msgstr "" "それまでは、これらのインデックスは使用されません。\n" "\n" -#: version.c:475 -#, fuzzy, c-format -#| msgid "Checking for invalid \"unknown\" user columns" +#: version.c:418 +#, c-format msgid "Checking for invalid \"sql_identifier\" user columns" -msgstr "無効な \"unknown\" ユーザ列をチェックしています" +msgstr "無効な \"sql_identifier\" ユーザ列を確認しています" -#: version.c:563 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains the \"unknown\" data type in user tables. This\n" -#| "data type is no longer allowed in tables, so this cluster cannot currently\n" -#| "be upgraded. You can remove the problem tables and restart the upgrade.\n" -#| "A list of the problem columns is in the file:\n" -#| " %s\n" -#| "\n" +#: version.c:426 +#, c-format msgid "" "Your installation contains the \"sql_identifier\" data type in user tables\n" "and/or indexes. The on-disk format for this data type has changed, so this\n" @@ -1772,10 +1784,20 @@ msgid "" " %s\n" "\n" msgstr "" -"環境のユーザテーブルに \"unknown\" データ型が含まれています。\n" -"このデータ型はもはやテーブル内では利用できないため、このクラスタは現時点\n" -"ではアップグレードできません。問題のテーブルを削除したのち、アップグレードを\n" -"再実行できます。\n" +"あなたのインストールでは”sql_identifier”データ型がユーザテーブルまたは/および\n" +"インデックスに含まれています。このデータ型のディスク上での形式は変更されてい\n" +"ます。問題のあるテーブルを削除するか、データ型を\"name\"に変更してからアップ\n" +"グレードを再実行することができます。\n" "問題のある列の一覧は、以下のファイルにあります: \n" " %s\n" "\n" + +#~ msgid "could not parse PG_VERSION file from %s\n" +#~ msgstr "%s から PG_VERSION ファイルを読み取れませんでした。\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "不具合は まで報告してください。\n" diff --git a/src/bin/pg_upgrade/po/ko.po b/src/bin/pg_upgrade/po/ko.po index e0ecb13cd5e08..5fa498a22035a 100644 --- a/src/bin/pg_upgrade/po/ko.po +++ b/src/bin/pg_upgrade/po/ko.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_upgrade (PostgreSQL) 12\n" +"Project-Id-Version: pg_upgrade (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:15+0000\n" -"PO-Revision-Date: 2020-02-10 10:31+0900\n" +"POT-Creation-Date: 2020-10-05 20:45+0000\n" +"PO-Revision-Date: 2020-10-06 14:02+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean \n" "Language: ko\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: check.c:67 +#: check.c:66 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -26,7 +26,7 @@ msgstr "" "옛 운영 서버에서 일관성 검사를 진행합니다.\n" "------------------------------------------\n" -#: check.c:73 +#: check.c:72 #, c-format msgid "" "Performing Consistency Checks\n" @@ -35,7 +35,7 @@ msgstr "" "일관성 검사 수행중\n" "------------------\n" -#: check.c:191 +#: check.c:190 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "*클러스터 호환성*\n" -#: check.c:197 +#: check.c:196 #, c-format msgid "" "\n" @@ -55,7 +55,7 @@ msgstr "" "여기서 pg_upgrade 작업을 실패한다면, 재시도 하기 전에 먼저\n" "새 클러스터를 처음부터 다시 만들어 진행해야 합니다.\n" -#: check.c:233 +#: check.c:232 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade so,\n" @@ -68,7 +68,7 @@ msgstr "" " %s\n" "\n" -#: check.c:238 +#: check.c:237 #, c-format msgid "" "Optimizer statistics and free space information are not transferred\n" @@ -81,7 +81,7 @@ msgstr "" " %s\n" "\n" -#: check.c:245 +#: check.c:244 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -90,7 +90,7 @@ msgstr "" "아래 스크립트를 실행하면, 옛 클러스터 자료를 지울 것입니다:\n" " %s\n" -#: check.c:250 +#: check.c:249 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -102,22 +102,22 @@ msgstr "" "사용자 정의 테이블스페이스나, 새 클러스터가 옛 클러스터 안에\n" "있기 때문입니다. 옛 클러스터 자료는 직접 찾아서 지우세요.\n" -#: check.c:260 +#: check.c:259 #, c-format msgid "Checking cluster versions" msgstr "클러스터 버전 검사 중" -#: check.c:272 +#: check.c:271 #, c-format msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" msgstr "이 도구는 PostgreSQL 8.4 이상 버전에서 사용할 수 있습니다.\n" -#: check.c:276 +#: check.c:275 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "이 도구는 PostgreSQL %s 버전으로만 업그레이드 할 수 있습니다.\n" -#: check.c:285 +#: check.c:284 #, c-format msgid "" "This utility cannot be used to downgrade to older major PostgreSQL " @@ -126,19 +126,19 @@ msgstr "" "이 도구는 더 낮은 메이져 PostgreSQL 버전으로 다운그레이드하는데 사용할 수 없" "습니다.\n" -#: check.c:290 +#: check.c:289 #, c-format msgid "" "Old cluster data and binary directories are from different major versions.\n" msgstr "옛 클러스터 자료와 실행파일 디렉터리가 서로 메이져 버전이 다릅니다.\n" -#: check.c:293 +#: check.c:292 #, c-format msgid "" "New cluster data and binary directories are from different major versions.\n" msgstr "새 클러스터 자료와 실행파일 디렉터리가 서로 메이져 버전이 다릅니다.\n" -#: check.c:310 +#: check.c:309 #, c-format msgid "" "When checking a pre-PG 9.1 live old server, you must specify the old " @@ -146,7 +146,7 @@ msgid "" msgstr "" "옛 서버가 9.1 버전 이전 이라면 옛 서버의 포트를 반드시 지정해야 합니다.\n" -#: check.c:314 +#: check.c:313 #, c-format msgid "" "When checking a live server, the old and new port numbers must be " @@ -154,14 +154,14 @@ msgid "" msgstr "" "운영 서버 검사를 할 때는, 옛 서버, 새 서버의 포트를 다르게 지정해야 합니다.\n" -#: check.c:329 +#: check.c:328 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "" "\"%s\" 데이터베이스의 인코딩이 서로 다릅니다: 옛 서버 \"%s\", 새 서버 \"%s" "\"\n" -#: check.c:334 +#: check.c:333 #, c-format msgid "" "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" @@ -169,7 +169,7 @@ msgstr "" "\"%s\" 데이터베이스의 lc_collate 값이 서로 다릅니다: 옛 서버 \"%s\", 새 서버 " "\"%s\"\n" -#: check.c:337 +#: check.c:336 #, c-format msgid "" "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" @@ -177,31 +177,31 @@ msgstr "" "\"%s\" 데이터베이스의 lc_ctype 값이 서로 다릅니다: 옛 서버 \"%s\", 새 서버 " "\"%s\"\n" -#: check.c:410 +#: check.c:409 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "" "\"%s\" 새 데이터베이스 클러스터가 비어있지 않습니다.\n" " -- \"%s.%s\" 릴레이션을 찾았음\n" -#: check.c:459 +#: check.c:458 #, c-format msgid "Creating script to analyze new cluster" msgstr "새 클러스터 통계정보 수집 스크립트를 만듭니다" -#: check.c:473 check.c:601 check.c:865 check.c:944 check.c:1053 check.c:1144 -#: file.c:341 function.c:246 option.c:495 version.c:57 version.c:202 -#: version.c:344 +#: check.c:472 check.c:600 check.c:864 check.c:943 check.c:1053 check.c:1144 +#: file.c:336 function.c:240 option.c:497 version.c:54 version.c:199 +#: version.c:341 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "\"%s\" 파일을 열 수 없음: %s\n" -#: check.c:528 check.c:657 +#: check.c:527 check.c:656 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "\"%s\" 파일에 실행 권한을 추가 할 수 없음: %s\n" -#: check.c:564 +#: check.c:563 #, c-format msgid "" "\n" @@ -211,7 +211,7 @@ msgstr "" "\n" "경고: 새 데이터 디렉터리는 옛 데이터 디렉터리 안에 둘 수 없습니다, 예: %s\n" -#: check.c:588 +#: check.c:587 #, c-format msgid "" "\n" @@ -222,37 +222,37 @@ msgstr "" "경고: 사용자 정의 테이블스페이스 위치를 데이터 디렉터리 안에 둘 수 없습니다, " "예: %s\n" -#: check.c:598 +#: check.c:597 #, c-format msgid "Creating script to delete old cluster" msgstr "옛 클러스터를 지우는 스크립트를 만듭니다" -#: check.c:677 +#: check.c:676 #, c-format msgid "Checking database user is the install user" msgstr "데이터베이스 사용자가 설치 작업을 한 사용자인지 확인합니다" -#: check.c:693 +#: check.c:692 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "\"%s\" 데이터베이스 사용자는 설치 작업을 한 사용자가 아닙니다\n" -#: check.c:704 +#: check.c:703 #, c-format msgid "could not determine the number of users\n" msgstr "사용자 수를 확인할 수 없음\n" -#: check.c:712 +#: check.c:711 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "새 클러스터에서만 설치 사용 사용자가 정의될 수 있음\n" -#: check.c:732 +#: check.c:731 #, c-format msgid "Checking database connection settings" msgstr "데이터베이스 연결 설정을 확인 중" -#: check.c:754 +#: check.c:753 #, c-format msgid "" "template0 must not allow connections, i.e. its pg_database.datallowconn must " @@ -261,7 +261,7 @@ msgstr "" "template0 데이터베이스 접속을 금지해야 합니다. 예: 해당 데이터베이스의 " "pg_database.datallowconn 값이 false여야 합니다.\n" -#: check.c:764 +#: check.c:763 #, c-format msgid "" "All non-template0 databases must allow connections, i.e. their pg_database." @@ -270,79 +270,76 @@ msgstr "" "template0 데이터베이스를 제외한 다른 모든 데이터베이스는 접속이 가능해야합니" "다. 예: 그들의 pg_database.datallowconn 값은 true여야 합니다.\n" -#: check.c:789 +#: check.c:788 #, c-format msgid "Checking for prepared transactions" msgstr "미리 준비된 트랜잭션을 확인 중" -#: check.c:798 +#: check.c:797 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "옛 클러스터에 미리 준비된 트랜잭션이 있음\n" -#: check.c:800 +#: check.c:799 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "새 클러스터에 미리 준비된 트랜잭션이 있음\n" -#: check.c:826 +#: check.c:825 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "contrib/isn 모듈의 bigint 처리가 서로 같은지 확인 중" -#: check.c:887 check.c:966 check.c:1076 check.c:1167 function.c:268 -#: version.c:248 version.c:285 version.c:428 +#: check.c:886 check.c:965 check.c:1076 check.c:1167 function.c:262 +#: version.c:245 version.c:282 version.c:425 #, c-format msgid "fatal\n" msgstr "치명적 오류\n" -#: check.c:888 +#: check.c:887 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" "bigint data type. Your old and new clusters pass bigint values\n" "differently so this cluster cannot currently be upgraded. You can\n" -"manually upgrade databases that use \"contrib/isn\" facilities and remove\n" -"\"contrib/isn\" from the old cluster and restart the upgrade. A list of\n" -"the problem functions is in the file:\n" +"manually dump databases in the old cluster that use \"contrib/isn\"\n" +"facilities, drop them, perform the upgrade, and then restore them. A\n" +"list of the problem functions is in the file:\n" " %s\n" "\n" msgstr "" "설치되어 있는 \"contrib/isn\" 모듈은 bigint 자료형을 사용합니다.\n" -"이 bigint 자료형의 처리 방식이 새 버전과 옛 버전 사이 호환성이 없습니다.\n" -"이 모듈을 계속 사용하려면, 사용자가 직접 업그레이드 해야 합니다.\n" -"먼저 옛 버전에서 \"contrib/isn\" 모듈을 삭제하고 서버를 재실행하고, 업그레이" -"드 한 뒤\n" -"직접 나머지 작업을 진행하십시오. 문제가 있는 함수는 아래 파일 안에 있습니" -"다:\n" +"이 bigint 자료형의 처리 방식이 새 버전과 옛 버전 사이 호환성이 없어,\n" +"이 클러스터 업그레이드를 할 수 없습니다. 먼저 수동으로 데이터베이스를 \n" +"덤프하고, 해당 모듈을 삭제하고, 업그레이드 한 뒤 다시 덤프 파일을 이용해\n" +"복원할 수 있습니다. 문제가 있는 함수는 아래 파일 안에 있습니다:\n" " %s\n" "\n" -#: check.c:912 +#: check.c:911 #, c-format msgid "Checking for tables WITH OIDS" msgstr "WITH OIDS 옵션 있는 테이블 확인 중" -#: check.c:967 +#: check.c:966 #, c-format msgid "" -"Your installation contains tables declared WITH OIDS, which is not " -"supported\n" -"anymore. Consider removing the oid column using\n" +"Your installation contains tables declared WITH OIDS, which is not\n" +"supported anymore. Consider removing the oid column using\n" " ALTER TABLE ... SET WITHOUT OIDS;\n" "A list of tables with the problem is in the file:\n" " %s\n" "\n" msgstr "" "더 이상 WITH OIDS 옵션을 사용하는 테이블을 지원하지 않습니다.\n" -"먼저 기존 테이블을 대상으로 다음 명령을 실행해서 이 옵션을 뺄 것을\n" -"고려해 보십시오.\n" +"먼저 oid 칼럼이 있는 기존 테이블을 대상으로 다음 명령을 실행해서\n" +"이 옵션을 뺄 것을 고려해 보십시오.\n" " ALTER TABLE ... SET WITHOUT OIDS;\n" -"아래 파일은 그 관련 테이블 목록입니다:\n" +"관련 테이블 목록은 아래 파일 안에 있습니다:\n" " %s\n" "\n" -#: check.c:997 +#: check.c:996 #, c-format msgid "Checking for reg* data types in user tables" msgstr "사용자가 만든 테이블에 reg* 자료형을 쓰는지 확인 중" @@ -353,16 +350,16 @@ msgid "" "Your installation contains one of the reg* data types in user tables.\n" "These data types reference system OIDs that are not preserved by\n" "pg_upgrade, so this cluster cannot currently be upgraded. You can\n" -"remove the problem tables and restart the upgrade. A list of the problem\n" -"columns is in the file:\n" +"remove the problem tables and restart the upgrade. A list of the\n" +"problem columns is in the file:\n" " %s\n" "\n" msgstr "" -"옛 서버의 사용자가 만든 테이블에서 reg* 자료형을 사용하고 있습니다.\n" +"옛 서버에서 사용자가 만든 테이블에서 reg* 자료형을 사용하고 있습니다.\n" "이 자료형들은 pg_upgrade 명령으로 내정된 시스템 OID를 사용하지 못할 수\n" "있습니다. 그래서 업그레이드 작업을 진행할 수 없습니다.\n" "사용하고 있는 테이블들을 지우고 업그레이드 작업을 다시 시도하세요.\n" -"이런 자료형을 사용하는 파일은 다음 파일들 입니다:\n" +"이런 자료형을 사용하는 칼럼들은 아래 파일 안에 있습니다:\n" " %s\n" "\n" @@ -375,11 +372,10 @@ msgstr "\"jsonb\" 자료형 호환성 확인 중" #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" -"The internal format of \"jsonb\" changed during 9.4 beta so this cluster " -"cannot currently\n" -"be upgraded. You can remove the problem tables and restart the upgrade. A " -"list\n" -"of the problem columns is in the file:\n" +"The internal format of \"jsonb\" changed during 9.4 beta so this\n" +"cluster cannot currently be upgraded. You can remove the problem\n" +"tables and restart the upgrade. A list of the problem columns is\n" +"in the file:\n" " %s\n" "\n" msgstr "" @@ -387,36 +383,36 @@ msgstr "" "9.4 베타 비전 이후 JSONB 내부 자료 구조가 바뀌었습니다.\n" "그래서, 업그레이드 작업이 불가능합니다.\n" "해당 테이블들을 지우고 업그레이드 작업을 진행하세요\n" -"해당 자료형을 쓰는 파일은 다음과 같습니다:\n" +"해당 자료형을 칼럼들은 아래 파일 안에 있습니다:\n" " %s\n" "\n" -#: check.c:1189 +#: check.c:1190 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "\"pg_\"로 시작하는 롤 확인 중" -#: check.c:1199 +#: check.c:1200 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "옛 클러스터에 \"pg_\" 시작하는 롤이 있습니다.\n" -#: check.c:1201 +#: check.c:1202 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "새 클러스터에 \"pg_\"로 시작하는 롤이 있습니다.\n" -#: check.c:1227 +#: check.c:1228 #, c-format msgid "failed to get the current locale\n" msgstr "현재 로케일을 확인 할 수 없음\n" -#: check.c:1236 +#: check.c:1237 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "\"%s\"용 시스템 로케일 이름을 알 수 없음\n" -#: check.c:1242 +#: check.c:1243 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "\"%s\" 옛 로케일을 복원할 수 없음\n" @@ -471,8 +467,8 @@ msgstr "원본 클러스터에 클러스터 상태 정보가 없음:\n" msgid "The target cluster lacks cluster state information:\n" msgstr "대상 클러스터에 클러스터 상태 정보가 없음:\n" -#: controldata.c:208 dump.c:51 pg_upgrade.c:336 pg_upgrade.c:373 -#: relfilenode.c:252 util.c:80 +#: controldata.c:208 dump.c:49 pg_upgrade.c:339 pg_upgrade.c:375 +#: relfilenode.c:247 util.c:79 #, c-format msgid "%s" msgstr "%s" @@ -711,12 +707,12 @@ msgstr "" "이 파일이 더 이상 안전하지 않기 때문입니다.\n" "\n" -#: dump.c:22 +#: dump.c:20 #, c-format msgid "Creating dump of global objects" msgstr "전역 객체 덤프를 만듭니다" -#: dump.c:33 +#: dump.c:31 #, c-format msgid "Creating dump of database schemas\n" msgstr "데이터베이스 스키마 덤프를 만듭니다\n" @@ -736,12 +732,12 @@ msgstr "%s에서 pg_ctl 버전을 알 수 없음\n" msgid "command too long\n" msgstr "명령이 너무 긺\n" -#: exec.c:110 util.c:38 util.c:226 +#: exec.c:110 util.c:37 util.c:225 #, c-format msgid "%s\n" msgstr "%s\n" -#: exec.c:149 option.c:220 +#: exec.c:149 option.c:217 #, c-format msgid "could not open log file \"%s\": %m\n" msgstr "\"%s\" 로그 파일을 열 수 없음: %m\n" @@ -778,7 +774,7 @@ msgstr "" "\"%s\" 파일의 마지막 부분을 살펴보면\n" "이 문제를 풀 실마리가 보일 것입니다.\n" -#: exec.c:204 option.c:229 +#: exec.c:204 option.c:226 #, c-format msgid "could not write to log file \"%s\": %m\n" msgstr "\"%s\" 로그 파일을 쓸 수 없음: %m\n" @@ -793,7 +789,7 @@ msgstr "\"%s\" 파일을 읽기 위해 열 수 없습니다: %s\n" msgid "You must have read and write access in the current directory.\n" msgstr "현재 디렉터리의 읽기 쓰기 권한을 부여하세요.\n" -#: exec.c:310 exec.c:372 exec.c:427 +#: exec.c:310 exec.c:372 exec.c:436 #, c-format msgid "check for \"%s\" failed: %s\n" msgstr "\"%s\" 검사 실패: %s\n" @@ -803,102 +799,102 @@ msgstr "\"%s\" 검사 실패: %s\n" msgid "\"%s\" is not a directory\n" msgstr "\"%s\" 파일은 디렉터리가 아닙니다.\n" -#: exec.c:430 +#: exec.c:439 #, c-format msgid "check for \"%s\" failed: not a regular file\n" msgstr "\"%s\" 검사 실패: 일반 파일이 아닙니다\n" -#: exec.c:442 +#: exec.c:451 #, c-format msgid "check for \"%s\" failed: cannot read file (permission denied)\n" msgstr "\"%s\" 검사 실패: 해당 파일을 읽을 수 없음 (접근 권한 없음)\n" -#: exec.c:450 +#: exec.c:459 #, c-format msgid "check for \"%s\" failed: cannot execute (permission denied)\n" msgstr "\"%s\" 검사 실패: 실행할 수 없음 (접근 권한 없음)\n" -#: file.c:48 file.c:66 +#: file.c:43 file.c:61 #, c-format msgid "error while cloning relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "\"%s.%s\" (\"%s\" / \"%s\") 릴레이션 클론 중 오류: %s\n" -#: file.c:55 +#: file.c:50 #, c-format msgid "" "error while cloning relation \"%s.%s\": could not open file \"%s\": %s\n" msgstr "\"%s.%s\" 릴레이션 클론 중 오류: \"%s\" 파일을 열 수 없음: %s\n" -#: file.c:60 +#: file.c:55 #, c-format msgid "" "error while cloning relation \"%s.%s\": could not create file \"%s\": %s\n" msgstr "\"%s.%s\" 릴레이션 클론 중 오류: \"%s\" 파일을 만들 수 없음: %s\n" -#: file.c:92 file.c:195 +#: file.c:87 file.c:190 #, c-format msgid "" "error while copying relation \"%s.%s\": could not open file \"%s\": %s\n" msgstr "\"%s.%s\" 릴레이션 복사 중 오류: \"%s\" 파일을 열 수 없음: %s\n" -#: file.c:97 file.c:204 +#: file.c:92 file.c:199 #, c-format msgid "" "error while copying relation \"%s.%s\": could not create file \"%s\": %s\n" msgstr "\"%s.%s\" 릴레이션 복사 중 오류: \"%s\" 파일을 만들 수 없음: %s\n" -#: file.c:111 file.c:228 +#: file.c:106 file.c:223 #, c-format msgid "" "error while copying relation \"%s.%s\": could not read file \"%s\": %s\n" msgstr "\"%s.%s\" 릴레이션 복사 중 오류: \"%s\" 파일을 읽을 수 없음: %s\n" -#: file.c:123 file.c:306 +#: file.c:118 file.c:301 #, c-format msgid "" "error while copying relation \"%s.%s\": could not write file \"%s\": %s\n" msgstr "\"%s.%s\" 릴레이션 복사 중 오류: \"%s\" 파일을 쓸 수 없음: %s\n" -#: file.c:137 +#: file.c:132 #, c-format msgid "error while copying relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "\"%s.%s\" (\"%s\" / \"%s\") 릴레이션 복사 중 오류: %s\n" -#: file.c:156 +#: file.c:151 #, c-format msgid "" "error while creating link for relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "\"%s.%s\" (\"%s\" / \"%s\") 릴레이션 링크 만드는 중 오류: %s\n" -#: file.c:199 +#: file.c:194 #, c-format msgid "" "error while copying relation \"%s.%s\": could not stat file \"%s\": %s\n" msgstr "" "\"%s.%s\" 릴레이션 복사 중 오류: \"%s\" 파일 상태 정보를 알 수 없음: %s\n" -#: file.c:231 +#: file.c:226 #, c-format msgid "" "error while copying relation \"%s.%s\": partial page found in file \"%s\"\n" msgstr "\"%s.%s\" 릴레이션 복사 중 오류: \"%s\" 파일에 페이지가 손상되었음\n" -#: file.c:333 file.c:350 +#: file.c:328 file.c:345 #, c-format msgid "could not clone file between old and new data directories: %s\n" msgstr "옛 데이터 디렉터리와 새 데이터 디렉터리 사이 파일 클론 실패: %s\n" -#: file.c:346 +#: file.c:341 #, c-format msgid "could not create file \"%s\": %s\n" msgstr "\"%s\" 파일을 만들 수 없음: %s\n" -#: file.c:357 +#: file.c:352 #, c-format msgid "file cloning not supported on this platform\n" msgstr "이 운영체제는 파일 클론 기능을 제공하지 않습니다.\n" -#: file.c:374 +#: file.c:369 #, c-format msgid "" "could not create hard link between old and new data directories: %s\n" @@ -908,7 +904,7 @@ msgstr "" "데이터 디렉터리간 하드 링크를 만들 수 없음: %s\n" "하드 링크를 사용하려면, 두 디렉터리가 같은 시스템 볼륨 안에 있어야 합니다.\n" -#: function.c:116 +#: function.c:114 #, c-format msgid "" "\n" @@ -947,32 +943,32 @@ msgstr "" "이 작업은 관련 모든 데이터베이스 단위로 진행되어야 합니다.\n" "\n" -#: function.c:134 +#: function.c:132 #, c-format msgid " %s\n" msgstr " %s\n" -#: function.c:144 +#: function.c:142 #, c-format msgid "Remove the problem functions from the old cluster to continue.\n" msgstr "옛 클러스터에서 문제가 있는 함수들을 삭제하고 진행하세요.\n" -#: function.c:191 +#: function.c:189 #, c-format msgid "Checking for presence of required libraries" msgstr "필요한 라이브러리 확인 중" -#: function.c:248 +#: function.c:242 #, c-format msgid "could not load library \"%s\": %s" msgstr "\"%s\" 라이브러리 로드 실패: %s" -#: function.c:259 info.c:633 +#: function.c:253 #, c-format -msgid "Database: %s\n" +msgid "In database: %s\n" msgstr "데이터베이스: %s\n" -#: function.c:269 +#: function.c:263 #, c-format msgid "" "Your installation references loadable libraries that are missing from the\n" @@ -988,7 +984,7 @@ msgstr "" " %s\n" "\n" -#: info.c:133 +#: info.c:131 #, c-format msgid "" "Relation names for OID %u in database \"%s\" do not match: old name \"%s.%s" @@ -997,32 +993,32 @@ msgstr "" "%u OID에 대한 \"%s\" 데이터베이스 이름이 서로 다릅니다: 옛 이름: \"%s.%s\", " "새 이름: \"%s.%s\"\n" -#: info.c:153 +#: info.c:151 #, c-format msgid "Failed to match up old and new tables in database \"%s\"\n" msgstr "\"%s\" 데이터베이스 내 테이블 이름이 서로 다릅니다:\n" -#: info.c:242 +#: info.c:240 #, c-format msgid " which is an index on \"%s.%s\"" msgstr " 해당 인덱스: \"%s.%s\"" -#: info.c:252 +#: info.c:250 #, c-format msgid " which is an index on OID %u" msgstr " 해당 인덱스의 OID: %u" -#: info.c:264 +#: info.c:262 #, c-format msgid " which is the TOAST table for \"%s.%s\"" msgstr " \"%s.%s\" 객체의 토스트 테이블" -#: info.c:272 +#: info.c:270 #, c-format msgid " which is the TOAST table for OID %u" msgstr " 해당 토스트 베이블의 OID: %u" -#: info.c:276 +#: info.c:274 #, c-format msgid "" "No match found in old cluster for new relation with OID %u in database \"%s" @@ -1030,7 +1026,7 @@ msgid "" msgstr "" "새 클러스터의 %u OID (해당 데이터베이스: \"%s\")가 옛 클러스터에 없음: %s\n" -#: info.c:279 +#: info.c:277 #, c-format msgid "" "No match found in new cluster for old relation with OID %u in database \"%s" @@ -1038,17 +1034,17 @@ msgid "" msgstr "" "옛 클러스터의 %u OID (해당 데이터베이스: \"%s\")가 새 클러스터에 없음: %s\n" -#: info.c:291 +#: info.c:289 #, c-format msgid "mappings for database \"%s\":\n" msgstr "\"%s\" 데이터베이스 맵핑 중:\n" -#: info.c:294 +#: info.c:292 #, c-format msgid "%s.%s: %u to %u\n" msgstr "%s.%s: %u / %u\n" -#: info.c:299 info.c:635 +#: info.c:297 info.c:633 #, c-format msgid "" "\n" @@ -1057,7 +1053,7 @@ msgstr "" "\n" "\n" -#: info.c:324 +#: info.c:322 #, c-format msgid "" "\n" @@ -1066,7 +1062,7 @@ msgstr "" "\n" "원본 데이터베이스:\n" -#: info.c:326 +#: info.c:324 #, c-format msgid "" "\n" @@ -1075,7 +1071,12 @@ msgstr "" "\n" "대상 데이터베이스:\n" -#: info.c:646 +#: info.c:631 +#, c-format +msgid "Database: %s\n" +msgstr "데이터베이스: %s\n" + +#: info.c:644 #, c-format msgid "relname: %s.%s: reloid: %u reltblspace: %s\n" msgstr "relname: %s.%s: reloid: %u reltblspace: %s\n" @@ -1085,52 +1086,57 @@ msgstr "relname: %s.%s: reloid: %u reltblspace: %s\n" msgid "%s: cannot be run as root\n" msgstr "%s: root 권한으로 실행할 수 없음\n" -#: option.c:171 +#: option.c:170 #, c-format msgid "invalid old port number\n" msgstr "잘못된 옛 포트 번호\n" -#: option.c:179 +#: option.c:175 #, c-format msgid "invalid new port number\n" msgstr "잘못된 새 포트 번호\n" -#: option.c:213 +#: option.c:207 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "보다 자세한 사용법은 \"%s --help\" 명령을 이용하세요.\n" -#: option.c:223 +#: option.c:214 +#, c-format +msgid "too many command-line arguments (first is \"%s\")\n" +msgstr "너무 많은 명령행 인자를 지정 했음 (시작: \"%s\")\n" + +#: option.c:220 #, c-format msgid "Running in verbose mode\n" msgstr "작업 내역을 자세히 봄\n" -#: option.c:254 +#: option.c:251 msgid "old cluster binaries reside" msgstr "옛 클러스터 실행파일 위치" -#: option.c:256 +#: option.c:253 msgid "new cluster binaries reside" msgstr "새 클러스터 실팽파일 위치" -#: option.c:258 +#: option.c:255 msgid "old cluster data resides" msgstr "옛 클러스터 자료 위치" -#: option.c:260 +#: option.c:257 msgid "new cluster data resides" msgstr "새 클러스터 자료 위치" -#: option.c:262 +#: option.c:259 msgid "sockets will be created" msgstr "소켓 파일 만들 위치" -#: option.c:279 option.c:373 +#: option.c:276 option.c:374 #, c-format msgid "could not determine current directory\n" msgstr "현재 디렉터리 위치를 알 수 없음\n" -#: option.c:282 +#: option.c:279 #, c-format msgid "" "cannot run pg_upgrade from inside the new cluster data directory on Windows\n" @@ -1138,7 +1144,7 @@ msgstr "" "윈도우즈 환경에서는 pg_upgrade 명령은 새 클러스터 데이터 디렉터리 안에서는 실" "행할 수 없음\n" -#: option.c:291 +#: option.c:288 #, c-format msgid "" "pg_upgrade upgrades a PostgreSQL cluster to a different major version.\n" @@ -1147,12 +1153,12 @@ msgstr "" "새 데이터 클러스터 버전과 pg_upgrade 버전의 메이저 버전이 서로 다릅니다.\n" "\n" -#: option.c:292 +#: option.c:289 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: option.c:293 +#: option.c:290 #, c-format msgid "" " pg_upgrade [OPTION]...\n" @@ -1161,46 +1167,50 @@ msgstr "" " pg_upgrade [옵션]...\n" "\n" -#: option.c:294 +#: option.c:291 #, c-format msgid "Options:\n" msgstr "옵션:\n" -#: option.c:295 +#: option.c:292 #, c-format msgid " -b, --old-bindir=BINDIR old cluster executable directory\n" msgstr " -b, --old-bindir=BINDIR 옛 클러스터 실행 파일의 디렉터리\n" -#: option.c:296 +#: option.c:293 #, c-format -msgid " -B, --new-bindir=BINDIR new cluster executable directory\n" -msgstr " -B, --new-bindir=BINDIR 새 클러스터 실행 파일의 디렉터리\n" +msgid "" +" -B, --new-bindir=BINDIR new cluster executable directory (default\n" +" same directory as pg_upgrade)\n" +msgstr "" +" -B, --new-bindir=BINDIR 새 클러스터 실행 파일의 디렉터리 (기본값:\n" +" pg_upgrade가 있는 디렉터리)\n" -#: option.c:297 +#: option.c:295 #, c-format msgid "" " -c, --check check clusters only, don't change any data\n" msgstr " -c, --check 실 작업 없이, 그냥 검사만\n" -#: option.c:298 +#: option.c:296 #, c-format msgid " -d, --old-datadir=DATADIR old cluster data directory\n" msgstr " -d, --old-datadir=DATADIR 옛 클러스터 데이터 디렉터리\n" -#: option.c:299 +#: option.c:297 #, c-format msgid " -D, --new-datadir=DATADIR new cluster data directory\n" msgstr " -D, --new-datadir=DATADIR 새 클러스터 데이터 디렉터리\n" -#: option.c:300 +#: option.c:298 #, c-format msgid "" -" -j, --jobs number of simultaneous processes or threads " +" -j, --jobs=NUM number of simultaneous processes or threads " "to use\n" msgstr "" -" -j, --jobs 동시에 작업할 프로세스 또는 쓰레드 수\n" +" -j, --jobs=NUM 동시에 작업할 프로세스 또는 쓰레드 수\n" -#: option.c:301 +#: option.c:299 #, c-format msgid "" " -k, --link link instead of copying files to new " @@ -1208,36 +1218,36 @@ msgid "" msgstr "" " -k, --link 새 클러스터 구축을 복사 대신 링크 사용\n" -#: option.c:302 +#: option.c:300 #, c-format msgid "" " -o, --old-options=OPTIONS old cluster options to pass to the server\n" msgstr " -o, --old-options=옵션 옛 서버에서 사용할 서버 옵션들\n" -#: option.c:303 +#: option.c:301 #, c-format msgid "" " -O, --new-options=OPTIONS new cluster options to pass to the server\n" msgstr " -O, --new-options=옵션 새 서버에서 사용할 서버 옵션들\n" -#: option.c:304 +#: option.c:302 #, c-format msgid " -p, --old-port=PORT old cluster port number (default %d)\n" msgstr " -p, --old-port=PORT 옛 클러스터 포트 번호 (기본값 %d)\n" -#: option.c:305 +#: option.c:303 #, c-format msgid " -P, --new-port=PORT new cluster port number (default %d)\n" msgstr " -P, --new-port=PORT 새 클러스터 포트 번호 (기본값 %d)\n" -#: option.c:306 +#: option.c:304 #, c-format msgid "" " -r, --retain retain SQL and log files after success\n" msgstr "" " -r, --retain 작업 완료 후 사용했던 SQL과 로그 파일 남김\n" -#: option.c:307 +#: option.c:305 #, c-format msgid "" " -s, --socketdir=DIR socket directory to use (default current " @@ -1246,23 +1256,23 @@ msgstr "" " -s, --socketdir=DIR 사용할 소켓 디렉터리 (기본값: 현재 디렉터" "리)\n" -#: option.c:308 +#: option.c:306 #, c-format msgid " -U, --username=NAME cluster superuser (default \"%s\")\n" msgstr " -U, --username=이름 클러스터 슈퍼유저 (기본값 \"%s\")\n" -#: option.c:309 +#: option.c:307 #, c-format msgid " -v, --verbose enable verbose internal logging\n" msgstr " -v, --verbose 작업 내역을 자세히 남김\n" -#: option.c:310 +#: option.c:308 #, c-format msgid "" " -V, --version display version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: option.c:311 +#: option.c:309 #, c-format msgid "" " --clone clone instead of copying files to new " @@ -1270,12 +1280,12 @@ msgid "" msgstr "" " --clone 새 클러스터 구축을 복사 대신 클론 사용\n" -#: option.c:312 +#: option.c:310 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: option.c:313 +#: option.c:311 #, c-format msgid "" "\n" @@ -1290,7 +1300,7 @@ msgstr "" " 옛 서버를 중지하고\n" " 새 서버도 중지하세요.\n" -#: option.c:318 +#: option.c:316 #, c-format msgid "" "\n" @@ -1307,7 +1317,7 @@ msgstr "" " 옛 버전의 \"bin\" 디렉터리 (-b BINDIR)\n" " 새 버전의 \"bin\" 디렉터리 (-B BINDIR)\n" -#: option.c:324 +#: option.c:322 #, c-format msgid "" "\n" @@ -1322,7 +1332,7 @@ msgstr "" "newCluster/bin\n" "or\n" -#: option.c:329 +#: option.c:327 #, c-format msgid "" " $ export PGDATAOLD=oldCluster/data\n" @@ -1337,7 +1347,7 @@ msgstr "" " $ export PGBINNEW=newCluster/bin\n" " $ pg_upgrade\n" -#: option.c:335 +#: option.c:333 #, c-format msgid "" " C:\\> set PGDATAOLD=oldCluster/data\n" @@ -1352,16 +1362,21 @@ msgstr "" " C:\\> set PGBINNEW=newCluster/bin\n" " C:\\> pg_upgrade\n" -#: option.c:341 +#: option.c:339 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"문제점 보고: .\n" +"문제점 보고 주소: <%s>\n" + +#: option.c:340 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" -#: option.c:377 +#: option.c:380 #, c-format msgid "" "You must identify the directory where the %s.\n" @@ -1370,62 +1385,62 @@ msgstr "" "%s 위치의 디렉터리를 알고 있어야 함.\n" "%s 명령행 옵션이나, %s 환경 변수를 사용하세요.\n" -#: option.c:429 +#: option.c:432 #, c-format msgid "Finding the real data directory for the source cluster" msgstr "원본 클러스터용 실 데이터 디렉터리를 찾는 중" -#: option.c:431 +#: option.c:434 #, c-format msgid "Finding the real data directory for the target cluster" msgstr "대상 클러스터용 실 데이터 디렉터리를 찾는 중" -#: option.c:443 +#: option.c:446 #, c-format msgid "could not get data directory using %s: %s\n" msgstr "%s 지정한 데이터 디렉터리를 찾을 수 없음: %s\n" -#: option.c:503 +#: option.c:505 #, c-format msgid "could not read line %d from file \"%s\": %s\n" msgstr "%d 번째 줄을 \"%s\" 파일에서 읽을 수 없음: %s\n" -#: option.c:521 +#: option.c:522 #, c-format msgid "user-supplied old port number %hu corrected to %hu\n" msgstr "지정한 %hu 옛 포트 번호를 %hu 번호로 바꿈\n" -#: parallel.c:128 parallel.c:241 +#: parallel.c:127 parallel.c:238 #, c-format msgid "could not create worker process: %s\n" msgstr "작업용 프로세스를 만들 수 없음: %s\n" -#: parallel.c:147 parallel.c:262 +#: parallel.c:146 parallel.c:259 #, c-format msgid "could not create worker thread: %s\n" msgstr "작업용 쓰레드를 만들 수 없음: %s\n" -#: parallel.c:305 +#: parallel.c:300 #, c-format msgid "waitpid() failed: %s\n" msgstr "waitpid() 실패: %s\n" -#: parallel.c:309 +#: parallel.c:304 #, c-format msgid "child process exited abnormally: status %d\n" msgstr "하위 작업자가 비정상 종료됨: 상태값 %d\n" -#: parallel.c:324 +#: parallel.c:319 #, c-format msgid "child worker exited abnormally: %s\n" msgstr "하위 작업자가 비정상 종료됨: %s\n" -#: pg_upgrade.c:109 +#: pg_upgrade.c:108 #, c-format msgid "could not read permissions of directory \"%s\": %s\n" msgstr "\"%s\" 디렉터리 읽기 권한 없음: %s\n" -#: pg_upgrade.c:126 +#: pg_upgrade.c:123 #, c-format msgid "" "\n" @@ -1436,17 +1451,17 @@ msgstr "" "업그레이드 진행 중\n" "------------------\n" -#: pg_upgrade.c:169 +#: pg_upgrade.c:166 #, c-format msgid "Setting next OID for new cluster" msgstr "새 클러스터용 다음 OID 설정 중" -#: pg_upgrade.c:176 +#: pg_upgrade.c:173 #, c-format msgid "Sync data directory to disk" msgstr "데이터 디렉터리 fsync 작업 중" -#: pg_upgrade.c:188 +#: pg_upgrade.c:185 #, c-format msgid "" "\n" @@ -1457,7 +1472,12 @@ msgstr "" "업그레이드 완료\n" "---------------\n" -#: pg_upgrade.c:234 +#: pg_upgrade.c:220 +#, c-format +msgid "%s: could not find own program executable\n" +msgstr "%s: 실행할 프로그램을 찾을 수 없습니다.\n" + +#: pg_upgrade.c:246 #, c-format msgid "" "There seems to be a postmaster servicing the old cluster.\n" @@ -1466,7 +1486,7 @@ msgstr "" "옛 서버가 현재 운영 되고 있습니다.\n" "먼저 서버를 중지하고 진행하세요.\n" -#: pg_upgrade.c:247 +#: pg_upgrade.c:259 #, c-format msgid "" "There seems to be a postmaster servicing the new cluster.\n" @@ -1475,138 +1495,133 @@ msgstr "" "새 서버가 현재 운영 되고 있습니다.\n" "먼저 서버를 중지하고 진행하세요.\n" -#: pg_upgrade.c:253 -#, c-format -msgid "%s: could not find own program executable\n" -msgstr "%s: 실행할 프로그램을 찾을 수 없습니다.\n" - -#: pg_upgrade.c:270 +#: pg_upgrade.c:273 #, c-format msgid "Analyzing all rows in the new cluster" msgstr "새 클러스터의 모든 로우에 대해서 통계 정보 수집 중" -#: pg_upgrade.c:283 +#: pg_upgrade.c:286 #, c-format msgid "Freezing all rows in the new cluster" msgstr "새 클러스터의 모든 로우에 대해서 영구 격리(freeze) 중" -#: pg_upgrade.c:303 +#: pg_upgrade.c:306 #, c-format msgid "Restoring global objects in the new cluster" msgstr "새 클러스터에 전역 객체를 복원 중" -#: pg_upgrade.c:318 +#: pg_upgrade.c:321 #, c-format msgid "Restoring database schemas in the new cluster\n" msgstr "새 클러스터에 데이터베이스 스키마 복원 중\n" -#: pg_upgrade.c:424 +#: pg_upgrade.c:425 #, c-format msgid "Deleting files from new %s" msgstr "새 %s에서 파일 지우는 중" -#: pg_upgrade.c:428 +#: pg_upgrade.c:429 #, c-format msgid "could not delete directory \"%s\"\n" msgstr "\"%s\" 디렉터리를 삭제 할 수 없음\n" -#: pg_upgrade.c:447 +#: pg_upgrade.c:448 #, c-format msgid "Copying old %s to new server" msgstr "옛 %s 객체를 새 서버로 복사 중" -#: pg_upgrade.c:474 +#: pg_upgrade.c:475 #, c-format msgid "Setting next transaction ID and epoch for new cluster" msgstr "새 클러스터용 다음 트랜잭션 ID와 epoch 값 설정 중" -#: pg_upgrade.c:504 +#: pg_upgrade.c:505 #, c-format msgid "Setting next multixact ID and offset for new cluster" msgstr "새 클러스터용 다음 멀티 트랜잭션 ID와 위치 값 설정 중" -#: pg_upgrade.c:528 +#: pg_upgrade.c:529 #, c-format msgid "Setting oldest multixact ID in new cluster" msgstr "새 클러스터용 제일 오래된 멀티 트랜잭션 ID 설정 중" -#: pg_upgrade.c:548 +#: pg_upgrade.c:549 #, c-format msgid "Resetting WAL archives" msgstr "WAL 아카이브 재설정 중" -#: pg_upgrade.c:591 +#: pg_upgrade.c:592 #, c-format msgid "Setting frozenxid and minmxid counters in new cluster" msgstr "새 클러스터에서 frozenxid, minmxid 값 설정 중" -#: pg_upgrade.c:593 +#: pg_upgrade.c:594 #, c-format msgid "Setting minmxid counter in new cluster" msgstr "새 클러스터에서 minmxid 값 설정 중" -#: relfilenode.c:36 +#: relfilenode.c:35 #, c-format msgid "Cloning user relation files\n" msgstr "사용자 릴레이션 파일 클론 중\n" -#: relfilenode.c:39 +#: relfilenode.c:38 #, c-format msgid "Copying user relation files\n" msgstr "사용자 릴레이션 파일 복사 중\n" -#: relfilenode.c:42 +#: relfilenode.c:41 #, c-format msgid "Linking user relation files\n" msgstr "사용자 릴레이션 파일 링크 중\n" -#: relfilenode.c:118 +#: relfilenode.c:115 #, c-format msgid "old database \"%s\" not found in the new cluster\n" msgstr "\"%s\" 이름의 옛 데이터베이스를 새 클러스터에서 찾을 수 없음\n" -#: relfilenode.c:239 +#: relfilenode.c:234 #, c-format msgid "" "error while checking for file existence \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "\"%s.%s\" (\"%s\" / \"%s\") 파일이 있는지 확인 도중 오류 발생: %s\n" -#: relfilenode.c:257 +#: relfilenode.c:252 #, c-format msgid "rewriting \"%s\" to \"%s\"\n" msgstr "\"%s\" 객체를 \"%s\" 객체로 다시 쓰는 중\n" -#: relfilenode.c:265 +#: relfilenode.c:260 #, c-format msgid "cloning \"%s\" to \"%s\"\n" msgstr "\"%s\" 객체를 \"%s\" 객체로 클론 중\n" -#: relfilenode.c:270 +#: relfilenode.c:265 #, c-format msgid "copying \"%s\" to \"%s\"\n" msgstr "\"%s\" 객체를 \"%s\" 객체로 복사 중\n" -#: relfilenode.c:275 +#: relfilenode.c:270 #, c-format msgid "linking \"%s\" to \"%s\"\n" msgstr "\"%s\" 객체를 \"%s\" 객체로 링크 중\n" -#: server.c:34 +#: server.c:33 #, c-format msgid "connection to database failed: %s" msgstr "데이터베이스 연결 실패: %s" -#: server.c:40 server.c:142 util.c:136 util.c:166 +#: server.c:39 server.c:141 util.c:135 util.c:165 #, c-format msgid "Failure, exiting\n" msgstr "실패, 종료함\n" -#: server.c:132 +#: server.c:131 #, c-format msgid "executing: %s\n" msgstr "실행중: %s\n" -#: server.c:138 +#: server.c:137 #, c-format msgid "" "SQL command failed\n" @@ -1617,17 +1632,17 @@ msgstr "" "%s\n" "%s" -#: server.c:168 +#: server.c:167 #, c-format -msgid "could not open version file: %s\n" -msgstr "버전 파일 열기 실패: %s\n" +msgid "could not open version file \"%s\": %m\n" +msgstr "\"%s\" 버전 파일 열기 실패: %m\n" -#: server.c:172 +#: server.c:171 #, c-format -msgid "could not parse PG_VERSION file from %s\n" -msgstr "\"%s\" 파일에서 PG_VERSION을 해석할 수 없음\n" +msgid "could not parse version file \"%s\"\n" +msgstr "\"%s\" 버전 파일 구문 분석 실패\n" -#: server.c:295 +#: server.c:297 #, c-format msgid "" "\n" @@ -1636,7 +1651,7 @@ msgstr "" "\n" "데이터베이스 연결 실패: %s" -#: server.c:300 +#: server.c:302 #, c-format msgid "" "could not connect to source postmaster started with the command:\n" @@ -1645,7 +1660,7 @@ msgstr "" "다음 명령으로 실행된 원본 서버로 접속할 수 없음:\n" "%s\n" -#: server.c:304 +#: server.c:306 #, c-format msgid "" "could not connect to target postmaster started with the command:\n" @@ -1654,22 +1669,22 @@ msgstr "" "다음 명령으로 실행된 대상 서버로 접속할 수 없음:\n" "%s\n" -#: server.c:318 +#: server.c:320 #, c-format msgid "pg_ctl failed to start the source server, or connection failed\n" msgstr "원본 서버를 실행하는 pg_ctl 작업 실패, 또는 연결 실패\n" -#: server.c:320 +#: server.c:322 #, c-format msgid "pg_ctl failed to start the target server, or connection failed\n" msgstr "대상 서버를 실행하는 pg_ctl 작업 실패, 또는 연결 실패\n" -#: server.c:365 +#: server.c:367 #, c-format msgid "out of memory\n" msgstr "메모리 부족\n" -#: server.c:378 +#: server.c:380 #, c-format msgid "libpq environment variable %s has a non-local server value: %s\n" msgstr "%s libpq 환경 변수가 로컬 서버 값이 아님: %s\n" @@ -1683,47 +1698,47 @@ msgstr "" "사용자 정의 테이블스페이스를 사용하는 경우 같은 시스템 카탈로그 버전으로\n" "업그레이드 작업을 진행할 수 없습니다.\n" -#: tablespace.c:87 +#: tablespace.c:86 #, c-format msgid "tablespace directory \"%s\" does not exist\n" msgstr "\"%s\" 이름의 테이블스페이스 디렉터리가 없음\n" -#: tablespace.c:91 +#: tablespace.c:90 #, c-format msgid "could not stat tablespace directory \"%s\": %s\n" msgstr "\"%s\" 테이블스페이스 디렉터리의 상태 정보를 구할 수 없음: %s\n" -#: tablespace.c:96 +#: tablespace.c:95 #, c-format msgid "tablespace path \"%s\" is not a directory\n" msgstr "\"%s\" 테이블스페이스 경로는 디렉터리가 아님\n" -#: util.c:50 +#: util.c:49 #, c-format msgid " " msgstr " " -#: util.c:83 +#: util.c:82 #, c-format msgid "%-*s" msgstr "%-*s" -#: util.c:175 +#: util.c:174 #, c-format msgid "ok" msgstr "ok" -#: version.c:32 +#: version.c:29 #, c-format msgid "Checking for large objects" msgstr "대형 객체 확인 중" -#: version.c:80 version.c:387 +#: version.c:77 version.c:384 #, c-format msgid "warning" msgstr "경고" -#: version.c:82 +#: version.c:79 #, c-format msgid "" "\n" @@ -1740,7 +1755,7 @@ msgstr "" "다.\n" "\n" -#: version.c:88 +#: version.c:85 #, c-format msgid "" "\n" @@ -1761,12 +1776,12 @@ msgstr "" "실행 하세요.\n" "\n" -#: version.c:242 +#: version.c:239 #, c-format msgid "Checking for incompatible \"line\" data type" msgstr "\"line\" 자료형 호환성 확인 중" -#: version.c:249 +#: version.c:246 #, c-format msgid "" "Your installation contains the \"line\" data type in user tables. This\n" @@ -1784,12 +1799,12 @@ msgstr "" " %s\n" "\n" -#: version.c:279 +#: version.c:276 #, c-format msgid "Checking for invalid \"unknown\" user columns" msgstr "잘못된 \"unknown\" 사용자 칼럼을 확인 중" -#: version.c:286 +#: version.c:283 #, c-format msgid "" "Your installation contains the \"unknown\" data type in user tables. This\n" @@ -1806,12 +1821,12 @@ msgstr "" " %s\n" "\n" -#: version.c:309 +#: version.c:306 #, c-format msgid "Checking for hash indexes" msgstr "해쉬 인덱스 확인 중" -#: version.c:389 +#: version.c:386 #, c-format msgid "" "\n" @@ -1828,7 +1843,7 @@ msgstr "" "REINDEX 명령으로 다시 만들어야 합니다.\n" "\n" -#: version.c:395 +#: version.c:392 #, c-format msgid "" "\n" @@ -1849,12 +1864,12 @@ msgstr "" "이 작업이 있기 전까지는 해당 인덱스는 invalid 상태로 사용할 수 없게 됩니다.\n" "\n" -#: version.c:421 +#: version.c:418 #, c-format msgid "Checking for invalid \"sql_identifier\" user columns" msgstr "잘못된 \"sql_identifier\" 사용자 칼럼을 확인 중" -#: version.c:429 +#: version.c:426 #, c-format msgid "" "Your installation contains the \"sql_identifier\" data type in user tables\n" diff --git a/src/bin/pg_upgrade/po/ru.po b/src/bin/pg_upgrade/po/ru.po index 99432a667a668..fbb84a3b37593 100644 --- a/src/bin/pg_upgrade/po/ru.po +++ b/src/bin/pg_upgrade/po/ru.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-05 11:03+0300\n" -"PO-Revision-Date: 2020-02-06 13:11+0300\n" +"POT-Creation-Date: 2020-11-09 07:34+0300\n" +"PO-Revision-Date: 2020-11-09 08:34+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -35,7 +35,7 @@ msgstr "" "Проведение проверок целостности\n" "-------------------------------\n" -#: check.c:191 +#: check.c:193 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "*Кластеры совместимы*\n" -#: check.c:197 +#: check.c:199 #, c-format msgid "" "\n" @@ -69,20 +69,7 @@ msgstr "" " %s\n" "\n" -#: check.c:238 -#, c-format -msgid "" -"Optimizer statistics and free space information are not transferred\n" -"by pg_upgrade so, once you start the new server, consider running:\n" -" %s\n" -"\n" -msgstr "" -"Статистика оптимизатора и сведения о свободном месте утилитой pg_upgrade\n" -"не переносятся, поэтому, запустив новый сервер, имеет смысл выполнить:\n" -" %s\n" -"\n" - -#: check.c:245 +#: check.c:239 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -91,7 +78,7 @@ msgstr "" "При запуске этого скрипта будут удалены файлы данных старого кластера:\n" " %s\n" -#: check.c:250 +#: check.c:244 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -104,24 +91,24 @@ msgstr "" "пространства или каталог данных нового кластера.\n" "Содержимое старого кластера нужно будет удалить вручную.\n" -#: check.c:260 +#: check.c:254 #, c-format msgid "Checking cluster versions" msgstr "Проверка версий кластеров" -#: check.c:272 +#: check.c:266 #, c-format msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" msgstr "" "Эта утилита может производить обновление только с версии PostgreSQL 8.4 и " "новее.\n" -#: check.c:276 +#: check.c:270 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Эта утилита может только повышать версию PostgreSQL до %s.\n" -#: check.c:285 +#: check.c:279 #, c-format msgid "" "This utility cannot be used to downgrade to older major PostgreSQL " @@ -130,7 +117,7 @@ msgstr "" "Эта утилита не может понижать версию до более старой основной версии " "PostgreSQL.\n" -#: check.c:290 +#: check.c:284 #, c-format msgid "" "Old cluster data and binary directories are from different major versions.\n" @@ -138,7 +125,7 @@ msgstr "" "Каталоги данных и исполняемых файлов старого кластера относятся к разным " "основным версиям.\n" -#: check.c:293 +#: check.c:287 #, c-format msgid "" "New cluster data and binary directories are from different major versions.\n" @@ -146,7 +133,7 @@ msgstr "" "Каталоги данных и исполняемых файлов нового кластера относятся к разным " "основным версиям.\n" -#: check.c:310 +#: check.c:304 #, c-format msgid "" "When checking a pre-PG 9.1 live old server, you must specify the old " @@ -155,7 +142,7 @@ msgstr "" "Для проверки старого работающего сервера версии до 9.1 необходимо указать " "номер порта этого сервера.\n" -#: check.c:314 +#: check.c:308 #, c-format msgid "" "When checking a live server, the old and new port numbers must be " @@ -164,14 +151,14 @@ msgstr "" "Для проверки работающего сервера новый номер порта должен отличаться от " "старого.\n" -#: check.c:329 +#: check.c:323 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "" "кодировки в базе данных \"%s\" различаются: старая - \"%s\", новая - \"%s" "\"\n" -#: check.c:334 +#: check.c:328 #, c-format msgid "" "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" @@ -179,7 +166,7 @@ msgstr "" "значения lc_collate в базе данных \"%s\" различаются: старое - \"%s\", " "новое - \"%s\"\n" -#: check.c:337 +#: check.c:331 #, c-format msgid "" "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" @@ -187,30 +174,41 @@ msgstr "" "значения lc_ctype в базе данных \"%s\" различаются: старое - \"%s\", новое " "- \"%s\"\n" -#: check.c:410 +#: check.c:404 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "" "Новая база данных кластера \"%s\" не пустая: найдено отношение \"%s.%s\"\n" -#: check.c:459 +#: check.c:453 #, c-format msgid "Creating script to analyze new cluster" msgstr "Создание скрипта для анализа нового кластера" -#: check.c:473 check.c:601 check.c:865 check.c:944 check.c:1053 check.c:1144 -#: file.c:341 function.c:246 option.c:495 version.c:57 version.c:202 -#: version.c:344 +#: check.c:467 check.c:626 check.c:890 check.c:969 check.c:1079 check.c:1170 +#: file.c:336 function.c:240 option.c:497 version.c:54 version.c:199 +#: version.c:341 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "не удалось открыть файл \"%s\": %s\n" -#: check.c:528 check.c:657 +#: check.c:515 check.c:682 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "не удалось добавить право выполнения для файла \"%s\": %s\n" -#: check.c:564 +#: check.c:545 +#, c-format +msgid "Checking for new cluster tablespace directories" +msgstr "Проверка каталогов табличных пространств в новом кластере" + +#: check.c:556 +#, c-format +msgid "new cluster tablespace directory already exists: \"%s\"\n" +msgstr "" +"каталог табличного пространства в новом кластере уже существует: \"%s\"\n" + +#: check.c:589 #, c-format msgid "" "\n" @@ -221,7 +219,7 @@ msgstr "" "ПРЕДУПРЕЖДЕНИЕ: новый каталог данных не должен располагаться внутри старого " "каталога данных, то есть, в %s\n" -#: check.c:588 +#: check.c:613 #, c-format msgid "" "\n" @@ -232,37 +230,37 @@ msgstr "" "ПРЕДУПРЕЖДЕНИЕ: пользовательские табличные пространства не должны " "располагаться внутри каталога данных, то есть, в %s\n" -#: check.c:598 +#: check.c:623 #, c-format msgid "Creating script to delete old cluster" msgstr "Создание скрипта для удаления старого кластера" -#: check.c:677 +#: check.c:702 #, c-format msgid "Checking database user is the install user" msgstr "Проверка, является ли пользователь БД стартовым пользователем" -#: check.c:693 +#: check.c:718 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "пользователь БД \"%s\" не является стартовым пользователем\n" -#: check.c:704 +#: check.c:729 #, c-format msgid "could not determine the number of users\n" msgstr "не удалось определить количество пользователей\n" -#: check.c:712 +#: check.c:737 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "В новом кластере может быть определён только стартовый пользователь.\n" -#: check.c:732 +#: check.c:757 #, c-format msgid "Checking database connection settings" msgstr "Проверка параметров подключения к базе данных" -#: check.c:754 +#: check.c:779 #, c-format msgid "" "template0 must not allow connections, i.e. its pg_database.datallowconn must " @@ -271,7 +269,7 @@ msgstr "" "База template0 не должна допускать подключения, то есть её свойство " "pg_database.datallowconn должно быть false\n" -#: check.c:764 +#: check.c:789 #, c-format msgid "" "All non-template0 databases must allow connections, i.e. their pg_database." @@ -280,41 +278,41 @@ msgstr "" "Все базы, кроме template0, должны допускать подключения, то есть их свойство " "pg_database.datallowconn должно быть true\n" -#: check.c:789 +#: check.c:814 #, c-format msgid "Checking for prepared transactions" msgstr "Проверка наличия подготовленных транзакций" -#: check.c:798 +#: check.c:823 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "Исходный кластер содержит подготовленные транзакции\n" -#: check.c:800 +#: check.c:825 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "Целевой кластер содержит подготовленные транзакции\n" -#: check.c:826 +#: check.c:851 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Проверка несоответствия при передаче bigint в contrib/isn" -#: check.c:887 check.c:966 check.c:1076 check.c:1167 function.c:268 -#: version.c:248 version.c:285 version.c:428 +#: check.c:912 check.c:991 check.c:1102 check.c:1193 function.c:262 +#: version.c:245 version.c:282 version.c:425 #, c-format msgid "fatal\n" msgstr "сбой\n" -#: check.c:888 +#: check.c:913 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" "bigint data type. Your old and new clusters pass bigint values\n" "differently so this cluster cannot currently be upgraded. You can\n" -"manually upgrade databases that use \"contrib/isn\" facilities and remove\n" -"\"contrib/isn\" from the old cluster and restart the upgrade. A list of\n" -"the problem functions is in the file:\n" +"manually dump databases in the old cluster that use \"contrib/isn\"\n" +"facilities, drop them, perform the upgrade, and then restore them. A\n" +"list of the problem functions is in the file:\n" " %s\n" "\n" msgstr "" @@ -322,51 +320,50 @@ msgstr "" "biging.\n" "Однако в новом кластере значения bigint передаётся не так, как в старом,\n" "так что обновление кластера в текущем состоянии невозможно. Вы можете\n" -"вручную обновить базы данных, где используется функциональность \"contrib/isn" -"\" или\n" -"удалить \"contrib/isn\" из старого кластера и перезапустить обновление. " +"вручную выгрузить базы данных, где используется функциональность \"contrib/" +"isn\",\n" +"или удалить \"contrib/isn\" из старого кластера и перезапустить обновление. " "Список\n" "проблемных функций приведён в файле:\n" " %s\n" "\n" -#: check.c:912 +#: check.c:937 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Проверка таблиц со свойством WITH OIDS" -#: check.c:967 +#: check.c:992 #, c-format msgid "" -"Your installation contains tables declared WITH OIDS, which is not " -"supported\n" -"anymore. Consider removing the oid column using\n" +"Your installation contains tables declared WITH OIDS, which is not\n" +"supported anymore. Consider removing the oid column using\n" " ALTER TABLE ... SET WITHOUT OIDS;\n" "A list of tables with the problem is in the file:\n" " %s\n" "\n" msgstr "" "В вашей инсталляции содержатся таблицы со свойством WITH OIDS, которое " -"теперь не поддерживается. Отказаться от использования столбцов oid можно " -"так:\n" +"теперь\n" +"не поддерживается. Отказаться от использования столбцов oid можно так:\n" " ALTER TABLE ... SET WITHOUT OIDS;\n" "Список проблемных таблиц приведён в файле:\n" " %s\n" "\n" -#: check.c:997 +#: check.c:1022 #, c-format msgid "Checking for reg* data types in user tables" msgstr "Проверка типов данных reg* в пользовательских таблицах" -#: check.c:1077 +#: check.c:1103 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" "These data types reference system OIDs that are not preserved by\n" "pg_upgrade, so this cluster cannot currently be upgraded. You can\n" -"remove the problem tables and restart the upgrade. A list of the problem\n" -"columns is in the file:\n" +"remove the problem tables and restart the upgrade. A list of the\n" +"problem columns is in the file:\n" " %s\n" "\n" msgstr "" @@ -379,20 +376,19 @@ msgstr "" " %s\n" "\n" -#: check.c:1102 +#: check.c:1128 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Проверка несовместимого типа данных \"jsonb\"" -#: check.c:1168 +#: check.c:1194 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" -"The internal format of \"jsonb\" changed during 9.4 beta so this cluster " -"cannot currently\n" -"be upgraded. You can remove the problem tables and restart the upgrade. A " -"list\n" -"of the problem columns is in the file:\n" +"The internal format of \"jsonb\" changed during 9.4 beta so this\n" +"cluster cannot currently be upgraded. You can remove the problem\n" +"tables and restart the upgrade. A list of the problem columns is\n" +"in the file:\n" " %s\n" "\n" msgstr "" @@ -404,32 +400,32 @@ msgstr "" " %s\n" "\n" -#: check.c:1189 +#: check.c:1216 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Проверка ролей с именами, начинающимися с \"pg_\"" -#: check.c:1199 +#: check.c:1226 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "В исходном кластере есть роли, имена которых начинаются с \"pg_\"\n" -#: check.c:1201 +#: check.c:1228 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "В целевом кластере есть роли, имена которых начинаются с \"pg_\"\n" -#: check.c:1227 +#: check.c:1254 #, c-format msgid "failed to get the current locale\n" msgstr "не удалось получить текущую локаль\n" -#: check.c:1236 +#: check.c:1263 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "не удалось получить системное имя локали для \"%s\"\n" -#: check.c:1242 +#: check.c:1269 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "не удалось восстановить старую локаль \"%s\"\n" @@ -484,8 +480,8 @@ msgstr "В исходном кластере не хватает информа msgid "The target cluster lacks cluster state information:\n" msgstr "В целевом кластере не хватает информации о состоянии кластера:\n" -#: controldata.c:208 dump.c:51 pg_upgrade.c:336 pg_upgrade.c:373 -#: relfilenode.c:252 util.c:80 +#: controldata.c:208 dump.c:49 pg_upgrade.c:339 pg_upgrade.c:375 +#: relfilenode.c:243 util.c:79 #, c-format msgid "%s" msgstr "%s" @@ -747,12 +743,12 @@ msgstr "" "после того, как будет запущен новый, не гарантируется.\n" "\n" -#: dump.c:22 +#: dump.c:20 #, c-format msgid "Creating dump of global objects" msgstr "Формирование выгрузки глобальных объектов" -#: dump.c:33 +#: dump.c:31 #, c-format msgid "Creating dump of database schemas\n" msgstr "Формирование выгрузки схем базы данных\n" @@ -772,12 +768,12 @@ msgstr "не удалось получить версию pg_ctl из резул msgid "command too long\n" msgstr "команда слишком длинная\n" -#: exec.c:110 util.c:38 util.c:226 +#: exec.c:110 util.c:37 util.c:225 #, c-format msgid "%s\n" msgstr "%s\n" -#: exec.c:149 option.c:220 +#: exec.c:149 option.c:217 #, c-format msgid "could not open log file \"%s\": %m\n" msgstr "не удалось открыть файл протокола \"%s\": %m\n" @@ -814,7 +810,7 @@ msgstr "" "Чтобы понять причину ошибки, просмотрите последние несколько строк\n" "файла \"%s\".\n" -#: exec.c:204 option.c:229 +#: exec.c:204 option.c:226 #, c-format msgid "could not write to log file \"%s\": %m\n" msgstr "не удалось записать в файл протокола \"%s\": %m\n" @@ -829,7 +825,7 @@ msgstr "не удалось открыть файл \"%s\" для чтения: msgid "You must have read and write access in the current directory.\n" msgstr "У вас должны быть права на чтение и запись в текущем каталоге.\n" -#: exec.c:310 exec.c:372 exec.c:427 +#: exec.c:310 exec.c:372 exec.c:436 #, c-format msgid "check for \"%s\" failed: %s\n" msgstr "проверка существования \"%s\" не пройдена: %s\n" @@ -839,29 +835,29 @@ msgstr "проверка существования \"%s\" не пройдена msgid "\"%s\" is not a directory\n" msgstr "\"%s\" не является каталогом\n" -#: exec.c:430 +#: exec.c:439 #, c-format msgid "check for \"%s\" failed: not a regular file\n" msgstr "проверка файла \"%s\" не пройдена: это не обычный файл\n" -#: exec.c:442 +#: exec.c:451 #, c-format msgid "check for \"%s\" failed: cannot read file (permission denied)\n" msgstr "" "проверка файла \"%s\" не пройдена: не удаётся прочитать файл (нет доступа)\n" -#: exec.c:450 +#: exec.c:459 #, c-format msgid "check for \"%s\" failed: cannot execute (permission denied)\n" msgstr "" "проверка файла \"%s\" не пройдена: выполнение невозможно (нет доступа)\n" -#: file.c:48 file.c:66 +#: file.c:43 file.c:61 #, c-format msgid "error while cloning relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "ошибка при клонировании отношения \"%s.%s\" (из \"%s\" в \"%s\"): %s\n" -#: file.c:55 +#: file.c:50 #, c-format msgid "" "error while cloning relation \"%s.%s\": could not open file \"%s\": %s\n" @@ -869,7 +865,7 @@ msgstr "" "ошибка при клонировании отношения \"%s.%s\": не удалось открыть файл \"%s\": " "%s\n" -#: file.c:60 +#: file.c:55 #, c-format msgid "" "error while cloning relation \"%s.%s\": could not create file \"%s\": %s\n" @@ -877,7 +873,7 @@ msgstr "" "ошибка при клонировании отношения \"%s.%s\": не удалось создать файл \"%s\": " "%s\n" -#: file.c:92 file.c:195 +#: file.c:87 file.c:190 #, c-format msgid "" "error while copying relation \"%s.%s\": could not open file \"%s\": %s\n" @@ -885,7 +881,7 @@ msgstr "" "ошибка при копировании отношения \"%s.%s\": не удалось открыть файл \"%s\": " "%s\n" -#: file.c:97 file.c:204 +#: file.c:92 file.c:199 #, c-format msgid "" "error while copying relation \"%s.%s\": could not create file \"%s\": %s\n" @@ -893,7 +889,7 @@ msgstr "" "ошибка при копировании отношения \"%s.%s\": не удалось создать файл \"%s\": " "%s\n" -#: file.c:111 file.c:228 +#: file.c:106 file.c:223 #, c-format msgid "" "error while copying relation \"%s.%s\": could not read file \"%s\": %s\n" @@ -901,7 +897,7 @@ msgstr "" "ошибка при копировании отношения \"%s.%s\": не удалось прочитать файл \"%s" "\": %s\n" -#: file.c:123 file.c:306 +#: file.c:118 file.c:301 #, c-format msgid "" "error while copying relation \"%s.%s\": could not write file \"%s\": %s\n" @@ -909,19 +905,19 @@ msgstr "" "ошибка при копировании отношения \"%s.%s\": не удалось записать в файл \"%s" "\": %s\n" -#: file.c:137 +#: file.c:132 #, c-format msgid "error while copying relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "ошибка при копировании отношения \"%s.%s\" (из \"%s\" в \"%s\"): %s\n" -#: file.c:156 +#: file.c:151 #, c-format msgid "" "error while creating link for relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "" "ошибка при создании ссылки для отношения \"%s.%s\" (из \"%s\" в \"%s\"): %s\n" -#: file.c:199 +#: file.c:194 #, c-format msgid "" "error while copying relation \"%s.%s\": could not stat file \"%s\": %s\n" @@ -929,7 +925,7 @@ msgstr "" "ошибка при копировании отношения \"%s.%s\": не удалось получить информацию о " "файле \"%s\": %s\n" -#: file.c:231 +#: file.c:226 #, c-format msgid "" "error while copying relation \"%s.%s\": partial page found in file \"%s\"\n" @@ -937,22 +933,22 @@ msgstr "" "ошибка при копировании отношения \"%s.%s\": в файле \"%s\" обнаружена " "неполная страница\n" -#: file.c:333 file.c:350 +#: file.c:328 file.c:345 #, c-format msgid "could not clone file between old and new data directories: %s\n" msgstr "не удалось клонировать файл из старого каталога данных в новый: %s\n" -#: file.c:346 +#: file.c:341 #, c-format msgid "could not create file \"%s\": %s\n" msgstr "не удалось создать файл \"%s\": %s\n" -#: file.c:357 +#: file.c:352 #, c-format msgid "file cloning not supported on this platform\n" msgstr "клонирование файлов не поддерживается в этой ОС\n" -#: file.c:374 +#: file.c:369 #, c-format msgid "" "could not create hard link between old and new data directories: %s\n" @@ -964,7 +960,7 @@ msgstr "" "В режиме \"ссылок\" старый и новый каталоги данных должны находиться в одной " "файловой системе.\n" -#: function.c:116 +#: function.c:114 #, c-format msgid "" "\n" @@ -1006,32 +1002,32 @@ msgstr "" "в каждой затронутой базе данных:\n" "\n" -#: function.c:134 +#: function.c:132 #, c-format msgid " %s\n" msgstr " %s\n" -#: function.c:144 +#: function.c:142 #, c-format msgid "Remove the problem functions from the old cluster to continue.\n" msgstr "Удалите проблемные функции из старого кластера для продолжения.\n" -#: function.c:191 +#: function.c:189 #, c-format msgid "Checking for presence of required libraries" msgstr "Проверка наличия требуемых библиотек" -#: function.c:248 +#: function.c:242 #, c-format msgid "could not load library \"%s\": %s" msgstr "загрузить библиотеку \"%s\" не удалось: %s" -#: function.c:259 info.c:633 +#: function.c:253 #, c-format -msgid "Database: %s\n" -msgstr "База данных: %s\n" +msgid "In database: %s\n" +msgstr "В базе данных: %s\n" -#: function.c:269 +#: function.c:263 #, c-format msgid "" "Your installation references loadable libraries that are missing from the\n" @@ -1048,7 +1044,7 @@ msgstr "" " %s\n" "\n" -#: info.c:133 +#: info.c:131 #, c-format msgid "" "Relation names for OID %u in database \"%s\" do not match: old name \"%s.%s" @@ -1057,32 +1053,32 @@ msgstr "" "Имена отношения с OID %u в базе данных \"%s\" различаются: старое имя - \"%s." "%s\", новое - \"%s.%s\"\n" -#: info.c:153 +#: info.c:151 #, c-format msgid "Failed to match up old and new tables in database \"%s\"\n" msgstr "Не удалось сопоставить старые таблицы с новыми в базе данных \"%s\"\n" -#: info.c:242 +#: info.c:240 #, c-format msgid " which is an index on \"%s.%s\"" msgstr " это индекс в \"%s.%s\"" -#: info.c:252 +#: info.c:250 #, c-format msgid " which is an index on OID %u" msgstr " это индекс в отношении с OID %u" -#: info.c:264 +#: info.c:262 #, c-format msgid " which is the TOAST table for \"%s.%s\"" msgstr " это TOAST-таблица для \"%s.%s\"" -#: info.c:272 +#: info.c:270 #, c-format msgid " which is the TOAST table for OID %u" msgstr " это TOAST-таблица для отношения с OID %u" -#: info.c:276 +#: info.c:274 #, c-format msgid "" "No match found in old cluster for new relation with OID %u in database \"%s" @@ -1091,7 +1087,7 @@ msgstr "" "В старом кластере не нашлось соответствия для нового отношения с OID %u в " "базе данных \"%s\": %s\n" -#: info.c:279 +#: info.c:277 #, c-format msgid "" "No match found in new cluster for old relation with OID %u in database \"%s" @@ -1100,17 +1096,17 @@ msgstr "" "В новом кластере не нашлось соответствия для старого отношения с OID %u в " "базе данных \"%s\": %s\n" -#: info.c:291 +#: info.c:289 #, c-format msgid "mappings for database \"%s\":\n" msgstr "отображения для базы данных \"%s\":\n" -#: info.c:294 +#: info.c:292 #, c-format msgid "%s.%s: %u to %u\n" msgstr "%s.%s: %u в %u\n" -#: info.c:299 info.c:635 +#: info.c:297 info.c:633 #, c-format msgid "" "\n" @@ -1119,7 +1115,7 @@ msgstr "" "\n" "\n" -#: info.c:324 +#: info.c:322 #, c-format msgid "" "\n" @@ -1128,7 +1124,7 @@ msgstr "" "\n" "исходные базы данных:\n" -#: info.c:326 +#: info.c:324 #, c-format msgid "" "\n" @@ -1137,7 +1133,12 @@ msgstr "" "\n" "целевые базы данных:\n" -#: info.c:646 +#: info.c:631 +#, c-format +msgid "Database: %s\n" +msgstr "База данных: %s\n" + +#: info.c:644 #, c-format msgid "relname: %s.%s: reloid: %u reltblspace: %s\n" msgstr "имя_отношения: %s.%s: oid_отношения: %u табл_пространство: %s\n" @@ -1147,52 +1148,57 @@ msgstr "имя_отношения: %s.%s: oid_отношения: %u табл_п msgid "%s: cannot be run as root\n" msgstr "%s: программу не должен запускать root\n" -#: option.c:171 +#: option.c:170 #, c-format msgid "invalid old port number\n" msgstr "неверный старый номер порта\n" -#: option.c:179 +#: option.c:175 #, c-format msgid "invalid new port number\n" msgstr "неверный новый номер порта\n" -#: option.c:213 +#: option.c:207 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: option.c:223 +#: option.c:214 +#, c-format +msgid "too many command-line arguments (first is \"%s\")\n" +msgstr "слишком много аргументов командной строки (первый: \"%s\")\n" + +#: option.c:220 #, c-format msgid "Running in verbose mode\n" msgstr "Программа запущена в режиме подробных сообщений\n" -#: option.c:254 +#: option.c:251 msgid "old cluster binaries reside" msgstr "расположение исполняемых файлов старого кластера" -#: option.c:256 +#: option.c:253 msgid "new cluster binaries reside" msgstr "расположение исполняемых файлов нового кластера" -#: option.c:258 +#: option.c:255 msgid "old cluster data resides" msgstr "расположение данных старого кластера" -#: option.c:260 +#: option.c:257 msgid "new cluster data resides" msgstr "расположение данных нового кластера" -#: option.c:262 +#: option.c:259 msgid "sockets will be created" msgstr "расположение сокетов" -#: option.c:279 option.c:373 +#: option.c:276 option.c:374 #, c-format msgid "could not determine current directory\n" msgstr "не удалось определить текущий каталог\n" -#: option.c:282 +#: option.c:279 #, c-format msgid "" "cannot run pg_upgrade from inside the new cluster data directory on Windows\n" @@ -1200,7 +1206,7 @@ msgstr "" "в Windows нельзя запустить pg_upgrade внутри каталога данных нового " "кластера\n" -#: option.c:291 +#: option.c:288 #, c-format msgid "" "pg_upgrade upgrades a PostgreSQL cluster to a different major version.\n" @@ -1209,12 +1215,12 @@ msgstr "" "pg_upgrade обновляет кластер PostgreSQL до другой основной версии.\n" "\n" -#: option.c:292 +#: option.c:289 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: option.c:293 +#: option.c:290 #, c-format msgid "" " pg_upgrade [OPTION]...\n" @@ -1223,24 +1229,27 @@ msgstr "" " pg_upgrade [ПАРАМЕТР]...\n" "\n" -#: option.c:294 +#: option.c:291 #, c-format msgid "Options:\n" msgstr "Параметры:\n" -#: option.c:295 +#: option.c:292 #, c-format msgid " -b, --old-bindir=BINDIR old cluster executable directory\n" msgstr "" " -b, --old-bindir=КАТ_BIN каталог исполняемых файлов старого кластера\n" -#: option.c:296 +#: option.c:293 #, c-format -msgid " -B, --new-bindir=BINDIR new cluster executable directory\n" +msgid "" +" -B, --new-bindir=BINDIR new cluster executable directory (default\n" +" same directory as pg_upgrade)\n" msgstr "" " -B, --new-bindir=КАТ_BIN каталог исполняемых файлов нового кластера\n" +" (по умолчанию каталог программы pg_upgrade)\n" -#: option.c:297 +#: option.c:295 #, c-format msgid "" " -c, --check check clusters only, don't change any data\n" @@ -1248,27 +1257,27 @@ msgstr "" " -c, --check только проверить кластеры, не меняя никакие " "данные\n" -#: option.c:298 +#: option.c:296 #, c-format msgid " -d, --old-datadir=DATADIR old cluster data directory\n" msgstr " -d, --old-datadir=КАТ_DATA каталог данных старого кластера\n" -#: option.c:299 +#: option.c:297 #, c-format msgid " -D, --new-datadir=DATADIR new cluster data directory\n" msgstr " -D, --new-datadir=КАТ_DATA каталог данных нового кластера\n" -#: option.c:300 +#: option.c:298 #, c-format msgid "" -" -j, --jobs number of simultaneous processes or threads " +" -j, --jobs=NUM number of simultaneous processes or threads " "to use\n" msgstr "" -" -j, --jobs число одновременно используемых процессов " +" -j, --jobs=ЧИСЛО число одновременно используемых процессов " "или\n" " потоков\n" -#: option.c:301 +#: option.c:299 #, c-format msgid "" " -k, --link link instead of copying files to new " @@ -1278,7 +1287,7 @@ msgstr "" "файлов\n" " в новый кластер\n" -#: option.c:302 +#: option.c:300 #, c-format msgid "" " -o, --old-options=OPTIONS old cluster options to pass to the server\n" @@ -1286,7 +1295,7 @@ msgstr "" " -o, --old-options=ПАРАМЕТРЫ параметры старого кластера, передаваемые " "серверу\n" -#: option.c:303 +#: option.c:301 #, c-format msgid "" " -O, --new-options=OPTIONS new cluster options to pass to the server\n" @@ -1294,21 +1303,21 @@ msgstr "" " -O, --new-options=ПАРАМЕТРЫ параметры нового кластера, передаваемые " "серверу\n" -#: option.c:304 +#: option.c:302 #, c-format msgid " -p, --old-port=PORT old cluster port number (default %d)\n" msgstr "" " -p, --old-port=ПОРТ номер порта старого кластера (по умолчанию " "%d)\n" -#: option.c:305 +#: option.c:303 #, c-format msgid " -P, --new-port=PORT new cluster port number (default %d)\n" msgstr "" " -P, --new-port=ПОРТ номер порта нового кластера (по умолчанию " "%d)\n" -#: option.c:306 +#: option.c:304 #, c-format msgid "" " -r, --retain retain SQL and log files after success\n" @@ -1316,7 +1325,7 @@ msgstr "" " -r, --retain сохранить файлы журналов и SQL в случае " "успеха\n" -#: option.c:307 +#: option.c:305 #, c-format msgid "" " -s, --socketdir=DIR socket directory to use (default current " @@ -1324,27 +1333,27 @@ msgid "" msgstr "" " -s, --socketdir=КАТАЛОГ каталог сокетов (по умолчанию текущий)\n" -#: option.c:308 +#: option.c:306 #, c-format msgid " -U, --username=NAME cluster superuser (default \"%s\")\n" msgstr "" " -U, --username=ИМЯ суперпользователь кластера (по умолчанию \"%s" "\")\n" -#: option.c:309 +#: option.c:307 #, c-format msgid " -v, --verbose enable verbose internal logging\n" msgstr "" " -v, --verbose включить вывод подробных внутренних " "сообщений\n" -#: option.c:310 +#: option.c:308 #, c-format msgid "" " -V, --version display version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: option.c:311 +#: option.c:309 #, c-format msgid "" " --clone clone instead of copying files to new " @@ -1353,12 +1362,12 @@ msgstr "" " --clone клонировать, а не копировать файлы в новый " "кластер\n" -#: option.c:312 +#: option.c:310 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: option.c:313 +#: option.c:311 #, c-format msgid "" "\n" @@ -1373,7 +1382,7 @@ msgstr "" " остановить процесс postmaster, обслуживающий старый кластер\n" " остановить процесс postmaster, обслуживающий новый кластер\n" -#: option.c:318 +#: option.c:316 #, c-format msgid "" "\n" @@ -1390,7 +1399,7 @@ msgstr "" " путь к каталогу \"bin\" старой версии (-b КАТ_BIN)\n" " путь к каталогу \"bin\" новой версии (-B КАТ_BIN)\n" -#: option.c:324 +#: option.c:322 #, c-format msgid "" "\n" @@ -1405,7 +1414,7 @@ msgstr "" "bin -B новый_кластер/bin\n" "или\n" -#: option.c:329 +#: option.c:327 #, c-format msgid "" " $ export PGDATAOLD=oldCluster/data\n" @@ -1420,7 +1429,7 @@ msgstr "" " $ export PGBINNEW=новый_кластер/bin\n" " $ pg_upgrade\n" -#: option.c:335 +#: option.c:333 #, c-format msgid "" " C:\\> set PGDATAOLD=oldCluster/data\n" @@ -1435,16 +1444,21 @@ msgstr "" " C:\\> set PGBINNEW=новый_кластер/bin\n" " C:\\> pg_upgrade\n" -#: option.c:341 +#: option.c:339 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Об ошибках сообщайте по адресу .\n" +"Об ошибках сообщайте по адресу <%s>.\n" -#: option.c:377 +#: option.c:340 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: option.c:380 #, c-format msgid "" "You must identify the directory where the %s.\n" @@ -1454,62 +1468,62 @@ msgstr "" "Воспользуйтесь для этого ключом командной строки %s или переменной окружения " "%s.\n" -#: option.c:429 +#: option.c:432 #, c-format msgid "Finding the real data directory for the source cluster" msgstr "Поиск фактического каталога данных для исходного кластера" -#: option.c:431 +#: option.c:434 #, c-format msgid "Finding the real data directory for the target cluster" msgstr "Поиск фактического каталога данных для целевого кластера" -#: option.c:443 +#: option.c:446 #, c-format msgid "could not get data directory using %s: %s\n" msgstr "не удалось получить каталог данных, выполнив %s: %s\n" -#: option.c:503 +#: option.c:505 #, c-format msgid "could not read line %d from file \"%s\": %s\n" msgstr "не удалось прочитать строку %d из файла \"%s\": %s\n" -#: option.c:521 +#: option.c:522 #, c-format msgid "user-supplied old port number %hu corrected to %hu\n" msgstr "заданный пользователем старый номер порта %hu изменён на %hu\n" -#: parallel.c:128 parallel.c:241 +#: parallel.c:127 parallel.c:238 #, c-format msgid "could not create worker process: %s\n" msgstr "не удалось создать рабочий процесс: %s\n" -#: parallel.c:147 parallel.c:262 +#: parallel.c:146 parallel.c:259 #, c-format msgid "could not create worker thread: %s\n" msgstr "не удалось создать рабочий поток: %s\n" -#: parallel.c:305 +#: parallel.c:300 #, c-format msgid "waitpid() failed: %s\n" msgstr "сбой waitpid(): %s\n" -#: parallel.c:309 +#: parallel.c:304 #, c-format msgid "child process exited abnormally: status %d\n" msgstr "дочерний процесс завершился нештатно с ошибкой %d\n" -#: parallel.c:324 +#: parallel.c:319 #, c-format msgid "child worker exited abnormally: %s\n" msgstr "дочерний процесс завершился аварийно: %s\n" -#: pg_upgrade.c:109 +#: pg_upgrade.c:108 #, c-format msgid "could not read permissions of directory \"%s\": %s\n" msgstr "не удалось считать права на каталог \"%s\": %s\n" -#: pg_upgrade.c:126 +#: pg_upgrade.c:123 #, c-format msgid "" "\n" @@ -1520,17 +1534,17 @@ msgstr "" "Выполнение обновления\n" "---------------------\n" -#: pg_upgrade.c:169 +#: pg_upgrade.c:166 #, c-format msgid "Setting next OID for new cluster" msgstr "Установка следующего OID для нового кластера" -#: pg_upgrade.c:176 +#: pg_upgrade.c:173 #, c-format msgid "Sync data directory to disk" msgstr "Синхронизация каталога данных с ФС" -#: pg_upgrade.c:188 +#: pg_upgrade.c:185 #, c-format msgid "" "\n" @@ -1541,7 +1555,12 @@ msgstr "" "Обновление завершено\n" "--------------------\n" -#: pg_upgrade.c:234 +#: pg_upgrade.c:220 +#, c-format +msgid "%s: could not find own program executable\n" +msgstr "%s: не удалось найти свой исполняемый файл\n" + +#: pg_upgrade.c:246 #, c-format msgid "" "There seems to be a postmaster servicing the old cluster.\n" @@ -1550,7 +1569,7 @@ msgstr "" "Видимо, запущен процесс postmaster, обслуживающий старый кластер.\n" "Остановите его и попробуйте ещё раз.\n" -#: pg_upgrade.c:247 +#: pg_upgrade.c:259 #, c-format msgid "" "There seems to be a postmaster servicing the new cluster.\n" @@ -1559,100 +1578,95 @@ msgstr "" "Видимо, запущен процесс postmaster, обслуживающий новый кластер.\n" "Остановите его и попробуйте ещё раз.\n" -#: pg_upgrade.c:253 -#, c-format -msgid "%s: could not find own program executable\n" -msgstr "%s: не удалось найти свой исполняемый файл\n" - -#: pg_upgrade.c:270 +#: pg_upgrade.c:273 #, c-format msgid "Analyzing all rows in the new cluster" msgstr "Анализ всех строк в новом кластере" -#: pg_upgrade.c:283 +#: pg_upgrade.c:286 #, c-format msgid "Freezing all rows in the new cluster" msgstr "Замораживание всех строк в новом кластере" -#: pg_upgrade.c:303 +#: pg_upgrade.c:306 #, c-format msgid "Restoring global objects in the new cluster" msgstr "Восстановление глобальных объектов в новом кластере" -#: pg_upgrade.c:318 +#: pg_upgrade.c:321 #, c-format msgid "Restoring database schemas in the new cluster\n" msgstr "Восстановление схем баз данных в новом кластере\n" -#: pg_upgrade.c:424 +#: pg_upgrade.c:425 #, c-format msgid "Deleting files from new %s" msgstr "Удаление файлов из нового каталога %s" -#: pg_upgrade.c:428 +#: pg_upgrade.c:429 #, c-format msgid "could not delete directory \"%s\"\n" msgstr "ошибка при удалении каталога \"%s\"\n" -#: pg_upgrade.c:447 +#: pg_upgrade.c:448 #, c-format msgid "Copying old %s to new server" msgstr "Копирование старого каталога %s на новый сервер" -#: pg_upgrade.c:474 +#: pg_upgrade.c:475 #, c-format msgid "Setting next transaction ID and epoch for new cluster" msgstr "" "Установка следующего идентификатора транзакции и эпохи для нового кластера" -#: pg_upgrade.c:504 +#: pg_upgrade.c:505 #, c-format msgid "Setting next multixact ID and offset for new cluster" msgstr "" "Установка следующего идентификатора и смещения мультитранзакции для нового " "кластера" -#: pg_upgrade.c:528 +#: pg_upgrade.c:529 #, c-format msgid "Setting oldest multixact ID in new cluster" msgstr "Установка старейшего идентификатора мультитранзакции в новом кластере" -#: pg_upgrade.c:548 +#: pg_upgrade.c:549 #, c-format msgid "Resetting WAL archives" msgstr "Сброс архивов WAL" -#: pg_upgrade.c:591 +#: pg_upgrade.c:592 #, c-format msgid "Setting frozenxid and minmxid counters in new cluster" msgstr "Установка счётчиков frozenxid и minmxid в новом кластере" -#: pg_upgrade.c:593 +#: pg_upgrade.c:594 #, c-format msgid "Setting minmxid counter in new cluster" msgstr "Установка счётчика minmxid в новом кластере" -#: relfilenode.c:36 +#: relfilenode.c:35 #, c-format msgid "Cloning user relation files\n" msgstr "Клонирование файлов пользовательских отношений\n" -#: relfilenode.c:39 +#: relfilenode.c:38 #, c-format msgid "Copying user relation files\n" msgstr "Копирование файлов пользовательских отношений\n" -#: relfilenode.c:42 +#: relfilenode.c:41 #, c-format msgid "Linking user relation files\n" msgstr "Подключение файлов пользовательских отношений ссылками\n" -#: relfilenode.c:118 +#: relfilenode.c:115 #, c-format msgid "old database \"%s\" not found in the new cluster\n" msgstr "старая база данных \"%s\" не найдена в новом кластере\n" -#: relfilenode.c:239 +#: relfilenode.c:230 #, c-format msgid "" "error while checking for file existence \"%s.%s\" (\"%s\" to \"%s\"): %s\n" @@ -1660,42 +1674,42 @@ msgstr "" "ошибка при проверке существования файла отношения \"%s.%s\" (перенос \"%s\" " "в \"%s\"): %s\n" -#: relfilenode.c:257 +#: relfilenode.c:248 #, c-format msgid "rewriting \"%s\" to \"%s\"\n" msgstr "переписывание \"%s\" в \"%s\"\n" -#: relfilenode.c:265 +#: relfilenode.c:256 #, c-format msgid "cloning \"%s\" to \"%s\"\n" msgstr "клонирование \"%s\" в \"%s\"\n" -#: relfilenode.c:270 +#: relfilenode.c:261 #, c-format msgid "copying \"%s\" to \"%s\"\n" msgstr "копирование \"%s\" в \"%s\"\n" -#: relfilenode.c:275 +#: relfilenode.c:266 #, c-format msgid "linking \"%s\" to \"%s\"\n" msgstr "создание ссылки на \"%s\" в \"%s\"\n" -#: server.c:34 +#: server.c:33 #, c-format msgid "connection to database failed: %s" msgstr "не удалось подключиться к базе: %s" -#: server.c:40 server.c:142 util.c:136 util.c:166 +#: server.c:39 server.c:141 util.c:135 util.c:165 #, c-format msgid "Failure, exiting\n" msgstr "Ошибка, выполняется выход\n" -#: server.c:132 +#: server.c:131 #, c-format msgid "executing: %s\n" msgstr "выполняется: %s\n" -#: server.c:138 +#: server.c:137 #, c-format msgid "" "SQL command failed\n" @@ -1706,17 +1720,17 @@ msgstr "" "%s\n" "%s" -#: server.c:168 +#: server.c:167 #, c-format -msgid "could not open version file: %s\n" -msgstr "не удалось открыть файл с версией: %s\n" +msgid "could not open version file \"%s\": %m\n" +msgstr "не удалось открыть файл с версией \"%s\": %m\n" -#: server.c:172 +#: server.c:171 #, c-format -msgid "could not parse PG_VERSION file from %s\n" -msgstr "не удалось разобрать файл PG_VERSION из %s\n" +msgid "could not parse version file \"%s\"\n" +msgstr "не удалось разобрать файл с версией \"%s\"\n" -#: server.c:295 +#: server.c:297 #, c-format msgid "" "\n" @@ -1725,7 +1739,7 @@ msgstr "" "\n" "не удалось подключиться к базе: %s" -#: server.c:300 +#: server.c:302 #, c-format msgid "" "could not connect to source postmaster started with the command:\n" @@ -1735,7 +1749,7 @@ msgstr "" "командой:\n" "%s\n" -#: server.c:304 +#: server.c:306 #, c-format msgid "" "could not connect to target postmaster started with the command:\n" @@ -1745,26 +1759,26 @@ msgstr "" "командой:\n" "%s\n" -#: server.c:318 +#: server.c:320 #, c-format msgid "pg_ctl failed to start the source server, or connection failed\n" msgstr "" "программа pg_ctl не смогла запустить исходный сервер, либо к нему не удалось " "подключиться\n" -#: server.c:320 +#: server.c:322 #, c-format msgid "pg_ctl failed to start the target server, or connection failed\n" msgstr "" "программа pg_ctl не смогла запустить целевой сервер, либо к нему не удалось " "подключиться\n" -#: server.c:365 +#: server.c:367 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: server.c:378 +#: server.c:380 #, c-format msgid "libpq environment variable %s has a non-local server value: %s\n" msgstr "в переменной окружения для libpq %s задано не локальное значение: %s\n" @@ -1778,49 +1792,49 @@ msgstr "" "Обновление в рамках одной версии системного каталога невозможно,\n" "если используются табличные пространства.\n" -#: tablespace.c:87 +#: tablespace.c:86 #, c-format msgid "tablespace directory \"%s\" does not exist\n" msgstr "каталог табличного пространства \"%s\" не существует\n" -#: tablespace.c:91 +#: tablespace.c:90 #, c-format msgid "could not stat tablespace directory \"%s\": %s\n" msgstr "" "не удалось получить информацию о каталоге табличного пространства \"%s\": " "%s\n" -#: tablespace.c:96 +#: tablespace.c:95 #, c-format msgid "tablespace path \"%s\" is not a directory\n" msgstr "путь табличного пространства \"%s\" не указывает на каталог\n" -#: util.c:50 +#: util.c:49 #, c-format msgid " " msgstr " " -#: util.c:83 +#: util.c:82 #, c-format msgid "%-*s" msgstr "%-*s" -#: util.c:175 +#: util.c:174 #, c-format msgid "ok" msgstr "ok" -#: version.c:32 +#: version.c:29 #, c-format msgid "Checking for large objects" msgstr "Проверка больших объектов" -#: version.c:80 version.c:387 +#: version.c:77 version.c:384 #, c-format msgid "warning" msgstr "предупреждение" -#: version.c:82 +#: version.c:79 #, c-format msgid "" "\n" @@ -1838,7 +1852,7 @@ msgstr "" "pg_largeobject_metadata правами по умолчанию.\n" "\n" -#: version.c:88 +#: version.c:85 #, c-format msgid "" "\n" @@ -1859,12 +1873,12 @@ msgstr "" "суперпользователем базы данных).\n" "\n" -#: version.c:242 +#: version.c:239 #, c-format msgid "Checking for incompatible \"line\" data type" msgstr "Проверка несовместимого типа данных \"line\"" -#: version.c:249 +#: version.c:246 #, c-format msgid "" "Your installation contains the \"line\" data type in user tables. This\n" @@ -1886,12 +1900,12 @@ msgstr "" " %s\n" "\n" -#: version.c:279 +#: version.c:276 #, c-format msgid "Checking for invalid \"unknown\" user columns" msgstr "Проверка неправильных пользовательских столбцов типа \"unknown\"" -#: version.c:286 +#: version.c:283 #, c-format msgid "" "Your installation contains the \"unknown\" data type in user tables. This\n" @@ -1909,12 +1923,12 @@ msgstr "" " %s\n" "\n" -#: version.c:309 +#: version.c:306 #, c-format msgid "Checking for hash indexes" msgstr "Проверка хеш-индексов" -#: version.c:389 +#: version.c:386 #, c-format msgid "" "\n" @@ -1931,7 +1945,7 @@ msgstr "" "инструкции по выполнению REINDEX.\n" "\n" -#: version.c:395 +#: version.c:392 #, c-format msgid "" "\n" @@ -1952,13 +1966,13 @@ msgstr "" "индексы; до этого никакие хеш-индексы не будут использоваться.\n" "\n" -#: version.c:421 +#: version.c:418 #, c-format msgid "Checking for invalid \"sql_identifier\" user columns" msgstr "" "Проверка неправильных пользовательских столбцов типа \"sql_identifier\"" -#: version.c:429 +#: version.c:426 #, c-format msgid "" "Your installation contains the \"sql_identifier\" data type in user tables\n" @@ -1978,6 +1992,27 @@ msgstr "" " %s\n" "\n" +#~ msgid "" +#~ "Optimizer statistics and free space information are not transferred\n" +#~ "by pg_upgrade so, once you start the new server, consider running:\n" +#~ " %s\n" +#~ "\n" +#~ msgstr "" +#~ "Статистика оптимизатора и сведения о свободном месте утилитой pg_upgrade\n" +#~ "не переносятся, поэтому, запустив новый сервер, имеет смысл выполнить:\n" +#~ " %s\n" +#~ "\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Об ошибках сообщайте по адресу .\n" + +#~ msgid "could not parse PG_VERSION file from %s\n" +#~ msgstr "не удалось разобрать файл PG_VERSION из %s\n" + #~ msgid "" #~ "This utility can only upgrade to PostgreSQL version 9.0 after 2010-01-11\n" #~ "because of backend API changes made during development.\n" diff --git a/src/bin/pg_upgrade/po/sv.po b/src/bin/pg_upgrade/po/sv.po index a6959fb2e6526..92678bbe1b421 100644 --- a/src/bin/pg_upgrade/po/sv.po +++ b/src/bin/pg_upgrade/po/sv.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-04-11 01:15+0000\n" -"PO-Revision-Date: 2020-04-11 08:26+0200\n" +"POT-Creation-Date: 2020-10-20 16:45+0000\n" +"PO-Revision-Date: 2020-10-20 20:29+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: check.c:66 +#: check.c:67 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -26,7 +26,7 @@ msgstr "" "Utför konsistenskontroller på gamla live-servern\n" "------------------------------------------------\n" -#: check.c:72 +#: check.c:73 #, c-format msgid "" "Performing Consistency Checks\n" @@ -35,7 +35,7 @@ msgstr "" "Utför konsistenskontroller\n" "--------------------------\n" -#: check.c:190 +#: check.c:193 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "*Klustren är kompatibla*\n" -#: check.c:196 +#: check.c:199 #, c-format msgid "" "\n" @@ -55,7 +55,7 @@ msgstr "" "Om pg_upgrade misslyckas efter denna punkt så måste du\n" "köra om initdb på nya klustret innan du fortsätter.\n" -#: check.c:232 +#: check.c:233 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade so,\n" @@ -68,19 +68,7 @@ msgstr "" " %s\n" "\n" -#: check.c:237 -#, c-format -msgid "" -"Optimizer statistics and free space information are not transferred\n" -"by pg_upgrade so, once you start the new server, consider running:\n" -" %s\n" -"\n" -msgstr "" -"Optimeringsstatistik och information om ledigt utrymme överförs\n" -"inte av pg_upgrade så när du startar nya servern så vill du nog köra:\n" -" %s\n" - -#: check.c:244 +#: check.c:239 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -89,7 +77,7 @@ msgstr "" "När detta skript körs så raderas gamla klustrets datafiler:\n" " %s\n" -#: check.c:249 +#: check.c:244 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -102,84 +90,94 @@ msgstr "" "ligger i gamla klusterkatalogen. Det gamla klustrets innehåll\n" "måste raderas för hand.\n" -#: check.c:259 +#: check.c:254 #, c-format msgid "Checking cluster versions" msgstr "Kontrollerar klustrets versioner" -#: check.c:271 +#: check.c:266 #, c-format msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" msgstr "Detta verktyg kan bara uppgradera från PostgreSQL version 8.4 eller nyare.\n" -#: check.c:275 +#: check.c:270 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Detta verktyg kan bara uppgradera till PostgreSQL version %s.\n" -#: check.c:284 +#: check.c:279 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Detta verktyg kan inte användas för att nergradera till äldre major-versioner av PostgreSQL.\n" -#: check.c:289 +#: check.c:284 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "Gammal klusterdata och binära kataloger är från olika major-versioner.\n" -#: check.c:292 +#: check.c:287 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "Nya klusterdata och binära kataloger är från olika major-versioner.\n" -#: check.c:309 +#: check.c:304 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Vid kontroll av en gammal live-server före PG 9.1 så måste den gamla serverns portnummer anges.\n" -#: check.c:313 +#: check.c:308 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Vid kontroll av en live-server så måste gamla och nya portnumren vara olika.\n" -#: check.c:328 +#: check.c:323 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "kodning för databasen \"%s\" matchar inte: gammal \"%s\", ny \"%s\"\n" -#: check.c:333 +#: check.c:328 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_collate-värden för databasen \"%s\" matchar inte: gammal \"%s\", ny \"%s\"\n" -#: check.c:336 +#: check.c:331 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_ctype-värden för databasen \"%s\" matchar inte: gammal \"%s\", ny \"%s\"\n" -#: check.c:409 +#: check.c:404 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "Nya databasklustret \"%s\" är inte tomt: hittade relation \"%s.%s\"\n" -#: check.c:458 +#: check.c:453 #, c-format msgid "Creating script to analyze new cluster" msgstr "Skapar skript för att analysera nya klustret" -#: check.c:472 check.c:600 check.c:864 check.c:943 check.c:1053 check.c:1144 +#: check.c:467 check.c:626 check.c:890 check.c:969 check.c:1079 check.c:1170 #: file.c:336 function.c:240 option.c:497 version.c:54 version.c:199 #: version.c:341 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "kan inte öppna fil \"%s\": %s\n" -#: check.c:527 check.c:656 +#: check.c:515 check.c:682 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "kan inte sätta rättigheten \"körbar\" på filen \"%s\": %s\n" -#: check.c:563 +#: check.c:545 +#, c-format +msgid "Checking for new cluster tablespace directories" +msgstr "Letar efter nya tablespace-kataloger i klustret" + +#: check.c:556 +#, c-format +msgid "new cluster tablespace directory already exists: \"%s\"\n" +msgstr "i klustret finns redan ny tablespace-katalog: \"%s\"\n" + +#: check.c:589 #, c-format msgid "" "\n" @@ -188,7 +186,7 @@ msgstr "" "\n" "VARNING: nya datakatalogen skall inte ligga inuti den gamla datakatalogen, dvs. %s\n" -#: check.c:587 +#: check.c:613 #, c-format msgid "" "\n" @@ -197,73 +195,73 @@ msgstr "" "\n" "VARNING: användardefinierade tabellutrymmens position skall inte vara i datakatalogen, dvs. %s\n" -#: check.c:597 +#: check.c:623 #, c-format msgid "Creating script to delete old cluster" msgstr "Skapar skript för att radera gamla klustret" -#: check.c:676 +#: check.c:702 #, c-format msgid "Checking database user is the install user" msgstr "Kontrollerar att databasanvändaren är installationsanvändaren" -#: check.c:692 +#: check.c:718 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "databasanvändare \"%s\" är inte installationsanvändaren\n" -#: check.c:703 +#: check.c:729 #, c-format msgid "could not determine the number of users\n" msgstr "kunde inte bestämma antalet användare\n" -#: check.c:711 +#: check.c:737 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "Bara installationsanvändaren får finnas i nya klustret.\n" -#: check.c:731 +#: check.c:757 #, c-format msgid "Checking database connection settings" msgstr "Kontrollerar databasens anslutningsinställningar" -#: check.c:753 +#: check.c:779 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 får inte tillåta anslutningar, dvs dess pg_database.datallowconn måste vara false\n" -#: check.c:763 +#: check.c:789 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Alla icke-template0-databaser måste tillåta anslutningar, dvs. deras pg_database.datallowconn måste vara true\n" -#: check.c:788 +#: check.c:814 #, c-format msgid "Checking for prepared transactions" msgstr "Letar efter förberedda transaktioner" -#: check.c:797 +#: check.c:823 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "Källklustret innehåller förberedda transaktioner\n" -#: check.c:799 +#: check.c:825 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "Målklustret innehåller förberedda transaktioner\n" -#: check.c:825 +#: check.c:851 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Letar efter contrib/isn med bigint-anropsfel" -#: check.c:886 check.c:965 check.c:1076 check.c:1167 function.c:262 +#: check.c:912 check.c:991 check.c:1102 check.c:1193 function.c:262 #: version.c:245 version.c:282 version.c:425 #, c-format msgid "fatal\n" msgstr "fatalt\n" -#: check.c:887 +#: check.c:913 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -284,12 +282,12 @@ msgstr "" " %s\n" "\n" -#: check.c:911 +#: check.c:937 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Letar efter tabeller med WITH OIDS" -#: check.c:966 +#: check.c:992 #, c-format msgid "" "Your installation contains tables declared WITH OIDS, which is not\n" @@ -307,12 +305,12 @@ msgstr "" "\n" # FIXME: is this msgid correct? -#: check.c:996 +#: check.c:1022 #, c-format msgid "Checking for reg* data types in user tables" msgstr "Letar efter reg*-datatyper i användartabeller" -#: check.c:1077 +#: check.c:1103 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" @@ -332,12 +330,12 @@ msgstr "" "\n" # FIXME: is this msgid correct? -#: check.c:1102 +#: check.c:1128 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Letar efter inkompatibel \"jsonb\"-datatyp" -#: check.c:1168 +#: check.c:1194 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" @@ -355,32 +353,32 @@ msgstr "" " %s\n" "\n" -#: check.c:1190 +#: check.c:1216 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Letar efter roller som startar med \"pg_\"" -#: check.c:1200 +#: check.c:1226 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "Källklustret innehåller roller som startar med \"pg_\"\n" -#: check.c:1202 +#: check.c:1228 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "Målklustret innehåller roller som startar med \"pg_\"\n" -#: check.c:1228 +#: check.c:1254 #, c-format msgid "failed to get the current locale\n" msgstr "misslyckades med att hämta aktuell lokal\n" -#: check.c:1237 +#: check.c:1263 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "misslyckades med att hämta systemlokalnamn för \"%s\"\n" -#: check.c:1243 +#: check.c:1269 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "misslyckades med att återställa gamla lokalen \"%s\"\n" @@ -413,7 +411,7 @@ msgstr "Källklustret har inte stängts ner på ett korrekt sätt.\n" #: controldata.c:165 #, c-format msgid "The target cluster was not shut down cleanly.\n" -msgstr "Målklustret har inte stängts ner på ett korrekt sätt\n" +msgstr "Målklustret har inte stängts ner på ett korrekt sätt.\n" #: controldata.c:176 #, c-format @@ -426,7 +424,7 @@ msgid "The target cluster lacks cluster state information:\n" msgstr "Målklustret saknar information om kluster-state:\n" #: controldata.c:208 dump.c:49 pg_upgrade.c:339 pg_upgrade.c:375 -#: relfilenode.c:247 util.c:79 +#: relfilenode.c:243 util.c:79 #, c-format msgid "%s" msgstr "%s" @@ -1480,27 +1478,27 @@ msgstr "Länkar användares relationsfiler\n" msgid "old database \"%s\" not found in the new cluster\n" msgstr "gamla databasen \"%s\" kan inte hittas i nya klustret\n" -#: relfilenode.c:234 +#: relfilenode.c:230 #, c-format msgid "error while checking for file existence \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "fel vid kontroll av filexistens \"%s.%s\" (\"%s\" till \"%s\"): %s\n" -#: relfilenode.c:252 +#: relfilenode.c:248 #, c-format msgid "rewriting \"%s\" to \"%s\"\n" msgstr "skriver om \"%s\" till \"%s\"\n" -#: relfilenode.c:260 +#: relfilenode.c:256 #, c-format msgid "cloning \"%s\" to \"%s\"\n" msgstr "klonar \"%s\" till \"%s\"\n" -#: relfilenode.c:265 +#: relfilenode.c:261 #, c-format msgid "copying \"%s\" to \"%s\"\n" msgstr "kopierar \"%s\" till \"%s\"\n" -#: relfilenode.c:270 +#: relfilenode.c:266 #, c-format msgid "linking \"%s\" to \"%s\"\n" msgstr "länkar \"%s\" till \"%s\"\n" @@ -1541,7 +1539,7 @@ msgstr "kunde inte öppna versionsfil \"%s\": %m\n" msgid "could not parse version file \"%s\"\n" msgstr "kunde inte tolka versionsfil \"%s\"\n" -#: server.c:294 +#: server.c:297 #, c-format msgid "" "\n" @@ -1550,7 +1548,7 @@ msgstr "" "\n" "anslutning till databas misslyckades: %s" -#: server.c:299 +#: server.c:302 #, c-format msgid "" "could not connect to source postmaster started with the command:\n" @@ -1559,7 +1557,7 @@ msgstr "" "kunde inte ansluta till käll-postmaster som startats med kommandot:\n" "%s\n" -#: server.c:303 +#: server.c:306 #, c-format msgid "" "could not connect to target postmaster started with the command:\n" @@ -1568,22 +1566,22 @@ msgstr "" "kunde inte ansluta till mål-postmaster som startats med kommandot:\n" "%s\n" -#: server.c:317 +#: server.c:320 #, c-format msgid "pg_ctl failed to start the source server, or connection failed\n" msgstr "pg_ctl misslyckades att start källservern eller så misslyckades anslutningen\n" -#: server.c:319 +#: server.c:322 #, c-format msgid "pg_ctl failed to start the target server, or connection failed\n" msgstr "pg_ctl misslyckades att start målservern eller så misslyckades anslutningen\n" -#: server.c:364 +#: server.c:367 #, c-format msgid "out of memory\n" msgstr "slut på minne\n" -#: server.c:377 +#: server.c:380 #, c-format msgid "libpq environment variable %s has a non-local server value: %s\n" msgstr "libpq:s omgivningsvariabel %s har ett icke-lokalt servervärde: %s\n" @@ -1789,3 +1787,13 @@ msgstr "" "i filen:\n" " %s\n" "\n" + +#~ msgid "" +#~ "Optimizer statistics and free space information are not transferred\n" +#~ "by pg_upgrade so, once you start the new server, consider running:\n" +#~ " %s\n" +#~ "\n" +#~ msgstr "" +#~ "Optimeringsstatistik och information om ledigt utrymme överförs\n" +#~ "inte av pg_upgrade så när du startar nya servern så vill du nog köra:\n" +#~ " %s\n" diff --git a/src/bin/pg_upgrade/po/uk.po b/src/bin/pg_upgrade/po/uk.po new file mode 100644 index 0000000000000..75d7600ccf7c0 --- /dev/null +++ b/src/bin/pg_upgrade/po/uk.po @@ -0,0 +1,1623 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:15+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: \n" +"Language-Team: Ukrainian\n" +"Language: uk_UA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /DEV_13/pg_upgrade.pot\n" +"X-Crowdin-File-ID: 510\n" + +#: check.c:66 +#, c-format +msgid "Performing Consistency Checks on Old Live Server\n" +"------------------------------------------------\n" +msgstr "Перевірка цілістності на старому працюючому сервері\n" +"------------------------------------------------\n" + +#: check.c:72 +#, c-format +msgid "Performing Consistency Checks\n" +"-----------------------------\n" +msgstr "Проведення перевірок цілістності\n" +"-----------------------------\n" + +#: check.c:190 +#, c-format +msgid "\n" +"*Clusters are compatible*\n" +msgstr "\n" +"*Кластери сумісні*\n" + +#: check.c:196 +#, c-format +msgid "\n" +"If pg_upgrade fails after this point, you must re-initdb the\n" +"new cluster before continuing.\n" +msgstr "\n" +"Якщо робота pg_upgrade після цієї точки перерветься, вам потрібно буде заново виконати initdb \n" +"для нового кластера, перед продовженням.\n" + +#: check.c:232 +#, c-format +msgid "Optimizer statistics are not transferred by pg_upgrade so,\n" +"once you start the new server, consider running:\n" +" %s\n\n" +msgstr "Статистика оптимізатора не переноситься за допомогою pg_upgrade, тож\n" +"запустивши новий сервер, має сенс виконати:\n" +" %s\n\n" + +#: check.c:237 +#, c-format +msgid "Optimizer statistics and free space information are not transferred\n" +"by pg_upgrade so, once you start the new server, consider running:\n" +" %s\n\n" +msgstr "Статистика оптимізатора і інформація про вільне місце не переноситься за допомогою pg_upgrade, тож\n" +"запустивши новий сервер, має сенс виконати:\n" +" %s\n\n" + +#: check.c:244 +#, c-format +msgid "Running this script will delete the old cluster's data files:\n" +" %s\n" +msgstr "При запуску цього скрипту файли даних старого кластера будуть видалені:\n" +" %s\n" + +#: check.c:249 +#, c-format +msgid "Could not create a script to delete the old cluster's data files\n" +"because user-defined tablespaces or the new cluster's data directory\n" +"exist in the old cluster directory. The old cluster's contents must\n" +"be deleted manually.\n" +msgstr "Не вдалося створити скрипт для видалення файлів даних старого кластеру,\n" +"тому що каталог даних старого кластера містить користувацькі табличні\n" +"простори або каталог даних нового кластера. Вміст старого кластера\n" +"треба буде видалити вручну.\n" + +#: check.c:259 +#, c-format +msgid "Checking cluster versions" +msgstr "Перевірка версій кластерів" + +#: check.c:271 +#, c-format +msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" +msgstr "Ця утиліта може виконувати оновлення тільки з версії PostgreSQL 8.4 і новіше.\n" + +#: check.c:275 +#, c-format +msgid "This utility can only upgrade to PostgreSQL version %s.\n" +msgstr "Ця утиліта може тільки підвищувати версію PostgreSQL до %s.\n" + +#: check.c:284 +#, c-format +msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" +msgstr "Ця утиліта не може не може використовуватись щоб понижувати версію до більш старих основних версій PostgreSQL.\n" + +#: check.c:289 +#, c-format +msgid "Old cluster data and binary directories are from different major versions.\n" +msgstr "Каталог даних і двійковий каталог старого кластера з різних основних версій.\n" + +#: check.c:292 +#, c-format +msgid "New cluster data and binary directories are from different major versions.\n" +msgstr "Каталог даних і двійковий каталог нового кластера з різних основних версій.\n" + +#: check.c:309 +#, c-format +msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" +msgstr "Для перевірки старого працюючого сервера до версії 9.1, вам необхідно вказати номер порта цього сервера.\n" + +#: check.c:313 +#, c-format +msgid "When checking a live server, the old and new port numbers must be different.\n" +msgstr "Для перевірки працюючого сервера, старий і новий номер порта повинні бути різними.\n" + +#: check.c:328 +#, c-format +msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" +msgstr "кодування для бази даних \"%s\" не збігаються: старе \"%s\", нове \"%s\"\n" + +#: check.c:333 +#, c-format +msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" +msgstr "значення lc_collate для бази даних \"%s\" не збігаються: старе \"%s\", нове \"%s\"\n" + +#: check.c:336 +#, c-format +msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" +msgstr "значення lc_ctype для бази даних \"%s\" не збігаються: старе \"%s\", нове \"%s\"\n" + +#: check.c:409 +#, c-format +msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" +msgstr "Новий кластер бази даних \"%s\" не порожній: знайдено відношення \"%s.%s\"\n" + +#: check.c:458 +#, c-format +msgid "Creating script to analyze new cluster" +msgstr "Створення скрипту для аналізу нового кластеру" + +#: check.c:472 check.c:600 check.c:864 check.c:943 check.c:1053 check.c:1144 +#: file.c:336 function.c:240 option.c:497 version.c:54 version.c:199 +#: version.c:341 +#, c-format +msgid "could not open file \"%s\": %s\n" +msgstr "не вдалося відкрити файл \"%s\": %s\n" + +#: check.c:527 check.c:656 +#, c-format +msgid "could not add execute permission to file \"%s\": %s\n" +msgstr "не вдалося додати право виконання для файлу \"%s\": %s\n" + +#: check.c:563 +#, c-format +msgid "\n" +"WARNING: new data directory should not be inside the old data directory, e.g. %s\n" +msgstr "\n" +"ПОПЕРЕДЖЕННЯ: новий каталог даних не повинен бути всередині старого каталогу даних, наприклад %s\n" + +#: check.c:587 +#, c-format +msgid "\n" +"WARNING: user-defined tablespace locations should not be inside the data directory, e.g. %s\n" +msgstr "\n" +"ПОПЕРЕДЖЕННЯ: користувацькі розташування табличних просторів не повинні бути всередині каталогу даних, наприклад %s\n" + +#: check.c:597 +#, c-format +msgid "Creating script to delete old cluster" +msgstr "Створення скрипту для видалення старого кластеру" + +#: check.c:676 +#, c-format +msgid "Checking database user is the install user" +msgstr "Перевірка, чи є користувач бази даних стартовим користувачем" + +#: check.c:692 +#, c-format +msgid "database user \"%s\" is not the install user\n" +msgstr "користувач бази даних \"%s\" не є стартовим користувачем\n" + +#: check.c:703 +#, c-format +msgid "could not determine the number of users\n" +msgstr "не вдалося визначити кількість користувачів\n" + +#: check.c:711 +#, c-format +msgid "Only the install user can be defined in the new cluster.\n" +msgstr "В новому кластері може бути визначеним тільки стартовий користувач.\n" + +#: check.c:731 +#, c-format +msgid "Checking database connection settings" +msgstr "Перевірка параметрів підключення до бази даних" + +#: check.c:753 +#, c-format +msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" +msgstr "template0 не повинна дозволяти підключення, тобто pg_database.datallowconn повинно бути false\n" + +#: check.c:763 +#, c-format +msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" +msgstr "Всі бази даних, окрім template0, повинні дозволяти підключення, тобто pg_database.datallowconn повинно бути true\n" + +#: check.c:788 +#, c-format +msgid "Checking for prepared transactions" +msgstr "Перевірка підготовлених транзакцій" + +#: check.c:797 +#, c-format +msgid "The source cluster contains prepared transactions\n" +msgstr "Початковий кластер містить підготовлені транзакції\n" + +#: check.c:799 +#, c-format +msgid "The target cluster contains prepared transactions\n" +msgstr "Цільовий кластер містить підготовлені транзакції\n" + +#: check.c:825 +#, c-format +msgid "Checking for contrib/isn with bigint-passing mismatch" +msgstr "Перевірка невідповідності при передаванні bigint в contrib/isn" + +#: check.c:886 check.c:965 check.c:1076 check.c:1167 function.c:262 +#: version.c:245 version.c:282 version.c:425 +#, c-format +msgid "fatal\n" +msgstr "збій\n" + +#: check.c:887 +#, c-format +msgid "Your installation contains \"contrib/isn\" functions which rely on the\n" +"bigint data type. Your old and new clusters pass bigint values\n" +"differently so this cluster cannot currently be upgraded. You can\n" +"manually dump databases in the old cluster that use \"contrib/isn\"\n" +"facilities, drop them, perform the upgrade, and then restore them. A\n" +"list of the problem functions is in the file:\n" +" %s\n\n" +msgstr "Ваша інсталяція містить функції \"contrib/isn\", що використовують тип даних bigint. Старі та нові кластери передають значення bigint по-різному, тому цей кластер наразі неможливо оновити. Ви можете вручну вивантажити бази даних зі старого кластеру, що використовує засоби \"contrib/isn\", видалити їх, виконати оновлення, а потім відновити їх. Список проблемних функцій подано у файлі:\n" +" %s\n\n" + +#: check.c:911 +#, c-format +msgid "Checking for tables WITH OIDS" +msgstr "Перевірка таблиць WITH OIDS" + +#: check.c:966 +#, c-format +msgid "Your installation contains tables declared WITH OIDS, which is not\n" +"supported anymore. Consider removing the oid column using\n" +" ALTER TABLE ... SET WITHOUT OIDS;\n" +"A list of tables with the problem is in the file:\n" +" %s\n\n" +msgstr "Ваша інсталяція містить таблиці, створені як WITH OIDS, що більше не підтримуються. Розгляньте видалення стовпців, що містять oid за допомогою\n" +" ALTER TABLE ... SET WITHOUT OIDS;\n" +"Список проблемних таблиць подано у файлі:\n" +" %s\n\n" + +#: check.c:996 +#, c-format +msgid "Checking for reg* data types in user tables" +msgstr "Перевірка типів даних reg* в користувацьких таблицях" + +#: check.c:1077 +#, c-format +msgid "Your installation contains one of the reg* data types in user tables.\n" +"These data types reference system OIDs that are not preserved by\n" +"pg_upgrade, so this cluster cannot currently be upgraded. You can\n" +"remove the problem tables and restart the upgrade. A list of the\n" +"problem columns is in the file:\n" +" %s\n\n" +msgstr "Користувацькі таблиці у вашій інсталяції містять один з типів даних reg*. Ці типи даних посилаються на системні OIDs, що не зберігаються за допомогою pg_upgrade, тому цей кластер наразі неможливо оновити. Ви можете видалити проблемні таблиці і перезавантажити оновлення. Список проблемних стовпців подано у файлі:\n" +" %s\n\n" + +#: check.c:1102 +#, c-format +msgid "Checking for incompatible \"jsonb\" data type" +msgstr "Перевірка несумісного типу даних \"jsonb\"" + +#: check.c:1168 +#, c-format +msgid "Your installation contains the \"jsonb\" data type in user tables.\n" +"The internal format of \"jsonb\" changed during 9.4 beta so this\n" +"cluster cannot currently be upgraded. You can remove the problem\n" +"tables and restart the upgrade. A list of the problem columns is\n" +"in the file:\n" +" %s\n\n" +msgstr "Користувацькі таблиці у вашій інсталяції містять тип даних \"jsonb\". Внутрішній формат \"jsonb\" змінено під час версії 9.4 beta, тому цей кластер наразі неможливо оновити. Ви можете видалити проблемні таблиці та перезавантажити оновлення. Список проблемних таблиць подано у файлі:\n" +" %s\n\n" + +#: check.c:1190 +#, c-format +msgid "Checking for roles starting with \"pg_\"" +msgstr "Перевірка ролей, які починаються з \"pg_\"" + +#: check.c:1200 +#, c-format +msgid "The source cluster contains roles starting with \"pg_\"\n" +msgstr "Початковий кластер містить ролі, які починаються з \"pg_\"\n" + +#: check.c:1202 +#, c-format +msgid "The target cluster contains roles starting with \"pg_\"\n" +msgstr "Цільовий кластер містить ролі, які починаються з \"pg_\"\n" + +#: check.c:1228 +#, c-format +msgid "failed to get the current locale\n" +msgstr "не вдалося отримати поточну локаль\n" + +#: check.c:1237 +#, c-format +msgid "failed to get system locale name for \"%s\"\n" +msgstr "не вдалося отримати системне ім'я локалі для \"%s\"\n" + +#: check.c:1243 +#, c-format +msgid "failed to restore old locale \"%s\"\n" +msgstr "не вдалося відновити стару локаль \"%s\"\n" + +#: controldata.c:127 controldata.c:195 +#, c-format +msgid "could not get control data using %s: %s\n" +msgstr "не вдалося отримати контрольні дані за допомогою %s: %s\n" + +#: controldata.c:138 +#, c-format +msgid "%d: database cluster state problem\n" +msgstr "%d: неприпустимий стан кластера баз даних\n" + +#: controldata.c:156 +#, c-format +msgid "The source cluster was shut down while in recovery mode. To upgrade, use \"rsync\" as documented or shut it down as a primary.\n" +msgstr "Початковий кластер завершив роботу в режимі відновлення. Щоб виконати оновлення, використайте документований спосіб з \"rsync\" або вимкніть його в режимі головного сервера.\n" + +#: controldata.c:158 +#, c-format +msgid "The target cluster was shut down while in recovery mode. To upgrade, use \"rsync\" as documented or shut it down as a primary.\n" +msgstr "Цільовий кластер завершив роботу в режимі відновлення. Щоб виконати оновлення, використайте документований спосіб з \"rsync\" або вимкніть його в режимі головного сервера.\n" + +#: controldata.c:163 +#, c-format +msgid "The source cluster was not shut down cleanly.\n" +msgstr "Початковий кластер завершив роботу некоректно.\n" + +#: controldata.c:165 +#, c-format +msgid "The target cluster was not shut down cleanly.\n" +msgstr "Цільовий кластер завершив роботу некоректно.\n" + +#: controldata.c:176 +#, c-format +msgid "The source cluster lacks cluster state information:\n" +msgstr "В початковому кластері відсутня інформація про стан кластеру:\n" + +#: controldata.c:178 +#, c-format +msgid "The target cluster lacks cluster state information:\n" +msgstr "В цільовому кластері відсутня інформація про стан кластеру:\n" + +#: controldata.c:208 dump.c:49 pg_upgrade.c:339 pg_upgrade.c:375 +#: relfilenode.c:247 util.c:79 +#, c-format +msgid "%s" +msgstr "%s" + +#: controldata.c:215 +#, c-format +msgid "%d: pg_resetwal problem\n" +msgstr "%d: проблема pg_resetwal\n" + +#: controldata.c:225 controldata.c:235 controldata.c:246 controldata.c:257 +#: controldata.c:268 controldata.c:287 controldata.c:298 controldata.c:309 +#: controldata.c:320 controldata.c:331 controldata.c:342 controldata.c:345 +#: controldata.c:349 controldata.c:359 controldata.c:371 controldata.c:382 +#: controldata.c:393 controldata.c:404 controldata.c:415 controldata.c:426 +#: controldata.c:437 controldata.c:448 controldata.c:459 controldata.c:470 +#: controldata.c:481 +#, c-format +msgid "%d: controldata retrieval problem\n" +msgstr "%d: проблема з отриманням контрольних даних\n" + +#: controldata.c:546 +#, c-format +msgid "The source cluster lacks some required control information:\n" +msgstr "У початковому кластері відсутня необхідна контрольна інформація:\n" + +#: controldata.c:549 +#, c-format +msgid "The target cluster lacks some required control information:\n" +msgstr "У цільовому кластері відсутня необхідна контрольна інформація:\n" + +#: controldata.c:552 +#, c-format +msgid " checkpoint next XID\n" +msgstr " наступний XID контрольної точки\n" + +#: controldata.c:555 +#, c-format +msgid " latest checkpoint next OID\n" +msgstr " наступний OID останньої контрольної точки\n" + +#: controldata.c:558 +#, c-format +msgid " latest checkpoint next MultiXactId\n" +msgstr " наступний MultiXactId останньої контрольної точки\n" + +#: controldata.c:562 +#, c-format +msgid " latest checkpoint oldest MultiXactId\n" +msgstr " найстарший MultiXactId останньої контрольної точки\n" + +#: controldata.c:565 +#, c-format +msgid " latest checkpoint next MultiXactOffset\n" +msgstr " наступний MultiXactOffset останньої контрольної точки\n" + +#: controldata.c:568 +#, c-format +msgid " first WAL segment after reset\n" +msgstr " перший сегмет WAL після скидання\n" + +#: controldata.c:571 +#, c-format +msgid " float8 argument passing method\n" +msgstr " метод передачі аргументу float8\n" + +#: controldata.c:574 +#, c-format +msgid " maximum alignment\n" +msgstr " максимальне вирівнювання\n" + +#: controldata.c:577 +#, c-format +msgid " block size\n" +msgstr " розмір блоку\n" + +#: controldata.c:580 +#, c-format +msgid " large relation segment size\n" +msgstr " розмір сегменту великого відношення\n" + +#: controldata.c:583 +#, c-format +msgid " WAL block size\n" +msgstr " розмір блоку WAL\n" + +#: controldata.c:586 +#, c-format +msgid " WAL segment size\n" +msgstr " розмір сегменту WAL\n" + +#: controldata.c:589 +#, c-format +msgid " maximum identifier length\n" +msgstr " максимальна довжина ідентифікатора\n" + +#: controldata.c:592 +#, c-format +msgid " maximum number of indexed columns\n" +msgstr " максимальна кількість індексованих стовпців\n" + +#: controldata.c:595 +#, c-format +msgid " maximum TOAST chunk size\n" +msgstr " максимальний розмір порції TOAST\n" + +#: controldata.c:599 +#, c-format +msgid " large-object chunk size\n" +msgstr " розмір порції великого об'єкту\n" + +#: controldata.c:602 +#, c-format +msgid " dates/times are integers?\n" +msgstr " дата/час представлені цілими числами?\n" + +#: controldata.c:606 +#, c-format +msgid " data checksum version\n" +msgstr " версія контрольних сум даних\n" + +#: controldata.c:608 +#, c-format +msgid "Cannot continue without required control information, terminating\n" +msgstr "Не можна продовжити без необхідної контрольної інформації, завершення\n" + +#: controldata.c:623 +#, c-format +msgid "old and new pg_controldata alignments are invalid or do not match\n" +"Likely one cluster is a 32-bit install, the other 64-bit\n" +msgstr "старе і нове вирівнювання в pg_controldata неприпустимі або не збігаються\n" +"Ймовірно, один кластер встановлений у 32-бітній системі, а інший - у 64-бітній\n" + +#: controldata.c:627 +#, c-format +msgid "old and new pg_controldata block sizes are invalid or do not match\n" +msgstr "старий і новий розмір блоків в pg_controldata неприпустимі або не збігаються\n" + +#: controldata.c:630 +#, c-format +msgid "old and new pg_controldata maximum relation segment sizes are invalid or do not match\n" +msgstr "старий і новий максимальний розмір сегментів відношень в pg_controldata неприпустимі або не збігаються\n" + +#: controldata.c:633 +#, c-format +msgid "old and new pg_controldata WAL block sizes are invalid or do not match\n" +msgstr "старий і новий розмір блоків WAL в pg_controldata неприпустимі або не збігаються\n" + +#: controldata.c:636 +#, c-format +msgid "old and new pg_controldata WAL segment sizes are invalid or do not match\n" +msgstr "старий і новий розмір сегментів WAL в pg_controldata неприпустимі або не збігаються\n" + +#: controldata.c:639 +#, c-format +msgid "old and new pg_controldata maximum identifier lengths are invalid or do not match\n" +msgstr "стара і нова максимальна довжина ідентифікаторів в pg_controldata неприпустимі або не збігаються\n" + +#: controldata.c:642 +#, c-format +msgid "old and new pg_controldata maximum indexed columns are invalid or do not match\n" +msgstr "стара і нова максимальна кількість індексованих стовпців в pg_controldata неприпустимі або не збігаються\n" + +#: controldata.c:645 +#, c-format +msgid "old and new pg_controldata maximum TOAST chunk sizes are invalid or do not match\n" +msgstr "старий і новий максимальний розмір порції TOAST в pg_controldata неприпустимі або не збігаються\n" + +#: controldata.c:650 +#, c-format +msgid "old and new pg_controldata large-object chunk sizes are invalid or do not match\n" +msgstr "старий і новий розмір порції великого об'єкту в pg_controldata неприпустимі або не збігаються\n" + +#: controldata.c:653 +#, c-format +msgid "old and new pg_controldata date/time storage types do not match\n" +msgstr "старий і новий тип сховища дати/часу в pg_controldata неприпустимі або не збігаються\n" + +#: controldata.c:666 +#, c-format +msgid "old cluster does not use data checksums but the new one does\n" +msgstr "старий кластер не використовує контрольні суми даних, але новий використовує\n" + +#: controldata.c:669 +#, c-format +msgid "old cluster uses data checksums but the new one does not\n" +msgstr "старий кластер використовує контрольні суми даних, але новий не використовує\n" + +#: controldata.c:671 +#, c-format +msgid "old and new cluster pg_controldata checksum versions do not match\n" +msgstr "стара і нова версія контрольних сум кластера в pg_controldata не збігаються\n" + +#: controldata.c:682 +#, c-format +msgid "Adding \".old\" suffix to old global/pg_control" +msgstr "Додавання суфікса \".old\" до старого файла global/pg_control" + +#: controldata.c:687 +#, c-format +msgid "Unable to rename %s to %s.\n" +msgstr "Не вдалося перейменувати %s на %s.\n" + +#: controldata.c:690 +#, c-format +msgid "\n" +"If you want to start the old cluster, you will need to remove\n" +"the \".old\" suffix from %s/global/pg_control.old.\n" +"Because \"link\" mode was used, the old cluster cannot be safely\n" +"started once the new cluster has been started.\n\n" +msgstr "\n" +"Якщо ви хочете запустити старий кластер, вам необхідно видалити\n" +"суфікс \".old\" з файлу %s/global/pg_control.old. Через використання\n" +"режиму \"link\" робота старого кластера після запуску нового може бути\n" +"небезпечна.\n\n" + +#: dump.c:20 +#, c-format +msgid "Creating dump of global objects" +msgstr "Створення вивантаження глобальних об'єктів" + +#: dump.c:31 +#, c-format +msgid "Creating dump of database schemas\n" +msgstr "Створення вивантаження схем бази даних\n" + +#: exec.c:44 +#, c-format +msgid "could not get pg_ctl version data using %s: %s\n" +msgstr "не вдалося отримати дані версії pg_ctl, виконавши %s: %s\n" + +#: exec.c:50 +#, c-format +msgid "could not get pg_ctl version output from %s\n" +msgstr "не вдалося отримати версію pg_ctl з результату %s\n" + +#: exec.c:104 exec.c:108 +#, c-format +msgid "command too long\n" +msgstr "команда занадто довга\n" + +#: exec.c:110 util.c:37 util.c:225 +#, c-format +msgid "%s\n" +msgstr "%s\n" + +#: exec.c:149 option.c:217 +#, c-format +msgid "could not open log file \"%s\": %m\n" +msgstr "не вдалося відкрити файл журналу \"%s\": %m\n" + +#: exec.c:178 +#, c-format +msgid "\n" +"*failure*" +msgstr "\n" +"*неполадка*" + +#: exec.c:181 +#, c-format +msgid "There were problems executing \"%s\"\n" +msgstr "Під час виконання \"%s\" виникли проблеми\n" + +#: exec.c:184 +#, c-format +msgid "Consult the last few lines of \"%s\" or \"%s\" for\n" +"the probable cause of the failure.\n" +msgstr "Щоб зрозуміти причину неполадки, зверніться до декількох останніх рядків\n" +"файлу \"%s\" або \"%s\".\n" + +#: exec.c:189 +#, c-format +msgid "Consult the last few lines of \"%s\" for\n" +"the probable cause of the failure.\n" +msgstr "Щоб зрозуміти причину неполадки, зверніться до декількох останніх рядків\n" +"файлу \"%s\".\n" + +#: exec.c:204 option.c:226 +#, c-format +msgid "could not write to log file \"%s\": %m\n" +msgstr "не вдалося записати до файлу журналу \"%s\": %m\n" + +#: exec.c:230 +#, c-format +msgid "could not open file \"%s\" for reading: %s\n" +msgstr "не вдалося відкрити файл \"%s\" для читання: %s\n" + +#: exec.c:257 +#, c-format +msgid "You must have read and write access in the current directory.\n" +msgstr "Ви повинні мати права на читання і запис в поточному каталозі.\n" + +#: exec.c:310 exec.c:372 exec.c:436 +#, c-format +msgid "check for \"%s\" failed: %s\n" +msgstr "перевірка \"%s\" провалена: %s\n" + +#: exec.c:313 exec.c:375 +#, c-format +msgid "\"%s\" is not a directory\n" +msgstr "\"%s\" не є каталогом\n" + +#: exec.c:439 +#, c-format +msgid "check for \"%s\" failed: not a regular file\n" +msgstr "перевірка \"%s\" провалена: це не звичайний файл\n" + +#: exec.c:451 +#, c-format +msgid "check for \"%s\" failed: cannot read file (permission denied)\n" +msgstr "перевірка \"%s\" провалена: не можна прочитати файл (немає доступу)\n" + +#: exec.c:459 +#, c-format +msgid "check for \"%s\" failed: cannot execute (permission denied)\n" +msgstr "перевірка \"%s\" провалена: виконання неможливе (немає доступу)\n" + +#: file.c:43 file.c:61 +#, c-format +msgid "error while cloning relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" +msgstr "помилка при клонуванні відношення \"%s.%s\" (\"%s\" до \"%s\"): %s\n" + +#: file.c:50 +#, c-format +msgid "error while cloning relation \"%s.%s\": could not open file \"%s\": %s\n" +msgstr "помилка при клонуванні відношення \"%s.%s\": не вдалося відкрити файл \"%s\": %s\n" + +#: file.c:55 +#, c-format +msgid "error while cloning relation \"%s.%s\": could not create file \"%s\": %s\n" +msgstr "помилка при клонуванні відношення \"%s.%s\": не вдалося створити файл \"%s\": %s\n" + +#: file.c:87 file.c:190 +#, c-format +msgid "error while copying relation \"%s.%s\": could not open file \"%s\": %s\n" +msgstr "помилка під час копіювання відношення \"%s.%s\": не вдалося відкрити файл \"%s\": %s\n" + +#: file.c:92 file.c:199 +#, c-format +msgid "error while copying relation \"%s.%s\": could not create file \"%s\": %s\n" +msgstr "помилка під час копіювання відношення \"%s.%s\": не вдалося створити файл \"%s\": %s\n" + +#: file.c:106 file.c:223 +#, c-format +msgid "error while copying relation \"%s.%s\": could not read file \"%s\": %s\n" +msgstr "помилка під час копіювання відношення \"%s.%s\": не вдалося прочитати файл \"%s\": %s\n" + +#: file.c:118 file.c:301 +#, c-format +msgid "error while copying relation \"%s.%s\": could not write file \"%s\": %s\n" +msgstr "помилка під час копіювання відношення \"%s.%s\": не вдалося записати до файлу \"%s\": %s\n" + +#: file.c:132 +#, c-format +msgid "error while copying relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" +msgstr "помилка під час копіювання відношення \"%s.%s\" ( з \"%s\" в \"%s\"): %s\n" + +#: file.c:151 +#, c-format +msgid "error while creating link for relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" +msgstr "помилка під час створення посилання для відношення \"%s.%s\" ( з \"%s\" в \"%s\"): %s\n" + +#: file.c:194 +#, c-format +msgid "error while copying relation \"%s.%s\": could not stat file \"%s\": %s\n" +msgstr "помилка під час копіювання відношення \"%s.%s\": не вдалося отримати стан файлу \"%s\": %s\n" + +#: file.c:226 +#, c-format +msgid "error while copying relation \"%s.%s\": partial page found in file \"%s\"\n" +msgstr "помилка під час копіювання відношення \"%s.%s\": у файлі \"%s\" знайдена часткова сторінка\n" + +#: file.c:328 file.c:345 +#, c-format +msgid "could not clone file between old and new data directories: %s\n" +msgstr "не вдалося клонувати файл між старим і новим каталогами даних: %s\n" + +#: file.c:341 +#, c-format +msgid "could not create file \"%s\": %s\n" +msgstr "не можливо створити файл \"%s\": %s\n" + +#: file.c:352 +#, c-format +msgid "file cloning not supported on this platform\n" +msgstr "клонування файлів не підтримується на цій платформі\n" + +#: file.c:369 +#, c-format +msgid "could not create hard link between old and new data directories: %s\n" +"In link mode the old and new data directories must be on the same file system.\n" +msgstr "не вдалося створити жорстке посилання між старим і новим каталогами даних: %s\n" +"В режимі посилань старий і новий каталоги даних повинні знаходитись в одній файловій системі.\n" + +#: function.c:114 +#, c-format +msgid "\n" +"The old cluster has a \"plpython_call_handler\" function defined\n" +"in the \"public\" schema which is a duplicate of the one defined\n" +"in the \"pg_catalog\" schema. You can confirm this by executing\n" +"in psql:\n\n" +" \\df *.plpython_call_handler\n\n" +"The \"public\" schema version of this function was created by a\n" +"pre-8.1 install of plpython, and must be removed for pg_upgrade\n" +"to complete because it references a now-obsolete \"plpython\"\n" +"shared object file. You can remove the \"public\" schema version\n" +"of this function by running the following command:\n\n" +" DROP FUNCTION public.plpython_call_handler()\n\n" +"in each affected database:\n\n" +msgstr "\n" +"Старий кластер має функцію \"plpython_call_handler\", визначену в схемі\n" +"\"public\", яка є дублікатом функції, визначеної в схемі \"pg_catalog\". Ви\n" +"можете переконатися в цьому, виконавши в psql:\n\n" +" \\df *.plpython_call_handler\n\n" +"Версія цієї функції в схемі \"public\" була створена встановленням plpython \n" +"версії до 8.1 і повинна бути видалена до завершення процедури pg_upgrade,\n" +"адже вона посилається на застарілий спільний об'єктний файл \"plpython\". Ви\n" +"можете видалити версію цієї функції зі схеми \"public\", виконавши наступну\n" +"команду:\n\n" +" DROP FUNCTION public.plpython_call_handler()\n\n" +"у кожній базі даних, якої це стосується:\n\n" + +#: function.c:132 +#, c-format +msgid " %s\n" +msgstr " %s\n" + +#: function.c:142 +#, c-format +msgid "Remove the problem functions from the old cluster to continue.\n" +msgstr "Видаліть проблемні функції старого кластера для продовження.\n" + +#: function.c:189 +#, c-format +msgid "Checking for presence of required libraries" +msgstr "Перевірка наявності необхідних бібліотек" + +#: function.c:242 +#, c-format +msgid "could not load library \"%s\": %s" +msgstr "не вдалося завантажити бібліотеку \"%s\": %s" + +#: function.c:253 +#, c-format +msgid "In database: %s\n" +msgstr "У базі даних: %s\n" + +#: function.c:263 +#, c-format +msgid "Your installation references loadable libraries that are missing from the\n" +"new installation. You can add these libraries to the new installation,\n" +"or remove the functions using them from the old installation. A list of\n" +"problem libraries is in the file:\n" +" %s\n\n" +msgstr "У вашій інсталяції є посилання на завантажувані бібліотеки, що \n" +"відсутні в новій інсталяції. Ви можете додати ці бібліотеки до нової інсталяції\n" +"або видалити функції, які використовують їх зі старої інсталяції. Список\n" +"проблемних бібліотек подано у файлі:\n" +" %s\n\n" + +#: info.c:131 +#, c-format +msgid "Relation names for OID %u in database \"%s\" do not match: old name \"%s.%s\", new name \"%s.%s\"\n" +msgstr "Імена відношень з OID %u в базі даних \"%s\" не збігаються: старе ім'я \"%s.%s\", нове ім'я \"%s.%s\"\n" + +#: info.c:151 +#, c-format +msgid "Failed to match up old and new tables in database \"%s\"\n" +msgstr "Не вдалося зіставити старі таблиці з новими в базі даних \"%s\"\n" + +#: info.c:240 +#, c-format +msgid " which is an index on \"%s.%s\"" +msgstr " це індекс в \"%s.%s\"" + +#: info.c:250 +#, c-format +msgid " which is an index on OID %u" +msgstr " це індекс у відношенні з OID %u" + +#: info.c:262 +#, c-format +msgid " which is the TOAST table for \"%s.%s\"" +msgstr " це TOAST-таблиця для \"%s.%s\"" + +#: info.c:270 +#, c-format +msgid " which is the TOAST table for OID %u" +msgstr " це TOAST-таблиця для відношення з OID %u" + +#: info.c:274 +#, c-format +msgid "No match found in old cluster for new relation with OID %u in database \"%s\": %s\n" +msgstr "У старому кластері не знайдено відповідності для нового відношення з OID %u в базі даних %s\": %s\n" + +#: info.c:277 +#, c-format +msgid "No match found in new cluster for old relation with OID %u in database \"%s\": %s\n" +msgstr "У новому кластері не знайдено відповідності для старого відношення з OID %u в базі даних \"%s\": %s\n" + +#: info.c:289 +#, c-format +msgid "mappings for database \"%s\":\n" +msgstr "відображення для бази даних \"%s\":\n" + +#: info.c:292 +#, c-format +msgid "%s.%s: %u to %u\n" +msgstr "%s.%s: %u в %u\n" + +#: info.c:297 info.c:633 +#, c-format +msgid "\n\n" +msgstr "\n\n" + +#: info.c:322 +#, c-format +msgid "\n" +"source databases:\n" +msgstr "\n" +"вихідні бази даних:\n" + +#: info.c:324 +#, c-format +msgid "\n" +"target databases:\n" +msgstr "\n" +"цільові бази даних:\n" + +#: info.c:631 +#, c-format +msgid "Database: %s\n" +msgstr "База даних: %s\n" + +#: info.c:644 +#, c-format +msgid "relname: %s.%s: reloid: %u reltblspace: %s\n" +msgstr "ім'я_відношення: %s.%s: oid_відношення: %u табл_простір: %s\n" + +#: option.c:102 +#, c-format +msgid "%s: cannot be run as root\n" +msgstr "%s: не може виконуватись як root\n" + +#: option.c:170 +#, c-format +msgid "invalid old port number\n" +msgstr "неприпустимий старий номер порту\n" + +#: option.c:175 +#, c-format +msgid "invalid new port number\n" +msgstr "неприпустимий новий номер порту\n" + +#: option.c:207 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" + +#: option.c:214 +#, c-format +msgid "too many command-line arguments (first is \"%s\")\n" +msgstr "забагато аргументів у командному рядку (перший \"%s\")\n" + +#: option.c:220 +#, c-format +msgid "Running in verbose mode\n" +msgstr "Виконується в детальному режимі\n" + +#: option.c:251 +msgid "old cluster binaries reside" +msgstr "розташування двійкових даних старого кластера" + +#: option.c:253 +msgid "new cluster binaries reside" +msgstr "розташування двійкових даних нового кластера" + +#: option.c:255 +msgid "old cluster data resides" +msgstr "розташування даних старого кластера" + +#: option.c:257 +msgid "new cluster data resides" +msgstr "розташування даних нового кластера" + +#: option.c:259 +msgid "sockets will be created" +msgstr "сокети будуть створені" + +#: option.c:276 option.c:374 +#, c-format +msgid "could not determine current directory\n" +msgstr "не вдалося визначити поточний каталог\n" + +#: option.c:279 +#, c-format +msgid "cannot run pg_upgrade from inside the new cluster data directory on Windows\n" +msgstr "у Windows не можна виконати pg_upgrade всередині каталогу даних нового кластера\n" + +#: option.c:288 +#, c-format +msgid "pg_upgrade upgrades a PostgreSQL cluster to a different major version.\n\n" +msgstr "pg_upgrade оновлює кластер PostgreSQL до іншої основної версії.\n\n" + +#: option.c:289 +#, c-format +msgid "Usage:\n" +msgstr "Використання:\n" + +#: option.c:290 +#, c-format +msgid " pg_upgrade [OPTION]...\n\n" +msgstr " pg_upgrade [OPTION]...\n\n" + +#: option.c:291 +#, c-format +msgid "Options:\n" +msgstr "Параметри:\n" + +#: option.c:292 +#, c-format +msgid " -b, --old-bindir=BINDIR old cluster executable directory\n" +msgstr " -b, --old-bindir=BINDIR каталог виконуваних файлів старого кластера\n" + +#: option.c:293 +#, c-format +msgid " -B, --new-bindir=BINDIR new cluster executable directory (default\n" +" same directory as pg_upgrade)\n" +msgstr " -B, --new-bindir=BINDIR каталог виконуваних файлів нового кластера (за замовчуванням\n" +" той самий каталог, що і pg_upgrade)\n" + +#: option.c:295 +#, c-format +msgid " -c, --check check clusters only, don't change any data\n" +msgstr " -c, --check тільки перевірити кластери, не змінювати ніякі дані\n" + +#: option.c:296 +#, c-format +msgid " -d, --old-datadir=DATADIR old cluster data directory\n" +msgstr " -d, --old-datadir=DATADIR каталог даних старого кластера\n" + +#: option.c:297 +#, c-format +msgid " -D, --new-datadir=DATADIR new cluster data directory\n" +msgstr " -D, --new-datadir=DATADIR каталог даних нового кластера\n" + +#: option.c:298 +#, c-format +msgid " -j, --jobs=NUM number of simultaneous processes or threads to use\n" +msgstr " -j, --jobs=NUM число одночасних процесів або потоків для використання\n" + +#: option.c:299 +#, c-format +msgid " -k, --link link instead of copying files to new cluster\n" +msgstr " -k, --link встановлювати посилання замість копіювання файлів до нового кластера\n" + +#: option.c:300 +#, c-format +msgid " -o, --old-options=OPTIONS old cluster options to pass to the server\n" +msgstr " -o, --old-options=OPTIONS параметри старого кластера, які передаються серверу\n" + +#: option.c:301 +#, c-format +msgid " -O, --new-options=OPTIONS new cluster options to pass to the server\n" +msgstr " -O, --new-options=OPTIONS параметри нового кластера, які передаються серверу\n" + +#: option.c:302 +#, c-format +msgid " -p, --old-port=PORT old cluster port number (default %d)\n" +msgstr " -p, --old-port=PORT номер порту старого кластера (за замовчуванням %d)\n" + +#: option.c:303 +#, c-format +msgid " -P, --new-port=PORT new cluster port number (default %d)\n" +msgstr " -P, --new-port=PORT номер порту нового кластера (за замовчуванням %d)\n" + +#: option.c:304 +#, c-format +msgid " -r, --retain retain SQL and log files after success\n" +msgstr " -r, --retain зберегти файли журналів і SQL після успішного завершення\n" + +#: option.c:305 +#, c-format +msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" +msgstr " -s, --socketdir=DIR директорія сокету для використання (за замовчування поточна директорія)\n" + +#: option.c:306 +#, c-format +msgid " -U, --username=NAME cluster superuser (default \"%s\")\n" +msgstr " -U, --username=NAME суперкористувач кластера (за замовчуванням \"%s\")\n" + +#: option.c:307 +#, c-format +msgid " -v, --verbose enable verbose internal logging\n" +msgstr " -v, --verbose активувати виведення детальних внутрішніх повідомлень\n" + +#: option.c:308 +#, c-format +msgid " -V, --version display version information, then exit\n" +msgstr " -V, --version відобразити інформацію про версію, потім вийти\n" + +#: option.c:309 +#, c-format +msgid " --clone clone instead of copying files to new cluster\n" +msgstr " --clone клонувати замість копіювання файлів до нового кластера\n" + +#: option.c:310 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку, потім вийти\n" + +#: option.c:311 +#, c-format +msgid "\n" +"Before running pg_upgrade you must:\n" +" create a new database cluster (using the new version of initdb)\n" +" shutdown the postmaster servicing the old cluster\n" +" shutdown the postmaster servicing the new cluster\n" +msgstr "\n" +"До виконання pg_upgrade ви повинні:\n" +" створити новий кластер баз даних (використовуючи нову версію initdb)\n" +" завершити процес postmaster, який обслуговує старий кластер\n" +" завершити процес postmaster, який обслуговує новий кластер\n" + +#: option.c:316 +#, c-format +msgid "\n" +"When you run pg_upgrade, you must provide the following information:\n" +" the data directory for the old cluster (-d DATADIR)\n" +" the data directory for the new cluster (-D DATADIR)\n" +" the \"bin\" directory for the old version (-b BINDIR)\n" +" the \"bin\" directory for the new version (-B BINDIR)\n" +msgstr "\n" +"Коли ви виконуєте pg_upgrade, ви повинні надати наступну інформацію:\n" +" каталог даних старого кластера (-d DATADIR)\n" +" каталог даних нового кластера (-D DATADIR)\n" +" каталог \"bin\" старого кластера (-b BINDIR)\n" +" каталог \"bin\" нового кластера (-B BINDIR)\n" + +#: option.c:322 +#, c-format +msgid "\n" +"For example:\n" +" pg_upgrade -d oldCluster/data -D newCluster/data -b oldCluster/bin -B newCluster/bin\n" +"or\n" +msgstr "\n" +"Наприклад:\n" +" pg_upgrade -d старий_кластер/data -D новий_кластер/data -b старий_кластер/bin -B новий_кластер/bin\n" +"або\n" + +#: option.c:327 +#, c-format +msgid " $ export PGDATAOLD=oldCluster/data\n" +" $ export PGDATANEW=newCluster/data\n" +" $ export PGBINOLD=oldCluster/bin\n" +" $ export PGBINNEW=newCluster/bin\n" +" $ pg_upgrade\n" +msgstr " $ export PGDATAOLD=старий_кластер/data\n" +" $ export PGDATANEW=новий_кластер/data\n" +" $ export PGBINOLD=старий_кластер/bin\n" +" $ export PGBINNEW=новий_кластер/bin\n" +" $ pg_upgrade\n" + +#: option.c:333 +#, c-format +msgid " C:\\> set PGDATAOLD=oldCluster/data\n" +" C:\\> set PGDATANEW=newCluster/data\n" +" C:\\> set PGBINOLD=oldCluster/bin\n" +" C:\\> set PGBINNEW=newCluster/bin\n" +" C:\\> pg_upgrade\n" +msgstr " C:\\> set PGDATAOLD=старий_кластер/data\n" +" C:\\> set PGDATANEW=новий_кластер/data\n" +" C:\\> set PGBINOLD=старий_кластер/bin\n" +" C:\\> set PGBINNEW=новий_кластер/bin\n" +" C:\\> pg_upgrade\n" + +#: option.c:339 +#, c-format +msgid "\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Повідомляти про помилки на <%s>.\n" + +#: option.c:340 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: option.c:380 +#, c-format +msgid "You must identify the directory where the %s.\n" +"Please use the %s command-line option or the %s environment variable.\n" +msgstr "Ви повинні визначити каталог, де знаходиться %s.\n" +"Будь ласка, використайте параметр командного рядка %s або змінну середовища %s.\n" + +#: option.c:432 +#, c-format +msgid "Finding the real data directory for the source cluster" +msgstr "Пошук дійсного каталогу даних для початкового кластера" + +#: option.c:434 +#, c-format +msgid "Finding the real data directory for the target cluster" +msgstr "Пошук дійсного каталогу даних для цільового кластера" + +#: option.c:446 +#, c-format +msgid "could not get data directory using %s: %s\n" +msgstr "не вдалося отримати каталог даних, виконавши %s: %s\n" + +#: option.c:505 +#, c-format +msgid "could not read line %d from file \"%s\": %s\n" +msgstr "не вдалося прочитати рядок %d з файлу \"%s\": %s\n" + +#: option.c:522 +#, c-format +msgid "user-supplied old port number %hu corrected to %hu\n" +msgstr "вказаний користувачем старий номер порту %hu змінений на %hu\n" + +#: parallel.c:127 parallel.c:238 +#, c-format +msgid "could not create worker process: %s\n" +msgstr "не вдалося створити робочий процес: %s\n" + +#: parallel.c:146 parallel.c:259 +#, c-format +msgid "could not create worker thread: %s\n" +msgstr "не вдалося створити робочий потік: %s\n" + +#: parallel.c:300 +#, c-format +msgid "waitpid() failed: %s\n" +msgstr "помилка waitpid(): %s\n" + +#: parallel.c:304 +#, c-format +msgid "child process exited abnormally: status %d\n" +msgstr "дочірній процес завершився ненормально: статус %d\n" + +#: parallel.c:319 +#, c-format +msgid "child worker exited abnormally: %s\n" +msgstr "дочірній процес завершився аварійно: %s\n" + +#: pg_upgrade.c:108 +#, c-format +msgid "could not read permissions of directory \"%s\": %s\n" +msgstr "не вдалося прочитати права на каталог \"%s\": %s\n" + +#: pg_upgrade.c:123 +#, c-format +msgid "\n" +"Performing Upgrade\n" +"------------------\n" +msgstr "\n" +"Виконання оновлення\n" +"------------------\n" + +#: pg_upgrade.c:166 +#, c-format +msgid "Setting next OID for new cluster" +msgstr "Встановлення наступного OID для нового кластера" + +#: pg_upgrade.c:173 +#, c-format +msgid "Sync data directory to disk" +msgstr "Синхронізація каталогу даних на диск" + +#: pg_upgrade.c:185 +#, c-format +msgid "\n" +"Upgrade Complete\n" +"----------------\n" +msgstr "\n" +"Оновлення завершено\n" +"----------------\n" + +#: pg_upgrade.c:220 +#, c-format +msgid "%s: could not find own program executable\n" +msgstr "%s: не вдалося знайти ехе файл власної програми\n" + +#: pg_upgrade.c:246 +#, c-format +msgid "There seems to be a postmaster servicing the old cluster.\n" +"Please shutdown that postmaster and try again.\n" +msgstr "Мабуть, запущений процес postmaster, який обслуговує старий кластер.\n" +"Будь ласка, завершіть роботу процесу і спробуйте знову.\n" + +#: pg_upgrade.c:259 +#, c-format +msgid "There seems to be a postmaster servicing the new cluster.\n" +"Please shutdown that postmaster and try again.\n" +msgstr "Мабуть, запущений процес postmaster, який обслуговує новий кластер.\n" +"Будь ласка, завершіть роботу процесу і спробуйте знову.\n" + +#: pg_upgrade.c:273 +#, c-format +msgid "Analyzing all rows in the new cluster" +msgstr "Аналіз всіх рядків у новому кластері" + +#: pg_upgrade.c:286 +#, c-format +msgid "Freezing all rows in the new cluster" +msgstr "Закріплення всіх рядків у новому кластері" + +#: pg_upgrade.c:306 +#, c-format +msgid "Restoring global objects in the new cluster" +msgstr "Відновлення глобальних об'єктів у новому кластері" + +#: pg_upgrade.c:321 +#, c-format +msgid "Restoring database schemas in the new cluster\n" +msgstr "Відновлення схем баз даних у новому кластері\n" + +#: pg_upgrade.c:425 +#, c-format +msgid "Deleting files from new %s" +msgstr "Видалення файлів з нового %s" + +#: pg_upgrade.c:429 +#, c-format +msgid "could not delete directory \"%s\"\n" +msgstr "не вдалося видалити каталог \"%s\"\n" + +#: pg_upgrade.c:448 +#, c-format +msgid "Copying old %s to new server" +msgstr "Копіювання старого %s до нового серверу" + +#: pg_upgrade.c:475 +#, c-format +msgid "Setting next transaction ID and epoch for new cluster" +msgstr "Установка наступного ID транзакції й епохи для нового кластера" + +#: pg_upgrade.c:505 +#, c-format +msgid "Setting next multixact ID and offset for new cluster" +msgstr "Установка наступного ID і зсуву мультитранзакції для нового кластера" + +#: pg_upgrade.c:529 +#, c-format +msgid "Setting oldest multixact ID in new cluster" +msgstr "Установка найстаршого ID мультитранзакції в новому кластері" + +#: pg_upgrade.c:549 +#, c-format +msgid "Resetting WAL archives" +msgstr "Скидання архівів WAL" + +#: pg_upgrade.c:592 +#, c-format +msgid "Setting frozenxid and minmxid counters in new cluster" +msgstr "Установка лічильників frozenxid і minmxid у новому кластері" + +#: pg_upgrade.c:594 +#, c-format +msgid "Setting minmxid counter in new cluster" +msgstr "Установка лічильника minmxid у новому кластері" + +#: relfilenode.c:35 +#, c-format +msgid "Cloning user relation files\n" +msgstr "Клонування файлів користувацьких відношень\n" + +#: relfilenode.c:38 +#, c-format +msgid "Copying user relation files\n" +msgstr "Копіювання файлів користувацьких відношень\n" + +#: relfilenode.c:41 +#, c-format +msgid "Linking user relation files\n" +msgstr "Підключення файлів користувацьких відношень посиланнями\n" + +#: relfilenode.c:115 +#, c-format +msgid "old database \"%s\" not found in the new cluster\n" +msgstr "стара база даних \"%s\" не знайдена в новому кластері\n" + +#: relfilenode.c:234 +#, c-format +msgid "error while checking for file existence \"%s.%s\" (\"%s\" to \"%s\"): %s\n" +msgstr "помилка під час перевірки існування файлу \"%s.%s\" (з \"%s\" в \"%s\"): %s\n" + +#: relfilenode.c:252 +#, c-format +msgid "rewriting \"%s\" to \"%s\"\n" +msgstr "перезаписування \"%s\" в \"%s\"\n" + +#: relfilenode.c:260 +#, c-format +msgid "cloning \"%s\" to \"%s\"\n" +msgstr "клонування \"%s\" до \"%s\"\n" + +#: relfilenode.c:265 +#, c-format +msgid "copying \"%s\" to \"%s\"\n" +msgstr "копіювання \"%s\" в \"%s\"\n" + +#: relfilenode.c:270 +#, c-format +msgid "linking \"%s\" to \"%s\"\n" +msgstr "створення посилання на \"%s\" в \"%s\"\n" + +#: server.c:33 +#, c-format +msgid "connection to database failed: %s" +msgstr "помилка підключення до бази даних: %s" + +#: server.c:39 server.c:141 util.c:135 util.c:165 +#, c-format +msgid "Failure, exiting\n" +msgstr "Помилка, вихід\n" + +#: server.c:131 +#, c-format +msgid "executing: %s\n" +msgstr "виконується: %s\n" + +#: server.c:137 +#, c-format +msgid "SQL command failed\n" +"%s\n" +"%s" +msgstr "Помилка SQL-команди\n" +"%s\n" +"%s" + +#: server.c:167 +#, c-format +msgid "could not open version file \"%s\": %m\n" +msgstr "не вдалося відкрити файл версії \"%s\": %m\n" + +#: server.c:171 +#, c-format +msgid "could not parse version file \"%s\"\n" +msgstr "не вдалося проаналізувати файл версії \"%s\"\n" + +#: server.c:297 +#, c-format +msgid "\n" +"connection to database failed: %s" +msgstr "\n" +"помилка підключення до бази даних: %s" + +#: server.c:302 +#, c-format +msgid "could not connect to source postmaster started with the command:\n" +"%s\n" +msgstr "не вдалося підключитися до початкового процесу postmaster, запущеного командою:\n" +"%s\n" + +#: server.c:306 +#, c-format +msgid "could not connect to target postmaster started with the command:\n" +"%s\n" +msgstr "не вдалося підключитися до цільового процесу postmaster, запущеного командою:\n" +"%s\n" + +#: server.c:320 +#, c-format +msgid "pg_ctl failed to start the source server, or connection failed\n" +msgstr "pg_ctl не зміг запустити початковий сервер або сталася помилка підключення\n" + +#: server.c:322 +#, c-format +msgid "pg_ctl failed to start the target server, or connection failed\n" +msgstr "pg_ctl не зміг запустити цільовий сервер або сталася помилка підключення\n" + +#: server.c:367 +#, c-format +msgid "out of memory\n" +msgstr "недостатньо пам'яті\n" + +#: server.c:380 +#, c-format +msgid "libpq environment variable %s has a non-local server value: %s\n" +msgstr "у змінній середовища для libpq %s задано не локальне значення: %s\n" + +#: tablespace.c:28 +#, c-format +msgid "Cannot upgrade to/from the same system catalog version when\n" +"using tablespaces.\n" +msgstr "Оновлення в межах однієї версії системного каталогу неможливе,\n" +"якщо використовуються табличні простори.\n" + +#: tablespace.c:86 +#, c-format +msgid "tablespace directory \"%s\" does not exist\n" +msgstr "каталог табличного простору \"%s\" не існує\n" + +#: tablespace.c:90 +#, c-format +msgid "could not stat tablespace directory \"%s\": %s\n" +msgstr "не вдалося отримати стан каталогу табличного простору \"%s\": %s\n" + +#: tablespace.c:95 +#, c-format +msgid "tablespace path \"%s\" is not a directory\n" +msgstr "шлях табличного простору \"%s\" не вказує на каталог\n" + +#: util.c:49 +#, c-format +msgid " " +msgstr " " + +#: util.c:82 +#, c-format +msgid "%-*s" +msgstr "%-*s" + +#: util.c:174 +#, c-format +msgid "ok" +msgstr "ok" + +#: version.c:29 +#, c-format +msgid "Checking for large objects" +msgstr "Перевірка великих об'єктів" + +#: version.c:77 version.c:384 +#, c-format +msgid "warning" +msgstr "попередження" + +#: version.c:79 +#, c-format +msgid "\n" +"Your installation contains large objects. The new database has an\n" +"additional large object permission table. After upgrading, you will be\n" +"given a command to populate the pg_largeobject_metadata table with\n" +"default permissions.\n\n" +msgstr "\n" +"Ваша інсталяція містить великі об'єкти. Нова база даних має\n" +"додаткову таблицю з правами для великих об'єктів. Після оновлення ви отримаєте команду для заповнення таблиці pg_largeobject_metadata \n" +"з правами за замовчуванням.\n\n" + +#: version.c:85 +#, c-format +msgid "\n" +"Your installation contains large objects. The new database has an\n" +"additional large object permission table, so default permissions must be\n" +"defined for all large objects. The file\n" +" %s\n" +"when executed by psql by the database superuser will set the default\n" +"permissions.\n\n" +msgstr "\n" +"Ваша інсталяція містить великі об'єкти. Нова база даних має\n" +"додаткову таблицю з правами для великих об'єктів, тож для всіх\n" +"великих об'єктів повинні визначатись права за замовчуванням. Файл\n" +" %s\n" +"дозволяє встановити такі права (він призначений для виконання в psql\n" +"суперкористувачем бази даних).\n\n" + +#: version.c:239 +#, c-format +msgid "Checking for incompatible \"line\" data type" +msgstr "Перевірка несумісного типу даних \"line\"" + +#: version.c:246 +#, c-format +msgid "Your installation contains the \"line\" data type in user tables. This\n" +"data type changed its internal and input/output format between your old\n" +"and new clusters so this cluster cannot currently be upgraded. You can\n" +"remove the problem tables and restart the upgrade. A list of the problem\n" +"columns is in the file:\n" +" %s\n\n" +msgstr "Користувацькі таблиці у вашій інсталяції містять тип даних \"line\". У\n" +"старому кластері внутрішній формат введення/виведення цього типу\n" +"відрізняється від нового, тож в поточному стані оновити кластер неможливо. Ви\n" +"можете видалити проблемні таблиці і перезавантажити оновлення. Список\n" +"проблемних стовпців подано у файлі:\n" +" %s\n\n" + +#: version.c:276 +#, c-format +msgid "Checking for invalid \"unknown\" user columns" +msgstr "Перевірка неприпустимих користувацьких стовпців \"unknown\"" + +#: version.c:283 +#, c-format +msgid "Your installation contains the \"unknown\" data type in user tables. This\n" +"data type is no longer allowed in tables, so this cluster cannot currently\n" +"be upgraded. You can remove the problem tables and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" +" %s\n\n" +msgstr "Користувацькі таблиці у вашій інсталяції містять тип даних \"unknown\". Цей тип даних\n" +"більше не допускається в таблицях, тож в поточному стані оновити кластер неможливо. Ви\n" +"можете видалити проблемні таблиці і перезавантажити оновлення. Список проблемних стовпців\n" +"подано у файлі:\n" +" %s\n\n" + +#: version.c:306 +#, c-format +msgid "Checking for hash indexes" +msgstr "Перевірка геш-індексів" + +#: version.c:386 +#, c-format +msgid "\n" +"Your installation contains hash indexes. These indexes have different\n" +"internal formats between your old and new clusters, so they must be\n" +"reindexed with the REINDEX command. After upgrading, you will be given\n" +"REINDEX instructions.\n\n" +msgstr "\n" +"Ваша інсталяція містить геш-індекси. Ці індекси мають різні внутрішні\n" +"формати в старому і новому кластерах, тож їх потрібно повторно індексувати\n" +"за допомогою команди REINDEX. Після оновлення вам буде надано інструкції REINDEX.\n\n" + +#: version.c:392 +#, c-format +msgid "\n" +"Your installation contains hash indexes. These indexes have different\n" +"internal formats between your old and new clusters, so they must be\n" +"reindexed with the REINDEX command. The file\n" +" %s\n" +"when executed by psql by the database superuser will recreate all invalid\n" +"indexes; until then, none of these indexes will be used.\n\n" +msgstr "\n" +"Ваша інсталяція містить геш-індекси. Ці індекси мають різні внутрішні\n" +"формати в старому і новому кластерах, тож їх потрібно повторно індексувати\n" +"за допомогою команди REINDEX. Файл\n" +" %s\n" +"після виконання суперкористувачем бази даних в psql, повторно створить\n" +"всі неприпустимі індекси; до цього ніякі геш-індекси не будуть використовуватись.\n\n" + +#: version.c:418 +#, c-format +msgid "Checking for invalid \"sql_identifier\" user columns" +msgstr "Перевірка неприпустимих користувацьких стовпців \"sql_identifier\"" + +#: version.c:426 +#, c-format +msgid "Your installation contains the \"sql_identifier\" data type in user tables\n" +"and/or indexes. The on-disk format for this data type has changed, so this\n" +"cluster cannot currently be upgraded. You can remove the problem tables or\n" +"change the data type to \"name\" and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" +" %s\n\n" +msgstr "Користувацькі таблиці або індекси у вашій інсталяції містять тип даних \"sql_identifier\". \n" +"Формат зберігання цього типу на диску змінився, тож в поточному стані оновити \n" +"кластер неможливо. Ви можете видалити проблемні таблиці або змінити тип даних \n" +"на \"name\" і спробувати знову. Список проблемних стовпців подано у файлі:\n" +" %s\n\n" + diff --git a/src/bin/pg_verifybackup/nls.mk b/src/bin/pg_verifybackup/nls.mk index 8c4e5ee031d7d..8dd74d30f07b5 100644 --- a/src/bin/pg_verifybackup/nls.mk +++ b/src/bin/pg_verifybackup/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_verifybackup/nls.mk CATALOG_NAME = pg_verifybackup -AVAIL_LANGUAGES = fr sv +AVAIL_LANGUAGES = de es fr ja ko ru sv uk zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \ parse_manifest.c \ pg_verifybackup.c \ diff --git a/src/bin/pg_verifybackup/po/de.po b/src/bin/pg_verifybackup/po/de.po new file mode 100644 index 0000000000000..6cf9d8fee17b5 --- /dev/null +++ b/src/bin/pg_verifybackup/po/de.po @@ -0,0 +1,501 @@ +# German message translation file for pg_verifybackup +# Copyright (C) 2020-2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_verifybackup (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_verifybackup (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-04-17 02:45+0000\n" +"PO-Revision-Date: 2021-04-17 09:54+0200\n" +"Last-Translator: Peter Eisentraut \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "Fatal: " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "Fehler: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "Warnung: " + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "Speicher aufgebraucht\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" + +#: ../../common/jsonapi.c:1066 +#, c-format +msgid "Escape sequence \"\\%s\" is invalid." +msgstr "Escape-Sequenz »\\%s« ist nicht gültig." + +#: ../../common/jsonapi.c:1069 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "Zeichen mit Wert 0x%02x muss escapt werden." + +#: ../../common/jsonapi.c:1072 +#, c-format +msgid "Expected end of input, but found \"%s\"." +msgstr "Ende der Eingabe erwartet, aber »%s« gefunden." + +#: ../../common/jsonapi.c:1075 +#, c-format +msgid "Expected array element or \"]\", but found \"%s\"." +msgstr "Array-Element oder »]« erwartet, aber »%s« gefunden." + +#: ../../common/jsonapi.c:1078 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%s\"." +msgstr "»,« oder »]« erwartet, aber »%s« gefunden." + +#: ../../common/jsonapi.c:1081 +#, c-format +msgid "Expected \":\", but found \"%s\"." +msgstr "»:« erwartet, aber »%s« gefunden." + +#: ../../common/jsonapi.c:1084 +#, c-format +msgid "Expected JSON value, but found \"%s\"." +msgstr "JSON-Wert erwartet, aber »%s« gefunden." + +#: ../../common/jsonapi.c:1087 +msgid "The input string ended unexpectedly." +msgstr "Die Eingabezeichenkette endete unerwartet." + +#: ../../common/jsonapi.c:1089 +#, c-format +msgid "Expected string or \"}\", but found \"%s\"." +msgstr "Zeichenkette oder »}« erwartet, aber »%s« gefunden." + +#: ../../common/jsonapi.c:1092 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%s\"." +msgstr "»,« oder »}« erwartet, aber »%s« gefunden." + +#: ../../common/jsonapi.c:1095 +#, c-format +msgid "Expected string, but found \"%s\"." +msgstr "Zeichenkette erwartet, aber »%s« gefunden." + +#: ../../common/jsonapi.c:1098 +#, c-format +msgid "Token \"%s\" is invalid." +msgstr "Token »%s« ist ungültig." + +#: ../../common/jsonapi.c:1101 +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 kann nicht in »text« umgewandelt werden." + +#: ../../common/jsonapi.c:1103 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "Nach »\\u« müssen vier Hexadezimalziffern folgen." + +#: ../../common/jsonapi.c:1106 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "Unicode-Escape-Werte können nicht für Code-Punkt-Werte über 007F verwendet werden, wenn die Kodierung nicht UTF8 ist." + +#: ../../common/jsonapi.c:1108 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "Unicode-High-Surrogate darf nicht auf ein High-Surrogate folgen." + +#: ../../common/jsonapi.c:1110 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Unicode-Low-Surrogate muss auf ein High-Surrogate folgen." + +#: parse_manifest.c:152 +msgid "manifest ended unexpectedly" +msgstr "Manifest endete unerwartet" + +#: parse_manifest.c:191 +msgid "unexpected object start" +msgstr "unerwarteter Objektstart" + +#: parse_manifest.c:224 +msgid "unexpected object end" +msgstr "unerwartetes Objektende" + +#: parse_manifest.c:251 +msgid "unexpected array start" +msgstr "unerwarteter Array-Start" + +#: parse_manifest.c:274 +msgid "unexpected array end" +msgstr "unerwartetes Array-Ende" + +#: parse_manifest.c:299 +msgid "expected version indicator" +msgstr "unerwartete Versionskennzeichnung" + +#: parse_manifest.c:328 +msgid "unrecognized top-level field" +msgstr "unbekanntes Feld auf oberster Ebene" + +#: parse_manifest.c:347 +msgid "unexpected file field" +msgstr "unerwartetes Feld für Datei" + +#: parse_manifest.c:361 +msgid "unexpected WAL range field" +msgstr "unerwartetes Feld für WAL-Bereich" + +#: parse_manifest.c:367 +msgid "unexpected object field" +msgstr "unbekanntes Feld für Objekt" + +#: parse_manifest.c:397 +msgid "unexpected manifest version" +msgstr "unerwartete Manifestversion" + +#: parse_manifest.c:448 +msgid "unexpected scalar" +msgstr "unerwarteter Skalar" + +#: parse_manifest.c:472 +msgid "missing path name" +msgstr "fehlender Pfadname" + +#: parse_manifest.c:475 +msgid "both path name and encoded path name" +msgstr "sowohl Pfadname als auch kodierter Pfadname angegeben" + +#: parse_manifest.c:477 +msgid "missing size" +msgstr "Größenangabe fehlt" + +#: parse_manifest.c:480 +msgid "checksum without algorithm" +msgstr "Prüfsumme ohne Algorithmus" + +#: parse_manifest.c:494 +msgid "could not decode file name" +msgstr "konnte Dateinamen nicht dekodieren" + +#: parse_manifest.c:504 +msgid "file size is not an integer" +msgstr "Dateigröße ist keine ganze Zahl" + +#: parse_manifest.c:510 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "unbekannter Prüfsummenalgorithmus: »%s«" + +#: parse_manifest.c:529 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "ungültige Prüfsumme für Datei »%s«: »%s«" + +#: parse_manifest.c:572 +msgid "missing timeline" +msgstr "Zeitleiste fehlt" + +#: parse_manifest.c:574 +msgid "missing start LSN" +msgstr "Start-LSN fehlt" + +#: parse_manifest.c:576 +msgid "missing end LSN" +msgstr "End-LSN fehlt" + +#: parse_manifest.c:582 +msgid "timeline is not an integer" +msgstr "Zeitleiste ist keine ganze Zahl" + +#: parse_manifest.c:585 +msgid "could not parse start LSN" +msgstr "konnte Start-LSN nicht parsen" + +#: parse_manifest.c:588 +msgid "could not parse end LSN" +msgstr "konnte End-LSN nicht parsen" + +#: parse_manifest.c:649 +msgid "expected at least 2 lines" +msgstr "mindestens 2 Zeilen erwartet" + +#: parse_manifest.c:652 +msgid "last line not newline-terminated" +msgstr "letzte Zeile nicht durch Newline abgeschlossen" + +#: parse_manifest.c:657 +#, c-format +msgid "out of memory" +msgstr "Speicher aufgebraucht" + +#: parse_manifest.c:659 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "konnte Prüfsumme des Manifests nicht initialisieren" + +#: parse_manifest.c:661 +#, c-format +msgid "could not update checksum of manifest" +msgstr "konnte Prüfsumme des Manifests nicht aktualisieren" + +#: parse_manifest.c:664 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "konnte Prüfsumme des Manifests nicht abschließen" + +#: parse_manifest.c:668 +#, c-format +msgid "manifest has no checksum" +msgstr "Manifest hat keine Prüfsumme" + +#: parse_manifest.c:672 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "ungültige Manifestprüfsumme: »%s«" + +#: parse_manifest.c:676 +#, c-format +msgid "manifest checksum mismatch" +msgstr "Manifestprüfsumme stimmt nicht überein" + +#: parse_manifest.c:691 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "konnte Backup-Manifest nicht parsen: %s" + +#: pg_verifybackup.c:255 pg_verifybackup.c:265 pg_verifybackup.c:277 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" + +#: pg_verifybackup.c:264 +#, c-format +msgid "no backup directory specified" +msgstr "kein Backup-Verzeichnis angegeben" + +#: pg_verifybackup.c:275 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" + +#: pg_verifybackup.c:298 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "" +"Das Programm »%s« wird von %s benötigt, aber wurde nicht im\n" +"selben Verzeichnis wie »%s« gefunden.\n" +"Prüfen Sie Ihre Installation." + +#: pg_verifybackup.c:303 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "" +"Das Programm »%s« wurde von %s gefunden,\n" +"aber es hatte nicht die gleiche Version wie %s.\n" +"Prüfen Sie Ihre Installation." + +#: pg_verifybackup.c:361 +#, c-format +msgid "backup successfully verified\n" +msgstr "Backup erfolgreich überprüft\n" + +#: pg_verifybackup.c:387 pg_verifybackup.c:723 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "konnte Datei »%s« nicht öffnen: %m" + +#: pg_verifybackup.c:391 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" + +#: pg_verifybackup.c:411 pg_verifybackup.c:752 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "konnte Datei »%s« nicht lesen: %m" + +#: pg_verifybackup.c:414 +#, c-format +msgid "could not read file \"%s\": read %d of %lld" +msgstr "konnte Datei »%s« nicht lesen: %d von %lld gelesen" + +#: pg_verifybackup.c:474 +#, c-format +msgid "duplicate path name in backup manifest: \"%s\"" +msgstr "doppelter Pfadname im Backup-Manifest: »%s«" + +#: pg_verifybackup.c:537 pg_verifybackup.c:544 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "konnte Verzeichnis »%s« nicht öffnen: %m" + +#: pg_verifybackup.c:576 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "konnte Verzeichnis »%s« nicht schließen: %m" + +#: pg_verifybackup.c:596 +#, c-format +msgid "could not stat file or directory \"%s\": %m" +msgstr "konnte »stat« für Datei oder Verzeichnis »%s« nicht ausführen: %m" + +#: pg_verifybackup.c:619 +#, c-format +msgid "\"%s\" is not a file or directory" +msgstr "»%s« ist keine Datei und kein Verzeichnis" + +#: pg_verifybackup.c:629 +#, c-format +msgid "\"%s\" is present on disk but not in the manifest" +msgstr "»%s« ist auf der Festplatte vorhanden, aber nicht im Manifest" + +#: pg_verifybackup.c:641 +#, c-format +msgid "\"%s\" has size %lld on disk but size %zu in the manifest" +msgstr "»%s« hat Größe %lld auf Festplatte aber Größe %zu im Manifest" + +#: pg_verifybackup.c:668 +#, c-format +msgid "\"%s\" is present in the manifest but not on disk" +msgstr "»%s« steht im Manifest, ist aber nicht auf der Festplatte vorhanden" + +#: pg_verifybackup.c:731 +#, c-format +msgid "could not initialize checksum of file \"%s\"" +msgstr "konnte Prüfsumme der Datei »%s« nicht initialisieren" + +#: pg_verifybackup.c:743 +#, c-format +msgid "could not update checksum of file \"%s\"" +msgstr "konnte Prüfsumme der Datei »%s« nicht aktualisieren" + +#: pg_verifybackup.c:758 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "konnte Datei »%s« nicht schließen: %m" + +#: pg_verifybackup.c:777 +#, c-format +msgid "file \"%s\" should contain %zu bytes, but read %zu bytes" +msgstr "Datei »%s« sollte %zu Bytes enthalten, aber %zu Bytes wurden gelesen" + +#: pg_verifybackup.c:787 +#, c-format +msgid "could not finalize checksum of file \"%s\"" +msgstr "konnte Prüfsumme der Datei »%s« nicht abschließen" + +#: pg_verifybackup.c:795 +#, c-format +msgid "file \"%s\" has checksum of length %d, but expected %d" +msgstr "Datei »%s« hat Prüfsumme mit Länge %d, aber %d wurde erwartet" + +#: pg_verifybackup.c:799 +#, c-format +msgid "checksum mismatch for file \"%s\"" +msgstr "Prüfsumme stimmt nicht überein für Datei »%s«" + +#: pg_verifybackup.c:823 +#, c-format +msgid "WAL parsing failed for timeline %u" +msgstr "Parsen des WAL fehlgeschlagen für Zeitleiste %u" + +#: pg_verifybackup.c:909 +#, c-format +msgid "" +"%s verifies a backup against the backup manifest.\n" +"\n" +msgstr "" +"%s überprüft ein Backup anhand eines Backup-Manifests.\n" +"\n" + +#: pg_verifybackup.c:910 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... BACKUPDIR\n" +"\n" +msgstr "" +"Aufruf:\n" +" %s [OPTION]... BACKUPVERZ\n" +"\n" + +#: pg_verifybackup.c:911 +#, c-format +msgid "Options:\n" +msgstr "Optionen:\n" + +#: pg_verifybackup.c:912 +#, c-format +msgid " -e, --exit-on-error exit immediately on error\n" +msgstr " -e, --exit-on-error bei Fehler sofort beenden\n" + +#: pg_verifybackup.c:913 +#, c-format +msgid " -i, --ignore=RELATIVE_PATH ignore indicated path\n" +msgstr " -i, --ignore=REL-PFAD angegebenen Pfad ignorieren\n" + +#: pg_verifybackup.c:914 +#, c-format +msgid " -m, --manifest-path=PATH use specified path for manifest\n" +msgstr " -m, --manifest-path=PFAD angegebenen Pfad für Manifest verwenden\n" + +#: pg_verifybackup.c:915 +#, c-format +msgid " -n, --no-parse-wal do not try to parse WAL files\n" +msgstr " -n, --no-parse-wal nicht versuchen WAL-Dateien zu parsen\n" + +#: pg_verifybackup.c:916 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet keine Ausgabe, außer Fehler\n" + +#: pg_verifybackup.c:917 +#, c-format +msgid " -s, --skip-checksums skip checksum verification\n" +msgstr " -s, --skip-checksums Überprüfung der Prüfsummen überspringen\n" + +#: pg_verifybackup.c:918 +#, c-format +msgid " -w, --wal-directory=PATH use specified path for WAL files\n" +msgstr " -w, --wal-directory=PFAD angegebenen Pfad für WAL-Dateien verwenden\n" + +#: pg_verifybackup.c:919 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" + +#: pg_verifybackup.c:920 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" + +#: pg_verifybackup.c:921 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Berichten Sie Fehler an <%s>.\n" + +#: pg_verifybackup.c:922 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s Homepage: <%s>\n" diff --git a/src/bin/pg_verifybackup/po/es.po b/src/bin/pg_verifybackup/po/es.po new file mode 100644 index 0000000000000..cc1a40033d639 --- /dev/null +++ b/src/bin/pg_verifybackup/po/es.po @@ -0,0 +1,477 @@ +# Spanish message translation file for pg_verifybackup +# Copyright (C) 2020 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_verifybackup (PostgreSQL) package. +# Álvaro Herrera , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_verifybackup (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-13 10:44+0000\n" +"PO-Revision-Date: 2020-10-16 16:01-0300\n" +"Last-Translator: Álvaro Herrera \n" +"Language-Team: PgSQL-es-ayuda \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.3\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "fatal: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "error: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "precaución: " + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "memoria agotada\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "no se puede duplicar un puntero nulo (error interno)\n" + +#: ../../common/jsonapi.c:1064 +#, c-format +msgid "Escape sequence \"\\%s\" is invalid." +msgstr "La secuencia de escape «%s» no es válida." + +#: ../../common/jsonapi.c:1067 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "Los caracteres con valor 0x%02x deben ser escapados." + +#: ../../common/jsonapi.c:1070 +#, c-format +msgid "Expected end of input, but found \"%s\"." +msgstr "Se esperaba el fin de la entrada, se encontró «%s»." + +#: ../../common/jsonapi.c:1073 +#, c-format +msgid "Expected array element or \"]\", but found \"%s\"." +msgstr "Se esperaba un elemento de array o «]», se encontró «%s»." + +#: ../../common/jsonapi.c:1076 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%s\"." +msgstr "Se esperaba «,» o «]», se encontró «%s»." + +#: ../../common/jsonapi.c:1079 +#, c-format +msgid "Expected \":\", but found \"%s\"." +msgstr "Se esperaba «:», se encontró «%s»." + +#: ../../common/jsonapi.c:1082 +#, c-format +msgid "Expected JSON value, but found \"%s\"." +msgstr "Se esperaba un valor JSON, se encontró «%s»." + +#: ../../common/jsonapi.c:1085 +msgid "The input string ended unexpectedly." +msgstr "La cadena de entrada terminó inesperadamente." + +#: ../../common/jsonapi.c:1087 +#, c-format +msgid "Expected string or \"}\", but found \"%s\"." +msgstr "Se esperaba una cadena o «}», se encontró «%s»." + +#: ../../common/jsonapi.c:1090 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%s\"." +msgstr "Se esperaba «,» o «}», se encontró «%s»." + +#: ../../common/jsonapi.c:1093 +#, c-format +msgid "Expected string, but found \"%s\"." +msgstr "Se esperaba una cadena, se encontró «%s»." + +#: ../../common/jsonapi.c:1096 +#, c-format +msgid "Token \"%s\" is invalid." +msgstr "El elemento «%s» no es válido." + +#: ../../common/jsonapi.c:1099 +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 no puede ser convertido a text." + +#: ../../common/jsonapi.c:1101 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "«\\u» debe ser seguido por cuatro dígitos hexadecimales." + +#: ../../common/jsonapi.c:1104 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "Los valores de escape Unicode no se pueden utilizar para valores de código superiores a 007F cuando la codificación no es UTF8." + +#: ../../common/jsonapi.c:1106 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "Un «high-surrogate» Unicode no puede venir después de un «high-surrogate»." + +#: ../../common/jsonapi.c:1108 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Un «low-surrogate» Unicode debe seguir a un «high-surrogate»." + +#: parse_manifest.c:152 +msgid "manifest ended unexpectedly" +msgstr "el manifiesto terminó inesperadamente" + +#: parse_manifest.c:191 +msgid "unexpected object start" +msgstr "inicio de objeto inesperado" + +#: parse_manifest.c:224 +msgid "unexpected object end" +msgstr "fin de objeto inesperado" + +#: parse_manifest.c:251 +msgid "unexpected array start" +msgstr "inicio de array inesperado" + +#: parse_manifest.c:274 +msgid "unexpected array end" +msgstr "fin de array inesperado" + +#: parse_manifest.c:299 +msgid "expected version indicator" +msgstr "se esperaba indicador de versión" + +#: parse_manifest.c:328 +#| msgid "unrecognized top-level field" +msgid "unknown toplevel field" +msgstr "campo de nivel superior no reconocido" + +#: parse_manifest.c:347 +msgid "unexpected file field" +msgstr "campo de archivo inesperado" + +#: parse_manifest.c:361 +#| msgid "unexpected WAL range field" +msgid "unexpected wal range field" +msgstr "campo de rango de wal inesperado" + +#: parse_manifest.c:367 +msgid "unexpected object field" +msgstr "campo de objeto inesperado" + +#: parse_manifest.c:397 +msgid "unexpected manifest version" +msgstr "versión de manifiesto inesperada" + +#: parse_manifest.c:448 +msgid "unexpected scalar" +msgstr "escalar inesperado" + +#: parse_manifest.c:472 +#| msgid "missing path name" +msgid "missing pathname" +msgstr "ruta de archivo faltante" + +#: parse_manifest.c:475 +#| msgid "both path name and encoded path name" +msgid "both pathname and encoded pathname" +msgstr "hay ambos ruta de archivo (pathname) y ruta codificada (encoded pathname)" + +#: parse_manifest.c:477 +msgid "missing size" +msgstr "tamaño faltante" + +#: parse_manifest.c:480 +msgid "checksum without algorithm" +msgstr "suma de comprobación sin algoritmo" + +#: parse_manifest.c:494 +#| msgid "could not decode file name" +msgid "unable to decode filename" +msgstr "no se pudo decodificar el nombre del archivo" + +#: parse_manifest.c:504 +msgid "file size is not an integer" +msgstr "el tamaño del archivo no es un número entero" + +#: parse_manifest.c:510 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "algoritmo de suma de comprobación no reconocido: \"%s\"" + +#: parse_manifest.c:529 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "suma de comprobación no válida para el archivo \"%s\": \"%s\"" + +#: parse_manifest.c:572 +msgid "missing timeline" +msgstr "falta el timeline" + +#: parse_manifest.c:574 +msgid "missing start LSN" +msgstr "falta el LSN de inicio" + +#: parse_manifest.c:576 +msgid "missing end LSN" +msgstr "falta el LSN de término" + +#: parse_manifest.c:582 +msgid "timeline is not an integer" +msgstr "el timeline no es un número entero" + +#: parse_manifest.c:585 +#| msgid "could not parse start LSN" +msgid "unable to parse start LSN" +msgstr "no se pudo interpretar el LSN de inicio" + +#: parse_manifest.c:588 +#| msgid "could not parse end LSN" +msgid "unable to parse end LSN" +msgstr "no se pudo interpretar el LSN de término" + +#: parse_manifest.c:649 +msgid "expected at least 2 lines" +msgstr "esperado al menos 2 líneas" + +#: parse_manifest.c:652 +msgid "last line not newline-terminated" +msgstr "última línea no termina en nueva línea" + +#: parse_manifest.c:661 +#, c-format +msgid "manifest has no checksum" +msgstr "el manifiesto no tiene suma de comprobación" + +#: parse_manifest.c:665 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "suma de comprobación de manifiesto no válida: \"%s\"" + +#: parse_manifest.c:669 +#, c-format +msgid "manifest checksum mismatch" +msgstr "discordancia en la suma de comprobación del manifiesto" + +#: parse_manifest.c:683 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "no se pudo analizar el manifiesto de la copia de seguridad: %s" + +#: pg_verifybackup.c:255 pg_verifybackup.c:265 pg_verifybackup.c:277 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Pruebe «%s --help» para mayor información.\n" + +#: pg_verifybackup.c:264 +#, c-format +msgid "no backup directory specified" +msgstr "no fue especificado el directorio de respaldo" + +#: pg_verifybackup.c:275 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" + +#: pg_verifybackup.c:298 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "" +"%s necesita el programa «%s», pero no pudo encontrarlo en el mismo\n" +"directorio que «%s».\n" +"Verifique su instalación." + +#: pg_verifybackup.c:303 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "" +"El programa «%s» fue encontrado por «%s»,\n" +"pero no es de la misma versión que %s.\n" +"Verifique su instalación." + +#: pg_verifybackup.c:361 +#, c-format +msgid "backup successfully verified\n" +msgstr "copia de seguridad verificada correctamente\n" + +#: pg_verifybackup.c:387 pg_verifybackup.c:723 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "no se pudo abrir el archivo «%s»: %m" + +#: pg_verifybackup.c:391 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "no se pudo hacer stat al archivo «%s»: %m" + +#: pg_verifybackup.c:411 pg_verifybackup.c:738 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "no se pudo leer el archivo «%s»: %m" + +#: pg_verifybackup.c:414 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" + +#: pg_verifybackup.c:474 +#, c-format +#| msgid "duplicate path name in backup manifest: \"%s\"" +msgid "duplicate pathname in backup manifest: \"%s\"" +msgstr "nombre de ruta duplicado en el manifiesto de la copia de seguridad: \"%s\"" + +#: pg_verifybackup.c:537 pg_verifybackup.c:544 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "no se pudo abrir el directorio «%s»: %m" + +#: pg_verifybackup.c:576 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "no se pudo abrir el directorio «%s»: %m" + +#: pg_verifybackup.c:596 +#, c-format +msgid "could not stat file or directory \"%s\": %m" +msgstr "no se pudo hacer stat al archivo o directorio «%s»: %m" + +#: pg_verifybackup.c:619 +#, c-format +msgid "\"%s\" is not a file or directory" +msgstr "\"%s\" no es un archivo o directorio" + +#: pg_verifybackup.c:629 +#, c-format +msgid "\"%s\" is present on disk but not in the manifest" +msgstr "\"%s\" está presente en el disco pero no en el manifiesto" + +#: pg_verifybackup.c:641 +#, c-format +msgid "\"%s\" has size %zu on disk but size %zu in the manifest" +msgstr "\"%s\" tiene un tamaño %zu en el disco pero un tamaño %zu en el manifiesto" + +#: pg_verifybackup.c:668 +#, c-format +msgid "\"%s\" is present in the manifest but not on disk" +msgstr "\"%s\" está presente en el manifiesto pero no en el disco" + +#: pg_verifybackup.c:744 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "no se pudo cerrar el archivo «%s»: %m" + +#: pg_verifybackup.c:763 +#, c-format +msgid "file \"%s\" should contain %zu bytes, but read %zu bytes" +msgstr "el archivo \"%s\" debe contener %zu bytes, pero se leyeron %zu bytes" + +#: pg_verifybackup.c:774 +#, c-format +msgid "file \"%s\" has checksum of length %d, but expected %d" +msgstr "el archivo \"%s\" tiene una suma de comprobación de longitud %d, pero se esperaba %d" + +#: pg_verifybackup.c:778 +#, c-format +msgid "checksum mismatch for file \"%s\"" +msgstr "no coincide la suma de comprobación para el archivo \"%s\"" + +#: pg_verifybackup.c:804 +#, c-format +msgid "WAL parsing failed for timeline %u" +msgstr "Error al analizar el WAL para el timeline %u" + +#: pg_verifybackup.c:890 +#, c-format +msgid "" +"%s verifies a backup against the backup manifest.\n" +"\n" +msgstr "" +"%s verifica una copia de seguridad con el fichero de manifiesto de la copia de seguridad.\n" +"\n" + +#: pg_verifybackup.c:891 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... BACKUPDIR\n" +"\n" +msgstr "" +"Uso:\n" +" %s [OPCIÓN]... BACKUPDIR\n" +"\n" + +#: pg_verifybackup.c:892 +#, c-format +msgid "Options:\n" +msgstr "Opciones:\n" + +#: pg_verifybackup.c:893 +#, c-format +msgid " -e, --exit-on-error exit immediately on error\n" +msgstr " -e, --exit-on-error salir inmediatamente en caso de error\n" + +#: pg_verifybackup.c:894 +#, c-format +msgid " -i, --ignore=RELATIVE_PATH ignore indicated path\n" +msgstr " -i, --ignore=RELATIVE_PATH ignorar la ruta indicada\n" + +#: pg_verifybackup.c:895 +#, c-format +msgid " -m, --manifest-path=PATH use specified path for manifest\n" +msgstr " -m, --manifest-path=PATH usar la ruta especificada para el manifiesto\n" + +#: pg_verifybackup.c:896 +#, c-format +msgid " -n, --no-parse-wal do not try to parse WAL files\n" +msgstr " -n, --no-parse-wal no intentar analizar archivos WAL\n" + +#: pg_verifybackup.c:897 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet no escribir ningún mensaje, excepto errores\n" + +#: pg_verifybackup.c:898 +#, c-format +msgid " -s, --skip-checksums skip checksum verification\n" +msgstr " -s, --skip-checksums omitir la verificación de la suma de comprobación\n" + +#: pg_verifybackup.c:899 +#, c-format +msgid " -w, --wal-directory=PATH use specified path for WAL files\n" +msgstr " -w, --wal-directory=PATH utilizar la ruta especificada para los archivos WAL\n" + +#: pg_verifybackup.c:900 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version mostrar la información de la versión, luego salir\n" + +#: pg_verifybackup.c:901 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help muestra esta ayuda, luego salir\n" + +#: pg_verifybackup.c:902 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Reporte errores a <%s>.\n" + +#: pg_verifybackup.c:903 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Sitio web de %s: <%s>\n" diff --git a/src/bin/pg_verifybackup/po/fr.po b/src/bin/pg_verifybackup/po/fr.po index 4d55e05f053f9..9ad27058e3284 100644 --- a/src/bin/pg_verifybackup/po/fr.po +++ b/src/bin/pg_verifybackup/po/fr.po @@ -7,27 +7,27 @@ msgid "" msgstr "" "Project-Id-Version: pg_verifybackup (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-11 07:44+0000\n" -"PO-Revision-Date: 2020-05-11 10:14+0200\n" +"POT-Creation-Date: 2021-04-15 01:45+0000\n" +"PO-Revision-Date: 2021-04-15 08:45+0200\n" +"Last-Translator: \n" +"Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Last-Translator: \n" -"Language-Team: \n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal : " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "erreur : " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "attention : " @@ -43,82 +43,82 @@ msgstr "mémoire épuisée\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" -#: ../../common/jsonapi.c:1064 +#: ../../common/jsonapi.c:1066 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "La séquence d'échappement « \\%s » est invalide." -#: ../../common/jsonapi.c:1067 +#: ../../common/jsonapi.c:1069 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Le caractère de valeur 0x%02x doit être échappé." -#: ../../common/jsonapi.c:1070 +#: ../../common/jsonapi.c:1072 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Attendait une fin de l'entrée, mais a trouvé « %s »." -#: ../../common/jsonapi.c:1073 +#: ../../common/jsonapi.c:1075 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Élément de tableau ou « ] » attendu, mais trouvé « %s »." -#: ../../common/jsonapi.c:1076 +#: ../../common/jsonapi.c:1078 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "« , » ou « ] » attendu, mais trouvé « %s »." -#: ../../common/jsonapi.c:1079 +#: ../../common/jsonapi.c:1081 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "« : » attendu, mais trouvé « %s »." -#: ../../common/jsonapi.c:1082 +#: ../../common/jsonapi.c:1084 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "Valeur JSON attendue, mais « %s » trouvé." -#: ../../common/jsonapi.c:1085 +#: ../../common/jsonapi.c:1087 msgid "The input string ended unexpectedly." msgstr "La chaîne en entrée se ferme de manière inattendue." -#: ../../common/jsonapi.c:1087 +#: ../../common/jsonapi.c:1089 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Chaîne ou « } » attendu, mais « %s » trouvé" -#: ../../common/jsonapi.c:1090 +#: ../../common/jsonapi.c:1092 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "« , » ou « } » attendu, mais trouvé « %s »." -#: ../../common/jsonapi.c:1093 +#: ../../common/jsonapi.c:1095 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Chaîne attendue, mais « %s » trouvé." -#: ../../common/jsonapi.c:1096 +#: ../../common/jsonapi.c:1098 #, c-format msgid "Token \"%s\" is invalid." msgstr "Le jeton « %s » n'est pas valide." -#: ../../common/jsonapi.c:1099 +#: ../../common/jsonapi.c:1101 msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 ne peut pas être converti en texte." -#: ../../common/jsonapi.c:1101 +#: ../../common/jsonapi.c:1103 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "« \\u » doit être suivi par quatre chiffres hexadécimaux." -#: ../../common/jsonapi.c:1104 +#: ../../common/jsonapi.c:1106 msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." msgstr "les valeurs d'échappement Unicode ne peuvent pas être utilisées pour des valeurs de point code au-dessus de 007F quand l'encodage n'est pas UTF8." -#: ../../common/jsonapi.c:1106 +#: ../../common/jsonapi.c:1108 msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Une substitution unicode haute ne doit pas suivre une substitution haute." -#: ../../common/jsonapi.c:1108 +#: ../../common/jsonapi.c:1110 msgid "Unicode low surrogate must follow a high surrogate." msgstr "Une substitution unicode basse ne doit pas suivre une substitution haute." @@ -147,7 +147,7 @@ msgid "expected version indicator" msgstr "indicateur de version inattendu" #: parse_manifest.c:328 -msgid "unknown toplevel field" +msgid "unrecognized top-level field" msgstr "champ haut niveau inconnu" #: parse_manifest.c:347 @@ -155,7 +155,7 @@ msgid "unexpected file field" msgstr "champ de fichier inattendu" #: parse_manifest.c:361 -msgid "unexpected wal range field" +msgid "unexpected WAL range field" msgstr "champ d'intervalle de WAL inattendu" #: parse_manifest.c:367 @@ -171,12 +171,12 @@ msgid "unexpected scalar" msgstr "scalaire inattendu" #: parse_manifest.c:472 -msgid "missing pathname" -msgstr "chemin manquant" +msgid "missing path name" +msgstr "nom de chemin manquant" #: parse_manifest.c:475 -msgid "both pathname and encoded pathname" -msgstr "le chemin et le chemin encodé" +msgid "both path name and encoded path name" +msgstr "le nom du chemin et le nom du chemin encodé" #: parse_manifest.c:477 msgid "missing size" @@ -187,8 +187,8 @@ msgid "checksum without algorithm" msgstr "somme de contrôle sans algorithme" #: parse_manifest.c:494 -msgid "unable to decode filename" -msgstr "incapable de décoder le nom du fichier" +msgid "could not decode file name" +msgstr "n'a pas pu décoder le nom du fichier" #: parse_manifest.c:504 msgid "file size is not an integer" @@ -221,12 +221,12 @@ msgid "timeline is not an integer" msgstr "la timeline n'est pas un entier" #: parse_manifest.c:585 -msgid "unable to parse start LSN" -msgstr "incapable d'analyser le LSN de début" +msgid "could not parse start LSN" +msgstr "n'a pas pu analyser le LSN de début" #: parse_manifest.c:588 -msgid "unable to parse end LSN" -msgstr "incapable d'analyser le LSN de fin" +msgid "could not parse end LSN" +msgstr "n'a pas pu analyser le LSN de fin" #: parse_manifest.c:649 msgid "expected at least 2 lines" @@ -236,22 +236,42 @@ msgstr "attendait au moins deux lignes" msgid "last line not newline-terminated" msgstr "dernière ligne non terminée avec un caractère newline" +#: parse_manifest.c:657 +#, c-format +msgid "out of memory" +msgstr "mémoire épuisée" + +#: parse_manifest.c:659 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "n'a pas pu initialiser la somme de contrôle du manifeste" + #: parse_manifest.c:661 #, c-format +msgid "could not update checksum of manifest" +msgstr "n'a pas pu mettre à jour la somme de contrôle du manifeste" + +#: parse_manifest.c:664 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "n'a pas pu finaliser la somme de contrôle du manifeste" + +#: parse_manifest.c:668 +#, c-format msgid "manifest has no checksum" msgstr "le manifeste n'a pas de somme de contrôle" -#: parse_manifest.c:665 +#: parse_manifest.c:672 #, c-format msgid "invalid manifest checksum: \"%s\"" msgstr "somme de contrôle du manifeste invalide : « %s »" -#: parse_manifest.c:669 +#: parse_manifest.c:676 #, c-format msgid "manifest checksum mismatch" msgstr "différence de somme de contrôle pour le manifeste" -#: parse_manifest.c:683 +#: parse_manifest.c:691 #, c-format msgid "could not parse backup manifest: %s" msgstr "n'a pas pu analyser le manifeste de sauvegarde : %s" @@ -298,7 +318,7 @@ msgstr "" msgid "backup successfully verified\n" msgstr "sauvegarde vérifiée avec succès\n" -#: pg_verifybackup.c:387 pg_verifybackup.c:724 +#: pg_verifybackup.c:387 pg_verifybackup.c:723 #, c-format msgid "could not open file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier « %s » : %m" @@ -308,20 +328,20 @@ msgstr "n'a pas pu ouvrir le fichier « %s » : %m" msgid "could not stat file \"%s\": %m" msgstr "n'a pas pu tester le fichier « %s » : %m" -#: pg_verifybackup.c:411 pg_verifybackup.c:739 +#: pg_verifybackup.c:411 pg_verifybackup.c:752 #, c-format msgid "could not read file \"%s\": %m" msgstr "n'a pas pu lire le fichier « %s » : %m" #: pg_verifybackup.c:414 #, c-format -msgid "could not read file \"%s\": read %d of %zu" -msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %zu" +msgid "could not read file \"%s\": read %d of %lld" +msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %lld" #: pg_verifybackup.c:474 #, c-format -msgid "duplicate pathname in backup manifest: \"%s\"" -msgstr "chemin dupliqué dans le manifeste de sauvegarde : « %s »" +msgid "duplicate path name in backup manifest: \"%s\"" +msgstr "nom de chemin dupliqué dans le manifeste de sauvegarde : « %s »" #: pg_verifybackup.c:537 pg_verifybackup.c:544 #, c-format @@ -352,40 +372,55 @@ msgstr "« %s » est présent sur disque mais pas dans le manifeste" #: pg_verifybackup.c:641 #, c-format -msgid "\"%s\" has size %zu on disk but size %zu in the manifest" -msgstr "« %s » a une taille de %zu sur disque mais de %zu dans le manifeste" +msgid "\"%s\" has size %lld on disk but size %zu in the manifest" +msgstr "« %s » a une taille de %lld sur disque mais de %zu dans le manifeste" -#: pg_verifybackup.c:669 +#: pg_verifybackup.c:668 #, c-format msgid "\"%s\" is present in the manifest but not on disk" msgstr "« %s » est présent dans le manifeste mais pas sur disque" -#: pg_verifybackup.c:745 +#: pg_verifybackup.c:731 +#, c-format +msgid "could not initialize checksum of file \"%s\"" +msgstr "n'a pas pu initialiser la somme de contrôle du fichier « %s »" + +#: pg_verifybackup.c:743 +#, c-format +msgid "could not update checksum of file \"%s\"" +msgstr "n'a pas pu mettre à jour la somme de contrôle du fichier « %s »" + +#: pg_verifybackup.c:758 #, c-format msgid "could not close file \"%s\": %m" msgstr "n'a pas pu fermer le fichier « %s » : %m" -#: pg_verifybackup.c:764 +#: pg_verifybackup.c:777 #, c-format msgid "file \"%s\" should contain %zu bytes, but read %zu bytes" msgstr "le fichier « %s » devrait contenir %zu octets, mais la lecture produit %zu octets" -#: pg_verifybackup.c:775 +#: pg_verifybackup.c:787 +#, c-format +msgid "could not finalize checksum of file \"%s\"" +msgstr "n'a pas pu finaliser la somme de contrôle du fichier « %s »" + +#: pg_verifybackup.c:795 #, c-format msgid "file \"%s\" has checksum of length %d, but expected %d" msgstr "le fichier « %s » a une somme de contrôle de taille %d, alors que %d était attendu" -#: pg_verifybackup.c:779 +#: pg_verifybackup.c:799 #, c-format msgid "checksum mismatch for file \"%s\"" msgstr "différence de somme de contrôle pour le fichier « %s »" -#: pg_verifybackup.c:805 +#: pg_verifybackup.c:823 #, c-format msgid "WAL parsing failed for timeline %u" msgstr "analyse du WAL échouée pour la timeline %u" -#: pg_verifybackup.c:891 +#: pg_verifybackup.c:909 #, c-format msgid "" "%s verifies a backup against the backup manifest.\n" @@ -394,7 +429,7 @@ msgstr "" "%s vérifie une sauvegarde à partir du manifeste de sauvegarde.\n" "\n" -#: pg_verifybackup.c:892 +#: pg_verifybackup.c:910 #, c-format msgid "" "Usage:\n" @@ -405,57 +440,57 @@ msgstr "" " %s [OPTION]... REPSAUVEGARDE\n" "\n" -#: pg_verifybackup.c:893 +#: pg_verifybackup.c:911 #, c-format msgid "Options:\n" msgstr "Options :\n" -#: pg_verifybackup.c:894 +#: pg_verifybackup.c:912 #, c-format msgid " -e, --exit-on-error exit immediately on error\n" msgstr " -e, --exit-on-error quitte immédiatement en cas d'erreur\n" -#: pg_verifybackup.c:895 +#: pg_verifybackup.c:913 #, c-format msgid " -i, --ignore=RELATIVE_PATH ignore indicated path\n" msgstr " -i, --ignore=CHEMIN_RELATIF ignore le chemin indiqué\n" -#: pg_verifybackup.c:896 +#: pg_verifybackup.c:914 #, c-format msgid " -m, --manifest-path=PATH use specified path for manifest\n" msgstr " -m, --manifest-path=CHEMIN utilise le chemin spécifié pour le manifeste\n" -#: pg_verifybackup.c:897 +#: pg_verifybackup.c:915 #, c-format msgid " -n, --no-parse-wal do not try to parse WAL files\n" msgstr " -n, --no-parse-wal n'essaie pas d'analyse les fichiers WAL\n" -#: pg_verifybackup.c:898 +#: pg_verifybackup.c:916 #, c-format msgid " -q, --quiet do not print any output, except for errors\n" msgstr " -q, --quiet n'affiche aucun message sauf pour les erreurs\n" -#: pg_verifybackup.c:899 +#: pg_verifybackup.c:917 #, c-format msgid " -s, --skip-checksums skip checksum verification\n" msgstr " -s, --skip-checksums ignore la vérification des sommes de contrôle\n" -#: pg_verifybackup.c:900 +#: pg_verifybackup.c:918 #, c-format msgid " -w, --wal-directory=PATH use specified path for WAL files\n" msgstr " -w, --wal-directory=CHEMIN utilise le chemin spécifié pour les fichiers WAL\n" -#: pg_verifybackup.c:901 +#: pg_verifybackup.c:919 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version, puis quitte\n" -#: pg_verifybackup.c:902 +#: pg_verifybackup.c:920 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide, puis quitte\n" -#: pg_verifybackup.c:903 +#: pg_verifybackup.c:921 #, c-format msgid "" "\n" @@ -464,7 +499,10 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: pg_verifybackup.c:904 +#: pg_verifybackup.c:922 #, c-format msgid "%s home page: <%s>\n" msgstr "page d'accueil de %s : <%s>\n" + +#~ msgid "could not read file \"%s\": read %d of %zu" +#~ msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %zu" diff --git a/src/bin/pg_verifybackup/po/ja.po b/src/bin/pg_verifybackup/po/ja.po new file mode 100644 index 0000000000000..402694dbda210 --- /dev/null +++ b/src/bin/pg_verifybackup/po/ja.po @@ -0,0 +1,469 @@ +# Japanese message translation file for pg_verifybackup +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_verifybackup (PostgreSQL) package. +# Haiying Tang , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_verifybackup (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-01-06 20:06+0900\n" +"PO-Revision-Date: 2021-02-05 08:11+0100\n" +"Last-Translator: Haiying Tang \n" +"Language-Team: Japan PostgreSQL Users Group \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "致命的エラー: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "エラー: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "警告: " + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "メモリ不足です\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "null ポインタを複製できません (内部エラー)\n" + +#: ../../common/jsonapi.c:1064 +#, c-format +msgid "Escape sequence \"\\%s\" is invalid." +msgstr "エスケープシーケンス\"\\%s\"は不正です。" + +#: ../../common/jsonapi.c:1067 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "0x%02x値を持つ文字はエスケープしなければなりません" + +#: ../../common/jsonapi.c:1070 +#, c-format +msgid "Expected end of input, but found \"%s\"." +msgstr "入力の終端を想定していましたが、\"%s\"でした。" + +#: ../../common/jsonapi.c:1073 +#, c-format +msgid "Expected array element or \"]\", but found \"%s\"." +msgstr "配列要素または\"]\"を想定していましたが、\"%s\"でした。" + +#: ../../common/jsonapi.c:1076 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%s\"." +msgstr "\",\"または\"]\"を想定していましたが、\"%s\"でした。" + +#: ../../common/jsonapi.c:1079 +#, c-format +msgid "Expected \":\", but found \"%s\"." +msgstr "\":\"を想定していましたが、\"%s\"でした。" + +#: ../../common/jsonapi.c:1082 +#, c-format +msgid "Expected JSON value, but found \"%s\"." +msgstr "JSON値を想定していましたが、\"%s\"でした。" + +#: ../../common/jsonapi.c:1085 +msgid "The input string ended unexpectedly." +msgstr "入力文字列が予期せず終了しました。" + +#: ../../common/jsonapi.c:1087 +#, c-format +msgid "Expected string or \"}\", but found \"%s\"." +msgstr "文字列または\"}\"を想定していましたが、\"%s\"でした。" + +#: ../../common/jsonapi.c:1090 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%s\"." +msgstr "\",\"または\"}\"を想定していましたが、\"%s\"でした。" + +#: ../../common/jsonapi.c:1093 +#, c-format +msgid "Expected string, but found \"%s\"." +msgstr "文字列を想定していましたが、\"%s\"でした。" + +#: ../../common/jsonapi.c:1096 +#, c-format +msgid "Token \"%s\" is invalid." +msgstr "トークン\"%s\"は不正です。" + +#: ../../common/jsonapi.c:1099 +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 はテキストに変換できません。" + +#: ../../common/jsonapi.c:1101 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "\"\\u\"の後には16進数の4桁が続かなければなりません。" + +#: ../../common/jsonapi.c:1104 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "エンコーディングがUTF-8ではない場合、コードポイントの値が 007F 以上についてはUnicodeエスケープの値は使用できません。" + +#: ../../common/jsonapi.c:1106 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "Unicodeのハイサロゲートはハイサロゲートに続いてはいけません。" + +#: ../../common/jsonapi.c:1108 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Unicodeのローサロゲートはハイサロゲートに続かなければなりません。" + +#: parse_manifest.c:152 +msgid "manifest ended unexpectedly" +msgstr "マニフェストが予期せず終了しました。" + +#: parse_manifest.c:191 +msgid "unexpected object start" +msgstr "予期しないオブジェクトの開始" + +#: parse_manifest.c:224 +msgid "unexpected object end" +msgstr "予期しないオブジェクトの終わり" + +#: parse_manifest.c:251 +msgid "unexpected array start" +msgstr "予期しない配列の開始" + +#: parse_manifest.c:274 +msgid "unexpected array end" +msgstr "予期しない配列の終わり" + +#: parse_manifest.c:299 +msgid "expected version indicator" +msgstr "バージョン指示子を想定していました" + +#: parse_manifest.c:328 +msgid "unrecognized top-level field" +msgstr "認識できないトップレベルフィールド" + +#: parse_manifest.c:347 +msgid "unexpected file field" +msgstr "予期しないファイルフィールド" + +#: parse_manifest.c:361 +msgid "unexpected WAL range field" +msgstr "予期しないWAL範囲フィールド" + +#: parse_manifest.c:367 +msgid "unexpected object field" +msgstr "予期しないオブジェクトフィールド" + +#: parse_manifest.c:397 +msgid "unexpected manifest version" +msgstr "予期しないマニフェストバージョン" + +#: parse_manifest.c:448 +msgid "unexpected scalar" +msgstr "予期しないスカラー" + +#: parse_manifest.c:472 +msgid "missing path name" +msgstr "パス名がありません" + +#: parse_manifest.c:475 +msgid "both path name and encoded path name" +msgstr "パス名とエンコードされたパス名の両方" + +#: parse_manifest.c:477 +msgid "missing size" +msgstr "サイズがありません" + +#: parse_manifest.c:480 +msgid "checksum without algorithm" +msgstr "アルゴリズムなしのチェックサム" + +#: parse_manifest.c:494 +msgid "could not decode file name" +msgstr "ファイル名をデコードできませんでした" + +#: parse_manifest.c:504 +msgid "file size is not an integer" +msgstr "ファイルサイズが整数ではありません" + +#: parse_manifest.c:510 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "認識できないチェックサムアルゴリズム: \"%s\"" + +#: parse_manifest.c:529 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "\"%s\" ファイルのチェックサムが無効: \"%s\"" + +#: parse_manifest.c:572 +msgid "missing timeline" +msgstr "タイムラインがありません" + +#: parse_manifest.c:574 +msgid "missing start LSN" +msgstr "開始LSNがありません" + +#: parse_manifest.c:576 +msgid "missing end LSN" +msgstr "終了LSNがありません" + +#: parse_manifest.c:582 +msgid "timeline is not an integer" +msgstr "タイムラインが整数ではありません" + +#: parse_manifest.c:585 +msgid "could not parse start LSN" +msgstr "開始LSNを解析できませんでした" + +#: parse_manifest.c:588 +msgid "could not parse end LSN" +msgstr "終了LSNを解析できませんでした" + +#: parse_manifest.c:649 +msgid "expected at least 2 lines" +msgstr "少なくとも2行が必要です" + +#: parse_manifest.c:652 +msgid "last line not newline-terminated" +msgstr "最後の行が改行で終わっていません" + +#: parse_manifest.c:661 +#, c-format +msgid "manifest has no checksum" +msgstr "マニフェストにチェックサムがありません" + +#: parse_manifest.c:665 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "無効なマニフェストチェックサム: \"%s\"" + +#: parse_manifest.c:669 +#, c-format +msgid "manifest checksum mismatch" +msgstr "マニフェストチェックサムが合っていません" + +#: parse_manifest.c:683 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "バックアップマニフェストを解析できませんでした: %s" + +#: pg_verifybackup.c:255 pg_verifybackup.c:265 pg_verifybackup.c:277 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "詳細は\"%s --help\"で確認してください。\n" + +#: pg_verifybackup.c:264 +#, c-format +msgid "no backup directory specified" +msgstr "バックアップディレクトリが指定されていません" + +#: pg_verifybackup.c:275 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "コマンドライン引数が多すぎます。(先頭は\"%s\")" + +#: pg_verifybackup.c:298 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "" +"%2$sにはプログラム\"%1$s\"が必要ですが、\"%3$s\"と同じディレクトリ\n" +"にありませんでした。\n" +"インストール状況を確認してください。" + +#: pg_verifybackup.c:303 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "" +"\"%2$s\"がプログラム\"%1$s\"を見つけましたが、これは%3$sと同じ\n" +"バージョンではありませんでした。\n" +"インストール状況を確認してください。" + +#: pg_verifybackup.c:361 +#, c-format +msgid "backup successfully verified\n" +msgstr "バックアップが正常に検証されました\n" + +#: pg_verifybackup.c:387 pg_verifybackup.c:723 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "ファイル\"%s\"をオープンできませんでした: %m" + +#: pg_verifybackup.c:391 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "ファイル\"%s\"のstatに失敗しました: %m" + +#: pg_verifybackup.c:411 pg_verifybackup.c:738 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "ファイル\"%s\"の読み取りに失敗しました: %m" + +#: pg_verifybackup.c:414 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "" +"ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込" +"みました" + +#: pg_verifybackup.c:474 +#, c-format +msgid "duplicate path name in backup manifest: \"%s\"" +msgstr "バックアップマニフェスト内の重複パス名: \"%s\"" + +#: pg_verifybackup.c:537 pg_verifybackup.c:544 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" + +#: pg_verifybackup.c:576 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "ディレクトリ\"%s\"をクローズできませんでした: %m" + +#: pg_verifybackup.c:596 +#, c-format +msgid "could not stat file or directory \"%s\": %m" +msgstr "\"%s\"というファイルまたはディレクトリの情報を取得できませんでした: %m" + +#: pg_verifybackup.c:619 +#, c-format +msgid "\"%s\" is not a file or directory" +msgstr "\"%s\"はファイルまたはディレクトリではありません" + +#: pg_verifybackup.c:629 +#, c-format +msgid "\"%s\" is present on disk but not in the manifest" +msgstr "\"%s\"はディスクに存在しますが、マニフェストには存在しません" + +#: pg_verifybackup.c:641 +#, c-format +msgid "\"%s\" has size %zu on disk but size %zu in the manifest" +msgstr "\"%s\"はディスクに%zuがありますが、マニフェストに%zuがあります" + +#: pg_verifybackup.c:668 +#, c-format +msgid "\"%s\" is present in the manifest but not on disk" +msgstr "\"%s\"マニフェストには存在しますが、ディスクには存在しません" + +#: pg_verifybackup.c:744 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "ファイル\"%s\"をクローズできませんでした: %m" + +#: pg_verifybackup.c:763 +#, c-format +msgid "file \"%s\" should contain %zu bytes, but read %zu bytes" +msgstr "file\"%s\"は%zuバイトを含む必要がありますが、%zuバイトが読み込まれました" + +#: pg_verifybackup.c:774 +#, c-format +msgid "file \"%s\" has checksum of length %d, but expected %d" +msgstr "ファイル\"%s\"のチェックサムの長さは%dですが、予期されるのは%dです" + +#: pg_verifybackup.c:778 +#, c-format +msgid "checksum mismatch for file \"%s\"" +msgstr "ファイル\"%s\"のチェックサムが一致しません" + +#: pg_verifybackup.c:804 +#, c-format +msgid "WAL parsing failed for timeline %u" +msgstr "タイムライン%uのWAL解析に失敗しました" + +#: pg_verifybackup.c:890 +#, c-format +msgid "" +"%s verifies a backup against the backup manifest.\n" +"\n" +msgstr "" +"%sはバックアップマニフェストに対してバックアップを検証します。\n" +"\n" + +#: pg_verifybackup.c:891 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... BACKUPDIR\n" +"\n" +msgstr "" +"使用方法:\n" +" %s [オプション]... BACKUPDIR\n" +"\n" + +#: pg_verifybackup.c:892 +#, c-format +msgid "Options:\n" +msgstr "オプション:\n" + +#: pg_verifybackup.c:893 +#, c-format +msgid " -e, --exit-on-error exit immediately on error\n" +msgstr " -e, --exit-on-error エラー時に直ちに終了する\n" + +#: pg_verifybackup.c:894 +#, c-format +msgid " -i, --ignore=RELATIVE_PATH ignore indicated path\n" +msgstr " -i, --ignore=RELATIVE_PATH 指示されたパスを無視\n" + +#: pg_verifybackup.c:895 +#, c-format +msgid " -m, --manifest-path=PATH use specified path for manifest\n" +msgstr " -m, --manifest-path=PATH マニフェストの指定されたパスを使用する\n" + +#: pg_verifybackup.c:896 +#, c-format +msgid " -n, --no-parse-wal do not try to parse WAL files\n" +msgstr " -n, --no-parse-wal WALファイルをパースしようとしない\n" + +#: pg_verifybackup.c:897 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet エラー以外何も出力しない\n" + +#: pg_verifybackup.c:898 +#, c-format +msgid " -s, --skip-checksums skip checksum verification\n" +msgstr " -s, --skip-checksums スキップチェックサム検証\n" + +#: pg_verifybackup.c:899 +#, c-format +msgid " -w, --wal-directory=PATH use specified path for WAL files\n" +msgstr " -w, --wal-directory=PATH 指定したWALファイルのパスを使用する\n" + +#: pg_verifybackup.c:900 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version バージョン情報を表示して終了\n" + +#: pg_verifybackup.c:901 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help このヘルプを表示して終了\n" + +#: pg_verifybackup.c:902 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"バグは<%s>に報告してください。\n" + +#: pg_verifybackup.c:903 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" diff --git a/src/bin/pg_verifybackup/po/ko.po b/src/bin/pg_verifybackup/po/ko.po new file mode 100644 index 0000000000000..06d9ce2844d6c --- /dev/null +++ b/src/bin/pg_verifybackup/po/ko.po @@ -0,0 +1,467 @@ +# LANGUAGE message translation file for pg_verifybackup +# Copyright (C) 2020 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_verifybackup (PostgreSQL) package. +# Ioseph Kim , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_verifybackup (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-10-05 20:43+0000\n" +"PO-Revision-Date: 2020-10-06 14:45+0900\n" +"Last-Translator: Ioseph Kim \n" +"Language-Team: PostgreSQL Korea \n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "심각: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "오류: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "경고: " + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "메모리 부족\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "null 포인터를 중복할 수 없음 (내부 오류)\n" + +#: ../../common/jsonapi.c:1064 +#, c-format +msgid "Escape sequence \"\\%s\" is invalid." +msgstr "잘못된 이스케이프 조합: \"\\%s\"" + +#: ../../common/jsonapi.c:1067 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "0x%02x 값의 문자는 이스케이프 되어야함." + +#: ../../common/jsonapi.c:1070 +#, c-format +msgid "Expected end of input, but found \"%s\"." +msgstr "입력 자료의 끝을 기대했는데, \"%s\" 값이 더 있음." + +#: ../../common/jsonapi.c:1073 +#, c-format +msgid "Expected array element or \"]\", but found \"%s\"." +msgstr "\"]\" 가 필요한데 \"%s\"이(가) 있음" + +#: ../../common/jsonapi.c:1076 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%s\"." +msgstr "\",\" 또는 \"]\"가 필요한데 \"%s\"이(가) 있음" + +#: ../../common/jsonapi.c:1079 +#, c-format +msgid "Expected \":\", but found \"%s\"." +msgstr "\":\"가 필요한데 \"%s\"이(가) 있음" + +#: ../../common/jsonapi.c:1082 +#, c-format +msgid "Expected JSON value, but found \"%s\"." +msgstr "JSON 값을 기대했는데, \"%s\" 값임" + +#: ../../common/jsonapi.c:1085 +msgid "The input string ended unexpectedly." +msgstr "입력 문자열이 예상치 않게 끝났음." + +#: ../../common/jsonapi.c:1087 +#, c-format +msgid "Expected string or \"}\", but found \"%s\"." +msgstr "\"}\"가 필요한데 \"%s\"이(가) 있음" + +#: ../../common/jsonapi.c:1090 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%s\"." +msgstr "\",\" 또는 \"}\"가 필요한데 \"%s\"이(가) 있음" + +#: ../../common/jsonapi.c:1093 +#, c-format +msgid "Expected string, but found \"%s\"." +msgstr "문자열 값을 기대했는데, \"%s\" 값임" + +#: ../../common/jsonapi.c:1096 +#, c-format +msgid "Token \"%s\" is invalid." +msgstr "잘못된 토큰: \"%s\"" + +#: ../../common/jsonapi.c:1099 +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 값은 text 형으로 변환할 수 없음." + +#: ../../common/jsonapi.c:1101 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "\"\\u\" 표기법은 뒤에 4개의 16진수가 와야합니다." + +#: ../../common/jsonapi.c:1104 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "인코딩은 UTF8이 아닐 때 유니코드 이스케이프 값은 007F 이상 코드 포인트 값으로 사용할 수 없음." + +#: ../../common/jsonapi.c:1106 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "유니코드 상위 surrogate(딸림 코드)는 상위 딸림 코드 뒤에 오면 안됨." + +#: ../../common/jsonapi.c:1108 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "유니코드 상위 surrogate(딸림 코드) 뒤에는 하위 딸림 코드가 있어야 함." + +#: parse_manifest.c:152 +msgid "manifest ended unexpectedly" +msgstr "메니페스트가 비정상적으로 끝났음" + +#: parse_manifest.c:191 +msgid "unexpected object start" +msgstr "비정상적인 개체 시작" + +#: parse_manifest.c:224 +msgid "unexpected object end" +msgstr "비정상적인 개체 끝" + +#: parse_manifest.c:251 +msgid "unexpected array start" +msgstr "비정상적인 배열 시작" + +#: parse_manifest.c:274 +msgid "unexpected array end" +msgstr "비정상적인 배열 끝" + +#: parse_manifest.c:299 +msgid "expected version indicator" +msgstr "버전 지시자가 있어야 함" + +#: parse_manifest.c:328 +msgid "unrecognized top-level field" +msgstr "최상위 필드를 알 수 없음" + +#: parse_manifest.c:347 +msgid "unexpected file field" +msgstr "예상치 못한 파일 필드" + +#: parse_manifest.c:361 +msgid "unexpected WAL range field" +msgstr "예상치 못한 WAL 범위 필드" + +#: parse_manifest.c:367 +msgid "unexpected object field" +msgstr "예상치 못한 개체 필드" + +#: parse_manifest.c:397 +msgid "unexpected manifest version" +msgstr "예상치 못한 메니페스트 버전" + +#: parse_manifest.c:448 +msgid "unexpected scalar" +msgstr "예상치 못한 스칼라" + +#: parse_manifest.c:472 +msgid "missing path name" +msgstr "패스 이름 빠짐" + +#: parse_manifest.c:475 +msgid "both path name and encoded path name" +msgstr "패스 이름과 인코딩 된 패스 이름이 함께 있음" + +#: parse_manifest.c:477 +msgid "missing size" +msgstr "크기 빠짐" + +#: parse_manifest.c:480 +msgid "checksum without algorithm" +msgstr "알고리즘 없는 체크섬" + +#: parse_manifest.c:494 +msgid "could not decode file name" +msgstr "파일 이름을 디코딩할 수 없음" + +#: parse_manifest.c:504 +msgid "file size is not an integer" +msgstr "파일 크기가 정수가 아님" + +#: parse_manifest.c:510 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "알 수 없는 체크섬 알고리즘: \"%s\"" + +#: parse_manifest.c:529 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "\"%s\" 파일의 체크섬이 잘못됨: \"%s\"" + +#: parse_manifest.c:572 +msgid "missing timeline" +msgstr "타임라인 빠짐" + +#: parse_manifest.c:574 +msgid "missing start LSN" +msgstr "시작 LSN 빠짐" + +#: parse_manifest.c:576 +msgid "missing end LSN" +msgstr "끝 LSN 빠짐" + +#: parse_manifest.c:582 +msgid "timeline is not an integer" +msgstr "타임라인이 정수가 아님" + +#: parse_manifest.c:585 +msgid "could not parse start LSN" +msgstr "시작 LSN 값을 분석할 수 없음" + +#: parse_manifest.c:588 +msgid "could not parse end LSN" +msgstr "끝 LSN 값을 분석할 수 없음" + +#: parse_manifest.c:649 +msgid "expected at least 2 lines" +msgstr "적어도 2줄이 더 있어야 함" + +#: parse_manifest.c:652 +msgid "last line not newline-terminated" +msgstr "마지막 줄에 줄바꿈 문자가 없음" + +#: parse_manifest.c:661 +#, c-format +msgid "manifest has no checksum" +msgstr "메니페스트에 체크섬 없음" + +#: parse_manifest.c:665 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "잘못된 메니페스트 체크섬: \"%s\"" + +#: parse_manifest.c:669 +#, c-format +msgid "manifest checksum mismatch" +msgstr "메니페스트 체크섬 불일치" + +#: parse_manifest.c:683 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "백업 메니페스트 구문 분석 실패: %s" + +#: pg_verifybackup.c:255 pg_verifybackup.c:265 pg_verifybackup.c:277 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "자제한 사항은 \"%s --help\" 명령으로 살펴보십시오.\n" + +#: pg_verifybackup.c:264 +#, c-format +msgid "no backup directory specified" +msgstr "백업 디렉터리를 지정하지 않았음" + +#: pg_verifybackup.c:275 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "너무 많은 명령행 인자를 지정했습니다. (처음 \"%s\")" + +#: pg_verifybackup.c:298 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "" +"\"%s\" 프로그램이 %s 작업에서 필요하지만 \"%s\" 프로그램이\n" +"있는 디렉터리 내에 없습니다.\n" +"설치 상태를 확인해 보세요." + +#: pg_verifybackup.c:303 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "" +"\"%s\" 프로그램을 \"%s\" 작업을 위해 찾았지만\n" +"%s 버전과 같지 않습니다.\n" +"설치 상태를 확인해 보세요." + +#: pg_verifybackup.c:361 +#, c-format +msgid "backup successfully verified\n" +msgstr "백업 검사 완료\n" + +#: pg_verifybackup.c:387 pg_verifybackup.c:723 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "\"%s\" 파일을 열 수 없음: %m" + +#: pg_verifybackup.c:391 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "\"%s\" 파일의 상태값을 알 수 없음: %m" + +#: pg_verifybackup.c:411 pg_verifybackup.c:738 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "\"%s\" 파일을 읽을 수 없음: %m" + +#: pg_verifybackup.c:414 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "\"%s\" 파일을 읽을 수 없음: %d 읽음, 전체 %zu" + +#: pg_verifybackup.c:474 +#, c-format +msgid "duplicate path name in backup manifest: \"%s\"" +msgstr "백업 메니페스트 안에 경로 이름이 중복됨: \"%s\"" + +#: pg_verifybackup.c:537 pg_verifybackup.c:544 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "\"%s\" 디렉터리 열 수 없음: %m" + +#: pg_verifybackup.c:576 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "\"%s\" 디렉터리를 닫을 수 없음: %m" + +#: pg_verifybackup.c:596 +#, c-format +msgid "could not stat file or directory \"%s\": %m" +msgstr "파일 또는 디렉터리 \"%s\"의 상태를 확인할 수 없음: %m" + +#: pg_verifybackup.c:619 +#, c-format +msgid "\"%s\" is not a file or directory" +msgstr "\"%s\" 이름은 파일이나 디렉터리가 아님" + +#: pg_verifybackup.c:629 +#, c-format +msgid "\"%s\" is present on disk but not in the manifest" +msgstr "디스크에는 \"%s\" 개체가 있으나, 메니페스트 안에는 없음" + +#: pg_verifybackup.c:641 +#, c-format +msgid "\"%s\" has size %zu on disk but size %zu in the manifest" +msgstr "\"%s\" 의 디스크 크기는 %zu 이나 메니페스트 안에는 %zu 입니다" + +#: pg_verifybackup.c:668 +#, c-format +msgid "\"%s\" is present in the manifest but not on disk" +msgstr "메니페스트 안에는 \"%s\" 개체가 있으나 디스크에는 없음" + +#: pg_verifybackup.c:744 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "\"%s\" 파일을 닫을 수 없음: %m" + +#: pg_verifybackup.c:763 +#, c-format +msgid "file \"%s\" should contain %zu bytes, but read %zu bytes" +msgstr "\"%s\" 파일은 %zu 바이트이나 %zu 바이트를 읽음" + +#: pg_verifybackup.c:774 +#, c-format +msgid "file \"%s\" has checksum of length %d, but expected %d" +msgstr "\"%s\" 파일 체크섬 %d, 예상되는 값: %d" + +#: pg_verifybackup.c:778 +#, c-format +msgid "checksum mismatch for file \"%s\"" +msgstr "\"%s\" 파일의 체크섬이 맞지 않음" + +#: pg_verifybackup.c:804 +#, c-format +msgid "WAL parsing failed for timeline %u" +msgstr "타임라인 %u번의 WAL 분석 오류" + +#: pg_verifybackup.c:890 +#, c-format +msgid "" +"%s verifies a backup against the backup manifest.\n" +"\n" +msgstr "" +"%s 프로그램은 백업 메니페스트로 백업을 검사합니다.\n" +"\n" + +#: pg_verifybackup.c:891 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... BACKUPDIR\n" +"\n" +msgstr "" +"사용법:\n" +" %s [옵션]... 백업디렉터리\n" +"\n" + +#: pg_verifybackup.c:892 +#, c-format +msgid "Options:\n" +msgstr "옵션들:\n" + +#: pg_verifybackup.c:893 +#, c-format +msgid " -e, --exit-on-error exit immediately on error\n" +msgstr " -e, --exit-on-error 오류가 있으면 작업 중지\n" + +#: pg_verifybackup.c:894 +#, c-format +msgid " -i, --ignore=RELATIVE_PATH ignore indicated path\n" +msgstr " -i, --ignore=상대경로 지정한 경로 건너뜀\n" + +#: pg_verifybackup.c:895 +#, c-format +msgid " -m, --manifest-path=PATH use specified path for manifest\n" +msgstr " -m, --manifest-path=경로 메니페스트 파일 경로 지정\n" + +#: pg_verifybackup.c:896 +#, c-format +msgid " -n, --no-parse-wal do not try to parse WAL files\n" +msgstr " -n, --no-parse-wal WAL 파일 검사 건너뜀\n" + +#: pg_verifybackup.c:897 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet 오류를 빼고 나머지는 아무 것도 안 보여줌\n" + +#: pg_verifybackup.c:898 +#, c-format +msgid " -s, --skip-checksums skip checksum verification\n" +msgstr " -s, --skip-checksums 체크섬 검사 건너뜀\n" + +#: pg_verifybackup.c:899 +#, c-format +msgid " -w, --wal-directory=PATH use specified path for WAL files\n" +msgstr " -w, --wal-directory=경로 WAL 파일이 있는 경로 지정\n" + +#: pg_verifybackup.c:900 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version 버전 정보를 보여주고 마침\n" + +#: pg_verifybackup.c:901 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help 이 도움말을 보여주고 마침\n" + +#: pg_verifybackup.c:902 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"문제점 보고 주소: <%s>\n" + +#: pg_verifybackup.c:903 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" diff --git a/src/bin/pg_verifybackup/po/ru.po b/src/bin/pg_verifybackup/po/ru.po new file mode 100644 index 0000000000000..35ed42ce007ba --- /dev/null +++ b/src/bin/pg_verifybackup/po/ru.po @@ -0,0 +1,479 @@ +# Alexander Lakhin , 2020. +msgid "" +msgstr "" +"Project-Id-Version: pg_verifybackup (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-15 18:25+0300\n" +"PO-Revision-Date: 2020-10-29 15:03+0300\n" +"Last-Translator: Alexander Lakhin \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Lokalize 19.12.3\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "важно: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "ошибка: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "предупреждение: " + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "нехватка памяти\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" + +#: ../../common/jsonapi.c:1064 +#, c-format +msgid "Escape sequence \"\\%s\" is invalid." +msgstr "Неверная спецпоследовательность: \"\\%s\"." + +#: ../../common/jsonapi.c:1067 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "Символ с кодом 0x%02x необходимо экранировать." + +#: ../../common/jsonapi.c:1070 +#, c-format +msgid "Expected end of input, but found \"%s\"." +msgstr "Ожидался конец текста, но обнаружено продолжение \"%s\"." + +#: ../../common/jsonapi.c:1073 +#, c-format +msgid "Expected array element or \"]\", but found \"%s\"." +msgstr "Ожидался элемент массива или \"]\", но обнаружено \"%s\"." + +#: ../../common/jsonapi.c:1076 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%s\"." +msgstr "Ожидалась \",\" или \"]\", но обнаружено \"%s\"." + +#: ../../common/jsonapi.c:1079 +#, c-format +msgid "Expected \":\", but found \"%s\"." +msgstr "Ожидалось \":\", но обнаружено \"%s\"." + +#: ../../common/jsonapi.c:1082 +#, c-format +msgid "Expected JSON value, but found \"%s\"." +msgstr "Ожидалось значение JSON, но обнаружено \"%s\"." + +#: ../../common/jsonapi.c:1085 +msgid "The input string ended unexpectedly." +msgstr "Неожиданный конец входной строки." + +#: ../../common/jsonapi.c:1087 +#, c-format +msgid "Expected string or \"}\", but found \"%s\"." +msgstr "Ожидалась строка или \"}\", но обнаружено \"%s\"." + +#: ../../common/jsonapi.c:1090 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%s\"." +msgstr "Ожидалась \",\" или \"}\", но обнаружено \"%s\"." + +#: ../../common/jsonapi.c:1093 +#, c-format +msgid "Expected string, but found \"%s\"." +msgstr "Ожидалась строка, но обнаружено \"%s\"." + +#: ../../common/jsonapi.c:1096 +#, c-format +msgid "Token \"%s\" is invalid." +msgstr "Ошибочный элемент текста \"%s\"." + +#: ../../common/jsonapi.c:1099 +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 нельзя преобразовать в текст." + +#: ../../common/jsonapi.c:1101 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "За \"\\u\" должны следовать четыре шестнадцатеричные цифры." + +#: ../../common/jsonapi.c:1104 +msgid "" +"Unicode escape values cannot be used for code point values above 007F when " +"the encoding is not UTF8." +msgstr "" +"Спецкоды Unicode для значений выше 007F можно использовать только с " +"кодировкой UTF8." + +#: ../../common/jsonapi.c:1106 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "" +"Старшее слово суррогата Unicode не может следовать за другим старшим словом." + +#: ../../common/jsonapi.c:1108 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Младшее слово суррогата Unicode должно следовать за старшим словом." + +#: parse_manifest.c:152 +msgid "manifest ended unexpectedly" +msgstr "неожиданный конец манифеста" + +#: parse_manifest.c:191 +msgid "unexpected object start" +msgstr "неожиданное начало объекта" + +#: parse_manifest.c:224 +msgid "unexpected object end" +msgstr "неожиданный конец объекта" + +#: parse_manifest.c:251 +msgid "unexpected array start" +msgstr "неожиданное начало массива" + +#: parse_manifest.c:274 +msgid "unexpected array end" +msgstr "неожиданный конец массива" + +#: parse_manifest.c:299 +msgid "expected version indicator" +msgstr "ожидалось указание версии" + +#: parse_manifest.c:328 +msgid "unrecognized top-level field" +msgstr "нераспознанное поле на верхнем уровне" + +#: parse_manifest.c:347 +msgid "unexpected file field" +msgstr "неизвестное поле для файла" + +#: parse_manifest.c:361 +msgid "unexpected WAL range field" +msgstr "неизвестное поле в указании диапазона WAL" + +#: parse_manifest.c:367 +msgid "unexpected object field" +msgstr "неожиданное поле объекта" + +#: parse_manifest.c:397 +msgid "unexpected manifest version" +msgstr "неожиданная версия манифеста" + +#: parse_manifest.c:448 +msgid "unexpected scalar" +msgstr "неожиданное скалярное значение" + +#: parse_manifest.c:472 +msgid "missing path name" +msgstr "отсутствует указание пути" + +#: parse_manifest.c:475 +msgid "both path name and encoded path name" +msgstr "указание пути задано в обычном виде и в закодированном" + +#: parse_manifest.c:477 +msgid "missing size" +msgstr "отсутствует указание размера" + +#: parse_manifest.c:480 +msgid "checksum without algorithm" +msgstr "не задан алгоритм расчёта контрольной суммы" + +#: parse_manifest.c:494 +msgid "could not decode file name" +msgstr "не удалось декодировать имя файла" + +#: parse_manifest.c:504 +msgid "file size is not an integer" +msgstr "размер файла не является целочисленным" + +#: parse_manifest.c:510 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "нераспознанный алгоритм расчёта контрольных сумм: \"%s\"" + +#: parse_manifest.c:529 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "неверная контрольная сумма для файла \"%s\": \"%s\"" + +#: parse_manifest.c:572 +msgid "missing timeline" +msgstr "отсутствует линия времени" + +#: parse_manifest.c:574 +msgid "missing start LSN" +msgstr "отсутствует начальный LSN" + +#: parse_manifest.c:576 +msgid "missing end LSN" +msgstr "отсутствует конечный LSN" + +#: parse_manifest.c:582 +msgid "timeline is not an integer" +msgstr "линия времени задаётся не целым числом" + +#: parse_manifest.c:585 +msgid "could not parse start LSN" +msgstr "не удалось разобрать начальный LSN" + +#: parse_manifest.c:588 +msgid "could not parse end LSN" +msgstr "не удалось разобрать конечный LSN" + +#: parse_manifest.c:649 +msgid "expected at least 2 lines" +msgstr "ожидалось как минимум 2 строки" + +#: parse_manifest.c:652 +msgid "last line not newline-terminated" +msgstr "последняя строка не оканчивается символом новой строки" + +#: parse_manifest.c:661 +#, c-format +msgid "manifest has no checksum" +msgstr "в манифесте нет контрольной суммы" + +#: parse_manifest.c:665 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "неверная контрольная сумма в манифесте: \"%s\"" + +#: parse_manifest.c:669 +#, c-format +msgid "manifest checksum mismatch" +msgstr "ошибка контрольной суммы манифеста" + +#: parse_manifest.c:683 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "не удалось разобрать манифест копии: %s" + +#: pg_verifybackup.c:255 pg_verifybackup.c:265 pg_verifybackup.c:277 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" + +#: pg_verifybackup.c:264 +#, c-format +msgid "no backup directory specified" +msgstr "каталог копии не указан" + +#: pg_verifybackup.c:275 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "слишком много аргументов командной строки (первый: \"%s\")" + +#: pg_verifybackup.c:298 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "" +"Программа \"%s\" нужна для %s, но она не найдена\n" +"в каталоге \"%s\".\n" +"Проверьте правильность установки СУБД." + +#: pg_verifybackup.c:303 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "" +"Программа \"%s\" найдена программой \"%s\",\n" +"но её версия отличается от версии %s.\n" +"Проверьте правильность установки СУБД." + +#: pg_verifybackup.c:361 +#, c-format +msgid "backup successfully verified\n" +msgstr "копия проверена успешно\n" + +#: pg_verifybackup.c:387 pg_verifybackup.c:723 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не удалось открыть файл \"%s\": %m" + +#: pg_verifybackup.c:391 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "не удалось получить информацию о файле \"%s\": %m" + +#: pg_verifybackup.c:411 pg_verifybackup.c:738 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не удалось прочитать файл \"%s\": %m" + +#: pg_verifybackup.c:414 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %zu)" + +#: pg_verifybackup.c:474 +#, c-format +msgid "duplicate path name in backup manifest: \"%s\"" +msgstr "дублирующийся путь в манифесте копии: \"%s\"" + +#: pg_verifybackup.c:537 pg_verifybackup.c:544 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не удалось открыть каталог \"%s\": %m" + +#: pg_verifybackup.c:576 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "не удалось закрыть каталог \"%s\": %m" + +#: pg_verifybackup.c:596 +#, c-format +msgid "could not stat file or directory \"%s\": %m" +msgstr "не удалось получить информацию о файле или каталоге \"%s\": %m" + +#: pg_verifybackup.c:619 +#, c-format +msgid "\"%s\" is not a file or directory" +msgstr "\"%s\" не указывает на файл или каталог" + +#: pg_verifybackup.c:629 +#, c-format +msgid "\"%s\" is present on disk but not in the manifest" +msgstr "файл \"%s\" присутствует на диске, но отсутствует в манифесте" + +#: pg_verifybackup.c:641 +#, c-format +msgid "\"%s\" has size %zu on disk but size %zu in the manifest" +msgstr "" +"файл \"%s\" имеет размер на диске: %zu, тогда как размер в манифесте: %zu" + +#: pg_verifybackup.c:668 +#, c-format +msgid "\"%s\" is present in the manifest but not on disk" +msgstr "файл \"%s\" присутствует в манифесте, но отсутствует на диске" + +#: pg_verifybackup.c:744 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "не удалось закрыть файл \"%s\": %m" + +#: pg_verifybackup.c:763 +#, c-format +msgid "file \"%s\" should contain %zu bytes, but read %zu bytes" +msgstr "файл \"%s\" должен содержать байт: %zu, но фактически прочитано: %zu" + +#: pg_verifybackup.c:774 +#, c-format +msgid "file \"%s\" has checksum of length %d, but expected %d" +msgstr "" +"для файла \"%s\" задана контрольная сумма размером %d, но ожидаемый размер: " +"%d" + +#: pg_verifybackup.c:778 +#, c-format +msgid "checksum mismatch for file \"%s\"" +msgstr "ошибка контрольной суммы для файла \"%s\"" + +#: pg_verifybackup.c:804 +#, c-format +msgid "WAL parsing failed for timeline %u" +msgstr "не удалось разобрать WAL для линии времени %u" + +#: pg_verifybackup.c:890 +#, c-format +msgid "" +"%s verifies a backup against the backup manifest.\n" +"\n" +msgstr "" +"%s проверяет резервную копию, используя манифест копии.\n" +"\n" + +#: pg_verifybackup.c:891 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... BACKUPDIR\n" +"\n" +msgstr "" +"Использование:\n" +" %s [ПАРАМЕТР]... КАТАЛОГ_КОПИИ\n" +"\n" + +#: pg_verifybackup.c:892 +#, c-format +msgid "Options:\n" +msgstr "Параметры:\n" + +#: pg_verifybackup.c:893 +#, c-format +msgid " -e, --exit-on-error exit immediately on error\n" +msgstr " -e, --exit-on-error немедленный выход при ошибке\n" + +#: pg_verifybackup.c:894 +#, c-format +msgid " -i, --ignore=RELATIVE_PATH ignore indicated path\n" +msgstr "" +" -i, --ignore=ОТНОСИТЕЛЬНЫЙ_ПУТЬ\n" +" игнорировать заданный путь\n" + +#: pg_verifybackup.c:895 +#, c-format +msgid " -m, --manifest-path=PATH use specified path for manifest\n" +msgstr " -m, --manifest-path=ПУТЬ использовать заданный файл манифеста\n" + +#: pg_verifybackup.c:896 +#, c-format +msgid " -n, --no-parse-wal do not try to parse WAL files\n" +msgstr " -n, --no-parse-wal не пытаться разбирать файлы WAL\n" + +#: pg_verifybackup.c:897 +#, c-format +msgid "" +" -q, --quiet do not print any output, except for errors\n" +msgstr "" +" -q, --quiet не выводить никаких сообщений, кроме ошибок\n" + +#: pg_verifybackup.c:898 +#, c-format +msgid " -s, --skip-checksums skip checksum verification\n" +msgstr " -s, --skip-checksums пропустить проверку контрольных сумм\n" + +#: pg_verifybackup.c:899 +#, c-format +msgid " -w, --wal-directory=PATH use specified path for WAL files\n" +msgstr "" +" -w, --wal-directory=ПУТЬ использовать заданный путь к файлам WAL\n" + +#: pg_verifybackup.c:900 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version показать версию и выйти\n" + +#: pg_verifybackup.c:901 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показать эту справку и выйти\n" + +#: pg_verifybackup.c:902 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Об ошибках сообщайте по адресу <%s>.\n" + +#: pg_verifybackup.c:903 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" diff --git a/src/bin/pg_verifybackup/po/sv.po b/src/bin/pg_verifybackup/po/sv.po index bf5bda88fa874..8a984d3cc2ee7 100644 --- a/src/bin/pg_verifybackup/po/sv.po +++ b/src/bin/pg_verifybackup/po/sv.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_verifybackup (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-09 08:44+0000\n" -"PO-Revision-Date: 2020-05-09 13:50+0200\n" +"POT-Creation-Date: 2020-09-16 05:14+0000\n" +"PO-Revision-Date: 2020-09-16 07:55+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -147,7 +147,7 @@ msgid "expected version indicator" msgstr "förväntade en versionsindikator" #: parse_manifest.c:328 -msgid "unknown toplevel field" +msgid "unrecognized top-level field" msgstr "okänt toppnivåfält" #: parse_manifest.c:347 @@ -155,8 +155,8 @@ msgid "unexpected file field" msgstr "oväntat filfält" #: parse_manifest.c:361 -msgid "unexpected wal range field" -msgstr "oväntat wal-intervall-fält" +msgid "unexpected WAL range field" +msgstr "oväntat WAL-intervall-fält" #: parse_manifest.c:367 msgid "unexpected object field" @@ -171,11 +171,11 @@ msgid "unexpected scalar" msgstr "oväntad skalar" #: parse_manifest.c:472 -msgid "missing pathname" +msgid "missing path name" msgstr "saknas sökväg" #: parse_manifest.c:475 -msgid "both pathname and encoded pathname" +msgid "both path name and encoded path name" msgstr "både sökväg och kodad sökväg" #: parse_manifest.c:477 @@ -187,8 +187,8 @@ msgid "checksum without algorithm" msgstr "checksumma utan algoritm" #: parse_manifest.c:494 -msgid "unable to decode filename" -msgstr "kan inte avkoda filnamn" +msgid "could not decode file name" +msgstr "kunde inte avkoda filnamn" #: parse_manifest.c:504 msgid "file size is not an integer" @@ -221,12 +221,12 @@ msgid "timeline is not an integer" msgstr "tidslinje är inte ett heltal" #: parse_manifest.c:585 -msgid "unable to parse start LSN" -msgstr "kan inte parsa start-LSN" +msgid "could not parse start LSN" +msgstr "kunde inte parsa start-LSN" #: parse_manifest.c:588 -msgid "unable to parse end LSN" -msgstr "kan inte parsa slut-LSN" +msgid "could not parse end LSN" +msgstr "kunde inte parsa slut-LSN" #: parse_manifest.c:649 msgid "expected at least 2 lines" @@ -298,7 +298,7 @@ msgstr "" msgid "backup successfully verified\n" msgstr "korrekt verifierad backup\n" -#: pg_verifybackup.c:387 pg_verifybackup.c:724 +#: pg_verifybackup.c:387 pg_verifybackup.c:723 #, c-format msgid "could not open file \"%s\": %m" msgstr "kunde inte öppna fil \"%s\": %m" @@ -308,7 +308,7 @@ msgstr "kunde inte öppna fil \"%s\": %m" msgid "could not stat file \"%s\": %m" msgstr "kunde inte göra stat() på fil \"%s\": %m" -#: pg_verifybackup.c:411 pg_verifybackup.c:739 +#: pg_verifybackup.c:411 pg_verifybackup.c:738 #, c-format msgid "could not read file \"%s\": %m" msgstr "kunde inte läsa fil \"%s\": %m" @@ -320,7 +320,7 @@ msgstr "kunde inte läsa fil \"%s\": läste %d av %zu" #: pg_verifybackup.c:474 #, c-format -msgid "duplicate pathname in backup manifest: \"%s\"" +msgid "duplicate path name in backup manifest: \"%s\"" msgstr "duplicerad sökväg i backup-manifest: \"%s\"" #: pg_verifybackup.c:537 pg_verifybackup.c:544 @@ -353,37 +353,37 @@ msgstr "\"%s\" finns på disk men är inte i manifestet" msgid "\"%s\" has size %zu on disk but size %zu in the manifest" msgstr "\"%s\" har storlek %zu på disk men storlek %zu i manifestet" -#: pg_verifybackup.c:669 +#: pg_verifybackup.c:668 #, c-format msgid "\"%s\" is present in the manifest but not on disk" msgstr "\"%s\" finns i manifestet men inte på disk" -#: pg_verifybackup.c:745 +#: pg_verifybackup.c:744 #, c-format msgid "could not close file \"%s\": %m" msgstr "kunde inte stänga fil \"%s\": %m" -#: pg_verifybackup.c:764 +#: pg_verifybackup.c:763 #, c-format msgid "file \"%s\" should contain %zu bytes, but read %zu bytes" msgstr "filen \"%s\" skall innehålla %zu byte men vi läste %zu byte" -#: pg_verifybackup.c:775 +#: pg_verifybackup.c:774 #, c-format msgid "file \"%s\" has checksum of length %d, but expected %d" msgstr "filen \"%s\" har checksumma med längd %d men förväntade %d" -#: pg_verifybackup.c:779 +#: pg_verifybackup.c:778 #, c-format msgid "checksum mismatch for file \"%s\"" msgstr "checksumman matchar inte för fil \"%s\"" -#: pg_verifybackup.c:805 +#: pg_verifybackup.c:804 #, c-format msgid "WAL parsing failed for timeline %u" msgstr "WAL-parsning misslyckades för tidslinje %u" -#: pg_verifybackup.c:891 +#: pg_verifybackup.c:890 #, c-format msgid "" "%s verifies a backup against the backup manifest.\n" @@ -392,7 +392,7 @@ msgstr "" "%s verifierar en backup gentemot backup-manifestet.\n" "\n" -#: pg_verifybackup.c:892 +#: pg_verifybackup.c:891 #, c-format msgid "" "Usage:\n" @@ -403,57 +403,57 @@ msgstr "" " %s [FLAGGOR]... BACKUPKAT\n" "\n" -#: pg_verifybackup.c:893 +#: pg_verifybackup.c:892 #, c-format msgid "Options:\n" msgstr "Flaggor:\n" -#: pg_verifybackup.c:894 +#: pg_verifybackup.c:893 #, c-format msgid " -e, --exit-on-error exit immediately on error\n" msgstr " -e, --exit-on-error avsluta direkt vid fel\n" -#: pg_verifybackup.c:895 +#: pg_verifybackup.c:894 #, c-format msgid " -i, --ignore=RELATIVE_PATH ignore indicated path\n" msgstr " -i, --ignore=RELATIV_SÖKVÄG hoppa över angiven sökväg\n" -#: pg_verifybackup.c:896 +#: pg_verifybackup.c:895 #, c-format msgid " -m, --manifest-path=PATH use specified path for manifest\n" msgstr " -m, --manifest-path=SÖKVÄG använd denna sökväg till manifestet\n" -#: pg_verifybackup.c:897 +#: pg_verifybackup.c:896 #, c-format msgid " -n, --no-parse-wal do not try to parse WAL files\n" msgstr " -n, --no-parse-wal försök inte parsa WAL-filer\n" -#: pg_verifybackup.c:898 +#: pg_verifybackup.c:897 #, c-format msgid " -q, --quiet do not print any output, except for errors\n" msgstr " -q, --quiet skriv inte ut några meddelanden förutom fel\n" -#: pg_verifybackup.c:899 +#: pg_verifybackup.c:898 #, c-format msgid " -s, --skip-checksums skip checksum verification\n" msgstr " -s, --skip-checksums hoppa över verifiering av checksummor\n" -#: pg_verifybackup.c:900 +#: pg_verifybackup.c:899 #, c-format msgid " -w, --wal-directory=PATH use specified path for WAL files\n" msgstr " -w, --wal-directory=SÖKVÄG använd denna sökväg till WAL-filer\n" -#: pg_verifybackup.c:901 +#: pg_verifybackup.c:900 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version visa versionsinformation, avsluta sedan\n" -#: pg_verifybackup.c:902 +#: pg_verifybackup.c:901 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help visa denna hjälp, avsluta sedan\n" -#: pg_verifybackup.c:903 +#: pg_verifybackup.c:902 #, c-format msgid "" "\n" @@ -462,25 +462,25 @@ msgstr "" "\n" "Rapportera fel till <%s>.\n" -#: pg_verifybackup.c:904 +#: pg_verifybackup.c:903 #, c-format msgid "%s home page: <%s>\n" msgstr "hemsida för %s: <%s>\n" #~ msgid "" -#~ "The program \"%s\" was found by \"%s\" but was\n" -#~ "not the same version as %s.\n" +#~ "The program \"%s\" is needed by %s but was\n" +#~ "not found in the same directory as \"%s\".\n" #~ "Check your installation." #~ msgstr "" -#~ "Programmet \"%s\" hittades av \"%s\"\n" -#~ "men är inte av samma version som %s.\n" +#~ "Programmet \"%s\" behövs av %s men hittades inte i samma\n" +#~ "katalog som \"%s\".\n" #~ "Kontrollera din installation." #~ msgid "" -#~ "The program \"%s\" is needed by %s but was\n" -#~ "not found in the same directory as \"%s\".\n" +#~ "The program \"%s\" was found by \"%s\" but was\n" +#~ "not the same version as %s.\n" #~ "Check your installation." #~ msgstr "" -#~ "Programmet \"%s\" behövs av %s men hittades inte i samma\n" -#~ "katalog som \"%s\".\n" +#~ "Programmet \"%s\" hittades av \"%s\"\n" +#~ "men är inte av samma version som %s.\n" #~ "Kontrollera din installation." diff --git a/src/bin/pg_verifybackup/po/uk.po b/src/bin/pg_verifybackup/po/uk.po new file mode 100644 index 0000000000000..f8bb42a2d4296 --- /dev/null +++ b/src/bin/pg_verifybackup/po/uk.po @@ -0,0 +1,453 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:14+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: \n" +"Language-Team: Ukrainian\n" +"Language: uk_UA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /DEV_13/pg_verifybackup.pot\n" +"X-Crowdin-File-ID: 528\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "збій: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "помилка: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "попередження: " + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "недостатньо пам'яті\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" + +#: ../../common/jsonapi.c:1064 +#, c-format +msgid "Escape sequence \"\\%s\" is invalid." +msgstr "Неприпустима спеціальна послідовність \"\\%s\"." + +#: ../../common/jsonapi.c:1067 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "Символ зі значенням 0x%02x повинен бути пропущений." + +#: ../../common/jsonapi.c:1070 +#, c-format +msgid "Expected end of input, but found \"%s\"." +msgstr "Очікувався кінець введення, але знайдено \"%s\"." + +#: ../../common/jsonapi.c:1073 +#, c-format +msgid "Expected array element or \"]\", but found \"%s\"." +msgstr "Очікувався елемент масиву або \"]\", але знайдено \"%s\"." + +#: ../../common/jsonapi.c:1076 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%s\"." +msgstr "Очікувалось \",\" або \"]\", але знайдено \"%s\"." + +#: ../../common/jsonapi.c:1079 +#, c-format +msgid "Expected \":\", but found \"%s\"." +msgstr "Очікувалось \":\", але знайдено \"%s\"." + +#: ../../common/jsonapi.c:1082 +#, c-format +msgid "Expected JSON value, but found \"%s\"." +msgstr "Очікувалось значення JSON, але знайдено \"%s\"." + +#: ../../common/jsonapi.c:1085 +msgid "The input string ended unexpectedly." +msgstr "Несподіваний кінець вхідного рядка." + +#: ../../common/jsonapi.c:1087 +#, c-format +msgid "Expected string or \"}\", but found \"%s\"." +msgstr "Очікувався рядок або \"}\", але знайдено \"%s\"." + +#: ../../common/jsonapi.c:1090 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%s\"." +msgstr "Очікувалось \",\" або \"}\", але знайдено \"%s\"." + +#: ../../common/jsonapi.c:1093 +#, c-format +msgid "Expected string, but found \"%s\"." +msgstr "Очікувався рядок, але знайдено \"%s\"." + +#: ../../common/jsonapi.c:1096 +#, c-format +msgid "Token \"%s\" is invalid." +msgstr "Неприпустимий маркер \"%s\"." + +#: ../../common/jsonapi.c:1099 +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 не можна перетворити в текст." + +#: ../../common/jsonapi.c:1101 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "За \"\\u\" повинні прямувати чотири шістнадцяткових числа." + +#: ../../common/jsonapi.c:1104 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "Значення виходу Unicode не можна використовувати для значень кодових точок більше 007F, якщо кодування не UTF8." + +#: ../../common/jsonapi.c:1106 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "Старший сурогат Unicode не повинен прямувати за іншим старшим сурогатом." + +#: ../../common/jsonapi.c:1108 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Молодший сурогат Unicode не повинен прямувати за іншим молодшим сурогатом." + +#: parse_manifest.c:152 +msgid "manifest ended unexpectedly" +msgstr "маніфест закінчився несподівано" + +#: parse_manifest.c:191 +msgid "unexpected object start" +msgstr "неочікуваний початок об'єкта" + +#: parse_manifest.c:224 +msgid "unexpected object end" +msgstr "неочікуваний кінець об'єкта" + +#: parse_manifest.c:251 +msgid "unexpected array start" +msgstr "неочікуваний початок масиву" + +#: parse_manifest.c:274 +msgid "unexpected array end" +msgstr "неочікуваний кінець масиву" + +#: parse_manifest.c:299 +msgid "expected version indicator" +msgstr "індикатор очікуваної версії" + +#: parse_manifest.c:328 +msgid "unrecognized top-level field" +msgstr "нерозпізнане поле верхнього рівня" + +#: parse_manifest.c:347 +msgid "unexpected file field" +msgstr "неочікуване поле файлу" + +#: parse_manifest.c:361 +msgid "unexpected WAL range field" +msgstr "неочікуване поле діапазону WAL" + +#: parse_manifest.c:367 +msgid "unexpected object field" +msgstr "неочікуване поле об'єкта" + +#: parse_manifest.c:397 +msgid "unexpected manifest version" +msgstr "неочікувана версія маніфесту" + +#: parse_manifest.c:448 +msgid "unexpected scalar" +msgstr "неочікуваний скаляр" + +#: parse_manifest.c:472 +msgid "missing path name" +msgstr "пропущено шлях" + +#: parse_manifest.c:475 +msgid "both path name and encoded path name" +msgstr "і ім'я шляху, і закодований шлях" + +#: parse_manifest.c:477 +msgid "missing size" +msgstr "відсутній розмір" + +#: parse_manifest.c:480 +msgid "checksum without algorithm" +msgstr "контрольна сума без алгоритму" + +#: parse_manifest.c:494 +msgid "could not decode file name" +msgstr "не вдалося декодувати ім'я файлу" + +#: parse_manifest.c:504 +msgid "file size is not an integer" +msgstr "розмір файлу не є цілим числом" + +#: parse_manifest.c:510 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "нерозпізнаний алгоритм контрольної суми: \"%s\"" + +#: parse_manifest.c:529 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "неприпустима контрольна сума для файлу \"%s\": \"%s\"" + +#: parse_manifest.c:572 +msgid "missing timeline" +msgstr "відсутня часова шкала" + +#: parse_manifest.c:574 +msgid "missing start LSN" +msgstr "відсутній LSN початку" + +#: parse_manifest.c:576 +msgid "missing end LSN" +msgstr "відсутній LSN кінця" + +#: parse_manifest.c:582 +msgid "timeline is not an integer" +msgstr "часова лінія не є цілим числом" + +#: parse_manifest.c:585 +msgid "could not parse start LSN" +msgstr "не вдалося проаналізувати початковий LSN" + +#: parse_manifest.c:588 +msgid "could not parse end LSN" +msgstr "не вдалося проаналізувати кінцевий LSN" + +#: parse_manifest.c:649 +msgid "expected at least 2 lines" +msgstr "очікувалося принаймні 2 рядки" + +#: parse_manifest.c:652 +msgid "last line not newline-terminated" +msgstr "останній рядок не завершений новим рядком" + +#: parse_manifest.c:661 +#, c-format +msgid "manifest has no checksum" +msgstr "у маніфесті немає контрольної суми" + +#: parse_manifest.c:665 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "неприпустима контрольна сума маніфесту: \"%s\"" + +#: parse_manifest.c:669 +#, c-format +msgid "manifest checksum mismatch" +msgstr "невідповідність контрольної суми маніфесту" + +#: parse_manifest.c:683 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "не вдалося проаналізувати маніфест резервної копії: %s" + +#: pg_verifybackup.c:255 pg_verifybackup.c:265 pg_verifybackup.c:277 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" + +#: pg_verifybackup.c:264 +#, c-format +msgid "no backup directory specified" +msgstr "не вказано папку резервної копії" + +#: pg_verifybackup.c:275 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "забагато аргументів у командному рядку (перший \"%s\")" + +#: pg_verifybackup.c:298 +#, c-format +msgid "The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "Програма \"%s\" потрібна для %s, але не знайдена в тому ж каталозі, що й \"%s\".\n" +"Перевірте вашу установку." + +#: pg_verifybackup.c:303 +#, c-format +msgid "The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "Програма \"%s\" була знайдена \"%s\", але не була тієї ж версії, що %s.\n" +"Перевірте вашу установку." + +#: pg_verifybackup.c:361 +#, c-format +msgid "backup successfully verified\n" +msgstr "резервну копію успішно перевірено\n" + +#: pg_verifybackup.c:387 pg_verifybackup.c:723 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" + +#: pg_verifybackup.c:391 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" + +#: pg_verifybackup.c:411 pg_verifybackup.c:738 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не вдалося прочитати файл \"%s\": %m" + +#: pg_verifybackup.c:414 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не вдалося прочитати файл \"%s\": прочитано %d з %zu" + +#: pg_verifybackup.c:474 +#, c-format +msgid "duplicate path name in backup manifest: \"%s\"" +msgstr "дубльований шлях у маніфесті резервного копіювання: \"%s\"" + +#: pg_verifybackup.c:537 pg_verifybackup.c:544 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не вдалося відкрити каталог \"%s\": %m" + +#: pg_verifybackup.c:576 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "не вдалося закрити каталог \"%s\": %m" + +#: pg_verifybackup.c:596 +#, c-format +msgid "could not stat file or directory \"%s\": %m" +msgstr "не вдалося отримати інформацію про файл або каталог \"%s\": %m" + +#: pg_verifybackup.c:619 +#, c-format +msgid "\"%s\" is not a file or directory" +msgstr "\"%s\" не є файлом або каталогом" + +#: pg_verifybackup.c:629 +#, c-format +msgid "\"%s\" is present on disk but not in the manifest" +msgstr "\"%s\" присутній на диску, але не у маніфесті" + +#: pg_verifybackup.c:641 +#, c-format +msgid "\"%s\" has size %zu on disk but size %zu in the manifest" +msgstr "\"%s\" має розмір %zu на диску, але розмір %zu у маніфесті" + +#: pg_verifybackup.c:668 +#, c-format +msgid "\"%s\" is present in the manifest but not on disk" +msgstr "\"%s\" присутній у маніфесті, але не на диску" + +#: pg_verifybackup.c:744 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "неможливо закрити файл \"%s\": %m" + +#: pg_verifybackup.c:763 +#, c-format +msgid "file \"%s\" should contain %zu bytes, but read %zu bytes" +msgstr "файл \"%s\" мусить містити %zu байтів, але прочитано %zu байтів" + +#: pg_verifybackup.c:774 +#, c-format +msgid "file \"%s\" has checksum of length %d, but expected %d" +msgstr "файл \"%s\" має контрольну суму довжини %d, але очікувалось %d" + +#: pg_verifybackup.c:778 +#, c-format +msgid "checksum mismatch for file \"%s\"" +msgstr "невідповідність контрольної суми для файлу \"%s\"" + +#: pg_verifybackup.c:804 +#, c-format +msgid "WAL parsing failed for timeline %u" +msgstr "не вдалося проаналізувати WAL для часової шкали %u" + +#: pg_verifybackup.c:890 +#, c-format +msgid "%s verifies a backup against the backup manifest.\n\n" +msgstr "%s перевіряє резервну копію відповідно до маніфесту резервного копіювання.\n\n" + +#: pg_verifybackup.c:891 +#, c-format +msgid "Usage:\n" +" %s [OPTION]... BACKUPDIR\n\n" +msgstr "Використання:\n" +" %s [OPTION]... КАТАЛОГ_КОПІЮВАННЯ\n\n" + +#: pg_verifybackup.c:892 +#, c-format +msgid "Options:\n" +msgstr "Параметри:\n" + +#: pg_verifybackup.c:893 +#, c-format +msgid " -e, --exit-on-error exit immediately on error\n" +msgstr " -e, --exit-on-error вийти при помилці\n" + +#: pg_verifybackup.c:894 +#, c-format +msgid " -i, --ignore=RELATIVE_PATH ignore indicated path\n" +msgstr " -i, --ignore=RELATIVE_PATH ігнорувати вказаний шлях\n" + +#: pg_verifybackup.c:895 +#, c-format +msgid " -m, --manifest-path=PATH use specified path for manifest\n" +msgstr " -m, --manifest-path=PATH використовувати вказаний шлях для маніфесту\n" + +#: pg_verifybackup.c:896 +#, c-format +msgid " -n, --no-parse-wal do not try to parse WAL files\n" +msgstr " -n, --no-parse-wal не намагатися аналізувати файли WAL\n" + +#: pg_verifybackup.c:897 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet не друкувати жодного виводу, окрім помилок\n" + +#: pg_verifybackup.c:898 +#, c-format +msgid " -s, --skip-checksums skip checksum verification\n" +msgstr " -s, --skip-checksums не перевіряти контрольні суми\n" + +#: pg_verifybackup.c:899 +#, c-format +msgid " -w, --wal-directory=PATH use specified path for WAL files\n" +msgstr " -w, --wal-directory=PATH використовувати вказаний шлях для файлів WAL\n" + +#: pg_verifybackup.c:900 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію, потім вийти\n" + +#: pg_verifybackup.c:901 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку, потім вийти\n" + +#: pg_verifybackup.c:902 +#, c-format +msgid "\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Повідомляти про помилки на <%s>.\n" + +#: pg_verifybackup.c:903 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + diff --git a/src/bin/pg_verifybackup/po/zh_CN.po b/src/bin/pg_verifybackup/po/zh_CN.po new file mode 100644 index 0000000000000..9dd2291ee4aaa --- /dev/null +++ b/src/bin/pg_verifybackup/po/zh_CN.po @@ -0,0 +1,467 @@ +# LANGUAGE message translation file for pg_verifybackup +# Copyright (C) 2020 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_verifybackup (PostgreSQL) package. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_verifybackup (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-05-17 02:44+0000\n" +"PO-Revision-Date: 2020-06-22 16:00+0800\n" +"Last-Translator: Jie Zhang \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "致命的:" + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "错误: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "警告: " + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "内存溢出\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "无法复制空指针 (内部错误)\n" + +#: ../../common/jsonapi.c:1064 +#, c-format +msgid "Escape sequence \"\\%s\" is invalid." +msgstr "转义序列 \"\\%s\" 无效." + +#: ../../common/jsonapi.c:1067 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "值为 0x%02x 的字符必须进行转义处理." + +#: ../../common/jsonapi.c:1070 +#, c-format +msgid "Expected end of input, but found \"%s\"." +msgstr "期望输入结束,结果发现是\"%s\"." + +#: ../../common/jsonapi.c:1073 +#, c-format +msgid "Expected array element or \"]\", but found \"%s\"." +msgstr "期望为数组元素或者\"]\",但发现结果是\"%s\"." + +#: ../../common/jsonapi.c:1076 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%s\"." +msgstr "期望是\",\" 或 \"]\",但发现结果是\"%s\"." + +#: ../../common/jsonapi.c:1079 +#, c-format +msgid "Expected \":\", but found \"%s\"." +msgstr "期望得到 \":\",但发现结果是\"%s\"." + +#: ../../common/jsonapi.c:1082 +#, c-format +msgid "Expected JSON value, but found \"%s\"." +msgstr "期望是JSON值, 但结果发现是\"%s\"." + +#: ../../common/jsonapi.c:1085 +msgid "The input string ended unexpectedly." +msgstr "输入字符串意外终止." + +#: ../../common/jsonapi.c:1087 +#, c-format +msgid "Expected string or \"}\", but found \"%s\"." +msgstr "期望是字符串或\"}\",但发现结果是\"%s\"." + +#: ../../common/jsonapi.c:1090 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%s\"." +msgstr "期望是 \",\" 或 \"}\",但发现结果是\"%s\"." + +#: ../../common/jsonapi.c:1093 +#, c-format +msgid "Expected string, but found \"%s\"." +msgstr "期望是字符串, 但发现结果是\"%s\"." + +#: ../../common/jsonapi.c:1096 +#, c-format +msgid "Token \"%s\" is invalid." +msgstr "令牌 \"%s\" 无效." + +#: ../../common/jsonapi.c:1099 +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000不能被转换为文本。" + +#: ../../common/jsonapi.c:1101 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "\"\\u\" 后必须紧跟有效的十六进制数数字" + +#: ../../common/jsonapi.c:1104 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "当编码不是UTF8时,大于007F的码位值不能使用Unicode转义值." + +#: ../../common/jsonapi.c:1106 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "Unicode 的高位代理项不能紧随另一个高位代理项." + +#: ../../common/jsonapi.c:1108 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Unicode 代位代理项必须紧随一个高位代理项." + +#: parse_manifest.c:152 +msgid "manifest ended unexpectedly" +msgstr "清单意外结束" + +#: parse_manifest.c:191 +msgid "unexpected object start" +msgstr "意外的对象开始" + +#: parse_manifest.c:224 +msgid "unexpected object end" +msgstr "意外的对象结束" + +#: parse_manifest.c:251 +msgid "unexpected array start" +msgstr "意外的数组开始" + +#: parse_manifest.c:274 +msgid "unexpected array end" +msgstr "意外的数组结束" + +#: parse_manifest.c:299 +msgid "expected version indicator" +msgstr "预期的版本指示器" + +#: parse_manifest.c:328 +msgid "unknown toplevel field" +msgstr "未知的顶层字段" + +#: parse_manifest.c:347 +msgid "unexpected file field" +msgstr "意外的文件字段" + +#: parse_manifest.c:361 +msgid "unexpected wal range field" +msgstr "意外的wal范围字段" + +#: parse_manifest.c:367 +msgid "unexpected object field" +msgstr "意外的对象字段" + +#: parse_manifest.c:397 +msgid "unexpected manifest version" +msgstr "意外的清单版本" + +#: parse_manifest.c:448 +msgid "unexpected scalar" +msgstr "意外的标量" + +#: parse_manifest.c:472 +msgid "missing pathname" +msgstr "缺少路径名" + +#: parse_manifest.c:475 +msgid "both pathname and encoded pathname" +msgstr "路径名和编码路径名" + +#: parse_manifest.c:477 +msgid "missing size" +msgstr "缺少大小" + +#: parse_manifest.c:480 +msgid "checksum without algorithm" +msgstr "校验和没有算法" + +#: parse_manifest.c:494 +msgid "unable to decode filename" +msgstr "无法解码文件名" + +#: parse_manifest.c:504 +msgid "file size is not an integer" +msgstr "文件大小不是整数" + +#: parse_manifest.c:510 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "无法识别的校验和算法: \"%s\"" + +#: parse_manifest.c:529 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "文件\"%s\"的校验和无效: \"%s\"" + +#: parse_manifest.c:572 +msgid "missing timeline" +msgstr "缺少时间线" + +#: parse_manifest.c:574 +msgid "missing start LSN" +msgstr "缺少起始LSN" + +#: parse_manifest.c:576 +msgid "missing end LSN" +msgstr "缺少结束LSN" + +#: parse_manifest.c:582 +msgid "timeline is not an integer" +msgstr "时间线不是整数" + +#: parse_manifest.c:585 +msgid "unable to parse start LSN" +msgstr "无法解析起始LSN" + +#: parse_manifest.c:588 +msgid "unable to parse end LSN" +msgstr "无法解析结束LSN" + +#: parse_manifest.c:649 +msgid "expected at least 2 lines" +msgstr "至少需要2行" + +#: parse_manifest.c:652 +msgid "last line not newline-terminated" +msgstr "最后一行未以换行符结尾" + +#: parse_manifest.c:661 +#, c-format +msgid "manifest has no checksum" +msgstr "清单没有校验和" + +#: parse_manifest.c:665 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "清单校验和无效: \"%s\"" + +#: parse_manifest.c:669 +#, c-format +msgid "manifest checksum mismatch" +msgstr "清单校验和不匹配" + +#: parse_manifest.c:683 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "清单校验和不匹配: %s" + +#: pg_verifybackup.c:255 pg_verifybackup.c:265 pg_verifybackup.c:277 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "请用 \"%s --help\" 获取更多的信息.\n" + +#: pg_verifybackup.c:264 +#, c-format +msgid "no backup directory specified" +msgstr "未指定备份目录" + +#: pg_verifybackup.c:275 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "命令行参数太多 (第一个是 \"%s\")" + +#: pg_verifybackup.c:298 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "" +"%2$s需要程序\"%1$s\"\n" +"但在与\"%3$s\"相同的目录中找不到该程序.\n" +"检查您的安装." + +#: pg_verifybackup.c:303 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "" +"程序\"%s\"是由\"%s\"找到的\n" +"但与%s的版本不同.\n" +"检查您的安装." + +#: pg_verifybackup.c:361 +#, c-format +msgid "backup successfully verified\n" +msgstr "备份已成功验证\n" + +#: pg_verifybackup.c:387 pg_verifybackup.c:723 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "无法打开文件 \"%s\": %m" + +#: pg_verifybackup.c:391 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "无法取文件 \"%s\" 的状态: %m" + +#: pg_verifybackup.c:411 pg_verifybackup.c:738 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "无法读取文件 \"%s\": %m" + +#: pg_verifybackup.c:414 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "无法读取文件\"%1$s\":读取了%3$zu中的%2$d" + +#: pg_verifybackup.c:474 +#, c-format +msgid "duplicate pathname in backup manifest: \"%s\"" +msgstr "备份清单中的路径名重复: \"%s\"" + +#: pg_verifybackup.c:537 pg_verifybackup.c:544 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "无法打开目录 \"%s\": %m" + +#: pg_verifybackup.c:576 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "无法关闭目录 \"%s\": %m" + +#: pg_verifybackup.c:596 +#, c-format +msgid "could not stat file or directory \"%s\": %m" +msgstr "无法统计文件或目录\"%s\": %m" + +#: pg_verifybackup.c:619 +#, c-format +msgid "\"%s\" is not a file or directory" +msgstr "\"%s\"不是文件或目录" + +#: pg_verifybackup.c:629 +#, c-format +msgid "\"%s\" is present on disk but not in the manifest" +msgstr "磁盘上有\"%s\",但清单中没有" + +#: pg_verifybackup.c:641 +#, c-format +msgid "\"%s\" has size %zu on disk but size %zu in the manifest" +msgstr "\"%s\"在磁盘上有大小%zu,但在清单中有大小%zu" + +#: pg_verifybackup.c:668 +#, c-format +msgid "\"%s\" is present in the manifest but not on disk" +msgstr "清单中有\"%s\",但磁盘上没有" + +#: pg_verifybackup.c:744 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "无法关闭文件 \"%s\": %m" + +#: pg_verifybackup.c:763 +#, c-format +msgid "file \"%s\" should contain %zu bytes, but read %zu bytes" +msgstr "文件\"%s\"应包含%zu到字节,但读取到%zu字节" + +#: pg_verifybackup.c:774 +#, c-format +msgid "file \"%s\" has checksum of length %d, but expected %d" +msgstr "文件\"%s\"的校验和长度为%d,但应为%d" + +#: pg_verifybackup.c:778 +#, c-format +msgid "checksum mismatch for file \"%s\"" +msgstr "文件\"%s\"的校验和不匹配" + +#: pg_verifybackup.c:804 +#, c-format +msgid "WAL parsing failed for timeline %u" +msgstr "时间线%u的WAL解析失败" + +#: pg_verifybackup.c:890 +#, c-format +msgid "" +"%s verifies a backup against the backup manifest.\n" +"\n" +msgstr "" +"%s 根据备份清单验证备份.\n" +"\n" + +#: pg_verifybackup.c:891 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... BACKUPDIR\n" +"\n" +msgstr "" +"用法:\n" +" %s [选项]... BACKUPDIR\n" +"\n" + +#: pg_verifybackup.c:892 +#, c-format +msgid "Options:\n" +msgstr "选项:\n" + +#: pg_verifybackup.c:893 +#, c-format +msgid " -e, --exit-on-error exit immediately on error\n" +msgstr " -e, --exit-on-error 出错时立即退出\n" + +#: pg_verifybackup.c:894 +#, c-format +msgid " -i, --ignore=RELATIVE_PATH ignore indicated path\n" +msgstr " -i, --ignore=RELATIVE_PATH 忽略指定的路径\n" + +#: pg_verifybackup.c:895 +#, c-format +msgid " -m, --manifest-path=PATH use specified path for manifest\n" +msgstr " -m, --manifest-path=PATH 使用清单的指定路径\n" + +#: pg_verifybackup.c:896 +#, c-format +msgid " -n, --no-parse-wal do not try to parse WAL files\n" +msgstr " -n, --no-parse-wal 不试图解析WAL文件\n" + +#: pg_verifybackup.c:897 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet 不打印任何输出,错误除外\n" + +#: pg_verifybackup.c:898 +#, c-format +msgid " -s, --skip-checksums skip checksum verification\n" +msgstr " -s, --skip-checksums 跳过校验和验证\n" + +#: pg_verifybackup.c:899 +#, c-format +msgid " -w, --wal-directory=PATH use specified path for WAL files\n" +msgstr " -w, --wal-directory=PATH 对WAL文件使用指定路径\n" + +#: pg_verifybackup.c:900 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version 输出版本信息,然后退出\n" + +#: pg_verifybackup.c:901 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help 显示此帮助,然后退出\n" + +#: pg_verifybackup.c:902 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"臭虫报告至<%s>.\n" + +#: pg_verifybackup.c:903 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 主页: <%s>\n" diff --git a/src/bin/pg_waldump/nls.mk b/src/bin/pg_waldump/nls.mk index 2ac5277b839f6..b46b5d3f8bd25 100644 --- a/src/bin/pg_waldump/nls.mk +++ b/src/bin/pg_waldump/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_waldump/nls.mk CATALOG_NAME = pg_waldump -AVAIL_LANGUAGES = cs de es fr ja ko ru sv tr vi zh_CN +AVAIL_LANGUAGES = cs de es fr ja ko ru sv tr uk vi zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) pg_waldump.c GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) fatal_error GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) fatal_error:1:c-format diff --git a/src/bin/pg_waldump/po/cs.po b/src/bin/pg_waldump/po/cs.po index 2b8ab21a6ffd0..b8b1278500b06 100644 --- a/src/bin/pg_waldump/po/cs.po +++ b/src/bin/pg_waldump/po/cs.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_waldump (PostgreSQL) 11\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:13+0000\n" -"PO-Revision-Date: 2019-09-27 20:46+0200\n" +"POT-Creation-Date: 2020-10-31 16:14+0000\n" +"PO-Revision-Date: 2020-10-31 21:06+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: cs\n" @@ -16,31 +16,29 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format -#| msgid "fatal\n" msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format -#| msgid "warning" msgid "warning: " msgstr "warning: " -#: pg_waldump.c:148 +#: pg_waldump.c:146 #, c-format -msgid "could not open file \"%s\": %s" -msgstr "nelze otevřít soubor \"%s\": %s" +msgid "could not open file \"%s\": %m" +msgstr "nelze otevřít soubor \"%s\": %m" -#: pg_waldump.c:205 +#: pg_waldump.c:202 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" @@ -48,47 +46,42 @@ msgstr[0] "velikost WAL segmentu musí být mocnina dvou mezi 1 MB a 1 GB, ale h msgstr[1] "velikost WAL segmentu musí být mocnina dvou mezi 1 MB a 1 GB, ale hlavička WAL souboru \"%s\" udává %d byty" msgstr[2] "velikost WAL segmentu musí být mocnina dvou mezi 1 MB a 1 GB, ale hlavička WAL souboru \"%s\" udává %d bytů" -#: pg_waldump.c:213 +#: pg_waldump.c:210 #, c-format -msgid "could not read file \"%s\": %s" -msgstr "nelze číst soubor \"%s\": %s" +msgid "could not read file \"%s\": %m" +msgstr "nelze číst soubor \"%s\": %m" -#: pg_waldump.c:216 +#: pg_waldump.c:213 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "nelze číst soubor \"%s\": načteno %d z %zu" -#: pg_waldump.c:294 +#: pg_waldump.c:275 #, c-format msgid "could not locate WAL file \"%s\"" msgstr "nelze najít WAL soubor \"%s\"" -#: pg_waldump.c:296 +#: pg_waldump.c:277 #, c-format msgid "could not find any WAL file" msgstr "nelze najít žádný WAL soubor" -#: pg_waldump.c:367 +#: pg_waldump.c:318 #, c-format -msgid "could not find file \"%s\": %s" -msgstr "nelze najít soubor \"%s\": %s" +msgid "could not find file \"%s\": %m" +msgstr "nelze najít soubor \"%s\": %m" -#: pg_waldump.c:382 -#, c-format -msgid "could not seek in log file %s to offset %u: %s" -msgstr "nelze nastavit pozici (seek) v log souboru %s na offset %u: %s" - -#: pg_waldump.c:405 +#: pg_waldump.c:367 #, c-format -msgid "could not read from log file %s, offset %u, length %d: %s" -msgstr "nelze číst z log souboru %s, offset %u, délka %d: %s" +msgid "could not read from file %s, offset %u: %m" +msgstr "nelze číst ze souboru %s, offset %u : %m" -#: pg_waldump.c:408 +#: pg_waldump.c:371 #, c-format -msgid "could not read from log file %s, offset %u: read %d of %zu" -msgstr "nelze číst z log souboru %s, offset %u, načteno %d z %zu" +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "nelze číst ze souboru %s, offset %u, načteno %d z %zu" -#: pg_waldump.c:787 +#: pg_waldump.c:720 #, c-format msgid "" "%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" @@ -97,17 +90,17 @@ msgstr "" "%s dekóduje a zobrazuje PostgreSQL write-ahead logy pro účely debugování.\n" "\n" -#: pg_waldump.c:789 +#: pg_waldump.c:722 #, c-format msgid "Usage:\n" msgstr "Použití:\n" -#: pg_waldump.c:790 +#: pg_waldump.c:723 #, c-format msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" msgstr " %s [OPTION]... [STARTSEG [ENDSEG]]\n" -#: pg_waldump.c:791 +#: pg_waldump.c:724 #, c-format msgid "" "\n" @@ -116,27 +109,27 @@ msgstr "" "\n" "Přepínače:\n" -#: pg_waldump.c:792 +#: pg_waldump.c:725 #, c-format msgid " -b, --bkp-details output detailed information about backup blocks\n" msgstr " -b, --bkp-details output detailed information about backup blocks\n" -#: pg_waldump.c:793 +#: pg_waldump.c:726 #, c-format msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" msgstr " -e, --end=RECPTR přestane číst WAL na pozici RECPTR\n" -#: pg_waldump.c:794 +#: pg_waldump.c:727 #, c-format msgid " -f, --follow keep retrying after reaching end of WAL\n" msgstr " -f, --follow dále to zkoušet po dosažení konce WAL\n" -#: pg_waldump.c:795 +#: pg_waldump.c:728 #, c-format msgid " -n, --limit=N number of records to display\n" msgstr " -n, --limit=N počet záznamů pro zobrazení\n" -#: pg_waldump.c:796 +#: pg_waldump.c:729 #, c-format msgid "" " -p, --path=PATH directory in which to find log segment files or a\n" @@ -147,7 +140,12 @@ msgstr "" " adresář s ./pg_wal který tyto soubory obsahuje\n" " (implicitní: aktuální adresář, ./pg_wal, $PGDATA/pg_wal)\n" -#: pg_waldump.c:799 +#: pg_waldump.c:732 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet nevypisovat žádné zprávy, s výjimkou chyb\n" + +#: pg_waldump.c:733 #, c-format msgid "" " -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" @@ -156,12 +154,12 @@ msgstr "" " -r, --rmgr=RMGR zobrazí pouze záznamy generované resource managerem RMGR;\n" " použijte --rmgr=list pro seznam platných jmen resource managerů\n" -#: pg_waldump.c:801 +#: pg_waldump.c:735 #, c-format msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" msgstr " -s, --start=RECPTR začne číst WAL na pozici RECPTR\n" -#: pg_waldump.c:802 +#: pg_waldump.c:736 #, c-format msgid "" " -t, --timeline=TLI timeline from which to read log records\n" @@ -170,17 +168,17 @@ msgstr "" " -t, --timeline=TLI timeline ze které číst log záznamy\n" " (implicitní: 1 nebo hodnota v STARTSEG)\n" -#: pg_waldump.c:804 +#: pg_waldump.c:738 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version vypiš informace o verzi, potom skonči\n" -#: pg_waldump.c:805 +#: pg_waldump.c:739 #, c-format msgid " -x, --xid=XID only show records with transaction ID XID\n" msgstr " -x, --xid=XID zobrazí pouze záznamy pro transakci s ID XID\n" -#: pg_waldump.c:806 +#: pg_waldump.c:740 #, c-format msgid "" " -z, --stats[=record] show statistics instead of records\n" @@ -189,111 +187,111 @@ msgstr "" " -z, --stats[=record] zobrazí statistiky namísto záznamů\n" " (volitelně, zobrazí per-record statistiky)\n" -#: pg_waldump.c:808 +#: pg_waldump.c:742 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ukaž tuto nápovědu, potom skonči\n" -#: pg_waldump.c:809 +#: pg_waldump.c:743 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Chyby hlaste na adresu .\n" +"Chyby hlašte na <%s>.\n" + +#: pg_waldump.c:744 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" -#: pg_waldump.c:883 +#: pg_waldump.c:821 #, c-format msgid "no arguments specified" msgstr "nezadán žádný argument" -#: pg_waldump.c:898 +#: pg_waldump.c:836 #, c-format msgid "could not parse end WAL location \"%s\"" msgstr "nelze naparsovat koncovou WAL pozici \"%s\"" -#: pg_waldump.c:910 +#: pg_waldump.c:848 #, c-format msgid "could not parse limit \"%s\"" msgstr "nelze naparsovat limit \"%s\"" -#: pg_waldump.c:938 +#: pg_waldump.c:879 #, c-format msgid "resource manager \"%s\" does not exist" msgstr "resource manager \"%s\" neexistuje" -#: pg_waldump.c:947 +#: pg_waldump.c:888 #, c-format msgid "could not parse start WAL location \"%s\"" msgstr "nelze naparsovat počáteční WAL pozici \"%s\"" -#: pg_waldump.c:957 +#: pg_waldump.c:898 #, c-format msgid "could not parse timeline \"%s\"" msgstr "nelze naparsovat timeline \"%s\"" -#: pg_waldump.c:964 +#: pg_waldump.c:905 #, c-format msgid "could not parse \"%s\" as a transaction ID" msgstr "nelze naparsovat \"%s\" jako ID transakce" -#: pg_waldump.c:979 +#: pg_waldump.c:920 #, c-format msgid "unrecognized argument to --stats: %s" msgstr "nerozpoznaný argument pro --stats: %s" -#: pg_waldump.c:992 +#: pg_waldump.c:933 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "příliš mnoho argumentů v příkazové řádce (první je \"%s\")" -#: pg_waldump.c:1002 +#: pg_waldump.c:943 pg_waldump.c:963 #, c-format -msgid "path \"%s\" could not be opened: %s" -msgstr "cestu \"%s\" nelze otevřít: %s" +msgid "could not open directory \"%s\": %m" +msgstr "nelze otevřít adresář \"%s\": %m" -#: pg_waldump.c:1023 -#, c-format -msgid "could not open directory \"%s\": %s" -msgstr "nelze otevřít adresář \"%s\": %s" - -#: pg_waldump.c:1030 pg_waldump.c:1061 +#: pg_waldump.c:969 pg_waldump.c:1000 #, c-format msgid "could not open file \"%s\"" msgstr "nelze otevřít soubor \"%s\"" -#: pg_waldump.c:1040 +#: pg_waldump.c:979 #, c-format msgid "start WAL location %X/%X is not inside file \"%s\"" msgstr "počátační WAL pozice %X/%X není v souboru \"%s\"" -#: pg_waldump.c:1068 +#: pg_waldump.c:1007 #, c-format msgid "ENDSEG %s is before STARTSEG %s" msgstr "ENDSEG %s je před STARTSEG %s" -#: pg_waldump.c:1083 +#: pg_waldump.c:1022 #, c-format msgid "end WAL location %X/%X is not inside file \"%s\"" msgstr "koncová WAL pozice %X/%X není v souboru \"%s\"" -#: pg_waldump.c:1096 +#: pg_waldump.c:1035 #, c-format msgid "no start WAL location given" msgstr "není zadána žádná WAL pozice" -#: pg_waldump.c:1106 +#: pg_waldump.c:1049 #, c-format msgid "out of memory" msgstr "nedostatek paměti" -#: pg_waldump.c:1112 +#: pg_waldump.c:1055 #, c-format msgid "could not find a valid record after %X/%X" msgstr "nelze najít platný záznam po %X/%X" -#: pg_waldump.c:1123 +#: pg_waldump.c:1066 #, c-format msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" @@ -301,18 +299,40 @@ msgstr[0] "první záznam po %X/%X, na %X/%X, přeskakuji %u bytů\n" msgstr[1] "první záznam po %X/%X, na %X/%X, přeskakuji %u byty\n" msgstr[2] "první záznam po %X/%X, na %X/%X, přeskakuji %u bytů\n" -#: pg_waldump.c:1174 +#: pg_waldump.c:1117 #, c-format msgid "error in WAL record at %X/%X: %s" msgstr "chyba ve WAL záznamu na %X/%X: %s" -#: pg_waldump.c:1184 +#: pg_waldump.c:1127 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" +#~ msgid "%s: FATAL: " +#~ msgstr "%s: FATAL: " + #~ msgid "not enough data in file \"%s\"" #~ msgstr "nedostatek dat v souboru \"%s\"" -#~ msgid "%s: FATAL: " -#~ msgstr "%s: FATAL: " +#~ msgid "could not open directory \"%s\": %s" +#~ msgstr "nelze otevřít adresář \"%s\": %s" + +#~ msgid "path \"%s\" could not be opened: %s" +#~ msgstr "cestu \"%s\" nelze otevřít: %s" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Chyby hlaste na adresu .\n" + +#~ msgid "could not seek in log file %s to offset %u: %s" +#~ msgstr "nelze nastavit pozici (seek) v log souboru %s na offset %u: %s" + +#~ msgid "could not read file \"%s\": %s" +#~ msgstr "nelze číst soubor \"%s\": %s" + +#~ msgid "could not open file \"%s\": %s" +#~ msgstr "nelze otevřít soubor \"%s\": %s" diff --git a/src/bin/pg_waldump/po/es.po b/src/bin/pg_waldump/po/es.po index 88b6b41f1a724..c4001027e0d71 100644 --- a/src/bin/pg_waldump/po/es.po +++ b/src/bin/pg_waldump/po/es.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_waldump (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:45+0000\n" -"PO-Revision-Date: 2019-06-06 17:25-0400\n" +"POT-Creation-Date: 2020-09-13 10:45+0000\n" +"PO-Revision-Date: 2020-09-18 18:35-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -68,22 +68,20 @@ msgid "could not find any WAL file" msgstr "no se pudo encontrar ningún archivo WAL" #: pg_waldump.c:318 -#, fuzzy, c-format -#| msgid "could not find file \"%s\": %s" +#, c-format msgid "could not find file \"%s\": %m" -msgstr "no se pudo encontrar el archivo «%s»: %s" +msgstr "no se pudo encontrar el archivo «%s»: %m" #: pg_waldump.c:367 -#, fuzzy, c-format -#| msgid "Could not read from file \"%s\" at offset %u: %m." +#, c-format msgid "could not read from file %s, offset %u: %m" -msgstr "No se pudo leer desde el archivo «%s» en la posición %u: %m." +msgstr "no se pudo leer desde el archivo «%s» en la posición %u: %m" +# XXX why talk about "log segment" instead of "file"? #: pg_waldump.c:371 -#, fuzzy, c-format -#| msgid "could not read from log file %s, offset %u: read %d of %zu" +#, c-format msgid "could not read from file %s, offset %u: read %d of %zu" -msgstr "no se pudo leer del archivo de log %s, posición %u: leído %d de %zu" +msgstr "no se pudo leer del archivo %s, posición %u: leídos %d de %zu" #: pg_waldump.c:720 #, c-format @@ -145,10 +143,9 @@ msgstr "" " (por omisión: directorio actual, ./pg_wal, $PGDATA/pg_wal)\n" #: pg_waldump.c:732 -#, fuzzy, c-format -#| msgid " -q, --quiet don't write any messages\n" +#, c-format msgid " -q, --quiet do not print any output, except for errors\n" -msgstr " -q, --quiet no escribir ningún mensaje\n" +msgstr " -q, --quiet no escribir ningún mensaje, excepto errores\n" #: pg_waldump.c:733 #, c-format @@ -203,11 +200,13 @@ msgid "" "\n" "Report bugs to <%s>.\n" msgstr "" +"\n" +"Reporte errores a <%s>.\n" #: pg_waldump.c:744 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" #: pg_waldump.c:821 #, c-format @@ -310,28 +309,3 @@ msgstr "error en registro de WAL en %X/%X: %s" #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Pruebe «%s --help» para mayor información.\n" - -#~ msgid "could not open file \"%s\": %s" -#~ msgstr "no se pudo abrir el archivo «%s»: %s" - -#~ msgid "could not read file \"%s\": %s" -#~ msgstr "no se pudo leer el archivo «%s»: %s" - -#~ msgid "could not seek in log file %s to offset %u: %s" -#~ msgstr "no se pudo posicionar (seek) en el archivo de log %s a la posición %u: %s" - -#~ msgid "could not read from log file %s, offset %u, length %d: %s" -#~ msgstr "no se pudo leer del archivo de log %s, posición %u, longitud %d: %s" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Reporte errores a .\n" - -#~ msgid "path \"%s\" could not be opened: %s" -#~ msgstr "la ruta «%s» no se pudo abrir: %s" - -#~ msgid "could not open directory \"%s\": %s" -#~ msgstr "no se pudo abrir el directorio «%s»: %s" diff --git a/src/bin/pg_waldump/po/ja.po b/src/bin/pg_waldump/po/ja.po index 7fb061fc0f217..5e5a631d5c88c 100644 --- a/src/bin/pg_waldump/po/ja.po +++ b/src/bin/pg_waldump/po/ja.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_waldump (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: pg_waldump (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-06-06 10:43+0900\n" -"PO-Revision-Date: 2019-06-10 14:27+0900\n" +"POT-Creation-Date: 2020-08-21 15:55+0900\n" +"PO-Revision-Date: 2020-09-13 08:57+0200\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -15,98 +15,71 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n!=1;\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:241 #, c-format msgid "fatal: " msgstr "致命的エラー: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:248 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:255 #, c-format msgid "warning: " msgstr "警告: " -#: pg_waldump.c:148 +#: pg_waldump.c:146 #, c-format -msgid "could not open file \"%s\": %s" -msgstr "ファイル\"%s\"をオープンできませんでした: %s" +msgid "could not open file \"%s\": %m" +msgstr "ファイル\"%s\"をオープンできませんでした: %m" -#: pg_waldump.c:205 +#: pg_waldump.c:202 #, c-format -#| msgid "" -#| "WAL segment size must be a power of two between 1 MB and 1 GB, but the " -#| "control file specifies %d byte" -#| msgid_plural "" -#| "WAL segment size must be a power of two between 1 MB and 1 GB, but the " -#| "control file specifies %d bytes" -msgid "" -"WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL " -"file \"%s\" header specifies %d byte" -msgid_plural "" -"WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL " -"file \"%s\" header specifies %d bytes" -msgstr[0] "" -"WALセグメントのサイズは1MBと1GBの間の2の累乗でなければなりません、しかしWAL" -"ファイル\"%s\"のヘッダでは%dバイトとなっています" -msgstr[1] "" -"WALセグメントのサイズは1MBと1GBの間の2の累乗でなければなりません、しかしWAL" -"ファイル\"%s\"のヘッダでは%dバイトとなっています" +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" +msgstr[0] "WALセグメントのサイズは1MBと1GBの間の2の累乗でなければなりません、しかしWALファイル\"%s\"のヘッダでは%dバイトとなっています" +msgstr[1] "WALセグメントのサイズは1MBと1GBの間の2の累乗でなければなりません、しかしWALファイル\"%s\"のヘッダでは%dバイトとなっています" -#: pg_waldump.c:213 +#: pg_waldump.c:210 #, c-format -#| msgid "could not read file \"%s\": %s\n" -msgid "could not read file \"%s\": %s" -msgstr "ファイル\"%s\"を読み込めませんでした: %s" +msgid "could not read file \"%s\": %m" +msgstr "ファイル\"%s\"の読み取りに失敗しました: %m" -#: pg_waldump.c:216 +#: pg_waldump.c:213 #, c-format msgid "could not read file \"%s\": read %d of %zu" -msgstr "" -"ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込み" -"ました" +msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込みました" -#: pg_waldump.c:294 +#: pg_waldump.c:275 #, c-format -#| msgid "could not find WAL file \"%s\"" msgid "could not locate WAL file \"%s\"" msgstr "WALファイル\"%s\"がありませんでした" -#: pg_waldump.c:296 +#: pg_waldump.c:277 #, c-format -#| msgid "could not find any WAL files" msgid "could not find any WAL file" msgstr "WALファイルが全くありません" -#: pg_waldump.c:367 -#, c-format -msgid "could not find file \"%s\": %s" -msgstr "ファイル\"%s\"が見つかりませんでした: %s" - -#: pg_waldump.c:382 +#: pg_waldump.c:318 #, c-format -msgid "could not seek in log file %s to offset %u: %s" -msgstr "ログファイル%sでオフセット%uにシークできませんでした: %s" +msgid "could not find file \"%s\": %m" +msgstr "ファイル\"%s\"が見つかりませんでした: %m" -#: pg_waldump.c:405 +#: pg_waldump.c:367 #, c-format -msgid "could not read from log file %s, offset %u, length %d: %s" -msgstr "ログファイル%sのオフセット%uから長さ%d分を読み取れませんでした: %s" +msgid "could not read from file %s, offset %u: %m" +msgstr "ファイル\"%s\"のオフセット%uを読み取れませんでした: %m" -#: pg_waldump.c:408 +#: pg_waldump.c:371 #, c-format -#| msgid "could not read from log segment %s, offset %u: read %d of %zu" -msgid "could not read from log file %s, offset %u: read %d of %zu" -msgstr "" -"ログファイル%1$s、オフセット%2$uを読み取れませんでした: %4$zu中%3$d読み取り済" -"み" +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "ファイル%1$s、オフセット%2$uから読み取れませんでした: %4$zu中%3$d" -#: pg_waldump.c:787 +#: pg_waldump.c:715 #, c-format msgid "" "%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" @@ -115,17 +88,17 @@ msgstr "" "%sはデバッグのためにPostgreSQLの先行書き込みログをデコードして表示します。\n" "\n" -#: pg_waldump.c:789 +#: pg_waldump.c:717 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: pg_waldump.c:790 +#: pg_waldump.c:718 #, c-format msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" msgstr " %s [オプション] ... [開始セグメント [終了セグメント]]\n" -#: pg_waldump.c:791 +#: pg_waldump.c:719 #, c-format msgid "" "\n" @@ -134,60 +107,58 @@ msgstr "" "\n" "オプション:\n" -#: pg_waldump.c:792 +#: pg_waldump.c:720 #, c-format -msgid "" -" -b, --bkp-details output detailed information about backup blocks\n" +msgid " -b, --bkp-details output detailed information about backup blocks\n" msgstr " -b, --bkp-details バックアップブロックに関する詳細情報を出力\n" -#: pg_waldump.c:793 +#: pg_waldump.c:721 #, c-format msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" msgstr " -e, --end=RECPTR WAL位置RECPTRで読み込みを停止\n" -#: pg_waldump.c:794 +#: pg_waldump.c:722 #, c-format msgid " -f, --follow keep retrying after reaching end of WAL\n" msgstr " -f, --follow WALの終端に達してからもリトライを続ける\n" -#: pg_waldump.c:795 +#: pg_waldump.c:723 #, c-format msgid " -n, --limit=N number of records to display\n" msgstr " -n, --limit=N 表示するレコード数\n" -#: pg_waldump.c:796 +#: pg_waldump.c:724 #, c-format msgid "" " -p, --path=PATH directory in which to find log segment files or a\n" " directory with a ./pg_wal that contains such files\n" -" (default: current directory, ./pg_wal, $PGDATA/" -"pg_wal)\n" +" (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n" msgstr "" " -p, --path=PATH ログセグメントファイルを探すディレクトリ、または\n" -" そのようなファイルを格納している ./pg_walディレクト" -"リ\n" +" そのようなファイルを格納している ./pg_walディレクトリ\n" " (デフォルト: カレントディレクトリ, ./pg_wal,\n" " $PGDATA/pg_wal)\n" -#: pg_waldump.c:799 +#: pg_waldump.c:727 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet エラー以外何も出力しない\n" + +#: pg_waldump.c:728 #, c-format msgid "" -" -r, --rmgr=RMGR only show records generated by resource manager " -"RMGR;\n" -" use --rmgr=list to list valid resource manager " -"names\n" +" -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" +" use --rmgr=list to list valid resource manager names\n" msgstr "" -" -r, --rmgr=RMGR リソースマネージャーRMGRで生成されたレコードのみを表" -"示\n" -" --rmgr=list で有効なリソースマネージャーの一覧を表" -"示\n" +" -r, --rmgr=RMGR リソースマネージャーRMGRで生成されたレコードのみを表示\n" +" --rmgr=list で有効なリソースマネージャーの一覧を表示\n" -#: pg_waldump.c:801 +#: pg_waldump.c:730 #, c-format msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" msgstr " -s, --start=RECPTR WAL位置RECPTRから読み込みを開始\n" -#: pg_waldump.c:802 +#: pg_waldump.c:731 #, c-format msgid "" " -t, --timeline=TLI timeline from which to read log records\n" @@ -196,18 +167,17 @@ msgstr "" " -t, --timeline=TLI ログレコードを読むべきタイムライン\n" " (デフォルト: 1 またはSTARTSEGで使われた値)\n" -#: pg_waldump.c:804 +#: pg_waldump.c:733 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_waldump.c:805 +#: pg_waldump.c:734 #, c-format msgid " -x, --xid=XID only show records with transaction ID XID\n" -msgstr "" -" -x, --xid=XID トランザクションIDがXIDのレコードのみを表示する\n" +msgstr " -x, --xid=XID トランザクションIDがXIDのレコードのみを表示する\n" -#: pg_waldump.c:806 +#: pg_waldump.c:735 #, c-format msgid "" " -z, --stats[=record] show statistics instead of records\n" @@ -216,134 +186,138 @@ msgstr "" " -z, --stats[=レコード] レコードの代わりに統計情報を表示する\n" " (オプションで、レコードごとの統計を表示する)\n" -#: pg_waldump.c:808 +#: pg_waldump.c:737 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_waldump.c:868 +#: pg_waldump.c:738 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"バグは<%s>に報告してください。\n" + +#: pg_waldump.c:739 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" + +#: pg_waldump.c:816 #, c-format -#| msgid "%s: no arguments specified\n" msgid "no arguments specified" msgstr "引数が指定されていません" -#: pg_waldump.c:883 +#: pg_waldump.c:831 #, c-format -#| msgid "%s: could not parse end WAL location \"%s\"\n" msgid "could not parse end WAL location \"%s\"" msgstr "WALの終了位置\"%s\"をパースできませんでした" -#: pg_waldump.c:899 +#: pg_waldump.c:843 #, c-format -#| msgid "%s: could not parse limit \"%s\"\n" msgid "could not parse limit \"%s\"" msgstr "表示レコード数の制限値\"%s\"をパースできませんでした" -#: pg_waldump.c:927 +#: pg_waldump.c:874 #, c-format -#| msgid "%s: resource manager \"%s\" does not exist\n" msgid "resource manager \"%s\" does not exist" msgstr "リソースマネージャー\"%s\"は存在しません" -#: pg_waldump.c:936 +#: pg_waldump.c:883 #, c-format -#| msgid "%s: could not parse start WAL location \"%s\"\n" msgid "could not parse start WAL location \"%s\"" msgstr "WALの開始位置\"%s\"をパースできませんでした" -#: pg_waldump.c:946 +#: pg_waldump.c:893 #, c-format -#| msgid "%s: could not parse timeline \"%s\"\n" msgid "could not parse timeline \"%s\"" msgstr "タイムライン\"%s\"をパースできませんでした" -#: pg_waldump.c:957 +#: pg_waldump.c:900 #, c-format -#| msgid "%s: could not parse \"%s\" as a transaction ID\n" msgid "could not parse \"%s\" as a transaction ID" msgstr "\"%s\"をトランザクションIDとしてパースできませんでした" -#: pg_waldump.c:972 +#: pg_waldump.c:915 #, c-format -#| msgid "%s: unrecognized argument to --stats: %s\n" msgid "unrecognized argument to --stats: %s" msgstr "--statsの引数が認識できません: %s" -#: pg_waldump.c:985 +#: pg_waldump.c:928 #, c-format -#| msgid "%s: too many command-line arguments (first is \"%s\")\n" msgid "too many command-line arguments (first is \"%s\")" msgstr "コマンドライン引数が多すぎます(先頭は\"%s\")" -#: pg_waldump.c:995 +#: pg_waldump.c:938 pg_waldump.c:958 #, c-format -#| msgid "%s: path \"%s\" could not be opened: %s\n" -msgid "path \"%s\" could not be opened: %s" -msgstr "パス\"%s\"を開けませんでした: %s" +msgid "could not open directory \"%s\": %m" +msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" -#: pg_waldump.c:1016 -#, c-format -msgid "could not open directory \"%s\": %s" -msgstr "ディレクトリ\"%s\"を開くことができませんでした: %s" - -#: pg_waldump.c:1023 pg_waldump.c:1054 +#: pg_waldump.c:964 pg_waldump.c:995 #, c-format msgid "could not open file \"%s\"" msgstr "ファイル\"%s\"を開くことができませんでした" -#: pg_waldump.c:1033 +#: pg_waldump.c:974 #, c-format -#| msgid "%s: start WAL location %X/%X is not inside file \"%s\"\n" msgid "start WAL location %X/%X is not inside file \"%s\"" msgstr "WALの開始位置%X/%Xはファイル\"%s\"の中ではありません" -#: pg_waldump.c:1061 +#: pg_waldump.c:1002 #, c-format msgid "ENDSEG %s is before STARTSEG %s" msgstr "ENDSEG%sがSTARTSEG %sより前に現れました" -#: pg_waldump.c:1076 +#: pg_waldump.c:1017 #, c-format -#| msgid "%s: end WAL location %X/%X is not inside file \"%s\"\n" msgid "end WAL location %X/%X is not inside file \"%s\"" msgstr "WALの終了位置%X/%Xはファイル\"%s\"の中ではありません" -#: pg_waldump.c:1089 +#: pg_waldump.c:1030 #, c-format -#| msgid "%s: no start WAL location given\n" msgid "no start WAL location given" msgstr "WALの開始位置が指定されていません" -#: pg_waldump.c:1099 +#: pg_waldump.c:1044 #, c-format msgid "out of memory" msgstr "メモリ不足です" -#: pg_waldump.c:1105 +#: pg_waldump.c:1050 #, c-format msgid "could not find a valid record after %X/%X" msgstr "%X/%Xの後に有効なレコードが見つかりませんでした" -#: pg_waldump.c:1116 +#: pg_waldump.c:1061 #, c-format msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" -msgstr[0] "" -"先頭レコードが%X/%Xの後の%X/%Xの位置にありました。%uバイト分をスキップしてい" -"ます\n" -msgstr[1] "" -"先頭レコードが%X/%Xの後の%X/%Xの位置にありました。%uバイト分をスキップしてい" -"ます\n" +msgstr[0] "先頭レコードが%X/%Xの後の%X/%Xの位置にありました。%uバイト分をスキップしています\n" +msgstr[1] "先頭レコードが%X/%Xの後の%X/%Xの位置にありました。%uバイト分をスキップしています\n" -#: pg_waldump.c:1167 +#: pg_waldump.c:1112 #, c-format msgid "error in WAL record at %X/%X: %s" msgstr "WALレコードの%X/%Xでエラー: %s" -#: pg_waldump.c:1177 +#: pg_waldump.c:1122 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "\"%s --help\"で詳細を確認してください。\n" #~ msgid "%s: FATAL: " #~ msgstr "%s: 致命的なエラー: " + +#~ msgid "could not open directory \"%s\": %s" +#~ msgstr "ディレクトリ\"%s\"を開くことができませんでした: %s" + +#~ msgid "could not read from log file %s, offset %u, length %d: %s" +#~ msgstr "ログファイル%sのオフセット%uから長さ%d分を読み取れませんでした: %s" + +#~ msgid "could not seek in log file %s to offset %u: %s" +#~ msgstr "ログファイル%sでオフセット%uにシークできませんでした: %s" + +#~ msgid "could not open file \"%s\": %s" +#~ msgstr "ファイル\"%s\"をオープンできませんでした: %s" diff --git a/src/bin/pg_waldump/po/ru.po b/src/bin/pg_waldump/po/ru.po index 49f929bddd475..352c8370ef0d4 100644 --- a/src/bin/pg_waldump/po/ru.po +++ b/src/bin/pg_waldump/po/ru.po @@ -1,13 +1,13 @@ # Russian message translation file for pg_waldump # Copyright (C) 2017 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2017, 2018, 2019. +# Alexander Lakhin , 2017, 2018, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: pg_waldump (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-05 11:03+0300\n" -"PO-Revision-Date: 2019-08-29 15:47+0300\n" +"POT-Creation-Date: 2020-09-03 11:22+0300\n" +"PO-Revision-Date: 2020-09-03 15:07+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -17,27 +17,27 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "важно: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "ошибка: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "предупреждение: " -#: pg_waldump.c:148 +#: pg_waldump.c:146 #, c-format -msgid "could not open file \"%s\": %s" -msgstr "не удалось открыть файл \"%s\": %s" +msgid "could not open file \"%s\": %m" +msgstr "не удалось открыть файл \"%s\": %m" -#: pg_waldump.c:205 +#: pg_waldump.c:202 #, c-format msgid "" "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL " @@ -55,49 +55,43 @@ msgstr[2] "" "Размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " "ГБ, но в заголовке файла WAL \"%s\" указано значение: %d" -#: pg_waldump.c:213 +#: pg_waldump.c:210 #, c-format -msgid "could not read file \"%s\": %s" -msgstr "не удалось прочитать файл \"%s\": %s" +msgid "could not read file \"%s\": %m" +msgstr "не удалось прочитать файл \"%s\": %m" -#: pg_waldump.c:216 +#: pg_waldump.c:213 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %zu)" -#: pg_waldump.c:294 +#: pg_waldump.c:275 #, c-format msgid "could not locate WAL file \"%s\"" msgstr "не удалось найти файл WAL \"%s\"" -#: pg_waldump.c:296 +#: pg_waldump.c:277 #, c-format msgid "could not find any WAL file" msgstr "не удалось найти ни одного файла WAL" -#: pg_waldump.c:367 -#, c-format -msgid "could not find file \"%s\": %s" -msgstr "не удалось найти файл \"%s\": %s" - -#: pg_waldump.c:382 +#: pg_waldump.c:318 #, c-format -msgid "could not seek in log file %s to offset %u: %s" -msgstr "не удалось переместиться в файле журнала %s к смещению %u: %s" +msgid "could not find file \"%s\": %m" +msgstr "не удалось найти файл \"%s\": %m" -#: pg_waldump.c:405 +#: pg_waldump.c:367 #, c-format -msgid "could not read from log file %s, offset %u, length %d: %s" -msgstr "не удалось прочитать из файла журнала %s по смещению %u, длина %d: %s" +msgid "could not read from file %s, offset %u: %m" +msgstr "не удалось прочитать из файла \"%s\" по смещению %u: %m" -#: pg_waldump.c:408 +#: pg_waldump.c:371 #, c-format -msgid "could not read from log file %s, offset %u: read %d of %zu" +msgid "could not read from file %s, offset %u: read %d of %zu" msgstr "" -"не удалось прочитать из файла журнала %s по смещению %u (прочитано байт: %d " -"из %zu)" +"не удалось прочитать из файла %s по смещению %u (прочитано байт: %d из %zu)" -#: pg_waldump.c:788 +#: pg_waldump.c:720 #, c-format msgid "" "%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" @@ -106,17 +100,17 @@ msgstr "" "%s декодирует и показывает журналы предзаписи PostgreSQL для целей отладки.\n" "\n" -#: pg_waldump.c:790 +#: pg_waldump.c:722 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_waldump.c:791 +#: pg_waldump.c:723 #, c-format msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" msgstr " %s [ПАРАМЕТР]... [НАЧАЛЬНЫЙ_СЕГМЕНТ [КОНЕЧНЫЙ_СЕГМЕНТ]]\n" -#: pg_waldump.c:792 +#: pg_waldump.c:724 #, c-format msgid "" "\n" @@ -125,7 +119,7 @@ msgstr "" "\n" "Параметры:\n" -#: pg_waldump.c:793 +#: pg_waldump.c:725 #, c-format msgid "" " -b, --bkp-details output detailed information about backup blocks\n" @@ -133,25 +127,25 @@ msgstr "" " -b, --bkp-details вывести подробную информацию о копиях страниц\n" # well-spelled: ПОЗЗАП -#: pg_waldump.c:794 +#: pg_waldump.c:726 #, c-format msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" msgstr "" " -e, --end=ПОЗЗАП прекратить чтение в заданной позиции записи в WAL\n" -#: pg_waldump.c:795 +#: pg_waldump.c:727 #, c-format msgid " -f, --follow keep retrying after reaching end of WAL\n" msgstr "" " -f, --follow повторять попытки чтения по достижении конца WAL\n" -#: pg_waldump.c:796 +#: pg_waldump.c:728 #, c-format msgid " -n, --limit=N number of records to display\n" msgstr " -n, --limit=N число выводимых записей\n" # skip-rule: space-before-period -#: pg_waldump.c:797 +#: pg_waldump.c:729 #, c-format msgid "" " -p, --path=PATH directory in which to find log segment files or a\n" @@ -166,8 +160,13 @@ msgstr "" " (по умолчанию: текущий каталог,\n" " ./pg_wal, $PGDATA/pg_wal)\n" +#: pg_waldump.c:732 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet не выводить никаких сообщений, кроме ошибок\n" + # well-spelled: МНГР -#: pg_waldump.c:800 +#: pg_waldump.c:733 #, c-format msgid "" " -r, --rmgr=RMGR only show records generated by resource manager " @@ -180,14 +179,14 @@ msgstr "" " укажите --rmgr=list\n" # well-spelled: ПОЗЗАП -#: pg_waldump.c:802 +#: pg_waldump.c:735 #, c-format msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" msgstr "" " -s, --start=ПОЗЗАП начать чтение с заданной позиции записи в WAL\n" # well-spelled: ЛВР -#: pg_waldump.c:803 +#: pg_waldump.c:736 #, c-format msgid "" " -t, --timeline=TLI timeline from which to read log records\n" @@ -198,19 +197,19 @@ msgstr "" "аргументом\n" " НАЧАЛЬНЫЙ_СЕГМЕНТ)\n" -#: pg_waldump.c:805 +#: pg_waldump.c:738 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_waldump.c:806 +#: pg_waldump.c:739 #, c-format msgid " -x, --xid=XID only show records with transaction ID XID\n" msgstr "" " -x, --xid=XID выводить только записи с заданным\n" " идентификатором транзакции\n" -#: pg_waldump.c:807 +#: pg_waldump.c:740 #, c-format msgid "" " -z, --stats[=record] show statistics instead of records\n" @@ -219,111 +218,111 @@ msgstr "" " -z, --stats[=record] показывать статистику вместо записей\n" " (также возможно получить статистику по записям)\n" -#: pg_waldump.c:809 +#: pg_waldump.c:742 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_waldump.c:810 +#: pg_waldump.c:743 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Об ошибках сообщайте по адресу .\n" +"Об ошибках сообщайте по адресу <%s>.\n" -#: pg_waldump.c:884 +#: pg_waldump.c:744 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: pg_waldump.c:821 #, c-format msgid "no arguments specified" msgstr "аргументы не указаны" -#: pg_waldump.c:899 +#: pg_waldump.c:836 #, c-format msgid "could not parse end WAL location \"%s\"" msgstr "не удалось разобрать конечную позицию в WAL \"%s\"" -#: pg_waldump.c:911 +#: pg_waldump.c:848 #, c-format msgid "could not parse limit \"%s\"" msgstr "не удалось разобрать предел в \"%s\"" -#: pg_waldump.c:939 +#: pg_waldump.c:879 #, c-format msgid "resource manager \"%s\" does not exist" msgstr "менеджер ресурсов \"%s\" не существует" -#: pg_waldump.c:948 +#: pg_waldump.c:888 #, c-format msgid "could not parse start WAL location \"%s\"" msgstr "не удалось разобрать начальную позицию в WAL \"%s\"" -#: pg_waldump.c:958 +#: pg_waldump.c:898 #, c-format msgid "could not parse timeline \"%s\"" msgstr "не удалось разобрать линию времени в \"%s\"" -#: pg_waldump.c:965 +#: pg_waldump.c:905 #, c-format msgid "could not parse \"%s\" as a transaction ID" msgstr "не удалось разобрать в \"%s\" идентификатор транзакции" -#: pg_waldump.c:980 +#: pg_waldump.c:920 #, c-format msgid "unrecognized argument to --stats: %s" msgstr "нераспознанный аргумент ключа --stats: %s" -#: pg_waldump.c:993 +#: pg_waldump.c:933 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: pg_waldump.c:1003 -#, c-format -msgid "path \"%s\" could not be opened: %s" -msgstr "не удалось открыть путь \"%s\": %s" - -#: pg_waldump.c:1024 +#: pg_waldump.c:943 pg_waldump.c:963 #, c-format -msgid "could not open directory \"%s\": %s" -msgstr "не удалось открыть каталог \"%s\": %s" +msgid "could not open directory \"%s\": %m" +msgstr "не удалось открыть каталог \"%s\": %m" -#: pg_waldump.c:1031 pg_waldump.c:1062 +#: pg_waldump.c:969 pg_waldump.c:1000 #, c-format msgid "could not open file \"%s\"" msgstr "не удалось открыть файл \"%s\"" -#: pg_waldump.c:1041 +#: pg_waldump.c:979 #, c-format msgid "start WAL location %X/%X is not inside file \"%s\"" msgstr "начальная позиция в WAL %X/%X находится не в файле \"%s\"" -#: pg_waldump.c:1069 +#: pg_waldump.c:1007 #, c-format msgid "ENDSEG %s is before STARTSEG %s" msgstr "КОНЕЧНЫЙ_СЕГМЕНТ %s меньше, чем НАЧАЛЬНЫЙ_СЕГМЕНТ %s" -#: pg_waldump.c:1084 +#: pg_waldump.c:1022 #, c-format msgid "end WAL location %X/%X is not inside file \"%s\"" msgstr "конечная позиция в WAL %X/%X находится не в файле \"%s\"" -#: pg_waldump.c:1097 +#: pg_waldump.c:1035 #, c-format msgid "no start WAL location given" msgstr "начальная позиция в WAL не задана" -#: pg_waldump.c:1107 +#: pg_waldump.c:1049 #, c-format msgid "out of memory" msgstr "нехватка памяти" -#: pg_waldump.c:1113 +#: pg_waldump.c:1055 #, c-format msgid "could not find a valid record after %X/%X" msgstr "не удалось найти действительную запись после позиции %X/%X" -#: pg_waldump.c:1124 +#: pg_waldump.c:1066 #, c-format msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" @@ -334,16 +333,29 @@ msgstr[1] "" msgstr[2] "" "первая запись обнаружена после %X/%X, в позиции %X/%X, пропускается %u Б\n" -#: pg_waldump.c:1175 +#: pg_waldump.c:1117 #, c-format msgid "error in WAL record at %X/%X: %s" msgstr "ошибка в записи WAL в позиции %X/%X: %s" -#: pg_waldump.c:1185 +#: pg_waldump.c:1127 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" +#~ msgid "could not seek in log file %s to offset %u: %s" +#~ msgstr "не удалось переместиться в файле журнала %s к смещению %u: %s" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Об ошибках сообщайте по адресу .\n" + +#~ msgid "path \"%s\" could not be opened: %s" +#~ msgstr "не удалось открыть путь \"%s\": %s" + #~ msgid "%s: FATAL: " #~ msgstr "%s: СБОЙ: " diff --git a/src/bin/pg_waldump/po/uk.po b/src/bin/pg_waldump/po/uk.po new file mode 100644 index 0000000000000..71312d16ec341 --- /dev/null +++ b/src/bin/pg_waldump/po/uk.po @@ -0,0 +1,293 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:15+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: \n" +"Language-Team: Ukrainian\n" +"Language: uk_UA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /DEV_13/pg_waldump.pot\n" +"X-Crowdin-File-ID: 512\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "збій: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "помилка: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "попередження: " + +#: pg_waldump.c:146 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" + +#: pg_waldump.c:202 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" +msgstr[0] "Розмір сегмента WAL повинен задаватись ступенем двійки в інтервалі між 1 MB і 1 GB, але у заголовку файлу WAL \"%s\" вказано %d байт" +msgstr[1] "Розмір сегмента WAL повинен задаватись ступенем двійки в інтервалі між 1 MB і 1 GB, але у заголовку файлу WAL \"%s\" вказано %d байти" +msgstr[2] "Розмір сегмента WAL повинен задаватись ступенем двійки в інтервалі між 1 MB і 1 GB, але у заголовку файлу WAL \"%s\" вказано %d байтів" +msgstr[3] "Розмір сегмента WAL повинен задаватись ступенем двійки в інтервалі між 1 MB і 1 GB, але у заголовку файлу WAL \"%s\" вказано %d байтів" + +#: pg_waldump.c:210 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не вдалося прочитати файл \"%s\": %m" + +#: pg_waldump.c:213 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не вдалося прочитати файл \"%s\": прочитано %d з %zu" + +#: pg_waldump.c:275 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "не вдалося знайти WAL файл \"%s\"" + +#: pg_waldump.c:277 +#, c-format +msgid "could not find any WAL file" +msgstr "не вдалося знайти жодного WAL файлу" + +#: pg_waldump.c:318 +#, c-format +msgid "could not find file \"%s\": %m" +msgstr "не вдалося знайти файл \"%s\": %m" + +#: pg_waldump.c:367 +#, c-format +msgid "could not read from file %s, offset %u: %m" +msgstr "не вдалося прочитати з файлу %s, зсув %u: %m" + +#: pg_waldump.c:371 +#, c-format +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "не вдалося прочитати з файлу %s, зсув %u: прочитано %d з %zu" + +#: pg_waldump.c:720 +#, c-format +msgid "%s decodes and displays PostgreSQL write-ahead logs for debugging.\n\n" +msgstr "%s декодує і відображає журнали попереднього запису PostgreSQL для налагодження.\n\n" + +#: pg_waldump.c:722 +#, c-format +msgid "Usage:\n" +msgstr "Використання:\n" + +#: pg_waldump.c:723 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [OPTION]...[STARTSEG [ENDSEG]]\n" + +#: pg_waldump.c:724 +#, c-format +msgid "\n" +"Options:\n" +msgstr "\n" +"Параметри:\n" + +#: pg_waldump.c:725 +#, c-format +msgid " -b, --bkp-details output detailed information about backup blocks\n" +msgstr " -b, --bkp-details виводити детальну інформацію про блоки резервних копій\n" + +#: pg_waldump.c:726 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr " -e, --end=RECPTR зупинити читання WAL з місця RECPTR\n" + +#: pg_waldump.c:727 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr " -f, --follow повторювати спроби після досягнення кінця WAL\n" + +#: pg_waldump.c:728 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, --limit=N число записів для відображення\n" + +#: pg_waldump.c:729 +#, c-format +msgid " -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n" +msgstr " -p, --path=PATH каталог, у якому шукати файли сегментів журналу \n" +"або каталог з ./pg_wal, що містить такі файли (за замовчуванням: чинний каталог, ./pg_wal, $PGDATA/pg_wal)\n" + +#: pg_waldump.c:732 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet не друкувати жодного виводу, окрім помилок\n" + +#: pg_waldump.c:733 +#, c-format +msgid " -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" +" use --rmgr=list to list valid resource manager names\n" +msgstr " -r, --rmgr=RMGR відображати записи, згенеровані лише ресурсним менеджером RMGR;\n" +" використовувати --rmgr=list для перегляду списку припустимих імен ресурсного менеджера\n" + +#: pg_waldump.c:735 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr " -s, --start=RECPTR почати читання WAL з місця RECPTR\n" + +#: pg_waldump.c:736 +#, c-format +msgid " -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr " -t, --timeline=TLI часова шкала, записи якої будуть прочитані (за замовчуванням: 1 або значення, що використовується у STARTSEG)\n" + +#: pg_waldump.c:738 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію і вийти\n" + +#: pg_waldump.c:739 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr " -x, --xid=XID показати записи лише з ідентифікатором транзакцій XID\n" + +#: pg_waldump.c:740 +#, c-format +msgid " -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr " -z, --stats[=record] показати статистику замість записів (необов'язково, відобразити щорядкову статистику)\n" + +#: pg_waldump.c:742 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку потім вийти\n" + +#: pg_waldump.c:743 +#, c-format +msgid "\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Повідомляти про помилки на <%s>.\n" + +#: pg_waldump.c:744 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: pg_waldump.c:821 +#, c-format +msgid "no arguments specified" +msgstr "не вказано аргументів" + +#: pg_waldump.c:836 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "не вдалося проаналізувати кінцеве розташування WAL \"%s\"" + +#: pg_waldump.c:848 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "не вдалося проаналізувати ліміт \"%s\"" + +#: pg_waldump.c:879 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "менеджер ресурсів \"%s\" не існує" + +#: pg_waldump.c:888 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "не вдалося проаналізувати початкове розташування WAL \"%s\"" + +#: pg_waldump.c:898 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "не вдалося проаналізувати часову шкалу \"%s\"" + +#: pg_waldump.c:905 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "не вдалося прочитати \"%s\" як ідентифікатор транзакції" + +#: pg_waldump.c:920 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "нерозпізнаний аргумент для --stats: %s" + +#: pg_waldump.c:933 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "забагато аргументів у командному рядку (перший \"%s\")" + +#: pg_waldump.c:943 pg_waldump.c:963 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не вдалося відкрити каталог \"%s\": %m" + +#: pg_waldump.c:969 pg_waldump.c:1000 +#, c-format +msgid "could not open file \"%s\"" +msgstr "не вдалося відкрити файл \"%s\"" + +#: pg_waldump.c:979 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "початкове розташування WAL %X/%X не всередині файлу \"%s\"" + +#: pg_waldump.c:1007 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "ENDSEG %s перед STARTSEG %s" + +#: pg_waldump.c:1022 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "кінцеве розташування WAL %X/%X не всередині файлу \"%s\"" + +#: pg_waldump.c:1035 +#, c-format +msgid "no start WAL location given" +msgstr "не задано початкове розташування WAL" + +#: pg_waldump.c:1049 +#, c-format +msgid "out of memory" +msgstr "недостатньо пам'яті" + +#: pg_waldump.c:1055 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "не вдалося знайти припустимий запис після %X/%X" + +#: pg_waldump.c:1066 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "перший запис після %X/%X, у %X/%X, пропускається %u байт\n" +msgstr[1] "перший запис після %X/%X, у %X/%X, пропускається %u байти\n" +msgstr[2] "перший запис після %X/%X, у %X/%X, пропускається %u байтів\n" +msgstr[3] "перший запис після %X/%X, у %X/%X, пропускається %u байти\n" + +#: pg_waldump.c:1117 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "помилка у записі WAL у %X/%X: %s" + +#: pg_waldump.c:1127 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" + diff --git a/src/bin/pg_waldump/po/zh_CN.po b/src/bin/pg_waldump/po/zh_CN.po index 906a545dc48d1..5aeb92882f7ac 100644 --- a/src/bin/pg_waldump/po/zh_CN.po +++ b/src/bin/pg_waldump/po/zh_CN.po @@ -5,86 +5,81 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_waldump (PostgreSQL) 12\n" +"Project-Id-Version: pg_waldump (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-05-22 17:56+0800\n" -"PO-Revision-Date: 2019-06-03 18:12+0800\n" +"POT-Creation-Date: 2020-06-05 01:45+0000\n" +"PO-Revision-Date: 2020-06-23 18:00+0800\n" "Last-Translator: Jie Zhang \n" "Language-Team: Chinese (Simplified) \n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "致命的: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "错误: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "警告: " -#: pg_waldump.c:148 +#: pg_waldump.c:146 #, c-format -msgid "could not open file \"%s\": %s" -msgstr "无法打开文件 \"%s\": %s" +msgid "could not open file \"%s\": %m" +msgstr "无法打开文件 \"%s\": %m" -#: pg_waldump.c:205 +#: pg_waldump.c:202 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" msgstr[0] "WAL段大小必须是1MB到1GB之间的2次幂,但WAL文件\"%s\"头指定了%d个字节" msgstr[1] "WAL段大小必须是1MB到1GB之间的2次幂,但WAL文件\"%s\"头指定了%d个字节" -#: pg_waldump.c:213 +#: pg_waldump.c:210 #, c-format -msgid "could not read file \"%s\": %s" -msgstr "无法读取文件 \"%s\": %s" +msgid "could not read file \"%s\": %m" +msgstr "无法读取文件 \"%s\": %m" -#: pg_waldump.c:216 +#: pg_waldump.c:213 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "无法读取文件\"%1$s\":读取了%3$zu中的%2$d" -#: pg_waldump.c:294 +#: pg_waldump.c:275 #, c-format msgid "could not locate WAL file \"%s\"" msgstr "找不到WAL文件\"%s\"" -#: pg_waldump.c:296 +#: pg_waldump.c:277 #, c-format msgid "could not find any WAL file" msgstr "找不到任何WAL文件" -#: pg_waldump.c:367 +#: pg_waldump.c:318 #, c-format -msgid "could not find file \"%s\": %s" -msgstr "找不到文件\"%s\": %s" +msgid "could not find file \"%s\": %m" +msgstr "找不到文件\"%s\": %m" -#: pg_waldump.c:382 -#, c-format -msgid "could not seek in log file %s to offset %u: %s" -msgstr "无法在日志文件%s中查找到偏移量%u: %s" - -#: pg_waldump.c:405 +#: pg_waldump.c:367 #, c-format -msgid "could not read from log file %s, offset %u, length %d: %s" -msgstr "无法读取日志文件%s,偏移量%u,长度%d: %s" +msgid "could not read from file %s, offset %u: %m" +msgstr "无法从文件 %s读取,偏移量 %u: %m" -#: pg_waldump.c:408 +#: pg_waldump.c:371 #, c-format -msgid "could not read from log file %s, offset %u: read %d of %zu" -msgstr "无法读取日志文件%1$s,偏移量%2$u,读取%4$zu中的%3$d" +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "无法从文件%1$s读取,偏移量%2$u,读取%4$zu中的%3$d" -#: pg_waldump.c:787 +#: pg_waldump.c:720 #, c-format msgid "" "%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" @@ -93,17 +88,17 @@ msgstr "" "%s 为了调试,解码并显示PostgreSQL预写日志.\n" "\n" -#: pg_waldump.c:789 +#: pg_waldump.c:722 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: pg_waldump.c:790 +#: pg_waldump.c:723 #, c-format msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" msgstr " %s [选项]... [STARTSEG [ENDSEG]]\n" -#: pg_waldump.c:791 +#: pg_waldump.c:724 #, c-format msgid "" "\n" @@ -112,27 +107,27 @@ msgstr "" "\n" "选项:\n" -#: pg_waldump.c:792 +#: pg_waldump.c:725 #, c-format msgid " -b, --bkp-details output detailed information about backup blocks\n" msgstr " -b, --bkp-details 输出有关备份块的详细信息\n" -#: pg_waldump.c:793 +#: pg_waldump.c:726 #, c-format msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" msgstr " -e, --end=RECPTR 在指定的WAL位置停止读取\n" -#: pg_waldump.c:794 +#: pg_waldump.c:727 #, c-format msgid " -f, --follow keep retrying after reaching end of WAL\n" msgstr " -f, --follow 在到达可用WAL的末尾之后,继续重试\n" -#: pg_waldump.c:795 +#: pg_waldump.c:728 #, c-format msgid " -n, --limit=N number of records to display\n" msgstr " -n, --limit=N 要显示的记录数\n" -#: pg_waldump.c:796 +#: pg_waldump.c:729 #, c-format msgid "" " -p, --path=PATH directory in which to find log segment files or a\n" @@ -143,7 +138,12 @@ msgstr "" " 或包含此类文件的./pg_wal目录\n" " (默认值: 当前的目录, ./pg_wal, $PGDATA/pg_wal)\n" -#: pg_waldump.c:799 +#: pg_waldump.c:732 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet 不打印任何输出,错误除外\n" + +#: pg_waldump.c:733 #, c-format msgid "" " -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" @@ -152,12 +152,12 @@ msgstr "" " -r, --rmgr=RMGR 只显示由RMGR资源管理器生成的记录\n" " 使用--rmgr=list列出有效的资源管理器名称\n" -#: pg_waldump.c:801 +#: pg_waldump.c:735 #, c-format msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" msgstr " -s, --start=RECPTR 在WAL中位于RECPTR处开始阅读\n" -#: pg_waldump.c:802 +#: pg_waldump.c:736 #, c-format msgid "" " -t, --timeline=TLI timeline from which to read log records\n" @@ -166,17 +166,17 @@ msgstr "" " -t, --timeline=TLI 要从哪个时间线读取日志记录\n" " (默认值:1或者是使用STARTSEG中的值)\n" -#: pg_waldump.c:804 +#: pg_waldump.c:738 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 输出版本信息, 然后退出\n" -#: pg_waldump.c:805 +#: pg_waldump.c:739 #, c-format msgid " -x, --xid=XID only show records with transaction ID XID\n" msgstr " -x, --xid=XID 只显示用给定事务ID标记的记录\n" -#: pg_waldump.c:806 +#: pg_waldump.c:740 #, c-format msgid "" " -z, --stats[=record] show statistics instead of records\n" @@ -185,115 +185,123 @@ msgstr "" " -z, --stats[=record] 显示统计信息而不是记录\n" " (或者,显示每个记录的统计信息)\n" -#: pg_waldump.c:808 +#: pg_waldump.c:742 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 显示此帮助, 然后退出\n" -#: pg_waldump.c:868 +#: pg_waldump.c:743 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"臭虫报告至 <%s>.\n" + +#: pg_waldump.c:744 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 主页: <%s>\n" + +#: pg_waldump.c:821 #, c-format msgid "no arguments specified" msgstr "未指定参数" -#: pg_waldump.c:883 +#: pg_waldump.c:836 #, c-format msgid "could not parse end WAL location \"%s\"" msgstr "无法解析WAL结束位置\"%s\"" -#: pg_waldump.c:899 +#: pg_waldump.c:848 #, c-format msgid "could not parse limit \"%s\"" msgstr "无法解析限制\"%s\"" -#: pg_waldump.c:927 +#: pg_waldump.c:879 #, c-format msgid "resource manager \"%s\" does not exist" msgstr "资源管理器\"%s\"不存在" -#: pg_waldump.c:936 +#: pg_waldump.c:888 #, c-format msgid "could not parse start WAL location \"%s\"" msgstr "无法解析WAL起始位置\"%s\"" -#: pg_waldump.c:946 +#: pg_waldump.c:898 #, c-format msgid "could not parse timeline \"%s\"" msgstr "无法解析时间线\"%s\"" -#: pg_waldump.c:957 +#: pg_waldump.c:905 #, c-format msgid "could not parse \"%s\" as a transaction ID" msgstr "无法将\"%s\"解析为事务ID" -#: pg_waldump.c:972 +#: pg_waldump.c:920 #, c-format msgid "unrecognized argument to --stats: %s" msgstr "无法识别的参数--stats: %s" -#: pg_waldump.c:985 +#: pg_waldump.c:933 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "命令行参数太多 (第一个是 \"%s\")" -#: pg_waldump.c:995 +#: pg_waldump.c:943 pg_waldump.c:963 #, c-format -msgid "path \"%s\" could not be opened: %s" -msgstr "无法打开路径\"%s\": %s" +msgid "could not open directory \"%s\": %m" +msgstr "无法打开目录 \"%s\": %m" -#: pg_waldump.c:1016 -#, c-format -msgid "could not open directory \"%s\": %s" -msgstr "无法打开目录\"%s\": %s" - -#: pg_waldump.c:1023 pg_waldump.c:1054 +#: pg_waldump.c:969 pg_waldump.c:1000 #, c-format msgid "could not open file \"%s\"" msgstr "could not open file\"%s\"" -#: pg_waldump.c:1033 +#: pg_waldump.c:979 #, c-format msgid "start WAL location %X/%X is not inside file \"%s\"" msgstr "WAL开始位置%X/%X不在文件\"%s\"中" -#: pg_waldump.c:1061 +#: pg_waldump.c:1007 #, c-format msgid "ENDSEG %s is before STARTSEG %s" msgstr "ENDSEG %s在STARTSEG %s之前" -#: pg_waldump.c:1076 +#: pg_waldump.c:1022 #, c-format msgid "end WAL location %X/%X is not inside file \"%s\"" msgstr "WAL结束位置%X/%X不在文件\"%s\"中" -#: pg_waldump.c:1089 +#: pg_waldump.c:1035 #, c-format msgid "no start WAL location given" msgstr "未给出WAL起始位置" -#: pg_waldump.c:1099 +#: pg_waldump.c:1049 #, c-format msgid "out of memory" msgstr "内存用尽" -#: pg_waldump.c:1105 +#: pg_waldump.c:1055 #, c-format msgid "could not find a valid record after %X/%X" msgstr "在%X/%X之后找不到有效记录" -#: pg_waldump.c:1116 +#: pg_waldump.c:1066 #, c-format msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" msgstr[0] "第一条记录在%X/%X之后,位于%X/%X,跳过了%u个字节\n" msgstr[1] "第一条记录在%X/%X之后,位于%X/%X,跳过了%u个字节\n" -#: pg_waldump.c:1167 +#: pg_waldump.c:1117 #, c-format msgid "error in WAL record at %X/%X: %s" msgstr "在WAL记录中的%X/%X处错误为: %s" -#: pg_waldump.c:1177 +#: pg_waldump.c:1127 #, c-format msgid "Try \"%s --help\" for more information.\n" -msgstr "请用 \"%s --help\" 获取更多的信息.\n" - +msgstr "请用 \"%s --help\" 获取更多的信息.\n" \ No newline at end of file diff --git a/src/bin/psql/nls.mk b/src/bin/psql/nls.mk index dd4d482590fa4..5da216f8f6d56 100644 --- a/src/bin/psql/nls.mk +++ b/src/bin/psql/nls.mk @@ -1,6 +1,6 @@ # src/bin/psql/nls.mk CATALOG_NAME = psql -AVAIL_LANGUAGES = cs de es fr he it ja ko pl pt_BR ru sv tr uk zh_CN zh_TW +AVAIL_LANGUAGES = cs de el es fr he it ja ko pl pt_BR ru sv tr uk zh_CN zh_TW GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \ command.c common.c copy.c crosstabview.c help.c input.c large_obj.c \ mainloop.c psqlscanslash.c startup.c \ diff --git a/src/bin/psql/po/cs.po b/src/bin/psql/po/cs.po index 6ce9e304ae6c4..45771e129d9b4 100644 --- a/src/bin/psql/po/cs.po +++ b/src/bin/psql/po/cs.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: psql-cs (PostgreSQL 9.3)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:12+0000\n" -"PO-Revision-Date: 2019-09-28 11:28+0200\n" +"POT-Creation-Date: 2020-10-31 16:14+0000\n" +"PO-Revision-Date: 2020-11-01 00:59+0100\n" "Last-Translator: Tomas Vondra \n" "Language-Team: Czech \n" "Language: cs\n" @@ -17,73 +17,72 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format -#| msgid "fatal\n" msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format -#| msgid "warning" msgid "warning: " msgstr "warning: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "nelze získat aktuální adresář: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "neplatný binární soubor\"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "nelze číst binární soubor \"%s\"" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "nelze najít příkaz \"%s\" ke spuštění" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "nelze změnit adresář na \"%s\" : %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "nelze přečíst symbolický odkaz \"%s\": %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "volání pclose selhalo: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 -#: command.c:1218 input.c:228 mainloop.c:82 mainloop.c:386 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: command.c:1255 command.c:3146 command.c:3195 command.c:3307 input.c:227 +#: mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" msgstr "nedostatek paměti" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "nedostatek paměti\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "nelze duplikovat null pointer (interní chyba)\n" @@ -93,7 +92,7 @@ msgstr "nelze duplikovat null pointer (interní chyba)\n" msgid "could not look up effective user ID %ld: %s" msgstr "nelze načíst efektivní user ID \"%ld\": %s" -#: ../../common/username.c:45 command.c:555 +#: ../../common/username.c:45 command.c:559 msgid "user does not exist" msgstr "uživatel neexistuje" @@ -132,7 +131,20 @@ msgstr "potomek byl ukončen signálem %d: %s" msgid "child process exited with unrecognized status %d" msgstr "potomek skončil s nerozponaným stavem %d" -#: ../../fe_utils/print.c:353 +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Požadavek na zrušení byl poslán\n" + +#: ../../fe_utils/cancel.c:165 +msgid "Could not send cancel request: " +msgstr "Nelze poslat požadavek na zrušení: " + +#: ../../fe_utils/cancel.c:210 +#, c-format +msgid "Could not send cancel request: %s" +msgstr "Nelze poslat požadavek na zrušení: %s" + +#: ../../fe_utils/print.c:350 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" @@ -140,285 +152,291 @@ msgstr[0] "(%lu řádka)" msgstr[1] "(%lu řádky)" msgstr[2] "(%lu řádek)" -#: ../../fe_utils/print.c:3058 +#: ../../fe_utils/print.c:3055 #, c-format msgid "Interrupted\n" msgstr "Přerušeno\n" -#: ../../fe_utils/print.c:3122 +#: ../../fe_utils/print.c:3119 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "Nelze přidat hlavičku k obsahu tabulky: překročen počet sloupců %d.\n" -#: ../../fe_utils/print.c:3162 +#: ../../fe_utils/print.c:3159 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "Nelze přidat buňku do obsahu tabulky: překročen celkový počet buněk %d.\n" -#: ../../fe_utils/print.c:3417 +#: ../../fe_utils/print.c:3414 #, c-format msgid "invalid output format (internal error): %d" msgstr "specifikován neplatný formát výstupu (interní chyba): %d" -#: ../../fe_utils/psqlscan.l:729 +#: ../../fe_utils/psqlscan.l:694 #, c-format msgid "skipping recursive expansion of variable \"%s\"" msgstr "přeskakuji rekursivní expanzi proměnné \"%s\"" -#: command.c:221 +#: command.c:224 #, c-format msgid "invalid command \\%s" msgstr "neplatný příkaz \\%s" -#: command.c:223 +#: command.c:226 #, c-format msgid "Try \\? for help." -msgstr "Zkuste \\? pro zobrazení nápovědy" +msgstr "Zkuste \\? pro zobrazení nápovědy." -#: command.c:241 +#: command.c:244 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: nadbytečný argument \"%s\" ignorován" -#: command.c:293 +#: command.c:296 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "\\%s příkaz ignorován; použijte \\endif nebo Ctrl-C pro ukončení aktuálního \\if bloku" -#: command.c:553 +#: command.c:557 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "nelze získat domácí adresář pro uživatele ID %ld: %s" -#: command.c:571 +#: command.c:575 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: nelze změnit adresář na \"%s\": %m" -#: command.c:596 +#: command.c:600 #, c-format msgid "You are currently not connected to a database.\n" msgstr "Aktuálně nejste připojeni k databázi.\n" -#: command.c:609 +#: command.c:613 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Nyní jste připojeni k databázi \"%s\" jako uživatel \"%s\" na adrese \"%s\" na portu\"%s\".\n" -#: command.c:612 +#: command.c:616 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Jste připojeni k databázi \"%s\" jako uživatel \"%s\" přes socket v \"%s\" naportu \"%s\".\n" -#: command.c:618 +#: command.c:622 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Nyní jste připojeni k databázi \"%s\" jako uživatel \"%s\" na serveru \"%s\" (adresa \"%s\") na portu\"%s\".\n" -#: command.c:621 +#: command.c:625 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Nyní jste připojeni k databázi \"%s\" jako uživatel \"%s\" na serveru \"%s\" na portu\"%s\".\n" -#: command.c:930 command.c:1026 command.c:2411 +#: command.c:965 command.c:1061 command.c:2550 #, c-format msgid "no query buffer" msgstr "v historii není žádný dotaz" -#: command.c:963 command.c:4832 +#: command.c:998 command.c:5139 #, c-format msgid "invalid line number: %s" msgstr "neplatné číslo řádky: %s" -#: command.c:1017 +#: command.c:1052 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "Server (verze %s) nepodporuje editaci zdrojového kódu funkce." -#: command.c:1020 +#: command.c:1055 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "Server (verze %s) nepodporuje editaci definice pohledu." -#: command.c:1102 +#: command.c:1137 msgid "No changes" msgstr "Žádné změny" -#: command.c:1179 +#: command.c:1216 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "%s: neplatné jméno kódování nebo nenalezena konverzní funkce" -#: command.c:1214 command.c:1853 command.c:3109 command.c:4934 common.c:175 -#: common.c:224 common.c:535 common.c:1376 common.c:1404 common.c:1512 -#: common.c:1615 common.c:1653 copy.c:490 copy.c:709 help.c:63 large_obj.c:157 -#: large_obj.c:192 large_obj.c:254 +#: command.c:1251 command.c:1992 command.c:3142 command.c:3329 command.c:5241 +#: common.c:174 common.c:223 common.c:388 common.c:1237 common.c:1265 +#: common.c:1373 common.c:1480 common.c:1518 copy.c:488 copy.c:707 help.c:62 +#: large_obj.c:157 large_obj.c:192 large_obj.c:254 #, c-format msgid "%s" msgstr "%s" -#: command.c:1221 +#: command.c:1258 msgid "There is no previous error." msgstr "Žádná předchozí chyba." -#: command.c:1409 command.c:1714 command.c:1728 command.c:1745 command.c:1905 -#: command.c:2142 command.c:2378 command.c:2418 +#: command.c:1371 +#, c-format +#| msgid "Missing left parenthesis." +msgid "\\%s: missing right parenthesis" +msgstr "\\%s: chybějící pravá závorka" + +#: command.c:1548 command.c:1853 command.c:1867 command.c:1884 command.c:2044 +#: command.c:2281 command.c:2517 command.c:2557 #, c-format msgid "\\%s: missing required argument" msgstr "\\%s: chybí požadovaný argument" -#: command.c:1540 +#: command.c:1679 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif: nemůže být zadáno po \\else" -#: command.c:1545 +#: command.c:1684 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif: žádné odpovídající \\if" -#: command.c:1609 +#: command.c:1748 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else: nemůže být zadáno po \\else" -#: command.c:1614 +#: command.c:1753 #, c-format msgid "\\else: no matching \\if" msgstr "\\else: žádné odpovídající \\if" -#: command.c:1654 +#: command.c:1793 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif: žádné odpovídající \\if" -#: command.c:1809 +#: command.c:1948 msgid "Query buffer is empty." msgstr "Buffer dotazů je prázdný." -#: command.c:1831 +#: command.c:1970 msgid "Enter new password: " msgstr "Zadejte nové heslo: " -#: command.c:1832 +#: command.c:1971 msgid "Enter it again: " msgstr "Zadejte znova: " -#: command.c:1836 +#: command.c:1975 #, c-format msgid "Passwords didn't match." msgstr "Hesla se neshodují." -#: command.c:1935 +#: command.c:2074 #, c-format msgid "\\%s: could not read value for variable" msgstr "\\%s: nelze načíst hodnotu proměnné" -#: command.c:2038 +#: command.c:2177 msgid "Query buffer reset (cleared)." msgstr "Buffer dotazů vyprázdněn." -#: command.c:2060 +#: command.c:2199 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Historie zapsána do souboru: \"%s\".\n" -#: command.c:2147 +#: command.c:2286 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s: název proměnné prostředí nesmí obsahovat \"=\"" -#: command.c:2208 +#: command.c:2347 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "Server (verze %s) nepodporuje zobrazování zdrojového kódu funkce." -#: command.c:2211 +#: command.c:2350 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "Server (verze %s) nepodporuje zobrazování definice pohledu." -#: command.c:2218 +#: command.c:2357 #, c-format msgid "function name is required" msgstr "function name is required" -#: command.c:2220 +#: command.c:2359 #, c-format msgid "view name is required" msgstr "je vyžadováno jméno pohledu" -#: command.c:2350 +#: command.c:2489 msgid "Timing is on." msgstr "Sledování času je zapnuto." -#: command.c:2352 +#: command.c:2491 msgid "Timing is off." msgstr "Sledování času je vypnuto." -#: command.c:2437 command.c:2465 command.c:3516 command.c:3519 command.c:3522 -#: command.c:3528 command.c:3530 command.c:3538 command.c:3548 command.c:3557 -#: command.c:3571 command.c:3588 command.c:3646 common.c:71 copy.c:333 -#: copy.c:405 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 +#: command.c:2576 command.c:2604 command.c:3739 command.c:3742 command.c:3745 +#: command.c:3751 command.c:3753 command.c:3761 command.c:3771 command.c:3780 +#: command.c:3794 command.c:3811 command.c:3869 common.c:70 copy.c:331 +#: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s: %m" -#: command.c:2849 startup.c:240 startup.c:291 +#: command.c:2988 startup.c:236 startup.c:287 msgid "Password: " msgstr "Heslo: " -#: command.c:2854 startup.c:288 +#: command.c:2993 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "Heslo pro uživatele %s: " -#: command.c:2925 +#: command.c:3046 #, c-format msgid "All connection parameters must be supplied because no database connection exists" msgstr "Všechny parametry musí být zadány protože žádné připojení k databázi neexistuje" -#: command.c:3113 +#: command.c:3335 #, c-format msgid "Previous connection kept" msgstr "Předchozí spojení zachováno" -#: command.c:3117 +#: command.c:3341 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:3166 +#: command.c:3388 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Nyní jste připojeni k databázi \"%s\" jako uživatel \"%s\" na adrese \"%s\" na portu\"%s\".\n" -#: command.c:3169 +#: command.c:3391 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" -#: command.c:3175 +#: command.c:3397 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Nyní jste připojeni k databázi \"%s\" jako uživatel \"%s\" na serveru \"%s\" (adresa \"%s\") na portu\"%s\".\n" -#: command.c:3178 +#: command.c:3400 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Nyní jste připojeni k databázi \"%s\" jako uživatel \"%s\" na serveru \"%s\" na portu\"%s\".\n" -#: command.c:3183 +#: command.c:3405 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Nyní jste připojeni k databázi \"%s\" jako uživatel \"%s\".\n" -#: command.c:3216 +#: command.c:3438 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, server %s)\n" -#: command.c:3224 +#: command.c:3446 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" @@ -427,29 +445,29 @@ msgstr "" "VAROVÁNÍ: %s major verze %s, major verze serveru %s.\n" " Některé vlastnosti psql nemusí fungovat.\n" -#: command.c:3263 +#: command.c:3485 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "SSL spojení (protokol: %s, šifra: %s, bitů: %s, komprese: %s)\n" -#: command.c:3264 command.c:3265 command.c:3266 +#: command.c:3486 command.c:3487 command.c:3488 msgid "unknown" msgstr "neznámé" -#: command.c:3267 help.c:46 +#: command.c:3489 help.c:45 msgid "off" msgstr "vypnuto" -#: command.c:3267 help.c:46 +#: command.c:3489 help.c:45 msgid "on" msgstr "zapnuto" -#: command.c:3281 +#: command.c:3503 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "GSSAPI-šifrované spojení\n" -#: command.c:3301 +#: command.c:3523 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -461,173 +479,172 @@ msgstr "" " informace najdete v manuálu k psql na stránce \"Poznámky pro\n" " uživatele Windows.\"\n" -#: command.c:3405 +#: command.c:3627 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number" msgstr "proměnná prostředí PSQL_EDITOR_LINENUMBER_ARG musí být nastavena pro zadáníčísla řádky" -#: command.c:3434 +#: command.c:3656 #, c-format msgid "could not start editor \"%s\"" msgstr "nelze spustit editor \"%s\"" -#: command.c:3436 +#: command.c:3658 #, c-format msgid "could not start /bin/sh" msgstr "nelze spustit /bin/sh" -#: command.c:3474 +#: command.c:3696 #, c-format msgid "could not locate temporary directory: %s" msgstr "nelze najít dočasný adresář: %s" -#: command.c:3501 +#: command.c:3723 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "nelze otevřít dočasný soubor \"%s\": %m" -#: command.c:3794 +#: command.c:4028 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: nejednoznačná zkratka \"%s\" odpovídá \"%s\" a \"%s\"" -#: command.c:3814 +#: command.c:4048 #, c-format msgid "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" msgstr "\\pset: dovolené formáty jsou aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" -#: command.c:3833 +#: command.c:4067 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: povolené styly řádek jsou ascii, old-ascii, unicode" -#: command.c:3848 +#: command.c:4082 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: povolené styly Unicode rámečků jsou single, double" -#: command.c:3863 +#: command.c:4097 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: povolené styly Unicode sloupců jsou single, double" -#: command.c:3878 +#: command.c:4112 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: povolené styly Unicode rámečků záhlaví single, double" -#: command.c:3921 +#: command.c:4155 #, c-format -#| msgid "COPY delimiter must be a single character" msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsep musí být jediný jedno-bytový znak" -#: command.c:3926 +#: command.c:4160 #, c-format msgid "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage return" msgstr "\\pset: csv_fieldsep nemůže být dvojitá uvozovka, nový řádek, nebo konec řádky" -#: command.c:4063 command.c:4249 +#: command.c:4297 command.c:4485 #, c-format msgid "\\pset: unknown option: %s" msgstr "\\pset: neznámá volba: %s" -#: command.c:4081 +#: command.c:4317 #, c-format msgid "Border style is %d.\n" msgstr "Styl rámečků je %d.\n" -#: command.c:4087 +#: command.c:4323 #, c-format msgid "Target width is unset.\n" msgstr "Cílová šířka není nastavena.\n" -#: command.c:4089 +#: command.c:4325 #, c-format msgid "Target width is %d.\n" msgstr "Cílová šířka je %d.\n" -#: command.c:4096 +#: command.c:4332 #, c-format msgid "Expanded display is on.\n" msgstr "Rozšířené zobrazení zapnuto.\n" -#: command.c:4098 +#: command.c:4334 #, c-format msgid "Expanded display is used automatically.\n" msgstr "Rozšířené zobrazení je zapnuto automaticky.\n" -#: command.c:4100 +#: command.c:4336 #, c-format msgid "Expanded display is off.\n" msgstr "Rozšířené zobrazení vypnuto.\n" -#: command.c:4106 +#: command.c:4342 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "Oddělovač polí pro CSV je '\"%s\"'.\n" -#: command.c:4114 command.c:4122 +#: command.c:4350 command.c:4358 #, c-format msgid "Field separator is zero byte.\n" msgstr "Oddělovač polí je nulový byte.\n" -#: command.c:4116 +#: command.c:4352 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Oddělovač polí je '\"%s\"'.\n" -#: command.c:4129 +#: command.c:4365 #, c-format msgid "Default footer is on.\n" msgstr "Implicitní zápatí je zapnuto.\n" -#: command.c:4131 +#: command.c:4367 #, c-format msgid "Default footer is off.\n" msgstr "Implicitní zápatí je vypnuto.\n" -#: command.c:4137 +#: command.c:4373 #, c-format msgid "Output format is %s.\n" msgstr "Výstupní formát je %s.\n" -#: command.c:4143 +#: command.c:4379 #, c-format msgid "Line style is %s.\n" msgstr "Styl čar je %s.\n" -#: command.c:4150 +#: command.c:4386 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null je zobrazován jako '\"%s\"'.\n" -#: command.c:4158 +#: command.c:4394 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "Zobrazení číselného výstupu dle národního nastavení je vypnuto.\n" -#: command.c:4160 +#: command.c:4396 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "Zobrazení číselného výstupu dle národního nastavení je vypnuto.\n" -#: command.c:4167 +#: command.c:4403 #, c-format msgid "Pager is used for long output.\n" msgstr "Stránkování je zapnuto pro dlouhé výstupy.\n" -#: command.c:4169 +#: command.c:4405 #, c-format msgid "Pager is always used.\n" msgstr "Stránkování je vždy použito.\n" -#: command.c:4171 +#: command.c:4407 #, c-format msgid "Pager usage is off.\n" msgstr "Stránkování je vypnuto.\n" -#: command.c:4177 +#: command.c:4413 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" @@ -635,87 +652,87 @@ msgstr[0] "Pager nebude použit pro méně než %d řáden.\n" msgstr[1] "Pager won't be used for less than %d lines.\n" msgstr[2] "Pager won't be used for less than %d lines.\n" -#: command.c:4187 command.c:4197 +#: command.c:4423 command.c:4433 #, c-format msgid "Record separator is zero byte.\n" msgstr "Oddělovač záznamů je nulový byte.\n" -#: command.c:4189 +#: command.c:4425 #, c-format msgid "Record separator is .\n" msgstr "Oddělovač záznamů je .\n" -#: command.c:4191 +#: command.c:4427 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Oddělovač záznamů je '\"%s\"'.\n" -#: command.c:4204 +#: command.c:4440 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Atributy tabulky jsou \"%s\".\n" -#: command.c:4207 +#: command.c:4443 #, c-format msgid "Table attributes unset.\n" msgstr "Atributy tabulky nejsou nastaveny.\n" -#: command.c:4214 +#: command.c:4450 #, c-format msgid "Title is \"%s\".\n" msgstr "Nadpis je \"%s\".\n" -#: command.c:4216 +#: command.c:4452 #, c-format msgid "Title is unset.\n" msgstr "Nadpis není nastaven.\n" -#: command.c:4223 +#: command.c:4459 #, c-format msgid "Tuples only is on.\n" msgstr "Zobrazování pouze záznamů je vypnuto.\n" -#: command.c:4225 +#: command.c:4461 #, c-format msgid "Tuples only is off.\n" msgstr "Zobrazování pouze záznamů je vypnuto.\n" -#: command.c:4231 +#: command.c:4467 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "Styl Unicode rámečků je \"%s\".\n" -#: command.c:4237 +#: command.c:4473 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "Styl Unicode sloupců je \"%s\".\n" -#: command.c:4243 +#: command.c:4479 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "Styl Unicode rámečků záhlaví je \"%s\".\n" -#: command.c:4405 +#: command.c:4712 #, c-format msgid "\\!: failed" msgstr "\\!: selhal" -#: command.c:4430 common.c:795 +#: command.c:4737 common.c:648 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch neze použít s prázdným dotazem" -#: command.c:4471 +#: command.c:4778 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (každé %gs)\n" -#: command.c:4474 +#: command.c:4781 #, c-format msgid "%s (every %gs)\n" msgstr "%s (každé %gs)\n" -#: command.c:4528 command.c:4535 common.c:695 common.c:702 common.c:1359 +#: command.c:4835 command.c:4842 common.c:548 common.c:555 common.c:1220 #, c-format msgid "" "********* QUERY **********\n" @@ -728,107 +745,112 @@ msgstr "" "**************************\n" "\n" -#: command.c:4727 +#: command.c:5034 #, c-format msgid "\"%s.%s\" is not a view" msgstr "\"%s.%s\" není pohled" -#: command.c:4743 +#: command.c:5050 #, c-format msgid "could not parse reloptions array" msgstr "nelze naparsovat pole reloptions" -#: common.c:160 +#: common.c:159 #, c-format msgid "cannot escape without active connection" msgstr "nelze escapovat bez aktivního spojení" -#: common.c:201 +#: common.c:200 #, c-format msgid "shell command argument contains a newline or carriage return: \"%s\"" msgstr "argument shell příkazu obsahuje přechod na nový řádek nebo návrat na začátek (carriage return): \"%s\"" -#: common.c:395 +#: common.c:304 #, c-format msgid "connection to server was lost" msgstr "spojení na server bylo ztraceno" -#: common.c:399 +#: common.c:308 #, c-format msgid "The connection to the server was lost. Attempting reset: " msgstr "Spojení na server bylo ztraceno. Zkoušen restart: " -#: common.c:404 +#: common.c:313 #, c-format msgid "Failed.\n" msgstr "Nepodařilo se.\n" -#: common.c:417 +#: common.c:326 #, c-format msgid "Succeeded.\n" msgstr "Podařilo se.\n" -#: common.c:525 common.c:1077 common.c:1294 +#: common.c:378 common.c:938 common.c:1155 #, c-format msgid "unexpected PQresultStatus: %d" msgstr "neočekávaný PQresultStatus: %d" -#: common.c:634 +#: common.c:487 #, c-format msgid "Time: %.3f ms\n" msgstr "Čas: %.3f ms\n" -#: common.c:649 +#: common.c:502 #, c-format msgid "Time: %.3f ms (%02d:%06.3f)\n" msgstr "Čas: %.3f ms (%02d:%06.3f)\n" -#: common.c:658 +#: common.c:511 #, c-format msgid "Time: %.3f ms (%02d:%02d:%06.3f)\n" msgstr "Čas: %.3f ms (%02d:%02d:%06.3f)\n" -#: common.c:665 +#: common.c:518 #, c-format msgid "Time: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" msgstr "Čas: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" -#: common.c:689 common.c:747 common.c:1330 +#: common.c:542 common.c:600 common.c:1191 #, c-format msgid "You are currently not connected to a database." msgstr "Aktuálně nejste připojeni k databázi." -#: common.c:802 +#: common.c:655 #, c-format msgid "\\watch cannot be used with COPY" msgstr "\\watch nelze použít s COPY" -#: common.c:807 +#: common.c:660 #, c-format msgid "unexpected result status for \\watch" msgstr "neočekávaný stav výsledku pro \\watch" -#: common.c:837 +#: common.c:690 #, c-format msgid "Asynchronous notification \"%s\" with payload \"%s\" received from server process with PID %d.\n" msgstr "Asynchronní upozornění \"%s\" s obsahem \"%s\" obdrženo ze serverového procesu s PID %d.\n" -#: common.c:840 +#: common.c:693 #, c-format msgid "Asynchronous notification \"%s\" received from server process with PID %d.\n" msgstr "Asynchronní upozornění \"%s\" obdrženo z procesu serveru s PID %d.\n" -#: common.c:903 +#: common.c:726 common.c:743 +#, c-format +msgid "could not print result table: %m" +msgstr "nelze číst vypsat tabulku: %m" + +#: common.c:764 #, c-format msgid "no rows returned for \\gset" msgstr "žádné řádky nevráceny pro \\gset" -#: common.c:908 +#: common.c:769 #, c-format msgid "more than one row returned for \\gset" msgstr "více než jedna řádka vrácena pro \\gset" -#: common.c:1339 +#: common.c:1200 #, c-format msgid "" "***(Single step mode: verify command)*******************************************\n" @@ -839,93 +861,93 @@ msgstr "" "%s\n" "***(stiskněte return pro zpracování nebo x a return pro zrušení)********************\n" -#: common.c:1394 +#: common.c:1255 #, c-format msgid "The server (version %s) does not support savepoints for ON_ERROR_ROLLBACK." msgstr "Server (verze %s) nepodporuje savepoints pro ON_ERROR_ROLLBACK." -#: common.c:1457 +#: common.c:1318 #, c-format msgid "STATEMENT: %s" msgstr "PŘÍKAZ: %s" -#: common.c:1500 +#: common.c:1361 #, c-format msgid "unexpected transaction status (%d)" msgstr "neočekávaný stav transakce: (%d)" -#: common.c:1637 describe.c:2002 +#: common.c:1502 describe.c:2001 msgid "Column" msgstr "Sloupec" -#: common.c:1638 describe.c:179 describe.c:394 describe.c:412 describe.c:457 -#: describe.c:474 describe.c:963 describe.c:1127 describe.c:1712 -#: describe.c:1736 describe.c:2003 describe.c:3674 describe.c:3859 -#: describe.c:4092 describe.c:5298 +#: common.c:1503 describe.c:177 describe.c:393 describe.c:411 describe.c:456 +#: describe.c:473 describe.c:962 describe.c:1126 describe.c:1711 +#: describe.c:1735 describe.c:2002 describe.c:3729 describe.c:3939 +#: describe.c:4172 describe.c:5378 msgid "Type" msgstr "Typ" -#: common.c:1687 +#: common.c:1552 #, c-format msgid "The command has no result, or the result has no columns.\n" msgstr "Příkaz nevrátil žádný výsledek, nebo výsledek nemá žádné sloupce.\n" -#: copy.c:100 +#: copy.c:98 #, c-format msgid "\\copy: arguments required" msgstr "\\copy: argumenty jsou povinné" -#: copy.c:255 +#: copy.c:253 #, c-format msgid "\\copy: parse error at \"%s\"" msgstr "\\copy: chyba na \"%s\"" -#: copy.c:257 +#: copy.c:255 #, c-format msgid "\\copy: parse error at end of line" msgstr "\\copy: chyba na konci řádku" -#: copy.c:330 +#: copy.c:328 #, c-format msgid "could not execute command \"%s\": %m" msgstr "nelze spustit příkaz \"%s\": %m" -#: copy.c:346 +#: copy.c:344 #, c-format msgid "could not stat file \"%s\": %m" msgstr "nelze provést stat souboru \"%s\": %m" -#: copy.c:350 +#: copy.c:348 #, c-format msgid "%s: cannot copy from/to a directory" msgstr "%s: nelze kopírovat z/do adresáře" -#: copy.c:387 +#: copy.c:385 #, c-format msgid "could not close pipe to external command: %m" msgstr "nelze zavřít rouru (pipe) pro externí příkaz: %m" -#: copy.c:392 +#: copy.c:390 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: copy.c:455 copy.c:465 +#: copy.c:453 copy.c:463 #, c-format msgid "could not write COPY data: %m" msgstr "nelze zapsat data příkazu COPY: %m" -#: copy.c:471 +#: copy.c:469 #, c-format msgid "COPY data transfer failed: %s" msgstr "přenos dat příkazu COPY selhal: %s" -#: copy.c:532 +#: copy.c:530 msgid "canceled by user" msgstr "zrušeno na žádost uživatele" # common.c:485 -#: copy.c:543 +#: copy.c:541 msgid "" "Enter data to be copied followed by a newline.\n" "End with a backslash and a period on a line by itself, or an EOF signal." @@ -933,810 +955,815 @@ msgstr "" "Zadejte data pro kopírování následovaná novým řádkem.\n" "Ukončete zpětným lomítkem a tečkou na samostatném řádku." -#: copy.c:671 +#: copy.c:669 msgid "aborted because of read failure" msgstr "přerušeno z důvodu chyby čtení" -#: copy.c:705 +#: copy.c:703 msgid "trying to exit copy mode" msgstr "pokouším se opustit copy mód" -#: crosstabview.c:124 +#: crosstabview.c:123 #, c-format msgid "\\crosstabview: statement did not return a result set" msgstr "\\crosstabview: příkaz nevrátil žádný výsledek" -#: crosstabview.c:130 +#: crosstabview.c:129 #, c-format msgid "\\crosstabview: query must return at least three columns" msgstr "\\crosstabview: dotaz musí vracet alespoň tři sloupce" -#: crosstabview.c:157 +#: crosstabview.c:156 #, c-format msgid "\\crosstabview: vertical and horizontal headers must be different columns" msgstr "\\crosstabview: vertikální a horozintální záklaví musí být různé sloupce" -#: crosstabview.c:173 +#: crosstabview.c:172 #, c-format msgid "\\crosstabview: data column must be specified when query returns more than three columns" msgstr "\\crosstabview: datový sloupec musí být specifikován pokud má dotaz více než tři sloupce" -#: crosstabview.c:229 +#: crosstabview.c:228 #, c-format msgid "\\crosstabview: maximum number of columns (%d) exceeded" msgstr "\\crosstabview: maximální počet sloupců (%d) překročen" -#: crosstabview.c:398 +#: crosstabview.c:397 #, c-format msgid "\\crosstabview: query result contains multiple data values for row \"%s\", column \"%s\"" msgstr "\\crosstabview: výsledek dotazu obsahuje několik hodnot pro řádek \"%s\", sloupec \"%s\"" -#: crosstabview.c:646 +#: crosstabview.c:645 #, c-format msgid "\\crosstabview: column number %d is out of range 1..%d" msgstr "\\crosstabview: číslo sloupce %d je mimo rozsah 1..%d" -#: crosstabview.c:671 +#: crosstabview.c:670 #, c-format msgid "\\crosstabview: ambiguous column name: \"%s\"" msgstr "\\crosstabview: nejednoznačný název sloupce: \"%s\"" -#: crosstabview.c:679 +#: crosstabview.c:678 #, c-format msgid "\\crosstabview: column name not found: \"%s\"" msgstr "\\crosstabview: sloupec nenaleze: \"%s\"" -#: describe.c:77 describe.c:374 describe.c:679 describe.c:811 describe.c:955 -#: describe.c:1116 describe.c:1188 describe.c:3663 describe.c:3846 -#: describe.c:4090 describe.c:4181 describe.c:4448 describe.c:4608 -#: describe.c:4849 describe.c:4924 describe.c:4935 describe.c:4997 -#: describe.c:5422 describe.c:5505 +#: describe.c:75 describe.c:373 describe.c:678 describe.c:810 describe.c:954 +#: describe.c:1115 describe.c:1187 describe.c:3718 describe.c:3926 +#: describe.c:4170 describe.c:4261 describe.c:4528 describe.c:4688 +#: describe.c:4929 describe.c:5004 describe.c:5015 describe.c:5077 +#: describe.c:5502 describe.c:5585 msgid "Schema" msgstr "Schéma" -#: describe.c:78 describe.c:176 describe.c:244 describe.c:252 describe.c:375 -#: describe.c:680 describe.c:812 describe.c:873 describe.c:956 describe.c:1189 -#: describe.c:3664 describe.c:3847 describe.c:4013 describe.c:4091 -#: describe.c:4182 describe.c:4261 describe.c:4449 describe.c:4533 -#: describe.c:4609 describe.c:4850 describe.c:4925 describe.c:4936 -#: describe.c:4998 describe.c:5195 describe.c:5279 describe.c:5503 -#: describe.c:5675 describe.c:5900 +#: describe.c:76 describe.c:174 describe.c:242 describe.c:250 describe.c:374 +#: describe.c:679 describe.c:811 describe.c:872 describe.c:955 describe.c:1188 +#: describe.c:3719 describe.c:3927 describe.c:4093 describe.c:4171 +#: describe.c:4262 describe.c:4341 describe.c:4529 describe.c:4613 +#: describe.c:4689 describe.c:4930 describe.c:5005 describe.c:5016 +#: describe.c:5078 describe.c:5275 describe.c:5359 describe.c:5583 +#: describe.c:5755 describe.c:5995 msgid "Name" msgstr "Jméno" -#: describe.c:79 describe.c:387 describe.c:405 describe.c:451 describe.c:468 +#: describe.c:77 describe.c:386 describe.c:404 describe.c:450 describe.c:467 msgid "Result data type" msgstr "Datový typ výsledku" -#: describe.c:87 describe.c:100 describe.c:104 describe.c:388 describe.c:406 -#: describe.c:452 describe.c:469 +#: describe.c:85 describe.c:98 describe.c:102 describe.c:387 describe.c:405 +#: describe.c:451 describe.c:468 msgid "Argument data types" msgstr "Datový typ parametru" -#: describe.c:112 describe.c:119 describe.c:187 describe.c:275 describe.c:514 -#: describe.c:728 describe.c:827 describe.c:898 describe.c:1191 describe.c:2021 -#: describe.c:3452 describe.c:3699 describe.c:3893 describe.c:4044 -#: describe.c:4118 describe.c:4191 describe.c:4274 describe.c:4357 -#: describe.c:4476 describe.c:4542 describe.c:4610 describe.c:4751 -#: describe.c:4793 describe.c:4866 describe.c:4928 describe.c:4937 -#: describe.c:4999 describe.c:5221 describe.c:5301 describe.c:5436 -#: describe.c:5506 large_obj.c:290 large_obj.c:300 +#: describe.c:110 describe.c:117 describe.c:185 describe.c:273 describe.c:513 +#: describe.c:727 describe.c:826 describe.c:897 describe.c:1190 describe.c:2020 +#: describe.c:3506 describe.c:3779 describe.c:3973 describe.c:4124 +#: describe.c:4198 describe.c:4271 describe.c:4354 describe.c:4437 +#: describe.c:4556 describe.c:4622 describe.c:4690 describe.c:4831 +#: describe.c:4873 describe.c:4946 describe.c:5008 describe.c:5017 +#: describe.c:5079 describe.c:5301 describe.c:5381 describe.c:5516 +#: describe.c:5586 large_obj.c:290 large_obj.c:300 msgid "Description" msgstr "Popis" -#: describe.c:137 +#: describe.c:135 msgid "List of aggregate functions" msgstr "Seznam agregačních funkcí" -#: describe.c:162 +#: describe.c:160 #, c-format msgid "The server (version %s) does not support access methods." msgstr "Server (verze %s) nepodporuje přístupové metody (access methods)." -#: describe.c:177 +#: describe.c:175 msgid "Index" msgstr "Index" -#: describe.c:178 describe.c:3680 describe.c:3872 describe.c:5423 +#: describe.c:176 describe.c:3737 describe.c:3952 describe.c:5503 msgid "Table" msgstr "Tabulka" -#: describe.c:186 describe.c:5200 +#: describe.c:184 describe.c:5280 msgid "Handler" msgstr "Handler" -#: describe.c:205 +#: describe.c:203 msgid "List of access methods" msgstr "Seznam přístupových metod" -#: describe.c:231 +#: describe.c:229 #, c-format msgid "The server (version %s) does not support tablespaces." msgstr "Server (verze %s) nepodporuje tablespaces." -#: describe.c:245 describe.c:253 describe.c:502 describe.c:718 describe.c:874 -#: describe.c:1115 describe.c:3675 describe.c:3848 describe.c:4017 -#: describe.c:4263 describe.c:4534 describe.c:5196 describe.c:5280 -#: describe.c:5676 describe.c:5802 describe.c:5901 large_obj.c:289 +#: describe.c:243 describe.c:251 describe.c:501 describe.c:717 describe.c:873 +#: describe.c:1114 describe.c:3730 describe.c:3928 describe.c:4097 +#: describe.c:4343 describe.c:4614 describe.c:5276 describe.c:5360 +#: describe.c:5756 describe.c:5893 describe.c:5996 describe.c:6111 +#: describe.c:6190 large_obj.c:289 msgid "Owner" msgstr "Vlastník" -#: describe.c:246 describe.c:254 +#: describe.c:244 describe.c:252 msgid "Location" msgstr "Umístění" -#: describe.c:265 describe.c:3270 +#: describe.c:263 describe.c:3323 msgid "Options" msgstr "Volby" -#: describe.c:270 describe.c:691 describe.c:890 describe.c:3691 describe.c:3695 +#: describe.c:268 describe.c:690 describe.c:889 describe.c:3771 describe.c:3775 msgid "Size" msgstr "Velikost" -#: describe.c:292 +#: describe.c:290 msgid "List of tablespaces" msgstr "Seznam tablespaces" -#: describe.c:334 +#: describe.c:333 #, c-format msgid "\\df only takes [anptwS+] as options" msgstr "pro \\df můžete použít pouze přepínače [anptwS+]" -#: describe.c:342 describe.c:353 +#: describe.c:341 describe.c:352 #, c-format msgid "\\df does not take a \"%c\" option with server version %s" msgstr "pro \\df nelze použít volbu \"%c\" ve verzi serveru %s" #. translator: "agg" is short for "aggregate" -#: describe.c:390 describe.c:408 describe.c:454 describe.c:471 +#: describe.c:389 describe.c:407 describe.c:453 describe.c:470 msgid "agg" msgstr "agg" -#: describe.c:391 describe.c:409 +#: describe.c:390 describe.c:408 msgid "window" msgstr "window" -#: describe.c:392 +#: describe.c:391 msgid "proc" msgstr "proc" -#: describe.c:393 describe.c:411 describe.c:456 describe.c:473 +#: describe.c:392 describe.c:410 describe.c:455 describe.c:472 msgid "func" msgstr "func" -#: describe.c:410 describe.c:455 describe.c:472 describe.c:1325 +#: describe.c:409 describe.c:454 describe.c:471 describe.c:1324 msgid "trigger" msgstr "trigger" -#: describe.c:484 +#: describe.c:483 msgid "immutable" msgstr "immutable" -#: describe.c:485 +#: describe.c:484 msgid "stable" msgstr "stable" -#: describe.c:486 +#: describe.c:485 msgid "volatile" msgstr "volatile" -#: describe.c:487 +#: describe.c:486 msgid "Volatility" msgstr "Volatilita" -#: describe.c:495 +#: describe.c:494 msgid "restricted" msgstr "restricted" -#: describe.c:496 +#: describe.c:495 msgid "safe" msgstr "safe" -#: describe.c:497 +#: describe.c:496 msgid "unsafe" msgstr "unsafe" -#: describe.c:498 +#: describe.c:497 msgid "Parallel" msgstr "Parallel" -#: describe.c:503 +#: describe.c:502 msgid "definer" msgstr "definer" -#: describe.c:504 +#: describe.c:503 msgid "invoker" msgstr "invoker" -#: describe.c:505 +#: describe.c:504 msgid "Security" msgstr "Bezpečnost" -#: describe.c:512 +#: describe.c:511 msgid "Language" msgstr "Jazyk" -#: describe.c:513 +#: describe.c:512 msgid "Source code" msgstr "Zdrojový kód" -#: describe.c:642 +#: describe.c:641 msgid "List of functions" msgstr "Seznam funkcí" -#: describe.c:690 +#: describe.c:689 msgid "Internal name" msgstr "Interní jméno" -#: describe.c:712 +#: describe.c:711 msgid "Elements" msgstr "Složky" -#: describe.c:769 +#: describe.c:768 msgid "List of data types" msgstr "Seznam datových typů" -#: describe.c:813 +#: describe.c:812 msgid "Left arg type" msgstr "Typ levého argumentu" -#: describe.c:814 +#: describe.c:813 msgid "Right arg type" msgstr "Typ pravého argumentu" -#: describe.c:815 +#: describe.c:814 msgid "Result type" msgstr "Typ výsledku" -#: describe.c:820 describe.c:4269 describe.c:4334 describe.c:4340 -#: describe.c:4750 +#: describe.c:819 describe.c:4349 describe.c:4414 describe.c:4420 +#: describe.c:4830 describe.c:6362 describe.c:6366 msgid "Function" msgstr "Funkce" -#: describe.c:845 +#: describe.c:844 msgid "List of operators" msgstr "Seznam operátorů" -#: describe.c:875 +#: describe.c:874 msgid "Encoding" msgstr "Kódování" -#: describe.c:880 describe.c:4450 +#: describe.c:879 describe.c:4530 msgid "Collate" msgstr "Collation" -#: describe.c:881 describe.c:4451 +#: describe.c:880 describe.c:4531 msgid "Ctype" msgstr "CType" -#: describe.c:894 +#: describe.c:893 msgid "Tablespace" msgstr "Tablespace" -#: describe.c:916 +#: describe.c:915 msgid "List of databases" msgstr "Seznam databází" -#: describe.c:957 describe.c:1118 describe.c:3665 +#: describe.c:956 describe.c:1117 describe.c:3720 msgid "table" msgstr "tabulka" -#: describe.c:958 describe.c:3666 +#: describe.c:957 describe.c:3721 msgid "view" msgstr "pohled" -#: describe.c:959 describe.c:3667 +#: describe.c:958 describe.c:3722 msgid "materialized view" msgstr "materializovaný pohled" -#: describe.c:960 describe.c:1120 describe.c:3669 +#: describe.c:959 describe.c:1119 describe.c:3724 msgid "sequence" msgstr "sekvence" -#: describe.c:961 describe.c:3671 +#: describe.c:960 describe.c:3726 msgid "foreign table" msgstr "foreign_tabulka" -#: describe.c:962 describe.c:3672 describe.c:3857 -#| msgid "partition_name" +#: describe.c:961 describe.c:3727 describe.c:3937 msgid "partitioned table" msgstr "partitioned tabulka" # -#: describe.c:974 +#: describe.c:973 msgid "Column privileges" msgstr "Přístupová práva k atributům" -#: describe.c:1005 describe.c:1039 +#: describe.c:1004 describe.c:1038 msgid "Policies" msgstr "Politiky" -#: describe.c:1071 describe.c:5957 describe.c:5961 +#: describe.c:1070 describe.c:6052 describe.c:6056 msgid "Access privileges" msgstr "Přístupová práva" -#: describe.c:1102 +#: describe.c:1101 #, c-format msgid "The server (version %s) does not support altering default privileges." msgstr "Server (verze %s) nepodporuje změny výchozích privilegií." -#: describe.c:1122 +#: describe.c:1121 msgid "function" msgstr "funkce" -#: describe.c:1124 +#: describe.c:1123 msgid "type" msgstr "typ" -#: describe.c:1126 +#: describe.c:1125 msgid "schema" msgstr "schéma" -#: describe.c:1150 +#: describe.c:1149 msgid "Default access privileges" msgstr "Implicitní přístupová práva" -#: describe.c:1190 +#: describe.c:1189 msgid "Object" msgstr "Objekt" -#: describe.c:1204 +#: describe.c:1203 msgid "table constraint" msgstr "omezení tabulky" -#: describe.c:1226 +#: describe.c:1225 msgid "domain constraint" msgstr "omezení domény" -#: describe.c:1254 +#: describe.c:1253 msgid "operator class" msgstr "třída operátorů" -#: describe.c:1283 +#: describe.c:1282 msgid "operator family" msgstr "rodina operátorů" -#: describe.c:1305 +#: describe.c:1304 msgid "rule" msgstr "rule" -#: describe.c:1347 +#: describe.c:1346 msgid "Object descriptions" msgstr "Popis objektu" -#: describe.c:1403 describe.c:3763 +#: describe.c:1402 describe.c:3843 #, c-format msgid "Did not find any relation named \"%s\"." msgstr "Nelze nalézt relaci se jménem \"%s\"." -#: describe.c:1406 describe.c:3766 +#: describe.c:1405 describe.c:3846 #, c-format msgid "Did not find any relations." msgstr "Nelze nalézt žádnou relaci." -#: describe.c:1661 +#: describe.c:1660 #, c-format msgid "Did not find any relation with OID %s." msgstr "Nelze nalézt relaci se OID %s." -#: describe.c:1713 describe.c:1737 +#: describe.c:1712 describe.c:1736 msgid "Start" msgstr "Start" -#: describe.c:1714 describe.c:1738 +#: describe.c:1713 describe.c:1737 msgid "Minimum" msgstr "Minimum" -#: describe.c:1715 describe.c:1739 +#: describe.c:1714 describe.c:1738 msgid "Maximum" msgstr "Maximum" -#: describe.c:1716 describe.c:1740 +#: describe.c:1715 describe.c:1739 msgid "Increment" msgstr "Inkrement" -#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4185 -#: describe.c:4351 describe.c:4465 describe.c:4470 +#: describe.c:1716 describe.c:1740 describe.c:1871 describe.c:4265 +#: describe.c:4431 describe.c:4545 describe.c:4550 describe.c:6099 msgid "yes" msgstr "ano" -#: describe.c:1718 describe.c:1742 describe.c:1873 describe.c:4185 -#: describe.c:4348 describe.c:4465 +#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4265 +#: describe.c:4428 describe.c:4545 describe.c:6100 msgid "no" msgstr "ne" -#: describe.c:1719 describe.c:1743 +#: describe.c:1718 describe.c:1742 msgid "Cycles?" msgstr "Cycles?" -#: describe.c:1720 describe.c:1744 +#: describe.c:1719 describe.c:1743 msgid "Cache" msgstr "Cache" -#: describe.c:1787 +#: describe.c:1786 #, c-format msgid "Owned by: %s" msgstr "Vlastník: %s" -#: describe.c:1791 +#: describe.c:1790 #, c-format msgid "Sequence for identity column: %s" msgstr "Sekvence pro identity sloupec: %s" -#: describe.c:1798 +#: describe.c:1797 #, c-format msgid "Sequence \"%s.%s\"" msgstr "Sekvence \"%s.%s\"" -#: describe.c:1934 +#: describe.c:1933 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "Unlogged tabulka \"%s.%s\"" -#: describe.c:1937 +#: describe.c:1936 #, c-format msgid "Table \"%s.%s\"" msgstr "Tabulka \"%s.%s\"" -#: describe.c:1941 +#: describe.c:1940 #, c-format msgid "View \"%s.%s\"" msgstr "Pohled \"%s.%s\"" -#: describe.c:1946 +#: describe.c:1945 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "Unlogged materializovaný pohled \"%s.%s\"" -#: describe.c:1949 +#: describe.c:1948 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "Materializovaný pohled \"%s.%s\"" -#: describe.c:1954 +#: describe.c:1953 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "Unlogged index \"%s.%s\"" -#: describe.c:1957 +#: describe.c:1956 #, c-format msgid "Index \"%s.%s\"" msgstr "Index \"%s.%s\"" -#: describe.c:1962 +#: describe.c:1961 #, c-format msgid "Unlogged partitioned index \"%s.%s\"" msgstr "Unlogged partitioned index \"%s.%s\"" -#: describe.c:1965 +#: describe.c:1964 #, c-format msgid "Partitioned index \"%s.%s\"" msgstr "Partitioned index \"%s.%s\"" -#: describe.c:1970 +#: describe.c:1969 #, c-format msgid "Special relation \"%s.%s\"" msgstr "Speciální relace \"%s.%s\"" -#: describe.c:1974 +#: describe.c:1973 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "TOAST tabulka \"%s.%s\"" -#: describe.c:1978 +#: describe.c:1977 #, c-format msgid "Composite type \"%s.%s\"" msgstr "Složený typ \"%s.%s\"" -#: describe.c:1982 +#: describe.c:1981 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "Foreign tabulka \"%s.%s\"" -#: describe.c:1987 +#: describe.c:1986 #, c-format msgid "Unlogged partitioned table \"%s.%s\"" msgstr "Unlogged partitioned tabulka \"%s.%s\"" -#: describe.c:1990 +#: describe.c:1989 #, c-format msgid "Partitioned table \"%s.%s\"" msgstr "Partitioned tabulka \"%s.%s\"" -#: describe.c:2006 describe.c:4098 +#: describe.c:2005 describe.c:4178 msgid "Collation" msgstr "Collation" -#: describe.c:2007 describe.c:4105 +#: describe.c:2006 describe.c:4185 msgid "Nullable" msgstr "Nullable" -#: describe.c:2008 describe.c:4106 +#: describe.c:2007 describe.c:4186 msgid "Default" msgstr "Implicitně" -#: describe.c:2011 +#: describe.c:2010 msgid "Key?" msgstr "Klíč?" -#: describe.c:2013 +#: describe.c:2012 msgid "Definition" msgstr "Definice" -#: describe.c:2015 describe.c:5216 describe.c:5300 describe.c:5371 -#: describe.c:5435 +#: describe.c:2014 describe.c:5296 describe.c:5380 describe.c:5451 +#: describe.c:5515 msgid "FDW options" msgstr "FDW volby" -#: describe.c:2017 +#: describe.c:2016 msgid "Storage" msgstr "Uložení" -#: describe.c:2019 +#: describe.c:2018 msgid "Stats target" msgstr "Stats target" -#: describe.c:2132 +#: describe.c:2131 #, c-format msgid "Partition of: %s %s" msgstr "Partition pro: %s %s" -#: describe.c:2144 +#: describe.c:2143 msgid "No partition constraint" msgstr "Žádné omezení partition" -#: describe.c:2146 +#: describe.c:2145 #, c-format msgid "Partition constraint: %s" msgstr "Omezení partition: %s" -#: describe.c:2170 +#: describe.c:2169 #, c-format msgid "Partition key: %s" msgstr "Partition klíč: %s" -#: describe.c:2240 +#: describe.c:2195 +#, c-format +msgid "Owning table: \"%s.%s\"" +msgstr "Owning table: \"%s.%s\"" + +#: describe.c:2266 msgid "primary key, " msgstr "primární klíč, " -#: describe.c:2242 +#: describe.c:2268 msgid "unique, " msgstr "unikátní, " -#: describe.c:2248 +#: describe.c:2274 #, c-format msgid "for table \"%s.%s\"" msgstr "pro tabulku \"%s.%s\"" -#: describe.c:2252 +#: describe.c:2278 #, c-format msgid ", predicate (%s)" msgstr ", predikát (%s)" -#: describe.c:2255 +#: describe.c:2281 msgid ", clustered" msgstr ", clusterován" -#: describe.c:2258 +#: describe.c:2284 msgid ", invalid" msgstr ", neplatný" -#: describe.c:2261 +#: describe.c:2287 msgid ", deferrable" msgstr ", odložitelný" -#: describe.c:2264 +#: describe.c:2290 msgid ", initially deferred" msgstr ", iniciálně odložený" -#: describe.c:2267 +#: describe.c:2293 msgid ", replica identity" msgstr ", replica identity" -#: describe.c:2326 +#: describe.c:2360 msgid "Indexes:" msgstr "Indexy:" -#: describe.c:2410 +#: describe.c:2444 msgid "Check constraints:" msgstr "Kontrolní pravidla:" -#: describe.c:2478 +#: describe.c:2512 msgid "Foreign-key constraints:" msgstr "Podmínky cizího klíče:" -#: describe.c:2541 +#: describe.c:2575 msgid "Referenced by:" msgstr "Odkazovaný:" -#: describe.c:2591 +#: describe.c:2625 msgid "Policies:" msgstr "Politiky:" -#: describe.c:2594 +#: describe.c:2628 msgid "Policies (forced row security enabled):" msgstr "Poitiky (forced row security zapnuta):" -#: describe.c:2597 +#: describe.c:2631 msgid "Policies (row security enabled): (none)" msgstr "Politiky (row security zapnuta): (žádné)" -#: describe.c:2600 +#: describe.c:2634 msgid "Policies (forced row security enabled): (none)" msgstr "Politiky (forced row security zapnuta): (žádné)" -#: describe.c:2603 +#: describe.c:2637 msgid "Policies (row security disabled):" msgstr "Politiky (row security vypnuta):" -#: describe.c:2666 +#: describe.c:2705 msgid "Statistics objects:" msgstr "Statistické objekty:" -#: describe.c:2775 describe.c:2879 +#: describe.c:2819 describe.c:2923 msgid "Rules:" msgstr "Rules:" -#: describe.c:2778 +#: describe.c:2822 msgid "Disabled rules:" msgstr "Vypnutá pravidla (rules):" -#: describe.c:2781 +#: describe.c:2825 msgid "Rules firing always:" msgstr "Vždy spouštěná pravidla:" -#: describe.c:2784 +#: describe.c:2828 msgid "Rules firing on replica only:" msgstr "Pravidla spouštěná jen na replice:" -#: describe.c:2824 +#: describe.c:2868 msgid "Publications:" msgstr "Publikace:" -#: describe.c:2862 +#: describe.c:2906 msgid "View definition:" msgstr "Definice pohledu:" -#: describe.c:3001 +#: describe.c:3053 msgid "Triggers:" msgstr "Triggery:" -#: describe.c:3005 +#: describe.c:3057 msgid "Disabled user triggers:" msgstr "Vypnuté uživatelské triggery:" -#: describe.c:3007 +#: describe.c:3059 msgid "Disabled triggers:" msgstr "Vypnuté triggery:" -#: describe.c:3010 +#: describe.c:3062 msgid "Disabled internal triggers:" msgstr "Vypnuté interní triggery:" -#: describe.c:3013 +#: describe.c:3065 msgid "Triggers firing always:" msgstr "Vždy spouštěné triggery:" -#: describe.c:3016 +#: describe.c:3068 msgid "Triggers firing on replica only:" msgstr "Triggery spouštěné jen na replice:" -#: describe.c:3075 +#: describe.c:3140 #, c-format msgid "Server: %s" msgstr "Server: %s" -#: describe.c:3083 +#: describe.c:3148 #, c-format msgid "FDW options: (%s)" msgstr "FDW volby: (%s)" -#: describe.c:3102 +#: describe.c:3169 msgid "Inherits" msgstr "Dědí" -#: describe.c:3161 +#: describe.c:3229 #, c-format msgid "Number of partitions: %d" msgstr "Počet partition: %d" -#: describe.c:3170 -#, c-format -msgid "Number of child tables: %d (Use \\d+ to list them.)" -msgstr "Počet podřízených tabulek: %d (Použijte \\d+ pro jejich seznam.)" - -#: describe.c:3172 +#: describe.c:3238 #, c-format msgid "Number of partitions: %d (Use \\d+ to list them.)" msgstr "Počet partitions: %d (Použijte \\d+ pro jejich seznam.)" -#: describe.c:3180 +#: describe.c:3240 +#, c-format +msgid "Number of child tables: %d (Use \\d+ to list them.)" +msgstr "Počet podřízených tabulek: %d (Použijte \\d+ pro jejich seznam.)" + +#: describe.c:3247 msgid "Child tables" msgstr "Podřízené tabulky" -#: describe.c:3180 +#: describe.c:3247 msgid "Partitions" msgstr "Partitions" -#: describe.c:3223 +#: describe.c:3276 #, c-format msgid "Typed table of type: %s" msgstr "Typovaná tabulka typu: %s" -#: describe.c:3239 +#: describe.c:3292 msgid "Replica Identity" msgstr "Replica Identity" -#: describe.c:3252 +#: describe.c:3305 msgid "Has OIDs: yes" msgstr "Má OID: ano" -#: describe.c:3261 +#: describe.c:3314 #, c-format msgid "Access method: %s" msgstr "Přístupová metoda: %s" -#: describe.c:3340 +#: describe.c:3394 #, c-format msgid "Tablespace: \"%s\"" msgstr "Tablespace: \"%s\"" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:3352 +#: describe.c:3406 #, c-format msgid ", tablespace \"%s\"" msgstr ", tablespace: \"%s\"" -#: describe.c:3445 +#: describe.c:3499 msgid "List of roles" msgstr "Seznam rolí" -#: describe.c:3447 +#: describe.c:3501 msgid "Role name" msgstr "Jméno role" -#: describe.c:3448 +#: describe.c:3502 msgid "Attributes" msgstr "Atributy" -#: describe.c:3449 +#: describe.c:3503 msgid "Member of" msgstr "Je členem" -#: describe.c:3460 +#: describe.c:3514 msgid "Superuser" msgstr "Super-uživatel" -#: describe.c:3463 +#: describe.c:3517 msgid "No inheritance" msgstr "Bez dědičnosti" -#: describe.c:3466 +#: describe.c:3520 msgid "Create role" msgstr "Vytvoř roli" -#: describe.c:3469 +#: describe.c:3523 msgid "Create DB" msgstr "Vytvoř DB" -#: describe.c:3472 +#: describe.c:3526 msgid "Cannot login" msgstr "Nemohu se přihlásit" -#: describe.c:3476 +#: describe.c:3530 msgid "Replication" msgstr "Replikace" -#: describe.c:3480 +#: describe.c:3534 msgid "Bypass RLS" msgstr "Obejít RLS" -#: describe.c:3489 +#: describe.c:3543 msgid "No connections" msgstr "Není spojení" -#: describe.c:3491 +#: describe.c:3545 #, c-format msgid "%d connection" msgid_plural "%d connections" @@ -1744,336 +1771,352 @@ msgstr[0] "%d spojení" msgstr[1] "%d spojení" msgstr[2] "%d spojení" -#: describe.c:3501 +#: describe.c:3555 msgid "Password valid until " msgstr "Heslo platné do " -#: describe.c:3551 +#: describe.c:3605 #, c-format msgid "The server (version %s) does not support per-database role settings." msgstr "Server (verze %s) nepodporuje nastavení rolí pro jednotlivé databáze." -#: describe.c:3564 +#: describe.c:3618 msgid "Role" msgstr "Role" -#: describe.c:3565 +#: describe.c:3619 msgid "Database" msgstr "Databáze" -#: describe.c:3566 +#: describe.c:3620 msgid "Settings" msgstr "Nastavení" -#: describe.c:3587 +#: describe.c:3641 #, c-format msgid "Did not find any settings for role \"%s\" and database \"%s\"." msgstr "Nelze nalézt žádné nastavení pro roli \"%s\" a databázi \"%s\"." -#: describe.c:3590 +#: describe.c:3644 #, c-format msgid "Did not find any settings for role \"%s\"." msgstr "Nelze nalézt žádné nastavení pro roli \"%s\"." -#: describe.c:3593 +#: describe.c:3647 #, c-format msgid "Did not find any settings." msgstr "Žádná nastavení nenalezena." -#: describe.c:3598 +#: describe.c:3652 msgid "List of settings" msgstr "Seznam nastavení" -#: describe.c:3668 +#: describe.c:3723 msgid "index" msgstr "index" -#: describe.c:3670 +#: describe.c:3725 msgid "special" msgstr "speciální" -#: describe.c:3673 describe.c:3858 +#: describe.c:3728 describe.c:3938 msgid "partitioned index" msgstr "partitioned index" -#: describe.c:3771 +#: describe.c:3752 +msgid "permanent" +msgstr "permanent" + +#: describe.c:3753 +msgid "temporary" +msgstr "temporary" + +#: describe.c:3754 +msgid "unlogged" +msgstr "unlogged" + +#: describe.c:3755 +msgid "Persistence" +msgstr "Persistence" + +#: describe.c:3851 msgid "List of relations" msgstr "Seznam relací" -#: describe.c:3819 +#: describe.c:3899 #, c-format msgid "The server (version %s) does not support declarative table partitioning." msgstr "Server (verze %s) nepodporuje deklarativní partitioning." -#: describe.c:3830 +#: describe.c:3910 msgid "List of partitioned indexes" msgstr "Seznam partitioned indexů" -#: describe.c:3832 +#: describe.c:3912 msgid "List of partitioned tables" msgstr "Seznam partitioned tabulek" -#: describe.c:3836 +#: describe.c:3916 msgid "List of partitioned relations" msgstr "Seznam partitioned relací" -#: describe.c:3867 +#: describe.c:3947 msgid "Parent name" msgstr "Jméno předka" -#: describe.c:3880 +#: describe.c:3960 msgid "Leaf partition size" msgstr "Leaf partition size" -#: describe.c:3883 describe.c:3889 +#: describe.c:3963 describe.c:3969 msgid "Total size" msgstr "Celková velikost" -#: describe.c:4021 +#: describe.c:4101 msgid "Trusted" msgstr "Důvěryhodný" -#: describe.c:4029 +#: describe.c:4109 msgid "Internal language" msgstr "Interní jazyk" -#: describe.c:4030 +#: describe.c:4110 msgid "Call handler" msgstr "Call handler" -#: describe.c:4031 describe.c:5203 +#: describe.c:4111 describe.c:5283 msgid "Validator" msgstr "Validátor" -#: describe.c:4034 +#: describe.c:4114 msgid "Inline handler" msgstr "Inline handler" -#: describe.c:4062 +#: describe.c:4142 msgid "List of languages" msgstr "Seznam jazyků" -#: describe.c:4107 +#: describe.c:4187 msgid "Check" msgstr "Kontrola" -#: describe.c:4149 +#: describe.c:4229 msgid "List of domains" msgstr "Seznam domén" -#: describe.c:4183 +#: describe.c:4263 msgid "Source" msgstr "Zdroj" -#: describe.c:4184 +#: describe.c:4264 msgid "Destination" msgstr "Cíl" -#: describe.c:4186 +#: describe.c:4266 describe.c:6101 msgid "Default?" msgstr "Implicitně?" -#: describe.c:4223 +#: describe.c:4303 msgid "List of conversions" msgstr "Seznam konverzí" -#: describe.c:4262 +#: describe.c:4342 msgid "Event" msgstr "Událost" -#: describe.c:4264 +#: describe.c:4344 msgid "enabled" msgstr "povoleno" -#: describe.c:4265 +#: describe.c:4345 msgid "replica" msgstr "replica" -#: describe.c:4266 +#: describe.c:4346 msgid "always" msgstr "vždy" -#: describe.c:4267 +#: describe.c:4347 msgid "disabled" msgstr "disabled" -#: describe.c:4268 describe.c:5902 +#: describe.c:4348 describe.c:5997 msgid "Enabled" msgstr "Povoleno" -#: describe.c:4270 +#: describe.c:4350 msgid "Tags" msgstr "Tagy" -#: describe.c:4289 +#: describe.c:4369 msgid "List of event triggers" msgstr "Seznam event triggerů" -#: describe.c:4318 +#: describe.c:4398 msgid "Source type" msgstr "Zdrojový typ" -#: describe.c:4319 +#: describe.c:4399 msgid "Target type" msgstr "Cílový typ" -#: describe.c:4350 +#: describe.c:4430 msgid "in assignment" msgstr "v přiřazení" -#: describe.c:4352 +#: describe.c:4432 msgid "Implicit?" msgstr "Implicitně?" -#: describe.c:4407 +#: describe.c:4487 msgid "List of casts" msgstr "Seznam přetypování" -#: describe.c:4435 +#: describe.c:4515 #, c-format msgid "The server (version %s) does not support collations." msgstr "Server (verze %s) nepodporuje collations." -#: describe.c:4456 describe.c:4460 +#: describe.c:4536 describe.c:4540 msgid "Provider" msgstr "Provider" -#: describe.c:4466 describe.c:4471 +#: describe.c:4546 describe.c:4551 msgid "Deterministic?" msgstr "Deterministická?" -#: describe.c:4506 +#: describe.c:4586 msgid "List of collations" msgstr "Seznam collations" -#: describe.c:4565 +#: describe.c:4645 msgid "List of schemas" msgstr "Seznam schémat" -#: describe.c:4590 describe.c:4837 describe.c:4908 describe.c:4979 +#: describe.c:4670 describe.c:4917 describe.c:4988 describe.c:5059 #, c-format msgid "The server (version %s) does not support full text search." msgstr "Server (verze %s) nepodporuje fulltextové vyhledávání." -#: describe.c:4625 +#: describe.c:4705 msgid "List of text search parsers" msgstr "Seznam fulltextových parserů" -#: describe.c:4670 +#: describe.c:4750 #, c-format msgid "Did not find any text search parser named \"%s\"." msgstr "Nelze nalézt fulltextový parser se jménem \"%s\"." -#: describe.c:4673 +#: describe.c:4753 #, c-format msgid "Did not find any text search parsers." msgstr "Nelze nalézt žádný fulltextový parser." -#: describe.c:4748 +#: describe.c:4828 msgid "Start parse" msgstr "Začátek parsování" -#: describe.c:4749 +#: describe.c:4829 msgid "Method" msgstr "Metoda" -#: describe.c:4753 +#: describe.c:4833 msgid "Get next token" msgstr "Získej další token" -#: describe.c:4755 +#: describe.c:4835 msgid "End parse" msgstr "Konec parsování" -#: describe.c:4757 +#: describe.c:4837 msgid "Get headline" msgstr "Získej záhlaví" -#: describe.c:4759 +#: describe.c:4839 msgid "Get token types" msgstr "Získej typy tokenu" -#: describe.c:4770 +#: describe.c:4850 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "Fulltextový parser \"%s.%s\"" -#: describe.c:4773 +#: describe.c:4853 #, c-format msgid "Text search parser \"%s\"" msgstr "Fulltextový parser \"%s\"" -#: describe.c:4792 +#: describe.c:4872 msgid "Token name" msgstr "Jméno tokenu" -#: describe.c:4803 +#: describe.c:4883 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "Jméno tokenu pro parser \"%s.%s\"" -#: describe.c:4806 +#: describe.c:4886 #, c-format msgid "Token types for parser \"%s\"" msgstr "Typ tokenu pro parser \"%s\"" -#: describe.c:4860 +#: describe.c:4940 msgid "Template" msgstr "Šablona" -#: describe.c:4861 +#: describe.c:4941 msgid "Init options" msgstr "Init options" -#: describe.c:4883 +#: describe.c:4963 msgid "List of text search dictionaries" msgstr "Seznam fulltextových slovníků" -#: describe.c:4926 +#: describe.c:5006 msgid "Init" msgstr "Init" -#: describe.c:4927 +#: describe.c:5007 msgid "Lexize" msgstr "Lexize" -#: describe.c:4954 +#: describe.c:5034 msgid "List of text search templates" msgstr "Seznam fulltextových šablon" -#: describe.c:5014 +#: describe.c:5094 msgid "List of text search configurations" msgstr "Seznam fulltextových konfigurací" -#: describe.c:5060 +#: describe.c:5140 #, c-format msgid "Did not find any text search configuration named \"%s\"." msgstr "Nelze nalézt fulltextovou konfiguraci se jménem \"%s\"." -#: describe.c:5063 +#: describe.c:5143 #, c-format msgid "Did not find any text search configurations." msgstr "Nelze nalézt žádnou fulltextovou konfiguraci." -#: describe.c:5129 +#: describe.c:5209 msgid "Token" msgstr "Token" -#: describe.c:5130 +#: describe.c:5210 msgid "Dictionaries" msgstr "Slovníky" -#: describe.c:5141 +#: describe.c:5221 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "Fulltextová konfigurace \"%s.%s\"" -#: describe.c:5144 +#: describe.c:5224 #, c-format msgid "Text search configuration \"%s\"" msgstr "Fulltextová konfigurace \"%s\"" -#: describe.c:5148 +#: describe.c:5228 #, c-format msgid "" "\n" @@ -2082,7 +2125,7 @@ msgstr "" "\n" "Parser: \"%s.%s\"" -#: describe.c:5151 +#: describe.c:5231 #, c-format msgid "" "\n" @@ -2091,156 +2134,236 @@ msgstr "" "\n" "Parser: \"%s\"" -#: describe.c:5185 +#: describe.c:5265 #, c-format msgid "The server (version %s) does not support foreign-data wrappers." msgstr "Server (verze %s) nepodporuje foreign-data wrappery." -#: describe.c:5243 +#: describe.c:5323 msgid "List of foreign-data wrappers" msgstr "Seznam foreign-data wrapperů" -#: describe.c:5268 +#: describe.c:5348 #, c-format msgid "The server (version %s) does not support foreign servers." msgstr "Server (verze %s) nepodporuje foreign servery." -#: describe.c:5281 +#: describe.c:5361 msgid "Foreign-data wrapper" msgstr "Foreign-data wrapper" -#: describe.c:5299 describe.c:5504 +#: describe.c:5379 describe.c:5584 msgid "Version" msgstr "Verze" -#: describe.c:5325 +#: describe.c:5405 msgid "List of foreign servers" msgstr "Seznam foreign serverů" -#: describe.c:5350 +#: describe.c:5430 #, c-format msgid "The server (version %s) does not support user mappings." msgstr "Server (verze %s) nepodporuje mapování uživatelů." -#: describe.c:5360 describe.c:5424 +#: describe.c:5440 describe.c:5504 msgid "Server" msgstr "Server" -#: describe.c:5361 +#: describe.c:5441 msgid "User name" msgstr "Uživatelské jméno" -#: describe.c:5386 +#: describe.c:5466 msgid "List of user mappings" msgstr "Seznam mapování uživatelů" -#: describe.c:5411 +#: describe.c:5491 #, c-format msgid "The server (version %s) does not support foreign tables." msgstr "Server (verze %s) nepodporuje foreign tabulky." -#: describe.c:5464 +#: describe.c:5544 msgid "List of foreign tables" msgstr "Seznam foreign tabulek" -#: describe.c:5489 describe.c:5546 +#: describe.c:5569 describe.c:5626 #, c-format msgid "The server (version %s) does not support extensions." msgstr "Server (verze %s) nepodporuje extensions." -#: describe.c:5521 +#: describe.c:5601 msgid "List of installed extensions" msgstr "Seznam instalovaných extensions" -#: describe.c:5574 +#: describe.c:5654 #, c-format msgid "Did not find any extension named \"%s\"." -msgstr "Nelze nalézt extension se jménem \"%s\"" +msgstr "Nelze nalézt extension se jménem \"%s\"." -#: describe.c:5577 +#: describe.c:5657 #, c-format msgid "Did not find any extensions." msgstr "Nelze nalézt žádnou extension." -#: describe.c:5621 +#: describe.c:5701 msgid "Object description" msgstr "Popis objektu" -#: describe.c:5631 +#: describe.c:5711 #, c-format msgid "Objects in extension \"%s\"" msgstr "Objekty v rozšíření \"%s\"" -#: describe.c:5660 describe.c:5731 +#: describe.c:5740 describe.c:5816 #, c-format msgid "The server (version %s) does not support publications." msgstr "Server (verze %s) nepodporuje publikace." -#: describe.c:5677 describe.c:5803 +#: describe.c:5757 describe.c:5894 msgid "All tables" msgstr "Všechny tabulky" -#: describe.c:5678 describe.c:5804 +#: describe.c:5758 describe.c:5895 msgid "Inserts" msgstr "Insert" -#: describe.c:5679 describe.c:5805 +#: describe.c:5759 describe.c:5896 msgid "Updates" msgstr "Update" -#: describe.c:5680 describe.c:5806 +#: describe.c:5760 describe.c:5897 msgid "Deletes" msgstr "Delete" -#: describe.c:5684 describe.c:5808 +#: describe.c:5764 describe.c:5899 msgid "Truncates" msgstr "Truncates" -#: describe.c:5701 +#: describe.c:5768 describe.c:5901 +msgid "Via root" +msgstr "Via root" + +#: describe.c:5785 msgid "List of publications" msgstr "Seznam publikací" -#: describe.c:5769 +#: describe.c:5858 #, c-format msgid "Did not find any publication named \"%s\"." msgstr "Nelze nalézt publikaci se jménem \"%s\"." -#: describe.c:5772 +#: describe.c:5861 #, c-format msgid "Did not find any publications." msgstr "Nelze nalézt žádnou publikaci." -#: describe.c:5799 +#: describe.c:5890 #, c-format msgid "Publication %s" msgstr "Publikace %s" -#: describe.c:5843 +#: describe.c:5938 msgid "Tables:" msgstr "Tabulky:" -#: describe.c:5887 +#: describe.c:5982 #, c-format msgid "The server (version %s) does not support subscriptions." msgstr "Server (verze %s) nepodporuje subskripce." -#: describe.c:5903 +#: describe.c:5998 msgid "Publication" msgstr "Publikace" -#: describe.c:5910 +#: describe.c:6005 msgid "Synchronous commit" msgstr "Synchronní commit" -#: describe.c:5911 +#: describe.c:6006 msgid "Conninfo" msgstr "Spojení" -#: describe.c:5933 +#: describe.c:6028 msgid "List of subscriptions" msgstr "Seznam subskripcí" -#: help.c:74 +#: describe.c:6095 describe.c:6184 describe.c:6270 describe.c:6353 +msgid "AM" +msgstr "AM" + +#: describe.c:6096 +msgid "Input type" +msgstr "Vstupní typ" + +#: describe.c:6097 +msgid "Storage type" +msgstr "Typ uložení" + +#: describe.c:6098 +msgid "Operator class" +msgstr "Třída operátorů" + +#: describe.c:6110 describe.c:6185 describe.c:6271 describe.c:6354 +msgid "Operator family" +msgstr "Rodina operátorů" + +#: describe.c:6143 +msgid "List of operator classes" +msgstr "Seznam tříd operátorů" + +#: describe.c:6186 +msgid "Applicable types" +msgstr "Aplikovatelné typy" + +#: describe.c:6225 +msgid "List of operator families" +msgstr "Seznam rodin operátorů" + +#: describe.c:6272 +msgid "Operator" +msgstr "Operátor" + +#: describe.c:6273 +msgid "Strategy" +msgstr "Strategie" + +#: describe.c:6274 +msgid "ordering" +msgstr "řazení" + +#: describe.c:6275 +msgid "search" +msgstr "hledání" + +#: describe.c:6276 +msgid "Purpose" +msgstr "Účel" + +#: describe.c:6281 +msgid "Sort opfamily" +msgstr "Rodina operátorů" + +#: describe.c:6312 +msgid "List of operators of operator families" +msgstr "List operátorů v rodinách operátorů" + +#: describe.c:6355 +msgid "Registered left type" +msgstr "Typ levého argumentu" + +#: describe.c:6356 +msgid "Registered right type" +msgstr "Typ pravého argumentu" + +#: describe.c:6357 +msgid "Number" +msgstr "Číslo" + +#: describe.c:6393 +msgid "List of support functions of operator families" +msgstr "Seznam support funkcí pro rodiny operátorů" + +#: help.c:73 #, c-format msgid "" "psql is the PostgreSQL interactive terminal.\n" @@ -2249,12 +2372,12 @@ msgstr "" "psql je PostgreSQL interaktivní terminál.\n" "\n" -#: help.c:75 help.c:349 help.c:425 help.c:468 +#: help.c:74 help.c:355 help.c:431 help.c:474 #, c-format msgid "Usage:\n" msgstr "Použití:\n" -#: help.c:76 +#: help.c:75 #, c-format msgid "" " psql [OPTION]... [DBNAME [USERNAME]]\n" @@ -2263,32 +2386,32 @@ msgstr "" " psql [PŘEPÍNAČE]... [DATABÁZE [UŽIVATEL]]\n" "\n" -#: help.c:78 +#: help.c:77 #, c-format msgid "General options:\n" msgstr "Základní volby:\n" -#: help.c:83 +#: help.c:82 #, c-format msgid " -c, --command=COMMAND run only single command (SQL or internal) and exit\n" msgstr " -c, --command=PŘÍKAZ provede pouze jeden příkaz (SQL nebo interní) a skončí\n" -#: help.c:84 +#: help.c:83 #, c-format msgid " -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" msgstr " -d, --dbname=DATABÁZE jméno databáze pro spojení (implicitně: \"%s\")\n" -#: help.c:85 +#: help.c:84 #, c-format msgid " -f, --file=FILENAME execute commands from file, then exit\n" msgstr " -f, --file=SOUBOR provede příkazy ze souboru a skončí\n" -#: help.c:86 +#: help.c:85 #, c-format msgid " -l, --list list available databases, then exit\n" msgstr " -l, --list vypíše seznam dostupných databází a skončí\n" -#: help.c:87 +#: help.c:86 #, c-format msgid "" " -v, --set=, --variable=NAME=VALUE\n" @@ -2300,17 +2423,17 @@ msgstr "" " (e.g., -v ON_ERROR_STOP=1)\n" "\n" -#: help.c:90 +#: help.c:89 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ukáže informace o verzi a skončí\n" -#: help.c:91 +#: help.c:90 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" msgstr " -X, --no-psqlrc nečíst inicializační soubor (~/.psqlrc)\n" -#: help.c:92 +#: help.c:91 #, c-format msgid "" " -1 (\"one\"), --single-transaction\n" @@ -2319,22 +2442,22 @@ msgstr "" " -1 (\"jedna\"), --single-transaction\n" " proveď operaci v rámci jedné transakce\n" -#: help.c:94 +#: help.c:93 #, c-format msgid " -?, --help[=options] show this help, then exit\n" msgstr " -?, --help[=options] ukáže tuto nápovědu, a skončí\n" -#: help.c:95 +#: help.c:94 #, c-format msgid " --help=commands list backslash commands, then exit\n" msgstr " --help=commands vypíše interní příkazy, poté skončí\n" -#: help.c:96 +#: help.c:95 #, c-format msgid " --help=variables list special variables, then exit\n" msgstr " --help=variables vypíše speciální proměnné, poté skončí\n" -#: help.c:98 +#: help.c:97 #, c-format msgid "" "\n" @@ -2343,57 +2466,57 @@ msgstr "" "\n" "Vstupní a výstupní přepínače:\n" -#: help.c:99 +#: help.c:98 #, c-format msgid " -a, --echo-all echo all input from script\n" msgstr " -a, --echo-all ukáže všechny vstupy ze skriptu\n" -#: help.c:100 +#: help.c:99 #, c-format msgid " -b, --echo-errors echo failed commands\n" msgstr " -b, --echo-errors vypíše příkazy které selhaly\n" -#: help.c:101 +#: help.c:100 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" msgstr " -e --echo-queries ukáže všechny příkazy poslané na server\n" -#: help.c:102 +#: help.c:101 #, c-format msgid " -E, --echo-hidden display queries that internal commands generate\n" msgstr " -E, --echo-hidden ukáže dotazy generované interními příkazy\n" -#: help.c:103 +#: help.c:102 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" -msgstr " -L, --log-file=FILENAME uloží záznam sezení do souboru\n" +msgstr " -L, --log-file=SOUBOR uloží záznam sezení do souboru\n" -#: help.c:104 +#: help.c:103 #, c-format msgid " -n, --no-readline disable enhanced command line editing (readline)\n" msgstr " -n, --no-readline vypne pokročilé editační možnosti příkazové řádky (podpora readline)\n" -#: help.c:105 +#: help.c:104 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" msgstr " -o, --output=SOUBOR zapíše výsledek dotazu do souboru (nebo |roury)\n" -#: help.c:106 +#: help.c:105 #, c-format msgid " -q, --quiet run quietly (no messages, only query output)\n" msgstr " -q, --quiet tichý chod (bez hlášek, pouze výstupy dotazů)\n" -#: help.c:107 +#: help.c:106 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" msgstr " -s, --single-step krokovací mód (nutné potvrzení každého dotazu)\n" -#: help.c:108 +#: help.c:107 #, c-format msgid " -S, --single-line single-line mode (end of line terminates SQL command)\n" msgstr " -S, --single-line jednořádkový mód (konec řádky ukončuje SQL příkaz)\n" -#: help.c:110 +#: help.c:109 #, c-format msgid "" "\n" @@ -2402,18 +2525,17 @@ msgstr "" "\n" "Výstupní formát je:\n" -#: help.c:111 +#: help.c:110 #, c-format msgid " -A, --no-align unaligned table output mode\n" msgstr " -A, --no-align mód nezarovnaného formátu tabulky\n" -#: help.c:112 +#: help.c:111 #, c-format -#| msgid " \\a toggle between unaligned and aligned output mode\n" msgid " --csv CSV (Comma-Separated Values) table output mode\n" msgstr " --csv CSV (Comma-Separated Values) mód výstupu tabulek\n" -#: help.c:113 +#: help.c:112 #, c-format msgid "" " -F, --field-separator=STRING\n" @@ -2422,17 +2544,17 @@ msgstr "" " -F, --field-separator=ŘETĚZEC\n" " oddělovač polí pro nezarovnaný výstup (implicitně: \"%s\")\n" -#: help.c:116 +#: help.c:115 #, c-format msgid " -H, --html HTML table output mode\n" msgstr " -H, --html mód HTML formátu tabulky\n" -#: help.c:117 +#: help.c:116 #, c-format msgid " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset command)\n" msgstr " -P, --pset=VAR[=ARG] nastaví zobrazovací parametr VAR na hodnotu ARG (viz. příkaz \\pset)\n" -#: help.c:118 +#: help.c:117 #, c-format msgid "" " -R, --record-separator=STRING\n" @@ -2441,22 +2563,22 @@ msgstr "" " -R, --record-separator=ŘETĚZEC\n" " oddělovač záznamů pro nezarovnaný výstup (implicitně: newline)\n" -#: help.c:120 +#: help.c:119 #, c-format msgid " -t, --tuples-only print rows only\n" msgstr " -t, --tuples-only tiskni pouze řádky\n" -#: help.c:121 +#: help.c:120 #, c-format msgid " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, border)\n" msgstr " -T, --table-attr=TEXT nastaví atributy HTML tabulky (např. width, border)\n" -#: help.c:122 +#: help.c:121 #, c-format msgid " -x, --expanded turn on expanded table output\n" msgstr " -x, --expanded zapne rozšířený tabulkový výstup\n" -#: help.c:123 +#: help.c:122 #, c-format msgid "" " -z, --field-separator-zero\n" @@ -2465,7 +2587,7 @@ msgstr "" " -z, --field-separator-zero\n" " nastaví oddělovač polí pro nezarovnaný výstup na nulový byte\n" -#: help.c:125 +#: help.c:124 #, c-format msgid "" " -0, --record-separator-zero\n" @@ -2474,7 +2596,7 @@ msgstr "" " -0, --record-separator-zero\n" " nastaví oddělovač záznamů pro nezarovnaný výstup na nulový byte\n" -#: help.c:128 +#: help.c:127 #, c-format msgid "" "\n" @@ -2483,36 +2605,36 @@ msgstr "" "\n" "Parametry spojení:\n" -#: help.c:131 +#: help.c:130 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory (default: \"%s\")\n" msgstr " -h, --host=HOSTNAME jméno databázového serveru nebo adresář se soketem (implicitně: \"%s\")\n" -#: help.c:132 +#: help.c:131 msgid "local socket" msgstr "lokální soket" -#: help.c:135 +#: help.c:134 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" msgstr " -p, --port=PORT port databázového serveru (implicitně: \"%s\")\n" -#: help.c:141 +#: help.c:140 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" msgstr " -U, --username=JMÉNO jméno databázového uživatele (implicitně: \"%s\")\n" -#: help.c:142 +#: help.c:141 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password neptá se na heslo\n" -#: help.c:143 +#: help.c:142 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password vynucený dotaz na heslo (měl by být proveden automaticky)\n" -#: help.c:145 +#: help.c:144 #, c-format msgid "" "\n" @@ -2527,10 +2649,15 @@ msgstr "" "části věnované psql.\n" "\n" +#: help.c:147 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "Chyby hlašte na <%s>.\n" + #: help.c:148 #, c-format -msgid "Report bugs to .\n" -msgstr "Chyby posílejte na adresu .\n" +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" #: help.c:174 #, c-format @@ -2554,432 +2681,462 @@ msgstr " \\errverbose zobrazí polední chybovou hlášku s maximem #: help.c:178 #, c-format -msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" -msgstr " \\g [SOUBOR] nebo ; pošle SQL dotaz na server (a zapíše výsledek do souboru nebo |roury)\n" +msgid "" +" \\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);\n" +" \\g with no arguments is equivalent to a semicolon\n" +msgstr "" +" \\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);\n" +" \\g with no arguments is equivalent to a semicolon\n" -#: help.c:179 +#: help.c:180 #, c-format msgid " \\gdesc describe result of query, without executing it\n" msgstr " \\gdesc popíše výsledek dotazu, bez spuštění\n" -#: help.c:180 +#: help.c:181 #, c-format msgid " \\gexec execute query, then execute each value in its result\n" msgstr " \\gexec spustí dotaz, poté spustí každou hodnotu z jeho výsledku\n" -#: help.c:181 +#: help.c:182 #, c-format msgid " \\gset [PREFIX] execute query and store results in psql variables\n" msgstr " \\gset [PREFIX] spustí dotaz a uloží výsledky v psql proměnných\n" -#: help.c:182 +#: help.c:183 #, c-format -msgid " \\gx [FILE] as \\g, but forces expanded output mode\n" -msgstr " \\gx [FILE] jako \\g, ale vynucuje rozšířený mód výstupu\n" +msgid " \\gx [(OPTIONS)] [FILE] as \\g, but forces expanded output mode\n" +msgstr " \\gx [(VOLBY)] [SOUBOR] jako \\g, ale vynucuje rozšířený mód výstupu\n" -#: help.c:183 +#: help.c:184 #, c-format msgid " \\q quit psql\n" msgstr " \\q ukončení psql\n" -#: help.c:184 +#: help.c:185 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEC] každých SEC vteřin spusť dotaz\n" -#: help.c:187 +#: help.c:188 #, c-format msgid "Help\n" msgstr "Nápověda\n" -#: help.c:189 +#: help.c:190 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [commands] zobrazí nápovědu k interním příkazům\n" -#: help.c:190 +#: help.c:191 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr " \\? options zobrazí nápovědu k psql parametrům psql pro příkazovou řádku\n" -#: help.c:191 +#: help.c:192 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? variables zobrazí nápovědu ke speciálním proměnným\n" -#: help.c:192 +#: help.c:193 #, c-format msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" msgstr " \\h [JMÉNO] nápověda syntaxe SQL příkazů, * pro všechny příkazy\n" -#: help.c:195 +#: help.c:196 #, c-format msgid "Query Buffer\n" msgstr "Paměť dotazu\n" -#: help.c:196 +#: help.c:197 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr " \\e [SOUBOR] [ŘÁDEK] editace aktuálního dotazu (nebo souboru) v externím editoru\n" -#: help.c:197 +#: help.c:198 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr " \\ef [JMENOFUNKCE [ŘÁDEK]] editace definice funkce v externím editoru\n" -#: help.c:198 +#: help.c:199 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr "" " \\ev [VIEWNAME [LINE]] editace definice pohledu v externím editoru\n" "\n" -#: help.c:199 +#: help.c:200 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p ukázat současný obsah paměti s dotazem\n" -#: help.c:200 +#: help.c:201 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r vyprázdnění paměti s dotazy\n" -#: help.c:202 +#: help.c:203 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [SOUBOR] vytiskne historii nebo ji uloží do souboru\n" -#: help.c:204 +#: help.c:205 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w SOUBOR zapsání paměti s dotazem do souboru\n" -#: help.c:207 +#: help.c:208 #, c-format msgid "Input/Output\n" msgstr "Vstup/Výstup\n" -#: help.c:208 +#: help.c:209 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr " \\copy ... provede SQL COPY s tokem dat na klienta\n" -#: help.c:209 +#: help.c:210 #, c-format -msgid " \\echo [STRING] write string to standard output\n" -msgstr " \\echo [TEXT] vypsání textu na standardní výstup\n" +msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" +msgstr "" +" \\echo [-n] [ŘETĚZEC] vypsání textu na standardní výstup (-n pro potlačení\n" +" nového řádku)\n" -#: help.c:210 +#: help.c:211 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i SOUBOR provedení příkazů ze souboru\n" -#: help.c:211 +#: help.c:212 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr " \\ir FILE jako \\i, ale relativně k pozici v aktuálním skriptu\n" -#: help.c:212 +#: help.c:213 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [SOUBOR] přesměrování výsledků dotazu do souboru nebo |roury\n" -#: help.c:213 +#: help.c:214 +#, c-format +msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" +msgstr "" +" \\qecho [ŘETĚZEC] vypsání textu na \\o výstup dotazů (-n pro potlačení\n" +" nového řádku)\n" + +#: help.c:215 #, c-format -msgid " \\qecho [STRING] write string to query output stream (see \\o)\n" -msgstr " \\qecho [ŘETĚZEC] vypsání textu na výstup dotazů (viz. \\o)\n" +#| msgid " \\echo [STRING] write string to standard output\n" +msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" +msgstr "" +" \\warn [-n] [TEXT] vypsání textu na standardní výstup (-n pro potlačení\n" +" nového řádku)\n" -#: help.c:216 +#: help.c:218 #, c-format msgid "Conditional\n" msgstr "Podmínka\n" -#: help.c:217 +#: help.c:219 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if EXPR začne podmíněný blok\n" -#: help.c:218 +#: help.c:220 #, c-format msgid " \\elif EXPR alternative within current conditional block\n" msgstr " \\elif EXPR alternativa v současném podmíněném bloku\n" -#: help.c:219 +#: help.c:221 #, c-format msgid " \\else final alternative within current conditional block\n" msgstr " \\else poslední alternativa v současném podmíněném bloku\n" -#: help.c:220 +#: help.c:222 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif ukončí podmíněný blok\n" -#: help.c:223 +#: help.c:225 #, c-format msgid "Informational\n" msgstr "Informační\n" -#: help.c:224 +#: help.c:226 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (volby: S = zobraz systémové objekty, + = další detaily)\n" -#: help.c:225 +#: help.c:227 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] seznam tabulek, pohledů a sekvencí\n" -#: help.c:226 +#: help.c:228 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] JMÉNO popis tabulky, pohledů, sekvence nebo indexu\n" -#: help.c:227 +#: help.c:229 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [VZOR] seznam agregačních funkcí\n" -#: help.c:228 +#: help.c:230 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [PATTERN] seznam přístupových metod\n" -#: help.c:229 +#: help.c:231 +#, c-format +#| msgid " \\do[S] [PATTERN] list operators\n" +msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" +msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] vypíše třídy operátorů\n" + +#: help.c:232 +#, c-format +#| msgid " \\do[S] [PATTERN] list operators\n" +msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" +msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] vypíše rodiny operátorů\n" + +#: help.c:233 +#, c-format +#| msgid " \\do[S] [PATTERN] list operators\n" +msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" +msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] vypíše operátory pro rodiny operátorů\n" + +#: help.c:234 +#, c-format +msgid " \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" +msgstr " \\dAp [AMPTRN [OPFPTRN]] vypíše support funkce rodin operátorů\n" + +#: help.c:235 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [VZOR] seznam tablespaces\n" -#: help.c:230 +#: help.c:236 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [PATTERN] seznam konverzí\n" -#: help.c:231 +#: help.c:237 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [PATTERN] seznam přetypování\n" -#: help.c:232 +#: help.c:238 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr " \\dd[S] [PATTERN] zobrazí popis objektů nezobrazených jinde\n" -#: help.c:233 +#: help.c:239 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [PATTERN] seznam domén\n" -#: help.c:234 +#: help.c:240 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [VZOR] seznam implicitních privilegií\n" -#: help.c:235 +#: help.c:241 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [VZOR] seznam foreign tabulek\n" -#: help.c:236 +#: help.c:242 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [VZOR] seznam foreign tabulek\n" -#: help.c:237 +#: help.c:243 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [VZOR] seznam foreign serverů\n" -#: help.c:238 +#: help.c:244 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [VZOR] seznam mapování uživatelů\n" -#: help.c:239 +#: help.c:245 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [VZOR] seznam foreign-data wrapperů\n" -#: help.c:240 +#: help.c:246 #, c-format -#| msgid " \\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions\n" msgid " \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] functions\n" msgstr " \\df[anptw][S+] [VZOR] seznam [pouze agg/normal/procedures/trigger/window] funkcí\n" -#: help.c:241 +#: help.c:247 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [VZOR] seznam konfigurací fulltextového vyhledávání\n" -#: help.c:242 +#: help.c:248 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [VZOR] seznam slovníků fulltextového vyhledávání\n" -#: help.c:243 +#: help.c:249 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [VZOR] seznam parserů fulltextového vyhledávání\n" -#: help.c:244 +#: help.c:250 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [VZOR] seznam šablon fulltextového vyhledávání\n" -#: help.c:245 +#: help.c:251 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [PATTERN] seznam rolí\n" -#: help.c:246 +#: help.c:252 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [VZOR] seznam indexů\n" -#: help.c:247 +#: help.c:253 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl seznam \"large object\" stejné jako \\lo_list\n" -#: help.c:248 +#: help.c:254 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [VZOR] seznam procedurálních jazyků\n" -#: help.c:249 +#: help.c:255 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [PATTERN] seznam materializovaných pohledů\n" -#: help.c:250 +#: help.c:256 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [VZOR] seznam schémat\n" -#: help.c:251 +#: help.c:257 #, c-format msgid " \\do[S] [PATTERN] list operators\n" msgstr " \\do[S] [VZOR] seznam operátorů\n" -#: help.c:252 +#: help.c:258 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [VZOR] seznam collations\n" -#: help.c:253 +#: help.c:259 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr " \\dp [VZOR] seznam přístupových práv tabulek, pohledů a sekvencí\n" -#: help.c:254 +#: help.c:260 #, c-format -#| msgid " \\dRp[+] [PATTERN] list replication publications\n" msgid " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n" msgstr " \\dP[itn+] [PATTERN] seznam [pouze index/table] partitioned relations [n=nested]\n" -#: help.c:255 +#: help.c:261 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [VZOR1 [VZOR2]] seznam nastavení rolí pro jednotlivé databáze\n" -#: help.c:256 +#: help.c:262 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[+] [PATTERN] seznam replikačních publikací\n" -#: help.c:257 +#: help.c:263 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [PATTERN] seznam replikačních subskripcí\n" -#: help.c:258 +#: help.c:264 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [VZOR] seznam sekvencí\n" -#: help.c:259 +#: help.c:265 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [VZOR] seznam tabulek\n" -#: help.c:260 +#: help.c:266 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [VZOR] seznam datových typů\n" -#: help.c:261 +#: help.c:267 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [PATTERN] seznam rolí\n" -#: help.c:262 +#: help.c:268 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [VZOR] seznam pohledů\n" -#: help.c:263 +#: help.c:269 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [VZOR] seznam rozšíření\n" -#: help.c:264 +#: help.c:270 #, c-format msgid " \\dy [PATTERN] list event triggers\n" msgstr " \\dy [PATTERN] seznam event triggerů\n" -#: help.c:265 +#: help.c:271 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [PATTERN] seznam databází\n" -#: help.c:266 +#: help.c:272 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] FUNCNAME zobrazí definici funkce\n" -#: help.c:267 +#: help.c:273 #, c-format msgid " \\sv[+] VIEWNAME show a view's definition\n" msgstr " \\sv[+] VIEWNAME zobrazí definici pohledu\n" -#: help.c:268 +#: help.c:274 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [VZOR] stejné jako \\dp\n" -#: help.c:271 +#: help.c:277 #, c-format msgid "Formatting\n" msgstr "Formátování\n" -#: help.c:272 +#: help.c:278 #, c-format msgid " \\a toggle between unaligned and aligned output mode\n" msgstr " \\a přepíná mezi 'unaligned' a 'aligned' modem výstupu\n" -#: help.c:273 +#: help.c:279 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr " \\C [ŘETĚZEC] nastaví titulek tabulky nebo odnastaví pokud není definován řetězec\n" -#: help.c:274 +#: help.c:280 #, c-format msgid " \\f [STRING] show or set field separator for unaligned query output\n" msgstr " \\f [ŘETĚZEC] nastaví nebo zobrazí oddělovače polí pro nezarovnaný výstup dotazů\n" -#: help.c:275 +#: help.c:281 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H zapne HTML mód výstupu (nyní %s)\n" -#: help.c:277 +#: help.c:283 #, c-format -#| msgid "" -#| " \\pset [NAME [VALUE]] set table output option\n" -#| " (NAME := {border|columns|expanded|fieldsep|fieldsep_zero|\n" -#| " footer|format|linestyle|null|numericlocale|pager|\n" -#| " pager_min_lines|recordsep|recordsep_zero|tableattr|title|\n" -#| " tuples_only|unicode_border_linestyle|\n" -#| " unicode_column_linestyle|unicode_header_linestyle})\n" msgid "" " \\pset [NAME [VALUE]] set table output option\n" " (border|columns|csv_fieldsep|expanded|fieldsep|\n" @@ -2997,27 +3154,27 @@ msgstr "" " unicode_border_linestyle|unicode_column_linestyle|\n" " unicode_header_linestyle)\n" -#: help.c:284 +#: help.c:290 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] ukazovat pouze řádky (nyní %s)\n" -#: help.c:286 +#: help.c:292 #, c-format msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" msgstr " \\T [ŘETĚZEC] nastavení atributů HTML tagu
\n" -#: help.c:287 +#: help.c:293 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr " \\x [on|off|auto] zapne rozšířený mód výstupu (nyní %s)\n" -#: help.c:291 +#: help.c:297 #, c-format msgid "Connection\n" msgstr "Spojení\n" -#: help.c:293 +#: help.c:299 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3026,7 +3183,7 @@ msgstr "" " \\c[onnect] [DATABÁZE|- UŽIVATEL|- HOST|- PORT|-] | conninfo]\n" " připojí se do nové databáze (současná \"%s\")\n" -#: help.c:297 +#: help.c:303 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3035,57 +3192,57 @@ msgstr "" " \\c[onnect] [DATABÁZE|- UŽIVATEL|- HOST|- PORT|-] | conninfo]\n" " připojí se do nové databáze (současně žádné spojení)\n" -#: help.c:299 +#: help.c:305 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo zobrazí informace o aktuálním spojení\n" -#: help.c:300 +#: help.c:306 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [KÓDOVÁNÍ] zobrazení nebo nastavení kódování klienta\n" -#: help.c:301 +#: help.c:307 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr " \\password [UŽIVATEL] bezpečná změna hesla uživatele\n" -#: help.c:304 +#: help.c:310 #, c-format msgid "Operating System\n" msgstr "Operační systém\n" -#: help.c:305 +#: help.c:311 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [ADRESÁŘ] změna aktuálního pracovního adresář\n" -#: help.c:306 +#: help.c:312 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv NAME [VALUE] nastaví nebo zruší proměnnou prostředí\n" -#: help.c:307 +#: help.c:313 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr " \\timing [on|off] použít sledování času u příkazů (nyní %s)\n" -#: help.c:309 +#: help.c:315 #, c-format msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" msgstr " \\! [PŘÍKAZ] provedení příkazu v shellu nebo nastartuje interaktivní shell\n" -#: help.c:312 +#: help.c:318 #, c-format msgid "Variables\n" msgstr "Proměnné\n" -#: help.c:313 +#: help.c:319 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr " \\prompt [TEXT] PROMĚNÁ vyzve uživatele, aby zadal hodnotu proměnné\n" -#: help.c:314 +#: help.c:320 #, c-format msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" msgstr "" @@ -3093,17 +3250,17 @@ msgstr "" " nastavení interní proměnné nebo bez parametrů zobrazí\n" " seznam všech proměnných\n" -#: help.c:315 +#: help.c:321 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset JMÉNO zrušení interní proměnné\n" -#: help.c:318 +#: help.c:324 #, c-format msgid "Large Objects\n" msgstr "Velké objekty (LO)\n" -#: help.c:319 +#: help.c:325 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -3116,7 +3273,7 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID operace s \"large\" objekty\n" -#: help.c:346 +#: help.c:352 #, c-format msgid "" "List of specially treated variables\n" @@ -3125,12 +3282,12 @@ msgstr "" "Seznam proměnných se zvláštním významem\n" "\n" -#: help.c:348 +#: help.c:354 #, c-format msgid "psql variables:\n" msgstr "psql proměnné:\n" -#: help.c:350 +#: help.c:356 #, c-format msgid "" " psql --set=NAME=VALUE\n" @@ -3141,7 +3298,7 @@ msgstr "" " nebo \\set NAME VALUE v psql\n" "\n" -#: help.c:352 +#: help.c:358 #, c-format msgid "" " AUTOCOMMIT\n" @@ -3150,7 +3307,7 @@ msgstr "" " AUTOCOMMIT\n" " pokud nastaveno, úspěšně dokončené SQL příkazy jsou automaticky commitovány\n" -#: help.c:354 +#: help.c:360 #, c-format msgid "" " COMP_KEYWORD_CASE\n" @@ -3161,7 +3318,7 @@ msgstr "" " určuje velikost písmen pro dokončování SQL klíčových slov\n" " [lower, upper, preserve-lower, preserve-upper]\n" -#: help.c:357 +#: help.c:363 #, c-format msgid "" " DBNAME\n" @@ -3170,7 +3327,7 @@ msgstr "" " DBNAME\n" " název aktuálně připojené databáze\n" -#: help.c:359 +#: help.c:365 #, c-format msgid "" " ECHO\n" @@ -3181,7 +3338,7 @@ msgstr "" " určuje jaký vstup je zapisován na standardní výstup\n" " [all, errors, none, queries]\n" -#: help.c:362 +#: help.c:368 #, c-format msgid "" " ECHO_HIDDEN\n" @@ -3192,7 +3349,7 @@ msgstr "" " pokud je nastaveno, zobrazuje dotazy spouštěné interními (backslash) příkazy;\n" " při nastavení na \"noexec\", pouze zobrazí bez spuštění\n" -#: help.c:365 +#: help.c:371 #, c-format msgid "" " ENCODING\n" @@ -3201,7 +3358,7 @@ msgstr "" " ENCODING\n" " aktuální kódování znakové sady klienta\n" -#: help.c:367 +#: help.c:373 #, c-format msgid "" " ERROR\n" @@ -3210,7 +3367,7 @@ msgstr "" " ERROR\n" " nastaveno na true pokud poslední dotaz selhal, jinak false\n" -#: help.c:369 +#: help.c:375 #, c-format msgid "" " FETCH_COUNT\n" @@ -3219,7 +3376,7 @@ msgstr "" " FETCH_COUNT\n" " počet řádek výsledku pro načtení a zobrazení nanjednou (0 = unlimited)\n" -#: help.c:371 +#: help.c:377 #, c-format msgid "" " HIDE_TABLEAM\n" @@ -3228,7 +3385,7 @@ msgstr "" " HIDE_TABLEAM\n" " pokud nastaveno, informace o table access methods nejsou zobrazovány\n" -#: help.c:373 +#: help.c:379 #, c-format msgid "" " HISTCONTROL\n" @@ -3237,7 +3394,7 @@ msgstr "" " HISTCONTROL\n" " nastavuje chování historie příkazů [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:375 +#: help.c:381 #, c-format msgid "" " HISTFILE\n" @@ -3246,11 +3403,8 @@ msgstr "" " HISTFILE\n" " název souboru pro uložení historie příkazů\n" -#: help.c:377 +#: help.c:383 #, c-format -#| msgid "" -#| " HISTSIZE\n" -#| " max number of commands to store in the command history\n" msgid "" " HISTSIZE\n" " maximum number of commands to store in the command history\n" @@ -3259,7 +3413,7 @@ msgstr "" " maximální počet položek uložených v historii přkazů\n" "\n" -#: help.c:379 +#: help.c:385 #, c-format msgid "" " HOST\n" @@ -3268,7 +3422,7 @@ msgstr "" " HOST\n" " databázový server ke kterému jste aktuálně připojeni\n" -#: help.c:381 +#: help.c:387 #, c-format msgid "" " IGNOREEOF\n" @@ -3277,7 +3431,7 @@ msgstr "" " IGNOREEOF\n" " počet EOF znaků potřebných pro ukončení interaktivníhi sezení\n" -#: help.c:383 +#: help.c:389 #, c-format msgid "" " LASTOID\n" @@ -3286,7 +3440,7 @@ msgstr "" " LASTOID\n" " hodnota posledního změněného OID\n" -#: help.c:385 +#: help.c:391 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" @@ -3297,7 +3451,7 @@ msgstr "" " LAST_ERROR_SQLSTATE\n" " zpráva a SQLSTATE poslední chyby, nebo prázdný řetězec a \"00000\" pokud se chyba nevyskytla\n" -#: help.c:388 +#: help.c:394 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" @@ -3306,7 +3460,7 @@ msgstr "" " ON_ERROR_ROLLBACK\n" " pokud nastaveno, chyba nepřeruší transakci (používá implicitní savepointy)\n" -#: help.c:390 +#: help.c:396 #, c-format msgid "" " ON_ERROR_STOP\n" @@ -3315,7 +3469,7 @@ msgstr "" " ON_ERROR_STOP\n" " zastaví dávkové spouštění v případě výskytu chyby\n" -#: help.c:392 +#: help.c:398 #, c-format msgid "" " PORT\n" @@ -3324,7 +3478,7 @@ msgstr "" " PORT\n" " port na serveru používaný aktuálním spojením\n" -#: help.c:394 +#: help.c:400 #, c-format msgid "" " PROMPT1\n" @@ -3333,7 +3487,7 @@ msgstr "" " PROMPT1\n" " specifikuje standardní psql prompt\n" -#: help.c:396 +#: help.c:402 #, c-format msgid "" " PROMPT2\n" @@ -3342,7 +3496,7 @@ msgstr "" " PROMPT2\n" " specifikuje prompt používaný pokud příkaz pokračuje z předchozí řádky\n" -#: help.c:398 +#: help.c:404 #, c-format msgid "" " PROMPT3\n" @@ -3351,7 +3505,7 @@ msgstr "" " PROMPT3\n" " specifikuje prompt používaný během COPY ... FROM STDIN\n" -#: help.c:400 +#: help.c:406 #, c-format msgid "" " QUIET\n" @@ -3360,7 +3514,7 @@ msgstr "" " QUIET\n" " tichý běh (stejné jako volba -q)\n" -#: help.c:402 +#: help.c:408 #, c-format msgid "" " ROW_COUNT\n" @@ -3369,7 +3523,7 @@ msgstr "" " ROW_COUNT\n" " počet řádek vrácených nebo ovlivněných předchozím dotazem, nebo 0\n" -#: help.c:404 +#: help.c:410 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3380,7 +3534,7 @@ msgstr "" " SERVER_VERSION_NUM\n" " verze serveru (v krátkém textovém nebo numerickém formátu)\n" -#: help.c:407 +#: help.c:413 #, c-format msgid "" " SHOW_CONTEXT\n" @@ -3389,7 +3543,7 @@ msgstr "" " SHOW_CONTEXT\n" " určuje zobrazení informací o kontextu zpráv [never, errors, always]\n" -#: help.c:409 +#: help.c:415 #, c-format msgid "" " SINGLELINE\n" @@ -3398,7 +3552,7 @@ msgstr "" " SINGLELINE\n" " pokud nastaveno, konec řádky ukončuje SQL příkazy (stejné jako volba -S)\n" -#: help.c:411 +#: help.c:417 #, c-format msgid "" " SINGLESTEP\n" @@ -3407,7 +3561,7 @@ msgstr "" " SINGLESTEP\n" " single-step mód (stejné jako volba -s)\n" -#: help.c:413 +#: help.c:419 #, c-format msgid "" " SQLSTATE\n" @@ -3416,7 +3570,7 @@ msgstr "" " SQLSTATE\n" " SQLSTATE posledního dotazu, nebo \"00000\" pokud skončil bez chyby\n" -#: help.c:415 +#: help.c:421 #, c-format msgid "" " USER\n" @@ -3425,11 +3579,8 @@ msgstr "" " USER\n" " uživatelský účet ke kterému jste aktuálně připojeni\n" -#: help.c:417 +#: help.c:423 #, c-format -#| msgid "" -#| " VERBOSITY\n" -#| " controls verbosity of error reports [default, verbose, terse]\n" msgid "" " VERBOSITY\n" " controls verbosity of error reports [default, verbose, terse, sqlstate]\n" @@ -3438,7 +3589,7 @@ msgstr "" " určuje podrobnost chybových hlášení [default, verbose, terse, sqlstate]\n" "\n" -#: help.c:419 +#: help.c:425 #, c-format msgid "" " VERSION\n" @@ -3451,7 +3602,7 @@ msgstr "" " VERSION_NUM\n" " verze psql (v podropbném řetězci, krátkém řetězci, nebo numerickém formátu)\n" -#: help.c:424 +#: help.c:430 #, c-format msgid "" "\n" @@ -3460,7 +3611,7 @@ msgstr "" "\n" "Nastavení zobrazení:\n" -#: help.c:426 +#: help.c:432 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3471,7 +3622,7 @@ msgstr "" " nebo \\pset NAME [VALUE] v psql\n" "\n" -#: help.c:428 +#: help.c:434 #, c-format msgid "" " border\n" @@ -3480,7 +3631,7 @@ msgstr "" " border\n" " styl rámečků (číslo)\n" -#: help.c:430 +#: help.c:436 #, c-format msgid "" " columns\n" @@ -3489,7 +3640,7 @@ msgstr "" " columns\n" " cílová šířka pro zalomený formát\n" -#: help.c:432 +#: help.c:438 #, c-format msgid "" " expanded (or x)\n" @@ -3498,7 +3649,7 @@ msgstr "" " expanded (nebo x)\n" " rozšířený výstup [on, off, auto]\n" -#: help.c:434 +#: help.c:440 #, c-format msgid "" " fieldsep\n" @@ -3507,7 +3658,7 @@ msgstr "" " fieldsep\n" " oddělovač položek pro nezarovnaný výstup (výchozí \"%s\")\n" -#: help.c:437 +#: help.c:443 #, c-format msgid "" " fieldsep_zero\n" @@ -3516,7 +3667,7 @@ msgstr "" " fieldsep_zero\n" " nastaví oddělovač polí pro nezarovnaný výstup na nulový byte\n" -#: help.c:439 +#: help.c:445 #, c-format msgid "" " footer\n" @@ -3525,7 +3676,7 @@ msgstr "" " footer\n" " zapne nebo vypne zobrazení zápatí tabulky [on, off]\n" -#: help.c:441 +#: help.c:447 #, c-format msgid "" " format\n" @@ -3534,7 +3685,7 @@ msgstr "" " format\n" " nastaví formát výstupu [unaligned, aligned, wrapped, html, asciidoc, ...]\n" -#: help.c:443 +#: help.c:449 #, c-format msgid "" " linestyle\n" @@ -3543,7 +3694,7 @@ msgstr "" " linestype\n" " nastaví styl vykreslování rámečků [ascii, old-ascii, unicode]\n" -#: help.c:445 +#: help.c:451 #, c-format msgid "" " null\n" @@ -3552,7 +3703,7 @@ msgstr "" " null\n" " nastaví řetězec vypisovaný místo null hodnoty\n" -#: help.c:447 +#: help.c:453 #, c-format msgid "" " numericlocale\n" @@ -3561,7 +3712,7 @@ msgstr "" " numericlocale\n" " zapne zobrazení lokalizovaného znaku pro oddělení skupin číslic\n" -#: help.c:449 +#: help.c:455 #, c-format msgid "" " pager\n" @@ -3570,7 +3721,7 @@ msgstr "" " pager\n" " určuje kdy se použije externí pager [yes, no, always]\n" -#: help.c:451 +#: help.c:457 #, c-format msgid "" " recordsep\n" @@ -3579,7 +3730,7 @@ msgstr "" " recordsep\n" " oddělovač záznamů (řádek) pro nezarovnaný výstup\n" -#: help.c:453 +#: help.c:459 #, c-format msgid "" " recordsep_zero\n" @@ -3588,7 +3739,7 @@ msgstr "" " recordsep_zero\n" " nastaví oddělovač záznamů pro nezarovnaný výstup na nulový byte\n" -#: help.c:455 +#: help.c:461 #, c-format msgid "" " tableattr (or T)\n" @@ -3599,7 +3750,7 @@ msgstr "" " specifikuje attributy pro table tag v html formátu, nebo proporcionální\n" " šířky sloupců pro datové typy zarovnávané doleva v latex-longtable formátu\n" -#: help.c:458 +#: help.c:464 #, c-format msgid "" " title\n" @@ -3608,7 +3759,7 @@ msgstr "" " title\n" " nastavuje titulek tabulky pro následně vypisované tabulky\n" -#: help.c:460 +#: help.c:466 #, c-format msgid "" " tuples_only\n" @@ -3617,7 +3768,7 @@ msgstr "" " tuples_only\n" " pokud nastaveno, jsou vypsána pouze data z tabulky\n" -#: help.c:462 +#: help.c:468 #, c-format msgid "" " unicode_border_linestyle\n" @@ -3630,7 +3781,7 @@ msgstr "" " unicode_header_linestyle\n" " nastaví styl Unicode rámečků [single, double]\n" -#: help.c:467 +#: help.c:473 #, c-format msgid "" "\n" @@ -3639,7 +3790,7 @@ msgstr "" "\n" "Proměnné prostředí:\n" -#: help.c:471 +#: help.c:477 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -3650,7 +3801,7 @@ msgstr "" " nebo \\setenv NAME [VALUE] v rámci psql\n" "\n" -#: help.c:473 +#: help.c:479 #, c-format msgid "" " set NAME=VALUE\n" @@ -3663,7 +3814,7 @@ msgstr "" " nebo \\setenv NAME [VALUE] v rámci psql\n" "\n" -#: help.c:476 +#: help.c:482 #, c-format msgid "" " COLUMNS\n" @@ -3672,7 +3823,7 @@ msgstr "" " COLUMNS\n" " počet sloupců pro zalamovaný formát\n" -#: help.c:478 +#: help.c:484 #, c-format msgid "" " PGAPPNAME\n" @@ -3681,7 +3832,7 @@ msgstr "" " PGAPPNAME\n" " stejné jako application_name v parametrech spojení\n" -#: help.c:480 +#: help.c:486 #, c-format msgid "" " PGDATABASE\n" @@ -3690,7 +3841,7 @@ msgstr "" " PGDATABASE\n" " stejné jako dbname v parametrech spojení\n" -#: help.c:482 +#: help.c:488 #, c-format msgid "" " PGHOST\n" @@ -3699,7 +3850,7 @@ msgstr "" " PGHOST\n" " stejné jako host v parametrech spojení\n" -#: help.c:484 +#: help.c:490 #, c-format msgid "" " PGPASSWORD\n" @@ -3708,7 +3859,7 @@ msgstr "" " PGPASSWORD\n" " heslo pro spojení (nedoporučuje se)\n" -#: help.c:486 +#: help.c:492 #, c-format msgid "" " PGPASSFILE\n" @@ -3717,7 +3868,7 @@ msgstr "" " PGPASSFILE\n" " jméno souboru s hesly\n" -#: help.c:488 +#: help.c:494 #, c-format msgid "" " PGPORT\n" @@ -3726,7 +3877,7 @@ msgstr "" " PGPORT\n" " stejné jako port v parametrech spojení\n" -#: help.c:490 +#: help.c:496 #, c-format msgid "" " PGUSER\n" @@ -3735,7 +3886,7 @@ msgstr "" " PGUSER\n" " stejné jako user v parametrech spojení\n" -#: help.c:492 +#: help.c:498 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" @@ -3744,7 +3895,7 @@ msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" " editor používaný příkazy \\e, \\ef, a \\ev\n" -#: help.c:494 +#: help.c:500 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" @@ -3753,7 +3904,7 @@ msgstr "" " PSQL_EDITOR_LINENUMBER_ARG\n" " jak specifikovat číslo řádky při spouštění editoru\n" -#: help.c:496 +#: help.c:502 #, c-format msgid "" " PSQL_HISTORY\n" @@ -3762,7 +3913,7 @@ msgstr "" " PSQL_HISTORY\n" " alternativní umístění pro soubor s historií příkazů\n" -#: help.c:498 +#: help.c:504 #, c-format msgid "" " PSQL_PAGER, PAGER\n" @@ -3771,7 +3922,7 @@ msgstr "" " PSQL_PAGER, PAGER\n" " jméno externího stránkovacího programu (pageru)\n" -#: help.c:500 +#: help.c:506 #, c-format msgid "" " PSQLRC\n" @@ -3780,7 +3931,7 @@ msgstr "" " PSQLRC\n" " alternativní umístění uživatelova .psqlrc souboru\n" -#: help.c:502 +#: help.c:508 #, c-format msgid "" " SHELL\n" @@ -3789,7 +3940,7 @@ msgstr "" " SHELL\n" " shell používaný \\! příkazem\n" -#: help.c:504 +#: help.c:510 #, c-format msgid "" " TMPDIR\n" @@ -3798,18 +3949,12 @@ msgstr "" " TMPDIR\n" " adresář pro dočasné soubory\n" -#: help.c:548 +#: help.c:554 msgid "Available help:\n" msgstr "Dostupná nápověda:\n" -#: help.c:636 +#: help.c:642 #, c-format -#| msgid "" -#| "Command: %s\n" -#| "Description: %s\n" -#| "Syntax:\n" -#| "%s\n" -#| "\n" msgid "" "Command: %s\n" "Description: %s\n" @@ -3827,7 +3972,7 @@ msgstr "" "URL: %s\n" "\n" -#: help.c:655 +#: help.c:661 #, c-format msgid "" "No help available for \"%s\".\n" @@ -3836,17 +3981,17 @@ msgstr "" "Nápověda pro \"%s\" je nedostupná.\n" "Pomocí \\h bez parametrů lze získat seznam dostupných nápověd.\n" -#: input.c:218 +#: input.c:217 #, c-format msgid "could not read from input file: %m" msgstr "nelze číst vstupní soubor: %m" -#: input.c:472 input.c:510 +#: input.c:471 input.c:509 #, c-format msgid "could not save history to file \"%s\": %m" msgstr "nelze uložit historii do souboru \"%s\": %m" -#: input.c:529 +#: input.c:528 #, c-format msgid "history is not supported by this installation" msgstr "historie není podporována pro tuto instalaci" @@ -3879,12 +4024,12 @@ msgstr "Velké objekty (LO)" msgid "\\if: escaped" msgstr "\\if: escapované" -#: mainloop.c:183 +#: mainloop.c:195 #, c-format msgid "Use \"\\q\" to leave %s.\n" msgstr "Použijte \"\\q\" pro odchod z %s.\n" -#: mainloop.c:205 +#: mainloop.c:217 msgid "" "The input is a PostgreSQL custom-format dump.\n" "Use the pg_restore command-line client to restore this dump to a database.\n" @@ -3892,19 +4037,19 @@ msgstr "" "Na vstupu je dump v PostgreSQL \"custom\" formátu.\n" "Pro obnovení této zálohy použijte klienta pg_restore pro příkazovou řádku.\n" -#: mainloop.c:282 +#: mainloop.c:298 msgid "Use \\? for help or press control-C to clear the input buffer." msgstr "Použijte \\? pro nápovědu nebo stiskněte control-C pro vymazání vstupního bufferu." -#: mainloop.c:284 +#: mainloop.c:300 msgid "Use \\? for help." msgstr "Pro zobrazení nápovědy použijte \"\\?\"." -#: mainloop.c:288 +#: mainloop.c:304 msgid "You are using psql, the command-line interface to PostgreSQL." msgstr "Používáte psql, řádkový nástroj pro připojení k PostgreSQL." -#: mainloop.c:289 +#: mainloop.c:305 #, c-format msgid "" "Type: \\copyright for distribution terms\n" @@ -3919,24 +4064,24 @@ msgstr "" " \\g nebo středník pro ukončení SQL příkazů\n" " \\q pro ukončení programu\n" -#: mainloop.c:313 +#: mainloop.c:329 msgid "Use \\q to quit." msgstr "Použijte \\q pro ukončení." -#: mainloop.c:316 mainloop.c:340 +#: mainloop.c:332 mainloop.c:356 msgid "Use control-D to quit." msgstr "Použijte control-D pro ukončení." -#: mainloop.c:318 mainloop.c:342 +#: mainloop.c:334 mainloop.c:358 msgid "Use control-C to quit." msgstr "Použijte control-C pro ukončení." -#: mainloop.c:449 mainloop.c:591 +#: mainloop.c:465 mainloop.c:613 #, c-format msgid "query ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "dotaz ignorován; použijte \\endif nebo Ctrl-C pro ukončení aktuálního \\if bloku" -#: mainloop.c:609 +#: mainloop.c:631 #, c-format msgid "reached EOF without finding closing \\endif(s)" msgstr "dosažen EOF bez nalezení ukončujícího \\endif(s)" @@ -3972,48 +4117,48 @@ msgstr "%s: nedostatek paměti" #: sql_help.c:985 sql_help.c:990 sql_help.c:995 sql_help.c:1014 sql_help.c:1025 #: sql_help.c:1027 sql_help.c:1046 sql_help.c:1056 sql_help.c:1058 #: sql_help.c:1060 sql_help.c:1072 sql_help.c:1076 sql_help.c:1078 -#: sql_help.c:1089 sql_help.c:1091 sql_help.c:1093 sql_help.c:1109 -#: sql_help.c:1111 sql_help.c:1115 sql_help.c:1118 sql_help.c:1119 -#: sql_help.c:1120 sql_help.c:1123 sql_help.c:1125 sql_help.c:1258 -#: sql_help.c:1260 sql_help.c:1263 sql_help.c:1266 sql_help.c:1268 -#: sql_help.c:1270 sql_help.c:1273 sql_help.c:1276 sql_help.c:1386 -#: sql_help.c:1388 sql_help.c:1390 sql_help.c:1393 sql_help.c:1414 -#: sql_help.c:1417 sql_help.c:1420 sql_help.c:1423 sql_help.c:1427 -#: sql_help.c:1429 sql_help.c:1431 sql_help.c:1433 sql_help.c:1447 -#: sql_help.c:1450 sql_help.c:1452 sql_help.c:1454 sql_help.c:1464 -#: sql_help.c:1466 sql_help.c:1476 sql_help.c:1478 sql_help.c:1488 -#: sql_help.c:1491 sql_help.c:1513 sql_help.c:1515 sql_help.c:1517 -#: sql_help.c:1520 sql_help.c:1522 sql_help.c:1524 sql_help.c:1527 -#: sql_help.c:1577 sql_help.c:1619 sql_help.c:1622 sql_help.c:1624 -#: sql_help.c:1626 sql_help.c:1628 sql_help.c:1630 sql_help.c:1633 -#: sql_help.c:1683 sql_help.c:1699 sql_help.c:1920 sql_help.c:1989 -#: sql_help.c:2008 sql_help.c:2021 sql_help.c:2078 sql_help.c:2085 -#: sql_help.c:2095 sql_help.c:2115 sql_help.c:2140 sql_help.c:2158 -#: sql_help.c:2187 sql_help.c:2282 sql_help.c:2324 sql_help.c:2347 -#: sql_help.c:2368 sql_help.c:2369 sql_help.c:2406 sql_help.c:2426 -#: sql_help.c:2448 sql_help.c:2462 sql_help.c:2482 sql_help.c:2505 -#: sql_help.c:2535 sql_help.c:2560 sql_help.c:2606 sql_help.c:2884 -#: sql_help.c:2897 sql_help.c:2914 sql_help.c:2930 sql_help.c:2970 -#: sql_help.c:3022 sql_help.c:3026 sql_help.c:3028 sql_help.c:3034 -#: sql_help.c:3052 sql_help.c:3079 sql_help.c:3114 sql_help.c:3126 -#: sql_help.c:3135 sql_help.c:3179 sql_help.c:3193 sql_help.c:3221 -#: sql_help.c:3229 sql_help.c:3237 sql_help.c:3245 sql_help.c:3253 -#: sql_help.c:3261 sql_help.c:3269 sql_help.c:3277 sql_help.c:3286 -#: sql_help.c:3297 sql_help.c:3305 sql_help.c:3313 sql_help.c:3321 -#: sql_help.c:3329 sql_help.c:3339 sql_help.c:3348 sql_help.c:3357 -#: sql_help.c:3365 sql_help.c:3375 sql_help.c:3386 sql_help.c:3394 -#: sql_help.c:3403 sql_help.c:3414 sql_help.c:3423 sql_help.c:3431 -#: sql_help.c:3439 sql_help.c:3447 sql_help.c:3455 sql_help.c:3463 -#: sql_help.c:3471 sql_help.c:3479 sql_help.c:3487 sql_help.c:3495 -#: sql_help.c:3503 sql_help.c:3520 sql_help.c:3529 sql_help.c:3537 -#: sql_help.c:3554 sql_help.c:3569 sql_help.c:3839 sql_help.c:3890 -#: sql_help.c:3919 sql_help.c:3927 sql_help.c:4360 sql_help.c:4408 -#: sql_help.c:4549 +#: sql_help.c:1090 sql_help.c:1092 sql_help.c:1094 sql_help.c:1096 +#: sql_help.c:1112 sql_help.c:1114 sql_help.c:1118 sql_help.c:1121 +#: sql_help.c:1122 sql_help.c:1123 sql_help.c:1126 sql_help.c:1128 +#: sql_help.c:1262 sql_help.c:1264 sql_help.c:1267 sql_help.c:1270 +#: sql_help.c:1272 sql_help.c:1274 sql_help.c:1277 sql_help.c:1280 +#: sql_help.c:1391 sql_help.c:1393 sql_help.c:1395 sql_help.c:1398 +#: sql_help.c:1419 sql_help.c:1422 sql_help.c:1425 sql_help.c:1428 +#: sql_help.c:1432 sql_help.c:1434 sql_help.c:1436 sql_help.c:1438 +#: sql_help.c:1452 sql_help.c:1455 sql_help.c:1457 sql_help.c:1459 +#: sql_help.c:1469 sql_help.c:1471 sql_help.c:1481 sql_help.c:1483 +#: sql_help.c:1493 sql_help.c:1496 sql_help.c:1519 sql_help.c:1521 +#: sql_help.c:1523 sql_help.c:1525 sql_help.c:1528 sql_help.c:1530 +#: sql_help.c:1533 sql_help.c:1536 sql_help.c:1586 sql_help.c:1629 +#: sql_help.c:1632 sql_help.c:1634 sql_help.c:1636 sql_help.c:1639 +#: sql_help.c:1641 sql_help.c:1643 sql_help.c:1646 sql_help.c:1696 +#: sql_help.c:1712 sql_help.c:1933 sql_help.c:2002 sql_help.c:2021 +#: sql_help.c:2034 sql_help.c:2091 sql_help.c:2098 sql_help.c:2108 +#: sql_help.c:2129 sql_help.c:2155 sql_help.c:2173 sql_help.c:2200 +#: sql_help.c:2295 sql_help.c:2340 sql_help.c:2364 sql_help.c:2387 +#: sql_help.c:2391 sql_help.c:2425 sql_help.c:2445 sql_help.c:2467 +#: sql_help.c:2481 sql_help.c:2501 sql_help.c:2524 sql_help.c:2554 +#: sql_help.c:2579 sql_help.c:2625 sql_help.c:2903 sql_help.c:2916 +#: sql_help.c:2933 sql_help.c:2949 sql_help.c:2989 sql_help.c:3041 +#: sql_help.c:3045 sql_help.c:3047 sql_help.c:3053 sql_help.c:3071 +#: sql_help.c:3098 sql_help.c:3133 sql_help.c:3145 sql_help.c:3154 +#: sql_help.c:3198 sql_help.c:3212 sql_help.c:3240 sql_help.c:3248 +#: sql_help.c:3260 sql_help.c:3270 sql_help.c:3278 sql_help.c:3286 +#: sql_help.c:3294 sql_help.c:3302 sql_help.c:3311 sql_help.c:3322 +#: sql_help.c:3330 sql_help.c:3338 sql_help.c:3346 sql_help.c:3354 +#: sql_help.c:3364 sql_help.c:3373 sql_help.c:3382 sql_help.c:3390 +#: sql_help.c:3400 sql_help.c:3411 sql_help.c:3419 sql_help.c:3428 +#: sql_help.c:3439 sql_help.c:3448 sql_help.c:3456 sql_help.c:3464 +#: sql_help.c:3472 sql_help.c:3480 sql_help.c:3488 sql_help.c:3496 +#: sql_help.c:3504 sql_help.c:3512 sql_help.c:3520 sql_help.c:3528 +#: sql_help.c:3545 sql_help.c:3554 sql_help.c:3562 sql_help.c:3579 +#: sql_help.c:3594 sql_help.c:3869 sql_help.c:3920 sql_help.c:3949 +#: sql_help.c:3962 sql_help.c:4407 sql_help.c:4455 sql_help.c:4596 msgid "name" msgstr "jméno" -#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1770 -#: sql_help.c:3194 sql_help.c:4146 +#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1783 +#: sql_help.c:3213 sql_help.c:4193 msgid "aggregate_signature" msgstr "aggregate_signature" @@ -4022,9 +4167,9 @@ msgstr "aggregate_signature" #: sql_help.c:589 sql_help.c:616 sql_help.c:666 sql_help.c:731 sql_help.c:786 #: sql_help.c:807 sql_help.c:846 sql_help.c:891 sql_help.c:932 sql_help.c:984 #: sql_help.c:1016 sql_help.c:1026 sql_help.c:1059 sql_help.c:1079 -#: sql_help.c:1092 sql_help.c:1126 sql_help.c:1267 sql_help.c:1387 -#: sql_help.c:1430 sql_help.c:1451 sql_help.c:1465 sql_help.c:1477 -#: sql_help.c:1490 sql_help.c:1521 sql_help.c:1578 sql_help.c:1627 +#: sql_help.c:1093 sql_help.c:1129 sql_help.c:1271 sql_help.c:1392 +#: sql_help.c:1435 sql_help.c:1456 sql_help.c:1470 sql_help.c:1482 +#: sql_help.c:1495 sql_help.c:1522 sql_help.c:1587 sql_help.c:1640 msgid "new_name" msgstr "nové_jméno" @@ -4032,21 +4177,21 @@ msgstr "nové_jméno" #: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:618 #: sql_help.c:627 sql_help.c:685 sql_help.c:705 sql_help.c:734 sql_help.c:789 #: sql_help.c:851 sql_help.c:889 sql_help.c:989 sql_help.c:1028 sql_help.c:1057 -#: sql_help.c:1077 sql_help.c:1090 sql_help.c:1124 sql_help.c:1327 -#: sql_help.c:1389 sql_help.c:1432 sql_help.c:1453 sql_help.c:1516 -#: sql_help.c:1625 sql_help.c:2870 +#: sql_help.c:1077 sql_help.c:1091 sql_help.c:1127 sql_help.c:1332 +#: sql_help.c:1394 sql_help.c:1437 sql_help.c:1458 sql_help.c:1520 +#: sql_help.c:1635 sql_help.c:2889 msgid "new_owner" msgstr "nový_vlastník" #: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:252 sql_help.c:319 #: sql_help.c:448 sql_help.c:534 sql_help.c:668 sql_help.c:709 sql_help.c:737 -#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1094 -#: sql_help.c:1269 sql_help.c:1434 sql_help.c:1455 sql_help.c:1467 -#: sql_help.c:1479 sql_help.c:1523 sql_help.c:1629 +#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1095 +#: sql_help.c:1273 sql_help.c:1439 sql_help.c:1460 sql_help.c:1472 +#: sql_help.c:1484 sql_help.c:1524 sql_help.c:1642 msgid "new_schema" msgstr "nové_schéma" -#: sql_help.c:44 sql_help.c:1834 sql_help.c:3195 sql_help.c:4175 +#: sql_help.c:44 sql_help.c:1847 sql_help.c:3214 sql_help.c:4222 msgid "where aggregate_signature is:" msgstr "kde aggregate_signature je:" @@ -4054,13 +4199,13 @@ msgstr "kde aggregate_signature je:" #: sql_help.c:354 sql_help.c:370 sql_help.c:373 sql_help.c:376 sql_help.c:516 #: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:838 #: sql_help.c:843 sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:976 -#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1788 -#: sql_help.c:1805 sql_help.c:1811 sql_help.c:1835 sql_help.c:1838 -#: sql_help.c:1841 sql_help.c:1990 sql_help.c:2009 sql_help.c:2012 -#: sql_help.c:2283 sql_help.c:2483 sql_help.c:3196 sql_help.c:3199 -#: sql_help.c:3202 sql_help.c:3287 sql_help.c:3376 sql_help.c:3404 -#: sql_help.c:3724 sql_help.c:4057 sql_help.c:4152 sql_help.c:4159 -#: sql_help.c:4165 sql_help.c:4176 sql_help.c:4179 sql_help.c:4182 +#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1801 +#: sql_help.c:1818 sql_help.c:1824 sql_help.c:1848 sql_help.c:1851 +#: sql_help.c:1854 sql_help.c:2003 sql_help.c:2022 sql_help.c:2025 +#: sql_help.c:2296 sql_help.c:2502 sql_help.c:3215 sql_help.c:3218 +#: sql_help.c:3221 sql_help.c:3312 sql_help.c:3401 sql_help.c:3429 +#: sql_help.c:3753 sql_help.c:4101 sql_help.c:4199 sql_help.c:4206 +#: sql_help.c:4212 sql_help.c:4223 sql_help.c:4226 sql_help.c:4229 msgid "argmode" msgstr "mód_argumentu" @@ -4068,13 +4213,13 @@ msgstr "mód_argumentu" #: sql_help.c:355 sql_help.c:371 sql_help.c:374 sql_help.c:377 sql_help.c:517 #: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:839 #: sql_help.c:844 sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:977 -#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1789 -#: sql_help.c:1806 sql_help.c:1812 sql_help.c:1836 sql_help.c:1839 -#: sql_help.c:1842 sql_help.c:1991 sql_help.c:2010 sql_help.c:2013 -#: sql_help.c:2284 sql_help.c:2484 sql_help.c:3197 sql_help.c:3200 -#: sql_help.c:3203 sql_help.c:3288 sql_help.c:3377 sql_help.c:3405 -#: sql_help.c:4153 sql_help.c:4160 sql_help.c:4166 sql_help.c:4177 -#: sql_help.c:4180 sql_help.c:4183 +#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1802 +#: sql_help.c:1819 sql_help.c:1825 sql_help.c:1849 sql_help.c:1852 +#: sql_help.c:1855 sql_help.c:2004 sql_help.c:2023 sql_help.c:2026 +#: sql_help.c:2297 sql_help.c:2503 sql_help.c:3216 sql_help.c:3219 +#: sql_help.c:3222 sql_help.c:3313 sql_help.c:3402 sql_help.c:3430 +#: sql_help.c:4200 sql_help.c:4207 sql_help.c:4213 sql_help.c:4224 +#: sql_help.c:4227 sql_help.c:4230 msgid "argname" msgstr "jméno_argumentu" @@ -4082,67 +4227,69 @@ msgstr "jméno_argumentu" #: sql_help.c:356 sql_help.c:372 sql_help.c:375 sql_help.c:378 sql_help.c:518 #: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:840 #: sql_help.c:845 sql_help.c:850 sql_help.c:855 sql_help.c:860 sql_help.c:978 -#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1790 -#: sql_help.c:1807 sql_help.c:1813 sql_help.c:1837 sql_help.c:1840 -#: sql_help.c:1843 sql_help.c:2285 sql_help.c:2485 sql_help.c:3198 -#: sql_help.c:3201 sql_help.c:3204 sql_help.c:3289 sql_help.c:3378 -#: sql_help.c:3406 sql_help.c:4154 sql_help.c:4161 sql_help.c:4167 -#: sql_help.c:4178 sql_help.c:4181 sql_help.c:4184 +#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1803 +#: sql_help.c:1820 sql_help.c:1826 sql_help.c:1850 sql_help.c:1853 +#: sql_help.c:1856 sql_help.c:2298 sql_help.c:2504 sql_help.c:3217 +#: sql_help.c:3220 sql_help.c:3223 sql_help.c:3314 sql_help.c:3403 +#: sql_help.c:3431 sql_help.c:4201 sql_help.c:4208 sql_help.c:4214 +#: sql_help.c:4225 sql_help.c:4228 sql_help.c:4231 msgid "argtype" msgstr "typ_argumentu" #: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:926 -#: sql_help.c:1074 sql_help.c:1448 sql_help.c:1572 sql_help.c:1604 -#: sql_help.c:1652 sql_help.c:1891 sql_help.c:1898 sql_help.c:2190 -#: sql_help.c:2232 sql_help.c:2239 sql_help.c:2248 sql_help.c:2325 -#: sql_help.c:2536 sql_help.c:2628 sql_help.c:2899 sql_help.c:3080 -#: sql_help.c:3102 sql_help.c:3590 sql_help.c:3758 sql_help.c:4610 +#: sql_help.c:1074 sql_help.c:1453 sql_help.c:1581 sql_help.c:1613 +#: sql_help.c:1665 sql_help.c:1904 sql_help.c:1911 sql_help.c:2203 +#: sql_help.c:2245 sql_help.c:2252 sql_help.c:2261 sql_help.c:2341 +#: sql_help.c:2555 sql_help.c:2647 sql_help.c:2918 sql_help.c:3099 +#: sql_help.c:3121 sql_help.c:3261 sql_help.c:3616 sql_help.c:3788 +#: sql_help.c:3961 sql_help.c:4658 msgid "option" msgstr "volba" -#: sql_help.c:113 sql_help.c:927 sql_help.c:1573 sql_help.c:2326 -#: sql_help.c:2537 sql_help.c:3081 +#: sql_help.c:113 sql_help.c:927 sql_help.c:1582 sql_help.c:2342 +#: sql_help.c:2556 sql_help.c:3100 sql_help.c:3262 msgid "where option can be:" msgstr "kde volba může být:" -#: sql_help.c:114 sql_help.c:2122 +#: sql_help.c:114 sql_help.c:2137 msgid "allowconn" msgstr "allowconn" -#: sql_help.c:115 sql_help.c:928 sql_help.c:1574 sql_help.c:2123 -#: sql_help.c:2538 sql_help.c:3082 +#: sql_help.c:115 sql_help.c:928 sql_help.c:1583 sql_help.c:2138 +#: sql_help.c:2343 sql_help.c:2557 sql_help.c:3101 msgid "connlimit" msgstr "connlimit" -#: sql_help.c:116 sql_help.c:2124 +#: sql_help.c:116 sql_help.c:2139 msgid "istemplate" msgstr "istemplate" -#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1272 sql_help.c:1320 +#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1276 sql_help.c:1325 msgid "new_tablespace" msgstr "nový_tablespace" #: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:544 sql_help.c:546 #: sql_help.c:547 sql_help.c:863 sql_help.c:865 sql_help.c:866 sql_help.c:935 #: sql_help.c:939 sql_help.c:942 sql_help.c:1003 sql_help.c:1005 -#: sql_help.c:1006 sql_help.c:1137 sql_help.c:1140 sql_help.c:1581 -#: sql_help.c:1585 sql_help.c:1588 sql_help.c:2295 sql_help.c:2489 -#: sql_help.c:3944 sql_help.c:4349 +#: sql_help.c:1006 sql_help.c:1140 sql_help.c:1143 sql_help.c:1590 +#: sql_help.c:1594 sql_help.c:1597 sql_help.c:2308 sql_help.c:2508 +#: sql_help.c:3980 sql_help.c:4396 msgid "configuration_parameter" msgstr "konfigurační_parametr" #: sql_help.c:125 sql_help.c:395 sql_help.c:466 sql_help.c:472 sql_help.c:484 #: sql_help.c:545 sql_help.c:598 sql_help.c:677 sql_help.c:683 sql_help.c:864 #: sql_help.c:887 sql_help.c:936 sql_help.c:1004 sql_help.c:1075 -#: sql_help.c:1114 sql_help.c:1117 sql_help.c:1122 sql_help.c:1138 -#: sql_help.c:1139 sql_help.c:1302 sql_help.c:1322 sql_help.c:1370 -#: sql_help.c:1392 sql_help.c:1449 sql_help.c:1582 sql_help.c:1605 -#: sql_help.c:2191 sql_help.c:2233 sql_help.c:2240 sql_help.c:2249 -#: sql_help.c:2296 sql_help.c:2297 sql_help.c:2356 sql_help.c:2390 -#: sql_help.c:2490 sql_help.c:2491 sql_help.c:2508 sql_help.c:2629 -#: sql_help.c:2659 sql_help.c:2764 sql_help.c:2777 sql_help.c:2791 -#: sql_help.c:2832 sql_help.c:2856 sql_help.c:2873 sql_help.c:2900 -#: sql_help.c:3103 sql_help.c:3759 sql_help.c:4350 sql_help.c:4351 +#: sql_help.c:1117 sql_help.c:1120 sql_help.c:1125 sql_help.c:1141 +#: sql_help.c:1142 sql_help.c:1307 sql_help.c:1327 sql_help.c:1375 +#: sql_help.c:1397 sql_help.c:1454 sql_help.c:1538 sql_help.c:1591 +#: sql_help.c:1614 sql_help.c:2204 sql_help.c:2246 sql_help.c:2253 +#: sql_help.c:2262 sql_help.c:2309 sql_help.c:2310 sql_help.c:2372 +#: sql_help.c:2375 sql_help.c:2409 sql_help.c:2509 sql_help.c:2510 +#: sql_help.c:2527 sql_help.c:2648 sql_help.c:2678 sql_help.c:2783 +#: sql_help.c:2796 sql_help.c:2810 sql_help.c:2851 sql_help.c:2875 +#: sql_help.c:2892 sql_help.c:2919 sql_help.c:3122 sql_help.c:3789 +#: sql_help.c:4397 sql_help.c:4398 msgid "value" msgstr "hodnota" @@ -4150,9 +4297,9 @@ msgstr "hodnota" msgid "target_role" msgstr "cílová_role" -#: sql_help.c:198 sql_help.c:2174 sql_help.c:2584 sql_help.c:2589 -#: sql_help.c:3706 sql_help.c:3713 sql_help.c:3727 sql_help.c:3733 -#: sql_help.c:4039 sql_help.c:4046 sql_help.c:4060 sql_help.c:4066 +#: sql_help.c:198 sql_help.c:2188 sql_help.c:2603 sql_help.c:2608 +#: sql_help.c:3735 sql_help.c:3742 sql_help.c:3756 sql_help.c:3762 +#: sql_help.c:4083 sql_help.c:4090 sql_help.c:4104 sql_help.c:4110 msgid "schema_name" msgstr "jméno_schématu" @@ -4167,33 +4314,29 @@ msgstr "kde zkrácený_grant_nebo_revoke je jedno z:" #: sql_help.c:201 sql_help.c:202 sql_help.c:203 sql_help.c:204 sql_help.c:205 #: sql_help.c:206 sql_help.c:207 sql_help.c:208 sql_help.c:209 sql_help.c:210 #: sql_help.c:569 sql_help.c:605 sql_help.c:670 sql_help.c:810 sql_help.c:946 -#: sql_help.c:1271 sql_help.c:1592 sql_help.c:2329 sql_help.c:2330 -#: sql_help.c:2331 sql_help.c:2332 sql_help.c:2333 sql_help.c:2464 -#: sql_help.c:2541 sql_help.c:2542 sql_help.c:2543 sql_help.c:2544 -#: sql_help.c:2545 sql_help.c:3085 sql_help.c:3086 sql_help.c:3087 -#: sql_help.c:3088 sql_help.c:3089 sql_help.c:3740 sql_help.c:3741 -#: sql_help.c:3742 sql_help.c:4040 sql_help.c:4044 sql_help.c:4047 -#: sql_help.c:4049 sql_help.c:4051 sql_help.c:4053 sql_help.c:4055 -#: sql_help.c:4061 sql_help.c:4063 sql_help.c:4065 sql_help.c:4067 -#: sql_help.c:4069 sql_help.c:4071 sql_help.c:4072 sql_help.c:4073 -#: sql_help.c:4370 +#: sql_help.c:1275 sql_help.c:1601 sql_help.c:2346 sql_help.c:2347 +#: sql_help.c:2348 sql_help.c:2349 sql_help.c:2350 sql_help.c:2483 +#: sql_help.c:2560 sql_help.c:2561 sql_help.c:2562 sql_help.c:2563 +#: sql_help.c:2564 sql_help.c:3104 sql_help.c:3105 sql_help.c:3106 +#: sql_help.c:3107 sql_help.c:3108 sql_help.c:3768 sql_help.c:3772 +#: sql_help.c:4116 sql_help.c:4120 sql_help.c:4417 msgid "role_name" msgstr "jméno_role" -#: sql_help.c:236 sql_help.c:459 sql_help.c:1287 sql_help.c:1289 -#: sql_help.c:1337 sql_help.c:1349 sql_help.c:1374 sql_help.c:1621 -#: sql_help.c:2143 sql_help.c:2147 sql_help.c:2252 sql_help.c:2257 -#: sql_help.c:2351 sql_help.c:2759 sql_help.c:2772 sql_help.c:2786 -#: sql_help.c:2795 sql_help.c:2807 sql_help.c:2836 sql_help.c:3790 -#: sql_help.c:3805 sql_help.c:3807 sql_help.c:4235 sql_help.c:4236 -#: sql_help.c:4245 sql_help.c:4286 sql_help.c:4287 sql_help.c:4288 -#: sql_help.c:4289 sql_help.c:4290 sql_help.c:4291 sql_help.c:4324 -#: sql_help.c:4325 sql_help.c:4330 sql_help.c:4335 sql_help.c:4474 -#: sql_help.c:4475 sql_help.c:4484 sql_help.c:4525 sql_help.c:4526 -#: sql_help.c:4527 sql_help.c:4528 sql_help.c:4529 sql_help.c:4530 -#: sql_help.c:4577 sql_help.c:4579 sql_help.c:4636 sql_help.c:4692 -#: sql_help.c:4693 sql_help.c:4702 sql_help.c:4743 sql_help.c:4744 -#: sql_help.c:4745 sql_help.c:4746 sql_help.c:4747 sql_help.c:4748 +#: sql_help.c:236 sql_help.c:459 sql_help.c:1291 sql_help.c:1293 +#: sql_help.c:1342 sql_help.c:1354 sql_help.c:1379 sql_help.c:1631 +#: sql_help.c:2158 sql_help.c:2162 sql_help.c:2265 sql_help.c:2270 +#: sql_help.c:2368 sql_help.c:2778 sql_help.c:2791 sql_help.c:2805 +#: sql_help.c:2814 sql_help.c:2826 sql_help.c:2855 sql_help.c:3820 +#: sql_help.c:3835 sql_help.c:3837 sql_help.c:4282 sql_help.c:4283 +#: sql_help.c:4292 sql_help.c:4333 sql_help.c:4334 sql_help.c:4335 +#: sql_help.c:4336 sql_help.c:4337 sql_help.c:4338 sql_help.c:4371 +#: sql_help.c:4372 sql_help.c:4377 sql_help.c:4382 sql_help.c:4521 +#: sql_help.c:4522 sql_help.c:4531 sql_help.c:4572 sql_help.c:4573 +#: sql_help.c:4574 sql_help.c:4575 sql_help.c:4576 sql_help.c:4577 +#: sql_help.c:4624 sql_help.c:4626 sql_help.c:4685 sql_help.c:4741 +#: sql_help.c:4742 sql_help.c:4751 sql_help.c:4792 sql_help.c:4793 +#: sql_help.c:4794 sql_help.c:4795 sql_help.c:4796 sql_help.c:4797 msgid "expression" msgstr "výraz" @@ -4202,14 +4345,14 @@ msgid "domain_constraint" msgstr "omezení_domény" #: sql_help.c:241 sql_help.c:243 sql_help.c:246 sql_help.c:474 sql_help.c:475 -#: sql_help.c:1264 sql_help.c:1308 sql_help.c:1309 sql_help.c:1310 -#: sql_help.c:1336 sql_help.c:1348 sql_help.c:1365 sql_help.c:1776 -#: sql_help.c:1778 sql_help.c:2146 sql_help.c:2251 sql_help.c:2256 -#: sql_help.c:2794 sql_help.c:2806 sql_help.c:3802 +#: sql_help.c:1268 sql_help.c:1313 sql_help.c:1314 sql_help.c:1315 +#: sql_help.c:1341 sql_help.c:1353 sql_help.c:1370 sql_help.c:1789 +#: sql_help.c:1791 sql_help.c:2161 sql_help.c:2264 sql_help.c:2269 +#: sql_help.c:2813 sql_help.c:2825 sql_help.c:3832 msgid "constraint_name" msgstr "jméno_omezení" -#: sql_help.c:244 sql_help.c:1265 +#: sql_help.c:244 sql_help.c:1269 msgid "new_constraint_name" msgstr "jméno_nového_omezení" @@ -4229,82 +4372,82 @@ msgstr "kde členský_objekt je:" #: sql_help.c:334 sql_help.c:335 sql_help.c:340 sql_help.c:344 sql_help.c:346 #: sql_help.c:348 sql_help.c:357 sql_help.c:358 sql_help.c:359 sql_help.c:360 #: sql_help.c:361 sql_help.c:362 sql_help.c:363 sql_help.c:364 sql_help.c:367 -#: sql_help.c:368 sql_help.c:1768 sql_help.c:1773 sql_help.c:1780 -#: sql_help.c:1781 sql_help.c:1782 sql_help.c:1783 sql_help.c:1784 -#: sql_help.c:1785 sql_help.c:1786 sql_help.c:1791 sql_help.c:1793 -#: sql_help.c:1797 sql_help.c:1799 sql_help.c:1803 sql_help.c:1808 -#: sql_help.c:1809 sql_help.c:1816 sql_help.c:1817 sql_help.c:1818 -#: sql_help.c:1819 sql_help.c:1820 sql_help.c:1821 sql_help.c:1822 -#: sql_help.c:1823 sql_help.c:1824 sql_help.c:1825 sql_help.c:1826 -#: sql_help.c:1831 sql_help.c:1832 sql_help.c:4142 sql_help.c:4147 -#: sql_help.c:4148 sql_help.c:4149 sql_help.c:4150 sql_help.c:4156 -#: sql_help.c:4157 sql_help.c:4162 sql_help.c:4163 sql_help.c:4168 -#: sql_help.c:4169 sql_help.c:4170 sql_help.c:4171 sql_help.c:4172 -#: sql_help.c:4173 +#: sql_help.c:368 sql_help.c:1781 sql_help.c:1786 sql_help.c:1793 +#: sql_help.c:1794 sql_help.c:1795 sql_help.c:1796 sql_help.c:1797 +#: sql_help.c:1798 sql_help.c:1799 sql_help.c:1804 sql_help.c:1806 +#: sql_help.c:1810 sql_help.c:1812 sql_help.c:1816 sql_help.c:1821 +#: sql_help.c:1822 sql_help.c:1829 sql_help.c:1830 sql_help.c:1831 +#: sql_help.c:1832 sql_help.c:1833 sql_help.c:1834 sql_help.c:1835 +#: sql_help.c:1836 sql_help.c:1837 sql_help.c:1838 sql_help.c:1839 +#: sql_help.c:1844 sql_help.c:1845 sql_help.c:4189 sql_help.c:4194 +#: sql_help.c:4195 sql_help.c:4196 sql_help.c:4197 sql_help.c:4203 +#: sql_help.c:4204 sql_help.c:4209 sql_help.c:4210 sql_help.c:4215 +#: sql_help.c:4216 sql_help.c:4217 sql_help.c:4218 sql_help.c:4219 +#: sql_help.c:4220 msgid "object_name" msgstr "jméno_objektu" -#: sql_help.c:326 sql_help.c:1769 sql_help.c:4145 +#: sql_help.c:326 sql_help.c:1782 sql_help.c:4192 msgid "aggregate_name" msgstr "aggregate_name" -#: sql_help.c:328 sql_help.c:1771 sql_help.c:2055 sql_help.c:2059 -#: sql_help.c:2061 sql_help.c:3212 +#: sql_help.c:328 sql_help.c:1784 sql_help.c:2068 sql_help.c:2072 +#: sql_help.c:2074 sql_help.c:3231 msgid "source_type" msgstr "zdrojový_typ" -#: sql_help.c:329 sql_help.c:1772 sql_help.c:2056 sql_help.c:2060 -#: sql_help.c:2062 sql_help.c:3213 +#: sql_help.c:329 sql_help.c:1785 sql_help.c:2069 sql_help.c:2073 +#: sql_help.c:2075 sql_help.c:3232 msgid "target_type" msgstr "cílový_typ" -#: sql_help.c:336 sql_help.c:774 sql_help.c:1787 sql_help.c:2057 -#: sql_help.c:2098 sql_help.c:2161 sql_help.c:2407 sql_help.c:2438 -#: sql_help.c:2976 sql_help.c:4056 sql_help.c:4151 sql_help.c:4264 -#: sql_help.c:4268 sql_help.c:4272 sql_help.c:4275 sql_help.c:4503 -#: sql_help.c:4507 sql_help.c:4511 sql_help.c:4514 sql_help.c:4721 -#: sql_help.c:4725 sql_help.c:4729 sql_help.c:4732 +#: sql_help.c:336 sql_help.c:774 sql_help.c:1800 sql_help.c:2070 +#: sql_help.c:2111 sql_help.c:2176 sql_help.c:2426 sql_help.c:2457 +#: sql_help.c:2995 sql_help.c:4100 sql_help.c:4198 sql_help.c:4311 +#: sql_help.c:4315 sql_help.c:4319 sql_help.c:4322 sql_help.c:4550 +#: sql_help.c:4554 sql_help.c:4558 sql_help.c:4561 sql_help.c:4770 +#: sql_help.c:4774 sql_help.c:4778 sql_help.c:4781 msgid "function_name" msgstr "jméno_funkce" -#: sql_help.c:341 sql_help.c:767 sql_help.c:1794 sql_help.c:2431 +#: sql_help.c:341 sql_help.c:767 sql_help.c:1807 sql_help.c:2450 msgid "operator_name" msgstr "jméno_operátoru" -#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1795 -#: sql_help.c:2408 sql_help.c:3330 +#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1808 +#: sql_help.c:2427 sql_help.c:3355 msgid "left_type" msgstr "levý_typ" -#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1796 -#: sql_help.c:2409 sql_help.c:3331 +#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1809 +#: sql_help.c:2428 sql_help.c:3356 msgid "right_type" msgstr "pravý_typ" #: sql_help.c:345 sql_help.c:347 sql_help.c:730 sql_help.c:733 sql_help.c:736 #: sql_help.c:765 sql_help.c:777 sql_help.c:785 sql_help.c:788 sql_help.c:791 -#: sql_help.c:1354 sql_help.c:1798 sql_help.c:1800 sql_help.c:2428 -#: sql_help.c:2449 sql_help.c:2812 sql_help.c:3340 sql_help.c:3349 +#: sql_help.c:1359 sql_help.c:1811 sql_help.c:1813 sql_help.c:2447 +#: sql_help.c:2468 sql_help.c:2831 sql_help.c:3365 sql_help.c:3374 msgid "index_method" msgstr "metoda_indexování" -#: sql_help.c:349 sql_help.c:1804 sql_help.c:4158 +#: sql_help.c:349 sql_help.c:1817 sql_help.c:4205 msgid "procedure_name" msgstr "procedure_name" -#: sql_help.c:353 sql_help.c:1810 sql_help.c:3723 sql_help.c:4164 +#: sql_help.c:353 sql_help.c:1823 sql_help.c:3752 sql_help.c:4211 msgid "routine_name" msgstr "routine_name" -#: sql_help.c:365 sql_help.c:1326 sql_help.c:1827 sql_help.c:2291 -#: sql_help.c:2488 sql_help.c:2767 sql_help.c:2943 sql_help.c:3511 -#: sql_help.c:3737 sql_help.c:4070 +#: sql_help.c:365 sql_help.c:1331 sql_help.c:1840 sql_help.c:2304 +#: sql_help.c:2507 sql_help.c:2786 sql_help.c:2962 sql_help.c:3536 +#: sql_help.c:3766 sql_help.c:4114 msgid "type_name" msgstr "jméno_typu" -#: sql_help.c:366 sql_help.c:1828 sql_help.c:2290 sql_help.c:2487 -#: sql_help.c:2944 sql_help.c:3170 sql_help.c:3512 sql_help.c:3729 -#: sql_help.c:4062 +#: sql_help.c:366 sql_help.c:1841 sql_help.c:2303 sql_help.c:2506 +#: sql_help.c:2963 sql_help.c:3189 sql_help.c:3537 sql_help.c:3758 +#: sql_help.c:4106 msgid "lang_name" msgstr "jméno_jazyka" @@ -4312,129 +4455,134 @@ msgstr "jméno_jazyka" msgid "and aggregate_signature is:" msgstr "a aggregate_signature je:" -#: sql_help.c:392 sql_help.c:1922 sql_help.c:2188 +#: sql_help.c:392 sql_help.c:1935 sql_help.c:2201 msgid "handler_function" msgstr "handler_function" -#: sql_help.c:393 sql_help.c:2189 +#: sql_help.c:393 sql_help.c:2202 msgid "validator_function" msgstr "validator_function" #: sql_help.c:441 sql_help.c:519 sql_help.c:659 sql_help.c:841 sql_help.c:979 -#: sql_help.c:1259 sql_help.c:1514 +#: sql_help.c:1263 sql_help.c:1529 msgid "action" msgstr "akce" #: sql_help.c:443 sql_help.c:450 sql_help.c:454 sql_help.c:455 sql_help.c:458 #: sql_help.c:460 sql_help.c:461 sql_help.c:462 sql_help.c:464 sql_help.c:467 #: sql_help.c:469 sql_help.c:470 sql_help.c:663 sql_help.c:673 sql_help.c:675 -#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1261 -#: sql_help.c:1279 sql_help.c:1283 sql_help.c:1284 sql_help.c:1288 -#: sql_help.c:1290 sql_help.c:1291 sql_help.c:1292 sql_help.c:1294 -#: sql_help.c:1297 sql_help.c:1298 sql_help.c:1300 sql_help.c:1303 -#: sql_help.c:1305 sql_help.c:1350 sql_help.c:1352 sql_help.c:1359 -#: sql_help.c:1368 sql_help.c:1373 sql_help.c:1620 sql_help.c:1623 -#: sql_help.c:1660 sql_help.c:1775 sql_help.c:1888 sql_help.c:1894 -#: sql_help.c:1907 sql_help.c:1908 sql_help.c:1909 sql_help.c:2230 -#: sql_help.c:2243 sql_help.c:2288 sql_help.c:2350 sql_help.c:2354 -#: sql_help.c:2387 sql_help.c:2614 sql_help.c:2642 sql_help.c:2643 -#: sql_help.c:2750 sql_help.c:2758 sql_help.c:2768 sql_help.c:2771 -#: sql_help.c:2781 sql_help.c:2785 sql_help.c:2808 sql_help.c:2810 -#: sql_help.c:2817 sql_help.c:2830 sql_help.c:2835 sql_help.c:2853 -#: sql_help.c:2979 sql_help.c:3115 sql_help.c:3708 sql_help.c:3709 -#: sql_help.c:3789 sql_help.c:3804 sql_help.c:3806 sql_help.c:3808 -#: sql_help.c:4041 sql_help.c:4042 sql_help.c:4144 sql_help.c:4295 -#: sql_help.c:4534 sql_help.c:4576 sql_help.c:4578 sql_help.c:4580 -#: sql_help.c:4624 sql_help.c:4752 +#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1265 +#: sql_help.c:1283 sql_help.c:1287 sql_help.c:1288 sql_help.c:1292 +#: sql_help.c:1294 sql_help.c:1295 sql_help.c:1296 sql_help.c:1297 +#: sql_help.c:1299 sql_help.c:1302 sql_help.c:1303 sql_help.c:1305 +#: sql_help.c:1308 sql_help.c:1310 sql_help.c:1355 sql_help.c:1357 +#: sql_help.c:1364 sql_help.c:1373 sql_help.c:1378 sql_help.c:1630 +#: sql_help.c:1633 sql_help.c:1637 sql_help.c:1673 sql_help.c:1788 +#: sql_help.c:1901 sql_help.c:1907 sql_help.c:1920 sql_help.c:1921 +#: sql_help.c:1922 sql_help.c:2243 sql_help.c:2256 sql_help.c:2301 +#: sql_help.c:2367 sql_help.c:2373 sql_help.c:2406 sql_help.c:2633 +#: sql_help.c:2661 sql_help.c:2662 sql_help.c:2769 sql_help.c:2777 +#: sql_help.c:2787 sql_help.c:2790 sql_help.c:2800 sql_help.c:2804 +#: sql_help.c:2827 sql_help.c:2829 sql_help.c:2836 sql_help.c:2849 +#: sql_help.c:2854 sql_help.c:2872 sql_help.c:2998 sql_help.c:3134 +#: sql_help.c:3737 sql_help.c:3738 sql_help.c:3819 sql_help.c:3834 +#: sql_help.c:3836 sql_help.c:3838 sql_help.c:4085 sql_help.c:4086 +#: sql_help.c:4191 sql_help.c:4342 sql_help.c:4581 sql_help.c:4623 +#: sql_help.c:4625 sql_help.c:4627 sql_help.c:4673 sql_help.c:4801 msgid "column_name" msgstr "jméno_sloupce" -#: sql_help.c:444 sql_help.c:664 sql_help.c:1262 +#: sql_help.c:444 sql_help.c:664 sql_help.c:1266 sql_help.c:1638 msgid "new_column_name" msgstr "nové_jméno_sloupce" #: sql_help.c:449 sql_help.c:540 sql_help.c:672 sql_help.c:862 sql_help.c:1000 -#: sql_help.c:1278 sql_help.c:1530 +#: sql_help.c:1282 sql_help.c:1539 msgid "where action is one of:" msgstr "kde akce je jedno z:" -#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1280 -#: sql_help.c:1285 sql_help.c:1532 sql_help.c:1536 sql_help.c:2141 -#: sql_help.c:2231 sql_help.c:2427 sql_help.c:2607 sql_help.c:2751 -#: sql_help.c:3024 sql_help.c:3891 +#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1284 +#: sql_help.c:1289 sql_help.c:1541 sql_help.c:1545 sql_help.c:2156 +#: sql_help.c:2244 sql_help.c:2446 sql_help.c:2626 sql_help.c:2770 +#: sql_help.c:3043 sql_help.c:3921 msgid "data_type" msgstr "datový_typ" -#: sql_help.c:452 sql_help.c:457 sql_help.c:1281 sql_help.c:1286 -#: sql_help.c:1533 sql_help.c:1537 sql_help.c:2142 sql_help.c:2234 -#: sql_help.c:2352 sql_help.c:2752 sql_help.c:2760 sql_help.c:2773 -#: sql_help.c:2787 sql_help.c:3025 sql_help.c:3031 sql_help.c:3799 +#: sql_help.c:452 sql_help.c:457 sql_help.c:1285 sql_help.c:1290 +#: sql_help.c:1542 sql_help.c:1546 sql_help.c:2157 sql_help.c:2247 +#: sql_help.c:2369 sql_help.c:2771 sql_help.c:2779 sql_help.c:2792 +#: sql_help.c:2806 sql_help.c:3044 sql_help.c:3050 sql_help.c:3829 msgid "collation" msgstr "collation" -#: sql_help.c:453 sql_help.c:1282 sql_help.c:2235 sql_help.c:2244 -#: sql_help.c:2753 sql_help.c:2769 sql_help.c:2782 +#: sql_help.c:453 sql_help.c:1286 sql_help.c:2248 sql_help.c:2257 +#: sql_help.c:2772 sql_help.c:2788 sql_help.c:2801 msgid "column_constraint" msgstr "omezení_sloupce" -#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1299 +#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1304 sql_help.c:4670 msgid "integer" msgstr "integer" -#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1301 -#: sql_help.c:1304 +#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1306 +#: sql_help.c:1309 msgid "attribute_option" msgstr "volba_atributu" -#: sql_help.c:473 sql_help.c:1306 sql_help.c:2236 sql_help.c:2245 -#: sql_help.c:2754 sql_help.c:2770 sql_help.c:2783 +#: sql_help.c:473 sql_help.c:1311 sql_help.c:2249 sql_help.c:2258 +#: sql_help.c:2773 sql_help.c:2789 sql_help.c:2802 msgid "table_constraint" msgstr "omezení_tabulky" -#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1311 -#: sql_help.c:1312 sql_help.c:1313 sql_help.c:1314 sql_help.c:1829 +#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1316 +#: sql_help.c:1317 sql_help.c:1318 sql_help.c:1319 sql_help.c:1842 msgid "trigger_name" msgstr "jméno_triggeru" -#: sql_help.c:480 sql_help.c:481 sql_help.c:1324 sql_help.c:1325 -#: sql_help.c:2237 sql_help.c:2242 sql_help.c:2757 sql_help.c:2780 +#: sql_help.c:480 sql_help.c:481 sql_help.c:1329 sql_help.c:1330 +#: sql_help.c:2250 sql_help.c:2255 sql_help.c:2776 sql_help.c:2799 msgid "parent_table" msgstr "nadřízená_tabulka" #: sql_help.c:539 sql_help.c:595 sql_help.c:661 sql_help.c:861 sql_help.c:999 -#: sql_help.c:1493 sql_help.c:2173 +#: sql_help.c:1498 sql_help.c:2187 msgid "extension_name" msgstr "název_extension" -#: sql_help.c:541 sql_help.c:1001 sql_help.c:2292 +#: sql_help.c:541 sql_help.c:1001 sql_help.c:2305 msgid "execution_cost" msgstr "execution_cost" -#: sql_help.c:542 sql_help.c:1002 sql_help.c:2293 +#: sql_help.c:542 sql_help.c:1002 sql_help.c:2306 msgid "result_rows" msgstr "výsledné_řádky" -#: sql_help.c:543 sql_help.c:2294 +#: sql_help.c:543 sql_help.c:2307 msgid "support_function" msgstr "support_funkce" #: sql_help.c:564 sql_help.c:566 sql_help.c:925 sql_help.c:933 sql_help.c:937 -#: sql_help.c:940 sql_help.c:943 sql_help.c:1571 sql_help.c:1579 -#: sql_help.c:1583 sql_help.c:1586 sql_help.c:1589 sql_help.c:2585 -#: sql_help.c:2587 sql_help.c:2590 sql_help.c:2591 sql_help.c:3707 -#: sql_help.c:3711 sql_help.c:3714 sql_help.c:3716 sql_help.c:3718 -#: sql_help.c:3720 sql_help.c:3722 sql_help.c:3728 sql_help.c:3730 -#: sql_help.c:3732 sql_help.c:3734 sql_help.c:3736 sql_help.c:3738 +#: sql_help.c:940 sql_help.c:943 sql_help.c:1580 sql_help.c:1588 +#: sql_help.c:1592 sql_help.c:1595 sql_help.c:1598 sql_help.c:2604 +#: sql_help.c:2606 sql_help.c:2609 sql_help.c:2610 sql_help.c:3736 +#: sql_help.c:3740 sql_help.c:3743 sql_help.c:3745 sql_help.c:3747 +#: sql_help.c:3749 sql_help.c:3751 sql_help.c:3757 sql_help.c:3759 +#: sql_help.c:3761 sql_help.c:3763 sql_help.c:3765 sql_help.c:3767 +#: sql_help.c:3769 sql_help.c:3770 sql_help.c:4084 sql_help.c:4088 +#: sql_help.c:4091 sql_help.c:4093 sql_help.c:4095 sql_help.c:4097 +#: sql_help.c:4099 sql_help.c:4105 sql_help.c:4107 sql_help.c:4109 +#: sql_help.c:4111 sql_help.c:4113 sql_help.c:4115 sql_help.c:4117 +#: sql_help.c:4118 msgid "role_specification" msgstr "role_specification" -#: sql_help.c:565 sql_help.c:567 sql_help.c:1602 sql_help.c:2116 -#: sql_help.c:2593 sql_help.c:3100 sql_help.c:3545 sql_help.c:4380 +#: sql_help.c:565 sql_help.c:567 sql_help.c:1611 sql_help.c:2130 +#: sql_help.c:2612 sql_help.c:3119 sql_help.c:3570 sql_help.c:4427 msgid "user_name" msgstr "uživatel" -#: sql_help.c:568 sql_help.c:945 sql_help.c:1591 sql_help.c:2592 -#: sql_help.c:3739 +#: sql_help.c:568 sql_help.c:945 sql_help.c:1600 sql_help.c:2611 +#: sql_help.c:3771 sql_help.c:4119 msgid "where role_specification can be:" msgstr "kde role_specification může být:" @@ -4442,22 +4590,22 @@ msgstr "kde role_specification může být:" msgid "group_name" msgstr "group_name" -#: sql_help.c:591 sql_help.c:1371 sql_help.c:2121 sql_help.c:2357 -#: sql_help.c:2391 sql_help.c:2765 sql_help.c:2778 sql_help.c:2792 -#: sql_help.c:2833 sql_help.c:2857 sql_help.c:2869 sql_help.c:3735 -#: sql_help.c:4068 +#: sql_help.c:591 sql_help.c:1376 sql_help.c:2136 sql_help.c:2376 +#: sql_help.c:2410 sql_help.c:2784 sql_help.c:2797 sql_help.c:2811 +#: sql_help.c:2852 sql_help.c:2876 sql_help.c:2888 sql_help.c:3764 +#: sql_help.c:4112 msgid "tablespace_name" msgstr "jméno_tablespace" -#: sql_help.c:593 sql_help.c:681 sql_help.c:1319 sql_help.c:1328 -#: sql_help.c:1366 sql_help.c:1709 +#: sql_help.c:593 sql_help.c:681 sql_help.c:1324 sql_help.c:1333 +#: sql_help.c:1371 sql_help.c:1722 msgid "index_name" msgstr "jméno_indexu" -#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1321 -#: sql_help.c:1323 sql_help.c:1369 sql_help.c:2355 sql_help.c:2389 -#: sql_help.c:2763 sql_help.c:2776 sql_help.c:2790 sql_help.c:2831 -#: sql_help.c:2855 +#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1326 +#: sql_help.c:1328 sql_help.c:1374 sql_help.c:2374 sql_help.c:2408 +#: sql_help.c:2782 sql_help.c:2795 sql_help.c:2809 sql_help.c:2850 +#: sql_help.c:2874 msgid "storage_parameter" msgstr "parametr_uložení" @@ -4465,1745 +4613,1749 @@ msgstr "parametr_uložení" msgid "column_number" msgstr "column_number" -#: sql_help.c:626 sql_help.c:1792 sql_help.c:4155 +#: sql_help.c:626 sql_help.c:1805 sql_help.c:4202 msgid "large_object_oid" msgstr "oid_large_objektu" -#: sql_help.c:713 sql_help.c:2412 +#: sql_help.c:713 sql_help.c:2431 msgid "res_proc" msgstr "res_proc" -#: sql_help.c:714 sql_help.c:2413 +#: sql_help.c:714 sql_help.c:2432 msgid "join_proc" msgstr "join_proc" -#: sql_help.c:766 sql_help.c:778 sql_help.c:2430 +#: sql_help.c:766 sql_help.c:778 sql_help.c:2449 msgid "strategy_number" msgstr "číslo_strategie" #: sql_help.c:768 sql_help.c:769 sql_help.c:772 sql_help.c:773 sql_help.c:779 -#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2432 sql_help.c:2433 -#: sql_help.c:2436 sql_help.c:2437 +#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2451 sql_help.c:2452 +#: sql_help.c:2455 sql_help.c:2456 msgid "op_type" msgstr "typ_operátoru" -#: sql_help.c:770 sql_help.c:2434 +#: sql_help.c:770 sql_help.c:2453 msgid "sort_family_name" msgstr "sort_family_name" -#: sql_help.c:771 sql_help.c:781 sql_help.c:2435 +#: sql_help.c:771 sql_help.c:781 sql_help.c:2454 msgid "support_number" msgstr "support_number" -#: sql_help.c:775 sql_help.c:2058 sql_help.c:2439 sql_help.c:2946 -#: sql_help.c:2948 +#: sql_help.c:775 sql_help.c:2071 sql_help.c:2458 sql_help.c:2965 +#: sql_help.c:2967 msgid "argument_type" msgstr "typ_argumentu" #: sql_help.c:806 sql_help.c:809 sql_help.c:880 sql_help.c:882 sql_help.c:884 -#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1489 sql_help.c:1492 -#: sql_help.c:1659 sql_help.c:1708 sql_help.c:1777 sql_help.c:1802 -#: sql_help.c:1815 sql_help.c:1830 sql_help.c:1887 sql_help.c:1893 -#: sql_help.c:2229 sql_help.c:2241 sql_help.c:2348 sql_help.c:2386 -#: sql_help.c:2463 sql_help.c:2506 sql_help.c:2562 sql_help.c:2613 -#: sql_help.c:2644 sql_help.c:2749 sql_help.c:2766 sql_help.c:2779 -#: sql_help.c:2852 sql_help.c:2972 sql_help.c:3149 sql_help.c:3366 -#: sql_help.c:3415 sql_help.c:3521 sql_help.c:3705 sql_help.c:3710 -#: sql_help.c:3755 sql_help.c:3787 sql_help.c:4038 sql_help.c:4043 -#: sql_help.c:4143 sql_help.c:4250 sql_help.c:4252 sql_help.c:4301 -#: sql_help.c:4340 sql_help.c:4489 sql_help.c:4491 sql_help.c:4540 -#: sql_help.c:4574 sql_help.c:4623 sql_help.c:4707 sql_help.c:4709 -#: sql_help.c:4758 +#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1494 sql_help.c:1497 +#: sql_help.c:1672 sql_help.c:1721 sql_help.c:1790 sql_help.c:1815 +#: sql_help.c:1828 sql_help.c:1843 sql_help.c:1900 sql_help.c:1906 +#: sql_help.c:2242 sql_help.c:2254 sql_help.c:2365 sql_help.c:2405 +#: sql_help.c:2482 sql_help.c:2525 sql_help.c:2581 sql_help.c:2632 +#: sql_help.c:2663 sql_help.c:2768 sql_help.c:2785 sql_help.c:2798 +#: sql_help.c:2871 sql_help.c:2991 sql_help.c:3168 sql_help.c:3391 +#: sql_help.c:3440 sql_help.c:3546 sql_help.c:3734 sql_help.c:3739 +#: sql_help.c:3785 sql_help.c:3817 sql_help.c:4082 sql_help.c:4087 +#: sql_help.c:4190 sql_help.c:4297 sql_help.c:4299 sql_help.c:4348 +#: sql_help.c:4387 sql_help.c:4536 sql_help.c:4538 sql_help.c:4587 +#: sql_help.c:4621 sql_help.c:4672 sql_help.c:4756 sql_help.c:4758 +#: sql_help.c:4807 msgid "table_name" msgstr "jméno_tabulky" -#: sql_help.c:811 sql_help.c:2465 +#: sql_help.c:811 sql_help.c:2484 msgid "using_expression" msgstr "using_expression" -#: sql_help.c:812 sql_help.c:2466 +#: sql_help.c:812 sql_help.c:2485 msgid "check_expression" msgstr "check_expression" -#: sql_help.c:886 sql_help.c:2507 +#: sql_help.c:886 sql_help.c:2526 msgid "publication_parameter" msgstr "publication_parameter" -#: sql_help.c:929 sql_help.c:1575 sql_help.c:2327 sql_help.c:2539 -#: sql_help.c:3083 +#: sql_help.c:929 sql_help.c:1584 sql_help.c:2344 sql_help.c:2558 +#: sql_help.c:3102 msgid "password" msgstr "heslo" -#: sql_help.c:930 sql_help.c:1576 sql_help.c:2328 sql_help.c:2540 -#: sql_help.c:3084 +#: sql_help.c:930 sql_help.c:1585 sql_help.c:2345 sql_help.c:2559 +#: sql_help.c:3103 msgid "timestamp" msgstr "timestamp" -#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1580 -#: sql_help.c:1584 sql_help.c:1587 sql_help.c:1590 sql_help.c:3715 -#: sql_help.c:4048 +#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1589 +#: sql_help.c:1593 sql_help.c:1596 sql_help.c:1599 sql_help.c:3744 +#: sql_help.c:4092 msgid "database_name" msgstr "jméno_databáze" -#: sql_help.c:1048 sql_help.c:2608 +#: sql_help.c:1048 sql_help.c:2627 msgid "increment" msgstr "inkrement" -#: sql_help.c:1049 sql_help.c:2609 +#: sql_help.c:1049 sql_help.c:2628 msgid "minvalue" msgstr "min_hodnota" -#: sql_help.c:1050 sql_help.c:2610 +#: sql_help.c:1050 sql_help.c:2629 msgid "maxvalue" msgstr "max_hodnota" -#: sql_help.c:1051 sql_help.c:2611 sql_help.c:4248 sql_help.c:4338 -#: sql_help.c:4487 sql_help.c:4640 sql_help.c:4705 +#: sql_help.c:1051 sql_help.c:2630 sql_help.c:4295 sql_help.c:4385 +#: sql_help.c:4534 sql_help.c:4689 sql_help.c:4754 msgid "start" msgstr "start" -#: sql_help.c:1052 sql_help.c:1296 +#: sql_help.c:1052 sql_help.c:1301 msgid "restart" msgstr "restart" -#: sql_help.c:1053 sql_help.c:2612 +#: sql_help.c:1053 sql_help.c:2631 msgid "cache" msgstr "cache" -#: sql_help.c:1110 sql_help.c:2656 +#: sql_help.c:1097 +#| msgid "new_table" +msgid "new_target" +msgstr "nový_cíl" + +#: sql_help.c:1113 sql_help.c:2675 msgid "conninfo" msgstr "conninfo" -#: sql_help.c:1112 sql_help.c:2657 +#: sql_help.c:1115 sql_help.c:2676 msgid "publication_name" msgstr "publication_name" -#: sql_help.c:1113 +#: sql_help.c:1116 msgid "set_publication_option" msgstr "set_publication_option" -#: sql_help.c:1116 +#: sql_help.c:1119 msgid "refresh_option" msgstr "refresh_option" -#: sql_help.c:1121 sql_help.c:2658 +#: sql_help.c:1124 sql_help.c:2677 msgid "subscription_parameter" msgstr "subscription_parameter" -#: sql_help.c:1274 sql_help.c:1277 +#: sql_help.c:1278 sql_help.c:1281 msgid "partition_name" msgstr "partition_name" -#: sql_help.c:1275 sql_help.c:2246 sql_help.c:2784 +#: sql_help.c:1279 sql_help.c:2259 sql_help.c:2803 msgid "partition_bound_spec" msgstr "partition_bound_spec" -#: sql_help.c:1293 sql_help.c:1340 sql_help.c:2798 +#: sql_help.c:1298 sql_help.c:1345 sql_help.c:2817 msgid "sequence_options" msgstr "sequence_options" -#: sql_help.c:1295 +#: sql_help.c:1300 msgid "sequence_option" msgstr "sequence_option" -#: sql_help.c:1307 +#: sql_help.c:1312 msgid "table_constraint_using_index" msgstr "omezení_tabulky_s_využitím_indexu" -#: sql_help.c:1315 sql_help.c:1316 sql_help.c:1317 sql_help.c:1318 +#: sql_help.c:1320 sql_help.c:1321 sql_help.c:1322 sql_help.c:1323 msgid "rewrite_rule_name" msgstr "přepisovací_pravidlo" -#: sql_help.c:1329 sql_help.c:2823 +#: sql_help.c:1334 sql_help.c:2842 msgid "and partition_bound_spec is:" msgstr "a partition_bound_spec je:" -#: sql_help.c:1330 sql_help.c:1331 sql_help.c:1332 sql_help.c:2824 -#: sql_help.c:2825 sql_help.c:2826 +#: sql_help.c:1335 sql_help.c:1336 sql_help.c:1337 sql_help.c:2843 +#: sql_help.c:2844 sql_help.c:2845 msgid "partition_bound_expr" msgstr "partition_bound_expr" -#: sql_help.c:1333 sql_help.c:1334 sql_help.c:2827 sql_help.c:2828 +#: sql_help.c:1338 sql_help.c:1339 sql_help.c:2846 sql_help.c:2847 msgid "numeric_literal" msgstr "numeric_literal" -#: sql_help.c:1335 +#: sql_help.c:1340 msgid "and column_constraint is:" msgstr "a column_constraint je:" -#: sql_help.c:1338 sql_help.c:2253 sql_help.c:2286 sql_help.c:2486 -#: sql_help.c:2796 +#: sql_help.c:1343 sql_help.c:2266 sql_help.c:2299 sql_help.c:2505 +#: sql_help.c:2815 msgid "default_expr" msgstr "implicitní_výraz" -#: sql_help.c:1339 sql_help.c:2254 sql_help.c:2797 +#: sql_help.c:1344 sql_help.c:2267 sql_help.c:2816 msgid "generation_expr" msgstr "generation_expr" -#: sql_help.c:1341 sql_help.c:1342 sql_help.c:1351 sql_help.c:1353 -#: sql_help.c:1357 sql_help.c:2799 sql_help.c:2800 sql_help.c:2809 -#: sql_help.c:2811 sql_help.c:2815 +#: sql_help.c:1346 sql_help.c:1347 sql_help.c:1356 sql_help.c:1358 +#: sql_help.c:1362 sql_help.c:2818 sql_help.c:2819 sql_help.c:2828 +#: sql_help.c:2830 sql_help.c:2834 msgid "index_parameters" msgstr "parametry_indexu" -#: sql_help.c:1343 sql_help.c:1360 sql_help.c:2801 sql_help.c:2818 +#: sql_help.c:1348 sql_help.c:1365 sql_help.c:2820 sql_help.c:2837 msgid "reftable" msgstr "odkazovaná_tabulka" -#: sql_help.c:1344 sql_help.c:1361 sql_help.c:2802 sql_help.c:2819 +#: sql_help.c:1349 sql_help.c:1366 sql_help.c:2821 sql_help.c:2838 msgid "refcolumn" msgstr "odkazovaný_sloupec" -#: sql_help.c:1345 sql_help.c:1346 sql_help.c:1362 sql_help.c:1363 -#: sql_help.c:2803 sql_help.c:2804 sql_help.c:2820 sql_help.c:2821 -#| msgid "initial_condition" +#: sql_help.c:1350 sql_help.c:1351 sql_help.c:1367 sql_help.c:1368 +#: sql_help.c:2822 sql_help.c:2823 sql_help.c:2839 sql_help.c:2840 msgid "referential_action" msgstr "referential_action" -#: sql_help.c:1347 sql_help.c:2255 sql_help.c:2805 +#: sql_help.c:1352 sql_help.c:2268 sql_help.c:2824 msgid "and table_constraint is:" msgstr "a omezení_tabulky je:" -#: sql_help.c:1355 sql_help.c:2813 +#: sql_help.c:1360 sql_help.c:2832 msgid "exclude_element" msgstr "exclude_element" -#: sql_help.c:1356 sql_help.c:2814 sql_help.c:4246 sql_help.c:4336 -#: sql_help.c:4485 sql_help.c:4638 sql_help.c:4703 +#: sql_help.c:1361 sql_help.c:2833 sql_help.c:4293 sql_help.c:4383 +#: sql_help.c:4532 sql_help.c:4687 sql_help.c:4752 msgid "operator" msgstr "operátor" -#: sql_help.c:1358 sql_help.c:2358 sql_help.c:2816 +#: sql_help.c:1363 sql_help.c:2377 sql_help.c:2835 msgid "predicate" msgstr "predikát" -#: sql_help.c:1364 +#: sql_help.c:1369 msgid "and table_constraint_using_index is:" msgstr "a omezení_tabulky_s_využitím_indexu je:" -#: sql_help.c:1367 sql_help.c:2829 +#: sql_help.c:1372 sql_help.c:2848 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "parametry_indexu v UNIQUE, PRIMARY KEY, a EXCLUDE omezeních jsou:" -#: sql_help.c:1372 sql_help.c:2834 +#: sql_help.c:1377 sql_help.c:2853 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "exclude_element v EXCLUDE omezení je:" -#: sql_help.c:1375 sql_help.c:2353 sql_help.c:2761 sql_help.c:2774 -#: sql_help.c:2788 sql_help.c:2837 sql_help.c:3800 +#: sql_help.c:1380 sql_help.c:2370 sql_help.c:2780 sql_help.c:2793 +#: sql_help.c:2807 sql_help.c:2856 sql_help.c:3830 msgid "opclass" msgstr "třída_operátoru" -#: sql_help.c:1391 sql_help.c:1394 sql_help.c:2872 +#: sql_help.c:1396 sql_help.c:1399 sql_help.c:2891 msgid "tablespace_option" msgstr "volba_tablespace" -#: sql_help.c:1415 sql_help.c:1418 sql_help.c:1424 sql_help.c:1428 +#: sql_help.c:1420 sql_help.c:1423 sql_help.c:1429 sql_help.c:1433 msgid "token_type" msgstr "typ_tokenu" -#: sql_help.c:1416 sql_help.c:1419 +#: sql_help.c:1421 sql_help.c:1424 msgid "dictionary_name" msgstr "jméno_slovníku" -#: sql_help.c:1421 sql_help.c:1425 +#: sql_help.c:1426 sql_help.c:1430 msgid "old_dictionary" msgstr "starý_slovník" -#: sql_help.c:1422 sql_help.c:1426 +#: sql_help.c:1427 sql_help.c:1431 msgid "new_dictionary" msgstr "nový_slovník" -#: sql_help.c:1518 sql_help.c:1531 sql_help.c:1534 sql_help.c:1535 -#: sql_help.c:3023 +#: sql_help.c:1526 sql_help.c:1540 sql_help.c:1543 sql_help.c:1544 +#: sql_help.c:3042 msgid "attribute_name" msgstr "jméno_atributu" -#: sql_help.c:1519 +#: sql_help.c:1527 msgid "new_attribute_name" msgstr "nové_jméno_atributu" -#: sql_help.c:1525 sql_help.c:1529 +#: sql_help.c:1531 sql_help.c:1535 msgid "new_enum_value" msgstr "nová_enum_hodnota" -#: sql_help.c:1526 +#: sql_help.c:1532 msgid "neighbor_enum_value" msgstr "neighbor_enum_value" -#: sql_help.c:1528 +#: sql_help.c:1534 msgid "existing_enum_value" msgstr "existing_enum_value" -#: sql_help.c:1603 sql_help.c:2238 sql_help.c:2247 sql_help.c:2624 -#: sql_help.c:3101 sql_help.c:3546 sql_help.c:3721 sql_help.c:3756 -#: sql_help.c:4054 +#: sql_help.c:1537 +#| msgid "operator" +msgid "property" +msgstr "vlastnost" + +#: sql_help.c:1612 sql_help.c:2251 sql_help.c:2260 sql_help.c:2643 +#: sql_help.c:3120 sql_help.c:3571 sql_help.c:3750 sql_help.c:3786 +#: sql_help.c:4098 msgid "server_name" msgstr "jméno_serveru" -#: sql_help.c:1631 sql_help.c:1634 sql_help.c:3116 +#: sql_help.c:1644 sql_help.c:1647 sql_help.c:3135 msgid "view_option_name" msgstr "název_volby_pohledu" -#: sql_help.c:1632 sql_help.c:3117 +#: sql_help.c:1645 sql_help.c:3136 msgid "view_option_value" msgstr "hodnota_volby_pohledu" -#: sql_help.c:1653 sql_help.c:1654 sql_help.c:4611 sql_help.c:4612 +#: sql_help.c:1666 sql_help.c:1667 sql_help.c:4659 sql_help.c:4660 msgid "table_and_columns" msgstr "table_and_columns" -#: sql_help.c:1655 sql_help.c:1899 sql_help.c:3593 sql_help.c:4613 +#: sql_help.c:1668 sql_help.c:1912 sql_help.c:3619 sql_help.c:3963 +#: sql_help.c:4661 msgid "where option can be one of:" msgstr "kde volba je jedno z:" -#: sql_help.c:1656 sql_help.c:1657 sql_help.c:1901 sql_help.c:1904 -#: sql_help.c:2083 sql_help.c:3594 sql_help.c:3595 sql_help.c:3596 -#: sql_help.c:3597 sql_help.c:3598 sql_help.c:3599 sql_help.c:3600 -#: sql_help.c:4614 sql_help.c:4615 sql_help.c:4616 sql_help.c:4617 -#: sql_help.c:4618 sql_help.c:4619 sql_help.c:4620 sql_help.c:4621 +#: sql_help.c:1669 sql_help.c:1670 sql_help.c:1914 sql_help.c:1917 +#: sql_help.c:2096 sql_help.c:3620 sql_help.c:3621 sql_help.c:3622 +#: sql_help.c:3623 sql_help.c:3624 sql_help.c:3625 sql_help.c:3626 +#: sql_help.c:3627 sql_help.c:4662 sql_help.c:4663 sql_help.c:4664 +#: sql_help.c:4665 sql_help.c:4666 sql_help.c:4667 sql_help.c:4668 +#: sql_help.c:4669 msgid "boolean" msgstr "boolean" -#: sql_help.c:1658 sql_help.c:4622 +#: sql_help.c:1671 sql_help.c:4671 msgid "and table_and_columns is:" msgstr "a table_and_columns je:" -#: sql_help.c:1674 sql_help.c:4396 sql_help.c:4398 sql_help.c:4422 +#: sql_help.c:1687 sql_help.c:4443 sql_help.c:4445 sql_help.c:4469 msgid "transaction_mode" msgstr "transakční_mód" -#: sql_help.c:1675 sql_help.c:4399 sql_help.c:4423 +#: sql_help.c:1688 sql_help.c:4446 sql_help.c:4470 msgid "where transaction_mode is one of:" msgstr "kde transakční_mód je jedno z:" -#: sql_help.c:1684 sql_help.c:4256 sql_help.c:4265 sql_help.c:4269 -#: sql_help.c:4273 sql_help.c:4276 sql_help.c:4495 sql_help.c:4504 -#: sql_help.c:4508 sql_help.c:4512 sql_help.c:4515 sql_help.c:4713 -#: sql_help.c:4722 sql_help.c:4726 sql_help.c:4730 sql_help.c:4733 +#: sql_help.c:1697 sql_help.c:4303 sql_help.c:4312 sql_help.c:4316 +#: sql_help.c:4320 sql_help.c:4323 sql_help.c:4542 sql_help.c:4551 +#: sql_help.c:4555 sql_help.c:4559 sql_help.c:4562 sql_help.c:4762 +#: sql_help.c:4771 sql_help.c:4775 sql_help.c:4779 sql_help.c:4782 msgid "argument" msgstr "argument" -#: sql_help.c:1774 +#: sql_help.c:1787 msgid "relation_name" msgstr "název_relace" -#: sql_help.c:1779 sql_help.c:3717 sql_help.c:4050 +#: sql_help.c:1792 sql_help.c:3746 sql_help.c:4094 msgid "domain_name" msgstr "jméno_domény" -#: sql_help.c:1801 +#: sql_help.c:1814 msgid "policy_name" msgstr "policy_name" -#: sql_help.c:1814 +#: sql_help.c:1827 msgid "rule_name" msgstr "jméno_pravidla" -#: sql_help.c:1833 +#: sql_help.c:1846 msgid "text" msgstr "text" -#: sql_help.c:1858 sql_help.c:3900 sql_help.c:4088 +#: sql_help.c:1871 sql_help.c:3930 sql_help.c:4135 msgid "transaction_id" msgstr "id_transakce" -#: sql_help.c:1889 sql_help.c:1896 sql_help.c:3826 +#: sql_help.c:1902 sql_help.c:1909 sql_help.c:3856 msgid "filename" msgstr "jméno_souboru" -#: sql_help.c:1890 sql_help.c:1897 sql_help.c:2564 sql_help.c:2565 -#: sql_help.c:2566 +#: sql_help.c:1903 sql_help.c:1910 sql_help.c:2583 sql_help.c:2584 +#: sql_help.c:2585 msgid "command" msgstr "příkaz" -#: sql_help.c:1892 sql_help.c:2563 sql_help.c:2975 sql_help.c:3152 -#: sql_help.c:3810 sql_help.c:4239 sql_help.c:4241 sql_help.c:4329 -#: sql_help.c:4331 sql_help.c:4478 sql_help.c:4480 sql_help.c:4583 -#: sql_help.c:4696 sql_help.c:4698 +#: sql_help.c:1905 sql_help.c:2582 sql_help.c:2994 sql_help.c:3171 +#: sql_help.c:3840 sql_help.c:4286 sql_help.c:4288 sql_help.c:4376 +#: sql_help.c:4378 sql_help.c:4525 sql_help.c:4527 sql_help.c:4630 +#: sql_help.c:4745 sql_help.c:4747 msgid "condition" msgstr "podmínka" -#: sql_help.c:1895 sql_help.c:2392 sql_help.c:2858 sql_help.c:3118 -#: sql_help.c:3136 sql_help.c:3791 +#: sql_help.c:1908 sql_help.c:2411 sql_help.c:2877 sql_help.c:3137 +#: sql_help.c:3155 sql_help.c:3821 msgid "query" msgstr "dotaz" -#: sql_help.c:1900 +#: sql_help.c:1913 msgid "format_name" msgstr "jméno_formátu" -#: sql_help.c:1902 +#: sql_help.c:1915 msgid "delimiter_character" msgstr "oddělovací_znak" -#: sql_help.c:1903 +#: sql_help.c:1916 msgid "null_string" msgstr "null_string" -#: sql_help.c:1905 +#: sql_help.c:1918 msgid "quote_character" msgstr "quote_character" -#: sql_help.c:1906 +#: sql_help.c:1919 msgid "escape_character" msgstr "escape_character" -#: sql_help.c:1910 +#: sql_help.c:1923 msgid "encoding_name" msgstr "název_kódování" -#: sql_help.c:1921 +#: sql_help.c:1934 msgid "access_method_type" msgstr "access_method_type" -#: sql_help.c:1992 sql_help.c:2011 sql_help.c:2014 +#: sql_help.c:2005 sql_help.c:2024 sql_help.c:2027 msgid "arg_data_type" msgstr "arg_data_type" -#: sql_help.c:1993 sql_help.c:2015 sql_help.c:2023 +#: sql_help.c:2006 sql_help.c:2028 sql_help.c:2036 msgid "sfunc" msgstr "sfunc" -#: sql_help.c:1994 sql_help.c:2016 sql_help.c:2024 +#: sql_help.c:2007 sql_help.c:2029 sql_help.c:2037 msgid "state_data_type" msgstr "datový_typ_stavu" -#: sql_help.c:1995 sql_help.c:2017 sql_help.c:2025 +#: sql_help.c:2008 sql_help.c:2030 sql_help.c:2038 msgid "state_data_size" msgstr "state_data_size" -#: sql_help.c:1996 sql_help.c:2018 sql_help.c:2026 +#: sql_help.c:2009 sql_help.c:2031 sql_help.c:2039 msgid "ffunc" msgstr "ffunc" -#: sql_help.c:1997 sql_help.c:2027 +#: sql_help.c:2010 sql_help.c:2040 msgid "combinefunc" msgstr "combinefunc" -#: sql_help.c:1998 sql_help.c:2028 +#: sql_help.c:2011 sql_help.c:2041 msgid "serialfunc" msgstr "serialfunc" -#: sql_help.c:1999 sql_help.c:2029 +#: sql_help.c:2012 sql_help.c:2042 msgid "deserialfunc" msgstr "deserialfunc" -#: sql_help.c:2000 sql_help.c:2019 sql_help.c:2030 +#: sql_help.c:2013 sql_help.c:2032 sql_help.c:2043 msgid "initial_condition" msgstr "výchozí_podmínka" -#: sql_help.c:2001 sql_help.c:2031 +#: sql_help.c:2014 sql_help.c:2044 msgid "msfunc" msgstr "msfunc" -#: sql_help.c:2002 sql_help.c:2032 +#: sql_help.c:2015 sql_help.c:2045 msgid "minvfunc" msgstr "minvfunc" -#: sql_help.c:2003 sql_help.c:2033 +#: sql_help.c:2016 sql_help.c:2046 msgid "mstate_data_type" msgstr "mstate_data_type" -#: sql_help.c:2004 sql_help.c:2034 +#: sql_help.c:2017 sql_help.c:2047 msgid "mstate_data_size" msgstr "mstate_data_size" -#: sql_help.c:2005 sql_help.c:2035 +#: sql_help.c:2018 sql_help.c:2048 msgid "mffunc" msgstr "mffunc" -#: sql_help.c:2006 sql_help.c:2036 +#: sql_help.c:2019 sql_help.c:2049 msgid "minitial_condition" msgstr "minitial_condition" -#: sql_help.c:2007 sql_help.c:2037 +#: sql_help.c:2020 sql_help.c:2050 msgid "sort_operator" msgstr "operátor_třídění" -#: sql_help.c:2020 +#: sql_help.c:2033 msgid "or the old syntax" msgstr "nebo stará syntaxe" -#: sql_help.c:2022 +#: sql_help.c:2035 msgid "base_type" msgstr "základní_typ" -#: sql_help.c:2079 +#: sql_help.c:2092 sql_help.c:2133 msgid "locale" msgstr "locale" -#: sql_help.c:2080 sql_help.c:2119 +#: sql_help.c:2093 sql_help.c:2134 msgid "lc_collate" msgstr "lc_collate" -#: sql_help.c:2081 sql_help.c:2120 +#: sql_help.c:2094 sql_help.c:2135 msgid "lc_ctype" msgstr "lc_ctype" -#: sql_help.c:2082 sql_help.c:4141 +#: sql_help.c:2095 sql_help.c:4188 msgid "provider" msgstr "provider" -#: sql_help.c:2084 sql_help.c:2175 +#: sql_help.c:2097 sql_help.c:2189 msgid "version" msgstr "verze" -#: sql_help.c:2086 +#: sql_help.c:2099 msgid "existing_collation" msgstr "existující_collation" -#: sql_help.c:2096 +#: sql_help.c:2109 msgid "source_encoding" msgstr "kódování_zdroje" -#: sql_help.c:2097 +#: sql_help.c:2110 msgid "dest_encoding" msgstr "kódování_cíle" -#: sql_help.c:2117 sql_help.c:2898 +#: sql_help.c:2131 sql_help.c:2917 msgid "template" msgstr "šablona" -#: sql_help.c:2118 +#: sql_help.c:2132 msgid "encoding" msgstr "kódování" -#: sql_help.c:2144 +#: sql_help.c:2159 msgid "constraint" msgstr "omezení" -#: sql_help.c:2145 +#: sql_help.c:2160 msgid "where constraint is:" msgstr "kde omezení je:" -#: sql_help.c:2159 sql_help.c:2561 sql_help.c:2971 +#: sql_help.c:2174 sql_help.c:2580 sql_help.c:2990 msgid "event" msgstr "událost" -#: sql_help.c:2160 +#: sql_help.c:2175 msgid "filter_variable" msgstr "filter_variable" -#: sql_help.c:2176 -msgid "old_version" -msgstr "stará_verze" - -#: sql_help.c:2250 sql_help.c:2793 +#: sql_help.c:2263 sql_help.c:2812 msgid "where column_constraint is:" msgstr "kde omezení_sloupce je:" -#: sql_help.c:2287 +#: sql_help.c:2300 msgid "rettype" msgstr "návratový_typ" -#: sql_help.c:2289 +#: sql_help.c:2302 msgid "column_type" msgstr "typ_sloupce" -#: sql_help.c:2298 sql_help.c:2492 +#: sql_help.c:2311 sql_help.c:2511 msgid "definition" msgstr "definice" -#: sql_help.c:2299 sql_help.c:2493 +#: sql_help.c:2312 sql_help.c:2512 msgid "obj_file" msgstr "obj_file" -#: sql_help.c:2300 sql_help.c:2494 +#: sql_help.c:2313 sql_help.c:2513 msgid "link_symbol" msgstr "link_symbol" -#: sql_help.c:2334 sql_help.c:2546 sql_help.c:3090 +#: sql_help.c:2351 sql_help.c:2565 sql_help.c:3109 msgid "uid" msgstr "uid" -#: sql_help.c:2349 sql_help.c:2388 sql_help.c:2762 sql_help.c:2775 -#: sql_help.c:2789 sql_help.c:2854 +#: sql_help.c:2366 sql_help.c:2407 sql_help.c:2781 sql_help.c:2794 +#: sql_help.c:2808 sql_help.c:2873 msgid "method" msgstr "metoda" -#: sql_help.c:2370 +#: sql_help.c:2371 +#| msgid "storage_parameter" +msgid "opclass_parameter" +msgstr "opclass_parametr" + +#: sql_help.c:2388 msgid "call_handler" msgstr "call_handler" -#: sql_help.c:2371 +#: sql_help.c:2389 msgid "inline_handler" msgstr "inline_handler" -#: sql_help.c:2372 +#: sql_help.c:2390 msgid "valfunction" msgstr "valfunction" -#: sql_help.c:2410 +#: sql_help.c:2429 msgid "com_op" msgstr "com_op" -#: sql_help.c:2411 +#: sql_help.c:2430 msgid "neg_op" msgstr "neg_op" -#: sql_help.c:2429 +#: sql_help.c:2448 msgid "family_name" msgstr "family_name" -#: sql_help.c:2440 +#: sql_help.c:2459 msgid "storage_type" msgstr "typ_uložení" -#: sql_help.c:2567 sql_help.c:2978 +#: sql_help.c:2586 sql_help.c:2997 msgid "where event can be one of:" msgstr "kde událost může být jedno z:" -#: sql_help.c:2586 sql_help.c:2588 +#: sql_help.c:2605 sql_help.c:2607 msgid "schema_element" msgstr "prvek_schématu" -#: sql_help.c:2625 +#: sql_help.c:2644 msgid "server_type" msgstr "typ_serveru" -#: sql_help.c:2626 +#: sql_help.c:2645 msgid "server_version" msgstr "verze_serveru" -#: sql_help.c:2627 sql_help.c:3719 sql_help.c:4052 +#: sql_help.c:2646 sql_help.c:3748 sql_help.c:4096 msgid "fdw_name" msgstr "fdw_jméno" -#: sql_help.c:2640 +#: sql_help.c:2659 msgid "statistics_name" msgstr "statistics_name" -#: sql_help.c:2641 +#: sql_help.c:2660 msgid "statistics_kind" msgstr "statistics_kind" -#: sql_help.c:2655 +#: sql_help.c:2674 msgid "subscription_name" msgstr "subscription_name" -#: sql_help.c:2755 +#: sql_help.c:2774 msgid "source_table" msgstr "zdrojová_tabulka" -#: sql_help.c:2756 +#: sql_help.c:2775 msgid "like_option" msgstr "like_volba" -#: sql_help.c:2822 +#: sql_help.c:2841 msgid "and like_option is:" msgstr "a like_volba je:" -#: sql_help.c:2871 +#: sql_help.c:2890 msgid "directory" msgstr "adresář" -#: sql_help.c:2885 +#: sql_help.c:2904 msgid "parser_name" msgstr "jméno_parseru" -#: sql_help.c:2886 +#: sql_help.c:2905 msgid "source_config" msgstr "source_config" -#: sql_help.c:2915 +#: sql_help.c:2934 msgid "start_function" msgstr "start_funkce" -#: sql_help.c:2916 +#: sql_help.c:2935 msgid "gettoken_function" msgstr "gettoken_funkce" -#: sql_help.c:2917 +#: sql_help.c:2936 msgid "end_function" msgstr "end_function" -#: sql_help.c:2918 +#: sql_help.c:2937 msgid "lextypes_function" msgstr "lextypes_funkce" -#: sql_help.c:2919 +#: sql_help.c:2938 msgid "headline_function" msgstr "headline_funkce" -#: sql_help.c:2931 +#: sql_help.c:2950 msgid "init_function" msgstr "init_funkce" -#: sql_help.c:2932 +#: sql_help.c:2951 msgid "lexize_function" msgstr "lexize_funkce" -#: sql_help.c:2945 +#: sql_help.c:2964 msgid "from_sql_function_name" msgstr "from_sql_function_name" -#: sql_help.c:2947 +#: sql_help.c:2966 msgid "to_sql_function_name" msgstr "to_sql_function_name" -#: sql_help.c:2973 +#: sql_help.c:2992 msgid "referenced_table_name" msgstr "jméno_odkazované_tabulky" -#: sql_help.c:2974 +#: sql_help.c:2993 msgid "transition_relation_name" msgstr "transition_relation_name" -#: sql_help.c:2977 +#: sql_help.c:2996 msgid "arguments" msgstr "argumenty" -#: sql_help.c:3027 sql_help.c:4174 +#: sql_help.c:3046 sql_help.c:4221 msgid "label" msgstr "popisek" -#: sql_help.c:3029 +#: sql_help.c:3048 msgid "subtype" msgstr "subtyp" -#: sql_help.c:3030 +#: sql_help.c:3049 msgid "subtype_operator_class" msgstr "třída_operátorů_subtypu" -#: sql_help.c:3032 +#: sql_help.c:3051 msgid "canonical_function" msgstr "kanonická_funkce" -#: sql_help.c:3033 +#: sql_help.c:3052 msgid "subtype_diff_function" msgstr "diff_funkce_subtypu" -#: sql_help.c:3035 +#: sql_help.c:3054 msgid "input_function" msgstr "vstupní_funkce" -#: sql_help.c:3036 +#: sql_help.c:3055 msgid "output_function" msgstr "výstupní_funkce" -#: sql_help.c:3037 +#: sql_help.c:3056 msgid "receive_function" msgstr "receive_funkce" -#: sql_help.c:3038 +#: sql_help.c:3057 msgid "send_function" msgstr "send_funkce" -#: sql_help.c:3039 +#: sql_help.c:3058 msgid "type_modifier_input_function" msgstr "type_modifier_input_function" -#: sql_help.c:3040 +#: sql_help.c:3059 msgid "type_modifier_output_function" msgstr "type_modifier_output_function" -#: sql_help.c:3041 +#: sql_help.c:3060 msgid "analyze_function" msgstr "analyze_funkce" -#: sql_help.c:3042 +#: sql_help.c:3061 msgid "internallength" msgstr "interní_délka" -#: sql_help.c:3043 +#: sql_help.c:3062 msgid "alignment" msgstr "zarovnání" -#: sql_help.c:3044 +#: sql_help.c:3063 msgid "storage" msgstr "uložení" -#: sql_help.c:3045 +#: sql_help.c:3064 msgid "like_type" msgstr "like_typ" -#: sql_help.c:3046 +#: sql_help.c:3065 msgid "category" msgstr "kategorie" -#: sql_help.c:3047 +#: sql_help.c:3066 msgid "preferred" msgstr "preferovaný" -#: sql_help.c:3048 +#: sql_help.c:3067 msgid "default" msgstr "implicitní" -#: sql_help.c:3049 +#: sql_help.c:3068 msgid "element" msgstr "prvek" -#: sql_help.c:3050 +#: sql_help.c:3069 msgid "delimiter" msgstr "oddělovač" -#: sql_help.c:3051 +#: sql_help.c:3070 msgid "collatable" msgstr "collatable" -#: sql_help.c:3148 sql_help.c:3786 sql_help.c:4234 sql_help.c:4323 -#: sql_help.c:4473 sql_help.c:4573 sql_help.c:4691 +#: sql_help.c:3167 sql_help.c:3816 sql_help.c:4281 sql_help.c:4370 +#: sql_help.c:4520 sql_help.c:4620 sql_help.c:4740 msgid "with_query" msgstr "with_dotaz" -#: sql_help.c:3150 sql_help.c:3788 sql_help.c:4253 sql_help.c:4259 -#: sql_help.c:4262 sql_help.c:4266 sql_help.c:4270 sql_help.c:4278 -#: sql_help.c:4492 sql_help.c:4498 sql_help.c:4501 sql_help.c:4505 -#: sql_help.c:4509 sql_help.c:4517 sql_help.c:4575 sql_help.c:4710 -#: sql_help.c:4716 sql_help.c:4719 sql_help.c:4723 sql_help.c:4727 -#: sql_help.c:4735 +#: sql_help.c:3169 sql_help.c:3818 sql_help.c:4300 sql_help.c:4306 +#: sql_help.c:4309 sql_help.c:4313 sql_help.c:4317 sql_help.c:4325 +#: sql_help.c:4539 sql_help.c:4545 sql_help.c:4548 sql_help.c:4552 +#: sql_help.c:4556 sql_help.c:4564 sql_help.c:4622 sql_help.c:4759 +#: sql_help.c:4765 sql_help.c:4768 sql_help.c:4772 sql_help.c:4776 +#: sql_help.c:4784 msgid "alias" msgstr "alias" -#: sql_help.c:3151 -msgid "using_list" -msgstr "using_seznam" +#: sql_help.c:3170 sql_help.c:4285 sql_help.c:4327 sql_help.c:4329 +#: sql_help.c:4375 sql_help.c:4524 sql_help.c:4566 sql_help.c:4568 +#: sql_help.c:4629 sql_help.c:4744 sql_help.c:4786 sql_help.c:4788 +msgid "from_item" +msgstr "z_položky" -#: sql_help.c:3153 sql_help.c:3626 sql_help.c:3867 sql_help.c:4584 +#: sql_help.c:3172 sql_help.c:3653 sql_help.c:3897 sql_help.c:4631 msgid "cursor_name" msgstr "jméno_kurzoru" -#: sql_help.c:3154 sql_help.c:3794 sql_help.c:4585 +#: sql_help.c:3173 sql_help.c:3824 sql_help.c:4632 msgid "output_expression" msgstr "výstupní_výraz" -#: sql_help.c:3155 sql_help.c:3795 sql_help.c:4237 sql_help.c:4326 -#: sql_help.c:4476 sql_help.c:4586 sql_help.c:4694 +#: sql_help.c:3174 sql_help.c:3825 sql_help.c:4284 sql_help.c:4373 +#: sql_help.c:4523 sql_help.c:4633 sql_help.c:4743 msgid "output_name" msgstr "výstupní_jméno" -#: sql_help.c:3171 +#: sql_help.c:3190 msgid "code" msgstr "kód" -#: sql_help.c:3570 +#: sql_help.c:3595 msgid "parameter" msgstr "parametr" -#: sql_help.c:3591 sql_help.c:3592 sql_help.c:3892 +#: sql_help.c:3617 sql_help.c:3618 sql_help.c:3922 msgid "statement" msgstr "příkaz" -#: sql_help.c:3625 sql_help.c:3866 +#: sql_help.c:3652 sql_help.c:3896 msgid "direction" msgstr "směr" -#: sql_help.c:3627 sql_help.c:3868 +#: sql_help.c:3654 sql_help.c:3898 msgid "where direction can be empty or one of:" msgstr "kde směr může být prázdný nebo jedno z:" -#: sql_help.c:3628 sql_help.c:3629 sql_help.c:3630 sql_help.c:3631 -#: sql_help.c:3632 sql_help.c:3869 sql_help.c:3870 sql_help.c:3871 -#: sql_help.c:3872 sql_help.c:3873 sql_help.c:4247 sql_help.c:4249 -#: sql_help.c:4337 sql_help.c:4339 sql_help.c:4486 sql_help.c:4488 -#: sql_help.c:4639 sql_help.c:4641 sql_help.c:4704 sql_help.c:4706 +#: sql_help.c:3655 sql_help.c:3656 sql_help.c:3657 sql_help.c:3658 +#: sql_help.c:3659 sql_help.c:3899 sql_help.c:3900 sql_help.c:3901 +#: sql_help.c:3902 sql_help.c:3903 sql_help.c:4294 sql_help.c:4296 +#: sql_help.c:4384 sql_help.c:4386 sql_help.c:4533 sql_help.c:4535 +#: sql_help.c:4688 sql_help.c:4690 sql_help.c:4753 sql_help.c:4755 msgid "count" msgstr "počet" -#: sql_help.c:3712 sql_help.c:4045 +#: sql_help.c:3741 sql_help.c:4089 msgid "sequence_name" msgstr "sekvence" -#: sql_help.c:3725 sql_help.c:4058 +#: sql_help.c:3754 sql_help.c:4102 msgid "arg_name" msgstr "jméno_argumentu" -#: sql_help.c:3726 sql_help.c:4059 +#: sql_help.c:3755 sql_help.c:4103 msgid "arg_type" msgstr "typ_argumentu" -#: sql_help.c:3731 sql_help.c:4064 +#: sql_help.c:3760 sql_help.c:4108 msgid "loid" msgstr "loid" -#: sql_help.c:3754 +#: sql_help.c:3784 msgid "remote_schema" msgstr "remote_schema" -#: sql_help.c:3757 +#: sql_help.c:3787 msgid "local_schema" msgstr "local_schema" -#: sql_help.c:3792 +#: sql_help.c:3822 msgid "conflict_target" msgstr "conflict_target" -#: sql_help.c:3793 +#: sql_help.c:3823 msgid "conflict_action" msgstr "conflict_action" -#: sql_help.c:3796 +#: sql_help.c:3826 msgid "where conflict_target can be one of:" msgstr "where conflict_target can be one of:" -#: sql_help.c:3797 +#: sql_help.c:3827 msgid "index_column_name" msgstr "index_column_name" -#: sql_help.c:3798 +#: sql_help.c:3828 msgid "index_expression" msgstr "index_expression" -#: sql_help.c:3801 +#: sql_help.c:3831 msgid "index_predicate" msgstr "index_predicate" -#: sql_help.c:3803 +#: sql_help.c:3833 msgid "and conflict_action is one of:" msgstr "a conflict_action je jedno z:" -#: sql_help.c:3809 sql_help.c:4581 +#: sql_help.c:3839 sql_help.c:4628 msgid "sub-SELECT" msgstr "sub-SELECT" -#: sql_help.c:3818 sql_help.c:3881 sql_help.c:4557 +#: sql_help.c:3848 sql_help.c:3911 sql_help.c:4604 msgid "channel" msgstr "kanál" -#: sql_help.c:3840 +#: sql_help.c:3870 msgid "lockmode" msgstr "mód_zámku" -#: sql_help.c:3841 +#: sql_help.c:3871 msgid "where lockmode is one of:" msgstr "kde mód_zámku je jedno z:" -#: sql_help.c:3882 +#: sql_help.c:3912 msgid "payload" msgstr "náklad" -#: sql_help.c:3909 +#: sql_help.c:3939 msgid "old_role" msgstr "stará_role" -#: sql_help.c:3910 +#: sql_help.c:3940 msgid "new_role" msgstr "nová_role" -#: sql_help.c:3935 sql_help.c:4096 sql_help.c:4104 +#: sql_help.c:3971 sql_help.c:4143 sql_help.c:4151 msgid "savepoint_name" msgstr "jméno_savepointu" -#: sql_help.c:4238 sql_help.c:4280 sql_help.c:4282 sql_help.c:4328 -#: sql_help.c:4477 sql_help.c:4519 sql_help.c:4521 sql_help.c:4695 -#: sql_help.c:4737 sql_help.c:4739 -msgid "from_item" -msgstr "z_položky" - -#: sql_help.c:4240 sql_help.c:4292 sql_help.c:4479 sql_help.c:4531 -#: sql_help.c:4697 sql_help.c:4749 +#: sql_help.c:4287 sql_help.c:4339 sql_help.c:4526 sql_help.c:4578 +#: sql_help.c:4746 sql_help.c:4798 msgid "grouping_element" msgstr "grouping_element" -#: sql_help.c:4242 sql_help.c:4332 sql_help.c:4481 sql_help.c:4699 +#: sql_help.c:4289 sql_help.c:4379 sql_help.c:4528 sql_help.c:4748 msgid "window_name" msgstr "jméno_okna" -#: sql_help.c:4243 sql_help.c:4333 sql_help.c:4482 sql_help.c:4700 +#: sql_help.c:4290 sql_help.c:4380 sql_help.c:4529 sql_help.c:4749 msgid "window_definition" msgstr "definice_okna" -#: sql_help.c:4244 sql_help.c:4258 sql_help.c:4296 sql_help.c:4334 -#: sql_help.c:4483 sql_help.c:4497 sql_help.c:4535 sql_help.c:4701 -#: sql_help.c:4715 sql_help.c:4753 +#: sql_help.c:4291 sql_help.c:4305 sql_help.c:4343 sql_help.c:4381 +#: sql_help.c:4530 sql_help.c:4544 sql_help.c:4582 sql_help.c:4750 +#: sql_help.c:4764 sql_help.c:4802 msgid "select" msgstr "select" -#: sql_help.c:4251 sql_help.c:4490 sql_help.c:4708 +#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4757 msgid "where from_item can be one of:" msgstr "kde z_položky může být jedno z:" -#: sql_help.c:4254 sql_help.c:4260 sql_help.c:4263 sql_help.c:4267 -#: sql_help.c:4279 sql_help.c:4493 sql_help.c:4499 sql_help.c:4502 -#: sql_help.c:4506 sql_help.c:4518 sql_help.c:4711 sql_help.c:4717 -#: sql_help.c:4720 sql_help.c:4724 sql_help.c:4736 +#: sql_help.c:4301 sql_help.c:4307 sql_help.c:4310 sql_help.c:4314 +#: sql_help.c:4326 sql_help.c:4540 sql_help.c:4546 sql_help.c:4549 +#: sql_help.c:4553 sql_help.c:4565 sql_help.c:4760 sql_help.c:4766 +#: sql_help.c:4769 sql_help.c:4773 sql_help.c:4785 msgid "column_alias" msgstr "alias_sloupce" -#: sql_help.c:4255 sql_help.c:4494 sql_help.c:4712 +#: sql_help.c:4302 sql_help.c:4541 sql_help.c:4761 msgid "sampling_method" msgstr "sampling_method" -#: sql_help.c:4257 sql_help.c:4496 sql_help.c:4714 +#: sql_help.c:4304 sql_help.c:4543 sql_help.c:4763 msgid "seed" msgstr "seed" -#: sql_help.c:4261 sql_help.c:4294 sql_help.c:4500 sql_help.c:4533 -#: sql_help.c:4718 sql_help.c:4751 +#: sql_help.c:4308 sql_help.c:4341 sql_help.c:4547 sql_help.c:4580 +#: sql_help.c:4767 sql_help.c:4800 msgid "with_query_name" msgstr "jméno_with_dotazu" -#: sql_help.c:4271 sql_help.c:4274 sql_help.c:4277 sql_help.c:4510 -#: sql_help.c:4513 sql_help.c:4516 sql_help.c:4728 sql_help.c:4731 -#: sql_help.c:4734 +#: sql_help.c:4318 sql_help.c:4321 sql_help.c:4324 sql_help.c:4557 +#: sql_help.c:4560 sql_help.c:4563 sql_help.c:4777 sql_help.c:4780 +#: sql_help.c:4783 msgid "column_definition" msgstr "definice_sloupce" -#: sql_help.c:4281 sql_help.c:4520 sql_help.c:4738 +#: sql_help.c:4328 sql_help.c:4567 sql_help.c:4787 msgid "join_type" msgstr "typ_joinu" -#: sql_help.c:4283 sql_help.c:4522 sql_help.c:4740 +#: sql_help.c:4330 sql_help.c:4569 sql_help.c:4789 msgid "join_condition" msgstr "joinovací_podmínka" -#: sql_help.c:4284 sql_help.c:4523 sql_help.c:4741 +#: sql_help.c:4331 sql_help.c:4570 sql_help.c:4790 msgid "join_column" msgstr "joinovací_sloupec" -#: sql_help.c:4285 sql_help.c:4524 sql_help.c:4742 +#: sql_help.c:4332 sql_help.c:4571 sql_help.c:4791 msgid "and grouping_element can be one of:" msgstr "a grouping_element může být jedno z:" -#: sql_help.c:4293 sql_help.c:4532 sql_help.c:4750 +#: sql_help.c:4340 sql_help.c:4579 sql_help.c:4799 msgid "and with_query is:" msgstr "a with_dotaz je:" -#: sql_help.c:4297 sql_help.c:4536 sql_help.c:4754 +#: sql_help.c:4344 sql_help.c:4583 sql_help.c:4803 msgid "values" msgstr "hodnoty" -#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4755 +#: sql_help.c:4345 sql_help.c:4584 sql_help.c:4804 msgid "insert" msgstr "insert" -#: sql_help.c:4299 sql_help.c:4538 sql_help.c:4756 +#: sql_help.c:4346 sql_help.c:4585 sql_help.c:4805 msgid "update" msgstr "update" -#: sql_help.c:4300 sql_help.c:4539 sql_help.c:4757 +#: sql_help.c:4347 sql_help.c:4586 sql_help.c:4806 msgid "delete" msgstr "delete" -#: sql_help.c:4327 +#: sql_help.c:4374 msgid "new_table" msgstr "nová_tabulka" -#: sql_help.c:4352 +#: sql_help.c:4399 msgid "timezone" msgstr "časová_zóna" -#: sql_help.c:4397 +#: sql_help.c:4444 msgid "snapshot_id" msgstr "snapshot_id" -#: sql_help.c:4582 -msgid "from_list" -msgstr "from_seznam" - -#: sql_help.c:4637 +#: sql_help.c:4686 msgid "sort_expression" msgstr "sort_expression" -#: sql_help.c:4764 sql_help.c:5742 +#: sql_help.c:4813 sql_help.c:5791 msgid "abort the current transaction" msgstr "nestandardní ukončení (abort) současné transakce" -#: sql_help.c:4770 +#: sql_help.c:4819 msgid "change the definition of an aggregate function" msgstr "změna definice agregátní funkce" -#: sql_help.c:4776 +#: sql_help.c:4825 msgid "change the definition of a collation" msgstr "změní definici collation" -#: sql_help.c:4782 +#: sql_help.c:4831 msgid "change the definition of a conversion" msgstr "změna definice konverze" -#: sql_help.c:4788 +#: sql_help.c:4837 msgid "change a database" msgstr "změní databázi" -#: sql_help.c:4794 +#: sql_help.c:4843 msgid "define default access privileges" msgstr "definuje výchozí přístupová práva" -#: sql_help.c:4800 +#: sql_help.c:4849 msgid "change the definition of a domain" msgstr "změní definici domény" -#: sql_help.c:4806 +#: sql_help.c:4855 msgid "change the definition of an event trigger" msgstr "změní definici event triggeru" -#: sql_help.c:4812 +#: sql_help.c:4861 msgid "change the definition of an extension" msgstr "změna definice extension" -#: sql_help.c:4818 +#: sql_help.c:4867 msgid "change the definition of a foreign-data wrapper" msgstr "změní definici foreign-data wrapperu" -#: sql_help.c:4824 +#: sql_help.c:4873 msgid "change the definition of a foreign table" msgstr "změní definici foreign tabulky" -#: sql_help.c:4830 +#: sql_help.c:4879 msgid "change the definition of a function" msgstr "změní definici funkce" -#: sql_help.c:4836 +#: sql_help.c:4885 msgid "change role name or membership" msgstr "změní jméno role nebo členství" -#: sql_help.c:4842 +#: sql_help.c:4891 msgid "change the definition of an index" msgstr "změní definici indexu" -#: sql_help.c:4848 +#: sql_help.c:4897 msgid "change the definition of a procedural language" msgstr "změní definici procedurálního jazyka" -#: sql_help.c:4854 +#: sql_help.c:4903 msgid "change the definition of a large object" msgstr "změní definici large objektu" -#: sql_help.c:4860 +#: sql_help.c:4909 msgid "change the definition of a materialized view" msgstr "změní definici materializovaného pohledu" -#: sql_help.c:4866 +#: sql_help.c:4915 msgid "change the definition of an operator" msgstr "změní definici operátoru" -#: sql_help.c:4872 +#: sql_help.c:4921 msgid "change the definition of an operator class" msgstr "změní definici třídy operátorů" -#: sql_help.c:4878 +#: sql_help.c:4927 msgid "change the definition of an operator family" msgstr "změní definici rodiny operátorů" -#: sql_help.c:4884 +#: sql_help.c:4933 msgid "change the definition of a row level security policy" msgstr "změní definici row level security politiky" -#: sql_help.c:4890 +#: sql_help.c:4939 msgid "change the definition of a procedure" msgstr "změní definici procedury" -#: sql_help.c:4896 +#: sql_help.c:4945 msgid "change the definition of a publication" msgstr "změní definici publikace" -#: sql_help.c:4902 sql_help.c:5004 +#: sql_help.c:4951 sql_help.c:5053 msgid "change a database role" msgstr "změní databázovou roli" -#: sql_help.c:4908 +#: sql_help.c:4957 msgid "change the definition of a routine" msgstr "změní definici rutiny" -#: sql_help.c:4914 +#: sql_help.c:4963 msgid "change the definition of a rule" msgstr "změní definici pravidla" -#: sql_help.c:4920 +#: sql_help.c:4969 msgid "change the definition of a schema" msgstr "změní definici schématu" -#: sql_help.c:4926 +#: sql_help.c:4975 msgid "change the definition of a sequence generator" msgstr "změní definici generátoru sekvencí" -#: sql_help.c:4932 +#: sql_help.c:4981 msgid "change the definition of a foreign server" msgstr "změní definici foreign serveru" -#: sql_help.c:4938 +#: sql_help.c:4987 msgid "change the definition of an extended statistics object" msgstr "změna definice rozšířené statistiky" -#: sql_help.c:4944 +#: sql_help.c:4993 msgid "change the definition of a subscription" msgstr "změní definici subskripce" -#: sql_help.c:4950 +#: sql_help.c:4999 msgid "change a server configuration parameter" msgstr "změní serverový konfigurační parametr" -#: sql_help.c:4956 +#: sql_help.c:5005 msgid "change the definition of a table" msgstr "změní definici tabulky" -#: sql_help.c:4962 +#: sql_help.c:5011 msgid "change the definition of a tablespace" msgstr "změní definici tablespace" -#: sql_help.c:4968 +#: sql_help.c:5017 msgid "change the definition of a text search configuration" msgstr "změní definici konfigurace fulltextového vyhledávání" -#: sql_help.c:4974 +#: sql_help.c:5023 msgid "change the definition of a text search dictionary" msgstr "změní definici slovníku pro fulltextové vyhledávání" -#: sql_help.c:4980 +#: sql_help.c:5029 msgid "change the definition of a text search parser" msgstr "změní definici parseru pro fulltextové vyhledávání" -#: sql_help.c:4986 +#: sql_help.c:5035 msgid "change the definition of a text search template" msgstr "změní definici šablony pro fulltextové vyhledávání" -#: sql_help.c:4992 +#: sql_help.c:5041 msgid "change the definition of a trigger" msgstr "změní definici triggeru" -#: sql_help.c:4998 +#: sql_help.c:5047 msgid "change the definition of a type" msgstr "změní definici datového typu" -#: sql_help.c:5010 +#: sql_help.c:5059 msgid "change the definition of a user mapping" msgstr "změní definici mapování uživatelů" -#: sql_help.c:5016 +#: sql_help.c:5065 msgid "change the definition of a view" msgstr "změní definici pohledu" -#: sql_help.c:5022 +#: sql_help.c:5071 msgid "collect statistics about a database" msgstr "shromáždí statistické informace o databázi" -#: sql_help.c:5028 sql_help.c:5820 +#: sql_help.c:5077 sql_help.c:5869 msgid "start a transaction block" msgstr "nastartuje nový transakční blok" -#: sql_help.c:5034 +#: sql_help.c:5083 msgid "invoke a procedure" msgstr "spustí proceduru" -#: sql_help.c:5040 +#: sql_help.c:5089 msgid "force a write-ahead log checkpoint" msgstr "vynutí checkpoint transakčního logu" -#: sql_help.c:5046 +#: sql_help.c:5095 msgid "close a cursor" msgstr "uzavře kursor" -#: sql_help.c:5052 +#: sql_help.c:5101 msgid "cluster a table according to an index" msgstr "přerovná obsah tabulky dle indexu" -#: sql_help.c:5058 +#: sql_help.c:5107 msgid "define or change the comment of an object" msgstr "definuje nebo změní komentář objektu" -#: sql_help.c:5064 sql_help.c:5622 +#: sql_help.c:5113 sql_help.c:5671 msgid "commit the current transaction" msgstr "potvrzení aktuální transakce" -#: sql_help.c:5070 +#: sql_help.c:5119 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "potvrzení aktuální transakce, která byla již dříve připravena pro dvoufázový commit" -#: sql_help.c:5076 +#: sql_help.c:5125 msgid "copy data between a file and a table" msgstr "kopíruje data mezi souborem a tabulkou" -#: sql_help.c:5082 +#: sql_help.c:5131 msgid "define a new access method" msgstr "definuje novou přístupovou metodu" -#: sql_help.c:5088 +#: sql_help.c:5137 msgid "define a new aggregate function" msgstr "definuje novou agrefunkci" -#: sql_help.c:5094 +#: sql_help.c:5143 msgid "define a new cast" msgstr "definuje nové přetypování" -#: sql_help.c:5100 +#: sql_help.c:5149 msgid "define a new collation" msgstr "definuje novou collation" -#: sql_help.c:5106 +#: sql_help.c:5155 msgid "define a new encoding conversion" msgstr "definuje novou konverzi kódování" -#: sql_help.c:5112 +#: sql_help.c:5161 msgid "create a new database" msgstr "vytvoří novou databázi" -#: sql_help.c:5118 +#: sql_help.c:5167 msgid "define a new domain" msgstr "definuje novou atributovou doménu" -#: sql_help.c:5124 +#: sql_help.c:5173 msgid "define a new event trigger" msgstr "definuje nový event trigger" -#: sql_help.c:5130 +#: sql_help.c:5179 msgid "install an extension" msgstr "instaluje rozšíření" -#: sql_help.c:5136 +#: sql_help.c:5185 msgid "define a new foreign-data wrapper" msgstr "definuje nový foreign-data wrapper" -#: sql_help.c:5142 +#: sql_help.c:5191 msgid "define a new foreign table" msgstr "definuje nový foreign tabulku" -#: sql_help.c:5148 +#: sql_help.c:5197 msgid "define a new function" msgstr "definuje novou funkci" -#: sql_help.c:5154 sql_help.c:5214 sql_help.c:5316 +#: sql_help.c:5203 sql_help.c:5263 sql_help.c:5365 msgid "define a new database role" msgstr "definuje novou databázovou roli" -#: sql_help.c:5160 +#: sql_help.c:5209 msgid "define a new index" msgstr "definuje nový index" -#: sql_help.c:5166 +#: sql_help.c:5215 msgid "define a new procedural language" msgstr "definuje nový procedurální jazyk" -#: sql_help.c:5172 +#: sql_help.c:5221 msgid "define a new materialized view" msgstr "definuje nový materializovaný pohled" -#: sql_help.c:5178 +#: sql_help.c:5227 msgid "define a new operator" msgstr "definuje nový operátor" -#: sql_help.c:5184 +#: sql_help.c:5233 msgid "define a new operator class" msgstr "definuje novou třídu operátorů" -#: sql_help.c:5190 +#: sql_help.c:5239 msgid "define a new operator family" msgstr "definuje novou rodinu operátorů" -#: sql_help.c:5196 +#: sql_help.c:5245 msgid "define a new row level security policy for a table" msgstr "definute novou row level security politiku pro tabulku" -#: sql_help.c:5202 +#: sql_help.c:5251 msgid "define a new procedure" msgstr "definuje novou proceduru" -#: sql_help.c:5208 +#: sql_help.c:5257 msgid "define a new publication" msgstr "definuje novou publikaci" -#: sql_help.c:5220 +#: sql_help.c:5269 msgid "define a new rewrite rule" msgstr "definuje nové přepisovací pravidlo (rule)" -#: sql_help.c:5226 +#: sql_help.c:5275 msgid "define a new schema" msgstr "definuje nové schéma" -#: sql_help.c:5232 +#: sql_help.c:5281 msgid "define a new sequence generator" msgstr "definuje nový generátor sekvencí" -#: sql_help.c:5238 +#: sql_help.c:5287 msgid "define a new foreign server" msgstr "definuje nový foreign server" -#: sql_help.c:5244 +#: sql_help.c:5293 msgid "define extended statistics" msgstr "definuje nové rozšířené statistiky" -#: sql_help.c:5250 +#: sql_help.c:5299 msgid "define a new subscription" msgstr "definuje novou subskripci" -#: sql_help.c:5256 +#: sql_help.c:5305 msgid "define a new table" msgstr "definuje novou tabulku" -#: sql_help.c:5262 sql_help.c:5778 +#: sql_help.c:5311 sql_help.c:5827 msgid "define a new table from the results of a query" msgstr "definuje novou tabulku dle výsledku dotazu" -#: sql_help.c:5268 +#: sql_help.c:5317 msgid "define a new tablespace" msgstr "definuje nový tablespace" -#: sql_help.c:5274 +#: sql_help.c:5323 msgid "define a new text search configuration" msgstr "definuje novou konfiguraci fulltextového vyhledávání" -#: sql_help.c:5280 +#: sql_help.c:5329 msgid "define a new text search dictionary" msgstr "definuje nový slovník pro fulltextové vyhledávání" -#: sql_help.c:5286 +#: sql_help.c:5335 msgid "define a new text search parser" msgstr "definuje nový parser pro fulltextové vyhledávání" -#: sql_help.c:5292 +#: sql_help.c:5341 msgid "define a new text search template" msgstr "definuje novou šablonu pro fulltextové vyhledávání" -#: sql_help.c:5298 +#: sql_help.c:5347 msgid "define a new transform" msgstr "definuje novou transformaci" -#: sql_help.c:5304 +#: sql_help.c:5353 msgid "define a new trigger" msgstr "definuje nový trigger" -#: sql_help.c:5310 +#: sql_help.c:5359 msgid "define a new data type" msgstr "definuje nový datový typ" -#: sql_help.c:5322 +#: sql_help.c:5371 msgid "define a new mapping of a user to a foreign server" msgstr "definuje nové mapování uživatele na vzdálený server" -#: sql_help.c:5328 +#: sql_help.c:5377 msgid "define a new view" msgstr "definuje nový pohled" -#: sql_help.c:5334 +#: sql_help.c:5383 msgid "deallocate a prepared statement" msgstr "dealokuje připravený dotaz (prepared statement)" -#: sql_help.c:5340 +#: sql_help.c:5389 msgid "define a cursor" msgstr "definuje kursor" -#: sql_help.c:5346 +#: sql_help.c:5395 msgid "delete rows of a table" msgstr "smaže řádky z takulky" -#: sql_help.c:5352 +#: sql_help.c:5401 msgid "discard session state" msgstr "zahodí stav session" -#: sql_help.c:5358 +#: sql_help.c:5407 msgid "execute an anonymous code block" msgstr "spustí anonymní blok kódu" -#: sql_help.c:5364 +#: sql_help.c:5413 msgid "remove an access method" msgstr "odstraní definici přístupové metody" -#: sql_help.c:5370 +#: sql_help.c:5419 msgid "remove an aggregate function" msgstr "odstraní agregační funkci" -#: sql_help.c:5376 +#: sql_help.c:5425 msgid "remove a cast" msgstr "odstraní definici přetypování" -#: sql_help.c:5382 +#: sql_help.c:5431 msgid "remove a collation" msgstr "odstraní collation" -#: sql_help.c:5388 +#: sql_help.c:5437 msgid "remove a conversion" msgstr "odstraní konverzi" -#: sql_help.c:5394 +#: sql_help.c:5443 msgid "remove a database" msgstr "odstraní databázi" -#: sql_help.c:5400 +#: sql_help.c:5449 msgid "remove a domain" msgstr "odstraní doménu" -#: sql_help.c:5406 +#: sql_help.c:5455 msgid "remove an event trigger" msgstr "odstraní event trigger" -#: sql_help.c:5412 +#: sql_help.c:5461 msgid "remove an extension" msgstr "odstraní extension" -#: sql_help.c:5418 +#: sql_help.c:5467 msgid "remove a foreign-data wrapper" msgstr "odstraní foreign-data wrapper" -#: sql_help.c:5424 +#: sql_help.c:5473 msgid "remove a foreign table" msgstr "odstraní foreign tabulku" -#: sql_help.c:5430 +#: sql_help.c:5479 msgid "remove a function" msgstr "odstraní funkci" -#: sql_help.c:5436 sql_help.c:5502 sql_help.c:5604 +#: sql_help.c:5485 sql_help.c:5551 sql_help.c:5653 msgid "remove a database role" msgstr "odstraní databázovou roli" -#: sql_help.c:5442 +#: sql_help.c:5491 msgid "remove an index" msgstr "odstraní index" -#: sql_help.c:5448 +#: sql_help.c:5497 msgid "remove a procedural language" msgstr "odstraní procedurální jazyk" -#: sql_help.c:5454 +#: sql_help.c:5503 msgid "remove a materialized view" msgstr "odstraní materializovaný pohled" -#: sql_help.c:5460 +#: sql_help.c:5509 msgid "remove an operator" msgstr "odstraní operátor" -#: sql_help.c:5466 +#: sql_help.c:5515 msgid "remove an operator class" msgstr "odstraní třídu operátorů" -#: sql_help.c:5472 +#: sql_help.c:5521 msgid "remove an operator family" msgstr "odstraní rodinu operátorů" -#: sql_help.c:5478 +#: sql_help.c:5527 msgid "remove database objects owned by a database role" msgstr "odstraní objekty vlastněné databázovou rolí" -#: sql_help.c:5484 +#: sql_help.c:5533 msgid "remove a row level security policy from a table" msgstr "odstraní row level security politiku z tabulky" -#: sql_help.c:5490 +#: sql_help.c:5539 msgid "remove a procedure" msgstr "odstraní proceduru" -#: sql_help.c:5496 +#: sql_help.c:5545 msgid "remove a publication" msgstr "odstraní publikaci" -#: sql_help.c:5508 +#: sql_help.c:5557 msgid "remove a routine" msgstr "odstraní rutinu" -#: sql_help.c:5514 +#: sql_help.c:5563 msgid "remove a rewrite rule" msgstr "odstraní přepisovací pravidlo (rule)" -#: sql_help.c:5520 +#: sql_help.c:5569 msgid "remove a schema" msgstr "odstraní schéma" -#: sql_help.c:5526 +#: sql_help.c:5575 msgid "remove a sequence" msgstr "odstraní sekvenci" -#: sql_help.c:5532 +#: sql_help.c:5581 msgid "remove a foreign server descriptor" msgstr "odstraní deskriptor foreign serveru" -#: sql_help.c:5538 +#: sql_help.c:5587 msgid "remove extended statistics" msgstr "odstraní rozšířené statistiky" -#: sql_help.c:5544 +#: sql_help.c:5593 msgid "remove a subscription" msgstr "odstraní subskripci" -#: sql_help.c:5550 +#: sql_help.c:5599 msgid "remove a table" msgstr "odstraní tabulku" -#: sql_help.c:5556 +#: sql_help.c:5605 msgid "remove a tablespace" msgstr "odstraní tablespace" -#: sql_help.c:5562 +#: sql_help.c:5611 msgid "remove a text search configuration" msgstr "odstraní konfiguraci fulltextového vyhledávání" -#: sql_help.c:5568 +#: sql_help.c:5617 msgid "remove a text search dictionary" msgstr "odstraní slovn?ik pro fulltextové vyhledávání" -#: sql_help.c:5574 +#: sql_help.c:5623 msgid "remove a text search parser" msgstr "odstraní parser pro fulltextové vyhledávání" -#: sql_help.c:5580 +#: sql_help.c:5629 msgid "remove a text search template" msgstr "odstraní Šablonu fulltextového vyhledávání" -#: sql_help.c:5586 +#: sql_help.c:5635 msgid "remove a transform" msgstr "odstraní transformaci" -#: sql_help.c:5592 +#: sql_help.c:5641 msgid "remove a trigger" msgstr "odstraní trigger" -#: sql_help.c:5598 +#: sql_help.c:5647 msgid "remove a data type" msgstr "odstraní datový typ" -#: sql_help.c:5610 +#: sql_help.c:5659 msgid "remove a user mapping for a foreign server" msgstr "odstraní mapování uživatele z foreign serveru" -#: sql_help.c:5616 +#: sql_help.c:5665 msgid "remove a view" msgstr "odstraní náhled" -#: sql_help.c:5628 +#: sql_help.c:5677 msgid "execute a prepared statement" msgstr "provede připravený dotaz (prepared statement)" -#: sql_help.c:5634 +#: sql_help.c:5683 msgid "show the execution plan of a statement" msgstr "ukáže prováděcí plán dotazu" -#: sql_help.c:5640 +#: sql_help.c:5689 msgid "retrieve rows from a query using a cursor" msgstr "načte řádky z výsledku dotazu pomocí kursoru" -#: sql_help.c:5646 +#: sql_help.c:5695 msgid "define access privileges" msgstr "definuje přístupová práva" -#: sql_help.c:5652 +#: sql_help.c:5701 msgid "import table definitions from a foreign server" msgstr "importuje definice tabulek z foreign serveru" -#: sql_help.c:5658 +#: sql_help.c:5707 msgid "create new rows in a table" msgstr "přidá nové řádky do tabulky" -#: sql_help.c:5664 +#: sql_help.c:5713 msgid "listen for a notification" msgstr "naslouchá upozorněním" -#: sql_help.c:5670 +#: sql_help.c:5719 msgid "load a shared library file" msgstr "načte sdílenou knihovnu" -#: sql_help.c:5676 -msgid "lock a table" -msgstr "uzamkne tabulku" +#: sql_help.c:5725 +msgid "lock a named relation (table, etc)" +msgstr "zamkne uvedenou relaci (tabulku, etc)" -#: sql_help.c:5682 +#: sql_help.c:5731 msgid "position a cursor" msgstr "přemístí kursor" -#: sql_help.c:5688 +#: sql_help.c:5737 msgid "generate a notification" msgstr "generuje upozornění" -#: sql_help.c:5694 +#: sql_help.c:5743 msgid "prepare a statement for execution" msgstr "připraví a uloží dotaz pro provedení" -#: sql_help.c:5700 +#: sql_help.c:5749 msgid "prepare the current transaction for two-phase commit" msgstr "přípraví aktuální transakci pro dvoufázoví commit" -#: sql_help.c:5706 +#: sql_help.c:5755 msgid "change the ownership of database objects owned by a database role" msgstr "změní vlastníka databázových objektů vlastněných databázovou rolí" -#: sql_help.c:5712 +#: sql_help.c:5761 msgid "replace the contents of a materialized view" msgstr "nahraď obsah materializovaného pohledu" -#: sql_help.c:5718 +#: sql_help.c:5767 msgid "rebuild indexes" msgstr "znovuvytvoří indexy" -#: sql_help.c:5724 +#: sql_help.c:5773 msgid "destroy a previously defined savepoint" msgstr "odstraní dříve vytvořený savepoint" -#: sql_help.c:5730 +#: sql_help.c:5779 msgid "restore the value of a run-time parameter to the default value" msgstr "přenastaví parametr běhu na implicitní hodnotu" -#: sql_help.c:5736 +#: sql_help.c:5785 msgid "remove access privileges" msgstr "odstraní přístupová práva" -#: sql_help.c:5748 +#: sql_help.c:5797 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "zruší transakci, která byla připravena pro dvoufázový commit" -#: sql_help.c:5754 +#: sql_help.c:5803 msgid "roll back to a savepoint" msgstr "vrátí se na savepoint" -#: sql_help.c:5760 +#: sql_help.c:5809 msgid "define a new savepoint within the current transaction" msgstr "definuje nový savepoint uvnitř aktuální transakce" -#: sql_help.c:5766 +#: sql_help.c:5815 msgid "define or change a security label applied to an object" msgstr "definuje nebo změní bezpečnostní štítek aplikovaný na objekt" -#: sql_help.c:5772 sql_help.c:5826 sql_help.c:5862 +#: sql_help.c:5821 sql_help.c:5875 sql_help.c:5911 msgid "retrieve rows from a table or view" msgstr "vybere řádky z tabulky nebo náhledu" -#: sql_help.c:5784 +#: sql_help.c:5833 msgid "change a run-time parameter" msgstr "změní parametry běhu" -#: sql_help.c:5790 +#: sql_help.c:5839 msgid "set constraint check timing for the current transaction" msgstr "nastaví mód kontroly omezení (constraints) pro aktuální transakci" -#: sql_help.c:5796 +#: sql_help.c:5845 msgid "set the current user identifier of the current session" msgstr "nastaví uživatelský identifikátor aktuální session" -#: sql_help.c:5802 +#: sql_help.c:5851 msgid "set the session user identifier and the current user identifier of the current session" msgstr "nastaví uživatelský identifikátor session a identifikátor aktuálníhouživatele pro aktuální session" -#: sql_help.c:5808 +#: sql_help.c:5857 msgid "set the characteristics of the current transaction" msgstr "nastaví charakteristiku pro aktualní trasakci" -#: sql_help.c:5814 +#: sql_help.c:5863 msgid "show the value of a run-time parameter" msgstr "zobrazí hodnoty run-time parametrů" -#: sql_help.c:5832 +#: sql_help.c:5881 msgid "empty a table or set of tables" msgstr "zruší obsah tabulky nebo skupiny tabulek" -#: sql_help.c:5838 +#: sql_help.c:5887 msgid "stop listening for a notification" msgstr "ukončí naslouchání připomínkám" -#: sql_help.c:5844 +#: sql_help.c:5893 msgid "update rows of a table" msgstr "aktualizuje řádky tabulky" -#: sql_help.c:5850 +#: sql_help.c:5899 msgid "garbage-collect and optionally analyze a database" msgstr "provede úklid a případně analýzu databáze" -#: sql_help.c:5856 +#: sql_help.c:5905 msgid "compute a set of rows" msgstr "spočítá množinu řádek" -#: startup.c:216 +#: startup.c:212 #, c-format msgid "-1 can only be used in non-interactive mode" msgstr "-1 může být použito pouze pro neinteraktivní módy" -#: startup.c:303 +#: startup.c:299 #, c-format msgid "could not connect to server: %s" msgstr "nelze se připojit k serveru: %s" -#: startup.c:331 +#: startup.c:327 #, c-format msgid "could not open log file \"%s\": %m" msgstr "nelze otevřít soubor \"%s\": %m" -#: startup.c:443 +#: startup.c:439 #, c-format msgid "" "Type \"help\" for help.\n" @@ -6212,27 +6364,27 @@ msgstr "" "Pro získání nápovědy napište \"help\".\n" "\n" -#: startup.c:593 +#: startup.c:589 #, c-format msgid "could not set printing parameter \"%s\"" msgstr "nelze nastavit parametr zobrazení \"%s\"" -#: startup.c:701 +#: startup.c:697 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" -#: startup.c:718 +#: startup.c:714 #, c-format msgid "extra command-line argument \"%s\" ignored" msgstr "varování: nadbytečný parametr příkazové řádky \"%s\" ignorován" -#: startup.c:767 +#: startup.c:763 #, c-format msgid "could not find own program executable" msgstr "nelze najít vlastní spustitelný soubor" -#: tab-complete.c:4408 +#: tab-complete.c:4640 #, c-format msgid "" "tab completion query failed: %s\n" @@ -6243,22 +6395,22 @@ msgstr "" "Dotaz byl:\n" "%s" -#: variables.c:141 +#: variables.c:139 #, c-format msgid "unrecognized value \"%s\" for \"%s\": Boolean expected" msgstr "nerozpoznaná hodnota \"%s\" pro \"%s\": očekáván Boolean výraz" -#: variables.c:178 +#: variables.c:176 #, c-format msgid "invalid value \"%s\" for \"%s\": integer expected" msgstr "neplatná hodnota \"%s\" pro \"%s\": očekáváno celé číslo" -#: variables.c:226 +#: variables.c:224 #, c-format msgid "invalid variable name: \"%s\"" msgstr "neplatný název proměnné: \"%s\"" -#: variables.c:395 +#: variables.c:393 #, c-format msgid "" "unrecognized value \"%s\" for \"%s\"\n" @@ -6267,167 +6419,185 @@ msgstr "" "nerozpoznaná hodnota \"%s\" pro \"%s\"\n" "Možné hodnoty jsou: %s." -#~ msgid "Password encryption failed.\n" -#~ msgstr "Zašifrování hesla selhalo.\n" +#~ msgid "could not read symbolic link \"%s\"" +#~ msgstr "nelze číst symbolický link \"%s\"" -#~ msgid "\\%s: error while setting variable\n" -#~ msgstr "\\%s: chyba při nastavování proměnné\n" +#~ msgid "child process was terminated by signal %s" +#~ msgstr "potomek byl ukončen signálem %s" -#~ msgid "+ opt(%d) = |%s|\n" -#~ msgstr "+ opt(%d) = |%s|\n" +#~ msgid "Invalid command \\%s. Try \\? for help.\n" +#~ msgstr "Neplatný příkaz \\%s. Použijte \\? pro nápovědu.\n" -#~ msgid "SSL connection (unknown cipher)\n" -#~ msgstr "SSL spojení (neznámá šifra)\n" +#~ msgid "%s: %s\n" +#~ msgstr "%s: %s\n" -#~ msgid "Showing locale-adjusted numeric output." -#~ msgstr "Zobrazí číselný výstup dle národního nastavení." +#~ msgid "Procedure" +#~ msgstr "Procedura" -#~ msgid "Showing only tuples." -#~ msgstr "Zobrazovány jsou pouze záznamy." +#~ msgid "%s\n" +#~ msgstr "%s\n" -#~ msgid "Watch every %lds\t%s" -#~ msgstr "Zkontroluj každých %lds\t%s" +#~ msgid "unterminated quoted string\n" +#~ msgstr "neukončený řetězec v uvozovkách\n" -#~ msgid "could not set variable \"%s\"\n" -#~ msgstr "nelze nastavit proměnnou \"%s\"\n" +#~ msgid "string_literal" +#~ msgstr "string_literal" -#~ msgid "normal" -#~ msgstr "normal" +#~ msgid "%s: could not open log file \"%s\": %s\n" +#~ msgstr "%s: nelze otevřít logovací soubor \"%s\": %s\n" -#~ msgid "Modifiers" -#~ msgstr "Modifikátory" +#~ msgid "\\%s: error\n" +#~ msgstr "\\%s: chyba\n" -#~ msgid "Value" -#~ msgstr "Hodnota" +#~ msgid "\\copy: %s" +#~ msgstr "\\copy: %s" -#~ msgid "collate %s" -#~ msgstr "collate %s" +#~ msgid "\\copy: unexpected response (%d)\n" +#~ msgstr "\\copy: neočekávaná odezva (%d)\n" -#~ msgid "not null" -#~ msgstr "not null" +#~ msgid "data type" +#~ msgstr "datový typ" -#~ msgid "default %s" -#~ msgstr "implicitně %s" +#~ msgid " on host \"%s\"" +#~ msgstr " na počítač \"%s\"" -#~ msgid "No per-database role settings support in this server version.\n" -#~ msgstr "Tato verze serveru nepodporuje nastavení rolí dle databáze.\n" +#~ msgid " at port \"%s\"" +#~ msgstr " na port \"%s\"" -#~ msgid "No matching settings found.\n" -#~ msgstr "Odpovídající relace nebyla nalezena.\n" +#~ msgid " as user \"%s\"" +#~ msgstr " jako uživatel \"%s\"" -#~ msgid "No settings found.\n" -#~ msgstr "Žádné nastavení nenalezeno.\n" +#~ msgid "define a new constraint trigger" +#~ msgstr "defunuje nový constraint trigger" -#~ msgid "No matching relations found.\n" -#~ msgstr "Odpovídající relace nebyla nalezena.\n" +#~ msgid " \"%s\" IN %s %s" +#~ msgstr " \"%s\" IN %s %s" -#~ msgid "No relations found.\n" -#~ msgstr "Žádné relace nenalezeny.\n" +#~ msgid "ABORT [ WORK | TRANSACTION ]" +#~ msgstr "ABORT [ WORK | TRANSACTION ]" -#~ msgid "Modifier" -#~ msgstr "Modifikátor" +#~ msgid "contains support for command-line editing" +#~ msgstr "obsahuje podporu pro editaci příkazové řádky " -#~ msgid "Object Description" -#~ msgstr "Popis objektu" +#~ msgid "tablespace" +#~ msgstr "tablespace" -#~ msgid "could not get current user name: %s\n" -#~ msgstr "nelze získat aktuální uživatelské jméno: %s\n" +#~ msgid "new_column" +#~ msgstr "nový_sloupec" -#~ msgid " -?, --help show this help, then exit\n" -#~ msgstr " -?, --help ukáže tuto nápovědu a skončí\n" +#~ msgid "column" +#~ msgstr "sloupec" -#~ msgid "(No rows)\n" -#~ msgstr "(Žádné řádky)\n" +#~ msgid " \\l[+] list all databases\n" +#~ msgstr " \\l[+] seznam databází\n" -#~ msgid "agg_name" -#~ msgstr "jméno_agregace" +#~ msgid "%s: -1 is incompatible with -c and -l\n" +#~ msgstr "%s: -1 je nekompatibilní s -c a -l\n" -#~ msgid "agg_type" -#~ msgstr "typ_agregace" +#~ msgid "unrecognized Boolean value; assuming \"on\"\n" +#~ msgstr "nerozpoznaná boolean hodnota; předpokládám \"on\".\n" -#~ msgid "input_data_type" -#~ msgstr "vstupní_datový_typ" +#~ msgid "%s: could not set variable \"%s\"\n" +#~ msgstr "%s: nelze nastavit proměnnou \"%s\"\n" #~ msgid "attribute" #~ msgstr "atribut" -#~ msgid "%s: could not set variable \"%s\"\n" -#~ msgstr "%s: nelze nastavit proměnnou \"%s\"\n" +#~ msgid "input_data_type" +#~ msgstr "vstupní_datový_typ" -#~ msgid "unrecognized Boolean value; assuming \"on\"\n" -#~ msgstr "nerozpoznaná boolean hodnota; předpokládám \"on\".\n" +#~ msgid "agg_type" +#~ msgstr "typ_agregace" -#~ msgid "%s: -1 is incompatible with -c and -l\n" -#~ msgstr "%s: -1 je nekompatibilní s -c a -l\n" +#~ msgid "agg_name" +#~ msgstr "jméno_agregace" -#~ msgid " \\l[+] list all databases\n" -#~ msgstr " \\l[+] seznam databází\n" +#~ msgid "(No rows)\n" +#~ msgstr "(Žádné řádky)\n" -#~ msgid "column" -#~ msgstr "sloupec" +#~ msgid " -?, --help show this help, then exit\n" +#~ msgstr " -?, --help ukáže tuto nápovědu a skončí\n" -#~ msgid "new_column" -#~ msgstr "nový_sloupec" +#~ msgid "could not get current user name: %s\n" +#~ msgstr "nelze získat aktuální uživatelské jméno: %s\n" -#~ msgid "tablespace" -#~ msgstr "tablespace" +#~ msgid "Object Description" +#~ msgstr "Popis objektu" -#~ msgid "contains support for command-line editing" -#~ msgstr "obsahuje podporu pro editaci příkazové řádky " +#~ msgid "Modifier" +#~ msgstr "Modifikátor" -#~ msgid "ABORT [ WORK | TRANSACTION ]" -#~ msgstr "ABORT [ WORK | TRANSACTION ]" +#~ msgid "No relations found.\n" +#~ msgstr "Žádné relace nenalezeny.\n" -#~ msgid " \"%s\" IN %s %s" -#~ msgstr " \"%s\" IN %s %s" +#~ msgid "No matching relations found.\n" +#~ msgstr "Odpovídající relace nebyla nalezena.\n" -#~ msgid "define a new constraint trigger" -#~ msgstr "defunuje nový constraint trigger" +#~ msgid "No settings found.\n" +#~ msgstr "Žádné nastavení nenalezeno.\n" -#~ msgid " as user \"%s\"" -#~ msgstr " jako uživatel \"%s\"" +#~ msgid "No matching settings found.\n" +#~ msgstr "Odpovídající relace nebyla nalezena.\n" -#~ msgid " at port \"%s\"" -#~ msgstr " na port \"%s\"" +#~ msgid "No per-database role settings support in this server version.\n" +#~ msgstr "Tato verze serveru nepodporuje nastavení rolí dle databáze.\n" -#~ msgid " on host \"%s\"" -#~ msgstr " na počítač \"%s\"" +#~ msgid "default %s" +#~ msgstr "implicitně %s" -#~ msgid "data type" -#~ msgstr "datový typ" +#~ msgid "not null" +#~ msgstr "not null" -#~ msgid "\\copy: unexpected response (%d)\n" -#~ msgstr "\\copy: neočekávaná odezva (%d)\n" +#~ msgid "collate %s" +#~ msgstr "collate %s" -#~ msgid "\\copy: %s" -#~ msgstr "\\copy: %s" +#~ msgid "Value" +#~ msgstr "Hodnota" -#~ msgid "\\%s: error\n" -#~ msgstr "\\%s: chyba\n" +#~ msgid "Modifiers" +#~ msgstr "Modifikátory" -#~ msgid "%s: could not open log file \"%s\": %s\n" -#~ msgstr "%s: nelze otevřít logovací soubor \"%s\": %s\n" +#~ msgid "normal" +#~ msgstr "normal" -#~ msgid "string_literal" -#~ msgstr "string_literal" +#~ msgid "could not set variable \"%s\"\n" +#~ msgstr "nelze nastavit proměnnou \"%s\"\n" -#~ msgid "unterminated quoted string\n" -#~ msgstr "neukončený řetězec v uvozovkách\n" +#~ msgid "Watch every %lds\t%s" +#~ msgstr "Zkontroluj každých %lds\t%s" -#~ msgid "%s\n" -#~ msgstr "%s\n" +#~ msgid "Showing only tuples." +#~ msgstr "Zobrazovány jsou pouze záznamy." -#~ msgid "Procedure" -#~ msgstr "Procedura" +#~ msgid "Showing locale-adjusted numeric output." +#~ msgstr "Zobrazí číselný výstup dle národního nastavení." -#~ msgid "%s: %s\n" -#~ msgstr "%s: %s\n" +#~ msgid "SSL connection (unknown cipher)\n" +#~ msgstr "SSL spojení (neznámá šifra)\n" -#~ msgid "Invalid command \\%s. Try \\? for help.\n" -#~ msgstr "Neplatný příkaz \\%s. Použijte \\? pro nápovědu.\n" +#~ msgid "+ opt(%d) = |%s|\n" +#~ msgstr "+ opt(%d) = |%s|\n" -#~ msgid "child process was terminated by signal %s" -#~ msgstr "potomek byl ukončen signálem %s" +#~ msgid "\\%s: error while setting variable\n" +#~ msgstr "\\%s: chyba při nastavování proměnné\n" -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "nelze číst symbolický link \"%s\"" +#~ msgid "Password encryption failed.\n" +#~ msgstr "Zašifrování hesla selhalo.\n" + +#~ msgid "lock a table" +#~ msgstr "uzamkne tabulku" + +#~ msgid "from_list" +#~ msgstr "from_seznam" + +#~ msgid "using_list" +#~ msgstr "using_seznam" + +#~ msgid "old_version" +#~ msgstr "stará_verze" + +#~ msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" +#~ msgstr " \\g [SOUBOR] nebo ; pošle SQL dotaz na server (a zapíše výsledek do souboru nebo |roury)\n" + +#~ msgid "Report bugs to .\n" +#~ msgstr "Chyby posílejte na adresu .\n" diff --git a/src/bin/psql/po/de.po b/src/bin/psql/po/de.po index c5228ed9a510d..dd6f7b3ddd0de 100644 --- a/src/bin/psql/po/de.po +++ b/src/bin/psql/po/de.po @@ -1,14 +1,14 @@ # German message translation file for psql -# Peter Eisentraut , 2001 - 2020. +# Peter Eisentraut , 2001 - 2021. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 13\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-09 00:14+0000\n" -"PO-Revision-Date: 2020-05-09 10:22+0200\n" +"POT-Creation-Date: 2021-05-06 22:45+0000\n" +"PO-Revision-Date: 2021-05-07 08:12+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -17,58 +17,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "Fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "Fehler: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "Warnung: " -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "konnte aktuelles Verzeichnis nicht ermitteln: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "ungültige Programmdatei »%s«" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "konnte Programmdatei »%s« nicht lesen" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "konnte kein »%s« zum Ausführen finden" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "konnte nicht in Verzeichnis »%s« wechseln: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht lesen: %m" -#: ../../common/exec.c:410 +#: ../../common/exec.c:409 #, c-format -msgid "pclose failed: %m" -msgstr "pclose fehlgeschlagen: %m" +msgid "%s() failed: %m" +msgstr "%s() fehlgeschlagen: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 -#: command.c:1255 input.c:227 mainloop.c:81 mainloop.c:403 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 +#: command.c:1315 command.c:3246 command.c:3295 command.c:3412 input.c:227 +#: mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" msgstr "Speicher aufgebraucht" @@ -89,7 +90,7 @@ msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" msgid "could not look up effective user ID %ld: %s" msgstr "konnte effektive Benutzer-ID %ld nicht nachschlagen: %s" -#: ../../common/username.c:45 command.c:559 +#: ../../common/username.c:45 command.c:565 msgid "user does not exist" msgstr "Benutzer existiert nicht" @@ -128,297 +129,310 @@ msgstr "Kindprozess wurde von Signal %d beendet: %s" msgid "child process exited with unrecognized status %d" msgstr "Kindprozess hat mit unbekanntem Status %d beendet" -#: ../../fe_utils/print.c:350 +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Abbruchsanforderung gesendet\n" + +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 +msgid "Could not send cancel request: " +msgstr "Konnte Abbruchsanforderung nicht senden: " + +#: ../../fe_utils/print.c:336 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu Zeile)" msgstr[1] "(%lu Zeilen)" -#: ../../fe_utils/print.c:3055 +#: ../../fe_utils/print.c:3039 #, c-format msgid "Interrupted\n" msgstr "Unterbrochen\n" -#: ../../fe_utils/print.c:3119 +#: ../../fe_utils/print.c:3103 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "Kann keinen weiteren Spaltenkopf zur Tabelle hinzufügen: Spaltenzahl %d überschritten.\n" -#: ../../fe_utils/print.c:3159 +#: ../../fe_utils/print.c:3143 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "Cann keine weitere Zelle zur Tabelle hinzufügen: Zellengesamtzahl %d überschritten.\n" -#: ../../fe_utils/print.c:3414 +#: ../../fe_utils/print.c:3401 #, c-format msgid "invalid output format (internal error): %d" msgstr "ungültiges Ausgabeformat (interner Fehler): %d" -#: ../../fe_utils/psqlscan.l:694 +#: ../../fe_utils/psqlscan.l:697 #, c-format msgid "skipping recursive expansion of variable \"%s\"" msgstr "rekursive Auswertung der Variable »%s« wird ausgelassen" -#: command.c:224 +#: command.c:230 #, c-format msgid "invalid command \\%s" msgstr "ungültige Anweisung \\%s" -#: command.c:226 +#: command.c:232 #, c-format msgid "Try \\? for help." msgstr "Versuchen Sie \\? für Hilfe." -#: command.c:244 +#: command.c:250 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: überflüssiges Argument »%s« ignoriert" -#: command.c:296 +#: command.c:302 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "Befehl \\%s ignoriert; verwenden Sie \\endif oder Strg-C um den aktuellen \\if-Block zu beenden" -#: command.c:557 +#: command.c:563 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "konnte Home-Verzeichnis für Benutzer-ID %ld nicht ermitteln: %s" -#: command.c:575 +#: command.c:581 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: konnte nicht in das Verzeichnis »%s« wechseln: %m" -#: command.c:600 +#: command.c:606 #, c-format msgid "You are currently not connected to a database.\n" msgstr "Sie sind gegenwärtig nicht mit einer Datenbank verbunden.\n" -#: command.c:613 +#: command.c:616 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Sie sind verbunden mit der Datenbank »%s« als Benutzer »%s« auf Adresse »%s« auf Port »%s«.\n" -#: command.c:616 +#: command.c:619 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Sie sind verbunden mit der Datenbank »%s« als Benutzer »%s« via Socket in »%s« auf Port »%s«.\n" -#: command.c:622 +#: command.c:625 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Sie sind verbunden mit der Datenbank »%s« als Benutzer »%s« auf Host »%s« (Adresse »%s«) auf Port »%s«.\n" -#: command.c:625 +#: command.c:628 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Sie sind verbunden mit der Datenbank »%s« als Benutzer »%s« auf Host »%s« auf Port »%s«.\n" -#: command.c:965 command.c:1061 command.c:2550 +#: command.c:1012 command.c:1121 command.c:2602 #, c-format msgid "no query buffer" msgstr "kein Anfragepuffer" -#: command.c:998 command.c:5061 +#: command.c:1045 command.c:5304 #, c-format msgid "invalid line number: %s" msgstr "ungültige Zeilennummer: %s" -#: command.c:1052 +#: command.c:1112 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "Der Server (Version %s) unterstützt das Bearbeiten des Funktionsquelltextes nicht." -#: command.c:1055 +#: command.c:1115 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "Der Server (Version %s) unterstützt das Bearbeiten von Sichtdefinitionen nicht." -#: command.c:1137 +#: command.c:1197 msgid "No changes" msgstr "keine Änderungen" -#: command.c:1216 +#: command.c:1276 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "%s: ungültiger Kodierungsname oder Umwandlungsprozedur nicht gefunden" -#: command.c:1251 command.c:1992 command.c:3253 command.c:5163 common.c:174 -#: common.c:223 common.c:388 common.c:1237 common.c:1265 common.c:1373 -#: common.c:1480 common.c:1518 copy.c:488 copy.c:707 help.c:62 large_obj.c:157 -#: large_obj.c:192 large_obj.c:254 +#: command.c:1311 command.c:2052 command.c:3242 command.c:3434 command.c:5406 +#: common.c:174 common.c:223 common.c:392 common.c:1248 common.c:1276 +#: common.c:1385 common.c:1492 common.c:1530 copy.c:488 copy.c:709 help.c:62 +#: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:298 #, c-format msgid "%s" msgstr "%s" -#: command.c:1258 +#: command.c:1318 msgid "There is no previous error." msgstr "Es gibt keinen vorangegangenen Fehler." -#: command.c:1371 +#: command.c:1431 #, c-format msgid "\\%s: missing right parenthesis" msgstr "\\%s: rechte Klammer fehlt" -#: command.c:1548 command.c:1853 command.c:1867 command.c:1884 command.c:2044 -#: command.c:2281 command.c:2517 command.c:2557 +#: command.c:1608 command.c:1913 command.c:1927 command.c:1944 command.c:2106 +#: command.c:2342 command.c:2569 command.c:2609 #, c-format msgid "\\%s: missing required argument" msgstr "\\%s: notwendiges Argument fehlt" -#: command.c:1679 +#: command.c:1739 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif: kann nicht nach \\else kommen" -#: command.c:1684 +#: command.c:1744 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif: kein passendes \\if" -#: command.c:1748 +#: command.c:1808 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else: kann nicht nach \\else kommen" -#: command.c:1753 +#: command.c:1813 #, c-format msgid "\\else: no matching \\if" msgstr "\\else: kein passendes \\if" -#: command.c:1793 +#: command.c:1853 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif: kein passendes \\if" -#: command.c:1948 +#: command.c:2008 msgid "Query buffer is empty." msgstr "Anfragepuffer ist leer." -#: command.c:1970 +#: command.c:2030 msgid "Enter new password: " msgstr "Neues Passwort eingeben: " -#: command.c:1971 +#: command.c:2031 msgid "Enter it again: " msgstr "Geben Sie es noch einmal ein: " -#: command.c:1975 +#: command.c:2035 #, c-format msgid "Passwords didn't match." msgstr "Passwörter stimmten nicht überein." -#: command.c:2074 +#: command.c:2135 #, c-format msgid "\\%s: could not read value for variable" msgstr "\\%s: konnte Wert für Variable nicht lesen" -#: command.c:2177 +#: command.c:2238 msgid "Query buffer reset (cleared)." msgstr "Anfragepuffer wurde gelöscht." -#: command.c:2199 +#: command.c:2260 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Befehlsgeschichte in Datei »%s« geschrieben.\n" -#: command.c:2286 +#: command.c:2347 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s: Name der Umgebungsvariable darf kein »=« enthalten" -#: command.c:2347 +#: command.c:2399 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "Der Server (Version %s) unterstützt das Anzeigen des Funktionsquelltextes nicht." -#: command.c:2350 +#: command.c:2402 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "Der Server (Version %s) unterstützt das Anzeigen von Sichtdefinitionen nicht." -#: command.c:2357 +#: command.c:2409 #, c-format msgid "function name is required" msgstr "Funktionsname wird benötigt" -#: command.c:2359 +#: command.c:2411 #, c-format msgid "view name is required" msgstr "Sichtname wird benötigt" -#: command.c:2489 +#: command.c:2541 msgid "Timing is on." msgstr "Zeitmessung ist an." -#: command.c:2491 +#: command.c:2543 msgid "Timing is off." msgstr "Zeitmessung ist aus." -#: command.c:2576 command.c:2604 command.c:3661 command.c:3664 command.c:3667 -#: command.c:3673 command.c:3675 command.c:3683 command.c:3693 command.c:3702 -#: command.c:3716 command.c:3733 command.c:3791 common.c:70 copy.c:331 +#: command.c:2628 command.c:2656 command.c:3873 command.c:3876 command.c:3879 +#: command.c:3885 command.c:3887 command.c:3913 command.c:3923 command.c:3935 +#: command.c:3949 command.c:3976 command.c:4034 common.c:70 copy.c:331 #: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s: %m" -#: command.c:2988 startup.c:236 startup.c:287 +#: command.c:3047 startup.c:237 startup.c:287 msgid "Password: " msgstr "Passwort: " -#: command.c:2993 startup.c:284 +#: command.c:3052 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "Passwort für Benutzer %s: " -#: command.c:3064 +#: command.c:3104 +#, c-format +msgid "Do not give user, host, or port separately when using a connection string" +msgstr "Geben Sie Benutzer, Host oder Port nicht separat an, wenn eine Verbindungsangabe verwendet wird" + +#: command.c:3139 #, c-format -msgid "All connection parameters must be supplied because no database connection exists" -msgstr "Alle Verbindungsparameter müssen angegeben werden, weil keine Datenbankverbindung besteht" +msgid "No database connection exists to re-use parameters from" +msgstr "Es gibt keine Verbindung, von der die Parameter verwendet werden können" -#: command.c:3257 +#: command.c:3440 #, c-format msgid "Previous connection kept" msgstr "Vorherige Verbindung wurde behalten" -#: command.c:3261 +#: command.c:3446 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:3310 +#: command.c:3502 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Sie sind jetzt verbunden mit der Datenbank »%s« als Benutzer »%s« auf Adresse »%s« auf Port »%s«.\n" -#: command.c:3313 +#: command.c:3505 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Sie sind jetzt verbunden mit der Datenbank »%s« als Benutzer »%s« via Socket in »%s« auf Port »%s«.\n" -#: command.c:3319 +#: command.c:3511 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Sie sind jetzt verbunden mit der Datenbank »%s« als Benutzer »%s« auf Host »%s« (Adresse »%s«) auf Port »%s«.\n" -#: command.c:3322 +#: command.c:3514 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Sie sind jetzt verbunden mit der Datenbank »%s« als Benutzer »%s« auf Host »%s« auf Port »%s«.\n" -#: command.c:3327 +#: command.c:3519 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Sie sind jetzt verbunden mit der Datenbank »%s« als Benutzer »%s«.\n" -#: command.c:3360 +#: command.c:3559 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, Server %s)\n" -#: command.c:3368 +#: command.c:3567 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" @@ -427,29 +441,29 @@ msgstr "" "WARNUNG: %s-Hauptversion %s, Server-Hauptversion %s.\n" " Einige Features von psql werden eventuell nicht funktionieren.\n" -#: command.c:3407 +#: command.c:3606 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "SSL-Verbindung (Protokoll: %s, Verschlüsselungsmethode: %s, Bits: %s, Komprimierung: %s)\n" -#: command.c:3408 command.c:3409 command.c:3410 +#: command.c:3607 command.c:3608 command.c:3609 msgid "unknown" msgstr "unbekannt" -#: command.c:3411 help.c:45 +#: command.c:3610 help.c:45 msgid "off" msgstr "aus" -#: command.c:3411 help.c:45 +#: command.c:3610 help.c:45 msgid "on" msgstr "an" -#: command.c:3425 +#: command.c:3624 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "GSSAPI-verschlüsselte Verbindung\n" -#: command.c:3445 +#: command.c:3644 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -461,259 +475,259 @@ msgstr "" " richtig. Einzelheiten finden Sie auf der psql-Handbuchseite unter\n" " »Notes for Windows users«.\n" -#: command.c:3549 +#: command.c:3749 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number" msgstr "Umgebungsvariable PSQL_EDITOR_LINENUMBER_ARG muss gesetzt werden, um eine Zeilennummer angeben zu können" -#: command.c:3578 +#: command.c:3778 #, c-format msgid "could not start editor \"%s\"" msgstr "konnte Editor »%s« nicht starten" -#: command.c:3580 +#: command.c:3780 #, c-format msgid "could not start /bin/sh" msgstr "konnte /bin/sh nicht starten" -#: command.c:3618 +#: command.c:3830 #, c-format msgid "could not locate temporary directory: %s" msgstr "konnte temporäres Verzeichnis nicht finden: %s" -#: command.c:3645 +#: command.c:3857 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "konnte temporäre Datei »%s« nicht öffnen: %m" -#: command.c:3950 +#: command.c:4193 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: Abkürzung »%s« ist nicht eindeutig, passt auf »%s« und »%s«" -#: command.c:3970 +#: command.c:4213 #, c-format msgid "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" msgstr "\\pset: zulässige Formate sind aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" -#: command.c:3989 +#: command.c:4232 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: zulässige Linienstile sind ascii, old-ascii, unicode" -#: command.c:4004 +#: command.c:4247 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: zulässige Unicode-Rahmnenlinienstile sind single, double" -#: command.c:4019 +#: command.c:4262 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: zulässige Unicode-Spaltenlinienstile sind single, double" -#: command.c:4034 +#: command.c:4277 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: zulässige Unicode-Kopflinienstile sind single, double" -#: command.c:4077 +#: command.c:4320 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsep muss ein einzelnes Ein-Byte-Zeichen sein" -#: command.c:4082 +#: command.c:4325 #, c-format msgid "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage return" msgstr "\\pset: csv_fieldsep kann nicht doppeltes Anführungszeichen, Newline oder Carriage Return sein" -#: command.c:4219 command.c:4407 +#: command.c:4462 command.c:4650 #, c-format msgid "\\pset: unknown option: %s" msgstr "\\pset: unbekannte Option: %s" -#: command.c:4239 +#: command.c:4482 #, c-format msgid "Border style is %d.\n" msgstr "Rahmenstil ist %d.\n" -#: command.c:4245 +#: command.c:4488 #, c-format msgid "Target width is unset.\n" msgstr "Zielbreite ist nicht gesetzt.\n" -#: command.c:4247 +#: command.c:4490 #, c-format msgid "Target width is %d.\n" msgstr "Zielbreite ist %d.\n" -#: command.c:4254 +#: command.c:4497 #, c-format msgid "Expanded display is on.\n" msgstr "Erweiterte Anzeige ist an.\n" -#: command.c:4256 +#: command.c:4499 #, c-format msgid "Expanded display is used automatically.\n" msgstr "Erweiterte Anzeige wird automatisch verwendet.\n" -#: command.c:4258 +#: command.c:4501 #, c-format msgid "Expanded display is off.\n" msgstr "Erweiterte Anzeige ist aus.\n" -#: command.c:4264 +#: command.c:4507 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "Feldtrennzeichen für CSV ist »%s«.\n" -#: command.c:4272 command.c:4280 +#: command.c:4515 command.c:4523 #, c-format msgid "Field separator is zero byte.\n" msgstr "Feldtrennzeichen ist ein Null-Byte.\n" -#: command.c:4274 +#: command.c:4517 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Feldtrennzeichen ist »%s«.\n" -#: command.c:4287 +#: command.c:4530 #, c-format msgid "Default footer is on.\n" msgstr "Standardfußzeile ist an.\n" -#: command.c:4289 +#: command.c:4532 #, c-format msgid "Default footer is off.\n" msgstr "Standardfußzeile ist aus.\n" -#: command.c:4295 +#: command.c:4538 #, c-format msgid "Output format is %s.\n" msgstr "Ausgabeformat ist »%s«.\n" -#: command.c:4301 +#: command.c:4544 #, c-format msgid "Line style is %s.\n" msgstr "Linienstil ist %s.\n" -#: command.c:4308 +#: command.c:4551 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null-Anzeige ist »%s«.\n" -#: command.c:4316 +#: command.c:4559 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "Lokalisiertes Format für numerische Daten ist an.\n" -#: command.c:4318 +#: command.c:4561 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "Lokalisiertes Format für numerische Daten ist aus.\n" -#: command.c:4325 +#: command.c:4568 #, c-format msgid "Pager is used for long output.\n" msgstr "Pager wird für lange Ausgaben verwendet.\n" -#: command.c:4327 +#: command.c:4570 #, c-format msgid "Pager is always used.\n" msgstr "Pager wird immer verwendet.\n" -#: command.c:4329 +#: command.c:4572 #, c-format msgid "Pager usage is off.\n" msgstr "Pager-Verwendung ist aus.\n" -#: command.c:4335 +#: command.c:4578 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" msgstr[0] "Pager wird nicht für weniger als %d Zeile verwendet werden.\n" msgstr[1] "Pager wird nicht für weniger als %d Zeilen verwendet werden.\n" -#: command.c:4345 command.c:4355 +#: command.c:4588 command.c:4598 #, c-format msgid "Record separator is zero byte.\n" msgstr "Satztrennzeichen ist ein Null-Byte.\n" -#: command.c:4347 +#: command.c:4590 #, c-format msgid "Record separator is .\n" msgstr "Satztrennzeichen ist .\n" -#: command.c:4349 +#: command.c:4592 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Satztrennzeichen ist »%s«.\n" -#: command.c:4362 +#: command.c:4605 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Tabellenattribute sind »%s«.\n" -#: command.c:4365 +#: command.c:4608 #, c-format msgid "Table attributes unset.\n" msgstr "Tabellenattribute sind nicht gesetzt.\n" -#: command.c:4372 +#: command.c:4615 #, c-format msgid "Title is \"%s\".\n" msgstr "Titel ist »%s«.\n" -#: command.c:4374 +#: command.c:4617 #, c-format msgid "Title is unset.\n" msgstr "Titel ist nicht gesetzt.\n" -#: command.c:4381 +#: command.c:4624 #, c-format msgid "Tuples only is on.\n" msgstr "Nur Datenzeilen ist an.\n" -#: command.c:4383 +#: command.c:4626 #, c-format msgid "Tuples only is off.\n" msgstr "Nur Datenzeilen ist aus.\n" -#: command.c:4389 +#: command.c:4632 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "Unicode-Rahmenlinienstil ist »%s«.\n" -#: command.c:4395 +#: command.c:4638 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "Unicode-Spaltenlinienstil ist »%s«.\n" -#: command.c:4401 +#: command.c:4644 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "Unicode-Kopflinienstil ist »%s«.\n" -#: command.c:4634 +#: command.c:4877 #, c-format msgid "\\!: failed" msgstr "\\!: fehlgeschlagen" -#: command.c:4659 common.c:648 +#: command.c:4902 common.c:652 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch kann nicht mit einer leeren Anfrage verwendet werden" -#: command.c:4700 +#: command.c:4943 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (alle %gs)\n" -#: command.c:4703 +#: command.c:4946 #, c-format msgid "%s (every %gs)\n" msgstr "%s (alle %gs)\n" -#: command.c:4757 command.c:4764 common.c:548 common.c:555 common.c:1220 +#: command.c:5000 command.c:5007 common.c:552 common.c:559 common.c:1231 #, c-format msgid "" "********* QUERY **********\n" @@ -726,12 +740,12 @@ msgstr "" "**************************\n" "\n" -#: command.c:4956 +#: command.c:5199 #, c-format msgid "\"%s.%s\" is not a view" msgstr "»%s.%s« ist keine Sicht" -#: command.c:4972 +#: command.c:5215 #, c-format msgid "could not parse reloptions array" msgstr "konnte reloptions-Array nicht interpretieren" @@ -761,77 +775,82 @@ msgstr "Die Verbindung zum Server wurde verloren. Versuche Reset: " msgid "Failed.\n" msgstr "Fehlgeschlagen.\n" -#: common.c:326 +#: common.c:330 #, c-format msgid "Succeeded.\n" msgstr "Erfolgreich.\n" -#: common.c:378 common.c:938 common.c:1155 +#: common.c:382 common.c:949 common.c:1166 #, c-format msgid "unexpected PQresultStatus: %d" msgstr "unerwarteter PQresultStatus: %d" -#: common.c:487 +#: common.c:491 #, c-format msgid "Time: %.3f ms\n" msgstr "Zeit: %.3f ms\n" -#: common.c:502 +#: common.c:506 #, c-format msgid "Time: %.3f ms (%02d:%06.3f)\n" msgstr "Zeit: %.3f ms (%02d:%06.3f)\n" -#: common.c:511 +#: common.c:515 #, c-format msgid "Time: %.3f ms (%02d:%02d:%06.3f)\n" msgstr "Zeit: %.3f ms (%02d:%02d:%06.3f)\n" -#: common.c:518 +#: common.c:522 #, c-format msgid "Time: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" msgstr "Zeit: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" -#: common.c:542 common.c:600 common.c:1191 +#: common.c:546 common.c:604 common.c:1202 #, c-format msgid "You are currently not connected to a database." msgstr "Sie sind gegenwärtig nicht mit einer Datenbank verbunden." -#: common.c:655 +#: common.c:659 #, c-format msgid "\\watch cannot be used with COPY" msgstr "\\watch kann nicht mit COPY verwendet werden" -#: common.c:660 +#: common.c:664 #, c-format msgid "unexpected result status for \\watch" msgstr "unerwarteter Ergebnisstatus für \\watch" -#: common.c:690 +#: common.c:694 #, c-format msgid "Asynchronous notification \"%s\" with payload \"%s\" received from server process with PID %d.\n" msgstr "Asynchrone Benachrichtigung »%s« mit Daten »%s« vom Serverprozess mit PID %d empfangen.\n" -#: common.c:693 +#: common.c:697 #, c-format msgid "Asynchronous notification \"%s\" received from server process with PID %d.\n" msgstr "Asynchrone Benachrichtigung »%s« vom Serverprozess mit PID %d empfangen.\n" -#: common.c:726 common.c:743 +#: common.c:730 common.c:747 #, c-format msgid "could not print result table: %m" msgstr "konnte Ergebnistabelle nicht ausgeben: %m" -#: common.c:764 +#: common.c:768 #, c-format msgid "no rows returned for \\gset" msgstr "keine Zeilen für \\gset zurückgegeben" -#: common.c:769 +#: common.c:773 #, c-format msgid "more than one row returned for \\gset" msgstr "mehr als eine Zeile für \\gset zurückgegeben" -#: common.c:1200 +#: common.c:791 +#, c-format +msgid "attempt to \\gset into specially treated variable \"%s\" ignored" +msgstr "Versuch von \\gset in besonders behandelte Variable »%s« ignoriert" + +#: common.c:1211 #, c-format msgid "" "***(Single step mode: verify command)*******************************************\n" @@ -842,33 +861,33 @@ msgstr "" "%s\n" "***(Drücken Sie die Eingabetaste um fortzufahren oder »x« um abzubrechen)*******\n" -#: common.c:1255 +#: common.c:1266 #, c-format msgid "The server (version %s) does not support savepoints for ON_ERROR_ROLLBACK." msgstr "Der Server (Version %s) unterstützt keine Sicherungspunkte für ON_ERROR_ROLLBACK." -#: common.c:1318 +#: common.c:1329 #, c-format msgid "STATEMENT: %s" msgstr "ANWEISUNG: %s" -#: common.c:1361 +#: common.c:1373 #, c-format msgid "unexpected transaction status (%d)" msgstr "unerwarteter Transaktionsstatus (%d)" -#: common.c:1502 describe.c:2001 +#: common.c:1514 describe.c:2179 msgid "Column" msgstr "Spalte" -#: common.c:1503 describe.c:177 describe.c:393 describe.c:411 describe.c:456 -#: describe.c:473 describe.c:962 describe.c:1126 describe.c:1711 -#: describe.c:1735 describe.c:2002 describe.c:3719 describe.c:3929 -#: describe.c:4162 describe.c:5368 +#: common.c:1515 describe.c:178 describe.c:396 describe.c:414 describe.c:459 +#: describe.c:476 describe.c:1128 describe.c:1292 describe.c:1878 +#: describe.c:1902 describe.c:2180 describe.c:4048 describe.c:4271 +#: describe.c:4496 describe.c:5794 msgid "Type" msgstr "Typ" -#: common.c:1552 +#: common.c:1564 #, c-format msgid "The command has no result, or the result has no columns.\n" msgstr "Der Befehl hat kein Ergebnis oder das Ergebnis hat keine Spalten.\n" @@ -935,11 +954,11 @@ msgstr "" "Geben Sie die zu kopierenden Daten ein, gefolgt von einem Zeilenende.\n" "Beenden Sie mit einem Backslash und einem Punkt alleine auf einer Zeile, oder einem EOF-Signal." -#: copy.c:669 +#: copy.c:671 msgid "aborted because of read failure" msgstr "abgebrochen wegen Lesenfehlers" -#: copy.c:703 +#: copy.c:705 msgid "trying to exit copy mode" msgstr "versuche, den COPY-Modus zu verlassen" @@ -988,1114 +1007,1147 @@ msgstr "\\crosstabview: zweideutiger Spaltenname: »%s«" msgid "\\crosstabview: column name not found: \"%s\"" msgstr "\\crosstabview: Spaltenname nicht gefunden: »%s«" -#: describe.c:75 describe.c:373 describe.c:678 describe.c:810 describe.c:954 -#: describe.c:1115 describe.c:1187 describe.c:3708 describe.c:3916 -#: describe.c:4160 describe.c:4251 describe.c:4518 describe.c:4678 -#: describe.c:4919 describe.c:4994 describe.c:5005 describe.c:5067 -#: describe.c:5492 describe.c:5575 +#: describe.c:76 describe.c:376 describe.c:728 describe.c:924 describe.c:1120 +#: describe.c:1281 describe.c:1353 describe.c:4036 describe.c:4258 +#: describe.c:4494 describe.c:4585 describe.c:4731 describe.c:4944 +#: describe.c:5104 describe.c:5345 describe.c:5420 describe.c:5431 +#: describe.c:5493 describe.c:5918 describe.c:6001 msgid "Schema" msgstr "Schema" -#: describe.c:76 describe.c:174 describe.c:242 describe.c:250 describe.c:374 -#: describe.c:679 describe.c:811 describe.c:872 describe.c:955 describe.c:1188 -#: describe.c:3709 describe.c:3917 describe.c:4083 describe.c:4161 -#: describe.c:4252 describe.c:4331 describe.c:4519 describe.c:4603 -#: describe.c:4679 describe.c:4920 describe.c:4995 describe.c:5006 -#: describe.c:5068 describe.c:5265 describe.c:5349 describe.c:5573 -#: describe.c:5745 describe.c:5985 +#: describe.c:77 describe.c:175 describe.c:243 describe.c:251 describe.c:377 +#: describe.c:729 describe.c:925 describe.c:1038 describe.c:1121 +#: describe.c:1354 describe.c:4037 describe.c:4259 describe.c:4417 +#: describe.c:4495 describe.c:4586 describe.c:4665 describe.c:4732 +#: describe.c:4945 describe.c:5029 describe.c:5105 describe.c:5346 +#: describe.c:5421 describe.c:5432 describe.c:5494 describe.c:5691 +#: describe.c:5775 describe.c:5999 describe.c:6171 describe.c:6411 msgid "Name" msgstr "Name" -#: describe.c:77 describe.c:386 describe.c:404 describe.c:450 describe.c:467 +#: describe.c:78 describe.c:389 describe.c:407 describe.c:453 describe.c:470 msgid "Result data type" msgstr "Ergebnisdatentyp" -#: describe.c:85 describe.c:98 describe.c:102 describe.c:387 describe.c:405 -#: describe.c:451 describe.c:468 +#: describe.c:86 describe.c:99 describe.c:103 describe.c:390 describe.c:408 +#: describe.c:454 describe.c:471 msgid "Argument data types" msgstr "Argumentdatentypen" -#: describe.c:110 describe.c:117 describe.c:185 describe.c:273 describe.c:513 -#: describe.c:727 describe.c:826 describe.c:897 describe.c:1190 describe.c:2020 -#: describe.c:3496 describe.c:3769 describe.c:3963 describe.c:4114 -#: describe.c:4188 describe.c:4261 describe.c:4344 describe.c:4427 -#: describe.c:4546 describe.c:4612 describe.c:4680 describe.c:4821 -#: describe.c:4863 describe.c:4936 describe.c:4998 describe.c:5007 -#: describe.c:5069 describe.c:5291 describe.c:5371 describe.c:5506 -#: describe.c:5576 large_obj.c:290 large_obj.c:300 +#: describe.c:111 describe.c:118 describe.c:186 describe.c:274 describe.c:523 +#: describe.c:777 describe.c:940 describe.c:1063 describe.c:1356 +#: describe.c:2200 describe.c:3823 describe.c:4108 describe.c:4305 +#: describe.c:4448 describe.c:4522 describe.c:4595 describe.c:4678 +#: describe.c:4853 describe.c:4972 describe.c:5038 describe.c:5106 +#: describe.c:5247 describe.c:5289 describe.c:5362 describe.c:5424 +#: describe.c:5433 describe.c:5495 describe.c:5717 describe.c:5797 +#: describe.c:5932 describe.c:6002 large_obj.c:290 large_obj.c:300 msgid "Description" msgstr "Beschreibung" -#: describe.c:135 +#: describe.c:136 msgid "List of aggregate functions" msgstr "Liste der Aggregatfunktionen" -#: describe.c:160 +#: describe.c:161 #, c-format msgid "The server (version %s) does not support access methods." msgstr "Der Server (Version %s) unterstützt keine Zugriffsmethoden." -#: describe.c:175 +#: describe.c:176 msgid "Index" msgstr "Index" -#: describe.c:176 describe.c:3727 describe.c:3942 describe.c:5493 +#: describe.c:177 describe.c:4056 describe.c:4284 describe.c:5919 msgid "Table" msgstr "Tabelle" -#: describe.c:184 describe.c:5270 +#: describe.c:185 describe.c:5696 msgid "Handler" msgstr "Handler" -#: describe.c:203 +#: describe.c:204 msgid "List of access methods" msgstr "Liste der Zugriffsmethoden" -#: describe.c:229 +#: describe.c:230 #, c-format msgid "The server (version %s) does not support tablespaces." msgstr "Der Server (Version %s) unterstützt keine Tablespaces." -#: describe.c:243 describe.c:251 describe.c:501 describe.c:717 describe.c:873 -#: describe.c:1114 describe.c:3720 describe.c:3918 describe.c:4087 -#: describe.c:4333 describe.c:4604 describe.c:5266 describe.c:5350 -#: describe.c:5746 describe.c:5883 describe.c:5986 describe.c:6101 -#: describe.c:6175 large_obj.c:289 +#: describe.c:244 describe.c:252 describe.c:504 describe.c:767 describe.c:1039 +#: describe.c:1280 describe.c:4049 describe.c:4260 describe.c:4421 +#: describe.c:4667 describe.c:5030 describe.c:5692 describe.c:5776 +#: describe.c:6172 describe.c:6309 describe.c:6412 describe.c:6535 +#: describe.c:6613 large_obj.c:289 msgid "Owner" msgstr "Eigentümer" -#: describe.c:244 describe.c:252 +#: describe.c:245 describe.c:253 msgid "Location" msgstr "Pfad" -#: describe.c:263 describe.c:3313 +#: describe.c:264 describe.c:3639 msgid "Options" msgstr "Optionen" -#: describe.c:268 describe.c:690 describe.c:889 describe.c:3761 describe.c:3765 +#: describe.c:269 describe.c:740 describe.c:1055 describe.c:4100 +#: describe.c:4104 msgid "Size" msgstr "Größe" -#: describe.c:290 +#: describe.c:291 msgid "List of tablespaces" msgstr "Liste der Tablespaces" -#: describe.c:333 +#: describe.c:336 #, c-format msgid "\\df only takes [anptwS+] as options" msgstr "\\df akzeptiert nur [anptwS+] als Optionen" -#: describe.c:341 describe.c:352 +#: describe.c:344 describe.c:355 #, c-format msgid "\\df does not take a \"%c\" option with server version %s" msgstr "\\df akzeptiert die Option »%c« nicht mit Serverversion %s" #. translator: "agg" is short for "aggregate" -#: describe.c:389 describe.c:407 describe.c:453 describe.c:470 +#: describe.c:392 describe.c:410 describe.c:456 describe.c:473 msgid "agg" msgstr "Agg" -#: describe.c:390 describe.c:408 +#: describe.c:393 describe.c:411 msgid "window" msgstr "Fenster" -#: describe.c:391 +#: describe.c:394 msgid "proc" msgstr "Proz" -#: describe.c:392 describe.c:410 describe.c:455 describe.c:472 +#: describe.c:395 describe.c:413 describe.c:458 describe.c:475 msgid "func" msgstr "Funk" -#: describe.c:409 describe.c:454 describe.c:471 describe.c:1324 +#: describe.c:412 describe.c:457 describe.c:474 describe.c:1490 msgid "trigger" msgstr "Trigger" -#: describe.c:483 +#: describe.c:486 msgid "immutable" msgstr "unveränderlich" -#: describe.c:484 +#: describe.c:487 msgid "stable" msgstr "stabil" -#: describe.c:485 +#: describe.c:488 msgid "volatile" msgstr "volatil" -#: describe.c:486 +#: describe.c:489 msgid "Volatility" msgstr "Volatilität" -#: describe.c:494 +#: describe.c:497 msgid "restricted" msgstr "beschränkt" -#: describe.c:495 +#: describe.c:498 msgid "safe" msgstr "sicher" -#: describe.c:496 +#: describe.c:499 msgid "unsafe" msgstr "unsicher" -#: describe.c:497 +#: describe.c:500 msgid "Parallel" msgstr "Parallel" -#: describe.c:502 +#: describe.c:505 msgid "definer" msgstr "definer" -#: describe.c:503 +#: describe.c:506 msgid "invoker" msgstr "invoker" -#: describe.c:504 +#: describe.c:507 msgid "Security" msgstr "Sicherheit" -#: describe.c:511 +#: describe.c:512 msgid "Language" msgstr "Sprache" -#: describe.c:512 +#: describe.c:516 describe.c:520 msgid "Source code" msgstr "Quelltext" -#: describe.c:641 +#: describe.c:691 msgid "List of functions" msgstr "Liste der Funktionen" -#: describe.c:689 +#: describe.c:739 msgid "Internal name" msgstr "Interner Name" -#: describe.c:711 +#: describe.c:761 msgid "Elements" msgstr "Elemente" -#: describe.c:768 +#: describe.c:822 msgid "List of data types" msgstr "Liste der Datentypen" -#: describe.c:812 describe.c:6343 +#: describe.c:926 msgid "Left arg type" msgstr "Linker Typ" -#: describe.c:813 describe.c:6344 +#: describe.c:927 msgid "Right arg type" msgstr "Rechter Typ" -#: describe.c:814 +#: describe.c:928 msgid "Result type" msgstr "Ergebnistyp" -#: describe.c:819 describe.c:4339 describe.c:4404 describe.c:4410 -#: describe.c:4820 +#: describe.c:933 describe.c:4673 describe.c:4830 describe.c:4836 +#: describe.c:5246 describe.c:6784 describe.c:6788 msgid "Function" msgstr "Funktion" -#: describe.c:844 +#: describe.c:1010 msgid "List of operators" msgstr "Liste der Operatoren" -#: describe.c:874 +#: describe.c:1040 msgid "Encoding" msgstr "Kodierung" -#: describe.c:879 describe.c:4520 +#: describe.c:1045 describe.c:4946 msgid "Collate" msgstr "Sortierfolge" -#: describe.c:880 describe.c:4521 +#: describe.c:1046 describe.c:4947 msgid "Ctype" msgstr "Zeichentyp" -#: describe.c:893 +#: describe.c:1059 msgid "Tablespace" msgstr "Tablespace" -#: describe.c:915 +#: describe.c:1081 msgid "List of databases" msgstr "Liste der Datenbanken" -#: describe.c:956 describe.c:1117 describe.c:3710 +#: describe.c:1122 describe.c:1283 describe.c:4038 msgid "table" msgstr "Tabelle" -#: describe.c:957 describe.c:3711 +#: describe.c:1123 describe.c:4039 msgid "view" msgstr "Sicht" -#: describe.c:958 describe.c:3712 +#: describe.c:1124 describe.c:4040 msgid "materialized view" msgstr "materialisierte Sicht" -#: describe.c:959 describe.c:1119 describe.c:3714 +#: describe.c:1125 describe.c:1285 describe.c:4042 msgid "sequence" msgstr "Sequenz" -#: describe.c:960 describe.c:3716 +#: describe.c:1126 describe.c:4045 msgid "foreign table" msgstr "Fremdtabelle" -#: describe.c:961 describe.c:3717 describe.c:3927 +#: describe.c:1127 describe.c:4046 describe.c:4269 msgid "partitioned table" msgstr "partitionierte Tabelle" -#: describe.c:973 +#: describe.c:1139 msgid "Column privileges" msgstr "Spaltenprivilegien" -#: describe.c:1004 describe.c:1038 +#: describe.c:1170 describe.c:1204 msgid "Policies" msgstr "Policys" -#: describe.c:1070 describe.c:6042 describe.c:6046 +#: describe.c:1236 describe.c:6476 describe.c:6480 msgid "Access privileges" msgstr "Zugriffsprivilegien" -#: describe.c:1101 +#: describe.c:1267 #, c-format msgid "The server (version %s) does not support altering default privileges." msgstr "Der Server (Version %s) unterstützt kein Ändern der Vorgabeprivilegien." -#: describe.c:1121 +#: describe.c:1287 msgid "function" msgstr "Funktion" -#: describe.c:1123 +#: describe.c:1289 msgid "type" msgstr "Typ" -#: describe.c:1125 +#: describe.c:1291 msgid "schema" msgstr "Schema" -#: describe.c:1149 +#: describe.c:1315 msgid "Default access privileges" msgstr "Vorgegebene Zugriffsprivilegien" -#: describe.c:1189 +#: describe.c:1355 msgid "Object" msgstr "Objekt" -#: describe.c:1203 +#: describe.c:1369 msgid "table constraint" msgstr "Tabellen-Constraint" -#: describe.c:1225 +#: describe.c:1391 msgid "domain constraint" msgstr "Domänen-Constraint" -#: describe.c:1253 +#: describe.c:1419 msgid "operator class" msgstr "Operatorklasse" -#: describe.c:1282 +#: describe.c:1448 msgid "operator family" msgstr "Operatorfamilie" -#: describe.c:1304 +#: describe.c:1470 msgid "rule" msgstr "Rule" -#: describe.c:1346 +#: describe.c:1512 msgid "Object descriptions" msgstr "Objektbeschreibungen" -#: describe.c:1402 describe.c:3833 +#: describe.c:1568 describe.c:4175 #, c-format msgid "Did not find any relation named \"%s\"." msgstr "Keine Relation namens »%s« gefunden" -#: describe.c:1405 describe.c:3836 +#: describe.c:1571 describe.c:4178 #, c-format msgid "Did not find any relations." msgstr "Keine Relationen gefunden" -#: describe.c:1660 +#: describe.c:1827 #, c-format msgid "Did not find any relation with OID %s." msgstr "Keine Relation mit OID %s gefunden" -#: describe.c:1712 describe.c:1736 +#: describe.c:1879 describe.c:1903 msgid "Start" msgstr "Start" -#: describe.c:1713 describe.c:1737 +#: describe.c:1880 describe.c:1904 msgid "Minimum" msgstr "Minimum" -#: describe.c:1714 describe.c:1738 +#: describe.c:1881 describe.c:1905 msgid "Maximum" msgstr "Maximum" -#: describe.c:1715 describe.c:1739 +#: describe.c:1882 describe.c:1906 msgid "Increment" msgstr "Inkrement" -#: describe.c:1716 describe.c:1740 describe.c:1871 describe.c:4255 -#: describe.c:4421 describe.c:4535 describe.c:4540 describe.c:6089 +#: describe.c:1883 describe.c:1907 describe.c:2038 describe.c:4589 +#: describe.c:4847 describe.c:4961 describe.c:4966 describe.c:6523 msgid "yes" msgstr "ja" -#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4255 -#: describe.c:4418 describe.c:4535 describe.c:6090 +#: describe.c:1884 describe.c:1908 describe.c:2039 describe.c:4589 +#: describe.c:4844 describe.c:4961 describe.c:6524 msgid "no" msgstr "nein" -#: describe.c:1718 describe.c:1742 +#: describe.c:1885 describe.c:1909 msgid "Cycles?" msgstr "Zyklisch?" -#: describe.c:1719 describe.c:1743 +#: describe.c:1886 describe.c:1910 msgid "Cache" msgstr "Cache" -#: describe.c:1786 +#: describe.c:1953 #, c-format msgid "Owned by: %s" msgstr "Eigentümer: %s" -#: describe.c:1790 +#: describe.c:1957 #, c-format msgid "Sequence for identity column: %s" msgstr "Sequenz für Identitätsspalte: %s" -#: describe.c:1797 +#: describe.c:1964 #, c-format msgid "Sequence \"%s.%s\"" msgstr "Sequenz »%s.%s«" -#: describe.c:1933 +#: describe.c:2111 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "Ungeloggte Tabelle »%s.%s«" -#: describe.c:1936 +#: describe.c:2114 #, c-format msgid "Table \"%s.%s\"" msgstr "Tabelle »%s.%s«" -#: describe.c:1940 +#: describe.c:2118 #, c-format msgid "View \"%s.%s\"" msgstr "Sicht »%s.%s«" -#: describe.c:1945 +#: describe.c:2123 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "Ungeloggte materialisierte Sicht »%s.%s«" -#: describe.c:1948 +#: describe.c:2126 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "Materialisierte Sicht »%s.%s«" -#: describe.c:1953 +#: describe.c:2131 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "Ungeloggter Index »%s.%s«" -#: describe.c:1956 +#: describe.c:2134 #, c-format msgid "Index \"%s.%s\"" msgstr "Index »%s.%s«" -#: describe.c:1961 +#: describe.c:2139 #, c-format msgid "Unlogged partitioned index \"%s.%s\"" msgstr "Ungeloggter partitionierter Index »%s.%s«" -#: describe.c:1964 +#: describe.c:2142 #, c-format msgid "Partitioned index \"%s.%s\"" msgstr "Partitionierter Index »%s.%s«" -#: describe.c:1969 +#: describe.c:2147 #, c-format msgid "Special relation \"%s.%s\"" msgstr "Spezielle Relation »%s.%s«" -#: describe.c:1973 +#: describe.c:2151 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "TOAST-Tabelle »%s.%s«" -#: describe.c:1977 +#: describe.c:2155 #, c-format msgid "Composite type \"%s.%s\"" msgstr "Zusammengesetzter Typ »%s.%s«" -#: describe.c:1981 +#: describe.c:2159 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "Fremdtabelle »%s.%s«" -#: describe.c:1986 +#: describe.c:2164 #, c-format msgid "Unlogged partitioned table \"%s.%s\"" msgstr "Ungeloggte partitionierte Tabelle »%s.%s«" -#: describe.c:1989 +#: describe.c:2167 #, c-format msgid "Partitioned table \"%s.%s\"" msgstr "Partitionierte Tabelle »%s.%s«" -#: describe.c:2005 describe.c:4168 +#: describe.c:2183 describe.c:4502 msgid "Collation" msgstr "Sortierfolge" -#: describe.c:2006 describe.c:4175 +#: describe.c:2184 describe.c:4509 msgid "Nullable" msgstr "NULL erlaubt?" -#: describe.c:2007 describe.c:4176 +#: describe.c:2185 describe.c:4510 msgid "Default" msgstr "Vorgabewert" -#: describe.c:2010 +#: describe.c:2188 msgid "Key?" msgstr "Schlüssel?" -#: describe.c:2012 +#: describe.c:2190 describe.c:4739 describe.c:4750 msgid "Definition" msgstr "Definition" -#: describe.c:2014 describe.c:5286 describe.c:5370 describe.c:5441 -#: describe.c:5505 +#: describe.c:2192 describe.c:5712 describe.c:5796 describe.c:5867 +#: describe.c:5931 msgid "FDW options" msgstr "FDW-Optionen" -#: describe.c:2016 +#: describe.c:2194 msgid "Storage" msgstr "Speicherung" -#: describe.c:2018 +#: describe.c:2196 +msgid "Compression" +msgstr "Kompression" + +#: describe.c:2198 msgid "Stats target" msgstr "Statistikziel" -#: describe.c:2131 +#: describe.c:2334 #, c-format -msgid "Partition of: %s %s" -msgstr "Partition von: %s %s" +msgid "Partition of: %s %s%s" +msgstr "Partition von: %s %s%s" -#: describe.c:2143 +#: describe.c:2347 msgid "No partition constraint" msgstr "Kein Partitions-Constraint" -#: describe.c:2145 +#: describe.c:2349 #, c-format msgid "Partition constraint: %s" msgstr "Partitions-Constraint: %s" -#: describe.c:2169 +#: describe.c:2373 #, c-format msgid "Partition key: %s" msgstr "Partitionsschlüssel: %s" -#: describe.c:2195 -#, fuzzy, c-format -#| msgid "Foreign table \"%s.%s\"" +#: describe.c:2399 +#, c-format msgid "Owning table: \"%s.%s\"" -msgstr "Fremdtabelle »%s.%s«" +msgstr "Gehört zu Tabelle: »%s.%s«" -#: describe.c:2266 +#: describe.c:2470 msgid "primary key, " msgstr "Primärschlüssel, " -#: describe.c:2268 +#: describe.c:2472 msgid "unique, " msgstr "eindeutig, " -#: describe.c:2274 +#: describe.c:2478 #, c-format msgid "for table \"%s.%s\"" msgstr "für Tabelle »%s.%s«" -#: describe.c:2278 +#: describe.c:2482 #, c-format msgid ", predicate (%s)" msgstr ", Prädikat (%s)" -#: describe.c:2281 +#: describe.c:2485 msgid ", clustered" msgstr ", geclustert" -#: describe.c:2284 +#: describe.c:2488 msgid ", invalid" msgstr ", ungültig" -#: describe.c:2287 +#: describe.c:2491 msgid ", deferrable" msgstr ", DEFERRABLE" -#: describe.c:2290 +#: describe.c:2494 msgid ", initially deferred" msgstr ", INITIALLY DEFERRED" -#: describe.c:2293 +#: describe.c:2497 msgid ", replica identity" msgstr ", Replika-Identität" -#: describe.c:2360 +#: describe.c:2564 msgid "Indexes:" msgstr "Indexe:" -#: describe.c:2444 +#: describe.c:2648 msgid "Check constraints:" msgstr "Check-Constraints:" -#: describe.c:2512 +#: describe.c:2716 msgid "Foreign-key constraints:" msgstr "Fremdschlüssel-Constraints:" -#: describe.c:2575 +#: describe.c:2779 msgid "Referenced by:" msgstr "Fremdschlüsselverweise von:" -#: describe.c:2625 +#: describe.c:2829 msgid "Policies:" msgstr "Policys:" -#: describe.c:2628 +#: describe.c:2832 msgid "Policies (forced row security enabled):" msgstr "Policys (Sicherheit auf Zeilenebene erzwungen):" -#: describe.c:2631 +#: describe.c:2835 msgid "Policies (row security enabled): (none)" msgstr "Policys (Sicherheit auf Zeilenebene eingeschaltet): (keine)" -#: describe.c:2634 +#: describe.c:2838 msgid "Policies (forced row security enabled): (none)" msgstr "Policys (Sicherheit auf Zeilenebene erzwungen): (keine)" -#: describe.c:2637 +#: describe.c:2841 msgid "Policies (row security disabled):" msgstr "Policys (Sicherheit auf Zeilenebene ausgeschaltet):" -#: describe.c:2700 +#: describe.c:2902 describe.c:3006 msgid "Statistics objects:" msgstr "Statistikobjekte:" -#: describe.c:2809 describe.c:2913 +#: describe.c:3120 describe.c:3224 msgid "Rules:" msgstr "Regeln:" -#: describe.c:2812 +#: describe.c:3123 msgid "Disabled rules:" msgstr "Abgeschaltete Regeln:" -#: describe.c:2815 +#: describe.c:3126 msgid "Rules firing always:" msgstr "Regeln, die immer aktiv werden:" -#: describe.c:2818 +#: describe.c:3129 msgid "Rules firing on replica only:" msgstr "Regeln, die nur im Replikat aktiv werden:" -#: describe.c:2858 +#: describe.c:3169 msgid "Publications:" msgstr "Publikationen:" -#: describe.c:2896 +#: describe.c:3207 msgid "View definition:" msgstr "Sichtdefinition:" -#: describe.c:3043 +#: describe.c:3354 msgid "Triggers:" msgstr "Trigger:" -#: describe.c:3047 +#: describe.c:3358 msgid "Disabled user triggers:" msgstr "Abgeschaltete Benutzer-Trigger:" -#: describe.c:3049 +#: describe.c:3360 msgid "Disabled triggers:" msgstr "Abgeschaltete Trigger:" -#: describe.c:3052 +#: describe.c:3363 msgid "Disabled internal triggers:" msgstr "Abgeschaltete interne Trigger:" -#: describe.c:3055 +#: describe.c:3366 msgid "Triggers firing always:" msgstr "Trigger, die immer aktiv werden:" -#: describe.c:3058 +#: describe.c:3369 msgid "Triggers firing on replica only:" msgstr "Trigger, die nur im Replikat aktiv werden:" -#: describe.c:3130 +#: describe.c:3441 #, c-format msgid "Server: %s" msgstr "Server: %s" -#: describe.c:3138 +#: describe.c:3449 #, c-format msgid "FDW options: (%s)" msgstr "FDW-Optionen: (%s)" -#: describe.c:3159 +#: describe.c:3470 msgid "Inherits" msgstr "Erbt von" -#: describe.c:3219 +#: describe.c:3543 #, c-format msgid "Number of partitions: %d" msgstr "Anzahl Partitionen: %d" -#: describe.c:3228 +#: describe.c:3552 #, c-format msgid "Number of partitions: %d (Use \\d+ to list them.)" msgstr "Anzahl Partitionen: %d (Mit \\d+ alle anzeigen.)" -#: describe.c:3230 +#: describe.c:3554 #, c-format msgid "Number of child tables: %d (Use \\d+ to list them.)" msgstr "Anzahl Kindtabellen: %d (Mit \\d+ alle anzeigen.)" -#: describe.c:3237 +#: describe.c:3561 msgid "Child tables" msgstr "Kindtabellen" -#: describe.c:3237 +#: describe.c:3561 msgid "Partitions" msgstr "Partitionen" -#: describe.c:3266 +#: describe.c:3592 #, c-format msgid "Typed table of type: %s" msgstr "Getypte Tabelle vom Typ: %s" -#: describe.c:3282 +#: describe.c:3608 msgid "Replica Identity" msgstr "Replika-Identität" -#: describe.c:3295 +#: describe.c:3621 msgid "Has OIDs: yes" msgstr "Hat OIDs: ja" -#: describe.c:3304 +#: describe.c:3630 #, c-format msgid "Access method: %s" msgstr "Zugriffsmethode: %s" -#: describe.c:3384 +#: describe.c:3710 #, c-format msgid "Tablespace: \"%s\"" msgstr "Tablespace: »%s«" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:3396 +#: describe.c:3722 #, c-format msgid ", tablespace \"%s\"" msgstr ", Tablespace »%s«" -#: describe.c:3489 +#: describe.c:3815 msgid "List of roles" msgstr "Liste der Rollen" -#: describe.c:3491 +#: describe.c:3817 msgid "Role name" msgstr "Rollenname" -#: describe.c:3492 +#: describe.c:3818 msgid "Attributes" msgstr "Attribute" -#: describe.c:3493 +#: describe.c:3820 msgid "Member of" msgstr "Mitglied von" -#: describe.c:3504 +#: describe.c:3831 msgid "Superuser" msgstr "Superuser" -#: describe.c:3507 +#: describe.c:3834 msgid "No inheritance" msgstr "keine Vererbung" -#: describe.c:3510 +#: describe.c:3837 msgid "Create role" msgstr "Rolle erzeugen" -#: describe.c:3513 +#: describe.c:3840 msgid "Create DB" msgstr "DB erzeugen" -#: describe.c:3516 +#: describe.c:3843 msgid "Cannot login" msgstr "kann nicht einloggen" -#: describe.c:3520 +#: describe.c:3847 msgid "Replication" msgstr "Replikation" -#: describe.c:3524 +#: describe.c:3851 msgid "Bypass RLS" msgstr "Bypass RLS" -#: describe.c:3533 +#: describe.c:3860 msgid "No connections" msgstr "keine Verbindungen" -#: describe.c:3535 +#: describe.c:3862 #, c-format msgid "%d connection" msgid_plural "%d connections" msgstr[0] "%d Verbindung" msgstr[1] "%d Verbindungen" -#: describe.c:3545 +#: describe.c:3872 msgid "Password valid until " msgstr "Passwort gültig bis " -#: describe.c:3595 +#: describe.c:3922 #, c-format msgid "The server (version %s) does not support per-database role settings." msgstr "Der Server (Version %s) unterstützt keine Rolleneinstellungen pro Datenbank." -#: describe.c:3608 +#: describe.c:3935 msgid "Role" msgstr "Rolle" -#: describe.c:3609 +#: describe.c:3936 msgid "Database" msgstr "Datenbank" -#: describe.c:3610 +#: describe.c:3937 msgid "Settings" msgstr "Einstellung" -#: describe.c:3631 +#: describe.c:3958 #, c-format msgid "Did not find any settings for role \"%s\" and database \"%s\"." msgstr "Keine Einstellungen für Rolle »%s« und Datenbank »%s« gefunden" -#: describe.c:3634 +#: describe.c:3961 #, c-format msgid "Did not find any settings for role \"%s\"." msgstr "Keine Einstellungen für Rolle »%s« gefunden" -#: describe.c:3637 +#: describe.c:3964 #, c-format msgid "Did not find any settings." msgstr "Keine Einstellungen gefunden" -#: describe.c:3642 +#: describe.c:3969 msgid "List of settings" msgstr "Liste der Einstellungen" -#: describe.c:3713 +#: describe.c:4041 msgid "index" msgstr "Index" -#: describe.c:3715 +#: describe.c:4043 msgid "special" msgstr "speziell" -#: describe.c:3718 describe.c:3928 +#: describe.c:4044 +msgid "TOAST table" +msgstr "TOAST-Tabelle" + +#: describe.c:4047 describe.c:4270 msgid "partitioned index" msgstr "partitionierter Index" -#: describe.c:3742 +#: describe.c:4071 msgid "permanent" msgstr "permanent" -#: describe.c:3743 +#: describe.c:4072 msgid "temporary" msgstr "temporär" -#: describe.c:3744 +#: describe.c:4073 msgid "unlogged" msgstr "ungeloggt" -#: describe.c:3745 +#: describe.c:4074 msgid "Persistence" msgstr "Persistenz" -#: describe.c:3841 +#: describe.c:4091 +msgid "Access method" +msgstr "Zugriffsmethode" + +#: describe.c:4183 msgid "List of relations" msgstr "Liste der Relationen" -#: describe.c:3889 +#: describe.c:4231 #, c-format msgid "The server (version %s) does not support declarative table partitioning." msgstr "Der Server (Version %s) unterstützt keine deklarative Tabellenpartitionierung." -#: describe.c:3900 +#: describe.c:4242 msgid "List of partitioned indexes" msgstr "Liste partitionierter Indexe" -#: describe.c:3902 +#: describe.c:4244 msgid "List of partitioned tables" msgstr "Liste partitionierte Tabellen" -#: describe.c:3906 +#: describe.c:4248 msgid "List of partitioned relations" msgstr "Liste partitionierter Relationen" -#: describe.c:3937 +#: describe.c:4279 msgid "Parent name" msgstr "Elternname" -#: describe.c:3950 +#: describe.c:4292 msgid "Leaf partition size" msgstr "Größe Leaf-Partition" -#: describe.c:3953 describe.c:3959 +#: describe.c:4295 describe.c:4301 msgid "Total size" msgstr "Gesamtgröße" -#: describe.c:4091 +#: describe.c:4425 msgid "Trusted" msgstr "Vertraut" -#: describe.c:4099 +#: describe.c:4433 msgid "Internal language" msgstr "Interne Sprache" -#: describe.c:4100 +#: describe.c:4434 msgid "Call handler" msgstr "Call-Handler" -#: describe.c:4101 describe.c:5273 +#: describe.c:4435 describe.c:5699 msgid "Validator" msgstr "Validator" -#: describe.c:4104 +#: describe.c:4438 msgid "Inline handler" msgstr "Inline-Handler" -#: describe.c:4132 +#: describe.c:4466 msgid "List of languages" msgstr "Liste der Sprachen" -#: describe.c:4177 +#: describe.c:4511 msgid "Check" msgstr "Check" -#: describe.c:4219 +#: describe.c:4553 msgid "List of domains" msgstr "Liste der Domänen" -#: describe.c:4253 +#: describe.c:4587 msgid "Source" msgstr "Quelle" -#: describe.c:4254 +#: describe.c:4588 msgid "Destination" msgstr "Ziel" -#: describe.c:4256 describe.c:6091 +#: describe.c:4590 describe.c:6525 msgid "Default?" msgstr "Standard?" -#: describe.c:4293 +#: describe.c:4627 msgid "List of conversions" msgstr "Liste der Konversionen" -#: describe.c:4332 +#: describe.c:4666 msgid "Event" msgstr "Ereignis" -#: describe.c:4334 +#: describe.c:4668 msgid "enabled" msgstr "eingeschaltet" -#: describe.c:4335 +#: describe.c:4669 msgid "replica" msgstr "Replika" -#: describe.c:4336 +#: describe.c:4670 msgid "always" msgstr "immer" -#: describe.c:4337 +#: describe.c:4671 msgid "disabled" msgstr "ausgeschaltet" -#: describe.c:4338 describe.c:5987 +#: describe.c:4672 describe.c:6413 msgid "Enabled" msgstr "Eingeschaltet" -#: describe.c:4340 +#: describe.c:4674 msgid "Tags" msgstr "Tags" -#: describe.c:4359 +#: describe.c:4693 msgid "List of event triggers" msgstr "Liste der Ereignistrigger" -#: describe.c:4388 +#: describe.c:4720 +#, c-format +msgid "The server (version %s) does not support extended statistics." +msgstr "Der Server (Version %s) unterstützt keine erweiterten Statistiken." + +#: describe.c:4757 +msgid "Ndistinct" +msgstr "Ndistinct" + +#: describe.c:4758 +msgid "Dependencies" +msgstr "Abhängigkeiten" + +#: describe.c:4768 +msgid "MCV" +msgstr "MCV" + +#: describe.c:4787 +msgid "List of extended statistics" +msgstr "Liste der erweiterten Statistiken" + +#: describe.c:4814 msgid "Source type" msgstr "Quelltyp" -#: describe.c:4389 +#: describe.c:4815 msgid "Target type" msgstr "Zieltyp" -#: describe.c:4420 +#: describe.c:4846 msgid "in assignment" msgstr "in Zuweisung" -#: describe.c:4422 +#: describe.c:4848 msgid "Implicit?" msgstr "Implizit?" -#: describe.c:4477 +#: describe.c:4903 msgid "List of casts" msgstr "Liste der Typumwandlungen" -#: describe.c:4505 +#: describe.c:4931 #, c-format msgid "The server (version %s) does not support collations." msgstr "Der Server (Version %s) unterstützt keine Sortierfolgen." -#: describe.c:4526 describe.c:4530 +#: describe.c:4952 describe.c:4956 msgid "Provider" msgstr "Provider" -#: describe.c:4536 describe.c:4541 +#: describe.c:4962 describe.c:4967 msgid "Deterministic?" msgstr "Deterministisch?" -#: describe.c:4576 +#: describe.c:5002 msgid "List of collations" msgstr "Liste der Sortierfolgen" -#: describe.c:4635 +#: describe.c:5061 msgid "List of schemas" msgstr "Liste der Schemas" -#: describe.c:4660 describe.c:4907 describe.c:4978 describe.c:5049 +#: describe.c:5086 describe.c:5333 describe.c:5404 describe.c:5475 #, c-format msgid "The server (version %s) does not support full text search." msgstr "Der Server (Version %s) unterstützt keine Volltextsuche." -#: describe.c:4695 +#: describe.c:5121 msgid "List of text search parsers" msgstr "Liste der Textsucheparser" -#: describe.c:4740 +#: describe.c:5166 #, c-format msgid "Did not find any text search parser named \"%s\"." msgstr "Kein Textsucheparser namens »%s« gefunden" -#: describe.c:4743 +#: describe.c:5169 #, c-format msgid "Did not find any text search parsers." msgstr "Keine Textsucheparser gefunden" -#: describe.c:4818 +#: describe.c:5244 msgid "Start parse" msgstr "Parsen starten" -#: describe.c:4819 +#: describe.c:5245 msgid "Method" msgstr "Methode" -#: describe.c:4823 +#: describe.c:5249 msgid "Get next token" msgstr "Nächstes Token lesen" -#: describe.c:4825 +#: describe.c:5251 msgid "End parse" msgstr "Parsen beenden" -#: describe.c:4827 +#: describe.c:5253 msgid "Get headline" msgstr "Überschrift ermitteln" -#: describe.c:4829 +#: describe.c:5255 msgid "Get token types" msgstr "Tokentypen ermitteln" -#: describe.c:4840 +#: describe.c:5266 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "Textsucheparser »%s.%s«" -#: describe.c:4843 +#: describe.c:5269 #, c-format msgid "Text search parser \"%s\"" msgstr "Textsucheparser »%s«" -#: describe.c:4862 +#: describe.c:5288 msgid "Token name" msgstr "Tokenname" -#: describe.c:4873 +#: describe.c:5299 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "Tokentypen für Parser »%s.%s«" -#: describe.c:4876 +#: describe.c:5302 #, c-format msgid "Token types for parser \"%s\"" msgstr "Tokentypen für Parser »%s«" -#: describe.c:4930 +#: describe.c:5356 msgid "Template" msgstr "Vorlage" -#: describe.c:4931 +#: describe.c:5357 msgid "Init options" msgstr "Initialisierungsoptionen" -#: describe.c:4953 +#: describe.c:5379 msgid "List of text search dictionaries" msgstr "Liste der Textsuchewörterbücher" -#: describe.c:4996 +#: describe.c:5422 msgid "Init" msgstr "Init" -#: describe.c:4997 +#: describe.c:5423 msgid "Lexize" msgstr "Lexize" -#: describe.c:5024 +#: describe.c:5450 msgid "List of text search templates" msgstr "Liste der Textsuchevorlagen" -#: describe.c:5084 +#: describe.c:5510 msgid "List of text search configurations" msgstr "Liste der Textsuchekonfigurationen" -#: describe.c:5130 +#: describe.c:5556 #, c-format msgid "Did not find any text search configuration named \"%s\"." msgstr "Keine Textsuchekonfiguration namens »%s« gefunden" -#: describe.c:5133 +#: describe.c:5559 #, c-format msgid "Did not find any text search configurations." msgstr "Keine Textsuchekonfigurationen gefunden" -#: describe.c:5199 +#: describe.c:5625 msgid "Token" msgstr "Token" -#: describe.c:5200 +#: describe.c:5626 msgid "Dictionaries" msgstr "Wörterbücher" -#: describe.c:5211 +#: describe.c:5637 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "Textsuchekonfiguration »%s.%s«" -#: describe.c:5214 +#: describe.c:5640 #, c-format msgid "Text search configuration \"%s\"" msgstr "Textsuchekonfiguration »%s«" -#: describe.c:5218 +#: describe.c:5644 #, c-format msgid "" "\n" @@ -2104,7 +2156,7 @@ msgstr "" "\n" "Parser: »%s.%s«" -#: describe.c:5221 +#: describe.c:5647 #, c-format msgid "" "\n" @@ -2113,236 +2165,242 @@ msgstr "" "\n" "Parser: »%s«" -#: describe.c:5255 +#: describe.c:5681 #, c-format msgid "The server (version %s) does not support foreign-data wrappers." msgstr "Der Server (Version %s) unterstützt keine Fremddaten-Wrapper." -#: describe.c:5313 +#: describe.c:5739 msgid "List of foreign-data wrappers" msgstr "Liste der Fremddaten-Wrapper" -#: describe.c:5338 +#: describe.c:5764 #, c-format msgid "The server (version %s) does not support foreign servers." msgstr "Der Server (Version %s) unterstützt keine Fremdserver." -#: describe.c:5351 +#: describe.c:5777 msgid "Foreign-data wrapper" msgstr "Fremddaten-Wrapper" -#: describe.c:5369 describe.c:5574 +#: describe.c:5795 describe.c:6000 msgid "Version" msgstr "Version" -#: describe.c:5395 +#: describe.c:5821 msgid "List of foreign servers" msgstr "Liste der Fremdserver" -#: describe.c:5420 +#: describe.c:5846 #, c-format msgid "The server (version %s) does not support user mappings." msgstr "Der Server (Version %s) unterstützt keine Benutzerabbildungen." -#: describe.c:5430 describe.c:5494 +#: describe.c:5856 describe.c:5920 msgid "Server" msgstr "Server" -#: describe.c:5431 +#: describe.c:5857 msgid "User name" msgstr "Benutzername" -#: describe.c:5456 +#: describe.c:5882 msgid "List of user mappings" msgstr "Liste der Benutzerabbildungen" -#: describe.c:5481 +#: describe.c:5907 #, c-format msgid "The server (version %s) does not support foreign tables." msgstr "Der Server (Version %s) unterstützt keine Fremdtabellen." -#: describe.c:5534 +#: describe.c:5960 msgid "List of foreign tables" msgstr "Liste der Fremdtabellen" -#: describe.c:5559 describe.c:5616 +#: describe.c:5985 describe.c:6042 #, c-format msgid "The server (version %s) does not support extensions." msgstr "Der Server (Version %s) unterstützt keine Erweiterungen." -#: describe.c:5591 +#: describe.c:6017 msgid "List of installed extensions" msgstr "Liste der installierten Erweiterungen" -#: describe.c:5644 +#: describe.c:6070 #, c-format msgid "Did not find any extension named \"%s\"." msgstr "Keine Erweiterung namens »%s« gefunden" -#: describe.c:5647 +#: describe.c:6073 #, c-format msgid "Did not find any extensions." msgstr "Keine Erweiterungen gefunden" -#: describe.c:5691 +#: describe.c:6117 msgid "Object description" msgstr "Objektbeschreibung" -#: describe.c:5701 +#: describe.c:6127 #, c-format msgid "Objects in extension \"%s\"" msgstr "Objekte in Erweiterung »%s«" -#: describe.c:5730 describe.c:5806 +#: describe.c:6156 describe.c:6232 #, c-format msgid "The server (version %s) does not support publications." msgstr "Der Server (Version %s) unterstützt keine Publikationen." -#: describe.c:5747 describe.c:5884 +#: describe.c:6173 describe.c:6310 msgid "All tables" msgstr "Alle Tabellen" -#: describe.c:5748 describe.c:5885 +#: describe.c:6174 describe.c:6311 msgid "Inserts" msgstr "Inserts" -#: describe.c:5749 describe.c:5886 +#: describe.c:6175 describe.c:6312 msgid "Updates" msgstr "Updates" -#: describe.c:5750 describe.c:5887 +#: describe.c:6176 describe.c:6313 msgid "Deletes" msgstr "Deletes" -#: describe.c:5754 describe.c:5889 +#: describe.c:6180 describe.c:6315 msgid "Truncates" msgstr "Truncates" -#: describe.c:5758 describe.c:5891 +#: describe.c:6184 describe.c:6317 msgid "Via root" -msgstr "" +msgstr "Über Wurzel" -#: describe.c:5775 +#: describe.c:6201 msgid "List of publications" msgstr "Liste der Publikationen" -#: describe.c:5848 +#: describe.c:6274 #, c-format msgid "Did not find any publication named \"%s\"." msgstr "Keine Publikation namens »%s« gefunden" -#: describe.c:5851 +#: describe.c:6277 #, c-format msgid "Did not find any publications." msgstr "Keine Publikationen gefunden" -#: describe.c:5880 +#: describe.c:6306 #, c-format msgid "Publication %s" msgstr "Publikation %s" -#: describe.c:5928 +#: describe.c:6354 msgid "Tables:" msgstr "Tabellen:" -#: describe.c:5972 +#: describe.c:6398 #, c-format msgid "The server (version %s) does not support subscriptions." msgstr "Der Server (Version %s) unterstützt keine Subskriptionen." -#: describe.c:5988 +#: describe.c:6414 msgid "Publication" msgstr "Publikation" -#: describe.c:5995 +#: describe.c:6423 +msgid "Binary" +msgstr "Binär" + +#: describe.c:6424 +msgid "Streaming" +msgstr "Streaming" + +#: describe.c:6429 msgid "Synchronous commit" msgstr "Synchroner Commit" -#: describe.c:5996 +#: describe.c:6430 msgid "Conninfo" msgstr "Verbindungsinfo" -#: describe.c:6018 +#: describe.c:6452 msgid "List of subscriptions" msgstr "Liste der Subskriptionen" -#: describe.c:6085 describe.c:6169 describe.c:6255 describe.c:6341 +#: describe.c:6519 describe.c:6607 describe.c:6692 describe.c:6775 msgid "AM" msgstr "AM" -#: describe.c:6086 +#: describe.c:6520 msgid "Input type" msgstr "Eingabetyp" -#: describe.c:6087 +#: describe.c:6521 msgid "Storage type" msgstr "Storage-Typ" -#: describe.c:6088 +#: describe.c:6522 msgid "Operator class" msgstr "Operatorklasse" -#: describe.c:6100 describe.c:6170 describe.c:6342 +#: describe.c:6534 describe.c:6608 describe.c:6693 describe.c:6776 msgid "Operator family" msgstr "Operatorfamilie" -#: describe.c:6127 +#: describe.c:6566 msgid "List of operator classes" msgstr "Liste der Operatorklassen" -#: describe.c:6171 +#: describe.c:6609 msgid "Applicable types" -msgstr "" +msgstr "Passende Typen" -#: describe.c:6206 +#: describe.c:6647 msgid "List of operator families" msgstr "Liste der Operatorfamilien" -#: describe.c:6256 -msgid "Opfamily Name" -msgstr "Opfamilienname" - -#: describe.c:6257 +#: describe.c:6694 msgid "Operator" msgstr "Operator" -#: describe.c:6267 +#: describe.c:6695 msgid "Strategy" msgstr "Strategie" -#: describe.c:6268 +#: describe.c:6696 msgid "ordering" -msgstr "" +msgstr "Sortieren" -#: describe.c:6269 +#: describe.c:6697 msgid "search" -msgstr "" +msgstr "Suchen" -#: describe.c:6270 +#: describe.c:6698 msgid "Purpose" -msgstr "" +msgstr "Zweck" -#: describe.c:6271 +#: describe.c:6703 msgid "Sort opfamily" msgstr "Sortier-Opfamilie" -#: describe.c:6299 +#: describe.c:6734 msgid "List of operators of operator families" msgstr "Liste der Operatoren in Operatorfamilien" -#: describe.c:6345 -msgid "Number" -msgstr "" +#: describe.c:6777 +msgid "Registered left type" +msgstr "Registrierter linker Typ" -#: describe.c:6346 -msgid "Proc name" -msgstr "Prozedurname" +#: describe.c:6778 +msgid "Registered right type" +msgstr "Registrierter rechter Typ" + +#: describe.c:6779 +msgid "Number" +msgstr "Nummer" -#: describe.c:6372 -#, fuzzy -#| msgid "must be owner of operator family %s" -msgid "List of procedures of operator families" -msgstr "Berechtigung nur für Eigentümer der Operatorfamilie %s" +#: describe.c:6815 +msgid "List of support functions of operator families" +msgstr "Liste der Unterstützungsfunktionen in Operatorfamilien" #: help.c:73 #, c-format @@ -2353,7 +2411,7 @@ msgstr "" "psql ist das interaktive PostgreSQL-Terminal.\n" "\n" -#: help.c:74 help.c:355 help.c:431 help.c:474 +#: help.c:74 help.c:355 help.c:433 help.c:476 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" @@ -2614,22 +2672,22 @@ msgstr "lokales Socket" msgid " -p, --port=PORT database server port (default: \"%s\")\n" msgstr " -p, --port=PORT Port des Datenbankservers (Standard: »%s«)\n" -#: help.c:140 +#: help.c:137 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" msgstr " -U, --username=NAME Datenbank-Benutzername (Standard: »%s«)\n" -#: help.c:141 +#: help.c:138 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password niemals nach Passwort fragen\n" -#: help.c:142 +#: help.c:139 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password nach Passwort fragen (sollte automatisch geschehen)\n" -#: help.c:144 +#: help.c:141 #, c-format msgid "" "\n" @@ -2644,457 +2702,459 @@ msgstr "" "Abschnitt der PostgreSQL-Dokumentation.\n" "\n" -#: help.c:147 +#: help.c:144 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Berichten Sie Fehler an <%s>.\n" -#: help.c:148 +#: help.c:145 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: help.c:174 +#: help.c:171 #, c-format msgid "General\n" msgstr "Allgemein\n" -#: help.c:175 +#: help.c:172 #, c-format msgid " \\copyright show PostgreSQL usage and distribution terms\n" msgstr " \\copyright PostgreSQL-Urheberrechtsinformationen zeigen\n" -#: help.c:176 +#: help.c:173 #, c-format msgid " \\crosstabview [COLUMNS] execute query and display results in crosstab\n" msgstr "" " \\crosstabview [SPALTEN] Anfrage ausführen und Ergebnisse als Kreuztabelle\n" " anzeigen\n" -#: help.c:177 +#: help.c:174 #, c-format msgid " \\errverbose show most recent error message at maximum verbosity\n" msgstr " \\errverbose letzte Fehlermeldung mit vollen Details anzeigen\n" -#: help.c:178 -#, fuzzy, c-format -#| msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" -msgid " \\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);\n" -msgstr "" -" \\g [DATEI] oder ; SQL-Anweisung ausführen (und Ergebnis in Datei oder\n" -" |Pipe schreiben)\n" - -#: help.c:179 -#, fuzzy, c-format -#| msgid " -e, --echo show the commands being sent to the server\n" -msgid " \\g with no arguments is equivalent to a semicolon\n" +#: help.c:175 +#, c-format +msgid "" +" \\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);\n" +" \\g with no arguments is equivalent to a semicolon\n" msgstr "" -" -e, --echo zeige die Befehle, die an den Server\n" -" gesendet werden\n" +" \\g [(OPT)] [DATEI] SQL-Anweisung ausführen (und Ergebnis in Datei oder\n" +" |Pipe schreiben); \\g ohne Argumente entspricht Semikolon\n" -#: help.c:180 +#: help.c:177 #, c-format msgid " \\gdesc describe result of query, without executing it\n" msgstr " \\gdesc Ergebnis der Anfrage beschreiben ohne sie auszuführen\n" -#: help.c:181 +#: help.c:178 #, c-format msgid " \\gexec execute query, then execute each value in its result\n" msgstr "" " \\gexec Anfrage ausführen, dann jeden Ergebniswert als\n" " Anweisung ausführen\n" -#: help.c:182 +#: help.c:179 #, c-format msgid " \\gset [PREFIX] execute query and store results in psql variables\n" msgstr "" " \\gset [PREFIX] SQL-Anweisung ausführen und Ergebnis in psql-Variablen\n" " ablegen\n" -#: help.c:183 -#, fuzzy, c-format -#| msgid " \\gx [FILE] as \\g, but forces expanded output mode\n" +#: help.c:180 +#, c-format msgid " \\gx [(OPTIONS)] [FILE] as \\g, but forces expanded output mode\n" -msgstr " \\gx [DATEI] wie \\g, aber mit erweitertem Ausgabemodus\n" +msgstr " \\gx [(OPT)] [DATEI] wie \\g, aber mit erweitertem Ausgabemodus\n" -#: help.c:184 +#: help.c:181 #, c-format msgid " \\q quit psql\n" msgstr " \\q psql beenden\n" -#: help.c:185 +#: help.c:182 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEK] Anfrage alle SEK Sekunden ausführen\n" -#: help.c:188 +#: help.c:185 #, c-format msgid "Help\n" msgstr "Hilfe\n" -#: help.c:190 +#: help.c:187 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [commands] Hilfe über Backslash-Befehle anzeigen\n" -#: help.c:191 +#: help.c:188 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr " \\? options Hilfe über psql-Kommandozeilenoptionen anzeigen\n" -#: help.c:192 +#: help.c:189 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? variables Hilfe über besondere Variablen anzeigen\n" -#: help.c:193 +#: help.c:190 #, c-format msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" msgstr " \\h [NAME] Syntaxhilfe über SQL-Anweisung, * für alle Anweisungen\n" -#: help.c:196 +#: help.c:193 #, c-format msgid "Query Buffer\n" msgstr "Anfragepuffer\n" -#: help.c:197 +#: help.c:194 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr " \\e [DATEI] [ZEILE] Anfragepuffer (oder Datei) mit externem Editor bearbeiten\n" -#: help.c:198 +#: help.c:195 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr " \\ef [FUNKNAME [ZEILE]] Funktionsdefinition mit externem Editor bearbeiten\n" -#: help.c:199 +#: help.c:196 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr " \\ev [SICHTNAME [ZEILE]] Sichtdefinition mit externem Editor bearbeiten\n" -#: help.c:200 +#: help.c:197 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p aktuellen Inhalt der Anfragepuffers zeigen\n" -#: help.c:201 +#: help.c:198 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r Anfragepuffer löschen\n" -#: help.c:203 +#: help.c:200 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [DATEI] Befehlsgeschichte ausgeben oder in Datei schreiben\n" -#: help.c:205 +#: help.c:202 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w DATEI Anfragepuffer in Datei schreiben\n" -#: help.c:208 +#: help.c:205 #, c-format msgid "Input/Output\n" msgstr "Eingabe/Ausgabe\n" -#: help.c:209 +#: help.c:206 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr " \\copy ... SQL COPY mit Datenstrom auf Client-Host ausführen\n" -#: help.c:210 +#: help.c:207 #, c-format msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" msgstr " \\echo [-n] [TEXT] Text auf Standardausgabe schreiben (-n für ohne Newline)\n" -#: help.c:211 +#: help.c:208 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i DATEI Befehle aus Datei ausführen\n" -#: help.c:212 +#: help.c:209 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr " \\ir DATEI wie \\i, aber relativ zum Ort des aktuellen Skripts\n" -#: help.c:213 +#: help.c:210 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [DATEI] alle Anfrageergebnisse in Datei oder |Pipe schreiben\n" -#: help.c:214 +#: help.c:211 #, c-format msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" msgstr "" " \\qecho [-n] [TEXT] Text auf Ausgabestrom für \\o schreiben (-n für ohne\n" " Newline)\n" -#: help.c:215 +#: help.c:212 #, c-format msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" msgstr "" " \\warn [-n] [TEXT] Text auf Standardfehlerausgabe schreiben (-n für ohne\n" " Newline)\n" -#: help.c:218 +#: help.c:215 #, c-format msgid "Conditional\n" msgstr "Bedingte Anweisungen\n" -#: help.c:219 +#: help.c:216 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if AUSDRUCK Beginn einer bedingten Anweisung\n" -#: help.c:220 +#: help.c:217 #, c-format msgid " \\elif EXPR alternative within current conditional block\n" msgstr " \\elif AUSDRUCK Alternative in aktueller bedingter Anweisung\n" -#: help.c:221 +#: help.c:218 #, c-format msgid " \\else final alternative within current conditional block\n" msgstr " \\else letzte Alternative in aktueller bedingter Anweisung\n" -#: help.c:222 +#: help.c:219 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif Ende einer bedingten Anweisung\n" -#: help.c:225 +#: help.c:222 #, c-format msgid "Informational\n" msgstr "Informationen\n" -#: help.c:226 +#: help.c:223 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (Optionen: S = Systemobjekte zeigen, + = zusätzliche Details zeigen)\n" -#: help.c:227 +#: help.c:224 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] Tabellen, Sichten und Sequenzen auflisten\n" -#: help.c:228 +#: help.c:225 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] NAME Tabelle, Sicht, Sequenz oder Index beschreiben\n" -#: help.c:229 +#: help.c:226 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [MUSTER] Aggregatfunktionen auflisten\n" -#: help.c:230 +#: help.c:227 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [MUSTER] Zugriffsmethoden auflisten\n" -#: help.c:231 -#, fuzzy, c-format -#| msgid " \\do[S] [PATTERN] list operators\n" -msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" -msgstr " \\do[S] [MUSTER] Operatoren auflisten\n" +#: help.c:228 +#, c-format +msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" +msgstr " \\dAc[+] [AMMUST [TYPMUST]] Operatorklassen auflisten\n" -#: help.c:232 -#, fuzzy, c-format -#| msgid " \\do[S] [PATTERN] list operators\n" -msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" -msgstr " \\do[S] [MUSTER] Operatoren auflisten\n" +#: help.c:229 +#, c-format +msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" +msgstr " \\dAf[+] [AMMUST [TYPMUST]] Operatorfamilien auflisten\n" -#: help.c:233 -#, fuzzy, c-format -#| msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" -msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" -msgstr " \\drds [MUSTER1 [MUSTER2]] datenbankspezifische Rolleneinstellungen auflisten\n" +#: help.c:230 +#, c-format +msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" +msgstr " \\dAo[+] [AMMUST [OPFMUST]] Operatoren in Operatorfamilien auflisten\n" -#: help.c:234 +#: help.c:231 #, c-format -msgid " \\dAp [AMPTRN [OPFPTRN]] list procedures of operator families\n" -msgstr "" +msgid " \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" +msgstr " \\dAp [AMMUST [OPFMUST]] Unterst.funktionen in Operatorfamilien auflisten\n" -#: help.c:235 +#: help.c:232 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [MUSTER] Tablespaces auflisten\n" -#: help.c:236 +#: help.c:233 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [MUSTER] Konversionen auflisten\n" -#: help.c:237 +#: help.c:234 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [MUSTER] Typumwandlungen (Casts) auflisten\n" -#: help.c:238 +#: help.c:235 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr "" " \\dd[S] [MUSTER] Objektbeschreibungen zeigen, die nirgendwo anders\n" " erscheinen\n" -#: help.c:239 +#: help.c:236 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [MUSTER] Domänen auflisten\n" -#: help.c:240 +#: help.c:237 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [MUSTER] Vorgabeprivilegien auflisten\n" -#: help.c:241 +#: help.c:238 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [MUSTER] Fremdtabellen auflisten\n" -#: help.c:242 +#: help.c:239 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [MUSTER] Fremdtabellen auflisten\n" -#: help.c:243 +#: help.c:240 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [MUSTER] Fremdserver auflisten\n" -#: help.c:244 +#: help.c:241 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [MUSTER] Benutzerabbildungen auflisten\n" -#: help.c:245 +#: help.c:242 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [MUSTER] Fremddaten-Wrapper auflisten\n" -#: help.c:246 +#: help.c:243 #, c-format -msgid " \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] functions\n" -msgstr " \\df[anptw][S+] [MUSTR] Funktionen [nur Agg/normale/Proz/Trigger/Fenster] auflisten\n" +msgid "" +" \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" +" list [only agg/normal/procedure/trigger/window] functions\n" +msgstr "" +" \\df[anptw][S+] [FUNKMUSTR [TYPMUSTR ...]]\n" +" Funktionen [nur Agg/normale/Proz/Trigger/Fenster] auflisten\n" -#: help.c:247 +#: help.c:245 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [MUSTER] Textsuchekonfigurationen auflisten\n" -#: help.c:248 +#: help.c:246 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [MUSTER] Textsuchewörterbücher auflisten\n" -#: help.c:249 +#: help.c:247 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [MUSTER] Textsucheparser auflisten\n" -#: help.c:250 +#: help.c:248 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [MUSTER] Textsuchevorlagen auflisten\n" -#: help.c:251 +#: help.c:249 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [MUSTER] Rollen auflisten\n" -#: help.c:252 +#: help.c:250 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [MUSTER] Indexe auflisten\n" -#: help.c:253 +#: help.c:251 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl Large Objects auflisten, wie \\lo_list\n" -#: help.c:254 +#: help.c:252 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [MUSTER] prozedurale Sprachen auflisten\n" -#: help.c:255 +#: help.c:253 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [MUSTER] materialisierte Sichten auflisten\n" -#: help.c:256 +#: help.c:254 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [MUSTER] Schemas auflisten\n" -#: help.c:257 +#: help.c:255 #, c-format -msgid " \\do[S] [PATTERN] list operators\n" -msgstr " \\do[S] [MUSTER] Operatoren auflisten\n" +msgid "" +" \\do[S] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" +" list operators\n" +msgstr "" +" \\do[S] [OPMUST [TYPMUST [TYPMUST]]]\n" +" Operatoren auflisten\n" -#: help.c:258 +#: help.c:257 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [MUSTER] Sortierfolgen auflisten\n" -#: help.c:259 +#: help.c:258 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr "" " \\dp [MUSTER] Zugriffsprivilegien für Tabellen, Sichten und\n" " Sequenzen auflisten\n" -#: help.c:260 +#: help.c:259 #, c-format msgid " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n" msgstr "" " \\dP[itn+] [MUSTER] partitionierte Relationen [nur Indexe/Tabellen]\n" " auflisten [n=geschachtelt]\n" -#: help.c:261 +#: help.c:260 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [MUSTER1 [MUSTER2]] datenbankspezifische Rolleneinstellungen auflisten\n" -#: help.c:262 +#: help.c:261 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[+] [MUSTER] Replikationspublikationen auflisten\n" -#: help.c:263 +#: help.c:262 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [MUSTER] Replikationssubskriptionen auflisten\n" -#: help.c:264 +#: help.c:263 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [MUSTER] Sequenzen auflisten\n" -#: help.c:265 +#: help.c:264 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [MUSTER] Tabellen auflisten\n" -#: help.c:266 +#: help.c:265 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [MUSTER] Datentypen auflisten\n" -#: help.c:267 +#: help.c:266 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [MUSTER] Rollen auflisten\n" -#: help.c:268 +#: help.c:267 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [MUSTER] Sichten auflisten\n" -#: help.c:269 +#: help.c:268 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [MUSTER] Erweiterungen auflisten\n" +#: help.c:269 +#, c-format +msgid " \\dX [PATTERN] list extended statistics\n" +msgstr " \\dX [MUSTER] erweiterte Statistiken auflisten\n" + #: help.c:270 #, c-format msgid " \\dy [PATTERN] list event triggers\n" @@ -3390,13 +3450,22 @@ msgstr "" #: help.c:377 #, c-format msgid "" +" HIDE_TOAST_COMPRESSION\n" +" if set, compression methods are not displayed\n" +msgstr "" +" HIDE_TOAST_COMPRESSION\n" +" wenn gesetzt werden Kompressionsmethoden nicht angezeigt\n" + +#: help.c:379 +#, c-format +msgid "" " HIDE_TABLEAM\n" " if set, table access methods are not displayed\n" msgstr "" " HIDE_TABLEAM\n" " wenn gesetzt werden Tabellenzugriffsmethoden nicht angezeigt\n" -#: help.c:379 +#: help.c:381 #, c-format msgid "" " HISTCONTROL\n" @@ -3405,7 +3474,7 @@ msgstr "" " HISTCONTROL\n" " kontrolliert Befehlsgeschichte [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:381 +#: help.c:383 #, c-format msgid "" " HISTFILE\n" @@ -3414,7 +3483,7 @@ msgstr "" " HISTFILE\n" " Dateiname für die Befehlsgeschichte\n" -#: help.c:383 +#: help.c:385 #, c-format msgid "" " HISTSIZE\n" @@ -3423,7 +3492,7 @@ msgstr "" " HISTSIZE\n" " maximale Anzahl der in der Befehlsgeschichte zu speichernden Befehle\n" -#: help.c:385 +#: help.c:387 #, c-format msgid "" " HOST\n" @@ -3432,7 +3501,7 @@ msgstr "" " HOST\n" " der aktuell verbundene Datenbankserverhost\n" -#: help.c:387 +#: help.c:389 #, c-format msgid "" " IGNOREEOF\n" @@ -3441,7 +3510,7 @@ msgstr "" " IGNOREEOF\n" " Anzahl benötigter EOFs um eine interaktive Sitzung zu beenden\n" -#: help.c:389 +#: help.c:391 #, c-format msgid "" " LASTOID\n" @@ -3450,7 +3519,7 @@ msgstr "" " LASTOID\n" " Wert der zuletzt beinträchtigten OID\n" -#: help.c:391 +#: help.c:393 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" @@ -3462,7 +3531,7 @@ msgstr "" " Fehlermeldung und SQLSTATE des letzten Fehlers, oder leer und »000000« wenn\n" " kein Fehler\n" -#: help.c:394 +#: help.c:396 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" @@ -3472,7 +3541,7 @@ msgstr "" " wenn gesetzt beendet ein Fehler die Transaktion nicht (verwendet implizite\n" " Sicherungspunkte)\n" -#: help.c:396 +#: help.c:398 #, c-format msgid "" " ON_ERROR_STOP\n" @@ -3481,7 +3550,7 @@ msgstr "" " ON_ERROR_STOP\n" " Skriptausführung bei Fehler beenden\n" -#: help.c:398 +#: help.c:400 #, c-format msgid "" " PORT\n" @@ -3490,7 +3559,7 @@ msgstr "" " PORT\n" " Serverport der aktuellen Verbindung\n" -#: help.c:400 +#: help.c:402 #, c-format msgid "" " PROMPT1\n" @@ -3499,7 +3568,7 @@ msgstr "" " PROMPT1\n" " der normale psql-Prompt\n" -#: help.c:402 +#: help.c:404 #, c-format msgid "" " PROMPT2\n" @@ -3508,7 +3577,7 @@ msgstr "" " PROMPT2\n" " der Prompt, wenn eine Anweisung von der vorherigen Zeile fortgesetzt wird\n" -#: help.c:404 +#: help.c:406 #, c-format msgid "" " PROMPT3\n" @@ -3517,7 +3586,7 @@ msgstr "" " PROMPT3\n" " der Prompt während COPY ... FROM STDIN\n" -#: help.c:406 +#: help.c:408 #, c-format msgid "" " QUIET\n" @@ -3526,7 +3595,7 @@ msgstr "" " QUIET\n" " stille Ausführung (wie Option -q)\n" -#: help.c:408 +#: help.c:410 #, c-format msgid "" " ROW_COUNT\n" @@ -3535,7 +3604,7 @@ msgstr "" " ROW_COUNT\n" " Anzahl der von der letzten Anfrage beeinträchtigten Zeilen, oder 0\n" -#: help.c:410 +#: help.c:412 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3546,7 +3615,7 @@ msgstr "" " SERVER_VERSION_NUM\n" " Serverversion (kurze Zeichenkette oder numerisches Format)\n" -#: help.c:413 +#: help.c:415 #, c-format msgid "" " SHOW_CONTEXT\n" @@ -3556,7 +3625,7 @@ msgstr "" " kontrolliert die Anzeige von Kontextinformationen in Meldungen\n" " [never, errors, always]\n" -#: help.c:415 +#: help.c:417 #, c-format msgid "" " SINGLELINE\n" @@ -3565,7 +3634,7 @@ msgstr "" " SINGLELINE\n" " wenn gesetzt beendet Zeilenende die SQL-Anweisung (wie Option -S)\n" -#: help.c:417 +#: help.c:419 #, c-format msgid "" " SINGLESTEP\n" @@ -3574,7 +3643,7 @@ msgstr "" " SINGLESTEP\n" " Einzelschrittmodus (wie Option -s)\n" -#: help.c:419 +#: help.c:421 #, c-format msgid "" " SQLSTATE\n" @@ -3583,7 +3652,7 @@ msgstr "" " SQLSTATE\n" " SQLSTATE der letzten Anfrage, oder »00000« wenn kein Fehler\n" -#: help.c:421 +#: help.c:423 #, c-format msgid "" " USER\n" @@ -3592,7 +3661,7 @@ msgstr "" " USER\n" " der aktuell verbundene Datenbankbenutzer\n" -#: help.c:423 +#: help.c:425 #, c-format msgid "" " VERBOSITY\n" @@ -3602,7 +3671,7 @@ msgstr "" " kontrolliert wieviele Details in Fehlermeldungen enthalten sind\n" " [default, verbose, terse, sqlstate]\n" -#: help.c:425 +#: help.c:427 #, c-format msgid "" " VERSION\n" @@ -3615,7 +3684,7 @@ msgstr "" " VERSION_NUM\n" " Version von psql (lange Zeichenkette, kurze Zeichenkette oder numerisch)\n" -#: help.c:430 +#: help.c:432 #, c-format msgid "" "\n" @@ -3624,7 +3693,7 @@ msgstr "" "\n" "Anzeigeeinstellungen:\n" -#: help.c:432 +#: help.c:434 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3635,7 +3704,7 @@ msgstr "" " oder \\pset NAME [WERT] innerhalb von psql\n" "\n" -#: help.c:434 +#: help.c:436 #, c-format msgid "" " border\n" @@ -3644,7 +3713,7 @@ msgstr "" " border\n" " Rahmenstil (Zahl)\n" -#: help.c:436 +#: help.c:438 #, c-format msgid "" " columns\n" @@ -3653,7 +3722,7 @@ msgstr "" " columns\n" " Zielbreite für das Format »wrapped«\n" -#: help.c:438 +#: help.c:440 #, c-format msgid "" " expanded (or x)\n" @@ -3662,7 +3731,7 @@ msgstr "" " expanded (oder x)\n" " erweiterte Ausgabe [on, off, auto]\n" -#: help.c:440 +#: help.c:442 #, c-format msgid "" " fieldsep\n" @@ -3671,7 +3740,7 @@ msgstr "" " fieldsep\n" " Feldtrennzeichen für unausgerichteten Ausgabemodus (Standard »%s«)\n" -#: help.c:443 +#: help.c:445 #, c-format msgid "" " fieldsep_zero\n" @@ -3680,7 +3749,7 @@ msgstr "" " fieldsep_zero\n" " Feldtrennzeichen für unausgerichteten Ausgabemodus auf Null-Byte setzen\n" -#: help.c:445 +#: help.c:447 #, c-format msgid "" " footer\n" @@ -3689,7 +3758,7 @@ msgstr "" " footer\n" " Tabellenfußzeile ein- oder auschalten [on, off]\n" -#: help.c:447 +#: help.c:449 #, c-format msgid "" " format\n" @@ -3698,7 +3767,7 @@ msgstr "" " format\n" " Ausgabeformat setzen [unaligned, aligned, wrapped, html, asciidoc, ...]\n" -#: help.c:449 +#: help.c:451 #, c-format msgid "" " linestyle\n" @@ -3707,7 +3776,7 @@ msgstr "" " linestyle\n" " Rahmenlinienstil setzen [ascii, old-ascii, unicode]\n" -#: help.c:451 +#: help.c:453 #, c-format msgid "" " null\n" @@ -3716,7 +3785,7 @@ msgstr "" " null\n" " setzt die Zeichenkette, die anstelle eines NULL-Wertes ausgegeben wird\n" -#: help.c:453 +#: help.c:455 #, c-format msgid "" " numericlocale\n" @@ -3726,7 +3795,7 @@ msgstr "" " Verwendung eines Locale-spezifischen Zeichens zur Trennung von Zifferngruppen\n" " einschalten [on, off]\n" -#: help.c:455 +#: help.c:457 #, c-format msgid "" " pager\n" @@ -3735,7 +3804,7 @@ msgstr "" " pager\n" " kontrolliert Verwendung eines externen Pager-Programms [yes, no, always]\n" -#: help.c:457 +#: help.c:459 #, c-format msgid "" " recordsep\n" @@ -3744,7 +3813,7 @@ msgstr "" " recordsep\n" " Satztrennzeichen für unausgerichteten Ausgabemodus\n" -#: help.c:459 +#: help.c:461 #, c-format msgid "" " recordsep_zero\n" @@ -3753,7 +3822,7 @@ msgstr "" " recordsep_zero\n" " Satztrennzeichen für unausgerichteten Ausgabemodus auf Null-Byte setzen\n" -#: help.c:461 +#: help.c:463 #, c-format msgid "" " tableattr (or T)\n" @@ -3764,7 +3833,7 @@ msgstr "" " Attribute für das »table«-Tag im Format »html« oder proportionale\n" " Spaltenbreite für links ausgerichtete Datentypen im Format »latex-longtable«\n" -#: help.c:464 +#: help.c:466 #, c-format msgid "" " title\n" @@ -3773,7 +3842,7 @@ msgstr "" " title\n" " setzt den Titel darauffolgend ausgegebener Tabellen\n" -#: help.c:466 +#: help.c:468 #, c-format msgid "" " tuples_only\n" @@ -3782,7 +3851,7 @@ msgstr "" " tuples_only\n" " wenn gesetzt werden nur die eigentlichen Tabellendaten gezeigt\n" -#: help.c:468 +#: help.c:470 #, c-format msgid "" " unicode_border_linestyle\n" @@ -3795,7 +3864,7 @@ msgstr "" " unicode_header_linestyle\n" " setzt den Stil für Unicode-Linien [single, double]\n" -#: help.c:473 +#: help.c:475 #, c-format msgid "" "\n" @@ -3804,7 +3873,7 @@ msgstr "" "\n" "Umgebungsvariablen:\n" -#: help.c:477 +#: help.c:479 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -3815,7 +3884,7 @@ msgstr "" " oder \\setenv NAME [WERT] innerhalb von psql\n" "\n" -#: help.c:479 +#: help.c:481 #, c-format msgid "" " set NAME=VALUE\n" @@ -3828,7 +3897,7 @@ msgstr "" " oder \\setenv NAME [WERT] innerhalb von psql\n" "\n" -#: help.c:482 +#: help.c:484 #, c-format msgid "" " COLUMNS\n" @@ -3837,7 +3906,7 @@ msgstr "" " COLUMNS\n" " Anzahl Spalten im Format »wrapped«\n" -#: help.c:484 +#: help.c:486 #, c-format msgid "" " PGAPPNAME\n" @@ -3846,7 +3915,7 @@ msgstr "" " PGAPPNAME\n" " wie Verbindungsparameter »application_name«\n" -#: help.c:486 +#: help.c:488 #, c-format msgid "" " PGDATABASE\n" @@ -3855,7 +3924,7 @@ msgstr "" " PGDATABASE\n" " wie Verbindungsparameter »dbname«\n" -#: help.c:488 +#: help.c:490 #, c-format msgid "" " PGHOST\n" @@ -3864,7 +3933,7 @@ msgstr "" " PGHOST\n" " wie Verbindungsparameter »host«\n" -#: help.c:490 +#: help.c:492 #, c-format msgid "" " PGPASSWORD\n" @@ -3873,7 +3942,7 @@ msgstr "" " PGPASSWORD\n" " Verbindungspasswort (nicht empfohlen)\n" -#: help.c:492 +#: help.c:494 #, c-format msgid "" " PGPASSFILE\n" @@ -3882,7 +3951,7 @@ msgstr "" " PGPASSFILE\n" " Name der Passwortdatei\n" -#: help.c:494 +#: help.c:496 #, c-format msgid "" " PGPORT\n" @@ -3891,7 +3960,7 @@ msgstr "" " PGPORT\n" " wie Verbindungsparameter »port«\n" -#: help.c:496 +#: help.c:498 #, c-format msgid "" " PGUSER\n" @@ -3900,7 +3969,7 @@ msgstr "" " PGUSER\n" " wie Verbindungsparameter »user«\n" -#: help.c:498 +#: help.c:500 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" @@ -3909,7 +3978,7 @@ msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" " Editor für Befehle \\e, \\ef und \\ev\n" -#: help.c:500 +#: help.c:502 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" @@ -3918,7 +3987,7 @@ msgstr "" " PSQL_EDITOR_LINENUMBER_ARG\n" " wie die Zeilennummer beim Aufruf des Editors angegeben wird\n" -#: help.c:502 +#: help.c:504 #, c-format msgid "" " PSQL_HISTORY\n" @@ -3927,7 +3996,7 @@ msgstr "" " PSQL_HISTORY\n" " alternativer Pfad für History-Datei\n" -#: help.c:504 +#: help.c:506 #, c-format msgid "" " PSQL_PAGER, PAGER\n" @@ -3936,7 +4005,7 @@ msgstr "" " PSQL_PAGER, PAGER\n" " Name des externen Pager-Programms\n" -#: help.c:506 +#: help.c:508 #, c-format msgid "" " PSQLRC\n" @@ -3945,7 +4014,7 @@ msgstr "" " PSQLRC\n" " alternativer Pfad für .psqlrc-Datei des Benutzers\n" -#: help.c:508 +#: help.c:510 #, c-format msgid "" " SHELL\n" @@ -3954,7 +4023,7 @@ msgstr "" " SHELL\n" " Shell für den Befehl \\!\n" -#: help.c:510 +#: help.c:512 #, c-format msgid "" " TMPDIR\n" @@ -3963,11 +4032,11 @@ msgstr "" " TMPDIR\n" " Verzeichnis für temporäre Dateien\n" -#: help.c:554 +#: help.c:557 msgid "Available help:\n" msgstr "Verfügbare Hilfe:\n" -#: help.c:642 +#: help.c:652 #, c-format msgid "" "Command: %s\n" @@ -3986,7 +4055,7 @@ msgstr "" "URL: %s\n" "\n" -#: help.c:661 +#: help.c:675 #, c-format msgid "" "No help available for \"%s\".\n" @@ -4052,19 +4121,19 @@ msgstr "" "Verwenden Sie den Kommandozeilen-Client pg_restore, um diesen Dump in die\n" "Datenbank zurückzuspielen.\n" -#: mainloop.c:299 +#: mainloop.c:298 msgid "Use \\? for help or press control-C to clear the input buffer." msgstr "Verwenden Sie \\? für Hilfe oder drücken Sie Strg-C um den Eingabepuffer zu löschen." -#: mainloop.c:301 +#: mainloop.c:300 msgid "Use \\? for help." msgstr "Verwenden Sie \\? für Hilfe." -#: mainloop.c:305 +#: mainloop.c:304 msgid "You are using psql, the command-line interface to PostgreSQL." msgstr "Dies ist psql, die Kommandozeilenschnittstelle für PostgreSQL." -#: mainloop.c:306 +#: mainloop.c:305 #, c-format msgid "" "Type: \\copyright for distribution terms\n" @@ -4079,24 +4148,24 @@ msgstr "" " \\g oder Semikolon, um eine Anfrage auszuführen\n" " \\q um zu beenden\n" -#: mainloop.c:330 +#: mainloop.c:329 msgid "Use \\q to quit." msgstr "Verwenden Sie \\q zum beenden." -#: mainloop.c:333 mainloop.c:357 +#: mainloop.c:332 mainloop.c:356 msgid "Use control-D to quit." msgstr "Verwenden Sie Strg-D zum beenden." -#: mainloop.c:335 mainloop.c:359 +#: mainloop.c:334 mainloop.c:358 msgid "Use control-C to quit." msgstr "Verwenden Sie Strg-C zum beenden." -#: mainloop.c:466 mainloop.c:614 +#: mainloop.c:465 mainloop.c:613 #, c-format msgid "query ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "Anfrage ignoriert; verwenden Sie \\endif oder Strg-C um den aktuellen \\if-Block zu beenden" -#: mainloop.c:632 +#: mainloop.c:631 #, c-format msgid "reached EOF without finding closing \\endif(s)" msgstr "Dateiende erreicht, aber schließendes \\endif fehlt" @@ -4111,2265 +4180,2314 @@ msgstr "Zeichenkette in Anführungszeichen nicht abgeschlossen" msgid "%s: out of memory" msgstr "%s: Speicher aufgebraucht" -#: sql_help.c:35 sql_help.c:38 sql_help.c:41 sql_help.c:65 sql_help.c:66 -#: sql_help.c:68 sql_help.c:70 sql_help.c:81 sql_help.c:83 sql_help.c:85 -#: sql_help.c:111 sql_help.c:117 sql_help.c:119 sql_help.c:121 sql_help.c:123 -#: sql_help.c:126 sql_help.c:128 sql_help.c:130 sql_help.c:235 sql_help.c:237 -#: sql_help.c:238 sql_help.c:240 sql_help.c:242 sql_help.c:245 sql_help.c:247 -#: sql_help.c:249 sql_help.c:251 sql_help.c:263 sql_help.c:264 sql_help.c:265 -#: sql_help.c:267 sql_help.c:316 sql_help.c:318 sql_help.c:320 sql_help.c:322 -#: sql_help.c:391 sql_help.c:396 sql_help.c:398 sql_help.c:440 sql_help.c:442 -#: sql_help.c:445 sql_help.c:447 sql_help.c:515 sql_help.c:520 sql_help.c:525 -#: sql_help.c:530 sql_help.c:535 sql_help.c:588 sql_help.c:590 sql_help.c:592 -#: sql_help.c:594 sql_help.c:596 sql_help.c:599 sql_help.c:601 sql_help.c:604 -#: sql_help.c:615 sql_help.c:617 sql_help.c:658 sql_help.c:660 sql_help.c:662 -#: sql_help.c:665 sql_help.c:667 sql_help.c:669 sql_help.c:702 sql_help.c:706 -#: sql_help.c:710 sql_help.c:729 sql_help.c:732 sql_help.c:735 sql_help.c:764 -#: sql_help.c:776 sql_help.c:784 sql_help.c:787 sql_help.c:790 sql_help.c:805 -#: sql_help.c:808 sql_help.c:837 sql_help.c:842 sql_help.c:847 sql_help.c:852 -#: sql_help.c:857 sql_help.c:879 sql_help.c:881 sql_help.c:883 sql_help.c:885 -#: sql_help.c:888 sql_help.c:890 sql_help.c:931 sql_help.c:975 sql_help.c:980 -#: sql_help.c:985 sql_help.c:990 sql_help.c:995 sql_help.c:1014 sql_help.c:1025 -#: sql_help.c:1027 sql_help.c:1046 sql_help.c:1056 sql_help.c:1058 -#: sql_help.c:1060 sql_help.c:1072 sql_help.c:1076 sql_help.c:1078 -#: sql_help.c:1090 sql_help.c:1092 sql_help.c:1094 sql_help.c:1096 -#: sql_help.c:1112 sql_help.c:1114 sql_help.c:1118 sql_help.c:1121 -#: sql_help.c:1122 sql_help.c:1123 sql_help.c:1126 sql_help.c:1128 -#: sql_help.c:1262 sql_help.c:1264 sql_help.c:1267 sql_help.c:1270 -#: sql_help.c:1272 sql_help.c:1274 sql_help.c:1277 sql_help.c:1280 -#: sql_help.c:1391 sql_help.c:1393 sql_help.c:1395 sql_help.c:1398 -#: sql_help.c:1419 sql_help.c:1422 sql_help.c:1425 sql_help.c:1428 -#: sql_help.c:1432 sql_help.c:1434 sql_help.c:1436 sql_help.c:1438 -#: sql_help.c:1452 sql_help.c:1455 sql_help.c:1457 sql_help.c:1459 -#: sql_help.c:1469 sql_help.c:1471 sql_help.c:1481 sql_help.c:1483 -#: sql_help.c:1493 sql_help.c:1496 sql_help.c:1519 sql_help.c:1521 -#: sql_help.c:1523 sql_help.c:1525 sql_help.c:1528 sql_help.c:1530 -#: sql_help.c:1533 sql_help.c:1536 sql_help.c:1586 sql_help.c:1629 -#: sql_help.c:1632 sql_help.c:1634 sql_help.c:1636 sql_help.c:1639 -#: sql_help.c:1641 sql_help.c:1643 sql_help.c:1646 sql_help.c:1696 -#: sql_help.c:1712 sql_help.c:1933 sql_help.c:2002 sql_help.c:2021 -#: sql_help.c:2034 sql_help.c:2091 sql_help.c:2098 sql_help.c:2108 -#: sql_help.c:2129 sql_help.c:2155 sql_help.c:2173 sql_help.c:2200 -#: sql_help.c:2295 sql_help.c:2340 sql_help.c:2364 sql_help.c:2387 -#: sql_help.c:2391 sql_help.c:2425 sql_help.c:2445 sql_help.c:2467 -#: sql_help.c:2481 sql_help.c:2501 sql_help.c:2524 sql_help.c:2554 -#: sql_help.c:2579 sql_help.c:2625 sql_help.c:2903 sql_help.c:2916 -#: sql_help.c:2933 sql_help.c:2949 sql_help.c:2989 sql_help.c:3041 -#: sql_help.c:3045 sql_help.c:3047 sql_help.c:3053 sql_help.c:3071 -#: sql_help.c:3098 sql_help.c:3133 sql_help.c:3145 sql_help.c:3154 -#: sql_help.c:3198 sql_help.c:3212 sql_help.c:3240 sql_help.c:3248 -#: sql_help.c:3260 sql_help.c:3270 sql_help.c:3278 sql_help.c:3286 -#: sql_help.c:3294 sql_help.c:3302 sql_help.c:3311 sql_help.c:3322 -#: sql_help.c:3330 sql_help.c:3338 sql_help.c:3346 sql_help.c:3354 -#: sql_help.c:3364 sql_help.c:3373 sql_help.c:3382 sql_help.c:3390 -#: sql_help.c:3400 sql_help.c:3411 sql_help.c:3419 sql_help.c:3428 -#: sql_help.c:3439 sql_help.c:3448 sql_help.c:3456 sql_help.c:3464 -#: sql_help.c:3472 sql_help.c:3480 sql_help.c:3488 sql_help.c:3496 -#: sql_help.c:3504 sql_help.c:3512 sql_help.c:3520 sql_help.c:3528 -#: sql_help.c:3545 sql_help.c:3554 sql_help.c:3562 sql_help.c:3579 -#: sql_help.c:3594 sql_help.c:3869 sql_help.c:3920 sql_help.c:3949 -#: sql_help.c:3962 sql_help.c:4407 sql_help.c:4455 sql_help.c:4596 +#: sql_help.c:35 sql_help.c:38 sql_help.c:41 sql_help.c:63 sql_help.c:65 +#: sql_help.c:67 sql_help.c:78 sql_help.c:80 sql_help.c:82 sql_help.c:108 +#: sql_help.c:114 sql_help.c:116 sql_help.c:118 sql_help.c:120 sql_help.c:123 +#: sql_help.c:125 sql_help.c:127 sql_help.c:232 sql_help.c:234 sql_help.c:235 +#: sql_help.c:237 sql_help.c:239 sql_help.c:242 sql_help.c:244 sql_help.c:246 +#: sql_help.c:248 sql_help.c:260 sql_help.c:261 sql_help.c:262 sql_help.c:264 +#: sql_help.c:313 sql_help.c:315 sql_help.c:317 sql_help.c:319 sql_help.c:388 +#: sql_help.c:393 sql_help.c:395 sql_help.c:437 sql_help.c:439 sql_help.c:442 +#: sql_help.c:444 sql_help.c:512 sql_help.c:517 sql_help.c:522 sql_help.c:527 +#: sql_help.c:532 sql_help.c:587 sql_help.c:589 sql_help.c:591 sql_help.c:593 +#: sql_help.c:595 sql_help.c:597 sql_help.c:600 sql_help.c:602 sql_help.c:605 +#: sql_help.c:616 sql_help.c:618 sql_help.c:660 sql_help.c:662 sql_help.c:664 +#: sql_help.c:667 sql_help.c:669 sql_help.c:671 sql_help.c:706 sql_help.c:710 +#: sql_help.c:714 sql_help.c:733 sql_help.c:736 sql_help.c:739 sql_help.c:768 +#: sql_help.c:780 sql_help.c:788 sql_help.c:791 sql_help.c:794 sql_help.c:809 +#: sql_help.c:812 sql_help.c:841 sql_help.c:846 sql_help.c:851 sql_help.c:856 +#: sql_help.c:861 sql_help.c:883 sql_help.c:885 sql_help.c:887 sql_help.c:889 +#: sql_help.c:892 sql_help.c:894 sql_help.c:936 sql_help.c:980 sql_help.c:985 +#: sql_help.c:990 sql_help.c:995 sql_help.c:1000 sql_help.c:1019 +#: sql_help.c:1030 sql_help.c:1032 sql_help.c:1051 sql_help.c:1061 +#: sql_help.c:1063 sql_help.c:1065 sql_help.c:1077 sql_help.c:1081 +#: sql_help.c:1083 sql_help.c:1095 sql_help.c:1097 sql_help.c:1099 +#: sql_help.c:1101 sql_help.c:1119 sql_help.c:1121 sql_help.c:1125 +#: sql_help.c:1129 sql_help.c:1133 sql_help.c:1136 sql_help.c:1137 +#: sql_help.c:1138 sql_help.c:1141 sql_help.c:1143 sql_help.c:1279 +#: sql_help.c:1281 sql_help.c:1284 sql_help.c:1287 sql_help.c:1289 +#: sql_help.c:1291 sql_help.c:1294 sql_help.c:1297 sql_help.c:1411 +#: sql_help.c:1413 sql_help.c:1415 sql_help.c:1418 sql_help.c:1439 +#: sql_help.c:1442 sql_help.c:1445 sql_help.c:1448 sql_help.c:1452 +#: sql_help.c:1454 sql_help.c:1456 sql_help.c:1458 sql_help.c:1472 +#: sql_help.c:1475 sql_help.c:1477 sql_help.c:1479 sql_help.c:1489 +#: sql_help.c:1491 sql_help.c:1501 sql_help.c:1503 sql_help.c:1513 +#: sql_help.c:1516 sql_help.c:1539 sql_help.c:1541 sql_help.c:1543 +#: sql_help.c:1545 sql_help.c:1548 sql_help.c:1550 sql_help.c:1553 +#: sql_help.c:1556 sql_help.c:1607 sql_help.c:1650 sql_help.c:1653 +#: sql_help.c:1655 sql_help.c:1657 sql_help.c:1660 sql_help.c:1662 +#: sql_help.c:1664 sql_help.c:1667 sql_help.c:1717 sql_help.c:1733 +#: sql_help.c:1964 sql_help.c:2033 sql_help.c:2052 sql_help.c:2065 +#: sql_help.c:2121 sql_help.c:2127 sql_help.c:2137 sql_help.c:2158 +#: sql_help.c:2184 sql_help.c:2202 sql_help.c:2229 sql_help.c:2325 +#: sql_help.c:2371 sql_help.c:2395 sql_help.c:2418 sql_help.c:2422 +#: sql_help.c:2456 sql_help.c:2476 sql_help.c:2498 sql_help.c:2512 +#: sql_help.c:2533 sql_help.c:2557 sql_help.c:2587 sql_help.c:2612 +#: sql_help.c:2659 sql_help.c:2947 sql_help.c:2960 sql_help.c:2977 +#: sql_help.c:2993 sql_help.c:3033 sql_help.c:3087 sql_help.c:3091 +#: sql_help.c:3093 sql_help.c:3100 sql_help.c:3119 sql_help.c:3146 +#: sql_help.c:3181 sql_help.c:3193 sql_help.c:3202 sql_help.c:3246 +#: sql_help.c:3260 sql_help.c:3288 sql_help.c:3296 sql_help.c:3308 +#: sql_help.c:3318 sql_help.c:3326 sql_help.c:3334 sql_help.c:3342 +#: sql_help.c:3350 sql_help.c:3359 sql_help.c:3370 sql_help.c:3378 +#: sql_help.c:3386 sql_help.c:3394 sql_help.c:3402 sql_help.c:3412 +#: sql_help.c:3421 sql_help.c:3430 sql_help.c:3438 sql_help.c:3448 +#: sql_help.c:3459 sql_help.c:3467 sql_help.c:3476 sql_help.c:3487 +#: sql_help.c:3496 sql_help.c:3504 sql_help.c:3512 sql_help.c:3520 +#: sql_help.c:3528 sql_help.c:3536 sql_help.c:3544 sql_help.c:3552 +#: sql_help.c:3560 sql_help.c:3568 sql_help.c:3576 sql_help.c:3593 +#: sql_help.c:3602 sql_help.c:3610 sql_help.c:3627 sql_help.c:3642 +#: sql_help.c:3944 sql_help.c:3995 sql_help.c:4024 sql_help.c:4039 +#: sql_help.c:4524 sql_help.c:4572 sql_help.c:4723 msgid "name" msgstr "Name" -#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1783 -#: sql_help.c:3213 sql_help.c:4193 +#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:324 sql_help.c:1814 +#: sql_help.c:3261 sql_help.c:4300 msgid "aggregate_signature" msgstr "Aggregatsignatur" -#: sql_help.c:37 sql_help.c:67 sql_help.c:82 sql_help.c:118 sql_help.c:250 -#: sql_help.c:268 sql_help.c:399 sql_help.c:446 sql_help.c:524 sql_help.c:571 -#: sql_help.c:589 sql_help.c:616 sql_help.c:666 sql_help.c:731 sql_help.c:786 -#: sql_help.c:807 sql_help.c:846 sql_help.c:891 sql_help.c:932 sql_help.c:984 -#: sql_help.c:1016 sql_help.c:1026 sql_help.c:1059 sql_help.c:1079 -#: sql_help.c:1093 sql_help.c:1129 sql_help.c:1271 sql_help.c:1392 -#: sql_help.c:1435 sql_help.c:1456 sql_help.c:1470 sql_help.c:1482 -#: sql_help.c:1495 sql_help.c:1522 sql_help.c:1587 sql_help.c:1640 +#: sql_help.c:37 sql_help.c:64 sql_help.c:79 sql_help.c:115 sql_help.c:247 +#: sql_help.c:265 sql_help.c:396 sql_help.c:443 sql_help.c:521 sql_help.c:569 +#: sql_help.c:588 sql_help.c:617 sql_help.c:668 sql_help.c:735 sql_help.c:790 +#: sql_help.c:811 sql_help.c:850 sql_help.c:895 sql_help.c:937 sql_help.c:989 +#: sql_help.c:1021 sql_help.c:1031 sql_help.c:1064 sql_help.c:1084 +#: sql_help.c:1098 sql_help.c:1144 sql_help.c:1288 sql_help.c:1412 +#: sql_help.c:1455 sql_help.c:1476 sql_help.c:1490 sql_help.c:1502 +#: sql_help.c:1515 sql_help.c:1542 sql_help.c:1608 sql_help.c:1661 msgid "new_name" msgstr "neuer_Name" -#: sql_help.c:40 sql_help.c:69 sql_help.c:84 sql_help.c:120 sql_help.c:248 -#: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:618 -#: sql_help.c:627 sql_help.c:685 sql_help.c:705 sql_help.c:734 sql_help.c:789 -#: sql_help.c:851 sql_help.c:889 sql_help.c:989 sql_help.c:1028 sql_help.c:1057 -#: sql_help.c:1077 sql_help.c:1091 sql_help.c:1127 sql_help.c:1332 -#: sql_help.c:1394 sql_help.c:1437 sql_help.c:1458 sql_help.c:1520 -#: sql_help.c:1635 sql_help.c:2889 +#: sql_help.c:40 sql_help.c:66 sql_help.c:81 sql_help.c:117 sql_help.c:245 +#: sql_help.c:263 sql_help.c:394 sql_help.c:479 sql_help.c:526 sql_help.c:619 +#: sql_help.c:628 sql_help.c:689 sql_help.c:709 sql_help.c:738 sql_help.c:793 +#: sql_help.c:855 sql_help.c:893 sql_help.c:994 sql_help.c:1033 sql_help.c:1062 +#: sql_help.c:1082 sql_help.c:1096 sql_help.c:1142 sql_help.c:1351 +#: sql_help.c:1414 sql_help.c:1457 sql_help.c:1478 sql_help.c:1540 +#: sql_help.c:1656 sql_help.c:2933 msgid "new_owner" msgstr "neuer_Eigentümer" -#: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:252 sql_help.c:319 -#: sql_help.c:448 sql_help.c:534 sql_help.c:668 sql_help.c:709 sql_help.c:737 -#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1095 -#: sql_help.c:1273 sql_help.c:1439 sql_help.c:1460 sql_help.c:1472 -#: sql_help.c:1484 sql_help.c:1524 sql_help.c:1642 +#: sql_help.c:43 sql_help.c:68 sql_help.c:83 sql_help.c:249 sql_help.c:316 +#: sql_help.c:445 sql_help.c:531 sql_help.c:670 sql_help.c:713 sql_help.c:741 +#: sql_help.c:796 sql_help.c:860 sql_help.c:999 sql_help.c:1066 sql_help.c:1100 +#: sql_help.c:1290 sql_help.c:1459 sql_help.c:1480 sql_help.c:1492 +#: sql_help.c:1504 sql_help.c:1544 sql_help.c:1663 msgid "new_schema" msgstr "neues_Schema" -#: sql_help.c:44 sql_help.c:1847 sql_help.c:3214 sql_help.c:4222 +#: sql_help.c:44 sql_help.c:1878 sql_help.c:3262 sql_help.c:4329 msgid "where aggregate_signature is:" msgstr "wobei Aggregatsignatur Folgendes ist:" -#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:337 sql_help.c:350 -#: sql_help.c:354 sql_help.c:370 sql_help.c:373 sql_help.c:376 sql_help.c:516 -#: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:838 -#: sql_help.c:843 sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:976 -#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1801 -#: sql_help.c:1818 sql_help.c:1824 sql_help.c:1848 sql_help.c:1851 -#: sql_help.c:1854 sql_help.c:2003 sql_help.c:2022 sql_help.c:2025 -#: sql_help.c:2296 sql_help.c:2502 sql_help.c:3215 sql_help.c:3218 -#: sql_help.c:3221 sql_help.c:3312 sql_help.c:3401 sql_help.c:3429 -#: sql_help.c:3753 sql_help.c:4101 sql_help.c:4199 sql_help.c:4206 -#: sql_help.c:4212 sql_help.c:4223 sql_help.c:4226 sql_help.c:4229 +#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:334 sql_help.c:347 +#: sql_help.c:351 sql_help.c:367 sql_help.c:370 sql_help.c:373 sql_help.c:513 +#: sql_help.c:518 sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:842 +#: sql_help.c:847 sql_help.c:852 sql_help.c:857 sql_help.c:862 sql_help.c:981 +#: sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1001 sql_help.c:1832 +#: sql_help.c:1849 sql_help.c:1855 sql_help.c:1879 sql_help.c:1882 +#: sql_help.c:1885 sql_help.c:2034 sql_help.c:2053 sql_help.c:2056 +#: sql_help.c:2326 sql_help.c:2534 sql_help.c:3263 sql_help.c:3266 +#: sql_help.c:3269 sql_help.c:3360 sql_help.c:3449 sql_help.c:3477 +#: sql_help.c:3822 sql_help.c:4202 sql_help.c:4306 sql_help.c:4313 +#: sql_help.c:4319 sql_help.c:4330 sql_help.c:4333 sql_help.c:4336 msgid "argmode" msgstr "Argmodus" -#: sql_help.c:46 sql_help.c:49 sql_help.c:52 sql_help.c:338 sql_help.c:351 -#: sql_help.c:355 sql_help.c:371 sql_help.c:374 sql_help.c:377 sql_help.c:517 -#: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:839 -#: sql_help.c:844 sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:977 -#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1802 -#: sql_help.c:1819 sql_help.c:1825 sql_help.c:1849 sql_help.c:1852 -#: sql_help.c:1855 sql_help.c:2004 sql_help.c:2023 sql_help.c:2026 -#: sql_help.c:2297 sql_help.c:2503 sql_help.c:3216 sql_help.c:3219 -#: sql_help.c:3222 sql_help.c:3313 sql_help.c:3402 sql_help.c:3430 -#: sql_help.c:4200 sql_help.c:4207 sql_help.c:4213 sql_help.c:4224 -#: sql_help.c:4227 sql_help.c:4230 +#: sql_help.c:46 sql_help.c:49 sql_help.c:52 sql_help.c:335 sql_help.c:348 +#: sql_help.c:352 sql_help.c:368 sql_help.c:371 sql_help.c:374 sql_help.c:514 +#: sql_help.c:519 sql_help.c:524 sql_help.c:529 sql_help.c:534 sql_help.c:843 +#: sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:863 sql_help.c:982 +#: sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1002 sql_help.c:1833 +#: sql_help.c:1850 sql_help.c:1856 sql_help.c:1880 sql_help.c:1883 +#: sql_help.c:1886 sql_help.c:2035 sql_help.c:2054 sql_help.c:2057 +#: sql_help.c:2327 sql_help.c:2535 sql_help.c:3264 sql_help.c:3267 +#: sql_help.c:3270 sql_help.c:3361 sql_help.c:3450 sql_help.c:3478 +#: sql_help.c:4307 sql_help.c:4314 sql_help.c:4320 sql_help.c:4331 +#: sql_help.c:4334 sql_help.c:4337 msgid "argname" msgstr "Argname" -#: sql_help.c:47 sql_help.c:50 sql_help.c:53 sql_help.c:339 sql_help.c:352 -#: sql_help.c:356 sql_help.c:372 sql_help.c:375 sql_help.c:378 sql_help.c:518 -#: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:840 -#: sql_help.c:845 sql_help.c:850 sql_help.c:855 sql_help.c:860 sql_help.c:978 -#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1803 -#: sql_help.c:1820 sql_help.c:1826 sql_help.c:1850 sql_help.c:1853 -#: sql_help.c:1856 sql_help.c:2298 sql_help.c:2504 sql_help.c:3217 -#: sql_help.c:3220 sql_help.c:3223 sql_help.c:3314 sql_help.c:3403 -#: sql_help.c:3431 sql_help.c:4201 sql_help.c:4208 sql_help.c:4214 -#: sql_help.c:4225 sql_help.c:4228 sql_help.c:4231 +#: sql_help.c:47 sql_help.c:50 sql_help.c:53 sql_help.c:336 sql_help.c:349 +#: sql_help.c:353 sql_help.c:369 sql_help.c:372 sql_help.c:375 sql_help.c:515 +#: sql_help.c:520 sql_help.c:525 sql_help.c:530 sql_help.c:535 sql_help.c:844 +#: sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:864 sql_help.c:983 +#: sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1003 sql_help.c:1834 +#: sql_help.c:1851 sql_help.c:1857 sql_help.c:1881 sql_help.c:1884 +#: sql_help.c:1887 sql_help.c:2328 sql_help.c:2536 sql_help.c:3265 +#: sql_help.c:3268 sql_help.c:3271 sql_help.c:3362 sql_help.c:3451 +#: sql_help.c:3479 sql_help.c:4308 sql_help.c:4315 sql_help.c:4321 +#: sql_help.c:4332 sql_help.c:4335 sql_help.c:4338 msgid "argtype" msgstr "Argtyp" -#: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:926 -#: sql_help.c:1074 sql_help.c:1453 sql_help.c:1581 sql_help.c:1613 -#: sql_help.c:1665 sql_help.c:1904 sql_help.c:1911 sql_help.c:2203 -#: sql_help.c:2245 sql_help.c:2252 sql_help.c:2261 sql_help.c:2341 -#: sql_help.c:2555 sql_help.c:2647 sql_help.c:2918 sql_help.c:3099 -#: sql_help.c:3121 sql_help.c:3261 sql_help.c:3616 sql_help.c:3788 -#: sql_help.c:3961 sql_help.c:4658 +#: sql_help.c:109 sql_help.c:391 sql_help.c:468 sql_help.c:480 sql_help.c:931 +#: sql_help.c:1079 sql_help.c:1473 sql_help.c:1602 sql_help.c:1634 +#: sql_help.c:1686 sql_help.c:1749 sql_help.c:1935 sql_help.c:1942 +#: sql_help.c:2232 sql_help.c:2274 sql_help.c:2281 sql_help.c:2290 +#: sql_help.c:2372 sql_help.c:2588 sql_help.c:2681 sql_help.c:2962 +#: sql_help.c:3147 sql_help.c:3169 sql_help.c:3309 sql_help.c:3664 +#: sql_help.c:3863 sql_help.c:4038 sql_help.c:4786 msgid "option" msgstr "Option" -#: sql_help.c:113 sql_help.c:927 sql_help.c:1582 sql_help.c:2342 -#: sql_help.c:2556 sql_help.c:3100 sql_help.c:3262 +#: sql_help.c:110 sql_help.c:932 sql_help.c:1603 sql_help.c:2373 +#: sql_help.c:2589 sql_help.c:3148 sql_help.c:3310 msgid "where option can be:" msgstr "wobei Option Folgendes sein kann:" -#: sql_help.c:114 sql_help.c:2137 +#: sql_help.c:111 sql_help.c:2166 msgid "allowconn" msgstr "allowconn" -#: sql_help.c:115 sql_help.c:928 sql_help.c:1583 sql_help.c:2138 -#: sql_help.c:2343 sql_help.c:2557 sql_help.c:3101 +#: sql_help.c:112 sql_help.c:933 sql_help.c:1604 sql_help.c:2167 +#: sql_help.c:2374 sql_help.c:2590 sql_help.c:3149 msgid "connlimit" msgstr "Verbindungslimit" -#: sql_help.c:116 sql_help.c:2139 +#: sql_help.c:113 sql_help.c:2168 msgid "istemplate" msgstr "istemplate" -#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1276 sql_help.c:1325 +#: sql_help.c:119 sql_help.c:607 sql_help.c:673 sql_help.c:1293 sql_help.c:1344 +#: sql_help.c:4042 msgid "new_tablespace" msgstr "neuer_Tablespace" -#: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:544 sql_help.c:546 -#: sql_help.c:547 sql_help.c:863 sql_help.c:865 sql_help.c:866 sql_help.c:935 -#: sql_help.c:939 sql_help.c:942 sql_help.c:1003 sql_help.c:1005 -#: sql_help.c:1006 sql_help.c:1140 sql_help.c:1143 sql_help.c:1590 -#: sql_help.c:1594 sql_help.c:1597 sql_help.c:2308 sql_help.c:2508 -#: sql_help.c:3980 sql_help.c:4396 +#: sql_help.c:121 sql_help.c:124 sql_help.c:126 sql_help.c:541 sql_help.c:543 +#: sql_help.c:544 sql_help.c:867 sql_help.c:869 sql_help.c:870 sql_help.c:940 +#: sql_help.c:944 sql_help.c:947 sql_help.c:1008 sql_help.c:1010 +#: sql_help.c:1011 sql_help.c:1155 sql_help.c:1158 sql_help.c:1611 +#: sql_help.c:1615 sql_help.c:1618 sql_help.c:2338 sql_help.c:2540 +#: sql_help.c:4060 sql_help.c:4513 msgid "configuration_parameter" msgstr "Konfigurationsparameter" -#: sql_help.c:125 sql_help.c:395 sql_help.c:466 sql_help.c:472 sql_help.c:484 -#: sql_help.c:545 sql_help.c:598 sql_help.c:677 sql_help.c:683 sql_help.c:864 -#: sql_help.c:887 sql_help.c:936 sql_help.c:1004 sql_help.c:1075 -#: sql_help.c:1117 sql_help.c:1120 sql_help.c:1125 sql_help.c:1141 -#: sql_help.c:1142 sql_help.c:1307 sql_help.c:1327 sql_help.c:1375 -#: sql_help.c:1397 sql_help.c:1454 sql_help.c:1538 sql_help.c:1591 -#: sql_help.c:1614 sql_help.c:2204 sql_help.c:2246 sql_help.c:2253 -#: sql_help.c:2262 sql_help.c:2309 sql_help.c:2310 sql_help.c:2372 -#: sql_help.c:2375 sql_help.c:2409 sql_help.c:2509 sql_help.c:2510 -#: sql_help.c:2527 sql_help.c:2648 sql_help.c:2678 sql_help.c:2783 -#: sql_help.c:2796 sql_help.c:2810 sql_help.c:2851 sql_help.c:2875 -#: sql_help.c:2892 sql_help.c:2919 sql_help.c:3122 sql_help.c:3789 -#: sql_help.c:4397 sql_help.c:4398 +#: sql_help.c:122 sql_help.c:392 sql_help.c:463 sql_help.c:469 sql_help.c:481 +#: sql_help.c:542 sql_help.c:599 sql_help.c:679 sql_help.c:687 sql_help.c:868 +#: sql_help.c:891 sql_help.c:941 sql_help.c:1009 sql_help.c:1080 +#: sql_help.c:1124 sql_help.c:1128 sql_help.c:1132 sql_help.c:1135 +#: sql_help.c:1140 sql_help.c:1156 sql_help.c:1157 sql_help.c:1324 +#: sql_help.c:1346 sql_help.c:1395 sql_help.c:1417 sql_help.c:1474 +#: sql_help.c:1558 sql_help.c:1612 sql_help.c:1635 sql_help.c:2233 +#: sql_help.c:2275 sql_help.c:2282 sql_help.c:2291 sql_help.c:2339 +#: sql_help.c:2340 sql_help.c:2403 sql_help.c:2406 sql_help.c:2440 +#: sql_help.c:2541 sql_help.c:2542 sql_help.c:2560 sql_help.c:2682 +#: sql_help.c:2721 sql_help.c:2827 sql_help.c:2840 sql_help.c:2854 +#: sql_help.c:2895 sql_help.c:2919 sql_help.c:2936 sql_help.c:2963 +#: sql_help.c:3170 sql_help.c:3864 sql_help.c:4514 sql_help.c:4515 msgid "value" msgstr "Wert" -#: sql_help.c:197 +#: sql_help.c:194 msgid "target_role" msgstr "Zielrolle" -#: sql_help.c:198 sql_help.c:2188 sql_help.c:2603 sql_help.c:2608 -#: sql_help.c:3735 sql_help.c:3742 sql_help.c:3756 sql_help.c:3762 -#: sql_help.c:4083 sql_help.c:4090 sql_help.c:4104 sql_help.c:4110 +#: sql_help.c:195 sql_help.c:2217 sql_help.c:2637 sql_help.c:2642 +#: sql_help.c:3797 sql_help.c:3806 sql_help.c:3825 sql_help.c:3834 +#: sql_help.c:4177 sql_help.c:4186 sql_help.c:4205 sql_help.c:4214 msgid "schema_name" msgstr "Schemaname" -#: sql_help.c:199 +#: sql_help.c:196 msgid "abbreviated_grant_or_revoke" msgstr "abgekürztes_Grant_oder_Revoke" -#: sql_help.c:200 +#: sql_help.c:197 msgid "where abbreviated_grant_or_revoke is one of:" msgstr "wobei abgekürztes_Grant_oder_Revoke Folgendes sein kann:" -#: sql_help.c:201 sql_help.c:202 sql_help.c:203 sql_help.c:204 sql_help.c:205 -#: sql_help.c:206 sql_help.c:207 sql_help.c:208 sql_help.c:209 sql_help.c:210 -#: sql_help.c:569 sql_help.c:605 sql_help.c:670 sql_help.c:810 sql_help.c:946 -#: sql_help.c:1275 sql_help.c:1601 sql_help.c:2346 sql_help.c:2347 -#: sql_help.c:2348 sql_help.c:2349 sql_help.c:2350 sql_help.c:2483 -#: sql_help.c:2560 sql_help.c:2561 sql_help.c:2562 sql_help.c:2563 -#: sql_help.c:2564 sql_help.c:3104 sql_help.c:3105 sql_help.c:3106 -#: sql_help.c:3107 sql_help.c:3108 sql_help.c:3768 sql_help.c:3772 -#: sql_help.c:4116 sql_help.c:4120 sql_help.c:4417 +#: sql_help.c:198 sql_help.c:199 sql_help.c:200 sql_help.c:201 sql_help.c:202 +#: sql_help.c:203 sql_help.c:204 sql_help.c:205 sql_help.c:206 sql_help.c:207 +#: sql_help.c:567 sql_help.c:606 sql_help.c:672 sql_help.c:814 sql_help.c:951 +#: sql_help.c:1292 sql_help.c:1622 sql_help.c:2377 sql_help.c:2378 +#: sql_help.c:2379 sql_help.c:2380 sql_help.c:2381 sql_help.c:2514 +#: sql_help.c:2593 sql_help.c:2594 sql_help.c:2595 sql_help.c:2596 +#: sql_help.c:2597 sql_help.c:3152 sql_help.c:3153 sql_help.c:3154 +#: sql_help.c:3155 sql_help.c:3156 sql_help.c:3843 sql_help.c:3847 +#: sql_help.c:4223 sql_help.c:4227 sql_help.c:4534 msgid "role_name" msgstr "Rollenname" -#: sql_help.c:236 sql_help.c:459 sql_help.c:1291 sql_help.c:1293 -#: sql_help.c:1342 sql_help.c:1354 sql_help.c:1379 sql_help.c:1631 -#: sql_help.c:2158 sql_help.c:2162 sql_help.c:2265 sql_help.c:2270 -#: sql_help.c:2368 sql_help.c:2778 sql_help.c:2791 sql_help.c:2805 -#: sql_help.c:2814 sql_help.c:2826 sql_help.c:2855 sql_help.c:3820 -#: sql_help.c:3835 sql_help.c:3837 sql_help.c:4282 sql_help.c:4283 -#: sql_help.c:4292 sql_help.c:4333 sql_help.c:4334 sql_help.c:4335 -#: sql_help.c:4336 sql_help.c:4337 sql_help.c:4338 sql_help.c:4371 -#: sql_help.c:4372 sql_help.c:4377 sql_help.c:4382 sql_help.c:4521 -#: sql_help.c:4522 sql_help.c:4531 sql_help.c:4572 sql_help.c:4573 -#: sql_help.c:4574 sql_help.c:4575 sql_help.c:4576 sql_help.c:4577 -#: sql_help.c:4624 sql_help.c:4626 sql_help.c:4685 sql_help.c:4741 -#: sql_help.c:4742 sql_help.c:4751 sql_help.c:4792 sql_help.c:4793 -#: sql_help.c:4794 sql_help.c:4795 sql_help.c:4796 sql_help.c:4797 +#: sql_help.c:233 sql_help.c:456 sql_help.c:1308 sql_help.c:1310 +#: sql_help.c:1361 sql_help.c:1374 sql_help.c:1399 sql_help.c:1652 +#: sql_help.c:2187 sql_help.c:2191 sql_help.c:2294 sql_help.c:2299 +#: sql_help.c:2399 sql_help.c:2698 sql_help.c:2703 sql_help.c:2705 +#: sql_help.c:2822 sql_help.c:2835 sql_help.c:2849 sql_help.c:2858 +#: sql_help.c:2870 sql_help.c:2899 sql_help.c:3895 sql_help.c:3910 +#: sql_help.c:3912 sql_help.c:4391 sql_help.c:4392 sql_help.c:4401 +#: sql_help.c:4443 sql_help.c:4444 sql_help.c:4445 sql_help.c:4446 +#: sql_help.c:4447 sql_help.c:4448 sql_help.c:4488 sql_help.c:4489 +#: sql_help.c:4494 sql_help.c:4499 sql_help.c:4640 sql_help.c:4641 +#: sql_help.c:4650 sql_help.c:4692 sql_help.c:4693 sql_help.c:4694 +#: sql_help.c:4695 sql_help.c:4696 sql_help.c:4697 sql_help.c:4751 +#: sql_help.c:4753 sql_help.c:4814 sql_help.c:4872 sql_help.c:4873 +#: sql_help.c:4882 sql_help.c:4924 sql_help.c:4925 sql_help.c:4926 +#: sql_help.c:4927 sql_help.c:4928 sql_help.c:4929 msgid "expression" msgstr "Ausdruck" -#: sql_help.c:239 +#: sql_help.c:236 msgid "domain_constraint" msgstr "Domänen-Constraint" -#: sql_help.c:241 sql_help.c:243 sql_help.c:246 sql_help.c:474 sql_help.c:475 -#: sql_help.c:1268 sql_help.c:1313 sql_help.c:1314 sql_help.c:1315 -#: sql_help.c:1341 sql_help.c:1353 sql_help.c:1370 sql_help.c:1789 -#: sql_help.c:1791 sql_help.c:2161 sql_help.c:2264 sql_help.c:2269 -#: sql_help.c:2813 sql_help.c:2825 sql_help.c:3832 +#: sql_help.c:238 sql_help.c:240 sql_help.c:243 sql_help.c:471 sql_help.c:472 +#: sql_help.c:1285 sql_help.c:1332 sql_help.c:1333 sql_help.c:1334 +#: sql_help.c:1360 sql_help.c:1373 sql_help.c:1390 sql_help.c:1820 +#: sql_help.c:1822 sql_help.c:2190 sql_help.c:2293 sql_help.c:2298 +#: sql_help.c:2857 sql_help.c:2869 sql_help.c:3907 msgid "constraint_name" msgstr "Constraint-Name" -#: sql_help.c:244 sql_help.c:1269 +#: sql_help.c:241 sql_help.c:1286 msgid "new_constraint_name" msgstr "neuer_Constraint-Name" -#: sql_help.c:317 sql_help.c:1073 +#: sql_help.c:314 sql_help.c:1078 msgid "new_version" msgstr "neue_Version" -#: sql_help.c:321 sql_help.c:323 +#: sql_help.c:318 sql_help.c:320 msgid "member_object" msgstr "Elementobjekt" -#: sql_help.c:324 +#: sql_help.c:321 msgid "where member_object is:" msgstr "wobei Elementobjekt Folgendes ist:" -#: sql_help.c:325 sql_help.c:330 sql_help.c:331 sql_help.c:332 sql_help.c:333 -#: sql_help.c:334 sql_help.c:335 sql_help.c:340 sql_help.c:344 sql_help.c:346 -#: sql_help.c:348 sql_help.c:357 sql_help.c:358 sql_help.c:359 sql_help.c:360 -#: sql_help.c:361 sql_help.c:362 sql_help.c:363 sql_help.c:364 sql_help.c:367 -#: sql_help.c:368 sql_help.c:1781 sql_help.c:1786 sql_help.c:1793 -#: sql_help.c:1794 sql_help.c:1795 sql_help.c:1796 sql_help.c:1797 -#: sql_help.c:1798 sql_help.c:1799 sql_help.c:1804 sql_help.c:1806 -#: sql_help.c:1810 sql_help.c:1812 sql_help.c:1816 sql_help.c:1821 -#: sql_help.c:1822 sql_help.c:1829 sql_help.c:1830 sql_help.c:1831 -#: sql_help.c:1832 sql_help.c:1833 sql_help.c:1834 sql_help.c:1835 -#: sql_help.c:1836 sql_help.c:1837 sql_help.c:1838 sql_help.c:1839 -#: sql_help.c:1844 sql_help.c:1845 sql_help.c:4189 sql_help.c:4194 -#: sql_help.c:4195 sql_help.c:4196 sql_help.c:4197 sql_help.c:4203 -#: sql_help.c:4204 sql_help.c:4209 sql_help.c:4210 sql_help.c:4215 -#: sql_help.c:4216 sql_help.c:4217 sql_help.c:4218 sql_help.c:4219 -#: sql_help.c:4220 +#: sql_help.c:322 sql_help.c:327 sql_help.c:328 sql_help.c:329 sql_help.c:330 +#: sql_help.c:331 sql_help.c:332 sql_help.c:337 sql_help.c:341 sql_help.c:343 +#: sql_help.c:345 sql_help.c:354 sql_help.c:355 sql_help.c:356 sql_help.c:357 +#: sql_help.c:358 sql_help.c:359 sql_help.c:360 sql_help.c:361 sql_help.c:364 +#: sql_help.c:365 sql_help.c:1812 sql_help.c:1817 sql_help.c:1824 +#: sql_help.c:1825 sql_help.c:1826 sql_help.c:1827 sql_help.c:1828 +#: sql_help.c:1829 sql_help.c:1830 sql_help.c:1835 sql_help.c:1837 +#: sql_help.c:1841 sql_help.c:1843 sql_help.c:1847 sql_help.c:1852 +#: sql_help.c:1853 sql_help.c:1860 sql_help.c:1861 sql_help.c:1862 +#: sql_help.c:1863 sql_help.c:1864 sql_help.c:1865 sql_help.c:1866 +#: sql_help.c:1867 sql_help.c:1868 sql_help.c:1869 sql_help.c:1870 +#: sql_help.c:1875 sql_help.c:1876 sql_help.c:4296 sql_help.c:4301 +#: sql_help.c:4302 sql_help.c:4303 sql_help.c:4304 sql_help.c:4310 +#: sql_help.c:4311 sql_help.c:4316 sql_help.c:4317 sql_help.c:4322 +#: sql_help.c:4323 sql_help.c:4324 sql_help.c:4325 sql_help.c:4326 +#: sql_help.c:4327 msgid "object_name" msgstr "Objektname" -#: sql_help.c:326 sql_help.c:1782 sql_help.c:4192 +#: sql_help.c:323 sql_help.c:1813 sql_help.c:4299 msgid "aggregate_name" msgstr "Aggregatname" -#: sql_help.c:328 sql_help.c:1784 sql_help.c:2068 sql_help.c:2072 -#: sql_help.c:2074 sql_help.c:3231 +#: sql_help.c:325 sql_help.c:1815 sql_help.c:2099 sql_help.c:2103 +#: sql_help.c:2105 sql_help.c:3279 msgid "source_type" msgstr "Quelltyp" -#: sql_help.c:329 sql_help.c:1785 sql_help.c:2069 sql_help.c:2073 -#: sql_help.c:2075 sql_help.c:3232 +#: sql_help.c:326 sql_help.c:1816 sql_help.c:2100 sql_help.c:2104 +#: sql_help.c:2106 sql_help.c:3280 msgid "target_type" msgstr "Zieltyp" -#: sql_help.c:336 sql_help.c:774 sql_help.c:1800 sql_help.c:2070 -#: sql_help.c:2111 sql_help.c:2176 sql_help.c:2426 sql_help.c:2457 -#: sql_help.c:2995 sql_help.c:4100 sql_help.c:4198 sql_help.c:4311 -#: sql_help.c:4315 sql_help.c:4319 sql_help.c:4322 sql_help.c:4550 -#: sql_help.c:4554 sql_help.c:4558 sql_help.c:4561 sql_help.c:4770 -#: sql_help.c:4774 sql_help.c:4778 sql_help.c:4781 +#: sql_help.c:333 sql_help.c:778 sql_help.c:1831 sql_help.c:2101 +#: sql_help.c:2140 sql_help.c:2205 sql_help.c:2457 sql_help.c:2488 +#: sql_help.c:3039 sql_help.c:4201 sql_help.c:4305 sql_help.c:4420 +#: sql_help.c:4424 sql_help.c:4428 sql_help.c:4431 sql_help.c:4669 +#: sql_help.c:4673 sql_help.c:4677 sql_help.c:4680 sql_help.c:4901 +#: sql_help.c:4905 sql_help.c:4909 sql_help.c:4912 msgid "function_name" msgstr "Funktionsname" -#: sql_help.c:341 sql_help.c:767 sql_help.c:1807 sql_help.c:2450 +#: sql_help.c:338 sql_help.c:771 sql_help.c:1838 sql_help.c:2481 msgid "operator_name" msgstr "Operatorname" -#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1808 -#: sql_help.c:2427 sql_help.c:3355 +#: sql_help.c:339 sql_help.c:707 sql_help.c:711 sql_help.c:715 sql_help.c:1839 +#: sql_help.c:2458 sql_help.c:3403 msgid "left_type" msgstr "linker_Typ" -#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1809 -#: sql_help.c:2428 sql_help.c:3356 +#: sql_help.c:340 sql_help.c:708 sql_help.c:712 sql_help.c:716 sql_help.c:1840 +#: sql_help.c:2459 sql_help.c:3404 msgid "right_type" msgstr "rechter_Typ" -#: sql_help.c:345 sql_help.c:347 sql_help.c:730 sql_help.c:733 sql_help.c:736 -#: sql_help.c:765 sql_help.c:777 sql_help.c:785 sql_help.c:788 sql_help.c:791 -#: sql_help.c:1359 sql_help.c:1811 sql_help.c:1813 sql_help.c:2447 -#: sql_help.c:2468 sql_help.c:2831 sql_help.c:3365 sql_help.c:3374 +#: sql_help.c:342 sql_help.c:344 sql_help.c:734 sql_help.c:737 sql_help.c:740 +#: sql_help.c:769 sql_help.c:781 sql_help.c:789 sql_help.c:792 sql_help.c:795 +#: sql_help.c:1379 sql_help.c:1842 sql_help.c:1844 sql_help.c:2478 +#: sql_help.c:2499 sql_help.c:2875 sql_help.c:3413 sql_help.c:3422 msgid "index_method" msgstr "Indexmethode" -#: sql_help.c:349 sql_help.c:1817 sql_help.c:4205 +#: sql_help.c:346 sql_help.c:1848 sql_help.c:4312 msgid "procedure_name" msgstr "Prozedurname" -#: sql_help.c:353 sql_help.c:1823 sql_help.c:3752 sql_help.c:4211 +#: sql_help.c:350 sql_help.c:1854 sql_help.c:3821 sql_help.c:4318 msgid "routine_name" msgstr "Routinenname" -#: sql_help.c:365 sql_help.c:1331 sql_help.c:1840 sql_help.c:2304 -#: sql_help.c:2507 sql_help.c:2786 sql_help.c:2962 sql_help.c:3536 -#: sql_help.c:3766 sql_help.c:4114 +#: sql_help.c:362 sql_help.c:1350 sql_help.c:1871 sql_help.c:2334 +#: sql_help.c:2539 sql_help.c:2830 sql_help.c:3006 sql_help.c:3584 +#: sql_help.c:3840 sql_help.c:4220 msgid "type_name" msgstr "Typname" -#: sql_help.c:366 sql_help.c:1841 sql_help.c:2303 sql_help.c:2506 -#: sql_help.c:2963 sql_help.c:3189 sql_help.c:3537 sql_help.c:3758 -#: sql_help.c:4106 +#: sql_help.c:363 sql_help.c:1872 sql_help.c:2333 sql_help.c:2538 +#: sql_help.c:3007 sql_help.c:3237 sql_help.c:3585 sql_help.c:3828 +#: sql_help.c:4208 msgid "lang_name" msgstr "Sprachname" -#: sql_help.c:369 +#: sql_help.c:366 msgid "and aggregate_signature is:" msgstr "und Aggregatsignatur Folgendes ist:" -#: sql_help.c:392 sql_help.c:1935 sql_help.c:2201 +#: sql_help.c:389 sql_help.c:1966 sql_help.c:2230 msgid "handler_function" msgstr "Handler-Funktion" -#: sql_help.c:393 sql_help.c:2202 +#: sql_help.c:390 sql_help.c:2231 msgid "validator_function" msgstr "Validator-Funktion" -#: sql_help.c:441 sql_help.c:519 sql_help.c:659 sql_help.c:841 sql_help.c:979 -#: sql_help.c:1263 sql_help.c:1529 +#: sql_help.c:438 sql_help.c:516 sql_help.c:661 sql_help.c:845 sql_help.c:984 +#: sql_help.c:1280 sql_help.c:1549 msgid "action" msgstr "Aktion" -#: sql_help.c:443 sql_help.c:450 sql_help.c:454 sql_help.c:455 sql_help.c:458 -#: sql_help.c:460 sql_help.c:461 sql_help.c:462 sql_help.c:464 sql_help.c:467 -#: sql_help.c:469 sql_help.c:470 sql_help.c:663 sql_help.c:673 sql_help.c:675 -#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1265 -#: sql_help.c:1283 sql_help.c:1287 sql_help.c:1288 sql_help.c:1292 -#: sql_help.c:1294 sql_help.c:1295 sql_help.c:1296 sql_help.c:1297 -#: sql_help.c:1299 sql_help.c:1302 sql_help.c:1303 sql_help.c:1305 -#: sql_help.c:1308 sql_help.c:1310 sql_help.c:1355 sql_help.c:1357 -#: sql_help.c:1364 sql_help.c:1373 sql_help.c:1378 sql_help.c:1630 -#: sql_help.c:1633 sql_help.c:1637 sql_help.c:1673 sql_help.c:1788 -#: sql_help.c:1901 sql_help.c:1907 sql_help.c:1920 sql_help.c:1921 -#: sql_help.c:1922 sql_help.c:2243 sql_help.c:2256 sql_help.c:2301 -#: sql_help.c:2367 sql_help.c:2373 sql_help.c:2406 sql_help.c:2633 -#: sql_help.c:2661 sql_help.c:2662 sql_help.c:2769 sql_help.c:2777 -#: sql_help.c:2787 sql_help.c:2790 sql_help.c:2800 sql_help.c:2804 -#: sql_help.c:2827 sql_help.c:2829 sql_help.c:2836 sql_help.c:2849 -#: sql_help.c:2854 sql_help.c:2872 sql_help.c:2998 sql_help.c:3134 -#: sql_help.c:3737 sql_help.c:3738 sql_help.c:3819 sql_help.c:3834 -#: sql_help.c:3836 sql_help.c:3838 sql_help.c:4085 sql_help.c:4086 -#: sql_help.c:4191 sql_help.c:4342 sql_help.c:4581 sql_help.c:4623 -#: sql_help.c:4625 sql_help.c:4627 sql_help.c:4673 sql_help.c:4801 +#: sql_help.c:440 sql_help.c:447 sql_help.c:451 sql_help.c:452 sql_help.c:455 +#: sql_help.c:457 sql_help.c:458 sql_help.c:459 sql_help.c:461 sql_help.c:464 +#: sql_help.c:466 sql_help.c:467 sql_help.c:665 sql_help.c:675 sql_help.c:677 +#: sql_help.c:680 sql_help.c:682 sql_help.c:683 sql_help.c:1060 sql_help.c:1282 +#: sql_help.c:1300 sql_help.c:1304 sql_help.c:1305 sql_help.c:1309 +#: sql_help.c:1311 sql_help.c:1312 sql_help.c:1313 sql_help.c:1314 +#: sql_help.c:1316 sql_help.c:1319 sql_help.c:1320 sql_help.c:1322 +#: sql_help.c:1325 sql_help.c:1327 sql_help.c:1328 sql_help.c:1375 +#: sql_help.c:1377 sql_help.c:1384 sql_help.c:1393 sql_help.c:1398 +#: sql_help.c:1651 sql_help.c:1654 sql_help.c:1658 sql_help.c:1694 +#: sql_help.c:1819 sql_help.c:1932 sql_help.c:1938 sql_help.c:1951 +#: sql_help.c:1952 sql_help.c:1953 sql_help.c:2272 sql_help.c:2285 +#: sql_help.c:2331 sql_help.c:2398 sql_help.c:2404 sql_help.c:2437 +#: sql_help.c:2667 sql_help.c:2702 sql_help.c:2704 sql_help.c:2812 +#: sql_help.c:2821 sql_help.c:2831 sql_help.c:2834 sql_help.c:2844 +#: sql_help.c:2848 sql_help.c:2871 sql_help.c:2873 sql_help.c:2880 +#: sql_help.c:2893 sql_help.c:2898 sql_help.c:2916 sql_help.c:3042 +#: sql_help.c:3182 sql_help.c:3800 sql_help.c:3801 sql_help.c:3894 +#: sql_help.c:3909 sql_help.c:3911 sql_help.c:3913 sql_help.c:4180 +#: sql_help.c:4181 sql_help.c:4298 sql_help.c:4452 sql_help.c:4458 +#: sql_help.c:4460 sql_help.c:4701 sql_help.c:4707 sql_help.c:4709 +#: sql_help.c:4750 sql_help.c:4752 sql_help.c:4754 sql_help.c:4802 +#: sql_help.c:4933 sql_help.c:4939 sql_help.c:4941 msgid "column_name" msgstr "Spaltenname" -#: sql_help.c:444 sql_help.c:664 sql_help.c:1266 sql_help.c:1638 +#: sql_help.c:441 sql_help.c:666 sql_help.c:1283 sql_help.c:1659 msgid "new_column_name" msgstr "neuer_Spaltenname" -#: sql_help.c:449 sql_help.c:540 sql_help.c:672 sql_help.c:862 sql_help.c:1000 -#: sql_help.c:1282 sql_help.c:1539 +#: sql_help.c:446 sql_help.c:537 sql_help.c:674 sql_help.c:866 sql_help.c:1005 +#: sql_help.c:1299 sql_help.c:1559 msgid "where action is one of:" msgstr "wobei Aktion Folgendes sein kann:" -#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1284 -#: sql_help.c:1289 sql_help.c:1541 sql_help.c:1545 sql_help.c:2156 -#: sql_help.c:2244 sql_help.c:2446 sql_help.c:2626 sql_help.c:2770 -#: sql_help.c:3043 sql_help.c:3921 +#: sql_help.c:448 sql_help.c:453 sql_help.c:1052 sql_help.c:1301 +#: sql_help.c:1306 sql_help.c:1561 sql_help.c:1565 sql_help.c:2185 +#: sql_help.c:2273 sql_help.c:2477 sql_help.c:2660 sql_help.c:2813 +#: sql_help.c:3089 sql_help.c:3996 msgid "data_type" msgstr "Datentyp" -#: sql_help.c:452 sql_help.c:457 sql_help.c:1285 sql_help.c:1290 -#: sql_help.c:1542 sql_help.c:1546 sql_help.c:2157 sql_help.c:2247 -#: sql_help.c:2369 sql_help.c:2771 sql_help.c:2779 sql_help.c:2792 -#: sql_help.c:2806 sql_help.c:3044 sql_help.c:3050 sql_help.c:3829 +#: sql_help.c:449 sql_help.c:454 sql_help.c:1302 sql_help.c:1307 +#: sql_help.c:1562 sql_help.c:1566 sql_help.c:2186 sql_help.c:2276 +#: sql_help.c:2400 sql_help.c:2814 sql_help.c:2823 sql_help.c:2836 +#: sql_help.c:2850 sql_help.c:3090 sql_help.c:3096 sql_help.c:3904 msgid "collation" msgstr "Sortierfolge" -#: sql_help.c:453 sql_help.c:1286 sql_help.c:2248 sql_help.c:2257 -#: sql_help.c:2772 sql_help.c:2788 sql_help.c:2801 +#: sql_help.c:450 sql_help.c:1303 sql_help.c:2277 sql_help.c:2286 +#: sql_help.c:2816 sql_help.c:2832 sql_help.c:2845 msgid "column_constraint" msgstr "Spalten-Constraint" -#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1304 sql_help.c:4670 +#: sql_help.c:460 sql_help.c:604 sql_help.c:676 sql_help.c:1321 sql_help.c:4799 msgid "integer" msgstr "ganze_Zahl" -#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1306 -#: sql_help.c:1309 +#: sql_help.c:462 sql_help.c:465 sql_help.c:678 sql_help.c:681 sql_help.c:1323 +#: sql_help.c:1326 msgid "attribute_option" msgstr "Attributoption" -#: sql_help.c:473 sql_help.c:1311 sql_help.c:2249 sql_help.c:2258 -#: sql_help.c:2773 sql_help.c:2789 sql_help.c:2802 +#: sql_help.c:470 sql_help.c:1330 sql_help.c:2278 sql_help.c:2287 +#: sql_help.c:2817 sql_help.c:2833 sql_help.c:2846 msgid "table_constraint" msgstr "Tabellen-Constraint" -#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1316 -#: sql_help.c:1317 sql_help.c:1318 sql_help.c:1319 sql_help.c:1842 +#: sql_help.c:473 sql_help.c:474 sql_help.c:475 sql_help.c:476 sql_help.c:1335 +#: sql_help.c:1336 sql_help.c:1337 sql_help.c:1338 sql_help.c:1873 msgid "trigger_name" msgstr "Triggername" -#: sql_help.c:480 sql_help.c:481 sql_help.c:1329 sql_help.c:1330 -#: sql_help.c:2250 sql_help.c:2255 sql_help.c:2776 sql_help.c:2799 +#: sql_help.c:477 sql_help.c:478 sql_help.c:1348 sql_help.c:1349 +#: sql_help.c:2279 sql_help.c:2284 sql_help.c:2820 sql_help.c:2843 msgid "parent_table" msgstr "Elterntabelle" -#: sql_help.c:539 sql_help.c:595 sql_help.c:661 sql_help.c:861 sql_help.c:999 -#: sql_help.c:1498 sql_help.c:2187 +#: sql_help.c:536 sql_help.c:594 sql_help.c:663 sql_help.c:865 sql_help.c:1004 +#: sql_help.c:1518 sql_help.c:2216 msgid "extension_name" msgstr "Erweiterungsname" -#: sql_help.c:541 sql_help.c:1001 sql_help.c:2305 +#: sql_help.c:538 sql_help.c:1006 sql_help.c:2335 msgid "execution_cost" msgstr "Ausführungskosten" -#: sql_help.c:542 sql_help.c:1002 sql_help.c:2306 +#: sql_help.c:539 sql_help.c:1007 sql_help.c:2336 msgid "result_rows" msgstr "Ergebniszeilen" -#: sql_help.c:543 sql_help.c:2307 +#: sql_help.c:540 sql_help.c:2337 msgid "support_function" msgstr "Support-Funktion" -#: sql_help.c:564 sql_help.c:566 sql_help.c:925 sql_help.c:933 sql_help.c:937 -#: sql_help.c:940 sql_help.c:943 sql_help.c:1580 sql_help.c:1588 -#: sql_help.c:1592 sql_help.c:1595 sql_help.c:1598 sql_help.c:2604 -#: sql_help.c:2606 sql_help.c:2609 sql_help.c:2610 sql_help.c:3736 -#: sql_help.c:3740 sql_help.c:3743 sql_help.c:3745 sql_help.c:3747 -#: sql_help.c:3749 sql_help.c:3751 sql_help.c:3757 sql_help.c:3759 -#: sql_help.c:3761 sql_help.c:3763 sql_help.c:3765 sql_help.c:3767 -#: sql_help.c:3769 sql_help.c:3770 sql_help.c:4084 sql_help.c:4088 -#: sql_help.c:4091 sql_help.c:4093 sql_help.c:4095 sql_help.c:4097 -#: sql_help.c:4099 sql_help.c:4105 sql_help.c:4107 sql_help.c:4109 -#: sql_help.c:4111 sql_help.c:4113 sql_help.c:4115 sql_help.c:4117 -#: sql_help.c:4118 +#: sql_help.c:562 sql_help.c:564 sql_help.c:930 sql_help.c:938 sql_help.c:942 +#: sql_help.c:945 sql_help.c:948 sql_help.c:1601 sql_help.c:1609 +#: sql_help.c:1613 sql_help.c:1616 sql_help.c:1619 sql_help.c:2638 +#: sql_help.c:2640 sql_help.c:2643 sql_help.c:2644 sql_help.c:3798 +#: sql_help.c:3799 sql_help.c:3803 sql_help.c:3804 sql_help.c:3807 +#: sql_help.c:3808 sql_help.c:3810 sql_help.c:3811 sql_help.c:3813 +#: sql_help.c:3814 sql_help.c:3816 sql_help.c:3817 sql_help.c:3819 +#: sql_help.c:3820 sql_help.c:3826 sql_help.c:3827 sql_help.c:3829 +#: sql_help.c:3830 sql_help.c:3832 sql_help.c:3833 sql_help.c:3835 +#: sql_help.c:3836 sql_help.c:3838 sql_help.c:3839 sql_help.c:3841 +#: sql_help.c:3842 sql_help.c:3844 sql_help.c:3845 sql_help.c:4178 +#: sql_help.c:4179 sql_help.c:4183 sql_help.c:4184 sql_help.c:4187 +#: sql_help.c:4188 sql_help.c:4190 sql_help.c:4191 sql_help.c:4193 +#: sql_help.c:4194 sql_help.c:4196 sql_help.c:4197 sql_help.c:4199 +#: sql_help.c:4200 sql_help.c:4206 sql_help.c:4207 sql_help.c:4209 +#: sql_help.c:4210 sql_help.c:4212 sql_help.c:4213 sql_help.c:4215 +#: sql_help.c:4216 sql_help.c:4218 sql_help.c:4219 sql_help.c:4221 +#: sql_help.c:4222 sql_help.c:4224 sql_help.c:4225 msgid "role_specification" msgstr "Rollenangabe" -#: sql_help.c:565 sql_help.c:567 sql_help.c:1611 sql_help.c:2130 -#: sql_help.c:2612 sql_help.c:3119 sql_help.c:3570 sql_help.c:4427 +#: sql_help.c:563 sql_help.c:565 sql_help.c:1632 sql_help.c:2159 +#: sql_help.c:2646 sql_help.c:3167 sql_help.c:3618 sql_help.c:4544 msgid "user_name" msgstr "Benutzername" -#: sql_help.c:568 sql_help.c:945 sql_help.c:1600 sql_help.c:2611 -#: sql_help.c:3771 sql_help.c:4119 +#: sql_help.c:566 sql_help.c:950 sql_help.c:1621 sql_help.c:2645 +#: sql_help.c:3846 sql_help.c:4226 msgid "where role_specification can be:" msgstr "wobei Rollenangabe Folgendes sein kann:" -#: sql_help.c:570 +#: sql_help.c:568 msgid "group_name" msgstr "Gruppenname" -#: sql_help.c:591 sql_help.c:1376 sql_help.c:2136 sql_help.c:2376 -#: sql_help.c:2410 sql_help.c:2784 sql_help.c:2797 sql_help.c:2811 -#: sql_help.c:2852 sql_help.c:2876 sql_help.c:2888 sql_help.c:3764 -#: sql_help.c:4112 +#: sql_help.c:590 sql_help.c:1396 sql_help.c:2165 sql_help.c:2407 +#: sql_help.c:2441 sql_help.c:2828 sql_help.c:2841 sql_help.c:2855 +#: sql_help.c:2896 sql_help.c:2920 sql_help.c:2932 sql_help.c:3837 +#: sql_help.c:4217 msgid "tablespace_name" msgstr "Tablespace-Name" -#: sql_help.c:593 sql_help.c:681 sql_help.c:1324 sql_help.c:1333 -#: sql_help.c:1371 sql_help.c:1722 +#: sql_help.c:592 sql_help.c:685 sql_help.c:1343 sql_help.c:1352 +#: sql_help.c:1391 sql_help.c:1748 sql_help.c:1751 msgid "index_name" msgstr "Indexname" -#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1326 -#: sql_help.c:1328 sql_help.c:1374 sql_help.c:2374 sql_help.c:2408 -#: sql_help.c:2782 sql_help.c:2795 sql_help.c:2809 sql_help.c:2850 -#: sql_help.c:2874 +#: sql_help.c:596 +msgid "collation_name" +msgstr "Sortierfolgenname" + +#: sql_help.c:598 sql_help.c:601 sql_help.c:686 sql_help.c:688 sql_help.c:1345 +#: sql_help.c:1347 sql_help.c:1394 sql_help.c:2405 sql_help.c:2439 +#: sql_help.c:2826 sql_help.c:2839 sql_help.c:2853 sql_help.c:2894 +#: sql_help.c:2918 msgid "storage_parameter" msgstr "Storage-Parameter" -#: sql_help.c:602 +#: sql_help.c:603 msgid "column_number" msgstr "Spaltennummer" -#: sql_help.c:626 sql_help.c:1805 sql_help.c:4202 +#: sql_help.c:627 sql_help.c:1836 sql_help.c:4309 msgid "large_object_oid" msgstr "Large-Object-OID" -#: sql_help.c:713 sql_help.c:2431 +#: sql_help.c:684 sql_help.c:1329 sql_help.c:1367 sql_help.c:2815 +msgid "compression_method" +msgstr "Kompressionsmethode" + +#: sql_help.c:717 sql_help.c:2462 msgid "res_proc" msgstr "Res-Funktion" -#: sql_help.c:714 sql_help.c:2432 +#: sql_help.c:718 sql_help.c:2463 msgid "join_proc" msgstr "Join-Funktion" -#: sql_help.c:766 sql_help.c:778 sql_help.c:2449 +#: sql_help.c:770 sql_help.c:782 sql_help.c:2480 msgid "strategy_number" msgstr "Strategienummer" -#: sql_help.c:768 sql_help.c:769 sql_help.c:772 sql_help.c:773 sql_help.c:779 -#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2451 sql_help.c:2452 -#: sql_help.c:2455 sql_help.c:2456 +#: sql_help.c:772 sql_help.c:773 sql_help.c:776 sql_help.c:777 sql_help.c:783 +#: sql_help.c:784 sql_help.c:786 sql_help.c:787 sql_help.c:2482 sql_help.c:2483 +#: sql_help.c:2486 sql_help.c:2487 msgid "op_type" msgstr "Optyp" -#: sql_help.c:770 sql_help.c:2453 +#: sql_help.c:774 sql_help.c:2484 msgid "sort_family_name" msgstr "Sortierfamilienname" -#: sql_help.c:771 sql_help.c:781 sql_help.c:2454 +#: sql_help.c:775 sql_help.c:785 sql_help.c:2485 msgid "support_number" msgstr "Unterst-Nummer" -#: sql_help.c:775 sql_help.c:2071 sql_help.c:2458 sql_help.c:2965 -#: sql_help.c:2967 +#: sql_help.c:779 sql_help.c:2102 sql_help.c:2489 sql_help.c:3009 +#: sql_help.c:3011 msgid "argument_type" msgstr "Argumenttyp" -#: sql_help.c:806 sql_help.c:809 sql_help.c:880 sql_help.c:882 sql_help.c:884 -#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1494 sql_help.c:1497 -#: sql_help.c:1672 sql_help.c:1721 sql_help.c:1790 sql_help.c:1815 -#: sql_help.c:1828 sql_help.c:1843 sql_help.c:1900 sql_help.c:1906 -#: sql_help.c:2242 sql_help.c:2254 sql_help.c:2365 sql_help.c:2405 -#: sql_help.c:2482 sql_help.c:2525 sql_help.c:2581 sql_help.c:2632 -#: sql_help.c:2663 sql_help.c:2768 sql_help.c:2785 sql_help.c:2798 -#: sql_help.c:2871 sql_help.c:2991 sql_help.c:3168 sql_help.c:3391 -#: sql_help.c:3440 sql_help.c:3546 sql_help.c:3734 sql_help.c:3739 -#: sql_help.c:3785 sql_help.c:3817 sql_help.c:4082 sql_help.c:4087 -#: sql_help.c:4190 sql_help.c:4297 sql_help.c:4299 sql_help.c:4348 -#: sql_help.c:4387 sql_help.c:4536 sql_help.c:4538 sql_help.c:4587 -#: sql_help.c:4621 sql_help.c:4672 sql_help.c:4756 sql_help.c:4758 -#: sql_help.c:4807 +#: sql_help.c:810 sql_help.c:813 sql_help.c:884 sql_help.c:886 sql_help.c:888 +#: sql_help.c:1020 sql_help.c:1059 sql_help.c:1514 sql_help.c:1517 +#: sql_help.c:1693 sql_help.c:1747 sql_help.c:1750 sql_help.c:1821 +#: sql_help.c:1846 sql_help.c:1859 sql_help.c:1874 sql_help.c:1931 +#: sql_help.c:1937 sql_help.c:2271 sql_help.c:2283 sql_help.c:2396 +#: sql_help.c:2436 sql_help.c:2513 sql_help.c:2558 sql_help.c:2614 +#: sql_help.c:2666 sql_help.c:2699 sql_help.c:2706 sql_help.c:2811 +#: sql_help.c:2829 sql_help.c:2842 sql_help.c:2915 sql_help.c:3035 +#: sql_help.c:3216 sql_help.c:3439 sql_help.c:3488 sql_help.c:3594 +#: sql_help.c:3796 sql_help.c:3802 sql_help.c:3860 sql_help.c:3892 +#: sql_help.c:4176 sql_help.c:4182 sql_help.c:4297 sql_help.c:4406 +#: sql_help.c:4408 sql_help.c:4465 sql_help.c:4504 sql_help.c:4655 +#: sql_help.c:4657 sql_help.c:4714 sql_help.c:4748 sql_help.c:4801 +#: sql_help.c:4887 sql_help.c:4889 sql_help.c:4946 msgid "table_name" msgstr "Tabellenname" -#: sql_help.c:811 sql_help.c:2484 +#: sql_help.c:815 sql_help.c:2515 msgid "using_expression" msgstr "Using-Ausdruck" -#: sql_help.c:812 sql_help.c:2485 +#: sql_help.c:816 sql_help.c:2516 msgid "check_expression" msgstr "Check-Ausdruck" -#: sql_help.c:886 sql_help.c:2526 +#: sql_help.c:890 sql_help.c:2559 msgid "publication_parameter" msgstr "Publikationsparameter" -#: sql_help.c:929 sql_help.c:1584 sql_help.c:2344 sql_help.c:2558 -#: sql_help.c:3102 +#: sql_help.c:934 sql_help.c:1605 sql_help.c:2375 sql_help.c:2591 +#: sql_help.c:3150 msgid "password" msgstr "Passwort" -#: sql_help.c:930 sql_help.c:1585 sql_help.c:2345 sql_help.c:2559 -#: sql_help.c:3103 +#: sql_help.c:935 sql_help.c:1606 sql_help.c:2376 sql_help.c:2592 +#: sql_help.c:3151 msgid "timestamp" msgstr "Zeit" -#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1589 -#: sql_help.c:1593 sql_help.c:1596 sql_help.c:1599 sql_help.c:3744 -#: sql_help.c:4092 +#: sql_help.c:939 sql_help.c:943 sql_help.c:946 sql_help.c:949 sql_help.c:1610 +#: sql_help.c:1614 sql_help.c:1617 sql_help.c:1620 sql_help.c:3809 +#: sql_help.c:4189 msgid "database_name" msgstr "Datenbankname" -#: sql_help.c:1048 sql_help.c:2627 +#: sql_help.c:1053 sql_help.c:2661 msgid "increment" msgstr "Inkrement" -#: sql_help.c:1049 sql_help.c:2628 +#: sql_help.c:1054 sql_help.c:2662 msgid "minvalue" msgstr "Minwert" -#: sql_help.c:1050 sql_help.c:2629 +#: sql_help.c:1055 sql_help.c:2663 msgid "maxvalue" msgstr "Maxwert" -#: sql_help.c:1051 sql_help.c:2630 sql_help.c:4295 sql_help.c:4385 -#: sql_help.c:4534 sql_help.c:4689 sql_help.c:4754 +#: sql_help.c:1056 sql_help.c:2664 sql_help.c:4404 sql_help.c:4502 +#: sql_help.c:4653 sql_help.c:4818 sql_help.c:4885 msgid "start" msgstr "Start" -#: sql_help.c:1052 sql_help.c:1301 +#: sql_help.c:1057 sql_help.c:1318 msgid "restart" msgstr "Restart" -#: sql_help.c:1053 sql_help.c:2631 +#: sql_help.c:1058 sql_help.c:2665 msgid "cache" msgstr "Cache" -#: sql_help.c:1097 +#: sql_help.c:1102 msgid "new_target" msgstr "neues_Ziel" -#: sql_help.c:1113 sql_help.c:2675 +#: sql_help.c:1120 sql_help.c:2718 msgid "conninfo" msgstr "Verbindungsinfo" -#: sql_help.c:1115 sql_help.c:2676 +#: sql_help.c:1122 sql_help.c:1126 sql_help.c:1130 sql_help.c:2719 msgid "publication_name" msgstr "Publikationsname" -#: sql_help.c:1116 +#: sql_help.c:1123 sql_help.c:1127 sql_help.c:1131 msgid "set_publication_option" msgstr "SET-Publikationsoption" -#: sql_help.c:1119 +#: sql_help.c:1134 msgid "refresh_option" msgstr "Refresh-Option" -#: sql_help.c:1124 sql_help.c:2677 +#: sql_help.c:1139 sql_help.c:2720 msgid "subscription_parameter" msgstr "Subskriptionsparameter" -#: sql_help.c:1278 sql_help.c:1281 +#: sql_help.c:1295 sql_help.c:1298 msgid "partition_name" msgstr "Partitionsname" -#: sql_help.c:1279 sql_help.c:2259 sql_help.c:2803 +#: sql_help.c:1296 sql_help.c:2288 sql_help.c:2847 msgid "partition_bound_spec" msgstr "Partitionsbegrenzungsangabe" -#: sql_help.c:1298 sql_help.c:1345 sql_help.c:2817 +#: sql_help.c:1315 sql_help.c:1364 sql_help.c:2861 msgid "sequence_options" msgstr "Sequenzoptionen" -#: sql_help.c:1300 +#: sql_help.c:1317 msgid "sequence_option" msgstr "Sequenzoption" -#: sql_help.c:1312 +#: sql_help.c:1331 msgid "table_constraint_using_index" msgstr "Tabellen-Constraint-für-Index" -#: sql_help.c:1320 sql_help.c:1321 sql_help.c:1322 sql_help.c:1323 +#: sql_help.c:1339 sql_help.c:1340 sql_help.c:1341 sql_help.c:1342 msgid "rewrite_rule_name" msgstr "Regelname" -#: sql_help.c:1334 sql_help.c:2842 +#: sql_help.c:1353 sql_help.c:2886 msgid "and partition_bound_spec is:" msgstr "und Partitionsbegrenzungsangabe Folgendes ist:" -#: sql_help.c:1335 sql_help.c:1336 sql_help.c:1337 sql_help.c:2843 -#: sql_help.c:2844 sql_help.c:2845 +#: sql_help.c:1354 sql_help.c:1355 sql_help.c:1356 sql_help.c:2887 +#: sql_help.c:2888 sql_help.c:2889 msgid "partition_bound_expr" msgstr "Partitionsbegrenzungsausdruck" -#: sql_help.c:1338 sql_help.c:1339 sql_help.c:2846 sql_help.c:2847 +#: sql_help.c:1357 sql_help.c:1358 sql_help.c:2890 sql_help.c:2891 msgid "numeric_literal" msgstr "numerische_Konstante" -#: sql_help.c:1340 +#: sql_help.c:1359 msgid "and column_constraint is:" msgstr "und Spalten-Constraint Folgendes ist:" -#: sql_help.c:1343 sql_help.c:2266 sql_help.c:2299 sql_help.c:2505 -#: sql_help.c:2815 +#: sql_help.c:1362 sql_help.c:2295 sql_help.c:2329 sql_help.c:2537 +#: sql_help.c:2859 msgid "default_expr" msgstr "Vorgabeausdruck" -#: sql_help.c:1344 sql_help.c:2267 sql_help.c:2816 +#: sql_help.c:1363 sql_help.c:2296 sql_help.c:2860 msgid "generation_expr" msgstr "Generierungsausdruck" -#: sql_help.c:1346 sql_help.c:1347 sql_help.c:1356 sql_help.c:1358 -#: sql_help.c:1362 sql_help.c:2818 sql_help.c:2819 sql_help.c:2828 -#: sql_help.c:2830 sql_help.c:2834 +#: sql_help.c:1365 sql_help.c:1366 sql_help.c:1376 sql_help.c:1378 +#: sql_help.c:1382 sql_help.c:2862 sql_help.c:2863 sql_help.c:2872 +#: sql_help.c:2874 sql_help.c:2878 msgid "index_parameters" msgstr "Indexparameter" -#: sql_help.c:1348 sql_help.c:1365 sql_help.c:2820 sql_help.c:2837 +#: sql_help.c:1368 sql_help.c:1385 sql_help.c:2864 sql_help.c:2881 msgid "reftable" msgstr "Reftabelle" -#: sql_help.c:1349 sql_help.c:1366 sql_help.c:2821 sql_help.c:2838 +#: sql_help.c:1369 sql_help.c:1386 sql_help.c:2865 sql_help.c:2882 msgid "refcolumn" msgstr "Refspalte" -#: sql_help.c:1350 sql_help.c:1351 sql_help.c:1367 sql_help.c:1368 -#: sql_help.c:2822 sql_help.c:2823 sql_help.c:2839 sql_help.c:2840 +#: sql_help.c:1370 sql_help.c:1371 sql_help.c:1387 sql_help.c:1388 +#: sql_help.c:2866 sql_help.c:2867 sql_help.c:2883 sql_help.c:2884 msgid "referential_action" msgstr "Fremdschlüsselaktion" -#: sql_help.c:1352 sql_help.c:2268 sql_help.c:2824 +#: sql_help.c:1372 sql_help.c:2297 sql_help.c:2868 msgid "and table_constraint is:" msgstr "und Tabellen-Constraint Folgendes ist:" -#: sql_help.c:1360 sql_help.c:2832 +#: sql_help.c:1380 sql_help.c:2876 msgid "exclude_element" msgstr "Exclude-Element" -#: sql_help.c:1361 sql_help.c:2833 sql_help.c:4293 sql_help.c:4383 -#: sql_help.c:4532 sql_help.c:4687 sql_help.c:4752 +#: sql_help.c:1381 sql_help.c:2877 sql_help.c:4402 sql_help.c:4500 +#: sql_help.c:4651 sql_help.c:4816 sql_help.c:4883 msgid "operator" msgstr "Operator" -#: sql_help.c:1363 sql_help.c:2377 sql_help.c:2835 +#: sql_help.c:1383 sql_help.c:2408 sql_help.c:2879 msgid "predicate" msgstr "Prädikat" -#: sql_help.c:1369 +#: sql_help.c:1389 msgid "and table_constraint_using_index is:" msgstr "und Tabellen-Constraint-für-Index Folgendes ist:" -#: sql_help.c:1372 sql_help.c:2848 +#: sql_help.c:1392 sql_help.c:2892 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "Indexparameter bei UNIQUE-, PRIMARY KEY- und EXCLUDE-Constraints sind:" -#: sql_help.c:1377 sql_help.c:2853 +#: sql_help.c:1397 sql_help.c:2897 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "Exclude-Element in einem EXCLUDE-Constraint ist:" -#: sql_help.c:1380 sql_help.c:2370 sql_help.c:2780 sql_help.c:2793 -#: sql_help.c:2807 sql_help.c:2856 sql_help.c:3830 +#: sql_help.c:1400 sql_help.c:2401 sql_help.c:2824 sql_help.c:2837 +#: sql_help.c:2851 sql_help.c:2900 sql_help.c:3905 msgid "opclass" msgstr "Opklasse" -#: sql_help.c:1396 sql_help.c:1399 sql_help.c:2891 +#: sql_help.c:1416 sql_help.c:1419 sql_help.c:2935 msgid "tablespace_option" msgstr "Tablespace-Option" -#: sql_help.c:1420 sql_help.c:1423 sql_help.c:1429 sql_help.c:1433 +#: sql_help.c:1440 sql_help.c:1443 sql_help.c:1449 sql_help.c:1453 msgid "token_type" msgstr "Tokentyp" -#: sql_help.c:1421 sql_help.c:1424 +#: sql_help.c:1441 sql_help.c:1444 msgid "dictionary_name" msgstr "Wörterbuchname" -#: sql_help.c:1426 sql_help.c:1430 +#: sql_help.c:1446 sql_help.c:1450 msgid "old_dictionary" msgstr "altes_Wörterbuch" -#: sql_help.c:1427 sql_help.c:1431 +#: sql_help.c:1447 sql_help.c:1451 msgid "new_dictionary" msgstr "neues_Wörterbuch" -#: sql_help.c:1526 sql_help.c:1540 sql_help.c:1543 sql_help.c:1544 -#: sql_help.c:3042 +#: sql_help.c:1546 sql_help.c:1560 sql_help.c:1563 sql_help.c:1564 +#: sql_help.c:3088 msgid "attribute_name" msgstr "Attributname" -#: sql_help.c:1527 +#: sql_help.c:1547 msgid "new_attribute_name" msgstr "neuer_Attributname" -#: sql_help.c:1531 sql_help.c:1535 +#: sql_help.c:1551 sql_help.c:1555 msgid "new_enum_value" msgstr "neuer_Enum-Wert" -#: sql_help.c:1532 +#: sql_help.c:1552 msgid "neighbor_enum_value" msgstr "Nachbar-Enum-Wert" -#: sql_help.c:1534 +#: sql_help.c:1554 msgid "existing_enum_value" msgstr "existierender_Enum-Wert" -#: sql_help.c:1537 -#, fuzzy -#| msgid "operator" +#: sql_help.c:1557 msgid "property" -msgstr "Operator" +msgstr "Eigenschaft" -#: sql_help.c:1612 sql_help.c:2251 sql_help.c:2260 sql_help.c:2643 -#: sql_help.c:3120 sql_help.c:3571 sql_help.c:3750 sql_help.c:3786 -#: sql_help.c:4098 +#: sql_help.c:1633 sql_help.c:2280 sql_help.c:2289 sql_help.c:2677 +#: sql_help.c:3168 sql_help.c:3619 sql_help.c:3818 sql_help.c:3861 +#: sql_help.c:4198 msgid "server_name" msgstr "Servername" -#: sql_help.c:1644 sql_help.c:1647 sql_help.c:3135 +#: sql_help.c:1665 sql_help.c:1668 sql_help.c:3183 msgid "view_option_name" msgstr "Sichtoptionsname" -#: sql_help.c:1645 sql_help.c:3136 +#: sql_help.c:1666 sql_help.c:3184 msgid "view_option_value" msgstr "Sichtoptionswert" -#: sql_help.c:1666 sql_help.c:1667 sql_help.c:4659 sql_help.c:4660 +#: sql_help.c:1687 sql_help.c:1688 sql_help.c:4787 sql_help.c:4788 msgid "table_and_columns" msgstr "Tabelle-und-Spalten" -#: sql_help.c:1668 sql_help.c:1912 sql_help.c:3619 sql_help.c:3963 -#: sql_help.c:4661 +#: sql_help.c:1689 sql_help.c:1752 sql_help.c:1943 sql_help.c:3667 +#: sql_help.c:4040 sql_help.c:4789 msgid "where option can be one of:" msgstr "wobei Option eine der folgenden sein kann:" -#: sql_help.c:1669 sql_help.c:1670 sql_help.c:1914 sql_help.c:1917 -#: sql_help.c:2096 sql_help.c:3620 sql_help.c:3621 sql_help.c:3622 -#: sql_help.c:3623 sql_help.c:3624 sql_help.c:3625 sql_help.c:3626 -#: sql_help.c:3627 sql_help.c:4662 sql_help.c:4663 sql_help.c:4664 -#: sql_help.c:4665 sql_help.c:4666 sql_help.c:4667 sql_help.c:4668 -#: sql_help.c:4669 +#: sql_help.c:1690 sql_help.c:1691 sql_help.c:1753 sql_help.c:1945 +#: sql_help.c:1948 sql_help.c:2126 sql_help.c:3668 sql_help.c:3669 +#: sql_help.c:3670 sql_help.c:3671 sql_help.c:3672 sql_help.c:3673 +#: sql_help.c:3674 sql_help.c:3675 sql_help.c:4041 sql_help.c:4043 +#: sql_help.c:4790 sql_help.c:4791 sql_help.c:4792 sql_help.c:4793 +#: sql_help.c:4794 sql_help.c:4795 sql_help.c:4796 sql_help.c:4797 +#: sql_help.c:4798 msgid "boolean" msgstr "boolean" -#: sql_help.c:1671 sql_help.c:4671 +#: sql_help.c:1692 sql_help.c:4800 msgid "and table_and_columns is:" msgstr "und Tabelle-und-Spalten Folgendes ist:" -#: sql_help.c:1687 sql_help.c:4443 sql_help.c:4445 sql_help.c:4469 +#: sql_help.c:1708 sql_help.c:4560 sql_help.c:4562 sql_help.c:4586 msgid "transaction_mode" msgstr "Transaktionsmodus" -#: sql_help.c:1688 sql_help.c:4446 sql_help.c:4470 +#: sql_help.c:1709 sql_help.c:4563 sql_help.c:4587 msgid "where transaction_mode is one of:" msgstr "wobei Transaktionsmodus Folgendes sein kann:" -#: sql_help.c:1697 sql_help.c:4303 sql_help.c:4312 sql_help.c:4316 -#: sql_help.c:4320 sql_help.c:4323 sql_help.c:4542 sql_help.c:4551 -#: sql_help.c:4555 sql_help.c:4559 sql_help.c:4562 sql_help.c:4762 -#: sql_help.c:4771 sql_help.c:4775 sql_help.c:4779 sql_help.c:4782 +#: sql_help.c:1718 sql_help.c:4412 sql_help.c:4421 sql_help.c:4425 +#: sql_help.c:4429 sql_help.c:4432 sql_help.c:4661 sql_help.c:4670 +#: sql_help.c:4674 sql_help.c:4678 sql_help.c:4681 sql_help.c:4893 +#: sql_help.c:4902 sql_help.c:4906 sql_help.c:4910 sql_help.c:4913 msgid "argument" msgstr "Argument" -#: sql_help.c:1787 +#: sql_help.c:1818 msgid "relation_name" msgstr "Relationsname" -#: sql_help.c:1792 sql_help.c:3746 sql_help.c:4094 +#: sql_help.c:1823 sql_help.c:3812 sql_help.c:4192 msgid "domain_name" msgstr "Domänenname" -#: sql_help.c:1814 +#: sql_help.c:1845 msgid "policy_name" msgstr "Policy-Name" -#: sql_help.c:1827 +#: sql_help.c:1858 msgid "rule_name" msgstr "Regelname" -#: sql_help.c:1846 +#: sql_help.c:1877 msgid "text" msgstr "Text" -#: sql_help.c:1871 sql_help.c:3930 sql_help.c:4135 +#: sql_help.c:1902 sql_help.c:4005 sql_help.c:4242 msgid "transaction_id" msgstr "Transaktions-ID" -#: sql_help.c:1902 sql_help.c:1909 sql_help.c:3856 +#: sql_help.c:1933 sql_help.c:1940 sql_help.c:3931 msgid "filename" msgstr "Dateiname" -#: sql_help.c:1903 sql_help.c:1910 sql_help.c:2583 sql_help.c:2584 -#: sql_help.c:2585 +#: sql_help.c:1934 sql_help.c:1941 sql_help.c:2616 sql_help.c:2617 +#: sql_help.c:2618 msgid "command" msgstr "Befehl" -#: sql_help.c:1905 sql_help.c:2582 sql_help.c:2994 sql_help.c:3171 -#: sql_help.c:3840 sql_help.c:4286 sql_help.c:4288 sql_help.c:4376 -#: sql_help.c:4378 sql_help.c:4525 sql_help.c:4527 sql_help.c:4630 -#: sql_help.c:4745 sql_help.c:4747 +#: sql_help.c:1936 sql_help.c:2615 sql_help.c:3038 sql_help.c:3219 +#: sql_help.c:3915 sql_help.c:4395 sql_help.c:4397 sql_help.c:4493 +#: sql_help.c:4495 sql_help.c:4644 sql_help.c:4646 sql_help.c:4757 +#: sql_help.c:4876 sql_help.c:4878 msgid "condition" msgstr "Bedingung" -#: sql_help.c:1908 sql_help.c:2411 sql_help.c:2877 sql_help.c:3137 -#: sql_help.c:3155 sql_help.c:3821 +#: sql_help.c:1939 sql_help.c:2442 sql_help.c:2921 sql_help.c:3185 +#: sql_help.c:3203 sql_help.c:3896 msgid "query" msgstr "Anfrage" -#: sql_help.c:1913 +#: sql_help.c:1944 msgid "format_name" msgstr "Formatname" -#: sql_help.c:1915 +#: sql_help.c:1946 msgid "delimiter_character" msgstr "Trennzeichen" -#: sql_help.c:1916 +#: sql_help.c:1947 msgid "null_string" msgstr "Null-Zeichenkette" -#: sql_help.c:1918 +#: sql_help.c:1949 msgid "quote_character" msgstr "Quote-Zeichen" -#: sql_help.c:1919 +#: sql_help.c:1950 msgid "escape_character" msgstr "Escape-Zeichen" -#: sql_help.c:1923 +#: sql_help.c:1954 msgid "encoding_name" msgstr "Kodierungsname" -#: sql_help.c:1934 +#: sql_help.c:1965 msgid "access_method_type" msgstr "Zugriffsmethodentyp" -#: sql_help.c:2005 sql_help.c:2024 sql_help.c:2027 +#: sql_help.c:2036 sql_help.c:2055 sql_help.c:2058 msgid "arg_data_type" msgstr "Arg-Datentyp" -#: sql_help.c:2006 sql_help.c:2028 sql_help.c:2036 +#: sql_help.c:2037 sql_help.c:2059 sql_help.c:2067 msgid "sfunc" msgstr "Übergangsfunktion" -#: sql_help.c:2007 sql_help.c:2029 sql_help.c:2037 +#: sql_help.c:2038 sql_help.c:2060 sql_help.c:2068 msgid "state_data_type" msgstr "Zustandsdatentyp" -#: sql_help.c:2008 sql_help.c:2030 sql_help.c:2038 +#: sql_help.c:2039 sql_help.c:2061 sql_help.c:2069 msgid "state_data_size" msgstr "Zustandsdatengröße" -#: sql_help.c:2009 sql_help.c:2031 sql_help.c:2039 +#: sql_help.c:2040 sql_help.c:2062 sql_help.c:2070 msgid "ffunc" msgstr "Abschlussfunktion" -#: sql_help.c:2010 sql_help.c:2040 +#: sql_help.c:2041 sql_help.c:2071 msgid "combinefunc" msgstr "Combine-Funktion" -#: sql_help.c:2011 sql_help.c:2041 +#: sql_help.c:2042 sql_help.c:2072 msgid "serialfunc" msgstr "Serialisierungsfunktion" -#: sql_help.c:2012 sql_help.c:2042 +#: sql_help.c:2043 sql_help.c:2073 msgid "deserialfunc" msgstr "Deserialisierungsfunktion" -#: sql_help.c:2013 sql_help.c:2032 sql_help.c:2043 +#: sql_help.c:2044 sql_help.c:2063 sql_help.c:2074 msgid "initial_condition" msgstr "Anfangswert" -#: sql_help.c:2014 sql_help.c:2044 +#: sql_help.c:2045 sql_help.c:2075 msgid "msfunc" msgstr "Moving-Übergangsfunktion" -#: sql_help.c:2015 sql_help.c:2045 +#: sql_help.c:2046 sql_help.c:2076 msgid "minvfunc" msgstr "Moving-Inversfunktion" -#: sql_help.c:2016 sql_help.c:2046 +#: sql_help.c:2047 sql_help.c:2077 msgid "mstate_data_type" msgstr "Moving-Zustandsdatentyp" -#: sql_help.c:2017 sql_help.c:2047 +#: sql_help.c:2048 sql_help.c:2078 msgid "mstate_data_size" msgstr "Moving-Zustandsdatengröße" -#: sql_help.c:2018 sql_help.c:2048 +#: sql_help.c:2049 sql_help.c:2079 msgid "mffunc" msgstr "Moving-Abschlussfunktion" -#: sql_help.c:2019 sql_help.c:2049 +#: sql_help.c:2050 sql_help.c:2080 msgid "minitial_condition" msgstr "Moving-Anfangswert" -#: sql_help.c:2020 sql_help.c:2050 +#: sql_help.c:2051 sql_help.c:2081 msgid "sort_operator" msgstr "Sortieroperator" -#: sql_help.c:2033 +#: sql_help.c:2064 msgid "or the old syntax" msgstr "oder die alte Syntax" -#: sql_help.c:2035 +#: sql_help.c:2066 msgid "base_type" msgstr "Basistyp" -#: sql_help.c:2092 sql_help.c:2133 +#: sql_help.c:2122 sql_help.c:2162 msgid "locale" msgstr "Locale" -#: sql_help.c:2093 sql_help.c:2134 +#: sql_help.c:2123 sql_help.c:2163 msgid "lc_collate" msgstr "lc_collate" -#: sql_help.c:2094 sql_help.c:2135 +#: sql_help.c:2124 sql_help.c:2164 msgid "lc_ctype" msgstr "lc_ctype" -#: sql_help.c:2095 sql_help.c:4188 +#: sql_help.c:2125 sql_help.c:4295 msgid "provider" msgstr "Provider" -#: sql_help.c:2097 sql_help.c:2189 -msgid "version" -msgstr "Version" - -#: sql_help.c:2099 +#: sql_help.c:2128 msgid "existing_collation" msgstr "existierende_Sortierfolge" -#: sql_help.c:2109 +#: sql_help.c:2138 msgid "source_encoding" msgstr "Quellkodierung" -#: sql_help.c:2110 +#: sql_help.c:2139 msgid "dest_encoding" msgstr "Zielkodierung" -#: sql_help.c:2131 sql_help.c:2917 +#: sql_help.c:2160 sql_help.c:2961 msgid "template" msgstr "Vorlage" -#: sql_help.c:2132 +#: sql_help.c:2161 msgid "encoding" msgstr "Kodierung" -#: sql_help.c:2159 +#: sql_help.c:2188 msgid "constraint" msgstr "Constraint" -#: sql_help.c:2160 +#: sql_help.c:2189 msgid "where constraint is:" msgstr "wobei Constraint Folgendes ist:" -#: sql_help.c:2174 sql_help.c:2580 sql_help.c:2990 +#: sql_help.c:2203 sql_help.c:2613 sql_help.c:3034 msgid "event" msgstr "Ereignis" -#: sql_help.c:2175 +#: sql_help.c:2204 msgid "filter_variable" msgstr "Filtervariable" -#: sql_help.c:2263 sql_help.c:2812 +#: sql_help.c:2218 +msgid "version" +msgstr "Version" + +#: sql_help.c:2292 sql_help.c:2856 msgid "where column_constraint is:" msgstr "wobei Spalten-Constraint Folgendes ist:" -#: sql_help.c:2300 +#: sql_help.c:2330 msgid "rettype" msgstr "Rückgabetyp" -#: sql_help.c:2302 +#: sql_help.c:2332 msgid "column_type" msgstr "Spaltentyp" -#: sql_help.c:2311 sql_help.c:2511 +#: sql_help.c:2341 sql_help.c:2543 msgid "definition" msgstr "Definition" -#: sql_help.c:2312 sql_help.c:2512 +#: sql_help.c:2342 sql_help.c:2544 msgid "obj_file" msgstr "Objektdatei" -#: sql_help.c:2313 sql_help.c:2513 +#: sql_help.c:2343 sql_help.c:2545 msgid "link_symbol" msgstr "Linksymbol" -#: sql_help.c:2351 sql_help.c:2565 sql_help.c:3109 +#: sql_help.c:2344 sql_help.c:2546 +msgid "sql_body" +msgstr "SQL-Rumpf" + +#: sql_help.c:2382 sql_help.c:2598 sql_help.c:3157 msgid "uid" msgstr "Uid" -#: sql_help.c:2366 sql_help.c:2407 sql_help.c:2781 sql_help.c:2794 -#: sql_help.c:2808 sql_help.c:2873 +#: sql_help.c:2397 sql_help.c:2438 sql_help.c:2825 sql_help.c:2838 +#: sql_help.c:2852 sql_help.c:2917 msgid "method" msgstr "Methode" -#: sql_help.c:2371 +#: sql_help.c:2402 msgid "opclass_parameter" msgstr "Opklassen-Parameter" -#: sql_help.c:2388 +#: sql_help.c:2419 msgid "call_handler" msgstr "Handler" -#: sql_help.c:2389 +#: sql_help.c:2420 msgid "inline_handler" msgstr "Inline-Handler" -#: sql_help.c:2390 +#: sql_help.c:2421 msgid "valfunction" msgstr "Valfunktion" -#: sql_help.c:2429 +#: sql_help.c:2460 msgid "com_op" msgstr "Kommutator-Op" -#: sql_help.c:2430 +#: sql_help.c:2461 msgid "neg_op" msgstr "Umkehrungs-Op" -#: sql_help.c:2448 +#: sql_help.c:2479 msgid "family_name" msgstr "Familienname" -#: sql_help.c:2459 +#: sql_help.c:2490 msgid "storage_type" msgstr "Storage-Typ" -#: sql_help.c:2586 sql_help.c:2997 +#: sql_help.c:2619 sql_help.c:3041 msgid "where event can be one of:" msgstr "wobei Ereignis eins der folgenden sein kann:" -#: sql_help.c:2605 sql_help.c:2607 +#: sql_help.c:2639 sql_help.c:2641 msgid "schema_element" msgstr "Schemaelement" -#: sql_help.c:2644 +#: sql_help.c:2678 msgid "server_type" msgstr "Servertyp" -#: sql_help.c:2645 +#: sql_help.c:2679 msgid "server_version" msgstr "Serverversion" -#: sql_help.c:2646 sql_help.c:3748 sql_help.c:4096 +#: sql_help.c:2680 sql_help.c:3815 sql_help.c:4195 msgid "fdw_name" msgstr "FDW-Name" -#: sql_help.c:2659 +#: sql_help.c:2697 sql_help.c:2700 msgid "statistics_name" msgstr "Statistikname" -#: sql_help.c:2660 +#: sql_help.c:2701 msgid "statistics_kind" msgstr "Statistikart" -#: sql_help.c:2674 +#: sql_help.c:2717 msgid "subscription_name" msgstr "Subskriptionsname" -#: sql_help.c:2774 +#: sql_help.c:2818 msgid "source_table" msgstr "Quelltabelle" -#: sql_help.c:2775 +#: sql_help.c:2819 msgid "like_option" msgstr "Like-Option" -#: sql_help.c:2841 +#: sql_help.c:2885 msgid "and like_option is:" msgstr "und Like-Option Folgendes ist:" -#: sql_help.c:2890 +#: sql_help.c:2934 msgid "directory" msgstr "Verzeichnis" -#: sql_help.c:2904 +#: sql_help.c:2948 msgid "parser_name" msgstr "Parser-Name" -#: sql_help.c:2905 +#: sql_help.c:2949 msgid "source_config" msgstr "Quellkonfig" -#: sql_help.c:2934 +#: sql_help.c:2978 msgid "start_function" msgstr "Startfunktion" -#: sql_help.c:2935 +#: sql_help.c:2979 msgid "gettoken_function" msgstr "Gettext-Funktion" -#: sql_help.c:2936 +#: sql_help.c:2980 msgid "end_function" msgstr "Endfunktion" -#: sql_help.c:2937 +#: sql_help.c:2981 msgid "lextypes_function" msgstr "Lextypenfunktion" -#: sql_help.c:2938 +#: sql_help.c:2982 msgid "headline_function" msgstr "Headline-Funktion" -#: sql_help.c:2950 +#: sql_help.c:2994 msgid "init_function" msgstr "Init-Funktion" -#: sql_help.c:2951 +#: sql_help.c:2995 msgid "lexize_function" msgstr "Lexize-Funktion" -#: sql_help.c:2964 +#: sql_help.c:3008 msgid "from_sql_function_name" msgstr "From-SQL-Funktionsname" -#: sql_help.c:2966 +#: sql_help.c:3010 msgid "to_sql_function_name" msgstr "To-SQL-Funktionsname" -#: sql_help.c:2992 +#: sql_help.c:3036 msgid "referenced_table_name" msgstr "verwiesener_Tabellenname" -#: sql_help.c:2993 +#: sql_help.c:3037 msgid "transition_relation_name" msgstr "Übergangsrelationsname" -#: sql_help.c:2996 +#: sql_help.c:3040 msgid "arguments" msgstr "Argumente" -#: sql_help.c:3046 sql_help.c:4221 +#: sql_help.c:3092 sql_help.c:4328 msgid "label" msgstr "Label" -#: sql_help.c:3048 +#: sql_help.c:3094 msgid "subtype" msgstr "Untertyp" -#: sql_help.c:3049 +#: sql_help.c:3095 msgid "subtype_operator_class" msgstr "Untertyp-Operatorklasse" -#: sql_help.c:3051 +#: sql_help.c:3097 msgid "canonical_function" msgstr "Canonical-Funktion" -#: sql_help.c:3052 +#: sql_help.c:3098 msgid "subtype_diff_function" msgstr "Untertyp-Diff-Funktion" -#: sql_help.c:3054 +#: sql_help.c:3099 +msgid "multirange_type_name" +msgstr "Multirange-Typname" + +#: sql_help.c:3101 msgid "input_function" msgstr "Eingabefunktion" -#: sql_help.c:3055 +#: sql_help.c:3102 msgid "output_function" msgstr "Ausgabefunktion" -#: sql_help.c:3056 +#: sql_help.c:3103 msgid "receive_function" msgstr "Empfangsfunktion" -#: sql_help.c:3057 +#: sql_help.c:3104 msgid "send_function" msgstr "Sendefunktion" -#: sql_help.c:3058 +#: sql_help.c:3105 msgid "type_modifier_input_function" msgstr "Typmod-Eingabefunktion" -#: sql_help.c:3059 +#: sql_help.c:3106 msgid "type_modifier_output_function" msgstr "Typmod-Ausgabefunktion" -#: sql_help.c:3060 +#: sql_help.c:3107 msgid "analyze_function" msgstr "Analyze-Funktion" -#: sql_help.c:3061 +#: sql_help.c:3108 +msgid "subscript_function" +msgstr "Subscript-Funktion" + +#: sql_help.c:3109 msgid "internallength" msgstr "interne_Länge" -#: sql_help.c:3062 +#: sql_help.c:3110 msgid "alignment" msgstr "Ausrichtung" -#: sql_help.c:3063 +#: sql_help.c:3111 msgid "storage" msgstr "Speicherung" -#: sql_help.c:3064 +#: sql_help.c:3112 msgid "like_type" msgstr "wie_Typ" -#: sql_help.c:3065 +#: sql_help.c:3113 msgid "category" msgstr "Kategorie" -#: sql_help.c:3066 +#: sql_help.c:3114 msgid "preferred" msgstr "bevorzugt" -#: sql_help.c:3067 +#: sql_help.c:3115 msgid "default" msgstr "Vorgabewert" -#: sql_help.c:3068 +#: sql_help.c:3116 msgid "element" msgstr "Element" -#: sql_help.c:3069 +#: sql_help.c:3117 msgid "delimiter" msgstr "Trennzeichen" -#: sql_help.c:3070 +#: sql_help.c:3118 msgid "collatable" msgstr "sortierbar" -#: sql_help.c:3167 sql_help.c:3816 sql_help.c:4281 sql_help.c:4370 -#: sql_help.c:4520 sql_help.c:4620 sql_help.c:4740 +#: sql_help.c:3215 sql_help.c:3891 sql_help.c:4390 sql_help.c:4487 +#: sql_help.c:4639 sql_help.c:4747 sql_help.c:4871 msgid "with_query" msgstr "With-Anfrage" -#: sql_help.c:3169 sql_help.c:3818 sql_help.c:4300 sql_help.c:4306 -#: sql_help.c:4309 sql_help.c:4313 sql_help.c:4317 sql_help.c:4325 -#: sql_help.c:4539 sql_help.c:4545 sql_help.c:4548 sql_help.c:4552 -#: sql_help.c:4556 sql_help.c:4564 sql_help.c:4622 sql_help.c:4759 -#: sql_help.c:4765 sql_help.c:4768 sql_help.c:4772 sql_help.c:4776 -#: sql_help.c:4784 +#: sql_help.c:3217 sql_help.c:3893 sql_help.c:4409 sql_help.c:4415 +#: sql_help.c:4418 sql_help.c:4422 sql_help.c:4426 sql_help.c:4434 +#: sql_help.c:4658 sql_help.c:4664 sql_help.c:4667 sql_help.c:4671 +#: sql_help.c:4675 sql_help.c:4683 sql_help.c:4749 sql_help.c:4890 +#: sql_help.c:4896 sql_help.c:4899 sql_help.c:4903 sql_help.c:4907 +#: sql_help.c:4915 msgid "alias" msgstr "Alias" -#: sql_help.c:3170 sql_help.c:4285 sql_help.c:4327 sql_help.c:4329 -#: sql_help.c:4375 sql_help.c:4524 sql_help.c:4566 sql_help.c:4568 -#: sql_help.c:4629 sql_help.c:4744 sql_help.c:4786 sql_help.c:4788 +#: sql_help.c:3218 sql_help.c:4394 sql_help.c:4436 sql_help.c:4438 +#: sql_help.c:4492 sql_help.c:4643 sql_help.c:4685 sql_help.c:4687 +#: sql_help.c:4756 sql_help.c:4875 sql_help.c:4917 sql_help.c:4919 msgid "from_item" msgstr "From-Element" -#: sql_help.c:3172 sql_help.c:3653 sql_help.c:3897 sql_help.c:4631 +#: sql_help.c:3220 sql_help.c:3701 sql_help.c:3972 sql_help.c:4758 msgid "cursor_name" msgstr "Cursor-Name" -#: sql_help.c:3173 sql_help.c:3824 sql_help.c:4632 +#: sql_help.c:3221 sql_help.c:3899 sql_help.c:4759 msgid "output_expression" msgstr "Ausgabeausdruck" -#: sql_help.c:3174 sql_help.c:3825 sql_help.c:4284 sql_help.c:4373 -#: sql_help.c:4523 sql_help.c:4633 sql_help.c:4743 +#: sql_help.c:3222 sql_help.c:3900 sql_help.c:4393 sql_help.c:4490 +#: sql_help.c:4642 sql_help.c:4760 sql_help.c:4874 msgid "output_name" msgstr "Ausgabename" -#: sql_help.c:3190 +#: sql_help.c:3238 msgid "code" msgstr "Code" -#: sql_help.c:3595 +#: sql_help.c:3643 msgid "parameter" msgstr "Parameter" -#: sql_help.c:3617 sql_help.c:3618 sql_help.c:3922 +#: sql_help.c:3665 sql_help.c:3666 sql_help.c:3997 msgid "statement" msgstr "Anweisung" -#: sql_help.c:3652 sql_help.c:3896 +#: sql_help.c:3700 sql_help.c:3971 msgid "direction" msgstr "Richtung" -#: sql_help.c:3654 sql_help.c:3898 +#: sql_help.c:3702 sql_help.c:3973 msgid "where direction can be empty or one of:" msgstr "wobei Richtung leer sein kann oder Folgendes:" -#: sql_help.c:3655 sql_help.c:3656 sql_help.c:3657 sql_help.c:3658 -#: sql_help.c:3659 sql_help.c:3899 sql_help.c:3900 sql_help.c:3901 -#: sql_help.c:3902 sql_help.c:3903 sql_help.c:4294 sql_help.c:4296 -#: sql_help.c:4384 sql_help.c:4386 sql_help.c:4533 sql_help.c:4535 -#: sql_help.c:4688 sql_help.c:4690 sql_help.c:4753 sql_help.c:4755 +#: sql_help.c:3703 sql_help.c:3704 sql_help.c:3705 sql_help.c:3706 +#: sql_help.c:3707 sql_help.c:3974 sql_help.c:3975 sql_help.c:3976 +#: sql_help.c:3977 sql_help.c:3978 sql_help.c:4403 sql_help.c:4405 +#: sql_help.c:4501 sql_help.c:4503 sql_help.c:4652 sql_help.c:4654 +#: sql_help.c:4817 sql_help.c:4819 sql_help.c:4884 sql_help.c:4886 msgid "count" msgstr "Anzahl" -#: sql_help.c:3741 sql_help.c:4089 +#: sql_help.c:3805 sql_help.c:4185 msgid "sequence_name" msgstr "Sequenzname" -#: sql_help.c:3754 sql_help.c:4102 +#: sql_help.c:3823 sql_help.c:4203 msgid "arg_name" msgstr "Argname" -#: sql_help.c:3755 sql_help.c:4103 +#: sql_help.c:3824 sql_help.c:4204 msgid "arg_type" msgstr "Argtyp" -#: sql_help.c:3760 sql_help.c:4108 +#: sql_help.c:3831 sql_help.c:4211 msgid "loid" msgstr "Large-Object-OID" -#: sql_help.c:3784 +#: sql_help.c:3859 msgid "remote_schema" msgstr "fernes_Schema" -#: sql_help.c:3787 +#: sql_help.c:3862 msgid "local_schema" msgstr "lokales_Schema" -#: sql_help.c:3822 +#: sql_help.c:3897 msgid "conflict_target" msgstr "Konfliktziel" -#: sql_help.c:3823 +#: sql_help.c:3898 msgid "conflict_action" msgstr "Konfliktaktion" -#: sql_help.c:3826 +#: sql_help.c:3901 msgid "where conflict_target can be one of:" msgstr "wobei Konfliktziel Folgendes sein kann:" -#: sql_help.c:3827 +#: sql_help.c:3902 msgid "index_column_name" msgstr "Indexspaltenname" -#: sql_help.c:3828 +#: sql_help.c:3903 msgid "index_expression" msgstr "Indexausdruck" -#: sql_help.c:3831 +#: sql_help.c:3906 msgid "index_predicate" msgstr "Indexprädikat" -#: sql_help.c:3833 +#: sql_help.c:3908 msgid "and conflict_action is one of:" msgstr "und Konfliktaktion Folgendes sein kann:" -#: sql_help.c:3839 sql_help.c:4628 +#: sql_help.c:3914 sql_help.c:4755 msgid "sub-SELECT" msgstr "Sub-SELECT" -#: sql_help.c:3848 sql_help.c:3911 sql_help.c:4604 +#: sql_help.c:3923 sql_help.c:3986 sql_help.c:4731 msgid "channel" msgstr "Kanal" -#: sql_help.c:3870 +#: sql_help.c:3945 msgid "lockmode" msgstr "Sperrmodus" -#: sql_help.c:3871 +#: sql_help.c:3946 msgid "where lockmode is one of:" msgstr "wobei Sperrmodus Folgendes sein kann:" -#: sql_help.c:3912 +#: sql_help.c:3987 msgid "payload" msgstr "Payload" -#: sql_help.c:3939 +#: sql_help.c:4014 msgid "old_role" msgstr "alte_Rolle" -#: sql_help.c:3940 +#: sql_help.c:4015 msgid "new_role" msgstr "neue_Rolle" -#: sql_help.c:3971 sql_help.c:4143 sql_help.c:4151 +#: sql_help.c:4051 sql_help.c:4250 sql_help.c:4258 msgid "savepoint_name" msgstr "Sicherungspunktsname" -#: sql_help.c:4287 sql_help.c:4339 sql_help.c:4526 sql_help.c:4578 -#: sql_help.c:4746 sql_help.c:4798 +#: sql_help.c:4396 sql_help.c:4449 sql_help.c:4645 sql_help.c:4698 +#: sql_help.c:4877 sql_help.c:4930 msgid "grouping_element" msgstr "Gruppierelement" -#: sql_help.c:4289 sql_help.c:4379 sql_help.c:4528 sql_help.c:4748 +#: sql_help.c:4398 sql_help.c:4496 sql_help.c:4647 sql_help.c:4879 msgid "window_name" msgstr "Fenstername" -#: sql_help.c:4290 sql_help.c:4380 sql_help.c:4529 sql_help.c:4749 +#: sql_help.c:4399 sql_help.c:4497 sql_help.c:4648 sql_help.c:4880 msgid "window_definition" msgstr "Fensterdefinition" -#: sql_help.c:4291 sql_help.c:4305 sql_help.c:4343 sql_help.c:4381 -#: sql_help.c:4530 sql_help.c:4544 sql_help.c:4582 sql_help.c:4750 -#: sql_help.c:4764 sql_help.c:4802 +#: sql_help.c:4400 sql_help.c:4414 sql_help.c:4453 sql_help.c:4498 +#: sql_help.c:4649 sql_help.c:4663 sql_help.c:4702 sql_help.c:4881 +#: sql_help.c:4895 sql_help.c:4934 msgid "select" msgstr "Select" -#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4757 +#: sql_help.c:4407 sql_help.c:4656 sql_help.c:4888 msgid "where from_item can be one of:" msgstr "wobei From-Element Folgendes sein kann:" -#: sql_help.c:4301 sql_help.c:4307 sql_help.c:4310 sql_help.c:4314 -#: sql_help.c:4326 sql_help.c:4540 sql_help.c:4546 sql_help.c:4549 -#: sql_help.c:4553 sql_help.c:4565 sql_help.c:4760 sql_help.c:4766 -#: sql_help.c:4769 sql_help.c:4773 sql_help.c:4785 +#: sql_help.c:4410 sql_help.c:4416 sql_help.c:4419 sql_help.c:4423 +#: sql_help.c:4435 sql_help.c:4659 sql_help.c:4665 sql_help.c:4668 +#: sql_help.c:4672 sql_help.c:4684 sql_help.c:4891 sql_help.c:4897 +#: sql_help.c:4900 sql_help.c:4904 sql_help.c:4916 msgid "column_alias" msgstr "Spaltenalias" -#: sql_help.c:4302 sql_help.c:4541 sql_help.c:4761 +#: sql_help.c:4411 sql_help.c:4660 sql_help.c:4892 msgid "sampling_method" msgstr "Stichprobenmethode" -#: sql_help.c:4304 sql_help.c:4543 sql_help.c:4763 +#: sql_help.c:4413 sql_help.c:4662 sql_help.c:4894 msgid "seed" msgstr "Startwert" -#: sql_help.c:4308 sql_help.c:4341 sql_help.c:4547 sql_help.c:4580 -#: sql_help.c:4767 sql_help.c:4800 +#: sql_help.c:4417 sql_help.c:4451 sql_help.c:4666 sql_help.c:4700 +#: sql_help.c:4898 sql_help.c:4932 msgid "with_query_name" msgstr "With-Anfragename" -#: sql_help.c:4318 sql_help.c:4321 sql_help.c:4324 sql_help.c:4557 -#: sql_help.c:4560 sql_help.c:4563 sql_help.c:4777 sql_help.c:4780 -#: sql_help.c:4783 +#: sql_help.c:4427 sql_help.c:4430 sql_help.c:4433 sql_help.c:4676 +#: sql_help.c:4679 sql_help.c:4682 sql_help.c:4908 sql_help.c:4911 +#: sql_help.c:4914 msgid "column_definition" msgstr "Spaltendefinition" -#: sql_help.c:4328 sql_help.c:4567 sql_help.c:4787 +#: sql_help.c:4437 sql_help.c:4686 sql_help.c:4918 msgid "join_type" msgstr "Verbundtyp" -#: sql_help.c:4330 sql_help.c:4569 sql_help.c:4789 +#: sql_help.c:4439 sql_help.c:4688 sql_help.c:4920 msgid "join_condition" msgstr "Verbundbedingung" -#: sql_help.c:4331 sql_help.c:4570 sql_help.c:4790 +#: sql_help.c:4440 sql_help.c:4689 sql_help.c:4921 msgid "join_column" msgstr "Verbundspalte" -#: sql_help.c:4332 sql_help.c:4571 sql_help.c:4791 +#: sql_help.c:4441 sql_help.c:4690 sql_help.c:4922 +msgid "join_using_alias" +msgstr "Join-Using-Alias" + +#: sql_help.c:4442 sql_help.c:4691 sql_help.c:4923 msgid "and grouping_element can be one of:" msgstr "und Gruppierelement eins der folgenden sein kann:" -#: sql_help.c:4340 sql_help.c:4579 sql_help.c:4799 +#: sql_help.c:4450 sql_help.c:4699 sql_help.c:4931 msgid "and with_query is:" msgstr "und With-Anfrage ist:" -#: sql_help.c:4344 sql_help.c:4583 sql_help.c:4803 +#: sql_help.c:4454 sql_help.c:4703 sql_help.c:4935 msgid "values" msgstr "values" -#: sql_help.c:4345 sql_help.c:4584 sql_help.c:4804 +#: sql_help.c:4455 sql_help.c:4704 sql_help.c:4936 msgid "insert" msgstr "insert" -#: sql_help.c:4346 sql_help.c:4585 sql_help.c:4805 +#: sql_help.c:4456 sql_help.c:4705 sql_help.c:4937 msgid "update" msgstr "update" -#: sql_help.c:4347 sql_help.c:4586 sql_help.c:4806 +#: sql_help.c:4457 sql_help.c:4706 sql_help.c:4938 msgid "delete" msgstr "delete" -#: sql_help.c:4374 +#: sql_help.c:4459 sql_help.c:4708 sql_help.c:4940 +msgid "search_seq_col_name" +msgstr "Search-Seq-Spaltenname" + +#: sql_help.c:4461 sql_help.c:4710 sql_help.c:4942 +msgid "cycle_mark_col_name" +msgstr "Cycle-Mark-Spaltenname" + +#: sql_help.c:4462 sql_help.c:4711 sql_help.c:4943 +msgid "cycle_mark_value" +msgstr "Cycle-Mark-Wert" + +#: sql_help.c:4463 sql_help.c:4712 sql_help.c:4944 +msgid "cycle_mark_default" +msgstr "Cycle-Mark-Standard" + +#: sql_help.c:4464 sql_help.c:4713 sql_help.c:4945 +msgid "cycle_path_col_name" +msgstr "Cycle-Pfad-Spaltenname" + +#: sql_help.c:4491 msgid "new_table" msgstr "neue_Tabelle" -#: sql_help.c:4399 +#: sql_help.c:4516 msgid "timezone" msgstr "Zeitzone" -#: sql_help.c:4444 +#: sql_help.c:4561 msgid "snapshot_id" msgstr "Snapshot-ID" -#: sql_help.c:4686 +#: sql_help.c:4815 msgid "sort_expression" msgstr "Sortierausdruck" -#: sql_help.c:4813 sql_help.c:5791 +#: sql_help.c:4952 sql_help.c:5930 msgid "abort the current transaction" msgstr "bricht die aktuelle Transaktion ab" -#: sql_help.c:4819 +#: sql_help.c:4958 msgid "change the definition of an aggregate function" msgstr "ändert die Definition einer Aggregatfunktion" -#: sql_help.c:4825 +#: sql_help.c:4964 msgid "change the definition of a collation" msgstr "ändert die Definition einer Sortierfolge" -#: sql_help.c:4831 +#: sql_help.c:4970 msgid "change the definition of a conversion" msgstr "ändert die Definition einer Zeichensatzkonversion" -#: sql_help.c:4837 +#: sql_help.c:4976 msgid "change a database" msgstr "ändert eine Datenbank" -#: sql_help.c:4843 +#: sql_help.c:4982 msgid "define default access privileges" msgstr "definiert vorgegebene Zugriffsprivilegien" -#: sql_help.c:4849 +#: sql_help.c:4988 msgid "change the definition of a domain" msgstr "ändert die Definition einer Domäne" -#: sql_help.c:4855 +#: sql_help.c:4994 msgid "change the definition of an event trigger" msgstr "ändert die Definition eines Ereignistriggers" -#: sql_help.c:4861 +#: sql_help.c:5000 msgid "change the definition of an extension" msgstr "ändert die Definition einer Erweiterung" -#: sql_help.c:4867 +#: sql_help.c:5006 msgid "change the definition of a foreign-data wrapper" msgstr "ändert die Definition eines Fremddaten-Wrappers" -#: sql_help.c:4873 +#: sql_help.c:5012 msgid "change the definition of a foreign table" msgstr "ändert die Definition einer Fremdtabelle" -#: sql_help.c:4879 +#: sql_help.c:5018 msgid "change the definition of a function" msgstr "ändert die Definition einer Funktion" -#: sql_help.c:4885 +#: sql_help.c:5024 msgid "change role name or membership" msgstr "ändert Rollenname oder -mitglieder" -#: sql_help.c:4891 +#: sql_help.c:5030 msgid "change the definition of an index" msgstr "ändert die Definition eines Index" -#: sql_help.c:4897 +#: sql_help.c:5036 msgid "change the definition of a procedural language" msgstr "ändert die Definition einer prozeduralen Sprache" -#: sql_help.c:4903 +#: sql_help.c:5042 msgid "change the definition of a large object" msgstr "ändert die Definition eines Large Object" -#: sql_help.c:4909 +#: sql_help.c:5048 msgid "change the definition of a materialized view" msgstr "ändert die Definition einer materialisierten Sicht" -#: sql_help.c:4915 +#: sql_help.c:5054 msgid "change the definition of an operator" msgstr "ändert die Definition eines Operators" -#: sql_help.c:4921 +#: sql_help.c:5060 msgid "change the definition of an operator class" msgstr "ändert die Definition einer Operatorklasse" -#: sql_help.c:4927 +#: sql_help.c:5066 msgid "change the definition of an operator family" msgstr "ändert die Definition einer Operatorfamilie" -#: sql_help.c:4933 -msgid "change the definition of a row level security policy" +#: sql_help.c:5072 +msgid "change the definition of a row-level security policy" msgstr "ändert die Definition einer Policy für Sicherheit auf Zeilenebene" -#: sql_help.c:4939 +#: sql_help.c:5078 msgid "change the definition of a procedure" msgstr "ändert die Definition einer Prozedur" -#: sql_help.c:4945 +#: sql_help.c:5084 msgid "change the definition of a publication" msgstr "ändert die Definition einer Publikation" -#: sql_help.c:4951 sql_help.c:5053 +#: sql_help.c:5090 sql_help.c:5192 msgid "change a database role" msgstr "ändert eine Datenbankrolle" -#: sql_help.c:4957 +#: sql_help.c:5096 msgid "change the definition of a routine" msgstr "ändert die Definition einer Routine" -#: sql_help.c:4963 +#: sql_help.c:5102 msgid "change the definition of a rule" msgstr "ändert die Definition einer Regel" -#: sql_help.c:4969 +#: sql_help.c:5108 msgid "change the definition of a schema" msgstr "ändert die Definition eines Schemas" -#: sql_help.c:4975 +#: sql_help.c:5114 msgid "change the definition of a sequence generator" msgstr "ändert die Definition eines Sequenzgenerators" -#: sql_help.c:4981 +#: sql_help.c:5120 msgid "change the definition of a foreign server" msgstr "ändert die Definition eines Fremdservers" -#: sql_help.c:4987 +#: sql_help.c:5126 msgid "change the definition of an extended statistics object" msgstr "ändert die Definition eines erweiterten Statistikobjekts" -#: sql_help.c:4993 +#: sql_help.c:5132 msgid "change the definition of a subscription" msgstr "ändert die Definition einer Subskription" -#: sql_help.c:4999 +#: sql_help.c:5138 msgid "change a server configuration parameter" msgstr "ändert einen Server-Konfigurationsparameter" -#: sql_help.c:5005 +#: sql_help.c:5144 msgid "change the definition of a table" msgstr "ändert die Definition einer Tabelle" -#: sql_help.c:5011 +#: sql_help.c:5150 msgid "change the definition of a tablespace" msgstr "ändert die Definition eines Tablespace" -#: sql_help.c:5017 +#: sql_help.c:5156 msgid "change the definition of a text search configuration" msgstr "ändert die Definition einer Textsuchekonfiguration" -#: sql_help.c:5023 +#: sql_help.c:5162 msgid "change the definition of a text search dictionary" msgstr "ändert die Definition eines Textsuchewörterbuchs" -#: sql_help.c:5029 +#: sql_help.c:5168 msgid "change the definition of a text search parser" msgstr "ändert die Definition eines Textsucheparsers" -#: sql_help.c:5035 +#: sql_help.c:5174 msgid "change the definition of a text search template" msgstr "ändert die Definition einer Textsuchevorlage" -#: sql_help.c:5041 +#: sql_help.c:5180 msgid "change the definition of a trigger" msgstr "ändert die Definition eines Triggers" -#: sql_help.c:5047 +#: sql_help.c:5186 msgid "change the definition of a type" msgstr "ändert die Definition eines Typs" -#: sql_help.c:5059 +#: sql_help.c:5198 msgid "change the definition of a user mapping" msgstr "ändert die Definition einer Benutzerabbildung" -#: sql_help.c:5065 +#: sql_help.c:5204 msgid "change the definition of a view" msgstr "ändert die Definition einer Sicht" -#: sql_help.c:5071 +#: sql_help.c:5210 msgid "collect statistics about a database" msgstr "sammelt Statistiken über eine Datenbank" -#: sql_help.c:5077 sql_help.c:5869 +#: sql_help.c:5216 sql_help.c:6008 msgid "start a transaction block" msgstr "startet einen Transaktionsblock" -#: sql_help.c:5083 +#: sql_help.c:5222 msgid "invoke a procedure" msgstr "ruft eine Prozedur auf" -#: sql_help.c:5089 +#: sql_help.c:5228 msgid "force a write-ahead log checkpoint" msgstr "erzwingt einen Checkpoint im Write-Ahead-Log" -#: sql_help.c:5095 +#: sql_help.c:5234 msgid "close a cursor" msgstr "schließt einen Cursor" -#: sql_help.c:5101 +#: sql_help.c:5240 msgid "cluster a table according to an index" msgstr "clustert eine Tabelle nach einem Index" -#: sql_help.c:5107 +#: sql_help.c:5246 msgid "define or change the comment of an object" msgstr "definiert oder ändert den Kommentar eines Objektes" -#: sql_help.c:5113 sql_help.c:5671 +#: sql_help.c:5252 sql_help.c:5810 msgid "commit the current transaction" msgstr "schließt die aktuelle Transaktion ab" -#: sql_help.c:5119 +#: sql_help.c:5258 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "schließt eine Transaktion ab, die vorher für Two-Phase-Commit vorbereitet worden war" -#: sql_help.c:5125 +#: sql_help.c:5264 msgid "copy data between a file and a table" msgstr "kopiert Daten zwischen einer Datei und einer Tabelle" -#: sql_help.c:5131 +#: sql_help.c:5270 msgid "define a new access method" msgstr "definiert eine neue Zugriffsmethode" -#: sql_help.c:5137 +#: sql_help.c:5276 msgid "define a new aggregate function" msgstr "definiert eine neue Aggregatfunktion" -#: sql_help.c:5143 +#: sql_help.c:5282 msgid "define a new cast" msgstr "definiert eine neue Typumwandlung" -#: sql_help.c:5149 +#: sql_help.c:5288 msgid "define a new collation" msgstr "definiert eine neue Sortierfolge" -#: sql_help.c:5155 +#: sql_help.c:5294 msgid "define a new encoding conversion" msgstr "definiert eine neue Kodierungskonversion" -#: sql_help.c:5161 +#: sql_help.c:5300 msgid "create a new database" msgstr "erzeugt eine neue Datenbank" -#: sql_help.c:5167 +#: sql_help.c:5306 msgid "define a new domain" msgstr "definiert eine neue Domäne" -#: sql_help.c:5173 +#: sql_help.c:5312 msgid "define a new event trigger" msgstr "definiert einen neuen Ereignistrigger" -#: sql_help.c:5179 +#: sql_help.c:5318 msgid "install an extension" msgstr "installiert eine Erweiterung" -#: sql_help.c:5185 +#: sql_help.c:5324 msgid "define a new foreign-data wrapper" msgstr "definiert einen neuen Fremddaten-Wrapper" -#: sql_help.c:5191 +#: sql_help.c:5330 msgid "define a new foreign table" msgstr "definiert eine neue Fremdtabelle" -#: sql_help.c:5197 +#: sql_help.c:5336 msgid "define a new function" msgstr "definiert eine neue Funktion" -#: sql_help.c:5203 sql_help.c:5263 sql_help.c:5365 +#: sql_help.c:5342 sql_help.c:5402 sql_help.c:5504 msgid "define a new database role" msgstr "definiert eine neue Datenbankrolle" -#: sql_help.c:5209 +#: sql_help.c:5348 msgid "define a new index" msgstr "definiert einen neuen Index" -#: sql_help.c:5215 +#: sql_help.c:5354 msgid "define a new procedural language" msgstr "definiert eine neue prozedurale Sprache" -#: sql_help.c:5221 +#: sql_help.c:5360 msgid "define a new materialized view" msgstr "definiert eine neue materialisierte Sicht" -#: sql_help.c:5227 +#: sql_help.c:5366 msgid "define a new operator" msgstr "definiert einen neuen Operator" -#: sql_help.c:5233 +#: sql_help.c:5372 msgid "define a new operator class" msgstr "definiert eine neue Operatorklasse" -#: sql_help.c:5239 +#: sql_help.c:5378 msgid "define a new operator family" msgstr "definiert eine neue Operatorfamilie" -#: sql_help.c:5245 -msgid "define a new row level security policy for a table" +#: sql_help.c:5384 +msgid "define a new row-level security policy for a table" msgstr "definiert eine neue Policy für Sicherheit auf Zeilenebene für eine Tabelle" -#: sql_help.c:5251 +#: sql_help.c:5390 msgid "define a new procedure" msgstr "definiert eine neue Prozedur" -#: sql_help.c:5257 +#: sql_help.c:5396 msgid "define a new publication" msgstr "definiert eine neue Publikation" -#: sql_help.c:5269 +#: sql_help.c:5408 msgid "define a new rewrite rule" msgstr "definiert eine neue Umschreiberegel" -#: sql_help.c:5275 +#: sql_help.c:5414 msgid "define a new schema" msgstr "definiert ein neues Schema" -#: sql_help.c:5281 +#: sql_help.c:5420 msgid "define a new sequence generator" msgstr "definiert einen neuen Sequenzgenerator" -#: sql_help.c:5287 +#: sql_help.c:5426 msgid "define a new foreign server" msgstr "definiert einen neuen Fremdserver" -#: sql_help.c:5293 +#: sql_help.c:5432 msgid "define extended statistics" msgstr "definiert erweiterte Statistiken" -#: sql_help.c:5299 +#: sql_help.c:5438 msgid "define a new subscription" msgstr "definiert eine neue Subskription" -#: sql_help.c:5305 +#: sql_help.c:5444 msgid "define a new table" msgstr "definiert eine neue Tabelle" -#: sql_help.c:5311 sql_help.c:5827 +#: sql_help.c:5450 sql_help.c:5966 msgid "define a new table from the results of a query" msgstr "definiert eine neue Tabelle aus den Ergebnissen einer Anfrage" -#: sql_help.c:5317 +#: sql_help.c:5456 msgid "define a new tablespace" msgstr "definiert einen neuen Tablespace" -#: sql_help.c:5323 +#: sql_help.c:5462 msgid "define a new text search configuration" msgstr "definiert eine neue Textsuchekonfiguration" -#: sql_help.c:5329 +#: sql_help.c:5468 msgid "define a new text search dictionary" msgstr "definiert ein neues Textsuchewörterbuch" -#: sql_help.c:5335 +#: sql_help.c:5474 msgid "define a new text search parser" msgstr "definiert einen neuen Textsucheparser" -#: sql_help.c:5341 +#: sql_help.c:5480 msgid "define a new text search template" msgstr "definiert eine neue Textsuchevorlage" -#: sql_help.c:5347 +#: sql_help.c:5486 msgid "define a new transform" msgstr "definiert eine neue Transformation" -#: sql_help.c:5353 +#: sql_help.c:5492 msgid "define a new trigger" msgstr "definiert einen neuen Trigger" -#: sql_help.c:5359 +#: sql_help.c:5498 msgid "define a new data type" msgstr "definiert einen neuen Datentyp" -#: sql_help.c:5371 +#: sql_help.c:5510 msgid "define a new mapping of a user to a foreign server" msgstr "definiert eine neue Abbildung eines Benutzers auf einen Fremdserver" -#: sql_help.c:5377 +#: sql_help.c:5516 msgid "define a new view" msgstr "definiert eine neue Sicht" -#: sql_help.c:5383 +#: sql_help.c:5522 msgid "deallocate a prepared statement" msgstr "gibt einen vorbereiteten Befehl frei" -#: sql_help.c:5389 +#: sql_help.c:5528 msgid "define a cursor" msgstr "definiert einen Cursor" -#: sql_help.c:5395 +#: sql_help.c:5534 msgid "delete rows of a table" msgstr "löscht Zeilen einer Tabelle" -#: sql_help.c:5401 +#: sql_help.c:5540 msgid "discard session state" msgstr "verwirft den Sitzungszustand" -#: sql_help.c:5407 +#: sql_help.c:5546 msgid "execute an anonymous code block" msgstr "führt einen anonymen Codeblock aus" -#: sql_help.c:5413 +#: sql_help.c:5552 msgid "remove an access method" msgstr "entfernt eine Zugriffsmethode" -#: sql_help.c:5419 +#: sql_help.c:5558 msgid "remove an aggregate function" msgstr "entfernt eine Aggregatfunktion" -#: sql_help.c:5425 +#: sql_help.c:5564 msgid "remove a cast" msgstr "entfernt eine Typumwandlung" -#: sql_help.c:5431 +#: sql_help.c:5570 msgid "remove a collation" msgstr "entfernt eine Sortierfolge" -#: sql_help.c:5437 +#: sql_help.c:5576 msgid "remove a conversion" msgstr "entfernt eine Zeichensatzkonversion" -#: sql_help.c:5443 +#: sql_help.c:5582 msgid "remove a database" msgstr "entfernt eine Datenbank" -#: sql_help.c:5449 +#: sql_help.c:5588 msgid "remove a domain" msgstr "entfernt eine Domäne" -#: sql_help.c:5455 +#: sql_help.c:5594 msgid "remove an event trigger" msgstr "entfernt einen Ereignistrigger" -#: sql_help.c:5461 +#: sql_help.c:5600 msgid "remove an extension" msgstr "entfernt eine Erweiterung" -#: sql_help.c:5467 +#: sql_help.c:5606 msgid "remove a foreign-data wrapper" msgstr "entfernt einen Fremddaten-Wrapper" -#: sql_help.c:5473 +#: sql_help.c:5612 msgid "remove a foreign table" msgstr "entfernt eine Fremdtabelle" -#: sql_help.c:5479 +#: sql_help.c:5618 msgid "remove a function" msgstr "entfernt eine Funktion" -#: sql_help.c:5485 sql_help.c:5551 sql_help.c:5653 +#: sql_help.c:5624 sql_help.c:5690 sql_help.c:5792 msgid "remove a database role" msgstr "entfernt eine Datenbankrolle" -#: sql_help.c:5491 +#: sql_help.c:5630 msgid "remove an index" msgstr "entfernt einen Index" -#: sql_help.c:5497 +#: sql_help.c:5636 msgid "remove a procedural language" msgstr "entfernt eine prozedurale Sprache" -#: sql_help.c:5503 +#: sql_help.c:5642 msgid "remove a materialized view" msgstr "entfernt eine materialisierte Sicht" -#: sql_help.c:5509 +#: sql_help.c:5648 msgid "remove an operator" msgstr "entfernt einen Operator" -#: sql_help.c:5515 +#: sql_help.c:5654 msgid "remove an operator class" msgstr "entfernt eine Operatorklasse" -#: sql_help.c:5521 +#: sql_help.c:5660 msgid "remove an operator family" msgstr "entfernt eine Operatorfamilie" -#: sql_help.c:5527 +#: sql_help.c:5666 msgid "remove database objects owned by a database role" msgstr "entfernt die einer Datenbankrolle gehörenden Datenbankobjekte" -#: sql_help.c:5533 -msgid "remove a row level security policy from a table" +#: sql_help.c:5672 +msgid "remove a row-level security policy from a table" msgstr "entfernt eine Policy für Sicherheit auf Zeilenebene von einer Tabelle" -#: sql_help.c:5539 +#: sql_help.c:5678 msgid "remove a procedure" msgstr "entfernt eine Prozedur" -#: sql_help.c:5545 +#: sql_help.c:5684 msgid "remove a publication" msgstr "entfernt eine Publikation" -#: sql_help.c:5557 +#: sql_help.c:5696 msgid "remove a routine" msgstr "entfernt eine Routine" -#: sql_help.c:5563 +#: sql_help.c:5702 msgid "remove a rewrite rule" msgstr "entfernt eine Umschreiberegel" -#: sql_help.c:5569 +#: sql_help.c:5708 msgid "remove a schema" msgstr "entfernt ein Schema" -#: sql_help.c:5575 +#: sql_help.c:5714 msgid "remove a sequence" msgstr "entfernt eine Sequenz" -#: sql_help.c:5581 +#: sql_help.c:5720 msgid "remove a foreign server descriptor" msgstr "entfernt einen Fremdserverdeskriptor" -#: sql_help.c:5587 +#: sql_help.c:5726 msgid "remove extended statistics" msgstr "entfernt erweiterte Statistiken" -#: sql_help.c:5593 +#: sql_help.c:5732 msgid "remove a subscription" msgstr "entfernt eine Subskription" -#: sql_help.c:5599 +#: sql_help.c:5738 msgid "remove a table" msgstr "entfernt eine Tabelle" -#: sql_help.c:5605 +#: sql_help.c:5744 msgid "remove a tablespace" msgstr "entfernt einen Tablespace" -#: sql_help.c:5611 +#: sql_help.c:5750 msgid "remove a text search configuration" msgstr "entfernt eine Textsuchekonfiguration" -#: sql_help.c:5617 +#: sql_help.c:5756 msgid "remove a text search dictionary" msgstr "entfernt ein Textsuchewörterbuch" -#: sql_help.c:5623 +#: sql_help.c:5762 msgid "remove a text search parser" msgstr "entfernt einen Textsucheparser" -#: sql_help.c:5629 +#: sql_help.c:5768 msgid "remove a text search template" msgstr "entfernt eine Textsuchevorlage" -#: sql_help.c:5635 +#: sql_help.c:5774 msgid "remove a transform" msgstr "entfernt eine Transformation" -#: sql_help.c:5641 +#: sql_help.c:5780 msgid "remove a trigger" msgstr "entfernt einen Trigger" -#: sql_help.c:5647 +#: sql_help.c:5786 msgid "remove a data type" msgstr "entfernt einen Datentyp" -#: sql_help.c:5659 +#: sql_help.c:5798 msgid "remove a user mapping for a foreign server" msgstr "entfernt eine Benutzerabbildung für einen Fremdserver" -#: sql_help.c:5665 +#: sql_help.c:5804 msgid "remove a view" msgstr "entfernt eine Sicht" -#: sql_help.c:5677 +#: sql_help.c:5816 msgid "execute a prepared statement" msgstr "führt einen vorbereiteten Befehl aus" -#: sql_help.c:5683 +#: sql_help.c:5822 msgid "show the execution plan of a statement" msgstr "zeigt den Ausführungsplan eines Befehls" -#: sql_help.c:5689 +#: sql_help.c:5828 msgid "retrieve rows from a query using a cursor" msgstr "liest Zeilen aus einer Anfrage mit einem Cursor" -#: sql_help.c:5695 +#: sql_help.c:5834 msgid "define access privileges" msgstr "definiert Zugriffsprivilegien" -#: sql_help.c:5701 +#: sql_help.c:5840 msgid "import table definitions from a foreign server" msgstr "importiert Tabellendefinitionen von einem Fremdserver" -#: sql_help.c:5707 +#: sql_help.c:5846 msgid "create new rows in a table" msgstr "erzeugt neue Zeilen in einer Tabelle" -#: sql_help.c:5713 +#: sql_help.c:5852 msgid "listen for a notification" msgstr "hört auf eine Benachrichtigung" -#: sql_help.c:5719 +#: sql_help.c:5858 msgid "load a shared library file" msgstr "lädt eine dynamische Bibliotheksdatei" -#: sql_help.c:5725 +#: sql_help.c:5864 msgid "lock a table" msgstr "sperrt eine Tabelle" -#: sql_help.c:5731 +#: sql_help.c:5870 msgid "position a cursor" msgstr "positioniert einen Cursor" -#: sql_help.c:5737 +#: sql_help.c:5876 msgid "generate a notification" msgstr "erzeugt eine Benachrichtigung" -#: sql_help.c:5743 +#: sql_help.c:5882 msgid "prepare a statement for execution" msgstr "bereitet einen Befehl zur Ausführung vor" -#: sql_help.c:5749 +#: sql_help.c:5888 msgid "prepare the current transaction for two-phase commit" msgstr "bereitet die aktuelle Transaktion für Two-Phase-Commit vor" -#: sql_help.c:5755 +#: sql_help.c:5894 msgid "change the ownership of database objects owned by a database role" msgstr "ändert den Eigentümer der der Rolle gehörenden Datenbankobjekte" -#: sql_help.c:5761 +#: sql_help.c:5900 msgid "replace the contents of a materialized view" msgstr "ersetzt den Inhalt einer materialisierten Sicht" -#: sql_help.c:5767 +#: sql_help.c:5906 msgid "rebuild indexes" msgstr "baut Indexe neu" -#: sql_help.c:5773 +#: sql_help.c:5912 msgid "destroy a previously defined savepoint" msgstr "gibt einen zuvor definierten Sicherungspunkt frei" -#: sql_help.c:5779 +#: sql_help.c:5918 msgid "restore the value of a run-time parameter to the default value" msgstr "setzt einen Konfigurationsparameter auf die Voreinstellung zurück" -#: sql_help.c:5785 +#: sql_help.c:5924 msgid "remove access privileges" msgstr "entfernt Zugriffsprivilegien" -#: sql_help.c:5797 +#: sql_help.c:5936 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "storniert eine Transaktion, die vorher für Two-Phase-Commit vorbereitet worden war" -#: sql_help.c:5803 +#: sql_help.c:5942 msgid "roll back to a savepoint" msgstr "rollt eine Transaktion bis zu einem Sicherungspunkt zurück" -#: sql_help.c:5809 +#: sql_help.c:5948 msgid "define a new savepoint within the current transaction" msgstr "definiert einen neuen Sicherungspunkt in der aktuellen Transaktion" -#: sql_help.c:5815 +#: sql_help.c:5954 msgid "define or change a security label applied to an object" msgstr "definiert oder ändert ein Security-Label eines Objektes" -#: sql_help.c:5821 sql_help.c:5875 sql_help.c:5911 +#: sql_help.c:5960 sql_help.c:6014 sql_help.c:6050 msgid "retrieve rows from a table or view" msgstr "liest Zeilen aus einer Tabelle oder Sicht" -#: sql_help.c:5833 +#: sql_help.c:5972 msgid "change a run-time parameter" msgstr "ändert einen Konfigurationsparameter" -#: sql_help.c:5839 +#: sql_help.c:5978 msgid "set constraint check timing for the current transaction" msgstr "setzt die Zeitsteuerung für Check-Constraints in der aktuellen Transaktion" -#: sql_help.c:5845 +#: sql_help.c:5984 msgid "set the current user identifier of the current session" msgstr "setzt den aktuellen Benutzernamen der aktuellen Sitzung" -#: sql_help.c:5851 +#: sql_help.c:5990 msgid "set the session user identifier and the current user identifier of the current session" msgstr "setzt den Sitzungsbenutzernamen und den aktuellen Benutzernamen der aktuellen Sitzung" -#: sql_help.c:5857 +#: sql_help.c:5996 msgid "set the characteristics of the current transaction" msgstr "setzt die Charakteristika der aktuellen Transaktion" -#: sql_help.c:5863 +#: sql_help.c:6002 msgid "show the value of a run-time parameter" msgstr "zeigt den Wert eines Konfigurationsparameters" -#: sql_help.c:5881 +#: sql_help.c:6020 msgid "empty a table or set of tables" msgstr "leert eine oder mehrere Tabellen" -#: sql_help.c:5887 +#: sql_help.c:6026 msgid "stop listening for a notification" msgstr "beendet das Hören auf eine Benachrichtigung" -#: sql_help.c:5893 +#: sql_help.c:6032 msgid "update rows of a table" msgstr "aktualisiert Zeilen einer Tabelle" -#: sql_help.c:5899 +#: sql_help.c:6038 msgid "garbage-collect and optionally analyze a database" msgstr "säubert und analysiert eine Datenbank" -#: sql_help.c:5905 +#: sql_help.c:6044 msgid "compute a set of rows" msgstr "berechnet eine Zeilenmenge" -#: startup.c:212 +#: startup.c:213 #, c-format msgid "-1 can only be used in non-interactive mode" msgstr "-1 kann nur im nicht interaktiven Modus verwendet werden" -#: startup.c:299 -#, c-format -msgid "could not connect to server: %s" -msgstr "konnte nicht mit Server verbinden: %s" - -#: startup.c:327 +#: startup.c:326 #, c-format msgid "could not open log file \"%s\": %m" msgstr "konnte Logdatei »%s« nicht öffnen: %m" -#: startup.c:439 +#: startup.c:438 #, c-format msgid "" "Type \"help\" for help.\n" @@ -6378,27 +6496,27 @@ msgstr "" "Geben Sie »help« für Hilfe ein.\n" "\n" -#: startup.c:589 +#: startup.c:591 #, c-format msgid "could not set printing parameter \"%s\"" msgstr "konnte Ausgabeparameter »%s« nicht setzen" -#: startup.c:697 +#: startup.c:699 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: startup.c:714 +#: startup.c:716 #, c-format msgid "extra command-line argument \"%s\" ignored" msgstr "überflüssiges Kommandozeilenargument »%s« ignoriert" -#: startup.c:763 +#: startup.c:765 #, c-format msgid "could not find own program executable" msgstr "konnte eigene Programmdatei nicht finden" -#: tab-complete.c:4640 +#: tab-complete.c:4917 #, c-format msgid "" "tab completion query failed: %s\n" @@ -6424,7 +6542,7 @@ msgstr "ungültiger Wert »%s« für »%s«: ganze Zahl erwartet" msgid "invalid variable name: \"%s\"" msgstr "ungültiger Variablenname: »%s«" -#: variables.c:393 +#: variables.c:419 #, c-format msgid "" "unrecognized value \"%s\" for \"%s\"\n" @@ -6432,9 +6550,3 @@ msgid "" msgstr "" "unbekannter Wert »%s« für »%s«\n" "Verfügbare Werte sind: %s." - -#~ msgid "using_list" -#~ msgstr "Using-Liste" - -#~ msgid "from_list" -#~ msgstr "From-Liste" diff --git a/src/bin/psql/po/el.po b/src/bin/psql/po/el.po new file mode 100644 index 0000000000000..2ed92f6d6bb1b --- /dev/null +++ b/src/bin/psql/po/el.po @@ -0,0 +1,6753 @@ +# Greek message translation file for psql +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the psql (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: psql (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-02-25 07:44+0000\n" +"PO-Revision-Date: 2021-03-11 10:07+0100\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.4.2\n" +"Last-Translator: Georgios Kokolatos \n" +"Language: el\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "κρίσιμο:" + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "σφάλμα:" + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "προειδοποίηση:" + +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#, c-format +msgid "could not identify current directory: %m" +msgstr "δεν ήταν δυνατή η αναγνώριση του τρέχοντος καταλόγου: %m" + +#: ../../common/exec.c:156 +#, c-format +msgid "invalid binary \"%s\"" +msgstr "μη έγκυρο δυαδικό αρχείο “%s”" + +#: ../../common/exec.c:206 +#, c-format +msgid "could not read binary \"%s\"" +msgstr "δεν ήταν δυνατή η ανάγνωση του δυαδικού αρχείου “%s”" + +#: ../../common/exec.c:214 +#, c-format +msgid "could not find a \"%s\" to execute" +msgstr "δεν βρέθηκε το αρχείο “%s” για να εκτελεστεί" + +#: ../../common/exec.c:270 ../../common/exec.c:309 +#, c-format +msgid "could not change directory to \"%s\": %m" +msgstr "δεν ήταν δυνατή η μετάβαση στον κατάλογο “%s”: %m" + +#: ../../common/exec.c:287 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση του συμβολικού συνδέσμου “%s”: %m" + +#: ../../common/exec.c:410 +#, c-format +msgid "pclose failed: %m" +msgstr "απέτυχε η εντολή pclose: %m" + +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: command.c:1255 command.c:3173 command.c:3222 command.c:3339 input.c:227 +#: mainloop.c:81 mainloop.c:402 +#, c-format +msgid "out of memory" +msgstr "έλλειψη μνήμης" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "έλλειψη μνήμης\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "δεν ήταν δυνατή η αντιγραφή δείκτη null (εσωτερικό σφάλμα)\n" + +#: ../../common/username.c:43 +#, c-format +msgid "could not look up effective user ID %ld: %s" +msgstr "δεν ήταν δυνατή η αναζήτηση ενεργής ταυτότητας χρήστη %ld: %s" + +#: ../../common/username.c:45 command.c:559 +msgid "user does not exist" +msgstr "ο χρήστης δεν υπάρχει" + +#: ../../common/username.c:60 +#, c-format +msgid "user name lookup failure: error code %lu" +msgstr "αποτυχία αναζήτησης ονόματος χρήστη: κωδικός σφάλματος % lu" + +#: ../../common/wait_error.c:45 +#, c-format +msgid "command not executable" +msgstr "εντολή μη εκτελέσιμη" + +#: ../../common/wait_error.c:49 +#, c-format +msgid "command not found" +msgstr "εντολή δεν βρέθηκε" + +#: ../../common/wait_error.c:54 +#, c-format +msgid "child process exited with exit code %d" +msgstr "απόγονος διεργασίας τερμάτισε με κωδικό εξόδου %d" + +#: ../../common/wait_error.c:62 +#, c-format +msgid "child process was terminated by exception 0x%X" +msgstr "απόγονος διεργασίας τερματίστηκε με εξαίρεση 0x%X" + +#: ../../common/wait_error.c:66 +#, c-format +msgid "child process was terminated by signal %d: %s" +msgstr "απόγονος διεργασίας τερματίστηκε με σήμα %d: %s" + +#: ../../common/wait_error.c:72 +#, c-format +msgid "child process exited with unrecognized status %d" +msgstr "απόγονος διεργασίας τερμάτισε με μη αναγνωρίσιμη κατάσταση %d" + +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Αίτηση ακύρωσης εστάλη\n" + +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 +msgid "Could not send cancel request: " +msgstr "Δεν ήταν δυνατή η αποστολή αίτησης ακύρωσης" + +#: ../../fe_utils/print.c:350 +#, c-format +msgid "(%lu row)" +msgid_plural "(%lu rows)" +msgstr[0] "(%lu σειρά)" +msgstr[1] "(%lu σειρές)" + +#: ../../fe_utils/print.c:3055 +#, c-format +msgid "Interrupted\n" +msgstr "Διακόπηκε\n" + +#: ../../fe_utils/print.c:3119 +#, c-format +msgid "Cannot add header to table content: column count of %d exceeded.\n" +msgstr "" +"Δεν είναι δυνατή η προσθήκη κεφαλίδας σε περιεχόμενο πίνακα: υπέρβαση του " +"πλήθους στηλών %d.\n" + +#: ../../fe_utils/print.c:3159 +#, c-format +msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" +msgstr "" +"Δεν είναι δυνατή η προσθήκη κελιού σε περιεχόμενο πίνακα: υπέρβαση του " +"συνολικού αριθμού κελιών %d.\n" + +#: ../../fe_utils/print.c:3414 +#, c-format +msgid "invalid output format (internal error): %d" +msgstr "μη έγκυρη μορφή εξόδου (εσωτερικό σφάλμα): %d" + +#: ../../fe_utils/psqlscan.l:694 +#, c-format +msgid "skipping recursive expansion of variable \"%s\"" +msgstr "Παραλείπεται η αναδρομική επέκταση της μεταβλητής “%s”" + +#: command.c:224 +#, c-format +msgid "invalid command \\%s" +msgstr "μη έγκυρη εντολή “%s”" + +#: command.c:226 +#, c-format +msgid "Try \\? for help." +msgstr "Δοκιμάστε \\? για βοήθεια." + +#: command.c:244 +#, c-format +msgid "\\%s: extra argument \"%s\" ignored" +msgstr "\\%s: επιπλέον παράμετρος “%s” αγνοείται" + +#: command.c:296 +#, c-format +msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" +msgstr "" +"\\%s εντολή αγνοείται, χρησιμοποιείστε \\endif ή Ctrl-C για να εξέλθετε από " +"το παρόν μπλοκ \\if" + +#: command.c:557 +#, c-format +msgid "could not get home directory for user ID %ld: %s" +msgstr "" +"δεν ήταν δυνατή η ανάλληψη προσωπικού καταλόγου για τον χρήστη με ID %ld: %s" + +#: command.c:575 +#, c-format +msgid "\\%s: could not change directory to \"%s\": %m" +msgstr "\\%s: δεν ήταν δυνατή η μετάβαση στον κατάλογο “%s”: %m" + +#: command.c:600 +#, c-format +msgid "You are currently not connected to a database.\n" +msgstr "Αυτή τη στιγμή δεν είστε συνδεδεμένοι σε μία βάση δεδομένων.\n" + +#: command.c:613 +#, c-format +msgid "" +"You are connected to database \"%s\" as user \"%s\" on address \"%s\" at " +"port \"%s\".\n" +msgstr "" +"Είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” στην διεύθυνση " +"“%s” στη θύρα “%s”.\n" + +#: command.c:616 +#, c-format +msgid "" +"You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at " +"port \"%s\".\n" +msgstr "" +"Είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” μέσω του υποδεχέα " +"“%s” στη θύρα “%s”.\n" + +#: command.c:622 +#, c-format +msgid "" +"You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address " +"\"%s\") at port \"%s\".\n" +msgstr "" +"Είστε συνδεδεμένοι στη βάση δεδομένων \"%s\" ως χρήστης \"%s\" στον κεντρικό " +"υπολογιστή \"%s\" (διεύθυνση \"%s\") στη θύρα \"%s\".\n" + +#: command.c:625 +#, c-format +msgid "" +"You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port " +"\"%s\".\n" +msgstr "" +"Είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” στον κεντρικό " +"υπολογιστή “%s” στη θύρα “%s”.\n" + +#: command.c:965 command.c:1061 command.c:2550 +#, c-format +msgid "no query buffer" +msgstr "μη ενδιάμεση μνήμη ερώτησης" + +#: command.c:998 command.c:5171 +#, c-format +msgid "invalid line number: %s" +msgstr "μη έγκυρος αριθμός γραμμής “%s”" + +#: command.c:1052 +#, c-format +msgid "The server (version %s) does not support editing function source." +msgstr "" +"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την επεξεργασία πηγών συναρτήσεων." + +#: command.c:1055 +#, c-format +msgid "The server (version %s) does not support editing view definitions." +msgstr "" +"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την επεξεργασία ορισμών προβολής." + +#: command.c:1137 +msgid "No changes" +msgstr "Καθόλου αλλάγες" + +#: command.c:1216 +#, c-format +msgid "%s: invalid encoding name or conversion procedure not found" +msgstr "" +"%s: μη έγκυρη ονομασία κωδικοποίησης ή δεν βρέθηκε η διεργασία μετατροπής" + +#: command.c:1251 command.c:1992 command.c:3169 command.c:3361 command.c:5273 +#: common.c:174 common.c:223 common.c:388 common.c:1244 common.c:1272 +#: common.c:1381 common.c:1488 common.c:1526 copy.c:488 copy.c:707 help.c:62 +#: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:299 +#, c-format +msgid "%s" +msgstr "%s" + +#: command.c:1258 +msgid "There is no previous error." +msgstr "Δεν υπάρχει προηγούμενο σφάλμα." + +#: command.c:1371 +#, c-format +msgid "\\%s: missing right parenthesis" +msgstr "\\%s: λείπει δεξιά παρένθεση" + +#: command.c:1548 command.c:1853 command.c:1867 command.c:1884 command.c:2044 +#: command.c:2281 command.c:2517 command.c:2557 +#, c-format +msgid "\\%s: missing required argument" +msgstr "\\%s: λείπει αναγκαία παράμετρος" + +#: command.c:1679 +#, c-format +msgid "\\elif: cannot occur after \\else" +msgstr "\\elif: δεν δύναται να προκύψει μετά \\else" + +#: command.c:1684 +#, c-format +msgid "\\elif: no matching \\if" +msgstr "\\elif: δεν υπάρχει αντίστοιχο \\if" + +#: command.c:1748 +#, c-format +msgid "\\else: cannot occur after \\else" +msgstr "\\else: δεν δύναται να προκύψει μετά \\else" + +#: command.c:1753 +#, c-format +msgid "\\else: no matching \\if" +msgstr "\\else: δεν υπάρχει αντίστοιχο \\if" + +#: command.c:1793 +#, c-format +msgid "\\endif: no matching \\if" +msgstr "\\endif: δεν υπάρχει αντίστοιχο \\if" + +#: command.c:1948 +msgid "Query buffer is empty." +msgstr "Άδεια ενδιάμεση μνήμη ερώτησης." + +#: command.c:1970 +msgid "Enter new password: " +msgstr "Εισάγετε νέο κωδικό πρόσβασης: " + +#: command.c:1971 +msgid "Enter it again: " +msgstr "Εισάγετε ξανά: " + +#: command.c:1975 +#, c-format +msgid "Passwords didn't match." +msgstr "Οι κωδικοί πρόσβασης δεν είναι ίδιοι." + +#: command.c:2074 +#, c-format +msgid "\\%s: could not read value for variable" +msgstr "\\%s: δεν ήταν δυνατή η ανάγνωση τιμής για την μεταβλητή" + +#: command.c:2177 +msgid "Query buffer reset (cleared)." +msgstr "Μηδενισμός ενδιάμεσης μνήμη ερώτησης (καθάρισμα)." + +#: command.c:2199 +#, c-format +msgid "Wrote history to file \"%s\".\n" +msgstr "‘Εγραψε την ιστορία στο αρχείο “%s”.\n" + +#: command.c:2286 +#, c-format +msgid "\\%s: environment variable name must not contain \"=\"" +msgstr "" +"\\%s: η ονομασία μεταβλητή περιβάλλοντος environment δεν δύναται να " +"εμπεριέχει “=“" + +#: command.c:2347 +#, c-format +msgid "The server (version %s) does not support showing function source." +msgstr "" +"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την εμφάνιση του κώδικα της " +"συνάρτησης." + +#: command.c:2350 +#, c-format +msgid "The server (version %s) does not support showing view definitions." +msgstr "" +"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την επεξεργασία ορισμών προβολής." + +#: command.c:2357 +#, c-format +msgid "function name is required" +msgstr "η ονομασία συνάρτησης είναι αναγκαία" + +#: command.c:2359 +#, c-format +msgid "view name is required" +msgstr "η ονομασία ορισμού είναι αναγκαία" + +#: command.c:2489 +msgid "Timing is on." +msgstr "Η χρονομέτρηση είναι ενεργή." + +#: command.c:2491 +msgid "Timing is off." +msgstr "Η χρονομέτρηση είναι ανενεργή." + +#: command.c:2576 command.c:2604 command.c:3771 command.c:3774 command.c:3777 +#: command.c:3783 command.c:3785 command.c:3793 command.c:3803 command.c:3812 +#: command.c:3826 command.c:3843 command.c:3901 common.c:70 copy.c:331 +#: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 +#, c-format +msgid "%s: %m" +msgstr "%s: %m" + +#: command.c:2988 startup.c:236 startup.c:287 +msgid "Password: " +msgstr "Κωδικός πρόσβασης: " + +#: command.c:2993 startup.c:284 +#, c-format +msgid "Password for user %s: " +msgstr "Κωδικός πρόσβασης για τον χρήστη %s: " + +#: command.c:3047 +#, c-format +msgid "" +"All connection parameters must be supplied because no database connection " +"exists" +msgstr "" +"Πρέπει να δωθούν όλες οι παρέμετροι γιατί δεν υπάρχει σύνδεση με τη βάση " +"δεδομένων" + +#: command.c:3367 +#, c-format +msgid "Previous connection kept" +msgstr "Κρατήθηκε η προηγούμενη σύνδεση" + +#: command.c:3373 +#, c-format +msgid "\\connect: %s" +msgstr "\\connect: %s" + +#: command.c:3420 +#, c-format +msgid "" +"You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at " +"port \"%s\".\n" +msgstr "" +"Τώρα είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” στη " +"διεύθυνση “%s” στη θύρα “%s”.\n" +"=\n" + +#: command.c:3423 +#, c-format +msgid "" +"You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" " +"at port \"%s\".\n" +msgstr "" +"Τώρα είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” μέσω του " +"υποδεχέα “%s” στη θύρα “%s”.\n" + +#: command.c:3429 +#, c-format +msgid "" +"You are now connected to database \"%s\" as user \"%s\" on host \"%s" +"\" (address \"%s\") at port \"%s\".\n" +msgstr "" +"Τώρα είστε συνδεδεμένοι στη βάση δεδομένων \"%s\" ως χρήστης \"%s\" στον " +"κεντρικό υπολογιστή \"%s\" (διεύθυνση \"%s\") στη θύρα \"%s\".\n" + +#: command.c:3432 +#, c-format +msgid "" +"You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at " +"port \"%s\".\n" +msgstr "" +"Τώρα είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” στον " +"κεντρικό υπολογιστή “%s” στη θύρα “%s”.\n" + +#: command.c:3437 +#, c-format +msgid "You are now connected to database \"%s\" as user \"%s\".\n" +msgstr "Τώρα είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s”.\n" + +#: command.c:3470 +#, c-format +msgid "%s (%s, server %s)\n" +msgstr "%s (%s, διακομιστής %s)\n" + +#: command.c:3478 +#, c-format +msgid "" +"WARNING: %s major version %s, server major version %s.\n" +" Some psql features might not work.\n" +msgstr "" +"ΠΡΟΕΙΔΟΠΟΙΗΣΗ: %s κύρια έκδοση %s, %s κύρια έκδοση διακομιστή.\n" +" Ορισμένες δυνατότητες psql ενδέχεται να μην λειτουργούν.\n" + +#: command.c:3517 +#, c-format +msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" +msgstr "SSL σύνδεση (πρωτόκολλο: %s, cipher: %s, bits: %s, συμπίεση: %s)\n" + +#: command.c:3518 command.c:3519 command.c:3520 +msgid "unknown" +msgstr "άγνωστο" + +#: command.c:3521 help.c:45 +msgid "off" +msgstr "κλειστό" + +#: command.c:3521 help.c:45 +msgid "on" +msgstr "ανοικτό" + +#: command.c:3535 +#, c-format +msgid "GSSAPI-encrypted connection\n" +msgstr "GSSAPI-κρυπτογραφημένη σύνδεση\n" + +#: command.c:3555 +#, c-format +msgid "" +"WARNING: Console code page (%u) differs from Windows code page (%u)\n" +" 8-bit characters might not work correctly. See psql reference\n" +" page \"Notes for Windows users\" for details.\n" +msgstr "" +"ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Ο πηγαίος κώδικας της κονσόλας (%u) διαφέρει από τον πηγαίο " +"κώδικα των Windows(%u)\n" +" Χαρακτήρες 8-bit δύναται να μην λειτουργούν ορθά. Δείτε την αναφορά " +"στη σελίδα\n" +" psql με τίτλο “Σημειώσεις για χρήστες Windows” για πληροφορίες.\n" + +#: command.c:3659 +#, c-format +msgid "" +"environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a " +"line number" +msgstr "" +"η μεταβλητή περιβάλλοντος PSQL_EDITOR_LINENUMBER_ARG πρέπει να έχει οριστεί " +"για να ορίσετε αριθμό σειράς" + +#: command.c:3688 +#, c-format +msgid "could not start editor \"%s\"" +msgstr "δεν μπόρεσε να εκκινήσει τον editor “%s”" + +#: command.c:3690 +#, c-format +msgid "could not start /bin/sh" +msgstr "δεν μπόρεσε να εκκινήσει το /bin/sh" + +#: command.c:3728 +#, c-format +msgid "could not locate temporary directory: %s" +msgstr "δεν ήταν δυνατός ο εντοπισμός του προσωρινού καταλόγου %s" + +#: command.c:3755 +#, c-format +msgid "could not open temporary file \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του προσωρινού αρχείου “%s”: %m" + +#: command.c:4060 +#, c-format +msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" +msgstr "\\pset: διφορούμενης συντόμευση “%s” ταιριάζει τόσο “%s” όσο “%s”" + +#: command.c:4080 +#, c-format +msgid "" +"\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-" +"longtable, troff-ms, unaligned, wrapped" +msgstr "" +"\\pset: επιτρεπόμενες μορφές είναι aligned, asciidoc, csv, html, latex, " +"latex-longtable, troff-ms, unaligned, wrapped" + +#: command.c:4099 +#, c-format +msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" +msgstr "\\pset: επιτρεπόμενες μορφές γραμμών είναι ascii, old-ascii, unicode" + +#: command.c:4114 +#, c-format +msgid "\\pset: allowed Unicode border line styles are single, double" +msgstr "\\pset: επιτρεπόμενες μορφές Unicode border line είναι single, double" + +#: command.c:4129 +#, c-format +msgid "\\pset: allowed Unicode column line styles are single, double" +msgstr "\\pset: επιτρεπόμενες μορφές Unicode column line είναι single, double" + +#: command.c:4144 +#, c-format +msgid "\\pset: allowed Unicode header line styles are single, double" +msgstr "\\pset: επιτρεπόμενες μορφές Unicode header line είναι single, double" + +#: command.c:4187 +#, c-format +msgid "\\pset: csv_fieldsep must be a single one-byte character" +msgstr "\\pset: csv_fieldsep πρέπει να είναι ένας χαρακτήρας ενός-byte" + +#: command.c:4192 +#, c-format +msgid "" +"\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage " +"return" +msgstr "" +"\\pset: csv_fieldsep δεν μπορεί να είναι διπλά εισαγωγικά, νέα γραμμή, ή " +"carriage return" + +#: command.c:4329 command.c:4517 +#, c-format +msgid "\\pset: unknown option: %s" +msgstr "\\pset: άγνωστη επιλογή: %s" + +#: command.c:4349 +#, c-format +msgid "Border style is %d.\n" +msgstr "Border style είναι %d.\n" + +#: command.c:4355 +#, c-format +msgid "Target width is unset.\n" +msgstr "Target width δεν είναι ορισμένο.\n" + +#: command.c:4357 +#, c-format +msgid "Target width is %d.\n" +msgstr "Target width είναι %d.\n" + +#: command.c:4364 +#, c-format +msgid "Expanded display is on.\n" +msgstr "Εκτεταμένη οθόνη είναι ενεργή.\n" + +#: command.c:4366 +#, c-format +msgid "Expanded display is used automatically.\n" +msgstr "Εκτεταμένη οθόνη χρησιμοποιείται αυτόματα.\n" + +#: command.c:4368 +#, c-format +msgid "Expanded display is off.\n" +msgstr "Εκτεταμένη οθόνη είναι ανενεργή.\n" + +#: command.c:4374 +#, c-format +msgid "Field separator for CSV is \"%s\".\n" +msgstr "Διαχωριστής πεδίων CSV είναι ο “%s”.\n" + +#: command.c:4382 command.c:4390 +#, c-format +msgid "Field separator is zero byte.\n" +msgstr "Διαχωριστής πεδίων είναι το μηδενικό byte\n" + +#: command.c:4384 +#, c-format +msgid "Field separator is \"%s\".\n" +msgstr "Διαχωριστής πεδίων είναι ο “%s”.\n" + +#: command.c:4397 +#, c-format +msgid "Default footer is on.\n" +msgstr "Προκαθορισμένο υποσέλιδο είναι ενεργό.\n" + +#: command.c:4399 +#, c-format +msgid "Default footer is off.\n" +msgstr "Προκαθορισμένο υποσέλιδο είναι ανενεργό.\n" + +#: command.c:4405 +#, c-format +msgid "Output format is %s.\n" +msgstr "Η μορφή εξόδου είναι %s.\n" + +#: command.c:4411 +#, c-format +msgid "Line style is %s.\n" +msgstr "Η μορφή γραμμής είναι %s.\n" + +#: command.c:4418 +#, c-format +msgid "Null display is \"%s\".\n" +msgstr "Εμφάνιση Null είναι “%s”.\n" + +#: command.c:4426 +#, c-format +msgid "Locale-adjusted numeric output is on.\n" +msgstr "Η κατά εντοπιότητα διορθωμένη μορφή αριθμητικής εξόδου είναι ενεργή.\n" + +#: command.c:4428 +#, c-format +msgid "Locale-adjusted numeric output is off.\n" +msgstr "" +"Η κατά εντοπιότητα διορθωμένη μορφή αριθμητικής εξόδου είναι ανενεργή.\n" + +#: command.c:4435 +#, c-format +msgid "Pager is used for long output.\n" +msgstr "Χρησιμοποιείται Pager για μεγάλη έξοδο.\n" + +#: command.c:4437 +#, c-format +msgid "Pager is always used.\n" +msgstr "Χρησιμοποιείται Pager συνέχεια.\n" + +#: command.c:4439 +#, c-format +msgid "Pager usage is off.\n" +msgstr "Η χρήση Pager είναι ανενεργή.\n" + +#: command.c:4445 +#, c-format +msgid "Pager won't be used for less than %d line.\n" +msgid_plural "Pager won't be used for less than %d lines.\n" +msgstr[0] "Ο Pager δεν θα χρησιμοποιηθεί για λιγότερο από %d γραμμή.\n" +msgstr[1] "Ο Pager δεν θα χρησιμοποιηθεί για λιγότερες από %d γραμμές.\n" + +#: command.c:4455 command.c:4465 +#, c-format +msgid "Record separator is zero byte.\n" +msgstr "Διαχωριστής εγγραφών είναι το μηδενικό byte\n" + +#: command.c:4457 +#, c-format +msgid "Record separator is .\n" +msgstr "Διαχωριστής εγγραφών είναι ο .\n" + +#: command.c:4459 +#, c-format +msgid "Record separator is \"%s\".\n" +msgstr "Διαχωριστής εγγραφών είναι ο/η “%s”.\n" + +#: command.c:4472 +#, c-format +msgid "Table attributes are \"%s\".\n" +msgstr "Τα χαρακτηριστικά του πίνακα είναι “%s”.\n" + +#: command.c:4475 +#, c-format +msgid "Table attributes unset.\n" +msgstr "Χαρακτηριστικά πίνακα μη ορισμένα.\n" + +#: command.c:4482 +#, c-format +msgid "Title is \"%s\".\n" +msgstr "Ο τίτλος είναι “%s”.\n" + +#: command.c:4484 +#, c-format +msgid "Title is unset.\n" +msgstr "Ο τίτλος δεν είναι ορισμένος.\n" + +#: command.c:4491 +#, c-format +msgid "Tuples only is on.\n" +msgstr "Ενεργή όψη μόνο πλειάδων.\n" + +#: command.c:4493 +#, c-format +msgid "Tuples only is off.\n" +msgstr "Ανενεργή όψη μόνο πλειάδων.\n" + +#: command.c:4499 +#, c-format +msgid "Unicode border line style is \"%s\".\n" +msgstr "Το στυλ περιγράμματος γραμμής Unicode είναι \"%s\".\n" + +#: command.c:4505 +#, c-format +msgid "Unicode column line style is \"%s\".\n" +msgstr "Το στυλ περιγράμματος στήλης Unicode είναι “%s”.\n" + +#: command.c:4511 +#, c-format +msgid "Unicode header line style is \"%s\".\n" +msgstr "Το στυλ περιγράμματος γραμμής κεφαλίδας Unicode είναι “%s”.\n" + +#: command.c:4744 +#, c-format +msgid "\\!: failed" +msgstr "\\!: απέτυχε" + +#: command.c:4769 common.c:648 +#, c-format +msgid "\\watch cannot be used with an empty query" +msgstr "\\watch δεν μπορεί να χρησιμοποιηθεί με κενή ερώτηση" + +#: command.c:4810 +#, c-format +msgid "%s\t%s (every %gs)\n" +msgstr "%s\t%s (κάθε %gs)\n" + +#: command.c:4813 +#, c-format +msgid "%s (every %gs)\n" +msgstr "" +"%s (κάθε %gs)\n" +"\n" + +#: command.c:4867 command.c:4874 common.c:548 common.c:555 common.c:1227 +#, c-format +msgid "" +"********* QUERY **********\n" +"%s\n" +"**************************\n" +"\n" +msgstr "" +"********* ΕΡΩΤΗΣΗ **********\n" +"%s\n" +"**************************\n" +"\n" + +#: command.c:5066 +#, c-format +msgid "\"%s.%s\" is not a view" +msgstr "“%s.%s” δεν είναι μία όψη" + +#: command.c:5082 +#, c-format +msgid "could not parse reloptions array" +msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας reloptions" + +#: common.c:159 +#, c-format +msgid "cannot escape without active connection" +msgstr "δεν είναι δυνατή η διαφυγή χωρίς ενεργή σύνδεση" + +#: common.c:200 +#, c-format +msgid "shell command argument contains a newline or carriage return: \"%s\"" +msgstr "" +"παράμετρος της εντολής κελύφους περιέχει μια νέα γραμμή ή μια επιστροφή " +"μεταφοράς: \"%s\"" + +#: common.c:304 +#, c-format +msgid "connection to server was lost" +msgstr "χάθηκε η σύνδεση στον διακομιστή" + +#: common.c:308 +#, c-format +msgid "The connection to the server was lost. Attempting reset: " +msgstr "Χάθηκε η σύνδεση στον διακομιστή. Προσπάθεια επαναφοράς: " + +#: common.c:313 +#, c-format +msgid "Failed.\n" +msgstr "Απέτυχε.\n" + +#: common.c:326 +#, c-format +msgid "Succeeded.\n" +msgstr "Πέτυχε.\n" + +#: common.c:378 common.c:945 common.c:1162 +#, c-format +msgid "unexpected PQresultStatus: %d" +msgstr "μη αναμενόμενο PQresultStatus: %d" + +#: common.c:487 +#, c-format +msgid "Time: %.3f ms\n" +msgstr "Χρόνος: %.3f ms\n" + +#: common.c:502 +#, c-format +msgid "Time: %.3f ms (%02d:%06.3f)\n" +msgstr "Χρόνος: %.3f ms (%02d:%06.3f)\n" + +#: common.c:511 +#, c-format +msgid "Time: %.3f ms (%02d:%02d:%06.3f)\n" +msgstr "Χρόνος: %.3f ms (%02d:%02d:%06.3f)\n" + +#: common.c:518 +#, c-format +msgid "Time: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" +msgstr "Χρόνος: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" + +#: common.c:542 common.c:600 common.c:1198 +#, c-format +msgid "You are currently not connected to a database." +msgstr "Αυτή τη στιγμή δεν είστε συνδεδεμένοι σε μία βάση δεδομένων." + +#: common.c:655 +#, c-format +msgid "\\watch cannot be used with COPY" +msgstr "\\watch δεν μπορεί να χρησιμοποιηθεί μαζί με COPY" + +#: common.c:660 +#, c-format +msgid "unexpected result status for \\watch" +msgstr "μη αναμενόμενη κατάσταση αποτελέσματος για \\watch" + +#: common.c:690 +#, c-format +msgid "" +"Asynchronous notification \"%s\" with payload \"%s\" received from server " +"process with PID %d.\n" +msgstr "" +"Ελήφθει ασύγχρονη ειδοποίηση \"%s\" με ωφέλιμο φορτίο \"%s\" από τη " +"διαδικασία διακομιστή με %d PID.\n" + +#: common.c:693 +#, c-format +msgid "" +"Asynchronous notification \"%s\" received from server process with PID %d.\n" +msgstr "" +"Ελήφθει ασύγχρονη ειδοποίηση “%s” από τη διαδικασία διακομιστή με %d PID.\n" + +#: common.c:726 common.c:743 +#, c-format +msgid "could not print result table: %m" +msgstr "δεν μπόρεσε να εκτυπώσει τον πίνακα αποτελέσματος: %m" + +#: common.c:764 +#, c-format +msgid "no rows returned for \\gset" +msgstr "δεν επιστράφηκαν σειρές για \\gset" + +#: common.c:769 +#, c-format +msgid "more than one row returned for \\gset" +msgstr "περισσότερες από μία γραμμές επιστράφηκαν για \\gset" + +#: common.c:787 +#, c-format +msgid "attempt to \\gset into specially treated variable \"%s\" ignored" +msgstr "" +"αγνοείται η προσπάθεια να τεθεί \\gset στην ειδικά διαμορφωμένη μεταβλητή " +"“%s”" + +#: common.c:1207 +#, c-format +msgid "" +"***(Single step mode: verify " +"command)*******************************************\n" +"%s\n" +"***(press return to proceed or enter x and return to " +"cancel)********************\n" +msgstr "" +"***(Λειτουργία μονού βήματος: επιβεβαιώστε την " +"εντολή)*******************************************\n" +"%s\n" +"***(πατήστε return για να συνεχίσετε ή εισάγετε x και return για να " +"ακυρώσετε)********************\n" + +#: common.c:1262 +#, c-format +msgid "" +"The server (version %s) does not support savepoints for ON_ERROR_ROLLBACK." +msgstr "" +"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει savepoints για ON_ERROR_ROLLBACK." + +#: common.c:1325 +#, c-format +msgid "STATEMENT: %s" +msgstr "ΔΗΛΩΣΗ: %s" + +#: common.c:1369 +#, c-format +msgid "unexpected transaction status (%d)" +msgstr "μη αναμενόμενη κατάσταση συναλλαγής: %d" + +#: common.c:1510 describe.c:2001 +msgid "Column" +msgstr "Στήλη" + +#: common.c:1511 describe.c:177 describe.c:393 describe.c:411 describe.c:456 +#: describe.c:473 describe.c:962 describe.c:1126 describe.c:1711 +#: describe.c:1735 describe.c:2002 describe.c:3733 describe.c:3943 +#: describe.c:4176 describe.c:5382 +msgid "Type" +msgstr "Τύπος" + +#: common.c:1560 +#, c-format +msgid "The command has no result, or the result has no columns.\n" +msgstr "Η εντολή δεν έχει αποτέλεσμα, η το αποτέλεσμα δεν έχει στήλες.\n" + +#: copy.c:98 +#, c-format +msgid "\\copy: arguments required" +msgstr "\\copy: παράμετροι επιβάλλονται" + +#: copy.c:253 +#, c-format +msgid "\\copy: parse error at \"%s\"" +msgstr "\\copy: σφάλμα ανάλυσης σε “%s”" + +#: copy.c:255 +#, c-format +msgid "\\copy: parse error at end of line" +msgstr "\\copy: σφάλμα ανάλυσης στο τέλος γραμμής" + +#: copy.c:328 +#, c-format +msgid "could not execute command \"%s\": %m" +msgstr "δεν ήταν δυνατή η εκτέλεση της εντολής “%s”: %m" + +#: copy.c:344 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "δεν ήταν δυνατή η εκτέλεση stat στο αρχείο “%s”: %m" + +#: copy.c:348 +#, c-format +msgid "%s: cannot copy from/to a directory" +msgstr "%s: δεν μπορεί να αντιγράψει από/προς κατάλογο" + +#: copy.c:385 +#, c-format +msgid "could not close pipe to external command: %m" +msgstr "δεν ήταν δυνατό το κλείσιμο της διοχέτευσης σε εξωτερική εντολή: %m" + +#: copy.c:390 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: copy.c:453 copy.c:463 +#, c-format +msgid "could not write COPY data: %m" +msgstr "δεν ήταν δυνατή η εγγραφή δεδομένων COPY: %m" + +#: copy.c:469 +#, c-format +msgid "COPY data transfer failed: %s" +msgstr "Μεταφορά δεδομένων μέσω COPY απέτυχε: %s" + +#: copy.c:530 +msgid "canceled by user" +msgstr "ακυρώθηκε από τον χρήστη" + +#: copy.c:541 +msgid "" +"Enter data to be copied followed by a newline.\n" +"End with a backslash and a period on a line by itself, or an EOF signal." +msgstr "" +"Εισαγάγετε τα δεδομένα που θα αντιγραφούν ακολουθούμενα από νέα γραμμή.\n" +"Τερματίστε με μια ανάστροφη κάθετο και μια τελεία σε μια ξεχωριστή γραμμή, ή " +"ένα σήμα EOF." + +#: copy.c:669 +msgid "aborted because of read failure" +msgstr "ματαιώθηκε λόγω σφάλματος κατά την ανάγνωση" + +#: copy.c:703 +msgid "trying to exit copy mode" +msgstr "προσπαθεί να τερματίσει τη λειτουργία αντιγραφής" + +#: crosstabview.c:123 +#, c-format +msgid "\\crosstabview: statement did not return a result set" +msgstr "\\crosstabview: η δήλωση δεν επέστρεψε σετ αποτελεσμάτων" + +#: crosstabview.c:129 +#, c-format +msgid "\\crosstabview: query must return at least three columns" +msgstr "" +"\\crosstabview: η ερώτηση πρέπει να επιστρέψει τουλάχιστον τρεις στήλες" + +#: crosstabview.c:156 +#, c-format +msgid "" +"\\crosstabview: vertical and horizontal headers must be different columns" +msgstr "" +"\\crosstabview: κάθετες και οριζόντιες κεφαλίδες πρέπει να βρίσκονται σε " +"διαφορετικές στήλες" + +#: crosstabview.c:172 +#, c-format +msgid "" +"\\crosstabview: data column must be specified when query returns more than " +"three columns" +msgstr "" +"\\crosstabview: επιβάλλεται να έχει οριστεί στήλη δεδομένων όταν η ερώτηση " +"επιστρέφει περισσότερες από τρεις στήλες" + +#: crosstabview.c:228 +#, c-format +msgid "\\crosstabview: maximum number of columns (%d) exceeded" +msgstr "\\crosstabview: υπερβλήθηκε ο μέγιστος αριθμός στηλών (%d)" + +#: crosstabview.c:397 +#, c-format +msgid "" +"\\crosstabview: query result contains multiple data values for row \"%s\", " +"column \"%s\"" +msgstr "" +"\\crosstabview: το αποτέλεσμα της ερώτησης περιλαμβάνει πολλαπλές τιμές " +"δεδομένων για την σειρά “%s”, στήλη “%s”" + +#: crosstabview.c:645 +#, c-format +msgid "\\crosstabview: column number %d is out of range 1..%d" +msgstr "\\crosstabview: αριθμός στήλης %d βρίσκεται εκτός διαστήματος 1..%d" + +#: crosstabview.c:670 +#, c-format +msgid "\\crosstabview: ambiguous column name: \"%s\"" +msgstr "\\crosstabview: αμφίσημο όνομα στήλης: “%s”" + +#: crosstabview.c:678 +#, c-format +msgid "\\crosstabview: column name not found: \"%s\"" +msgstr "\\crosstabview: όνομα στήλης δεν βρέθηκε: “%s”" + +#: describe.c:75 describe.c:373 describe.c:678 describe.c:810 describe.c:954 +#: describe.c:1115 describe.c:1187 describe.c:3722 describe.c:3930 +#: describe.c:4174 describe.c:4265 describe.c:4532 describe.c:4692 +#: describe.c:4933 describe.c:5008 describe.c:5019 describe.c:5081 +#: describe.c:5506 describe.c:5589 +msgid "Schema" +msgstr "Σχήμα" + +#: describe.c:76 describe.c:174 describe.c:242 describe.c:250 describe.c:374 +#: describe.c:679 describe.c:811 describe.c:872 describe.c:955 describe.c:1188 +#: describe.c:3723 describe.c:3931 describe.c:4097 describe.c:4175 +#: describe.c:4266 describe.c:4345 describe.c:4533 describe.c:4617 +#: describe.c:4693 describe.c:4934 describe.c:5009 describe.c:5020 +#: describe.c:5082 describe.c:5279 describe.c:5363 describe.c:5587 +#: describe.c:5759 describe.c:5999 +msgid "Name" +msgstr "Όνομα" + +#: describe.c:77 describe.c:386 describe.c:404 describe.c:450 describe.c:467 +msgid "Result data type" +msgstr "Τύπος δεδομένων αποτελεσμάτων" + +#: describe.c:85 describe.c:98 describe.c:102 describe.c:387 describe.c:405 +#: describe.c:451 describe.c:468 +msgid "Argument data types" +msgstr "Τύπος δεδομένων παραμέτρων" + +#: describe.c:110 describe.c:117 describe.c:185 describe.c:273 describe.c:513 +#: describe.c:727 describe.c:826 describe.c:897 describe.c:1190 describe.c:2020 +#: describe.c:3510 describe.c:3783 describe.c:3977 describe.c:4128 +#: describe.c:4202 describe.c:4275 describe.c:4358 describe.c:4441 +#: describe.c:4560 describe.c:4626 describe.c:4694 describe.c:4835 +#: describe.c:4877 describe.c:4950 describe.c:5012 describe.c:5021 +#: describe.c:5083 describe.c:5305 describe.c:5385 describe.c:5520 +#: describe.c:5590 large_obj.c:290 large_obj.c:300 +msgid "Description" +msgstr "Περιγραφή" + +#: describe.c:135 +msgid "List of aggregate functions" +msgstr "Λίστα των συγκεντρωτικών συναρτήσεων" + +#: describe.c:160 +#, c-format +msgid "The server (version %s) does not support access methods." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει μεθόδους πρόσβασης." + +#: describe.c:175 +msgid "Index" +msgstr "Ευρετήριο" + +#: describe.c:176 describe.c:3741 describe.c:3956 describe.c:5507 +msgid "Table" +msgstr "Πίνακας" + +#: describe.c:184 describe.c:5284 +msgid "Handler" +msgstr "Διαχειριστής" + +#: describe.c:203 +msgid "List of access methods" +msgstr "Λίστα μεθόδων πρόσβασης" + +#: describe.c:229 +#, c-format +msgid "The server (version %s) does not support tablespaces." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει tablespaces." + +#: describe.c:243 describe.c:251 describe.c:501 describe.c:717 describe.c:873 +#: describe.c:1114 describe.c:3734 describe.c:3932 describe.c:4101 +#: describe.c:4347 describe.c:4618 describe.c:5280 describe.c:5364 +#: describe.c:5760 describe.c:5897 describe.c:6000 describe.c:6115 +#: describe.c:6194 large_obj.c:289 +msgid "Owner" +msgstr "Ιδιοκτήτης" + +#: describe.c:244 describe.c:252 +msgid "Location" +msgstr "Τοποθεσία" + +#: describe.c:263 describe.c:3327 +msgid "Options" +msgstr "Επιλογές" + +#: describe.c:268 describe.c:690 describe.c:889 describe.c:3775 describe.c:3779 +msgid "Size" +msgstr "Μέγεθος" + +#: describe.c:290 +msgid "List of tablespaces" +msgstr "Λίστα tablespaces" + +#: describe.c:333 +#, c-format +msgid "\\df only takes [anptwS+] as options" +msgstr "\\df λαμβάνει μόνο [anptwS+] ως επιλογές" + +#: describe.c:341 describe.c:352 +#, c-format +msgid "\\df does not take a \"%c\" option with server version %s" +msgstr "\\df δεν λαμβάνει την επιλογή “%c” στην έκδοση διακομιστή %s" + +#. translator: "agg" is short for "aggregate" +#: describe.c:389 describe.c:407 describe.c:453 describe.c:470 +msgid "agg" +msgstr "agg" + +#: describe.c:390 describe.c:408 +msgid "window" +msgstr "window" + +#: describe.c:391 +msgid "proc" +msgstr "proc" + +#: describe.c:392 describe.c:410 describe.c:455 describe.c:472 +msgid "func" +msgstr "func" + +#: describe.c:409 describe.c:454 describe.c:471 describe.c:1324 +msgid "trigger" +msgstr "trigger" + +#: describe.c:483 +msgid "immutable" +msgstr "immutable" + +#: describe.c:484 +msgid "stable" +msgstr "stable" + +#: describe.c:485 +msgid "volatile" +msgstr "volatile" + +#: describe.c:486 +msgid "Volatility" +msgstr "Προσωρινή" + +#: describe.c:494 +msgid "restricted" +msgstr "περιορισμένη" + +#: describe.c:495 +msgid "safe" +msgstr "ασφαλής" + +#: describe.c:496 +msgid "unsafe" +msgstr "ανασφαλής" + +#: describe.c:497 +msgid "Parallel" +msgstr "Παράλληλη" + +#: describe.c:502 +msgid "definer" +msgstr "definer" + +#: describe.c:503 +msgid "invoker" +msgstr "invoker" + +#: describe.c:504 +msgid "Security" +msgstr "Ασφάλεια" + +#: describe.c:511 +msgid "Language" +msgstr "Γλώσσα" + +#: describe.c:512 +msgid "Source code" +msgstr "Πηγαίος κώδικας" + +#: describe.c:641 +msgid "List of functions" +msgstr "Λίστα συναρτήσεων" + +#: describe.c:689 +msgid "Internal name" +msgstr "Εσωτερική ονομασία" + +#: describe.c:711 +msgid "Elements" +msgstr "Στοιχεία" + +#: describe.c:768 +msgid "List of data types" +msgstr "Λίστα τύπων δεδομένων" + +#: describe.c:812 +msgid "Left arg type" +msgstr "Τύπος αριστερής παραμέτρου" + +#: describe.c:813 +msgid "Right arg type" +msgstr "Τύπος δεξιάς παραμέτρου" + +#: describe.c:814 +msgid "Result type" +msgstr "Τύπος αποτελέσματος" + +#: describe.c:819 describe.c:4353 describe.c:4418 describe.c:4424 +#: describe.c:4834 describe.c:6366 describe.c:6370 +msgid "Function" +msgstr "Συνάρτηση" + +#: describe.c:844 +msgid "List of operators" +msgstr "Λίστα operators" + +#: describe.c:874 +msgid "Encoding" +msgstr "Κωδικοποίηση" + +#: describe.c:879 describe.c:4534 +msgid "Collate" +msgstr "Σύνθεση" + +#: describe.c:880 describe.c:4535 +msgid "Ctype" +msgstr "Ctype" + +#: describe.c:893 +msgid "Tablespace" +msgstr "Tablespace" + +#: describe.c:915 +msgid "List of databases" +msgstr "Λίστα βάσεων δεδομένων" + +#: describe.c:956 describe.c:1117 describe.c:3724 +msgid "table" +msgstr "πίνακας" + +#: describe.c:957 describe.c:3725 +msgid "view" +msgstr "όψη" + +#: describe.c:958 describe.c:3726 +msgid "materialized view" +msgstr "υλοποιημένη όψη" + +#: describe.c:959 describe.c:1119 describe.c:3728 +msgid "sequence" +msgstr "ακολουθία" + +#: describe.c:960 describe.c:3730 +msgid "foreign table" +msgstr "ξένος πίνακας" + +#: describe.c:961 describe.c:3731 describe.c:3941 +msgid "partitioned table" +msgstr "κατατμημένος πίνακας" + +#: describe.c:973 +msgid "Column privileges" +msgstr "Προνόμια στήλης" + +#: describe.c:1004 describe.c:1038 +msgid "Policies" +msgstr "Πολιτικές" + +#: describe.c:1070 describe.c:6056 describe.c:6060 +msgid "Access privileges" +msgstr "Προνόμια πρόσβασης" + +#: describe.c:1101 +#, c-format +msgid "The server (version %s) does not support altering default privileges." +msgstr "" +"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την τροποποίηση προεπιλεγμένων " +"δικαιωμάτων." + +#: describe.c:1121 +msgid "function" +msgstr "συνάρτηση" + +#: describe.c:1123 +msgid "type" +msgstr "τύπος" + +#: describe.c:1125 +msgid "schema" +msgstr "σχήμα" + +#: describe.c:1149 +msgid "Default access privileges" +msgstr "Προεπιλεγμένες επιλογές δικαιωμάτων" + +#: describe.c:1189 +msgid "Object" +msgstr "Ατνικείμενο" + +#: describe.c:1203 +msgid "table constraint" +msgstr "περιορισμός πίνακα" + +#: describe.c:1225 +msgid "domain constraint" +msgstr "περιορισμός πεδίου" + +#: describe.c:1253 +msgid "operator class" +msgstr "κλάση χειριστή" + +#: describe.c:1282 +msgid "operator family" +msgstr "οικογένεια χειριστή" + +#: describe.c:1304 +msgid "rule" +msgstr "περιγραφή" + +#: describe.c:1346 +msgid "Object descriptions" +msgstr "Περιγραφές αντικειμένου" + +#: describe.c:1402 describe.c:3847 +#, c-format +msgid "Did not find any relation named \"%s\"." +msgstr "Δεν βρέθηκε καμία σχέση με όνομα “%s”." + +#: describe.c:1405 describe.c:3850 +#, c-format +msgid "Did not find any relations." +msgstr "Δεν βρέθηκαν καθόλου σχέσεις." + +#: describe.c:1660 +#, c-format +msgid "Did not find any relation with OID %s." +msgstr "Δεν βρέθηκαν καθόλου σχέσεις με OID %s." + +#: describe.c:1712 describe.c:1736 +msgid "Start" +msgstr "Εκκίνηση" + +#: describe.c:1713 describe.c:1737 +msgid "Minimum" +msgstr "Ελάχιστο" + +#: describe.c:1714 describe.c:1738 +msgid "Maximum" +msgstr "Μέγιστο" + +#: describe.c:1715 describe.c:1739 +msgid "Increment" +msgstr "Επαύξηση" + +#: describe.c:1716 describe.c:1740 describe.c:1871 describe.c:4269 +#: describe.c:4435 describe.c:4549 describe.c:4554 describe.c:6103 +msgid "yes" +msgstr "ναι" + +#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4269 +#: describe.c:4432 describe.c:4549 describe.c:6104 +msgid "no" +msgstr "όχι" + +#: describe.c:1718 describe.c:1742 +msgid "Cycles?" +msgstr "Κύκλοι;" + +#: describe.c:1719 describe.c:1743 +msgid "Cache" +msgstr "Προσωρινή μνήμη" + +#: describe.c:1786 +#, c-format +msgid "Owned by: %s" +msgstr "Ανήκει σε: %s" + +#: describe.c:1790 +#, c-format +msgid "Sequence for identity column: %s" +msgstr "Ακολουθία για τη στήλη ταυτότητας: %s" + +#: describe.c:1797 +#, c-format +msgid "Sequence \"%s.%s\"" +msgstr "Ακολουθία “%s.%s”" + +#: describe.c:1933 +#, c-format +msgid "Unlogged table \"%s.%s\"" +msgstr "Ακαταχώρητος πίνακας “%s.%s”" + +#: describe.c:1936 +#, c-format +msgid "Table \"%s.%s\"" +msgstr "Πίνακας “%s.%s”" + +#: describe.c:1940 +#, c-format +msgid "View \"%s.%s\"" +msgstr "Όψη “%s.%s”" + +#: describe.c:1945 +#, c-format +msgid "Unlogged materialized view \"%s.%s\"" +msgstr "Ακαταχώρητη υλοποιημένη όψη “%s.%s”" + +#: describe.c:1948 +#, c-format +msgid "Materialized view \"%s.%s\"" +msgstr "Υλοποιημένη όψη “%s.%s”" + +#: describe.c:1953 +#, c-format +msgid "Unlogged index \"%s.%s\"" +msgstr "Ακαταχώρητο ευρετήριο “%s.%s”" + +#: describe.c:1956 +#, c-format +msgid "Index \"%s.%s\"" +msgstr "Ευρετήριο “%s.%s”" + +#: describe.c:1961 +#, c-format +msgid "Unlogged partitioned index \"%s.%s\"" +msgstr "Ακαταχώρητο κατατετμημένο ευρετήριο “%s.%s”" + +#: describe.c:1964 +#, c-format +msgid "Partitioned index \"%s.%s\"" +msgstr "Κατατετμημένο ευρετήριο “%s.%s”" + +#: describe.c:1969 +#, c-format +msgid "Special relation \"%s.%s\"" +msgstr "Ειδική σχέση “%s.%s”" + +#: describe.c:1973 +#, c-format +msgid "TOAST table \"%s.%s\"" +msgstr "TOAST πίνακας “%s.%s”" + +#: describe.c:1977 +#, c-format +msgid "Composite type \"%s.%s\"" +msgstr "Συνθετικός τύπος “%s.%s”" + +#: describe.c:1981 +#, c-format +msgid "Foreign table \"%s.%s\"" +msgstr "Ξενικός πίνακας “%s.%s”" + +#: describe.c:1986 +#, c-format +msgid "Unlogged partitioned table \"%s.%s\"" +msgstr "Ακαταχώρητος κατατετμημένος πίνακας “%s.%s”" + +#: describe.c:1989 +#, c-format +msgid "Partitioned table \"%s.%s\"" +msgstr "Κατατετμημένος πίνακας “%s.%s”" + +#: describe.c:2005 describe.c:4182 +msgid "Collation" +msgstr "Σύνθεση" + +#: describe.c:2006 describe.c:4189 +msgid "Nullable" +msgstr "Nullable" + +#: describe.c:2007 describe.c:4190 +msgid "Default" +msgstr "Προκαθορισμένο" + +#: describe.c:2010 +msgid "Key?" +msgstr "Κλειδί;" + +#: describe.c:2012 +msgid "Definition" +msgstr "Ορισμός" + +#: describe.c:2014 describe.c:5300 describe.c:5384 describe.c:5455 +#: describe.c:5519 +msgid "FDW options" +msgstr "Επιλογές FDW" + +#: describe.c:2016 +msgid "Storage" +msgstr "Αποθήκευση" + +#: describe.c:2018 +msgid "Stats target" +msgstr "Στόχος στατιστικών" + +#: describe.c:2135 +#, c-format +msgid "Partition of: %s %s" +msgstr "Κατάτμηση του: %s %s" + +#: describe.c:2147 +msgid "No partition constraint" +msgstr "Κανένας περιορισμός κατάτμησης" + +#: describe.c:2149 +#, c-format +msgid "Partition constraint: %s" +msgstr "Περιορισμός κατάτμησης: %s" + +#: describe.c:2173 +#, c-format +msgid "Partition key: %s" +msgstr "Κλειδί κατάτμησης: %s" + +#: describe.c:2199 +#, c-format +msgid "Owning table: \"%s.%s\"" +msgstr "Ιδιοκτήτης πίνακα “%s.%s”" + +#: describe.c:2270 +msgid "primary key, " +msgstr "Κύριο κλειδί, " + +#: describe.c:2272 +msgid "unique, " +msgstr "μοναδικό, " + +#: describe.c:2278 +#, c-format +msgid "for table \"%s.%s\"" +msgstr "για πίνακα “%s.%s”" + +#: describe.c:2282 +#, c-format +msgid ", predicate (%s)" +msgstr ", πρόβλεψη (%s)" + +#: describe.c:2285 +msgid ", clustered" +msgstr ", συσταδοποιημένο" + +#: describe.c:2288 +msgid ", invalid" +msgstr ", άκυρο" + +#: describe.c:2291 +msgid ", deferrable" +msgstr ", αναβαλλόμενο" + +#: describe.c:2294 +msgid ", initially deferred" +msgstr ", αρχικά αναβαλλόμενο" + +#: describe.c:2297 +msgid ", replica identity" +msgstr ", ταυτότητα πανομοιόματος" + +#: describe.c:2364 +msgid "Indexes:" +msgstr "Ευρετήρια:" + +#: describe.c:2448 +msgid "Check constraints:" +msgstr "Περιορισμοί ελέγχου:" + +#: describe.c:2516 +msgid "Foreign-key constraints:" +msgstr "Περιορισμοί ξενικών κλειδιών:" + +#: describe.c:2579 +msgid "Referenced by:" +msgstr "Αναφέρεται από:" + +#: describe.c:2629 +msgid "Policies:" +msgstr "Πολιτικές:" + +#: describe.c:2632 +msgid "Policies (forced row security enabled):" +msgstr "Πολιτικές (ενεργοποιημένη επιβολή ασφάλειας γραμμών):" + +#: describe.c:2635 +msgid "Policies (row security enabled): (none)" +msgstr "Πολιτικές (ενεργοποιημένη ασφάλεια γραμμών): (καμία)" + +#: describe.c:2638 +msgid "Policies (forced row security enabled): (none)" +msgstr "Πολιτικές (ενεργοποιημένη επιβολή ασφάλειας γραμμών): (καμία)" + +#: describe.c:2641 +msgid "Policies (row security disabled):" +msgstr "Πολιτικές (απενεργοποιημένη ασφάλεια γραμμών):" + +#: describe.c:2709 +msgid "Statistics objects:" +msgstr "Αντικείμενα στατιστικών:" + +#: describe.c:2823 describe.c:2927 +msgid "Rules:" +msgstr "Κανόνες" + +#: describe.c:2826 +msgid "Disabled rules:" +msgstr "Απενεργοποιημένοι κανόνες:" + +#: describe.c:2829 +msgid "Rules firing always:" +msgstr "Κανόνες πάντα σε χρήση:" + +#: describe.c:2832 +msgid "Rules firing on replica only:" +msgstr "Κανόνες σε χρήση μόνο στο ομοίωμα:" + +#: describe.c:2872 +msgid "Publications:" +msgstr "Δημοσιεύσεις:" + +#: describe.c:2910 +msgid "View definition:" +msgstr "Ορισμός όψης:" + +#: describe.c:3057 +msgid "Triggers:" +msgstr "Triggers:" + +#: describe.c:3061 +msgid "Disabled user triggers:" +msgstr "Απενεργοποιημένες triggers χρήστη:" + +#: describe.c:3063 +msgid "Disabled triggers:" +msgstr "Απενεργοποιημένες triggers:" + +#: describe.c:3066 +msgid "Disabled internal triggers:" +msgstr "Απενεργοποιημένες εσωτερικές triggers:" + +#: describe.c:3069 +msgid "Triggers firing always:" +msgstr "Triggers πάντα σε χρήση:" + +#: describe.c:3072 +msgid "Triggers firing on replica only:" +msgstr "Triggers σε χρήση μόνο στο ομοίωμα:" + +#: describe.c:3144 +#, c-format +msgid "Server: %s" +msgstr "Διακομιστής: %s" + +#: describe.c:3152 +#, c-format +msgid "FDW options: (%s)" +msgstr "FDW επιλογές: (%s)" + +#: describe.c:3173 +msgid "Inherits" +msgstr "Κληρονομεί" + +#: describe.c:3233 +#, c-format +msgid "Number of partitions: %d" +msgstr "Αριθμός κατατμήσεων: %d" + +#: describe.c:3242 +#, c-format +msgid "Number of partitions: %d (Use \\d+ to list them.)" +msgstr "" +"Αριθμός κατατμήσεων: %d (Χρησιμοποιείστε \\d+ για να τους απαριθμήσετε.)" + +#: describe.c:3244 +#, c-format +msgid "Number of child tables: %d (Use \\d+ to list them.)" +msgstr "" +"Αριθμός απογονικών πινάκων: %d (Χρησιμοποιείστε \\d+ για να τους " +"απαριθμήσετε.)" + +#: describe.c:3251 +msgid "Child tables" +msgstr "Απογονικοί πίνακες" + +#: describe.c:3251 +msgid "Partitions" +msgstr "Κατατμήσεις" + +#: describe.c:3280 +#, c-format +msgid "Typed table of type: %s" +msgstr "Τυποποιημένος πίνακας τύπου: %s" + +#: describe.c:3296 +msgid "Replica Identity" +msgstr "Ταυτότητα Ομοιόματος" + +#: describe.c:3309 +msgid "Has OIDs: yes" +msgstr "Έχει OIDs: ναι" + +#: describe.c:3318 +#, c-format +msgid "Access method: %s" +msgstr "Μέθοδος πρόσβασης: %s" + +#: describe.c:3398 +#, c-format +msgid "Tablespace: \"%s\"" +msgstr "Χώρος πινάκα: “%s”" + +#. translator: before this string there's an index description like +#. '"foo_pkey" PRIMARY KEY, btree (a)' +#: describe.c:3410 +#, c-format +msgid ", tablespace \"%s\"" +msgstr ", χώρος πίνακα “%s”" + +#: describe.c:3503 +msgid "List of roles" +msgstr "Λίστα ρόλων" + +#: describe.c:3505 +msgid "Role name" +msgstr "Όνομα ρόλου" + +#: describe.c:3506 +msgid "Attributes" +msgstr "Χαρακτηριστικά" + +#: describe.c:3507 +msgid "Member of" +msgstr "Μέλος του" + +#: describe.c:3518 +msgid "Superuser" +msgstr "Υπερχρήστης" + +#: describe.c:3521 +msgid "No inheritance" +msgstr "Καμία κληρονιμιά" + +#: describe.c:3524 +msgid "Create role" +msgstr "Δημιουργήστε ρόλο" + +#: describe.c:3527 +msgid "Create DB" +msgstr "Δημιουργήστε βάση δεδομένων" + +#: describe.c:3530 +msgid "Cannot login" +msgstr "Δεν δύναται σύνδεση" + +#: describe.c:3534 +msgid "Replication" +msgstr "Αντιγραφή" + +#: describe.c:3538 +msgid "Bypass RLS" +msgstr "Παράκαμψη RLS" + +#: describe.c:3547 +msgid "No connections" +msgstr "Καθόλου συνδέσεις" + +#: describe.c:3549 +#, c-format +msgid "%d connection" +msgid_plural "%d connections" +msgstr[0] "%d σύνδεση" +msgstr[1] "%d συνδέσεις" + +#: describe.c:3559 +msgid "Password valid until " +msgstr "Κωδικός πρόσβασης ενεργός μέχρι " + +#: describe.c:3609 +#, c-format +msgid "The server (version %s) does not support per-database role settings." +msgstr "" +"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει ρυθμίσεις ρόλων ανά βάση δεδομένων." + +#: describe.c:3622 +msgid "Role" +msgstr "Ρόλος" + +#: describe.c:3623 +msgid "Database" +msgstr "Βάση δεδομένων" + +#: describe.c:3624 +msgid "Settings" +msgstr "Ρυθμίσεις" + +#: describe.c:3645 +#, c-format +msgid "Did not find any settings for role \"%s\" and database \"%s\"." +msgstr "" +"Δεν βρέθηκαν ρυθμίσεις για το ρόλο \"%s\" και τη βάση δεδομένων \"%s\"." + +#: describe.c:3648 +#, c-format +msgid "Did not find any settings for role \"%s\"." +msgstr "Δεν βρέθηκαν ρυθμίσεις για το ρόλο “%s”." + +#: describe.c:3651 +#, c-format +msgid "Did not find any settings." +msgstr "Δεν βρέθηκαν ρυθμίσεις." + +#: describe.c:3656 +msgid "List of settings" +msgstr "Λίστα ρυθμίσεων" + +#: describe.c:3727 +msgid "index" +msgstr "ευρετήριο" + +#: describe.c:3729 +msgid "special" +msgstr "ειδικό" + +#: describe.c:3732 describe.c:3942 +msgid "partitioned index" +msgstr "κατατετμημένο ευρετήριο" + +#: describe.c:3756 +msgid "permanent" +msgstr "μόνιμο" + +#: describe.c:3757 +msgid "temporary" +msgstr "προσωρινό" + +#: describe.c:3758 +msgid "unlogged" +msgstr "ακαταχώρητο" + +#: describe.c:3759 +msgid "Persistence" +msgstr "Διάρκεια" + +#: describe.c:3855 +msgid "List of relations" +msgstr "Λίστα σχέσεων" + +#: describe.c:3903 +#, c-format +msgid "" +"The server (version %s) does not support declarative table partitioning." +msgstr "" +"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την δηλωτική δημιουργία " +"κατατμήσεων πίνακα." + +#: describe.c:3914 +msgid "List of partitioned indexes" +msgstr "Λίστα κατατμημένων ευρετηρίων" + +#: describe.c:3916 +msgid "List of partitioned tables" +msgstr "Λίστα κατατμημένων πινάκων" + +#: describe.c:3920 +msgid "List of partitioned relations" +msgstr "Λίστα κατατμημένων σχέσεων" + +#: describe.c:3951 +msgid "Parent name" +msgstr "Γονικό όνομα" + +#: describe.c:3964 +msgid "Leaf partition size" +msgstr "Μέγεθος φύλλου κατάτμησης" + +#: describe.c:3967 describe.c:3973 +msgid "Total size" +msgstr "Συνολικό μέγεθος" + +#: describe.c:4105 +msgid "Trusted" +msgstr "Εμπιστευόμενο" + +#: describe.c:4113 +msgid "Internal language" +msgstr "Εσωτερική γλώσσα" + +#: describe.c:4114 +msgid "Call handler" +msgstr "Πρόγραμμα χειρισμού κλήσεων" + +#: describe.c:4115 describe.c:5287 +msgid "Validator" +msgstr "Ελεκτής" + +#: describe.c:4118 +msgid "Inline handler" +msgstr "Ενσωματωμένος χειριστής" + +#: describe.c:4146 +msgid "List of languages" +msgstr "Λίστα γλωσσών" + +#: describe.c:4191 +msgid "Check" +msgstr "Έλεγχος" + +#: describe.c:4233 +msgid "List of domains" +msgstr "Λίστα πεδίων" + +#: describe.c:4267 +msgid "Source" +msgstr "Πηγή" + +#: describe.c:4268 +msgid "Destination" +msgstr "Προορισμός" + +#: describe.c:4270 describe.c:6105 +msgid "Default?" +msgstr "Προεπιλογή;" + +#: describe.c:4307 +msgid "List of conversions" +msgstr "Λίστα μετατροπών" + +#: describe.c:4346 +msgid "Event" +msgstr "Συμβάν" + +#: describe.c:4348 +msgid "enabled" +msgstr "ενεγροποιημένο" + +#: describe.c:4349 +msgid "replica" +msgstr "ομοίωμα" + +#: describe.c:4350 +msgid "always" +msgstr "πάντα" + +#: describe.c:4351 +msgid "disabled" +msgstr "απενεργοποιημένο" + +#: describe.c:4352 describe.c:6001 +msgid "Enabled" +msgstr "Ενεργοποιημένο" + +#: describe.c:4354 +msgid "Tags" +msgstr "Ετικέτες" + +#: describe.c:4373 +msgid "List of event triggers" +msgstr "Λίστα ενεργοποιήσεων συμβάντων" + +#: describe.c:4402 +msgid "Source type" +msgstr "Τύπος πηγής" + +#: describe.c:4403 +msgid "Target type" +msgstr "Τύπος προοριστμού" + +#: describe.c:4434 +msgid "in assignment" +msgstr "σε ανάθεση" + +#: describe.c:4436 +msgid "Implicit?" +msgstr "Έμμεσα;" + +#: describe.c:4491 +msgid "List of casts" +msgstr "Λίστα casts" + +#: describe.c:4519 +#, c-format +msgid "The server (version %s) does not support collations." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει συρραφές." + +#: describe.c:4540 describe.c:4544 +msgid "Provider" +msgstr "Πάροχος" + +#: describe.c:4550 describe.c:4555 +msgid "Deterministic?" +msgstr "Ντετερμινιστικό;" + +#: describe.c:4590 +msgid "List of collations" +msgstr "Λίστα συρραφών" + +#: describe.c:4649 +msgid "List of schemas" +msgstr "Λίστα σχημάτων" + +#: describe.c:4674 describe.c:4921 describe.c:4992 describe.c:5063 +#, c-format +msgid "The server (version %s) does not support full text search." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει αναζήτηση πλήρους κειμένου." + +#: describe.c:4709 +msgid "List of text search parsers" +msgstr "Λίστα αναλυτών αναζήτησης κειμένου" + +#: describe.c:4754 +#, c-format +msgid "Did not find any text search parser named \"%s\"." +msgstr "Δεν βρήκε ανάλυση αναζήτησης κειμένου με το όνομα \"%s\"." + +#: describe.c:4757 +#, c-format +msgid "Did not find any text search parsers." +msgstr "Δεν βρήκε ανάλυση αναζήτησης κειμένου." + +#: describe.c:4832 +msgid "Start parse" +msgstr "Εκκίνηση ανάλυσης" + +#: describe.c:4833 +msgid "Method" +msgstr "Μέθοδος" + +#: describe.c:4837 +msgid "Get next token" +msgstr "Λήψη επόμενου ενδεικτικού" + +#: describe.c:4839 +msgid "End parse" +msgstr "Τέλος ανάλυσης" + +#: describe.c:4841 +msgid "Get headline" +msgstr "Λήψη επικεφαλίδας" + +#: describe.c:4843 +msgid "Get token types" +msgstr "Λήψη τύπων ενδεικτικών" + +#: describe.c:4854 +#, c-format +msgid "Text search parser \"%s.%s\"" +msgstr "Αναλυτής αναζήτης κειμένου “%s.%s”" + +#: describe.c:4857 +#, c-format +msgid "Text search parser \"%s\"" +msgstr "Αναλυτής αναζήτης κειμένου “%s”" + +#: describe.c:4876 +msgid "Token name" +msgstr "Ονομασία ενδεικτικού" + +#: describe.c:4887 +#, c-format +msgid "Token types for parser \"%s.%s\"" +msgstr "Τύποι ενδεικτικών αναλυτή “%s.%s”" + +#: describe.c:4890 +#, c-format +msgid "Token types for parser \"%s\"" +msgstr "Τύποι ενδεικτικών αναλυτή “%s”" + +#: describe.c:4944 +msgid "Template" +msgstr "Πρότυπο" + +#: describe.c:4945 +msgid "Init options" +msgstr "Επιλογές εκκίνησης" + +#: describe.c:4967 +msgid "List of text search dictionaries" +msgstr "Λίστα λεξικών αναζήτησης κειμένου" + +#: describe.c:5010 +msgid "Init" +msgstr "Εκκίνηση" + +#: describe.c:5011 +msgid "Lexize" +msgstr "Lexize" + +#: describe.c:5038 +msgid "List of text search templates" +msgstr "Λίστα προτύπων αναζήτησης κειμένου" + +#: describe.c:5098 +msgid "List of text search configurations" +msgstr "Λίστα ρυθμίσεων αναζήτησης κειμένου" + +#: describe.c:5144 +#, c-format +msgid "Did not find any text search configuration named \"%s\"." +msgstr "Δεν βρέθηκαν ρυθμίσεις αναζήτησης κειμένου με όνομα “%s”." + +#: describe.c:5147 +#, c-format +msgid "Did not find any text search configurations." +msgstr "Δεν βρέθηκαν ρυθμίσεις αναζήτησης κειμένου." + +#: describe.c:5213 +msgid "Token" +msgstr "Ενδεικτικό" + +#: describe.c:5214 +msgid "Dictionaries" +msgstr "Λεξικά" + +#: describe.c:5225 +#, c-format +msgid "Text search configuration \"%s.%s\"" +msgstr "Ρύθμιση αναζήτησης κειμένου “%s.%s”" + +#: describe.c:5228 +#, c-format +msgid "Text search configuration \"%s\"" +msgstr "Ρύθμιση αναζήτησης κειμένου “%s”" + +#: describe.c:5232 +#, c-format +msgid "" +"\n" +"Parser: \"%s.%s\"" +msgstr "" +"\n" +"Αναλυτής: “%s.%s”" + +#: describe.c:5235 +#, c-format +msgid "" +"\n" +"Parser: \"%s\"" +msgstr "" +"\n" +"Αναλυτής: “%s”" + +#: describe.c:5269 +#, c-format +msgid "The server (version %s) does not support foreign-data wrappers." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει περιτύλιξη ξένων δεδομένων." + +#: describe.c:5327 +msgid "List of foreign-data wrappers" +msgstr "Λίστα περιτύλιξης ξένων δεδομένων" + +#: describe.c:5352 +#, c-format +msgid "The server (version %s) does not support foreign servers." +msgstr "Ο διακομιστής (έκδοση %s) δεν ξενικούς διακομιστές." + +#: describe.c:5365 +msgid "Foreign-data wrapper" +msgstr "Περιτύλιξη ξένων δεδομένων" + +#: describe.c:5383 describe.c:5588 +msgid "Version" +msgstr "Έκδοση" + +#: describe.c:5409 +msgid "List of foreign servers" +msgstr "Λίστα ξενικών διακομιστών" + +#: describe.c:5434 +#, c-format +msgid "The server (version %s) does not support user mappings." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει αντιστοιχίσεις χρηστών." + +#: describe.c:5444 describe.c:5508 +msgid "Server" +msgstr "Διακομιστής" + +#: describe.c:5445 +msgid "User name" +msgstr "Όνομα χρήστη" + +#: describe.c:5470 +msgid "List of user mappings" +msgstr "Λίστα αντιστοιχιών χρηστών" + +#: describe.c:5495 +#, c-format +msgid "The server (version %s) does not support foreign tables." +msgstr "Ο διακομιστής (έκδοση %s) δεν ξενικούς πίνακες." + +#: describe.c:5548 +msgid "List of foreign tables" +msgstr "Λίστα ξενικών πινάκων" + +#: describe.c:5573 describe.c:5630 +#, c-format +msgid "The server (version %s) does not support extensions." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει επεκτάσεις." + +#: describe.c:5605 +msgid "List of installed extensions" +msgstr "Λίστα εγκατεστημένων επεκτάσεων" + +#: describe.c:5658 +#, c-format +msgid "Did not find any extension named \"%s\"." +msgstr "Δεν βρέθηκε καμία επέκταση με το όνομα \"%s\"." + +#: describe.c:5661 +#, c-format +msgid "Did not find any extensions." +msgstr "Δεν βρέθηκαν επεκτάσεις." + +#: describe.c:5705 +msgid "Object description" +msgstr "Περιγραφή αντικειμένου" + +#: describe.c:5715 +#, c-format +msgid "Objects in extension \"%s\"" +msgstr "Αντικείμενα στην επέκταση \"%s\"" + +#: describe.c:5744 describe.c:5820 +#, c-format +msgid "The server (version %s) does not support publications." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει δημοσιεύσεις." + +#: describe.c:5761 describe.c:5898 +msgid "All tables" +msgstr "Όλοι οι πίνακες" + +#: describe.c:5762 describe.c:5899 +msgid "Inserts" +msgstr "Εισαγωγές" + +#: describe.c:5763 describe.c:5900 +msgid "Updates" +msgstr "Ενημερώσεις" + +#: describe.c:5764 describe.c:5901 +msgid "Deletes" +msgstr "Διαγραφές" + +#: describe.c:5768 describe.c:5903 +msgid "Truncates" +msgstr "Περικοπές" + +#: describe.c:5772 describe.c:5905 +msgid "Via root" +msgstr "Διαμέσου υπερχρήστη" + +#: describe.c:5789 +msgid "List of publications" +msgstr "Λίστα δημοσιεύσεων" + +#: describe.c:5862 +#, c-format +msgid "Did not find any publication named \"%s\"." +msgstr "Δεν βρέθηκε καμία δημοσίευση με όνομα \"%s\"." + +#: describe.c:5865 +#, c-format +msgid "Did not find any publications." +msgstr "Δεν βρέθηκε καμία δημοσίευση." + +#: describe.c:5894 +#, c-format +msgid "Publication %s" +msgstr "Δημοσίευση %s" + +#: describe.c:5942 +msgid "Tables:" +msgstr "Πίνακες:" + +#: describe.c:5986 +#, c-format +msgid "The server (version %s) does not support subscriptions." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει συνδρομές." + +#: describe.c:6002 +msgid "Publication" +msgstr "Δημοσίευση" + +#: describe.c:6009 +msgid "Synchronous commit" +msgstr "Σύγχρονη δέσμευση" + +#: describe.c:6010 +msgid "Conninfo" +msgstr "Conninfo" + +#: describe.c:6032 +msgid "List of subscriptions" +msgstr "Λίστα συνδρομών" + +#: describe.c:6099 describe.c:6188 describe.c:6274 describe.c:6357 +msgid "AM" +msgstr "ΑΜ" + +#: describe.c:6100 +msgid "Input type" +msgstr "Τύπος εισόδου" + +#: describe.c:6101 +msgid "Storage type" +msgstr "Τύπος αποθήκευσης" + +#: describe.c:6102 +msgid "Operator class" +msgstr "Κλάση χειριστή" + +#: describe.c:6114 describe.c:6189 describe.c:6275 describe.c:6358 +msgid "Operator family" +msgstr "Οικογένεια χειριστή" + +#: describe.c:6147 +msgid "List of operator classes" +msgstr "Λίστα οικογένειας κλάσεων" + +#: describe.c:6190 +msgid "Applicable types" +msgstr "Εφαρμόσιμοι τύποι" + +#: describe.c:6229 +msgid "List of operator families" +msgstr "Λίστα οικογενειών χειριστών" + +#: describe.c:6276 +msgid "Operator" +msgstr "Χειριστής" + +#: describe.c:6277 +msgid "Strategy" +msgstr "Στρατηγική" + +#: describe.c:6278 +msgid "ordering" +msgstr "Διάταξη" + +#: describe.c:6279 +msgid "search" +msgstr "αναζήτηση" + +#: describe.c:6280 +msgid "Purpose" +msgstr "Στόχος" + +#: describe.c:6285 +msgid "Sort opfamily" +msgstr "Διάταξη opfamily" + +#: describe.c:6316 +msgid "List of operators of operator families" +msgstr "Λίστα χειριστών των οικογενειών χειριστών" + +#: describe.c:6359 +msgid "Registered left type" +msgstr "Καταχωρημένος αριστερός τύπος" + +#: describe.c:6360 +msgid "Registered right type" +msgstr "Καταχωρημένος δεξιός τύπος" + +#: describe.c:6361 +msgid "Number" +msgstr "Αριθμός" + +#: describe.c:6397 +msgid "List of support functions of operator families" +msgstr "Λίστα συναρτήσεων υποστήριξης των οικογενειών χειριστών" + +#: help.c:73 +#, c-format +msgid "" +"psql is the PostgreSQL interactive terminal.\n" +"\n" +msgstr "" +"psql είναι το διαδραστικό τερματικό της PostgreSQL.\n" +"\n" + +#: help.c:74 help.c:355 help.c:431 help.c:474 +#, c-format +msgid "Usage:\n" +msgstr "Χρήση:\n" + +#: help.c:75 +#, c-format +msgid "" +" psql [OPTION]... [DBNAME [USERNAME]]\n" +"\n" +msgstr "" +" psql [OPTION]… [DBNAME [USERNAME]]\n" +"\n" + +#: help.c:77 +#, c-format +msgid "General options:\n" +msgstr "Γενικές επιλογές:\n" + +#: help.c:82 +#, c-format +msgid "" +" -c, --command=COMMAND run only single command (SQL or internal) and " +"exit\n" +msgstr "" +" -c, —command=COMMAND εκτέλεσε μόνο μία μονή εντολή (SQL ή εσωτερική) " +"και, στη συνέχεια, εξέλθετε\n" + +#: help.c:83 +#, c-format +msgid "" +" -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" +msgstr "" +" -d, —dbname=DBNAME ονομασία βάσης δεδομένων στην οποία θα συνδεθείτε " +"(προεπιλογή: “%s”)\n" + +#: help.c:84 +#, c-format +msgid " -f, --file=FILENAME execute commands from file, then exit\n" +msgstr "" +" -f, —file=FILENAME εκτέλεσε εντολές από αρχείο και, στη συνέχεια, " +"έξοδος\n" + +#: help.c:85 +#, c-format +msgid " -l, --list list available databases, then exit\n" +msgstr "" +" -l, —list απαρίθμησε τις διαθέσιμες βάσεις δεδομένων και, " +"στη συνέχεια, έξοδος\n" + +#: help.c:86 +#, c-format +msgid "" +" -v, --set=, --variable=NAME=VALUE\n" +" set psql variable NAME to VALUE\n" +" (e.g., -v ON_ERROR_STOP=1)\n" +msgstr "" +" -v, —set=, —variable=NAME=VALUE\n" +" όρισε την μεταβλητή της psql NAME στην τιμή " +"VALUE\n" +" (π.χ., -v ON_ERROR_STOP=1)\n" + +#: help.c:89 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr "" +" -V, —version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, " +"έξοδος\n" + +#: help.c:90 +#, c-format +msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" +msgstr "" +" -X, --no-psqlrc να μην διαβαστεί το αρχείο εκκίνησης (~/.psqlrc)\n" + +#: help.c:91 +#, c-format +msgid "" +" -1 (\"one\"), --single-transaction\n" +" execute as a single transaction (if non-" +"interactive)\n" +msgstr "" +" -1 (“one”), —single-transaction\n" +" εκτέλεσε ως μεμονωμένη συναλλαγή (εάν δεν είναι " +"διαδραστική)\n" + +#: help.c:93 +#, c-format +msgid " -?, --help[=options] show this help, then exit\n" +msgstr "" +" -?, —help[=options] εμφάνισε αυτής της βοήθειας και, στη συνέχεια, " +"έξοδος\n" + +#: help.c:94 +#, c-format +msgid " --help=commands list backslash commands, then exit\n" +msgstr "" +" —help=commands απαρίθμησε τις εντολές ανάποδης καθέτου και, στη " +"συνέχεια, έξοδος\n" + +#: help.c:95 +#, c-format +msgid " --help=variables list special variables, then exit\n" +msgstr "" +" —help=variables απαρίθμησε τις ειδικές μεταβλητές και, στη " +"συνέχεια, έξοδος\n" + +#: help.c:97 +#, c-format +msgid "" +"\n" +"Input and output options:\n" +msgstr "" +"\n" +"Επιλογές εισόδου και εξόδου:\n" + +#: help.c:98 +#, c-format +msgid " -a, --echo-all echo all input from script\n" +msgstr " -a, —echo-all echo όλη την είσοδο από σενάριο\n" + +#: help.c:99 +#, c-format +msgid " -b, --echo-errors echo failed commands\n" +msgstr " -b, —echo-errors echo όλες τις αποτυχημένες εντολές\n" + +#: help.c:100 +#, c-format +msgid " -e, --echo-queries echo commands sent to server\n" +msgstr "" +" -e, —echo-queries echo τις εντολές που αποστέλλονται στο διακομιστή\n" + +#: help.c:101 +#, c-format +msgid "" +" -E, --echo-hidden display queries that internal commands generate\n" +msgstr "" +" -E, —echo-hidden εμφάνισε ερωτήματα που δημιουργούνται από " +"εσωτερικές εντολές\n" + +#: help.c:102 +#, c-format +msgid " -L, --log-file=FILENAME send session log to file\n" +msgstr "" +" -L, —log-file=FILENAME στείλε την καταγραφή της συνεδρίας στο αρχείο\n" + +#: help.c:103 +#, c-format +msgid "" +" -n, --no-readline disable enhanced command line editing (readline)\n" +msgstr "" +" -n, —no-readline απενεργοποιήσε την βελτιωμένη επεξεργασία γραμμής " +"εντολών (readline)\n" + +#: help.c:104 +#, c-format +msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" +msgstr "" +" -o, —output=FILENAME στείλε τα αποτελέσματα ερωτημάτων σε αρχείο (ή |" +"pipe)\n" + +#: help.c:105 +#, c-format +msgid "" +" -q, --quiet run quietly (no messages, only query output)\n" +msgstr "" +" -q, —quiet εκτέλεσε σιωπηλά (καθόλου μηνύματα, μόνο έξοδος " +"ερωτημάτων)\n" + +#: help.c:106 +#, c-format +msgid " -s, --single-step single-step mode (confirm each query)\n" +msgstr "" +" -s, —single-step λειτουργία μονού βήματος (επιβεβαίωσε κάθε " +"ερώτημα)\n" + +#: help.c:107 +#, c-format +msgid "" +" -S, --single-line single-line mode (end of line terminates SQL " +"command)\n" +msgstr "" +" -S, —single-line λειτουργία μονής γραμμής (το τέλος της γραμμής " +"τερματίζει την εντολή SQL)\n" + +#: help.c:109 +#, c-format +msgid "" +"\n" +"Output format options:\n" +msgstr "" +"\n" +"Επιλογές μορφής εξόδου:\n" + +#: help.c:110 +#, c-format +msgid " -A, --no-align unaligned table output mode\n" +msgstr "" +" -A, —no-align λειτουργία εξόδου πίνακα μη ευθυγραμμισμένη " +"λειτουργία εξόδου πίνακα\n" + +#: help.c:111 +#, c-format +msgid "" +" --csv CSV (Comma-Separated Values) table output mode\n" +msgstr "" +" —csv λειτουργία εξόδου πίνακα CSV (τιμές διαχωρισμένες " +"με κόμματα)\n" + +#: help.c:112 +#, c-format +msgid "" +" -F, --field-separator=STRING\n" +" field separator for unaligned output (default: " +"\"%s\")\n" +msgstr "" +" -F, —field-separator=STRING\n" +" διαχωριστικό πεδίου για μη ευθυγραμμισμένη έξοδο " +"(προεπιλογή: \"%s\")\n" + +#: help.c:115 +#, c-format +msgid " -H, --html HTML table output mode\n" +msgstr " -H, —html λειτουργία εξόδου πίνακα HTML\n" + +#: help.c:116 +#, c-format +msgid "" +" -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset " +"command)\n" +msgstr "" +" -P, --pset=VAR[=ARG] όρισε την επιλογή εκτύπωσης VAR σε ARG (δείτε την " +"εντολή \\pset)\n" + +#: help.c:117 +#, c-format +msgid "" +" -R, --record-separator=STRING\n" +" record separator for unaligned output (default: " +"newline)\n" +msgstr "" +" -R, —record-separator=STRING\n" +" διαχωριστικό εγγραφών για μη ευθυγραμμισμένη " +"έξοδο (προεπιλογή: νέα γραμμή)\n" + +#: help.c:119 +#, c-format +msgid " -t, --tuples-only print rows only\n" +msgstr " -t, —tuples-only εκτύπωσε μόνο γραμμές\n" + +#: help.c:120 +#, c-format +msgid "" +" -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, " +"border)\n" +msgstr "" +" -T, —table-attr=TEXT όρισε τα χαρακτηριστικά ετικετών πίνακα HTML (π.χ. " +"πλάτος, περίγραμμα)\n" + +#: help.c:121 +#, c-format +msgid " -x, --expanded turn on expanded table output\n" +msgstr "" +" -x, —expanded ενεργοποίησε λειτουργία εκτεταμένης εξόδου πίνακα\n" + +#: help.c:122 +#, c-format +msgid "" +" -z, --field-separator-zero\n" +" set field separator for unaligned output to zero " +"byte\n" +msgstr "" +" -z, —field-separator-zero\n" +" όρισε το διαχωριστικό πεδίου για μη " +"ευθυγραμμισμένη έξοδο στο μηδενικό byte\n" + +#: help.c:124 +#, c-format +msgid "" +" -0, --record-separator-zero\n" +" set record separator for unaligned output to zero " +"byte\n" +msgstr "" +" -0, —record-separator-zero\n" +" όρισε το διαχωριστικό εγγραφών για μη " +"ευθυγραμμισμένη έξοδο στο μηδενικό byte\n" + +#: help.c:127 +#, c-format +msgid "" +"\n" +"Connection options:\n" +msgstr "" +"\n" +"Επιλογές σύνδεσης:\n" + +#: help.c:130 +#, c-format +msgid "" +" -h, --host=HOSTNAME database server host or socket directory " +"(default: \"%s\")\n" +msgstr "" +" -h, —host=HOSTNAME κεντρικός υπολογιστής διακομιστή βάσης δεδομένων ή " +"κατάλογος υποδοχών (προεπιλογή: \"%s\")\n" + +#: help.c:131 +msgid "local socket" +msgstr "τοπική υποδοχή" + +#: help.c:134 +#, c-format +msgid " -p, --port=PORT database server port (default: \"%s\")\n" +msgstr "" +" -p, —port=PORT θύρα διακομιστή βάσης δεδομένων (προεπιλογή: \"%s" +"\")\n" + +#: help.c:140 +#, c-format +msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" +msgstr "" +" -U, —username=USERNAME όνομα χρήστη βάσης δεδομένων (προεπιλογή: \"%s\")\n" + +#: help.c:141 +#, c-format +msgid " -w, --no-password never prompt for password\n" +msgstr " -w, —no-password να μην ζητείται ποτέ κωδικός πρόσβασης\n" + +#: help.c:142 +#, c-format +msgid "" +" -W, --password force password prompt (should happen " +"automatically)\n" +msgstr "" +" -W, —password αναγκαστική προτροπή κωδικού πρόσβασης (πρέπει να " +"συμβεί αυτόματα)\n" + +#: help.c:144 +#, c-format +msgid "" +"\n" +"For more information, type \"\\?\" (for internal commands) or \"\\help" +"\" (for SQL\n" +"commands) from within psql, or consult the psql section in the PostgreSQL\n" +"documentation.\n" +"\n" +msgstr "" +"\n" +"Για περισσότερες πληροφορίες, πληκτρολογήστε \"\\?\" (για εσωτερικές " +"εντολές) ή “\\help” (για SQL\n" +"εντολές) μέσα από το psql, ή συμβουλευτείτε την ενότητα psql στην τεκμηρίωση " +"της PostgreSQL\n" +"\n" + +#: help.c:147 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "Υποβάλετε αναφορές σφάλματων σε <%s>.\n" + +#: help.c:148 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s αρχική σελίδα: <%s>\n" + +#: help.c:174 +#, c-format +msgid "General\n" +msgstr "Γενικά\n" + +#: help.c:175 +#, c-format +msgid "" +" \\copyright show PostgreSQL usage and distribution terms\n" +msgstr "" +" \\copyright εμφάνισε τους όρους χρήσης και διανομής της " +"PostgreSQL\n" + +#: help.c:176 +#, c-format +msgid "" +" \\crosstabview [COLUMNS] execute query and display results in crosstab\n" +msgstr "" +" \\crosstabview [COLUMNS] εκτέλεσε την ερώτηση και execute query and " +"εμφάνισε τα αποτελέσματα σε μορφή crosstab\n" + +#: help.c:177 +#, c-format +msgid "" +" \\errverbose show most recent error message at maximum " +"verbosity\n" +msgstr "" +" \\errverbose εμφάνισε το πιο πρόσφατο μήνυμα σφάλματος στη " +"μέγιστη λεπτομέρεια\n" + +#: help.c:178 +#, c-format +msgid "" +" \\g [(OPTIONS)] [FILE] execute query (and send results to file or |" +"pipe);\n" +" \\g with no arguments is equivalent to a semicolon\n" +msgstr "" +" \\g [(OPTIONS)] [FILE] εκτέλεσε το ερώτημα (και στείλτε αποτελέσματα σε " +"αρχείο ή |pipe).\n" +" \\g χωρίς επιλογές ισοδυναμεί με το ερωματικό\n" + +#: help.c:180 +#, c-format +msgid "" +" \\gdesc describe result of query, without executing it\n" +msgstr "" +" \\gdesc περίγραψε το αποτέλεσμα του ερωτήματος, χωρίς να " +"εκτελεστεί\n" + +#: help.c:181 +#, c-format +msgid "" +" \\gexec execute query, then execute each value in its " +"result\n" +msgstr "" +" \\gexec εκτέλεσε το ερώτημα και, στη συνέχεια, εκτέλεσε " +"κάθε τιμή του αποτελέσματός της\n" + +#: help.c:182 +#, c-format +msgid "" +" \\gset [PREFIX] execute query and store results in psql variables\n" +msgstr "" +" \\gset [PREFIX] εκτέλεσε το ερώτημα και αποθήκευσε τα αποτελέσματα " +"σε μεταβλητές της psql\n" + +#: help.c:183 +#, c-format +msgid " \\gx [(OPTIONS)] [FILE] as \\g, but forces expanded output mode\n" +msgstr "" +" \\gx [(OPTIONS)] [FILE] όμοια με \\g, αλλά επιβάλλει λειτουργία " +"εκτεταμένης εξόδου\n" + +#: help.c:184 +#, c-format +msgid " \\q quit psql\n" +msgstr " \\q τερμάτισε psql\n" + +#: help.c:185 +#, c-format +msgid " \\watch [SEC] execute query every SEC seconds\n" +msgstr "" +" \\watch [SEC] εκτέλεση του ερωτήματος κάθε SEC δευτερόλεπτα\n" + +#: help.c:188 +#, c-format +msgid "Help\n" +msgstr "Βοήθεια\n" + +#: help.c:190 +#, c-format +msgid " \\? [commands] show help on backslash commands\n" +msgstr "" +" \\? [commands] εμφάνισε την βοήθεια για τις εντολές ανάποδης " +"καθέτου\n" + +#: help.c:191 +#, c-format +msgid " \\? options show help on psql command-line options\n" +msgstr "" +" \\? options εμφάνισε την βοήθεια για τις επιλογές εντολών " +"γραμμής της psql\n" + +#: help.c:192 +#, c-format +msgid " \\? variables show help on special variables\n" +msgstr "" +" \\? variables εμφάνισε την βοήθεια για τις ειδικές μεταβλητές\n" + +#: help.c:193 +#, c-format +msgid "" +" \\h [NAME] help on syntax of SQL commands, * for all " +"commands\n" +msgstr "" +" \\h [NAME] βοήθεια για την σύνταξη των εντολών SQL, * για " +"όλες τις εντολών\n" + +#: help.c:196 +#, c-format +msgid "Query Buffer\n" +msgstr "Ενδιάμεση μνήμη Ερωτήματος\n" + +#: help.c:197 +#, c-format +msgid "" +" \\e [FILE] [LINE] edit the query buffer (or file) with external " +"editor\n" +msgstr "" +" \\e [FILE] [LINE] επεξεργάσου την ενδιάμεση μνήμη (ή αρχείο) " +"ερωτήματος με εξωτερικό επεξεργαστή κειμένου\n" + +#: help.c:198 +#, c-format +msgid "" +" \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" +msgstr "" +" \\ef [FUNCNAME [LINE]] επεξεργάσου τον ορισμό της συνάρτησης με εξωτερικό " +"επεξεργαστή κειμένου\n" + +#: help.c:199 +#, c-format +msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" +msgstr "" +" \\ef [FUNCNAME [LINE]] επεξεργάσου τον ορισμό της όψης με εξωτερικό " +"επεξεργαστή κειμένου\n" + +#: help.c:200 +#, c-format +msgid " \\p show the contents of the query buffer\n" +msgstr "" +" \\p εμφάνισε τα περιοχόμενα της ενδιάμεσης μνήμης " +"ερωτήματος\n" + +#: help.c:201 +#, c-format +msgid " \\r reset (clear) the query buffer\n" +msgstr "" +" \\r επαναφορά (αρχικοποίηση) της ενδιάμεσης μνήμης " +"ερωτήματος\n" + +#: help.c:203 +#, c-format +msgid " \\s [FILE] display history or save it to file\n" +msgstr "" +" \\s [FILE] εμφάνισε το ιστορικό η αποθήκευσε το σε αρχείο\n" + +#: help.c:205 +#, c-format +msgid " \\w FILE write query buffer to file\n" +msgstr "" +" \\w FILE γράψε την ενδιάμεση μνήμη ερωτήματος σε αρχείο\n" + +#: help.c:208 +#, c-format +msgid "Input/Output\n" +msgstr "Είσοδος/Έξοδος\n" + +#: help.c:209 +#, c-format +msgid "" +" \\copy ... perform SQL COPY with data stream to the client " +"host\n" +msgstr "" +" \\copy … εκτέλεσε SQL COPY με ροή δεδομένων σε διακομιστή " +"πελάτη\n" + +#: help.c:210 +#, c-format +msgid "" +" \\echo [-n] [STRING] write string to standard output (-n for no " +"newline)\n" +msgstr "" +" \\echo [-n] [STRING] γράψε την στοιχειοσειρά στην τυπική έξοδο (-n για " +"παράληψη νέας γραμμής)\n" + +#: help.c:211 +#, c-format +msgid " \\i FILE execute commands from file\n" +msgstr " \\i FILE εκτέλεσε εντολές από αρχείο\n" + +#: help.c:212 +#, c-format +msgid "" +" \\ir FILE as \\i, but relative to location of current " +"script\n" +msgstr "" +" \\ir FILE όπως \\i, αλλά σε σχέση με την τοποθεσία του " +"τρέχοντος σεναρίου\n" + +#: help.c:213 +#, c-format +msgid " \\o [FILE] send all query results to file or |pipe\n" +msgstr "" +" \\o [FILE] στείλε όλα τα αποτελέσματα ερωτημάτων σε αρχείο ή |" +"pipe\n" + +#: help.c:214 +#, c-format +msgid "" +" \\qecho [-n] [STRING] write string to \\o output stream (-n for no " +"newline)\n" +msgstr "" +" \\qecho [-n] [STRING] γράψε την στοιχειοσειρά στην ροή εξόδου \\o (-n " +"για παράληψη νέας γραμμής)\n" + +#: help.c:215 +#, c-format +msgid "" +" \\warn [-n] [STRING] write string to standard error (-n for no " +"newline)\n" +msgstr "" +" \\warn [-n] [STRING] γράψε την στοιχειοσειρά στο τυπικό σφάλμα (-n για " +"παράληψη νέας γραμμής)\n" + +#: help.c:218 +#, c-format +msgid "Conditional\n" +msgstr "Υπό συνθήκη\n" + +#: help.c:219 +#, c-format +msgid " \\if EXPR begin conditional block\n" +msgstr " \\if EXPR έναρξη υπό συνθήκης μπλοκ\n" + +#: help.c:220 +#, c-format +msgid "" +" \\elif EXPR alternative within current conditional block\n" +msgstr "" +" \\elif EXPR εναλλακτική λύση εντός του τρέχοντος μπλοκ υπό " +"όρους\n" + +#: help.c:221 +#, c-format +msgid "" +" \\else final alternative within current conditional " +"block\n" +msgstr "" +" \\else τελική εναλλακτική λύση εντός του τρέχοντος μπλοκ " +"υπό όρους\n" + +#: help.c:222 +#, c-format +msgid " \\endif end conditional block\n" +msgstr " \\endif τερματισμός μπλοκ υπό όρους\n" + +#: help.c:225 +#, c-format +msgid "Informational\n" +msgstr "Πληροφοριακά\n" + +#: help.c:226 +#, c-format +msgid " (options: S = show system objects, + = additional detail)\n" +msgstr "" +" (επιλογές: S = εμφάνισε αντικείμενα συστήματος, + = επιπλέον λεπτομέριες)\n" + +#: help.c:227 +#, c-format +msgid " \\d[S+] list tables, views, and sequences\n" +msgstr " \\d[S+] εμφάνισε πίνακες, όψεις και σειρές\n" + +#: help.c:228 +#, c-format +msgid " \\d[S+] NAME describe table, view, sequence, or index\n" +msgstr " \\d[S+] NAME περιέγραψε πίνακα, όψη, σειρά, ή ευρετήριο\n" + +#: help.c:229 +#, c-format +msgid " \\da[S] [PATTERN] list aggregates\n" +msgstr " \\da[S] [PATTERN] απαρίθμησε συγκεντρωτικά\n" + +#: help.c:230 +#, c-format +msgid " \\dA[+] [PATTERN] list access methods\n" +msgstr " \\dA[+] [PATTERN] απαρίθμησε μεθόδους πρόσβασης\n" + +#: help.c:231 +#, c-format +msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" +msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] απαρίθμησε κλάσεις χειριστή\n" + +#: help.c:232 +#, c-format +msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" +msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] απαρίθμησε οικογένειες χειριστών\n" + +#: help.c:233 +#, c-format +msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" +msgstr "" +" \\dAo[+] [AMPTRN [OPFPTRN]] απαρίθμησε χειριστές των οικογενειών " +"χειριστών\n" + +#: help.c:234 +#, c-format +msgid "" +" \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" +msgstr "" +" \\dAp [AMPTRN [OPFPTRN]] απαρίθμησε συναρτήσεις των οικογενειών " +"χειριστών\n" + +#: help.c:235 +#, c-format +msgid " \\db[+] [PATTERN] list tablespaces\n" +msgstr " \\db[+] [PATTERN] απαρίθμησε πινακοχώρους\n" + +#: help.c:236 +#, c-format +msgid " \\dc[S+] [PATTERN] list conversions\n" +msgstr " \\dc[S+] [PATTERN] απαρίθμησε μετατροπές\n" + +#: help.c:237 +#, c-format +msgid " \\dC[+] [PATTERN] list casts\n" +msgstr " \\dC[+] [PATTERN] απαρίθμησε casts\n" + +#: help.c:238 +#, c-format +msgid "" +" \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" +msgstr "" +" \\dd[S] [PATTERN] εμφάνισε περιγραφές αντικειμένων που δεν φαίνονται " +"πουθενά αλλού\n" + +#: help.c:239 +#, c-format +msgid " \\dD[S+] [PATTERN] list domains\n" +msgstr " \\dD[S+] [PATTERN] απαρίθμησε πεδία\n" + +#: help.c:240 +#, c-format +msgid " \\ddp [PATTERN] list default privileges\n" +msgstr " \\ddp [PATTERN] απαρίθμησε προεπιλεγμένα προνόμια\n" + +#: help.c:241 +#, c-format +msgid " \\dE[S+] [PATTERN] list foreign tables\n" +msgstr " \\dE[S+] [PATTERN] απαρίθμησε ξενικούς πίνακες\n" + +#: help.c:242 +#, c-format +msgid " \\det[+] [PATTERN] list foreign tables\n" +msgstr " \\det[+] [PATTERN] απαρίθμησε ξενικούς πίνακες\n" + +#: help.c:243 +#, c-format +msgid " \\des[+] [PATTERN] list foreign servers\n" +msgstr " \\des[+] [PATTERN] απαρίθμησε ξενικούς διακομιστές\n" + +#: help.c:244 +#, c-format +msgid " \\deu[+] [PATTERN] list user mappings\n" +msgstr " \\deu[+] [PATTERN] απαρίθμησε αντιστοιχίες χρηστών\n" + +#: help.c:245 +#, c-format +msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" +msgstr " \\dew[+] [PATTERN] απαρίθμησε περιτυλίξεις ξένων δεδομένων\n" + +#: help.c:246 +#, c-format +msgid "" +" \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] " +"functions\n" +msgstr "" +" \\df[anptw][S+] [PATRN] απαρίθμησε συναρτήσεις [μόνο agg/normal/procedures/" +"trigger/window]\n" + +#: help.c:247 +#, c-format +msgid " \\dF[+] [PATTERN] list text search configurations\n" +msgstr " \\dF[+] [PATTERN] απαρίθμησε ρυθμίσεις αναζήτησης κειμένου\n" + +#: help.c:248 +#, c-format +msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" +msgstr " \\dFd[+] [PATTERN] απαρίθμησε λεξικά αναζήτησης κειμένου\n" + +#: help.c:249 +#, c-format +msgid " \\dFp[+] [PATTERN] list text search parsers\n" +msgstr " \\dFp[+] [PATTERN] απαρίθμησε αναλυτές αναζήτησης κειμένου\n" + +#: help.c:250 +#, c-format +msgid " \\dFt[+] [PATTERN] list text search templates\n" +msgstr " \\dFt[+] [PATTERN] απαρίθμησε πρότυπα αναζήτησης κειμένου\n" + +#: help.c:251 +#, c-format +msgid " \\dg[S+] [PATTERN] list roles\n" +msgstr " \\dg[S+] [PATTERN] απαρίθμησε ρόλους\n" + +#: help.c:252 +#, c-format +msgid " \\di[S+] [PATTERN] list indexes\n" +msgstr " \\di[S+] [PATTERN] απαρίθμησε ευρετήρια\n" + +#: help.c:253 +#, c-format +msgid " \\dl list large objects, same as \\lo_list\n" +msgstr "" +" \\dl απαρίθμησε μεγάλα αντικείμενα, όπως \\lo_list\n" + +#: help.c:254 +#, c-format +msgid " \\dL[S+] [PATTERN] list procedural languages\n" +msgstr " \\dL[S+] [PATTERN] απαρίθμησε διαδικαστικές γλώσσες\n" + +#: help.c:255 +#, c-format +msgid " \\dm[S+] [PATTERN] list materialized views\n" +msgstr " \\dm[S+] [PATTERN] απαρίθμησε υλοποιημένες όψεις\n" + +#: help.c:256 +#, c-format +msgid " \\dn[S+] [PATTERN] list schemas\n" +msgstr " \\dn[S+] [PATTERN] απαρίθμησε σχήματα\n" + +#: help.c:257 +#, c-format +msgid " \\do[S] [PATTERN] list operators\n" +msgstr " \\do[S] [PATTERN] απαρίθμησε χειριστές\n" + +#: help.c:258 +#, c-format +msgid " \\dO[S+] [PATTERN] list collations\n" +msgstr " \\dO[S+] [PATTERN] απαρίθμησε συρραφές\n" + +#: help.c:259 +#, c-format +msgid "" +" \\dp [PATTERN] list table, view, and sequence access privileges\n" +msgstr "" +" \\dp [PATTERN] απαρίθμησε προνόμια πρόσβασης πίνακα, όψης και " +"σειράς\n" + +#: help.c:260 +#, c-format +msgid "" +" \\dP[itn+] [PATTERN] list [only index/table] partitioned relations " +"[n=nested]\n" +msgstr "" +" \\dP[itn+] [PATTERN] απαρίθμησε διαχωρισμένες σχέσεις [μόνο ευρετήριο/" +"πίνακα] [n=nested]\n" + +#: help.c:261 +#, c-format +msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" +msgstr "" +" \\drds [PATRN1 [PATRN2]] απαρίθμησε ρυθμίσεις ρόλου ανά βάση δεδομένων\n" + +#: help.c:262 +#, c-format +msgid " \\dRp[+] [PATTERN] list replication publications\n" +msgstr " \\dRp[+] [PATTERN] απαρίθμησε δημοσιεύσεις αναπαραγωγής\n" + +#: help.c:263 +#, c-format +msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" +msgstr " \\dRs[+] [PATTERN] απαρίθμησε συνδρομές αναπαραγωγής\n" + +#: help.c:264 +#, c-format +msgid " \\ds[S+] [PATTERN] list sequences\n" +msgstr " \\ds[S+] [PATTERN] απαρίθμησε ακολουθίες\n" + +#: help.c:265 +#, c-format +msgid " \\dt[S+] [PATTERN] list tables\n" +msgstr " \\dt[S+] [PATTERN] απαρίθμησε πίνακες\n" + +#: help.c:266 +#, c-format +msgid " \\dT[S+] [PATTERN] list data types\n" +msgstr " \\dT[S+] [PATTERN] απαρίθμησε τύπους δεδομένων\n" + +#: help.c:267 +#, c-format +msgid " \\du[S+] [PATTERN] list roles\n" +msgstr " \\du[S+] [PATTERN] απαρίθμησε ρόλους\n" + +#: help.c:268 +#, c-format +msgid " \\dv[S+] [PATTERN] list views\n" +msgstr " \\dv[S+] [PATTERN] απαρίθμησε όψεις\n" + +#: help.c:269 +#, c-format +msgid " \\dx[+] [PATTERN] list extensions\n" +msgstr " \\dx[+] [PATTERN] απαρίθμησε προεκτάσεις\n" + +#: help.c:270 +#, c-format +msgid " \\dy [PATTERN] list event triggers\n" +msgstr " \\dy [PATTERN] απαρίθμησε εναύσματα συμβάντων\n" + +#: help.c:271 +#, c-format +msgid " \\l[+] [PATTERN] list databases\n" +msgstr " \\l[+] [PATTERN] απαρίθμησε βάσεις δεδομένων\n" + +#: help.c:272 +#, c-format +msgid " \\sf[+] FUNCNAME show a function's definition\n" +msgstr " \\sf[+] FUNCNAME εμφάνισε τον ορισμό μίας συνάρτησης\n" + +#: help.c:273 +#, c-format +msgid " \\sv[+] VIEWNAME show a view's definition\n" +msgstr " \\sv[+] VIEWNAME εμφάνισε τον ορισμό μίας όψης\n" + +#: help.c:274 +#, c-format +msgid " \\z [PATTERN] same as \\dp\n" +msgstr " \\z [PATTERN] όπως \\dp\n" + +#: help.c:277 +#, c-format +msgid "Formatting\n" +msgstr "Μορφοποίηση\n" + +#: help.c:278 +#, c-format +msgid "" +" \\a toggle between unaligned and aligned output mode\n" +msgstr "" +" \\a εναλλαγή μεταξύ μη ευθυγραμμισμένης και " +"ευθυγραμμισμένης μορφής εξόδου\n" + +#: help.c:279 +#, c-format +msgid " \\C [STRING] set table title, or unset if none\n" +msgstr " \\C [STRING] όρισε τίτλο πίνακα, ή αναίρεσε εάν κενό\n" + +#: help.c:280 +#, c-format +msgid "" +" \\f [STRING] show or set field separator for unaligned query " +"output\n" +msgstr "" +" \\f [STRING] εμφάνισε ή όρισε τον διαχωριστή πεδίου για μη " +"ευθυγραμμισμένη έξοδο ερωτήματος\n" + +#: help.c:281 +#, c-format +msgid " \\H toggle HTML output mode (currently %s)\n" +msgstr "" +" \\H εναλλαγή λειτουργίας εξόδου HTML (επί του παρόντος" +"% s)\n" + +#: help.c:283 +#, c-format +msgid "" +" \\pset [NAME [VALUE]] set table output option\n" +" (border|columns|csv_fieldsep|expanded|fieldsep|\n" +" fieldsep_zero|footer|format|linestyle|null|\n" +" numericlocale|pager|pager_min_lines|recordsep|\n" +" recordsep_zero|tableattr|title|tuples_only|\n" +" unicode_border_linestyle|unicode_column_linestyle|\n" +" unicode_header_linestyle)\n" +msgstr "" +" \\pset [NAME [VALUE]] όρισε την επιλογή εξόδου πίνακα\n" +" (border|columns|csv_fieldsep|expanded|fieldsep|\n" +" fieldsep_zero|footer|format|linestyle|null|\n" +" numericlocale|pager|pager_min_lines|recordsep|\n" +" recordsep_zero|tableattr|title|tuples_only|\n" +" unicode_border_linestyle|unicode_column_linestyle|\n" +" unicode_header_linestyle)\n" + +#: help.c:290 +#, c-format +msgid " \\t [on|off] show only rows (currently %s)\n" +msgstr "" +" \\t [on|off] εμφάνισε μόνο γραμμές (επί του παρόντος %s)\n" + +#: help.c:292 +#, c-format +msgid "" +" \\T [STRING] set HTML
tag attributes, or unset if none\n" +msgstr "" +"\\T [STRING] ορίστε χαρακτηριστικά ετικέτας πίνακα HTML, ή " +"αναίρεσε εάν δεν υπάρχουν\n" + +#: help.c:293 +#, c-format +msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" +msgstr "" +" \\x [on|off|auto] εναλλαγή τιμής διευρυμένης εξόδου (επί του " +"παρόντος %s)\n" + +#: help.c:297 +#, c-format +msgid "Connection\n" +msgstr "Σύνδεση\n" + +#: help.c:299 +#, c-format +msgid "" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" +" connect to new database (currently \"%s\")\n" +msgstr "" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" +" σύνδεση σε νέα βάση δεδομένων (επί του παρόντος " +"“%s”)\n" + +#: help.c:303 +#, c-format +msgid "" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" +" connect to new database (currently no connection)\n" +msgstr "" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" +" σύνδεση σε νέα βάση δεδομένων (επί του παρόντος " +"καμία σύνδεση)\n" + +#: help.c:305 +#, c-format +msgid "" +" \\conninfo display information about current connection\n" +msgstr "" +" \\conninfo εμφάνιση πληροφοριών σχετικά με την παρούσα " +"σύνδεση\n" + +#: help.c:306 +#, c-format +msgid " \\encoding [ENCODING] show or set client encoding\n" +msgstr "" +" -E, —encoding=ENCODING εμφάνισε ή όρισε την κωδικοποίηση του πελάτη\n" + +#: help.c:307 +#, c-format +msgid " \\password [USERNAME] securely change the password for a user\n" +msgstr "" +" \\password [USERNAME] άλλαξε με ασφάλεια τον κωδικό πρόσβασης ενός " +"χρήστη\n" + +#: help.c:310 +#, c-format +msgid "Operating System\n" +msgstr "Λειτουργικό σύστημα\n" + +#: help.c:311 +#, c-format +msgid " \\cd [DIR] change the current working directory\n" +msgstr " \\cd [DIR] άλλαξε τον παρόν κατάλογο εργασίας\n" + +#: help.c:312 +#, c-format +msgid " \\setenv NAME [VALUE] set or unset environment variable\n" +msgstr " \\setenv NAME [VALUE] όρισε ή αναίρεσε μεταβλητή περιβάλλοντος\n" + +#: help.c:313 +#, c-format +msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" +msgstr "" +" \\timing [on|off] εναλλαγή χρονισμού των εντολών (επί του παρόντος " +"%s)\n" + +#: help.c:315 +#, c-format +msgid "" +" \\! [COMMAND] execute command in shell or start interactive " +"shell\n" +msgstr "" +" \\! [COMMAND] εκτέλεσε εντολή σε κέλυφος ή ξεκίνησε διαδραστικό " +"κέλυφος\n" + +#: help.c:318 +#, c-format +msgid "Variables\n" +msgstr "Μεταβλητές\n" + +#: help.c:319 +#, c-format +msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" +msgstr "" +" \\prompt [TEXT] NAME προέτρεψε τον χρήστη να ορίσει εσωτερική " +"μεταβλητή\n" + +#: help.c:320 +#, c-format +msgid "" +" \\set [NAME [VALUE]] set internal variable, or list all if no " +"parameters\n" +msgstr "" +" \\set [NAME [VALUE]] όρισε εσωτερική μεταβλητή, ή απαρίθμησέ τες όλες " +"εάν δεν υπάρχουν παράμετροι\n" + +#: help.c:321 +#, c-format +msgid " \\unset NAME unset (delete) internal variable\n" +msgstr " \\unset NAME αναίρεσε (διέγραψε) εσωτερική μεταβλητή\n" + +#: help.c:324 +#, c-format +msgid "Large Objects\n" +msgstr "Μεγάλα αντικείμενα\n" + +#: help.c:325 +#, c-format +msgid "" +" \\lo_export LOBOID FILE\n" +" \\lo_import FILE [COMMENT]\n" +" \\lo_list\n" +" \\lo_unlink LOBOID large object operations\n" +msgstr "" +" \\lo_export LOBOID FILE\n" +" \\lo_import FILE [COMMENT]\n" +" \\lo_list\n" +" \\lo_unlink LOBOID λειτουργίες μεγάλου αντικειμένου\n" + +#: help.c:352 +#, c-format +msgid "" +"List of specially treated variables\n" +"\n" +msgstr "" +"Απαρίθμηση των ειδικά επεξεργασμένων μεταβλητών\n" +"\n" + +#: help.c:354 +#, c-format +msgid "psql variables:\n" +msgstr "psql μεταβλητές:\n" + +#: help.c:356 +#, c-format +msgid "" +" psql --set=NAME=VALUE\n" +" or \\set NAME VALUE inside psql\n" +"\n" +msgstr "" +" psql —set=NAME=VALUE\n" +" ή \\set NAME VALUE μέσα σε psql\n" +"\n" + +#: help.c:358 +#, c-format +msgid "" +" AUTOCOMMIT\n" +" if set, successful SQL commands are automatically committed\n" +msgstr "" +" AUTOCOMMIT\n" +" εφόσον ορισμένο, επιτυχημένες εντολές SQL ολοκληρώνονται αυτόματα\n" + +#: help.c:360 +#, c-format +msgid "" +" COMP_KEYWORD_CASE\n" +" determines the case used to complete SQL key words\n" +" [lower, upper, preserve-lower, preserve-upper]\n" +msgstr "" +" COMP_KEYWORD_CASE\n" +" καθορίζει τον τύπο (πεζά, κεφαλαία) για την ολοκλήρωση όρων SQL\n" +" [lower, upper, preserve-lower, preserve-upper]\n" + +#: help.c:363 +#, c-format +msgid "" +" DBNAME\n" +" the currently connected database name\n" +msgstr "" +" DBNAME\n" +" ονομασία της συνδεδεμένης βάσης δεδομένων\n" + +#: help.c:365 +#, c-format +msgid "" +" ECHO\n" +" controls what input is written to standard output\n" +" [all, errors, none, queries]\n" +msgstr "" +" ECHO\n" +" ελέγχει ποία είσοδος γράφεται στην τυπική έξοδο\n" +" [all, errors, none, queries]\n" +"\n" + +#: help.c:368 +#, c-format +msgid "" +" ECHO_HIDDEN\n" +" if set, display internal queries executed by backslash commands;\n" +" if set to \"noexec\", just show them without execution\n" +msgstr "" +" ECHO_HIDDEN\n" +" εάν έχει οριστεί, εμφανίστε εσωτερικά ερωτήματα που εκτελούνται από " +"εντολές ανάστρωσής τους.\n" +" εάν οριστεί σε \"noexec\", απλά δείξτε τους χωρίς εκτέλεση\n" + +#: help.c:371 +#, c-format +msgid "" +" ENCODING\n" +" current client character set encoding\n" +msgstr "" +" ENCODING\n" +" τρέχουσα κωδικοποίηση χαρακτήρων του προγράμματος-πελάτη\n" + +#: help.c:373 +#, c-format +msgid "" +" ERROR\n" +" true if last query failed, else false\n" +msgstr "" +" ERROR\n" +" αληθές εάν το τελευταίο ερώτημα απέτυχε, διαφορετικά ψευδές\n" + +#: help.c:375 +#, c-format +msgid "" +" FETCH_COUNT\n" +" the number of result rows to fetch and display at a time (0 = " +"unlimited)\n" +msgstr "" +" FETCH_COUNT\n" +" αριθμός των σειρών αποτελεσμάτων για λήψη και εμφάνιση ανά επανάλληψη (0 " +"= απεριόριστος)\n" + +#: help.c:377 +#, c-format +msgid "" +" HIDE_TABLEAM\n" +" if set, table access methods are not displayed\n" +msgstr "" +" HIDE_TABLEAM\n" +" εάν έχει οριστεί, δεν εμφανίζονται μέθοδοι πρόσβασης πίνακα\n" + +#: help.c:379 +#, c-format +msgid "" +" HISTCONTROL\n" +" controls command history [ignorespace, ignoredups, ignoreboth]\n" +msgstr "" +" HISTCONTROL\n" +" ελέγχει το ιστορικό εντολών [ignorespace, ignoredups, ignoreboth]\n" + +#: help.c:381 +#, c-format +msgid "" +" HISTFILE\n" +" file name used to store the command history\n" +msgstr "" +" HISTFILE\n" +" όνομα αρχείου που χρησιμοποιείται για την αποθήκευση του ιστορικού " +"εντολών\n" + +#: help.c:383 +#, c-format +msgid "" +" HISTSIZE\n" +" maximum number of commands to store in the command history\n" +msgstr "" +" HISTSIZE\n" +" μέγιστος αριθμός εντολών που θα αποθηκευτούν στο ιστορικό εντολών\n" + +#: help.c:385 +#, c-format +msgid "" +" HOST\n" +" the currently connected database server host\n" +msgstr "" +" HOST\n" +" ο συνδεδεμένος κεντρικός υπολογιστής διακομιστή βάσης δεδομένων\n" + +#: help.c:387 +#, c-format +msgid "" +" IGNOREEOF\n" +" number of EOFs needed to terminate an interactive session\n" +msgstr "" +" IGNOREEOF\n" +" αριθμός των EOF που απαιτούνται για τον τερματισμό μιας διαδραστικής " +"συνεδρίας\n" + +#: help.c:389 +#, c-format +msgid "" +" LASTOID\n" +" value of the last affected OID\n" +msgstr "" +" LASTOID\n" +" τιμή του τελευταίου επηρεασμένου OID\n" + +#: help.c:391 +#, c-format +msgid "" +" LAST_ERROR_MESSAGE\n" +" LAST_ERROR_SQLSTATE\n" +" message and SQLSTATE of last error, or empty string and \"00000\" if " +"none\n" +msgstr "" +" LAST_ERROR_MESSAGE\n" +" LAST_ERROR_SQLSTATE\n" +" μήνυμα και SQLSTATE του τελευταίου σφάλματος, ή κενή συμβολοσειρά και " +"\"00000\" εάν δεν\n" + +#: help.c:394 +#, c-format +msgid "" +" ON_ERROR_ROLLBACK\n" +" if set, an error doesn't stop a transaction (uses implicit savepoints)\n" +msgstr "" +" ON_ERROR_ROLLBACK\n" +" εάν έχει οριστεί, ένα σφάλμα δεν διακόπτει μια συναλλαγή (χρησιμοποιεί " +"έμμεσα σημεία αποθήκευσης)\n" + +#: help.c:396 +#, c-format +msgid "" +" ON_ERROR_STOP\n" +" stop batch execution after error\n" +msgstr "" +" ON_ERROR_STOP\n" +" σταμάτησε την ομαδική εκτέλεση μετά από σφάλμα\n" + +#: help.c:398 +#, c-format +msgid "" +" PORT\n" +" server port of the current connection\n" +msgstr "" +" PORT\n" +" θύρα διακομιστή της τρέχουσας σύνδεσης\n" + +#: help.c:400 +#, c-format +msgid "" +" PROMPT1\n" +" specifies the standard psql prompt\n" +msgstr "" +" PROMPT1\n" +" ορίζει την τυπική προτροπή psql\n" + +#: help.c:402 +#, c-format +msgid "" +" PROMPT2\n" +" specifies the prompt used when a statement continues from a previous " +"line\n" +msgstr "" +" PROMPT2\n" +" καθορίζει την προτροπή που χρησιμοποιείται όταν μια πρόταση συνεχίζεται " +"από προηγούμενη γραμμή\n" + +#: help.c:404 +#, c-format +msgid "" +" PROMPT3\n" +" specifies the prompt used during COPY ... FROM STDIN\n" +msgstr "" +" PROMPT3\n" +" καθορίζει την προτροπή που χρησιμοποιείται κατά την διάρκεια COPY … FROM " +"STDIN\n" + +#: help.c:406 +#, c-format +msgid "" +" QUIET\n" +" run quietly (same as -q option)\n" +msgstr "" +" QUIET\n" +" σιωπηλή εκτέλεση(όμοια με την επιλογή -q)\n" + +#: help.c:408 +#, c-format +msgid "" +" ROW_COUNT\n" +" number of rows returned or affected by last query, or 0\n" +msgstr "" +" ROW_COUNT\n" +" αριθμός των επηρεασμένων ή επιστρεφομένων σειρών του τελευταίου " +"ερωτήματος, ή 0\n" + +#: help.c:410 +#, c-format +msgid "" +" SERVER_VERSION_NAME\n" +" SERVER_VERSION_NUM\n" +" server's version (in short string or numeric format)\n" +msgstr "" +" SERVER_VERSION_NAME\n" +" SERVER_VERSION_NUM\n" +" έκδοση διακομιστή (σε σύντομη συμβολοσειρά ή αριθμητική μορφή)\n" + +#: help.c:413 +#, c-format +msgid "" +" SHOW_CONTEXT\n" +" controls display of message context fields [never, errors, always]\n" +msgstr "" +" SHOW_CONTEXT\n" +" ελέγχει την εμφάνιση των πεδίων του περιεχομένου μηνύματος [never, " +"errors, always]\n" + +#: help.c:415 +#, c-format +msgid "" +" SINGLELINE\n" +" if set, end of line terminates SQL commands (same as -S option)\n" +msgstr "" +" SINGLELINE\n" +" εάν έχει οριστεί, το τέλος γραμμής ολοκληρώνει τα ερωτήματα SQL (όμοια " +"με την επιλογή -S)\n" + +#: help.c:417 +#, c-format +msgid "" +" SINGLESTEP\n" +" single-step mode (same as -s option)\n" +msgstr "" +" SINGLESTEP\n" +" λειτουργία μονού-βήματος(όμοια με την επιλογή -s)\n" + +#: help.c:419 +#, c-format +msgid "" +" SQLSTATE\n" +" SQLSTATE of last query, or \"00000\" if no error\n" +msgstr "" +" SQLSTATE\n" +" SQLSTATE του τελευταίου ερωτήματος, ή “00000” εάν δεν υπήρξαν σφάλματα\n" + +#: help.c:421 +#, c-format +msgid "" +" USER\n" +" the currently connected database user\n" +msgstr "" +" USER\n" +" ο τρέχων συνδεδεμένος χρήστης βάσης δεδομένων\n" + +#: help.c:423 +#, c-format +msgid "" +" VERBOSITY\n" +" controls verbosity of error reports [default, verbose, terse, sqlstate]\n" +msgstr "" +" VERBOSITY\n" +" ελέγχει την περιφραστικότητα των αναφορών σφαλμάτων [default, verbose, " +"terse, sqlstate]\n" + +#: help.c:425 +#, c-format +msgid "" +" VERSION\n" +" VERSION_NAME\n" +" VERSION_NUM\n" +" psql's version (in verbose string, short string, or numeric format)\n" +msgstr "" +" VERSION\n" +" VERSION_NAME\n" +" VERSION_NUM\n" +" η έκδοση της psql (σε περιγραφική συμβολοσειρά, σύντομη συμβολοσειρά, ή " +"αριθμητική μορφή)\n" + +#: help.c:430 +#, c-format +msgid "" +"\n" +"Display settings:\n" +msgstr "" +"\n" +"Ρυθμίσεις εμφάνισης:\n" + +#: help.c:432 +#, c-format +msgid "" +" psql --pset=NAME[=VALUE]\n" +" or \\pset NAME [VALUE] inside psql\n" +"\n" +msgstr "" +" psql —set=NAME=VALUE\n" +" ή \\set NAME VALUE μέσα σε συνεδρία psql\n" +"\n" + +#: help.c:434 +#, c-format +msgid "" +" border\n" +" border style (number)\n" +msgstr "" +" border\n" +" στυλ περιγράμματος (αριθμός)\n" + +#: help.c:436 +#, c-format +msgid "" +" columns\n" +" target width for the wrapped format\n" +msgstr "" +" columns\n" +" πλάτος προορισμού κατά την εμφάνιση αναδιπλωμένης μορφής\n" + +#: help.c:438 +#, c-format +msgid "" +" expanded (or x)\n" +" expanded output [on, off, auto]\n" +msgstr "" +" expanded (ή x)\n" +" διευρυμένη έξοδος [on, off, auto]\n" + +#: help.c:440 +#, c-format +msgid "" +" fieldsep\n" +" field separator for unaligned output (default \"%s\")\n" +msgstr "" +" fieldsep\n" +" διαχωριστικό πεδίου σε μορφή μή ευθυγραμισμένης εξόδου (προκαθοριμένο " +"“%s”)\n" + +#: help.c:443 +#, c-format +msgid "" +" fieldsep_zero\n" +" set field separator for unaligned output to a zero byte\n" +msgstr "" +" fieldsep_zero\n" +" ορίζει το διαχωριστικό πεδίου για τη μορφή μη ευθυγραμμισμένης εξόδου " +"στο μηδενικό byte\n" + +#: help.c:445 +#, c-format +msgid "" +" footer\n" +" enable or disable display of the table footer [on, off]\n" +msgstr "" +" footer\n" +" ενεργοποιεί ή απενεργοποιεί την εμφάνιση του υποσέλιδου σε πίνακα [on, " +"off]\n" + +#: help.c:447 +#, c-format +msgid "" +" format\n" +" set output format [unaligned, aligned, wrapped, html, asciidoc, ...]\n" +msgstr "" +" format\n" +" ορίζει τη μορφή εξόδου [unaligned, aligned, wrapped, html, asciidoc, …]\n" + +#: help.c:449 +#, c-format +msgid "" +" linestyle\n" +" set the border line drawing style [ascii, old-ascii, unicode]\n" +msgstr "" +" linestyle\n" +" ορίζει τη μορφή περιγράμματος [ascii, old-ascii, unicode]\n" + +#: help.c:451 +#, c-format +msgid "" +" null\n" +" set the string to be printed in place of a null value\n" +msgstr "" +" null\n" +" ορίζει τη συμβολοσειρά που θα εκτυπωθεί στη θέση κενής τιμής\n" + +#: help.c:453 +#, c-format +msgid "" +" numericlocale\n" +" enable display of a locale-specific character to separate groups of " +"digits\n" +msgstr "" +"numericlocale\n" +" ενεργοποίηση εμφάνισης ενός χαρακτήρα εντοπιότητας για το διαχωρισμό " +"ομάδων ψηφίων\n" + +#: help.c:455 +#, c-format +msgid "" +" pager\n" +" control when an external pager is used [yes, no, always]\n" +msgstr "" +" Pager\n" +" ελέγχει πότε χρησιμοποιείται εξωτερικός σελιδοποιητής [yes, no, always]\n" + +#: help.c:457 +#, c-format +msgid "" +" recordsep\n" +" record (line) separator for unaligned output\n" +msgstr "" +" recordsep\n" +" διαχωριστικό εγγραφών (σειράς) κατά την έξοδο μη ευθυγραμμισμένης " +"μορφής\n" + +#: help.c:459 +#, c-format +msgid "" +" recordsep_zero\n" +" set record separator for unaligned output to a zero byte\n" +msgstr "" +" recordsep_zero\n" +" ορίζει το διαχωριστικό εγγραφών στο μηδενικό byte κατά την έξοδο μη " +"ευθυγραμμισμένης μορφής\n" + +#: help.c:461 +#, c-format +msgid "" +" tableattr (or T)\n" +" specify attributes for table tag in html format, or proportional\n" +" column widths for left-aligned data types in latex-longtable format\n" +msgstr "" +" tableattr (ή T)\n" +" καθορίζει τα χαρακτηριστικά ενός πίνακα tag σε μορφή HTML, ή καθορίζει\n" +" αναλογικό πλάτος στηλών για τύπους δεδομένων με αριστερή στοίχιση σε " +"μορφή latex-longtable\n" + +#: help.c:464 +#, c-format +msgid "" +" title\n" +" set the table title for subsequently printed tables\n" +msgstr "" +" title\n" +" ορίζει τον τίτλο πίνακα για χρήση στους επόμενα εκτυπωμένους πίνακες\n" + +#: help.c:466 +#, c-format +msgid "" +" tuples_only\n" +" if set, only actual table data is shown\n" +msgstr "" +" tuples_only\n" +" εάν έχει ορισθεί, τότε εμφανίζονται μόνο τα δεδομένα πίνακα\n" + +#: help.c:468 +#, c-format +msgid "" +" unicode_border_linestyle\n" +" unicode_column_linestyle\n" +" unicode_header_linestyle\n" +" set the style of Unicode line drawing [single, double]\n" +msgstr "" +" unicode_border_linestyle\n" +" unicode_column_linestyle\n" +" unicode_header_linestyle\n" +" ορισμός του στυλ γραμμής Unicode [single, double]\n" + +#: help.c:473 +#, c-format +msgid "" +"\n" +"Environment variables:\n" +msgstr "" +"\n" +"Μεταβλητές περιβάλλοντος:\n" + +#: help.c:477 +#, c-format +msgid "" +" NAME=VALUE [NAME=VALUE] psql ...\n" +" or \\setenv NAME [VALUE] inside psql\n" +"\n" +msgstr "" +" NAME=VALUE [NAME=VALUE] psql …\n" +" ή \\setenv ΟΝΟΜΑ [ΤΙΜΗ] μέσα σε συνεδρία psql\n" +"\n" + +#: help.c:479 +#, c-format +msgid "" +" set NAME=VALUE\n" +" psql ...\n" +" or \\setenv NAME [VALUE] inside psql\n" +"\n" +msgstr "" +" ορίστε NAME=VALUE\n" +" psql ...\n" +" ή \\setenv NAME [VALUE] μέσα σε συνεδρία psql\n" +"\n" + +#: help.c:482 +#, c-format +msgid "" +" COLUMNS\n" +" number of columns for wrapped format\n" +msgstr "" +" COLUMNS\n" +" αριθμός στηλών για αναδιπλωμένη μορφή\n" + +#: help.c:484 +#, c-format +msgid "" +" PGAPPNAME\n" +" same as the application_name connection parameter\n" +msgstr "" +" PGAPPNAME\n" +" όμοια με την παράμετρο σύνδεσης application_name\n" + +#: help.c:486 +#, c-format +msgid "" +" PGDATABASE\n" +" same as the dbname connection parameter\n" +msgstr "" +" PGDATABASE\n" +" όμοια με την παράμετρο σύνδεσης dbname\n" + +#: help.c:488 +#, c-format +msgid "" +" PGHOST\n" +" same as the host connection parameter\n" +msgstr "" +" PGHOST\n" +" όμοια με την παράμετρο της σύνδεσης κεντρικού υπολογιστή\n" + +#: help.c:490 +#, c-format +msgid "" +" PGPASSWORD\n" +" connection password (not recommended)\n" +msgstr "" +" PGPASSWORD\n" +" κωδικός πρόσβασης σύνδεσης (δεν συνιστάται)\n" + +#: help.c:492 +#, c-format +msgid "" +" PGPASSFILE\n" +" password file name\n" +msgstr "" +" PGPASSFILE\n" +" αρχείο κωδικών πρόσβασης\n" + +#: help.c:494 +#, c-format +msgid "" +" PGPORT\n" +" same as the port connection parameter\n" +msgstr "" +" PGPORT\n" +" όμοια με την παράμετρο σύνδεσης θύρας\n" + +#: help.c:496 +#, c-format +msgid "" +" PGUSER\n" +" same as the user connection parameter\n" +msgstr "" +" PGUSER\n" +" όμοια με την παράμετρο σύνδεσης χρήστη\n" + +#: help.c:498 +#, c-format +msgid "" +" PSQL_EDITOR, EDITOR, VISUAL\n" +" editor used by the \\e, \\ef, and \\ev commands\n" +msgstr "" +" PSQL_EDITOR, EDITOR, VISUAL\n" +" πρόγραμμα επεξεργασίας κειμένου που χρησιμοποιείται από τις εντολές \\e, " +"\\ef και \\ev\n" + +#: help.c:500 +#, c-format +msgid "" +" PSQL_EDITOR_LINENUMBER_ARG\n" +" how to specify a line number when invoking the editor\n" +msgstr "" +" PSQL_EDITOR_LINENUMBER_ARG\n" +" τρόπος καθορισμού αριθμού γραμμής κατά την κλήση του προγράμματος " +"επεξεργασίας κειμένου\n" + +#: help.c:502 +#, c-format +msgid "" +" PSQL_HISTORY\n" +" alternative location for the command history file\n" +msgstr "" +" PSQL_HISTORY\n" +" εναλλακτική τοποθεσία για το αρχείο ιστορικού εντολών\n" + +#: help.c:504 +#, c-format +msgid "" +" PSQL_PAGER, PAGER\n" +" name of external pager program\n" +msgstr "" +" PSQL_PAGER, PAGER\n" +" όνομα του εξωτερικού προγράμματος σελιδοποίησης\n" + +#: help.c:506 +#, c-format +msgid "" +" PSQLRC\n" +" alternative location for the user's .psqlrc file\n" +msgstr "" +" PSQLRC\n" +" εναλλακτική τοποθεσία για το αρχείο .psqlrc του χρήστη\n" + +#: help.c:508 +#, c-format +msgid "" +" SHELL\n" +" shell used by the \\! command\n" +msgstr "" +" SHELL\n" +" shell που χρησιμοποιείται κατά την εντολή \\!\n" + +#: help.c:510 +#, c-format +msgid "" +" TMPDIR\n" +" directory for temporary files\n" +msgstr "" +" TMPDIR\n" +" κατάλογος για προσωρινά αρχεία\n" + +#: help.c:555 +msgid "Available help:\n" +msgstr "Διαθέσιμη βοήθεια:\n" + +#: help.c:650 +#, c-format +msgid "" +"Command: %s\n" +"Description: %s\n" +"Syntax:\n" +"%s\n" +"\n" +"URL: %s\n" +"\n" +msgstr "" +"Εντολή: %s\n" +"Περιγραφή: %s\n" +"Σύνταξη:\n" +"%s\n" +"\n" +"Διεύθυνση URL: %s\n" +"\n" + +#: help.c:673 +#, c-format +msgid "" +"No help available for \"%s\".\n" +"Try \\h with no arguments to see available help.\n" +msgstr "" +"Δεν υπάρχει διαθέσιμη βοήθεια για το \"%s\".\n" +"Δοκιμάστε \\h χωρίς παραμέτρους για να δείτε τη διαθέσιμη βοήθεια.\n" + +#: input.c:217 +#, c-format +msgid "could not read from input file: %m" +msgstr "δεν ήταν δυνατή η ανάγνωση από αρχείο: %m" + +#: input.c:471 input.c:509 +#, c-format +msgid "could not save history to file \"%s\": %m" +msgstr "δεν ήταν δυνατή η αποθήκευση του ιστορικού στο αρχείο “%s”: %m" + +#: input.c:528 +#, c-format +msgid "history is not supported by this installation" +msgstr "το ιστορικό δεν υποστηρίζεται από την παρούσα εγκατάσταση" + +#: large_obj.c:65 +#, c-format +msgid "%s: not connected to a database" +msgstr "%s: δεν είναι συνδεμένο σε μία βάση δεδομένων" + +#: large_obj.c:84 +#, c-format +msgid "%s: current transaction is aborted" +msgstr "%s: η τρέχουσα συναλλαγή ματαιώθηκε" + +#: large_obj.c:87 +#, c-format +msgid "%s: unknown transaction status" +msgstr "%s: άγνωστη κατάσταση συναλλαγής" + +#: large_obj.c:288 large_obj.c:299 +msgid "ID" +msgstr "ID" + +#: large_obj.c:309 +msgid "Large objects" +msgstr "Μεγάλα αντικείμενα" + +#: mainloop.c:136 +#, c-format +msgid "\\if: escaped" +msgstr "\\if: με διαφυγή" + +#: mainloop.c:195 +#, c-format +msgid "Use \"\\q\" to leave %s.\n" +msgstr "Χρησιμοποιείστε “\\q” για να εξέλθετε %s.\n" + +#: mainloop.c:217 +msgid "" +"The input is a PostgreSQL custom-format dump.\n" +"Use the pg_restore command-line client to restore this dump to a database.\n" +msgstr "" +"Η είσοδος είναι μια απόθεση PostgreSQL προσαρμοσμένης μορφής.\n" +"Χρησιμοποιήστε το πρόγραμμα γραμμής εντολών pg_restore για να επαναφέρετε " +"αυτήν την απόθεση σε μια βάση δεδομένων.\n" + +#: mainloop.c:298 +msgid "Use \\? for help or press control-C to clear the input buffer." +msgstr "" +"Χρησιμοποιείστε \\? για βοήθεια ή πληκτρολογήστε control-C για να αδειάσετε " +"την ενδιάμεση μνήμη εισόδου." + +#: mainloop.c:300 +msgid "Use \\? for help." +msgstr "Χρησιμοποιείστε \\? για βοήθεια." + +#: mainloop.c:304 +msgid "You are using psql, the command-line interface to PostgreSQL." +msgstr "Χρησιμοποιείτε psql, τη διασύνδεση γραμμής εντολών της PostgreSQL." + +#: mainloop.c:305 +#, c-format +msgid "" +"Type: \\copyright for distribution terms\n" +" \\h for help with SQL commands\n" +" \\? for help with psql commands\n" +" \\g or terminate with semicolon to execute query\n" +" \\q to quit\n" +msgstr "" +"Πληκτρολογείστε: \\copyright για τους όρους διανομής\n" +" \\h για βοήθεια σχετικά με τις εντολές SQL\n" +" \\? για βοήθεια σχετικά με τις εντολές psql\n" +" \\g ή ολοκληρώστε με ερωτηματικό για να εκτελέσετε ερώτημα\n" +" \\q για έξοδο\n" + +#: mainloop.c:329 +msgid "Use \\q to quit." +msgstr "Χρησιμοποιείστε “\\q” για να εξέλθετε." + +#: mainloop.c:332 mainloop.c:356 +msgid "Use control-D to quit." +msgstr "Πληκτρολογείστε control-D για να εξέλθετε." + +#: mainloop.c:334 mainloop.c:358 +msgid "Use control-C to quit." +msgstr "Πληκτρολογείστε control-D για να εξέλθετε." + +#: mainloop.c:465 mainloop.c:613 +#, c-format +msgid "query ignored; use \\endif or Ctrl-C to exit current \\if block" +msgstr "" +"το ερώτημα παραβλέφθηκε· χρησιμοποιήστε το \\endif ή το Ctrl-C για να " +"κλείσετε το τρέχον υπό συνθήκη \\if μπλοκ" + +#: mainloop.c:631 +#, c-format +msgid "reached EOF without finding closing \\endif(s)" +msgstr "έφτασε στο EOF χωρίς να βρεθούν τελικά \\endif(s)" + +#: psqlscanslash.l:638 +#, c-format +msgid "unterminated quoted string" +msgstr "ανολοκλήρωτη συμβολοσειρά με εισαγωγικά" + +#: psqlscanslash.l:811 +#, c-format +msgid "%s: out of memory" +msgstr "%s: έλλειψη μνήμης" + +#: sql_help.c:35 sql_help.c:38 sql_help.c:41 sql_help.c:65 sql_help.c:66 +#: sql_help.c:68 sql_help.c:70 sql_help.c:81 sql_help.c:83 sql_help.c:85 +#: sql_help.c:111 sql_help.c:117 sql_help.c:119 sql_help.c:121 sql_help.c:123 +#: sql_help.c:126 sql_help.c:128 sql_help.c:130 sql_help.c:235 sql_help.c:237 +#: sql_help.c:238 sql_help.c:240 sql_help.c:242 sql_help.c:245 sql_help.c:247 +#: sql_help.c:249 sql_help.c:251 sql_help.c:263 sql_help.c:264 sql_help.c:265 +#: sql_help.c:267 sql_help.c:316 sql_help.c:318 sql_help.c:320 sql_help.c:322 +#: sql_help.c:391 sql_help.c:396 sql_help.c:398 sql_help.c:440 sql_help.c:442 +#: sql_help.c:445 sql_help.c:447 sql_help.c:515 sql_help.c:520 sql_help.c:525 +#: sql_help.c:530 sql_help.c:535 sql_help.c:588 sql_help.c:590 sql_help.c:592 +#: sql_help.c:594 sql_help.c:596 sql_help.c:599 sql_help.c:601 sql_help.c:604 +#: sql_help.c:615 sql_help.c:617 sql_help.c:658 sql_help.c:660 sql_help.c:662 +#: sql_help.c:665 sql_help.c:667 sql_help.c:669 sql_help.c:702 sql_help.c:706 +#: sql_help.c:710 sql_help.c:729 sql_help.c:732 sql_help.c:735 sql_help.c:764 +#: sql_help.c:776 sql_help.c:784 sql_help.c:787 sql_help.c:790 sql_help.c:805 +#: sql_help.c:808 sql_help.c:837 sql_help.c:842 sql_help.c:847 sql_help.c:852 +#: sql_help.c:857 sql_help.c:879 sql_help.c:881 sql_help.c:883 sql_help.c:885 +#: sql_help.c:888 sql_help.c:890 sql_help.c:931 sql_help.c:975 sql_help.c:980 +#: sql_help.c:985 sql_help.c:990 sql_help.c:995 sql_help.c:1014 sql_help.c:1025 +#: sql_help.c:1027 sql_help.c:1046 sql_help.c:1056 sql_help.c:1058 +#: sql_help.c:1060 sql_help.c:1072 sql_help.c:1076 sql_help.c:1078 +#: sql_help.c:1090 sql_help.c:1092 sql_help.c:1094 sql_help.c:1096 +#: sql_help.c:1112 sql_help.c:1114 sql_help.c:1118 sql_help.c:1121 +#: sql_help.c:1122 sql_help.c:1123 sql_help.c:1126 sql_help.c:1128 +#: sql_help.c:1262 sql_help.c:1264 sql_help.c:1267 sql_help.c:1270 +#: sql_help.c:1272 sql_help.c:1274 sql_help.c:1277 sql_help.c:1280 +#: sql_help.c:1391 sql_help.c:1393 sql_help.c:1395 sql_help.c:1398 +#: sql_help.c:1419 sql_help.c:1422 sql_help.c:1425 sql_help.c:1428 +#: sql_help.c:1432 sql_help.c:1434 sql_help.c:1436 sql_help.c:1438 +#: sql_help.c:1452 sql_help.c:1455 sql_help.c:1457 sql_help.c:1459 +#: sql_help.c:1469 sql_help.c:1471 sql_help.c:1481 sql_help.c:1483 +#: sql_help.c:1493 sql_help.c:1496 sql_help.c:1519 sql_help.c:1521 +#: sql_help.c:1523 sql_help.c:1525 sql_help.c:1528 sql_help.c:1530 +#: sql_help.c:1533 sql_help.c:1536 sql_help.c:1586 sql_help.c:1629 +#: sql_help.c:1632 sql_help.c:1634 sql_help.c:1636 sql_help.c:1639 +#: sql_help.c:1641 sql_help.c:1643 sql_help.c:1646 sql_help.c:1696 +#: sql_help.c:1712 sql_help.c:1933 sql_help.c:2002 sql_help.c:2021 +#: sql_help.c:2034 sql_help.c:2091 sql_help.c:2098 sql_help.c:2108 +#: sql_help.c:2129 sql_help.c:2155 sql_help.c:2173 sql_help.c:2200 +#: sql_help.c:2295 sql_help.c:2340 sql_help.c:2364 sql_help.c:2387 +#: sql_help.c:2391 sql_help.c:2425 sql_help.c:2445 sql_help.c:2467 +#: sql_help.c:2481 sql_help.c:2501 sql_help.c:2524 sql_help.c:2554 +#: sql_help.c:2579 sql_help.c:2625 sql_help.c:2903 sql_help.c:2916 +#: sql_help.c:2933 sql_help.c:2949 sql_help.c:2989 sql_help.c:3041 +#: sql_help.c:3045 sql_help.c:3047 sql_help.c:3053 sql_help.c:3071 +#: sql_help.c:3098 sql_help.c:3133 sql_help.c:3145 sql_help.c:3154 +#: sql_help.c:3198 sql_help.c:3212 sql_help.c:3240 sql_help.c:3248 +#: sql_help.c:3260 sql_help.c:3270 sql_help.c:3278 sql_help.c:3286 +#: sql_help.c:3294 sql_help.c:3302 sql_help.c:3311 sql_help.c:3322 +#: sql_help.c:3330 sql_help.c:3338 sql_help.c:3346 sql_help.c:3354 +#: sql_help.c:3364 sql_help.c:3373 sql_help.c:3382 sql_help.c:3390 +#: sql_help.c:3400 sql_help.c:3411 sql_help.c:3419 sql_help.c:3428 +#: sql_help.c:3439 sql_help.c:3448 sql_help.c:3456 sql_help.c:3464 +#: sql_help.c:3472 sql_help.c:3480 sql_help.c:3488 sql_help.c:3496 +#: sql_help.c:3504 sql_help.c:3512 sql_help.c:3520 sql_help.c:3528 +#: sql_help.c:3545 sql_help.c:3554 sql_help.c:3562 sql_help.c:3579 +#: sql_help.c:3594 sql_help.c:3869 sql_help.c:3920 sql_help.c:3949 +#: sql_help.c:3962 sql_help.c:4407 sql_help.c:4455 sql_help.c:4596 +msgid "name" +msgstr "ονομασία" + +#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1783 +#: sql_help.c:3213 sql_help.c:4193 +msgid "aggregate_signature" +msgstr "aggregate_signature" + +#: sql_help.c:37 sql_help.c:67 sql_help.c:82 sql_help.c:118 sql_help.c:250 +#: sql_help.c:268 sql_help.c:399 sql_help.c:446 sql_help.c:524 sql_help.c:571 +#: sql_help.c:589 sql_help.c:616 sql_help.c:666 sql_help.c:731 sql_help.c:786 +#: sql_help.c:807 sql_help.c:846 sql_help.c:891 sql_help.c:932 sql_help.c:984 +#: sql_help.c:1016 sql_help.c:1026 sql_help.c:1059 sql_help.c:1079 +#: sql_help.c:1093 sql_help.c:1129 sql_help.c:1271 sql_help.c:1392 +#: sql_help.c:1435 sql_help.c:1456 sql_help.c:1470 sql_help.c:1482 +#: sql_help.c:1495 sql_help.c:1522 sql_help.c:1587 sql_help.c:1640 +msgid "new_name" +msgstr "new_name" + +#: sql_help.c:40 sql_help.c:69 sql_help.c:84 sql_help.c:120 sql_help.c:248 +#: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:618 +#: sql_help.c:627 sql_help.c:685 sql_help.c:705 sql_help.c:734 sql_help.c:789 +#: sql_help.c:851 sql_help.c:889 sql_help.c:989 sql_help.c:1028 sql_help.c:1057 +#: sql_help.c:1077 sql_help.c:1091 sql_help.c:1127 sql_help.c:1332 +#: sql_help.c:1394 sql_help.c:1437 sql_help.c:1458 sql_help.c:1520 +#: sql_help.c:1635 sql_help.c:2889 +msgid "new_owner" +msgstr "new_owner" + +#: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:252 sql_help.c:319 +#: sql_help.c:448 sql_help.c:534 sql_help.c:668 sql_help.c:709 sql_help.c:737 +#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1095 +#: sql_help.c:1273 sql_help.c:1439 sql_help.c:1460 sql_help.c:1472 +#: sql_help.c:1484 sql_help.c:1524 sql_help.c:1642 +msgid "new_schema" +msgstr "new_schema" + +#: sql_help.c:44 sql_help.c:1847 sql_help.c:3214 sql_help.c:4222 +msgid "where aggregate_signature is:" +msgstr "όπου aggregate_signature είναι:" + +#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:337 sql_help.c:350 +#: sql_help.c:354 sql_help.c:370 sql_help.c:373 sql_help.c:376 sql_help.c:516 +#: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:838 +#: sql_help.c:843 sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:976 +#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1801 +#: sql_help.c:1818 sql_help.c:1824 sql_help.c:1848 sql_help.c:1851 +#: sql_help.c:1854 sql_help.c:2003 sql_help.c:2022 sql_help.c:2025 +#: sql_help.c:2296 sql_help.c:2502 sql_help.c:3215 sql_help.c:3218 +#: sql_help.c:3221 sql_help.c:3312 sql_help.c:3401 sql_help.c:3429 +#: sql_help.c:3753 sql_help.c:4101 sql_help.c:4199 sql_help.c:4206 +#: sql_help.c:4212 sql_help.c:4223 sql_help.c:4226 sql_help.c:4229 +msgid "argmode" +msgstr "argmode" + +#: sql_help.c:46 sql_help.c:49 sql_help.c:52 sql_help.c:338 sql_help.c:351 +#: sql_help.c:355 sql_help.c:371 sql_help.c:374 sql_help.c:377 sql_help.c:517 +#: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:839 +#: sql_help.c:844 sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:977 +#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1802 +#: sql_help.c:1819 sql_help.c:1825 sql_help.c:1849 sql_help.c:1852 +#: sql_help.c:1855 sql_help.c:2004 sql_help.c:2023 sql_help.c:2026 +#: sql_help.c:2297 sql_help.c:2503 sql_help.c:3216 sql_help.c:3219 +#: sql_help.c:3222 sql_help.c:3313 sql_help.c:3402 sql_help.c:3430 +#: sql_help.c:4200 sql_help.c:4207 sql_help.c:4213 sql_help.c:4224 +#: sql_help.c:4227 sql_help.c:4230 +msgid "argname" +msgstr "argname" + +#: sql_help.c:47 sql_help.c:50 sql_help.c:53 sql_help.c:339 sql_help.c:352 +#: sql_help.c:356 sql_help.c:372 sql_help.c:375 sql_help.c:378 sql_help.c:518 +#: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:840 +#: sql_help.c:845 sql_help.c:850 sql_help.c:855 sql_help.c:860 sql_help.c:978 +#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1803 +#: sql_help.c:1820 sql_help.c:1826 sql_help.c:1850 sql_help.c:1853 +#: sql_help.c:1856 sql_help.c:2298 sql_help.c:2504 sql_help.c:3217 +#: sql_help.c:3220 sql_help.c:3223 sql_help.c:3314 sql_help.c:3403 +#: sql_help.c:3431 sql_help.c:4201 sql_help.c:4208 sql_help.c:4214 +#: sql_help.c:4225 sql_help.c:4228 sql_help.c:4231 +msgid "argtype" +msgstr "argtype" + +#: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:926 +#: sql_help.c:1074 sql_help.c:1453 sql_help.c:1581 sql_help.c:1613 +#: sql_help.c:1665 sql_help.c:1904 sql_help.c:1911 sql_help.c:2203 +#: sql_help.c:2245 sql_help.c:2252 sql_help.c:2261 sql_help.c:2341 +#: sql_help.c:2555 sql_help.c:2647 sql_help.c:2918 sql_help.c:3099 +#: sql_help.c:3121 sql_help.c:3261 sql_help.c:3616 sql_help.c:3788 +#: sql_help.c:3961 sql_help.c:4658 +msgid "option" +msgstr "επιλογή" + +#: sql_help.c:113 sql_help.c:927 sql_help.c:1582 sql_help.c:2342 +#: sql_help.c:2556 sql_help.c:3100 sql_help.c:3262 +msgid "where option can be:" +msgstr "όπου option μπορεί να είναι:" + +#: sql_help.c:114 sql_help.c:2137 +msgid "allowconn" +msgstr "allowconn" + +#: sql_help.c:115 sql_help.c:928 sql_help.c:1583 sql_help.c:2138 +#: sql_help.c:2343 sql_help.c:2557 sql_help.c:3101 +msgid "connlimit" +msgstr "connlimit" + +#: sql_help.c:116 sql_help.c:2139 +msgid "istemplate" +msgstr "istemplate" + +#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1276 sql_help.c:1325 +msgid "new_tablespace" +msgstr "new_tablespace" + +#: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:544 sql_help.c:546 +#: sql_help.c:547 sql_help.c:863 sql_help.c:865 sql_help.c:866 sql_help.c:935 +#: sql_help.c:939 sql_help.c:942 sql_help.c:1003 sql_help.c:1005 +#: sql_help.c:1006 sql_help.c:1140 sql_help.c:1143 sql_help.c:1590 +#: sql_help.c:1594 sql_help.c:1597 sql_help.c:2308 sql_help.c:2508 +#: sql_help.c:3980 sql_help.c:4396 +msgid "configuration_parameter" +msgstr "configuration_parameter" + +#: sql_help.c:125 sql_help.c:395 sql_help.c:466 sql_help.c:472 sql_help.c:484 +#: sql_help.c:545 sql_help.c:598 sql_help.c:677 sql_help.c:683 sql_help.c:864 +#: sql_help.c:887 sql_help.c:936 sql_help.c:1004 sql_help.c:1075 +#: sql_help.c:1117 sql_help.c:1120 sql_help.c:1125 sql_help.c:1141 +#: sql_help.c:1142 sql_help.c:1307 sql_help.c:1327 sql_help.c:1375 +#: sql_help.c:1397 sql_help.c:1454 sql_help.c:1538 sql_help.c:1591 +#: sql_help.c:1614 sql_help.c:2204 sql_help.c:2246 sql_help.c:2253 +#: sql_help.c:2262 sql_help.c:2309 sql_help.c:2310 sql_help.c:2372 +#: sql_help.c:2375 sql_help.c:2409 sql_help.c:2509 sql_help.c:2510 +#: sql_help.c:2527 sql_help.c:2648 sql_help.c:2678 sql_help.c:2783 +#: sql_help.c:2796 sql_help.c:2810 sql_help.c:2851 sql_help.c:2875 +#: sql_help.c:2892 sql_help.c:2919 sql_help.c:3122 sql_help.c:3789 +#: sql_help.c:4397 sql_help.c:4398 +msgid "value" +msgstr "value" + +#: sql_help.c:197 +msgid "target_role" +msgstr "target_role" + +#: sql_help.c:198 sql_help.c:2188 sql_help.c:2603 sql_help.c:2608 +#: sql_help.c:3735 sql_help.c:3742 sql_help.c:3756 sql_help.c:3762 +#: sql_help.c:4083 sql_help.c:4090 sql_help.c:4104 sql_help.c:4110 +msgid "schema_name" +msgstr "schema_name" + +#: sql_help.c:199 +msgid "abbreviated_grant_or_revoke" +msgstr "abbreviated_grant_or_revoke" + +#: sql_help.c:200 +msgid "where abbreviated_grant_or_revoke is one of:" +msgstr "όπου abbreviated_grant_or_revoke είναι ένα από:" + +#: sql_help.c:201 sql_help.c:202 sql_help.c:203 sql_help.c:204 sql_help.c:205 +#: sql_help.c:206 sql_help.c:207 sql_help.c:208 sql_help.c:209 sql_help.c:210 +#: sql_help.c:569 sql_help.c:605 sql_help.c:670 sql_help.c:810 sql_help.c:946 +#: sql_help.c:1275 sql_help.c:1601 sql_help.c:2346 sql_help.c:2347 +#: sql_help.c:2348 sql_help.c:2349 sql_help.c:2350 sql_help.c:2483 +#: sql_help.c:2560 sql_help.c:2561 sql_help.c:2562 sql_help.c:2563 +#: sql_help.c:2564 sql_help.c:3104 sql_help.c:3105 sql_help.c:3106 +#: sql_help.c:3107 sql_help.c:3108 sql_help.c:3768 sql_help.c:3772 +#: sql_help.c:4116 sql_help.c:4120 sql_help.c:4417 +msgid "role_name" +msgstr "role_name" + +#: sql_help.c:236 sql_help.c:459 sql_help.c:1291 sql_help.c:1293 +#: sql_help.c:1342 sql_help.c:1354 sql_help.c:1379 sql_help.c:1631 +#: sql_help.c:2158 sql_help.c:2162 sql_help.c:2265 sql_help.c:2270 +#: sql_help.c:2368 sql_help.c:2778 sql_help.c:2791 sql_help.c:2805 +#: sql_help.c:2814 sql_help.c:2826 sql_help.c:2855 sql_help.c:3820 +#: sql_help.c:3835 sql_help.c:3837 sql_help.c:4282 sql_help.c:4283 +#: sql_help.c:4292 sql_help.c:4333 sql_help.c:4334 sql_help.c:4335 +#: sql_help.c:4336 sql_help.c:4337 sql_help.c:4338 sql_help.c:4371 +#: sql_help.c:4372 sql_help.c:4377 sql_help.c:4382 sql_help.c:4521 +#: sql_help.c:4522 sql_help.c:4531 sql_help.c:4572 sql_help.c:4573 +#: sql_help.c:4574 sql_help.c:4575 sql_help.c:4576 sql_help.c:4577 +#: sql_help.c:4624 sql_help.c:4626 sql_help.c:4685 sql_help.c:4741 +#: sql_help.c:4742 sql_help.c:4751 sql_help.c:4792 sql_help.c:4793 +#: sql_help.c:4794 sql_help.c:4795 sql_help.c:4796 sql_help.c:4797 +msgid "expression" +msgstr "expression" + +#: sql_help.c:239 +msgid "domain_constraint" +msgstr "domain_constraint" + +#: sql_help.c:241 sql_help.c:243 sql_help.c:246 sql_help.c:474 sql_help.c:475 +#: sql_help.c:1268 sql_help.c:1313 sql_help.c:1314 sql_help.c:1315 +#: sql_help.c:1341 sql_help.c:1353 sql_help.c:1370 sql_help.c:1789 +#: sql_help.c:1791 sql_help.c:2161 sql_help.c:2264 sql_help.c:2269 +#: sql_help.c:2813 sql_help.c:2825 sql_help.c:3832 +msgid "constraint_name" +msgstr "constraint_name" + +#: sql_help.c:244 sql_help.c:1269 +msgid "new_constraint_name" +msgstr "new_constraint_name" + +#: sql_help.c:317 sql_help.c:1073 +msgid "new_version" +msgstr "new_version" + +#: sql_help.c:321 sql_help.c:323 +msgid "member_object" +msgstr "member_object" + +#: sql_help.c:324 +msgid "where member_object is:" +msgstr "όπου member_object είναι:" + +#: sql_help.c:325 sql_help.c:330 sql_help.c:331 sql_help.c:332 sql_help.c:333 +#: sql_help.c:334 sql_help.c:335 sql_help.c:340 sql_help.c:344 sql_help.c:346 +#: sql_help.c:348 sql_help.c:357 sql_help.c:358 sql_help.c:359 sql_help.c:360 +#: sql_help.c:361 sql_help.c:362 sql_help.c:363 sql_help.c:364 sql_help.c:367 +#: sql_help.c:368 sql_help.c:1781 sql_help.c:1786 sql_help.c:1793 +#: sql_help.c:1794 sql_help.c:1795 sql_help.c:1796 sql_help.c:1797 +#: sql_help.c:1798 sql_help.c:1799 sql_help.c:1804 sql_help.c:1806 +#: sql_help.c:1810 sql_help.c:1812 sql_help.c:1816 sql_help.c:1821 +#: sql_help.c:1822 sql_help.c:1829 sql_help.c:1830 sql_help.c:1831 +#: sql_help.c:1832 sql_help.c:1833 sql_help.c:1834 sql_help.c:1835 +#: sql_help.c:1836 sql_help.c:1837 sql_help.c:1838 sql_help.c:1839 +#: sql_help.c:1844 sql_help.c:1845 sql_help.c:4189 sql_help.c:4194 +#: sql_help.c:4195 sql_help.c:4196 sql_help.c:4197 sql_help.c:4203 +#: sql_help.c:4204 sql_help.c:4209 sql_help.c:4210 sql_help.c:4215 +#: sql_help.c:4216 sql_help.c:4217 sql_help.c:4218 sql_help.c:4219 +#: sql_help.c:4220 +msgid "object_name" +msgstr "object_name" + +#: sql_help.c:326 sql_help.c:1782 sql_help.c:4192 +msgid "aggregate_name" +msgstr "aggregate_name" + +#: sql_help.c:328 sql_help.c:1784 sql_help.c:2068 sql_help.c:2072 +#: sql_help.c:2074 sql_help.c:3231 +msgid "source_type" +msgstr "source_type" + +#: sql_help.c:329 sql_help.c:1785 sql_help.c:2069 sql_help.c:2073 +#: sql_help.c:2075 sql_help.c:3232 +msgid "target_type" +msgstr "source_type" + +#: sql_help.c:336 sql_help.c:774 sql_help.c:1800 sql_help.c:2070 +#: sql_help.c:2111 sql_help.c:2176 sql_help.c:2426 sql_help.c:2457 +#: sql_help.c:2995 sql_help.c:4100 sql_help.c:4198 sql_help.c:4311 +#: sql_help.c:4315 sql_help.c:4319 sql_help.c:4322 sql_help.c:4550 +#: sql_help.c:4554 sql_help.c:4558 sql_help.c:4561 sql_help.c:4770 +#: sql_help.c:4774 sql_help.c:4778 sql_help.c:4781 +msgid "function_name" +msgstr "function_name" + +#: sql_help.c:341 sql_help.c:767 sql_help.c:1807 sql_help.c:2450 +msgid "operator_name" +msgstr "operator_name" + +#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1808 +#: sql_help.c:2427 sql_help.c:3355 +msgid "left_type" +msgstr "source_type" + +#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1809 +#: sql_help.c:2428 sql_help.c:3356 +msgid "right_type" +msgstr "source_type" + +#: sql_help.c:345 sql_help.c:347 sql_help.c:730 sql_help.c:733 sql_help.c:736 +#: sql_help.c:765 sql_help.c:777 sql_help.c:785 sql_help.c:788 sql_help.c:791 +#: sql_help.c:1359 sql_help.c:1811 sql_help.c:1813 sql_help.c:2447 +#: sql_help.c:2468 sql_help.c:2831 sql_help.c:3365 sql_help.c:3374 +msgid "index_method" +msgstr "source_type" + +#: sql_help.c:349 sql_help.c:1817 sql_help.c:4205 +msgid "procedure_name" +msgstr "procedure_name" + +#: sql_help.c:353 sql_help.c:1823 sql_help.c:3752 sql_help.c:4211 +msgid "routine_name" +msgstr "routine_name" + +#: sql_help.c:365 sql_help.c:1331 sql_help.c:1840 sql_help.c:2304 +#: sql_help.c:2507 sql_help.c:2786 sql_help.c:2962 sql_help.c:3536 +#: sql_help.c:3766 sql_help.c:4114 +msgid "type_name" +msgstr "type_name" + +#: sql_help.c:366 sql_help.c:1841 sql_help.c:2303 sql_help.c:2506 +#: sql_help.c:2963 sql_help.c:3189 sql_help.c:3537 sql_help.c:3758 +#: sql_help.c:4106 +msgid "lang_name" +msgstr "lang_name" + +#: sql_help.c:369 +msgid "and aggregate_signature is:" +msgstr "και aggregate_signature είναι:" + +#: sql_help.c:392 sql_help.c:1935 sql_help.c:2201 +msgid "handler_function" +msgstr "handler_function" + +#: sql_help.c:393 sql_help.c:2202 +msgid "validator_function" +msgstr "validator_function" + +#: sql_help.c:441 sql_help.c:519 sql_help.c:659 sql_help.c:841 sql_help.c:979 +#: sql_help.c:1263 sql_help.c:1529 +msgid "action" +msgstr "action" + +#: sql_help.c:443 sql_help.c:450 sql_help.c:454 sql_help.c:455 sql_help.c:458 +#: sql_help.c:460 sql_help.c:461 sql_help.c:462 sql_help.c:464 sql_help.c:467 +#: sql_help.c:469 sql_help.c:470 sql_help.c:663 sql_help.c:673 sql_help.c:675 +#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1265 +#: sql_help.c:1283 sql_help.c:1287 sql_help.c:1288 sql_help.c:1292 +#: sql_help.c:1294 sql_help.c:1295 sql_help.c:1296 sql_help.c:1297 +#: sql_help.c:1299 sql_help.c:1302 sql_help.c:1303 sql_help.c:1305 +#: sql_help.c:1308 sql_help.c:1310 sql_help.c:1355 sql_help.c:1357 +#: sql_help.c:1364 sql_help.c:1373 sql_help.c:1378 sql_help.c:1630 +#: sql_help.c:1633 sql_help.c:1637 sql_help.c:1673 sql_help.c:1788 +#: sql_help.c:1901 sql_help.c:1907 sql_help.c:1920 sql_help.c:1921 +#: sql_help.c:1922 sql_help.c:2243 sql_help.c:2256 sql_help.c:2301 +#: sql_help.c:2367 sql_help.c:2373 sql_help.c:2406 sql_help.c:2633 +#: sql_help.c:2661 sql_help.c:2662 sql_help.c:2769 sql_help.c:2777 +#: sql_help.c:2787 sql_help.c:2790 sql_help.c:2800 sql_help.c:2804 +#: sql_help.c:2827 sql_help.c:2829 sql_help.c:2836 sql_help.c:2849 +#: sql_help.c:2854 sql_help.c:2872 sql_help.c:2998 sql_help.c:3134 +#: sql_help.c:3737 sql_help.c:3738 sql_help.c:3819 sql_help.c:3834 +#: sql_help.c:3836 sql_help.c:3838 sql_help.c:4085 sql_help.c:4086 +#: sql_help.c:4191 sql_help.c:4342 sql_help.c:4581 sql_help.c:4623 +#: sql_help.c:4625 sql_help.c:4627 sql_help.c:4673 sql_help.c:4801 +msgid "column_name" +msgstr "column_name" + +#: sql_help.c:444 sql_help.c:664 sql_help.c:1266 sql_help.c:1638 +msgid "new_column_name" +msgstr "new_column_name" + +#: sql_help.c:449 sql_help.c:540 sql_help.c:672 sql_help.c:862 sql_help.c:1000 +#: sql_help.c:1282 sql_help.c:1539 +msgid "where action is one of:" +msgstr "όπου action είναι ένα από:" + +#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1284 +#: sql_help.c:1289 sql_help.c:1541 sql_help.c:1545 sql_help.c:2156 +#: sql_help.c:2244 sql_help.c:2446 sql_help.c:2626 sql_help.c:2770 +#: sql_help.c:3043 sql_help.c:3921 +msgid "data_type" +msgstr "data_type" + +#: sql_help.c:452 sql_help.c:457 sql_help.c:1285 sql_help.c:1290 +#: sql_help.c:1542 sql_help.c:1546 sql_help.c:2157 sql_help.c:2247 +#: sql_help.c:2369 sql_help.c:2771 sql_help.c:2779 sql_help.c:2792 +#: sql_help.c:2806 sql_help.c:3044 sql_help.c:3050 sql_help.c:3829 +msgid "collation" +msgstr "collation" + +#: sql_help.c:453 sql_help.c:1286 sql_help.c:2248 sql_help.c:2257 +#: sql_help.c:2772 sql_help.c:2788 sql_help.c:2801 +msgid "column_constraint" +msgstr "column_constraint" + +#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1304 sql_help.c:4670 +msgid "integer" +msgstr "integer" + +#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1306 +#: sql_help.c:1309 +msgid "attribute_option" +msgstr "attribute_option" + +#: sql_help.c:473 sql_help.c:1311 sql_help.c:2249 sql_help.c:2258 +#: sql_help.c:2773 sql_help.c:2789 sql_help.c:2802 +msgid "table_constraint" +msgstr "table_constraint" + +#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1316 +#: sql_help.c:1317 sql_help.c:1318 sql_help.c:1319 sql_help.c:1842 +msgid "trigger_name" +msgstr "trigger_name" + +#: sql_help.c:480 sql_help.c:481 sql_help.c:1329 sql_help.c:1330 +#: sql_help.c:2250 sql_help.c:2255 sql_help.c:2776 sql_help.c:2799 +msgid "parent_table" +msgstr "parent_table" + +#: sql_help.c:539 sql_help.c:595 sql_help.c:661 sql_help.c:861 sql_help.c:999 +#: sql_help.c:1498 sql_help.c:2187 +msgid "extension_name" +msgstr "extension_name" + +#: sql_help.c:541 sql_help.c:1001 sql_help.c:2305 +msgid "execution_cost" +msgstr "execution_cost" + +#: sql_help.c:542 sql_help.c:1002 sql_help.c:2306 +msgid "result_rows" +msgstr "result_rows" + +#: sql_help.c:543 sql_help.c:2307 +msgid "support_function" +msgstr "support_function" + +#: sql_help.c:564 sql_help.c:566 sql_help.c:925 sql_help.c:933 sql_help.c:937 +#: sql_help.c:940 sql_help.c:943 sql_help.c:1580 sql_help.c:1588 +#: sql_help.c:1592 sql_help.c:1595 sql_help.c:1598 sql_help.c:2604 +#: sql_help.c:2606 sql_help.c:2609 sql_help.c:2610 sql_help.c:3736 +#: sql_help.c:3740 sql_help.c:3743 sql_help.c:3745 sql_help.c:3747 +#: sql_help.c:3749 sql_help.c:3751 sql_help.c:3757 sql_help.c:3759 +#: sql_help.c:3761 sql_help.c:3763 sql_help.c:3765 sql_help.c:3767 +#: sql_help.c:3769 sql_help.c:3770 sql_help.c:4084 sql_help.c:4088 +#: sql_help.c:4091 sql_help.c:4093 sql_help.c:4095 sql_help.c:4097 +#: sql_help.c:4099 sql_help.c:4105 sql_help.c:4107 sql_help.c:4109 +#: sql_help.c:4111 sql_help.c:4113 sql_help.c:4115 sql_help.c:4117 +#: sql_help.c:4118 +msgid "role_specification" +msgstr "role_specification" + +#: sql_help.c:565 sql_help.c:567 sql_help.c:1611 sql_help.c:2130 +#: sql_help.c:2612 sql_help.c:3119 sql_help.c:3570 sql_help.c:4427 +msgid "user_name" +msgstr "user_name" + +#: sql_help.c:568 sql_help.c:945 sql_help.c:1600 sql_help.c:2611 +#: sql_help.c:3771 sql_help.c:4119 +msgid "where role_specification can be:" +msgstr "όπου role_specification μπορεί να είναι:" + +#: sql_help.c:570 +msgid "group_name" +msgstr "group_name" + +#: sql_help.c:591 sql_help.c:1376 sql_help.c:2136 sql_help.c:2376 +#: sql_help.c:2410 sql_help.c:2784 sql_help.c:2797 sql_help.c:2811 +#: sql_help.c:2852 sql_help.c:2876 sql_help.c:2888 sql_help.c:3764 +#: sql_help.c:4112 +msgid "tablespace_name" +msgstr "group_name" + +#: sql_help.c:593 sql_help.c:681 sql_help.c:1324 sql_help.c:1333 +#: sql_help.c:1371 sql_help.c:1722 +msgid "index_name" +msgstr "index_name" + +#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1326 +#: sql_help.c:1328 sql_help.c:1374 sql_help.c:2374 sql_help.c:2408 +#: sql_help.c:2782 sql_help.c:2795 sql_help.c:2809 sql_help.c:2850 +#: sql_help.c:2874 +msgid "storage_parameter" +msgstr "storage_parameter" + +#: sql_help.c:602 +msgid "column_number" +msgstr "column_number" + +#: sql_help.c:626 sql_help.c:1805 sql_help.c:4202 +msgid "large_object_oid" +msgstr "large_object_oid" + +#: sql_help.c:713 sql_help.c:2431 +msgid "res_proc" +msgstr "res_proc" + +#: sql_help.c:714 sql_help.c:2432 +msgid "join_proc" +msgstr "join_proc" + +#: sql_help.c:766 sql_help.c:778 sql_help.c:2449 +msgid "strategy_number" +msgstr "strategy_number" + +#: sql_help.c:768 sql_help.c:769 sql_help.c:772 sql_help.c:773 sql_help.c:779 +#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2451 sql_help.c:2452 +#: sql_help.c:2455 sql_help.c:2456 +msgid "op_type" +msgstr "op_type" + +#: sql_help.c:770 sql_help.c:2453 +msgid "sort_family_name" +msgstr "index_name" + +#: sql_help.c:771 sql_help.c:781 sql_help.c:2454 +msgid "support_number" +msgstr "support_number" + +#: sql_help.c:775 sql_help.c:2071 sql_help.c:2458 sql_help.c:2965 +#: sql_help.c:2967 +msgid "argument_type" +msgstr "argument_type" + +#: sql_help.c:806 sql_help.c:809 sql_help.c:880 sql_help.c:882 sql_help.c:884 +#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1494 sql_help.c:1497 +#: sql_help.c:1672 sql_help.c:1721 sql_help.c:1790 sql_help.c:1815 +#: sql_help.c:1828 sql_help.c:1843 sql_help.c:1900 sql_help.c:1906 +#: sql_help.c:2242 sql_help.c:2254 sql_help.c:2365 sql_help.c:2405 +#: sql_help.c:2482 sql_help.c:2525 sql_help.c:2581 sql_help.c:2632 +#: sql_help.c:2663 sql_help.c:2768 sql_help.c:2785 sql_help.c:2798 +#: sql_help.c:2871 sql_help.c:2991 sql_help.c:3168 sql_help.c:3391 +#: sql_help.c:3440 sql_help.c:3546 sql_help.c:3734 sql_help.c:3739 +#: sql_help.c:3785 sql_help.c:3817 sql_help.c:4082 sql_help.c:4087 +#: sql_help.c:4190 sql_help.c:4297 sql_help.c:4299 sql_help.c:4348 +#: sql_help.c:4387 sql_help.c:4536 sql_help.c:4538 sql_help.c:4587 +#: sql_help.c:4621 sql_help.c:4672 sql_help.c:4756 sql_help.c:4758 +#: sql_help.c:4807 +msgid "table_name" +msgstr "table_name" + +#: sql_help.c:811 sql_help.c:2484 +msgid "using_expression" +msgstr "using_expression" + +#: sql_help.c:812 sql_help.c:2485 +msgid "check_expression" +msgstr "check_expression" + +#: sql_help.c:886 sql_help.c:2526 +msgid "publication_parameter" +msgstr "publication_parameter" + +#: sql_help.c:929 sql_help.c:1584 sql_help.c:2344 sql_help.c:2558 +#: sql_help.c:3102 +msgid "password" +msgstr "password" + +#: sql_help.c:930 sql_help.c:1585 sql_help.c:2345 sql_help.c:2559 +#: sql_help.c:3103 +msgid "timestamp" +msgstr "timestamp" + +#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1589 +#: sql_help.c:1593 sql_help.c:1596 sql_help.c:1599 sql_help.c:3744 +#: sql_help.c:4092 +msgid "database_name" +msgstr "database_name" + +#: sql_help.c:1048 sql_help.c:2627 +msgid "increment" +msgstr "increment" + +#: sql_help.c:1049 sql_help.c:2628 +msgid "minvalue" +msgstr "minvalue" + +#: sql_help.c:1050 sql_help.c:2629 +msgid "maxvalue" +msgstr "maxvalue" + +#: sql_help.c:1051 sql_help.c:2630 sql_help.c:4295 sql_help.c:4385 +#: sql_help.c:4534 sql_help.c:4689 sql_help.c:4754 +msgid "start" +msgstr "start" + +#: sql_help.c:1052 sql_help.c:1301 +msgid "restart" +msgstr "restart" + +#: sql_help.c:1053 sql_help.c:2631 +msgid "cache" +msgstr "cache" + +#: sql_help.c:1097 +msgid "new_target" +msgstr "new_target" + +#: sql_help.c:1113 sql_help.c:2675 +msgid "conninfo" +msgstr "conninfo" + +#: sql_help.c:1115 sql_help.c:2676 +msgid "publication_name" +msgstr "publication_name" + +#: sql_help.c:1116 +msgid "set_publication_option" +msgstr "set_publication_option" + +#: sql_help.c:1119 +msgid "refresh_option" +msgstr "refresh_option" + +#: sql_help.c:1124 sql_help.c:2677 +msgid "subscription_parameter" +msgstr "subscription_parameter" + +#: sql_help.c:1278 sql_help.c:1281 +msgid "partition_name" +msgstr "partition_name" + +#: sql_help.c:1279 sql_help.c:2259 sql_help.c:2803 +msgid "partition_bound_spec" +msgstr "partition_bound_spec" + +#: sql_help.c:1298 sql_help.c:1345 sql_help.c:2817 +msgid "sequence_options" +msgstr "sequence_options" + +#: sql_help.c:1300 +msgid "sequence_option" +msgstr "sequence_option" + +#: sql_help.c:1312 +msgid "table_constraint_using_index" +msgstr "table_constraint_using_index" + +#: sql_help.c:1320 sql_help.c:1321 sql_help.c:1322 sql_help.c:1323 +msgid "rewrite_rule_name" +msgstr "rewrite_rule_name" + +#: sql_help.c:1334 sql_help.c:2842 +msgid "and partition_bound_spec is:" +msgstr "και partition_bound_spec είναι:" + +#: sql_help.c:1335 sql_help.c:1336 sql_help.c:1337 sql_help.c:2843 +#: sql_help.c:2844 sql_help.c:2845 +msgid "partition_bound_expr" +msgstr "partition_bound_expr" + +#: sql_help.c:1338 sql_help.c:1339 sql_help.c:2846 sql_help.c:2847 +msgid "numeric_literal" +msgstr "numeric_literal" + +#: sql_help.c:1340 +msgid "and column_constraint is:" +msgstr "και column_constraint είναι:" + +#: sql_help.c:1343 sql_help.c:2266 sql_help.c:2299 sql_help.c:2505 +#: sql_help.c:2815 +msgid "default_expr" +msgstr "default_expr" + +#: sql_help.c:1344 sql_help.c:2267 sql_help.c:2816 +msgid "generation_expr" +msgstr "generation_expr" + +#: sql_help.c:1346 sql_help.c:1347 sql_help.c:1356 sql_help.c:1358 +#: sql_help.c:1362 sql_help.c:2818 sql_help.c:2819 sql_help.c:2828 +#: sql_help.c:2830 sql_help.c:2834 +msgid "index_parameters" +msgstr "index_parameters" + +#: sql_help.c:1348 sql_help.c:1365 sql_help.c:2820 sql_help.c:2837 +msgid "reftable" +msgstr "reftable" + +#: sql_help.c:1349 sql_help.c:1366 sql_help.c:2821 sql_help.c:2838 +msgid "refcolumn" +msgstr "refcolumn" + +#: sql_help.c:1350 sql_help.c:1351 sql_help.c:1367 sql_help.c:1368 +#: sql_help.c:2822 sql_help.c:2823 sql_help.c:2839 sql_help.c:2840 +msgid "referential_action" +msgstr "referential_action" + +#: sql_help.c:1352 sql_help.c:2268 sql_help.c:2824 +msgid "and table_constraint is:" +msgstr "και table_constraint είναι:" + +#: sql_help.c:1360 sql_help.c:2832 +msgid "exclude_element" +msgstr "exclude_element" + +#: sql_help.c:1361 sql_help.c:2833 sql_help.c:4293 sql_help.c:4383 +#: sql_help.c:4532 sql_help.c:4687 sql_help.c:4752 +msgid "operator" +msgstr "operator" + +#: sql_help.c:1363 sql_help.c:2377 sql_help.c:2835 +msgid "predicate" +msgstr "predicate" + +#: sql_help.c:1369 +msgid "and table_constraint_using_index is:" +msgstr "και table_constraint_using_index είναι:" + +#: sql_help.c:1372 sql_help.c:2848 +msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" +msgstr "" +"index_parameters για περιορισμούς UNIQUE, PRIMARY KEY και EXCLUDE είναι:" + +#: sql_help.c:1377 sql_help.c:2853 +msgid "exclude_element in an EXCLUDE constraint is:" +msgstr "exclude_element σε έναν περιορισμό τύπου EXCLUDE είναι:" + +#: sql_help.c:1380 sql_help.c:2370 sql_help.c:2780 sql_help.c:2793 +#: sql_help.c:2807 sql_help.c:2856 sql_help.c:3830 +msgid "opclass" +msgstr "opclass" + +#: sql_help.c:1396 sql_help.c:1399 sql_help.c:2891 +msgid "tablespace_option" +msgstr "tablespace_option" + +#: sql_help.c:1420 sql_help.c:1423 sql_help.c:1429 sql_help.c:1433 +msgid "token_type" +msgstr "token_type" + +#: sql_help.c:1421 sql_help.c:1424 +msgid "dictionary_name" +msgstr "dictionary_name" + +#: sql_help.c:1426 sql_help.c:1430 +msgid "old_dictionary" +msgstr "old_dictionary" + +#: sql_help.c:1427 sql_help.c:1431 +msgid "new_dictionary" +msgstr "new_dictionary" + +#: sql_help.c:1526 sql_help.c:1540 sql_help.c:1543 sql_help.c:1544 +#: sql_help.c:3042 +msgid "attribute_name" +msgstr "attribute_name" + +#: sql_help.c:1527 +msgid "new_attribute_name" +msgstr "new_attribute_name" + +#: sql_help.c:1531 sql_help.c:1535 +msgid "new_enum_value" +msgstr "new_enum_value" + +#: sql_help.c:1532 +msgid "neighbor_enum_value" +msgstr "neighbor_enum_value" + +#: sql_help.c:1534 +msgid "existing_enum_value" +msgstr "existing_enum_value" + +#: sql_help.c:1537 +msgid "property" +msgstr "property" + +#: sql_help.c:1612 sql_help.c:2251 sql_help.c:2260 sql_help.c:2643 +#: sql_help.c:3120 sql_help.c:3571 sql_help.c:3750 sql_help.c:3786 +#: sql_help.c:4098 +msgid "server_name" +msgstr "server_name" + +#: sql_help.c:1644 sql_help.c:1647 sql_help.c:3135 +msgid "view_option_name" +msgstr "view_option_name" + +#: sql_help.c:1645 sql_help.c:3136 +msgid "view_option_value" +msgstr "view_option_value" + +#: sql_help.c:1666 sql_help.c:1667 sql_help.c:4659 sql_help.c:4660 +msgid "table_and_columns" +msgstr "table_and_columns" + +#: sql_help.c:1668 sql_help.c:1912 sql_help.c:3619 sql_help.c:3963 +#: sql_help.c:4661 +msgid "where option can be one of:" +msgstr "όπου option μπορεί να είναι ένα από:" + +#: sql_help.c:1669 sql_help.c:1670 sql_help.c:1914 sql_help.c:1917 +#: sql_help.c:2096 sql_help.c:3620 sql_help.c:3621 sql_help.c:3622 +#: sql_help.c:3623 sql_help.c:3624 sql_help.c:3625 sql_help.c:3626 +#: sql_help.c:3627 sql_help.c:4662 sql_help.c:4663 sql_help.c:4664 +#: sql_help.c:4665 sql_help.c:4666 sql_help.c:4667 sql_help.c:4668 +#: sql_help.c:4669 +msgid "boolean" +msgstr "boolean" + +#: sql_help.c:1671 sql_help.c:4671 +msgid "and table_and_columns is:" +msgstr "και table_and_columns είναι:" + +#: sql_help.c:1687 sql_help.c:4443 sql_help.c:4445 sql_help.c:4469 +msgid "transaction_mode" +msgstr "transaction_mode" + +#: sql_help.c:1688 sql_help.c:4446 sql_help.c:4470 +msgid "where transaction_mode is one of:" +msgstr "όπου transaction_mode είναι ένα από:" + +#: sql_help.c:1697 sql_help.c:4303 sql_help.c:4312 sql_help.c:4316 +#: sql_help.c:4320 sql_help.c:4323 sql_help.c:4542 sql_help.c:4551 +#: sql_help.c:4555 sql_help.c:4559 sql_help.c:4562 sql_help.c:4762 +#: sql_help.c:4771 sql_help.c:4775 sql_help.c:4779 sql_help.c:4782 +msgid "argument" +msgstr "argument" + +#: sql_help.c:1787 +msgid "relation_name" +msgstr "relation_name" + +#: sql_help.c:1792 sql_help.c:3746 sql_help.c:4094 +msgid "domain_name" +msgstr "domain_name" + +#: sql_help.c:1814 +msgid "policy_name" +msgstr "policy_name" + +#: sql_help.c:1827 +msgid "rule_name" +msgstr "rule_name" + +#: sql_help.c:1846 +msgid "text" +msgstr "text" + +#: sql_help.c:1871 sql_help.c:3930 sql_help.c:4135 +msgid "transaction_id" +msgstr "transaction_id" + +#: sql_help.c:1902 sql_help.c:1909 sql_help.c:3856 +msgid "filename" +msgstr "filename" + +#: sql_help.c:1903 sql_help.c:1910 sql_help.c:2583 sql_help.c:2584 +#: sql_help.c:2585 +msgid "command" +msgstr "command" + +#: sql_help.c:1905 sql_help.c:2582 sql_help.c:2994 sql_help.c:3171 +#: sql_help.c:3840 sql_help.c:4286 sql_help.c:4288 sql_help.c:4376 +#: sql_help.c:4378 sql_help.c:4525 sql_help.c:4527 sql_help.c:4630 +#: sql_help.c:4745 sql_help.c:4747 +msgid "condition" +msgstr "condition" + +#: sql_help.c:1908 sql_help.c:2411 sql_help.c:2877 sql_help.c:3137 +#: sql_help.c:3155 sql_help.c:3821 +msgid "query" +msgstr "query" + +#: sql_help.c:1913 +msgid "format_name" +msgstr "format_name" + +#: sql_help.c:1915 +msgid "delimiter_character" +msgstr "delimiter_character" + +#: sql_help.c:1916 +msgid "null_string" +msgstr "null_string" + +#: sql_help.c:1918 +msgid "quote_character" +msgstr "quote_character" + +#: sql_help.c:1919 +msgid "escape_character" +msgstr "escape_character" + +#: sql_help.c:1923 +msgid "encoding_name" +msgstr "encoding_name" + +#: sql_help.c:1934 +msgid "access_method_type" +msgstr "access_method_type" + +#: sql_help.c:2005 sql_help.c:2024 sql_help.c:2027 +msgid "arg_data_type" +msgstr "arg_data_type" + +#: sql_help.c:2006 sql_help.c:2028 sql_help.c:2036 +msgid "sfunc" +msgstr "sfunc" + +#: sql_help.c:2007 sql_help.c:2029 sql_help.c:2037 +msgid "state_data_type" +msgstr "state_data_type" + +#: sql_help.c:2008 sql_help.c:2030 sql_help.c:2038 +msgid "state_data_size" +msgstr "state_data_size" + +#: sql_help.c:2009 sql_help.c:2031 sql_help.c:2039 +msgid "ffunc" +msgstr "ffunc" + +#: sql_help.c:2010 sql_help.c:2040 +msgid "combinefunc" +msgstr "combinefunc" + +#: sql_help.c:2011 sql_help.c:2041 +msgid "serialfunc" +msgstr "serialfunc" + +#: sql_help.c:2012 sql_help.c:2042 +msgid "deserialfunc" +msgstr "deserialfunc" + +#: sql_help.c:2013 sql_help.c:2032 sql_help.c:2043 +msgid "initial_condition" +msgstr "initial_condition" + +#: sql_help.c:2014 sql_help.c:2044 +msgid "msfunc" +msgstr "msfunc" + +#: sql_help.c:2015 sql_help.c:2045 +msgid "minvfunc" +msgstr "minvfunc" + +#: sql_help.c:2016 sql_help.c:2046 +msgid "mstate_data_type" +msgstr "mstate_data_type" + +#: sql_help.c:2017 sql_help.c:2047 +msgid "mstate_data_size" +msgstr "mstate_data_size" + +#: sql_help.c:2018 sql_help.c:2048 +msgid "mffunc" +msgstr "mffunc" + +#: sql_help.c:2019 sql_help.c:2049 +msgid "minitial_condition" +msgstr "minitial_condition" + +#: sql_help.c:2020 sql_help.c:2050 +msgid "sort_operator" +msgstr "sort_operator" + +#: sql_help.c:2033 +msgid "or the old syntax" +msgstr "ή την παλαιά σύνταξη" + +#: sql_help.c:2035 +msgid "base_type" +msgstr "base_type" + +#: sql_help.c:2092 sql_help.c:2133 +msgid "locale" +msgstr "locale" + +#: sql_help.c:2093 sql_help.c:2134 +msgid "lc_collate" +msgstr "lc_collate" + +#: sql_help.c:2094 sql_help.c:2135 +msgid "lc_ctype" +msgstr "lc_ctype" + +#: sql_help.c:2095 sql_help.c:4188 +msgid "provider" +msgstr "provider" + +#: sql_help.c:2097 sql_help.c:2189 +msgid "version" +msgstr "version" + +#: sql_help.c:2099 +msgid "existing_collation" +msgstr "existing_collation" + +#: sql_help.c:2109 +msgid "source_encoding" +msgstr "source_encoding" + +#: sql_help.c:2110 +msgid "dest_encoding" +msgstr "dest_encoding" + +#: sql_help.c:2131 sql_help.c:2917 +msgid "template" +msgstr "template" + +#: sql_help.c:2132 +msgid "encoding" +msgstr "dest_encoding" + +#: sql_help.c:2159 +msgid "constraint" +msgstr "constraint" + +#: sql_help.c:2160 +msgid "where constraint is:" +msgstr "όπου constraint είναι:" + +#: sql_help.c:2174 sql_help.c:2580 sql_help.c:2990 +msgid "event" +msgstr "event" + +#: sql_help.c:2175 +msgid "filter_variable" +msgstr "filter_variable" + +#: sql_help.c:2263 sql_help.c:2812 +msgid "where column_constraint is:" +msgstr "όπου column_constraint είναι:" + +#: sql_help.c:2300 +msgid "rettype" +msgstr "rettype" + +#: sql_help.c:2302 +msgid "column_type" +msgstr "column_type" + +#: sql_help.c:2311 sql_help.c:2511 +msgid "definition" +msgstr "definition" + +#: sql_help.c:2312 sql_help.c:2512 +msgid "obj_file" +msgstr "obj_file" + +#: sql_help.c:2313 sql_help.c:2513 +msgid "link_symbol" +msgstr "link_symbol" + +#: sql_help.c:2351 sql_help.c:2565 sql_help.c:3109 +msgid "uid" +msgstr "uid" + +#: sql_help.c:2366 sql_help.c:2407 sql_help.c:2781 sql_help.c:2794 +#: sql_help.c:2808 sql_help.c:2873 +msgid "method" +msgstr "method" + +#: sql_help.c:2371 +msgid "opclass_parameter" +msgstr "opclass_parameter" + +#: sql_help.c:2388 +msgid "call_handler" +msgstr "call_handler" + +#: sql_help.c:2389 +msgid "inline_handler" +msgstr "inline_handler" + +#: sql_help.c:2390 +msgid "valfunction" +msgstr "valfunction" + +#: sql_help.c:2429 +msgid "com_op" +msgstr "com_op" + +#: sql_help.c:2430 +msgid "neg_op" +msgstr "neg_op" + +#: sql_help.c:2448 +msgid "family_name" +msgstr "family_name" + +#: sql_help.c:2459 +msgid "storage_type" +msgstr "storage_type" + +#: sql_help.c:2586 sql_help.c:2997 +msgid "where event can be one of:" +msgstr "όπου event μπορεί να είναι ένα από:" + +#: sql_help.c:2605 sql_help.c:2607 +msgid "schema_element" +msgstr "schema_element" + +#: sql_help.c:2644 +msgid "server_type" +msgstr "server_type" + +#: sql_help.c:2645 +msgid "server_version" +msgstr "server_version" + +#: sql_help.c:2646 sql_help.c:3748 sql_help.c:4096 +msgid "fdw_name" +msgstr "fdw_name" + +#: sql_help.c:2659 +msgid "statistics_name" +msgstr "statistics_name" + +#: sql_help.c:2660 +msgid "statistics_kind" +msgstr "statistics_kind" + +#: sql_help.c:2674 +msgid "subscription_name" +msgstr "subscription_name" + +#: sql_help.c:2774 +msgid "source_table" +msgstr "source_table" + +#: sql_help.c:2775 +msgid "like_option" +msgstr "like_option" + +#: sql_help.c:2841 +msgid "and like_option is:" +msgstr "και like_option είναι:" + +#: sql_help.c:2890 +msgid "directory" +msgstr "directory" + +#: sql_help.c:2904 +msgid "parser_name" +msgstr "parser_name" + +#: sql_help.c:2905 +msgid "source_config" +msgstr "source_config" + +#: sql_help.c:2934 +msgid "start_function" +msgstr "start_function" + +#: sql_help.c:2935 +msgid "gettoken_function" +msgstr "gettoken_function" + +#: sql_help.c:2936 +msgid "end_function" +msgstr "end_function" + +#: sql_help.c:2937 +msgid "lextypes_function" +msgstr "lextypes_function" + +#: sql_help.c:2938 +msgid "headline_function" +msgstr "headline_function" + +#: sql_help.c:2950 +msgid "init_function" +msgstr "init_function" + +#: sql_help.c:2951 +msgid "lexize_function" +msgstr "lexize_function" + +#: sql_help.c:2964 +msgid "from_sql_function_name" +msgstr "from_sql_function_name" + +#: sql_help.c:2966 +msgid "to_sql_function_name" +msgstr "to_sql_function_name" + +#: sql_help.c:2992 +msgid "referenced_table_name" +msgstr "referenced_table_name" + +#: sql_help.c:2993 +msgid "transition_relation_name" +msgstr "transition_relation_name" + +#: sql_help.c:2996 +msgid "arguments" +msgstr "arguments" + +#: sql_help.c:3046 sql_help.c:4221 +msgid "label" +msgstr "label" + +#: sql_help.c:3048 +msgid "subtype" +msgstr "subtype" + +#: sql_help.c:3049 +msgid "subtype_operator_class" +msgstr "subtype_operator_class" + +#: sql_help.c:3051 +msgid "canonical_function" +msgstr "canonical_function" + +#: sql_help.c:3052 +msgid "subtype_diff_function" +msgstr "subtype_diff_function" + +#: sql_help.c:3054 +msgid "input_function" +msgstr "input_function" + +#: sql_help.c:3055 +msgid "output_function" +msgstr "output_function" + +#: sql_help.c:3056 +msgid "receive_function" +msgstr "receive_function" + +#: sql_help.c:3057 +msgid "send_function" +msgstr "send_function" + +#: sql_help.c:3058 +msgid "type_modifier_input_function" +msgstr "type_modifier_input_function" + +#: sql_help.c:3059 +msgid "type_modifier_output_function" +msgstr "type_modifier_output_function" + +#: sql_help.c:3060 +msgid "analyze_function" +msgstr "analyze_function" + +#: sql_help.c:3061 +msgid "internallength" +msgstr "internallength" + +#: sql_help.c:3062 +msgid "alignment" +msgstr "alignment" + +#: sql_help.c:3063 +msgid "storage" +msgstr "storage" + +#: sql_help.c:3064 +msgid "like_type" +msgstr "like_type" + +#: sql_help.c:3065 +msgid "category" +msgstr "category" + +#: sql_help.c:3066 +msgid "preferred" +msgstr "preferred" + +#: sql_help.c:3067 +msgid "default" +msgstr "default" + +#: sql_help.c:3068 +msgid "element" +msgstr "element" + +#: sql_help.c:3069 +msgid "delimiter" +msgstr "delimiter" + +#: sql_help.c:3070 +msgid "collatable" +msgstr "collatable" + +#: sql_help.c:3167 sql_help.c:3816 sql_help.c:4281 sql_help.c:4370 +#: sql_help.c:4520 sql_help.c:4620 sql_help.c:4740 +msgid "with_query" +msgstr "with_query" + +#: sql_help.c:3169 sql_help.c:3818 sql_help.c:4300 sql_help.c:4306 +#: sql_help.c:4309 sql_help.c:4313 sql_help.c:4317 sql_help.c:4325 +#: sql_help.c:4539 sql_help.c:4545 sql_help.c:4548 sql_help.c:4552 +#: sql_help.c:4556 sql_help.c:4564 sql_help.c:4622 sql_help.c:4759 +#: sql_help.c:4765 sql_help.c:4768 sql_help.c:4772 sql_help.c:4776 +#: sql_help.c:4784 +msgid "alias" +msgstr "alias" + +#: sql_help.c:3170 sql_help.c:4285 sql_help.c:4327 sql_help.c:4329 +#: sql_help.c:4375 sql_help.c:4524 sql_help.c:4566 sql_help.c:4568 +#: sql_help.c:4629 sql_help.c:4744 sql_help.c:4786 sql_help.c:4788 +msgid "from_item" +msgstr "from_item" + +#: sql_help.c:3172 sql_help.c:3653 sql_help.c:3897 sql_help.c:4631 +msgid "cursor_name" +msgstr "cursor_name" + +#: sql_help.c:3173 sql_help.c:3824 sql_help.c:4632 +msgid "output_expression" +msgstr "output_expression" + +#: sql_help.c:3174 sql_help.c:3825 sql_help.c:4284 sql_help.c:4373 +#: sql_help.c:4523 sql_help.c:4633 sql_help.c:4743 +msgid "output_name" +msgstr "output_name" + +#: sql_help.c:3190 +msgid "code" +msgstr "code" + +#: sql_help.c:3595 +msgid "parameter" +msgstr "parameter" + +#: sql_help.c:3617 sql_help.c:3618 sql_help.c:3922 +msgid "statement" +msgstr "statement" + +#: sql_help.c:3652 sql_help.c:3896 +msgid "direction" +msgstr "direction" + +#: sql_help.c:3654 sql_help.c:3898 +msgid "where direction can be empty or one of:" +msgstr "όπου direction μπορεί να είναι άδειο ή ένα από:" + +#: sql_help.c:3655 sql_help.c:3656 sql_help.c:3657 sql_help.c:3658 +#: sql_help.c:3659 sql_help.c:3899 sql_help.c:3900 sql_help.c:3901 +#: sql_help.c:3902 sql_help.c:3903 sql_help.c:4294 sql_help.c:4296 +#: sql_help.c:4384 sql_help.c:4386 sql_help.c:4533 sql_help.c:4535 +#: sql_help.c:4688 sql_help.c:4690 sql_help.c:4753 sql_help.c:4755 +msgid "count" +msgstr "count" + +#: sql_help.c:3741 sql_help.c:4089 +msgid "sequence_name" +msgstr "sequence_name" + +#: sql_help.c:3754 sql_help.c:4102 +msgid "arg_name" +msgstr "arg_name" + +#: sql_help.c:3755 sql_help.c:4103 +msgid "arg_type" +msgstr "arg_type" + +#: sql_help.c:3760 sql_help.c:4108 +msgid "loid" +msgstr "loid" + +#: sql_help.c:3784 +msgid "remote_schema" +msgstr "remote_schema" + +#: sql_help.c:3787 +msgid "local_schema" +msgstr "local_schema" + +#: sql_help.c:3822 +msgid "conflict_target" +msgstr "conflict_target" + +#: sql_help.c:3823 +msgid "conflict_action" +msgstr "conflict_action" + +#: sql_help.c:3826 +msgid "where conflict_target can be one of:" +msgstr "όπου conflict_target μπορεί να είναι ένα από:" + +#: sql_help.c:3827 +msgid "index_column_name" +msgstr "index_column_name" + +#: sql_help.c:3828 +msgid "index_expression" +msgstr "index_expression" + +#: sql_help.c:3831 +msgid "index_predicate" +msgstr "index_predicate" + +#: sql_help.c:3833 +msgid "and conflict_action is one of:" +msgstr "και conflict_action είναι ένα από:" + +#: sql_help.c:3839 sql_help.c:4628 +msgid "sub-SELECT" +msgstr "sub-SELECT" + +#: sql_help.c:3848 sql_help.c:3911 sql_help.c:4604 +msgid "channel" +msgstr "channel" + +#: sql_help.c:3870 +msgid "lockmode" +msgstr "lockmode" + +#: sql_help.c:3871 +msgid "where lockmode is one of:" +msgstr "όπου lockmode είναι ένα από:" + +#: sql_help.c:3912 +msgid "payload" +msgstr "payload" + +#: sql_help.c:3939 +msgid "old_role" +msgstr "old_role" + +#: sql_help.c:3940 +msgid "new_role" +msgstr "new_role" + +#: sql_help.c:3971 sql_help.c:4143 sql_help.c:4151 +msgid "savepoint_name" +msgstr "savepoint_name" + +#: sql_help.c:4287 sql_help.c:4339 sql_help.c:4526 sql_help.c:4578 +#: sql_help.c:4746 sql_help.c:4798 +msgid "grouping_element" +msgstr "grouping_element" + +#: sql_help.c:4289 sql_help.c:4379 sql_help.c:4528 sql_help.c:4748 +msgid "window_name" +msgstr "window_name" + +#: sql_help.c:4290 sql_help.c:4380 sql_help.c:4529 sql_help.c:4749 +msgid "window_definition" +msgstr "window_definition" + +#: sql_help.c:4291 sql_help.c:4305 sql_help.c:4343 sql_help.c:4381 +#: sql_help.c:4530 sql_help.c:4544 sql_help.c:4582 sql_help.c:4750 +#: sql_help.c:4764 sql_help.c:4802 +msgid "select" +msgstr "select" + +#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4757 +msgid "where from_item can be one of:" +msgstr "όπου from_item μπορεί να είναι ένα από:" + +#: sql_help.c:4301 sql_help.c:4307 sql_help.c:4310 sql_help.c:4314 +#: sql_help.c:4326 sql_help.c:4540 sql_help.c:4546 sql_help.c:4549 +#: sql_help.c:4553 sql_help.c:4565 sql_help.c:4760 sql_help.c:4766 +#: sql_help.c:4769 sql_help.c:4773 sql_help.c:4785 +msgid "column_alias" +msgstr "column_alias" + +#: sql_help.c:4302 sql_help.c:4541 sql_help.c:4761 +msgid "sampling_method" +msgstr "sampling_method" + +#: sql_help.c:4304 sql_help.c:4543 sql_help.c:4763 +msgid "seed" +msgstr "seed" + +#: sql_help.c:4308 sql_help.c:4341 sql_help.c:4547 sql_help.c:4580 +#: sql_help.c:4767 sql_help.c:4800 +msgid "with_query_name" +msgstr "with_query_name" + +#: sql_help.c:4318 sql_help.c:4321 sql_help.c:4324 sql_help.c:4557 +#: sql_help.c:4560 sql_help.c:4563 sql_help.c:4777 sql_help.c:4780 +#: sql_help.c:4783 +msgid "column_definition" +msgstr "column_definition" + +#: sql_help.c:4328 sql_help.c:4567 sql_help.c:4787 +msgid "join_type" +msgstr "join_type" + +#: sql_help.c:4330 sql_help.c:4569 sql_help.c:4789 +msgid "join_condition" +msgstr "join_condition" + +#: sql_help.c:4331 sql_help.c:4570 sql_help.c:4790 +msgid "join_column" +msgstr "join_column" + +#: sql_help.c:4332 sql_help.c:4571 sql_help.c:4791 +msgid "and grouping_element can be one of:" +msgstr "και grouping_element μπορεί να είναι ένα από:" + +#: sql_help.c:4340 sql_help.c:4579 sql_help.c:4799 +msgid "and with_query is:" +msgstr "και with_query είναι:" + +#: sql_help.c:4344 sql_help.c:4583 sql_help.c:4803 +msgid "values" +msgstr "values" + +#: sql_help.c:4345 sql_help.c:4584 sql_help.c:4804 +msgid "insert" +msgstr "insert" + +#: sql_help.c:4346 sql_help.c:4585 sql_help.c:4805 +msgid "update" +msgstr "update" + +#: sql_help.c:4347 sql_help.c:4586 sql_help.c:4806 +msgid "delete" +msgstr "delete" + +#: sql_help.c:4374 +msgid "new_table" +msgstr "new_table" + +#: sql_help.c:4399 +msgid "timezone" +msgstr "timezone" + +#: sql_help.c:4444 +msgid "snapshot_id" +msgstr "snapshot_id" + +#: sql_help.c:4686 +msgid "sort_expression" +msgstr "sort_expression" + +#: sql_help.c:4813 sql_help.c:5791 +msgid "abort the current transaction" +msgstr "ματαιώστε την τρέχουσα συναλλαγή" + +#: sql_help.c:4819 +msgid "change the definition of an aggregate function" +msgstr "αλλάξτε τον ορισμό μιας συνάρτησης συγκεντρωτικών αποτελεσμάτων" + +#: sql_help.c:4825 +msgid "change the definition of a collation" +msgstr "αλλάξτε τον ορισμό συρραφής" + +#: sql_help.c:4831 +msgid "change the definition of a conversion" +msgstr "αλλάξτε τον ορισμό μίας μετατροπής" + +#: sql_help.c:4837 +msgid "change a database" +msgstr "αλλάξτε μία βάση δεδομένων" + +#: sql_help.c:4843 +msgid "define default access privileges" +msgstr "ορίσθε τα προεπιλεγμένα δικαιώματα πρόσβασης" + +#: sql_help.c:4849 +msgid "change the definition of a domain" +msgstr "αλλάξτε τον ορισμό ενός τομέα" + +#: sql_help.c:4855 +msgid "change the definition of an event trigger" +msgstr "αλλάξτε τον ορισμό μιας ενεργοποίησης συμβάντος" + +#: sql_help.c:4861 +msgid "change the definition of an extension" +msgstr "αλλάξτε τον ορισμό μίας προέκτασης" + +#: sql_help.c:4867 +msgid "change the definition of a foreign-data wrapper" +msgstr "αλλάξτε τον ορισιμό μιας περιτύλιξης ξένων δεδομένων" + +#: sql_help.c:4873 +msgid "change the definition of a foreign table" +msgstr "αλλάξτε τον ορισιμό ενός ξενικού πίνακα" + +#: sql_help.c:4879 +msgid "change the definition of a function" +msgstr "αλλάξτε τον ορισμό μιας συνάρτησης" + +#: sql_help.c:4885 +msgid "change role name or membership" +msgstr "αλλάξτε το όνομα ρόλου ή ιδιότητας μέλους" + +#: sql_help.c:4891 +msgid "change the definition of an index" +msgstr "αλλάξτε τον ορισμό ενός ευρετηρίου" + +#: sql_help.c:4897 +msgid "change the definition of a procedural language" +msgstr "αλλάξτε τον ορισμό μιας διαδικαστικής γλώσσας" + +#: sql_help.c:4903 +msgid "change the definition of a large object" +msgstr "αλλάξτε τον ορισιμό ενός μεγάλου αντικειμένου" + +#: sql_help.c:4909 +msgid "change the definition of a materialized view" +msgstr "αλλάξτε τον ορισμό μίας υλοποιημένης όψης" + +#: sql_help.c:4915 +msgid "change the definition of an operator" +msgstr "αλλάξτε τον ορισμό ενός χειριστή" + +#: sql_help.c:4921 +msgid "change the definition of an operator class" +msgstr "αλλάξτε τον ορισμό μίας κλάσης χειριστή" + +#: sql_help.c:4927 +msgid "change the definition of an operator family" +msgstr "αλλάξτε τον ορισμό μίας οικογένειας χειριστή" + +#: sql_help.c:4933 +msgid "change the definition of a row level security policy" +msgstr "αλλάξτε τον ορισιμό μιας πολιτική ασφάλειας επιπέδου σειράς" + +#: sql_help.c:4939 +msgid "change the definition of a procedure" +msgstr "αλλάξτε τον ορισμό μίας διαδικασίας" + +#: sql_help.c:4945 +msgid "change the definition of a publication" +msgstr "αλλάξτε τον ορισμό μίας δημοσίευσης" + +#: sql_help.c:4951 sql_help.c:5053 +msgid "change a database role" +msgstr "αλλάξτε τον ρόλο μίας βάσης δεδομένων" + +#: sql_help.c:4957 +msgid "change the definition of a routine" +msgstr "αλλάξτε τον ορισμό μιας ρουτίνας" + +#: sql_help.c:4963 +msgid "change the definition of a rule" +msgstr "αλλάξτε τον ορισμό ενός κανόνα" + +#: sql_help.c:4969 +msgid "change the definition of a schema" +msgstr "αλλάξτε τον ορισμό ενός σχήματος" + +#: sql_help.c:4975 +msgid "change the definition of a sequence generator" +msgstr "αλλάξτε τον ορισμό μίας γεννήτριας ακολουθίας" + +#: sql_help.c:4981 +msgid "change the definition of a foreign server" +msgstr "αλλάξτε τον ορισμό ενός ξενικού διακομιστή" + +#: sql_help.c:4987 +msgid "change the definition of an extended statistics object" +msgstr "αλλάξτε τον ορισμό ενός εκτεταμένου αντικειμένου στατιστικών" + +#: sql_help.c:4993 +msgid "change the definition of a subscription" +msgstr "αλλάξτε τον ορισμό μιας συνδρομής" + +#: sql_help.c:4999 +msgid "change a server configuration parameter" +msgstr "αλλάξτε μία παράμετρο διαμόρφωσης διακομιστή" + +#: sql_help.c:5005 +msgid "change the definition of a table" +msgstr "αλλάξτε τον ορισμό ενός πίνακα" + +#: sql_help.c:5011 +msgid "change the definition of a tablespace" +msgstr "αλλάξτε τον ορισμό ενός πινακοχώρου" + +#: sql_help.c:5017 +msgid "change the definition of a text search configuration" +msgstr "αλλάξτε τον ορισμό μίας διαμόρφωσης αναζήτησης κειμένου" + +#: sql_help.c:5023 +msgid "change the definition of a text search dictionary" +msgstr "αλλάξτε τον ορισμό ενός λεξικού αναζήτησης κειμένου" + +#: sql_help.c:5029 +msgid "change the definition of a text search parser" +msgstr "αλλάξτε τον ορισμό ενός αναλυτή αναζήτησης κειμένου" + +#: sql_help.c:5035 +msgid "change the definition of a text search template" +msgstr "αλλάξτε τον ορισμό ενός προτύπου αναζήτησης κειμένου" + +#: sql_help.c:5041 +msgid "change the definition of a trigger" +msgstr "αλλάξτε τον ορισμό μιας ενεργοποίησης" + +#: sql_help.c:5047 +msgid "change the definition of a type" +msgstr "αλλάξτε τον ορισμό ενός τύπου" + +#: sql_help.c:5059 +msgid "change the definition of a user mapping" +msgstr "αλλάξτε τον ορισμό μίας αντιστοίχισης χρήστη" + +#: sql_help.c:5065 +msgid "change the definition of a view" +msgstr "αλλάξτε τον ορισμό μίας όψης" + +#: sql_help.c:5071 +msgid "collect statistics about a database" +msgstr "συλλέξτε στατιστικά σχετικά με μία βάση δεδομένων" + +#: sql_help.c:5077 sql_help.c:5869 +msgid "start a transaction block" +msgstr "εκκινήστε ένα μπλοκ συναλλαγής" + +#: sql_help.c:5083 +msgid "invoke a procedure" +msgstr "κλήση διαδικασίας" + +#: sql_help.c:5089 +msgid "force a write-ahead log checkpoint" +msgstr "" +"επιβάλλετε εισαγωγή ενός σημείου ελέγχου (checkpoint) του write-ahead log" + +#: sql_help.c:5095 +msgid "close a cursor" +msgstr "κλείστε έναν δρομέα" + +#: sql_help.c:5101 +msgid "cluster a table according to an index" +msgstr "δημιουργείστε συστάδα ενός πίνακα σύμφωνα με ένα ευρετήριο" + +#: sql_help.c:5107 +msgid "define or change the comment of an object" +msgstr "ορίσετε ή αλλάξτε το σχόλιο ενός αντικειμένου" + +#: sql_help.c:5113 sql_help.c:5671 +msgid "commit the current transaction" +msgstr "ολοκληρώστε την τρέχουσας συναλλαγής" + +#: sql_help.c:5119 +msgid "commit a transaction that was earlier prepared for two-phase commit" +msgstr "" +"ολοκληρώστε μία συναλλαγή που είχε προετοιμαστεί νωρίτερα για ολοκλήρωση σε " +"δύο φάσεις" + +#: sql_help.c:5125 +msgid "copy data between a file and a table" +msgstr "αντιγράψτε δεδομένα μεταξύ ενός αρχείου και ενός πίνακα" + +#: sql_help.c:5131 +msgid "define a new access method" +msgstr "ορίσετε μία νέα μέθοδο πρόσβασης" + +#: sql_help.c:5137 +msgid "define a new aggregate function" +msgstr "ορίσετε μία νέα συνάρτηση συγκεντρωτικών αποτελεσμάτων" + +#: sql_help.c:5143 +msgid "define a new cast" +msgstr "ορίσετε ένα νέο καστ" + +#: sql_help.c:5149 +msgid "define a new collation" +msgstr "ορίσετε μία νέα συρραφή" + +#: sql_help.c:5155 +msgid "define a new encoding conversion" +msgstr "ορίσετε μία νέα μετατροπή κωδικοποίησης" + +#: sql_help.c:5161 +msgid "create a new database" +msgstr "δημιουργήστε μία νέα βάση δεδομένων" + +#: sql_help.c:5167 +msgid "define a new domain" +msgstr "ορίσετε ένα νέο πεδίο" + +#: sql_help.c:5173 +msgid "define a new event trigger" +msgstr "ορίσετε μία νέα ενεργοποίησης συμβάντος" + +#: sql_help.c:5179 +msgid "install an extension" +msgstr "εγκαταστήστε μία νέα προέκταση" + +#: sql_help.c:5185 +msgid "define a new foreign-data wrapper" +msgstr "ορίσετε μία νέα περιτύλιξη ξένων δεδομένων" + +#: sql_help.c:5191 +msgid "define a new foreign table" +msgstr "ορίσετε ένα νέο ξενικό πίνακα" + +#: sql_help.c:5197 +msgid "define a new function" +msgstr "ορίσετε μία νέα συνάρτηση" + +#: sql_help.c:5203 sql_help.c:5263 sql_help.c:5365 +msgid "define a new database role" +msgstr "ορίστε έναν νέο ρόλο βάσης δεδομένων" + +#: sql_help.c:5209 +msgid "define a new index" +msgstr "ορίστε ένα νέο ευρετήριο" + +#: sql_help.c:5215 +msgid "define a new procedural language" +msgstr "ορίστε μία νέα διαδικαστική γλώσσα" + +#: sql_help.c:5221 +msgid "define a new materialized view" +msgstr "Ορίστε μία νέα υλοποιημένη όψη" + +#: sql_help.c:5227 +msgid "define a new operator" +msgstr "ορίστε έναν νέο χειριστή" + +#: sql_help.c:5233 +msgid "define a new operator class" +msgstr "ορίστε μία νέα κλάση χειριστή" + +#: sql_help.c:5239 +msgid "define a new operator family" +msgstr "ορίστε μία νέα οικογένεια χειριστή" + +#: sql_help.c:5245 +msgid "define a new row level security policy for a table" +msgstr "ορίστε μία νέα πολιτική προστασίας σειράς για έναν πίνακα" + +#: sql_help.c:5251 +msgid "define a new procedure" +msgstr "ορίστε μία νέα διαδικασία" + +#: sql_help.c:5257 +msgid "define a new publication" +msgstr "ορίστε μία νέα κοινοποιήση" + +#: sql_help.c:5269 +msgid "define a new rewrite rule" +msgstr "ορίστε ένα νέο κανόνα επανεγγραφής" + +#: sql_help.c:5275 +msgid "define a new schema" +msgstr "ορίστε ένα νέο σχήμα" + +#: sql_help.c:5281 +msgid "define a new sequence generator" +msgstr "ορίστε ένα νέο παραγωγό ακολουθίων" + +#: sql_help.c:5287 +msgid "define a new foreign server" +msgstr "ορίστε ένα νέο ξενικό διακομιστή" + +#: sql_help.c:5293 +msgid "define extended statistics" +msgstr "ορίστε εκτεταμένα στατιστικά στοιχεία" + +#: sql_help.c:5299 +msgid "define a new subscription" +msgstr "ορίστε μία νέα συνδρομή" + +#: sql_help.c:5305 +msgid "define a new table" +msgstr "ορίσετε ένα νέο πίνακα" + +#: sql_help.c:5311 sql_help.c:5827 +msgid "define a new table from the results of a query" +msgstr "ορίστε ένα νέο πίνακα από τα αποτελέσματα ενός ερωτήματος" + +#: sql_help.c:5317 +msgid "define a new tablespace" +msgstr "ορίστε ένα νέο πινακοχώρο" + +#: sql_help.c:5323 +msgid "define a new text search configuration" +msgstr "ορίστε μία νέα διαμόρφωση αναζήτησης κειμένου" + +#: sql_help.c:5329 +msgid "define a new text search dictionary" +msgstr "ορίστε ένα νέο λεξικό αναζήτησης κειμένου" + +#: sql_help.c:5335 +msgid "define a new text search parser" +msgstr "ορίστε ένα νέο αναλυτή αναζήτησης κειμένου" + +#: sql_help.c:5341 +msgid "define a new text search template" +msgstr "ορίστε ένα νέο πρότυπο αναζήτησης κειμένου" + +#: sql_help.c:5347 +msgid "define a new transform" +msgstr "ορίστε μία νέα μετατροπή" + +#: sql_help.c:5353 +msgid "define a new trigger" +msgstr "ορίσετε μία νέα ενεργοποίηση" + +#: sql_help.c:5359 +msgid "define a new data type" +msgstr "ορίσετε ένα νέο τύπο δεδομένων" + +#: sql_help.c:5371 +msgid "define a new mapping of a user to a foreign server" +msgstr "ορίστε μία νέα αντιστοίχιση ενός χρήστη σε έναν ξένο διακομιστή" + +#: sql_help.c:5377 +msgid "define a new view" +msgstr "ορίστε μία νέα όψη" + +#: sql_help.c:5383 +msgid "deallocate a prepared statement" +msgstr "καταργήστε μία προετοιμασμένη δήλωση" + +#: sql_help.c:5389 +msgid "define a cursor" +msgstr "ορίστε έναν δρομέα" + +#: sql_help.c:5395 +msgid "delete rows of a table" +msgstr "διαγράψτε σειρές ενός πίνακα" + +#: sql_help.c:5401 +msgid "discard session state" +msgstr "καταργήστε την κατάσταση συνεδρίας" + +#: sql_help.c:5407 +msgid "execute an anonymous code block" +msgstr "εκτελέστε ανώνυμο μπλοκ κώδικα" + +#: sql_help.c:5413 +msgid "remove an access method" +msgstr "αφαιρέστε μία μέθοδο πρόσβασης" + +#: sql_help.c:5419 +msgid "remove an aggregate function" +msgstr "αφαιρέστε μία συνάρτηση συγκεντρωτικών αποτελεσμάτων" + +#: sql_help.c:5425 +msgid "remove a cast" +msgstr "αφαιρέστε ένα καστ" + +#: sql_help.c:5431 +msgid "remove a collation" +msgstr "αφαιρέστε μία συρραφή" + +#: sql_help.c:5437 +msgid "remove a conversion" +msgstr "αφαιρέστε μία μετατροπή" + +#: sql_help.c:5443 +msgid "remove a database" +msgstr "αφαιρέστε μία βάση δεδομένων" + +#: sql_help.c:5449 +msgid "remove a domain" +msgstr "αφαιρέστε ένα πεδίο" + +#: sql_help.c:5455 +msgid "remove an event trigger" +msgstr "αφαιρέστε μία ενεργοποίηση συμβάντος" + +#: sql_help.c:5461 +msgid "remove an extension" +msgstr "αφαιρέστε μία προέκταση" + +#: sql_help.c:5467 +msgid "remove a foreign-data wrapper" +msgstr "αφαιρέστε μία περιτύλιξη ξένων δεδομένων" + +#: sql_help.c:5473 +msgid "remove a foreign table" +msgstr "αφαιρέστε έναν ξενικό πίνακα" + +#: sql_help.c:5479 +msgid "remove a function" +msgstr "αφαιρέστε μία συνάρτηση" + +#: sql_help.c:5485 sql_help.c:5551 sql_help.c:5653 +msgid "remove a database role" +msgstr "αφαιρέστε έναν ρόλο μίας βάσης δεδομένων" + +#: sql_help.c:5491 +msgid "remove an index" +msgstr "αφαιρέστε ένα ευρετήριο" + +#: sql_help.c:5497 +msgid "remove a procedural language" +msgstr "αφαιρέστε μία διαδικαστική γλώσσα" + +#: sql_help.c:5503 +msgid "remove a materialized view" +msgstr "αφαιρέστε μία υλοποιημένη όψη" + +#: sql_help.c:5509 +msgid "remove an operator" +msgstr "αφαιρέστε έναν χειριστή" + +#: sql_help.c:5515 +msgid "remove an operator class" +msgstr "αφαιρέστε μία κλάση χειριστή" + +#: sql_help.c:5521 +msgid "remove an operator family" +msgstr "αφαιρέστε μία οικογένεια χειριστή" + +#: sql_help.c:5527 +msgid "remove database objects owned by a database role" +msgstr "" +"αφαιρέστε αντικειμένα βάσης δεδομένων που ανήκουν σε ρόλο βάσης δεδομένων" + +#: sql_help.c:5533 +msgid "remove a row level security policy from a table" +msgstr "αφαιρέστε μία πολιτική ασφαλείας επιπέδου γραμμής από έναν πίνακα" + +#: sql_help.c:5539 +msgid "remove a procedure" +msgstr "αφαιρέστε μία διαδικασία" + +#: sql_help.c:5545 +msgid "remove a publication" +msgstr "αφαιρέστε μία δημοσίευση" + +#: sql_help.c:5557 +msgid "remove a routine" +msgstr "αφαιρέστε μία ρουτίνα" + +#: sql_help.c:5563 +msgid "remove a rewrite rule" +msgstr "αφαιρέστε έναν κανόνα επανεγγραφής" + +#: sql_help.c:5569 +msgid "remove a schema" +msgstr "αφαιρέστε ένα σχήμα" + +#: sql_help.c:5575 +msgid "remove a sequence" +msgstr "αφαιρέστε μία ακολουθία" + +#: sql_help.c:5581 +msgid "remove a foreign server descriptor" +msgstr "αφαιρέστε έναν περιγραφέα ξενικού διακομιστή" + +#: sql_help.c:5587 +msgid "remove extended statistics" +msgstr "αφαιρέστε εκτεταμένα στατιστικά στοιχεία" + +#: sql_help.c:5593 +msgid "remove a subscription" +msgstr "αφαιρέστε μία συνδρομή" + +#: sql_help.c:5599 +msgid "remove a table" +msgstr "αφαιρέστε έναν πίνακα" + +#: sql_help.c:5605 +msgid "remove a tablespace" +msgstr "αφαιρέστε έναν πινακοχώρο" + +#: sql_help.c:5611 +msgid "remove a text search configuration" +msgstr "αφαιρέστε μία διαμόρφωση αναζήτησης κειμένου" + +#: sql_help.c:5617 +msgid "remove a text search dictionary" +msgstr "αφαιρέστε ένα λεξικό αναζήτησης κειμένου" + +#: sql_help.c:5623 +msgid "remove a text search parser" +msgstr "αφαιρέστε έναν αναλυτή αναζήτησης κειμένου" + +#: sql_help.c:5629 +msgid "remove a text search template" +msgstr "αφαιρέστε ένα πρότυπο αναζήτησης κειμένου" + +#: sql_help.c:5635 +msgid "remove a transform" +msgstr "αφαιρέστε μία μετατροπή" + +#: sql_help.c:5641 +msgid "remove a trigger" +msgstr "αφαιρέστε μία ενεργοποίηση" + +#: sql_help.c:5647 +msgid "remove a data type" +msgstr "αφαιρέστε έναν τύπο δεδομένων" + +#: sql_help.c:5659 +msgid "remove a user mapping for a foreign server" +msgstr "αφαιρέστε μία αντιστοίχιση χρήστη για ξένο διακομιστή" + +#: sql_help.c:5665 +msgid "remove a view" +msgstr "αφαιρέστε μία όψη" + +#: sql_help.c:5677 +msgid "execute a prepared statement" +msgstr "εκτελέστε μία προεπιλεγμένη δήλωση" + +#: sql_help.c:5683 +msgid "show the execution plan of a statement" +msgstr "εμφανίστε το πλάνο εκτέλεσης μίας δήλωσης" + +#: sql_help.c:5689 +msgid "retrieve rows from a query using a cursor" +msgstr "ανακτήστε σειρές από ερώτημα μέσω δρομέα" + +#: sql_help.c:5695 +msgid "define access privileges" +msgstr "ορίσθε δικαιώματα πρόσβασης" + +#: sql_help.c:5701 +msgid "import table definitions from a foreign server" +msgstr "εισαγωγή ορισμών πίνακα από ξένο διακομιστή" + +#: sql_help.c:5707 +msgid "create new rows in a table" +msgstr "δημιουργήστε καινούργιες σειρές σε έναν πίνακα" + +#: sql_help.c:5713 +msgid "listen for a notification" +msgstr "ακούστε για μία κοινοποίηση" + +#: sql_help.c:5719 +msgid "load a shared library file" +msgstr "φορτώστε ένα αρχείο κοινόχρηστης βιβλιοθήκης" + +#: sql_help.c:5725 +msgid "lock a table" +msgstr "κλειδώστε έναν πίνακα" + +#: sql_help.c:5731 +msgid "position a cursor" +msgstr "τοποθετήστε έναν δρομέα" + +#: sql_help.c:5737 +msgid "generate a notification" +msgstr "δημιουργήστε μία κοινοποίηση" + +#: sql_help.c:5743 +msgid "prepare a statement for execution" +msgstr "προετοιμάστε μία δήλωση για εκτέλεση" + +#: sql_help.c:5749 +msgid "prepare the current transaction for two-phase commit" +msgstr "προετοιμάστε την τρέχουσας συναλλαγής για ολοκλήρωση σε δύο φάσεις" + +#: sql_help.c:5755 +msgid "change the ownership of database objects owned by a database role" +msgstr "" +"αλλάξτε την κυριότητα αντικειμένων βάσης δεδομένων που ανήκουν σε ρόλο βάσης " +"δεδομένων" + +#: sql_help.c:5761 +msgid "replace the contents of a materialized view" +msgstr "αντικαθαστήστε τα περιεχόμενα μίας υλοποιημένης όψης" + +#: sql_help.c:5767 +msgid "rebuild indexes" +msgstr "επανακατασκευάστε ευρετήρια" + +#: sql_help.c:5773 +msgid "destroy a previously defined savepoint" +msgstr "καταστρέψτε ένα προηγούμενα ορισμένο σημείο αποθήκευσης" + +#: sql_help.c:5779 +msgid "restore the value of a run-time parameter to the default value" +msgstr "" +"επαναφορά της τιμής μιας παραμέτρου χρόνου εκτέλεσης στην προεπιλεγμένη τιμή" + +#: sql_help.c:5785 +msgid "remove access privileges" +msgstr "αφαιρέστε δικαιώματα πρόσβασης" + +#: sql_help.c:5797 +msgid "cancel a transaction that was earlier prepared for two-phase commit" +msgstr "" +"Ακύρωση συναλλαγής που είχε προετοιμαστεί προηγουμένως για ολοκλήρωση σε δύο " +"φάσεις" + +#: sql_help.c:5803 +msgid "roll back to a savepoint" +msgstr "επαναφορά σε σημείο αποθήκευσης" + +#: sql_help.c:5809 +msgid "define a new savepoint within the current transaction" +msgstr "" +"ορίστε ένα νέο σημείο αποθήκευσης (savepoint) μέσα στην τρέχουσα συναλλαγή" + +#: sql_help.c:5815 +msgid "define or change a security label applied to an object" +msgstr "" +"ορίστε ή αλλάξτε μία ετικέτα ασφαλείας που εφαρμόζεται σε ένα αντικείμενο" + +#: sql_help.c:5821 sql_help.c:5875 sql_help.c:5911 +msgid "retrieve rows from a table or view" +msgstr "ανακτήστε σειρές από πίνακα ή όψη" + +#: sql_help.c:5833 +msgid "change a run-time parameter" +msgstr "αλλάξτε μία παράμετρο χρόνου εκτέλεσης" + +#: sql_help.c:5839 +msgid "set constraint check timing for the current transaction" +msgstr "ορίστε τον χρονισμό ελέγχου περιορισμού για την τρέχουσα συναλλαγή" + +#: sql_help.c:5845 +msgid "set the current user identifier of the current session" +msgstr "ορίστε το αναγνωριστικό τρέχοντος χρήστη της τρέχουσας συνεδρίας" + +#: sql_help.c:5851 +msgid "" +"set the session user identifier and the current user identifier of the " +"current session" +msgstr "" +"ορίστε το αναγνωριστικό χρήστη συνεδρίας και το αναγνωριστικό τρέχοντος " +"χρήστη της τρέχουσας συνεδρίας" + +#: sql_help.c:5857 +msgid "set the characteristics of the current transaction" +msgstr "ορίστε τα χαρακτηριστικά της τρέχουσας συναλλαγής" + +#: sql_help.c:5863 +msgid "show the value of a run-time parameter" +msgstr "εμφάνιση της τιμής μιας παραμέτρου χρόνου εκτέλεσης" + +#: sql_help.c:5881 +msgid "empty a table or set of tables" +msgstr "αδειάστε έναν πίνακα ή ένα σύνολο πινάκων" + +#: sql_help.c:5887 +msgid "stop listening for a notification" +msgstr "σταματήστε να ακούτε μια κοινοποίηση" + +#: sql_help.c:5893 +msgid "update rows of a table" +msgstr "ενημέρωση σειρών πίνακα" + +#: sql_help.c:5899 +msgid "garbage-collect and optionally analyze a database" +msgstr "συλλογή απορριμμάτων και προαιρετική ανάλυση βάσης δεδομένων" + +#: sql_help.c:5905 +msgid "compute a set of rows" +msgstr "υπολογίστε ένα σύνολο σειρών" + +#: startup.c:212 +#, c-format +msgid "-1 can only be used in non-interactive mode" +msgstr "-1 μπορεί να χρησιμοποιηθεί μόνο σε μη διαδραστική λειτουργία" + +#: startup.c:327 +#, c-format +msgid "could not open log file \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου καταγραφής “%s”: %m" + +#: startup.c:439 +#, c-format +msgid "" +"Type \"help\" for help.\n" +"\n" +msgstr "" +"Γράψτε “help” για βοήθεια.\n" +"\n" + +#: startup.c:589 +#, c-format +msgid "could not set printing parameter \"%s\"" +msgstr "δεν ήταν δυνατός ο ορισμός παραμέτρου εκτύπωσης “%s”" + +#: startup.c:697 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" + +#: startup.c:714 +#, c-format +msgid "extra command-line argument \"%s\" ignored" +msgstr "παραβλέπεται η πρόσθετη παράμετρος γραμμής εντολών \"%s\"" + +#: startup.c:763 +#, c-format +msgid "could not find own program executable" +msgstr "δεν ήταν δυνατή η εύρεση του ιδίου εκτελέσιμου προγράμματος" + +#: tab-complete.c:4640 +#, c-format +msgid "" +"tab completion query failed: %s\n" +"Query was:\n" +"%s" +msgstr "" +"ολοκλήρωσης καρτέλας ερωτήματος απέτυχε: %s\n" +"Το ερώτημα ήταν:\n" +"%s" + +#: variables.c:139 +#, c-format +msgid "unrecognized value \"%s\" for \"%s\": Boolean expected" +msgstr "μη αναγνωρίσιμη τιμή \"%s\" για \"%s\": αναμένεται Boolean" + +#: variables.c:176 +#, c-format +msgid "invalid value \"%s\" for \"%s\": integer expected" +msgstr "άκυρη τιμή \"%s\" για \"%s\": αναμένεται ακέραιος" + +#: variables.c:224 +#, c-format +msgid "invalid variable name: \"%s\"" +msgstr "άκυρη ονομασία παραμέτρου “%s”" + +#: variables.c:419 +#, c-format +msgid "" +"unrecognized value \"%s\" for \"%s\"\n" +"Available values are: %s." +msgstr "" +"Μη αναγνωρίσιμη τιμή \"%s\" για \"%s\"\n" +"Οι διαθέσιμες τιμές είναι: %s." diff --git a/src/bin/psql/po/es.po b/src/bin/psql/po/es.po index fb6793e138e4a..e4ac33b6a8e6f 100644 --- a/src/bin/psql/po/es.po +++ b/src/bin/psql/po/es.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: psql (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:44+0000\n" -"PO-Revision-Date: 2019-09-29 22:25-0300\n" +"POT-Creation-Date: 2020-09-13 10:44+0000\n" +"PO-Revision-Date: 2020-09-14 13:02-0300\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -20,11 +20,12 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Poedit 2.3\n" #: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " -msgstr "fatal:" +msgstr "fatal: " #: ../../../src/common/logging.c:243 #, c-format @@ -132,6 +133,19 @@ msgstr "el proceso hijo fue terminado por una señal %d: %s" msgid "child process exited with unrecognized status %d" msgstr "el proceso hijo terminó con código no reconocido %d" +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Petición de cancelación enviada\n" + +#: ../../fe_utils/cancel.c:165 +msgid "Could not send cancel request: " +msgstr "No se pudo enviar la petición de cancelación: %s" + +#: ../../fe_utils/cancel.c:210 +#, c-format +msgid "Could not send cancel request: %s" +msgstr "No se pudo enviar el paquete de cancelación: %s" + #: ../../fe_utils/print.c:350 #, c-format msgid "(%lu row)" @@ -261,10 +275,9 @@ msgid "There is no previous error." msgstr "No hay error anterior." #: command.c:1371 -#, fuzzy, c-format -#| msgid "Missing left parenthesis." +#, c-format msgid "\\%s: missing right parenthesis" -msgstr "Falta paréntesis izquierdo." +msgstr "\\%s: falta el paréntesis derecho" #: command.c:1548 command.c:1853 command.c:1867 command.c:1884 command.c:2044 #: command.c:2281 command.c:2517 command.c:2557 @@ -435,7 +448,7 @@ msgstr "" #: command.c:3407 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" -msgstr "conexión SSL (protocolo: %s, cifrado: %s, bits: %s, compresión: %s)\n" +msgstr "Conexión SSL (protocolo: %s, cifrado: %s, bits: %s, compresión: %s)\n" #: command.c:3408 command.c:3409 command.c:3410 msgid "unknown" @@ -765,12 +778,12 @@ msgstr "La conexión al servidor se ha perdido. Intentando reiniciar: " #: common.c:313 #, c-format msgid "Failed.\n" -msgstr "falló.\n" +msgstr "Falló.\n" #: common.c:326 #, c-format msgid "Succeeded.\n" -msgstr "con éxito.\n" +msgstr "Con éxito.\n" #: common.c:378 common.c:938 common.c:1155 #, c-format @@ -810,7 +823,7 @@ msgstr "no se puede usar \\watch con COPY" #: common.c:660 #, c-format msgid "unexpected result status for \\watch" -msgstr "Estado de resultado inesperado de \\watch" +msgstr "estado de resultado inesperado de \\watch" #: common.c:690 #, c-format @@ -823,10 +836,9 @@ msgid "Asynchronous notification \"%s\" received from server process with PID %d msgstr "Notificación asíncrona «%s» recibida del proceso de servidor con PID %d.\n" #: common.c:726 common.c:743 -#, fuzzy, c-format -#| msgid "could not read input file: %m" +#, c-format msgid "could not print result table: %m" -msgstr "no se pudo leer el archivo de entrada: %m" +msgstr "no se pudo mostrar la tabla de resultados: %m" #: common.c:764 #, c-format @@ -870,8 +882,8 @@ msgstr "Columna" #: common.c:1503 describe.c:177 describe.c:393 describe.c:411 describe.c:456 #: describe.c:473 describe.c:962 describe.c:1126 describe.c:1711 -#: describe.c:1735 describe.c:2002 describe.c:3719 describe.c:3929 -#: describe.c:4162 describe.c:5368 +#: describe.c:1735 describe.c:2002 describe.c:3729 describe.c:3939 +#: describe.c:4172 describe.c:5378 msgid "Type" msgstr "Tipo" @@ -996,20 +1008,20 @@ msgid "\\crosstabview: column name not found: \"%s\"" msgstr "\\crosstabview: nombre de columna «%s» no encontrado" #: describe.c:75 describe.c:373 describe.c:678 describe.c:810 describe.c:954 -#: describe.c:1115 describe.c:1187 describe.c:3708 describe.c:3916 -#: describe.c:4160 describe.c:4251 describe.c:4518 describe.c:4678 -#: describe.c:4919 describe.c:4994 describe.c:5005 describe.c:5067 -#: describe.c:5492 describe.c:5575 +#: describe.c:1115 describe.c:1187 describe.c:3718 describe.c:3926 +#: describe.c:4170 describe.c:4261 describe.c:4528 describe.c:4688 +#: describe.c:4929 describe.c:5004 describe.c:5015 describe.c:5077 +#: describe.c:5502 describe.c:5585 msgid "Schema" msgstr "Esquema" #: describe.c:76 describe.c:174 describe.c:242 describe.c:250 describe.c:374 #: describe.c:679 describe.c:811 describe.c:872 describe.c:955 describe.c:1188 -#: describe.c:3709 describe.c:3917 describe.c:4083 describe.c:4161 -#: describe.c:4252 describe.c:4331 describe.c:4519 describe.c:4603 -#: describe.c:4679 describe.c:4920 describe.c:4995 describe.c:5006 -#: describe.c:5068 describe.c:5265 describe.c:5349 describe.c:5573 -#: describe.c:5745 describe.c:5985 +#: describe.c:3719 describe.c:3927 describe.c:4093 describe.c:4171 +#: describe.c:4262 describe.c:4341 describe.c:4529 describe.c:4613 +#: describe.c:4689 describe.c:4930 describe.c:5005 describe.c:5016 +#: describe.c:5078 describe.c:5275 describe.c:5359 describe.c:5583 +#: describe.c:5755 describe.c:5995 msgid "Name" msgstr "Nombre" @@ -1024,12 +1036,12 @@ msgstr "Tipos de datos de argumentos" #: describe.c:110 describe.c:117 describe.c:185 describe.c:273 describe.c:513 #: describe.c:727 describe.c:826 describe.c:897 describe.c:1190 describe.c:2020 -#: describe.c:3496 describe.c:3769 describe.c:3963 describe.c:4114 -#: describe.c:4188 describe.c:4261 describe.c:4344 describe.c:4427 -#: describe.c:4546 describe.c:4612 describe.c:4680 describe.c:4821 -#: describe.c:4863 describe.c:4936 describe.c:4998 describe.c:5007 -#: describe.c:5069 describe.c:5291 describe.c:5371 describe.c:5506 -#: describe.c:5576 large_obj.c:290 large_obj.c:300 +#: describe.c:3506 describe.c:3779 describe.c:3973 describe.c:4124 +#: describe.c:4198 describe.c:4271 describe.c:4354 describe.c:4437 +#: describe.c:4556 describe.c:4622 describe.c:4690 describe.c:4831 +#: describe.c:4873 describe.c:4946 describe.c:5008 describe.c:5017 +#: describe.c:5079 describe.c:5301 describe.c:5381 describe.c:5516 +#: describe.c:5586 large_obj.c:290 large_obj.c:300 msgid "Description" msgstr "Descripción" @@ -1046,11 +1058,11 @@ msgstr "El servidor (versión %s) no soporta métodos de acceso." msgid "Index" msgstr "Indice" -#: describe.c:176 describe.c:3727 describe.c:3942 describe.c:5493 +#: describe.c:176 describe.c:3737 describe.c:3952 describe.c:5503 msgid "Table" msgstr "Tabla" -#: describe.c:184 describe.c:5270 +#: describe.c:184 describe.c:5280 msgid "Handler" msgstr "Manejador" @@ -1064,10 +1076,10 @@ msgid "The server (version %s) does not support tablespaces." msgstr "El servidor (versión %s) no soporta tablespaces." #: describe.c:243 describe.c:251 describe.c:501 describe.c:717 describe.c:873 -#: describe.c:1114 describe.c:3720 describe.c:3918 describe.c:4087 -#: describe.c:4333 describe.c:4604 describe.c:5266 describe.c:5350 -#: describe.c:5746 describe.c:5883 describe.c:5986 describe.c:6101 -#: describe.c:6175 large_obj.c:289 +#: describe.c:1114 describe.c:3730 describe.c:3928 describe.c:4097 +#: describe.c:4343 describe.c:4614 describe.c:5276 describe.c:5360 +#: describe.c:5756 describe.c:5893 describe.c:5996 describe.c:6111 +#: describe.c:6190 large_obj.c:289 msgid "Owner" msgstr "Dueño" @@ -1075,11 +1087,11 @@ msgstr "Dueño" msgid "Location" msgstr "Ubicación" -#: describe.c:263 describe.c:3313 +#: describe.c:263 describe.c:3323 msgid "Options" msgstr "Opciones" -#: describe.c:268 describe.c:690 describe.c:889 describe.c:3761 describe.c:3765 +#: describe.c:268 describe.c:690 describe.c:889 describe.c:3771 describe.c:3775 msgid "Size" msgstr "Tamaño" @@ -1186,11 +1198,11 @@ msgstr "Elementos" msgid "List of data types" msgstr "Listado de tipos de dato" -#: describe.c:812 describe.c:6343 +#: describe.c:812 msgid "Left arg type" msgstr "Tipo arg izq" -#: describe.c:813 describe.c:6344 +#: describe.c:813 msgid "Right arg type" msgstr "Tipo arg der" @@ -1198,8 +1210,8 @@ msgstr "Tipo arg der" msgid "Result type" msgstr "Tipo resultado" -#: describe.c:819 describe.c:4339 describe.c:4404 describe.c:4410 -#: describe.c:4820 +#: describe.c:819 describe.c:4349 describe.c:4414 describe.c:4420 +#: describe.c:4830 describe.c:6362 describe.c:6366 msgid "Function" msgstr "Función" @@ -1211,11 +1223,11 @@ msgstr "Listado de operadores" msgid "Encoding" msgstr "Codificación" -#: describe.c:879 describe.c:4520 +#: describe.c:879 describe.c:4530 msgid "Collate" msgstr "Collate" -#: describe.c:880 describe.c:4521 +#: describe.c:880 describe.c:4531 msgid "Ctype" msgstr "Ctype" @@ -1227,27 +1239,27 @@ msgstr "Tablespace" msgid "List of databases" msgstr "Listado de base de datos" -#: describe.c:956 describe.c:1117 describe.c:3710 +#: describe.c:956 describe.c:1117 describe.c:3720 msgid "table" msgstr "tabla" -#: describe.c:957 describe.c:3711 +#: describe.c:957 describe.c:3721 msgid "view" msgstr "vista" -#: describe.c:958 describe.c:3712 +#: describe.c:958 describe.c:3722 msgid "materialized view" msgstr "vistas materializadas" -#: describe.c:959 describe.c:1119 describe.c:3714 +#: describe.c:959 describe.c:1119 describe.c:3724 msgid "sequence" msgstr "secuencia" -#: describe.c:960 describe.c:3716 +#: describe.c:960 describe.c:3726 msgid "foreign table" msgstr "tabla foránea" -#: describe.c:961 describe.c:3717 describe.c:3927 +#: describe.c:961 describe.c:3727 describe.c:3937 msgid "partitioned table" msgstr "tabla particionada" @@ -1259,7 +1271,7 @@ msgstr "Privilegios de acceso a columnas" msgid "Policies" msgstr "Políticas" -#: describe.c:1070 describe.c:6042 describe.c:6046 +#: describe.c:1070 describe.c:6052 describe.c:6056 msgid "Access privileges" msgstr "Privilegios" @@ -1312,12 +1324,12 @@ msgstr "regla" msgid "Object descriptions" msgstr "Descripciones de objetos" -#: describe.c:1402 describe.c:3833 +#: describe.c:1402 describe.c:3843 #, c-format msgid "Did not find any relation named \"%s\"." msgstr "No se encontró relación llamada «%s»." -#: describe.c:1405 describe.c:3836 +#: describe.c:1405 describe.c:3846 #, c-format msgid "Did not find any relations." msgstr "No se encontró ninguna relación." @@ -1343,13 +1355,13 @@ msgstr "Máximo" msgid "Increment" msgstr "Incremento" -#: describe.c:1716 describe.c:1740 describe.c:1871 describe.c:4255 -#: describe.c:4421 describe.c:4535 describe.c:4540 describe.c:6089 +#: describe.c:1716 describe.c:1740 describe.c:1871 describe.c:4265 +#: describe.c:4431 describe.c:4545 describe.c:4550 describe.c:6099 msgid "yes" msgstr "sí" -#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4255 -#: describe.c:4418 describe.c:4535 describe.c:6090 +#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4265 +#: describe.c:4428 describe.c:4545 describe.c:6100 msgid "no" msgstr "no" @@ -1451,15 +1463,15 @@ msgstr "Tabla unlogged particionada «%s.%s»" msgid "Partitioned table \"%s.%s\"" msgstr "Tabla particionada «%s.%s»" -#: describe.c:2005 describe.c:4168 +#: describe.c:2005 describe.c:4178 msgid "Collation" msgstr "Ordenamiento" -#: describe.c:2006 describe.c:4175 +#: describe.c:2006 describe.c:4185 msgid "Nullable" msgstr "Nulable" -#: describe.c:2007 describe.c:4176 +#: describe.c:2007 describe.c:4186 msgid "Default" msgstr "Por omisión" @@ -1471,8 +1483,8 @@ msgstr "¿Llave?" msgid "Definition" msgstr "Definición" -#: describe.c:2014 describe.c:5286 describe.c:5370 describe.c:5441 -#: describe.c:5505 +#: describe.c:2014 describe.c:5296 describe.c:5380 describe.c:5451 +#: describe.c:5515 msgid "FDW options" msgstr "Opciones de FDW" @@ -1504,10 +1516,9 @@ msgid "Partition key: %s" msgstr "Llave de partición: %s" #: describe.c:2195 -#, fuzzy, c-format -#| msgid "Foreign table \"%s.%s\"" +#, c-format msgid "Owning table: \"%s.%s\"" -msgstr "Tabla foránea «%s.%s»" +msgstr "Tabla dueña: «%s.%s»" #: describe.c:2266 msgid "primary key, " @@ -1583,526 +1594,526 @@ msgstr "Políticas (seguridad de filas forzada): (ninguna)" msgid "Policies (row security disabled):" msgstr "Políticas (seguridad de filas inactiva):" -#: describe.c:2700 +#: describe.c:2705 msgid "Statistics objects:" msgstr "Objetos de estadísticas:" -#: describe.c:2809 describe.c:2913 +#: describe.c:2819 describe.c:2923 msgid "Rules:" msgstr "Reglas:" -#: describe.c:2812 +#: describe.c:2822 msgid "Disabled rules:" msgstr "Reglas deshabilitadas:" -#: describe.c:2815 +#: describe.c:2825 msgid "Rules firing always:" msgstr "Reglas que se activan siempre:" -#: describe.c:2818 +#: describe.c:2828 msgid "Rules firing on replica only:" msgstr "Reglas que se activan sólo en las réplicas:" -#: describe.c:2858 +#: describe.c:2868 msgid "Publications:" msgstr "Publicaciones:" -#: describe.c:2896 +#: describe.c:2906 msgid "View definition:" msgstr "Definición de vista:" -#: describe.c:3043 +#: describe.c:3053 msgid "Triggers:" msgstr "Triggers:" -#: describe.c:3047 +#: describe.c:3057 msgid "Disabled user triggers:" msgstr "Disparadores de usuario deshabilitados:" -#: describe.c:3049 +#: describe.c:3059 msgid "Disabled triggers:" msgstr "Disparadores deshabilitados:" -#: describe.c:3052 +#: describe.c:3062 msgid "Disabled internal triggers:" msgstr "Disparadores internos deshabilitados:" -#: describe.c:3055 +#: describe.c:3065 msgid "Triggers firing always:" msgstr "Disparadores que siempre se ejecutan:" -#: describe.c:3058 +#: describe.c:3068 msgid "Triggers firing on replica only:" msgstr "Disparadores que se ejecutan sólo en las réplicas:" -#: describe.c:3130 +#: describe.c:3140 #, c-format msgid "Server: %s" msgstr "Servidor: %s" -#: describe.c:3138 +#: describe.c:3148 #, c-format msgid "FDW options: (%s)" msgstr "Opciones de FDW: (%s)" -#: describe.c:3159 +#: describe.c:3169 msgid "Inherits" msgstr "Hereda" -#: describe.c:3219 +#: describe.c:3229 #, c-format msgid "Number of partitions: %d" msgstr "Número de particiones: %d" -#: describe.c:3228 +#: describe.c:3238 #, c-format msgid "Number of partitions: %d (Use \\d+ to list them.)" msgstr "Número de particiones: %d (Use \\d+ para listarlas.)" -#: describe.c:3230 +#: describe.c:3240 #, c-format msgid "Number of child tables: %d (Use \\d+ to list them.)" msgstr "Número de tablas hijas: %d (Use \\d+ para listarlas.)" -#: describe.c:3237 +#: describe.c:3247 msgid "Child tables" msgstr "Tablas hijas" -#: describe.c:3237 +#: describe.c:3247 msgid "Partitions" msgstr "Particiones" -#: describe.c:3266 +#: describe.c:3276 #, c-format msgid "Typed table of type: %s" msgstr "Tabla tipada de tipo: %s" -#: describe.c:3282 +#: describe.c:3292 msgid "Replica Identity" msgstr "Identidad de replicación" -#: describe.c:3295 +#: describe.c:3305 msgid "Has OIDs: yes" msgstr "Tiene OIDs: sí" -#: describe.c:3304 +#: describe.c:3314 #, c-format msgid "Access method: %s" msgstr "Método de acceso: %s" -#: describe.c:3384 +#: describe.c:3394 #, c-format msgid "Tablespace: \"%s\"" msgstr "Tablespace: «%s»" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:3396 +#: describe.c:3406 #, c-format msgid ", tablespace \"%s\"" msgstr ", tablespace «%s»" -#: describe.c:3489 +#: describe.c:3499 msgid "List of roles" msgstr "Lista de roles" -#: describe.c:3491 +#: describe.c:3501 msgid "Role name" msgstr "Nombre de rol" -#: describe.c:3492 +#: describe.c:3502 msgid "Attributes" msgstr "Atributos" -#: describe.c:3493 +#: describe.c:3503 msgid "Member of" msgstr "Miembro de" -#: describe.c:3504 +#: describe.c:3514 msgid "Superuser" msgstr "Superusuario" -#: describe.c:3507 +#: describe.c:3517 msgid "No inheritance" msgstr "Sin herencia" -#: describe.c:3510 +#: describe.c:3520 msgid "Create role" msgstr "Crear rol" -#: describe.c:3513 +#: describe.c:3523 msgid "Create DB" msgstr "Crear BD" -#: describe.c:3516 +#: describe.c:3526 msgid "Cannot login" msgstr "No puede conectarse" -#: describe.c:3520 +#: describe.c:3530 msgid "Replication" msgstr "Replicación" -#: describe.c:3524 +#: describe.c:3534 msgid "Bypass RLS" msgstr "Ignora RLS" -#: describe.c:3533 +#: describe.c:3543 msgid "No connections" msgstr "Ninguna conexión" -#: describe.c:3535 +#: describe.c:3545 #, c-format msgid "%d connection" msgid_plural "%d connections" msgstr[0] "%d conexión" msgstr[1] "%d conexiones" -#: describe.c:3545 +#: describe.c:3555 msgid "Password valid until " msgstr "Constraseña válida hasta " -#: describe.c:3595 +#: describe.c:3605 #, c-format msgid "The server (version %s) does not support per-database role settings." msgstr "El servidor (versión %s) no soporta parámetros por base de datos y rol." -#: describe.c:3608 +#: describe.c:3618 msgid "Role" msgstr "Nombre de rol" -#: describe.c:3609 +#: describe.c:3619 msgid "Database" msgstr "Base de Datos" -#: describe.c:3610 +#: describe.c:3620 msgid "Settings" msgstr "Parámetros" -#: describe.c:3631 +#: describe.c:3641 #, c-format msgid "Did not find any settings for role \"%s\" and database \"%s\"." msgstr "No se encontró ningún parámetro para el rol «%s» y la base de datos «%s»." -#: describe.c:3634 +#: describe.c:3644 #, c-format msgid "Did not find any settings for role \"%s\"." msgstr "No se encontró ningún parámetro para el rol «%s»." -#: describe.c:3637 +#: describe.c:3647 #, c-format msgid "Did not find any settings." msgstr "No se encontró ningún parámetro." -#: describe.c:3642 +#: describe.c:3652 msgid "List of settings" msgstr "Listado de parámetros" -#: describe.c:3713 +#: describe.c:3723 msgid "index" msgstr "índice" -#: describe.c:3715 +#: describe.c:3725 msgid "special" msgstr "especial" -#: describe.c:3718 describe.c:3928 +#: describe.c:3728 describe.c:3938 msgid "partitioned index" msgstr "índice particionado" -#: describe.c:3742 +#: describe.c:3752 msgid "permanent" -msgstr "" +msgstr "permanente" -#: describe.c:3743 +#: describe.c:3753 msgid "temporary" -msgstr "" +msgstr "temporal" -#: describe.c:3744 +#: describe.c:3754 msgid "unlogged" -msgstr "" +msgstr "unlogged" -#: describe.c:3745 +#: describe.c:3755 msgid "Persistence" -msgstr "" +msgstr "Persistencia" -#: describe.c:3841 +#: describe.c:3851 msgid "List of relations" msgstr "Listado de relaciones" -#: describe.c:3889 +#: describe.c:3899 #, c-format msgid "The server (version %s) does not support declarative table partitioning." msgstr "El servidor (versión %s) no soporta particionamiento declarativo de tablas." -#: describe.c:3900 +#: describe.c:3910 msgid "List of partitioned indexes" msgstr "Listado de índices particionados" -#: describe.c:3902 +#: describe.c:3912 msgid "List of partitioned tables" msgstr "Listado de tablas particionadas" -#: describe.c:3906 +#: describe.c:3916 msgid "List of partitioned relations" msgstr "Listado de relaciones particionadas" -#: describe.c:3937 +#: describe.c:3947 msgid "Parent name" msgstr "Nombre del padre" -#: describe.c:3950 +#: describe.c:3960 msgid "Leaf partition size" msgstr "Tamaño de particiones hoja" -#: describe.c:3953 describe.c:3959 +#: describe.c:3963 describe.c:3969 msgid "Total size" msgstr "Tamaño total" -#: describe.c:4091 +#: describe.c:4101 msgid "Trusted" msgstr "Confiable" -#: describe.c:4099 +#: describe.c:4109 msgid "Internal language" msgstr "Lenguaje interno" -#: describe.c:4100 +#: describe.c:4110 msgid "Call handler" msgstr "Manejador de llamada" -#: describe.c:4101 describe.c:5273 +#: describe.c:4111 describe.c:5283 msgid "Validator" msgstr "Validador" -#: describe.c:4104 +#: describe.c:4114 msgid "Inline handler" msgstr "Manejador en línea" -#: describe.c:4132 +#: describe.c:4142 msgid "List of languages" msgstr "Lista de lenguajes" -#: describe.c:4177 +#: describe.c:4187 msgid "Check" msgstr "Check" -#: describe.c:4219 +#: describe.c:4229 msgid "List of domains" msgstr "Listado de dominios" -#: describe.c:4253 +#: describe.c:4263 msgid "Source" msgstr "Fuente" -#: describe.c:4254 +#: describe.c:4264 msgid "Destination" msgstr "Destino" -#: describe.c:4256 describe.c:6091 +#: describe.c:4266 describe.c:6101 msgid "Default?" msgstr "Por omisión?" -#: describe.c:4293 +#: describe.c:4303 msgid "List of conversions" msgstr "Listado de conversiones" -#: describe.c:4332 +#: describe.c:4342 msgid "Event" msgstr "Evento" -#: describe.c:4334 +#: describe.c:4344 msgid "enabled" msgstr "activo" -#: describe.c:4335 +#: describe.c:4345 msgid "replica" msgstr "réplica" -#: describe.c:4336 +#: describe.c:4346 msgid "always" msgstr "siempre" -#: describe.c:4337 +#: describe.c:4347 msgid "disabled" msgstr "inactivo" -#: describe.c:4338 describe.c:5987 +#: describe.c:4348 describe.c:5997 msgid "Enabled" msgstr "Activo" -#: describe.c:4340 +#: describe.c:4350 msgid "Tags" msgstr "Etiquetas" -#: describe.c:4359 +#: describe.c:4369 msgid "List of event triggers" msgstr "Listado de disparadores por eventos" -#: describe.c:4388 +#: describe.c:4398 msgid "Source type" msgstr "Tipo fuente" -#: describe.c:4389 +#: describe.c:4399 msgid "Target type" msgstr "Tipo destino" -#: describe.c:4420 +#: describe.c:4430 msgid "in assignment" msgstr "en asignación" -#: describe.c:4422 +#: describe.c:4432 msgid "Implicit?" msgstr "Implícito?" -#: describe.c:4477 +#: describe.c:4487 msgid "List of casts" msgstr "Listado de conversiones de tipo (casts)" -#: describe.c:4505 +#: describe.c:4515 #, c-format msgid "The server (version %s) does not support collations." msgstr "El servidor (versión %s) no soporta «collations»." -#: describe.c:4526 describe.c:4530 +#: describe.c:4536 describe.c:4540 msgid "Provider" msgstr "Proveedor" -#: describe.c:4536 describe.c:4541 +#: describe.c:4546 describe.c:4551 msgid "Deterministic?" msgstr "¿Determinístico?" -#: describe.c:4576 +#: describe.c:4586 msgid "List of collations" msgstr "Listado de ordenamientos" -#: describe.c:4635 +#: describe.c:4645 msgid "List of schemas" msgstr "Listado de esquemas" -#: describe.c:4660 describe.c:4907 describe.c:4978 describe.c:5049 +#: describe.c:4670 describe.c:4917 describe.c:4988 describe.c:5059 #, c-format msgid "The server (version %s) does not support full text search." msgstr "El servidor (versión %s) no soporta búsqueda en texto." -#: describe.c:4695 +#: describe.c:4705 msgid "List of text search parsers" msgstr "Listado de analizadores de búsqueda en texto" -#: describe.c:4740 +#: describe.c:4750 #, c-format msgid "Did not find any text search parser named \"%s\"." msgstr "No se encontró ningún analizador de búsqueda en texto llamado «%s»." -#: describe.c:4743 +#: describe.c:4753 #, c-format msgid "Did not find any text search parsers." msgstr "No se encontró ningún analizador de búsqueda en texto." -#: describe.c:4818 +#: describe.c:4828 msgid "Start parse" msgstr "Inicio de parse" -#: describe.c:4819 +#: describe.c:4829 msgid "Method" msgstr "Método" -#: describe.c:4823 +#: describe.c:4833 msgid "Get next token" msgstr "Obtener siguiente elemento" -#: describe.c:4825 +#: describe.c:4835 msgid "End parse" msgstr "Fin de parse" -#: describe.c:4827 +#: describe.c:4837 msgid "Get headline" msgstr "Obtener encabezado" -#: describe.c:4829 +#: describe.c:4839 msgid "Get token types" msgstr "Obtener tipos de elemento" -#: describe.c:4840 +#: describe.c:4850 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "Analizador de búsqueda en texto «%s.%s»" -#: describe.c:4843 +#: describe.c:4853 #, c-format msgid "Text search parser \"%s\"" msgstr "Analizador de búsqueda en texto «%s»" -#: describe.c:4862 +#: describe.c:4872 msgid "Token name" msgstr "Nombre de elemento" -#: describe.c:4873 +#: describe.c:4883 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "Tipos de elemento para el analizador «%s.%s»" -#: describe.c:4876 +#: describe.c:4886 #, c-format msgid "Token types for parser \"%s\"" msgstr "Tipos de elemento para el analizador «%s»" -#: describe.c:4930 +#: describe.c:4940 msgid "Template" msgstr "Plantilla" -#: describe.c:4931 +#: describe.c:4941 msgid "Init options" msgstr "Opciones de inicialización" -#: describe.c:4953 +#: describe.c:4963 msgid "List of text search dictionaries" msgstr "Listado de diccionarios de búsqueda en texto" -#: describe.c:4996 +#: describe.c:5006 msgid "Init" msgstr "Inicializador" -#: describe.c:4997 +#: describe.c:5007 msgid "Lexize" msgstr "Fn. análisis léx." -#: describe.c:5024 +#: describe.c:5034 msgid "List of text search templates" msgstr "Listado de plantillas de búsqueda en texto" -#: describe.c:5084 +#: describe.c:5094 msgid "List of text search configurations" msgstr "Listado de configuraciones de búsqueda en texto" -#: describe.c:5130 +#: describe.c:5140 #, c-format msgid "Did not find any text search configuration named \"%s\"." msgstr "No se encontró una configuración de búsqueda en texto llamada «%s»." -#: describe.c:5133 +#: describe.c:5143 #, c-format msgid "Did not find any text search configurations." msgstr "No se encontró una configuración de búsqueda en texto." -#: describe.c:5199 +#: describe.c:5209 msgid "Token" msgstr "Elemento" -#: describe.c:5200 +#: describe.c:5210 msgid "Dictionaries" msgstr "Diccionarios" -#: describe.c:5211 +#: describe.c:5221 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "Configuración de búsqueda en texto «%s.%s»" -#: describe.c:5214 +#: describe.c:5224 #, c-format msgid "Text search configuration \"%s\"" msgstr "Configuración de búsqueda en texto «%s»" -#: describe.c:5218 +#: describe.c:5228 #, c-format msgid "" "\n" @@ -2111,7 +2122,7 @@ msgstr "" "\n" "Analizador: «%s.%s»" -#: describe.c:5221 +#: describe.c:5231 #, c-format msgid "" "\n" @@ -2120,260 +2131,234 @@ msgstr "" "\n" "Analizador: «%s»" -#: describe.c:5255 +#: describe.c:5265 #, c-format msgid "The server (version %s) does not support foreign-data wrappers." msgstr "El servidor (versión %s) no soporta conectores de datos externos." -#: describe.c:5313 +#: describe.c:5323 msgid "List of foreign-data wrappers" msgstr "Listado de conectores de datos externos" -#: describe.c:5338 +#: describe.c:5348 #, c-format msgid "The server (version %s) does not support foreign servers." msgstr "El servidor (versión %s) no soporta servidores foráneos." -#: describe.c:5351 +#: describe.c:5361 msgid "Foreign-data wrapper" msgstr "Conectores de datos externos" -#: describe.c:5369 describe.c:5574 +#: describe.c:5379 describe.c:5584 msgid "Version" msgstr "Versión" -#: describe.c:5395 +#: describe.c:5405 msgid "List of foreign servers" msgstr "Listado de servidores foráneos" -#: describe.c:5420 +#: describe.c:5430 #, c-format msgid "The server (version %s) does not support user mappings." msgstr "El servidor (versión %s) no soporta mapeos de usuario." -#: describe.c:5430 describe.c:5494 +#: describe.c:5440 describe.c:5504 msgid "Server" msgstr "Servidor" -#: describe.c:5431 +#: describe.c:5441 msgid "User name" msgstr "Nombre de usuario" -#: describe.c:5456 +#: describe.c:5466 msgid "List of user mappings" msgstr "Listado de mapeos de usuario" -#: describe.c:5481 +#: describe.c:5491 #, c-format msgid "The server (version %s) does not support foreign tables." msgstr "El servidor (versión %s) no soporta tablas foráneas." -#: describe.c:5534 +#: describe.c:5544 msgid "List of foreign tables" msgstr "Listado de tablas foráneas" -#: describe.c:5559 describe.c:5616 +#: describe.c:5569 describe.c:5626 #, c-format msgid "The server (version %s) does not support extensions." msgstr "El servidor (versión %s) no soporta extensiones." -#: describe.c:5591 +#: describe.c:5601 msgid "List of installed extensions" msgstr "Listado de extensiones instaladas" -#: describe.c:5644 +#: describe.c:5654 #, c-format msgid "Did not find any extension named \"%s\"." msgstr "No se encontró extensión llamada «%s»." -#: describe.c:5647 +#: describe.c:5657 #, c-format msgid "Did not find any extensions." msgstr "No se encontró ninguna extensión." -#: describe.c:5691 +#: describe.c:5701 msgid "Object description" msgstr "Descripción de objeto" -#: describe.c:5701 +#: describe.c:5711 #, c-format msgid "Objects in extension \"%s\"" msgstr "Objetos en extensión «%s»" -#: describe.c:5730 describe.c:5806 +#: describe.c:5740 describe.c:5816 #, c-format msgid "The server (version %s) does not support publications." msgstr "El servidor (versión %s) no soporta publicaciones." -#: describe.c:5747 describe.c:5884 +#: describe.c:5757 describe.c:5894 msgid "All tables" msgstr "Todas las tablas" -#: describe.c:5748 describe.c:5885 +#: describe.c:5758 describe.c:5895 msgid "Inserts" msgstr "Inserts" -#: describe.c:5749 describe.c:5886 +#: describe.c:5759 describe.c:5896 msgid "Updates" msgstr "Updates" -#: describe.c:5750 describe.c:5887 +#: describe.c:5760 describe.c:5897 msgid "Deletes" msgstr "Deletes" -#: describe.c:5754 describe.c:5889 +#: describe.c:5764 describe.c:5899 msgid "Truncates" msgstr "Truncates" -#: describe.c:5758 describe.c:5891 +#: describe.c:5768 describe.c:5901 msgid "Via root" -msgstr "" +msgstr "Via root" -#: describe.c:5775 +#: describe.c:5785 msgid "List of publications" msgstr "Listado de publicaciones" -#: describe.c:5848 +#: describe.c:5858 #, c-format msgid "Did not find any publication named \"%s\"." msgstr "No se encontró publicación llamada «%s»." -#: describe.c:5851 +#: describe.c:5861 #, c-format msgid "Did not find any publications." msgstr "No se encontró ninguna publicación." -#: describe.c:5880 +#: describe.c:5890 #, c-format msgid "Publication %s" msgstr "Publicación %s" -#: describe.c:5928 +#: describe.c:5938 msgid "Tables:" msgstr "Tablas:" -#: describe.c:5972 +#: describe.c:5982 #, c-format msgid "The server (version %s) does not support subscriptions." msgstr "El servidor (versión %s) no soporta suscripciones." -#: describe.c:5988 +#: describe.c:5998 msgid "Publication" msgstr "Publicación" -#: describe.c:5995 +#: describe.c:6005 msgid "Synchronous commit" msgstr "Commit síncrono" -#: describe.c:5996 +#: describe.c:6006 msgid "Conninfo" msgstr "Conninfo" -#: describe.c:6018 +#: describe.c:6028 msgid "List of subscriptions" msgstr "Listado de suscripciones" -#: describe.c:6085 describe.c:6169 describe.c:6255 describe.c:6341 +#: describe.c:6095 describe.c:6184 describe.c:6270 describe.c:6353 msgid "AM" -msgstr "" +msgstr "AM" -#: describe.c:6086 -#, fuzzy -#| msgid "Result type" +#: describe.c:6096 msgid "Input type" -msgstr "Tipo resultado" +msgstr "Tipo de entrada" -#: describe.c:6087 -#, fuzzy -#| msgid "storage_type" +#: describe.c:6097 msgid "Storage type" -msgstr "tipo_almacenamiento" +msgstr "Tipo de almacenamiento" -#: describe.c:6088 -#, fuzzy -#| msgid "operator class" +#: describe.c:6098 msgid "Operator class" -msgstr "clase de operadores" +msgstr "Clase de operador" -#: describe.c:6100 describe.c:6170 describe.c:6342 -#, fuzzy -#| msgid "operator family" +#: describe.c:6110 describe.c:6185 describe.c:6271 describe.c:6354 msgid "Operator family" -msgstr "familia de operadores" +msgstr "Familia de operadores" -#: describe.c:6127 -#, fuzzy -#| msgid "List of operators" +#: describe.c:6143 msgid "List of operator classes" -msgstr "Listado de operadores" +msgstr "Listado de clases de operador" -#: describe.c:6171 +#: describe.c:6186 msgid "Applicable types" -msgstr "" +msgstr "Tipos aplicables" -#: describe.c:6206 -#, fuzzy -#| msgid "List of operators" +#: describe.c:6225 msgid "List of operator families" -msgstr "Listado de operadores" - -#: describe.c:6256 -#, fuzzy -#| msgid "family_name" -msgid "Opfamily Name" -msgstr "nombre_familia" +msgstr "Listado de familias de operadores" -#: describe.c:6257 -#, fuzzy -#| msgid "operator" +#: describe.c:6272 msgid "Operator" -msgstr "operador" +msgstr "Operador" -#: describe.c:6267 -#, fuzzy -#| msgid "category" +#: describe.c:6273 msgid "Strategy" -msgstr "categoría" +msgstr "Estrategia" -#: describe.c:6268 +#: describe.c:6274 msgid "ordering" -msgstr "" +msgstr "ordenamiento" -#: describe.c:6269 +#: describe.c:6275 msgid "search" -msgstr "" +msgstr "búsqueda" -#: describe.c:6270 +#: describe.c:6276 msgid "Purpose" -msgstr "" +msgstr "Propósito" -#: describe.c:6271 -#, fuzzy -#| msgid "operator family" +#: describe.c:6281 msgid "Sort opfamily" -msgstr "familia de operadores" +msgstr "familia de ops de ordenamiento" -#: describe.c:6299 -#, fuzzy -#| msgid "must be owner of operator family %s" +#: describe.c:6312 msgid "List of operators of operator families" -msgstr "debe ser dueño de la familia de operadores %s" +msgstr "Lista de operadores de familias de operadores" -#: describe.c:6345 -msgid "Number" -msgstr "" +#: describe.c:6355 +msgid "Registered left type" +msgstr "Tipo de dato izquierdo registrado" -#: describe.c:6346 -#, fuzzy -#| msgid "Parent name" -msgid "Proc name" -msgstr "Nombre del padre" +#: describe.c:6356 +msgid "Registered right type" +msgstr "Tipo de dato derecho registrado" -#: describe.c:6372 -#, fuzzy -#| msgid "must be owner of operator family %s" -msgid "List of procedures of operator families" -msgstr "debe ser dueño de la familia de operadores %s" +#: describe.c:6357 +msgid "Number" +msgstr "Número" + +#: describe.c:6393 +msgid "List of support functions of operator families" +msgstr "Listado de funciones de la familia de operadores %s" #: help.c:73 #, c-format @@ -2673,12 +2658,12 @@ msgstr "" #: help.c:147 #, c-format msgid "Report bugs to <%s>.\n" -msgstr "" +msgstr "Reporte de errores a <%s>.\n" #: help.c:148 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" #: help.c:174 #, c-format @@ -2701,18 +2686,13 @@ msgid " \\errverbose show most recent error message at maximum verbo msgstr " \\errverbose mostrar error más reciente en máxima verbosidad\n" #: help.c:178 -#, fuzzy, c-format -#| msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" -msgid " \\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);\n" +#, c-format +msgid "" +" \\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);\n" +" \\g with no arguments is equivalent to a semicolon\n" msgstr "" -" \\g [ARCH] o ; enviar búfer de consulta al servidor\n" -" (y resultados a archivo u |orden)\n" - -#: help.c:179 -#, fuzzy, c-format -#| msgid " -e, --echo show the commands being sent to the server\n" -msgid " \\g with no arguments is equivalent to a semicolon\n" -msgstr " -e, --echo mostrar las órdenes enviadas al servidor\n" +" \\g [(OPTIONS)] [FILE] ejecuta la consulta (y envía el resultado a un fichero o |pipe);\n" +" \\g sin argumentos es equivalente a un punto y coma\n" #: help.c:180 #, c-format @@ -2732,10 +2712,9 @@ msgstr "" " de psql\n" #: help.c:183 -#, fuzzy, c-format -#| msgid " \\gx [FILE] as \\g, but forces expanded output mode\n" +#, c-format msgid " \\gx [(OPTIONS)] [FILE] as \\g, but forces expanded output mode\n" -msgstr " \\gx [ARCHIVO] como \\g, pero fuerza modo de salida expandido\n" +msgstr " \\ gx [(OPTIONS)] [FILE] como \\g, pero fuerza el modo de salida expandido\n" #: help.c:184 #, c-format @@ -2831,10 +2810,9 @@ msgid " \\copy ... perform SQL COPY with data stream to the client msgstr " \\copy ... ejecutar orden SQL COPY con flujo de datos al cliente\n" #: help.c:210 -#, fuzzy, c-format -#| msgid " \\echo [STRING] write string to standard output\n" +#, c-format msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" -msgstr " \\echo [CADENA] escribir cadena a salida estándar\n" +msgstr " \\echo [-n] [STRING] escribe la cadena en la salida estándar (-n no genera el salto de línea final)\n" #: help.c:211 #, c-format @@ -2852,16 +2830,14 @@ msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [ARCHIVO] enviar resultados de consultas a archivo u |orden\n" #: help.c:214 -#, fuzzy, c-format -#| msgid " \\qecho [STRING] write string to query output stream (see \\o)\n" +#, c-format msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" -msgstr " \\qecho [CADENA] escribir cadena a salida de consultas (ver \\o)\n" +msgstr " \\qecho [-n] [STRING] escribe la cadena hacia flujo de salida \\o (-n no genera el salto de línea final)\n" #: help.c:215 -#, fuzzy, c-format -#| msgid " \\echo [STRING] write string to standard output\n" +#, c-format msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" -msgstr " \\echo [CADENA] escribir cadena a salida estándar\n" +msgstr " \\warn [-n] [STRING] escribe la cadena a la salida de error estándar (-n no genera el salto de línea final)\n" #: help.c:218 #, c-format @@ -2919,27 +2895,24 @@ msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [PATRÓN] listar métodos de acceso\n" #: help.c:231 -#, fuzzy, c-format -#| msgid " \\do[S] [PATTERN] list operators\n" -msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" -msgstr " \\do[S] [PATRÓN] listar operadores\n" +#, c-format +msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" +msgstr " \\do[S] [PATRÓN] listar las clases de operadores\n" #: help.c:232 -#, fuzzy, c-format -#| msgid " \\do[S] [PATTERN] list operators\n" -msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" -msgstr " \\do[S] [PATRÓN] listar operadores\n" +#, c-format +msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" +msgstr " \\do[S] [PATRÓN] listar las familias de operadores\n" #: help.c:233 -#, fuzzy, c-format -#| msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" -msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" -msgstr " \\drds [PAT1 [PAT2]] listar parámetros de rol por base de datos\n" +#, c-format +msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" +msgstr " \\do[S] [PATRÓN] listar los operadores de la familia de operadores\n" #: help.c:234 #, c-format -msgid " \\dAp [AMPTRN [OPFPTRN]] list procedures of operator families\n" -msgstr "" +msgid " \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" +msgstr " \\dAp [AMPTRN [OPFPTRN]] enumera las funciones de la familia de operadores\n" #: help.c:235 #, c-format @@ -3326,7 +3299,7 @@ msgstr "" #: help.c:354 #, c-format msgid "psql variables:\n" -msgstr "Variables psql:\n" +msgstr "variables psql:\n" #: help.c:356 #, c-format @@ -4670,10 +4643,8 @@ msgid "cache" msgstr "cache" #: sql_help.c:1097 -#, fuzzy -#| msgid "new_table" msgid "new_target" -msgstr "nueva_tabla" +msgstr "nuevo_valor" #: sql_help.c:1113 sql_help.c:2675 msgid "conninfo" @@ -4840,10 +4811,8 @@ msgid "existing_enum_value" msgstr "valor_enum_existente" #: sql_help.c:1537 -#, fuzzy -#| msgid "operator" msgid "property" -msgstr "operador" +msgstr "propiedad" #: sql_help.c:1612 sql_help.c:2251 sql_help.c:2260 sql_help.c:2643 #: sql_help.c:3120 sql_help.c:3571 sql_help.c:3750 sql_help.c:3786 @@ -5131,10 +5100,8 @@ msgid "method" msgstr "método" #: sql_help.c:2371 -#, fuzzy -#| msgid "storage_parameter" msgid "opclass_parameter" -msgstr "parámetro_de_almacenamiento" +msgstr "parámetro_opclass" #: sql_help.c:2388 msgid "call_handler" @@ -6232,7 +6199,7 @@ msgstr "revoca privilegios de acceso" #: sql_help.c:5797 msgid "cancel a transaction that was earlier prepared for two-phase commit" -msgstr "cancela una transacción que fue previamente preparada para two-phase commit." +msgstr "cancela una transacción que fue previamente preparada para two-phase commit" #: sql_help.c:5803 msgid "roll back to a savepoint" @@ -6374,15 +6341,3 @@ msgid "" msgstr "" "valor «%s» no reconocido para «%s»\n" "Los valores disponibles son: %s." - -#~ msgid "Report bugs to .\n" -#~ msgstr "Reporte errores a .\n" - -#~ msgid "old_version" -#~ msgstr "versión_antigua" - -#~ msgid "using_list" -#~ msgstr "lista_using" - -#~ msgid "from_list" -#~ msgstr "lista_from" diff --git a/src/bin/psql/po/fr.po b/src/bin/psql/po/fr.po index c73ad6b1daa17..5b33183bcf99a 100644 --- a/src/bin/psql/po/fr.po +++ b/src/bin/psql/po/fr.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-25 05:13+0000\n" -"PO-Revision-Date: 2019-09-26 11:09+0200\n" +"POT-Creation-Date: 2021-04-26 06:45+0000\n" +"PO-Revision-Date: 2021-04-26 11:36+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -18,71 +18,72 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Poedit 2.4.2\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal : " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "erreur : " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "attention : " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "n'a pas pu identifier le répertoire courant : %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "binaire « %s » invalide" -#: ../../common/exec.c:207 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "n'a pas pu lire le binaire « %s »" -#: ../../common/exec.c:215 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "n'a pas pu trouver un « %s » à exécuter" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "n'a pas pu modifier le répertoire par « %s » : %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "n'a pas pu lire le lien symbolique « %s » : %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:409 #, c-format -msgid "pclose failed: %m" -msgstr "échec de pclose : %m" +msgid "%s() failed: %m" +msgstr "échec de %s() : %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 -#: command.c:1218 input.c:228 mainloop.c:82 mainloop.c:386 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 +#: command.c:1315 command.c:3246 command.c:3295 command.c:3412 input.c:227 +#: mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" msgstr "mémoire épuisée" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "mémoire épuisée\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" @@ -92,7 +93,7 @@ msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" msgid "could not look up effective user ID %ld: %s" msgstr "n'a pas pu trouver l'identifiant réel %ld de l'utilisateur : %s" -#: ../../common/username.c:45 command.c:555 +#: ../../common/username.c:45 command.c:565 msgid "user does not exist" msgstr "l'utilisateur n'existe pas" @@ -131,296 +132,314 @@ msgstr "le processus fils a été terminé par le signal %d : %s" msgid "child process exited with unrecognized status %d" msgstr "le processus fils a quitté avec un statut %d non reconnu" -#: ../../fe_utils/print.c:353 +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Requête d'annulation envoyée\n" + +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 +msgid "Could not send cancel request: " +msgstr "N'a pas pu envoyer la requête d'annulation : " + +#: ../../fe_utils/print.c:336 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu ligne)" msgstr[1] "(%lu lignes)" -#: ../../fe_utils/print.c:3058 +#: ../../fe_utils/print.c:3039 #, c-format msgid "Interrupted\n" msgstr "Interrompu\n" -#: ../../fe_utils/print.c:3122 +#: ../../fe_utils/print.c:3103 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "" "Ne peut pas ajouter l'en-tête au contenu de la table : le nombre de colonnes\n" "%d est dépassé.\n" -#: ../../fe_utils/print.c:3162 +#: ../../fe_utils/print.c:3143 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "" "Ne peut pas ajouter une cellule au contenu de la table : le nombre total des\n" "cellules %d est dépassé.\n" -#: ../../fe_utils/print.c:3417 +#: ../../fe_utils/print.c:3401 #, c-format msgid "invalid output format (internal error): %d" msgstr "format de sortie invalide (erreur interne) : %d" -#: ../../fe_utils/psqlscan.l:729 +#: ../../fe_utils/psqlscan.l:697 #, c-format msgid "skipping recursive expansion of variable \"%s\"" msgstr "ignore l'expansion récursive de la variable « %s »" -#: command.c:221 +#: command.c:230 #, c-format msgid "invalid command \\%s" msgstr "commande \\%s invalide" -#: command.c:223 +#: command.c:232 #, c-format msgid "Try \\? for help." msgstr "Essayez \\? pour l'aide." -#: command.c:241 +#: command.c:250 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s : argument « %s » supplémentaire ignoré" -#: command.c:293 +#: command.c:302 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "commande \\%s ignorée ; utilisez \\endif ou Ctrl-C pour quitter le bloc \\if courant" -#: command.c:553 +#: command.c:563 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "n'a pas pu obtenir le répertoire principal pour l'identifiant d'utilisateur %ld : %s" -#: command.c:571 +#: command.c:581 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s : n'a pas pu accéder au répertoire « %s » : %m" -#: command.c:596 +#: command.c:606 #, c-format msgid "You are currently not connected to a database.\n" msgstr "Vous n'êtes pas connecté à une base de données.\n" -#: command.c:609 +#: command.c:616 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Vous êtes connecté à la base de données « %s » en tant qu'utilisateur « %s » à l'adresse « %s » via le port « %s ».\n" -#: command.c:612 +#: command.c:619 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Vous êtes connecté à la base de données « %s » en tant qu'utilisateur « %s » via le socket dans « %s » via le port « %s ».\n" -#: command.c:618 +#: command.c:625 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Vous êtes connecté à la base de données « %s » en tant qu'utilisateur « %s » sur l'hôte « %s » (adresse « %s ») via le port « %s ».\n" -#: command.c:621 +#: command.c:628 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Vous êtes connecté à la base de données « %s » en tant qu'utilisateur « %s » sur l'hôte « %s » via le port « %s ».\n" -#: command.c:930 command.c:1026 command.c:2411 +#: command.c:1012 command.c:1121 command.c:2602 #, c-format msgid "no query buffer" msgstr "aucun tampon de requête" -#: command.c:963 command.c:4832 +#: command.c:1045 command.c:5304 #, c-format msgid "invalid line number: %s" msgstr "numéro de ligne invalide : %s" -#: command.c:1017 +#: command.c:1112 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "Le serveur (version %s) ne supporte pas l'édition du code de la fonction." -#: command.c:1020 +#: command.c:1115 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "Le serveur (version %s) ne supporte pas l'édition des définitions de vue." -#: command.c:1102 +#: command.c:1197 msgid "No changes" msgstr "Aucun changement" -#: command.c:1179 +#: command.c:1276 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "%s : nom d'encodage invalide ou procédure de conversion introuvable" -#: command.c:1214 command.c:1853 command.c:3109 command.c:4934 common.c:175 -#: common.c:224 common.c:535 common.c:1376 common.c:1404 common.c:1512 -#: common.c:1615 common.c:1653 copy.c:490 copy.c:709 help.c:63 large_obj.c:157 -#: large_obj.c:192 large_obj.c:254 +#: command.c:1311 command.c:2052 command.c:3242 command.c:3434 command.c:5406 +#: common.c:174 common.c:223 common.c:392 common.c:1248 common.c:1276 +#: common.c:1385 common.c:1492 common.c:1530 copy.c:488 copy.c:709 help.c:62 +#: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:298 #, c-format msgid "%s" msgstr "%s" -#: command.c:1221 +#: command.c:1318 msgid "There is no previous error." msgstr "Il n'y a pas d'erreur précédente." -#: command.c:1409 command.c:1714 command.c:1728 command.c:1745 command.c:1905 -#: command.c:2142 command.c:2378 command.c:2418 +#: command.c:1431 +#, c-format +msgid "\\%s: missing right parenthesis" +msgstr "\\%s: parenthèse droite manquante" + +#: command.c:1608 command.c:1913 command.c:1927 command.c:1944 command.c:2106 +#: command.c:2342 command.c:2569 command.c:2609 #, c-format msgid "\\%s: missing required argument" msgstr "\\%s : argument requis manquant" -#: command.c:1540 +#: command.c:1739 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif : ne peut pas survenir après \\else" -#: command.c:1545 +#: command.c:1744 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif : pas de \\if correspondant" -#: command.c:1609 +#: command.c:1808 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else : ne peut pas survenir après \\else" -#: command.c:1614 +#: command.c:1813 #, c-format msgid "\\else: no matching \\if" msgstr "\\else : pas de \\if correspondant" -#: command.c:1654 +#: command.c:1853 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif : pas de \\if correspondant" -#: command.c:1809 +#: command.c:2008 msgid "Query buffer is empty." msgstr "Le tampon de requête est vide." -#: command.c:1831 +#: command.c:2030 msgid "Enter new password: " msgstr "Saisissez le nouveau mot de passe : " -#: command.c:1832 +#: command.c:2031 msgid "Enter it again: " msgstr "Saisissez-le à nouveau : " -#: command.c:1836 +#: command.c:2035 #, c-format msgid "Passwords didn't match." msgstr "Les mots de passe ne sont pas identiques." -#: command.c:1935 +#: command.c:2135 #, c-format msgid "\\%s: could not read value for variable" msgstr "\\%s : n'a pas pu lire la valeur pour la variable" -#: command.c:2038 +#: command.c:2238 msgid "Query buffer reset (cleared)." msgstr "Le tampon de requête a été effacé." -#: command.c:2060 +#: command.c:2260 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Historique sauvegardé dans le fichier « %s ».\n" -#: command.c:2147 +#: command.c:2347 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s : le nom de la variable d'environnement ne doit pas contenir « = »" -#: command.c:2208 +#: command.c:2399 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "Le serveur (version %s) ne supporte pas l'affichage du code de la fonction." -#: command.c:2211 +#: command.c:2402 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "Le serveur (version %s) ne supporte pas l'affichage des définitions de vues." -#: command.c:2218 +#: command.c:2409 #, c-format msgid "function name is required" msgstr "le nom de la fonction est requis" -#: command.c:2220 +#: command.c:2411 #, c-format msgid "view name is required" msgstr "le nom de la vue est requis" -#: command.c:2350 +#: command.c:2541 msgid "Timing is on." msgstr "Chronométrage activé." -#: command.c:2352 +#: command.c:2543 msgid "Timing is off." msgstr "Chronométrage désactivé." -#: command.c:2437 command.c:2465 command.c:3516 command.c:3519 command.c:3522 -#: command.c:3528 command.c:3530 command.c:3538 command.c:3548 command.c:3557 -#: command.c:3571 command.c:3588 command.c:3646 common.c:71 copy.c:333 -#: copy.c:405 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 +#: command.c:2628 command.c:2656 command.c:3873 command.c:3876 command.c:3879 +#: command.c:3885 command.c:3887 command.c:3913 command.c:3923 command.c:3935 +#: command.c:3949 command.c:3976 command.c:4034 common.c:70 copy.c:331 +#: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s : %m" -#: command.c:2849 startup.c:240 startup.c:291 +#: command.c:3047 startup.c:237 startup.c:287 msgid "Password: " msgstr "Mot de passe : " -#: command.c:2854 startup.c:288 +#: command.c:3052 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "Mot de passe pour l'utilisateur %s : " -#: command.c:2925 +#: command.c:3104 #, c-format -msgid "All connection parameters must be supplied because no database connection exists" -msgstr "Tous les paramètres de connexion doivent être fournis car il n'existe pas de connexion à une base de données" +msgid "Do not give user, host, or port separately when using a connection string" +msgstr "Ne pas donner utilisateur, hôte ou port lors de l'utilisation d'une chaîne de connexion" -#: command.c:3113 +#: command.c:3139 +#, c-format +msgid "No database connection exists to re-use parameters from" +msgstr "Aucune connexion de base existante pour réutiliser ses paramètres" + +#: command.c:3440 #, c-format msgid "Previous connection kept" msgstr "Connexion précédente conservée" -#: command.c:3117 +#: command.c:3446 #, c-format msgid "\\connect: %s" msgstr "\\connect : %s" -#: command.c:3166 +#: command.c:3502 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Vous êtes maintenant connecté à la base de données « %s » en tant qu'utilisateur « %s » à l'adresse « %s » via le port « %s ».\n" -#: command.c:3169 +#: command.c:3505 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Vous êtes maintenant connecté à la base de données « %s » en tant qu'utilisateur « %s » via le socket dans « %s » via le port « %s ».\n" -#: command.c:3175 +#: command.c:3511 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Vous êtes maintenant connecté à la base de données « %s » en tant qu'utilisateur « %s » sur l'hôte « %s » (adresse « %s » ) via le port « %s ».\n" -#: command.c:3178 +#: command.c:3514 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Vous êtes maintenant connecté à la base de données « %s » en tant qu'utilisateur « %s » sur l'hôte « %s » via le port « %s ».\n" -#: command.c:3183 +#: command.c:3519 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Vous êtes maintenant connecté à la base de données « %s » en tant qu'utilisateur « %s ».\n" -#: command.c:3216 +#: command.c:3559 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, serveur %s)\n" -#: command.c:3224 +#: command.c:3567 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" @@ -429,29 +448,29 @@ msgstr "" "ATTENTION : %s version majeure %s, version majeure du serveur %s.\n" " Certaines fonctionnalités de psql pourraient ne pas fonctionner.\n" -#: command.c:3263 +#: command.c:3606 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "Connexion SSL (protocole : %s, chiffrement : %s, bits : %s, compression : %s)\n" -#: command.c:3264 command.c:3265 command.c:3266 +#: command.c:3607 command.c:3608 command.c:3609 msgid "unknown" msgstr "inconnu" -#: command.c:3267 help.c:46 +#: command.c:3610 help.c:45 msgid "off" msgstr "désactivé" -#: command.c:3267 help.c:46 +#: command.c:3610 help.c:45 msgid "on" msgstr "activé" -#: command.c:3281 +#: command.c:3624 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "connexion chiffrée avec GSSAPI\n" -#: command.c:3301 +#: command.c:3644 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -463,259 +482,259 @@ msgstr "" " Voir la section « Notes aux utilisateurs de Windows » de la page\n" " référence de psql pour les détails.\n" -#: command.c:3405 +#: command.c:3749 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number" msgstr "la variable d'environnement PSQL_EDITOR_LINENUMBER_ARG doit être définie avec un numéro de ligne" -#: command.c:3434 +#: command.c:3778 #, c-format msgid "could not start editor \"%s\"" msgstr "n'a pas pu exécuter l'éditeur « %s »" -#: command.c:3436 +#: command.c:3780 #, c-format msgid "could not start /bin/sh" msgstr "n'a pas pu exécuter /bin/sh" -#: command.c:3474 +#: command.c:3830 #, c-format msgid "could not locate temporary directory: %s" msgstr "n'a pas pu localiser le répertoire temporaire : %s" -#: command.c:3501 +#: command.c:3857 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier temporaire « %s » : %m" -#: command.c:3794 +#: command.c:4193 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: abréviation ambigüe : « %s » correspond à « %s » comme à « %s »" -#: command.c:3814 +#: command.c:4213 #, c-format msgid "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" msgstr "\\pset : les formats autorisés sont aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" -#: command.c:3833 +#: command.c:4232 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: les styles de lignes autorisés sont ascii, old-ascii, unicode" -#: command.c:3848 +#: command.c:4247 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset : les styles autorisés de ligne de bordure Unicode sont single, double" -#: command.c:3863 +#: command.c:4262 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset : les styles autorisés pour la ligne de colonne Unicode sont single, double" -#: command.c:3878 +#: command.c:4277 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset : les styles autorisés pour la ligne d'en-tête Unicode sont single, double" -#: command.c:3921 +#: command.c:4320 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsep doit être un unique caractère d'un octet" -#: command.c:3926 +#: command.c:4325 #, c-format msgid "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage return" msgstr "\\pset: csv_fieldsep ne peut pas être un guillemet, un retour à la ligne ou un retour chariot" -#: command.c:4063 command.c:4249 +#: command.c:4462 command.c:4650 #, c-format msgid "\\pset: unknown option: %s" msgstr "\\pset : option inconnue : %s" -#: command.c:4081 +#: command.c:4482 #, c-format msgid "Border style is %d.\n" msgstr "Le style de bordure est %d.\n" -#: command.c:4087 +#: command.c:4488 #, c-format msgid "Target width is unset.\n" msgstr "La largeur cible n'est pas configuré.\n" -#: command.c:4089 +#: command.c:4490 #, c-format msgid "Target width is %d.\n" msgstr "La largeur cible est %d.\n" -#: command.c:4096 +#: command.c:4497 #, c-format msgid "Expanded display is on.\n" msgstr "Affichage étendu activé.\n" -#: command.c:4098 +#: command.c:4499 #, c-format msgid "Expanded display is used automatically.\n" msgstr "L'affichage étendu est utilisé automatiquement.\n" -#: command.c:4100 +#: command.c:4501 #, c-format msgid "Expanded display is off.\n" msgstr "Affichage étendu désactivé.\n" -#: command.c:4106 +#: command.c:4507 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "Le séparateur de champs pour un CSV est « %s ».\n" -#: command.c:4114 command.c:4122 +#: command.c:4515 command.c:4523 #, c-format msgid "Field separator is zero byte.\n" msgstr "Le séparateur de champs est l'octet zéro.\n" -#: command.c:4116 +#: command.c:4517 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Le séparateur de champs est « %s ».\n" -#: command.c:4129 +#: command.c:4530 #, c-format msgid "Default footer is on.\n" msgstr "Le bas de page pas défaut est activé.\n" -#: command.c:4131 +#: command.c:4532 #, c-format msgid "Default footer is off.\n" msgstr "Le bas de page par défaut est désactivé.\n" -#: command.c:4137 +#: command.c:4538 #, c-format msgid "Output format is %s.\n" msgstr "Le format de sortie est %s.\n" -#: command.c:4143 +#: command.c:4544 #, c-format msgid "Line style is %s.\n" msgstr "Le style de ligne est %s.\n" -#: command.c:4150 +#: command.c:4551 #, c-format msgid "Null display is \"%s\".\n" msgstr "L'affichage de null est « %s ».\n" -#: command.c:4158 +#: command.c:4559 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "L'affichage de la sortie numérique adaptée à la locale est activé.\n" -#: command.c:4160 +#: command.c:4561 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "L'affichage de la sortie numérique adaptée à la locale est désactivé.\n" -#: command.c:4167 +#: command.c:4568 #, c-format msgid "Pager is used for long output.\n" msgstr "Le paginateur est utilisé pour les affichages longs.\n" -#: command.c:4169 +#: command.c:4570 #, c-format msgid "Pager is always used.\n" msgstr "Le paginateur est toujours utilisé.\n" -#: command.c:4171 +#: command.c:4572 #, c-format msgid "Pager usage is off.\n" msgstr "L'utilisation du paginateur est désactivé.\n" -#: command.c:4177 +#: command.c:4578 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" msgstr[0] "Le paginateur ne sera pas utilisé pour moins que %d ligne.\n" msgstr[1] "Le paginateur ne sera pas utilisé pour moins que %d lignes.\n" -#: command.c:4187 command.c:4197 +#: command.c:4588 command.c:4598 #, c-format msgid "Record separator is zero byte.\n" msgstr "Le séparateur d'enregistrements est l'octet zéro.\n" -#: command.c:4189 +#: command.c:4590 #, c-format msgid "Record separator is .\n" msgstr "Le séparateur d'enregistrement est .\n" -#: command.c:4191 +#: command.c:4592 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Le séparateur d'enregistrements est « %s ».\n" -#: command.c:4204 +#: command.c:4605 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Les attributs de la table sont « %s ».\n" -#: command.c:4207 +#: command.c:4608 #, c-format msgid "Table attributes unset.\n" msgstr "Les attributs de la table ne sont pas définis.\n" -#: command.c:4214 +#: command.c:4615 #, c-format msgid "Title is \"%s\".\n" msgstr "Le titre est « %s ».\n" -#: command.c:4216 +#: command.c:4617 #, c-format msgid "Title is unset.\n" msgstr "Le titre n'est pas défini.\n" -#: command.c:4223 +#: command.c:4624 #, c-format msgid "Tuples only is on.\n" msgstr "L'affichage des tuples seuls est activé.\n" -#: command.c:4225 +#: command.c:4626 #, c-format msgid "Tuples only is off.\n" msgstr "L'affichage des tuples seuls est désactivé.\n" -#: command.c:4231 +#: command.c:4632 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "Le style de bordure Unicode est « %s ».\n" -#: command.c:4237 +#: command.c:4638 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "Le style de ligne Unicode est « %s ».\n" -#: command.c:4243 +#: command.c:4644 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "Le style d'en-tête Unicode est « %s ».\n" -#: command.c:4405 +#: command.c:4877 #, c-format msgid "\\!: failed" msgstr "\\! : échec" -#: command.c:4430 common.c:795 +#: command.c:4902 common.c:652 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch ne peut pas être utilisé avec une requête vide" -#: command.c:4471 +#: command.c:4943 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (chaque %gs)\n" -#: command.c:4474 +#: command.c:4946 #, c-format msgid "%s (every %gs)\n" msgstr "%s (chaque %gs)\n" -#: command.c:4528 command.c:4535 common.c:695 common.c:702 common.c:1359 +#: command.c:5000 command.c:5007 common.c:552 common.c:559 common.c:1231 #, c-format msgid "" "********* QUERY **********\n" @@ -728,111 +747,121 @@ msgstr "" "**************************\n" "\n" -#: command.c:4727 +#: command.c:5199 #, c-format msgid "\"%s.%s\" is not a view" msgstr "« %s.%s » n'est pas une vue" -#: command.c:4743 +#: command.c:5215 #, c-format msgid "could not parse reloptions array" msgstr "n'a pas pu analyser le tableau reloptions" -#: common.c:160 +#: common.c:159 #, c-format msgid "cannot escape without active connection" msgstr "ne peut mettre entre guillemets sans connexion active" -#: common.c:201 +#: common.c:200 #, c-format msgid "shell command argument contains a newline or carriage return: \"%s\"" msgstr "l'argument de la commande shell contient un retour à la ligne ou un retour chariot : « %s »" -#: common.c:395 +#: common.c:304 #, c-format msgid "connection to server was lost" msgstr "la connexion au serveur a été perdue" -#: common.c:399 +#: common.c:308 #, c-format msgid "The connection to the server was lost. Attempting reset: " msgstr "La connexion au serveur a été perdue. Tentative de réinitialisation : " -#: common.c:404 +#: common.c:313 #, c-format msgid "Failed.\n" msgstr "Échec.\n" -#: common.c:417 +#: common.c:330 #, c-format msgid "Succeeded.\n" msgstr "Succès.\n" -#: common.c:525 common.c:1077 common.c:1294 +#: common.c:382 common.c:949 common.c:1166 #, c-format msgid "unexpected PQresultStatus: %d" msgstr "PQresultStatus inattendu : %d" -#: common.c:634 +#: common.c:491 #, c-format msgid "Time: %.3f ms\n" msgstr "Temps : %.3f ms\n" -#: common.c:649 +#: common.c:506 #, c-format msgid "Time: %.3f ms (%02d:%06.3f)\n" msgstr "Durée : %.3f ms (%02d:%06.3f)\n" -#: common.c:658 +#: common.c:515 #, c-format msgid "Time: %.3f ms (%02d:%02d:%06.3f)\n" msgstr "Durée : %.3f ms (%02d:%02d:%06.3f)\n" -#: common.c:665 +#: common.c:522 #, c-format msgid "Time: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" msgstr "Durée : %.3f ms (%.0f d %02d:%02d:%06.3f)\n" -#: common.c:689 common.c:747 common.c:1330 +#: common.c:546 common.c:604 common.c:1202 #, c-format msgid "You are currently not connected to a database." msgstr "Vous n'êtes pas connecté à une base de données." -#: common.c:802 +#: common.c:659 #, c-format msgid "\\watch cannot be used with COPY" msgstr "\\watch ne peut pas être utilisé avec COPY" -#: common.c:807 +#: common.c:664 #, c-format msgid "unexpected result status for \\watch" msgstr "statut résultat inattendu pour \\watch" -#: common.c:837 +#: common.c:694 #, c-format msgid "Asynchronous notification \"%s\" with payload \"%s\" received from server process with PID %d.\n" msgstr "" "Notification asynchrone « %s » reçue avec le contenu « %s » en provenance du\n" "processus serveur de PID %d.\n" -#: common.c:840 +#: common.c:697 #, c-format msgid "Asynchronous notification \"%s\" received from server process with PID %d.\n" msgstr "" "Notification asynchrone « %s » reçue en provenance du processus serveur de\n" "PID %d.\n" -#: common.c:903 +#: common.c:730 common.c:747 +#, c-format +msgid "could not print result table: %m" +msgstr "n'a pas pu imprimer la table résultante : %m" + +#: common.c:768 #, c-format msgid "no rows returned for \\gset" msgstr "aucune ligne retournée pour \\gset" -#: common.c:908 +#: common.c:773 #, c-format msgid "more than one row returned for \\gset" msgstr "plus d'une ligne retournée pour \\gset" -#: common.c:1339 +#: common.c:791 +#, c-format +msgid "attempt to \\gset into specially treated variable \"%s\" ignored" +msgstr "tentative ignorée d'utilisation de \\gset dans une variable traitée spécialement « %s »" + +#: common.c:1211 #, c-format msgid "" "***(Single step mode: verify command)*******************************************\n" @@ -843,92 +872,92 @@ msgstr "" "%s\n" "***(appuyez sur entrée pour l'exécuter ou tapez x puis entrée pour annuler)***\n" -#: common.c:1394 +#: common.c:1266 #, c-format msgid "The server (version %s) does not support savepoints for ON_ERROR_ROLLBACK." msgstr "Le serveur (version %s) ne supporte pas les points de sauvegarde pour ON_ERROR_ROLLBACK." -#: common.c:1457 +#: common.c:1329 #, c-format msgid "STATEMENT: %s" msgstr "INSTRUCTION : %s" -#: common.c:1500 +#: common.c:1373 #, c-format msgid "unexpected transaction status (%d)" msgstr "état de la transaction inattendu (%d)" -#: common.c:1637 describe.c:2002 +#: common.c:1514 describe.c:2179 msgid "Column" msgstr "Colonne" -#: common.c:1638 describe.c:179 describe.c:394 describe.c:412 describe.c:457 -#: describe.c:474 describe.c:963 describe.c:1127 describe.c:1712 -#: describe.c:1736 describe.c:2003 describe.c:3674 describe.c:3859 -#: describe.c:4092 describe.c:5298 +#: common.c:1515 describe.c:178 describe.c:396 describe.c:414 describe.c:459 +#: describe.c:476 describe.c:1128 describe.c:1292 describe.c:1878 +#: describe.c:1902 describe.c:2180 describe.c:4048 describe.c:4271 +#: describe.c:4496 describe.c:5794 msgid "Type" msgstr "Type" -#: common.c:1687 +#: common.c:1564 #, c-format msgid "The command has no result, or the result has no columns.\n" msgstr "La commande n'a pas de résultats ou le résultat n'a pas de colonnes.\n" -#: copy.c:100 +#: copy.c:98 #, c-format msgid "\\copy: arguments required" msgstr "\\copy : arguments requis" -#: copy.c:255 +#: copy.c:253 #, c-format msgid "\\copy: parse error at \"%s\"" msgstr "\\copy : erreur d'analyse sur « %s »" -#: copy.c:257 +#: copy.c:255 #, c-format msgid "\\copy: parse error at end of line" msgstr "\\copy : erreur d'analyse à la fin de la ligne" -#: copy.c:330 +#: copy.c:328 #, c-format msgid "could not execute command \"%s\": %m" msgstr "n'a pas pu exécuter la commande « %s » : %m" -#: copy.c:346 +#: copy.c:344 #, c-format msgid "could not stat file \"%s\": %m" msgstr "n'a pas pu tester le fichier « %s » : %m" -#: copy.c:350 +#: copy.c:348 #, c-format msgid "%s: cannot copy from/to a directory" msgstr "%s : ne peut pas copier depuis/vers un répertoire" -#: copy.c:387 +#: copy.c:385 #, c-format msgid "could not close pipe to external command: %m" msgstr "n'a pas pu fermer le fichier pipe vers la commande externe : %m" -#: copy.c:392 +#: copy.c:390 #, c-format msgid "%s: %s" msgstr "%s : %s" -#: copy.c:455 copy.c:465 +#: copy.c:453 copy.c:463 #, c-format msgid "could not write COPY data: %m" msgstr "n'a pas pu écrire les données du COPY : %m" -#: copy.c:471 +#: copy.c:469 #, c-format msgid "COPY data transfer failed: %s" msgstr "Échec du transfert de données COPY : %s" -#: copy.c:532 +#: copy.c:530 msgid "canceled by user" msgstr "annulé par l'utilisateur" -#: copy.c:543 +#: copy.c:541 msgid "" "Enter data to be copied followed by a newline.\n" "End with a backslash and a period on a line by itself, or an EOF signal." @@ -944,214 +973,216 @@ msgstr "annulé du fait d'une erreur de lecture" msgid "trying to exit copy mode" msgstr "tente de sortir du mode copy" -#: crosstabview.c:124 +#: crosstabview.c:123 #, c-format msgid "\\crosstabview: statement did not return a result set" msgstr "\\crosstabview : la commande n'a pas retourné d'ensemble de résultats" -#: crosstabview.c:130 +#: crosstabview.c:129 #, c-format msgid "\\crosstabview: query must return at least three columns" msgstr "\\crosstabview : la requête doit renvoyer au moins trois colonnes" -#: crosstabview.c:157 +#: crosstabview.c:156 #, c-format msgid "\\crosstabview: vertical and horizontal headers must be different columns" msgstr "\\crosstabview : les en-têtes horizontales et verticales doivent être des colonnes différentes" -#: crosstabview.c:173 +#: crosstabview.c:172 #, c-format msgid "\\crosstabview: data column must be specified when query returns more than three columns" msgstr "\\crosstabview : la colonne de données doit être spécifiée quand la requête retourne plus de trois colonnes" -#: crosstabview.c:229 +#: crosstabview.c:228 #, c-format msgid "\\crosstabview: maximum number of columns (%d) exceeded" msgstr "\\crosstabview : nombre maximum de colonnes (%d) dépassé" -#: crosstabview.c:398 +#: crosstabview.c:397 #, c-format msgid "\\crosstabview: query result contains multiple data values for row \"%s\", column \"%s\"" msgstr "\\crosstabview : le résultat de la requête contient plusieurs valeurs de données pour la ligne « %s », colonne « %s »" -#: crosstabview.c:646 +#: crosstabview.c:645 #, c-format msgid "\\crosstabview: column number %d is out of range 1..%d" msgstr "\\crosstabview : le numéro de colonne %d est en dehors des limites 1..%d" -#: crosstabview.c:671 +#: crosstabview.c:670 #, c-format msgid "\\crosstabview: ambiguous column name: \"%s\"" msgstr "\\crosstabview : nom de colonne ambigu : « %s »" -#: crosstabview.c:679 +#: crosstabview.c:678 #, c-format msgid "\\crosstabview: column name not found: \"%s\"" msgstr "\\crosstabview : nom de colonne non trouvé : « %s »" -#: describe.c:77 describe.c:374 describe.c:679 describe.c:811 describe.c:955 -#: describe.c:1116 describe.c:1188 describe.c:3663 describe.c:3846 -#: describe.c:4090 describe.c:4181 describe.c:4448 describe.c:4608 -#: describe.c:4849 describe.c:4924 describe.c:4935 describe.c:4997 -#: describe.c:5422 describe.c:5505 +#: describe.c:76 describe.c:376 describe.c:728 describe.c:924 describe.c:1120 +#: describe.c:1281 describe.c:1353 describe.c:4036 describe.c:4258 +#: describe.c:4494 describe.c:4585 describe.c:4731 describe.c:4944 +#: describe.c:5104 describe.c:5345 describe.c:5420 describe.c:5431 +#: describe.c:5493 describe.c:5918 describe.c:6001 msgid "Schema" msgstr "Schéma" -#: describe.c:78 describe.c:176 describe.c:244 describe.c:252 describe.c:375 -#: describe.c:680 describe.c:812 describe.c:873 describe.c:956 describe.c:1189 -#: describe.c:3664 describe.c:3847 describe.c:4013 describe.c:4091 -#: describe.c:4182 describe.c:4261 describe.c:4449 describe.c:4533 -#: describe.c:4609 describe.c:4850 describe.c:4925 describe.c:4936 -#: describe.c:4998 describe.c:5195 describe.c:5279 describe.c:5503 -#: describe.c:5675 describe.c:5900 +#: describe.c:77 describe.c:175 describe.c:243 describe.c:251 describe.c:377 +#: describe.c:729 describe.c:925 describe.c:1038 describe.c:1121 +#: describe.c:1354 describe.c:4037 describe.c:4259 describe.c:4417 +#: describe.c:4495 describe.c:4586 describe.c:4665 describe.c:4732 +#: describe.c:4945 describe.c:5029 describe.c:5105 describe.c:5346 +#: describe.c:5421 describe.c:5432 describe.c:5494 describe.c:5691 +#: describe.c:5775 describe.c:5999 describe.c:6171 describe.c:6411 msgid "Name" msgstr "Nom" -#: describe.c:79 describe.c:387 describe.c:405 describe.c:451 describe.c:468 +#: describe.c:78 describe.c:389 describe.c:407 describe.c:453 describe.c:470 msgid "Result data type" msgstr "Type de données du résultat" -#: describe.c:87 describe.c:100 describe.c:104 describe.c:388 describe.c:406 -#: describe.c:452 describe.c:469 +#: describe.c:86 describe.c:99 describe.c:103 describe.c:390 describe.c:408 +#: describe.c:454 describe.c:471 msgid "Argument data types" msgstr "Type de données des paramètres" -#: describe.c:112 describe.c:119 describe.c:187 describe.c:275 describe.c:514 -#: describe.c:728 describe.c:827 describe.c:898 describe.c:1191 describe.c:2021 -#: describe.c:3452 describe.c:3699 describe.c:3893 describe.c:4044 -#: describe.c:4118 describe.c:4191 describe.c:4274 describe.c:4357 -#: describe.c:4476 describe.c:4542 describe.c:4610 describe.c:4751 -#: describe.c:4793 describe.c:4866 describe.c:4928 describe.c:4937 -#: describe.c:4999 describe.c:5221 describe.c:5301 describe.c:5436 -#: describe.c:5506 large_obj.c:290 large_obj.c:300 +#: describe.c:111 describe.c:118 describe.c:186 describe.c:274 describe.c:523 +#: describe.c:777 describe.c:940 describe.c:1063 describe.c:1356 +#: describe.c:2200 describe.c:3823 describe.c:4108 describe.c:4305 +#: describe.c:4448 describe.c:4522 describe.c:4595 describe.c:4678 +#: describe.c:4853 describe.c:4972 describe.c:5038 describe.c:5106 +#: describe.c:5247 describe.c:5289 describe.c:5362 describe.c:5424 +#: describe.c:5433 describe.c:5495 describe.c:5717 describe.c:5797 +#: describe.c:5932 describe.c:6002 large_obj.c:290 large_obj.c:300 msgid "Description" msgstr "Description" -#: describe.c:137 +#: describe.c:136 msgid "List of aggregate functions" msgstr "Liste des fonctions d'agrégation" -#: describe.c:162 +#: describe.c:161 #, c-format msgid "The server (version %s) does not support access methods." msgstr "Le serveur (version %s) ne supporte pas les méthodes d'accès." -#: describe.c:177 +#: describe.c:176 msgid "Index" msgstr "Index" -#: describe.c:178 describe.c:3680 describe.c:3872 describe.c:5423 +#: describe.c:177 describe.c:4056 describe.c:4284 describe.c:5919 msgid "Table" msgstr "Table" -#: describe.c:186 describe.c:5200 +#: describe.c:185 describe.c:5696 msgid "Handler" msgstr "Gestionnaire" -#: describe.c:205 +#: describe.c:204 msgid "List of access methods" msgstr "Liste des méthodes d'accès" -#: describe.c:231 +#: describe.c:230 #, c-format msgid "The server (version %s) does not support tablespaces." msgstr "Le serveur (version %s) ne supporte pas les tablespaces." -#: describe.c:245 describe.c:253 describe.c:502 describe.c:718 describe.c:874 -#: describe.c:1115 describe.c:3675 describe.c:3848 describe.c:4017 -#: describe.c:4263 describe.c:4534 describe.c:5196 describe.c:5280 -#: describe.c:5676 describe.c:5802 describe.c:5901 large_obj.c:289 +#: describe.c:244 describe.c:252 describe.c:504 describe.c:767 describe.c:1039 +#: describe.c:1280 describe.c:4049 describe.c:4260 describe.c:4421 +#: describe.c:4667 describe.c:5030 describe.c:5692 describe.c:5776 +#: describe.c:6172 describe.c:6309 describe.c:6412 describe.c:6535 +#: describe.c:6613 large_obj.c:289 msgid "Owner" msgstr "Propriétaire" -#: describe.c:246 describe.c:254 +#: describe.c:245 describe.c:253 msgid "Location" msgstr "Emplacement" -#: describe.c:265 describe.c:3270 +#: describe.c:264 describe.c:3639 msgid "Options" msgstr "Options" -#: describe.c:270 describe.c:691 describe.c:890 describe.c:3691 describe.c:3695 +#: describe.c:269 describe.c:740 describe.c:1055 describe.c:4100 +#: describe.c:4104 msgid "Size" msgstr "Taille" -#: describe.c:292 +#: describe.c:291 msgid "List of tablespaces" msgstr "Liste des tablespaces" -#: describe.c:334 +#: describe.c:336 #, c-format msgid "\\df only takes [anptwS+] as options" msgstr "\\df ne prend que [anptwS+] comme options" -#: describe.c:342 describe.c:353 +#: describe.c:344 describe.c:355 #, c-format msgid "\\df does not take a \"%c\" option with server version %s" msgstr "\\df ne prend pas d'option « %c » pour un serveur en version %s" #. translator: "agg" is short for "aggregate" -#: describe.c:390 describe.c:408 describe.c:454 describe.c:471 +#: describe.c:392 describe.c:410 describe.c:456 describe.c:473 msgid "agg" msgstr "agg" -#: describe.c:391 describe.c:409 +#: describe.c:393 describe.c:411 msgid "window" msgstr "window" -#: describe.c:392 +#: describe.c:394 msgid "proc" msgstr "proc" -#: describe.c:393 describe.c:411 describe.c:456 describe.c:473 +#: describe.c:395 describe.c:413 describe.c:458 describe.c:475 msgid "func" msgstr "func" -#: describe.c:410 describe.c:455 describe.c:472 describe.c:1325 +#: describe.c:412 describe.c:457 describe.c:474 describe.c:1490 msgid "trigger" msgstr "trigger" -#: describe.c:484 +#: describe.c:486 msgid "immutable" msgstr "immutable" -#: describe.c:485 +#: describe.c:487 msgid "stable" msgstr "stable" -#: describe.c:486 +#: describe.c:488 msgid "volatile" msgstr "volatile" -#: describe.c:487 +#: describe.c:489 msgid "Volatility" msgstr "Volatibilité" -#: describe.c:495 +#: describe.c:497 msgid "restricted" msgstr "restricted" -#: describe.c:496 +#: describe.c:498 msgid "safe" msgstr "safe" -#: describe.c:497 +#: describe.c:499 msgid "unsafe" msgstr "unsafe" -#: describe.c:498 +#: describe.c:500 msgid "Parallel" msgstr "Parallèle" -#: describe.c:503 +#: describe.c:505 msgid "definer" msgstr "definer" -#: describe.c:504 +#: describe.c:506 msgid "invoker" msgstr "invoker" -#: describe.c:505 +#: describe.c:507 msgid "Security" msgstr "Sécurité" @@ -1159,921 +1190,975 @@ msgstr "Sécurité" msgid "Language" msgstr "Langage" -#: describe.c:513 +#: describe.c:516 describe.c:520 msgid "Source code" msgstr "Code source" -#: describe.c:642 +#: describe.c:691 msgid "List of functions" msgstr "Liste des fonctions" -#: describe.c:690 +#: describe.c:739 msgid "Internal name" msgstr "Nom interne" -#: describe.c:712 +#: describe.c:761 msgid "Elements" msgstr "Éléments" -#: describe.c:769 +#: describe.c:822 msgid "List of data types" msgstr "Liste des types de données" -#: describe.c:813 +#: describe.c:926 msgid "Left arg type" msgstr "Type de l'arg. gauche" -#: describe.c:814 +#: describe.c:927 msgid "Right arg type" msgstr "Type de l'arg. droit" -#: describe.c:815 +#: describe.c:928 msgid "Result type" msgstr "Type du résultat" -#: describe.c:820 describe.c:4269 describe.c:4334 describe.c:4340 -#: describe.c:4750 +#: describe.c:933 describe.c:4673 describe.c:4830 describe.c:4836 +#: describe.c:5246 describe.c:6784 describe.c:6788 msgid "Function" msgstr "Fonction" -#: describe.c:845 +#: describe.c:1010 msgid "List of operators" msgstr "Liste des opérateurs" -#: describe.c:875 +#: describe.c:1040 msgid "Encoding" msgstr "Encodage" -#: describe.c:880 describe.c:4450 +#: describe.c:1045 describe.c:4946 msgid "Collate" msgstr "Collationnement" -#: describe.c:881 describe.c:4451 +#: describe.c:1046 describe.c:4947 msgid "Ctype" msgstr "Type caract." -#: describe.c:894 +#: describe.c:1059 msgid "Tablespace" msgstr "Tablespace" -#: describe.c:916 +#: describe.c:1081 msgid "List of databases" msgstr "Liste des bases de données" -#: describe.c:957 describe.c:1118 describe.c:3665 +#: describe.c:1122 describe.c:1283 describe.c:4038 msgid "table" msgstr "table" -#: describe.c:958 describe.c:3666 +#: describe.c:1123 describe.c:4039 msgid "view" msgstr "vue" -#: describe.c:959 describe.c:3667 +#: describe.c:1124 describe.c:4040 msgid "materialized view" msgstr "vue matérialisée" -#: describe.c:960 describe.c:1120 describe.c:3669 +#: describe.c:1125 describe.c:1285 describe.c:4042 msgid "sequence" msgstr "séquence" -#: describe.c:961 describe.c:3671 +#: describe.c:1126 describe.c:4045 msgid "foreign table" msgstr "table distante" -#: describe.c:962 describe.c:3672 describe.c:3857 +#: describe.c:1127 describe.c:4046 describe.c:4269 msgid "partitioned table" msgstr "table partitionnée" -#: describe.c:974 +#: describe.c:1139 msgid "Column privileges" msgstr "Droits d'accès à la colonne" -#: describe.c:1005 describe.c:1039 +#: describe.c:1170 describe.c:1204 msgid "Policies" msgstr "Politiques" -#: describe.c:1071 describe.c:5957 describe.c:5961 +#: describe.c:1236 describe.c:6476 describe.c:6480 msgid "Access privileges" msgstr "Droits d'accès" -#: describe.c:1102 +#: describe.c:1267 #, c-format msgid "The server (version %s) does not support altering default privileges." msgstr "Le serveur (version %s) ne supporte pas la modification des droits par défaut." -#: describe.c:1122 +#: describe.c:1287 msgid "function" msgstr "fonction" -#: describe.c:1124 +#: describe.c:1289 msgid "type" msgstr "type" -#: describe.c:1126 +#: describe.c:1291 msgid "schema" msgstr "schéma" -#: describe.c:1150 +#: describe.c:1315 msgid "Default access privileges" msgstr "Droits d'accès par défaut" -#: describe.c:1190 +#: describe.c:1355 msgid "Object" msgstr "Objet" -#: describe.c:1204 +#: describe.c:1369 msgid "table constraint" msgstr "contrainte de table" -#: describe.c:1226 +#: describe.c:1391 msgid "domain constraint" msgstr "contrainte de domaine" -#: describe.c:1254 +#: describe.c:1419 msgid "operator class" msgstr "classe d'opérateur" -#: describe.c:1283 +#: describe.c:1448 msgid "operator family" msgstr "famille d'opérateur" -#: describe.c:1305 +#: describe.c:1470 msgid "rule" msgstr "règle" -#: describe.c:1347 +#: describe.c:1512 msgid "Object descriptions" msgstr "Descriptions des objets" -#: describe.c:1403 describe.c:3763 +#: describe.c:1568 describe.c:4175 #, c-format msgid "Did not find any relation named \"%s\"." msgstr "Aucune relation nommée « %s » n'a été trouvée." -#: describe.c:1406 describe.c:3766 +#: describe.c:1571 describe.c:4178 #, c-format msgid "Did not find any relations." msgstr "Aucune relation n'a été trouvée." -#: describe.c:1661 +#: describe.c:1827 #, c-format msgid "Did not find any relation with OID %s." msgstr "Aucune relation avec l'OID « %s » n'a été trouvée." -#: describe.c:1713 describe.c:1737 +#: describe.c:1879 describe.c:1903 msgid "Start" msgstr "Début" -#: describe.c:1714 describe.c:1738 +#: describe.c:1880 describe.c:1904 msgid "Minimum" msgstr "Minimum" -#: describe.c:1715 describe.c:1739 +#: describe.c:1881 describe.c:1905 msgid "Maximum" msgstr "Maximum" -#: describe.c:1716 describe.c:1740 +#: describe.c:1882 describe.c:1906 msgid "Increment" msgstr "Incrément" -#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4185 -#: describe.c:4351 describe.c:4465 describe.c:4470 +#: describe.c:1883 describe.c:1907 describe.c:2038 describe.c:4589 +#: describe.c:4847 describe.c:4961 describe.c:4966 describe.c:6523 msgid "yes" msgstr "oui" -#: describe.c:1718 describe.c:1742 describe.c:1873 describe.c:4185 -#: describe.c:4348 describe.c:4465 +#: describe.c:1884 describe.c:1908 describe.c:2039 describe.c:4589 +#: describe.c:4844 describe.c:4961 describe.c:6524 msgid "no" msgstr "non" -#: describe.c:1719 describe.c:1743 +#: describe.c:1885 describe.c:1909 msgid "Cycles?" msgstr "Cycles ?" -#: describe.c:1720 describe.c:1744 +#: describe.c:1886 describe.c:1910 msgid "Cache" msgstr "Cache" -#: describe.c:1787 +#: describe.c:1953 #, c-format msgid "Owned by: %s" msgstr "Propriétaire : %s" -#: describe.c:1791 +#: describe.c:1957 #, c-format msgid "Sequence for identity column: %s" msgstr "Séquence pour la colonne d'identité : %s" -#: describe.c:1798 +#: describe.c:1964 #, c-format msgid "Sequence \"%s.%s\"" msgstr "Séquence « %s.%s »" -#: describe.c:1934 +#: describe.c:2111 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "Table non tracée « %s.%s »" -#: describe.c:1937 +#: describe.c:2114 #, c-format msgid "Table \"%s.%s\"" msgstr "Table « %s.%s »" -#: describe.c:1941 +#: describe.c:2118 #, c-format msgid "View \"%s.%s\"" msgstr "Vue « %s.%s »" -#: describe.c:1946 +#: describe.c:2123 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "Vue matérialisée non journalisée « %s.%s »" -#: describe.c:1949 +#: describe.c:2126 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "Vue matérialisée « %s.%s »" -#: describe.c:1954 +#: describe.c:2131 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "Index non tracé « %s.%s »" -#: describe.c:1957 +#: describe.c:2134 #, c-format msgid "Index \"%s.%s\"" msgstr "Index « %s.%s »" -#: describe.c:1962 +#: describe.c:2139 #, c-format msgid "Unlogged partitioned index \"%s.%s\"" msgstr "Index partitionné non journalisé « %s.%s »" -#: describe.c:1965 +#: describe.c:2142 #, c-format msgid "Partitioned index \"%s.%s\"" msgstr "Index partitionné « %s.%s »" -#: describe.c:1970 +#: describe.c:2147 #, c-format msgid "Special relation \"%s.%s\"" msgstr "Relation spéciale « %s.%s »" -#: describe.c:1974 +#: describe.c:2151 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "Table TOAST « %s.%s »" -#: describe.c:1978 +#: describe.c:2155 #, c-format msgid "Composite type \"%s.%s\"" msgstr "Type composé « %s.%s »" -#: describe.c:1982 +#: describe.c:2159 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "Table distante « %s.%s »" -#: describe.c:1987 +#: describe.c:2164 #, c-format msgid "Unlogged partitioned table \"%s.%s\"" msgstr "Table non journalisée « %s.%s »" -#: describe.c:1990 +#: describe.c:2167 #, c-format msgid "Partitioned table \"%s.%s\"" msgstr "Table partitionnée « %s.%s »" -#: describe.c:2006 describe.c:4098 +#: describe.c:2183 describe.c:4502 msgid "Collation" msgstr "Collationnement" -#: describe.c:2007 describe.c:4105 +#: describe.c:2184 describe.c:4509 msgid "Nullable" msgstr "NULL-able" -#: describe.c:2008 describe.c:4106 +#: describe.c:2185 describe.c:4510 msgid "Default" msgstr "Par défaut" -#: describe.c:2011 +#: describe.c:2188 msgid "Key?" msgstr "Clé ?" -#: describe.c:2013 +#: describe.c:2190 describe.c:4739 describe.c:4750 msgid "Definition" msgstr "Définition" -#: describe.c:2015 describe.c:5216 describe.c:5300 describe.c:5371 -#: describe.c:5435 +#: describe.c:2192 describe.c:5712 describe.c:5796 describe.c:5867 +#: describe.c:5931 msgid "FDW options" msgstr "Options FDW" -#: describe.c:2017 +#: describe.c:2194 msgid "Storage" msgstr "Stockage" -#: describe.c:2019 +#: describe.c:2196 +msgid "Compression" +msgstr "Compression" + +#: describe.c:2198 msgid "Stats target" msgstr "Cible de statistiques" -#: describe.c:2132 +#: describe.c:2334 #, c-format -msgid "Partition of: %s %s" -msgstr "Partition de : %s %s" +msgid "Partition of: %s %s%s" +msgstr "Partition de : %s %s%s" -#: describe.c:2144 +#: describe.c:2347 msgid "No partition constraint" msgstr "Aucune contrainte de partition" -#: describe.c:2146 +#: describe.c:2349 #, c-format msgid "Partition constraint: %s" msgstr "Contrainte de partition : %s" -#: describe.c:2170 +#: describe.c:2373 #, c-format msgid "Partition key: %s" msgstr "Clé de partition : %s" -#: describe.c:2240 +#: describe.c:2399 +#, c-format +msgid "Owning table: \"%s.%s\"" +msgstr "Table propriétaire : « %s.%s »" + +#: describe.c:2470 msgid "primary key, " msgstr "clé primaire, " -#: describe.c:2242 +#: describe.c:2472 msgid "unique, " msgstr "unique, " -#: describe.c:2248 +#: describe.c:2478 #, c-format msgid "for table \"%s.%s\"" msgstr "pour la table « %s.%s »" -#: describe.c:2252 +#: describe.c:2482 #, c-format msgid ", predicate (%s)" msgstr ", prédicat (%s)" -#: describe.c:2255 +#: describe.c:2485 msgid ", clustered" msgstr ", en cluster" -#: describe.c:2258 +#: describe.c:2488 msgid ", invalid" msgstr ", invalide" -#: describe.c:2261 +#: describe.c:2491 msgid ", deferrable" msgstr ", déferrable" -#: describe.c:2264 +#: describe.c:2494 msgid ", initially deferred" msgstr ", initialement déferré" -#: describe.c:2267 +#: describe.c:2497 msgid ", replica identity" msgstr ", identité réplica" -#: describe.c:2326 +#: describe.c:2564 msgid "Indexes:" msgstr "Index :" -#: describe.c:2410 +#: describe.c:2648 msgid "Check constraints:" msgstr "Contraintes de vérification :" -#: describe.c:2478 +#: describe.c:2716 msgid "Foreign-key constraints:" msgstr "Contraintes de clés étrangères :" -#: describe.c:2541 +#: describe.c:2779 msgid "Referenced by:" msgstr "Référencé par :" -#: describe.c:2591 +#: describe.c:2829 msgid "Policies:" msgstr "Politiques :" -#: describe.c:2594 +#: describe.c:2832 msgid "Policies (forced row security enabled):" msgstr "Politiques (mode sécurité de ligne activé en forcé) :" -#: describe.c:2597 +#: describe.c:2835 msgid "Policies (row security enabled): (none)" msgstr "Politiques (mode sécurité de ligne activé) : (aucune)" -#: describe.c:2600 +#: describe.c:2838 msgid "Policies (forced row security enabled): (none)" msgstr "Politiques (mode sécurité de ligne activé en forcé) : (aucune)" -#: describe.c:2603 +#: describe.c:2841 msgid "Policies (row security disabled):" msgstr "Politiques (mode sécurité de ligne désactivé) :" -#: describe.c:2666 +#: describe.c:2902 describe.c:3006 msgid "Statistics objects:" msgstr "Objets statistiques :" -#: describe.c:2775 describe.c:2879 +#: describe.c:3120 describe.c:3224 msgid "Rules:" msgstr "Règles :" -#: describe.c:2778 +#: describe.c:3123 msgid "Disabled rules:" msgstr "Règles désactivées :" -#: describe.c:2781 +#: describe.c:3126 msgid "Rules firing always:" msgstr "Règles toujous activées :" -#: describe.c:2784 +#: describe.c:3129 msgid "Rules firing on replica only:" msgstr "Règles activées uniquement sur le réplica :" -#: describe.c:2824 +#: describe.c:3169 msgid "Publications:" msgstr "Publications :" -#: describe.c:2862 +#: describe.c:3207 msgid "View definition:" msgstr "Définition de la vue :" -#: describe.c:3001 +#: describe.c:3354 msgid "Triggers:" msgstr "Triggers :" -#: describe.c:3005 +#: describe.c:3358 msgid "Disabled user triggers:" msgstr "Triggers utilisateurs désactivés :" -#: describe.c:3007 +#: describe.c:3360 msgid "Disabled triggers:" msgstr "Triggers désactivés :" -#: describe.c:3010 +#: describe.c:3363 msgid "Disabled internal triggers:" msgstr "Triggers internes désactivés :" -#: describe.c:3013 +#: describe.c:3366 msgid "Triggers firing always:" msgstr "Triggers toujours activés :" -#: describe.c:3016 +#: describe.c:3369 msgid "Triggers firing on replica only:" msgstr "Triggers activés uniquement sur le réplica :" -#: describe.c:3075 +#: describe.c:3441 #, c-format msgid "Server: %s" msgstr "Serveur : %s" -#: describe.c:3083 +#: describe.c:3449 #, c-format msgid "FDW options: (%s)" msgstr "Options FDW : (%s)" -#: describe.c:3102 +#: describe.c:3470 msgid "Inherits" msgstr "Hérite de" -#: describe.c:3161 +#: describe.c:3543 #, c-format msgid "Number of partitions: %d" msgstr "Nombre de partitions : %d" -#: describe.c:3170 -#, c-format -msgid "Number of child tables: %d (Use \\d+ to list them.)" -msgstr "Nombre de tables enfants : %d (utilisez \\d+ pour les lister)" - -#: describe.c:3172 +#: describe.c:3552 #, c-format msgid "Number of partitions: %d (Use \\d+ to list them.)" msgstr "Nombre de partitions : %d (utilisez \\d+ pour les lister)" -#: describe.c:3180 +#: describe.c:3554 +#, c-format +msgid "Number of child tables: %d (Use \\d+ to list them.)" +msgstr "Nombre de tables enfants : %d (utilisez \\d+ pour les lister)" + +#: describe.c:3561 msgid "Child tables" msgstr "Tables enfant" -#: describe.c:3180 +#: describe.c:3561 msgid "Partitions" msgstr "Partitions" -#: describe.c:3223 +#: describe.c:3592 #, c-format msgid "Typed table of type: %s" msgstr "Table de type : %s" -#: describe.c:3239 +#: describe.c:3608 msgid "Replica Identity" msgstr "Identité de réplicat" -#: describe.c:3252 +#: describe.c:3621 msgid "Has OIDs: yes" msgstr "Contient des OID : oui" -#: describe.c:3261 +#: describe.c:3630 #, c-format msgid "Access method: %s" msgstr "Méthode d'accès : %s" -#: describe.c:3340 +#: describe.c:3710 #, c-format msgid "Tablespace: \"%s\"" msgstr "Tablespace : « %s »" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:3352 +#: describe.c:3722 #, c-format msgid ", tablespace \"%s\"" msgstr ", tablespace « %s »" -#: describe.c:3445 +#: describe.c:3815 msgid "List of roles" msgstr "Liste des rôles" -#: describe.c:3447 +#: describe.c:3817 msgid "Role name" msgstr "Nom du rôle" -#: describe.c:3448 +#: describe.c:3818 msgid "Attributes" msgstr "Attributs" -#: describe.c:3449 +#: describe.c:3820 msgid "Member of" msgstr "Membre de" -#: describe.c:3460 +#: describe.c:3831 msgid "Superuser" msgstr "Superutilisateur" -#: describe.c:3463 +#: describe.c:3834 msgid "No inheritance" msgstr "Pas d'héritage" -#: describe.c:3466 +#: describe.c:3837 msgid "Create role" msgstr "Créer un rôle" -#: describe.c:3469 +#: describe.c:3840 msgid "Create DB" msgstr "Créer une base" -#: describe.c:3472 +#: describe.c:3843 msgid "Cannot login" msgstr "Ne peut pas se connecter" -#: describe.c:3476 +#: describe.c:3847 msgid "Replication" msgstr "Réplication" -#: describe.c:3480 +#: describe.c:3851 msgid "Bypass RLS" msgstr "Contournement RLS" -#: describe.c:3489 +#: describe.c:3860 msgid "No connections" msgstr "Sans connexions" -#: describe.c:3491 +#: describe.c:3862 #, c-format msgid "%d connection" msgid_plural "%d connections" msgstr[0] "%d connexion" msgstr[1] "%d connexions" -#: describe.c:3501 +#: describe.c:3872 msgid "Password valid until " msgstr "Mot de passe valide jusqu'à " -#: describe.c:3551 +#: describe.c:3922 #, c-format msgid "The server (version %s) does not support per-database role settings." msgstr "Le serveur (version %s) ne supporte pas les paramètres de rôles par bases de données." -#: describe.c:3564 +#: describe.c:3935 msgid "Role" msgstr "Rôle" -#: describe.c:3565 +#: describe.c:3936 msgid "Database" msgstr "Base de données" -#: describe.c:3566 +#: describe.c:3937 msgid "Settings" msgstr "Réglages" -#: describe.c:3587 +#: describe.c:3958 #, c-format msgid "Did not find any settings for role \"%s\" and database \"%s\"." msgstr "Aucune configuration pour le rôle « %s » et la base de données « %s » n'a été trouvée." -#: describe.c:3590 +#: describe.c:3961 #, c-format msgid "Did not find any settings for role \"%s\"." msgstr "Aucune configuration pour le rôle « %s » n'a été trouvée." -#: describe.c:3593 +#: describe.c:3964 #, c-format msgid "Did not find any settings." msgstr "Aucune configuration n'a été trouvée." -#: describe.c:3598 +#: describe.c:3969 msgid "List of settings" msgstr "Liste des paramètres" -#: describe.c:3668 +#: describe.c:4041 msgid "index" msgstr "index" -#: describe.c:3670 +#: describe.c:4043 msgid "special" msgstr "spécial" -#: describe.c:3673 describe.c:3858 +#: describe.c:4044 +msgid "TOAST table" +msgstr "Table TOAST" + +#: describe.c:4047 describe.c:4270 msgid "partitioned index" msgstr "index partitionné" -#: describe.c:3771 +#: describe.c:4071 +msgid "permanent" +msgstr "permanent" + +#: describe.c:4072 +msgid "temporary" +msgstr "temporaire" + +#: describe.c:4073 +msgid "unlogged" +msgstr "non journalisé" + +#: describe.c:4074 +msgid "Persistence" +msgstr "Persistence" + +#: describe.c:4091 +msgid "Access method" +msgstr "Méthode d'accès" + +#: describe.c:4183 msgid "List of relations" msgstr "Liste des relations" -#: describe.c:3819 +#: describe.c:4231 #, c-format msgid "The server (version %s) does not support declarative table partitioning." msgstr "Le serveur (version %s) ne supporte pas le partitionnement déclaratif des tables." -#: describe.c:3830 +#: describe.c:4242 msgid "List of partitioned indexes" msgstr "Liste des index partitionnés" -#: describe.c:3832 +#: describe.c:4244 msgid "List of partitioned tables" msgstr "Liste des tables partitionnées" -#: describe.c:3836 +#: describe.c:4248 msgid "List of partitioned relations" msgstr "Liste des relations partitionnées" -#: describe.c:3867 +#: describe.c:4279 msgid "Parent name" msgstr "Nom du parent" -#: describe.c:3880 +#: describe.c:4292 msgid "Leaf partition size" msgstr "Taille de la partition de dernier niveau" -#: describe.c:3883 describe.c:3889 +#: describe.c:4295 describe.c:4301 msgid "Total size" msgstr "Taille totale" -#: describe.c:4021 +#: describe.c:4425 msgid "Trusted" msgstr "De confiance" -#: describe.c:4029 +#: describe.c:4433 msgid "Internal language" msgstr "Langage interne" -#: describe.c:4030 +#: describe.c:4434 msgid "Call handler" msgstr "Gestionnaire d'appel" -#: describe.c:4031 describe.c:5203 +#: describe.c:4435 describe.c:5699 msgid "Validator" msgstr "Validateur" -#: describe.c:4034 +#: describe.c:4438 msgid "Inline handler" msgstr "Gestionnaire en ligne" -#: describe.c:4062 +#: describe.c:4466 msgid "List of languages" msgstr "Liste des langages" -#: describe.c:4107 +#: describe.c:4511 msgid "Check" msgstr "Vérification" -#: describe.c:4149 +#: describe.c:4553 msgid "List of domains" msgstr "Liste des domaines" -#: describe.c:4183 +#: describe.c:4587 msgid "Source" msgstr "Source" -#: describe.c:4184 +#: describe.c:4588 msgid "Destination" msgstr "Destination" -#: describe.c:4186 +#: describe.c:4590 describe.c:6525 msgid "Default?" msgstr "Par défaut ?" -#: describe.c:4223 +#: describe.c:4627 msgid "List of conversions" msgstr "Liste des conversions" -#: describe.c:4262 +#: describe.c:4666 msgid "Event" msgstr "Événement" -#: describe.c:4264 +#: describe.c:4668 msgid "enabled" msgstr "activé" -#: describe.c:4265 +#: describe.c:4669 msgid "replica" msgstr "réplicat" -#: describe.c:4266 +#: describe.c:4670 msgid "always" msgstr "toujours" -#: describe.c:4267 +#: describe.c:4671 msgid "disabled" msgstr "désactivé" -#: describe.c:4268 describe.c:5902 +#: describe.c:4672 describe.c:6413 msgid "Enabled" msgstr "Activé" -#: describe.c:4270 +#: describe.c:4674 msgid "Tags" msgstr "Tags" -#: describe.c:4289 +#: describe.c:4693 msgid "List of event triggers" msgstr "Liste des triggers sur évènement" -#: describe.c:4318 +#: describe.c:4720 +#, c-format +msgid "The server (version %s) does not support extended statistics." +msgstr "Le serveur (version %s) ne supporte pas les statistiques étendues." + +#: describe.c:4757 +msgid "Ndistinct" +msgstr "Ndistinct" + +#: describe.c:4758 +msgid "Dependencies" +msgstr "Dépendances" + +#: describe.c:4768 +msgid "MCV" +msgstr "MCV" + +#: describe.c:4787 +msgid "List of extended statistics" +msgstr "Liste des statistiques étendues" + +#: describe.c:4814 msgid "Source type" msgstr "Type source" -#: describe.c:4319 +#: describe.c:4815 msgid "Target type" msgstr "Type cible" -#: describe.c:4350 +#: describe.c:4846 msgid "in assignment" msgstr "assigné" -#: describe.c:4352 +#: describe.c:4848 msgid "Implicit?" msgstr "Implicite ?" -#: describe.c:4407 +#: describe.c:4903 msgid "List of casts" msgstr "Liste des conversions explicites" -#: describe.c:4435 +#: describe.c:4931 #, c-format msgid "The server (version %s) does not support collations." msgstr "Le serveur (version %s) ne supporte pas les collationnements." -#: describe.c:4456 describe.c:4460 +#: describe.c:4952 describe.c:4956 msgid "Provider" msgstr "Fournisseur" -#: describe.c:4466 describe.c:4471 +#: describe.c:4962 describe.c:4967 msgid "Deterministic?" msgstr "Déterministe ?" -#: describe.c:4506 +#: describe.c:5002 msgid "List of collations" msgstr "Liste des collationnements" -#: describe.c:4565 +#: describe.c:5061 msgid "List of schemas" msgstr "Liste des schémas" -#: describe.c:4590 describe.c:4837 describe.c:4908 describe.c:4979 +#: describe.c:5086 describe.c:5333 describe.c:5404 describe.c:5475 #, c-format msgid "The server (version %s) does not support full text search." msgstr "Le serveur (version %s) ne supporte pas la recherche plein texte." -#: describe.c:4625 +#: describe.c:5121 msgid "List of text search parsers" msgstr "Liste des analyseurs de la recherche de texte" -#: describe.c:4670 +#: describe.c:5166 #, c-format msgid "Did not find any text search parser named \"%s\"." msgstr "Aucun analyseur de la recherche de texte nommé « %s » n'a été trouvé." -#: describe.c:4673 +#: describe.c:5169 #, c-format msgid "Did not find any text search parsers." msgstr "Aucun analyseur de recherche de texte n'a été trouvé." -#: describe.c:4748 +#: describe.c:5244 msgid "Start parse" msgstr "Début de l'analyse" -#: describe.c:4749 +#: describe.c:5245 msgid "Method" msgstr "Méthode" -#: describe.c:4753 +#: describe.c:5249 msgid "Get next token" msgstr "Obtenir le prochain jeton" -#: describe.c:4755 +#: describe.c:5251 msgid "End parse" msgstr "Fin de l'analyse" -#: describe.c:4757 +#: describe.c:5253 msgid "Get headline" msgstr "Obtenir l'en-tête" -#: describe.c:4759 +#: describe.c:5255 msgid "Get token types" msgstr "Obtenir les types de jeton" -#: describe.c:4770 +#: describe.c:5266 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "Analyseur « %s.%s » de la recherche de texte" -#: describe.c:4773 +#: describe.c:5269 #, c-format msgid "Text search parser \"%s\"" msgstr "Analyseur « %s » de la recherche de texte" -#: describe.c:4792 +#: describe.c:5288 msgid "Token name" msgstr "Nom du jeton" -#: describe.c:4803 +#: describe.c:5299 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "Types de jeton pour l'analyseur « %s.%s »" -#: describe.c:4806 +#: describe.c:5302 #, c-format msgid "Token types for parser \"%s\"" msgstr "Types de jeton pour l'analyseur « %s »" -#: describe.c:4860 +#: describe.c:5356 msgid "Template" msgstr "Modèle" -#: describe.c:4861 +#: describe.c:5357 msgid "Init options" msgstr "Options d'initialisation" -#: describe.c:4883 +#: describe.c:5379 msgid "List of text search dictionaries" msgstr "Liste des dictionnaires de la recherche de texte" -#: describe.c:4926 +#: describe.c:5422 msgid "Init" msgstr "Initialisation" -#: describe.c:4927 +#: describe.c:5423 msgid "Lexize" msgstr "Lexize" -#: describe.c:4954 +#: describe.c:5450 msgid "List of text search templates" msgstr "Liste des modèles de la recherche de texte" -#: describe.c:5014 +#: describe.c:5510 msgid "List of text search configurations" msgstr "Liste des configurations de la recherche de texte" -#: describe.c:5060 +#: describe.c:5556 #, c-format msgid "Did not find any text search configuration named \"%s\"." msgstr "Aucune configuration de la recherche de texte nommée « %s » n'a été trouvée." -#: describe.c:5063 +#: describe.c:5559 #, c-format msgid "Did not find any text search configurations." msgstr "Aucune configuration de recherche de texte n'a été trouvée." -#: describe.c:5129 +#: describe.c:5625 msgid "Token" msgstr "Jeton" -#: describe.c:5130 +#: describe.c:5626 msgid "Dictionaries" msgstr "Dictionnaires" -#: describe.c:5141 +#: describe.c:5637 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "Configuration « %s.%s » de la recherche de texte" -#: describe.c:5144 +#: describe.c:5640 #, c-format msgid "Text search configuration \"%s\"" msgstr "Configuration « %s » de la recherche de texte" -#: describe.c:5148 +#: describe.c:5644 #, c-format msgid "" "\n" @@ -2082,7 +2167,7 @@ msgstr "" "\n" "Analyseur : « %s.%s »" -#: describe.c:5151 +#: describe.c:5647 #, c-format msgid "" "\n" @@ -2091,156 +2176,244 @@ msgstr "" "\n" "Analyseur : « %s »" -#: describe.c:5185 +#: describe.c:5681 #, c-format msgid "The server (version %s) does not support foreign-data wrappers." msgstr "Le serveur (version %s) ne supporte pas les wrappers de données distantes." -#: describe.c:5243 +#: describe.c:5739 msgid "List of foreign-data wrappers" msgstr "Liste des wrappers de données distantes" -#: describe.c:5268 +#: describe.c:5764 #, c-format msgid "The server (version %s) does not support foreign servers." msgstr "Le serveur (version %s) ne supporte pas les serveurs distants." -#: describe.c:5281 +#: describe.c:5777 msgid "Foreign-data wrapper" msgstr "Wrapper des données distantes" -#: describe.c:5299 describe.c:5504 +#: describe.c:5795 describe.c:6000 msgid "Version" msgstr "Version" -#: describe.c:5325 +#: describe.c:5821 msgid "List of foreign servers" msgstr "Liste des serveurs distants" -#: describe.c:5350 +#: describe.c:5846 #, c-format msgid "The server (version %s) does not support user mappings." msgstr "Le serveur (version %s) ne supporte pas les correspondances d'utilisateurs." -#: describe.c:5360 describe.c:5424 +#: describe.c:5856 describe.c:5920 msgid "Server" msgstr "Serveur" -#: describe.c:5361 +#: describe.c:5857 msgid "User name" msgstr "Nom de l'utilisateur" -#: describe.c:5386 +#: describe.c:5882 msgid "List of user mappings" msgstr "Liste des correspondances utilisateurs" -#: describe.c:5411 +#: describe.c:5907 #, c-format msgid "The server (version %s) does not support foreign tables." msgstr "Le serveur (version %s) ne supporte pas les tables distantes." -#: describe.c:5464 +#: describe.c:5960 msgid "List of foreign tables" msgstr "Liste des tables distantes" -#: describe.c:5489 describe.c:5546 +#: describe.c:5985 describe.c:6042 #, c-format msgid "The server (version %s) does not support extensions." msgstr "Le serveur (version %s) ne supporte pas les extensions." -#: describe.c:5521 +#: describe.c:6017 msgid "List of installed extensions" msgstr "Liste des extensions installées" -#: describe.c:5574 +#: describe.c:6070 #, c-format msgid "Did not find any extension named \"%s\"." msgstr "Aucune extension nommée « %s » n'a été trouvée." -#: describe.c:5577 +#: describe.c:6073 #, c-format msgid "Did not find any extensions." msgstr "Aucune extension n'a été trouvée." -#: describe.c:5621 +#: describe.c:6117 msgid "Object description" msgstr "Description d'objet" -#: describe.c:5631 +#: describe.c:6127 #, c-format msgid "Objects in extension \"%s\"" msgstr "Objets dans l'extension « %s »" -#: describe.c:5660 describe.c:5731 +#: describe.c:6156 describe.c:6232 #, c-format msgid "The server (version %s) does not support publications." msgstr "Le serveur (version %s) ne supporte pas les publications." -#: describe.c:5677 describe.c:5803 +#: describe.c:6173 describe.c:6310 msgid "All tables" msgstr "Toutes les tables" -#: describe.c:5678 describe.c:5804 +#: describe.c:6174 describe.c:6311 msgid "Inserts" msgstr "Insertions" -#: describe.c:5679 describe.c:5805 +#: describe.c:6175 describe.c:6312 msgid "Updates" msgstr "Mises à jour" -#: describe.c:5680 describe.c:5806 +#: describe.c:6176 describe.c:6313 msgid "Deletes" msgstr "Suppressions" -#: describe.c:5684 describe.c:5808 +#: describe.c:6180 describe.c:6315 msgid "Truncates" msgstr "Tronque" -#: describe.c:5701 +#: describe.c:6184 describe.c:6317 +msgid "Via root" +msgstr "Via la racine" + +#: describe.c:6201 msgid "List of publications" msgstr "Liste des publications" -#: describe.c:5769 +#: describe.c:6274 #, c-format msgid "Did not find any publication named \"%s\"." msgstr "Aucune publication nommée « %s » n'a été trouvée." -#: describe.c:5772 +#: describe.c:6277 #, c-format msgid "Did not find any publications." msgstr "Aucune publication n'a été trouvée." -#: describe.c:5799 +#: describe.c:6306 #, c-format msgid "Publication %s" msgstr "Publication %s" -#: describe.c:5843 +#: describe.c:6354 msgid "Tables:" msgstr "Tables :" -#: describe.c:5887 +#: describe.c:6398 #, c-format msgid "The server (version %s) does not support subscriptions." msgstr "Le serveur (version %s) ne supporte pas les souscriptions." -#: describe.c:5903 +#: describe.c:6414 msgid "Publication" msgstr "Publication" -#: describe.c:5910 +#: describe.c:6423 +msgid "Binary" +msgstr "Binaire" + +#: describe.c:6424 +msgid "Streaming" +msgstr "Flux" + +#: describe.c:6429 msgid "Synchronous commit" msgstr "Validation synchrone" -#: describe.c:5911 +#: describe.c:6430 msgid "Conninfo" msgstr "Informations de connexion" -#: describe.c:5933 +#: describe.c:6452 msgid "List of subscriptions" msgstr "Liste des souscriptions" -#: help.c:74 +#: describe.c:6519 describe.c:6607 describe.c:6692 describe.c:6775 +msgid "AM" +msgstr "AM" + +#: describe.c:6520 +msgid "Input type" +msgstr "Type en entrée" + +#: describe.c:6521 +msgid "Storage type" +msgstr "Type de stockage" + +#: describe.c:6522 +msgid "Operator class" +msgstr "Classe d'opérateur" + +#: describe.c:6534 describe.c:6608 describe.c:6693 describe.c:6776 +msgid "Operator family" +msgstr "Famille d'opérateur" + +#: describe.c:6566 +msgid "List of operator classes" +msgstr "Liste des classes d'opérateurs" + +#: describe.c:6609 +msgid "Applicable types" +msgstr "Types applicables" + +#: describe.c:6647 +msgid "List of operator families" +msgstr "Liste des familles d'opérateurs" + +#: describe.c:6694 +msgid "Operator" +msgstr "Opérateur" + +#: describe.c:6695 +msgid "Strategy" +msgstr "Stratégie" + +#: describe.c:6696 +msgid "ordering" +msgstr "ordre" + +#: describe.c:6697 +msgid "search" +msgstr "recherche" + +#: describe.c:6698 +msgid "Purpose" +msgstr "But" + +#: describe.c:6703 +msgid "Sort opfamily" +msgstr "Tri famille d'opérateur" + +#: describe.c:6734 +msgid "List of operators of operator families" +msgstr "Liste d'opérateurs des familles d'opérateurs" + +#: describe.c:6777 +msgid "Registered left type" +msgstr "Type de l'arg. gauche enregistré" + +#: describe.c:6778 +msgid "Registered right type" +msgstr "Type de l'arg. droit enregistré" + +#: describe.c:6779 +msgid "Number" +msgstr "Numéro" + +#: describe.c:6815 +msgid "List of support functions of operator families" +msgstr "Liste des fonctions de support des familles d'opérateurs" + +#: help.c:73 #, c-format msgid "" "psql is the PostgreSQL interactive terminal.\n" @@ -2249,12 +2422,12 @@ msgstr "" "psql est l'interface interactive de PostgreSQL.\n" "\n" -#: help.c:75 help.c:349 help.c:425 help.c:468 +#: help.c:74 help.c:355 help.c:433 help.c:476 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: help.c:76 +#: help.c:75 #, c-format msgid "" " psql [OPTION]... [DBNAME [USERNAME]]\n" @@ -2263,19 +2436,19 @@ msgstr "" " psql [OPTIONS]... [NOM_BASE [NOM_UTILISATEUR]]\n" "\n" -#: help.c:78 +#: help.c:77 #, c-format msgid "General options:\n" msgstr "Options générales :\n" -#: help.c:83 +#: help.c:82 #, c-format msgid " -c, --command=COMMAND run only single command (SQL or internal) and exit\n" msgstr "" " -c, --command=COMMANDE\n" " exécute une commande unique (SQL ou interne), puis quitte\n" -#: help.c:84 +#: help.c:83 #, c-format msgid " -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" msgstr "" @@ -2283,19 +2456,19 @@ msgstr "" " indique le nom de la base de données à laquelle se\n" " connecter (par défaut : « %s »)\n" -#: help.c:85 +#: help.c:84 #, c-format msgid " -f, --file=FILENAME execute commands from file, then exit\n" msgstr "" " -f, --file=FICHIER\n" " exécute les commandes du fichier, puis quitte\n" -#: help.c:86 +#: help.c:85 #, c-format msgid " -l, --list list available databases, then exit\n" msgstr " -l, --list affiche les bases de données disponibles, puis quitte\n" -#: help.c:87 +#: help.c:86 #, c-format msgid "" " -v, --set=, --variable=NAME=VALUE\n" @@ -2306,17 +2479,17 @@ msgstr "" " configure la variable psql NOM en VALEUR\n" " (e.g., -v ON_ERROR_STOP=1)\n" -#: help.c:90 +#: help.c:89 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: help.c:91 +#: help.c:90 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" msgstr " -X, --no-psqlrc ne lit pas le fichier de démarrage (~/.psqlrc)\n" -#: help.c:92 +#: help.c:91 #, c-format msgid "" " -1 (\"one\"), --single-transaction\n" @@ -2325,22 +2498,22 @@ msgstr "" " -1 (« un »), --single-transaction\n" " exécute dans une transaction unique (si non intéractif)\n" -#: help.c:94 +#: help.c:93 #, c-format msgid " -?, --help[=options] show this help, then exit\n" msgstr " -?, --help[=options] affiche cette aide et quitte\n" -#: help.c:95 +#: help.c:94 #, c-format msgid " --help=commands list backslash commands, then exit\n" msgstr " --help=commandes liste les méta-commandes, puis quitte\n" -#: help.c:96 +#: help.c:95 #, c-format msgid " --help=variables list special variables, then exit\n" msgstr " --help=variables liste les variables spéciales, puis quitte\n" -#: help.c:98 +#: help.c:97 #, c-format msgid "" "\n" @@ -2349,38 +2522,38 @@ msgstr "" "\n" "Options d'entrée/sortie :\n" -#: help.c:99 +#: help.c:98 #, c-format msgid " -a, --echo-all echo all input from script\n" msgstr " -a, --echo-all affiche les lignes du script\n" -#: help.c:100 +#: help.c:99 #, c-format msgid " -b, --echo-errors echo failed commands\n" msgstr " -b, --echo-errors affiche les commandes échouées\n" -#: help.c:101 +#: help.c:100 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" msgstr "" " -e, --echo-queries\n" " affiche les commandes envoyées au serveur\n" -#: help.c:102 +#: help.c:101 #, c-format msgid " -E, --echo-hidden display queries that internal commands generate\n" msgstr "" " -E, --echo-hidden\n" " affiche les requêtes engendrées par les commandes internes\n" -#: help.c:103 +#: help.c:102 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" msgstr "" " -L, --log-file=FICHIER\n" " envoie les traces dans le fichier\n" -#: help.c:104 +#: help.c:103 #, c-format msgid " -n, --no-readline disable enhanced command line editing (readline)\n" msgstr "" @@ -2388,7 +2561,7 @@ msgstr "" " désactive l'édition avancée de la ligne de commande\n" " (readline)\n" -#: help.c:105 +#: help.c:104 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" msgstr "" @@ -2396,14 +2569,14 @@ msgstr "" " écrit les résultats des requêtes dans un fichier (ou\n" " |tube)\n" -#: help.c:106 +#: help.c:105 #, c-format msgid " -q, --quiet run quietly (no messages, only query output)\n" msgstr "" " -q, --quiet s'exécute silencieusement (pas de messages, uniquement le\n" " résultat des requêtes)\n" -#: help.c:107 +#: help.c:106 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" msgstr "" @@ -2411,7 +2584,7 @@ msgstr "" " active le mode étape par étape (confirmation pour chaque\n" " requête)\n" -#: help.c:108 +#: help.c:107 #, c-format msgid " -S, --single-line single-line mode (end of line terminates SQL command)\n" msgstr "" @@ -2419,7 +2592,7 @@ msgstr "" " active le mode ligne par ligne (EOL termine la commande\n" " SQL)\n" -#: help.c:110 +#: help.c:109 #, c-format msgid "" "\n" @@ -2428,21 +2601,21 @@ msgstr "" "\n" "Options de formattage de la sortie :\n" -#: help.c:111 +#: help.c:110 #, c-format msgid " -A, --no-align unaligned table output mode\n" msgstr "" " -A, --no-align active le mode d'affichage non aligné des tables (-P\n" " format=unaligned)\n" -#: help.c:112 +#: help.c:111 #, c-format msgid " --csv CSV (Comma-Separated Values) table output mode\n" msgstr "" " --csv mode d'affichage CSV (valeurs séparées par des virgules)\n" "\n" -#: help.c:113 +#: help.c:112 #, c-format msgid "" " -F, --field-separator=STRING\n" @@ -2452,12 +2625,12 @@ msgstr "" " séparateur de champs pour un affichage non aligné\n" " (par défaut : « %s »)\n" -#: help.c:116 +#: help.c:115 #, c-format msgid " -H, --html HTML table output mode\n" msgstr " -H, --html active le mode d'affichage HTML des tables (-P format=html)\n" -#: help.c:117 +#: help.c:116 #, c-format msgid " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset command)\n" msgstr "" @@ -2465,7 +2638,7 @@ msgstr "" " initialise l'option d'impression VAR à ARG (voir la\n" " commande \\pset)\n" -#: help.c:118 +#: help.c:117 #, c-format msgid "" " -R, --record-separator=STRING\n" @@ -2475,14 +2648,14 @@ msgstr "" " séparateur d'enregistrements pour un affichage non aligné\n" " (par défaut : saut de ligne)\n" -#: help.c:120 +#: help.c:119 #, c-format msgid " -t, --tuples-only print rows only\n" msgstr "" " -t, --tuples-only\n" " affiche seulement les lignes (-P tuples_only)\n" -#: help.c:121 +#: help.c:120 #, c-format msgid " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, border)\n" msgstr "" @@ -2490,12 +2663,12 @@ msgstr "" " initialise les attributs des balises HTML de tableau\n" " (largeur, bordure) (-P tableattr=)\n" -#: help.c:122 +#: help.c:121 #, c-format msgid " -x, --expanded turn on expanded table output\n" msgstr " -x, --expanded active l'affichage étendu des tables (-P expanded)\n" -#: help.c:123 +#: help.c:122 #, c-format msgid "" " -z, --field-separator-zero\n" @@ -2505,7 +2678,7 @@ msgstr "" " initialise le séparateur de champs pour un affichage non\n" " aligné à l'octet zéro\n" -#: help.c:125 +#: help.c:124 #, c-format msgid "" " -0, --record-separator-zero\n" @@ -2515,7 +2688,7 @@ msgstr "" " initialise le séparateur d'enregistrements pour un affichage\n" " non aligné à l'octet zéro\n" -#: help.c:128 +#: help.c:127 #, c-format msgid "" "\n" @@ -2524,25 +2697,25 @@ msgstr "" "\n" "Options de connexion :\n" -#: help.c:131 +#: help.c:130 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory (default: \"%s\")\n" msgstr "" " -h, --host=HOTE nom d'hôte du serveur de la base de données ou répertoire\n" " de la socket (par défaut : %s)\n" -#: help.c:132 +#: help.c:131 msgid "local socket" msgstr "socket locale" -#: help.c:135 +#: help.c:134 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" msgstr "" " -p, --port=PORT port du serveur de la base de données (par défaut :\n" " « %s »)\n" -#: help.c:141 +#: help.c:137 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" msgstr "" @@ -2550,21 +2723,21 @@ msgstr "" " nom d'utilisateur de la base de données (par défaut :\n" " « %s »)\n" -#: help.c:142 +#: help.c:138 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr "" " -w, --no-password\n" " ne demande jamais un mot de passe\n" -#: help.c:143 +#: help.c:139 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password force la demande du mot de passe (devrait survenir\n" " automatiquement)\n" -#: help.c:145 +#: help.c:141 #, c-format msgid "" "\n" @@ -2579,495 +2752,538 @@ msgstr "" "de la documentation de PostgreSQL.\n" "\n" -#: help.c:148 +#: help.c:144 #, c-format -msgid "Report bugs to .\n" -msgstr "Rapporter les bogues à .\n" +msgid "Report bugs to <%s>.\n" +msgstr "Rapporter les bogues à <%s>.\n" -#: help.c:174 +#: help.c:145 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "page d'accueil de %s : <%s>\n" + +#: help.c:171 #, c-format msgid "General\n" msgstr "Général\n" -#: help.c:175 +#: help.c:172 #, c-format msgid " \\copyright show PostgreSQL usage and distribution terms\n" msgstr "" " \\copyright affiche les conditions d'utilisation et de\n" " distribution de PostgreSQL\n" -#: help.c:176 +#: help.c:173 #, c-format msgid " \\crosstabview [COLUMNS] execute query and display results in crosstab\n" msgstr " \\crosstabview [COLUMNS] exécute la requête et affiche le résultat dans un tableau croisé\n" -#: help.c:177 +#: help.c:174 #, c-format msgid " \\errverbose show most recent error message at maximum verbosity\n" msgstr " \\errverbose affiche le message d'erreur le plus récent avec une verbosité maximale\n" -#: help.c:178 +#: help.c:175 #, c-format -msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" +msgid "" +" \\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);\n" +" \\g with no arguments is equivalent to a semicolon\n" msgstr "" -" \\g [FICHIER] ou ; envoie le tampon de requêtes au serveur (et les\n" -" résultats au fichier ou |tube)\n" +" \\g [(OPTIONS)] [FICHIER] exécute la requête (et envoie les résultats à un fichier ou à |pipe);\n" +" \\g sans arguments est équivalent à un point-virgule\n" -#: help.c:179 +#: help.c:177 #, c-format msgid " \\gdesc describe result of query, without executing it\n" msgstr " \\gdesc décrit le résultat de la requête sans l'exécuter\n" -#: help.c:180 +#: help.c:178 #, c-format msgid " \\gexec execute query, then execute each value in its result\n" msgstr " \\gexec exécute la requête et exécute chaque valeur du résultat\n" -#: help.c:181 +#: help.c:179 #, c-format msgid " \\gset [PREFIX] execute query and store results in psql variables\n" msgstr " \\gset [PRÉFIXE] exécute la requête et stocke les résultats dans des variables psql\n" -#: help.c:182 +#: help.c:180 #, c-format -msgid " \\gx [FILE] as \\g, but forces expanded output mode\n" -msgstr " \\gx [FICHIER] comme \\g, mais force le mode de sortie étendu\n" +msgid " \\gx [(OPTIONS)] [FILE] as \\g, but forces expanded output mode\n" +msgstr " \\gx [(OPTIONS)] [FICHIER] comme \\g, mais force le mode de sortie étendu\n" -#: help.c:183 +#: help.c:181 #, c-format msgid " \\q quit psql\n" msgstr " \\q quitte psql\n" -#: help.c:184 +#: help.c:182 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEC] exécute la requête toutes les SEC secondes\n" -#: help.c:187 +#: help.c:185 #, c-format msgid "Help\n" msgstr "Aide\n" -#: help.c:189 +#: help.c:187 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [commandes] affiche l'aide sur les métacommandes\n" -#: help.c:190 +#: help.c:188 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr " \\? options affiche l'aide sur les options en ligne de commande de psql\n" -#: help.c:191 +#: help.c:189 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? variables affiche l'aide sur les variables spéciales\n" -#: help.c:192 +#: help.c:190 #, c-format msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" msgstr "" " \\h [NOM] aide-mémoire pour les commandes SQL, * pour toutes\n" " les commandes\n" -#: help.c:195 +#: help.c:193 #, c-format msgid "Query Buffer\n" msgstr "Tampon de requête\n" -#: help.c:196 +#: help.c:194 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr "" " \\e [FICHIER] [LIGNE] édite le tampon de requête ou le fichier avec un\n" " éditeur externe\n" -#: help.c:197 +#: help.c:195 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr "" " \\ef [FONCTION [LIGNE]] édite la définition de fonction avec un éditeur\n" " externe\n" -#: help.c:198 +#: help.c:196 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr "" " \\ev [VUE [LIGNE]] édite la définition de vue avec un éditeur\n" " externe\n" -#: help.c:199 +#: help.c:197 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p affiche le contenu du tampon de requête\n" -#: help.c:200 +#: help.c:198 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r efface le tampon de requêtes\n" -#: help.c:202 +#: help.c:200 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr "" " \\s [FICHIER] affiche l'historique ou le sauvegarde dans un\n" " fichier\n" -#: help.c:204 +#: help.c:202 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr "" " \\w [FICHIER] écrit le contenu du tampon de requêtes dans un\n" " fichier\n" -#: help.c:207 +#: help.c:205 #, c-format msgid "Input/Output\n" msgstr "Entrée/Sortie\n" -#: help.c:208 +#: help.c:206 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr "" " \\copy ... exécute SQL COPY avec le flux de données dirigé vers\n" " l'hôte client\n" -#: help.c:209 +#: help.c:207 #, c-format -msgid " \\echo [STRING] write string to standard output\n" -msgstr " \\echo [TEXTE] écrit un texte sur la sortie standard\n" +msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" +msgstr " \\echo [-n] [TEXTE] écrit le texte sur la sortie standard (-n pour supprimer le retour à la ligne)\n" -#: help.c:210 +#: help.c:208 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i FICHIER exécute les commandes du fichier\n" -#: help.c:211 +#: help.c:209 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr "" " \\ir FICHIER identique à \\i, mais relatif à l'emplacement du script\n" " ou un |tube\n" -#: help.c:212 +#: help.c:210 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr "" " \\o [FICHIER] envoie les résultats de la requête vers un fichier\n" " ou un |tube\n" -#: help.c:213 +#: help.c:211 #, c-format -msgid " \\qecho [STRING] write string to query output stream (see \\o)\n" +msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" msgstr "" -" \\qecho [TEXTE] écrit un texte sur la sortie des résultats des\n" -" requêtes (voir \\o)\n" +" \\qecho [-n] [TEXTE] écrit un texte sur la sortie des résultats des\n" +" requêtes (\\o) (-n pour supprimer le retour à la ligne)\n" -#: help.c:216 +#: help.c:212 +#, c-format +msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" +msgstr " \\warn [-n] [TEXTE] écrit le texte sur la sortie des erreurs (-n pour supprimer le retour à la ligne)\n" + +#: help.c:215 #, c-format msgid "Conditional\n" msgstr "Conditionnel\n" -#: help.c:217 +#: help.c:216 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if EXPR début du bloc conditionnel\n" -#: help.c:218 +#: help.c:217 #, c-format msgid " \\elif EXPR alternative within current conditional block\n" msgstr " \\elif alternative à l'intérieur du bloc conditionnel courant\n" -#: help.c:219 +#: help.c:218 #, c-format msgid " \\else final alternative within current conditional block\n" msgstr " \\else alternative finale à l'intérieur du bloc conditionnel courant\n" -#: help.c:220 +#: help.c:219 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif bloc conditionnel de fin\n" -#: help.c:223 +#: help.c:222 #, c-format msgid "Informational\n" msgstr "Informations\n" -#: help.c:224 +#: help.c:223 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (options : S = affiche les objets systèmes, + = informations supplémentaires)\n" -#: help.c:225 +#: help.c:224 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] affiche la liste des tables, vues et séquences\n" -#: help.c:226 +#: help.c:225 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr "" " \\d[S+] NOM affiche la description de la table, de la vue,\n" " de la séquence ou de l'index\n" -#: help.c:227 +#: help.c:226 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [MODÈLE] affiche les aggrégats\n" -#: help.c:228 +#: help.c:227 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [MODÈLE] affiche la liste des méthodes d'accès\n" +#: help.c:228 +#, c-format +msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" +msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] affiche les classes d'opérateurs\n" + #: help.c:229 #, c-format +msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" +msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] affiche les familles d'opérateur\n" + +#: help.c:230 +#, c-format +msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" +msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] affiche les opérateurs des familles d'opérateur\n" + +#: help.c:231 +#, c-format +msgid " \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" +msgstr " \\dAp [AMPTRN [OPFPTRN]] liste les fonctions de support des familles d'opérateur\n" + +#: help.c:232 +#, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [MODÈLE] affiche la liste des tablespaces\n" -#: help.c:230 +#: help.c:233 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [MODÈLE] affiche la liste des conversions\n" -#: help.c:231 +#: help.c:234 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [MODÈLE] affiche la liste des transtypages\n" -#: help.c:232 +#: help.c:235 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr "" " \\dd[S] [MODÈLE] affiche les commentaires des objets dont le commentaire\n" " n'est affiché nul part ailleurs\n" -#: help.c:233 +#: help.c:236 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [MODÈLE] affiche la liste des domaines\n" -#: help.c:234 +#: help.c:237 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [MODÈLE] affiche les droits par défaut\n" -#: help.c:235 +#: help.c:238 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [MODÈLE] affiche la liste des tables distantes\n" -#: help.c:236 +#: help.c:239 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [MODÈLE] affiche la liste des tables distantes\n" -#: help.c:237 +#: help.c:240 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [MODÈLE] affiche la liste des serveurs distants\n" -#: help.c:238 +#: help.c:241 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [MODÈLE] affiche la liste des correspondances utilisateurs\n" -#: help.c:239 +#: help.c:242 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [MODÈLE] affiche la liste des wrappers de données distantes\n" -#: help.c:240 +#: help.c:243 #, c-format -msgid " \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] functions\n" +msgid "" +" \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" +" list [only agg/normal/procedure/trigger/window] functions\n" msgstr "" -" \\df[anptw][S+] [PATRN] affiche la liste des fonctions\n" -" [seulement agrégat/normal/procédure/trigger/window]\n" +" \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" +" affiche la liste des fonctions [seulement agrégat/normal/procédure/trigger/window]\n" -#: help.c:241 +#: help.c:245 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr "" " \\dF[+] [MODÈLE] affiche la liste des configurations de la recherche\n" " plein texte\n" -#: help.c:242 +#: help.c:246 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr "" " \\dFd[+] [MODÈLE] affiche la liste des dictionnaires de la recherche de\n" " texte\n" -#: help.c:243 +#: help.c:247 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr "" " \\dFp[+] [MODÈLE] affiche la liste des analyseurs de la recherche de\n" " texte\n" -#: help.c:244 +#: help.c:248 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr "" " \\dFt[+] [MODÈLE] affiche la liste des modèles de la recherche de\n" " texte\n" -#: help.c:245 +#: help.c:249 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [MODÈLE] affiche la liste des rôles (utilisateurs)\n" -#: help.c:246 +#: help.c:250 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [MODÈLE] affiche la liste des index\n" -#: help.c:247 +#: help.c:251 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr "" " \\dl affiche la liste des « Large Objects », identique à\n" " \\lo_list\n" -#: help.c:248 +#: help.c:252 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [MODÈLE] affiche la liste des langages procéduraux\n" -#: help.c:249 +#: help.c:253 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [MODÈLE] affiche la liste des vues matérialisées\n" -#: help.c:250 +#: help.c:254 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [MODÈLE] affiche la liste des schémas\n" -#: help.c:251 +#: help.c:255 #, c-format -msgid " \\do[S] [PATTERN] list operators\n" -msgstr " \\do[S] [MODÈLE] affiche la liste des opérateurs\n" +msgid "" +" \\do[S] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" +" list operators\n" +msgstr "" +" \\do[S] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" +" affiche la liste des opérateurs\n" -#: help.c:252 +#: help.c:257 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [MODÈLE] affiche la liste des collationnements\n" -#: help.c:253 +#: help.c:258 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr "" " \\dp [MODÈLE] affiche la liste des droits d'accès aux tables,\n" " vues, séquences\n" -#: help.c:254 +#: help.c:259 #, c-format msgid " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n" msgstr " \\dP[itn+] [PATTERN] affiche les relations partitionnées [seulement index/table] [n=imbriquées]\n" -#: help.c:255 +#: help.c:260 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [MODEL1 [MODEL2]] liste la configuration utilisateur par base de données\n" -#: help.c:256 +#: help.c:261 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[S+] [MODÈLE] affiche la liste des publications de réplication\n" -#: help.c:257 +#: help.c:262 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [MODÈLE] affiche la liste des souscriptions de réplication\n" -#: help.c:258 +#: help.c:263 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [MODÈLE] affiche la liste des séquences\n" -#: help.c:259 +#: help.c:264 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [MODÈLE] affiche la liste des tables\n" -#: help.c:260 +#: help.c:265 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [MODÈLE] affiche la liste des types de données\n" -#: help.c:261 +#: help.c:266 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [MODÈLE] affiche la liste des rôles (utilisateurs)\n" -#: help.c:262 +#: help.c:267 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [MODÈLE] affiche la liste des vues\n" -#: help.c:263 +#: help.c:268 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [MODÈLE] affiche la liste des extensions\n" -#: help.c:264 +#: help.c:269 +#, c-format +msgid " \\dX [PATTERN] list extended statistics\n" +msgstr " \\dX [MODÈLE] affiche les statistiques étendues\n" + +#: help.c:270 #, c-format msgid " \\dy [PATTERN] list event triggers\n" msgstr " \\dy [MODÈLE] affiche les triggers sur évènement\n" -#: help.c:265 +#: help.c:271 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [MODÈLE] affiche la liste des bases de données\n" -#: help.c:266 +#: help.c:272 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] [FONCTION] édite la définition d'une fonction\n" -#: help.c:267 +#: help.c:273 #, c-format msgid " \\sv[+] VIEWNAME show a view's definition\n" msgstr " \\sv [FONCTION] édite la définition d'une vue\n" -#: help.c:268 +#: help.c:274 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [MODÈLE] identique à \\dp\n" -#: help.c:271 +#: help.c:277 #, c-format msgid "Formatting\n" msgstr "Formatage\n" -#: help.c:272 +#: help.c:278 #, c-format msgid " \\a toggle between unaligned and aligned output mode\n" msgstr "" " \\a bascule entre les modes de sortie alignée et non\n" " alignée\n" -#: help.c:273 +#: help.c:279 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr "" " \\C [CHAÎNE] initialise le titre d'une table, ou le désactive en\n" " l'absence d'argument\n" -#: help.c:274 +#: help.c:280 #, c-format msgid " \\f [STRING] show or set field separator for unaligned query output\n" msgstr "" " \\f [CHAÎNE] affiche ou initialise le séparateur de champ pour\n" " une sortie non alignée des requêtes\n" -#: help.c:275 +#: help.c:281 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H bascule le mode de sortie HTML (actuellement %s)\n" -#: help.c:277 +#: help.c:283 #, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" @@ -3086,29 +3302,29 @@ msgstr "" " unicode_border_linestyle|unicode_column_linestyle|\n" " unicode_header_linestyle)\n" -#: help.c:284 +#: help.c:290 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t affiche uniquement les lignes (actuellement %s)\n" -#: help.c:286 +#: help.c:292 #, c-format msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" msgstr "" " \\T [CHAÎNE] initialise les attributs HTML de la balise
,\n" " ou l'annule en l'absence d'argument\n" -#: help.c:287 +#: help.c:293 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr " \\x [on|off|auto] bascule l'affichage étendu (actuellement %s)\n" -#: help.c:291 +#: help.c:297 #, c-format msgid "Connection\n" msgstr "Connexions\n" -#: help.c:293 +#: help.c:299 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3118,7 +3334,7 @@ msgstr "" " se connecte à une autre base de données\n" " (actuellement « %s »)\n" -#: help.c:297 +#: help.c:303 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3128,17 +3344,17 @@ msgstr "" " se connecte à une nouvelle base de données\n" " (aucune connexion actuellement)\n" -#: help.c:299 +#: help.c:305 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo affiche des informations sur la connexion en cours\n" -#: help.c:300 +#: help.c:306 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [ENCODAGE] affiche ou initialise l'encodage du client\n" -#: help.c:301 +#: help.c:307 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr "" @@ -3146,65 +3362,65 @@ msgstr "" " modifie de façon sécurisé le mot de passe d'un\n" " utilisateur\n" -#: help.c:304 +#: help.c:310 #, c-format msgid "Operating System\n" msgstr "Système d'exploitation\n" -#: help.c:305 +#: help.c:311 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [RÉPERTOIRE] change de répertoire de travail\n" -#: help.c:306 +#: help.c:312 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv NOM [VALEUR] (dés)initialise une variable d'environnement\n" -#: help.c:307 +#: help.c:313 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr "" " \\timing [on|off] bascule l'activation du chronométrage des commandes\n" " (actuellement %s)\n" -#: help.c:309 +#: help.c:315 #, c-format msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" msgstr "" " \\! [COMMANDE] exécute la commande dans un shell ou exécute un\n" " shell interactif\n" -#: help.c:312 +#: help.c:318 #, c-format msgid "Variables\n" msgstr "Variables\n" -#: help.c:313 +#: help.c:319 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr "" " \\prompt [TEXTE] NOM demande à l'utilisateur de configurer la variable\n" " interne\n" -#: help.c:314 +#: help.c:320 #, c-format msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" msgstr "" " \\set [NOM [VALEUR]] initialise une variable interne ou les affiche\n" " toutes en l'absence de paramètre\n" -#: help.c:315 +#: help.c:321 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset NOM désactive (supprime) la variable interne\n" -#: help.c:318 +#: help.c:324 #, c-format msgid "Large Objects\n" msgstr "« Large objects »\n" -#: help.c:319 +#: help.c:325 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -3218,7 +3434,7 @@ msgstr "" " \\lo_unlink OIDLOB\n" " opérations sur les « Large Objects »\n" -#: help.c:346 +#: help.c:352 #, c-format msgid "" "List of specially treated variables\n" @@ -3227,12 +3443,12 @@ msgstr "" "Liste des variables traitées spécialement\n" "\n" -#: help.c:348 +#: help.c:354 #, c-format msgid "psql variables:\n" msgstr "variables psql :\n" -#: help.c:350 +#: help.c:356 #, c-format msgid "" " psql --set=NAME=VALUE\n" @@ -3243,7 +3459,7 @@ msgstr "" " ou \\set NOM VALEUR dans psql\n" "\n" -#: help.c:352 +#: help.c:358 #, c-format msgid "" " AUTOCOMMIT\n" @@ -3252,7 +3468,7 @@ msgstr "" " AUTOCOMMIT\n" " si activé, les commandes SQL réussies sont automatiquement validées\n" -#: help.c:354 +#: help.c:360 #, c-format msgid "" " COMP_KEYWORD_CASE\n" @@ -3263,7 +3479,7 @@ msgstr "" " détermine la casse utilisée pour compléter les mots clés SQL\n" " [lower, upper, preserve-lower, preserve-upper]\n" -#: help.c:357 +#: help.c:363 #, c-format msgid "" " DBNAME\n" @@ -3272,7 +3488,7 @@ msgstr "" " DBNAME\n" " le nom de base de données actuel\n" -#: help.c:359 +#: help.c:365 #, c-format msgid "" " ECHO\n" @@ -3283,7 +3499,7 @@ msgstr "" " contrôle ce qui est envoyé sur la sortie standard\n" " [all, errors, none, queries]\n" -#: help.c:362 +#: help.c:368 #, c-format msgid "" " ECHO_HIDDEN\n" @@ -3294,7 +3510,7 @@ msgstr "" " si activé, affiche les requêtes internes exécutées par les méta-commandes ;\n" " si configuré à « noexec », affiche les requêtes sans les exécuter\n" -#: help.c:365 +#: help.c:371 #, c-format msgid "" " ENCODING\n" @@ -3303,7 +3519,7 @@ msgstr "" " ENCODING\n" " encodage du jeu de caractères client\n" -#: help.c:367 +#: help.c:373 #, c-format msgid "" " ERROR\n" @@ -3312,7 +3528,7 @@ msgstr "" " ERROR\n" " true si la dernière requête a échoué, sinon false\n" -#: help.c:369 +#: help.c:375 #, c-format msgid "" " FETCH_COUNT\n" @@ -3322,7 +3538,17 @@ msgstr "" " le nombre de lignes résultats à récupérer et à afficher à la fois\n" " (0 pour illimité)\n" -#: help.c:371 +#: help.c:377 +#, c-format +msgid "" +" HIDE_TOAST_COMPRESSION\n" +" if set, compression methods are not displayed\n" +msgstr "" +" HIDE_TOAST_COMPRESSION\n" +" si activé, les méthodes de compression methods ne sont pas affichées\n" +"\n" + +#: help.c:379 #, c-format msgid "" " HIDE_TABLEAM\n" @@ -3331,7 +3557,7 @@ msgstr "" " HIDE_TABLEAM\n" " si activé, les méthodes d'accès ne sont pas affichées\n" -#: help.c:373 +#: help.c:381 #, c-format msgid "" " HISTCONTROL\n" @@ -3340,7 +3566,7 @@ msgstr "" " HISTCONTROL\n" " contrôle l'historique des commandes [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:375 +#: help.c:383 #, c-format msgid "" " HISTFILE\n" @@ -3349,7 +3575,7 @@ msgstr "" " HISTFILE\n" " nom du fichier utilisé pour stocker l'historique des commandes\n" -#: help.c:377 +#: help.c:385 #, c-format msgid "" " HISTSIZE\n" @@ -3358,7 +3584,7 @@ msgstr "" " HISTSIZE\n" " nombre maximum de commandes à stocker dans l'historique de commandes\n" -#: help.c:379 +#: help.c:387 #, c-format msgid "" " HOST\n" @@ -3367,7 +3593,7 @@ msgstr "" " HOST\n" " l'hôte de la base de données\n" -#: help.c:381 +#: help.c:389 #, c-format msgid "" " IGNOREEOF\n" @@ -3376,7 +3602,7 @@ msgstr "" " IGNOREEOF\n" " nombre d'EOF nécessaire pour terminer une session interactive\n" -#: help.c:383 +#: help.c:391 #, c-format msgid "" " LASTOID\n" @@ -3385,7 +3611,7 @@ msgstr "" " LASTOID\n" " valeur du dernier OID affecté\n" -#: help.c:385 +#: help.c:393 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" @@ -3396,7 +3622,7 @@ msgstr "" " LAST_ERROR_SQLSTATE\n" " message et SQLSTATE de la dernière erreur ou une chaîne vide et \"00000\" if si aucune erreur\n" -#: help.c:388 +#: help.c:396 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" @@ -3405,7 +3631,7 @@ msgstr "" " ON_ERROR_ROLLBACK\n" " si activé, une erreur n'arrête pas une transaction (utilise des savepoints implicites)\n" -#: help.c:390 +#: help.c:398 #, c-format msgid "" " ON_ERROR_STOP\n" @@ -3414,7 +3640,7 @@ msgstr "" " ON_ERROR_STOP\n" " arrête l'exécution d'un batch après une erreur\n" -#: help.c:392 +#: help.c:400 #, c-format msgid "" " PORT\n" @@ -3423,7 +3649,7 @@ msgstr "" " PORT\n" " port du serveur pour la connexion actuelle\n" -#: help.c:394 +#: help.c:402 #, c-format msgid "" " PROMPT1\n" @@ -3432,7 +3658,7 @@ msgstr "" " PROMPT1\n" " spécifie l'invite standard de psql\n" -#: help.c:396 +#: help.c:404 #, c-format msgid "" " PROMPT2\n" @@ -3441,7 +3667,7 @@ msgstr "" " PROMPT2\n" " spécifie l'invite utilisé quand une requête continue après la ligne courante\n" -#: help.c:398 +#: help.c:406 #, c-format msgid "" " PROMPT3\n" @@ -3450,7 +3676,7 @@ msgstr "" " PROMPT3\n" " spécifie l'invite utilisée lors d'un COPY ... FROM STDIN\n" -#: help.c:400 +#: help.c:408 #, c-format msgid "" " QUIET\n" @@ -3459,7 +3685,7 @@ msgstr "" " QUIET\n" " s'exécute en silence (identique à l'option -q)\n" -#: help.c:402 +#: help.c:410 #, c-format msgid "" " ROW_COUNT\n" @@ -3468,7 +3694,7 @@ msgstr "" " ROW_COUNT\n" " nombre de lignes renvoyées ou affectées par la dernière requête, ou 0\n" -#: help.c:404 +#: help.c:412 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3479,7 +3705,7 @@ msgstr "" " SERVER_VERSION_NUM\n" " version du serveur (chaîne courte ou format numérique)\n" -#: help.c:407 +#: help.c:415 #, c-format msgid "" " SHOW_CONTEXT\n" @@ -3488,7 +3714,7 @@ msgstr "" " SHOW_CONTEXT\n" " contrôle l'affichage des champs de contexte du message [never, errors, always]\n" -#: help.c:409 +#: help.c:417 #, c-format msgid "" " SINGLELINE\n" @@ -3497,7 +3723,7 @@ msgstr "" " SINGLELINE\n" " une fin de ligne termine le mode de commande SQL (identique à l'option -S)\n" -#: help.c:411 +#: help.c:419 #, c-format msgid "" " SINGLESTEP\n" @@ -3506,7 +3732,7 @@ msgstr "" " SINGLESTEP\n" " mode pas à pas (identique à l'option -s)\n" -#: help.c:413 +#: help.c:421 #, c-format msgid "" " SQLSTATE\n" @@ -3515,7 +3741,7 @@ msgstr "" " SQLSTATE\n" " SQLSTATE de la dernière requête, ou \"00000\" si aucune erreur\n" -#: help.c:415 +#: help.c:423 #, c-format msgid "" " USER\n" @@ -3524,7 +3750,7 @@ msgstr "" " USER\n" " l'utilisateur actuellement connecté\n" -#: help.c:417 +#: help.c:425 #, c-format msgid "" " VERBOSITY\n" @@ -3533,7 +3759,7 @@ msgstr "" " VERBOSITY\n" " contrôle la verbosité des rapports d'erreurs [default, verbose, terse, sqlstate]\n" -#: help.c:419 +#: help.c:427 #, c-format msgid "" " VERSION\n" @@ -3546,7 +3772,7 @@ msgstr "" " VERSION_NUM\n" " version de psql (chaîne longue, chaîne courte, ou format numérique)\n" -#: help.c:424 +#: help.c:432 #, c-format msgid "" "\n" @@ -3555,7 +3781,7 @@ msgstr "" "\n" "Paramètres d'affichage :\n" -#: help.c:426 +#: help.c:434 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3566,7 +3792,7 @@ msgstr "" " ou \\pset NOM [VALEUR] dans psql\n" "\n" -#: help.c:428 +#: help.c:436 #, c-format msgid "" " border\n" @@ -3575,7 +3801,7 @@ msgstr "" " border\n" " style de bordure (nombre)\n" -#: help.c:430 +#: help.c:438 #, c-format msgid "" " columns\n" @@ -3584,7 +3810,7 @@ msgstr "" " columns\n" " largeur cible pour le format encadré\n" -#: help.c:432 +#: help.c:440 #, c-format msgid "" " expanded (or x)\n" @@ -3593,7 +3819,7 @@ msgstr "" " expanded (ou x)\n" " sortie étendue [on, off, auto]\n" -#: help.c:434 +#: help.c:442 #, c-format msgid "" " fieldsep\n" @@ -3602,7 +3828,7 @@ msgstr "" " fieldsep\n" " champ séparateur pour l'affichage non aligné (par défaut « %s »)\n" -#: help.c:437 +#: help.c:445 #, c-format msgid "" " fieldsep_zero\n" @@ -3611,7 +3837,7 @@ msgstr "" " fieldsep_zero\n" " configure le séparateur de champ pour l'affichage non alignée à l'octet zéro\n" -#: help.c:439 +#: help.c:447 #, c-format msgid "" " footer\n" @@ -3620,7 +3846,7 @@ msgstr "" " footer\n" " active ou désactive l'affiche du bas de tableau [on, off]\n" -#: help.c:441 +#: help.c:449 #, c-format msgid "" " format\n" @@ -3629,7 +3855,7 @@ msgstr "" " format\n" " active le format de sortie [unaligned, aligned, wrapped, html, asciidoc, ...]\n" -#: help.c:443 +#: help.c:451 #, c-format msgid "" " linestyle\n" @@ -3638,7 +3864,7 @@ msgstr "" " linestyle\n" " configure l'affichage des lignes de bordure [ascii, old-ascii, unicode]\n" -#: help.c:445 +#: help.c:453 #, c-format msgid "" " null\n" @@ -3647,7 +3873,7 @@ msgstr "" " null\n" " configure la chaîne à afficher à la place d'une valeur NULL\n" -#: help.c:447 +#: help.c:455 #, c-format msgid "" " numericlocale\n" @@ -3657,7 +3883,7 @@ msgstr "" " active ou désactive l'affichage d'un caractère spécifique à la locale pour séparer\n" " des groupes de chiffres [on, off]\n" -#: help.c:449 +#: help.c:457 #, c-format msgid "" " pager\n" @@ -3666,7 +3892,7 @@ msgstr "" " pager\n" " contrôle quand un paginateur externe est utilisé [yes, no, always]\n" -#: help.c:451 +#: help.c:459 #, c-format msgid "" " recordsep\n" @@ -3675,7 +3901,7 @@ msgstr "" " recordsep\n" " enregistre le séparateur de ligne pour les affichages non alignés\n" -#: help.c:453 +#: help.c:461 #, c-format msgid "" " recordsep_zero\n" @@ -3685,7 +3911,7 @@ msgstr "" " initialise le séparateur d'enregistrements pour un affichage\n" " non aligné à l'octet zéro\n" -#: help.c:455 +#: help.c:463 #, c-format msgid "" " tableattr (or T)\n" @@ -3697,7 +3923,7 @@ msgstr "" " proportionnelles de colonnes pour les types de données alignés à gauche dans le\n" " format latex-longtable\n" -#: help.c:458 +#: help.c:466 #, c-format msgid "" " title\n" @@ -3706,7 +3932,7 @@ msgstr "" " title\n" " configure le titre de la table pour toute table affichée\n" -#: help.c:460 +#: help.c:468 #, c-format msgid "" " tuples_only\n" @@ -3715,7 +3941,7 @@ msgstr "" " tuples_only\n" " si activé, seules les données de la table sont affichées\n" -#: help.c:462 +#: help.c:470 #, c-format msgid "" " unicode_border_linestyle\n" @@ -3728,7 +3954,7 @@ msgstr "" " unicode_header_linestyle\n" " configure le style d'affichage de ligne Unicode [single, double]\n" -#: help.c:467 +#: help.c:475 #, c-format msgid "" "\n" @@ -3737,7 +3963,7 @@ msgstr "" "\n" "Variables d'environnement :\n" -#: help.c:471 +#: help.c:479 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -3748,7 +3974,7 @@ msgstr "" " ou \\setenv NOM [VALEUR] dans psql\n" "\n" -#: help.c:473 +#: help.c:481 #, c-format msgid "" " set NAME=VALUE\n" @@ -3761,7 +3987,7 @@ msgstr "" " ou \\setenv NOM [VALEUR] dans psql\n" "\n" -#: help.c:476 +#: help.c:484 #, c-format msgid "" " COLUMNS\n" @@ -3770,7 +3996,7 @@ msgstr "" " COLUMNS\n" " nombre de colonnes pour le format encadré\n" -#: help.c:478 +#: help.c:486 #, c-format msgid "" " PGAPPNAME\n" @@ -3779,7 +4005,7 @@ msgstr "" " PGAPPNAME\n" " identique au paramètre de connexion application_name\n" -#: help.c:480 +#: help.c:488 #, c-format msgid "" " PGDATABASE\n" @@ -3788,7 +4014,7 @@ msgstr "" " PGDATABASE\n" " identique au paramètre de connexion dbname\n" -#: help.c:482 +#: help.c:490 #, c-format msgid "" " PGHOST\n" @@ -3797,7 +4023,7 @@ msgstr "" " PGHOST\n" " identique au paramètre de connexion host\n" -#: help.c:484 +#: help.c:492 #, c-format msgid "" " PGPASSWORD\n" @@ -3806,7 +4032,7 @@ msgstr "" " PGPASSWORD\n" " mot de passe de connexion (non recommendé)\n" -#: help.c:486 +#: help.c:494 #, c-format msgid "" " PGPASSFILE\n" @@ -3815,7 +4041,7 @@ msgstr "" " PGPASSFILE\n" " nom du fichier de mot de passe\n" -#: help.c:488 +#: help.c:496 #, c-format msgid "" " PGPORT\n" @@ -3824,7 +4050,7 @@ msgstr "" " PGPORT\n" " identique au paramètre de connexion port\n" -#: help.c:490 +#: help.c:498 #, c-format msgid "" " PGUSER\n" @@ -3833,7 +4059,7 @@ msgstr "" " PGUSER\n" " identique au paramètre de connexion user\n" -#: help.c:492 +#: help.c:500 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" @@ -3842,7 +4068,7 @@ msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" " éditeur utilisé par les commandes \\e, \\ef et \\ev\n" -#: help.c:494 +#: help.c:502 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" @@ -3851,7 +4077,7 @@ msgstr "" " PSQL_EDITOR_LINENUMBER_ARG\n" " comment spécifier un numéro de ligne lors de l'appel de l'éditeur\n" -#: help.c:496 +#: help.c:504 #, c-format msgid "" " PSQL_HISTORY\n" @@ -3860,7 +4086,7 @@ msgstr "" " PSQL_HISTORY\n" " autre emplacement pour le fichier d'historique des commandes\n" -#: help.c:498 +#: help.c:506 #, c-format msgid "" " PSQL_PAGER, PAGER\n" @@ -3869,7 +4095,7 @@ msgstr "" " PSQL_PAGER, PAGER\n" " nom du paginateur externe\n" -#: help.c:500 +#: help.c:508 #, c-format msgid "" " PSQLRC\n" @@ -3878,7 +4104,7 @@ msgstr "" " PSQLRC\n" " autre emplacement pour le fichier .psqlrc de l'utilisateur\n" -#: help.c:502 +#: help.c:510 #, c-format msgid "" " SHELL\n" @@ -3887,7 +4113,7 @@ msgstr "" " SHELL\n" " shell utilisé par la commande \\!\n" -#: help.c:504 +#: help.c:512 #, c-format msgid "" " TMPDIR\n" @@ -3896,11 +4122,11 @@ msgstr "" " TMPDIR\n" " répertoire pour les fichiers temporaires\n" -#: help.c:548 +#: help.c:557 msgid "Available help:\n" msgstr "Aide-mémoire disponible :\n" -#: help.c:636 +#: help.c:652 #, c-format msgid "" "Command: %s\n" @@ -3919,7 +4145,7 @@ msgstr "" "URL: %s\n" "\n" -#: help.c:655 +#: help.c:675 #, c-format msgid "" "No help available for \"%s\".\n" @@ -3928,17 +4154,17 @@ msgstr "" "Aucun aide-mémoire disponible pour « %s ».\n" "Essayez \\h sans arguments pour afficher les aide-mémoires disponibles.\n" -#: input.c:218 +#: input.c:217 #, c-format msgid "could not read from input file: %m" msgstr "n'a pas pu lire à partir du fichier en entrée : %m" -#: input.c:472 input.c:510 +#: input.c:471 input.c:509 #, c-format msgid "could not save history to file \"%s\": %m" msgstr "n'a pas pu sauvegarder l'historique dans le fichier « %s » : %m" -#: input.c:529 +#: input.c:528 #, c-format msgid "history is not supported by this installation" msgstr "l'historique n'est pas supportée par cette installation" @@ -3971,12 +4197,12 @@ msgstr "« Large objects »" msgid "\\if: escaped" msgstr "\\if : échappé" -#: mainloop.c:183 +#: mainloop.c:195 #, c-format msgid "Use \"\\q\" to leave %s.\n" msgstr "Saisissez « \\q » pour quitter %s.\n" -#: mainloop.c:205 +#: mainloop.c:217 msgid "" "The input is a PostgreSQL custom-format dump.\n" "Use the pg_restore command-line client to restore this dump to a database.\n" @@ -3984,19 +4210,19 @@ msgstr "" "Les données en entrée proviennent d'une sauvegarde PostgreSQL au format custom.\n" "Utilisez l'outil en ligne de commande pg_restore pour restaurer cette sauvegarde dans une base de données.\n" -#: mainloop.c:282 +#: mainloop.c:298 msgid "Use \\? for help or press control-C to clear the input buffer." msgstr "Utilisez \\? pour l'aide ou appuyez sur control-C pour vider le tampon de saisie." -#: mainloop.c:284 +#: mainloop.c:300 msgid "Use \\? for help." msgstr "Utilisez \\? pour l'aide." -#: mainloop.c:288 +#: mainloop.c:304 msgid "You are using psql, the command-line interface to PostgreSQL." msgstr "Vous utilisez psql, l'interface en ligne de commande de PostgreSQL." -#: mainloop.c:289 +#: mainloop.c:305 #, c-format msgid "" "Type: \\copyright for distribution terms\n" @@ -4012,24 +4238,24 @@ msgstr "" " \\g ou point-virgule en fin d'instruction pour exécuter la requête\n" " \\q pour quitter\n" -#: mainloop.c:313 +#: mainloop.c:329 msgid "Use \\q to quit." msgstr "Utilisez \\q pour quitter." -#: mainloop.c:316 mainloop.c:340 +#: mainloop.c:332 mainloop.c:356 msgid "Use control-D to quit." msgstr "Utilisez control-D pour quitter." -#: mainloop.c:318 mainloop.c:342 +#: mainloop.c:334 mainloop.c:358 msgid "Use control-C to quit." msgstr "Utilisez control-C pour quitter." -#: mainloop.c:449 mainloop.c:591 +#: mainloop.c:465 mainloop.c:613 #, c-format msgid "query ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "requête ignorée ; utilisez \\endif ou Ctrl-C pour quitter le bloc \\if courant" -#: mainloop.c:609 +#: mainloop.c:631 #, c-format msgid "reached EOF without finding closing \\endif(s)" msgstr "a atteint EOF sans trouver le(s) \\endif fermant" @@ -4044,2264 +4270,2320 @@ msgstr "chaîne entre guillemets non terminée" msgid "%s: out of memory" msgstr "%s : mémoire épuisée" -#: sql_help.c:35 sql_help.c:38 sql_help.c:41 sql_help.c:65 sql_help.c:66 -#: sql_help.c:68 sql_help.c:70 sql_help.c:81 sql_help.c:83 sql_help.c:85 -#: sql_help.c:111 sql_help.c:117 sql_help.c:119 sql_help.c:121 sql_help.c:123 -#: sql_help.c:126 sql_help.c:128 sql_help.c:130 sql_help.c:235 sql_help.c:237 -#: sql_help.c:238 sql_help.c:240 sql_help.c:242 sql_help.c:245 sql_help.c:247 -#: sql_help.c:249 sql_help.c:251 sql_help.c:263 sql_help.c:264 sql_help.c:265 -#: sql_help.c:267 sql_help.c:316 sql_help.c:318 sql_help.c:320 sql_help.c:322 -#: sql_help.c:391 sql_help.c:396 sql_help.c:398 sql_help.c:440 sql_help.c:442 -#: sql_help.c:445 sql_help.c:447 sql_help.c:515 sql_help.c:520 sql_help.c:525 -#: sql_help.c:530 sql_help.c:535 sql_help.c:588 sql_help.c:590 sql_help.c:592 -#: sql_help.c:594 sql_help.c:596 sql_help.c:599 sql_help.c:601 sql_help.c:604 -#: sql_help.c:615 sql_help.c:617 sql_help.c:658 sql_help.c:660 sql_help.c:662 -#: sql_help.c:665 sql_help.c:667 sql_help.c:669 sql_help.c:702 sql_help.c:706 -#: sql_help.c:710 sql_help.c:729 sql_help.c:732 sql_help.c:735 sql_help.c:764 -#: sql_help.c:776 sql_help.c:784 sql_help.c:787 sql_help.c:790 sql_help.c:805 -#: sql_help.c:808 sql_help.c:837 sql_help.c:842 sql_help.c:847 sql_help.c:852 -#: sql_help.c:857 sql_help.c:879 sql_help.c:881 sql_help.c:883 sql_help.c:885 -#: sql_help.c:888 sql_help.c:890 sql_help.c:931 sql_help.c:975 sql_help.c:980 -#: sql_help.c:985 sql_help.c:990 sql_help.c:995 sql_help.c:1014 sql_help.c:1025 -#: sql_help.c:1027 sql_help.c:1046 sql_help.c:1056 sql_help.c:1058 -#: sql_help.c:1060 sql_help.c:1072 sql_help.c:1076 sql_help.c:1078 -#: sql_help.c:1089 sql_help.c:1091 sql_help.c:1093 sql_help.c:1109 -#: sql_help.c:1111 sql_help.c:1115 sql_help.c:1118 sql_help.c:1119 -#: sql_help.c:1120 sql_help.c:1123 sql_help.c:1125 sql_help.c:1258 -#: sql_help.c:1260 sql_help.c:1263 sql_help.c:1266 sql_help.c:1268 -#: sql_help.c:1270 sql_help.c:1273 sql_help.c:1276 sql_help.c:1386 -#: sql_help.c:1388 sql_help.c:1390 sql_help.c:1393 sql_help.c:1414 -#: sql_help.c:1417 sql_help.c:1420 sql_help.c:1423 sql_help.c:1427 -#: sql_help.c:1429 sql_help.c:1431 sql_help.c:1433 sql_help.c:1447 -#: sql_help.c:1450 sql_help.c:1452 sql_help.c:1454 sql_help.c:1464 -#: sql_help.c:1466 sql_help.c:1476 sql_help.c:1478 sql_help.c:1488 -#: sql_help.c:1491 sql_help.c:1513 sql_help.c:1515 sql_help.c:1517 -#: sql_help.c:1520 sql_help.c:1522 sql_help.c:1524 sql_help.c:1527 -#: sql_help.c:1577 sql_help.c:1619 sql_help.c:1622 sql_help.c:1624 -#: sql_help.c:1626 sql_help.c:1628 sql_help.c:1630 sql_help.c:1633 -#: sql_help.c:1683 sql_help.c:1699 sql_help.c:1920 sql_help.c:1989 -#: sql_help.c:2008 sql_help.c:2021 sql_help.c:2078 sql_help.c:2085 -#: sql_help.c:2095 sql_help.c:2115 sql_help.c:2140 sql_help.c:2158 -#: sql_help.c:2187 sql_help.c:2282 sql_help.c:2324 sql_help.c:2347 -#: sql_help.c:2368 sql_help.c:2369 sql_help.c:2406 sql_help.c:2426 -#: sql_help.c:2448 sql_help.c:2462 sql_help.c:2482 sql_help.c:2505 -#: sql_help.c:2535 sql_help.c:2560 sql_help.c:2606 sql_help.c:2884 -#: sql_help.c:2897 sql_help.c:2914 sql_help.c:2930 sql_help.c:2970 -#: sql_help.c:3022 sql_help.c:3026 sql_help.c:3028 sql_help.c:3034 -#: sql_help.c:3052 sql_help.c:3079 sql_help.c:3114 sql_help.c:3126 -#: sql_help.c:3135 sql_help.c:3179 sql_help.c:3193 sql_help.c:3221 -#: sql_help.c:3229 sql_help.c:3237 sql_help.c:3245 sql_help.c:3253 -#: sql_help.c:3261 sql_help.c:3269 sql_help.c:3277 sql_help.c:3286 -#: sql_help.c:3297 sql_help.c:3305 sql_help.c:3313 sql_help.c:3321 -#: sql_help.c:3329 sql_help.c:3339 sql_help.c:3348 sql_help.c:3357 -#: sql_help.c:3365 sql_help.c:3375 sql_help.c:3386 sql_help.c:3394 -#: sql_help.c:3403 sql_help.c:3414 sql_help.c:3423 sql_help.c:3431 -#: sql_help.c:3439 sql_help.c:3447 sql_help.c:3455 sql_help.c:3463 -#: sql_help.c:3471 sql_help.c:3479 sql_help.c:3487 sql_help.c:3495 -#: sql_help.c:3503 sql_help.c:3520 sql_help.c:3529 sql_help.c:3537 -#: sql_help.c:3554 sql_help.c:3569 sql_help.c:3839 sql_help.c:3890 -#: sql_help.c:3919 sql_help.c:3927 sql_help.c:4360 sql_help.c:4408 -#: sql_help.c:4549 +#: sql_help.c:35 sql_help.c:38 sql_help.c:41 sql_help.c:63 sql_help.c:65 +#: sql_help.c:67 sql_help.c:78 sql_help.c:80 sql_help.c:82 sql_help.c:108 +#: sql_help.c:114 sql_help.c:116 sql_help.c:118 sql_help.c:120 sql_help.c:123 +#: sql_help.c:125 sql_help.c:127 sql_help.c:232 sql_help.c:234 sql_help.c:235 +#: sql_help.c:237 sql_help.c:239 sql_help.c:242 sql_help.c:244 sql_help.c:246 +#: sql_help.c:248 sql_help.c:260 sql_help.c:261 sql_help.c:262 sql_help.c:264 +#: sql_help.c:313 sql_help.c:315 sql_help.c:317 sql_help.c:319 sql_help.c:388 +#: sql_help.c:393 sql_help.c:395 sql_help.c:437 sql_help.c:439 sql_help.c:442 +#: sql_help.c:444 sql_help.c:512 sql_help.c:517 sql_help.c:522 sql_help.c:527 +#: sql_help.c:532 sql_help.c:587 sql_help.c:589 sql_help.c:591 sql_help.c:593 +#: sql_help.c:595 sql_help.c:597 sql_help.c:600 sql_help.c:602 sql_help.c:605 +#: sql_help.c:616 sql_help.c:618 sql_help.c:659 sql_help.c:661 sql_help.c:663 +#: sql_help.c:666 sql_help.c:668 sql_help.c:670 sql_help.c:703 sql_help.c:707 +#: sql_help.c:711 sql_help.c:730 sql_help.c:733 sql_help.c:736 sql_help.c:765 +#: sql_help.c:777 sql_help.c:785 sql_help.c:788 sql_help.c:791 sql_help.c:806 +#: sql_help.c:809 sql_help.c:838 sql_help.c:843 sql_help.c:848 sql_help.c:853 +#: sql_help.c:858 sql_help.c:880 sql_help.c:882 sql_help.c:884 sql_help.c:886 +#: sql_help.c:889 sql_help.c:891 sql_help.c:933 sql_help.c:977 sql_help.c:982 +#: sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1016 sql_help.c:1027 +#: sql_help.c:1029 sql_help.c:1048 sql_help.c:1058 sql_help.c:1060 +#: sql_help.c:1062 sql_help.c:1074 sql_help.c:1078 sql_help.c:1080 +#: sql_help.c:1092 sql_help.c:1094 sql_help.c:1096 sql_help.c:1098 +#: sql_help.c:1116 sql_help.c:1118 sql_help.c:1122 sql_help.c:1126 +#: sql_help.c:1130 sql_help.c:1133 sql_help.c:1134 sql_help.c:1135 +#: sql_help.c:1138 sql_help.c:1140 sql_help.c:1276 sql_help.c:1278 +#: sql_help.c:1281 sql_help.c:1284 sql_help.c:1286 sql_help.c:1288 +#: sql_help.c:1291 sql_help.c:1294 sql_help.c:1408 sql_help.c:1410 +#: sql_help.c:1412 sql_help.c:1415 sql_help.c:1436 sql_help.c:1439 +#: sql_help.c:1442 sql_help.c:1445 sql_help.c:1449 sql_help.c:1451 +#: sql_help.c:1453 sql_help.c:1455 sql_help.c:1469 sql_help.c:1472 +#: sql_help.c:1474 sql_help.c:1476 sql_help.c:1486 sql_help.c:1488 +#: sql_help.c:1498 sql_help.c:1500 sql_help.c:1510 sql_help.c:1513 +#: sql_help.c:1536 sql_help.c:1538 sql_help.c:1540 sql_help.c:1542 +#: sql_help.c:1545 sql_help.c:1547 sql_help.c:1550 sql_help.c:1553 +#: sql_help.c:1604 sql_help.c:1647 sql_help.c:1650 sql_help.c:1652 +#: sql_help.c:1654 sql_help.c:1657 sql_help.c:1659 sql_help.c:1661 +#: sql_help.c:1664 sql_help.c:1714 sql_help.c:1730 sql_help.c:1961 +#: sql_help.c:2030 sql_help.c:2049 sql_help.c:2062 sql_help.c:2118 +#: sql_help.c:2124 sql_help.c:2134 sql_help.c:2155 sql_help.c:2181 +#: sql_help.c:2199 sql_help.c:2226 sql_help.c:2322 sql_help.c:2368 +#: sql_help.c:2392 sql_help.c:2415 sql_help.c:2419 sql_help.c:2453 +#: sql_help.c:2473 sql_help.c:2495 sql_help.c:2509 sql_help.c:2530 +#: sql_help.c:2554 sql_help.c:2584 sql_help.c:2609 sql_help.c:2656 +#: sql_help.c:2944 sql_help.c:2957 sql_help.c:2974 sql_help.c:2990 +#: sql_help.c:3030 sql_help.c:3084 sql_help.c:3088 sql_help.c:3090 +#: sql_help.c:3097 sql_help.c:3116 sql_help.c:3143 sql_help.c:3178 +#: sql_help.c:3190 sql_help.c:3199 sql_help.c:3243 sql_help.c:3257 +#: sql_help.c:3285 sql_help.c:3293 sql_help.c:3305 sql_help.c:3315 +#: sql_help.c:3323 sql_help.c:3331 sql_help.c:3339 sql_help.c:3347 +#: sql_help.c:3356 sql_help.c:3367 sql_help.c:3375 sql_help.c:3383 +#: sql_help.c:3391 sql_help.c:3399 sql_help.c:3409 sql_help.c:3418 +#: sql_help.c:3427 sql_help.c:3435 sql_help.c:3445 sql_help.c:3456 +#: sql_help.c:3464 sql_help.c:3473 sql_help.c:3484 sql_help.c:3493 +#: sql_help.c:3501 sql_help.c:3509 sql_help.c:3517 sql_help.c:3525 +#: sql_help.c:3533 sql_help.c:3541 sql_help.c:3549 sql_help.c:3557 +#: sql_help.c:3565 sql_help.c:3573 sql_help.c:3590 sql_help.c:3599 +#: sql_help.c:3607 sql_help.c:3624 sql_help.c:3639 sql_help.c:3941 +#: sql_help.c:3992 sql_help.c:4021 sql_help.c:4036 sql_help.c:4521 +#: sql_help.c:4569 sql_help.c:4720 msgid "name" msgstr "nom" -#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1770 -#: sql_help.c:3194 sql_help.c:4146 +#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:324 sql_help.c:1811 +#: sql_help.c:3258 sql_help.c:4297 msgid "aggregate_signature" msgstr "signature_agrégat" -#: sql_help.c:37 sql_help.c:67 sql_help.c:82 sql_help.c:118 sql_help.c:250 -#: sql_help.c:268 sql_help.c:399 sql_help.c:446 sql_help.c:524 sql_help.c:571 -#: sql_help.c:589 sql_help.c:616 sql_help.c:666 sql_help.c:731 sql_help.c:786 -#: sql_help.c:807 sql_help.c:846 sql_help.c:891 sql_help.c:932 sql_help.c:984 -#: sql_help.c:1016 sql_help.c:1026 sql_help.c:1059 sql_help.c:1079 -#: sql_help.c:1092 sql_help.c:1126 sql_help.c:1267 sql_help.c:1387 -#: sql_help.c:1430 sql_help.c:1451 sql_help.c:1465 sql_help.c:1477 -#: sql_help.c:1490 sql_help.c:1521 sql_help.c:1578 sql_help.c:1627 +#: sql_help.c:37 sql_help.c:64 sql_help.c:79 sql_help.c:115 sql_help.c:247 +#: sql_help.c:265 sql_help.c:396 sql_help.c:443 sql_help.c:521 sql_help.c:569 +#: sql_help.c:588 sql_help.c:617 sql_help.c:667 sql_help.c:732 sql_help.c:787 +#: sql_help.c:808 sql_help.c:847 sql_help.c:892 sql_help.c:934 sql_help.c:986 +#: sql_help.c:1018 sql_help.c:1028 sql_help.c:1061 sql_help.c:1081 +#: sql_help.c:1095 sql_help.c:1141 sql_help.c:1285 sql_help.c:1409 +#: sql_help.c:1452 sql_help.c:1473 sql_help.c:1487 sql_help.c:1499 +#: sql_help.c:1512 sql_help.c:1539 sql_help.c:1605 sql_help.c:1658 msgid "new_name" msgstr "nouveau_nom" -#: sql_help.c:40 sql_help.c:69 sql_help.c:84 sql_help.c:120 sql_help.c:248 -#: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:618 -#: sql_help.c:627 sql_help.c:685 sql_help.c:705 sql_help.c:734 sql_help.c:789 -#: sql_help.c:851 sql_help.c:889 sql_help.c:989 sql_help.c:1028 sql_help.c:1057 -#: sql_help.c:1077 sql_help.c:1090 sql_help.c:1124 sql_help.c:1327 -#: sql_help.c:1389 sql_help.c:1432 sql_help.c:1453 sql_help.c:1516 -#: sql_help.c:1625 sql_help.c:2870 +#: sql_help.c:40 sql_help.c:66 sql_help.c:81 sql_help.c:117 sql_help.c:245 +#: sql_help.c:263 sql_help.c:394 sql_help.c:479 sql_help.c:526 sql_help.c:619 +#: sql_help.c:628 sql_help.c:686 sql_help.c:706 sql_help.c:735 sql_help.c:790 +#: sql_help.c:852 sql_help.c:890 sql_help.c:991 sql_help.c:1030 sql_help.c:1059 +#: sql_help.c:1079 sql_help.c:1093 sql_help.c:1139 sql_help.c:1348 +#: sql_help.c:1411 sql_help.c:1454 sql_help.c:1475 sql_help.c:1537 +#: sql_help.c:1653 sql_help.c:2930 msgid "new_owner" msgstr "nouveau_propriétaire" -#: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:252 sql_help.c:319 -#: sql_help.c:448 sql_help.c:534 sql_help.c:668 sql_help.c:709 sql_help.c:737 -#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1094 -#: sql_help.c:1269 sql_help.c:1434 sql_help.c:1455 sql_help.c:1467 -#: sql_help.c:1479 sql_help.c:1523 sql_help.c:1629 +#: sql_help.c:43 sql_help.c:68 sql_help.c:83 sql_help.c:249 sql_help.c:316 +#: sql_help.c:445 sql_help.c:531 sql_help.c:669 sql_help.c:710 sql_help.c:738 +#: sql_help.c:793 sql_help.c:857 sql_help.c:996 sql_help.c:1063 sql_help.c:1097 +#: sql_help.c:1287 sql_help.c:1456 sql_help.c:1477 sql_help.c:1489 +#: sql_help.c:1501 sql_help.c:1541 sql_help.c:1660 msgid "new_schema" msgstr "nouveau_schéma" -#: sql_help.c:44 sql_help.c:1834 sql_help.c:3195 sql_help.c:4175 +#: sql_help.c:44 sql_help.c:1875 sql_help.c:3259 sql_help.c:4326 msgid "where aggregate_signature is:" msgstr "où signature_agrégat est :" -#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:337 sql_help.c:350 -#: sql_help.c:354 sql_help.c:370 sql_help.c:373 sql_help.c:376 sql_help.c:516 -#: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:838 -#: sql_help.c:843 sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:976 -#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1788 -#: sql_help.c:1805 sql_help.c:1811 sql_help.c:1835 sql_help.c:1838 -#: sql_help.c:1841 sql_help.c:1990 sql_help.c:2009 sql_help.c:2012 -#: sql_help.c:2283 sql_help.c:2483 sql_help.c:3196 sql_help.c:3199 -#: sql_help.c:3202 sql_help.c:3287 sql_help.c:3376 sql_help.c:3404 -#: sql_help.c:3724 sql_help.c:4057 sql_help.c:4152 sql_help.c:4159 -#: sql_help.c:4165 sql_help.c:4176 sql_help.c:4179 sql_help.c:4182 +#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:334 sql_help.c:347 +#: sql_help.c:351 sql_help.c:367 sql_help.c:370 sql_help.c:373 sql_help.c:513 +#: sql_help.c:518 sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:839 +#: sql_help.c:844 sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:978 +#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1829 +#: sql_help.c:1846 sql_help.c:1852 sql_help.c:1876 sql_help.c:1879 +#: sql_help.c:1882 sql_help.c:2031 sql_help.c:2050 sql_help.c:2053 +#: sql_help.c:2323 sql_help.c:2531 sql_help.c:3260 sql_help.c:3263 +#: sql_help.c:3266 sql_help.c:3357 sql_help.c:3446 sql_help.c:3474 +#: sql_help.c:3819 sql_help.c:4199 sql_help.c:4303 sql_help.c:4310 +#: sql_help.c:4316 sql_help.c:4327 sql_help.c:4330 sql_help.c:4333 msgid "argmode" msgstr "mode_argument" -#: sql_help.c:46 sql_help.c:49 sql_help.c:52 sql_help.c:338 sql_help.c:351 -#: sql_help.c:355 sql_help.c:371 sql_help.c:374 sql_help.c:377 sql_help.c:517 -#: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:839 -#: sql_help.c:844 sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:977 -#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1789 -#: sql_help.c:1806 sql_help.c:1812 sql_help.c:1836 sql_help.c:1839 -#: sql_help.c:1842 sql_help.c:1991 sql_help.c:2010 sql_help.c:2013 -#: sql_help.c:2284 sql_help.c:2484 sql_help.c:3197 sql_help.c:3200 -#: sql_help.c:3203 sql_help.c:3288 sql_help.c:3377 sql_help.c:3405 -#: sql_help.c:4153 sql_help.c:4160 sql_help.c:4166 sql_help.c:4177 -#: sql_help.c:4180 sql_help.c:4183 +#: sql_help.c:46 sql_help.c:49 sql_help.c:52 sql_help.c:335 sql_help.c:348 +#: sql_help.c:352 sql_help.c:368 sql_help.c:371 sql_help.c:374 sql_help.c:514 +#: sql_help.c:519 sql_help.c:524 sql_help.c:529 sql_help.c:534 sql_help.c:840 +#: sql_help.c:845 sql_help.c:850 sql_help.c:855 sql_help.c:860 sql_help.c:979 +#: sql_help.c:984 sql_help.c:989 sql_help.c:994 sql_help.c:999 sql_help.c:1830 +#: sql_help.c:1847 sql_help.c:1853 sql_help.c:1877 sql_help.c:1880 +#: sql_help.c:1883 sql_help.c:2032 sql_help.c:2051 sql_help.c:2054 +#: sql_help.c:2324 sql_help.c:2532 sql_help.c:3261 sql_help.c:3264 +#: sql_help.c:3267 sql_help.c:3358 sql_help.c:3447 sql_help.c:3475 +#: sql_help.c:4304 sql_help.c:4311 sql_help.c:4317 sql_help.c:4328 +#: sql_help.c:4331 sql_help.c:4334 msgid "argname" msgstr "nom_agrégat" -#: sql_help.c:47 sql_help.c:50 sql_help.c:53 sql_help.c:339 sql_help.c:352 -#: sql_help.c:356 sql_help.c:372 sql_help.c:375 sql_help.c:378 sql_help.c:518 -#: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:840 -#: sql_help.c:845 sql_help.c:850 sql_help.c:855 sql_help.c:860 sql_help.c:978 -#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1790 -#: sql_help.c:1807 sql_help.c:1813 sql_help.c:1837 sql_help.c:1840 -#: sql_help.c:1843 sql_help.c:2285 sql_help.c:2485 sql_help.c:3198 -#: sql_help.c:3201 sql_help.c:3204 sql_help.c:3289 sql_help.c:3378 -#: sql_help.c:3406 sql_help.c:4154 sql_help.c:4161 sql_help.c:4167 -#: sql_help.c:4178 sql_help.c:4181 sql_help.c:4184 +#: sql_help.c:47 sql_help.c:50 sql_help.c:53 sql_help.c:336 sql_help.c:349 +#: sql_help.c:353 sql_help.c:369 sql_help.c:372 sql_help.c:375 sql_help.c:515 +#: sql_help.c:520 sql_help.c:525 sql_help.c:530 sql_help.c:535 sql_help.c:841 +#: sql_help.c:846 sql_help.c:851 sql_help.c:856 sql_help.c:861 sql_help.c:980 +#: sql_help.c:985 sql_help.c:990 sql_help.c:995 sql_help.c:1000 sql_help.c:1831 +#: sql_help.c:1848 sql_help.c:1854 sql_help.c:1878 sql_help.c:1881 +#: sql_help.c:1884 sql_help.c:2325 sql_help.c:2533 sql_help.c:3262 +#: sql_help.c:3265 sql_help.c:3268 sql_help.c:3359 sql_help.c:3448 +#: sql_help.c:3476 sql_help.c:4305 sql_help.c:4312 sql_help.c:4318 +#: sql_help.c:4329 sql_help.c:4332 sql_help.c:4335 msgid "argtype" msgstr "type_argument" -#: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:926 -#: sql_help.c:1074 sql_help.c:1448 sql_help.c:1572 sql_help.c:1604 -#: sql_help.c:1652 sql_help.c:1891 sql_help.c:1898 sql_help.c:2190 -#: sql_help.c:2232 sql_help.c:2239 sql_help.c:2248 sql_help.c:2325 -#: sql_help.c:2536 sql_help.c:2628 sql_help.c:2899 sql_help.c:3080 -#: sql_help.c:3102 sql_help.c:3590 sql_help.c:3758 sql_help.c:4610 +#: sql_help.c:109 sql_help.c:391 sql_help.c:468 sql_help.c:480 sql_help.c:928 +#: sql_help.c:1076 sql_help.c:1470 sql_help.c:1599 sql_help.c:1631 +#: sql_help.c:1683 sql_help.c:1746 sql_help.c:1932 sql_help.c:1939 +#: sql_help.c:2229 sql_help.c:2271 sql_help.c:2278 sql_help.c:2287 +#: sql_help.c:2369 sql_help.c:2585 sql_help.c:2678 sql_help.c:2959 +#: sql_help.c:3144 sql_help.c:3166 sql_help.c:3306 sql_help.c:3661 +#: sql_help.c:3860 sql_help.c:4035 sql_help.c:4783 msgid "option" msgstr "option" -#: sql_help.c:113 sql_help.c:927 sql_help.c:1573 sql_help.c:2326 -#: sql_help.c:2537 sql_help.c:3081 +#: sql_help.c:110 sql_help.c:929 sql_help.c:1600 sql_help.c:2370 +#: sql_help.c:2586 sql_help.c:3145 sql_help.c:3307 msgid "where option can be:" msgstr "où option peut être :" -#: sql_help.c:114 sql_help.c:2122 +#: sql_help.c:111 sql_help.c:2163 msgid "allowconn" msgstr "allowconn" -#: sql_help.c:115 sql_help.c:928 sql_help.c:1574 sql_help.c:2123 -#: sql_help.c:2538 sql_help.c:3082 +#: sql_help.c:112 sql_help.c:930 sql_help.c:1601 sql_help.c:2164 +#: sql_help.c:2371 sql_help.c:2587 sql_help.c:3146 msgid "connlimit" msgstr "limite_de_connexion" -#: sql_help.c:116 sql_help.c:2124 +#: sql_help.c:113 sql_help.c:2165 msgid "istemplate" msgstr "istemplate" -#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1272 sql_help.c:1320 +#: sql_help.c:119 sql_help.c:607 sql_help.c:672 sql_help.c:1290 sql_help.c:1341 +#: sql_help.c:4039 msgid "new_tablespace" msgstr "nouveau_tablespace" -#: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:544 sql_help.c:546 -#: sql_help.c:547 sql_help.c:863 sql_help.c:865 sql_help.c:866 sql_help.c:935 -#: sql_help.c:939 sql_help.c:942 sql_help.c:1003 sql_help.c:1005 -#: sql_help.c:1006 sql_help.c:1137 sql_help.c:1140 sql_help.c:1581 -#: sql_help.c:1585 sql_help.c:1588 sql_help.c:2295 sql_help.c:2489 -#: sql_help.c:3944 sql_help.c:4349 +#: sql_help.c:121 sql_help.c:124 sql_help.c:126 sql_help.c:541 sql_help.c:543 +#: sql_help.c:544 sql_help.c:864 sql_help.c:866 sql_help.c:867 sql_help.c:937 +#: sql_help.c:941 sql_help.c:944 sql_help.c:1005 sql_help.c:1007 +#: sql_help.c:1008 sql_help.c:1152 sql_help.c:1155 sql_help.c:1608 +#: sql_help.c:1612 sql_help.c:1615 sql_help.c:2335 sql_help.c:2537 +#: sql_help.c:4057 sql_help.c:4510 msgid "configuration_parameter" msgstr "paramètre_configuration" -#: sql_help.c:125 sql_help.c:395 sql_help.c:466 sql_help.c:472 sql_help.c:484 -#: sql_help.c:545 sql_help.c:598 sql_help.c:677 sql_help.c:683 sql_help.c:864 -#: sql_help.c:887 sql_help.c:936 sql_help.c:1004 sql_help.c:1075 -#: sql_help.c:1114 sql_help.c:1117 sql_help.c:1122 sql_help.c:1138 -#: sql_help.c:1139 sql_help.c:1302 sql_help.c:1322 sql_help.c:1370 -#: sql_help.c:1392 sql_help.c:1449 sql_help.c:1582 sql_help.c:1605 -#: sql_help.c:2191 sql_help.c:2233 sql_help.c:2240 sql_help.c:2249 -#: sql_help.c:2296 sql_help.c:2297 sql_help.c:2356 sql_help.c:2390 -#: sql_help.c:2490 sql_help.c:2491 sql_help.c:2508 sql_help.c:2629 -#: sql_help.c:2659 sql_help.c:2764 sql_help.c:2777 sql_help.c:2791 -#: sql_help.c:2832 sql_help.c:2856 sql_help.c:2873 sql_help.c:2900 -#: sql_help.c:3103 sql_help.c:3759 sql_help.c:4350 sql_help.c:4351 +#: sql_help.c:122 sql_help.c:392 sql_help.c:463 sql_help.c:469 sql_help.c:481 +#: sql_help.c:542 sql_help.c:599 sql_help.c:678 sql_help.c:684 sql_help.c:865 +#: sql_help.c:888 sql_help.c:938 sql_help.c:1006 sql_help.c:1077 +#: sql_help.c:1121 sql_help.c:1125 sql_help.c:1129 sql_help.c:1132 +#: sql_help.c:1137 sql_help.c:1153 sql_help.c:1154 sql_help.c:1321 +#: sql_help.c:1343 sql_help.c:1392 sql_help.c:1414 sql_help.c:1471 +#: sql_help.c:1555 sql_help.c:1609 sql_help.c:1632 sql_help.c:2230 +#: sql_help.c:2272 sql_help.c:2279 sql_help.c:2288 sql_help.c:2336 +#: sql_help.c:2337 sql_help.c:2400 sql_help.c:2403 sql_help.c:2437 +#: sql_help.c:2538 sql_help.c:2539 sql_help.c:2557 sql_help.c:2679 +#: sql_help.c:2718 sql_help.c:2824 sql_help.c:2837 sql_help.c:2851 +#: sql_help.c:2892 sql_help.c:2916 sql_help.c:2933 sql_help.c:2960 +#: sql_help.c:3167 sql_help.c:3861 sql_help.c:4511 sql_help.c:4512 msgid "value" msgstr "valeur" -#: sql_help.c:197 +#: sql_help.c:194 msgid "target_role" msgstr "rôle_cible" -#: sql_help.c:198 sql_help.c:2174 sql_help.c:2584 sql_help.c:2589 -#: sql_help.c:3706 sql_help.c:3713 sql_help.c:3727 sql_help.c:3733 -#: sql_help.c:4039 sql_help.c:4046 sql_help.c:4060 sql_help.c:4066 +#: sql_help.c:195 sql_help.c:2214 sql_help.c:2634 sql_help.c:2639 +#: sql_help.c:3794 sql_help.c:3803 sql_help.c:3822 sql_help.c:3831 +#: sql_help.c:4174 sql_help.c:4183 sql_help.c:4202 sql_help.c:4211 msgid "schema_name" msgstr "nom_schéma" -#: sql_help.c:199 +#: sql_help.c:196 msgid "abbreviated_grant_or_revoke" msgstr "grant_ou_revoke_raccourci" -#: sql_help.c:200 +#: sql_help.c:197 msgid "where abbreviated_grant_or_revoke is one of:" msgstr "où abbreviated_grant_or_revoke fait partie de :" -#: sql_help.c:201 sql_help.c:202 sql_help.c:203 sql_help.c:204 sql_help.c:205 -#: sql_help.c:206 sql_help.c:207 sql_help.c:208 sql_help.c:209 sql_help.c:210 -#: sql_help.c:569 sql_help.c:605 sql_help.c:670 sql_help.c:810 sql_help.c:946 -#: sql_help.c:1271 sql_help.c:1592 sql_help.c:2329 sql_help.c:2330 -#: sql_help.c:2331 sql_help.c:2332 sql_help.c:2333 sql_help.c:2464 -#: sql_help.c:2541 sql_help.c:2542 sql_help.c:2543 sql_help.c:2544 -#: sql_help.c:2545 sql_help.c:3085 sql_help.c:3086 sql_help.c:3087 -#: sql_help.c:3088 sql_help.c:3089 sql_help.c:3740 sql_help.c:3741 -#: sql_help.c:3742 sql_help.c:4040 sql_help.c:4044 sql_help.c:4047 -#: sql_help.c:4049 sql_help.c:4051 sql_help.c:4053 sql_help.c:4055 -#: sql_help.c:4061 sql_help.c:4063 sql_help.c:4065 sql_help.c:4067 -#: sql_help.c:4069 sql_help.c:4071 sql_help.c:4072 sql_help.c:4073 -#: sql_help.c:4370 +#: sql_help.c:198 sql_help.c:199 sql_help.c:200 sql_help.c:201 sql_help.c:202 +#: sql_help.c:203 sql_help.c:204 sql_help.c:205 sql_help.c:206 sql_help.c:207 +#: sql_help.c:567 sql_help.c:606 sql_help.c:671 sql_help.c:811 sql_help.c:948 +#: sql_help.c:1289 sql_help.c:1619 sql_help.c:2374 sql_help.c:2375 +#: sql_help.c:2376 sql_help.c:2377 sql_help.c:2378 sql_help.c:2511 +#: sql_help.c:2590 sql_help.c:2591 sql_help.c:2592 sql_help.c:2593 +#: sql_help.c:2594 sql_help.c:3149 sql_help.c:3150 sql_help.c:3151 +#: sql_help.c:3152 sql_help.c:3153 sql_help.c:3840 sql_help.c:3844 +#: sql_help.c:4220 sql_help.c:4224 sql_help.c:4531 msgid "role_name" msgstr "nom_rôle" -#: sql_help.c:236 sql_help.c:459 sql_help.c:1287 sql_help.c:1289 -#: sql_help.c:1337 sql_help.c:1349 sql_help.c:1374 sql_help.c:1621 -#: sql_help.c:2143 sql_help.c:2147 sql_help.c:2252 sql_help.c:2257 -#: sql_help.c:2351 sql_help.c:2759 sql_help.c:2772 sql_help.c:2786 -#: sql_help.c:2795 sql_help.c:2807 sql_help.c:2836 sql_help.c:3790 -#: sql_help.c:3805 sql_help.c:3807 sql_help.c:4235 sql_help.c:4236 -#: sql_help.c:4245 sql_help.c:4286 sql_help.c:4287 sql_help.c:4288 -#: sql_help.c:4289 sql_help.c:4290 sql_help.c:4291 sql_help.c:4324 -#: sql_help.c:4325 sql_help.c:4330 sql_help.c:4335 sql_help.c:4474 -#: sql_help.c:4475 sql_help.c:4484 sql_help.c:4525 sql_help.c:4526 -#: sql_help.c:4527 sql_help.c:4528 sql_help.c:4529 sql_help.c:4530 -#: sql_help.c:4577 sql_help.c:4579 sql_help.c:4636 sql_help.c:4692 -#: sql_help.c:4693 sql_help.c:4702 sql_help.c:4743 sql_help.c:4744 -#: sql_help.c:4745 sql_help.c:4746 sql_help.c:4747 sql_help.c:4748 +#: sql_help.c:233 sql_help.c:456 sql_help.c:1305 sql_help.c:1307 +#: sql_help.c:1358 sql_help.c:1371 sql_help.c:1396 sql_help.c:1649 +#: sql_help.c:2184 sql_help.c:2188 sql_help.c:2291 sql_help.c:2296 +#: sql_help.c:2396 sql_help.c:2695 sql_help.c:2700 sql_help.c:2702 +#: sql_help.c:2819 sql_help.c:2832 sql_help.c:2846 sql_help.c:2855 +#: sql_help.c:2867 sql_help.c:2896 sql_help.c:3892 sql_help.c:3907 +#: sql_help.c:3909 sql_help.c:4388 sql_help.c:4389 sql_help.c:4398 +#: sql_help.c:4440 sql_help.c:4441 sql_help.c:4442 sql_help.c:4443 +#: sql_help.c:4444 sql_help.c:4445 sql_help.c:4485 sql_help.c:4486 +#: sql_help.c:4491 sql_help.c:4496 sql_help.c:4637 sql_help.c:4638 +#: sql_help.c:4647 sql_help.c:4689 sql_help.c:4690 sql_help.c:4691 +#: sql_help.c:4692 sql_help.c:4693 sql_help.c:4694 sql_help.c:4748 +#: sql_help.c:4750 sql_help.c:4811 sql_help.c:4869 sql_help.c:4870 +#: sql_help.c:4879 sql_help.c:4921 sql_help.c:4922 sql_help.c:4923 +#: sql_help.c:4924 sql_help.c:4925 sql_help.c:4926 msgid "expression" msgstr "expression" -#: sql_help.c:239 +#: sql_help.c:236 msgid "domain_constraint" msgstr "contrainte_domaine" -#: sql_help.c:241 sql_help.c:243 sql_help.c:246 sql_help.c:474 sql_help.c:475 -#: sql_help.c:1264 sql_help.c:1308 sql_help.c:1309 sql_help.c:1310 -#: sql_help.c:1336 sql_help.c:1348 sql_help.c:1365 sql_help.c:1776 -#: sql_help.c:1778 sql_help.c:2146 sql_help.c:2251 sql_help.c:2256 -#: sql_help.c:2794 sql_help.c:2806 sql_help.c:3802 +#: sql_help.c:238 sql_help.c:240 sql_help.c:243 sql_help.c:471 sql_help.c:472 +#: sql_help.c:1282 sql_help.c:1329 sql_help.c:1330 sql_help.c:1331 +#: sql_help.c:1357 sql_help.c:1370 sql_help.c:1387 sql_help.c:1817 +#: sql_help.c:1819 sql_help.c:2187 sql_help.c:2290 sql_help.c:2295 +#: sql_help.c:2854 sql_help.c:2866 sql_help.c:3904 msgid "constraint_name" msgstr "nom_contrainte" -#: sql_help.c:244 sql_help.c:1265 +#: sql_help.c:241 sql_help.c:1283 msgid "new_constraint_name" msgstr "nouvelle_nom_contrainte" -#: sql_help.c:317 sql_help.c:1073 +#: sql_help.c:314 sql_help.c:1075 msgid "new_version" msgstr "nouvelle_version" -#: sql_help.c:321 sql_help.c:323 +#: sql_help.c:318 sql_help.c:320 msgid "member_object" msgstr "objet_membre" -#: sql_help.c:324 +#: sql_help.c:321 msgid "where member_object is:" msgstr "où objet_membre fait partie de :" -#: sql_help.c:325 sql_help.c:330 sql_help.c:331 sql_help.c:332 sql_help.c:333 -#: sql_help.c:334 sql_help.c:335 sql_help.c:340 sql_help.c:344 sql_help.c:346 -#: sql_help.c:348 sql_help.c:357 sql_help.c:358 sql_help.c:359 sql_help.c:360 -#: sql_help.c:361 sql_help.c:362 sql_help.c:363 sql_help.c:364 sql_help.c:367 -#: sql_help.c:368 sql_help.c:1768 sql_help.c:1773 sql_help.c:1780 -#: sql_help.c:1781 sql_help.c:1782 sql_help.c:1783 sql_help.c:1784 -#: sql_help.c:1785 sql_help.c:1786 sql_help.c:1791 sql_help.c:1793 -#: sql_help.c:1797 sql_help.c:1799 sql_help.c:1803 sql_help.c:1808 -#: sql_help.c:1809 sql_help.c:1816 sql_help.c:1817 sql_help.c:1818 -#: sql_help.c:1819 sql_help.c:1820 sql_help.c:1821 sql_help.c:1822 -#: sql_help.c:1823 sql_help.c:1824 sql_help.c:1825 sql_help.c:1826 -#: sql_help.c:1831 sql_help.c:1832 sql_help.c:4142 sql_help.c:4147 -#: sql_help.c:4148 sql_help.c:4149 sql_help.c:4150 sql_help.c:4156 -#: sql_help.c:4157 sql_help.c:4162 sql_help.c:4163 sql_help.c:4168 -#: sql_help.c:4169 sql_help.c:4170 sql_help.c:4171 sql_help.c:4172 -#: sql_help.c:4173 +#: sql_help.c:322 sql_help.c:327 sql_help.c:328 sql_help.c:329 sql_help.c:330 +#: sql_help.c:331 sql_help.c:332 sql_help.c:337 sql_help.c:341 sql_help.c:343 +#: sql_help.c:345 sql_help.c:354 sql_help.c:355 sql_help.c:356 sql_help.c:357 +#: sql_help.c:358 sql_help.c:359 sql_help.c:360 sql_help.c:361 sql_help.c:364 +#: sql_help.c:365 sql_help.c:1809 sql_help.c:1814 sql_help.c:1821 +#: sql_help.c:1822 sql_help.c:1823 sql_help.c:1824 sql_help.c:1825 +#: sql_help.c:1826 sql_help.c:1827 sql_help.c:1832 sql_help.c:1834 +#: sql_help.c:1838 sql_help.c:1840 sql_help.c:1844 sql_help.c:1849 +#: sql_help.c:1850 sql_help.c:1857 sql_help.c:1858 sql_help.c:1859 +#: sql_help.c:1860 sql_help.c:1861 sql_help.c:1862 sql_help.c:1863 +#: sql_help.c:1864 sql_help.c:1865 sql_help.c:1866 sql_help.c:1867 +#: sql_help.c:1872 sql_help.c:1873 sql_help.c:4293 sql_help.c:4298 +#: sql_help.c:4299 sql_help.c:4300 sql_help.c:4301 sql_help.c:4307 +#: sql_help.c:4308 sql_help.c:4313 sql_help.c:4314 sql_help.c:4319 +#: sql_help.c:4320 sql_help.c:4321 sql_help.c:4322 sql_help.c:4323 +#: sql_help.c:4324 msgid "object_name" msgstr "nom_objet" -#: sql_help.c:326 sql_help.c:1769 sql_help.c:4145 +#: sql_help.c:323 sql_help.c:1810 sql_help.c:4296 msgid "aggregate_name" msgstr "nom_agrégat" -#: sql_help.c:328 sql_help.c:1771 sql_help.c:2055 sql_help.c:2059 -#: sql_help.c:2061 sql_help.c:3212 +#: sql_help.c:325 sql_help.c:1812 sql_help.c:2096 sql_help.c:2100 +#: sql_help.c:2102 sql_help.c:3276 msgid "source_type" msgstr "type_source" -#: sql_help.c:329 sql_help.c:1772 sql_help.c:2056 sql_help.c:2060 -#: sql_help.c:2062 sql_help.c:3213 +#: sql_help.c:326 sql_help.c:1813 sql_help.c:2097 sql_help.c:2101 +#: sql_help.c:2103 sql_help.c:3277 msgid "target_type" msgstr "type_cible" -#: sql_help.c:336 sql_help.c:774 sql_help.c:1787 sql_help.c:2057 -#: sql_help.c:2098 sql_help.c:2161 sql_help.c:2407 sql_help.c:2438 -#: sql_help.c:2976 sql_help.c:4056 sql_help.c:4151 sql_help.c:4264 -#: sql_help.c:4268 sql_help.c:4272 sql_help.c:4275 sql_help.c:4503 -#: sql_help.c:4507 sql_help.c:4511 sql_help.c:4514 sql_help.c:4721 -#: sql_help.c:4725 sql_help.c:4729 sql_help.c:4732 +#: sql_help.c:333 sql_help.c:775 sql_help.c:1828 sql_help.c:2098 +#: sql_help.c:2137 sql_help.c:2202 sql_help.c:2454 sql_help.c:2485 +#: sql_help.c:3036 sql_help.c:4198 sql_help.c:4302 sql_help.c:4417 +#: sql_help.c:4421 sql_help.c:4425 sql_help.c:4428 sql_help.c:4666 +#: sql_help.c:4670 sql_help.c:4674 sql_help.c:4677 sql_help.c:4898 +#: sql_help.c:4902 sql_help.c:4906 sql_help.c:4909 msgid "function_name" msgstr "nom_fonction" -#: sql_help.c:341 sql_help.c:767 sql_help.c:1794 sql_help.c:2431 +#: sql_help.c:338 sql_help.c:768 sql_help.c:1835 sql_help.c:2478 msgid "operator_name" msgstr "nom_opérateur" -#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1795 -#: sql_help.c:2408 sql_help.c:3330 +#: sql_help.c:339 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1836 +#: sql_help.c:2455 sql_help.c:3400 msgid "left_type" msgstr "type_argument_gauche" -#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1796 -#: sql_help.c:2409 sql_help.c:3331 +#: sql_help.c:340 sql_help.c:705 sql_help.c:709 sql_help.c:713 sql_help.c:1837 +#: sql_help.c:2456 sql_help.c:3401 msgid "right_type" msgstr "type_argument_droit" -#: sql_help.c:345 sql_help.c:347 sql_help.c:730 sql_help.c:733 sql_help.c:736 -#: sql_help.c:765 sql_help.c:777 sql_help.c:785 sql_help.c:788 sql_help.c:791 -#: sql_help.c:1354 sql_help.c:1798 sql_help.c:1800 sql_help.c:2428 -#: sql_help.c:2449 sql_help.c:2812 sql_help.c:3340 sql_help.c:3349 +#: sql_help.c:342 sql_help.c:344 sql_help.c:731 sql_help.c:734 sql_help.c:737 +#: sql_help.c:766 sql_help.c:778 sql_help.c:786 sql_help.c:789 sql_help.c:792 +#: sql_help.c:1376 sql_help.c:1839 sql_help.c:1841 sql_help.c:2475 +#: sql_help.c:2496 sql_help.c:2872 sql_help.c:3410 sql_help.c:3419 msgid "index_method" msgstr "méthode_indexage" -#: sql_help.c:349 sql_help.c:1804 sql_help.c:4158 +#: sql_help.c:346 sql_help.c:1845 sql_help.c:4309 msgid "procedure_name" msgstr "nom_procédure" -#: sql_help.c:353 sql_help.c:1810 sql_help.c:3723 sql_help.c:4164 +#: sql_help.c:350 sql_help.c:1851 sql_help.c:3818 sql_help.c:4315 msgid "routine_name" msgstr "nom_routine" -#: sql_help.c:365 sql_help.c:1326 sql_help.c:1827 sql_help.c:2291 -#: sql_help.c:2488 sql_help.c:2767 sql_help.c:2943 sql_help.c:3511 -#: sql_help.c:3737 sql_help.c:4070 +#: sql_help.c:362 sql_help.c:1347 sql_help.c:1868 sql_help.c:2331 +#: sql_help.c:2536 sql_help.c:2827 sql_help.c:3003 sql_help.c:3581 +#: sql_help.c:3837 sql_help.c:4217 msgid "type_name" msgstr "nom_type" -#: sql_help.c:366 sql_help.c:1828 sql_help.c:2290 sql_help.c:2487 -#: sql_help.c:2944 sql_help.c:3170 sql_help.c:3512 sql_help.c:3729 -#: sql_help.c:4062 +#: sql_help.c:363 sql_help.c:1869 sql_help.c:2330 sql_help.c:2535 +#: sql_help.c:3004 sql_help.c:3234 sql_help.c:3582 sql_help.c:3825 +#: sql_help.c:4205 msgid "lang_name" msgstr "nom_langage" -#: sql_help.c:369 +#: sql_help.c:366 msgid "and aggregate_signature is:" msgstr "et signature_agrégat est :" -#: sql_help.c:392 sql_help.c:1922 sql_help.c:2188 +#: sql_help.c:389 sql_help.c:1963 sql_help.c:2227 msgid "handler_function" msgstr "fonction_gestionnaire" -#: sql_help.c:393 sql_help.c:2189 +#: sql_help.c:390 sql_help.c:2228 msgid "validator_function" msgstr "fonction_validateur" -#: sql_help.c:441 sql_help.c:519 sql_help.c:659 sql_help.c:841 sql_help.c:979 -#: sql_help.c:1259 sql_help.c:1514 +#: sql_help.c:438 sql_help.c:516 sql_help.c:660 sql_help.c:842 sql_help.c:981 +#: sql_help.c:1277 sql_help.c:1546 msgid "action" msgstr "action" -#: sql_help.c:443 sql_help.c:450 sql_help.c:454 sql_help.c:455 sql_help.c:458 -#: sql_help.c:460 sql_help.c:461 sql_help.c:462 sql_help.c:464 sql_help.c:467 -#: sql_help.c:469 sql_help.c:470 sql_help.c:663 sql_help.c:673 sql_help.c:675 -#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1261 -#: sql_help.c:1279 sql_help.c:1283 sql_help.c:1284 sql_help.c:1288 -#: sql_help.c:1290 sql_help.c:1291 sql_help.c:1292 sql_help.c:1294 -#: sql_help.c:1297 sql_help.c:1298 sql_help.c:1300 sql_help.c:1303 -#: sql_help.c:1305 sql_help.c:1350 sql_help.c:1352 sql_help.c:1359 -#: sql_help.c:1368 sql_help.c:1373 sql_help.c:1620 sql_help.c:1623 -#: sql_help.c:1660 sql_help.c:1775 sql_help.c:1888 sql_help.c:1894 -#: sql_help.c:1907 sql_help.c:1908 sql_help.c:1909 sql_help.c:2230 -#: sql_help.c:2243 sql_help.c:2288 sql_help.c:2350 sql_help.c:2354 -#: sql_help.c:2387 sql_help.c:2614 sql_help.c:2642 sql_help.c:2643 -#: sql_help.c:2750 sql_help.c:2758 sql_help.c:2768 sql_help.c:2771 -#: sql_help.c:2781 sql_help.c:2785 sql_help.c:2808 sql_help.c:2810 -#: sql_help.c:2817 sql_help.c:2830 sql_help.c:2835 sql_help.c:2853 -#: sql_help.c:2979 sql_help.c:3115 sql_help.c:3708 sql_help.c:3709 -#: sql_help.c:3789 sql_help.c:3804 sql_help.c:3806 sql_help.c:3808 -#: sql_help.c:4041 sql_help.c:4042 sql_help.c:4144 sql_help.c:4295 -#: sql_help.c:4534 sql_help.c:4576 sql_help.c:4578 sql_help.c:4580 -#: sql_help.c:4624 sql_help.c:4752 +#: sql_help.c:440 sql_help.c:447 sql_help.c:451 sql_help.c:452 sql_help.c:455 +#: sql_help.c:457 sql_help.c:458 sql_help.c:459 sql_help.c:461 sql_help.c:464 +#: sql_help.c:466 sql_help.c:467 sql_help.c:664 sql_help.c:674 sql_help.c:676 +#: sql_help.c:679 sql_help.c:681 sql_help.c:1057 sql_help.c:1279 +#: sql_help.c:1297 sql_help.c:1301 sql_help.c:1302 sql_help.c:1306 +#: sql_help.c:1308 sql_help.c:1309 sql_help.c:1310 sql_help.c:1311 +#: sql_help.c:1313 sql_help.c:1316 sql_help.c:1317 sql_help.c:1319 +#: sql_help.c:1322 sql_help.c:1324 sql_help.c:1325 sql_help.c:1372 +#: sql_help.c:1374 sql_help.c:1381 sql_help.c:1390 sql_help.c:1395 +#: sql_help.c:1648 sql_help.c:1651 sql_help.c:1655 sql_help.c:1691 +#: sql_help.c:1816 sql_help.c:1929 sql_help.c:1935 sql_help.c:1948 +#: sql_help.c:1949 sql_help.c:1950 sql_help.c:2269 sql_help.c:2282 +#: sql_help.c:2328 sql_help.c:2395 sql_help.c:2401 sql_help.c:2434 +#: sql_help.c:2664 sql_help.c:2699 sql_help.c:2701 sql_help.c:2809 +#: sql_help.c:2818 sql_help.c:2828 sql_help.c:2831 sql_help.c:2841 +#: sql_help.c:2845 sql_help.c:2868 sql_help.c:2870 sql_help.c:2877 +#: sql_help.c:2890 sql_help.c:2895 sql_help.c:2913 sql_help.c:3039 +#: sql_help.c:3179 sql_help.c:3797 sql_help.c:3798 sql_help.c:3891 +#: sql_help.c:3906 sql_help.c:3908 sql_help.c:3910 sql_help.c:4177 +#: sql_help.c:4178 sql_help.c:4295 sql_help.c:4449 sql_help.c:4455 +#: sql_help.c:4457 sql_help.c:4698 sql_help.c:4704 sql_help.c:4706 +#: sql_help.c:4747 sql_help.c:4749 sql_help.c:4751 sql_help.c:4799 +#: sql_help.c:4930 sql_help.c:4936 sql_help.c:4938 msgid "column_name" msgstr "nom_colonne" -#: sql_help.c:444 sql_help.c:664 sql_help.c:1262 +#: sql_help.c:441 sql_help.c:665 sql_help.c:1280 sql_help.c:1656 msgid "new_column_name" msgstr "nouvelle_nom_colonne" -#: sql_help.c:449 sql_help.c:540 sql_help.c:672 sql_help.c:862 sql_help.c:1000 -#: sql_help.c:1278 sql_help.c:1530 +#: sql_help.c:446 sql_help.c:537 sql_help.c:673 sql_help.c:863 sql_help.c:1002 +#: sql_help.c:1296 sql_help.c:1556 msgid "where action is one of:" msgstr "où action fait partie de :" -#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1280 -#: sql_help.c:1285 sql_help.c:1532 sql_help.c:1536 sql_help.c:2141 -#: sql_help.c:2231 sql_help.c:2427 sql_help.c:2607 sql_help.c:2751 -#: sql_help.c:3024 sql_help.c:3891 +#: sql_help.c:448 sql_help.c:453 sql_help.c:1049 sql_help.c:1298 +#: sql_help.c:1303 sql_help.c:1558 sql_help.c:1562 sql_help.c:2182 +#: sql_help.c:2270 sql_help.c:2474 sql_help.c:2657 sql_help.c:2810 +#: sql_help.c:3086 sql_help.c:3993 msgid "data_type" msgstr "type_données" -#: sql_help.c:452 sql_help.c:457 sql_help.c:1281 sql_help.c:1286 -#: sql_help.c:1533 sql_help.c:1537 sql_help.c:2142 sql_help.c:2234 -#: sql_help.c:2352 sql_help.c:2752 sql_help.c:2760 sql_help.c:2773 -#: sql_help.c:2787 sql_help.c:3025 sql_help.c:3031 sql_help.c:3799 +#: sql_help.c:449 sql_help.c:454 sql_help.c:1299 sql_help.c:1304 +#: sql_help.c:1559 sql_help.c:1563 sql_help.c:2183 sql_help.c:2273 +#: sql_help.c:2397 sql_help.c:2811 sql_help.c:2820 sql_help.c:2833 +#: sql_help.c:2847 sql_help.c:3087 sql_help.c:3093 sql_help.c:3901 msgid "collation" msgstr "collationnement" -#: sql_help.c:453 sql_help.c:1282 sql_help.c:2235 sql_help.c:2244 -#: sql_help.c:2753 sql_help.c:2769 sql_help.c:2782 +#: sql_help.c:450 sql_help.c:1300 sql_help.c:2274 sql_help.c:2283 +#: sql_help.c:2813 sql_help.c:2829 sql_help.c:2842 msgid "column_constraint" msgstr "contrainte_colonne" -#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1299 +#: sql_help.c:460 sql_help.c:604 sql_help.c:675 sql_help.c:1318 sql_help.c:4796 msgid "integer" msgstr "entier" -#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1301 -#: sql_help.c:1304 +#: sql_help.c:462 sql_help.c:465 sql_help.c:677 sql_help.c:680 sql_help.c:1320 +#: sql_help.c:1323 msgid "attribute_option" msgstr "option_attribut" -#: sql_help.c:473 sql_help.c:1306 sql_help.c:2236 sql_help.c:2245 -#: sql_help.c:2754 sql_help.c:2770 sql_help.c:2783 +#: sql_help.c:470 sql_help.c:1327 sql_help.c:2275 sql_help.c:2284 +#: sql_help.c:2814 sql_help.c:2830 sql_help.c:2843 msgid "table_constraint" msgstr "contrainte_table" -#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1311 -#: sql_help.c:1312 sql_help.c:1313 sql_help.c:1314 sql_help.c:1829 +#: sql_help.c:473 sql_help.c:474 sql_help.c:475 sql_help.c:476 sql_help.c:1332 +#: sql_help.c:1333 sql_help.c:1334 sql_help.c:1335 sql_help.c:1870 msgid "trigger_name" msgstr "nom_trigger" -#: sql_help.c:480 sql_help.c:481 sql_help.c:1324 sql_help.c:1325 -#: sql_help.c:2237 sql_help.c:2242 sql_help.c:2757 sql_help.c:2780 +#: sql_help.c:477 sql_help.c:478 sql_help.c:1345 sql_help.c:1346 +#: sql_help.c:2276 sql_help.c:2281 sql_help.c:2817 sql_help.c:2840 msgid "parent_table" msgstr "table_parent" -#: sql_help.c:539 sql_help.c:595 sql_help.c:661 sql_help.c:861 sql_help.c:999 -#: sql_help.c:1493 sql_help.c:2173 +#: sql_help.c:536 sql_help.c:594 sql_help.c:662 sql_help.c:862 sql_help.c:1001 +#: sql_help.c:1515 sql_help.c:2213 msgid "extension_name" msgstr "nom_extension" -#: sql_help.c:541 sql_help.c:1001 sql_help.c:2292 +#: sql_help.c:538 sql_help.c:1003 sql_help.c:2332 msgid "execution_cost" msgstr "coût_exécution" -#: sql_help.c:542 sql_help.c:1002 sql_help.c:2293 +#: sql_help.c:539 sql_help.c:1004 sql_help.c:2333 msgid "result_rows" msgstr "lignes_de_résultat" -#: sql_help.c:543 sql_help.c:2294 +#: sql_help.c:540 sql_help.c:2334 msgid "support_function" msgstr "fonction_support" -#: sql_help.c:564 sql_help.c:566 sql_help.c:925 sql_help.c:933 sql_help.c:937 -#: sql_help.c:940 sql_help.c:943 sql_help.c:1571 sql_help.c:1579 -#: sql_help.c:1583 sql_help.c:1586 sql_help.c:1589 sql_help.c:2585 -#: sql_help.c:2587 sql_help.c:2590 sql_help.c:2591 sql_help.c:3707 -#: sql_help.c:3711 sql_help.c:3714 sql_help.c:3716 sql_help.c:3718 -#: sql_help.c:3720 sql_help.c:3722 sql_help.c:3728 sql_help.c:3730 -#: sql_help.c:3732 sql_help.c:3734 sql_help.c:3736 sql_help.c:3738 +#: sql_help.c:562 sql_help.c:564 sql_help.c:927 sql_help.c:935 sql_help.c:939 +#: sql_help.c:942 sql_help.c:945 sql_help.c:1598 sql_help.c:1606 +#: sql_help.c:1610 sql_help.c:1613 sql_help.c:1616 sql_help.c:2635 +#: sql_help.c:2637 sql_help.c:2640 sql_help.c:2641 sql_help.c:3795 +#: sql_help.c:3796 sql_help.c:3800 sql_help.c:3801 sql_help.c:3804 +#: sql_help.c:3805 sql_help.c:3807 sql_help.c:3808 sql_help.c:3810 +#: sql_help.c:3811 sql_help.c:3813 sql_help.c:3814 sql_help.c:3816 +#: sql_help.c:3817 sql_help.c:3823 sql_help.c:3824 sql_help.c:3826 +#: sql_help.c:3827 sql_help.c:3829 sql_help.c:3830 sql_help.c:3832 +#: sql_help.c:3833 sql_help.c:3835 sql_help.c:3836 sql_help.c:3838 +#: sql_help.c:3839 sql_help.c:3841 sql_help.c:3842 sql_help.c:4175 +#: sql_help.c:4176 sql_help.c:4180 sql_help.c:4181 sql_help.c:4184 +#: sql_help.c:4185 sql_help.c:4187 sql_help.c:4188 sql_help.c:4190 +#: sql_help.c:4191 sql_help.c:4193 sql_help.c:4194 sql_help.c:4196 +#: sql_help.c:4197 sql_help.c:4203 sql_help.c:4204 sql_help.c:4206 +#: sql_help.c:4207 sql_help.c:4209 sql_help.c:4210 sql_help.c:4212 +#: sql_help.c:4213 sql_help.c:4215 sql_help.c:4216 sql_help.c:4218 +#: sql_help.c:4219 sql_help.c:4221 sql_help.c:4222 msgid "role_specification" msgstr "specification_role" -#: sql_help.c:565 sql_help.c:567 sql_help.c:1602 sql_help.c:2116 -#: sql_help.c:2593 sql_help.c:3100 sql_help.c:3545 sql_help.c:4380 +#: sql_help.c:563 sql_help.c:565 sql_help.c:1629 sql_help.c:2156 +#: sql_help.c:2643 sql_help.c:3164 sql_help.c:3615 sql_help.c:4541 msgid "user_name" msgstr "nom_utilisateur" -#: sql_help.c:568 sql_help.c:945 sql_help.c:1591 sql_help.c:2592 -#: sql_help.c:3739 +#: sql_help.c:566 sql_help.c:947 sql_help.c:1618 sql_help.c:2642 +#: sql_help.c:3843 sql_help.c:4223 msgid "where role_specification can be:" msgstr "où specification_role peut être :" -#: sql_help.c:570 +#: sql_help.c:568 msgid "group_name" msgstr "nom_groupe" -#: sql_help.c:591 sql_help.c:1371 sql_help.c:2121 sql_help.c:2357 -#: sql_help.c:2391 sql_help.c:2765 sql_help.c:2778 sql_help.c:2792 -#: sql_help.c:2833 sql_help.c:2857 sql_help.c:2869 sql_help.c:3735 -#: sql_help.c:4068 +#: sql_help.c:590 sql_help.c:1393 sql_help.c:2162 sql_help.c:2404 +#: sql_help.c:2438 sql_help.c:2825 sql_help.c:2838 sql_help.c:2852 +#: sql_help.c:2893 sql_help.c:2917 sql_help.c:2929 sql_help.c:3834 +#: sql_help.c:4214 msgid "tablespace_name" msgstr "nom_tablespace" -#: sql_help.c:593 sql_help.c:681 sql_help.c:1319 sql_help.c:1328 -#: sql_help.c:1366 sql_help.c:1709 +#: sql_help.c:592 sql_help.c:682 sql_help.c:1340 sql_help.c:1349 +#: sql_help.c:1388 sql_help.c:1745 sql_help.c:1748 msgid "index_name" msgstr "nom_index" -#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1321 -#: sql_help.c:1323 sql_help.c:1369 sql_help.c:2355 sql_help.c:2389 -#: sql_help.c:2763 sql_help.c:2776 sql_help.c:2790 sql_help.c:2831 -#: sql_help.c:2855 +#: sql_help.c:596 +msgid "collation_name" +msgstr "nom_collation" + +#: sql_help.c:598 sql_help.c:601 sql_help.c:683 sql_help.c:685 sql_help.c:1342 +#: sql_help.c:1344 sql_help.c:1391 sql_help.c:2402 sql_help.c:2436 +#: sql_help.c:2823 sql_help.c:2836 sql_help.c:2850 sql_help.c:2891 +#: sql_help.c:2915 msgid "storage_parameter" msgstr "paramètre_stockage" -#: sql_help.c:602 +#: sql_help.c:603 msgid "column_number" msgstr "numéro_colonne" -#: sql_help.c:626 sql_help.c:1792 sql_help.c:4155 +#: sql_help.c:627 sql_help.c:1833 sql_help.c:4306 msgid "large_object_oid" msgstr "oid_large_object" -#: sql_help.c:713 sql_help.c:2412 +#: sql_help.c:714 sql_help.c:2459 msgid "res_proc" msgstr "res_proc" -#: sql_help.c:714 sql_help.c:2413 +#: sql_help.c:715 sql_help.c:2460 msgid "join_proc" msgstr "join_proc" -#: sql_help.c:766 sql_help.c:778 sql_help.c:2430 +#: sql_help.c:767 sql_help.c:779 sql_help.c:2477 msgid "strategy_number" msgstr "numéro_de_stratégie" -#: sql_help.c:768 sql_help.c:769 sql_help.c:772 sql_help.c:773 sql_help.c:779 -#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2432 sql_help.c:2433 -#: sql_help.c:2436 sql_help.c:2437 +#: sql_help.c:769 sql_help.c:770 sql_help.c:773 sql_help.c:774 sql_help.c:780 +#: sql_help.c:781 sql_help.c:783 sql_help.c:784 sql_help.c:2479 sql_help.c:2480 +#: sql_help.c:2483 sql_help.c:2484 msgid "op_type" msgstr "type_op" -#: sql_help.c:770 sql_help.c:2434 +#: sql_help.c:771 sql_help.c:2481 msgid "sort_family_name" msgstr "nom_famille_tri" -#: sql_help.c:771 sql_help.c:781 sql_help.c:2435 +#: sql_help.c:772 sql_help.c:782 sql_help.c:2482 msgid "support_number" msgstr "numéro_de_support" -#: sql_help.c:775 sql_help.c:2058 sql_help.c:2439 sql_help.c:2946 -#: sql_help.c:2948 +#: sql_help.c:776 sql_help.c:2099 sql_help.c:2486 sql_help.c:3006 +#: sql_help.c:3008 msgid "argument_type" msgstr "type_argument" -#: sql_help.c:806 sql_help.c:809 sql_help.c:880 sql_help.c:882 sql_help.c:884 -#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1489 sql_help.c:1492 -#: sql_help.c:1659 sql_help.c:1708 sql_help.c:1777 sql_help.c:1802 -#: sql_help.c:1815 sql_help.c:1830 sql_help.c:1887 sql_help.c:1893 -#: sql_help.c:2229 sql_help.c:2241 sql_help.c:2348 sql_help.c:2386 -#: sql_help.c:2463 sql_help.c:2506 sql_help.c:2562 sql_help.c:2613 -#: sql_help.c:2644 sql_help.c:2749 sql_help.c:2766 sql_help.c:2779 -#: sql_help.c:2852 sql_help.c:2972 sql_help.c:3149 sql_help.c:3366 -#: sql_help.c:3415 sql_help.c:3521 sql_help.c:3705 sql_help.c:3710 -#: sql_help.c:3755 sql_help.c:3787 sql_help.c:4038 sql_help.c:4043 -#: sql_help.c:4143 sql_help.c:4250 sql_help.c:4252 sql_help.c:4301 -#: sql_help.c:4340 sql_help.c:4489 sql_help.c:4491 sql_help.c:4540 -#: sql_help.c:4574 sql_help.c:4623 sql_help.c:4707 sql_help.c:4709 -#: sql_help.c:4758 +#: sql_help.c:807 sql_help.c:810 sql_help.c:881 sql_help.c:883 sql_help.c:885 +#: sql_help.c:1017 sql_help.c:1056 sql_help.c:1511 sql_help.c:1514 +#: sql_help.c:1690 sql_help.c:1744 sql_help.c:1747 sql_help.c:1818 +#: sql_help.c:1843 sql_help.c:1856 sql_help.c:1871 sql_help.c:1928 +#: sql_help.c:1934 sql_help.c:2268 sql_help.c:2280 sql_help.c:2393 +#: sql_help.c:2433 sql_help.c:2510 sql_help.c:2555 sql_help.c:2611 +#: sql_help.c:2663 sql_help.c:2696 sql_help.c:2703 sql_help.c:2808 +#: sql_help.c:2826 sql_help.c:2839 sql_help.c:2912 sql_help.c:3032 +#: sql_help.c:3213 sql_help.c:3436 sql_help.c:3485 sql_help.c:3591 +#: sql_help.c:3793 sql_help.c:3799 sql_help.c:3857 sql_help.c:3889 +#: sql_help.c:4173 sql_help.c:4179 sql_help.c:4294 sql_help.c:4403 +#: sql_help.c:4405 sql_help.c:4462 sql_help.c:4501 sql_help.c:4652 +#: sql_help.c:4654 sql_help.c:4711 sql_help.c:4745 sql_help.c:4798 +#: sql_help.c:4884 sql_help.c:4886 sql_help.c:4943 msgid "table_name" msgstr "nom_table" -#: sql_help.c:811 sql_help.c:2465 +#: sql_help.c:812 sql_help.c:2512 msgid "using_expression" msgstr "expression_using" -#: sql_help.c:812 sql_help.c:2466 +#: sql_help.c:813 sql_help.c:2513 msgid "check_expression" msgstr "expression_check" -#: sql_help.c:886 sql_help.c:2507 +#: sql_help.c:887 sql_help.c:2556 msgid "publication_parameter" msgstr "paramètre_publication" -#: sql_help.c:929 sql_help.c:1575 sql_help.c:2327 sql_help.c:2539 -#: sql_help.c:3083 +#: sql_help.c:931 sql_help.c:1602 sql_help.c:2372 sql_help.c:2588 +#: sql_help.c:3147 msgid "password" msgstr "mot_de_passe" -#: sql_help.c:930 sql_help.c:1576 sql_help.c:2328 sql_help.c:2540 -#: sql_help.c:3084 +#: sql_help.c:932 sql_help.c:1603 sql_help.c:2373 sql_help.c:2589 +#: sql_help.c:3148 msgid "timestamp" msgstr "horodatage" -#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1580 -#: sql_help.c:1584 sql_help.c:1587 sql_help.c:1590 sql_help.c:3715 -#: sql_help.c:4048 +#: sql_help.c:936 sql_help.c:940 sql_help.c:943 sql_help.c:946 sql_help.c:1607 +#: sql_help.c:1611 sql_help.c:1614 sql_help.c:1617 sql_help.c:3806 +#: sql_help.c:4186 msgid "database_name" msgstr "nom_base_de_donnée" -#: sql_help.c:1048 sql_help.c:2608 +#: sql_help.c:1050 sql_help.c:2658 msgid "increment" msgstr "incrément" -#: sql_help.c:1049 sql_help.c:2609 +#: sql_help.c:1051 sql_help.c:2659 msgid "minvalue" msgstr "valeur_min" -#: sql_help.c:1050 sql_help.c:2610 +#: sql_help.c:1052 sql_help.c:2660 msgid "maxvalue" msgstr "valeur_max" -#: sql_help.c:1051 sql_help.c:2611 sql_help.c:4248 sql_help.c:4338 -#: sql_help.c:4487 sql_help.c:4640 sql_help.c:4705 +#: sql_help.c:1053 sql_help.c:2661 sql_help.c:4401 sql_help.c:4499 +#: sql_help.c:4650 sql_help.c:4815 sql_help.c:4882 msgid "start" msgstr "début" -#: sql_help.c:1052 sql_help.c:1296 +#: sql_help.c:1054 sql_help.c:1315 msgid "restart" msgstr "nouveau_début" -#: sql_help.c:1053 sql_help.c:2612 +#: sql_help.c:1055 sql_help.c:2662 msgid "cache" msgstr "cache" -#: sql_help.c:1110 sql_help.c:2656 +#: sql_help.c:1099 +msgid "new_target" +msgstr "nouvelle_cible" + +#: sql_help.c:1117 sql_help.c:2715 msgid "conninfo" msgstr "conninfo" -#: sql_help.c:1112 sql_help.c:2657 +#: sql_help.c:1119 sql_help.c:1123 sql_help.c:1127 sql_help.c:2716 msgid "publication_name" msgstr "nom_publication" -#: sql_help.c:1113 +#: sql_help.c:1120 sql_help.c:1124 sql_help.c:1128 msgid "set_publication_option" msgstr "option_ensemble_publication" -#: sql_help.c:1116 +#: sql_help.c:1131 msgid "refresh_option" msgstr "option_rafraichissement" -#: sql_help.c:1121 sql_help.c:2658 +#: sql_help.c:1136 sql_help.c:2717 msgid "subscription_parameter" msgstr "paramètre_souscription" -#: sql_help.c:1274 sql_help.c:1277 +#: sql_help.c:1292 sql_help.c:1295 msgid "partition_name" msgstr "nom_partition" -#: sql_help.c:1275 sql_help.c:2246 sql_help.c:2784 +#: sql_help.c:1293 sql_help.c:2285 sql_help.c:2844 msgid "partition_bound_spec" msgstr "spec_limite_partition" -#: sql_help.c:1293 sql_help.c:1340 sql_help.c:2798 +#: sql_help.c:1312 sql_help.c:1361 sql_help.c:2858 msgid "sequence_options" msgstr "options_séquence" -#: sql_help.c:1295 +#: sql_help.c:1314 msgid "sequence_option" msgstr "option_séquence" -#: sql_help.c:1307 +#: sql_help.c:1326 sql_help.c:1364 sql_help.c:2812 +msgid "compression_method" +msgstr "méthode_compression" + +#: sql_help.c:1328 msgid "table_constraint_using_index" msgstr "contrainte_table_utilisant_index" -#: sql_help.c:1315 sql_help.c:1316 sql_help.c:1317 sql_help.c:1318 +#: sql_help.c:1336 sql_help.c:1337 sql_help.c:1338 sql_help.c:1339 msgid "rewrite_rule_name" msgstr "nom_règle_réécriture" -#: sql_help.c:1329 sql_help.c:2823 +#: sql_help.c:1350 sql_help.c:2883 msgid "and partition_bound_spec is:" msgstr "et partition_bound_spec est :" -#: sql_help.c:1330 sql_help.c:1331 sql_help.c:1332 sql_help.c:2824 -#: sql_help.c:2825 sql_help.c:2826 +#: sql_help.c:1351 sql_help.c:1352 sql_help.c:1353 sql_help.c:2884 +#: sql_help.c:2885 sql_help.c:2886 msgid "partition_bound_expr" msgstr "expr_limite_partition" -#: sql_help.c:1333 sql_help.c:1334 sql_help.c:2827 sql_help.c:2828 +#: sql_help.c:1354 sql_help.c:1355 sql_help.c:2887 sql_help.c:2888 msgid "numeric_literal" msgstr "numeric_literal" -#: sql_help.c:1335 +#: sql_help.c:1356 msgid "and column_constraint is:" msgstr "et contrainte_colonne est :" -#: sql_help.c:1338 sql_help.c:2253 sql_help.c:2286 sql_help.c:2486 -#: sql_help.c:2796 +#: sql_help.c:1359 sql_help.c:2292 sql_help.c:2326 sql_help.c:2534 +#: sql_help.c:2856 msgid "default_expr" msgstr "expression_par_défaut" -#: sql_help.c:1339 sql_help.c:2254 sql_help.c:2797 +#: sql_help.c:1360 sql_help.c:2293 sql_help.c:2857 msgid "generation_expr" msgstr "expression_génération" -#: sql_help.c:1341 sql_help.c:1342 sql_help.c:1351 sql_help.c:1353 -#: sql_help.c:1357 sql_help.c:2799 sql_help.c:2800 sql_help.c:2809 -#: sql_help.c:2811 sql_help.c:2815 +#: sql_help.c:1362 sql_help.c:1363 sql_help.c:1373 sql_help.c:1375 +#: sql_help.c:1379 sql_help.c:2859 sql_help.c:2860 sql_help.c:2869 +#: sql_help.c:2871 sql_help.c:2875 msgid "index_parameters" msgstr "paramètres_index" -#: sql_help.c:1343 sql_help.c:1360 sql_help.c:2801 sql_help.c:2818 +#: sql_help.c:1365 sql_help.c:1382 sql_help.c:2861 sql_help.c:2878 msgid "reftable" msgstr "table_référence" -#: sql_help.c:1344 sql_help.c:1361 sql_help.c:2802 sql_help.c:2819 +#: sql_help.c:1366 sql_help.c:1383 sql_help.c:2862 sql_help.c:2879 msgid "refcolumn" msgstr "colonne_référence" -#: sql_help.c:1345 sql_help.c:1346 sql_help.c:1362 sql_help.c:1363 -#: sql_help.c:2803 sql_help.c:2804 sql_help.c:2820 sql_help.c:2821 +#: sql_help.c:1367 sql_help.c:1368 sql_help.c:1384 sql_help.c:1385 +#: sql_help.c:2863 sql_help.c:2864 sql_help.c:2880 sql_help.c:2881 msgid "referential_action" msgstr "action" -#: sql_help.c:1347 sql_help.c:2255 sql_help.c:2805 +#: sql_help.c:1369 sql_help.c:2294 sql_help.c:2865 msgid "and table_constraint is:" msgstr "et contrainte_table est :" -#: sql_help.c:1355 sql_help.c:2813 +#: sql_help.c:1377 sql_help.c:2873 msgid "exclude_element" msgstr "élément_exclusion" -#: sql_help.c:1356 sql_help.c:2814 sql_help.c:4246 sql_help.c:4336 -#: sql_help.c:4485 sql_help.c:4638 sql_help.c:4703 +#: sql_help.c:1378 sql_help.c:2874 sql_help.c:4399 sql_help.c:4497 +#: sql_help.c:4648 sql_help.c:4813 sql_help.c:4880 msgid "operator" msgstr "opérateur" -#: sql_help.c:1358 sql_help.c:2358 sql_help.c:2816 +#: sql_help.c:1380 sql_help.c:2405 sql_help.c:2876 msgid "predicate" msgstr "prédicat" -#: sql_help.c:1364 +#: sql_help.c:1386 msgid "and table_constraint_using_index is:" msgstr "et contrainte_table_utilisant_index est :" -#: sql_help.c:1367 sql_help.c:2829 +#: sql_help.c:1389 sql_help.c:2889 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "dans les contraintes UNIQUE, PRIMARY KEY et EXCLUDE, les paramètres_index sont :" -#: sql_help.c:1372 sql_help.c:2834 +#: sql_help.c:1394 sql_help.c:2894 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "élément_exclusion dans une contrainte EXCLUDE est :" -#: sql_help.c:1375 sql_help.c:2353 sql_help.c:2761 sql_help.c:2774 -#: sql_help.c:2788 sql_help.c:2837 sql_help.c:3800 +#: sql_help.c:1397 sql_help.c:2398 sql_help.c:2821 sql_help.c:2834 +#: sql_help.c:2848 sql_help.c:2897 sql_help.c:3902 msgid "opclass" msgstr "classe_d_opérateur" -#: sql_help.c:1391 sql_help.c:1394 sql_help.c:2872 +#: sql_help.c:1413 sql_help.c:1416 sql_help.c:2932 msgid "tablespace_option" msgstr "option_tablespace" -#: sql_help.c:1415 sql_help.c:1418 sql_help.c:1424 sql_help.c:1428 +#: sql_help.c:1437 sql_help.c:1440 sql_help.c:1446 sql_help.c:1450 msgid "token_type" msgstr "type_jeton" -#: sql_help.c:1416 sql_help.c:1419 +#: sql_help.c:1438 sql_help.c:1441 msgid "dictionary_name" msgstr "nom_dictionnaire" -#: sql_help.c:1421 sql_help.c:1425 +#: sql_help.c:1443 sql_help.c:1447 msgid "old_dictionary" msgstr "ancien_dictionnaire" -#: sql_help.c:1422 sql_help.c:1426 +#: sql_help.c:1444 sql_help.c:1448 msgid "new_dictionary" msgstr "nouveau_dictionnaire" -#: sql_help.c:1518 sql_help.c:1531 sql_help.c:1534 sql_help.c:1535 -#: sql_help.c:3023 +#: sql_help.c:1543 sql_help.c:1557 sql_help.c:1560 sql_help.c:1561 +#: sql_help.c:3085 msgid "attribute_name" msgstr "nom_attribut" -#: sql_help.c:1519 +#: sql_help.c:1544 msgid "new_attribute_name" msgstr "nouveau_nom_attribut" -#: sql_help.c:1525 sql_help.c:1529 +#: sql_help.c:1548 sql_help.c:1552 msgid "new_enum_value" msgstr "nouvelle_valeur_enum" -#: sql_help.c:1526 +#: sql_help.c:1549 msgid "neighbor_enum_value" msgstr "valeur_enum_voisine" -#: sql_help.c:1528 +#: sql_help.c:1551 msgid "existing_enum_value" msgstr "valeur_enum_existante" -#: sql_help.c:1603 sql_help.c:2238 sql_help.c:2247 sql_help.c:2624 -#: sql_help.c:3101 sql_help.c:3546 sql_help.c:3721 sql_help.c:3756 -#: sql_help.c:4054 +#: sql_help.c:1554 +msgid "property" +msgstr "propriété" + +#: sql_help.c:1630 sql_help.c:2277 sql_help.c:2286 sql_help.c:2674 +#: sql_help.c:3165 sql_help.c:3616 sql_help.c:3815 sql_help.c:3858 +#: sql_help.c:4195 msgid "server_name" msgstr "nom_serveur" -#: sql_help.c:1631 sql_help.c:1634 sql_help.c:3116 +#: sql_help.c:1662 sql_help.c:1665 sql_help.c:3180 msgid "view_option_name" msgstr "nom_option_vue" -#: sql_help.c:1632 sql_help.c:3117 +#: sql_help.c:1663 sql_help.c:3181 msgid "view_option_value" msgstr "valeur_option_vue" -#: sql_help.c:1653 sql_help.c:1654 sql_help.c:4611 sql_help.c:4612 +#: sql_help.c:1684 sql_help.c:1685 sql_help.c:4784 sql_help.c:4785 msgid "table_and_columns" msgstr "table_et_colonnes" -#: sql_help.c:1655 sql_help.c:1899 sql_help.c:3593 sql_help.c:4613 +#: sql_help.c:1686 sql_help.c:1749 sql_help.c:1940 sql_help.c:3664 +#: sql_help.c:4037 sql_help.c:4786 msgid "where option can be one of:" msgstr "où option fait partie de :" -#: sql_help.c:1656 sql_help.c:1657 sql_help.c:1901 sql_help.c:1904 -#: sql_help.c:2083 sql_help.c:3594 sql_help.c:3595 sql_help.c:3596 -#: sql_help.c:3597 sql_help.c:3598 sql_help.c:3599 sql_help.c:3600 -#: sql_help.c:4614 sql_help.c:4615 sql_help.c:4616 sql_help.c:4617 -#: sql_help.c:4618 sql_help.c:4619 sql_help.c:4620 sql_help.c:4621 +#: sql_help.c:1687 sql_help.c:1688 sql_help.c:1750 sql_help.c:1942 +#: sql_help.c:1945 sql_help.c:2123 sql_help.c:3665 sql_help.c:3666 +#: sql_help.c:3667 sql_help.c:3668 sql_help.c:3669 sql_help.c:3670 +#: sql_help.c:3671 sql_help.c:3672 sql_help.c:4038 sql_help.c:4040 +#: sql_help.c:4787 sql_help.c:4788 sql_help.c:4789 sql_help.c:4790 +#: sql_help.c:4791 sql_help.c:4792 sql_help.c:4793 sql_help.c:4794 +#: sql_help.c:4795 msgid "boolean" msgstr "boolean" -#: sql_help.c:1658 sql_help.c:4622 +#: sql_help.c:1689 sql_help.c:4797 msgid "and table_and_columns is:" msgstr "et table_et_colonnes est :" -#: sql_help.c:1674 sql_help.c:4396 sql_help.c:4398 sql_help.c:4422 +#: sql_help.c:1705 sql_help.c:4557 sql_help.c:4559 sql_help.c:4583 msgid "transaction_mode" msgstr "mode_transaction" -#: sql_help.c:1675 sql_help.c:4399 sql_help.c:4423 +#: sql_help.c:1706 sql_help.c:4560 sql_help.c:4584 msgid "where transaction_mode is one of:" msgstr "où mode_transaction fait partie de :" -#: sql_help.c:1684 sql_help.c:4256 sql_help.c:4265 sql_help.c:4269 -#: sql_help.c:4273 sql_help.c:4276 sql_help.c:4495 sql_help.c:4504 -#: sql_help.c:4508 sql_help.c:4512 sql_help.c:4515 sql_help.c:4713 -#: sql_help.c:4722 sql_help.c:4726 sql_help.c:4730 sql_help.c:4733 +#: sql_help.c:1715 sql_help.c:4409 sql_help.c:4418 sql_help.c:4422 +#: sql_help.c:4426 sql_help.c:4429 sql_help.c:4658 sql_help.c:4667 +#: sql_help.c:4671 sql_help.c:4675 sql_help.c:4678 sql_help.c:4890 +#: sql_help.c:4899 sql_help.c:4903 sql_help.c:4907 sql_help.c:4910 msgid "argument" msgstr "argument" -#: sql_help.c:1774 +#: sql_help.c:1815 msgid "relation_name" msgstr "nom_relation" -#: sql_help.c:1779 sql_help.c:3717 sql_help.c:4050 +#: sql_help.c:1820 sql_help.c:3809 sql_help.c:4189 msgid "domain_name" msgstr "nom_domaine" -#: sql_help.c:1801 +#: sql_help.c:1842 msgid "policy_name" msgstr "nom_politique" -#: sql_help.c:1814 +#: sql_help.c:1855 msgid "rule_name" msgstr "nom_règle" -#: sql_help.c:1833 +#: sql_help.c:1874 msgid "text" msgstr "texte" -#: sql_help.c:1858 sql_help.c:3900 sql_help.c:4088 +#: sql_help.c:1899 sql_help.c:4002 sql_help.c:4239 msgid "transaction_id" msgstr "id_transaction" -#: sql_help.c:1889 sql_help.c:1896 sql_help.c:3826 +#: sql_help.c:1930 sql_help.c:1937 sql_help.c:3928 msgid "filename" msgstr "nom_fichier" -#: sql_help.c:1890 sql_help.c:1897 sql_help.c:2564 sql_help.c:2565 -#: sql_help.c:2566 +#: sql_help.c:1931 sql_help.c:1938 sql_help.c:2613 sql_help.c:2614 +#: sql_help.c:2615 msgid "command" msgstr "commande" -#: sql_help.c:1892 sql_help.c:2563 sql_help.c:2975 sql_help.c:3152 -#: sql_help.c:3810 sql_help.c:4239 sql_help.c:4241 sql_help.c:4329 -#: sql_help.c:4331 sql_help.c:4478 sql_help.c:4480 sql_help.c:4583 -#: sql_help.c:4696 sql_help.c:4698 +#: sql_help.c:1933 sql_help.c:2612 sql_help.c:3035 sql_help.c:3216 +#: sql_help.c:3912 sql_help.c:4392 sql_help.c:4394 sql_help.c:4490 +#: sql_help.c:4492 sql_help.c:4641 sql_help.c:4643 sql_help.c:4754 +#: sql_help.c:4873 sql_help.c:4875 msgid "condition" msgstr "condition" -#: sql_help.c:1895 sql_help.c:2392 sql_help.c:2858 sql_help.c:3118 -#: sql_help.c:3136 sql_help.c:3791 +#: sql_help.c:1936 sql_help.c:2439 sql_help.c:2918 sql_help.c:3182 +#: sql_help.c:3200 sql_help.c:3893 msgid "query" msgstr "requête" -#: sql_help.c:1900 +#: sql_help.c:1941 msgid "format_name" msgstr "nom_format" -#: sql_help.c:1902 +#: sql_help.c:1943 msgid "delimiter_character" msgstr "caractère_délimiteur" -#: sql_help.c:1903 +#: sql_help.c:1944 msgid "null_string" msgstr "chaîne_null" -#: sql_help.c:1905 +#: sql_help.c:1946 msgid "quote_character" msgstr "caractère_guillemet" -#: sql_help.c:1906 +#: sql_help.c:1947 msgid "escape_character" msgstr "chaîne_d_échappement" -#: sql_help.c:1910 +#: sql_help.c:1951 msgid "encoding_name" msgstr "nom_encodage" -#: sql_help.c:1921 +#: sql_help.c:1962 msgid "access_method_type" msgstr "access_method_type" -#: sql_help.c:1992 sql_help.c:2011 sql_help.c:2014 +#: sql_help.c:2033 sql_help.c:2052 sql_help.c:2055 msgid "arg_data_type" msgstr "type_données_arg" -#: sql_help.c:1993 sql_help.c:2015 sql_help.c:2023 +#: sql_help.c:2034 sql_help.c:2056 sql_help.c:2064 msgid "sfunc" msgstr "sfunc" -#: sql_help.c:1994 sql_help.c:2016 sql_help.c:2024 +#: sql_help.c:2035 sql_help.c:2057 sql_help.c:2065 msgid "state_data_type" msgstr "type_de_données_statut" -#: sql_help.c:1995 sql_help.c:2017 sql_help.c:2025 +#: sql_help.c:2036 sql_help.c:2058 sql_help.c:2066 msgid "state_data_size" msgstr "taille_de_données_statut" -#: sql_help.c:1996 sql_help.c:2018 sql_help.c:2026 +#: sql_help.c:2037 sql_help.c:2059 sql_help.c:2067 msgid "ffunc" msgstr "ffunc" -#: sql_help.c:1997 sql_help.c:2027 +#: sql_help.c:2038 sql_help.c:2068 msgid "combinefunc" msgstr "combinefunc" -#: sql_help.c:1998 sql_help.c:2028 +#: sql_help.c:2039 sql_help.c:2069 msgid "serialfunc" msgstr "serialfunc" -#: sql_help.c:1999 sql_help.c:2029 +#: sql_help.c:2040 sql_help.c:2070 msgid "deserialfunc" msgstr "deserialfunc" -#: sql_help.c:2000 sql_help.c:2019 sql_help.c:2030 +#: sql_help.c:2041 sql_help.c:2060 sql_help.c:2071 msgid "initial_condition" msgstr "condition_initiale" -#: sql_help.c:2001 sql_help.c:2031 +#: sql_help.c:2042 sql_help.c:2072 msgid "msfunc" msgstr "msfunc" -#: sql_help.c:2002 sql_help.c:2032 +#: sql_help.c:2043 sql_help.c:2073 msgid "minvfunc" msgstr "minvfunc" -#: sql_help.c:2003 sql_help.c:2033 +#: sql_help.c:2044 sql_help.c:2074 msgid "mstate_data_type" msgstr "m_type_de_données_statut" -#: sql_help.c:2004 sql_help.c:2034 +#: sql_help.c:2045 sql_help.c:2075 msgid "mstate_data_size" msgstr "m_taille_de_données_statut" -#: sql_help.c:2005 sql_help.c:2035 +#: sql_help.c:2046 sql_help.c:2076 msgid "mffunc" msgstr "mffunc" -#: sql_help.c:2006 sql_help.c:2036 +#: sql_help.c:2047 sql_help.c:2077 msgid "minitial_condition" msgstr "m_condition_initiale" -#: sql_help.c:2007 sql_help.c:2037 +#: sql_help.c:2048 sql_help.c:2078 msgid "sort_operator" msgstr "opérateur_de_tri" -#: sql_help.c:2020 +#: sql_help.c:2061 msgid "or the old syntax" msgstr "ou l'ancienne syntaxe" -#: sql_help.c:2022 +#: sql_help.c:2063 msgid "base_type" msgstr "type_base" -#: sql_help.c:2079 +#: sql_help.c:2119 sql_help.c:2159 msgid "locale" msgstr "locale" -#: sql_help.c:2080 sql_help.c:2119 +#: sql_help.c:2120 sql_help.c:2160 msgid "lc_collate" msgstr "lc_collate" -#: sql_help.c:2081 sql_help.c:2120 +#: sql_help.c:2121 sql_help.c:2161 msgid "lc_ctype" msgstr "lc_ctype" -#: sql_help.c:2082 sql_help.c:4141 +#: sql_help.c:2122 sql_help.c:4292 msgid "provider" msgstr "fournisseur" -#: sql_help.c:2084 sql_help.c:2175 -msgid "version" -msgstr "version" - -#: sql_help.c:2086 +#: sql_help.c:2125 msgid "existing_collation" msgstr "collationnement_existant" -#: sql_help.c:2096 +#: sql_help.c:2135 msgid "source_encoding" msgstr "encodage_source" -#: sql_help.c:2097 +#: sql_help.c:2136 msgid "dest_encoding" msgstr "encodage_destination" -#: sql_help.c:2117 sql_help.c:2898 +#: sql_help.c:2157 sql_help.c:2958 msgid "template" msgstr "modèle" -#: sql_help.c:2118 +#: sql_help.c:2158 msgid "encoding" msgstr "encodage" -#: sql_help.c:2144 +#: sql_help.c:2185 msgid "constraint" msgstr "contrainte" -#: sql_help.c:2145 +#: sql_help.c:2186 msgid "where constraint is:" msgstr "où la contrainte est :" -#: sql_help.c:2159 sql_help.c:2561 sql_help.c:2971 +#: sql_help.c:2200 sql_help.c:2610 sql_help.c:3031 msgid "event" msgstr "événement" -#: sql_help.c:2160 +#: sql_help.c:2201 msgid "filter_variable" msgstr "filter_variable" -#: sql_help.c:2176 -msgid "old_version" -msgstr "ancienne_version" +#: sql_help.c:2215 +msgid "version" +msgstr "version" -#: sql_help.c:2250 sql_help.c:2793 +#: sql_help.c:2289 sql_help.c:2853 msgid "where column_constraint is:" msgstr "où contrainte_colonne est :" -#: sql_help.c:2287 +#: sql_help.c:2327 msgid "rettype" msgstr "type_en_retour" -#: sql_help.c:2289 +#: sql_help.c:2329 msgid "column_type" msgstr "type_colonne" -#: sql_help.c:2298 sql_help.c:2492 +#: sql_help.c:2338 sql_help.c:2540 msgid "definition" msgstr "définition" -#: sql_help.c:2299 sql_help.c:2493 +#: sql_help.c:2339 sql_help.c:2541 msgid "obj_file" msgstr "fichier_objet" -#: sql_help.c:2300 sql_help.c:2494 +#: sql_help.c:2340 sql_help.c:2542 msgid "link_symbol" msgstr "symbole_link" -#: sql_help.c:2334 sql_help.c:2546 sql_help.c:3090 +#: sql_help.c:2341 sql_help.c:2543 +msgid "sql_body" +msgstr "corps_sql" + +#: sql_help.c:2379 sql_help.c:2595 sql_help.c:3154 msgid "uid" msgstr "uid" -#: sql_help.c:2349 sql_help.c:2388 sql_help.c:2762 sql_help.c:2775 -#: sql_help.c:2789 sql_help.c:2854 +#: sql_help.c:2394 sql_help.c:2435 sql_help.c:2822 sql_help.c:2835 +#: sql_help.c:2849 sql_help.c:2914 msgid "method" msgstr "méthode" -#: sql_help.c:2370 +#: sql_help.c:2399 +msgid "opclass_parameter" +msgstr "paramètre_opclass" + +#: sql_help.c:2416 msgid "call_handler" msgstr "gestionnaire_d_appel" -#: sql_help.c:2371 +#: sql_help.c:2417 msgid "inline_handler" msgstr "gestionnaire_en_ligne" -#: sql_help.c:2372 +#: sql_help.c:2418 msgid "valfunction" msgstr "fonction_val" -#: sql_help.c:2410 +#: sql_help.c:2457 msgid "com_op" msgstr "com_op" -#: sql_help.c:2411 +#: sql_help.c:2458 msgid "neg_op" msgstr "neg_op" -#: sql_help.c:2429 +#: sql_help.c:2476 msgid "family_name" msgstr "nom_famille" -#: sql_help.c:2440 +#: sql_help.c:2487 msgid "storage_type" msgstr "type_stockage" -#: sql_help.c:2567 sql_help.c:2978 +#: sql_help.c:2616 sql_help.c:3038 msgid "where event can be one of:" msgstr "où événement fait partie de :" -#: sql_help.c:2586 sql_help.c:2588 +#: sql_help.c:2636 sql_help.c:2638 msgid "schema_element" msgstr "élément_schéma" -#: sql_help.c:2625 +#: sql_help.c:2675 msgid "server_type" msgstr "type_serveur" -#: sql_help.c:2626 +#: sql_help.c:2676 msgid "server_version" msgstr "version_serveur" -#: sql_help.c:2627 sql_help.c:3719 sql_help.c:4052 +#: sql_help.c:2677 sql_help.c:3812 sql_help.c:4192 msgid "fdw_name" msgstr "nom_fdw" -#: sql_help.c:2640 +#: sql_help.c:2694 sql_help.c:2697 msgid "statistics_name" msgstr "nom_statistique" -#: sql_help.c:2641 +#: sql_help.c:2698 msgid "statistics_kind" msgstr "statistics_kind" -#: sql_help.c:2655 +#: sql_help.c:2714 msgid "subscription_name" msgstr "nom_souscription" -#: sql_help.c:2755 +#: sql_help.c:2815 msgid "source_table" msgstr "table_source" -#: sql_help.c:2756 +#: sql_help.c:2816 msgid "like_option" msgstr "option_like" -#: sql_help.c:2822 +#: sql_help.c:2882 msgid "and like_option is:" msgstr "et option_like est :" -#: sql_help.c:2871 +#: sql_help.c:2931 msgid "directory" msgstr "répertoire" -#: sql_help.c:2885 +#: sql_help.c:2945 msgid "parser_name" msgstr "nom_analyseur" -#: sql_help.c:2886 +#: sql_help.c:2946 msgid "source_config" msgstr "configuration_source" -#: sql_help.c:2915 +#: sql_help.c:2975 msgid "start_function" msgstr "fonction_start" -#: sql_help.c:2916 +#: sql_help.c:2976 msgid "gettoken_function" msgstr "fonction_gettoken" -#: sql_help.c:2917 +#: sql_help.c:2977 msgid "end_function" msgstr "fonction_end" -#: sql_help.c:2918 +#: sql_help.c:2978 msgid "lextypes_function" msgstr "fonction_lextypes" -#: sql_help.c:2919 +#: sql_help.c:2979 msgid "headline_function" msgstr "fonction_headline" -#: sql_help.c:2931 +#: sql_help.c:2991 msgid "init_function" msgstr "fonction_init" -#: sql_help.c:2932 +#: sql_help.c:2992 msgid "lexize_function" msgstr "fonction_lexize" -#: sql_help.c:2945 +#: sql_help.c:3005 msgid "from_sql_function_name" msgstr "nom_fonction_from_sql" -#: sql_help.c:2947 +#: sql_help.c:3007 msgid "to_sql_function_name" msgstr "nom_fonction_to_sql" -#: sql_help.c:2973 +#: sql_help.c:3033 msgid "referenced_table_name" msgstr "nom_table_référencée" -#: sql_help.c:2974 +#: sql_help.c:3034 msgid "transition_relation_name" msgstr "nom_relation_transition" -#: sql_help.c:2977 +#: sql_help.c:3037 msgid "arguments" msgstr "arguments" -#: sql_help.c:3027 sql_help.c:4174 +#: sql_help.c:3089 sql_help.c:4325 msgid "label" msgstr "label" -#: sql_help.c:3029 +#: sql_help.c:3091 msgid "subtype" msgstr "sous_type" -#: sql_help.c:3030 +#: sql_help.c:3092 msgid "subtype_operator_class" msgstr "classe_opérateur_sous_type" -#: sql_help.c:3032 +#: sql_help.c:3094 msgid "canonical_function" msgstr "fonction_canonique" -#: sql_help.c:3033 +#: sql_help.c:3095 msgid "subtype_diff_function" msgstr "fonction_diff_sous_type" -#: sql_help.c:3035 +#: sql_help.c:3096 +msgid "multirange_type_name" +msgstr "nom_type_multirange" + +#: sql_help.c:3098 msgid "input_function" msgstr "fonction_en_sortie" -#: sql_help.c:3036 +#: sql_help.c:3099 msgid "output_function" msgstr "fonction_en_sortie" -#: sql_help.c:3037 +#: sql_help.c:3100 msgid "receive_function" msgstr "fonction_receive" -#: sql_help.c:3038 +#: sql_help.c:3101 msgid "send_function" msgstr "fonction_send" -#: sql_help.c:3039 +#: sql_help.c:3102 msgid "type_modifier_input_function" msgstr "fonction_en_entrée_modificateur_type" -#: sql_help.c:3040 +#: sql_help.c:3103 msgid "type_modifier_output_function" msgstr "fonction_en_sortie_modificateur_type" -#: sql_help.c:3041 +#: sql_help.c:3104 msgid "analyze_function" msgstr "fonction_analyze" -#: sql_help.c:3042 +#: sql_help.c:3105 +msgid "subscript_function" +msgstr "fonction_indice" + +#: sql_help.c:3106 msgid "internallength" msgstr "longueur_interne" -#: sql_help.c:3043 +#: sql_help.c:3107 msgid "alignment" msgstr "alignement" -#: sql_help.c:3044 +#: sql_help.c:3108 msgid "storage" msgstr "stockage" -#: sql_help.c:3045 +#: sql_help.c:3109 msgid "like_type" msgstr "type_like" -#: sql_help.c:3046 +#: sql_help.c:3110 msgid "category" msgstr "catégorie" -#: sql_help.c:3047 +#: sql_help.c:3111 msgid "preferred" msgstr "préféré" -#: sql_help.c:3048 +#: sql_help.c:3112 msgid "default" msgstr "par défaut" -#: sql_help.c:3049 +#: sql_help.c:3113 msgid "element" msgstr "élément" -#: sql_help.c:3050 +#: sql_help.c:3114 msgid "delimiter" msgstr "délimiteur" -#: sql_help.c:3051 +#: sql_help.c:3115 msgid "collatable" msgstr "collationnable" -#: sql_help.c:3148 sql_help.c:3786 sql_help.c:4234 sql_help.c:4323 -#: sql_help.c:4473 sql_help.c:4573 sql_help.c:4691 +#: sql_help.c:3212 sql_help.c:3888 sql_help.c:4387 sql_help.c:4484 +#: sql_help.c:4636 sql_help.c:4744 sql_help.c:4868 msgid "with_query" msgstr "requête_with" -#: sql_help.c:3150 sql_help.c:3788 sql_help.c:4253 sql_help.c:4259 -#: sql_help.c:4262 sql_help.c:4266 sql_help.c:4270 sql_help.c:4278 -#: sql_help.c:4492 sql_help.c:4498 sql_help.c:4501 sql_help.c:4505 -#: sql_help.c:4509 sql_help.c:4517 sql_help.c:4575 sql_help.c:4710 -#: sql_help.c:4716 sql_help.c:4719 sql_help.c:4723 sql_help.c:4727 -#: sql_help.c:4735 +#: sql_help.c:3214 sql_help.c:3890 sql_help.c:4406 sql_help.c:4412 +#: sql_help.c:4415 sql_help.c:4419 sql_help.c:4423 sql_help.c:4431 +#: sql_help.c:4655 sql_help.c:4661 sql_help.c:4664 sql_help.c:4668 +#: sql_help.c:4672 sql_help.c:4680 sql_help.c:4746 sql_help.c:4887 +#: sql_help.c:4893 sql_help.c:4896 sql_help.c:4900 sql_help.c:4904 +#: sql_help.c:4912 msgid "alias" msgstr "alias" -#: sql_help.c:3151 -msgid "using_list" -msgstr "liste_using" +#: sql_help.c:3215 sql_help.c:4391 sql_help.c:4433 sql_help.c:4435 +#: sql_help.c:4489 sql_help.c:4640 sql_help.c:4682 sql_help.c:4684 +#: sql_help.c:4753 sql_help.c:4872 sql_help.c:4914 sql_help.c:4916 +msgid "from_item" +msgstr "élément_from" -#: sql_help.c:3153 sql_help.c:3626 sql_help.c:3867 sql_help.c:4584 +#: sql_help.c:3217 sql_help.c:3698 sql_help.c:3969 sql_help.c:4755 msgid "cursor_name" msgstr "nom_curseur" -#: sql_help.c:3154 sql_help.c:3794 sql_help.c:4585 +#: sql_help.c:3218 sql_help.c:3896 sql_help.c:4756 msgid "output_expression" msgstr "expression_en_sortie" -#: sql_help.c:3155 sql_help.c:3795 sql_help.c:4237 sql_help.c:4326 -#: sql_help.c:4476 sql_help.c:4586 sql_help.c:4694 +#: sql_help.c:3219 sql_help.c:3897 sql_help.c:4390 sql_help.c:4487 +#: sql_help.c:4639 sql_help.c:4757 sql_help.c:4871 msgid "output_name" msgstr "nom_en_sortie" -#: sql_help.c:3171 +#: sql_help.c:3235 msgid "code" msgstr "code" -#: sql_help.c:3570 +#: sql_help.c:3640 msgid "parameter" msgstr "paramètre" -#: sql_help.c:3591 sql_help.c:3592 sql_help.c:3892 +#: sql_help.c:3662 sql_help.c:3663 sql_help.c:3994 msgid "statement" msgstr "instruction" -#: sql_help.c:3625 sql_help.c:3866 +#: sql_help.c:3697 sql_help.c:3968 msgid "direction" msgstr "direction" -#: sql_help.c:3627 sql_help.c:3868 +#: sql_help.c:3699 sql_help.c:3970 msgid "where direction can be empty or one of:" msgstr "où direction peut être vide ou faire partie de :" -#: sql_help.c:3628 sql_help.c:3629 sql_help.c:3630 sql_help.c:3631 -#: sql_help.c:3632 sql_help.c:3869 sql_help.c:3870 sql_help.c:3871 -#: sql_help.c:3872 sql_help.c:3873 sql_help.c:4247 sql_help.c:4249 -#: sql_help.c:4337 sql_help.c:4339 sql_help.c:4486 sql_help.c:4488 -#: sql_help.c:4639 sql_help.c:4641 sql_help.c:4704 sql_help.c:4706 +#: sql_help.c:3700 sql_help.c:3701 sql_help.c:3702 sql_help.c:3703 +#: sql_help.c:3704 sql_help.c:3971 sql_help.c:3972 sql_help.c:3973 +#: sql_help.c:3974 sql_help.c:3975 sql_help.c:4400 sql_help.c:4402 +#: sql_help.c:4498 sql_help.c:4500 sql_help.c:4649 sql_help.c:4651 +#: sql_help.c:4814 sql_help.c:4816 sql_help.c:4881 sql_help.c:4883 msgid "count" msgstr "nombre" -#: sql_help.c:3712 sql_help.c:4045 +#: sql_help.c:3802 sql_help.c:4182 msgid "sequence_name" msgstr "nom_séquence" -#: sql_help.c:3725 sql_help.c:4058 +#: sql_help.c:3820 sql_help.c:4200 msgid "arg_name" msgstr "nom_argument" -#: sql_help.c:3726 sql_help.c:4059 +#: sql_help.c:3821 sql_help.c:4201 msgid "arg_type" msgstr "type_arg" -#: sql_help.c:3731 sql_help.c:4064 +#: sql_help.c:3828 sql_help.c:4208 msgid "loid" msgstr "loid" -#: sql_help.c:3754 +#: sql_help.c:3856 msgid "remote_schema" msgstr "schema_distant" -#: sql_help.c:3757 +#: sql_help.c:3859 msgid "local_schema" msgstr "schéma_local" -#: sql_help.c:3792 +#: sql_help.c:3894 msgid "conflict_target" msgstr "cible_conflit" -#: sql_help.c:3793 +#: sql_help.c:3895 msgid "conflict_action" msgstr "action_conflit" -#: sql_help.c:3796 +#: sql_help.c:3898 msgid "where conflict_target can be one of:" msgstr "où cible_conflit fait partie de :" -#: sql_help.c:3797 +#: sql_help.c:3899 msgid "index_column_name" msgstr "index_nom_colonne" -#: sql_help.c:3798 +#: sql_help.c:3900 msgid "index_expression" msgstr "index_expression" -#: sql_help.c:3801 +#: sql_help.c:3903 msgid "index_predicate" msgstr "index_prédicat" -#: sql_help.c:3803 +#: sql_help.c:3905 msgid "and conflict_action is one of:" msgstr "où action_conflit fait partie de :" -#: sql_help.c:3809 sql_help.c:4581 +#: sql_help.c:3911 sql_help.c:4752 msgid "sub-SELECT" msgstr "sous-SELECT" -#: sql_help.c:3818 sql_help.c:3881 sql_help.c:4557 +#: sql_help.c:3920 sql_help.c:3983 sql_help.c:4728 msgid "channel" msgstr "canal" -#: sql_help.c:3840 +#: sql_help.c:3942 msgid "lockmode" msgstr "mode_de_verrou" -#: sql_help.c:3841 +#: sql_help.c:3943 msgid "where lockmode is one of:" msgstr "où mode_de_verrou fait partie de :" -#: sql_help.c:3882 +#: sql_help.c:3984 msgid "payload" msgstr "contenu" -#: sql_help.c:3909 +#: sql_help.c:4011 msgid "old_role" msgstr "ancien_rôle" -#: sql_help.c:3910 +#: sql_help.c:4012 msgid "new_role" msgstr "nouveau_rôle" -#: sql_help.c:3935 sql_help.c:4096 sql_help.c:4104 +#: sql_help.c:4048 sql_help.c:4247 sql_help.c:4255 msgid "savepoint_name" msgstr "nom_savepoint" -#: sql_help.c:4238 sql_help.c:4280 sql_help.c:4282 sql_help.c:4328 -#: sql_help.c:4477 sql_help.c:4519 sql_help.c:4521 sql_help.c:4695 -#: sql_help.c:4737 sql_help.c:4739 -msgid "from_item" -msgstr "élément_from" - -#: sql_help.c:4240 sql_help.c:4292 sql_help.c:4479 sql_help.c:4531 -#: sql_help.c:4697 sql_help.c:4749 +#: sql_help.c:4393 sql_help.c:4446 sql_help.c:4642 sql_help.c:4695 +#: sql_help.c:4874 sql_help.c:4927 msgid "grouping_element" msgstr "element_regroupement" -#: sql_help.c:4242 sql_help.c:4332 sql_help.c:4481 sql_help.c:4699 +#: sql_help.c:4395 sql_help.c:4493 sql_help.c:4644 sql_help.c:4876 msgid "window_name" msgstr "nom_window" -#: sql_help.c:4243 sql_help.c:4333 sql_help.c:4482 sql_help.c:4700 +#: sql_help.c:4396 sql_help.c:4494 sql_help.c:4645 sql_help.c:4877 msgid "window_definition" msgstr "définition_window" -#: sql_help.c:4244 sql_help.c:4258 sql_help.c:4296 sql_help.c:4334 -#: sql_help.c:4483 sql_help.c:4497 sql_help.c:4535 sql_help.c:4701 -#: sql_help.c:4715 sql_help.c:4753 +#: sql_help.c:4397 sql_help.c:4411 sql_help.c:4450 sql_help.c:4495 +#: sql_help.c:4646 sql_help.c:4660 sql_help.c:4699 sql_help.c:4878 +#: sql_help.c:4892 sql_help.c:4931 msgid "select" msgstr "sélection" -#: sql_help.c:4251 sql_help.c:4490 sql_help.c:4708 +#: sql_help.c:4404 sql_help.c:4653 sql_help.c:4885 msgid "where from_item can be one of:" msgstr "où élément_from fait partie de :" -#: sql_help.c:4254 sql_help.c:4260 sql_help.c:4263 sql_help.c:4267 -#: sql_help.c:4279 sql_help.c:4493 sql_help.c:4499 sql_help.c:4502 -#: sql_help.c:4506 sql_help.c:4518 sql_help.c:4711 sql_help.c:4717 -#: sql_help.c:4720 sql_help.c:4724 sql_help.c:4736 +#: sql_help.c:4407 sql_help.c:4413 sql_help.c:4416 sql_help.c:4420 +#: sql_help.c:4432 sql_help.c:4656 sql_help.c:4662 sql_help.c:4665 +#: sql_help.c:4669 sql_help.c:4681 sql_help.c:4888 sql_help.c:4894 +#: sql_help.c:4897 sql_help.c:4901 sql_help.c:4913 msgid "column_alias" msgstr "alias_colonne" -#: sql_help.c:4255 sql_help.c:4494 sql_help.c:4712 +#: sql_help.c:4408 sql_help.c:4657 sql_help.c:4889 msgid "sampling_method" msgstr "méthode_echantillonnage" -#: sql_help.c:4257 sql_help.c:4496 sql_help.c:4714 +#: sql_help.c:4410 sql_help.c:4659 sql_help.c:4891 msgid "seed" msgstr "graine" -#: sql_help.c:4261 sql_help.c:4294 sql_help.c:4500 sql_help.c:4533 -#: sql_help.c:4718 sql_help.c:4751 +#: sql_help.c:4414 sql_help.c:4448 sql_help.c:4663 sql_help.c:4697 +#: sql_help.c:4895 sql_help.c:4929 msgid "with_query_name" msgstr "nom_requête_with" -#: sql_help.c:4271 sql_help.c:4274 sql_help.c:4277 sql_help.c:4510 -#: sql_help.c:4513 sql_help.c:4516 sql_help.c:4728 sql_help.c:4731 -#: sql_help.c:4734 +#: sql_help.c:4424 sql_help.c:4427 sql_help.c:4430 sql_help.c:4673 +#: sql_help.c:4676 sql_help.c:4679 sql_help.c:4905 sql_help.c:4908 +#: sql_help.c:4911 msgid "column_definition" msgstr "définition_colonne" -#: sql_help.c:4281 sql_help.c:4520 sql_help.c:4738 +#: sql_help.c:4434 sql_help.c:4683 sql_help.c:4915 msgid "join_type" msgstr "type_de_jointure" -#: sql_help.c:4283 sql_help.c:4522 sql_help.c:4740 +#: sql_help.c:4436 sql_help.c:4685 sql_help.c:4917 msgid "join_condition" msgstr "condition_de_jointure" -#: sql_help.c:4284 sql_help.c:4523 sql_help.c:4741 +#: sql_help.c:4437 sql_help.c:4686 sql_help.c:4918 msgid "join_column" msgstr "colonne_de_jointure" -#: sql_help.c:4285 sql_help.c:4524 sql_help.c:4742 +#: sql_help.c:4438 sql_help.c:4687 sql_help.c:4919 +msgid "join_using_alias" +msgstr "join_utilisant_alias" + +#: sql_help.c:4439 sql_help.c:4688 sql_help.c:4920 msgid "and grouping_element can be one of:" msgstr "où element_regroupement fait partie de :" -#: sql_help.c:4293 sql_help.c:4532 sql_help.c:4750 +#: sql_help.c:4447 sql_help.c:4696 sql_help.c:4928 msgid "and with_query is:" msgstr "et requête_with est :" -#: sql_help.c:4297 sql_help.c:4536 sql_help.c:4754 +#: sql_help.c:4451 sql_help.c:4700 sql_help.c:4932 msgid "values" msgstr "valeurs" -#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4755 +#: sql_help.c:4452 sql_help.c:4701 sql_help.c:4933 msgid "insert" msgstr "insert" -#: sql_help.c:4299 sql_help.c:4538 sql_help.c:4756 +#: sql_help.c:4453 sql_help.c:4702 sql_help.c:4934 msgid "update" msgstr "update" -#: sql_help.c:4300 sql_help.c:4539 sql_help.c:4757 +#: sql_help.c:4454 sql_help.c:4703 sql_help.c:4935 msgid "delete" msgstr "delete" -#: sql_help.c:4327 +#: sql_help.c:4456 sql_help.c:4705 sql_help.c:4937 +msgid "search_seq_col_name" +msgstr "nom_colonne_seq_recherche" + +#: sql_help.c:4458 sql_help.c:4707 sql_help.c:4939 +msgid "cycle_mark_col_name" +msgstr "nom_colonne_marque_cycle" + +#: sql_help.c:4459 sql_help.c:4708 sql_help.c:4940 +msgid "cycle_mark_value" +msgstr "valeur_marque_cycle" + +#: sql_help.c:4460 sql_help.c:4709 sql_help.c:4941 +msgid "cycle_mark_default" +msgstr "défaut_marque_cyle" + +#: sql_help.c:4461 sql_help.c:4710 sql_help.c:4942 +msgid "cycle_path_col_name" +msgstr "nom_colonne_chemin_cycle" + +#: sql_help.c:4488 msgid "new_table" msgstr "nouvelle_table" -#: sql_help.c:4352 +#: sql_help.c:4513 msgid "timezone" msgstr "fuseau_horaire" -#: sql_help.c:4397 +#: sql_help.c:4558 msgid "snapshot_id" msgstr "id_snapshot" -#: sql_help.c:4582 -msgid "from_list" -msgstr "liste_from" - -#: sql_help.c:4637 +#: sql_help.c:4812 msgid "sort_expression" msgstr "expression_de_tri" -#: sql_help.c:4764 sql_help.c:5742 +#: sql_help.c:4949 sql_help.c:5927 msgid "abort the current transaction" msgstr "abandonner la transaction en cours" -#: sql_help.c:4770 +#: sql_help.c:4955 msgid "change the definition of an aggregate function" msgstr "modifier la définition d'une fonction d'agrégation" -#: sql_help.c:4776 +#: sql_help.c:4961 msgid "change the definition of a collation" msgstr "modifier la définition d'un collationnement" -#: sql_help.c:4782 +#: sql_help.c:4967 msgid "change the definition of a conversion" msgstr "modifier la définition d'une conversion" -#: sql_help.c:4788 +#: sql_help.c:4973 msgid "change a database" msgstr "modifier une base de données" -#: sql_help.c:4794 +#: sql_help.c:4979 msgid "define default access privileges" msgstr "définir les droits d'accès par défaut" -#: sql_help.c:4800 +#: sql_help.c:4985 msgid "change the definition of a domain" msgstr "modifier la définition d'un domaine" -#: sql_help.c:4806 +#: sql_help.c:4991 msgid "change the definition of an event trigger" msgstr "modifier la définition d'un trigger sur évènement" -#: sql_help.c:4812 +#: sql_help.c:4997 msgid "change the definition of an extension" msgstr "modifier la définition d'une extension" -#: sql_help.c:4818 +#: sql_help.c:5003 msgid "change the definition of a foreign-data wrapper" msgstr "modifier la définition d'un wrapper de données distantes" -#: sql_help.c:4824 +#: sql_help.c:5009 msgid "change the definition of a foreign table" msgstr "modifier la définition d'une table distante" -#: sql_help.c:4830 +#: sql_help.c:5015 msgid "change the definition of a function" msgstr "modifier la définition d'une fonction" -#: sql_help.c:4836 +#: sql_help.c:5021 msgid "change role name or membership" msgstr "modifier le nom d'un groupe ou la liste des ses membres" -#: sql_help.c:4842 +#: sql_help.c:5027 msgid "change the definition of an index" msgstr "modifier la définition d'un index" -#: sql_help.c:4848 +#: sql_help.c:5033 msgid "change the definition of a procedural language" msgstr "modifier la définition d'un langage procédural" -#: sql_help.c:4854 +#: sql_help.c:5039 msgid "change the definition of a large object" msgstr "modifier la définition d'un « Large Object »" -#: sql_help.c:4860 +#: sql_help.c:5045 msgid "change the definition of a materialized view" msgstr "modifier la définition d'une vue matérialisée" -#: sql_help.c:4866 +#: sql_help.c:5051 msgid "change the definition of an operator" msgstr "modifier la définition d'un opérateur" -#: sql_help.c:4872 +#: sql_help.c:5057 msgid "change the definition of an operator class" msgstr "modifier la définition d'une classe d'opérateurs" -#: sql_help.c:4878 +#: sql_help.c:5063 msgid "change the definition of an operator family" msgstr "modifier la définition d'une famille d'opérateur" -#: sql_help.c:4884 -msgid "change the definition of a row level security policy" +#: sql_help.c:5069 +msgid "change the definition of a row-level security policy" msgstr "modifier la définition d'une politique de sécurité au niveau ligne" -#: sql_help.c:4890 +#: sql_help.c:5075 msgid "change the definition of a procedure" msgstr "modifier la définition d'une procédure" -#: sql_help.c:4896 +#: sql_help.c:5081 msgid "change the definition of a publication" msgstr "modifier la définition d'une publication" -#: sql_help.c:4902 sql_help.c:5004 +#: sql_help.c:5087 sql_help.c:5189 msgid "change a database role" msgstr "modifier un rôle" -#: sql_help.c:4908 +#: sql_help.c:5093 msgid "change the definition of a routine" msgstr "modifier la définition d'une routine" -#: sql_help.c:4914 +#: sql_help.c:5099 msgid "change the definition of a rule" msgstr "modifier la définition d'une règle" -#: sql_help.c:4920 +#: sql_help.c:5105 msgid "change the definition of a schema" msgstr "modifier la définition d'un schéma" -#: sql_help.c:4926 +#: sql_help.c:5111 msgid "change the definition of a sequence generator" msgstr "modifier la définition d'un générateur de séquence" -#: sql_help.c:4932 +#: sql_help.c:5117 msgid "change the definition of a foreign server" msgstr "modifier la définition d'un serveur distant" -#: sql_help.c:4938 +#: sql_help.c:5123 msgid "change the definition of an extended statistics object" msgstr "modifier la définition d'un objet de statistiques étendues" -#: sql_help.c:4944 +#: sql_help.c:5129 msgid "change the definition of a subscription" msgstr "modifier la définition d'une souscription" -#: sql_help.c:4950 +#: sql_help.c:5135 msgid "change a server configuration parameter" msgstr "modifie un paramètre de configuration du serveur" -#: sql_help.c:4956 +#: sql_help.c:5141 msgid "change the definition of a table" msgstr "modifier la définition d'une table" -#: sql_help.c:4962 +#: sql_help.c:5147 msgid "change the definition of a tablespace" msgstr "modifier la définition d'un tablespace" -#: sql_help.c:4968 +#: sql_help.c:5153 msgid "change the definition of a text search configuration" msgstr "modifier la définition d'une configuration de la recherche de texte" -#: sql_help.c:4974 +#: sql_help.c:5159 msgid "change the definition of a text search dictionary" msgstr "modifier la définition d'un dictionnaire de la recherche de texte" -#: sql_help.c:4980 +#: sql_help.c:5165 msgid "change the definition of a text search parser" msgstr "modifier la définition d'un analyseur de la recherche de texte" -#: sql_help.c:4986 +#: sql_help.c:5171 msgid "change the definition of a text search template" msgstr "modifier la définition d'un modèle de la recherche de texte" -#: sql_help.c:4992 +#: sql_help.c:5177 msgid "change the definition of a trigger" msgstr "modifier la définition d'un trigger" -#: sql_help.c:4998 +#: sql_help.c:5183 msgid "change the definition of a type" msgstr "modifier la définition d'un type" -#: sql_help.c:5010 +#: sql_help.c:5195 msgid "change the definition of a user mapping" msgstr "modifier la définition d'une correspondance d'utilisateur" -#: sql_help.c:5016 +#: sql_help.c:5201 msgid "change the definition of a view" msgstr "modifier la définition d'une vue" -#: sql_help.c:5022 +#: sql_help.c:5207 msgid "collect statistics about a database" msgstr "acquérir des statistiques concernant la base de données" -#: sql_help.c:5028 sql_help.c:5820 +#: sql_help.c:5213 sql_help.c:6005 msgid "start a transaction block" msgstr "débuter un bloc de transaction" -#: sql_help.c:5034 +#: sql_help.c:5219 msgid "invoke a procedure" msgstr "appeler une procédure" -#: sql_help.c:5040 +#: sql_help.c:5225 msgid "force a write-ahead log checkpoint" msgstr "forcer un point de vérification des journaux de transactions" -#: sql_help.c:5046 +#: sql_help.c:5231 msgid "close a cursor" msgstr "fermer un curseur" -#: sql_help.c:5052 +#: sql_help.c:5237 msgid "cluster a table according to an index" msgstr "réorganiser (cluster) une table en fonction d'un index" -#: sql_help.c:5058 +#: sql_help.c:5243 msgid "define or change the comment of an object" msgstr "définir ou modifier les commentaires d'un objet" -#: sql_help.c:5064 sql_help.c:5622 +#: sql_help.c:5249 sql_help.c:5807 msgid "commit the current transaction" msgstr "valider la transaction en cours" -#: sql_help.c:5070 +#: sql_help.c:5255 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "" "valider une transaction précédemment préparée pour une validation en deux\n" "phases" -#: sql_help.c:5076 +#: sql_help.c:5261 msgid "copy data between a file and a table" msgstr "copier des données entre un fichier et une table" -#: sql_help.c:5082 +#: sql_help.c:5267 msgid "define a new access method" msgstr "définir une nouvelle méthode d'accès" -#: sql_help.c:5088 +#: sql_help.c:5273 msgid "define a new aggregate function" msgstr "définir une nouvelle fonction d'agrégation" -#: sql_help.c:5094 +#: sql_help.c:5279 msgid "define a new cast" msgstr "définir un nouveau transtypage" -#: sql_help.c:5100 +#: sql_help.c:5285 msgid "define a new collation" msgstr "définir un nouveau collationnement" -#: sql_help.c:5106 +#: sql_help.c:5291 msgid "define a new encoding conversion" msgstr "définir une nouvelle conversion d'encodage" -#: sql_help.c:5112 +#: sql_help.c:5297 msgid "create a new database" msgstr "créer une nouvelle base de données" -#: sql_help.c:5118 +#: sql_help.c:5303 msgid "define a new domain" msgstr "définir un nouveau domaine" -#: sql_help.c:5124 +#: sql_help.c:5309 msgid "define a new event trigger" msgstr "définir un nouveau trigger sur évènement" -#: sql_help.c:5130 +#: sql_help.c:5315 msgid "install an extension" msgstr "installer une extension" -#: sql_help.c:5136 +#: sql_help.c:5321 msgid "define a new foreign-data wrapper" msgstr "définir un nouveau wrapper de données distantes" -#: sql_help.c:5142 +#: sql_help.c:5327 msgid "define a new foreign table" msgstr "définir une nouvelle table distante" -#: sql_help.c:5148 +#: sql_help.c:5333 msgid "define a new function" msgstr "définir une nouvelle fonction" -#: sql_help.c:5154 sql_help.c:5214 sql_help.c:5316 +#: sql_help.c:5339 sql_help.c:5399 sql_help.c:5501 msgid "define a new database role" msgstr "définir un nouveau rôle" -#: sql_help.c:5160 +#: sql_help.c:5345 msgid "define a new index" msgstr "définir un nouvel index" -#: sql_help.c:5166 +#: sql_help.c:5351 msgid "define a new procedural language" msgstr "définir un nouveau langage de procédures" -#: sql_help.c:5172 +#: sql_help.c:5357 msgid "define a new materialized view" msgstr "définir une nouvelle vue matérialisée" -#: sql_help.c:5178 +#: sql_help.c:5363 msgid "define a new operator" msgstr "définir un nouvel opérateur" -#: sql_help.c:5184 +#: sql_help.c:5369 msgid "define a new operator class" msgstr "définir une nouvelle classe d'opérateur" -#: sql_help.c:5190 +#: sql_help.c:5375 msgid "define a new operator family" msgstr "définir une nouvelle famille d'opérateur" -#: sql_help.c:5196 -msgid "define a new row level security policy for a table" +#: sql_help.c:5381 +msgid "define a new row-level security policy for a table" msgstr "définir une nouvelle politique de sécurité au niveau ligne pour une table" -#: sql_help.c:5202 +#: sql_help.c:5387 msgid "define a new procedure" msgstr "définir une nouvelle procédure" -#: sql_help.c:5208 +#: sql_help.c:5393 msgid "define a new publication" msgstr "définir une nouvelle publication" -#: sql_help.c:5220 +#: sql_help.c:5405 msgid "define a new rewrite rule" msgstr "définir une nouvelle règle de réécriture" -#: sql_help.c:5226 +#: sql_help.c:5411 msgid "define a new schema" msgstr "définir un nouveau schéma" -#: sql_help.c:5232 +#: sql_help.c:5417 msgid "define a new sequence generator" msgstr "définir un nouveau générateur de séquence" -#: sql_help.c:5238 +#: sql_help.c:5423 msgid "define a new foreign server" msgstr "définir un nouveau serveur distant" -#: sql_help.c:5244 +#: sql_help.c:5429 msgid "define extended statistics" msgstr "définir des statistiques étendues" -#: sql_help.c:5250 +#: sql_help.c:5435 msgid "define a new subscription" msgstr "définir une nouvelle souscription" -#: sql_help.c:5256 +#: sql_help.c:5441 msgid "define a new table" msgstr "définir une nouvelle table" -#: sql_help.c:5262 sql_help.c:5778 +#: sql_help.c:5447 sql_help.c:5963 msgid "define a new table from the results of a query" msgstr "définir une nouvelle table à partir des résultats d'une requête" -#: sql_help.c:5268 +#: sql_help.c:5453 msgid "define a new tablespace" msgstr "définir un nouveau tablespace" -#: sql_help.c:5274 +#: sql_help.c:5459 msgid "define a new text search configuration" msgstr "définir une nouvelle configuration de la recherche de texte" -#: sql_help.c:5280 +#: sql_help.c:5465 msgid "define a new text search dictionary" msgstr "définir un nouveau dictionnaire de la recherche de texte" -#: sql_help.c:5286 +#: sql_help.c:5471 msgid "define a new text search parser" msgstr "définir un nouvel analyseur de la recherche de texte" -#: sql_help.c:5292 +#: sql_help.c:5477 msgid "define a new text search template" msgstr "définir un nouveau modèle de la recherche de texte" -#: sql_help.c:5298 +#: sql_help.c:5483 msgid "define a new transform" msgstr "définir une nouvelle transformation" -#: sql_help.c:5304 +#: sql_help.c:5489 msgid "define a new trigger" msgstr "définir un nouveau trigger" -#: sql_help.c:5310 +#: sql_help.c:5495 msgid "define a new data type" msgstr "définir un nouveau type de données" -#: sql_help.c:5322 +#: sql_help.c:5507 msgid "define a new mapping of a user to a foreign server" msgstr "définit une nouvelle correspondance d'un utilisateur vers un serveur distant" -#: sql_help.c:5328 +#: sql_help.c:5513 msgid "define a new view" msgstr "définir une nouvelle vue" -#: sql_help.c:5334 +#: sql_help.c:5519 msgid "deallocate a prepared statement" msgstr "désallouer une instruction préparée" -#: sql_help.c:5340 +#: sql_help.c:5525 msgid "define a cursor" msgstr "définir un curseur" -#: sql_help.c:5346 +#: sql_help.c:5531 msgid "delete rows of a table" msgstr "supprimer des lignes d'une table" -#: sql_help.c:5352 +#: sql_help.c:5537 msgid "discard session state" msgstr "annuler l'état de la session" -#: sql_help.c:5358 +#: sql_help.c:5543 msgid "execute an anonymous code block" msgstr "exécute un bloc de code anonyme" -#: sql_help.c:5364 +#: sql_help.c:5549 msgid "remove an access method" msgstr "supprimer une méthode d'accès" -#: sql_help.c:5370 +#: sql_help.c:5555 msgid "remove an aggregate function" msgstr "supprimer une fonction d'agrégation" -#: sql_help.c:5376 +#: sql_help.c:5561 msgid "remove a cast" msgstr "supprimer un transtypage" -#: sql_help.c:5382 +#: sql_help.c:5567 msgid "remove a collation" msgstr "supprimer un collationnement" -#: sql_help.c:5388 +#: sql_help.c:5573 msgid "remove a conversion" msgstr "supprimer une conversion" -#: sql_help.c:5394 +#: sql_help.c:5579 msgid "remove a database" msgstr "supprimer une base de données" -#: sql_help.c:5400 +#: sql_help.c:5585 msgid "remove a domain" msgstr "supprimer un domaine" -#: sql_help.c:5406 +#: sql_help.c:5591 msgid "remove an event trigger" msgstr "supprimer un trigger sur évènement" -#: sql_help.c:5412 +#: sql_help.c:5597 msgid "remove an extension" msgstr "supprimer une extension" -#: sql_help.c:5418 +#: sql_help.c:5603 msgid "remove a foreign-data wrapper" msgstr "supprimer un wrapper de données distantes" -#: sql_help.c:5424 +#: sql_help.c:5609 msgid "remove a foreign table" msgstr "supprimer une table distante" -#: sql_help.c:5430 +#: sql_help.c:5615 msgid "remove a function" msgstr "supprimer une fonction" -#: sql_help.c:5436 sql_help.c:5502 sql_help.c:5604 +#: sql_help.c:5621 sql_help.c:5687 sql_help.c:5789 msgid "remove a database role" msgstr "supprimer un rôle de la base de données" -#: sql_help.c:5442 +#: sql_help.c:5627 msgid "remove an index" msgstr "supprimer un index" -#: sql_help.c:5448 +#: sql_help.c:5633 msgid "remove a procedural language" msgstr "supprimer un langage procédural" -#: sql_help.c:5454 +#: sql_help.c:5639 msgid "remove a materialized view" msgstr "supprimer une vue matérialisée" -#: sql_help.c:5460 +#: sql_help.c:5645 msgid "remove an operator" msgstr "supprimer un opérateur" -#: sql_help.c:5466 +#: sql_help.c:5651 msgid "remove an operator class" msgstr "supprimer une classe d'opérateur" -#: sql_help.c:5472 +#: sql_help.c:5657 msgid "remove an operator family" msgstr "supprimer une famille d'opérateur" -#: sql_help.c:5478 +#: sql_help.c:5663 msgid "remove database objects owned by a database role" msgstr "supprimer les objets appartenant à un rôle" -#: sql_help.c:5484 -msgid "remove a row level security policy from a table" -msgstr "supprimer une nouvelle politique de sécurité au niveau ligne pour une table" +#: sql_help.c:5669 +msgid "remove a row-level security policy from a table" +msgstr "supprimer une politique de sécurité au niveau ligne pour une table" -#: sql_help.c:5490 +#: sql_help.c:5675 msgid "remove a procedure" msgstr "supprimer une procédure" -#: sql_help.c:5496 +#: sql_help.c:5681 msgid "remove a publication" msgstr "supprimer une publication" -#: sql_help.c:5508 +#: sql_help.c:5693 msgid "remove a routine" msgstr "supprimer une routine" -#: sql_help.c:5514 +#: sql_help.c:5699 msgid "remove a rewrite rule" msgstr "supprimer une règle de réécriture" -#: sql_help.c:5520 +#: sql_help.c:5705 msgid "remove a schema" msgstr "supprimer un schéma" -#: sql_help.c:5526 +#: sql_help.c:5711 msgid "remove a sequence" msgstr "supprimer une séquence" -#: sql_help.c:5532 +#: sql_help.c:5717 msgid "remove a foreign server descriptor" msgstr "supprimer un descripteur de serveur distant" -#: sql_help.c:5538 +#: sql_help.c:5723 msgid "remove extended statistics" msgstr "supprimer des statistiques étendues" -#: sql_help.c:5544 +#: sql_help.c:5729 msgid "remove a subscription" msgstr "supprimer une souscription" -#: sql_help.c:5550 +#: sql_help.c:5735 msgid "remove a table" msgstr "supprimer une table" -#: sql_help.c:5556 +#: sql_help.c:5741 msgid "remove a tablespace" msgstr "supprimer un tablespace" -#: sql_help.c:5562 +#: sql_help.c:5747 msgid "remove a text search configuration" msgstr "supprimer une configuration de la recherche de texte" -#: sql_help.c:5568 +#: sql_help.c:5753 msgid "remove a text search dictionary" msgstr "supprimer un dictionnaire de la recherche de texte" -#: sql_help.c:5574 +#: sql_help.c:5759 msgid "remove a text search parser" msgstr "supprimer un analyseur de la recherche de texte" -#: sql_help.c:5580 +#: sql_help.c:5765 msgid "remove a text search template" msgstr "supprimer un modèle de la recherche de texte" -#: sql_help.c:5586 +#: sql_help.c:5771 msgid "remove a transform" msgstr "supprimer une transformation" -#: sql_help.c:5592 +#: sql_help.c:5777 msgid "remove a trigger" msgstr "supprimer un trigger" -#: sql_help.c:5598 +#: sql_help.c:5783 msgid "remove a data type" msgstr "supprimer un type de données" -#: sql_help.c:5610 +#: sql_help.c:5795 msgid "remove a user mapping for a foreign server" msgstr "supprime une correspondance utilisateur pour un serveur distant" -#: sql_help.c:5616 +#: sql_help.c:5801 msgid "remove a view" msgstr "supprimer une vue" -#: sql_help.c:5628 +#: sql_help.c:5813 msgid "execute a prepared statement" msgstr "exécuter une instruction préparée" -#: sql_help.c:5634 +#: sql_help.c:5819 msgid "show the execution plan of a statement" msgstr "afficher le plan d'exécution d'une instruction" -#: sql_help.c:5640 +#: sql_help.c:5825 msgid "retrieve rows from a query using a cursor" msgstr "extraire certaines lignes d'une requête à l'aide d'un curseur" -#: sql_help.c:5646 +#: sql_help.c:5831 msgid "define access privileges" msgstr "définir des privilèges d'accès" -#: sql_help.c:5652 +#: sql_help.c:5837 msgid "import table definitions from a foreign server" msgstr "importer la définition d'une table à partir d'un serveur distant" -#: sql_help.c:5658 +#: sql_help.c:5843 msgid "create new rows in a table" msgstr "créer de nouvelles lignes dans une table" -#: sql_help.c:5664 +#: sql_help.c:5849 msgid "listen for a notification" msgstr "se mettre à l'écoute d'une notification" -#: sql_help.c:5670 +#: sql_help.c:5855 msgid "load a shared library file" msgstr "charger un fichier de bibliothèque partagée" -#: sql_help.c:5676 +#: sql_help.c:5861 msgid "lock a table" msgstr "verrouiller une table" -#: sql_help.c:5682 +#: sql_help.c:5867 msgid "position a cursor" msgstr "positionner un curseur" -#: sql_help.c:5688 +#: sql_help.c:5873 msgid "generate a notification" msgstr "engendrer une notification" -#: sql_help.c:5694 +#: sql_help.c:5879 msgid "prepare a statement for execution" msgstr "préparer une instruction pour exécution" -#: sql_help.c:5700 +#: sql_help.c:5885 msgid "prepare the current transaction for two-phase commit" msgstr "préparer la transaction en cours pour une validation en deux phases" -#: sql_help.c:5706 +#: sql_help.c:5891 msgid "change the ownership of database objects owned by a database role" msgstr "changer le propriétaire des objets d'un rôle" -#: sql_help.c:5712 +#: sql_help.c:5897 msgid "replace the contents of a materialized view" msgstr "remplacer le contenu d'une vue matérialisée" -#: sql_help.c:5718 +#: sql_help.c:5903 msgid "rebuild indexes" msgstr "reconstruire des index" -#: sql_help.c:5724 +#: sql_help.c:5909 msgid "destroy a previously defined savepoint" msgstr "détruire un point de retournement précédemment défini" -#: sql_help.c:5730 +#: sql_help.c:5915 msgid "restore the value of a run-time parameter to the default value" msgstr "réinitialiser un paramètre d'exécution à sa valeur par défaut" -#: sql_help.c:5736 +#: sql_help.c:5921 msgid "remove access privileges" msgstr "supprimer des privilèges d'accès" -#: sql_help.c:5748 +#: sql_help.c:5933 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "" "annuler une transaction précédemment préparée pour une validation en deux\n" "phases" -#: sql_help.c:5754 +#: sql_help.c:5939 msgid "roll back to a savepoint" msgstr "annuler jusqu'au point de retournement" -#: sql_help.c:5760 +#: sql_help.c:5945 msgid "define a new savepoint within the current transaction" msgstr "définir un nouveau point de retournement pour la transaction en cours" -#: sql_help.c:5766 +#: sql_help.c:5951 msgid "define or change a security label applied to an object" msgstr "définir ou modifier un label de sécurité à un objet" -#: sql_help.c:5772 sql_help.c:5826 sql_help.c:5862 +#: sql_help.c:5957 sql_help.c:6011 sql_help.c:6047 msgid "retrieve rows from a table or view" msgstr "extraire des lignes d'une table ou d'une vue" -#: sql_help.c:5784 +#: sql_help.c:5969 msgid "change a run-time parameter" msgstr "modifier un paramètre d'exécution" -#: sql_help.c:5790 +#: sql_help.c:5975 msgid "set constraint check timing for the current transaction" msgstr "définir le moment de la vérification des contraintes pour la transaction en cours" -#: sql_help.c:5796 +#: sql_help.c:5981 msgid "set the current user identifier of the current session" msgstr "définir l'identifiant actuel de l'utilisateur de la session courante" -#: sql_help.c:5802 +#: sql_help.c:5987 msgid "set the session user identifier and the current user identifier of the current session" msgstr "" "définir l'identifiant de l'utilisateur de session et l'identifiant actuel de\n" "l'utilisateur de la session courante" -#: sql_help.c:5808 +#: sql_help.c:5993 msgid "set the characteristics of the current transaction" msgstr "définir les caractéristiques de la transaction en cours" -#: sql_help.c:5814 +#: sql_help.c:5999 msgid "show the value of a run-time parameter" msgstr "afficher la valeur d'un paramètre d'exécution" -#: sql_help.c:5832 +#: sql_help.c:6017 msgid "empty a table or set of tables" msgstr "vider une table ou un ensemble de tables" -#: sql_help.c:5838 +#: sql_help.c:6023 msgid "stop listening for a notification" msgstr "arrêter l'écoute d'une notification" -#: sql_help.c:5844 +#: sql_help.c:6029 msgid "update rows of a table" msgstr "actualiser les lignes d'une table" -#: sql_help.c:5850 +#: sql_help.c:6035 msgid "garbage-collect and optionally analyze a database" msgstr "compacter et optionnellement analyser une base de données" -#: sql_help.c:5856 +#: sql_help.c:6041 msgid "compute a set of rows" msgstr "calculer un ensemble de lignes" -#: startup.c:216 +#: startup.c:213 #, c-format msgid "-1 can only be used in non-interactive mode" msgstr "-1 peut seulement être utilisé dans un mode non interactif" -#: startup.c:303 -#, c-format -msgid "could not connect to server: %s" -msgstr "n'a pas pu se connecter au serveur : %s" - -#: startup.c:331 +#: startup.c:326 #, c-format msgid "could not open log file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier applicatif « %s » : %m" -#: startup.c:443 +#: startup.c:438 #, c-format msgid "" "Type \"help\" for help.\n" @@ -6310,27 +6592,27 @@ msgstr "" "Saisissez « help » pour l'aide.\n" "\n" -#: startup.c:593 +#: startup.c:591 #, c-format msgid "could not set printing parameter \"%s\"" msgstr "n'a pas pu configurer le paramètre d'impression « %s »" -#: startup.c:701 +#: startup.c:699 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayez « %s --help » pour plus d'informations.\n" -#: startup.c:718 +#: startup.c:716 #, c-format msgid "extra command-line argument \"%s\" ignored" msgstr "option supplémentaire « %s » ignorée" -#: startup.c:767 +#: startup.c:765 #, c-format msgid "could not find own program executable" msgstr "n'a pas pu trouver son propre exécutable" -#: tab-complete.c:4408 +#: tab-complete.c:4915 #, c-format msgid "" "tab completion query failed: %s\n" @@ -6341,22 +6623,22 @@ msgstr "" "La requête était :\n" "%s" -#: variables.c:141 +#: variables.c:139 #, c-format msgid "unrecognized value \"%s\" for \"%s\": Boolean expected" msgstr "valeur « %s » non reconnue pour « %s » : booléen attendu" -#: variables.c:178 +#: variables.c:176 #, c-format msgid "invalid value \"%s\" for \"%s\": integer expected" msgstr "valeur « %s » invalide pour « %s » : entier attendu" -#: variables.c:226 +#: variables.c:224 #, c-format msgid "invalid variable name: \"%s\"" msgstr "nom de variable « %s » invalide" -#: variables.c:395 +#: variables.c:419 #, c-format msgid "" "unrecognized value \"%s\" for \"%s\"\n" @@ -6365,315 +6647,341 @@ msgstr "" "valeur « %s » non reconnue pour « %s »\n" "Les valeurs disponibles sont : %s." -#~ msgid "normal" -#~ msgstr "normal" - -#~ msgid "Procedure" -#~ msgstr "Procédure" +#~ msgid "All connection parameters must be supplied because no database connection exists" +#~ msgstr "Tous les paramètres de connexion doivent être fournis car il n'existe pas de connexion à une base de données" -#~ msgid " SERVER_VERSION_NAME server's version (short string)\n" -#~ msgstr " SERVER_VERSION_NAME version du serveur (chaîne courte)\n" +#~ msgid "could not identify current directory: %s" +#~ msgstr "n'a pas pu identifier le répertoire courant : %s" -#~ msgid " VERSION psql's version (verbose string)\n" -#~ msgstr " VERSION version de psql (chaîne verbeuse)\n" +#~ msgid "could not change directory to \"%s\": %s" +#~ msgstr "n'a pas pu changer le répertoire par « %s » : %s" -#~ msgid " VERSION_NAME psql's version (short string)\n" -#~ msgstr " VERSION_NAME version de psql (chaîne courte)\n" +#~ msgid "could not read symbolic link \"%s\"" +#~ msgstr "n'a pas pu lire le lien symbolique « %s »" -#~ msgid " VERSION_NUM psql's version (numeric format)\n" -#~ msgstr " VERSION_NUM version de psql (format numérique)\n" +#~ msgid "pclose failed: %s" +#~ msgstr "échec de pclose : %s" -#~ msgid "attribute" -#~ msgstr "attribut" +#~ msgid "child process was terminated by signal %s" +#~ msgstr "le processus fils a été terminé par le signal %s" -#~ msgid "No per-database role settings support in this server version.\n" -#~ msgstr "Pas de supprot des paramètres rôle par base de données pour la version de ce serveur.\n" +#~ msgid "child process was terminated by signal %d" +#~ msgstr "le processus fils a été terminé par le signal %d" -#~ msgid "No matching settings found.\n" -#~ msgstr "Aucun paramètre correspondant trouvé.\n" +#~ msgid "Invalid command \\%s. Try \\? for help.\n" +#~ msgstr "Commande \\%s invalide. Essayez \\? pour l'aide-mémoire.\n" -#~ msgid "No settings found.\n" -#~ msgstr "Aucun paramètre trouvé.\n" +#~ msgid "%s: %s\n" +#~ msgstr "%s : %s\n" -#~ msgid "No matching relations found.\n" -#~ msgstr "Aucune relation correspondante trouvée.\n" +#~ msgid "could not open temporary file \"%s\": %s\n" +#~ msgstr "n'a pas pu ouvrir le fichier temporaire « %s » : %s\n" -#~ msgid "No relations found.\n" -#~ msgstr "Aucune relation trouvée.\n" +#~ msgid "could not execute command \"%s\": %s\n" +#~ msgstr "n'a pas pu exécuter la commande « %s » : %s\n" -#~ msgid "Password encryption failed.\n" -#~ msgstr "Échec du chiffrement du mot de passe.\n" +#~ msgid "could not stat file \"%s\": %s\n" +#~ msgstr "n'a pas pu tester le fichier « %s » : %s\n" -#~ msgid "\\%s: error while setting variable\n" -#~ msgstr "\\%s : erreur lors de l'initialisation de la variable\n" +#~ msgid "could not close pipe to external command: %s\n" +#~ msgstr "n'a pas pu fermer le fichier pipe vers la commande externe : %s\n" -#~ msgid "+ opt(%d) = |%s|\n" -#~ msgstr "+ opt(%d) = |%s|\n" +#~ msgid "%s\n" +#~ msgstr "%s\n" -#~ msgid "could not set variable \"%s\"\n" -#~ msgstr "n'a pas pu initialiser la variable « %s »\n" +#~ msgid "Report bugs to .\n" +#~ msgstr "Rapportez les bogues à .\n" -#~ msgid "Modifiers" -#~ msgstr "Modificateurs" +#~ msgid "unterminated quoted string\n" +#~ msgstr "chaîne entre guillemets non terminée\n" -#~ msgid "collate %s" -#~ msgstr "collationnement %s" +#~ msgid "string_literal" +#~ msgstr "littéral_chaîne" -#~ msgid "not null" -#~ msgstr "non NULL" +#~ msgid "%s: could not open log file \"%s\": %s\n" +#~ msgstr "%s : n'a pas pu ouvrir le journal applicatif « %s » : %s\n" -#~ msgid "default %s" -#~ msgstr "Par défaut, %s" +#~ msgid "Value" +#~ msgstr "Valeur" -#~ msgid "Modifier" -#~ msgstr "Modificateur" +#~ msgid "statistic_type" +#~ msgstr "type_statistique" -#~ msgid "Object Description" -#~ msgstr "Description d'un objet" +#~ msgid "serialtype" +#~ msgstr "serialtype" -#~ msgid "%s: could not set variable \"%s\"\n" -#~ msgstr "%s : n'a pas pu initialiser la variable « %s »\n" +#~ msgid "SSL connection (unknown cipher)\n" +#~ msgstr "Connexion SSL (chiffrement inconnu)\n" -#~ msgid "Watch every %lds\t%s" -#~ msgstr "Vérifier chaque %lds\t%s" +#~ msgid " -?, --help show this help, then exit\n" +#~ msgstr " -?, --help affiche cette aide puis quitte\n" -#~ msgid "Showing locale-adjusted numeric output." -#~ msgstr "Affichage de la sortie numérique adaptée à la locale." +#~ msgid "(No rows)\n" +#~ msgstr "(Aucune ligne)\n" -#~ msgid "Showing only tuples." -#~ msgstr "Affichage des tuples seuls." +#~ msgid " \"%s\"" +#~ msgstr " « %s »" -#~ msgid "could not get current user name: %s\n" -#~ msgstr "n'a pas pu obtenir le nom d'utilisateur courant : %s\n" +#~ msgid "?%c? \"%s.%s\"" +#~ msgstr "?%c? « %s.%s »" -#~ msgid "agg_name" -#~ msgstr "nom_d_agrégat" +#~ msgid "Access privileges for database \"%s\"" +#~ msgstr "Droits d'accès pour la base de données « %s »" -#~ msgid "agg_type" -#~ msgstr "type_aggrégat" +#~ msgid "" +#~ "WARNING: You are connected to a server with major version %d.%d,\n" +#~ "but your %s client is major version %d.%d. Some backslash commands,\n" +#~ "such as \\d, might not work properly.\n" +#~ "\n" +#~ msgstr "" +#~ "ATTENTION : vous êtes connecté sur un serveur dont la version majeure est\n" +#~ "%d.%d alors que votre client %s est en version majeure %d.%d. Certaines\n" +#~ "commandes avec antislashs, comme \\d, peuvent ne pas fonctionner\n" +#~ "correctement.\n" +#~ "\n" -#~ msgid "input_data_type" -#~ msgstr "type_de_données_en_entrée" +#~ msgid "" +#~ "Welcome to %s %s, the PostgreSQL interactive terminal.\n" +#~ "\n" +#~ msgstr "" +#~ "Bienvenue dans %s %s, l'interface interactive de PostgreSQL.\n" +#~ "\n" -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "n'a pas pu accéder au répertoire « %s »" +#~ msgid "" +#~ "Welcome to %s %s (server %s), the PostgreSQL interactive terminal.\n" +#~ "\n" +#~ msgstr "" +#~ "Bienvenue dans %s %s (serveur %s), l'interface interactive de PostgreSQL.\n" +#~ "\n" -#~ msgid "%s: pg_strdup: cannot duplicate null pointer (internal error)\n" -#~ msgstr "%s : pg_strdup : ne peut pas dupliquer le pointeur null (erreur interne)\n" +#~ msgid "Copy, Large Object\n" +#~ msgstr "Copie, « Large Object »\n" -#~ msgid " \\l[+] list all databases\n" -#~ msgstr " \\l[+] affiche la liste des bases de données\n" +#~ msgid " \\z [PATTERN] list table, view, and sequence access privileges (same as \\dp)\n" +#~ msgstr "" +#~ " \\z [MODÈLE] affiche la liste des privilèges d'accès aux tables,\n" +#~ " vues et séquences (identique à \\dp)\n" -#~ msgid "\\%s: error\n" -#~ msgstr "\\%s : erreur\n" +#~ msgid " \\l list all databases (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\l affiche la liste des bases de données (ajouter « + »\n" +#~ " pour plus de détails)\n" -#~ msgid "\\copy: %s" -#~ msgstr "\\copy : %s" +#~ msgid " \\dT [PATTERN] list data types (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\dT [MODÈLE] affiche la liste des types de données (ajouter « + »\n" +#~ " pour plus de détails)\n" -#~ msgid "\\copy: unexpected response (%d)\n" -#~ msgstr "\\copy : réponse inattendue (%d)\n" +#~ msgid " \\dn [PATTERN] list schemas (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\dn [MODÈLE] affiche la liste des schémas (ajouter « + » pour\n" +#~ " plus de détails)\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide, puis quitte\n" +#~ msgid " \\dFp [PATTERN] list text search parsers (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\dFp [MODÈLE] affiche la liste des analyseurs de la recherche de\n" +#~ " texte (ajouter « + » pour plus de détails)\n" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version, puis quitte\n" +#~ msgid " \\dFd [PATTERN] list text search dictionaries (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\dFd [MODÈLE] affiche la liste des dictionnaires de la recherche\n" +#~ " de texte (ajouter « + » pour plus de détails)\n" -#~ msgid "contains support for command-line editing" -#~ msgstr "contient une gestion avancée de la ligne de commande" +#~ msgid " \\df [PATTERN] list functions (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\df [MODÈLE] affiche la liste des fonctions (ajouter « + » pour\n" +#~ " plus de détails)\n" -#~ msgid "data type" -#~ msgstr "type de données" +#~ msgid " \\db [PATTERN] list tablespaces (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\db [MODÈLE] affiche la liste des tablespaces (ajouter « + » pour\n" +#~ " plus de détails)\n" -#~ msgid "column" -#~ msgstr "colonne" +#~ msgid "" +#~ " \\d{t|i|s|v|S} [PATTERN] (add \"+\" for more detail)\n" +#~ " list tables/indexes/sequences/views/system tables\n" +#~ msgstr "" +#~ " \\d{t|i|s|v|S} [MODÈLE] (ajouter « + » pour plus de détails)\n" +#~ " affiche la liste des\n" +#~ " tables/index/séquences/vues/tables système\n" -#~ msgid "new_column" -#~ msgstr "nouvelle_colonne" +#~ msgid "(1 row)" +#~ msgid_plural "(%lu rows)" +#~ msgstr[0] "(1 ligne)" +#~ msgstr[1] "(%lu lignes)" -#~ msgid "tablespace" -#~ msgstr "tablespace" +#~ msgid " \"%s\" IN %s %s" +#~ msgstr " \"%s\" DANS %s %s" -#~ msgid " on host \"%s\"" -#~ msgstr " sur l'hôte « %s »" +#~ msgid "rolename" +#~ msgstr "nom_rôle" -#~ msgid " at port \"%s\"" -#~ msgstr " sur le port « %s »" +#~ msgid "Exclusion constraints:" +#~ msgstr "Contraintes d'exclusion :" + +#~ msgid "define a new constraint trigger" +#~ msgstr "définir une nouvelle contrainte de déclenchement" #~ msgid " as user \"%s\"" #~ msgstr " comme utilisateur « %s »" -#~ msgid "define a new constraint trigger" -#~ msgstr "définir une nouvelle contrainte de déclenchement" +#~ msgid " at port \"%s\"" +#~ msgstr " sur le port « %s »" -#~ msgid "Exclusion constraints:" -#~ msgstr "Contraintes d'exclusion :" +#~ msgid " on host \"%s\"" +#~ msgstr " sur l'hôte « %s »" -#~ msgid "rolename" -#~ msgstr "nom_rôle" +#~ msgid "tablespace" +#~ msgstr "tablespace" -#~ msgid "number" -#~ msgstr "numéro" +#~ msgid "new_column" +#~ msgstr "nouvelle_colonne" -#~ msgid " \"%s\" IN %s %s" -#~ msgstr " \"%s\" DANS %s %s" +#~ msgid "column" +#~ msgstr "colonne" -#~ msgid "(1 row)" -#~ msgid_plural "(%lu rows)" -#~ msgstr[0] "(1 ligne)" -#~ msgstr[1] "(%lu lignes)" +#~ msgid "data type" +#~ msgstr "type de données" -#~ msgid "" -#~ " \\d{t|i|s|v|S} [PATTERN] (add \"+\" for more detail)\n" -#~ " list tables/indexes/sequences/views/system tables\n" -#~ msgstr "" -#~ " \\d{t|i|s|v|S} [MODÈLE] (ajouter « + » pour plus de détails)\n" -#~ " affiche la liste des\n" -#~ " tables/index/séquences/vues/tables système\n" +#~ msgid "contains support for command-line editing" +#~ msgstr "contient une gestion avancée de la ligne de commande" -#~ msgid " \\db [PATTERN] list tablespaces (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\db [MODÈLE] affiche la liste des tablespaces (ajouter « + » pour\n" -#~ " plus de détails)\n" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version affiche la version, puis quitte\n" -#~ msgid " \\df [PATTERN] list functions (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\df [MODÈLE] affiche la liste des fonctions (ajouter « + » pour\n" -#~ " plus de détails)\n" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help affiche cette aide, puis quitte\n" -#~ msgid " \\dFd [PATTERN] list text search dictionaries (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\dFd [MODÈLE] affiche la liste des dictionnaires de la recherche\n" -#~ " de texte (ajouter « + » pour plus de détails)\n" +#~ msgid "\\copy: unexpected response (%d)\n" +#~ msgstr "\\copy : réponse inattendue (%d)\n" -#~ msgid " \\dFp [PATTERN] list text search parsers (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\dFp [MODÈLE] affiche la liste des analyseurs de la recherche de\n" -#~ " texte (ajouter « + » pour plus de détails)\n" +#~ msgid "\\copy: %s" +#~ msgstr "\\copy : %s" -#~ msgid " \\dn [PATTERN] list schemas (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\dn [MODÈLE] affiche la liste des schémas (ajouter « + » pour\n" -#~ " plus de détails)\n" +#~ msgid "\\%s: error\n" +#~ msgstr "\\%s : erreur\n" -#~ msgid " \\dT [PATTERN] list data types (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\dT [MODÈLE] affiche la liste des types de données (ajouter « + »\n" -#~ " pour plus de détails)\n" +#~ msgid " \\l[+] list all databases\n" +#~ msgstr " \\l[+] affiche la liste des bases de données\n" -#~ msgid " \\l list all databases (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\l affiche la liste des bases de données (ajouter « + »\n" -#~ " pour plus de détails)\n" +#~ msgid "%s: pg_strdup: cannot duplicate null pointer (internal error)\n" +#~ msgstr "%s : pg_strdup : ne peut pas dupliquer le pointeur null (erreur interne)\n" -#~ msgid " \\z [PATTERN] list table, view, and sequence access privileges (same as \\dp)\n" -#~ msgstr "" -#~ " \\z [MODÈLE] affiche la liste des privilèges d'accès aux tables,\n" -#~ " vues et séquences (identique à \\dp)\n" +#~ msgid "could not change directory to \"%s\"" +#~ msgstr "n'a pas pu accéder au répertoire « %s »" -#~ msgid "Copy, Large Object\n" -#~ msgstr "Copie, « Large Object »\n" +#~ msgid "input_data_type" +#~ msgstr "type_de_données_en_entrée" -#~ msgid "" -#~ "Welcome to %s %s (server %s), the PostgreSQL interactive terminal.\n" -#~ "\n" -#~ msgstr "" -#~ "Bienvenue dans %s %s (serveur %s), l'interface interactive de PostgreSQL.\n" -#~ "\n" +#~ msgid "agg_type" +#~ msgstr "type_aggrégat" -#~ msgid "" -#~ "Welcome to %s %s, the PostgreSQL interactive terminal.\n" -#~ "\n" -#~ msgstr "" -#~ "Bienvenue dans %s %s, l'interface interactive de PostgreSQL.\n" -#~ "\n" +#~ msgid "agg_name" +#~ msgstr "nom_d_agrégat" -#~ msgid "" -#~ "WARNING: You are connected to a server with major version %d.%d,\n" -#~ "but your %s client is major version %d.%d. Some backslash commands,\n" -#~ "such as \\d, might not work properly.\n" -#~ "\n" -#~ msgstr "" -#~ "ATTENTION : vous êtes connecté sur un serveur dont la version majeure est\n" -#~ "%d.%d alors que votre client %s est en version majeure %d.%d. Certaines\n" -#~ "commandes avec antislashs, comme \\d, peuvent ne pas fonctionner\n" -#~ "correctement.\n" -#~ "\n" +#~ msgid "could not get current user name: %s\n" +#~ msgstr "n'a pas pu obtenir le nom d'utilisateur courant : %s\n" -#~ msgid "Access privileges for database \"%s\"" -#~ msgstr "Droits d'accès pour la base de données « %s »" +#~ msgid "Showing only tuples." +#~ msgstr "Affichage des tuples seuls." -#~ msgid "?%c? \"%s.%s\"" -#~ msgstr "?%c? « %s.%s »" +#~ msgid "Showing locale-adjusted numeric output." +#~ msgstr "Affichage de la sortie numérique adaptée à la locale." -#~ msgid " \"%s\"" -#~ msgstr " « %s »" +#~ msgid "Watch every %lds\t%s" +#~ msgstr "Vérifier chaque %lds\t%s" -#~ msgid "(No rows)\n" -#~ msgstr "(Aucune ligne)\n" +#~ msgid "%s: could not set variable \"%s\"\n" +#~ msgstr "%s : n'a pas pu initialiser la variable « %s »\n" -#~ msgid " -?, --help show this help, then exit\n" -#~ msgstr " -?, --help affiche cette aide puis quitte\n" +#~ msgid "Object Description" +#~ msgstr "Description d'un objet" -#~ msgid "SSL connection (unknown cipher)\n" -#~ msgstr "Connexion SSL (chiffrement inconnu)\n" +#~ msgid "Modifier" +#~ msgstr "Modificateur" -#~ msgid "serialtype" -#~ msgstr "serialtype" +#~ msgid "default %s" +#~ msgstr "Par défaut, %s" -#~ msgid "statistic_type" -#~ msgstr "type_statistique" +#~ msgid "not null" +#~ msgstr "non NULL" -#~ msgid "Value" -#~ msgstr "Valeur" +#~ msgid "collate %s" +#~ msgstr "collationnement %s" -#~ msgid "%s: could not open log file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le journal applicatif « %s » : %s\n" +#~ msgid "Modifiers" +#~ msgstr "Modificateurs" -#~ msgid "string_literal" -#~ msgstr "littéral_chaîne" +#~ msgid "could not set variable \"%s\"\n" +#~ msgstr "n'a pas pu initialiser la variable « %s »\n" -#~ msgid "unterminated quoted string\n" -#~ msgstr "chaîne entre guillemets non terminée\n" +#~ msgid "+ opt(%d) = |%s|\n" +#~ msgstr "+ opt(%d) = |%s|\n" -#~ msgid "Report bugs to .\n" -#~ msgstr "Rapportez les bogues à .\n" +#~ msgid "\\%s: error while setting variable\n" +#~ msgstr "\\%s : erreur lors de l'initialisation de la variable\n" -#~ msgid "%s\n" -#~ msgstr "%s\n" +#~ msgid "Password encryption failed.\n" +#~ msgstr "Échec du chiffrement du mot de passe.\n" -#~ msgid "could not close pipe to external command: %s\n" -#~ msgstr "n'a pas pu fermer le fichier pipe vers la commande externe : %s\n" +#~ msgid "No relations found.\n" +#~ msgstr "Aucune relation trouvée.\n" -#~ msgid "could not stat file \"%s\": %s\n" -#~ msgstr "n'a pas pu tester le fichier « %s » : %s\n" +#~ msgid "No matching relations found.\n" +#~ msgstr "Aucune relation correspondante trouvée.\n" -#~ msgid "could not execute command \"%s\": %s\n" -#~ msgstr "n'a pas pu exécuter la commande « %s » : %s\n" +#~ msgid "No settings found.\n" +#~ msgstr "Aucun paramètre trouvé.\n" -#~ msgid "could not open temporary file \"%s\": %s\n" -#~ msgstr "n'a pas pu ouvrir le fichier temporaire « %s » : %s\n" +#~ msgid "No matching settings found.\n" +#~ msgstr "Aucun paramètre correspondant trouvé.\n" -#~ msgid "%s: %s\n" -#~ msgstr "%s : %s\n" +#~ msgid "No per-database role settings support in this server version.\n" +#~ msgstr "Pas de supprot des paramètres rôle par base de données pour la version de ce serveur.\n" -#~ msgid "Invalid command \\%s. Try \\? for help.\n" -#~ msgstr "Commande \\%s invalide. Essayez \\? pour l'aide-mémoire.\n" +#~ msgid "attribute" +#~ msgstr "attribut" -#~ msgid "child process was terminated by signal %d" -#~ msgstr "le processus fils a été terminé par le signal %d" +#~ msgid " VERSION_NUM psql's version (numeric format)\n" +#~ msgstr " VERSION_NUM version de psql (format numérique)\n" -#~ msgid "child process was terminated by signal %s" -#~ msgstr "le processus fils a été terminé par le signal %s" +#~ msgid " VERSION_NAME psql's version (short string)\n" +#~ msgstr " VERSION_NAME version de psql (chaîne courte)\n" -#~ msgid "pclose failed: %s" -#~ msgstr "échec de pclose : %s" +#~ msgid " VERSION psql's version (verbose string)\n" +#~ msgstr " VERSION version de psql (chaîne verbeuse)\n" -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "n'a pas pu lire le lien symbolique « %s »" +#~ msgid " SERVER_VERSION_NAME server's version (short string)\n" +#~ msgstr " SERVER_VERSION_NAME version du serveur (chaîne courte)\n" -#~ msgid "could not change directory to \"%s\": %s" -#~ msgstr "n'a pas pu changer le répertoire par « %s » : %s" +#~ msgid "Procedure" +#~ msgstr "Procédure" -#~ msgid "could not identify current directory: %s" -#~ msgstr "n'a pas pu identifier le répertoire courant : %s" +#~ msgid "normal" +#~ msgstr "normal" + +#~ msgid "from_list" +#~ msgstr "liste_from" + +#~ msgid "old_version" +#~ msgstr "ancienne_version" + +#~ msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" +#~ msgstr "" +#~ " \\g [FICHIER] ou ; envoie le tampon de requêtes au serveur (et les\n" +#~ " résultats au fichier ou |tube)\n" + +#~ msgid "Report bugs to .\n" +#~ msgstr "Rapporter les bogues à .\n" + +#~ msgid "could not connect to server: %s" +#~ msgstr "n'a pas pu se connecter au serveur : %s" + +#~ msgid "lock a named relation (table, etc)" +#~ msgstr "verrouille une relation nommée (table, etc)" + +#~ msgid "Could not send cancel request: %s" +#~ msgstr "N'a pas pu envoyer la requête d'annulation : %s" + +#~ msgid "pclose failed: %m" +#~ msgstr "échec de pclose : %m" diff --git a/src/bin/psql/po/ja.po b/src/bin/psql/po/ja.po index bbdb284754a45..f33e5e97f416f 100644 --- a/src/bin/psql/po/ja.po +++ b/src/bin/psql/po/ja.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: psql (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: psql (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-06-06 10:43+0900\n" -"PO-Revision-Date: 2019-06-11 20:08+0900\n" +"POT-Creation-Date: 2020-08-21 15:55+0900\n" +"PO-Revision-Date: 2020-09-13 09:00+0200\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -16,71 +16,71 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:241 #, c-format msgid "fatal: " msgstr "致命的エラー: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:248 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:255 #, c-format msgid "warning: " msgstr "警告: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "カレントディレクトリを識別できませんでした: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "無効なバイナリ\"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "バイナリ\"%s\"を読み取ることができませんでした" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "実行対象の\"%s\"が見つかりませんでした" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "ディレクトリ\"%s\"に移動できませんでした: %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を読めませんでした: %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "pcloseが失敗しました: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 -#: command.c:1218 input.c:228 mainloop.c:82 mainloop.c:386 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: command.c:1255 input.c:227 mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" msgstr "メモリ不足です" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "メモリ不足です\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "null ポインターを複製することはできません(内部エラー) \n" @@ -90,7 +90,7 @@ msgstr "null ポインターを複製することはできません(内部エラ msgid "could not look up effective user ID %ld: %s" msgstr "実効ユーザID %ld が見つかりませんでした: %s" -#: ../../common/username.c:45 command.c:555 +#: ../../common/username.c:45 command.c:559 msgid "user does not exist" msgstr "ユーザが存在しません" @@ -129,410 +129,335 @@ msgstr "子プロセスはシグナル%dにより終了しました: %s" msgid "child process exited with unrecognized status %d" msgstr "子プロセスは認識できないステータス %d で終了しました" -#: ../../fe_utils/print.c:353 +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "キャンセル要求を送信しました\n" + +#: ../../fe_utils/cancel.c:165 +msgid "Could not send cancel request: " +msgstr "キャンセル要求を送信できませんでした: " + +#: ../../fe_utils/cancel.c:210 +#, c-format +msgid "Could not send cancel request: %s" +msgstr "キャンセル要求を送信できませんでした: %s" + +#: ../../fe_utils/print.c:336 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu 行)" -#: ../../fe_utils/print.c:3058 +#: ../../fe_utils/print.c:3039 #, c-format msgid "Interrupted\n" msgstr "割り込み\n" -#: ../../fe_utils/print.c:3122 +#: ../../fe_utils/print.c:3103 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" -msgstr "" -"テーブルの内容にヘッダーを追加できません: 列数 %d が制限値を超えています。\n" +msgstr "テーブルの内容にヘッダーを追加できません: 列数 %d が制限値を超えています。\n" -#: ../../fe_utils/print.c:3162 +#: ../../fe_utils/print.c:3143 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" -msgstr "" -"テーブルの内容にセルを追加できません: セルの合計数 %d が制限値を超えていま" -"す。\n" +msgstr "テーブルの内容にセルを追加できません: セルの合計数 %d が制限値を超えています。\n" -#: ../../fe_utils/print.c:3417 +#: ../../fe_utils/print.c:3398 #, c-format msgid "invalid output format (internal error): %d" msgstr "出力フォーマットが無効(内部エラー):%d" -#: ../../fe_utils/psqlscan.l:729 +#: command.c:224 #, c-format -#| msgid "skipping recursive expansion of variable \"%s\"\n" -msgid "skipping recursive expansion of variable \"%s\"" -msgstr "変数\"%s\"の再帰展開をスキップしています" - -#: command.c:221 -#, c-format -#| msgid "invalid command \\%s\n" msgid "invalid command \\%s" msgstr "不正なコマンド \\%s " -#: command.c:223 +#: command.c:226 #, c-format -#| msgid "Use \\? for help." msgid "Try \\? for help." msgstr " \\? でヘルプを表示します。" -#: command.c:241 +#: command.c:244 #, c-format -#| msgid "\\%s: extra argument \"%s\" ignored\n" msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: 余分な引数\"%s\"は無視されました" -#: command.c:293 +#: command.c:296 #, c-format -#| msgid "" -#| "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block\n" msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" -msgstr "" -"\\%s コマンドは無視されます; 現在の\\ifブロックを抜けるには\\endifまたはCtrl-" -"Cを使用します" +msgstr "\\%s コマンドは無視されます; 現在の\\ifブロックを抜けるには\\endifまたはCtrl-Cを使用します" -#: command.c:553 +#: command.c:557 #, c-format -#| msgid "could not get home directory for user ID %ld: %s\n" msgid "could not get home directory for user ID %ld: %s" msgstr "ユーザID %ldのホームディレクトリを取得できませんでした : %s" -#: command.c:571 +#: command.c:575 #, c-format -#| msgid "\\%s: could not change directory to \"%s\": %s\n" msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: ディレクトリを\"%s\"に変更できませんでした: %m" -#: command.c:596 +#: command.c:600 #, c-format msgid "You are currently not connected to a database.\n" msgstr "現在データベースに接続していません。\n" -#: command.c:609 +#: command.c:613 #, c-format -#| msgid "" -#| "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at " -#| "port \"%s\".\n" -msgid "" -"You are connected to database \"%s\" as user \"%s\" on address \"%s\" at " -"port \"%s\".\n" -msgstr "" -"データベース\"%s\"にユーザ\"%s\"として、ホスト\"%s\"上のポート\"%s\"で接続し" -"ています。\n" +msgid "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" +msgstr "データベース\"%s\"にユーザ\"%s\"として、ホスト\"%s\"上のポート\"%s\"で接続しています。\n" -#: command.c:612 +#: command.c:616 #, c-format -msgid "" -"You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at " -"port \"%s\".\n" -msgstr "" -"データベース\"%s\"にユーザ\"%s\"として、\"%s\"のソケットを介してポート\"%s" -"\"で接続しています。\n" +msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" +msgstr "データベース\"%s\"にユーザ\"%s\"として、\"%s\"のソケットを介してポート\"%s\"で接続しています。\n" -#: command.c:618 +#: command.c:622 #, c-format -#| msgid "" -#| "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at " -#| "port \"%s\".\n" -msgid "" -"You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address " -"\"%s\") at port \"%s\".\n" -msgstr "" -"データベース\"%s\"にユーザ\"%s\"として、ホスト\"%s\"(アドレス\"%s\")上のポー" -"ト\"%s\"で接続しています。\n" +msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" +msgstr "データベース\"%s\"にユーザ\"%s\"として、ホスト\"%s\"(アドレス\"%s\")上のポート\"%s\"で接続しています。\n" -#: command.c:621 +#: command.c:625 #, c-format -msgid "" -"You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port " -"\"%s\".\n" -msgstr "" -"データベース\"%s\"にユーザ\"%s\"として、ホスト\"%s\"上のポート\"%s\"で接続し" -"ています。\n" +msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" +msgstr "データベース\"%s\"にユーザ\"%s\"として、ホスト\"%s\"上のポート\"%s\"で接続しています。\n" -#: command.c:930 command.c:1026 command.c:2411 +#: command.c:965 command.c:1061 command.c:2550 #, c-format -#| msgid "no query buffer\n" msgid "no query buffer" msgstr "問い合わせバッファがありません" -#: command.c:963 command.c:4801 +#: command.c:998 command.c:5061 #, c-format -#| msgid "invalid line number: %s\n" msgid "invalid line number: %s" msgstr "不正な行番号です: %s" -#: command.c:1017 +#: command.c:1052 #, c-format -#| msgid "The server (version %s) does not support editing function source.\n" msgid "The server (version %s) does not support editing function source." -msgstr "" -"このサーバ(バージョン%s)は関数ソースコードの編集をサポートしていません。" +msgstr "このサーバ(バージョン%s)は関数ソースコードの編集をサポートしていません。" -#: command.c:1020 +#: command.c:1055 #, c-format -#| msgid "The server (version %s) does not support editing view definitions.\n" msgid "The server (version %s) does not support editing view definitions." msgstr "このサーバ(バージョン%s)はビュー定義の編集をサポートしていません。" -#: command.c:1102 +#: command.c:1137 msgid "No changes" msgstr "変更されていません" -#: command.c:1179 +#: command.c:1216 #, c-format -#| msgid "%s: invalid encoding name or conversion procedure not found\n" msgid "%s: invalid encoding name or conversion procedure not found" -msgstr "" -"%s: エンコーディング名が不正であるか、または変換プロシージャが見つかりませ" -"ん。" +msgstr "%s: エンコーディング名が不正であるか、または変換プロシージャが見つかりません。" -#: command.c:1214 command.c:1853 command.c:3089 command.c:4903 common.c:175 -#: common.c:224 common.c:521 common.c:1362 common.c:1390 common.c:1498 -#: common.c:1601 common.c:1639 copy.c:490 copy.c:709 help.c:63 large_obj.c:157 +#: command.c:1251 command.c:1992 command.c:3253 command.c:5163 common.c:174 +#: common.c:223 common.c:388 common.c:1237 common.c:1265 common.c:1373 +#: common.c:1480 common.c:1518 copy.c:488 copy.c:707 help.c:62 large_obj.c:157 #: large_obj.c:192 large_obj.c:254 #, c-format msgid "%s" msgstr "%s" -#: command.c:1221 +#: command.c:1258 msgid "There is no previous error." msgstr "直前のエラーはありません。" -#: command.c:1409 command.c:1714 command.c:1728 command.c:1745 command.c:1905 -#: command.c:2142 command.c:2378 command.c:2418 +#: command.c:1371 +#, c-format +msgid "\\%s: missing right parenthesis" +msgstr "\\%s: 右括弧がありません" + +#: command.c:1548 command.c:1853 command.c:1867 command.c:1884 command.c:2044 +#: command.c:2281 command.c:2517 command.c:2557 #, c-format -#| msgid "\\%s: missing required argument\n" msgid "\\%s: missing required argument" msgstr "\\%s: 必要な引数がありません" -#: command.c:1540 +#: command.c:1679 #, c-format -#| msgid "\\elif: cannot occur after \\else\n" msgid "\\elif: cannot occur after \\else" msgstr "\\elif: \\else の後には置けません" -#: command.c:1545 +#: command.c:1684 #, c-format -#| msgid "\\elif: no matching \\if\n" msgid "\\elif: no matching \\if" msgstr "\\elif: 対応する \\if がありません" -#: command.c:1609 +#: command.c:1748 #, c-format -#| msgid "\\else: cannot occur after \\else\n" msgid "\\else: cannot occur after \\else" msgstr "\\else: \\else の後には置けません" -#: command.c:1614 +#: command.c:1753 #, c-format -#| msgid "\\else: no matching \\if\n" msgid "\\else: no matching \\if" msgstr "\\else: 対応する \\if がありません" -#: command.c:1654 +#: command.c:1793 #, c-format -#| msgid "\\endif: no matching \\if\n" msgid "\\endif: no matching \\if" msgstr "\\endif: 対応する \\if がありません" -#: command.c:1809 +#: command.c:1948 msgid "Query buffer is empty." msgstr "問い合わせバッファは空です。" -#: command.c:1831 +#: command.c:1970 msgid "Enter new password: " msgstr "新しいパスワードを入力してください: " -#: command.c:1832 +#: command.c:1971 msgid "Enter it again: " msgstr "もう一度入力してください: " -#: command.c:1836 +#: command.c:1975 #, c-format -#| msgid "Passwords didn't match.\n" msgid "Passwords didn't match." msgstr "パスワードが一致しませんでした。" -#: command.c:1935 +#: command.c:2074 #, c-format -#| msgid "\\%s: could not read value for variable\n" msgid "\\%s: could not read value for variable" msgstr "\\%s: 変数の値を読み取ることができませんでした" -#: command.c:2038 +#: command.c:2177 msgid "Query buffer reset (cleared)." msgstr "問い合わせバッファがリセット(クリア)されました。" -#: command.c:2060 +#: command.c:2199 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "ファイル\"%s\"にヒストリーを出力しました。\n" -#: command.c:2147 +#: command.c:2286 #, c-format -#| msgid "\\%s: environment variable name must not contain \"=\"\n" msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s: 環境変数名に\"=\"を含めることはできません" -#: command.c:2208 +#: command.c:2347 #, c-format -#| msgid "The server (version %s) does not support showing function source.\n" msgid "The server (version %s) does not support showing function source." msgstr "このサーバ(バージョン%s)は関数ソースの表示をサポートしていません。" -#: command.c:2211 +#: command.c:2350 #, c-format -#| msgid "The server (version %s) does not support showing view definitions.\n" msgid "The server (version %s) does not support showing view definitions." msgstr "このサーバ(バージョン%s)はビュー定義の表示をサポートしていません。" -#: command.c:2218 +#: command.c:2357 #, c-format -#| msgid "function name is required\n" msgid "function name is required" msgstr "関数名が必要です" -#: command.c:2220 +#: command.c:2359 #, c-format -#| msgid "view name is required\n" msgid "view name is required" msgstr "ビュー名が必要です" -#: command.c:2350 +#: command.c:2489 msgid "Timing is on." msgstr "タイミングは on です。" -#: command.c:2352 +#: command.c:2491 msgid "Timing is off." msgstr "タイミングは off です。" -#: command.c:2437 command.c:2465 command.c:3485 command.c:3488 command.c:3491 -#: command.c:3497 command.c:3499 command.c:3507 command.c:3517 command.c:3526 -#: command.c:3540 command.c:3557 command.c:3615 common.c:71 copy.c:333 -#: copy.c:405 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 +#: command.c:2576 command.c:2604 command.c:3661 command.c:3664 command.c:3667 +#: command.c:3673 command.c:3675 command.c:3683 command.c:3693 command.c:3702 +#: command.c:3716 command.c:3733 command.c:3791 common.c:70 copy.c:331 +#: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format -#| msgid "%s: %s" msgid "%s: %m" msgstr "%s: %m" -#: command.c:2849 startup.c:240 startup.c:291 +#: command.c:2988 startup.c:236 startup.c:287 msgid "Password: " msgstr "パスワード: " -#: command.c:2854 startup.c:288 +#: command.c:2993 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "ユーザ %s のパスワード: " -#: command.c:2905 +#: command.c:3064 #, c-format -#| msgid "" -#| "All connection parameters must be supplied because no database connection " -#| "exists\n" -msgid "" -"All connection parameters must be supplied because no database connection " -"exists" -msgstr "" -"既存のデータベース接続がないため、すべての接続パラメータを指定しなければなり" -"ません" +msgid "All connection parameters must be supplied because no database connection exists" +msgstr "既存のデータベース接続がないため、すべての接続パラメータを指定しなければなりません" -#: command.c:3093 +#: command.c:3257 #, c-format -#| msgid "Previous connection kept\n" msgid "Previous connection kept" msgstr "以前の接続は保持されています" -#: command.c:3097 +#: command.c:3261 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:3136 +#: command.c:3310 #, c-format -#| msgid "" -#| "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at " -#| "port \"%s\".\n" -msgid "" -"You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at " -"port \"%s\".\n" -msgstr "" -"データベース\"%s\"にユーザ\"%s\"として、ホスト\"%s\"のポート\"%s\"で接続しま" -"した。\n" +msgid "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" +msgstr "データベース\"%s\"にユーザ\"%s\"として、ホスト\"%s\"のポート\"%s\"で接続しました。\n" -#: command.c:3139 +#: command.c:3313 #, c-format -msgid "" -"You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" " -"at port \"%s\".\n" -msgstr "" -"データベース\"%s\"にユーザ\"%s\"として、ソケット\"%s\"のポート\"%s\"を介して" -"接続しました。\n" +msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" +msgstr "データベース\"%s\"にユーザ\"%s\"として、ソケット\"%s\"のポート\"%s\"を介して接続しました。\n" -#: command.c:3145 +#: command.c:3319 #, c-format -#| msgid "" -#| "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at " -#| "port \"%s\".\n" -msgid "" -"You are now connected to database \"%s\" as user \"%s\" on host \"%s" -"\" (address \"%s\") at port \"%s\".\n" -msgstr "" -"データベース\"%s\"にユーザ\"%s\"として、ホスト\"%s\"(アドレス\"%s\")のポート" -"\"%s\"で接続しました。\n" +msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" +msgstr "データベース\"%s\"にユーザ\"%s\"として、ホスト\"%s\"(アドレス\"%s\")のポート\"%s\"で接続しました。\n" -#: command.c:3148 +#: command.c:3322 #, c-format -msgid "" -"You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at " -"port \"%s\".\n" -msgstr "" -"データベース\"%s\"にユーザ\"%s\"として、ホスト\"%s\"のポート\"%s\"を介して接" -"続しました。\n" +msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" +msgstr "データベース\"%s\"にユーザ\"%s\"として、ホスト\"%s\"のポート\"%s\"を介して接続しました。\n" -#: command.c:3153 +#: command.c:3327 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "データベース\"%s\"にユーザ\"%s\"として接続しました。\n" -#: command.c:3186 +#: command.c:3360 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s、サーバ %s)\n" -#: command.c:3194 +#: command.c:3368 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" " Some psql features might not work.\n" msgstr "" -"警告: %s のメジャーバージョンは %s ですが、サーバのメジャーバージョンは %s " -"です。\n" +"警告: %s のメジャーバージョンは %s ですが、サーバのメジャーバージョンは %s です。\n" " psql の機能の中で、動作しないものがあるかもしれません。\n" -#: command.c:3232 +#: command.c:3407 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "SSL 接続 (プロトコル: %s、暗号化方式: %s、ビット長: %s、圧縮: %s)\n" -#: command.c:3233 command.c:3234 command.c:3235 +#: command.c:3408 command.c:3409 command.c:3410 msgid "unknown" msgstr "不明" -#: command.c:3236 help.c:46 +#: command.c:3411 help.c:45 msgid "off" msgstr "オフ" -#: command.c:3236 help.c:46 +#: command.c:3411 help.c:45 msgid "on" msgstr "オン" -#: command.c:3250 +#: command.c:3425 #, c-format -msgid "GSSAPI Encrypted connection\n" +msgid "GSSAPI-encrypted connection\n" msgstr "GSSAPI暗号化接続\n" -#: command.c:3270 +#: command.c:3445 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -540,291 +465,261 @@ msgid "" " page \"Notes for Windows users\" for details.\n" msgstr "" "警告:コンソールのコードページ(%u)がWindowsのコードページ(%u)と異なるため、\n" -" 8ビット文字が正しく表示されない可能性があります。詳細はpsqlリファレンス" -"マニュアルの\n" -" \"Windowsユーザ向けの注意\" (Notes for Windows users)を参照してくださ" -"い。\n" +" 8ビット文字が正しく表示されない可能性があります。詳細はpsqlリファレンスマニュアルの\n" +" \"Windowsユーザ向けの注意\" (Notes for Windows users)を参照してください。\n" -#: command.c:3374 +#: command.c:3549 #, c-format -#| msgid "" -#| "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a " -#| "line number\n" -msgid "" -"environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a " -"line number" +msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number" msgstr "環境変数PSQL_EDITOR_LINENUMBER_ARGで行番号を指定する必要があります" -#: command.c:3403 +#: command.c:3578 #, c-format -#| msgid "could not start editor \"%s\"\n" msgid "could not start editor \"%s\"" msgstr "エディタ\"%s\"を起動できませんでした" -#: command.c:3405 +#: command.c:3580 #, c-format -#| msgid "could not start /bin/sh\n" msgid "could not start /bin/sh" msgstr "/bin/shを起動できませんでした" -#: command.c:3443 +#: command.c:3618 #, c-format -#| msgid "could not locate temporary directory: %s\n" msgid "could not locate temporary directory: %s" msgstr "一時ディレクトリが見つかりませんでした: %s" -#: command.c:3470 +#: command.c:3645 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "一時ファイル\"%s\"をオープンできませんでした: %m" -#: command.c:3763 +#: command.c:3950 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: 曖昧な短縮形\"%s\"が\"%s\"と\"%s\"のどちらにも合致します" -#: command.c:3783 +#: command.c:3970 #, c-format -#| msgid "" -#| "\\pset: allowed formats are unaligned, aligned, wrapped, html, asciidoc, " -#| "latex, latex-longtable, troff-ms\n" -msgid "" -"\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-" -"longtable, troff-ms, unaligned, wrapped" -msgstr "" -"\\pset: 有効なフォーマットはaligned, asciidoc, csv, html, latex, latex-" -"longtable, troff-ms, unaligned, wrapped" +msgid "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" +msgstr "\\pset: 有効なフォーマットはaligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" -#: command.c:3802 +#: command.c:3989 #, c-format -#| msgid "\\pset: allowed line styles are ascii, old-ascii, unicode\n" msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: 有効な線のスタイルは ascii, old-ascii, unicode" -#: command.c:3817 +#: command.c:4004 #, c-format -#| msgid "\\pset: allowed Unicode border line styles are single, double\n" msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: 有効な Unicode 罫線のスタイルは single, double" -#: command.c:3832 +#: command.c:4019 #, c-format -#| msgid "\\pset: allowed Unicode column line styles are single, double\n" msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: 有効な Unicode 列罫線のスタイルは single, double" -#: command.c:3847 +#: command.c:4034 #, c-format -#| msgid "\\pset: allowed Unicode header line styles are single, double\n" msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: 有効な Unicode ヘッダー罫線のスタイルは single, double" -#: command.c:3890 +#: command.c:4077 #, c-format -#| msgid "COPY escape must be a single one-byte character" msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsepは単一の1バイト文字でなければなりません" -#: command.c:3895 +#: command.c:4082 #, c-format -#| msgid "COPY delimiter cannot be newline or carriage return" -msgid "" -"\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage " -"return" -msgstr "" -"\\pset: csv_fieldsepはダブルクォート、改行(LF)または復帰(CR)にはできません" +msgid "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage return" +msgstr "\\pset: csv_fieldsepはダブルクォート、改行(LF)または復帰(CR)にはできません" -#: command.c:4032 command.c:4218 +#: command.c:4219 command.c:4407 #, c-format -#| msgid "\\pset: unknown option: %s\n" msgid "\\pset: unknown option: %s" msgstr "\\pset: 未定義のオプション:%s" -#: command.c:4050 +#: command.c:4239 #, c-format msgid "Border style is %d.\n" msgstr "罫線スタイルは %d です。\n" -#: command.c:4056 +#: command.c:4245 #, c-format msgid "Target width is unset.\n" msgstr "ターゲットの幅が設定されていません。\n" -#: command.c:4058 +#: command.c:4247 #, c-format msgid "Target width is %d.\n" msgstr "ターゲットの幅は %d です。\n" -#: command.c:4065 +#: command.c:4254 #, c-format msgid "Expanded display is on.\n" msgstr "拡張表示は on です。\n" -#: command.c:4067 +#: command.c:4256 #, c-format msgid "Expanded display is used automatically.\n" msgstr "拡張表示が自動的に使われます。\n" -#: command.c:4069 +#: command.c:4258 #, c-format msgid "Expanded display is off.\n" msgstr "拡張表示は off です。\n" -#: command.c:4075 +#: command.c:4264 #, c-format -#| msgid "Field separator is \"%s\".\n" msgid "Field separator for CSV is \"%s\".\n" msgstr "CSVのフィールド区切り文字は\"%s\"です。\n" -#: command.c:4083 command.c:4091 +#: command.c:4272 command.c:4280 #, c-format msgid "Field separator is zero byte.\n" msgstr "フィールド区切り文字はゼロバイトです。\n" -#: command.c:4085 +#: command.c:4274 #, c-format msgid "Field separator is \"%s\".\n" msgstr "フィールド区切り文字は\"%s\"です。\n" -#: command.c:4098 +#: command.c:4287 #, c-format msgid "Default footer is on.\n" msgstr "デフォルトフッター(行数の表示)は on です。\n" -#: command.c:4100 +#: command.c:4289 #, c-format msgid "Default footer is off.\n" msgstr "デフォルトフッター(行数の表示)は off です。\n" -#: command.c:4106 +#: command.c:4295 #, c-format msgid "Output format is %s.\n" msgstr "出力形式は %s です。\n" -#: command.c:4112 +#: command.c:4301 #, c-format msgid "Line style is %s.\n" msgstr "線のスタイルは %s です。\n" -#: command.c:4119 +#: command.c:4308 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null表示は\"%s\"です。\n" -#: command.c:4127 +#: command.c:4316 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "『数値出力時のロケール調整』は on です。\n" -#: command.c:4129 +#: command.c:4318 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "『数値出力時のロケール調整』は off です。\n" -#: command.c:4136 +#: command.c:4325 #, c-format msgid "Pager is used for long output.\n" msgstr "表示が縦に長くなる場合はページャーを使います。\n" -#: command.c:4138 +#: command.c:4327 #, c-format msgid "Pager is always used.\n" msgstr "常にページャーを使います。\n" -#: command.c:4140 +#: command.c:4329 #, c-format msgid "Pager usage is off.\n" msgstr "「ページャーを使う」は off です。\n" -#: command.c:4146 +#: command.c:4335 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" msgstr[0] "%d 行未満の場合、ページャーは使われません。\n" -#: command.c:4156 command.c:4166 +#: command.c:4345 command.c:4355 #, c-format msgid "Record separator is zero byte.\n" msgstr "レコードの区切り文字はゼロバイトです\n" -#: command.c:4158 +#: command.c:4347 #, c-format msgid "Record separator is .\n" msgstr "レコード区切り文字はです。\n" -#: command.c:4160 +#: command.c:4349 #, c-format msgid "Record separator is \"%s\".\n" msgstr "レコード区切り記号は\"%s\"です。\n" -#: command.c:4173 +#: command.c:4362 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "テーブル属性は\"%s\"です。\n" -#: command.c:4176 +#: command.c:4365 #, c-format msgid "Table attributes unset.\n" msgstr "テーブル属性は設定されていません。\n" -#: command.c:4183 +#: command.c:4372 #, c-format msgid "Title is \"%s\".\n" msgstr "タイトルは\"%s\"です。\n" -#: command.c:4185 +#: command.c:4374 #, c-format msgid "Title is unset.\n" msgstr "タイトルは設定されていません。\n" -#: command.c:4192 +#: command.c:4381 #, c-format msgid "Tuples only is on.\n" msgstr "「タプルのみ表示」は on です。\n" -#: command.c:4194 +#: command.c:4383 #, c-format msgid "Tuples only is off.\n" msgstr "「タプルのみ表示」は off です。\n" -#: command.c:4200 +#: command.c:4389 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "Unicode の罫線スタイルは\"%s\"です。\n" -#: command.c:4206 +#: command.c:4395 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "Unicode 行罫線のスタイルは\"%s\"です。\n" -#: command.c:4212 +#: command.c:4401 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "Unicodeヘッダー行のスタイルは\"%s\"です。\n" -#: command.c:4374 +#: command.c:4634 #, c-format -#| msgid "\\!: failed\n" msgid "\\!: failed" msgstr "\\!: 失敗" -#: command.c:4399 common.c:781 +#: command.c:4659 common.c:648 #, c-format -#| msgid "\\watch cannot be used with an empty query\n" msgid "\\watch cannot be used with an empty query" msgstr "\\watchは空の問い合わせでは使えません" -#: command.c:4440 +#: command.c:4700 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (%g 秒毎)\n" -#: command.c:4443 +#: command.c:4703 #, c-format msgid "%s (every %gs)\n" msgstr "%s (%g 秒毎)\n" -#: command.c:4497 command.c:4504 common.c:681 common.c:688 common.c:1345 +#: command.c:4757 command.c:4764 common.c:548 common.c:555 common.c:1220 #, c-format msgid "" "********* QUERY **********\n" @@ -837,235 +732,208 @@ msgstr "" "**************************\n" "\n" -#: command.c:4696 +#: command.c:4956 #, c-format -#| msgid "\"%s.%s\" is not a view\n" msgid "\"%s.%s\" is not a view" msgstr "\"%s.%s\"はビューではありません" -#: command.c:4712 +#: command.c:4972 #, c-format -#| msgid "could not parse reloptions array\n" msgid "could not parse reloptions array" msgstr "reloptions配列をパースできませんでした" -#: common.c:160 +#: common.c:159 #, c-format -#| msgid "cannot escape without active connection\n" msgid "cannot escape without active connection" msgstr "有効な接続がないのでエスケープできません" -#: common.c:201 +#: common.c:200 #, c-format -#| msgid "" -#| "shell command argument contains a newline or carriage return: \"%s\"\n" msgid "shell command argument contains a newline or carriage return: \"%s\"" msgstr "シェルコマンドの引数に改行(LF)または復帰(CR)が含まれています: \"%s\"" -#: common.c:395 +#: common.c:304 #, c-format -#| msgid "connection to server was lost\n" msgid "connection to server was lost" msgstr "サーバへの接続が失われました" -#: common.c:399 +#: common.c:308 #, c-format msgid "The connection to the server was lost. Attempting reset: " msgstr "サーバへの接続が失われました。リセットしています: " -#: common.c:404 +#: common.c:313 #, c-format msgid "Failed.\n" msgstr "失敗。\n" -#: common.c:411 +#: common.c:326 #, c-format msgid "Succeeded.\n" msgstr "成功。\n" -#: common.c:511 common.c:1063 common.c:1280 +#: common.c:378 common.c:938 common.c:1155 #, c-format -#| msgid "unexpected PQresultStatus: %d\n" msgid "unexpected PQresultStatus: %d" msgstr "想定外のPQresultStatus: %d" -#: common.c:620 +#: common.c:487 #, c-format msgid "Time: %.3f ms\n" msgstr "時間: %.3f ミリ秒\n" -#: common.c:635 +#: common.c:502 #, c-format msgid "Time: %.3f ms (%02d:%06.3f)\n" msgstr "時間: %.3f ミリ秒(%02d:%06.3f)\n" -#: common.c:644 +#: common.c:511 #, c-format msgid "Time: %.3f ms (%02d:%02d:%06.3f)\n" msgstr "時間: %.3f ミリ秒 (%02d:%02d:%06.3f)\n" -#: common.c:651 +#: common.c:518 #, c-format msgid "Time: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" msgstr "時間: %.3f ミリ秒 (%.0f 日 %02d:%02d:%06.3f)\n" -#: common.c:675 common.c:733 common.c:1316 +#: common.c:542 common.c:600 common.c:1191 #, c-format -#| msgid "You are currently not connected to a database.\n" msgid "You are currently not connected to a database." msgstr "現在データベースに接続していません。" -#: common.c:788 +#: common.c:655 #, c-format -#| msgid "\\watch cannot be used with COPY\n" msgid "\\watch cannot be used with COPY" msgstr "\\watchはCOPYと一緒には使えません" -#: common.c:793 +#: common.c:660 #, c-format -#| msgid "unexpected result status for \\watch\n" msgid "unexpected result status for \\watch" msgstr "\\watchで想定外の結果ステータス" -#: common.c:823 +#: common.c:690 #, c-format -msgid "" -"Asynchronous notification \"%s\" with payload \"%s\" received from server " -"process with PID %d.\n" -msgstr "" -"PID %3$dのサーバプロセスから、ペイロード\"%2$s\"を持つ非同期通知\"%1$s\"を受" -"信しました。\n" +msgid "Asynchronous notification \"%s\" with payload \"%s\" received from server process with PID %d.\n" +msgstr "PID %3$dのサーバプロセスから、ペイロード\"%2$s\"を持つ非同期通知\"%1$s\"を受信しました。\n" -#: common.c:826 +#: common.c:693 #, c-format -msgid "" -"Asynchronous notification \"%s\" received from server process with PID %d.\n" +msgid "Asynchronous notification \"%s\" received from server process with PID %d.\n" msgstr "PID %2$dのサーバプロセスから非同期通知\"%1$s\"を受信しました。\n" -#: common.c:889 +#: common.c:726 common.c:743 +#, c-format +msgid "could not print result table: %m" +msgstr "結果テーブルを表示できませんでした: %m" + +#: common.c:764 #, c-format -#| msgid "no rows returned for \\gset\n" msgid "no rows returned for \\gset" msgstr "\\gset に対して返すべき行がありません" -#: common.c:894 +#: common.c:769 #, c-format -#| msgid "more than one row returned for \\gset\n" msgid "more than one row returned for \\gset" msgstr "\\gset に対して複数の行が返されました" -#: common.c:1325 +#: common.c:1200 #, c-format msgid "" -"***(Single step mode: verify command)" -"*******************************************\n" +"***(Single step mode: verify command)*******************************************\n" "%s\n" -"***(press return to proceed or enter x and return to cancel)" -"********************\n" +"***(press return to proceed or enter x and return to cancel)********************\n" msgstr "" "***(シングルステップモード: コマンドを確認してください)********\n" "%s\n" "***([Enter] を押して進むか、x [Enter] でキャンセル)**************\n" -#: common.c:1380 +#: common.c:1255 #, c-format -#| msgid "" -#| "The server (version %s) does not support savepoints for " -#| "ON_ERROR_ROLLBACK.\n" -msgid "" -"The server (version %s) does not support savepoints for ON_ERROR_ROLLBACK." -msgstr "" -"このサーバ(バージョン%s)はON_ERROR_ROLLBACKのためのセーブポイントをサポートし" -"ていません。" +msgid "The server (version %s) does not support savepoints for ON_ERROR_ROLLBACK." +msgstr "このサーバ(バージョン%s)はON_ERROR_ROLLBACKのためのセーブポイントをサポートしていません。" -#: common.c:1443 +#: common.c:1318 #, c-format -#| msgid "STATEMENT: %s\n" msgid "STATEMENT: %s" msgstr "ステートメント: %s" -#: common.c:1486 +#: common.c:1361 #, c-format -#| msgid "unexpected transaction status (%d)\n" msgid "unexpected transaction status (%d)" msgstr "想定外のトランザクション状態(%d)" -#: common.c:1623 describe.c:2002 +#: common.c:1502 describe.c:2001 msgid "Column" msgstr "列" -#: common.c:1624 describe.c:179 describe.c:394 describe.c:412 describe.c:457 -#: describe.c:474 describe.c:963 describe.c:1127 describe.c:1712 -#: describe.c:1736 describe.c:2003 describe.c:3673 describe.c:3858 -#: describe.c:4091 describe.c:5297 +#: common.c:1503 describe.c:177 describe.c:393 describe.c:411 describe.c:456 +#: describe.c:473 describe.c:962 describe.c:1126 describe.c:1711 +#: describe.c:1735 describe.c:2002 describe.c:3719 describe.c:3929 +#: describe.c:4162 describe.c:5368 msgid "Type" -msgstr "型" +msgstr "タイプ" -#: common.c:1673 +#: common.c:1552 #, c-format msgid "The command has no result, or the result has no columns.\n" msgstr "このコマンドは結果を返却しないか、結果にカラムが含まれません。\n" -#: copy.c:100 +#: copy.c:98 #, c-format -#| msgid "\\copy: arguments required\n" msgid "\\copy: arguments required" msgstr "\\copy: 引数が必要です" -#: copy.c:255 +#: copy.c:253 #, c-format -#| msgid "\\copy: parse error at \"%s\"\n" msgid "\\copy: parse error at \"%s\"" msgstr "\\copy: \"%s\"で構文解析エラー" -#: copy.c:257 +#: copy.c:255 #, c-format -#| msgid "\\copy: parse error at end of line\n" msgid "\\copy: parse error at end of line" msgstr "\\copy: 行の末尾で構文解析エラー" -#: copy.c:330 +#: copy.c:328 #, c-format msgid "could not execute command \"%s\": %m" msgstr "コマンド\"%s\"を実行できませんでした: %m" -#: copy.c:346 +#: copy.c:344 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ファイル\"%s\"のstatに失敗しました: %m" -#: copy.c:350 +#: copy.c:348 #, c-format -#| msgid "%s: cannot copy from/to a directory\n" msgid "%s: cannot copy from/to a directory" msgstr "%s: ディレクトリから/へのコピーはできません" -#: copy.c:387 +#: copy.c:385 #, c-format msgid "could not close pipe to external command: %m" msgstr "外部コマンドに対するパイプをクローズできませんでした: %m" -#: copy.c:392 +#: copy.c:390 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: copy.c:455 copy.c:465 +#: copy.c:453 copy.c:463 #, c-format -#| msgid "could not write COPY data: %s\n" msgid "could not write COPY data: %m" msgstr "COPY データを書き込めませんでした: %m" -#: copy.c:471 +#: copy.c:469 #, c-format msgid "COPY data transfer failed: %s" msgstr "COPY データの転送に失敗しました: %s" -#: copy.c:532 +#: copy.c:530 msgid "canceled by user" msgstr "ユーザによってキャンセルされました" -#: copy.c:543 +#: copy.c:541 msgid "" "Enter data to be copied followed by a newline.\n" "End with a backslash and a period on a line by itself, or an EOF signal." @@ -1073,1207 +941,1165 @@ msgstr "" "コピーするデータに続いて改行を入力してください。\n" "バックスラッシュとピリオドだけの行、もしくは EOF シグナルで終了します。" -#: copy.c:671 +#: copy.c:669 msgid "aborted because of read failure" msgstr "読み取りエラーのため中止" -#: copy.c:705 +#: copy.c:703 msgid "trying to exit copy mode" msgstr "コピーモードを終了しようとしています。" -#: crosstabview.c:124 +#: crosstabview.c:123 #, c-format -#| msgid "\\crosstabview: statement did not return a result set\n" msgid "\\crosstabview: statement did not return a result set" msgstr "\\crosstabview: ステートメントは結果セットを返しませんでした" -#: crosstabview.c:130 +#: crosstabview.c:129 #, c-format -#| msgid "\\crosstabview: query must return at least three columns\n" msgid "\\crosstabview: query must return at least three columns" msgstr "\\crosstabview: 問い合わせは、少なくとも3つの列を返す必要があります" -#: crosstabview.c:157 +#: crosstabview.c:156 #, c-format -#| msgid "" -#| "\\crosstabview: vertical and horizontal headers must be different " -#| "columns\n" -msgid "" -"\\crosstabview: vertical and horizontal headers must be different columns" -msgstr "" -"\\crosstabview: 垂直方向と水平方向のヘッダーは異なった列にする必要があります" +msgid "\\crosstabview: vertical and horizontal headers must be different columns" +msgstr "\\crosstabview: 垂直方向と水平方向のヘッダーは異なった列にする必要があります" -#: crosstabview.c:173 +#: crosstabview.c:172 #, c-format -#| msgid "" -#| "\\crosstabview: data column must be specified when query returns more " -#| "than three columns\n" -msgid "" -"\\crosstabview: data column must be specified when query returns more than " -"three columns" -msgstr "" -"\\crosstabview: 問い合わせが 4 つ以上の列を返す場合、データ列を指定する必要が" -"あります" +msgid "\\crosstabview: data column must be specified when query returns more than three columns" +msgstr "\\crosstabview: 問い合わせが 4 つ以上の列を返す場合、データ列を指定する必要があります" -#: crosstabview.c:229 +#: crosstabview.c:228 #, c-format -#| msgid "\\crosstabview: maximum number of columns (%d) exceeded\n" msgid "\\crosstabview: maximum number of columns (%d) exceeded" msgstr "列数が制限値(%d)を超えています" -#: crosstabview.c:398 +#: crosstabview.c:397 #, c-format -#| msgid "" -#| "\\crosstabview: query result contains multiple data values for row \"%s" -#| "\", column \"%s\"\n" -msgid "" -"\\crosstabview: query result contains multiple data values for row \"%s\", " -"column \"%s\"" -msgstr "" -"\\crosstabview: 問い合わせ結果の中の\"%s\"行 \"%s\"列に複数のデータ値が含まれ" -"ています" +msgid "\\crosstabview: query result contains multiple data values for row \"%s\", column \"%s\"" +msgstr "\\crosstabview: 問い合わせ結果の中の\"%s\"行 \"%s\"列に複数のデータ値が含まれています" -#: crosstabview.c:646 +#: crosstabview.c:645 #, c-format -#| msgid "\\crosstabview: column number %d is out of range 1..%d\n" msgid "\\crosstabview: column number %d is out of range 1..%d" msgstr "\\crosstabview: 列番号%dが範囲外です(1..%d)" -#: crosstabview.c:671 +#: crosstabview.c:670 #, c-format -#| msgid "\\crosstabview: ambiguous column name: \"%s\"\n" msgid "\\crosstabview: ambiguous column name: \"%s\"" msgstr "\\crosstabview: 列名があいまいです: \"%s\"" -#: crosstabview.c:679 +#: crosstabview.c:678 #, c-format -#| msgid "\\crosstabview: column name not found: \"%s\"\n" msgid "\\crosstabview: column name not found: \"%s\"" msgstr "\\crosstabview: 列名が見つかりませんでした: \"%s\"" -#: describe.c:77 describe.c:374 describe.c:679 describe.c:811 describe.c:955 -#: describe.c:1116 describe.c:1188 describe.c:3662 describe.c:3845 -#: describe.c:4089 describe.c:4180 describe.c:4447 describe.c:4607 -#: describe.c:4848 describe.c:4923 describe.c:4934 describe.c:4996 -#: describe.c:5421 describe.c:5504 +#: describe.c:75 describe.c:373 describe.c:678 describe.c:810 describe.c:954 +#: describe.c:1115 describe.c:1187 describe.c:3708 describe.c:3916 +#: describe.c:4160 describe.c:4251 describe.c:4518 describe.c:4678 +#: describe.c:4919 describe.c:4994 describe.c:5005 describe.c:5067 +#: describe.c:5492 describe.c:5575 msgid "Schema" msgstr "スキーマ" -#: describe.c:78 describe.c:176 describe.c:244 describe.c:252 describe.c:375 -#: describe.c:680 describe.c:812 describe.c:873 describe.c:956 describe.c:1189 -#: describe.c:3663 describe.c:3846 describe.c:4012 describe.c:4090 -#: describe.c:4181 describe.c:4260 describe.c:4448 describe.c:4532 -#: describe.c:4608 describe.c:4849 describe.c:4924 describe.c:4935 -#: describe.c:4997 describe.c:5194 describe.c:5278 describe.c:5502 -#: describe.c:5674 describe.c:5899 +#: describe.c:76 describe.c:174 describe.c:242 describe.c:250 describe.c:374 +#: describe.c:679 describe.c:811 describe.c:872 describe.c:955 describe.c:1188 +#: describe.c:3709 describe.c:3917 describe.c:4083 describe.c:4161 +#: describe.c:4252 describe.c:4331 describe.c:4519 describe.c:4603 +#: describe.c:4679 describe.c:4920 describe.c:4995 describe.c:5006 +#: describe.c:5068 describe.c:5265 describe.c:5349 describe.c:5573 +#: describe.c:5745 describe.c:5985 msgid "Name" msgstr "名前" -#: describe.c:79 describe.c:387 describe.c:405 describe.c:451 describe.c:468 +#: describe.c:77 describe.c:386 describe.c:404 describe.c:450 describe.c:467 msgid "Result data type" msgstr "結果のデータ型" -#: describe.c:87 describe.c:100 describe.c:104 describe.c:388 describe.c:406 -#: describe.c:452 describe.c:469 +#: describe.c:85 describe.c:98 describe.c:102 describe.c:387 describe.c:405 +#: describe.c:451 describe.c:468 msgid "Argument data types" msgstr "引数のデータ型" -#: describe.c:112 describe.c:119 describe.c:187 describe.c:275 describe.c:514 -#: describe.c:728 describe.c:827 describe.c:898 describe.c:1191 -#: describe.c:2021 describe.c:3451 describe.c:3698 describe.c:3892 -#: describe.c:4043 describe.c:4117 describe.c:4190 describe.c:4273 -#: describe.c:4356 describe.c:4475 describe.c:4541 describe.c:4609 -#: describe.c:4750 describe.c:4792 describe.c:4865 describe.c:4927 -#: describe.c:4936 describe.c:4998 describe.c:5220 describe.c:5300 -#: describe.c:5435 describe.c:5505 large_obj.c:290 large_obj.c:300 +#: describe.c:110 describe.c:117 describe.c:185 describe.c:273 describe.c:513 +#: describe.c:727 describe.c:826 describe.c:897 describe.c:1190 describe.c:2020 +#: describe.c:3496 describe.c:3769 describe.c:3963 describe.c:4114 +#: describe.c:4188 describe.c:4261 describe.c:4344 describe.c:4427 +#: describe.c:4546 describe.c:4612 describe.c:4680 describe.c:4821 +#: describe.c:4863 describe.c:4936 describe.c:4998 describe.c:5007 +#: describe.c:5069 describe.c:5291 describe.c:5371 describe.c:5506 +#: describe.c:5576 large_obj.c:290 large_obj.c:300 msgid "Description" msgstr "説明" -#: describe.c:137 +#: describe.c:135 msgid "List of aggregate functions" msgstr "集約関数一覧" -#: describe.c:162 +#: describe.c:160 #, c-format -#| msgid "The server (version %s) does not support access methods.\n" msgid "The server (version %s) does not support access methods." msgstr "このサーバ(バージョン%s)はアクセスメソッドをサポートしていません。" -#: describe.c:177 +#: describe.c:175 msgid "Index" msgstr "インデックス" -#: describe.c:178 describe.c:3679 describe.c:3871 describe.c:5422 +#: describe.c:176 describe.c:3727 describe.c:3942 describe.c:5493 msgid "Table" msgstr "テーブル" -#: describe.c:186 describe.c:5199 +#: describe.c:184 describe.c:5270 msgid "Handler" -msgstr "ハンドラー" +msgstr "ハンドラ" -#: describe.c:205 +#: describe.c:203 msgid "List of access methods" msgstr "アクセスメソッド一覧" -#: describe.c:231 +#: describe.c:229 #, c-format -#| msgid "The server (version %s) does not support tablespaces.\n" msgid "The server (version %s) does not support tablespaces." msgstr "このサーバ(バージョン%s) はテーブル空間をサポートしていません。" -#: describe.c:245 describe.c:253 describe.c:502 describe.c:718 describe.c:874 -#: describe.c:1115 describe.c:3674 describe.c:3847 describe.c:4016 -#: describe.c:4262 describe.c:4533 describe.c:5195 describe.c:5279 -#: describe.c:5675 describe.c:5801 describe.c:5900 large_obj.c:289 +#: describe.c:243 describe.c:251 describe.c:501 describe.c:717 describe.c:873 +#: describe.c:1114 describe.c:3720 describe.c:3918 describe.c:4087 +#: describe.c:4333 describe.c:4604 describe.c:5266 describe.c:5350 +#: describe.c:5746 describe.c:5883 describe.c:5986 describe.c:6107 +#: describe.c:6186 large_obj.c:289 msgid "Owner" msgstr "所有者" -#: describe.c:246 describe.c:254 +#: describe.c:244 describe.c:252 msgid "Location" msgstr "場所" -#: describe.c:265 describe.c:3269 +#: describe.c:263 describe.c:3313 msgid "Options" msgstr "オプション" -#: describe.c:270 describe.c:691 describe.c:890 describe.c:3690 -#: describe.c:3694 +#: describe.c:268 describe.c:690 describe.c:889 describe.c:3761 describe.c:3765 msgid "Size" msgstr "サイズ" -#: describe.c:292 +#: describe.c:290 msgid "List of tablespaces" msgstr "テーブル空間一覧" -#: describe.c:334 +#: describe.c:333 #, c-format -#| msgid "\\df only takes [anptwS+] as options\n" msgid "\\df only takes [anptwS+] as options" msgstr "\\dfで指定できるオプションは [anptwS+] のみです" -#: describe.c:342 describe.c:353 +#: describe.c:341 describe.c:352 #, c-format -#| msgid "\\df does not take a \"%c\" option with server version %s\n" msgid "\\df does not take a \"%c\" option with server version %s" msgstr "\\dfはこのサーババージョン%2$sでは\"%1$c\"オプションは指定できません" #. translator: "agg" is short for "aggregate" -#: describe.c:390 describe.c:408 describe.c:454 describe.c:471 +#: describe.c:389 describe.c:407 describe.c:453 describe.c:470 msgid "agg" msgstr "集約" -#: describe.c:391 describe.c:409 +#: describe.c:390 describe.c:408 msgid "window" msgstr "ウィンドウ" -#: describe.c:392 +#: describe.c:391 msgid "proc" msgstr "プロシージャ" -#: describe.c:393 describe.c:411 describe.c:456 describe.c:473 +#: describe.c:392 describe.c:410 describe.c:455 describe.c:472 msgid "func" msgstr "関数" -#: describe.c:410 describe.c:455 describe.c:472 describe.c:1325 +#: describe.c:409 describe.c:454 describe.c:471 describe.c:1324 msgid "trigger" msgstr "トリガー" -#: describe.c:484 +#: describe.c:483 msgid "immutable" msgstr "IMMUTABLE" -#: describe.c:485 +#: describe.c:484 msgid "stable" msgstr "STABLE" -#: describe.c:486 +#: describe.c:485 msgid "volatile" msgstr "VOLATILE" -#: describe.c:487 +#: describe.c:486 msgid "Volatility" msgstr "関数の変動性分類" -#: describe.c:495 +#: describe.c:494 msgid "restricted" msgstr "制限付き" -#: describe.c:496 +#: describe.c:495 msgid "safe" msgstr "安全" -#: describe.c:497 +#: describe.c:496 msgid "unsafe" msgstr "危険" -#: describe.c:498 +#: describe.c:497 msgid "Parallel" msgstr "並列実行" -#: describe.c:503 +#: describe.c:502 msgid "definer" msgstr "定義ロール" -#: describe.c:504 +#: describe.c:503 msgid "invoker" msgstr "起動ロール" -#: describe.c:505 +#: describe.c:504 msgid "Security" msgstr "セキュリティ" -#: describe.c:512 +#: describe.c:511 msgid "Language" msgstr "手続き言語" -#: describe.c:513 +#: describe.c:512 msgid "Source code" msgstr "ソースコード" -#: describe.c:642 +#: describe.c:641 msgid "List of functions" msgstr "関数一覧" -#: describe.c:690 +#: describe.c:689 msgid "Internal name" msgstr "内部名" -#: describe.c:712 +#: describe.c:711 msgid "Elements" msgstr "構成要素" -#: describe.c:769 +#: describe.c:768 msgid "List of data types" msgstr "データ型一覧" -#: describe.c:813 +#: describe.c:812 msgid "Left arg type" msgstr "左辺の型" -#: describe.c:814 +#: describe.c:813 msgid "Right arg type" msgstr "右辺の型" -#: describe.c:815 +#: describe.c:814 msgid "Result type" msgstr "結果の型" -#: describe.c:820 describe.c:4268 describe.c:4333 describe.c:4339 -#: describe.c:4749 +#: describe.c:819 describe.c:4339 describe.c:4404 describe.c:4410 +#: describe.c:4820 describe.c:6358 describe.c:6362 msgid "Function" msgstr "関数" -#: describe.c:845 +#: describe.c:844 msgid "List of operators" msgstr "演算子一覧" -#: describe.c:875 +#: describe.c:874 msgid "Encoding" msgstr "エンコーディング" -#: describe.c:880 describe.c:4449 +#: describe.c:879 describe.c:4520 msgid "Collate" msgstr "照合順序" -#: describe.c:881 describe.c:4450 +#: describe.c:880 describe.c:4521 msgid "Ctype" msgstr "Ctype(変換演算子)" -#: describe.c:894 +#: describe.c:893 msgid "Tablespace" msgstr "テーブル空間" -#: describe.c:916 +#: describe.c:915 msgid "List of databases" msgstr "データベース一覧" -#: describe.c:957 describe.c:1118 describe.c:3664 +#: describe.c:956 describe.c:1117 describe.c:3710 msgid "table" msgstr "テーブル" -#: describe.c:958 describe.c:3665 +#: describe.c:957 describe.c:3711 msgid "view" msgstr "ビュー" -#: describe.c:959 describe.c:3666 +#: describe.c:958 describe.c:3712 msgid "materialized view" msgstr "マテリアライズドビュー" -#: describe.c:960 describe.c:1120 describe.c:3668 +#: describe.c:959 describe.c:1119 describe.c:3714 msgid "sequence" msgstr "シーケンス" -#: describe.c:961 describe.c:3670 +#: describe.c:960 describe.c:3716 msgid "foreign table" msgstr "外部テーブル" -#: describe.c:962 describe.c:3671 describe.c:3856 -#| msgid "\"%s\" is a partitioned table" +#: describe.c:961 describe.c:3717 describe.c:3927 msgid "partitioned table" msgstr "パーティションテーブル" -#: describe.c:974 +#: describe.c:973 msgid "Column privileges" msgstr "列の権限" -#: describe.c:1005 describe.c:1039 +#: describe.c:1004 describe.c:1038 msgid "Policies" msgstr "ポリシー" -#: describe.c:1071 describe.c:5956 describe.c:5960 +#: describe.c:1070 describe.c:6048 describe.c:6052 msgid "Access privileges" msgstr "アクセス権限" -#: describe.c:1102 +#: describe.c:1101 #, c-format -#| msgid "" -#| "The server (version %s) does not support altering default privileges.\n" msgid "The server (version %s) does not support altering default privileges." msgstr "このサーバ(バージョン%s)はデフォルト権限の変更をサポートしていません。" -#: describe.c:1122 +#: describe.c:1121 msgid "function" msgstr "関数" -#: describe.c:1124 +#: describe.c:1123 msgid "type" msgstr "型" -#: describe.c:1126 +#: describe.c:1125 msgid "schema" msgstr "スキーマ" -#: describe.c:1150 +#: describe.c:1149 msgid "Default access privileges" msgstr "デフォルトのアクセス権限" -#: describe.c:1190 +#: describe.c:1189 msgid "Object" msgstr "オブジェクト" -#: describe.c:1204 +#: describe.c:1203 msgid "table constraint" msgstr "テーブル制約" -#: describe.c:1226 +#: describe.c:1225 msgid "domain constraint" msgstr "ドメイン制約" -#: describe.c:1254 +#: describe.c:1253 msgid "operator class" msgstr "演算子クラス" -#: describe.c:1283 +#: describe.c:1282 msgid "operator family" msgstr "演算子族" -#: describe.c:1305 +#: describe.c:1304 msgid "rule" msgstr "ルール" -#: describe.c:1347 +#: describe.c:1346 msgid "Object descriptions" msgstr "オブジェクトの説明" -#: describe.c:1403 describe.c:3762 +#: describe.c:1402 describe.c:3833 #, c-format -#| msgid "Did not find any relation named \"%s\".\n" msgid "Did not find any relation named \"%s\"." msgstr "\"%s\"という名前のリレーションは見つかりませんでした。" -#: describe.c:1406 describe.c:3765 +#: describe.c:1405 describe.c:3836 #, c-format -#| msgid "Did not find any relations.\n" msgid "Did not find any relations." msgstr "リレーションが見つかりませんでした。" -#: describe.c:1661 +#: describe.c:1660 #, c-format -#| msgid "Did not find any relation with OID %s.\n" msgid "Did not find any relation with OID %s." msgstr "OID %sを持つリレーションが見つかりませんでした。" -#: describe.c:1713 describe.c:1737 +#: describe.c:1712 describe.c:1736 msgid "Start" msgstr "開始" -#: describe.c:1714 describe.c:1738 +#: describe.c:1713 describe.c:1737 msgid "Minimum" msgstr "最小" -#: describe.c:1715 describe.c:1739 +#: describe.c:1714 describe.c:1738 msgid "Maximum" msgstr "最大" -#: describe.c:1716 describe.c:1740 +#: describe.c:1715 describe.c:1739 msgid "Increment" msgstr "増分" -#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4184 -#: describe.c:4350 describe.c:4464 describe.c:4469 +#: describe.c:1716 describe.c:1740 describe.c:1871 describe.c:4255 +#: describe.c:4421 describe.c:4535 describe.c:4540 describe.c:6095 msgid "yes" msgstr "はい" -#: describe.c:1718 describe.c:1742 describe.c:1873 describe.c:4184 -#: describe.c:4347 describe.c:4464 +#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4255 +#: describe.c:4418 describe.c:4535 describe.c:6096 msgid "no" msgstr "いいえ" -#: describe.c:1719 describe.c:1743 +#: describe.c:1718 describe.c:1742 msgid "Cycles?" msgstr "循環?" -#: describe.c:1720 describe.c:1744 +#: describe.c:1719 describe.c:1743 msgid "Cache" msgstr "キャッシュ" -#: describe.c:1787 +#: describe.c:1786 #, c-format msgid "Owned by: %s" msgstr "所有者: %s" -#: describe.c:1791 +#: describe.c:1790 #, c-format msgid "Sequence for identity column: %s" msgstr "識別列のシーケンス: %s" -#: describe.c:1798 +#: describe.c:1797 #, c-format msgid "Sequence \"%s.%s\"" msgstr "シーケンス \"%s.%s\"" -#: describe.c:1934 +#: describe.c:1933 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "ログを取らないテーブル\"%s.%s\"" -#: describe.c:1937 +#: describe.c:1936 #, c-format msgid "Table \"%s.%s\"" msgstr "テーブル\"%s.%s\"" -#: describe.c:1941 +#: describe.c:1940 #, c-format msgid "View \"%s.%s\"" msgstr "ビュー\"%s.%s\"" -#: describe.c:1946 +#: describe.c:1945 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "ログを取らないマテリアライズドビュー\"%s.%s\"" -#: describe.c:1949 +#: describe.c:1948 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "マテリアライズドビュー\"%s.%s\"" -#: describe.c:1954 +#: describe.c:1953 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "ログを取らないインデックス\"%s.%s\"" -#: describe.c:1957 +#: describe.c:1956 #, c-format msgid "Index \"%s.%s\"" msgstr "インデックス\"%s.%s\"" -#: describe.c:1962 +#: describe.c:1961 #, c-format -#| msgid "Unlogged index \"%s.%s\"" msgid "Unlogged partitioned index \"%s.%s\"" msgstr "ログを取らないパーティションインデックス\"%s.%s\"" -#: describe.c:1965 +#: describe.c:1964 #, c-format -#| msgid "Unlogged index \"%s.%s\"" msgid "Partitioned index \"%s.%s\"" msgstr "パーティションインデックス\"%s.%s\"" -#: describe.c:1970 +#: describe.c:1969 #, c-format msgid "Special relation \"%s.%s\"" msgstr "特殊なリレーション\"%s.%s\"" -#: describe.c:1974 +#: describe.c:1973 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "TOAST テーブル\"%s.%s\"" -#: describe.c:1978 +#: describe.c:1977 #, c-format msgid "Composite type \"%s.%s\"" msgstr "複合型\"%s.%s\"" -#: describe.c:1982 +#: describe.c:1981 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "外部テーブル\"%s.%s\"" -#: describe.c:1987 +#: describe.c:1986 #, c-format -#| msgid "Unlogged table \"%s.%s\"" msgid "Unlogged partitioned table \"%s.%s\"" msgstr "ログを取らないパーティションテーブル\"%s.%s\"" -#: describe.c:1990 +#: describe.c:1989 #, c-format -#| msgid "Foreign table \"%s.%s\"" msgid "Partitioned table \"%s.%s\"" msgstr "パーティションテーブル\"%s.%s\"" -#: describe.c:2006 describe.c:4097 +#: describe.c:2005 describe.c:4168 msgid "Collation" msgstr "照合順序" -#: describe.c:2007 describe.c:4104 +#: describe.c:2006 describe.c:4175 msgid "Nullable" msgstr "Null 値を許容" -#: describe.c:2008 describe.c:4105 +#: describe.c:2007 describe.c:4176 msgid "Default" msgstr "デフォルト" -#: describe.c:2011 +#: describe.c:2010 msgid "Key?" msgstr "キー?" -#: describe.c:2013 +#: describe.c:2012 msgid "Definition" msgstr "定義" -#: describe.c:2015 describe.c:5215 describe.c:5299 describe.c:5370 -#: describe.c:5434 +#: describe.c:2014 describe.c:5286 describe.c:5370 describe.c:5441 +#: describe.c:5505 msgid "FDW options" msgstr "FDW オプション" -#: describe.c:2017 +#: describe.c:2016 msgid "Storage" msgstr "ストレージ" -#: describe.c:2019 +#: describe.c:2018 msgid "Stats target" msgstr "統計目標" -#: describe.c:2137 +#: describe.c:2131 #, c-format msgid "Partition of: %s %s" msgstr "パーティション: %s %s" -#: describe.c:2145 +#: describe.c:2143 msgid "No partition constraint" msgstr "パーティション制約なし" -#: describe.c:2147 +#: describe.c:2145 #, c-format msgid "Partition constraint: %s" msgstr "パーティションの制約: %s" -#: describe.c:2170 +#: describe.c:2169 #, c-format msgid "Partition key: %s" msgstr "パーティションキー: %s" -#: describe.c:2239 +#: describe.c:2195 +#, c-format +msgid "Owning table: \"%s.%s\"" +msgstr "所属先テーブル\"%s.%s\"" + +#: describe.c:2266 msgid "primary key, " msgstr "プライマリキー, " -#: describe.c:2241 +#: describe.c:2268 msgid "unique, " msgstr "ユニーク," -#: describe.c:2247 +#: describe.c:2274 #, c-format msgid "for table \"%s.%s\"" msgstr "テーブル\"%s.%s\"用" -#: describe.c:2251 +#: describe.c:2278 #, c-format msgid ", predicate (%s)" msgstr "、述語 (%s)" -#: describe.c:2254 +#: describe.c:2281 msgid ", clustered" msgstr "、クラスター化" -#: describe.c:2257 +#: describe.c:2284 msgid ", invalid" msgstr "無効" -#: describe.c:2260 +#: describe.c:2287 msgid ", deferrable" msgstr "、遅延可能" -#: describe.c:2263 +#: describe.c:2290 msgid ", initially deferred" msgstr "、最初から遅延中" -#: describe.c:2266 +#: describe.c:2293 msgid ", replica identity" msgstr "、レプリカの id" -#: describe.c:2325 +#: describe.c:2360 msgid "Indexes:" msgstr "インデックス:" -#: describe.c:2409 +#: describe.c:2444 msgid "Check constraints:" msgstr "Check 制約:" -#: describe.c:2477 +#: describe.c:2512 msgid "Foreign-key constraints:" msgstr "外部キー制約:" -#: describe.c:2540 +#: describe.c:2575 msgid "Referenced by:" msgstr "参照元:" -#: describe.c:2590 +#: describe.c:2625 msgid "Policies:" msgstr "ポリシー:" -#: describe.c:2593 +#: describe.c:2628 msgid "Policies (forced row security enabled):" msgstr "ポリシー(行セキュリティを強制的に有効化):" -#: describe.c:2596 +#: describe.c:2631 msgid "Policies (row security enabled): (none)" msgstr "ポリシー(行セキュリティ有効化): (なし)" -#: describe.c:2599 +#: describe.c:2634 msgid "Policies (forced row security enabled): (none)" msgstr "ポリシー(行セキュリティを強制的に有効化): (なし)" -#: describe.c:2602 +#: describe.c:2637 msgid "Policies (row security disabled):" msgstr "ポリシー(行セキュリティを無効化):" -#: describe.c:2665 +#: describe.c:2700 msgid "Statistics objects:" msgstr "統計オブジェクト:" -#: describe.c:2774 describe.c:2878 +#: describe.c:2809 describe.c:2913 msgid "Rules:" msgstr "ルール:" -#: describe.c:2777 +#: describe.c:2812 msgid "Disabled rules:" msgstr "無効化されたルール:" -#: describe.c:2780 +#: describe.c:2815 msgid "Rules firing always:" msgstr "常に適用するルール:" -#: describe.c:2783 +#: describe.c:2818 msgid "Rules firing on replica only:" msgstr "レプリカ上でのみ適用するルール:" -#: describe.c:2823 +#: describe.c:2858 msgid "Publications:" msgstr "パブリケーション:" -#: describe.c:2861 +#: describe.c:2896 msgid "View definition:" msgstr "ビューの定義:" -#: describe.c:3000 +#: describe.c:3043 msgid "Triggers:" msgstr "トリガー:" -#: describe.c:3004 +#: describe.c:3047 msgid "Disabled user triggers:" msgstr "無効化されたユーザトリガ:" -#: describe.c:3006 +#: describe.c:3049 msgid "Disabled triggers:" msgstr "無効化されたトリガー:" -#: describe.c:3009 +#: describe.c:3052 msgid "Disabled internal triggers:" msgstr "無効化された内部トリガー:" -#: describe.c:3012 +#: describe.c:3055 msgid "Triggers firing always:" msgstr "常に適用するするトリガー:" -#: describe.c:3015 +#: describe.c:3058 msgid "Triggers firing on replica only:" msgstr "レプリカ上でのみ適用するトリガー:" -#: describe.c:3074 +#: describe.c:3130 #, c-format msgid "Server: %s" msgstr "サーバ: %s" -#: describe.c:3082 +#: describe.c:3138 #, c-format msgid "FDW options: (%s)" msgstr "FDW オプション: (%s)" -#: describe.c:3101 +#: describe.c:3159 msgid "Inherits" msgstr "継承元" -#: describe.c:3160 +#: describe.c:3219 #, c-format msgid "Number of partitions: %d" msgstr "パーティション数: %d" -#: describe.c:3169 -#, c-format -msgid "Number of child tables: %d (Use \\d+ to list them.)" -msgstr "子テーブル数: %d (\\d+ で一覧を表示)" - -#: describe.c:3171 +#: describe.c:3228 #, c-format msgid "Number of partitions: %d (Use \\d+ to list them.)" msgstr "パーティション数: %d (\\d+ で一覧を表示)。" -#: describe.c:3179 +#: describe.c:3230 +#, c-format +msgid "Number of child tables: %d (Use \\d+ to list them.)" +msgstr "子テーブル数: %d (\\d+ で一覧を表示)" + +#: describe.c:3237 msgid "Child tables" msgstr "子テーブル" -#: describe.c:3179 +#: describe.c:3237 msgid "Partitions" msgstr "パーティション" -#: describe.c:3222 +#: describe.c:3266 #, c-format msgid "Typed table of type: %s" msgstr "%s 型の型付きテーブル" -#: describe.c:3238 +#: describe.c:3282 msgid "Replica Identity" msgstr "レプリカ識別" -#: describe.c:3251 +#: describe.c:3295 msgid "Has OIDs: yes" msgstr "OID あり: はい" -#: describe.c:3260 +#: describe.c:3304 #, c-format -#| msgid "access method %s" msgid "Access method: %s" msgstr "アクセスメソッド: %s" -#: describe.c:3339 +#: describe.c:3384 #, c-format msgid "Tablespace: \"%s\"" msgstr "テーブル空間: \"%s\"" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:3351 +#: describe.c:3396 #, c-format msgid ", tablespace \"%s\"" msgstr "、テーブル空間\"%s\"" -#: describe.c:3444 +#: describe.c:3489 msgid "List of roles" msgstr "ロール一覧" -#: describe.c:3446 +#: describe.c:3491 msgid "Role name" msgstr "ロール名" -#: describe.c:3447 +#: describe.c:3492 msgid "Attributes" msgstr "属性" -#: describe.c:3448 +#: describe.c:3493 msgid "Member of" msgstr "所属グループ" -#: describe.c:3459 +#: describe.c:3504 msgid "Superuser" msgstr "スーパユーザ" -#: describe.c:3462 +#: describe.c:3507 msgid "No inheritance" msgstr "継承なし" -#: describe.c:3465 +#: describe.c:3510 msgid "Create role" msgstr "ロール作成可" -#: describe.c:3468 +#: describe.c:3513 msgid "Create DB" msgstr "DB作成可" -#: describe.c:3471 +#: describe.c:3516 msgid "Cannot login" msgstr "ログインできません" -#: describe.c:3475 +#: describe.c:3520 msgid "Replication" msgstr "レプリケーション可" -#: describe.c:3479 +#: describe.c:3524 msgid "Bypass RLS" msgstr "RLS のバイパス" -#: describe.c:3488 +#: describe.c:3533 msgid "No connections" msgstr "接続なし" -#: describe.c:3490 +#: describe.c:3535 #, c-format msgid "%d connection" msgid_plural "%d connections" msgstr[0] "%d 個の接続" -#: describe.c:3500 +#: describe.c:3545 msgid "Password valid until " msgstr "パスワードの有効期限 " -#: describe.c:3550 +#: describe.c:3595 #, c-format -#| msgid "" -#| "The server (version %s) does not support per-database role settings.\n" msgid "The server (version %s) does not support per-database role settings." -msgstr "" -"このサーバ(バージョン%s)はデータベースごとのロール設定をサポートしていませ" -"ん。" +msgstr "このサーバ(バージョン%s)はデータベースごとのロール設定をサポートしていません。" -#: describe.c:3563 +#: describe.c:3608 msgid "Role" msgstr "ロール" -#: describe.c:3564 +#: describe.c:3609 msgid "Database" msgstr "データベース" -#: describe.c:3565 +#: describe.c:3610 msgid "Settings" msgstr "設定" -#: describe.c:3586 +#: describe.c:3631 #, c-format -#| msgid "Did not find any settings for role \"%s\" and database \"%s\".\n" msgid "Did not find any settings for role \"%s\" and database \"%s\"." msgstr "ロール\"%s\"とデータベース\"%s\"の設定が見つかりませんでした。" -#: describe.c:3589 +#: describe.c:3634 #, c-format -#| msgid "Did not find any settings for role \"%s\".\n" msgid "Did not find any settings for role \"%s\"." msgstr "ロール\"%s\"の設定が見つかりませんでした。" -#: describe.c:3592 +#: describe.c:3637 #, c-format -#| msgid "Did not find any settings.\n" msgid "Did not find any settings." msgstr "設定が見つかりませんでした。" -#: describe.c:3597 +#: describe.c:3642 msgid "List of settings" msgstr "設定一覧" -#: describe.c:3667 +#: describe.c:3713 msgid "index" msgstr "インデックス" -#: describe.c:3669 +#: describe.c:3715 msgid "special" msgstr "特殊" -#: describe.c:3672 describe.c:3857 -#| msgid "partition_name" +#: describe.c:3718 describe.c:3928 msgid "partitioned index" msgstr "パーティションインデックス" -#: describe.c:3770 +#: describe.c:3742 +msgid "permanent" +msgstr "永続" + +#: describe.c:3743 +msgid "temporary" +msgstr "一時" + +#: describe.c:3744 +msgid "unlogged" +msgstr "ログなし" + +#: describe.c:3745 +msgid "Persistence" +msgstr "永続性" + +#: describe.c:3841 msgid "List of relations" msgstr "リレーション一覧" -#: describe.c:3818 +#: describe.c:3889 #, c-format -#| msgid "The server (version %s) does not support collations.\n" -msgid "" -"The server (version %s) does not support declarative table partitioning." -msgstr "" -"このサーバ(バージョン%s)は宣言的テーブルパーティショニングをサポートしていま" -"せん。" +msgid "The server (version %s) does not support declarative table partitioning." +msgstr "このサーバ(バージョン%s)は宣言的テーブルパーティショニングをサポートしていません。" -#: describe.c:3829 -#| msgid "\"%s\" is not partitioned" +#: describe.c:3900 msgid "List of partitioned indexes" msgstr "パーティションインデックスの一覧" -#: describe.c:3831 -#| msgid "\"%s\" is a partitioned table" +#: describe.c:3902 msgid "List of partitioned tables" msgstr "パーティションテーブルの一覧" -#: describe.c:3835 -#| msgid "List of relations" +#: describe.c:3906 msgid "List of partitioned relations" msgstr "パーティションリレーションの一覧" -#: describe.c:3866 -#| msgid "Token name" +#: describe.c:3937 msgid "Parent name" msgstr "親の名前" -#: describe.c:3879 -#| msgid "Partitions" +#: describe.c:3950 msgid "Leaf partition size" msgstr "末端パーティションのサイズ" -#: describe.c:3882 describe.c:3888 +#: describe.c:3953 describe.c:3959 msgid "Total size" msgstr "トータルサイズ" -#: describe.c:4020 +#: describe.c:4091 msgid "Trusted" msgstr "信頼済み" -#: describe.c:4028 +#: describe.c:4099 msgid "Internal language" msgstr "内部言語" -#: describe.c:4029 +#: describe.c:4100 msgid "Call handler" msgstr "呼び出しハンドラー" -#: describe.c:4030 describe.c:5202 +#: describe.c:4101 describe.c:5273 msgid "Validator" msgstr "バリデーター" -#: describe.c:4033 +#: describe.c:4104 msgid "Inline handler" msgstr "インラインハンドラー" -#: describe.c:4061 +#: describe.c:4132 msgid "List of languages" msgstr "手続き言語一覧" -#: describe.c:4106 +#: describe.c:4177 msgid "Check" msgstr "CHECK制約" -#: describe.c:4148 +#: describe.c:4219 msgid "List of domains" msgstr "ドメイン一覧" -#: describe.c:4182 +#: describe.c:4253 msgid "Source" msgstr "変換元" -#: describe.c:4183 +#: describe.c:4254 msgid "Destination" msgstr "変換先" -#: describe.c:4185 +#: describe.c:4256 describe.c:6097 msgid "Default?" msgstr "デフォルト?" -#: describe.c:4222 +#: describe.c:4293 msgid "List of conversions" msgstr "符号化方式一覧" -#: describe.c:4261 +#: describe.c:4332 msgid "Event" msgstr "イベント" -#: describe.c:4263 +#: describe.c:4334 msgid "enabled" msgstr "有効" -#: describe.c:4264 +#: describe.c:4335 msgid "replica" msgstr "レプリカ" -#: describe.c:4265 +#: describe.c:4336 msgid "always" msgstr "常時" -#: describe.c:4266 +#: describe.c:4337 msgid "disabled" msgstr "無効" -#: describe.c:4267 describe.c:5901 +#: describe.c:4338 describe.c:5987 msgid "Enabled" msgstr "有効状態" -#: describe.c:4269 +#: describe.c:4340 msgid "Tags" msgstr "タグ" -#: describe.c:4288 +#: describe.c:4359 msgid "List of event triggers" msgstr "イベントトリガー一覧" -#: describe.c:4317 +#: describe.c:4388 msgid "Source type" msgstr "変換元の型" -#: describe.c:4318 +#: describe.c:4389 msgid "Target type" msgstr "変換先の型" -#: describe.c:4349 +#: describe.c:4420 msgid "in assignment" msgstr "代入時のみ" -#: describe.c:4351 +#: describe.c:4422 msgid "Implicit?" msgstr "暗黙的に適用 ?" -#: describe.c:4406 +#: describe.c:4477 msgid "List of casts" msgstr "キャスト一覧" -#: describe.c:4434 +#: describe.c:4505 #, c-format -#| msgid "The server (version %s) does not support collations.\n" msgid "The server (version %s) does not support collations." msgstr "このサーバ(バージョン%s)は照合順序をサポートしていません。" -#: describe.c:4455 describe.c:4459 +#: describe.c:4526 describe.c:4530 msgid "Provider" msgstr "プロバイダー" -#: describe.c:4465 describe.c:4470 +#: describe.c:4536 describe.c:4541 msgid "Deterministic?" msgstr "確定的?" -#: describe.c:4505 +#: describe.c:4576 msgid "List of collations" msgstr "照合順序一覧" -#: describe.c:4564 +#: describe.c:4635 msgid "List of schemas" msgstr "スキーマ一覧" -#: describe.c:4589 describe.c:4836 describe.c:4907 describe.c:4978 +#: describe.c:4660 describe.c:4907 describe.c:4978 describe.c:5049 #, c-format -#| msgid "The server (version %s) does not support full text search.\n" msgid "The server (version %s) does not support full text search." msgstr "このサーバ(バージョン%s)は全文検索をサポートしていません。" -#: describe.c:4624 +#: describe.c:4695 msgid "List of text search parsers" msgstr "テキスト検索用パーサ一覧" -#: describe.c:4669 +#: describe.c:4740 #, c-format -#| msgid "Did not find any text search parser named \"%s\".\n" msgid "Did not find any text search parser named \"%s\"." msgstr "テキスト検索用パーサ\"%s\"が見つかりませんでした。" -#: describe.c:4672 +#: describe.c:4743 #, c-format -#| msgid "Did not find any text search parsers.\n" msgid "Did not find any text search parsers." msgstr "テキスト検索パーサが見つかりませんでした。" -#: describe.c:4747 +#: describe.c:4818 msgid "Start parse" msgstr "パース開始" -#: describe.c:4748 +#: describe.c:4819 msgid "Method" msgstr "メソッド" -#: describe.c:4752 +#: describe.c:4823 msgid "Get next token" msgstr "次のトークンを取得" -#: describe.c:4754 +#: describe.c:4825 msgid "End parse" msgstr "パース終了" -#: describe.c:4756 +#: describe.c:4827 msgid "Get headline" msgstr "見出しを取得" -#: describe.c:4758 +#: describe.c:4829 msgid "Get token types" msgstr "トークンタイプを取得" -#: describe.c:4769 +#: describe.c:4840 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "テキスト検索パーサ\"%s.%s\"" -#: describe.c:4772 +#: describe.c:4843 #, c-format msgid "Text search parser \"%s\"" msgstr "テキスト検索パーサ\"%s\"" -#: describe.c:4791 +#: describe.c:4862 msgid "Token name" msgstr "トークン名" -#: describe.c:4802 +#: describe.c:4873 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "パーサ\"%s.%s\"のトークンタイプ" -#: describe.c:4805 +#: describe.c:4876 #, c-format msgid "Token types for parser \"%s\"" msgstr "パーサ\"%s\"のトークンタイプ" -#: describe.c:4859 +#: describe.c:4930 msgid "Template" msgstr "テンプレート" -#: describe.c:4860 +#: describe.c:4931 msgid "Init options" msgstr "初期化オプション" -#: describe.c:4882 +#: describe.c:4953 msgid "List of text search dictionaries" msgstr "テキスト検索用辞書一覧" -#: describe.c:4925 +#: describe.c:4996 msgid "Init" msgstr "初期化" -#: describe.c:4926 +#: describe.c:4997 msgid "Lexize" msgstr "Lex 処理" -#: describe.c:4953 +#: describe.c:5024 msgid "List of text search templates" msgstr "テキスト検索テンプレート一覧" -#: describe.c:5013 +#: describe.c:5084 msgid "List of text search configurations" msgstr "テキスト検索設定一覧" -#: describe.c:5059 +#: describe.c:5130 #, c-format -#| msgid "Did not find any text search configuration named \"%s\".\n" msgid "Did not find any text search configuration named \"%s\"." msgstr "テキスト検索用設定\"%s\"が見つかりませんでした。" -#: describe.c:5062 +#: describe.c:5133 #, c-format -#| msgid "Did not find any text search configurations.\n" msgid "Did not find any text search configurations." msgstr "テキスト検索設定が見つかりませんでした。" -#: describe.c:5128 +#: describe.c:5199 msgid "Token" msgstr "トークン" -#: describe.c:5129 +#: describe.c:5200 msgid "Dictionaries" msgstr "辞書" -#: describe.c:5140 +#: describe.c:5211 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "テキスト検索設定\"%s.%s\"" -#: describe.c:5143 +#: describe.c:5214 #, c-format msgid "Text search configuration \"%s\"" msgstr "テキスト検索設定\"%s\"" -#: describe.c:5147 +#: describe.c:5218 #, c-format msgid "" "\n" @@ -2282,7 +2108,7 @@ msgstr "" "\n" "パーサ: \"%s.%s\"" -#: describe.c:5150 +#: describe.c:5221 #, c-format msgid "" "\n" @@ -2291,167 +2117,240 @@ msgstr "" "\n" "パーサ: \"%s\"" -#: describe.c:5184 +#: describe.c:5255 #, c-format -#| msgid "The server (version %s) does not support foreign-data wrappers.\n" msgid "The server (version %s) does not support foreign-data wrappers." msgstr "このサーバ(バージョン%s)は外部データラッパをサポートしていません。" -#: describe.c:5242 +#: describe.c:5313 msgid "List of foreign-data wrappers" msgstr "外部データラッパ一覧" -#: describe.c:5267 +#: describe.c:5338 #, c-format -#| msgid "The server (version %s) does not support foreign servers.\n" msgid "The server (version %s) does not support foreign servers." msgstr "このサーバ(バージョン%s)は外部サーバをサポートしていません。" -#: describe.c:5280 +#: describe.c:5351 msgid "Foreign-data wrapper" msgstr "外部データラッパ" -#: describe.c:5298 describe.c:5503 +#: describe.c:5369 describe.c:5574 msgid "Version" msgstr "バージョン" -#: describe.c:5324 +#: describe.c:5395 msgid "List of foreign servers" msgstr "外部サーバ一覧" -#: describe.c:5349 +#: describe.c:5420 #, c-format -#| msgid "The server (version %s) does not support user mappings.\n" msgid "The server (version %s) does not support user mappings." msgstr "このサーバ(バージョン%s)はユーザマッピングをサポートしていません。" -#: describe.c:5359 describe.c:5423 +#: describe.c:5430 describe.c:5494 msgid "Server" msgstr "サーバ" -#: describe.c:5360 +#: describe.c:5431 msgid "User name" msgstr "ユーザ名" -#: describe.c:5385 +#: describe.c:5456 msgid "List of user mappings" msgstr "ユーザマッピング一覧" -#: describe.c:5410 +#: describe.c:5481 #, c-format -#| msgid "The server (version %s) does not support foreign tables.\n" msgid "The server (version %s) does not support foreign tables." msgstr "このサーバ(バージョン%s)は外部テーブルをサポートしていません。" -#: describe.c:5463 +#: describe.c:5534 msgid "List of foreign tables" msgstr "外部テーブル一覧" -#: describe.c:5488 describe.c:5545 +#: describe.c:5559 describe.c:5616 #, c-format -#| msgid "The server (version %s) does not support extensions.\n" msgid "The server (version %s) does not support extensions." msgstr "このサーバ(バージョン%s)は機能拡張をサポートしていません。" -#: describe.c:5520 +#: describe.c:5591 msgid "List of installed extensions" msgstr "インストール済みの拡張一覧" -#: describe.c:5573 +#: describe.c:5644 #, c-format -#| msgid "Did not find any extension named \"%s\".\n" msgid "Did not find any extension named \"%s\"." msgstr "\"%s\"という名前の機能拡張が見つかりませんでした。" -#: describe.c:5576 +#: describe.c:5647 #, c-format -#| msgid "Did not find any extensions.\n" msgid "Did not find any extensions." msgstr "機能拡張が見つかりませんでした。" -#: describe.c:5620 +#: describe.c:5691 msgid "Object description" msgstr "オブジェクトの説明" -#: describe.c:5630 +#: describe.c:5701 #, c-format msgid "Objects in extension \"%s\"" msgstr "機能拡張\"%s\"内のオブジェクト" -#: describe.c:5659 describe.c:5730 +#: describe.c:5730 describe.c:5806 #, c-format -#| msgid "The server (version %s) does not support publications.\n" msgid "The server (version %s) does not support publications." msgstr "このサーバ(バージョン%s)はパブリケーションをサポートしていません。" -#: describe.c:5676 describe.c:5802 +#: describe.c:5747 describe.c:5884 msgid "All tables" msgstr "全テーブル" -#: describe.c:5677 describe.c:5803 +#: describe.c:5748 describe.c:5885 msgid "Inserts" msgstr "Insert文" -#: describe.c:5678 describe.c:5804 +#: describe.c:5749 describe.c:5886 msgid "Updates" msgstr "Update文" -#: describe.c:5679 describe.c:5805 +#: describe.c:5750 describe.c:5887 msgid "Deletes" msgstr "Delete文" -#: describe.c:5683 describe.c:5807 +#: describe.c:5754 describe.c:5889 msgid "Truncates" msgstr "Truncate文" -#: describe.c:5700 +#: describe.c:5758 describe.c:5891 +msgid "Via root" +msgstr "最上位パーティションテーブル経由" + +#: describe.c:5775 msgid "List of publications" msgstr "パブリケーション一覧" -#: describe.c:5768 +#: describe.c:5848 #, c-format -#| msgid "Did not find any publication named \"%s\".\n" msgid "Did not find any publication named \"%s\"." msgstr "\"%s\"という名前のパブリケーションが見つかりませんでした。" -#: describe.c:5771 +#: describe.c:5851 #, c-format -#| msgid "Did not find any publications.\n" msgid "Did not find any publications." msgstr "パブリケーションが見つかりませんでした。" -#: describe.c:5798 +#: describe.c:5880 #, c-format msgid "Publication %s" msgstr "パブリケーション %s" -#: describe.c:5842 +#: describe.c:5928 msgid "Tables:" msgstr "テーブル:" -#: describe.c:5886 +#: describe.c:5972 #, c-format -#| msgid "The server (version %s) does not support subscriptions.\n" msgid "The server (version %s) does not support subscriptions." msgstr "このサーバ(バージョン%s)はサブスクリプションをサポートしていません。" -#: describe.c:5902 +#: describe.c:5988 msgid "Publication" msgstr "パブリケーション" -#: describe.c:5909 +#: describe.c:5996 +msgid "Binary" +msgstr "バイナリ" + +#: describe.c:6001 msgid "Synchronous commit" msgstr "同期コミット" -#: describe.c:5910 +#: describe.c:6002 msgid "Conninfo" msgstr "接続情報" -#: describe.c:5932 +#: describe.c:6024 msgid "List of subscriptions" msgstr "サブスクリプション一覧" -#: help.c:74 +#: describe.c:6091 describe.c:6180 describe.c:6266 describe.c:6349 +msgid "AM" +msgstr "AM" + +#: describe.c:6092 +msgid "Input type" +msgstr "入力の型" + +#: describe.c:6093 +msgid "Storage type" +msgstr "ストレージタイプ" + +#: describe.c:6094 +msgid "Operator class" +msgstr "演算子クラス" + +#: describe.c:6106 describe.c:6181 describe.c:6267 describe.c:6350 +msgid "Operator family" +msgstr "演算子族" + +#: describe.c:6139 +msgid "List of operator classes" +msgstr "演算子クラス一覧" + +#: describe.c:6182 +msgid "Applicable types" +msgstr "適用可能型" + +#: describe.c:6221 +msgid "List of operator families" +msgstr "演算子族一覧" + +#: describe.c:6268 +msgid "Operator" +msgstr "演算子" + +#: describe.c:6269 +msgid "Strategy" +msgstr "ストラテジ" + +#: describe.c:6270 +msgid "ordering" +msgstr "順序付け" + +#: describe.c:6271 +msgid "search" +msgstr "検索" + +#: describe.c:6272 +msgid "Purpose" +msgstr "目的" + +#: describe.c:6277 +msgid "Sort opfamily" +msgstr "ソート演算子族" + +#: describe.c:6308 +msgid "List of operators of operator families" +msgstr "演算子族の演算子一覧" + +#: describe.c:6351 +msgid "Registered left type" +msgstr "登録左辺型" + +#: describe.c:6352 +msgid "Registered right type" +msgstr "登録右辺型" + +#: describe.c:6353 +msgid "Number" +msgstr "番号" + +#: describe.c:6389 +msgid "List of support functions of operator families" +msgstr "演算子族のサポート関数一覧" + +#: help.c:73 #, c-format msgid "" "psql is the PostgreSQL interactive terminal.\n" @@ -2460,12 +2359,12 @@ msgstr "" "psql は PostgreSQL の対話型ターミナルです。\n" "\n" -#: help.c:75 help.c:349 help.c:425 help.c:468 +#: help.c:74 help.c:355 help.c:431 help.c:474 #, c-format msgid "Usage:\n" msgstr "使い方:\n" -#: help.c:76 +#: help.c:75 #, c-format msgid "" " psql [OPTION]... [DBNAME [USERNAME]]\n" @@ -2474,39 +2373,32 @@ msgstr "" " psql [オプション]... [データベース名 [ユーザ名]]\n" "\n" -#: help.c:78 +#: help.c:77 #, c-format msgid "General options:\n" msgstr "一般的なオプション:\n" -#: help.c:83 +#: help.c:82 #, c-format -msgid "" -" -c, --command=COMMAND run only single command (SQL or internal) and " -"exit\n" -msgstr "" -" -c, --command=コマンド 単一の(SQLまたは内部)コマンドを一つだけ実行して終" -"了\n" +msgid " -c, --command=COMMAND run only single command (SQL or internal) and exit\n" +msgstr " -c, --command=コマンド 単一の(SQLまたは内部)コマンドを一つだけ実行して終了\n" -#: help.c:84 +#: help.c:83 #, c-format -msgid "" -" -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" -msgstr "" -" -d, --dbname=DB名 接続するデータベース名(デフォルト: \"%s\")\n" +msgid " -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" +msgstr " -d, --dbname=DB名 接続するデータベース名(デフォルト: \"%s\")\n" -#: help.c:85 +#: help.c:84 #, c-format msgid " -f, --file=FILENAME execute commands from file, then exit\n" -msgstr "" -" -f, --file=FILENAME ファイルからコマンドを読み込んで実行後、終了\n" +msgstr " -f, --file=FILENAME ファイルからコマンドを読み込んで実行後、終了\n" -#: help.c:86 +#: help.c:85 #, c-format msgid " -l, --list list available databases, then exit\n" msgstr " -l(エル), --list 使用可能なデータベース一覧を表示して終了\n" -#: help.c:87 +#: help.c:86 #, c-format msgid "" " -v, --set=, --variable=NAME=VALUE\n" @@ -2517,44 +2409,41 @@ msgstr "" " psql 変数 '名前' に '値' をセット\n" " (例: -v ON_ERROR_STOP=1)\n" -#: help.c:90 +#: help.c:89 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: help.c:91 +#: help.c:90 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" msgstr " -X, --no-psqlrc 初期化ファイル (~/.psqlrc) を読み込まない\n" -#: help.c:92 +#: help.c:91 #, c-format msgid "" " -1 (\"one\"), --single-transaction\n" -" execute as a single transaction (if non-" -"interactive)\n" +" execute as a single transaction (if non-interactive)\n" msgstr "" " -1 (数字の1), --single-transaction\n" -" (対話形式でない場合)単一のトランザクションとして実" -"行\n" +" (対話形式でない場合)単一のトランザクションとして実行\n" -#: help.c:94 +#: help.c:93 #, c-format msgid " -?, --help[=options] show this help, then exit\n" msgstr " -?, --help[=options] このヘルプを表示して終了\n" -#: help.c:95 +#: help.c:94 #, c-format msgid " --help=commands list backslash commands, then exit\n" -msgstr "" -" --help=commands バックスラッシュコマンドの一覧を表示して終了\n" +msgstr " --help=commands バックスラッシュコマンドの一覧を表示して終了\n" -#: help.c:96 +#: help.c:95 #, c-format msgid " --help=variables list special variables, then exit\n" msgstr " --help=variables 特殊変数の一覧を表示して終了\n" -#: help.c:98 +#: help.c:97 #, c-format msgid "" "\n" @@ -2563,68 +2452,57 @@ msgstr "" "\n" "入出力オプション:\n" -#: help.c:99 +#: help.c:98 #, c-format msgid " -a, --echo-all echo all input from script\n" msgstr " -a, --echo-all スクリプトから読み込んだ入力をすべて表示\n" -#: help.c:100 +#: help.c:99 #, c-format msgid " -b, --echo-errors echo failed commands\n" msgstr " -b, --echo-errors 失敗したコマンドを表示\n" -#: help.c:101 +#: help.c:100 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" msgstr " -e, --echo-queries サーバへ送信したコマンドを表示\n" -#: help.c:102 +#: help.c:101 #, c-format -msgid "" -" -E, --echo-hidden display queries that internal commands generate\n" +msgid " -E, --echo-hidden display queries that internal commands generate\n" msgstr " -E, --echo-hidden 内部コマンドが生成した問い合わせを表示\n" -#: help.c:103 +#: help.c:102 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" msgstr " -L, --log-file=FILENAME セッションログをファイルに書き込む\n" -#: help.c:104 +#: help.c:103 #, c-format -msgid "" -" -n, --no-readline disable enhanced command line editing (readline)\n" -msgstr "" -" -n, --no-readline 拡張コマンドライン編集機能(readline)を無効にする\n" +msgid " -n, --no-readline disable enhanced command line editing (readline)\n" +msgstr " -n, --no-readline 拡張コマンドライン編集機能(readline)を無効にする\n" -#: help.c:105 +#: help.c:104 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" -msgstr "" -" -o, --output=FILENAME 問い合わせの結果をファイル (または |パイプ)に送" -"る\n" +msgstr " -o, --output=FILENAME 問い合わせの結果をファイル (または |パイプ)に送る\n" -#: help.c:106 +#: help.c:105 #, c-format -msgid "" -" -q, --quiet run quietly (no messages, only query output)\n" -msgstr "" -" -q, --quiet 静かに実行 (メッセージなしで、問い合わせの出力の" -"み)\n" +msgid " -q, --quiet run quietly (no messages, only query output)\n" +msgstr " -q, --quiet 静かに実行 (メッセージなしで、問い合わせの出力のみ)\n" -#: help.c:107 +#: help.c:106 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" -msgstr "" -" -s, --single-step シングルステップモード (各問い合わせごとに確認)\n" +msgstr " -s, --single-step シングルステップモード (各問い合わせごとに確認)\n" -#: help.c:108 +#: help.c:107 #, c-format -msgid "" -" -S, --single-line single-line mode (end of line terminates SQL " -"command)\n" -msgstr " -S, --single-line 単一行モード (行末で SQL コマンドを終端)\n" +msgid " -S, --single-line single-line mode (end of line terminates SQL command)\n" +msgstr " -S, --single-line 単一行モード (行末でSQLコマンドを終端)\n" -#: help.c:110 +#: help.c:109 #, c-format msgid "" "\n" @@ -2633,97 +2511,82 @@ msgstr "" "\n" "出力フォーマットのオプション\n" -#: help.c:111 +#: help.c:110 #, c-format msgid " -A, --no-align unaligned table output mode\n" msgstr " -A, --no-align 桁揃えなしのテーブル出力モード\n" -#: help.c:112 +#: help.c:111 #, c-format -#| msgid "" -#| " \\a toggle between unaligned and aligned output " -#| "mode\n" -msgid "" -" --csv CSV (Comma-Separated Values) table output mode\n" +msgid " --csv CSV (Comma-Separated Values) table output mode\n" msgstr " --csv CSV(カンマ区切り)テーブル出力モード\n" -#: help.c:113 +#: help.c:112 #, c-format msgid "" " -F, --field-separator=STRING\n" -" field separator for unaligned output (default: " -"\"%s\")\n" +" field separator for unaligned output (default: \"%s\")\n" msgstr "" " -F, --field-separator=文字列\n" " 桁揃えなし出力時のフィールド区切り文字\n" " (デフォルト: \"%s\")\n" -#: help.c:116 +#: help.c:115 #, c-format msgid " -H, --html HTML table output mode\n" msgstr " -H, --html HTML テーブル出力モード\n" -#: help.c:117 +#: help.c:116 #, c-format -msgid "" -" -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset " -"command)\n" +msgid " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset command)\n" msgstr "" " -P, --pset=変数[=値] 表示オプション '変数' を '値' にセット\n" " (\\pset コマンドを参照)\n" -#: help.c:118 +#: help.c:117 #, c-format msgid "" " -R, --record-separator=STRING\n" -" record separator for unaligned output (default: " -"newline)\n" +" record separator for unaligned output (default: newline)\n" msgstr "" " -R, --record-separator=文字列\n" " 桁揃えなし出力におけるレコード区切り文字\n" " (デフォルト: 改行)\n" -#: help.c:120 +#: help.c:119 #, c-format msgid " -t, --tuples-only print rows only\n" msgstr " -t, --tuples-only 行のみを表示\n" -#: help.c:121 +#: help.c:120 #, c-format -msgid "" -" -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, " -"border)\n" -msgstr "" -" -T, --table-attr=TEXT HTMLテーブルのタグ属性をセット (width, border等)\n" +msgid " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, border)\n" +msgstr " -T, --table-attr=TEXT HTMLテーブルのタグ属性をセット (width, border等)\n" -#: help.c:122 +#: help.c:121 #, c-format msgid " -x, --expanded turn on expanded table output\n" msgstr " -x, --expanded 拡張テーブル出力に切り替える\n" -#: help.c:123 +#: help.c:122 #, c-format msgid "" " -z, --field-separator-zero\n" -" set field separator for unaligned output to zero " -"byte\n" +" set field separator for unaligned output to zero byte\n" msgstr "" " -z, --field-separator-zero\n" -" 桁揃えなし出力のフィールド区切りをバイト値の0に設" -"定\n" +" 桁揃えなし出力のフィールド区切りをバイト値の0に設定\n" -#: help.c:125 +#: help.c:124 #, c-format msgid "" " -0, --record-separator-zero\n" -" set record separator for unaligned output to zero " -"byte\n" +" set record separator for unaligned output to zero byte\n" msgstr "" " -0, --record-separator-zero\n" -" 桁揃えなし出力のレコード区切りをバイト値の0に設" -"定\n" +" 桁揃えなし出力のレコード区切りをバイト値の0に設定\n" -#: help.c:128 +#: help.c:127 #, c-format msgid "" "\n" @@ -2732,70 +2595,60 @@ msgstr "" "\n" "接続オプション:\n" -#: help.c:131 +#: help.c:130 #, c-format -msgid "" -" -h, --host=HOSTNAME database server host or socket directory " -"(default: \"%s\")\n" +msgid " -h, --host=HOSTNAME database server host or socket directory (default: \"%s\")\n" msgstr "" " -h, --host=HOSTNAME データベースサーバのホストまたはソケットの\n" " ディレクトリ(デフォルト: \"%s\")\n" -#: help.c:132 +#: help.c:131 msgid "local socket" msgstr "ローカルソケット" -#: help.c:135 +#: help.c:134 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" -msgstr "" -" -p, --port=PORT データベースサーバのポート番号(デフォルト: \"%s" -"\")\n" +msgstr " -p, --port=PORT データベースサーバのポート番号(デフォルト: \"%s\")\n" -#: help.c:141 +#: help.c:140 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" -msgstr "" -" -U, --username=USERNAME データベースのユーザ名 (デフォルト: \"%s\")\n" +msgstr " -U, --username=USERNAME データベースのユーザ名 (デフォルト: \"%s\")\n" -#: help.c:142 +#: help.c:141 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password パスワード入力を要求しない\n" -#: help.c:143 +#: help.c:142 #, c-format -msgid "" -" -W, --password force password prompt (should happen " -"automatically)\n" -msgstr "" -" -W, --password パスワードプロンプトの強制表示(本来は自動的に表" -"示)\n" +msgid " -W, --password force password prompt (should happen automatically)\n" +msgstr " -W, --password パスワードプロンプトの強制表示(本来は自動的に表示)\n" -#: help.c:145 +#: help.c:144 #, c-format msgid "" "\n" -"For more information, type \"\\?\" (for internal commands) or \"\\help" -"\" (for SQL\n" +"For more information, type \"\\?\" (for internal commands) or \"\\help\" (for SQL\n" "commands) from within psql, or consult the psql section in the PostgreSQL\n" "documentation.\n" "\n" msgstr "" "\n" -"詳細はpsqlの中で\"\\?\"(内部コマンドの場合)または\"\\help\"(SQLコマンドの場" -"合)\n" -"をタイプするか、またはPostgreSQLドキュメント中のpsqlのセクションを参照のこ" -"と。\n" +"詳細はpsqlの中で\"\\?\"(内部コマンドの場合)または\"\\help\"(SQLコマンドの場合)\n" +"をタイプするか、またはPostgreSQLドキュメント中のpsqlのセクションを参照のこと。\n" "\n" +#: help.c:147 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "バグは<%s>に報告してください。\n" + #: help.c:148 #, c-format -#| msgid "Report bugs to .\n" -msgid "Report bugs to .\n" -msgstr "" -"不具合を見つけた場合、まで報告してくださ" -"い。\n" +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" #: help.c:174 #, c-format @@ -2804,532 +2657,480 @@ msgstr "一般\n" #: help.c:175 #, c-format -msgid "" -" \\copyright show PostgreSQL usage and distribution terms\n" -msgstr "" -" \\copyright PostgreSQL の使い方と配布条件を表示します。\n" +msgid " \\copyright show PostgreSQL usage and distribution terms\n" +msgstr " \\copyright PostgreSQL の使い方と配布条件を表示\n" #: help.c:176 #, c-format -msgid "" -" \\crosstabview [COLUMNS] execute query and display results in crosstab\n" -msgstr "" -" \\crosstabview [列数] 問い合わせを実行し、結果をクロスタブに表示しま" -"す。\n" +msgid " \\crosstabview [COLUMNS] execute query and display results in crosstab\n" +msgstr " \\crosstabview [列] 問い合わせを実行し、結果をクロス表形式で出力\n" #: help.c:177 #, c-format -msgid "" -" \\errverbose show most recent error message at maximum " -"verbosity\n" -msgstr "" -" \\errverbose 最後に発生したエラーメッセージを冗長性最大で表示し" -"ます。\n" +msgid " \\errverbose show most recent error message at maximum verbosity\n" +msgstr " \\errverbose 最後のエラーメッセージを最大の冗長性で表示\n" #: help.c:178 #, c-format msgid "" -" \\g [FILE] or ; execute query (and send results to file or |pipe)\n" +" \\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);\n" +" \\g with no arguments is equivalent to a semicolon\n" msgstr "" -" \\g [ファイル] または ; 問い合わせを実行(し、結果をファイルまたは |パイプ " -"へ出力)します。\n" - -#: help.c:179 -#, c-format -msgid "" -" \\gdesc describe result of query, without executing it\n" -msgstr " \\gdesc 問い合わせを実行せずに結果の説明を行います\n" +" \\g [(OPTIONS)] [FILE] 問い合わせ実行 (と結果のファイルまたは |パイプ への\n" +" 送出);\n" +" \\g に引数を付加しない場合はセミコロンと同義\n" #: help.c:180 #, c-format -msgid "" -" \\gexec execute query, then execute each value in its " -"result\n" -msgstr "" -" \\gexec 問い合わせを実行し、結果の中の個々の値を実行しま" -"す。\n" +msgid " \\gdesc describe result of query, without executing it\n" +msgstr " \\gdesc 問い合わせを実行せずに結果の説明を行う\n" #: help.c:181 #, c-format -msgid "" -" \\gset [PREFIX] execute query and store results in psql variables\n" -msgstr "" -" \\gset [PREFIX] 問い合わせを実行して結果を psql 変数に格納しま" -"す。\n" +msgid " \\gexec execute query, then execute each value in its result\n" +msgstr " \\gexec 問い合わせを実行し、結果の中の個々の値を実行\n" #: help.c:182 #, c-format -msgid " \\gx [FILE] as \\g, but forces expanded output mode\n" -msgstr "" -" \\gx [ファイル名] \\g と同じですが、拡張出力モードで実行します。\n" +msgid " \\gset [PREFIX] execute query and store results in psql variables\n" +msgstr " \\gset [PREFIX] 問い合わせを実行して結果を psql 変数に格納\n" #: help.c:183 #, c-format -msgid " \\q quit psql\n" -msgstr " \\q psql を終了します。\n" +msgid " \\gx [(OPTIONS)] [FILE] as \\g, but forces expanded output mode\n" +msgstr " \\gx [ファイル名] \\g と同じ、ただし拡張出力モードを強制\n" #: help.c:184 #, c-format +msgid " \\q quit psql\n" +msgstr " \\q psql を終了する\n" + +#: help.c:185 +#, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" -msgstr " \\watch [秒数] 指定した秒数ごとに問い合わせを実行します。\n" +msgstr " \\watch [秒数] 指定した秒数ごとに問い合わせを実行\n" -#: help.c:187 +#: help.c:188 #, c-format msgid "Help\n" msgstr "ヘルプ\n" -#: help.c:189 +#: help.c:190 #, c-format msgid " \\? [commands] show help on backslash commands\n" -msgstr "" -" \\? [コマンド] バックスラッシュコマンドのヘルプを表示します。\n" +msgstr " \\? [コマンド] バックスラッシュコマンドのヘルプを表示\n" -#: help.c:190 +#: help.c:191 #, c-format msgid " \\? options show help on psql command-line options\n" -msgstr "" -" \\? オプション psql のコマンドライン・オプションのヘルプを表示しま" -"す。\n" +msgstr " \\? オプション psql のコマンドライン・オプションのヘルプを表示\n" -#: help.c:191 +#: help.c:192 #, c-format msgid " \\? variables show help on special variables\n" -msgstr " \\? 変数名 特殊変数のヘルプを表示します。\n" +msgstr " \\? 変数名 特殊変数のヘルプを表示\n" -#: help.c:192 +#: help.c:193 #, c-format -msgid "" -" \\h [NAME] help on syntax of SQL commands, * for all " -"commands\n" -msgstr "" -" \\h [名前] SQL コマンドの文法ヘルプの表示。* で全コマンドを表" -"示します。\n" +msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" +msgstr " \\h [名前] SQLコマンドの文法ヘルプの表示。* で全コマンドを表示\n" -#: help.c:195 +#: help.c:196 #, c-format msgid "Query Buffer\n" msgstr "問い合わせバッファ\n" -#: help.c:196 +#: help.c:197 #, c-format -msgid "" -" \\e [FILE] [LINE] edit the query buffer (or file) with external " -"editor\n" +msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr "" -" \\e [ファイル] [行番号] 現在の問い合わせバッファ(やファイル)を外部エディタ" -"で編集します。\n" +" \\e [ファイル] [行番号] 現在の問い合わせバッファ(やファイル)を外部エディタで\n" +" 編集\n" -#: help.c:197 +#: help.c:198 #, c-format -msgid "" -" \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" -msgstr " \\ef [関数名 [行番号]] 関数定義を外部エディタで編集します。\n" +msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" +msgstr " \\ef [関数名 [行番号]] 関数定義を外部エディタで編集\n" -#: help.c:198 +#: help.c:199 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" -msgstr " \\ev [ビュー名 [行番号]] ビュー定義を外部エディタで編集します。\n" +msgstr " \\ev [ビュー名 [行番号]] ビュー定義を外部エディタで編集\n" -#: help.c:199 +#: help.c:200 #, c-format msgid " \\p show the contents of the query buffer\n" -msgstr " \\p 問い合わせバッファの中身を表示します。\n" +msgstr " \\p 問い合わせバッファの内容を表示\n" -#: help.c:200 +#: help.c:201 #, c-format msgid " \\r reset (clear) the query buffer\n" -msgstr "" -" \\r 問い合わせバッファをリセット(クリア)します。\n" +msgstr " \\r 問い合わせバッファをリセット(クリア)\n" -#: help.c:202 +#: help.c:203 #, c-format msgid " \\s [FILE] display history or save it to file\n" -msgstr " \\s [ファイル] ヒストリを表示またはファイルに保存します。\n" +msgstr " \\s [ファイル] ヒストリを表示またはファイルに保存\n" -#: help.c:204 +#: help.c:205 #, c-format msgid " \\w FILE write query buffer to file\n" -msgstr " \\w ファイル 問い合わせの中身をファイルに保存します。\n" +msgstr " \\w ファイル 問い合わせバッファの内容をファイルに保存\n" -#: help.c:207 +#: help.c:208 #, c-format msgid "Input/Output\n" msgstr "入出力\n" -#: help.c:208 -#, c-format -msgid "" -" \\copy ... perform SQL COPY with data stream to the client " -"host\n" -msgstr "" -" \\copy ... クライアントホストに対し、データストリームを使って " -"SQL コピーを行います。\n" - #: help.c:209 #, c-format -msgid " \\echo [STRING] write string to standard output\n" -msgstr " \\echo [文字列] 文字列を標準出力に書き出します。\n" +msgid " \\copy ... perform SQL COPY with data stream to the client host\n" +msgstr "" +" \\copy ... クライアントホストに対し、データストリームを使って\n" +" SQL COPYを実行\n" #: help.c:210 #, c-format -msgid " \\i FILE execute commands from file\n" -msgstr "" -" \\i ファイル ファイルからコマンドを読み込んで実行します。\n" +msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" +msgstr " \\echo [-n] [文字列] 文字列を標準出力に書き込む (-n で改行しない)\n" #: help.c:211 #, c-format -msgid "" -" \\ir FILE as \\i, but relative to location of current " -"script\n" -msgstr "" -" \\ir ファイル \\i と同じ。ただし現在のスクリプト位置からの相対パ" -"スで指定します。\n" +msgid " \\i FILE execute commands from file\n" +msgstr " \\i ファイル ファイルからコマンドを読み込んで実行\n" #: help.c:212 #, c-format -msgid " \\o [FILE] send all query results to file or |pipe\n" +msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr "" -" \\o [ファイル] 問い合わせ結果をすべてファイルまたは |パイプ へ送り" -"ます。\n" +" \\ir ファイル \\i と同じ。ただし現在のスクリプトの場所からの相対パス\n" +" で指定\n" #: help.c:213 #, c-format -msgid "" -" \\qecho [STRING] write string to query output stream (see \\o)\n" +msgid " \\o [FILE] send all query results to file or |pipe\n" +msgstr " \\o [ファイル] 問い合わせ結果をすべてファイルまたは |パイプ へ送出\n" + +#: help.c:214 +#, c-format +msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" msgstr "" -" \\qecho [文字列] 文字列を問い合わせ出力ストリームに出力(\\o を参照)" -"します。\n" +" \\qecho [-n] [文字列] 文字列を\\oで指定した出力ストリームに書き込む(-n で改行\n" +" しない)\n" -#: help.c:216 +#: help.c:215 +#, c-format +msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" +msgstr " \\warn [-n] [文字列] 文字列を標準エラー出力に書き込む (-n で改行しない)\n" + +#: help.c:218 #, c-format msgid "Conditional\n" msgstr "条件分岐\n" -#: help.c:217 +#: help.c:219 #, c-format msgid " \\if EXPR begin conditional block\n" -msgstr " \\if EXPR 条件ブロックの開始\n" +msgstr " \\if EXPR 条件分岐ブロックの開始\n" -#: help.c:218 +#: help.c:220 #, c-format -msgid "" -" \\elif EXPR alternative within current conditional block\n" -msgstr " \\elif EXPR 現在の条件ブロック内の代替条件\n" +msgid " \\elif EXPR alternative within current conditional block\n" +msgstr " \\elif EXPR 現在の条件分岐ブロック内の選択肢\n" -#: help.c:219 +#: help.c:221 #, c-format -msgid "" -" \\else final alternative within current conditional " -"block\n" -msgstr " \\else 現在の条件ブロックにおける最後の選択肢\n" +msgid " \\else final alternative within current conditional block\n" +msgstr " \\else 現在の条件分岐ブロックにおける最後の選択肢\n" -#: help.c:220 +#: help.c:222 #, c-format msgid " \\endif end conditional block\n" -msgstr " \\endif 条件ブロックの終了\n" +msgstr " \\endif 条件分岐ブロックの終了\n" -#: help.c:223 +#: help.c:225 #, c-format msgid "Informational\n" msgstr "情報表示\n" -#: help.c:224 +#: help.c:226 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" -msgstr " (オプション:S = システムオブジェクトの表示, + = 詳細表示)\n" +msgstr " (オプション:S = システムオブジェクトを表示, + = 詳細表示)\n" -#: help.c:225 +#: help.c:227 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" -msgstr "" -" \\d[S+] テーブル、ビュー、シーケンスの一覧を表示します。\n" +msgstr " \\d[S+] テーブル、ビュー、およびシーケンスの一覧を表示\n" -#: help.c:226 +#: help.c:228 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" -msgstr "" -" \\d[S+] 名前 テーブル、ビュー、シーケンス、インデックスの説明を" -"表示します。\n" +msgstr " \\d[S+] 名前 テーブル、ビュー、シーケンス、またはインデックスの説明を表示\n" -#: help.c:227 +#: help.c:229 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" -msgstr " \\da[S] [パターン] 集約関数一覧を表示します。\n" +msgstr " \\da[S] [パターン] 集約関数の一覧を表示\n" -#: help.c:228 +#: help.c:230 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" -msgstr " \\dA[+] [パターン] アクセスメソッド一覧を表示します。\n" +msgstr " \\dA[+] [パターン] アクセスメソッドの一覧を表示\n" -#: help.c:229 +#: help.c:231 +#, c-format +msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" +msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] 演算子クラスの一覧を表示\n" + +#: help.c:232 +#, c-format +msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" +msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] 演算子族の一覧を表示\n" + +#: help.c:233 +#, c-format +msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" +msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] 演算子族の演算子の一覧を表示\n" + +#: help.c:234 +#, c-format +msgid " \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" +msgstr " \\dAp [AMPTRN [OPFPTRN]] 演算子族のサポート関数の一覧を表示\n" + +#: help.c:235 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" -msgstr " \\db[+] [パターン] テーブル空間一覧を表示します。\n" +msgstr " \\db[+] [パターン] テーブル空間の一覧を表示\n" -#: help.c:230 +#: help.c:236 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" -msgstr " \\dc[S+] [パターン] 符号化方式一覧を表示します。\n" +msgstr " \\dc[S+] [パターン] 符号化方式間の変換の一覧を表示\n" -#: help.c:231 +#: help.c:237 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" -msgstr " \\dC[+] [パターン] キャスト一覧を表示します。\n" +msgstr " \\dC[+] [パターン] キャストの一覧を表示します。\n" -#: help.c:232 +#: help.c:238 #, c-format -msgid "" -" \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" -msgstr "" -" \\dd[S] [パターン] 他では表示されないオブジェクトの説明を表示しま" -"す。\n" +msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" +msgstr " \\dd[S] [パターン] 他では表示されないオブジェクトの説明を表示\n" -#: help.c:233 +#: help.c:239 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" -msgstr " \\dD[S+] [パターン] ドメイン一覧を表示します。\n" +msgstr " \\dD[S+] [パターン] ドメインの一覧を表示\n" -#: help.c:234 +#: help.c:240 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" -msgstr " \\ddp [パターン] デフォルト権限一覧を表示します。\n" +msgstr " \\ddp [パターン] デフォルト権限の一覧を表示\n" -#: help.c:235 +#: help.c:241 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" -msgstr " \\dE[S+] [パターン] 外部テーブル一覧を表示します。\n" +msgstr " \\dE[S+] [パターン] 外部テーブルの一覧を表示\n" -#: help.c:236 +#: help.c:242 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" -msgstr " \\det[+] [パターン] 外部テーブル一覧を表示します。\n" +msgstr " \\det[+] [パターン] 外部テーブルの一覧を表示\n" -#: help.c:237 +#: help.c:243 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" -msgstr " \\des[+] [パターン] 外部サーバ一覧を表示します。\n" +msgstr " \\des[+] [パターン] 外部サーバの一覧を表示\n" -#: help.c:238 +#: help.c:244 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" -msgstr " \\deu[+] [パターン] ユーザマッピング一覧を表示します。\n" +msgstr " \\deu[+] [パターン] ユーザマッピングの一覧を表示\n" -#: help.c:239 +#: help.c:245 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" -msgstr " \\dew[+] [パターン] 外部データラッパ一覧を表示します。\n" +msgstr " \\dew[+] [パターン] 外部データラッパの一覧を表示\n" -#: help.c:240 +#: help.c:246 #, c-format -msgid "" -" \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] " -"functions\n" +msgid " \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] functions\n" msgstr "" -" \\df[antw][S+] [パターン] (集約/通常/プロシージャ/トリガー/ウィンドウ)関数" -"(のみ)の一覧を表示します\n" +" \\df[antw][S+] [パターン] 関数(集約/通常/プロシージャ/トリガー/ウィンドウ\n" +" 関数のみ)の一覧を表示\n" -#: help.c:241 +#: help.c:247 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" -msgstr " \\dF[+] [パターン] テキスト検索設定一覧を表示します。\n" +msgstr " \\dF[+] [パターン] テキスト検索設定の一覧を表示\n" -#: help.c:242 +#: help.c:248 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" -msgstr " \\dFd[+] [パターン] テキスト検索用辞書一覧を表示します。\n" +msgstr " \\dFd[+] [パターン] テキスト検索辞書の一覧を表示\n" -#: help.c:243 +#: help.c:249 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" -msgstr " \\dFp[+] [パターン] テキスト検索用パーサ一覧を表示します。\n" +msgstr " \\dFp[+] [パターン] テキスト検索パーサの一覧を表示\n" -#: help.c:244 +#: help.c:250 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" -msgstr "" -" \\dFt[+] [パターン] テキスト検索用テンプレート一覧を表示します。\n" +msgstr " \\dFt[+] [パターン] テキスト検索テンプレートの一覧を表示\n" -#: help.c:245 +#: help.c:251 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" -msgstr " \\dg[S+] [パターン] ロール一覧を表示します。\n" +msgstr " \\dg[S+] [パターン] ロールの一覧を表示\n" -#: help.c:246 +#: help.c:252 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" -msgstr " \\di[S+] [パターン] インデックス一覧を表示します。\n" +msgstr " \\di[S+] [パターン] インデックスの一覧を表示\n" -#: help.c:247 +#: help.c:253 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" -msgstr "" -" \\dl ラージオブジェクト一覧を表示します。\\lo_list と同" -"じです。\n" +msgstr " \\dl ラージオブジェクトの一覧を表示、\\lo_list と同じ\n" -#: help.c:248 +#: help.c:254 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" -msgstr " \\dL[S+] [パターン] 手続き言語一覧を表示します。\n" +msgstr " \\dL[S+] [パターン] 手続き言語の一覧を表示\n" -#: help.c:249 +#: help.c:255 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" -msgstr " \\dm[S+] [パターン] マテリアライズドビューの一覧を表示します。\n" +msgstr " \\dm[S+] [パターン] 実体化ビューの一覧を表示\n" -#: help.c:250 +#: help.c:256 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" -msgstr " \\dn[S+] [パターン] スキーマ一覧を表示します。\n" +msgstr " \\dn[S+] [パターン] スキーマの一覧を表示\n" -#: help.c:251 +#: help.c:257 #, c-format msgid " \\do[S] [PATTERN] list operators\n" -msgstr " \\do[S] [名前] 演算子一覧を表示します。\n" +msgstr " \\do[S] [名前] 演算子の一覧を表示\n" -#: help.c:252 +#: help.c:258 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" -msgstr " \\dO[S+] [パターン] 照合順序一覧を表示します。\n" +msgstr " \\dO[S+] [パターン] 照合順序の一覧を表示\n" -#: help.c:253 +#: help.c:259 #, c-format -msgid "" -" \\dp [PATTERN] list table, view, and sequence access privileges\n" -msgstr "" -" \\dp [パターン] テーブル、ビュー、シーケンスのアクセス権一覧を表示" -"します。\n" +msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" +msgstr " \\dp [パターン] テーブル、ビュー、シーケンスのアクセス権の一覧を表示\n" -#: help.c:254 +#: help.c:260 #, c-format -#| msgid " \\dRp[+] [PATTERN] list replication publications\n" -msgid "" -" \\dP[tin+] [PATTERN] list [only table/index] partitioned relations\n" +msgid " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n" msgstr "" -" \\dP[tin+] [PATTERN] [テーブル/インデックスのみ]パーティションリレーショ" -"ンの一覧を表示します。\n" +" \\dP[itn+] [パターン] パーティションリレーション[テーブル/インデックスのみ]\n" +" の一覧を表示 [n=入れ子]\n" -#: help.c:255 +#: help.c:261 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" -msgstr "" -" \\drds [パターン1 [パターン2]] データベース毎のロール設定一覧を表示しま" -"す。\n" +msgstr " \\drds [パターン1 [パターン2]] データベース毎のロール設定の一覧を表示\n" -#: help.c:256 +#: help.c:262 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" -msgstr "" -" \\dRp[+] [パターン] レプリケーションのパブリケーション一覧を表示しま" -"す。\n" +msgstr " \\dRp[+] [パターン] レプリケーションのパブリケーションの一覧を表示\n" -#: help.c:257 +#: help.c:263 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" -msgstr "" -" \\dRs[+] [パターン] レプリケーションのサブスクリプション一覧を表示しま" -"す。\n" +msgstr " \\dRs[+] [パターン] レプリケーションのサブスクリプションの一覧を表示\n" -#: help.c:258 +#: help.c:264 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" -msgstr " \\ds[S+] [パターン] 変換シーケンス一覧を表示します。\n" +msgstr " \\ds[S+] [パターン] シーケンスの一覧を表示\n" -#: help.c:259 +#: help.c:265 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" -msgstr " \\dt[S+] [パターン] テーブル一覧を表示します。\n" +msgstr " \\dt[S+] [パターン] テーブルの一覧を表示\n" -#: help.c:260 +#: help.c:266 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" -msgstr " \\dT[S+] [パターン] データ型一覧を表示します。\n" +msgstr " \\dT[S+] [パターン] データ型の一覧を表示\n" -#: help.c:261 +#: help.c:267 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" -msgstr " \\du[S+] [パターン] ロール一覧を表示します。\n" +msgstr " \\du[S+] [パターン] ロールの一覧を表示\n" -#: help.c:262 +#: help.c:268 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" -msgstr " \\dv[S+] [パターン] ビュー一覧を表示します。\n" +msgstr " \\dv[S+] [パターン] ビューの一覧を表示\n" -#: help.c:263 +#: help.c:269 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" -msgstr " \\dx[+] [パターン] 拡張一覧を表示します。\n" +msgstr " \\dx[+] [パターン] 機能拡張の一覧を表示\n" -#: help.c:264 +#: help.c:270 #, c-format msgid " \\dy [PATTERN] list event triggers\n" -msgstr " \\dy [パターン] イベントトリガー一覧を表示します。\n" +msgstr " \\dy [パターン] イベントトリガーの一覧を表示\n" -#: help.c:265 +#: help.c:271 #, c-format msgid " \\l[+] [PATTERN] list databases\n" -msgstr " \\l[+] [パターン] データベース一覧を表示します。\n" +msgstr " \\l[+] [パターン] データベースの一覧を表示\n" -#: help.c:266 +#: help.c:272 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" -msgstr " \\sf[+] 関数名 関数定義を表示します。\n" +msgstr " \\sf[+] 関数名 関数の定義を表示\n" -#: help.c:267 +#: help.c:273 #, c-format msgid " \\sv[+] VIEWNAME show a view's definition\n" -msgstr " \\sv[+] ビュー名 ビュー定義を表示します。\n" +msgstr " \\sv[+] ビュー名 ビューの定義を表示\n" -#: help.c:268 +#: help.c:274 #, c-format msgid " \\z [PATTERN] same as \\dp\n" -msgstr " \\z [パターン] \\dp と同じです。\n" +msgstr " \\z [パターン] \\dp と同じ\n" -#: help.c:271 +#: help.c:277 #, c-format msgid "Formatting\n" msgstr "書式設定\n" -#: help.c:272 +#: help.c:278 #, c-format -msgid "" -" \\a toggle between unaligned and aligned output mode\n" -msgstr "" -" \\a 出力モード(unaligned / aligned)を切り替えます。\n" +msgid " \\a toggle between unaligned and aligned output mode\n" +msgstr " \\a 非整列と整列間の出力モードの切り替え\n" -#: help.c:273 +#: help.c:279 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" -msgstr "" -" \\C [文字列] テーブルのタイトル設定。指定がなければ解除しま" -"す。\n" +msgstr " \\C [文字列] テーブルのタイトルを設定、値がなければ削除\n" -#: help.c:274 +#: help.c:280 #, c-format -msgid "" -" \\f [STRING] show or set field separator for unaligned query " -"output\n" +msgid " \\f [STRING] show or set field separator for unaligned query output\n" msgstr "" -" \\f [文字列] 桁揃えなしの問い合わせ出力で使われるフィールド区切" -"り文字を表示または設定します。\n" +" \\f [文字列] 問い合わせ結果の非整列出力時のフィールド区切り文字を\n" +" 表示または設定\n" -#: help.c:275 +#: help.c:281 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" -msgstr " \\H HTML の出力モードを切り替えます(現在: %s)\n" +msgstr " \\H HTML出力モードの切り替え (現在値: %s)\n" -#: help.c:277 +#: help.c:283 #, c-format -#| msgid "" -#| " \\pset [NAME [VALUE]] set table output option\n" -#| " (NAME := {border|columns|expanded|fieldsep|" -#| "fieldsep_zero|\n" -#| " footer|format|linestyle|null|numericlocale|" -#| "pager|\n" -#| " pager_min_lines|recordsep|recordsep_zero|" -#| "tableattr|title|\n" -#| " tuples_only|unicode_border_linestyle|\n" -#| " unicode_column_linestyle|" -#| "unicode_header_linestyle})\n" msgid "" " \\pset [NAME [VALUE]] set table output option\n" " (border|columns|csv_fieldsep|expanded|fieldsep|\n" @@ -3347,126 +3148,112 @@ msgstr "" " unicode_border_linestyle|unicode_column_linestyle|\n" " unicode_header_linestyle)\n" -#: help.c:284 +#: help.c:290 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" -msgstr " \\t [on|off] 行のみ表示モード(現在: %s)\n" +msgstr " \\t [on|off] 結果行のみ表示 (現在値: %s)\n" -#: help.c:286 +#: help.c:292 #, c-format -msgid "" -" \\T [STRING] set HTML
tag attributes, or unset if none\n" -msgstr "" -" \\T [文字列] HTML の
タグ属性のセット。引数がなければ解" -"除します。\n" +msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" +msgstr " \\T [文字列] HTMLの
タグ属性の設定、値がなければ解除\n" -#: help.c:287 +#: help.c:293 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" -msgstr " \\x [on|off|auto] 拡張出力の切り替え(現在: %s)\n" +msgstr " \\x [on|off|auto] 拡張出力の切り替え (現在値: %s)\n" -#: help.c:291 +#: help.c:297 #, c-format msgid "Connection\n" -msgstr "接続関連\n" +msgstr "接続\n" -#: help.c:293 +#: help.c:299 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently \"%s\")\n" msgstr "" " \\c[onnect] {[DB名|- ユーザ名|- ホスト名|- ポート番号|-] | 接続文字列}\n" -" 新しいデータベースに接続します(現在: \"%s\")\n" +" 新しいデータベースに接続 (現在: \"%s\")\n" -#: help.c:297 +#: help.c:303 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently no connection)\n" msgstr "" " \\c[onnect] {[DB名|- ユーザ名|- ホスト名|- ポート番号|-] | 接続文字列}\n" -" 新しいデータベースに接続します(現在: 未接続)\n" +" 新しいデータベースに接続 (現在: 未接続)\n" -#: help.c:299 +#: help.c:305 #, c-format -msgid "" -" \\conninfo display information about current connection\n" -msgstr " \\conninfo 現在の接続に関する情報を表示します。\n" +msgid " \\conninfo display information about current connection\n" +msgstr " \\conninfo 現在の接続に関する情報を表示\n" -#: help.c:300 +#: help.c:306 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" -msgstr "" -" \\encoding [エンコーディング] クライアントのエンコーディングを表示または設" -"定します。\n" +msgstr " \\encoding [エンコーディング] クライアントのエンコーディングを表示または設定\n" -#: help.c:301 +#: help.c:307 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" -msgstr " \\password [ユーザ名] ユーザのパスワードを安全に変更します。\n" +msgstr " \\password [ユーザ名] ユーザのパスワードを安全に変更\n" -#: help.c:304 +#: help.c:310 #, c-format msgid "Operating System\n" msgstr "オペレーティングシステム\n" -#: help.c:305 +#: help.c:311 #, c-format msgid " \\cd [DIR] change the current working directory\n" -msgstr " \\cd [DIR] カレントディレクトリを変更します。\n" +msgstr " \\cd [DIR] カレントディレクトリを変更\n" -#: help.c:306 +#: help.c:312 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" -msgstr " \\setenv 名前 [値] 環境変数を設定または解除します。\n" +msgstr " \\setenv 名前 [値] 環境変数を設定または解除\n" -#: help.c:307 +#: help.c:313 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" -msgstr "" -" \\timing [on|off] コマンドのタイミングを切り替えます(現在: %s)\n" +msgstr " \\timing [on|off] コマンドの実行時間表示の切り替え (現在値: %s)\n" -#: help.c:309 +#: help.c:315 #, c-format -msgid "" -" \\! [COMMAND] execute command in shell or start interactive " -"shell\n" +msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" msgstr "" -" \\! [コマンド] シェルでコマンドを実行するか、もしくは対話型シェル" -"を起動します。\n" +" \\! [コマンド] シェルでコマンドを実行するか、もしくは対話型シェルを\n" +" 起動します。\n" -#: help.c:312 +#: help.c:318 #, c-format msgid "Variables\n" msgstr "変数\n" -#: help.c:313 +#: help.c:319 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" -msgstr "" -" \\prompt [テキスト] 変数名 ユーザに対して内部変数のセットを促します。\n" +msgstr " \\prompt [テキスト] 変数名 ユーザに対して内部変数の設定を要求します\n" -#: help.c:314 +#: help.c:320 #, c-format -msgid "" -" \\set [NAME [VALUE]] set internal variable, or list all if no " -"parameters\n" -msgstr "" -" \\set [変数名 [値]] 内部変数の値を設定します。引数がない場合は一覧を表" -"示します。\n" +msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" +msgstr " \\set [変数名 [値]] 内部変数の値を設定、パラメータがなければ一覧を表示\n" -#: help.c:315 +#: help.c:321 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" -msgstr " \\unset 変数名 内部変数を削除します。\n" +msgstr " \\unset 変数名 内部変数を削除\n" -#: help.c:318 +#: help.c:324 #, c-format msgid "Large Objects\n" -msgstr "ラージ オブジェクト\n" +msgstr "ラージ・オブジェクト\n" -#: help.c:319 +#: help.c:325 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -3479,21 +3266,21 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID ラージオブジェクトの操作\n" -#: help.c:346 +#: help.c:352 #, c-format msgid "" "List of specially treated variables\n" "\n" msgstr "" -"特殊な扱いをする変数の一覧\n" +"特別に扱われる変数の一覧\n" "\n" -#: help.c:348 +#: help.c:354 #, c-format msgid "psql variables:\n" -msgstr "psql 変数:\n" +msgstr "psql変数:\n" -#: help.c:350 +#: help.c:356 #, c-format msgid "" " psql --set=NAME=VALUE\n" @@ -3501,19 +3288,19 @@ msgid "" "\n" msgstr "" " psql --set=名前=値\n" -" または psql に入ってから \\set 名前 値\n" +" またはpsql内で \\set 名前 値\n" "\n" -#: help.c:352 +#: help.c:358 #, c-format msgid "" " AUTOCOMMIT\n" " if set, successful SQL commands are automatically committed\n" msgstr "" " AUTOCOMMIT\n" -" セットされている場合、SQL コマンドが成功した際に自動的にコミットします\n" +" セットされている場合、SQLコマンドが成功した際に自動的にコミット\n" -#: help.c:354 +#: help.c:360 #, c-format msgid "" " COMP_KEYWORD_CASE\n" @@ -3521,10 +3308,10 @@ msgid "" " [lower, upper, preserve-lower, preserve-upper]\n" msgstr "" " COMP_KEYWORD_CASE\n" -" SQLキーワードの補完に使う文字ケースを指定します\n" +" SQLキーワードの補完に使う文字ケースを指定\n" " [lower, upper, preserve-lower, preserve-upper]\n" -#: help.c:357 +#: help.c:363 #, c-format msgid "" " DBNAME\n" @@ -3533,7 +3320,7 @@ msgstr "" " DBNAME\n" " 現在接続中のデータベース名\n" -#: help.c:359 +#: help.c:365 #, c-format msgid "" " ECHO\n" @@ -3541,10 +3328,10 @@ msgid "" " [all, errors, none, queries]\n" msgstr "" " ECHO\n" -" 標準出力への出力対象とする入力のタイプを設定します\n" +" どの入力を標準出力への出力対象とするかを設定\n" " [all, errors, none, queries]\n" -#: help.c:362 +#: help.c:368 #, c-format msgid "" " ECHO_HIDDEN\n" @@ -3552,11 +3339,10 @@ msgid "" " if set to \"noexec\", just show them without execution\n" msgstr "" " ECHO_HIDDEN\n" -" セットされていれば、バックスラッシュコマンドで実行される内部問い合わせ" -"を\n" -" 表示します; \"noexec\"にセットした場合は実行せずに表示だけします\n" +" セットされていれば、バックスラッシュコマンドで実行される内部問い合わせを\n" +" 表示; \"noexec\"を設定した場合は実行せずに表示のみ\n" -#: help.c:365 +#: help.c:371 #, c-format msgid "" " ENCODING\n" @@ -3565,7 +3351,7 @@ msgstr "" " ENCODING\n" " 現在のクライアント側の文字セットのエンコーディング\n" -#: help.c:367 +#: help.c:373 #, c-format msgid "" " ERROR\n" @@ -3574,26 +3360,26 @@ msgstr "" " ERROR\n" " 最後の問い合わせが失敗であれば真、そうでなければ偽\n" -#: help.c:369 +#: help.c:375 #, c-format msgid "" " FETCH_COUNT\n" -" the number of result rows to fetch and display at a time (0 = " -"unlimited)\n" +" the number of result rows to fetch and display at a time (0 = unlimited)\n" msgstr "" " FETCH_COUNT\n" " 一度に取得および表示する結果の行数 (0 = 無制限)\n" -#: help.c:371 +#: help.c:377 #, c-format msgid "" " HIDE_TABLEAM\n" " if set, table access methods are not displayed\n" msgstr "" " HIDE_TABLEAM\n" -" 設定すると、テーブルアクセスメソッドは表示されません\n" +" 設定すると、テーブルアクセスメソッドは表示されない\n" +"\n" -#: help.c:373 +#: help.c:379 #, c-format msgid "" " HISTCONTROL\n" @@ -3602,7 +3388,7 @@ msgstr "" " HISTCONTROL\n" " コマンド履歴の制御 [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:375 +#: help.c:381 #, c-format msgid "" " HISTFILE\n" @@ -3611,16 +3397,16 @@ msgstr "" " HISTFILE\n" " コマンド履歴を保存するファイルの名前\n" -#: help.c:377 +#: help.c:383 #, c-format msgid "" " HISTSIZE\n" " maximum number of commands to store in the command history\n" msgstr "" " HISTSIZE\n" -" コマンド履歴で保存するコマンド数の最大値\n" +" コマンド履歴で保存するコマンド数の上限\n" -#: help.c:379 +#: help.c:385 #, c-format msgid "" " HOST\n" @@ -3629,58 +3415,56 @@ msgstr "" " HOST\n" " 現在接続中のデータベースサーバホスト\n" -#: help.c:381 +#: help.c:387 #, c-format msgid "" " IGNOREEOF\n" " number of EOFs needed to terminate an interactive session\n" msgstr "" " IGNOREEOF\n" -" 対話形セッションを終わらせるのに必要な EOF の数\n" +" 対話形セッションを終わらせるのに必要なEOFの数\n" -#: help.c:383 +#: help.c:389 #, c-format msgid "" " LASTOID\n" " value of the last affected OID\n" msgstr "" " LASTOID\n" -" 最後の変更の影響を受けた OID の値\n" +" 最後の変更の影響を受けたOID\n" -#: help.c:385 +#: help.c:391 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" " LAST_ERROR_SQLSTATE\n" -" message and SQLSTATE of last error, or empty string and \"00000\" if " -"none\n" +" message and SQLSTATE of last error, or empty string and \"00000\" if none\n" msgstr "" " LAST_ERROR_MESSAGE\n" " LAST_ERROR_SQLSTATE\n" " 最後のエラーのメッセージおよび SQLSTATE、\n" " なにもなければ空の文字列および\"00000\"\n" -#: help.c:388 +#: help.c:394 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" " if set, an error doesn't stop a transaction (uses implicit savepoints)\n" msgstr "" " ON_ERROR_ROLLBACK\n" -" セットされている場合、エラーでトランザクションを停止しません(暗黙のセー" -"ブ\n" -" ポイントを使用します)\n" +" セットされている場合、エラーでトランザクションを停止しない (暗黙のセーブ\n" +" ポイントを使用)\n" -#: help.c:390 +#: help.c:396 #, c-format msgid "" " ON_ERROR_STOP\n" " stop batch execution after error\n" msgstr "" " ON_ERROR_STOP\n" -" エラー発生後にバッチの実行を停止します\n" +" エラー発生後にバッチ実行を停止\n" -#: help.c:392 +#: help.c:398 #, c-format msgid "" " PORT\n" @@ -3689,44 +3473,43 @@ msgstr "" " PORT\n" " 現在の接続のサーバポート\n" -#: help.c:394 +#: help.c:400 #, c-format msgid "" " PROMPT1\n" " specifies the standard psql prompt\n" msgstr "" " PROMPT1\n" -" psql の標準のプロンプトを指定します\n" +" psql の標準のプロンプトを指定\n" -#: help.c:396 +#: help.c:402 #, c-format msgid "" " PROMPT2\n" -" specifies the prompt used when a statement continues from a previous " -"line\n" +" specifies the prompt used when a statement continues from a previous line\n" msgstr "" " PROMPT2\n" -" ステートメントが前行から継続する場合のプロンプトを指定します\n" +" ステートメントが前行から継続する場合のプロンプトを指定\n" -#: help.c:398 +#: help.c:404 #, c-format msgid "" " PROMPT3\n" " specifies the prompt used during COPY ... FROM STDIN\n" msgstr "" " PROMPT3\n" -" COPY ... FROM STDIN の最中に使われるプロンプトを指定します\n" +" COPY ... FROM STDIN の最中に使われるプロンプトを指定\n" -#: help.c:400 +#: help.c:406 #, c-format msgid "" " QUIET\n" " run quietly (same as -q option)\n" msgstr "" " QUIET\n" -" メッセージを表示しません(-q オプションと同じ)\n" +" メッセージを表示しない (-q オプションと同じ)\n" -#: help.c:402 +#: help.c:408 #, c-format msgid "" " ROW_COUNT\n" @@ -3735,7 +3518,7 @@ msgstr "" " ROW_COUNT\n" " 最後の問い合わせで返却した、または影響を与えた行の数、または0\n" -#: help.c:404 +#: help.c:410 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3746,7 +3529,7 @@ msgstr "" " SERVER_VERSION_NUM\n" " サーバのバージョン(短い文字列または数値)\n" -#: help.c:407 +#: help.c:413 #, c-format msgid "" " SHOW_CONTEXT\n" @@ -3755,16 +3538,16 @@ msgstr "" " SHOW_CONTEXT\n" " メッセージコンテキストフィールドの表示を制御 [never, errors, always]\n" -#: help.c:409 +#: help.c:415 #, c-format msgid "" " SINGLELINE\n" " if set, end of line terminates SQL commands (same as -S option)\n" msgstr "" " SINGLELINE\n" -" セットした場合、改行がSQL コマンドを終端します (-S オプションと同じ)\n" +" セットした場合、改行はSQLコマンドを終端する (-S オプションと同じ)\n" -#: help.c:411 +#: help.c:417 #, c-format msgid "" " SINGLESTEP\n" @@ -3773,7 +3556,7 @@ msgstr "" " SINGLESTEP\n" " シングルステップモード (-s オプションと同じ)\n" -#: help.c:413 +#: help.c:419 #, c-format msgid "" " SQLSTATE\n" @@ -3782,7 +3565,7 @@ msgstr "" " SQLSTATE\n" " 最後の問い合わせの SQLSTATE、またはエラーでなければ\"00000\"\n" -#: help.c:415 +#: help.c:421 #, c-format msgid "" " USER\n" @@ -3791,11 +3574,8 @@ msgstr "" " USER\n" " 現在接続中のデータベースユーザ\n" -#: help.c:417 +#: help.c:423 #, c-format -#| msgid "" -#| " VERBOSITY\n" -#| " controls verbosity of error reports [default, verbose, terse]\n" msgid "" " VERBOSITY\n" " controls verbosity of error reports [default, verbose, terse, sqlstate]\n" @@ -3803,7 +3583,7 @@ msgstr "" " VERBOSITY\n" " エラー報告の詳細度を制御 [default, verbose, terse, sqlstate]\n" -#: help.c:419 +#: help.c:425 #, c-format msgid "" " VERSION\n" @@ -3816,7 +3596,7 @@ msgstr "" " VERSION_NUM\n" " psql のバージョン(長い文字列、短い文字列または数値)\n" -#: help.c:424 +#: help.c:430 #, c-format msgid "" "\n" @@ -3825,7 +3605,7 @@ msgstr "" "\n" "表示設定:\n" -#: help.c:426 +#: help.c:432 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3833,28 +3613,28 @@ msgid "" "\n" msgstr "" " psql --pset=名前[=値]\n" -" または psql に入ってから \\pset 名前 [値]\n" +" またはpsql内で \\pset 名前 [値]\n" "\n" -#: help.c:428 +#: help.c:434 #, c-format msgid "" " border\n" " border style (number)\n" msgstr "" " border\n" -" border style (number)\n" +" 境界線のスタイル (番号)\n" -#: help.c:430 +#: help.c:436 #, c-format msgid "" " columns\n" " target width for the wrapped format\n" msgstr "" " columns\n" -" 折り返し表示で目標とする横幅\n" +" 折り返し形式で目標とする横幅\n" -#: help.c:432 +#: help.c:438 #, c-format msgid "" " expanded (or x)\n" @@ -3863,25 +3643,25 @@ msgstr "" " expanded (or x)\n" " 拡張出力 [on, off, auto]\n" -#: help.c:434 +#: help.c:440 #, c-format msgid "" " fieldsep\n" " field separator for unaligned output (default \"%s\")\n" msgstr "" " fieldsep\n" -" 桁揃えしない出力でのフィールド区切り文字(デフォルトは \"%s\")\n" +" 非整列出力でのフィールド区切り文字(デフォルトは \"%s\")\n" -#: help.c:437 +#: help.c:443 #, c-format msgid "" " fieldsep_zero\n" " set field separator for unaligned output to a zero byte\n" msgstr "" " fieldsep_zero\n" -" 桁揃えしない出力でのフィールド区切り文字をバイト値の0に設定\n" +" 非整列出力でのフィールド区切り文字をバイト値の0に設定\n" -#: help.c:439 +#: help.c:445 #, c-format msgid "" " footer\n" @@ -3890,17 +3670,16 @@ msgstr "" " footer\n" " テーブルフッター出力の要否を設定 [on, off]\n" -#: help.c:441 +#: help.c:447 #, c-format msgid "" " format\n" " set output format [unaligned, aligned, wrapped, html, asciidoc, ...]\n" msgstr "" " format\n" -" 出力フォーマットを設定 [unaligned, aligned, wrapped, html, " -"asciidoc, ...]\n" +" 出力フォーマットを設定 [unaligned, aligned, wrapped, html, asciidoc, ...]\n" -#: help.c:443 +#: help.c:449 #, c-format msgid "" " linestyle\n" @@ -3909,7 +3688,7 @@ msgstr "" " linestyle\n" " 境界線の描画スタイルを設定 [ascii, old-ascii, unicode]\n" -#: help.c:445 +#: help.c:451 #, c-format msgid "" " null\n" @@ -3918,17 +3697,16 @@ msgstr "" " null\n" " null 値の代わりに表示する文字列を設定\n" -#: help.c:447 +#: help.c:453 #, c-format msgid "" " numericlocale\n" -" enable display of a locale-specific character to separate groups of " -"digits\n" +" enable display of a locale-specific character to separate groups of digits\n" msgstr "" " numericlocale\n" " ロケール固有文字での桁区切りを表示するかどうかを指定\n" -#: help.c:449 +#: help.c:455 #, c-format msgid "" " pager\n" @@ -3937,25 +3715,25 @@ msgstr "" " pager\n" " いつ外部ページャーを使うかを制御 [yes, no, always]\n" -#: help.c:451 +#: help.c:457 #, c-format msgid "" " recordsep\n" " record (line) separator for unaligned output\n" msgstr "" " recordsep\n" -" 桁揃えしない出力でのレコード(行)区切り\n" +" 非整列出力でのレコード(行)区切り\n" -#: help.c:453 +#: help.c:459 #, c-format msgid "" " recordsep_zero\n" " set record separator for unaligned output to a zero byte\n" msgstr "" " recordsep_zero\n" -" 桁揃えしない出力でレコード区切りにバイト値の0に設定\n" +" 非整列出力でレコード区切りにバイト値の0に設定\n" -#: help.c:455 +#: help.c:461 #, c-format msgid "" " tableattr (or T)\n" @@ -3963,10 +3741,10 @@ msgid "" " column widths for left-aligned data types in latex-longtable format\n" msgstr "" " tableattr (or T)\n" -" HTML フォーマット時の table タグの属性、もしくは latex-longtable\n" +" HTMLフォーマット時のtableタグの属性、もしくは latex-longtable\n" " フォーマット時に左寄せするデータ型の相対カラム幅を指定\n" -#: help.c:458 +#: help.c:464 #, c-format msgid "" " title\n" @@ -3975,16 +3753,16 @@ msgstr "" " title\n" " 以降に表示される表のタイトルを設定\n" -#: help.c:460 +#: help.c:466 #, c-format msgid "" " tuples_only\n" " if set, only actual table data is shown\n" msgstr "" " tuples_only\n" -" セットされた場合、実際のテーブルデータのみを表示します\n" +" セットされた場合、実際のテーブルデータのみを表示\n" -#: help.c:462 +#: help.c:468 #, c-format msgid "" " unicode_border_linestyle\n" @@ -3997,7 +3775,7 @@ msgstr "" " unicode_header_linestyle\n" " Unicode による線描画時のスタイルを設定 [single, double]\n" -#: help.c:467 +#: help.c:473 #, c-format msgid "" "\n" @@ -4006,7 +3784,7 @@ msgstr "" "\n" "環境変数:\n" -#: help.c:471 +#: help.c:477 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -4014,10 +3792,10 @@ msgid "" "\n" msgstr "" " 名前=値 [名前=値] psql ...\n" -" または、psql に入ってから \\setenv 名前 [値]\n" +" またはpsql内で \\setenv 名前 [値]\n" "\n" -#: help.c:473 +#: help.c:479 #, c-format msgid "" " set NAME=VALUE\n" @@ -4027,10 +3805,10 @@ msgid "" msgstr "" " set 名前=値\n" " psql ...\n" -" または、psql に入ってから \\setenv 名前 [値]\n" +" またはpsq内で \\setenv 名前 [値]\n" "\n" -#: help.c:476 +#: help.c:482 #, c-format msgid "" " COLUMNS\n" @@ -4039,7 +3817,7 @@ msgstr "" " COLUMNS\n" " 折り返し書式におけるカラム数\n" -#: help.c:478 +#: help.c:484 #, c-format msgid "" " PGAPPNAME\n" @@ -4048,7 +3826,7 @@ msgstr "" " PGAPPNAME\n" " application_name 接続パラメータと同じ\n" -#: help.c:480 +#: help.c:486 #, c-format msgid "" " PGDATABASE\n" @@ -4057,7 +3835,7 @@ msgstr "" " PGDATABASE\n" " dbname 接続パラメータと同じ\n" -#: help.c:482 +#: help.c:488 #, c-format msgid "" " PGHOST\n" @@ -4066,7 +3844,7 @@ msgstr "" " PGHOST\n" " host 接続パラメータと同じ\n" -#: help.c:484 +#: help.c:490 #, c-format msgid "" " PGPASSWORD\n" @@ -4075,7 +3853,7 @@ msgstr "" " PGPASSWORD\n" " 接続用パスワード (推奨されません)\n" -#: help.c:486 +#: help.c:492 #, c-format msgid "" " PGPASSFILE\n" @@ -4084,7 +3862,7 @@ msgstr "" " PGPASSFILE\n" " パスワードファイル名\n" -#: help.c:488 +#: help.c:494 #, c-format msgid "" " PGPORT\n" @@ -4093,7 +3871,7 @@ msgstr "" " PGPORT\n" " port 接続パラメータと同じ\n" -#: help.c:490 +#: help.c:496 #, c-format msgid "" " PGUSER\n" @@ -4102,7 +3880,7 @@ msgstr "" " PGUSER\n" " user 接続パラメータと同じ\n" -#: help.c:492 +#: help.c:498 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" @@ -4111,7 +3889,7 @@ msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" " \\e, \\ef, \\ev コマンドで使われるエディタ\n" -#: help.c:494 +#: help.c:500 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" @@ -4120,7 +3898,7 @@ msgstr "" " PSQL_EDITOR_LINENUMBER_ARG\n" " エディタの起動時に行番号を指定する方法\n" -#: help.c:496 +#: help.c:502 #, c-format msgid "" " PSQL_HISTORY\n" @@ -4129,7 +3907,7 @@ msgstr "" " PSQL_HISTORY\n" " コマンドライン履歴ファイルの代替の場所\n" -#: help.c:498 +#: help.c:504 #, c-format msgid "" " PSQL_PAGER, PAGER\n" @@ -4138,7 +3916,7 @@ msgstr "" " PSQL_PAGER, PAGER\n" " 外部ページャープログラムの名前\n" -#: help.c:500 +#: help.c:506 #, c-format msgid "" " PSQLRC\n" @@ -4147,7 +3925,7 @@ msgstr "" " PSQLRC\n" " ユーザの .psqlrc ファイルの代替の場所\n" -#: help.c:502 +#: help.c:508 #, c-format msgid "" " SHELL\n" @@ -4156,7 +3934,7 @@ msgstr "" " SHELL\n" " \\! コマンドで使われるシェル\n" -#: help.c:504 +#: help.c:510 #, c-format msgid "" " TMPDIR\n" @@ -4165,18 +3943,12 @@ msgstr "" " TMPDIR\n" " テンポラリファイル用ディレクトリ\n" -#: help.c:548 +#: help.c:554 msgid "Available help:\n" msgstr "利用可能なヘルプ:\n" -#: help.c:636 +#: help.c:642 #, c-format -#| msgid "" -#| "Command: %s\n" -#| "Description: %s\n" -#| "Syntax:\n" -#| "%s\n" -#| "\n" msgid "" "Command: %s\n" "Description: %s\n" @@ -4194,7 +3966,7 @@ msgstr "" "URL: %s\n" "\n" -#: help.c:655 +#: help.c:661 #, c-format msgid "" "No help available for \"%s\".\n" @@ -4203,39 +3975,33 @@ msgstr "" "\"%s\"のヘルプがありません。\n" "引数なしで \\h とタイプすると、ヘルプの一覧が表示されます。\n" -#: input.c:218 +#: input.c:217 #, c-format -#| msgid "could not read from input file: %s\n" msgid "could not read from input file: %m" msgstr "入力ファイルから読み込めませんでした: %m" -#: input.c:472 input.c:510 +#: input.c:471 input.c:509 #, c-format -#| msgid "could not save history to file \"%s\": %s\n" msgid "could not save history to file \"%s\": %m" msgstr "ファイル\"%s\"にヒストリーを保存できませんでした: %m" -#: input.c:529 +#: input.c:528 #, c-format -#| msgid "history is not supported by this installation\n" msgid "history is not supported by this installation" msgstr "この環境ではヒストリー機能がサポートされていません" #: large_obj.c:65 #, c-format -#| msgid "%s: not connected to a database\n" msgid "%s: not connected to a database" msgstr "%s: データベースに接続していません" #: large_obj.c:84 #, c-format -#| msgid "%s: current transaction is aborted\n" msgid "%s: current transaction is aborted" msgstr "%s: 現在のトランザクションは中断されました" #: large_obj.c:87 #, c-format -#| msgid "%s: unknown transaction status\n" msgid "%s: unknown transaction status" msgstr "%s: 未知のトランザクション状態" @@ -4249,38 +4015,35 @@ msgstr "ラージ オブジェクト" #: mainloop.c:136 #, c-format -#| msgid "\\if: escaped\n" msgid "\\if: escaped" msgstr "\\if: 脱出しました" -#: mainloop.c:183 +#: mainloop.c:195 #, c-format msgid "Use \"\\q\" to leave %s.\n" msgstr "\"\\q\"で%sを抜けます。\n" -#: mainloop.c:205 +#: mainloop.c:217 msgid "" "The input is a PostgreSQL custom-format dump.\n" "Use the pg_restore command-line client to restore this dump to a database.\n" msgstr "" "この入力データは PostgreSQL のカスタムフォーマットのダンプです。\n" -"このダンプをデータベースにリストアするには pg_restore コマンドを使ってくださ" -"い。\n" +"このダンプをデータベースにリストアするには pg_restore コマンドを使ってください。\n" -#: mainloop.c:282 +#: mainloop.c:298 msgid "Use \\? for help or press control-C to clear the input buffer." msgstr "\\? でヘルプの表示、control-C で入力バッファをクリアします。" -#: mainloop.c:284 +#: mainloop.c:300 msgid "Use \\? for help." msgstr " \\? でヘルプを表示します。" -#: mainloop.c:288 +#: mainloop.c:304 msgid "You are using psql, the command-line interface to PostgreSQL." -msgstr "" -"PostgreSQL へのコマンド ライン インターフェイス、psql を使用しています。" +msgstr "PostgreSQL へのコマンド ライン インターフェイス、psql を使用しています。" -#: mainloop.c:289 +#: mainloop.c:305 #, c-format msgid "" "Type: \\copyright for distribution terms\n" @@ -4290,37 +4053,38 @@ msgid "" " \\q to quit\n" msgstr "" "ヒント: \\copyright とタイプすると、配布条件を表示します。\n" -" \\h とタイプすると、SQL コマンドのヘルプを表示します。\n" -" \\? とタイプすると、psql コマンドのヘルプを表示します。\n" +" \\h とタイプすると、SQLコマンドのヘルプを表示します。\n" +" \\? とタイプすると、psqlコマンドのヘルプを表示します。\n" " \\g と打つかセミコロンで閉じると、問い合わせを実行します。\n" " \\q で終了します。\n" -#: mainloop.c:313 +#: mainloop.c:329 msgid "Use \\q to quit." msgstr "\\q で終了します。" -#: mainloop.c:316 mainloop.c:340 +#: mainloop.c:332 mainloop.c:356 msgid "Use control-D to quit." msgstr "control-D で終了します。" -#: mainloop.c:318 mainloop.c:342 +#: mainloop.c:334 mainloop.c:358 msgid "Use control-C to quit." msgstr "control-C で終了します。" -#: mainloop.c:449 mainloop.c:591 +#: mainloop.c:465 mainloop.c:613 #, c-format -#| msgid "query ignored; use \\endif or Ctrl-C to exit current \\if block\n" msgid "query ignored; use \\endif or Ctrl-C to exit current \\if block" -msgstr "" -"問い合わせは無視されました; \\endifかCtrl-Cで現在の\\ifブロックを抜けてくださ" -"い" +msgstr "問い合わせは無視されました; \\endifかCtrl-Cで現在の\\ifブロックを抜けてください" -#: mainloop.c:609 +#: mainloop.c:631 #, c-format -#| msgid "reached EOF without finding closing \\endif(s)\n" msgid "reached EOF without finding closing \\endif(s)" msgstr "ブロックを閉じる\\endifを検出中に、ファイルの終端(EOF)に達しました" +#: psqlscan.l:693 +#, c-format +msgid "skipping recursive expansion of variable \"%s\"" +msgstr "変数\"%s\"の再帰展開をスキップしています" + #: psqlscanslash.l:638 #, c-format msgid "unterminated quoted string" @@ -4328,7 +4092,6 @@ msgstr "文字列の引用符が閉じていません" #: psqlscanslash.l:811 #, c-format -#| msgid "%s: out of memory\n" msgid "%s: out of memory" msgstr "%s: メモリ不足です" @@ -4350,51 +4113,51 @@ msgstr "%s: メモリ不足です" #: sql_help.c:808 sql_help.c:837 sql_help.c:842 sql_help.c:847 sql_help.c:852 #: sql_help.c:857 sql_help.c:879 sql_help.c:881 sql_help.c:883 sql_help.c:885 #: sql_help.c:888 sql_help.c:890 sql_help.c:931 sql_help.c:975 sql_help.c:980 -#: sql_help.c:985 sql_help.c:990 sql_help.c:995 sql_help.c:1014 -#: sql_help.c:1025 sql_help.c:1027 sql_help.c:1046 sql_help.c:1056 -#: sql_help.c:1058 sql_help.c:1060 sql_help.c:1072 sql_help.c:1076 -#: sql_help.c:1078 sql_help.c:1089 sql_help.c:1091 sql_help.c:1093 -#: sql_help.c:1109 sql_help.c:1111 sql_help.c:1115 sql_help.c:1118 -#: sql_help.c:1119 sql_help.c:1120 sql_help.c:1123 sql_help.c:1125 -#: sql_help.c:1257 sql_help.c:1259 sql_help.c:1262 sql_help.c:1265 -#: sql_help.c:1267 sql_help.c:1269 sql_help.c:1272 sql_help.c:1275 -#: sql_help.c:1384 sql_help.c:1386 sql_help.c:1388 sql_help.c:1391 -#: sql_help.c:1412 sql_help.c:1415 sql_help.c:1418 sql_help.c:1421 -#: sql_help.c:1425 sql_help.c:1427 sql_help.c:1429 sql_help.c:1431 -#: sql_help.c:1445 sql_help.c:1448 sql_help.c:1450 sql_help.c:1452 -#: sql_help.c:1462 sql_help.c:1464 sql_help.c:1474 sql_help.c:1476 -#: sql_help.c:1486 sql_help.c:1489 sql_help.c:1511 sql_help.c:1513 -#: sql_help.c:1515 sql_help.c:1518 sql_help.c:1520 sql_help.c:1522 -#: sql_help.c:1525 sql_help.c:1575 sql_help.c:1617 sql_help.c:1620 -#: sql_help.c:1622 sql_help.c:1624 sql_help.c:1626 sql_help.c:1628 -#: sql_help.c:1631 sql_help.c:1681 sql_help.c:1697 sql_help.c:1918 -#: sql_help.c:1987 sql_help.c:2006 sql_help.c:2019 sql_help.c:2076 -#: sql_help.c:2083 sql_help.c:2093 sql_help.c:2113 sql_help.c:2138 -#: sql_help.c:2156 sql_help.c:2185 sql_help.c:2280 sql_help.c:2322 -#: sql_help.c:2345 sql_help.c:2366 sql_help.c:2367 sql_help.c:2404 -#: sql_help.c:2424 sql_help.c:2446 sql_help.c:2460 sql_help.c:2480 -#: sql_help.c:2503 sql_help.c:2533 sql_help.c:2558 sql_help.c:2604 -#: sql_help.c:2882 sql_help.c:2895 sql_help.c:2912 sql_help.c:2928 -#: sql_help.c:2968 sql_help.c:3020 sql_help.c:3024 sql_help.c:3026 -#: sql_help.c:3032 sql_help.c:3050 sql_help.c:3077 sql_help.c:3112 -#: sql_help.c:3124 sql_help.c:3133 sql_help.c:3177 sql_help.c:3191 -#: sql_help.c:3219 sql_help.c:3227 sql_help.c:3235 sql_help.c:3243 -#: sql_help.c:3251 sql_help.c:3259 sql_help.c:3267 sql_help.c:3275 -#: sql_help.c:3284 sql_help.c:3295 sql_help.c:3303 sql_help.c:3311 -#: sql_help.c:3319 sql_help.c:3327 sql_help.c:3337 sql_help.c:3346 -#: sql_help.c:3355 sql_help.c:3363 sql_help.c:3373 sql_help.c:3384 -#: sql_help.c:3392 sql_help.c:3401 sql_help.c:3412 sql_help.c:3421 -#: sql_help.c:3429 sql_help.c:3437 sql_help.c:3445 sql_help.c:3453 -#: sql_help.c:3461 sql_help.c:3469 sql_help.c:3477 sql_help.c:3485 -#: sql_help.c:3493 sql_help.c:3501 sql_help.c:3518 sql_help.c:3527 -#: sql_help.c:3535 sql_help.c:3552 sql_help.c:3567 sql_help.c:3837 -#: sql_help.c:3888 sql_help.c:3917 sql_help.c:3925 sql_help.c:4358 -#: sql_help.c:4406 sql_help.c:4547 +#: sql_help.c:985 sql_help.c:990 sql_help.c:995 sql_help.c:1014 sql_help.c:1025 +#: sql_help.c:1027 sql_help.c:1046 sql_help.c:1056 sql_help.c:1058 +#: sql_help.c:1060 sql_help.c:1072 sql_help.c:1076 sql_help.c:1078 +#: sql_help.c:1090 sql_help.c:1092 sql_help.c:1094 sql_help.c:1096 +#: sql_help.c:1112 sql_help.c:1114 sql_help.c:1118 sql_help.c:1121 +#: sql_help.c:1122 sql_help.c:1123 sql_help.c:1126 sql_help.c:1128 +#: sql_help.c:1262 sql_help.c:1264 sql_help.c:1267 sql_help.c:1270 +#: sql_help.c:1272 sql_help.c:1274 sql_help.c:1277 sql_help.c:1280 +#: sql_help.c:1391 sql_help.c:1393 sql_help.c:1395 sql_help.c:1398 +#: sql_help.c:1419 sql_help.c:1422 sql_help.c:1425 sql_help.c:1428 +#: sql_help.c:1432 sql_help.c:1434 sql_help.c:1436 sql_help.c:1438 +#: sql_help.c:1452 sql_help.c:1455 sql_help.c:1457 sql_help.c:1459 +#: sql_help.c:1469 sql_help.c:1471 sql_help.c:1481 sql_help.c:1483 +#: sql_help.c:1493 sql_help.c:1496 sql_help.c:1519 sql_help.c:1521 +#: sql_help.c:1523 sql_help.c:1525 sql_help.c:1528 sql_help.c:1530 +#: sql_help.c:1533 sql_help.c:1536 sql_help.c:1586 sql_help.c:1629 +#: sql_help.c:1632 sql_help.c:1634 sql_help.c:1636 sql_help.c:1639 +#: sql_help.c:1641 sql_help.c:1643 sql_help.c:1646 sql_help.c:1696 +#: sql_help.c:1712 sql_help.c:1933 sql_help.c:2002 sql_help.c:2021 +#: sql_help.c:2034 sql_help.c:2091 sql_help.c:2098 sql_help.c:2108 +#: sql_help.c:2129 sql_help.c:2155 sql_help.c:2173 sql_help.c:2200 +#: sql_help.c:2295 sql_help.c:2340 sql_help.c:2364 sql_help.c:2387 +#: sql_help.c:2391 sql_help.c:2425 sql_help.c:2445 sql_help.c:2467 +#: sql_help.c:2481 sql_help.c:2501 sql_help.c:2524 sql_help.c:2554 +#: sql_help.c:2579 sql_help.c:2625 sql_help.c:2903 sql_help.c:2916 +#: sql_help.c:2933 sql_help.c:2949 sql_help.c:2989 sql_help.c:3041 +#: sql_help.c:3045 sql_help.c:3047 sql_help.c:3053 sql_help.c:3071 +#: sql_help.c:3098 sql_help.c:3133 sql_help.c:3145 sql_help.c:3154 +#: sql_help.c:3198 sql_help.c:3212 sql_help.c:3240 sql_help.c:3248 +#: sql_help.c:3260 sql_help.c:3270 sql_help.c:3278 sql_help.c:3286 +#: sql_help.c:3294 sql_help.c:3302 sql_help.c:3311 sql_help.c:3322 +#: sql_help.c:3330 sql_help.c:3338 sql_help.c:3346 sql_help.c:3354 +#: sql_help.c:3364 sql_help.c:3373 sql_help.c:3382 sql_help.c:3390 +#: sql_help.c:3400 sql_help.c:3411 sql_help.c:3419 sql_help.c:3428 +#: sql_help.c:3439 sql_help.c:3448 sql_help.c:3456 sql_help.c:3464 +#: sql_help.c:3472 sql_help.c:3480 sql_help.c:3488 sql_help.c:3496 +#: sql_help.c:3504 sql_help.c:3512 sql_help.c:3520 sql_help.c:3528 +#: sql_help.c:3545 sql_help.c:3554 sql_help.c:3562 sql_help.c:3579 +#: sql_help.c:3594 sql_help.c:3869 sql_help.c:3920 sql_help.c:3949 +#: sql_help.c:3962 sql_help.c:4407 sql_help.c:4455 sql_help.c:4596 msgid "name" msgstr "名前" -#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1768 -#: sql_help.c:3192 sql_help.c:4144 +#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1783 +#: sql_help.c:3213 sql_help.c:4193 msgid "aggregate_signature" msgstr "集約関数のシグニチャー" @@ -4403,31 +4166,31 @@ msgstr "集約関数のシグニチャー" #: sql_help.c:589 sql_help.c:616 sql_help.c:666 sql_help.c:731 sql_help.c:786 #: sql_help.c:807 sql_help.c:846 sql_help.c:891 sql_help.c:932 sql_help.c:984 #: sql_help.c:1016 sql_help.c:1026 sql_help.c:1059 sql_help.c:1079 -#: sql_help.c:1092 sql_help.c:1126 sql_help.c:1266 sql_help.c:1385 -#: sql_help.c:1428 sql_help.c:1449 sql_help.c:1463 sql_help.c:1475 -#: sql_help.c:1488 sql_help.c:1519 sql_help.c:1576 sql_help.c:1625 +#: sql_help.c:1093 sql_help.c:1129 sql_help.c:1271 sql_help.c:1392 +#: sql_help.c:1435 sql_help.c:1456 sql_help.c:1470 sql_help.c:1482 +#: sql_help.c:1495 sql_help.c:1522 sql_help.c:1587 sql_help.c:1640 msgid "new_name" msgstr "新しい名前" #: sql_help.c:40 sql_help.c:69 sql_help.c:84 sql_help.c:120 sql_help.c:248 #: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:618 #: sql_help.c:627 sql_help.c:685 sql_help.c:705 sql_help.c:734 sql_help.c:789 -#: sql_help.c:851 sql_help.c:889 sql_help.c:989 sql_help.c:1028 -#: sql_help.c:1057 sql_help.c:1077 sql_help.c:1090 sql_help.c:1124 -#: sql_help.c:1326 sql_help.c:1387 sql_help.c:1430 sql_help.c:1451 -#: sql_help.c:1514 sql_help.c:1623 sql_help.c:2868 +#: sql_help.c:851 sql_help.c:889 sql_help.c:989 sql_help.c:1028 sql_help.c:1057 +#: sql_help.c:1077 sql_help.c:1091 sql_help.c:1127 sql_help.c:1332 +#: sql_help.c:1394 sql_help.c:1437 sql_help.c:1458 sql_help.c:1520 +#: sql_help.c:1635 sql_help.c:2889 msgid "new_owner" msgstr "新しい所有者" #: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:252 sql_help.c:319 #: sql_help.c:448 sql_help.c:534 sql_help.c:668 sql_help.c:709 sql_help.c:737 -#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 -#: sql_help.c:1094 sql_help.c:1268 sql_help.c:1432 sql_help.c:1453 -#: sql_help.c:1465 sql_help.c:1477 sql_help.c:1521 sql_help.c:1627 +#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1095 +#: sql_help.c:1273 sql_help.c:1439 sql_help.c:1460 sql_help.c:1472 +#: sql_help.c:1484 sql_help.c:1524 sql_help.c:1642 msgid "new_schema" msgstr "新しいスキーマ" -#: sql_help.c:44 sql_help.c:1832 sql_help.c:3193 sql_help.c:4173 +#: sql_help.c:44 sql_help.c:1847 sql_help.c:3214 sql_help.c:4222 msgid "where aggregate_signature is:" msgstr "集約関数のシグニチャーには以下のものがあります:" @@ -4435,13 +4198,13 @@ msgstr "集約関数のシグニチャーには以下のものがあります:" #: sql_help.c:354 sql_help.c:370 sql_help.c:373 sql_help.c:376 sql_help.c:516 #: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:838 #: sql_help.c:843 sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:976 -#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1786 -#: sql_help.c:1803 sql_help.c:1809 sql_help.c:1833 sql_help.c:1836 -#: sql_help.c:1839 sql_help.c:1988 sql_help.c:2007 sql_help.c:2010 -#: sql_help.c:2281 sql_help.c:2481 sql_help.c:3194 sql_help.c:3197 -#: sql_help.c:3200 sql_help.c:3285 sql_help.c:3374 sql_help.c:3402 -#: sql_help.c:3722 sql_help.c:4055 sql_help.c:4150 sql_help.c:4157 -#: sql_help.c:4163 sql_help.c:4174 sql_help.c:4177 sql_help.c:4180 +#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1801 +#: sql_help.c:1818 sql_help.c:1824 sql_help.c:1848 sql_help.c:1851 +#: sql_help.c:1854 sql_help.c:2003 sql_help.c:2022 sql_help.c:2025 +#: sql_help.c:2296 sql_help.c:2502 sql_help.c:3215 sql_help.c:3218 +#: sql_help.c:3221 sql_help.c:3312 sql_help.c:3401 sql_help.c:3429 +#: sql_help.c:3753 sql_help.c:4101 sql_help.c:4199 sql_help.c:4206 +#: sql_help.c:4212 sql_help.c:4223 sql_help.c:4226 sql_help.c:4229 msgid "argmode" msgstr "引数のモード" @@ -4449,13 +4212,13 @@ msgstr "引数のモード" #: sql_help.c:355 sql_help.c:371 sql_help.c:374 sql_help.c:377 sql_help.c:517 #: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:839 #: sql_help.c:844 sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:977 -#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1787 -#: sql_help.c:1804 sql_help.c:1810 sql_help.c:1834 sql_help.c:1837 -#: sql_help.c:1840 sql_help.c:1989 sql_help.c:2008 sql_help.c:2011 -#: sql_help.c:2282 sql_help.c:2482 sql_help.c:3195 sql_help.c:3198 -#: sql_help.c:3201 sql_help.c:3286 sql_help.c:3375 sql_help.c:3403 -#: sql_help.c:4151 sql_help.c:4158 sql_help.c:4164 sql_help.c:4175 -#: sql_help.c:4178 sql_help.c:4181 +#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1802 +#: sql_help.c:1819 sql_help.c:1825 sql_help.c:1849 sql_help.c:1852 +#: sql_help.c:1855 sql_help.c:2004 sql_help.c:2023 sql_help.c:2026 +#: sql_help.c:2297 sql_help.c:2503 sql_help.c:3216 sql_help.c:3219 +#: sql_help.c:3222 sql_help.c:3313 sql_help.c:3402 sql_help.c:3430 +#: sql_help.c:4200 sql_help.c:4207 sql_help.c:4213 sql_help.c:4224 +#: sql_help.c:4227 sql_help.c:4230 msgid "argname" msgstr "引数の名前" @@ -4463,68 +4226,69 @@ msgstr "引数の名前" #: sql_help.c:356 sql_help.c:372 sql_help.c:375 sql_help.c:378 sql_help.c:518 #: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:840 #: sql_help.c:845 sql_help.c:850 sql_help.c:855 sql_help.c:860 sql_help.c:978 -#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1788 -#: sql_help.c:1805 sql_help.c:1811 sql_help.c:1835 sql_help.c:1838 -#: sql_help.c:1841 sql_help.c:2283 sql_help.c:2483 sql_help.c:3196 -#: sql_help.c:3199 sql_help.c:3202 sql_help.c:3287 sql_help.c:3376 -#: sql_help.c:3404 sql_help.c:4152 sql_help.c:4159 sql_help.c:4165 -#: sql_help.c:4176 sql_help.c:4179 sql_help.c:4182 +#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1803 +#: sql_help.c:1820 sql_help.c:1826 sql_help.c:1850 sql_help.c:1853 +#: sql_help.c:1856 sql_help.c:2298 sql_help.c:2504 sql_help.c:3217 +#: sql_help.c:3220 sql_help.c:3223 sql_help.c:3314 sql_help.c:3403 +#: sql_help.c:3431 sql_help.c:4201 sql_help.c:4208 sql_help.c:4214 +#: sql_help.c:4225 sql_help.c:4228 sql_help.c:4231 msgid "argtype" msgstr "引数の型" #: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:926 -#: sql_help.c:1074 sql_help.c:1446 sql_help.c:1570 sql_help.c:1602 -#: sql_help.c:1650 sql_help.c:1889 sql_help.c:1896 sql_help.c:2188 -#: sql_help.c:2230 sql_help.c:2237 sql_help.c:2246 sql_help.c:2323 -#: sql_help.c:2534 sql_help.c:2626 sql_help.c:2897 sql_help.c:3078 -#: sql_help.c:3100 sql_help.c:3588 sql_help.c:3756 sql_help.c:4608 +#: sql_help.c:1074 sql_help.c:1453 sql_help.c:1581 sql_help.c:1613 +#: sql_help.c:1665 sql_help.c:1904 sql_help.c:1911 sql_help.c:2203 +#: sql_help.c:2245 sql_help.c:2252 sql_help.c:2261 sql_help.c:2341 +#: sql_help.c:2555 sql_help.c:2647 sql_help.c:2918 sql_help.c:3099 +#: sql_help.c:3121 sql_help.c:3261 sql_help.c:3616 sql_help.c:3788 +#: sql_help.c:3961 sql_help.c:4658 msgid "option" msgstr "オプション" -#: sql_help.c:113 sql_help.c:927 sql_help.c:1571 sql_help.c:2324 -#: sql_help.c:2535 sql_help.c:3079 +#: sql_help.c:113 sql_help.c:927 sql_help.c:1582 sql_help.c:2342 +#: sql_help.c:2556 sql_help.c:3100 sql_help.c:3262 msgid "where option can be:" msgstr "オプションには以下のものがあります:" -#: sql_help.c:114 sql_help.c:2120 +#: sql_help.c:114 sql_help.c:2137 msgid "allowconn" msgstr "接続の可否(真偽値)" -#: sql_help.c:115 sql_help.c:928 sql_help.c:1572 sql_help.c:2121 -#: sql_help.c:2536 sql_help.c:3080 +#: sql_help.c:115 sql_help.c:928 sql_help.c:1583 sql_help.c:2138 +#: sql_help.c:2343 sql_help.c:2557 sql_help.c:3101 msgid "connlimit" msgstr "最大同時接続数" -#: sql_help.c:116 sql_help.c:2122 +#: sql_help.c:116 sql_help.c:2139 msgid "istemplate" msgstr "テンプレートかどうか(真偽値)" -#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1271 -#: sql_help.c:1319 +#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1276 sql_help.c:1325 msgid "new_tablespace" msgstr "新しいテーブル空間名" #: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:544 sql_help.c:546 #: sql_help.c:547 sql_help.c:863 sql_help.c:865 sql_help.c:866 sql_help.c:935 #: sql_help.c:939 sql_help.c:942 sql_help.c:1003 sql_help.c:1005 -#: sql_help.c:1006 sql_help.c:1137 sql_help.c:1140 sql_help.c:1579 -#: sql_help.c:1583 sql_help.c:1586 sql_help.c:2293 sql_help.c:2487 -#: sql_help.c:3942 sql_help.c:4347 +#: sql_help.c:1006 sql_help.c:1140 sql_help.c:1143 sql_help.c:1590 +#: sql_help.c:1594 sql_help.c:1597 sql_help.c:2308 sql_help.c:2508 +#: sql_help.c:3980 sql_help.c:4396 msgid "configuration_parameter" msgstr "設定パラメータ" #: sql_help.c:125 sql_help.c:395 sql_help.c:466 sql_help.c:472 sql_help.c:484 #: sql_help.c:545 sql_help.c:598 sql_help.c:677 sql_help.c:683 sql_help.c:864 #: sql_help.c:887 sql_help.c:936 sql_help.c:1004 sql_help.c:1075 -#: sql_help.c:1114 sql_help.c:1117 sql_help.c:1122 sql_help.c:1138 -#: sql_help.c:1139 sql_help.c:1301 sql_help.c:1321 sql_help.c:1368 -#: sql_help.c:1390 sql_help.c:1447 sql_help.c:1580 sql_help.c:1603 -#: sql_help.c:2189 sql_help.c:2231 sql_help.c:2238 sql_help.c:2247 -#: sql_help.c:2294 sql_help.c:2295 sql_help.c:2354 sql_help.c:2388 -#: sql_help.c:2488 sql_help.c:2489 sql_help.c:2506 sql_help.c:2627 -#: sql_help.c:2657 sql_help.c:2762 sql_help.c:2775 sql_help.c:2789 -#: sql_help.c:2830 sql_help.c:2854 sql_help.c:2871 sql_help.c:2898 -#: sql_help.c:3101 sql_help.c:3757 sql_help.c:4348 sql_help.c:4349 +#: sql_help.c:1117 sql_help.c:1120 sql_help.c:1125 sql_help.c:1141 +#: sql_help.c:1142 sql_help.c:1307 sql_help.c:1327 sql_help.c:1375 +#: sql_help.c:1397 sql_help.c:1454 sql_help.c:1538 sql_help.c:1591 +#: sql_help.c:1614 sql_help.c:2204 sql_help.c:2246 sql_help.c:2253 +#: sql_help.c:2262 sql_help.c:2309 sql_help.c:2310 sql_help.c:2372 +#: sql_help.c:2375 sql_help.c:2409 sql_help.c:2509 sql_help.c:2510 +#: sql_help.c:2527 sql_help.c:2648 sql_help.c:2678 sql_help.c:2783 +#: sql_help.c:2796 sql_help.c:2810 sql_help.c:2851 sql_help.c:2875 +#: sql_help.c:2892 sql_help.c:2919 sql_help.c:3122 sql_help.c:3789 +#: sql_help.c:4397 sql_help.c:4398 msgid "value" msgstr "値" @@ -4532,9 +4296,9 @@ msgstr "値" msgid "target_role" msgstr "対象のロール" -#: sql_help.c:198 sql_help.c:2172 sql_help.c:2582 sql_help.c:2587 -#: sql_help.c:3704 sql_help.c:3711 sql_help.c:3725 sql_help.c:3731 -#: sql_help.c:4037 sql_help.c:4044 sql_help.c:4058 sql_help.c:4064 +#: sql_help.c:198 sql_help.c:2188 sql_help.c:2603 sql_help.c:2608 +#: sql_help.c:3735 sql_help.c:3742 sql_help.c:3756 sql_help.c:3762 +#: sql_help.c:4083 sql_help.c:4090 sql_help.c:4104 sql_help.c:4110 msgid "schema_name" msgstr "スキーマ名" @@ -4549,33 +4313,29 @@ msgstr "GRANT/REVOKEの省略形は以下のいずれかです:" #: sql_help.c:201 sql_help.c:202 sql_help.c:203 sql_help.c:204 sql_help.c:205 #: sql_help.c:206 sql_help.c:207 sql_help.c:208 sql_help.c:209 sql_help.c:210 #: sql_help.c:569 sql_help.c:605 sql_help.c:670 sql_help.c:810 sql_help.c:946 -#: sql_help.c:1270 sql_help.c:1590 sql_help.c:2327 sql_help.c:2328 -#: sql_help.c:2329 sql_help.c:2330 sql_help.c:2331 sql_help.c:2462 -#: sql_help.c:2539 sql_help.c:2540 sql_help.c:2541 sql_help.c:2542 -#: sql_help.c:2543 sql_help.c:3083 sql_help.c:3084 sql_help.c:3085 -#: sql_help.c:3086 sql_help.c:3087 sql_help.c:3738 sql_help.c:3739 -#: sql_help.c:3740 sql_help.c:4038 sql_help.c:4042 sql_help.c:4045 -#: sql_help.c:4047 sql_help.c:4049 sql_help.c:4051 sql_help.c:4053 -#: sql_help.c:4059 sql_help.c:4061 sql_help.c:4063 sql_help.c:4065 -#: sql_help.c:4067 sql_help.c:4069 sql_help.c:4070 sql_help.c:4071 -#: sql_help.c:4368 +#: sql_help.c:1275 sql_help.c:1601 sql_help.c:2346 sql_help.c:2347 +#: sql_help.c:2348 sql_help.c:2349 sql_help.c:2350 sql_help.c:2483 +#: sql_help.c:2560 sql_help.c:2561 sql_help.c:2562 sql_help.c:2563 +#: sql_help.c:2564 sql_help.c:3104 sql_help.c:3105 sql_help.c:3106 +#: sql_help.c:3107 sql_help.c:3108 sql_help.c:3768 sql_help.c:3772 +#: sql_help.c:4116 sql_help.c:4120 sql_help.c:4417 msgid "role_name" msgstr "ロール名" -#: sql_help.c:236 sql_help.c:459 sql_help.c:1286 sql_help.c:1288 -#: sql_help.c:1336 sql_help.c:1347 sql_help.c:1372 sql_help.c:1619 -#: sql_help.c:2141 sql_help.c:2145 sql_help.c:2250 sql_help.c:2255 -#: sql_help.c:2349 sql_help.c:2757 sql_help.c:2770 sql_help.c:2784 -#: sql_help.c:2793 sql_help.c:2805 sql_help.c:2834 sql_help.c:3788 -#: sql_help.c:3803 sql_help.c:3805 sql_help.c:4233 sql_help.c:4234 -#: sql_help.c:4243 sql_help.c:4284 sql_help.c:4285 sql_help.c:4286 -#: sql_help.c:4287 sql_help.c:4288 sql_help.c:4289 sql_help.c:4322 -#: sql_help.c:4323 sql_help.c:4328 sql_help.c:4333 sql_help.c:4472 -#: sql_help.c:4473 sql_help.c:4482 sql_help.c:4523 sql_help.c:4524 -#: sql_help.c:4525 sql_help.c:4526 sql_help.c:4527 sql_help.c:4528 -#: sql_help.c:4575 sql_help.c:4577 sql_help.c:4634 sql_help.c:4690 -#: sql_help.c:4691 sql_help.c:4700 sql_help.c:4741 sql_help.c:4742 -#: sql_help.c:4743 sql_help.c:4744 sql_help.c:4745 sql_help.c:4746 +#: sql_help.c:236 sql_help.c:459 sql_help.c:1291 sql_help.c:1293 +#: sql_help.c:1342 sql_help.c:1354 sql_help.c:1379 sql_help.c:1631 +#: sql_help.c:2158 sql_help.c:2162 sql_help.c:2265 sql_help.c:2270 +#: sql_help.c:2368 sql_help.c:2778 sql_help.c:2791 sql_help.c:2805 +#: sql_help.c:2814 sql_help.c:2826 sql_help.c:2855 sql_help.c:3820 +#: sql_help.c:3835 sql_help.c:3837 sql_help.c:4282 sql_help.c:4283 +#: sql_help.c:4292 sql_help.c:4333 sql_help.c:4334 sql_help.c:4335 +#: sql_help.c:4336 sql_help.c:4337 sql_help.c:4338 sql_help.c:4371 +#: sql_help.c:4372 sql_help.c:4377 sql_help.c:4382 sql_help.c:4521 +#: sql_help.c:4522 sql_help.c:4531 sql_help.c:4572 sql_help.c:4573 +#: sql_help.c:4574 sql_help.c:4575 sql_help.c:4576 sql_help.c:4577 +#: sql_help.c:4624 sql_help.c:4626 sql_help.c:4685 sql_help.c:4741 +#: sql_help.c:4742 sql_help.c:4751 sql_help.c:4792 sql_help.c:4793 +#: sql_help.c:4794 sql_help.c:4795 sql_help.c:4796 sql_help.c:4797 msgid "expression" msgstr "評価式" @@ -4584,14 +4344,14 @@ msgid "domain_constraint" msgstr "ドメイン制約" #: sql_help.c:241 sql_help.c:243 sql_help.c:246 sql_help.c:474 sql_help.c:475 -#: sql_help.c:1263 sql_help.c:1307 sql_help.c:1308 sql_help.c:1309 -#: sql_help.c:1335 sql_help.c:1346 sql_help.c:1363 sql_help.c:1774 -#: sql_help.c:1776 sql_help.c:2144 sql_help.c:2249 sql_help.c:2254 -#: sql_help.c:2792 sql_help.c:2804 sql_help.c:3800 +#: sql_help.c:1268 sql_help.c:1313 sql_help.c:1314 sql_help.c:1315 +#: sql_help.c:1341 sql_help.c:1353 sql_help.c:1370 sql_help.c:1789 +#: sql_help.c:1791 sql_help.c:2161 sql_help.c:2264 sql_help.c:2269 +#: sql_help.c:2813 sql_help.c:2825 sql_help.c:3832 msgid "constraint_name" msgstr "制約名" -#: sql_help.c:244 sql_help.c:1264 +#: sql_help.c:244 sql_help.c:1269 msgid "new_constraint_name" msgstr "新しい制約名" @@ -4611,82 +4371,82 @@ msgstr "メンバーオブジェクトは以下の通りです:" #: sql_help.c:334 sql_help.c:335 sql_help.c:340 sql_help.c:344 sql_help.c:346 #: sql_help.c:348 sql_help.c:357 sql_help.c:358 sql_help.c:359 sql_help.c:360 #: sql_help.c:361 sql_help.c:362 sql_help.c:363 sql_help.c:364 sql_help.c:367 -#: sql_help.c:368 sql_help.c:1766 sql_help.c:1771 sql_help.c:1778 -#: sql_help.c:1779 sql_help.c:1780 sql_help.c:1781 sql_help.c:1782 -#: sql_help.c:1783 sql_help.c:1784 sql_help.c:1789 sql_help.c:1791 -#: sql_help.c:1795 sql_help.c:1797 sql_help.c:1801 sql_help.c:1806 -#: sql_help.c:1807 sql_help.c:1814 sql_help.c:1815 sql_help.c:1816 -#: sql_help.c:1817 sql_help.c:1818 sql_help.c:1819 sql_help.c:1820 -#: sql_help.c:1821 sql_help.c:1822 sql_help.c:1823 sql_help.c:1824 -#: sql_help.c:1829 sql_help.c:1830 sql_help.c:4140 sql_help.c:4145 -#: sql_help.c:4146 sql_help.c:4147 sql_help.c:4148 sql_help.c:4154 -#: sql_help.c:4155 sql_help.c:4160 sql_help.c:4161 sql_help.c:4166 -#: sql_help.c:4167 sql_help.c:4168 sql_help.c:4169 sql_help.c:4170 -#: sql_help.c:4171 +#: sql_help.c:368 sql_help.c:1781 sql_help.c:1786 sql_help.c:1793 +#: sql_help.c:1794 sql_help.c:1795 sql_help.c:1796 sql_help.c:1797 +#: sql_help.c:1798 sql_help.c:1799 sql_help.c:1804 sql_help.c:1806 +#: sql_help.c:1810 sql_help.c:1812 sql_help.c:1816 sql_help.c:1821 +#: sql_help.c:1822 sql_help.c:1829 sql_help.c:1830 sql_help.c:1831 +#: sql_help.c:1832 sql_help.c:1833 sql_help.c:1834 sql_help.c:1835 +#: sql_help.c:1836 sql_help.c:1837 sql_help.c:1838 sql_help.c:1839 +#: sql_help.c:1844 sql_help.c:1845 sql_help.c:4189 sql_help.c:4194 +#: sql_help.c:4195 sql_help.c:4196 sql_help.c:4197 sql_help.c:4203 +#: sql_help.c:4204 sql_help.c:4209 sql_help.c:4210 sql_help.c:4215 +#: sql_help.c:4216 sql_help.c:4217 sql_help.c:4218 sql_help.c:4219 +#: sql_help.c:4220 msgid "object_name" msgstr "オブジェクト名" -#: sql_help.c:326 sql_help.c:1767 sql_help.c:4143 +#: sql_help.c:326 sql_help.c:1782 sql_help.c:4192 msgid "aggregate_name" msgstr "集約関数名" -#: sql_help.c:328 sql_help.c:1769 sql_help.c:2053 sql_help.c:2057 -#: sql_help.c:2059 sql_help.c:3210 +#: sql_help.c:328 sql_help.c:1784 sql_help.c:2068 sql_help.c:2072 +#: sql_help.c:2074 sql_help.c:3231 msgid "source_type" msgstr "変換前の型" -#: sql_help.c:329 sql_help.c:1770 sql_help.c:2054 sql_help.c:2058 -#: sql_help.c:2060 sql_help.c:3211 +#: sql_help.c:329 sql_help.c:1785 sql_help.c:2069 sql_help.c:2073 +#: sql_help.c:2075 sql_help.c:3232 msgid "target_type" msgstr "変換後の型" -#: sql_help.c:336 sql_help.c:774 sql_help.c:1785 sql_help.c:2055 -#: sql_help.c:2096 sql_help.c:2159 sql_help.c:2405 sql_help.c:2436 -#: sql_help.c:2974 sql_help.c:4054 sql_help.c:4149 sql_help.c:4262 -#: sql_help.c:4266 sql_help.c:4270 sql_help.c:4273 sql_help.c:4501 -#: sql_help.c:4505 sql_help.c:4509 sql_help.c:4512 sql_help.c:4719 -#: sql_help.c:4723 sql_help.c:4727 sql_help.c:4730 +#: sql_help.c:336 sql_help.c:774 sql_help.c:1800 sql_help.c:2070 +#: sql_help.c:2111 sql_help.c:2176 sql_help.c:2426 sql_help.c:2457 +#: sql_help.c:2995 sql_help.c:4100 sql_help.c:4198 sql_help.c:4311 +#: sql_help.c:4315 sql_help.c:4319 sql_help.c:4322 sql_help.c:4550 +#: sql_help.c:4554 sql_help.c:4558 sql_help.c:4561 sql_help.c:4770 +#: sql_help.c:4774 sql_help.c:4778 sql_help.c:4781 msgid "function_name" msgstr "関数名" -#: sql_help.c:341 sql_help.c:767 sql_help.c:1792 sql_help.c:2429 +#: sql_help.c:341 sql_help.c:767 sql_help.c:1807 sql_help.c:2450 msgid "operator_name" msgstr "演算子名" -#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1793 -#: sql_help.c:2406 sql_help.c:3328 +#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1808 +#: sql_help.c:2427 sql_help.c:3355 msgid "left_type" msgstr "左辺の型" -#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1794 -#: sql_help.c:2407 sql_help.c:3329 +#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1809 +#: sql_help.c:2428 sql_help.c:3356 msgid "right_type" msgstr "右辺の型" #: sql_help.c:345 sql_help.c:347 sql_help.c:730 sql_help.c:733 sql_help.c:736 #: sql_help.c:765 sql_help.c:777 sql_help.c:785 sql_help.c:788 sql_help.c:791 -#: sql_help.c:1352 sql_help.c:1796 sql_help.c:1798 sql_help.c:2426 -#: sql_help.c:2447 sql_help.c:2810 sql_help.c:3338 sql_help.c:3347 +#: sql_help.c:1359 sql_help.c:1811 sql_help.c:1813 sql_help.c:2447 +#: sql_help.c:2468 sql_help.c:2831 sql_help.c:3365 sql_help.c:3374 msgid "index_method" msgstr "インデックスメソッド" -#: sql_help.c:349 sql_help.c:1802 sql_help.c:4156 +#: sql_help.c:349 sql_help.c:1817 sql_help.c:4205 msgid "procedure_name" msgstr "プロシージャ名" -#: sql_help.c:353 sql_help.c:1808 sql_help.c:3721 sql_help.c:4162 +#: sql_help.c:353 sql_help.c:1823 sql_help.c:3752 sql_help.c:4211 msgid "routine_name" msgstr "ルーチン名" -#: sql_help.c:365 sql_help.c:1325 sql_help.c:1825 sql_help.c:2289 -#: sql_help.c:2486 sql_help.c:2765 sql_help.c:2941 sql_help.c:3509 -#: sql_help.c:3735 sql_help.c:4068 +#: sql_help.c:365 sql_help.c:1331 sql_help.c:1840 sql_help.c:2304 +#: sql_help.c:2507 sql_help.c:2786 sql_help.c:2962 sql_help.c:3536 +#: sql_help.c:3766 sql_help.c:4114 msgid "type_name" msgstr "型名" -#: sql_help.c:366 sql_help.c:1826 sql_help.c:2288 sql_help.c:2485 -#: sql_help.c:2942 sql_help.c:3168 sql_help.c:3510 sql_help.c:3727 -#: sql_help.c:4060 +#: sql_help.c:366 sql_help.c:1841 sql_help.c:2303 sql_help.c:2506 +#: sql_help.c:2963 sql_help.c:3189 sql_help.c:3537 sql_help.c:3758 +#: sql_help.c:4106 msgid "lang_name" msgstr "言語名" @@ -4694,130 +4454,134 @@ msgstr "言語名" msgid "and aggregate_signature is:" msgstr "集約関数のシグニチャーは以下の通りです:" -#: sql_help.c:392 sql_help.c:1920 sql_help.c:2186 +#: sql_help.c:392 sql_help.c:1935 sql_help.c:2201 msgid "handler_function" msgstr "ハンドラー関数" -#: sql_help.c:393 sql_help.c:2187 +#: sql_help.c:393 sql_help.c:2202 msgid "validator_function" msgstr "バリデーター関数" #: sql_help.c:441 sql_help.c:519 sql_help.c:659 sql_help.c:841 sql_help.c:979 -#: sql_help.c:1258 sql_help.c:1512 +#: sql_help.c:1263 sql_help.c:1529 msgid "action" msgstr "アクション" #: sql_help.c:443 sql_help.c:450 sql_help.c:454 sql_help.c:455 sql_help.c:458 #: sql_help.c:460 sql_help.c:461 sql_help.c:462 sql_help.c:464 sql_help.c:467 #: sql_help.c:469 sql_help.c:470 sql_help.c:663 sql_help.c:673 sql_help.c:675 -#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1260 -#: sql_help.c:1278 sql_help.c:1282 sql_help.c:1283 sql_help.c:1287 -#: sql_help.c:1289 sql_help.c:1290 sql_help.c:1291 sql_help.c:1293 -#: sql_help.c:1296 sql_help.c:1297 sql_help.c:1299 sql_help.c:1302 -#: sql_help.c:1304 sql_help.c:1348 sql_help.c:1350 sql_help.c:1357 -#: sql_help.c:1366 sql_help.c:1371 sql_help.c:1618 sql_help.c:1621 -#: sql_help.c:1658 sql_help.c:1773 sql_help.c:1886 sql_help.c:1892 -#: sql_help.c:1905 sql_help.c:1906 sql_help.c:1907 sql_help.c:2228 -#: sql_help.c:2241 sql_help.c:2286 sql_help.c:2348 sql_help.c:2352 -#: sql_help.c:2385 sql_help.c:2612 sql_help.c:2640 sql_help.c:2641 -#: sql_help.c:2748 sql_help.c:2756 sql_help.c:2766 sql_help.c:2769 -#: sql_help.c:2779 sql_help.c:2783 sql_help.c:2806 sql_help.c:2808 -#: sql_help.c:2815 sql_help.c:2828 sql_help.c:2833 sql_help.c:2851 -#: sql_help.c:2977 sql_help.c:3113 sql_help.c:3706 sql_help.c:3707 -#: sql_help.c:3787 sql_help.c:3802 sql_help.c:3804 sql_help.c:3806 -#: sql_help.c:4039 sql_help.c:4040 sql_help.c:4142 sql_help.c:4293 -#: sql_help.c:4532 sql_help.c:4574 sql_help.c:4576 sql_help.c:4578 -#: sql_help.c:4622 sql_help.c:4750 +#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1265 +#: sql_help.c:1283 sql_help.c:1287 sql_help.c:1288 sql_help.c:1292 +#: sql_help.c:1294 sql_help.c:1295 sql_help.c:1296 sql_help.c:1297 +#: sql_help.c:1299 sql_help.c:1302 sql_help.c:1303 sql_help.c:1305 +#: sql_help.c:1308 sql_help.c:1310 sql_help.c:1355 sql_help.c:1357 +#: sql_help.c:1364 sql_help.c:1373 sql_help.c:1378 sql_help.c:1630 +#: sql_help.c:1633 sql_help.c:1637 sql_help.c:1673 sql_help.c:1788 +#: sql_help.c:1901 sql_help.c:1907 sql_help.c:1920 sql_help.c:1921 +#: sql_help.c:1922 sql_help.c:2243 sql_help.c:2256 sql_help.c:2301 +#: sql_help.c:2367 sql_help.c:2373 sql_help.c:2406 sql_help.c:2633 +#: sql_help.c:2661 sql_help.c:2662 sql_help.c:2769 sql_help.c:2777 +#: sql_help.c:2787 sql_help.c:2790 sql_help.c:2800 sql_help.c:2804 +#: sql_help.c:2827 sql_help.c:2829 sql_help.c:2836 sql_help.c:2849 +#: sql_help.c:2854 sql_help.c:2872 sql_help.c:2998 sql_help.c:3134 +#: sql_help.c:3737 sql_help.c:3738 sql_help.c:3819 sql_help.c:3834 +#: sql_help.c:3836 sql_help.c:3838 sql_help.c:4085 sql_help.c:4086 +#: sql_help.c:4191 sql_help.c:4342 sql_help.c:4581 sql_help.c:4623 +#: sql_help.c:4625 sql_help.c:4627 sql_help.c:4673 sql_help.c:4801 msgid "column_name" msgstr "列名" -#: sql_help.c:444 sql_help.c:664 sql_help.c:1261 +#: sql_help.c:444 sql_help.c:664 sql_help.c:1266 sql_help.c:1638 msgid "new_column_name" msgstr "新しい列名" #: sql_help.c:449 sql_help.c:540 sql_help.c:672 sql_help.c:862 sql_help.c:1000 -#: sql_help.c:1277 sql_help.c:1528 +#: sql_help.c:1282 sql_help.c:1539 msgid "where action is one of:" msgstr "アクションは以下のいずれかです:" -#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1279 -#: sql_help.c:1284 sql_help.c:1530 sql_help.c:1534 sql_help.c:2139 -#: sql_help.c:2229 sql_help.c:2425 sql_help.c:2605 sql_help.c:2749 -#: sql_help.c:3022 sql_help.c:3889 +#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1284 +#: sql_help.c:1289 sql_help.c:1541 sql_help.c:1545 sql_help.c:2156 +#: sql_help.c:2244 sql_help.c:2446 sql_help.c:2626 sql_help.c:2770 +#: sql_help.c:3043 sql_help.c:3921 msgid "data_type" msgstr "データ型" -#: sql_help.c:452 sql_help.c:457 sql_help.c:1280 sql_help.c:1285 -#: sql_help.c:1531 sql_help.c:1535 sql_help.c:2140 sql_help.c:2232 -#: sql_help.c:2350 sql_help.c:2750 sql_help.c:2758 sql_help.c:2771 -#: sql_help.c:2785 sql_help.c:3023 sql_help.c:3029 sql_help.c:3797 +#: sql_help.c:452 sql_help.c:457 sql_help.c:1285 sql_help.c:1290 +#: sql_help.c:1542 sql_help.c:1546 sql_help.c:2157 sql_help.c:2247 +#: sql_help.c:2369 sql_help.c:2771 sql_help.c:2779 sql_help.c:2792 +#: sql_help.c:2806 sql_help.c:3044 sql_help.c:3050 sql_help.c:3829 msgid "collation" msgstr "照合順序" -#: sql_help.c:453 sql_help.c:1281 sql_help.c:2233 sql_help.c:2242 -#: sql_help.c:2751 sql_help.c:2767 sql_help.c:2780 +#: sql_help.c:453 sql_help.c:1286 sql_help.c:2248 sql_help.c:2257 +#: sql_help.c:2772 sql_help.c:2788 sql_help.c:2801 msgid "column_constraint" msgstr "カラム制約" -#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1298 +#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1304 sql_help.c:4670 msgid "integer" msgstr "整数" -#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1300 -#: sql_help.c:1303 +#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1306 +#: sql_help.c:1309 msgid "attribute_option" msgstr "属性オプション" -#: sql_help.c:473 sql_help.c:1305 sql_help.c:2234 sql_help.c:2243 -#: sql_help.c:2752 sql_help.c:2768 sql_help.c:2781 +#: sql_help.c:473 sql_help.c:1311 sql_help.c:2249 sql_help.c:2258 +#: sql_help.c:2773 sql_help.c:2789 sql_help.c:2802 msgid "table_constraint" msgstr "テーブル制約" -#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1310 -#: sql_help.c:1311 sql_help.c:1312 sql_help.c:1313 sql_help.c:1827 +#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1316 +#: sql_help.c:1317 sql_help.c:1318 sql_help.c:1319 sql_help.c:1842 msgid "trigger_name" msgstr "トリガー名" -#: sql_help.c:480 sql_help.c:481 sql_help.c:1323 sql_help.c:1324 -#: sql_help.c:2235 sql_help.c:2240 sql_help.c:2755 sql_help.c:2778 +#: sql_help.c:480 sql_help.c:481 sql_help.c:1329 sql_help.c:1330 +#: sql_help.c:2250 sql_help.c:2255 sql_help.c:2776 sql_help.c:2799 msgid "parent_table" msgstr "親テーブル" #: sql_help.c:539 sql_help.c:595 sql_help.c:661 sql_help.c:861 sql_help.c:999 -#: sql_help.c:1491 sql_help.c:2171 +#: sql_help.c:1498 sql_help.c:2187 msgid "extension_name" msgstr "拡張名" -#: sql_help.c:541 sql_help.c:1001 sql_help.c:2290 +#: sql_help.c:541 sql_help.c:1001 sql_help.c:2305 msgid "execution_cost" msgstr "実行コスト" -#: sql_help.c:542 sql_help.c:1002 sql_help.c:2291 +#: sql_help.c:542 sql_help.c:1002 sql_help.c:2306 msgid "result_rows" msgstr "結果の行数" -#: sql_help.c:543 sql_help.c:2292 -#| msgid "start_function" +#: sql_help.c:543 sql_help.c:2307 msgid "support_function" msgstr "サポート関数" #: sql_help.c:564 sql_help.c:566 sql_help.c:925 sql_help.c:933 sql_help.c:937 -#: sql_help.c:940 sql_help.c:943 sql_help.c:1569 sql_help.c:1577 -#: sql_help.c:1581 sql_help.c:1584 sql_help.c:1587 sql_help.c:2583 -#: sql_help.c:2585 sql_help.c:2588 sql_help.c:2589 sql_help.c:3705 -#: sql_help.c:3709 sql_help.c:3712 sql_help.c:3714 sql_help.c:3716 -#: sql_help.c:3718 sql_help.c:3720 sql_help.c:3726 sql_help.c:3728 -#: sql_help.c:3730 sql_help.c:3732 sql_help.c:3734 sql_help.c:3736 +#: sql_help.c:940 sql_help.c:943 sql_help.c:1580 sql_help.c:1588 +#: sql_help.c:1592 sql_help.c:1595 sql_help.c:1598 sql_help.c:2604 +#: sql_help.c:2606 sql_help.c:2609 sql_help.c:2610 sql_help.c:3736 +#: sql_help.c:3740 sql_help.c:3743 sql_help.c:3745 sql_help.c:3747 +#: sql_help.c:3749 sql_help.c:3751 sql_help.c:3757 sql_help.c:3759 +#: sql_help.c:3761 sql_help.c:3763 sql_help.c:3765 sql_help.c:3767 +#: sql_help.c:3769 sql_help.c:3770 sql_help.c:4084 sql_help.c:4088 +#: sql_help.c:4091 sql_help.c:4093 sql_help.c:4095 sql_help.c:4097 +#: sql_help.c:4099 sql_help.c:4105 sql_help.c:4107 sql_help.c:4109 +#: sql_help.c:4111 sql_help.c:4113 sql_help.c:4115 sql_help.c:4117 +#: sql_help.c:4118 msgid "role_specification" msgstr "ロールの指定" -#: sql_help.c:565 sql_help.c:567 sql_help.c:1600 sql_help.c:2114 -#: sql_help.c:2591 sql_help.c:3098 sql_help.c:3543 sql_help.c:4378 +#: sql_help.c:565 sql_help.c:567 sql_help.c:1611 sql_help.c:2130 +#: sql_help.c:2612 sql_help.c:3119 sql_help.c:3570 sql_help.c:4427 msgid "user_name" msgstr "ユーザ名" -#: sql_help.c:568 sql_help.c:945 sql_help.c:1589 sql_help.c:2590 -#: sql_help.c:3737 +#: sql_help.c:568 sql_help.c:945 sql_help.c:1600 sql_help.c:2611 +#: sql_help.c:3771 sql_help.c:4119 msgid "where role_specification can be:" msgstr "ロール指定は以下の通りです:" @@ -4825,22 +4589,22 @@ msgstr "ロール指定は以下の通りです:" msgid "group_name" msgstr "グループ名" -#: sql_help.c:591 sql_help.c:1369 sql_help.c:2119 sql_help.c:2355 -#: sql_help.c:2389 sql_help.c:2763 sql_help.c:2776 sql_help.c:2790 -#: sql_help.c:2831 sql_help.c:2855 sql_help.c:2867 sql_help.c:3733 -#: sql_help.c:4066 +#: sql_help.c:591 sql_help.c:1376 sql_help.c:2136 sql_help.c:2376 +#: sql_help.c:2410 sql_help.c:2784 sql_help.c:2797 sql_help.c:2811 +#: sql_help.c:2852 sql_help.c:2876 sql_help.c:2888 sql_help.c:3764 +#: sql_help.c:4112 msgid "tablespace_name" msgstr "テーブル空間名" -#: sql_help.c:593 sql_help.c:681 sql_help.c:1318 sql_help.c:1327 -#: sql_help.c:1364 sql_help.c:1707 +#: sql_help.c:593 sql_help.c:681 sql_help.c:1324 sql_help.c:1333 +#: sql_help.c:1371 sql_help.c:1722 msgid "index_name" msgstr "インデックス名" -#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1320 -#: sql_help.c:1322 sql_help.c:1367 sql_help.c:2353 sql_help.c:2387 -#: sql_help.c:2761 sql_help.c:2774 sql_help.c:2788 sql_help.c:2829 -#: sql_help.c:2853 +#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1326 +#: sql_help.c:1328 sql_help.c:1374 sql_help.c:2374 sql_help.c:2408 +#: sql_help.c:2782 sql_help.c:2795 sql_help.c:2809 sql_help.c:2850 +#: sql_help.c:2874 msgid "storage_parameter" msgstr "ストレージパラメータ" @@ -4848,1755 +4612,1746 @@ msgstr "ストレージパラメータ" msgid "column_number" msgstr "列番号" -#: sql_help.c:626 sql_help.c:1790 sql_help.c:4153 +#: sql_help.c:626 sql_help.c:1805 sql_help.c:4202 msgid "large_object_oid" msgstr "ラージオブジェクトのOID" -#: sql_help.c:713 sql_help.c:2410 +#: sql_help.c:713 sql_help.c:2431 msgid "res_proc" msgstr "制約選択評価関数" -#: sql_help.c:714 sql_help.c:2411 +#: sql_help.c:714 sql_help.c:2432 msgid "join_proc" msgstr "結合選択評価関数" -#: sql_help.c:766 sql_help.c:778 sql_help.c:2428 +#: sql_help.c:766 sql_help.c:778 sql_help.c:2449 msgid "strategy_number" msgstr "戦略番号" #: sql_help.c:768 sql_help.c:769 sql_help.c:772 sql_help.c:773 sql_help.c:779 -#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2430 -#: sql_help.c:2431 sql_help.c:2434 sql_help.c:2435 +#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2451 sql_help.c:2452 +#: sql_help.c:2455 sql_help.c:2456 msgid "op_type" msgstr "演算子の型" -#: sql_help.c:770 sql_help.c:2432 +#: sql_help.c:770 sql_help.c:2453 msgid "sort_family_name" msgstr "ソートファミリー名" -#: sql_help.c:771 sql_help.c:781 sql_help.c:2433 +#: sql_help.c:771 sql_help.c:781 sql_help.c:2454 msgid "support_number" msgstr "サポート番号" -#: sql_help.c:775 sql_help.c:2056 sql_help.c:2437 sql_help.c:2944 -#: sql_help.c:2946 +#: sql_help.c:775 sql_help.c:2071 sql_help.c:2458 sql_help.c:2965 +#: sql_help.c:2967 msgid "argument_type" msgstr "引数の型" #: sql_help.c:806 sql_help.c:809 sql_help.c:880 sql_help.c:882 sql_help.c:884 -#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1487 sql_help.c:1490 -#: sql_help.c:1657 sql_help.c:1706 sql_help.c:1775 sql_help.c:1800 -#: sql_help.c:1813 sql_help.c:1828 sql_help.c:1885 sql_help.c:1891 -#: sql_help.c:2227 sql_help.c:2239 sql_help.c:2346 sql_help.c:2384 -#: sql_help.c:2461 sql_help.c:2504 sql_help.c:2560 sql_help.c:2611 -#: sql_help.c:2642 sql_help.c:2747 sql_help.c:2764 sql_help.c:2777 -#: sql_help.c:2850 sql_help.c:2970 sql_help.c:3147 sql_help.c:3364 -#: sql_help.c:3413 sql_help.c:3519 sql_help.c:3703 sql_help.c:3708 -#: sql_help.c:3753 sql_help.c:3785 sql_help.c:4036 sql_help.c:4041 -#: sql_help.c:4141 sql_help.c:4248 sql_help.c:4250 sql_help.c:4299 -#: sql_help.c:4338 sql_help.c:4487 sql_help.c:4489 sql_help.c:4538 -#: sql_help.c:4572 sql_help.c:4621 sql_help.c:4705 sql_help.c:4707 -#: sql_help.c:4756 +#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1494 sql_help.c:1497 +#: sql_help.c:1672 sql_help.c:1721 sql_help.c:1790 sql_help.c:1815 +#: sql_help.c:1828 sql_help.c:1843 sql_help.c:1900 sql_help.c:1906 +#: sql_help.c:2242 sql_help.c:2254 sql_help.c:2365 sql_help.c:2405 +#: sql_help.c:2482 sql_help.c:2525 sql_help.c:2581 sql_help.c:2632 +#: sql_help.c:2663 sql_help.c:2768 sql_help.c:2785 sql_help.c:2798 +#: sql_help.c:2871 sql_help.c:2991 sql_help.c:3168 sql_help.c:3391 +#: sql_help.c:3440 sql_help.c:3546 sql_help.c:3734 sql_help.c:3739 +#: sql_help.c:3785 sql_help.c:3817 sql_help.c:4082 sql_help.c:4087 +#: sql_help.c:4190 sql_help.c:4297 sql_help.c:4299 sql_help.c:4348 +#: sql_help.c:4387 sql_help.c:4536 sql_help.c:4538 sql_help.c:4587 +#: sql_help.c:4621 sql_help.c:4672 sql_help.c:4756 sql_help.c:4758 +#: sql_help.c:4807 msgid "table_name" msgstr "テーブル名" -#: sql_help.c:811 sql_help.c:2463 +#: sql_help.c:811 sql_help.c:2484 msgid "using_expression" msgstr "USING表現" -#: sql_help.c:812 sql_help.c:2464 +#: sql_help.c:812 sql_help.c:2485 msgid "check_expression" msgstr "CHECK表現" -#: sql_help.c:886 sql_help.c:2505 +#: sql_help.c:886 sql_help.c:2526 msgid "publication_parameter" msgstr "パブリケーションパラメータ" -#: sql_help.c:929 sql_help.c:1573 sql_help.c:2325 sql_help.c:2537 -#: sql_help.c:3081 +#: sql_help.c:929 sql_help.c:1584 sql_help.c:2344 sql_help.c:2558 +#: sql_help.c:3102 msgid "password" msgstr "パスワード" -#: sql_help.c:930 sql_help.c:1574 sql_help.c:2326 sql_help.c:2538 -#: sql_help.c:3082 +#: sql_help.c:930 sql_help.c:1585 sql_help.c:2345 sql_help.c:2559 +#: sql_help.c:3103 msgid "timestamp" msgstr "タイムスタンプ" -#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1578 -#: sql_help.c:1582 sql_help.c:1585 sql_help.c:1588 sql_help.c:3713 -#: sql_help.c:4046 +#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1589 +#: sql_help.c:1593 sql_help.c:1596 sql_help.c:1599 sql_help.c:3744 +#: sql_help.c:4092 msgid "database_name" msgstr "データベース名" -#: sql_help.c:1048 sql_help.c:2606 +#: sql_help.c:1048 sql_help.c:2627 msgid "increment" msgstr "増分値" -#: sql_help.c:1049 sql_help.c:2607 +#: sql_help.c:1049 sql_help.c:2628 msgid "minvalue" msgstr "最小値" -#: sql_help.c:1050 sql_help.c:2608 +#: sql_help.c:1050 sql_help.c:2629 msgid "maxvalue" msgstr "最大値" -#: sql_help.c:1051 sql_help.c:2609 sql_help.c:4246 sql_help.c:4336 -#: sql_help.c:4485 sql_help.c:4638 sql_help.c:4703 +#: sql_help.c:1051 sql_help.c:2630 sql_help.c:4295 sql_help.c:4385 +#: sql_help.c:4534 sql_help.c:4689 sql_help.c:4754 msgid "start" msgstr "開始番号" -#: sql_help.c:1052 sql_help.c:1295 +#: sql_help.c:1052 sql_help.c:1301 msgid "restart" msgstr "再開始番号" -#: sql_help.c:1053 sql_help.c:2610 +#: sql_help.c:1053 sql_help.c:2631 msgid "cache" msgstr "キャッシュ割り当て数" -#: sql_help.c:1110 sql_help.c:2654 +#: sql_help.c:1097 +msgid "new_target" +msgstr "新しいターゲット" + +#: sql_help.c:1113 sql_help.c:2675 msgid "conninfo" msgstr "接続文字列" -#: sql_help.c:1112 sql_help.c:2655 +#: sql_help.c:1115 sql_help.c:2676 msgid "publication_name" msgstr "パブリケーション名" -#: sql_help.c:1113 +#: sql_help.c:1116 msgid "set_publication_option" msgstr "{SET PUBLICATION の追加オプション}" -#: sql_help.c:1116 +#: sql_help.c:1119 msgid "refresh_option" msgstr "{REFRESH PUBLICATION の追加オプション}" -#: sql_help.c:1121 sql_help.c:2656 +#: sql_help.c:1124 sql_help.c:2677 msgid "subscription_parameter" msgstr "{SUBSCRIPTION パラメータ名}" -#: sql_help.c:1273 sql_help.c:1276 +#: sql_help.c:1278 sql_help.c:1281 msgid "partition_name" msgstr "パーティション名" -#: sql_help.c:1274 sql_help.c:2244 sql_help.c:2782 +#: sql_help.c:1279 sql_help.c:2259 sql_help.c:2803 msgid "partition_bound_spec" msgstr "パーティション境界の仕様" -#: sql_help.c:1292 sql_help.c:1338 sql_help.c:2796 +#: sql_help.c:1298 sql_help.c:1345 sql_help.c:2817 msgid "sequence_options" msgstr "シーケンスオプション" -#: sql_help.c:1294 +#: sql_help.c:1300 msgid "sequence_option" msgstr "シーケンスオプション" -#: sql_help.c:1306 +#: sql_help.c:1312 msgid "table_constraint_using_index" msgstr "インデックスを使うテーブルの制約" -#: sql_help.c:1314 sql_help.c:1315 sql_help.c:1316 sql_help.c:1317 +#: sql_help.c:1320 sql_help.c:1321 sql_help.c:1322 sql_help.c:1323 msgid "rewrite_rule_name" msgstr "書き換えルール名" -#: sql_help.c:1328 sql_help.c:2821 +#: sql_help.c:1334 sql_help.c:2842 msgid "and partition_bound_spec is:" msgstr "パーティション境界の仕様は以下の通りです:" -#: sql_help.c:1329 sql_help.c:1330 sql_help.c:1331 sql_help.c:2822 -#: sql_help.c:2823 sql_help.c:2824 -#| msgid "partition_bound_spec" +#: sql_help.c:1335 sql_help.c:1336 sql_help.c:1337 sql_help.c:2843 +#: sql_help.c:2844 sql_help.c:2845 msgid "partition_bound_expr" msgstr "パーティション境界式" -#: sql_help.c:1332 sql_help.c:1333 sql_help.c:2825 sql_help.c:2826 +#: sql_help.c:1338 sql_help.c:1339 sql_help.c:2846 sql_help.c:2847 msgid "numeric_literal" msgstr "数値定数" -#: sql_help.c:1334 +#: sql_help.c:1340 msgid "and column_constraint is:" msgstr "そしてカラム制約は以下の通りです:" -#: sql_help.c:1337 sql_help.c:2251 sql_help.c:2284 sql_help.c:2484 -#: sql_help.c:2794 +#: sql_help.c:1343 sql_help.c:2266 sql_help.c:2299 sql_help.c:2505 +#: sql_help.c:2815 msgid "default_expr" msgstr "デフォルト表現" -#: sql_help.c:1339 sql_help.c:1340 sql_help.c:1349 sql_help.c:1351 -#: sql_help.c:1355 sql_help.c:2797 sql_help.c:2798 sql_help.c:2807 -#: sql_help.c:2809 sql_help.c:2813 +#: sql_help.c:1344 sql_help.c:2267 sql_help.c:2816 +msgid "generation_expr" +msgstr "生成式" + +#: sql_help.c:1346 sql_help.c:1347 sql_help.c:1356 sql_help.c:1358 +#: sql_help.c:1362 sql_help.c:2818 sql_help.c:2819 sql_help.c:2828 +#: sql_help.c:2830 sql_help.c:2834 msgid "index_parameters" msgstr "インデックスパラメータ" -#: sql_help.c:1341 sql_help.c:1358 sql_help.c:2799 sql_help.c:2816 +#: sql_help.c:1348 sql_help.c:1365 sql_help.c:2820 sql_help.c:2837 msgid "reftable" msgstr "参照テーブル" -#: sql_help.c:1342 sql_help.c:1359 sql_help.c:2800 sql_help.c:2817 +#: sql_help.c:1349 sql_help.c:1366 sql_help.c:2821 sql_help.c:2838 msgid "refcolumn" msgstr "参照列" -#: sql_help.c:1343 sql_help.c:1344 sql_help.c:1360 sql_help.c:1361 -#: sql_help.c:2801 sql_help.c:2802 sql_help.c:2818 sql_help.c:2819 -#| msgid "initial_condition" +#: sql_help.c:1350 sql_help.c:1351 sql_help.c:1367 sql_help.c:1368 +#: sql_help.c:2822 sql_help.c:2823 sql_help.c:2839 sql_help.c:2840 msgid "referential_action" msgstr "参照動作" -#: sql_help.c:1345 sql_help.c:2253 sql_help.c:2803 +#: sql_help.c:1352 sql_help.c:2268 sql_help.c:2824 msgid "and table_constraint is:" msgstr "テーブル制約は以下の通りです:" -#: sql_help.c:1353 sql_help.c:2811 +#: sql_help.c:1360 sql_help.c:2832 msgid "exclude_element" msgstr "除外対象要素" -#: sql_help.c:1354 sql_help.c:2812 sql_help.c:4244 sql_help.c:4334 -#: sql_help.c:4483 sql_help.c:4636 sql_help.c:4701 +#: sql_help.c:1361 sql_help.c:2833 sql_help.c:4293 sql_help.c:4383 +#: sql_help.c:4532 sql_help.c:4687 sql_help.c:4752 msgid "operator" msgstr "演算子" -#: sql_help.c:1356 sql_help.c:2356 sql_help.c:2814 +#: sql_help.c:1363 sql_help.c:2377 sql_help.c:2835 msgid "predicate" msgstr "インデックスの述語" -#: sql_help.c:1362 +#: sql_help.c:1369 msgid "and table_constraint_using_index is:" msgstr "テーブル制約は以下の通りです:" -#: sql_help.c:1365 sql_help.c:2827 +#: sql_help.c:1372 sql_help.c:2848 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" -msgstr "" -"UNIQUE, PRIMARY KEY, EXCLUDE 制約のインデックスパラメータは以下の通りです:" +msgstr "UNIQUE, PRIMARY KEY, EXCLUDE 制約のインデックスパラメータは以下の通りです:" -#: sql_help.c:1370 sql_help.c:2832 +#: sql_help.c:1377 sql_help.c:2853 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "EXCLUDE 制約の除外対象要素は以下の通りです:" -#: sql_help.c:1373 sql_help.c:2351 sql_help.c:2759 sql_help.c:2772 -#: sql_help.c:2786 sql_help.c:2835 sql_help.c:3798 +#: sql_help.c:1380 sql_help.c:2370 sql_help.c:2780 sql_help.c:2793 +#: sql_help.c:2807 sql_help.c:2856 sql_help.c:3830 msgid "opclass" msgstr "演算子クラス" -#: sql_help.c:1389 sql_help.c:1392 sql_help.c:2870 +#: sql_help.c:1396 sql_help.c:1399 sql_help.c:2891 msgid "tablespace_option" msgstr "テーブル空間のオプション" -#: sql_help.c:1413 sql_help.c:1416 sql_help.c:1422 sql_help.c:1426 +#: sql_help.c:1420 sql_help.c:1423 sql_help.c:1429 sql_help.c:1433 msgid "token_type" msgstr "トークンの型" -#: sql_help.c:1414 sql_help.c:1417 +#: sql_help.c:1421 sql_help.c:1424 msgid "dictionary_name" msgstr "辞書名" -#: sql_help.c:1419 sql_help.c:1423 +#: sql_help.c:1426 sql_help.c:1430 msgid "old_dictionary" msgstr "元の辞書" -#: sql_help.c:1420 sql_help.c:1424 +#: sql_help.c:1427 sql_help.c:1431 msgid "new_dictionary" msgstr "新しい辞書" -#: sql_help.c:1516 sql_help.c:1529 sql_help.c:1532 sql_help.c:1533 -#: sql_help.c:3021 +#: sql_help.c:1526 sql_help.c:1540 sql_help.c:1543 sql_help.c:1544 +#: sql_help.c:3042 msgid "attribute_name" msgstr "属性名" -#: sql_help.c:1517 +#: sql_help.c:1527 msgid "new_attribute_name" msgstr "新しい属性名" -#: sql_help.c:1523 sql_help.c:1527 +#: sql_help.c:1531 sql_help.c:1535 msgid "new_enum_value" msgstr "新しい列挙値" -#: sql_help.c:1524 +#: sql_help.c:1532 msgid "neighbor_enum_value" msgstr "隣接した列挙値" -#: sql_help.c:1526 +#: sql_help.c:1534 msgid "existing_enum_value" msgstr "既存の列挙値" -#: sql_help.c:1601 sql_help.c:2236 sql_help.c:2245 sql_help.c:2622 -#: sql_help.c:3099 sql_help.c:3544 sql_help.c:3719 sql_help.c:3754 -#: sql_help.c:4052 +#: sql_help.c:1537 +msgid "property" +msgstr "プロパティ" + +#: sql_help.c:1612 sql_help.c:2251 sql_help.c:2260 sql_help.c:2643 +#: sql_help.c:3120 sql_help.c:3571 sql_help.c:3750 sql_help.c:3786 +#: sql_help.c:4098 msgid "server_name" msgstr "サーバ名" -#: sql_help.c:1629 sql_help.c:1632 sql_help.c:3114 +#: sql_help.c:1644 sql_help.c:1647 sql_help.c:3135 msgid "view_option_name" msgstr "ビューのオプション名" -#: sql_help.c:1630 sql_help.c:3115 +#: sql_help.c:1645 sql_help.c:3136 msgid "view_option_value" msgstr "ビューオプションの値" -#: sql_help.c:1651 sql_help.c:1652 sql_help.c:4609 sql_help.c:4610 +#: sql_help.c:1666 sql_help.c:1667 sql_help.c:4659 sql_help.c:4660 msgid "table_and_columns" msgstr "テーブルおよび列" -#: sql_help.c:1653 sql_help.c:1897 sql_help.c:3591 sql_help.c:4611 +#: sql_help.c:1668 sql_help.c:1912 sql_help.c:3619 sql_help.c:3963 +#: sql_help.c:4661 msgid "where option can be one of:" msgstr "オプションには以下のうちのいずれかを指定します:" -#: sql_help.c:1654 sql_help.c:1655 sql_help.c:1899 sql_help.c:1902 -#: sql_help.c:2081 sql_help.c:3592 sql_help.c:3593 sql_help.c:3594 -#: sql_help.c:3595 sql_help.c:3596 sql_help.c:3597 sql_help.c:3598 -#: sql_help.c:4612 sql_help.c:4613 sql_help.c:4614 sql_help.c:4615 -#: sql_help.c:4616 sql_help.c:4617 sql_help.c:4618 sql_help.c:4619 +#: sql_help.c:1669 sql_help.c:1670 sql_help.c:1914 sql_help.c:1917 +#: sql_help.c:2096 sql_help.c:3620 sql_help.c:3621 sql_help.c:3622 +#: sql_help.c:3623 sql_help.c:3624 sql_help.c:3625 sql_help.c:3626 +#: sql_help.c:3627 sql_help.c:4662 sql_help.c:4663 sql_help.c:4664 +#: sql_help.c:4665 sql_help.c:4666 sql_help.c:4667 sql_help.c:4668 +#: sql_help.c:4669 msgid "boolean" msgstr "真偽値" -#: sql_help.c:1656 sql_help.c:4620 +#: sql_help.c:1671 sql_help.c:4671 msgid "and table_and_columns is:" msgstr "そしてテーブルと列の指定は以下の通りです:" -#: sql_help.c:1672 sql_help.c:4394 sql_help.c:4396 sql_help.c:4420 +#: sql_help.c:1687 sql_help.c:4443 sql_help.c:4445 sql_help.c:4469 msgid "transaction_mode" msgstr "トランザクションのモード" -#: sql_help.c:1673 sql_help.c:4397 sql_help.c:4421 +#: sql_help.c:1688 sql_help.c:4446 sql_help.c:4470 msgid "where transaction_mode is one of:" msgstr "トランザクションのモードは以下の通りです:" -#: sql_help.c:1682 sql_help.c:4254 sql_help.c:4263 sql_help.c:4267 -#: sql_help.c:4271 sql_help.c:4274 sql_help.c:4493 sql_help.c:4502 -#: sql_help.c:4506 sql_help.c:4510 sql_help.c:4513 sql_help.c:4711 -#: sql_help.c:4720 sql_help.c:4724 sql_help.c:4728 sql_help.c:4731 +#: sql_help.c:1697 sql_help.c:4303 sql_help.c:4312 sql_help.c:4316 +#: sql_help.c:4320 sql_help.c:4323 sql_help.c:4542 sql_help.c:4551 +#: sql_help.c:4555 sql_help.c:4559 sql_help.c:4562 sql_help.c:4762 +#: sql_help.c:4771 sql_help.c:4775 sql_help.c:4779 sql_help.c:4782 msgid "argument" msgstr "引数" -#: sql_help.c:1772 +#: sql_help.c:1787 msgid "relation_name" msgstr "リレーション名" -#: sql_help.c:1777 sql_help.c:3715 sql_help.c:4048 +#: sql_help.c:1792 sql_help.c:3746 sql_help.c:4094 msgid "domain_name" msgstr "ドメイン名" -#: sql_help.c:1799 +#: sql_help.c:1814 msgid "policy_name" msgstr "ポリシー名" -#: sql_help.c:1812 +#: sql_help.c:1827 msgid "rule_name" msgstr "ルール名" -#: sql_help.c:1831 +#: sql_help.c:1846 msgid "text" msgstr "コメント文字列" -#: sql_help.c:1856 sql_help.c:3898 sql_help.c:4086 +#: sql_help.c:1871 sql_help.c:3930 sql_help.c:4135 msgid "transaction_id" msgstr "トランザクションID" -#: sql_help.c:1887 sql_help.c:1894 sql_help.c:3824 +#: sql_help.c:1902 sql_help.c:1909 sql_help.c:3856 msgid "filename" msgstr "ファイル名" -#: sql_help.c:1888 sql_help.c:1895 sql_help.c:2562 sql_help.c:2563 -#: sql_help.c:2564 +#: sql_help.c:1903 sql_help.c:1910 sql_help.c:2583 sql_help.c:2584 +#: sql_help.c:2585 msgid "command" msgstr "コマンド" -#: sql_help.c:1890 sql_help.c:2561 sql_help.c:2973 sql_help.c:3150 -#: sql_help.c:3808 sql_help.c:4237 sql_help.c:4239 sql_help.c:4327 -#: sql_help.c:4329 sql_help.c:4476 sql_help.c:4478 sql_help.c:4581 -#: sql_help.c:4694 sql_help.c:4696 +#: sql_help.c:1905 sql_help.c:2582 sql_help.c:2994 sql_help.c:3171 +#: sql_help.c:3840 sql_help.c:4286 sql_help.c:4288 sql_help.c:4376 +#: sql_help.c:4378 sql_help.c:4525 sql_help.c:4527 sql_help.c:4630 +#: sql_help.c:4745 sql_help.c:4747 msgid "condition" msgstr "条件" -#: sql_help.c:1893 sql_help.c:2390 sql_help.c:2856 sql_help.c:3116 -#: sql_help.c:3134 sql_help.c:3789 +#: sql_help.c:1908 sql_help.c:2411 sql_help.c:2877 sql_help.c:3137 +#: sql_help.c:3155 sql_help.c:3821 msgid "query" msgstr "問い合わせ" -#: sql_help.c:1898 +#: sql_help.c:1913 msgid "format_name" msgstr "フォーマット名" -#: sql_help.c:1900 +#: sql_help.c:1915 msgid "delimiter_character" msgstr "区切り文字" -#: sql_help.c:1901 +#: sql_help.c:1916 msgid "null_string" msgstr "NULL文字列" -#: sql_help.c:1903 +#: sql_help.c:1918 msgid "quote_character" msgstr "引用符文字" -#: sql_help.c:1904 +#: sql_help.c:1919 msgid "escape_character" msgstr "エスケープ文字" -#: sql_help.c:1908 +#: sql_help.c:1923 msgid "encoding_name" msgstr "エンコーディング名" -#: sql_help.c:1919 +#: sql_help.c:1934 msgid "access_method_type" msgstr "アクセスメソッドの型" -#: sql_help.c:1990 sql_help.c:2009 sql_help.c:2012 +#: sql_help.c:2005 sql_help.c:2024 sql_help.c:2027 msgid "arg_data_type" msgstr "入力データ型" -#: sql_help.c:1991 sql_help.c:2013 sql_help.c:2021 +#: sql_help.c:2006 sql_help.c:2028 sql_help.c:2036 msgid "sfunc" msgstr "状態遷移関数" -#: sql_help.c:1992 sql_help.c:2014 sql_help.c:2022 +#: sql_help.c:2007 sql_help.c:2029 sql_help.c:2037 msgid "state_data_type" msgstr "状態データの型" -#: sql_help.c:1993 sql_help.c:2015 sql_help.c:2023 +#: sql_help.c:2008 sql_help.c:2030 sql_help.c:2038 msgid "state_data_size" msgstr "状態データのサイズ" -#: sql_help.c:1994 sql_help.c:2016 sql_help.c:2024 +#: sql_help.c:2009 sql_help.c:2031 sql_help.c:2039 msgid "ffunc" msgstr "終了関数" -#: sql_help.c:1995 sql_help.c:2025 +#: sql_help.c:2010 sql_help.c:2040 msgid "combinefunc" msgstr "結合関数" -#: sql_help.c:1996 sql_help.c:2026 +#: sql_help.c:2011 sql_help.c:2041 msgid "serialfunc" msgstr "シリアライズ関数" -#: sql_help.c:1997 sql_help.c:2027 +#: sql_help.c:2012 sql_help.c:2042 msgid "deserialfunc" msgstr "デシリアライズ関数" -#: sql_help.c:1998 sql_help.c:2017 sql_help.c:2028 +#: sql_help.c:2013 sql_help.c:2032 sql_help.c:2043 msgid "initial_condition" msgstr "初期条件" -#: sql_help.c:1999 sql_help.c:2029 +#: sql_help.c:2014 sql_help.c:2044 msgid "msfunc" msgstr "前方状態遷移関数" -#: sql_help.c:2000 sql_help.c:2030 +#: sql_help.c:2015 sql_help.c:2045 msgid "minvfunc" msgstr "逆状態遷移関数" -#: sql_help.c:2001 sql_help.c:2031 +#: sql_help.c:2016 sql_help.c:2046 msgid "mstate_data_type" msgstr "移動集約モード時の状態値のデータ型" -#: sql_help.c:2002 sql_help.c:2032 +#: sql_help.c:2017 sql_help.c:2047 msgid "mstate_data_size" msgstr "移動集約モード時の状態値のデータサイズ" -#: sql_help.c:2003 sql_help.c:2033 +#: sql_help.c:2018 sql_help.c:2048 msgid "mffunc" msgstr "移動集約モード時の終了関数" -#: sql_help.c:2004 sql_help.c:2034 +#: sql_help.c:2019 sql_help.c:2049 msgid "minitial_condition" msgstr "移動集約モード時の初期条件" -#: sql_help.c:2005 sql_help.c:2035 +#: sql_help.c:2020 sql_help.c:2050 msgid "sort_operator" msgstr "ソート演算子" -#: sql_help.c:2018 +#: sql_help.c:2033 msgid "or the old syntax" msgstr "または古い構文" -#: sql_help.c:2020 +#: sql_help.c:2035 msgid "base_type" msgstr "基本の型" -#: sql_help.c:2077 +#: sql_help.c:2092 sql_help.c:2133 msgid "locale" msgstr "ロケール" -#: sql_help.c:2078 sql_help.c:2117 +#: sql_help.c:2093 sql_help.c:2134 msgid "lc_collate" msgstr "照合順序" -#: sql_help.c:2079 sql_help.c:2118 +#: sql_help.c:2094 sql_help.c:2135 msgid "lc_ctype" msgstr "Ctype(変換演算子)" -#: sql_help.c:2080 sql_help.c:4139 +#: sql_help.c:2095 sql_help.c:4188 msgid "provider" msgstr "プロバイダ" -#: sql_help.c:2082 sql_help.c:2173 +#: sql_help.c:2097 sql_help.c:2189 msgid "version" msgstr "バージョン" -#: sql_help.c:2084 +#: sql_help.c:2099 msgid "existing_collation" msgstr "既存の照合順序" -#: sql_help.c:2094 +#: sql_help.c:2109 msgid "source_encoding" msgstr "変換元のエンコーディング" -#: sql_help.c:2095 +#: sql_help.c:2110 msgid "dest_encoding" msgstr "変換先のエンコーディング" -#: sql_help.c:2115 sql_help.c:2896 +#: sql_help.c:2131 sql_help.c:2917 msgid "template" msgstr "テンプレート" -#: sql_help.c:2116 +#: sql_help.c:2132 msgid "encoding" msgstr "エンコード" -#: sql_help.c:2142 +#: sql_help.c:2159 msgid "constraint" msgstr "制約条件" -#: sql_help.c:2143 +#: sql_help.c:2160 msgid "where constraint is:" msgstr "制約条件は以下の通りです:" -#: sql_help.c:2157 sql_help.c:2559 sql_help.c:2969 +#: sql_help.c:2174 sql_help.c:2580 sql_help.c:2990 msgid "event" msgstr "イベント" -#: sql_help.c:2158 +#: sql_help.c:2175 msgid "filter_variable" msgstr "フィルター変数" -#: sql_help.c:2174 -msgid "old_version" -msgstr "旧バージョン" - -#: sql_help.c:2248 sql_help.c:2791 +#: sql_help.c:2263 sql_help.c:2812 msgid "where column_constraint is:" msgstr "カラム制約は以下の通りです:" -#: sql_help.c:2252 sql_help.c:2795 -msgid "generation_expr" -msgstr "生成式" - -#: sql_help.c:2285 +#: sql_help.c:2300 msgid "rettype" msgstr "戻り値の型" -#: sql_help.c:2287 +#: sql_help.c:2302 msgid "column_type" msgstr "列の型" -#: sql_help.c:2296 sql_help.c:2490 +#: sql_help.c:2311 sql_help.c:2511 msgid "definition" msgstr "定義" -#: sql_help.c:2297 sql_help.c:2491 +#: sql_help.c:2312 sql_help.c:2512 msgid "obj_file" msgstr "オブジェクトファイル名" -#: sql_help.c:2298 sql_help.c:2492 +#: sql_help.c:2313 sql_help.c:2513 msgid "link_symbol" msgstr "リンクシンボル" -#: sql_help.c:2332 sql_help.c:2544 sql_help.c:3088 +#: sql_help.c:2351 sql_help.c:2565 sql_help.c:3109 msgid "uid" msgstr "UID" -#: sql_help.c:2347 sql_help.c:2386 sql_help.c:2760 sql_help.c:2773 -#: sql_help.c:2787 sql_help.c:2852 +#: sql_help.c:2366 sql_help.c:2407 sql_help.c:2781 sql_help.c:2794 +#: sql_help.c:2808 sql_help.c:2873 msgid "method" msgstr "インデックスメソッド" -#: sql_help.c:2368 +#: sql_help.c:2371 +msgid "opclass_parameter" +msgstr "演算子クラスパラメータ" + +#: sql_help.c:2388 msgid "call_handler" msgstr "呼び出しハンドラー" -#: sql_help.c:2369 +#: sql_help.c:2389 msgid "inline_handler" msgstr "インラインハンドラー" -#: sql_help.c:2370 +#: sql_help.c:2390 msgid "valfunction" msgstr "バリデーション関数" -#: sql_help.c:2408 +#: sql_help.c:2429 msgid "com_op" msgstr "交代演算子" -#: sql_help.c:2409 +#: sql_help.c:2430 msgid "neg_op" msgstr "否定演算子" -#: sql_help.c:2427 +#: sql_help.c:2448 msgid "family_name" msgstr "演算子族の名前" -#: sql_help.c:2438 +#: sql_help.c:2459 msgid "storage_type" msgstr "ストレージタイプ" -#: sql_help.c:2565 sql_help.c:2976 +#: sql_help.c:2586 sql_help.c:2997 msgid "where event can be one of:" msgstr "イベントは以下のいずれかです:" -#: sql_help.c:2584 sql_help.c:2586 +#: sql_help.c:2605 sql_help.c:2607 msgid "schema_element" msgstr "スキーマ要素" -#: sql_help.c:2623 +#: sql_help.c:2644 msgid "server_type" msgstr "サーバのタイプ" -#: sql_help.c:2624 +#: sql_help.c:2645 msgid "server_version" msgstr "サーバのバージョン" -#: sql_help.c:2625 sql_help.c:3717 sql_help.c:4050 +#: sql_help.c:2646 sql_help.c:3748 sql_help.c:4096 msgid "fdw_name" msgstr "外部データラッパ名" -#: sql_help.c:2638 +#: sql_help.c:2659 msgid "statistics_name" msgstr "統計オブジェクト名" -#: sql_help.c:2639 +#: sql_help.c:2660 msgid "statistics_kind" msgstr "統計種別" -#: sql_help.c:2653 +#: sql_help.c:2674 msgid "subscription_name" msgstr "サブスクリプション名" -#: sql_help.c:2753 +#: sql_help.c:2774 msgid "source_table" msgstr "コピー元のテーブル" -#: sql_help.c:2754 +#: sql_help.c:2775 msgid "like_option" msgstr "LIKEオプション" -#: sql_help.c:2820 +#: sql_help.c:2841 msgid "and like_option is:" msgstr "LIKE オプションは以下の通りです:" -#: sql_help.c:2869 +#: sql_help.c:2890 msgid "directory" msgstr "ディレクトリ" -#: sql_help.c:2883 +#: sql_help.c:2904 msgid "parser_name" msgstr "パーサ名" -#: sql_help.c:2884 +#: sql_help.c:2905 msgid "source_config" msgstr "複製元の設定" -#: sql_help.c:2913 +#: sql_help.c:2934 msgid "start_function" msgstr "開始関数" -#: sql_help.c:2914 +#: sql_help.c:2935 msgid "gettoken_function" msgstr "トークン取得関数" -#: sql_help.c:2915 +#: sql_help.c:2936 msgid "end_function" msgstr "終了関数" -#: sql_help.c:2916 +#: sql_help.c:2937 msgid "lextypes_function" msgstr "LEXTYPE関数" -#: sql_help.c:2917 +#: sql_help.c:2938 msgid "headline_function" msgstr "見出し関数" -#: sql_help.c:2929 +#: sql_help.c:2950 msgid "init_function" msgstr "初期処理関数" -#: sql_help.c:2930 +#: sql_help.c:2951 msgid "lexize_function" msgstr "LEXIZE関数" -#: sql_help.c:2943 +#: sql_help.c:2964 msgid "from_sql_function_name" msgstr "{FROM SQL 関数名}" -#: sql_help.c:2945 +#: sql_help.c:2966 msgid "to_sql_function_name" msgstr "{TO SQL 関数名}" -#: sql_help.c:2971 +#: sql_help.c:2992 msgid "referenced_table_name" msgstr "被参照テーブル名" -#: sql_help.c:2972 +#: sql_help.c:2993 msgid "transition_relation_name" msgstr "移行用リレーション名" -#: sql_help.c:2975 +#: sql_help.c:2996 msgid "arguments" msgstr "引数" -#: sql_help.c:3025 sql_help.c:4172 +#: sql_help.c:3046 sql_help.c:4221 msgid "label" msgstr "ラベル" -#: sql_help.c:3027 +#: sql_help.c:3048 msgid "subtype" msgstr "当該範囲のデータ型" -#: sql_help.c:3028 +#: sql_help.c:3049 msgid "subtype_operator_class" msgstr "当該範囲のデータ型の演算子クラス" -#: sql_help.c:3030 +#: sql_help.c:3051 msgid "canonical_function" msgstr "正規化関数" -#: sql_help.c:3031 +#: sql_help.c:3052 msgid "subtype_diff_function" msgstr "当該範囲のデータ型の差分抽出関数" -#: sql_help.c:3033 +#: sql_help.c:3054 msgid "input_function" msgstr "入力関数" -#: sql_help.c:3034 +#: sql_help.c:3055 msgid "output_function" msgstr "出力関数" -#: sql_help.c:3035 +#: sql_help.c:3056 msgid "receive_function" msgstr "受信関数" -#: sql_help.c:3036 +#: sql_help.c:3057 msgid "send_function" msgstr "送信関数" -#: sql_help.c:3037 +#: sql_help.c:3058 msgid "type_modifier_input_function" msgstr "型修飾子の入力関数" -#: sql_help.c:3038 +#: sql_help.c:3059 msgid "type_modifier_output_function" msgstr "型修飾子の出力関数" -#: sql_help.c:3039 +#: sql_help.c:3060 msgid "analyze_function" msgstr "分析関数" -#: sql_help.c:3040 +#: sql_help.c:3061 msgid "internallength" msgstr "内部長" -#: sql_help.c:3041 +#: sql_help.c:3062 msgid "alignment" msgstr "バイト境界" -#: sql_help.c:3042 +#: sql_help.c:3063 msgid "storage" msgstr "ストレージ" -#: sql_help.c:3043 +#: sql_help.c:3064 msgid "like_type" msgstr "LIKEの型" -#: sql_help.c:3044 +#: sql_help.c:3065 msgid "category" msgstr "カテゴリー" -#: sql_help.c:3045 +#: sql_help.c:3066 msgid "preferred" msgstr "優先データ型かどうか(真偽値)" -#: sql_help.c:3046 +#: sql_help.c:3067 msgid "default" msgstr "デフォルト" -#: sql_help.c:3047 +#: sql_help.c:3068 msgid "element" msgstr "要素のデータ型" -#: sql_help.c:3048 +#: sql_help.c:3069 msgid "delimiter" msgstr "区切り記号" -#: sql_help.c:3049 +#: sql_help.c:3070 msgid "collatable" msgstr "照合可能" -#: sql_help.c:3146 sql_help.c:3784 sql_help.c:4232 sql_help.c:4321 -#: sql_help.c:4471 sql_help.c:4571 sql_help.c:4689 +#: sql_help.c:3167 sql_help.c:3816 sql_help.c:4281 sql_help.c:4370 +#: sql_help.c:4520 sql_help.c:4620 sql_help.c:4740 msgid "with_query" msgstr "WITH問い合わせ" -#: sql_help.c:3148 sql_help.c:3786 sql_help.c:4251 sql_help.c:4257 -#: sql_help.c:4260 sql_help.c:4264 sql_help.c:4268 sql_help.c:4276 -#: sql_help.c:4490 sql_help.c:4496 sql_help.c:4499 sql_help.c:4503 -#: sql_help.c:4507 sql_help.c:4515 sql_help.c:4573 sql_help.c:4708 -#: sql_help.c:4714 sql_help.c:4717 sql_help.c:4721 sql_help.c:4725 -#: sql_help.c:4733 +#: sql_help.c:3169 sql_help.c:3818 sql_help.c:4300 sql_help.c:4306 +#: sql_help.c:4309 sql_help.c:4313 sql_help.c:4317 sql_help.c:4325 +#: sql_help.c:4539 sql_help.c:4545 sql_help.c:4548 sql_help.c:4552 +#: sql_help.c:4556 sql_help.c:4564 sql_help.c:4622 sql_help.c:4759 +#: sql_help.c:4765 sql_help.c:4768 sql_help.c:4772 sql_help.c:4776 +#: sql_help.c:4784 msgid "alias" msgstr "エイリアス" -#: sql_help.c:3149 -msgid "using_list" -msgstr "USINGリスト" +#: sql_help.c:3170 sql_help.c:4285 sql_help.c:4327 sql_help.c:4329 +#: sql_help.c:4375 sql_help.c:4524 sql_help.c:4566 sql_help.c:4568 +#: sql_help.c:4629 sql_help.c:4744 sql_help.c:4786 sql_help.c:4788 +msgid "from_item" +msgstr "FROM項目" -#: sql_help.c:3151 sql_help.c:3624 sql_help.c:3865 sql_help.c:4582 +#: sql_help.c:3172 sql_help.c:3653 sql_help.c:3897 sql_help.c:4631 msgid "cursor_name" msgstr "カーソル名" -#: sql_help.c:3152 sql_help.c:3792 sql_help.c:4583 +#: sql_help.c:3173 sql_help.c:3824 sql_help.c:4632 msgid "output_expression" msgstr "出力表現" -#: sql_help.c:3153 sql_help.c:3793 sql_help.c:4235 sql_help.c:4324 -#: sql_help.c:4474 sql_help.c:4584 sql_help.c:4692 +#: sql_help.c:3174 sql_help.c:3825 sql_help.c:4284 sql_help.c:4373 +#: sql_help.c:4523 sql_help.c:4633 sql_help.c:4743 msgid "output_name" msgstr "出力名" -#: sql_help.c:3169 +#: sql_help.c:3190 msgid "code" msgstr "コードブロック" -#: sql_help.c:3568 +#: sql_help.c:3595 msgid "parameter" msgstr "パラメータ" -#: sql_help.c:3589 sql_help.c:3590 sql_help.c:3890 +#: sql_help.c:3617 sql_help.c:3618 sql_help.c:3922 msgid "statement" msgstr "ステートメント" -#: sql_help.c:3623 sql_help.c:3864 +#: sql_help.c:3652 sql_help.c:3896 msgid "direction" msgstr "取り出す方向と行数" -#: sql_help.c:3625 sql_help.c:3866 +#: sql_help.c:3654 sql_help.c:3898 msgid "where direction can be empty or one of:" msgstr "取り出す方向と行数は無指定もしくは以下のいずれかです:" -#: sql_help.c:3626 sql_help.c:3627 sql_help.c:3628 sql_help.c:3629 -#: sql_help.c:3630 sql_help.c:3867 sql_help.c:3868 sql_help.c:3869 -#: sql_help.c:3870 sql_help.c:3871 sql_help.c:4245 sql_help.c:4247 -#: sql_help.c:4335 sql_help.c:4337 sql_help.c:4484 sql_help.c:4486 -#: sql_help.c:4637 sql_help.c:4639 sql_help.c:4702 sql_help.c:4704 +#: sql_help.c:3655 sql_help.c:3656 sql_help.c:3657 sql_help.c:3658 +#: sql_help.c:3659 sql_help.c:3899 sql_help.c:3900 sql_help.c:3901 +#: sql_help.c:3902 sql_help.c:3903 sql_help.c:4294 sql_help.c:4296 +#: sql_help.c:4384 sql_help.c:4386 sql_help.c:4533 sql_help.c:4535 +#: sql_help.c:4688 sql_help.c:4690 sql_help.c:4753 sql_help.c:4755 msgid "count" msgstr "取り出す位置や行数" -#: sql_help.c:3710 sql_help.c:4043 +#: sql_help.c:3741 sql_help.c:4089 msgid "sequence_name" msgstr "シーケンス名" -#: sql_help.c:3723 sql_help.c:4056 +#: sql_help.c:3754 sql_help.c:4102 msgid "arg_name" msgstr "引数名" -#: sql_help.c:3724 sql_help.c:4057 +#: sql_help.c:3755 sql_help.c:4103 msgid "arg_type" msgstr "引数の型" -#: sql_help.c:3729 sql_help.c:4062 +#: sql_help.c:3760 sql_help.c:4108 msgid "loid" msgstr "ラージオブジェクトid" -#: sql_help.c:3752 +#: sql_help.c:3784 msgid "remote_schema" msgstr "リモートスキーマ" -#: sql_help.c:3755 +#: sql_help.c:3787 msgid "local_schema" msgstr "ローカルスキーマ" -#: sql_help.c:3790 +#: sql_help.c:3822 msgid "conflict_target" msgstr "競合ターゲット" -#: sql_help.c:3791 +#: sql_help.c:3823 msgid "conflict_action" msgstr "競合時アクション" -#: sql_help.c:3794 +#: sql_help.c:3826 msgid "where conflict_target can be one of:" msgstr "競合ターゲットは以下のいずれかです:" -#: sql_help.c:3795 +#: sql_help.c:3827 msgid "index_column_name" msgstr "インデックスのカラム名" -#: sql_help.c:3796 +#: sql_help.c:3828 msgid "index_expression" msgstr "インデックス表現" -#: sql_help.c:3799 +#: sql_help.c:3831 msgid "index_predicate" msgstr "インデックスの述語" -#: sql_help.c:3801 +#: sql_help.c:3833 msgid "and conflict_action is one of:" msgstr "競合時アクションは以下のいずれかです:" -#: sql_help.c:3807 sql_help.c:4579 +#: sql_help.c:3839 sql_help.c:4628 msgid "sub-SELECT" msgstr "副問い合わせ句" -#: sql_help.c:3816 sql_help.c:3879 sql_help.c:4555 +#: sql_help.c:3848 sql_help.c:3911 sql_help.c:4604 msgid "channel" msgstr "チャネル" -#: sql_help.c:3838 +#: sql_help.c:3870 msgid "lockmode" msgstr "ロックモード" -#: sql_help.c:3839 +#: sql_help.c:3871 msgid "where lockmode is one of:" msgstr "ロックモードは以下のいずれかです:" -#: sql_help.c:3880 +#: sql_help.c:3912 msgid "payload" msgstr "ペイロード" -#: sql_help.c:3907 +#: sql_help.c:3939 msgid "old_role" msgstr "元のロール" -#: sql_help.c:3908 +#: sql_help.c:3940 msgid "new_role" msgstr "新しいロール" -#: sql_help.c:3933 sql_help.c:4094 sql_help.c:4102 +#: sql_help.c:3971 sql_help.c:4143 sql_help.c:4151 msgid "savepoint_name" msgstr "セーブポイント名" -#: sql_help.c:4236 sql_help.c:4278 sql_help.c:4280 sql_help.c:4326 -#: sql_help.c:4475 sql_help.c:4517 sql_help.c:4519 sql_help.c:4693 -#: sql_help.c:4735 sql_help.c:4737 -msgid "from_item" -msgstr "FROM項目" - -#: sql_help.c:4238 sql_help.c:4290 sql_help.c:4477 sql_help.c:4529 -#: sql_help.c:4695 sql_help.c:4747 +#: sql_help.c:4287 sql_help.c:4339 sql_help.c:4526 sql_help.c:4578 +#: sql_help.c:4746 sql_help.c:4798 msgid "grouping_element" msgstr "グルーピング要素" -#: sql_help.c:4240 sql_help.c:4330 sql_help.c:4479 sql_help.c:4697 +#: sql_help.c:4289 sql_help.c:4379 sql_help.c:4528 sql_help.c:4748 msgid "window_name" msgstr "ウィンドウ名" -#: sql_help.c:4241 sql_help.c:4331 sql_help.c:4480 sql_help.c:4698 +#: sql_help.c:4290 sql_help.c:4380 sql_help.c:4529 sql_help.c:4749 msgid "window_definition" msgstr "ウィンドウ定義" -#: sql_help.c:4242 sql_help.c:4256 sql_help.c:4294 sql_help.c:4332 -#: sql_help.c:4481 sql_help.c:4495 sql_help.c:4533 sql_help.c:4699 -#: sql_help.c:4713 sql_help.c:4751 +#: sql_help.c:4291 sql_help.c:4305 sql_help.c:4343 sql_help.c:4381 +#: sql_help.c:4530 sql_help.c:4544 sql_help.c:4582 sql_help.c:4750 +#: sql_help.c:4764 sql_help.c:4802 msgid "select" msgstr "SELECT句" -#: sql_help.c:4249 sql_help.c:4488 sql_help.c:4706 +#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4757 msgid "where from_item can be one of:" msgstr "FROM項目は以下のいずれかです:" -#: sql_help.c:4252 sql_help.c:4258 sql_help.c:4261 sql_help.c:4265 -#: sql_help.c:4277 sql_help.c:4491 sql_help.c:4497 sql_help.c:4500 -#: sql_help.c:4504 sql_help.c:4516 sql_help.c:4709 sql_help.c:4715 -#: sql_help.c:4718 sql_help.c:4722 sql_help.c:4734 +#: sql_help.c:4301 sql_help.c:4307 sql_help.c:4310 sql_help.c:4314 +#: sql_help.c:4326 sql_help.c:4540 sql_help.c:4546 sql_help.c:4549 +#: sql_help.c:4553 sql_help.c:4565 sql_help.c:4760 sql_help.c:4766 +#: sql_help.c:4769 sql_help.c:4773 sql_help.c:4785 msgid "column_alias" msgstr "行エイリアス" -#: sql_help.c:4253 sql_help.c:4492 sql_help.c:4710 +#: sql_help.c:4302 sql_help.c:4541 sql_help.c:4761 msgid "sampling_method" msgstr "サンプリングメソッド" -#: sql_help.c:4255 sql_help.c:4494 sql_help.c:4712 +#: sql_help.c:4304 sql_help.c:4543 sql_help.c:4763 msgid "seed" msgstr "乱数シード" -#: sql_help.c:4259 sql_help.c:4292 sql_help.c:4498 sql_help.c:4531 -#: sql_help.c:4716 sql_help.c:4749 +#: sql_help.c:4308 sql_help.c:4341 sql_help.c:4547 sql_help.c:4580 +#: sql_help.c:4767 sql_help.c:4800 msgid "with_query_name" msgstr "WITH問い合わせ名" -#: sql_help.c:4269 sql_help.c:4272 sql_help.c:4275 sql_help.c:4508 -#: sql_help.c:4511 sql_help.c:4514 sql_help.c:4726 sql_help.c:4729 -#: sql_help.c:4732 +#: sql_help.c:4318 sql_help.c:4321 sql_help.c:4324 sql_help.c:4557 +#: sql_help.c:4560 sql_help.c:4563 sql_help.c:4777 sql_help.c:4780 +#: sql_help.c:4783 msgid "column_definition" msgstr "カラム定義" -#: sql_help.c:4279 sql_help.c:4518 sql_help.c:4736 +#: sql_help.c:4328 sql_help.c:4567 sql_help.c:4787 msgid "join_type" msgstr "JOINタイプ" -#: sql_help.c:4281 sql_help.c:4520 sql_help.c:4738 +#: sql_help.c:4330 sql_help.c:4569 sql_help.c:4789 msgid "join_condition" msgstr "JOIN条件" -#: sql_help.c:4282 sql_help.c:4521 sql_help.c:4739 +#: sql_help.c:4331 sql_help.c:4570 sql_help.c:4790 msgid "join_column" msgstr "JOINカラム" -#: sql_help.c:4283 sql_help.c:4522 sql_help.c:4740 +#: sql_help.c:4332 sql_help.c:4571 sql_help.c:4791 msgid "and grouping_element can be one of:" msgstr "グルーピング要素は以下のいずれかです:" -#: sql_help.c:4291 sql_help.c:4530 sql_help.c:4748 +#: sql_help.c:4340 sql_help.c:4579 sql_help.c:4799 msgid "and with_query is:" msgstr "WITH問い合わせは以下のいずれかです:" -#: sql_help.c:4295 sql_help.c:4534 sql_help.c:4752 +#: sql_help.c:4344 sql_help.c:4583 sql_help.c:4803 msgid "values" msgstr "VALUES句" -#: sql_help.c:4296 sql_help.c:4535 sql_help.c:4753 +#: sql_help.c:4345 sql_help.c:4584 sql_help.c:4804 msgid "insert" msgstr "INSERT句" -#: sql_help.c:4297 sql_help.c:4536 sql_help.c:4754 +#: sql_help.c:4346 sql_help.c:4585 sql_help.c:4805 msgid "update" msgstr "UPDATE句" -#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4755 +#: sql_help.c:4347 sql_help.c:4586 sql_help.c:4806 msgid "delete" msgstr "DELETE句" -#: sql_help.c:4325 +#: sql_help.c:4374 msgid "new_table" msgstr "新しいテーブル" -#: sql_help.c:4350 +#: sql_help.c:4399 msgid "timezone" msgstr "タイムゾーン" -#: sql_help.c:4395 +#: sql_help.c:4444 msgid "snapshot_id" msgstr "スナップショットID" -#: sql_help.c:4580 -msgid "from_list" -msgstr "FROMリスト" - -#: sql_help.c:4635 +#: sql_help.c:4686 msgid "sort_expression" msgstr "ソート表現" -#: sql_help.c:4762 sql_help.c:5740 +#: sql_help.c:4813 sql_help.c:5791 msgid "abort the current transaction" msgstr "現在のトランザクションを中止します" -#: sql_help.c:4768 +#: sql_help.c:4819 msgid "change the definition of an aggregate function" msgstr "集約関数の定義を変更します。" -#: sql_help.c:4774 +#: sql_help.c:4825 msgid "change the definition of a collation" msgstr "照合順序の定義を変更します。" -#: sql_help.c:4780 +#: sql_help.c:4831 msgid "change the definition of a conversion" msgstr "エンコーディング変換ルールの定義を変更します。" -#: sql_help.c:4786 +#: sql_help.c:4837 msgid "change a database" msgstr "データベースを変更します。" -#: sql_help.c:4792 +#: sql_help.c:4843 msgid "define default access privileges" msgstr "デフォルトのアクセス権限を定義します。" -#: sql_help.c:4798 +#: sql_help.c:4849 msgid "change the definition of a domain" msgstr "ドメインの定義を変更します。" -#: sql_help.c:4804 +#: sql_help.c:4855 msgid "change the definition of an event trigger" msgstr "イベントトリガーの定義を変更します。" -#: sql_help.c:4810 +#: sql_help.c:4861 msgid "change the definition of an extension" msgstr "拡張の定義を変更します。" -#: sql_help.c:4816 +#: sql_help.c:4867 msgid "change the definition of a foreign-data wrapper" msgstr "外部データラッパの定義を変更します。" -#: sql_help.c:4822 +#: sql_help.c:4873 msgid "change the definition of a foreign table" msgstr "外部テーブルの定義を変更します。" -#: sql_help.c:4828 +#: sql_help.c:4879 msgid "change the definition of a function" msgstr "関数の定義を変更します。" -#: sql_help.c:4834 +#: sql_help.c:4885 msgid "change role name or membership" msgstr "ロール名またはメンバーシップを変更します。" -#: sql_help.c:4840 +#: sql_help.c:4891 msgid "change the definition of an index" msgstr "インデックスの定義を変更します。" -#: sql_help.c:4846 +#: sql_help.c:4897 msgid "change the definition of a procedural language" msgstr "手続き言語の定義を変更します。" -#: sql_help.c:4852 +#: sql_help.c:4903 msgid "change the definition of a large object" msgstr "ラージオブジェクトの定義を変更します。" -#: sql_help.c:4858 +#: sql_help.c:4909 msgid "change the definition of a materialized view" msgstr "マテリアライズドビューの定義を変更します。" -#: sql_help.c:4864 +#: sql_help.c:4915 msgid "change the definition of an operator" msgstr "演算子の定義を変更します。" -#: sql_help.c:4870 +#: sql_help.c:4921 msgid "change the definition of an operator class" msgstr "演算子クラスの定義を変更します。" -#: sql_help.c:4876 +#: sql_help.c:4927 msgid "change the definition of an operator family" msgstr "演算子族の定義を変更します。" -#: sql_help.c:4882 +#: sql_help.c:4933 msgid "change the definition of a row level security policy" msgstr "行レベルのセキュリティ ポリシーの定義を変更します。" -#: sql_help.c:4888 +#: sql_help.c:4939 msgid "change the definition of a procedure" msgstr "プロシージャの定義を変更します" -#: sql_help.c:4894 +#: sql_help.c:4945 msgid "change the definition of a publication" msgstr "パブリケーションの定義を変更します。" -#: sql_help.c:4900 sql_help.c:5002 +#: sql_help.c:4951 sql_help.c:5053 msgid "change a database role" msgstr "データベースロールを変更します。" -#: sql_help.c:4906 +#: sql_help.c:4957 msgid "change the definition of a routine" msgstr "ルーチンの定義を変更します。" -#: sql_help.c:4912 +#: sql_help.c:4963 msgid "change the definition of a rule" msgstr "ルールの定義を変更します。" -#: sql_help.c:4918 +#: sql_help.c:4969 msgid "change the definition of a schema" msgstr "スキーマの定義を変更します。" -#: sql_help.c:4924 +#: sql_help.c:4975 msgid "change the definition of a sequence generator" msgstr "シーケンスジェネレーターの定義を変更します。" -#: sql_help.c:4930 +#: sql_help.c:4981 msgid "change the definition of a foreign server" msgstr "外部サーバの定義を変更します。" -#: sql_help.c:4936 +#: sql_help.c:4987 msgid "change the definition of an extended statistics object" msgstr "拡張統計情報オブジェクトの定義を変更します。" -#: sql_help.c:4942 +#: sql_help.c:4993 msgid "change the definition of a subscription" msgstr "サブスクリプションの定義を変更します。" -#: sql_help.c:4948 +#: sql_help.c:4999 msgid "change a server configuration parameter" msgstr "サーバの構成パラメータを変更します。" -#: sql_help.c:4954 +#: sql_help.c:5005 msgid "change the definition of a table" msgstr "テーブルの定義を変更します。" -#: sql_help.c:4960 +#: sql_help.c:5011 msgid "change the definition of a tablespace" msgstr "テーブル空間の定義を変更します。" -#: sql_help.c:4966 +#: sql_help.c:5017 msgid "change the definition of a text search configuration" msgstr "テキスト検索設定の定義を変更します。" -#: sql_help.c:4972 +#: sql_help.c:5023 msgid "change the definition of a text search dictionary" msgstr "テキスト検索辞書の定義を変更します。" -#: sql_help.c:4978 +#: sql_help.c:5029 msgid "change the definition of a text search parser" msgstr "テキスト検索パーサの定義を変更します。" -#: sql_help.c:4984 +#: sql_help.c:5035 msgid "change the definition of a text search template" msgstr "テキスト検索テンプレートの定義を変更します。" -#: sql_help.c:4990 +#: sql_help.c:5041 msgid "change the definition of a trigger" msgstr "トリガーの定義を変更します。" -#: sql_help.c:4996 +#: sql_help.c:5047 msgid "change the definition of a type" msgstr "型の定義を変更します。" -#: sql_help.c:5008 +#: sql_help.c:5059 msgid "change the definition of a user mapping" msgstr "ユーザマッピングの定義を変更します。" -#: sql_help.c:5014 +#: sql_help.c:5065 msgid "change the definition of a view" msgstr "ビューの定義を変更します。" -#: sql_help.c:5020 +#: sql_help.c:5071 msgid "collect statistics about a database" msgstr "データベースの統計情報を収集します。" -#: sql_help.c:5026 sql_help.c:5818 +#: sql_help.c:5077 sql_help.c:5869 msgid "start a transaction block" msgstr "トランザクションブロックを開始します。" -#: sql_help.c:5032 +#: sql_help.c:5083 msgid "invoke a procedure" msgstr "プロシージャを実行します" -#: sql_help.c:5038 +#: sql_help.c:5089 msgid "force a write-ahead log checkpoint" msgstr "先行書き込みログのチェックポイントを強制的に実行します。" -#: sql_help.c:5044 +#: sql_help.c:5095 msgid "close a cursor" msgstr "カーソルを閉じます。" -#: sql_help.c:5050 +#: sql_help.c:5101 msgid "cluster a table according to an index" msgstr "インデックスに従ってテーブルをクラスタ化します。" -#: sql_help.c:5056 +#: sql_help.c:5107 msgid "define or change the comment of an object" msgstr "オブジェクトのコメントを定義または変更します。" -#: sql_help.c:5062 sql_help.c:5620 +#: sql_help.c:5113 sql_help.c:5671 msgid "commit the current transaction" msgstr "現在のトランザクションをコミットします。" -#: sql_help.c:5068 +#: sql_help.c:5119 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "二相コミットのために事前に準備されたトランザクションをコミットします。" -#: sql_help.c:5074 +#: sql_help.c:5125 msgid "copy data between a file and a table" msgstr "ファイルとテーブル間でデータをコピーします。" -#: sql_help.c:5080 +#: sql_help.c:5131 msgid "define a new access method" msgstr "新しいアクセスメソッドを定義します。" -#: sql_help.c:5086 +#: sql_help.c:5137 msgid "define a new aggregate function" msgstr "新しい集約関数を定義します。" -#: sql_help.c:5092 +#: sql_help.c:5143 msgid "define a new cast" msgstr "新しいキャストを定義します。" -#: sql_help.c:5098 +#: sql_help.c:5149 msgid "define a new collation" msgstr "新しい照合順序を定義します。" -#: sql_help.c:5104 +#: sql_help.c:5155 msgid "define a new encoding conversion" msgstr "新しいエンコーディングの変換ルールを定義します。" -#: sql_help.c:5110 +#: sql_help.c:5161 msgid "create a new database" msgstr "新しいデータベースを作成します。" -#: sql_help.c:5116 +#: sql_help.c:5167 msgid "define a new domain" msgstr "新しいドメインを定義します。" -#: sql_help.c:5122 +#: sql_help.c:5173 msgid "define a new event trigger" msgstr "新しいイベントトリガーを定義します。" -#: sql_help.c:5128 +#: sql_help.c:5179 msgid "install an extension" msgstr "拡張をインストールします。" -#: sql_help.c:5134 +#: sql_help.c:5185 msgid "define a new foreign-data wrapper" msgstr "新しい外部データラッパを定義します。" -#: sql_help.c:5140 +#: sql_help.c:5191 msgid "define a new foreign table" msgstr "新しい外部テーブルを定義します。" -#: sql_help.c:5146 +#: sql_help.c:5197 msgid "define a new function" msgstr "新しい関数を定義します。" -#: sql_help.c:5152 sql_help.c:5212 sql_help.c:5314 +#: sql_help.c:5203 sql_help.c:5263 sql_help.c:5365 msgid "define a new database role" msgstr "新しいデータベースロールを定義します。" -#: sql_help.c:5158 +#: sql_help.c:5209 msgid "define a new index" msgstr "新しいインデックスを定義します。" -#: sql_help.c:5164 +#: sql_help.c:5215 msgid "define a new procedural language" msgstr "新しい手続き言語を定義します。" -#: sql_help.c:5170 +#: sql_help.c:5221 msgid "define a new materialized view" msgstr "新しいマテリアライズドビューを定義します。" -#: sql_help.c:5176 +#: sql_help.c:5227 msgid "define a new operator" msgstr "新しい演算子を定義します。" -#: sql_help.c:5182 +#: sql_help.c:5233 msgid "define a new operator class" msgstr "新しい演算子クラスを定義します。" -#: sql_help.c:5188 +#: sql_help.c:5239 msgid "define a new operator family" msgstr "新しい演算子族を定義します。" -#: sql_help.c:5194 +#: sql_help.c:5245 msgid "define a new row level security policy for a table" msgstr "テーブルに対して新しい行レベルのセキュリティポリシーを定義します。" -#: sql_help.c:5200 +#: sql_help.c:5251 msgid "define a new procedure" msgstr "新しいプロシージャを定義します" -#: sql_help.c:5206 +#: sql_help.c:5257 msgid "define a new publication" msgstr "新しいパブリケーションを定義します。" -#: sql_help.c:5218 +#: sql_help.c:5269 msgid "define a new rewrite rule" msgstr "新しい書き換えルールを定義します。" -#: sql_help.c:5224 +#: sql_help.c:5275 msgid "define a new schema" msgstr "新しいスキーマを定義します。" -#: sql_help.c:5230 +#: sql_help.c:5281 msgid "define a new sequence generator" msgstr "新しいシーケンスジェネレーターを定義します。" -#: sql_help.c:5236 +#: sql_help.c:5287 msgid "define a new foreign server" msgstr "新しい外部サーバを定義します。" -#: sql_help.c:5242 +#: sql_help.c:5293 msgid "define extended statistics" msgstr "拡張統計情報を定義します。" -#: sql_help.c:5248 +#: sql_help.c:5299 msgid "define a new subscription" msgstr "新しいサブスクリプションを定義します。" -#: sql_help.c:5254 +#: sql_help.c:5305 msgid "define a new table" msgstr "新しいテーブルを定義します。" -#: sql_help.c:5260 sql_help.c:5776 +#: sql_help.c:5311 sql_help.c:5827 msgid "define a new table from the results of a query" msgstr "問い合わせの結果から新しいテーブルを定義します。" -#: sql_help.c:5266 +#: sql_help.c:5317 msgid "define a new tablespace" msgstr "新しいテーブル空間を定義します。" -#: sql_help.c:5272 +#: sql_help.c:5323 msgid "define a new text search configuration" msgstr "新しいテキスト検索設定を定義します。" -#: sql_help.c:5278 +#: sql_help.c:5329 msgid "define a new text search dictionary" msgstr "新しいテキスト検索辞書を定義します。" -#: sql_help.c:5284 +#: sql_help.c:5335 msgid "define a new text search parser" msgstr "新しいテキスト検索パーサを定義します。" -#: sql_help.c:5290 +#: sql_help.c:5341 msgid "define a new text search template" msgstr "新しいテキスト検索テンプレートを定義します。" -#: sql_help.c:5296 +#: sql_help.c:5347 msgid "define a new transform" msgstr "新しい変換を定義します。" -#: sql_help.c:5302 +#: sql_help.c:5353 msgid "define a new trigger" msgstr "新しいトリガーを定義します。" -#: sql_help.c:5308 +#: sql_help.c:5359 msgid "define a new data type" msgstr "新しいデータ型を定義します。" -#: sql_help.c:5320 +#: sql_help.c:5371 msgid "define a new mapping of a user to a foreign server" msgstr "外部サーバに対するユーザの新しいマッピングを定義します。" -#: sql_help.c:5326 +#: sql_help.c:5377 msgid "define a new view" msgstr "新しいビューを定義します。" -#: sql_help.c:5332 +#: sql_help.c:5383 msgid "deallocate a prepared statement" msgstr "プリペアドステートメントを開放します。" -#: sql_help.c:5338 +#: sql_help.c:5389 msgid "define a cursor" msgstr "カーソルを定義します。" -#: sql_help.c:5344 +#: sql_help.c:5395 msgid "delete rows of a table" msgstr "テーブルの行を削除します。" -#: sql_help.c:5350 +#: sql_help.c:5401 msgid "discard session state" msgstr "セッション状態を破棄します。" -#: sql_help.c:5356 +#: sql_help.c:5407 msgid "execute an anonymous code block" msgstr "無名コードブロックを実行します。" -#: sql_help.c:5362 +#: sql_help.c:5413 msgid "remove an access method" msgstr "アクセスメソッドを削除します。" -#: sql_help.c:5368 +#: sql_help.c:5419 msgid "remove an aggregate function" msgstr "集約関数を削除します。" -#: sql_help.c:5374 +#: sql_help.c:5425 msgid "remove a cast" msgstr "キャストを削除します。" -#: sql_help.c:5380 +#: sql_help.c:5431 msgid "remove a collation" msgstr "照合順序を削除します。" -#: sql_help.c:5386 +#: sql_help.c:5437 msgid "remove a conversion" msgstr "符号化方式変換を削除します。" -#: sql_help.c:5392 +#: sql_help.c:5443 msgid "remove a database" msgstr "データベースを削除します。" -#: sql_help.c:5398 +#: sql_help.c:5449 msgid "remove a domain" msgstr "ドメインを削除します。" -#: sql_help.c:5404 +#: sql_help.c:5455 msgid "remove an event trigger" msgstr "イベントトリガーを削除します。" -#: sql_help.c:5410 +#: sql_help.c:5461 msgid "remove an extension" msgstr "拡張を削除します。" -#: sql_help.c:5416 +#: sql_help.c:5467 msgid "remove a foreign-data wrapper" msgstr "外部データラッパを削除します。" -#: sql_help.c:5422 +#: sql_help.c:5473 msgid "remove a foreign table" msgstr "外部テーブルを削除します。" -#: sql_help.c:5428 +#: sql_help.c:5479 msgid "remove a function" msgstr "関数を削除します。" -#: sql_help.c:5434 sql_help.c:5500 sql_help.c:5602 +#: sql_help.c:5485 sql_help.c:5551 sql_help.c:5653 msgid "remove a database role" msgstr "データベースロールを削除します。" -#: sql_help.c:5440 +#: sql_help.c:5491 msgid "remove an index" msgstr "インデックスを削除します。" -#: sql_help.c:5446 +#: sql_help.c:5497 msgid "remove a procedural language" msgstr "手続き言語を削除します。" -#: sql_help.c:5452 +#: sql_help.c:5503 msgid "remove a materialized view" msgstr "マテリアライズドビューを削除します。" -#: sql_help.c:5458 +#: sql_help.c:5509 msgid "remove an operator" msgstr "演算子を削除します。" -#: sql_help.c:5464 +#: sql_help.c:5515 msgid "remove an operator class" msgstr "演算子クラスを削除します。" -#: sql_help.c:5470 +#: sql_help.c:5521 msgid "remove an operator family" msgstr "演算子族を削除します。" -#: sql_help.c:5476 +#: sql_help.c:5527 msgid "remove database objects owned by a database role" msgstr "データベースロールが所有するデータベースオブジェクトを削除します。" -#: sql_help.c:5482 +#: sql_help.c:5533 msgid "remove a row level security policy from a table" msgstr "テーブルから行レベルのセキュリティポリシーを削除します。" -#: sql_help.c:5488 +#: sql_help.c:5539 msgid "remove a procedure" msgstr "プロシージャを削除します。" -#: sql_help.c:5494 +#: sql_help.c:5545 msgid "remove a publication" msgstr "パブリケーションを削除します。" -#: sql_help.c:5506 +#: sql_help.c:5557 msgid "remove a routine" msgstr "ルーチンを削除します。" -#: sql_help.c:5512 +#: sql_help.c:5563 msgid "remove a rewrite rule" msgstr "書き換えルールを削除します。" -#: sql_help.c:5518 +#: sql_help.c:5569 msgid "remove a schema" msgstr "スキーマを削除します。" -#: sql_help.c:5524 +#: sql_help.c:5575 msgid "remove a sequence" msgstr "シーケンスを削除します。" -#: sql_help.c:5530 +#: sql_help.c:5581 msgid "remove a foreign server descriptor" msgstr "外部サーバ記述子を削除します。" -#: sql_help.c:5536 +#: sql_help.c:5587 msgid "remove extended statistics" msgstr "拡張統計情報を削除します。" -#: sql_help.c:5542 +#: sql_help.c:5593 msgid "remove a subscription" msgstr "サブスクリプションを削除します。" -#: sql_help.c:5548 +#: sql_help.c:5599 msgid "remove a table" msgstr "テーブルを削除します。" -#: sql_help.c:5554 +#: sql_help.c:5605 msgid "remove a tablespace" msgstr "テーブル空間を削除します。" -#: sql_help.c:5560 +#: sql_help.c:5611 msgid "remove a text search configuration" msgstr "テキスト検索設定を削除します。" -#: sql_help.c:5566 +#: sql_help.c:5617 msgid "remove a text search dictionary" msgstr "テキスト検索辞書を削除します。" -#: sql_help.c:5572 +#: sql_help.c:5623 msgid "remove a text search parser" msgstr "テキスト検索パーサを削除します。" -#: sql_help.c:5578 +#: sql_help.c:5629 msgid "remove a text search template" msgstr "テキスト検索テンプレートを削除します。" -#: sql_help.c:5584 +#: sql_help.c:5635 msgid "remove a transform" msgstr "自動変換ルールを削除します。" -#: sql_help.c:5590 +#: sql_help.c:5641 msgid "remove a trigger" msgstr "トリガーを削除します。" -#: sql_help.c:5596 +#: sql_help.c:5647 msgid "remove a data type" msgstr "データ型を削除します。" -#: sql_help.c:5608 +#: sql_help.c:5659 msgid "remove a user mapping for a foreign server" msgstr "外部サーバのユーザマッピングを削除します。" -#: sql_help.c:5614 +#: sql_help.c:5665 msgid "remove a view" msgstr "ビューを削除します。" -#: sql_help.c:5626 +#: sql_help.c:5677 msgid "execute a prepared statement" msgstr "プリペアドステートメントを実行します。" -#: sql_help.c:5632 +#: sql_help.c:5683 msgid "show the execution plan of a statement" msgstr "ステートメントの実行計画を表示します。" -#: sql_help.c:5638 +#: sql_help.c:5689 msgid "retrieve rows from a query using a cursor" msgstr "カーソルを使って問い合わせから行を取り出します。" -#: sql_help.c:5644 +#: sql_help.c:5695 msgid "define access privileges" msgstr "アクセス権限を定義します。" -#: sql_help.c:5650 +#: sql_help.c:5701 msgid "import table definitions from a foreign server" msgstr "外部サーバからテーブル定義をインポートします。" -#: sql_help.c:5656 +#: sql_help.c:5707 msgid "create new rows in a table" msgstr "テーブルに新しい行を作成します。" -#: sql_help.c:5662 +#: sql_help.c:5713 msgid "listen for a notification" msgstr "通知メッセージを監視します。" -#: sql_help.c:5668 +#: sql_help.c:5719 msgid "load a shared library file" msgstr "共有ライブラリファイルをロードします。" -#: sql_help.c:5674 +#: sql_help.c:5725 msgid "lock a table" msgstr "テーブルをロックします。" -#: sql_help.c:5680 +#: sql_help.c:5731 msgid "position a cursor" msgstr "カーソルを位置づけます。" -#: sql_help.c:5686 +#: sql_help.c:5737 msgid "generate a notification" msgstr "通知を生成します。" -#: sql_help.c:5692 +#: sql_help.c:5743 msgid "prepare a statement for execution" msgstr "実行に備えてステートメントを準備します。" -#: sql_help.c:5698 +#: sql_help.c:5749 msgid "prepare the current transaction for two-phase commit" msgstr "二相コミットに備えて現在のトランザクションを準備します。" -#: sql_help.c:5704 +#: sql_help.c:5755 msgid "change the ownership of database objects owned by a database role" -msgstr "" -"データベースロールが所有するデータベースオブジェクトの所有権を変更します。" +msgstr "データベースロールが所有するデータベースオブジェクトの所有権を変更します。" -#: sql_help.c:5710 +#: sql_help.c:5761 msgid "replace the contents of a materialized view" msgstr "マテリアライズドビューの内容を置き換えます。" -#: sql_help.c:5716 +#: sql_help.c:5767 msgid "rebuild indexes" msgstr "インデックスを再構築します。" -#: sql_help.c:5722 +#: sql_help.c:5773 msgid "destroy a previously defined savepoint" msgstr "以前に定義されたセーブポイントを破棄します。" -#: sql_help.c:5728 +#: sql_help.c:5779 msgid "restore the value of a run-time parameter to the default value" msgstr "実行時パラメータの値をデフォルト値に戻します。" -#: sql_help.c:5734 +#: sql_help.c:5785 msgid "remove access privileges" msgstr "アクセス特権を削除します。" -#: sql_help.c:5746 +#: sql_help.c:5797 msgid "cancel a transaction that was earlier prepared for two-phase commit" -msgstr "" -"二相コミットのために事前に準備されたトランザクションをキャンセルします。" +msgstr "二相コミットのために事前に準備されたトランザクションをキャンセルします。" -#: sql_help.c:5752 +#: sql_help.c:5803 msgid "roll back to a savepoint" msgstr "セーブポイントまでロールバックします。" -#: sql_help.c:5758 +#: sql_help.c:5809 msgid "define a new savepoint within the current transaction" msgstr "現在のトランザクション内で新しいセーブポイントを定義します。" -#: sql_help.c:5764 +#: sql_help.c:5815 msgid "define or change a security label applied to an object" msgstr "オブジェクトに適用されるセキュリティラベルを定義または変更します。" -#: sql_help.c:5770 sql_help.c:5824 sql_help.c:5860 +#: sql_help.c:5821 sql_help.c:5875 sql_help.c:5911 msgid "retrieve rows from a table or view" msgstr "テーブルまたはビューから行を取得します。" -#: sql_help.c:5782 +#: sql_help.c:5833 msgid "change a run-time parameter" msgstr "実行時のパラメータを変更します。" -#: sql_help.c:5788 +#: sql_help.c:5839 msgid "set constraint check timing for the current transaction" msgstr "現在のトランザクションについて、制約チェックのタイミングを設定します。" -#: sql_help.c:5794 +#: sql_help.c:5845 msgid "set the current user identifier of the current session" msgstr "現在のセッションの現在のユーザ識別子を設定します。" -#: sql_help.c:5800 -msgid "" -"set the session user identifier and the current user identifier of the " -"current session" -msgstr "" -"セッションのユーザ識別子および現在のセッションの現在のユーザ識別子を設定しま" -"す。" +#: sql_help.c:5851 +msgid "set the session user identifier and the current user identifier of the current session" +msgstr "セッションのユーザ識別子および現在のセッションの現在のユーザ識別子を設定します。" -#: sql_help.c:5806 +#: sql_help.c:5857 msgid "set the characteristics of the current transaction" msgstr "現在のトランザクションの特性を設定します。" -#: sql_help.c:5812 +#: sql_help.c:5863 msgid "show the value of a run-time parameter" msgstr "実行時パラメータの値を表示します。" -#: sql_help.c:5830 +#: sql_help.c:5881 msgid "empty a table or set of tables" msgstr "テーブルもしくはテーブルセットを0件に切り詰めます。" -#: sql_help.c:5836 +#: sql_help.c:5887 msgid "stop listening for a notification" msgstr "通知メッセージの監視を中止します。" -#: sql_help.c:5842 +#: sql_help.c:5893 msgid "update rows of a table" msgstr "テーブルの行を更新します。" -#: sql_help.c:5848 +#: sql_help.c:5899 msgid "garbage-collect and optionally analyze a database" -msgstr "" -"ガーベッジコレクションを行い、また必要に応じてデータベースを分析します。" +msgstr "ガーベッジコレクションを行い、また必要に応じてデータベースを分析します。" -#: sql_help.c:5854 +#: sql_help.c:5905 msgid "compute a set of rows" msgstr "行セットを計算します。" -#: startup.c:216 +#: startup.c:212 #, c-format -#| msgid "%s: -1 can only be used in non-interactive mode\n" msgid "-1 can only be used in non-interactive mode" msgstr "-1 は非対話モード時でのみ使用可能です" -#: startup.c:303 +#: startup.c:299 #, c-format msgid "could not connect to server: %s" msgstr "サーバに接続できませんでした: %s" -#: startup.c:331 +#: startup.c:327 #, c-format msgid "could not open log file \"%s\": %m" msgstr "ロックファイル\"%s\"をオープンできませんでした: %m" -#: startup.c:442 +#: startup.c:439 #, c-format msgid "" "Type \"help\" for help.\n" @@ -6605,9 +6360,8 @@ msgstr "" "\"help\"でヘルプを表示します。\n" "\n" -#: startup.c:592 +#: startup.c:589 #, c-format -#| msgid "%s: could not set printing parameter \"%s\"\n" msgid "could not set printing parameter \"%s\"" msgstr "表示パラメータ\"%s\"を設定できませんでした" @@ -6618,22 +6372,16 @@ msgstr "詳細は\"%s --help\"をごらんください。\n" #: startup.c:714 #, c-format -#| msgid "%s: warning: extra command-line argument \"%s\" ignored\n" msgid "extra command-line argument \"%s\" ignored" msgstr "余分なコマンドライン引数\"%s\"は無視されました" #: startup.c:763 #, c-format -#| msgid "%s: could not find own program executable\n" msgid "could not find own program executable" msgstr "実行可能ファイルが見つかりませんでした" -#: tab-complete.c:4380 +#: tab-complete.c:4672 #, c-format -#| msgid "" -#| "tab completion query failed: %s\n" -#| "Query was:\n" -#| "%s\n" msgid "" "tab completion query failed: %s\n" "Query was:\n" @@ -6643,29 +6391,23 @@ msgstr "" "問い合わせ:\n" "%s" -#: variables.c:141 +#: variables.c:139 #, c-format -#| msgid "unrecognized value \"%s\" for \"%s\": Boolean expected\n" msgid "unrecognized value \"%s\" for \"%s\": Boolean expected" msgstr "\"%2$s\"の値\"%1$s\"が認識できません: 真偽値を指定してください" -#: variables.c:178 +#: variables.c:176 #, c-format -#| msgid "invalid value \"%s\" for \"%s\": integer expected\n" msgid "invalid value \"%s\" for \"%s\": integer expected" msgstr "\"%2$s\"の値\"%1$s\"が不正です: 整数を指定してください" -#: variables.c:226 +#: variables.c:224 #, c-format -#| msgid "invalid variable name: \"%s\"\n" msgid "invalid variable name: \"%s\"" msgstr "変数名が不正です: \"%s\"" -#: variables.c:395 +#: variables.c:393 #, c-format -#| msgid "" -#| "unrecognized value \"%s\" for \"%s\"\n" -#| "Available values are: %s.\n" msgid "" "unrecognized value \"%s\" for \"%s\"\n" "Available values are: %s." @@ -6673,71 +6415,83 @@ msgstr "" "\"%2$s\"の値\"%1$s\"が認識できません。\n" "有効な値は %3$s。" -#~ msgid "Procedure" -#~ msgstr "プロシージャー名" +#~ msgid "could not identify current directory: %s" +#~ msgstr "カレントディレクトリを特定できませんでした: %s" -#~ msgid "normal" -#~ msgstr "通常" +#~ msgid "could not change directory to \"%s\": %s" +#~ msgstr "ディレクトリ\"%s\"に移動できませんでした: %s" -#~ msgid " SERVER_VERSION_NAME server's version (short string)\n" -#~ msgstr " SERVER_VERSION_NAME サーバのバージョン名 (短い文字列)\n" +#~ msgid "could not read symbolic link \"%s\"" +#~ msgstr "シンボリックリンク\"%s\"を読み取ることができませんでした" -#~ msgid " VERSION psql's version (verbose string)\n" -#~ msgstr " VERSION psql のバージョン (詳細な文字列)\n" +#~ msgid "pclose failed: %s" +#~ msgstr "pcloseが失敗しました: %s" -#~ msgid " VERSION_NAME psql's version (short string)\n" -#~ msgstr " VERSION_NAME psql のバージョン (短い文字列)\n" +#~ msgid "child process was terminated by signal %s" +#~ msgstr "子プロセスがシグナル %s で強制終了しました" -#~ msgid " VERSION_NUM psql's version (numeric format)\n" -#~ msgstr " VERSION_NUM psql のバージョン (数値フォーマット)\n" +#~ msgid "child process was terminated by signal %d" +#~ msgstr "子プロセスがシグナル %d で強制終了しました" -#~ msgid "attribute" -#~ msgstr "属性" +#~ msgid "Invalid command \\%s. Try \\? for help.\n" +#~ msgstr "\\%s は無効なコマンドです。\\? でヘルプを参照してください。\n" -#~ msgid "%s: could not open log file \"%s\": %s\n" -#~ msgstr "%s: ログファイル\"%s\"を開くことができませんでした: %s\n" +#~ msgid "%s: %s\n" +#~ msgstr "%s: %s\n" -#~ msgid "string_literal" -#~ msgstr "文字列定数" +#~ msgid "could not open temporary file \"%s\": %s\n" +#~ msgstr "一時ファイル\"%s\"を開けませんでした: %s\n" -#~ msgid "unterminated quoted string\n" -#~ msgstr "文字列の引用符が閉じていません。\n" +#~ msgid "could not execute command \"%s\": %s\n" +#~ msgstr "コマンド\"%s\"を実行できませんでした: %s\n" -#~ msgid "%s\n" -#~ msgstr "%s\n" +#~ msgid "could not stat file \"%s\": %s\n" +#~ msgstr "ファイル\"%s\"をstatできませんでした: %s\n" #~ msgid "could not close pipe to external command: %s\n" #~ msgstr "外部コマンドへのパイプを閉じることができませんでした: %s\n" -#~ msgid "could not stat file \"%s\": %s\n" -#~ msgstr "ファイル\"%s\"をstatできませんでした: %s\n" +#~ msgid "%s\n" +#~ msgstr "%s\n" -#~ msgid "could not execute command \"%s\": %s\n" -#~ msgstr "コマンド\"%s\"を実行できませんでした: %s\n" +#~ msgid "unterminated quoted string\n" +#~ msgstr "文字列の引用符が閉じていません。\n" -#~ msgid "could not open temporary file \"%s\": %s\n" -#~ msgstr "一時ファイル\"%s\"を開けませんでした: %s\n" +#~ msgid "string_literal" +#~ msgstr "文字列定数" -#~ msgid "%s: %s\n" -#~ msgstr "%s: %s\n" +#~ msgid "%s: could not open log file \"%s\": %s\n" +#~ msgstr "%s: ログファイル\"%s\"を開くことができませんでした: %s\n" -#~ msgid "Invalid command \\%s. Try \\? for help.\n" -#~ msgstr "\\%s は無効なコマンドです。\\? でヘルプを参照してください。\n" +#~ msgid "attribute" +#~ msgstr "属性" -#~ msgid "child process was terminated by signal %d" -#~ msgstr "子プロセスがシグナル %d で強制終了しました" +#~ msgid " VERSION_NUM psql's version (numeric format)\n" +#~ msgstr " VERSION_NUM psql のバージョン (数値フォーマット)\n" -#~ msgid "child process was terminated by signal %s" -#~ msgstr "子プロセスがシグナル %s で強制終了しました" +#~ msgid " VERSION_NAME psql's version (short string)\n" +#~ msgstr " VERSION_NAME psql のバージョン (短い文字列)\n" -#~ msgid "pclose failed: %s" -#~ msgstr "pcloseが失敗しました: %s" +#~ msgid " VERSION psql's version (verbose string)\n" +#~ msgstr " VERSION psql のバージョン (詳細な文字列)\n" -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "シンボリックリンク\"%s\"を読み取ることができませんでした" +#~ msgid " SERVER_VERSION_NAME server's version (short string)\n" +#~ msgstr " SERVER_VERSION_NAME サーバのバージョン名 (短い文字列)\n" -#~ msgid "could not change directory to \"%s\": %s" -#~ msgstr "ディレクトリ\"%s\"に移動できませんでした: %s" +#~ msgid "normal" +#~ msgstr "通常" -#~ msgid "could not identify current directory: %s" -#~ msgstr "カレントディレクトリを特定できませんでした: %s" +#~ msgid "Procedure" +#~ msgstr "プロシージャー名" + +#~ msgid "from_list" +#~ msgstr "FROMリスト" + +#~ msgid "using_list" +#~ msgstr "USINGリスト" + +#~ msgid "old_version" +#~ msgstr "旧バージョン" + +#~ msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" +#~ msgstr " \\g [ファイル] または ; 問い合わせを実行(し、結果をファイルまたは |パイプ へ出力)します。\n" diff --git a/src/bin/psql/po/ko.po b/src/bin/psql/po/ko.po index 65cdf5283e481..3d3da974b68c9 100644 --- a/src/bin/psql/po/ko.po +++ b/src/bin/psql/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: psql (PostgreSQL) 12\n" +"Project-Id-Version: psql (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:13+0000\n" -"PO-Revision-Date: 2019-11-28 15:17+0900\n" +"POT-Creation-Date: 2020-10-12 22:13+0000\n" +"PO-Revision-Date: 2020-10-27 14:28+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean \n" "Language: ko\n" @@ -15,69 +15,69 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "심각: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "오류: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "경고: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "현재 디렉터리가 무엇인지 모르겠음: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "잘못된 바이너리 파일: \"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "\"%s\" 바이너리 파일을 읽을 수 없음" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "실행할 \"%s\" 파일 찾을 수 없음" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "\"%s\" 이름의 디렉터리로 이동할 수 없습니다: %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "\"%s\" 심볼릭 링크 파일을 읽을 수 없음: %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "pclose 실패: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 -#: command.c:1218 input.c:228 mainloop.c:82 mainloop.c:386 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: command.c:1255 input.c:227 mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" msgstr "메모리 부족" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "메모리 부족\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "null 포인터를 복제할 수 없음(내부 오류)\n" @@ -87,7 +87,7 @@ msgstr "null 포인터를 복제할 수 없음(내부 오류)\n" msgid "could not look up effective user ID %ld: %s" msgstr "UID %ld 해당하는 사용자를 찾을 수 없음: %s" -#: ../../common/username.c:45 command.c:555 +#: ../../common/username.c:45 command.c:559 msgid "user does not exist" msgstr "사용자 없음" @@ -126,75 +126,88 @@ msgstr "하위 프로세스가 %d 신호를 받고 종료되었음: %s" msgid "child process exited with unrecognized status %d" msgstr "하위 프로세스가 알 수 없는 상태(%d)로 종료되었음" -#: ../../fe_utils/print.c:353 +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "취소 요청 보냄\n" + +#: ../../fe_utils/cancel.c:165 +msgid "Could not send cancel request: " +msgstr "취소 요청 보내기 실패: " + +#: ../../fe_utils/cancel.c:210 +#, c-format +msgid "Could not send cancel request: %s" +msgstr "취소 요청 보내기 실패: %s" + +#: ../../fe_utils/print.c:350 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu개 행)" -#: ../../fe_utils/print.c:3058 +#: ../../fe_utils/print.c:3055 #, c-format msgid "Interrupted\n" msgstr "인트럽트발생\n" -#: ../../fe_utils/print.c:3122 +#: ../../fe_utils/print.c:3119 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "테이블 내용에 헤더를 추가할 수 없음: 열 수가 %d개를 초과했습니다.\n" -#: ../../fe_utils/print.c:3162 +#: ../../fe_utils/print.c:3159 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "테이블 내용에 셀을 추가할 수 없음: 총 셀 수가 %d개를 초과했습니다.\n" -#: ../../fe_utils/print.c:3417 +#: ../../fe_utils/print.c:3414 #, c-format msgid "invalid output format (internal error): %d" msgstr "잘못된 출력 형식 (내부 오류): %d" -#: ../../fe_utils/psqlscan.l:729 +#: ../../fe_utils/psqlscan.l:694 #, c-format msgid "skipping recursive expansion of variable \"%s\"" msgstr "\"%s\" 변수의 재귀적 확장을 건너뛰는 중" -#: command.c:221 +#: command.c:224 #, c-format msgid "invalid command \\%s" msgstr "잘못된 명령: \\%s" -#: command.c:223 +#: command.c:226 #, c-format msgid "Try \\? for help." msgstr "도움말을 보려면 \\?를 입력하십시오." -#: command.c:241 +#: command.c:244 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: \"%s\" 추가 인자가 무시되었음" -#: command.c:293 +#: command.c:296 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "" "\\%s 명령은 무시함; 현재 \\if 블록을 중지하려면, \\endif 명령이나 Ctrl-C 키" "를 사용하세요." -#: command.c:553 +#: command.c:557 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "UID %ld 사용자의 홈 디렉터리를 찾을 수 없음: %s" -#: command.c:571 +#: command.c:575 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: \"%s\" 디렉터리로 이동할 수 없음: %m" -#: command.c:596 +#: command.c:600 #, c-format msgid "You are currently not connected to a database.\n" msgstr "현재 데이터베이스에 연결되어있지 않습니다.\n" -#: command.c:609 +#: command.c:613 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at " @@ -202,7 +215,7 @@ msgid "" msgstr "" "접속정보: 데이터베이스=\"%s\", 사용자=\"%s\", 주소=\"%s\", 포트=\"%s\".\n" -#: command.c:612 +#: command.c:616 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at " @@ -210,7 +223,7 @@ msgid "" msgstr "" "접속정보: 데이터베이스=\"%s\", 사용자=\"%s\", 소켓=\"%s\", 포트=\"%s\".\n" -#: command.c:618 +#: command.c:622 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address " @@ -219,7 +232,7 @@ msgstr "" "접속정보: 데이터베이스=\"%s\", 사용자=\"%s\", 호스트=\"%s\" (주소=\"%s\"), 포" "트=\"%s\".\n" -#: command.c:621 +#: command.c:625 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port " @@ -227,177 +240,182 @@ msgid "" msgstr "" "접속정보: 데이터베이스=\"%s\", 사용자=\"%s\", 호스트=\"%s\", 포트=\"%s\".\n" -#: command.c:930 command.c:1026 command.c:2411 +#: command.c:965 command.c:1061 command.c:2550 #, c-format msgid "no query buffer" msgstr "쿼리 버퍼가 없음" -#: command.c:963 command.c:4832 +#: command.c:998 command.c:5061 #, c-format msgid "invalid line number: %s" msgstr "잘못된 줄 번호: %s" -#: command.c:1017 +#: command.c:1052 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "이 서버(%s 버전)는 함수 소스 편집 기능을 제공하지 않습니다." -#: command.c:1020 +#: command.c:1055 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "이 서버(%s 버전)는 뷰 정의 편집 기능을 제공하지 않습니다." -#: command.c:1102 +#: command.c:1137 msgid "No changes" msgstr "변경 내용 없음" -#: command.c:1179 +#: command.c:1216 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "%s: 잘못된 인코딩 이름 또는 문자셋 변환 프로시저 없음" -#: command.c:1214 command.c:1853 command.c:3109 command.c:4934 common.c:175 -#: common.c:224 common.c:535 common.c:1376 common.c:1404 common.c:1512 -#: common.c:1615 common.c:1653 copy.c:490 copy.c:709 help.c:63 large_obj.c:157 +#: command.c:1251 command.c:1992 command.c:3253 command.c:5163 common.c:174 +#: common.c:223 common.c:388 common.c:1237 common.c:1265 common.c:1373 +#: common.c:1480 common.c:1518 copy.c:488 copy.c:707 help.c:62 large_obj.c:157 #: large_obj.c:192 large_obj.c:254 #, c-format msgid "%s" msgstr "%s" -#: command.c:1221 +#: command.c:1258 msgid "There is no previous error." msgstr "이전 오류가 없습니다." -#: command.c:1409 command.c:1714 command.c:1728 command.c:1745 command.c:1905 -#: command.c:2142 command.c:2378 command.c:2418 +#: command.c:1371 +#, c-format +msgid "\\%s: missing right parenthesis" +msgstr "\\%s: 오른쪽 괄호 빠졌음" + +#: command.c:1548 command.c:1853 command.c:1867 command.c:1884 command.c:2044 +#: command.c:2281 command.c:2517 command.c:2557 #, c-format msgid "\\%s: missing required argument" msgstr "\\%s: 필요한 인자가 빠졌음" -#: command.c:1540 +#: command.c:1679 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif: \\else 구문 뒤에 올 수 없음" -#: command.c:1545 +#: command.c:1684 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif: \\if 명령과 짝이 안맞음" -#: command.c:1609 +#: command.c:1748 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else: \\else 명령 뒤에 올 수 없음" -#: command.c:1614 +#: command.c:1753 #, c-format msgid "\\else: no matching \\if" msgstr "\\else: \\if 명령과 짝이 안맞음" -#: command.c:1654 +#: command.c:1793 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif: \\if 명령과 짝이 안맞음" -#: command.c:1809 +#: command.c:1948 msgid "Query buffer is empty." msgstr "쿼리 버퍼가 비었음." -#: command.c:1831 +#: command.c:1970 msgid "Enter new password: " msgstr "새 암호를 입력하세요:" -#: command.c:1832 +#: command.c:1971 msgid "Enter it again: " msgstr "다시 입력해 주세요:" -#: command.c:1836 +#: command.c:1975 #, c-format msgid "Passwords didn't match." msgstr "암호가 서로 틀립니다." -#: command.c:1935 +#: command.c:2074 #, c-format msgid "\\%s: could not read value for variable" msgstr "\\%s: 변수 값을 읽을 수 없음" -#: command.c:2038 +#: command.c:2177 msgid "Query buffer reset (cleared)." msgstr "쿼리 버퍼 초기화 (비웠음)." -#: command.c:2060 +#: command.c:2199 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "명령내역(history)을 \"%s\" 파일에 기록했습니다.\n" -#: command.c:2147 +#: command.c:2286 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s: OS 환경 변수 이름에는 \"=\" 문자가 없어야 함" -#: command.c:2208 +#: command.c:2347 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "이 서버(%s 버전)는 함수 소스 보기 기능을 제공하지 않습니다." -#: command.c:2211 +#: command.c:2350 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "이 서버(%s 버전)는 뷰 정의 보기 기능을 제공하지 않습니다." -#: command.c:2218 +#: command.c:2357 #, c-format msgid "function name is required" msgstr "함수 이름이 필요함" -#: command.c:2220 +#: command.c:2359 #, c-format msgid "view name is required" msgstr "뷰 이름이 필요함" -#: command.c:2350 +#: command.c:2489 msgid "Timing is on." msgstr "작업수행시간 보임" -#: command.c:2352 +#: command.c:2491 msgid "Timing is off." msgstr "작업수행시간 숨김" -#: command.c:2437 command.c:2465 command.c:3516 command.c:3519 command.c:3522 -#: command.c:3528 command.c:3530 command.c:3538 command.c:3548 command.c:3557 -#: command.c:3571 command.c:3588 command.c:3646 common.c:71 copy.c:333 -#: copy.c:405 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 +#: command.c:2576 command.c:2604 command.c:3661 command.c:3664 command.c:3667 +#: command.c:3673 command.c:3675 command.c:3683 command.c:3693 command.c:3702 +#: command.c:3716 command.c:3733 command.c:3791 common.c:70 copy.c:331 +#: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s: %m" -#: command.c:2849 startup.c:240 startup.c:291 +#: command.c:2988 startup.c:236 startup.c:287 msgid "Password: " msgstr "암호: " -#: command.c:2854 startup.c:288 +#: command.c:2993 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "%s 사용자의 암호: " -#: command.c:2925 +#: command.c:3064 #, c-format msgid "" "All connection parameters must be supplied because no database connection " "exists" msgstr "현재 접속 정보가 없습니다. 접속을 위한 연결 관련 매개변수를 지정하세요" -#: command.c:3113 +#: command.c:3257 #, c-format msgid "Previous connection kept" msgstr "이전 연결이 유지되었음" -#: command.c:3117 +#: command.c:3261 #, c-format msgid "\\connect: %s" msgstr "\\연결: %s" -#: command.c:3166 +#: command.c:3310 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at " @@ -405,7 +423,7 @@ msgid "" msgstr "" "접속정보: 데이터베이스=\"%s\", 사용자=\"%s\", 주소=\"%s\", 포트=\"%s\".\n" -#: command.c:3169 +#: command.c:3313 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" " @@ -413,7 +431,7 @@ msgid "" msgstr "" "접속정보: 데이터베이스=\"%s\", 사용자=\"%s\", 소켓=\"%s\", 포트=\"%s\".\n" -#: command.c:3175 +#: command.c:3319 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" on host \"%s" @@ -422,7 +440,7 @@ msgstr "" "접속정보: 데이터베이스=\"%s\", 사용자=\"%s\", 호스트=\"%s\" (주소 \"%s\"), 포" "트=\"%s\".\n" -#: command.c:3178 +#: command.c:3322 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at " @@ -430,17 +448,17 @@ msgid "" msgstr "" "접속정보: 데이터베이스=\"%s\", 사용자=\"%s\", 호스트=\"%s\", 포트=\"%s\".\n" -#: command.c:3183 +#: command.c:3327 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "접속정보: 데이터베이스=\"%s\", 사용자=\"%s\".\n" -#: command.c:3216 +#: command.c:3360 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s(%s, %s 서버)\n" -#: command.c:3224 +#: command.c:3368 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" @@ -449,29 +467,29 @@ msgstr "" "경고: %s 메이저 버전 %s, 서버 메이저 버전 %s.\n" " 일부 psql 기능이 작동하지 않을 수도 있습니다.\n" -#: command.c:3263 +#: command.c:3407 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "SSL 연결정보 (프로토콜: %s, 암호화기법: %s, 비트: %s, 압축: %s)\n" -#: command.c:3264 command.c:3265 command.c:3266 +#: command.c:3408 command.c:3409 command.c:3410 msgid "unknown" msgstr "알수없음" -#: command.c:3267 help.c:46 +#: command.c:3411 help.c:45 msgid "off" msgstr "off" -#: command.c:3267 help.c:46 +#: command.c:3411 help.c:45 msgid "on" msgstr "on" -#: command.c:3281 +#: command.c:3425 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "암호화된 GSSAPI 연결\n" -#: command.c:3301 +#: command.c:3445 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -483,7 +501,7 @@ msgstr "" "참조\n" " 페이지 \"Notes for Windows users\"를 참조하십시오.\n" -#: command.c:3405 +#: command.c:3549 #, c-format msgid "" "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a " @@ -492,32 +510,32 @@ msgstr "" "지정한 줄번호를 사용하기 위해서는 PSQL_EDITOR_LINENUMBER_ARG 이름의 OS 환경변" "수가 설정되어 있어야 합니다." -#: command.c:3434 +#: command.c:3578 #, c-format msgid "could not start editor \"%s\"" msgstr "\"%s\" 문서 편집기를 실행시킬 수 없음" -#: command.c:3436 +#: command.c:3580 #, c-format msgid "could not start /bin/sh" msgstr "/bin/sh 명령을 실행할 수 없음" -#: command.c:3474 +#: command.c:3618 #, c-format msgid "could not locate temporary directory: %s" msgstr "임시 디렉터리 경로를 알 수 없음: %s" -#: command.c:3501 +#: command.c:3645 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "\"%s\" 임시 파일을 열 수 없음: %m" -#: command.c:3794 +#: command.c:3950 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: \"%s\" 생략형이 \"%s\" 또는 \"%s\" 값 모두 선택가능해서 모호함" -#: command.c:3814 +#: command.c:3970 #, c-format msgid "" "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-" @@ -526,32 +544,32 @@ msgstr "" "\\pset: 허용되는 출력 형식: aligned, asciidoc, csv, html, latex, latex-" "longtable, troff-ms, unaligned, wrapped" -#: command.c:3833 +#: command.c:3989 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: 사용할 수 있는 선 모양은 ascii, old-ascii, unicode" -#: command.c:3848 +#: command.c:4004 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: 사용할 수 있는 유니코드 테두리 모양은 single, double" -#: command.c:3863 +#: command.c:4019 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: 사용할 수 있는 유니코드 칼럼 선 모양은 single, double" -#: command.c:3878 +#: command.c:4034 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: 사용할 수 있는 유니코드 헤더 선 모양은 single, double" -#: command.c:3921 +#: command.c:4077 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsep 문자는 1바이트의 단일 문자여야 함" -#: command.c:3926 +#: command.c:4082 #, c-format msgid "" "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage " @@ -559,193 +577,193 @@ msgid "" msgstr "" "\\pset: csv_fieldsep 문자로 따옴표, 줄바꿈(\\n, \\r) 문자는 사용할 수 없음" -#: command.c:4063 command.c:4249 +#: command.c:4219 command.c:4407 #, c-format msgid "\\pset: unknown option: %s" msgstr "\\pset: 알 수 없는 옵션: %s" -#: command.c:4081 +#: command.c:4239 #, c-format msgid "Border style is %d.\n" msgstr "html 테이블의 테두리를 %d로 지정했습니다.\n" -#: command.c:4087 +#: command.c:4245 #, c-format msgid "Target width is unset.\n" msgstr "대상 너비 미지정.\n" -#: command.c:4089 +#: command.c:4247 #, c-format msgid "Target width is %d.\n" msgstr "대상 너비는 %d입니다.\n" -#: command.c:4096 +#: command.c:4254 #, c-format msgid "Expanded display is on.\n" msgstr "칼럼 단위 보기 기능 켬.\n" -#: command.c:4098 +#: command.c:4256 #, c-format msgid "Expanded display is used automatically.\n" msgstr "칼럼 단위 보기 기능을 자동으로 지정 함.\n" -#: command.c:4100 +#: command.c:4258 #, c-format msgid "Expanded display is off.\n" msgstr "칼럼 단위 보기 기능 끔.\n" -#: command.c:4106 +#: command.c:4264 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "CSV용 필드 구분자: \"%s\".\n" -#: command.c:4114 command.c:4122 +#: command.c:4272 command.c:4280 #, c-format msgid "Field separator is zero byte.\n" msgstr "필드 구분자가 0 바이트입니다.\n" -#: command.c:4116 +#: command.c:4274 #, c-format msgid "Field separator is \"%s\".\n" msgstr "필드 구분자 \"%s\".\n" -#: command.c:4129 +#: command.c:4287 #, c-format msgid "Default footer is on.\n" msgstr "기본 꼬릿말 보기 기능 켬.\n" -#: command.c:4131 +#: command.c:4289 #, c-format msgid "Default footer is off.\n" msgstr "기본 꼬릿말 보기 기능 끔.\n" -#: command.c:4137 +#: command.c:4295 #, c-format msgid "Output format is %s.\n" msgstr "현재 출력 형식: %s.\n" -#: command.c:4143 +#: command.c:4301 #, c-format msgid "Line style is %s.\n" msgstr "선 모양: %s.\n" -#: command.c:4150 +#: command.c:4308 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null 값은 \"%s\" 문자로 보여짐.\n" -#: command.c:4158 +#: command.c:4316 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "로케일 맞춤 숫자 표기 기능 켬.\n" -#: command.c:4160 +#: command.c:4318 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "로케일 맞춤 숫자 표기 기능 끔.\n" -#: command.c:4167 +#: command.c:4325 #, c-format msgid "Pager is used for long output.\n" msgstr "긴 출력을 위해 페이저가 사용됨.\n" -#: command.c:4169 +#: command.c:4327 #, c-format msgid "Pager is always used.\n" msgstr "항상 페이저가 사용됨.\n" -#: command.c:4171 +#: command.c:4329 #, c-format msgid "Pager usage is off.\n" msgstr "화면단위 보기 기능 끔(전체 자료 모두 보여줌).\n" -#: command.c:4177 +#: command.c:4335 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" msgstr[0] "%d 줄보다 적은 경우는 페이지 단위 보기가 사용되지 않음\n" -#: command.c:4187 command.c:4197 +#: command.c:4345 command.c:4355 #, c-format msgid "Record separator is zero byte.\n" msgstr "레코드 구분자가 0 바이트임.\n" -#: command.c:4189 +#: command.c:4347 #, c-format msgid "Record separator is .\n" msgstr "레코드 구분자는 줄바꿈 문자입니다.\n" -#: command.c:4191 +#: command.c:4349 #, c-format msgid "Record separator is \"%s\".\n" msgstr "레코드 구분자 \"%s\".\n" -#: command.c:4204 +#: command.c:4362 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "테이블 속성: \"%s\".\n" -#: command.c:4207 +#: command.c:4365 #, c-format msgid "Table attributes unset.\n" msgstr "테이블 속성 모두 지움.\n" -#: command.c:4214 +#: command.c:4372 #, c-format msgid "Title is \"%s\".\n" msgstr "출력 테이블의 제목: \"%s\"\n" -#: command.c:4216 +#: command.c:4374 #, c-format msgid "Title is unset.\n" msgstr "출력 테이블의 제목을 지정하지 않았습니다.\n" -#: command.c:4223 +#: command.c:4381 #, c-format msgid "Tuples only is on.\n" msgstr "자료만 보기 기능 켬.\n" -#: command.c:4225 +#: command.c:4383 #, c-format msgid "Tuples only is off.\n" msgstr "자료만 보기 기능 끔.\n" -#: command.c:4231 +#: command.c:4389 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "유니코드 테두리 선문자: \"%s\".\n" -#: command.c:4237 +#: command.c:4395 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "유니코드 칼럼 선문자: \"%s\".\n" -#: command.c:4243 +#: command.c:4401 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "유니코드 헤더 선문자: \"%s\".\n" -#: command.c:4405 +#: command.c:4634 #, c-format msgid "\\!: failed" msgstr "\\!: 실패" -#: command.c:4430 common.c:795 +#: command.c:4659 common.c:648 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch 명령으로 수행할 쿼리가 없습니다." -#: command.c:4471 +#: command.c:4700 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (%g초 간격)\n" -#: command.c:4474 +#: command.c:4703 #, c-format msgid "%s (every %gs)\n" msgstr "%s (%g초 간격)\n" -#: command.c:4528 command.c:4535 common.c:695 common.c:702 common.c:1359 +#: command.c:4757 command.c:4764 common.c:548 common.c:555 common.c:1220 #, c-format msgid "" "********* QUERY **********\n" @@ -758,110 +776,115 @@ msgstr "" "**************************\n" "\n" -#: command.c:4727 +#: command.c:4956 #, c-format msgid "\"%s.%s\" is not a view" msgstr "\"%s.%s\" 뷰(view)가 아님" -#: command.c:4743 +#: command.c:4972 #, c-format msgid "could not parse reloptions array" msgstr "reloptions 배열을 분석할 수 없음" -#: common.c:160 +#: common.c:159 #, c-format msgid "cannot escape without active connection" msgstr "현재 접속한 연결 없이는 특수문자처리를 할 수 없음" -#: common.c:201 +#: common.c:200 #, c-format msgid "shell command argument contains a newline or carriage return: \"%s\"" msgstr "쉘 명령의 인자에 줄바꿈 문자가 있음: \"%s\"" -#: common.c:395 +#: common.c:304 #, c-format msgid "connection to server was lost" msgstr "서버 접속 끊김" -#: common.c:399 +#: common.c:308 #, c-format msgid "The connection to the server was lost. Attempting reset: " msgstr "서버로부터 연결이 끊어졌습니다. 다시 연결을 시도합니다: " -#: common.c:404 +#: common.c:313 #, c-format msgid "Failed.\n" msgstr "실패.\n" -#: common.c:417 +#: common.c:326 #, c-format msgid "Succeeded.\n" msgstr "성공.\n" -#: common.c:525 common.c:1077 common.c:1294 +#: common.c:378 common.c:938 common.c:1155 #, c-format msgid "unexpected PQresultStatus: %d" msgstr "PQresultStatus 반환값이 잘못됨: %d" -#: common.c:634 +#: common.c:487 #, c-format msgid "Time: %.3f ms\n" msgstr "작업시간: %.3f ms\n" -#: common.c:649 +#: common.c:502 #, c-format msgid "Time: %.3f ms (%02d:%06.3f)\n" msgstr "작업시간: %.3f ms (%02d:%06.3f)\n" -#: common.c:658 +#: common.c:511 #, c-format msgid "Time: %.3f ms (%02d:%02d:%06.3f)\n" msgstr "작업시간: %.3f ms (%02d:%02d:%06.3f)\n" -#: common.c:665 +#: common.c:518 #, c-format msgid "Time: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" msgstr "작업시간: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" -#: common.c:689 common.c:747 common.c:1330 +#: common.c:542 common.c:600 common.c:1191 #, c-format msgid "You are currently not connected to a database." msgstr "현재 데이터베이스에 연결되어있지 않습니다." -#: common.c:802 +#: common.c:655 #, c-format msgid "\\watch cannot be used with COPY" msgstr "\\watch 작업으로 COPY 명령은 사용할 수 없음" -#: common.c:807 +#: common.c:660 #, c-format msgid "unexpected result status for \\watch" msgstr "\\watch 쿼리 결과가 비정상적입니다." -#: common.c:837 +#: common.c:690 #, c-format msgid "" "Asynchronous notification \"%s\" with payload \"%s\" received from server " "process with PID %d.\n" msgstr "\"%s\" 비동기 통지를 받음, 부가정보: \"%s\", 보낸 프로세스: %d.\n" -#: common.c:840 +#: common.c:693 #, c-format msgid "" "Asynchronous notification \"%s\" received from server process with PID %d.\n" msgstr "동기화 신호 \"%s\" 받음, 해당 서버 프로세스 PID %d.\n" -#: common.c:903 +#: common.c:726 common.c:743 +#, c-format +msgid "could not print result table: %m" +msgstr "결과 테이블을 출력할 수 없음: %m" + +#: common.c:764 #, c-format msgid "no rows returned for \\gset" msgstr "\\gset 해당 자료 없음" -#: common.c:908 +#: common.c:769 #, c-format msgid "more than one row returned for \\gset" msgstr "\\gset 실행 결과가 단일 자료가 아님" -#: common.c:1339 +#: common.c:1200 #, c-format msgid "" "***(Single step mode: verify " @@ -874,94 +897,94 @@ msgstr "" "%s\n" "***(Enter: 계속 진행, x Enter: 중지)********************\n" -#: common.c:1394 +#: common.c:1255 #, c-format msgid "" "The server (version %s) does not support savepoints for ON_ERROR_ROLLBACK." msgstr "" "서버(%s 버전)에서 ON_ERROR_ROLLBACK에 사용할 savepoint를 지원하지 않습니다." -#: common.c:1457 +#: common.c:1318 #, c-format msgid "STATEMENT: %s" msgstr "명령구문: %s" -#: common.c:1500 +#: common.c:1361 #, c-format msgid "unexpected transaction status (%d)" msgstr "알 수 없는 트랜잭션 상태 (%d)" -#: common.c:1637 describe.c:2002 +#: common.c:1502 describe.c:2001 msgid "Column" msgstr "필드명" -#: common.c:1638 describe.c:179 describe.c:394 describe.c:412 describe.c:457 -#: describe.c:474 describe.c:963 describe.c:1127 describe.c:1712 -#: describe.c:1736 describe.c:2003 describe.c:3674 describe.c:3859 -#: describe.c:4092 describe.c:5298 +#: common.c:1503 describe.c:177 describe.c:393 describe.c:411 describe.c:456 +#: describe.c:473 describe.c:962 describe.c:1126 describe.c:1711 +#: describe.c:1735 describe.c:2002 describe.c:3729 describe.c:3939 +#: describe.c:4172 describe.c:5378 msgid "Type" msgstr "종류" -#: common.c:1687 +#: common.c:1552 #, c-format msgid "The command has no result, or the result has no columns.\n" msgstr "해당 명령 결과가 없거나, 그 결과에는 칼럼이 없습니다.\n" -#: copy.c:100 +#: copy.c:98 #, c-format msgid "\\copy: arguments required" msgstr "\\copy: 인자가 필요함" -#: copy.c:255 +#: copy.c:253 #, c-format msgid "\\copy: parse error at \"%s\"" msgstr "\\copy: 구문 오류: \"%s\"" -#: copy.c:257 +#: copy.c:255 #, c-format msgid "\\copy: parse error at end of line" msgstr "\\copy: 줄 끝에 구문 오류" -#: copy.c:330 +#: copy.c:328 #, c-format msgid "could not execute command \"%s\": %m" msgstr "\"%s\" 명령을 실행할 수 없음: %m" -#: copy.c:346 +#: copy.c:344 #, c-format msgid "could not stat file \"%s\": %m" msgstr "\"%s\" 파일의 상태값을 알 수 없음: %m" -#: copy.c:350 +#: copy.c:348 #, c-format msgid "%s: cannot copy from/to a directory" msgstr "%s: 디렉터리부터 또는 디렉터리로 복사할 수 없음" -#: copy.c:387 +#: copy.c:385 #, c-format msgid "could not close pipe to external command: %m" msgstr "외부 명령으로 파이프를 닫을 수 없음: %m" -#: copy.c:392 +#: copy.c:390 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: copy.c:455 copy.c:465 +#: copy.c:453 copy.c:463 #, c-format msgid "could not write COPY data: %m" msgstr "COPY 자료를 기록할 수 없음: %m" -#: copy.c:471 +#: copy.c:469 #, c-format msgid "COPY data transfer failed: %s" msgstr "COPY 자료 변환 실패: %s" -#: copy.c:532 +#: copy.c:530 msgid "canceled by user" msgstr "사용자에 의해서 취소됨" -#: copy.c:543 +#: copy.c:541 msgid "" "Enter data to be copied followed by a newline.\n" "End with a backslash and a period on a line by itself, or an EOF signal." @@ -970,31 +993,31 @@ msgstr "" "자료입력이 끝나면 backslash 점 (\\.) 마지막 줄 처음에 입력하는 EOF 시그널을 " "보내세요." -#: copy.c:671 +#: copy.c:669 msgid "aborted because of read failure" msgstr "읽기 실패로 중지됨" -#: copy.c:705 +#: copy.c:703 msgid "trying to exit copy mode" msgstr "복사 모드를 종료하는 중" -#: crosstabview.c:124 +#: crosstabview.c:123 #, c-format msgid "\\crosstabview: statement did not return a result set" msgstr "\\crosstabview: 구문 결과가 집합을 반환하지 않았음" -#: crosstabview.c:130 +#: crosstabview.c:129 #, c-format msgid "\\crosstabview: query must return at least three columns" msgstr "\\crosstabview: 쿼리 결과는 적어도 세 개의 칼럼은 반환 해야 함" -#: crosstabview.c:157 +#: crosstabview.c:156 #, c-format msgid "" "\\crosstabview: vertical and horizontal headers must be different columns" msgstr "\\crosstabview: 행과 열의 칼럼이 각각 다른 칼럼이어야 함" -#: crosstabview.c:173 +#: crosstabview.c:172 #, c-format msgid "" "\\crosstabview: data column must be specified when query returns more than " @@ -1003,12 +1026,12 @@ msgstr "" "\\crosstabview: 처리할 칼럼이 세개보다 많을 때는 자료로 사용할 칼럼을 지정해" "야 함" -#: crosstabview.c:229 +#: crosstabview.c:228 #, c-format msgid "\\crosstabview: maximum number of columns (%d) exceeded" msgstr "\\crosstabview: 최대 칼럼 수 (%d) 초과" -#: crosstabview.c:398 +#: crosstabview.c:397 #, c-format msgid "" "\\crosstabview: query result contains multiple data values for row \"%s\", " @@ -1016,1106 +1039,1128 @@ msgid "" msgstr "" "\\crosstabview: \"%s\" 로우, \"%s\" 칼럼에 대해 쿼리 결과는 다중값이어야 함" -#: crosstabview.c:646 +#: crosstabview.c:645 #, c-format msgid "\\crosstabview: column number %d is out of range 1..%d" msgstr "\\crosstabview: %d 번째 열은 1..%d 범위를 벗어났음" -#: crosstabview.c:671 +#: crosstabview.c:670 #, c-format msgid "\\crosstabview: ambiguous column name: \"%s\"" msgstr "\\crosstabview: 칼럼 이름이 모호함: \"%s\"" -#: crosstabview.c:679 +#: crosstabview.c:678 #, c-format msgid "\\crosstabview: column name not found: \"%s\"" msgstr "\\crosstabview: 칼럼 이름 없음: \"%s\"" -#: describe.c:77 describe.c:374 describe.c:679 describe.c:811 describe.c:955 -#: describe.c:1116 describe.c:1188 describe.c:3663 describe.c:3846 -#: describe.c:4090 describe.c:4181 describe.c:4448 describe.c:4608 -#: describe.c:4849 describe.c:4924 describe.c:4935 describe.c:4997 -#: describe.c:5422 describe.c:5505 +#: describe.c:75 describe.c:373 describe.c:678 describe.c:810 describe.c:954 +#: describe.c:1115 describe.c:1187 describe.c:3718 describe.c:3926 +#: describe.c:4170 describe.c:4261 describe.c:4528 describe.c:4688 +#: describe.c:4929 describe.c:5004 describe.c:5015 describe.c:5077 +#: describe.c:5502 describe.c:5585 msgid "Schema" msgstr "스키마" -#: describe.c:78 describe.c:176 describe.c:244 describe.c:252 describe.c:375 -#: describe.c:680 describe.c:812 describe.c:873 describe.c:956 describe.c:1189 -#: describe.c:3664 describe.c:3847 describe.c:4013 describe.c:4091 -#: describe.c:4182 describe.c:4261 describe.c:4449 describe.c:4533 -#: describe.c:4609 describe.c:4850 describe.c:4925 describe.c:4936 -#: describe.c:4998 describe.c:5195 describe.c:5279 describe.c:5503 -#: describe.c:5675 describe.c:5900 +#: describe.c:76 describe.c:174 describe.c:242 describe.c:250 describe.c:374 +#: describe.c:679 describe.c:811 describe.c:872 describe.c:955 describe.c:1188 +#: describe.c:3719 describe.c:3927 describe.c:4093 describe.c:4171 +#: describe.c:4262 describe.c:4341 describe.c:4529 describe.c:4613 +#: describe.c:4689 describe.c:4930 describe.c:5005 describe.c:5016 +#: describe.c:5078 describe.c:5275 describe.c:5359 describe.c:5583 +#: describe.c:5755 describe.c:5995 msgid "Name" msgstr "이름" -#: describe.c:79 describe.c:387 describe.c:405 describe.c:451 describe.c:468 +#: describe.c:77 describe.c:386 describe.c:404 describe.c:450 describe.c:467 msgid "Result data type" msgstr "반환 자료형" -#: describe.c:87 describe.c:100 describe.c:104 describe.c:388 describe.c:406 -#: describe.c:452 describe.c:469 +#: describe.c:85 describe.c:98 describe.c:102 describe.c:387 describe.c:405 +#: describe.c:451 describe.c:468 msgid "Argument data types" msgstr "인자 자료형" -#: describe.c:112 describe.c:119 describe.c:187 describe.c:275 describe.c:514 -#: describe.c:728 describe.c:827 describe.c:898 describe.c:1191 describe.c:2021 -#: describe.c:3452 describe.c:3699 describe.c:3893 describe.c:4044 -#: describe.c:4118 describe.c:4191 describe.c:4274 describe.c:4357 -#: describe.c:4476 describe.c:4542 describe.c:4610 describe.c:4751 -#: describe.c:4793 describe.c:4866 describe.c:4928 describe.c:4937 -#: describe.c:4999 describe.c:5221 describe.c:5301 describe.c:5436 -#: describe.c:5506 large_obj.c:290 large_obj.c:300 +#: describe.c:110 describe.c:117 describe.c:185 describe.c:273 describe.c:513 +#: describe.c:727 describe.c:826 describe.c:897 describe.c:1190 describe.c:2020 +#: describe.c:3506 describe.c:3779 describe.c:3973 describe.c:4124 +#: describe.c:4198 describe.c:4271 describe.c:4354 describe.c:4437 +#: describe.c:4556 describe.c:4622 describe.c:4690 describe.c:4831 +#: describe.c:4873 describe.c:4946 describe.c:5008 describe.c:5017 +#: describe.c:5079 describe.c:5301 describe.c:5381 describe.c:5516 +#: describe.c:5586 large_obj.c:290 large_obj.c:300 msgid "Description" msgstr "설명" -#: describe.c:137 +#: describe.c:135 msgid "List of aggregate functions" msgstr "통계 함수 목록" -#: describe.c:162 +#: describe.c:160 #, c-format msgid "The server (version %s) does not support access methods." msgstr "서버(%s 버전)에서 접근 방법을 지원하지 않습니다." -#: describe.c:177 +#: describe.c:175 msgid "Index" msgstr "인덱스" -#: describe.c:178 describe.c:3680 describe.c:3872 describe.c:5423 +#: describe.c:176 describe.c:3737 describe.c:3952 describe.c:5503 msgid "Table" msgstr "테이블" -#: describe.c:186 describe.c:5200 +#: describe.c:184 describe.c:5280 msgid "Handler" msgstr "핸들러" -#: describe.c:205 +#: describe.c:203 msgid "List of access methods" msgstr "접근 방법 목록" -#: describe.c:231 +#: describe.c:229 #, c-format msgid "The server (version %s) does not support tablespaces." msgstr "서버(%s 버전)에서 테이블스페이스를 지원하지 않습니다." -#: describe.c:245 describe.c:253 describe.c:502 describe.c:718 describe.c:874 -#: describe.c:1115 describe.c:3675 describe.c:3848 describe.c:4017 -#: describe.c:4263 describe.c:4534 describe.c:5196 describe.c:5280 -#: describe.c:5676 describe.c:5802 describe.c:5901 large_obj.c:289 +#: describe.c:243 describe.c:251 describe.c:501 describe.c:717 describe.c:873 +#: describe.c:1114 describe.c:3730 describe.c:3928 describe.c:4097 +#: describe.c:4343 describe.c:4614 describe.c:5276 describe.c:5360 +#: describe.c:5756 describe.c:5893 describe.c:5996 describe.c:6111 +#: describe.c:6190 large_obj.c:289 msgid "Owner" msgstr "소유주" -#: describe.c:246 describe.c:254 +#: describe.c:244 describe.c:252 msgid "Location" msgstr "위치" -#: describe.c:265 describe.c:3270 +#: describe.c:263 describe.c:3323 msgid "Options" msgstr "옵션" -#: describe.c:270 describe.c:691 describe.c:890 describe.c:3691 describe.c:3695 +#: describe.c:268 describe.c:690 describe.c:889 describe.c:3771 describe.c:3775 msgid "Size" msgstr "크기" -#: describe.c:292 +#: describe.c:290 msgid "List of tablespaces" msgstr "테이블스페이스 목록" -#: describe.c:334 +#: describe.c:333 #, c-format msgid "\\df only takes [anptwS+] as options" msgstr "\\df 명령은 [anptwS+]만 추가로 사용함" -#: describe.c:342 describe.c:353 +#: describe.c:341 describe.c:352 #, c-format msgid "\\df does not take a \"%c\" option with server version %s" msgstr "\\df 명령은 \"%c\" 옵션을 %s 버전 서버에서는 사용할 수 없음" #. translator: "agg" is short for "aggregate" -#: describe.c:390 describe.c:408 describe.c:454 describe.c:471 +#: describe.c:389 describe.c:407 describe.c:453 describe.c:470 msgid "agg" msgstr "집계" -#: describe.c:391 describe.c:409 +#: describe.c:390 describe.c:408 msgid "window" msgstr "창" -#: describe.c:392 +#: describe.c:391 msgid "proc" msgstr "" -#: describe.c:393 describe.c:411 describe.c:456 describe.c:473 +#: describe.c:392 describe.c:410 describe.c:455 describe.c:472 msgid "func" msgstr "함수" -#: describe.c:410 describe.c:455 describe.c:472 describe.c:1325 +#: describe.c:409 describe.c:454 describe.c:471 describe.c:1324 msgid "trigger" msgstr "트리거" -#: describe.c:484 +#: describe.c:483 msgid "immutable" msgstr "immutable" -#: describe.c:485 +#: describe.c:484 msgid "stable" msgstr "stable" -#: describe.c:486 +#: describe.c:485 msgid "volatile" msgstr "volatile" -#: describe.c:487 +#: describe.c:486 msgid "Volatility" msgstr "휘발성" -#: describe.c:495 +#: describe.c:494 msgid "restricted" msgstr "엄격함" -#: describe.c:496 +#: describe.c:495 msgid "safe" msgstr "safe" -#: describe.c:497 +#: describe.c:496 msgid "unsafe" msgstr "unsafe" -#: describe.c:498 +#: describe.c:497 msgid "Parallel" msgstr "병렬처리" -#: describe.c:503 +#: describe.c:502 msgid "definer" msgstr "definer" -#: describe.c:504 +#: describe.c:503 msgid "invoker" msgstr "invoker" -#: describe.c:505 +#: describe.c:504 msgid "Security" msgstr "보안" -#: describe.c:512 +#: describe.c:511 msgid "Language" msgstr "언어" -#: describe.c:513 +#: describe.c:512 msgid "Source code" msgstr "소스 코드" -#: describe.c:642 +#: describe.c:641 msgid "List of functions" msgstr "함수 목록" -#: describe.c:690 +#: describe.c:689 msgid "Internal name" msgstr "내부 이름" -#: describe.c:712 +#: describe.c:711 msgid "Elements" msgstr "요소" -#: describe.c:769 +#: describe.c:768 msgid "List of data types" msgstr "자료형 목록" -#: describe.c:813 +#: describe.c:812 msgid "Left arg type" msgstr "왼쪽 인수 자료형" -#: describe.c:814 +#: describe.c:813 msgid "Right arg type" msgstr "오른쪽 인수 자료형" -#: describe.c:815 +#: describe.c:814 msgid "Result type" msgstr "반환 자료형" -#: describe.c:820 describe.c:4269 describe.c:4334 describe.c:4340 -#: describe.c:4750 +#: describe.c:819 describe.c:4349 describe.c:4414 describe.c:4420 +#: describe.c:4830 describe.c:6362 describe.c:6366 msgid "Function" msgstr "함수" -#: describe.c:845 +#: describe.c:844 msgid "List of operators" msgstr "연산자 목록" -#: describe.c:875 +#: describe.c:874 msgid "Encoding" msgstr "인코딩" -#: describe.c:880 describe.c:4450 +#: describe.c:879 describe.c:4530 msgid "Collate" msgstr "Collate" -#: describe.c:881 describe.c:4451 +#: describe.c:880 describe.c:4531 msgid "Ctype" msgstr "Ctype" -#: describe.c:894 +#: describe.c:893 msgid "Tablespace" msgstr "테이블스페이스" -#: describe.c:916 +#: describe.c:915 msgid "List of databases" msgstr "데이터베이스 목록" -#: describe.c:957 describe.c:1118 describe.c:3665 +#: describe.c:956 describe.c:1117 describe.c:3720 msgid "table" msgstr "테이블" -#: describe.c:958 describe.c:3666 +#: describe.c:957 describe.c:3721 msgid "view" msgstr "뷰(view)" -#: describe.c:959 describe.c:3667 +#: describe.c:958 describe.c:3722 msgid "materialized view" msgstr "구체화된 뷰" -#: describe.c:960 describe.c:1120 describe.c:3669 +#: describe.c:959 describe.c:1119 describe.c:3724 msgid "sequence" msgstr "시퀀스" -#: describe.c:961 describe.c:3671 +#: describe.c:960 describe.c:3726 msgid "foreign table" msgstr "외부 테이블" -#: describe.c:962 describe.c:3672 describe.c:3857 +#: describe.c:961 describe.c:3727 describe.c:3937 msgid "partitioned table" msgstr "파티션 테이블" -#: describe.c:974 +#: describe.c:973 msgid "Column privileges" msgstr "칼럼 접근권한" -#: describe.c:1005 describe.c:1039 +#: describe.c:1004 describe.c:1038 msgid "Policies" msgstr "정책" -#: describe.c:1071 describe.c:5957 describe.c:5961 +#: describe.c:1070 describe.c:6052 describe.c:6056 msgid "Access privileges" msgstr "액세스 권한" -#: describe.c:1102 +#: describe.c:1101 #, c-format msgid "The server (version %s) does not support altering default privileges." msgstr "이 서버(%s 버전)는 ALTER DEFAULT PRIVILEGES 기능을 지원하지 않습니다." -#: describe.c:1122 +#: describe.c:1121 msgid "function" msgstr "함수" -#: describe.c:1124 +#: describe.c:1123 msgid "type" msgstr "type" -#: describe.c:1126 +#: describe.c:1125 msgid "schema" msgstr "스키마" -#: describe.c:1150 +#: describe.c:1149 msgid "Default access privileges" msgstr "기본 접근권한" -#: describe.c:1190 +#: describe.c:1189 msgid "Object" msgstr "개체" -#: describe.c:1204 +#: describe.c:1203 msgid "table constraint" msgstr "테이블 제약 조건" -#: describe.c:1226 +#: describe.c:1225 msgid "domain constraint" msgstr "도메인 제약조건" -#: describe.c:1254 +#: describe.c:1253 msgid "operator class" msgstr "연산자 클래스" -#: describe.c:1283 +#: describe.c:1282 msgid "operator family" msgstr "연산자 부류" -#: describe.c:1305 +#: describe.c:1304 msgid "rule" msgstr "룰(rule)" -#: describe.c:1347 +#: describe.c:1346 msgid "Object descriptions" msgstr "개체 설명" -#: describe.c:1403 describe.c:3763 +#: describe.c:1402 describe.c:3843 #, c-format msgid "Did not find any relation named \"%s\"." msgstr "\"%s\" 이름을 릴레이션(relation) 없음." -#: describe.c:1406 describe.c:3766 +#: describe.c:1405 describe.c:3846 #, c-format msgid "Did not find any relations." msgstr "관련 릴레이션 찾을 수 없음." -#: describe.c:1661 +#: describe.c:1660 #, c-format msgid "Did not find any relation with OID %s." msgstr "%s oid의 어떤 릴레이션(relation)도 찾을 수 없음." -#: describe.c:1713 describe.c:1737 +#: describe.c:1712 describe.c:1736 msgid "Start" msgstr "시작" -#: describe.c:1714 describe.c:1738 +#: describe.c:1713 describe.c:1737 msgid "Minimum" msgstr "최소값" -#: describe.c:1715 describe.c:1739 +#: describe.c:1714 describe.c:1738 msgid "Maximum" msgstr "최대값" -#: describe.c:1716 describe.c:1740 +#: describe.c:1715 describe.c:1739 msgid "Increment" msgstr "증가값" -#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4185 -#: describe.c:4351 describe.c:4465 describe.c:4470 +#: describe.c:1716 describe.c:1740 describe.c:1871 describe.c:4265 +#: describe.c:4431 describe.c:4545 describe.c:4550 describe.c:6099 msgid "yes" msgstr "예" -#: describe.c:1718 describe.c:1742 describe.c:1873 describe.c:4185 -#: describe.c:4348 describe.c:4465 +#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4265 +#: describe.c:4428 describe.c:4545 describe.c:6100 msgid "no" msgstr "아니오" -#: describe.c:1719 describe.c:1743 +#: describe.c:1718 describe.c:1742 msgid "Cycles?" msgstr "순환?" -#: describe.c:1720 describe.c:1744 +#: describe.c:1719 describe.c:1743 msgid "Cache" msgstr "캐쉬" -#: describe.c:1787 +#: describe.c:1786 #, c-format msgid "Owned by: %s" msgstr "소유주: %s" -#: describe.c:1791 +#: describe.c:1790 #, c-format msgid "Sequence for identity column: %s" msgstr "식별 칼럼용 시퀀스: %s" -#: describe.c:1798 +#: describe.c:1797 #, c-format msgid "Sequence \"%s.%s\"" msgstr "\"%s.%s\" 시퀀스" -#: describe.c:1934 +#: describe.c:1933 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "로그 미사용 테이블 \"%s.%s\"" -#: describe.c:1937 +#: describe.c:1936 #, c-format msgid "Table \"%s.%s\"" msgstr "\"%s.%s\" 테이블" -#: describe.c:1941 +#: describe.c:1940 #, c-format msgid "View \"%s.%s\"" msgstr "\"%s.%s\" 뷰(view)" -#: describe.c:1946 +#: describe.c:1945 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "트랜잭션 로그를 남기지 않은 구체화된 뷰 \"%s.%s\"" -#: describe.c:1949 +#: describe.c:1948 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "Materialized 뷰 \"%s.%s\"" -#: describe.c:1954 +#: describe.c:1953 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "\"%s.%s\" 로그 미사용 인덱스" -#: describe.c:1957 +#: describe.c:1956 #, c-format msgid "Index \"%s.%s\"" msgstr "\"%s.%s\" 인덱스" -#: describe.c:1962 +#: describe.c:1961 #, c-format msgid "Unlogged partitioned index \"%s.%s\"" msgstr "\"%s.%s\" 로그 미사용 파티션 인덱스" -#: describe.c:1965 +#: describe.c:1964 #, c-format msgid "Partitioned index \"%s.%s\"" msgstr "\"%s.%s\" 파티션 인덱스" -#: describe.c:1970 +#: describe.c:1969 #, c-format msgid "Special relation \"%s.%s\"" msgstr "\"%s.%s\" 특수 릴레이션(relation)" -#: describe.c:1974 +#: describe.c:1973 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "\"%s.%s\" TOAST 테이블" -#: describe.c:1978 +#: describe.c:1977 #, c-format msgid "Composite type \"%s.%s\"" msgstr "\"%s.%s\" 복합자료형" -#: describe.c:1982 +#: describe.c:1981 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "\"%s.%s\" 외부 테이블" -#: describe.c:1987 +#: describe.c:1986 #, c-format msgid "Unlogged partitioned table \"%s.%s\"" msgstr "로그 미사용 파티션 테이블 \"%s.%s\"" -#: describe.c:1990 +#: describe.c:1989 #, c-format msgid "Partitioned table \"%s.%s\"" msgstr "\"%s.%s\" 파티션 테이블" -#: describe.c:2006 describe.c:4098 +#: describe.c:2005 describe.c:4178 msgid "Collation" msgstr "Collation" -#: describe.c:2007 describe.c:4105 +#: describe.c:2006 describe.c:4185 msgid "Nullable" msgstr "NULL허용" -#: describe.c:2008 describe.c:4106 +#: describe.c:2007 describe.c:4186 msgid "Default" msgstr "초기값" -#: describe.c:2011 +#: describe.c:2010 msgid "Key?" msgstr "" -#: describe.c:2013 +#: describe.c:2012 msgid "Definition" msgstr "정의" -#: describe.c:2015 describe.c:5216 describe.c:5300 describe.c:5371 -#: describe.c:5435 +#: describe.c:2014 describe.c:5296 describe.c:5380 describe.c:5451 +#: describe.c:5515 msgid "FDW options" msgstr "FDW 옵션" -#: describe.c:2017 +#: describe.c:2016 msgid "Storage" msgstr "스토리지" -#: describe.c:2019 +#: describe.c:2018 msgid "Stats target" msgstr "통계수집량" -#: describe.c:2132 +#: describe.c:2131 #, c-format msgid "Partition of: %s %s" msgstr "소속 파티션: %s %s" -#: describe.c:2144 +#: describe.c:2143 msgid "No partition constraint" msgstr "파티션 제약 조건 없음" -#: describe.c:2146 +#: describe.c:2145 #, c-format msgid "Partition constraint: %s" msgstr "파티션 제약조건: %s" -#: describe.c:2170 +#: describe.c:2169 #, c-format msgid "Partition key: %s" msgstr "파티션 키: %s" -#: describe.c:2240 +#: describe.c:2195 +#, c-format +msgid "Owning table: \"%s.%s\"" +msgstr "소속 테이블: \"%s.%s\"" + +#: describe.c:2266 msgid "primary key, " msgstr "기본키, " -#: describe.c:2242 +#: describe.c:2268 msgid "unique, " msgstr "고유, " -#: describe.c:2248 +#: describe.c:2274 #, c-format msgid "for table \"%s.%s\"" msgstr "적용테이블: \"%s.%s\"" -#: describe.c:2252 +#: describe.c:2278 #, c-format msgid ", predicate (%s)" msgstr ", predicate (%s)" -#: describe.c:2255 +#: describe.c:2281 msgid ", clustered" msgstr ", 클러스됨" -#: describe.c:2258 +#: describe.c:2284 msgid ", invalid" msgstr ", 잘못됨" -#: describe.c:2261 +#: describe.c:2287 msgid ", deferrable" msgstr ", 지연가능" -#: describe.c:2264 +#: describe.c:2290 msgid ", initially deferred" msgstr ", 트랜잭션단위지연" -#: describe.c:2267 +#: describe.c:2293 msgid ", replica identity" msgstr ", 복제 식별자" -#: describe.c:2326 +#: describe.c:2360 msgid "Indexes:" msgstr "인덱스들:" -#: describe.c:2410 +#: describe.c:2444 msgid "Check constraints:" msgstr "체크 제약 조건:" -#: describe.c:2478 +#: describe.c:2512 msgid "Foreign-key constraints:" msgstr "참조키 제약 조건:" -#: describe.c:2541 +#: describe.c:2575 msgid "Referenced by:" msgstr "다음에서 참조됨:" -#: describe.c:2591 +#: describe.c:2625 msgid "Policies:" msgstr "정책:" -#: describe.c:2594 +#: describe.c:2628 msgid "Policies (forced row security enabled):" msgstr "정책 (로우단위 보안정책 강제 활성화):" -#: describe.c:2597 +#: describe.c:2631 msgid "Policies (row security enabled): (none)" msgstr "정책 (로우단위 보안정책 활성화): (없음)" -#: describe.c:2600 +#: describe.c:2634 msgid "Policies (forced row security enabled): (none)" msgstr "정책 (로우단위 보안정책 강제 활성화): (없음)" -#: describe.c:2603 +#: describe.c:2637 msgid "Policies (row security disabled):" msgstr "정책 (로우단위 보안정책 비활성화):" -#: describe.c:2666 +#: describe.c:2705 msgid "Statistics objects:" msgstr "통계정보 객체:" -#: describe.c:2775 describe.c:2879 +#: describe.c:2819 describe.c:2923 msgid "Rules:" msgstr "룰(rule)들:" -#: describe.c:2778 +#: describe.c:2822 msgid "Disabled rules:" msgstr "사용중지된 규칙:" -#: describe.c:2781 +#: describe.c:2825 msgid "Rules firing always:" msgstr "항상 발생하는 규칙:" -#: describe.c:2784 +#: describe.c:2828 msgid "Rules firing on replica only:" msgstr "복제본에서만 발생하는 규칙:" -#: describe.c:2824 +#: describe.c:2868 msgid "Publications:" msgstr "발행자:" -#: describe.c:2862 +#: describe.c:2906 msgid "View definition:" msgstr "뷰 정의:" -#: describe.c:3001 +#: describe.c:3053 msgid "Triggers:" msgstr "트리거들:" -#: describe.c:3005 +#: describe.c:3057 msgid "Disabled user triggers:" msgstr "사용중지된 사용자 트리거:" -#: describe.c:3007 +#: describe.c:3059 msgid "Disabled triggers:" msgstr "사용중지된 트리거:" -#: describe.c:3010 +#: describe.c:3062 msgid "Disabled internal triggers:" msgstr "사용중지된 내부 트리거:" -#: describe.c:3013 +#: describe.c:3065 msgid "Triggers firing always:" msgstr "항상 발생하는 트리거:" -#: describe.c:3016 +#: describe.c:3068 msgid "Triggers firing on replica only:" msgstr "복제본에서만 발생하는 트리거:" -#: describe.c:3075 +#: describe.c:3140 #, c-format msgid "Server: %s" msgstr "서버: %s" -#: describe.c:3083 +#: describe.c:3148 #, c-format msgid "FDW options: (%s)" msgstr "FDW 옵션들: (%s)" -#: describe.c:3102 +#: describe.c:3169 msgid "Inherits" msgstr "상속" -#: describe.c:3161 +#: describe.c:3229 #, c-format msgid "Number of partitions: %d" msgstr "파티션 테이블 수: %d" -#: describe.c:3170 -#, c-format -msgid "Number of child tables: %d (Use \\d+ to list them.)" -msgstr "하위 테이블 수: %d (\\d+ 명령으로 볼 수 있음)" - -#: describe.c:3172 +#: describe.c:3238 #, c-format msgid "Number of partitions: %d (Use \\d+ to list them.)" msgstr "파티션 테이블 수: %d (\\d+ 명령으로 볼 수 있음)" -#: describe.c:3180 +#: describe.c:3240 +#, c-format +msgid "Number of child tables: %d (Use \\d+ to list them.)" +msgstr "하위 테이블 수: %d (\\d+ 명령으로 볼 수 있음)" + +#: describe.c:3247 msgid "Child tables" msgstr "하위 테이블" -#: describe.c:3180 +#: describe.c:3247 msgid "Partitions" msgstr "파티션들" -#: describe.c:3223 +#: describe.c:3276 #, c-format msgid "Typed table of type: %s" msgstr "자료형의 typed 테이블: %s" -#: describe.c:3239 +#: describe.c:3292 msgid "Replica Identity" msgstr "복제 식별자" -#: describe.c:3252 +#: describe.c:3305 msgid "Has OIDs: yes" msgstr "OID 사용: yes" -#: describe.c:3261 +#: describe.c:3314 #, c-format msgid "Access method: %s" msgstr "접근 방법: %s" -#: describe.c:3340 +#: describe.c:3394 #, c-format msgid "Tablespace: \"%s\"" msgstr "테이블스페이스: \"%s\"" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:3352 +#: describe.c:3406 #, c-format msgid ", tablespace \"%s\"" msgstr ", \"%s\" 테이블스페이스" -#: describe.c:3445 +#: describe.c:3499 msgid "List of roles" msgstr "롤 목록" -#: describe.c:3447 +#: describe.c:3501 msgid "Role name" msgstr "롤 이름" -#: describe.c:3448 +#: describe.c:3502 msgid "Attributes" msgstr "속성" -#: describe.c:3449 +#: describe.c:3503 msgid "Member of" msgstr "소속 그룹:" -#: describe.c:3460 +#: describe.c:3514 msgid "Superuser" msgstr "슈퍼유저" -#: describe.c:3463 +#: describe.c:3517 msgid "No inheritance" msgstr "상속 없음" -#: describe.c:3466 +#: describe.c:3520 msgid "Create role" msgstr "롤 만들기" -#: describe.c:3469 +#: describe.c:3523 msgid "Create DB" msgstr "DB 만들기" -#: describe.c:3472 +#: describe.c:3526 msgid "Cannot login" msgstr "로그인할 수 없음" -#: describe.c:3476 +#: describe.c:3530 msgid "Replication" msgstr "복제" -#: describe.c:3480 +#: describe.c:3534 msgid "Bypass RLS" msgstr "RLS 통과" -#: describe.c:3489 +#: describe.c:3543 msgid "No connections" msgstr "연결 없음" -#: describe.c:3491 +#: describe.c:3545 #, c-format msgid "%d connection" msgid_plural "%d connections" msgstr[0] "%d개 연결" -#: describe.c:3501 +#: describe.c:3555 msgid "Password valid until " msgstr "비밀번호 만료기한: " -#: describe.c:3551 +#: describe.c:3605 #, c-format msgid "The server (version %s) does not support per-database role settings." msgstr "이 서버(%s 버전)는 데이터베이스 개별 롤 설정을 지원하지 않습니다." -#: describe.c:3564 +#: describe.c:3618 msgid "Role" msgstr "롤" -#: describe.c:3565 +#: describe.c:3619 msgid "Database" msgstr "데이터베이스" -#: describe.c:3566 +#: describe.c:3620 msgid "Settings" msgstr "설정" -#: describe.c:3587 +#: describe.c:3641 #, c-format msgid "Did not find any settings for role \"%s\" and database \"%s\"." msgstr "\"%s\" 롤과 \"%s\" 데이터베이스에 대한 특정 설정이 없습니다." -#: describe.c:3590 +#: describe.c:3644 #, c-format msgid "Did not find any settings for role \"%s\"." msgstr "\"%s\" 롤용 특정 설정이 없음." -#: describe.c:3593 +#: describe.c:3647 #, c-format msgid "Did not find any settings." msgstr "추가 설정 없음." -#: describe.c:3598 +#: describe.c:3652 msgid "List of settings" msgstr "설정 목록" -#: describe.c:3668 +#: describe.c:3723 msgid "index" msgstr "인덱스" -#: describe.c:3670 +#: describe.c:3725 msgid "special" msgstr "특수" -#: describe.c:3673 describe.c:3858 +#: describe.c:3728 describe.c:3938 msgid "partitioned index" msgstr "파티션_인덱스" -#: describe.c:3771 +#: describe.c:3752 +msgid "permanent" +msgstr "" + +#: describe.c:3753 +msgid "temporary" +msgstr "" + +#: describe.c:3754 +msgid "unlogged" +msgstr "" + +#: describe.c:3755 +msgid "Persistence" +msgstr "" + +#: describe.c:3851 msgid "List of relations" msgstr "릴레이션(relation) 목록" -#: describe.c:3819 +#: describe.c:3899 #, c-format msgid "" "The server (version %s) does not support declarative table partitioning." msgstr "이 서버(%s 버전)는 파티션 테이블 기능을 지원하지 않습니다." -#: describe.c:3830 +#: describe.c:3910 msgid "List of partitioned indexes" msgstr "파티션 인덱스 목록" -#: describe.c:3832 +#: describe.c:3912 msgid "List of partitioned tables" msgstr "파티션 테이블 목록" -#: describe.c:3836 +#: describe.c:3916 msgid "List of partitioned relations" msgstr "파티션 릴레이션(relation) 목록" -#: describe.c:3867 +#: describe.c:3947 msgid "Parent name" msgstr "상위 이름" -#: describe.c:3880 +#: describe.c:3960 msgid "Leaf partition size" msgstr "하위 파티션 크기" -#: describe.c:3883 describe.c:3889 +#: describe.c:3963 describe.c:3969 msgid "Total size" msgstr "전체 크기" -#: describe.c:4021 +#: describe.c:4101 msgid "Trusted" msgstr "신뢰됨" -#: describe.c:4029 +#: describe.c:4109 msgid "Internal language" msgstr "내부 언어" -#: describe.c:4030 +#: describe.c:4110 msgid "Call handler" msgstr "호출 핸들러" -#: describe.c:4031 describe.c:5203 +#: describe.c:4111 describe.c:5283 msgid "Validator" msgstr "유효성 검사기" -#: describe.c:4034 +#: describe.c:4114 msgid "Inline handler" msgstr "인라인 핸들러" -#: describe.c:4062 +#: describe.c:4142 msgid "List of languages" msgstr "언어 목록" -#: describe.c:4107 +#: describe.c:4187 msgid "Check" msgstr "체크" -#: describe.c:4149 +#: describe.c:4229 msgid "List of domains" msgstr "도메인(domain) 목록" -#: describe.c:4183 +#: describe.c:4263 msgid "Source" msgstr "소스" -#: describe.c:4184 +#: describe.c:4264 msgid "Destination" msgstr "설명" -#: describe.c:4186 +#: describe.c:4266 describe.c:6101 msgid "Default?" msgstr "초기값?" -#: describe.c:4223 +#: describe.c:4303 msgid "List of conversions" msgstr "문자코드변환규칙(conversion) 목록" -#: describe.c:4262 +#: describe.c:4342 msgid "Event" msgstr "이벤트" -#: describe.c:4264 +#: describe.c:4344 msgid "enabled" msgstr "활성화" -#: describe.c:4265 +#: describe.c:4345 msgid "replica" msgstr "replica" -#: describe.c:4266 +#: describe.c:4346 msgid "always" msgstr "항상" -#: describe.c:4267 +#: describe.c:4347 msgid "disabled" msgstr "비활성화" -#: describe.c:4268 describe.c:5902 +#: describe.c:4348 describe.c:5997 msgid "Enabled" msgstr "활성화" -#: describe.c:4270 +#: describe.c:4350 msgid "Tags" msgstr "태그" -#: describe.c:4289 +#: describe.c:4369 msgid "List of event triggers" msgstr "이벤트 트리거 목록" -#: describe.c:4318 +#: describe.c:4398 msgid "Source type" msgstr "Source 자료형" -#: describe.c:4319 +#: describe.c:4399 msgid "Target type" msgstr "Target 자료형" -#: describe.c:4350 +#: describe.c:4430 msgid "in assignment" msgstr "in assignment" -#: describe.c:4352 +#: describe.c:4432 msgid "Implicit?" msgstr "Implicit?" -#: describe.c:4407 +#: describe.c:4487 msgid "List of casts" msgstr "형변환자 목록" -#: describe.c:4435 +#: describe.c:4515 #, c-format msgid "The server (version %s) does not support collations." msgstr "이 서버(%s 버전)는 문자 정렬(collation) 기능을 지원하지 않습니다." -#: describe.c:4456 describe.c:4460 +#: describe.c:4536 describe.c:4540 msgid "Provider" msgstr "제공자" -#: describe.c:4466 describe.c:4471 +#: describe.c:4546 describe.c:4551 msgid "Deterministic?" msgstr "" -#: describe.c:4506 +#: describe.c:4586 msgid "List of collations" msgstr "문자 정렬 목록" -#: describe.c:4565 +#: describe.c:4645 msgid "List of schemas" msgstr "스키마(schema) 목록" -#: describe.c:4590 describe.c:4837 describe.c:4908 describe.c:4979 +#: describe.c:4670 describe.c:4917 describe.c:4988 describe.c:5059 #, c-format msgid "The server (version %s) does not support full text search." msgstr "이 서버(%s 버전)에서 전문 검색을 지원하지 않습니다." -#: describe.c:4625 +#: describe.c:4705 msgid "List of text search parsers" msgstr "텍스트 검색 파서 목록" -#: describe.c:4670 +#: describe.c:4750 #, c-format msgid "Did not find any text search parser named \"%s\"." msgstr "\"%s\"(이)라는 전문 검색 분석기를 찾지 못했습니다." -#: describe.c:4673 +#: describe.c:4753 #, c-format msgid "Did not find any text search parsers." msgstr "특정 전문 검색 분석기를 찾지 못했습니다." -#: describe.c:4748 +#: describe.c:4828 msgid "Start parse" msgstr "구문 분석 시작" -#: describe.c:4749 +#: describe.c:4829 msgid "Method" msgstr "방법" -#: describe.c:4753 +#: describe.c:4833 msgid "Get next token" msgstr "다음 토큰 가져오기" -#: describe.c:4755 +#: describe.c:4835 msgid "End parse" msgstr "구문 분석 종료" -#: describe.c:4757 +#: describe.c:4837 msgid "Get headline" msgstr "헤드라인 가져오기" -#: describe.c:4759 +#: describe.c:4839 msgid "Get token types" msgstr "토큰 형식 가져오기" -#: describe.c:4770 +#: describe.c:4850 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "\"%s.%s\" 텍스트 검색 파서" -#: describe.c:4773 +#: describe.c:4853 #, c-format msgid "Text search parser \"%s\"" msgstr "\"%s\" 텍스트 검색 파서" -#: describe.c:4792 +#: describe.c:4872 msgid "Token name" msgstr "토큰 이름" -#: describe.c:4803 +#: describe.c:4883 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "\"%s.%s\" 파서의 토큰 형식" -#: describe.c:4806 +#: describe.c:4886 #, c-format msgid "Token types for parser \"%s\"" msgstr "\"%s\" 파서의 토큰 형식" -#: describe.c:4860 +#: describe.c:4940 msgid "Template" msgstr "템플릿" -#: describe.c:4861 +#: describe.c:4941 msgid "Init options" msgstr "초기화 옵션" -#: describe.c:4883 +#: describe.c:4963 msgid "List of text search dictionaries" msgstr "텍스트 검색 사전 목록" -#: describe.c:4926 +#: describe.c:5006 msgid "Init" msgstr "초기화" -#: describe.c:4927 +#: describe.c:5007 msgid "Lexize" msgstr "Lexize" -#: describe.c:4954 +#: describe.c:5034 msgid "List of text search templates" msgstr "텍스트 검색 템플릿 목록" -#: describe.c:5014 +#: describe.c:5094 msgid "List of text search configurations" msgstr "텍스트 검색 구성 목록" -#: describe.c:5060 +#: describe.c:5140 #, c-format msgid "Did not find any text search configuration named \"%s\"." msgstr "\"%s\"(이)라는 텍스트 검색 구성을 찾지 못했습니다." -#: describe.c:5063 +#: describe.c:5143 #, c-format msgid "Did not find any text search configurations." msgstr "특정 텍스트 검색 구성을 찾지 못했습니다." -#: describe.c:5129 +#: describe.c:5209 msgid "Token" msgstr "토큰" -#: describe.c:5130 +#: describe.c:5210 msgid "Dictionaries" msgstr "사전" -#: describe.c:5141 +#: describe.c:5221 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "텍스트 검색 구성 \"%s.%s\"" -#: describe.c:5144 +#: describe.c:5224 #, c-format msgid "Text search configuration \"%s\"" msgstr "텍스트 검색 구성 \"%s\"" -#: describe.c:5148 +#: describe.c:5228 #, c-format msgid "" "\n" @@ -2124,7 +2169,7 @@ msgstr "" "\n" "파서: \"%s.%s\"" -#: describe.c:5151 +#: describe.c:5231 #, c-format msgid "" "\n" @@ -2133,156 +2178,236 @@ msgstr "" "\n" "파서: \"%s\"" -#: describe.c:5185 +#: describe.c:5265 #, c-format msgid "The server (version %s) does not support foreign-data wrappers." msgstr "이 서버(%s 버전)에서 외부 데이터 래퍼를 지원하지 않습니다." -#: describe.c:5243 +#: describe.c:5323 msgid "List of foreign-data wrappers" msgstr "외부 데이터 래퍼 목록" -#: describe.c:5268 +#: describe.c:5348 #, c-format msgid "The server (version %s) does not support foreign servers." msgstr "이 서버(%s 버전)에서 외부 서버를 지원하지 않습니다." -#: describe.c:5281 +#: describe.c:5361 msgid "Foreign-data wrapper" msgstr "외부 데이터 래퍼" -#: describe.c:5299 describe.c:5504 +#: describe.c:5379 describe.c:5584 msgid "Version" msgstr "버전" -#: describe.c:5325 +#: describe.c:5405 msgid "List of foreign servers" msgstr "외부 서버 목록" -#: describe.c:5350 +#: describe.c:5430 #, c-format msgid "The server (version %s) does not support user mappings." msgstr "이 서버(%s 버전)에서 사용자 매핑을 지원하지 않습니다." -#: describe.c:5360 describe.c:5424 +#: describe.c:5440 describe.c:5504 msgid "Server" msgstr "서버" -#: describe.c:5361 +#: describe.c:5441 msgid "User name" msgstr "사용자 이름" -#: describe.c:5386 +#: describe.c:5466 msgid "List of user mappings" msgstr "사용자 매핑 목록" -#: describe.c:5411 +#: describe.c:5491 #, c-format msgid "The server (version %s) does not support foreign tables." msgstr "이 서버(%s 버전)에서 외부 테이블을 지원하지 않습니다." -#: describe.c:5464 +#: describe.c:5544 msgid "List of foreign tables" msgstr "외부 테이블 목록" -#: describe.c:5489 describe.c:5546 +#: describe.c:5569 describe.c:5626 #, c-format msgid "The server (version %s) does not support extensions." msgstr "이 서버(%s 버전)에서 확장기능을 지원하지 않습니다." -#: describe.c:5521 +#: describe.c:5601 msgid "List of installed extensions" msgstr "설치된 확장기능 목록" -#: describe.c:5574 +#: describe.c:5654 #, c-format msgid "Did not find any extension named \"%s\"." msgstr "\"%s\" 이름의 확장 기능 모듈을 찾을 수 없습니다." -#: describe.c:5577 +#: describe.c:5657 #, c-format msgid "Did not find any extensions." msgstr "추가할 확장 기능 모듈이 없음." -#: describe.c:5621 +#: describe.c:5701 msgid "Object description" msgstr "개체 설명" -#: describe.c:5631 +#: describe.c:5711 #, c-format msgid "Objects in extension \"%s\"" msgstr "\"%s\" 확장 기능 안에 포함된 객체들" -#: describe.c:5660 describe.c:5731 +#: describe.c:5740 describe.c:5816 #, c-format msgid "The server (version %s) does not support publications." msgstr "이 서버(%s 버전)는 논리 복제 발행 기능을 지원하지 않습니다." -#: describe.c:5677 describe.c:5803 +#: describe.c:5757 describe.c:5894 msgid "All tables" msgstr "모든 테이블" -#: describe.c:5678 describe.c:5804 +#: describe.c:5758 describe.c:5895 msgid "Inserts" msgstr "Inserts" -#: describe.c:5679 describe.c:5805 +#: describe.c:5759 describe.c:5896 msgid "Updates" msgstr "Updates" -#: describe.c:5680 describe.c:5806 +#: describe.c:5760 describe.c:5897 msgid "Deletes" msgstr "Deletes" -#: describe.c:5684 describe.c:5808 +#: describe.c:5764 describe.c:5899 msgid "Truncates" msgstr "" -#: describe.c:5701 +#: describe.c:5768 describe.c:5901 +msgid "Via root" +msgstr "" + +#: describe.c:5785 msgid "List of publications" msgstr "발행 목록" -#: describe.c:5769 +#: describe.c:5858 #, c-format msgid "Did not find any publication named \"%s\"." msgstr "\"%s\" 이름의 발행 없음." -#: describe.c:5772 +#: describe.c:5861 #, c-format msgid "Did not find any publications." msgstr "발행 없음." -#: describe.c:5799 +#: describe.c:5890 #, c-format msgid "Publication %s" msgstr "%s 발행" -#: describe.c:5843 +#: describe.c:5938 msgid "Tables:" msgstr "테이블" -#: describe.c:5887 +#: describe.c:5982 #, c-format msgid "The server (version %s) does not support subscriptions." msgstr "이 서버(%s 버전)는 구독 기능을 지원하지 않습니다." -#: describe.c:5903 +#: describe.c:5998 msgid "Publication" msgstr "발행" -#: describe.c:5910 +#: describe.c:6005 msgid "Synchronous commit" msgstr "동기식 커밋" -#: describe.c:5911 +#: describe.c:6006 msgid "Conninfo" msgstr "연결정보" -#: describe.c:5933 +#: describe.c:6028 msgid "List of subscriptions" msgstr "구독 목록" -#: help.c:74 +#: describe.c:6095 describe.c:6184 describe.c:6270 describe.c:6353 +msgid "AM" +msgstr "" + +#: describe.c:6096 +msgid "Input type" +msgstr "입력 자료형" + +#: describe.c:6097 +msgid "Storage type" +msgstr "스토리지 유형" + +#: describe.c:6098 +msgid "Operator class" +msgstr "연산자 클래스" + +#: describe.c:6110 describe.c:6185 describe.c:6271 describe.c:6354 +msgid "Operator family" +msgstr "연산자 부류" + +#: describe.c:6143 +msgid "List of operator classes" +msgstr "연산자 클래스 목록" + +#: describe.c:6186 +msgid "Applicable types" +msgstr "" + +#: describe.c:6225 +msgid "List of operator families" +msgstr "연산자 부류 목록" + +#: describe.c:6272 +msgid "Operator" +msgstr "연산자" + +#: describe.c:6273 +msgid "Strategy" +msgstr "전략번호" + +#: describe.c:6274 +msgid "ordering" +msgstr "" + +#: describe.c:6275 +msgid "search" +msgstr "" + +#: describe.c:6276 +msgid "Purpose" +msgstr "" + +#: describe.c:6281 +msgid "Sort opfamily" +msgstr "정렬 연산자 부류" + +#: describe.c:6312 +msgid "List of operators of operator families" +msgstr "연산자 부류 소속 연산자 목록" + +#: describe.c:6355 +msgid "Registered left type" +msgstr "등록된 왼쪽 자료형" + +#: describe.c:6356 +msgid "Registered right type" +msgstr "등록된 오른쪽 자료형" + +#: describe.c:6357 +msgid "Number" +msgstr "" + +#: describe.c:6393 +msgid "List of support functions of operator families" +msgstr "연산자 부류 소속 지원 함수 목록" + +#: help.c:73 #, c-format msgid "" "psql is the PostgreSQL interactive terminal.\n" @@ -2291,12 +2416,12 @@ msgstr "" "psql은 PostgreSQL 대화식 터미널입니다.\n" "\n" -#: help.c:75 help.c:349 help.c:425 help.c:468 +#: help.c:74 help.c:355 help.c:431 help.c:474 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: help.c:76 +#: help.c:75 #, c-format msgid "" " psql [OPTION]... [DBNAME [USERNAME]]\n" @@ -2305,12 +2430,12 @@ msgstr "" " psql [OPTION]... [DBNAME [USERNAME]]\n" "\n" -#: help.c:78 +#: help.c:77 #, c-format msgid "General options:\n" msgstr "일반 옵션:\n" -#: help.c:83 +#: help.c:82 #, c-format msgid "" " -c, --command=COMMAND run only single command (SQL or internal) and " @@ -2318,24 +2443,24 @@ msgid "" msgstr "" " -c, --command=COMMAND 하나의 명령(SQL 또는 내부 명령)만 실행하고 끝냄\n" -#: help.c:84 +#: help.c:83 #, c-format msgid "" " -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" msgstr " -d, --dbname=DBNAME 연결할 데이터베이스 이름(기본 값: \"%s\")\n" -#: help.c:85 +#: help.c:84 #, c-format msgid " -f, --file=FILENAME execute commands from file, then exit\n" msgstr " -f, --file=FILENAME 파일 안에 지정한 명령을 실행하고 끝냄\n" -#: help.c:86 +#: help.c:85 #, c-format msgid " -l, --list list available databases, then exit\n" msgstr "" " -l, --list 사용 가능한 데이터베이스 목록을 표시하고 끝냄\n" -#: help.c:87 +#: help.c:86 #, c-format msgid "" " -v, --set=, --variable=NAME=VALUE\n" @@ -2346,17 +2471,17 @@ msgstr "" " psql 변수 NAME을 VALUE로 설정\n" " (예, -v ON_ERROR_STOP=1)\n" -#: help.c:90 +#: help.c:89 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: help.c:91 +#: help.c:90 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" msgstr " -X, --no-psqlrc 시작 파일(~/.psqlrc)을 읽지 않음\n" -#: help.c:92 +#: help.c:91 #, c-format msgid "" " -1 (\"one\"), --single-transaction\n" @@ -2366,24 +2491,24 @@ msgstr "" " -1 (\"one\"), --single-transaction\n" " 명령 파일을 하나의 트랜잭션으로 실행\n" -#: help.c:94 +#: help.c:93 #, c-format msgid " -?, --help[=options] show this help, then exit\n" msgstr " -?, --help[=options] 이 도움말을 표시하고 종료\n" -#: help.c:95 +#: help.c:94 #, c-format msgid " --help=commands list backslash commands, then exit\n" msgstr "" " --help=commands psql 내장명령어(\\문자로 시작하는)를 표시하고 종" "료\n" -#: help.c:96 +#: help.c:95 #, c-format msgid " --help=variables list special variables, then exit\n" msgstr " --help=variables 특별 변수들 보여주고, 종료\n" -#: help.c:98 +#: help.c:97 #, c-format msgid "" "\n" @@ -2392,63 +2517,63 @@ msgstr "" "\n" "입출력 옵션:\n" -#: help.c:99 +#: help.c:98 #, c-format msgid " -a, --echo-all echo all input from script\n" msgstr " -a, --echo-all 스크립트의 모든 입력 표시\n" -#: help.c:100 +#: help.c:99 #, c-format msgid " -b, --echo-errors echo failed commands\n" msgstr " -b, --echo-errors 실패한 명령들 출력\n" -#: help.c:101 +#: help.c:100 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" msgstr " -e, --echo-queries 서버로 보낸 명령 표시\n" -#: help.c:102 +#: help.c:101 #, c-format msgid "" " -E, --echo-hidden display queries that internal commands generate\n" msgstr " -E, --echo-hidden 내부 명령이 생성하는 쿼리 표시\n" -#: help.c:103 +#: help.c:102 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" msgstr " -L, --log-file=FILENAME 세션 로그를 파일로 보냄\n" -#: help.c:104 +#: help.c:103 #, c-format msgid "" " -n, --no-readline disable enhanced command line editing (readline)\n" msgstr "" " -n, --no-readline 확장된 명령행 편집 기능을 사용중지함(readline)\n" -#: help.c:105 +#: help.c:104 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" msgstr " -o, --output=FILENAME 쿼리 결과를 파일(또는 |파이프)로 보냄\n" -#: help.c:106 +#: help.c:105 #, c-format msgid "" " -q, --quiet run quietly (no messages, only query output)\n" msgstr " -q, --quiet 자동 실행(메시지 없이 쿼리 결과만 표시)\n" -#: help.c:107 +#: help.c:106 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" msgstr " -s, --single-step 단독 순차 모드(각 쿼리 확인)\n" -#: help.c:108 +#: help.c:107 #, c-format msgid "" " -S, --single-line single-line mode (end of line terminates SQL " "command)\n" msgstr " -S, --single-line 한 줄 모드(줄 끝에서 SQL 명령이 종료됨)\n" -#: help.c:110 +#: help.c:109 #, c-format msgid "" "\n" @@ -2457,18 +2582,18 @@ msgstr "" "\n" "출력 형식 옵션:\n" -#: help.c:111 +#: help.c:110 #, c-format msgid " -A, --no-align unaligned table output mode\n" msgstr " -A, --no-align 정렬되지 않은 표 형태의 출력 모드\n" -#: help.c:112 +#: help.c:111 #, c-format msgid "" " --csv CSV (Comma-Separated Values) table output mode\n" msgstr " --csv CSV (쉼표-분리 자료) 테이블 출력 모드\n" -#: help.c:113 +#: help.c:112 #, c-format msgid "" " -F, --field-separator=STRING\n" @@ -2479,12 +2604,12 @@ msgstr "" " unaligned 출력용 필드 구분자 설정(기본 값: \"%s" "\")\n" -#: help.c:116 +#: help.c:115 #, c-format msgid " -H, --html HTML table output mode\n" msgstr " -H, --html HTML 표 형태 출력 모드\n" -#: help.c:117 +#: help.c:116 #, c-format msgid "" " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset " @@ -2492,7 +2617,7 @@ msgid "" msgstr "" " -P, --pset=VAR[=ARG] 인쇄 옵션 VAR을 ARG로 설정(\\pset 명령 참조)\n" -#: help.c:118 +#: help.c:117 #, c-format msgid "" " -R, --record-separator=STRING\n" @@ -2503,12 +2628,12 @@ msgstr "" " unaligned 출력용 레코드 구분자 설정\n" " (기본 값: 줄바꿈 문자)\n" -#: help.c:120 +#: help.c:119 #, c-format msgid " -t, --tuples-only print rows only\n" msgstr " -t, --tuples-only 행만 인쇄\n" -#: help.c:121 +#: help.c:120 #, c-format msgid "" " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, " @@ -2516,12 +2641,12 @@ msgid "" msgstr "" " -T, --table-attr=TEXT HTML table 태그 속성 설정(예: width, border)\n" -#: help.c:122 +#: help.c:121 #, c-format msgid " -x, --expanded turn on expanded table output\n" msgstr " -x, --expanded 확장된 표 형태로 출력\n" -#: help.c:123 +#: help.c:122 #, c-format msgid "" " -z, --field-separator-zero\n" @@ -2531,7 +2656,7 @@ msgstr "" " -z, --field-separator-zero\n" " unaligned 출력용 필드 구분자를 0 바이트로 지정\n" -#: help.c:125 +#: help.c:124 #, c-format msgid "" " -0, --record-separator-zero\n" @@ -2541,7 +2666,7 @@ msgstr "" " -0, --record-separator-zero\n" " unaligned 출력용 레코드 구분자를 0 바이트로 지정\n" -#: help.c:128 +#: help.c:127 #, c-format msgid "" "\n" @@ -2550,7 +2675,7 @@ msgstr "" "\n" "연결 옵션들:\n" -#: help.c:131 +#: help.c:130 #, c-format msgid "" " -h, --host=HOSTNAME database server host or socket directory " @@ -2559,33 +2684,33 @@ msgstr "" " -h, --host=HOSTNAME 데이터베이스 서버 호스트 또는 소켓 디렉터리\n" " (기본값: \"%s\")\n" -#: help.c:132 +#: help.c:131 msgid "local socket" msgstr "로컬 소켓" -#: help.c:135 +#: help.c:134 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" msgstr " -p, --port=PORT 데이터베이스 서버 포트(기본 값: \"%s\")\n" -#: help.c:141 +#: help.c:140 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" msgstr " -U, --username=USERNAME 데이터베이스 사용자 이름(기본 값: \"%s\")\n" -#: help.c:142 +#: help.c:141 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password 암호 프롬프트 표시 안 함\n" -#: help.c:143 +#: help.c:142 #, c-format msgid "" " -W, --password force password prompt (should happen " "automatically)\n" msgstr " -W, --password 암호 입력 프롬프트 보임(자동으로 처리함)\n" -#: help.c:145 +#: help.c:144 #, c-format msgid "" "\n" @@ -2601,10 +2726,15 @@ msgstr "" "설명서에서 psql 섹션을 참조하십시오.\n" "\n" +#: help.c:147 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "문제점 보고 주소: <%s>\n" + #: help.c:148 #, c-format -msgid "Report bugs to .\n" -msgstr "오류보고: .\n" +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" #: help.c:174 #, c-format @@ -2635,67 +2765,69 @@ msgstr "" #: help.c:178 #, c-format msgid "" -" \\g [FILE] or ; execute query (and send results to file or |pipe)\n" +" \\g [(OPTIONS)] [FILE] execute query (and send results to file or |" +"pipe);\n" +" \\g with no arguments is equivalent to a semicolon\n" msgstr "" -" \\g [FILE] 또는 ; 쿼리 실행(및 결과를 파일 또는 |파이프로 보냄)\n" +" \\g [(OPTIONS)] [FILE] 쿼리 실행 (결과는 지정한 파일로, 또는 | 파이프로);\n" +" \\g 명령에서 인자가 없으면 세미콜론과 같음\n" -#: help.c:179 +#: help.c:180 #, c-format msgid "" " \\gdesc describe result of query, without executing it\n" msgstr "" " \\gdesc 쿼리를 실행하지 않고 그 결과 칼럼과 자료형을 출력\n" -#: help.c:180 +#: help.c:181 #, c-format msgid "" " \\gexec execute query, then execute each value in its " "result\n" msgstr " \\gexec 쿼리를 실행하고, 그 결과를 각각 실행 함\n" -#: help.c:181 +#: help.c:182 #, c-format msgid "" " \\gset [PREFIX] execute query and store results in psql variables\n" msgstr " \\gset [PREFIX] 쿼리 실행 뒤 그 결과를 psql 변수로 저장\n" -#: help.c:182 +#: help.c:183 #, c-format -msgid " \\gx [FILE] as \\g, but forces expanded output mode\n" -msgstr "" -" \\gx [FILE] \\g 명령과 같으나, 출력을 확장 모드로 강제함\n" +msgid " \\gx [(OPTIONS)] [FILE] as \\g, but forces expanded output mode\n" +msgstr " \\gx [(OPTIONS)] [FILE] \\g 명령과 같으나, 출력을 확장 모드로 강제함\n" -#: help.c:183 +#: help.c:184 #, c-format msgid " \\q quit psql\n" msgstr " \\q psql 종료\n" -#: help.c:184 +#: help.c:185 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEC] 매 초마다 쿼리 실행\n" -#: help.c:187 +#: help.c:188 #, c-format msgid "Help\n" msgstr "도움말\n" -#: help.c:189 +#: help.c:190 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [commands] psql 역슬래시 명령어 설명\n" -#: help.c:190 +#: help.c:191 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr " \\? options psql 명령행 옵션 도움말 보기\n" -#: help.c:191 +#: help.c:192 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? variables psql 환경 설정 변수들에 설명 보기\n" -#: help.c:192 +#: help.c:193 #, c-format msgid "" " \\h [NAME] help on syntax of SQL commands, * for all " @@ -2704,55 +2836,55 @@ msgstr "" " \\h [NAME] SQL 명령 구문 도움말, 모든 명령을 표시하려면 * 입" "력\n" -#: help.c:195 +#: help.c:196 #, c-format msgid "Query Buffer\n" msgstr "쿼리 버퍼\n" -#: help.c:196 +#: help.c:197 #, c-format msgid "" " \\e [FILE] [LINE] edit the query buffer (or file) with external " "editor\n" msgstr " \\e [FILE] [LINE] 외부 편집기로 쿼리 버퍼(또는 파일) 편집\n" -#: help.c:197 +#: help.c:198 #, c-format msgid "" " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr " \\ef [FUNCNAME [LINE]] 외부 편집기로 해당 함수 내용 편집\n" -#: help.c:198 +#: help.c:199 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr " \\ev [VIEWNAME [LINE]] 외부 편집기로 해당 뷰 정의 편집\n" -#: help.c:199 +#: help.c:200 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p 쿼리 버퍼의 내용 표시\n" -#: help.c:200 +#: help.c:201 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r 쿼리 버퍼 초기화(모두 지움)\n" -#: help.c:202 +#: help.c:203 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [FILE] 기록 표시 또는 파일에 저장\n" -#: help.c:204 +#: help.c:205 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w FILE 쿼리 버퍼를 파일에 기록\n" -#: help.c:207 +#: help.c:208 #, c-format msgid "Input/Output\n" msgstr "입력/출력\n" -#: help.c:208 +#: help.c:209 #, c-format msgid "" " \\copy ... perform SQL COPY with data stream to the client " @@ -2761,17 +2893,19 @@ msgstr "" " \\copy ... 클라이언트 호스트에 있는 자료를 SQL COPY 명령 실" "행\n" -#: help.c:209 +#: help.c:210 #, c-format -msgid " \\echo [STRING] write string to standard output\n" -msgstr " \\echo [STRING] 문자열을 표준 출력에 기록\n" +msgid "" +" \\echo [-n] [STRING] write string to standard output (-n for no " +"newline)\n" +msgstr " \\echo [-n] [STRING] 문자열을 표준 출력에 기록 (-n 줄바꿈 없음)\n" -#: help.c:210 +#: help.c:211 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i FILE 파일에서 명령 실행\n" -#: help.c:211 +#: help.c:212 #, c-format msgid "" " \\ir FILE as \\i, but relative to location of current " @@ -2779,133 +2913,163 @@ msgid "" msgstr "" " \\ir FILE \\i 명령과 같으나, 경로가 현재 위치 기준 상대적\n" -#: help.c:212 +#: help.c:213 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [FILE] 모든 쿼리 결과를 파일 또는 |파이프로 보냄\n" -#: help.c:213 +#: help.c:214 #, c-format msgid "" -" \\qecho [STRING] write string to query output stream (see \\o)\n" -msgstr " \\qecho [STRING] 문자열을 쿼리 출력 스트림에 기록(\\o 참조)\n" +" \\qecho [-n] [STRING] write string to \\o output stream (-n for no " +"newline)\n" +msgstr " \\qecho [-n] [STRING] 문자열을 \\o 출력 스트림에 기록 (-n 줄바꿈 없음)\n" -#: help.c:216 +#: help.c:215 +#, c-format +msgid "" +" \\warn [-n] [STRING] write string to standard error (-n for no " +"newline)\n" +msgstr " \\warn [-n] [STRING] 문자열을 stderr에 기록 (-n 줄바꿈 없음)\n" + +#: help.c:218 #, c-format msgid "Conditional\n" msgstr "조건문\n" -#: help.c:217 +#: help.c:219 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if EXPR 조건문 시작\n" -#: help.c:218 +#: help.c:220 #, c-format msgid "" " \\elif EXPR alternative within current conditional block\n" msgstr " \\elif EXPR else if 구문 시작\n" -#: help.c:219 +#: help.c:221 #, c-format msgid "" " \\else final alternative within current conditional " "block\n" msgstr " \\else 조건문의 그 외 조건\n" -#: help.c:220 +#: help.c:222 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif 조건문 끝\n" -#: help.c:223 +#: help.c:225 #, c-format msgid "Informational\n" msgstr "정보보기\n" -#: help.c:224 +#: help.c:226 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (옵션: S = 시스템 개체 표시, + = 추가 상세 정보)\n" -#: help.c:225 +#: help.c:227 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] 테이블, 뷰 및 시퀀스 목록\n" -#: help.c:226 +#: help.c:228 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] NAME 테이블, 뷰, 시퀀스 또는 인덱스 설명\n" -#: help.c:227 +#: help.c:229 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [PATTERN] 집계 함수 목록\n" -#: help.c:228 +#: help.c:230 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [PATTERN] 접근 방법 목록\n" -#: help.c:229 +#: help.c:231 +#, c-format +msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" +msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] 연산자 클래스 목록\n" + +#: help.c:232 +#, c-format +msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" +msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] 연산자 부류 목록\n" + +#: help.c:233 +#, c-format +msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" +msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] 연산자 부류 소속 연산자 목록\n" + +#: help.c:234 +#, c-format +msgid "" +" \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" +msgstr "" +" \\dAp [AMPTRN [OPFPTRN]] 연산자 가족에 포함된 지원 함수 목록\n" + +#: help.c:235 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [PATTERN] 테이블스페이스 목록\n" -#: help.c:230 +#: help.c:236 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [PATTERN] 문자셋 변환자 목록\n" -#: help.c:231 +#: help.c:237 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [PATTERN] 자료형 변환자 목록\n" -#: help.c:232 +#: help.c:238 #, c-format msgid "" " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr "" " \\dd[S] [PATTERN] 다른 곳에서는 볼 수 없는 객체 설명을 보여줌\n" -#: help.c:233 +#: help.c:239 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [PATTERN] 도메인 목록\n" -#: help.c:234 +#: help.c:240 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [PATTERN] 기본 접근권한 목록\n" -#: help.c:235 +#: help.c:241 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [PATTERN] 외부 테이블 목록\n" -#: help.c:236 +#: help.c:242 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [PATTERN] 외부 테이블 목록\n" -#: help.c:237 +#: help.c:243 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [PATTERN] 외부 서버 목록\n" -#: help.c:238 +#: help.c:244 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [PATTERN] 사용자 매핑 목록\n" -#: help.c:239 +#: help.c:245 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [PATTERN] 외부 데이터 래퍼 목록\n" -#: help.c:240 +#: help.c:246 #, c-format msgid "" " \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] " @@ -2913,73 +3077,73 @@ msgid "" msgstr "" " \\df[anptw][S+] [PATRN] [agg/normal/procedures/trigger/window] 함수 목록\n" -#: help.c:241 +#: help.c:247 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [PATTERN] 텍스트 검색 구성 목록\n" -#: help.c:242 +#: help.c:248 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [PATTERN] 텍스트 검색 사전 목록\n" -#: help.c:243 +#: help.c:249 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [PATTERN] 텍스트 검색 파서 목록\n" -#: help.c:244 +#: help.c:250 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [PATTERN] 텍스트 검색 템플릿 목록\n" -#: help.c:245 +#: help.c:251 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [PATTERN] 롤 목록\n" -#: help.c:246 +#: help.c:252 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [PATTERN] 인덱스 목록\n" -#: help.c:247 +#: help.c:253 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl 큰 개체 목록, \\lo_list 명령과 같음\n" -#: help.c:248 +#: help.c:254 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [PATTERN] 프로시져 언어 목록\n" -#: help.c:249 +#: help.c:255 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [PATTERN] materialized 뷰 목록\n" -#: help.c:250 +#: help.c:256 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [PATTERN] 스키마 목록\n" -#: help.c:251 +#: help.c:257 #, c-format msgid " \\do[S] [PATTERN] list operators\n" msgstr " \\do[S] [PATTERN] 연산자 목록\n" -#: help.c:252 +#: help.c:258 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [PATTERN] collation 목록\n" -#: help.c:253 +#: help.c:259 #, c-format msgid "" " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr " \\dp [PATTERN] 테이블, 뷰 및 시퀀스 액세스 권한 목록\n" -#: help.c:254 +#: help.c:260 #, c-format msgid "" " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations " @@ -2987,95 +3151,95 @@ msgid "" msgstr "" " \\dP[itn+] [PATTERN] 파티션 릴레이션 목록 [인덱스/테이블만] [n=nested]\n" -#: help.c:255 +#: help.c:261 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [PATRN1 [PATRN2]] 데이터베이스별 롤 설정 목록\n" -#: help.c:256 +#: help.c:262 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[+] [PATTERN] 복제 발행 목록\n" -#: help.c:257 +#: help.c:263 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [PATTERN] 복제 구독 목록\n" -#: help.c:258 +#: help.c:264 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [PATTERN] 시퀀스 목록\n" -#: help.c:259 +#: help.c:265 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [PATTERN] 테이블 목록\n" -#: help.c:260 +#: help.c:266 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [PATTERN] 데이터 형식 목록\n" -#: help.c:261 +#: help.c:267 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [PATTERN] 롤 목록\n" -#: help.c:262 +#: help.c:268 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [PATTERN] 뷰 목록\n" -#: help.c:263 +#: help.c:269 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [PATTERN] 확장 모듈 목록\n" -#: help.c:264 +#: help.c:270 #, c-format msgid " \\dy [PATTERN] list event triggers\n" msgstr " \\dy [PATTERN] 이벤트 트리거 목록\n" -#: help.c:265 +#: help.c:271 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [PATTERN] 데이터베이스 목록\n" -#: help.c:266 +#: help.c:272 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] 함수이름 함수 정의 보기\n" -#: help.c:267 +#: help.c:273 #, c-format msgid " \\sv[+] VIEWNAME show a view's definition\n" msgstr " \\sv[+] 뷰이름 뷰 정의 보기\n" -#: help.c:268 +#: help.c:274 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [PATTERN] \\dp와 같음\n" -#: help.c:271 +#: help.c:277 #, c-format msgid "Formatting\n" msgstr "출력 형식\n" -#: help.c:272 +#: help.c:278 #, c-format msgid "" " \\a toggle between unaligned and aligned output mode\n" msgstr "" " \\a 정렬되지 않은 출력 모드와 정렬된 출력 모드 전환\n" -#: help.c:273 +#: help.c:279 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr "" " \\C [STRING] 테이블 제목 설정 또는 값이 없는 경우 설정 안 함\n" -#: help.c:274 +#: help.c:280 #, c-format msgid "" " \\f [STRING] show or set field separator for unaligned query " @@ -3083,12 +3247,12 @@ msgid "" msgstr "" " \\f [STRING] unaligned 출력에 대해 필드 구분자 표시 또는 설정\n" -#: help.c:275 +#: help.c:281 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H HTML 출력 모드 전환(현재 %s)\n" -#: help.c:277 +#: help.c:283 #, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" @@ -3107,12 +3271,12 @@ msgstr "" " unicode_border_linestyle|unicode_column_linestyle|\n" " unicode_header_linestyle)\n" -#: help.c:284 +#: help.c:290 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] 행만 표시(현재 %s)\n" -#: help.c:286 +#: help.c:292 #, c-format msgid "" " \\T [STRING] set HTML
tag attributes, or unset if none\n" @@ -3120,17 +3284,17 @@ msgstr "" " \\T [STRING] HTML
태그 속성 설정 또는 비었는 경우 설정 " "안 함\n" -#: help.c:287 +#: help.c:293 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr " \\x [on|off|auto] 확장된 출력 전환 (현재 %s)\n" -#: help.c:291 +#: help.c:297 #, c-format msgid "Connection\n" msgstr "연결\n" -#: help.c:293 +#: help.c:299 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3139,7 +3303,7 @@ msgstr "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " 새 데이터베이스에 접속 (현재 \"%s\")\n" -#: help.c:297 +#: help.c:303 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3148,61 +3312,61 @@ msgstr "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " 새 데이터베이스에 접속 (현재 접속해 있지 않음)\n" -#: help.c:299 +#: help.c:305 #, c-format msgid "" " \\conninfo display information about current connection\n" msgstr " \\conninfo 현재 데이터베이스 접속 정보 보기\n" -#: help.c:300 +#: help.c:306 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [ENCODING] 클라이언트 인코딩 표시 또는 설정\n" -#: help.c:301 +#: help.c:307 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr " \\password [USERNAME] 사용자 암호를 안전하게 변경\n" -#: help.c:304 +#: help.c:310 #, c-format msgid "Operating System\n" msgstr "운영 체제\n" -#: help.c:305 +#: help.c:311 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [DIR] 현재 작업 디렉터리 변경\n" -#: help.c:306 +#: help.c:312 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv NAME [VALUE] 환경 변수 지정 및 해제\n" -#: help.c:307 +#: help.c:313 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr " \\timing [on|off] 명령 실행 시간 전환(현재 %s)\n" -#: help.c:309 +#: help.c:315 #, c-format msgid "" " \\! [COMMAND] execute command in shell or start interactive " "shell\n" msgstr " \\! [COMMAND] 셸 명령 실행 또는 대화식 셸 시작\n" -#: help.c:312 +#: help.c:318 #, c-format msgid "Variables\n" msgstr "변수\n" -#: help.c:313 +#: help.c:319 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr "" " \\prompt [TEXT] NAME 사용자에게 내부 변수를 설정하라는 메시지 표시\n" -#: help.c:314 +#: help.c:320 #, c-format msgid "" " \\set [NAME [VALUE]] set internal variable, or list all if no " @@ -3211,17 +3375,17 @@ msgstr "" " \\set [NAME [VALUE]] 내부 변수 설정 또는 미지정 경우 모든 변수 목록 표" "시\n" -#: help.c:315 +#: help.c:321 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset NAME 내부 변수 설정 해제(삭제)\n" -#: help.c:318 +#: help.c:324 #, c-format msgid "Large Objects\n" msgstr "큰 개체\n" -#: help.c:319 +#: help.c:325 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -3234,19 +3398,19 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID 큰 개체 작업\n" -#: help.c:346 +#: help.c:352 #, c-format msgid "" "List of specially treated variables\n" "\n" msgstr "특별한 기능 설정 변수 목록\n" -#: help.c:348 +#: help.c:354 #, c-format msgid "psql variables:\n" msgstr "psql 변수들:\n" -#: help.c:350 +#: help.c:356 #, c-format msgid "" " psql --set=NAME=VALUE\n" @@ -3257,7 +3421,7 @@ msgstr "" " 또는 psql 명령 모드에서는 \\set NAME VALUE\n" "\n" -#: help.c:352 +#: help.c:358 #, c-format msgid "" " AUTOCOMMIT\n" @@ -3266,7 +3430,7 @@ msgstr "" " AUTOCOMMIT\n" " 설정 되면, SQL 명령이 정상 실행 되면 자동 커밋 함\n" -#: help.c:354 +#: help.c:360 #, c-format msgid "" " COMP_KEYWORD_CASE\n" @@ -3277,7 +3441,7 @@ msgstr "" " SQL 키워드 자동완성에서 대소문자 처리\n" " [lower, upper, preserve-lower, preserve-upper]\n" -#: help.c:357 +#: help.c:363 #, c-format msgid "" " DBNAME\n" @@ -3286,7 +3450,7 @@ msgstr "" " DBNAME\n" " 현재 접속한 데이터베이스 이름\n" -#: help.c:359 +#: help.c:365 #, c-format msgid "" " ECHO\n" @@ -3297,7 +3461,7 @@ msgstr "" " 입력을 표준 출력으로 보낼 종류\n" " [all, errors, none, queries]\n" -#: help.c:362 +#: help.c:368 #, c-format msgid "" " ECHO_HIDDEN\n" @@ -3308,7 +3472,7 @@ msgstr "" " 지정 되면 psql 내장 명령어의 내부 쿼리를 출력함;\n" " \"noexec\" 값으로 설정하면, 실행되지 않고 쿼리만 보여줌\n" -#: help.c:365 +#: help.c:371 #, c-format msgid "" " ENCODING\n" @@ -3317,7 +3481,7 @@ msgstr "" " ENCODING\n" " 현재 클라이언트 인코딩 지정\n" -#: help.c:367 +#: help.c:373 #, c-format msgid "" " ERROR\n" @@ -3326,7 +3490,7 @@ msgstr "" " ERROR\n" " 마지막 쿼리가 실패했으면 true, 아니면 false\n" -#: help.c:369 +#: help.c:375 #, c-format msgid "" " FETCH_COUNT\n" @@ -3336,7 +3500,7 @@ msgstr "" " FETCH_COUNT\n" " 쿼리 결과에 대해서 출력할 최대 로우 개수 (0=제한없음)\n" -#: help.c:371 +#: help.c:377 #, c-format msgid "" " HIDE_TABLEAM\n" @@ -3345,7 +3509,7 @@ msgstr "" " HIDE_TABLEAM\n" " 지정하면 테이블 접근 방법을 보여주지 않음\n" -#: help.c:373 +#: help.c:379 #, c-format msgid "" " HISTCONTROL\n" @@ -3354,7 +3518,7 @@ msgstr "" " HISTCONTROL\n" " 명령 내역 처리 방법 [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:375 +#: help.c:381 #, c-format msgid "" " HISTFILE\n" @@ -3363,7 +3527,7 @@ msgstr "" " HISTFILE\n" " 명령 내역을 저장할 파일 이름\n" -#: help.c:377 +#: help.c:383 #, c-format msgid "" " HISTSIZE\n" @@ -3372,7 +3536,7 @@ msgstr "" " HISTSIZE\n" " 명령 내역 최대 보관 개수\n" -#: help.c:379 +#: help.c:385 #, c-format msgid "" " HOST\n" @@ -3381,7 +3545,7 @@ msgstr "" " HOST\n" " 현재 접속한 데이터베이스 서버 호스트\n" -#: help.c:381 +#: help.c:387 #, c-format msgid "" " IGNOREEOF\n" @@ -3390,7 +3554,7 @@ msgstr "" " IGNOREEOF\n" " 대화형 세션 종료를 위한 EOF 개수\n" -#: help.c:383 +#: help.c:389 #, c-format msgid "" " LASTOID\n" @@ -3399,7 +3563,7 @@ msgstr "" " LASTOID\n" " 마지막 영향 받은 OID 값\n" -#: help.c:385 +#: help.c:391 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" @@ -3411,7 +3575,7 @@ msgstr "" " LAST_ERROR_SQLSTATE\n" " 마지막 오류 메시지와 SQLSTATE, 정상이면, 빈 문자열과 \"00000\"\n" -#: help.c:388 +#: help.c:394 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" @@ -3420,7 +3584,7 @@ msgstr "" " ON_ERROR_ROLLBACK\n" " 설정하면 오류 발생시에도 트랜잭션 중지 안함 (savepoint 암묵적 사용)\n" -#: help.c:390 +#: help.c:396 #, c-format msgid "" " ON_ERROR_STOP\n" @@ -3429,7 +3593,7 @@ msgstr "" " ON_ERROR_STOP\n" " 배치 작업 시 오류가 발생하면 중지함\n" -#: help.c:392 +#: help.c:398 #, c-format msgid "" " PORT\n" @@ -3438,7 +3602,7 @@ msgstr "" " PORT\n" " 현재 접속한 서버 포트\n" -#: help.c:394 +#: help.c:400 #, c-format msgid "" " PROMPT1\n" @@ -3447,7 +3611,7 @@ msgstr "" " PROMPT1\n" " 기본 psql 프롬프트 정의\n" -#: help.c:396 +#: help.c:402 #, c-format msgid "" " PROMPT2\n" @@ -3457,7 +3621,7 @@ msgstr "" " PROMPT2\n" " 아직 구문이 덜 끝난 명령행의 프롬프트\n" -#: help.c:398 +#: help.c:404 #, c-format msgid "" " PROMPT3\n" @@ -3466,7 +3630,7 @@ msgstr "" " PROMPT3\n" " COPY ... FROM STDIN 작업시 보일 프롬프트\n" -#: help.c:400 +#: help.c:406 #, c-format msgid "" " QUIET\n" @@ -3475,7 +3639,7 @@ msgstr "" " QUIET\n" " 조용히 실행 (-q 옵션과 같음)\n" -#: help.c:402 +#: help.c:408 #, c-format msgid "" " ROW_COUNT\n" @@ -3484,7 +3648,7 @@ msgstr "" " ROW_COUNT\n" " 마지막 쿼리 작업 대상 로우 수, 또는 0\n" -#: help.c:404 +#: help.c:410 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3495,7 +3659,7 @@ msgstr "" " SERVER_VERSION_NUM\n" " 문자열 버전 정보나, 숫자 형식 버전 정보\n" -#: help.c:407 +#: help.c:413 #, c-format msgid "" " SHOW_CONTEXT\n" @@ -3504,7 +3668,7 @@ msgstr "" " SHOW_CONTEXT\n" " 상황별 자세한 메시지 내용 출력 제어 [never, errors, always]\n" -#: help.c:409 +#: help.c:415 #, c-format msgid "" " SINGLELINE\n" @@ -3513,7 +3677,7 @@ msgstr "" " SINGLELINE\n" " 한 줄에 하나의 SQL 명령 실행 (-S 옵션과 같음)\n" -#: help.c:411 +#: help.c:417 #, c-format msgid "" " SINGLESTEP\n" @@ -3522,7 +3686,7 @@ msgstr "" " SINGLESTEP\n" " 각 명령을 확인하며 실행 (-s 옵션과 같음)\n" -#: help.c:413 +#: help.c:419 #, c-format msgid "" " SQLSTATE\n" @@ -3531,7 +3695,7 @@ msgstr "" " SQLSTATE\n" " 마지막 쿼리의 SQLSTATE 값, 오류가 없으면 \"00000\"\n" -#: help.c:415 +#: help.c:421 #, c-format msgid "" " USER\n" @@ -3540,7 +3704,7 @@ msgstr "" " USER\n" " 현재 접속한 데이터베이스 사용자\n" -#: help.c:417 +#: help.c:423 #, c-format msgid "" " VERBOSITY\n" @@ -3549,7 +3713,7 @@ msgstr "" " VERBOSITY\n" " 오류 출력시 자세히 볼 내용 범위 [default, verbose, terse, sqlstate]\n" -#: help.c:419 +#: help.c:425 #, c-format msgid "" " VERSION\n" @@ -3562,7 +3726,7 @@ msgstr "" " VERSION_NUM\n" " psql 버전 (자세한 버전, 단순한 버전, 숫자형 버전)\n" -#: help.c:424 +#: help.c:430 #, c-format msgid "" "\n" @@ -3571,7 +3735,7 @@ msgstr "" "\n" "출력 설정들:\n" -#: help.c:426 +#: help.c:432 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3582,7 +3746,7 @@ msgstr "" " 또는 psql 명령 모드에서는 \\pset NAME [VALUE]\n" "\n" -#: help.c:428 +#: help.c:434 #, c-format msgid "" " border\n" @@ -3591,7 +3755,7 @@ msgstr "" " border\n" " 테두리 모양 (숫자)\n" -#: help.c:430 +#: help.c:436 #, c-format msgid "" " columns\n" @@ -3600,7 +3764,7 @@ msgstr "" " columns\n" " 줄바꿈을 위한 너비 지정\n" -#: help.c:432 +#: help.c:438 #, c-format msgid "" " expanded (or x)\n" @@ -3609,7 +3773,7 @@ msgstr "" " expanded (또는 x)\n" " 확장된 출력 전환 [on, off, auto]\n" -#: help.c:434 +#: help.c:440 #, c-format msgid "" " fieldsep\n" @@ -3618,7 +3782,7 @@ msgstr "" " fieldsep\n" " unaligned 출력용 필드 구분자 (초기값 \"%s\"')\n" -#: help.c:437 +#: help.c:443 #, c-format msgid "" " fieldsep_zero\n" @@ -3627,7 +3791,7 @@ msgstr "" " fieldsep_zero\n" " unaligned 출력용 필드 구분자를 0 바이트로 지정\n" -#: help.c:439 +#: help.c:445 #, c-format msgid "" " footer\n" @@ -3636,7 +3800,7 @@ msgstr "" " footer\n" " 테이블 꼬리말 보이기 전환 [on, off]\n" -#: help.c:441 +#: help.c:447 #, c-format msgid "" " format\n" @@ -3645,7 +3809,7 @@ msgstr "" " format\n" " 출력 양식 지정 [unaligned, aligned, wrapped, html, asciidoc, ...]\n" -#: help.c:443 +#: help.c:449 #, c-format msgid "" " linestyle\n" @@ -3654,7 +3818,7 @@ msgstr "" " linestyle\n" " 테두리 선 모양 지정 [ascii, old-ascii, unicode]\n" -#: help.c:445 +#: help.c:451 #, c-format msgid "" " null\n" @@ -3663,7 +3827,7 @@ msgstr "" " null\n" " null 값 출력 방법\n" -#: help.c:447 +#: help.c:453 #, c-format msgid "" " numericlocale\n" @@ -3673,7 +3837,7 @@ msgstr "" " numericlocale\n" " 숫자 출력에서 로케일 기반 천자리 분리 문자 활성화 [on, off]\n" -#: help.c:449 +#: help.c:455 #, c-format msgid "" " pager\n" @@ -3682,7 +3846,7 @@ msgstr "" " pager\n" " 외부 페이지 단위 보기 도구 사용 여부 [yes, no, always]\n" -#: help.c:451 +#: help.c:457 #, c-format msgid "" " recordsep\n" @@ -3691,7 +3855,7 @@ msgstr "" " recordsep\n" " unaligned 출력용 레코드(줄) 구분자\n" -#: help.c:453 +#: help.c:459 #, c-format msgid "" " recordsep_zero\n" @@ -3700,7 +3864,7 @@ msgstr "" " recordsep_zero\n" " unaligned 출력용 레코드 구분자를 0 바이트로 지정\n" -#: help.c:455 +#: help.c:461 #, c-format msgid "" " tableattr (or T)\n" @@ -3711,7 +3875,7 @@ msgstr "" " html 테이블 태그에 대한 속성이나,\n" " latex-longtable 양식에서 왼쪽 정렬 자료용 칼럼 넓이 지정\n" -#: help.c:458 +#: help.c:464 #, c-format msgid "" " title\n" @@ -3720,7 +3884,7 @@ msgstr "" " title\n" " 테이블 제목 지정\n" -#: help.c:460 +#: help.c:466 #, c-format msgid "" " tuples_only\n" @@ -3729,7 +3893,7 @@ msgstr "" " tuples_only\n" " 지정되면, 자료만 보임\n" -#: help.c:462 +#: help.c:468 #, c-format msgid "" " unicode_border_linestyle\n" @@ -3742,7 +3906,7 @@ msgstr "" " unicode_header_linestyle\n" " 유니코드 선 종류 [single, double]\n" -#: help.c:467 +#: help.c:473 #, c-format msgid "" "\n" @@ -3751,7 +3915,7 @@ msgstr "" "\n" "OS 환경 변수들:\n" -#: help.c:471 +#: help.c:477 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -3762,7 +3926,7 @@ msgstr "" " 또는 psql 명령 모드에서는 \\setenv NAME [VALUE]\n" "\n" -#: help.c:473 +#: help.c:479 #, c-format msgid "" " set NAME=VALUE\n" @@ -3775,7 +3939,7 @@ msgstr "" " 또는 psql 명령 모드에서는 \\setenv NAME [VALUE]\n" "\n" -#: help.c:476 +#: help.c:482 #, c-format msgid "" " COLUMNS\n" @@ -3784,7 +3948,7 @@ msgstr "" " COLUMNS\n" " 다음 줄로 넘어갈 칼럼 수\n" -#: help.c:478 +#: help.c:484 #, c-format msgid "" " PGAPPNAME\n" @@ -3793,7 +3957,7 @@ msgstr "" " PGAPPNAME\n" " application_name 변수값으로 사용됨\n" -#: help.c:480 +#: help.c:486 #, c-format msgid "" " PGDATABASE\n" @@ -3802,7 +3966,7 @@ msgstr "" " PGDATABASE\n" " 접속할 데이터베이스 이름\n" -#: help.c:482 +#: help.c:488 #, c-format msgid "" " PGHOST\n" @@ -3811,7 +3975,7 @@ msgstr "" " PGHOST\n" " 서버 접속용 호스트 이름\n" -#: help.c:484 +#: help.c:490 #, c-format msgid "" " PGPASSWORD\n" @@ -3820,7 +3984,7 @@ msgstr "" " PGPASSWORD\n" " 서버 접속 비밀번호 (보안에 취약함)\n" -#: help.c:486 +#: help.c:492 #, c-format msgid "" " PGPASSFILE\n" @@ -3829,7 +3993,7 @@ msgstr "" " PGPASSFILE\n" " 서버 접속용 비밀번호가 저장된 파일 이름\n" -#: help.c:488 +#: help.c:494 #, c-format msgid "" " PGPORT\n" @@ -3838,7 +4002,7 @@ msgstr "" " PGPORT\n" " 서버 접속용 포트\n" -#: help.c:490 +#: help.c:496 #, c-format msgid "" " PGUSER\n" @@ -3847,7 +4011,7 @@ msgstr "" " PGUSER\n" " 서버 접속용 데이터베이스 사용자 이름\n" -#: help.c:492 +#: help.c:498 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" @@ -3856,7 +4020,7 @@ msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" " \\e, \\ef, \\ev 명령에서 사용할 외부 편집기 경로\n" -#: help.c:494 +#: help.c:500 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" @@ -3865,7 +4029,7 @@ msgstr "" " PSQL_EDITOR_LINENUMBER_ARG\n" " 외부 편집기 호출 시 사용할 줄번호 선택 옵션\n" -#: help.c:496 +#: help.c:502 #, c-format msgid "" " PSQL_HISTORY\n" @@ -3874,7 +4038,7 @@ msgstr "" " PSQL_HISTORY\n" " 사용자 .psql_history 파일 임의 지정\n" -#: help.c:498 +#: help.c:504 #, c-format msgid "" " PSQL_PAGER, PAGER\n" @@ -3883,7 +4047,7 @@ msgstr "" " PAGER\n" " 페이지 단위 보기에서 사용할 프로그램\n" -#: help.c:500 +#: help.c:506 #, c-format msgid "" " PSQLRC\n" @@ -3892,7 +4056,7 @@ msgstr "" " PSQLRC\n" " 사용자 .psqlrc 파일의 임의 지정\n" -#: help.c:502 +#: help.c:508 #, c-format msgid "" " SHELL\n" @@ -3901,7 +4065,7 @@ msgstr "" " SHELL\n" " \\! 명령에서 사용할 쉘\n" -#: help.c:504 +#: help.c:510 #, c-format msgid "" " TMPDIR\n" @@ -3910,11 +4074,11 @@ msgstr "" " TMPDIR\n" " 임시 파일을 사용할 디렉터리\n" -#: help.c:548 +#: help.c:554 msgid "Available help:\n" msgstr "사용 가능한 도움말:\n" -#: help.c:636 +#: help.c:642 #, c-format msgid "" "Command: %s\n" @@ -3932,7 +4096,7 @@ msgstr "" "URL: %s\n" "\n" -#: help.c:655 +#: help.c:661 #, c-format msgid "" "No help available for \"%s\".\n" @@ -3941,17 +4105,17 @@ msgstr "" "\"%s\" 명령에 대한 도움말 없음.\n" "\\h 명령을 인자 없이 호출 하면 사용 가능한 모든 명령 보여줌.\n" -#: input.c:218 +#: input.c:217 #, c-format msgid "could not read from input file: %m" msgstr "입력 파일을 읽을 수 없음: %m" -#: input.c:472 input.c:510 +#: input.c:471 input.c:509 #, c-format msgid "could not save history to file \"%s\": %m" msgstr "history를 \"%s\" 파일로 저장할 수 없음: %m" -#: input.c:529 +#: input.c:528 #, c-format msgid "history is not supported by this installation" msgstr "히스토리 기능은 이 설치본에서는 지원하지 않음" @@ -3984,12 +4148,12 @@ msgstr "대형 객체들" msgid "\\if: escaped" msgstr "\\if: escaped" -#: mainloop.c:183 +#: mainloop.c:195 #, c-format msgid "Use \"\\q\" to leave %s.\n" msgstr "마치려면 \"\\q\"를 입력하세요: %s\n" -#: mainloop.c:205 +#: mainloop.c:217 msgid "" "The input is a PostgreSQL custom-format dump.\n" "Use the pg_restore command-line client to restore this dump to a database.\n" @@ -3998,19 +4162,19 @@ msgstr "" "이 덤프 내용을 데이터베이스에 반영하려면,\n" "pg_restore 명령행 클라이언트를 사용하세요.\n" -#: mainloop.c:282 +#: mainloop.c:298 msgid "Use \\? for help or press control-C to clear the input buffer." msgstr "\\? 도움말, Ctrl-C 입력 버퍼 비우기" -#: mainloop.c:284 +#: mainloop.c:300 msgid "Use \\? for help." msgstr "도움말을 보려면 \\?를 입력하십시오." -#: mainloop.c:288 +#: mainloop.c:304 msgid "You are using psql, the command-line interface to PostgreSQL." msgstr "PostgreSQL에 대한 명령행 인터페이스인 psql을 사용하고 있습니다." -#: mainloop.c:289 +#: mainloop.c:305 #, c-format msgid "" "Type: \\copyright for distribution terms\n" @@ -4025,25 +4189,25 @@ msgstr "" " \\g 또는 명령 끝에 세미콜론(;) 쿼리 실행\n" " \\q 마침\n" -#: mainloop.c:313 +#: mainloop.c:329 msgid "Use \\q to quit." msgstr "\\q 마침" -#: mainloop.c:316 mainloop.c:340 +#: mainloop.c:332 mainloop.c:356 msgid "Use control-D to quit." msgstr "마침은 Ctrl-D" -#: mainloop.c:318 mainloop.c:342 +#: mainloop.c:334 mainloop.c:358 msgid "Use control-C to quit." msgstr "마침은 Ctrl-C" -#: mainloop.c:449 mainloop.c:591 +#: mainloop.c:465 mainloop.c:613 #, c-format msgid "query ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "" "쿼리 무시됨; 현재 \\if 블록을 끝내려면 \\endif 또는 Ctrl-C 키를 사용하세요." -#: mainloop.c:609 +#: mainloop.c:631 #, c-format msgid "reached EOF without finding closing \\endif(s)" msgstr "\\endif 없이 EOF 도달" @@ -4079,48 +4243,48 @@ msgstr "%s: 메모리 부족" #: sql_help.c:985 sql_help.c:990 sql_help.c:995 sql_help.c:1014 sql_help.c:1025 #: sql_help.c:1027 sql_help.c:1046 sql_help.c:1056 sql_help.c:1058 #: sql_help.c:1060 sql_help.c:1072 sql_help.c:1076 sql_help.c:1078 -#: sql_help.c:1089 sql_help.c:1091 sql_help.c:1093 sql_help.c:1109 -#: sql_help.c:1111 sql_help.c:1115 sql_help.c:1118 sql_help.c:1119 -#: sql_help.c:1120 sql_help.c:1123 sql_help.c:1125 sql_help.c:1258 -#: sql_help.c:1260 sql_help.c:1263 sql_help.c:1266 sql_help.c:1268 -#: sql_help.c:1270 sql_help.c:1273 sql_help.c:1276 sql_help.c:1386 -#: sql_help.c:1388 sql_help.c:1390 sql_help.c:1393 sql_help.c:1414 -#: sql_help.c:1417 sql_help.c:1420 sql_help.c:1423 sql_help.c:1427 -#: sql_help.c:1429 sql_help.c:1431 sql_help.c:1433 sql_help.c:1447 -#: sql_help.c:1450 sql_help.c:1452 sql_help.c:1454 sql_help.c:1464 -#: sql_help.c:1466 sql_help.c:1476 sql_help.c:1478 sql_help.c:1488 -#: sql_help.c:1491 sql_help.c:1513 sql_help.c:1515 sql_help.c:1517 -#: sql_help.c:1520 sql_help.c:1522 sql_help.c:1524 sql_help.c:1527 -#: sql_help.c:1577 sql_help.c:1619 sql_help.c:1622 sql_help.c:1624 -#: sql_help.c:1626 sql_help.c:1628 sql_help.c:1630 sql_help.c:1633 -#: sql_help.c:1683 sql_help.c:1699 sql_help.c:1920 sql_help.c:1989 -#: sql_help.c:2008 sql_help.c:2021 sql_help.c:2078 sql_help.c:2085 -#: sql_help.c:2095 sql_help.c:2115 sql_help.c:2140 sql_help.c:2158 -#: sql_help.c:2187 sql_help.c:2282 sql_help.c:2324 sql_help.c:2347 -#: sql_help.c:2368 sql_help.c:2369 sql_help.c:2406 sql_help.c:2426 -#: sql_help.c:2448 sql_help.c:2462 sql_help.c:2482 sql_help.c:2505 -#: sql_help.c:2535 sql_help.c:2560 sql_help.c:2606 sql_help.c:2884 -#: sql_help.c:2897 sql_help.c:2914 sql_help.c:2930 sql_help.c:2970 -#: sql_help.c:3022 sql_help.c:3026 sql_help.c:3028 sql_help.c:3034 -#: sql_help.c:3052 sql_help.c:3079 sql_help.c:3114 sql_help.c:3126 -#: sql_help.c:3135 sql_help.c:3179 sql_help.c:3193 sql_help.c:3221 -#: sql_help.c:3229 sql_help.c:3237 sql_help.c:3245 sql_help.c:3253 -#: sql_help.c:3261 sql_help.c:3269 sql_help.c:3277 sql_help.c:3286 -#: sql_help.c:3297 sql_help.c:3305 sql_help.c:3313 sql_help.c:3321 -#: sql_help.c:3329 sql_help.c:3339 sql_help.c:3348 sql_help.c:3357 -#: sql_help.c:3365 sql_help.c:3375 sql_help.c:3386 sql_help.c:3394 -#: sql_help.c:3403 sql_help.c:3414 sql_help.c:3423 sql_help.c:3431 -#: sql_help.c:3439 sql_help.c:3447 sql_help.c:3455 sql_help.c:3463 -#: sql_help.c:3471 sql_help.c:3479 sql_help.c:3487 sql_help.c:3495 -#: sql_help.c:3503 sql_help.c:3520 sql_help.c:3529 sql_help.c:3537 -#: sql_help.c:3554 sql_help.c:3569 sql_help.c:3839 sql_help.c:3890 -#: sql_help.c:3919 sql_help.c:3927 sql_help.c:4360 sql_help.c:4408 -#: sql_help.c:4549 +#: sql_help.c:1090 sql_help.c:1092 sql_help.c:1094 sql_help.c:1096 +#: sql_help.c:1112 sql_help.c:1114 sql_help.c:1118 sql_help.c:1121 +#: sql_help.c:1122 sql_help.c:1123 sql_help.c:1126 sql_help.c:1128 +#: sql_help.c:1262 sql_help.c:1264 sql_help.c:1267 sql_help.c:1270 +#: sql_help.c:1272 sql_help.c:1274 sql_help.c:1277 sql_help.c:1280 +#: sql_help.c:1391 sql_help.c:1393 sql_help.c:1395 sql_help.c:1398 +#: sql_help.c:1419 sql_help.c:1422 sql_help.c:1425 sql_help.c:1428 +#: sql_help.c:1432 sql_help.c:1434 sql_help.c:1436 sql_help.c:1438 +#: sql_help.c:1452 sql_help.c:1455 sql_help.c:1457 sql_help.c:1459 +#: sql_help.c:1469 sql_help.c:1471 sql_help.c:1481 sql_help.c:1483 +#: sql_help.c:1493 sql_help.c:1496 sql_help.c:1519 sql_help.c:1521 +#: sql_help.c:1523 sql_help.c:1525 sql_help.c:1528 sql_help.c:1530 +#: sql_help.c:1533 sql_help.c:1536 sql_help.c:1586 sql_help.c:1629 +#: sql_help.c:1632 sql_help.c:1634 sql_help.c:1636 sql_help.c:1639 +#: sql_help.c:1641 sql_help.c:1643 sql_help.c:1646 sql_help.c:1696 +#: sql_help.c:1712 sql_help.c:1933 sql_help.c:2002 sql_help.c:2021 +#: sql_help.c:2034 sql_help.c:2091 sql_help.c:2098 sql_help.c:2108 +#: sql_help.c:2129 sql_help.c:2155 sql_help.c:2173 sql_help.c:2200 +#: sql_help.c:2295 sql_help.c:2340 sql_help.c:2364 sql_help.c:2387 +#: sql_help.c:2391 sql_help.c:2425 sql_help.c:2445 sql_help.c:2467 +#: sql_help.c:2481 sql_help.c:2501 sql_help.c:2524 sql_help.c:2554 +#: sql_help.c:2579 sql_help.c:2625 sql_help.c:2903 sql_help.c:2916 +#: sql_help.c:2933 sql_help.c:2949 sql_help.c:2989 sql_help.c:3041 +#: sql_help.c:3045 sql_help.c:3047 sql_help.c:3053 sql_help.c:3071 +#: sql_help.c:3098 sql_help.c:3133 sql_help.c:3145 sql_help.c:3154 +#: sql_help.c:3198 sql_help.c:3212 sql_help.c:3240 sql_help.c:3248 +#: sql_help.c:3260 sql_help.c:3270 sql_help.c:3278 sql_help.c:3286 +#: sql_help.c:3294 sql_help.c:3302 sql_help.c:3311 sql_help.c:3322 +#: sql_help.c:3330 sql_help.c:3338 sql_help.c:3346 sql_help.c:3354 +#: sql_help.c:3364 sql_help.c:3373 sql_help.c:3382 sql_help.c:3390 +#: sql_help.c:3400 sql_help.c:3411 sql_help.c:3419 sql_help.c:3428 +#: sql_help.c:3439 sql_help.c:3448 sql_help.c:3456 sql_help.c:3464 +#: sql_help.c:3472 sql_help.c:3480 sql_help.c:3488 sql_help.c:3496 +#: sql_help.c:3504 sql_help.c:3512 sql_help.c:3520 sql_help.c:3528 +#: sql_help.c:3545 sql_help.c:3554 sql_help.c:3562 sql_help.c:3579 +#: sql_help.c:3594 sql_help.c:3869 sql_help.c:3920 sql_help.c:3949 +#: sql_help.c:3962 sql_help.c:4407 sql_help.c:4455 sql_help.c:4596 msgid "name" msgstr "이름" -#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1770 -#: sql_help.c:3194 sql_help.c:4146 +#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1783 +#: sql_help.c:3213 sql_help.c:4193 msgid "aggregate_signature" msgstr "집계함수_식별구문" @@ -4129,9 +4293,9 @@ msgstr "집계함수_식별구문" #: sql_help.c:589 sql_help.c:616 sql_help.c:666 sql_help.c:731 sql_help.c:786 #: sql_help.c:807 sql_help.c:846 sql_help.c:891 sql_help.c:932 sql_help.c:984 #: sql_help.c:1016 sql_help.c:1026 sql_help.c:1059 sql_help.c:1079 -#: sql_help.c:1092 sql_help.c:1126 sql_help.c:1267 sql_help.c:1387 -#: sql_help.c:1430 sql_help.c:1451 sql_help.c:1465 sql_help.c:1477 -#: sql_help.c:1490 sql_help.c:1521 sql_help.c:1578 sql_help.c:1627 +#: sql_help.c:1093 sql_help.c:1129 sql_help.c:1271 sql_help.c:1392 +#: sql_help.c:1435 sql_help.c:1456 sql_help.c:1470 sql_help.c:1482 +#: sql_help.c:1495 sql_help.c:1522 sql_help.c:1587 sql_help.c:1640 msgid "new_name" msgstr "새이름" @@ -4139,21 +4303,21 @@ msgstr "새이름" #: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:618 #: sql_help.c:627 sql_help.c:685 sql_help.c:705 sql_help.c:734 sql_help.c:789 #: sql_help.c:851 sql_help.c:889 sql_help.c:989 sql_help.c:1028 sql_help.c:1057 -#: sql_help.c:1077 sql_help.c:1090 sql_help.c:1124 sql_help.c:1327 -#: sql_help.c:1389 sql_help.c:1432 sql_help.c:1453 sql_help.c:1516 -#: sql_help.c:1625 sql_help.c:2870 +#: sql_help.c:1077 sql_help.c:1091 sql_help.c:1127 sql_help.c:1332 +#: sql_help.c:1394 sql_help.c:1437 sql_help.c:1458 sql_help.c:1520 +#: sql_help.c:1635 sql_help.c:2889 msgid "new_owner" msgstr "새사용자" #: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:252 sql_help.c:319 #: sql_help.c:448 sql_help.c:534 sql_help.c:668 sql_help.c:709 sql_help.c:737 -#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1094 -#: sql_help.c:1269 sql_help.c:1434 sql_help.c:1455 sql_help.c:1467 -#: sql_help.c:1479 sql_help.c:1523 sql_help.c:1629 +#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1095 +#: sql_help.c:1273 sql_help.c:1439 sql_help.c:1460 sql_help.c:1472 +#: sql_help.c:1484 sql_help.c:1524 sql_help.c:1642 msgid "new_schema" msgstr "새스키마" -#: sql_help.c:44 sql_help.c:1834 sql_help.c:3195 sql_help.c:4175 +#: sql_help.c:44 sql_help.c:1847 sql_help.c:3214 sql_help.c:4222 msgid "where aggregate_signature is:" msgstr "집계함수_식별구문 사용법:" @@ -4161,13 +4325,13 @@ msgstr "집계함수_식별구문 사용법:" #: sql_help.c:354 sql_help.c:370 sql_help.c:373 sql_help.c:376 sql_help.c:516 #: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:838 #: sql_help.c:843 sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:976 -#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1788 -#: sql_help.c:1805 sql_help.c:1811 sql_help.c:1835 sql_help.c:1838 -#: sql_help.c:1841 sql_help.c:1990 sql_help.c:2009 sql_help.c:2012 -#: sql_help.c:2283 sql_help.c:2483 sql_help.c:3196 sql_help.c:3199 -#: sql_help.c:3202 sql_help.c:3287 sql_help.c:3376 sql_help.c:3404 -#: sql_help.c:3724 sql_help.c:4057 sql_help.c:4152 sql_help.c:4159 -#: sql_help.c:4165 sql_help.c:4176 sql_help.c:4179 sql_help.c:4182 +#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1801 +#: sql_help.c:1818 sql_help.c:1824 sql_help.c:1848 sql_help.c:1851 +#: sql_help.c:1854 sql_help.c:2003 sql_help.c:2022 sql_help.c:2025 +#: sql_help.c:2296 sql_help.c:2502 sql_help.c:3215 sql_help.c:3218 +#: sql_help.c:3221 sql_help.c:3312 sql_help.c:3401 sql_help.c:3429 +#: sql_help.c:3753 sql_help.c:4101 sql_help.c:4199 sql_help.c:4206 +#: sql_help.c:4212 sql_help.c:4223 sql_help.c:4226 sql_help.c:4229 msgid "argmode" msgstr "인자모드" @@ -4175,13 +4339,13 @@ msgstr "인자모드" #: sql_help.c:355 sql_help.c:371 sql_help.c:374 sql_help.c:377 sql_help.c:517 #: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:839 #: sql_help.c:844 sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:977 -#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1789 -#: sql_help.c:1806 sql_help.c:1812 sql_help.c:1836 sql_help.c:1839 -#: sql_help.c:1842 sql_help.c:1991 sql_help.c:2010 sql_help.c:2013 -#: sql_help.c:2284 sql_help.c:2484 sql_help.c:3197 sql_help.c:3200 -#: sql_help.c:3203 sql_help.c:3288 sql_help.c:3377 sql_help.c:3405 -#: sql_help.c:4153 sql_help.c:4160 sql_help.c:4166 sql_help.c:4177 -#: sql_help.c:4180 sql_help.c:4183 +#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1802 +#: sql_help.c:1819 sql_help.c:1825 sql_help.c:1849 sql_help.c:1852 +#: sql_help.c:1855 sql_help.c:2004 sql_help.c:2023 sql_help.c:2026 +#: sql_help.c:2297 sql_help.c:2503 sql_help.c:3216 sql_help.c:3219 +#: sql_help.c:3222 sql_help.c:3313 sql_help.c:3402 sql_help.c:3430 +#: sql_help.c:4200 sql_help.c:4207 sql_help.c:4213 sql_help.c:4224 +#: sql_help.c:4227 sql_help.c:4230 msgid "argname" msgstr "인자이름" @@ -4189,67 +4353,69 @@ msgstr "인자이름" #: sql_help.c:356 sql_help.c:372 sql_help.c:375 sql_help.c:378 sql_help.c:518 #: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:840 #: sql_help.c:845 sql_help.c:850 sql_help.c:855 sql_help.c:860 sql_help.c:978 -#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1790 -#: sql_help.c:1807 sql_help.c:1813 sql_help.c:1837 sql_help.c:1840 -#: sql_help.c:1843 sql_help.c:2285 sql_help.c:2485 sql_help.c:3198 -#: sql_help.c:3201 sql_help.c:3204 sql_help.c:3289 sql_help.c:3378 -#: sql_help.c:3406 sql_help.c:4154 sql_help.c:4161 sql_help.c:4167 -#: sql_help.c:4178 sql_help.c:4181 sql_help.c:4184 +#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1803 +#: sql_help.c:1820 sql_help.c:1826 sql_help.c:1850 sql_help.c:1853 +#: sql_help.c:1856 sql_help.c:2298 sql_help.c:2504 sql_help.c:3217 +#: sql_help.c:3220 sql_help.c:3223 sql_help.c:3314 sql_help.c:3403 +#: sql_help.c:3431 sql_help.c:4201 sql_help.c:4208 sql_help.c:4214 +#: sql_help.c:4225 sql_help.c:4228 sql_help.c:4231 msgid "argtype" msgstr "인자자료형" #: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:926 -#: sql_help.c:1074 sql_help.c:1448 sql_help.c:1572 sql_help.c:1604 -#: sql_help.c:1652 sql_help.c:1891 sql_help.c:1898 sql_help.c:2190 -#: sql_help.c:2232 sql_help.c:2239 sql_help.c:2248 sql_help.c:2325 -#: sql_help.c:2536 sql_help.c:2628 sql_help.c:2899 sql_help.c:3080 -#: sql_help.c:3102 sql_help.c:3590 sql_help.c:3758 sql_help.c:4610 +#: sql_help.c:1074 sql_help.c:1453 sql_help.c:1581 sql_help.c:1613 +#: sql_help.c:1665 sql_help.c:1904 sql_help.c:1911 sql_help.c:2203 +#: sql_help.c:2245 sql_help.c:2252 sql_help.c:2261 sql_help.c:2341 +#: sql_help.c:2555 sql_help.c:2647 sql_help.c:2918 sql_help.c:3099 +#: sql_help.c:3121 sql_help.c:3261 sql_help.c:3616 sql_help.c:3788 +#: sql_help.c:3961 sql_help.c:4658 msgid "option" msgstr "옵션" -#: sql_help.c:113 sql_help.c:927 sql_help.c:1573 sql_help.c:2326 -#: sql_help.c:2537 sql_help.c:3081 +#: sql_help.c:113 sql_help.c:927 sql_help.c:1582 sql_help.c:2342 +#: sql_help.c:2556 sql_help.c:3100 sql_help.c:3262 msgid "where option can be:" msgstr "옵션 사용법:" -#: sql_help.c:114 sql_help.c:2122 +#: sql_help.c:114 sql_help.c:2137 msgid "allowconn" msgstr "접속허용" -#: sql_help.c:115 sql_help.c:928 sql_help.c:1574 sql_help.c:2123 -#: sql_help.c:2538 sql_help.c:3082 +#: sql_help.c:115 sql_help.c:928 sql_help.c:1583 sql_help.c:2138 +#: sql_help.c:2343 sql_help.c:2557 sql_help.c:3101 msgid "connlimit" msgstr "접속제한" -#: sql_help.c:116 sql_help.c:2124 +#: sql_help.c:116 sql_help.c:2139 msgid "istemplate" msgstr "템플릿?" -#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1272 sql_help.c:1320 +#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1276 sql_help.c:1325 msgid "new_tablespace" msgstr "새테이블스페이스" #: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:544 sql_help.c:546 #: sql_help.c:547 sql_help.c:863 sql_help.c:865 sql_help.c:866 sql_help.c:935 #: sql_help.c:939 sql_help.c:942 sql_help.c:1003 sql_help.c:1005 -#: sql_help.c:1006 sql_help.c:1137 sql_help.c:1140 sql_help.c:1581 -#: sql_help.c:1585 sql_help.c:1588 sql_help.c:2295 sql_help.c:2489 -#: sql_help.c:3944 sql_help.c:4349 +#: sql_help.c:1006 sql_help.c:1140 sql_help.c:1143 sql_help.c:1590 +#: sql_help.c:1594 sql_help.c:1597 sql_help.c:2308 sql_help.c:2508 +#: sql_help.c:3980 sql_help.c:4396 msgid "configuration_parameter" msgstr "환경설정_매개변수" #: sql_help.c:125 sql_help.c:395 sql_help.c:466 sql_help.c:472 sql_help.c:484 #: sql_help.c:545 sql_help.c:598 sql_help.c:677 sql_help.c:683 sql_help.c:864 #: sql_help.c:887 sql_help.c:936 sql_help.c:1004 sql_help.c:1075 -#: sql_help.c:1114 sql_help.c:1117 sql_help.c:1122 sql_help.c:1138 -#: sql_help.c:1139 sql_help.c:1302 sql_help.c:1322 sql_help.c:1370 -#: sql_help.c:1392 sql_help.c:1449 sql_help.c:1582 sql_help.c:1605 -#: sql_help.c:2191 sql_help.c:2233 sql_help.c:2240 sql_help.c:2249 -#: sql_help.c:2296 sql_help.c:2297 sql_help.c:2356 sql_help.c:2390 -#: sql_help.c:2490 sql_help.c:2491 sql_help.c:2508 sql_help.c:2629 -#: sql_help.c:2659 sql_help.c:2764 sql_help.c:2777 sql_help.c:2791 -#: sql_help.c:2832 sql_help.c:2856 sql_help.c:2873 sql_help.c:2900 -#: sql_help.c:3103 sql_help.c:3759 sql_help.c:4350 sql_help.c:4351 +#: sql_help.c:1117 sql_help.c:1120 sql_help.c:1125 sql_help.c:1141 +#: sql_help.c:1142 sql_help.c:1307 sql_help.c:1327 sql_help.c:1375 +#: sql_help.c:1397 sql_help.c:1454 sql_help.c:1538 sql_help.c:1591 +#: sql_help.c:1614 sql_help.c:2204 sql_help.c:2246 sql_help.c:2253 +#: sql_help.c:2262 sql_help.c:2309 sql_help.c:2310 sql_help.c:2372 +#: sql_help.c:2375 sql_help.c:2409 sql_help.c:2509 sql_help.c:2510 +#: sql_help.c:2527 sql_help.c:2648 sql_help.c:2678 sql_help.c:2783 +#: sql_help.c:2796 sql_help.c:2810 sql_help.c:2851 sql_help.c:2875 +#: sql_help.c:2892 sql_help.c:2919 sql_help.c:3122 sql_help.c:3789 +#: sql_help.c:4397 sql_help.c:4398 msgid "value" msgstr "값" @@ -4257,9 +4423,9 @@ msgstr "값" msgid "target_role" msgstr "대상롤" -#: sql_help.c:198 sql_help.c:2174 sql_help.c:2584 sql_help.c:2589 -#: sql_help.c:3706 sql_help.c:3713 sql_help.c:3727 sql_help.c:3733 -#: sql_help.c:4039 sql_help.c:4046 sql_help.c:4060 sql_help.c:4066 +#: sql_help.c:198 sql_help.c:2188 sql_help.c:2603 sql_help.c:2608 +#: sql_help.c:3735 sql_help.c:3742 sql_help.c:3756 sql_help.c:3762 +#: sql_help.c:4083 sql_help.c:4090 sql_help.c:4104 sql_help.c:4110 msgid "schema_name" msgstr "스키마이름" @@ -4274,33 +4440,29 @@ msgstr "grant_또는_revoke_내용에 사용되는 구문:" #: sql_help.c:201 sql_help.c:202 sql_help.c:203 sql_help.c:204 sql_help.c:205 #: sql_help.c:206 sql_help.c:207 sql_help.c:208 sql_help.c:209 sql_help.c:210 #: sql_help.c:569 sql_help.c:605 sql_help.c:670 sql_help.c:810 sql_help.c:946 -#: sql_help.c:1271 sql_help.c:1592 sql_help.c:2329 sql_help.c:2330 -#: sql_help.c:2331 sql_help.c:2332 sql_help.c:2333 sql_help.c:2464 -#: sql_help.c:2541 sql_help.c:2542 sql_help.c:2543 sql_help.c:2544 -#: sql_help.c:2545 sql_help.c:3085 sql_help.c:3086 sql_help.c:3087 -#: sql_help.c:3088 sql_help.c:3089 sql_help.c:3740 sql_help.c:3741 -#: sql_help.c:3742 sql_help.c:4040 sql_help.c:4044 sql_help.c:4047 -#: sql_help.c:4049 sql_help.c:4051 sql_help.c:4053 sql_help.c:4055 -#: sql_help.c:4061 sql_help.c:4063 sql_help.c:4065 sql_help.c:4067 -#: sql_help.c:4069 sql_help.c:4071 sql_help.c:4072 sql_help.c:4073 -#: sql_help.c:4370 +#: sql_help.c:1275 sql_help.c:1601 sql_help.c:2346 sql_help.c:2347 +#: sql_help.c:2348 sql_help.c:2349 sql_help.c:2350 sql_help.c:2483 +#: sql_help.c:2560 sql_help.c:2561 sql_help.c:2562 sql_help.c:2563 +#: sql_help.c:2564 sql_help.c:3104 sql_help.c:3105 sql_help.c:3106 +#: sql_help.c:3107 sql_help.c:3108 sql_help.c:3768 sql_help.c:3772 +#: sql_help.c:4116 sql_help.c:4120 sql_help.c:4417 msgid "role_name" msgstr "롤이름" -#: sql_help.c:236 sql_help.c:459 sql_help.c:1287 sql_help.c:1289 -#: sql_help.c:1337 sql_help.c:1349 sql_help.c:1374 sql_help.c:1621 -#: sql_help.c:2143 sql_help.c:2147 sql_help.c:2252 sql_help.c:2257 -#: sql_help.c:2351 sql_help.c:2759 sql_help.c:2772 sql_help.c:2786 -#: sql_help.c:2795 sql_help.c:2807 sql_help.c:2836 sql_help.c:3790 -#: sql_help.c:3805 sql_help.c:3807 sql_help.c:4235 sql_help.c:4236 -#: sql_help.c:4245 sql_help.c:4286 sql_help.c:4287 sql_help.c:4288 -#: sql_help.c:4289 sql_help.c:4290 sql_help.c:4291 sql_help.c:4324 -#: sql_help.c:4325 sql_help.c:4330 sql_help.c:4335 sql_help.c:4474 -#: sql_help.c:4475 sql_help.c:4484 sql_help.c:4525 sql_help.c:4526 -#: sql_help.c:4527 sql_help.c:4528 sql_help.c:4529 sql_help.c:4530 -#: sql_help.c:4577 sql_help.c:4579 sql_help.c:4636 sql_help.c:4692 -#: sql_help.c:4693 sql_help.c:4702 sql_help.c:4743 sql_help.c:4744 -#: sql_help.c:4745 sql_help.c:4746 sql_help.c:4747 sql_help.c:4748 +#: sql_help.c:236 sql_help.c:459 sql_help.c:1291 sql_help.c:1293 +#: sql_help.c:1342 sql_help.c:1354 sql_help.c:1379 sql_help.c:1631 +#: sql_help.c:2158 sql_help.c:2162 sql_help.c:2265 sql_help.c:2270 +#: sql_help.c:2368 sql_help.c:2778 sql_help.c:2791 sql_help.c:2805 +#: sql_help.c:2814 sql_help.c:2826 sql_help.c:2855 sql_help.c:3820 +#: sql_help.c:3835 sql_help.c:3837 sql_help.c:4282 sql_help.c:4283 +#: sql_help.c:4292 sql_help.c:4333 sql_help.c:4334 sql_help.c:4335 +#: sql_help.c:4336 sql_help.c:4337 sql_help.c:4338 sql_help.c:4371 +#: sql_help.c:4372 sql_help.c:4377 sql_help.c:4382 sql_help.c:4521 +#: sql_help.c:4522 sql_help.c:4531 sql_help.c:4572 sql_help.c:4573 +#: sql_help.c:4574 sql_help.c:4575 sql_help.c:4576 sql_help.c:4577 +#: sql_help.c:4624 sql_help.c:4626 sql_help.c:4685 sql_help.c:4741 +#: sql_help.c:4742 sql_help.c:4751 sql_help.c:4792 sql_help.c:4793 +#: sql_help.c:4794 sql_help.c:4795 sql_help.c:4796 sql_help.c:4797 msgid "expression" msgstr "표현식" @@ -4309,14 +4471,14 @@ msgid "domain_constraint" msgstr "도메인_제약조건" #: sql_help.c:241 sql_help.c:243 sql_help.c:246 sql_help.c:474 sql_help.c:475 -#: sql_help.c:1264 sql_help.c:1308 sql_help.c:1309 sql_help.c:1310 -#: sql_help.c:1336 sql_help.c:1348 sql_help.c:1365 sql_help.c:1776 -#: sql_help.c:1778 sql_help.c:2146 sql_help.c:2251 sql_help.c:2256 -#: sql_help.c:2794 sql_help.c:2806 sql_help.c:3802 +#: sql_help.c:1268 sql_help.c:1313 sql_help.c:1314 sql_help.c:1315 +#: sql_help.c:1341 sql_help.c:1353 sql_help.c:1370 sql_help.c:1789 +#: sql_help.c:1791 sql_help.c:2161 sql_help.c:2264 sql_help.c:2269 +#: sql_help.c:2813 sql_help.c:2825 sql_help.c:3832 msgid "constraint_name" msgstr "제약조건_이름" -#: sql_help.c:244 sql_help.c:1265 +#: sql_help.c:244 sql_help.c:1269 msgid "new_constraint_name" msgstr "새제약조건_이름" @@ -4336,82 +4498,82 @@ msgstr "맴버_객체 사용법:" #: sql_help.c:334 sql_help.c:335 sql_help.c:340 sql_help.c:344 sql_help.c:346 #: sql_help.c:348 sql_help.c:357 sql_help.c:358 sql_help.c:359 sql_help.c:360 #: sql_help.c:361 sql_help.c:362 sql_help.c:363 sql_help.c:364 sql_help.c:367 -#: sql_help.c:368 sql_help.c:1768 sql_help.c:1773 sql_help.c:1780 -#: sql_help.c:1781 sql_help.c:1782 sql_help.c:1783 sql_help.c:1784 -#: sql_help.c:1785 sql_help.c:1786 sql_help.c:1791 sql_help.c:1793 -#: sql_help.c:1797 sql_help.c:1799 sql_help.c:1803 sql_help.c:1808 -#: sql_help.c:1809 sql_help.c:1816 sql_help.c:1817 sql_help.c:1818 -#: sql_help.c:1819 sql_help.c:1820 sql_help.c:1821 sql_help.c:1822 -#: sql_help.c:1823 sql_help.c:1824 sql_help.c:1825 sql_help.c:1826 -#: sql_help.c:1831 sql_help.c:1832 sql_help.c:4142 sql_help.c:4147 -#: sql_help.c:4148 sql_help.c:4149 sql_help.c:4150 sql_help.c:4156 -#: sql_help.c:4157 sql_help.c:4162 sql_help.c:4163 sql_help.c:4168 -#: sql_help.c:4169 sql_help.c:4170 sql_help.c:4171 sql_help.c:4172 -#: sql_help.c:4173 +#: sql_help.c:368 sql_help.c:1781 sql_help.c:1786 sql_help.c:1793 +#: sql_help.c:1794 sql_help.c:1795 sql_help.c:1796 sql_help.c:1797 +#: sql_help.c:1798 sql_help.c:1799 sql_help.c:1804 sql_help.c:1806 +#: sql_help.c:1810 sql_help.c:1812 sql_help.c:1816 sql_help.c:1821 +#: sql_help.c:1822 sql_help.c:1829 sql_help.c:1830 sql_help.c:1831 +#: sql_help.c:1832 sql_help.c:1833 sql_help.c:1834 sql_help.c:1835 +#: sql_help.c:1836 sql_help.c:1837 sql_help.c:1838 sql_help.c:1839 +#: sql_help.c:1844 sql_help.c:1845 sql_help.c:4189 sql_help.c:4194 +#: sql_help.c:4195 sql_help.c:4196 sql_help.c:4197 sql_help.c:4203 +#: sql_help.c:4204 sql_help.c:4209 sql_help.c:4210 sql_help.c:4215 +#: sql_help.c:4216 sql_help.c:4217 sql_help.c:4218 sql_help.c:4219 +#: sql_help.c:4220 msgid "object_name" msgstr "객체이름" -#: sql_help.c:326 sql_help.c:1769 sql_help.c:4145 +#: sql_help.c:326 sql_help.c:1782 sql_help.c:4192 msgid "aggregate_name" msgstr "집계함수이름" -#: sql_help.c:328 sql_help.c:1771 sql_help.c:2055 sql_help.c:2059 -#: sql_help.c:2061 sql_help.c:3212 +#: sql_help.c:328 sql_help.c:1784 sql_help.c:2068 sql_help.c:2072 +#: sql_help.c:2074 sql_help.c:3231 msgid "source_type" msgstr "기존자료형" -#: sql_help.c:329 sql_help.c:1772 sql_help.c:2056 sql_help.c:2060 -#: sql_help.c:2062 sql_help.c:3213 +#: sql_help.c:329 sql_help.c:1785 sql_help.c:2069 sql_help.c:2073 +#: sql_help.c:2075 sql_help.c:3232 msgid "target_type" msgstr "대상자료형" -#: sql_help.c:336 sql_help.c:774 sql_help.c:1787 sql_help.c:2057 -#: sql_help.c:2098 sql_help.c:2161 sql_help.c:2407 sql_help.c:2438 -#: sql_help.c:2976 sql_help.c:4056 sql_help.c:4151 sql_help.c:4264 -#: sql_help.c:4268 sql_help.c:4272 sql_help.c:4275 sql_help.c:4503 -#: sql_help.c:4507 sql_help.c:4511 sql_help.c:4514 sql_help.c:4721 -#: sql_help.c:4725 sql_help.c:4729 sql_help.c:4732 +#: sql_help.c:336 sql_help.c:774 sql_help.c:1800 sql_help.c:2070 +#: sql_help.c:2111 sql_help.c:2176 sql_help.c:2426 sql_help.c:2457 +#: sql_help.c:2995 sql_help.c:4100 sql_help.c:4198 sql_help.c:4311 +#: sql_help.c:4315 sql_help.c:4319 sql_help.c:4322 sql_help.c:4550 +#: sql_help.c:4554 sql_help.c:4558 sql_help.c:4561 sql_help.c:4770 +#: sql_help.c:4774 sql_help.c:4778 sql_help.c:4781 msgid "function_name" msgstr "함수이름" -#: sql_help.c:341 sql_help.c:767 sql_help.c:1794 sql_help.c:2431 +#: sql_help.c:341 sql_help.c:767 sql_help.c:1807 sql_help.c:2450 msgid "operator_name" msgstr "연산자이름" -#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1795 -#: sql_help.c:2408 sql_help.c:3330 +#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1808 +#: sql_help.c:2427 sql_help.c:3355 msgid "left_type" msgstr "왼쪽인자_자료형" -#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1796 -#: sql_help.c:2409 sql_help.c:3331 +#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1809 +#: sql_help.c:2428 sql_help.c:3356 msgid "right_type" msgstr "오른쪽인자_자료형" #: sql_help.c:345 sql_help.c:347 sql_help.c:730 sql_help.c:733 sql_help.c:736 #: sql_help.c:765 sql_help.c:777 sql_help.c:785 sql_help.c:788 sql_help.c:791 -#: sql_help.c:1354 sql_help.c:1798 sql_help.c:1800 sql_help.c:2428 -#: sql_help.c:2449 sql_help.c:2812 sql_help.c:3340 sql_help.c:3349 +#: sql_help.c:1359 sql_help.c:1811 sql_help.c:1813 sql_help.c:2447 +#: sql_help.c:2468 sql_help.c:2831 sql_help.c:3365 sql_help.c:3374 msgid "index_method" msgstr "색인방법" -#: sql_help.c:349 sql_help.c:1804 sql_help.c:4158 +#: sql_help.c:349 sql_help.c:1817 sql_help.c:4205 msgid "procedure_name" msgstr "프로시져_이름" -#: sql_help.c:353 sql_help.c:1810 sql_help.c:3723 sql_help.c:4164 +#: sql_help.c:353 sql_help.c:1823 sql_help.c:3752 sql_help.c:4211 msgid "routine_name" msgstr "루틴_이름" -#: sql_help.c:365 sql_help.c:1326 sql_help.c:1827 sql_help.c:2291 -#: sql_help.c:2488 sql_help.c:2767 sql_help.c:2943 sql_help.c:3511 -#: sql_help.c:3737 sql_help.c:4070 +#: sql_help.c:365 sql_help.c:1331 sql_help.c:1840 sql_help.c:2304 +#: sql_help.c:2507 sql_help.c:2786 sql_help.c:2962 sql_help.c:3536 +#: sql_help.c:3766 sql_help.c:4114 msgid "type_name" msgstr "자료형이름" -#: sql_help.c:366 sql_help.c:1828 sql_help.c:2290 sql_help.c:2487 -#: sql_help.c:2944 sql_help.c:3170 sql_help.c:3512 sql_help.c:3729 -#: sql_help.c:4062 +#: sql_help.c:366 sql_help.c:1841 sql_help.c:2303 sql_help.c:2506 +#: sql_help.c:2963 sql_help.c:3189 sql_help.c:3537 sql_help.c:3758 +#: sql_help.c:4106 msgid "lang_name" msgstr "언어_이름" @@ -4419,129 +4581,134 @@ msgstr "언어_이름" msgid "and aggregate_signature is:" msgstr "집계함수_식별구문 사용법:" -#: sql_help.c:392 sql_help.c:1922 sql_help.c:2188 +#: sql_help.c:392 sql_help.c:1935 sql_help.c:2201 msgid "handler_function" msgstr "핸들러_함수" -#: sql_help.c:393 sql_help.c:2189 +#: sql_help.c:393 sql_help.c:2202 msgid "validator_function" msgstr "유효성검사_함수" #: sql_help.c:441 sql_help.c:519 sql_help.c:659 sql_help.c:841 sql_help.c:979 -#: sql_help.c:1259 sql_help.c:1514 +#: sql_help.c:1263 sql_help.c:1529 msgid "action" msgstr "동작" #: sql_help.c:443 sql_help.c:450 sql_help.c:454 sql_help.c:455 sql_help.c:458 #: sql_help.c:460 sql_help.c:461 sql_help.c:462 sql_help.c:464 sql_help.c:467 #: sql_help.c:469 sql_help.c:470 sql_help.c:663 sql_help.c:673 sql_help.c:675 -#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1261 -#: sql_help.c:1279 sql_help.c:1283 sql_help.c:1284 sql_help.c:1288 -#: sql_help.c:1290 sql_help.c:1291 sql_help.c:1292 sql_help.c:1294 -#: sql_help.c:1297 sql_help.c:1298 sql_help.c:1300 sql_help.c:1303 -#: sql_help.c:1305 sql_help.c:1350 sql_help.c:1352 sql_help.c:1359 -#: sql_help.c:1368 sql_help.c:1373 sql_help.c:1620 sql_help.c:1623 -#: sql_help.c:1660 sql_help.c:1775 sql_help.c:1888 sql_help.c:1894 -#: sql_help.c:1907 sql_help.c:1908 sql_help.c:1909 sql_help.c:2230 -#: sql_help.c:2243 sql_help.c:2288 sql_help.c:2350 sql_help.c:2354 -#: sql_help.c:2387 sql_help.c:2614 sql_help.c:2642 sql_help.c:2643 -#: sql_help.c:2750 sql_help.c:2758 sql_help.c:2768 sql_help.c:2771 -#: sql_help.c:2781 sql_help.c:2785 sql_help.c:2808 sql_help.c:2810 -#: sql_help.c:2817 sql_help.c:2830 sql_help.c:2835 sql_help.c:2853 -#: sql_help.c:2979 sql_help.c:3115 sql_help.c:3708 sql_help.c:3709 -#: sql_help.c:3789 sql_help.c:3804 sql_help.c:3806 sql_help.c:3808 -#: sql_help.c:4041 sql_help.c:4042 sql_help.c:4144 sql_help.c:4295 -#: sql_help.c:4534 sql_help.c:4576 sql_help.c:4578 sql_help.c:4580 -#: sql_help.c:4624 sql_help.c:4752 +#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1265 +#: sql_help.c:1283 sql_help.c:1287 sql_help.c:1288 sql_help.c:1292 +#: sql_help.c:1294 sql_help.c:1295 sql_help.c:1296 sql_help.c:1297 +#: sql_help.c:1299 sql_help.c:1302 sql_help.c:1303 sql_help.c:1305 +#: sql_help.c:1308 sql_help.c:1310 sql_help.c:1355 sql_help.c:1357 +#: sql_help.c:1364 sql_help.c:1373 sql_help.c:1378 sql_help.c:1630 +#: sql_help.c:1633 sql_help.c:1637 sql_help.c:1673 sql_help.c:1788 +#: sql_help.c:1901 sql_help.c:1907 sql_help.c:1920 sql_help.c:1921 +#: sql_help.c:1922 sql_help.c:2243 sql_help.c:2256 sql_help.c:2301 +#: sql_help.c:2367 sql_help.c:2373 sql_help.c:2406 sql_help.c:2633 +#: sql_help.c:2661 sql_help.c:2662 sql_help.c:2769 sql_help.c:2777 +#: sql_help.c:2787 sql_help.c:2790 sql_help.c:2800 sql_help.c:2804 +#: sql_help.c:2827 sql_help.c:2829 sql_help.c:2836 sql_help.c:2849 +#: sql_help.c:2854 sql_help.c:2872 sql_help.c:2998 sql_help.c:3134 +#: sql_help.c:3737 sql_help.c:3738 sql_help.c:3819 sql_help.c:3834 +#: sql_help.c:3836 sql_help.c:3838 sql_help.c:4085 sql_help.c:4086 +#: sql_help.c:4191 sql_help.c:4342 sql_help.c:4581 sql_help.c:4623 +#: sql_help.c:4625 sql_help.c:4627 sql_help.c:4673 sql_help.c:4801 msgid "column_name" msgstr "칼럼이름" -#: sql_help.c:444 sql_help.c:664 sql_help.c:1262 +#: sql_help.c:444 sql_help.c:664 sql_help.c:1266 sql_help.c:1638 msgid "new_column_name" msgstr "새칼럼이름" #: sql_help.c:449 sql_help.c:540 sql_help.c:672 sql_help.c:862 sql_help.c:1000 -#: sql_help.c:1278 sql_help.c:1530 +#: sql_help.c:1282 sql_help.c:1539 msgid "where action is one of:" msgstr "동작 사용법:" -#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1280 -#: sql_help.c:1285 sql_help.c:1532 sql_help.c:1536 sql_help.c:2141 -#: sql_help.c:2231 sql_help.c:2427 sql_help.c:2607 sql_help.c:2751 -#: sql_help.c:3024 sql_help.c:3891 +#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1284 +#: sql_help.c:1289 sql_help.c:1541 sql_help.c:1545 sql_help.c:2156 +#: sql_help.c:2244 sql_help.c:2446 sql_help.c:2626 sql_help.c:2770 +#: sql_help.c:3043 sql_help.c:3921 msgid "data_type" msgstr "자료형" -#: sql_help.c:452 sql_help.c:457 sql_help.c:1281 sql_help.c:1286 -#: sql_help.c:1533 sql_help.c:1537 sql_help.c:2142 sql_help.c:2234 -#: sql_help.c:2352 sql_help.c:2752 sql_help.c:2760 sql_help.c:2773 -#: sql_help.c:2787 sql_help.c:3025 sql_help.c:3031 sql_help.c:3799 +#: sql_help.c:452 sql_help.c:457 sql_help.c:1285 sql_help.c:1290 +#: sql_help.c:1542 sql_help.c:1546 sql_help.c:2157 sql_help.c:2247 +#: sql_help.c:2369 sql_help.c:2771 sql_help.c:2779 sql_help.c:2792 +#: sql_help.c:2806 sql_help.c:3044 sql_help.c:3050 sql_help.c:3829 msgid "collation" msgstr "collation" -#: sql_help.c:453 sql_help.c:1282 sql_help.c:2235 sql_help.c:2244 -#: sql_help.c:2753 sql_help.c:2769 sql_help.c:2782 +#: sql_help.c:453 sql_help.c:1286 sql_help.c:2248 sql_help.c:2257 +#: sql_help.c:2772 sql_help.c:2788 sql_help.c:2801 msgid "column_constraint" msgstr "칼럼_제약조건" -#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1299 +#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1304 sql_help.c:4670 msgid "integer" msgstr "정수" -#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1301 -#: sql_help.c:1304 +#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1306 +#: sql_help.c:1309 msgid "attribute_option" msgstr "속성_옵션" -#: sql_help.c:473 sql_help.c:1306 sql_help.c:2236 sql_help.c:2245 -#: sql_help.c:2754 sql_help.c:2770 sql_help.c:2783 +#: sql_help.c:473 sql_help.c:1311 sql_help.c:2249 sql_help.c:2258 +#: sql_help.c:2773 sql_help.c:2789 sql_help.c:2802 msgid "table_constraint" msgstr "테이블_제약조건" -#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1311 -#: sql_help.c:1312 sql_help.c:1313 sql_help.c:1314 sql_help.c:1829 +#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1316 +#: sql_help.c:1317 sql_help.c:1318 sql_help.c:1319 sql_help.c:1842 msgid "trigger_name" msgstr "트리거이름" -#: sql_help.c:480 sql_help.c:481 sql_help.c:1324 sql_help.c:1325 -#: sql_help.c:2237 sql_help.c:2242 sql_help.c:2757 sql_help.c:2780 +#: sql_help.c:480 sql_help.c:481 sql_help.c:1329 sql_help.c:1330 +#: sql_help.c:2250 sql_help.c:2255 sql_help.c:2776 sql_help.c:2799 msgid "parent_table" msgstr "상위_테이블" #: sql_help.c:539 sql_help.c:595 sql_help.c:661 sql_help.c:861 sql_help.c:999 -#: sql_help.c:1493 sql_help.c:2173 +#: sql_help.c:1498 sql_help.c:2187 msgid "extension_name" msgstr "확장모듈이름" -#: sql_help.c:541 sql_help.c:1001 sql_help.c:2292 +#: sql_help.c:541 sql_help.c:1001 sql_help.c:2305 msgid "execution_cost" msgstr "실행비용" -#: sql_help.c:542 sql_help.c:1002 sql_help.c:2293 +#: sql_help.c:542 sql_help.c:1002 sql_help.c:2306 msgid "result_rows" msgstr "반환자료수" -#: sql_help.c:543 sql_help.c:2294 +#: sql_help.c:543 sql_help.c:2307 msgid "support_function" msgstr "지원_함수" #: sql_help.c:564 sql_help.c:566 sql_help.c:925 sql_help.c:933 sql_help.c:937 -#: sql_help.c:940 sql_help.c:943 sql_help.c:1571 sql_help.c:1579 -#: sql_help.c:1583 sql_help.c:1586 sql_help.c:1589 sql_help.c:2585 -#: sql_help.c:2587 sql_help.c:2590 sql_help.c:2591 sql_help.c:3707 -#: sql_help.c:3711 sql_help.c:3714 sql_help.c:3716 sql_help.c:3718 -#: sql_help.c:3720 sql_help.c:3722 sql_help.c:3728 sql_help.c:3730 -#: sql_help.c:3732 sql_help.c:3734 sql_help.c:3736 sql_help.c:3738 +#: sql_help.c:940 sql_help.c:943 sql_help.c:1580 sql_help.c:1588 +#: sql_help.c:1592 sql_help.c:1595 sql_help.c:1598 sql_help.c:2604 +#: sql_help.c:2606 sql_help.c:2609 sql_help.c:2610 sql_help.c:3736 +#: sql_help.c:3740 sql_help.c:3743 sql_help.c:3745 sql_help.c:3747 +#: sql_help.c:3749 sql_help.c:3751 sql_help.c:3757 sql_help.c:3759 +#: sql_help.c:3761 sql_help.c:3763 sql_help.c:3765 sql_help.c:3767 +#: sql_help.c:3769 sql_help.c:3770 sql_help.c:4084 sql_help.c:4088 +#: sql_help.c:4091 sql_help.c:4093 sql_help.c:4095 sql_help.c:4097 +#: sql_help.c:4099 sql_help.c:4105 sql_help.c:4107 sql_help.c:4109 +#: sql_help.c:4111 sql_help.c:4113 sql_help.c:4115 sql_help.c:4117 +#: sql_help.c:4118 msgid "role_specification" msgstr "롤_명세" -#: sql_help.c:565 sql_help.c:567 sql_help.c:1602 sql_help.c:2116 -#: sql_help.c:2593 sql_help.c:3100 sql_help.c:3545 sql_help.c:4380 +#: sql_help.c:565 sql_help.c:567 sql_help.c:1611 sql_help.c:2130 +#: sql_help.c:2612 sql_help.c:3119 sql_help.c:3570 sql_help.c:4427 msgid "user_name" msgstr "사용자이름" -#: sql_help.c:568 sql_help.c:945 sql_help.c:1591 sql_help.c:2592 -#: sql_help.c:3739 +#: sql_help.c:568 sql_help.c:945 sql_help.c:1600 sql_help.c:2611 +#: sql_help.c:3771 sql_help.c:4119 msgid "where role_specification can be:" msgstr "롤_명세 사용법:" @@ -4549,22 +4716,22 @@ msgstr "롤_명세 사용법:" msgid "group_name" msgstr "그룹이름" -#: sql_help.c:591 sql_help.c:1371 sql_help.c:2121 sql_help.c:2357 -#: sql_help.c:2391 sql_help.c:2765 sql_help.c:2778 sql_help.c:2792 -#: sql_help.c:2833 sql_help.c:2857 sql_help.c:2869 sql_help.c:3735 -#: sql_help.c:4068 +#: sql_help.c:591 sql_help.c:1376 sql_help.c:2136 sql_help.c:2376 +#: sql_help.c:2410 sql_help.c:2784 sql_help.c:2797 sql_help.c:2811 +#: sql_help.c:2852 sql_help.c:2876 sql_help.c:2888 sql_help.c:3764 +#: sql_help.c:4112 msgid "tablespace_name" msgstr "테이블스페이스이름" -#: sql_help.c:593 sql_help.c:681 sql_help.c:1319 sql_help.c:1328 -#: sql_help.c:1366 sql_help.c:1709 +#: sql_help.c:593 sql_help.c:681 sql_help.c:1324 sql_help.c:1333 +#: sql_help.c:1371 sql_help.c:1722 msgid "index_name" msgstr "인덱스이름" -#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1321 -#: sql_help.c:1323 sql_help.c:1369 sql_help.c:2355 sql_help.c:2389 -#: sql_help.c:2763 sql_help.c:2776 sql_help.c:2790 sql_help.c:2831 -#: sql_help.c:2855 +#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1326 +#: sql_help.c:1328 sql_help.c:1374 sql_help.c:2374 sql_help.c:2408 +#: sql_help.c:2782 sql_help.c:2795 sql_help.c:2809 sql_help.c:2850 +#: sql_help.c:2874 msgid "storage_parameter" msgstr "스토리지_매개변수" @@ -4572,1746 +4739,1748 @@ msgstr "스토리지_매개변수" msgid "column_number" msgstr "칼럼번호" -#: sql_help.c:626 sql_help.c:1792 sql_help.c:4155 +#: sql_help.c:626 sql_help.c:1805 sql_help.c:4202 msgid "large_object_oid" msgstr "대형_객체_oid" -#: sql_help.c:713 sql_help.c:2412 +#: sql_help.c:713 sql_help.c:2431 msgid "res_proc" msgstr "" -#: sql_help.c:714 sql_help.c:2413 +#: sql_help.c:714 sql_help.c:2432 msgid "join_proc" msgstr "" -#: sql_help.c:766 sql_help.c:778 sql_help.c:2430 +#: sql_help.c:766 sql_help.c:778 sql_help.c:2449 msgid "strategy_number" msgstr "전략_번호" #: sql_help.c:768 sql_help.c:769 sql_help.c:772 sql_help.c:773 sql_help.c:779 -#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2432 sql_help.c:2433 -#: sql_help.c:2436 sql_help.c:2437 +#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2451 sql_help.c:2452 +#: sql_help.c:2455 sql_help.c:2456 msgid "op_type" msgstr "연산자자료형" -#: sql_help.c:770 sql_help.c:2434 +#: sql_help.c:770 sql_help.c:2453 msgid "sort_family_name" msgstr "" -#: sql_help.c:771 sql_help.c:781 sql_help.c:2435 +#: sql_help.c:771 sql_help.c:781 sql_help.c:2454 msgid "support_number" msgstr "" -#: sql_help.c:775 sql_help.c:2058 sql_help.c:2439 sql_help.c:2946 -#: sql_help.c:2948 +#: sql_help.c:775 sql_help.c:2071 sql_help.c:2458 sql_help.c:2965 +#: sql_help.c:2967 msgid "argument_type" msgstr "인자자료형" #: sql_help.c:806 sql_help.c:809 sql_help.c:880 sql_help.c:882 sql_help.c:884 -#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1489 sql_help.c:1492 -#: sql_help.c:1659 sql_help.c:1708 sql_help.c:1777 sql_help.c:1802 -#: sql_help.c:1815 sql_help.c:1830 sql_help.c:1887 sql_help.c:1893 -#: sql_help.c:2229 sql_help.c:2241 sql_help.c:2348 sql_help.c:2386 -#: sql_help.c:2463 sql_help.c:2506 sql_help.c:2562 sql_help.c:2613 -#: sql_help.c:2644 sql_help.c:2749 sql_help.c:2766 sql_help.c:2779 -#: sql_help.c:2852 sql_help.c:2972 sql_help.c:3149 sql_help.c:3366 -#: sql_help.c:3415 sql_help.c:3521 sql_help.c:3705 sql_help.c:3710 -#: sql_help.c:3755 sql_help.c:3787 sql_help.c:4038 sql_help.c:4043 -#: sql_help.c:4143 sql_help.c:4250 sql_help.c:4252 sql_help.c:4301 -#: sql_help.c:4340 sql_help.c:4489 sql_help.c:4491 sql_help.c:4540 -#: sql_help.c:4574 sql_help.c:4623 sql_help.c:4707 sql_help.c:4709 -#: sql_help.c:4758 +#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1494 sql_help.c:1497 +#: sql_help.c:1672 sql_help.c:1721 sql_help.c:1790 sql_help.c:1815 +#: sql_help.c:1828 sql_help.c:1843 sql_help.c:1900 sql_help.c:1906 +#: sql_help.c:2242 sql_help.c:2254 sql_help.c:2365 sql_help.c:2405 +#: sql_help.c:2482 sql_help.c:2525 sql_help.c:2581 sql_help.c:2632 +#: sql_help.c:2663 sql_help.c:2768 sql_help.c:2785 sql_help.c:2798 +#: sql_help.c:2871 sql_help.c:2991 sql_help.c:3168 sql_help.c:3391 +#: sql_help.c:3440 sql_help.c:3546 sql_help.c:3734 sql_help.c:3739 +#: sql_help.c:3785 sql_help.c:3817 sql_help.c:4082 sql_help.c:4087 +#: sql_help.c:4190 sql_help.c:4297 sql_help.c:4299 sql_help.c:4348 +#: sql_help.c:4387 sql_help.c:4536 sql_help.c:4538 sql_help.c:4587 +#: sql_help.c:4621 sql_help.c:4672 sql_help.c:4756 sql_help.c:4758 +#: sql_help.c:4807 msgid "table_name" msgstr "테이블이름" -#: sql_help.c:811 sql_help.c:2465 +#: sql_help.c:811 sql_help.c:2484 msgid "using_expression" msgstr "" -#: sql_help.c:812 sql_help.c:2466 +#: sql_help.c:812 sql_help.c:2485 msgid "check_expression" msgstr "체크_표현식" -#: sql_help.c:886 sql_help.c:2507 +#: sql_help.c:886 sql_help.c:2526 msgid "publication_parameter" msgstr "발행_매개변수" -#: sql_help.c:929 sql_help.c:1575 sql_help.c:2327 sql_help.c:2539 -#: sql_help.c:3083 +#: sql_help.c:929 sql_help.c:1584 sql_help.c:2344 sql_help.c:2558 +#: sql_help.c:3102 msgid "password" msgstr "암호" -#: sql_help.c:930 sql_help.c:1576 sql_help.c:2328 sql_help.c:2540 -#: sql_help.c:3084 +#: sql_help.c:930 sql_help.c:1585 sql_help.c:2345 sql_help.c:2559 +#: sql_help.c:3103 msgid "timestamp" msgstr "" -#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1580 -#: sql_help.c:1584 sql_help.c:1587 sql_help.c:1590 sql_help.c:3715 -#: sql_help.c:4048 +#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1589 +#: sql_help.c:1593 sql_help.c:1596 sql_help.c:1599 sql_help.c:3744 +#: sql_help.c:4092 msgid "database_name" msgstr "데이터베이스이름" -#: sql_help.c:1048 sql_help.c:2608 +#: sql_help.c:1048 sql_help.c:2627 msgid "increment" msgstr "" -#: sql_help.c:1049 sql_help.c:2609 +#: sql_help.c:1049 sql_help.c:2628 msgid "minvalue" msgstr "최소값" -#: sql_help.c:1050 sql_help.c:2610 +#: sql_help.c:1050 sql_help.c:2629 msgid "maxvalue" msgstr "최대값" -#: sql_help.c:1051 sql_help.c:2611 sql_help.c:4248 sql_help.c:4338 -#: sql_help.c:4487 sql_help.c:4640 sql_help.c:4705 +#: sql_help.c:1051 sql_help.c:2630 sql_help.c:4295 sql_help.c:4385 +#: sql_help.c:4534 sql_help.c:4689 sql_help.c:4754 msgid "start" msgstr "시작" -#: sql_help.c:1052 sql_help.c:1296 +#: sql_help.c:1052 sql_help.c:1301 msgid "restart" msgstr "재시작" -#: sql_help.c:1053 sql_help.c:2612 +#: sql_help.c:1053 sql_help.c:2631 msgid "cache" msgstr "캐쉬" -#: sql_help.c:1110 sql_help.c:2656 +#: sql_help.c:1097 +msgid "new_target" +msgstr "새대상" + +#: sql_help.c:1113 sql_help.c:2675 msgid "conninfo" msgstr "접속정보" -#: sql_help.c:1112 sql_help.c:2657 +#: sql_help.c:1115 sql_help.c:2676 msgid "publication_name" msgstr "발행_이름" -#: sql_help.c:1113 +#: sql_help.c:1116 msgid "set_publication_option" msgstr "발행_옵션_설정" -#: sql_help.c:1116 +#: sql_help.c:1119 msgid "refresh_option" msgstr "새로고침_옵션" -#: sql_help.c:1121 sql_help.c:2658 +#: sql_help.c:1124 sql_help.c:2677 msgid "subscription_parameter" msgstr "구독_매개변수" -#: sql_help.c:1274 sql_help.c:1277 +#: sql_help.c:1278 sql_help.c:1281 msgid "partition_name" msgstr "파티션_이름" -#: sql_help.c:1275 sql_help.c:2246 sql_help.c:2784 +#: sql_help.c:1279 sql_help.c:2259 sql_help.c:2803 msgid "partition_bound_spec" msgstr "파티션_범위_정의" -#: sql_help.c:1293 sql_help.c:1340 sql_help.c:2798 +#: sql_help.c:1298 sql_help.c:1345 sql_help.c:2817 msgid "sequence_options" msgstr "시퀀스_옵션" -#: sql_help.c:1295 +#: sql_help.c:1300 msgid "sequence_option" msgstr "시퀀스_옵션" -#: sql_help.c:1307 +#: sql_help.c:1312 msgid "table_constraint_using_index" msgstr "" -#: sql_help.c:1315 sql_help.c:1316 sql_help.c:1317 sql_help.c:1318 +#: sql_help.c:1320 sql_help.c:1321 sql_help.c:1322 sql_help.c:1323 msgid "rewrite_rule_name" msgstr "" -#: sql_help.c:1329 sql_help.c:2823 +#: sql_help.c:1334 sql_help.c:2842 msgid "and partition_bound_spec is:" msgstr "" -#: sql_help.c:1330 sql_help.c:1331 sql_help.c:1332 sql_help.c:2824 -#: sql_help.c:2825 sql_help.c:2826 +#: sql_help.c:1335 sql_help.c:1336 sql_help.c:1337 sql_help.c:2843 +#: sql_help.c:2844 sql_help.c:2845 msgid "partition_bound_expr" msgstr "파티션_범위_정의" -#: sql_help.c:1333 sql_help.c:1334 sql_help.c:2827 sql_help.c:2828 +#: sql_help.c:1338 sql_help.c:1339 sql_help.c:2846 sql_help.c:2847 msgid "numeric_literal" msgstr "" -#: sql_help.c:1335 +#: sql_help.c:1340 msgid "and column_constraint is:" msgstr "칼럼_제약조건 사용법:" -#: sql_help.c:1338 sql_help.c:2253 sql_help.c:2286 sql_help.c:2486 -#: sql_help.c:2796 +#: sql_help.c:1343 sql_help.c:2266 sql_help.c:2299 sql_help.c:2505 +#: sql_help.c:2815 msgid "default_expr" msgstr "초기값_표현식" -#: sql_help.c:1339 sql_help.c:2254 sql_help.c:2797 +#: sql_help.c:1344 sql_help.c:2267 sql_help.c:2816 msgid "generation_expr" msgstr "" -#: sql_help.c:1341 sql_help.c:1342 sql_help.c:1351 sql_help.c:1353 -#: sql_help.c:1357 sql_help.c:2799 sql_help.c:2800 sql_help.c:2809 -#: sql_help.c:2811 sql_help.c:2815 +#: sql_help.c:1346 sql_help.c:1347 sql_help.c:1356 sql_help.c:1358 +#: sql_help.c:1362 sql_help.c:2818 sql_help.c:2819 sql_help.c:2828 +#: sql_help.c:2830 sql_help.c:2834 msgid "index_parameters" msgstr "색인매개변수" -#: sql_help.c:1343 sql_help.c:1360 sql_help.c:2801 sql_help.c:2818 +#: sql_help.c:1348 sql_help.c:1365 sql_help.c:2820 sql_help.c:2837 msgid "reftable" msgstr "참조테이블" -#: sql_help.c:1344 sql_help.c:1361 sql_help.c:2802 sql_help.c:2819 +#: sql_help.c:1349 sql_help.c:1366 sql_help.c:2821 sql_help.c:2838 msgid "refcolumn" msgstr "참조칼럼" -#: sql_help.c:1345 sql_help.c:1346 sql_help.c:1362 sql_help.c:1363 -#: sql_help.c:2803 sql_help.c:2804 sql_help.c:2820 sql_help.c:2821 +#: sql_help.c:1350 sql_help.c:1351 sql_help.c:1367 sql_help.c:1368 +#: sql_help.c:2822 sql_help.c:2823 sql_help.c:2839 sql_help.c:2840 msgid "referential_action" msgstr "참조_방식" -#: sql_help.c:1347 sql_help.c:2255 sql_help.c:2805 +#: sql_help.c:1352 sql_help.c:2268 sql_help.c:2824 msgid "and table_constraint is:" msgstr "테이블_제약조건 사용법:" -#: sql_help.c:1355 sql_help.c:2813 +#: sql_help.c:1360 sql_help.c:2832 msgid "exclude_element" msgstr "" -#: sql_help.c:1356 sql_help.c:2814 sql_help.c:4246 sql_help.c:4336 -#: sql_help.c:4485 sql_help.c:4638 sql_help.c:4703 +#: sql_help.c:1361 sql_help.c:2833 sql_help.c:4293 sql_help.c:4383 +#: sql_help.c:4532 sql_help.c:4687 sql_help.c:4752 msgid "operator" msgstr "연산자" -#: sql_help.c:1358 sql_help.c:2358 sql_help.c:2816 +#: sql_help.c:1363 sql_help.c:2377 sql_help.c:2835 msgid "predicate" msgstr "범위한정구문" -#: sql_help.c:1364 +#: sql_help.c:1369 msgid "and table_constraint_using_index is:" msgstr "" -#: sql_help.c:1367 sql_help.c:2829 +#: sql_help.c:1372 sql_help.c:2848 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "" -#: sql_help.c:1372 sql_help.c:2834 +#: sql_help.c:1377 sql_help.c:2853 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "" -#: sql_help.c:1375 sql_help.c:2353 sql_help.c:2761 sql_help.c:2774 -#: sql_help.c:2788 sql_help.c:2837 sql_help.c:3800 +#: sql_help.c:1380 sql_help.c:2370 sql_help.c:2780 sql_help.c:2793 +#: sql_help.c:2807 sql_help.c:2856 sql_help.c:3830 msgid "opclass" msgstr "연산자클래스" -#: sql_help.c:1391 sql_help.c:1394 sql_help.c:2872 +#: sql_help.c:1396 sql_help.c:1399 sql_help.c:2891 msgid "tablespace_option" msgstr "테이블스페이스_옵션" -#: sql_help.c:1415 sql_help.c:1418 sql_help.c:1424 sql_help.c:1428 +#: sql_help.c:1420 sql_help.c:1423 sql_help.c:1429 sql_help.c:1433 msgid "token_type" msgstr "토큰_종류" -#: sql_help.c:1416 sql_help.c:1419 +#: sql_help.c:1421 sql_help.c:1424 msgid "dictionary_name" msgstr "사전이름" -#: sql_help.c:1421 sql_help.c:1425 +#: sql_help.c:1426 sql_help.c:1430 msgid "old_dictionary" msgstr "옛사전" -#: sql_help.c:1422 sql_help.c:1426 +#: sql_help.c:1427 sql_help.c:1431 msgid "new_dictionary" msgstr "새사전" -#: sql_help.c:1518 sql_help.c:1531 sql_help.c:1534 sql_help.c:1535 -#: sql_help.c:3023 +#: sql_help.c:1526 sql_help.c:1540 sql_help.c:1543 sql_help.c:1544 +#: sql_help.c:3042 msgid "attribute_name" msgstr "속성이름" -#: sql_help.c:1519 +#: sql_help.c:1527 msgid "new_attribute_name" msgstr "새속성이름" -#: sql_help.c:1525 sql_help.c:1529 +#: sql_help.c:1531 sql_help.c:1535 msgid "new_enum_value" msgstr "" -#: sql_help.c:1526 +#: sql_help.c:1532 msgid "neighbor_enum_value" msgstr "" -#: sql_help.c:1528 +#: sql_help.c:1534 msgid "existing_enum_value" msgstr "" -#: sql_help.c:1603 sql_help.c:2238 sql_help.c:2247 sql_help.c:2624 -#: sql_help.c:3101 sql_help.c:3546 sql_help.c:3721 sql_help.c:3756 -#: sql_help.c:4054 +#: sql_help.c:1537 +msgid "property" +msgstr "속성" + +#: sql_help.c:1612 sql_help.c:2251 sql_help.c:2260 sql_help.c:2643 +#: sql_help.c:3120 sql_help.c:3571 sql_help.c:3750 sql_help.c:3786 +#: sql_help.c:4098 msgid "server_name" msgstr "서버이름" -#: sql_help.c:1631 sql_help.c:1634 sql_help.c:3116 +#: sql_help.c:1644 sql_help.c:1647 sql_help.c:3135 msgid "view_option_name" msgstr "뷰_옵션이름" -#: sql_help.c:1632 sql_help.c:3117 +#: sql_help.c:1645 sql_help.c:3136 msgid "view_option_value" msgstr "" -#: sql_help.c:1653 sql_help.c:1654 sql_help.c:4611 sql_help.c:4612 +#: sql_help.c:1666 sql_help.c:1667 sql_help.c:4659 sql_help.c:4660 msgid "table_and_columns" msgstr "테이블과_칼럼" -#: sql_help.c:1655 sql_help.c:1899 sql_help.c:3593 sql_help.c:4613 +#: sql_help.c:1668 sql_help.c:1912 sql_help.c:3619 sql_help.c:3963 +#: sql_help.c:4661 msgid "where option can be one of:" msgstr "옵션 사용법:" -#: sql_help.c:1656 sql_help.c:1657 sql_help.c:1901 sql_help.c:1904 -#: sql_help.c:2083 sql_help.c:3594 sql_help.c:3595 sql_help.c:3596 -#: sql_help.c:3597 sql_help.c:3598 sql_help.c:3599 sql_help.c:3600 -#: sql_help.c:4614 sql_help.c:4615 sql_help.c:4616 sql_help.c:4617 -#: sql_help.c:4618 sql_help.c:4619 sql_help.c:4620 sql_help.c:4621 +#: sql_help.c:1669 sql_help.c:1670 sql_help.c:1914 sql_help.c:1917 +#: sql_help.c:2096 sql_help.c:3620 sql_help.c:3621 sql_help.c:3622 +#: sql_help.c:3623 sql_help.c:3624 sql_help.c:3625 sql_help.c:3626 +#: sql_help.c:3627 sql_help.c:4662 sql_help.c:4663 sql_help.c:4664 +#: sql_help.c:4665 sql_help.c:4666 sql_help.c:4667 sql_help.c:4668 +#: sql_help.c:4669 msgid "boolean" msgstr "" -#: sql_help.c:1658 sql_help.c:4622 +#: sql_help.c:1671 sql_help.c:4671 msgid "and table_and_columns is:" msgstr "테이블과_칼럼 사용법:" -#: sql_help.c:1674 sql_help.c:4396 sql_help.c:4398 sql_help.c:4422 +#: sql_help.c:1687 sql_help.c:4443 sql_help.c:4445 sql_help.c:4469 msgid "transaction_mode" msgstr "트랜잭션모드" -#: sql_help.c:1675 sql_help.c:4399 sql_help.c:4423 +#: sql_help.c:1688 sql_help.c:4446 sql_help.c:4470 msgid "where transaction_mode is one of:" msgstr "트랜잭션모드 사용법:" -#: sql_help.c:1684 sql_help.c:4256 sql_help.c:4265 sql_help.c:4269 -#: sql_help.c:4273 sql_help.c:4276 sql_help.c:4495 sql_help.c:4504 -#: sql_help.c:4508 sql_help.c:4512 sql_help.c:4515 sql_help.c:4713 -#: sql_help.c:4722 sql_help.c:4726 sql_help.c:4730 sql_help.c:4733 +#: sql_help.c:1697 sql_help.c:4303 sql_help.c:4312 sql_help.c:4316 +#: sql_help.c:4320 sql_help.c:4323 sql_help.c:4542 sql_help.c:4551 +#: sql_help.c:4555 sql_help.c:4559 sql_help.c:4562 sql_help.c:4762 +#: sql_help.c:4771 sql_help.c:4775 sql_help.c:4779 sql_help.c:4782 msgid "argument" msgstr "인자" -#: sql_help.c:1774 +#: sql_help.c:1787 msgid "relation_name" msgstr "릴레이션이름" -#: sql_help.c:1779 sql_help.c:3717 sql_help.c:4050 +#: sql_help.c:1792 sql_help.c:3746 sql_help.c:4094 msgid "domain_name" msgstr "도메인이름" -#: sql_help.c:1801 +#: sql_help.c:1814 msgid "policy_name" msgstr "정책이름" -#: sql_help.c:1814 +#: sql_help.c:1827 msgid "rule_name" msgstr "룰이름" -#: sql_help.c:1833 +#: sql_help.c:1846 msgid "text" msgstr "" -#: sql_help.c:1858 sql_help.c:3900 sql_help.c:4088 +#: sql_help.c:1871 sql_help.c:3930 sql_help.c:4135 msgid "transaction_id" msgstr "트랜잭션_id" -#: sql_help.c:1889 sql_help.c:1896 sql_help.c:3826 +#: sql_help.c:1902 sql_help.c:1909 sql_help.c:3856 msgid "filename" msgstr "파일이름" -#: sql_help.c:1890 sql_help.c:1897 sql_help.c:2564 sql_help.c:2565 -#: sql_help.c:2566 +#: sql_help.c:1903 sql_help.c:1910 sql_help.c:2583 sql_help.c:2584 +#: sql_help.c:2585 msgid "command" msgstr "명령어" -#: sql_help.c:1892 sql_help.c:2563 sql_help.c:2975 sql_help.c:3152 -#: sql_help.c:3810 sql_help.c:4239 sql_help.c:4241 sql_help.c:4329 -#: sql_help.c:4331 sql_help.c:4478 sql_help.c:4480 sql_help.c:4583 -#: sql_help.c:4696 sql_help.c:4698 +#: sql_help.c:1905 sql_help.c:2582 sql_help.c:2994 sql_help.c:3171 +#: sql_help.c:3840 sql_help.c:4286 sql_help.c:4288 sql_help.c:4376 +#: sql_help.c:4378 sql_help.c:4525 sql_help.c:4527 sql_help.c:4630 +#: sql_help.c:4745 sql_help.c:4747 msgid "condition" msgstr "조건" -#: sql_help.c:1895 sql_help.c:2392 sql_help.c:2858 sql_help.c:3118 -#: sql_help.c:3136 sql_help.c:3791 +#: sql_help.c:1908 sql_help.c:2411 sql_help.c:2877 sql_help.c:3137 +#: sql_help.c:3155 sql_help.c:3821 msgid "query" msgstr "쿼리문" -#: sql_help.c:1900 +#: sql_help.c:1913 msgid "format_name" msgstr "입출력양식이름" -#: sql_help.c:1902 +#: sql_help.c:1915 msgid "delimiter_character" msgstr "구분문자" -#: sql_help.c:1903 +#: sql_help.c:1916 msgid "null_string" msgstr "널문자열" -#: sql_help.c:1905 +#: sql_help.c:1918 msgid "quote_character" msgstr "인용부호" -#: sql_help.c:1906 +#: sql_help.c:1919 msgid "escape_character" msgstr "이스케이프 문자" -#: sql_help.c:1910 +#: sql_help.c:1923 msgid "encoding_name" msgstr "인코딩이름" -#: sql_help.c:1921 +#: sql_help.c:1934 msgid "access_method_type" msgstr "" -#: sql_help.c:1992 sql_help.c:2011 sql_help.c:2014 +#: sql_help.c:2005 sql_help.c:2024 sql_help.c:2027 msgid "arg_data_type" msgstr "인자자료형" -#: sql_help.c:1993 sql_help.c:2015 sql_help.c:2023 +#: sql_help.c:2006 sql_help.c:2028 sql_help.c:2036 msgid "sfunc" msgstr "" -#: sql_help.c:1994 sql_help.c:2016 sql_help.c:2024 +#: sql_help.c:2007 sql_help.c:2029 sql_help.c:2037 msgid "state_data_type" msgstr "" -#: sql_help.c:1995 sql_help.c:2017 sql_help.c:2025 +#: sql_help.c:2008 sql_help.c:2030 sql_help.c:2038 msgid "state_data_size" msgstr "" -#: sql_help.c:1996 sql_help.c:2018 sql_help.c:2026 +#: sql_help.c:2009 sql_help.c:2031 sql_help.c:2039 msgid "ffunc" msgstr "" -#: sql_help.c:1997 sql_help.c:2027 +#: sql_help.c:2010 sql_help.c:2040 msgid "combinefunc" msgstr "" -#: sql_help.c:1998 sql_help.c:2028 +#: sql_help.c:2011 sql_help.c:2041 msgid "serialfunc" msgstr "" -#: sql_help.c:1999 sql_help.c:2029 +#: sql_help.c:2012 sql_help.c:2042 msgid "deserialfunc" msgstr "" -#: sql_help.c:2000 sql_help.c:2019 sql_help.c:2030 +#: sql_help.c:2013 sql_help.c:2032 sql_help.c:2043 msgid "initial_condition" msgstr "" -#: sql_help.c:2001 sql_help.c:2031 +#: sql_help.c:2014 sql_help.c:2044 msgid "msfunc" msgstr "" -#: sql_help.c:2002 sql_help.c:2032 +#: sql_help.c:2015 sql_help.c:2045 msgid "minvfunc" msgstr "" -#: sql_help.c:2003 sql_help.c:2033 +#: sql_help.c:2016 sql_help.c:2046 msgid "mstate_data_type" msgstr "" -#: sql_help.c:2004 sql_help.c:2034 +#: sql_help.c:2017 sql_help.c:2047 msgid "mstate_data_size" msgstr "" -#: sql_help.c:2005 sql_help.c:2035 +#: sql_help.c:2018 sql_help.c:2048 msgid "mffunc" msgstr "" -#: sql_help.c:2006 sql_help.c:2036 +#: sql_help.c:2019 sql_help.c:2049 msgid "minitial_condition" msgstr "" -#: sql_help.c:2007 sql_help.c:2037 +#: sql_help.c:2020 sql_help.c:2050 msgid "sort_operator" msgstr "정렬연산자" -#: sql_help.c:2020 +#: sql_help.c:2033 msgid "or the old syntax" msgstr "또는 옛날 구문" -#: sql_help.c:2022 +#: sql_help.c:2035 msgid "base_type" msgstr "기본자료형" -#: sql_help.c:2079 +#: sql_help.c:2092 sql_help.c:2133 msgid "locale" msgstr "로케일" -#: sql_help.c:2080 sql_help.c:2119 +#: sql_help.c:2093 sql_help.c:2134 msgid "lc_collate" msgstr "lc_collate" -#: sql_help.c:2081 sql_help.c:2120 +#: sql_help.c:2094 sql_help.c:2135 msgid "lc_ctype" msgstr "lc_ctype" -#: sql_help.c:2082 sql_help.c:4141 +#: sql_help.c:2095 sql_help.c:4188 msgid "provider" msgstr "제공자" -#: sql_help.c:2084 sql_help.c:2175 +#: sql_help.c:2097 sql_help.c:2189 msgid "version" msgstr "버전" -#: sql_help.c:2086 +#: sql_help.c:2099 msgid "existing_collation" msgstr "" -#: sql_help.c:2096 +#: sql_help.c:2109 msgid "source_encoding" msgstr "원래인코딩" -#: sql_help.c:2097 +#: sql_help.c:2110 msgid "dest_encoding" msgstr "대상인코딩" -#: sql_help.c:2117 sql_help.c:2898 +#: sql_help.c:2131 sql_help.c:2917 msgid "template" msgstr "템플릿" -#: sql_help.c:2118 +#: sql_help.c:2132 msgid "encoding" msgstr "인코딩" -#: sql_help.c:2144 +#: sql_help.c:2159 msgid "constraint" msgstr "제약조건" -#: sql_help.c:2145 +#: sql_help.c:2160 msgid "where constraint is:" msgstr "제약조건 사용법:" -#: sql_help.c:2159 sql_help.c:2561 sql_help.c:2971 +#: sql_help.c:2174 sql_help.c:2580 sql_help.c:2990 msgid "event" msgstr "이벤트" -#: sql_help.c:2160 +#: sql_help.c:2175 msgid "filter_variable" msgstr "" -#: sql_help.c:2176 -msgid "old_version" -msgstr "옛버전" - -#: sql_help.c:2250 sql_help.c:2793 +#: sql_help.c:2263 sql_help.c:2812 msgid "where column_constraint is:" msgstr "칼럼_제약조건 사용법:" -#: sql_help.c:2287 +#: sql_help.c:2300 msgid "rettype" msgstr "" -#: sql_help.c:2289 +#: sql_help.c:2302 msgid "column_type" msgstr "" -#: sql_help.c:2298 sql_help.c:2492 +#: sql_help.c:2311 sql_help.c:2511 msgid "definition" msgstr "함수정의" -#: sql_help.c:2299 sql_help.c:2493 +#: sql_help.c:2312 sql_help.c:2512 msgid "obj_file" msgstr "오브젝트파일" -#: sql_help.c:2300 sql_help.c:2494 +#: sql_help.c:2313 sql_help.c:2513 msgid "link_symbol" msgstr "연결할_함수명" -#: sql_help.c:2334 sql_help.c:2546 sql_help.c:3090 +#: sql_help.c:2351 sql_help.c:2565 sql_help.c:3109 msgid "uid" msgstr "" -#: sql_help.c:2349 sql_help.c:2388 sql_help.c:2762 sql_help.c:2775 -#: sql_help.c:2789 sql_help.c:2854 +#: sql_help.c:2366 sql_help.c:2407 sql_help.c:2781 sql_help.c:2794 +#: sql_help.c:2808 sql_help.c:2873 msgid "method" msgstr "색인방법" -#: sql_help.c:2370 +#: sql_help.c:2371 +msgid "opclass_parameter" +msgstr "opclass_매개변수" + +#: sql_help.c:2388 msgid "call_handler" msgstr "" -#: sql_help.c:2371 +#: sql_help.c:2389 msgid "inline_handler" msgstr "" -#: sql_help.c:2372 +#: sql_help.c:2390 msgid "valfunction" msgstr "구문검사함수" -#: sql_help.c:2410 +#: sql_help.c:2429 msgid "com_op" msgstr "" -#: sql_help.c:2411 +#: sql_help.c:2430 msgid "neg_op" msgstr "" -#: sql_help.c:2429 +#: sql_help.c:2448 msgid "family_name" msgstr "" -#: sql_help.c:2440 +#: sql_help.c:2459 msgid "storage_type" msgstr "스토리지_유형" -#: sql_help.c:2567 sql_help.c:2978 +#: sql_help.c:2586 sql_help.c:2997 msgid "where event can be one of:" msgstr "이벤트 사용법:" -#: sql_help.c:2586 sql_help.c:2588 +#: sql_help.c:2605 sql_help.c:2607 msgid "schema_element" msgstr "" -#: sql_help.c:2625 +#: sql_help.c:2644 msgid "server_type" msgstr "서버_종류" -#: sql_help.c:2626 +#: sql_help.c:2645 msgid "server_version" msgstr "서버_버전" -#: sql_help.c:2627 sql_help.c:3719 sql_help.c:4052 +#: sql_help.c:2646 sql_help.c:3748 sql_help.c:4096 msgid "fdw_name" msgstr "fdw_이름" -#: sql_help.c:2640 +#: sql_help.c:2659 msgid "statistics_name" msgstr "통계정보_이름" -#: sql_help.c:2641 +#: sql_help.c:2660 msgid "statistics_kind" msgstr "통계정보_종류" -#: sql_help.c:2655 +#: sql_help.c:2674 msgid "subscription_name" msgstr "구독_이름" -#: sql_help.c:2755 +#: sql_help.c:2774 msgid "source_table" msgstr "원본테이블" -#: sql_help.c:2756 +#: sql_help.c:2775 msgid "like_option" msgstr "LIKE구문옵션" -#: sql_help.c:2822 +#: sql_help.c:2841 msgid "and like_option is:" msgstr "" -#: sql_help.c:2871 +#: sql_help.c:2890 msgid "directory" msgstr "디렉터리" -#: sql_help.c:2885 +#: sql_help.c:2904 msgid "parser_name" msgstr "구문분석기_이름" -#: sql_help.c:2886 +#: sql_help.c:2905 msgid "source_config" msgstr "원본_설정" -#: sql_help.c:2915 +#: sql_help.c:2934 msgid "start_function" msgstr "시작_함수" -#: sql_help.c:2916 +#: sql_help.c:2935 msgid "gettoken_function" msgstr "gettoken함수" -#: sql_help.c:2917 +#: sql_help.c:2936 msgid "end_function" msgstr "종료_함수" -#: sql_help.c:2918 +#: sql_help.c:2937 msgid "lextypes_function" msgstr "lextypes함수" -#: sql_help.c:2919 +#: sql_help.c:2938 msgid "headline_function" msgstr "headline함수" -#: sql_help.c:2931 +#: sql_help.c:2950 msgid "init_function" msgstr "init함수" -#: sql_help.c:2932 +#: sql_help.c:2951 msgid "lexize_function" msgstr "lexize함수" -#: sql_help.c:2945 +#: sql_help.c:2964 msgid "from_sql_function_name" msgstr "" -#: sql_help.c:2947 +#: sql_help.c:2966 msgid "to_sql_function_name" msgstr "" -#: sql_help.c:2973 +#: sql_help.c:2992 msgid "referenced_table_name" msgstr "" -#: sql_help.c:2974 +#: sql_help.c:2993 msgid "transition_relation_name" msgstr "전달_릴레이션이름" -#: sql_help.c:2977 +#: sql_help.c:2996 msgid "arguments" msgstr "인자들" -#: sql_help.c:3027 sql_help.c:4174 +#: sql_help.c:3046 sql_help.c:4221 msgid "label" msgstr "" -#: sql_help.c:3029 +#: sql_help.c:3048 msgid "subtype" msgstr "" -#: sql_help.c:3030 +#: sql_help.c:3049 msgid "subtype_operator_class" msgstr "" -#: sql_help.c:3032 +#: sql_help.c:3051 msgid "canonical_function" msgstr "" -#: sql_help.c:3033 +#: sql_help.c:3052 msgid "subtype_diff_function" msgstr "" -#: sql_help.c:3035 +#: sql_help.c:3054 msgid "input_function" msgstr "입력함수" -#: sql_help.c:3036 +#: sql_help.c:3055 msgid "output_function" msgstr "출력함수" -#: sql_help.c:3037 +#: sql_help.c:3056 msgid "receive_function" msgstr "받는함수" -#: sql_help.c:3038 +#: sql_help.c:3057 msgid "send_function" msgstr "주는함수" -#: sql_help.c:3039 +#: sql_help.c:3058 msgid "type_modifier_input_function" msgstr "" -#: sql_help.c:3040 +#: sql_help.c:3059 msgid "type_modifier_output_function" msgstr "" -#: sql_help.c:3041 +#: sql_help.c:3060 msgid "analyze_function" msgstr "분석함수" -#: sql_help.c:3042 +#: sql_help.c:3061 msgid "internallength" msgstr "" -#: sql_help.c:3043 +#: sql_help.c:3062 msgid "alignment" msgstr "정렬" -#: sql_help.c:3044 +#: sql_help.c:3063 msgid "storage" msgstr "스토리지" -#: sql_help.c:3045 +#: sql_help.c:3064 msgid "like_type" msgstr "" -#: sql_help.c:3046 +#: sql_help.c:3065 msgid "category" msgstr "" -#: sql_help.c:3047 +#: sql_help.c:3066 msgid "preferred" msgstr "" -#: sql_help.c:3048 +#: sql_help.c:3067 msgid "default" msgstr "기본값" -#: sql_help.c:3049 +#: sql_help.c:3068 msgid "element" msgstr "요소" -#: sql_help.c:3050 +#: sql_help.c:3069 msgid "delimiter" msgstr "구분자" -#: sql_help.c:3051 +#: sql_help.c:3070 msgid "collatable" msgstr "" -#: sql_help.c:3148 sql_help.c:3786 sql_help.c:4234 sql_help.c:4323 -#: sql_help.c:4473 sql_help.c:4573 sql_help.c:4691 +#: sql_help.c:3167 sql_help.c:3816 sql_help.c:4281 sql_help.c:4370 +#: sql_help.c:4520 sql_help.c:4620 sql_help.c:4740 msgid "with_query" msgstr "" -#: sql_help.c:3150 sql_help.c:3788 sql_help.c:4253 sql_help.c:4259 -#: sql_help.c:4262 sql_help.c:4266 sql_help.c:4270 sql_help.c:4278 -#: sql_help.c:4492 sql_help.c:4498 sql_help.c:4501 sql_help.c:4505 -#: sql_help.c:4509 sql_help.c:4517 sql_help.c:4575 sql_help.c:4710 -#: sql_help.c:4716 sql_help.c:4719 sql_help.c:4723 sql_help.c:4727 -#: sql_help.c:4735 +#: sql_help.c:3169 sql_help.c:3818 sql_help.c:4300 sql_help.c:4306 +#: sql_help.c:4309 sql_help.c:4313 sql_help.c:4317 sql_help.c:4325 +#: sql_help.c:4539 sql_help.c:4545 sql_help.c:4548 sql_help.c:4552 +#: sql_help.c:4556 sql_help.c:4564 sql_help.c:4622 sql_help.c:4759 +#: sql_help.c:4765 sql_help.c:4768 sql_help.c:4772 sql_help.c:4776 +#: sql_help.c:4784 msgid "alias" msgstr "별칭" -#: sql_help.c:3151 -msgid "using_list" +#: sql_help.c:3170 sql_help.c:4285 sql_help.c:4327 sql_help.c:4329 +#: sql_help.c:4375 sql_help.c:4524 sql_help.c:4566 sql_help.c:4568 +#: sql_help.c:4629 sql_help.c:4744 sql_help.c:4786 sql_help.c:4788 +msgid "from_item" msgstr "" -#: sql_help.c:3153 sql_help.c:3626 sql_help.c:3867 sql_help.c:4584 +#: sql_help.c:3172 sql_help.c:3653 sql_help.c:3897 sql_help.c:4631 msgid "cursor_name" msgstr "커서이름" -#: sql_help.c:3154 sql_help.c:3794 sql_help.c:4585 +#: sql_help.c:3173 sql_help.c:3824 sql_help.c:4632 msgid "output_expression" msgstr "출력표현식" -#: sql_help.c:3155 sql_help.c:3795 sql_help.c:4237 sql_help.c:4326 -#: sql_help.c:4476 sql_help.c:4586 sql_help.c:4694 +#: sql_help.c:3174 sql_help.c:3825 sql_help.c:4284 sql_help.c:4373 +#: sql_help.c:4523 sql_help.c:4633 sql_help.c:4743 msgid "output_name" msgstr "" -#: sql_help.c:3171 +#: sql_help.c:3190 msgid "code" msgstr "" -#: sql_help.c:3570 +#: sql_help.c:3595 msgid "parameter" msgstr "매개변수" -#: sql_help.c:3591 sql_help.c:3592 sql_help.c:3892 +#: sql_help.c:3617 sql_help.c:3618 sql_help.c:3922 msgid "statement" msgstr "명령구문" -#: sql_help.c:3625 sql_help.c:3866 +#: sql_help.c:3652 sql_help.c:3896 msgid "direction" msgstr "방향" -#: sql_help.c:3627 sql_help.c:3868 +#: sql_help.c:3654 sql_help.c:3898 msgid "where direction can be empty or one of:" msgstr "방향 자리는 비워두거나 다음 중 하나:" -#: sql_help.c:3628 sql_help.c:3629 sql_help.c:3630 sql_help.c:3631 -#: sql_help.c:3632 sql_help.c:3869 sql_help.c:3870 sql_help.c:3871 -#: sql_help.c:3872 sql_help.c:3873 sql_help.c:4247 sql_help.c:4249 -#: sql_help.c:4337 sql_help.c:4339 sql_help.c:4486 sql_help.c:4488 -#: sql_help.c:4639 sql_help.c:4641 sql_help.c:4704 sql_help.c:4706 +#: sql_help.c:3655 sql_help.c:3656 sql_help.c:3657 sql_help.c:3658 +#: sql_help.c:3659 sql_help.c:3899 sql_help.c:3900 sql_help.c:3901 +#: sql_help.c:3902 sql_help.c:3903 sql_help.c:4294 sql_help.c:4296 +#: sql_help.c:4384 sql_help.c:4386 sql_help.c:4533 sql_help.c:4535 +#: sql_help.c:4688 sql_help.c:4690 sql_help.c:4753 sql_help.c:4755 msgid "count" msgstr "출력개수" -#: sql_help.c:3712 sql_help.c:4045 +#: sql_help.c:3741 sql_help.c:4089 msgid "sequence_name" msgstr "시퀀스이름" -#: sql_help.c:3725 sql_help.c:4058 +#: sql_help.c:3754 sql_help.c:4102 msgid "arg_name" msgstr "인자이름" -#: sql_help.c:3726 sql_help.c:4059 +#: sql_help.c:3755 sql_help.c:4103 msgid "arg_type" msgstr "인자자료형" -#: sql_help.c:3731 sql_help.c:4064 +#: sql_help.c:3760 sql_help.c:4108 msgid "loid" msgstr "" -#: sql_help.c:3754 +#: sql_help.c:3784 msgid "remote_schema" msgstr "원격_스키마" -#: sql_help.c:3757 +#: sql_help.c:3787 msgid "local_schema" msgstr "로컬_스키마" -#: sql_help.c:3792 +#: sql_help.c:3822 msgid "conflict_target" msgstr "" -#: sql_help.c:3793 +#: sql_help.c:3823 msgid "conflict_action" msgstr "" -#: sql_help.c:3796 +#: sql_help.c:3826 msgid "where conflict_target can be one of:" msgstr "conflict_target 사용법:" -#: sql_help.c:3797 +#: sql_help.c:3827 msgid "index_column_name" msgstr "인덱스칼럼이름" -#: sql_help.c:3798 +#: sql_help.c:3828 msgid "index_expression" msgstr "인덱스표현식" -#: sql_help.c:3801 +#: sql_help.c:3831 msgid "index_predicate" msgstr "" -#: sql_help.c:3803 +#: sql_help.c:3833 msgid "and conflict_action is one of:" msgstr "conflict_action 사용법:" -#: sql_help.c:3809 sql_help.c:4581 +#: sql_help.c:3839 sql_help.c:4628 msgid "sub-SELECT" msgstr "" -#: sql_help.c:3818 sql_help.c:3881 sql_help.c:4557 +#: sql_help.c:3848 sql_help.c:3911 sql_help.c:4604 msgid "channel" msgstr "" -#: sql_help.c:3840 +#: sql_help.c:3870 msgid "lockmode" msgstr "" -#: sql_help.c:3841 +#: sql_help.c:3871 msgid "where lockmode is one of:" msgstr "lockmode 사용법:" -#: sql_help.c:3882 +#: sql_help.c:3912 msgid "payload" msgstr "" -#: sql_help.c:3909 +#: sql_help.c:3939 msgid "old_role" msgstr "기존롤" -#: sql_help.c:3910 +#: sql_help.c:3940 msgid "new_role" msgstr "새롤" -#: sql_help.c:3935 sql_help.c:4096 sql_help.c:4104 +#: sql_help.c:3971 sql_help.c:4143 sql_help.c:4151 msgid "savepoint_name" msgstr "savepoint_name" -#: sql_help.c:4238 sql_help.c:4280 sql_help.c:4282 sql_help.c:4328 -#: sql_help.c:4477 sql_help.c:4519 sql_help.c:4521 sql_help.c:4695 -#: sql_help.c:4737 sql_help.c:4739 -msgid "from_item" -msgstr "" - -#: sql_help.c:4240 sql_help.c:4292 sql_help.c:4479 sql_help.c:4531 -#: sql_help.c:4697 sql_help.c:4749 +#: sql_help.c:4287 sql_help.c:4339 sql_help.c:4526 sql_help.c:4578 +#: sql_help.c:4746 sql_help.c:4798 msgid "grouping_element" msgstr "" -#: sql_help.c:4242 sql_help.c:4332 sql_help.c:4481 sql_help.c:4699 +#: sql_help.c:4289 sql_help.c:4379 sql_help.c:4528 sql_help.c:4748 msgid "window_name" msgstr "윈도우이름" -#: sql_help.c:4243 sql_help.c:4333 sql_help.c:4482 sql_help.c:4700 +#: sql_help.c:4290 sql_help.c:4380 sql_help.c:4529 sql_help.c:4749 msgid "window_definition" msgstr "원도우정의" -#: sql_help.c:4244 sql_help.c:4258 sql_help.c:4296 sql_help.c:4334 -#: sql_help.c:4483 sql_help.c:4497 sql_help.c:4535 sql_help.c:4701 -#: sql_help.c:4715 sql_help.c:4753 +#: sql_help.c:4291 sql_help.c:4305 sql_help.c:4343 sql_help.c:4381 +#: sql_help.c:4530 sql_help.c:4544 sql_help.c:4582 sql_help.c:4750 +#: sql_help.c:4764 sql_help.c:4802 msgid "select" msgstr "" -#: sql_help.c:4251 sql_help.c:4490 sql_help.c:4708 +#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4757 msgid "where from_item can be one of:" msgstr "" -#: sql_help.c:4254 sql_help.c:4260 sql_help.c:4263 sql_help.c:4267 -#: sql_help.c:4279 sql_help.c:4493 sql_help.c:4499 sql_help.c:4502 -#: sql_help.c:4506 sql_help.c:4518 sql_help.c:4711 sql_help.c:4717 -#: sql_help.c:4720 sql_help.c:4724 sql_help.c:4736 +#: sql_help.c:4301 sql_help.c:4307 sql_help.c:4310 sql_help.c:4314 +#: sql_help.c:4326 sql_help.c:4540 sql_help.c:4546 sql_help.c:4549 +#: sql_help.c:4553 sql_help.c:4565 sql_help.c:4760 sql_help.c:4766 +#: sql_help.c:4769 sql_help.c:4773 sql_help.c:4785 msgid "column_alias" msgstr "칼럼별칭" -#: sql_help.c:4255 sql_help.c:4494 sql_help.c:4712 +#: sql_help.c:4302 sql_help.c:4541 sql_help.c:4761 msgid "sampling_method" msgstr "표본추출방법" -#: sql_help.c:4257 sql_help.c:4496 sql_help.c:4714 +#: sql_help.c:4304 sql_help.c:4543 sql_help.c:4763 msgid "seed" msgstr "" -#: sql_help.c:4261 sql_help.c:4294 sql_help.c:4500 sql_help.c:4533 -#: sql_help.c:4718 sql_help.c:4751 +#: sql_help.c:4308 sql_help.c:4341 sql_help.c:4547 sql_help.c:4580 +#: sql_help.c:4767 sql_help.c:4800 msgid "with_query_name" msgstr "" -#: sql_help.c:4271 sql_help.c:4274 sql_help.c:4277 sql_help.c:4510 -#: sql_help.c:4513 sql_help.c:4516 sql_help.c:4728 sql_help.c:4731 -#: sql_help.c:4734 +#: sql_help.c:4318 sql_help.c:4321 sql_help.c:4324 sql_help.c:4557 +#: sql_help.c:4560 sql_help.c:4563 sql_help.c:4777 sql_help.c:4780 +#: sql_help.c:4783 msgid "column_definition" msgstr "칼럼정의" -#: sql_help.c:4281 sql_help.c:4520 sql_help.c:4738 +#: sql_help.c:4328 sql_help.c:4567 sql_help.c:4787 msgid "join_type" msgstr "" -#: sql_help.c:4283 sql_help.c:4522 sql_help.c:4740 +#: sql_help.c:4330 sql_help.c:4569 sql_help.c:4789 msgid "join_condition" msgstr "" -#: sql_help.c:4284 sql_help.c:4523 sql_help.c:4741 +#: sql_help.c:4331 sql_help.c:4570 sql_help.c:4790 msgid "join_column" msgstr "" -#: sql_help.c:4285 sql_help.c:4524 sql_help.c:4742 +#: sql_help.c:4332 sql_help.c:4571 sql_help.c:4791 msgid "and grouping_element can be one of:" msgstr "" -#: sql_help.c:4293 sql_help.c:4532 sql_help.c:4750 +#: sql_help.c:4340 sql_help.c:4579 sql_help.c:4799 msgid "and with_query is:" msgstr "" -#: sql_help.c:4297 sql_help.c:4536 sql_help.c:4754 +#: sql_help.c:4344 sql_help.c:4583 sql_help.c:4803 msgid "values" msgstr "값" -#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4755 +#: sql_help.c:4345 sql_help.c:4584 sql_help.c:4804 msgid "insert" msgstr "" -#: sql_help.c:4299 sql_help.c:4538 sql_help.c:4756 +#: sql_help.c:4346 sql_help.c:4585 sql_help.c:4805 msgid "update" msgstr "" -#: sql_help.c:4300 sql_help.c:4539 sql_help.c:4757 +#: sql_help.c:4347 sql_help.c:4586 sql_help.c:4806 msgid "delete" msgstr "" -#: sql_help.c:4327 +#: sql_help.c:4374 msgid "new_table" msgstr "새테이블" -#: sql_help.c:4352 +#: sql_help.c:4399 msgid "timezone" msgstr "" -#: sql_help.c:4397 +#: sql_help.c:4444 msgid "snapshot_id" msgstr "" -#: sql_help.c:4582 -msgid "from_list" -msgstr "" - -#: sql_help.c:4637 +#: sql_help.c:4686 msgid "sort_expression" msgstr "" -#: sql_help.c:4764 sql_help.c:5742 +#: sql_help.c:4813 sql_help.c:5791 msgid "abort the current transaction" msgstr "현재 트랜잭션 중지함" -#: sql_help.c:4770 +#: sql_help.c:4819 msgid "change the definition of an aggregate function" msgstr "집계함수 정보 바꾸기" -#: sql_help.c:4776 +#: sql_help.c:4825 msgid "change the definition of a collation" msgstr "collation 정의 바꾸기" -#: sql_help.c:4782 +#: sql_help.c:4831 msgid "change the definition of a conversion" msgstr "문자코드 변환규칙(conversion) 정보 바꾸기" -#: sql_help.c:4788 +#: sql_help.c:4837 msgid "change a database" msgstr "데이터베이스 변경" -#: sql_help.c:4794 +#: sql_help.c:4843 msgid "define default access privileges" msgstr "기본 접근 권한 정의" -#: sql_help.c:4800 +#: sql_help.c:4849 msgid "change the definition of a domain" msgstr "도메인 정보 바꾸기" -#: sql_help.c:4806 +#: sql_help.c:4855 msgid "change the definition of an event trigger" msgstr "트리거 정보 바꾸기" -#: sql_help.c:4812 +#: sql_help.c:4861 msgid "change the definition of an extension" msgstr "확장모듈 정의 바꾸기" -#: sql_help.c:4818 +#: sql_help.c:4867 msgid "change the definition of a foreign-data wrapper" msgstr "외부 데이터 래퍼 정의 바꾸기" -#: sql_help.c:4824 +#: sql_help.c:4873 msgid "change the definition of a foreign table" msgstr "외부 테이블 정의 바꾸기" -#: sql_help.c:4830 +#: sql_help.c:4879 msgid "change the definition of a function" msgstr "함수 정보 바꾸기" -#: sql_help.c:4836 +#: sql_help.c:4885 msgid "change role name or membership" msgstr "롤 이름이나 맴버쉽 바꾸기" -#: sql_help.c:4842 +#: sql_help.c:4891 msgid "change the definition of an index" msgstr "인덱스 정의 바꾸기" -#: sql_help.c:4848 +#: sql_help.c:4897 msgid "change the definition of a procedural language" msgstr "procedural language 정보 바꾸기" -#: sql_help.c:4854 +#: sql_help.c:4903 msgid "change the definition of a large object" msgstr "대형 객체 정의 바꾸기" -#: sql_help.c:4860 +#: sql_help.c:4909 msgid "change the definition of a materialized view" msgstr "materialized 뷰 정의 바꾸기" -#: sql_help.c:4866 +#: sql_help.c:4915 msgid "change the definition of an operator" msgstr "연산자 정의 바꾸기" -#: sql_help.c:4872 +#: sql_help.c:4921 msgid "change the definition of an operator class" msgstr "연산자 클래스 정보 바꾸기" -#: sql_help.c:4878 +#: sql_help.c:4927 msgid "change the definition of an operator family" msgstr "연산자 부류의 정의 바꾸기" -#: sql_help.c:4884 +#: sql_help.c:4933 msgid "change the definition of a row level security policy" msgstr "로우 단위 보안 정책의 정의 바꾸기" -#: sql_help.c:4890 +#: sql_help.c:4939 msgid "change the definition of a procedure" msgstr "프로시져 정의 바꾸기" -#: sql_help.c:4896 +#: sql_help.c:4945 msgid "change the definition of a publication" msgstr "발행 정보 바꾸기" -#: sql_help.c:4902 sql_help.c:5004 +#: sql_help.c:4951 sql_help.c:5053 msgid "change a database role" msgstr "데이터베이스 롤 변경" -#: sql_help.c:4908 +#: sql_help.c:4957 msgid "change the definition of a routine" msgstr "루틴 정의 바꾸기" -#: sql_help.c:4914 +#: sql_help.c:4963 msgid "change the definition of a rule" msgstr "룰 정의 바꾸기" -#: sql_help.c:4920 +#: sql_help.c:4969 msgid "change the definition of a schema" msgstr "스키마 이름 바꾸기" -#: sql_help.c:4926 +#: sql_help.c:4975 msgid "change the definition of a sequence generator" msgstr "시퀀스 정보 바꾸기" -#: sql_help.c:4932 +#: sql_help.c:4981 msgid "change the definition of a foreign server" msgstr "외부 서버 정의 바꾸기" -#: sql_help.c:4938 +#: sql_help.c:4987 msgid "change the definition of an extended statistics object" msgstr "확장 통계정보 객체 정의 바꾸기" -#: sql_help.c:4944 +#: sql_help.c:4993 msgid "change the definition of a subscription" msgstr "구독 정보 바꾸기" -#: sql_help.c:4950 +#: sql_help.c:4999 msgid "change a server configuration parameter" msgstr "서버 환경 설정 매개 변수 바꾸기" -#: sql_help.c:4956 +#: sql_help.c:5005 msgid "change the definition of a table" msgstr "테이블 정보 바꾸기" -#: sql_help.c:4962 +#: sql_help.c:5011 msgid "change the definition of a tablespace" msgstr "테이블스페이스 정의 바꾸기" -#: sql_help.c:4968 +#: sql_help.c:5017 msgid "change the definition of a text search configuration" msgstr "텍스트 검색 구성 정의 바꾸기" -#: sql_help.c:4974 +#: sql_help.c:5023 msgid "change the definition of a text search dictionary" msgstr "텍스트 검색 사전 정의 바꾸기" -#: sql_help.c:4980 +#: sql_help.c:5029 msgid "change the definition of a text search parser" msgstr "텍스트 검색 파서 정의 바꾸기" -#: sql_help.c:4986 +#: sql_help.c:5035 msgid "change the definition of a text search template" msgstr "텍스트 검색 템플릿 정의 바꾸기" -#: sql_help.c:4992 +#: sql_help.c:5041 msgid "change the definition of a trigger" msgstr "트리거 정보 바꾸기" -#: sql_help.c:4998 +#: sql_help.c:5047 msgid "change the definition of a type" msgstr "자료형 정의 바꾸기" -#: sql_help.c:5010 +#: sql_help.c:5059 msgid "change the definition of a user mapping" msgstr "사용자 매핑 정의 바꾸기" -#: sql_help.c:5016 +#: sql_help.c:5065 msgid "change the definition of a view" msgstr "뷰 정의 바꾸기" -#: sql_help.c:5022 +#: sql_help.c:5071 msgid "collect statistics about a database" msgstr "데이터베이스 사용 통계 정보를 갱신함" -#: sql_help.c:5028 sql_help.c:5820 +#: sql_help.c:5077 sql_help.c:5869 msgid "start a transaction block" msgstr "트랜잭션 블럭을 시작함" -#: sql_help.c:5034 +#: sql_help.c:5083 msgid "invoke a procedure" msgstr "프로시져 호출" -#: sql_help.c:5040 +#: sql_help.c:5089 msgid "force a write-ahead log checkpoint" msgstr "트랜잭션 로그를 강제로 체크포인트 함" -#: sql_help.c:5046 +#: sql_help.c:5095 msgid "close a cursor" msgstr "커서 닫기" -#: sql_help.c:5052 +#: sql_help.c:5101 msgid "cluster a table according to an index" msgstr "지정한 인덱스 기준으로 테이블 자료를 다시 저장함" -#: sql_help.c:5058 +#: sql_help.c:5107 msgid "define or change the comment of an object" msgstr "해당 개체의 코멘트를 지정하거나 수정함" -#: sql_help.c:5064 sql_help.c:5622 +#: sql_help.c:5113 sql_help.c:5671 msgid "commit the current transaction" msgstr "현재 트랜잭션 commit" -#: sql_help.c:5070 +#: sql_help.c:5119 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "two-phase 커밋을 위해 먼저 준비된 트랜잭션을 커밋하세요." -#: sql_help.c:5076 +#: sql_help.c:5125 msgid "copy data between a file and a table" msgstr "테이블과 파일 사이 자료를 복사함" -#: sql_help.c:5082 +#: sql_help.c:5131 msgid "define a new access method" msgstr "새 접속 방법 정의" -#: sql_help.c:5088 +#: sql_help.c:5137 msgid "define a new aggregate function" msgstr "새 집계합수 만들기" -#: sql_help.c:5094 +#: sql_help.c:5143 msgid "define a new cast" msgstr "새 형변환자 만들기" -#: sql_help.c:5100 +#: sql_help.c:5149 msgid "define a new collation" msgstr "새 collation 만들기" -#: sql_help.c:5106 +#: sql_help.c:5155 msgid "define a new encoding conversion" msgstr "새 문자코드변환규칙(conversion) 만들기" -#: sql_help.c:5112 +#: sql_help.c:5161 msgid "create a new database" msgstr "데이터베이스 생성" -#: sql_help.c:5118 +#: sql_help.c:5167 msgid "define a new domain" msgstr "새 도메인 만들기" -#: sql_help.c:5124 +#: sql_help.c:5173 msgid "define a new event trigger" msgstr "새 이벤트 트리거 만들기" -#: sql_help.c:5130 +#: sql_help.c:5179 msgid "install an extension" msgstr "확장 모듈 설치" -#: sql_help.c:5136 +#: sql_help.c:5185 msgid "define a new foreign-data wrapper" msgstr "새 외부 데이터 래퍼 정의" -#: sql_help.c:5142 +#: sql_help.c:5191 msgid "define a new foreign table" msgstr "새 외부 테이블 정의" -#: sql_help.c:5148 +#: sql_help.c:5197 msgid "define a new function" msgstr "새 함수 만들기" -#: sql_help.c:5154 sql_help.c:5214 sql_help.c:5316 +#: sql_help.c:5203 sql_help.c:5263 sql_help.c:5365 msgid "define a new database role" msgstr "새 데이터베이스 롤 만들기" -#: sql_help.c:5160 +#: sql_help.c:5209 msgid "define a new index" msgstr "새 인덱스 만들기" -#: sql_help.c:5166 +#: sql_help.c:5215 msgid "define a new procedural language" msgstr "새 프로시주얼 언어 만들기" -#: sql_help.c:5172 +#: sql_help.c:5221 msgid "define a new materialized view" msgstr "새 materialized 뷰 만들기" -#: sql_help.c:5178 +#: sql_help.c:5227 msgid "define a new operator" msgstr "새 연산자 만들기" -#: sql_help.c:5184 +#: sql_help.c:5233 msgid "define a new operator class" msgstr "새 연잔자 클래스 만들기" -#: sql_help.c:5190 +#: sql_help.c:5239 msgid "define a new operator family" msgstr "새 연산자 부류 만들기" -#: sql_help.c:5196 +#: sql_help.c:5245 msgid "define a new row level security policy for a table" msgstr "특정 테이블에 로우 단위 보안 정책 정의" -#: sql_help.c:5202 +#: sql_help.c:5251 msgid "define a new procedure" msgstr "새 프로시져 만들기" -#: sql_help.c:5208 +#: sql_help.c:5257 msgid "define a new publication" msgstr "새 발행 만들기" -#: sql_help.c:5220 +#: sql_help.c:5269 msgid "define a new rewrite rule" msgstr "새 룰(rule) 만들기" -#: sql_help.c:5226 +#: sql_help.c:5275 msgid "define a new schema" msgstr "새 스키마(schema) 만들기" -#: sql_help.c:5232 +#: sql_help.c:5281 msgid "define a new sequence generator" msgstr "새 시퀀스 만들기" -#: sql_help.c:5238 +#: sql_help.c:5287 msgid "define a new foreign server" msgstr "새 외부 서버 정의" -#: sql_help.c:5244 +#: sql_help.c:5293 msgid "define extended statistics" msgstr "새 확장 통계정보 만들기" -#: sql_help.c:5250 +#: sql_help.c:5299 msgid "define a new subscription" msgstr "새 구독 만들기" -#: sql_help.c:5256 +#: sql_help.c:5305 msgid "define a new table" msgstr "새 테이블 만들기" -#: sql_help.c:5262 sql_help.c:5778 +#: sql_help.c:5311 sql_help.c:5827 msgid "define a new table from the results of a query" msgstr "쿼리 결과를 새 테이블로 만들기" -#: sql_help.c:5268 +#: sql_help.c:5317 msgid "define a new tablespace" msgstr "새 테이블스페이스 만들기" -#: sql_help.c:5274 +#: sql_help.c:5323 msgid "define a new text search configuration" msgstr "새 텍스트 검색 구성 정의" -#: sql_help.c:5280 +#: sql_help.c:5329 msgid "define a new text search dictionary" msgstr "새 텍스트 검색 사전 정의" -#: sql_help.c:5286 +#: sql_help.c:5335 msgid "define a new text search parser" msgstr "새 텍스트 검색 파서 정의" -#: sql_help.c:5292 +#: sql_help.c:5341 msgid "define a new text search template" msgstr "새 텍스트 검색 템플릿 정의" -#: sql_help.c:5298 +#: sql_help.c:5347 msgid "define a new transform" msgstr "새 transform 만들기" -#: sql_help.c:5304 +#: sql_help.c:5353 msgid "define a new trigger" msgstr "새 트리거 만들기" -#: sql_help.c:5310 +#: sql_help.c:5359 msgid "define a new data type" msgstr "새 자료형 만들기" -#: sql_help.c:5322 +#: sql_help.c:5371 msgid "define a new mapping of a user to a foreign server" msgstr "사용자와 외부 서버 간의 새 매핑 정의" -#: sql_help.c:5328 +#: sql_help.c:5377 msgid "define a new view" msgstr "새 view 만들기" -#: sql_help.c:5334 +#: sql_help.c:5383 msgid "deallocate a prepared statement" msgstr "준비된 구문(prepared statement) 지우기" -#: sql_help.c:5340 +#: sql_help.c:5389 msgid "define a cursor" msgstr "커서 지정" -#: sql_help.c:5346 +#: sql_help.c:5395 msgid "delete rows of a table" msgstr "테이블의 자료 삭제" -#: sql_help.c:5352 +#: sql_help.c:5401 msgid "discard session state" msgstr "세션 상태 삭제" -#: sql_help.c:5358 +#: sql_help.c:5407 msgid "execute an anonymous code block" msgstr "임의 코드 블록 실행" -#: sql_help.c:5364 +#: sql_help.c:5413 msgid "remove an access method" msgstr "접근 방법 삭제" -#: sql_help.c:5370 +#: sql_help.c:5419 msgid "remove an aggregate function" msgstr "집계 함수 삭제" -#: sql_help.c:5376 +#: sql_help.c:5425 msgid "remove a cast" msgstr "형변환자 삭제" -#: sql_help.c:5382 +#: sql_help.c:5431 msgid "remove a collation" msgstr "collation 삭제" -#: sql_help.c:5388 +#: sql_help.c:5437 msgid "remove a conversion" msgstr "문자코드 변환규칙(conversion) 삭제" -#: sql_help.c:5394 +#: sql_help.c:5443 msgid "remove a database" msgstr "데이터베이스 삭제" -#: sql_help.c:5400 +#: sql_help.c:5449 msgid "remove a domain" msgstr "도메인 삭제" -#: sql_help.c:5406 +#: sql_help.c:5455 msgid "remove an event trigger" msgstr "이벤트 트리거 삭제" -#: sql_help.c:5412 +#: sql_help.c:5461 msgid "remove an extension" msgstr "확장 모듈 삭제" -#: sql_help.c:5418 +#: sql_help.c:5467 msgid "remove a foreign-data wrapper" msgstr "외부 데이터 래퍼 제거" -#: sql_help.c:5424 +#: sql_help.c:5473 msgid "remove a foreign table" msgstr "외부 테이블 삭제" -#: sql_help.c:5430 +#: sql_help.c:5479 msgid "remove a function" msgstr "함수 삭제" -#: sql_help.c:5436 sql_help.c:5502 sql_help.c:5604 +#: sql_help.c:5485 sql_help.c:5551 sql_help.c:5653 msgid "remove a database role" msgstr "데이터베이스 롤 삭제" -#: sql_help.c:5442 +#: sql_help.c:5491 msgid "remove an index" msgstr "인덱스 삭제" -#: sql_help.c:5448 +#: sql_help.c:5497 msgid "remove a procedural language" msgstr "프로시주얼 언어 삭제" -#: sql_help.c:5454 +#: sql_help.c:5503 msgid "remove a materialized view" msgstr "materialized 뷰 삭제" -#: sql_help.c:5460 +#: sql_help.c:5509 msgid "remove an operator" msgstr "연산자 삭제" -#: sql_help.c:5466 +#: sql_help.c:5515 msgid "remove an operator class" msgstr "연산자 클래스 삭제" -#: sql_help.c:5472 +#: sql_help.c:5521 msgid "remove an operator family" msgstr "연산자 부류 삭제" -#: sql_help.c:5478 +#: sql_help.c:5527 msgid "remove database objects owned by a database role" msgstr "데이터베이스 롤로 권한이 부여된 데이터베이스 개체들을 삭제하세요" -#: sql_help.c:5484 +#: sql_help.c:5533 msgid "remove a row level security policy from a table" msgstr "특정 테이블에 정의된 로우 단위 보안 정책 삭제" -#: sql_help.c:5490 +#: sql_help.c:5539 msgid "remove a procedure" msgstr "프로시져 삭제" -#: sql_help.c:5496 +#: sql_help.c:5545 msgid "remove a publication" msgstr "발행 삭제" -#: sql_help.c:5508 +#: sql_help.c:5557 msgid "remove a routine" msgstr "루틴 삭제" -#: sql_help.c:5514 +#: sql_help.c:5563 msgid "remove a rewrite rule" msgstr "룰(rule) 삭제" -#: sql_help.c:5520 +#: sql_help.c:5569 msgid "remove a schema" msgstr "스키마(schema) 삭제" -#: sql_help.c:5526 +#: sql_help.c:5575 msgid "remove a sequence" msgstr "시퀀스 삭제" -#: sql_help.c:5532 +#: sql_help.c:5581 msgid "remove a foreign server descriptor" msgstr "외부 서버 설명자 제거" -#: sql_help.c:5538 +#: sql_help.c:5587 msgid "remove extended statistics" msgstr "확장 통계정보 삭제" -#: sql_help.c:5544 +#: sql_help.c:5593 msgid "remove a subscription" msgstr "구독 삭제" -#: sql_help.c:5550 +#: sql_help.c:5599 msgid "remove a table" msgstr "테이블 삭제" -#: sql_help.c:5556 +#: sql_help.c:5605 msgid "remove a tablespace" msgstr "테이블스페이스 삭제" -#: sql_help.c:5562 +#: sql_help.c:5611 msgid "remove a text search configuration" msgstr "텍스트 검색 구성 제거" -#: sql_help.c:5568 +#: sql_help.c:5617 msgid "remove a text search dictionary" msgstr "텍스트 검색 사전 제거" -#: sql_help.c:5574 +#: sql_help.c:5623 msgid "remove a text search parser" msgstr "텍스트 검색 파서 제거" -#: sql_help.c:5580 +#: sql_help.c:5629 msgid "remove a text search template" msgstr "텍스트 검색 템플릿 제거" -#: sql_help.c:5586 +#: sql_help.c:5635 msgid "remove a transform" msgstr "transform 삭제" -#: sql_help.c:5592 +#: sql_help.c:5641 msgid "remove a trigger" msgstr "트리거 삭제" -#: sql_help.c:5598 +#: sql_help.c:5647 msgid "remove a data type" msgstr "자료형 삭제" -#: sql_help.c:5610 +#: sql_help.c:5659 msgid "remove a user mapping for a foreign server" msgstr "외부 서버에 대한 사용자 매핑 제거" -#: sql_help.c:5616 +#: sql_help.c:5665 msgid "remove a view" msgstr "뷰(view) 삭제" -#: sql_help.c:5628 +#: sql_help.c:5677 msgid "execute a prepared statement" msgstr "준비된 구문(prepared statement) 실행" -#: sql_help.c:5634 +#: sql_help.c:5683 msgid "show the execution plan of a statement" msgstr "쿼리 실행계획 보기" -#: sql_help.c:5640 +#: sql_help.c:5689 msgid "retrieve rows from a query using a cursor" msgstr "해당 커서에서 자료 뽑기" -#: sql_help.c:5646 +#: sql_help.c:5695 msgid "define access privileges" msgstr "액세스 권한 지정하기" -#: sql_help.c:5652 +#: sql_help.c:5701 msgid "import table definitions from a foreign server" msgstr "외부 서버로부터 테이블 정의 가져오기" -#: sql_help.c:5658 +#: sql_help.c:5707 msgid "create new rows in a table" msgstr "테이블 자료 삽입" -#: sql_help.c:5664 +#: sql_help.c:5713 msgid "listen for a notification" msgstr "특정 서버 메시지 수신함" -#: sql_help.c:5670 +#: sql_help.c:5719 msgid "load a shared library file" msgstr "공유 라이브러리 파일 로드" -#: sql_help.c:5676 +#: sql_help.c:5725 msgid "lock a table" msgstr "테이블 잠금" -#: sql_help.c:5682 +#: sql_help.c:5731 msgid "position a cursor" msgstr "커서 위치 옮기기" -#: sql_help.c:5688 +#: sql_help.c:5737 msgid "generate a notification" msgstr "특정 서버 메시지 발생" -#: sql_help.c:5694 +#: sql_help.c:5743 msgid "prepare a statement for execution" msgstr "준비된 구문(prepared statement) 만들기" -#: sql_help.c:5700 +#: sql_help.c:5749 msgid "prepare the current transaction for two-phase commit" msgstr "two-phase 커밋을 위해 현재 트랜잭션을 준비함" -#: sql_help.c:5706 +#: sql_help.c:5755 msgid "change the ownership of database objects owned by a database role" msgstr "데이터베이스 롤로 권한이 부여된 데이터베이스 개체들의 소유주 바꾸기" -#: sql_help.c:5712 +#: sql_help.c:5761 msgid "replace the contents of a materialized view" msgstr "구체화된 뷰의 내용 수정" -#: sql_help.c:5718 +#: sql_help.c:5767 msgid "rebuild indexes" msgstr "인덱스 다시 만들기" -#: sql_help.c:5724 +#: sql_help.c:5773 msgid "destroy a previously defined savepoint" msgstr "이전 정의된 savepoint를 파기함" -#: sql_help.c:5730 +#: sql_help.c:5779 msgid "restore the value of a run-time parameter to the default value" msgstr "실시간 환경 변수값을 초기값으로 다시 지정" -#: sql_help.c:5736 +#: sql_help.c:5785 msgid "remove access privileges" msgstr "액세스 권한 해제하기" -#: sql_help.c:5748 +#: sql_help.c:5797 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "two-phase 커밋을 위해 먼저 준비되었던 트랜잭션 실행취소하기" -#: sql_help.c:5754 +#: sql_help.c:5803 msgid "roll back to a savepoint" msgstr "savepoint 파기하기" -#: sql_help.c:5760 +#: sql_help.c:5809 msgid "define a new savepoint within the current transaction" msgstr "현재 트랜잭션에서 새로운 savepoint 만들기" -#: sql_help.c:5766 +#: sql_help.c:5815 msgid "define or change a security label applied to an object" msgstr "해당 개체에 보안 라벨을 정의하거나 변경" -#: sql_help.c:5772 sql_help.c:5826 sql_help.c:5862 +#: sql_help.c:5821 sql_help.c:5875 sql_help.c:5911 msgid "retrieve rows from a table or view" msgstr "테이블이나 뷰의 자료를 출력" -#: sql_help.c:5784 +#: sql_help.c:5833 msgid "change a run-time parameter" msgstr "실시간 환경 변수값 바꾸기" -#: sql_help.c:5790 +#: sql_help.c:5839 msgid "set constraint check timing for the current transaction" msgstr "현재 트랜잭션에서 제약조건 설정" -#: sql_help.c:5796 +#: sql_help.c:5845 msgid "set the current user identifier of the current session" msgstr "현재 세션의 현재 사용자 식별자를 지정" -#: sql_help.c:5802 +#: sql_help.c:5851 msgid "" "set the session user identifier and the current user identifier of the " "current session" msgstr "현재 세션의 사용자 인증을 지정함 - 사용자 지정" -#: sql_help.c:5808 +#: sql_help.c:5857 msgid "set the characteristics of the current transaction" msgstr "현재 트랜잭션의 성질을 지정함" -#: sql_help.c:5814 +#: sql_help.c:5863 msgid "show the value of a run-time parameter" msgstr "실시간 환경 변수값들을 보여줌" -#: sql_help.c:5832 +#: sql_help.c:5881 msgid "empty a table or set of tables" msgstr "하나 또는 지정한 여러개의 테이블에서 모든 자료 지움" -#: sql_help.c:5838 +#: sql_help.c:5887 msgid "stop listening for a notification" msgstr "특정 서버 메시지 수신 기능 끔" -#: sql_help.c:5844 +#: sql_help.c:5893 msgid "update rows of a table" msgstr "테이블 자료 갱신" -#: sql_help.c:5850 +#: sql_help.c:5899 msgid "garbage-collect and optionally analyze a database" msgstr "물리적인 자료 정리 작업 - 쓰레기값 청소" -#: sql_help.c:5856 +#: sql_help.c:5905 msgid "compute a set of rows" msgstr "compute a set of rows" -#: startup.c:216 +#: startup.c:212 #, c-format msgid "-1 can only be used in non-interactive mode" msgstr "-1 옵션은 비대화형 모드에서만 사용할 수 있음" -#: startup.c:303 +#: startup.c:299 #, c-format msgid "could not connect to server: %s" msgstr "서버 접속 실패: %s" -#: startup.c:331 +#: startup.c:327 #, c-format msgid "could not open log file \"%s\": %m" msgstr "\"%s\" 잠금파일을 열 수 없음: %m" -#: startup.c:443 +#: startup.c:439 #, c-format msgid "" "Type \"help\" for help.\n" @@ -6320,27 +6489,27 @@ msgstr "" "도움말을 보려면 \"help\"를 입력하십시오.\n" "\n" -#: startup.c:593 +#: startup.c:589 #, c-format msgid "could not set printing parameter \"%s\"" msgstr "출력 매개 변수 \"%s\" 지정할 수 없음" -#: startup.c:701 +#: startup.c:697 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "자세한 도움말은 \"%s --help\"\n" -#: startup.c:718 +#: startup.c:714 #, c-format msgid "extra command-line argument \"%s\" ignored" msgstr "추가 명령행 인자 \"%s\" 무시됨" -#: startup.c:767 +#: startup.c:763 #, c-format msgid "could not find own program executable" msgstr "실행 가능한 프로그램을 찾을 수 없음" -#: tab-complete.c:4408 +#: tab-complete.c:4640 #, c-format msgid "" "tab completion query failed: %s\n" @@ -6351,22 +6520,22 @@ msgstr "" "사용한 쿼리:\n" "%s" -#: variables.c:141 +#: variables.c:139 #, c-format msgid "unrecognized value \"%s\" for \"%s\": Boolean expected" msgstr "잘못된 \"%s\" 값을 \"%s\" 변수값으로 사용함: 불린형이어야 함" -#: variables.c:178 +#: variables.c:176 #, c-format msgid "invalid value \"%s\" for \"%s\": integer expected" msgstr "\"%s\" 값은 \"%s\" 변수값으로 사용할 수 없음; 정수형이어야 함" -#: variables.c:226 +#: variables.c:224 #, c-format msgid "invalid variable name: \"%s\"" msgstr "잘못된 변수 이름: \"%s\"" -#: variables.c:395 +#: variables.c:393 #, c-format msgid "" "unrecognized value \"%s\" for \"%s\"\n" diff --git a/src/bin/psql/po/ru.po b/src/bin/psql/po/ru.po index b023c7502ef1c..5e6303c6555c6 100644 --- a/src/bin/psql/po/ru.po +++ b/src/bin/psql/po/ru.po @@ -4,13 +4,13 @@ # Serguei A. Mokhov , 2001-2005. # Oleg Bartunov , 2004-2005. # Sergey Burladyan , 2012. -# Alexander Lakhin , 2012-2017, 2018, 2019. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: psql (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-09 12:21+0300\n" -"PO-Revision-Date: 2019-09-09 13:43+0300\n" +"POT-Creation-Date: 2021-02-08 07:28+0300\n" +"PO-Revision-Date: 2020-11-20 15:23+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -20,69 +20,70 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "важно: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "ошибка: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "предупреждение: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "не удалось определить текущий каталог: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "неверный исполняемый файл \"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "не удалось прочитать исполняемый файл \"%s\"" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "не удалось найти запускаемый файл \"%s\"" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "не удалось перейти в каталог \"%s\": %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "не удалось прочитать символическую ссылку \"%s\": %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "ошибка pclose: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 -#: command.c:1218 input.c:228 mainloop.c:82 mainloop.c:386 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: command.c:1255 command.c:3173 command.c:3222 command.c:3339 input.c:227 +#: mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" msgstr "нехватка памяти" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" @@ -92,7 +93,7 @@ msgstr "попытка дублирования нулевого указате msgid "could not look up effective user ID %ld: %s" msgstr "выяснить эффективный идентификатор пользователя (%ld) не удалось: %s" -#: ../../common/username.c:45 command.c:555 +#: ../../common/username.c:45 command.c:559 msgid "user does not exist" msgstr "пользователь не существует" @@ -131,7 +132,15 @@ msgstr "дочерний процесс завершён по сигналу %d: msgid "child process exited with unrecognized status %d" msgstr "дочерний процесс завершился с нераспознанным состоянием %d" -#: ../../fe_utils/print.c:353 +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Сигнал отмены отправлен\n" + +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 +msgid "Could not send cancel request: " +msgstr "Отправить сигнал отмены не удалось: " + +#: ../../fe_utils/print.c:350 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" @@ -139,71 +148,71 @@ msgstr[0] "(%lu строка)" msgstr[1] "(%lu строки)" msgstr[2] "(%lu строк)" -#: ../../fe_utils/print.c:3058 +#: ../../fe_utils/print.c:3055 #, c-format msgid "Interrupted\n" msgstr "Прервано\n" -#: ../../fe_utils/print.c:3122 +#: ../../fe_utils/print.c:3119 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "" "Ошибка добавления заголовка таблицы: превышен предел числа столбцов (%d).\n" -#: ../../fe_utils/print.c:3162 +#: ../../fe_utils/print.c:3159 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "" "Ошибка добавления ячейки в таблицу: превышен предел числа ячеек (%d).\n" -#: ../../fe_utils/print.c:3417 +#: ../../fe_utils/print.c:3414 #, c-format msgid "invalid output format (internal error): %d" msgstr "неверный формат вывода (внутренняя ошибка): %d" -#: ../../fe_utils/psqlscan.l:730 +#: ../../fe_utils/psqlscan.l:694 #, c-format msgid "skipping recursive expansion of variable \"%s\"" msgstr "рекурсивное расширение переменной \"%s\" пропускается" -#: command.c:221 +#: command.c:224 #, c-format msgid "invalid command \\%s" msgstr "неверная команда \\%s" -#: command.c:223 +#: command.c:226 #, c-format msgid "Try \\? for help." msgstr "Введите \\? для получения справки." -#: command.c:241 +#: command.c:244 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: лишний аргумент \"%s\" пропущен" -#: command.c:293 +#: command.c:296 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "" "команда \\%s игнорируется; добавьте \\endif или нажмите Ctrl-C для " "завершения текущего блока \\if" -#: command.c:553 +#: command.c:557 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "не удалось получить домашний каталог пользователя c ид. %ld: %s" -#: command.c:571 +#: command.c:575 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: не удалось перейти в каталог \"%s\": %m" -#: command.c:596 +#: command.c:600 #, c-format msgid "You are currently not connected to a database.\n" msgstr "В данный момент вы не подключены к базе данных.\n" -#: command.c:609 +#: command.c:613 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at " @@ -212,7 +221,7 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" (адрес сервера " "\"%s\", порт \"%s\").\n" -#: command.c:612 +#: command.c:616 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at " @@ -221,7 +230,7 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" через сокет в \"%s" "\", порт \"%s\".\n" -#: command.c:618 +#: command.c:622 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address " @@ -230,7 +239,7 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" (сервер \"%s\": " "адрес \"%s\", порт \"%s\").\n" -#: command.c:621 +#: command.c:625 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port " @@ -239,164 +248,169 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" (сервер \"%s\", " "порт \"%s\").\n" -#: command.c:930 command.c:1026 command.c:2411 +#: command.c:965 command.c:1061 command.c:2550 #, c-format msgid "no query buffer" msgstr "нет буфера запросов" -#: command.c:963 command.c:4832 +#: command.c:998 command.c:5171 #, c-format msgid "invalid line number: %s" msgstr "неверный номер строки: %s" -#: command.c:1017 +#: command.c:1052 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "" "Сервер (версия %s) не поддерживает редактирование исходного кода функции." -#: command.c:1020 +#: command.c:1055 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "" "Сервер (версия %s) не поддерживает редактирование определения представления." -#: command.c:1102 +#: command.c:1137 msgid "No changes" msgstr "Изменений нет" -#: command.c:1179 +#: command.c:1216 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "" "%s: неверное название кодировки символов или не найдена процедура " "перекодировки" -#: command.c:1214 command.c:1853 command.c:3109 command.c:4934 common.c:175 -#: common.c:224 common.c:535 common.c:1376 common.c:1404 common.c:1512 -#: common.c:1615 common.c:1653 copy.c:490 copy.c:709 help.c:63 large_obj.c:157 -#: large_obj.c:192 large_obj.c:254 +#: command.c:1251 command.c:1992 command.c:3169 command.c:3361 command.c:5273 +#: common.c:174 common.c:223 common.c:388 common.c:1244 common.c:1272 +#: common.c:1380 common.c:1487 common.c:1525 copy.c:488 copy.c:707 help.c:62 +#: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:299 #, c-format msgid "%s" msgstr "%s" -#: command.c:1221 +#: command.c:1258 msgid "There is no previous error." msgstr "Ошибки не было." -#: command.c:1409 command.c:1714 command.c:1728 command.c:1745 command.c:1905 -#: command.c:2142 command.c:2378 command.c:2418 +#: command.c:1371 +#, c-format +msgid "\\%s: missing right parenthesis" +msgstr "\\%s: отсутствует правая скобка" + +#: command.c:1548 command.c:1853 command.c:1867 command.c:1884 command.c:2044 +#: command.c:2281 command.c:2517 command.c:2557 #, c-format msgid "\\%s: missing required argument" msgstr "отсутствует необходимый аргумент \\%s" -#: command.c:1540 +#: command.c:1679 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif не может находиться после \\else" -#: command.c:1545 +#: command.c:1684 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif без соответствующего \\if" -#: command.c:1609 +#: command.c:1748 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else не может находиться после \\else" -#: command.c:1614 +#: command.c:1753 #, c-format msgid "\\else: no matching \\if" msgstr "\\else без соответствующего \\if" -#: command.c:1654 +#: command.c:1793 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif без соответствующего \\if" -#: command.c:1809 +#: command.c:1948 msgid "Query buffer is empty." msgstr "Буфер запроса пуст." -#: command.c:1831 +#: command.c:1970 msgid "Enter new password: " msgstr "Введите новый пароль: " -#: command.c:1832 +#: command.c:1971 msgid "Enter it again: " msgstr "Повторите его: " -#: command.c:1836 +#: command.c:1975 #, c-format msgid "Passwords didn't match." msgstr "Пароли не совпадают." -#: command.c:1935 +#: command.c:2074 #, c-format msgid "\\%s: could not read value for variable" msgstr "\\%s: не удалось прочитать значение переменной" -#: command.c:2038 +#: command.c:2177 msgid "Query buffer reset (cleared)." msgstr "Буфер запроса сброшен (очищен)." -#: command.c:2060 +#: command.c:2199 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "История записана в файл \"%s\".\n" -#: command.c:2147 +#: command.c:2286 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s: имя переменной окружения не может содержать знак \"=\"" -#: command.c:2208 +#: command.c:2347 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "Сервер (версия %s) не поддерживает вывод исходного кода функции." -#: command.c:2211 +#: command.c:2350 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "Сервер (версия %s) не поддерживает вывод определения представлений." -#: command.c:2218 +#: command.c:2357 #, c-format msgid "function name is required" msgstr "требуется имя функции" -#: command.c:2220 +#: command.c:2359 #, c-format msgid "view name is required" msgstr "требуется имя представления" -#: command.c:2350 +#: command.c:2489 msgid "Timing is on." msgstr "Секундомер включён." -#: command.c:2352 +#: command.c:2491 msgid "Timing is off." msgstr "Секундомер выключен." -#: command.c:2437 command.c:2465 command.c:3516 command.c:3519 command.c:3522 -#: command.c:3528 command.c:3530 command.c:3538 command.c:3548 command.c:3557 -#: command.c:3571 command.c:3588 command.c:3646 common.c:71 copy.c:333 -#: copy.c:405 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 +#: command.c:2576 command.c:2604 command.c:3771 command.c:3774 command.c:3777 +#: command.c:3783 command.c:3785 command.c:3793 command.c:3803 command.c:3812 +#: command.c:3826 command.c:3843 command.c:3901 common.c:70 copy.c:331 +#: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s: %m" -#: command.c:2849 startup.c:240 startup.c:291 +#: command.c:2988 startup.c:236 startup.c:287 msgid "Password: " msgstr "Пароль: " -#: command.c:2854 startup.c:288 +#: command.c:2993 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "Пароль пользователя %s: " -#: command.c:2925 +#: command.c:3047 #, c-format msgid "" "All connection parameters must be supplied because no database connection " @@ -404,17 +418,17 @@ msgid "" msgstr "" "Без подключения к базе данных необходимо указывать все параметры подключения" -#: command.c:3113 +#: command.c:3367 #, c-format msgid "Previous connection kept" msgstr "Сохранено предыдущее подключение" -#: command.c:3117 +#: command.c:3373 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:3166 +#: command.c:3420 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at " @@ -423,7 +437,7 @@ msgstr "" "Сейчас вы подключены к базе данных \"%s\" как пользователь \"%s\" (адрес " "сервера \"%s\", порт \"%s\").\n" -#: command.c:3169 +#: command.c:3423 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" " @@ -432,7 +446,7 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" через сокет в \"%s" "\", порт \"%s\".\n" -#: command.c:3175 +#: command.c:3429 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" on host \"%s" @@ -441,7 +455,7 @@ msgstr "" "Сейчас вы подключены к базе данных \"%s\" как пользователь \"%s\" (сервер " "\"%s\": адрес \"%s\", порт \"%s\").\n" -#: command.c:3178 +#: command.c:3432 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at " @@ -450,17 +464,17 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" (сервер \"%s\", " "порт \"%s\").\n" -#: command.c:3183 +#: command.c:3437 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Вы подключены к базе данных \"%s\" как пользователь \"%s\".\n" -#: command.c:3216 +#: command.c:3470 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, сервер %s)\n" -#: command.c:3224 +#: command.c:3478 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" @@ -469,29 +483,29 @@ msgstr "" "ПРЕДУПРЕЖДЕНИЕ: %s имеет базовую версию %s, а сервер - %s.\n" " Часть функций psql может не работать.\n" -#: command.c:3263 +#: command.c:3517 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "SSL-соединение (протокол: %s, шифр: %s, бит: %s, сжатие: %s)\n" -#: command.c:3264 command.c:3265 command.c:3266 +#: command.c:3518 command.c:3519 command.c:3520 msgid "unknown" msgstr "неизвестно" -#: command.c:3267 help.c:46 +#: command.c:3521 help.c:45 msgid "off" msgstr "выкл." -#: command.c:3267 help.c:46 +#: command.c:3521 help.c:45 msgid "on" msgstr "вкл." -#: command.c:3281 +#: command.c:3535 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "Соединение зашифровано GSSAPI\n" -#: command.c:3301 +#: command.c:3555 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -504,7 +518,7 @@ msgstr "" " Подробнее об этом смотрите документацию psql, раздел\n" " \"Notes for Windows users\".\n" -#: command.c:3405 +#: command.c:3659 #, c-format msgid "" "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a " @@ -513,33 +527,33 @@ msgstr "" "в переменной окружения PSQL_EDITOR_LINENUMBER_ARG должен быть указан номер " "строки" -#: command.c:3434 +#: command.c:3688 #, c-format msgid "could not start editor \"%s\"" msgstr "не удалось запустить редактор \"%s\"" -#: command.c:3436 +#: command.c:3690 #, c-format msgid "could not start /bin/sh" msgstr "не удалось запустить /bin/sh" -#: command.c:3474 +#: command.c:3728 #, c-format msgid "could not locate temporary directory: %s" msgstr "не удалось найти временный каталог: %s" -#: command.c:3501 +#: command.c:3755 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "не удалось открыть временный файл \"%s\": %m" -#: command.c:3794 +#: command.c:4060 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "" "\\pset: неоднозначному сокращению \"%s\" соответствует и \"%s\", и \"%s\"" -#: command.c:3814 +#: command.c:4080 #, c-format msgid "" "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-" @@ -548,32 +562,32 @@ msgstr "" "\\pset: допустимые форматы: aligned, asciidoc, csv, html, latex, latex-" "longtable, troff-ms, unaligned, wrapped" -#: command.c:3833 +#: command.c:4099 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: допустимые стили линий: ascii, old-ascii, unicode" -#: command.c:3848 +#: command.c:4114 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: допустимые стили Unicode-линий границ: single, double" -#: command.c:3863 +#: command.c:4129 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: допустимые стили Unicode-линий столбцов: single, double" -#: command.c:3878 +#: command.c:4144 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: допустимые стили Unicode-линий заголовков: single, double" -#: command.c:3921 +#: command.c:4187 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: символ csv_fieldsep должен быть однобайтовым" -#: command.c:3926 +#: command.c:4192 #, c-format msgid "" "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage " @@ -582,107 +596,107 @@ msgstr "" "\\pset: в качестве csv_fieldsep нельзя выбрать символ кавычек, новой строки " "или возврата каретки" -#: command.c:4063 command.c:4249 +#: command.c:4329 command.c:4517 #, c-format msgid "\\pset: unknown option: %s" msgstr "неизвестный параметр \\pset: %s" -#: command.c:4081 +#: command.c:4349 #, c-format msgid "Border style is %d.\n" msgstr "Стиль границ: %d.\n" -#: command.c:4087 +#: command.c:4355 #, c-format msgid "Target width is unset.\n" msgstr "Ширина вывода сброшена.\n" -#: command.c:4089 +#: command.c:4357 #, c-format msgid "Target width is %d.\n" msgstr "Ширина вывода: %d.\n" -#: command.c:4096 +#: command.c:4364 #, c-format msgid "Expanded display is on.\n" msgstr "Расширенный вывод включён.\n" -#: command.c:4098 +#: command.c:4366 #, c-format msgid "Expanded display is used automatically.\n" msgstr "Расширенный вывод применяется автоматически.\n" -#: command.c:4100 +#: command.c:4368 #, c-format msgid "Expanded display is off.\n" msgstr "Расширенный вывод выключен.\n" -#: command.c:4106 +#: command.c:4374 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "Разделитель полей для CSV: \"%s\".\n" -#: command.c:4114 command.c:4122 +#: command.c:4382 command.c:4390 #, c-format msgid "Field separator is zero byte.\n" msgstr "Разделитель полей - нулевой байт.\n" -#: command.c:4116 +#: command.c:4384 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Разделитель полей: \"%s\".\n" -#: command.c:4129 +#: command.c:4397 #, c-format msgid "Default footer is on.\n" msgstr "Строка итогов включена.\n" -#: command.c:4131 +#: command.c:4399 #, c-format msgid "Default footer is off.\n" msgstr "Строка итогов выключена.\n" -#: command.c:4137 +#: command.c:4405 #, c-format msgid "Output format is %s.\n" msgstr "Формат вывода: %s.\n" -#: command.c:4143 +#: command.c:4411 #, c-format msgid "Line style is %s.\n" msgstr "Установлен стиль линий: %s.\n" -#: command.c:4150 +#: command.c:4418 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null выводится как: \"%s\".\n" -#: command.c:4158 +#: command.c:4426 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "Локализованный вывод чисел включён.\n" -#: command.c:4160 +#: command.c:4428 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "Локализованный вывод чисел выключен.\n" -#: command.c:4167 +#: command.c:4435 #, c-format msgid "Pager is used for long output.\n" msgstr "Постраничник используется для вывода длинного текста.\n" -#: command.c:4169 +#: command.c:4437 #, c-format msgid "Pager is always used.\n" msgstr "Постраничник используется всегда.\n" -#: command.c:4171 +#: command.c:4439 #, c-format msgid "Pager usage is off.\n" msgstr "Постраничник выключен.\n" -#: command.c:4177 +#: command.c:4445 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" @@ -690,87 +704,87 @@ msgstr[0] "Постраничник не будет использоваться msgstr[1] "Постраничник не будет использоваться, если строк меньше %d\n" msgstr[2] "Постраничник не будет использоваться, если строк меньше %d\n" -#: command.c:4187 command.c:4197 +#: command.c:4455 command.c:4465 #, c-format msgid "Record separator is zero byte.\n" msgstr "Разделитель записей - нулевой байт.\n" -#: command.c:4189 +#: command.c:4457 #, c-format msgid "Record separator is .\n" msgstr "Разделитель записей: <новая строка>.\n" -#: command.c:4191 +#: command.c:4459 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Разделитель записей: \"%s\".\n" -#: command.c:4204 +#: command.c:4472 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Атрибуты HTML-таблицы: \"%s\".\n" -#: command.c:4207 +#: command.c:4475 #, c-format msgid "Table attributes unset.\n" msgstr "Атрибуты HTML-таблицы не заданы.\n" -#: command.c:4214 +#: command.c:4482 #, c-format msgid "Title is \"%s\".\n" msgstr "Заголовок: \"%s\".\n" -#: command.c:4216 +#: command.c:4484 #, c-format msgid "Title is unset.\n" msgstr "Заголовок не задан.\n" -#: command.c:4223 +#: command.c:4491 #, c-format msgid "Tuples only is on.\n" msgstr "Режим вывода только кортежей включён.\n" -#: command.c:4225 +#: command.c:4493 #, c-format msgid "Tuples only is off.\n" msgstr "Режим вывода только кортежей выключен.\n" -#: command.c:4231 +#: command.c:4499 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "Стиль Unicode-линий границ: \"%s\".\n" -#: command.c:4237 +#: command.c:4505 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "Стиль Unicode-линий столбцов: \"%s\".\n" -#: command.c:4243 +#: command.c:4511 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "Стиль Unicode-линий границ: \"%s\".\n" -#: command.c:4405 +#: command.c:4744 #, c-format msgid "\\!: failed" msgstr "\\!: ошибка" -#: command.c:4430 common.c:795 +#: command.c:4769 common.c:648 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch нельзя использовать с пустым запросом" -#: command.c:4471 +#: command.c:4810 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (обновление: %g с)\n" -#: command.c:4474 +#: command.c:4813 #, c-format msgid "%s (every %gs)\n" msgstr "%s (обновление: %g с)\n" -#: command.c:4528 command.c:4535 common.c:695 common.c:702 common.c:1359 +#: command.c:4867 command.c:4874 common.c:548 common.c:555 common.c:1227 #, c-format msgid "" "********* QUERY **********\n" @@ -783,89 +797,89 @@ msgstr "" "**************************\n" "\n" -#: command.c:4727 +#: command.c:5066 #, c-format msgid "\"%s.%s\" is not a view" msgstr "\"%s.%s\" — не представление" -#: command.c:4743 +#: command.c:5082 #, c-format msgid "could not parse reloptions array" msgstr "не удалось разобрать массив reloptions" -#: common.c:160 +#: common.c:159 #, c-format msgid "cannot escape without active connection" msgstr "экранирование строк не работает без подключения к БД" -#: common.c:201 +#: common.c:200 #, c-format msgid "shell command argument contains a newline or carriage return: \"%s\"" msgstr "" "аргумент команды оболочки содержит символ новой строки или перевода каретки: " "\"%s\"" -#: common.c:395 +#: common.c:304 #, c-format msgid "connection to server was lost" msgstr "подключение к серверу было потеряно" -#: common.c:399 +#: common.c:308 #, c-format msgid "The connection to the server was lost. Attempting reset: " msgstr "Подключение к серверу потеряно. Попытка восстановления " -#: common.c:404 +#: common.c:313 #, c-format msgid "Failed.\n" msgstr "неудачна.\n" -#: common.c:417 +#: common.c:326 #, c-format msgid "Succeeded.\n" msgstr "удачна.\n" -#: common.c:525 common.c:1077 common.c:1294 +#: common.c:378 common.c:945 common.c:1162 #, c-format msgid "unexpected PQresultStatus: %d" msgstr "неожиданное значение PQresultStatus: %d" -#: common.c:634 +#: common.c:487 #, c-format msgid "Time: %.3f ms\n" msgstr "Время: %.3f мс\n" -#: common.c:649 +#: common.c:502 #, c-format msgid "Time: %.3f ms (%02d:%06.3f)\n" msgstr "Время: %.3f мс (%02d:%06.3f)\n" -#: common.c:658 +#: common.c:511 #, c-format msgid "Time: %.3f ms (%02d:%02d:%06.3f)\n" msgstr "Время: %.3f мс (%02d:%02d:%06.3f)\n" -#: common.c:665 +#: common.c:518 #, c-format msgid "Time: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" msgstr "Время: %.3f мс (%.0f д. %02d:%02d:%06.3f)\n" -#: common.c:689 common.c:747 common.c:1330 +#: common.c:542 common.c:600 common.c:1198 #, c-format msgid "You are currently not connected to a database." msgstr "В данный момент вы не подключены к базе данных." -#: common.c:802 +#: common.c:655 #, c-format msgid "\\watch cannot be used with COPY" msgstr "\\watch нельзя использовать с COPY" -#: common.c:807 +#: common.c:660 #, c-format msgid "unexpected result status for \\watch" msgstr "неожиданное состояние результата для \\watch" -#: common.c:837 +#: common.c:690 #, c-format msgid "" "Asynchronous notification \"%s\" with payload \"%s\" received from server " @@ -874,24 +888,34 @@ msgstr "" "Получено асинхронное уведомление \"%s\" с сообщением-нагрузкой \"%s\" от " "серверного процесса с PID %d.\n" -#: common.c:840 +#: common.c:693 #, c-format msgid "" "Asynchronous notification \"%s\" received from server process with PID %d.\n" msgstr "" "Получено асинхронное уведомление \"%s\" от серверного процесса с PID %d.\n" -#: common.c:903 +#: common.c:726 common.c:743 +#, c-format +msgid "could not print result table: %m" +msgstr "не удалось вывести таблицу результатов: %m" + +#: common.c:764 #, c-format msgid "no rows returned for \\gset" msgstr "сервер не возвратил строк для \\gset" -#: common.c:908 +#: common.c:769 #, c-format msgid "more than one row returned for \\gset" msgstr "сервер возвратил больше одной строки для \\gset" -#: common.c:1339 +#: common.c:787 +#, c-format +msgid "attempt to \\gset into specially treated variable \"%s\" ignored" +msgstr "попытка выполнить \\gset со специальной переменной \"%s\" игнорируется" + +#: common.c:1207 #, c-format msgid "" "***(Single step mode: verify " @@ -905,94 +929,94 @@ msgstr "" "%s\n" "***(Enter - выполнение; x и Enter - отмена)**************\n" -#: common.c:1394 +#: common.c:1262 #, c-format msgid "" "The server (version %s) does not support savepoints for ON_ERROR_ROLLBACK." msgstr "" "Сервер (версия %s) не поддерживает точки сохранения для ON_ERROR_ROLLBACK." -#: common.c:1457 +#: common.c:1325 #, c-format msgid "STATEMENT: %s" msgstr "ОПЕРАТОР: %s" -#: common.c:1500 +#: common.c:1368 #, c-format msgid "unexpected transaction status (%d)" msgstr "неожиданное состояние транзакции (%d)" -#: common.c:1637 describe.c:2002 +#: common.c:1509 describe.c:2001 msgid "Column" msgstr "Столбец" -#: common.c:1638 describe.c:179 describe.c:394 describe.c:412 describe.c:457 -#: describe.c:474 describe.c:963 describe.c:1127 describe.c:1712 -#: describe.c:1736 describe.c:2003 describe.c:3674 describe.c:3859 -#: describe.c:4092 describe.c:5298 +#: common.c:1510 describe.c:177 describe.c:393 describe.c:411 describe.c:456 +#: describe.c:473 describe.c:962 describe.c:1126 describe.c:1711 +#: describe.c:1735 describe.c:2002 describe.c:3733 describe.c:3943 +#: describe.c:4176 describe.c:5382 msgid "Type" msgstr "Тип" -#: common.c:1687 +#: common.c:1559 #, c-format msgid "The command has no result, or the result has no columns.\n" msgstr "Команда не выдала результат, либо в результате нет столбцов.\n" -#: copy.c:100 +#: copy.c:98 #, c-format msgid "\\copy: arguments required" msgstr "укажите аргументы \\copy" -#: copy.c:255 +#: copy.c:253 #, c-format msgid "\\copy: parse error at \"%s\"" msgstr "\\copy: ошибка разбора аргумента \"%s\"" -#: copy.c:257 +#: copy.c:255 #, c-format msgid "\\copy: parse error at end of line" msgstr "\\copy: ошибка разбора в конце строки" -#: copy.c:330 +#: copy.c:328 #, c-format msgid "could not execute command \"%s\": %m" msgstr "не удалось выполнить команду \"%s\": %m" -#: copy.c:346 +#: copy.c:344 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не удалось получить информацию о файле \"%s\": %m" -#: copy.c:350 +#: copy.c:348 #, c-format msgid "%s: cannot copy from/to a directory" msgstr "COPY FROM/TO не может работать с каталогом (%s)" -#: copy.c:387 +#: copy.c:385 #, c-format msgid "could not close pipe to external command: %m" msgstr "не удалось закрыть канал сообщений с внешней командой: %m" -#: copy.c:392 +#: copy.c:390 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: copy.c:455 copy.c:465 +#: copy.c:453 copy.c:463 #, c-format msgid "could not write COPY data: %m" msgstr "не удалось записать данные COPY: %m" -#: copy.c:471 +#: copy.c:469 #, c-format msgid "COPY data transfer failed: %s" msgstr "ошибка передачи данных COPY: %s" -#: copy.c:532 +#: copy.c:530 msgid "canceled by user" msgstr "отменено пользователем" -#: copy.c:543 +#: copy.c:541 msgid "" "Enter data to be copied followed by a newline.\n" "End with a backslash and a period on a line by itself, or an EOF signal." @@ -1000,25 +1024,25 @@ msgstr "" "Вводите данные для копирования, разделяя строки переводом строки.\n" "Закончите ввод строкой '\\.' или сигналом EOF." -#: copy.c:671 +#: copy.c:669 msgid "aborted because of read failure" msgstr "прерывание из-за ошибки чтения" -#: copy.c:705 +#: copy.c:703 msgid "trying to exit copy mode" msgstr "попытка выйти из режима копирования" -#: crosstabview.c:124 +#: crosstabview.c:123 #, c-format msgid "\\crosstabview: statement did not return a result set" msgstr "\\crosstabview: оператор не возвратил результирующий набор" -#: crosstabview.c:130 +#: crosstabview.c:129 #, c-format msgid "\\crosstabview: query must return at least three columns" msgstr "\\crosstabview: запрос должен возвращать минимум три столбца" -#: crosstabview.c:157 +#: crosstabview.c:156 #, c-format msgid "" "\\crosstabview: vertical and horizontal headers must be different columns" @@ -1026,7 +1050,7 @@ msgstr "" "\\crosstabview: для вертикальных и горизонтальных заголовков должны " "задаваться разные столбцы" -#: crosstabview.c:173 +#: crosstabview.c:172 #, c-format msgid "" "\\crosstabview: data column must be specified when query returns more than " @@ -1035,12 +1059,12 @@ msgstr "" "\\crosstabview: когда запрос возвращает больше трёх столбцов, необходимо " "указать столбец данных" -#: crosstabview.c:229 +#: crosstabview.c:228 #, c-format msgid "\\crosstabview: maximum number of columns (%d) exceeded" msgstr "\\crosstabview: превышен максимум числа столбцов (%d)" -#: crosstabview.c:398 +#: crosstabview.c:397 #, c-format msgid "" "\\crosstabview: query result contains multiple data values for row \"%s\", " @@ -1049,775 +1073,781 @@ msgstr "" "\\crosstabview: в результатах запроса содержится несколько значений данных " "для строки \"%s\", столбца \"%s\"" -#: crosstabview.c:646 +#: crosstabview.c:645 #, c-format msgid "\\crosstabview: column number %d is out of range 1..%d" msgstr "\\crosstabview: номер столбца %d выходит за рамки диапазона 1..%d" -#: crosstabview.c:671 +#: crosstabview.c:670 #, c-format msgid "\\crosstabview: ambiguous column name: \"%s\"" msgstr "\\crosstabview: неоднозначное имя столбца: \"%s\"" -#: crosstabview.c:679 +#: crosstabview.c:678 #, c-format msgid "\\crosstabview: column name not found: \"%s\"" msgstr "\\crosstabview: имя столбца не найдено: \"%s\"" -#: describe.c:77 describe.c:374 describe.c:679 describe.c:811 describe.c:955 -#: describe.c:1116 describe.c:1188 describe.c:3663 describe.c:3846 -#: describe.c:4090 describe.c:4181 describe.c:4448 describe.c:4608 -#: describe.c:4849 describe.c:4924 describe.c:4935 describe.c:4997 -#: describe.c:5422 describe.c:5505 +#: describe.c:75 describe.c:373 describe.c:678 describe.c:810 describe.c:954 +#: describe.c:1115 describe.c:1187 describe.c:3722 describe.c:3930 +#: describe.c:4174 describe.c:4265 describe.c:4532 describe.c:4692 +#: describe.c:4933 describe.c:5008 describe.c:5019 describe.c:5081 +#: describe.c:5506 describe.c:5589 msgid "Schema" msgstr "Схема" -#: describe.c:78 describe.c:176 describe.c:244 describe.c:252 describe.c:375 -#: describe.c:680 describe.c:812 describe.c:873 describe.c:956 describe.c:1189 -#: describe.c:3664 describe.c:3847 describe.c:4013 describe.c:4091 -#: describe.c:4182 describe.c:4261 describe.c:4449 describe.c:4533 -#: describe.c:4609 describe.c:4850 describe.c:4925 describe.c:4936 -#: describe.c:4998 describe.c:5195 describe.c:5279 describe.c:5503 -#: describe.c:5675 describe.c:5900 +#: describe.c:76 describe.c:174 describe.c:242 describe.c:250 describe.c:374 +#: describe.c:679 describe.c:811 describe.c:872 describe.c:955 describe.c:1188 +#: describe.c:3723 describe.c:3931 describe.c:4097 describe.c:4175 +#: describe.c:4266 describe.c:4345 describe.c:4533 describe.c:4617 +#: describe.c:4693 describe.c:4934 describe.c:5009 describe.c:5020 +#: describe.c:5082 describe.c:5279 describe.c:5363 describe.c:5587 +#: describe.c:5759 describe.c:5999 msgid "Name" msgstr "Имя" -#: describe.c:79 describe.c:387 describe.c:405 describe.c:451 describe.c:468 +#: describe.c:77 describe.c:386 describe.c:404 describe.c:450 describe.c:467 msgid "Result data type" msgstr "Тип данных результата" -#: describe.c:87 describe.c:100 describe.c:104 describe.c:388 describe.c:406 -#: describe.c:452 describe.c:469 +#: describe.c:85 describe.c:98 describe.c:102 describe.c:387 describe.c:405 +#: describe.c:451 describe.c:468 msgid "Argument data types" msgstr "Типы данных аргументов" -#: describe.c:112 describe.c:119 describe.c:187 describe.c:275 describe.c:514 -#: describe.c:728 describe.c:827 describe.c:898 describe.c:1191 describe.c:2021 -#: describe.c:3452 describe.c:3699 describe.c:3893 describe.c:4044 -#: describe.c:4118 describe.c:4191 describe.c:4274 describe.c:4357 -#: describe.c:4476 describe.c:4542 describe.c:4610 describe.c:4751 -#: describe.c:4793 describe.c:4866 describe.c:4928 describe.c:4937 -#: describe.c:4999 describe.c:5221 describe.c:5301 describe.c:5436 -#: describe.c:5506 large_obj.c:290 large_obj.c:300 +#: describe.c:110 describe.c:117 describe.c:185 describe.c:273 describe.c:513 +#: describe.c:727 describe.c:826 describe.c:897 describe.c:1190 describe.c:2020 +#: describe.c:3510 describe.c:3783 describe.c:3977 describe.c:4128 +#: describe.c:4202 describe.c:4275 describe.c:4358 describe.c:4441 +#: describe.c:4560 describe.c:4626 describe.c:4694 describe.c:4835 +#: describe.c:4877 describe.c:4950 describe.c:5012 describe.c:5021 +#: describe.c:5083 describe.c:5305 describe.c:5385 describe.c:5520 +#: describe.c:5590 large_obj.c:290 large_obj.c:300 msgid "Description" msgstr "Описание" -#: describe.c:137 +#: describe.c:135 msgid "List of aggregate functions" msgstr "Список агрегатных функций" -#: describe.c:162 +#: describe.c:160 #, c-format msgid "The server (version %s) does not support access methods." msgstr "Сервер (версия %s) не поддерживает методы доступа." -#: describe.c:177 +#: describe.c:175 msgid "Index" msgstr "Индекс" -#: describe.c:178 describe.c:3680 describe.c:3872 describe.c:5423 +#: describe.c:176 describe.c:3741 describe.c:3956 describe.c:5507 msgid "Table" msgstr "Таблица" -#: describe.c:186 describe.c:5200 +#: describe.c:184 describe.c:5284 msgid "Handler" msgstr "Обработчик" -#: describe.c:205 +#: describe.c:203 msgid "List of access methods" msgstr "Список методов доступа" -#: describe.c:231 +#: describe.c:229 #, c-format msgid "The server (version %s) does not support tablespaces." msgstr "Сервер (версия %s) не поддерживает табличные пространства." -#: describe.c:245 describe.c:253 describe.c:502 describe.c:718 describe.c:874 -#: describe.c:1115 describe.c:3675 describe.c:3848 describe.c:4017 -#: describe.c:4263 describe.c:4534 describe.c:5196 describe.c:5280 -#: describe.c:5676 describe.c:5802 describe.c:5901 large_obj.c:289 +#: describe.c:243 describe.c:251 describe.c:501 describe.c:717 describe.c:873 +#: describe.c:1114 describe.c:3734 describe.c:3932 describe.c:4101 +#: describe.c:4347 describe.c:4618 describe.c:5280 describe.c:5364 +#: describe.c:5760 describe.c:5897 describe.c:6000 describe.c:6115 +#: describe.c:6194 large_obj.c:289 msgid "Owner" msgstr "Владелец" -#: describe.c:246 describe.c:254 +#: describe.c:244 describe.c:252 msgid "Location" msgstr "Расположение" -#: describe.c:265 describe.c:3270 +#: describe.c:263 describe.c:3327 msgid "Options" msgstr "Параметры" -#: describe.c:270 describe.c:691 describe.c:890 describe.c:3691 describe.c:3695 +#: describe.c:268 describe.c:690 describe.c:889 describe.c:3775 describe.c:3779 msgid "Size" msgstr "Размер" -#: describe.c:292 +#: describe.c:290 msgid "List of tablespaces" msgstr "Список табличных пространств" -#: describe.c:334 +#: describe.c:333 #, c-format msgid "\\df only takes [anptwS+] as options" msgstr "\\df принимает в качестве параметров только [anptwS+]" -#: describe.c:342 describe.c:353 +#: describe.c:341 describe.c:352 #, c-format msgid "\\df does not take a \"%c\" option with server version %s" msgstr "\\df не поддерживает параметр \"%c\" с сервером версии %s" # well-spelled: агр #. translator: "agg" is short for "aggregate" -#: describe.c:390 describe.c:408 describe.c:454 describe.c:471 +#: describe.c:389 describe.c:407 describe.c:453 describe.c:470 msgid "agg" msgstr "агр." -#: describe.c:391 describe.c:409 +#: describe.c:390 describe.c:408 msgid "window" msgstr "оконная" -#: describe.c:392 +#: describe.c:391 msgid "proc" msgstr "проц." # well-spelled: функ -#: describe.c:393 describe.c:411 describe.c:456 describe.c:473 +#: describe.c:392 describe.c:410 describe.c:455 describe.c:472 msgid "func" msgstr "функ." -#: describe.c:410 describe.c:455 describe.c:472 describe.c:1325 +#: describe.c:409 describe.c:454 describe.c:471 describe.c:1324 msgid "trigger" msgstr "триггерная" -#: describe.c:484 +#: describe.c:483 msgid "immutable" msgstr "постоянная" -#: describe.c:485 +#: describe.c:484 msgid "stable" msgstr "стабильная" -#: describe.c:486 +#: describe.c:485 msgid "volatile" msgstr "изменчивая" -#: describe.c:487 +#: describe.c:486 msgid "Volatility" msgstr "Изменчивость" -#: describe.c:495 +#: describe.c:494 msgid "restricted" msgstr "ограниченная" -#: describe.c:496 +#: describe.c:495 msgid "safe" msgstr "безопасная" -#: describe.c:497 +#: describe.c:496 msgid "unsafe" msgstr "небезопасная" -#: describe.c:498 +#: describe.c:497 msgid "Parallel" msgstr "Параллельность" -#: describe.c:503 +#: describe.c:502 msgid "definer" msgstr "определившего" -#: describe.c:504 +#: describe.c:503 msgid "invoker" msgstr "вызывающего" -#: describe.c:505 +#: describe.c:504 msgid "Security" msgstr "Безопасность" -#: describe.c:512 +#: describe.c:511 msgid "Language" msgstr "Язык" -#: describe.c:513 +#: describe.c:512 msgid "Source code" msgstr "Исходный код" -#: describe.c:642 +#: describe.c:641 msgid "List of functions" msgstr "Список функций" -#: describe.c:690 +#: describe.c:689 msgid "Internal name" msgstr "Внутреннее имя" -#: describe.c:712 +#: describe.c:711 msgid "Elements" msgstr "Элементы" -#: describe.c:769 +#: describe.c:768 msgid "List of data types" msgstr "Список типов данных" -#: describe.c:813 +#: describe.c:812 msgid "Left arg type" msgstr "Тип левого аргумента" -#: describe.c:814 +#: describe.c:813 msgid "Right arg type" msgstr "Тип правого аргумента" -#: describe.c:815 +#: describe.c:814 msgid "Result type" msgstr "Результирующий тип" -#: describe.c:820 describe.c:4269 describe.c:4334 describe.c:4340 -#: describe.c:4750 +#: describe.c:819 describe.c:4353 describe.c:4418 describe.c:4424 +#: describe.c:4834 describe.c:6366 describe.c:6370 msgid "Function" msgstr "Функция" -#: describe.c:845 +#: describe.c:844 msgid "List of operators" msgstr "Список операторов" -#: describe.c:875 +#: describe.c:874 msgid "Encoding" msgstr "Кодировка" -#: describe.c:880 describe.c:4450 +#: describe.c:879 describe.c:4534 msgid "Collate" msgstr "LC_COLLATE" -#: describe.c:881 describe.c:4451 +#: describe.c:880 describe.c:4535 msgid "Ctype" msgstr "LC_CTYPE" -#: describe.c:894 +#: describe.c:893 msgid "Tablespace" msgstr "Табл. пространство" -#: describe.c:916 +#: describe.c:915 msgid "List of databases" msgstr "Список баз данных" -#: describe.c:957 describe.c:1118 describe.c:3665 +#: describe.c:956 describe.c:1117 describe.c:3724 msgid "table" msgstr "таблица" -#: describe.c:958 describe.c:3666 +#: describe.c:957 describe.c:3725 msgid "view" msgstr "представление" -#: describe.c:959 describe.c:3667 +#: describe.c:958 describe.c:3726 msgid "materialized view" msgstr "материализованное представление" -#: describe.c:960 describe.c:1120 describe.c:3669 +#: describe.c:959 describe.c:1119 describe.c:3728 msgid "sequence" msgstr "последовательность" -#: describe.c:961 describe.c:3671 +#: describe.c:960 describe.c:3730 msgid "foreign table" msgstr "сторонняя таблица" -#: describe.c:962 describe.c:3672 describe.c:3857 +#: describe.c:961 describe.c:3731 describe.c:3941 msgid "partitioned table" msgstr "секционированная таблица" -#: describe.c:974 +#: describe.c:973 msgid "Column privileges" msgstr "Права для столбцов" -#: describe.c:1005 describe.c:1039 +#: describe.c:1004 describe.c:1038 msgid "Policies" msgstr "Политики" -#: describe.c:1071 describe.c:5957 describe.c:5961 +#: describe.c:1070 describe.c:6056 describe.c:6060 msgid "Access privileges" msgstr "Права доступа" -#: describe.c:1102 +#: describe.c:1101 #, c-format msgid "The server (version %s) does not support altering default privileges." msgstr "Сервер (версия %s) не поддерживает изменение прав по умолчанию." -#: describe.c:1122 +#: describe.c:1121 msgid "function" msgstr "функция" -#: describe.c:1124 +#: describe.c:1123 msgid "type" msgstr "тип" -#: describe.c:1126 +#: describe.c:1125 msgid "schema" msgstr "схема" -#: describe.c:1150 +#: describe.c:1149 msgid "Default access privileges" msgstr "Права доступа по умолчанию" -#: describe.c:1190 +#: describe.c:1189 msgid "Object" msgstr "Объект" -#: describe.c:1204 +#: describe.c:1203 msgid "table constraint" msgstr "ограничение таблицы" -#: describe.c:1226 +#: describe.c:1225 msgid "domain constraint" msgstr "ограничение домена" -#: describe.c:1254 +#: describe.c:1253 msgid "operator class" msgstr "класс операторов" -#: describe.c:1283 +#: describe.c:1282 msgid "operator family" msgstr "семейство операторов" -#: describe.c:1305 +#: describe.c:1304 msgid "rule" msgstr "правило" -#: describe.c:1347 +#: describe.c:1346 msgid "Object descriptions" msgstr "Описание объекта" -#: describe.c:1403 describe.c:3763 +#: describe.c:1402 describe.c:3847 #, c-format msgid "Did not find any relation named \"%s\"." msgstr "Отношение \"%s\" не найдено." -#: describe.c:1406 describe.c:3766 +#: describe.c:1405 describe.c:3850 #, c-format msgid "Did not find any relations." msgstr "Отношения не найдены." -#: describe.c:1661 +#: describe.c:1660 #, c-format msgid "Did not find any relation with OID %s." msgstr "Отношение с OID %s не найдено." -#: describe.c:1713 describe.c:1737 +#: describe.c:1712 describe.c:1736 msgid "Start" msgstr "Начальное_значение" -#: describe.c:1714 describe.c:1738 +#: describe.c:1713 describe.c:1737 msgid "Minimum" msgstr "Минимум" -#: describe.c:1715 describe.c:1739 +#: describe.c:1714 describe.c:1738 msgid "Maximum" msgstr "Максимум" -#: describe.c:1716 describe.c:1740 +#: describe.c:1715 describe.c:1739 msgid "Increment" msgstr "Шаг" -#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4185 -#: describe.c:4351 describe.c:4465 describe.c:4470 +#: describe.c:1716 describe.c:1740 describe.c:1871 describe.c:4269 +#: describe.c:4435 describe.c:4549 describe.c:4554 describe.c:6103 msgid "yes" msgstr "да" -#: describe.c:1718 describe.c:1742 describe.c:1873 describe.c:4185 -#: describe.c:4348 describe.c:4465 +#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4269 +#: describe.c:4432 describe.c:4549 describe.c:6104 msgid "no" msgstr "нет" -#: describe.c:1719 describe.c:1743 +#: describe.c:1718 describe.c:1742 msgid "Cycles?" msgstr "Зацикливается?" -#: describe.c:1720 describe.c:1744 +#: describe.c:1719 describe.c:1743 msgid "Cache" msgstr "Кешируется" -#: describe.c:1787 +#: describe.c:1786 #, c-format msgid "Owned by: %s" msgstr "Владелец: %s" -#: describe.c:1791 +#: describe.c:1790 #, c-format msgid "Sequence for identity column: %s" msgstr "Последовательность для столбца идентификации: %s" -#: describe.c:1798 +#: describe.c:1797 #, c-format msgid "Sequence \"%s.%s\"" msgstr "Последовательность \"%s.%s\"" -#: describe.c:1934 +#: describe.c:1933 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "Нежурналируемая таблица \"%s.%s\"" -#: describe.c:1937 +#: describe.c:1936 #, c-format msgid "Table \"%s.%s\"" msgstr "Таблица \"%s.%s\"" -#: describe.c:1941 +#: describe.c:1940 #, c-format msgid "View \"%s.%s\"" msgstr "Представление \"%s.%s\"" -#: describe.c:1946 +#: describe.c:1945 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "Нежурналируемое материализованное представление \"%s.%s\"" -#: describe.c:1949 +#: describe.c:1948 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "Материализованное представление \"%s.%s\"" -#: describe.c:1954 +#: describe.c:1953 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "Нежурналируемый индекс \"%s.%s\"" -#: describe.c:1957 +#: describe.c:1956 #, c-format msgid "Index \"%s.%s\"" msgstr "Индекс \"%s.%s\"" -#: describe.c:1962 +#: describe.c:1961 #, c-format msgid "Unlogged partitioned index \"%s.%s\"" msgstr "Нежурналируемый секционированный индекс \"%s.%s\"" -#: describe.c:1965 +#: describe.c:1964 #, c-format msgid "Partitioned index \"%s.%s\"" msgstr "Секционированный индекс \"%s.%s\"" -#: describe.c:1970 +#: describe.c:1969 #, c-format msgid "Special relation \"%s.%s\"" msgstr "Специальное отношение \"%s.%s\"" -#: describe.c:1974 +#: describe.c:1973 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "TOAST-таблица \"%s.%s\"" -#: describe.c:1978 +#: describe.c:1977 #, c-format msgid "Composite type \"%s.%s\"" msgstr "Составной тип \"%s.%s\"" -#: describe.c:1982 +#: describe.c:1981 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "Сторонняя таблица \"%s.%s\"" -#: describe.c:1987 +#: describe.c:1986 #, c-format msgid "Unlogged partitioned table \"%s.%s\"" msgstr "Нежурналируемая секционированная таблица \"%s.%s\"" -#: describe.c:1990 +#: describe.c:1989 #, c-format msgid "Partitioned table \"%s.%s\"" msgstr "Секционированная таблица \"%s.%s\"" -#: describe.c:2006 describe.c:4098 +#: describe.c:2005 describe.c:4182 msgid "Collation" msgstr "Правило сортировки" -#: describe.c:2007 describe.c:4105 +#: describe.c:2006 describe.c:4189 msgid "Nullable" msgstr "Допустимость NULL" -#: describe.c:2008 describe.c:4106 +#: describe.c:2007 describe.c:4190 msgid "Default" msgstr "По умолчанию" -#: describe.c:2011 +#: describe.c:2010 msgid "Key?" msgstr "Ключевой?" -#: describe.c:2013 +#: describe.c:2012 msgid "Definition" msgstr "Определение" # well-spelled: ОСД -#: describe.c:2015 describe.c:5216 describe.c:5300 describe.c:5371 -#: describe.c:5435 +#: describe.c:2014 describe.c:5300 describe.c:5384 describe.c:5455 +#: describe.c:5519 msgid "FDW options" msgstr "Параметры ОСД" -#: describe.c:2017 +#: describe.c:2016 msgid "Storage" msgstr "Хранилище" -#: describe.c:2019 +#: describe.c:2018 msgid "Stats target" msgstr "Цель для статистики" -#: describe.c:2132 +#: describe.c:2135 #, c-format msgid "Partition of: %s %s" msgstr "Секция из: %s %s" -#: describe.c:2144 +#: describe.c:2147 msgid "No partition constraint" msgstr "Нет ограничения секции" -#: describe.c:2146 +#: describe.c:2149 #, c-format msgid "Partition constraint: %s" msgstr "Ограничение секции: %s" -#: describe.c:2170 +#: describe.c:2173 #, c-format msgid "Partition key: %s" msgstr "Ключ разбиения: %s" -#: describe.c:2240 +#: describe.c:2199 +#, c-format +msgid "Owning table: \"%s.%s\"" +msgstr "Принадлежит таблице: \"%s.%s\"" + +#: describe.c:2270 msgid "primary key, " msgstr "первичный ключ, " -#: describe.c:2242 +#: describe.c:2272 msgid "unique, " msgstr "уникальный, " -#: describe.c:2248 +#: describe.c:2278 #, c-format msgid "for table \"%s.%s\"" msgstr "для таблицы \"%s.%s\"" -#: describe.c:2252 +#: describe.c:2282 #, c-format msgid ", predicate (%s)" msgstr ", предикат (%s)" -#: describe.c:2255 +#: describe.c:2285 msgid ", clustered" msgstr ", кластеризованный" -#: describe.c:2258 +#: describe.c:2288 msgid ", invalid" msgstr ", нерабочий" -#: describe.c:2261 +#: describe.c:2291 msgid ", deferrable" msgstr ", откладываемый" -#: describe.c:2264 +#: describe.c:2294 msgid ", initially deferred" msgstr ", изначально отложенный" -#: describe.c:2267 +#: describe.c:2297 msgid ", replica identity" msgstr ", репликационный" -#: describe.c:2326 +#: describe.c:2364 msgid "Indexes:" msgstr "Индексы:" -#: describe.c:2410 +#: describe.c:2448 msgid "Check constraints:" msgstr "Ограничения-проверки:" # TO REWVIEW -#: describe.c:2478 +#: describe.c:2516 msgid "Foreign-key constraints:" msgstr "Ограничения внешнего ключа:" -#: describe.c:2541 +#: describe.c:2579 msgid "Referenced by:" msgstr "Ссылки извне:" -#: describe.c:2591 +#: describe.c:2629 msgid "Policies:" msgstr "Политики:" -#: describe.c:2594 +#: describe.c:2632 msgid "Policies (forced row security enabled):" msgstr "Политики (усиленная защита строк включена):" -#: describe.c:2597 +#: describe.c:2635 msgid "Policies (row security enabled): (none)" msgstr "Политики (защита строк включена): (Нет)" -#: describe.c:2600 +#: describe.c:2638 msgid "Policies (forced row security enabled): (none)" msgstr "Политики (усиленная защита строк включена): (Нет)" -#: describe.c:2603 +#: describe.c:2641 msgid "Policies (row security disabled):" msgstr "Политики (защита строк выключена):" -#: describe.c:2666 +#: describe.c:2709 msgid "Statistics objects:" msgstr "Объекты статистики:" -#: describe.c:2775 describe.c:2879 +#: describe.c:2823 describe.c:2927 msgid "Rules:" msgstr "Правила:" -#: describe.c:2778 +#: describe.c:2826 msgid "Disabled rules:" msgstr "Отключённые правила:" -#: describe.c:2781 +#: describe.c:2829 msgid "Rules firing always:" msgstr "Правила, срабатывающие всегда:" -#: describe.c:2784 +#: describe.c:2832 msgid "Rules firing on replica only:" msgstr "Правила, срабатывающие только в реплике:" -#: describe.c:2824 +#: describe.c:2872 msgid "Publications:" msgstr "Публикации:" -#: describe.c:2862 +#: describe.c:2910 msgid "View definition:" msgstr "Определение представления:" -#: describe.c:3001 +#: describe.c:3057 msgid "Triggers:" msgstr "Триггеры:" -#: describe.c:3005 +#: describe.c:3061 msgid "Disabled user triggers:" msgstr "Отключённые пользовательские триггеры:" -#: describe.c:3007 +#: describe.c:3063 msgid "Disabled triggers:" msgstr "Отключённые триггеры:" -#: describe.c:3010 +#: describe.c:3066 msgid "Disabled internal triggers:" msgstr "Отключённые внутренние триггеры:" -#: describe.c:3013 +#: describe.c:3069 msgid "Triggers firing always:" msgstr "Триггеры, срабатывающие всегда:" -#: describe.c:3016 +#: describe.c:3072 msgid "Triggers firing on replica only:" msgstr "Триггеры, срабатывающие только в реплике:" -#: describe.c:3075 +#: describe.c:3144 #, c-format msgid "Server: %s" msgstr "Сервер: %s" # well-spelled: ОСД -#: describe.c:3083 +#: describe.c:3152 #, c-format msgid "FDW options: (%s)" msgstr "Параметр ОСД: (%s)" -#: describe.c:3102 +#: describe.c:3173 msgid "Inherits" msgstr "Наследует" -#: describe.c:3161 +#: describe.c:3233 #, c-format msgid "Number of partitions: %d" msgstr "Число секций: %d" -#: describe.c:3170 -#, c-format -msgid "Number of child tables: %d (Use \\d+ to list them.)" -msgstr "Дочерних таблиц: %d (чтобы просмотреть и их, воспользуйтесь \\d+)" - -#: describe.c:3172 +#: describe.c:3242 #, c-format msgid "Number of partitions: %d (Use \\d+ to list them.)" msgstr "Число секций: %d (чтобы просмотреть их, введите \\d+)" -#: describe.c:3180 +#: describe.c:3244 +#, c-format +msgid "Number of child tables: %d (Use \\d+ to list them.)" +msgstr "Дочерних таблиц: %d (чтобы просмотреть и их, воспользуйтесь \\d+)" + +#: describe.c:3251 msgid "Child tables" msgstr "Дочерние таблицы" -#: describe.c:3180 +#: describe.c:3251 msgid "Partitions" msgstr "Секции" -#: describe.c:3223 +#: describe.c:3280 #, c-format msgid "Typed table of type: %s" msgstr "Типизированная таблица типа: %s" -#: describe.c:3239 +#: describe.c:3296 msgid "Replica Identity" msgstr "Идентификация реплики" -#: describe.c:3252 +#: describe.c:3309 msgid "Has OIDs: yes" msgstr "Содержит OID: да" -#: describe.c:3261 +#: describe.c:3318 #, c-format msgid "Access method: %s" msgstr "Метод доступа: %s" -#: describe.c:3340 +#: describe.c:3398 #, c-format msgid "Tablespace: \"%s\"" msgstr "Табличное пространство: \"%s\"" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:3352 +#: describe.c:3410 #, c-format msgid ", tablespace \"%s\"" msgstr ", табл. пространство \"%s\"" -#: describe.c:3445 +#: describe.c:3503 msgid "List of roles" msgstr "Список ролей" -#: describe.c:3447 +#: describe.c:3505 msgid "Role name" msgstr "Имя роли" -#: describe.c:3448 +#: describe.c:3506 msgid "Attributes" msgstr "Атрибуты" -#: describe.c:3449 +#: describe.c:3507 msgid "Member of" msgstr "Член ролей" -#: describe.c:3460 +#: describe.c:3518 msgid "Superuser" msgstr "Суперпользователь" -#: describe.c:3463 +#: describe.c:3521 msgid "No inheritance" msgstr "Не наследуется" -#: describe.c:3466 +#: describe.c:3524 msgid "Create role" msgstr "Создаёт роли" -#: describe.c:3469 +#: describe.c:3527 msgid "Create DB" msgstr "Создаёт БД" -#: describe.c:3472 +#: describe.c:3530 msgid "Cannot login" msgstr "Вход запрещён" -#: describe.c:3476 +#: describe.c:3534 msgid "Replication" msgstr "Репликация" -#: describe.c:3480 +#: describe.c:3538 msgid "Bypass RLS" msgstr "Пропускать RLS" -#: describe.c:3489 +#: describe.c:3547 msgid "No connections" msgstr "Нет подключений" -#: describe.c:3491 +#: describe.c:3549 #, c-format msgid "%d connection" msgid_plural "%d connections" @@ -1825,341 +1855,357 @@ msgstr[0] "%d подключение" msgstr[1] "%d подключения" msgstr[2] "%d подключений" -#: describe.c:3501 +#: describe.c:3559 msgid "Password valid until " msgstr "Пароль действует до " -#: describe.c:3551 +#: describe.c:3609 #, c-format msgid "The server (version %s) does not support per-database role settings." msgstr "" "Сервер (версия %s) не поддерживает назначение параметров ролей для баз " "данных." -#: describe.c:3564 +#: describe.c:3622 msgid "Role" msgstr "Роль" -#: describe.c:3565 +#: describe.c:3623 msgid "Database" msgstr "БД" -#: describe.c:3566 +#: describe.c:3624 msgid "Settings" msgstr "Параметры" -#: describe.c:3587 +#: describe.c:3645 #, c-format msgid "Did not find any settings for role \"%s\" and database \"%s\"." msgstr "Параметры для роли \"%s\" и базы данных \"%s\" не найдены." -#: describe.c:3590 +#: describe.c:3648 #, c-format msgid "Did not find any settings for role \"%s\"." msgstr "Параметры для роли \"%s\" не найдены." -#: describe.c:3593 +#: describe.c:3651 #, c-format msgid "Did not find any settings." msgstr "Никакие параметры не найдены." -#: describe.c:3598 +#: describe.c:3656 msgid "List of settings" msgstr "Список параметров" -#: describe.c:3668 +#: describe.c:3727 msgid "index" msgstr "индекс" # skip-rule: capital-letter-first -#: describe.c:3670 +#: describe.c:3729 msgid "special" msgstr "спец. отношение" -#: describe.c:3673 describe.c:3858 +#: describe.c:3732 describe.c:3942 msgid "partitioned index" msgstr "секционированный индекс" -#: describe.c:3771 +#: describe.c:3756 +msgid "permanent" +msgstr "постоянное" + +#: describe.c:3757 +msgid "temporary" +msgstr "временное" + +#: describe.c:3758 +msgid "unlogged" +msgstr "нежурналируемое" + +#: describe.c:3759 +msgid "Persistence" +msgstr "Хранение" + +#: describe.c:3855 msgid "List of relations" msgstr "Список отношений" -#: describe.c:3819 +#: describe.c:3903 #, c-format msgid "" "The server (version %s) does not support declarative table partitioning." msgstr "" "Сервер (версия %s) не поддерживает декларативное секционирование таблиц." -#: describe.c:3830 +#: describe.c:3914 msgid "List of partitioned indexes" msgstr "Список секционированных индексов" -#: describe.c:3832 +#: describe.c:3916 msgid "List of partitioned tables" msgstr "Список секционированных таблиц" -#: describe.c:3836 +#: describe.c:3920 msgid "List of partitioned relations" msgstr "Список секционированных отношений" -#: describe.c:3867 +#: describe.c:3951 msgid "Parent name" msgstr "Имя родителя" -#: describe.c:3880 +#: describe.c:3964 msgid "Leaf partition size" msgstr "Размер конечной секции" -#: describe.c:3883 describe.c:3889 +#: describe.c:3967 describe.c:3973 msgid "Total size" msgstr "Общий размер" -#: describe.c:4021 +#: describe.c:4105 msgid "Trusted" msgstr "Доверенный" -#: describe.c:4029 +#: describe.c:4113 msgid "Internal language" msgstr "Внутренний язык" -#: describe.c:4030 +#: describe.c:4114 msgid "Call handler" msgstr "Обработчик вызова" -#: describe.c:4031 describe.c:5203 +#: describe.c:4115 describe.c:5287 msgid "Validator" msgstr "Функция проверки" -#: describe.c:4034 +#: describe.c:4118 msgid "Inline handler" msgstr "Обработчик внедрённого кода" -#: describe.c:4062 +#: describe.c:4146 msgid "List of languages" msgstr "Список языков" -#: describe.c:4107 +#: describe.c:4191 msgid "Check" msgstr "Проверка" -#: describe.c:4149 +#: describe.c:4233 msgid "List of domains" msgstr "Список доменов" -#: describe.c:4183 +#: describe.c:4267 msgid "Source" msgstr "Источник" -#: describe.c:4184 +#: describe.c:4268 msgid "Destination" msgstr "Назначение" -#: describe.c:4186 +#: describe.c:4270 describe.c:6105 msgid "Default?" msgstr "По умолчанию?" -#: describe.c:4223 +#: describe.c:4307 msgid "List of conversions" msgstr "Список преобразований" -#: describe.c:4262 +#: describe.c:4346 msgid "Event" msgstr "Событие" -#: describe.c:4264 +#: describe.c:4348 msgid "enabled" msgstr "включён" -#: describe.c:4265 +#: describe.c:4349 msgid "replica" msgstr "реплика" -#: describe.c:4266 +#: describe.c:4350 msgid "always" msgstr "всегда" -#: describe.c:4267 +#: describe.c:4351 msgid "disabled" msgstr "отключён" -#: describe.c:4268 describe.c:5902 +#: describe.c:4352 describe.c:6001 msgid "Enabled" msgstr "Включён" -#: describe.c:4270 +#: describe.c:4354 msgid "Tags" msgstr "Теги" -#: describe.c:4289 +#: describe.c:4373 msgid "List of event triggers" msgstr "Список событийных триггеров" -#: describe.c:4318 +#: describe.c:4402 msgid "Source type" msgstr "Исходный тип" -#: describe.c:4319 +#: describe.c:4403 msgid "Target type" msgstr "Целевой тип" -#: describe.c:4350 +#: describe.c:4434 msgid "in assignment" msgstr "в присваивании" -#: describe.c:4352 +#: describe.c:4436 msgid "Implicit?" msgstr "Неявное?" -#: describe.c:4407 +#: describe.c:4491 msgid "List of casts" msgstr "Список приведений типов" -#: describe.c:4435 +#: describe.c:4519 #, c-format msgid "The server (version %s) does not support collations." msgstr "Сервер (версия %s) не поддерживает правила сравнения." -#: describe.c:4456 describe.c:4460 +#: describe.c:4540 describe.c:4544 msgid "Provider" msgstr "Поставщик" -#: describe.c:4466 describe.c:4471 +#: describe.c:4550 describe.c:4555 msgid "Deterministic?" msgstr "Детерминированное?" -#: describe.c:4506 +#: describe.c:4590 msgid "List of collations" msgstr "Список правил сортировки" -#: describe.c:4565 +#: describe.c:4649 msgid "List of schemas" msgstr "Список схем" -#: describe.c:4590 describe.c:4837 describe.c:4908 describe.c:4979 +#: describe.c:4674 describe.c:4921 describe.c:4992 describe.c:5063 #, c-format msgid "The server (version %s) does not support full text search." msgstr "Сервер (версия %s) не поддерживает полнотекстовый поиск." -#: describe.c:4625 +#: describe.c:4709 msgid "List of text search parsers" msgstr "Список анализаторов текстового поиска" -#: describe.c:4670 +#: describe.c:4754 #, c-format msgid "Did not find any text search parser named \"%s\"." msgstr "Анализатор текстового поиска \"%s\" не найден." -#: describe.c:4673 +#: describe.c:4757 #, c-format msgid "Did not find any text search parsers." msgstr "Никакие анализаторы текстового поиска не найдены." -#: describe.c:4748 +#: describe.c:4832 msgid "Start parse" msgstr "Начало разбора" -#: describe.c:4749 +#: describe.c:4833 msgid "Method" msgstr "Метод" -#: describe.c:4753 +#: describe.c:4837 msgid "Get next token" msgstr "Получение следующего фрагмента" -#: describe.c:4755 +#: describe.c:4839 msgid "End parse" msgstr "Окончание разбора" -#: describe.c:4757 +#: describe.c:4841 msgid "Get headline" msgstr "Получение выдержки" -#: describe.c:4759 +#: describe.c:4843 msgid "Get token types" msgstr "Получение типов фрагментов" -#: describe.c:4770 +#: describe.c:4854 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "Анализатор текстового поиска \"%s.%s\"" -#: describe.c:4773 +#: describe.c:4857 #, c-format msgid "Text search parser \"%s\"" msgstr "Анализатор текстового поиска \"%s\"" -#: describe.c:4792 +#: describe.c:4876 msgid "Token name" msgstr "Имя фрагмента" -#: describe.c:4803 +#: describe.c:4887 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "Типы фрагментов для анализатора \"%s.%s\"" -#: describe.c:4806 +#: describe.c:4890 #, c-format msgid "Token types for parser \"%s\"" msgstr "Типы фрагментов для анализатора \"%s\"" -#: describe.c:4860 +#: describe.c:4944 msgid "Template" msgstr "Шаблон" -#: describe.c:4861 +#: describe.c:4945 msgid "Init options" msgstr "Параметры инициализации" -#: describe.c:4883 +#: describe.c:4967 msgid "List of text search dictionaries" msgstr "Список словарей текстового поиска" -#: describe.c:4926 +#: describe.c:5010 msgid "Init" msgstr "Инициализация" -#: describe.c:4927 +#: describe.c:5011 msgid "Lexize" msgstr "Выделение лексем" -#: describe.c:4954 +#: describe.c:5038 msgid "List of text search templates" msgstr "Список шаблонов текстового поиска" -#: describe.c:5014 +#: describe.c:5098 msgid "List of text search configurations" msgstr "Список конфигураций текстового поиска" -#: describe.c:5060 +#: describe.c:5144 #, c-format msgid "Did not find any text search configuration named \"%s\"." msgstr "Конфигурация текстового поиска \"%s\" не найдена." -#: describe.c:5063 +#: describe.c:5147 #, c-format msgid "Did not find any text search configurations." msgstr "Никакие конфигурации текстового поиска не найдены." -#: describe.c:5129 +#: describe.c:5213 msgid "Token" msgstr "Фрагмент" -#: describe.c:5130 +#: describe.c:5214 msgid "Dictionaries" msgstr "Словари" -#: describe.c:5141 +#: describe.c:5225 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "Конфигурация текстового поиска \"%s.%s\"" -#: describe.c:5144 +#: describe.c:5228 #, c-format msgid "Text search configuration \"%s\"" msgstr "Конфигурация текстового поиска \"%s\"" -#: describe.c:5148 +#: describe.c:5232 #, c-format msgid "" "\n" @@ -2168,7 +2214,7 @@ msgstr "" "\n" "Анализатор: \"%s.%s\"" -#: describe.c:5151 +#: describe.c:5235 #, c-format msgid "" "\n" @@ -2177,156 +2223,236 @@ msgstr "" "\n" "Анализатор: \"%s\"" -#: describe.c:5185 +#: describe.c:5269 #, c-format msgid "The server (version %s) does not support foreign-data wrappers." msgstr "Сервер (версия %s) не поддерживает обёртки сторонних данных." -#: describe.c:5243 +#: describe.c:5327 msgid "List of foreign-data wrappers" msgstr "Список обёрток сторонних данных" -#: describe.c:5268 +#: describe.c:5352 #, c-format msgid "The server (version %s) does not support foreign servers." msgstr "Сервер (версия %s) не поддерживает сторонние серверы." -#: describe.c:5281 +#: describe.c:5365 msgid "Foreign-data wrapper" msgstr "Обёртка сторонних данных" -#: describe.c:5299 describe.c:5504 +#: describe.c:5383 describe.c:5588 msgid "Version" msgstr "Версия" -#: describe.c:5325 +#: describe.c:5409 msgid "List of foreign servers" msgstr "Список сторонних серверов" -#: describe.c:5350 +#: describe.c:5434 #, c-format msgid "The server (version %s) does not support user mappings." msgstr "Сервер (версия %s) не поддерживает сопоставления пользователей." -#: describe.c:5360 describe.c:5424 +#: describe.c:5444 describe.c:5508 msgid "Server" msgstr "Сервер" -#: describe.c:5361 +#: describe.c:5445 msgid "User name" msgstr "Имя пользователя" -#: describe.c:5386 +#: describe.c:5470 msgid "List of user mappings" msgstr "Список сопоставлений пользователей" -#: describe.c:5411 +#: describe.c:5495 #, c-format msgid "The server (version %s) does not support foreign tables." msgstr "Сервер (версия %s) не поддерживает сторонние таблицы." -#: describe.c:5464 +#: describe.c:5548 msgid "List of foreign tables" msgstr "Список сторонних таблиц" -#: describe.c:5489 describe.c:5546 +#: describe.c:5573 describe.c:5630 #, c-format msgid "The server (version %s) does not support extensions." msgstr "Сервер (версия %s) не поддерживает расширения." -#: describe.c:5521 +#: describe.c:5605 msgid "List of installed extensions" msgstr "Список установленных расширений" -#: describe.c:5574 +#: describe.c:5658 #, c-format msgid "Did not find any extension named \"%s\"." msgstr "Расширение \"%s\" не найдено." -#: describe.c:5577 +#: describe.c:5661 #, c-format msgid "Did not find any extensions." msgstr "Никакие расширения не найдены." -#: describe.c:5621 +#: describe.c:5705 msgid "Object description" msgstr "Описание объекта" -#: describe.c:5631 +#: describe.c:5715 #, c-format msgid "Objects in extension \"%s\"" msgstr "Объекты в расширении \"%s\"" -#: describe.c:5660 describe.c:5731 +#: describe.c:5744 describe.c:5820 #, c-format msgid "The server (version %s) does not support publications." msgstr "Сервер (версия %s) не поддерживает публикации." -#: describe.c:5677 describe.c:5803 +#: describe.c:5761 describe.c:5898 msgid "All tables" msgstr "Все таблицы" -#: describe.c:5678 describe.c:5804 +#: describe.c:5762 describe.c:5899 msgid "Inserts" msgstr "Добавления" -#: describe.c:5679 describe.c:5805 +#: describe.c:5763 describe.c:5900 msgid "Updates" msgstr "Изменения" -#: describe.c:5680 describe.c:5806 +#: describe.c:5764 describe.c:5901 msgid "Deletes" msgstr "Удаления" -#: describe.c:5684 describe.c:5808 +#: describe.c:5768 describe.c:5903 msgid "Truncates" msgstr "Опустошения" -#: describe.c:5701 +#: describe.c:5772 describe.c:5905 +msgid "Via root" +msgstr "Через корень" + +#: describe.c:5789 msgid "List of publications" msgstr "Список публикаций" -#: describe.c:5769 +#: describe.c:5862 #, c-format msgid "Did not find any publication named \"%s\"." msgstr "Публикация \"%s\" не найдена." -#: describe.c:5772 +#: describe.c:5865 #, c-format msgid "Did not find any publications." msgstr "Никакие публикации не найдены." -#: describe.c:5799 +#: describe.c:5894 #, c-format msgid "Publication %s" msgstr "Публикация %s" -#: describe.c:5843 +#: describe.c:5942 msgid "Tables:" msgstr "Таблицы:" -#: describe.c:5887 +#: describe.c:5986 #, c-format msgid "The server (version %s) does not support subscriptions." msgstr "Сервер (версия %s) не поддерживает подписки." -#: describe.c:5903 +#: describe.c:6002 msgid "Publication" msgstr "Публикация" -#: describe.c:5910 +#: describe.c:6009 msgid "Synchronous commit" msgstr "Синхронная фиксация" -#: describe.c:5911 +#: describe.c:6010 msgid "Conninfo" msgstr "Строка подключения" -#: describe.c:5933 +#: describe.c:6032 msgid "List of subscriptions" msgstr "Список подписок" -#: help.c:74 +#: describe.c:6099 describe.c:6188 describe.c:6274 describe.c:6357 +msgid "AM" +msgstr "МД" + +#: describe.c:6100 +msgid "Input type" +msgstr "Входной тип" + +#: describe.c:6101 +msgid "Storage type" +msgstr "Тип хранения" + +#: describe.c:6102 +msgid "Operator class" +msgstr "Класс операторов" + +#: describe.c:6114 describe.c:6189 describe.c:6275 describe.c:6358 +msgid "Operator family" +msgstr "Семейство операторов" + +#: describe.c:6147 +msgid "List of operator classes" +msgstr "Список классов операторов" + +#: describe.c:6190 +msgid "Applicable types" +msgstr "Применимые типы" + +#: describe.c:6229 +msgid "List of operator families" +msgstr "Список семейств операторов" + +#: describe.c:6276 +msgid "Operator" +msgstr "Оператор" + +#: describe.c:6277 +msgid "Strategy" +msgstr "Стратегия" + +#: describe.c:6278 +msgid "ordering" +msgstr "сортировка" + +#: describe.c:6279 +msgid "search" +msgstr "поиск" + +#: describe.c:6280 +msgid "Purpose" +msgstr "Назначение" + +#: describe.c:6285 +msgid "Sort opfamily" +msgstr "Семейство для сортировки" + +#: describe.c:6316 +msgid "List of operators of operator families" +msgstr "Список операторов из семейств операторов" + +#: describe.c:6359 +msgid "Registered left type" +msgstr "Зарегистрированный левый тип" + +#: describe.c:6360 +msgid "Registered right type" +msgstr "Зарегистрированный правый тип" + +#: describe.c:6361 +msgid "Number" +msgstr "Номер" + +#: describe.c:6397 +msgid "List of support functions of operator families" +msgstr "Список опорных функций из семейств операторов" + +#: help.c:73 #, c-format msgid "" "psql is the PostgreSQL interactive terminal.\n" @@ -2335,12 +2461,12 @@ msgstr "" "psql - это интерактивный терминал PostgreSQL.\n" "\n" -#: help.c:75 help.c:349 help.c:425 help.c:468 +#: help.c:74 help.c:355 help.c:431 help.c:474 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: help.c:76 +#: help.c:75 #, c-format msgid "" " psql [OPTION]... [DBNAME [USERNAME]]\n" @@ -2349,12 +2475,12 @@ msgstr "" " psql [ПАРАМЕТР]... [БД [ПОЛЬЗОВАТЕЛЬ]]\n" "\n" -#: help.c:78 +#: help.c:77 #, c-format msgid "General options:\n" msgstr "Общие параметры:\n" -#: help.c:83 +#: help.c:82 #, c-format msgid "" " -c, --command=COMMAND run only single command (SQL or internal) and " @@ -2363,7 +2489,7 @@ msgstr "" " -c, --command=КОМАНДА выполнить одну команду (SQL или внутреннюю) и " "выйти\n" -#: help.c:84 +#: help.c:83 #, c-format msgid "" " -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" @@ -2371,17 +2497,17 @@ msgstr "" " -d, --dbname=БД имя подключаемой базы данных (по умолчанию \"%s" "\")\n" -#: help.c:85 +#: help.c:84 #, c-format msgid " -f, --file=FILENAME execute commands from file, then exit\n" msgstr " -f, --file=ИМЯ_ФАЙЛА выполнить команды из файла и выйти\n" -#: help.c:86 +#: help.c:85 #, c-format msgid " -l, --list list available databases, then exit\n" msgstr " -l, --list вывести список баз данных и выйти\n" -#: help.c:87 +#: help.c:86 #, c-format msgid "" " -v, --set=, --variable=NAME=VALUE\n" @@ -2392,18 +2518,18 @@ msgstr "" " присвоить переменной psql ИМЯ заданное ЗНАЧЕНИЕ\n" " (например: -v ON_ERROR_STOP=1)\n" -#: help.c:90 +#: help.c:89 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: help.c:91 +#: help.c:90 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" msgstr "" " -X, --no-psqlrc игнорировать файл параметров запуска (~/.psqlrc)\n" -#: help.c:92 +#: help.c:91 #, c-format msgid "" " -1 (\"one\"), --single-transaction\n" @@ -2414,23 +2540,23 @@ msgstr "" " выполнить как одну транзакцию\n" " (в неинтерактивном режиме)\n" -#: help.c:94 +#: help.c:93 #, c-format msgid " -?, --help[=options] show this help, then exit\n" msgstr " -?, --help[=options] показать эту справку и выйти\n" -#: help.c:95 +#: help.c:94 #, c-format msgid " --help=commands list backslash commands, then exit\n" msgstr " --help=commands перечислить команды с \\ и выйти\n" -#: help.c:96 +#: help.c:95 #, c-format msgid " --help=variables list special variables, then exit\n" msgstr "" " --help=variables перечислить специальные переменные и выйти\n" -#: help.c:98 +#: help.c:97 #, c-format msgid "" "\n" @@ -2439,22 +2565,22 @@ msgstr "" "\n" "Параметры ввода/вывода:\n" -#: help.c:99 +#: help.c:98 #, c-format msgid " -a, --echo-all echo all input from script\n" msgstr " -a, --echo-all отображать все команды из скрипта\n" -#: help.c:100 +#: help.c:99 #, c-format msgid " -b, --echo-errors echo failed commands\n" msgstr " -b, --echo-errors отображать команды с ошибками\n" -#: help.c:101 +#: help.c:100 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" msgstr " -e, --echo-queries отображать команды, отправляемые серверу\n" -#: help.c:102 +#: help.c:101 #, c-format msgid "" " -E, --echo-hidden display queries that internal commands generate\n" @@ -2462,26 +2588,26 @@ msgstr "" " -E, --echo-hidden выводить запросы, порождённые внутренними " "командами\n" -#: help.c:103 +#: help.c:102 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" msgstr " -L, --log-file=ИМЯ_ФАЙЛА сохранять протокол работы в файл\n" -#: help.c:104 +#: help.c:103 #, c-format msgid "" " -n, --no-readline disable enhanced command line editing (readline)\n" msgstr "" " -n, --no-readline отключить редактор командной строки readline\n" -#: help.c:105 +#: help.c:104 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" msgstr "" " -o, --output=ИМЯ_ФАЙЛА направить результаты запроса в файл (или канал " "|)\n" -#: help.c:106 +#: help.c:105 #, c-format msgid "" " -q, --quiet run quietly (no messages, only query output)\n" @@ -2489,13 +2615,13 @@ msgstr "" " -q, --quiet показывать только результаты запросов, без " "сообщений\n" -#: help.c:107 +#: help.c:106 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" msgstr "" " -s, --single-step пошаговый режим (подтверждение каждого запроса)\n" -#: help.c:108 +#: help.c:107 #, c-format msgid "" " -S, --single-line single-line mode (end of line terminates SQL " @@ -2504,7 +2630,7 @@ msgstr "" " -S, --single-line однострочный режим (конец строки завершает " "команду)\n" -#: help.c:110 +#: help.c:109 #, c-format msgid "" "\n" @@ -2513,12 +2639,12 @@ msgstr "" "\n" "Параметры вывода:\n" -#: help.c:111 +#: help.c:110 #, c-format msgid " -A, --no-align unaligned table output mode\n" msgstr " -A, --no-align режим вывода невыровненной таблицы\n" -#: help.c:112 +#: help.c:111 #, c-format msgid "" " --csv CSV (Comma-Separated Values) table output mode\n" @@ -2527,7 +2653,7 @@ msgstr "" "разделённые\n" " запятыми)\n" -#: help.c:113 +#: help.c:112 #, c-format msgid "" " -F, --field-separator=STRING\n" @@ -2538,12 +2664,12 @@ msgstr "" " разделителей полей при невыровненном выводе\n" " (по умолчанию: \"%s\")\n" -#: help.c:116 +#: help.c:115 #, c-format msgid " -H, --html HTML table output mode\n" msgstr " -H, --html вывод таблицы в формате HTML\n" -#: help.c:117 +#: help.c:116 #, c-format msgid "" " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset " @@ -2553,7 +2679,7 @@ msgstr "" "ЗНАЧЕНИЕМ)\n" " (см. описание \\pset)\n" -#: help.c:118 +#: help.c:117 #, c-format msgid "" " -R, --record-separator=STRING\n" @@ -2564,12 +2690,12 @@ msgstr "" " разделитель записей при невыровненном выводе\n" " (по умолчанию: новая строка)\n" -#: help.c:120 +#: help.c:119 #, c-format msgid " -t, --tuples-only print rows only\n" msgstr " -t, --tuples-only выводить только кортежи\n" -#: help.c:121 +#: help.c:120 #, c-format msgid "" " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, " @@ -2577,12 +2703,12 @@ msgid "" msgstr "" " -T, --table-attr=ТЕКСТ установить атрибуты HTML-таблицы (width, border)\n" -#: help.c:122 +#: help.c:121 #, c-format msgid " -x, --expanded turn on expanded table output\n" msgstr " -x, --expanded включить развёрнутый вывод таблицы\n" -#: help.c:123 +#: help.c:122 #, c-format msgid "" " -z, --field-separator-zero\n" @@ -2593,7 +2719,7 @@ msgstr "" " сделать разделителем полей при невыровненном\n" " выводе нулевой байт\n" -#: help.c:125 +#: help.c:124 #, c-format msgid "" " -0, --record-separator-zero\n" @@ -2604,7 +2730,7 @@ msgstr "" " сделать разделителем записей при невыровненном\n" " нулевой байт\n" -#: help.c:128 +#: help.c:127 #, c-format msgid "" "\n" @@ -2613,7 +2739,7 @@ msgstr "" "\n" "Параметры подключения:\n" -#: help.c:131 +#: help.c:130 #, c-format msgid "" " -h, --host=HOSTNAME database server host or socket directory " @@ -2622,27 +2748,27 @@ msgstr "" " -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n" " (по умолчанию: \"%s\")\n" -#: help.c:132 +#: help.c:131 msgid "local socket" msgstr "локальный сокет" -#: help.c:135 +#: help.c:134 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" msgstr "" " -p, --port=ПОРТ порт сервера баз данных (по умолчанию: \"%s\")\n" -#: help.c:141 +#: help.c:140 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" msgstr " -U, --username=ИМЯ имя пользователя (по умолчанию: \"%s\")\n" -#: help.c:142 +#: help.c:141 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: help.c:143 +#: help.c:142 #, c-format msgid "" " -W, --password force password prompt (should happen " @@ -2650,7 +2776,7 @@ msgid "" msgstr "" " -W, --password запрашивать пароль всегда (обычно не требуется)\n" -#: help.c:145 +#: help.c:144 #, c-format msgid "" "\n" @@ -2667,10 +2793,15 @@ msgstr "" "документации PostgreSQL.\n" "\n" +#: help.c:147 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "Об ошибках сообщайте по адресу <%s>.\n" + #: help.c:148 #, c-format -msgid "Report bugs to .\n" -msgstr "Об ошибках сообщайте по адресу .\n" +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" #: help.c:174 #, c-format @@ -2706,19 +2837,23 @@ msgstr "" #: help.c:178 #, c-format msgid "" -" \\g [FILE] or ; execute query (and send results to file or |pipe)\n" +" \\g [(OPTIONS)] [FILE] execute query (and send results to file or |" +"pipe);\n" +" \\g with no arguments is equivalent to a semicolon\n" msgstr "" -" \\g [ФАЙЛ] или ; выполнить запрос\n" -" (и направить результаты в файл или канал |)\n" +" \\g [(ПАРАМЕТРЫ)] [ФАЙЛ] выполнить запрос (и направить результаты в файл\n" +"\n" +" или канал |); \\g без аргументов равнозначно \";" +"\"\n" -#: help.c:179 +#: help.c:180 #, c-format msgid "" " \\gdesc describe result of query, without executing it\n" msgstr "" " \\gdesc описать результат запроса, но не выполнять его\n" -#: help.c:180 +#: help.c:181 #, c-format msgid "" " \\gexec execute query, then execute each value in its " @@ -2727,7 +2862,7 @@ msgstr "" " \\gexec выполнить запрос, а затем выполнить каждую строку " "в результате\n" -#: help.c:181 +#: help.c:182 #, c-format msgid "" " \\gset [PREFIX] execute query and store results in psql variables\n" @@ -2736,46 +2871,46 @@ msgstr "" "переменных\n" " psql\n" -#: help.c:182 +#: help.c:183 #, c-format -msgid " \\gx [FILE] as \\g, but forces expanded output mode\n" +msgid " \\gx [(OPTIONS)] [FILE] as \\g, but forces expanded output mode\n" msgstr "" -" \\gx [ФАЙЛ] то же, что и \\g, но в режиме развёрнутого вывода\n" +" \\gx [(ПАРАМЕТРЫ)] [ФАЙЛ] то же, что \\g, но в режиме развёрнутого вывода\n" -#: help.c:183 +#: help.c:184 #, c-format msgid " \\q quit psql\n" msgstr " \\q выйти из psql\n" -#: help.c:184 +#: help.c:185 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr "" " \\watch [СЕК] повторять запрос в цикле через заданное число " "секунд\n" -#: help.c:187 +#: help.c:188 #, c-format msgid "Help\n" msgstr "Справка\n" -#: help.c:189 +#: help.c:190 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [commands] справка по командам psql c \\\n" -#: help.c:190 +#: help.c:191 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr "" " \\? options справка по параметрам командной строки psql\n" -#: help.c:191 +#: help.c:192 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? variables справка по специальным переменным\n" -#: help.c:192 +#: help.c:193 #, c-format msgid "" " \\h [NAME] help on syntax of SQL commands, * for all " @@ -2783,12 +2918,12 @@ msgid "" msgstr "" " \\h [ИМЯ] справка по заданному SQL-оператору; * - по всем\n" -#: help.c:195 +#: help.c:196 #, c-format msgid "Query Buffer\n" msgstr "Буфер запроса\n" -#: help.c:196 +#: help.c:197 #, c-format msgid "" " \\e [FILE] [LINE] edit the query buffer (or file) with external " @@ -2797,63 +2932,67 @@ msgstr "" " \\e [ФАЙЛ] [СТРОКА] править буфер запроса (или файл) во внешнем " "редакторе\n" -#: help.c:197 +#: help.c:198 #, c-format msgid "" " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr "" " \\ef [ФУНКЦИЯ [СТРОКА]] править определение функции во внешнем редакторе\n" -#: help.c:198 +#: help.c:199 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr "" " \\ev [VIEWNAME [LINE]] править определение представления во внешнем " "редакторе\n" -#: help.c:199 +#: help.c:200 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p вывести содержимое буфера запросов\n" -#: help.c:200 +#: help.c:201 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r очистить буфер запроса\n" -#: help.c:202 +#: help.c:203 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [ФАЙЛ] вывести историю или сохранить её в файл\n" -#: help.c:204 +#: help.c:205 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w ФАЙЛ записать буфер запроса в файл\n" -#: help.c:207 +#: help.c:208 #, c-format msgid "Input/Output\n" msgstr "Ввод/Вывод\n" -#: help.c:208 +#: help.c:209 #, c-format msgid "" " \\copy ... perform SQL COPY with data stream to the client " "host\n" msgstr " \\copy ... выполнить SQL COPY на стороне клиента\n" -#: help.c:209 +#: help.c:210 #, c-format -msgid " \\echo [STRING] write string to standard output\n" -msgstr " \\echo [СТРОКА] записать строку в стандартный вывод\n" +msgid "" +" \\echo [-n] [STRING] write string to standard output (-n for no " +"newline)\n" +msgstr "" +" \\echo [-n] [СТРОКА] записать строку в поток стандартного вывода\n" +" (-n отключает перевод строки)\n" -#: help.c:210 +#: help.c:211 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i ФАЙЛ выполнить команды из файла\n" -#: help.c:211 +#: help.c:212 #, c-format msgid "" " \\ir FILE as \\i, but relative to location of current " @@ -2862,39 +3001,49 @@ msgstr "" " \\ir ФАЙЛ подобно \\i, но путь задаётся относительно\n" " текущего скрипта\n" -#: help.c:212 +#: help.c:213 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr "" " \\o [ФАЙЛ] выводить все результаты запросов в файл или канал " "|\n" -#: help.c:213 +#: help.c:214 +#, c-format +msgid "" +" \\qecho [-n] [STRING] write string to \\o output stream (-n for no " +"newline)\n" +msgstr "" +" \\qecho [-n] [СТРОКА] записать строку в выходной поток \\o\n" +" (-n отключает перевод строки)\n" + +#: help.c:215 #, c-format msgid "" -" \\qecho [STRING] write string to query output stream (see \\o)\n" +" \\warn [-n] [STRING] write string to standard error (-n for no " +"newline)\n" msgstr "" -" \\qecho [СТРОКА] записать строку в поток результатов запроса (см. " -"\\o)\n" +" \\warn [-n] [СТРОКА] записать строку в поток вывода ошибок\n" +" (-n отключает перевод строки)\n" -#: help.c:216 +#: help.c:218 #, c-format msgid "Conditional\n" msgstr "Условия\n" -#: help.c:217 +#: help.c:219 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if ВЫРАЖЕНИЕ начало блока условия\n" -#: help.c:218 +#: help.c:220 #, c-format msgid "" " \\elif EXPR alternative within current conditional block\n" msgstr "" " \\elif ВЫРАЖЕНИЕ альтернативная ветвь в текущем блоке условия\n" -#: help.c:219 +#: help.c:221 #, c-format msgid "" " \\else final alternative within current conditional " @@ -2902,31 +3051,31 @@ msgid "" msgstr "" " \\else окончательная ветвь в текущем блоке условия\n" -#: help.c:220 +#: help.c:222 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif конец блока условия\n" -#: help.c:223 +#: help.c:225 #, c-format msgid "Informational\n" msgstr "Информационные\n" -#: help.c:224 +#: help.c:226 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr "" " (дополнения: S = показывать системные объекты, + = дополнительные " "подробности)\n" -#: help.c:225 +#: help.c:227 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr "" " \\d[S+] список таблиц, представлений и " "последовательностей\n" -#: help.c:226 +#: help.c:228 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr "" @@ -2934,74 +3083,102 @@ msgstr "" "последовательности\n" " или индекса\n" -#: help.c:227 +#: help.c:229 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [МАСКА] список агрегатных функций\n" -#: help.c:228 +#: help.c:230 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [МАСКА] список методов доступа\n" -#: help.c:229 +# well-spelled: МСК +#: help.c:231 +#, c-format +msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" +msgstr " \\dAc[+] [МСК_МД [МСК_ТИПА]] список классов операторов\n" + +# well-spelled: МСК +#: help.c:232 +#, c-format +msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" +msgstr " \\dAf[+] [МСК_МД [МСК_ТИПА]] список семейств операторов\n" + +# well-spelled: МСК +#: help.c:233 +#, c-format +msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" +msgstr "" +" \\dAo[+] [МСК_МД [МСК_СОП]] список операторов из семейств операторов\n" + +# well-spelled: МСК +#: help.c:234 +#, c-format +msgid "" +" \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" +msgstr "" +" \\dAp [МСК_МД [МСК_СОП]] список опорных функций из семейств " +"операторов\n" + +#: help.c:235 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [МАСКА] список табличных пространств\n" -#: help.c:230 +#: help.c:236 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [МАСКА] список преобразований\n" -#: help.c:231 +#: help.c:237 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [МАСКА] список приведений типов\n" -#: help.c:232 +#: help.c:238 #, c-format msgid "" " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr "" " \\dd[S] [МАСКА] описания объектов, не выводимые в других режимах\n" -#: help.c:233 +#: help.c:239 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [МАСКА] список доменов\n" -#: help.c:234 +#: help.c:240 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [МАСКА] список прав по умолчанию\n" -#: help.c:235 +#: help.c:241 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [МАСКА] список сторонних таблиц\n" -#: help.c:236 +#: help.c:242 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [МАСКА] список сторонних таблиц\n" -#: help.c:237 +#: help.c:243 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [МАСКА] список сторонних серверов\n" -#: help.c:238 +#: help.c:244 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [МАСКА] список сопоставлений пользователей\n" -#: help.c:239 +#: help.c:245 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [МАСКА] список обёрток сторонних данных\n" -#: help.c:240 +#: help.c:246 #, c-format msgid "" " \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] " @@ -3010,68 +3187,68 @@ msgstr "" " \\df[anptw][S+] [МАСКА] список [только агрегатных/обычных/(процедур)/\n" " триггерных/оконных] функций\n" -#: help.c:241 +#: help.c:247 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [МАСКА] список конфигураций текстового поиска\n" -#: help.c:242 +#: help.c:248 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [МАСКА] список словарей текстового поиска\n" -#: help.c:243 +#: help.c:249 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [МАСКА] список анализаторов текстового поиска\n" -#: help.c:244 +#: help.c:250 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [МАСКА] список шаблонов текстового поиска\n" -#: help.c:245 +#: help.c:251 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [МАСКА] список ролей\n" -#: help.c:246 +#: help.c:252 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [МАСКА] список индексов\n" -#: help.c:247 +#: help.c:253 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr "" " \\dl список больших объектов (то же, что и \\lo_list)\n" -#: help.c:248 +#: help.c:254 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [МАСКА] список языков процедур\n" -#: help.c:249 +#: help.c:255 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [МАСКА] список материализованных представлений\n" -#: help.c:250 +#: help.c:256 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [МАСКА] список схем\n" -#: help.c:251 +#: help.c:257 #, c-format msgid " \\do[S] [PATTERN] list operators\n" msgstr " \\do[S] [МАСКА] список операторов\n" -#: help.c:252 +#: help.c:258 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [МАСКА] список правил сортировки\n" -#: help.c:253 +#: help.c:259 #, c-format msgid "" " \\dp [PATTERN] list table, view, and sequence access privileges\n" @@ -3079,7 +3256,7 @@ msgstr "" " \\dp [МАСКА] список прав доступа к таблицам, представлениям и\n" " последовательностям\n" -#: help.c:254 +#: help.c:260 #, c-format msgid "" " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations " @@ -3090,83 +3267,83 @@ msgstr "" "(n)\n" # well-spelled: МАСК -#: help.c:255 +#: help.c:261 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [МАСК1 [МАСК2]] список параметров роли на уровне БД\n" -#: help.c:256 +#: help.c:262 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[+] [МАСКА] список публикаций для репликации\n" -#: help.c:257 +#: help.c:263 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [МАСКА] список подписок на репликацию\n" -#: help.c:258 +#: help.c:264 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [МАСКА] список последовательностей\n" -#: help.c:259 +#: help.c:265 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [МАСКА] список таблиц\n" -#: help.c:260 +#: help.c:266 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [МАСКА] список типов данных\n" -#: help.c:261 +#: help.c:267 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [МАСКА] список ролей\n" -#: help.c:262 +#: help.c:268 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [МАСКА] список представлений\n" -#: help.c:263 +#: help.c:269 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [МАСКА] список расширений\n" -#: help.c:264 +#: help.c:270 #, c-format msgid " \\dy [PATTERN] list event triggers\n" msgstr " \\dy [МАСКА] список событийных триггеров\n" -#: help.c:265 +#: help.c:271 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [МАСКА] список баз данных\n" -#: help.c:266 +#: help.c:272 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] ИМЯ_ФУНКЦИИ показать определение функции\n" # well-spelled: ПРЕДСТ -#: help.c:267 +#: help.c:273 #, c-format msgid " \\sv[+] VIEWNAME show a view's definition\n" msgstr " \\sv[+] ИМЯ_ПРЕДСТ показать определение представления\n" -#: help.c:268 +#: help.c:274 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [МАСКА] то же, что и \\dp\n" -#: help.c:271 +#: help.c:277 #, c-format msgid "Formatting\n" msgstr "Форматирование\n" -#: help.c:272 +#: help.c:278 #, c-format msgid "" " \\a toggle between unaligned and aligned output mode\n" @@ -3174,14 +3351,14 @@ msgstr "" " \\a переключение режимов вывода:\n" " неформатированный/выровненный\n" -#: help.c:273 +#: help.c:279 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr "" " \\C [СТРОКА] задать заголовок таблицы или убрать, если не " "задан\n" -#: help.c:274 +#: help.c:280 #, c-format msgid "" " \\f [STRING] show or set field separator for unaligned query " @@ -3190,13 +3367,13 @@ msgstr "" " \\f [СТРОКА] показать или установить разделитель полей для\n" " неформатированного вывода\n" -#: help.c:275 +#: help.c:281 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr "" " \\H переключить режим вывода в HTML (текущий: %s)\n" -#: help.c:277 +#: help.c:283 #, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" @@ -3215,12 +3392,12 @@ msgstr "" " unicode_border_linestyle|unicode_column_linestyle|\n" " unicode_header_linestyle)\n" -#: help.c:284 +#: help.c:290 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] режим вывода только строк (сейчас: %s)\n" -#: help.c:286 +#: help.c:292 #, c-format msgid "" " \\T [STRING] set HTML
tag attributes, or unset if none\n" @@ -3228,19 +3405,19 @@ msgstr "" " \\T [СТРОКА] задать атрибуты для
или убрать, если не " "заданы\n" -#: help.c:287 +#: help.c:293 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr "" " \\x [on|off|auto] переключить режим расширенного вывода (сейчас: " "%s)\n" -#: help.c:291 +#: help.c:297 #, c-format msgid "Connection\n" msgstr "Соединение\n" -#: help.c:293 +#: help.c:299 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3250,7 +3427,7 @@ msgstr "" " подключиться к другой базе данных\n" " (текущая: \"%s\")\n" -#: help.c:297 +#: help.c:303 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3260,44 +3437,44 @@ msgstr "" " подключиться к другой базе данных\n" " (сейчас подключения нет)\n" -#: help.c:299 +#: help.c:305 #, c-format msgid "" " \\conninfo display information about current connection\n" msgstr " \\conninfo информация о текущем соединении\n" -#: help.c:300 +#: help.c:306 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [КОДИРОВКА] показать/установить клиентскую кодировку\n" -#: help.c:301 +#: help.c:307 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr " \\password [ИМЯ] безопасно сменить пароль пользователя\n" -#: help.c:304 +#: help.c:310 #, c-format msgid "Operating System\n" msgstr "Операционная система\n" -#: help.c:305 +#: help.c:311 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [ПУТЬ] сменить текущий каталог\n" -#: help.c:306 +#: help.c:312 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr "" " \\setenv ИМЯ [ЗНАЧЕНИЕ] установить или сбросить переменную окружения\n" -#: help.c:307 +#: help.c:313 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr " \\timing [on|off] включить/выключить секундомер (сейчас: %s)\n" -#: help.c:309 +#: help.c:315 #, c-format msgid "" " \\! [COMMAND] execute command in shell or start interactive " @@ -3306,19 +3483,19 @@ msgstr "" " \\! [КОМАНДА] выполнить команду в командной оболочке\n" " или запустить интерактивную оболочку\n" -#: help.c:312 +#: help.c:318 #, c-format msgid "Variables\n" msgstr "Переменные\n" -#: help.c:313 +#: help.c:319 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr "" " \\prompt [ТЕКСТ] ИМЯ предложить пользователю задать внутреннюю " "переменную\n" -#: help.c:314 +#: help.c:320 #, c-format msgid "" " \\set [NAME [VALUE]] set internal variable, or list all if no " @@ -3327,17 +3504,17 @@ msgstr "" " \\set [ИМЯ [ЗНАЧЕНИЕ]] установить внутреннюю переменную или вывести все,\n" " если имя не задано\n" -#: help.c:315 +#: help.c:321 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset ИМЯ сбросить (удалить) внутреннюю переменную\n" -#: help.c:318 +#: help.c:324 #, c-format msgid "Large Objects\n" msgstr "Большие объекты\n" -#: help.c:319 +#: help.c:325 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -3350,7 +3527,7 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID операции с большими объектами\n" -#: help.c:346 +#: help.c:352 #, c-format msgid "" "List of specially treated variables\n" @@ -3359,12 +3536,12 @@ msgstr "" "Список специальных переменных\n" "\n" -#: help.c:348 +#: help.c:354 #, c-format msgid "psql variables:\n" msgstr "Переменные psql:\n" -#: help.c:350 +#: help.c:356 #, c-format msgid "" " psql --set=NAME=VALUE\n" @@ -3375,7 +3552,7 @@ msgstr "" " или \\set ИМЯ ЗНАЧЕНИЕ в приглашении psql\n" "\n" -#: help.c:352 +#: help.c:358 #, c-format msgid "" " AUTOCOMMIT\n" @@ -3384,7 +3561,7 @@ msgstr "" " AUTOCOMMIT\n" " если установлен, успешные SQL-команды фиксируются автоматически\n" -#: help.c:354 +#: help.c:360 #, c-format msgid "" " COMP_KEYWORD_CASE\n" @@ -3397,7 +3574,7 @@ msgstr "" " preserve-lower (сохранять нижний),\n" " preserve-upper (сохранять верхний)]\n" -#: help.c:357 +#: help.c:363 #, c-format msgid "" " DBNAME\n" @@ -3406,7 +3583,7 @@ msgstr "" " DBNAME\n" " имя текущей подключённой базы данных\n" -#: help.c:359 +#: help.c:365 #, c-format msgid "" " ECHO\n" @@ -3418,7 +3595,7 @@ msgstr "" " [all (всё), errors (ошибки), none (ничего),\n" " queries (запросы)]\n" -#: help.c:362 +#: help.c:368 #, c-format msgid "" " ECHO_HIDDEN\n" @@ -3429,7 +3606,7 @@ msgstr "" " если включено, выводит внутренние запросы, порождаемые командами с \\;\n" " если установлено значение \"noexec\", они выводятся, но не выполняются\n" -#: help.c:365 +#: help.c:371 #, c-format msgid "" " ENCODING\n" @@ -3438,7 +3615,7 @@ msgstr "" " ENCODING\n" " текущая кодировка клиентского набора символов\n" -#: help.c:367 +#: help.c:373 #, c-format msgid "" " ERROR\n" @@ -3447,7 +3624,7 @@ msgstr "" " ERROR\n" " true в случае ошибки в последнем запросе, иначе — false\n" -#: help.c:369 +#: help.c:375 #, c-format msgid "" " FETCH_COUNT\n" @@ -3458,7 +3635,7 @@ msgstr "" " число результирующих строк, извлекаемых и отображаемых за раз\n" " (0 = без ограничений)\n" -#: help.c:371 +#: help.c:377 #, c-format msgid "" " HIDE_TABLEAM\n" @@ -3467,7 +3644,7 @@ msgstr "" " HIDE_TABLEAM\n" " если установлено, табличные методы доступа не выводятся\n" -#: help.c:373 +#: help.c:379 #, c-format msgid "" " HISTCONTROL\n" @@ -3477,7 +3654,7 @@ msgstr "" " управляет историей команд [ignorespace (игнорировать пробелы),\n" " ignoredups (игнорировать дубли), ignoreboth (и то, и другое)]\n" -#: help.c:375 +#: help.c:381 #, c-format msgid "" " HISTFILE\n" @@ -3486,7 +3663,7 @@ msgstr "" " HISTFILE\n" " имя файла, в котором будет сохраняться история команд\n" -#: help.c:377 +#: help.c:383 #, c-format msgid "" " HISTSIZE\n" @@ -3495,7 +3672,7 @@ msgstr "" " HISTSIZE\n" " максимальное число команд, сохраняемых в истории\n" -#: help.c:379 +#: help.c:385 #, c-format msgid "" " HOST\n" @@ -3504,7 +3681,7 @@ msgstr "" " HOST\n" " сервер баз данных, к которому установлено подключение\n" -#: help.c:381 +#: help.c:387 #, c-format msgid "" " IGNOREEOF\n" @@ -3513,7 +3690,7 @@ msgstr "" " IGNOREEOF\n" " количество EOF для завершения интерактивного сеанса\n" -#: help.c:383 +#: help.c:389 #, c-format msgid "" " LASTOID\n" @@ -3522,7 +3699,7 @@ msgstr "" " LASTOID\n" " значение последнего задействованного OID\n" -#: help.c:385 +#: help.c:391 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" @@ -3536,7 +3713,7 @@ msgstr "" "\"00000\",\n" " если ошибки не было\n" -#: help.c:388 +#: help.c:394 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" @@ -3546,7 +3723,7 @@ msgstr "" " если установлено, транзакция не прекращается при ошибке\n" " (используются неявные точки сохранения)\n" -#: help.c:390 +#: help.c:396 #, c-format msgid "" " ON_ERROR_STOP\n" @@ -3555,7 +3732,7 @@ msgstr "" " ON_ERROR_STOP\n" " останавливать выполнение пакета команд после ошибки\n" -#: help.c:392 +#: help.c:398 #, c-format msgid "" " PORT\n" @@ -3564,7 +3741,7 @@ msgstr "" " PORT\n" " порт сервера для текущего соединения\n" -#: help.c:394 +#: help.c:400 #, c-format msgid "" " PROMPT1\n" @@ -3573,7 +3750,7 @@ msgstr "" " PROMPT1\n" " устанавливает стандартное приглашение psql\n" -#: help.c:396 +#: help.c:402 #, c-format msgid "" " PROMPT2\n" @@ -3584,7 +3761,7 @@ msgstr "" " устанавливает приглашение, которое выводится при переносе оператора\n" " на новую строку\n" -#: help.c:398 +#: help.c:404 #, c-format msgid "" " PROMPT3\n" @@ -3593,7 +3770,7 @@ msgstr "" " PROMPT3\n" " устанавливает приглашение для выполнения COPY ... FROM STDIN\n" -#: help.c:400 +#: help.c:406 #, c-format msgid "" " QUIET\n" @@ -3602,7 +3779,7 @@ msgstr "" " QUIET\n" " выводить минимум сообщений (как и с параметром -q)\n" -#: help.c:402 +#: help.c:408 #, c-format msgid "" " ROW_COUNT\n" @@ -3612,7 +3789,7 @@ msgstr "" " число строк, возвращённых или обработанных последним SQL-запросом, либо " "0\n" -#: help.c:404 +#: help.c:410 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3623,7 +3800,7 @@ msgstr "" " SERVER_VERSION_NUM\n" " версия сервера (в коротком текстовом и числовом формате)\n" -#: help.c:407 +#: help.c:413 #, c-format msgid "" " SHOW_CONTEXT\n" @@ -3633,7 +3810,7 @@ msgstr "" " управляет отображением полей контекста сообщений\n" " [never (не отображать никогда), errors (ошибки), always (всегда]\n" -#: help.c:409 +#: help.c:415 #, c-format msgid "" " SINGLELINE\n" @@ -3643,7 +3820,7 @@ msgstr "" " если установлено, конец строки завершает режим ввода SQL-команды\n" " (как и с параметром -S)\n" -#: help.c:411 +#: help.c:417 #, c-format msgid "" " SINGLESTEP\n" @@ -3652,7 +3829,7 @@ msgstr "" " SINGLESTEP\n" " пошаговый режим (как и с параметром -s)\n" -#: help.c:413 +#: help.c:419 #, c-format msgid "" " SQLSTATE\n" @@ -3662,7 +3839,7 @@ msgstr "" " SQLSTATE последнего запроса или \"00000\", если он выполнился без " "ошибок\n" -#: help.c:415 +#: help.c:421 #, c-format msgid "" " USER\n" @@ -3671,7 +3848,7 @@ msgstr "" " USER\n" " текущий пользователь, подключённый к БД\n" -#: help.c:417 +#: help.c:423 #, c-format msgid "" " VERBOSITY\n" @@ -3681,7 +3858,7 @@ msgstr "" " управляет детализацией отчётов об ошибках [default (по умолчанию),\n" " verbose (подробно), terse (кратко), sqlstate (код состояния)]\n" -#: help.c:419 +#: help.c:425 #, c-format msgid "" " VERSION\n" @@ -3694,7 +3871,7 @@ msgstr "" " VERSION_NUM\n" " версия psql (в развёрнутом, в коротком текстовом и в числовом формате)\n" -#: help.c:424 +#: help.c:430 #, c-format msgid "" "\n" @@ -3703,7 +3880,7 @@ msgstr "" "\n" "Параметры отображения:\n" -#: help.c:426 +#: help.c:432 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3714,7 +3891,7 @@ msgstr "" " или \\pset ИМЯ [ЗНАЧЕНИЕ] в приглашении psql\n" "\n" -#: help.c:428 +#: help.c:434 #, c-format msgid "" " border\n" @@ -3723,7 +3900,7 @@ msgstr "" " border\n" " стиль границы (число)\n" -#: help.c:430 +#: help.c:436 #, c-format msgid "" " columns\n" @@ -3732,7 +3909,7 @@ msgstr "" " columns\n" " целевая ширина для формата с переносом\n" -#: help.c:432 +#: help.c:438 #, c-format msgid "" " expanded (or x)\n" @@ -3741,7 +3918,7 @@ msgstr "" " expanded (или x)\n" " расширенный вывод [on (вкл.), off (выкл.), auto (авто)]\n" -#: help.c:434 +#: help.c:440 #, c-format msgid "" " fieldsep\n" @@ -3750,7 +3927,7 @@ msgstr "" " fieldsep\n" " разделитель полей для неформатированного вывода (по умолчанию \"%s\")\n" -#: help.c:437 +#: help.c:443 #, c-format msgid "" " fieldsep_zero\n" @@ -3759,7 +3936,7 @@ msgstr "" " fieldsep_zero\n" " устанавливает ноль разделителем полей при неформатированном выводе\n" -#: help.c:439 +#: help.c:445 #, c-format msgid "" " footer\n" @@ -3768,7 +3945,7 @@ msgstr "" " footer\n" " включает или выключает вывод подписей таблицы [on (вкл.), off (выкл.)]\n" -#: help.c:441 +#: help.c:447 #, c-format msgid "" " format\n" @@ -3779,7 +3956,7 @@ msgstr "" "\n" " aligned (выровненный), wrapped (с переносом), html, asciidoc, ...]\n" -#: help.c:443 +#: help.c:449 #, c-format msgid "" " linestyle\n" @@ -3788,7 +3965,7 @@ msgstr "" " linestyle\n" " задаёт стиль рисования линий границы [ascii, old-ascii, unicode]\n" -#: help.c:445 +#: help.c:451 #, c-format msgid "" " null\n" @@ -3797,7 +3974,7 @@ msgstr "" " null\n" " устанавливает строку, выводимую вместо значения NULL\n" -#: help.c:447 +#: help.c:453 #, c-format msgid "" " numericlocale\n" @@ -3807,7 +3984,7 @@ msgstr "" " numericlocale\n" " отключает вывод заданного локалью разделителя группы цифр\n" -#: help.c:449 +#: help.c:455 #, c-format msgid "" " pager\n" @@ -3817,7 +3994,7 @@ msgstr "" " определяет, используется ли внешний постраничник\n" " [yes (да), no (нет), always (всегда)]\n" -#: help.c:451 +#: help.c:457 #, c-format msgid "" " recordsep\n" @@ -3826,7 +4003,7 @@ msgstr "" " recordsep\n" " разделитель записей (строк) при неформатированном выводе\n" -#: help.c:453 +#: help.c:459 #, c-format msgid "" " recordsep_zero\n" @@ -3835,7 +4012,7 @@ msgstr "" " recordsep_zero\n" " устанавливает ноль разделителем записей при неформатированном выводе\n" -#: help.c:455 +#: help.c:461 #, c-format msgid "" " tableattr (or T)\n" @@ -3846,7 +4023,7 @@ msgstr "" " задаёт атрибуты для тега table в формате html или пропорциональные\n" " ширины столбцов для выровненных влево данных, в формате latex-longtable\n" -#: help.c:458 +#: help.c:464 #, c-format msgid "" " title\n" @@ -3855,7 +4032,7 @@ msgstr "" " title\n" " задаёт заголовок таблицы для последовательно печатаемых таблиц\n" -#: help.c:460 +#: help.c:466 #, c-format msgid "" " tuples_only\n" @@ -3864,7 +4041,7 @@ msgstr "" " tuples_only\n" " если установлено, выводятся только непосредственно табличные данные\n" -#: help.c:462 +#: help.c:468 #, c-format msgid "" " unicode_border_linestyle\n" @@ -3878,7 +4055,7 @@ msgstr "" " задаёт стиль рисуемых линий Unicode [single (одинарные), double " "(двойные)]\n" -#: help.c:467 +#: help.c:473 #, c-format msgid "" "\n" @@ -3887,7 +4064,7 @@ msgstr "" "\n" "Переменные окружения:\n" -#: help.c:471 +#: help.c:477 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -3898,7 +4075,7 @@ msgstr "" " или \\setenv ИМЯ [ЗНАЧЕНИЕ] в приглашении psql\n" "\n" -#: help.c:473 +#: help.c:479 #, c-format msgid "" " set NAME=VALUE\n" @@ -3911,7 +4088,7 @@ msgstr "" " или \\setenv ИМЯ ЗНАЧЕНИЕ в приглашении psql\n" "\n" -#: help.c:476 +#: help.c:482 #, c-format msgid "" " COLUMNS\n" @@ -3920,7 +4097,7 @@ msgstr "" " COLUMNS\n" " число столбцов для форматирования с переносом\n" -#: help.c:478 +#: help.c:484 #, c-format msgid "" " PGAPPNAME\n" @@ -3929,7 +4106,7 @@ msgstr "" " PGAPPNAME\n" " синоним параметра подключения application_name\n" -#: help.c:480 +#: help.c:486 #, c-format msgid "" " PGDATABASE\n" @@ -3938,7 +4115,7 @@ msgstr "" " PGDATABASE\n" " синоним параметра подключения dbname\n" -#: help.c:482 +#: help.c:488 #, c-format msgid "" " PGHOST\n" @@ -3947,7 +4124,7 @@ msgstr "" " PGHOST\n" " синоним параметра подключения host\n" -#: help.c:484 +#: help.c:490 #, c-format msgid "" " PGPASSWORD\n" @@ -3956,7 +4133,7 @@ msgstr "" " PGPASSWORD\n" " пароль для подключения (использовать не рекомендуется)\n" -#: help.c:486 +#: help.c:492 #, c-format msgid "" " PGPASSFILE\n" @@ -3965,7 +4142,7 @@ msgstr "" " PGPASSFILE\n" " имя файла с паролем\n" -#: help.c:488 +#: help.c:494 #, c-format msgid "" " PGPORT\n" @@ -3974,7 +4151,7 @@ msgstr "" " PGPORT\n" " синоним параметра подключения port\n" -#: help.c:490 +#: help.c:496 #, c-format msgid "" " PGUSER\n" @@ -3983,7 +4160,7 @@ msgstr "" " PGUSER\n" " синоним параметра подключения user\n" -#: help.c:492 +#: help.c:498 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" @@ -3992,7 +4169,7 @@ msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" " редактор, вызываемый командами \\e, \\ef и \\ev\n" -#: help.c:494 +#: help.c:500 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" @@ -4001,7 +4178,7 @@ msgstr "" " PSQL_EDITOR_LINENUMBER_ARG\n" " определяет способ передачи номера строки при вызове редактора\n" -#: help.c:496 +#: help.c:502 #, c-format msgid "" " PSQL_HISTORY\n" @@ -4010,7 +4187,7 @@ msgstr "" " PSQL_HISTORY\n" " альтернативное размещение файла с историей команд\n" -#: help.c:498 +#: help.c:504 #, c-format msgid "" " PSQL_PAGER, PAGER\n" @@ -4019,7 +4196,7 @@ msgstr "" " PSQL_PAGER, PAGER\n" " имя программы внешнего постраничника\n" -#: help.c:500 +#: help.c:506 #, c-format msgid "" " PSQLRC\n" @@ -4028,7 +4205,7 @@ msgstr "" " PSQLRC\n" " альтернативное размещение пользовательского файла .psqlrc\n" -#: help.c:502 +#: help.c:508 #, c-format msgid "" " SHELL\n" @@ -4037,7 +4214,7 @@ msgstr "" " SHELL\n" " оболочка, вызываемая командой \\!\n" -#: help.c:504 +#: help.c:510 #, c-format msgid "" " TMPDIR\n" @@ -4046,11 +4223,11 @@ msgstr "" " TMPDIR\n" " каталог для временных файлов\n" -#: help.c:548 +#: help.c:555 msgid "Available help:\n" msgstr "Имеющаяся справка:\n" -#: help.c:636 +#: help.c:650 #, c-format msgid "" "Command: %s\n" @@ -4069,7 +4246,7 @@ msgstr "" "URL: %s\n" "\n" -#: help.c:655 +#: help.c:673 #, c-format msgid "" "No help available for \"%s\".\n" @@ -4078,17 +4255,17 @@ msgstr "" "Нет справки по команде \"%s\".\n" "Попробуйте \\h без аргументов и посмотрите, что есть.\n" -#: input.c:218 +#: input.c:217 #, c-format msgid "could not read from input file: %m" msgstr "не удалось прочитать входной файл: %m" -#: input.c:472 input.c:510 +#: input.c:471 input.c:509 #, c-format msgid "could not save history to file \"%s\": %m" msgstr "не удалось сохранить историю в файле \"%s\": %m" -#: input.c:529 +#: input.c:528 #, c-format msgid "history is not supported by this installation" msgstr "в данной среде история не поддерживается" @@ -4121,12 +4298,12 @@ msgstr "Большие объекты" msgid "\\if: escaped" msgstr "выход из блока \\if" -#: mainloop.c:183 +#: mainloop.c:195 #, c-format msgid "Use \"\\q\" to leave %s.\n" msgstr "Чтобы выйти из %s, введите \"\\q\".\n" -#: mainloop.c:205 +#: mainloop.c:217 msgid "" "The input is a PostgreSQL custom-format dump.\n" "Use the pg_restore command-line client to restore this dump to a database.\n" @@ -4135,22 +4312,22 @@ msgstr "" "Чтобы восстановить базу данных из этого формата, воспользуйтесь программой " "командной строки pg_restore.\n" -#: mainloop.c:282 +#: mainloop.c:298 msgid "Use \\? for help or press control-C to clear the input buffer." msgstr "" "Введите \\? для получения справки или нажмите Control-C для очистки буфера " "ввода." -#: mainloop.c:284 +#: mainloop.c:300 msgid "Use \\? for help." msgstr "Введите \\? для получения справки." -#: mainloop.c:288 +#: mainloop.c:304 msgid "You are using psql, the command-line interface to PostgreSQL." msgstr "Вы используете psql - интерфейс командной строки к PostgreSQL." # skip-rule: copyright -#: mainloop.c:289 +#: mainloop.c:305 #, c-format msgid "" "Type: \\copyright for distribution terms\n" @@ -4165,26 +4342,26 @@ msgstr "" " \\g или ; в конце строки - выполнение запроса\n" " \\q - выход\n" -#: mainloop.c:313 +#: mainloop.c:329 msgid "Use \\q to quit." msgstr "Введите \\q для выхода." -#: mainloop.c:316 mainloop.c:340 +#: mainloop.c:332 mainloop.c:356 msgid "Use control-D to quit." msgstr "Нажмите Control-D для выхода." -#: mainloop.c:318 mainloop.c:342 +#: mainloop.c:334 mainloop.c:358 msgid "Use control-C to quit." msgstr "Нажмите Control-C для выхода." -#: mainloop.c:449 mainloop.c:591 +#: mainloop.c:465 mainloop.c:613 #, c-format msgid "query ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "" "запрос игнорируется; добавьте \\endif или нажмите Ctrl-C для завершения " "текущего блока \\if" -#: mainloop.c:609 +#: mainloop.c:631 #, c-format msgid "reached EOF without finding closing \\endif(s)" msgstr "в закончившемся потоке команд не хватает \\endif" @@ -4220,48 +4397,48 @@ msgstr "%s: нехватка памяти" #: sql_help.c:985 sql_help.c:990 sql_help.c:995 sql_help.c:1014 sql_help.c:1025 #: sql_help.c:1027 sql_help.c:1046 sql_help.c:1056 sql_help.c:1058 #: sql_help.c:1060 sql_help.c:1072 sql_help.c:1076 sql_help.c:1078 -#: sql_help.c:1089 sql_help.c:1091 sql_help.c:1093 sql_help.c:1109 -#: sql_help.c:1111 sql_help.c:1115 sql_help.c:1118 sql_help.c:1119 -#: sql_help.c:1120 sql_help.c:1123 sql_help.c:1125 sql_help.c:1258 -#: sql_help.c:1260 sql_help.c:1263 sql_help.c:1266 sql_help.c:1268 -#: sql_help.c:1270 sql_help.c:1273 sql_help.c:1276 sql_help.c:1386 -#: sql_help.c:1388 sql_help.c:1390 sql_help.c:1393 sql_help.c:1414 -#: sql_help.c:1417 sql_help.c:1420 sql_help.c:1423 sql_help.c:1427 -#: sql_help.c:1429 sql_help.c:1431 sql_help.c:1433 sql_help.c:1447 -#: sql_help.c:1450 sql_help.c:1452 sql_help.c:1454 sql_help.c:1464 -#: sql_help.c:1466 sql_help.c:1476 sql_help.c:1478 sql_help.c:1488 -#: sql_help.c:1491 sql_help.c:1513 sql_help.c:1515 sql_help.c:1517 -#: sql_help.c:1520 sql_help.c:1522 sql_help.c:1524 sql_help.c:1527 -#: sql_help.c:1577 sql_help.c:1619 sql_help.c:1622 sql_help.c:1624 -#: sql_help.c:1626 sql_help.c:1628 sql_help.c:1630 sql_help.c:1633 -#: sql_help.c:1683 sql_help.c:1699 sql_help.c:1920 sql_help.c:1989 -#: sql_help.c:2008 sql_help.c:2021 sql_help.c:2078 sql_help.c:2085 -#: sql_help.c:2095 sql_help.c:2115 sql_help.c:2140 sql_help.c:2158 -#: sql_help.c:2187 sql_help.c:2282 sql_help.c:2324 sql_help.c:2347 -#: sql_help.c:2368 sql_help.c:2369 sql_help.c:2406 sql_help.c:2426 -#: sql_help.c:2448 sql_help.c:2462 sql_help.c:2482 sql_help.c:2505 -#: sql_help.c:2535 sql_help.c:2560 sql_help.c:2606 sql_help.c:2884 -#: sql_help.c:2897 sql_help.c:2914 sql_help.c:2930 sql_help.c:2970 -#: sql_help.c:3022 sql_help.c:3026 sql_help.c:3028 sql_help.c:3034 -#: sql_help.c:3052 sql_help.c:3079 sql_help.c:3114 sql_help.c:3126 -#: sql_help.c:3135 sql_help.c:3179 sql_help.c:3193 sql_help.c:3221 -#: sql_help.c:3229 sql_help.c:3237 sql_help.c:3245 sql_help.c:3253 -#: sql_help.c:3261 sql_help.c:3269 sql_help.c:3277 sql_help.c:3286 -#: sql_help.c:3297 sql_help.c:3305 sql_help.c:3313 sql_help.c:3321 -#: sql_help.c:3329 sql_help.c:3339 sql_help.c:3348 sql_help.c:3357 -#: sql_help.c:3365 sql_help.c:3375 sql_help.c:3386 sql_help.c:3394 -#: sql_help.c:3403 sql_help.c:3414 sql_help.c:3423 sql_help.c:3431 -#: sql_help.c:3439 sql_help.c:3447 sql_help.c:3455 sql_help.c:3463 -#: sql_help.c:3471 sql_help.c:3479 sql_help.c:3487 sql_help.c:3495 -#: sql_help.c:3503 sql_help.c:3520 sql_help.c:3529 sql_help.c:3537 -#: sql_help.c:3554 sql_help.c:3569 sql_help.c:3839 sql_help.c:3890 -#: sql_help.c:3919 sql_help.c:3927 sql_help.c:4360 sql_help.c:4408 -#: sql_help.c:4549 +#: sql_help.c:1090 sql_help.c:1092 sql_help.c:1094 sql_help.c:1096 +#: sql_help.c:1112 sql_help.c:1114 sql_help.c:1118 sql_help.c:1121 +#: sql_help.c:1122 sql_help.c:1123 sql_help.c:1126 sql_help.c:1128 +#: sql_help.c:1262 sql_help.c:1264 sql_help.c:1267 sql_help.c:1270 +#: sql_help.c:1272 sql_help.c:1274 sql_help.c:1277 sql_help.c:1280 +#: sql_help.c:1391 sql_help.c:1393 sql_help.c:1395 sql_help.c:1398 +#: sql_help.c:1419 sql_help.c:1422 sql_help.c:1425 sql_help.c:1428 +#: sql_help.c:1432 sql_help.c:1434 sql_help.c:1436 sql_help.c:1438 +#: sql_help.c:1452 sql_help.c:1455 sql_help.c:1457 sql_help.c:1459 +#: sql_help.c:1469 sql_help.c:1471 sql_help.c:1481 sql_help.c:1483 +#: sql_help.c:1493 sql_help.c:1496 sql_help.c:1519 sql_help.c:1521 +#: sql_help.c:1523 sql_help.c:1525 sql_help.c:1528 sql_help.c:1530 +#: sql_help.c:1533 sql_help.c:1536 sql_help.c:1586 sql_help.c:1629 +#: sql_help.c:1632 sql_help.c:1634 sql_help.c:1636 sql_help.c:1639 +#: sql_help.c:1641 sql_help.c:1643 sql_help.c:1646 sql_help.c:1696 +#: sql_help.c:1712 sql_help.c:1933 sql_help.c:2002 sql_help.c:2021 +#: sql_help.c:2034 sql_help.c:2091 sql_help.c:2098 sql_help.c:2108 +#: sql_help.c:2129 sql_help.c:2155 sql_help.c:2173 sql_help.c:2200 +#: sql_help.c:2295 sql_help.c:2340 sql_help.c:2364 sql_help.c:2387 +#: sql_help.c:2391 sql_help.c:2425 sql_help.c:2445 sql_help.c:2467 +#: sql_help.c:2481 sql_help.c:2501 sql_help.c:2524 sql_help.c:2554 +#: sql_help.c:2579 sql_help.c:2625 sql_help.c:2903 sql_help.c:2916 +#: sql_help.c:2933 sql_help.c:2949 sql_help.c:2989 sql_help.c:3041 +#: sql_help.c:3045 sql_help.c:3047 sql_help.c:3053 sql_help.c:3071 +#: sql_help.c:3098 sql_help.c:3133 sql_help.c:3145 sql_help.c:3154 +#: sql_help.c:3198 sql_help.c:3212 sql_help.c:3240 sql_help.c:3248 +#: sql_help.c:3260 sql_help.c:3270 sql_help.c:3278 sql_help.c:3286 +#: sql_help.c:3294 sql_help.c:3302 sql_help.c:3311 sql_help.c:3322 +#: sql_help.c:3330 sql_help.c:3338 sql_help.c:3346 sql_help.c:3354 +#: sql_help.c:3364 sql_help.c:3373 sql_help.c:3382 sql_help.c:3390 +#: sql_help.c:3400 sql_help.c:3411 sql_help.c:3419 sql_help.c:3428 +#: sql_help.c:3439 sql_help.c:3448 sql_help.c:3456 sql_help.c:3464 +#: sql_help.c:3472 sql_help.c:3480 sql_help.c:3488 sql_help.c:3496 +#: sql_help.c:3504 sql_help.c:3512 sql_help.c:3520 sql_help.c:3528 +#: sql_help.c:3545 sql_help.c:3554 sql_help.c:3562 sql_help.c:3579 +#: sql_help.c:3594 sql_help.c:3869 sql_help.c:3920 sql_help.c:3949 +#: sql_help.c:3962 sql_help.c:4407 sql_help.c:4455 sql_help.c:4596 msgid "name" msgstr "имя" -#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1770 -#: sql_help.c:3194 sql_help.c:4146 +#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1783 +#: sql_help.c:3213 sql_help.c:4193 msgid "aggregate_signature" msgstr "сигнатура_агр_функции" @@ -4270,9 +4447,9 @@ msgstr "сигнатура_агр_функции" #: sql_help.c:589 sql_help.c:616 sql_help.c:666 sql_help.c:731 sql_help.c:786 #: sql_help.c:807 sql_help.c:846 sql_help.c:891 sql_help.c:932 sql_help.c:984 #: sql_help.c:1016 sql_help.c:1026 sql_help.c:1059 sql_help.c:1079 -#: sql_help.c:1092 sql_help.c:1126 sql_help.c:1267 sql_help.c:1387 -#: sql_help.c:1430 sql_help.c:1451 sql_help.c:1465 sql_help.c:1477 -#: sql_help.c:1490 sql_help.c:1521 sql_help.c:1578 sql_help.c:1627 +#: sql_help.c:1093 sql_help.c:1129 sql_help.c:1271 sql_help.c:1392 +#: sql_help.c:1435 sql_help.c:1456 sql_help.c:1470 sql_help.c:1482 +#: sql_help.c:1495 sql_help.c:1522 sql_help.c:1587 sql_help.c:1640 msgid "new_name" msgstr "новое_имя" @@ -4280,21 +4457,21 @@ msgstr "новое_имя" #: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:618 #: sql_help.c:627 sql_help.c:685 sql_help.c:705 sql_help.c:734 sql_help.c:789 #: sql_help.c:851 sql_help.c:889 sql_help.c:989 sql_help.c:1028 sql_help.c:1057 -#: sql_help.c:1077 sql_help.c:1090 sql_help.c:1124 sql_help.c:1327 -#: sql_help.c:1389 sql_help.c:1432 sql_help.c:1453 sql_help.c:1516 -#: sql_help.c:1625 sql_help.c:2870 +#: sql_help.c:1077 sql_help.c:1091 sql_help.c:1127 sql_help.c:1332 +#: sql_help.c:1394 sql_help.c:1437 sql_help.c:1458 sql_help.c:1520 +#: sql_help.c:1635 sql_help.c:2889 msgid "new_owner" msgstr "новый_владелец" #: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:252 sql_help.c:319 #: sql_help.c:448 sql_help.c:534 sql_help.c:668 sql_help.c:709 sql_help.c:737 -#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1094 -#: sql_help.c:1269 sql_help.c:1434 sql_help.c:1455 sql_help.c:1467 -#: sql_help.c:1479 sql_help.c:1523 sql_help.c:1629 +#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1095 +#: sql_help.c:1273 sql_help.c:1439 sql_help.c:1460 sql_help.c:1472 +#: sql_help.c:1484 sql_help.c:1524 sql_help.c:1642 msgid "new_schema" msgstr "новая_схема" -#: sql_help.c:44 sql_help.c:1834 sql_help.c:3195 sql_help.c:4175 +#: sql_help.c:44 sql_help.c:1847 sql_help.c:3214 sql_help.c:4222 msgid "where aggregate_signature is:" msgstr "где сигнатура_агр_функции:" @@ -4302,13 +4479,13 @@ msgstr "где сигнатура_агр_функции:" #: sql_help.c:354 sql_help.c:370 sql_help.c:373 sql_help.c:376 sql_help.c:516 #: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:838 #: sql_help.c:843 sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:976 -#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1788 -#: sql_help.c:1805 sql_help.c:1811 sql_help.c:1835 sql_help.c:1838 -#: sql_help.c:1841 sql_help.c:1990 sql_help.c:2009 sql_help.c:2012 -#: sql_help.c:2283 sql_help.c:2483 sql_help.c:3196 sql_help.c:3199 -#: sql_help.c:3202 sql_help.c:3287 sql_help.c:3376 sql_help.c:3404 -#: sql_help.c:3724 sql_help.c:4057 sql_help.c:4152 sql_help.c:4159 -#: sql_help.c:4165 sql_help.c:4176 sql_help.c:4179 sql_help.c:4182 +#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1801 +#: sql_help.c:1818 sql_help.c:1824 sql_help.c:1848 sql_help.c:1851 +#: sql_help.c:1854 sql_help.c:2003 sql_help.c:2022 sql_help.c:2025 +#: sql_help.c:2296 sql_help.c:2502 sql_help.c:3215 sql_help.c:3218 +#: sql_help.c:3221 sql_help.c:3312 sql_help.c:3401 sql_help.c:3429 +#: sql_help.c:3753 sql_help.c:4101 sql_help.c:4199 sql_help.c:4206 +#: sql_help.c:4212 sql_help.c:4223 sql_help.c:4226 sql_help.c:4229 msgid "argmode" msgstr "режим_аргумента" @@ -4316,13 +4493,13 @@ msgstr "режим_аргумента" #: sql_help.c:355 sql_help.c:371 sql_help.c:374 sql_help.c:377 sql_help.c:517 #: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:839 #: sql_help.c:844 sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:977 -#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1789 -#: sql_help.c:1806 sql_help.c:1812 sql_help.c:1836 sql_help.c:1839 -#: sql_help.c:1842 sql_help.c:1991 sql_help.c:2010 sql_help.c:2013 -#: sql_help.c:2284 sql_help.c:2484 sql_help.c:3197 sql_help.c:3200 -#: sql_help.c:3203 sql_help.c:3288 sql_help.c:3377 sql_help.c:3405 -#: sql_help.c:4153 sql_help.c:4160 sql_help.c:4166 sql_help.c:4177 -#: sql_help.c:4180 sql_help.c:4183 +#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1802 +#: sql_help.c:1819 sql_help.c:1825 sql_help.c:1849 sql_help.c:1852 +#: sql_help.c:1855 sql_help.c:2004 sql_help.c:2023 sql_help.c:2026 +#: sql_help.c:2297 sql_help.c:2503 sql_help.c:3216 sql_help.c:3219 +#: sql_help.c:3222 sql_help.c:3313 sql_help.c:3402 sql_help.c:3430 +#: sql_help.c:4200 sql_help.c:4207 sql_help.c:4213 sql_help.c:4224 +#: sql_help.c:4227 sql_help.c:4230 msgid "argname" msgstr "имя_аргумента" @@ -4330,67 +4507,69 @@ msgstr "имя_аргумента" #: sql_help.c:356 sql_help.c:372 sql_help.c:375 sql_help.c:378 sql_help.c:518 #: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:840 #: sql_help.c:845 sql_help.c:850 sql_help.c:855 sql_help.c:860 sql_help.c:978 -#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1790 -#: sql_help.c:1807 sql_help.c:1813 sql_help.c:1837 sql_help.c:1840 -#: sql_help.c:1843 sql_help.c:2285 sql_help.c:2485 sql_help.c:3198 -#: sql_help.c:3201 sql_help.c:3204 sql_help.c:3289 sql_help.c:3378 -#: sql_help.c:3406 sql_help.c:4154 sql_help.c:4161 sql_help.c:4167 -#: sql_help.c:4178 sql_help.c:4181 sql_help.c:4184 +#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1803 +#: sql_help.c:1820 sql_help.c:1826 sql_help.c:1850 sql_help.c:1853 +#: sql_help.c:1856 sql_help.c:2298 sql_help.c:2504 sql_help.c:3217 +#: sql_help.c:3220 sql_help.c:3223 sql_help.c:3314 sql_help.c:3403 +#: sql_help.c:3431 sql_help.c:4201 sql_help.c:4208 sql_help.c:4214 +#: sql_help.c:4225 sql_help.c:4228 sql_help.c:4231 msgid "argtype" msgstr "тип_аргумента" #: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:926 -#: sql_help.c:1074 sql_help.c:1448 sql_help.c:1572 sql_help.c:1604 -#: sql_help.c:1652 sql_help.c:1891 sql_help.c:1898 sql_help.c:2190 -#: sql_help.c:2232 sql_help.c:2239 sql_help.c:2248 sql_help.c:2325 -#: sql_help.c:2536 sql_help.c:2628 sql_help.c:2899 sql_help.c:3080 -#: sql_help.c:3102 sql_help.c:3590 sql_help.c:3758 sql_help.c:4610 +#: sql_help.c:1074 sql_help.c:1453 sql_help.c:1581 sql_help.c:1613 +#: sql_help.c:1665 sql_help.c:1904 sql_help.c:1911 sql_help.c:2203 +#: sql_help.c:2245 sql_help.c:2252 sql_help.c:2261 sql_help.c:2341 +#: sql_help.c:2555 sql_help.c:2647 sql_help.c:2918 sql_help.c:3099 +#: sql_help.c:3121 sql_help.c:3261 sql_help.c:3616 sql_help.c:3788 +#: sql_help.c:3961 sql_help.c:4658 msgid "option" msgstr "параметр" -#: sql_help.c:113 sql_help.c:927 sql_help.c:1573 sql_help.c:2326 -#: sql_help.c:2537 sql_help.c:3081 +#: sql_help.c:113 sql_help.c:927 sql_help.c:1582 sql_help.c:2342 +#: sql_help.c:2556 sql_help.c:3100 sql_help.c:3262 msgid "where option can be:" msgstr "где допустимые параметры:" -#: sql_help.c:114 sql_help.c:2122 +#: sql_help.c:114 sql_help.c:2137 msgid "allowconn" msgstr "разр_подключения" -#: sql_help.c:115 sql_help.c:928 sql_help.c:1574 sql_help.c:2123 -#: sql_help.c:2538 sql_help.c:3082 +#: sql_help.c:115 sql_help.c:928 sql_help.c:1583 sql_help.c:2138 +#: sql_help.c:2343 sql_help.c:2557 sql_help.c:3101 msgid "connlimit" msgstr "предел_подключений" -#: sql_help.c:116 sql_help.c:2124 +#: sql_help.c:116 sql_help.c:2139 msgid "istemplate" msgstr "это_шаблон" -#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1272 sql_help.c:1320 +#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1276 sql_help.c:1325 msgid "new_tablespace" msgstr "новое_табл_пространство" #: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:544 sql_help.c:546 #: sql_help.c:547 sql_help.c:863 sql_help.c:865 sql_help.c:866 sql_help.c:935 #: sql_help.c:939 sql_help.c:942 sql_help.c:1003 sql_help.c:1005 -#: sql_help.c:1006 sql_help.c:1137 sql_help.c:1140 sql_help.c:1581 -#: sql_help.c:1585 sql_help.c:1588 sql_help.c:2295 sql_help.c:2489 -#: sql_help.c:3944 sql_help.c:4349 +#: sql_help.c:1006 sql_help.c:1140 sql_help.c:1143 sql_help.c:1590 +#: sql_help.c:1594 sql_help.c:1597 sql_help.c:2308 sql_help.c:2508 +#: sql_help.c:3980 sql_help.c:4396 msgid "configuration_parameter" msgstr "параметр_конфигурации" #: sql_help.c:125 sql_help.c:395 sql_help.c:466 sql_help.c:472 sql_help.c:484 #: sql_help.c:545 sql_help.c:598 sql_help.c:677 sql_help.c:683 sql_help.c:864 #: sql_help.c:887 sql_help.c:936 sql_help.c:1004 sql_help.c:1075 -#: sql_help.c:1114 sql_help.c:1117 sql_help.c:1122 sql_help.c:1138 -#: sql_help.c:1139 sql_help.c:1302 sql_help.c:1322 sql_help.c:1370 -#: sql_help.c:1392 sql_help.c:1449 sql_help.c:1582 sql_help.c:1605 -#: sql_help.c:2191 sql_help.c:2233 sql_help.c:2240 sql_help.c:2249 -#: sql_help.c:2296 sql_help.c:2297 sql_help.c:2356 sql_help.c:2390 -#: sql_help.c:2490 sql_help.c:2491 sql_help.c:2508 sql_help.c:2629 -#: sql_help.c:2659 sql_help.c:2764 sql_help.c:2777 sql_help.c:2791 -#: sql_help.c:2832 sql_help.c:2856 sql_help.c:2873 sql_help.c:2900 -#: sql_help.c:3103 sql_help.c:3759 sql_help.c:4350 sql_help.c:4351 +#: sql_help.c:1117 sql_help.c:1120 sql_help.c:1125 sql_help.c:1141 +#: sql_help.c:1142 sql_help.c:1307 sql_help.c:1327 sql_help.c:1375 +#: sql_help.c:1397 sql_help.c:1454 sql_help.c:1538 sql_help.c:1591 +#: sql_help.c:1614 sql_help.c:2204 sql_help.c:2246 sql_help.c:2253 +#: sql_help.c:2262 sql_help.c:2309 sql_help.c:2310 sql_help.c:2372 +#: sql_help.c:2375 sql_help.c:2409 sql_help.c:2509 sql_help.c:2510 +#: sql_help.c:2527 sql_help.c:2648 sql_help.c:2678 sql_help.c:2783 +#: sql_help.c:2796 sql_help.c:2810 sql_help.c:2851 sql_help.c:2875 +#: sql_help.c:2892 sql_help.c:2919 sql_help.c:3122 sql_help.c:3789 +#: sql_help.c:4397 sql_help.c:4398 msgid "value" msgstr "значение" @@ -4398,9 +4577,9 @@ msgstr "значение" msgid "target_role" msgstr "целевая_роль" -#: sql_help.c:198 sql_help.c:2174 sql_help.c:2584 sql_help.c:2589 -#: sql_help.c:3706 sql_help.c:3713 sql_help.c:3727 sql_help.c:3733 -#: sql_help.c:4039 sql_help.c:4046 sql_help.c:4060 sql_help.c:4066 +#: sql_help.c:198 sql_help.c:2188 sql_help.c:2603 sql_help.c:2608 +#: sql_help.c:3735 sql_help.c:3742 sql_help.c:3756 sql_help.c:3762 +#: sql_help.c:4083 sql_help.c:4090 sql_help.c:4104 sql_help.c:4110 msgid "schema_name" msgstr "имя_схемы" @@ -4415,33 +4594,29 @@ msgstr "где допустимое предложение_GRANT_или_REVOKE:" #: sql_help.c:201 sql_help.c:202 sql_help.c:203 sql_help.c:204 sql_help.c:205 #: sql_help.c:206 sql_help.c:207 sql_help.c:208 sql_help.c:209 sql_help.c:210 #: sql_help.c:569 sql_help.c:605 sql_help.c:670 sql_help.c:810 sql_help.c:946 -#: sql_help.c:1271 sql_help.c:1592 sql_help.c:2329 sql_help.c:2330 -#: sql_help.c:2331 sql_help.c:2332 sql_help.c:2333 sql_help.c:2464 -#: sql_help.c:2541 sql_help.c:2542 sql_help.c:2543 sql_help.c:2544 -#: sql_help.c:2545 sql_help.c:3085 sql_help.c:3086 sql_help.c:3087 -#: sql_help.c:3088 sql_help.c:3089 sql_help.c:3740 sql_help.c:3741 -#: sql_help.c:3742 sql_help.c:4040 sql_help.c:4044 sql_help.c:4047 -#: sql_help.c:4049 sql_help.c:4051 sql_help.c:4053 sql_help.c:4055 -#: sql_help.c:4061 sql_help.c:4063 sql_help.c:4065 sql_help.c:4067 -#: sql_help.c:4069 sql_help.c:4071 sql_help.c:4072 sql_help.c:4073 -#: sql_help.c:4370 +#: sql_help.c:1275 sql_help.c:1601 sql_help.c:2346 sql_help.c:2347 +#: sql_help.c:2348 sql_help.c:2349 sql_help.c:2350 sql_help.c:2483 +#: sql_help.c:2560 sql_help.c:2561 sql_help.c:2562 sql_help.c:2563 +#: sql_help.c:2564 sql_help.c:3104 sql_help.c:3105 sql_help.c:3106 +#: sql_help.c:3107 sql_help.c:3108 sql_help.c:3768 sql_help.c:3772 +#: sql_help.c:4116 sql_help.c:4120 sql_help.c:4417 msgid "role_name" msgstr "имя_роли" -#: sql_help.c:236 sql_help.c:459 sql_help.c:1287 sql_help.c:1289 -#: sql_help.c:1337 sql_help.c:1349 sql_help.c:1374 sql_help.c:1621 -#: sql_help.c:2143 sql_help.c:2147 sql_help.c:2252 sql_help.c:2257 -#: sql_help.c:2351 sql_help.c:2759 sql_help.c:2772 sql_help.c:2786 -#: sql_help.c:2795 sql_help.c:2807 sql_help.c:2836 sql_help.c:3790 -#: sql_help.c:3805 sql_help.c:3807 sql_help.c:4235 sql_help.c:4236 -#: sql_help.c:4245 sql_help.c:4286 sql_help.c:4287 sql_help.c:4288 -#: sql_help.c:4289 sql_help.c:4290 sql_help.c:4291 sql_help.c:4324 -#: sql_help.c:4325 sql_help.c:4330 sql_help.c:4335 sql_help.c:4474 -#: sql_help.c:4475 sql_help.c:4484 sql_help.c:4525 sql_help.c:4526 -#: sql_help.c:4527 sql_help.c:4528 sql_help.c:4529 sql_help.c:4530 -#: sql_help.c:4577 sql_help.c:4579 sql_help.c:4636 sql_help.c:4692 -#: sql_help.c:4693 sql_help.c:4702 sql_help.c:4743 sql_help.c:4744 -#: sql_help.c:4745 sql_help.c:4746 sql_help.c:4747 sql_help.c:4748 +#: sql_help.c:236 sql_help.c:459 sql_help.c:1291 sql_help.c:1293 +#: sql_help.c:1342 sql_help.c:1354 sql_help.c:1379 sql_help.c:1631 +#: sql_help.c:2158 sql_help.c:2162 sql_help.c:2265 sql_help.c:2270 +#: sql_help.c:2368 sql_help.c:2778 sql_help.c:2791 sql_help.c:2805 +#: sql_help.c:2814 sql_help.c:2826 sql_help.c:2855 sql_help.c:3820 +#: sql_help.c:3835 sql_help.c:3837 sql_help.c:4282 sql_help.c:4283 +#: sql_help.c:4292 sql_help.c:4333 sql_help.c:4334 sql_help.c:4335 +#: sql_help.c:4336 sql_help.c:4337 sql_help.c:4338 sql_help.c:4371 +#: sql_help.c:4372 sql_help.c:4377 sql_help.c:4382 sql_help.c:4521 +#: sql_help.c:4522 sql_help.c:4531 sql_help.c:4572 sql_help.c:4573 +#: sql_help.c:4574 sql_help.c:4575 sql_help.c:4576 sql_help.c:4577 +#: sql_help.c:4624 sql_help.c:4626 sql_help.c:4685 sql_help.c:4741 +#: sql_help.c:4742 sql_help.c:4751 sql_help.c:4792 sql_help.c:4793 +#: sql_help.c:4794 sql_help.c:4795 sql_help.c:4796 sql_help.c:4797 msgid "expression" msgstr "выражение" @@ -4450,14 +4625,14 @@ msgid "domain_constraint" msgstr "ограничение_домена" #: sql_help.c:241 sql_help.c:243 sql_help.c:246 sql_help.c:474 sql_help.c:475 -#: sql_help.c:1264 sql_help.c:1308 sql_help.c:1309 sql_help.c:1310 -#: sql_help.c:1336 sql_help.c:1348 sql_help.c:1365 sql_help.c:1776 -#: sql_help.c:1778 sql_help.c:2146 sql_help.c:2251 sql_help.c:2256 -#: sql_help.c:2794 sql_help.c:2806 sql_help.c:3802 +#: sql_help.c:1268 sql_help.c:1313 sql_help.c:1314 sql_help.c:1315 +#: sql_help.c:1341 sql_help.c:1353 sql_help.c:1370 sql_help.c:1789 +#: sql_help.c:1791 sql_help.c:2161 sql_help.c:2264 sql_help.c:2269 +#: sql_help.c:2813 sql_help.c:2825 sql_help.c:3832 msgid "constraint_name" msgstr "имя_ограничения" -#: sql_help.c:244 sql_help.c:1265 +#: sql_help.c:244 sql_help.c:1269 msgid "new_constraint_name" msgstr "имя_нового_ограничения" @@ -4477,83 +4652,83 @@ msgstr "где элемент_объект:" #: sql_help.c:334 sql_help.c:335 sql_help.c:340 sql_help.c:344 sql_help.c:346 #: sql_help.c:348 sql_help.c:357 sql_help.c:358 sql_help.c:359 sql_help.c:360 #: sql_help.c:361 sql_help.c:362 sql_help.c:363 sql_help.c:364 sql_help.c:367 -#: sql_help.c:368 sql_help.c:1768 sql_help.c:1773 sql_help.c:1780 -#: sql_help.c:1781 sql_help.c:1782 sql_help.c:1783 sql_help.c:1784 -#: sql_help.c:1785 sql_help.c:1786 sql_help.c:1791 sql_help.c:1793 -#: sql_help.c:1797 sql_help.c:1799 sql_help.c:1803 sql_help.c:1808 -#: sql_help.c:1809 sql_help.c:1816 sql_help.c:1817 sql_help.c:1818 -#: sql_help.c:1819 sql_help.c:1820 sql_help.c:1821 sql_help.c:1822 -#: sql_help.c:1823 sql_help.c:1824 sql_help.c:1825 sql_help.c:1826 -#: sql_help.c:1831 sql_help.c:1832 sql_help.c:4142 sql_help.c:4147 -#: sql_help.c:4148 sql_help.c:4149 sql_help.c:4150 sql_help.c:4156 -#: sql_help.c:4157 sql_help.c:4162 sql_help.c:4163 sql_help.c:4168 -#: sql_help.c:4169 sql_help.c:4170 sql_help.c:4171 sql_help.c:4172 -#: sql_help.c:4173 +#: sql_help.c:368 sql_help.c:1781 sql_help.c:1786 sql_help.c:1793 +#: sql_help.c:1794 sql_help.c:1795 sql_help.c:1796 sql_help.c:1797 +#: sql_help.c:1798 sql_help.c:1799 sql_help.c:1804 sql_help.c:1806 +#: sql_help.c:1810 sql_help.c:1812 sql_help.c:1816 sql_help.c:1821 +#: sql_help.c:1822 sql_help.c:1829 sql_help.c:1830 sql_help.c:1831 +#: sql_help.c:1832 sql_help.c:1833 sql_help.c:1834 sql_help.c:1835 +#: sql_help.c:1836 sql_help.c:1837 sql_help.c:1838 sql_help.c:1839 +#: sql_help.c:1844 sql_help.c:1845 sql_help.c:4189 sql_help.c:4194 +#: sql_help.c:4195 sql_help.c:4196 sql_help.c:4197 sql_help.c:4203 +#: sql_help.c:4204 sql_help.c:4209 sql_help.c:4210 sql_help.c:4215 +#: sql_help.c:4216 sql_help.c:4217 sql_help.c:4218 sql_help.c:4219 +#: sql_help.c:4220 msgid "object_name" msgstr "имя_объекта" # well-spelled: агр -#: sql_help.c:326 sql_help.c:1769 sql_help.c:4145 +#: sql_help.c:326 sql_help.c:1782 sql_help.c:4192 msgid "aggregate_name" msgstr "имя_агр_функции" -#: sql_help.c:328 sql_help.c:1771 sql_help.c:2055 sql_help.c:2059 -#: sql_help.c:2061 sql_help.c:3212 +#: sql_help.c:328 sql_help.c:1784 sql_help.c:2068 sql_help.c:2072 +#: sql_help.c:2074 sql_help.c:3231 msgid "source_type" msgstr "исходный_тип" -#: sql_help.c:329 sql_help.c:1772 sql_help.c:2056 sql_help.c:2060 -#: sql_help.c:2062 sql_help.c:3213 +#: sql_help.c:329 sql_help.c:1785 sql_help.c:2069 sql_help.c:2073 +#: sql_help.c:2075 sql_help.c:3232 msgid "target_type" msgstr "целевой_тип" -#: sql_help.c:336 sql_help.c:774 sql_help.c:1787 sql_help.c:2057 -#: sql_help.c:2098 sql_help.c:2161 sql_help.c:2407 sql_help.c:2438 -#: sql_help.c:2976 sql_help.c:4056 sql_help.c:4151 sql_help.c:4264 -#: sql_help.c:4268 sql_help.c:4272 sql_help.c:4275 sql_help.c:4503 -#: sql_help.c:4507 sql_help.c:4511 sql_help.c:4514 sql_help.c:4721 -#: sql_help.c:4725 sql_help.c:4729 sql_help.c:4732 +#: sql_help.c:336 sql_help.c:774 sql_help.c:1800 sql_help.c:2070 +#: sql_help.c:2111 sql_help.c:2176 sql_help.c:2426 sql_help.c:2457 +#: sql_help.c:2995 sql_help.c:4100 sql_help.c:4198 sql_help.c:4311 +#: sql_help.c:4315 sql_help.c:4319 sql_help.c:4322 sql_help.c:4550 +#: sql_help.c:4554 sql_help.c:4558 sql_help.c:4561 sql_help.c:4770 +#: sql_help.c:4774 sql_help.c:4778 sql_help.c:4781 msgid "function_name" msgstr "имя_функции" -#: sql_help.c:341 sql_help.c:767 sql_help.c:1794 sql_help.c:2431 +#: sql_help.c:341 sql_help.c:767 sql_help.c:1807 sql_help.c:2450 msgid "operator_name" msgstr "имя_оператора" -#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1795 -#: sql_help.c:2408 sql_help.c:3330 +#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1808 +#: sql_help.c:2427 sql_help.c:3355 msgid "left_type" msgstr "тип_слева" -#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1796 -#: sql_help.c:2409 sql_help.c:3331 +#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1809 +#: sql_help.c:2428 sql_help.c:3356 msgid "right_type" msgstr "тип_справа" #: sql_help.c:345 sql_help.c:347 sql_help.c:730 sql_help.c:733 sql_help.c:736 #: sql_help.c:765 sql_help.c:777 sql_help.c:785 sql_help.c:788 sql_help.c:791 -#: sql_help.c:1354 sql_help.c:1798 sql_help.c:1800 sql_help.c:2428 -#: sql_help.c:2449 sql_help.c:2812 sql_help.c:3340 sql_help.c:3349 +#: sql_help.c:1359 sql_help.c:1811 sql_help.c:1813 sql_help.c:2447 +#: sql_help.c:2468 sql_help.c:2831 sql_help.c:3365 sql_help.c:3374 msgid "index_method" msgstr "метод_индекса" -#: sql_help.c:349 sql_help.c:1804 sql_help.c:4158 +#: sql_help.c:349 sql_help.c:1817 sql_help.c:4205 msgid "procedure_name" msgstr "имя_процедуры" -#: sql_help.c:353 sql_help.c:1810 sql_help.c:3723 sql_help.c:4164 +#: sql_help.c:353 sql_help.c:1823 sql_help.c:3752 sql_help.c:4211 msgid "routine_name" msgstr "имя_подпрограммы" -#: sql_help.c:365 sql_help.c:1326 sql_help.c:1827 sql_help.c:2291 -#: sql_help.c:2488 sql_help.c:2767 sql_help.c:2943 sql_help.c:3511 -#: sql_help.c:3737 sql_help.c:4070 +#: sql_help.c:365 sql_help.c:1331 sql_help.c:1840 sql_help.c:2304 +#: sql_help.c:2507 sql_help.c:2786 sql_help.c:2962 sql_help.c:3536 +#: sql_help.c:3766 sql_help.c:4114 msgid "type_name" msgstr "имя_типа" -#: sql_help.c:366 sql_help.c:1828 sql_help.c:2290 sql_help.c:2487 -#: sql_help.c:2944 sql_help.c:3170 sql_help.c:3512 sql_help.c:3729 -#: sql_help.c:4062 +#: sql_help.c:366 sql_help.c:1841 sql_help.c:2303 sql_help.c:2506 +#: sql_help.c:2963 sql_help.c:3189 sql_help.c:3537 sql_help.c:3758 +#: sql_help.c:4106 msgid "lang_name" msgstr "имя_языка" @@ -4561,129 +4736,134 @@ msgstr "имя_языка" msgid "and aggregate_signature is:" msgstr "и сигнатура_агр_функции:" -#: sql_help.c:392 sql_help.c:1922 sql_help.c:2188 +#: sql_help.c:392 sql_help.c:1935 sql_help.c:2201 msgid "handler_function" msgstr "функция_обработчик" -#: sql_help.c:393 sql_help.c:2189 +#: sql_help.c:393 sql_help.c:2202 msgid "validator_function" msgstr "функция_проверки" #: sql_help.c:441 sql_help.c:519 sql_help.c:659 sql_help.c:841 sql_help.c:979 -#: sql_help.c:1259 sql_help.c:1514 +#: sql_help.c:1263 sql_help.c:1529 msgid "action" msgstr "действие" #: sql_help.c:443 sql_help.c:450 sql_help.c:454 sql_help.c:455 sql_help.c:458 #: sql_help.c:460 sql_help.c:461 sql_help.c:462 sql_help.c:464 sql_help.c:467 #: sql_help.c:469 sql_help.c:470 sql_help.c:663 sql_help.c:673 sql_help.c:675 -#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1261 -#: sql_help.c:1279 sql_help.c:1283 sql_help.c:1284 sql_help.c:1288 -#: sql_help.c:1290 sql_help.c:1291 sql_help.c:1292 sql_help.c:1294 -#: sql_help.c:1297 sql_help.c:1298 sql_help.c:1300 sql_help.c:1303 -#: sql_help.c:1305 sql_help.c:1350 sql_help.c:1352 sql_help.c:1359 -#: sql_help.c:1368 sql_help.c:1373 sql_help.c:1620 sql_help.c:1623 -#: sql_help.c:1660 sql_help.c:1775 sql_help.c:1888 sql_help.c:1894 -#: sql_help.c:1907 sql_help.c:1908 sql_help.c:1909 sql_help.c:2230 -#: sql_help.c:2243 sql_help.c:2288 sql_help.c:2350 sql_help.c:2354 -#: sql_help.c:2387 sql_help.c:2614 sql_help.c:2642 sql_help.c:2643 -#: sql_help.c:2750 sql_help.c:2758 sql_help.c:2768 sql_help.c:2771 -#: sql_help.c:2781 sql_help.c:2785 sql_help.c:2808 sql_help.c:2810 -#: sql_help.c:2817 sql_help.c:2830 sql_help.c:2835 sql_help.c:2853 -#: sql_help.c:2979 sql_help.c:3115 sql_help.c:3708 sql_help.c:3709 -#: sql_help.c:3789 sql_help.c:3804 sql_help.c:3806 sql_help.c:3808 -#: sql_help.c:4041 sql_help.c:4042 sql_help.c:4144 sql_help.c:4295 -#: sql_help.c:4534 sql_help.c:4576 sql_help.c:4578 sql_help.c:4580 -#: sql_help.c:4624 sql_help.c:4752 +#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1265 +#: sql_help.c:1283 sql_help.c:1287 sql_help.c:1288 sql_help.c:1292 +#: sql_help.c:1294 sql_help.c:1295 sql_help.c:1296 sql_help.c:1297 +#: sql_help.c:1299 sql_help.c:1302 sql_help.c:1303 sql_help.c:1305 +#: sql_help.c:1308 sql_help.c:1310 sql_help.c:1355 sql_help.c:1357 +#: sql_help.c:1364 sql_help.c:1373 sql_help.c:1378 sql_help.c:1630 +#: sql_help.c:1633 sql_help.c:1637 sql_help.c:1673 sql_help.c:1788 +#: sql_help.c:1901 sql_help.c:1907 sql_help.c:1920 sql_help.c:1921 +#: sql_help.c:1922 sql_help.c:2243 sql_help.c:2256 sql_help.c:2301 +#: sql_help.c:2367 sql_help.c:2373 sql_help.c:2406 sql_help.c:2633 +#: sql_help.c:2661 sql_help.c:2662 sql_help.c:2769 sql_help.c:2777 +#: sql_help.c:2787 sql_help.c:2790 sql_help.c:2800 sql_help.c:2804 +#: sql_help.c:2827 sql_help.c:2829 sql_help.c:2836 sql_help.c:2849 +#: sql_help.c:2854 sql_help.c:2872 sql_help.c:2998 sql_help.c:3134 +#: sql_help.c:3737 sql_help.c:3738 sql_help.c:3819 sql_help.c:3834 +#: sql_help.c:3836 sql_help.c:3838 sql_help.c:4085 sql_help.c:4086 +#: sql_help.c:4191 sql_help.c:4342 sql_help.c:4581 sql_help.c:4623 +#: sql_help.c:4625 sql_help.c:4627 sql_help.c:4673 sql_help.c:4801 msgid "column_name" msgstr "имя_столбца" -#: sql_help.c:444 sql_help.c:664 sql_help.c:1262 +#: sql_help.c:444 sql_help.c:664 sql_help.c:1266 sql_help.c:1638 msgid "new_column_name" msgstr "новое_имя_столбца" #: sql_help.c:449 sql_help.c:540 sql_help.c:672 sql_help.c:862 sql_help.c:1000 -#: sql_help.c:1278 sql_help.c:1530 +#: sql_help.c:1282 sql_help.c:1539 msgid "where action is one of:" msgstr "где допустимое действие:" -#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1280 -#: sql_help.c:1285 sql_help.c:1532 sql_help.c:1536 sql_help.c:2141 -#: sql_help.c:2231 sql_help.c:2427 sql_help.c:2607 sql_help.c:2751 -#: sql_help.c:3024 sql_help.c:3891 +#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1284 +#: sql_help.c:1289 sql_help.c:1541 sql_help.c:1545 sql_help.c:2156 +#: sql_help.c:2244 sql_help.c:2446 sql_help.c:2626 sql_help.c:2770 +#: sql_help.c:3043 sql_help.c:3921 msgid "data_type" msgstr "тип_данных" -#: sql_help.c:452 sql_help.c:457 sql_help.c:1281 sql_help.c:1286 -#: sql_help.c:1533 sql_help.c:1537 sql_help.c:2142 sql_help.c:2234 -#: sql_help.c:2352 sql_help.c:2752 sql_help.c:2760 sql_help.c:2773 -#: sql_help.c:2787 sql_help.c:3025 sql_help.c:3031 sql_help.c:3799 +#: sql_help.c:452 sql_help.c:457 sql_help.c:1285 sql_help.c:1290 +#: sql_help.c:1542 sql_help.c:1546 sql_help.c:2157 sql_help.c:2247 +#: sql_help.c:2369 sql_help.c:2771 sql_help.c:2779 sql_help.c:2792 +#: sql_help.c:2806 sql_help.c:3044 sql_help.c:3050 sql_help.c:3829 msgid "collation" msgstr "правило_сортировки" -#: sql_help.c:453 sql_help.c:1282 sql_help.c:2235 sql_help.c:2244 -#: sql_help.c:2753 sql_help.c:2769 sql_help.c:2782 +#: sql_help.c:453 sql_help.c:1286 sql_help.c:2248 sql_help.c:2257 +#: sql_help.c:2772 sql_help.c:2788 sql_help.c:2801 msgid "column_constraint" msgstr "ограничение_столбца" -#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1299 +#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1304 sql_help.c:4670 msgid "integer" msgstr "целое" -#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1301 -#: sql_help.c:1304 +#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1306 +#: sql_help.c:1309 msgid "attribute_option" msgstr "атрибут" -#: sql_help.c:473 sql_help.c:1306 sql_help.c:2236 sql_help.c:2245 -#: sql_help.c:2754 sql_help.c:2770 sql_help.c:2783 +#: sql_help.c:473 sql_help.c:1311 sql_help.c:2249 sql_help.c:2258 +#: sql_help.c:2773 sql_help.c:2789 sql_help.c:2802 msgid "table_constraint" msgstr "ограничение_таблицы" -#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1311 -#: sql_help.c:1312 sql_help.c:1313 sql_help.c:1314 sql_help.c:1829 +#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1316 +#: sql_help.c:1317 sql_help.c:1318 sql_help.c:1319 sql_help.c:1842 msgid "trigger_name" msgstr "имя_триггера" -#: sql_help.c:480 sql_help.c:481 sql_help.c:1324 sql_help.c:1325 -#: sql_help.c:2237 sql_help.c:2242 sql_help.c:2757 sql_help.c:2780 +#: sql_help.c:480 sql_help.c:481 sql_help.c:1329 sql_help.c:1330 +#: sql_help.c:2250 sql_help.c:2255 sql_help.c:2776 sql_help.c:2799 msgid "parent_table" msgstr "таблица_родитель" #: sql_help.c:539 sql_help.c:595 sql_help.c:661 sql_help.c:861 sql_help.c:999 -#: sql_help.c:1493 sql_help.c:2173 +#: sql_help.c:1498 sql_help.c:2187 msgid "extension_name" msgstr "имя_расширения" -#: sql_help.c:541 sql_help.c:1001 sql_help.c:2292 +#: sql_help.c:541 sql_help.c:1001 sql_help.c:2305 msgid "execution_cost" msgstr "стоимость_выполнения" -#: sql_help.c:542 sql_help.c:1002 sql_help.c:2293 +#: sql_help.c:542 sql_help.c:1002 sql_help.c:2306 msgid "result_rows" msgstr "строк_в_результате" -#: sql_help.c:543 sql_help.c:2294 +#: sql_help.c:543 sql_help.c:2307 msgid "support_function" msgstr "вспомогательная_функция" #: sql_help.c:564 sql_help.c:566 sql_help.c:925 sql_help.c:933 sql_help.c:937 -#: sql_help.c:940 sql_help.c:943 sql_help.c:1571 sql_help.c:1579 -#: sql_help.c:1583 sql_help.c:1586 sql_help.c:1589 sql_help.c:2585 -#: sql_help.c:2587 sql_help.c:2590 sql_help.c:2591 sql_help.c:3707 -#: sql_help.c:3711 sql_help.c:3714 sql_help.c:3716 sql_help.c:3718 -#: sql_help.c:3720 sql_help.c:3722 sql_help.c:3728 sql_help.c:3730 -#: sql_help.c:3732 sql_help.c:3734 sql_help.c:3736 sql_help.c:3738 +#: sql_help.c:940 sql_help.c:943 sql_help.c:1580 sql_help.c:1588 +#: sql_help.c:1592 sql_help.c:1595 sql_help.c:1598 sql_help.c:2604 +#: sql_help.c:2606 sql_help.c:2609 sql_help.c:2610 sql_help.c:3736 +#: sql_help.c:3740 sql_help.c:3743 sql_help.c:3745 sql_help.c:3747 +#: sql_help.c:3749 sql_help.c:3751 sql_help.c:3757 sql_help.c:3759 +#: sql_help.c:3761 sql_help.c:3763 sql_help.c:3765 sql_help.c:3767 +#: sql_help.c:3769 sql_help.c:3770 sql_help.c:4084 sql_help.c:4088 +#: sql_help.c:4091 sql_help.c:4093 sql_help.c:4095 sql_help.c:4097 +#: sql_help.c:4099 sql_help.c:4105 sql_help.c:4107 sql_help.c:4109 +#: sql_help.c:4111 sql_help.c:4113 sql_help.c:4115 sql_help.c:4117 +#: sql_help.c:4118 msgid "role_specification" msgstr "указание_роли" -#: sql_help.c:565 sql_help.c:567 sql_help.c:1602 sql_help.c:2116 -#: sql_help.c:2593 sql_help.c:3100 sql_help.c:3545 sql_help.c:4380 +#: sql_help.c:565 sql_help.c:567 sql_help.c:1611 sql_help.c:2130 +#: sql_help.c:2612 sql_help.c:3119 sql_help.c:3570 sql_help.c:4427 msgid "user_name" msgstr "имя_пользователя" -#: sql_help.c:568 sql_help.c:945 sql_help.c:1591 sql_help.c:2592 -#: sql_help.c:3739 +#: sql_help.c:568 sql_help.c:945 sql_help.c:1600 sql_help.c:2611 +#: sql_help.c:3771 sql_help.c:4119 msgid "where role_specification can be:" msgstr "где допустимое указание_роли:" @@ -4691,22 +4871,22 @@ msgstr "где допустимое указание_роли:" msgid "group_name" msgstr "имя_группы" -#: sql_help.c:591 sql_help.c:1371 sql_help.c:2121 sql_help.c:2357 -#: sql_help.c:2391 sql_help.c:2765 sql_help.c:2778 sql_help.c:2792 -#: sql_help.c:2833 sql_help.c:2857 sql_help.c:2869 sql_help.c:3735 -#: sql_help.c:4068 +#: sql_help.c:591 sql_help.c:1376 sql_help.c:2136 sql_help.c:2376 +#: sql_help.c:2410 sql_help.c:2784 sql_help.c:2797 sql_help.c:2811 +#: sql_help.c:2852 sql_help.c:2876 sql_help.c:2888 sql_help.c:3764 +#: sql_help.c:4112 msgid "tablespace_name" msgstr "табл_пространство" -#: sql_help.c:593 sql_help.c:681 sql_help.c:1319 sql_help.c:1328 -#: sql_help.c:1366 sql_help.c:1709 +#: sql_help.c:593 sql_help.c:681 sql_help.c:1324 sql_help.c:1333 +#: sql_help.c:1371 sql_help.c:1722 msgid "index_name" msgstr "имя_индекса" -#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1321 -#: sql_help.c:1323 sql_help.c:1369 sql_help.c:2355 sql_help.c:2389 -#: sql_help.c:2763 sql_help.c:2776 sql_help.c:2790 sql_help.c:2831 -#: sql_help.c:2855 +#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1326 +#: sql_help.c:1328 sql_help.c:1374 sql_help.c:2374 sql_help.c:2408 +#: sql_help.c:2782 sql_help.c:2795 sql_help.c:2809 sql_help.c:2850 +#: sql_help.c:2874 msgid "storage_parameter" msgstr "параметр_хранения" @@ -4714,1697 +4894,1699 @@ msgstr "параметр_хранения" msgid "column_number" msgstr "номер_столбца" -#: sql_help.c:626 sql_help.c:1792 sql_help.c:4155 +#: sql_help.c:626 sql_help.c:1805 sql_help.c:4202 msgid "large_object_oid" msgstr "oid_большого_объекта" -#: sql_help.c:713 sql_help.c:2412 +#: sql_help.c:713 sql_help.c:2431 msgid "res_proc" msgstr "процедура_ограничения" -#: sql_help.c:714 sql_help.c:2413 +#: sql_help.c:714 sql_help.c:2432 msgid "join_proc" msgstr "процедура_соединения" -#: sql_help.c:766 sql_help.c:778 sql_help.c:2430 +#: sql_help.c:766 sql_help.c:778 sql_help.c:2449 msgid "strategy_number" msgstr "номер_стратегии" #: sql_help.c:768 sql_help.c:769 sql_help.c:772 sql_help.c:773 sql_help.c:779 -#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2432 sql_help.c:2433 -#: sql_help.c:2436 sql_help.c:2437 +#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2451 sql_help.c:2452 +#: sql_help.c:2455 sql_help.c:2456 msgid "op_type" msgstr "тип_операции" -#: sql_help.c:770 sql_help.c:2434 +#: sql_help.c:770 sql_help.c:2453 msgid "sort_family_name" msgstr "семейство_сортировки" -#: sql_help.c:771 sql_help.c:781 sql_help.c:2435 +#: sql_help.c:771 sql_help.c:781 sql_help.c:2454 msgid "support_number" msgstr "номер_опорной_процедуры" -#: sql_help.c:775 sql_help.c:2058 sql_help.c:2439 sql_help.c:2946 -#: sql_help.c:2948 +#: sql_help.c:775 sql_help.c:2071 sql_help.c:2458 sql_help.c:2965 +#: sql_help.c:2967 msgid "argument_type" msgstr "тип_аргумента" #: sql_help.c:806 sql_help.c:809 sql_help.c:880 sql_help.c:882 sql_help.c:884 -#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1489 sql_help.c:1492 -#: sql_help.c:1659 sql_help.c:1708 sql_help.c:1777 sql_help.c:1802 -#: sql_help.c:1815 sql_help.c:1830 sql_help.c:1887 sql_help.c:1893 -#: sql_help.c:2229 sql_help.c:2241 sql_help.c:2348 sql_help.c:2386 -#: sql_help.c:2463 sql_help.c:2506 sql_help.c:2562 sql_help.c:2613 -#: sql_help.c:2644 sql_help.c:2749 sql_help.c:2766 sql_help.c:2779 -#: sql_help.c:2852 sql_help.c:2972 sql_help.c:3149 sql_help.c:3366 -#: sql_help.c:3415 sql_help.c:3521 sql_help.c:3705 sql_help.c:3710 -#: sql_help.c:3755 sql_help.c:3787 sql_help.c:4038 sql_help.c:4043 -#: sql_help.c:4143 sql_help.c:4250 sql_help.c:4252 sql_help.c:4301 -#: sql_help.c:4340 sql_help.c:4489 sql_help.c:4491 sql_help.c:4540 -#: sql_help.c:4574 sql_help.c:4623 sql_help.c:4707 sql_help.c:4709 -#: sql_help.c:4758 +#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1494 sql_help.c:1497 +#: sql_help.c:1672 sql_help.c:1721 sql_help.c:1790 sql_help.c:1815 +#: sql_help.c:1828 sql_help.c:1843 sql_help.c:1900 sql_help.c:1906 +#: sql_help.c:2242 sql_help.c:2254 sql_help.c:2365 sql_help.c:2405 +#: sql_help.c:2482 sql_help.c:2525 sql_help.c:2581 sql_help.c:2632 +#: sql_help.c:2663 sql_help.c:2768 sql_help.c:2785 sql_help.c:2798 +#: sql_help.c:2871 sql_help.c:2991 sql_help.c:3168 sql_help.c:3391 +#: sql_help.c:3440 sql_help.c:3546 sql_help.c:3734 sql_help.c:3739 +#: sql_help.c:3785 sql_help.c:3817 sql_help.c:4082 sql_help.c:4087 +#: sql_help.c:4190 sql_help.c:4297 sql_help.c:4299 sql_help.c:4348 +#: sql_help.c:4387 sql_help.c:4536 sql_help.c:4538 sql_help.c:4587 +#: sql_help.c:4621 sql_help.c:4672 sql_help.c:4756 sql_help.c:4758 +#: sql_help.c:4807 msgid "table_name" msgstr "имя_таблицы" -#: sql_help.c:811 sql_help.c:2465 +#: sql_help.c:811 sql_help.c:2484 msgid "using_expression" msgstr "выражение_использования" -#: sql_help.c:812 sql_help.c:2466 +#: sql_help.c:812 sql_help.c:2485 msgid "check_expression" msgstr "выражение_проверки" -#: sql_help.c:886 sql_help.c:2507 +#: sql_help.c:886 sql_help.c:2526 msgid "publication_parameter" msgstr "параметр_публикации" -#: sql_help.c:929 sql_help.c:1575 sql_help.c:2327 sql_help.c:2539 -#: sql_help.c:3083 +#: sql_help.c:929 sql_help.c:1584 sql_help.c:2344 sql_help.c:2558 +#: sql_help.c:3102 msgid "password" msgstr "пароль" -#: sql_help.c:930 sql_help.c:1576 sql_help.c:2328 sql_help.c:2540 -#: sql_help.c:3084 +#: sql_help.c:930 sql_help.c:1585 sql_help.c:2345 sql_help.c:2559 +#: sql_help.c:3103 msgid "timestamp" msgstr "timestamp" -#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1580 -#: sql_help.c:1584 sql_help.c:1587 sql_help.c:1590 sql_help.c:3715 -#: sql_help.c:4048 +#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1589 +#: sql_help.c:1593 sql_help.c:1596 sql_help.c:1599 sql_help.c:3744 +#: sql_help.c:4092 msgid "database_name" msgstr "имя_БД" -#: sql_help.c:1048 sql_help.c:2608 +#: sql_help.c:1048 sql_help.c:2627 msgid "increment" msgstr "шаг" -#: sql_help.c:1049 sql_help.c:2609 +#: sql_help.c:1049 sql_help.c:2628 msgid "minvalue" msgstr "мин_значение" -#: sql_help.c:1050 sql_help.c:2610 +#: sql_help.c:1050 sql_help.c:2629 msgid "maxvalue" msgstr "макс_значение" -#: sql_help.c:1051 sql_help.c:2611 sql_help.c:4248 sql_help.c:4338 -#: sql_help.c:4487 sql_help.c:4640 sql_help.c:4705 +#: sql_help.c:1051 sql_help.c:2630 sql_help.c:4295 sql_help.c:4385 +#: sql_help.c:4534 sql_help.c:4689 sql_help.c:4754 msgid "start" msgstr "начальное_значение" -#: sql_help.c:1052 sql_help.c:1296 +#: sql_help.c:1052 sql_help.c:1301 msgid "restart" msgstr "значение_перезапуска" -#: sql_help.c:1053 sql_help.c:2612 +#: sql_help.c:1053 sql_help.c:2631 msgid "cache" msgstr "кеш" -#: sql_help.c:1110 sql_help.c:2656 +#: sql_help.c:1097 +msgid "new_target" +msgstr "новое_имя" + +#: sql_help.c:1113 sql_help.c:2675 msgid "conninfo" msgstr "строка_подключения" -#: sql_help.c:1112 sql_help.c:2657 +#: sql_help.c:1115 sql_help.c:2676 msgid "publication_name" msgstr "имя_публикации" -#: sql_help.c:1113 +#: sql_help.c:1116 msgid "set_publication_option" msgstr "параметр_set_publication" -#: sql_help.c:1116 +#: sql_help.c:1119 msgid "refresh_option" msgstr "параметр_обновления" -#: sql_help.c:1121 sql_help.c:2658 +#: sql_help.c:1124 sql_help.c:2677 msgid "subscription_parameter" msgstr "параметр_подписки" -#: sql_help.c:1274 sql_help.c:1277 +#: sql_help.c:1278 sql_help.c:1281 msgid "partition_name" msgstr "имя_секции" -#: sql_help.c:1275 sql_help.c:2246 sql_help.c:2784 +#: sql_help.c:1279 sql_help.c:2259 sql_help.c:2803 msgid "partition_bound_spec" msgstr "указание_границ_секции" -#: sql_help.c:1293 sql_help.c:1340 sql_help.c:2798 +#: sql_help.c:1298 sql_help.c:1345 sql_help.c:2817 msgid "sequence_options" msgstr "параметры_последовательности" -#: sql_help.c:1295 +#: sql_help.c:1300 msgid "sequence_option" msgstr "параметр_последовательности" -#: sql_help.c:1307 +#: sql_help.c:1312 msgid "table_constraint_using_index" msgstr "ограничение_таблицы_с_индексом" -#: sql_help.c:1315 sql_help.c:1316 sql_help.c:1317 sql_help.c:1318 +#: sql_help.c:1320 sql_help.c:1321 sql_help.c:1322 sql_help.c:1323 msgid "rewrite_rule_name" msgstr "имя_правила_перезаписи" -#: sql_help.c:1329 sql_help.c:2823 +#: sql_help.c:1334 sql_help.c:2842 msgid "and partition_bound_spec is:" msgstr "и указание_границ_секции:" -#: sql_help.c:1330 sql_help.c:1331 sql_help.c:1332 sql_help.c:2824 -#: sql_help.c:2825 sql_help.c:2826 +#: sql_help.c:1335 sql_help.c:1336 sql_help.c:1337 sql_help.c:2843 +#: sql_help.c:2844 sql_help.c:2845 msgid "partition_bound_expr" msgstr "выражение_границ_секции" -#: sql_help.c:1333 sql_help.c:1334 sql_help.c:2827 sql_help.c:2828 +#: sql_help.c:1338 sql_help.c:1339 sql_help.c:2846 sql_help.c:2847 msgid "numeric_literal" msgstr "числовая_константа" -#: sql_help.c:1335 +#: sql_help.c:1340 msgid "and column_constraint is:" msgstr "и ограничение_столбца:" -#: sql_help.c:1338 sql_help.c:2253 sql_help.c:2286 sql_help.c:2486 -#: sql_help.c:2796 +#: sql_help.c:1343 sql_help.c:2266 sql_help.c:2299 sql_help.c:2505 +#: sql_help.c:2815 msgid "default_expr" msgstr "выражение_по_умолчанию" -#: sql_help.c:1339 sql_help.c:2254 sql_help.c:2797 +#: sql_help.c:1344 sql_help.c:2267 sql_help.c:2816 msgid "generation_expr" msgstr "генерирующее_выражение" -#: sql_help.c:1341 sql_help.c:1342 sql_help.c:1351 sql_help.c:1353 -#: sql_help.c:1357 sql_help.c:2799 sql_help.c:2800 sql_help.c:2809 -#: sql_help.c:2811 sql_help.c:2815 +#: sql_help.c:1346 sql_help.c:1347 sql_help.c:1356 sql_help.c:1358 +#: sql_help.c:1362 sql_help.c:2818 sql_help.c:2819 sql_help.c:2828 +#: sql_help.c:2830 sql_help.c:2834 msgid "index_parameters" msgstr "параметры_индекса" -#: sql_help.c:1343 sql_help.c:1360 sql_help.c:2801 sql_help.c:2818 +#: sql_help.c:1348 sql_help.c:1365 sql_help.c:2820 sql_help.c:2837 msgid "reftable" msgstr "целевая_таблица" -#: sql_help.c:1344 sql_help.c:1361 sql_help.c:2802 sql_help.c:2819 +#: sql_help.c:1349 sql_help.c:1366 sql_help.c:2821 sql_help.c:2838 msgid "refcolumn" msgstr "целевой_столбец" -#: sql_help.c:1345 sql_help.c:1346 sql_help.c:1362 sql_help.c:1363 -#: sql_help.c:2803 sql_help.c:2804 sql_help.c:2820 sql_help.c:2821 +#: sql_help.c:1350 sql_help.c:1351 sql_help.c:1367 sql_help.c:1368 +#: sql_help.c:2822 sql_help.c:2823 sql_help.c:2839 sql_help.c:2840 msgid "referential_action" msgstr "ссылочное_действие" -#: sql_help.c:1347 sql_help.c:2255 sql_help.c:2805 +#: sql_help.c:1352 sql_help.c:2268 sql_help.c:2824 msgid "and table_constraint is:" msgstr "и ограничение_таблицы:" -#: sql_help.c:1355 sql_help.c:2813 +#: sql_help.c:1360 sql_help.c:2832 msgid "exclude_element" msgstr "объект_исключения" -#: sql_help.c:1356 sql_help.c:2814 sql_help.c:4246 sql_help.c:4336 -#: sql_help.c:4485 sql_help.c:4638 sql_help.c:4703 +#: sql_help.c:1361 sql_help.c:2833 sql_help.c:4293 sql_help.c:4383 +#: sql_help.c:4532 sql_help.c:4687 sql_help.c:4752 msgid "operator" msgstr "оператор" -#: sql_help.c:1358 sql_help.c:2358 sql_help.c:2816 +#: sql_help.c:1363 sql_help.c:2377 sql_help.c:2835 msgid "predicate" msgstr "предикат" -#: sql_help.c:1364 +#: sql_help.c:1369 msgid "and table_constraint_using_index is:" msgstr "и ограничение_таблицы_с_индексом:" -#: sql_help.c:1367 sql_help.c:2829 +#: sql_help.c:1372 sql_help.c:2848 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "параметры_индекса в ограничениях UNIQUE, PRIMARY KEY и EXCLUDE:" -#: sql_help.c:1372 sql_help.c:2834 +#: sql_help.c:1377 sql_help.c:2853 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "объект_исключения в ограничении EXCLUDE:" -#: sql_help.c:1375 sql_help.c:2353 sql_help.c:2761 sql_help.c:2774 -#: sql_help.c:2788 sql_help.c:2837 sql_help.c:3800 +#: sql_help.c:1380 sql_help.c:2370 sql_help.c:2780 sql_help.c:2793 +#: sql_help.c:2807 sql_help.c:2856 sql_help.c:3830 msgid "opclass" msgstr "класс_оператора" -#: sql_help.c:1391 sql_help.c:1394 sql_help.c:2872 +#: sql_help.c:1396 sql_help.c:1399 sql_help.c:2891 msgid "tablespace_option" msgstr "параметр_табл_пространства" -#: sql_help.c:1415 sql_help.c:1418 sql_help.c:1424 sql_help.c:1428 +#: sql_help.c:1420 sql_help.c:1423 sql_help.c:1429 sql_help.c:1433 msgid "token_type" msgstr "тип_фрагмента" -#: sql_help.c:1416 sql_help.c:1419 +#: sql_help.c:1421 sql_help.c:1424 msgid "dictionary_name" msgstr "имя_словаря" -#: sql_help.c:1421 sql_help.c:1425 +#: sql_help.c:1426 sql_help.c:1430 msgid "old_dictionary" msgstr "старый_словарь" -#: sql_help.c:1422 sql_help.c:1426 +#: sql_help.c:1427 sql_help.c:1431 msgid "new_dictionary" msgstr "новый_словарь" -#: sql_help.c:1518 sql_help.c:1531 sql_help.c:1534 sql_help.c:1535 -#: sql_help.c:3023 +#: sql_help.c:1526 sql_help.c:1540 sql_help.c:1543 sql_help.c:1544 +#: sql_help.c:3042 msgid "attribute_name" msgstr "имя_атрибута" -#: sql_help.c:1519 +#: sql_help.c:1527 msgid "new_attribute_name" msgstr "новое_имя_атрибута" -#: sql_help.c:1525 sql_help.c:1529 +#: sql_help.c:1531 sql_help.c:1535 msgid "new_enum_value" msgstr "новое_значение_перечисления" -#: sql_help.c:1526 +#: sql_help.c:1532 msgid "neighbor_enum_value" msgstr "соседнее_значение_перечисления" -#: sql_help.c:1528 +#: sql_help.c:1534 msgid "existing_enum_value" msgstr "существующее_значение_перечисления" -#: sql_help.c:1603 sql_help.c:2238 sql_help.c:2247 sql_help.c:2624 -#: sql_help.c:3101 sql_help.c:3546 sql_help.c:3721 sql_help.c:3756 -#: sql_help.c:4054 +#: sql_help.c:1537 +msgid "property" +msgstr "свойство" + +#: sql_help.c:1612 sql_help.c:2251 sql_help.c:2260 sql_help.c:2643 +#: sql_help.c:3120 sql_help.c:3571 sql_help.c:3750 sql_help.c:3786 +#: sql_help.c:4098 msgid "server_name" msgstr "имя_сервера" -#: sql_help.c:1631 sql_help.c:1634 sql_help.c:3116 +#: sql_help.c:1644 sql_help.c:1647 sql_help.c:3135 msgid "view_option_name" msgstr "имя_параметра_представления" -#: sql_help.c:1632 sql_help.c:3117 +#: sql_help.c:1645 sql_help.c:3136 msgid "view_option_value" msgstr "значение_параметра_представления" -#: sql_help.c:1653 sql_help.c:1654 sql_help.c:4611 sql_help.c:4612 +#: sql_help.c:1666 sql_help.c:1667 sql_help.c:4659 sql_help.c:4660 msgid "table_and_columns" msgstr "таблица_и_столбцы" -#: sql_help.c:1655 sql_help.c:1899 sql_help.c:3593 sql_help.c:4613 +#: sql_help.c:1668 sql_help.c:1912 sql_help.c:3619 sql_help.c:3963 +#: sql_help.c:4661 msgid "where option can be one of:" msgstr "где допустимый параметр:" -#: sql_help.c:1656 sql_help.c:1657 sql_help.c:1901 sql_help.c:1904 -#: sql_help.c:2083 sql_help.c:3594 sql_help.c:3595 sql_help.c:3596 -#: sql_help.c:3597 sql_help.c:3598 sql_help.c:3599 sql_help.c:3600 -#: sql_help.c:4614 sql_help.c:4615 sql_help.c:4616 sql_help.c:4617 -#: sql_help.c:4618 sql_help.c:4619 sql_help.c:4620 sql_help.c:4621 +#: sql_help.c:1669 sql_help.c:1670 sql_help.c:1914 sql_help.c:1917 +#: sql_help.c:2096 sql_help.c:3620 sql_help.c:3621 sql_help.c:3622 +#: sql_help.c:3623 sql_help.c:3624 sql_help.c:3625 sql_help.c:3626 +#: sql_help.c:3627 sql_help.c:4662 sql_help.c:4663 sql_help.c:4664 +#: sql_help.c:4665 sql_help.c:4666 sql_help.c:4667 sql_help.c:4668 +#: sql_help.c:4669 msgid "boolean" msgstr "логическое_значение" -#: sql_help.c:1658 sql_help.c:4622 +#: sql_help.c:1671 sql_help.c:4671 msgid "and table_and_columns is:" msgstr "и таблица_и_столбцы:" -#: sql_help.c:1674 sql_help.c:4396 sql_help.c:4398 sql_help.c:4422 +#: sql_help.c:1687 sql_help.c:4443 sql_help.c:4445 sql_help.c:4469 msgid "transaction_mode" msgstr "режим_транзакции" -#: sql_help.c:1675 sql_help.c:4399 sql_help.c:4423 +#: sql_help.c:1688 sql_help.c:4446 sql_help.c:4470 msgid "where transaction_mode is one of:" msgstr "где допустимый режим_транзакции:" -#: sql_help.c:1684 sql_help.c:4256 sql_help.c:4265 sql_help.c:4269 -#: sql_help.c:4273 sql_help.c:4276 sql_help.c:4495 sql_help.c:4504 -#: sql_help.c:4508 sql_help.c:4512 sql_help.c:4515 sql_help.c:4713 -#: sql_help.c:4722 sql_help.c:4726 sql_help.c:4730 sql_help.c:4733 +#: sql_help.c:1697 sql_help.c:4303 sql_help.c:4312 sql_help.c:4316 +#: sql_help.c:4320 sql_help.c:4323 sql_help.c:4542 sql_help.c:4551 +#: sql_help.c:4555 sql_help.c:4559 sql_help.c:4562 sql_help.c:4762 +#: sql_help.c:4771 sql_help.c:4775 sql_help.c:4779 sql_help.c:4782 msgid "argument" msgstr "аргумент" -#: sql_help.c:1774 +#: sql_help.c:1787 msgid "relation_name" msgstr "имя_отношения" -#: sql_help.c:1779 sql_help.c:3717 sql_help.c:4050 +#: sql_help.c:1792 sql_help.c:3746 sql_help.c:4094 msgid "domain_name" msgstr "имя_домена" -#: sql_help.c:1801 +#: sql_help.c:1814 msgid "policy_name" msgstr "имя_политики" -#: sql_help.c:1814 +#: sql_help.c:1827 msgid "rule_name" msgstr "имя_правила" -#: sql_help.c:1833 +#: sql_help.c:1846 msgid "text" msgstr "текст" -#: sql_help.c:1858 sql_help.c:3900 sql_help.c:4088 +#: sql_help.c:1871 sql_help.c:3930 sql_help.c:4135 msgid "transaction_id" msgstr "код_транзакции" -#: sql_help.c:1889 sql_help.c:1896 sql_help.c:3826 +#: sql_help.c:1902 sql_help.c:1909 sql_help.c:3856 msgid "filename" msgstr "имя_файла" -#: sql_help.c:1890 sql_help.c:1897 sql_help.c:2564 sql_help.c:2565 -#: sql_help.c:2566 +#: sql_help.c:1903 sql_help.c:1910 sql_help.c:2583 sql_help.c:2584 +#: sql_help.c:2585 msgid "command" msgstr "команда" -#: sql_help.c:1892 sql_help.c:2563 sql_help.c:2975 sql_help.c:3152 -#: sql_help.c:3810 sql_help.c:4239 sql_help.c:4241 sql_help.c:4329 -#: sql_help.c:4331 sql_help.c:4478 sql_help.c:4480 sql_help.c:4583 -#: sql_help.c:4696 sql_help.c:4698 +#: sql_help.c:1905 sql_help.c:2582 sql_help.c:2994 sql_help.c:3171 +#: sql_help.c:3840 sql_help.c:4286 sql_help.c:4288 sql_help.c:4376 +#: sql_help.c:4378 sql_help.c:4525 sql_help.c:4527 sql_help.c:4630 +#: sql_help.c:4745 sql_help.c:4747 msgid "condition" msgstr "условие" -#: sql_help.c:1895 sql_help.c:2392 sql_help.c:2858 sql_help.c:3118 -#: sql_help.c:3136 sql_help.c:3791 +#: sql_help.c:1908 sql_help.c:2411 sql_help.c:2877 sql_help.c:3137 +#: sql_help.c:3155 sql_help.c:3821 msgid "query" msgstr "запрос" -#: sql_help.c:1900 +#: sql_help.c:1913 msgid "format_name" msgstr "имя_формата" -#: sql_help.c:1902 +#: sql_help.c:1915 msgid "delimiter_character" msgstr "символ_разделитель" -#: sql_help.c:1903 +#: sql_help.c:1916 msgid "null_string" msgstr "представление_NULL" -#: sql_help.c:1905 +#: sql_help.c:1918 msgid "quote_character" msgstr "символ_кавычек" -#: sql_help.c:1906 +#: sql_help.c:1919 msgid "escape_character" msgstr "спецсимвол" -#: sql_help.c:1910 +#: sql_help.c:1923 msgid "encoding_name" msgstr "имя_кодировки" -#: sql_help.c:1921 +#: sql_help.c:1934 msgid "access_method_type" msgstr "тип_метода_доступа" -#: sql_help.c:1992 sql_help.c:2011 sql_help.c:2014 +#: sql_help.c:2005 sql_help.c:2024 sql_help.c:2027 msgid "arg_data_type" msgstr "тип_данных_аргумента" -#: sql_help.c:1993 sql_help.c:2015 sql_help.c:2023 +#: sql_help.c:2006 sql_help.c:2028 sql_help.c:2036 msgid "sfunc" msgstr "функция_состояния" -#: sql_help.c:1994 sql_help.c:2016 sql_help.c:2024 +#: sql_help.c:2007 sql_help.c:2029 sql_help.c:2037 msgid "state_data_type" msgstr "тип_данных_состояния" -#: sql_help.c:1995 sql_help.c:2017 sql_help.c:2025 +#: sql_help.c:2008 sql_help.c:2030 sql_help.c:2038 msgid "state_data_size" msgstr "размер_данных_состояния" -#: sql_help.c:1996 sql_help.c:2018 sql_help.c:2026 +#: sql_help.c:2009 sql_help.c:2031 sql_help.c:2039 msgid "ffunc" msgstr "функция_завершения" -#: sql_help.c:1997 sql_help.c:2027 +#: sql_help.c:2010 sql_help.c:2040 msgid "combinefunc" msgstr "комбинирующая_функция" -#: sql_help.c:1998 sql_help.c:2028 +#: sql_help.c:2011 sql_help.c:2041 msgid "serialfunc" msgstr "функция_сериализации" -#: sql_help.c:1999 sql_help.c:2029 +#: sql_help.c:2012 sql_help.c:2042 msgid "deserialfunc" msgstr "функция_десериализации" -#: sql_help.c:2000 sql_help.c:2019 sql_help.c:2030 +#: sql_help.c:2013 sql_help.c:2032 sql_help.c:2043 msgid "initial_condition" msgstr "начальное_условие" -#: sql_help.c:2001 sql_help.c:2031 +#: sql_help.c:2014 sql_help.c:2044 msgid "msfunc" msgstr "функция_состояния_движ" -#: sql_help.c:2002 sql_help.c:2032 +#: sql_help.c:2015 sql_help.c:2045 msgid "minvfunc" msgstr "обратная_функция_движ" -#: sql_help.c:2003 sql_help.c:2033 +#: sql_help.c:2016 sql_help.c:2046 msgid "mstate_data_type" msgstr "тип_данных_состояния_движ" -#: sql_help.c:2004 sql_help.c:2034 +#: sql_help.c:2017 sql_help.c:2047 msgid "mstate_data_size" msgstr "размер_данных_состояния_движ" -#: sql_help.c:2005 sql_help.c:2035 +#: sql_help.c:2018 sql_help.c:2048 msgid "mffunc" msgstr "функция_завершения_движ" -#: sql_help.c:2006 sql_help.c:2036 +#: sql_help.c:2019 sql_help.c:2049 msgid "minitial_condition" msgstr "начальное_условие_движ" -#: sql_help.c:2007 sql_help.c:2037 +#: sql_help.c:2020 sql_help.c:2050 msgid "sort_operator" msgstr "оператор_сортировки" -#: sql_help.c:2020 +#: sql_help.c:2033 msgid "or the old syntax" msgstr "или старый синтаксис" -#: sql_help.c:2022 +#: sql_help.c:2035 msgid "base_type" msgstr "базовый_тип" -#: sql_help.c:2079 +#: sql_help.c:2092 sql_help.c:2133 msgid "locale" msgstr "код_локали" -#: sql_help.c:2080 sql_help.c:2119 +#: sql_help.c:2093 sql_help.c:2134 msgid "lc_collate" msgstr "код_правила_сортировки" -#: sql_help.c:2081 sql_help.c:2120 +#: sql_help.c:2094 sql_help.c:2135 msgid "lc_ctype" msgstr "код_классификации_символов" -#: sql_help.c:2082 sql_help.c:4141 +#: sql_help.c:2095 sql_help.c:4188 msgid "provider" msgstr "поставщик" -#: sql_help.c:2084 sql_help.c:2175 +#: sql_help.c:2097 sql_help.c:2189 msgid "version" msgstr "версия" -#: sql_help.c:2086 +#: sql_help.c:2099 msgid "existing_collation" msgstr "существующее_правило_сортировки" -#: sql_help.c:2096 +#: sql_help.c:2109 msgid "source_encoding" msgstr "исходная_кодировка" -#: sql_help.c:2097 +#: sql_help.c:2110 msgid "dest_encoding" msgstr "целевая_кодировка" -#: sql_help.c:2117 sql_help.c:2898 +#: sql_help.c:2131 sql_help.c:2917 msgid "template" msgstr "шаблон" -#: sql_help.c:2118 +#: sql_help.c:2132 msgid "encoding" msgstr "кодировка" -#: sql_help.c:2144 +#: sql_help.c:2159 msgid "constraint" msgstr "ограничение" -#: sql_help.c:2145 +#: sql_help.c:2160 msgid "where constraint is:" msgstr "где ограничение:" -#: sql_help.c:2159 sql_help.c:2561 sql_help.c:2971 +#: sql_help.c:2174 sql_help.c:2580 sql_help.c:2990 msgid "event" msgstr "событие" -#: sql_help.c:2160 +#: sql_help.c:2175 msgid "filter_variable" msgstr "переменная_фильтра" -#: sql_help.c:2176 -msgid "old_version" -msgstr "старая_версия" - -#: sql_help.c:2250 sql_help.c:2793 +#: sql_help.c:2263 sql_help.c:2812 msgid "where column_constraint is:" msgstr "где ограничение_столбца:" -#: sql_help.c:2287 +#: sql_help.c:2300 msgid "rettype" msgstr "тип_возврата" -#: sql_help.c:2289 +#: sql_help.c:2302 msgid "column_type" msgstr "тип_столбца" -#: sql_help.c:2298 sql_help.c:2492 +#: sql_help.c:2311 sql_help.c:2511 msgid "definition" msgstr "определение" -#: sql_help.c:2299 sql_help.c:2493 +#: sql_help.c:2312 sql_help.c:2512 msgid "obj_file" msgstr "объектный_файл" -#: sql_help.c:2300 sql_help.c:2494 +#: sql_help.c:2313 sql_help.c:2513 msgid "link_symbol" msgstr "символ_в_экспорте" -#: sql_help.c:2334 sql_help.c:2546 sql_help.c:3090 +#: sql_help.c:2351 sql_help.c:2565 sql_help.c:3109 msgid "uid" msgstr "uid" -#: sql_help.c:2349 sql_help.c:2388 sql_help.c:2762 sql_help.c:2775 -#: sql_help.c:2789 sql_help.c:2854 +#: sql_help.c:2366 sql_help.c:2407 sql_help.c:2781 sql_help.c:2794 +#: sql_help.c:2808 sql_help.c:2873 msgid "method" msgstr "метод" -#: sql_help.c:2370 +#: sql_help.c:2371 +msgid "opclass_parameter" +msgstr "параметр_класса_оп" + +#: sql_help.c:2388 msgid "call_handler" msgstr "обработчик_вызова" -#: sql_help.c:2371 +#: sql_help.c:2389 msgid "inline_handler" msgstr "обработчик_внедрённого_кода" -#: sql_help.c:2372 +#: sql_help.c:2390 msgid "valfunction" msgstr "функция_проверки" -#: sql_help.c:2410 +#: sql_help.c:2429 msgid "com_op" msgstr "коммут_оператор" -#: sql_help.c:2411 +#: sql_help.c:2430 msgid "neg_op" msgstr "обратный_оператор" -#: sql_help.c:2429 +#: sql_help.c:2448 msgid "family_name" msgstr "имя_семейства" -#: sql_help.c:2440 +#: sql_help.c:2459 msgid "storage_type" msgstr "тип_хранения" -#: sql_help.c:2567 sql_help.c:2978 +#: sql_help.c:2586 sql_help.c:2997 msgid "where event can be one of:" msgstr "где допустимое событие:" -#: sql_help.c:2586 sql_help.c:2588 +#: sql_help.c:2605 sql_help.c:2607 msgid "schema_element" msgstr "элемент_схемы" -#: sql_help.c:2625 +#: sql_help.c:2644 msgid "server_type" msgstr "тип_сервера" -#: sql_help.c:2626 +#: sql_help.c:2645 msgid "server_version" msgstr "версия_сервера" -#: sql_help.c:2627 sql_help.c:3719 sql_help.c:4052 +#: sql_help.c:2646 sql_help.c:3748 sql_help.c:4096 msgid "fdw_name" msgstr "имя_обёртки_сторонних_данных" -#: sql_help.c:2640 +#: sql_help.c:2659 msgid "statistics_name" msgstr "имя_статистики" -#: sql_help.c:2641 +#: sql_help.c:2660 msgid "statistics_kind" msgstr "вид_статистики" -#: sql_help.c:2655 +#: sql_help.c:2674 msgid "subscription_name" msgstr "имя_подписки" -#: sql_help.c:2755 +#: sql_help.c:2774 msgid "source_table" msgstr "исходная_таблица" -#: sql_help.c:2756 +#: sql_help.c:2775 msgid "like_option" msgstr "параметр_порождения" -#: sql_help.c:2822 +#: sql_help.c:2841 msgid "and like_option is:" msgstr "и параметр_порождения:" -#: sql_help.c:2871 +#: sql_help.c:2890 msgid "directory" msgstr "каталог" -#: sql_help.c:2885 +#: sql_help.c:2904 msgid "parser_name" msgstr "имя_анализатора" -#: sql_help.c:2886 +#: sql_help.c:2905 msgid "source_config" msgstr "исходная_конфигурация" -#: sql_help.c:2915 +#: sql_help.c:2934 msgid "start_function" msgstr "функция_начала" -#: sql_help.c:2916 +#: sql_help.c:2935 msgid "gettoken_function" msgstr "функция_выдачи_фрагмента" -#: sql_help.c:2917 +#: sql_help.c:2936 msgid "end_function" msgstr "функция_окончания" -#: sql_help.c:2918 +#: sql_help.c:2937 msgid "lextypes_function" msgstr "функция_лекс_типов" -#: sql_help.c:2919 +#: sql_help.c:2938 msgid "headline_function" msgstr "функция_создания_выдержек" -#: sql_help.c:2931 +#: sql_help.c:2950 msgid "init_function" msgstr "функция_инициализации" -#: sql_help.c:2932 +#: sql_help.c:2951 msgid "lexize_function" msgstr "функция_выделения_лексем" -#: sql_help.c:2945 +#: sql_help.c:2964 msgid "from_sql_function_name" msgstr "имя_функции_из_sql" -#: sql_help.c:2947 +#: sql_help.c:2966 msgid "to_sql_function_name" msgstr "имя_функции_в_sql" -#: sql_help.c:2973 +#: sql_help.c:2992 msgid "referenced_table_name" msgstr "ссылающаяся_таблица" -#: sql_help.c:2974 +#: sql_help.c:2993 msgid "transition_relation_name" msgstr "имя_переходного_отношения" -#: sql_help.c:2977 +#: sql_help.c:2996 msgid "arguments" msgstr "аргументы" -#: sql_help.c:3027 sql_help.c:4174 +#: sql_help.c:3046 sql_help.c:4221 msgid "label" msgstr "метка" -#: sql_help.c:3029 +#: sql_help.c:3048 msgid "subtype" msgstr "подтип" -#: sql_help.c:3030 +#: sql_help.c:3049 msgid "subtype_operator_class" msgstr "класс_оператора_подтипа" -#: sql_help.c:3032 +#: sql_help.c:3051 msgid "canonical_function" msgstr "каноническая_функция" -#: sql_help.c:3033 +#: sql_help.c:3052 msgid "subtype_diff_function" msgstr "функция_различий_подтипа" -#: sql_help.c:3035 +#: sql_help.c:3054 msgid "input_function" msgstr "функция_ввода" -#: sql_help.c:3036 +#: sql_help.c:3055 msgid "output_function" msgstr "функция_вывода" -#: sql_help.c:3037 +#: sql_help.c:3056 msgid "receive_function" msgstr "функция_получения" -#: sql_help.c:3038 +#: sql_help.c:3057 msgid "send_function" msgstr "функция_отправки" -#: sql_help.c:3039 +#: sql_help.c:3058 msgid "type_modifier_input_function" msgstr "функция_ввода_модификатора_типа" -#: sql_help.c:3040 +#: sql_help.c:3059 msgid "type_modifier_output_function" msgstr "функция_вывода_модификатора_типа" -#: sql_help.c:3041 +#: sql_help.c:3060 msgid "analyze_function" msgstr "функция_анализа" -#: sql_help.c:3042 +#: sql_help.c:3061 msgid "internallength" msgstr "внутр_длина" -#: sql_help.c:3043 +#: sql_help.c:3062 msgid "alignment" msgstr "выравнивание" -#: sql_help.c:3044 +#: sql_help.c:3063 msgid "storage" msgstr "хранение" -#: sql_help.c:3045 +#: sql_help.c:3064 msgid "like_type" msgstr "тип_образец" -#: sql_help.c:3046 +#: sql_help.c:3065 msgid "category" msgstr "категория" -#: sql_help.c:3047 +#: sql_help.c:3066 msgid "preferred" msgstr "предпочитаемый" -#: sql_help.c:3048 +#: sql_help.c:3067 msgid "default" msgstr "по_умолчанию" -#: sql_help.c:3049 +#: sql_help.c:3068 msgid "element" msgstr "элемент" -#: sql_help.c:3050 +#: sql_help.c:3069 msgid "delimiter" msgstr "разделитель" -#: sql_help.c:3051 +#: sql_help.c:3070 msgid "collatable" msgstr "сортируемый" -#: sql_help.c:3148 sql_help.c:3786 sql_help.c:4234 sql_help.c:4323 -#: sql_help.c:4473 sql_help.c:4573 sql_help.c:4691 +#: sql_help.c:3167 sql_help.c:3816 sql_help.c:4281 sql_help.c:4370 +#: sql_help.c:4520 sql_help.c:4620 sql_help.c:4740 msgid "with_query" msgstr "запрос_WITH" -#: sql_help.c:3150 sql_help.c:3788 sql_help.c:4253 sql_help.c:4259 -#: sql_help.c:4262 sql_help.c:4266 sql_help.c:4270 sql_help.c:4278 -#: sql_help.c:4492 sql_help.c:4498 sql_help.c:4501 sql_help.c:4505 -#: sql_help.c:4509 sql_help.c:4517 sql_help.c:4575 sql_help.c:4710 -#: sql_help.c:4716 sql_help.c:4719 sql_help.c:4723 sql_help.c:4727 -#: sql_help.c:4735 +#: sql_help.c:3169 sql_help.c:3818 sql_help.c:4300 sql_help.c:4306 +#: sql_help.c:4309 sql_help.c:4313 sql_help.c:4317 sql_help.c:4325 +#: sql_help.c:4539 sql_help.c:4545 sql_help.c:4548 sql_help.c:4552 +#: sql_help.c:4556 sql_help.c:4564 sql_help.c:4622 sql_help.c:4759 +#: sql_help.c:4765 sql_help.c:4768 sql_help.c:4772 sql_help.c:4776 +#: sql_help.c:4784 msgid "alias" msgstr "псевдоним" -#: sql_help.c:3151 -msgid "using_list" -msgstr "список_USING" +#: sql_help.c:3170 sql_help.c:4285 sql_help.c:4327 sql_help.c:4329 +#: sql_help.c:4375 sql_help.c:4524 sql_help.c:4566 sql_help.c:4568 +#: sql_help.c:4629 sql_help.c:4744 sql_help.c:4786 sql_help.c:4788 +msgid "from_item" +msgstr "источник_данных" -#: sql_help.c:3153 sql_help.c:3626 sql_help.c:3867 sql_help.c:4584 +#: sql_help.c:3172 sql_help.c:3653 sql_help.c:3897 sql_help.c:4631 msgid "cursor_name" msgstr "имя_курсора" -#: sql_help.c:3154 sql_help.c:3794 sql_help.c:4585 +#: sql_help.c:3173 sql_help.c:3824 sql_help.c:4632 msgid "output_expression" msgstr "выражение_результата" -#: sql_help.c:3155 sql_help.c:3795 sql_help.c:4237 sql_help.c:4326 -#: sql_help.c:4476 sql_help.c:4586 sql_help.c:4694 +#: sql_help.c:3174 sql_help.c:3825 sql_help.c:4284 sql_help.c:4373 +#: sql_help.c:4523 sql_help.c:4633 sql_help.c:4743 msgid "output_name" msgstr "имя_результата" -#: sql_help.c:3171 +#: sql_help.c:3190 msgid "code" msgstr "внедрённый_код" -#: sql_help.c:3570 +#: sql_help.c:3595 msgid "parameter" msgstr "параметр" -#: sql_help.c:3591 sql_help.c:3592 sql_help.c:3892 +#: sql_help.c:3617 sql_help.c:3618 sql_help.c:3922 msgid "statement" msgstr "оператор" -#: sql_help.c:3625 sql_help.c:3866 +#: sql_help.c:3652 sql_help.c:3896 msgid "direction" msgstr "направление" -#: sql_help.c:3627 sql_help.c:3868 +#: sql_help.c:3654 sql_help.c:3898 msgid "where direction can be empty or one of:" msgstr "где допустимое направление пустое или:" -#: sql_help.c:3628 sql_help.c:3629 sql_help.c:3630 sql_help.c:3631 -#: sql_help.c:3632 sql_help.c:3869 sql_help.c:3870 sql_help.c:3871 -#: sql_help.c:3872 sql_help.c:3873 sql_help.c:4247 sql_help.c:4249 -#: sql_help.c:4337 sql_help.c:4339 sql_help.c:4486 sql_help.c:4488 -#: sql_help.c:4639 sql_help.c:4641 sql_help.c:4704 sql_help.c:4706 +#: sql_help.c:3655 sql_help.c:3656 sql_help.c:3657 sql_help.c:3658 +#: sql_help.c:3659 sql_help.c:3899 sql_help.c:3900 sql_help.c:3901 +#: sql_help.c:3902 sql_help.c:3903 sql_help.c:4294 sql_help.c:4296 +#: sql_help.c:4384 sql_help.c:4386 sql_help.c:4533 sql_help.c:4535 +#: sql_help.c:4688 sql_help.c:4690 sql_help.c:4753 sql_help.c:4755 msgid "count" msgstr "число" -#: sql_help.c:3712 sql_help.c:4045 +#: sql_help.c:3741 sql_help.c:4089 msgid "sequence_name" msgstr "имя_последовательности" -#: sql_help.c:3725 sql_help.c:4058 +#: sql_help.c:3754 sql_help.c:4102 msgid "arg_name" msgstr "имя_аргумента" -#: sql_help.c:3726 sql_help.c:4059 +#: sql_help.c:3755 sql_help.c:4103 msgid "arg_type" msgstr "тип_аргумента" -#: sql_help.c:3731 sql_help.c:4064 +#: sql_help.c:3760 sql_help.c:4108 msgid "loid" msgstr "код_БО" -#: sql_help.c:3754 +#: sql_help.c:3784 msgid "remote_schema" msgstr "удалённая_схема" -#: sql_help.c:3757 +#: sql_help.c:3787 msgid "local_schema" msgstr "локальная_схема" -#: sql_help.c:3792 +#: sql_help.c:3822 msgid "conflict_target" msgstr "объект_конфликта" -#: sql_help.c:3793 +#: sql_help.c:3823 msgid "conflict_action" msgstr "действие_при_конфликте" -#: sql_help.c:3796 +#: sql_help.c:3826 msgid "where conflict_target can be one of:" msgstr "где допустимый объект_конфликта:" -#: sql_help.c:3797 +#: sql_help.c:3827 msgid "index_column_name" msgstr "имя_столбца_индекса" -#: sql_help.c:3798 +#: sql_help.c:3828 msgid "index_expression" msgstr "выражение_индекса" -#: sql_help.c:3801 +#: sql_help.c:3831 msgid "index_predicate" msgstr "предикат_индекса" -#: sql_help.c:3803 +#: sql_help.c:3833 msgid "and conflict_action is one of:" msgstr "а допустимое действие_при_конфликте:" -#: sql_help.c:3809 sql_help.c:4581 +#: sql_help.c:3839 sql_help.c:4628 msgid "sub-SELECT" msgstr "вложенный_SELECT" -#: sql_help.c:3818 sql_help.c:3881 sql_help.c:4557 +#: sql_help.c:3848 sql_help.c:3911 sql_help.c:4604 msgid "channel" msgstr "канал" -#: sql_help.c:3840 +#: sql_help.c:3870 msgid "lockmode" msgstr "режим_блокировки" -#: sql_help.c:3841 +#: sql_help.c:3871 msgid "where lockmode is one of:" msgstr "где допустимый режим_блокировки:" -#: sql_help.c:3882 +#: sql_help.c:3912 msgid "payload" msgstr "сообщение_нагрузка" -#: sql_help.c:3909 +#: sql_help.c:3939 msgid "old_role" msgstr "старая_роль" -#: sql_help.c:3910 +#: sql_help.c:3940 msgid "new_role" msgstr "новая_роль" -#: sql_help.c:3935 sql_help.c:4096 sql_help.c:4104 +#: sql_help.c:3971 sql_help.c:4143 sql_help.c:4151 msgid "savepoint_name" msgstr "имя_точки_сохранения" -#: sql_help.c:4238 sql_help.c:4280 sql_help.c:4282 sql_help.c:4328 -#: sql_help.c:4477 sql_help.c:4519 sql_help.c:4521 sql_help.c:4695 -#: sql_help.c:4737 sql_help.c:4739 -msgid "from_item" -msgstr "источник_данных" - -#: sql_help.c:4240 sql_help.c:4292 sql_help.c:4479 sql_help.c:4531 -#: sql_help.c:4697 sql_help.c:4749 +#: sql_help.c:4287 sql_help.c:4339 sql_help.c:4526 sql_help.c:4578 +#: sql_help.c:4746 sql_help.c:4798 msgid "grouping_element" msgstr "элемент_группирования" -#: sql_help.c:4242 sql_help.c:4332 sql_help.c:4481 sql_help.c:4699 +#: sql_help.c:4289 sql_help.c:4379 sql_help.c:4528 sql_help.c:4748 msgid "window_name" msgstr "имя_окна" -#: sql_help.c:4243 sql_help.c:4333 sql_help.c:4482 sql_help.c:4700 +#: sql_help.c:4290 sql_help.c:4380 sql_help.c:4529 sql_help.c:4749 msgid "window_definition" msgstr "определение_окна" -#: sql_help.c:4244 sql_help.c:4258 sql_help.c:4296 sql_help.c:4334 -#: sql_help.c:4483 sql_help.c:4497 sql_help.c:4535 sql_help.c:4701 -#: sql_help.c:4715 sql_help.c:4753 +#: sql_help.c:4291 sql_help.c:4305 sql_help.c:4343 sql_help.c:4381 +#: sql_help.c:4530 sql_help.c:4544 sql_help.c:4582 sql_help.c:4750 +#: sql_help.c:4764 sql_help.c:4802 msgid "select" msgstr "select" -#: sql_help.c:4251 sql_help.c:4490 sql_help.c:4708 +#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4757 msgid "where from_item can be one of:" msgstr "где допустимый источник_данных:" -#: sql_help.c:4254 sql_help.c:4260 sql_help.c:4263 sql_help.c:4267 -#: sql_help.c:4279 sql_help.c:4493 sql_help.c:4499 sql_help.c:4502 -#: sql_help.c:4506 sql_help.c:4518 sql_help.c:4711 sql_help.c:4717 -#: sql_help.c:4720 sql_help.c:4724 sql_help.c:4736 +#: sql_help.c:4301 sql_help.c:4307 sql_help.c:4310 sql_help.c:4314 +#: sql_help.c:4326 sql_help.c:4540 sql_help.c:4546 sql_help.c:4549 +#: sql_help.c:4553 sql_help.c:4565 sql_help.c:4760 sql_help.c:4766 +#: sql_help.c:4769 sql_help.c:4773 sql_help.c:4785 msgid "column_alias" msgstr "псевдоним_столбца" -#: sql_help.c:4255 sql_help.c:4494 sql_help.c:4712 +#: sql_help.c:4302 sql_help.c:4541 sql_help.c:4761 msgid "sampling_method" msgstr "метод_выборки" -#: sql_help.c:4257 sql_help.c:4496 sql_help.c:4714 +#: sql_help.c:4304 sql_help.c:4543 sql_help.c:4763 msgid "seed" msgstr "начальное_число" -#: sql_help.c:4261 sql_help.c:4294 sql_help.c:4500 sql_help.c:4533 -#: sql_help.c:4718 sql_help.c:4751 +#: sql_help.c:4308 sql_help.c:4341 sql_help.c:4547 sql_help.c:4580 +#: sql_help.c:4767 sql_help.c:4800 msgid "with_query_name" msgstr "имя_запроса_WITH" -#: sql_help.c:4271 sql_help.c:4274 sql_help.c:4277 sql_help.c:4510 -#: sql_help.c:4513 sql_help.c:4516 sql_help.c:4728 sql_help.c:4731 -#: sql_help.c:4734 +#: sql_help.c:4318 sql_help.c:4321 sql_help.c:4324 sql_help.c:4557 +#: sql_help.c:4560 sql_help.c:4563 sql_help.c:4777 sql_help.c:4780 +#: sql_help.c:4783 msgid "column_definition" msgstr "определение_столбца" -#: sql_help.c:4281 sql_help.c:4520 sql_help.c:4738 +#: sql_help.c:4328 sql_help.c:4567 sql_help.c:4787 msgid "join_type" msgstr "тип_соединения" -#: sql_help.c:4283 sql_help.c:4522 sql_help.c:4740 +#: sql_help.c:4330 sql_help.c:4569 sql_help.c:4789 msgid "join_condition" msgstr "условие_соединения" -#: sql_help.c:4284 sql_help.c:4523 sql_help.c:4741 +#: sql_help.c:4331 sql_help.c:4570 sql_help.c:4790 msgid "join_column" msgstr "столбец_соединения" -#: sql_help.c:4285 sql_help.c:4524 sql_help.c:4742 +#: sql_help.c:4332 sql_help.c:4571 sql_help.c:4791 msgid "and grouping_element can be one of:" msgstr "где допустимый элемент_группирования:" -#: sql_help.c:4293 sql_help.c:4532 sql_help.c:4750 +#: sql_help.c:4340 sql_help.c:4579 sql_help.c:4799 msgid "and with_query is:" msgstr "и запрос_WITH:" -#: sql_help.c:4297 sql_help.c:4536 sql_help.c:4754 +#: sql_help.c:4344 sql_help.c:4583 sql_help.c:4803 msgid "values" msgstr "значения" -#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4755 +#: sql_help.c:4345 sql_help.c:4584 sql_help.c:4804 msgid "insert" msgstr "insert" -#: sql_help.c:4299 sql_help.c:4538 sql_help.c:4756 +#: sql_help.c:4346 sql_help.c:4585 sql_help.c:4805 msgid "update" msgstr "update" -#: sql_help.c:4300 sql_help.c:4539 sql_help.c:4757 +#: sql_help.c:4347 sql_help.c:4586 sql_help.c:4806 msgid "delete" msgstr "delete" -#: sql_help.c:4327 +#: sql_help.c:4374 msgid "new_table" msgstr "новая_таблица" -#: sql_help.c:4352 +#: sql_help.c:4399 msgid "timezone" msgstr "часовой_пояс" -#: sql_help.c:4397 +#: sql_help.c:4444 msgid "snapshot_id" msgstr "код_снимка" -#: sql_help.c:4582 -msgid "from_list" -msgstr "список_FROM" - -#: sql_help.c:4637 +#: sql_help.c:4686 msgid "sort_expression" msgstr "выражение_сортировки" -#: sql_help.c:4764 sql_help.c:5742 +#: sql_help.c:4813 sql_help.c:5791 msgid "abort the current transaction" msgstr "прервать текущую транзакцию" -#: sql_help.c:4770 +#: sql_help.c:4819 msgid "change the definition of an aggregate function" msgstr "изменить определение агрегатной функции" -#: sql_help.c:4776 +#: sql_help.c:4825 msgid "change the definition of a collation" msgstr "изменить определение правила сортировки" -#: sql_help.c:4782 +#: sql_help.c:4831 msgid "change the definition of a conversion" msgstr "изменить определение преобразования" -#: sql_help.c:4788 +#: sql_help.c:4837 msgid "change a database" msgstr "изменить атрибуты базы данных" -#: sql_help.c:4794 +#: sql_help.c:4843 msgid "define default access privileges" msgstr "определить права доступа по умолчанию" -#: sql_help.c:4800 +#: sql_help.c:4849 msgid "change the definition of a domain" msgstr "изменить определение домена" -#: sql_help.c:4806 +#: sql_help.c:4855 msgid "change the definition of an event trigger" msgstr "изменить определение событийного триггера" -#: sql_help.c:4812 +#: sql_help.c:4861 msgid "change the definition of an extension" msgstr "изменить определение расширения" -#: sql_help.c:4818 +#: sql_help.c:4867 msgid "change the definition of a foreign-data wrapper" msgstr "изменить определение обёртки сторонних данных" -#: sql_help.c:4824 +#: sql_help.c:4873 msgid "change the definition of a foreign table" msgstr "изменить определение сторонней таблицы" -#: sql_help.c:4830 +#: sql_help.c:4879 msgid "change the definition of a function" msgstr "изменить определение функции" -#: sql_help.c:4836 +#: sql_help.c:4885 msgid "change role name or membership" msgstr "изменить имя роли или членство" -#: sql_help.c:4842 +#: sql_help.c:4891 msgid "change the definition of an index" msgstr "изменить определение индекса" -#: sql_help.c:4848 +#: sql_help.c:4897 msgid "change the definition of a procedural language" msgstr "изменить определение процедурного языка" -#: sql_help.c:4854 +#: sql_help.c:4903 msgid "change the definition of a large object" msgstr "изменить определение большого объекта" -#: sql_help.c:4860 +#: sql_help.c:4909 msgid "change the definition of a materialized view" msgstr "изменить определение материализованного представления" -#: sql_help.c:4866 +#: sql_help.c:4915 msgid "change the definition of an operator" msgstr "изменить определение оператора" -#: sql_help.c:4872 +#: sql_help.c:4921 msgid "change the definition of an operator class" msgstr "изменить определение класса операторов" -#: sql_help.c:4878 +#: sql_help.c:4927 msgid "change the definition of an operator family" msgstr "изменить определение семейства операторов" -#: sql_help.c:4884 +#: sql_help.c:4933 msgid "change the definition of a row level security policy" msgstr "изменить определение политики безопасности на уровне строк" -#: sql_help.c:4890 +#: sql_help.c:4939 msgid "change the definition of a procedure" msgstr "изменить определение процедуры" -#: sql_help.c:4896 +#: sql_help.c:4945 msgid "change the definition of a publication" msgstr "изменить определение публикации" -#: sql_help.c:4902 sql_help.c:5004 +#: sql_help.c:4951 sql_help.c:5053 msgid "change a database role" msgstr "изменить роль пользователя БД" -#: sql_help.c:4908 +#: sql_help.c:4957 msgid "change the definition of a routine" msgstr "изменить определение подпрограммы" -#: sql_help.c:4914 +#: sql_help.c:4963 msgid "change the definition of a rule" msgstr "изменить определение правила" -#: sql_help.c:4920 +#: sql_help.c:4969 msgid "change the definition of a schema" msgstr "изменить определение схемы" -#: sql_help.c:4926 +#: sql_help.c:4975 msgid "change the definition of a sequence generator" msgstr "изменить определение генератора последовательности" -#: sql_help.c:4932 +#: sql_help.c:4981 msgid "change the definition of a foreign server" msgstr "изменить определение стороннего сервера" -#: sql_help.c:4938 +#: sql_help.c:4987 msgid "change the definition of an extended statistics object" msgstr "изменить определение объекта расширенной статистики" -#: sql_help.c:4944 +#: sql_help.c:4993 msgid "change the definition of a subscription" msgstr "изменить определение подписки" -#: sql_help.c:4950 +#: sql_help.c:4999 msgid "change a server configuration parameter" msgstr "изменить параметр конфигурации сервера" -#: sql_help.c:4956 +#: sql_help.c:5005 msgid "change the definition of a table" msgstr "изменить определение таблицы" -#: sql_help.c:4962 +#: sql_help.c:5011 msgid "change the definition of a tablespace" msgstr "изменить определение табличного пространства" -#: sql_help.c:4968 +#: sql_help.c:5017 msgid "change the definition of a text search configuration" msgstr "изменить определение конфигурации текстового поиска" -#: sql_help.c:4974 +#: sql_help.c:5023 msgid "change the definition of a text search dictionary" msgstr "изменить определение словаря текстового поиска" -#: sql_help.c:4980 +#: sql_help.c:5029 msgid "change the definition of a text search parser" msgstr "изменить определение анализатора текстового поиска" -#: sql_help.c:4986 +#: sql_help.c:5035 msgid "change the definition of a text search template" msgstr "изменить определение шаблона текстового поиска" -#: sql_help.c:4992 +#: sql_help.c:5041 msgid "change the definition of a trigger" msgstr "изменить определение триггера" -#: sql_help.c:4998 +#: sql_help.c:5047 msgid "change the definition of a type" msgstr "изменить определение типа" -#: sql_help.c:5010 +#: sql_help.c:5059 msgid "change the definition of a user mapping" msgstr "изменить сопоставление пользователей" -#: sql_help.c:5016 +#: sql_help.c:5065 msgid "change the definition of a view" msgstr "изменить определение представления" -#: sql_help.c:5022 +#: sql_help.c:5071 msgid "collect statistics about a database" msgstr "собрать статистику о базе данных" -#: sql_help.c:5028 sql_help.c:5820 +#: sql_help.c:5077 sql_help.c:5869 msgid "start a transaction block" msgstr "начать транзакцию" -#: sql_help.c:5034 +#: sql_help.c:5083 msgid "invoke a procedure" msgstr "вызвать процедуру" -#: sql_help.c:5040 +#: sql_help.c:5089 msgid "force a write-ahead log checkpoint" msgstr "произвести контрольную точку в журнале предзаписи" -#: sql_help.c:5046 +#: sql_help.c:5095 msgid "close a cursor" msgstr "закрыть курсор" -#: sql_help.c:5052 +#: sql_help.c:5101 msgid "cluster a table according to an index" msgstr "перегруппировать таблицу по индексу" -#: sql_help.c:5058 +#: sql_help.c:5107 msgid "define or change the comment of an object" msgstr "задать или изменить комментарий объекта" -#: sql_help.c:5064 sql_help.c:5622 +#: sql_help.c:5113 sql_help.c:5671 msgid "commit the current transaction" msgstr "зафиксировать текущую транзакцию" -#: sql_help.c:5070 +#: sql_help.c:5119 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "зафиксировать транзакцию, ранее подготовленную для двухфазной фиксации" -#: sql_help.c:5076 +#: sql_help.c:5125 msgid "copy data between a file and a table" msgstr "импорт/экспорт данных в файл" -#: sql_help.c:5082 +#: sql_help.c:5131 msgid "define a new access method" msgstr "создать новый метод доступа" -#: sql_help.c:5088 +#: sql_help.c:5137 msgid "define a new aggregate function" msgstr "создать агрегатную функцию" -#: sql_help.c:5094 +#: sql_help.c:5143 msgid "define a new cast" msgstr "создать приведение типов" -#: sql_help.c:5100 +#: sql_help.c:5149 msgid "define a new collation" msgstr "создать правило сортировки" -#: sql_help.c:5106 +#: sql_help.c:5155 msgid "define a new encoding conversion" msgstr "создать преобразование кодировки" -#: sql_help.c:5112 +#: sql_help.c:5161 msgid "create a new database" msgstr "создать базу данных" -#: sql_help.c:5118 +#: sql_help.c:5167 msgid "define a new domain" msgstr "создать домен" -#: sql_help.c:5124 +#: sql_help.c:5173 msgid "define a new event trigger" msgstr "создать событийный триггер" -#: sql_help.c:5130 +#: sql_help.c:5179 msgid "install an extension" msgstr "установить расширение" -#: sql_help.c:5136 +#: sql_help.c:5185 msgid "define a new foreign-data wrapper" msgstr "создать обёртку сторонних данных" -#: sql_help.c:5142 +#: sql_help.c:5191 msgid "define a new foreign table" msgstr "создать стороннюю таблицу" -#: sql_help.c:5148 +#: sql_help.c:5197 msgid "define a new function" msgstr "создать функцию" -#: sql_help.c:5154 sql_help.c:5214 sql_help.c:5316 +#: sql_help.c:5203 sql_help.c:5263 sql_help.c:5365 msgid "define a new database role" msgstr "создать роль пользователя БД" -#: sql_help.c:5160 +#: sql_help.c:5209 msgid "define a new index" msgstr "создать индекс" -#: sql_help.c:5166 +#: sql_help.c:5215 msgid "define a new procedural language" msgstr "создать процедурный язык" -#: sql_help.c:5172 +#: sql_help.c:5221 msgid "define a new materialized view" msgstr "создать материализованное представление" -#: sql_help.c:5178 +#: sql_help.c:5227 msgid "define a new operator" msgstr "создать оператор" -#: sql_help.c:5184 +#: sql_help.c:5233 msgid "define a new operator class" msgstr "создать класс операторов" -#: sql_help.c:5190 +#: sql_help.c:5239 msgid "define a new operator family" msgstr "создать семейство операторов" -#: sql_help.c:5196 +#: sql_help.c:5245 msgid "define a new row level security policy for a table" msgstr "создать новую политику безопасности на уровне строк для таблицы" -#: sql_help.c:5202 +#: sql_help.c:5251 msgid "define a new procedure" msgstr "создать процедуру" -#: sql_help.c:5208 +#: sql_help.c:5257 msgid "define a new publication" msgstr "создать публикацию" -#: sql_help.c:5220 +#: sql_help.c:5269 msgid "define a new rewrite rule" msgstr "создать правило перезаписи" -#: sql_help.c:5226 +#: sql_help.c:5275 msgid "define a new schema" msgstr "создать схему" -#: sql_help.c:5232 +#: sql_help.c:5281 msgid "define a new sequence generator" msgstr "создать генератор последовательностей" -#: sql_help.c:5238 +#: sql_help.c:5287 msgid "define a new foreign server" msgstr "создать сторонний сервер" -#: sql_help.c:5244 +#: sql_help.c:5293 msgid "define extended statistics" msgstr "создать расширенную статистику" -#: sql_help.c:5250 +#: sql_help.c:5299 msgid "define a new subscription" msgstr "создать подписку" -#: sql_help.c:5256 +#: sql_help.c:5305 msgid "define a new table" msgstr "создать таблицу" -#: sql_help.c:5262 sql_help.c:5778 +#: sql_help.c:5311 sql_help.c:5827 msgid "define a new table from the results of a query" msgstr "создать таблицу из результатов запроса" -#: sql_help.c:5268 +#: sql_help.c:5317 msgid "define a new tablespace" msgstr "создать табличное пространство" -#: sql_help.c:5274 +#: sql_help.c:5323 msgid "define a new text search configuration" msgstr "создать конфигурацию текстового поиска" -#: sql_help.c:5280 +#: sql_help.c:5329 msgid "define a new text search dictionary" msgstr "создать словарь текстового поиска" -#: sql_help.c:5286 +#: sql_help.c:5335 msgid "define a new text search parser" msgstr "создать анализатор текстового поиска" -#: sql_help.c:5292 +#: sql_help.c:5341 msgid "define a new text search template" msgstr "создать шаблон текстового поиска" -#: sql_help.c:5298 +#: sql_help.c:5347 msgid "define a new transform" msgstr "создать преобразование" -#: sql_help.c:5304 +#: sql_help.c:5353 msgid "define a new trigger" msgstr "создать триггер" -#: sql_help.c:5310 +#: sql_help.c:5359 msgid "define a new data type" msgstr "создать тип данных" -#: sql_help.c:5322 +#: sql_help.c:5371 msgid "define a new mapping of a user to a foreign server" msgstr "создать сопоставление пользователя для стороннего сервера" -#: sql_help.c:5328 +#: sql_help.c:5377 msgid "define a new view" msgstr "создать представление" -#: sql_help.c:5334 +#: sql_help.c:5383 msgid "deallocate a prepared statement" msgstr "освободить подготовленный оператор" -#: sql_help.c:5340 +#: sql_help.c:5389 msgid "define a cursor" msgstr "создать курсор" -#: sql_help.c:5346 +#: sql_help.c:5395 msgid "delete rows of a table" msgstr "удалить записи таблицы" -#: sql_help.c:5352 +#: sql_help.c:5401 msgid "discard session state" msgstr "очистить состояние сеанса" -#: sql_help.c:5358 +#: sql_help.c:5407 msgid "execute an anonymous code block" msgstr "выполнить анонимный блок кода" -#: sql_help.c:5364 +#: sql_help.c:5413 msgid "remove an access method" msgstr "удалить метод доступа" -#: sql_help.c:5370 +#: sql_help.c:5419 msgid "remove an aggregate function" msgstr "удалить агрегатную функцию" -#: sql_help.c:5376 +#: sql_help.c:5425 msgid "remove a cast" msgstr "удалить приведение типа" -#: sql_help.c:5382 +#: sql_help.c:5431 msgid "remove a collation" msgstr "удалить правило сортировки" -#: sql_help.c:5388 +#: sql_help.c:5437 msgid "remove a conversion" msgstr "удалить преобразование" -#: sql_help.c:5394 +#: sql_help.c:5443 msgid "remove a database" msgstr "удалить базу данных" -#: sql_help.c:5400 +#: sql_help.c:5449 msgid "remove a domain" msgstr "удалить домен" -#: sql_help.c:5406 +#: sql_help.c:5455 msgid "remove an event trigger" msgstr "удалить событийный триггер" -#: sql_help.c:5412 +#: sql_help.c:5461 msgid "remove an extension" msgstr "удалить расширение" -#: sql_help.c:5418 +#: sql_help.c:5467 msgid "remove a foreign-data wrapper" msgstr "удалить обёртку сторонних данных" -#: sql_help.c:5424 +#: sql_help.c:5473 msgid "remove a foreign table" msgstr "удалить стороннюю таблицу" -#: sql_help.c:5430 +#: sql_help.c:5479 msgid "remove a function" msgstr "удалить функцию" -#: sql_help.c:5436 sql_help.c:5502 sql_help.c:5604 +#: sql_help.c:5485 sql_help.c:5551 sql_help.c:5653 msgid "remove a database role" msgstr "удалить роль пользователя БД" -#: sql_help.c:5442 +#: sql_help.c:5491 msgid "remove an index" msgstr "удалить индекс" -#: sql_help.c:5448 +#: sql_help.c:5497 msgid "remove a procedural language" msgstr "удалить процедурный язык" -#: sql_help.c:5454 +#: sql_help.c:5503 msgid "remove a materialized view" msgstr "удалить материализованное представление" -#: sql_help.c:5460 +#: sql_help.c:5509 msgid "remove an operator" msgstr "удалить оператор" -#: sql_help.c:5466 +#: sql_help.c:5515 msgid "remove an operator class" msgstr "удалить класс операторов" -#: sql_help.c:5472 +#: sql_help.c:5521 msgid "remove an operator family" msgstr "удалить семейство операторов" -#: sql_help.c:5478 +#: sql_help.c:5527 msgid "remove database objects owned by a database role" msgstr "удалить объекты базы данных, принадлежащие роли" -#: sql_help.c:5484 +#: sql_help.c:5533 msgid "remove a row level security policy from a table" msgstr "удалить политику безопасности на уровне строк из таблицы" -#: sql_help.c:5490 +#: sql_help.c:5539 msgid "remove a procedure" msgstr "удалить процедуру" -#: sql_help.c:5496 +#: sql_help.c:5545 msgid "remove a publication" msgstr "удалить публикацию" -#: sql_help.c:5508 +#: sql_help.c:5557 msgid "remove a routine" msgstr "удалить подпрограмму" -#: sql_help.c:5514 +#: sql_help.c:5563 msgid "remove a rewrite rule" msgstr "удалить правило перезаписи" -#: sql_help.c:5520 +#: sql_help.c:5569 msgid "remove a schema" msgstr "удалить схему" -#: sql_help.c:5526 +#: sql_help.c:5575 msgid "remove a sequence" msgstr "удалить последовательность" -#: sql_help.c:5532 +#: sql_help.c:5581 msgid "remove a foreign server descriptor" msgstr "удалить описание стороннего сервера" -#: sql_help.c:5538 +#: sql_help.c:5587 msgid "remove extended statistics" msgstr "удалить расширенную статистику" -#: sql_help.c:5544 +#: sql_help.c:5593 msgid "remove a subscription" msgstr "удалить подписку" -#: sql_help.c:5550 +#: sql_help.c:5599 msgid "remove a table" msgstr "удалить таблицу" -#: sql_help.c:5556 +#: sql_help.c:5605 msgid "remove a tablespace" msgstr "удалить табличное пространство" -#: sql_help.c:5562 +#: sql_help.c:5611 msgid "remove a text search configuration" msgstr "удалить конфигурацию текстового поиска" -#: sql_help.c:5568 +#: sql_help.c:5617 msgid "remove a text search dictionary" msgstr "удалить словарь текстового поиска" -#: sql_help.c:5574 +#: sql_help.c:5623 msgid "remove a text search parser" msgstr "удалить анализатор текстового поиска" -#: sql_help.c:5580 +#: sql_help.c:5629 msgid "remove a text search template" msgstr "удалить шаблон текстового поиска" -#: sql_help.c:5586 +#: sql_help.c:5635 msgid "remove a transform" msgstr "удалить преобразование" -#: sql_help.c:5592 +#: sql_help.c:5641 msgid "remove a trigger" msgstr "удалить триггер" -#: sql_help.c:5598 +#: sql_help.c:5647 msgid "remove a data type" msgstr "удалить тип данных" -#: sql_help.c:5610 +#: sql_help.c:5659 msgid "remove a user mapping for a foreign server" msgstr "удалить сопоставление пользователя для стороннего сервера" -#: sql_help.c:5616 +#: sql_help.c:5665 msgid "remove a view" msgstr "удалить представление" -#: sql_help.c:5628 +#: sql_help.c:5677 msgid "execute a prepared statement" msgstr "выполнить подготовленный оператор" -#: sql_help.c:5634 +#: sql_help.c:5683 msgid "show the execution plan of a statement" msgstr "показать план выполнения оператора" -#: sql_help.c:5640 +#: sql_help.c:5689 msgid "retrieve rows from a query using a cursor" msgstr "получить результат запроса через курсор" -#: sql_help.c:5646 +#: sql_help.c:5695 msgid "define access privileges" msgstr "определить права доступа" -#: sql_help.c:5652 +#: sql_help.c:5701 msgid "import table definitions from a foreign server" msgstr "импортировать определения таблиц со стороннего сервера" -#: sql_help.c:5658 +#: sql_help.c:5707 msgid "create new rows in a table" msgstr "добавить строки в таблицу" -#: sql_help.c:5664 +#: sql_help.c:5713 msgid "listen for a notification" msgstr "ожидать уведомления" -#: sql_help.c:5670 +#: sql_help.c:5719 msgid "load a shared library file" msgstr "загрузить файл разделяемой библиотеки" -#: sql_help.c:5676 +#: sql_help.c:5725 msgid "lock a table" msgstr "заблокировать таблицу" -#: sql_help.c:5682 +#: sql_help.c:5731 msgid "position a cursor" msgstr "установить курсор" -#: sql_help.c:5688 +#: sql_help.c:5737 msgid "generate a notification" msgstr "сгенерировать уведомление" -#: sql_help.c:5694 +#: sql_help.c:5743 msgid "prepare a statement for execution" msgstr "подготовить оператор для выполнения" -#: sql_help.c:5700 +#: sql_help.c:5749 msgid "prepare the current transaction for two-phase commit" msgstr "подготовить текущую транзакцию для двухфазной фиксации" -#: sql_help.c:5706 +#: sql_help.c:5755 msgid "change the ownership of database objects owned by a database role" msgstr "изменить владельца объектов БД, принадлежащих заданной роли" -#: sql_help.c:5712 +#: sql_help.c:5761 msgid "replace the contents of a materialized view" msgstr "заменить содержимое материализованного представления" -#: sql_help.c:5718 +#: sql_help.c:5767 msgid "rebuild indexes" msgstr "перестроить индексы" -#: sql_help.c:5724 +#: sql_help.c:5773 msgid "destroy a previously defined savepoint" msgstr "удалить ранее определённую точку сохранения" -#: sql_help.c:5730 +#: sql_help.c:5779 msgid "restore the value of a run-time parameter to the default value" msgstr "восстановить исходное значение параметра выполнения" -#: sql_help.c:5736 +#: sql_help.c:5785 msgid "remove access privileges" msgstr "удалить права доступа" -#: sql_help.c:5748 +#: sql_help.c:5797 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "отменить транзакцию, подготовленную ранее для двухфазной фиксации" -#: sql_help.c:5754 +#: sql_help.c:5803 msgid "roll back to a savepoint" msgstr "откатиться к точке сохранения" -#: sql_help.c:5760 +#: sql_help.c:5809 msgid "define a new savepoint within the current transaction" msgstr "определить новую точку сохранения в текущей транзакции" -#: sql_help.c:5766 +#: sql_help.c:5815 msgid "define or change a security label applied to an object" msgstr "задать или изменить метку безопасности, применённую к объекту" -#: sql_help.c:5772 sql_help.c:5826 sql_help.c:5862 +#: sql_help.c:5821 sql_help.c:5875 sql_help.c:5911 msgid "retrieve rows from a table or view" msgstr "выбрать строки из таблицы или представления" -#: sql_help.c:5784 +#: sql_help.c:5833 msgid "change a run-time parameter" msgstr "изменить параметр выполнения" -#: sql_help.c:5790 +#: sql_help.c:5839 msgid "set constraint check timing for the current transaction" msgstr "установить время проверки ограничений для текущей транзакции" -#: sql_help.c:5796 +#: sql_help.c:5845 msgid "set the current user identifier of the current session" msgstr "задать идентификатор текущего пользователя в текущем сеансе" -#: sql_help.c:5802 +#: sql_help.c:5851 msgid "" "set the session user identifier and the current user identifier of the " "current session" @@ -6412,50 +6594,45 @@ msgstr "" "задать идентификатор пользователя сеанса и идентификатор текущего " "пользователя в текущем сеансе" -#: sql_help.c:5808 +#: sql_help.c:5857 msgid "set the characteristics of the current transaction" msgstr "задать свойства текущей транзакции" -#: sql_help.c:5814 +#: sql_help.c:5863 msgid "show the value of a run-time parameter" msgstr "показать значение параметра выполнения" -#: sql_help.c:5832 +#: sql_help.c:5881 msgid "empty a table or set of tables" msgstr "опустошить таблицу или набор таблиц" -#: sql_help.c:5838 +#: sql_help.c:5887 msgid "stop listening for a notification" msgstr "прекратить ожидание уведомлений" -#: sql_help.c:5844 +#: sql_help.c:5893 msgid "update rows of a table" msgstr "изменить строки таблицы" -#: sql_help.c:5850 +#: sql_help.c:5899 msgid "garbage-collect and optionally analyze a database" msgstr "произвести сборку мусора и проанализировать базу данных" -#: sql_help.c:5856 +#: sql_help.c:5905 msgid "compute a set of rows" msgstr "получить набор строк" -#: startup.c:216 +#: startup.c:212 #, c-format msgid "-1 can only be used in non-interactive mode" msgstr "-1 можно использовать только в неинтерактивном режиме" -#: startup.c:303 -#, c-format -msgid "could not connect to server: %s" -msgstr "не удалось подключиться к серверу: %s" - -#: startup.c:331 +#: startup.c:327 #, c-format msgid "could not open log file \"%s\": %m" msgstr "не удалось открыть файл протокола \"%s\": %m" -#: startup.c:443 +#: startup.c:439 #, c-format msgid "" "Type \"help\" for help.\n" @@ -6464,27 +6641,27 @@ msgstr "" "Введите \"help\", чтобы получить справку.\n" "\n" -#: startup.c:593 +#: startup.c:589 #, c-format msgid "could not set printing parameter \"%s\"" msgstr "не удалось установить параметр печати \"%s\"" -#: startup.c:701 +#: startup.c:697 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: startup.c:718 +#: startup.c:714 #, c-format msgid "extra command-line argument \"%s\" ignored" msgstr "лишний аргумент \"%s\" проигнорирован" -#: startup.c:767 +#: startup.c:763 #, c-format msgid "could not find own program executable" msgstr "не удалось найти собственный исполняемый файл" -#: tab-complete.c:4408 +#: tab-complete.c:4640 #, c-format msgid "" "tab completion query failed: %s\n" @@ -6495,23 +6672,23 @@ msgstr "" "Запрос:\n" "%s" -#: variables.c:141 +#: variables.c:139 #, c-format msgid "unrecognized value \"%s\" for \"%s\": Boolean expected" msgstr "" "нераспознанное значение \"%s\" для \"%s\": ожидалось булевское значение" -#: variables.c:178 +#: variables.c:176 #, c-format msgid "invalid value \"%s\" for \"%s\": integer expected" msgstr "неправильное значение \"%s\" для \"%s\": ожидалось целое" -#: variables.c:226 +#: variables.c:224 #, c-format msgid "invalid variable name: \"%s\"" msgstr "неправильное имя переменной: \"%s\"" -#: variables.c:395 +#: variables.c:419 #, c-format msgid "" "unrecognized value \"%s\" for \"%s\"\n" @@ -6520,6 +6697,31 @@ msgstr "" "нераспознанное значение \"%s\" для \"%s\"\n" "Допустимые значения: %s." +#~ msgid "Could not send cancel request: %s" +#~ msgstr "Отправить сигнал отмены не удалось: %s" + +#~ msgid "could not connect to server: %s" +#~ msgstr "не удалось подключиться к серверу: %s" + +#~ msgid "Report bugs to .\n" +#~ msgstr "Об ошибках сообщайте по адресу .\n" + +#~ msgid "" +#~ " \\g [FILE] or ; execute query (and send results to file or |" +#~ "pipe)\n" +#~ msgstr "" +#~ " \\g [ФАЙЛ] или ; выполнить запрос\n" +#~ " (и направить результаты в файл или канал |)\n" + +#~ msgid "old_version" +#~ msgstr "старая_версия" + +#~ msgid "using_list" +#~ msgstr "список_USING" + +#~ msgid "from_list" +#~ msgstr "список_FROM" + #~ msgid "child process was terminated by signal %s" #~ msgstr "дочерний процесс завершён по сигналу %s" diff --git a/src/bin/psql/po/sv.po b/src/bin/psql/po/sv.po index 934e15e2de075..3d783d72fd4b7 100644 --- a/src/bin/psql/po/sv.po +++ b/src/bin/psql/po/sv.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-04-11 01:14+0000\n" -"PO-Revision-Date: 2020-04-15 12:46+0200\n" +"POT-Creation-Date: 2020-08-27 21:44+0000\n" +"PO-Revision-Date: 2020-08-30 10:09+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -69,7 +69,7 @@ msgid "pclose failed: %m" msgstr "pclose misslyckades: %m" #: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 -#: command.c:1255 input.c:227 mainloop.c:81 mainloop.c:403 +#: command.c:1255 input.c:227 mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" msgstr "slut på minne" @@ -129,6 +129,19 @@ msgstr "barnprocess terminerades av signal %d: %s" msgid "child process exited with unrecognized status %d" msgstr "barnprocess avslutade med okänd statuskod %d" +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Förfrågan om avbrytning skickad\n" + +#: ../../fe_utils/cancel.c:165 +msgid "Could not send cancel request: " +msgstr "Kunde inte skicka förfrågan om avbrytning: " + +#: ../../fe_utils/cancel.c:210 +#, c-format +msgid "Could not send cancel request: %s" +msgstr "Kunde inte skicka förfrågan om avbrytning: %s" + #: ../../fe_utils/print.c:350 #, c-format msgid "(%lu row)" @@ -863,8 +876,8 @@ msgstr "Kolumn" #: common.c:1503 describe.c:177 describe.c:393 describe.c:411 describe.c:456 #: describe.c:473 describe.c:962 describe.c:1126 describe.c:1711 -#: describe.c:1735 describe.c:2002 describe.c:3705 describe.c:3915 -#: describe.c:4148 describe.c:5354 +#: describe.c:1735 describe.c:2002 describe.c:3719 describe.c:3929 +#: describe.c:4162 describe.c:5368 msgid "Type" msgstr "Typ" @@ -989,20 +1002,20 @@ msgid "\\crosstabview: column name not found: \"%s\"" msgstr "\\crosstabview: hittar ej kolumnnamn: \"%s\"" #: describe.c:75 describe.c:373 describe.c:678 describe.c:810 describe.c:954 -#: describe.c:1115 describe.c:1187 describe.c:3694 describe.c:3902 -#: describe.c:4146 describe.c:4237 describe.c:4504 describe.c:4664 -#: describe.c:4905 describe.c:4980 describe.c:4991 describe.c:5053 -#: describe.c:5478 describe.c:5561 +#: describe.c:1115 describe.c:1187 describe.c:3708 describe.c:3916 +#: describe.c:4160 describe.c:4251 describe.c:4518 describe.c:4678 +#: describe.c:4919 describe.c:4994 describe.c:5005 describe.c:5067 +#: describe.c:5492 describe.c:5575 msgid "Schema" msgstr "Schema" #: describe.c:76 describe.c:174 describe.c:242 describe.c:250 describe.c:374 #: describe.c:679 describe.c:811 describe.c:872 describe.c:955 describe.c:1188 -#: describe.c:3695 describe.c:3903 describe.c:4069 describe.c:4147 -#: describe.c:4238 describe.c:4317 describe.c:4505 describe.c:4589 -#: describe.c:4665 describe.c:4906 describe.c:4981 describe.c:4992 -#: describe.c:5054 describe.c:5251 describe.c:5335 describe.c:5559 -#: describe.c:5731 describe.c:5971 +#: describe.c:3709 describe.c:3917 describe.c:4083 describe.c:4161 +#: describe.c:4252 describe.c:4331 describe.c:4519 describe.c:4603 +#: describe.c:4679 describe.c:4920 describe.c:4995 describe.c:5006 +#: describe.c:5068 describe.c:5265 describe.c:5349 describe.c:5573 +#: describe.c:5745 describe.c:5985 msgid "Name" msgstr "Namn" @@ -1017,12 +1030,12 @@ msgstr "Argumentdatatyp" #: describe.c:110 describe.c:117 describe.c:185 describe.c:273 describe.c:513 #: describe.c:727 describe.c:826 describe.c:897 describe.c:1190 describe.c:2020 -#: describe.c:3482 describe.c:3755 describe.c:3949 describe.c:4100 -#: describe.c:4174 describe.c:4247 describe.c:4330 describe.c:4413 -#: describe.c:4532 describe.c:4598 describe.c:4666 describe.c:4807 -#: describe.c:4849 describe.c:4922 describe.c:4984 describe.c:4993 -#: describe.c:5055 describe.c:5277 describe.c:5357 describe.c:5492 -#: describe.c:5562 large_obj.c:290 large_obj.c:300 +#: describe.c:3496 describe.c:3769 describe.c:3963 describe.c:4114 +#: describe.c:4188 describe.c:4261 describe.c:4344 describe.c:4427 +#: describe.c:4546 describe.c:4612 describe.c:4680 describe.c:4821 +#: describe.c:4863 describe.c:4936 describe.c:4998 describe.c:5007 +#: describe.c:5069 describe.c:5291 describe.c:5371 describe.c:5506 +#: describe.c:5576 large_obj.c:290 large_obj.c:300 msgid "Description" msgstr "Beskrivning" @@ -1039,11 +1052,11 @@ msgstr "Servern (version %s) stöder inte accessmetoder." msgid "Index" msgstr "Index" -#: describe.c:176 describe.c:3713 describe.c:3928 describe.c:5479 +#: describe.c:176 describe.c:3727 describe.c:3942 describe.c:5493 msgid "Table" msgstr "Tabell" -#: describe.c:184 describe.c:5256 +#: describe.c:184 describe.c:5270 msgid "Handler" msgstr "Hanterare" @@ -1057,10 +1070,10 @@ msgid "The server (version %s) does not support tablespaces." msgstr "Servern (version %s) stöder inte tabellutrymmen." #: describe.c:243 describe.c:251 describe.c:501 describe.c:717 describe.c:873 -#: describe.c:1114 describe.c:3706 describe.c:3904 describe.c:4073 -#: describe.c:4319 describe.c:4590 describe.c:5252 describe.c:5336 -#: describe.c:5732 describe.c:5869 describe.c:5972 describe.c:6087 -#: describe.c:6161 large_obj.c:289 +#: describe.c:1114 describe.c:3720 describe.c:3918 describe.c:4087 +#: describe.c:4333 describe.c:4604 describe.c:5266 describe.c:5350 +#: describe.c:5746 describe.c:5883 describe.c:5986 describe.c:6101 +#: describe.c:6180 large_obj.c:289 msgid "Owner" msgstr "Ägare" @@ -1068,11 +1081,11 @@ msgstr "Ägare" msgid "Location" msgstr "Plats" -#: describe.c:263 describe.c:3299 +#: describe.c:263 describe.c:3313 msgid "Options" msgstr "Alternativ" -#: describe.c:268 describe.c:690 describe.c:889 describe.c:3747 describe.c:3751 +#: describe.c:268 describe.c:690 describe.c:889 describe.c:3761 describe.c:3765 msgid "Size" msgstr "Storlek" @@ -1179,11 +1192,11 @@ msgstr "Element" msgid "List of data types" msgstr "Lista med datatyper" -#: describe.c:812 describe.c:6329 +#: describe.c:812 msgid "Left arg type" msgstr "Vänster argumenttyp" -#: describe.c:813 describe.c:6330 +#: describe.c:813 msgid "Right arg type" msgstr "Höger argumenttyp" @@ -1191,8 +1204,8 @@ msgstr "Höger argumenttyp" msgid "Result type" msgstr "Resultattyp" -#: describe.c:819 describe.c:4325 describe.c:4390 describe.c:4396 -#: describe.c:4806 +#: describe.c:819 describe.c:4339 describe.c:4404 describe.c:4410 +#: describe.c:4820 describe.c:6352 describe.c:6356 msgid "Function" msgstr "Funktion" @@ -1204,11 +1217,11 @@ msgstr "Lista med operatorer" msgid "Encoding" msgstr "Kodning" -#: describe.c:879 describe.c:4506 +#: describe.c:879 describe.c:4520 msgid "Collate" msgstr "Jämförelse" -#: describe.c:880 describe.c:4507 +#: describe.c:880 describe.c:4521 msgid "Ctype" msgstr "Ctype" @@ -1220,27 +1233,27 @@ msgstr "Tabellutrymme" msgid "List of databases" msgstr "Lista med databaser" -#: describe.c:956 describe.c:1117 describe.c:3696 +#: describe.c:956 describe.c:1117 describe.c:3710 msgid "table" msgstr "tabell" -#: describe.c:957 describe.c:3697 +#: describe.c:957 describe.c:3711 msgid "view" msgstr "vy" -#: describe.c:958 describe.c:3698 +#: describe.c:958 describe.c:3712 msgid "materialized view" msgstr "materialiserad vy" -#: describe.c:959 describe.c:1119 describe.c:3700 +#: describe.c:959 describe.c:1119 describe.c:3714 msgid "sequence" msgstr "sekvens" -#: describe.c:960 describe.c:3702 +#: describe.c:960 describe.c:3716 msgid "foreign table" msgstr "främmande tabell" -#: describe.c:961 describe.c:3703 describe.c:3913 +#: describe.c:961 describe.c:3717 describe.c:3927 msgid "partitioned table" msgstr "partitionerad tabell" @@ -1252,7 +1265,7 @@ msgstr "Kolumnrättigheter" msgid "Policies" msgstr "Policys" -#: describe.c:1070 describe.c:6028 describe.c:6032 +#: describe.c:1070 describe.c:6042 describe.c:6046 msgid "Access privileges" msgstr "Åtkomsträttigheter" @@ -1305,12 +1318,12 @@ msgstr "rule" msgid "Object descriptions" msgstr "Objektbeskrivningar" -#: describe.c:1402 describe.c:3819 +#: describe.c:1402 describe.c:3833 #, c-format msgid "Did not find any relation named \"%s\"." msgstr "Kunde inte hitta en relation med namn \"%s\"." -#: describe.c:1405 describe.c:3822 +#: describe.c:1405 describe.c:3836 #, c-format msgid "Did not find any relations." msgstr "Kunde inte hitta några relationer." @@ -1336,13 +1349,13 @@ msgstr "Maximum" msgid "Increment" msgstr "Ökning" -#: describe.c:1716 describe.c:1740 describe.c:1871 describe.c:4241 -#: describe.c:4407 describe.c:4521 describe.c:4526 describe.c:6075 +#: describe.c:1716 describe.c:1740 describe.c:1871 describe.c:4255 +#: describe.c:4421 describe.c:4535 describe.c:4540 describe.c:6089 msgid "yes" msgstr "ja" -#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4241 -#: describe.c:4404 describe.c:4521 describe.c:6076 +#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4255 +#: describe.c:4418 describe.c:4535 describe.c:6090 msgid "no" msgstr "nej" @@ -1444,15 +1457,15 @@ msgstr "Ologgad partitionerad tabell \"%s.%s\"" msgid "Partitioned table \"%s.%s\"" msgstr "Partitionerad tabell \"%s.%s\"" -#: describe.c:2005 describe.c:4154 +#: describe.c:2005 describe.c:4168 msgid "Collation" msgstr "Jämförelse" -#: describe.c:2006 describe.c:4161 +#: describe.c:2006 describe.c:4175 msgid "Nullable" msgstr "Nullbar" -#: describe.c:2007 describe.c:4162 +#: describe.c:2007 describe.c:4176 msgid "Default" msgstr "Standard" @@ -1464,8 +1477,8 @@ msgstr "Nyckel?" msgid "Definition" msgstr "Definition" -#: describe.c:2014 describe.c:5272 describe.c:5356 describe.c:5427 -#: describe.c:5491 +#: describe.c:2014 describe.c:5286 describe.c:5370 describe.c:5441 +#: describe.c:5505 msgid "FDW options" msgstr "FDW-alternativ" @@ -1603,498 +1616,498 @@ msgstr "Publiceringar:" msgid "View definition:" msgstr "Vydefinition:" -#: describe.c:3035 +#: describe.c:3043 msgid "Triggers:" msgstr "Utlösare:" -#: describe.c:3039 +#: describe.c:3047 msgid "Disabled user triggers:" msgstr "Avstängda användarutlösare:" -#: describe.c:3041 +#: describe.c:3049 msgid "Disabled triggers:" msgstr "Avstängda utlösare:" -#: describe.c:3044 +#: describe.c:3052 msgid "Disabled internal triggers:" msgstr "Avstängda interna utlösare:" -#: describe.c:3047 +#: describe.c:3055 msgid "Triggers firing always:" msgstr "Utlösare som alltid aktiveras:" -#: describe.c:3050 +#: describe.c:3058 msgid "Triggers firing on replica only:" msgstr "Utlösare som aktiveras enbart på replika:" -#: describe.c:3116 +#: describe.c:3130 #, c-format msgid "Server: %s" msgstr "Server: %s" -#: describe.c:3124 +#: describe.c:3138 #, c-format msgid "FDW options: (%s)" msgstr "FDW-alternativ: (%s)" -#: describe.c:3145 +#: describe.c:3159 msgid "Inherits" msgstr "Ärver" -#: describe.c:3205 +#: describe.c:3219 #, c-format msgid "Number of partitions: %d" msgstr "Antal partitioner: %d" -#: describe.c:3214 +#: describe.c:3228 #, c-format msgid "Number of partitions: %d (Use \\d+ to list them.)" msgstr "Antal partitioner: %d (Använd \\d+ för att lista dem.)" -#: describe.c:3216 +#: describe.c:3230 #, c-format msgid "Number of child tables: %d (Use \\d+ to list them.)" msgstr "Antal barntabeller: %d (Använd \\d+ för att lista dem.)" -#: describe.c:3223 +#: describe.c:3237 msgid "Child tables" msgstr "Barntabeller" -#: describe.c:3223 +#: describe.c:3237 msgid "Partitions" msgstr "Partitioner" -#: describe.c:3252 +#: describe.c:3266 #, c-format msgid "Typed table of type: %s" msgstr "Typad tabell av typ: %s" -#: describe.c:3268 +#: describe.c:3282 msgid "Replica Identity" msgstr "Replikaidentitet" -#: describe.c:3281 +#: describe.c:3295 msgid "Has OIDs: yes" msgstr "Har OID:er: ja" -#: describe.c:3290 +#: describe.c:3304 #, c-format msgid "Access method: %s" msgstr "Accessmetod: %s" -#: describe.c:3370 +#: describe.c:3384 #, c-format msgid "Tablespace: \"%s\"" msgstr "Tabellutrymme: \"%s\"" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:3382 +#: describe.c:3396 #, c-format msgid ", tablespace \"%s\"" msgstr ", tabellutrymme: \"%s\"" -#: describe.c:3475 +#: describe.c:3489 msgid "List of roles" msgstr "Lista med roller" -#: describe.c:3477 +#: describe.c:3491 msgid "Role name" msgstr "Rollnamn" -#: describe.c:3478 +#: describe.c:3492 msgid "Attributes" msgstr "Attribut" -#: describe.c:3479 +#: describe.c:3493 msgid "Member of" msgstr "Medlem av" -#: describe.c:3490 +#: describe.c:3504 msgid "Superuser" msgstr "Superanvändare" -#: describe.c:3493 +#: describe.c:3507 msgid "No inheritance" msgstr "Inget arv" -#: describe.c:3496 +#: describe.c:3510 msgid "Create role" msgstr "Skapa roll" -#: describe.c:3499 +#: describe.c:3513 msgid "Create DB" msgstr "Skapa DB" -#: describe.c:3502 +#: describe.c:3516 msgid "Cannot login" msgstr "Kan inte logga in" -#: describe.c:3506 +#: describe.c:3520 msgid "Replication" msgstr "Replikering" -#: describe.c:3510 +#: describe.c:3524 msgid "Bypass RLS" msgstr "Hopp över RLS" -#: describe.c:3519 +#: describe.c:3533 msgid "No connections" msgstr "Inga uppkopplingar" -#: describe.c:3521 +#: describe.c:3535 #, c-format msgid "%d connection" msgid_plural "%d connections" msgstr[0] "%d uppkoppling" msgstr[1] "%d uppkopplingar" -#: describe.c:3531 +#: describe.c:3545 msgid "Password valid until " msgstr "Lösenord giltigt till " -#: describe.c:3581 +#: describe.c:3595 #, c-format msgid "The server (version %s) does not support per-database role settings." msgstr "Servern (version %s) stöder inte rollinställningar per databas." -#: describe.c:3594 +#: describe.c:3608 msgid "Role" msgstr "Roll" -#: describe.c:3595 +#: describe.c:3609 msgid "Database" msgstr "Databas" -#: describe.c:3596 +#: describe.c:3610 msgid "Settings" msgstr "Inställningar" -#: describe.c:3617 +#: describe.c:3631 #, c-format msgid "Did not find any settings for role \"%s\" and database \"%s\"." msgstr "Kunde inte hitta några inställningar för roll \"%s\" och databas \"%s\"." -#: describe.c:3620 +#: describe.c:3634 #, c-format msgid "Did not find any settings for role \"%s\"." msgstr "Kunde inte hitta några inställningar för roll \"%s\"." -#: describe.c:3623 +#: describe.c:3637 #, c-format msgid "Did not find any settings." msgstr "Kunde inte hitta några inställningar." -#: describe.c:3628 +#: describe.c:3642 msgid "List of settings" msgstr "Lista med inställningar" -#: describe.c:3699 +#: describe.c:3713 msgid "index" msgstr "index" -#: describe.c:3701 +#: describe.c:3715 msgid "special" msgstr "särskild" -#: describe.c:3704 describe.c:3914 +#: describe.c:3718 describe.c:3928 msgid "partitioned index" msgstr "partitionerat index" -#: describe.c:3728 +#: describe.c:3742 msgid "permanent" msgstr "permanent" -#: describe.c:3729 +#: describe.c:3743 msgid "temporary" msgstr "temporär" -#: describe.c:3730 +#: describe.c:3744 msgid "unlogged" msgstr "ologgad" -#: describe.c:3731 +#: describe.c:3745 msgid "Persistence" msgstr "Persistens" -#: describe.c:3827 +#: describe.c:3841 msgid "List of relations" msgstr "Lista med relationer" -#: describe.c:3875 +#: describe.c:3889 #, c-format msgid "The server (version %s) does not support declarative table partitioning." msgstr "Servern (version %s) stöder inte deklarativ tabellpartitionering." -#: describe.c:3886 +#: describe.c:3900 msgid "List of partitioned indexes" msgstr "Lista med partitionerade index" -#: describe.c:3888 +#: describe.c:3902 msgid "List of partitioned tables" msgstr "Lista med partitionerade tabeller" -#: describe.c:3892 +#: describe.c:3906 msgid "List of partitioned relations" msgstr "Lista med partitionerade relationer" -#: describe.c:3923 +#: describe.c:3937 msgid "Parent name" msgstr "Föräldranamn" -#: describe.c:3936 +#: describe.c:3950 msgid "Leaf partition size" msgstr "Partitionsstorlek av löv" -#: describe.c:3939 describe.c:3945 +#: describe.c:3953 describe.c:3959 msgid "Total size" msgstr "Total storlek" -#: describe.c:4077 +#: describe.c:4091 msgid "Trusted" msgstr "Tillförlitlig" -#: describe.c:4085 +#: describe.c:4099 msgid "Internal language" msgstr "Internt språk" -#: describe.c:4086 +#: describe.c:4100 msgid "Call handler" msgstr "Anropshanterare" -#: describe.c:4087 describe.c:5259 +#: describe.c:4101 describe.c:5273 msgid "Validator" msgstr "Validerare" -#: describe.c:4090 +#: describe.c:4104 msgid "Inline handler" msgstr "Inline-hanterare" -#: describe.c:4118 +#: describe.c:4132 msgid "List of languages" msgstr "Lista med språk" -#: describe.c:4163 +#: describe.c:4177 msgid "Check" msgstr "Check" -#: describe.c:4205 +#: describe.c:4219 msgid "List of domains" msgstr "Lista med domäner" -#: describe.c:4239 +#: describe.c:4253 msgid "Source" msgstr "Källa" -#: describe.c:4240 +#: describe.c:4254 msgid "Destination" msgstr "Mål" -#: describe.c:4242 describe.c:6077 +#: describe.c:4256 describe.c:6091 msgid "Default?" msgstr "Standard?" -#: describe.c:4279 +#: describe.c:4293 msgid "List of conversions" msgstr "Lista med konverteringar" -#: describe.c:4318 +#: describe.c:4332 msgid "Event" msgstr "Händelse" -#: describe.c:4320 +#: describe.c:4334 msgid "enabled" msgstr "påslagen" -#: describe.c:4321 +#: describe.c:4335 msgid "replica" msgstr "replika" -#: describe.c:4322 +#: describe.c:4336 msgid "always" msgstr "alltid" -#: describe.c:4323 +#: describe.c:4337 msgid "disabled" msgstr "avstängd" -#: describe.c:4324 describe.c:5973 +#: describe.c:4338 describe.c:5987 msgid "Enabled" msgstr "Påslagen" -#: describe.c:4326 +#: describe.c:4340 msgid "Tags" msgstr "Etiketter" -#: describe.c:4345 +#: describe.c:4359 msgid "List of event triggers" msgstr "Lista med händelseutlösare" -#: describe.c:4374 +#: describe.c:4388 msgid "Source type" msgstr "Källtyp" -#: describe.c:4375 +#: describe.c:4389 msgid "Target type" msgstr "Måltyp" -#: describe.c:4406 +#: describe.c:4420 msgid "in assignment" msgstr "i tilldelning" -#: describe.c:4408 +#: describe.c:4422 msgid "Implicit?" msgstr "Implicit?" -#: describe.c:4463 +#: describe.c:4477 msgid "List of casts" msgstr "Lista med typomvandlingar" -#: describe.c:4491 +#: describe.c:4505 #, c-format msgid "The server (version %s) does not support collations." msgstr "Servern (version %s) stöder inte jämförelser (collations)." -#: describe.c:4512 describe.c:4516 +#: describe.c:4526 describe.c:4530 msgid "Provider" msgstr "Leverantör" -#: describe.c:4522 describe.c:4527 +#: describe.c:4536 describe.c:4541 msgid "Deterministic?" msgstr "Deterministisk?" -#: describe.c:4562 +#: describe.c:4576 msgid "List of collations" msgstr "Lista med jämförelser (collations)" -#: describe.c:4621 +#: describe.c:4635 msgid "List of schemas" msgstr "Lista med scheman" -#: describe.c:4646 describe.c:4893 describe.c:4964 describe.c:5035 +#: describe.c:4660 describe.c:4907 describe.c:4978 describe.c:5049 #, c-format msgid "The server (version %s) does not support full text search." msgstr "Servern (version %s) stöder inte fulltextsökning." -#: describe.c:4681 +#: describe.c:4695 msgid "List of text search parsers" msgstr "Lista med textsökparsrar" -#: describe.c:4726 +#: describe.c:4740 #, c-format msgid "Did not find any text search parser named \"%s\"." msgstr "Kunde inte hitta en textsökparser med namn \"%s\"." -#: describe.c:4729 +#: describe.c:4743 #, c-format msgid "Did not find any text search parsers." msgstr "Kunde inte hitta några textsökparsrar." -#: describe.c:4804 +#: describe.c:4818 msgid "Start parse" msgstr "Starta parsning" -#: describe.c:4805 +#: describe.c:4819 msgid "Method" msgstr "Metod" -#: describe.c:4809 +#: describe.c:4823 msgid "Get next token" msgstr "Hämta nästa symbol" -#: describe.c:4811 +#: describe.c:4825 msgid "End parse" msgstr "Avsluta parsning" -#: describe.c:4813 +#: describe.c:4827 msgid "Get headline" msgstr "Hämta rubrik" -#: describe.c:4815 +#: describe.c:4829 msgid "Get token types" msgstr "Hämta symboltyper" -#: describe.c:4826 +#: describe.c:4840 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "Textsökparser \"%s.%s\"" -#: describe.c:4829 +#: describe.c:4843 #, c-format msgid "Text search parser \"%s\"" msgstr "Textsökparser \"%s\"" -#: describe.c:4848 +#: describe.c:4862 msgid "Token name" msgstr "Symbolnamn" -#: describe.c:4859 +#: describe.c:4873 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "Symboltyper för parser \"%s.%s\"" -#: describe.c:4862 +#: describe.c:4876 #, c-format msgid "Token types for parser \"%s\"" msgstr "Symboltyper för parser \"%s\"" -#: describe.c:4916 +#: describe.c:4930 msgid "Template" msgstr "Mall" -#: describe.c:4917 +#: describe.c:4931 msgid "Init options" msgstr "Initieringsalternativ" -#: describe.c:4939 +#: describe.c:4953 msgid "List of text search dictionaries" msgstr "Lista med textsökordlistor" -#: describe.c:4982 +#: describe.c:4996 msgid "Init" msgstr "Init" -#: describe.c:4983 +#: describe.c:4997 msgid "Lexize" msgstr "Symboluppdelning" -#: describe.c:5010 +#: describe.c:5024 msgid "List of text search templates" msgstr "Lista med textsökmallar" -#: describe.c:5070 +#: describe.c:5084 msgid "List of text search configurations" msgstr "Lista med textsökkonfigurationer" -#: describe.c:5116 +#: describe.c:5130 #, c-format msgid "Did not find any text search configuration named \"%s\"." msgstr "Kunde inte hitta en textsökkonfiguration med namn \"%s\"." -#: describe.c:5119 +#: describe.c:5133 #, c-format msgid "Did not find any text search configurations." msgstr "Kunde inte hitta några textsökkonfigurationer." -#: describe.c:5185 +#: describe.c:5199 msgid "Token" msgstr "Symbol" -#: describe.c:5186 +#: describe.c:5200 msgid "Dictionaries" msgstr "Ordlistor" -#: describe.c:5197 +#: describe.c:5211 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "Textsökkonfiguration \"%s.%s\"" -#: describe.c:5200 +#: describe.c:5214 #, c-format msgid "Text search configuration \"%s\"" msgstr "Textsökkonfiguration \"%s\"" -#: describe.c:5204 +#: describe.c:5218 #, c-format msgid "" "\n" @@ -2103,7 +2116,7 @@ msgstr "" "\n" "Parser: \"%s.%s\"" -#: describe.c:5207 +#: describe.c:5221 #, c-format msgid "" "\n" @@ -2112,234 +2125,234 @@ msgstr "" "\n" "Parser: \"%s\"" -#: describe.c:5241 +#: describe.c:5255 #, c-format msgid "The server (version %s) does not support foreign-data wrappers." msgstr "Servern (version %s) stöder inte främmande data-omvandlare." -#: describe.c:5299 +#: describe.c:5313 msgid "List of foreign-data wrappers" msgstr "Lista med främmande data-omvandlare" -#: describe.c:5324 +#: describe.c:5338 #, c-format msgid "The server (version %s) does not support foreign servers." msgstr "Servern (version %s) stöder inte främmande servrar." -#: describe.c:5337 +#: describe.c:5351 msgid "Foreign-data wrapper" msgstr "Främmande data-omvandlare" -#: describe.c:5355 describe.c:5560 +#: describe.c:5369 describe.c:5574 msgid "Version" msgstr "Version" -#: describe.c:5381 +#: describe.c:5395 msgid "List of foreign servers" msgstr "Lista med främmande servrar" -#: describe.c:5406 +#: describe.c:5420 #, c-format msgid "The server (version %s) does not support user mappings." msgstr "Servern (version %s) stöder inte användarmappningar." -#: describe.c:5416 describe.c:5480 +#: describe.c:5430 describe.c:5494 msgid "Server" msgstr "Server" -#: describe.c:5417 +#: describe.c:5431 msgid "User name" msgstr "Användarnamn" -#: describe.c:5442 +#: describe.c:5456 msgid "List of user mappings" msgstr "Lista av användarmappningar" -#: describe.c:5467 +#: describe.c:5481 #, c-format msgid "The server (version %s) does not support foreign tables." msgstr "Servern (version %s) stöder inte främmande tabeller." -#: describe.c:5520 +#: describe.c:5534 msgid "List of foreign tables" msgstr "Lista med främmande tabeller" -#: describe.c:5545 describe.c:5602 +#: describe.c:5559 describe.c:5616 #, c-format msgid "The server (version %s) does not support extensions." msgstr "Servern (version %s) stöder inte utökningar." -#: describe.c:5577 +#: describe.c:5591 msgid "List of installed extensions" msgstr "Lista med installerade utökningar" -#: describe.c:5630 +#: describe.c:5644 #, c-format msgid "Did not find any extension named \"%s\"." msgstr "Kunde inte hitta en utökning med namn \"%s\"." -#: describe.c:5633 +#: describe.c:5647 #, c-format msgid "Did not find any extensions." msgstr "Kunde inte hitta några utökningar." -#: describe.c:5677 +#: describe.c:5691 msgid "Object description" msgstr "Objektbeskrivning" -#: describe.c:5687 +#: describe.c:5701 #, c-format msgid "Objects in extension \"%s\"" msgstr "Objekt i utökning \"%s\"" -#: describe.c:5716 describe.c:5792 +#: describe.c:5730 describe.c:5806 #, c-format msgid "The server (version %s) does not support publications." msgstr "Servern (version %s) stöder inte publiceringar." -#: describe.c:5733 describe.c:5870 +#: describe.c:5747 describe.c:5884 msgid "All tables" msgstr "Alla tabeller" -#: describe.c:5734 describe.c:5871 +#: describe.c:5748 describe.c:5885 msgid "Inserts" msgstr "Insättningar" -#: describe.c:5735 describe.c:5872 +#: describe.c:5749 describe.c:5886 msgid "Updates" msgstr "Uppdateringar" -#: describe.c:5736 describe.c:5873 +#: describe.c:5750 describe.c:5887 msgid "Deletes" msgstr "Borttagningar" -#: describe.c:5740 describe.c:5875 +#: describe.c:5754 describe.c:5889 msgid "Truncates" msgstr "Trunkerar" -#: describe.c:5744 describe.c:5877 +#: describe.c:5758 describe.c:5891 msgid "Via root" msgstr "Via root" -#: describe.c:5761 +#: describe.c:5775 msgid "List of publications" msgstr "Lista med publiceringar" -#: describe.c:5834 +#: describe.c:5848 #, c-format msgid "Did not find any publication named \"%s\"." msgstr "Kunde inte hitta någon publicering med namn \"%s\"." -#: describe.c:5837 +#: describe.c:5851 #, c-format msgid "Did not find any publications." msgstr "Kunde inte hitta några publiceringar." -#: describe.c:5866 +#: describe.c:5880 #, c-format msgid "Publication %s" msgstr "Publicering %s" -#: describe.c:5914 +#: describe.c:5928 msgid "Tables:" msgstr "Tabeller:" -#: describe.c:5958 +#: describe.c:5972 #, c-format msgid "The server (version %s) does not support subscriptions." msgstr "Denna server (version %s) stöder inte prenumerationer." -#: describe.c:5974 +#: describe.c:5988 msgid "Publication" msgstr "Publicering" -#: describe.c:5981 +#: describe.c:5995 msgid "Synchronous commit" msgstr "Synkron commit" -#: describe.c:5982 +#: describe.c:5996 msgid "Conninfo" msgstr "Förbindelseinfo" -#: describe.c:6004 +#: describe.c:6018 msgid "List of subscriptions" msgstr "Lista med prenumerationer" -#: describe.c:6071 describe.c:6155 describe.c:6241 describe.c:6327 +#: describe.c:6085 describe.c:6174 describe.c:6260 describe.c:6343 msgid "AM" msgstr "AM" -#: describe.c:6072 +#: describe.c:6086 msgid "Input type" msgstr "Indatatyp" -#: describe.c:6073 +#: describe.c:6087 msgid "Storage type" msgstr "Lagringstyp" -#: describe.c:6074 +#: describe.c:6088 msgid "Operator class" msgstr "Operatorklass" -#: describe.c:6086 describe.c:6156 describe.c:6328 +#: describe.c:6100 describe.c:6175 describe.c:6261 describe.c:6344 msgid "Operator family" msgstr "Operatorfamilj" -#: describe.c:6113 +#: describe.c:6133 msgid "List of operator classes" msgstr "Lista med operatorklasser" -#: describe.c:6157 +#: describe.c:6176 msgid "Applicable types" msgstr "Applicerbara typer" -#: describe.c:6192 +#: describe.c:6215 msgid "List of operator families" msgstr "Lista med operatorfamiljer" -#: describe.c:6242 -msgid "Opfamily Name" -msgstr "Opfamiljenamn" - -#: describe.c:6243 +#: describe.c:6262 msgid "Operator" msgstr "Operator" -#: describe.c:6253 +#: describe.c:6263 msgid "Strategy" msgstr "Strategi" -#: describe.c:6254 +#: describe.c:6264 msgid "ordering" msgstr "ordning" -#: describe.c:6255 +#: describe.c:6265 msgid "search" msgstr "sök" -#: describe.c:6256 +#: describe.c:6266 msgid "Purpose" msgstr "Ändamål" -#: describe.c:6257 +#: describe.c:6271 msgid "Sort opfamily" msgstr "Sortering-opfamilj" -#: describe.c:6285 +#: describe.c:6302 msgid "List of operators of operator families" msgstr "Lista med operatorer i operatorfamiljer" -#: describe.c:6331 +#: describe.c:6345 +msgid "Registered left type" +msgstr "Registrerad vänstertyp" + +#: describe.c:6346 +msgid "Registered right type" +msgstr "Registrerad högertyp" + +#: describe.c:6347 msgid "Number" msgstr "Nummer" -#: describe.c:6332 -msgid "Proc name" -msgstr "Proc-namn" - -#: describe.c:6358 -msgid "List of procedures of operator families" -msgstr "Lista med procedurer i operatorfamilj" +#: describe.c:6383 +msgid "List of support functions of operator families" +msgstr "Lista med supportfunktioner i operatorfamiljer" #: help.c:73 #, c-format @@ -2660,13 +2673,12 @@ msgstr " \\errverbose visa senste felmeddelande vid maximal verbosit #: help.c:178 #, c-format -msgid " \\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);\n" -msgstr " \\g [(FLAGGOR)] [FIL] kör frågan (och skicka resultatet till fil eller |rör);\n" - -#: help.c:179 -#, c-format -msgid " \\g with no arguments is equivalent to a semicolon\n" -msgstr " \\g utan argument är ekvivalent med ett semikolon\n" +msgid "" +" \\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);\n" +" \\g with no arguments is equivalent to a semicolon\n" +msgstr "" +" \\g [(FLAGGOR)] [FIL] kör frågan (och skicka resultatet till fil eller |rör);\n" +" \\g utan argument är samma som ett semikolon\n" #: help.c:180 #, c-format @@ -2860,23 +2872,23 @@ msgstr " \\dA[+] [MALL] lista accessmetoder\n" #: help.c:231 #, c-format -msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" -msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] lista operatorklasser\n" +msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" +msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] lista operatorklasser\n" #: help.c:232 #, c-format -msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" -msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] lista operatorfamiljer\n" +msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" +msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] lista operatorfamiljer\n" #: help.c:233 #, c-format -msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" -msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] lista operatorer i operatorfamiljer\n" +msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" +msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] lista operatorer i operatorfamiljer\n" #: help.c:234 #, c-format -msgid " \\dAp [AMPTRN [OPFPTRN]] list procedures of operator families\n" -msgstr " \\dAp [AMPTRN [OPFPTRN]] lista procedurer i operatorfamiljer\n" +msgid " \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" +msgstr " \\dAp [AMPTRN [OPFPTRN]] lista supportfunktioner i operatorfamiljer\n" #: help.c:235 #, c-format @@ -3998,19 +4010,19 @@ msgstr "" "Indatan är en PostgreSQL-specifik dump.\n" "Använd kommandoradsprogrammet pg_restore för att läsa in denna dump till databasen.\n" -#: mainloop.c:299 +#: mainloop.c:298 msgid "Use \\? for help or press control-C to clear the input buffer." msgstr "Använd \\? för hjälp eller tryck control-C för att nollställa inmatningsbufferten." -#: mainloop.c:301 +#: mainloop.c:300 msgid "Use \\? for help." msgstr "Använd \\? för hjälp." -#: mainloop.c:305 +#: mainloop.c:304 msgid "You are using psql, the command-line interface to PostgreSQL." msgstr "Du använder psql, den interaktiva PostgreSQL-terminalen." -#: mainloop.c:306 +#: mainloop.c:305 #, c-format msgid "" "Type: \\copyright for distribution terms\n" @@ -4025,24 +4037,24 @@ msgstr "" " \\g eller avsluta med semikolon för att köra en fråga\n" " \\q för att avsluta\n" -#: mainloop.c:330 +#: mainloop.c:329 msgid "Use \\q to quit." msgstr "Använd \\q för att avsluta." -#: mainloop.c:333 mainloop.c:357 +#: mainloop.c:332 mainloop.c:356 msgid "Use control-D to quit." msgstr "Använd control-D för att avsluta." -#: mainloop.c:335 mainloop.c:359 +#: mainloop.c:334 mainloop.c:358 msgid "Use control-C to quit." msgstr "Använd control-C för att avsluta." -#: mainloop.c:466 mainloop.c:614 +#: mainloop.c:465 mainloop.c:613 #, c-format msgid "query ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "fråga ignorerat; använd \\endif eller Ctrl-C för att avsluta aktuellt \\if-block" -#: mainloop.c:632 +#: mainloop.c:631 #, c-format msgid "reached EOF without finding closing \\endif(s)" msgstr "kom till EOF utan att hitta avslutande \\endif" @@ -6342,7 +6354,7 @@ msgstr "extra kommandoradsargument \"%s\" ignorerad" msgid "could not find own program executable" msgstr "kunde inte hitta det egna programmets körbara fil" -#: tab-complete.c:4636 +#: tab-complete.c:4640 #, c-format msgid "" "tab completion query failed: %s\n" @@ -6376,3 +6388,15 @@ msgid "" msgstr "" "okänt värde \"%s\" för \"%s\"\n" "Tillgängliga värden är: %s." + +#~ msgid "Opfamily Name" +#~ msgstr "Opfamiljenamn" + +#~ msgid "Proc name" +#~ msgstr "Proc-namn" + +#~ msgid "List of procedures of operator families" +#~ msgstr "Lista med procedurer i operatorfamilj" + +#~ msgid " \\g with no arguments is equivalent to a semicolon\n" +#~ msgstr " \\g utan argument är ekvivalent med ett semikolon\n" diff --git a/src/bin/psql/po/uk.po b/src/bin/psql/po/uk.po index f273f2e7ed252..5037f3a245735 100644 --- a/src/bin/psql/po/uk.po +++ b/src/bin/psql/po/uk.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 15:12+0000\n" -"PO-Revision-Date: 2019-12-20 20:17\n" -"Last-Translator: pasha_golub\n" +"POT-Creation-Date: 2020-09-21 21:14+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" "MIME-Version: 1.0\n" @@ -12,72 +12,74 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" "X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_12_STABLE/psql.pot\n" +"X-Crowdin-File: /DEV_13/psql.pot\n" +"X-Crowdin-File-ID: 526\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "збій: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "помилка: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "попередження: " -#: ../../common/exec.c:138 ../../common/exec.c:255 ../../common/exec.c:301 +#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 #, c-format msgid "could not identify current directory: %m" msgstr "не вдалося визначити поточний каталог: %m" -#: ../../common/exec.c:157 +#: ../../common/exec.c:156 #, c-format msgid "invalid binary \"%s\"" msgstr "невірний бінарний файл \"%s\"" -#: ../../common/exec.c:207 +#: ../../common/exec.c:206 #, c-format msgid "could not read binary \"%s\"" msgstr "неможливо прочитати бінарний файл \"%s\"" -#: ../../common/exec.c:215 +#: ../../common/exec.c:214 #, c-format msgid "could not find a \"%s\" to execute" msgstr "неможливо знайти \"%s\" для виконання" -#: ../../common/exec.c:271 ../../common/exec.c:310 +#: ../../common/exec.c:270 ../../common/exec.c:309 #, c-format msgid "could not change directory to \"%s\": %m" -msgstr "не вдалося змінити каталог в \"%s\": %m" +msgstr "не вдалося змінити каталог на \"%s\": %m" -#: ../../common/exec.c:288 +#: ../../common/exec.c:287 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "не можливо прочитати символічне послання \"%s\": %m" -#: ../../common/exec.c:541 +#: ../../common/exec.c:410 #, c-format msgid "pclose failed: %m" msgstr "помилка pclose: %m" -#: ../../common/exec.c:670 ../../common/exec.c:715 ../../common/exec.c:807 -#: command.c:1218 input.c:228 mainloop.c:82 mainloop.c:386 +#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: command.c:1255 input.c:227 mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" msgstr "недостатньо пам'яті" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "недостатньо пам'яті\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" @@ -87,7 +89,7 @@ msgstr "неможливо дублювати нульовий покажчик msgid "could not look up effective user ID %ld: %s" msgstr "не можу знайти користувача з ефективним ID %ld: %s" -#: ../../common/username.c:45 command.c:555 +#: ../../common/username.c:45 command.c:559 msgid "user does not exist" msgstr "користувача не існує" @@ -126,7 +128,20 @@ msgstr "дочірній процес перервано через сигнал msgid "child process exited with unrecognized status %d" msgstr "дочірній процес завершився з невизнаним статусом %d" -#: ../../fe_utils/print.c:353 +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Запит на скасування відправлений\n" + +#: ../../fe_utils/cancel.c:165 +msgid "Could not send cancel request: " +msgstr "не вдалося надіслати запит на скасування: " + +#: ../../fe_utils/cancel.c:210 +#, c-format +msgid "Could not send cancel request: %s" +msgstr "Не вдалося надіслати скасування запиту: %s" + +#: ../../fe_utils/print.c:350 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" @@ -135,314 +150,319 @@ msgstr[1] "(%lu рядки)" msgstr[2] "(%lu рядків)" msgstr[3] "(%lu рядка)" -#: ../../fe_utils/print.c:3058 +#: ../../fe_utils/print.c:3055 #, c-format msgid "Interrupted\n" msgstr "Перервано\n" -#: ../../fe_utils/print.c:3122 +#: ../../fe_utils/print.c:3119 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "Неможливо додати заголовок до вмісту таблиці: кількість колонок %d перевищено.\n" -#: ../../fe_utils/print.c:3162 +#: ../../fe_utils/print.c:3159 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "Неможливо додати комірку до вмісту таблиці: перевищено загальну кількість комірок %d.\n" -#: ../../fe_utils/print.c:3417 +#: ../../fe_utils/print.c:3414 #, c-format msgid "invalid output format (internal error): %d" msgstr "невірний формат виводу (внутрішня помилка): %d" -#: ../../fe_utils/psqlscan.l:729 +#: ../../fe_utils/psqlscan.l:694 #, c-format msgid "skipping recursive expansion of variable \"%s\"" msgstr "пропуск рекурсивного розгортання змінної \"%s\"" -#: command.c:221 +#: command.c:224 #, c-format msgid "invalid command \\%s" msgstr "Невірна команда \\%s" -#: command.c:223 +#: command.c:226 #, c-format msgid "Try \\? for help." msgstr "Спробуйте \\? для отримання довідки." -#: command.c:241 +#: command.c:244 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: зайвий аргумент \"%s\" проігноровано" -#: command.c:293 +#: command.c:296 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "\\%s команду проігноровано; скористайтесь \\endif або Ctrl-C, щоб вийти з поточного блоку \\if" -#: command.c:553 +#: command.c:557 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "неможливо отримати домашню директорію для користувача ID %ld: %s" -#: command.c:571 +#: command.c:575 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: неможливо змінити директорію на \"%s\": %m" -#: command.c:596 +#: command.c:600 #, c-format msgid "You are currently not connected to a database.\n" msgstr "На даний момент ви від'єднанні від бази даних.\n" -#: command.c:609 +#: command.c:613 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Ви під'єднані до бази даних \"%s\" як користувач \"%s\" за аресою \"%s\" на порту \"%s\".\n" -#: command.c:612 +#: command.c:616 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Ви під'єднані до бази даних \"%s\" як користувач \"%s\" через сокет в \"%s\" на порту \"%s\".\n" -#: command.c:618 +#: command.c:622 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Ви під'єднані до бази даних \"%s\" як користувач \"%s\" на хості \"%s\" (за аресою \"%s\") на порту \"%s\".\n" -#: command.c:621 +#: command.c:625 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Ви під'єднані до бази даних \"%s\" як користувач \"%s\" на хості \"%s\" на порту \"%s\".\n" -#: command.c:930 command.c:1026 command.c:2411 +#: command.c:965 command.c:1061 command.c:2550 #, c-format msgid "no query buffer" msgstr "немає буферу запитів" -#: command.c:963 command.c:4832 +#: command.c:998 command.c:5061 #, c-format msgid "invalid line number: %s" msgstr "невірний номер рядка: %s" -#: command.c:1017 +#: command.c:1052 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "Сервер (версія %s) не пітдримує редагування вихідного коду функцій." -#: command.c:1020 +#: command.c:1055 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "Сервер (версія %s) не підтримує редагування визначення подання." -#: command.c:1102 +#: command.c:1137 msgid "No changes" msgstr "Без змін" -#: command.c:1179 +#: command.c:1216 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "%s: невірне ім'я кодування або не знайдено процедуру конверсії" -#: command.c:1214 command.c:1853 command.c:3109 command.c:4934 common.c:175 -#: common.c:224 common.c:535 common.c:1376 common.c:1404 common.c:1512 -#: common.c:1615 common.c:1653 copy.c:490 copy.c:709 help.c:63 large_obj.c:157 +#: command.c:1251 command.c:1992 command.c:3253 command.c:5163 common.c:174 +#: common.c:223 common.c:388 common.c:1237 common.c:1265 common.c:1373 +#: common.c:1480 common.c:1518 copy.c:488 copy.c:707 help.c:62 large_obj.c:157 #: large_obj.c:192 large_obj.c:254 #, c-format msgid "%s" msgstr "%s" -#: command.c:1221 +#: command.c:1258 msgid "There is no previous error." msgstr "Попередня помилка відсутня." -#: command.c:1409 command.c:1714 command.c:1728 command.c:1745 command.c:1905 -#: command.c:2142 command.c:2378 command.c:2418 +#: command.c:1371 +#, c-format +msgid "\\%s: missing right parenthesis" +msgstr "\\%s: відсутня права дужка" + +#: command.c:1548 command.c:1853 command.c:1867 command.c:1884 command.c:2044 +#: command.c:2281 command.c:2517 command.c:2557 #, c-format msgid "\\%s: missing required argument" msgstr "\\%s: не вистачає обов'язкового аргументу" -#: command.c:1540 +#: command.c:1679 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif: не може йти після \\else" -#: command.c:1545 +#: command.c:1684 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif: немає відповідного \\if" -#: command.c:1609 +#: command.c:1748 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else: не може йти після \\else" -#: command.c:1614 +#: command.c:1753 #, c-format msgid "\\else: no matching \\if" msgstr "\\else: немає відповідного \\if" -#: command.c:1654 +#: command.c:1793 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif: немає відповідного \\if" -#: command.c:1809 +#: command.c:1948 msgid "Query buffer is empty." msgstr "Буфер запиту порожній." -#: command.c:1831 +#: command.c:1970 msgid "Enter new password: " msgstr "Введіть новий пароль:" -#: command.c:1832 +#: command.c:1971 msgid "Enter it again: " msgstr "Введіть знову: " -#: command.c:1836 +#: command.c:1975 #, c-format msgid "Passwords didn't match." msgstr "Паролі не співпадають." -#: command.c:1935 +#: command.c:2074 #, c-format msgid "\\%s: could not read value for variable" msgstr "\\%s: не вдалося прочитати значення змінної" -#: command.c:2038 +#: command.c:2177 msgid "Query buffer reset (cleared)." msgstr "Буфер запитів скинуто (очищено)." -#: command.c:2060 +#: command.c:2199 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Історію записано до файлу \"%s\".\n" -#: command.c:2147 +#: command.c:2286 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s: змінна середовища не повинна містити \"=\"" -#: command.c:2208 +#: command.c:2347 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "Сервер (версія %s) не пітдримує відображнення вихідного коду функцій." -#: command.c:2211 +#: command.c:2350 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "Сервер (версія %s) не підтримує відображення визначення подання." -#: command.c:2218 +#: command.c:2357 #, c-format msgid "function name is required" msgstr "необхідне ім'я функції" -#: command.c:2220 +#: command.c:2359 #, c-format msgid "view name is required" msgstr "необхідне ім'я подання" -#: command.c:2350 +#: command.c:2489 msgid "Timing is on." msgstr "Таймер увімкнено." -#: command.c:2352 +#: command.c:2491 msgid "Timing is off." msgstr "Таймер вимкнено." -#: command.c:2437 command.c:2465 command.c:3516 command.c:3519 command.c:3522 -#: command.c:3528 command.c:3530 command.c:3538 command.c:3548 command.c:3557 -#: command.c:3571 command.c:3588 command.c:3646 common.c:71 copy.c:333 -#: copy.c:405 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 +#: command.c:2576 command.c:2604 command.c:3661 command.c:3664 command.c:3667 +#: command.c:3673 command.c:3675 command.c:3683 command.c:3693 command.c:3702 +#: command.c:3716 command.c:3733 command.c:3791 common.c:70 copy.c:331 +#: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s: %m" -#: command.c:2849 startup.c:240 startup.c:291 +#: command.c:2988 startup.c:236 startup.c:287 msgid "Password: " msgstr "Пароль: " -#: command.c:2854 startup.c:288 +#: command.c:2993 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "Пароль користувача %s:" -#: command.c:2925 +#: command.c:3064 #, c-format msgid "All connection parameters must be supplied because no database connection exists" msgstr "Мають бути введені усі параметри з'єднання, оскільки відсутнє підключення до бази даних" -#: command.c:3113 +#: command.c:3257 #, c-format msgid "Previous connection kept" msgstr "Попереднє підключення триває" -#: command.c:3117 +#: command.c:3261 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:3166 +#: command.c:3310 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Ви під'єднані до бази даних \"%s\" як користувач \"%s\" за адресою \"%s\" на порту \"%s\".\n" -#: command.c:3169 +#: command.c:3313 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Ви тепер під'єднані до бази даних \"%s\" як користувач \"%s\" через сокет в \"%s\" на порту \"%s\".\n" -#: command.c:3175 +#: command.c:3319 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Ви під'єднані до бази даних \"%s\" як користувач \"%s\" на хості \"%s\" (за адресою \"%s\") на порту \"%s\".\n" -#: command.c:3178 +#: command.c:3322 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Ви тепер під'єднані до бази даних \"%s\" як користувач \"%s\" на хості \"%s\" на порту \"%s\".\n" -#: command.c:3183 +#: command.c:3327 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Ви тепер під'єднані до бази даних \"%s\" як користувач \"%s\".\n" -#: command.c:3216 +#: command.c:3360 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, сервер %s)\n" -#: command.c:3224 +#: command.c:3368 #, c-format msgid "WARNING: %s major version %s, server major version %s.\n" " Some psql features might not work.\n" msgstr "УВАГА: мажорна версія %s %s, мажорна версія сервера %s.\n" " Деякі функції psql можуть не працювати.\n" -#: command.c:3263 +#: command.c:3407 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "З'єднання SSL (протокол: %s, шифр: %s, біти: %s, компресія: %s)\n" -#: command.c:3264 command.c:3265 command.c:3266 +#: command.c:3408 command.c:3409 command.c:3410 msgid "unknown" msgstr "невідомо" -#: command.c:3267 help.c:46 +#: command.c:3411 help.c:45 msgid "off" msgstr "вимк" -#: command.c:3267 help.c:46 +#: command.c:3411 help.c:45 msgid "on" msgstr "увімк" -#: command.c:3281 +#: command.c:3425 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "З'єднання зашифровано GSSAPI\n" -#: command.c:3301 +#: command.c:3445 #, c-format msgid "WARNING: Console code page (%u) differs from Windows code page (%u)\n" " 8-bit characters might not work correctly. See psql reference\n" @@ -451,172 +471,172 @@ msgstr "УВАГА: Кодова сторінка консолі (%u) відрі " 8-бітові символи можуть працювати неправильно. Детальніше у розділі \n" " \"Нотатки для користувачів Windows\" у документації psql.\n" -#: command.c:3405 +#: command.c:3549 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number" msgstr "змінна середовища PSQL_EDITOR_LINENUMBER_ARG має бути встановлена, щоб вказувати номер рядка" -#: command.c:3434 +#: command.c:3578 #, c-format msgid "could not start editor \"%s\"" msgstr "неможливо запустити редактор \"%s\"" -#: command.c:3436 +#: command.c:3580 #, c-format msgid "could not start /bin/sh" msgstr "неможливо запустити /bin/sh" -#: command.c:3474 +#: command.c:3618 #, c-format msgid "could not locate temporary directory: %s" msgstr "неможливо знайти тимчасову директорію: %s" -#: command.c:3501 +#: command.c:3645 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "неможливо відкрити тимчасовий файл \"%s\": %m" -#: command.c:3794 +#: command.c:3950 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: неоднозначна абревіатура \"%s\" відповідає обом \"%s\" і \"%s" -#: command.c:3814 +#: command.c:3970 #, c-format msgid "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" msgstr "\\pset: дозволені формати: aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" -#: command.c:3833 +#: command.c:3989 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: дозволені стилі ліній: ascii, old-ascii, unicode" -#: command.c:3848 +#: command.c:4004 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: дозволені стилі ліній рамок Unicode: single, double" -#: command.c:3863 +#: command.c:4019 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: дозволені стилі ліній стовпців для Unicode: single, double" -#: command.c:3878 +#: command.c:4034 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: дозволені стилі ліній заголовків для Unicode: single, double" -#: command.c:3921 +#: command.c:4077 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsep повинен бути однобайтовим символом" -#: command.c:3926 +#: command.c:4082 #, c-format msgid "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage return" msgstr "\\pset: csv_fieldsep не може бути подвійною лапкою, новим рядком або поверненням каретки" -#: command.c:4063 command.c:4249 +#: command.c:4219 command.c:4407 #, c-format msgid "\\pset: unknown option: %s" msgstr "\\pset: невідомий параметр: %s" -#: command.c:4081 +#: command.c:4239 #, c-format msgid "Border style is %d.\n" msgstr "Стиль рамки %d.\n" -#: command.c:4087 +#: command.c:4245 #, c-format msgid "Target width is unset.\n" msgstr "Цільова ширина не встановлена.\n" -#: command.c:4089 +#: command.c:4247 #, c-format msgid "Target width is %d.\n" msgstr "Цільова ширина %d.\n" -#: command.c:4096 +#: command.c:4254 #, c-format msgid "Expanded display is on.\n" msgstr "Розширене відображення увімкнуто.\n" -#: command.c:4098 +#: command.c:4256 #, c-format msgid "Expanded display is used automatically.\n" msgstr "Розширене відображення використовується автоматично.\n" -#: command.c:4100 +#: command.c:4258 #, c-format msgid "Expanded display is off.\n" msgstr "Розширене відображення вимкнуто.\n" -#: command.c:4106 +#: command.c:4264 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "Розділювач полів CSV: \"%s\".\n" -#: command.c:4114 command.c:4122 +#: command.c:4272 command.c:4280 #, c-format msgid "Field separator is zero byte.\n" msgstr "Розділювач полів - нульовий байт.\n" -#: command.c:4116 +#: command.c:4274 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Розділювач полів \"%s\".\n" -#: command.c:4129 +#: command.c:4287 #, c-format msgid "Default footer is on.\n" msgstr "Нинжній колонтитул увімкнуто за замовчуванням.\n" -#: command.c:4131 +#: command.c:4289 #, c-format msgid "Default footer is off.\n" msgstr "Нинжній колонтитул вимкнуто за замовчуванням.\n" -#: command.c:4137 +#: command.c:4295 #, c-format msgid "Output format is %s.\n" msgstr "Формат виводу %s.\n" -#: command.c:4143 +#: command.c:4301 #, c-format msgid "Line style is %s.\n" msgstr "Стиль лінії %s.\n" -#: command.c:4150 +#: command.c:4308 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null відображається як \"%s\".\n" -#: command.c:4158 +#: command.c:4316 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "Локалізоване виведення чисел ввімкнено.\n" -#: command.c:4160 +#: command.c:4318 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "Локалізоване виведення чисел вимкнено.\n" -#: command.c:4167 +#: command.c:4325 #, c-format msgid "Pager is used for long output.\n" msgstr "Пейджер використовується для виведення довгого тексту.\n" -#: command.c:4169 +#: command.c:4327 #, c-format msgid "Pager is always used.\n" msgstr "Завжди використовується пейджер.\n" -#: command.c:4171 +#: command.c:4329 #, c-format msgid "Pager usage is off.\n" msgstr "Пейджер не використовується.\n" -#: command.c:4177 +#: command.c:4335 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" @@ -625,87 +645,87 @@ msgstr[1] "Пейджер не буде використовуватися дл msgstr[2] "Пейджер не буде використовуватися для менш ніж %d рядків.\n" msgstr[3] "Пейджер не буде використовуватися для менш ніж %d рядка.\n" -#: command.c:4187 command.c:4197 +#: command.c:4345 command.c:4355 #, c-format msgid "Record separator is zero byte.\n" msgstr "Розділювач записів - нульовий байт.\n" -#: command.c:4189 +#: command.c:4347 #, c-format msgid "Record separator is .\n" msgstr "Розділювач записів: .\n" -#: command.c:4191 +#: command.c:4349 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Розділювач записів: \"%s\".\n" -#: command.c:4204 +#: command.c:4362 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Табличні атрибути \"%s\".\n" -#: command.c:4207 +#: command.c:4365 #, c-format msgid "Table attributes unset.\n" msgstr "Атрибути таблиць не задані.\n" -#: command.c:4214 +#: command.c:4372 #, c-format msgid "Title is \"%s\".\n" msgstr "Заголовок: \"%s\".\n" -#: command.c:4216 +#: command.c:4374 #, c-format msgid "Title is unset.\n" msgstr "Заголовок не встановлено.\n" -#: command.c:4223 +#: command.c:4381 #, c-format msgid "Tuples only is on.\n" msgstr "Увімкнуто тільки кортежі.\n" -#: command.c:4225 +#: command.c:4383 #, c-format msgid "Tuples only is off.\n" msgstr "Вимкнуто тільки кортежі.\n" -#: command.c:4231 +#: command.c:4389 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "Стиль ліній рамки для Unicode: \"%s\".\n" -#: command.c:4237 +#: command.c:4395 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "Стиль ліній стовпців для Unicode: \"%s\".\n" -#: command.c:4243 +#: command.c:4401 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "Стиль ліній заголовків для Unicode: \"%s\".\n" -#: command.c:4405 +#: command.c:4634 #, c-format msgid "\\!: failed" msgstr "\\!: помилка" -#: command.c:4430 common.c:795 +#: command.c:4659 common.c:648 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch не може бути використано із пустим запитом" -#: command.c:4471 +#: command.c:4700 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (кожні %g сек)\n" -#: command.c:4474 +#: command.c:4703 #, c-format msgid "%s (every %gs)\n" msgstr "%s (кожні %g сек)\n" -#: command.c:4528 command.c:4535 common.c:695 common.c:702 common.c:1359 +#: command.c:4757 command.c:4764 common.c:548 common.c:555 common.c:1220 #, c-format msgid "********* QUERY **********\n" "%s\n" @@ -714,107 +734,112 @@ msgstr "********* ЗАПИТ **********\n" "%s\n" "**************************\n\n" -#: command.c:4727 +#: command.c:4956 #, c-format msgid "\"%s.%s\" is not a view" msgstr "\"%s.%s\" не є поданням" -#: command.c:4743 +#: command.c:4972 #, c-format msgid "could not parse reloptions array" msgstr "неможливо розібрати масив reloptions" -#: common.c:160 +#: common.c:159 #, c-format msgid "cannot escape without active connection" msgstr "не можна вийти без активного з'єднання" -#: common.c:201 +#: common.c:200 #, c-format msgid "shell command argument contains a newline or carriage return: \"%s\"" msgstr "аргумент командної оболонки містить символ нового рядка або повернення каретки: \"%s\"" -#: common.c:395 +#: common.c:304 #, c-format msgid "connection to server was lost" msgstr "з'єднання із сервером втрачено" -#: common.c:399 +#: common.c:308 #, c-format msgid "The connection to the server was lost. Attempting reset: " msgstr "З'єднання із сервером втрачено. Спроба перевстановити:" -#: common.c:404 +#: common.c:313 #, c-format msgid "Failed.\n" msgstr "Помилка.\n" -#: common.c:417 +#: common.c:326 #, c-format msgid "Succeeded.\n" msgstr "Вдало.\n" -#: common.c:525 common.c:1077 common.c:1294 +#: common.c:378 common.c:938 common.c:1155 #, c-format msgid "unexpected PQresultStatus: %d" msgstr "неочікуваний PQresultStatus: %d" -#: common.c:634 +#: common.c:487 #, c-format msgid "Time: %.3f ms\n" msgstr "Час: %.3f мс\n" -#: common.c:649 +#: common.c:502 #, c-format msgid "Time: %.3f ms (%02d:%06.3f)\n" msgstr "Час: %.3f мс (%02d:%06.3f)\n" -#: common.c:658 +#: common.c:511 #, c-format msgid "Time: %.3f ms (%02d:%02d:%06.3f)\n" msgstr "Час: %.3f мс (%02d:%02d:%06.3f)\n" -#: common.c:665 +#: common.c:518 #, c-format msgid "Time: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" msgstr "Час: %.3f мс (%.0f d %02d:%02d:%06.3f)\n" -#: common.c:689 common.c:747 common.c:1330 +#: common.c:542 common.c:600 common.c:1191 #, c-format msgid "You are currently not connected to a database." msgstr "На даний момент ви від'єднанні від бази даних." -#: common.c:802 +#: common.c:655 #, c-format msgid "\\watch cannot be used with COPY" msgstr "\\watch не може бути використано з COPY" -#: common.c:807 +#: common.c:660 #, c-format msgid "unexpected result status for \\watch" msgstr "неочікуваний результат статусу для \\watch" -#: common.c:837 +#: common.c:690 #, c-format msgid "Asynchronous notification \"%s\" with payload \"%s\" received from server process with PID %d.\n" msgstr "Асинхронне сповіщення \"%s\" з навантаженням \"%s\" отримане від серверного процесу з PID %d.\n" -#: common.c:840 +#: common.c:693 #, c-format msgid "Asynchronous notification \"%s\" received from server process with PID %d.\n" msgstr "Асинхронне сповіщення \"%s\" отримане від серверного процесу з PID %d.\n" -#: common.c:903 +#: common.c:726 common.c:743 +#, c-format +msgid "could not print result table: %m" +msgstr "не вдалося надрукувати таблицю результатів: %m" + +#: common.c:764 #, c-format msgid "no rows returned for \\gset" msgstr "немає рядків повернутих для \\gset" -#: common.c:908 +#: common.c:769 #, c-format msgid "more than one row returned for \\gset" msgstr "більш, ніж один рядок повернуто для \\gset" -#: common.c:1339 +#: common.c:1200 #, c-format msgid "***(Single step mode: verify command)*******************************************\n" "%s\n" @@ -823,899 +848,905 @@ msgstr "***(Покроковий режим: перевірка команди)* "%s\n" "***(Enter - виповнити; х і Enter - відмінити)********************\n" -#: common.c:1394 +#: common.c:1255 #, c-format msgid "The server (version %s) does not support savepoints for ON_ERROR_ROLLBACK." msgstr "Сервер (версія %s) не підтримує точки збереження для ON_ERROR_ROLLBACK." -#: common.c:1457 +#: common.c:1318 #, c-format msgid "STATEMENT: %s" msgstr "ІНСТРУКЦІЯ: %s" -#: common.c:1500 +#: common.c:1361 #, c-format msgid "unexpected transaction status (%d)" msgstr "неочікуваний стан транзакції (%d)" -#: common.c:1637 describe.c:2002 +#: common.c:1502 describe.c:2001 msgid "Column" msgstr "Стовпець" -#: common.c:1638 describe.c:179 describe.c:394 describe.c:412 describe.c:457 -#: describe.c:474 describe.c:963 describe.c:1127 describe.c:1712 -#: describe.c:1736 describe.c:2003 describe.c:3674 describe.c:3859 -#: describe.c:4092 describe.c:5298 +#: common.c:1503 describe.c:177 describe.c:393 describe.c:411 describe.c:456 +#: describe.c:473 describe.c:962 describe.c:1126 describe.c:1711 +#: describe.c:1735 describe.c:2002 describe.c:3729 describe.c:3939 +#: describe.c:4172 describe.c:5378 msgid "Type" msgstr "Тип" -#: common.c:1687 +#: common.c:1552 #, c-format msgid "The command has no result, or the result has no columns.\n" msgstr "Команда не має результату або результат не має стовпців.\n" -#: copy.c:100 +#: copy.c:98 #, c-format msgid "\\copy: arguments required" msgstr "\\copy: необхідні аргументи" -#: copy.c:255 +#: copy.c:253 #, c-format msgid "\\copy: parse error at \"%s\"" msgstr "\\copy: помилка розбору аргументу біля \"%s\"" -#: copy.c:257 +#: copy.c:255 #, c-format msgid "\\copy: parse error at end of line" msgstr "\\copy: помилка розбору в кінці рядка" -#: copy.c:330 +#: copy.c:328 #, c-format msgid "could not execute command \"%s\": %m" msgstr "не вдалося виконати команду \"%s\": %m" -#: copy.c:346 +#: copy.c:344 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" -#: copy.c:350 +#: copy.c:348 #, c-format msgid "%s: cannot copy from/to a directory" msgstr "%s: не можна копіювати з/до каталогу" -#: copy.c:387 +#: copy.c:385 #, c-format msgid "could not close pipe to external command: %m" msgstr "не вдалося закрити канал за допомогою зовнішньої команди: %m" -#: copy.c:392 +#: copy.c:390 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: copy.c:455 copy.c:465 +#: copy.c:453 copy.c:463 #, c-format msgid "could not write COPY data: %m" msgstr "неможливо записати дані COPY: %m" -#: copy.c:471 +#: copy.c:469 #, c-format msgid "COPY data transfer failed: %s" msgstr "Помилка передачі даних COPY: %s" -#: copy.c:532 +#: copy.c:530 msgid "canceled by user" msgstr "скасовано користувачем" -#: copy.c:543 +#: copy.c:541 msgid "Enter data to be copied followed by a newline.\n" "End with a backslash and a period on a line by itself, or an EOF signal." msgstr "Введіть дані для копювання, розділяючи переносом рядка.\n" "Завершіть введення за допомогою \"\\.\" або за допомогою сигналу EOF." -#: copy.c:671 +#: copy.c:669 msgid "aborted because of read failure" msgstr "перервано через помилку читання" -#: copy.c:705 +#: copy.c:703 msgid "trying to exit copy mode" msgstr "спроба вийти з режиму копіювання" -#: crosstabview.c:124 +#: crosstabview.c:123 #, c-format msgid "\\crosstabview: statement did not return a result set" msgstr "\\crosstabview: команда не повернула набір з результатами" -#: crosstabview.c:130 +#: crosstabview.c:129 #, c-format msgid "\\crosstabview: query must return at least three columns" msgstr "\\crosstabview: запит має повернути принаймні три стовпці" -#: crosstabview.c:157 +#: crosstabview.c:156 #, c-format msgid "\\crosstabview: vertical and horizontal headers must be different columns" msgstr "\\crosstabview: вертикальні і горизонтальні заголовки повинні бути різними стовпцями" -#: crosstabview.c:173 +#: crosstabview.c:172 #, c-format msgid "\\crosstabview: data column must be specified when query returns more than three columns" msgstr "\\crosstabview: необхідно вказати стовпець даних, коли запит повертає більше трьох стовпців" -#: crosstabview.c:229 +#: crosstabview.c:228 #, c-format msgid "\\crosstabview: maximum number of columns (%d) exceeded" msgstr "\\crosstabview: Максимальна кількість стовпців (%d) перевищена" -#: crosstabview.c:398 +#: crosstabview.c:397 #, c-format msgid "\\crosstabview: query result contains multiple data values for row \"%s\", column \"%s\"" msgstr "\\crosstabview: результат запиту містить кілька значень даних для рядка «%s», стовпця «%s»" -#: crosstabview.c:646 +#: crosstabview.c:645 #, c-format msgid "\\crosstabview: column number %d is out of range 1..%d" msgstr "\\crosstabview: номер стовпця %d поза межами 1..%d" -#: crosstabview.c:671 +#: crosstabview.c:670 #, c-format msgid "\\crosstabview: ambiguous column name: \"%s\"" msgstr "\\crosstabview: неоднозначна назва стовпця: \"%s\"" -#: crosstabview.c:679 +#: crosstabview.c:678 #, c-format msgid "\\crosstabview: column name not found: \"%s\"" msgstr "\\crosstabview: ім'я стовпця не знайдено: \"%s\"" -#: describe.c:77 describe.c:374 describe.c:679 describe.c:811 describe.c:955 -#: describe.c:1116 describe.c:1188 describe.c:3663 describe.c:3846 -#: describe.c:4090 describe.c:4181 describe.c:4448 describe.c:4608 -#: describe.c:4849 describe.c:4924 describe.c:4935 describe.c:4997 -#: describe.c:5422 describe.c:5505 +#: describe.c:75 describe.c:373 describe.c:678 describe.c:810 describe.c:954 +#: describe.c:1115 describe.c:1187 describe.c:3718 describe.c:3926 +#: describe.c:4170 describe.c:4261 describe.c:4528 describe.c:4688 +#: describe.c:4929 describe.c:5004 describe.c:5015 describe.c:5077 +#: describe.c:5502 describe.c:5585 msgid "Schema" msgstr "Схема" -#: describe.c:78 describe.c:176 describe.c:244 describe.c:252 describe.c:375 -#: describe.c:680 describe.c:812 describe.c:873 describe.c:956 describe.c:1189 -#: describe.c:3664 describe.c:3847 describe.c:4013 describe.c:4091 -#: describe.c:4182 describe.c:4261 describe.c:4449 describe.c:4533 -#: describe.c:4609 describe.c:4850 describe.c:4925 describe.c:4936 -#: describe.c:4998 describe.c:5195 describe.c:5279 describe.c:5503 -#: describe.c:5675 describe.c:5900 +#: describe.c:76 describe.c:174 describe.c:242 describe.c:250 describe.c:374 +#: describe.c:679 describe.c:811 describe.c:872 describe.c:955 describe.c:1188 +#: describe.c:3719 describe.c:3927 describe.c:4093 describe.c:4171 +#: describe.c:4262 describe.c:4341 describe.c:4529 describe.c:4613 +#: describe.c:4689 describe.c:4930 describe.c:5005 describe.c:5016 +#: describe.c:5078 describe.c:5275 describe.c:5359 describe.c:5583 +#: describe.c:5755 describe.c:5995 msgid "Name" msgstr "Назва" -#: describe.c:79 describe.c:387 describe.c:405 describe.c:451 describe.c:468 +#: describe.c:77 describe.c:386 describe.c:404 describe.c:450 describe.c:467 msgid "Result data type" msgstr "Тип даних результату" -#: describe.c:87 describe.c:100 describe.c:104 describe.c:388 describe.c:406 -#: describe.c:452 describe.c:469 +#: describe.c:85 describe.c:98 describe.c:102 describe.c:387 describe.c:405 +#: describe.c:451 describe.c:468 msgid "Argument data types" msgstr "Типи даних аргументів" -#: describe.c:112 describe.c:119 describe.c:187 describe.c:275 describe.c:514 -#: describe.c:728 describe.c:827 describe.c:898 describe.c:1191 describe.c:2021 -#: describe.c:3452 describe.c:3699 describe.c:3893 describe.c:4044 -#: describe.c:4118 describe.c:4191 describe.c:4274 describe.c:4357 -#: describe.c:4476 describe.c:4542 describe.c:4610 describe.c:4751 -#: describe.c:4793 describe.c:4866 describe.c:4928 describe.c:4937 -#: describe.c:4999 describe.c:5221 describe.c:5301 describe.c:5436 -#: describe.c:5506 large_obj.c:290 large_obj.c:300 +#: describe.c:110 describe.c:117 describe.c:185 describe.c:273 describe.c:513 +#: describe.c:727 describe.c:826 describe.c:897 describe.c:1190 describe.c:2020 +#: describe.c:3506 describe.c:3779 describe.c:3973 describe.c:4124 +#: describe.c:4198 describe.c:4271 describe.c:4354 describe.c:4437 +#: describe.c:4556 describe.c:4622 describe.c:4690 describe.c:4831 +#: describe.c:4873 describe.c:4946 describe.c:5008 describe.c:5017 +#: describe.c:5079 describe.c:5301 describe.c:5381 describe.c:5516 +#: describe.c:5586 large_obj.c:290 large_obj.c:300 msgid "Description" msgstr "Опис" -#: describe.c:137 +#: describe.c:135 msgid "List of aggregate functions" msgstr "Перелік агрегатних функцій" -#: describe.c:162 +#: describe.c:160 #, c-format msgid "The server (version %s) does not support access methods." msgstr "Сервер (версія %s) не підтримує методи доступу." -#: describe.c:177 +#: describe.c:175 msgid "Index" msgstr "Індекс" -#: describe.c:178 describe.c:3680 describe.c:3872 describe.c:5423 +#: describe.c:176 describe.c:3737 describe.c:3952 describe.c:5503 msgid "Table" msgstr "Таблиця" -#: describe.c:186 describe.c:5200 +#: describe.c:184 describe.c:5280 msgid "Handler" msgstr "Обробник" -#: describe.c:205 +#: describe.c:203 msgid "List of access methods" msgstr "Список методів доступу" -#: describe.c:231 +#: describe.c:229 #, c-format msgid "The server (version %s) does not support tablespaces." msgstr "Сервер (версія %s) не підтримує табличні простори." -#: describe.c:245 describe.c:253 describe.c:502 describe.c:718 describe.c:874 -#: describe.c:1115 describe.c:3675 describe.c:3848 describe.c:4017 -#: describe.c:4263 describe.c:4534 describe.c:5196 describe.c:5280 -#: describe.c:5676 describe.c:5802 describe.c:5901 large_obj.c:289 +#: describe.c:243 describe.c:251 describe.c:501 describe.c:717 describe.c:873 +#: describe.c:1114 describe.c:3730 describe.c:3928 describe.c:4097 +#: describe.c:4343 describe.c:4614 describe.c:5276 describe.c:5360 +#: describe.c:5756 describe.c:5893 describe.c:5996 describe.c:6111 +#: describe.c:6190 large_obj.c:289 msgid "Owner" msgstr "Власник" -#: describe.c:246 describe.c:254 +#: describe.c:244 describe.c:252 msgid "Location" msgstr "Розташування" -#: describe.c:265 describe.c:3270 +#: describe.c:263 describe.c:3323 msgid "Options" msgstr "Параметри" -#: describe.c:270 describe.c:691 describe.c:890 describe.c:3691 describe.c:3695 +#: describe.c:268 describe.c:690 describe.c:889 describe.c:3771 describe.c:3775 msgid "Size" msgstr "Розмір" -#: describe.c:292 +#: describe.c:290 msgid "List of tablespaces" msgstr "Список табличних просторів" -#: describe.c:334 +#: describe.c:333 #, c-format msgid "\\df only takes [anptwS+] as options" msgstr "\\df приймає в якості параметрів тільки [anptwS+]" -#: describe.c:342 describe.c:353 +#: describe.c:341 describe.c:352 #, c-format msgid "\\df does not take a \"%c\" option with server version %s" msgstr "\\df не приймає параметр \"%c\" із сервером версії %s" #. translator: "agg" is short for "aggregate" -#: describe.c:390 describe.c:408 describe.c:454 describe.c:471 +#: describe.c:389 describe.c:407 describe.c:453 describe.c:470 msgid "agg" msgstr "агр." -#: describe.c:391 describe.c:409 +#: describe.c:390 describe.c:408 msgid "window" msgstr "вікно" -#: describe.c:392 +#: describe.c:391 msgid "proc" msgstr "проц" -#: describe.c:393 describe.c:411 describe.c:456 describe.c:473 +#: describe.c:392 describe.c:410 describe.c:455 describe.c:472 msgid "func" msgstr "функ" -#: describe.c:410 describe.c:455 describe.c:472 describe.c:1325 +#: describe.c:409 describe.c:454 describe.c:471 describe.c:1324 msgid "trigger" msgstr "тригер" -#: describe.c:484 +#: describe.c:483 msgid "immutable" msgstr "постійна" -#: describe.c:485 +#: describe.c:484 msgid "stable" msgstr "стабільна" -#: describe.c:486 +#: describe.c:485 msgid "volatile" msgstr "мінлива" -#: describe.c:487 +#: describe.c:486 msgid "Volatility" msgstr "Мінливість" -#: describe.c:495 +#: describe.c:494 msgid "restricted" msgstr "обмежений" -#: describe.c:496 +#: describe.c:495 msgid "safe" msgstr "безпечний" -#: describe.c:497 +#: describe.c:496 msgid "unsafe" msgstr "небезпечний" -#: describe.c:498 +#: describe.c:497 msgid "Parallel" msgstr "Паралельність" -#: describe.c:503 +#: describe.c:502 msgid "definer" msgstr "визначник" -#: describe.c:504 +#: describe.c:503 msgid "invoker" msgstr "викликач" -#: describe.c:505 +#: describe.c:504 msgid "Security" msgstr "Безпека" -#: describe.c:512 +#: describe.c:511 msgid "Language" msgstr "Мова" -#: describe.c:513 +#: describe.c:512 msgid "Source code" msgstr "Вихідний код" -#: describe.c:642 +#: describe.c:641 msgid "List of functions" msgstr "Список функцій" -#: describe.c:690 +#: describe.c:689 msgid "Internal name" msgstr "Внутрішнє назва" -#: describe.c:712 +#: describe.c:711 msgid "Elements" msgstr "Елементи" -#: describe.c:769 +#: describe.c:768 msgid "List of data types" msgstr "Список типів даних" -#: describe.c:813 +#: describe.c:812 msgid "Left arg type" msgstr "Тип лівого аргумента" -#: describe.c:814 +#: describe.c:813 msgid "Right arg type" msgstr "Тип правого аргумента" -#: describe.c:815 +#: describe.c:814 msgid "Result type" msgstr "Результуючий тип" -#: describe.c:820 describe.c:4269 describe.c:4334 describe.c:4340 -#: describe.c:4750 +#: describe.c:819 describe.c:4349 describe.c:4414 describe.c:4420 +#: describe.c:4830 describe.c:6362 describe.c:6366 msgid "Function" msgstr "Функція" -#: describe.c:845 +#: describe.c:844 msgid "List of operators" msgstr "Список операторів" -#: describe.c:875 +#: describe.c:874 msgid "Encoding" msgstr "Кодування" -#: describe.c:880 describe.c:4450 +#: describe.c:879 describe.c:4530 msgid "Collate" msgstr "Порядок сортування" -#: describe.c:881 describe.c:4451 +#: describe.c:880 describe.c:4531 msgid "Ctype" msgstr "Ctype" -#: describe.c:894 +#: describe.c:893 msgid "Tablespace" msgstr "Табличний простір" -#: describe.c:916 +#: describe.c:915 msgid "List of databases" msgstr "Список баз даних" -#: describe.c:957 describe.c:1118 describe.c:3665 +#: describe.c:956 describe.c:1117 describe.c:3720 msgid "table" msgstr "таблиця" -#: describe.c:958 describe.c:3666 +#: describe.c:957 describe.c:3721 msgid "view" msgstr "подання" -#: describe.c:959 describe.c:3667 +#: describe.c:958 describe.c:3722 msgid "materialized view" msgstr "матеріалізоване подання" -#: describe.c:960 describe.c:1120 describe.c:3669 +#: describe.c:959 describe.c:1119 describe.c:3724 msgid "sequence" msgstr "послідовність" -#: describe.c:961 describe.c:3671 +#: describe.c:960 describe.c:3726 msgid "foreign table" msgstr "зовнішня таблиця" -#: describe.c:962 describe.c:3672 describe.c:3857 +#: describe.c:961 describe.c:3727 describe.c:3937 msgid "partitioned table" msgstr "секційна таблиця" -#: describe.c:974 +#: describe.c:973 msgid "Column privileges" msgstr "Права для стовпців" -#: describe.c:1005 describe.c:1039 +#: describe.c:1004 describe.c:1038 msgid "Policies" msgstr "Політики" -#: describe.c:1071 describe.c:5957 describe.c:5961 +#: describe.c:1070 describe.c:6052 describe.c:6056 msgid "Access privileges" msgstr "Права доступу" -#: describe.c:1102 +#: describe.c:1101 #, c-format msgid "The server (version %s) does not support altering default privileges." msgstr "Сервер (версія %s) не підтримує зміну прав за замовчуванням." -#: describe.c:1122 +#: describe.c:1121 msgid "function" msgstr "функція" -#: describe.c:1124 +#: describe.c:1123 msgid "type" msgstr "тип" -#: describe.c:1126 +#: describe.c:1125 msgid "schema" msgstr "схема" -#: describe.c:1150 +#: describe.c:1149 msgid "Default access privileges" msgstr "Права доступу за замовчуванням" -#: describe.c:1190 +#: describe.c:1189 msgid "Object" msgstr "Об'єкт" -#: describe.c:1204 +#: describe.c:1203 msgid "table constraint" msgstr "обмеження таблиці" -#: describe.c:1226 +#: describe.c:1225 msgid "domain constraint" msgstr "обмеження домену" -#: describe.c:1254 +#: describe.c:1253 msgid "operator class" msgstr "клас операторів" -#: describe.c:1283 +#: describe.c:1282 msgid "operator family" msgstr "сімейство операторів" -#: describe.c:1305 +#: describe.c:1304 msgid "rule" msgstr "правило" -#: describe.c:1347 +#: describe.c:1346 msgid "Object descriptions" msgstr "Опис об'єкту" -#: describe.c:1403 describe.c:3763 +#: describe.c:1402 describe.c:3843 #, c-format msgid "Did not find any relation named \"%s\"." msgstr "Не знайдено жодного відношення під назвою \"%s\"." -#: describe.c:1406 describe.c:3766 +#: describe.c:1405 describe.c:3846 #, c-format msgid "Did not find any relations." msgstr "Не знайдено жодного відношення." -#: describe.c:1661 +#: describe.c:1660 #, c-format msgid "Did not find any relation with OID %s." msgstr "Не знайдено жодного відношення з OID %s." -#: describe.c:1713 describe.c:1737 +#: describe.c:1712 describe.c:1736 msgid "Start" msgstr "Початок" -#: describe.c:1714 describe.c:1738 +#: describe.c:1713 describe.c:1737 msgid "Minimum" msgstr "Мінімум" -#: describe.c:1715 describe.c:1739 +#: describe.c:1714 describe.c:1738 msgid "Maximum" msgstr "Максимум" -#: describe.c:1716 describe.c:1740 +#: describe.c:1715 describe.c:1739 msgid "Increment" msgstr "Приріст" -#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4185 -#: describe.c:4351 describe.c:4465 describe.c:4470 +#: describe.c:1716 describe.c:1740 describe.c:1871 describe.c:4265 +#: describe.c:4431 describe.c:4545 describe.c:4550 describe.c:6099 msgid "yes" msgstr "так" -#: describe.c:1718 describe.c:1742 describe.c:1873 describe.c:4185 -#: describe.c:4348 describe.c:4465 +#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4265 +#: describe.c:4428 describe.c:4545 describe.c:6100 msgid "no" msgstr "ні" -#: describe.c:1719 describe.c:1743 +#: describe.c:1718 describe.c:1742 msgid "Cycles?" msgstr "Цикли?" -#: describe.c:1720 describe.c:1744 +#: describe.c:1719 describe.c:1743 msgid "Cache" msgstr "Кеш" -#: describe.c:1787 +#: describe.c:1786 #, c-format msgid "Owned by: %s" msgstr "Власник: %s" -#: describe.c:1791 +#: describe.c:1790 #, c-format msgid "Sequence for identity column: %s" msgstr "Послідовність для стовпця identity: %s" -#: describe.c:1798 +#: describe.c:1797 #, c-format msgid "Sequence \"%s.%s\"" msgstr "Послідовність \"%s.%s\"" -#: describe.c:1934 +#: describe.c:1933 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "Таблиця без журналювання \"%s.%s\"" -#: describe.c:1937 +#: describe.c:1936 #, c-format msgid "Table \"%s.%s\"" msgstr "Таблиця \"%s.%s\"" -#: describe.c:1941 +#: describe.c:1940 #, c-format msgid "View \"%s.%s\"" msgstr "Подання \"%s.%s\"" -#: describe.c:1946 +#: describe.c:1945 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "Матеріалізоване подання без журналювання \"%s.%s\"" -#: describe.c:1949 +#: describe.c:1948 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "Матеріалізоване подання \"%s.%s\"" -#: describe.c:1954 +#: describe.c:1953 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "Індекс без журналювання \"%s.%s\"" -#: describe.c:1957 +#: describe.c:1956 #, c-format msgid "Index \"%s.%s\"" msgstr "Індекс \"%s.%s\"" -#: describe.c:1962 +#: describe.c:1961 #, c-format msgid "Unlogged partitioned index \"%s.%s\"" msgstr "Секційний індекс без журналювання \"%s.%s\"" -#: describe.c:1965 +#: describe.c:1964 #, c-format msgid "Partitioned index \"%s.%s\"" msgstr "Секційний індекс \"%s.%s\"" -#: describe.c:1970 +#: describe.c:1969 #, c-format msgid "Special relation \"%s.%s\"" msgstr "Спеціальне відношення \"%s.%s\"" -#: describe.c:1974 +#: describe.c:1973 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "Таблиця TOAST \"%s.%s\"" -#: describe.c:1978 +#: describe.c:1977 #, c-format msgid "Composite type \"%s.%s\"" msgstr "Композитний тип \"%s.%s\"" -#: describe.c:1982 +#: describe.c:1981 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "Зовнішня таблиця \"%s.%s\"" -#: describe.c:1987 +#: describe.c:1986 #, c-format msgid "Unlogged partitioned table \"%s.%s\"" msgstr "Секційна таблиця без журналювання \"%s.%s\"" -#: describe.c:1990 +#: describe.c:1989 #, c-format msgid "Partitioned table \"%s.%s\"" msgstr "Секційна таблиця \"%s.%s\"" -#: describe.c:2006 describe.c:4098 +#: describe.c:2005 describe.c:4178 msgid "Collation" msgstr "Сортування" -#: describe.c:2007 describe.c:4105 +#: describe.c:2006 describe.c:4185 msgid "Nullable" msgstr "Обнуляється" -#: describe.c:2008 describe.c:4106 +#: describe.c:2007 describe.c:4186 msgid "Default" msgstr "За замовчуванням" -#: describe.c:2011 +#: describe.c:2010 msgid "Key?" msgstr "Ключ?" -#: describe.c:2013 +#: describe.c:2012 msgid "Definition" msgstr "Визначення" -#: describe.c:2015 describe.c:5216 describe.c:5300 describe.c:5371 -#: describe.c:5435 +#: describe.c:2014 describe.c:5296 describe.c:5380 describe.c:5451 +#: describe.c:5515 msgid "FDW options" msgstr "Налаштування FDW" -#: describe.c:2017 +#: describe.c:2016 msgid "Storage" msgstr "Сховище" -#: describe.c:2019 +#: describe.c:2018 msgid "Stats target" msgstr "Статистична ціль" -#: describe.c:2132 +#: describe.c:2131 #, c-format msgid "Partition of: %s %s" msgstr "Розділ: %s %s" -#: describe.c:2144 +#: describe.c:2143 msgid "No partition constraint" msgstr "Відсутнє розділове обмеження" -#: describe.c:2146 +#: describe.c:2145 #, c-format msgid "Partition constraint: %s" msgstr "Обмеження секції: %s" -#: describe.c:2170 +#: describe.c:2169 #, c-format msgid "Partition key: %s" msgstr "Ключ розділу: %s" -#: describe.c:2240 +#: describe.c:2195 +#, c-format +msgid "Owning table: \"%s.%s\"" +msgstr "Таблиця, що володіє: \"%s.%s\"" + +#: describe.c:2266 msgid "primary key, " msgstr "первинний ключ," -#: describe.c:2242 +#: describe.c:2268 msgid "unique, " msgstr "унікальний," -#: describe.c:2248 +#: describe.c:2274 #, c-format msgid "for table \"%s.%s\"" msgstr "для таблиці \"%s.%s\"" -#: describe.c:2252 +#: describe.c:2278 #, c-format msgid ", predicate (%s)" msgstr ", предикат (%s)" -#: describe.c:2255 +#: describe.c:2281 msgid ", clustered" msgstr ", кластеризовано" -#: describe.c:2258 +#: describe.c:2284 msgid ", invalid" msgstr ", недійсний" -#: describe.c:2261 +#: describe.c:2287 msgid ", deferrable" msgstr ", відтермінований" -#: describe.c:2264 +#: describe.c:2290 msgid ", initially deferred" msgstr ", від початку відтермінований" -#: describe.c:2267 +#: describe.c:2293 msgid ", replica identity" msgstr ", ідентичність репліки" -#: describe.c:2326 +#: describe.c:2360 msgid "Indexes:" msgstr "Індекси:" -#: describe.c:2410 +#: describe.c:2444 msgid "Check constraints:" msgstr "Обмеження перевірки:" -#: describe.c:2478 +#: describe.c:2512 msgid "Foreign-key constraints:" msgstr "Обмеження зовнішнього ключа:" -#: describe.c:2541 +#: describe.c:2575 msgid "Referenced by:" msgstr "Посилання ззовні:" -#: describe.c:2591 +#: describe.c:2625 msgid "Policies:" msgstr "Політики:" -#: describe.c:2594 +#: describe.c:2628 msgid "Policies (forced row security enabled):" msgstr "Політики (посилений захист рядків активовано):" -#: describe.c:2597 +#: describe.c:2631 msgid "Policies (row security enabled): (none)" msgstr "Політики (захист рядків ввімкнуто): (ні)" -#: describe.c:2600 +#: describe.c:2634 msgid "Policies (forced row security enabled): (none)" msgstr "Політики (посилений захист рядків ввімкнуто): (ні)" -#: describe.c:2603 +#: describe.c:2637 msgid "Policies (row security disabled):" msgstr "Політики (захист рядків вимкнуто):" -#: describe.c:2666 +#: describe.c:2705 msgid "Statistics objects:" msgstr "Об'єкти статистики:" -#: describe.c:2775 describe.c:2879 +#: describe.c:2819 describe.c:2923 msgid "Rules:" msgstr "Правила:" -#: describe.c:2778 +#: describe.c:2822 msgid "Disabled rules:" msgstr "Вимкнені правила:" -#: describe.c:2781 +#: describe.c:2825 msgid "Rules firing always:" msgstr "Правила, що завжди працюють:" -#: describe.c:2784 +#: describe.c:2828 msgid "Rules firing on replica only:" msgstr "Правила, що працюють тільки на репліці:" -#: describe.c:2824 +#: describe.c:2868 msgid "Publications:" msgstr "Публікації:" -#: describe.c:2862 +#: describe.c:2906 msgid "View definition:" msgstr "Визначення подання:" -#: describe.c:3001 +#: describe.c:3053 msgid "Triggers:" msgstr "Тригери:" -#: describe.c:3005 +#: describe.c:3057 msgid "Disabled user triggers:" msgstr "Вимкнені користувацькі тригери:" -#: describe.c:3007 +#: describe.c:3059 msgid "Disabled triggers:" msgstr "Вимкнені тригери:" -#: describe.c:3010 +#: describe.c:3062 msgid "Disabled internal triggers:" msgstr "Вимкнені внутрішні тригери:" -#: describe.c:3013 +#: describe.c:3065 msgid "Triggers firing always:" msgstr "Тригери, що завжди працюють:" -#: describe.c:3016 +#: describe.c:3068 msgid "Triggers firing on replica only:" msgstr "Тригери, що працюють тільки на репліці:" -#: describe.c:3075 +#: describe.c:3140 #, c-format msgid "Server: %s" msgstr "Сервер: %s" -#: describe.c:3083 +#: describe.c:3148 #, c-format msgid "FDW options: (%s)" msgstr "Налаштування FDW: (%s)" -#: describe.c:3102 +#: describe.c:3169 msgid "Inherits" msgstr "Успадковує" -#: describe.c:3161 +#: describe.c:3229 #, c-format msgid "Number of partitions: %d" msgstr "Число секцій: %d" -#: describe.c:3170 -#, c-format -msgid "Number of child tables: %d (Use \\d+ to list them.)" -msgstr "Кількість дочірніх таблиць: %d (\\d+ для списку)" - -#: describe.c:3172 +#: describe.c:3238 #, c-format msgid "Number of partitions: %d (Use \\d+ to list them.)" msgstr "Кількість розділів: %d (\\d+ для списку)" -#: describe.c:3180 +#: describe.c:3240 +#, c-format +msgid "Number of child tables: %d (Use \\d+ to list them.)" +msgstr "Кількість дочірніх таблиць: %d (\\d+ для списку)" + +#: describe.c:3247 msgid "Child tables" msgstr "Дочірні таблиці" -#: describe.c:3180 +#: describe.c:3247 msgid "Partitions" msgstr "Розділи" -#: describe.c:3223 +#: describe.c:3276 #, c-format msgid "Typed table of type: %s" msgstr "Типізована таблиця типу: %s" -#: describe.c:3239 +#: describe.c:3292 msgid "Replica Identity" msgstr "Ідентичність репліки" -#: describe.c:3252 +#: describe.c:3305 msgid "Has OIDs: yes" msgstr "Має OIDs: так" -#: describe.c:3261 +#: describe.c:3314 #, c-format msgid "Access method: %s" msgstr "Метод доступу: %s" -#: describe.c:3340 +#: describe.c:3394 #, c-format msgid "Tablespace: \"%s\"" msgstr "Табличний простір: \"%s\"" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:3352 +#: describe.c:3406 #, c-format msgid ", tablespace \"%s\"" msgstr ", табличний простір \"%s\"" -#: describe.c:3445 +#: describe.c:3499 msgid "List of roles" msgstr "Список ролей" -#: describe.c:3447 +#: describe.c:3501 msgid "Role name" msgstr "Ім'я ролі" -#: describe.c:3448 +#: describe.c:3502 msgid "Attributes" msgstr "Атрибути" -#: describe.c:3449 +#: describe.c:3503 msgid "Member of" msgstr "Член" -#: describe.c:3460 +#: describe.c:3514 msgid "Superuser" msgstr "Суперкористувач" -#: describe.c:3463 +#: describe.c:3517 msgid "No inheritance" msgstr "Без успадкування" -#: describe.c:3466 +#: describe.c:3520 msgid "Create role" msgstr "Створити роль" -#: describe.c:3469 +#: describe.c:3523 msgid "Create DB" msgstr "Створити базу даних" -#: describe.c:3472 +#: describe.c:3526 msgid "Cannot login" msgstr "Не може увійти" -#: describe.c:3476 +#: describe.c:3530 msgid "Replication" msgstr "Реплікація" -#: describe.c:3480 +#: describe.c:3534 msgid "Bypass RLS" msgstr "Обхід RLC" -#: describe.c:3489 +#: describe.c:3543 msgid "No connections" msgstr "Без підключень" -#: describe.c:3491 +#: describe.c:3545 #, c-format msgid "%d connection" msgid_plural "%d connections" @@ -1724,539 +1755,635 @@ msgstr[1] "%d підключення" msgstr[2] "%d підключень" msgstr[3] "%d підключення" -#: describe.c:3501 +#: describe.c:3555 msgid "Password valid until " msgstr "Пароль дійнсий до" -#: describe.c:3551 +#: describe.c:3605 #, c-format msgid "The server (version %s) does not support per-database role settings." msgstr "Сервер (версія %s) не підтримує рольові налаштування побазово." -#: describe.c:3564 +#: describe.c:3618 msgid "Role" msgstr "Роль" -#: describe.c:3565 +#: describe.c:3619 msgid "Database" msgstr "База даних" -#: describe.c:3566 +#: describe.c:3620 msgid "Settings" msgstr "Параметри" -#: describe.c:3587 +#: describe.c:3641 #, c-format msgid "Did not find any settings for role \"%s\" and database \"%s\"." msgstr "Не знайдено жодного параметра для ролі \"%s\" і бази даних \"%s\"." -#: describe.c:3590 +#: describe.c:3644 #, c-format msgid "Did not find any settings for role \"%s\"." msgstr "Не знайдено жодного параметру для ролі \"%s\"." -#: describe.c:3593 +#: describe.c:3647 #, c-format msgid "Did not find any settings." msgstr "Не знайдено жодного параметру." -#: describe.c:3598 +#: describe.c:3652 msgid "List of settings" msgstr "Список параметрів" -#: describe.c:3668 +#: describe.c:3723 msgid "index" msgstr "індекс" -#: describe.c:3670 +#: describe.c:3725 msgid "special" msgstr "спеціальний" -#: describe.c:3673 describe.c:3858 +#: describe.c:3728 describe.c:3938 msgid "partitioned index" msgstr "секційний індекс" -#: describe.c:3771 +#: describe.c:3752 +msgid "permanent" +msgstr "постійна" + +#: describe.c:3753 +msgid "temporary" +msgstr "тимчасова" + +#: describe.c:3754 +msgid "unlogged" +msgstr "нежурнальована" + +#: describe.c:3755 +msgid "Persistence" +msgstr "Стійкість" + +#: describe.c:3851 msgid "List of relations" msgstr "Список відношень" -#: describe.c:3819 +#: describe.c:3899 #, c-format msgid "The server (version %s) does not support declarative table partitioning." msgstr "Сервер (версія %s) не підтримує декларативне секціонування таблиць." -#: describe.c:3830 +#: describe.c:3910 msgid "List of partitioned indexes" msgstr "Список секційних індексів" -#: describe.c:3832 +#: describe.c:3912 msgid "List of partitioned tables" msgstr "Список секційних таблиць" -#: describe.c:3836 +#: describe.c:3916 msgid "List of partitioned relations" msgstr "Список секційних відношень" -#: describe.c:3867 +#: describe.c:3947 msgid "Parent name" msgstr "Батьківська назва" -#: describe.c:3880 +#: describe.c:3960 msgid "Leaf partition size" msgstr "Розмір дочірньої секції" -#: describe.c:3883 describe.c:3889 +#: describe.c:3963 describe.c:3969 msgid "Total size" msgstr "Загальний розмір" -#: describe.c:4021 +#: describe.c:4101 msgid "Trusted" msgstr "Надійний" -#: describe.c:4029 +#: describe.c:4109 msgid "Internal language" msgstr "Внутрішня мова" -#: describe.c:4030 +#: describe.c:4110 msgid "Call handler" msgstr "Обробник виклику" -#: describe.c:4031 describe.c:5203 +#: describe.c:4111 describe.c:5283 msgid "Validator" msgstr "Функція перевірки" -#: describe.c:4034 +#: describe.c:4114 msgid "Inline handler" msgstr "Оброблювач впровадженого коду" -#: describe.c:4062 +#: describe.c:4142 msgid "List of languages" msgstr "Список мов" -#: describe.c:4107 +#: describe.c:4187 msgid "Check" msgstr "Перевірка" -#: describe.c:4149 +#: describe.c:4229 msgid "List of domains" msgstr "Список доменів" -#: describe.c:4183 +#: describe.c:4263 msgid "Source" msgstr "Джерело" -#: describe.c:4184 +#: describe.c:4264 msgid "Destination" msgstr "Призначення" -#: describe.c:4186 +#: describe.c:4266 describe.c:6101 msgid "Default?" msgstr "За замовчуванням?" -#: describe.c:4223 +#: describe.c:4303 msgid "List of conversions" msgstr "Список перетворень" -#: describe.c:4262 +#: describe.c:4342 msgid "Event" msgstr "Подія" -#: describe.c:4264 +#: describe.c:4344 msgid "enabled" msgstr "увімкнено" -#: describe.c:4265 +#: describe.c:4345 msgid "replica" msgstr "репліка" -#: describe.c:4266 +#: describe.c:4346 msgid "always" msgstr "завжди" -#: describe.c:4267 +#: describe.c:4347 msgid "disabled" msgstr "вимкнено" -#: describe.c:4268 describe.c:5902 +#: describe.c:4348 describe.c:5997 msgid "Enabled" msgstr "Увімкнено" -#: describe.c:4270 +#: describe.c:4350 msgid "Tags" msgstr "Теги" -#: describe.c:4289 +#: describe.c:4369 msgid "List of event triggers" msgstr "Список тригерів подій" -#: describe.c:4318 +#: describe.c:4398 msgid "Source type" msgstr "Початковий тип" -#: describe.c:4319 +#: describe.c:4399 msgid "Target type" msgstr "Тип цілі" -#: describe.c:4350 +#: describe.c:4430 msgid "in assignment" msgstr "у призначенні" -#: describe.c:4352 +#: describe.c:4432 msgid "Implicit?" msgstr "Приховане?" -#: describe.c:4407 +#: describe.c:4487 msgid "List of casts" msgstr "Список приведення типів" -#: describe.c:4435 +#: describe.c:4515 #, c-format msgid "The server (version %s) does not support collations." msgstr "Сервер (версія %s) не підтримує співставлення." -#: describe.c:4456 describe.c:4460 +#: describe.c:4536 describe.c:4540 msgid "Provider" msgstr "Постачальник" -#: describe.c:4466 describe.c:4471 +#: describe.c:4546 describe.c:4551 msgid "Deterministic?" msgstr "Детермінований?" -#: describe.c:4506 +#: describe.c:4586 msgid "List of collations" msgstr "Список правил сортування" -#: describe.c:4565 +#: describe.c:4645 msgid "List of schemas" msgstr "Список схем" -#: describe.c:4590 describe.c:4837 describe.c:4908 describe.c:4979 +#: describe.c:4670 describe.c:4917 describe.c:4988 describe.c:5059 #, c-format msgid "The server (version %s) does not support full text search." msgstr "Сервер (версія %s) не підтримує повнотекстовий пошук." -#: describe.c:4625 +#: describe.c:4705 msgid "List of text search parsers" msgstr "Список парсерів текстового пошуку" -#: describe.c:4670 +#: describe.c:4750 #, c-format msgid "Did not find any text search parser named \"%s\"." msgstr "Не знайдено жодного парсера текстового пошуку \"%s\"." -#: describe.c:4673 +#: describe.c:4753 #, c-format msgid "Did not find any text search parsers." msgstr "Не знайдено жодного парсера текстового пошуку." -#: describe.c:4748 +#: describe.c:4828 msgid "Start parse" msgstr "Почати розбір" -#: describe.c:4749 +#: describe.c:4829 msgid "Method" msgstr "Метод" -#: describe.c:4753 +#: describe.c:4833 msgid "Get next token" msgstr "Отримати наступний токен" -#: describe.c:4755 +#: describe.c:4835 msgid "End parse" msgstr "Закінчити розбір" -#: describe.c:4757 +#: describe.c:4837 msgid "Get headline" msgstr "Отримати заголовок" -#: describe.c:4759 +#: describe.c:4839 msgid "Get token types" msgstr "Отримати типи токенів" -#: describe.c:4770 +#: describe.c:4850 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "Парсер текстового пошуку \"%s.%s\"" -#: describe.c:4773 +#: describe.c:4853 #, c-format msgid "Text search parser \"%s\"" msgstr "Парсер текстового пошуку \"%s\"" -#: describe.c:4792 +#: describe.c:4872 msgid "Token name" msgstr "Ім'я токену" -#: describe.c:4803 +#: describe.c:4883 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "Типи токенів для парсера \"%s.%s\"" -#: describe.c:4806 +#: describe.c:4886 #, c-format msgid "Token types for parser \"%s\"" msgstr "Типи токенів для парсера \"%s\"" -#: describe.c:4860 +#: describe.c:4940 msgid "Template" msgstr "Шаблон" -#: describe.c:4861 +#: describe.c:4941 msgid "Init options" msgstr "Параметри ініціалізації" -#: describe.c:4883 +#: describe.c:4963 msgid "List of text search dictionaries" msgstr "Список словників текстового пошуку" -#: describe.c:4926 +#: describe.c:5006 msgid "Init" msgstr "Ініціалізація" -#: describe.c:4927 +#: describe.c:5007 msgid "Lexize" msgstr "Виділення лексем" -#: describe.c:4954 +#: describe.c:5034 msgid "List of text search templates" msgstr "Список шаблонів текстового пошуку" -#: describe.c:5014 +#: describe.c:5094 msgid "List of text search configurations" msgstr "Список конфігурацій текстового пошуку" -#: describe.c:5060 +#: describe.c:5140 #, c-format msgid "Did not find any text search configuration named \"%s\"." msgstr "Не знайдено жодної конфігурації текстового пошуку під назвою \"%s\"." -#: describe.c:5063 +#: describe.c:5143 #, c-format msgid "Did not find any text search configurations." msgstr "Не знайдено жодної конфігурації текствого пошуку." -#: describe.c:5129 +#: describe.c:5209 msgid "Token" msgstr "Токен" -#: describe.c:5130 +#: describe.c:5210 msgid "Dictionaries" msgstr "Словники" -#: describe.c:5141 +#: describe.c:5221 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "Конфігурація пошуку тексту \"%s.%s\"" -#: describe.c:5144 +#: describe.c:5224 #, c-format msgid "Text search configuration \"%s\"" msgstr "Конфігурація пошуку тексту \"%s\"" -#: describe.c:5148 +#: describe.c:5228 #, c-format msgid "\n" "Parser: \"%s.%s\"" msgstr "\n" "Парсер: \"%s.%s\"" -#: describe.c:5151 +#: describe.c:5231 #, c-format msgid "\n" "Parser: \"%s\"" msgstr "\n" "Парсер: \"%s\"" -#: describe.c:5185 +#: describe.c:5265 #, c-format msgid "The server (version %s) does not support foreign-data wrappers." msgstr "Сервер (версія %s) не підтримує джерела сторонніх даних." -#: describe.c:5243 +#: describe.c:5323 msgid "List of foreign-data wrappers" msgstr "Список джерел сторонніх даних" -#: describe.c:5268 +#: describe.c:5348 #, c-format msgid "The server (version %s) does not support foreign servers." msgstr "Сервер (версія %s) не підтримує сторонні сервери." -#: describe.c:5281 +#: describe.c:5361 msgid "Foreign-data wrapper" msgstr "Джерело сторонніх даних" -#: describe.c:5299 describe.c:5504 +#: describe.c:5379 describe.c:5584 msgid "Version" msgstr "Версія" -#: describe.c:5325 +#: describe.c:5405 msgid "List of foreign servers" msgstr "Список сторонніх серверів" -#: describe.c:5350 +#: describe.c:5430 #, c-format msgid "The server (version %s) does not support user mappings." msgstr "Сервер (версія %s) не підтримує зіставлення користувачів." -#: describe.c:5360 describe.c:5424 +#: describe.c:5440 describe.c:5504 msgid "Server" msgstr "Сервер" -#: describe.c:5361 +#: describe.c:5441 msgid "User name" msgstr "Ім'я користувача" -#: describe.c:5386 +#: describe.c:5466 msgid "List of user mappings" msgstr "Список зіставлень користувачів" -#: describe.c:5411 +#: describe.c:5491 #, c-format msgid "The server (version %s) does not support foreign tables." msgstr "Сервер (версія %s) не підтримує сторонні таблиці." -#: describe.c:5464 +#: describe.c:5544 msgid "List of foreign tables" msgstr "Список сторонніх таблиць" -#: describe.c:5489 describe.c:5546 +#: describe.c:5569 describe.c:5626 #, c-format msgid "The server (version %s) does not support extensions." msgstr "Сервер (версія %s) не підтримує розширення." -#: describe.c:5521 +#: describe.c:5601 msgid "List of installed extensions" msgstr "Список встановлених розширень" -#: describe.c:5574 +#: describe.c:5654 #, c-format msgid "Did not find any extension named \"%s\"." msgstr "Не знайдено жодного розширення під назвою \"%s\"." -#: describe.c:5577 +#: describe.c:5657 #, c-format msgid "Did not find any extensions." msgstr "Не знайдено жодного розширення." -#: describe.c:5621 +#: describe.c:5701 msgid "Object description" msgstr "Опис об'єкту" -#: describe.c:5631 +#: describe.c:5711 #, c-format msgid "Objects in extension \"%s\"" msgstr "Об'єкти в розширенні \"%s\"" -#: describe.c:5660 describe.c:5731 +#: describe.c:5740 describe.c:5816 #, c-format msgid "The server (version %s) does not support publications." msgstr "Сервер (версія %s) не підтримує публікації." -#: describe.c:5677 describe.c:5803 +#: describe.c:5757 describe.c:5894 msgid "All tables" msgstr "Усі таблиці" -#: describe.c:5678 describe.c:5804 +#: describe.c:5758 describe.c:5895 msgid "Inserts" msgstr "Вставки" -#: describe.c:5679 describe.c:5805 +#: describe.c:5759 describe.c:5896 msgid "Updates" msgstr "Оновлення" -#: describe.c:5680 describe.c:5806 +#: describe.c:5760 describe.c:5897 msgid "Deletes" msgstr "Видалення" -#: describe.c:5684 describe.c:5808 +#: describe.c:5764 describe.c:5899 msgid "Truncates" msgstr "Очищення" -#: describe.c:5701 +#: describe.c:5768 describe.c:5901 +msgid "Via root" +msgstr "Через root" + +#: describe.c:5785 msgid "List of publications" msgstr "Список публікацій" -#: describe.c:5769 +#: describe.c:5858 #, c-format msgid "Did not find any publication named \"%s\"." msgstr "Не знайдено жодної публікації під назвою \"%s\"." -#: describe.c:5772 +#: describe.c:5861 #, c-format msgid "Did not find any publications." msgstr "Не знайдено жодної публікації." -#: describe.c:5799 +#: describe.c:5890 #, c-format msgid "Publication %s" msgstr "Публікація %s" -#: describe.c:5843 +#: describe.c:5938 msgid "Tables:" msgstr "Таблиці:" -#: describe.c:5887 +#: describe.c:5982 #, c-format msgid "The server (version %s) does not support subscriptions." msgstr "Сервер (версія %s) не підтримує підписки." -#: describe.c:5903 +#: describe.c:5998 msgid "Publication" msgstr "Публікація" -#: describe.c:5910 +#: describe.c:6005 msgid "Synchronous commit" msgstr "Синхронні затвердження" -#: describe.c:5911 +#: describe.c:6006 msgid "Conninfo" msgstr "Conninfo" -#: describe.c:5933 +#: describe.c:6028 msgid "List of subscriptions" msgstr "Список підписок" -#: help.c:74 +#: describe.c:6095 describe.c:6184 describe.c:6270 describe.c:6353 +msgid "AM" +msgstr "АМ" + +#: describe.c:6096 +msgid "Input type" +msgstr "Тип вводу" + +#: describe.c:6097 +msgid "Storage type" +msgstr "Тип сховища" + +#: describe.c:6098 +msgid "Operator class" +msgstr "Клас операторів" + +#: describe.c:6110 describe.c:6185 describe.c:6271 describe.c:6354 +msgid "Operator family" +msgstr "Сімейство операторів" + +#: describe.c:6143 +msgid "List of operator classes" +msgstr "Список класів операторів" + +#: describe.c:6186 +msgid "Applicable types" +msgstr "Типи для застосування" + +#: describe.c:6225 +msgid "List of operator families" +msgstr "Список сімейств операторів" + +#: describe.c:6272 +msgid "Operator" +msgstr "Оператор" + +#: describe.c:6273 +msgid "Strategy" +msgstr "Стратегія" + +#: describe.c:6274 +msgid "ordering" +msgstr "упорядкування" + +#: describe.c:6275 +msgid "search" +msgstr "пошук" + +#: describe.c:6276 +msgid "Purpose" +msgstr "Ціль" + +#: describe.c:6281 +msgid "Sort opfamily" +msgstr "Сімейство операторів сортування" + +#: describe.c:6312 +msgid "List of operators of operator families" +msgstr "Список операторів сімейств операторів" + +#: describe.c:6355 +msgid "Registered left type" +msgstr "Зареєстрований лівий тип" + +#: describe.c:6356 +msgid "Registered right type" +msgstr "Зареєстрований правий тип" + +#: describe.c:6357 +msgid "Number" +msgstr "Число" + +#: describe.c:6393 +msgid "List of support functions of operator families" +msgstr "Список функцій підтримки сімейств операторів" + +#: help.c:73 #, c-format msgid "psql is the PostgreSQL interactive terminal.\n\n" msgstr "psql - це інтерактивний термінал PostgreSQL.\n\n" -#: help.c:75 help.c:349 help.c:425 help.c:468 +#: help.c:74 help.c:355 help.c:431 help.c:474 #, c-format msgid "Usage:\n" msgstr "Використання:\n" -#: help.c:76 +#: help.c:75 #, c-format msgid " psql [OPTION]... [DBNAME [USERNAME]]\n\n" msgstr " psql [ОПЦІЯ]... [БД [КОРИСТУВАЧ]]\n\n" -#: help.c:78 +#: help.c:77 #, c-format msgid "General options:\n" msgstr "Основні налаштування:\n" -#: help.c:83 +#: help.c:82 #, c-format msgid " -c, --command=COMMAND run only single command (SQL or internal) and exit\n" msgstr " -c, --command=КОМАНДА виконати лише одну команду (SQL або внутрішню) і вийти\n" -#: help.c:84 +#: help.c:83 #, c-format msgid " -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" msgstr " -d, --dbname=DBNAME ім'я бази даних для підключення (за замовчання: \"%s\") \n" -#: help.c:85 +#: help.c:84 #, c-format msgid " -f, --file=FILENAME execute commands from file, then exit\n" msgstr " -f, --file=FILENAME виконує команди з файлу, потім виходить\n" -#: help.c:86 +#: help.c:85 #, c-format msgid " -l, --list list available databases, then exit\n" msgstr " -l, --list виводить список доступних баз даних, потім виходить\n" -#: help.c:87 +#: help.c:86 #, c-format msgid " -v, --set=, --variable=NAME=VALUE\n" " set psql variable NAME to VALUE\n" @@ -2265,113 +2392,113 @@ msgstr " -v, --set=, --variable=NAME=VALUE\n" " присвоїти змінній psql NAME значення VALUE\n" " (наприклад, -v ON_ERROR_STOP=1)\n" -#: help.c:90 +#: help.c:89 #, c-format msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version вивести інофрмацію про версію, потім вийти\n" +msgstr " -V, --version вивести інформацію про версію, потім вийти\n" -#: help.c:91 +#: help.c:90 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" msgstr " -X, --no-psqlrc ігнорувати файл параметрів запуска (~/.psqlrc)\n" -#: help.c:92 +#: help.c:91 #, c-format msgid " -1 (\"one\"), --single-transaction\n" " execute as a single transaction (if non-interactive)\n" msgstr " -1 (\"один\"), --single-transaction\n" " виконує як одну транзакцію (якщо не інтерактивна)\n" -#: help.c:94 +#: help.c:93 #, c-format msgid " -?, --help[=options] show this help, then exit\n" msgstr " -?, --help [=options] показати цю довідку, потім вийти\n" -#: help.c:95 +#: help.c:94 #, c-format msgid " --help=commands list backslash commands, then exit\n" msgstr " --help=commands перерахувати команди, потім вийти\n" -#: help.c:96 +#: help.c:95 #, c-format msgid " --help=variables list special variables, then exit\n" msgstr " --help=variables перерахувати спеціальні змінні, потім вийти\n" -#: help.c:98 +#: help.c:97 #, c-format msgid "\n" "Input and output options:\n" msgstr "\n" "Параметри вводу і виводу:\n" -#: help.c:99 +#: help.c:98 #, c-format msgid " -a, --echo-all echo all input from script\n" msgstr " -a, --echo-all відобразити всі вхідні дані з скрипта\n" -#: help.c:100 +#: help.c:99 #, c-format msgid " -b, --echo-errors echo failed commands\n" msgstr " -b, --echo-errors відобразити команди з помилками\n" -#: help.c:101 +#: help.c:100 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" msgstr " -e, --echo-queries відобразити команди, відправлені на сервер\n" -#: help.c:102 +#: help.c:101 #, c-format msgid " -E, --echo-hidden display queries that internal commands generate\n" msgstr " -E, --echo-hidden відобразити запити, згенеровані внутрішніми командами\n" -#: help.c:103 +#: help.c:102 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" msgstr " -L, --log-file=FILENAME зберегти протокол роботи у файл\n" -#: help.c:104 +#: help.c:103 #, c-format msgid " -n, --no-readline disable enhanced command line editing (readline)\n" msgstr " -n, --no-readline вимкнути розширене редагування командного рядка (readline)\n" -#: help.c:105 +#: help.c:104 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" msgstr " -o, --output=FILENAME надсилати результати запиту до файлу (або до каналу |)\n" -#: help.c:106 +#: help.c:105 #, c-format msgid " -q, --quiet run quietly (no messages, only query output)\n" msgstr " -q, --quiet тихий запуск (ніяких повідомлень, лише результат запитів)\n" -#: help.c:107 +#: help.c:106 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" msgstr " -s, --single-step покроковий режим (підтвердження кожного запиту)\n" -#: help.c:108 +#: help.c:107 #, c-format msgid " -S, --single-line single-line mode (end of line terminates SQL command)\n" msgstr " -S, --single-line однорядковий режим (кінець рядка завершує команду)\n" -#: help.c:110 +#: help.c:109 #, c-format msgid "\n" "Output format options:\n" msgstr "\n" "Параметри формату виводу:\n" -#: help.c:111 +#: help.c:110 #, c-format msgid " -A, --no-align unaligned table output mode\n" msgstr " -A, --no-align режим виводу не вирівняної таблиці\n" -#: help.c:112 +#: help.c:111 #, c-format msgid " --csv CSV (Comma-Separated Values) table output mode\n" msgstr " --csv режим виводу таблиць CSV (Comma-Separated Values)\n" -#: help.c:113 +#: help.c:112 #, c-format msgid " -F, --field-separator=STRING\n" " field separator for unaligned output (default: \"%s\")\n" @@ -2379,17 +2506,17 @@ msgstr " -F, --field-separator=СТРОКА\n" " розділювач полів при не вирівняному виводі\n" " (за замовчуванням: \"%s\")\n" -#: help.c:116 +#: help.c:115 #, c-format msgid " -H, --html HTML table output mode\n" msgstr " -H, --html вивід таблиці у форматі HTML\n" -#: help.c:117 +#: help.c:116 #, c-format msgid " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset command)\n" msgstr " -P, --pset=VAR[=ARG] встановити параметр виводу змінної VAR значенню ARG (див. команду \"\\pset\")\n" -#: help.c:118 +#: help.c:117 #, c-format msgid " -R, --record-separator=STRING\n" " record separator for unaligned output (default: newline)\n" @@ -2397,72 +2524,72 @@ msgstr " -R, --record-separator=СТРОКА\n" " розділювач записів при не вирівняному виводі\n" " (за замовчуванням: новий рядок)\n" -#: help.c:120 +#: help.c:119 #, c-format msgid " -t, --tuples-only print rows only\n" msgstr " -t, --tuples-only виводити лише рядки\n" -#: help.c:121 +#: help.c:120 #, c-format msgid " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, border)\n" msgstr " -T, --table-attr=ТЕКСТ встановити атрибути HTML-таблиці (width, border)\n" -#: help.c:122 +#: help.c:121 #, c-format msgid " -x, --expanded turn on expanded table output\n" msgstr " -x, --expanded ввімкнути розширене виведення таблиці\n" -#: help.c:123 +#: help.c:122 #, c-format msgid " -z, --field-separator-zero\n" " set field separator for unaligned output to zero byte\n" msgstr " -z, --field-separator-zero\n" " встановити розділювач полів для не вирівняного виводу в нульовий байт\n" -#: help.c:125 +#: help.c:124 #, c-format msgid " -0, --record-separator-zero\n" " set record separator for unaligned output to zero byte\n" msgstr " -0, --record-separator-zero\n" " встановити розділювач записів для не вирівняного виводу в нульовий байт\n" -#: help.c:128 +#: help.c:127 #, c-format msgid "\n" "Connection options:\n" msgstr "\n" "Налаштування з'єднання:\n" -#: help.c:131 +#: help.c:130 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory (default: \"%s\")\n" msgstr " -h, --host=HOSTNAME хост сервера бази даних або каталог сокетів (за замовчуванням: \"%s)\n" -#: help.c:132 +#: help.c:131 msgid "local socket" msgstr "локальний сокет" -#: help.c:135 +#: help.c:134 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" msgstr " -p, --port=PORT порт сервера бази даних (за замовчуванням: \"%s\")\n" -#: help.c:141 +#: help.c:140 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" msgstr " -U, --username=USERNAME ім'я користувача бази даних (за змовчуванням: \"%s\")\n" -#: help.c:142 +#: help.c:141 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password ніколи не запитувати пароль\n" -#: help.c:143 +#: help.c:142 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password запитувати пароль завжди (повинно траплятись автоматично)\n" -#: help.c:145 +#: help.c:144 #, c-format msgid "\n" "For more information, type \"\\?\" (for internal commands) or \"\\help\" (for SQL\n" @@ -2471,10 +2598,15 @@ msgid "\n" msgstr "\n" "Щоб дізнатися більше, введіть \"\\?\" (для внутрішніх команд) або \"\\help\"(для команд SQL) в psql, або звіртеся з розділом psql документації PostgreSQL. \n\n" +#: help.c:147 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "Повідомляти про помилки на <%s>.\n" + #: help.c:148 #, c-format -msgid "Report bugs to .\n" -msgstr "Про помилки повідомляйте на .\n" +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" #: help.c:174 #, c-format @@ -2498,420 +2630,447 @@ msgstr " \\errverbose вивести максимально докл #: help.c:178 #, c-format -msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" -msgstr " \\g [FILE] or ; виконати запит (та надіслати результати до файлу або до каналу |)\n" +msgid " \\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);\n" +" \\g with no arguments is equivalent to a semicolon\n" +msgstr " \\g [(OPTIONS)] [FILE] виконати запит (і надіслати результати до файлу або |каналу);\n" +" \\g без аргументів рівнозначно крапці з комою\n" -#: help.c:179 +#: help.c:180 #, c-format msgid " \\gdesc describe result of query, without executing it\n" msgstr " \\gdesc описати результат запиту без виконання\n" -#: help.c:180 +#: help.c:181 #, c-format msgid " \\gexec execute query, then execute each value in its result\n" msgstr " \\gexec виконати запит, потім виконати кожне значення в його результаті\n" -#: help.c:181 +#: help.c:182 #, c-format msgid " \\gset [PREFIX] execute query and store results in psql variables\n" msgstr " \\gset [PREFIX] виконати запит та зберегти результати в змінних psql \n" -#: help.c:182 +#: help.c:183 #, c-format -msgid " \\gx [FILE] as \\g, but forces expanded output mode\n" -msgstr " \\gx [FILE] те саме, що й \"\\g\", але в режимі розширеного виводу\n" +msgid " \\gx [(OPTIONS)] [FILE] as \\g, but forces expanded output mode\n" +msgstr " \\gx [(OPTIONS)] [FILE] як \\g, але вмикає розширений режим виводу\n" -#: help.c:183 +#: help.c:184 #, c-format msgid " \\q quit psql\n" msgstr " \\q вийти з psql\n" -#: help.c:184 +#: help.c:185 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEC] виконувати запит кожні SEC секунд\n" -#: help.c:187 +#: help.c:188 #, c-format msgid "Help\n" msgstr "Довідка\n" -#: help.c:189 +#: help.c:190 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [commands] показати довідку по командах з \\\n" -#: help.c:190 +#: help.c:191 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr " \\? options показати довідку по параметрах командного рядку psql\n" -#: help.c:191 +#: help.c:192 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? variables показати довідку по спеціальних змінних\n" -#: help.c:192 +#: help.c:193 #, c-format msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" msgstr " \\h [NAME] довідка з синтаксису команд SQL, * для всіх команд\n" -#: help.c:195 +#: help.c:196 #, c-format msgid "Query Buffer\n" msgstr "Буфер запитів\n" -#: help.c:196 +#: help.c:197 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr " \\e [FILE] [LINE] редагувати буфер запитів (або файл) зовнішнім редактором\n" -#: help.c:197 +#: help.c:198 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr " \\ef [FUNCNAME [LINE]] редагувати визначення функції зовнішнім редактором\n" -#: help.c:198 +#: help.c:199 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr " \\ev [VIEWNAME [LINE]] редагувати визначення подання зовнішнім редактором\n" -#: help.c:199 +#: help.c:200 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p показати вміст буфера запитів\n" -#: help.c:200 +#: help.c:201 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r скинути (очистити) буфер запитів\n" -#: help.c:202 +#: help.c:203 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [FILE] відобразити історію або зберегти її до файлу\n" -#: help.c:204 +#: help.c:205 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w FILE писати буфер запитів до файлу\n" -#: help.c:207 +#: help.c:208 #, c-format msgid "Input/Output\n" msgstr "Ввід/Вивід\n" -#: help.c:208 +#: help.c:209 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr " \\copy ... виконати команду SQL COPY з потоком даних на клієнтський хост\n" -#: help.c:209 +#: help.c:210 #, c-format -msgid " \\echo [STRING] write string to standard output\n" -msgstr " \\echo [STRING] вивести рядок на стандартний вивід\n" +msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" +msgstr " \\echo [-n] [STRING] записати рядок до стандартного виводу (-n для пропуску нового рядка)\n" -#: help.c:210 +#: help.c:211 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i FILE виконати команди з файлу\n" -#: help.c:211 +#: help.c:212 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr " \\ir ФАЙЛ те саме, що \\i, але відносно розташування поточного сценарію\n" -#: help.c:212 +#: help.c:213 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [FILE] надсилати всі результати запитів до файлу або до каналу |\n" -#: help.c:213 +#: help.c:214 #, c-format -msgid " \\qecho [STRING] write string to query output stream (see \\o)\n" -msgstr " \\qecho [STRING] вивести рядок до потоку виводу запитів (див. \\o)\n" +msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" +msgstr " \\qecho [-n] [STRING] записати рядок до вихідного потоку \\o (-n для пропуску нового рядка)\n" -#: help.c:216 +#: help.c:215 +#, c-format +msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" +msgstr " \\warn [-n] [STRING] записати рядок до стандартної помилки (-n для пропуску нового рядка)\n" + +#: help.c:218 #, c-format msgid "Conditional\n" msgstr "Умовний\n" -#: help.c:217 +#: help.c:219 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if EXPR початок умовного блоку\n" -#: help.c:218 +#: help.c:220 #, c-format msgid " \\elif EXPR alternative within current conditional block\n" msgstr " \\elif EXPR альтернатива в рамках поточного блоку\n" -#: help.c:219 +#: help.c:221 #, c-format msgid " \\else final alternative within current conditional block\n" msgstr " \\else остаточна альтернатива в рамках поточного умовного блоку\n" -#: help.c:220 +#: help.c:222 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif кінець умовного блоку\n" -#: help.c:223 +#: help.c:225 #, c-format msgid "Informational\n" msgstr "Інформаційний\n" -#: help.c:224 +#: help.c:226 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (параметри: S = показати системні об'єкти, + = додаткові деталі)\n" -#: help.c:225 +#: help.c:227 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] вивести таблиці, подання і послідовності\n" -#: help.c:226 +#: help.c:228 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] NAME описати таблицю, подання, послідовність або індекс\n" -#: help.c:227 +#: help.c:229 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [PATTERN] вивести агрегати\n" -#: help.c:228 +#: help.c:230 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [PATTERN] вивести методи доступу\n" -#: help.c:229 +#: help.c:231 +#, c-format +msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" +msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] список класів операторів\n" + +#: help.c:232 +#, c-format +msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" +msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] список сімейств операторів\n" + +#: help.c:233 +#, c-format +msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" +msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] список операторів сімейств операторів\n" + +#: help.c:234 +#, c-format +msgid " \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" +msgstr " \\dAp [AMPTRN [OPFPTRN]] список функцій підтримки сімейств операторів\n" + +#: help.c:235 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [PATTERN] вивести табличні простори\n" -#: help.c:230 +#: help.c:236 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [PATTERN] вивести перетворення\n" -#: help.c:231 +#: help.c:237 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [PATTERN] вивести приведення типів\n" -#: help.c:232 +#: help.c:238 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr " \\dd[S] [PATTERN] показати опис об'єкта, що не відображається в іншому місці\n" -#: help.c:233 +#: help.c:239 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [PATTERN] вивести домени\n" -#: help.c:234 +#: help.c:240 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [PATTERN] вивести привілеї за замовчуванням\n" -#: help.c:235 +#: help.c:241 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [PATTERN] вивести зовнішні таблиці\n" -#: help.c:236 +#: help.c:242 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [PATTERN] вивести зовнішні таблиці\n" -#: help.c:237 +#: help.c:243 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [PATTERN] вивести зовнішні сервери\n" -#: help.c:238 +#: help.c:244 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [PATTERN] вивести користувацькі зіставлення\n" -#: help.c:239 +#: help.c:245 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [PATTERN] список джерел сторонніх даних\n" -#: help.c:240 +#: help.c:246 #, c-format msgid " \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] functions\n" msgstr " \\df[anptw][S+] [PATRN] вивести [тільки аггрегатні/нормальні/процедурні/тригерні/віконні] функції\n" -#: help.c:241 +#: help.c:247 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [PATTERN] вивести конфігурації текстового пошуку\n" -#: help.c:242 +#: help.c:248 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [PATTERN] вивести словники текстового пошуку\n" -#: help.c:243 +#: help.c:249 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [PATTERN] вивести парсери текстового пошуку\n" -#: help.c:244 +#: help.c:250 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [PATTERN] вивести шаблони текстового пошуку\n" -#: help.c:245 +#: help.c:251 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [PATTERN] вивести ролі\n" -#: help.c:246 +#: help.c:252 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [PATTERN] вивести індекси\n" -#: help.c:247 +#: help.c:253 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl вивести великі об'єкти, те саме, що \\lo_list\n" -#: help.c:248 +#: help.c:254 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [PATTERN] вивести процедурні мови\n" -#: help.c:249 +#: help.c:255 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [PATTERN] вивести матеріалізовані подання\n" -#: help.c:250 +#: help.c:256 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [PATTERN] вивести схеми\n" -#: help.c:251 +#: help.c:257 #, c-format msgid " \\do[S] [PATTERN] list operators\n" msgstr " \\do[S] [PATTERN] вивести оператори\n" -#: help.c:252 +#: help.c:258 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [PATTERN] вивести правила сортування\n" -#: help.c:253 +#: help.c:259 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr " \\dp [PATTERN] вивести привілеї доступу до таблиць, подань або послідновностей \n" -#: help.c:254 +#: help.c:260 #, c-format msgid " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n" msgstr " \\dP[itn+] [PATTERN] вивести [тільки індекс/таблицю] секційні відношення [n=вкладені]\n" -#: help.c:255 +#: help.c:261 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [PATRN1 [PATRN2]] вивести налаштування ролей побазово\n" -#: help.c:256 +#: help.c:262 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[+] [PATTERN] вивести реплікаційні публікації\n" -#: help.c:257 +#: help.c:263 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [PATTERN] вивести реплікаційні підписки\n" -#: help.c:258 +#: help.c:264 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [PATTERN] вивести послідовності\n" -#: help.c:259 +#: help.c:265 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [PATTERN] вивести таблиці\n" -#: help.c:260 +#: help.c:266 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [PATTERN] вивести типи даних\n" -#: help.c:261 +#: help.c:267 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [PATTERN] вивести ролі\n" -#: help.c:262 +#: help.c:268 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [PATTERN] вивести подання\n" -#: help.c:263 +#: help.c:269 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [PATTERN] вивести розширення\n" -#: help.c:264 +#: help.c:270 #, c-format msgid " \\dy [PATTERN] list event triggers\n" msgstr " \\dy [PATTERN] вивести тригери подій\n" -#: help.c:265 +#: help.c:271 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [PATTERN] вивести бази даних\n" -#: help.c:266 +#: help.c:272 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] FUNCNAME відобразити визначення функції\n" -#: help.c:267 +#: help.c:273 #, c-format msgid " \\sv[+] VIEWNAME show a view's definition\n" msgstr " \\sv[+] VIEWNAME відобразити визначення подання\n" -#: help.c:268 +#: help.c:274 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [PATTERN] те саме, що \\dp\n" -#: help.c:271 +#: help.c:277 #, c-format msgid "Formatting\n" msgstr "Форматування\n" -#: help.c:272 +#: help.c:278 #, c-format msgid " \\a toggle between unaligned and aligned output mode\n" msgstr " \\a перемикання між режимами виводу: unaligned, aligned\n" -#: help.c:273 +#: help.c:279 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr " \\C [STRING] встановити заголовок таблиці або прибрати, якщо не задано\n" -#: help.c:274 +#: help.c:280 #, c-format msgid " \\f [STRING] show or set field separator for unaligned query output\n" msgstr " \\f [STRING] показати або встановити розділювач полів для не вирівняного виводу запиту\n" -#: help.c:275 +#: help.c:281 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H переключити режим виводу HTML (поточний: %s)\n" -#: help.c:277 +#: help.c:283 #, c-format msgid " \\pset [NAME [VALUE]] set table output option\n" " (border|columns|csv_fieldsep|expanded|fieldsep|\n" @@ -2928,104 +3087,104 @@ msgstr " \\pset [NAME [VALUE]] встановити параметр виво " unicode_border_linestyle|unicode_column_linestyle|\n" " unicode_header_linestyle)\n" -#: help.c:284 +#: help.c:290 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] показувати лише рядки (поточно %s)\n" -#: help.c:286 +#: help.c:292 #, c-format msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" msgstr " \\T [STRING] встановити атрибути для HTML
або прибрати, якщо не задані\n" -#: help.c:287 +#: help.c:293 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr " \\x [on|off|auto] переключити розширений вивід (поточний: %s)\n" -#: help.c:291 +#: help.c:297 #, c-format msgid "Connection\n" msgstr "Підключення\n" -#: help.c:293 +#: help.c:299 #, c-format msgid " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently \"%s\")\n" msgstr " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo} під'єднатися до нової бази даних (поточно \"%s\")\n" -#: help.c:297 +#: help.c:303 #, c-format msgid " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently no connection)\n" msgstr " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo} під'єднатися до нової бази даних (зараз з'єднання відсутнє)\n" -#: help.c:299 +#: help.c:305 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo показати інформацію про поточне з'єднання\n" -#: help.c:300 +#: help.c:306 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [ENCODING] показати або встановити кодування клієнта\n" -#: help.c:301 +#: help.c:307 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr " \\password [USERNAME] безпечно змінити пароль користувача \n" -#: help.c:304 +#: help.c:310 #, c-format msgid "Operating System\n" msgstr "Операційна система\n" -#: help.c:305 +#: help.c:311 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [DIR] змінити поточний робочий каталог\n" -#: help.c:306 +#: help.c:312 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv NAME [VALUE] встановити або скинути змінну середовища\n" -#: help.c:307 +#: help.c:313 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr " \\timing [on|off] переключити таймер команд (поточний: %s)\n" -#: help.c:309 +#: help.c:315 #, c-format msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" msgstr " \\! [COMMAND] виконати команду в оболонці або запустити інтерактивну оболонку\n" -#: help.c:312 +#: help.c:318 #, c-format msgid "Variables\n" msgstr "Змінні\n" -#: help.c:313 +#: help.c:319 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr " \\prompt [TEXT] NAME запитати користувача значення внутрішньої змінної\n" -#: help.c:314 +#: help.c:320 #, c-format msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" msgstr " \\set [NAME [VALUE]] встановити внутрішню змінну або вивести всі, якщо не задані параметри\n" -#: help.c:315 +#: help.c:321 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset NAME скинути (видалити) значення внутрішньої змінної\n" -#: help.c:318 +#: help.c:324 #, c-format msgid "Large Objects\n" msgstr "Великі об'єкти\n" -#: help.c:319 +#: help.c:325 #, c-format msgid " \\lo_export LOBOID FILE\n" " \\lo_import FILE [COMMENT]\n" @@ -3036,31 +3195,31 @@ msgstr " \\lo_export LOBOID FILE\n" " \\lo_list\n" " \\lo_unlink LOBOID операції з великими об'єктами\n" -#: help.c:346 +#: help.c:352 #, c-format msgid "List of specially treated variables\n\n" msgstr "Список спеціальних змінних\n\n" -#: help.c:348 +#: help.c:354 #, c-format msgid "psql variables:\n" msgstr "змінні psql:\n" -#: help.c:350 +#: help.c:356 #, c-format msgid " psql --set=NAME=VALUE\n" " or \\set NAME VALUE inside psql\n\n" msgstr " psql --set=ІМ'Я=ЗНАЧЕННЯ\n" " або \\set ІМ'Я ЗНАЧЕННЯ усередині psql\n\n" -#: help.c:352 +#: help.c:358 #, c-format msgid " AUTOCOMMIT\n" " if set, successful SQL commands are automatically committed\n" msgstr " AUTOCOMMIT\n" " якщо встановлений, успішні SQL-команди підтверджуються автоматично\n" -#: help.c:354 +#: help.c:360 #, c-format msgid " COMP_KEYWORD_CASE\n" " determines the case used to complete SQL key words\n" @@ -3069,20 +3228,20 @@ msgstr " COMP_KEYWORD_CASE\n" " визначає регістр для автодоповнення ключових слів SQL\n" " [lower, upper, preserve-lower, preserve-upper]\n" -#: help.c:357 +#: help.c:363 #, c-format msgid " DBNAME\n" " the currently connected database name\n" msgstr " DBNAME назва під'єднаної бази даних\n" -#: help.c:359 +#: help.c:365 #, c-format msgid " ECHO\n" " controls what input is written to standard output\n" " [all, errors, none, queries]\n" msgstr " ECHO контролює ввід, що виводиться на стандартний вивід [all, errors, none, queries]\n" -#: help.c:362 +#: help.c:368 #, c-format msgid " ECHO_HIDDEN\n" " if set, display internal queries executed by backslash commands;\n" @@ -3091,71 +3250,71 @@ msgstr " ECHO_HIDDEN\n" " якщо ввімкнено, виводить внутрішні запити, виконані за допомогою \"\\\";\n" " якщо встановлено значення \"noexec\", тільки виводяться, але не виконуються\n" -#: help.c:365 +#: help.c:371 #, c-format msgid " ENCODING\n" " current client character set encoding\n" msgstr " ENCODING\n" " поточне кодування набору символів клієнта\n" -#: help.c:367 +#: help.c:373 #, c-format msgid " ERROR\n" " true if last query failed, else false\n" msgstr " ERROR\n" " істина, якщо в останньому запиті є помилка, в іншому разі - хибність\n" -#: help.c:369 +#: help.c:375 #, c-format msgid " FETCH_COUNT\n" " the number of result rows to fetch and display at a time (0 = unlimited)\n" msgstr " FETCH_COUNT\n" " число рядків з результатами для передачі та відображення за один раз (0 = необмежено)\n" -#: help.c:371 +#: help.c:377 #, c-format msgid " HIDE_TABLEAM\n" " if set, table access methods are not displayed\n" msgstr " HIDE_TABLEAM\n" " якщо вказано, методи доступу до таблиць не відображаються\n" -#: help.c:373 +#: help.c:379 #, c-format msgid " HISTCONTROL\n" " controls command history [ignorespace, ignoredups, ignoreboth]\n" msgstr " HISTCONTROL контролює історію команд [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:375 +#: help.c:381 #, c-format msgid " HISTFILE\n" " file name used to store the command history\n" msgstr " HISTFILE ім'я файлу для зберігання історії команд\n" -#: help.c:377 +#: help.c:383 #, c-format msgid " HISTSIZE\n" " maximum number of commands to store in the command history\n" msgstr " HISTSIZE максимальна кількість команд для зберігання в історії команд\n" -#: help.c:379 +#: help.c:385 #, c-format msgid " HOST\n" " the currently connected database server host\n" msgstr " HOST поточний підключений хост сервера бази даних\n" -#: help.c:381 +#: help.c:387 #, c-format msgid " IGNOREEOF\n" " number of EOFs needed to terminate an interactive session\n" msgstr " IGNOREEOF кількість EOF для завершення інтерактивної сесії\n" -#: help.c:383 +#: help.c:389 #, c-format msgid " LASTOID\n" " value of the last affected OID\n" msgstr " LASTOID значення останнього залученого OID\n" -#: help.c:385 +#: help.c:391 #, c-format msgid " LAST_ERROR_MESSAGE\n" " LAST_ERROR_SQLSTATE\n" @@ -3164,63 +3323,63 @@ msgstr " LAST_ERROR_MESSAGE\n" " LAST_ERROR_SQLSTATE\n" " повідомлення та код SQLSTATE останньої помилки, або пустий рядок та \"00000\", якщо помилки не було\n" -#: help.c:388 +#: help.c:394 #, c-format msgid " ON_ERROR_ROLLBACK\n" " if set, an error doesn't stop a transaction (uses implicit savepoints)\n" msgstr " ON_ERROR_ROLLBACK\n" " якщо встановлено, транзакція не припиняється у разі помилки (використовуються неявні точки збереження)\n" -#: help.c:390 +#: help.c:396 #, c-format msgid " ON_ERROR_STOP\n" " stop batch execution after error\n" msgstr " ON_ERROR_STOP\n" " зупиняти виконання пакету команд після помилки\n" -#: help.c:392 +#: help.c:398 #, c-format msgid " PORT\n" " server port of the current connection\n" msgstr " PORT\n" " порт сервера для поточного з'єднання\n" -#: help.c:394 +#: help.c:400 #, c-format msgid " PROMPT1\n" " specifies the standard psql prompt\n" msgstr " PROMPT1\n" " визначає стандратне запрошення psql \n" -#: help.c:396 +#: help.c:402 #, c-format msgid " PROMPT2\n" " specifies the prompt used when a statement continues from a previous line\n" msgstr " PROMPT2\n" " визначає запрошення, яке використовується при продовженні команди з попереднього рядка\n" -#: help.c:398 +#: help.c:404 #, c-format msgid " PROMPT3\n" " specifies the prompt used during COPY ... FROM STDIN\n" msgstr " PROMPT3\n" " визначає запрошення, яке виконується під час COPY ... FROM STDIN\n" -#: help.c:400 +#: help.c:406 #, c-format msgid " QUIET\n" " run quietly (same as -q option)\n" msgstr " QUIET\n" " тихий запуск ( як із параметром -q)\n" -#: help.c:402 +#: help.c:408 #, c-format msgid " ROW_COUNT\n" " number of rows returned or affected by last query, or 0\n" msgstr " ROW_COUNT\n" " число повернених або оброблених рядків останнім запитом, або 0\n" -#: help.c:404 +#: help.c:410 #, c-format msgid " SERVER_VERSION_NAME\n" " SERVER_VERSION_NUM\n" @@ -3229,49 +3388,49 @@ msgstr " SERVER_VERSION_NAME\n" " SERVER_VERSION_NUM\n" " версія серевера (у короткому текстовому або числовому форматі)\n" -#: help.c:407 +#: help.c:413 #, c-format msgid " SHOW_CONTEXT\n" " controls display of message context fields [never, errors, always]\n" msgstr " SHOW_CONTEXT\n" " керує відображенням полів контексту повідомлень [never, errors, always]\n" -#: help.c:409 +#: help.c:415 #, c-format msgid " SINGLELINE\n" " if set, end of line terminates SQL commands (same as -S option)\n" msgstr " SINGLELINE\n" " якщо встановлено, кінець рядка завершує режим вводу SQL-команди (як з параметром -S)\n" -#: help.c:411 +#: help.c:417 #, c-format msgid " SINGLESTEP\n" " single-step mode (same as -s option)\n" msgstr " SINGLESTEP\n" " покроковий режим (як з параметром -s)\n" -#: help.c:413 +#: help.c:419 #, c-format msgid " SQLSTATE\n" " SQLSTATE of last query, or \"00000\" if no error\n" msgstr " SQLSTATE\n" " SQLSTATE останнього запиту, або \"00000\" якщо немає помилок\n" -#: help.c:415 +#: help.c:421 #, c-format msgid " USER\n" " the currently connected database user\n" msgstr " USER\n" " поточний користувач, підключений до бази даних\n" -#: help.c:417 +#: help.c:423 #, c-format msgid " VERBOSITY\n" " controls verbosity of error reports [default, verbose, terse, sqlstate]\n" msgstr " VERBOSITY\n" " контролює докладність звітів про помилку [default, verbose, terse, sqlstate]\n" -#: help.c:419 +#: help.c:425 #, c-format msgid " VERSION\n" " VERSION_NAME\n" @@ -3282,112 +3441,112 @@ msgstr " VERSION\n" " VERSION_NUM\n" " psql версія (в розгорнутому, в короткому текстовому або числовому форматі)\n" -#: help.c:424 +#: help.c:430 #, c-format msgid "\n" "Display settings:\n" msgstr "\n" "Налаштування відобреження:\n" -#: help.c:426 +#: help.c:432 #, c-format msgid " psql --pset=NAME[=VALUE]\n" " or \\pset NAME [VALUE] inside psql\n\n" msgstr " psql --pset=NAME[=VALUE]\n" " або \\pset ІМ'Я [VALUE] всередині psql\n\n" -#: help.c:428 +#: help.c:434 #, c-format msgid " border\n" " border style (number)\n" msgstr " border\n" " стиль рамки (число)\n" -#: help.c:430 +#: help.c:436 #, c-format msgid " columns\n" " target width for the wrapped format\n" msgstr " columns\n" " цільова ширина для формату з переносом\n" -#: help.c:432 +#: help.c:438 #, c-format msgid " expanded (or x)\n" " expanded output [on, off, auto]\n" msgstr " expanded (or x)\n" " розширений вивід [on, off, auto]\n" -#: help.c:434 +#: help.c:440 #, c-format msgid " fieldsep\n" " field separator for unaligned output (default \"%s\")\n" msgstr " fieldsep\n" " розділювач полів для не вирівняного виводу (за замовчуванням \"%s\")\n" -#: help.c:437 +#: help.c:443 #, c-format msgid " fieldsep_zero\n" " set field separator for unaligned output to a zero byte\n" msgstr " fieldsep_zero\n" " встановити розділювач полів для невирівняного виводу на нульовий байт\n" -#: help.c:439 +#: help.c:445 #, c-format msgid " footer\n" " enable or disable display of the table footer [on, off]\n" msgstr " footer\n" " вмикає або вимикає вивід підписів таблиці [on, off]\n" -#: help.c:441 +#: help.c:447 #, c-format msgid " format\n" " set output format [unaligned, aligned, wrapped, html, asciidoc, ...]\n" msgstr " format\n" " встановити формат виводу [unaligned, aligned, wrapped, html, asciidoc, ...]\n" -#: help.c:443 +#: help.c:449 #, c-format msgid " linestyle\n" " set the border line drawing style [ascii, old-ascii, unicode]\n" msgstr " linestyle\n" " встановлює стиль малювання ліній рамки [ascii, old-ascii, unicode]\n" -#: help.c:445 +#: help.c:451 #, c-format msgid " null\n" " set the string to be printed in place of a null value\n" msgstr " null\n" " встановлює рядок, який буде виведено замість значення (null)\n" -#: help.c:447 +#: help.c:453 #, c-format msgid " numericlocale\n" " enable display of a locale-specific character to separate groups of digits\n" msgstr " numericlocale\n" " вмикає виведення заданого локалью роздільника групи цифр\n" -#: help.c:449 +#: help.c:455 #, c-format msgid " pager\n" " control when an external pager is used [yes, no, always]\n" msgstr " pager\n" " контролює використання зовнішнього пейджера [yes, no, always]\n" -#: help.c:451 +#: help.c:457 #, c-format msgid " recordsep\n" " record (line) separator for unaligned output\n" msgstr " recordsep\n" " розділювач записів (рядків) для не вирівняного виводу\n" -#: help.c:453 +#: help.c:459 #, c-format msgid " recordsep_zero\n" " set record separator for unaligned output to a zero byte\n" msgstr " recordsep_zero\n" " встановлює розділювач записів для невирівняного виводу на нульовий байт\n" -#: help.c:455 +#: help.c:461 #, c-format msgid " tableattr (or T)\n" " specify attributes for table tag in html format, or proportional\n" @@ -3396,21 +3555,21 @@ msgstr " tableattr (або T)\n" " вказує атрибути для тегу table у html форматі або пропорційні \n" " ширини стовпців для вирівняних вліво даних, у latex-longtable форматі\n" -#: help.c:458 +#: help.c:464 #, c-format msgid " title\n" " set the table title for subsequently printed tables\n" msgstr " title\n" " задає заголовок таблиці для послідовно друкованих таблиць\n" -#: help.c:460 +#: help.c:466 #, c-format msgid " tuples_only\n" " if set, only actual table data is shown\n" msgstr " tuples_only\n" " якщо встановлено, виводяться лише фактичні табличні дані\n" -#: help.c:462 +#: help.c:468 #, c-format msgid " unicode_border_linestyle\n" " unicode_column_linestyle\n" @@ -3421,21 +3580,21 @@ msgstr " unicode_border_linestyle\n" " unicode_header_linestyle\n" " задає стиль мальювання ліній (Unicode) [single, double]\n" -#: help.c:467 +#: help.c:473 #, c-format msgid "\n" "Environment variables:\n" msgstr "\n" "Змінні оточення:\n" -#: help.c:471 +#: help.c:477 #, c-format msgid " NAME=VALUE [NAME=VALUE] psql ...\n" " or \\setenv NAME [VALUE] inside psql\n\n" msgstr " ІМ'Я=ЗНАЧЕННЯ [ІМ'Я=ЗНАЧЕННЯ] psql ...\n" " або \\setenv ІМ'Я [VALUE] всередині psql\n\n" -#: help.c:473 +#: help.c:479 #, c-format msgid " set NAME=VALUE\n" " psql ...\n" @@ -3444,116 +3603,116 @@ msgstr " встановлює ІМ'Я=ЗНАЧЕННЯ\n" " psql ...\n" " або \\setenv ІМ'Я [VALUE] всередині psql\n\n" -#: help.c:476 +#: help.c:482 #, c-format msgid " COLUMNS\n" " number of columns for wrapped format\n" msgstr " COLUMNS\n" " число стовпців для форматування з переносом\n" -#: help.c:478 +#: help.c:484 #, c-format msgid " PGAPPNAME\n" " same as the application_name connection parameter\n" msgstr " PGAPPNAME\n" " те саме, що параметр підключення application_name\n" -#: help.c:480 +#: help.c:486 #, c-format msgid " PGDATABASE\n" " same as the dbname connection parameter\n" msgstr " PGDATABASE\n" " те саме, що параметр підключення dbname\n" -#: help.c:482 +#: help.c:488 #, c-format msgid " PGHOST\n" " same as the host connection parameter\n" msgstr " PGHOST\n" " те саме, що параметр підключення host\n" -#: help.c:484 +#: help.c:490 #, c-format msgid " PGPASSWORD\n" " connection password (not recommended)\n" msgstr " PGPASSWORD\n" " пароль для підключення (не рекомендується)\n" -#: help.c:486 +#: help.c:492 #, c-format msgid " PGPASSFILE\n" " password file name\n" msgstr " PGPASSFILE\n" " назва файлу з паролем\n" -#: help.c:488 +#: help.c:494 #, c-format msgid " PGPORT\n" " same as the port connection parameter\n" msgstr " PGPORT\n" " те саме, що параметр підключення port\n" -#: help.c:490 +#: help.c:496 #, c-format msgid " PGUSER\n" " same as the user connection parameter\n" msgstr " PGUSER\n" " те саме, що параметр підключення user\n" -#: help.c:492 +#: help.c:498 #, c-format msgid " PSQL_EDITOR, EDITOR, VISUAL\n" " editor used by the \\e, \\ef, and \\ev commands\n" msgstr " PSQL_EDITOR, EDITOR, VISUAL\n" " редактор для команд \\e, \\ef і \\ev\n" -#: help.c:494 +#: help.c:500 #, c-format msgid " PSQL_EDITOR_LINENUMBER_ARG\n" " how to specify a line number when invoking the editor\n" msgstr " PSQL_EDITOR_LINENUMBER_ARG\n" " як вказати номер рядка при виклику редактора\n" -#: help.c:496 +#: help.c:502 #, c-format msgid " PSQL_HISTORY\n" " alternative location for the command history file\n" msgstr " PSQL_HISTORY\n" " альтернативне розміщення файлу з історією команд\n" -#: help.c:498 +#: help.c:504 #, c-format msgid " PSQL_PAGER, PAGER\n" " name of external pager program\n" msgstr " PSQL_PAGER, PAGER\n" " ім'я програми зовнішнього пейджеру\n" -#: help.c:500 +#: help.c:506 #, c-format msgid " PSQLRC\n" " alternative location for the user's .psqlrc file\n" msgstr " PSQLRC\n" " альтернативне розміщення користувацького файла .psqlrc\n" -#: help.c:502 +#: help.c:508 #, c-format msgid " SHELL\n" " shell used by the \\! command\n" msgstr " SHELL\n" " оболонка, що використовується командою \\!\n" -#: help.c:504 +#: help.c:510 #, c-format msgid " TMPDIR\n" " directory for temporary files\n" msgstr " TMPDIR\n" " каталог для тимчасових файлів\n" -#: help.c:548 +#: help.c:554 msgid "Available help:\n" msgstr "Доступна довідка:\n" -#: help.c:636 +#: help.c:642 #, c-format msgid "Command: %s\n" "Description: %s\n" @@ -3566,24 +3725,24 @@ msgstr "Команда: %s\n" "%s\n\n" "URL: %s\n\n" -#: help.c:655 +#: help.c:661 #, c-format msgid "No help available for \"%s\".\n" "Try \\h with no arguments to see available help.\n" msgstr "Немає доступної довідки по команді \"%s\".\n" "Спробуйте \\h без аргументів, щоб подивитись доступну довідку.\n" -#: input.c:218 +#: input.c:217 #, c-format msgid "could not read from input file: %m" msgstr "не вдалося прочитати з вхідного файлу: %m" -#: input.c:472 input.c:510 +#: input.c:471 input.c:509 #, c-format msgid "could not save history to file \"%s\": %m" msgstr "не можливо зберегти історію в файлі \"%s\": %m" -#: input.c:529 +#: input.c:528 #, c-format msgid "history is not supported by this installation" msgstr "ця установка не підтримує історію" @@ -3616,30 +3775,30 @@ msgstr "Великі об'єкти" msgid "\\if: escaped" msgstr "\\if: вихід" -#: mainloop.c:183 +#: mainloop.c:195 #, c-format msgid "Use \"\\q\" to leave %s.\n" msgstr "Введіть \"\\q\", щоб вийти з %s.\n" -#: mainloop.c:205 +#: mainloop.c:217 msgid "The input is a PostgreSQL custom-format dump.\n" "Use the pg_restore command-line client to restore this dump to a database.\n" msgstr "Ввід являє собою спеціальний формат дампу PostgreSQL.\n" "Щоб відновити базу даних з цього дампу, скористайтеся командою pg_restore.\n" -#: mainloop.c:282 +#: mainloop.c:298 msgid "Use \\? for help or press control-C to clear the input buffer." msgstr "Для отримання довідки введіть \\? або натисніть сontrol-C для очищення буферу вводу." -#: mainloop.c:284 +#: mainloop.c:300 msgid "Use \\? for help." msgstr "Введіть \\? для отримання довідки." -#: mainloop.c:288 +#: mainloop.c:304 msgid "You are using psql, the command-line interface to PostgreSQL." msgstr "Ви використовуєте psql — інтерфейс командного рядка до PostgreSQL." -#: mainloop.c:289 +#: mainloop.c:305 #, c-format msgid "Type: \\copyright for distribution terms\n" " \\h for help with SQL commands\n" @@ -3652,24 +3811,24 @@ msgstr "Введіть: \\copyright для умов розповсюдженн " \\g або крапку з комою в кінці рядка для виконання запиту\n" " \\q для виходу\n" -#: mainloop.c:313 +#: mainloop.c:329 msgid "Use \\q to quit." msgstr "Введіть \\q, щоб вийти." -#: mainloop.c:316 mainloop.c:340 +#: mainloop.c:332 mainloop.c:356 msgid "Use control-D to quit." msgstr "Натисніть control-D, щоб вийти." -#: mainloop.c:318 mainloop.c:342 +#: mainloop.c:334 mainloop.c:358 msgid "Use control-C to quit." msgstr "Натисніть control-C, щоб вийти." -#: mainloop.c:449 mainloop.c:591 +#: mainloop.c:465 mainloop.c:613 #, c-format msgid "query ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "запит ігнорується; введіть \\endif або натисніть Ctrl-C для завершення поточного \\if блоку" -#: mainloop.c:609 +#: mainloop.c:631 #, c-format msgid "reached EOF without finding closing \\endif(s)" msgstr "досягнуто кінця файлу без завершального \\endif" @@ -3705,48 +3864,48 @@ msgstr "%s: бракує пам'яті" #: sql_help.c:985 sql_help.c:990 sql_help.c:995 sql_help.c:1014 sql_help.c:1025 #: sql_help.c:1027 sql_help.c:1046 sql_help.c:1056 sql_help.c:1058 #: sql_help.c:1060 sql_help.c:1072 sql_help.c:1076 sql_help.c:1078 -#: sql_help.c:1089 sql_help.c:1091 sql_help.c:1093 sql_help.c:1109 -#: sql_help.c:1111 sql_help.c:1115 sql_help.c:1118 sql_help.c:1119 -#: sql_help.c:1120 sql_help.c:1123 sql_help.c:1125 sql_help.c:1258 -#: sql_help.c:1260 sql_help.c:1263 sql_help.c:1266 sql_help.c:1268 -#: sql_help.c:1270 sql_help.c:1273 sql_help.c:1276 sql_help.c:1386 -#: sql_help.c:1388 sql_help.c:1390 sql_help.c:1393 sql_help.c:1414 -#: sql_help.c:1417 sql_help.c:1420 sql_help.c:1423 sql_help.c:1427 -#: sql_help.c:1429 sql_help.c:1431 sql_help.c:1433 sql_help.c:1447 -#: sql_help.c:1450 sql_help.c:1452 sql_help.c:1454 sql_help.c:1464 -#: sql_help.c:1466 sql_help.c:1476 sql_help.c:1478 sql_help.c:1488 -#: sql_help.c:1491 sql_help.c:1513 sql_help.c:1515 sql_help.c:1517 -#: sql_help.c:1520 sql_help.c:1522 sql_help.c:1524 sql_help.c:1527 -#: sql_help.c:1577 sql_help.c:1619 sql_help.c:1622 sql_help.c:1624 -#: sql_help.c:1626 sql_help.c:1628 sql_help.c:1630 sql_help.c:1633 -#: sql_help.c:1683 sql_help.c:1699 sql_help.c:1920 sql_help.c:1989 -#: sql_help.c:2008 sql_help.c:2021 sql_help.c:2078 sql_help.c:2085 -#: sql_help.c:2095 sql_help.c:2115 sql_help.c:2140 sql_help.c:2158 -#: sql_help.c:2187 sql_help.c:2282 sql_help.c:2324 sql_help.c:2347 -#: sql_help.c:2368 sql_help.c:2369 sql_help.c:2406 sql_help.c:2426 -#: sql_help.c:2448 sql_help.c:2462 sql_help.c:2482 sql_help.c:2505 -#: sql_help.c:2535 sql_help.c:2560 sql_help.c:2606 sql_help.c:2884 -#: sql_help.c:2897 sql_help.c:2914 sql_help.c:2930 sql_help.c:2970 -#: sql_help.c:3022 sql_help.c:3026 sql_help.c:3028 sql_help.c:3034 -#: sql_help.c:3052 sql_help.c:3079 sql_help.c:3114 sql_help.c:3126 -#: sql_help.c:3135 sql_help.c:3179 sql_help.c:3193 sql_help.c:3221 -#: sql_help.c:3229 sql_help.c:3237 sql_help.c:3245 sql_help.c:3253 -#: sql_help.c:3261 sql_help.c:3269 sql_help.c:3277 sql_help.c:3286 -#: sql_help.c:3297 sql_help.c:3305 sql_help.c:3313 sql_help.c:3321 -#: sql_help.c:3329 sql_help.c:3339 sql_help.c:3348 sql_help.c:3357 -#: sql_help.c:3365 sql_help.c:3375 sql_help.c:3386 sql_help.c:3394 -#: sql_help.c:3403 sql_help.c:3414 sql_help.c:3423 sql_help.c:3431 -#: sql_help.c:3439 sql_help.c:3447 sql_help.c:3455 sql_help.c:3463 -#: sql_help.c:3471 sql_help.c:3479 sql_help.c:3487 sql_help.c:3495 -#: sql_help.c:3503 sql_help.c:3520 sql_help.c:3529 sql_help.c:3537 -#: sql_help.c:3554 sql_help.c:3569 sql_help.c:3839 sql_help.c:3890 -#: sql_help.c:3919 sql_help.c:3927 sql_help.c:4360 sql_help.c:4408 -#: sql_help.c:4549 +#: sql_help.c:1090 sql_help.c:1092 sql_help.c:1094 sql_help.c:1096 +#: sql_help.c:1112 sql_help.c:1114 sql_help.c:1118 sql_help.c:1121 +#: sql_help.c:1122 sql_help.c:1123 sql_help.c:1126 sql_help.c:1128 +#: sql_help.c:1262 sql_help.c:1264 sql_help.c:1267 sql_help.c:1270 +#: sql_help.c:1272 sql_help.c:1274 sql_help.c:1277 sql_help.c:1280 +#: sql_help.c:1391 sql_help.c:1393 sql_help.c:1395 sql_help.c:1398 +#: sql_help.c:1419 sql_help.c:1422 sql_help.c:1425 sql_help.c:1428 +#: sql_help.c:1432 sql_help.c:1434 sql_help.c:1436 sql_help.c:1438 +#: sql_help.c:1452 sql_help.c:1455 sql_help.c:1457 sql_help.c:1459 +#: sql_help.c:1469 sql_help.c:1471 sql_help.c:1481 sql_help.c:1483 +#: sql_help.c:1493 sql_help.c:1496 sql_help.c:1519 sql_help.c:1521 +#: sql_help.c:1523 sql_help.c:1525 sql_help.c:1528 sql_help.c:1530 +#: sql_help.c:1533 sql_help.c:1536 sql_help.c:1586 sql_help.c:1629 +#: sql_help.c:1632 sql_help.c:1634 sql_help.c:1636 sql_help.c:1639 +#: sql_help.c:1641 sql_help.c:1643 sql_help.c:1646 sql_help.c:1696 +#: sql_help.c:1712 sql_help.c:1933 sql_help.c:2002 sql_help.c:2021 +#: sql_help.c:2034 sql_help.c:2091 sql_help.c:2098 sql_help.c:2108 +#: sql_help.c:2129 sql_help.c:2155 sql_help.c:2173 sql_help.c:2200 +#: sql_help.c:2295 sql_help.c:2340 sql_help.c:2364 sql_help.c:2387 +#: sql_help.c:2391 sql_help.c:2425 sql_help.c:2445 sql_help.c:2467 +#: sql_help.c:2481 sql_help.c:2501 sql_help.c:2524 sql_help.c:2554 +#: sql_help.c:2579 sql_help.c:2625 sql_help.c:2903 sql_help.c:2916 +#: sql_help.c:2933 sql_help.c:2949 sql_help.c:2989 sql_help.c:3041 +#: sql_help.c:3045 sql_help.c:3047 sql_help.c:3053 sql_help.c:3071 +#: sql_help.c:3098 sql_help.c:3133 sql_help.c:3145 sql_help.c:3154 +#: sql_help.c:3198 sql_help.c:3212 sql_help.c:3240 sql_help.c:3248 +#: sql_help.c:3260 sql_help.c:3270 sql_help.c:3278 sql_help.c:3286 +#: sql_help.c:3294 sql_help.c:3302 sql_help.c:3311 sql_help.c:3322 +#: sql_help.c:3330 sql_help.c:3338 sql_help.c:3346 sql_help.c:3354 +#: sql_help.c:3364 sql_help.c:3373 sql_help.c:3382 sql_help.c:3390 +#: sql_help.c:3400 sql_help.c:3411 sql_help.c:3419 sql_help.c:3428 +#: sql_help.c:3439 sql_help.c:3448 sql_help.c:3456 sql_help.c:3464 +#: sql_help.c:3472 sql_help.c:3480 sql_help.c:3488 sql_help.c:3496 +#: sql_help.c:3504 sql_help.c:3512 sql_help.c:3520 sql_help.c:3528 +#: sql_help.c:3545 sql_help.c:3554 sql_help.c:3562 sql_help.c:3579 +#: sql_help.c:3594 sql_help.c:3869 sql_help.c:3920 sql_help.c:3949 +#: sql_help.c:3962 sql_help.c:4407 sql_help.c:4455 sql_help.c:4596 msgid "name" msgstr "назва" -#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1770 -#: sql_help.c:3194 sql_help.c:4146 +#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1783 +#: sql_help.c:3213 sql_help.c:4193 msgid "aggregate_signature" msgstr "сигнатура_агр_функції" @@ -3755,9 +3914,9 @@ msgstr "сигнатура_агр_функції" #: sql_help.c:589 sql_help.c:616 sql_help.c:666 sql_help.c:731 sql_help.c:786 #: sql_help.c:807 sql_help.c:846 sql_help.c:891 sql_help.c:932 sql_help.c:984 #: sql_help.c:1016 sql_help.c:1026 sql_help.c:1059 sql_help.c:1079 -#: sql_help.c:1092 sql_help.c:1126 sql_help.c:1267 sql_help.c:1387 -#: sql_help.c:1430 sql_help.c:1451 sql_help.c:1465 sql_help.c:1477 -#: sql_help.c:1490 sql_help.c:1521 sql_help.c:1578 sql_help.c:1627 +#: sql_help.c:1093 sql_help.c:1129 sql_help.c:1271 sql_help.c:1392 +#: sql_help.c:1435 sql_help.c:1456 sql_help.c:1470 sql_help.c:1482 +#: sql_help.c:1495 sql_help.c:1522 sql_help.c:1587 sql_help.c:1640 msgid "new_name" msgstr "нова_назва" @@ -3765,21 +3924,21 @@ msgstr "нова_назва" #: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:618 #: sql_help.c:627 sql_help.c:685 sql_help.c:705 sql_help.c:734 sql_help.c:789 #: sql_help.c:851 sql_help.c:889 sql_help.c:989 sql_help.c:1028 sql_help.c:1057 -#: sql_help.c:1077 sql_help.c:1090 sql_help.c:1124 sql_help.c:1327 -#: sql_help.c:1389 sql_help.c:1432 sql_help.c:1453 sql_help.c:1516 -#: sql_help.c:1625 sql_help.c:2870 +#: sql_help.c:1077 sql_help.c:1091 sql_help.c:1127 sql_help.c:1332 +#: sql_help.c:1394 sql_help.c:1437 sql_help.c:1458 sql_help.c:1520 +#: sql_help.c:1635 sql_help.c:2889 msgid "new_owner" msgstr "новий_власник" #: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:252 sql_help.c:319 #: sql_help.c:448 sql_help.c:534 sql_help.c:668 sql_help.c:709 sql_help.c:737 -#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1094 -#: sql_help.c:1269 sql_help.c:1434 sql_help.c:1455 sql_help.c:1467 -#: sql_help.c:1479 sql_help.c:1523 sql_help.c:1629 +#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1095 +#: sql_help.c:1273 sql_help.c:1439 sql_help.c:1460 sql_help.c:1472 +#: sql_help.c:1484 sql_help.c:1524 sql_help.c:1642 msgid "new_schema" msgstr "нова_схема" -#: sql_help.c:44 sql_help.c:1834 sql_help.c:3195 sql_help.c:4175 +#: sql_help.c:44 sql_help.c:1847 sql_help.c:3214 sql_help.c:4222 msgid "where aggregate_signature is:" msgstr "де сигнатура_агр_функції:" @@ -3787,13 +3946,13 @@ msgstr "де сигнатура_агр_функції:" #: sql_help.c:354 sql_help.c:370 sql_help.c:373 sql_help.c:376 sql_help.c:516 #: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:838 #: sql_help.c:843 sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:976 -#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1788 -#: sql_help.c:1805 sql_help.c:1811 sql_help.c:1835 sql_help.c:1838 -#: sql_help.c:1841 sql_help.c:1990 sql_help.c:2009 sql_help.c:2012 -#: sql_help.c:2283 sql_help.c:2483 sql_help.c:3196 sql_help.c:3199 -#: sql_help.c:3202 sql_help.c:3287 sql_help.c:3376 sql_help.c:3404 -#: sql_help.c:3724 sql_help.c:4057 sql_help.c:4152 sql_help.c:4159 -#: sql_help.c:4165 sql_help.c:4176 sql_help.c:4179 sql_help.c:4182 +#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1801 +#: sql_help.c:1818 sql_help.c:1824 sql_help.c:1848 sql_help.c:1851 +#: sql_help.c:1854 sql_help.c:2003 sql_help.c:2022 sql_help.c:2025 +#: sql_help.c:2296 sql_help.c:2502 sql_help.c:3215 sql_help.c:3218 +#: sql_help.c:3221 sql_help.c:3312 sql_help.c:3401 sql_help.c:3429 +#: sql_help.c:3753 sql_help.c:4101 sql_help.c:4199 sql_help.c:4206 +#: sql_help.c:4212 sql_help.c:4223 sql_help.c:4226 sql_help.c:4229 msgid "argmode" msgstr "режим_аргументу" @@ -3801,13 +3960,13 @@ msgstr "режим_аргументу" #: sql_help.c:355 sql_help.c:371 sql_help.c:374 sql_help.c:377 sql_help.c:517 #: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:839 #: sql_help.c:844 sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:977 -#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1789 -#: sql_help.c:1806 sql_help.c:1812 sql_help.c:1836 sql_help.c:1839 -#: sql_help.c:1842 sql_help.c:1991 sql_help.c:2010 sql_help.c:2013 -#: sql_help.c:2284 sql_help.c:2484 sql_help.c:3197 sql_help.c:3200 -#: sql_help.c:3203 sql_help.c:3288 sql_help.c:3377 sql_help.c:3405 -#: sql_help.c:4153 sql_help.c:4160 sql_help.c:4166 sql_help.c:4177 -#: sql_help.c:4180 sql_help.c:4183 +#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1802 +#: sql_help.c:1819 sql_help.c:1825 sql_help.c:1849 sql_help.c:1852 +#: sql_help.c:1855 sql_help.c:2004 sql_help.c:2023 sql_help.c:2026 +#: sql_help.c:2297 sql_help.c:2503 sql_help.c:3216 sql_help.c:3219 +#: sql_help.c:3222 sql_help.c:3313 sql_help.c:3402 sql_help.c:3430 +#: sql_help.c:4200 sql_help.c:4207 sql_help.c:4213 sql_help.c:4224 +#: sql_help.c:4227 sql_help.c:4230 msgid "argname" msgstr "ім'я_аргументу" @@ -3815,67 +3974,69 @@ msgstr "ім'я_аргументу" #: sql_help.c:356 sql_help.c:372 sql_help.c:375 sql_help.c:378 sql_help.c:518 #: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:840 #: sql_help.c:845 sql_help.c:850 sql_help.c:855 sql_help.c:860 sql_help.c:978 -#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1790 -#: sql_help.c:1807 sql_help.c:1813 sql_help.c:1837 sql_help.c:1840 -#: sql_help.c:1843 sql_help.c:2285 sql_help.c:2485 sql_help.c:3198 -#: sql_help.c:3201 sql_help.c:3204 sql_help.c:3289 sql_help.c:3378 -#: sql_help.c:3406 sql_help.c:4154 sql_help.c:4161 sql_help.c:4167 -#: sql_help.c:4178 sql_help.c:4181 sql_help.c:4184 +#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1803 +#: sql_help.c:1820 sql_help.c:1826 sql_help.c:1850 sql_help.c:1853 +#: sql_help.c:1856 sql_help.c:2298 sql_help.c:2504 sql_help.c:3217 +#: sql_help.c:3220 sql_help.c:3223 sql_help.c:3314 sql_help.c:3403 +#: sql_help.c:3431 sql_help.c:4201 sql_help.c:4208 sql_help.c:4214 +#: sql_help.c:4225 sql_help.c:4228 sql_help.c:4231 msgid "argtype" msgstr "тип_аргументу" #: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:926 -#: sql_help.c:1074 sql_help.c:1448 sql_help.c:1572 sql_help.c:1604 -#: sql_help.c:1652 sql_help.c:1891 sql_help.c:1898 sql_help.c:2190 -#: sql_help.c:2232 sql_help.c:2239 sql_help.c:2248 sql_help.c:2325 -#: sql_help.c:2536 sql_help.c:2628 sql_help.c:2899 sql_help.c:3080 -#: sql_help.c:3102 sql_help.c:3590 sql_help.c:3758 sql_help.c:4610 +#: sql_help.c:1074 sql_help.c:1453 sql_help.c:1581 sql_help.c:1613 +#: sql_help.c:1665 sql_help.c:1904 sql_help.c:1911 sql_help.c:2203 +#: sql_help.c:2245 sql_help.c:2252 sql_help.c:2261 sql_help.c:2341 +#: sql_help.c:2555 sql_help.c:2647 sql_help.c:2918 sql_help.c:3099 +#: sql_help.c:3121 sql_help.c:3261 sql_help.c:3616 sql_help.c:3788 +#: sql_help.c:3961 sql_help.c:4658 msgid "option" msgstr "параметр" -#: sql_help.c:113 sql_help.c:927 sql_help.c:1573 sql_help.c:2326 -#: sql_help.c:2537 sql_help.c:3081 +#: sql_help.c:113 sql_help.c:927 sql_help.c:1582 sql_help.c:2342 +#: sql_help.c:2556 sql_help.c:3100 sql_help.c:3262 msgid "where option can be:" msgstr "де параметр може бути:" -#: sql_help.c:114 sql_help.c:2122 +#: sql_help.c:114 sql_help.c:2137 msgid "allowconn" msgstr "дозвол_підкл" -#: sql_help.c:115 sql_help.c:928 sql_help.c:1574 sql_help.c:2123 -#: sql_help.c:2538 sql_help.c:3082 +#: sql_help.c:115 sql_help.c:928 sql_help.c:1583 sql_help.c:2138 +#: sql_help.c:2343 sql_help.c:2557 sql_help.c:3101 msgid "connlimit" msgstr "ліміт_підключень" -#: sql_help.c:116 sql_help.c:2124 +#: sql_help.c:116 sql_help.c:2139 msgid "istemplate" msgstr "чи_шаблон" -#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1272 sql_help.c:1320 +#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1276 sql_help.c:1325 msgid "new_tablespace" msgstr "новий_табл_простір" #: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:544 sql_help.c:546 #: sql_help.c:547 sql_help.c:863 sql_help.c:865 sql_help.c:866 sql_help.c:935 #: sql_help.c:939 sql_help.c:942 sql_help.c:1003 sql_help.c:1005 -#: sql_help.c:1006 sql_help.c:1137 sql_help.c:1140 sql_help.c:1581 -#: sql_help.c:1585 sql_help.c:1588 sql_help.c:2295 sql_help.c:2489 -#: sql_help.c:3944 sql_help.c:4349 +#: sql_help.c:1006 sql_help.c:1140 sql_help.c:1143 sql_help.c:1590 +#: sql_help.c:1594 sql_help.c:1597 sql_help.c:2308 sql_help.c:2508 +#: sql_help.c:3980 sql_help.c:4396 msgid "configuration_parameter" msgstr "параметр_конфігурації" #: sql_help.c:125 sql_help.c:395 sql_help.c:466 sql_help.c:472 sql_help.c:484 #: sql_help.c:545 sql_help.c:598 sql_help.c:677 sql_help.c:683 sql_help.c:864 #: sql_help.c:887 sql_help.c:936 sql_help.c:1004 sql_help.c:1075 -#: sql_help.c:1114 sql_help.c:1117 sql_help.c:1122 sql_help.c:1138 -#: sql_help.c:1139 sql_help.c:1302 sql_help.c:1322 sql_help.c:1370 -#: sql_help.c:1392 sql_help.c:1449 sql_help.c:1582 sql_help.c:1605 -#: sql_help.c:2191 sql_help.c:2233 sql_help.c:2240 sql_help.c:2249 -#: sql_help.c:2296 sql_help.c:2297 sql_help.c:2356 sql_help.c:2390 -#: sql_help.c:2490 sql_help.c:2491 sql_help.c:2508 sql_help.c:2629 -#: sql_help.c:2659 sql_help.c:2764 sql_help.c:2777 sql_help.c:2791 -#: sql_help.c:2832 sql_help.c:2856 sql_help.c:2873 sql_help.c:2900 -#: sql_help.c:3103 sql_help.c:3759 sql_help.c:4350 sql_help.c:4351 +#: sql_help.c:1117 sql_help.c:1120 sql_help.c:1125 sql_help.c:1141 +#: sql_help.c:1142 sql_help.c:1307 sql_help.c:1327 sql_help.c:1375 +#: sql_help.c:1397 sql_help.c:1454 sql_help.c:1538 sql_help.c:1591 +#: sql_help.c:1614 sql_help.c:2204 sql_help.c:2246 sql_help.c:2253 +#: sql_help.c:2262 sql_help.c:2309 sql_help.c:2310 sql_help.c:2372 +#: sql_help.c:2375 sql_help.c:2409 sql_help.c:2509 sql_help.c:2510 +#: sql_help.c:2527 sql_help.c:2648 sql_help.c:2678 sql_help.c:2783 +#: sql_help.c:2796 sql_help.c:2810 sql_help.c:2851 sql_help.c:2875 +#: sql_help.c:2892 sql_help.c:2919 sql_help.c:3122 sql_help.c:3789 +#: sql_help.c:4397 sql_help.c:4398 msgid "value" msgstr "значення" @@ -3883,9 +4044,9 @@ msgstr "значення" msgid "target_role" msgstr "цільова_роль" -#: sql_help.c:198 sql_help.c:2174 sql_help.c:2584 sql_help.c:2589 -#: sql_help.c:3706 sql_help.c:3713 sql_help.c:3727 sql_help.c:3733 -#: sql_help.c:4039 sql_help.c:4046 sql_help.c:4060 sql_help.c:4066 +#: sql_help.c:198 sql_help.c:2188 sql_help.c:2603 sql_help.c:2608 +#: sql_help.c:3735 sql_help.c:3742 sql_help.c:3756 sql_help.c:3762 +#: sql_help.c:4083 sql_help.c:4090 sql_help.c:4104 sql_help.c:4110 msgid "schema_name" msgstr "ім'я_схеми" @@ -3900,33 +4061,29 @@ msgstr "де скорочено_GRANT_або_REVOKE є одним з:" #: sql_help.c:201 sql_help.c:202 sql_help.c:203 sql_help.c:204 sql_help.c:205 #: sql_help.c:206 sql_help.c:207 sql_help.c:208 sql_help.c:209 sql_help.c:210 #: sql_help.c:569 sql_help.c:605 sql_help.c:670 sql_help.c:810 sql_help.c:946 -#: sql_help.c:1271 sql_help.c:1592 sql_help.c:2329 sql_help.c:2330 -#: sql_help.c:2331 sql_help.c:2332 sql_help.c:2333 sql_help.c:2464 -#: sql_help.c:2541 sql_help.c:2542 sql_help.c:2543 sql_help.c:2544 -#: sql_help.c:2545 sql_help.c:3085 sql_help.c:3086 sql_help.c:3087 -#: sql_help.c:3088 sql_help.c:3089 sql_help.c:3740 sql_help.c:3741 -#: sql_help.c:3742 sql_help.c:4040 sql_help.c:4044 sql_help.c:4047 -#: sql_help.c:4049 sql_help.c:4051 sql_help.c:4053 sql_help.c:4055 -#: sql_help.c:4061 sql_help.c:4063 sql_help.c:4065 sql_help.c:4067 -#: sql_help.c:4069 sql_help.c:4071 sql_help.c:4072 sql_help.c:4073 -#: sql_help.c:4370 +#: sql_help.c:1275 sql_help.c:1601 sql_help.c:2346 sql_help.c:2347 +#: sql_help.c:2348 sql_help.c:2349 sql_help.c:2350 sql_help.c:2483 +#: sql_help.c:2560 sql_help.c:2561 sql_help.c:2562 sql_help.c:2563 +#: sql_help.c:2564 sql_help.c:3104 sql_help.c:3105 sql_help.c:3106 +#: sql_help.c:3107 sql_help.c:3108 sql_help.c:3768 sql_help.c:3772 +#: sql_help.c:4116 sql_help.c:4120 sql_help.c:4417 msgid "role_name" msgstr "ім'я_ролі" -#: sql_help.c:236 sql_help.c:459 sql_help.c:1287 sql_help.c:1289 -#: sql_help.c:1337 sql_help.c:1349 sql_help.c:1374 sql_help.c:1621 -#: sql_help.c:2143 sql_help.c:2147 sql_help.c:2252 sql_help.c:2257 -#: sql_help.c:2351 sql_help.c:2759 sql_help.c:2772 sql_help.c:2786 -#: sql_help.c:2795 sql_help.c:2807 sql_help.c:2836 sql_help.c:3790 -#: sql_help.c:3805 sql_help.c:3807 sql_help.c:4235 sql_help.c:4236 -#: sql_help.c:4245 sql_help.c:4286 sql_help.c:4287 sql_help.c:4288 -#: sql_help.c:4289 sql_help.c:4290 sql_help.c:4291 sql_help.c:4324 -#: sql_help.c:4325 sql_help.c:4330 sql_help.c:4335 sql_help.c:4474 -#: sql_help.c:4475 sql_help.c:4484 sql_help.c:4525 sql_help.c:4526 -#: sql_help.c:4527 sql_help.c:4528 sql_help.c:4529 sql_help.c:4530 -#: sql_help.c:4577 sql_help.c:4579 sql_help.c:4636 sql_help.c:4692 -#: sql_help.c:4693 sql_help.c:4702 sql_help.c:4743 sql_help.c:4744 -#: sql_help.c:4745 sql_help.c:4746 sql_help.c:4747 sql_help.c:4748 +#: sql_help.c:236 sql_help.c:459 sql_help.c:1291 sql_help.c:1293 +#: sql_help.c:1342 sql_help.c:1354 sql_help.c:1379 sql_help.c:1631 +#: sql_help.c:2158 sql_help.c:2162 sql_help.c:2265 sql_help.c:2270 +#: sql_help.c:2368 sql_help.c:2778 sql_help.c:2791 sql_help.c:2805 +#: sql_help.c:2814 sql_help.c:2826 sql_help.c:2855 sql_help.c:3820 +#: sql_help.c:3835 sql_help.c:3837 sql_help.c:4282 sql_help.c:4283 +#: sql_help.c:4292 sql_help.c:4333 sql_help.c:4334 sql_help.c:4335 +#: sql_help.c:4336 sql_help.c:4337 sql_help.c:4338 sql_help.c:4371 +#: sql_help.c:4372 sql_help.c:4377 sql_help.c:4382 sql_help.c:4521 +#: sql_help.c:4522 sql_help.c:4531 sql_help.c:4572 sql_help.c:4573 +#: sql_help.c:4574 sql_help.c:4575 sql_help.c:4576 sql_help.c:4577 +#: sql_help.c:4624 sql_help.c:4626 sql_help.c:4685 sql_help.c:4741 +#: sql_help.c:4742 sql_help.c:4751 sql_help.c:4792 sql_help.c:4793 +#: sql_help.c:4794 sql_help.c:4795 sql_help.c:4796 sql_help.c:4797 msgid "expression" msgstr "вираз" @@ -3935,14 +4092,14 @@ msgid "domain_constraint" msgstr "обмеження_домену" #: sql_help.c:241 sql_help.c:243 sql_help.c:246 sql_help.c:474 sql_help.c:475 -#: sql_help.c:1264 sql_help.c:1308 sql_help.c:1309 sql_help.c:1310 -#: sql_help.c:1336 sql_help.c:1348 sql_help.c:1365 sql_help.c:1776 -#: sql_help.c:1778 sql_help.c:2146 sql_help.c:2251 sql_help.c:2256 -#: sql_help.c:2794 sql_help.c:2806 sql_help.c:3802 +#: sql_help.c:1268 sql_help.c:1313 sql_help.c:1314 sql_help.c:1315 +#: sql_help.c:1341 sql_help.c:1353 sql_help.c:1370 sql_help.c:1789 +#: sql_help.c:1791 sql_help.c:2161 sql_help.c:2264 sql_help.c:2269 +#: sql_help.c:2813 sql_help.c:2825 sql_help.c:3832 msgid "constraint_name" msgstr "ім'я_обмеження" -#: sql_help.c:244 sql_help.c:1265 +#: sql_help.c:244 sql_help.c:1269 msgid "new_constraint_name" msgstr "ім'я_нового_обмеження" @@ -3962,82 +4119,82 @@ msgstr "де елемент_об'єкт є:" #: sql_help.c:334 sql_help.c:335 sql_help.c:340 sql_help.c:344 sql_help.c:346 #: sql_help.c:348 sql_help.c:357 sql_help.c:358 sql_help.c:359 sql_help.c:360 #: sql_help.c:361 sql_help.c:362 sql_help.c:363 sql_help.c:364 sql_help.c:367 -#: sql_help.c:368 sql_help.c:1768 sql_help.c:1773 sql_help.c:1780 -#: sql_help.c:1781 sql_help.c:1782 sql_help.c:1783 sql_help.c:1784 -#: sql_help.c:1785 sql_help.c:1786 sql_help.c:1791 sql_help.c:1793 -#: sql_help.c:1797 sql_help.c:1799 sql_help.c:1803 sql_help.c:1808 -#: sql_help.c:1809 sql_help.c:1816 sql_help.c:1817 sql_help.c:1818 -#: sql_help.c:1819 sql_help.c:1820 sql_help.c:1821 sql_help.c:1822 -#: sql_help.c:1823 sql_help.c:1824 sql_help.c:1825 sql_help.c:1826 -#: sql_help.c:1831 sql_help.c:1832 sql_help.c:4142 sql_help.c:4147 -#: sql_help.c:4148 sql_help.c:4149 sql_help.c:4150 sql_help.c:4156 -#: sql_help.c:4157 sql_help.c:4162 sql_help.c:4163 sql_help.c:4168 -#: sql_help.c:4169 sql_help.c:4170 sql_help.c:4171 sql_help.c:4172 -#: sql_help.c:4173 +#: sql_help.c:368 sql_help.c:1781 sql_help.c:1786 sql_help.c:1793 +#: sql_help.c:1794 sql_help.c:1795 sql_help.c:1796 sql_help.c:1797 +#: sql_help.c:1798 sql_help.c:1799 sql_help.c:1804 sql_help.c:1806 +#: sql_help.c:1810 sql_help.c:1812 sql_help.c:1816 sql_help.c:1821 +#: sql_help.c:1822 sql_help.c:1829 sql_help.c:1830 sql_help.c:1831 +#: sql_help.c:1832 sql_help.c:1833 sql_help.c:1834 sql_help.c:1835 +#: sql_help.c:1836 sql_help.c:1837 sql_help.c:1838 sql_help.c:1839 +#: sql_help.c:1844 sql_help.c:1845 sql_help.c:4189 sql_help.c:4194 +#: sql_help.c:4195 sql_help.c:4196 sql_help.c:4197 sql_help.c:4203 +#: sql_help.c:4204 sql_help.c:4209 sql_help.c:4210 sql_help.c:4215 +#: sql_help.c:4216 sql_help.c:4217 sql_help.c:4218 sql_help.c:4219 +#: sql_help.c:4220 msgid "object_name" msgstr "ім'я_об'єкту" -#: sql_help.c:326 sql_help.c:1769 sql_help.c:4145 +#: sql_help.c:326 sql_help.c:1782 sql_help.c:4192 msgid "aggregate_name" msgstr "ім'я_агр_функції" -#: sql_help.c:328 sql_help.c:1771 sql_help.c:2055 sql_help.c:2059 -#: sql_help.c:2061 sql_help.c:3212 +#: sql_help.c:328 sql_help.c:1784 sql_help.c:2068 sql_help.c:2072 +#: sql_help.c:2074 sql_help.c:3231 msgid "source_type" msgstr "початковий_тип" -#: sql_help.c:329 sql_help.c:1772 sql_help.c:2056 sql_help.c:2060 -#: sql_help.c:2062 sql_help.c:3213 +#: sql_help.c:329 sql_help.c:1785 sql_help.c:2069 sql_help.c:2073 +#: sql_help.c:2075 sql_help.c:3232 msgid "target_type" msgstr "тип_цілі" -#: sql_help.c:336 sql_help.c:774 sql_help.c:1787 sql_help.c:2057 -#: sql_help.c:2098 sql_help.c:2161 sql_help.c:2407 sql_help.c:2438 -#: sql_help.c:2976 sql_help.c:4056 sql_help.c:4151 sql_help.c:4264 -#: sql_help.c:4268 sql_help.c:4272 sql_help.c:4275 sql_help.c:4503 -#: sql_help.c:4507 sql_help.c:4511 sql_help.c:4514 sql_help.c:4721 -#: sql_help.c:4725 sql_help.c:4729 sql_help.c:4732 +#: sql_help.c:336 sql_help.c:774 sql_help.c:1800 sql_help.c:2070 +#: sql_help.c:2111 sql_help.c:2176 sql_help.c:2426 sql_help.c:2457 +#: sql_help.c:2995 sql_help.c:4100 sql_help.c:4198 sql_help.c:4311 +#: sql_help.c:4315 sql_help.c:4319 sql_help.c:4322 sql_help.c:4550 +#: sql_help.c:4554 sql_help.c:4558 sql_help.c:4561 sql_help.c:4770 +#: sql_help.c:4774 sql_help.c:4778 sql_help.c:4781 msgid "function_name" msgstr "ім'я_функції" -#: sql_help.c:341 sql_help.c:767 sql_help.c:1794 sql_help.c:2431 +#: sql_help.c:341 sql_help.c:767 sql_help.c:1807 sql_help.c:2450 msgid "operator_name" msgstr "ім'я_оператора" -#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1795 -#: sql_help.c:2408 sql_help.c:3330 +#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1808 +#: sql_help.c:2427 sql_help.c:3355 msgid "left_type" msgstr "тип_ліворуч" -#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1796 -#: sql_help.c:2409 sql_help.c:3331 +#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1809 +#: sql_help.c:2428 sql_help.c:3356 msgid "right_type" msgstr "тип_праворуч" #: sql_help.c:345 sql_help.c:347 sql_help.c:730 sql_help.c:733 sql_help.c:736 #: sql_help.c:765 sql_help.c:777 sql_help.c:785 sql_help.c:788 sql_help.c:791 -#: sql_help.c:1354 sql_help.c:1798 sql_help.c:1800 sql_help.c:2428 -#: sql_help.c:2449 sql_help.c:2812 sql_help.c:3340 sql_help.c:3349 +#: sql_help.c:1359 sql_help.c:1811 sql_help.c:1813 sql_help.c:2447 +#: sql_help.c:2468 sql_help.c:2831 sql_help.c:3365 sql_help.c:3374 msgid "index_method" msgstr "метод_індексу" -#: sql_help.c:349 sql_help.c:1804 sql_help.c:4158 +#: sql_help.c:349 sql_help.c:1817 sql_help.c:4205 msgid "procedure_name" msgstr "назва_процедури" -#: sql_help.c:353 sql_help.c:1810 sql_help.c:3723 sql_help.c:4164 +#: sql_help.c:353 sql_help.c:1823 sql_help.c:3752 sql_help.c:4211 msgid "routine_name" msgstr "ім'я_підпрограми" -#: sql_help.c:365 sql_help.c:1326 sql_help.c:1827 sql_help.c:2291 -#: sql_help.c:2488 sql_help.c:2767 sql_help.c:2943 sql_help.c:3511 -#: sql_help.c:3737 sql_help.c:4070 +#: sql_help.c:365 sql_help.c:1331 sql_help.c:1840 sql_help.c:2304 +#: sql_help.c:2507 sql_help.c:2786 sql_help.c:2962 sql_help.c:3536 +#: sql_help.c:3766 sql_help.c:4114 msgid "type_name" msgstr "назва_типу" -#: sql_help.c:366 sql_help.c:1828 sql_help.c:2290 sql_help.c:2487 -#: sql_help.c:2944 sql_help.c:3170 sql_help.c:3512 sql_help.c:3729 -#: sql_help.c:4062 +#: sql_help.c:366 sql_help.c:1841 sql_help.c:2303 sql_help.c:2506 +#: sql_help.c:2963 sql_help.c:3189 sql_help.c:3537 sql_help.c:3758 +#: sql_help.c:4106 msgid "lang_name" msgstr "назва_мови" @@ -4045,129 +4202,134 @@ msgstr "назва_мови" msgid "and aggregate_signature is:" msgstr "і сигнатура_агр_функції:" -#: sql_help.c:392 sql_help.c:1922 sql_help.c:2188 +#: sql_help.c:392 sql_help.c:1935 sql_help.c:2201 msgid "handler_function" msgstr "функція_обробник" -#: sql_help.c:393 sql_help.c:2189 +#: sql_help.c:393 sql_help.c:2202 msgid "validator_function" msgstr "функція_перевірки" #: sql_help.c:441 sql_help.c:519 sql_help.c:659 sql_help.c:841 sql_help.c:979 -#: sql_help.c:1259 sql_help.c:1514 +#: sql_help.c:1263 sql_help.c:1529 msgid "action" msgstr "дія" #: sql_help.c:443 sql_help.c:450 sql_help.c:454 sql_help.c:455 sql_help.c:458 #: sql_help.c:460 sql_help.c:461 sql_help.c:462 sql_help.c:464 sql_help.c:467 #: sql_help.c:469 sql_help.c:470 sql_help.c:663 sql_help.c:673 sql_help.c:675 -#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1261 -#: sql_help.c:1279 sql_help.c:1283 sql_help.c:1284 sql_help.c:1288 -#: sql_help.c:1290 sql_help.c:1291 sql_help.c:1292 sql_help.c:1294 -#: sql_help.c:1297 sql_help.c:1298 sql_help.c:1300 sql_help.c:1303 -#: sql_help.c:1305 sql_help.c:1350 sql_help.c:1352 sql_help.c:1359 -#: sql_help.c:1368 sql_help.c:1373 sql_help.c:1620 sql_help.c:1623 -#: sql_help.c:1660 sql_help.c:1775 sql_help.c:1888 sql_help.c:1894 -#: sql_help.c:1907 sql_help.c:1908 sql_help.c:1909 sql_help.c:2230 -#: sql_help.c:2243 sql_help.c:2288 sql_help.c:2350 sql_help.c:2354 -#: sql_help.c:2387 sql_help.c:2614 sql_help.c:2642 sql_help.c:2643 -#: sql_help.c:2750 sql_help.c:2758 sql_help.c:2768 sql_help.c:2771 -#: sql_help.c:2781 sql_help.c:2785 sql_help.c:2808 sql_help.c:2810 -#: sql_help.c:2817 sql_help.c:2830 sql_help.c:2835 sql_help.c:2853 -#: sql_help.c:2979 sql_help.c:3115 sql_help.c:3708 sql_help.c:3709 -#: sql_help.c:3789 sql_help.c:3804 sql_help.c:3806 sql_help.c:3808 -#: sql_help.c:4041 sql_help.c:4042 sql_help.c:4144 sql_help.c:4295 -#: sql_help.c:4534 sql_help.c:4576 sql_help.c:4578 sql_help.c:4580 -#: sql_help.c:4624 sql_help.c:4752 +#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1265 +#: sql_help.c:1283 sql_help.c:1287 sql_help.c:1288 sql_help.c:1292 +#: sql_help.c:1294 sql_help.c:1295 sql_help.c:1296 sql_help.c:1297 +#: sql_help.c:1299 sql_help.c:1302 sql_help.c:1303 sql_help.c:1305 +#: sql_help.c:1308 sql_help.c:1310 sql_help.c:1355 sql_help.c:1357 +#: sql_help.c:1364 sql_help.c:1373 sql_help.c:1378 sql_help.c:1630 +#: sql_help.c:1633 sql_help.c:1637 sql_help.c:1673 sql_help.c:1788 +#: sql_help.c:1901 sql_help.c:1907 sql_help.c:1920 sql_help.c:1921 +#: sql_help.c:1922 sql_help.c:2243 sql_help.c:2256 sql_help.c:2301 +#: sql_help.c:2367 sql_help.c:2373 sql_help.c:2406 sql_help.c:2633 +#: sql_help.c:2661 sql_help.c:2662 sql_help.c:2769 sql_help.c:2777 +#: sql_help.c:2787 sql_help.c:2790 sql_help.c:2800 sql_help.c:2804 +#: sql_help.c:2827 sql_help.c:2829 sql_help.c:2836 sql_help.c:2849 +#: sql_help.c:2854 sql_help.c:2872 sql_help.c:2998 sql_help.c:3134 +#: sql_help.c:3737 sql_help.c:3738 sql_help.c:3819 sql_help.c:3834 +#: sql_help.c:3836 sql_help.c:3838 sql_help.c:4085 sql_help.c:4086 +#: sql_help.c:4191 sql_help.c:4342 sql_help.c:4581 sql_help.c:4623 +#: sql_help.c:4625 sql_help.c:4627 sql_help.c:4673 sql_help.c:4801 msgid "column_name" msgstr "назва_стовпця" -#: sql_help.c:444 sql_help.c:664 sql_help.c:1262 +#: sql_help.c:444 sql_help.c:664 sql_help.c:1266 sql_help.c:1638 msgid "new_column_name" msgstr "нова_назва_стовпця" #: sql_help.c:449 sql_help.c:540 sql_help.c:672 sql_help.c:862 sql_help.c:1000 -#: sql_help.c:1278 sql_help.c:1530 +#: sql_help.c:1282 sql_help.c:1539 msgid "where action is one of:" msgstr "де допустима дія:" -#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1280 -#: sql_help.c:1285 sql_help.c:1532 sql_help.c:1536 sql_help.c:2141 -#: sql_help.c:2231 sql_help.c:2427 sql_help.c:2607 sql_help.c:2751 -#: sql_help.c:3024 sql_help.c:3891 +#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1284 +#: sql_help.c:1289 sql_help.c:1541 sql_help.c:1545 sql_help.c:2156 +#: sql_help.c:2244 sql_help.c:2446 sql_help.c:2626 sql_help.c:2770 +#: sql_help.c:3043 sql_help.c:3921 msgid "data_type" msgstr "тип_даних" -#: sql_help.c:452 sql_help.c:457 sql_help.c:1281 sql_help.c:1286 -#: sql_help.c:1533 sql_help.c:1537 sql_help.c:2142 sql_help.c:2234 -#: sql_help.c:2352 sql_help.c:2752 sql_help.c:2760 sql_help.c:2773 -#: sql_help.c:2787 sql_help.c:3025 sql_help.c:3031 sql_help.c:3799 +#: sql_help.c:452 sql_help.c:457 sql_help.c:1285 sql_help.c:1290 +#: sql_help.c:1542 sql_help.c:1546 sql_help.c:2157 sql_help.c:2247 +#: sql_help.c:2369 sql_help.c:2771 sql_help.c:2779 sql_help.c:2792 +#: sql_help.c:2806 sql_help.c:3044 sql_help.c:3050 sql_help.c:3829 msgid "collation" msgstr "правила_сортування" -#: sql_help.c:453 sql_help.c:1282 sql_help.c:2235 sql_help.c:2244 -#: sql_help.c:2753 sql_help.c:2769 sql_help.c:2782 +#: sql_help.c:453 sql_help.c:1286 sql_help.c:2248 sql_help.c:2257 +#: sql_help.c:2772 sql_help.c:2788 sql_help.c:2801 msgid "column_constraint" msgstr "обмеження_стовпця" -#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1299 +#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1304 sql_help.c:4670 msgid "integer" msgstr "ціле" -#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1301 -#: sql_help.c:1304 +#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1306 +#: sql_help.c:1309 msgid "attribute_option" msgstr "параметр_атрибуту" -#: sql_help.c:473 sql_help.c:1306 sql_help.c:2236 sql_help.c:2245 -#: sql_help.c:2754 sql_help.c:2770 sql_help.c:2783 +#: sql_help.c:473 sql_help.c:1311 sql_help.c:2249 sql_help.c:2258 +#: sql_help.c:2773 sql_help.c:2789 sql_help.c:2802 msgid "table_constraint" msgstr "обмеження_таблиці" -#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1311 -#: sql_help.c:1312 sql_help.c:1313 sql_help.c:1314 sql_help.c:1829 +#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1316 +#: sql_help.c:1317 sql_help.c:1318 sql_help.c:1319 sql_help.c:1842 msgid "trigger_name" msgstr "ім'я_тригеру" -#: sql_help.c:480 sql_help.c:481 sql_help.c:1324 sql_help.c:1325 -#: sql_help.c:2237 sql_help.c:2242 sql_help.c:2757 sql_help.c:2780 +#: sql_help.c:480 sql_help.c:481 sql_help.c:1329 sql_help.c:1330 +#: sql_help.c:2250 sql_help.c:2255 sql_help.c:2776 sql_help.c:2799 msgid "parent_table" msgstr "батьківська_таблиця" #: sql_help.c:539 sql_help.c:595 sql_help.c:661 sql_help.c:861 sql_help.c:999 -#: sql_help.c:1493 sql_help.c:2173 +#: sql_help.c:1498 sql_help.c:2187 msgid "extension_name" msgstr "ім'я_розширення" -#: sql_help.c:541 sql_help.c:1001 sql_help.c:2292 +#: sql_help.c:541 sql_help.c:1001 sql_help.c:2305 msgid "execution_cost" msgstr "вартість_виконання" -#: sql_help.c:542 sql_help.c:1002 sql_help.c:2293 +#: sql_help.c:542 sql_help.c:1002 sql_help.c:2306 msgid "result_rows" msgstr "рядки_результату" -#: sql_help.c:543 sql_help.c:2294 +#: sql_help.c:543 sql_help.c:2307 msgid "support_function" msgstr "функція_підтримки" #: sql_help.c:564 sql_help.c:566 sql_help.c:925 sql_help.c:933 sql_help.c:937 -#: sql_help.c:940 sql_help.c:943 sql_help.c:1571 sql_help.c:1579 -#: sql_help.c:1583 sql_help.c:1586 sql_help.c:1589 sql_help.c:2585 -#: sql_help.c:2587 sql_help.c:2590 sql_help.c:2591 sql_help.c:3707 -#: sql_help.c:3711 sql_help.c:3714 sql_help.c:3716 sql_help.c:3718 -#: sql_help.c:3720 sql_help.c:3722 sql_help.c:3728 sql_help.c:3730 -#: sql_help.c:3732 sql_help.c:3734 sql_help.c:3736 sql_help.c:3738 +#: sql_help.c:940 sql_help.c:943 sql_help.c:1580 sql_help.c:1588 +#: sql_help.c:1592 sql_help.c:1595 sql_help.c:1598 sql_help.c:2604 +#: sql_help.c:2606 sql_help.c:2609 sql_help.c:2610 sql_help.c:3736 +#: sql_help.c:3740 sql_help.c:3743 sql_help.c:3745 sql_help.c:3747 +#: sql_help.c:3749 sql_help.c:3751 sql_help.c:3757 sql_help.c:3759 +#: sql_help.c:3761 sql_help.c:3763 sql_help.c:3765 sql_help.c:3767 +#: sql_help.c:3769 sql_help.c:3770 sql_help.c:4084 sql_help.c:4088 +#: sql_help.c:4091 sql_help.c:4093 sql_help.c:4095 sql_help.c:4097 +#: sql_help.c:4099 sql_help.c:4105 sql_help.c:4107 sql_help.c:4109 +#: sql_help.c:4111 sql_help.c:4113 sql_help.c:4115 sql_help.c:4117 +#: sql_help.c:4118 msgid "role_specification" msgstr "вказання_ролі" -#: sql_help.c:565 sql_help.c:567 sql_help.c:1602 sql_help.c:2116 -#: sql_help.c:2593 sql_help.c:3100 sql_help.c:3545 sql_help.c:4380 +#: sql_help.c:565 sql_help.c:567 sql_help.c:1611 sql_help.c:2130 +#: sql_help.c:2612 sql_help.c:3119 sql_help.c:3570 sql_help.c:4427 msgid "user_name" msgstr "ім'я_користувача" -#: sql_help.c:568 sql_help.c:945 sql_help.c:1591 sql_help.c:2592 -#: sql_help.c:3739 +#: sql_help.c:568 sql_help.c:945 sql_help.c:1600 sql_help.c:2611 +#: sql_help.c:3771 sql_help.c:4119 msgid "where role_specification can be:" msgstr "де вказання_ролі може бути:" @@ -4175,22 +4337,22 @@ msgstr "де вказання_ролі може бути:" msgid "group_name" msgstr "ім'я_групи" -#: sql_help.c:591 sql_help.c:1371 sql_help.c:2121 sql_help.c:2357 -#: sql_help.c:2391 sql_help.c:2765 sql_help.c:2778 sql_help.c:2792 -#: sql_help.c:2833 sql_help.c:2857 sql_help.c:2869 sql_help.c:3735 -#: sql_help.c:4068 +#: sql_help.c:591 sql_help.c:1376 sql_help.c:2136 sql_help.c:2376 +#: sql_help.c:2410 sql_help.c:2784 sql_help.c:2797 sql_help.c:2811 +#: sql_help.c:2852 sql_help.c:2876 sql_help.c:2888 sql_help.c:3764 +#: sql_help.c:4112 msgid "tablespace_name" msgstr "ім'я_табличного_простору" -#: sql_help.c:593 sql_help.c:681 sql_help.c:1319 sql_help.c:1328 -#: sql_help.c:1366 sql_help.c:1709 +#: sql_help.c:593 sql_help.c:681 sql_help.c:1324 sql_help.c:1333 +#: sql_help.c:1371 sql_help.c:1722 msgid "index_name" msgstr "назва_індексу" -#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1321 -#: sql_help.c:1323 sql_help.c:1369 sql_help.c:2355 sql_help.c:2389 -#: sql_help.c:2763 sql_help.c:2776 sql_help.c:2790 sql_help.c:2831 -#: sql_help.c:2855 +#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1326 +#: sql_help.c:1328 sql_help.c:1374 sql_help.c:2374 sql_help.c:2408 +#: sql_help.c:2782 sql_help.c:2795 sql_help.c:2809 sql_help.c:2850 +#: sql_help.c:2874 msgid "storage_parameter" msgstr "параметр_зберігання" @@ -4198,1769 +4360,1771 @@ msgstr "параметр_зберігання" msgid "column_number" msgstr "номер_стовпця" -#: sql_help.c:626 sql_help.c:1792 sql_help.c:4155 +#: sql_help.c:626 sql_help.c:1805 sql_help.c:4202 msgid "large_object_oid" msgstr "oid_великого_об'єкта" -#: sql_help.c:713 sql_help.c:2412 +#: sql_help.c:713 sql_help.c:2431 msgid "res_proc" msgstr "res_процедура" -#: sql_help.c:714 sql_help.c:2413 +#: sql_help.c:714 sql_help.c:2432 msgid "join_proc" msgstr "процедура_приєднання" -#: sql_help.c:766 sql_help.c:778 sql_help.c:2430 +#: sql_help.c:766 sql_help.c:778 sql_help.c:2449 msgid "strategy_number" msgstr "номер_стратегії" #: sql_help.c:768 sql_help.c:769 sql_help.c:772 sql_help.c:773 sql_help.c:779 -#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2432 sql_help.c:2433 -#: sql_help.c:2436 sql_help.c:2437 +#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2451 sql_help.c:2452 +#: sql_help.c:2455 sql_help.c:2456 msgid "op_type" msgstr "тип_операції" -#: sql_help.c:770 sql_help.c:2434 +#: sql_help.c:770 sql_help.c:2453 msgid "sort_family_name" msgstr "ім'я_родини_сортування" -#: sql_help.c:771 sql_help.c:781 sql_help.c:2435 +#: sql_help.c:771 sql_help.c:781 sql_help.c:2454 msgid "support_number" msgstr "номер_підтримки" -#: sql_help.c:775 sql_help.c:2058 sql_help.c:2439 sql_help.c:2946 -#: sql_help.c:2948 +#: sql_help.c:775 sql_help.c:2071 sql_help.c:2458 sql_help.c:2965 +#: sql_help.c:2967 msgid "argument_type" msgstr "тип_аргументу" #: sql_help.c:806 sql_help.c:809 sql_help.c:880 sql_help.c:882 sql_help.c:884 -#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1489 sql_help.c:1492 -#: sql_help.c:1659 sql_help.c:1708 sql_help.c:1777 sql_help.c:1802 -#: sql_help.c:1815 sql_help.c:1830 sql_help.c:1887 sql_help.c:1893 -#: sql_help.c:2229 sql_help.c:2241 sql_help.c:2348 sql_help.c:2386 -#: sql_help.c:2463 sql_help.c:2506 sql_help.c:2562 sql_help.c:2613 -#: sql_help.c:2644 sql_help.c:2749 sql_help.c:2766 sql_help.c:2779 -#: sql_help.c:2852 sql_help.c:2972 sql_help.c:3149 sql_help.c:3366 -#: sql_help.c:3415 sql_help.c:3521 sql_help.c:3705 sql_help.c:3710 -#: sql_help.c:3755 sql_help.c:3787 sql_help.c:4038 sql_help.c:4043 -#: sql_help.c:4143 sql_help.c:4250 sql_help.c:4252 sql_help.c:4301 -#: sql_help.c:4340 sql_help.c:4489 sql_help.c:4491 sql_help.c:4540 -#: sql_help.c:4574 sql_help.c:4623 sql_help.c:4707 sql_help.c:4709 -#: sql_help.c:4758 +#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1494 sql_help.c:1497 +#: sql_help.c:1672 sql_help.c:1721 sql_help.c:1790 sql_help.c:1815 +#: sql_help.c:1828 sql_help.c:1843 sql_help.c:1900 sql_help.c:1906 +#: sql_help.c:2242 sql_help.c:2254 sql_help.c:2365 sql_help.c:2405 +#: sql_help.c:2482 sql_help.c:2525 sql_help.c:2581 sql_help.c:2632 +#: sql_help.c:2663 sql_help.c:2768 sql_help.c:2785 sql_help.c:2798 +#: sql_help.c:2871 sql_help.c:2991 sql_help.c:3168 sql_help.c:3391 +#: sql_help.c:3440 sql_help.c:3546 sql_help.c:3734 sql_help.c:3739 +#: sql_help.c:3785 sql_help.c:3817 sql_help.c:4082 sql_help.c:4087 +#: sql_help.c:4190 sql_help.c:4297 sql_help.c:4299 sql_help.c:4348 +#: sql_help.c:4387 sql_help.c:4536 sql_help.c:4538 sql_help.c:4587 +#: sql_help.c:4621 sql_help.c:4672 sql_help.c:4756 sql_help.c:4758 +#: sql_help.c:4807 msgid "table_name" msgstr "ім'я_таблиці" -#: sql_help.c:811 sql_help.c:2465 +#: sql_help.c:811 sql_help.c:2484 msgid "using_expression" msgstr "вираз_використання" -#: sql_help.c:812 sql_help.c:2466 +#: sql_help.c:812 sql_help.c:2485 msgid "check_expression" msgstr "вираз_перевірки" -#: sql_help.c:886 sql_help.c:2507 +#: sql_help.c:886 sql_help.c:2526 msgid "publication_parameter" msgstr "параметр_публікації" -#: sql_help.c:929 sql_help.c:1575 sql_help.c:2327 sql_help.c:2539 -#: sql_help.c:3083 +#: sql_help.c:929 sql_help.c:1584 sql_help.c:2344 sql_help.c:2558 +#: sql_help.c:3102 msgid "password" msgstr "пароль" -#: sql_help.c:930 sql_help.c:1576 sql_help.c:2328 sql_help.c:2540 -#: sql_help.c:3084 +#: sql_help.c:930 sql_help.c:1585 sql_help.c:2345 sql_help.c:2559 +#: sql_help.c:3103 msgid "timestamp" msgstr "мітка часу" -#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1580 -#: sql_help.c:1584 sql_help.c:1587 sql_help.c:1590 sql_help.c:3715 -#: sql_help.c:4048 +#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1589 +#: sql_help.c:1593 sql_help.c:1596 sql_help.c:1599 sql_help.c:3744 +#: sql_help.c:4092 msgid "database_name" msgstr "назва_бази_даних" -#: sql_help.c:1048 sql_help.c:2608 +#: sql_help.c:1048 sql_help.c:2627 msgid "increment" msgstr "інкремент" -#: sql_help.c:1049 sql_help.c:2609 +#: sql_help.c:1049 sql_help.c:2628 msgid "minvalue" msgstr "мін_значення" -#: sql_help.c:1050 sql_help.c:2610 +#: sql_help.c:1050 sql_help.c:2629 msgid "maxvalue" msgstr "макс_значення" -#: sql_help.c:1051 sql_help.c:2611 sql_help.c:4248 sql_help.c:4338 -#: sql_help.c:4487 sql_help.c:4640 sql_help.c:4705 +#: sql_help.c:1051 sql_help.c:2630 sql_help.c:4295 sql_help.c:4385 +#: sql_help.c:4534 sql_help.c:4689 sql_help.c:4754 msgid "start" msgstr "початок" -#: sql_help.c:1052 sql_help.c:1296 +#: sql_help.c:1052 sql_help.c:1301 msgid "restart" msgstr "перезапуск" -#: sql_help.c:1053 sql_help.c:2612 +#: sql_help.c:1053 sql_help.c:2631 msgid "cache" msgstr "кеш" -#: sql_help.c:1110 sql_help.c:2656 +#: sql_help.c:1097 +msgid "new_target" +msgstr "нова_ціль" + +#: sql_help.c:1113 sql_help.c:2675 msgid "conninfo" msgstr "інформація_підключення" -#: sql_help.c:1112 sql_help.c:2657 +#: sql_help.c:1115 sql_help.c:2676 msgid "publication_name" msgstr "назва_публікації" -#: sql_help.c:1113 +#: sql_help.c:1116 msgid "set_publication_option" msgstr "опція_set_publication" -#: sql_help.c:1116 +#: sql_help.c:1119 msgid "refresh_option" msgstr "опція_оновлення" -#: sql_help.c:1121 sql_help.c:2658 +#: sql_help.c:1124 sql_help.c:2677 msgid "subscription_parameter" msgstr "параметр_підписки" -#: sql_help.c:1274 sql_help.c:1277 +#: sql_help.c:1278 sql_help.c:1281 msgid "partition_name" msgstr "ім'я_розділу" -#: sql_help.c:1275 sql_help.c:2246 sql_help.c:2784 +#: sql_help.c:1279 sql_help.c:2259 sql_help.c:2803 msgid "partition_bound_spec" msgstr "специфікація_рамок_розділу" -#: sql_help.c:1293 sql_help.c:1340 sql_help.c:2798 +#: sql_help.c:1298 sql_help.c:1345 sql_help.c:2817 msgid "sequence_options" msgstr "опції_послідовності" -#: sql_help.c:1295 +#: sql_help.c:1300 msgid "sequence_option" msgstr "опція_послідовності" -#: sql_help.c:1307 +#: sql_help.c:1312 msgid "table_constraint_using_index" msgstr "індекс_обмеження_таблиці" -#: sql_help.c:1315 sql_help.c:1316 sql_help.c:1317 sql_help.c:1318 +#: sql_help.c:1320 sql_help.c:1321 sql_help.c:1322 sql_help.c:1323 msgid "rewrite_rule_name" msgstr "ім'я_правила_перезапису" -#: sql_help.c:1329 sql_help.c:2823 +#: sql_help.c:1334 sql_help.c:2842 msgid "and partition_bound_spec is:" msgstr "і специфікація_рамок_розділу:" -#: sql_help.c:1330 sql_help.c:1331 sql_help.c:1332 sql_help.c:2824 -#: sql_help.c:2825 sql_help.c:2826 +#: sql_help.c:1335 sql_help.c:1336 sql_help.c:1337 sql_help.c:2843 +#: sql_help.c:2844 sql_help.c:2845 msgid "partition_bound_expr" msgstr "код_секції" -#: sql_help.c:1333 sql_help.c:1334 sql_help.c:2827 sql_help.c:2828 +#: sql_help.c:1338 sql_help.c:1339 sql_help.c:2846 sql_help.c:2847 msgid "numeric_literal" msgstr "числовий_літерал" -#: sql_help.c:1335 +#: sql_help.c:1340 msgid "and column_constraint is:" msgstr "і обмеження_стовпця:" -#: sql_help.c:1338 sql_help.c:2253 sql_help.c:2286 sql_help.c:2486 -#: sql_help.c:2796 +#: sql_help.c:1343 sql_help.c:2266 sql_help.c:2299 sql_help.c:2505 +#: sql_help.c:2815 msgid "default_expr" msgstr "вираз_за_замовчуванням" -#: sql_help.c:1339 sql_help.c:2254 sql_help.c:2797 +#: sql_help.c:1344 sql_help.c:2267 sql_help.c:2816 msgid "generation_expr" msgstr "код_генерації" -#: sql_help.c:1341 sql_help.c:1342 sql_help.c:1351 sql_help.c:1353 -#: sql_help.c:1357 sql_help.c:2799 sql_help.c:2800 sql_help.c:2809 -#: sql_help.c:2811 sql_help.c:2815 +#: sql_help.c:1346 sql_help.c:1347 sql_help.c:1356 sql_help.c:1358 +#: sql_help.c:1362 sql_help.c:2818 sql_help.c:2819 sql_help.c:2828 +#: sql_help.c:2830 sql_help.c:2834 msgid "index_parameters" msgstr "параметри_індексу" -#: sql_help.c:1343 sql_help.c:1360 sql_help.c:2801 sql_help.c:2818 +#: sql_help.c:1348 sql_help.c:1365 sql_help.c:2820 sql_help.c:2837 msgid "reftable" msgstr "залежна_таблиця" -#: sql_help.c:1344 sql_help.c:1361 sql_help.c:2802 sql_help.c:2819 +#: sql_help.c:1349 sql_help.c:1366 sql_help.c:2821 sql_help.c:2838 msgid "refcolumn" msgstr "залежний_стовпець" -#: sql_help.c:1345 sql_help.c:1346 sql_help.c:1362 sql_help.c:1363 -#: sql_help.c:2803 sql_help.c:2804 sql_help.c:2820 sql_help.c:2821 +#: sql_help.c:1350 sql_help.c:1351 sql_help.c:1367 sql_help.c:1368 +#: sql_help.c:2822 sql_help.c:2823 sql_help.c:2839 sql_help.c:2840 msgid "referential_action" msgstr "дія_посилання" -#: sql_help.c:1347 sql_help.c:2255 sql_help.c:2805 +#: sql_help.c:1352 sql_help.c:2268 sql_help.c:2824 msgid "and table_constraint is:" msgstr "і обмеження_таблиці:" -#: sql_help.c:1355 sql_help.c:2813 +#: sql_help.c:1360 sql_help.c:2832 msgid "exclude_element" msgstr "об'єкт_виключення" -#: sql_help.c:1356 sql_help.c:2814 sql_help.c:4246 sql_help.c:4336 -#: sql_help.c:4485 sql_help.c:4638 sql_help.c:4703 +#: sql_help.c:1361 sql_help.c:2833 sql_help.c:4293 sql_help.c:4383 +#: sql_help.c:4532 sql_help.c:4687 sql_help.c:4752 msgid "operator" msgstr "оператор" -#: sql_help.c:1358 sql_help.c:2358 sql_help.c:2816 +#: sql_help.c:1363 sql_help.c:2377 sql_help.c:2835 msgid "predicate" msgstr "предикат" -#: sql_help.c:1364 +#: sql_help.c:1369 msgid "and table_constraint_using_index is:" msgstr "і індекс_обмеження_таблиці:" -#: sql_help.c:1367 sql_help.c:2829 +#: sql_help.c:1372 sql_help.c:2848 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "параметри_індексу в обмеженнях UNIQUE, PRIMARY KEY, EXCLUDE:" -#: sql_help.c:1372 sql_help.c:2834 +#: sql_help.c:1377 sql_help.c:2853 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "елемент_виключення в обмеженні EXCLUDE:" -#: sql_help.c:1375 sql_help.c:2353 sql_help.c:2761 sql_help.c:2774 -#: sql_help.c:2788 sql_help.c:2837 sql_help.c:3800 +#: sql_help.c:1380 sql_help.c:2370 sql_help.c:2780 sql_help.c:2793 +#: sql_help.c:2807 sql_help.c:2856 sql_help.c:3830 msgid "opclass" msgstr "клас_оператора" -#: sql_help.c:1391 sql_help.c:1394 sql_help.c:2872 +#: sql_help.c:1396 sql_help.c:1399 sql_help.c:2891 msgid "tablespace_option" msgstr "опція_табличного_простору" -#: sql_help.c:1415 sql_help.c:1418 sql_help.c:1424 sql_help.c:1428 +#: sql_help.c:1420 sql_help.c:1423 sql_help.c:1429 sql_help.c:1433 msgid "token_type" msgstr "тип_токену" -#: sql_help.c:1416 sql_help.c:1419 +#: sql_help.c:1421 sql_help.c:1424 msgid "dictionary_name" msgstr "ім'я_словника" -#: sql_help.c:1421 sql_help.c:1425 +#: sql_help.c:1426 sql_help.c:1430 msgid "old_dictionary" msgstr "старий_словник" -#: sql_help.c:1422 sql_help.c:1426 +#: sql_help.c:1427 sql_help.c:1431 msgid "new_dictionary" msgstr "новий_словник" -#: sql_help.c:1518 sql_help.c:1531 sql_help.c:1534 sql_help.c:1535 -#: sql_help.c:3023 +#: sql_help.c:1526 sql_help.c:1540 sql_help.c:1543 sql_help.c:1544 +#: sql_help.c:3042 msgid "attribute_name" msgstr "ім'я_атрибута" -#: sql_help.c:1519 +#: sql_help.c:1527 msgid "new_attribute_name" msgstr "нове_ім'я_атрибута" -#: sql_help.c:1525 sql_help.c:1529 +#: sql_help.c:1531 sql_help.c:1535 msgid "new_enum_value" msgstr "нове_значення_перерахування" -#: sql_help.c:1526 +#: sql_help.c:1532 msgid "neighbor_enum_value" msgstr "сусіднє_значення_перерахування" -#: sql_help.c:1528 +#: sql_help.c:1534 msgid "existing_enum_value" msgstr "існуюче_значення_перерахування" -#: sql_help.c:1603 sql_help.c:2238 sql_help.c:2247 sql_help.c:2624 -#: sql_help.c:3101 sql_help.c:3546 sql_help.c:3721 sql_help.c:3756 -#: sql_help.c:4054 +#: sql_help.c:1537 +msgid "property" +msgstr "властивість" + +#: sql_help.c:1612 sql_help.c:2251 sql_help.c:2260 sql_help.c:2643 +#: sql_help.c:3120 sql_help.c:3571 sql_help.c:3750 sql_help.c:3786 +#: sql_help.c:4098 msgid "server_name" msgstr "назва_серверу" -#: sql_help.c:1631 sql_help.c:1634 sql_help.c:3116 +#: sql_help.c:1644 sql_help.c:1647 sql_help.c:3135 msgid "view_option_name" msgstr "ім'я_параметра_представлення" -#: sql_help.c:1632 sql_help.c:3117 +#: sql_help.c:1645 sql_help.c:3136 msgid "view_option_value" msgstr "значення_параметра_представлення" -#: sql_help.c:1653 sql_help.c:1654 sql_help.c:4611 sql_help.c:4612 +#: sql_help.c:1666 sql_help.c:1667 sql_help.c:4659 sql_help.c:4660 msgid "table_and_columns" msgstr "таблиця_і_стовпці" -#: sql_help.c:1655 sql_help.c:1899 sql_help.c:3593 sql_help.c:4613 +#: sql_help.c:1668 sql_help.c:1912 sql_help.c:3619 sql_help.c:3963 +#: sql_help.c:4661 msgid "where option can be one of:" msgstr "де параметр може бути одним із:" -#: sql_help.c:1656 sql_help.c:1657 sql_help.c:1901 sql_help.c:1904 -#: sql_help.c:2083 sql_help.c:3594 sql_help.c:3595 sql_help.c:3596 -#: sql_help.c:3597 sql_help.c:3598 sql_help.c:3599 sql_help.c:3600 -#: sql_help.c:4614 sql_help.c:4615 sql_help.c:4616 sql_help.c:4617 -#: sql_help.c:4618 sql_help.c:4619 sql_help.c:4620 sql_help.c:4621 +#: sql_help.c:1669 sql_help.c:1670 sql_help.c:1914 sql_help.c:1917 +#: sql_help.c:2096 sql_help.c:3620 sql_help.c:3621 sql_help.c:3622 +#: sql_help.c:3623 sql_help.c:3624 sql_help.c:3625 sql_help.c:3626 +#: sql_help.c:3627 sql_help.c:4662 sql_help.c:4663 sql_help.c:4664 +#: sql_help.c:4665 sql_help.c:4666 sql_help.c:4667 sql_help.c:4668 +#: sql_help.c:4669 msgid "boolean" msgstr "логічний" -#: sql_help.c:1658 sql_help.c:4622 +#: sql_help.c:1671 sql_help.c:4671 msgid "and table_and_columns is:" msgstr "і таблиця_і_стовпці:" -#: sql_help.c:1674 sql_help.c:4396 sql_help.c:4398 sql_help.c:4422 +#: sql_help.c:1687 sql_help.c:4443 sql_help.c:4445 sql_help.c:4469 msgid "transaction_mode" msgstr "режим_транзакції" -#: sql_help.c:1675 sql_help.c:4399 sql_help.c:4423 +#: sql_help.c:1688 sql_help.c:4446 sql_help.c:4470 msgid "where transaction_mode is one of:" msgstr "де режим_транзакції один з:" -#: sql_help.c:1684 sql_help.c:4256 sql_help.c:4265 sql_help.c:4269 -#: sql_help.c:4273 sql_help.c:4276 sql_help.c:4495 sql_help.c:4504 -#: sql_help.c:4508 sql_help.c:4512 sql_help.c:4515 sql_help.c:4713 -#: sql_help.c:4722 sql_help.c:4726 sql_help.c:4730 sql_help.c:4733 +#: sql_help.c:1697 sql_help.c:4303 sql_help.c:4312 sql_help.c:4316 +#: sql_help.c:4320 sql_help.c:4323 sql_help.c:4542 sql_help.c:4551 +#: sql_help.c:4555 sql_help.c:4559 sql_help.c:4562 sql_help.c:4762 +#: sql_help.c:4771 sql_help.c:4775 sql_help.c:4779 sql_help.c:4782 msgid "argument" msgstr "аргумент" -#: sql_help.c:1774 +#: sql_help.c:1787 msgid "relation_name" msgstr "назва_відношення" -#: sql_help.c:1779 sql_help.c:3717 sql_help.c:4050 +#: sql_help.c:1792 sql_help.c:3746 sql_help.c:4094 msgid "domain_name" msgstr "назва_домену" -#: sql_help.c:1801 +#: sql_help.c:1814 msgid "policy_name" msgstr "назва_політики" -#: sql_help.c:1814 +#: sql_help.c:1827 msgid "rule_name" msgstr "назва_правила" -#: sql_help.c:1833 +#: sql_help.c:1846 msgid "text" msgstr "текст" -#: sql_help.c:1858 sql_help.c:3900 sql_help.c:4088 +#: sql_help.c:1871 sql_help.c:3930 sql_help.c:4135 msgid "transaction_id" msgstr "ідентифікатор_транзакції" -#: sql_help.c:1889 sql_help.c:1896 sql_help.c:3826 +#: sql_help.c:1902 sql_help.c:1909 sql_help.c:3856 msgid "filename" msgstr "ім'я файлу" -#: sql_help.c:1890 sql_help.c:1897 sql_help.c:2564 sql_help.c:2565 -#: sql_help.c:2566 +#: sql_help.c:1903 sql_help.c:1910 sql_help.c:2583 sql_help.c:2584 +#: sql_help.c:2585 msgid "command" msgstr "команда" -#: sql_help.c:1892 sql_help.c:2563 sql_help.c:2975 sql_help.c:3152 -#: sql_help.c:3810 sql_help.c:4239 sql_help.c:4241 sql_help.c:4329 -#: sql_help.c:4331 sql_help.c:4478 sql_help.c:4480 sql_help.c:4583 -#: sql_help.c:4696 sql_help.c:4698 +#: sql_help.c:1905 sql_help.c:2582 sql_help.c:2994 sql_help.c:3171 +#: sql_help.c:3840 sql_help.c:4286 sql_help.c:4288 sql_help.c:4376 +#: sql_help.c:4378 sql_help.c:4525 sql_help.c:4527 sql_help.c:4630 +#: sql_help.c:4745 sql_help.c:4747 msgid "condition" msgstr "умова" -#: sql_help.c:1895 sql_help.c:2392 sql_help.c:2858 sql_help.c:3118 -#: sql_help.c:3136 sql_help.c:3791 +#: sql_help.c:1908 sql_help.c:2411 sql_help.c:2877 sql_help.c:3137 +#: sql_help.c:3155 sql_help.c:3821 msgid "query" msgstr "запит" -#: sql_help.c:1900 +#: sql_help.c:1913 msgid "format_name" msgstr "назва_формату" -#: sql_help.c:1902 +#: sql_help.c:1915 msgid "delimiter_character" msgstr "символ_роздільник" -#: sql_help.c:1903 +#: sql_help.c:1916 msgid "null_string" msgstr "представлення_NULL" -#: sql_help.c:1905 +#: sql_help.c:1918 msgid "quote_character" msgstr "символ_лапок" -#: sql_help.c:1906 +#: sql_help.c:1919 msgid "escape_character" msgstr "символ_екранування" -#: sql_help.c:1910 +#: sql_help.c:1923 msgid "encoding_name" msgstr "ім'я_кодування" -#: sql_help.c:1921 +#: sql_help.c:1934 msgid "access_method_type" msgstr "тип_метода_доступа" -#: sql_help.c:1992 sql_help.c:2011 sql_help.c:2014 +#: sql_help.c:2005 sql_help.c:2024 sql_help.c:2027 msgid "arg_data_type" msgstr "тип_даних_аргумента" -#: sql_help.c:1993 sql_help.c:2015 sql_help.c:2023 +#: sql_help.c:2006 sql_help.c:2028 sql_help.c:2036 msgid "sfunc" msgstr "функція_стану" -#: sql_help.c:1994 sql_help.c:2016 sql_help.c:2024 +#: sql_help.c:2007 sql_help.c:2029 sql_help.c:2037 msgid "state_data_type" msgstr "тип_даних_стану" -#: sql_help.c:1995 sql_help.c:2017 sql_help.c:2025 +#: sql_help.c:2008 sql_help.c:2030 sql_help.c:2038 msgid "state_data_size" msgstr "розмір_даних_стану" -#: sql_help.c:1996 sql_help.c:2018 sql_help.c:2026 +#: sql_help.c:2009 sql_help.c:2031 sql_help.c:2039 msgid "ffunc" msgstr "функція_завершення" -#: sql_help.c:1997 sql_help.c:2027 +#: sql_help.c:2010 sql_help.c:2040 msgid "combinefunc" msgstr "комбінуюча_функція" -#: sql_help.c:1998 sql_help.c:2028 +#: sql_help.c:2011 sql_help.c:2041 msgid "serialfunc" msgstr "функція_серіалізації" -#: sql_help.c:1999 sql_help.c:2029 +#: sql_help.c:2012 sql_help.c:2042 msgid "deserialfunc" msgstr "функція_десеріалізації" -#: sql_help.c:2000 sql_help.c:2019 sql_help.c:2030 +#: sql_help.c:2013 sql_help.c:2032 sql_help.c:2043 msgid "initial_condition" msgstr "початкова_умова" -#: sql_help.c:2001 sql_help.c:2031 +#: sql_help.c:2014 sql_help.c:2044 msgid "msfunc" msgstr "функція_стану_рух" -#: sql_help.c:2002 sql_help.c:2032 +#: sql_help.c:2015 sql_help.c:2045 msgid "minvfunc" msgstr "зворотна_функція_рух" -#: sql_help.c:2003 sql_help.c:2033 +#: sql_help.c:2016 sql_help.c:2046 msgid "mstate_data_type" msgstr "тип_даних_стану_рух" -#: sql_help.c:2004 sql_help.c:2034 +#: sql_help.c:2017 sql_help.c:2047 msgid "mstate_data_size" msgstr "розмір_даних_стану_рух" -#: sql_help.c:2005 sql_help.c:2035 +#: sql_help.c:2018 sql_help.c:2048 msgid "mffunc" msgstr "функція_завершення_рух" -#: sql_help.c:2006 sql_help.c:2036 +#: sql_help.c:2019 sql_help.c:2049 msgid "minitial_condition" msgstr "початкова_умова_рух" -#: sql_help.c:2007 sql_help.c:2037 +#: sql_help.c:2020 sql_help.c:2050 msgid "sort_operator" msgstr "оператор_сортування" -#: sql_help.c:2020 +#: sql_help.c:2033 msgid "or the old syntax" msgstr "або старий синтаксис" -#: sql_help.c:2022 +#: sql_help.c:2035 msgid "base_type" msgstr "базовий_тип" -#: sql_help.c:2079 +#: sql_help.c:2092 sql_help.c:2133 msgid "locale" msgstr "локаль" -#: sql_help.c:2080 sql_help.c:2119 +#: sql_help.c:2093 sql_help.c:2134 msgid "lc_collate" msgstr "код_правила_сортування" -#: sql_help.c:2081 sql_help.c:2120 +#: sql_help.c:2094 sql_help.c:2135 msgid "lc_ctype" msgstr "код_класифікації_символів" -#: sql_help.c:2082 sql_help.c:4141 +#: sql_help.c:2095 sql_help.c:4188 msgid "provider" msgstr "постачальник" -#: sql_help.c:2084 sql_help.c:2175 +#: sql_help.c:2097 sql_help.c:2189 msgid "version" msgstr "версія" -#: sql_help.c:2086 +#: sql_help.c:2099 msgid "existing_collation" msgstr "існуюче_правило_сортування" -#: sql_help.c:2096 +#: sql_help.c:2109 msgid "source_encoding" msgstr "початкове_кодування" -#: sql_help.c:2097 +#: sql_help.c:2110 msgid "dest_encoding" msgstr "цільве_кодування" -#: sql_help.c:2117 sql_help.c:2898 +#: sql_help.c:2131 sql_help.c:2917 msgid "template" msgstr "шаблон" -#: sql_help.c:2118 +#: sql_help.c:2132 msgid "encoding" msgstr "кодування" -#: sql_help.c:2144 +#: sql_help.c:2159 msgid "constraint" msgstr "обмеження" -#: sql_help.c:2145 +#: sql_help.c:2160 msgid "where constraint is:" msgstr "де обмеження:" -#: sql_help.c:2159 sql_help.c:2561 sql_help.c:2971 +#: sql_help.c:2174 sql_help.c:2580 sql_help.c:2990 msgid "event" msgstr "подія" -#: sql_help.c:2160 +#: sql_help.c:2175 msgid "filter_variable" msgstr "змінна_фільтру" -#: sql_help.c:2176 -msgid "old_version" -msgstr "стара_версія" - -#: sql_help.c:2250 sql_help.c:2793 +#: sql_help.c:2263 sql_help.c:2812 msgid "where column_constraint is:" msgstr "де обмеження_стовпців:" -#: sql_help.c:2287 +#: sql_help.c:2300 msgid "rettype" msgstr "тип_результату" -#: sql_help.c:2289 +#: sql_help.c:2302 msgid "column_type" msgstr "тип_стовпця" -#: sql_help.c:2298 sql_help.c:2492 +#: sql_help.c:2311 sql_help.c:2511 msgid "definition" msgstr "визначення" -#: sql_help.c:2299 sql_help.c:2493 +#: sql_help.c:2312 sql_help.c:2512 msgid "obj_file" msgstr "об'єктний_файл" -#: sql_help.c:2300 sql_help.c:2494 +#: sql_help.c:2313 sql_help.c:2513 msgid "link_symbol" msgstr "символ_експорту" -#: sql_help.c:2334 sql_help.c:2546 sql_help.c:3090 +#: sql_help.c:2351 sql_help.c:2565 sql_help.c:3109 msgid "uid" msgstr "uid" -#: sql_help.c:2349 sql_help.c:2388 sql_help.c:2762 sql_help.c:2775 -#: sql_help.c:2789 sql_help.c:2854 +#: sql_help.c:2366 sql_help.c:2407 sql_help.c:2781 sql_help.c:2794 +#: sql_help.c:2808 sql_help.c:2873 msgid "method" msgstr "метод" -#: sql_help.c:2370 +#: sql_help.c:2371 +msgid "opclass_parameter" +msgstr "opclass_parameter" + +#: sql_help.c:2388 msgid "call_handler" msgstr "обробник_виклику" -#: sql_help.c:2371 +#: sql_help.c:2389 msgid "inline_handler" msgstr "обробник_впровадженого_коду" -#: sql_help.c:2372 +#: sql_help.c:2390 msgid "valfunction" msgstr "функція_перевірки" -#: sql_help.c:2410 +#: sql_help.c:2429 msgid "com_op" msgstr "комут_оператор" -#: sql_help.c:2411 +#: sql_help.c:2430 msgid "neg_op" msgstr "зворотній_оператор" -#: sql_help.c:2429 +#: sql_help.c:2448 msgid "family_name" msgstr "назва_сімейства" -#: sql_help.c:2440 +#: sql_help.c:2459 msgid "storage_type" msgstr "тип_зберігання" -#: sql_help.c:2567 sql_help.c:2978 +#: sql_help.c:2586 sql_help.c:2997 msgid "where event can be one of:" msgstr "де подія може бути однією з:" -#: sql_help.c:2586 sql_help.c:2588 +#: sql_help.c:2605 sql_help.c:2607 msgid "schema_element" msgstr "елемент_схеми" -#: sql_help.c:2625 +#: sql_help.c:2644 msgid "server_type" msgstr "тип_серверу" -#: sql_help.c:2626 +#: sql_help.c:2645 msgid "server_version" msgstr "версія_серверу" -#: sql_help.c:2627 sql_help.c:3719 sql_help.c:4052 +#: sql_help.c:2646 sql_help.c:3748 sql_help.c:4096 msgid "fdw_name" msgstr "назва_fdw" -#: sql_help.c:2640 +#: sql_help.c:2659 msgid "statistics_name" msgstr "назва_статистики" -#: sql_help.c:2641 +#: sql_help.c:2660 msgid "statistics_kind" msgstr "вид_статистики" -#: sql_help.c:2655 +#: sql_help.c:2674 msgid "subscription_name" msgstr "назва_підписки" -#: sql_help.c:2755 +#: sql_help.c:2774 msgid "source_table" msgstr "вихідна_таблиця" -#: sql_help.c:2756 +#: sql_help.c:2775 msgid "like_option" msgstr "параметр_породження" -#: sql_help.c:2822 +#: sql_help.c:2841 msgid "and like_option is:" msgstr "і параметр_породження:" -#: sql_help.c:2871 +#: sql_help.c:2890 msgid "directory" msgstr "каталог" -#: sql_help.c:2885 +#: sql_help.c:2904 msgid "parser_name" msgstr "назва_парсера" -#: sql_help.c:2886 +#: sql_help.c:2905 msgid "source_config" msgstr "початкова_конфігурація" -#: sql_help.c:2915 +#: sql_help.c:2934 msgid "start_function" msgstr "функція_початку" -#: sql_help.c:2916 +#: sql_help.c:2935 msgid "gettoken_function" msgstr "функція_видачі_токену" -#: sql_help.c:2917 +#: sql_help.c:2936 msgid "end_function" msgstr "функція_завершення" -#: sql_help.c:2918 +#: sql_help.c:2937 msgid "lextypes_function" msgstr "функція_лекс_типів" -#: sql_help.c:2919 +#: sql_help.c:2938 msgid "headline_function" msgstr "функція_створення_заголовків" -#: sql_help.c:2931 +#: sql_help.c:2950 msgid "init_function" msgstr "функція_ініціалізації" -#: sql_help.c:2932 +#: sql_help.c:2951 msgid "lexize_function" msgstr "функція_виділення_лексем" -#: sql_help.c:2945 +#: sql_help.c:2964 msgid "from_sql_function_name" msgstr "ім'я_функції_з_sql" -#: sql_help.c:2947 +#: sql_help.c:2966 msgid "to_sql_function_name" msgstr "ім'я_функції_в_sql" -#: sql_help.c:2973 +#: sql_help.c:2992 msgid "referenced_table_name" msgstr "ім'я_залежної_таблиці" -#: sql_help.c:2974 +#: sql_help.c:2993 msgid "transition_relation_name" msgstr "ім'я_перехідного_відношення" -#: sql_help.c:2977 +#: sql_help.c:2996 msgid "arguments" msgstr "аргументи" -#: sql_help.c:3027 sql_help.c:4174 +#: sql_help.c:3046 sql_help.c:4221 msgid "label" msgstr "мітка" -#: sql_help.c:3029 +#: sql_help.c:3048 msgid "subtype" msgstr "підтип" -#: sql_help.c:3030 +#: sql_help.c:3049 msgid "subtype_operator_class" msgstr "клас_оператора_підтипу" -#: sql_help.c:3032 +#: sql_help.c:3051 msgid "canonical_function" msgstr "канонічна_функція" -#: sql_help.c:3033 +#: sql_help.c:3052 msgid "subtype_diff_function" msgstr "функція_розбіжностей_підтипу" -#: sql_help.c:3035 +#: sql_help.c:3054 msgid "input_function" msgstr "функція_вводу" -#: sql_help.c:3036 +#: sql_help.c:3055 msgid "output_function" msgstr "функція_виводу" -#: sql_help.c:3037 +#: sql_help.c:3056 msgid "receive_function" msgstr "функція_отримання" -#: sql_help.c:3038 +#: sql_help.c:3057 msgid "send_function" msgstr "функція_відправки" -#: sql_help.c:3039 +#: sql_help.c:3058 msgid "type_modifier_input_function" msgstr "функція_введення_модифікатора_типу" -#: sql_help.c:3040 +#: sql_help.c:3059 msgid "type_modifier_output_function" msgstr "функція_виводу_модифікатора_типу" -#: sql_help.c:3041 +#: sql_help.c:3060 msgid "analyze_function" msgstr "функція_аналізу" -#: sql_help.c:3042 +#: sql_help.c:3061 msgid "internallength" msgstr "внутр_довжина" -#: sql_help.c:3043 +#: sql_help.c:3062 msgid "alignment" msgstr "вирівнювання" -#: sql_help.c:3044 +#: sql_help.c:3063 msgid "storage" msgstr "зберігання" -#: sql_help.c:3045 +#: sql_help.c:3064 msgid "like_type" msgstr "тип_зразок" -#: sql_help.c:3046 +#: sql_help.c:3065 msgid "category" msgstr "категорія" -#: sql_help.c:3047 +#: sql_help.c:3066 msgid "preferred" msgstr "привілейований" -#: sql_help.c:3048 +#: sql_help.c:3067 msgid "default" msgstr "за_замовчуванням" -#: sql_help.c:3049 +#: sql_help.c:3068 msgid "element" msgstr "елемент" -#: sql_help.c:3050 +#: sql_help.c:3069 msgid "delimiter" msgstr "роздільник" -#: sql_help.c:3051 +#: sql_help.c:3070 msgid "collatable" msgstr "сортувальний" -#: sql_help.c:3148 sql_help.c:3786 sql_help.c:4234 sql_help.c:4323 -#: sql_help.c:4473 sql_help.c:4573 sql_help.c:4691 +#: sql_help.c:3167 sql_help.c:3816 sql_help.c:4281 sql_help.c:4370 +#: sql_help.c:4520 sql_help.c:4620 sql_help.c:4740 msgid "with_query" msgstr "with_запит" -#: sql_help.c:3150 sql_help.c:3788 sql_help.c:4253 sql_help.c:4259 -#: sql_help.c:4262 sql_help.c:4266 sql_help.c:4270 sql_help.c:4278 -#: sql_help.c:4492 sql_help.c:4498 sql_help.c:4501 sql_help.c:4505 -#: sql_help.c:4509 sql_help.c:4517 sql_help.c:4575 sql_help.c:4710 -#: sql_help.c:4716 sql_help.c:4719 sql_help.c:4723 sql_help.c:4727 -#: sql_help.c:4735 +#: sql_help.c:3169 sql_help.c:3818 sql_help.c:4300 sql_help.c:4306 +#: sql_help.c:4309 sql_help.c:4313 sql_help.c:4317 sql_help.c:4325 +#: sql_help.c:4539 sql_help.c:4545 sql_help.c:4548 sql_help.c:4552 +#: sql_help.c:4556 sql_help.c:4564 sql_help.c:4622 sql_help.c:4759 +#: sql_help.c:4765 sql_help.c:4768 sql_help.c:4772 sql_help.c:4776 +#: sql_help.c:4784 msgid "alias" msgstr "псевдонім" -#: sql_help.c:3151 -msgid "using_list" -msgstr "список_using" +#: sql_help.c:3170 sql_help.c:4285 sql_help.c:4327 sql_help.c:4329 +#: sql_help.c:4375 sql_help.c:4524 sql_help.c:4566 sql_help.c:4568 +#: sql_help.c:4629 sql_help.c:4744 sql_help.c:4786 sql_help.c:4788 +msgid "from_item" +msgstr "джерело_даних" -#: sql_help.c:3153 sql_help.c:3626 sql_help.c:3867 sql_help.c:4584 +#: sql_help.c:3172 sql_help.c:3653 sql_help.c:3897 sql_help.c:4631 msgid "cursor_name" msgstr "ім'я_курсору" -#: sql_help.c:3154 sql_help.c:3794 sql_help.c:4585 +#: sql_help.c:3173 sql_help.c:3824 sql_help.c:4632 msgid "output_expression" msgstr "вираз_результату" -#: sql_help.c:3155 sql_help.c:3795 sql_help.c:4237 sql_help.c:4326 -#: sql_help.c:4476 sql_help.c:4586 sql_help.c:4694 +#: sql_help.c:3174 sql_help.c:3825 sql_help.c:4284 sql_help.c:4373 +#: sql_help.c:4523 sql_help.c:4633 sql_help.c:4743 msgid "output_name" msgstr "ім'я_результату" -#: sql_help.c:3171 +#: sql_help.c:3190 msgid "code" msgstr "код" -#: sql_help.c:3570 +#: sql_help.c:3595 msgid "parameter" msgstr "параметр" -#: sql_help.c:3591 sql_help.c:3592 sql_help.c:3892 +#: sql_help.c:3617 sql_help.c:3618 sql_help.c:3922 msgid "statement" msgstr "оператор" -#: sql_help.c:3625 sql_help.c:3866 +#: sql_help.c:3652 sql_help.c:3896 msgid "direction" msgstr "напрямок" -#: sql_help.c:3627 sql_help.c:3868 +#: sql_help.c:3654 sql_help.c:3898 msgid "where direction can be empty or one of:" msgstr "де напрямок може бути пустим або одним із:" -#: sql_help.c:3628 sql_help.c:3629 sql_help.c:3630 sql_help.c:3631 -#: sql_help.c:3632 sql_help.c:3869 sql_help.c:3870 sql_help.c:3871 -#: sql_help.c:3872 sql_help.c:3873 sql_help.c:4247 sql_help.c:4249 -#: sql_help.c:4337 sql_help.c:4339 sql_help.c:4486 sql_help.c:4488 -#: sql_help.c:4639 sql_help.c:4641 sql_help.c:4704 sql_help.c:4706 +#: sql_help.c:3655 sql_help.c:3656 sql_help.c:3657 sql_help.c:3658 +#: sql_help.c:3659 sql_help.c:3899 sql_help.c:3900 sql_help.c:3901 +#: sql_help.c:3902 sql_help.c:3903 sql_help.c:4294 sql_help.c:4296 +#: sql_help.c:4384 sql_help.c:4386 sql_help.c:4533 sql_help.c:4535 +#: sql_help.c:4688 sql_help.c:4690 sql_help.c:4753 sql_help.c:4755 msgid "count" msgstr "кількість" -#: sql_help.c:3712 sql_help.c:4045 +#: sql_help.c:3741 sql_help.c:4089 msgid "sequence_name" msgstr "ім'я_послідовності" -#: sql_help.c:3725 sql_help.c:4058 +#: sql_help.c:3754 sql_help.c:4102 msgid "arg_name" msgstr "ім'я_аргументу" -#: sql_help.c:3726 sql_help.c:4059 +#: sql_help.c:3755 sql_help.c:4103 msgid "arg_type" msgstr "тип_аргументу" -#: sql_help.c:3731 sql_help.c:4064 +#: sql_help.c:3760 sql_help.c:4108 msgid "loid" msgstr "код_вел_об'єкту" -#: sql_help.c:3754 +#: sql_help.c:3784 msgid "remote_schema" msgstr "віддалена_схема" -#: sql_help.c:3757 +#: sql_help.c:3787 msgid "local_schema" msgstr "локальна_схема" -#: sql_help.c:3792 +#: sql_help.c:3822 msgid "conflict_target" msgstr "ціль_конфлікту" -#: sql_help.c:3793 +#: sql_help.c:3823 msgid "conflict_action" msgstr "дія_при_конфлікті" -#: sql_help.c:3796 +#: sql_help.c:3826 msgid "where conflict_target can be one of:" msgstr "де ціль_конфлікту може бути одним з:" -#: sql_help.c:3797 +#: sql_help.c:3827 msgid "index_column_name" msgstr "ім'я_стовпця_індексу" -#: sql_help.c:3798 +#: sql_help.c:3828 msgid "index_expression" msgstr "вираз_індексу" -#: sql_help.c:3801 +#: sql_help.c:3831 msgid "index_predicate" msgstr "предикат_індексу" -#: sql_help.c:3803 +#: sql_help.c:3833 msgid "and conflict_action is one of:" msgstr "і дія_при_конфлікті одна з:" -#: sql_help.c:3809 sql_help.c:4581 +#: sql_help.c:3839 sql_help.c:4628 msgid "sub-SELECT" msgstr "вкладений-SELECT" -#: sql_help.c:3818 sql_help.c:3881 sql_help.c:4557 +#: sql_help.c:3848 sql_help.c:3911 sql_help.c:4604 msgid "channel" msgstr "канал" -#: sql_help.c:3840 +#: sql_help.c:3870 msgid "lockmode" msgstr "режим_блокування" -#: sql_help.c:3841 +#: sql_help.c:3871 msgid "where lockmode is one of:" msgstr "де режим_блокування один з:" -#: sql_help.c:3882 +#: sql_help.c:3912 msgid "payload" msgstr "зміст" -#: sql_help.c:3909 +#: sql_help.c:3939 msgid "old_role" msgstr "стара_роль" -#: sql_help.c:3910 +#: sql_help.c:3940 msgid "new_role" msgstr "нова_роль" -#: sql_help.c:3935 sql_help.c:4096 sql_help.c:4104 +#: sql_help.c:3971 sql_help.c:4143 sql_help.c:4151 msgid "savepoint_name" msgstr "ім'я_точки_збереження" -#: sql_help.c:4238 sql_help.c:4280 sql_help.c:4282 sql_help.c:4328 -#: sql_help.c:4477 sql_help.c:4519 sql_help.c:4521 sql_help.c:4695 -#: sql_help.c:4737 sql_help.c:4739 -msgid "from_item" -msgstr "джерело_даних" - -#: sql_help.c:4240 sql_help.c:4292 sql_help.c:4479 sql_help.c:4531 -#: sql_help.c:4697 sql_help.c:4749 +#: sql_help.c:4287 sql_help.c:4339 sql_help.c:4526 sql_help.c:4578 +#: sql_help.c:4746 sql_help.c:4798 msgid "grouping_element" msgstr "елемент_групування" -#: sql_help.c:4242 sql_help.c:4332 sql_help.c:4481 sql_help.c:4699 +#: sql_help.c:4289 sql_help.c:4379 sql_help.c:4528 sql_help.c:4748 msgid "window_name" msgstr "назва_вікна" -#: sql_help.c:4243 sql_help.c:4333 sql_help.c:4482 sql_help.c:4700 +#: sql_help.c:4290 sql_help.c:4380 sql_help.c:4529 sql_help.c:4749 msgid "window_definition" msgstr "визначення_вікна" -#: sql_help.c:4244 sql_help.c:4258 sql_help.c:4296 sql_help.c:4334 -#: sql_help.c:4483 sql_help.c:4497 sql_help.c:4535 sql_help.c:4701 -#: sql_help.c:4715 sql_help.c:4753 +#: sql_help.c:4291 sql_help.c:4305 sql_help.c:4343 sql_help.c:4381 +#: sql_help.c:4530 sql_help.c:4544 sql_help.c:4582 sql_help.c:4750 +#: sql_help.c:4764 sql_help.c:4802 msgid "select" msgstr "виберіть" -#: sql_help.c:4251 sql_help.c:4490 sql_help.c:4708 +#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4757 msgid "where from_item can be one of:" msgstr "де джерело_даних може бути одним з:" -#: sql_help.c:4254 sql_help.c:4260 sql_help.c:4263 sql_help.c:4267 -#: sql_help.c:4279 sql_help.c:4493 sql_help.c:4499 sql_help.c:4502 -#: sql_help.c:4506 sql_help.c:4518 sql_help.c:4711 sql_help.c:4717 -#: sql_help.c:4720 sql_help.c:4724 sql_help.c:4736 +#: sql_help.c:4301 sql_help.c:4307 sql_help.c:4310 sql_help.c:4314 +#: sql_help.c:4326 sql_help.c:4540 sql_help.c:4546 sql_help.c:4549 +#: sql_help.c:4553 sql_help.c:4565 sql_help.c:4760 sql_help.c:4766 +#: sql_help.c:4769 sql_help.c:4773 sql_help.c:4785 msgid "column_alias" msgstr "псевдонім_стовпця" -#: sql_help.c:4255 sql_help.c:4494 sql_help.c:4712 +#: sql_help.c:4302 sql_help.c:4541 sql_help.c:4761 msgid "sampling_method" msgstr "метод_вибірки" -#: sql_help.c:4257 sql_help.c:4496 sql_help.c:4714 +#: sql_help.c:4304 sql_help.c:4543 sql_help.c:4763 msgid "seed" msgstr "початкове_число" -#: sql_help.c:4261 sql_help.c:4294 sql_help.c:4500 sql_help.c:4533 -#: sql_help.c:4718 sql_help.c:4751 +#: sql_help.c:4308 sql_help.c:4341 sql_help.c:4547 sql_help.c:4580 +#: sql_help.c:4767 sql_help.c:4800 msgid "with_query_name" msgstr "ім'я_запиту_WITH" -#: sql_help.c:4271 sql_help.c:4274 sql_help.c:4277 sql_help.c:4510 -#: sql_help.c:4513 sql_help.c:4516 sql_help.c:4728 sql_help.c:4731 -#: sql_help.c:4734 +#: sql_help.c:4318 sql_help.c:4321 sql_help.c:4324 sql_help.c:4557 +#: sql_help.c:4560 sql_help.c:4563 sql_help.c:4777 sql_help.c:4780 +#: sql_help.c:4783 msgid "column_definition" msgstr "визначення_стовпця" -#: sql_help.c:4281 sql_help.c:4520 sql_help.c:4738 +#: sql_help.c:4328 sql_help.c:4567 sql_help.c:4787 msgid "join_type" msgstr "тип_поєднання" -#: sql_help.c:4283 sql_help.c:4522 sql_help.c:4740 +#: sql_help.c:4330 sql_help.c:4569 sql_help.c:4789 msgid "join_condition" msgstr "умова_поєднання" -#: sql_help.c:4284 sql_help.c:4523 sql_help.c:4741 +#: sql_help.c:4331 sql_help.c:4570 sql_help.c:4790 msgid "join_column" msgstr "стовпець_поєднання" -#: sql_help.c:4285 sql_help.c:4524 sql_help.c:4742 +#: sql_help.c:4332 sql_help.c:4571 sql_help.c:4791 msgid "and grouping_element can be one of:" msgstr "і елемент_групування може бути одним з:" -#: sql_help.c:4293 sql_help.c:4532 sql_help.c:4750 +#: sql_help.c:4340 sql_help.c:4579 sql_help.c:4799 msgid "and with_query is:" msgstr "і запит_WITH:" -#: sql_help.c:4297 sql_help.c:4536 sql_help.c:4754 +#: sql_help.c:4344 sql_help.c:4583 sql_help.c:4803 msgid "values" msgstr "значення" -#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4755 +#: sql_help.c:4345 sql_help.c:4584 sql_help.c:4804 msgid "insert" msgstr "вставка" -#: sql_help.c:4299 sql_help.c:4538 sql_help.c:4756 +#: sql_help.c:4346 sql_help.c:4585 sql_help.c:4805 msgid "update" msgstr "оновлення" -#: sql_help.c:4300 sql_help.c:4539 sql_help.c:4757 +#: sql_help.c:4347 sql_help.c:4586 sql_help.c:4806 msgid "delete" msgstr "видалення" -#: sql_help.c:4327 +#: sql_help.c:4374 msgid "new_table" msgstr "нова_таблиця" -#: sql_help.c:4352 +#: sql_help.c:4399 msgid "timezone" msgstr "часовий пояс" -#: sql_help.c:4397 +#: sql_help.c:4444 msgid "snapshot_id" msgstr "код_знімку" -#: sql_help.c:4582 -msgid "from_list" -msgstr "список_FROM" - -#: sql_help.c:4637 +#: sql_help.c:4686 msgid "sort_expression" msgstr "вираз_сортування" -#: sql_help.c:4764 sql_help.c:5742 +#: sql_help.c:4813 sql_help.c:5791 msgid "abort the current transaction" msgstr "перервати поточну транзакцію" -#: sql_help.c:4770 +#: sql_help.c:4819 msgid "change the definition of an aggregate function" msgstr "змінити визначення агрегатної функції" -#: sql_help.c:4776 +#: sql_help.c:4825 msgid "change the definition of a collation" msgstr "змінити визначення правила сортування" -#: sql_help.c:4782 +#: sql_help.c:4831 msgid "change the definition of a conversion" msgstr "змінити визначення перетворення" -#: sql_help.c:4788 +#: sql_help.c:4837 msgid "change a database" msgstr "змінити базу даних" -#: sql_help.c:4794 +#: sql_help.c:4843 msgid "define default access privileges" msgstr "визначити права доступу за замовчуванням" -#: sql_help.c:4800 +#: sql_help.c:4849 msgid "change the definition of a domain" msgstr "змінити визначення домену" -#: sql_help.c:4806 +#: sql_help.c:4855 msgid "change the definition of an event trigger" msgstr "змінити визначення тригеру події" -#: sql_help.c:4812 +#: sql_help.c:4861 msgid "change the definition of an extension" msgstr "змінити визначення розширення" -#: sql_help.c:4818 +#: sql_help.c:4867 msgid "change the definition of a foreign-data wrapper" msgstr "змінити визначення джерела сторонніх даних" -#: sql_help.c:4824 +#: sql_help.c:4873 msgid "change the definition of a foreign table" msgstr "змінити визначення сторонньої таблиці" -#: sql_help.c:4830 +#: sql_help.c:4879 msgid "change the definition of a function" msgstr "змінити визначення функції" -#: sql_help.c:4836 +#: sql_help.c:4885 msgid "change role name or membership" msgstr "змінити назву ролі або членства" -#: sql_help.c:4842 +#: sql_help.c:4891 msgid "change the definition of an index" msgstr "змінити визначення індексу" -#: sql_help.c:4848 +#: sql_help.c:4897 msgid "change the definition of a procedural language" msgstr "змінити визначення процедурної мови" -#: sql_help.c:4854 +#: sql_help.c:4903 msgid "change the definition of a large object" msgstr "змінити визначення великого об'єкту" -#: sql_help.c:4860 +#: sql_help.c:4909 msgid "change the definition of a materialized view" msgstr "змінити визначення матеріалізованого подання" -#: sql_help.c:4866 +#: sql_help.c:4915 msgid "change the definition of an operator" msgstr "змінити визначення оператора" -#: sql_help.c:4872 +#: sql_help.c:4921 msgid "change the definition of an operator class" msgstr "змінити визначення класа операторів" -#: sql_help.c:4878 +#: sql_help.c:4927 msgid "change the definition of an operator family" msgstr "змінити визначення сімейства операторів" -#: sql_help.c:4884 +#: sql_help.c:4933 msgid "change the definition of a row level security policy" msgstr "змінити визначення політики безпеки на рівні рядків" -#: sql_help.c:4890 +#: sql_help.c:4939 msgid "change the definition of a procedure" msgstr "змінити визначення процедури" -#: sql_help.c:4896 +#: sql_help.c:4945 msgid "change the definition of a publication" msgstr "змінити визначення публікації" -#: sql_help.c:4902 sql_help.c:5004 +#: sql_help.c:4951 sql_help.c:5053 msgid "change a database role" msgstr "змінити роль бази даних" -#: sql_help.c:4908 +#: sql_help.c:4957 msgid "change the definition of a routine" msgstr "змінити визначення підпрограми" -#: sql_help.c:4914 +#: sql_help.c:4963 msgid "change the definition of a rule" msgstr "змінити визначення правила" -#: sql_help.c:4920 +#: sql_help.c:4969 msgid "change the definition of a schema" msgstr "змінити визначення схеми" -#: sql_help.c:4926 +#: sql_help.c:4975 msgid "change the definition of a sequence generator" msgstr "змінити визначення генератору послідовності" -#: sql_help.c:4932 +#: sql_help.c:4981 msgid "change the definition of a foreign server" msgstr "змінити визначення стороннього серверу" -#: sql_help.c:4938 +#: sql_help.c:4987 msgid "change the definition of an extended statistics object" msgstr "змінити визначення об'єкту розширеної статистики" -#: sql_help.c:4944 +#: sql_help.c:4993 msgid "change the definition of a subscription" msgstr "змінити визначення підписки" -#: sql_help.c:4950 +#: sql_help.c:4999 msgid "change a server configuration parameter" msgstr "змінити параметр конфігурації сервера" -#: sql_help.c:4956 +#: sql_help.c:5005 msgid "change the definition of a table" msgstr "змінити визначення таблиці" -#: sql_help.c:4962 +#: sql_help.c:5011 msgid "change the definition of a tablespace" msgstr "змінити визначення табличного простору" -#: sql_help.c:4968 +#: sql_help.c:5017 msgid "change the definition of a text search configuration" msgstr "змінити визначення конфігурації текстового пошуку" -#: sql_help.c:4974 +#: sql_help.c:5023 msgid "change the definition of a text search dictionary" msgstr "змінити визначення словника текстового пошуку" -#: sql_help.c:4980 +#: sql_help.c:5029 msgid "change the definition of a text search parser" msgstr "змінити визначення парсера текстового пошуку" -#: sql_help.c:4986 +#: sql_help.c:5035 msgid "change the definition of a text search template" msgstr "змінити визначення шаблона текстового пошуку" -#: sql_help.c:4992 +#: sql_help.c:5041 msgid "change the definition of a trigger" msgstr "змінити визначення тригеру" -#: sql_help.c:4998 +#: sql_help.c:5047 msgid "change the definition of a type" msgstr "змінити визначення типу" -#: sql_help.c:5010 +#: sql_help.c:5059 msgid "change the definition of a user mapping" msgstr "змінити визначення зіставлень користувачів" -#: sql_help.c:5016 +#: sql_help.c:5065 msgid "change the definition of a view" msgstr "змінити визначення подання" -#: sql_help.c:5022 +#: sql_help.c:5071 msgid "collect statistics about a database" msgstr "зібрати статистику про базу даних" -#: sql_help.c:5028 sql_help.c:5820 +#: sql_help.c:5077 sql_help.c:5869 msgid "start a transaction block" msgstr "розпочати транзакцію" -#: sql_help.c:5034 +#: sql_help.c:5083 msgid "invoke a procedure" msgstr "викликати процедуру" -#: sql_help.c:5040 +#: sql_help.c:5089 msgid "force a write-ahead log checkpoint" msgstr "провести контрольну точку в журналі попереднього запису" -#: sql_help.c:5046 +#: sql_help.c:5095 msgid "close a cursor" msgstr "закрити курсор" -#: sql_help.c:5052 +#: sql_help.c:5101 msgid "cluster a table according to an index" msgstr "перегрупувати таблицю за індексом" -#: sql_help.c:5058 +#: sql_help.c:5107 msgid "define or change the comment of an object" msgstr "задати або змінити коментар об'єкта" -#: sql_help.c:5064 sql_help.c:5622 +#: sql_help.c:5113 sql_help.c:5671 msgid "commit the current transaction" msgstr "затвердити поточну транзакцію" -#: sql_help.c:5070 +#: sql_help.c:5119 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "затвердити транзакцію, раніше підготовлену до двохфазного затвердження" -#: sql_help.c:5076 +#: sql_help.c:5125 msgid "copy data between a file and a table" msgstr "копіювати дані між файлом та таблицею" -#: sql_help.c:5082 +#: sql_help.c:5131 msgid "define a new access method" msgstr "визначити новий метод доступу" -#: sql_help.c:5088 +#: sql_help.c:5137 msgid "define a new aggregate function" msgstr "визначити нову агрегатну функцію" -#: sql_help.c:5094 +#: sql_help.c:5143 msgid "define a new cast" msgstr "визначити приведення типів" -#: sql_help.c:5100 +#: sql_help.c:5149 msgid "define a new collation" msgstr "визначити нове правило сортування" -#: sql_help.c:5106 +#: sql_help.c:5155 msgid "define a new encoding conversion" msgstr "визначити нове перетворення кодування" -#: sql_help.c:5112 +#: sql_help.c:5161 msgid "create a new database" msgstr "створити нову базу даних" -#: sql_help.c:5118 +#: sql_help.c:5167 msgid "define a new domain" msgstr "визначити новий домен" -#: sql_help.c:5124 +#: sql_help.c:5173 msgid "define a new event trigger" msgstr "визначити новий тригер події" -#: sql_help.c:5130 +#: sql_help.c:5179 msgid "install an extension" msgstr "встановити розширення" -#: sql_help.c:5136 +#: sql_help.c:5185 msgid "define a new foreign-data wrapper" msgstr "визначити нове джерело сторонніх даних" -#: sql_help.c:5142 +#: sql_help.c:5191 msgid "define a new foreign table" msgstr "визначити нову сторонню таблицю" -#: sql_help.c:5148 +#: sql_help.c:5197 msgid "define a new function" msgstr "визначити нову функцію" -#: sql_help.c:5154 sql_help.c:5214 sql_help.c:5316 +#: sql_help.c:5203 sql_help.c:5263 sql_help.c:5365 msgid "define a new database role" msgstr "визначити нову роль бази даних" -#: sql_help.c:5160 +#: sql_help.c:5209 msgid "define a new index" msgstr "визначити новий індекс" -#: sql_help.c:5166 +#: sql_help.c:5215 msgid "define a new procedural language" msgstr "визначити нову процедурну мову" -#: sql_help.c:5172 +#: sql_help.c:5221 msgid "define a new materialized view" msgstr "визначити нове матеріалізоване подання" -#: sql_help.c:5178 +#: sql_help.c:5227 msgid "define a new operator" msgstr "визначити новий оператор" -#: sql_help.c:5184 +#: sql_help.c:5233 msgid "define a new operator class" msgstr "визначити новий клас оператора" -#: sql_help.c:5190 +#: sql_help.c:5239 msgid "define a new operator family" msgstr "визначити нове сімейство операторів" -#: sql_help.c:5196 +#: sql_help.c:5245 msgid "define a new row level security policy for a table" msgstr "визначити нову політику безпеки на рівні рядків для таблиці" -#: sql_help.c:5202 +#: sql_help.c:5251 msgid "define a new procedure" msgstr "визначити нову процедуру" -#: sql_help.c:5208 +#: sql_help.c:5257 msgid "define a new publication" msgstr "визначити нову публікацію" -#: sql_help.c:5220 +#: sql_help.c:5269 msgid "define a new rewrite rule" msgstr "визначити нове правило перезапису" -#: sql_help.c:5226 +#: sql_help.c:5275 msgid "define a new schema" msgstr "визначити нову схему" -#: sql_help.c:5232 +#: sql_help.c:5281 msgid "define a new sequence generator" msgstr "визначити новий генератор послідовностей" -#: sql_help.c:5238 +#: sql_help.c:5287 msgid "define a new foreign server" msgstr "визначити новий сторонній сервер" -#: sql_help.c:5244 +#: sql_help.c:5293 msgid "define extended statistics" msgstr "визначити розширену статистику" -#: sql_help.c:5250 +#: sql_help.c:5299 msgid "define a new subscription" msgstr "визначити нову підписку" -#: sql_help.c:5256 +#: sql_help.c:5305 msgid "define a new table" msgstr "визначити нову таблицю" -#: sql_help.c:5262 sql_help.c:5778 +#: sql_help.c:5311 sql_help.c:5827 msgid "define a new table from the results of a query" msgstr "визначити нову таблицю з результатів запиту" -#: sql_help.c:5268 +#: sql_help.c:5317 msgid "define a new tablespace" msgstr "визначити новий табличний простір" -#: sql_help.c:5274 +#: sql_help.c:5323 msgid "define a new text search configuration" msgstr "визначити нову конфігурацію текстового пошуку" -#: sql_help.c:5280 +#: sql_help.c:5329 msgid "define a new text search dictionary" msgstr "визначити новий словник текстового пошуку" -#: sql_help.c:5286 +#: sql_help.c:5335 msgid "define a new text search parser" msgstr "визначити новий аналізатор текстового пошуку" -#: sql_help.c:5292 +#: sql_help.c:5341 msgid "define a new text search template" msgstr "визначити новий шаблон текстового пошуку" -#: sql_help.c:5298 +#: sql_help.c:5347 msgid "define a new transform" msgstr "визначити нове перетворення" -#: sql_help.c:5304 +#: sql_help.c:5353 msgid "define a new trigger" msgstr "визначити новий тригер" -#: sql_help.c:5310 +#: sql_help.c:5359 msgid "define a new data type" msgstr "визначити новий тип даних" -#: sql_help.c:5322 +#: sql_help.c:5371 msgid "define a new mapping of a user to a foreign server" msgstr "визначити нове зіставлення користувача для стороннього сервера" -#: sql_help.c:5328 +#: sql_help.c:5377 msgid "define a new view" msgstr "визначити нове подання" -#: sql_help.c:5334 +#: sql_help.c:5383 msgid "deallocate a prepared statement" msgstr "звільнити підготовлену команду" -#: sql_help.c:5340 +#: sql_help.c:5389 msgid "define a cursor" msgstr "визначити курсор" -#: sql_help.c:5346 +#: sql_help.c:5395 msgid "delete rows of a table" msgstr "видалити рядки таблиці" -#: sql_help.c:5352 +#: sql_help.c:5401 msgid "discard session state" msgstr "очистити стан сесії" -#: sql_help.c:5358 +#: sql_help.c:5407 msgid "execute an anonymous code block" msgstr "виконати анонімний блок коду" -#: sql_help.c:5364 +#: sql_help.c:5413 msgid "remove an access method" msgstr "видалити метод доступу" -#: sql_help.c:5370 +#: sql_help.c:5419 msgid "remove an aggregate function" msgstr "видалити агрегатну функцію" -#: sql_help.c:5376 +#: sql_help.c:5425 msgid "remove a cast" msgstr "видалити приведення типів" -#: sql_help.c:5382 +#: sql_help.c:5431 msgid "remove a collation" msgstr "видалити правило сортування" -#: sql_help.c:5388 +#: sql_help.c:5437 msgid "remove a conversion" msgstr "видалити перетворення" -#: sql_help.c:5394 +#: sql_help.c:5443 msgid "remove a database" msgstr "видалити базу даних" -#: sql_help.c:5400 +#: sql_help.c:5449 msgid "remove a domain" msgstr "видалити домен" -#: sql_help.c:5406 +#: sql_help.c:5455 msgid "remove an event trigger" msgstr "видалити тригер події" -#: sql_help.c:5412 +#: sql_help.c:5461 msgid "remove an extension" msgstr "видалити розширення" -#: sql_help.c:5418 +#: sql_help.c:5467 msgid "remove a foreign-data wrapper" msgstr "видалити джерело сторонніх даних" -#: sql_help.c:5424 +#: sql_help.c:5473 msgid "remove a foreign table" msgstr "видалити сторонню таблицю" -#: sql_help.c:5430 +#: sql_help.c:5479 msgid "remove a function" msgstr "видалити функцію" -#: sql_help.c:5436 sql_help.c:5502 sql_help.c:5604 +#: sql_help.c:5485 sql_help.c:5551 sql_help.c:5653 msgid "remove a database role" msgstr "видалити роль бази даних" -#: sql_help.c:5442 +#: sql_help.c:5491 msgid "remove an index" msgstr "видалити індекс" -#: sql_help.c:5448 +#: sql_help.c:5497 msgid "remove a procedural language" msgstr "видалити процедурну мову" -#: sql_help.c:5454 +#: sql_help.c:5503 msgid "remove a materialized view" msgstr "видалити матеріалізоване подання" -#: sql_help.c:5460 +#: sql_help.c:5509 msgid "remove an operator" msgstr "видалити оператор" -#: sql_help.c:5466 +#: sql_help.c:5515 msgid "remove an operator class" msgstr "видалити клас операторів" -#: sql_help.c:5472 +#: sql_help.c:5521 msgid "remove an operator family" msgstr "видалити сімейство операторів" -#: sql_help.c:5478 +#: sql_help.c:5527 msgid "remove database objects owned by a database role" msgstr "видалити об'єкти бази даних, що належать ролі" -#: sql_help.c:5484 +#: sql_help.c:5533 msgid "remove a row level security policy from a table" msgstr "видалити політику безпеки на рівні рядків з таблиці" -#: sql_help.c:5490 +#: sql_help.c:5539 msgid "remove a procedure" msgstr "видалити процедуру" -#: sql_help.c:5496 +#: sql_help.c:5545 msgid "remove a publication" msgstr "видалити публікацію" -#: sql_help.c:5508 +#: sql_help.c:5557 msgid "remove a routine" msgstr "видалити підпрограму" -#: sql_help.c:5514 +#: sql_help.c:5563 msgid "remove a rewrite rule" msgstr "видалити правило перезапису" -#: sql_help.c:5520 +#: sql_help.c:5569 msgid "remove a schema" msgstr "видалити схему" -#: sql_help.c:5526 +#: sql_help.c:5575 msgid "remove a sequence" msgstr "видалити послідовність" -#: sql_help.c:5532 +#: sql_help.c:5581 msgid "remove a foreign server descriptor" msgstr "видалити опис стороннього серверу" -#: sql_help.c:5538 +#: sql_help.c:5587 msgid "remove extended statistics" msgstr "видалити розширену статистику" -#: sql_help.c:5544 +#: sql_help.c:5593 msgid "remove a subscription" msgstr "видалити підписку" -#: sql_help.c:5550 +#: sql_help.c:5599 msgid "remove a table" msgstr "видалити таблицю" -#: sql_help.c:5556 +#: sql_help.c:5605 msgid "remove a tablespace" msgstr "видалити табличний простір" -#: sql_help.c:5562 +#: sql_help.c:5611 msgid "remove a text search configuration" msgstr "видалити конфігурацію тектового пошуку" -#: sql_help.c:5568 +#: sql_help.c:5617 msgid "remove a text search dictionary" msgstr "видалити словник тектового пошуку" -#: sql_help.c:5574 +#: sql_help.c:5623 msgid "remove a text search parser" msgstr "видалити парсер тектового пошуку" -#: sql_help.c:5580 +#: sql_help.c:5629 msgid "remove a text search template" msgstr "видалити шаблон тектового пошуку" -#: sql_help.c:5586 +#: sql_help.c:5635 msgid "remove a transform" msgstr "видалити перетворення" -#: sql_help.c:5592 +#: sql_help.c:5641 msgid "remove a trigger" msgstr "видалити тригер" -#: sql_help.c:5598 +#: sql_help.c:5647 msgid "remove a data type" msgstr "видалити тип даних" -#: sql_help.c:5610 +#: sql_help.c:5659 msgid "remove a user mapping for a foreign server" msgstr "видалити зіставлення користувача для стороннього серверу" -#: sql_help.c:5616 +#: sql_help.c:5665 msgid "remove a view" msgstr "видалити подання" -#: sql_help.c:5628 +#: sql_help.c:5677 msgid "execute a prepared statement" msgstr "виконати підготовлену команду" -#: sql_help.c:5634 +#: sql_help.c:5683 msgid "show the execution plan of a statement" msgstr "показати план виконання команди" -#: sql_help.c:5640 +#: sql_help.c:5689 msgid "retrieve rows from a query using a cursor" msgstr "отримати рядки запиту з курсору" -#: sql_help.c:5646 +#: sql_help.c:5695 msgid "define access privileges" msgstr "визначити права доступу" -#: sql_help.c:5652 +#: sql_help.c:5701 msgid "import table definitions from a foreign server" msgstr "імпортувати визначення таблиць зі стороннього серверу" -#: sql_help.c:5658 +#: sql_help.c:5707 msgid "create new rows in a table" msgstr "створити нові рядки в таблиці" -#: sql_help.c:5664 +#: sql_help.c:5713 msgid "listen for a notification" msgstr "очікувати на повідомлення" -#: sql_help.c:5670 +#: sql_help.c:5719 msgid "load a shared library file" msgstr "завантажити файл спільної бібліотеки" -#: sql_help.c:5676 +#: sql_help.c:5725 msgid "lock a table" msgstr "заблокувати таблицю" -#: sql_help.c:5682 +#: sql_help.c:5731 msgid "position a cursor" msgstr "розташувати курсор" -#: sql_help.c:5688 +#: sql_help.c:5737 msgid "generate a notification" msgstr "згенерувати повідомлення" -#: sql_help.c:5694 +#: sql_help.c:5743 msgid "prepare a statement for execution" msgstr "підготувати команду для виконання" -#: sql_help.c:5700 +#: sql_help.c:5749 msgid "prepare the current transaction for two-phase commit" msgstr "підготувати поточну транзакцію для двохфазного затвердження" -#: sql_help.c:5706 +#: sql_help.c:5755 msgid "change the ownership of database objects owned by a database role" msgstr "змінити власника об'єктів БД, що належать заданій ролі" -#: sql_help.c:5712 +#: sql_help.c:5761 msgid "replace the contents of a materialized view" msgstr "замінити вміст матеріалізованого подання" -#: sql_help.c:5718 +#: sql_help.c:5767 msgid "rebuild indexes" msgstr "перебудувати індекси" -#: sql_help.c:5724 +#: sql_help.c:5773 msgid "destroy a previously defined savepoint" msgstr "видалити раніше визначену точку збереження" -#: sql_help.c:5730 +#: sql_help.c:5779 msgid "restore the value of a run-time parameter to the default value" msgstr "відновити початкове значення параметру виконання" -#: sql_help.c:5736 +#: sql_help.c:5785 msgid "remove access privileges" msgstr "видалити права доступу" -#: sql_help.c:5748 +#: sql_help.c:5797 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "скасувати транзакцію, раніше підготовлену до двохфазного затвердження" -#: sql_help.c:5754 +#: sql_help.c:5803 msgid "roll back to a savepoint" msgstr "відкотитися до точки збереження" -#: sql_help.c:5760 +#: sql_help.c:5809 msgid "define a new savepoint within the current transaction" msgstr "визначити нову точку збереження в рамках поточної транзакції" -#: sql_help.c:5766 +#: sql_help.c:5815 msgid "define or change a security label applied to an object" msgstr "визначити або змінити мітку безпеки, застосовану до об'єкта" -#: sql_help.c:5772 sql_help.c:5826 sql_help.c:5862 +#: sql_help.c:5821 sql_help.c:5875 sql_help.c:5911 msgid "retrieve rows from a table or view" msgstr "отримати рядки з таблиці або подання" -#: sql_help.c:5784 +#: sql_help.c:5833 msgid "change a run-time parameter" msgstr "змінити параметр виконання" -#: sql_help.c:5790 +#: sql_help.c:5839 msgid "set constraint check timing for the current transaction" msgstr "встановити час перевірки обмеження для поточної транзакції" -#: sql_help.c:5796 +#: sql_help.c:5845 msgid "set the current user identifier of the current session" msgstr "встановити ідентифікатор поточного користувача в поточній сесії" -#: sql_help.c:5802 +#: sql_help.c:5851 msgid "set the session user identifier and the current user identifier of the current session" msgstr "встановити ідентифікатор користувача сесії й ідентифікатор поточного користувача в поточній сесії" -#: sql_help.c:5808 +#: sql_help.c:5857 msgid "set the characteristics of the current transaction" msgstr "встановити характеристики поточної транзакції" -#: sql_help.c:5814 +#: sql_help.c:5863 msgid "show the value of a run-time parameter" msgstr "показати значення параметра виконання" -#: sql_help.c:5832 +#: sql_help.c:5881 msgid "empty a table or set of tables" msgstr "очистити таблицю або декілька таблиць" -#: sql_help.c:5838 +#: sql_help.c:5887 msgid "stop listening for a notification" msgstr "припинити очікування повідомлень" -#: sql_help.c:5844 +#: sql_help.c:5893 msgid "update rows of a table" msgstr "змінити рядки таблиці" -#: sql_help.c:5850 +#: sql_help.c:5899 msgid "garbage-collect and optionally analyze a database" msgstr "виконати збір сміття і проаналізувати базу даних" -#: sql_help.c:5856 +#: sql_help.c:5905 msgid "compute a set of rows" msgstr "отримати набір рядків" -#: startup.c:216 +#: startup.c:212 #, c-format msgid "-1 can only be used in non-interactive mode" msgstr "-1 можна використовувати лише в неінтерактивному режимі" -#: startup.c:303 +#: startup.c:299 #, c-format msgid "could not connect to server: %s" msgstr "не вдалося підключитися до сервера: %s" -#: startup.c:331 +#: startup.c:327 #, c-format msgid "could not open log file \"%s\": %m" msgstr "не вдалося відкрити файл протоколу \"%s\": %m" -#: startup.c:443 +#: startup.c:439 #, c-format msgid "Type \"help\" for help.\n\n" msgstr "Введіть \"help\", щоб отримати допомогу.\n\n" -#: startup.c:593 +#: startup.c:589 #, c-format msgid "could not set printing parameter \"%s\"" msgstr "не вдалося встановити параметр друку \"%s\"" -#: startup.c:701 +#: startup.c:697 #, c-format msgid "Try \"%s --help\" for more information.\n" -msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" -#: startup.c:718 +#: startup.c:714 #, c-format msgid "extra command-line argument \"%s\" ignored" msgstr "зайвий аргумент \"%s\" проігнорований" -#: startup.c:767 +#: startup.c:763 #, c-format msgid "could not find own program executable" msgstr "не вдалося знайти ехе файл власної програми" -#: tab-complete.c:4408 +#: tab-complete.c:4640 #, c-format msgid "tab completion query failed: %s\n" "Query was:\n" @@ -5969,22 +6133,22 @@ msgstr "помилка запиту Tab-доповнення: %s\n" "Запит:\n" "%s" -#: variables.c:141 +#: variables.c:139 #, c-format msgid "unrecognized value \"%s\" for \"%s\": Boolean expected" msgstr "нерозпізнане значення \"%s\" для \"%s\": очікувалося логічне значення" -#: variables.c:178 +#: variables.c:176 #, c-format msgid "invalid value \"%s\" for \"%s\": integer expected" msgstr "неправильне значення \"%s\" для \"%s\": очікувалося ціле число" -#: variables.c:226 +#: variables.c:224 #, c-format msgid "invalid variable name: \"%s\"" msgstr "неправильне ім'я змінної: \"%s\"" -#: variables.c:395 +#: variables.c:393 #, c-format msgid "unrecognized value \"%s\" for \"%s\"\n" "Available values are: %s." diff --git a/src/bin/scripts/nls.mk b/src/bin/scripts/nls.mk index a224a3b2c4866..3f9636cf8f2d4 100644 --- a/src/bin/scripts/nls.mk +++ b/src/bin/scripts/nls.mk @@ -1,6 +1,6 @@ # src/bin/scripts/nls.mk CATALOG_NAME = pgscripts -AVAIL_LANGUAGES = cs de es fr he it ja ko pl pt_BR ru sv tr zh_CN +AVAIL_LANGUAGES = cs de es fr he it ja ko pl pt_BR ru sv tr uk zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \ createdb.c createuser.c \ dropdb.c dropuser.c \ diff --git a/src/bin/scripts/po/cs.po b/src/bin/scripts/po/cs.po index c651d2708e1ae..b59aa2903a1bf 100644 --- a/src/bin/scripts/po/cs.po +++ b/src/bin/scripts/po/cs.po @@ -9,42 +9,39 @@ msgid "" msgstr "" "Project-Id-Version: pgscripts-cs (PostgreSQL 9.3)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:14+0000\n" -"PO-Revision-Date: 2019-09-27 20:57+0200\n" +"POT-Creation-Date: 2020-10-31 16:16+0000\n" +"PO-Revision-Date: 2020-10-31 21:04+0100\n" "Last-Translator: Tomas Vondra \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format -#| msgid "fatal\n" msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format -#| msgid "SQL error: %s\n" msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format -#| msgid "warning" msgid "warning: " msgstr "warning: " #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "paměť vyčerpána\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "nelze duplikovat nulový ukazatel (interní chyba)\n" @@ -63,7 +60,20 @@ msgstr "uživatel neexistuje" msgid "user name lookup failure: error code %lu" msgstr "chyba vyhledávání jména uživatele: chybový kód %lu" -#: ../../fe_utils/print.c:353 +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Požadavek na zrušení byl poslán\n" + +#: ../../fe_utils/cancel.c:165 +msgid "Could not send cancel request: " +msgstr "Nelze poslat požadavek na zrušení: " + +#: ../../fe_utils/cancel.c:210 +#, c-format +msgid "Could not send cancel request: %s" +msgstr "Nelze poslat požadavek na zrušení: %s" + +#: ../../fe_utils/print.c:350 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" @@ -71,66 +81,66 @@ msgstr[0] "(%lu řádka)" msgstr[1] "(%lu řádky)" msgstr[2] "(%lu řádek)" -#: ../../fe_utils/print.c:3058 +#: ../../fe_utils/print.c:3055 #, c-format msgid "Interrupted\n" msgstr "Přerušeno\n" -#: ../../fe_utils/print.c:3122 +#: ../../fe_utils/print.c:3119 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "Nelze přidat hlavičku k obsahu tabulky: překročen počet sloupců %d.\n" -#: ../../fe_utils/print.c:3162 +#: ../../fe_utils/print.c:3159 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "Nelze přidat buňku do obsahu tabulky: překročen celkový počet buněk %d.\n" -#: ../../fe_utils/print.c:3417 +#: ../../fe_utils/print.c:3414 #, c-format msgid "invalid output format (internal error): %d" msgstr "specifikován neplatný formát výstupu (interní chyba): %d" -#: clusterdb.c:113 clusterdb.c:132 createdb.c:121 createdb.c:140 -#: createuser.c:168 createuser.c:183 dropdb.c:96 dropdb.c:105 dropdb.c:113 -#: dropuser.c:92 dropuser.c:107 dropuser.c:122 pg_isready.c:95 pg_isready.c:109 -#: reindexdb.c:139 reindexdb.c:158 vacuumdb.c:244 vacuumdb.c:263 +#: clusterdb.c:110 clusterdb.c:129 createdb.c:122 createdb.c:141 +#: createuser.c:172 createuser.c:187 dropdb.c:102 dropdb.c:111 dropdb.c:119 +#: dropuser.c:93 dropuser.c:108 dropuser.c:123 pg_isready.c:95 pg_isready.c:109 +#: reindexdb.c:166 reindexdb.c:185 vacuumdb.c:225 vacuumdb.c:244 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" -#: clusterdb.c:130 createdb.c:138 createuser.c:181 dropdb.c:111 dropuser.c:105 -#: pg_isready.c:107 reindexdb.c:156 vacuumdb.c:261 +#: clusterdb.c:127 createdb.c:139 createuser.c:185 dropdb.c:117 dropuser.c:106 +#: pg_isready.c:107 reindexdb.c:183 vacuumdb.c:242 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "příliš mnoho parametrů příkazové řádky (první je \"%s\")" -#: clusterdb.c:142 +#: clusterdb.c:146 #, c-format msgid "cannot cluster all databases and a specific one at the same time" msgstr "nelze provést cluster ve všech databázích a zároveň specifikovat jen jednu" -#: clusterdb.c:148 +#: clusterdb.c:152 #, c-format msgid "cannot cluster specific table(s) in all databases" msgstr "nelze provést cluster specifické tabulky ve všech databázích" -#: clusterdb.c:216 +#: clusterdb.c:218 #, c-format msgid "clustering of table \"%s\" in database \"%s\" failed: %s" msgstr "clusterování tabulky \"%s\" v databázi \"%s\" selhalo: %s" -#: clusterdb.c:219 +#: clusterdb.c:221 #, c-format msgid "clustering of database \"%s\" failed: %s" msgstr "clusterování databáze \"%s\" selhalo: %s" -#: clusterdb.c:252 +#: clusterdb.c:249 #, c-format msgid "%s: clustering database \"%s\"\n" msgstr "%s: provádí se cluster databáze \"%s\"\n" -#: clusterdb.c:273 +#: clusterdb.c:265 #, c-format msgid "" "%s clusters all previously clustered tables in a database.\n" @@ -139,19 +149,19 @@ msgstr "" "%s vytváří cluster všech již dříve clusterovaných tabulek v databázi.\n" "\n" -#: clusterdb.c:274 createdb.c:250 createuser.c:344 dropdb.c:157 dropuser.c:163 -#: pg_isready.c:224 reindexdb.c:425 vacuumdb.c:1226 +#: clusterdb.c:266 createdb.c:266 createuser.c:354 dropdb.c:170 dropuser.c:170 +#: pg_isready.c:224 reindexdb.c:750 vacuumdb.c:911 #, c-format msgid "Usage:\n" msgstr "Použití:\n" -#: clusterdb.c:275 reindexdb.c:426 vacuumdb.c:1227 +#: clusterdb.c:267 reindexdb.c:751 vacuumdb.c:912 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [PŘEPÍNAČ]... [DATABÁZE]\n" -#: clusterdb.c:276 createdb.c:252 createuser.c:346 dropdb.c:159 dropuser.c:165 -#: pg_isready.c:227 reindexdb.c:427 vacuumdb.c:1228 +#: clusterdb.c:268 createdb.c:268 createuser.c:356 dropdb.c:172 dropuser.c:172 +#: pg_isready.c:227 reindexdb.c:752 vacuumdb.c:913 #, c-format msgid "" "\n" @@ -160,48 +170,48 @@ msgstr "" "\n" "Přepínače:\n" -#: clusterdb.c:277 +#: clusterdb.c:269 #, c-format msgid " -a, --all cluster all databases\n" msgstr " -a, --all clusterovat všechny databáze\n" -#: clusterdb.c:278 +#: clusterdb.c:270 #, c-format msgid " -d, --dbname=DBNAME database to cluster\n" msgstr " -d, --dbname=DATABÁZE databáze pro cluster\n" -#: clusterdb.c:279 createuser.c:350 dropdb.c:160 dropuser.c:166 reindexdb.c:431 +#: clusterdb.c:271 createuser.c:360 dropdb.c:173 dropuser.c:173 reindexdb.c:756 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo ukazovat příkazy posílané na server\n" -#: clusterdb.c:280 reindexdb.c:433 +#: clusterdb.c:272 reindexdb.c:759 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet nevypisovat žádné zprávy\n" -#: clusterdb.c:281 +#: clusterdb.c:273 #, c-format msgid " -t, --table=TABLE cluster specific table(s) only\n" msgstr " -t, --table=TABULKA provést cluster pro danou tabulku\n" -#: clusterdb.c:282 reindexdb.c:437 +#: clusterdb.c:274 reindexdb.c:763 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose vypisovat více informací\n" -#: clusterdb.c:283 createuser.c:362 dropdb.c:162 dropuser.c:169 reindexdb.c:438 +#: clusterdb.c:275 createuser.c:372 dropdb.c:176 dropuser.c:176 reindexdb.c:764 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ukáže informaci o verzi a skončí\n" -#: clusterdb.c:284 createuser.c:367 dropdb.c:164 dropuser.c:171 reindexdb.c:439 +#: clusterdb.c:276 createuser.c:377 dropdb.c:178 dropuser.c:178 reindexdb.c:765 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ukáže tuto nápovědu a skončí\n" -#: clusterdb.c:285 createdb.c:263 createuser.c:368 dropdb.c:165 dropuser.c:172 -#: pg_isready.c:233 reindexdb.c:440 vacuumdb.c:1248 +#: clusterdb.c:277 createdb.c:279 createuser.c:378 dropdb.c:179 dropuser.c:179 +#: pg_isready.c:233 reindexdb.c:766 vacuumdb.c:934 #, c-format msgid "" "\n" @@ -210,41 +220,41 @@ msgstr "" "\n" "Parametry spojení:\n" -#: clusterdb.c:286 createuser.c:369 dropdb.c:166 dropuser.c:173 reindexdb.c:441 -#: vacuumdb.c:1249 +#: clusterdb.c:278 createuser.c:379 dropdb.c:180 dropuser.c:180 reindexdb.c:767 +#: vacuumdb.c:935 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME jméno databázového serveru nebo adresáře se soketem\n" -#: clusterdb.c:287 createuser.c:370 dropdb.c:167 dropuser.c:174 reindexdb.c:442 -#: vacuumdb.c:1250 +#: clusterdb.c:279 createuser.c:380 dropdb.c:181 dropuser.c:181 reindexdb.c:768 +#: vacuumdb.c:936 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT port databázového serveru\n" -#: clusterdb.c:288 dropdb.c:168 reindexdb.c:443 vacuumdb.c:1251 +#: clusterdb.c:280 dropdb.c:182 reindexdb.c:769 vacuumdb.c:937 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=UŽIVATEL jméno uživatele pro spojení se serverem\n" -#: clusterdb.c:289 createuser.c:372 dropdb.c:169 dropuser.c:176 reindexdb.c:444 -#: vacuumdb.c:1252 +#: clusterdb.c:281 createuser.c:382 dropdb.c:183 dropuser.c:183 reindexdb.c:770 +#: vacuumdb.c:938 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password neptá se na heslo\n" -#: clusterdb.c:290 createuser.c:373 dropdb.c:170 dropuser.c:177 reindexdb.c:445 -#: vacuumdb.c:1253 +#: clusterdb.c:282 createuser.c:383 dropdb.c:184 dropuser.c:184 reindexdb.c:771 +#: vacuumdb.c:939 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password vynutí dotaz na heslo\n" -#: clusterdb.c:291 dropdb.c:171 reindexdb.c:446 vacuumdb.c:1254 +#: clusterdb.c:283 dropdb.c:185 reindexdb.c:772 vacuumdb.c:940 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=DBNAME alternativní maintenance databáze\n" -#: clusterdb.c:292 +#: clusterdb.c:284 #, c-format msgid "" "\n" @@ -253,41 +263,52 @@ msgstr "" "\n" "Pro detaily čtěte popis SQL příkazu CLUSTER.\n" -#: clusterdb.c:293 createdb.c:271 createuser.c:374 dropdb.c:172 dropuser.c:178 -#: pg_isready.c:238 reindexdb.c:448 vacuumdb.c:1256 +#: clusterdb.c:285 createdb.c:287 createuser.c:384 dropdb.c:186 dropuser.c:185 +#: pg_isready.c:238 reindexdb.c:774 vacuumdb.c:942 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Chyby hlaste na adresu .\n" +"Chyby hlašte na <%s>.\n" + +#: clusterdb.c:286 createdb.c:288 createuser.c:385 dropdb.c:187 dropuser.c:186 +#: pg_isready.c:239 reindexdb.c:775 vacuumdb.c:943 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" -#: common.c:84 common.c:130 +#: common.c:80 common.c:138 msgid "Password: " msgstr "Heslo: " -#: common.c:117 +#: common.c:125 #, c-format msgid "could not connect to database %s: out of memory" msgstr "nelze navázat spojení s databází %s: nedotatek paměti" -#: common.c:144 +#: common.c:152 #, c-format msgid "could not connect to database %s: %s" msgstr "nelze navázat spojení s databází %s: %s" -#: common.c:196 common.c:222 +#: common.c:231 common.c:256 #, c-format msgid "query failed: %s" msgstr "dotaz selhal: %s" -#: common.c:197 common.c:223 +#: common.c:232 common.c:257 #, c-format msgid "query was: %s" msgstr "dotaz byl: %s" -#: common.c:339 +#: common.c:329 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "zpracování databáze \"%s\" selhalo: %s" + +#: common.c:423 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" @@ -297,64 +318,54 @@ msgstr[2] "dotaz vrátil %d řádek namísto jedné: %s" # translator: Make sure the (y/n) prompts match the translation of this. #. translator: abbreviation for "yes" -#: common.c:364 +#: common.c:447 msgid "y" msgstr "a" # translator: Make sure the (y/n) prompts match the translation of this. #. translator: abbreviation for "no" -#: common.c:366 +#: common.c:449 msgid "n" msgstr "n" #. translator: This is a question followed by the translated options for #. "yes" and "no". -#: common.c:376 +#: common.c:459 #, c-format msgid "%s (%s/%s) " msgstr "%s (%s/%s) " -#: common.c:390 +#: common.c:473 #, c-format msgid "Please answer \"%s\" or \"%s\".\n" msgstr "Prosím odpovězte \"%s\" nebo \"%s\".\n" -#: common.c:469 common.c:506 -#, c-format -msgid "Cancel request sent\n" -msgstr "Požadavek na zrušení byl poslán\n" - -#: common.c:472 common.c:510 -#, c-format -msgid "Could not send cancel request: %s" -msgstr "Nelze poslat požadavek na zrušení: %s" - -#: createdb.c:148 +#: createdb.c:149 #, c-format msgid "only one of --locale and --lc-ctype can be specified" msgstr "--locale a --lc-ctype nelze zvolit současně" -#: createdb.c:153 +#: createdb.c:154 #, c-format msgid "only one of --locale and --lc-collate can be specified" msgstr "--locale a --lc-collate nelze zvolit současně" -#: createdb.c:164 +#: createdb.c:165 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\" není platné jméno kódování znaků" -#: createdb.c:212 +#: createdb.c:228 #, c-format msgid "database creation failed: %s" msgstr "vytvoření databáze selhalo: %s" -#: createdb.c:231 +#: createdb.c:247 #, c-format msgid "comment creation failed (database was created): %s" msgstr "tvorba komentáře selhala (databáze byla vytvořena): %s" -#: createdb.c:249 +#: createdb.c:265 #, c-format msgid "" "%s creates a PostgreSQL database.\n" @@ -363,92 +374,92 @@ msgstr "" "%s vytvoří PostgreSQL databázi.\n" "\n" -#: createdb.c:251 +#: createdb.c:267 #, c-format msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n" msgstr " %s [PŘEPÍNAČ]... [DATABÁZE] [POPIS]\n" -#: createdb.c:253 +#: createdb.c:269 #, c-format msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n" msgstr " -D, --tablespace=PROSTOR výchozí prostor tabulek pro databázi\n" -#: createdb.c:254 +#: createdb.c:270 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo ukázat příkazy posílané na server\n" -#: createdb.c:255 +#: createdb.c:271 #, c-format msgid " -E, --encoding=ENCODING encoding for the database\n" msgstr " -E, --encoding=KÓDOVÁNÍ kódování znaků databáze\n" -#: createdb.c:256 +#: createdb.c:272 #, c-format msgid " -l, --locale=LOCALE locale settings for the database\n" msgstr " -l, --locale=LOCALE nastavení locale pro databázi\n" -#: createdb.c:257 +#: createdb.c:273 #, c-format msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n" msgstr " --lc-collate=LOCALE nastavení LC_COLLATE pro databázi\n" -#: createdb.c:258 +#: createdb.c:274 #, c-format msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n" msgstr " --lc-ctype=LOCALE nastavení LC_CTYPE pro databázi\n" -#: createdb.c:259 +#: createdb.c:275 #, c-format msgid " -O, --owner=OWNER database user to own the new database\n" msgstr " -O, --owner=VLASTNÍK uživatel, který má být vlastníkem nové databáze\n" -#: createdb.c:260 +#: createdb.c:276 #, c-format msgid " -T, --template=TEMPLATE template database to copy\n" msgstr " -T, --template=ŠABLONA šablona databáze ke kopírování\n" -#: createdb.c:261 +#: createdb.c:277 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ukáže informaci o verzi a skončí\n" -#: createdb.c:262 +#: createdb.c:278 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ukáže tuto nápovědu a skončí\n" -#: createdb.c:264 +#: createdb.c:280 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME jméno databázového serveru nebo adresáře se soketem\n" -#: createdb.c:265 +#: createdb.c:281 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT port databázového serveru\n" -#: createdb.c:266 +#: createdb.c:282 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=UŽIVATEL jméno uživatele pro spojení se serverem\n" -#: createdb.c:267 +#: createdb.c:283 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password neptá se na heslo\n" -#: createdb.c:268 +#: createdb.c:284 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password vynutí dotaz na heslo\n" -#: createdb.c:269 +#: createdb.c:285 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=DBNAME alternativní maintenance databáze\n" -#: createdb.c:270 +#: createdb.c:286 #, c-format msgid "" "\n" @@ -457,46 +468,51 @@ msgstr "" "\n" "Implicitně je vytvořena databáze stejného jména jako je jméno aktuálního uživatele.\n" -#: createuser.c:191 +#: createuser.c:151 +#, c-format +msgid "invalid value for --connection-limit: %s" +msgstr "chybná hodnota pro volbu --connection-limit: %s" + +#: createuser.c:195 msgid "Enter name of role to add: " msgstr "Vložte jméno role, kterou chete přidat: " -#: createuser.c:208 +#: createuser.c:212 msgid "Enter password for new role: " msgstr "Vložte heslo nové role: " -#: createuser.c:210 +#: createuser.c:214 msgid "Enter it again: " msgstr "Zadejte znova: " -#: createuser.c:213 +#: createuser.c:217 #, c-format msgid "Passwords didn't match.\n" msgstr "Hesla se neshodují.\n" -#: createuser.c:221 +#: createuser.c:225 msgid "Shall the new role be a superuser?" msgstr "Má být nová role superuživatel?" -#: createuser.c:236 +#: createuser.c:240 msgid "Shall the new role be allowed to create databases?" msgstr "Měla by mít nová role právo vytvářet databáze?" -#: createuser.c:244 +#: createuser.c:248 msgid "Shall the new role be allowed to create more new roles?" msgstr "Měla by mít nová role právo vytvářet další nové role?" -#: createuser.c:274 +#: createuser.c:284 #, c-format msgid "password encryption failed: %s" msgstr "šifrování hesla selhalo: %s" -#: createuser.c:329 +#: createuser.c:339 #, c-format msgid "creation of new role failed: %s" msgstr "tvorba nové role selhala: %s" -#: createuser.c:343 +#: createuser.c:353 #, c-format msgid "" "%s creates a new PostgreSQL role.\n" @@ -505,32 +521,32 @@ msgstr "" "%s vytvoří novou PostgreSQL roli.\n" "\n" -#: createuser.c:345 dropuser.c:164 +#: createuser.c:355 dropuser.c:171 #, c-format msgid " %s [OPTION]... [ROLENAME]\n" msgstr " %s [PŘEPÍNAČ]... [JMÉNO ROLE]\n" -#: createuser.c:347 +#: createuser.c:357 #, c-format msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n" msgstr " -c, --connection-limit=N limit počtu konexí pro role (implicitně: bez limitu)\n" -#: createuser.c:348 +#: createuser.c:358 #, c-format msgid " -d, --createdb role can create new databases\n" msgstr " -d, --createdb role může vytvářet nové databáze\n" -#: createuser.c:349 +#: createuser.c:359 #, c-format msgid " -D, --no-createdb role cannot create databases (default)\n" msgstr " -D, --no-createdb role nemůže vytvářet nové databáze (výchozí)\n" -#: createuser.c:351 +#: createuser.c:361 #, c-format msgid " -g, --role=ROLE new role will be a member of this role\n" msgstr " -g, --role=ROLE nová role bude členem této role\n" -#: createuser.c:352 +#: createuser.c:362 #, c-format msgid "" " -i, --inherit role inherits privileges of roles it is a\n" @@ -539,47 +555,47 @@ msgstr "" " -i, --inherit role dědí práva rolí, kterých je členem\n" " (implicitně)\n" -#: createuser.c:354 +#: createuser.c:364 #, c-format msgid " -I, --no-inherit role does not inherit privileges\n" msgstr " -I, --no-inherit role nedědí práva\n" -#: createuser.c:355 +#: createuser.c:365 #, c-format msgid " -l, --login role can login (default)\n" msgstr " -l, --login role se může přihlásit (implicitně)\n" -#: createuser.c:356 +#: createuser.c:366 #, c-format msgid " -L, --no-login role cannot login\n" msgstr " -L, --no-login role se nemůže přihlásit\n" -#: createuser.c:357 +#: createuser.c:367 #, c-format msgid " -P, --pwprompt assign a password to new role\n" msgstr " -P, --pwprompt nastavit heslo pro novou roli\n" -#: createuser.c:358 +#: createuser.c:368 #, c-format msgid " -r, --createrole role can create new roles\n" msgstr " -r, --createrole role může vytvářet nové role\n" -#: createuser.c:359 +#: createuser.c:369 #, c-format msgid " -R, --no-createrole role cannot create roles (default)\n" msgstr " -R, --no-createrole role nemůže vytvářet nové role (výchozí)\n" -#: createuser.c:360 +#: createuser.c:370 #, c-format msgid " -s, --superuser role will be superuser\n" msgstr " -s, --superuser role bude superuživatel\n" -#: createuser.c:361 +#: createuser.c:371 #, c-format msgid " -S, --no-superuser role will not be superuser (default)\n" msgstr " -S, --no-superuser role nebude superuživatel (výchozí)\n" -#: createuser.c:363 +#: createuser.c:373 #, c-format msgid "" " --interactive prompt for missing role name and attributes rather\n" @@ -588,41 +604,41 @@ msgstr "" " --interactive zeptej se na chybějící jméno role a atributy namísto\n" " použití výchozích hodnot\n" -#: createuser.c:365 +#: createuser.c:375 #, c-format msgid " --replication role can initiate replication\n" msgstr " --replication role může inicializovat replikaci\n" -#: createuser.c:366 +#: createuser.c:376 #, c-format msgid " --no-replication role cannot initiate replication\n" msgstr " --no-replication role nemůže inicializovat replikaci\n" -#: createuser.c:371 +#: createuser.c:381 #, c-format msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n" msgstr " -U, --username=UŽIVATEL jméno uživatele pro spojení (ne pro tvorbu)\n" -#: dropdb.c:104 +#: dropdb.c:110 #, c-format msgid "missing required argument database name" msgstr "chybí vyžadovaný parametr jméno databáze" -#: dropdb.c:119 +#: dropdb.c:125 #, c-format msgid "Database \"%s\" will be permanently removed.\n" msgstr "Databáze \"%s\" bude trvale odstraněna.\n" -#: dropdb.c:120 dropuser.c:130 +#: dropdb.c:126 dropuser.c:131 msgid "Are you sure?" msgstr "Určitě?" -#: dropdb.c:142 +#: dropdb.c:155 #, c-format msgid "database removal failed: %s" msgstr "odstraňování databáze selhalo: %s" -#: dropdb.c:156 +#: dropdb.c:169 #, c-format msgid "" "%s removes a PostgreSQL database.\n" @@ -631,41 +647,46 @@ msgstr "" "%s odstraňuje PostgreSQL databázi.\n" "\n" -#: dropdb.c:158 +#: dropdb.c:171 #, c-format msgid " %s [OPTION]... DBNAME\n" msgstr " %s [PŘEPÍNAČ]... DATABÁZE\n" -#: dropdb.c:161 +#: dropdb.c:174 +#, c-format +msgid " -f, --force try to terminate other connections before dropping\n" +msgstr " -f, --force pokus se přerušit ostatní spojení před smazáním\n" + +#: dropdb.c:175 #, c-format msgid " -i, --interactive prompt before deleting anything\n" msgstr " -i, --interactive zeptej se před smazáním čehokoli\n" -#: dropdb.c:163 +#: dropdb.c:177 #, c-format msgid " --if-exists don't report error if database doesn't exist\n" msgstr " --if-exists nevypisuj chybu pokud databáze neexistuje\n" -#: dropuser.c:115 +#: dropuser.c:116 msgid "Enter name of role to drop: " msgstr "Vložte jméno role pro odstranění: " -#: dropuser.c:121 +#: dropuser.c:122 #, c-format msgid "missing required argument role name" msgstr "chybí povinný parametr jméno role" -#: dropuser.c:129 +#: dropuser.c:130 #, c-format msgid "Role \"%s\" will be permanently removed.\n" msgstr "Role \"%s\" bude trvale odstraněna.\n" -#: dropuser.c:147 +#: dropuser.c:154 #, c-format msgid "removal of role \"%s\" failed: %s" msgstr "odstraňování role \"%s\" selhalo: %s" -#: dropuser.c:162 +#: dropuser.c:169 #, c-format msgid "" "%s removes a PostgreSQL role.\n" @@ -674,7 +695,7 @@ msgstr "" "%s odstraňuje PostgreSQL roli.\n" "\n" -#: dropuser.c:167 +#: dropuser.c:174 #, c-format msgid "" " -i, --interactive prompt before deleting anything, and prompt for\n" @@ -683,12 +704,12 @@ msgstr "" " -i, --interactive před smazáním čehokoliv se zeptá, a také na jméno\n" " role pokud není zadáno\n" -#: dropuser.c:170 +#: dropuser.c:177 #, c-format msgid " --if-exists don't report error if user doesn't exist\n" msgstr " --if-exists nevypisuj chybu pokud uživatel neexistuje\n" -#: dropuser.c:175 +#: dropuser.c:182 #, c-format msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n" msgstr " -U, --username=UŽIVATEL jméno uživatele pro spojení (ne pro odstranění)\n" @@ -782,82 +803,103 @@ msgstr " -t, --timeout=SECS počet vteřin čekání při pokusu o spojen msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=UŽIVATEL jméno uživatele pro připojení\n" -#: reindexdb.c:168 +#: reindexdb.c:152 vacuumdb.c:184 +#, c-format +msgid "number of parallel jobs must be at least 1" +msgstr "počet paralelních jobů musí být alespoň 1" + +#: reindexdb.c:202 #, c-format msgid "cannot reindex all databases and a specific one at the same time" msgstr "nelze reindexovat všechny databáze a současně zvolenou databázi" -#: reindexdb.c:173 +#: reindexdb.c:207 #, c-format msgid "cannot reindex all databases and system catalogs at the same time" msgstr "nelze reindexovat všechny databáze a současně systemový katalog" -#: reindexdb.c:178 +#: reindexdb.c:212 #, c-format msgid "cannot reindex specific schema(s) in all databases" msgstr "nelze reindexovat vybrané schema ve všech databázích" -#: reindexdb.c:183 +#: reindexdb.c:217 #, c-format msgid "cannot reindex specific table(s) in all databases" msgstr "nelze reindexovat vybranou tabulku ve všech databázích" -#: reindexdb.c:188 +#: reindexdb.c:222 #, c-format msgid "cannot reindex specific index(es) in all databases" msgstr "nelze reindexovat vybraný index ve všech databázích" -#: reindexdb.c:199 +#: reindexdb.c:235 #, c-format msgid "cannot reindex specific schema(s) and system catalogs at the same time" msgstr "nelze reindexovat vybraná schemata a současně sytémové katalogy" -#: reindexdb.c:204 +#: reindexdb.c:240 #, c-format msgid "cannot reindex specific table(s) and system catalogs at the same time" msgstr "nelze reindexovat vybranou tabulku a současně sytémové katalogy" -#: reindexdb.c:209 +#: reindexdb.c:245 #, c-format msgid "cannot reindex specific index(es) and system catalogs at the same time" msgstr "nelze reindexovat vybraný index a současně sytémový katalog" -#: reindexdb.c:298 vacuumdb.c:410 vacuumdb.c:418 vacuumdb.c:425 vacuumdb.c:432 +#: reindexdb.c:251 +#, c-format +msgid "cannot use multiple jobs to reindex system catalogs" +msgstr "pro reindexování systémových katalogů nelze použít více jobů" + +#: reindexdb.c:280 +#, c-format +msgid "cannot use multiple jobs to reindex indexes" +msgstr "pro reindexování nelze použít více paralelních jobů" + +#: reindexdb.c:344 vacuumdb.c:413 vacuumdb.c:421 vacuumdb.c:428 vacuumdb.c:435 +#: vacuumdb.c:442 #, c-format msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s" msgstr "volbu \"%s\" nelze použít na serverech starších než PostgreSQL %s" -#: reindexdb.c:326 +#: reindexdb.c:384 #, c-format -msgid "reindexing of table \"%s\" in database \"%s\" failed: %s" -msgstr "reindexace tabulky \"%s\" v databázi \"%s\" selhala: %s" +msgid "cannot reindex system catalogs concurrently, skipping all" +msgstr "katalogy nelze reindexovat v \"concurrent\" módu, přeskakuji." -#: reindexdb.c:329 +#: reindexdb.c:564 +#, c-format +msgid "reindexing of database \"%s\" failed: %s" +msgstr "reindexace databáze \"%s\" selhala: %s" + +#: reindexdb.c:568 #, c-format msgid "reindexing of index \"%s\" in database \"%s\" failed: %s" msgstr "reindexace indexu \"%s\" v databázi \"%s\" selhala: %s" -#: reindexdb.c:332 +#: reindexdb.c:572 #, c-format msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s" msgstr "reindexace schematu \"%s\" v databázi \"%s\" selhala: %s" -#: reindexdb.c:335 +#: reindexdb.c:576 #, c-format -msgid "reindexing of database \"%s\" failed: %s" -msgstr "reindexace databáze \"%s\" selhala: %s" +msgid "reindexing of system catalogs in database \"%s\" failed: %s" +msgstr "reindexování systémových katalogů v databázi \"%s\" selhalo: %s" -#: reindexdb.c:369 +#: reindexdb.c:580 #, c-format -msgid "%s: reindexing database \"%s\"\n" -msgstr "%s: reindexace databáze \"%s\"\n" +msgid "reindexing of table \"%s\" in database \"%s\" failed: %s" +msgstr "reindexace tabulky \"%s\" v databázi \"%s\" selhala: %s" -#: reindexdb.c:412 +#: reindexdb.c:732 #, c-format -msgid "reindexing of system catalogs failed: %s" -msgstr "reindexace systémového katalogu selhala: %s" +msgid "%s: reindexing database \"%s\"\n" +msgstr "%s: reindexace databáze \"%s\"\n" -#: reindexdb.c:424 +#: reindexdb.c:749 #, c-format msgid "" "%s reindexes a PostgreSQL database.\n" @@ -866,42 +908,47 @@ msgstr "" "%s vytvoří PostgreSQL databázi.\n" "\n" -#: reindexdb.c:428 +#: reindexdb.c:753 #, c-format msgid " -a, --all reindex all databases\n" msgstr " -a, --all reindexovat všechny databáze\n" -#: reindexdb.c:429 +#: reindexdb.c:754 #, c-format msgid " --concurrently reindex concurrently\n" msgstr " --concurrently reindex concurrently\n" -#: reindexdb.c:430 +#: reindexdb.c:755 #, c-format msgid " -d, --dbname=DBNAME database to reindex\n" msgstr " -d, --dbname=DATABÁZE databáze k reindexaci\n" -#: reindexdb.c:432 +#: reindexdb.c:757 #, c-format msgid " -i, --index=INDEX recreate specific index(es) only\n" msgstr " -i, --index=JMÉNO obnovit pouze vybraný index\n" -#: reindexdb.c:434 +#: reindexdb.c:758 +#, c-format +msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n" +msgstr " -j, --jobs=NUM použij tento počet paralelních jobů pro reindexování\n" + +#: reindexdb.c:760 #, c-format msgid " -s, --system reindex system catalogs\n" msgstr " -s, --system reindexace systémového katalogu\n" -#: reindexdb.c:435 +#: reindexdb.c:761 #, c-format msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" msgstr " -S, --schema=SCHEMA reindexace pouze zadaných schemat\n" -#: reindexdb.c:436 +#: reindexdb.c:762 #, c-format msgid " -t, --table=TABLE reindex specific table(s) only\n" msgstr " -t, --table=TABULKA reidexace pouze vybranou tabulku\n" -#: reindexdb.c:447 +#: reindexdb.c:773 #, c-format msgid "" "\n" @@ -910,74 +957,79 @@ msgstr "" "\n" "Pro detaily čtěte popis SQL příkazu REINDEX.\n" -#: vacuumdb.c:211 +#: scripts_parallel.c:232 #, c-format -msgid "number of parallel jobs must be at least 1" -msgstr "počet paralelních jobů musí být alespoň 1" +msgid "too many jobs for this platform -- try %d" +msgstr "příliš mnoho jobů pro tuto platformu -- zkuste %d" -#: vacuumdb.c:231 +#: vacuumdb.c:192 +#, c-format +msgid "parallel vacuum degree must be a non-negative integer" +msgstr "parallel vacuum degree musí být nezáporné celé číslo" + +#: vacuumdb.c:212 #, c-format msgid "minimum transaction ID age must be at least 1" msgstr "minimální stáří transaction ID musí být alespoň 1" -#: vacuumdb.c:239 +#: vacuumdb.c:220 #, c-format msgid "minimum multixact ID age must be at least 1" msgstr "minimální stáří multixact ID musí být alespoň 1" -#: vacuumdb.c:271 vacuumdb.c:277 vacuumdb.c:283 +#: vacuumdb.c:252 vacuumdb.c:258 vacuumdb.c:264 vacuumdb.c:276 #, c-format msgid "cannot use the \"%s\" option when performing only analyze" msgstr "při provádění jen analyze nelze použít volbu \"%s\"" -#: vacuumdb.c:300 +#: vacuumdb.c:282 +#, c-format +msgid "cannot use the \"%s\" option when performing full vacuum" +msgstr "při provádění full vacuum nelze použít volbu \"%s\"" + +#: vacuumdb.c:305 #, c-format msgid "cannot vacuum all databases and a specific one at the same time" msgstr "nelze provádět vacuum všech databází a zároveň specifikovat jen jednu" -#: vacuumdb.c:305 +#: vacuumdb.c:310 #, c-format msgid "cannot vacuum specific table(s) in all databases" msgstr "nelze provést vacuum specifické tabulky (tabulek) ve všech databázích" -#: vacuumdb.c:396 +#: vacuumdb.c:400 msgid "Generating minimal optimizer statistics (1 target)" msgstr "Generuji minimální statistiky optimizéru (1 cíl)" -#: vacuumdb.c:397 +#: vacuumdb.c:401 msgid "Generating medium optimizer statistics (10 targets)" msgstr "Generuji minimální statistiky optimizéru (1 cílů)" -#: vacuumdb.c:398 +#: vacuumdb.c:402 msgid "Generating default (full) optimizer statistics" msgstr "Generuji výchozí (plné) statistiky optimizéru" -#: vacuumdb.c:440 +#: vacuumdb.c:450 #, c-format msgid "%s: processing database \"%s\": %s\n" msgstr "%s: zpracovávám databázi \"%s\" : %s\n" -#: vacuumdb.c:443 +#: vacuumdb.c:453 #, c-format msgid "%s: vacuuming database \"%s\"\n" msgstr "%s: provádí se VACUUM databáze \"%s\"\n" -#: vacuumdb.c:642 -#, c-format -msgid "too many jobs for this platform -- try %d" -msgstr "příliš mnoho jobů pro tuto platformu -- zkuste %d" - -#: vacuumdb.c:952 +#: vacuumdb.c:899 #, c-format msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s" msgstr "provádění VACUUM tabulky \"%s\" v databázi \"%s\" selhalo: %s" -#: vacuumdb.c:955 vacuumdb.c:1090 +#: vacuumdb.c:902 #, c-format msgid "vacuuming of database \"%s\" failed: %s" msgstr "provádění VACUUM databáze \"%s\" selhalo: %s" -#: vacuumdb.c:1225 +#: vacuumdb.c:910 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -986,87 +1038,92 @@ msgstr "" "%s pročišťuje a analyzuje PostgreSQL databázi.\n" "\n" -#: vacuumdb.c:1229 +#: vacuumdb.c:914 #, c-format msgid " -a, --all vacuum all databases\n" msgstr " -a, --all provést VACUUM všech databází\n" -#: vacuumdb.c:1230 +#: vacuumdb.c:915 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=DATABÁZE jméno databáze k provedení příkazu VACUUM\n" -#: vacuumdb.c:1231 +#: vacuumdb.c:916 #, c-format msgid " --disable-page-skipping disable all page-skipping behavior\n" msgstr " --disable-page-skipping vypne veškeré přeskakování stránek\n" -#: vacuumdb.c:1232 +#: vacuumdb.c:917 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo ukázat příkazy posílané na server\n" -#: vacuumdb.c:1233 +#: vacuumdb.c:918 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full provést plné (FULL) VACUUM\n" -#: vacuumdb.c:1234 +#: vacuumdb.c:919 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr " -F, --freeze zmrazí transakční informace záznamů\n" -#: vacuumdb.c:1235 +#: vacuumdb.c:920 #, c-format msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n" msgstr " -j, --jobs=NUM použij tento počet paralelních jobů pro vacuum\n" -#: vacuumdb.c:1236 +#: vacuumdb.c:921 #, c-format msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n" msgstr " --min-mxid-age=MXID_AGE minimální stáří multixact ID tabulek pro vacuum\n" -#: vacuumdb.c:1237 +#: vacuumdb.c:922 #, c-format msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n" msgstr " --min-xid-age=XID_AGE minimání stáří transaction ID pro vacuum\n" -#: vacuumdb.c:1238 +#: vacuumdb.c:923 +#, c-format +msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n" +msgstr " -P, --parallel=PARALLEL_DEGREE použij tento počet pracovních procesů pro vacuum, pokud je to možné\n" + +#: vacuumdb.c:924 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet tichý mód\n" -#: vacuumdb.c:1239 +#: vacuumdb.c:925 #, c-format msgid " --skip-locked skip relations that cannot be immediately locked\n" msgstr " --skip-locked přeskočí relace které nemohou být ihned zamknuty\n" -#: vacuumdb.c:1240 +#: vacuumdb.c:926 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr " -t, --table='TABULKA[(SLOUPCE)]' provést VACUUM pouze u specifikované tabulky\n" -#: vacuumdb.c:1241 +#: vacuumdb.c:927 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose vypisovat více informací\n" -#: vacuumdb.c:1242 +#: vacuumdb.c:928 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ukáže informace o verzi a skončí\n" -#: vacuumdb.c:1243 +#: vacuumdb.c:929 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze aktualizace statistik optimalizéru\n" -#: vacuumdb.c:1244 +#: vacuumdb.c:930 #, c-format msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n" msgstr " -Z, --analyze-only pouze aktualizaze statistik optimalizéru; bez vacuum\n" -#: vacuumdb.c:1245 +#: vacuumdb.c:931 #, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in multiple\n" @@ -1075,12 +1132,12 @@ msgstr "" " --analyze-in-stages pouze aktualizuje statistiky optimizéru, v několika\n" " fázích pro rychlejší výsledky; bez vacuum\n" -#: vacuumdb.c:1247 +#: vacuumdb.c:933 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ukáže tento text a skončí\n" -#: vacuumdb.c:1255 +#: vacuumdb.c:941 #, c-format msgid "" "\n" @@ -1089,112 +1146,122 @@ msgstr "" "\n" "Pro detaily čtěte popis SQL příkazu VACUUM.\n" -#~ msgid "%s: could not obtain information about current user: %s\n" -#~ msgstr "%s: nelze získat informace o aktuálním uživateli: %s\n" +#~ msgid "%s: query failed: %s" +#~ msgstr "%s: dotaz selhal: %s" -#~ msgid "%s: could not get current user name: %s\n" -#~ msgstr "%s: nelze získat aktuální uživatelské jméno: %s\n" +#~ msgid "%s: query was: %s\n" +#~ msgstr "%s: dotaz byl: %s\n" -#~ msgid "Name" -#~ msgstr "Jméno" +#~ msgid "%s: query returned %d row instead of one: %s\n" +#~ msgid_plural "%s: query returned %d rows instead of one: %s\n" +#~ msgstr[0] "%s: dotaz vrátil %d řádek namísto jedné: %s\n" +#~ msgstr[1] "%s: dotaz vrátil %d řádky namísto jedné: %s\n" +#~ msgstr[2] "%s: dotaz vrátil %d řádek namísto jedné: %s\n" -#~ msgid "no" -#~ msgstr "ne" +#~ msgid "%s: %s" +#~ msgstr "%s: %s" -#~ msgid "yes" -#~ msgstr "ano" +#~ msgid "%s: too many parallel jobs requested (maximum: %d)\n" +#~ msgstr "%s: vyžadováno příliš mnoho paralelních jobů (maximum: %d)\n" -#~ msgid "Trusted?" -#~ msgstr "Důvěryhodný?" +#~ msgid "" +#~ "\n" +#~ "If one of -d, -D, -r, -R, -s, -S, and ROLENAME is not specified, you will\n" +#~ "be prompted interactively.\n" +#~ msgstr "" +#~ "\n" +#~ "Je-li použit jeden z parametrů -d, -D, -r, -R, -s, -S, a jméno role\n" +#~ "není zadáno, budete dotázán/a interaktivně.\n" -#~ msgid "Procedural Languages" -#~ msgstr "Procedurální jazyky" +#~ msgid "%s: still %s functions declared in language \"%s\"; language not removed\n" +#~ msgstr "%s: stále je %s funkcí definováno v jazyce \"%s\"; jazyk nebyl odstraněn.\n" -#~ msgid "%s: missing required argument language name\n" -#~ msgstr "%s: chybí povinný parametr jméno jazyka\n" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version ukáže informace o verzi a skončí\n" -#~ msgid "%s: language \"%s\" is already installed in database \"%s\"\n" -#~ msgstr "%s: jazyk \"%s\" je již v databázi \"%s\" instalován\n" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help ukáže tento text a skončí\n" -#~ msgid "%s: language installation failed: %s" -#~ msgstr "%s: instalace jazyka selhala: %s" +#~ msgid "%s: out of memory\n" +#~ msgstr "%s: nedostatek paměti\n" + +#~ msgid "%s: cannot use the \"freeze\" option when performing only analyze\n" +#~ msgstr "%s: při provádění jen analyze nelze použít volbu \"freeze\"\n" + +#~ msgid " -d, --dbname=DBNAME database from which to remove the language\n" +#~ msgstr " -d, --dbname=DATABÁZE databáze, ze které bude jazyk odstraněn\n" #~ msgid "" -#~ "%s installs a procedural language into a PostgreSQL database.\n" +#~ "%s removes a procedural language from a database.\n" #~ "\n" #~ msgstr "" -#~ "%s instaluje procedurální jazyk do PostgreSQL databáze.\n" +#~ "%s odstraňuje procedurální jazyk z databáze.\n" #~ "\n" -#~ msgid " %s [OPTION]... LANGNAME [DBNAME]\n" -#~ msgstr " %s [PŘEPÍNAČ]... JAZYK [DATABÁZE]\n" +#~ msgid "%s: language removal failed: %s" +#~ msgstr "%s: odstraňování jazyka selhalo: %s" -#~ msgid " -d, --dbname=DBNAME database to install language in\n" -#~ msgstr " -d, --dbname=DATABÁZE databáze do které bude jazyk instalován\n" +#~ msgid "%s: language \"%s\" is not installed in database \"%s\"\n" +#~ msgstr "%s: jazyk \"%s\" není v databázi \"%s\" instalován\n" -#~ msgid " -l, --list show a list of currently installed languages\n" -#~ msgstr " -l, --list ukáže seznam již nainstalovaných jazyků\n" +#~ msgid " -N, --unencrypted do not encrypt stored password\n" +#~ msgstr " -N, --unencrypted uložit heslo v otevřeném tvaru\n" #~ msgid " -E, --encrypted encrypt stored password\n" #~ msgstr " -E, --encrypted uložit heslo v zašifrované podobě\n" -#~ msgid " -N, --unencrypted do not encrypt stored password\n" -#~ msgstr " -N, --unencrypted uložit heslo v otevřeném tvaru\n" +#~ msgid " -l, --list show a list of currently installed languages\n" +#~ msgstr " -l, --list ukáže seznam již nainstalovaných jazyků\n" -#~ msgid "%s: language \"%s\" is not installed in database \"%s\"\n" -#~ msgstr "%s: jazyk \"%s\" není v databázi \"%s\" instalován\n" +#~ msgid " -d, --dbname=DBNAME database to install language in\n" +#~ msgstr " -d, --dbname=DATABÁZE databáze do které bude jazyk instalován\n" -#~ msgid "%s: language removal failed: %s" -#~ msgstr "%s: odstraňování jazyka selhalo: %s" +#~ msgid " %s [OPTION]... LANGNAME [DBNAME]\n" +#~ msgstr " %s [PŘEPÍNAČ]... JAZYK [DATABÁZE]\n" #~ msgid "" -#~ "%s removes a procedural language from a database.\n" +#~ "%s installs a procedural language into a PostgreSQL database.\n" #~ "\n" #~ msgstr "" -#~ "%s odstraňuje procedurální jazyk z databáze.\n" +#~ "%s instaluje procedurální jazyk do PostgreSQL databáze.\n" #~ "\n" -#~ msgid " -d, --dbname=DBNAME database from which to remove the language\n" -#~ msgstr " -d, --dbname=DATABÁZE databáze, ze které bude jazyk odstraněn\n" +#~ msgid "%s: language installation failed: %s" +#~ msgstr "%s: instalace jazyka selhala: %s" -#~ msgid "%s: cannot use the \"freeze\" option when performing only analyze\n" -#~ msgstr "%s: při provádění jen analyze nelze použít volbu \"freeze\"\n" +#~ msgid "%s: language \"%s\" is already installed in database \"%s\"\n" +#~ msgstr "%s: jazyk \"%s\" je již v databázi \"%s\" instalován\n" -#~ msgid "%s: out of memory\n" -#~ msgstr "%s: nedostatek paměti\n" +#~ msgid "%s: missing required argument language name\n" +#~ msgstr "%s: chybí povinný parametr jméno jazyka\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help ukáže tento text a skončí\n" +#~ msgid "Procedural Languages" +#~ msgstr "Procedurální jazyky" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version ukáže informace o verzi a skončí\n" +#~ msgid "Trusted?" +#~ msgstr "Důvěryhodný?" -#~ msgid "%s: still %s functions declared in language \"%s\"; language not removed\n" -#~ msgstr "%s: stále je %s funkcí definováno v jazyce \"%s\"; jazyk nebyl odstraněn.\n" +#~ msgid "yes" +#~ msgstr "ano" -#~ msgid "" -#~ "\n" -#~ "If one of -d, -D, -r, -R, -s, -S, and ROLENAME is not specified, you will\n" -#~ "be prompted interactively.\n" -#~ msgstr "" -#~ "\n" -#~ "Je-li použit jeden z parametrů -d, -D, -r, -R, -s, -S, a jméno role\n" -#~ "není zadáno, budete dotázán/a interaktivně.\n" +#~ msgid "no" +#~ msgstr "ne" -#~ msgid "%s: too many parallel jobs requested (maximum: %d)\n" -#~ msgstr "%s: vyžadováno příliš mnoho paralelních jobů (maximum: %d)\n" +#~ msgid "Name" +#~ msgstr "Jméno" -#~ msgid "%s: %s" -#~ msgstr "%s: %s" +#~ msgid "%s: could not get current user name: %s\n" +#~ msgstr "%s: nelze získat aktuální uživatelské jméno: %s\n" -#~ msgid "%s: query returned %d row instead of one: %s\n" -#~ msgid_plural "%s: query returned %d rows instead of one: %s\n" -#~ msgstr[0] "%s: dotaz vrátil %d řádek namísto jedné: %s\n" -#~ msgstr[1] "%s: dotaz vrátil %d řádky namísto jedné: %s\n" -#~ msgstr[2] "%s: dotaz vrátil %d řádek namísto jedné: %s\n" +#~ msgid "%s: could not obtain information about current user: %s\n" +#~ msgstr "%s: nelze získat informace o aktuálním uživateli: %s\n" -#~ msgid "%s: query was: %s\n" -#~ msgstr "%s: dotaz byl: %s\n" +#~ msgid "reindexing of system catalogs failed: %s" +#~ msgstr "reindexace systémového katalogu selhala: %s" -#~ msgid "%s: query failed: %s" -#~ msgstr "%s: dotaz selhal: %s" +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Chyby hlaste na adresu .\n" diff --git a/src/bin/scripts/po/de.po b/src/bin/scripts/po/de.po index f1cfe8146a074..8f6bbad909db8 100644 --- a/src/bin/scripts/po/de.po +++ b/src/bin/scripts/po/de.po @@ -1,14 +1,14 @@ # German message translation file for "scripts". -# Peter Eisentraut , 2003 - 2020. +# Peter Eisentraut , 2003 - 2021. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 13\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-09 00:16+0000\n" -"PO-Revision-Date: 2020-05-09 10:12+0200\n" +"POT-Creation-Date: 2021-04-30 03:18+0000\n" +"PO-Revision-Date: 2021-04-30 07:11+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -17,17 +17,17 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "Fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "Fehler: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "Warnung: " @@ -57,73 +57,115 @@ msgstr "Benutzer existiert nicht" msgid "user name lookup failure: error code %lu" msgstr "Fehler beim Nachschlagen des Benutzernamens: Fehlercode %lu" -#: ../../fe_utils/print.c:350 +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Abbruchsanforderung gesendet\n" + +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 +msgid "Could not send cancel request: " +msgstr "Konnte Abbruchsanforderung nicht senden: " + +#: ../../fe_utils/connect_utils.c:49 ../../fe_utils/connect_utils.c:107 +msgid "Password: " +msgstr "Passwort: " + +#: ../../fe_utils/connect_utils.c:92 +#, c-format +msgid "could not connect to database %s: out of memory" +msgstr "konnte nicht mit Datenbank %s verbinden: Speicher aufgebraucht" + +#: ../../fe_utils/connect_utils.c:120 pg_isready.c:145 +#, c-format +msgid "%s" +msgstr "%s" + +#: ../../fe_utils/parallel_slot.c:302 +#, c-format +msgid "too many jobs for this platform" +msgstr "zu viele Jobs für diese Plattform" + +#: ../../fe_utils/parallel_slot.c:522 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "Verarbeitung der Datenbank »%s« fehlgeschlagen: %s" + +#: ../../fe_utils/print.c:336 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu Zeile)" msgstr[1] "(%lu Zeilen)" -#: ../../fe_utils/print.c:3055 +#: ../../fe_utils/print.c:3039 #, c-format msgid "Interrupted\n" msgstr "Unterbrochen\n" -#: ../../fe_utils/print.c:3119 +#: ../../fe_utils/print.c:3103 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "Kann keinen weiteren Spaltenkopf zur Tabelle hinzufügen: Spaltenzahl %d überschritten.\n" -#: ../../fe_utils/print.c:3159 +#: ../../fe_utils/print.c:3143 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "Cann keine weitere Zelle zur Tabelle hinzufügen: Zellengesamtzahl %d überschritten.\n" -#: ../../fe_utils/print.c:3414 +#: ../../fe_utils/print.c:3401 #, c-format msgid "invalid output format (internal error): %d" msgstr "ungültiges Ausgabeformat (interner Fehler): %d" -#: clusterdb.c:114 clusterdb.c:133 createdb.c:121 createdb.c:140 -#: createuser.c:171 createuser.c:186 dropdb.c:101 dropdb.c:110 dropdb.c:118 -#: dropuser.c:92 dropuser.c:107 dropuser.c:122 pg_isready.c:95 pg_isready.c:109 -#: reindexdb.c:168 reindexdb.c:187 vacuumdb.c:227 vacuumdb.c:246 +#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 +#, c-format +msgid "query failed: %s" +msgstr "Anfrage fehlgeschlagen: %s" + +#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 +#, c-format +msgid "query was: %s" +msgstr "Anfrage war: %s" + +#: clusterdb.c:112 clusterdb.c:131 createdb.c:123 createdb.c:142 +#: createuser.c:172 createuser.c:187 dropdb.c:103 dropdb.c:112 dropdb.c:120 +#: dropuser.c:94 dropuser.c:109 dropuser.c:122 pg_isready.c:96 pg_isready.c:110 +#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:245 vacuumdb.c:264 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: clusterdb.c:131 createdb.c:138 createuser.c:184 dropdb.c:116 dropuser.c:105 -#: pg_isready.c:107 reindexdb.c:185 vacuumdb.c:244 +#: clusterdb.c:129 createdb.c:140 createuser.c:185 dropdb.c:118 dropuser.c:107 +#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:262 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" -#: clusterdb.c:143 +#: clusterdb.c:148 #, c-format msgid "cannot cluster all databases and a specific one at the same time" msgstr "kann nicht alle Datenbanken und eine bestimmte gleichzeitig clustern" -#: clusterdb.c:149 +#: clusterdb.c:154 #, c-format msgid "cannot cluster specific table(s) in all databases" msgstr "kann nicht bestimmte Tabelle(n) in allen Datenbanken clustern" -#: clusterdb.c:217 +#: clusterdb.c:220 #, c-format msgid "clustering of table \"%s\" in database \"%s\" failed: %s" msgstr "Clustern der Tabelle »%s« in Datenbank »%s« fehlgeschlagen: %s" -#: clusterdb.c:220 +#: clusterdb.c:223 #, c-format msgid "clustering of database \"%s\" failed: %s" msgstr "Clustern der Datenbank »%s« fehlgeschlagen: %s" -#: clusterdb.c:253 +#: clusterdb.c:251 #, c-format msgid "%s: clustering database \"%s\"\n" msgstr "%s: clustere Datenbank »%s«\n" -#: clusterdb.c:274 +#: clusterdb.c:267 #, c-format msgid "" "%s clusters all previously clustered tables in a database.\n" @@ -132,19 +174,19 @@ msgstr "" "%s clustert alle vorher geclusterten Tabellen in einer Datenbank.\n" "\n" -#: clusterdb.c:275 createdb.c:259 createuser.c:347 dropdb.c:164 dropuser.c:163 -#: pg_isready.c:224 reindexdb.c:753 vacuumdb.c:921 +#: clusterdb.c:268 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169 +#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:988 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: clusterdb.c:276 reindexdb.c:754 vacuumdb.c:922 +#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:989 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [DBNAME]\n" -#: clusterdb.c:277 createdb.c:261 createuser.c:349 dropdb.c:166 dropuser.c:165 -#: pg_isready.c:227 reindexdb.c:755 vacuumdb.c:923 +#: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171 +#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:990 #, c-format msgid "" "\n" @@ -153,50 +195,50 @@ msgstr "" "\n" "Optionen:\n" -#: clusterdb.c:278 +#: clusterdb.c:271 #, c-format msgid " -a, --all cluster all databases\n" msgstr " -a, --all clustere alle Datenbanken\n" -#: clusterdb.c:279 +#: clusterdb.c:272 #, c-format msgid " -d, --dbname=DBNAME database to cluster\n" msgstr " -d, --dbname=DBNAME zu clusternde Datenbank\n" -#: clusterdb.c:280 createuser.c:353 dropdb.c:167 dropuser.c:166 reindexdb.c:759 +#: clusterdb.c:273 createuser.c:357 dropdb.c:174 dropuser.c:172 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr "" " -e, --echo zeige die Befehle, die an den Server\n" " gesendet werden\n" -#: clusterdb.c:281 reindexdb.c:762 +#: clusterdb.c:274 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet unterdrücke alle Mitteilungen\n" -#: clusterdb.c:282 +#: clusterdb.c:275 #, c-format msgid " -t, --table=TABLE cluster specific table(s) only\n" msgstr " -t, --table=TABELLE clustere nur bestimmte Tabelle(n)\n" -#: clusterdb.c:283 reindexdb.c:766 +#: clusterdb.c:276 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose erzeuge viele Meldungen\n" -#: clusterdb.c:284 createuser.c:365 dropdb.c:170 dropuser.c:169 reindexdb.c:767 +#: clusterdb.c:277 createuser.c:369 dropdb.c:177 dropuser.c:175 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: clusterdb.c:285 createuser.c:370 dropdb.c:172 dropuser.c:171 reindexdb.c:768 +#: clusterdb.c:278 createuser.c:374 dropdb.c:179 dropuser.c:177 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: clusterdb.c:286 createdb.c:272 createuser.c:371 dropdb.c:173 dropuser.c:172 -#: pg_isready.c:233 reindexdb.c:769 vacuumdb.c:944 +#: clusterdb.c:279 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178 +#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1014 #, c-format msgid "" "\n" @@ -205,41 +247,37 @@ msgstr "" "\n" "Verbindungsoptionen:\n" -#: clusterdb.c:287 createuser.c:372 dropdb.c:174 dropuser.c:173 reindexdb.c:770 -#: vacuumdb.c:945 +#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1015 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n" -#: clusterdb.c:288 createuser.c:373 dropdb.c:175 dropuser.c:174 reindexdb.c:771 -#: vacuumdb.c:946 +#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1016 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT Port des Datenbankservers\n" -#: clusterdb.c:289 dropdb.c:176 reindexdb.c:772 vacuumdb.c:947 +#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1017 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=NAME Datenbankbenutzername\n" -#: clusterdb.c:290 createuser.c:375 dropdb.c:177 dropuser.c:176 reindexdb.c:773 -#: vacuumdb.c:948 +#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1018 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password niemals nach Passwort fragen\n" -#: clusterdb.c:291 createuser.c:376 dropdb.c:178 dropuser.c:177 reindexdb.c:774 -#: vacuumdb.c:949 +#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1019 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password Passwortfrage erzwingen\n" -#: clusterdb.c:292 dropdb.c:179 reindexdb.c:775 vacuumdb.c:950 +#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1020 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=DBNAME alternative Wartungsdatenbank\n" -#: clusterdb.c:293 +#: clusterdb.c:286 #, c-format msgid "" "\n" @@ -249,8 +287,8 @@ msgstr "" "Für weitere Informationen lesen Sie bitte die Beschreibung des\n" "SQL-Befehls CLUSTER.\n" -#: clusterdb.c:294 createdb.c:280 createuser.c:377 dropdb.c:180 dropuser.c:178 -#: pg_isready.c:238 reindexdb.c:777 vacuumdb.c:952 +#: clusterdb.c:287 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184 +#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1022 #, c-format msgid "" "\n" @@ -259,42 +297,13 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: clusterdb.c:295 createdb.c:281 createuser.c:378 dropdb.c:181 dropuser.c:179 -#: pg_isready.c:239 reindexdb.c:778 vacuumdb.c:953 +#: clusterdb.c:288 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185 +#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1023 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: common.c:79 common.c:125 -msgid "Password: " -msgstr "Passwort: " - -#: common.c:112 -#, c-format -msgid "could not connect to database %s: out of memory" -msgstr "konnte nicht mit Datenbank %s verbinden: Speicher aufgebraucht" - -#: common.c:139 -#, c-format -msgid "could not connect to database %s: %s" -msgstr "konnte nicht mit Datenbank %s verbinden: %s" - -#: common.c:214 common.c:239 -#, c-format -msgid "query failed: %s" -msgstr "Anfrage fehlgeschlagen: %s" - -#: common.c:215 common.c:240 -#, c-format -msgid "query was: %s" -msgstr "Anfrage war: %s" - -#: common.c:312 -#, c-format -msgid "processing of database \"%s\" failed: %s" -msgstr "Verarbeitung der Datenbank »%s« fehlgeschlagen: %s" - -#: common.c:406 +#: common.c:107 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" @@ -302,53 +311,53 @@ msgstr[0] "Anfrage ergab %d Zeile anstatt einer: %s" msgstr[1] "Anfrage ergab %d Zeilen anstatt einer: %s" #. translator: abbreviation for "yes" -#: common.c:430 +#: common.c:131 msgid "y" msgstr "j" #. translator: abbreviation for "no" -#: common.c:432 +#: common.c:133 msgid "n" msgstr "n" #. translator: This is a question followed by the translated options for #. "yes" and "no". -#: common.c:442 +#: common.c:143 #, c-format msgid "%s (%s/%s) " msgstr "%s (%s/%s) " -#: common.c:456 +#: common.c:164 #, c-format msgid "Please answer \"%s\" or \"%s\".\n" msgstr "Bitte antworten Sie »%s« oder »%s«.\n" -#: createdb.c:148 +#: createdb.c:150 #, c-format msgid "only one of --locale and --lc-ctype can be specified" msgstr "--locale und --lc-ctype können nicht zusammen angegeben werden" -#: createdb.c:153 +#: createdb.c:155 #, c-format msgid "only one of --locale and --lc-collate can be specified" msgstr "--locale und --lc-collate können nicht zusammen angegeben werden" -#: createdb.c:164 +#: createdb.c:166 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "»%s« ist kein gültiger Kodierungsname" -#: createdb.c:221 +#: createdb.c:229 #, c-format msgid "database creation failed: %s" msgstr "Erzeugen der Datenbank ist fehlgeschlagen: %s" -#: createdb.c:240 +#: createdb.c:248 #, c-format msgid "comment creation failed (database was created): %s" msgstr "Erzeugen des Kommentars ist fehlgeschlagen (Datenbank wurde erzeugt): %s" -#: createdb.c:258 +#: createdb.c:266 #, c-format msgid "" "%s creates a PostgreSQL database.\n" @@ -357,94 +366,94 @@ msgstr "" "%s erzeugt eine PostgreSQL-Datenbank.\n" "\n" -#: createdb.c:260 +#: createdb.c:268 #, c-format msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n" msgstr " %s [OPTION]... [DBNAME] [BESCHREIBUNG]\n" -#: createdb.c:262 +#: createdb.c:270 #, c-format msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n" msgstr " -D, --tablespace=TABLESPACE Standard-Tablespace der Datenbank\n" -#: createdb.c:263 +#: createdb.c:271 reindexdb.c:798 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr "" " -e, --echo zeige die Befehle, die an den Server\n" " gesendet werden\n" -#: createdb.c:264 +#: createdb.c:272 #, c-format msgid " -E, --encoding=ENCODING encoding for the database\n" msgstr " -E, --encoding=KODIERUNG Kodierung für die Datenbank\n" -#: createdb.c:265 +#: createdb.c:273 #, c-format msgid " -l, --locale=LOCALE locale settings for the database\n" msgstr " -l, --locale=LOCALE Lokale-Einstellungen für die Datenbank\n" -#: createdb.c:266 +#: createdb.c:274 #, c-format msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n" msgstr " --lc-collate=LOCALE LC_COLLATE-Einstellung für die Datenbank\n" -#: createdb.c:267 +#: createdb.c:275 #, c-format msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n" msgstr " --lc-ctype=LOCALE LC_CTYPE-Einstellung für die Datenbank\n" -#: createdb.c:268 +#: createdb.c:276 #, c-format msgid " -O, --owner=OWNER database user to own the new database\n" msgstr " -O, --owner=EIGENTÜMER Eigentümer der neuen Datenbank\n" -#: createdb.c:269 +#: createdb.c:277 #, c-format msgid " -T, --template=TEMPLATE template database to copy\n" msgstr " -T, --template=TEMPLATE zu kopierende Template-Datenbank\n" -#: createdb.c:270 +#: createdb.c:278 reindexdb.c:807 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: createdb.c:271 +#: createdb.c:279 reindexdb.c:808 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: createdb.c:273 +#: createdb.c:281 reindexdb.c:810 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n" -#: createdb.c:274 +#: createdb.c:282 reindexdb.c:811 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT Port des Datenbankservers\n" -#: createdb.c:275 +#: createdb.c:283 reindexdb.c:812 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=NAME Datenbankbenutzername\n" -#: createdb.c:276 +#: createdb.c:284 reindexdb.c:813 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password niemals nach Passwort fragen\n" -#: createdb.c:277 +#: createdb.c:285 reindexdb.c:814 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password Passwortfrage erzwingen\n" -#: createdb.c:278 +#: createdb.c:286 reindexdb.c:815 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=DBNAME alternative Wartungsdatenbank\n" -#: createdb.c:279 +#: createdb.c:287 #, c-format msgid "" "\n" @@ -454,51 +463,51 @@ msgstr "" "Wenn nichts anderes angegeben ist, dann wird eine Datenbank mit dem Namen\n" "des aktuellen Benutzers erzeugt.\n" -#: createuser.c:150 +#: createuser.c:151 #, c-format msgid "invalid value for --connection-limit: %s" msgstr "ungültiger Wert für --connection-limit: %s" -#: createuser.c:194 +#: createuser.c:195 msgid "Enter name of role to add: " msgstr "Geben Sie den Namen der neuen Rolle ein: " -#: createuser.c:211 +#: createuser.c:210 msgid "Enter password for new role: " msgstr "Geben Sie das Passwort der neuen Rolle ein: " -#: createuser.c:213 +#: createuser.c:211 msgid "Enter it again: " msgstr "Geben Sie es noch einmal ein: " -#: createuser.c:216 +#: createuser.c:214 #, c-format msgid "Passwords didn't match.\n" msgstr "Passwörter stimmten nicht überein.\n" -#: createuser.c:224 +#: createuser.c:222 msgid "Shall the new role be a superuser?" msgstr "Soll die neue Rolle ein Superuser sein?" -#: createuser.c:239 +#: createuser.c:237 msgid "Shall the new role be allowed to create databases?" msgstr "Soll die neue Rolle Datenbanken erzeugen dürfen?" -#: createuser.c:247 +#: createuser.c:245 msgid "Shall the new role be allowed to create more new roles?" msgstr "Soll die neue Rolle weitere neue Rollen erzeugen dürfen?" -#: createuser.c:277 +#: createuser.c:281 #, c-format msgid "password encryption failed: %s" msgstr "Passwortverschlüsselung ist fehlgeschlagen: %s" -#: createuser.c:332 +#: createuser.c:336 #, c-format msgid "creation of new role failed: %s" msgstr "Erzeugen der neuen Rolle fehlgeschlagen: %s" -#: createuser.c:346 +#: createuser.c:350 #, c-format msgid "" "%s creates a new PostgreSQL role.\n" @@ -507,34 +516,34 @@ msgstr "" "%s erzeugt eine neue PostgreSQL-Rolle.\n" "\n" -#: createuser.c:348 dropuser.c:164 +#: createuser.c:352 dropuser.c:170 #, c-format msgid " %s [OPTION]... [ROLENAME]\n" msgstr " %s [OPTION]... [ROLLENNAME]\n" -#: createuser.c:350 +#: createuser.c:354 #, c-format msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n" msgstr "" " -c, --connection-limit=N Hochzahl an Verbindungen für Rolle\n" " (Voreinstellung: keine Begrenzung)\n" -#: createuser.c:351 +#: createuser.c:355 #, c-format msgid " -d, --createdb role can create new databases\n" msgstr " -d, --createdb Rolle kann neue Datenbanken erzeugen\n" -#: createuser.c:352 +#: createuser.c:356 #, c-format msgid " -D, --no-createdb role cannot create databases (default)\n" msgstr " -D, --no-createdb Rolle kann keine Datenbanken erzeugen (Voreinstellung)\n" -#: createuser.c:354 +#: createuser.c:358 #, c-format msgid " -g, --role=ROLE new role will be a member of this role\n" msgstr " -g, --role=ROLLE neue Rolle wird Mitglied dieser Rolle\n" -#: createuser.c:355 +#: createuser.c:359 #, c-format msgid "" " -i, --inherit role inherits privileges of roles it is a\n" @@ -543,47 +552,47 @@ msgstr "" " -i, --inherit Rolle erbt alle Privilegien von Rollen, deren\n" " Mitglied sie ist (Voreinstellung)\n" -#: createuser.c:357 +#: createuser.c:361 #, c-format msgid " -I, --no-inherit role does not inherit privileges\n" msgstr " -I, --no-inherit Rolle erbt keine Privilegien\n" -#: createuser.c:358 +#: createuser.c:362 #, c-format msgid " -l, --login role can login (default)\n" msgstr " -l, --login Rolle kann sich anmelden (Voreinstellung)\n" -#: createuser.c:359 +#: createuser.c:363 #, c-format msgid " -L, --no-login role cannot login\n" msgstr " -L, --no-login Rolle kann sich nicht anmelden\n" -#: createuser.c:360 +#: createuser.c:364 #, c-format msgid " -P, --pwprompt assign a password to new role\n" msgstr " -P, --pwprompt weise der neuen Rolle ein Passwort zu\n" -#: createuser.c:361 +#: createuser.c:365 #, c-format msgid " -r, --createrole role can create new roles\n" msgstr " -r, --createrole Rolle kann neue Rollen erzeugen\n" -#: createuser.c:362 +#: createuser.c:366 #, c-format msgid " -R, --no-createrole role cannot create roles (default)\n" msgstr " -R, --no-createrole Rolle kann keine Rollen erzeugen (Voreinstellung)\n" -#: createuser.c:363 +#: createuser.c:367 #, c-format msgid " -s, --superuser role will be superuser\n" msgstr " -s, --superuser Rolle wird Superuser\n" -#: createuser.c:364 +#: createuser.c:368 #, c-format msgid " -S, --no-superuser role will not be superuser (default)\n" msgstr " -S, --no-superuser Rolle wird kein Superuser (Voreinstellung)\n" -#: createuser.c:366 +#: createuser.c:370 #, c-format msgid "" " --interactive prompt for missing role name and attributes rather\n" @@ -592,43 +601,43 @@ msgstr "" " --interactive nach fehlenden Rollennamen und -attributen fragen\n" " anstatt Vorgabewerte zu nehmen\n" -#: createuser.c:368 +#: createuser.c:372 #, c-format msgid " --replication role can initiate replication\n" msgstr " --replication Rolle kann Replikation einleiten\n" -#: createuser.c:369 +#: createuser.c:373 #, c-format msgid " --no-replication role cannot initiate replication\n" msgstr " --no-replication Rolle kann Replikation nicht einleiten\n" -#: createuser.c:374 +#: createuser.c:378 #, c-format msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n" msgstr "" " -U, --username=NAME Datenbankbenutzername für die Verbindung\n" " (nicht der Name des neuen Benutzers)\n" -#: dropdb.c:109 +#: dropdb.c:111 #, c-format msgid "missing required argument database name" msgstr "Datenbankname als Argument fehlt" -#: dropdb.c:124 +#: dropdb.c:126 #, c-format msgid "Database \"%s\" will be permanently removed.\n" msgstr "Datenbank »%s« wird unwiderruflich gelöscht werden.\n" -#: dropdb.c:125 dropuser.c:130 +#: dropdb.c:127 dropuser.c:130 msgid "Are you sure?" msgstr "Sind Sie sich sicher?" -#: dropdb.c:149 +#: dropdb.c:156 #, c-format msgid "database removal failed: %s" msgstr "Löschen der Datenbank fehlgeschlagen: %s" -#: dropdb.c:163 +#: dropdb.c:170 #, c-format msgid "" "%s removes a PostgreSQL database.\n" @@ -637,27 +646,27 @@ msgstr "" "%s löscht eine PostgreSQL-Datenbank.\n" "\n" -#: dropdb.c:165 +#: dropdb.c:172 #, c-format msgid " %s [OPTION]... DBNAME\n" msgstr " %s [OPTION]... DBNAME\n" -#: dropdb.c:168 +#: dropdb.c:175 #, c-format msgid " -f, --force try to terminate other connections before dropping\n" msgstr " -f, --force vor dem Löschen versuchen andere Verbindungen abzubrechen\n" -#: dropdb.c:169 +#: dropdb.c:176 #, c-format msgid " -i, --interactive prompt before deleting anything\n" msgstr " -i, --interactive frage nach, bevor irgendetwas gelöscht wird\n" -#: dropdb.c:171 +#: dropdb.c:178 #, c-format msgid " --if-exists don't report error if database doesn't exist\n" msgstr " --if-exists keinen Fehler ausgeben, wenn Datenbank nicht existiert\n" -#: dropuser.c:115 +#: dropuser.c:117 msgid "Enter name of role to drop: " msgstr "Geben Sie den Namen der zu löschenden Rolle ein: " @@ -671,12 +680,12 @@ msgstr "Rollenname als Argument fehlt" msgid "Role \"%s\" will be permanently removed.\n" msgstr "Rolle »%s« wird unwiderruflich gelöscht werden.\n" -#: dropuser.c:147 +#: dropuser.c:153 #, c-format msgid "removal of role \"%s\" failed: %s" msgstr "Löschen der Rolle »%s« fehlgeschlagen: %s" -#: dropuser.c:162 +#: dropuser.c:168 #, c-format msgid "" "%s removes a PostgreSQL role.\n" @@ -685,7 +694,7 @@ msgstr "" "%s löscht eine PostgreSQL-Rolle.\n" "\n" -#: dropuser.c:167 +#: dropuser.c:173 #, c-format msgid "" " -i, --interactive prompt before deleting anything, and prompt for\n" @@ -694,54 +703,49 @@ msgstr "" " -i, --interactive nachfragen, bevor irgendetwas gelöscht wird, und\n" " nach Rollennamen fragen, wenn nicht angegeben\n" -#: dropuser.c:170 +#: dropuser.c:176 #, c-format msgid " --if-exists don't report error if user doesn't exist\n" msgstr " --if-exists keinen Fehler ausgeben, wenn Benutzer nicht existiert\n" -#: dropuser.c:175 +#: dropuser.c:181 #, c-format msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n" msgstr "" " -U, --username=NAME Datenbankbenutzername für die Verbindung\n" " (nicht der Name des zu löschenden Benutzers)\n" -#: pg_isready.c:144 -#, c-format -msgid "%s" -msgstr "%s" - -#: pg_isready.c:152 +#: pg_isready.c:153 #, c-format msgid "could not fetch default options" msgstr "konnte Standardoptionen nicht ermitteln" -#: pg_isready.c:201 +#: pg_isready.c:202 #, c-format msgid "accepting connections\n" msgstr "Verbindungen werden angenommen\n" -#: pg_isready.c:204 +#: pg_isready.c:205 #, c-format msgid "rejecting connections\n" msgstr "Verbindungen werden abgelehnt\n" -#: pg_isready.c:207 +#: pg_isready.c:208 #, c-format msgid "no response\n" msgstr "keine Antwort\n" -#: pg_isready.c:210 +#: pg_isready.c:211 #, c-format msgid "no attempt\n" msgstr "kein Verbindungsversuch\n" -#: pg_isready.c:213 +#: pg_isready.c:214 #, c-format msgid "unknown\n" msgstr "unbekannt\n" -#: pg_isready.c:223 +#: pg_isready.c:224 #, c-format msgid "" "%s issues a connection check to a PostgreSQL database.\n" @@ -750,150 +754,148 @@ msgstr "" "%s führt eine Verbindungsprüfung gegen eine PostgreSQL-Datenbank aus.\n" "\n" -#: pg_isready.c:225 +#: pg_isready.c:226 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" -#: pg_isready.c:228 +#: pg_isready.c:229 #, c-format msgid " -d, --dbname=DBNAME database name\n" msgstr " -d, --dbname=DBNAME Datenbankname\n" -#: pg_isready.c:229 +#: pg_isready.c:230 #, c-format msgid " -q, --quiet run quietly\n" msgstr " -q, --quiet weniger ausgeben\n" -#: pg_isready.c:230 +#: pg_isready.c:231 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_isready.c:231 +#: pg_isready.c:232 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_isready.c:234 +#: pg_isready.c:235 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n" -#: pg_isready.c:235 +#: pg_isready.c:236 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT Port des Datenbankservers\n" -#: pg_isready.c:236 +#: pg_isready.c:237 #, c-format msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n" msgstr " -t, --timeout=SEK Sekunden auf Verbindung warten, 0 schaltet aus (Vorgabe: %s)\n" -#: pg_isready.c:237 +#: pg_isready.c:238 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=NAME Datenbankbenutzername\n" -#: reindexdb.c:154 vacuumdb.c:186 +#: reindexdb.c:157 vacuumdb.c:195 #, c-format msgid "number of parallel jobs must be at least 1" msgstr "Anzahl paralleler Jobs muss mindestens 1 sein" -#: reindexdb.c:197 +#: reindexdb.c:210 #, c-format msgid "cannot reindex all databases and a specific one at the same time" msgstr "kann nicht alle Datenbanken und eine bestimmte gleichzeitig reindizieren" -#: reindexdb.c:202 +#: reindexdb.c:215 #, c-format msgid "cannot reindex all databases and system catalogs at the same time" msgstr "kann nicht alle Datenbanken und Systemkataloge gleichzeitig reindizieren" -#: reindexdb.c:207 +#: reindexdb.c:220 #, c-format msgid "cannot reindex specific schema(s) in all databases" msgstr "kann nicht bestimmte Schemas in allen Datenbanken reindizieren" -#: reindexdb.c:212 +#: reindexdb.c:225 #, c-format msgid "cannot reindex specific table(s) in all databases" msgstr "kann nicht bestimmte Tabelle(n) in allen Datenbanken reindizieren" -#: reindexdb.c:217 +#: reindexdb.c:230 #, c-format msgid "cannot reindex specific index(es) in all databases" msgstr "kann nicht bestimmte Indexe in allen Datenbanken reindizieren" -#: reindexdb.c:229 +#: reindexdb.c:243 #, c-format msgid "cannot reindex specific schema(s) and system catalogs at the same time" msgstr "kann nicht bestimmte Schemas und Systemkataloge gleichzeitig reindizieren" -#: reindexdb.c:234 +#: reindexdb.c:248 #, c-format msgid "cannot reindex specific table(s) and system catalogs at the same time" msgstr "kann nicht bestimmte Tabelle(n) und Systemkataloge gleichzeitig reindizieren" -#: reindexdb.c:239 +#: reindexdb.c:253 #, c-format msgid "cannot reindex specific index(es) and system catalogs at the same time" msgstr "kann nicht bestimmte Indexe und Systemkataloge gleichzeitig reindizieren" -#: reindexdb.c:245 -#, fuzzy, c-format -#| msgid "cannot reindex system catalogs concurrently" +#: reindexdb.c:259 +#, c-format msgid "cannot use multiple jobs to reindex system catalogs" -msgstr "Systemkataloge können nicht nebenläufig reindiziert werden" +msgstr "kann nicht mehrere Jobs verwenden, um Systemkataloge zu reindizieren" -#: reindexdb.c:272 -#, fuzzy, c-format -#| msgid "cannot insert multiple commands into a prepared statement" +#: reindexdb.c:288 +#, c-format msgid "cannot use multiple jobs to reindex indexes" -msgstr "kann nicht mehrere Befehle in vorbereitete Anweisung einfügen" +msgstr "kann nicht mehrere Jobs verwenden, um Indexe zu reindizieren" -#: reindexdb.c:337 vacuumdb.c:410 vacuumdb.c:418 vacuumdb.c:425 vacuumdb.c:432 -#: vacuumdb.c:439 +#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:451 vacuumdb.c:459 vacuumdb.c:467 +#: vacuumdb.c:475 vacuumdb.c:483 vacuumdb.c:490 vacuumdb.c:497 vacuumdb.c:504 #, c-format msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s" msgstr "Option »%s« kann nicht mit Serverversionen älter als PostgreSQL %s verwendet werden" -#: reindexdb.c:377 +#: reindexdb.c:401 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "Systemkataloge können nicht nebenläufig reindiziert werden, werden alle übersprungen" -#: reindexdb.c:558 +#: reindexdb.c:605 #, c-format msgid "reindexing of database \"%s\" failed: %s" msgstr "Reindizieren der Datenbank »%s« fehlgeschlagen: %s" -#: reindexdb.c:562 +#: reindexdb.c:609 #, c-format msgid "reindexing of index \"%s\" in database \"%s\" failed: %s" msgstr "Reindizieren des Index »%s« in Datenbank »%s« fehlgeschlagen: %s" -#: reindexdb.c:566 +#: reindexdb.c:613 #, c-format msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s" msgstr "Reindizieren des Schemas »%s« in Datenbank »%s« fehlgeschlagen: %s" -#: reindexdb.c:570 +#: reindexdb.c:617 #, c-format msgid "reindexing of system catalogs in database \"%s\" failed: %s" msgstr "Reindizieren der Systemkataloge in Datenbank »%s« fehlgeschlagen: %s" -#: reindexdb.c:574 +#: reindexdb.c:621 #, c-format msgid "reindexing of table \"%s\" in database \"%s\" failed: %s" msgstr "Reindizieren der Tabelle »%s« in Datenbank »%s« fehlgeschlagen: %s" -#: reindexdb.c:731 +#: reindexdb.c:774 #, c-format msgid "%s: reindexing database \"%s\"\n" msgstr "%s: reindiziere Datenbank »%s«\n" -#: reindexdb.c:752 +#: reindexdb.c:791 #, c-format msgid "" "%s reindexes a PostgreSQL database.\n" @@ -902,49 +904,64 @@ msgstr "" "%s reindiziert eine PostgreSQL-Datenbank.\n" "\n" -#: reindexdb.c:756 +#: reindexdb.c:795 #, c-format -msgid " -a, --all reindex all databases\n" -msgstr " -a, --all alle Datenbanken reindizieren\n" +msgid " -a, --all reindex all databases\n" +msgstr " -a, --all alle Datenbanken reindizieren\n" -#: reindexdb.c:757 +#: reindexdb.c:796 #, c-format -msgid " --concurrently reindex concurrently\n" -msgstr " --concurrently nebenläufig reindizieren\n" +msgid " --concurrently reindex concurrently\n" +msgstr " --concurrently nebenläufig reindizieren\n" -#: reindexdb.c:758 +#: reindexdb.c:797 #, c-format -msgid " -d, --dbname=DBNAME database to reindex\n" -msgstr " -d, --dbname=DBNAME zu reindizierende Datenbank\n" +msgid " -d, --dbname=DBNAME database to reindex\n" +msgstr " -d, --dbname=DBNAME zu reindizierende Datenbank\n" -#: reindexdb.c:760 +#: reindexdb.c:799 #, c-format -msgid " -i, --index=INDEX recreate specific index(es) only\n" -msgstr " -i, --index=INDEX nur bestimmte(n) Index(e) erneuern\n" +msgid " -i, --index=INDEX recreate specific index(es) only\n" +msgstr " -i, --index=INDEX nur bestimmte(n) Index(e) erneuern\n" -#: reindexdb.c:761 +#: reindexdb.c:800 #, c-format -msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n" +msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n" msgstr "" -" -j, --jobs=NUM so viele parallele Verbindungen zum\n" -" Reindizieren verwenden\n" +" -j, --jobs=NUM so viele parallele Verbindungen zum Reindizieren\n" +" verwenden\n" + +#: reindexdb.c:801 +#, c-format +msgid " -q, --quiet don't write any messages\n" +msgstr " -q, --quiet unterdrücke alle Mitteilungen\n" + +#: reindexdb.c:802 +#, c-format +msgid " -s, --system reindex system catalogs\n" +msgstr " -s, --system Systemkataloge reindizieren\n" + +#: reindexdb.c:803 +#, c-format +msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" +msgstr " -S, --schema=SCHEMA nur bestimmte(s) Schema(s) reindizieren\n" -#: reindexdb.c:763 +#: reindexdb.c:804 #, c-format -msgid " -s, --system reindex system catalogs\n" -msgstr " -s, --system Systemkataloge reindizieren\n" +msgid " -t, --table=TABLE reindex specific table(s) only\n" +msgstr " -t, --table=TABELLE nur bestimmte Tabelle(n) reindizieren\n" -#: reindexdb.c:764 +#: reindexdb.c:805 #, c-format -msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" -msgstr " -S, --schema=SCHEMA nur bestimmte(s) Schema(s) reindizieren\n" +msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n" +msgstr " --tablespace=TABLESPACE Tablespace wo Indexe neu gebaut werden\n" -#: reindexdb.c:765 +#: reindexdb.c:806 #, c-format -msgid " -t, --table=TABLE reindex specific table(s) only\n" -msgstr " -t, --table=TABELLE nur bestimmte Tabelle(n) reindizieren\n" +msgid " -v, --verbose write a lot of output\n" +msgstr " -v, --verbose erzeuge viele Meldungen\n" -#: reindexdb.c:776 +#: reindexdb.c:816 #, c-format msgid "" "\n" @@ -954,76 +971,75 @@ msgstr "" "Für weitere Informationen lesen Sie bitte die Beschreibung des\n" "SQL-Befehls REINDEX.\n" -#: vacuumdb.c:194 -#, fuzzy, c-format -#| msgid "keepalives parameter must be an integer\n" +#: vacuumdb.c:203 +#, c-format msgid "parallel vacuum degree must be a non-negative integer" -msgstr "Parameter »keepalives« muss eine ganze Zahl sein\n" +msgstr "parallele Vacuum-Einstellung muss eine nicht-negative ganze Zahl sein" -#: vacuumdb.c:214 +#: vacuumdb.c:223 #, c-format msgid "minimum transaction ID age must be at least 1" msgstr "minimales Transaktions-ID-Alter muss mindestens 1 sein" -#: vacuumdb.c:222 +#: vacuumdb.c:231 #, c-format msgid "minimum multixact ID age must be at least 1" msgstr "minimales Multixact-ID-Alter muss mindestens 1 sein" -#: vacuumdb.c:254 vacuumdb.c:260 vacuumdb.c:266 vacuumdb.c:278 +#: vacuumdb.c:272 vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 +#: vacuumdb.c:302 vacuumdb.c:314 #, c-format msgid "cannot use the \"%s\" option when performing only analyze" msgstr "kann Option »%s« nicht verwenden, wenn nur Analyze durchgeführt wird" -#: vacuumdb.c:284 -#, fuzzy, c-format -#| msgid "cannot use the \"%s\" option when performing only analyze" -msgid "cannot use the \"%s\" option when performing full" -msgstr "kann Option »%s« nicht verwenden, wenn nur Analyze durchgeführt wird" +#: vacuumdb.c:320 +#, c-format +msgid "cannot use the \"%s\" option when performing full vacuum" +msgstr "kann Option »%s« nicht verwenden, wenn volles Vacuum durchgeführt wird" -#: vacuumdb.c:300 +#: vacuumdb.c:343 #, c-format msgid "cannot vacuum all databases and a specific one at the same time" msgstr "kann nicht alle Datenbanken und eine bestimmte gleichzeitig vacuumen" -#: vacuumdb.c:305 +#: vacuumdb.c:348 #, c-format msgid "cannot vacuum specific table(s) in all databases" msgstr "kann nicht bestimmte Tabelle(n) in allen Datenbanken vacuumen" -#: vacuumdb.c:396 +#: vacuumdb.c:438 msgid "Generating minimal optimizer statistics (1 target)" msgstr "Erzeuge minimale Optimierer-Statistiken (1 Ziel)" -#: vacuumdb.c:397 +#: vacuumdb.c:439 msgid "Generating medium optimizer statistics (10 targets)" msgstr "Erzeuge mittlere Optimierer-Statistiken (10 Ziele)" -#: vacuumdb.c:398 +#: vacuumdb.c:440 msgid "Generating default (full) optimizer statistics" msgstr "Erzeuge volle Optimierer-Statistiken" -#: vacuumdb.c:447 +#: vacuumdb.c:512 #, c-format msgid "%s: processing database \"%s\": %s\n" msgstr "%s: bearbeite Datenbank »%s«: %s\n" -#: vacuumdb.c:450 +#: vacuumdb.c:515 #, c-format msgid "%s: vacuuming database \"%s\"\n" msgstr "%s: führe Vacuum in Datenbank »%s« aus\n" -#: vacuumdb.c:909 +#: vacuumdb.c:976 #, c-format msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s" msgstr "Vacuum der Tabelle »%s« in Datenbank »%s« fehlgeschlagen: %s" -#: vacuumdb.c:912 +#: vacuumdb.c:979 #, c-format msgid "vacuuming of database \"%s\" failed: %s" msgstr "Vacuum der Datenbank »%s« fehlgeschlagen: %s" -#: vacuumdb.c:920 +#: vacuumdb.c:987 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -1032,106 +1048,123 @@ msgstr "" "%s säubert und analysiert eine PostgreSQL-Datenbank.\n" "\n" -#: vacuumdb.c:924 +#: vacuumdb.c:991 #, c-format msgid " -a, --all vacuum all databases\n" msgstr " -a, --all führe Vacuum in allen Datenbanken aus\n" -#: vacuumdb.c:925 +#: vacuumdb.c:992 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=DBNAME führe Vacuum in dieser Datenbank aus\n" -#: vacuumdb.c:926 +#: vacuumdb.c:993 #, c-format msgid " --disable-page-skipping disable all page-skipping behavior\n" msgstr " --disable-page-skipping Page-Skipping-Verhalten abschalten\n" -#: vacuumdb.c:927 +#: vacuumdb.c:994 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr "" " -e, --echo zeige die Befehle, die an den Server\n" " gesendet werden\n" -#: vacuumdb.c:928 +#: vacuumdb.c:995 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full führe volles Vacuum durch\n" -#: vacuumdb.c:929 +#: vacuumdb.c:996 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr " -F, --freeze Zeilentransaktionsinformationen einfrieren\n" -#: vacuumdb.c:930 +#: vacuumdb.c:997 #, c-format msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n" msgstr "" " -j, --jobs=NUM so viele parallele Verbindungen zum Vacuum\n" " verwenden\n" -#: vacuumdb.c:931 +#: vacuumdb.c:998 #, c-format msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n" msgstr "" " --min-mxid-age=MXID-ALTER minimales Multixact-ID-Alter zu bearbeitender\n" " Tabellen\n" -#: vacuumdb.c:932 +#: vacuumdb.c:999 #, c-format msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n" msgstr "" " --min-xid-age=XID-ALTER minimales Transaktions-ID-Alter zu bearbeitender\n" " Tabellen\n" -#: vacuumdb.c:933 +#: vacuumdb.c:1000 +#, c-format +msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n" +msgstr " --no-index-cleanup Indexeinträge, die auf tote Tupel zeigen, nicht entfernen\n" + +#: vacuumdb.c:1001 +#, c-format +msgid " --no-process-toast skip the TOAST table associated with the table to vacuum\n" +msgstr " --no-process-toast zur Tabelle gehörige TOAST-Tabelle überspringen\n" + +#: vacuumdb.c:1002 +#, c-format +msgid " --no-truncate don't truncate empty pages at the end of the table\n" +msgstr " --no-truncate leere Seiten am Ende der Tabelle nicht abschneiden\n" + +#: vacuumdb.c:1003 #, c-format msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n" msgstr "" +" -P, --parallel=PARALLEL-GRAD so viele Background-Worker für Vacuum verwenden,\n" +" wenn verfügbar\n" -#: vacuumdb.c:934 +#: vacuumdb.c:1004 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet unterdrücke alle Mitteilungen\n" -#: vacuumdb.c:935 +#: vacuumdb.c:1005 #, c-format msgid " --skip-locked skip relations that cannot be immediately locked\n" msgstr "" " --skip-locked Relationen überspringen, die nicht sofort\n" " gesperrt werden können\n" -#: vacuumdb.c:936 +#: vacuumdb.c:1006 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr "" " -t, --table='TABELLE[(SPALTEN)]'\n" " führe Vacuum für bestimmte Tabelle(n) aus\n" -#: vacuumdb.c:937 +#: vacuumdb.c:1007 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose erzeuge viele Meldungen\n" -#: vacuumdb.c:938 +#: vacuumdb.c:1008 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: vacuumdb.c:939 +#: vacuumdb.c:1009 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze aktualisiere Statistiken für den Optimierer\n" -#: vacuumdb.c:940 +#: vacuumdb.c:1010 #, c-format msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n" msgstr "" " -Z, --analyze-only aktualisiere nur Statistiken für den Optimierer;\n" " kein Vacuum\n" -#: vacuumdb.c:941 +#: vacuumdb.c:1011 #, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in multiple\n" @@ -1141,12 +1174,12 @@ msgstr "" " in mehreren Phasen für schnellere Ergebnisse;\n" " kein Vacuum\n" -#: vacuumdb.c:943 +#: vacuumdb.c:1013 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: vacuumdb.c:951 +#: vacuumdb.c:1021 #, c-format msgid "" "\n" @@ -1155,12 +1188,3 @@ msgstr "" "\n" "Für weitere Information lesen Sie bitte die Beschreibung des\n" "SQL-Befehls VACUUM.\n" - -#~ msgid "Cancel request sent\n" -#~ msgstr "Abbruchsanforderung gesendet\n" - -#~ msgid "Could not send cancel request: %s" -#~ msgstr "Konnte Abbruchsanforderung nicht senden: %s" - -#~ msgid "too many jobs for this platform -- try %d" -#~ msgstr "zu viele Jobs für diese Plattform -- versuchen Sie %d" diff --git a/src/bin/scripts/po/es.po b/src/bin/scripts/po/es.po index 849608e54e80e..151b9b5d4149d 100644 --- a/src/bin/scripts/po/es.po +++ b/src/bin/scripts/po/es.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: pgscripts (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:46+0000\n" -"PO-Revision-Date: 2019-09-29 22:24-0300\n" +"POT-Creation-Date: 2020-09-13 10:46+0000\n" +"PO-Revision-Date: 2020-10-16 16:01-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -63,6 +63,19 @@ msgstr "el usuario no existe" msgid "user name lookup failure: error code %lu" msgstr "fallo en la búsqueda de nombre de usuario: código de error %lu" +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Petición de cancelación enviada\n" + +#: ../../fe_utils/cancel.c:165 +msgid "Could not send cancel request: " +msgstr "No se pudo enviar el paquete de cancelación: " + +#: ../../fe_utils/cancel.c:210 +#, c-format +msgid "Could not send cancel request: %s" +msgstr "No se pudo enviar el paquete de cancelación: %s" + #: ../../fe_utils/print.c:350 #, c-format msgid "(%lu row)" @@ -260,12 +273,14 @@ msgid "" "\n" "Report bugs to <%s>.\n" msgstr "" +"\n" +"Reporte errores a <%s>.\n" #: clusterdb.c:295 createdb.c:281 createuser.c:378 dropdb.c:181 dropuser.c:179 #: pg_isready.c:239 reindexdb.c:778 vacuumdb.c:953 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" #: common.c:79 common.c:125 msgid "Password: " @@ -292,10 +307,9 @@ msgid "query was: %s" msgstr "la consulta era: %s" #: common.c:312 -#, fuzzy, c-format -#| msgid "clustering of database \"%s\" failed: %s" +#, c-format msgid "processing of database \"%s\" failed: %s" -msgstr "falló el reordenamiento de la base de datos «%s»: %s" +msgstr "falló el procesamiento de la base de datos «%s»: %s" #: common.c:406 #, c-format @@ -456,10 +470,9 @@ msgstr "" "el usuario actual.\n" #: createuser.c:150 -#, fuzzy, c-format -#| msgid "invalid connection limit: %d" +#, c-format msgid "invalid value for --connection-limit: %s" -msgstr "límite de conexión no válido: %d" +msgstr "valor para --connection-limit no válido: %s" #: createuser.c:194 msgid "Enter name of role to add: " @@ -645,10 +658,9 @@ msgid " %s [OPTION]... DBNAME\n" msgstr " %s [OPCIÓN]... BASE-DE-DATOS\n" #: dropdb.c:168 -#, fuzzy, c-format -#| msgid " -f, --force force update to be done\n" +#, c-format msgid " -f, --force try to terminate other connections before dropping\n" -msgstr " -f, --force fuerza que la actualización sea hecha\n" +msgstr " -f, --force intentar cancelar otras conexiones antes de borrar\n" #: dropdb.c:169 #, c-format @@ -846,16 +858,14 @@ msgid "cannot reindex specific index(es) and system catalogs at the same time" msgstr "no es posible reindexar índices específicos y los catálogos del sistema simultáneamente" #: reindexdb.c:245 -#, fuzzy, c-format -#| msgid "cannot reindex system catalogs concurrently" +#, c-format msgid "cannot use multiple jobs to reindex system catalogs" -msgstr "no se pueden reindexar catálogos de sistema concurrentemente" +msgstr "no se pueden usar múltiples procesos para reindexar índices de sistema" #: reindexdb.c:272 -#, fuzzy, c-format -#| msgid "cannot insert multiple commands into a prepared statement" +#, c-format msgid "cannot use multiple jobs to reindex indexes" -msgstr "no se pueden insertar múltiples órdenes en una sentencia preparada" +msgstr "no se pueden usar múltiples procesos para reindexar índices" #: reindexdb.c:337 vacuumdb.c:410 vacuumdb.c:418 vacuumdb.c:425 vacuumdb.c:432 #: vacuumdb.c:439 @@ -884,10 +894,9 @@ msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s" msgstr "falló la reindexación del esquema «%s» en la base de datos «%s»: %s" #: reindexdb.c:570 -#, fuzzy, c-format -#| msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s" +#, c-format msgid "reindexing of system catalogs in database \"%s\" failed: %s" -msgstr "falló la reindexación del esquema «%s» en la base de datos «%s»: %s" +msgstr "falló la reindexación de los catálogos de sistema en la base de datos «%s»: %s" #: reindexdb.c:574 #, c-format @@ -929,8 +938,7 @@ msgid " -i, --index=INDEX recreate specific index(es) only\n" msgstr " -i, --index=INDEX recrear sólo este o estos índice(s)\n" #: reindexdb.c:761 -#, fuzzy, c-format -#| msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n" +#, c-format msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n" msgstr " -j, --jobs=NUM usar esta cantidad de conexiones concurrentes\n" @@ -958,11 +966,15 @@ msgstr "" "\n" "Lea la descripción de la orden REINDEX de SQL para obtener mayores detalles.\n" +#: scripts_parallel.c:234 +#, c-format +msgid "too many jobs for this platform -- try %d" +msgstr "demasiados procesos para esta plataforma -- intente con %d" + #: vacuumdb.c:194 -#, fuzzy, c-format -#| msgid "remainder for hash partition must be a non-negative integer" +#, c-format msgid "parallel vacuum degree must be a non-negative integer" -msgstr "remanente en partición hash debe ser un entero no negativo" +msgstr "el grado de vacuum paralelo debe ser un entero no negativo" #: vacuumdb.c:214 #, c-format @@ -980,10 +992,10 @@ msgid "cannot use the \"%s\" option when performing only analyze" msgstr "no se puede usar la opción «%s» cuando se está sólo actualizando estadísticas" #: vacuumdb.c:284 -#, fuzzy, c-format -#| msgid "cannot use the \"%s\" option when performing only analyze" +#, c-format +#| msgid "cannot use the \"%s\" option when performing full vacuum" msgid "cannot use the \"%s\" option when performing full" -msgstr "no se puede usar la opción «%s» cuando se está sólo actualizando estadísticas" +msgstr "no se puede usar la opción «%s» cuando se está ejecutando vacuum full" #: vacuumdb.c:300 #, c-format @@ -1084,7 +1096,7 @@ msgstr " --min-xid-age=EDAD_XID edad de ID de transacción mínima de #: vacuumdb.c:933 #, c-format msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n" -msgstr "" +msgstr " -P, --parallel=GRADO_PARALELISMO use esta cantidad de procesos para vacuum, si están disponibles\n" #: vacuumdb.c:934 #, c-format @@ -1148,22 +1160,3 @@ msgid "" msgstr "" "\n" "Lea la descripción de la orden VACUUM de SQL para obtener mayores detalles.\n" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Reporte errores a .\n" - -#~ msgid "Cancel request sent\n" -#~ msgstr "Petición de cancelación enviada\n" - -#~ msgid "Could not send cancel request: %s" -#~ msgstr "No se pudo enviar el paquete de cancelación: %s" - -#~ msgid "reindexing of system catalogs failed: %s" -#~ msgstr "falló la reindexación de los catálogos del sistema: %s" - -#~ msgid "too many jobs for this platform -- try %d" -#~ msgstr "demasiados trabajos para esta plataforma -- pruebe %d" diff --git a/src/bin/scripts/po/fr.po b/src/bin/scripts/po/fr.po index 6ca8aa47610c7..a81141a48e431 100644 --- a/src/bin/scripts/po/fr.po +++ b/src/bin/scripts/po/fr.po @@ -9,28 +9,28 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-10 20:46+0000\n" -"PO-Revision-Date: 2020-05-11 09:24+0200\n" +"POT-Creation-Date: 2021-04-16 02:48+0000\n" +"PO-Revision-Date: 2021-04-16 09:09+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: PostgreSQLfr \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal : " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "erreur : " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "attention : " @@ -60,77 +60,95 @@ msgstr "l'utilisateur n'existe pas" msgid "user name lookup failure: error code %lu" msgstr "échec lors de la recherche du nom d'utilisateur : code erreur %lu" -#: ../../fe_utils/print.c:350 +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Requête d'annulation envoyée\n" + +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 +msgid "Could not send cancel request: " +msgstr "N'a pas pu envoyer la requête d'annulation : " + +#: ../../fe_utils/parallel_slot.c:302 +#, c-format +msgid "too many jobs for this platform" +msgstr "trop de jobs pour cette plateforme" + +#: ../../fe_utils/parallel_slot.c:522 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "le traitement de la base de données « %s » a échoué : %s" + +#: ../../fe_utils/print.c:336 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu ligne)" msgstr[1] "(%lu lignes)" -#: ../../fe_utils/print.c:3055 +#: ../../fe_utils/print.c:3039 #, c-format msgid "Interrupted\n" msgstr "Interrompu\n" -#: ../../fe_utils/print.c:3119 +#: ../../fe_utils/print.c:3103 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "" "Ne peut pas ajouter l'en-tête au contenu de la table : le nombre de colonnes\n" "%d est dépassé.\n" -#: ../../fe_utils/print.c:3159 +#: ../../fe_utils/print.c:3143 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "" "Ne peut pas ajouter une cellule au contenu de la table : le nombre total des\n" "cellules %d est dépassé.\n" -#: ../../fe_utils/print.c:3414 +#: ../../fe_utils/print.c:3401 #, c-format msgid "invalid output format (internal error): %d" msgstr "format de sortie invalide (erreur interne) : %d" -#: clusterdb.c:114 clusterdb.c:133 createdb.c:121 createdb.c:140 -#: createuser.c:171 createuser.c:186 dropdb.c:101 dropdb.c:110 dropdb.c:118 -#: dropuser.c:92 dropuser.c:107 dropuser.c:122 pg_isready.c:95 pg_isready.c:109 -#: reindexdb.c:168 reindexdb.c:187 vacuumdb.c:227 vacuumdb.c:246 +#: clusterdb.c:112 clusterdb.c:131 createdb.c:123 createdb.c:142 +#: createuser.c:172 createuser.c:187 dropdb.c:103 dropdb.c:112 dropdb.c:120 +#: dropuser.c:94 dropuser.c:109 dropuser.c:122 pg_isready.c:96 pg_isready.c:110 +#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:245 vacuumdb.c:264 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayer « %s --help » pour plus d'informations.\n" -#: clusterdb.c:131 createdb.c:138 createuser.c:184 dropdb.c:116 dropuser.c:105 -#: pg_isready.c:107 reindexdb.c:185 vacuumdb.c:244 +#: clusterdb.c:129 createdb.c:140 createuser.c:185 dropdb.c:118 dropuser.c:107 +#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:262 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" -#: clusterdb.c:143 +#: clusterdb.c:148 #, c-format msgid "cannot cluster all databases and a specific one at the same time" msgstr "ne peut pas réorganiser à la fois toutes les bases de données et une base spécifique via la commande CLUSTER" -#: clusterdb.c:149 +#: clusterdb.c:154 #, c-format msgid "cannot cluster specific table(s) in all databases" msgstr "ne peut pas réorganiser la(les) table(s) spécifique(s) dans toutes les bases de données" -#: clusterdb.c:217 +#: clusterdb.c:220 #, c-format msgid "clustering of table \"%s\" in database \"%s\" failed: %s" msgstr "la réorganisation de la table « %s » de la base de données « %s » avec la commande CLUSTER a échoué : %s" -#: clusterdb.c:220 +#: clusterdb.c:223 #, c-format msgid "clustering of database \"%s\" failed: %s" msgstr "la réorganisation de la base de données « %s » via la commande CLUSTER a échoué : %s" -#: clusterdb.c:253 +#: clusterdb.c:251 #, c-format msgid "%s: clustering database \"%s\"\n" msgstr "%s : réorganisation de la base de données « %s » via la commande CLUSTER\n" -#: clusterdb.c:274 +#: clusterdb.c:267 #, c-format msgid "" "%s clusters all previously clustered tables in a database.\n" @@ -140,19 +158,19 @@ msgstr "" "de données via la commande CLUSTER.\n" "\n" -#: clusterdb.c:275 createdb.c:259 createuser.c:347 dropdb.c:164 dropuser.c:163 -#: pg_isready.c:224 reindexdb.c:753 vacuumdb.c:921 +#: clusterdb.c:268 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169 +#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:988 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: clusterdb.c:276 reindexdb.c:754 vacuumdb.c:922 +#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:989 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [NOMBASE]\n" -#: clusterdb.c:277 createdb.c:261 createuser.c:349 dropdb.c:166 dropuser.c:165 -#: pg_isready.c:227 reindexdb.c:755 vacuumdb.c:923 +#: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171 +#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:990 #, c-format msgid "" "\n" @@ -161,48 +179,48 @@ msgstr "" "\n" "Options :\n" -#: clusterdb.c:278 +#: clusterdb.c:271 #, c-format msgid " -a, --all cluster all databases\n" msgstr " -a, --all réorganise toutes les bases de données\n" -#: clusterdb.c:279 +#: clusterdb.c:272 #, c-format msgid " -d, --dbname=DBNAME database to cluster\n" msgstr " -d, --dbname=NOMBASE base de données à réorganiser\n" -#: clusterdb.c:280 createuser.c:353 dropdb.c:167 dropuser.c:166 reindexdb.c:759 +#: clusterdb.c:273 createuser.c:357 dropdb.c:174 dropuser.c:172 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo affiche les commandes envoyées au serveur\n" -#: clusterdb.c:281 reindexdb.c:762 +#: clusterdb.c:274 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet n'écrit aucun message\n" -#: clusterdb.c:282 +#: clusterdb.c:275 #, c-format msgid " -t, --table=TABLE cluster specific table(s) only\n" msgstr " -t, --table=TABLE réorganise uniquement cette(ces) table(s)\n" -#: clusterdb.c:283 reindexdb.c:766 +#: clusterdb.c:276 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose mode verbeux\n" -#: clusterdb.c:284 createuser.c:365 dropdb.c:170 dropuser.c:169 reindexdb.c:767 +#: clusterdb.c:277 createuser.c:369 dropdb.c:177 dropuser.c:175 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: clusterdb.c:285 createuser.c:370 dropdb.c:172 dropuser.c:171 reindexdb.c:768 +#: clusterdb.c:278 createuser.c:374 dropdb.c:179 dropuser.c:177 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: clusterdb.c:286 createdb.c:272 createuser.c:371 dropdb.c:173 dropuser.c:172 -#: pg_isready.c:233 reindexdb.c:769 vacuumdb.c:944 +#: clusterdb.c:279 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178 +#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1014 #, c-format msgid "" "\n" @@ -211,43 +229,39 @@ msgstr "" "\n" "Options de connexion :\n" -#: clusterdb.c:287 createuser.c:372 dropdb.c:174 dropuser.c:173 reindexdb.c:770 -#: vacuumdb.c:945 +#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1015 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=HOTE hôte du serveur de bases de données ou\n" " répertoire des sockets\n" -#: clusterdb.c:288 createuser.c:373 dropdb.c:175 dropuser.c:174 reindexdb.c:771 -#: vacuumdb.c:946 +#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1016 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT port du serveur de bases de données\n" -#: clusterdb.c:289 dropdb.c:176 reindexdb.c:772 vacuumdb.c:947 +#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1017 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=NOMUTILISATEUR nom d'utilisateur pour la connexion\n" -#: clusterdb.c:290 createuser.c:375 dropdb.c:177 dropuser.c:176 reindexdb.c:773 -#: vacuumdb.c:948 +#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1018 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password empêche la demande d'un mot de passe\n" -#: clusterdb.c:291 createuser.c:376 dropdb.c:178 dropuser.c:177 reindexdb.c:774 -#: vacuumdb.c:949 +#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1019 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password force la demande d'un mot de passe\n" -#: clusterdb.c:292 dropdb.c:179 reindexdb.c:775 vacuumdb.c:950 +#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1020 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=NOM_BASE indique une autre base par défaut\n" -#: clusterdb.c:293 +#: clusterdb.c:286 #, c-format msgid "" "\n" @@ -256,8 +270,8 @@ msgstr "" "\n" "Lire la description de la commande SQL CLUSTER pour de plus amples détails.\n" -#: clusterdb.c:294 createdb.c:280 createuser.c:377 dropdb.c:180 dropuser.c:178 -#: pg_isready.c:238 reindexdb.c:777 vacuumdb.c:952 +#: clusterdb.c:287 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184 +#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1022 #, c-format msgid "" "\n" @@ -266,42 +280,13 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: clusterdb.c:295 createdb.c:281 createuser.c:378 dropdb.c:181 dropuser.c:179 -#: pg_isready.c:239 reindexdb.c:778 vacuumdb.c:953 +#: clusterdb.c:288 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185 +#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1023 #, c-format msgid "%s home page: <%s>\n" msgstr "page d'accueil %s : <%s>\n" -#: common.c:79 common.c:125 -msgid "Password: " -msgstr "Mot de passe : " - -#: common.c:112 -#, c-format -msgid "could not connect to database %s: out of memory" -msgstr "n'a pas pu se connecter à la base de données %s : plus de mémoire" - -#: common.c:139 -#, c-format -msgid "could not connect to database %s: %s" -msgstr "n'a pas pu se connecter à la base de données %s : %s" - -#: common.c:214 common.c:239 -#, c-format -msgid "query failed: %s" -msgstr "échec de la requête : %s" - -#: common.c:215 common.c:240 -#, c-format -msgid "query was: %s" -msgstr "la requête était : %s" - -#: common.c:312 -#, c-format -msgid "processing of database \"%s\" failed: %s" -msgstr "le traitement de la base de données « %s » a échoué : %s" - -#: common.c:406 +#: common.c:107 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" @@ -309,53 +294,53 @@ msgstr[0] "la requête a renvoyé %d ligne au lieu d'une seule : %s" msgstr[1] "la requête a renvoyé %d lignes au lieu d'une seule : %s" #. translator: abbreviation for "yes" -#: common.c:430 +#: common.c:131 msgid "y" msgstr "o" #. translator: abbreviation for "no" -#: common.c:432 +#: common.c:133 msgid "n" msgstr "n" #. translator: This is a question followed by the translated options for #. "yes" and "no". -#: common.c:442 +#: common.c:143 #, c-format msgid "%s (%s/%s) " msgstr "%s (%s/%s) " -#: common.c:456 +#: common.c:164 #, c-format msgid "Please answer \"%s\" or \"%s\".\n" msgstr "Merci de répondre « %s » ou « %s ».\n" -#: createdb.c:148 +#: createdb.c:150 #, c-format msgid "only one of --locale and --lc-ctype can be specified" msgstr "une seule des options --locale et --lc-ctype peut être indiquée" -#: createdb.c:153 +#: createdb.c:155 #, c-format msgid "only one of --locale and --lc-collate can be specified" msgstr "une seule des options --locale et --lc-collate peut être indiquée" -#: createdb.c:164 +#: createdb.c:166 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "« %s » n'est pas un nom d'encodage valide" -#: createdb.c:221 +#: createdb.c:229 #, c-format msgid "database creation failed: %s" msgstr "la création de la base de données a échoué : %s" -#: createdb.c:240 +#: createdb.c:248 #, c-format msgid "comment creation failed (database was created): %s" msgstr "l'ajout du commentaire a échoué (la base de données a été créée) : %s" -#: createdb.c:258 +#: createdb.c:266 #, c-format msgid "" "%s creates a PostgreSQL database.\n" @@ -364,98 +349,98 @@ msgstr "" "%s crée une base de données PostgreSQL.\n" "\n" -#: createdb.c:260 +#: createdb.c:268 #, c-format msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n" msgstr " %s [OPTION]... [NOMBASE] [DESCRIPTION]\n" -#: createdb.c:262 +#: createdb.c:270 #, c-format msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n" msgstr " -D, --tablespace=TABLESPACE tablespace par défaut de la base de données\n" -#: createdb.c:263 +#: createdb.c:271 reindexdb.c:798 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo affiche les commandes envoyées au serveur\n" -#: createdb.c:264 +#: createdb.c:272 #, c-format msgid " -E, --encoding=ENCODING encoding for the database\n" msgstr " -E, --encoding=ENC encodage de la base de données\n" -#: createdb.c:265 +#: createdb.c:273 #, c-format msgid " -l, --locale=LOCALE locale settings for the database\n" msgstr "" " -l, --locale=LOCALE paramètre de la locale pour la base de\n" " données\n" -#: createdb.c:266 +#: createdb.c:274 #, c-format msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n" msgstr " --lc-collate=LOCALE paramètre LC_COLLATE pour la base de données\n" -#: createdb.c:267 +#: createdb.c:275 #, c-format msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n" msgstr " --lc-ctype=LOCALE paramètre LC_CTYPE pour la base de données\n" -#: createdb.c:268 +#: createdb.c:276 #, c-format msgid " -O, --owner=OWNER database user to own the new database\n" msgstr "" " -O, --owner=PROPRIÉTAIRE nom du propriétaire de la nouvelle base de\n" " données\n" -#: createdb.c:269 +#: createdb.c:277 #, c-format msgid " -T, --template=TEMPLATE template database to copy\n" msgstr " -T, --template=MODÈLE base de données modèle à copier\n" -#: createdb.c:270 +#: createdb.c:278 reindexdb.c:807 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: createdb.c:271 +#: createdb.c:279 reindexdb.c:808 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: createdb.c:273 +#: createdb.c:281 reindexdb.c:810 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=HOTE hôte du serveur de bases de données\n" " ou répertoire des sockets\n" -#: createdb.c:274 +#: createdb.c:282 reindexdb.c:811 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT port du serveur de bases de données\n" -#: createdb.c:275 +#: createdb.c:283 reindexdb.c:812 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=NOMUTILISATEUR nom d'utilisateur pour la connexion\n" -#: createdb.c:276 +#: createdb.c:284 reindexdb.c:813 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password empêche la demande d'un mot de passe\n" -#: createdb.c:277 +#: createdb.c:285 reindexdb.c:814 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password force la demande d'un mot de passe\n" -#: createdb.c:278 +#: createdb.c:286 reindexdb.c:815 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=NOM_BASE indique une autre base par défaut\n" -#: createdb.c:279 +#: createdb.c:287 #, c-format msgid "" "\n" @@ -464,51 +449,51 @@ msgstr "" "\n" "Par défaut, la base de donnée créée porte le nom de l'utilisateur courant.\n" -#: createuser.c:150 +#: createuser.c:151 #, c-format msgid "invalid value for --connection-limit: %s" msgstr "valeur invalide pour --connection-limit : %s" -#: createuser.c:194 +#: createuser.c:195 msgid "Enter name of role to add: " msgstr "Saisir le nom du rôle à ajouter : " -#: createuser.c:211 +#: createuser.c:210 msgid "Enter password for new role: " msgstr "Saisir le mot de passe pour le nouveau rôle : " -#: createuser.c:213 +#: createuser.c:211 msgid "Enter it again: " msgstr "Le saisir de nouveau : " -#: createuser.c:216 +#: createuser.c:214 #, c-format msgid "Passwords didn't match.\n" msgstr "Les mots de passe ne sont pas identiques.\n" -#: createuser.c:224 +#: createuser.c:222 msgid "Shall the new role be a superuser?" msgstr "Le nouveau rôle est-il super-utilisateur ?" -#: createuser.c:239 +#: createuser.c:237 msgid "Shall the new role be allowed to create databases?" msgstr "Le nouveau rôle est-il autorisé à créer des bases de données ?" -#: createuser.c:247 +#: createuser.c:245 msgid "Shall the new role be allowed to create more new roles?" msgstr "Le nouveau rôle est-il autorisé à créer de nouveaux rôles ?" -#: createuser.c:277 +#: createuser.c:281 #, c-format msgid "password encryption failed: %s" msgstr "échec du chiffrement du mot de passe : %s" -#: createuser.c:332 +#: createuser.c:336 #, c-format msgid "creation of new role failed: %s" msgstr "la création du nouvel rôle a échoué : %s" -#: createuser.c:346 +#: createuser.c:350 #, c-format msgid "" "%s creates a new PostgreSQL role.\n" @@ -517,38 +502,38 @@ msgstr "" "%s crée un nouvel rôle PostgreSQL.\n" "\n" -#: createuser.c:348 dropuser.c:164 +#: createuser.c:352 dropuser.c:170 #, c-format msgid " %s [OPTION]... [ROLENAME]\n" msgstr " %s [OPTION]... [NOMROLE]\n" -#: createuser.c:350 +#: createuser.c:354 #, c-format msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n" msgstr "" " -c, --connection-limit=N nombre maximal de connexions pour le rôle\n" " (par défaut sans limite)\n" -#: createuser.c:351 +#: createuser.c:355 #, c-format msgid " -d, --createdb role can create new databases\n" msgstr "" " -d, --createdb l'utilisateur peut créer des bases de\n" " données\n" -#: createuser.c:352 +#: createuser.c:356 #, c-format msgid " -D, --no-createdb role cannot create databases (default)\n" msgstr "" " -D, --no-createdb le rôle ne peut pas créer de bases de\n" " données (par défaut)\n" -#: createuser.c:354 +#: createuser.c:358 #, c-format msgid " -g, --role=ROLE new role will be a member of this role\n" msgstr " -g, --role=ROLE le nouveau rôle sera un membre de ce rôle\n" -#: createuser.c:355 +#: createuser.c:359 #, c-format msgid "" " -i, --inherit role inherits privileges of roles it is a\n" @@ -557,47 +542,47 @@ msgstr "" " -i, --inherit le rôle hérite des droits des rôles dont il\n" " est membre (par défaut)\n" -#: createuser.c:357 +#: createuser.c:361 #, c-format msgid " -I, --no-inherit role does not inherit privileges\n" msgstr " -I, --no-inherit le rôle n'hérite pas des droits\n" -#: createuser.c:358 +#: createuser.c:362 #, c-format msgid " -l, --login role can login (default)\n" msgstr " -l, --login le rôle peut se connecter (par défaut)\n" -#: createuser.c:359 +#: createuser.c:363 #, c-format msgid " -L, --no-login role cannot login\n" msgstr " -L, --no-login le rôle ne peut pas se connecter\n" -#: createuser.c:360 +#: createuser.c:364 #, c-format msgid " -P, --pwprompt assign a password to new role\n" msgstr " -P, --pwprompt affecte un mot de passe au nouveau rôle\n" -#: createuser.c:361 +#: createuser.c:365 #, c-format msgid " -r, --createrole role can create new roles\n" msgstr " -r, --createrole le rôle peut créer des rôles\n" -#: createuser.c:362 +#: createuser.c:366 #, c-format msgid " -R, --no-createrole role cannot create roles (default)\n" msgstr " -R, --no-createrole le rôle ne peut pas créer de rôles (par défaut)\n" -#: createuser.c:363 +#: createuser.c:367 #, c-format msgid " -s, --superuser role will be superuser\n" msgstr " -s, --superuser le rôle est super-utilisateur\n" -#: createuser.c:364 +#: createuser.c:368 #, c-format msgid " -S, --no-superuser role will not be superuser (default)\n" msgstr " -S, --no-superuser le rôle ne sera pas super-utilisateur (par défaut)\n" -#: createuser.c:366 +#: createuser.c:370 #, c-format msgid "" " --interactive prompt for missing role name and attributes rather\n" @@ -606,47 +591,47 @@ msgstr "" " --interactive demande le nom du rôle et les attributs\n" " plutôt qu'utiliser des valeurs par défaut\n" -#: createuser.c:368 +#: createuser.c:372 #, c-format msgid " --replication role can initiate replication\n" msgstr "" " --replication le rôle peut initier une connexion de\n" " réplication\n" -#: createuser.c:369 +#: createuser.c:373 #, c-format msgid " --no-replication role cannot initiate replication\n" msgstr "" " --no-replication le rôle ne peut pas initier de connexion de\n" " réplication\n" -#: createuser.c:374 +#: createuser.c:378 #, c-format msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n" msgstr "" " -U, --username=NOMUTILISATEUR nom de l'utilisateur pour la connexion (pas\n" " celui à créer)\n" -#: dropdb.c:109 +#: dropdb.c:111 #, c-format msgid "missing required argument database name" msgstr "argument nom de la base de données requis mais manquant" -#: dropdb.c:124 +#: dropdb.c:126 #, c-format msgid "Database \"%s\" will be permanently removed.\n" msgstr "La base de données « %s » sera définitivement supprimée.\n" -#: dropdb.c:125 dropuser.c:130 +#: dropdb.c:127 dropuser.c:130 msgid "Are you sure?" msgstr "Êtes-vous sûr ?" -#: dropdb.c:149 +#: dropdb.c:156 #, c-format msgid "database removal failed: %s" msgstr "la suppression de la base de données a échoué : %s" -#: dropdb.c:163 +#: dropdb.c:170 #, c-format msgid "" "%s removes a PostgreSQL database.\n" @@ -655,31 +640,31 @@ msgstr "" "%s supprime une base de données PostgreSQL.\n" "\n" -#: dropdb.c:165 +#: dropdb.c:172 #, c-format msgid " %s [OPTION]... DBNAME\n" msgstr " %s [OPTION]... NOMBASE\n" -#: dropdb.c:168 +#: dropdb.c:175 #, c-format msgid " -f, --force try to terminate other connections before dropping\n" msgstr " -f, --force essaie d'arrêter les autres connexions avant de supprimer\n" -#: dropdb.c:169 +#: dropdb.c:176 #, c-format msgid " -i, --interactive prompt before deleting anything\n" msgstr "" " -i, --interactive demande confirmation avant de supprimer quoi que\n" " ce soit\n" -#: dropdb.c:171 +#: dropdb.c:178 #, c-format msgid " --if-exists don't report error if database doesn't exist\n" msgstr "" " --if-exists ne renvoie pas d'erreur si la base\n" " n'existe pas\n" -#: dropuser.c:115 +#: dropuser.c:117 msgid "Enter name of role to drop: " msgstr "Saisir le nom du rôle à supprimer : " @@ -693,12 +678,12 @@ msgstr "argument nom du rôle requis mais manquant" msgid "Role \"%s\" will be permanently removed.\n" msgstr "Le rôle « %s » sera définitivement supprimé.\n" -#: dropuser.c:147 +#: dropuser.c:153 #, c-format msgid "removal of role \"%s\" failed: %s" msgstr "la suppression du rôle « %s » a échoué : %s" -#: dropuser.c:162 +#: dropuser.c:168 #, c-format msgid "" "%s removes a PostgreSQL role.\n" @@ -707,7 +692,7 @@ msgstr "" "%s supprime un rôle PostgreSQL.\n" "\n" -#: dropuser.c:167 +#: dropuser.c:173 #, c-format msgid "" " -i, --interactive prompt before deleting anything, and prompt for\n" @@ -717,56 +702,56 @@ msgstr "" " ce soit, et demande le nom du rôle s'il n'est pas\n" " indiqué\n" -#: dropuser.c:170 +#: dropuser.c:176 #, c-format msgid " --if-exists don't report error if user doesn't exist\n" msgstr "" " --if-exists ne renvoie pas d'erreur si l'utilisateur\n" " n'existe pas\n" -#: dropuser.c:175 +#: dropuser.c:181 #, c-format msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n" msgstr "" " -U, --username=NOMUTILISATEUR nom de l'utilisateur pour la connexion (pas\n" " celui à supprimer)\n" -#: pg_isready.c:144 +#: pg_isready.c:145 #, c-format msgid "%s" msgstr "%s" -#: pg_isready.c:152 +#: pg_isready.c:153 #, c-format msgid "could not fetch default options" msgstr "n'a pas pu récupérer les options par défaut" -#: pg_isready.c:201 +#: pg_isready.c:202 #, c-format msgid "accepting connections\n" msgstr "acceptation des connexions\n" -#: pg_isready.c:204 +#: pg_isready.c:205 #, c-format msgid "rejecting connections\n" msgstr "rejet des connexions\n" -#: pg_isready.c:207 +#: pg_isready.c:208 #, c-format msgid "no response\n" msgstr "pas de réponse\n" -#: pg_isready.c:210 +#: pg_isready.c:211 #, c-format msgid "no attempt\n" msgstr "pas de tentative\n" -#: pg_isready.c:213 +#: pg_isready.c:214 #, c-format msgid "unknown\n" msgstr "inconnu\n" -#: pg_isready.c:223 +#: pg_isready.c:224 #, c-format msgid "" "%s issues a connection check to a PostgreSQL database.\n" @@ -775,152 +760,152 @@ msgstr "" "%s produitun test de connexion à une base de données PostgreSQL.\n" "\n" -#: pg_isready.c:225 +#: pg_isready.c:226 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" -#: pg_isready.c:228 +#: pg_isready.c:229 #, c-format msgid " -d, --dbname=DBNAME database name\n" msgstr " -d, --dbname=NOMBASE base de données\n" -#: pg_isready.c:229 +#: pg_isready.c:230 #, c-format msgid " -q, --quiet run quietly\n" msgstr " -q, --quiet s'exécute sans affichage\n" -#: pg_isready.c:230 +#: pg_isready.c:231 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: pg_isready.c:231 +#: pg_isready.c:232 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: pg_isready.c:234 +#: pg_isready.c:235 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=NOMHÔTE hôte du serveur de bases de données ou\n" " répertoire des sockets\n" -#: pg_isready.c:235 +#: pg_isready.c:236 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT port du serveur de bases de données\n" -#: pg_isready.c:236 +#: pg_isready.c:237 #, c-format msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n" msgstr "" " -t, --timeout=SECS durée en secondes à attendre lors d'une tentative de connexion\n" " 0 pour désactiver (défaut: %s)\n" -#: pg_isready.c:237 +#: pg_isready.c:238 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=NOMUTILISATEUR nom d'utilisateur pour la connexion\n" -#: reindexdb.c:154 vacuumdb.c:186 +#: reindexdb.c:157 vacuumdb.c:195 #, c-format msgid "number of parallel jobs must be at least 1" msgstr "le nombre maximum de jobs en parallèle doit être au moins de 1" -#: reindexdb.c:197 +#: reindexdb.c:210 #, c-format msgid "cannot reindex all databases and a specific one at the same time" msgstr "ne peut pas réindexer toutes les bases de données et une base spécifique en même temps" -#: reindexdb.c:202 +#: reindexdb.c:215 #, c-format msgid "cannot reindex all databases and system catalogs at the same time" msgstr "ne peut pas réindexer toutes les bases de données et les catalogues système en même temps" -#: reindexdb.c:207 +#: reindexdb.c:220 #, c-format msgid "cannot reindex specific schema(s) in all databases" msgstr "ne peut pas réindexer un (des) schéma(s) spécifique(s) dans toutes les bases de données" -#: reindexdb.c:212 +#: reindexdb.c:225 #, c-format msgid "cannot reindex specific table(s) in all databases" msgstr "ne peut pas réindexer une (des) table(s) spécifique(s) dans toutes les bases de données" -#: reindexdb.c:217 +#: reindexdb.c:230 #, c-format msgid "cannot reindex specific index(es) in all databases" msgstr "ne peut pas réindexer un (des) index spécifique(s) dans toutes les bases de données" -#: reindexdb.c:229 +#: reindexdb.c:243 #, c-format msgid "cannot reindex specific schema(s) and system catalogs at the same time" msgstr "ne peut pas réindexer un (des) schéma(s) spécifique(s) et les catalogues système en même temps" -#: reindexdb.c:234 +#: reindexdb.c:248 #, c-format msgid "cannot reindex specific table(s) and system catalogs at the same time" msgstr "ne peut pas réindexer une (des) table(s) spécifique(s) etles catalogues système en même temps" -#: reindexdb.c:239 +#: reindexdb.c:253 #, c-format msgid "cannot reindex specific index(es) and system catalogs at the same time" msgstr "ne peut pas réindexer un (des) index spécifique(s) et les catalogues système en même temps" -#: reindexdb.c:245 +#: reindexdb.c:259 #, c-format msgid "cannot use multiple jobs to reindex system catalogs" msgstr "ne peut pas utiliser plusieurs jobs pour réindexer les catalogues systèmes" -#: reindexdb.c:272 +#: reindexdb.c:288 #, c-format msgid "cannot use multiple jobs to reindex indexes" msgstr "ne peut pas utiliser plusieurs jobs pour réindexer les index" -#: reindexdb.c:337 vacuumdb.c:410 vacuumdb.c:418 vacuumdb.c:425 vacuumdb.c:432 -#: vacuumdb.c:439 +#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:451 vacuumdb.c:459 vacuumdb.c:467 +#: vacuumdb.c:475 vacuumdb.c:483 vacuumdb.c:490 vacuumdb.c:497 vacuumdb.c:504 #, c-format msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s" msgstr "ne peut utiliser l'option « %s » sur des versions serveurs plus anciennes que PostgreSQL %s" -#: reindexdb.c:377 +#: reindexdb.c:401 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "ne peut pas réindexer les catalogues système de manière concurrente, ignore tout" -#: reindexdb.c:558 +#: reindexdb.c:605 #, c-format msgid "reindexing of database \"%s\" failed: %s" msgstr "la réindexation de la base de données « %s » a échoué : %s" -#: reindexdb.c:562 +#: reindexdb.c:609 #, c-format msgid "reindexing of index \"%s\" in database \"%s\" failed: %s" msgstr "la réindexation de l'index « %s » dans la base de données « %s » a échoué : %s" -#: reindexdb.c:566 +#: reindexdb.c:613 #, c-format msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s" msgstr "la réindexation du schéma « %s » dans la base de données « %s » a échoué : %s" -#: reindexdb.c:570 +#: reindexdb.c:617 #, c-format msgid "reindexing of system catalogs in database \"%s\" failed: %s" msgstr "la réindexation des catalogues systèmes dans la base de données « %s » a échoué : %s" -#: reindexdb.c:574 +#: reindexdb.c:621 #, c-format msgid "reindexing of table \"%s\" in database \"%s\" failed: %s" msgstr "la réindexation de la table « %s » dans la base de données « %s » a échoué : %s" -#: reindexdb.c:731 +#: reindexdb.c:774 #, c-format msgid "%s: reindexing database \"%s\"\n" msgstr "%s : réindexation de la base de données « %s »\n" -#: reindexdb.c:752 +#: reindexdb.c:791 #, c-format msgid "" "%s reindexes a PostgreSQL database.\n" @@ -929,49 +914,64 @@ msgstr "" "%s réindexe une base de données PostgreSQL.\n" "\n" -#: reindexdb.c:756 +#: reindexdb.c:795 #, c-format -msgid " -a, --all reindex all databases\n" +msgid " -a, --all reindex all databases\n" msgstr " -a, --all réindexe toutes les bases de données\n" -#: reindexdb.c:757 +#: reindexdb.c:796 #, c-format -msgid " --concurrently reindex concurrently\n" +msgid " --concurrently reindex concurrently\n" msgstr " --concurrently réindexation en concurrence\n" -#: reindexdb.c:758 +#: reindexdb.c:797 #, c-format -msgid " -d, --dbname=DBNAME database to reindex\n" +msgid " -d, --dbname=DBNAME database to reindex\n" msgstr " -d, --dbname=NOMBASE base de données à réindexer\n" -#: reindexdb.c:760 +#: reindexdb.c:799 #, c-format -msgid " -i, --index=INDEX recreate specific index(es) only\n" +msgid " -i, --index=INDEX recreate specific index(es) only\n" msgstr " -i, --index=INDEX recrée uniquement cet (ces) index\n" -#: reindexdb.c:761 +#: reindexdb.c:800 #, c-format -msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n" +msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n" msgstr "" " -j, --jobs=NUM utilise ce nombre de connexions concurrentes pour\n" -" le REINDEX\n" +" l'opération de réindexation\n" + +#: reindexdb.c:801 +#, c-format +msgid " -q, --quiet don't write any messages\n" +msgstr " -q, --quiet n'écrit aucun message\n" -#: reindexdb.c:763 +#: reindexdb.c:802 #, c-format -msgid " -s, --system reindex system catalogs\n" +msgid " -s, --system reindex system catalogs\n" msgstr " -s, --system réindexe les catalogues système\n" -#: reindexdb.c:764 +#: reindexdb.c:803 #, c-format -msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" +msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" msgstr " -S, --schema=SCHEMA réindexe seulement le(s) schéma(s) indiqué(s)\n" -#: reindexdb.c:765 +#: reindexdb.c:804 #, c-format -msgid " -t, --table=TABLE reindex specific table(s) only\n" +msgid " -t, --table=TABLE reindex specific table(s) only\n" msgstr " -t, --table=TABLE réindexe uniquement cette (ces) table(s)\n" -#: reindexdb.c:776 +#: reindexdb.c:805 +#, c-format +msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n" +msgstr " -D, --tablespace=TABLESPACE tablespace où les index seront reconstruits\n" + +#: reindexdb.c:806 +#, c-format +msgid " -v, --verbose write a lot of output\n" +msgstr " -v, --verbose mode verbeux\n" + +#: reindexdb.c:816 #, c-format msgid "" "\n" @@ -980,74 +980,75 @@ msgstr "" "\n" "Lire la description de la commande SQL REINDEX pour plus d'informations.\n" -#: vacuumdb.c:194 +#: vacuumdb.c:203 #, c-format msgid "parallel vacuum degree must be a non-negative integer" msgstr "le degré de parallélisation du VACUUM doit être un entier non négatif" -#: vacuumdb.c:214 +#: vacuumdb.c:223 #, c-format msgid "minimum transaction ID age must be at least 1" msgstr "l'identifiant de la transaction (-x) doit valoir au moins 1" -#: vacuumdb.c:222 +#: vacuumdb.c:231 #, c-format msgid "minimum multixact ID age must be at least 1" msgstr "l'âge minimum de l'identifiant de multitransaction doit au moins être 1" -#: vacuumdb.c:254 vacuumdb.c:260 vacuumdb.c:266 vacuumdb.c:278 +#: vacuumdb.c:272 vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 +#: vacuumdb.c:302 vacuumdb.c:314 #, c-format msgid "cannot use the \"%s\" option when performing only analyze" msgstr "ne peut pas utiliser l'option « %s » lors de l'exécution d'un ANALYZE seul" -#: vacuumdb.c:284 +#: vacuumdb.c:320 #, c-format -msgid "cannot use the \"%s\" option when performing full" -msgstr "ne peut pas utiliser l'option « %s » lors de l'exécution d'un full" +msgid "cannot use the \"%s\" option when performing full vacuum" +msgstr "ne peut pas utiliser l'option « %s » lors de l'exécution d'un VACUUM FULL" -#: vacuumdb.c:300 +#: vacuumdb.c:343 #, c-format msgid "cannot vacuum all databases and a specific one at the same time" msgstr "ne peut pas exécuter VACUUM sur toutes les bases de données et sur une base spécifique en même temps" -#: vacuumdb.c:305 +#: vacuumdb.c:348 #, c-format msgid "cannot vacuum specific table(s) in all databases" msgstr "ne peut pas exécuter VACUUM sur une(des) table(s) spécifique(s) dans toutes les bases de données" -#: vacuumdb.c:396 +#: vacuumdb.c:438 msgid "Generating minimal optimizer statistics (1 target)" msgstr "Génération de statistiques minimales pour l'optimiseur (une cible)" -#: vacuumdb.c:397 +#: vacuumdb.c:439 msgid "Generating medium optimizer statistics (10 targets)" msgstr "Génération de statistiques moyennes pour l'optimiseur (dix cibles)" -#: vacuumdb.c:398 +#: vacuumdb.c:440 msgid "Generating default (full) optimizer statistics" msgstr "Génération de statistiques complètes pour l'optimiseur" -#: vacuumdb.c:447 +#: vacuumdb.c:512 #, c-format msgid "%s: processing database \"%s\": %s\n" msgstr "%s : traitement de la base de données « %s » %s\n" -#: vacuumdb.c:450 +#: vacuumdb.c:515 #, c-format msgid "%s: vacuuming database \"%s\"\n" msgstr "%s : exécution de VACUUM sur la base de données « %s »\n" -#: vacuumdb.c:909 +#: vacuumdb.c:976 #, c-format msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s" msgstr "l'exécution de VACUUM sur la table « %s » dans la base de données « %s » a échoué : %s" -#: vacuumdb.c:912 +#: vacuumdb.c:979 #, c-format msgid "vacuuming of database \"%s\" failed: %s" msgstr "l'exécution de VACUUM sur la base de données « %s » a échoué : %s" -#: vacuumdb.c:920 +#: vacuumdb.c:987 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -1056,100 +1057,115 @@ msgstr "" "%s nettoie et analyse une base de données PostgreSQL.\n" "\n" -#: vacuumdb.c:924 +#: vacuumdb.c:991 #, c-format msgid " -a, --all vacuum all databases\n" msgstr "" " -a, --all exécute VACUUM sur toutes les bases de\n" " données\n" -#: vacuumdb.c:925 +#: vacuumdb.c:992 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=NOMBASE exécute VACUUM sur cette base de données\n" -#: vacuumdb.c:926 +#: vacuumdb.c:993 #, c-format msgid " --disable-page-skipping disable all page-skipping behavior\n" msgstr " --disable-page-skipping désactive le comportement page-skipping\n" -#: vacuumdb.c:927 +#: vacuumdb.c:994 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo affiche les commandes envoyées au serveur\n" -#: vacuumdb.c:928 +#: vacuumdb.c:995 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full exécute VACUUM en mode FULL\n" -#: vacuumdb.c:929 +#: vacuumdb.c:996 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr "" " -F, --freeze gèle les informations de transactions des\n" " lignes\n" -#: vacuumdb.c:930 +#: vacuumdb.c:997 #, c-format msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n" msgstr "" " -j, --jobs=NUMERO utilise ce nombre de connexions concurrentes pour\n" " le VACUUM\n" -#: vacuumdb.c:931 +#: vacuumdb.c:998 #, c-format msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n" msgstr " --min-mxid-age=MXID_AGE âge minimum des identifiants de multitransactions pour les tables à nettoyer\n" -#: vacuumdb.c:932 +#: vacuumdb.c:999 #, c-format msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n" msgstr " --min-xid-age=XID_AGE âge minimum des identifiants de transactions pour les tables à nettoyer\n" -#: vacuumdb.c:933 +#: vacuumdb.c:1000 +#, c-format +msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n" +msgstr " --no-index-cleanup ne supprime pas les enregistrements dans l'index pointant vers des lignes mortes\n" + +#: vacuumdb.c:1001 +#, c-format +msgid " --no-process-toast skip the TOAST table associated with the table to vacuum\n" +msgstr " --no-process-toast ignore la table TOAST associée à la table à traiter\n" + +#: vacuumdb.c:1002 +#, c-format +msgid " --no-truncate don't truncate empty pages at the end of the table\n" +msgstr " --no-truncate ni supprime pas les pages vides à la fin de la table\n" + +#: vacuumdb.c:1003 #, c-format msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n" msgstr " -P, --parallel=DEGRE_PARALLEL utilise ce nombre de processus en tâche de fond pour le VACUUM, si possible\n" -#: vacuumdb.c:934 +#: vacuumdb.c:1004 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet n'écrit aucun message\n" -#: vacuumdb.c:935 +#: vacuumdb.c:1005 #, c-format msgid " --skip-locked skip relations that cannot be immediately locked\n" msgstr " --skip-locked ignore les relations qui ne peuvent pas être verrouillées immédiatement\n" -#: vacuumdb.c:936 +#: vacuumdb.c:1006 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr " -t, --table='TABLE[(COLONNES)]' exécute VACUUM sur cette (ces) tables\n" -#: vacuumdb.c:937 +#: vacuumdb.c:1007 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose mode verbeux\n" -#: vacuumdb.c:938 +#: vacuumdb.c:1008 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: vacuumdb.c:939 +#: vacuumdb.c:1009 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze met à jour les statistiques de l'optimiseur\n" -#: vacuumdb.c:940 +#: vacuumdb.c:1010 #, c-format msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n" msgstr "" " -Z, --analyze-only met seulement à jour les statistiques de\n" " l'optimiseur ; pas de VACUUM\n" -#: vacuumdb.c:941 +#: vacuumdb.c:1011 #, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in multiple\n" @@ -1159,12 +1175,12 @@ msgstr "" " l'optimiseur, en plusieurs étapes pour de\n" " meilleurs résultats ; pas de VACUUM\n" -#: vacuumdb.c:943 +#: vacuumdb.c:1013 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: vacuumdb.c:951 +#: vacuumdb.c:1021 #, c-format msgid "" "\n" @@ -1173,162 +1189,171 @@ msgstr "" "\n" "Lire la description de la commande SQL VACUUM pour plus d'informations.\n" -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Rapporter les bogues à .\n" - -#~ msgid "Cancel request sent\n" -#~ msgstr "Requête d'annulation envoyée\n" - #~ msgid "Could not send cancel request: %s" #~ msgstr "N'a pas pu envoyer la requête d'annulation : %s" -#~ msgid "reindexing of system catalogs failed: %s" -#~ msgstr "la réindexation des catalogues système a échoué : %s" +#~ msgid "Password: " +#~ msgstr "Mot de passe : " -#~ msgid "too many jobs for this platform -- try %d" -#~ msgstr "trop de jobs pour cette plateforme -- tente %d" +#~ msgid "could not connect to database %s: out of memory" +#~ msgstr "n'a pas pu se connecter à la base de données %s : plus de mémoire" -#~ msgid "%s: invalid socket: %s" -#~ msgstr "%s : socket invalide : %s" +#~ msgid "could not connect to database %s: %s" +#~ msgstr "n'a pas pu se connecter à la base de données %s : %s" -#~ msgid "%s: could not obtain information about current user: %s\n" -#~ msgstr "%s : n'a pas pu obtenir les informations concernant l'utilisateur actuel : %s\n" +#~ msgid "query failed: %s" +#~ msgstr "échec de la requête : %s" -#~ msgid "%s: could not get current user name: %s\n" -#~ msgstr "%s : n'a pas pu récupérer le nom de l'utilisateur actuel : %s\n" +#~ msgid "query was: %s" +#~ msgstr "la requête était : %s" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version et quitte\n" +#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" +#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide et quitte\n" +#~ msgid "%s: query failed: %s" +#~ msgstr "%s : échec de la requête : %s" -#~ msgid "%s: still %s functions declared in language \"%s\"; language not removed\n" -#~ msgstr "" -#~ "%s : il existe encore %s fonctions déclarées dans le langage « %s » ;\n" -#~ "langage non supprimé\n" +#~ msgid "%s: query was: %s\n" +#~ msgstr "%s : la requête était : %s\n" -#~ msgid "" -#~ "\n" -#~ "If one of -d, -D, -r, -R, -s, -S, and ROLENAME is not specified, you will\n" -#~ "be prompted interactively.\n" -#~ msgstr "" -#~ "\n" -#~ "Si une des options -d, -D, -r, -R, -s, -S et NOMROLE n'est pas précisée,\n" -#~ "elle sera demandée interactivement.\n" +#~ msgid "%s: query returned %d row instead of one: %s\n" +#~ msgid_plural "%s: query returned %d rows instead of one: %s\n" +#~ msgstr[0] "%s : la requête a renvoyé %d ligne au lieu d'une seule : %s\n" +#~ msgstr[1] "%s : la requête a renvoyé %d lignes au lieu d'une seule : %s\n" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version et quitte\n" +#~ msgid "%s: \"%s\" is not a valid encoding name\n" +#~ msgstr "%s : « %s » n'est pas un nom d'encodage valide\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide et quitte\n" +#~ msgid "%s: %s" +#~ msgstr "%s : %s" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version et quitte\n" +#~ msgid "%s: too many parallel jobs requested (maximum: %d)\n" +#~ msgstr "%s : trop de jobs en parallèle demandés (maximum %d)\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide et quitte\n" +#~ msgid "Name" +#~ msgstr "Nom" -#~ msgid "pg_strdup: cannot duplicate null pointer (internal error)\n" -#~ msgstr "pg_strdup : ne peut pas dupliquer un pointeur nul (erreur interne)\n" +#~ msgid "no" +#~ msgstr "non" -#~ msgid "%s: out of memory\n" -#~ msgstr "%s : mémoire épuisée\n" +#~ msgid "yes" +#~ msgstr "oui" -#~ msgid "%s: cannot use the \"freeze\" option when performing only analyze\n" -#~ msgstr "" -#~ "%s : ne peut utiliser l'option « freeze » lors de l'exécution d'un ANALYZE\n" -#~ "seul\n" +#~ msgid "Trusted?" +#~ msgstr "De confiance (trusted) ?" -#~ msgid " -d, --dbname=DBNAME database from which to remove the language\n" -#~ msgstr "" -#~ " -d, --dbname=NOMBASE base de données à partir de laquelle\n" -#~ " supprimer le langage\n" +#~ msgid "Procedural Languages" +#~ msgstr "Langages procéduraux" + +#~ msgid "%s: missing required argument language name\n" +#~ msgstr "%s : argument nom du langage requis mais manquant\n" + +#~ msgid "%s: language \"%s\" is already installed in database \"%s\"\n" +#~ msgstr "%s : le langage « %s » est déjà installé sur la base de données « %s »\n" + +#~ msgid "%s: language installation failed: %s" +#~ msgstr "%s : l'installation du langage a échoué : %s" #~ msgid "" -#~ "%s removes a procedural language from a database.\n" +#~ "%s installs a procedural language into a PostgreSQL database.\n" #~ "\n" #~ msgstr "" -#~ "%s supprime un langage procédural d'une base de données.\n" +#~ "%s installe un langage de procédures dans une base de données PostgreSQL.\n" #~ "\n" -#~ msgid "%s: language removal failed: %s" -#~ msgstr "%s : la suppression du langage a échoué : %s" - -#~ msgid "%s: language \"%s\" is not installed in database \"%s\"\n" -#~ msgstr "%s : le langage « %s » n'est pas installé dans la base de données « %s »\n" - -#~ msgid " -N, --unencrypted do not encrypt stored password\n" -#~ msgstr " -N, --unencrypted ne chiffre pas le mot de passe stocké\n" +#~ msgid " %s [OPTION]... LANGNAME [DBNAME]\n" +#~ msgstr " %s [OPTION]... NOMLANGAGE [NOMBASE]\n" -#~ msgid " -E, --encrypted encrypt stored password\n" -#~ msgstr " -E, --encrypted chiffre le mot de passe stocké\n" +#~ msgid " -d, --dbname=DBNAME database to install language in\n" +#~ msgstr " -d, --dbname=NOMBASE base sur laquelle installer le langage\n" #~ msgid " -l, --list show a list of currently installed languages\n" #~ msgstr "" #~ " -l, --list affiche la liste des langages déjà\n" #~ " installés\n" -#~ msgid " -d, --dbname=DBNAME database to install language in\n" -#~ msgstr " -d, --dbname=NOMBASE base sur laquelle installer le langage\n" +#~ msgid " -E, --encrypted encrypt stored password\n" +#~ msgstr " -E, --encrypted chiffre le mot de passe stocké\n" -#~ msgid " %s [OPTION]... LANGNAME [DBNAME]\n" -#~ msgstr " %s [OPTION]... NOMLANGAGE [NOMBASE]\n" +#~ msgid " -N, --unencrypted do not encrypt stored password\n" +#~ msgstr " -N, --unencrypted ne chiffre pas le mot de passe stocké\n" + +#~ msgid "%s: language \"%s\" is not installed in database \"%s\"\n" +#~ msgstr "%s : le langage « %s » n'est pas installé dans la base de données « %s »\n" + +#~ msgid "%s: language removal failed: %s" +#~ msgstr "%s : la suppression du langage a échoué : %s" #~ msgid "" -#~ "%s installs a procedural language into a PostgreSQL database.\n" +#~ "%s removes a procedural language from a database.\n" #~ "\n" #~ msgstr "" -#~ "%s installe un langage de procédures dans une base de données PostgreSQL.\n" +#~ "%s supprime un langage procédural d'une base de données.\n" #~ "\n" -#~ msgid "%s: language installation failed: %s" -#~ msgstr "%s : l'installation du langage a échoué : %s" +#~ msgid " -d, --dbname=DBNAME database from which to remove the language\n" +#~ msgstr "" +#~ " -d, --dbname=NOMBASE base de données à partir de laquelle\n" +#~ " supprimer le langage\n" -#~ msgid "%s: language \"%s\" is already installed in database \"%s\"\n" -#~ msgstr "%s : le langage « %s » est déjà installé sur la base de données « %s »\n" +#~ msgid "%s: cannot use the \"freeze\" option when performing only analyze\n" +#~ msgstr "" +#~ "%s : ne peut utiliser l'option « freeze » lors de l'exécution d'un ANALYZE\n" +#~ "seul\n" -#~ msgid "%s: missing required argument language name\n" -#~ msgstr "%s : argument nom du langage requis mais manquant\n" +#~ msgid "%s: out of memory\n" +#~ msgstr "%s : mémoire épuisée\n" -#~ msgid "Procedural Languages" -#~ msgstr "Langages procéduraux" +#~ msgid "pg_strdup: cannot duplicate null pointer (internal error)\n" +#~ msgstr "pg_strdup : ne peut pas dupliquer un pointeur nul (erreur interne)\n" -#~ msgid "Trusted?" -#~ msgstr "De confiance (trusted) ?" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help affiche cette aide et quitte\n" -#~ msgid "yes" -#~ msgstr "oui" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version affiche la version et quitte\n" -#~ msgid "no" -#~ msgstr "non" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help affiche cette aide et quitte\n" -#~ msgid "Name" -#~ msgstr "Nom" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version affiche la version et quitte\n" -#~ msgid "%s: too many parallel jobs requested (maximum: %d)\n" -#~ msgstr "%s : trop de jobs en parallèle demandés (maximum %d)\n" +#~ msgid "" +#~ "\n" +#~ "If one of -d, -D, -r, -R, -s, -S, and ROLENAME is not specified, you will\n" +#~ "be prompted interactively.\n" +#~ msgstr "" +#~ "\n" +#~ "Si une des options -d, -D, -r, -R, -s, -S et NOMROLE n'est pas précisée,\n" +#~ "elle sera demandée interactivement.\n" -#~ msgid "%s: %s" -#~ msgstr "%s : %s" +#~ msgid "%s: still %s functions declared in language \"%s\"; language not removed\n" +#~ msgstr "" +#~ "%s : il existe encore %s fonctions déclarées dans le langage « %s » ;\n" +#~ "langage non supprimé\n" -#~ msgid "%s: \"%s\" is not a valid encoding name\n" -#~ msgstr "%s : « %s » n'est pas un nom d'encodage valide\n" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help affiche cette aide et quitte\n" -#~ msgid "%s: query returned %d row instead of one: %s\n" -#~ msgid_plural "%s: query returned %d rows instead of one: %s\n" -#~ msgstr[0] "%s : la requête a renvoyé %d ligne au lieu d'une seule : %s\n" -#~ msgstr[1] "%s : la requête a renvoyé %d lignes au lieu d'une seule : %s\n" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version affiche la version et quitte\n" -#~ msgid "%s: query was: %s\n" -#~ msgstr "%s : la requête était : %s\n" +#~ msgid "%s: could not get current user name: %s\n" +#~ msgstr "%s : n'a pas pu récupérer le nom de l'utilisateur actuel : %s\n" -#~ msgid "%s: query failed: %s" -#~ msgstr "%s : échec de la requête : %s" +#~ msgid "%s: could not obtain information about current user: %s\n" +#~ msgstr "%s : n'a pas pu obtenir les informations concernant l'utilisateur actuel : %s\n" -#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" -#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" +#~ msgid "%s: invalid socket: %s" +#~ msgstr "%s : socket invalide : %s" + +#~ msgid "reindexing of system catalogs failed: %s" +#~ msgstr "la réindexation des catalogues système a échoué : %s" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Rapporter les bogues à .\n" diff --git a/src/bin/scripts/po/ja.po b/src/bin/scripts/po/ja.po index 2ad83ef458b06..746593a4c0360 100644 --- a/src/bin/scripts/po/ja.po +++ b/src/bin/scripts/po/ja.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: scripts (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: scripts (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-06-06 10:43+0900\n" -"PO-Revision-Date: 2019-06-10 18:17+0900\n" +"POT-Creation-Date: 2020-08-21 15:56+0900\n" +"PO-Revision-Date: 2020-09-13 08:58+0200\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: jpug-doc \n" "Language: ja\n" @@ -15,30 +15,30 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:241 #, c-format msgid "fatal: " msgstr "致命的エラー: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:248 #, c-format msgid "error: " msgstr "エラー: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:255 #, c-format msgid "warning: " msgstr "警告: " #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "メモリ不足です\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "nullポインタを複製できません(内部エラー)。\n" @@ -57,105 +57,105 @@ msgstr "ユーザが存在しません" msgid "user name lookup failure: error code %lu" msgstr "ユーザ名の検索に失敗: エラーコード%lu" -#: ../../fe_utils/print.c:353 +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "キャンセル要求を送信しました\n" + +#: ../../fe_utils/cancel.c:165 +msgid "Could not send cancel request: " +msgstr "キャンセル要求を送信できませんでした: " + +#: ../../fe_utils/cancel.c:210 +#, c-format +msgid "Could not send cancel request: %s" +msgstr "キャンセル要求を送信できませんでした: %s" + +#: ../../fe_utils/print.c:336 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu 行)" msgstr[1] "(%lu 行)" -#: ../../fe_utils/print.c:3058 +#: ../../fe_utils/print.c:3039 #, c-format msgid "Interrupted\n" msgstr "中断されました\n" -#: ../../fe_utils/print.c:3122 +#: ../../fe_utils/print.c:3103 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" -msgstr "" -"テーブルの内容に見出しを追加できませんでした:列数%dが制限を越えています。\n" +msgstr "テーブルの内容に見出しを追加できませんでした:列数%dが制限を越えています。\n" -#: ../../fe_utils/print.c:3162 +#: ../../fe_utils/print.c:3143 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" -msgstr "" -"テーブルの内容にセルを追加できませんでした:全セル数%dが制限を越えていま" -"す。\n" +msgstr "テーブルの内容にセルを追加できませんでした:全セル数%dが制限を越えています。\n" -#: ../../fe_utils/print.c:3417 +#: ../../fe_utils/print.c:3398 #, c-format msgid "invalid output format (internal error): %d" msgstr "出力フォーマットが無効(内部エラー):%d" -#: clusterdb.c:113 clusterdb.c:132 createdb.c:121 createdb.c:140 -#: createuser.c:168 createuser.c:183 dropdb.c:96 dropdb.c:105 dropdb.c:113 -#: dropuser.c:92 dropuser.c:107 dropuser.c:122 pg_isready.c:95 -#: pg_isready.c:109 reindexdb.c:139 reindexdb.c:158 vacuumdb.c:246 -#: vacuumdb.c:265 +#: clusterdb.c:114 clusterdb.c:133 createdb.c:121 createdb.c:140 +#: createuser.c:171 createuser.c:186 dropdb.c:101 dropdb.c:110 dropdb.c:118 +#: dropuser.c:92 dropuser.c:107 dropuser.c:122 pg_isready.c:95 pg_isready.c:109 +#: reindexdb.c:168 reindexdb.c:187 vacuumdb.c:239 vacuumdb.c:258 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細は\"%s --help\"を実行してください。\n" -#: clusterdb.c:130 createdb.c:138 createuser.c:181 dropdb.c:111 dropuser.c:105 -#: pg_isready.c:107 reindexdb.c:156 vacuumdb.c:263 +#: clusterdb.c:131 createdb.c:138 createuser.c:184 dropdb.c:116 dropuser.c:105 +#: pg_isready.c:107 reindexdb.c:185 vacuumdb.c:256 #, c-format -#| msgid "%s: too many command-line arguments (first is \"%s\")\n" msgid "too many command-line arguments (first is \"%s\")" msgstr "コマンドライン引数が多すぎます。(先頭は\"%s\")" -#: clusterdb.c:142 +#: clusterdb.c:143 #, c-format -#| msgid "" -#| "%s: cannot cluster all databases and a specific one at the same time\n" msgid "cannot cluster all databases and a specific one at the same time" -msgstr "" -"全データベースと特定のデータベースを同時にクラスタ化することはできません" +msgstr "全データベースと特定のデータベースを同時にクラスタ化することはできません" -#: clusterdb.c:148 +#: clusterdb.c:149 #, c-format -#| msgid "%s: cannot cluster specific table(s) in all databases\n" msgid "cannot cluster specific table(s) in all databases" msgstr "すべてのデータベースの特定のテーブル(群)はクラスタ化できません" -#: clusterdb.c:216 +#: clusterdb.c:217 #, c-format -#| msgid "%s: clustering of table \"%s\" in database \"%s\" failed: %s" msgid "clustering of table \"%s\" in database \"%s\" failed: %s" msgstr "データベース\"%2$s\"のテーブル\"%1$s\"のクラスタ化に失敗しました: %3$s" -#: clusterdb.c:219 +#: clusterdb.c:220 #, c-format -#| msgid "%s: clustering of database \"%s\" failed: %s" msgid "clustering of database \"%s\" failed: %s" msgstr "データベース\"%s\"のクラスタ化に失敗しました: %s" -#: clusterdb.c:252 +#: clusterdb.c:253 #, c-format msgid "%s: clustering database \"%s\"\n" msgstr "%s: データベース\"%s\"をクラスタ化しています\n" -#: clusterdb.c:273 +#: clusterdb.c:274 #, c-format msgid "" "%s clusters all previously clustered tables in a database.\n" "\n" -msgstr "" -"%sはデータベース内で事前にクラスタ化されているすべてのテーブルをクラスタ化し" -"ます\n" +msgstr "%sはデータベース内で事前にクラスタ化されているすべてのテーブルをクラスタ化します\n" -#: clusterdb.c:274 createdb.c:250 createuser.c:344 dropdb.c:157 dropuser.c:163 -#: pg_isready.c:224 reindexdb.c:425 vacuumdb.c:1216 +#: clusterdb.c:275 createdb.c:259 createuser.c:347 dropdb.c:164 dropuser.c:163 +#: pg_isready.c:224 reindexdb.c:753 vacuumdb.c:975 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: clusterdb.c:275 reindexdb.c:426 vacuumdb.c:1217 +#: clusterdb.c:276 reindexdb.c:754 vacuumdb.c:976 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [オプション]... [データベース名]\n" -#: clusterdb.c:276 createdb.c:252 createuser.c:346 dropdb.c:159 dropuser.c:165 -#: pg_isready.c:227 reindexdb.c:427 vacuumdb.c:1218 +#: clusterdb.c:277 createdb.c:261 createuser.c:349 dropdb.c:166 dropuser.c:165 +#: pg_isready.c:227 reindexdb.c:755 vacuumdb.c:977 #, c-format msgid "" "\n" @@ -164,52 +164,48 @@ msgstr "" "\n" "オプション:\n" -#: clusterdb.c:277 +#: clusterdb.c:278 #, c-format msgid " -a, --all cluster all databases\n" msgstr " -a, --all すべてのデータベースをクラスタ化\n" -#: clusterdb.c:278 +#: clusterdb.c:279 #, c-format msgid " -d, --dbname=DBNAME database to cluster\n" msgstr " -d, --dbname=DBNAME クラスタ化するデータベース\n" -#: clusterdb.c:279 createuser.c:350 dropdb.c:160 dropuser.c:166 -#: reindexdb.c:431 +#: clusterdb.c:280 createuser.c:353 dropdb.c:167 dropuser.c:166 reindexdb.c:759 #, c-format -msgid "" -" -e, --echo show the commands being sent to the server\n" +msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo サーバへ送信されているコマンドを表示\n" -#: clusterdb.c:280 reindexdb.c:433 +#: clusterdb.c:281 reindexdb.c:762 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet メッセージを何も出力しない\n" -#: clusterdb.c:281 +#: clusterdb.c:282 #, c-format msgid " -t, --table=TABLE cluster specific table(s) only\n" msgstr " -t, --table=テーブル名 指定したテーブル(群)のみをクラスタ化する\n" -#: clusterdb.c:282 reindexdb.c:437 +#: clusterdb.c:283 reindexdb.c:766 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose 多くのメッセージを出力する\n" -#: clusterdb.c:283 createuser.c:362 dropdb.c:162 dropuser.c:169 -#: reindexdb.c:438 +#: clusterdb.c:284 createuser.c:365 dropdb.c:170 dropuser.c:169 reindexdb.c:767 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: clusterdb.c:284 createuser.c:367 dropdb.c:164 dropuser.c:171 -#: reindexdb.c:439 +#: clusterdb.c:285 createuser.c:370 dropdb.c:172 dropuser.c:171 reindexdb.c:768 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: clusterdb.c:285 createdb.c:263 createuser.c:368 dropdb.c:165 dropuser.c:172 -#: pg_isready.c:233 reindexdb.c:440 vacuumdb.c:1238 +#: clusterdb.c:286 createdb.c:272 createuser.c:371 dropdb.c:173 dropuser.c:172 +#: pg_isready.c:233 reindexdb.c:769 vacuumdb.c:1000 #, c-format msgid "" "\n" @@ -218,43 +214,41 @@ msgstr "" "\n" "接続オプション:\n" -#: clusterdb.c:286 createuser.c:369 dropdb.c:166 dropuser.c:173 -#: reindexdb.c:441 vacuumdb.c:1239 +#: clusterdb.c:287 createuser.c:372 dropdb.c:174 dropuser.c:173 reindexdb.c:770 +#: vacuumdb.c:1001 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" -msgstr "" -" -h, --host=HOSTNAME データベースサーバのホストまたはソケットディレク" -"トリ\n" +msgstr " -h, --host=HOSTNAME データベースサーバのホストまたはソケットディレクトリ\n" -#: clusterdb.c:287 createuser.c:370 dropdb.c:167 dropuser.c:174 -#: reindexdb.c:442 vacuumdb.c:1240 +#: clusterdb.c:288 createuser.c:373 dropdb.c:175 dropuser.c:174 reindexdb.c:771 +#: vacuumdb.c:1002 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT データベースサーバのポート番号\n" -#: clusterdb.c:288 dropdb.c:168 reindexdb.c:443 vacuumdb.c:1241 +#: clusterdb.c:289 dropdb.c:176 reindexdb.c:772 vacuumdb.c:1003 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USERNAME このユーザ名で接続する\n" -#: clusterdb.c:289 createuser.c:372 dropdb.c:169 dropuser.c:176 -#: reindexdb.c:444 vacuumdb.c:1242 +#: clusterdb.c:290 createuser.c:375 dropdb.c:177 dropuser.c:176 reindexdb.c:773 +#: vacuumdb.c:1004 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password パスワード入力を要求しない\n" -#: clusterdb.c:290 createuser.c:373 dropdb.c:170 dropuser.c:177 -#: reindexdb.c:445 vacuumdb.c:1243 +#: clusterdb.c:291 createuser.c:376 dropdb.c:178 dropuser.c:177 reindexdb.c:774 +#: vacuumdb.c:1005 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password パスワードプロンプトを強制表示する\n" -#: clusterdb.c:291 dropdb.c:171 reindexdb.c:446 vacuumdb.c:1244 +#: clusterdb.c:292 dropdb.c:179 reindexdb.c:775 vacuumdb.c:1006 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=DBNAME 別の保守用データベースを指定する\n" -#: clusterdb.c:292 +#: clusterdb.c:293 #, c-format msgid "" "\n" @@ -263,96 +257,87 @@ msgstr "" "\n" "詳細は SQL コマンドの CLUSTER の説明を参照してください。\n" -#: clusterdb.c:293 createdb.c:271 createuser.c:374 dropdb.c:172 dropuser.c:178 -#: pg_isready.c:238 reindexdb.c:448 vacuumdb.c:1246 +#: clusterdb.c:294 createdb.c:280 createuser.c:377 dropdb.c:180 dropuser.c:178 +#: pg_isready.c:238 reindexdb.c:777 vacuumdb.c:1008 #, c-format -#| msgid "" -#| "\n" -#| "Report bugs to .\n" msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"不具合はまで報告してください。\n" +"バグは<%s>に報告してください。\n" -#: common.c:84 common.c:130 +#: clusterdb.c:295 createdb.c:281 createuser.c:378 dropdb.c:181 dropuser.c:179 +#: pg_isready.c:239 reindexdb.c:778 vacuumdb.c:1009 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" + +#: common.c:79 common.c:125 msgid "Password: " msgstr "パスワード: " -#: common.c:117 +#: common.c:112 #, c-format -#| msgid "%s: could not connect to database %s: out of memory\n" msgid "could not connect to database %s: out of memory" msgstr "データベース%sに接続できませんでした: メモリ不足です" -#: common.c:144 +#: common.c:139 #, c-format -#| msgid "%s: could not connect to database %s: %s" msgid "could not connect to database %s: %s" msgstr "データベース%sに接続できませんでした: %s" -#: common.c:196 common.c:222 +#: common.c:214 common.c:239 #, c-format msgid "query failed: %s" msgstr "問い合わせが失敗しました: %s" -#: common.c:197 common.c:223 +#: common.c:215 common.c:240 #, c-format -#| msgid "query was: %s\n" msgid "query was: %s" msgstr "問い合わせ: %s" -#: common.c:339 +#: common.c:312 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "データベース\"%s\"の処理に失敗しました: %s" + +#: common.c:406 #, c-format -#| msgid "query returned %d row instead of one: %s\n" -#| msgid_plural "query returned %d rows instead of one: %s\n" msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" msgstr[0] "問い合わせが1行ではなく%d行返しました: %s" msgstr[1] "問い合わせが1行ではなく%d行返しました: %s" #. translator: abbreviation for "yes" -#: common.c:364 +#: common.c:430 msgid "y" msgstr "y" #. translator: abbreviation for "no" -#: common.c:366 +#: common.c:432 msgid "n" msgstr "n" #. translator: This is a question followed by the translated options for #. "yes" and "no". -#: common.c:376 +#: common.c:442 #, c-format msgid "%s (%s/%s) " msgstr "%s (%s/%s)" -#: common.c:390 +#: common.c:456 #, c-format msgid "Please answer \"%s\" or \"%s\".\n" msgstr " \"%s\" または \"%s\" に答えてください\n" -#: common.c:469 common.c:506 -#, c-format -msgid "Cancel request sent\n" -msgstr "キャンセル要求を送信しました\n" - -#: common.c:472 common.c:510 -#, c-format -msgid "Could not send cancel request: %s" -msgstr "キャンセル要求を送信できませんでした: %s" - #: createdb.c:148 #, c-format -#| msgid "%s: only one of --locale and --lc-ctype can be specified\n" msgid "only one of --locale and --lc-ctype can be specified" msgstr "--locale か --lc-ctype のいずれか一方のみを指定してください" #: createdb.c:153 #, c-format -#| msgid "%s: only one of --locale and --lc-collate can be specified\n" msgid "only one of --locale and --lc-collate can be specified" msgstr "--locale か --lc-collate のいずれか一方のみを指定してください" @@ -361,19 +346,17 @@ msgstr "--locale か --lc-collate のいずれか一方のみを指定してく msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\" は有効な符号化方式名ではありません" -#: createdb.c:212 +#: createdb.c:221 #, c-format -#| msgid "%s: database creation failed: %s" msgid "database creation failed: %s" msgstr "データベースの生成に失敗しました:%s" -#: createdb.c:231 +#: createdb.c:240 #, c-format -#| msgid "%s: comment creation failed (database was created): %s" msgid "comment creation failed (database was created): %s" msgstr "コメントの生成に失敗(データベースは生成されました): %s" -#: createdb.c:249 +#: createdb.c:258 #, c-format msgid "" "%s creates a PostgreSQL database.\n" @@ -382,99 +365,94 @@ msgstr "" "%sはPostgreSQLデータベースを生成します。\n" "\n" -#: createdb.c:251 +#: createdb.c:260 #, c-format msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n" msgstr " %s [オプション]... [データベース名] [説明]\n" -#: createdb.c:253 +#: createdb.c:262 #, c-format msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n" -msgstr "" -" -D, --tablespace=TABLESPACE データベースのデフォルトテーブルスペース名\n" +msgstr " -D, --tablespace=TABLESPACE データベースのデフォルトテーブルスペース名\n" -#: createdb.c:254 +#: createdb.c:263 #, c-format -msgid "" -" -e, --echo show the commands being sent to the server\n" +msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo サーバに送られるコマンドを表示\n" -#: createdb.c:255 +#: createdb.c:264 #, c-format msgid " -E, --encoding=ENCODING encoding for the database\n" msgstr " -E, --encoding=ENCODING データベースの符号化方式\n" -#: createdb.c:256 +#: createdb.c:265 #, c-format msgid " -l, --locale=LOCALE locale settings for the database\n" msgstr " -l, --locale=LOCALE データベースのロケール設定\n" -#: createdb.c:257 +#: createdb.c:266 #, c-format msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n" msgstr " --lc-collate=LOCALE データベースのLC_COLLATE設定\n" -#: createdb.c:258 +#: createdb.c:267 #, c-format msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n" msgstr " --lc-ctype=LOCALE データベースのLC_CTYPE設定\n" -#: createdb.c:259 +#: createdb.c:268 #, c-format msgid " -O, --owner=OWNER database user to own the new database\n" -msgstr "" -" -O, --owner=OWNER 新しいデータベースを所有するデータベースユー" -"ザ\n" +msgstr " -O, --owner=OWNER 新しいデータベースを所有するデータベースユーザ\n" -#: createdb.c:260 +#: createdb.c:269 #, c-format msgid " -T, --template=TEMPLATE template database to copy\n" msgstr " -T, --template=TEMPLATE コピーするテンプレートデータベース\n" -#: createdb.c:261 +#: createdb.c:270 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: createdb.c:262 +#: createdb.c:271 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: createdb.c:264 +#: createdb.c:273 #, c-format -msgid "" -" -h, --host=HOSTNAME database server host or socket directory\n" +msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=HOSTNAME データベースサーバホストまたはソケット\n" " ディレクトリ\n" -#: createdb.c:265 +#: createdb.c:274 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT データベースサーバのポート番号\n" -#: createdb.c:266 +#: createdb.c:275 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USERNAME 接続する際のユーザ名\n" -#: createdb.c:267 +#: createdb.c:276 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password パスワード入力を要求しない\n" -#: createdb.c:268 +#: createdb.c:277 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password パスワードプロンプトを強制\n" -#: createdb.c:269 +#: createdb.c:278 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=DBNAME 別の保守用データベースを指定する\n" -#: createdb.c:270 +#: createdb.c:279 #, c-format msgid "" "\n" @@ -483,48 +461,51 @@ msgstr "" "\n" "デフォルトでは、現在のユーザ名と同名のデータベースが生成されます\n" -#: createuser.c:191 +#: createuser.c:150 +#, c-format +msgid "invalid value for --connection-limit: %s" +msgstr "--connection-limit に対する不正な値: %s" + +#: createuser.c:194 msgid "Enter name of role to add: " msgstr "追加したいロール名を入力:" -#: createuser.c:208 +#: createuser.c:211 msgid "Enter password for new role: " msgstr "新しいロールのためのパスワード: " -#: createuser.c:210 +#: createuser.c:213 msgid "Enter it again: " msgstr "もう一度入力してください:" -#: createuser.c:213 +#: createuser.c:216 #, c-format msgid "Passwords didn't match.\n" msgstr "パスワードがマッチしません。\n" -#: createuser.c:221 +#: createuser.c:224 msgid "Shall the new role be a superuser?" msgstr "新しいロールをスーパユーザにしますか?" -#: createuser.c:236 +#: createuser.c:239 msgid "Shall the new role be allowed to create databases?" msgstr "新しいロールに対してデータベースを作成する権限を与えますか?" -#: createuser.c:244 +#: createuser.c:247 msgid "Shall the new role be allowed to create more new roles?" msgstr "新しいロールに対して別のロールを作成する権限を与えますか?" -#: createuser.c:274 +#: createuser.c:277 #, c-format -#| msgid "Password encryption failed.\n" msgid "password encryption failed: %s" msgstr "パスワードの暗号化に失敗しました: %s" -#: createuser.c:329 +#: createuser.c:332 #, c-format -#| msgid "%s: creation of new role failed: %s" msgid "creation of new role failed: %s" msgstr "新しいロールの作成に失敗しました: %s" -#: createuser.c:343 +#: createuser.c:346 #, c-format msgid "" "%s creates a new PostgreSQL role.\n" @@ -533,37 +514,32 @@ msgstr "" "%sは新しいPostgreSQLロールを作成します\n" "\n" -#: createuser.c:345 dropuser.c:164 +#: createuser.c:348 dropuser.c:164 #, c-format msgid " %s [OPTION]... [ROLENAME]\n" msgstr " %s [オプション]... [ロール名]\n" -#: createuser.c:347 +#: createuser.c:350 #, c-format -msgid "" -" -c, --connection-limit=N connection limit for role (default: no limit)\n" -msgstr "" -" -c, --connection-limit=N ロールのコネクション数制限(デフォルト: 制限な" -"し)\n" +msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n" +msgstr " -c, --connection-limit=N ロールのコネクション数制限(デフォルト: 制限なし)\n" -#: createuser.c:348 +#: createuser.c:351 #, c-format msgid " -d, --createdb role can create new databases\n" msgstr " -d, --createdb ロールは新しいデータベースを作成可\n" -#: createuser.c:349 +#: createuser.c:352 #, c-format msgid " -D, --no-createdb role cannot create databases (default)\n" -msgstr "" -" -D, --no-createdb ロールは新しいデータベースを作成不可(デフォル" -"ト)\n" +msgstr " -D, --no-createdb ロールは新しいデータベースを作成不可(デフォルト)\n" -#: createuser.c:351 +#: createuser.c:354 #, c-format msgid " -g, --role=ROLE new role will be a member of this role\n" msgstr " -g, --role=ROLE 新しいロールはこのロールのメンバーにする\n" -#: createuser.c:352 +#: createuser.c:355 #, c-format msgid "" " -i, --inherit role inherits privileges of roles it is a\n" @@ -572,97 +548,88 @@ msgstr "" " -i, --inherit ロールがメンバーとなるロール群から権限を継承\n" " (デフォルト)\n" -#: createuser.c:354 +#: createuser.c:357 #, c-format msgid " -I, --no-inherit role does not inherit privileges\n" msgstr " -I, --no-inherit 権限を継承しない\n" -#: createuser.c:355 +#: createuser.c:358 #, c-format msgid " -l, --login role can login (default)\n" msgstr " -l, --login ロールはログイン可能(デフォルト)\n" -#: createuser.c:356 +#: createuser.c:359 #, c-format msgid " -L, --no-login role cannot login\n" msgstr " -L, --no-login ロールはログイン不可\n" -#: createuser.c:357 +#: createuser.c:360 #, c-format msgid " -P, --pwprompt assign a password to new role\n" msgstr " -P, --pwprompt 新しいロールにパスワードを割り当てる\n" -#: createuser.c:358 +#: createuser.c:361 #, c-format msgid " -r, --createrole role can create new roles\n" msgstr " -r, --createrole ロールは別のロールを作成可\n" -#: createuser.c:359 +#: createuser.c:362 #, c-format msgid " -R, --no-createrole role cannot create roles (default)\n" msgstr " -R, --no-createrole ロールは別のロールを作成不可(デフォルト)\n" -#: createuser.c:360 +#: createuser.c:363 #, c-format msgid " -s, --superuser role will be superuser\n" msgstr " -s, --superuser ロールをスーパユーザにする\n" -#: createuser.c:361 +#: createuser.c:364 #, c-format msgid " -S, --no-superuser role will not be superuser (default)\n" -msgstr "" -" -S, --no-superuser ロールをスーパユーザにしない(デフォルト)\n" +msgstr " -S, --no-superuser ロールをスーパユーザにしない(デフォルト)\n" -#: createuser.c:363 +#: createuser.c:366 #, c-format msgid "" -" --interactive prompt for missing role name and attributes " -"rather\n" +" --interactive prompt for missing role name and attributes rather\n" " than using defaults\n" -msgstr "" -" --interactive デフォルトを使わず未指定のロール名や属性は入力を" -"促す\n" +msgstr " --interactive デフォルトを使わず未指定のロール名や属性は入力を促す\n" -#: createuser.c:365 +#: createuser.c:368 #, c-format msgid " --replication role can initiate replication\n" msgstr " --replication ロールはレプリケーションを初期化可\n" -#: createuser.c:366 +#: createuser.c:369 #, c-format msgid " --no-replication role cannot initiate replication\n" msgstr " --no-replication ロールはレプリケーションを初期化不可\n" -#: createuser.c:371 +#: createuser.c:374 #, c-format -msgid "" -" -U, --username=USERNAME user name to connect as (not the one to create)\n" -msgstr "" -" -U, --username=ユーザ名 このユーザとして接続(作成対象ユーザではありませ" -"ん)\n" +msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n" +msgstr " -U, --username=ユーザ名 このユーザとして接続(作成対象ユーザではありません)\n" -#: dropdb.c:104 +#: dropdb.c:109 #, c-format -#| msgid "%s: missing required argument database name\n" msgid "missing required argument database name" msgstr "必須の引数であるデータベース名がありません" -#: dropdb.c:119 +#: dropdb.c:124 #, c-format msgid "Database \"%s\" will be permanently removed.\n" msgstr "データベース\"%s\"は永久に削除されます。\n" -#: dropdb.c:120 dropuser.c:130 +#: dropdb.c:125 dropuser.c:130 msgid "Are you sure?" msgstr "実行しますか?" -#: dropdb.c:142 +#: dropdb.c:149 #, c-format -#| msgid "%s: database removal failed: %s" msgid "database removal failed: %s" msgstr "データベースの削除に失敗しました: %s" -#: dropdb.c:156 +#: dropdb.c:163 #, c-format msgid "" "%s removes a PostgreSQL database.\n" @@ -671,23 +638,25 @@ msgstr "" "%sはPostgreSQLデータベースを削除します。\n" "\n" -#: dropdb.c:158 +#: dropdb.c:165 #, c-format msgid " %s [OPTION]... DBNAME\n" msgstr " %s [オプション]... [データベース名]\n" -#: dropdb.c:161 +#: dropdb.c:168 +#, c-format +msgid " -f, --force try to terminate other connections before dropping\n" +msgstr " -f, --force 削除前に他の接続の終了を試行\n" + +#: dropdb.c:169 #, c-format msgid " -i, --interactive prompt before deleting anything\n" msgstr " -i, --interactive 何かを削除する前に警告する\n" -#: dropdb.c:163 +#: dropdb.c:171 #, c-format -msgid "" -" --if-exists don't report error if database doesn't exist\n" -msgstr "" -" --if-exists データベースが存在しない場合にエラーを報告しな" -"い\n" +msgid " --if-exists don't report error if database doesn't exist\n" +msgstr " --if-exists データベースが存在しない場合にエラーを報告しない\n" #: dropuser.c:115 msgid "Enter name of role to drop: " @@ -695,7 +664,6 @@ msgstr "削除したいロール名を入力:" #: dropuser.c:121 #, c-format -#| msgid "%s: missing required argument role name\n" msgid "missing required argument role name" msgstr "必須の引数であるロール名がありません" @@ -706,7 +674,6 @@ msgstr "ロール\"%s\"は永久に削除されます\n" #: dropuser.c:147 #, c-format -#| msgid "%s: removal of role \"%s\" failed: %s" msgid "removal of role \"%s\" failed: %s" msgstr "ロール\"%s\"の削除に失敗しました: %s" @@ -725,23 +692,18 @@ msgid "" " -i, --interactive prompt before deleting anything, and prompt for\n" " role name if not specified\n" msgstr "" -" -i, --interactive 何かを削除する前に入力を促し、またロール名が指" -"定\n" +" -i, --interactive 何かを削除する前に入力を促し、またロール名が指定\n" " されていない場合はその入力を促す\n" #: dropuser.c:170 #, c-format msgid " --if-exists don't report error if user doesn't exist\n" -msgstr "" -" --if-exists ユーザが存在しない場合にエラーを報告しない\n" +msgstr " --if-exists ユーザが存在しない場合にエラーを報告しない\n" #: dropuser.c:175 #, c-format -msgid "" -" -U, --username=USERNAME user name to connect as (not the one to drop)\n" -msgstr "" -" -U, --username=ユーザ名 このユーザとして接続(削除対象ユーザではありませ" -"ん)\n" +msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n" +msgstr " -U, --username=ユーザ名 このユーザとして接続(削除対象ユーザではありません)\n" #: pg_isready.c:144 #, c-format @@ -750,7 +712,6 @@ msgstr "%s" #: pg_isready.c:152 #, c-format -#| msgid "%s: could not fetch default options\n" msgid "could not fetch default options" msgstr "デフォルトのオプションを取り出すことができませんでした" @@ -816,9 +777,7 @@ msgstr " -?, --help このヘルプを表示して終了\n" #: pg_isready.c:234 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" -msgstr "" -" -h, --host=HOSTNAME データベースサーバのホストまたはソケットディレクト" -"リ\n" +msgstr " -h, --host=HOSTNAME データベースサーバのホストまたはソケットディレクトリ\n" #: pg_isready.c:235 #, c-format @@ -827,127 +786,111 @@ msgstr " -p, --port=PORT データベースサーバのポート番号 #: pg_isready.c:236 #, c-format -msgid "" -" -t, --timeout=SECS seconds to wait when attempting connection, 0 " -"disables (default: %s)\n" -msgstr "" -" -t, --timeout=SECS 接続試行時の待機秒数、ゼロで無効化(デフォルト: " -"%s)\n" +msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n" +msgstr " -t, --timeout=SECS 接続試行時の待機秒数、ゼロで無効化(デフォルト: %s)\n" #: pg_isready.c:237 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USERNAME このユーザ名で接続する\n" -#: reindexdb.c:168 +#: reindexdb.c:154 vacuumdb.c:192 +#, c-format +msgid "number of parallel jobs must be at least 1" +msgstr "並列ジョブの数は最低でも1以上でなければなりません" + +#: reindexdb.c:197 #, c-format -#| msgid "" -#| "%s: cannot reindex all databases and a specific one at the same time\n" msgid "cannot reindex all databases and a specific one at the same time" msgstr "全データベースと特定のデータベースは同時に再インデックス化はできません" -#: reindexdb.c:173 +#: reindexdb.c:202 #, c-format -#| msgid "" -#| "%s: cannot reindex all databases and system catalogs at the same time\n" msgid "cannot reindex all databases and system catalogs at the same time" -msgstr "" -"全データベースとシステムカタログの両方は同時に再インデックス化はできません" +msgstr "全データベースとシステムカタログの両方は同時に再インデックス化はできません" -#: reindexdb.c:178 +#: reindexdb.c:207 #, c-format -#| msgid "%s: cannot reindex specific schema(s) in all databases\n" msgid "cannot reindex specific schema(s) in all databases" msgstr "全データベースにおける特定のスキーマ(群)の再インデックス化はできません" -#: reindexdb.c:183 +#: reindexdb.c:212 #, c-format -#| msgid "%s: cannot reindex specific table(s) in all databases\n" msgid "cannot reindex specific table(s) in all databases" msgstr "全データベースにおける特定のテーブル(群)の再インデックス化はできません" -#: reindexdb.c:188 +#: reindexdb.c:217 #, c-format -#| msgid "%s: cannot reindex specific index(es) in all databases\n" msgid "cannot reindex specific index(es) in all databases" msgstr "全データベースにおける特定のインデックス(群)の再作成はできません" -#: reindexdb.c:199 +#: reindexdb.c:229 #, c-format -#| msgid "" -#| "%s: cannot reindex specific schema(s) and system catalogs at the same " -#| "time\n" msgid "cannot reindex specific schema(s) and system catalogs at the same time" -msgstr "" -"特定のスキーマ(群)とシステムカタログは同時に再インデックス化はできません" +msgstr "特定のスキーマ(群)とシステムカタログは同時に再インデックス化はできません" -#: reindexdb.c:204 +#: reindexdb.c:234 #, c-format -#| msgid "" -#| "%s: cannot reindex specific table(s) and system catalogs at the same " -#| "time\n" msgid "cannot reindex specific table(s) and system catalogs at the same time" -msgstr "" -"特定のテーブル(群)とシステムカタログは同時に再インデックス化はできません" +msgstr "特定のテーブル(群)とシステムカタログは同時に再インデックス化はできません" -#: reindexdb.c:209 +#: reindexdb.c:239 #, c-format -#| msgid "" -#| "%s: cannot reindex specific index(es) and system catalogs at the same " -#| "time\n" msgid "cannot reindex specific index(es) and system catalogs at the same time" -msgstr "" -"特定のインデックスとシステムカタログは同時に再インデックス化はできません" +msgstr "特定のインデックスとシステムカタログは同時に再インデックス化はできません" -#: reindexdb.c:298 vacuumdb.c:412 vacuumdb.c:420 vacuumdb.c:427 vacuumdb.c:434 +#: reindexdb.c:245 #, c-format -#| msgid "%s: cannot use the \"%s\" option when performing only analyze\n" -msgid "" -"cannot use the \"%s\" option on server versions older than PostgreSQL %s" -msgstr "" -"PostgreSQL %2$sよりも古いサーバーバージョンでは\"%1$s\"オプションは使えません" +msgid "cannot use multiple jobs to reindex system catalogs" +msgstr "システムカタログのインデックス再構築では複数ジョブを使用できません" -#: reindexdb.c:326 +#: reindexdb.c:272 #, c-format -#| msgid "%s: reindexing of table \"%s\" in database \"%s\" failed: %s" -msgid "reindexing of table \"%s\" in database \"%s\" failed: %s" -msgstr "" -"データベース\"%2$s\"中にあるテーブル\"%1$s\"のインでックス再構築に失敗しまし" -"た: %3$s" +msgid "cannot use multiple jobs to reindex indexes" +msgstr "インデックス再構築には複数ジョブを使用できません" -#: reindexdb.c:329 +#: reindexdb.c:337 vacuumdb.c:434 vacuumdb.c:442 vacuumdb.c:450 vacuumdb.c:458 +#: vacuumdb.c:465 vacuumdb.c:472 vacuumdb.c:479 #, c-format -#| msgid "%s: reindexing of index \"%s\" in database \"%s\" failed: %s" -msgid "reindexing of index \"%s\" in database \"%s\" failed: %s" -msgstr "" -"データベース\"%2$s\"中にあるインデックス\"%1$s\"の再作成に失敗しました: %3$s" +msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s" +msgstr "PostgreSQL %2$sよりも古いサーバーバージョンでは\"%1$s\"オプションは使えません" -#: reindexdb.c:332 +#: reindexdb.c:377 #, c-format -#| msgid "%s: reindexing of schema \"%s\" in database \"%s\" failed: %s" -msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s" -msgstr "" -"データベース\"%2$s\"中にあるスキーマ\"%1$s\"のインデックス再構築に失敗しまし" -"た: %3$s" +msgid "cannot reindex system catalogs concurrently, skipping all" +msgstr "システムカタログではインデックスの並行再構築はできません、全てスキップします" -#: reindexdb.c:335 +#: reindexdb.c:558 #, c-format -#| msgid "%s: reindexing of database \"%s\" failed: %s" msgid "reindexing of database \"%s\" failed: %s" msgstr "データベース\"%s\"のインデックス再構築に失敗しました: %s" -#: reindexdb.c:369 +#: reindexdb.c:562 #, c-format -msgid "%s: reindexing database \"%s\"\n" -msgstr "%s: データベース\"%s\"を再インデックス化しています\n" +msgid "reindexing of index \"%s\" in database \"%s\" failed: %s" +msgstr "データベース\"%2$s\"中にあるインデックス\"%1$s\"の再作成に失敗しました: %3$s" + +#: reindexdb.c:566 +#, c-format +msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s" +msgstr "データベース\"%2$s\"中にあるスキーマ\"%1$s\"のインデックス再構築に失敗しました: %3$s" -#: reindexdb.c:412 +#: reindexdb.c:570 #, c-format -#| msgid "%s: reindexing of system catalogs failed: %s" -msgid "reindexing of system catalogs failed: %s" -msgstr "システムカタログのインデックス再構築に失敗しました: %s" +msgid "reindexing of system catalogs in database \"%s\" failed: %s" +msgstr "データベース\"%s\"中のシステムカタログのインデックス再構築に失敗しました: %s" + +#: reindexdb.c:574 +#, c-format +msgid "reindexing of table \"%s\" in database \"%s\" failed: %s" +msgstr "データベース\"%2$s\"中にあるテーブル\"%1$s\"のインでックス再構築に失敗しました: %3$s" -#: reindexdb.c:424 +#: reindexdb.c:731 +#, c-format +msgid "%s: reindexing database \"%s\"\n" +msgstr "%s: データベース\"%s\"を再インデックス化しています\n" + +#: reindexdb.c:752 #, c-format msgid "" "%s reindexes a PostgreSQL database.\n" @@ -956,45 +899,47 @@ msgstr "" "%sはPostgreSQLデータベースを再インデックス化します。\n" "\n" -#: reindexdb.c:428 +#: reindexdb.c:756 #, c-format msgid " -a, --all reindex all databases\n" msgstr " -a, --all 全データベースを再インデックス化します\n" -#: reindexdb.c:429 +#: reindexdb.c:757 #, c-format msgid " --concurrently reindex concurrently\n" -msgstr " --concurrently 並行再構成\n" +msgstr " --concurrently 並行再構築\n" -#: reindexdb.c:430 +#: reindexdb.c:758 #, c-format msgid " -d, --dbname=DBNAME database to reindex\n" msgstr " -d, --dbname=DBNAME 再インデックス化対象のデータベース名\n" -#: reindexdb.c:432 +#: reindexdb.c:760 #, c-format msgid " -i, --index=INDEX recreate specific index(es) only\n" -msgstr "" -" -i, --index=INDEX 指定したインデックス(群)のみを再インデックス化\n" +msgstr " -i, --index=INDEX 指定したインデックス(群)のみを再インデックス化\n" -#: reindexdb.c:434 +#: reindexdb.c:761 +#, c-format +msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n" +msgstr " -j, --jobs=NUM インデックス再構築にこの数の並列接続を使用\n" + +#: reindexdb.c:763 #, c-format msgid " -s, --system reindex system catalogs\n" msgstr " -s, --system システムカタログを再インデックス化\n" -#: reindexdb.c:435 +#: reindexdb.c:764 #, c-format msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" -msgstr "" -" -S, --schema=SCHEMA 指定したスキーマ(群)のみを再インデックス化\n" +msgstr " -S, --schema=SCHEMA 指定したスキーマ(群)のみを再インデックス化\n" -#: reindexdb.c:436 +#: reindexdb.c:765 #, c-format msgid " -t, --table=TABLE reindex specific table(s) only\n" -msgstr "" -" -t, --table=TABLE 指定したテーブル(群)のみを再インデックス化\n" +msgstr " -t, --table=TABLE 指定したテーブル(群)のみを再インデックス化\n" -#: reindexdb.c:447 +#: reindexdb.c:776 #, c-format msgid "" "\n" @@ -1003,211 +948,204 @@ msgstr "" "\n" "詳細はSQLコマンドREINDEXに関する説明を参照してください。\n" -#: vacuumdb.c:207 +#: scripts_parallel.c:234 #, c-format -#| msgid "%s: number of parallel jobs must be at least 1\n" -msgid "number of parallel jobs must be at least 1" -msgstr "並列ジョブの数は最低でも1以上でなければなりません" +msgid "too many jobs for this platform -- try %d" +msgstr "このプラットフォームではジョブ数が多すぎます -- %dで試してください" -#: vacuumdb.c:212 +#: vacuumdb.c:200 #, c-format -#| msgid "%s: too many parallel jobs requested (maximum: %d)\n" -msgid "too many parallel jobs requested (maximum: %d)" -msgstr "要求された並列ジョブが多すぎます(最大: %d)" +msgid "parallel vacuum degree must be a non-negative integer" +msgstr "並列VACUUMの並列度は非負の整数でなければなりません" -#: vacuumdb.c:233 +#: vacuumdb.c:220 #, c-format -#| msgid "%s: transaction ID (-x) must not be 0\n" msgid "minimum transaction ID age must be at least 1" msgstr "最小トランザクションID差分は1以上でなければなりません" -#: vacuumdb.c:241 +#: vacuumdb.c:228 #, c-format -#| msgid "name list length must be at least %d" msgid "minimum multixact ID age must be at least 1" msgstr "最小マルチトランザクションID差分は1以上でなくてはなりません" -#: vacuumdb.c:273 vacuumdb.c:279 vacuumdb.c:285 +#: vacuumdb.c:266 vacuumdb.c:272 vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 +#: vacuumdb.c:302 #, c-format -#| msgid "%s: cannot use the \"%s\" option when performing only analyze\n" msgid "cannot use the \"%s\" option when performing only analyze" msgstr "analyzeのみを実行する場合\"%s\"は使えません" -#: vacuumdb.c:302 +#: vacuumdb.c:308 +#, c-format +msgid "cannot use the \"%s\" option when performing full" +msgstr "fullを実行する場合\"%s\"オプションは使えません" + +#: vacuumdb.c:324 #, c-format -#| msgid "" -#| "%s: cannot vacuum all databases and a specific one at the same time\n" msgid "cannot vacuum all databases and a specific one at the same time" -msgstr "全データベースと特定のデータベースを同時にvacuumすることはできません" +msgstr "全データベースと特定のデータベースを同時にVACUUMすることはできません" -#: vacuumdb.c:307 +#: vacuumdb.c:329 #, c-format -#| msgid "%s: cannot vacuum specific table(s) in all databases\n" msgid "cannot vacuum specific table(s) in all databases" -msgstr "全データベースの特定のテーブル(群)をvacuumすることはできません" +msgstr "全データベースの特定のテーブル(群)をVACUUMすることはできません" -#: vacuumdb.c:398 +#: vacuumdb.c:420 msgid "Generating minimal optimizer statistics (1 target)" msgstr "最適化のための情報を最小限生成します(1対象)" -#: vacuumdb.c:399 +#: vacuumdb.c:421 msgid "Generating medium optimizer statistics (10 targets)" msgstr "最適化のための情報を複数生成します(10対象)" -#: vacuumdb.c:400 +#: vacuumdb.c:422 msgid "Generating default (full) optimizer statistics" msgstr "最適化のための情報をデフォルト数(全て)生成します" -#: vacuumdb.c:442 +#: vacuumdb.c:487 #, c-format msgid "%s: processing database \"%s\": %s\n" msgstr "%s: データベース\"%s\"の処理中です: %s\n" -#: vacuumdb.c:445 +#: vacuumdb.c:490 #, c-format msgid "%s: vacuuming database \"%s\"\n" -msgstr "%s: データベース\"%s\"をvacuumしています\n" +msgstr "%s: データベース\"%s\"をVACUUMしています\n" -#: vacuumdb.c:942 +#: vacuumdb.c:963 #, c-format -#| msgid "%s: vacuuming of table \"%s\" in database \"%s\" failed: %s" msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s" -msgstr "データベース \"%2$s\"のテーブル\"%1$sのvacuumに失敗しました: %3$s" +msgstr "データベース \"%2$s\"のテーブル\"%1$sのVACUUMに失敗しました: %3$s" -#: vacuumdb.c:945 vacuumdb.c:1080 +#: vacuumdb.c:966 #, c-format -#| msgid "%s: vacuuming of database \"%s\" failed: %s" msgid "vacuuming of database \"%s\" failed: %s" -msgstr "データベース\"%s\"のvacuumに失敗しました: %s" +msgstr "データベース\"%s\"のVACUUMに失敗しました: %s" -#: vacuumdb.c:1215 +#: vacuumdb.c:974 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" "\n" -msgstr "%sはPostgreSQLデータベースをcleanおよびanalyseします。\n" +msgstr "%sはPostgreSQLデータベースのゴミ回収および分析を行います。\n" -#: vacuumdb.c:1219 +#: vacuumdb.c:978 #, c-format msgid " -a, --all vacuum all databases\n" -msgstr " -a, --all 全データベースをvacuum\n" +msgstr " -a, --all 全データベースをVACUUM\n" -#: vacuumdb.c:1220 +#: vacuumdb.c:979 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" -msgstr " -d, --dbname=DBNAME vacuumするデータベース名\n" +msgstr " -d, --dbname=DBNAME VACUUMするデータベース名\n" -#: vacuumdb.c:1221 +#: vacuumdb.c:980 #, c-format msgid " --disable-page-skipping disable all page-skipping behavior\n" msgstr " --disable-page-skipping すべてのページスキップ動作を禁止\n" -#: vacuumdb.c:1222 +#: vacuumdb.c:981 #, c-format -msgid "" -" -e, --echo show the commands being sent to the " -"server\n" +msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo サーバに送られるコマンドを表示\n" -#: vacuumdb.c:1223 +#: vacuumdb.c:982 #, c-format msgid " -f, --full do full vacuuming\n" -msgstr " -f, --full full vacuumを実行\n" +msgstr " -f, --full VACUUM FULLを実行\n" -#: vacuumdb.c:1224 +#: vacuumdb.c:983 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr " -F, --freeze 行トランザクション情報を凍結\n" -#: vacuumdb.c:1225 +#: vacuumdb.c:984 #, c-format -msgid "" -" -j, --jobs=NUM use this many concurrent connections to " -"vacuum\n" -msgstr "" -" -j, --jobs=NUM バキューム時に指定した同時接続数を使用\n" +msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n" +msgstr " -j, --jobs=NUM バキューム時に指定した同時接続数を使用\n" -#: vacuumdb.c:1226 +#: vacuumdb.c:985 #, c-format -msgid "" -" --min-mxid-age=MXID_AGE minimum multixact ID age of tables to " -"vacuum\n" +msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n" msgstr "" " --min-mxid-age=MXID_AGE VACUUM対象とするテーブルの最小のマルチ\n" " トランザクションID差分\n" -#: vacuumdb.c:1227 +#: vacuumdb.c:986 #, c-format -msgid "" -" --min-xid-age=XID_AGE minimum transaction ID age of tables to " -"vacuum\n" +msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n" msgstr "" " --min-xid-age=XID_AGE VACUUM対象とするテーブルの最小の\n" " トランザクションID差分\n" -#: vacuumdb.c:1228 +#: vacuumdb.c:987 +#, c-format +msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n" +msgstr "" +" --no-index-cleanup デッドタプルを指すインデックスエントリを\n" +"\t 削除しない\n" + +#: vacuumdb.c:988 +#, c-format +msgid " --no-truncate don't truncate empty pages at the end of the table\n" +msgstr " --no-truncate テーブル終端の空ページの切り詰めを行わない\n" + +#: vacuumdb.c:989 +#, c-format +msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n" +msgstr "" +" -P, --parallel=PARALLEL_DEGREE 可能であればこの数のバックグラウンドワーカを\n" +" VACUUMで使用\n" + +#: vacuumdb.c:990 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet メッセージを出力しない\n" -#: vacuumdb.c:1229 +#: vacuumdb.c:991 #, c-format -msgid "" -" --skip-locked skip relations that cannot be immediately " -"locked\n" -msgstr "" -" --skip-locked 直ちにロックできなかったリレーションをス" -"キップ\n" +msgid " --skip-locked skip relations that cannot be immediately locked\n" +msgstr " --skip-locked 直ちにロックできなかったリレーションをスキップ\n" -#: vacuumdb.c:1230 +#: vacuumdb.c:992 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" -msgstr "" -" -t, --table='TABLE[(COLUMNS)]' 指定したテーブル(複数可)のみをvacuumしま" -"す\n" +msgstr " -t, --table='TABLE[(COLUMNS)]' 指定したテーブル(複数可)のみをVACUUMします\n" -#: vacuumdb.c:1231 +#: vacuumdb.c:993 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose 多くのメッセージを出力します\n" -#: vacuumdb.c:1232 +#: vacuumdb.c:994 #, c-format -msgid "" -" -V, --version output version information, then exit\n" +msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: vacuumdb.c:1233 +#: vacuumdb.c:995 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze 最適化用統計情報を更新します\n" -#: vacuumdb.c:1234 +#: vacuumdb.c:996 #, c-format -msgid "" -" -Z, --analyze-only only update optimizer statistics; no " -"vacuum\n" -msgstr "" -" -Z, --analyze-only 最適化用統計情報のみ更新; バキュームは行わ" -"ない\n" +msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n" +msgstr " -Z, --analyze-only 最適化用統計情報のみ更新; バキュームは行わない\n" -#: vacuumdb.c:1235 +#: vacuumdb.c:997 #, c-format msgid "" -" --analyze-in-stages only update optimizer statistics, in " -"multiple\n" +" --analyze-in-stages only update optimizer statistics, in multiple\n" " stages for faster results; no vacuum\n" msgstr "" -" --analyze-in-stages 高速化のため最適化用統計情報のみを複数段階" -"で\n" +" --analyze-in-stages 高速化のため最適化用統計情報のみを複数段階で\n" " 更新; VACUUMは行わない\n" -#: vacuumdb.c:1237 +#: vacuumdb.c:999 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: vacuumdb.c:1245 +#: vacuumdb.c:1007 #, c-format msgid "" "\n" @@ -1216,53 +1154,46 @@ msgstr "" "\n" "詳細はSQLコマンドのVACUUMの説明を参照してください。\n" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version バージョン情報を表示して終了します\n" +#~ msgid "%s: could not obtain information about current user: %s\n" +#~ msgstr "%s: 現在のユーザに関する情報を取得できませんでした: %s\n" -#~ msgid "pg_strdup: cannot duplicate null pointer (internal error)\n" -#~ msgstr "pg_strdup: nullポインタを複製できません(内部エラー)。\n" +#~ msgid "%s: could not get current user name: %s\n" +#~ msgstr "%s: 現在のユーザ名を取得できませんでした: %s\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help ヘルプを表示して終了します\n" +#~ msgid "%s: cannot use the \"freeze\" option when performing only analyze\n" +#~ msgstr "%s: analyze のみを実行する場合 \"freeze\" は使えません\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help ヘルプを表示して終了\n" +#~ msgid "%s: still %s functions declared in language \"%s\"; language not removed\n" +#~ msgstr "%s: まだ関数%sが言語\"%s\"内で宣言されています。言語は削除されません\n" -#~ msgid "" -#~ " --version output version information, then exit\n" -#~ msgstr "" -#~ " --version バージョン情報を表示して終了します\n" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version バージョン情報を表示して終了\n" + +#~ msgid "%s: out of memory\n" +#~ msgstr "%s: メモリ不足です\n" + +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help ヘルプを表示して終了します\n" #~ msgid "" #~ "\n" -#~ "If one of -d, -D, -r, -R, -s, -S, and ROLENAME is not specified, you " -#~ "will\n" +#~ "If one of -d, -D, -r, -R, -s, -S, and ROLENAME is not specified, you will\n" #~ "be prompted interactively.\n" #~ msgstr "" #~ "\n" -#~ "-d, -D, -r, -R, -s, -S でロール名が指定されない場合、ロール名をその場で入" -#~ "力できます\n" +#~ "-d, -D, -r, -R, -s, -S でロール名が指定されない場合、ロール名をその場で入力できます\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help ヘルプを表示して終了します\n" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version バージョン情報を表示して終了します\n" -#~ msgid "%s: out of memory\n" -#~ msgstr "%s: メモリ不足です\n" - -#~ msgid "" -#~ " --version output version information, then exit\n" -#~ msgstr " --version バージョン情報を表示して終了\n" - -#~ msgid "" -#~ "%s: still %s functions declared in language \"%s\"; language not removed\n" -#~ msgstr "" -#~ "%s: まだ関数%sが言語\"%s\"内で宣言されています。言語は削除されません\n" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help ヘルプを表示して終了\n" -#~ msgid "%s: cannot use the \"freeze\" option when performing only analyze\n" -#~ msgstr "%s: analyze のみを実行する場合 \"freeze\" は使えません\n" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help ヘルプを表示して終了します\n" -#~ msgid "%s: could not get current user name: %s\n" -#~ msgstr "%s: 現在のユーザ名を取得できませんでした: %s\n" +#~ msgid "pg_strdup: cannot duplicate null pointer (internal error)\n" +#~ msgstr "pg_strdup: nullポインタを複製できません(内部エラー)。\n" -#~ msgid "%s: could not obtain information about current user: %s\n" -#~ msgstr "%s: 現在のユーザに関する情報を取得できませんでした: %s\n" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version バージョン情報を表示して終了します\n" diff --git a/src/bin/scripts/po/ko.po b/src/bin/scripts/po/ko.po index 19259e4264a4c..7593dcfae88a4 100644 --- a/src/bin/scripts/po/ko.po +++ b/src/bin/scripts/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pgscripts (PostgreSQL) 12\n" +"Project-Id-Version: pgscripts (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:15+0000\n" -"PO-Revision-Date: 2019-11-01 10:55+0900\n" +"POT-Creation-Date: 2020-10-05 20:45+0000\n" +"PO-Revision-Date: 2020-10-13 15:50+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean \n" "Language: ko\n" @@ -15,28 +15,28 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "심각: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "오류: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "경고: " #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "메모리 부족\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "null 포인터를 복제할 수 없음(내부 오류)\n" @@ -55,66 +55,85 @@ msgstr "사용자 없음" msgid "user name lookup failure: error code %lu" msgstr "사용자 이름 찾기 실패: 오류번호 %lu" -#: ../../fe_utils/print.c:353 +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "취소 요청을 전송함\n" + +#: ../../fe_utils/cancel.c:165 +msgid "Could not send cancel request: " +msgstr "취소 요청을 전송할 수 없음: " + +#: ../../fe_utils/cancel.c:210 +#, c-format +msgid "Could not send cancel request: %s" +msgstr "취소 요청을 전송할 수 없음: %s" + +#: ../../fe_utils/print.c:350 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu개 행)" -#: ../../fe_utils/print.c:3058 +#: ../../fe_utils/print.c:3055 #, c-format msgid "Interrupted\n" msgstr "인트럽트발생\n" -#: ../../fe_utils/print.c:3122 +#: ../../fe_utils/print.c:3119 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "테이블 내용에 헤더를 추가할 수 없음: 열 수가 %d개를 초과했습니다.\n" -#: ../../fe_utils/print.c:3162 +#: ../../fe_utils/print.c:3159 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "테이블 내용에 셀을 추가할 수 없음: 총 셀 수가 %d개를 초과했습니다.\n" -#: ../../fe_utils/print.c:3417 +#: ../../fe_utils/print.c:3414 #, c-format msgid "invalid output format (internal error): %d" msgstr "잘못된 출력 형식 (내부 오류): %d" -#: clusterdb.c:113 clusterdb.c:132 createdb.c:121 createdb.c:140 -#: createuser.c:168 createuser.c:183 dropdb.c:96 dropdb.c:105 dropdb.c:113 +#: clusterdb.c:114 clusterdb.c:133 createdb.c:121 createdb.c:140 +#: createuser.c:171 createuser.c:186 dropdb.c:101 dropdb.c:110 dropdb.c:118 #: dropuser.c:92 dropuser.c:107 dropuser.c:122 pg_isready.c:95 pg_isready.c:109 -#: reindexdb.c:139 reindexdb.c:158 vacuumdb.c:244 vacuumdb.c:263 +#: reindexdb.c:168 reindexdb.c:187 vacuumdb.c:227 vacuumdb.c:246 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "보다 자세한 사용법은 \"%s --help\"\n" -#: clusterdb.c:142 +#: clusterdb.c:131 createdb.c:138 createuser.c:184 dropdb.c:116 dropuser.c:105 +#: pg_isready.c:107 reindexdb.c:185 vacuumdb.c:244 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "명령행 인자를 너무 많이 지정했습니다 (시작: \"%s\")" + +#: clusterdb.c:143 #, c-format msgid "cannot cluster all databases and a specific one at the same time" msgstr "모든 DB 작업과 특정 DB 작업은 동시에 할 수 없습니다." -#: clusterdb.c:148 +#: clusterdb.c:149 #, c-format msgid "cannot cluster specific table(s) in all databases" msgstr "모든 DB를 대상으로 특정 테이블들을 클러스터할 수 없음" -#: clusterdb.c:216 +#: clusterdb.c:217 #, c-format msgid "clustering of table \"%s\" in database \"%s\" failed: %s" msgstr "\"%s\" 테이블(해당DB: \"%s\") 클러스터 작업 실패: %s" -#: clusterdb.c:219 +#: clusterdb.c:220 #, c-format msgid "clustering of database \"%s\" failed: %s" msgstr "\"%s\" 데이터베이스 클러스터 실패: %s" -#: clusterdb.c:252 +#: clusterdb.c:253 #, c-format msgid "%s: clustering database \"%s\"\n" msgstr "%s: \"%s\" 데이터베이스 클러스터 작업 중\n" -#: clusterdb.c:273 +#: clusterdb.c:274 #, c-format msgid "" "%s clusters all previously clustered tables in a database.\n" @@ -124,19 +143,19 @@ msgstr "" "다시 클러스터 작업을 합니다.\n" "\n" -#: clusterdb.c:274 createdb.c:250 createuser.c:344 dropdb.c:157 dropuser.c:163 -#: pg_isready.c:224 reindexdb.c:425 vacuumdb.c:1226 +#: clusterdb.c:275 createdb.c:259 createuser.c:347 dropdb.c:164 dropuser.c:163 +#: pg_isready.c:224 reindexdb.c:753 vacuumdb.c:921 #, c-format msgid "Usage:\n" msgstr "사용법:\n" -#: clusterdb.c:275 reindexdb.c:426 vacuumdb.c:1227 +#: clusterdb.c:276 reindexdb.c:754 vacuumdb.c:922 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [옵션]... [DB이름]\n" -#: clusterdb.c:276 createdb.c:252 createuser.c:346 dropdb.c:159 dropuser.c:165 -#: pg_isready.c:227 reindexdb.c:427 vacuumdb.c:1228 +#: clusterdb.c:277 createdb.c:261 createuser.c:349 dropdb.c:166 dropuser.c:165 +#: pg_isready.c:227 reindexdb.c:755 vacuumdb.c:923 #, c-format msgid "" "\n" @@ -145,49 +164,49 @@ msgstr "" "\n" "옵션들:\n" -#: clusterdb.c:277 +#: clusterdb.c:278 #, c-format msgid " -a, --all cluster all databases\n" msgstr " -a, --all 모든 데이터베이스를 대상으로\n" -#: clusterdb.c:278 +#: clusterdb.c:279 #, c-format msgid " -d, --dbname=DBNAME database to cluster\n" msgstr " -d, --dbname=DBNAME 클러스터 작업할 DB\n" -#: clusterdb.c:279 createuser.c:350 dropdb.c:160 dropuser.c:166 reindexdb.c:431 +#: clusterdb.c:280 createuser.c:353 dropdb.c:167 dropuser.c:166 reindexdb.c:759 #, c-format msgid "" " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo 서버로 보내는 작업 명령을 보여줌\n" -#: clusterdb.c:280 reindexdb.c:433 +#: clusterdb.c:281 reindexdb.c:762 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet 어떠한 메시지도 보여주지 않음\n" -#: clusterdb.c:281 +#: clusterdb.c:282 #, c-format msgid " -t, --table=TABLE cluster specific table(s) only\n" msgstr " -t, --table=TABLE 지정한 테이블들만 클러스터\n" -#: clusterdb.c:282 reindexdb.c:437 +#: clusterdb.c:283 reindexdb.c:766 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose 많은 출력 작성\n" -#: clusterdb.c:283 createuser.c:362 dropdb.c:162 dropuser.c:169 reindexdb.c:438 +#: clusterdb.c:284 createuser.c:365 dropdb.c:170 dropuser.c:169 reindexdb.c:767 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: clusterdb.c:284 createuser.c:367 dropdb.c:164 dropuser.c:171 reindexdb.c:439 +#: clusterdb.c:285 createuser.c:370 dropdb.c:172 dropuser.c:171 reindexdb.c:768 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: clusterdb.c:285 createdb.c:263 createuser.c:368 dropdb.c:165 dropuser.c:172 -#: pg_isready.c:233 reindexdb.c:440 vacuumdb.c:1248 +#: clusterdb.c:286 createdb.c:272 createuser.c:371 dropdb.c:173 dropuser.c:172 +#: pg_isready.c:233 reindexdb.c:769 vacuumdb.c:944 #, c-format msgid "" "\n" @@ -196,42 +215,42 @@ msgstr "" "\n" "연결 옵션들:\n" -#: clusterdb.c:286 createuser.c:369 dropdb.c:166 dropuser.c:173 reindexdb.c:441 -#: vacuumdb.c:1249 +#: clusterdb.c:287 createuser.c:372 dropdb.c:174 dropuser.c:173 reindexdb.c:770 +#: vacuumdb.c:945 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=HOSTNAME 데이터베이스 서버 호스트 또는 소켓 디렉터리\n" -#: clusterdb.c:287 createuser.c:370 dropdb.c:167 dropuser.c:174 reindexdb.c:442 -#: vacuumdb.c:1250 +#: clusterdb.c:288 createuser.c:373 dropdb.c:175 dropuser.c:174 reindexdb.c:771 +#: vacuumdb.c:946 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT 데이터베이스 서버 포트\n" -#: clusterdb.c:288 dropdb.c:168 reindexdb.c:443 vacuumdb.c:1251 +#: clusterdb.c:289 dropdb.c:176 reindexdb.c:772 vacuumdb.c:947 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USERNAME 접속할 사용자이름\n" -#: clusterdb.c:289 createuser.c:372 dropdb.c:169 dropuser.c:176 reindexdb.c:444 -#: vacuumdb.c:1252 +#: clusterdb.c:290 createuser.c:375 dropdb.c:177 dropuser.c:176 reindexdb.c:773 +#: vacuumdb.c:948 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password 암호 프롬프트 표시 안 함\n" -#: clusterdb.c:290 createuser.c:373 dropdb.c:170 dropuser.c:177 reindexdb.c:445 -#: vacuumdb.c:1253 +#: clusterdb.c:291 createuser.c:376 dropdb.c:178 dropuser.c:177 reindexdb.c:774 +#: vacuumdb.c:949 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password 암호 프롬프트 표시함\n" -#: clusterdb.c:291 dropdb.c:171 reindexdb.c:446 vacuumdb.c:1254 +#: clusterdb.c:292 dropdb.c:179 reindexdb.c:775 vacuumdb.c:950 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=DBNAME 대체용 관리 대상 데이터베이스\n" -#: clusterdb.c:292 +#: clusterdb.c:293 #, c-format msgid "" "\n" @@ -240,78 +259,79 @@ msgstr "" "\n" "보다 자세한 내용은 CLUSTER SQL 명령어 설명서를 참조하십시오.\n" -#: clusterdb.c:293 createdb.c:271 createuser.c:374 dropdb.c:172 dropuser.c:178 -#: pg_isready.c:238 reindexdb.c:448 vacuumdb.c:1256 +#: clusterdb.c:294 createdb.c:280 createuser.c:377 dropdb.c:180 dropuser.c:178 +#: pg_isready.c:238 reindexdb.c:777 vacuumdb.c:952 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"오류보고: .\n" +"문제점 보고 주소: <%s>\n" -#: common.c:84 common.c:130 +#: clusterdb.c:295 createdb.c:281 createuser.c:378 dropdb.c:181 dropuser.c:179 +#: pg_isready.c:239 reindexdb.c:778 vacuumdb.c:953 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" + +#: common.c:79 common.c:125 msgid "Password: " msgstr "암호:" -#: common.c:117 +#: common.c:112 #, c-format msgid "could not connect to database %s: out of memory" msgstr "%s 데이터베이스에 연결 할 수 없음: 메모리 부족" -#: common.c:144 +#: common.c:139 #, c-format msgid "could not connect to database %s: %s" msgstr "%s 데이터베이스에 연결 할 수 없음: %s" -#: common.c:196 common.c:222 +#: common.c:214 common.c:239 #, c-format msgid "query failed: %s" msgstr "쿼리 실패: %s" -#: common.c:197 common.c:223 +#: common.c:215 common.c:240 #, c-format msgid "query was: %s" msgstr "사용한 쿼리: %s" -#: common.c:339 +#: common.c:312 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "\"%s\" 데이터베이스 작업 실패: %s" + +#: common.c:406 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" msgstr[0] "쿼리에서 한 개가 아닌 %d개의 행을 반환: %s" #. translator: abbreviation for "yes" -#: common.c:364 +#: common.c:430 msgid "y" msgstr "y" #. translator: abbreviation for "no" -#: common.c:366 +#: common.c:432 msgid "n" msgstr "n" #. translator: This is a question followed by the translated options for #. "yes" and "no". -#: common.c:376 +#: common.c:442 #, c-format msgid "%s (%s/%s) " msgstr "%s (%s/%s) " -#: common.c:390 +#: common.c:456 #, c-format msgid "Please answer \"%s\" or \"%s\".\n" msgstr "\"%s\" 또는 \"%s\" 만 허용합니다.\n" -#: common.c:469 common.c:506 -#, c-format -msgid "Cancel request sent\n" -msgstr "취소 요청을 전송함\n" - -#: common.c:472 common.c:510 -#, c-format -msgid "Could not send cancel request: %s" -msgstr "취소 요청을 전송할 수 없음: %s" - #: createdb.c:148 #, c-format msgid "only one of --locale and --lc-ctype can be specified" @@ -327,17 +347,17 @@ msgstr "--locale 및 --lc-collate 중 하나만 지정할 수 있음" msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\" 이름은 잘못된 인코딩 이름임" -#: createdb.c:212 +#: createdb.c:221 #, c-format msgid "database creation failed: %s" msgstr "데이터베이스 만들기 실패: %s" -#: createdb.c:231 +#: createdb.c:240 #, c-format msgid "comment creation failed (database was created): %s" msgstr "코멘트 추가하기 실패 (데이터베이스는 만들어졌음): %s" -#: createdb.c:249 +#: createdb.c:258 #, c-format msgid "" "%s creates a PostgreSQL database.\n" @@ -346,96 +366,96 @@ msgstr "" "%s 프로그램은 PostgreSQL 데이터베이스를 만듭니다.\n" "\n" -#: createdb.c:251 +#: createdb.c:260 #, c-format msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n" msgstr " %s [옵션]... [DB이름] [설명]\n" -#: createdb.c:253 +#: createdb.c:262 #, c-format msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n" msgstr "" " -D, --tablespace=TABLESPACE 데이터베이스를 위한 기본 테이블스페이스\n" -#: createdb.c:254 +#: createdb.c:263 #, c-format msgid "" " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo 서버로 보내는 작업 명령들을 보여줌\n" -#: createdb.c:255 +#: createdb.c:264 #, c-format msgid " -E, --encoding=ENCODING encoding for the database\n" msgstr " -E, --encoding=ENCODING 데이터베이스 인코딩\n" -#: createdb.c:256 +#: createdb.c:265 #, c-format msgid " -l, --locale=LOCALE locale settings for the database\n" msgstr " -l, --locale=LOCALE 데이터베이스의 로캘 설정\n" -#: createdb.c:257 +#: createdb.c:266 #, c-format msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n" msgstr " --lc-collate=LOCALE 데이터베이스의 LC_COLLATE 설정\n" -#: createdb.c:258 +#: createdb.c:267 #, c-format msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n" msgstr " --lc-ctype=LOCALE 데이터베이스의 LC_CTYPE 설정\n" -#: createdb.c:259 +#: createdb.c:268 #, c-format msgid " -O, --owner=OWNER database user to own the new database\n" msgstr " -O, --owner=OWNER 데이터베이스 소유주\n" -#: createdb.c:260 +#: createdb.c:269 #, c-format msgid " -T, --template=TEMPLATE template database to copy\n" msgstr " -T, --template=TEMPLATE 복사할 템플릿 데이터베이스\n" -#: createdb.c:261 +#: createdb.c:270 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: createdb.c:262 +#: createdb.c:271 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 보여주고 마침\n" -#: createdb.c:264 +#: createdb.c:273 #, c-format msgid "" " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=HOSTNAME 데이터베이스 서버 호스트나 소켓 디렉터리\n" -#: createdb.c:265 +#: createdb.c:274 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT 데이터베이스 서버 포트\n" -#: createdb.c:266 +#: createdb.c:275 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USERNAME 접속할 사용자\n" -#: createdb.c:267 +#: createdb.c:276 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password 암호 프롬프트 표시 안 함\n" -#: createdb.c:268 +#: createdb.c:277 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password 암호 프롬프트 표시함\n" -#: createdb.c:269 +#: createdb.c:278 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=DBNAME 대체용 관리 대상 데이터베이스\n" -#: createdb.c:270 +#: createdb.c:279 #, c-format msgid "" "\n" @@ -445,46 +465,51 @@ msgstr "" "초기값으로, DB이름을 지정하지 않으면, 현재 사용자의 이름과 같은 데이터베이스" "가 만들어집니다.\n" -#: createuser.c:191 +#: createuser.c:150 +#, c-format +msgid "invalid value for --connection-limit: %s" +msgstr "--connection-limit 옵션 값이 잘못됨: %s" + +#: createuser.c:194 msgid "Enter name of role to add: " msgstr "추가할 새 롤(role)이름: " -#: createuser.c:208 +#: createuser.c:211 msgid "Enter password for new role: " msgstr "새 롤의 암호: " -#: createuser.c:210 +#: createuser.c:213 msgid "Enter it again: " msgstr "암호 확인: " -#: createuser.c:213 +#: createuser.c:216 #, c-format msgid "Passwords didn't match.\n" msgstr "암호가 서로 틀림.\n" -#: createuser.c:221 +#: createuser.c:224 msgid "Shall the new role be a superuser?" msgstr "새 롤을 superuser 권한으로 지정할까요?" -#: createuser.c:236 +#: createuser.c:239 msgid "Shall the new role be allowed to create databases?" msgstr "이 새 롤에게 데이터베이스를 만들 수 있는 권할을 줄까요?" -#: createuser.c:244 +#: createuser.c:247 msgid "Shall the new role be allowed to create more new roles?" msgstr "이 새 롤에게 또 다른 롤을 만들 수 있는 권한을 줄까요?" -#: createuser.c:274 +#: createuser.c:277 #, c-format msgid "password encryption failed: %s" msgstr "암호 암호화 실패: %s" -#: createuser.c:329 +#: createuser.c:332 #, c-format msgid "creation of new role failed: %s" msgstr "새 롤 만들기 실패: %s" -#: createuser.c:343 +#: createuser.c:346 #, c-format msgid "" "%s creates a new PostgreSQL role.\n" @@ -493,34 +518,34 @@ msgstr "" "%s 프로그램은 PostgreSQL 롤을 만듭니다.\n" "\n" -#: createuser.c:345 dropuser.c:164 +#: createuser.c:348 dropuser.c:164 #, c-format msgid " %s [OPTION]... [ROLENAME]\n" msgstr " %s [옵션]... [롤이름]\n" -#: createuser.c:347 +#: createuser.c:350 #, c-format msgid "" " -c, --connection-limit=N connection limit for role (default: no limit)\n" msgstr " -c, --connection-limit=N 연결 제한 수 (초기값: 무제한)\n" -#: createuser.c:348 +#: createuser.c:351 #, c-format msgid " -d, --createdb role can create new databases\n" msgstr " -d, --createdb 새 데이터베이스를 만들 수 있음\n" -#: createuser.c:349 +#: createuser.c:352 #, c-format msgid " -D, --no-createdb role cannot create databases (default)\n" msgstr "" " -D, --no-createdb 데이터베이스를 만들 수 있는 권한 없음 (초기값)\n" -#: createuser.c:351 +#: createuser.c:354 #, c-format msgid " -g, --role=ROLE new role will be a member of this role\n" msgstr " -g, --role=ROLE 만들어지는 롤이 이 롤의 구성원이 됨\n" -#: createuser.c:352 +#: createuser.c:355 #, c-format msgid "" " -i, --inherit role inherits privileges of roles it is a\n" @@ -529,47 +554,47 @@ msgstr "" " -i, --inherit 롤의 권한을 상속할 수 있음\n" " (초기값)\n" -#: createuser.c:354 +#: createuser.c:357 #, c-format msgid " -I, --no-inherit role does not inherit privileges\n" msgstr " -I, --no-inherit 이 롤의 권한을 상속할 수 없음\n" -#: createuser.c:355 +#: createuser.c:358 #, c-format msgid " -l, --login role can login (default)\n" msgstr " -l, --login 로그인 허용 (초기값)\n" -#: createuser.c:356 +#: createuser.c:359 #, c-format msgid " -L, --no-login role cannot login\n" msgstr " -L, --no-login 로그인 할 수 없음\n" -#: createuser.c:357 +#: createuser.c:360 #, c-format msgid " -P, --pwprompt assign a password to new role\n" msgstr " -P, --pwprompt 새 롤의 암호 지정\n" -#: createuser.c:358 +#: createuser.c:361 #, c-format msgid " -r, --createrole role can create new roles\n" msgstr " -r, --createrole 새 롤을 만들 수 있음\n" -#: createuser.c:359 +#: createuser.c:362 #, c-format msgid " -R, --no-createrole role cannot create roles (default)\n" msgstr " -R, --no-createrole 롤 만들 수 있는 권한 없음 (초기값)\n" -#: createuser.c:360 +#: createuser.c:363 #, c-format msgid " -s, --superuser role will be superuser\n" msgstr " -s, --superuser superuser 권한으로 지정\n" -#: createuser.c:361 +#: createuser.c:364 #, c-format msgid " -S, --no-superuser role will not be superuser (default)\n" msgstr " -S, --no-superuser 슈퍼유저 권한 없음 (초기값)\n" -#: createuser.c:363 +#: createuser.c:366 #, c-format msgid "" " --interactive prompt for missing role name and attributes " @@ -579,17 +604,17 @@ msgstr "" " --interactive 롤 이름과 속성을 초기값을 쓰지 않고\n" " 각각 직접 입력 선택 함\n" -#: createuser.c:365 +#: createuser.c:368 #, c-format msgid " --replication role can initiate replication\n" msgstr " --replication 복제 기능 이용할 수 있는 롤\n" -#: createuser.c:366 +#: createuser.c:369 #, c-format msgid " --no-replication role cannot initiate replication\n" msgstr " --no-replication 복제 기능을 이용할 수 없음\n" -#: createuser.c:371 +#: createuser.c:374 #, c-format msgid "" " -U, --username=USERNAME user name to connect as (not the one to create)\n" @@ -597,26 +622,26 @@ msgstr "" " -U, --username=USERNAME 서버에 접속할 사용자\n" " (사용자만들기 작업을 할 사용자)\n" -#: dropdb.c:104 +#: dropdb.c:109 #, c-format msgid "missing required argument database name" msgstr "필수 항목인 데이터베이스 이름이 빠졌습니다" -#: dropdb.c:119 +#: dropdb.c:124 #, c-format msgid "Database \"%s\" will be permanently removed.\n" msgstr "\"%s\" 데이터베이스가 완전히 삭제 될 것입니다.\n" -#: dropdb.c:120 dropuser.c:130 +#: dropdb.c:125 dropuser.c:130 msgid "Are you sure?" msgstr "정말 계속 할까요? (y/n) " -#: dropdb.c:142 +#: dropdb.c:149 #, c-format msgid "database removal failed: %s" msgstr "데이터베이스 삭제 실패: %s" -#: dropdb.c:156 +#: dropdb.c:163 #, c-format msgid "" "%s removes a PostgreSQL database.\n" @@ -625,17 +650,25 @@ msgstr "" "%s 프로그램은 PostgreSQL 데이터베이스를 삭제합니다.\n" "\n" -#: dropdb.c:158 +#: dropdb.c:165 #, c-format msgid " %s [OPTION]... DBNAME\n" msgstr " %s [옵션]... DB이름\n" -#: dropdb.c:161 +#: dropdb.c:168 +#, c-format +msgid "" +" -f, --force try to terminate other connections before " +"dropping\n" +msgstr "" +" -f, --force 삭제 전에 접속한 다른 세션들 강제로 끊음\n" + +#: dropdb.c:169 #, c-format msgid " -i, --interactive prompt before deleting anything\n" msgstr " -i, --interactive 지우기 전에 한 번 더 물어봄\n" -#: dropdb.c:163 +#: dropdb.c:171 #, c-format msgid "" " --if-exists don't report error if database doesn't exist\n" @@ -782,87 +815,115 @@ msgstr " -t, --timeout=초 연결 제한 시간, 0 무제한 (초기값 msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USERNAME 접속할 사용자이름\n" -#: reindexdb.c:168 +#: reindexdb.c:154 vacuumdb.c:186 +#, c-format +msgid "number of parallel jobs must be at least 1" +msgstr "병렬 작업 숫자는 최소 1이어야 함" + +#: reindexdb.c:197 #, c-format msgid "cannot reindex all databases and a specific one at the same time" msgstr "" "모든 데이터베이스 재색인 작업과 특정 데이터베이스 재색인 작업은 동시에 진행" "할 수 없습니다" -#: reindexdb.c:173 +#: reindexdb.c:202 #, c-format msgid "cannot reindex all databases and system catalogs at the same time" msgstr "" "모든 데이터베이스 재색인 작업과 시스템 카탈로그 재색인 작업은 동시에 진행할 " "수 없습니다" -#: reindexdb.c:178 +#: reindexdb.c:207 #, c-format msgid "cannot reindex specific schema(s) in all databases" msgstr "" "모든 데이터베이스 재색인 작업에서 특정 스키마들의 재색인 작업을 지정할 수 없" "습니다" -#: reindexdb.c:183 +#: reindexdb.c:212 #, c-format msgid "cannot reindex specific table(s) in all databases" msgstr "" "모든 데이터베이스 재색인 작업에서 특정 테이블의 재색인 작업을 지정할 수 없습" "니다" -#: reindexdb.c:188 +#: reindexdb.c:217 #, c-format msgid "cannot reindex specific index(es) in all databases" msgstr "" "모든 데이터베이스 재색인 작업에서 특정 인덱스 재색인 작업을 지정할 수 없습니" "다" -#: reindexdb.c:199 +#: reindexdb.c:229 #, c-format msgid "cannot reindex specific schema(s) and system catalogs at the same time" msgstr "특정 스키마와 시스템 카탈로그 재색인 작업은 동시에 진행할 수 없습니다" -#: reindexdb.c:204 +#: reindexdb.c:234 #, c-format msgid "cannot reindex specific table(s) and system catalogs at the same time" msgstr "특정 테이블과 시스템 카탈로그 재색인 작업은 동시에 진행할 수 없습니다" -#: reindexdb.c:209 +#: reindexdb.c:239 #, c-format msgid "cannot reindex specific index(es) and system catalogs at the same time" msgstr "특정 인덱스와 시스템 카탈로그 재색인 작업은 동시에 진행할 수 없습니다" -#: reindexdb.c:326 +#: reindexdb.c:245 #, c-format -msgid "reindexing of table \"%s\" in database \"%s\" failed: %s" -msgstr "\"%s\" 테이블(해당DB: \"%s\") 재색인 작업 실패: %s" +msgid "cannot use multiple jobs to reindex system catalogs" +msgstr "시스템 카탈로그 재색인 작업은 병렬로 처리할 수 없음" + +#: reindexdb.c:272 +#, c-format +msgid "cannot use multiple jobs to reindex indexes" +msgstr "인덱스 다시 만들기에서는 다중 작업을 사용할 수 없음" -#: reindexdb.c:329 +#: reindexdb.c:337 vacuumdb.c:410 vacuumdb.c:418 vacuumdb.c:425 vacuumdb.c:432 +#: vacuumdb.c:439 +#, c-format +msgid "" +"cannot use the \"%s\" option on server versions older than PostgreSQL %s" +msgstr "" +"\"%s\" 옵션은 PostgreSQL %s 버전보다 오래된 서버에서는 사용할 수 없음" + +#: reindexdb.c:377 +#, c-format +msgid "cannot reindex system catalogs concurrently, skipping all" +msgstr "시스템 카탈로그 인덱스는 CONCURRENTLY 다시 만들기 못함, 모두 건너 뜀" + +#: reindexdb.c:558 +#, c-format +msgid "reindexing of database \"%s\" failed: %s" +msgstr "\"%s\" 데이터베이스 재색인 작업 실패: %s" + +#: reindexdb.c:562 #, c-format msgid "reindexing of index \"%s\" in database \"%s\" failed: %s" msgstr "\"%s\" 인덱스(해당DB: \"%s\") 재색인 작업 실패: %s" -#: reindexdb.c:332 +#: reindexdb.c:566 #, c-format msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s" msgstr "\"%s\" 스키마(해당DB: \"%s\") 재색인 작업 실패: %s" -#: reindexdb.c:335 +#: reindexdb.c:570 #, c-format -msgid "reindexing of database \"%s\" failed: %s" -msgstr "\"%s\" 데이터베이스 재색인 작업 실패: %s" +msgid "reindexing of system catalogs in database \"%s\" failed: %s" +msgstr "\"%s\" 데이터베이스 시스템 카탈로그 재색인 작업 실패: %s" -#: reindexdb.c:369 +#: reindexdb.c:574 #, c-format -msgid "%s: reindexing database \"%s\"\n" -msgstr "%s: \"%s\" 데이터베이스 재색인 작업 중\n" +msgid "reindexing of table \"%s\" in database \"%s\" failed: %s" +msgstr "\"%s\" 테이블(해당DB: \"%s\") 재색인 작업 실패: %s" -#: reindexdb.c:412 +#: reindexdb.c:731 #, c-format -msgid "reindexing of system catalogs failed: %s" -msgstr "시스템 카탈로그 재색인 작업 실패: %s" +msgid "%s: reindexing database \"%s\"\n" +msgstr "%s: \"%s\" 데이터베이스 재색인 작업 중\n" -#: reindexdb.c:424 +#: reindexdb.c:752 #, c-format msgid "" "%s reindexes a PostgreSQL database.\n" @@ -871,42 +932,49 @@ msgstr "" "%s 프로그램은 PostgreSQL 데이터베이스 재색인 작업을 합니다.\n" "\n" -#: reindexdb.c:428 +#: reindexdb.c:756 #, c-format msgid " -a, --all reindex all databases\n" msgstr " -a, --all 모든 데이터베이스 재색인\n" -#: reindexdb.c:429 +#: reindexdb.c:757 #, c-format msgid " --concurrently reindex concurrently\n" msgstr " --concurrently 테이블 잠그지 않는 재색인\n" -#: reindexdb.c:430 +#: reindexdb.c:758 #, c-format msgid " -d, --dbname=DBNAME database to reindex\n" msgstr " -d, --dbname=DBNAME 지정한 데이터베이스의 재색인 작업\n" -#: reindexdb.c:432 +#: reindexdb.c:760 #, c-format msgid " -i, --index=INDEX recreate specific index(es) only\n" msgstr " -i, --index=INDEX 지정한 인덱스들만 다시 만듬\n" -#: reindexdb.c:434 +#: reindexdb.c:761 +#, c-format +msgid "" +" -j, --jobs=NUM use this many concurrent connections to reindex\n" +msgstr "" +" -j, --jobs=NUM 재색인 작업을 여러개의 연결로 동시에 작업함\n" + +#: reindexdb.c:763 #, c-format msgid " -s, --system reindex system catalogs\n" msgstr " -s, --system 시스템 카탈로그 재색인\n" -#: reindexdb.c:435 +#: reindexdb.c:764 #, c-format msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" msgstr " -S, --schema=SCHEMA 지정한 스키마들 자료만 덤프\n" -#: reindexdb.c:436 +#: reindexdb.c:765 #, c-format msgid " -t, --table=TABLE reindex specific table(s) only\n" msgstr " -t, --table=TABLE 지정한 테이블들만 재색인 작업\n" -#: reindexdb.c:447 +#: reindexdb.c:776 #, c-format msgid "" "\n" @@ -915,26 +983,36 @@ msgstr "" "\n" "보다 자세한 내용은 REINDEX SQL 명령어 설명서를 참조하십시오.\n" -#: vacuumdb.c:211 +#: scripts_parallel.c:234 #, c-format -msgid "number of parallel jobs must be at least 1" -msgstr "병렬 작업 숫자는 최소 1이어야 함" +msgid "too many jobs for this platform -- try %d" +msgstr "이 운영체제에서는 너무 많은 동시 작업임 -- %d 시도" + +#: vacuumdb.c:194 +#, c-format +msgid "parallel vacuum degree must be a non-negative integer" +msgstr "병렬 vacuum 값은 0 이상 정수형이어야 함" -#: vacuumdb.c:231 +#: vacuumdb.c:214 #, c-format msgid "minimum transaction ID age must be at least 1" msgstr "트랜잭션 ID 나이는 최소 1이어야 함" -#: vacuumdb.c:239 +#: vacuumdb.c:222 #, c-format msgid "minimum multixact ID age must be at least 1" msgstr "multixact ID 나이는 최소 1이어야 함" -#: vacuumdb.c:271 vacuumdb.c:277 vacuumdb.c:283 +#: vacuumdb.c:254 vacuumdb.c:260 vacuumdb.c:266 vacuumdb.c:278 #, c-format msgid "cannot use the \"%s\" option when performing only analyze" msgstr "통계 수집 전용 작업에서는 \"%s\" 옵션을 사용할 수 없음" +#: vacuumdb.c:284 +#, c-format +msgid "cannot use the \"%s\" option when performing full vacuum" +msgstr "full vacuum 작업에서는 \"%s\" 옵션을 사용할 수 없음" + #: vacuumdb.c:300 #, c-format msgid "cannot vacuum all databases and a specific one at the same time" @@ -958,32 +1036,27 @@ msgstr "일반 최적화 통계 수집 수행 중 (10% 대상)" msgid "Generating default (full) optimizer statistics" msgstr "최대 최적화 통계 수집 수행중 (모든 자료 대상)" -#: vacuumdb.c:440 +#: vacuumdb.c:447 #, c-format msgid "%s: processing database \"%s\": %s\n" msgstr "%s: \"%s\" 데이터베이스 작업 중: %s\n" -#: vacuumdb.c:443 +#: vacuumdb.c:450 #, c-format msgid "%s: vacuuming database \"%s\"\n" msgstr "%s: \"%s\" 데이터베이스를 청소 중\n" -#: vacuumdb.c:642 -#, c-format -msgid "too many jobs for this platform -- try %d" -msgstr "이 운영체제에서는 너무 많은 동시 작업임 -- %d 시도" - -#: vacuumdb.c:952 +#: vacuumdb.c:909 #, c-format msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s" msgstr "\"%s\" 테이블 (해당 DB: \"%s\") 청소하기 실패: %s" -#: vacuumdb.c:955 vacuumdb.c:1090 +#: vacuumdb.c:912 #, c-format msgid "vacuuming of database \"%s\" failed: %s" msgstr "\"%s\" 데이터베이스 청소하기 실패: %s" -#: vacuumdb.c:1225 +#: vacuumdb.c:920 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -993,39 +1066,39 @@ msgstr "" "퀴리 최적화기의 참고 자료를 갱신합니다.\n" "\n" -#: vacuumdb.c:1229 +#: vacuumdb.c:924 #, c-format msgid " -a, --all vacuum all databases\n" msgstr " -a, --all 모든 데이터베이스 청소\n" -#: vacuumdb.c:1230 +#: vacuumdb.c:925 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=DBNAME DBNAME 데이터베이스 청소\n" -#: vacuumdb.c:1231 +#: vacuumdb.c:926 #, c-format msgid " --disable-page-skipping disable all page-skipping behavior\n" msgstr " --disable-page-skipping 모든 page-skipping 기능 비활성화\n" -#: vacuumdb.c:1232 +#: vacuumdb.c:927 #, c-format msgid "" " -e, --echo show the commands being sent to the " "server\n" msgstr " -e, --echo 서버로 보내는 명령들을 보여줌\n" -#: vacuumdb.c:1233 +#: vacuumdb.c:928 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full 대청소\n" -#: vacuumdb.c:1234 +#: vacuumdb.c:929 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr " -F, --freeze 행 트랜잭션 정보 동결\n" -#: vacuumdb.c:1235 +#: vacuumdb.c:930 #, c-format msgid "" " -j, --jobs=NUM use this many concurrent connections to " @@ -1033,7 +1106,7 @@ msgid "" msgstr "" " -j, --jobs=NUM 청소 작업을 여러개의 연결로 동시에 작업함\n" -#: vacuumdb.c:1236 +#: vacuumdb.c:931 #, c-format msgid "" " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to " @@ -1041,7 +1114,7 @@ msgid "" msgstr "" " --min-mxid-age=MXID_AGE 청소할 테이블의 최소 multixact ID 나이\n" -#: vacuumdb.c:1237 +#: vacuumdb.c:932 #, c-format msgid "" " --min-xid-age=XID_AGE minimum transaction ID age of tables to " @@ -1049,12 +1122,21 @@ msgid "" msgstr "" " --min-xid-age=XID_AGE 청소할 테이블의 최소 트랜잭션 ID 나이\n" -#: vacuumdb.c:1238 +#: vacuumdb.c:933 +#, c-format +msgid "" +" -P, --parallel=PARALLEL_DEGREE use this many background workers for " +"vacuum, if available\n" +msgstr "" +" -P, --parallel=병렬작업수 vacuum 작업을 병렬로 처리 할 수 있는 경우\n" +" 백그라운드 작업 프로세스 수\n" + +#: vacuumdb.c:934 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet 어떠한 메시지도 보여주지 않음\n" -#: vacuumdb.c:1239 +#: vacuumdb.c:935 #, c-format msgid "" " --skip-locked skip relations that cannot be immediately " @@ -1062,28 +1144,28 @@ msgid "" msgstr "" " --skip-locked 즉시 잠글 수 없는 릴레이션은 건너 뜀\n" -#: vacuumdb.c:1240 +#: vacuumdb.c:936 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr " -t, --table='TABLE[(COLUMNS)]' 지정한 특정 테이블들만 청소\n" -#: vacuumdb.c:1241 +#: vacuumdb.c:937 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose 작업내역의 자세한 출력\n" -#: vacuumdb.c:1242 +#: vacuumdb.c:938 #, c-format msgid "" " -V, --version output version information, then exit\n" msgstr " -V, --version 버전 정보를 보여주고 마침\n" -#: vacuumdb.c:1243 +#: vacuumdb.c:939 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze 쿼리최적화 통계 정보를 갱신함\n" -#: vacuumdb.c:1244 +#: vacuumdb.c:940 #, c-format msgid "" " -Z, --analyze-only only update optimizer statistics; no " @@ -1092,7 +1174,7 @@ msgstr "" " -Z, --analyze-only 청소 작업 없이 쿼리최적화 통계 정보만 갱신" "함\n" -#: vacuumdb.c:1245 +#: vacuumdb.c:941 #, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in " @@ -1102,12 +1184,12 @@ msgstr "" " --analyze-in-stages 보다 빠른 결과를 위해 다중 스테이지에서\n" " 최적화 통계치만 갱신함;청소 안함\n" -#: vacuumdb.c:1247 +#: vacuumdb.c:943 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 이 도움말을 표시하고 종료\n" -#: vacuumdb.c:1255 +#: vacuumdb.c:951 #, c-format msgid "" "\n" diff --git a/src/bin/scripts/po/ru.po b/src/bin/scripts/po/ru.po index bd15c1db303ed..6166c32182a1e 100644 --- a/src/bin/scripts/po/ru.po +++ b/src/bin/scripts/po/ru.po @@ -3,13 +3,13 @@ # This file is distributed under the same license as the PostgreSQL package. # Serguei A. Mokhov, , 2003-2004. # Oleg Bartunov , 2004. -# Alexander Lakhin , 2012-2017, 2019. +# Alexander Lakhin , 2012-2017, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: pgscripts (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-09 12:21+0300\n" -"PO-Revision-Date: 2019-09-02 12:33+0300\n" +"POT-Creation-Date: 2020-11-20 15:13+0300\n" +"PO-Revision-Date: 2020-09-15 18:56+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -19,28 +19,28 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:236 #, c-format msgid "fatal: " msgstr "важно: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:243 #, c-format msgid "error: " msgstr "ошибка: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:250 #, c-format msgid "warning: " msgstr "предупреждение: " #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" @@ -59,7 +59,15 @@ msgstr "пользователь не существует" msgid "user name lookup failure: error code %lu" msgstr "распознать имя пользователя не удалось (код ошибки: %lu)" -#: ../../fe_utils/print.c:353 +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Сигнал отмены отправлен\n" + +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 +msgid "Could not send cancel request: " +msgstr "Отправить сигнал отмены не удалось: " + +#: ../../fe_utils/print.c:350 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" @@ -67,70 +75,70 @@ msgstr[0] "(%lu строка)" msgstr[1] "(%lu строки)" msgstr[2] "(%lu строк)" -#: ../../fe_utils/print.c:3058 +#: ../../fe_utils/print.c:3055 #, c-format msgid "Interrupted\n" msgstr "Прерывание\n" -#: ../../fe_utils/print.c:3122 +#: ../../fe_utils/print.c:3119 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "" "Добавить заголовок к содержимому таблицы нельзя: число столбцов превышает " "%d.\n" -#: ../../fe_utils/print.c:3162 +#: ../../fe_utils/print.c:3159 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "" "Добавить ячейку к содержимому таблицы нельзя: общее число ячеек превышает " "%d.\n" -#: ../../fe_utils/print.c:3417 +#: ../../fe_utils/print.c:3414 #, c-format msgid "invalid output format (internal error): %d" msgstr "неверный формат вывода (внутренняя ошибка): %d" -#: clusterdb.c:113 clusterdb.c:132 createdb.c:121 createdb.c:140 -#: createuser.c:168 createuser.c:183 dropdb.c:96 dropdb.c:105 dropdb.c:113 -#: dropuser.c:92 dropuser.c:107 dropuser.c:122 pg_isready.c:95 pg_isready.c:109 -#: reindexdb.c:139 reindexdb.c:158 vacuumdb.c:244 vacuumdb.c:263 +#: clusterdb.c:110 clusterdb.c:129 createdb.c:122 createdb.c:141 +#: createuser.c:172 createuser.c:187 dropdb.c:102 dropdb.c:111 dropdb.c:119 +#: dropuser.c:93 dropuser.c:108 dropuser.c:123 pg_isready.c:95 pg_isready.c:109 +#: reindexdb.c:166 reindexdb.c:185 vacuumdb.c:225 vacuumdb.c:244 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: clusterdb.c:130 createdb.c:138 createuser.c:181 dropdb.c:111 dropuser.c:105 -#: pg_isready.c:107 reindexdb.c:156 vacuumdb.c:261 +#: clusterdb.c:127 createdb.c:139 createuser.c:185 dropdb.c:117 dropuser.c:106 +#: pg_isready.c:107 reindexdb.c:183 vacuumdb.c:242 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: clusterdb.c:142 +#: clusterdb.c:146 #, c-format msgid "cannot cluster all databases and a specific one at the same time" msgstr "нельзя кластеризовать все базы и одну конкретную одновременно" -#: clusterdb.c:148 +#: clusterdb.c:152 #, c-format msgid "cannot cluster specific table(s) in all databases" msgstr "нельзя кластеризовать указанную таблицу(ы) во всех базах" -#: clusterdb.c:216 +#: clusterdb.c:218 #, c-format msgid "clustering of table \"%s\" in database \"%s\" failed: %s" msgstr "кластеризовать таблицу \"%s\" в базе \"%s\" не удалось: %s" -#: clusterdb.c:219 +#: clusterdb.c:221 #, c-format msgid "clustering of database \"%s\" failed: %s" msgstr "кластеризовать базу \"%s\" не удалось: %s" -#: clusterdb.c:252 +#: clusterdb.c:249 #, c-format msgid "%s: clustering database \"%s\"\n" msgstr "%s: кластеризация базы \"%s\"\n" -#: clusterdb.c:273 +#: clusterdb.c:265 #, c-format msgid "" "%s clusters all previously clustered tables in a database.\n" @@ -139,19 +147,19 @@ msgstr "" "%s упорядочивает данные всех кластеризованных таблиц в базе данных.\n" "\n" -#: clusterdb.c:274 createdb.c:250 createuser.c:344 dropdb.c:157 dropuser.c:163 -#: pg_isready.c:224 reindexdb.c:425 vacuumdb.c:1226 +#: clusterdb.c:266 createdb.c:266 createuser.c:354 dropdb.c:170 dropuser.c:170 +#: pg_isready.c:224 reindexdb.c:750 vacuumdb.c:911 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: clusterdb.c:275 reindexdb.c:426 vacuumdb.c:1227 +#: clusterdb.c:267 reindexdb.c:751 vacuumdb.c:912 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД]\n" -#: clusterdb.c:276 createdb.c:252 createuser.c:346 dropdb.c:159 dropuser.c:165 -#: pg_isready.c:227 reindexdb.c:427 vacuumdb.c:1228 +#: clusterdb.c:268 createdb.c:268 createuser.c:356 dropdb.c:172 dropuser.c:172 +#: pg_isready.c:227 reindexdb.c:752 vacuumdb.c:913 #, c-format msgid "" "\n" @@ -160,50 +168,50 @@ msgstr "" "\n" "Параметры:\n" -#: clusterdb.c:277 +#: clusterdb.c:269 #, c-format msgid " -a, --all cluster all databases\n" msgstr " -a, --all кластеризовать все базы\n" -#: clusterdb.c:278 +#: clusterdb.c:270 #, c-format msgid " -d, --dbname=DBNAME database to cluster\n" msgstr " -d, --dbname=ИМЯ_БД имя базы данных для кластеризации\n" -#: clusterdb.c:279 createuser.c:350 dropdb.c:160 dropuser.c:166 reindexdb.c:431 +#: clusterdb.c:271 createuser.c:360 dropdb.c:173 dropuser.c:173 reindexdb.c:756 #, c-format msgid "" " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo отображать команды, отправляемые серверу\n" -#: clusterdb.c:280 reindexdb.c:433 +#: clusterdb.c:272 reindexdb.c:759 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet не выводить никакие сообщения\n" -#: clusterdb.c:281 +#: clusterdb.c:273 #, c-format msgid " -t, --table=TABLE cluster specific table(s) only\n" msgstr "" " -t, --table=ТАБЛИЦА кластеризовать только указанную таблицу(ы)\n" -#: clusterdb.c:282 reindexdb.c:437 +#: clusterdb.c:274 reindexdb.c:763 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose выводить исчерпывающие сообщения\n" -#: clusterdb.c:283 createuser.c:362 dropdb.c:162 dropuser.c:169 reindexdb.c:438 +#: clusterdb.c:275 createuser.c:372 dropdb.c:176 dropuser.c:176 reindexdb.c:764 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: clusterdb.c:284 createuser.c:367 dropdb.c:164 dropuser.c:171 reindexdb.c:439 +#: clusterdb.c:276 createuser.c:377 dropdb.c:178 dropuser.c:178 reindexdb.c:765 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: clusterdb.c:285 createdb.c:263 createuser.c:368 dropdb.c:165 dropuser.c:172 -#: pg_isready.c:233 reindexdb.c:440 vacuumdb.c:1248 +#: clusterdb.c:277 createdb.c:279 createuser.c:378 dropdb.c:179 dropuser.c:179 +#: pg_isready.c:233 reindexdb.c:766 vacuumdb.c:934 #, c-format msgid "" "\n" @@ -212,43 +220,43 @@ msgstr "" "\n" "Параметры подключения:\n" -#: clusterdb.c:286 createuser.c:369 dropdb.c:166 dropuser.c:173 reindexdb.c:441 -#: vacuumdb.c:1249 +#: clusterdb.c:278 createuser.c:379 dropdb.c:180 dropuser.c:180 reindexdb.c:767 +#: vacuumdb.c:935 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n" -#: clusterdb.c:287 createuser.c:370 dropdb.c:167 dropuser.c:174 reindexdb.c:442 -#: vacuumdb.c:1250 +#: clusterdb.c:279 createuser.c:380 dropdb.c:181 dropuser.c:181 reindexdb.c:768 +#: vacuumdb.c:936 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=ПОРТ порт сервера баз данных\n" -#: clusterdb.c:288 dropdb.c:168 reindexdb.c:443 vacuumdb.c:1251 +#: clusterdb.c:280 dropdb.c:182 reindexdb.c:769 vacuumdb.c:937 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr "" " -U, --username=ИМЯ имя пользователя для подключения к серверу\n" -#: clusterdb.c:289 createuser.c:372 dropdb.c:169 dropuser.c:176 reindexdb.c:444 -#: vacuumdb.c:1252 +#: clusterdb.c:281 createuser.c:382 dropdb.c:183 dropuser.c:183 reindexdb.c:770 +#: vacuumdb.c:938 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: clusterdb.c:290 createuser.c:373 dropdb.c:170 dropuser.c:177 reindexdb.c:445 -#: vacuumdb.c:1253 +#: clusterdb.c:282 createuser.c:383 dropdb.c:184 dropuser.c:184 reindexdb.c:771 +#: vacuumdb.c:939 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password запросить пароль\n" -#: clusterdb.c:291 dropdb.c:171 reindexdb.c:446 vacuumdb.c:1254 +#: clusterdb.c:283 dropdb.c:185 reindexdb.c:772 vacuumdb.c:940 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=ИМЯ_БД выбор другой обслуживаемой базы данных\n" -#: clusterdb.c:292 +#: clusterdb.c:284 #, c-format msgid "" "\n" @@ -257,41 +265,52 @@ msgstr "" "\n" "Подробнее о кластеризации вы можете узнать в описании SQL-команды CLUSTER.\n" -#: clusterdb.c:293 createdb.c:271 createuser.c:374 dropdb.c:172 dropuser.c:178 -#: pg_isready.c:238 reindexdb.c:448 vacuumdb.c:1256 +#: clusterdb.c:285 createdb.c:287 createuser.c:384 dropdb.c:186 dropuser.c:185 +#: pg_isready.c:238 reindexdb.c:774 vacuumdb.c:942 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Об ошибках сообщайте по адресу .\n" +"Об ошибках сообщайте по адресу <%s>.\n" -#: common.c:84 common.c:130 +#: clusterdb.c:286 createdb.c:288 createuser.c:385 dropdb.c:187 dropuser.c:186 +#: pg_isready.c:239 reindexdb.c:775 vacuumdb.c:943 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: common.c:80 common.c:138 msgid "Password: " msgstr "Пароль: " -#: common.c:117 +#: common.c:125 #, c-format msgid "could not connect to database %s: out of memory" msgstr "не удалось подключиться к базе %s (нехватка памяти)" -#: common.c:144 +#: common.c:152 #, c-format msgid "could not connect to database %s: %s" msgstr "не удалось подключиться к базе %s: %s" -#: common.c:196 common.c:222 +#: common.c:231 common.c:256 #, c-format msgid "query failed: %s" msgstr "ошибка при выполнении запроса: %s" -#: common.c:197 common.c:223 +#: common.c:232 common.c:257 #, c-format msgid "query was: %s" msgstr "запрос: %s" -#: common.c:339 +#: common.c:329 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "ошибка при обработке базы \"%s\": %s" + +#: common.c:423 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" @@ -300,63 +319,53 @@ msgstr[1] "запрос вернул %d строки вместо одной: %s msgstr[2] "запрос вернул %d строк вместо одной: %s" #. translator: abbreviation for "yes" -#: common.c:364 +#: common.c:447 msgid "y" msgstr "y" #. translator: abbreviation for "no" -#: common.c:366 +#: common.c:449 msgid "n" msgstr "n" #. translator: This is a question followed by the translated options for #. "yes" and "no". -#: common.c:376 +#: common.c:459 #, c-format msgid "%s (%s/%s) " msgstr "%s (%s - да/%s - нет) " -#: common.c:390 +#: common.c:473 #, c-format msgid "Please answer \"%s\" or \"%s\".\n" msgstr "Пожалуйста, введите \"%s\" или \"%s\".\n" -#: common.c:469 common.c:506 -#, c-format -msgid "Cancel request sent\n" -msgstr "Сигнал отмены отправлен\n" - -#: common.c:472 common.c:510 -#, c-format -msgid "Could not send cancel request: %s" -msgstr "Отправить сигнал отмены не удалось: %s" - -#: createdb.c:148 +#: createdb.c:149 #, c-format msgid "only one of --locale and --lc-ctype can be specified" msgstr "можно указать только --locale или --lc-ctype" -#: createdb.c:153 +#: createdb.c:154 #, c-format msgid "only one of --locale and --lc-collate can be specified" msgstr "можно указать только --locale и --lc-collate" -#: createdb.c:164 +#: createdb.c:165 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\" не является верным названием кодировки" -#: createdb.c:212 +#: createdb.c:228 #, c-format msgid "database creation failed: %s" msgstr "создать базу данных не удалось: %s" -#: createdb.c:231 +#: createdb.c:247 #, c-format msgid "comment creation failed (database was created): %s" msgstr "создать комментарий не удалось (база данных была создана): %s" -#: createdb.c:249 +#: createdb.c:265 #, c-format msgid "" "%s creates a PostgreSQL database.\n" @@ -365,102 +374,102 @@ msgstr "" "%s создаёт базу данных PostgreSQL.\n" "\n" -#: createdb.c:251 +#: createdb.c:267 #, c-format msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n" msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД] [ОПИСАНИЕ]\n" # well-spelled: ПРОСТР -#: createdb.c:253 +#: createdb.c:269 #, c-format msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n" msgstr "" " -D, --tablespace=ТАБЛ_ПРОСТР табличное пространство по умолчанию для базы " "данных\n" -#: createdb.c:254 +#: createdb.c:270 #, c-format msgid "" " -e, --echo show the commands being sent to the server\n" msgstr "" " -e, --echo отображать команды, отправляемые серверу\n" -#: createdb.c:255 +#: createdb.c:271 #, c-format msgid " -E, --encoding=ENCODING encoding for the database\n" msgstr " -E, --encoding=КОДИРОВКА кодировка базы данных\n" -#: createdb.c:256 +#: createdb.c:272 #, c-format msgid " -l, --locale=LOCALE locale settings for the database\n" msgstr " -l, --locale=ЛОКАЛЬ локаль для базы данных\n" -#: createdb.c:257 +#: createdb.c:273 #, c-format msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n" msgstr " --lc-collate=ЛОКАЛЬ параметр LC_COLLATE для базы данных\n" -#: createdb.c:258 +#: createdb.c:274 #, c-format msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n" msgstr " --lc-ctype=ЛОКАЛЬ параметр LC_CTYPE для базы данных\n" -#: createdb.c:259 +#: createdb.c:275 #, c-format msgid " -O, --owner=OWNER database user to own the new database\n" msgstr "" " -O, --owner=ВЛАДЕЛЕЦ пользователь-владелец новой базы данных\n" -#: createdb.c:260 +#: createdb.c:276 #, c-format msgid " -T, --template=TEMPLATE template database to copy\n" msgstr " -T, --template=ШАБЛОН исходная база данных для копирования\n" -#: createdb.c:261 +#: createdb.c:277 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: createdb.c:262 +#: createdb.c:278 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: createdb.c:264 +#: createdb.c:280 #, c-format msgid "" " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n" -#: createdb.c:265 +#: createdb.c:281 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=ПОРТ порт сервера баз данных\n" -#: createdb.c:266 +#: createdb.c:282 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr "" " -U, --username=ИМЯ имя пользователя для подключения к серверу\n" -#: createdb.c:267 +#: createdb.c:283 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: createdb.c:268 +#: createdb.c:284 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password запросить пароль\n" -#: createdb.c:269 +#: createdb.c:285 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr "" " --maintenance-db=ИМЯ_БД выбор другой обслуживаемой базы данных\n" -#: createdb.c:270 +#: createdb.c:286 #, c-format msgid "" "\n" @@ -469,46 +478,51 @@ msgstr "" "\n" "По умолчанию именем базы данных считается имя текущего пользователя.\n" -#: createuser.c:191 +#: createuser.c:151 +#, c-format +msgid "invalid value for --connection-limit: %s" +msgstr "неверное значение параметра --connection-limit: %s" + +#: createuser.c:195 msgid "Enter name of role to add: " msgstr "Введите имя новой роли: " -#: createuser.c:208 +#: createuser.c:212 msgid "Enter password for new role: " msgstr "Введите пароль для новой роли: " -#: createuser.c:210 +#: createuser.c:214 msgid "Enter it again: " msgstr "Повторите его: " -#: createuser.c:213 +#: createuser.c:217 #, c-format msgid "Passwords didn't match.\n" msgstr "Пароли не совпадают.\n" -#: createuser.c:221 +#: createuser.c:225 msgid "Shall the new role be a superuser?" msgstr "Должна ли новая роль иметь полномочия суперпользователя?" -#: createuser.c:236 +#: createuser.c:240 msgid "Shall the new role be allowed to create databases?" msgstr "Новая роль должна иметь право создавать базы данных?" -#: createuser.c:244 +#: createuser.c:248 msgid "Shall the new role be allowed to create more new roles?" msgstr "Новая роль должна иметь право создавать другие роли?" -#: createuser.c:274 +#: createuser.c:284 #, c-format msgid "password encryption failed: %s" msgstr "ошибка при шифровании пароля: %s" -#: createuser.c:329 +#: createuser.c:339 #, c-format msgid "creation of new role failed: %s" msgstr "создать роль не удалось: %s" -#: createuser.c:343 +#: createuser.c:353 #, c-format msgid "" "%s creates a new PostgreSQL role.\n" @@ -517,12 +531,12 @@ msgstr "" "%s создаёт роль пользователя PostgreSQL.\n" "\n" -#: createuser.c:345 dropuser.c:164 +#: createuser.c:355 dropuser.c:171 #, c-format msgid " %s [OPTION]... [ROLENAME]\n" msgstr " %s [ПАРАМЕТР]... [ИМЯ_РОЛИ]\n" -#: createuser.c:347 +#: createuser.c:357 #, c-format msgid "" " -c, --connection-limit=N connection limit for role (default: no limit)\n" @@ -530,24 +544,24 @@ msgstr "" " -c, --connection-limit=N предел подключений для роли\n" " (по умолчанию предела нет)\n" -#: createuser.c:348 +#: createuser.c:358 #, c-format msgid " -d, --createdb role can create new databases\n" msgstr " -d, --createdb роль с правом создания баз данных\n" -#: createuser.c:349 +#: createuser.c:359 #, c-format msgid " -D, --no-createdb role cannot create databases (default)\n" msgstr "" " -D, --no-createdb роль без права создания баз данных (по " "умолчанию)\n" -#: createuser.c:351 +#: createuser.c:361 #, c-format msgid " -g, --role=ROLE new role will be a member of this role\n" msgstr " -g, --role=РОЛЬ новая роль будет включена в эту роль\n" -#: createuser.c:352 +#: createuser.c:362 #, c-format msgid "" " -i, --inherit role inherits privileges of roles it is a\n" @@ -557,52 +571,52 @@ msgstr "" "она\n" " включена (по умолчанию)\n" -#: createuser.c:354 +#: createuser.c:364 #, c-format msgid " -I, --no-inherit role does not inherit privileges\n" msgstr " -I, --no-inherit роль не наследует права\n" -#: createuser.c:355 +#: createuser.c:365 #, c-format msgid " -l, --login role can login (default)\n" msgstr "" " -l, --login роль с правом подключения к серверу (по " "умолчанию)\n" -#: createuser.c:356 +#: createuser.c:366 #, c-format msgid " -L, --no-login role cannot login\n" msgstr " -L, --no-login роль без права подключения\n" -#: createuser.c:357 +#: createuser.c:367 #, c-format msgid " -P, --pwprompt assign a password to new role\n" msgstr " -P, --pwprompt назначить пароль новой роли\n" -#: createuser.c:358 +#: createuser.c:368 #, c-format msgid " -r, --createrole role can create new roles\n" msgstr " -r, --createrole роль с правом создания других ролей\n" -#: createuser.c:359 +#: createuser.c:369 #, c-format msgid " -R, --no-createrole role cannot create roles (default)\n" msgstr "" " -R, --no-createrole роль без права создания ролей (по умолчанию)\n" -#: createuser.c:360 +#: createuser.c:370 #, c-format msgid " -s, --superuser role will be superuser\n" msgstr " -s, --superuser роль с полномочиями суперпользователя\n" -#: createuser.c:361 +#: createuser.c:371 #, c-format msgid " -S, --no-superuser role will not be superuser (default)\n" msgstr "" " -S, --no-superuser роль без полномочий суперпользователя (по " "умолчанию)\n" -#: createuser.c:363 +#: createuser.c:373 #, c-format msgid "" " --interactive prompt for missing role name and attributes " @@ -612,17 +626,17 @@ msgstr "" " --interactive запрашивать отсутствующие атрибуты и имя роли,\n" " а не использовать значения по умолчанию\n" -#: createuser.c:365 +#: createuser.c:375 #, c-format msgid " --replication role can initiate replication\n" msgstr " --replication роль может инициировать репликацию\n" -#: createuser.c:366 +#: createuser.c:376 #, c-format msgid " --no-replication role cannot initiate replication\n" msgstr " --no-replication роль не может инициировать репликацию\n" -#: createuser.c:371 +#: createuser.c:381 #, c-format msgid "" " -U, --username=USERNAME user name to connect as (not the one to create)\n" @@ -630,26 +644,26 @@ msgstr "" " -U, --username=ИМЯ имя пользователя для выполнения операции\n" " (но не имя новой роли)\n" -#: dropdb.c:104 +#: dropdb.c:110 #, c-format msgid "missing required argument database name" msgstr "отсутствует необходимый аргумент: имя базы данных" -#: dropdb.c:119 +#: dropdb.c:125 #, c-format msgid "Database \"%s\" will be permanently removed.\n" msgstr "База данных \"%s\" будет удалена безвозвратно.\n" -#: dropdb.c:120 dropuser.c:130 +#: dropdb.c:126 dropuser.c:131 msgid "Are you sure?" msgstr "Вы уверены? (y/n)" -#: dropdb.c:142 +#: dropdb.c:155 #, c-format msgid "database removal failed: %s" msgstr "ошибка при удалении базы данных: %s" -#: dropdb.c:156 +#: dropdb.c:169 #, c-format msgid "" "%s removes a PostgreSQL database.\n" @@ -658,43 +672,52 @@ msgstr "" "%s удаляет базу данных PostgreSQL.\n" "\n" -#: dropdb.c:158 +#: dropdb.c:171 #, c-format msgid " %s [OPTION]... DBNAME\n" msgstr " %s [ПАРАМЕТР]... БД\n" -#: dropdb.c:161 +#: dropdb.c:174 +#, c-format +msgid "" +" -f, --force try to terminate other connections before " +"dropping\n" +msgstr "" +" -f, --force пытаться закрыть другие подключения перед " +"удалением\n" + +#: dropdb.c:175 #, c-format msgid " -i, --interactive prompt before deleting anything\n" msgstr " -i, --interactive подтвердить операцию удаления\n" -#: dropdb.c:163 +#: dropdb.c:177 #, c-format msgid "" " --if-exists don't report error if database doesn't exist\n" msgstr "" " --if-exists не считать ошибкой отсутствие базы данных\n" -#: dropuser.c:115 +#: dropuser.c:116 msgid "Enter name of role to drop: " msgstr "Введите имя удаляемой роли: " -#: dropuser.c:121 +#: dropuser.c:122 #, c-format msgid "missing required argument role name" msgstr "отсутствует необходимый аргумент: имя роли" -#: dropuser.c:129 +#: dropuser.c:130 #, c-format msgid "Role \"%s\" will be permanently removed.\n" msgstr "Роль \"%s\" будет удалена безвозвратно.\n" -#: dropuser.c:147 +#: dropuser.c:154 #, c-format msgid "removal of role \"%s\" failed: %s" msgstr "ошибка при удалении роли \"%s\": %s" -#: dropuser.c:162 +#: dropuser.c:169 #, c-format msgid "" "%s removes a PostgreSQL role.\n" @@ -703,7 +726,7 @@ msgstr "" "%s удаляет роль PostgreSQL.\n" "\n" -#: dropuser.c:167 +#: dropuser.c:174 #, c-format msgid "" " -i, --interactive prompt before deleting anything, and prompt for\n" @@ -712,13 +735,13 @@ msgstr "" " -i, --interactive подтверждать операцию удаления и запрашивать\n" " имя роли, если оно не указано\n" -#: dropuser.c:170 +#: dropuser.c:177 #, c-format msgid " --if-exists don't report error if user doesn't exist\n" msgstr "" " --if-exists не считать ошибкой отсутствие пользователя\n" -#: dropuser.c:175 +#: dropuser.c:182 #, c-format msgid "" " -U, --username=USERNAME user name to connect as (not the one to drop)\n" @@ -821,91 +844,116 @@ msgid " -U, --username=USERNAME user name to connect as\n" msgstr "" " -U, --username=ИМЯ имя пользователя для подключения к серверу\n" -#: reindexdb.c:168 +#: reindexdb.c:152 vacuumdb.c:184 +#, c-format +msgid "number of parallel jobs must be at least 1" +msgstr "число параллельных заданий должно быть не меньше 1" + +#: reindexdb.c:202 #, c-format msgid "cannot reindex all databases and a specific one at the same time" msgstr "" "нельзя переиндексировать все базы данных и одну конкретную одновременно" -#: reindexdb.c:173 +#: reindexdb.c:207 #, c-format msgid "cannot reindex all databases and system catalogs at the same time" msgstr "" "нельзя переиндексировать все базы данных и системные каталоги одновременно" -#: reindexdb.c:178 +#: reindexdb.c:212 #, c-format msgid "cannot reindex specific schema(s) in all databases" msgstr "нельзя переиндексировать указанную схему(ы) во всех базах" -#: reindexdb.c:183 +#: reindexdb.c:217 #, c-format msgid "cannot reindex specific table(s) in all databases" msgstr "нельзя переиндексировать указанную таблицу(ы) во всех базах" -#: reindexdb.c:188 +#: reindexdb.c:222 #, c-format msgid "cannot reindex specific index(es) in all databases" msgstr "нельзя переиндексировать указанный индекс(ы) во всех базах" -#: reindexdb.c:199 +#: reindexdb.c:235 #, c-format msgid "cannot reindex specific schema(s) and system catalogs at the same time" msgstr "" "нельзя переиндексировать указанную схему(ы) и системные каталоги одновременно" -#: reindexdb.c:204 +#: reindexdb.c:240 #, c-format msgid "cannot reindex specific table(s) and system catalogs at the same time" msgstr "" "нельзя переиндексировать указанную таблицу(ы) и системные каталоги " "одновременно" -#: reindexdb.c:209 +#: reindexdb.c:245 #, c-format msgid "cannot reindex specific index(es) and system catalogs at the same time" msgstr "" "нельзя переиндексировать указанный индекс(ы) и системные каталоги " "одновременно" -#: reindexdb.c:298 vacuumdb.c:410 vacuumdb.c:418 vacuumdb.c:425 vacuumdb.c:432 +#: reindexdb.c:251 +#, c-format +msgid "cannot use multiple jobs to reindex system catalogs" +msgstr "" +"нельзя задействовать несколько заданий для переиндексирования системных " +"каталогов" + +#: reindexdb.c:280 +#, c-format +msgid "cannot use multiple jobs to reindex indexes" +msgstr "нельзя задействовать несколько заданий для перестроения индексов" + +#: reindexdb.c:344 vacuumdb.c:413 vacuumdb.c:421 vacuumdb.c:428 vacuumdb.c:435 +#: vacuumdb.c:442 #, c-format msgid "" "cannot use the \"%s\" option on server versions older than PostgreSQL %s" msgstr "" "параметр \"%s\" нельзя использовать с серверами PostgreSQL версии старее %s" -#: reindexdb.c:326 +#: reindexdb.c:384 #, c-format -msgid "reindexing of table \"%s\" in database \"%s\" failed: %s" -msgstr "переиндексировать таблицу \"%s\" в базе \"%s\" не удалось: %s" +msgid "cannot reindex system catalogs concurrently, skipping all" +msgstr "" +"все системные каталоги пропускаются, так как их нельзя переиндексировать " +"неблокирующим способом" -#: reindexdb.c:329 +#: reindexdb.c:564 +#, c-format +msgid "reindexing of database \"%s\" failed: %s" +msgstr "переиндексировать базу данных \"%s\" не удалось: %s" + +#: reindexdb.c:568 #, c-format msgid "reindexing of index \"%s\" in database \"%s\" failed: %s" msgstr "перестроить индекс \"%s\" в базе \"%s\" не удалось: %s" -#: reindexdb.c:332 +#: reindexdb.c:572 #, c-format msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s" msgstr "переиндексировать схему \"%s\" в базе \"%s\" не удалось: %s" -#: reindexdb.c:335 +#: reindexdb.c:576 #, c-format -msgid "reindexing of database \"%s\" failed: %s" -msgstr "переиндексировать базу данных \"%s\" не удалось: %s" +msgid "reindexing of system catalogs in database \"%s\" failed: %s" +msgstr "переиндексировать системные каталоги в базе \"%s\" не удалось: %s" -#: reindexdb.c:369 +#: reindexdb.c:580 #, c-format -msgid "%s: reindexing database \"%s\"\n" -msgstr "%s: переиндексация базы данных \"%s\"\n" +msgid "reindexing of table \"%s\" in database \"%s\" failed: %s" +msgstr "переиндексировать таблицу \"%s\" в базе \"%s\" не удалось: %s" -#: reindexdb.c:412 +#: reindexdb.c:732 #, c-format -msgid "reindexing of system catalogs failed: %s" -msgstr "переиндексировать системные каталоги не удалось: %s" +msgid "%s: reindexing database \"%s\"\n" +msgstr "%s: переиндексация базы данных \"%s\"\n" -#: reindexdb.c:424 +#: reindexdb.c:749 #, c-format msgid "" "%s reindexes a PostgreSQL database.\n" @@ -914,44 +962,52 @@ msgstr "" "%s переиндексирует базу данных PostgreSQL.\n" "\n" -#: reindexdb.c:428 +#: reindexdb.c:753 #, c-format msgid " -a, --all reindex all databases\n" msgstr " -a, --all переиндексировать все базы данных\n" -#: reindexdb.c:429 +#: reindexdb.c:754 #, c-format msgid " --concurrently reindex concurrently\n" msgstr " --concurrently переиндексировать в неблокирующем режиме\n" -#: reindexdb.c:430 +#: reindexdb.c:755 #, c-format msgid " -d, --dbname=DBNAME database to reindex\n" msgstr " -d, --dbname=БД имя базы для переиндексации\n" -#: reindexdb.c:432 +#: reindexdb.c:757 #, c-format msgid " -i, --index=INDEX recreate specific index(es) only\n" msgstr " -i, --index=ИНДЕКС пересоздать только указанный индекс(ы)\n" -#: reindexdb.c:434 +#: reindexdb.c:758 +#, c-format +msgid "" +" -j, --jobs=NUM use this many concurrent connections to reindex\n" +msgstr "" +" -j, --jobs=ЧИСЛО запускать для переиндексации заданное число " +"заданий\n" + +#: reindexdb.c:760 #, c-format msgid " -s, --system reindex system catalogs\n" msgstr " -s, --system переиндексировать системные каталоги\n" -#: reindexdb.c:435 +#: reindexdb.c:761 #, c-format msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" msgstr "" " -S, --schema=СХЕМА переиндексировать только указанную схему(ы)\n" -#: reindexdb.c:436 +#: reindexdb.c:762 #, c-format msgid " -t, --table=TABLE reindex specific table(s) only\n" msgstr "" " -t, --table=ТАБЛИЦА переиндексировать только указанную таблицу(ы)\n" -#: reindexdb.c:447 +#: reindexdb.c:773 #, c-format msgid "" "\n" @@ -960,74 +1016,80 @@ msgstr "" "\n" "Подробнее о переиндексации вы можете узнать в описании SQL-команды REINDEX.\n" -#: vacuumdb.c:211 +#: scripts_parallel.c:232 #, c-format -msgid "number of parallel jobs must be at least 1" -msgstr "число параллельных заданий должно быть не меньше 1" +msgid "too many jobs for this platform -- try %d" +msgstr "слишком много заданий для этой платформы — попробуйте уменьшить до %d" + +#: vacuumdb.c:192 +#, c-format +msgid "parallel vacuum degree must be a non-negative integer" +msgstr "" +"степень параллельности для очистки должна задаваться неотрицательным целым" -#: vacuumdb.c:231 +#: vacuumdb.c:212 #, c-format msgid "minimum transaction ID age must be at least 1" msgstr "минимальный возраст транзакций должен быть не меньше 1" -#: vacuumdb.c:239 +#: vacuumdb.c:220 #, c-format msgid "minimum multixact ID age must be at least 1" msgstr "минимальный возраст мультитранзакций должен быть не меньше 1" -#: vacuumdb.c:271 vacuumdb.c:277 vacuumdb.c:283 +#: vacuumdb.c:252 vacuumdb.c:258 vacuumdb.c:264 vacuumdb.c:276 #, c-format msgid "cannot use the \"%s\" option when performing only analyze" msgstr "при выполнении только анализа нельзя использовать параметр \"%s\"" -#: vacuumdb.c:300 +#: vacuumdb.c:282 +#, c-format +msgid "cannot use the \"%s\" option when performing full vacuum" +msgstr "при выполнении полной очистки нельзя использовать параметр \"%s\"" + +#: vacuumdb.c:305 #, c-format msgid "cannot vacuum all databases and a specific one at the same time" msgstr "нельзя очистить все базы данных и одну конкретную одновременно" -#: vacuumdb.c:305 +#: vacuumdb.c:310 #, c-format msgid "cannot vacuum specific table(s) in all databases" msgstr "нельзя очистить только указанную таблицу(ы) во всех базах" -#: vacuumdb.c:396 +#: vacuumdb.c:400 msgid "Generating minimal optimizer statistics (1 target)" msgstr "Вычисление минимальной статистики для оптимизатора (1 запись)" -#: vacuumdb.c:397 +#: vacuumdb.c:401 msgid "Generating medium optimizer statistics (10 targets)" msgstr "Вычисление средней статистики для оптимизатора (10 записей)" -#: vacuumdb.c:398 +#: vacuumdb.c:402 msgid "Generating default (full) optimizer statistics" msgstr "Вычисление стандартной (полной) статистики для оптимизатора" -#: vacuumdb.c:440 +#: vacuumdb.c:450 #, c-format msgid "%s: processing database \"%s\": %s\n" msgstr "%s: обработка базы данных \"%s\": %s\n" -#: vacuumdb.c:443 +#: vacuumdb.c:453 #, c-format msgid "%s: vacuuming database \"%s\"\n" msgstr "%s: очистка базы данных \"%s\"\n" -#: vacuumdb.c:642 -#, c-format -msgid "too many jobs for this platform -- try %d" -msgstr "слишком много заданий для этой платформы — попробуйте уменьшить до %d" - -#: vacuumdb.c:952 +#: vacuumdb.c:899 #, c-format msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s" msgstr "очистить таблицу \"%s\" в базе \"%s\" не удалось: %s" -#: vacuumdb.c:955 vacuumdb.c:1090 +#: vacuumdb.c:902 #, c-format msgid "vacuuming of database \"%s\" failed: %s" msgstr "очистить базу данных \"%s\" не удалось: %s" -#: vacuumdb.c:1225 +#: vacuumdb.c:910 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -1036,23 +1098,23 @@ msgstr "" "%s очищает и анализирует базу данных PostgreSQL.\n" "\n" -#: vacuumdb.c:1229 +#: vacuumdb.c:914 #, c-format msgid " -a, --all vacuum all databases\n" msgstr " -a, --all очистить все базы данных\n" -#: vacuumdb.c:1230 +#: vacuumdb.c:915 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=ИМЯ_БД очистить указанную базу данных\n" -#: vacuumdb.c:1231 +#: vacuumdb.c:916 #, c-format msgid " --disable-page-skipping disable all page-skipping behavior\n" msgstr "" " --disable-page-skipping исключить все варианты пропуска страниц\n" -#: vacuumdb.c:1232 +#: vacuumdb.c:917 #, c-format msgid "" " -e, --echo show the commands being sent to the " @@ -1060,19 +1122,19 @@ msgid "" msgstr "" " -e, --echo отображать команды, отправляемые серверу\n" -#: vacuumdb.c:1233 +#: vacuumdb.c:918 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full произвести полную очистку\n" -#: vacuumdb.c:1234 +#: vacuumdb.c:919 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr "" " -F, --freeze заморозить информацию о транзакциях в " "строках\n" -#: vacuumdb.c:1235 +#: vacuumdb.c:920 #, c-format msgid "" " -j, --jobs=NUM use this many concurrent connections to " @@ -1081,7 +1143,7 @@ msgstr "" " -j, --jobs=ЧИСЛО запускать для очистки заданное число " "заданий\n" -#: vacuumdb.c:1236 +#: vacuumdb.c:921 #, c-format msgid "" " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to " @@ -1090,7 +1152,7 @@ msgstr "" " --min-mxid-age=ВОЗРАСТ минимальный возраст мультитранзакций для\n" " таблиц, подлежащих очистке\n" -#: vacuumdb.c:1237 +#: vacuumdb.c:922 #, c-format msgid "" " --min-xid-age=XID_AGE minimum transaction ID age of tables to " @@ -1100,12 +1162,22 @@ msgstr "" "таблиц,\n" " подлежащих очистке\n" -#: vacuumdb.c:1238 +#: vacuumdb.c:923 +#, c-format +msgid "" +" -P, --parallel=PARALLEL_DEGREE use this many background workers for " +"vacuum, if available\n" +msgstr "" +" -P, --parallel=СТЕПЕНЬ_ПАРАЛЛЕЛЬНОСТИ\n" +" по возможности использовать для очистки\n" +" заданное число фоновых процессов\n" + +#: vacuumdb.c:924 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet не выводить сообщения\n" -#: vacuumdb.c:1239 +#: vacuumdb.c:925 #, c-format msgid "" " --skip-locked skip relations that cannot be immediately " @@ -1114,29 +1186,29 @@ msgstr "" " --skip-locked пропускать отношения, которые не удаётся\n" " заблокировать немедленно\n" -#: vacuumdb.c:1240 +#: vacuumdb.c:926 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr "" " -t, --table='ТАБЛ[(СТОЛБЦЫ)]' очистить только указанную таблицу(ы)\n" -#: vacuumdb.c:1241 +#: vacuumdb.c:927 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose выводить исчерпывающие сообщения\n" -#: vacuumdb.c:1242 +#: vacuumdb.c:928 #, c-format msgid "" " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: vacuumdb.c:1243 +#: vacuumdb.c:929 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze обновить статистику оптимизатора\n" -#: vacuumdb.c:1244 +#: vacuumdb.c:930 #, c-format msgid "" " -Z, --analyze-only only update optimizer statistics; no " @@ -1145,7 +1217,7 @@ msgstr "" " -Z, --analyze-only только обновить статистику оптимизатора,\n" " не очищать БД\n" -#: vacuumdb.c:1245 +#: vacuumdb.c:931 #, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in " @@ -1157,12 +1229,12 @@ msgstr "" " (в несколько проходов для большей " "скорости), без очистки\n" -#: vacuumdb.c:1247 +#: vacuumdb.c:933 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: vacuumdb.c:1255 +#: vacuumdb.c:941 #, c-format msgid "" "\n" @@ -1171,6 +1243,19 @@ msgstr "" "\n" "Подробнее об очистке вы можете узнать в описании SQL-команды VACUUM.\n" +#~ msgid "Could not send cancel request: %s" +#~ msgstr "Отправить сигнал отмены не удалось: %s" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Об ошибках сообщайте по адресу .\n" + +#~ msgid "reindexing of system catalogs failed: %s" +#~ msgstr "переиндексировать системные каталоги не удалось: %s" + #~ msgid "%s: %s" #~ msgstr "%s: %s" diff --git a/src/bin/scripts/po/sv.po b/src/bin/scripts/po/sv.po index f8c5d3edaf8bd..926b1fea69956 100644 --- a/src/bin/scripts/po/sv.po +++ b/src/bin/scripts/po/sv.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-09 08:46+0000\n" -"PO-Revision-Date: 2020-05-09 13:49+0200\n" +"POT-Creation-Date: 2020-09-16 05:16+0000\n" +"PO-Revision-Date: 2020-09-16 07:56+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -57,6 +57,19 @@ msgstr "användaren finns inte" msgid "user name lookup failure: error code %lu" msgstr "misslyckad sökning efter användarnamn: felkod %lu" +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Förfrågan om avbrytning skickad\n" + +#: ../../fe_utils/cancel.c:165 +msgid "Could not send cancel request: " +msgstr "Kunde inte skicka förfrågan om avbrytning: " + +#: ../../fe_utils/cancel.c:210 +#, c-format +msgid "Could not send cancel request: %s" +msgstr "Kunde inte skicka förfrågan om avbrytning: %s" + #: ../../fe_utils/print.c:350 #, c-format msgid "(%lu row)" @@ -935,6 +948,11 @@ msgstr "" "\n" "Läs beskrivningen av SQL-kommandot REINDEX för detaljer.\n" +#: scripts_parallel.c:234 +#, c-format +msgid "too many jobs for this platform -- try %d" +msgstr "för många jobb för denna plattform -- försök med %d" + #: vacuumdb.c:194 #, c-format msgid "parallel vacuum degree must be a non-negative integer" @@ -957,8 +975,8 @@ msgstr "flaggan \"%s\" kan inte användas vid enbart analys" #: vacuumdb.c:284 #, c-format -msgid "cannot use the \"%s\" option when performing full" -msgstr "flaggan \"%s\" kan inte användas med \"full\"" +msgid "cannot use the \"%s\" option when performing full vacuum" +msgstr "flaggan \"%s\" kan inte användas vid \"full vacuum\"" #: vacuumdb.c:300 #, c-format diff --git a/src/bin/scripts/po/uk.po b/src/bin/scripts/po/uk.po new file mode 100644 index 0000000000000..8787c2780c2f9 --- /dev/null +++ b/src/bin/scripts/po/uk.po @@ -0,0 +1,1089 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:16+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: \n" +"Language-Team: Ukrainian\n" +"Language: uk_UA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /DEV_13/pgscripts.pot\n" +"X-Crowdin-File-ID: 514\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "збій: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "помилка: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "попередження: " + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "недостатньо пам'яті\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" + +#: ../../common/username.c:43 +#, c-format +msgid "could not look up effective user ID %ld: %s" +msgstr "не можу знайти користувача з ефективним ID %ld: %s" + +#: ../../common/username.c:45 +msgid "user does not exist" +msgstr "користувача не існує" + +#: ../../common/username.c:60 +#, c-format +msgid "user name lookup failure: error code %lu" +msgstr "невдала підстановка імені користувача: код помилки %lu" + +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Запит на скасування відправлений\n" + +#: ../../fe_utils/cancel.c:165 +msgid "Could not send cancel request: " +msgstr "не вдалося надіслати запит на скасування: " + +#: ../../fe_utils/cancel.c:210 +#, c-format +msgid "Could not send cancel request: %s" +msgstr "Не вдалося надіслати скасування запиту: %s" + +#: ../../fe_utils/print.c:350 +#, c-format +msgid "(%lu row)" +msgid_plural "(%lu rows)" +msgstr[0] "(%lu рядок)" +msgstr[1] "(%lu рядки)" +msgstr[2] "(%lu рядків)" +msgstr[3] "(%lu рядка)" + +#: ../../fe_utils/print.c:3055 +#, c-format +msgid "Interrupted\n" +msgstr "Перервано\n" + +#: ../../fe_utils/print.c:3119 +#, c-format +msgid "Cannot add header to table content: column count of %d exceeded.\n" +msgstr "Неможливо додати заголовок до вмісту таблиці: кількість колонок %d перевищено.\n" + +#: ../../fe_utils/print.c:3159 +#, c-format +msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" +msgstr "Неможливо додати комірку до вмісту таблиці: перевищено загальну кількість комірок %d.\n" + +#: ../../fe_utils/print.c:3414 +#, c-format +msgid "invalid output format (internal error): %d" +msgstr "невірний формат виводу (внутрішня помилка): %d" + +#: clusterdb.c:114 clusterdb.c:133 createdb.c:121 createdb.c:140 +#: createuser.c:171 createuser.c:186 dropdb.c:101 dropdb.c:110 dropdb.c:118 +#: dropuser.c:92 dropuser.c:107 dropuser.c:122 pg_isready.c:95 pg_isready.c:109 +#: reindexdb.c:168 reindexdb.c:187 vacuumdb.c:227 vacuumdb.c:246 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" + +#: clusterdb.c:131 createdb.c:138 createuser.c:184 dropdb.c:116 dropuser.c:105 +#: pg_isready.c:107 reindexdb.c:185 vacuumdb.c:244 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "забагато аргументів у командному рядку (перший \"%s\")" + +#: clusterdb.c:143 +#, c-format +msgid "cannot cluster all databases and a specific one at the same time" +msgstr "неможливо кластеризувати всі бази даних і одну вказану одночасно" + +#: clusterdb.c:149 +#, c-format +msgid "cannot cluster specific table(s) in all databases" +msgstr "неможливо кластеризувати вказані таблиці у всіх базах даних" + +#: clusterdb.c:217 +#, c-format +msgid "clustering of table \"%s\" in database \"%s\" failed: %s" +msgstr "кластеризувати таблицю \"%s\" у базі даних \"%s\" не вдалося: %s" + +#: clusterdb.c:220 +#, c-format +msgid "clustering of database \"%s\" failed: %s" +msgstr "кластеризувати базу даних \"%s\" не вдалося: %s" + +#: clusterdb.c:253 +#, c-format +msgid "%s: clustering database \"%s\"\n" +msgstr "%s: кластеризація бази даних \"%s\"\n" + +#: clusterdb.c:274 +#, c-format +msgid "%s clusters all previously clustered tables in a database.\n\n" +msgstr "%s кластеризація усіх попередньо кластеризованих таблиць в базі даних.\n\n" + +#: clusterdb.c:275 createdb.c:259 createuser.c:347 dropdb.c:164 dropuser.c:163 +#: pg_isready.c:224 reindexdb.c:753 vacuumdb.c:921 +#, c-format +msgid "Usage:\n" +msgstr "Використання:\n" + +#: clusterdb.c:276 reindexdb.c:754 vacuumdb.c:922 +#, c-format +msgid " %s [OPTION]... [DBNAME]\n" +msgstr " %s [OPTION]... [DBNAME]\n" + +#: clusterdb.c:277 createdb.c:261 createuser.c:349 dropdb.c:166 dropuser.c:165 +#: pg_isready.c:227 reindexdb.c:755 vacuumdb.c:923 +#, c-format +msgid "\n" +"Options:\n" +msgstr "\n" +"Параметри:\n" + +#: clusterdb.c:278 +#, c-format +msgid " -a, --all cluster all databases\n" +msgstr " -a, --all кластеризація усіх баз даних\n" + +#: clusterdb.c:279 +#, c-format +msgid " -d, --dbname=DBNAME database to cluster\n" +msgstr " -d, --dbname=ІМ'Я_БД база даних для кластеризації\n" + +#: clusterdb.c:280 createuser.c:353 dropdb.c:167 dropuser.c:166 reindexdb.c:759 +#, c-format +msgid " -e, --echo show the commands being sent to the server\n" +msgstr " -e, --echo показати команди, надіслані серверу\n" + +#: clusterdb.c:281 reindexdb.c:762 +#, c-format +msgid " -q, --quiet don't write any messages\n" +msgstr " -q, --quiet не виводити жодних повідомлень\n" + +#: clusterdb.c:282 +#, c-format +msgid " -t, --table=TABLE cluster specific table(s) only\n" +msgstr " -t, --table=ТАБЛИЦЯ кластеризувати тільки вказані таблиці\n" + +#: clusterdb.c:283 reindexdb.c:766 +#, c-format +msgid " -v, --verbose write a lot of output\n" +msgstr " -v, --verbose виводити багато інформації\n" + +#: clusterdb.c:284 createuser.c:365 dropdb.c:170 dropuser.c:169 reindexdb.c:767 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію і вийти\n" + +#: clusterdb.c:285 createuser.c:370 dropdb.c:172 dropuser.c:171 reindexdb.c:768 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку, потім вийти\n" + +#: clusterdb.c:286 createdb.c:272 createuser.c:371 dropdb.c:173 dropuser.c:172 +#: pg_isready.c:233 reindexdb.c:769 vacuumdb.c:944 +#, c-format +msgid "\n" +"Connection options:\n" +msgstr "\n" +"Налаштування з'єднання:\n" + +#: clusterdb.c:287 createuser.c:372 dropdb.c:174 dropuser.c:173 reindexdb.c:770 +#: vacuumdb.c:945 +#, c-format +msgid " -h, --host=HOSTNAME database server host or socket directory\n" +msgstr " -h, --host=HOSTNAME хост сервера бази даних або каталог сокетів\n" + +#: clusterdb.c:288 createuser.c:373 dropdb.c:175 dropuser.c:174 reindexdb.c:771 +#: vacuumdb.c:946 +#, c-format +msgid " -p, --port=PORT database server port\n" +msgstr " -p, --port=PORT порт сервера бази даних\n" + +#: clusterdb.c:289 dropdb.c:176 reindexdb.c:772 vacuumdb.c:947 +#, c-format +msgid " -U, --username=USERNAME user name to connect as\n" +msgstr " -U, --username=ІМ'Я_КОРИСТУВАЧА ім'я користувача для з'єднання з сервером\n" + +#: clusterdb.c:290 createuser.c:375 dropdb.c:177 dropuser.c:176 reindexdb.c:773 +#: vacuumdb.c:948 +#, c-format +msgid " -w, --no-password never prompt for password\n" +msgstr " -w, --no-password ніколи не запитувати пароль\n" + +#: clusterdb.c:291 createuser.c:376 dropdb.c:178 dropuser.c:177 reindexdb.c:774 +#: vacuumdb.c:949 +#, c-format +msgid " -W, --password force password prompt\n" +msgstr " -W, --password запросити пароль\n" + +#: clusterdb.c:292 dropdb.c:179 reindexdb.c:775 vacuumdb.c:950 +#, c-format +msgid " --maintenance-db=DBNAME alternate maintenance database\n" +msgstr " --maintenance-db=DBNAME альтернативна бази даних для обслуговування\n" + +#: clusterdb.c:293 +#, c-format +msgid "\n" +"Read the description of the SQL command CLUSTER for details.\n" +msgstr "\n" +"Для деталей читайте опис команди SQL CLUSTER.\n" + +#: clusterdb.c:294 createdb.c:280 createuser.c:377 dropdb.c:180 dropuser.c:178 +#: pg_isready.c:238 reindexdb.c:777 vacuumdb.c:952 +#, c-format +msgid "\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Повідомляти про помилки на <%s>.\n" + +#: clusterdb.c:295 createdb.c:281 createuser.c:378 dropdb.c:181 dropuser.c:179 +#: pg_isready.c:239 reindexdb.c:778 vacuumdb.c:953 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: common.c:79 common.c:125 +msgid "Password: " +msgstr "Пароль: " + +#: common.c:112 +#, c-format +msgid "could not connect to database %s: out of memory" +msgstr "не можливо під'єднатися до бази даних %s: не вистачає пам'яті" + +#: common.c:139 +#, c-format +msgid "could not connect to database %s: %s" +msgstr "не можливо під'єднатися до бази даних %s: %s" + +#: common.c:214 common.c:239 +#, c-format +msgid "query failed: %s" +msgstr "запит не вдався: %s" + +#: common.c:215 common.c:240 +#, c-format +msgid "query was: %s" +msgstr "запит був: %s" + +#: common.c:312 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "обробка бази даних \"%s\" не вдалась: %s" + +#: common.c:406 +#, c-format +msgid "query returned %d row instead of one: %s" +msgid_plural "query returned %d rows instead of one: %s" +msgstr[0] "запит повернув %d рядок замість одного: %s" +msgstr[1] "запит повернув %d рядки замість одного: %s" +msgstr[2] "запит повернув %d рядків замість одного: %s" +msgstr[3] "запит повернув %d рядків замість одного: %s" + +#. translator: abbreviation for "yes" +#: common.c:430 +msgid "y" +msgstr "y" + +#. translator: abbreviation for "no" +#: common.c:432 +msgid "n" +msgstr "n" + +#. translator: This is a question followed by the translated options for +#. "yes" and "no". +#: common.c:442 +#, c-format +msgid "%s (%s/%s) " +msgstr "%s (%s/%s) " + +#: common.c:456 +#, c-format +msgid "Please answer \"%s\" or \"%s\".\n" +msgstr "Відповідь має бути \"%s\" або \"%s\".\n" + +#: createdb.c:148 +#, c-format +msgid "only one of --locale and --lc-ctype can be specified" +msgstr "тільки --locale або --lc-ctype може бути вказаний" + +#: createdb.c:153 +#, c-format +msgid "only one of --locale and --lc-collate can be specified" +msgstr "можна вказати лише одне: або --locale, або --lc-collate" + +#: createdb.c:164 +#, c-format +msgid "\"%s\" is not a valid encoding name" +msgstr "\"%s\" не є невірним ім'ям кодування" + +#: createdb.c:221 +#, c-format +msgid "database creation failed: %s" +msgstr "створити базу даних не вдалося: %s" + +#: createdb.c:240 +#, c-format +msgid "comment creation failed (database was created): %s" +msgstr "не вдалося створити коментарі (база даних була створена): %s" + +#: createdb.c:258 +#, c-format +msgid "%s creates a PostgreSQL database.\n\n" +msgstr "%s створює базу даних PostgreSQL.\n\n" + +#: createdb.c:260 +#, c-format +msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n" +msgstr " %s [OPTION]... [DBNAME] [DESCRIPTION]\n" + +#: createdb.c:262 +#, c-format +msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n" +msgstr " -D, --tablespace=ТАБЛИЧНИЙ_ПРОСТІР табличний простір для бази даних за замовчуванням\n" + +#: createdb.c:263 +#, c-format +msgid " -e, --echo show the commands being sent to the server\n" +msgstr " -e, --echo показати команди, надіслані серверу\n" + +#: createdb.c:264 +#, c-format +msgid " -E, --encoding=ENCODING encoding for the database\n" +msgstr " -E, --encoding=КОДУВАННЯ кодування бази даних\n" + +#: createdb.c:265 +#, c-format +msgid " -l, --locale=LOCALE locale settings for the database\n" +msgstr " -l, --locale=ЛОКАЛЬ параметри локалі бази даних\n" + +#: createdb.c:266 +#, c-format +msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n" +msgstr " --lc-collate=ЛОКАЛЬ параметр LC_COLLATE для бази даних\n" + +#: createdb.c:267 +#, c-format +msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n" +msgstr " --lc-ctype=ЛОКАЛЬ параметр LC_CTYPE для бази даних\n" + +#: createdb.c:268 +#, c-format +msgid " -O, --owner=OWNER database user to own the new database\n" +msgstr " -O, --власник=ВЛАСНИК користувач-власник нової бази даних\n" + +#: createdb.c:269 +#, c-format +msgid " -T, --template=TEMPLATE template database to copy\n" +msgstr " -T, --шаблон=ШАБЛОН шаблонна база даних для копіювання\n" + +#: createdb.c:270 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію, потім вийти\n" + +#: createdb.c:271 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку, потім вийти\n" + +#: createdb.c:273 +#, c-format +msgid " -h, --host=HOSTNAME database server host or socket directory\n" +msgstr " -h, --host=ІМ'Я_ХОСТА хост сервера бази даних або каталог сокетів\n" + +#: createdb.c:274 +#, c-format +msgid " -p, --port=PORT database server port\n" +msgstr " -p, --port=ПОРТ порт сервера бази даних\n" + +#: createdb.c:275 +#, c-format +msgid " -U, --username=USERNAME user name to connect as\n" +msgstr " -U, --username=ІМ'Я_КОРИСТУВАЧА ім'я користувача для з'єднання з сервером\n" + +#: createdb.c:276 +#, c-format +msgid " -w, --no-password never prompt for password\n" +msgstr " -w, --no-password ніколи не запитувати пароль\n" + +#: createdb.c:277 +#, c-format +msgid " -W, --password force password prompt\n" +msgstr " -W, --password запросити пароль\n" + +#: createdb.c:278 +#, c-format +msgid " --maintenance-db=DBNAME alternate maintenance database\n" +msgstr " --maintenance-db=DBNAME альтернативна бази даних для обслуговування\n" + +#: createdb.c:279 +#, c-format +msgid "\n" +"By default, a database with the same name as the current user is created.\n" +msgstr "\n" +"За замовчуванням ім'ям бази даних вважається ім'я поточного користувача.\n" + +#: createuser.c:150 +#, c-format +msgid "invalid value for --connection-limit: %s" +msgstr "неприпустиме значення для --connection-limit: %s" + +#: createuser.c:194 +msgid "Enter name of role to add: " +msgstr "Введіть ім'я нової ролі: " + +#: createuser.c:211 +msgid "Enter password for new role: " +msgstr "Введіть пароль для нової ролі: " + +#: createuser.c:213 +msgid "Enter it again: " +msgstr "Введіть знову: " + +#: createuser.c:216 +#, c-format +msgid "Passwords didn't match.\n" +msgstr "Паролі не співпадають.\n" + +#: createuser.c:224 +msgid "Shall the new role be a superuser?" +msgstr "Чи буде нова роль суперкористувачем?" + +#: createuser.c:239 +msgid "Shall the new role be allowed to create databases?" +msgstr "Чи дозволено новій ролі створювати бази даних?" + +#: createuser.c:247 +msgid "Shall the new role be allowed to create more new roles?" +msgstr "Чи дозволено новій ролі створювати інші нові ролі?" + +#: createuser.c:277 +#, c-format +msgid "password encryption failed: %s" +msgstr "помилка шифрування пароля: %s" + +#: createuser.c:332 +#, c-format +msgid "creation of new role failed: %s" +msgstr "не вдалося створити нову роль: %s" + +#: createuser.c:346 +#, c-format +msgid "%s creates a new PostgreSQL role.\n\n" +msgstr "%s створює нову роль PostgreSQL.\n\n" + +#: createuser.c:348 dropuser.c:164 +#, c-format +msgid " %s [OPTION]... [ROLENAME]\n" +msgstr " %s [OPTION]... [ROLENAME]\n" + +#: createuser.c:350 +#, c-format +msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n" +msgstr " -c, --connection-limit=N ліміт під'єднань для ролі (за замовчуванням ліміту немає)\n" + +#: createuser.c:351 +#, c-format +msgid " -d, --createdb role can create new databases\n" +msgstr " -d, --createdb роль може створювати нові бази даних\n" + +#: createuser.c:352 +#, c-format +msgid " -D, --no-createdb role cannot create databases (default)\n" +msgstr " -D, --no-createdb роль не може створювати нові бази даних (за замовчуванням)\n" + +#: createuser.c:354 +#, c-format +msgid " -g, --role=ROLE new role will be a member of this role\n" +msgstr " -g, --role=РОЛЬ нова роль буде включена в цю роль\n" + +#: createuser.c:355 +#, c-format +msgid " -i, --inherit role inherits privileges of roles it is a\n" +" member of (default)\n" +msgstr " -i, --inherit роль переймає права від ролей до яких вона\n" +" включена (за замовчуванням)\n" + +#: createuser.c:357 +#, c-format +msgid " -I, --no-inherit role does not inherit privileges\n" +msgstr " -I, --no-inherit роль не переймає права\n" + +#: createuser.c:358 +#, c-format +msgid " -l, --login role can login (default)\n" +msgstr " -l, --login роль може увійти (за замовчуванням)\n" + +#: createuser.c:359 +#, c-format +msgid " -L, --no-login role cannot login\n" +msgstr " -L, --no-login роль не може увійти\n" + +#: createuser.c:360 +#, c-format +msgid " -P, --pwprompt assign a password to new role\n" +msgstr " -P, --pwprompt призначення паролю для нової ролі\n" + +#: createuser.c:361 +#, c-format +msgid " -r, --createrole role can create new roles\n" +msgstr " -r, --createrole роль може створювати нові ролі\n" + +#: createuser.c:362 +#, c-format +msgid " -R, --no-createrole role cannot create roles (default)\n" +msgstr " -R, --no-createrole роль не може створювати нові бази даних (за замовчуванням)\n" + +#: createuser.c:363 +#, c-format +msgid " -s, --superuser role will be superuser\n" +msgstr " -s, --superuser роль буде суперкористувачем\n" + +#: createuser.c:364 +#, c-format +msgid " -S, --no-superuser role will not be superuser (default)\n" +msgstr " -S, --no-superuser роль не буде суперкористувачем (за замовчуванням)\n" + +#: createuser.c:366 +#, c-format +msgid " --interactive prompt for missing role name and attributes rather\n" +" than using defaults\n" +msgstr " --interactive запитати пропущені ім’я ролі та атрибути, а не використовувати стандартні\n" + +#: createuser.c:368 +#, c-format +msgid " --replication role can initiate replication\n" +msgstr " --replication роль може ініціювати реплікацію\n" + +#: createuser.c:369 +#, c-format +msgid " --no-replication role cannot initiate replication\n" +msgstr " --no-replication роль не може ініціювати реплікацію\n" + +#: createuser.c:374 +#, c-format +msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n" +msgstr " -U, --username=USERNAME ім'я користувача для підключення (не для створення)\n" + +#: dropdb.c:109 +#, c-format +msgid "missing required argument database name" +msgstr "немає запитаного аргументу: імені бази даних" + +#: dropdb.c:124 +#, c-format +msgid "Database \"%s\" will be permanently removed.\n" +msgstr "База даних \"%s\" буде назавжди видалена.\n" + +#: dropdb.c:125 dropuser.c:130 +msgid "Are you sure?" +msgstr "Ви впевнені?" + +#: dropdb.c:149 +#, c-format +msgid "database removal failed: %s" +msgstr "помилка при видаленні бази даних: %s" + +#: dropdb.c:163 +#, c-format +msgid "%s removes a PostgreSQL database.\n\n" +msgstr "%s видаляє базу даних PostgreSQL.\n\n" + +#: dropdb.c:165 +#, c-format +msgid " %s [OPTION]... DBNAME\n" +msgstr " %s [OPTION]... ІМ'Я_БД\n" + +#: dropdb.c:168 +#, c-format +msgid " -f, --force try to terminate other connections before dropping\n" +msgstr " -f, --force спробувати завершити інші підключення перед видаленням\n" + +#: dropdb.c:169 +#, c-format +msgid " -i, --interactive prompt before deleting anything\n" +msgstr " -i, --interactive запитувати перед видаленням чого-небудь\n" + +#: dropdb.c:171 +#, c-format +msgid " --if-exists don't report error if database doesn't exist\n" +msgstr " --if-exists не повідомляти про помилку, якщо бази даних не існує\n" + +#: dropuser.c:115 +msgid "Enter name of role to drop: " +msgstr "Введіть ім'я ролі для видалення: " + +#: dropuser.c:121 +#, c-format +msgid "missing required argument role name" +msgstr "немає запитаного аргументу: імені ролі" + +#: dropuser.c:129 +#, c-format +msgid "Role \"%s\" will be permanently removed.\n" +msgstr "Роль \"%s\" буде назавжди видалена.\n" + +#: dropuser.c:147 +#, c-format +msgid "removal of role \"%s\" failed: %s" +msgstr "помилка при видаленні ролі \"%s\": %s" + +#: dropuser.c:162 +#, c-format +msgid "%s removes a PostgreSQL role.\n\n" +msgstr "%s видаляє роль PostgreSQL.\n\n" + +#: dropuser.c:167 +#, c-format +msgid " -i, --interactive prompt before deleting anything, and prompt for\n" +" role name if not specified\n" +msgstr " -i, --interactive запитувати перед видаленням чого-небудь і запитувати\n" +" ім'я ролі, якщо не вказано\n" + +#: dropuser.c:170 +#, c-format +msgid " --if-exists don't report error if user doesn't exist\n" +msgstr " --if-exists не повідомляти про помилку, якщо користувача не існує\n" + +#: dropuser.c:175 +#, c-format +msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n" +msgstr " -U, --username=USERNAME ім'я користувача для підключення (не для розривання)\n" + +#: pg_isready.c:144 +#, c-format +msgid "%s" +msgstr "%s" + +#: pg_isready.c:152 +#, c-format +msgid "could not fetch default options" +msgstr "не вдалося отримати параметри за замовчуванням" + +#: pg_isready.c:201 +#, c-format +msgid "accepting connections\n" +msgstr "отримання підключень\n" + +#: pg_isready.c:204 +#, c-format +msgid "rejecting connections\n" +msgstr "відторгнення підключень\n" + +#: pg_isready.c:207 +#, c-format +msgid "no response\n" +msgstr "відповіді немає\n" + +#: pg_isready.c:210 +#, c-format +msgid "no attempt\n" +msgstr "немає спроб\n" + +#: pg_isready.c:213 +#, c-format +msgid "unknown\n" +msgstr "невідомо\n" + +#: pg_isready.c:223 +#, c-format +msgid "%s issues a connection check to a PostgreSQL database.\n\n" +msgstr "%s: перевірка підключення до бази даних PostgreSQL.\n\n" + +#: pg_isready.c:225 +#, c-format +msgid " %s [OPTION]...\n" +msgstr " %s: [OPTION]...\n" + +#: pg_isready.c:228 +#, c-format +msgid " -d, --dbname=DBNAME database name\n" +msgstr " -d, --dbname=ІМ'Я_БД ім'я бази даних\n" + +#: pg_isready.c:229 +#, c-format +msgid " -q, --quiet run quietly\n" +msgstr " -q, --quiet тихий запуск\n" + +#: pg_isready.c:230 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію, потім вийти\n" + +#: pg_isready.c:231 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку, потім вийти\n" + +#: pg_isready.c:234 +#, c-format +msgid " -h, --host=HOSTNAME database server host or socket directory\n" +msgstr " -h, --host=HOSTNAME хост серверу баз даних або каталог сокетів\n" + +#: pg_isready.c:235 +#, c-format +msgid " -p, --port=PORT database server port\n" +msgstr " -p, --port=ПОРТ порт сервера бази даних\n" + +#: pg_isready.c:236 +#, c-format +msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n" +msgstr " -t, --timeout=SECS секунд для очікування при спробі підключення, 0 без обмежень (за замовчуванням: %s)\n" + +#: pg_isready.c:237 +#, c-format +msgid " -U, --username=USERNAME user name to connect as\n" +msgstr " -U, --username=ІМ'Я_КОРИСТУВАЧА ім'я користувача для з'єднання з сервером\n" + +#: reindexdb.c:154 vacuumdb.c:186 +#, c-format +msgid "number of parallel jobs must be at least 1" +msgstr "число паралельних завдань повинно бути не менше 1" + +#: reindexdb.c:197 +#, c-format +msgid "cannot reindex all databases and a specific one at the same time" +msgstr "неможливо переіндексувати всі бази даних і одну вказану одночасно" + +#: reindexdb.c:202 +#, c-format +msgid "cannot reindex all databases and system catalogs at the same time" +msgstr "не можливо переіндексувати всі бази даних і системні каталоги одночасно" + +#: reindexdb.c:207 +#, c-format +msgid "cannot reindex specific schema(s) in all databases" +msgstr "неможливо переіндексувати вказані схеми в усіх базах даних" + +#: reindexdb.c:212 +#, c-format +msgid "cannot reindex specific table(s) in all databases" +msgstr "неможливо переіндексувати вказані таблиці в усіх базах даних" + +#: reindexdb.c:217 +#, c-format +msgid "cannot reindex specific index(es) in all databases" +msgstr "неможливо переіндексувати вказані індекси в усіх базах даних" + +#: reindexdb.c:229 +#, c-format +msgid "cannot reindex specific schema(s) and system catalogs at the same time" +msgstr "не можливо переіндексувати вказані схеми і системні каталоги одночасно" + +#: reindexdb.c:234 +#, c-format +msgid "cannot reindex specific table(s) and system catalogs at the same time" +msgstr "не можливо переіндексувати вказані таблиці і системні каталоги одночасно" + +#: reindexdb.c:239 +#, c-format +msgid "cannot reindex specific index(es) and system catalogs at the same time" +msgstr "не можливо переіндексувати вказані індекси і системні каталоги одночасно" + +#: reindexdb.c:245 +#, c-format +msgid "cannot use multiple jobs to reindex system catalogs" +msgstr "не можна використовувати декілька завдань для переіндексування системних каталогів" + +#: reindexdb.c:272 +#, c-format +msgid "cannot use multiple jobs to reindex indexes" +msgstr "не можна використовувати декілька завдань для переіндексування індексів" + +#: reindexdb.c:337 vacuumdb.c:410 vacuumdb.c:418 vacuumdb.c:425 vacuumdb.c:432 +#: vacuumdb.c:439 +#, c-format +msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s" +msgstr "не можна використовувати параметр \"%s\" на серверній версії старішій за PostgreSQL %s" + +#: reindexdb.c:377 +#, c-format +msgid "cannot reindex system catalogs concurrently, skipping all" +msgstr "не можна конкурентно переіндексувати системні каталоги, пропускаємо" + +#: reindexdb.c:558 +#, c-format +msgid "reindexing of database \"%s\" failed: %s" +msgstr "переіндексувати базу даних \"%s\" не вдалося: %s" + +#: reindexdb.c:562 +#, c-format +msgid "reindexing of index \"%s\" in database \"%s\" failed: %s" +msgstr "переіндексувати індекси \"%s\" в базі даних \"%s\" не вдалося: %s" + +#: reindexdb.c:566 +#, c-format +msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s" +msgstr "переіндексувати схему \"%s\" в базі даних \"%s\" не вдалося: %s" + +#: reindexdb.c:570 +#, c-format +msgid "reindexing of system catalogs in database \"%s\" failed: %s" +msgstr "переіндексування системних каталогів в базі даних \"%s\" не вдалося: %s" + +#: reindexdb.c:574 +#, c-format +msgid "reindexing of table \"%s\" in database \"%s\" failed: %s" +msgstr "переіндексувати таблиці \"%s\" в базі даних \"%s\" не вдалося: %s" + +#: reindexdb.c:731 +#, c-format +msgid "%s: reindexing database \"%s\"\n" +msgstr "%s: переіндексування бази даних \"%s\"\n" + +#: reindexdb.c:752 +#, c-format +msgid "%s reindexes a PostgreSQL database.\n\n" +msgstr "%s переіндексовує базу даних PostgreSQL.\n\n" + +#: reindexdb.c:756 +#, c-format +msgid " -a, --all reindex all databases\n" +msgstr " -a, --all переіндексувати усі бази даних\n" + +#: reindexdb.c:757 +#, c-format +msgid " --concurrently reindex concurrently\n" +msgstr " --concurrently переіндексувати одночасно\n" + +#: reindexdb.c:758 +#, c-format +msgid " -d, --dbname=DBNAME database to reindex\n" +msgstr " -d, --dbname=ІМ'Я_БД база даних для переіндексування\n" + +#: reindexdb.c:760 +#, c-format +msgid " -i, --index=INDEX recreate specific index(es) only\n" +msgstr " -i, --index=ІНДЕКС відтворити тільки вказані індекси\n" + +#: reindexdb.c:761 +#, c-format +msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n" +msgstr " -j, --jobs=NUM використати таку кількість паралельних підключень для переіндексації\n" + +#: reindexdb.c:763 +#, c-format +msgid " -s, --system reindex system catalogs\n" +msgstr " -s, --system переіндексувати системні каталоги\n" + +#: reindexdb.c:764 +#, c-format +msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" +msgstr " -S, --schema=СХЕМА переіндексувати тільки вказані схеми\n" + +#: reindexdb.c:765 +#, c-format +msgid " -t, --table=TABLE reindex specific table(s) only\n" +msgstr " -t, --table=ТАБЛИЦЯ переіндексувати тільки вказані таблиці\n" + +#: reindexdb.c:776 +#, c-format +msgid "\n" +"Read the description of the SQL command REINDEX for details.\n" +msgstr "\n" +"Для деталей читайте опис команди SQL REINDEX.\n" + +#: scripts_parallel.c:234 +#, c-format +msgid "too many jobs for this platform -- try %d" +msgstr "надто багато завдань для цієї платформи -- спробуйте %d" + +#: vacuumdb.c:194 +#, c-format +msgid "parallel vacuum degree must be a non-negative integer" +msgstr "ступінь паралельного очищення повинен бути не від'ємним цілим" + +#: vacuumdb.c:214 +#, c-format +msgid "minimum transaction ID age must be at least 1" +msgstr "мінімальний ID ери транзакції має бути хоча б 1" + +#: vacuumdb.c:222 +#, c-format +msgid "minimum multixact ID age must be at least 1" +msgstr "мінімальна ера ID мультитранзакції повинна бути щонайменше 1" + +#: vacuumdb.c:254 vacuumdb.c:260 vacuumdb.c:266 vacuumdb.c:278 +#, c-format +msgid "cannot use the \"%s\" option when performing only analyze" +msgstr "не можна використовувати параметр \"%s\" під час виконання лише аналіза" + +#: vacuumdb.c:284 +#, c-format +msgid "cannot use the \"%s\" option when performing full vacuum" +msgstr "не можна використовувати параметр \"%s\" під час виконання VACUUM FULL" + +#: vacuumdb.c:300 +#, c-format +msgid "cannot vacuum all databases and a specific one at the same time" +msgstr "неможливо очистити всі бази даних і одну вказану одночасно" + +#: vacuumdb.c:305 +#, c-format +msgid "cannot vacuum specific table(s) in all databases" +msgstr "неможливо очистити вказані таблиці в усіх базах даних" + +#: vacuumdb.c:396 +msgid "Generating minimal optimizer statistics (1 target)" +msgstr "Генерування мінімальної статистики для оптімизатора (1 мета)" + +#: vacuumdb.c:397 +msgid "Generating medium optimizer statistics (10 targets)" +msgstr "Генерування середньої статистики для оптимізатора (10 цілей)" + +#: vacuumdb.c:398 +msgid "Generating default (full) optimizer statistics" +msgstr "Генерування статистики для оптимізатора за замовчуванням (повністю)" + +#: vacuumdb.c:447 +#, c-format +msgid "%s: processing database \"%s\": %s\n" +msgstr "%s: обробка бази даних \"%s\": %s\n" + +#: vacuumdb.c:450 +#, c-format +msgid "%s: vacuuming database \"%s\"\n" +msgstr "%s: очищення бази даних \"%s\"\n" + +#: vacuumdb.c:909 +#, c-format +msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s" +msgstr "очистити таблиці \"%s\" в базі даних \"%s\" не вдалося: %s" + +#: vacuumdb.c:912 +#, c-format +msgid "vacuuming of database \"%s\" failed: %s" +msgstr "очистити базу даних \"%s\" не вдалося: %s" + +#: vacuumdb.c:920 +#, c-format +msgid "%s cleans and analyzes a PostgreSQL database.\n\n" +msgstr "%s очищує й аналізує базу даних PostgreSQL.\n\n" + +#: vacuumdb.c:924 +#, c-format +msgid " -a, --all vacuum all databases\n" +msgstr " -a, --all очистити усі бази даних\n" + +#: vacuumdb.c:925 +#, c-format +msgid " -d, --dbname=DBNAME database to vacuum\n" +msgstr " -d, --dbname=ІМ'Я_БД база даних для очищення\n" + +#: vacuumdb.c:926 +#, c-format +msgid " --disable-page-skipping disable all page-skipping behavior\n" +msgstr " --disable-page-skipping відключити пропуск сторінок\n" + +#: vacuumdb.c:927 +#, c-format +msgid " -e, --echo show the commands being sent to the server\n" +msgstr " -e, --echo показати команди, надіслані серверу\n" + +#: vacuumdb.c:928 +#, c-format +msgid " -f, --full do full vacuuming\n" +msgstr " -f, --full зробити повне очищення\n" + +#: vacuumdb.c:929 +#, c-format +msgid " -F, --freeze freeze row transaction information\n" +msgstr " -F, --freeze заморозити інформацію щодо транзакцій в рядках\n" + +#: vacuumdb.c:930 +#, c-format +msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n" +msgstr " -j, --jobs=ЧИСЛО використати ці паралельні підключення для очищення\n" + +#: vacuumdb.c:931 +#, c-format +msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n" +msgstr " --min-mxid-age=MXID_AGE мінімальний ID ери мультитранзакції таблиць для вакууму\n" + +#: vacuumdb.c:932 +#, c-format +msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n" +msgstr " --min-mxid-age=MXID_AGE мінімальний ID ери транзакції таблиць для вакууму\n" + +#: vacuumdb.c:933 +#, c-format +msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n" +msgstr " -P, --parallel=PARALLEL_DEGREE використати таку кількість фонових процесів для очищення, якщо вони доступні\n" + +#: vacuumdb.c:934 +#, c-format +msgid " -q, --quiet don't write any messages\n" +msgstr " -q, --quiet не писати жодних повідомлень\n" + +#: vacuumdb.c:935 +#, c-format +msgid " --skip-locked skip relations that cannot be immediately locked\n" +msgstr " --skip-locked пропустити відношення, що не можуть бути заблоковані негайно\n" + +#: vacuumdb.c:936 +#, c-format +msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" +msgstr " -t, --table='ТАБЛИЦЯ[(СТОВПЦІ)]' очистити тільки вказані таблиці\n" + +#: vacuumdb.c:937 +#, c-format +msgid " -v, --verbose write a lot of output\n" +msgstr " -v, --verbose виводити багато інформації\n" + +#: vacuumdb.c:938 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію і вийти\n" + +#: vacuumdb.c:939 +#, c-format +msgid " -z, --analyze update optimizer statistics\n" +msgstr " -z, --analyze оновити статистику для оптимізатора\n" + +#: vacuumdb.c:940 +#, c-format +msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n" +msgstr " -Z, --analyze-only оновити лише статистику для оптимізатора, не очищати\n" + +#: vacuumdb.c:941 +#, c-format +msgid " --analyze-in-stages only update optimizer statistics, in multiple\n" +" stages for faster results; no vacuum\n" +msgstr " --analyze-in-stages оновити лише статистику для оптимізатора, у декілька стадій для швидших результатів, не очищати\n" + +#: vacuumdb.c:943 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю справку, потім вийти\n" + +#: vacuumdb.c:951 +#, c-format +msgid "\n" +"Read the description of the SQL command VACUUM for details.\n" +msgstr "\n" +"Для деталей читайте опис команди SQL VACUUM.\n" + diff --git a/src/interfaces/ecpg/ecpglib/po/es.po b/src/interfaces/ecpg/ecpglib/po/es.po index 3496ef691c21f..ad56d88968d91 100644 --- a/src/interfaces/ecpg/ecpglib/po/es.po +++ b/src/interfaces/ecpg/ecpglib/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: ecpglib (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:39+0000\n" +"POT-Creation-Date: 2020-09-13 10:39+0000\n" "PO-Revision-Date: 2019-06-06 17:20-0400\n" "Last-Translator: Emanuel Calvo Franco \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/interfaces/ecpg/ecpglib/po/fr.po b/src/interfaces/ecpg/ecpglib/po/fr.po index 4852efeb746a4..5f6c7d7f4374f 100644 --- a/src/interfaces/ecpg/ecpglib/po/fr.po +++ b/src/interfaces/ecpg/ecpglib/po/fr.po @@ -7,7 +7,7 @@ # Stéphane Schildknecht , 2009. msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 12\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2019-09-20 12:38+0000\n" "PO-Revision-Date: 2019-09-20 15:13+0200\n" diff --git a/src/interfaces/ecpg/ecpglib/po/ru.po b/src/interfaces/ecpg/ecpglib/po/ru.po index cb62bbda084f0..18f185aeacda5 100644 --- a/src/interfaces/ecpg/ecpglib/po/ru.po +++ b/src/interfaces/ecpg/ecpglib/po/ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ecpglib (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-05 11:03+0300\n" +"POT-Creation-Date: 2020-09-03 11:22+0300\n" "PO-Revision-Date: 2019-09-09 13:30+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -21,11 +21,11 @@ msgstr "" msgid "empty message text" msgstr "пустое сообщение" -#: connect.c:401 connect.c:430 connect.c:638 +#: connect.c:401 connect.c:430 connect.c:653 msgid "" msgstr "<ПО_УМОЛЧАНИЮ>" -#: descriptor.c:876 misc.c:120 +#: descriptor.c:871 misc.c:119 msgid "NULL" msgstr "NULL" @@ -196,7 +196,7 @@ msgstr "подключение к серверу потеряно" msgid "SQL error: %s\n" msgstr "ошибка SQL: %s\n" -#: execute.c:2198 execute.c:2205 +#: execute.c:2196 execute.c:2203 msgid "" msgstr "<>" diff --git a/src/interfaces/ecpg/ecpglib/po/uk.po b/src/interfaces/ecpg/ecpglib/po/uk.po index d336648fc1d69..2310334996023 100644 --- a/src/interfaces/ecpg/ecpglib/po/uk.po +++ b/src/interfaces/ecpg/ecpglib/po/uk.po @@ -1,30 +1,31 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2018-12-04 20:35+0100\n" -"PO-Revision-Date: 2019-08-10 13:27\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:09+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" "Last-Translator: pasha_golub\n" "Language-Team: Ukrainian\n" -"Language: uk_UA\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_11_STABLE/src/interfaces/ecpg/ecpglib/po/ecpglib.pot\n" +"X-Crowdin-File: /DEV_13/ecpglib.pot\n" +"X-Crowdin-File-ID: 482\n" #: connect.c:237 msgid "empty message text" msgstr "пусте повідомлення" -#: connect.c:401 connect.c:430 connect.c:638 +#: connect.c:401 connect.c:430 connect.c:653 msgid "" msgstr "<ЗА_ЗАМОВЧУВАННЯМ>" -#: descriptor.c:834 misc.c:120 +#: descriptor.c:871 misc.c:119 msgid "NULL" msgstr "NULL" @@ -193,7 +194,7 @@ msgstr "з'єднання із сервером втрачено" msgid "SQL error: %s\n" msgstr "помилка SQL: %s\n" -#: execute.c:1969 +#: execute.c:2196 execute.c:2203 msgid "" msgstr "<пусто>" diff --git a/src/interfaces/ecpg/preproc/po/cs.po b/src/interfaces/ecpg/preproc/po/cs.po index 288597b89a572..e7d2c0cdb09ad 100644 --- a/src/interfaces/ecpg/preproc/po/cs.po +++ b/src/interfaces/ecpg/preproc/po/cs.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ecpg-cs (PostgreSQL 9.3)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:08+0000\n" -"PO-Revision-Date: 2019-09-27 16:21+0200\n" +"POT-Creation-Date: 2020-10-31 16:09+0000\n" +"PO-Revision-Date: 2020-10-31 21:47+0100\n" "Last-Translator: Tomas Vondra \n" "Language-Team: Czech \n" "Language: cs\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" #: descriptor.c:64 #, c-format @@ -171,162 +171,172 @@ msgstr "" #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Chyby hlaste na adresu .\n" +"Chyby hlašte na <%s>.\n" -#: ecpg.c:139 +#: ecpg.c:62 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" + +#: ecpg.c:140 #, c-format msgid "%s: could not locate my own executable path\n" msgstr "%s: nelze nalézt cestu k vlastnímu spustitelnému souboru\n" -#: ecpg.c:174 ecpg.c:331 ecpg.c:342 +#: ecpg.c:175 ecpg.c:332 ecpg.c:343 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: nelze otevřít soubor \"%s\": %s\n" -#: ecpg.c:217 ecpg.c:230 ecpg.c:246 ecpg.c:272 +#: ecpg.c:218 ecpg.c:231 ecpg.c:247 ecpg.c:273 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Zkuste \"%s --help\" pro více informací.\n" -#: ecpg.c:241 +#: ecpg.c:242 #, c-format msgid "%s: parser debug support (-d) not available\n" msgstr "%s: podpora pro ladicí informace parseru (-d) není dostupná\n" -#: ecpg.c:260 +#: ecpg.c:261 #, c-format msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" msgstr "%s, PostgreSQL embedded C preprocessor, verze %s\n" -#: ecpg.c:262 +#: ecpg.c:263 #, c-format msgid "EXEC SQL INCLUDE ... search starts here:\n" msgstr "EXEC SQL INCLUDE ... hledání začíná zde:\n" -#: ecpg.c:265 +#: ecpg.c:266 #, c-format msgid "end of search list\n" msgstr "konec vyhledávacího seznamu\n" -#: ecpg.c:271 +#: ecpg.c:272 #, c-format msgid "%s: no input files specified\n" msgstr "%s: nebyl zadán žádný vstupní soubor\n" -#: ecpg.c:465 +#: ecpg.c:466 #, c-format msgid "cursor \"%s\" has been declared but not opened" msgstr "kurzor \"%s\" byl deklarován ale nebyl otevřen" -#: ecpg.c:478 preproc.y:128 +#: ecpg.c:479 preproc.y:128 #, c-format msgid "could not remove output file \"%s\"\n" msgstr "nelze odstranit výstupní soubor \"%s\"\n" -#: pgc.l:472 +#: pgc.l:502 #, c-format msgid "unterminated /* comment" msgstr "neukončený /* komentář" -#: pgc.l:490 -#, c-format -msgid "invalid bit string literal" -msgstr "neplatný bit string literál" - -#: pgc.l:502 +#: pgc.l:519 #, c-format msgid "unterminated bit string literal" msgstr "neukončený literál - bitový řetězec" -#: pgc.l:518 +#: pgc.l:527 #, c-format msgid "unterminated hexadecimal string literal" msgstr "neukončený literál - hexadecimální řetězec" -#: pgc.l:614 pgc.l:718 +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "neplatný bit string literál" + +#: pgc.l:623 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "neošetřený předchozí stav v xqs\n" + +#: pgc.l:652 pgc.l:754 #, c-format msgid "unterminated quoted string" msgstr "neukončený řetězec v uvozovkách" -#: pgc.l:665 +#: pgc.l:703 #, c-format msgid "unterminated dollar-quoted string" msgstr "neukončený dollar-quoted řetězec" -#: pgc.l:684 pgc.l:697 +#: pgc.l:721 pgc.l:734 #, c-format msgid "zero-length delimited identifier" msgstr "ohraničený (delimited) identifikátor s nulovou délkou" -#: pgc.l:709 +#: pgc.l:745 #, c-format msgid "unterminated quoted identifier" msgstr "neukončený identifikátor v uvozovkách" -#: pgc.l:1040 +#: pgc.l:1076 #, c-format msgid "nested /* ... */ comments" msgstr "vnořené /* ... */ komentáře" -#: pgc.l:1133 +#: pgc.l:1169 #, c-format msgid "missing identifier in EXEC SQL UNDEF command" msgstr "chybějící identifikátor v příkazu EXEC SQL UNDEF" -#: pgc.l:1179 pgc.l:1193 +#: pgc.l:1187 pgc.l:1200 pgc.l:1216 pgc.l:1229 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "příliš mnoho zanořených EXEC SQL IFDEF podmínek" + +#: pgc.l:1245 pgc.l:1256 pgc.l:1271 pgc.l:1293 #, c-format msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" msgstr "chybějící odpovídající \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" -#: pgc.l:1182 pgc.l:1195 pgc.l:1373 +#: pgc.l:1247 pgc.l:1258 pgc.l:1439 #, c-format msgid "missing \"EXEC SQL ENDIF;\"" msgstr "chybějící \"EXEC SQL ENDIF;\"" -#: pgc.l:1211 pgc.l:1230 +#: pgc.l:1273 pgc.l:1295 #, c-format msgid "more than one EXEC SQL ELSE" msgstr "více než jedna větev EXEC SQL ELSE" -#: pgc.l:1252 pgc.l:1266 +#: pgc.l:1318 pgc.l:1332 #, c-format msgid "unmatched EXEC SQL ENDIF" msgstr "neodpovídající EXEC SQL ENDIF" -#: pgc.l:1286 -#, c-format -msgid "too many nested EXEC SQL IFDEF conditions" -msgstr "příliš mnoho zanořených EXEC SQL IFDEF podmínek" - -#: pgc.l:1321 +#: pgc.l:1387 #, c-format msgid "missing identifier in EXEC SQL IFDEF command" msgstr "chybějící identifikátor v příkazu EXEC SQL IFDEF" -#: pgc.l:1330 +#: pgc.l:1396 #, c-format msgid "missing identifier in EXEC SQL DEFINE command" msgstr "chybějící identifikátor v příkazu EXEC SQL DEFINE" -#: pgc.l:1363 +#: pgc.l:1429 #, c-format msgid "syntax error in EXEC SQL INCLUDE command" msgstr "syntaktická chyba v příkazu EXEC SQL INCLUDE" -#: pgc.l:1413 +#: pgc.l:1479 #, c-format -msgid "internal error: unreachable state; please report this to " -msgstr "interní chyba: nedosažitelný stav; oznamte toto prosím na " +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "interní chyba: nedosažitelný stav; oznamte toto prosím na <%s>" -#: pgc.l:1564 +#: pgc.l:1631 #, c-format msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" msgstr "Chyba: include path \"%s/%s\" na řádku %d je příliš dlouhá, přeskakuji\n" -#: pgc.l:1587 +#: pgc.l:1654 #, c-format msgid "could not open include file \"%s\" on line %d" msgstr "nelze otevřít soubor \"%s\" na řádku %d" @@ -345,200 +355,200 @@ msgstr "VAROVÁNÍ: " msgid "ERROR: " msgstr "CHYBA: " -#: preproc.y:509 +#: preproc.y:512 #, c-format msgid "cursor \"%s\" does not exist" msgstr "kurzor \"%s\" neexistuje" -#: preproc.y:538 +#: preproc.y:541 #, c-format msgid "initializer not allowed in type definition" msgstr "inicializátor (initializer) není v definici typu povolen" -#: preproc.y:540 +#: preproc.y:543 #, c-format msgid "type name \"string\" is reserved in Informix mode" msgstr "název typu \"string\" je vyhrazen pro mód Informix" -#: preproc.y:547 preproc.y:15792 +#: preproc.y:550 preproc.y:15960 #, c-format msgid "type \"%s\" is already defined" msgstr "typ \"%s\" je již definován" -#: preproc.y:572 preproc.y:16463 preproc.y:16788 variable.c:621 +#: preproc.y:575 preproc.y:16603 preproc.y:16928 variable.c:621 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "vícerozměrná pole pro jednoduché datové typy nejsou podporována" -#: preproc.y:1696 +#: preproc.y:1704 #, c-format msgid "AT option not allowed in CLOSE DATABASE statement" msgstr "AT volba není v příkazu CLOSE DATABASE povolena" -#: preproc.y:1944 +#: preproc.y:1952 #, c-format msgid "AT option not allowed in CONNECT statement" msgstr "AT volba není v příkazu CONNECT povolena" -#: preproc.y:1978 +#: preproc.y:1986 #, c-format msgid "AT option not allowed in DISCONNECT statement" msgstr "AT volba není v příkazu DISCONNECT povolena" -#: preproc.y:2033 +#: preproc.y:2041 #, c-format msgid "AT option not allowed in SET CONNECTION statement" msgstr "AT volba není v příkazu SET CONNECTION povolena" -#: preproc.y:2055 +#: preproc.y:2063 #, c-format msgid "AT option not allowed in TYPE statement" msgstr "AT volba není v příkazu TYPE povolena" -#: preproc.y:2064 +#: preproc.y:2072 #, c-format msgid "AT option not allowed in VAR statement" msgstr "AT volba není v příkazu VAR povolena" -#: preproc.y:2071 +#: preproc.y:2079 #, c-format msgid "AT option not allowed in WHENEVER statement" msgstr "AT volba není v příkazu WHENEVER povolena" -#: preproc.y:2148 preproc.y:2320 preproc.y:2325 preproc.y:2448 preproc.y:4018 -#: preproc.y:5607 preproc.y:5907 preproc.y:7513 preproc.y:9025 preproc.y:9030 -#: preproc.y:11829 +#: preproc.y:2156 preproc.y:2328 preproc.y:2333 preproc.y:2456 preproc.y:4034 +#: preproc.y:4682 preproc.y:5624 preproc.y:5924 preproc.y:7542 preproc.y:9081 +#: preproc.y:9086 preproc.y:11921 #, c-format msgid "unsupported feature will be passed to server" msgstr "nepodporovaná vlastnost bude předána serveru" -#: preproc.y:2706 +#: preproc.y:2714 #, c-format msgid "SHOW ALL is not implemented" msgstr "příkaz SHOW ALL není implementován" -#: preproc.y:3366 +#: preproc.y:3382 #, c-format msgid "COPY FROM STDIN is not implemented" msgstr "příkaz COPY FROM STDIN není implementován" -#: preproc.y:9976 preproc.y:15377 +#: preproc.y:10060 preproc.y:15545 #, c-format msgid "using variable \"%s\" in different declare statements is not supported" msgstr "použití proměnné \"%s\" v dalších deklaracích není podporováno" -#: preproc.y:9978 preproc.y:15379 +#: preproc.y:10062 preproc.y:15547 #, c-format msgid "cursor \"%s\" is already defined" msgstr "kurzor \"%s\" je již definován" -#: preproc.y:10418 +#: preproc.y:10502 #, c-format msgid "no longer supported LIMIT #,# syntax passed to server" msgstr "již neopdporovaná syntaxe LIMIT #,# předána serveru" -#: preproc.y:10743 preproc.y:10750 +#: preproc.y:10835 preproc.y:10842 #, c-format msgid "subquery in FROM must have an alias" msgstr "poddotaz ve FROM musí mít alias" -#: preproc.y:15100 preproc.y:15107 +#: preproc.y:15268 preproc.y:15275 #, c-format msgid "CREATE TABLE AS cannot specify INTO" msgstr "CREATE TABLE AS nemůže specifikovat INTO" -#: preproc.y:15143 +#: preproc.y:15311 #, c-format msgid "expected \"@\", found \"%s\"" msgstr "očekáváno \"@\", nalezeno \"%s\"" -#: preproc.y:15155 +#: preproc.y:15323 #, c-format msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" msgstr "podporovány jsou pouze protokoly \"tcp\" a \"unix\" a typ databáze \"postgresql\"" -#: preproc.y:15158 +#: preproc.y:15326 #, c-format msgid "expected \"://\", found \"%s\"" msgstr "očekáváno \"://\", nalezeno \"%s\"" -#: preproc.y:15163 +#: preproc.y:15331 #, c-format msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" msgstr "Unixové sockety fungují pouze na \"localhost\" ale ne na \"%s\"" -#: preproc.y:15189 +#: preproc.y:15357 #, c-format msgid "expected \"postgresql\", found \"%s\"" msgstr "očekáváno \"postgresql\", nalezeno \"%s\"" -#: preproc.y:15192 +#: preproc.y:15360 #, c-format msgid "invalid connection type: %s" msgstr "chybný typ spojení: %s" -#: preproc.y:15201 +#: preproc.y:15369 #, c-format msgid "expected \"@\" or \"://\", found \"%s\"" msgstr "očekáváno \"@\" nebo \"://\", nalezeno \"%s\"" -#: preproc.y:15276 preproc.y:15294 +#: preproc.y:15444 preproc.y:15462 #, c-format msgid "invalid data type" msgstr "chybný datový typ" -#: preproc.y:15305 preproc.y:15322 +#: preproc.y:15473 preproc.y:15490 #, c-format msgid "incomplete statement" msgstr "neúplný příkaz" -#: preproc.y:15308 preproc.y:15325 +#: preproc.y:15476 preproc.y:15493 #, c-format msgid "unrecognized token \"%s\"" msgstr "nerozpoznaný token \"%s\"" -#: preproc.y:15595 +#: preproc.y:15763 #, c-format msgid "only data types numeric and decimal have precision/scale argument" msgstr "pouze datové typy numeric a decimal mají argumenty přesnost/velikost" -#: preproc.y:15607 +#: preproc.y:15775 #, c-format msgid "interval specification not allowed here" msgstr "specifikace intervalu zde není povolena" -#: preproc.y:15767 preproc.y:15819 +#: preproc.y:15935 preproc.y:15987 #, c-format msgid "too many levels in nested structure/union definition" msgstr "příliš mnoho úrovní v definici vnořené struktury/union" -#: preproc.y:15970 +#: preproc.y:16110 #, c-format msgid "pointers to varchar are not implemented" msgstr "ukazatele na varchar nejsou implementovány" -#: preproc.y:16157 preproc.y:16182 +#: preproc.y:16297 preproc.y:16322 #, c-format msgid "using unsupported DESCRIBE statement" msgstr "použití nepodporovaného příkazu DESCRIBE" -#: preproc.y:16429 +#: preproc.y:16569 #, c-format msgid "initializer not allowed in EXEC SQL VAR command" msgstr "inicializátor není v příkazu EXEC SQL VAR podporován" -#: preproc.y:16746 +#: preproc.y:16886 #, c-format msgid "arrays of indicators are not allowed on input" msgstr "pole identifikátorů nejsou na vstupu povolena" -#: preproc.y:16967 +#: preproc.y:17073 #, c-format msgid "operator not allowed in variable definition" msgstr "operátor není povolen v definici proměnné" #. translator: %s is typically the translation of "syntax error" -#: preproc.y:17008 +#: preproc.y:17114 #, c-format msgid "%s at or near \"%s\"" msgstr "%s na nebo blízko \"%s\"" @@ -671,8 +681,15 @@ msgstr "ukazatel na ukazatel není pro tento datový typ podporován" msgid "multidimensional arrays for structures are not supported" msgstr "vícerozměrná pole pro struktury nejsou podporována" +#~ msgid "COPY TO STDIN is not possible" +#~ msgstr "příkaz COPY TO STDIN nelze použít" + #~ msgid "COPY FROM STDOUT is not possible" #~ msgstr "příkaz COPY FROM STDOUT nelze použít" -#~ msgid "COPY TO STDIN is not possible" -#~ msgstr "příkaz COPY TO STDIN nelze použít" +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Chyby hlaste na adresu .\n" diff --git a/src/interfaces/ecpg/preproc/po/de.po b/src/interfaces/ecpg/preproc/po/de.po index 411dfc8d89b1f..89f2daa978df0 100644 --- a/src/interfaces/ecpg/preproc/po/de.po +++ b/src/interfaces/ecpg/preproc/po/de.po @@ -1,16 +1,15 @@ # German message translation file for ecpg -# Copyright (C) 2009-2020 PostgreSQL Global Development Group +# Copyright (C) 2009-2021 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Peter Eisentraut , 2009-2020. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 13\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-18 03:39+0000\n" -"PO-Revision-Date: 2020-05-18 08:45+0200\n" +"POT-Creation-Date: 2021-05-04 12:39+0000\n" +"PO-Revision-Date: 2021-05-04 15:48+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -54,7 +53,7 @@ msgstr "Deskriptorelement »%s« ist nicht implementiert" msgid "descriptor item \"%s\" cannot be set" msgstr "Deskriptorelement »%s« kann nicht gesetzt werden" -#: ecpg.c:35 +#: ecpg.c:36 #, c-format msgid "" "%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" @@ -63,7 +62,7 @@ msgstr "" "%s ist der Embedded-SQL-Präprozessor von PostgreSQL für C-Programme.\n" "\n" -#: ecpg.c:37 +#: ecpg.c:38 #, c-format msgid "" "Usage:\n" @@ -74,12 +73,12 @@ msgstr "" " %s [OPTION]... DATEI...\n" "\n" -#: ecpg.c:40 +#: ecpg.c:41 #, c-format msgid "Options:\n" msgstr "Optionen:\n" -#: ecpg.c:41 +#: ecpg.c:42 #, c-format msgid "" " -c automatically generate C code from embedded SQL code;\n" @@ -88,7 +87,7 @@ msgstr "" " -c automatisch C-Code aus eingebettetem SQL-Code erzeugen;\n" " betrifft EXEC SQL TYPE\n" -#: ecpg.c:43 +#: ecpg.c:44 #, c-format msgid "" " -C MODE set compatibility mode; MODE can be one of\n" @@ -97,37 +96,37 @@ msgstr "" " -C MODUS Kompatibilitätsmodus setzen; MODUS kann sein:\n" " »INFORMIX«, »INFORMIX_SE«, »ORACLE«\n" -#: ecpg.c:46 +#: ecpg.c:47 #, c-format msgid " -d generate parser debug output\n" msgstr " -d Parser-Debug-Ausgabe erzeugen\n" -#: ecpg.c:48 +#: ecpg.c:49 #, c-format msgid " -D SYMBOL define SYMBOL\n" msgstr " -D SYMBOL SYMBOL definieren\n" -#: ecpg.c:49 +#: ecpg.c:50 #, c-format msgid " -h parse a header file, this option includes option \"-c\"\n" msgstr " -h eine Headerdatei parsen, schließt Option »-c« ein\n" -#: ecpg.c:50 +#: ecpg.c:51 #, c-format msgid " -i parse system include files as well\n" msgstr " -i Systemheaderdateien ebenfalls parsen\n" -#: ecpg.c:51 +#: ecpg.c:52 #, c-format msgid " -I DIRECTORY search DIRECTORY for include files\n" msgstr " -I VERZ VERZ nach Include-Dateien durchsuchen\n" -#: ecpg.c:52 +#: ecpg.c:53 #, c-format msgid " -o OUTFILE write result to OUTFILE\n" msgstr " -o DATEI Ausgabe in DATEI schreiben\n" -#: ecpg.c:53 +#: ecpg.c:54 #, c-format msgid "" " -r OPTION specify run-time behavior; OPTION can be:\n" @@ -136,27 +135,27 @@ msgstr "" " -r OPTION Laufzeitverhalten bestimmen; OPTION kann sein:\n" " »no_indicator«, »prepare«, »questionmarks«\n" -#: ecpg.c:55 +#: ecpg.c:56 #, c-format msgid " --regression run in regression testing mode\n" msgstr " --regression Regressiontestmodus verwenden\n" -#: ecpg.c:56 +#: ecpg.c:57 #, c-format msgid " -t turn on autocommit of transactions\n" msgstr " -t Autocommit von Transaktionen anschalten\n" -#: ecpg.c:57 +#: ecpg.c:58 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: ecpg.c:58 +#: ecpg.c:59 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: ecpg.c:59 +#: ecpg.c:60 #, c-format msgid "" "\n" @@ -167,7 +166,7 @@ msgstr "" "Wenn keine Ausgabedatei angegeben ist, dann wird .c an den Namen der\n" "Eingabedatei angehängt und vorher .pgc, falls vorhanden, entfernt.\n" -#: ecpg.c:61 +#: ecpg.c:62 #, c-format msgid "" "\n" @@ -176,167 +175,172 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: ecpg.c:62 +#: ecpg.c:63 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: ecpg.c:140 +#: ecpg.c:141 #, c-format msgid "%s: could not locate my own executable path\n" msgstr "%s: konnte Pfad des eigenen Programs nicht finden\n" -#: ecpg.c:175 ecpg.c:332 ecpg.c:343 +#: ecpg.c:176 ecpg.c:333 ecpg.c:344 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: konnte Datei »%s« nicht öffnen: %s\n" -#: ecpg.c:218 ecpg.c:231 ecpg.c:247 ecpg.c:273 +#: ecpg.c:219 ecpg.c:232 ecpg.c:248 ecpg.c:274 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: ecpg.c:242 +#: ecpg.c:243 #, c-format msgid "%s: parser debug support (-d) not available\n" msgstr "%s: Unterstützung für Parserdebugging (-d) nicht verfügbar\n" -#: ecpg.c:261 +#: ecpg.c:262 #, c-format msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" msgstr "%s, der PostgreSQL-Embedded-C-Präprozessor, Version %s\n" -#: ecpg.c:263 +#: ecpg.c:264 #, c-format msgid "EXEC SQL INCLUDE ... search starts here:\n" msgstr "EXEC SQL INCLUDE ... Suche beginnt hier:\n" -#: ecpg.c:266 +#: ecpg.c:267 #, c-format msgid "end of search list\n" msgstr "Ende der Suchliste\n" -#: ecpg.c:272 +#: ecpg.c:273 #, c-format msgid "%s: no input files specified\n" msgstr "%s: keine Eingabedateien angegeben\n" -#: ecpg.c:466 +#: ecpg.c:476 #, c-format msgid "cursor \"%s\" has been declared but not opened" msgstr "Cursor »%s« wurde deklariert aber nicht geöffnet" -#: ecpg.c:479 preproc.y:128 +#: ecpg.c:489 preproc.y:130 #, c-format msgid "could not remove output file \"%s\"\n" msgstr "konnte Ausgabedatei »%s« nicht entfernen\n" -#: pgc.l:486 +#: pgc.l:502 #, c-format msgid "unterminated /* comment" msgstr "/*-Kommentar nicht abgeschlossen" -#: pgc.l:503 +#: pgc.l:519 #, c-format msgid "unterminated bit string literal" msgstr "Bitkettenkonstante nicht abgeschlossen" -#: pgc.l:511 +#: pgc.l:527 #, c-format msgid "unterminated hexadecimal string literal" msgstr "hexadezimale Zeichenkette nicht abgeschlossen" -#: pgc.l:586 +#: pgc.l:602 #, c-format msgid "invalid bit string literal" msgstr "ungültige Bitkettenkonstante" #: pgc.l:607 #, c-format +msgid "invalid hex string literal" +msgstr "ungültige hexadezimale Zeichenkettenkonstante" + +#: pgc.l:625 +#, c-format msgid "unhandled previous state in xqs\n" msgstr "unbehandelter vorheriger Zustand in xqs\n" -#: pgc.l:636 pgc.l:738 +#: pgc.l:651 pgc.l:760 #, c-format msgid "unterminated quoted string" msgstr "Zeichenkette in Anführungszeichen nicht abgeschlossen" -#: pgc.l:687 +#: pgc.l:702 #, c-format msgid "unterminated dollar-quoted string" msgstr "Dollar-Quotes nicht abgeschlossen" -#: pgc.l:705 pgc.l:718 +#: pgc.l:720 pgc.l:740 #, c-format msgid "zero-length delimited identifier" msgstr "Bezeichner in Anführungszeichen hat Länge null" -#: pgc.l:729 +#: pgc.l:751 #, c-format msgid "unterminated quoted identifier" msgstr "Bezeichner in Anführungszeichen nicht abgeschlossen" -#: pgc.l:1060 +#: pgc.l:1082 #, c-format msgid "nested /* ... */ comments" msgstr "geschachtelte /* ... */-Kommentare" -#: pgc.l:1153 +#: pgc.l:1175 #, c-format msgid "missing identifier in EXEC SQL UNDEF command" msgstr "fehlender Bezeichner im Befehl EXEC SQL UNDEF" -#: pgc.l:1199 pgc.l:1213 +#: pgc.l:1193 pgc.l:1206 pgc.l:1222 pgc.l:1235 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "zu viele verschachtelte EXEC SQL IFDEF-Bedingungen" + +#: pgc.l:1251 pgc.l:1262 pgc.l:1277 pgc.l:1299 #, c-format msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" msgstr "passendes »EXEC SQL IFDEF« / »EXEC SQL IFNDEF« fehlt" -#: pgc.l:1202 pgc.l:1215 pgc.l:1393 +#: pgc.l:1253 pgc.l:1264 pgc.l:1445 #, c-format msgid "missing \"EXEC SQL ENDIF;\"" msgstr "»EXEC SQL ENDIF;« fehlt" -#: pgc.l:1231 pgc.l:1250 +#: pgc.l:1279 pgc.l:1301 #, c-format msgid "more than one EXEC SQL ELSE" msgstr "mehr als ein EXEC SQL ENDIF" -#: pgc.l:1272 pgc.l:1286 +#: pgc.l:1324 pgc.l:1338 #, c-format msgid "unmatched EXEC SQL ENDIF" msgstr "unzusammenhängendes EXEC SQL ENDIF" -#: pgc.l:1306 -#, c-format -msgid "too many nested EXEC SQL IFDEF conditions" -msgstr "zu viele verschachtelte EXEC SQL IFDEF-Bedingungen" - -#: pgc.l:1341 +#: pgc.l:1393 #, c-format msgid "missing identifier in EXEC SQL IFDEF command" msgstr "fehlender Bezeichner im Befehl EXEC SQL IFDEF" -#: pgc.l:1350 +#: pgc.l:1402 #, c-format msgid "missing identifier in EXEC SQL DEFINE command" msgstr "fehlender Bezeichner im Befehl EXEC SQL DEFINE" -#: pgc.l:1383 +#: pgc.l:1435 #, c-format msgid "syntax error in EXEC SQL INCLUDE command" msgstr "Syntaxfehler im Befehl EXEC SQL INCLUDE" -#: pgc.l:1433 +#: pgc.l:1485 #, c-format msgid "internal error: unreachable state; please report this to <%s>" msgstr "interner Fehler: unerreichbarer Zustand; bitte an <%s> berichten" -#: pgc.l:1583 +#: pgc.l:1637 #, c-format msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" msgstr "Fehler: Include-Pfad »%s/%s« ist zu lang auf Zeile %d, wird übersprungen\n" -#: pgc.l:1606 +#: pgc.l:1660 #, c-format msgid "could not open include file \"%s\" on line %d" msgstr "konnte Include-Datei »%s« nicht öffnen auf Zeile %d" @@ -345,210 +349,220 @@ msgstr "konnte Include-Datei »%s« nicht öffnen auf Zeile %d" msgid "syntax error" msgstr "Syntaxfehler" -#: preproc.y:82 +#: preproc.y:84 #, c-format msgid "WARNING: " msgstr "WARNUNG: " -#: preproc.y:85 +#: preproc.y:87 #, c-format msgid "ERROR: " msgstr "FEHLER: " -#: preproc.y:509 +#: preproc.y:514 #, c-format msgid "cursor \"%s\" does not exist" msgstr "Cursor »%s« existiert nicht" -#: preproc.y:538 +#: preproc.y:543 #, c-format msgid "initializer not allowed in type definition" msgstr "Initialisierungswert nicht erlaubt in Typdefinition" -#: preproc.y:540 +#: preproc.y:545 #, c-format msgid "type name \"string\" is reserved in Informix mode" msgstr "Typname »string« ist im Informix-Modus reserviert" -#: preproc.y:547 preproc.y:15966 +#: preproc.y:552 preproc.y:17675 #, c-format msgid "type \"%s\" is already defined" msgstr "Typ »%s« ist bereits definiert" -#: preproc.y:572 preproc.y:16609 preproc.y:16934 variable.c:621 +#: preproc.y:577 preproc.y:18318 preproc.y:18643 variable.c:621 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "mehrdimensionale Arrays für einfache Datentypen werden nicht unterstützt" -#: preproc.y:1702 +#: preproc.y:1749 #, c-format msgid "AT option not allowed in CLOSE DATABASE statement" msgstr "AT-Option ist nicht erlaubt im Befehl CLOSE DATABASE" -#: preproc.y:1950 +#: preproc.y:1997 #, c-format msgid "AT option not allowed in CONNECT statement" msgstr "AT-Option ist nicht erlaubt im Befehl CONNECT" -#: preproc.y:1984 +#: preproc.y:2035 #, c-format msgid "AT option not allowed in DISCONNECT statement" msgstr "AT-Option ist nicht erlaubt im Befehl DISCONNECT" -#: preproc.y:2039 +#: preproc.y:2090 #, c-format msgid "AT option not allowed in SET CONNECTION statement" msgstr "AT-Option ist nicht erlaubt im Befehl SET CONNECTION" -#: preproc.y:2061 +#: preproc.y:2112 #, c-format msgid "AT option not allowed in TYPE statement" msgstr "AT-Option ist nicht erlaubt im TYPE-Befehl" -#: preproc.y:2070 +#: preproc.y:2121 #, c-format msgid "AT option not allowed in VAR statement" msgstr "AT-Option ist nicht erlaubt im VAR-Befehl" -#: preproc.y:2077 +#: preproc.y:2128 #, c-format msgid "AT option not allowed in WHENEVER statement" msgstr "AT-Option ist nicht erlaubt im WHENEVER-Befehl" -#: preproc.y:2154 preproc.y:2326 preproc.y:2331 preproc.y:2454 preproc.y:4032 -#: preproc.y:4692 preproc.y:5634 preproc.y:5934 preproc.y:7552 preproc.y:9091 -#: preproc.y:9096 preproc.y:11927 +#: preproc.y:2205 preproc.y:2377 preproc.y:2382 preproc.y:2505 preproc.y:4129 +#: preproc.y:4793 preproc.y:5326 preproc.y:5664 preproc.y:5964 preproc.y:7532 +#: preproc.y:9100 preproc.y:9105 preproc.y:11925 #, c-format msgid "unsupported feature will be passed to server" msgstr "nicht mehr unterstütztes Feature wird an Server weitergereicht werden" -#: preproc.y:2712 +#: preproc.y:2763 #, c-format msgid "SHOW ALL is not implemented" msgstr "SHOW ALL ist nicht implementiert" -#: preproc.y:3380 +#: preproc.y:3462 #, c-format msgid "COPY FROM STDIN is not implemented" msgstr "COPY FROM STDIN ist nicht implementiert" -#: preproc.y:10070 preproc.y:15551 +#: preproc.y:10024 preproc.y:17250 +#, c-format +msgid "\"database\" cannot be used as cursor name in INFORMIX mode" +msgstr "»database« kann im INFORMIX-Modus nicht als Cursorname verwendet werden" + +#: preproc.y:10031 preproc.y:17260 #, c-format msgid "using variable \"%s\" in different declare statements is not supported" msgstr "Verwendung der Variable »%s« in verschiedenen DECLARE-Anweisungen wird nicht unterstützt" -#: preproc.y:10072 preproc.y:15553 +#: preproc.y:10033 preproc.y:17262 #, c-format msgid "cursor \"%s\" is already defined" msgstr "Cursor »%s« ist bereits definiert" -#: preproc.y:10512 +#: preproc.y:10507 #, c-format msgid "no longer supported LIMIT #,# syntax passed to server" msgstr "nicht mehr unterstützte Syntax LIMIT x,y wird an Server weitergereicht" -#: preproc.y:10841 preproc.y:10848 +#: preproc.y:10840 preproc.y:10847 #, c-format msgid "subquery in FROM must have an alias" msgstr "Unteranfrage in FROM muss Aliasnamen erhalten" -#: preproc.y:15274 preproc.y:15281 +#: preproc.y:16942 preproc.y:16949 #, c-format msgid "CREATE TABLE AS cannot specify INTO" msgstr "CREATE TABLE AS kann INTO nicht verwenden" -#: preproc.y:15317 +#: preproc.y:16985 #, c-format msgid "expected \"@\", found \"%s\"" msgstr "»@« erwartet, »%s« gefunden" -#: preproc.y:15329 +#: preproc.y:16997 #, c-format msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" msgstr "er werden nur die Protokolle »tcp« und »unix« und der Datenbanktyp »postgresql« unterstützt" -#: preproc.y:15332 +#: preproc.y:17000 #, c-format msgid "expected \"://\", found \"%s\"" msgstr "»://« erwartet, »%s« gefunden" -#: preproc.y:15337 +#: preproc.y:17005 #, c-format msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" msgstr "Unix-Domain-Sockets funktionieren nur mit »localhost«, aber nicht mit »%s«" -#: preproc.y:15363 +#: preproc.y:17031 #, c-format msgid "expected \"postgresql\", found \"%s\"" msgstr "»postgresql« erwartet, »%s« gefunden" -#: preproc.y:15366 +#: preproc.y:17034 #, c-format msgid "invalid connection type: %s" msgstr "ungültiger Verbindungstyp: %s" -#: preproc.y:15375 +#: preproc.y:17043 #, c-format msgid "expected \"@\" or \"://\", found \"%s\"" msgstr "»@« oder »://« erwartet, »%s« gefunden" -#: preproc.y:15450 preproc.y:15468 +#: preproc.y:17118 preproc.y:17136 #, c-format msgid "invalid data type" msgstr "ungültiger Datentyp" -#: preproc.y:15479 preproc.y:15496 +#: preproc.y:17147 preproc.y:17164 #, c-format msgid "incomplete statement" msgstr "unvollständige Anweisung" -#: preproc.y:15482 preproc.y:15499 +#: preproc.y:17150 preproc.y:17167 #, c-format msgid "unrecognized token \"%s\"" msgstr "nicht erkanntes Token »%s«" -#: preproc.y:15769 +#: preproc.y:17212 +#, c-format +msgid "declared name %s is already defined" +msgstr "deklarierter Name %s ist bereits definiert" + +#: preproc.y:17478 #, c-format msgid "only data types numeric and decimal have precision/scale argument" msgstr "nur die Datentypen NUMERIC und DECIMAL haben Argumente für Präzision und Skala" -#: preproc.y:15781 +#: preproc.y:17490 #, c-format msgid "interval specification not allowed here" msgstr "Intervallangabe hier nicht erlaubt" -#: preproc.y:15941 preproc.y:15993 +#: preproc.y:17650 preproc.y:17702 #, c-format msgid "too many levels in nested structure/union definition" msgstr "zu viele Ebenen in verschachtelter Definition von Struktur/Union" -#: preproc.y:16116 +#: preproc.y:17825 #, c-format msgid "pointers to varchar are not implemented" msgstr "Zeiger auf varchar sind nicht implementiert" -#: preproc.y:16303 preproc.y:16328 +#: preproc.y:18012 preproc.y:18037 #, c-format msgid "using unsupported DESCRIBE statement" msgstr "nicht unterstützter DESCRIBE-Befehl wird verwendet" -#: preproc.y:16575 +#: preproc.y:18284 #, c-format msgid "initializer not allowed in EXEC SQL VAR command" msgstr "Initialisierungswert nicht erlaubt in Befehl EXEC SQL VAR" -#: preproc.y:16892 +#: preproc.y:18601 #, c-format msgid "arrays of indicators are not allowed on input" msgstr "Array aus Indikatoren bei der Eingabe nicht erlaubt" -#: preproc.y:17079 +#: preproc.y:18788 #, c-format msgid "operator not allowed in variable definition" msgstr "Operator nicht erlaubt in Variablendefinition" #. translator: %s is typically the translation of "syntax error" -#: preproc.y:17120 +#: preproc.y:18829 #, c-format msgid "%s at or near \"%s\"" msgstr "%s bei »%s«" diff --git a/src/interfaces/ecpg/preproc/po/es.po b/src/interfaces/ecpg/preproc/po/es.po index 4189f1798c39f..0107bfc1f00f2 100644 --- a/src/interfaces/ecpg/preproc/po/es.po +++ b/src/interfaces/ecpg/preproc/po/es.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ecpg (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:39+0000\n" -"PO-Revision-Date: 2019-06-06 17:20-0400\n" +"POT-Creation-Date: 2020-09-13 10:39+0000\n" +"PO-Revision-Date: 2020-06-08 13:04-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -178,11 +178,13 @@ msgid "" "\n" "Report bugs to <%s>.\n" msgstr "" +"\n" +"Reporte errores a <%s>.\n" #: ecpg.c:62 #, c-format msgid "%s home page: <%s>\n" -msgstr "" +msgstr "Sitio web de %s: <%s>\n" #: ecpg.c:140 #, c-format @@ -234,113 +236,112 @@ msgstr "el cursor «%s» fue declarado pero no abierto" msgid "could not remove output file \"%s\"\n" msgstr "no se pudo eliminar el archivo de salida «%s»\n" -#: pgc.l:486 +#: pgc.l:502 #, c-format msgid "unterminated /* comment" msgstr "comentario /* no cerrado" -#: pgc.l:503 +#: pgc.l:519 #, c-format msgid "unterminated bit string literal" msgstr "una cadena de bits está inconclusa" -#: pgc.l:511 +#: pgc.l:527 #, c-format msgid "unterminated hexadecimal string literal" msgstr "una cadena hexadecimal está inconclusa" -#: pgc.l:586 +#: pgc.l:602 #, c-format msgid "invalid bit string literal" msgstr "cadena de bits no válida" -#: pgc.l:607 +#: pgc.l:623 #, c-format msgid "unhandled previous state in xqs\n" -msgstr "" +msgstr "estado previo no manejado en xqs\n" -#: pgc.l:636 pgc.l:738 +#: pgc.l:652 pgc.l:754 #, c-format msgid "unterminated quoted string" msgstr "una cadena en comillas está inconclusa" -#: pgc.l:687 +#: pgc.l:703 #, c-format msgid "unterminated dollar-quoted string" msgstr "una cadena separada por $ está inconclusa" -#: pgc.l:705 pgc.l:718 +#: pgc.l:721 pgc.l:734 #, c-format msgid "zero-length delimited identifier" msgstr "identificador delimitado de longitud cero" -#: pgc.l:729 +#: pgc.l:745 #, c-format msgid "unterminated quoted identifier" msgstr "un identificador en comillas está inconcluso" -#: pgc.l:1060 +#: pgc.l:1076 #, c-format msgid "nested /* ... */ comments" msgstr "comentarios /* ... */ anidados" -#: pgc.l:1153 +#: pgc.l:1169 #, c-format msgid "missing identifier in EXEC SQL UNDEF command" msgstr "falta un identificador en la orden EXEC SQL UNDEF" -#: pgc.l:1199 pgc.l:1213 +#: pgc.l:1187 pgc.l:1200 pgc.l:1216 pgc.l:1229 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "demasiadas condiciones EXEC SQL IFDEF anidadas" + +#: pgc.l:1245 pgc.l:1256 pgc.l:1271 pgc.l:1293 #, c-format msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" msgstr "falta el «EXEC SQL IFDEF» / «EXEC SQL IFNDEF»" -#: pgc.l:1202 pgc.l:1215 pgc.l:1393 +#: pgc.l:1247 pgc.l:1258 pgc.l:1439 #, c-format msgid "missing \"EXEC SQL ENDIF;\"" msgstr "falta el «EXEC SQL ENDIF;»" -#: pgc.l:1231 pgc.l:1250 +#: pgc.l:1273 pgc.l:1295 #, c-format msgid "more than one EXEC SQL ELSE" msgstr "hay más de un EXEC SQL ELSE" -#: pgc.l:1272 pgc.l:1286 +#: pgc.l:1318 pgc.l:1332 #, c-format msgid "unmatched EXEC SQL ENDIF" msgstr "EXEC SQL ENDIF sin coincidencia" -#: pgc.l:1306 -#, c-format -msgid "too many nested EXEC SQL IFDEF conditions" -msgstr "demasiadas condiciones EXEC SQL IFDEF anidadas" - -#: pgc.l:1341 +#: pgc.l:1387 #, c-format msgid "missing identifier in EXEC SQL IFDEF command" msgstr "identificador faltante en la orden EXEC SQL IFDEF" -#: pgc.l:1350 +#: pgc.l:1396 #, c-format msgid "missing identifier in EXEC SQL DEFINE command" msgstr "identificador faltante en la orden EXEC SQL DEFINE" -#: pgc.l:1383 +#: pgc.l:1429 #, c-format msgid "syntax error in EXEC SQL INCLUDE command" msgstr "error de sintaxis en orden EXEC SQL INCLUDE" -#: pgc.l:1433 -#, fuzzy, c-format -#| msgid "internal error: unreachable state; please report this to " +#: pgc.l:1479 +#, c-format msgid "internal error: unreachable state; please report this to <%s>" -msgstr "error interno: estado no esperado; por favor reporte a " +msgstr "error interno: estado no esperado; por favor reporte a <%s>" -#: pgc.l:1583 +#: pgc.l:1631 #, c-format msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" msgstr "Error: ruta de inclusión «%s/%s» es demasiada larga en la línea %d, omitiendo\n" -#: pgc.l:1606 +#: pgc.l:1654 #, c-format msgid "could not open include file \"%s\" on line %d" msgstr "no se pudo abrir el archivo a incluir «%s» en la línea %d" @@ -359,200 +360,200 @@ msgstr "ATENCIÓN: " msgid "ERROR: " msgstr "ERROR: " -#: preproc.y:509 +#: preproc.y:512 #, c-format msgid "cursor \"%s\" does not exist" msgstr "no existe el cursor «%s»" -#: preproc.y:538 +#: preproc.y:541 #, c-format msgid "initializer not allowed in type definition" msgstr "inicializador no permitido en definición de tipo" -#: preproc.y:540 +#: preproc.y:543 #, c-format msgid "type name \"string\" is reserved in Informix mode" msgstr "el nombre de tipo «string» está reservado en modo Informix" -#: preproc.y:547 preproc.y:15966 +#: preproc.y:550 preproc.y:15960 #, c-format msgid "type \"%s\" is already defined" msgstr "el tipo «%s» ya está definido" -#: preproc.y:572 preproc.y:16609 preproc.y:16934 variable.c:621 +#: preproc.y:575 preproc.y:16603 preproc.y:16928 variable.c:621 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "los arrays multidimensionales para tipos de datos simples no están soportados" -#: preproc.y:1702 +#: preproc.y:1704 #, c-format msgid "AT option not allowed in CLOSE DATABASE statement" msgstr "la opción AT no está permitida en la sentencia CLOSE DATABASE" -#: preproc.y:1950 +#: preproc.y:1952 #, c-format msgid "AT option not allowed in CONNECT statement" msgstr "la opción AT no está permitida en la sentencia CONNECT" -#: preproc.y:1984 +#: preproc.y:1986 #, c-format msgid "AT option not allowed in DISCONNECT statement" msgstr "la opción AT no está permitida en la sentencia DISCONNECT" -#: preproc.y:2039 +#: preproc.y:2041 #, c-format msgid "AT option not allowed in SET CONNECTION statement" msgstr "la opción AT no está permitida en la sentencia SET CONNECTION" -#: preproc.y:2061 +#: preproc.y:2063 #, c-format msgid "AT option not allowed in TYPE statement" msgstr "la opción AT no está permitida en la sentencia TYPE" -#: preproc.y:2070 +#: preproc.y:2072 #, c-format msgid "AT option not allowed in VAR statement" msgstr "la opción AT no está permitida en la sentencia VAR" -#: preproc.y:2077 +#: preproc.y:2079 #, c-format msgid "AT option not allowed in WHENEVER statement" msgstr "la opción AT no está permitida en la sentencia WHENEVER" -#: preproc.y:2154 preproc.y:2326 preproc.y:2331 preproc.y:2454 preproc.y:4032 -#: preproc.y:4692 preproc.y:5634 preproc.y:5934 preproc.y:7552 preproc.y:9091 -#: preproc.y:9096 preproc.y:11927 +#: preproc.y:2156 preproc.y:2328 preproc.y:2333 preproc.y:2456 preproc.y:4034 +#: preproc.y:4682 preproc.y:5624 preproc.y:5924 preproc.y:7542 preproc.y:9081 +#: preproc.y:9086 preproc.y:11921 #, c-format msgid "unsupported feature will be passed to server" msgstr "característica no soportada será pasada al servidor" -#: preproc.y:2712 +#: preproc.y:2714 #, c-format msgid "SHOW ALL is not implemented" msgstr "SHOW ALL no está implementado" -#: preproc.y:3380 +#: preproc.y:3382 #, c-format msgid "COPY FROM STDIN is not implemented" msgstr "COPY FROM STDIN no está implementado" -#: preproc.y:10070 preproc.y:15551 +#: preproc.y:10060 preproc.y:15545 #, c-format msgid "using variable \"%s\" in different declare statements is not supported" msgstr "el uso de la variable «%s» en diferentes sentencias declare no está soportado" -#: preproc.y:10072 preproc.y:15553 +#: preproc.y:10062 preproc.y:15547 #, c-format msgid "cursor \"%s\" is already defined" msgstr "el cursor «%s» ya está definido" -#: preproc.y:10512 +#: preproc.y:10502 #, c-format msgid "no longer supported LIMIT #,# syntax passed to server" msgstr "la sintaxis LIMIT #,# que ya no está soportada ha sido pasada al servidor" -#: preproc.y:10841 preproc.y:10848 +#: preproc.y:10835 preproc.y:10842 #, c-format msgid "subquery in FROM must have an alias" msgstr "las subconsultas en FROM deben tener un alias" -#: preproc.y:15274 preproc.y:15281 +#: preproc.y:15268 preproc.y:15275 #, c-format msgid "CREATE TABLE AS cannot specify INTO" msgstr "CREATE TABLE AS no puede especificar INTO" -#: preproc.y:15317 +#: preproc.y:15311 #, c-format msgid "expected \"@\", found \"%s\"" msgstr "se esperaba «@», se encontró «%s»" -#: preproc.y:15329 +#: preproc.y:15323 #, c-format msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" msgstr "sólo los protocolos «tcp» y «unix» y tipo de bases de datos «postgresql» están soportados" -#: preproc.y:15332 +#: preproc.y:15326 #, c-format msgid "expected \"://\", found \"%s\"" msgstr "se esperaba «://», se encontró «%s»" -#: preproc.y:15337 +#: preproc.y:15331 #, c-format msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" msgstr "los sockets de dominio unix sólo trabajan en «localhost» pero no en «%s»" -#: preproc.y:15363 +#: preproc.y:15357 #, c-format msgid "expected \"postgresql\", found \"%s\"" msgstr "se esperaba «postgresql», se encontró «%s»" -#: preproc.y:15366 +#: preproc.y:15360 #, c-format msgid "invalid connection type: %s" msgstr "tipo de conexión no válido: %s" -#: preproc.y:15375 +#: preproc.y:15369 #, c-format msgid "expected \"@\" or \"://\", found \"%s\"" msgstr "se esperaba «@» o «://», se encontró «%s»" -#: preproc.y:15450 preproc.y:15468 +#: preproc.y:15444 preproc.y:15462 #, c-format msgid "invalid data type" msgstr "tipo de dato no válido" -#: preproc.y:15479 preproc.y:15496 +#: preproc.y:15473 preproc.y:15490 #, c-format msgid "incomplete statement" msgstr "sentencia incompleta" -#: preproc.y:15482 preproc.y:15499 +#: preproc.y:15476 preproc.y:15493 #, c-format msgid "unrecognized token \"%s\"" msgstr "elemento «%s» no reconocido" -#: preproc.y:15769 +#: preproc.y:15763 #, c-format msgid "only data types numeric and decimal have precision/scale argument" msgstr "sólo los tipos de dato numeric y decimal tienen argumento de precisión/escala" -#: preproc.y:15781 +#: preproc.y:15775 #, c-format msgid "interval specification not allowed here" msgstr "la especificación de intervalo no está permitida aquí" -#: preproc.y:15941 preproc.y:15993 +#: preproc.y:15935 preproc.y:15987 #, c-format msgid "too many levels in nested structure/union definition" msgstr "demasiados niveles en la definición anidada de estructura/unión" -#: preproc.y:16116 +#: preproc.y:16110 #, c-format msgid "pointers to varchar are not implemented" msgstr "los punteros a varchar no están implementados" -#: preproc.y:16303 preproc.y:16328 +#: preproc.y:16297 preproc.y:16322 #, c-format msgid "using unsupported DESCRIBE statement" msgstr "utilizando sentencia DESCRIBE no soportada" -#: preproc.y:16575 +#: preproc.y:16569 #, c-format msgid "initializer not allowed in EXEC SQL VAR command" msgstr "inicializador no permitido en la orden EXEC SQL VAR" -#: preproc.y:16892 +#: preproc.y:16886 #, c-format msgid "arrays of indicators are not allowed on input" msgstr "no se permiten los arrays de indicadores en la entrada" -#: preproc.y:17079 +#: preproc.y:17073 #, c-format msgid "operator not allowed in variable definition" msgstr "operador no permitido en definición de variable" #. translator: %s is typically the translation of "syntax error" -#: preproc.y:17120 +#: preproc.y:17114 #, c-format msgid "%s at or near \"%s\"" msgstr "%s en o cerca de «%s»" @@ -683,10 +684,3 @@ msgstr "los punteros a puntero no están soportados para este tipo de dato" #, c-format msgid "multidimensional arrays for structures are not supported" msgstr "los arrays multidimensionales para estructuras no están soportados" - -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Reporte errores a .\n" diff --git a/src/interfaces/ecpg/preproc/po/fr.po b/src/interfaces/ecpg/preproc/po/fr.po index b22cc80578120..d91efe916f904 100644 --- a/src/interfaces/ecpg/preproc/po/fr.po +++ b/src/interfaces/ecpg/preproc/po/fr.po @@ -7,10 +7,10 @@ # Stéphane Schildknecht , 2009. msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 12\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-04-16 06:09+0000\n" -"PO-Revision-Date: 2020-04-16 13:39+0200\n" +"POT-Creation-Date: 2021-04-14 05:39+0000\n" +"PO-Revision-Date: 2021-04-14 08:55+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: PostgreSQLfr \n" "Language: fr\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" #: descriptor.c:64 #, c-format @@ -55,7 +55,7 @@ msgstr "l'élément du descripteur « %s » n'est pas implanté" msgid "descriptor item \"%s\" cannot be set" msgstr "l'élément du descripteur « %s » ne peut pas être initialisé" -#: ecpg.c:35 +#: ecpg.c:36 #, c-format msgid "" "%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" @@ -64,7 +64,7 @@ msgstr "" "%s est le préprocesseur SQL embarqué de PostgreSQL pour les programmes C.\n" "\n" -#: ecpg.c:37 +#: ecpg.c:38 #, c-format msgid "" "Usage:\n" @@ -75,12 +75,12 @@ msgstr "" " %s [OPTION]... FICHIER...\n" "\n" -#: ecpg.c:40 +#: ecpg.c:41 #, c-format msgid "Options:\n" msgstr "Options:\n" -#: ecpg.c:41 +#: ecpg.c:42 #, c-format msgid "" " -c automatically generate C code from embedded SQL code;\n" @@ -89,7 +89,7 @@ msgstr "" " -c produit automatiquement le code C à partir du code SQL embarqué ;\n" " ceci affecte EXEC SQL TYPE\n" -#: ecpg.c:43 +#: ecpg.c:44 #, c-format msgid "" " -C MODE set compatibility mode; MODE can be one of\n" @@ -98,37 +98,37 @@ msgstr "" " -C MODE configure le mode de compatibilité ; MODE peut être\n" " « INFORMIX », « INFORMIX_SE » ou « ORACLE »\n" -#: ecpg.c:46 +#: ecpg.c:47 #, c-format msgid " -d generate parser debug output\n" msgstr " -d produit la sortie de débogage de l'analyseur\n" -#: ecpg.c:48 +#: ecpg.c:49 #, c-format msgid " -D SYMBOL define SYMBOL\n" msgstr " -D SYMBOLE définit SYMBOLE\n" -#: ecpg.c:49 +#: ecpg.c:50 #, c-format msgid " -h parse a header file, this option includes option \"-c\"\n" msgstr " -h analyse un fichier d'en-tête, cette option inclut l'option « -c »\n" -#: ecpg.c:50 +#: ecpg.c:51 #, c-format msgid " -i parse system include files as well\n" msgstr " -i analyse en plus les fichiers d'en-tête systèmes\n" -#: ecpg.c:51 +#: ecpg.c:52 #, c-format msgid " -I DIRECTORY search DIRECTORY for include files\n" msgstr " -I RÉPERTOIRE recherche les fichiers d'en-têtes dans RÉPERTOIRE\n" -#: ecpg.c:52 +#: ecpg.c:53 #, c-format msgid " -o OUTFILE write result to OUTFILE\n" msgstr " -o FICHIER écrit le résultat dans FICHIER\n" -#: ecpg.c:53 +#: ecpg.c:54 #, c-format msgid "" " -r OPTION specify run-time behavior; OPTION can be:\n" @@ -137,27 +137,27 @@ msgstr "" " -r OPTION indique le comportement à l'exécution ; OPTION peut valoir :\n" " « no_indicator », « prepare », « questionmarks »\n" -#: ecpg.c:55 +#: ecpg.c:56 #, c-format msgid " --regression run in regression testing mode\n" msgstr " --regression s'exécute en mode de tests des régressions\n" -#: ecpg.c:56 +#: ecpg.c:57 #, c-format msgid " -t turn on autocommit of transactions\n" msgstr " -t active la validation automatique des transactions\n" -#: ecpg.c:57 +#: ecpg.c:58 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version et quitte\n" -#: ecpg.c:58 +#: ecpg.c:59 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide et quitte\n" -#: ecpg.c:59 +#: ecpg.c:60 #, c-format msgid "" "\n" @@ -169,7 +169,7 @@ msgstr "" "ajoutant le suffixe .c au nom du fichier en entrée après avoir supprimé le\n" "suffixe .pgc s'il est présent\n" -#: ecpg.c:61 +#: ecpg.c:62 #, c-format msgid "" "\n" @@ -178,169 +178,174 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: ecpg.c:62 +#: ecpg.c:63 #, c-format msgid "%s home page: <%s>\n" msgstr "page d'accueil de %s : <%s>\n" -#: ecpg.c:140 +#: ecpg.c:141 #, c-format msgid "%s: could not locate my own executable path\n" msgstr "%s : n'a pas pu localiser mon propre exécutable\n" -#: ecpg.c:175 ecpg.c:332 ecpg.c:343 +#: ecpg.c:176 ecpg.c:333 ecpg.c:344 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s : n'a pas pu ouvrir le fichier « %s » : %s\n" -#: ecpg.c:218 ecpg.c:231 ecpg.c:247 ecpg.c:273 +#: ecpg.c:219 ecpg.c:232 ecpg.c:248 ecpg.c:274 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayer « %s --help » pour plus d'informations.\n" -#: ecpg.c:242 +#: ecpg.c:243 #, c-format msgid "%s: parser debug support (-d) not available\n" msgstr "%s : support de débogage de l'analyseur (-d) non disponible\n" -#: ecpg.c:261 +#: ecpg.c:262 #, c-format msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" msgstr "%s, le préprocesseur C embarqué de PostgreSQL, version %s\n" -#: ecpg.c:263 +#: ecpg.c:264 #, c-format msgid "EXEC SQL INCLUDE ... search starts here:\n" msgstr "la recherche EXEC SQL INCLUDE ... commence ici :\n" -#: ecpg.c:266 +#: ecpg.c:267 #, c-format msgid "end of search list\n" msgstr "fin de la liste de recherche\n" -#: ecpg.c:272 +#: ecpg.c:273 #, c-format msgid "%s: no input files specified\n" msgstr "%s : aucun fichier précisé en entrée\n" -#: ecpg.c:466 +#: ecpg.c:476 #, c-format msgid "cursor \"%s\" has been declared but not opened" msgstr "le curseur « %s » est déclaré mais non ouvert" -#: ecpg.c:479 preproc.y:128 +#: ecpg.c:489 preproc.y:130 #, c-format msgid "could not remove output file \"%s\"\n" msgstr "n'a pas pu supprimer le fichier « %s » en sortie\n" -#: pgc.l:486 +#: pgc.l:502 #, c-format msgid "unterminated /* comment" msgstr "commentaire /* non terminé" -#: pgc.l:503 +#: pgc.l:519 #, c-format msgid "unterminated bit string literal" msgstr "chaîne bit litéral non terminée" -#: pgc.l:511 +#: pgc.l:527 #, c-format msgid "unterminated hexadecimal string literal" msgstr "chaîne hexadécimale litéralle non terminée" -#: pgc.l:586 +#: pgc.l:602 #, c-format msgid "invalid bit string literal" msgstr "chaîne bit litéral invalide" #: pgc.l:607 #, c-format +msgid "invalid hex string literal" +msgstr "chaîne hexadécimale litéralle invalide" + +#: pgc.l:625 +#, c-format msgid "unhandled previous state in xqs\n" msgstr "état précédent non géré dans xqs\n" -#: pgc.l:636 pgc.l:738 +#: pgc.l:651 pgc.l:760 #, c-format msgid "unterminated quoted string" msgstr "chaîne entre guillemets non terminée" -#: pgc.l:687 +#: pgc.l:702 #, c-format msgid "unterminated dollar-quoted string" msgstr "chaîne entre guillemets dollars non terminée" -#: pgc.l:705 pgc.l:718 +#: pgc.l:720 pgc.l:740 #, c-format msgid "zero-length delimited identifier" msgstr "identifiant délimité de taille zéro" -#: pgc.l:729 +#: pgc.l:751 #, c-format msgid "unterminated quoted identifier" msgstr "identifiant entre guillemet non terminé" -#: pgc.l:1060 +#: pgc.l:1082 #, c-format msgid "nested /* ... */ comments" msgstr "commentaires /* ... */ imbriqués" -#: pgc.l:1153 +#: pgc.l:1175 #, c-format msgid "missing identifier in EXEC SQL UNDEF command" msgstr "identifiant manquant dans la commande EXEC SQL UNDEF" -#: pgc.l:1199 pgc.l:1213 +#: pgc.l:1193 pgc.l:1206 pgc.l:1222 pgc.l:1235 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "trop de conditions EXEC SQL IFDEF imbriquées" + +#: pgc.l:1251 pgc.l:1262 pgc.l:1277 pgc.l:1299 #, c-format msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" msgstr "correspondance manquante « EXEC SQL IFDEF » / « EXEC SQL IFNDEF »" -#: pgc.l:1202 pgc.l:1215 pgc.l:1393 +#: pgc.l:1253 pgc.l:1264 pgc.l:1445 #, c-format msgid "missing \"EXEC SQL ENDIF;\"" msgstr "« EXEC SQL ENDIF; » manquant" -#: pgc.l:1231 pgc.l:1250 +#: pgc.l:1279 pgc.l:1301 #, c-format msgid "more than one EXEC SQL ELSE" msgstr "plusieurs EXEC SQL ELSE" -#: pgc.l:1272 pgc.l:1286 +#: pgc.l:1324 pgc.l:1338 #, c-format msgid "unmatched EXEC SQL ENDIF" msgstr "EXEC SQL ENDIF différent" -#: pgc.l:1306 -#, c-format -msgid "too many nested EXEC SQL IFDEF conditions" -msgstr "trop de conditions EXEC SQL IFDEF imbriquées" - -#: pgc.l:1341 +#: pgc.l:1393 #, c-format msgid "missing identifier in EXEC SQL IFDEF command" msgstr "identifiant manquant dans la commande EXEC SQL IFDEF" -#: pgc.l:1350 +#: pgc.l:1402 #, c-format msgid "missing identifier in EXEC SQL DEFINE command" msgstr "identifiant manquant dans la commande EXEC SQL DEFINE" -#: pgc.l:1383 +#: pgc.l:1435 #, c-format msgid "syntax error in EXEC SQL INCLUDE command" msgstr "erreur de syntaxe dans la commande EXEC SQL INCLUDE" -#: pgc.l:1433 +#: pgc.l:1485 #, c-format msgid "internal error: unreachable state; please report this to <%s>" msgstr "erreur interne : l'état ne peut être atteint ; merci de rapporter ceci à <%s>" -#: pgc.l:1583 +#: pgc.l:1637 #, c-format msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" msgstr "" "Erreur : le chemin d'en-tête « %s/%s » est trop long sur la ligne %d,\n" "ignoré\n" -#: pgc.l:1606 +#: pgc.l:1660 #, c-format msgid "could not open include file \"%s\" on line %d" msgstr "n'a pas pu ouvrir le fichier d'en-tête « %s » sur la ligne %d" @@ -349,217 +354,228 @@ msgstr "n'a pas pu ouvrir le fichier d'en-tête « %s » sur la ligne %d" msgid "syntax error" msgstr "erreur de syntaxe" -#: preproc.y:82 +#: preproc.y:84 #, c-format msgid "WARNING: " msgstr "ATTENTION : " -#: preproc.y:85 +#: preproc.y:87 #, c-format msgid "ERROR: " msgstr "ERREUR : " -#: preproc.y:509 +#: preproc.y:514 #, c-format msgid "cursor \"%s\" does not exist" msgstr "le curseur « %s » n'existe pas" -#: preproc.y:538 +#: preproc.y:543 #, c-format msgid "initializer not allowed in type definition" msgstr "initialiseur non autorisé dans la définition du type" -#: preproc.y:540 +#: preproc.y:545 #, c-format msgid "type name \"string\" is reserved in Informix mode" msgstr "le nom du type « string » est réservé dans le mode Informix" -#: preproc.y:547 preproc.y:15954 +#: preproc.y:552 preproc.y:17675 #, c-format msgid "type \"%s\" is already defined" msgstr "le type « %s » est déjà défini" -#: preproc.y:572 preproc.y:16597 preproc.y:16922 variable.c:621 +#: preproc.y:577 preproc.y:18318 preproc.y:18643 variable.c:621 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "" "les tableaux multi-dimensionnels pour les types de données simples ne sont\n" "pas supportés" -#: preproc.y:1701 +#: preproc.y:1749 #, c-format msgid "AT option not allowed in CLOSE DATABASE statement" msgstr "option AT non autorisée dans une instruction CLOSE DATABASE" -#: preproc.y:1949 +#: preproc.y:1997 #, c-format msgid "AT option not allowed in CONNECT statement" msgstr "option AT non autorisée dans une instruction CONNECT" -#: preproc.y:1983 +#: preproc.y:2035 #, c-format msgid "AT option not allowed in DISCONNECT statement" msgstr "option AT non autorisée dans une instruction DISCONNECT" -#: preproc.y:2038 +#: preproc.y:2090 #, c-format msgid "AT option not allowed in SET CONNECTION statement" msgstr "option AT non autorisée dans une instruction SET CONNECTION" -#: preproc.y:2060 +#: preproc.y:2112 #, c-format msgid "AT option not allowed in TYPE statement" msgstr "option AT non autorisée dans une instruction TYPE" -#: preproc.y:2069 +#: preproc.y:2121 #, c-format msgid "AT option not allowed in VAR statement" msgstr "option AT non autorisée dans une instruction VAR" -#: preproc.y:2076 +#: preproc.y:2128 #, c-format msgid "AT option not allowed in WHENEVER statement" msgstr "option AT non autorisée dans une instruction WHENEVER" -#: preproc.y:2153 preproc.y:2325 preproc.y:2330 preproc.y:2453 preproc.y:4031 preproc.y:4691 -#: preproc.y:5633 preproc.y:5933 preproc.y:7551 preproc.y:9079 preproc.y:9084 preproc.y:11915 +#: preproc.y:2205 preproc.y:2377 preproc.y:2382 preproc.y:2505 preproc.y:4129 preproc.y:4793 +#: preproc.y:5326 preproc.y:5664 preproc.y:5964 preproc.y:7532 preproc.y:9100 preproc.y:9105 +#: preproc.y:11925 #, c-format msgid "unsupported feature will be passed to server" msgstr "la fonctionnalité non supportée sera passée au serveur" -#: preproc.y:2711 +#: preproc.y:2763 #, c-format msgid "SHOW ALL is not implemented" msgstr "SHOW ALL n'est pas implanté" -#: preproc.y:3379 +#: preproc.y:3462 #, c-format msgid "COPY FROM STDIN is not implemented" msgstr "COPY FROM STDIN n'est pas implanté" -#: preproc.y:10058 preproc.y:15539 +#: preproc.y:10024 preproc.y:17250 +#, c-format +msgid "\"database\" cannot be used as cursor name in INFORMIX mode" +msgstr "« database » ne peut pas être utilisé comme nom de curseur dans le mode INFORMIX" + +#: preproc.y:10031 preproc.y:17260 #, c-format msgid "using variable \"%s\" in different declare statements is not supported" msgstr "" "l'utilisation de la variable « %s » dans différentes instructions de déclaration\n" "n'est pas supportée" -#: preproc.y:10060 preproc.y:15541 +#: preproc.y:10033 preproc.y:17262 #, c-format msgid "cursor \"%s\" is already defined" msgstr "le curseur « %s » est déjà défini" -#: preproc.y:10500 +#: preproc.y:10507 #, c-format msgid "no longer supported LIMIT #,# syntax passed to server" msgstr "la syntaxe obsolète LIMIT #,# a été passée au serveur" -#: preproc.y:10829 preproc.y:10836 +#: preproc.y:10840 preproc.y:10847 #, c-format msgid "subquery in FROM must have an alias" msgstr "la sous-requête du FROM doit avoir un alias" -#: preproc.y:15262 preproc.y:15269 +#: preproc.y:16942 preproc.y:16949 #, c-format msgid "CREATE TABLE AS cannot specify INTO" msgstr "CREATE TABLE AS ne peut pas indiquer INTO" -#: preproc.y:15305 +#: preproc.y:16985 #, c-format msgid "expected \"@\", found \"%s\"" msgstr "« @ » attendu, « %s » trouvé" -#: preproc.y:15317 +#: preproc.y:16997 #, c-format msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" msgstr "" "seuls les protocoles « tcp » et « unix » et les types de base de données\n" "« postgresql » sont supportés" -#: preproc.y:15320 +#: preproc.y:17000 #, c-format msgid "expected \"://\", found \"%s\"" msgstr "« :// » attendu, « %s » trouvé" -#: preproc.y:15325 +#: preproc.y:17005 #, c-format msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" msgstr "les sockets de domaine Unix fonctionnent seulement sur « localhost », mais pas sur « %s »" -#: preproc.y:15351 +#: preproc.y:17031 #, c-format msgid "expected \"postgresql\", found \"%s\"" msgstr "« postgresql » attendu, « %s » trouvé" -#: preproc.y:15354 +#: preproc.y:17034 #, c-format msgid "invalid connection type: %s" msgstr "type de connexion invalide : %s" -#: preproc.y:15363 +#: preproc.y:17043 #, c-format msgid "expected \"@\" or \"://\", found \"%s\"" msgstr "« @ » ou « :// » attendu, « %s » trouvé" -#: preproc.y:15438 preproc.y:15456 +#: preproc.y:17118 preproc.y:17136 #, c-format msgid "invalid data type" msgstr "type de données invalide" -#: preproc.y:15467 preproc.y:15484 +#: preproc.y:17147 preproc.y:17164 #, c-format msgid "incomplete statement" msgstr "instruction incomplète" -#: preproc.y:15470 preproc.y:15487 +#: preproc.y:17150 preproc.y:17167 #, c-format msgid "unrecognized token \"%s\"" msgstr "jeton « %s » non reconnu" -#: preproc.y:15757 +#: preproc.y:17212 +#, c-format +msgid "declared name %s is already defined" +msgstr "le nom déclaré %s est déjà défini" + +#: preproc.y:17478 #, c-format msgid "only data types numeric and decimal have precision/scale argument" msgstr "" "seuls les types de données numeric et decimal ont des arguments de\n" "précision et d'échelle" -#: preproc.y:15769 +#: preproc.y:17490 #, c-format msgid "interval specification not allowed here" msgstr "interval de spécification non autorisé ici" -#: preproc.y:15929 preproc.y:15981 +#: preproc.y:17650 preproc.y:17702 #, c-format msgid "too many levels in nested structure/union definition" msgstr "trop de niveaux dans la définition de structure/union imbriquée" -#: preproc.y:16104 +#: preproc.y:17825 #, c-format msgid "pointers to varchar are not implemented" msgstr "les pointeurs sur des chaînes de caractères (varchar) ne sont pas implantés" -#: preproc.y:16291 preproc.y:16316 +#: preproc.y:18012 preproc.y:18037 #, c-format msgid "using unsupported DESCRIBE statement" msgstr "utilisation de l'instruction DESCRIBE non supporté" -#: preproc.y:16563 +#: preproc.y:18284 #, c-format msgid "initializer not allowed in EXEC SQL VAR command" msgstr "initialiseur non autorisé dans la commande EXEC SQL VAR" -#: preproc.y:16880 +#: preproc.y:18601 #, c-format msgid "arrays of indicators are not allowed on input" msgstr "les tableaux d'indicateurs ne sont pas autorisés en entrée" -#: preproc.y:17067 +#: preproc.y:18788 #, c-format msgid "operator not allowed in variable definition" msgstr "opérateur non autorisé dans la définition de la variable" #. translator: %s is typically the translation of "syntax error" -#: preproc.y:17108 +#: preproc.y:18829 #, c-format msgid "%s at or near \"%s\"" msgstr "%s sur ou près de « %s »" @@ -720,9 +736,6 @@ msgstr "les tableaux multidimensionnels ne sont pas supportés pour les structur #~ msgid " --version output version information, then exit\n" #~ msgstr " --version affiche la version et quitte\n" -#~ msgid "declared name \"%s\" is already defined" -#~ msgstr "le nom déclaré « %s » est déjà défini" - #~ msgid "" #~ "\n" #~ "Report bugs to .\n" diff --git a/src/interfaces/ecpg/preproc/po/ko.po b/src/interfaces/ecpg/preproc/po/ko.po index 62f19bf897f6c..43516f9f85182 100644 --- a/src/interfaces/ecpg/preproc/po/ko.po +++ b/src/interfaces/ecpg/preproc/po/ko.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: ecpg (PostgreSQL) 12\n" +"Project-Id-Version: ecpg (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:09+0000\n" -"PO-Revision-Date: 2019-11-01 11:02+0900\n" +"POT-Creation-Date: 2020-10-05 01:09+0000\n" +"PO-Revision-Date: 2020-10-05 16:55+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean Team \n" "Language: ko\n" @@ -172,166 +172,174 @@ msgstr "" #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"오류보고: .\n" +"문제점 보고 주소: <%s>\n" -#: ecpg.c:139 +#: ecpg.c:62 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" + +#: ecpg.c:140 #, c-format msgid "%s: could not locate my own executable path\n" msgstr "%s: 실행 가능한 경로를 지정할 수 없습니다\n" -#: ecpg.c:174 ecpg.c:331 ecpg.c:342 +#: ecpg.c:175 ecpg.c:332 ecpg.c:343 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: \"%s\" 파일 열 수 없음: %s\n" -#: ecpg.c:217 ecpg.c:230 ecpg.c:246 ecpg.c:272 +#: ecpg.c:218 ecpg.c:231 ecpg.c:247 ecpg.c:273 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "자제한 사항은 \"%s --help\" 명령으로 살펴보십시오.\n" -#: ecpg.c:241 +#: ecpg.c:242 #, c-format msgid "%s: parser debug support (-d) not available\n" msgstr "%s: 파서 디버그 지원(-d)을 사용할 수 없음\n" -#: ecpg.c:260 +#: ecpg.c:261 #, c-format msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" msgstr "%s, PostgreSQL 포함 C 전처리기, 버전 %s\n" -#: ecpg.c:262 +#: ecpg.c:263 #, c-format msgid "EXEC SQL INCLUDE ... search starts here:\n" msgstr "EXEC SQL INCLUDE ... 여기서 검색 시작:\n" -#: ecpg.c:265 +#: ecpg.c:266 #, c-format msgid "end of search list\n" msgstr "검색 목록의 끝\n" -#: ecpg.c:271 +#: ecpg.c:272 #, c-format msgid "%s: no input files specified\n" msgstr "%s: 지정된 입력 파일 없음\n" -#: ecpg.c:465 +#: ecpg.c:466 #, c-format msgid "cursor \"%s\" has been declared but not opened" msgstr "\"%s\" 커서가 선언되었지만 열리지 않음" -#: ecpg.c:478 preproc.y:128 +#: ecpg.c:479 preproc.y:128 #, c-format msgid "could not remove output file \"%s\"\n" msgstr "출력 파일 \"%s\"을(를) 제거할 수 없음\n" -#: pgc.l:472 +#: pgc.l:502 #, c-format msgid "unterminated /* comment" msgstr "마무리 안된 /* 주석" -#: pgc.l:490 -#, c-format -msgid "invalid bit string literal" -msgstr "잘못된 비트 문자열 리터럴" - -#: pgc.l:502 +#: pgc.l:519 #, c-format msgid "unterminated bit string literal" msgstr "마무리 안된 비트 문자열 문자" -#: pgc.l:518 +#: pgc.l:527 #, c-format msgid "unterminated hexadecimal string literal" msgstr "마무리 안된 16진수 문자열 문자" -#: pgc.l:614 pgc.l:718 +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "잘못된 비트 문자열 리터럴" + +#: pgc.l:623 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "xqs 안에 다룰 수 없는 이전 상태값 있음\n" + +#: pgc.l:652 pgc.l:754 #, c-format msgid "unterminated quoted string" msgstr "마무리 안된 따옴표 안의 문자열" -#: pgc.l:665 +#: pgc.l:703 #, c-format msgid "unterminated dollar-quoted string" msgstr "마무리 안된 따옴표 안의 문자열" -#: pgc.l:684 pgc.l:697 +#: pgc.l:721 pgc.l:734 #, c-format msgid "zero-length delimited identifier" msgstr "길이가 0인 구분 식별자" -#: pgc.l:709 +#: pgc.l:745 #, c-format msgid "unterminated quoted identifier" msgstr "마무리 안된 따옴표 안의 식별자" -#: pgc.l:1040 +#: pgc.l:1076 #, c-format msgid "nested /* ... */ comments" msgstr "중첩된 /* ... */ 주석" -#: pgc.l:1133 +#: pgc.l:1169 #, c-format msgid "missing identifier in EXEC SQL UNDEF command" msgstr "EXEC SQL UNDEF 명령에 식별자 누락" -#: pgc.l:1179 pgc.l:1193 +#: pgc.l:1187 pgc.l:1200 pgc.l:1216 pgc.l:1229 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "중첩된 EXEC SQL IFDEF 조건이 너무 많음" + +#: pgc.l:1245 pgc.l:1256 pgc.l:1271 pgc.l:1293 #, c-format msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" msgstr "일치하는 \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\" 누락" -#: pgc.l:1182 pgc.l:1195 pgc.l:1373 +#: pgc.l:1247 pgc.l:1258 pgc.l:1439 #, c-format msgid "missing \"EXEC SQL ENDIF;\"" msgstr "\"EXEC SQL ENDIF;\" 누락" -#: pgc.l:1211 pgc.l:1230 +#: pgc.l:1273 pgc.l:1295 #, c-format msgid "more than one EXEC SQL ELSE" msgstr "두 개 이상의 EXEC SQL ELSE" -#: pgc.l:1252 pgc.l:1266 +#: pgc.l:1318 pgc.l:1332 #, c-format msgid "unmatched EXEC SQL ENDIF" msgstr "일치하지 않는 EXEC SQL ENDIF" -#: pgc.l:1286 -#, c-format -msgid "too many nested EXEC SQL IFDEF conditions" -msgstr "중첩된 EXEC SQL IFDEF 조건이 너무 많음" - -#: pgc.l:1321 +#: pgc.l:1387 #, c-format msgid "missing identifier in EXEC SQL IFDEF command" msgstr "EXEC SQL IFDEF 명령에 식별자 누락" -#: pgc.l:1330 +#: pgc.l:1396 #, c-format msgid "missing identifier in EXEC SQL DEFINE command" msgstr "EXEC SQL DEFINE 명령에 식별자 누락" -#: pgc.l:1363 +#: pgc.l:1429 #, c-format msgid "syntax error in EXEC SQL INCLUDE command" msgstr "EXEC SQL INCLUDE 명령에 구문 오류 발생" -#: pgc.l:1413 +#: pgc.l:1479 #, c-format -msgid "" -"internal error: unreachable state; please report this to " +msgid "internal error: unreachable state; please report this to <%s>" msgstr "" -"내부 오류: 연결할 수 없습니다. 이 문제를 로 " +"내부 오류: 상태값을 알 수 없습니다. 이 문제를 <%s> 주소로 " "알려주십시오." -#: pgc.l:1564 +#: pgc.l:1631 #, c-format msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" msgstr "오류: 포함 경로 \"%s/%s\"이(가) %d줄에서 너무 길어서 건너뜀\n" -#: pgc.l:1587 +#: pgc.l:1654 #, c-format msgid "could not open include file \"%s\" on line %d" msgstr "포함 파일 \"%s\"을(를) %d줄에서 열 수 없음" @@ -350,114 +358,114 @@ msgstr "경고: " msgid "ERROR: " msgstr "오류: " -#: preproc.y:509 +#: preproc.y:512 #, c-format msgid "cursor \"%s\" does not exist" msgstr "\"%s\" 이름의 커서가 없음" -#: preproc.y:538 +#: preproc.y:541 #, c-format msgid "initializer not allowed in type definition" msgstr "형식 정의에 이니셜라이저가 허용되지 않음" -#: preproc.y:540 +#: preproc.y:543 #, c-format msgid "type name \"string\" is reserved in Informix mode" msgstr "\"string\" 자료형 이름은 인포믹스 모드에서 예약어로 쓰입니다" -#: preproc.y:547 preproc.y:15792 +#: preproc.y:550 preproc.y:15960 #, c-format msgid "type \"%s\" is already defined" msgstr "\"%s\" 형식이 이미 정의됨" -#: preproc.y:572 preproc.y:16463 preproc.y:16788 variable.c:621 +#: preproc.y:575 preproc.y:16603 preproc.y:16928 variable.c:621 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "단순 데이터 형식에 다차원 배열이 지원되지 않음" -#: preproc.y:1696 +#: preproc.y:1704 #, c-format msgid "AT option not allowed in CLOSE DATABASE statement" msgstr "CLOSE DATABASE 문에 AT 옵션이 허용되지 않음" -#: preproc.y:1944 +#: preproc.y:1952 #, c-format msgid "AT option not allowed in CONNECT statement" msgstr "CONNECT 문에 AT 옵션이 허용되지 않음" -#: preproc.y:1978 +#: preproc.y:1986 #, c-format msgid "AT option not allowed in DISCONNECT statement" msgstr "DISCONNECT 문에 AT 옵션이 허용되지 않음" -#: preproc.y:2033 +#: preproc.y:2041 #, c-format msgid "AT option not allowed in SET CONNECTION statement" msgstr "SET CONNECTION 문에 AT 옵션이 허용되지 않음" -#: preproc.y:2055 +#: preproc.y:2063 #, c-format msgid "AT option not allowed in TYPE statement" msgstr "TYPE 문에 AT 옵션이 허용되지 않음" -#: preproc.y:2064 +#: preproc.y:2072 #, c-format msgid "AT option not allowed in VAR statement" msgstr "VAR 문에 AT 옵션이 허용되지 않음" -#: preproc.y:2071 +#: preproc.y:2079 #, c-format msgid "AT option not allowed in WHENEVER statement" msgstr "WHENEVER 문에 AT 옵션이 허용되지 않음" -#: preproc.y:2148 preproc.y:2320 preproc.y:2325 preproc.y:2448 preproc.y:4018 -#: preproc.y:5607 preproc.y:5907 preproc.y:7513 preproc.y:9025 preproc.y:9030 -#: preproc.y:11829 +#: preproc.y:2156 preproc.y:2328 preproc.y:2333 preproc.y:2456 preproc.y:4034 +#: preproc.y:4682 preproc.y:5624 preproc.y:5924 preproc.y:7542 preproc.y:9081 +#: preproc.y:9086 preproc.y:11921 #, c-format msgid "unsupported feature will be passed to server" msgstr "지원되지 않는 기능이 서버에 전달됨" -#: preproc.y:2706 +#: preproc.y:2714 #, c-format msgid "SHOW ALL is not implemented" msgstr "SHOW ALL이 구현되지 않음" -#: preproc.y:3366 +#: preproc.y:3382 #, c-format msgid "COPY FROM STDIN is not implemented" msgstr "COPY FROM STDIN이 구현되지 않음" -#: preproc.y:9976 preproc.y:15377 +#: preproc.y:10060 preproc.y:15545 #, c-format msgid "using variable \"%s\" in different declare statements is not supported" msgstr "서로 다른 선언 구문에서 \"%s\" 변수 사용은 지원하지 않습니다" -#: preproc.y:9978 preproc.y:15379 +#: preproc.y:10062 preproc.y:15547 #, c-format msgid "cursor \"%s\" is already defined" msgstr "\"%s\" 커서가 이미 정의됨" -#: preproc.y:10418 +#: preproc.y:10502 #, c-format msgid "no longer supported LIMIT #,# syntax passed to server" msgstr "더 이상 지원되지 않는 LIMIT #,# 구문이 서버에 전달됨" -#: preproc.y:10743 preproc.y:10750 +#: preproc.y:10835 preproc.y:10842 #, c-format msgid "subquery in FROM must have an alias" msgstr "FROM 절 내의 subquery 에는 반드시 alias 를 가져야만 합니다" -#: preproc.y:15100 preproc.y:15107 +#: preproc.y:15268 preproc.y:15275 #, c-format msgid "CREATE TABLE AS cannot specify INTO" msgstr "CREATE TABLE AS에서 INTO를 지정할 수 없음" -#: preproc.y:15143 +#: preproc.y:15311 #, c-format msgid "expected \"@\", found \"%s\"" msgstr "\"@\"이 필요한데 \"%s\"이(가) 있음" -#: preproc.y:15155 +#: preproc.y:15323 #, c-format msgid "" "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are " @@ -465,89 +473,89 @@ msgid "" msgstr "" "\"tcp\" 및 \"unix\" 프로토콜과 데이터베이스 형식 \"postgresql\"만 지원됨" -#: preproc.y:15158 +#: preproc.y:15326 #, c-format msgid "expected \"://\", found \"%s\"" msgstr "\"://\"가 필요한데 \"%s\"이(가) 있음" -#: preproc.y:15163 +#: preproc.y:15331 #, c-format msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" msgstr "" "Unix-domain 소켓은 \"localhost\"에서만 작동하며 \"%s\"에서는 작동하지 않음" -#: preproc.y:15189 +#: preproc.y:15357 #, c-format msgid "expected \"postgresql\", found \"%s\"" msgstr "\"postgresql\"이 필요한데 \"%s\"이(가) 있음" -#: preproc.y:15192 +#: preproc.y:15360 #, c-format msgid "invalid connection type: %s" msgstr "잘못된 연결 형식: %s" -#: preproc.y:15201 +#: preproc.y:15369 #, c-format msgid "expected \"@\" or \"://\", found \"%s\"" msgstr "\"@\" 또는 \"://\"가 필요한데 \"%s\"이(가) 있음" -#: preproc.y:15276 preproc.y:15294 +#: preproc.y:15444 preproc.y:15462 #, c-format msgid "invalid data type" msgstr "잘못된 데이터 형식" -#: preproc.y:15305 preproc.y:15322 +#: preproc.y:15473 preproc.y:15490 #, c-format msgid "incomplete statement" msgstr "불완전한 문" -#: preproc.y:15308 preproc.y:15325 +#: preproc.y:15476 preproc.y:15493 #, c-format msgid "unrecognized token \"%s\"" msgstr "인식할 수 없는 토큰 \"%s\"" -#: preproc.y:15595 +#: preproc.y:15763 #, c-format msgid "only data types numeric and decimal have precision/scale argument" msgstr "숫자 및 10진수 데이터 형식에만 전체 자릿수/소수 자릿수 인수 포함" -#: preproc.y:15607 +#: preproc.y:15775 #, c-format msgid "interval specification not allowed here" msgstr "여기에는 간격 지정이 허용되지 않음" -#: preproc.y:15767 preproc.y:15819 +#: preproc.y:15935 preproc.y:15987 #, c-format msgid "too many levels in nested structure/union definition" msgstr "중첩된 구조/union 정의에 수준이 너무 많음" -#: preproc.y:15970 +#: preproc.y:16110 #, c-format msgid "pointers to varchar are not implemented" msgstr "varchar에 대한 포인터가 구현되지 않음" -#: preproc.y:16157 preproc.y:16182 +#: preproc.y:16297 preproc.y:16322 #, c-format msgid "using unsupported DESCRIBE statement" msgstr "지원되지 않는 DESCRIBE 문 사용" -#: preproc.y:16429 +#: preproc.y:16569 #, c-format msgid "initializer not allowed in EXEC SQL VAR command" msgstr "EXEC SQL VAR 명령에 이니셜라이저가 허용되지 않음" -#: preproc.y:16746 +#: preproc.y:16886 #, c-format msgid "arrays of indicators are not allowed on input" msgstr "입력에서 표시기의 배열이 허용되지 않음" -#: preproc.y:16967 +#: preproc.y:17073 #, c-format msgid "operator not allowed in variable definition" msgstr "연산자는 동적 정의 영역에서는 사용할 수 없음" #. translator: %s is typically the translation of "syntax error" -#: preproc.y:17008 +#: preproc.y:17114 #, c-format msgid "%s at or near \"%s\"" msgstr "%s, \"%s\" 부근" diff --git a/src/interfaces/ecpg/preproc/po/ru.po b/src/interfaces/ecpg/preproc/po/ru.po index 85f63e98b432d..79b69b068f89c 100644 --- a/src/interfaces/ecpg/preproc/po/ru.po +++ b/src/interfaces/ecpg/preproc/po/ru.po @@ -1,13 +1,13 @@ # Russian message translation file for ecpg # Copyright (C) 2012-2016 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2012-2017, 2018, 2019. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: ecpg (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-23 06:32+0300\n" -"PO-Revision-Date: 2019-09-09 13:30+0300\n" +"POT-Creation-Date: 2020-11-09 07:34+0300\n" +"PO-Revision-Date: 2020-11-09 08:27+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -171,168 +171,181 @@ msgstr "" #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"Об ошибках сообщайте по адресу .\n" +"Об ошибках сообщайте по адресу <%s>.\n" -#: ecpg.c:139 +#: ecpg.c:62 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: ecpg.c:140 #, c-format msgid "%s: could not locate my own executable path\n" msgstr "%s: не удалось найти свой путь к исполняемым файлам\n" -#: ecpg.c:174 ecpg.c:331 ecpg.c:342 +#: ecpg.c:175 ecpg.c:332 ecpg.c:343 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: не удалось открыть файл \"%s\": %s\n" -#: ecpg.c:217 ecpg.c:230 ecpg.c:246 ecpg.c:272 +#: ecpg.c:218 ecpg.c:231 ecpg.c:247 ecpg.c:273 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: ecpg.c:241 +#: ecpg.c:242 #, c-format msgid "%s: parser debug support (-d) not available\n" msgstr "%s: отладочные сообщения при разборе (-d) не поддерживаются\n" -#: ecpg.c:260 +#: ecpg.c:261 #, c-format msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" msgstr "%s, препроцессор внедрённого в С языка СУБД PostgreSQL, версия %s\n" -#: ecpg.c:262 +#: ecpg.c:263 #, c-format msgid "EXEC SQL INCLUDE ... search starts here:\n" msgstr "поиск файлов для EXEC SQL INCLUDE ... начинается в каталогах:\n" -#: ecpg.c:265 +#: ecpg.c:266 #, c-format msgid "end of search list\n" msgstr "конец списка поиска\n" -#: ecpg.c:271 +#: ecpg.c:272 #, c-format msgid "%s: no input files specified\n" msgstr "%s: нет входных файлов\n" -#: ecpg.c:465 +#: ecpg.c:466 #, c-format msgid "cursor \"%s\" has been declared but not opened" msgstr "курсор \"%s\" был объявлен, но не открыт" -#: ecpg.c:478 preproc.y:128 +#: ecpg.c:479 preproc.y:128 #, c-format msgid "could not remove output file \"%s\"\n" msgstr "ошибка при удалении выходного файла \"%s\"\n" -#: pgc.l:473 +#: pgc.l:502 #, c-format msgid "unterminated /* comment" msgstr "незавершённый комментарий /*" -#: pgc.l:491 -#, c-format -msgid "invalid bit string literal" -msgstr "неверная битовая строка" - -#: pgc.l:503 +#: pgc.l:519 #, c-format msgid "unterminated bit string literal" msgstr "оборванная битовая строка" -#: pgc.l:519 +#: pgc.l:527 #, c-format msgid "unterminated hexadecimal string literal" msgstr "оборванная шестнадцатеричная строка" -#: pgc.l:615 pgc.l:719 +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "неверная битовая строка" + +#: pgc.l:607 +#, c-format +msgid "invalid hex string literal" +msgstr "неверная шестнадцатеричная строка" + +#: pgc.l:625 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "" +"необрабатываемое предыдущее состояние при обнаружении закрывающего " +"апострофа\n" + +#: pgc.l:654 pgc.l:756 #, c-format msgid "unterminated quoted string" msgstr "незавершённая строка в кавычках" -#: pgc.l:666 +#: pgc.l:705 #, c-format msgid "unterminated dollar-quoted string" msgstr "незавершённая строка в долларах" -#: pgc.l:685 pgc.l:698 +#: pgc.l:723 pgc.l:736 #, c-format msgid "zero-length delimited identifier" msgstr "пустой идентификатор в кавычках" -#: pgc.l:710 +#: pgc.l:747 #, c-format msgid "unterminated quoted identifier" msgstr "незавершённый идентификатор в кавычках" -#: pgc.l:1041 +#: pgc.l:1078 #, c-format msgid "nested /* ... */ comments" msgstr "вложенные комментарии /* ... */" -#: pgc.l:1134 +#: pgc.l:1171 #, c-format msgid "missing identifier in EXEC SQL UNDEF command" msgstr "в команде EXEC SQL UNDEF отсутствует идентификатор" -#: pgc.l:1180 pgc.l:1194 +#: pgc.l:1189 pgc.l:1202 pgc.l:1218 pgc.l:1231 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "слишком много вложенных условий EXEC SQL IFDEF" + +#: pgc.l:1247 pgc.l:1258 pgc.l:1273 pgc.l:1295 #, c-format msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" msgstr "нет соответствующего \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" -#: pgc.l:1183 pgc.l:1196 pgc.l:1374 +#: pgc.l:1249 pgc.l:1260 pgc.l:1441 #, c-format msgid "missing \"EXEC SQL ENDIF;\"" msgstr "отсутствует \"EXEC SQL ENDIF;\"" -#: pgc.l:1212 pgc.l:1231 +#: pgc.l:1275 pgc.l:1297 #, c-format msgid "more than one EXEC SQL ELSE" msgstr "неоднократная команда EXEC SQL ELSE" -#: pgc.l:1253 pgc.l:1267 +#: pgc.l:1320 pgc.l:1334 #, c-format msgid "unmatched EXEC SQL ENDIF" msgstr "непарная команда EXEC SQL ENDIF" -#: pgc.l:1287 -#, c-format -msgid "too many nested EXEC SQL IFDEF conditions" -msgstr "слишком много вложенных условий EXEC SQL IFDEF" - -#: pgc.l:1322 +#: pgc.l:1389 #, c-format msgid "missing identifier in EXEC SQL IFDEF command" msgstr "в команде EXEC SQL IFDEF отсутствует идентификатор" -#: pgc.l:1331 +#: pgc.l:1398 #, c-format msgid "missing identifier in EXEC SQL DEFINE command" msgstr "в команде EXEC SQL DEFINE отсутствует идентификатор" -#: pgc.l:1364 +#: pgc.l:1431 #, c-format msgid "syntax error in EXEC SQL INCLUDE command" msgstr "ошибка синтаксиса в команде EXEC SQL INCLUDE" -#: pgc.l:1414 +#: pgc.l:1481 #, c-format -msgid "" -"internal error: unreachable state; please report this to " -msgstr "" -"внутренняя ошибка: недостижимое состояние; пожалуйста, сообщите в " +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "внутренняя ошибка: недостижимое состояние; пожалуйста, сообщите в <%s>" -#: pgc.l:1564 +#: pgc.l:1633 #, c-format msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" msgstr "" "Ошибка: путь включаемых файлов \"%s/%s\" в строке %d слишком длинный, " "пропускается\n" -#: pgc.l:1587 +#: pgc.l:1656 #, c-format msgid "could not open include file \"%s\" on line %d" msgstr "не удалось открыть включаемый файл \"%s\" (строка %d)" @@ -351,115 +364,115 @@ msgstr "ПРЕДУПРЕЖДЕНИЕ: " msgid "ERROR: " msgstr "ОШИБКА: " -#: preproc.y:509 +#: preproc.y:512 #, c-format msgid "cursor \"%s\" does not exist" msgstr "курсор \"%s\" не существует" -#: preproc.y:538 +#: preproc.y:541 #, c-format msgid "initializer not allowed in type definition" msgstr "определение типа не может включать инициализатор" -#: preproc.y:540 +#: preproc.y:543 #, c-format msgid "type name \"string\" is reserved in Informix mode" msgstr "имя типа \"string\" в режиме Informix зарезервировано" -#: preproc.y:547 preproc.y:15792 +#: preproc.y:550 preproc.y:15962 #, c-format msgid "type \"%s\" is already defined" msgstr "тип \"%s\" уже определён" -#: preproc.y:572 preproc.y:16463 preproc.y:16788 variable.c:621 +#: preproc.y:575 preproc.y:16605 preproc.y:16930 variable.c:621 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "многомерные массивы с простыми типами данных не поддерживаются" -#: preproc.y:1696 +#: preproc.y:1706 #, c-format msgid "AT option not allowed in CLOSE DATABASE statement" msgstr "оператор CLOSE DATABASE с параметром AT не поддерживается" -#: preproc.y:1944 +#: preproc.y:1954 #, c-format msgid "AT option not allowed in CONNECT statement" msgstr "оператор CONNECT с параметром AT не поддерживается" -#: preproc.y:1978 +#: preproc.y:1988 #, c-format msgid "AT option not allowed in DISCONNECT statement" msgstr "оператор DISCONNECT с параметром AT не поддерживается" -#: preproc.y:2033 +#: preproc.y:2043 #, c-format msgid "AT option not allowed in SET CONNECTION statement" msgstr "оператор SET CONNECTION с параметром AT не поддерживается" -#: preproc.y:2055 +#: preproc.y:2065 #, c-format msgid "AT option not allowed in TYPE statement" msgstr "оператор TYPE с параметром AT не поддерживается" -#: preproc.y:2064 +#: preproc.y:2074 #, c-format msgid "AT option not allowed in VAR statement" msgstr "оператор VAR с параметром AT не поддерживается" -#: preproc.y:2071 +#: preproc.y:2081 #, c-format msgid "AT option not allowed in WHENEVER statement" msgstr "оператор WHENEVER с параметром AT не поддерживается" -#: preproc.y:2148 preproc.y:2320 preproc.y:2325 preproc.y:2448 preproc.y:4018 -#: preproc.y:5607 preproc.y:5907 preproc.y:7513 preproc.y:9025 preproc.y:9030 -#: preproc.y:11829 +#: preproc.y:2158 preproc.y:2330 preproc.y:2335 preproc.y:2458 preproc.y:4036 +#: preproc.y:4684 preproc.y:5626 preproc.y:5926 preproc.y:7544 preproc.y:9083 +#: preproc.y:9088 preproc.y:11923 #, c-format msgid "unsupported feature will be passed to server" msgstr "неподдерживаемая функция будет передана серверу" -#: preproc.y:2706 +#: preproc.y:2716 #, c-format msgid "SHOW ALL is not implemented" msgstr "SHOW ALL не реализовано" -#: preproc.y:3366 +#: preproc.y:3384 #, c-format msgid "COPY FROM STDIN is not implemented" msgstr "операция COPY FROM STDIN не реализована" -#: preproc.y:9976 preproc.y:15377 +#: preproc.y:10062 preproc.y:15547 #, c-format msgid "using variable \"%s\" in different declare statements is not supported" msgstr "" "использование переменной \"%s\" в разных операторах DECLARE не поддерживается" -#: preproc.y:9978 preproc.y:15379 +#: preproc.y:10064 preproc.y:15549 #, c-format msgid "cursor \"%s\" is already defined" msgstr "курсор \"%s\" уже определён" -#: preproc.y:10418 +#: preproc.y:10504 #, c-format msgid "no longer supported LIMIT #,# syntax passed to server" msgstr "не поддерживаемое более предложение LIMIT #,# передано на сервер" -#: preproc.y:10743 preproc.y:10750 +#: preproc.y:10837 preproc.y:10844 #, c-format msgid "subquery in FROM must have an alias" msgstr "подзапрос во FROM должен иметь псевдоним" -#: preproc.y:15100 preproc.y:15107 +#: preproc.y:15270 preproc.y:15277 #, c-format msgid "CREATE TABLE AS cannot specify INTO" msgstr "в CREATE TABLE AS нельзя указать INTO" -#: preproc.y:15143 +#: preproc.y:15313 #, c-format msgid "expected \"@\", found \"%s\"" msgstr "ожидался знак \"@\", но на этом месте \"%s\"" -#: preproc.y:15155 +#: preproc.y:15325 #, c-format msgid "" "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are " @@ -468,89 +481,89 @@ msgstr "" "поддерживаются только протоколы \"tcp\" и \"unix\", а тип базы данных - " "\"postgresql\"" -#: preproc.y:15158 +#: preproc.y:15328 #, c-format msgid "expected \"://\", found \"%s\"" msgstr "ожидалось \"://\", но на этом месте \"%s\"" -#: preproc.y:15163 +#: preproc.y:15333 #, c-format msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" msgstr "Unix-сокеты работают только с \"localhost\", но не с адресом \"%s\"" -#: preproc.y:15189 +#: preproc.y:15359 #, c-format msgid "expected \"postgresql\", found \"%s\"" msgstr "ожидался тип \"postgresql\", но на этом месте \"%s\"" -#: preproc.y:15192 +#: preproc.y:15362 #, c-format msgid "invalid connection type: %s" msgstr "неверный тип подключения: %s" -#: preproc.y:15201 +#: preproc.y:15371 #, c-format msgid "expected \"@\" or \"://\", found \"%s\"" msgstr "ожидалось \"@\" или \"://\", но на этом месте \"%s\"" -#: preproc.y:15276 preproc.y:15294 +#: preproc.y:15446 preproc.y:15464 #, c-format msgid "invalid data type" msgstr "неверный тип данных" -#: preproc.y:15305 preproc.y:15322 +#: preproc.y:15475 preproc.y:15492 #, c-format msgid "incomplete statement" msgstr "неполный оператор" -#: preproc.y:15308 preproc.y:15325 +#: preproc.y:15478 preproc.y:15495 #, c-format msgid "unrecognized token \"%s\"" msgstr "нераспознанное ключевое слово \"%s\"" -#: preproc.y:15595 +#: preproc.y:15765 #, c-format msgid "only data types numeric and decimal have precision/scale argument" msgstr "" "точность/масштаб можно указать только для типов данных numeric и decimal" -#: preproc.y:15607 +#: preproc.y:15777 #, c-format msgid "interval specification not allowed here" msgstr "определение интервала здесь не допускается" -#: preproc.y:15767 preproc.y:15819 +#: preproc.y:15937 preproc.y:15989 #, c-format msgid "too many levels in nested structure/union definition" msgstr "слишком много уровней в определении вложенной структуры/объединения" -#: preproc.y:15970 +#: preproc.y:16112 #, c-format msgid "pointers to varchar are not implemented" msgstr "указатели на varchar не реализованы" -#: preproc.y:16157 preproc.y:16182 +#: preproc.y:16299 preproc.y:16324 #, c-format msgid "using unsupported DESCRIBE statement" msgstr "используется неподдерживаемый оператор DESCRIBE" -#: preproc.y:16429 +#: preproc.y:16571 #, c-format msgid "initializer not allowed in EXEC SQL VAR command" msgstr "команда EXEC SQL VAR не может включать инициализатор" -#: preproc.y:16746 +#: preproc.y:16888 #, c-format msgid "arrays of indicators are not allowed on input" msgstr "массивы индикаторов на входе недопустимы" -#: preproc.y:16967 +#: preproc.y:17075 #, c-format msgid "operator not allowed in variable definition" msgstr "недопустимый оператор в определении переменной" #. translator: %s is typically the translation of "syntax error" -#: preproc.y:17008 +#: preproc.y:17116 #, c-format msgid "%s at or near \"%s\"" msgstr "%s (примерное положение: \"%s\")" @@ -692,6 +705,13 @@ msgstr "для этого типа данных указатели на указ msgid "multidimensional arrays for structures are not supported" msgstr "многомерные массивы структур не поддерживаются" +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Об ошибках сообщайте по адресу .\n" + #~ msgid "declared name \"%s\" is already defined" #~ msgstr "объявленное имя \"%s\" уже определено" diff --git a/src/interfaces/ecpg/preproc/po/uk.po b/src/interfaces/ecpg/preproc/po/uk.po index a3597fb7776c7..b93eec4c669f8 100644 --- a/src/interfaces/ecpg/preproc/po/uk.po +++ b/src/interfaces/ecpg/preproc/po/uk.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 15:08+0000\n" -"PO-Revision-Date: 2019-12-20 20:24\n" -"Last-Translator: pasha_golub\n" +"POT-Creation-Date: 2020-09-21 21:09+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" "MIME-Version: 1.0\n" @@ -12,8 +12,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" "X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_12_STABLE/ecpg.pot\n" +"X-Crowdin-File: /DEV_13/ecpg.pot\n" +"X-Crowdin-File-ID: 480\n" #: descriptor.c:64 #, c-format @@ -149,161 +151,171 @@ msgstr "\n" #: ecpg.c:61 #, c-format msgid "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "\n" -"Про помилки повідомляйте на .\n" +"Повідомляти про помилки на <%s>.\n" -#: ecpg.c:139 +#: ecpg.c:62 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: ecpg.c:140 #, c-format msgid "%s: could not locate my own executable path\n" msgstr "%s: не вдалося знайти свій власний шлях для виконання\n" -#: ecpg.c:174 ecpg.c:331 ecpg.c:342 +#: ecpg.c:175 ecpg.c:332 ecpg.c:343 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: не вдалося відкрити файл \"%s\": %s\n" -#: ecpg.c:217 ecpg.c:230 ecpg.c:246 ecpg.c:272 +#: ecpg.c:218 ecpg.c:231 ecpg.c:247 ecpg.c:273 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n" -#: ecpg.c:241 +#: ecpg.c:242 #, c-format msgid "%s: parser debug support (-d) not available\n" msgstr "%s: налагоджувальні повідомлення під час аналізу (-d) не підтримуються\n" -#: ecpg.c:260 +#: ecpg.c:261 #, c-format msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" msgstr "%s, вбудований препроцесор PostgreSQL, версія %s\n" -#: ecpg.c:262 +#: ecpg.c:263 #, c-format msgid "EXEC SQL INCLUDE ... search starts here:\n" msgstr "EXEC SQL INCLUDE ... пошук починається тут:\n" -#: ecpg.c:265 +#: ecpg.c:266 #, c-format msgid "end of search list\n" msgstr "кінець списку пошуку\n" -#: ecpg.c:271 +#: ecpg.c:272 #, c-format msgid "%s: no input files specified\n" msgstr "%s: не вказано вхідні файли\n" -#: ecpg.c:465 +#: ecpg.c:466 #, c-format msgid "cursor \"%s\" has been declared but not opened" msgstr "курсор \"%s\" був оголошений, але не відкритий" -#: ecpg.c:478 preproc.y:128 +#: ecpg.c:479 preproc.y:128 #, c-format msgid "could not remove output file \"%s\"\n" msgstr "не вдалося видалити файл виводу \"%s\"\n" -#: pgc.l:472 +#: pgc.l:502 #, c-format msgid "unterminated /* comment" msgstr "незавершений коментар /*" -#: pgc.l:490 -#, c-format -msgid "invalid bit string literal" -msgstr "неприпустимий літерал бітового рядка" - -#: pgc.l:502 +#: pgc.l:519 #, c-format msgid "unterminated bit string literal" msgstr "незавершений бітовий рядок" -#: pgc.l:518 +#: pgc.l:527 #, c-format msgid "unterminated hexadecimal string literal" msgstr "незавершений шістнадцятковий рядок" -#: pgc.l:614 pgc.l:718 +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "неприпустимий літерал бітового рядка" + +#: pgc.l:623 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "необроблений попередній стан у xqs\n" + +#: pgc.l:652 pgc.l:754 #, c-format msgid "unterminated quoted string" msgstr "незавершений рядок в лапках" -#: pgc.l:665 +#: pgc.l:703 #, c-format msgid "unterminated dollar-quoted string" msgstr "незавершений рядок з $" -#: pgc.l:684 pgc.l:697 +#: pgc.l:721 pgc.l:734 #, c-format msgid "zero-length delimited identifier" msgstr "пустий ідентифікатор із роздільниками" -#: pgc.l:709 +#: pgc.l:745 #, c-format msgid "unterminated quoted identifier" msgstr "незавершений ідентифікатор в лапках" -#: pgc.l:1040 +#: pgc.l:1076 #, c-format msgid "nested /* ... */ comments" msgstr "вкладені /* ... */ коменарі" -#: pgc.l:1133 +#: pgc.l:1169 #, c-format msgid "missing identifier in EXEC SQL UNDEF command" msgstr "відсутній ідентифікатор у команді EXEC SQL UNDEF" -#: pgc.l:1179 pgc.l:1193 +#: pgc.l:1187 pgc.l:1200 pgc.l:1216 pgc.l:1229 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "забагато вкладених умов EXEC SQL IFDEF" + +#: pgc.l:1245 pgc.l:1256 pgc.l:1271 pgc.l:1293 #, c-format msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" msgstr "немає відповідного \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" -#: pgc.l:1182 pgc.l:1195 pgc.l:1373 +#: pgc.l:1247 pgc.l:1258 pgc.l:1439 #, c-format msgid "missing \"EXEC SQL ENDIF;\"" msgstr "відсутній \"EXEC SQL ENDIF;\"" -#: pgc.l:1211 pgc.l:1230 +#: pgc.l:1273 pgc.l:1295 #, c-format msgid "more than one EXEC SQL ELSE" msgstr "більше ніж один EXEC SQL ELSE" -#: pgc.l:1252 pgc.l:1266 +#: pgc.l:1318 pgc.l:1332 #, c-format msgid "unmatched EXEC SQL ENDIF" msgstr "невідповідний EXEC SQL ENDIF" -#: pgc.l:1286 -#, c-format -msgid "too many nested EXEC SQL IFDEF conditions" -msgstr "забагато вкладених умов EXEC SQL IFDEF" - -#: pgc.l:1321 +#: pgc.l:1387 #, c-format msgid "missing identifier in EXEC SQL IFDEF command" msgstr "відсутній ідентифікатор у команді EXEC SQL IFDEF" -#: pgc.l:1330 +#: pgc.l:1396 #, c-format msgid "missing identifier in EXEC SQL DEFINE command" msgstr "відсутній ідентифікатор у команді EXEC SQL DEFINE" -#: pgc.l:1363 +#: pgc.l:1429 #, c-format msgid "syntax error in EXEC SQL INCLUDE command" msgstr "синтаксична помилка у команді EXEC SQL INCLUDE" -#: pgc.l:1413 +#: pgc.l:1479 #, c-format -msgid "internal error: unreachable state; please report this to " -msgstr "внутрішня помилка: недосяжний стан; будь ласка, повідомте на " +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "внутрішня помилка: недосяжний стан; будь ласка, повідомте про це на <%s>" -#: pgc.l:1564 +#: pgc.l:1631 #, c-format msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" msgstr "Помилка: шлях включення \"%s/%s\" занадто довгий у рядку %d, пропускається\n" -#: pgc.l:1587 +#: pgc.l:1654 #, c-format msgid "could not open include file \"%s\" on line %d" msgstr "не вдалося відкрити файл включення \"%s\" у рядку %d" @@ -322,200 +334,200 @@ msgstr "ПОПЕРЕДЖЕННЯ: " msgid "ERROR: " msgstr "ПОМИЛКА: " -#: preproc.y:509 +#: preproc.y:512 #, c-format msgid "cursor \"%s\" does not exist" msgstr "курсор \"%s\" не існує" -#: preproc.y:538 +#: preproc.y:541 #, c-format msgid "initializer not allowed in type definition" msgstr "ініціалізація заборонена у визначенні типу" -#: preproc.y:540 +#: preproc.y:543 #, c-format msgid "type name \"string\" is reserved in Informix mode" msgstr "ім’я типу \"string\" зарезервовано у режимі Informix" -#: preproc.y:547 preproc.y:15792 +#: preproc.y:550 preproc.y:15960 #, c-format msgid "type \"%s\" is already defined" msgstr "тип \"%s\" вже визначений" -#: preproc.y:572 preproc.y:16463 preproc.y:16788 variable.c:621 +#: preproc.y:575 preproc.y:16603 preproc.y:16928 variable.c:621 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "багатовимірні масиви для простих типів даних не підтримуються" -#: preproc.y:1696 +#: preproc.y:1704 #, c-format msgid "AT option not allowed in CLOSE DATABASE statement" msgstr "Параметр AT не дозволений в інструкції CLOSE DATABASE" -#: preproc.y:1944 +#: preproc.y:1952 #, c-format msgid "AT option not allowed in CONNECT statement" msgstr "Параметр AT не дозволений в інструкції CONNECT" -#: preproc.y:1978 +#: preproc.y:1986 #, c-format msgid "AT option not allowed in DISCONNECT statement" msgstr "Параметр AT не дозволений в інструкції DISCONNECT" -#: preproc.y:2033 +#: preproc.y:2041 #, c-format msgid "AT option not allowed in SET CONNECTION statement" msgstr "Параметр AT не дозволений в інструкції SET CONNECTION" -#: preproc.y:2055 +#: preproc.y:2063 #, c-format msgid "AT option not allowed in TYPE statement" msgstr "Параметр AT не дозволений в інструкції TYPE" -#: preproc.y:2064 +#: preproc.y:2072 #, c-format msgid "AT option not allowed in VAR statement" msgstr "Параметр AT не дозволений в інструкції VAR" -#: preproc.y:2071 +#: preproc.y:2079 #, c-format msgid "AT option not allowed in WHENEVER statement" msgstr "Параметр AT не дозволений в інструкції WHENEVER" -#: preproc.y:2148 preproc.y:2320 preproc.y:2325 preproc.y:2448 preproc.y:4018 -#: preproc.y:5607 preproc.y:5907 preproc.y:7513 preproc.y:9025 preproc.y:9030 -#: preproc.y:11829 +#: preproc.y:2156 preproc.y:2328 preproc.y:2333 preproc.y:2456 preproc.y:4034 +#: preproc.y:4682 preproc.y:5624 preproc.y:5924 preproc.y:7542 preproc.y:9081 +#: preproc.y:9086 preproc.y:11921 #, c-format msgid "unsupported feature will be passed to server" msgstr "непідтримувана функція буде передана до сервера" -#: preproc.y:2706 +#: preproc.y:2714 #, c-format msgid "SHOW ALL is not implemented" msgstr "SHOW ALL не реалізовано" -#: preproc.y:3366 +#: preproc.y:3382 #, c-format msgid "COPY FROM STDIN is not implemented" msgstr "COPY FROM STDIN не реалізовано" -#: preproc.y:9976 preproc.y:15377 +#: preproc.y:10060 preproc.y:15545 #, c-format msgid "using variable \"%s\" in different declare statements is not supported" msgstr "використання змінної \"%s\" у різних інструкціях declare не підтримується" -#: preproc.y:9978 preproc.y:15379 +#: preproc.y:10062 preproc.y:15547 #, c-format msgid "cursor \"%s\" is already defined" msgstr "курсор \"%s\" вже визначено" -#: preproc.y:10418 +#: preproc.y:10502 #, c-format msgid "no longer supported LIMIT #,# syntax passed to server" msgstr "непідтримуваний синтаксис LIMIT #,# передано до сервера" -#: preproc.y:10743 preproc.y:10750 +#: preproc.y:10835 preproc.y:10842 #, c-format msgid "subquery in FROM must have an alias" msgstr "підзапит в FROM повинен мати псевдонім" -#: preproc.y:15100 preproc.y:15107 +#: preproc.y:15268 preproc.y:15275 #, c-format msgid "CREATE TABLE AS cannot specify INTO" msgstr "CREATE TABLE AS не може містити INTO" -#: preproc.y:15143 +#: preproc.y:15311 #, c-format msgid "expected \"@\", found \"%s\"" msgstr "очікувалося \"@\", знайдено \"%s\"" -#: preproc.y:15155 +#: preproc.y:15323 #, c-format msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" msgstr "підтримуються лише протоколи \"tcp\" та \"unix\" і тип бази даних \"postgresql\"" -#: preproc.y:15158 +#: preproc.y:15326 #, c-format msgid "expected \"://\", found \"%s\"" msgstr "очікувалося \"://\", знайдено \"%s\"" -#: preproc.y:15163 +#: preproc.y:15331 #, c-format msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" msgstr "Unix-сокети працюють лише з \"localhost\", але не з \"%s\"" -#: preproc.y:15189 +#: preproc.y:15357 #, c-format msgid "expected \"postgresql\", found \"%s\"" msgstr "очікувалось \"postgresql\", знайдено \"%s\"" -#: preproc.y:15192 +#: preproc.y:15360 #, c-format msgid "invalid connection type: %s" msgstr "неприпустимий тип підключення: %s" -#: preproc.y:15201 +#: preproc.y:15369 #, c-format msgid "expected \"@\" or \"://\", found \"%s\"" msgstr "очікувалось \"@\" або \"://\", знайдено \"%s\"" -#: preproc.y:15276 preproc.y:15294 +#: preproc.y:15444 preproc.y:15462 #, c-format msgid "invalid data type" msgstr "неприпустимий тип даних" -#: preproc.y:15305 preproc.y:15322 +#: preproc.y:15473 preproc.y:15490 #, c-format msgid "incomplete statement" msgstr "неповний оператор" -#: preproc.y:15308 preproc.y:15325 +#: preproc.y:15476 preproc.y:15493 #, c-format msgid "unrecognized token \"%s\"" msgstr "нерозпізнаний токен \"%s\"" -#: preproc.y:15595 +#: preproc.y:15763 #, c-format msgid "only data types numeric and decimal have precision/scale argument" msgstr "точність/масштаб можна вказати лише для типів даних numeric і decimal" -#: preproc.y:15607 +#: preproc.y:15775 #, c-format msgid "interval specification not allowed here" msgstr "специфікація інтервалу тут не допускається" -#: preproc.y:15767 preproc.y:15819 +#: preproc.y:15935 preproc.y:15987 #, c-format msgid "too many levels in nested structure/union definition" msgstr "занадто багато рівнів у визначенні вкладеної структури/об'єднання" -#: preproc.y:15970 +#: preproc.y:16110 #, c-format msgid "pointers to varchar are not implemented" msgstr "вказівників на varchar не реалізовано" -#: preproc.y:16157 preproc.y:16182 +#: preproc.y:16297 preproc.y:16322 #, c-format msgid "using unsupported DESCRIBE statement" msgstr "використовується непідтримуваний оператор DESCRIBE" -#: preproc.y:16429 +#: preproc.y:16569 #, c-format msgid "initializer not allowed in EXEC SQL VAR command" msgstr "команда EXEC SQL VAR не допускає ініціалізатор" -#: preproc.y:16746 +#: preproc.y:16886 #, c-format msgid "arrays of indicators are not allowed on input" msgstr "вхідні масиви індикаторів не допускаються" -#: preproc.y:16967 +#: preproc.y:17073 #, c-format msgid "operator not allowed in variable definition" msgstr "у визначенні змінної оператор не допускається" #. translator: %s is typically the translation of "syntax error" -#: preproc.y:17008 +#: preproc.y:17114 #, c-format msgid "%s at or near \"%s\"" msgstr "%s в або поблизу \"%s\"" diff --git a/src/interfaces/libpq/nls.mk b/src/interfaces/libpq/nls.mk index f64101b2a6a31..5195f9fc6375e 100644 --- a/src/interfaces/libpq/nls.mk +++ b/src/interfaces/libpq/nls.mk @@ -1,6 +1,6 @@ # src/interfaces/libpq/nls.mk CATALOG_NAME = libpq -AVAIL_LANGUAGES = cs de es fr he it ja ko pl pt_BR ru sv tr uk zh_CN zh_TW +AVAIL_LANGUAGES = cs de el es fr he it ja ko pl pt_BR ru sv tr uk zh_CN zh_TW GETTEXT_FILES = fe-auth.c fe-auth-scram.c fe-connect.c fe-exec.c fe-gssapi-common.c fe-lobj.c fe-misc.c fe-protocol3.c fe-secure.c fe-secure-common.c fe-secure-gssapi.c fe-secure-openssl.c win32.c GETTEXT_TRIGGERS = libpq_gettext pqInternalNotice:2 GETTEXT_FLAGS = libpq_gettext:1:pass-c-format pqInternalNotice:2:c-format diff --git a/src/interfaces/libpq/po/cs.po b/src/interfaces/libpq/po/cs.po index 304c10a43145c..ff590c78976a2 100644 --- a/src/interfaces/libpq/po/cs.po +++ b/src/interfaces/libpq/po/cs.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: libpq-cs (PostgreSQL 9.3)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:09+0000\n" -"PO-Revision-Date: 2019-09-27 16:46+0200\n" +"POT-Creation-Date: 2020-10-31 16:09+0000\n" +"PO-Revision-Date: 2020-10-31 21:45+0100\n" "Last-Translator: Tomas Vondra \n" "Language-Team: Czech \n" "Language: cs\n" @@ -18,238 +18,285 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" -#: fe-auth-scram.c:183 +#: fe-auth-scram.c:212 msgid "malformed SCRAM message (empty message)\n" msgstr "poškozená SCRAM zpráva (prázdná zpráva)\n" -#: fe-auth-scram.c:189 +#: fe-auth-scram.c:218 msgid "malformed SCRAM message (length mismatch)\n" msgstr "poškozená SCRAM zpráva (délka neodpovídá)\n" -#: fe-auth-scram.c:238 +#: fe-auth-scram.c:265 msgid "incorrect server signature\n" msgstr "chybná signatura serveru\n" -#: fe-auth-scram.c:247 +#: fe-auth-scram.c:274 msgid "invalid SCRAM exchange state\n" msgstr "chybný stav SCRAM výměny\n" -#: fe-auth-scram.c:270 +#: fe-auth-scram.c:296 #, c-format msgid "malformed SCRAM message (attribute \"%c\" expected)\n" msgstr "poškozená SCRAM zpráva (očekáván atribut \"%c\")\n" -#: fe-auth-scram.c:279 +#: fe-auth-scram.c:305 #, c-format msgid "malformed SCRAM message (expected character \"=\" for attribute \"%c\")\n" msgstr "poškozená SCRAM zpráva (očekáván znak \"=\" pro atribut \"%c\")\n" -#: fe-auth-scram.c:320 +#: fe-auth-scram.c:346 msgid "could not generate nonce\n" msgstr "nelze vygenerovat nonce\n" -#: fe-auth-scram.c:328 fe-auth-scram.c:395 fe-auth-scram.c:517 -#: fe-auth-scram.c:537 fe-auth-scram.c:563 fe-auth-scram.c:577 -#: fe-auth-scram.c:626 fe-auth-scram.c:660 fe-auth.c:290 fe-auth.c:360 -#: fe-auth.c:395 fe-auth.c:581 fe-auth.c:740 fe-auth.c:1052 fe-auth.c:1200 -#: fe-connect.c:858 fe-connect.c:1320 fe-connect.c:1496 fe-connect.c:2083 -#: fe-connect.c:2106 fe-connect.c:2829 fe-connect.c:4511 fe-connect.c:4763 -#: fe-connect.c:4882 fe-connect.c:5136 fe-connect.c:5216 fe-connect.c:5315 -#: fe-connect.c:5571 fe-connect.c:5600 fe-connect.c:5672 fe-connect.c:5696 -#: fe-connect.c:5714 fe-connect.c:5815 fe-connect.c:5824 fe-connect.c:6180 -#: fe-connect.c:6330 fe-exec.c:2748 fe-exec.c:3495 fe-exec.c:3660 -#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1213 fe-protocol3.c:999 -#: fe-protocol3.c:1703 fe-secure-common.c:110 fe-secure-openssl.c:438 -#: fe-secure-openssl.c:1025 +#: fe-auth-scram.c:356 fe-auth-scram.c:431 fe-auth-scram.c:579 +#: fe-auth-scram.c:600 fe-auth-scram.c:626 fe-auth-scram.c:641 +#: fe-auth-scram.c:691 fe-auth-scram.c:725 fe-auth.c:289 fe-auth.c:359 +#: fe-auth.c:394 fe-auth.c:611 fe-auth.c:770 fe-auth.c:1129 fe-auth.c:1277 +#: fe-connect.c:892 fe-connect.c:1419 fe-connect.c:1595 fe-connect.c:2200 +#: fe-connect.c:2223 fe-connect.c:2952 fe-connect.c:4601 fe-connect.c:4857 +#: fe-connect.c:4976 fe-connect.c:5229 fe-connect.c:5309 fe-connect.c:5408 +#: fe-connect.c:5664 fe-connect.c:5693 fe-connect.c:5765 fe-connect.c:5789 +#: fe-connect.c:5807 fe-connect.c:5908 fe-connect.c:5917 fe-connect.c:6273 +#: fe-connect.c:6423 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 +#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1207 fe-protocol3.c:995 +#: fe-protocol3.c:1699 fe-secure-common.c:110 fe-secure-gssapi.c:504 +#: fe-secure-openssl.c:440 fe-secure-openssl.c:1091 msgid "out of memory\n" msgstr "nedostatek paměti\n" -#: fe-auth-scram.c:555 +#: fe-auth-scram.c:364 +msgid "could not encode nonce\n" +msgstr "nelze zakódovat nonce\n" + +#: fe-auth-scram.c:563 +msgid "could not encode client proof\n" +msgstr "nelze zakódovat client proof\n" + +#: fe-auth-scram.c:618 msgid "invalid SCRAM response (nonce mismatch)\n" msgstr "chybná SCRAM odpověď (nonce neodpovídá)\n" -#: fe-auth-scram.c:586 +#: fe-auth-scram.c:651 msgid "malformed SCRAM message (invalid salt)\n" msgstr "poškozená SCRAM zpráva (chybná salt hodnota)\n" -#: fe-auth-scram.c:600 +#: fe-auth-scram.c:665 msgid "malformed SCRAM message (invalid iteration count)\n" msgstr "poškozená SCRAM zpráva (chybný počet iterací)\n" -#: fe-auth-scram.c:606 +#: fe-auth-scram.c:671 msgid "malformed SCRAM message (garbage at end of server-first-message)\n" msgstr "poškozená SCRAM zpráva (smetí na konci server-first-message)\n" -#: fe-auth-scram.c:637 +#: fe-auth-scram.c:702 #, c-format msgid "error received from server in SCRAM exchange: %s\n" msgstr "server zaslal chybu v rámci SCRAM výměny: %s\n" -#: fe-auth-scram.c:653 +#: fe-auth-scram.c:718 msgid "malformed SCRAM message (garbage at end of server-final-message)\n" msgstr "poškozená SCRAM zpráva (smetí na konci server-final-message)\n" -#: fe-auth-scram.c:671 +#: fe-auth-scram.c:737 msgid "malformed SCRAM message (invalid server signature)\n" msgstr "poškozená SCRAM zpráva (chybná signatura serveru)\n" -#: fe-auth.c:77 +#: fe-auth.c:76 #, c-format msgid "out of memory allocating GSSAPI buffer (%d)\n" msgstr "při alokaci GSSAPI bufferu došla paměť (%d)\n" -#: fe-auth.c:132 +#: fe-auth.c:131 msgid "GSSAPI continuation error" msgstr "Přetrvávající chyba GSSAPI" -#: fe-auth.c:159 fe-auth.c:389 fe-gssapi-common.c:98 fe-secure-common.c:98 +#: fe-auth.c:158 fe-auth.c:388 fe-gssapi-common.c:98 fe-secure-common.c:98 msgid "host name must be specified\n" msgstr "host musí být specifikován\n" -#: fe-auth.c:166 +#: fe-auth.c:165 msgid "duplicate GSS authentication request\n" msgstr "duplikátní GSS autentizační požadavek\n" -#: fe-auth.c:231 +#: fe-auth.c:230 #, c-format msgid "out of memory allocating SSPI buffer (%d)\n" msgstr "při alokaci SSPI bufferu došla paměť (%d)\n" -#: fe-auth.c:279 +#: fe-auth.c:278 msgid "SSPI continuation error" msgstr "Přetrvávající chyba SSPI" -#: fe-auth.c:350 +#: fe-auth.c:349 msgid "duplicate SSPI authentication request\n" msgstr "duplicitní SSPI autentizační požadavek\n" -#: fe-auth.c:375 +#: fe-auth.c:374 msgid "could not acquire SSPI credentials" msgstr "nelze získat SSPI credentials" #: fe-auth.c:429 +msgid "channel binding required, but SSL not in use\n" +msgstr "channel binding vyžadováno, ale SSL není zapnuto\n" + +#: fe-auth.c:436 msgid "duplicate SASL authentication request\n" msgstr "duplicitní SASL autentizační požadavek\n" -#: fe-auth.c:487 +#: fe-auth.c:492 +msgid "channel binding is required, but client does not support it\n" +msgstr "channel binding je vyžadován, ale klient ho nepodporuje\n" + +#: fe-auth.c:509 msgid "server offered SCRAM-SHA-256-PLUS authentication over a non-SSL connection\n" msgstr "server nabídl SCRAM-SHA-256-PLUS authentizaci přes ne-SSL spojení\n" -#: fe-auth.c:499 +#: fe-auth.c:521 msgid "none of the server's SASL authentication mechanisms are supported\n" msgstr "žádný ze SASL authentizačních mechanismů serveru není podporován\n" -#: fe-auth.c:605 +#: fe-auth.c:529 +msgid "channel binding is required, but server did not offer an authentication method that supports channel binding\n" +msgstr "channel binding je vyžadováno, ale server nenabídl methodu autentizace které channel binding podporuje\n" + +#: fe-auth.c:635 #, c-format msgid "out of memory allocating SASL buffer (%d)\n" msgstr "při alokaci SASL bufferu došla paměť (%d)\n" -#: fe-auth.c:630 +#: fe-auth.c:660 msgid "AuthenticationSASLFinal received from server, but SASL authentication was not completed\n" msgstr "AuthenticationSASLFinal obdržena od serveru, ale SASL authentizace nebyla dokončena\n" -#: fe-auth.c:707 +#: fe-auth.c:737 msgid "SCM_CRED authentication method not supported\n" msgstr "SCM_CRED metoda autentizace není podporována\n" -#: fe-auth.c:798 +#: fe-auth.c:836 +msgid "channel binding required, but server authenticated client without channel binding\n" +msgstr "channel binding vyžadováno, ale server authentizoval klienta bez channel binding\n" + +#: fe-auth.c:842 +msgid "channel binding required but not supported by server's authentication request\n" +msgstr "channel binding je vyžadován ale není podporován autentizační metodou serveru\n" + +#: fe-auth.c:875 msgid "Kerberos 4 authentication not supported\n" msgstr "Kerberos 4 autentizace není podporována\n" -#: fe-auth.c:803 +#: fe-auth.c:880 msgid "Kerberos 5 authentication not supported\n" msgstr "Kerberos 5 autentizace není podporována\n" -#: fe-auth.c:874 +#: fe-auth.c:951 msgid "GSSAPI authentication not supported\n" msgstr "GSSAPI autentizace není podporována\n" -#: fe-auth.c:906 +#: fe-auth.c:983 msgid "SSPI authentication not supported\n" msgstr "SSPI autentizace není podporována\n" -#: fe-auth.c:914 +#: fe-auth.c:991 msgid "Crypt authentication not supported\n" msgstr "Crypt autentizace není podporována\n" -#: fe-auth.c:980 +#: fe-auth.c:1057 #, c-format msgid "authentication method %u not supported\n" msgstr "autentizační metoda %u není podporována\n" -#: fe-auth.c:1027 +#: fe-auth.c:1104 #, c-format msgid "user name lookup failure: error code %lu\n" msgstr "vyhledání uživatele selhalo: chybový kód %lu\n" -#: fe-auth.c:1037 fe-connect.c:2716 +#: fe-auth.c:1114 fe-connect.c:2834 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "nelze vyhledat lokálního uživatele ID %d: %s\n" -#: fe-auth.c:1042 fe-connect.c:2721 +#: fe-auth.c:1119 fe-connect.c:2839 #, c-format msgid "local user with ID %d does not exist\n" msgstr "lokální uživatel s ID %d neexistuje\n" -#: fe-auth.c:1144 +#: fe-auth.c:1221 msgid "unexpected shape of result set returned for SHOW\n" msgstr "neočekávaná podoba výsledku pro SHOW\n" -#: fe-auth.c:1153 +#: fe-auth.c:1230 msgid "password_encryption value too long\n" msgstr "hodnota password_encryption je příliš dlouhá\n" -#: fe-auth.c:1193 +#: fe-auth.c:1270 #, c-format msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "neznámý algoritmus pro šifrování hesla \"%s\"\n" -#: fe-connect.c:1041 +#: fe-connect.c:1075 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "nelze napárovat %d jmen hostů na %d hostaddr hodnot\n" -#: fe-connect.c:1117 +#: fe-connect.c:1156 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "nelze napárovat %d čísel portů na %d hostů\n" -#: fe-connect.c:1213 +#: fe-connect.c:1249 +#, c-format +#| msgid "invalid channel binding type\n" +msgid "invalid channel_binding value: \"%s\"\n" +msgstr "neplatná hodnota channel_binding: \"%s\"\n" + +#: fe-connect.c:1275 #, c-format msgid "invalid sslmode value: \"%s\"\n" msgstr "neplatná hodnota sslmode: \"%s\"\n" -#: fe-connect.c:1234 +#: fe-connect.c:1296 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "hodnota sslmode \"%s\" je neplatná pokud není zakompilována podpora SSL\n" -#: fe-connect.c:1258 +#: fe-connect.c:1317 +#, c-format +msgid "invalid ssl_min_protocol_version value: \"%s\"\n" +msgstr "neplatná hodnodta ssl_min_protocol_version: \"%s\"\n" + +#: fe-connect.c:1325 #, c-format #| msgid "invalid sslmode value: \"%s\"\n" +msgid "invalid ssl_max_protocol_version value: \"%s\"\n" +msgstr "neplatná hodnota ssl_max_protocol_version: \"%s\"\n" + +#: fe-connect.c:1342 +msgid "invalid SSL protocol version range\n" +msgstr "neplatný rozsah verzí SSL protokolu\n" + +#: fe-connect.c:1357 +#, c-format msgid "invalid gssencmode value: \"%s\"\n" msgstr "invalid gssencmode gssencmode: \"%s\"\n" -#: fe-connect.c:1267 +#: fe-connect.c:1366 #, c-format -#| msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" msgstr "gssencmode hodnota \"%s\" je neplatná při nezakompilované GSSAPI podpoře\n" -#: fe-connect.c:1302 +#: fe-connect.c:1401 #, c-format msgid "invalid target_session_attrs value: \"%s\"\n" msgstr "neplatná hodnota target_session_attrs: \"%s\"\n" -#: fe-connect.c:1520 +#: fe-connect.c:1619 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "nelze nastavit \"no delay\" mód TCP soketu: %s\n" -#: fe-connect.c:1581 +#: fe-connect.c:1680 #, c-format msgid "" "could not connect to server: %s\n" @@ -260,7 +307,7 @@ msgstr "" "\tJe spuštěn server lokálně a akceptuje\n" "\tspojení pomocí Unix soketu \"%s\"?\n" -#: fe-connect.c:1618 +#: fe-connect.c:1717 #, c-format msgid "" "could not connect to server: %s\n" @@ -271,7 +318,7 @@ msgstr "" "\tJe server na \"%s\" (%s) spuštěn a akceptuje\n" "\tTCP/IP spojení na portu %s?\n" -#: fe-connect.c:1626 +#: fe-connect.c:1725 #, c-format msgid "" "could not connect to server: %s\n" @@ -282,435 +329,433 @@ msgstr "" "\tJe server na \"%s\" spuštěn a akceptuje\n" "\tTCP/IP spojení na portu %s?\n" -#: fe-connect.c:1677 +#: fe-connect.c:1795 #, c-format -#| msgid "invalid connection option \"%s\"\n" msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "chybná integer hodnota \"%s\" pro volbu spojení \"%s\"\n" -#: fe-connect.c:1707 fe-connect.c:1741 fe-connect.c:1776 fe-connect.c:1863 -#: fe-connect.c:2506 +#: fe-connect.c:1825 fe-connect.c:1859 fe-connect.c:1894 fe-connect.c:1981 +#: fe-connect.c:2623 #, c-format msgid "setsockopt(%s) failed: %s\n" msgstr "setsockopt(%s) selhalo: %s\n" -#: fe-connect.c:1829 +#: fe-connect.c:1947 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) selhalo: %ui\n" -#: fe-connect.c:2197 +#: fe-connect.c:2313 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "neplatný stav spojení, pravděpodobně způsobený poškozením paměti\n" -#: fe-connect.c:2265 +#: fe-connect.c:2379 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "neplatné číslo portu: \"%s\"\n" -#: fe-connect.c:2281 +#: fe-connect.c:2395 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "nemohu přeložit jméno hostitele \"%s\" na adresu: %s\n" -#: fe-connect.c:2294 +#: fe-connect.c:2408 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "nelze naparsovat síťovou adresu \"%s\": %s\n" -#: fe-connect.c:2307 +#: fe-connect.c:2421 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Cesta k unixovému \"%s\" je příliš dlouhá (maximum %d bytů)\n" -#: fe-connect.c:2322 +#: fe-connect.c:2436 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "nemohu přeložit cestu Unix-domain soketu \"%s\" na adresu: %s\n" -#: fe-connect.c:2443 +#: fe-connect.c:2560 #, c-format msgid "could not create socket: %s\n" msgstr "nelze vytvořit soket: %s\n" -#: fe-connect.c:2465 +#: fe-connect.c:2582 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "soket nelze nastavit do neblokujícího módu: %s\n" -#: fe-connect.c:2475 +#: fe-connect.c:2592 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "nelze nastavit soket do close-on-exec módu: %s\n" -#: fe-connect.c:2493 +#: fe-connect.c:2610 msgid "keepalives parameter must be an integer\n" msgstr "parametr keepalives musí být celé číslo\n" -#: fe-connect.c:2633 +#: fe-connect.c:2750 #, c-format msgid "could not get socket error status: %s\n" msgstr "nelze obdržet chybový status soketu: %s\n" -#: fe-connect.c:2661 +#: fe-connect.c:2778 #, c-format msgid "could not get client address from socket: %s\n" msgstr "nelze získat adresu klienta ze soketu: %s\n" -#: fe-connect.c:2703 +#: fe-connect.c:2820 msgid "requirepeer parameter is not supported on this platform\n" msgstr "parametr requirepeer není na této platformě podporován\n" -#: fe-connect.c:2706 +#: fe-connect.c:2823 #, c-format msgid "could not get peer credentials: %s\n" msgstr "nelze získat informace (credentials) protistrany: %s\n" -#: fe-connect.c:2729 +#: fe-connect.c:2847 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer obsahuje \"%s\", ale skutečné jméno peera je \"%s\"\n" -#: fe-connect.c:2764 +#: fe-connect.c:2887 #, c-format -#| msgid "could not send SSL negotiation packet: %s\n" msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "nelze zaslat GSSAPI negociační packet: %s\n" -#: fe-connect.c:2776 +#: fe-connect.c:2899 msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" msgstr "GSSAPI šifrování je vyžadováno ale bylo nemožné (možná kvůli chybějící credential cache, podpoře na serveru, nebo používání lokálního socketu)\n" -#: fe-connect.c:2803 +#: fe-connect.c:2926 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "nelze poslat SSL \"negotiation paket\": %s\n" -#: fe-connect.c:2842 +#: fe-connect.c:2965 #, c-format msgid "could not send startup packet: %s\n" msgstr "nelze poslat počáteční paket: %s\n" -#: fe-connect.c:2912 +#: fe-connect.c:3035 msgid "server does not support SSL, but SSL was required\n" msgstr "server nepodporuje SSL, leč SSL je vyžadováno\n" -#: fe-connect.c:2938 +#: fe-connect.c:3061 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "přijata neplatná odpověď na SSL negotiation: %c\n" -#: fe-connect.c:3028 +#: fe-connect.c:3151 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "server nepodporuje GSSAPI šifrování, to ale bylo vyžadováno\n" -#: fe-connect.c:3039 +#: fe-connect.c:3162 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "přijata neplatná odpověď na GSSAPI negotiation: %c\n" -#: fe-connect.c:3107 fe-connect.c:3140 +#: fe-connect.c:3229 fe-connect.c:3260 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "očekáván byl autentizační dotaz ze serveru, ale přijat byl %c\n" -#: fe-connect.c:3387 +#: fe-connect.c:3502 msgid "unexpected message from server during startup\n" msgstr "neočekávaná zpráva ze serveru během startu\n" -#: fe-connect.c:3614 +#: fe-connect.c:3707 #, c-format msgid "could not make a writable connection to server \"%s:%s\"\n" msgstr "nelze otevřít zapisovatelné spojení na server \"%s:%s\"\n" -#: fe-connect.c:3660 +#: fe-connect.c:3753 #, c-format msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" msgstr "test \"SHOW transaction_read_only\" selhal na serveru \"%s:%s\"\n" -#: fe-connect.c:3675 +#: fe-connect.c:3768 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "neplatný stav spojení %d, pravděpodobně způsobený poškozením paměti\n" -#: fe-connect.c:4117 fe-connect.c:4177 +#: fe-connect.c:4207 fe-connect.c:4267 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc \"%s\" selhalo během události PGEVT_CONNRESET\n" -#: fe-connect.c:4524 +#: fe-connect.c:4614 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "naplatné LDAP URL \"%s\": schéma musí být ldap://\n" -#: fe-connect.c:4539 +#: fe-connect.c:4629 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "neplatné LDAP URL \"%s\": chybí rozlišující jméno\n" -#: fe-connect.c:4550 fe-connect.c:4603 +#: fe-connect.c:4641 fe-connect.c:4696 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "neplatné LDAP URL \"%s\": musí mít právě jeden atribut\n" -#: fe-connect.c:4560 fe-connect.c:4617 +#: fe-connect.c:4652 fe-connect.c:4711 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "naplatné LDAP URL \"%s\": musí mít vyhledávací rozsah (base/one/sub)\n" -#: fe-connect.c:4571 +#: fe-connect.c:4663 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "naplatné LDAP URL \"%s\": není filter\n" -#: fe-connect.c:4592 +#: fe-connect.c:4684 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "naplatné LDAP URL \"%s\": neplatný číslo portu\n" -#: fe-connect.c:4626 +#: fe-connect.c:4720 msgid "could not create LDAP structure\n" msgstr "nelze vytvořit LDAP strukturu\n" -#: fe-connect.c:4702 +#: fe-connect.c:4796 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "vyhledávání na LDAP serveru selhalo: %s\n" -#: fe-connect.c:4713 +#: fe-connect.c:4807 msgid "more than one entry found on LDAP lookup\n" msgstr "nalezen více jak jeden záznam při LDAP vyhledávání\n" -#: fe-connect.c:4714 fe-connect.c:4726 +#: fe-connect.c:4808 fe-connect.c:4820 msgid "no entry found on LDAP lookup\n" msgstr "nebyl nalezen žádný záznam při LDAP vyhledávání\n" -#: fe-connect.c:4737 fe-connect.c:4750 +#: fe-connect.c:4831 fe-connect.c:4844 msgid "attribute has no values on LDAP lookup\n" msgstr "atribut nemá žádnou hodnotu při LDAP vyhledávání\n" -#: fe-connect.c:4802 fe-connect.c:4821 fe-connect.c:5354 +#: fe-connect.c:4896 fe-connect.c:4915 fe-connect.c:5447 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "chybné \"=\" po \"%s\" v informačním řetězci spojení\n" -#: fe-connect.c:4894 fe-connect.c:5539 fe-connect.c:6313 +#: fe-connect.c:4988 fe-connect.c:5632 fe-connect.c:6406 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "neplatný parametr spojení \"%s\"\n" -#: fe-connect.c:4910 fe-connect.c:5403 +#: fe-connect.c:5004 fe-connect.c:5496 msgid "unterminated quoted string in connection info string\n" msgstr "neukončený řetězec v uvozovkách v informačním řetězci spojení\n" -#: fe-connect.c:4993 +#: fe-connect.c:5087 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "definice služby \"%s\" nenalezena\n" -#: fe-connect.c:5016 +#: fe-connect.c:5110 #, c-format msgid "service file \"%s\" not found\n" msgstr "soubor se seznamem služeb \"%s\" nebyl nalezen\n" -#: fe-connect.c:5031 +#: fe-connect.c:5125 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "řádek %d v souboru se seznamem služeb \"%s\" je příliš dlouhý\n" -#: fe-connect.c:5104 fe-connect.c:5148 +#: fe-connect.c:5197 fe-connect.c:5241 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "syntaktická chyba v souboru se seznamu služeb \"%s\", řádek %d\n" -#: fe-connect.c:5115 +#: fe-connect.c:5208 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "vnořené specifikace služeb nejsou podporovány v service souboru \"%s\", řádek %d\n" -#: fe-connect.c:5835 +#: fe-connect.c:5928 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "neplatné URI propagované do interní procedury parseru: \"%s\"\n" -#: fe-connect.c:5912 +#: fe-connect.c:6005 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "při hledání odpovídajícího znaku \"]\" v IPv6 adrese hostitele byl dosažen konec řetězce URI: \"%s\"\n" -#: fe-connect.c:5919 +#: fe-connect.c:6012 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "IPv6 adresa hostitele v URI nesmí být prázdná: \"%s\"\n" -#: fe-connect.c:5934 +#: fe-connect.c:6027 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "neočekávaný znak \"%c\" na pozici %d v URI (očekáváno \":\" nebo \"/\"): \"%s\"\n" -#: fe-connect.c:6063 +#: fe-connect.c:6156 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "přebytečný oddělovač klíče/hodnoty \"=\" v URI parametru dotazu: \"%s\"\n" -#: fe-connect.c:6083 +#: fe-connect.c:6176 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "chybějící oddělovač klíče/hodnoty \"=\" v URI parametru dotazu: \"%s\"\n" -#: fe-connect.c:6134 +#: fe-connect.c:6227 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "neplatný parametr v URI dotazu: \"%s\"\n" -#: fe-connect.c:6208 +#: fe-connect.c:6301 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "neplatný procenty-kódovaný token \"%s\"\n" -#: fe-connect.c:6218 +#: fe-connect.c:6311 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "zakázaná hodnota %%00 v procenty-k´odované hodnotě: \"%s\"\n" -#: fe-connect.c:6581 +#: fe-connect.c:6674 msgid "connection pointer is NULL\n" msgstr "pointer spojení je NULL\n" -#: fe-connect.c:6879 +#: fe-connect.c:6970 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "VAROVÁNÍ: soubor s hesly \"%s\" není prostý (plain) soubor\n" -#: fe-connect.c:6888 +#: fe-connect.c:6979 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "UPOZORNĚNÍ: Soubor s hesly \"%s\" má přístupová práva pro čtení pro skupinu nebo všechny uživatele; práva by měla být u=rw (0600)\n" -#: fe-connect.c:6982 +#: fe-connect.c:7087 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "heslo načteno ze souboru \"%s\"\n" -#: fe-exec.c:445 fe-exec.c:2822 +#: fe-exec.c:444 fe-exec.c:2821 #, c-format msgid "row number %d is out of range 0..%d" msgstr "číslo řádky %d je mimo rozsah 0..%d" -#: fe-exec.c:506 fe-protocol2.c:502 fe-protocol2.c:537 fe-protocol2.c:1056 -#: fe-protocol3.c:208 fe-protocol3.c:235 fe-protocol3.c:252 fe-protocol3.c:332 -#: fe-protocol3.c:727 fe-protocol3.c:958 +#: fe-exec.c:505 fe-protocol2.c:497 fe-protocol2.c:532 fe-protocol2.c:1050 +#: fe-protocol3.c:206 fe-protocol3.c:233 fe-protocol3.c:250 fe-protocol3.c:330 +#: fe-protocol3.c:723 fe-protocol3.c:954 msgid "out of memory" msgstr "nedostatek paměti" -#: fe-exec.c:507 fe-protocol2.c:1402 fe-protocol3.c:1911 +#: fe-exec.c:506 fe-protocol2.c:1396 fe-protocol3.c:1907 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:816 +#: fe-exec.c:815 msgid "write to server failed\n" msgstr "zápis na server selhal\n" -#: fe-exec.c:897 +#: fe-exec.c:896 msgid "NOTICE" msgstr "POZNÁMKA" -#: fe-exec.c:955 +#: fe-exec.c:954 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresult nemůže podporovat více než INT_MAX řádek" -#: fe-exec.c:967 +#: fe-exec.c:966 msgid "size_t overflow" msgstr "size_t přetečení" -#: fe-exec.c:1244 fe-exec.c:1302 fe-exec.c:1348 +#: fe-exec.c:1243 fe-exec.c:1301 fe-exec.c:1347 msgid "command string is a null pointer\n" msgstr "řetězec příkazu je prázdný ukazatel\n" -#: fe-exec.c:1308 fe-exec.c:1354 fe-exec.c:1449 +#: fe-exec.c:1307 fe-exec.c:1353 fe-exec.c:1448 msgid "number of parameters must be between 0 and 65535\n" msgstr "počet parametrů musí být mezi 0 a 65535\n" -#: fe-exec.c:1342 fe-exec.c:1443 +#: fe-exec.c:1341 fe-exec.c:1442 msgid "statement name is a null pointer\n" msgstr "název výrazu je prázdný ukazatel\n" -#: fe-exec.c:1362 fe-exec.c:1525 fe-exec.c:2234 fe-exec.c:2436 +#: fe-exec.c:1361 fe-exec.c:1524 fe-exec.c:2233 fe-exec.c:2435 msgid "function requires at least protocol version 3.0\n" msgstr "funkce vyžaduje protokol alespoň 3.0 a vyšší\n" -#: fe-exec.c:1480 +#: fe-exec.c:1479 msgid "no connection to the server\n" msgstr "není spojení se serverem\n" -#: fe-exec.c:1487 +#: fe-exec.c:1486 msgid "another command is already in progress\n" msgstr "zpracovává se již jiný příkaz\n" -#: fe-exec.c:1601 +#: fe-exec.c:1600 msgid "length must be given for binary parameter\n" msgstr "délka musí být specifikována pro binarní parametr\n" -#: fe-exec.c:1864 +#: fe-exec.c:1863 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "neočekávaný asyncStatus: %d\n" -#: fe-exec.c:1884 +#: fe-exec.c:1883 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEventProc \"%s\" selhala během události PGEVT_RESULTCREATE\n" -#: fe-exec.c:2044 +#: fe-exec.c:2043 msgid "COPY terminated by new PQexec" msgstr "COPY bylo ukončeno novým PQexec" -#: fe-exec.c:2052 +#: fe-exec.c:2051 msgid "COPY IN state must be terminated first\n" msgstr "COPY IN status musí být nejdříve ukončen\n" -#: fe-exec.c:2072 +#: fe-exec.c:2071 msgid "COPY OUT state must be terminated first\n" msgstr "COPY OUT status musí být nejdříve ukončen\n" -#: fe-exec.c:2080 +#: fe-exec.c:2079 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec není povoleno během COPY BOTH\n" -#: fe-exec.c:2326 fe-exec.c:2393 fe-exec.c:2483 fe-protocol2.c:1359 -#: fe-protocol3.c:1842 +#: fe-exec.c:2325 fe-exec.c:2392 fe-exec.c:2482 fe-protocol2.c:1353 +#: fe-protocol3.c:1838 msgid "no COPY in progress\n" msgstr "COPY se neprovádí\n" -#: fe-exec.c:2673 +#: fe-exec.c:2672 msgid "connection in wrong state\n" msgstr "spojení je ve špatném stavu\n" -#: fe-exec.c:2704 +#: fe-exec.c:2703 msgid "invalid ExecStatusType code" msgstr "neplatný ExecStatusType kód" -#: fe-exec.c:2731 +#: fe-exec.c:2730 msgid "PGresult is not an error result\n" msgstr "PGresult není chybový výsledek\n" -#: fe-exec.c:2806 fe-exec.c:2829 +#: fe-exec.c:2805 fe-exec.c:2828 #, c-format msgid "column number %d is out of range 0..%d" msgstr "číslo sloupce %d je mimo rozsah 0..%d" -#: fe-exec.c:2844 +#: fe-exec.c:2843 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "číslo parametru %d je mimo rozsah 0..%d" -#: fe-exec.c:3154 +#: fe-exec.c:3153 #, c-format msgid "could not interpret result from server: %s" msgstr "nelze interpretovat výsledek ze serveru: %s" -#: fe-exec.c:3393 fe-exec.c:3477 +#: fe-exec.c:3392 fe-exec.c:3476 msgid "incomplete multibyte character\n" msgstr "nekompletní multibyte znak\n" @@ -801,22 +846,22 @@ msgstr "nelze určit OID funkce loread\n" msgid "cannot determine OID of function lowrite\n" msgstr "nelze určit OID funkce lowrite\n" -#: fe-misc.c:290 +#: fe-misc.c:289 #, c-format msgid "integer of size %lu not supported by pqGetInt" msgstr "pqGetInt nepodporuje integer velikosti %lu" -#: fe-misc.c:326 +#: fe-misc.c:325 #, c-format msgid "integer of size %lu not supported by pqPutInt" msgstr "pqPutInt nepodporuje integer velikosti %lu" -#: fe-misc.c:637 fe-misc.c:859 +#: fe-misc.c:636 fe-misc.c:869 msgid "connection not open\n" msgstr "spojení není otevřeno\n" -#: fe-misc.c:807 fe-secure-openssl.c:206 fe-secure-openssl.c:314 -#: fe-secure.c:268 fe-secure.c:385 +#: fe-misc.c:805 fe-secure-openssl.c:209 fe-secure-openssl.c:316 +#: fe-secure.c:267 fe-secure.c:383 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -826,181 +871,181 @@ msgstr "" "\tToto pravděpodobně znamená, že byl ukončen nestandardně\n" "\tpřed nebo během vykonávání požadavku.\n" -#: fe-misc.c:1046 +#: fe-misc.c:1063 msgid "timeout expired\n" msgstr "časový limit (timeout) uběhl\n" -#: fe-misc.c:1091 +#: fe-misc.c:1108 msgid "invalid socket\n" msgstr "chybný socket\n" -#: fe-misc.c:1114 +#: fe-misc.c:1131 #, c-format msgid "select() failed: %s\n" msgstr "select() selhal: %s\n" -#: fe-protocol2.c:90 +#: fe-protocol2.c:87 #, c-format msgid "invalid setenv state %c, probably indicative of memory corruption\n" msgstr "neplatný status spojení %c, pravděpodobně způsobený poškozením paměti\n" -#: fe-protocol2.c:389 +#: fe-protocol2.c:384 #, c-format msgid "invalid state %c, probably indicative of memory corruption\n" msgstr "neplatný status %c, pravděpodobně způsobený poškozením paměti\n" -#: fe-protocol2.c:478 fe-protocol3.c:185 +#: fe-protocol2.c:473 fe-protocol3.c:183 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "zpráva typu 0x%02x přišla ze serveru během nečinnosti" -#: fe-protocol2.c:528 +#: fe-protocol2.c:523 #, c-format msgid "unexpected character %c following empty query response (\"I\" message)" msgstr "neočekávaný znak %c následuje prázdnou odezvu dotazu(\"I\" zpráva)" -#: fe-protocol2.c:594 +#: fe-protocol2.c:589 #, c-format msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" msgstr "server odeslal data (\"D\" zpráva) bez předcházejícího popisu řádky (\"T\" zpráva)" -#: fe-protocol2.c:612 +#: fe-protocol2.c:607 #, c-format msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" msgstr "server odeslal binární data (\"B\" zpráva) bez předchozího popisu řádky (\"T\" zpráva)" -#: fe-protocol2.c:632 fe-protocol3.c:411 +#: fe-protocol2.c:626 fe-protocol3.c:408 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "neočekávaná odpověď serveru; předchozí znak byl \"%c\"\n" -#: fe-protocol2.c:761 fe-protocol2.c:936 fe-protocol3.c:626 fe-protocol3.c:853 +#: fe-protocol2.c:755 fe-protocol2.c:930 fe-protocol3.c:622 fe-protocol3.c:849 msgid "out of memory for query result" msgstr "nedostatek paměti pro výsledek dotazu" -#: fe-protocol2.c:1414 +#: fe-protocol2.c:1408 #, c-format msgid "lost synchronization with server, resetting connection" msgstr "ztráta synchronizace se serverem, resetuji spojení" -#: fe-protocol2.c:1536 fe-protocol2.c:1568 fe-protocol3.c:2099 +#: fe-protocol2.c:1530 fe-protocol2.c:1562 fe-protocol3.c:2095 #, c-format msgid "protocol error: id=0x%x\n" msgstr "chyba protokolu: id=0x%x\n" -#: fe-protocol3.c:367 +#: fe-protocol3.c:365 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "server odeslal data (\"D\" zpráva) bez předchozího popisu řádky (\"T\" zpráva)\n" -#: fe-protocol3.c:432 +#: fe-protocol3.c:429 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "obsah zprávy nesouhlasí s délkou v typu zprávy \"%c\"\n" -#: fe-protocol3.c:453 +#: fe-protocol3.c:449 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "ztracena synchronizace se serverem: obdržena zpráva typu \"%c\", délky %d\n" -#: fe-protocol3.c:504 fe-protocol3.c:544 +#: fe-protocol3.c:500 fe-protocol3.c:540 msgid "insufficient data in \"T\" message" msgstr "nedostatek dat v \"T\" zprávě" -#: fe-protocol3.c:577 +#: fe-protocol3.c:573 msgid "extraneous data in \"T\" message" msgstr "přebytečná data v \"T\" zprávě" -#: fe-protocol3.c:690 +#: fe-protocol3.c:686 msgid "extraneous data in \"t\" message" msgstr "přebytečná data v \"t\" zprávě" -#: fe-protocol3.c:761 fe-protocol3.c:793 fe-protocol3.c:811 +#: fe-protocol3.c:757 fe-protocol3.c:789 fe-protocol3.c:807 msgid "insufficient data in \"D\" message" msgstr "nedostatek dat v \"D\" zprávě" -#: fe-protocol3.c:767 +#: fe-protocol3.c:763 msgid "unexpected field count in \"D\" message" msgstr "neočekávaný počet položek v \"D\" zprávě" -#: fe-protocol3.c:820 +#: fe-protocol3.c:816 msgid "extraneous data in \"D\" message" msgstr "přebytečná data v \"D\" zprávě" -#: fe-protocol3.c:1012 +#: fe-protocol3.c:1008 msgid "no error message available\n" msgstr "chybová zpráva není k dispozici\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1060 fe-protocol3.c:1079 +#: fe-protocol3.c:1056 fe-protocol3.c:1075 #, c-format msgid " at character %s" msgstr " na znaku %s" -#: fe-protocol3.c:1092 +#: fe-protocol3.c:1088 #, c-format msgid "DETAIL: %s\n" msgstr "DETAIL: %s\n" -#: fe-protocol3.c:1095 +#: fe-protocol3.c:1091 #, c-format msgid "HINT: %s\n" msgstr "DOPORUČENÍ: %s\n" -#: fe-protocol3.c:1098 +#: fe-protocol3.c:1094 #, c-format msgid "QUERY: %s\n" msgstr "DOTAZ: %s\n" -#: fe-protocol3.c:1105 +#: fe-protocol3.c:1101 #, c-format msgid "CONTEXT: %s\n" msgstr "KONTEXT: %s\n" -#: fe-protocol3.c:1114 +#: fe-protocol3.c:1110 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "NÁZEV SCHÉMATU: %s\n" -#: fe-protocol3.c:1118 +#: fe-protocol3.c:1114 #, c-format msgid "TABLE NAME: %s\n" msgstr "NÁZEV TABULKY: %s\n" -#: fe-protocol3.c:1122 +#: fe-protocol3.c:1118 #, c-format msgid "COLUMN NAME: %s\n" msgstr "NÁZEV SLOUPCE: %s\n" -#: fe-protocol3.c:1126 +#: fe-protocol3.c:1122 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "NÁZEV DATOVÉHO TYPU: %s\n" -#: fe-protocol3.c:1130 +#: fe-protocol3.c:1126 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "NÁZEV OMEZENÍ: %s\n" -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1138 msgid "LOCATION: " msgstr "UMÍSTĚNÍ: " -#: fe-protocol3.c:1144 +#: fe-protocol3.c:1140 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1146 +#: fe-protocol3.c:1142 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1341 +#: fe-protocol3.c:1337 #, c-format msgid "LINE %d: " msgstr "ŘÁDKA %d: " -#: fe-protocol3.c:1736 +#: fe-protocol3.c:1732 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: not doing text COPY OUT\n" @@ -1021,85 +1066,81 @@ msgstr "serverový certifikát pro \"%s\" nesouhlasí s jménem serveru (host na msgid "could not get server's host name from server certificate\n" msgstr "ze serverového certifikátu nelze získat host name serveru\n" -#: fe-secure-gssapi.c:160 -#| msgid "GSSAPI name import error" +#: fe-secure-gssapi.c:201 msgid "GSSAPI wrap error" msgstr "GSSAPI wrap error" -#: fe-secure-gssapi.c:166 +#: fe-secure-gssapi.c:209 msgid "outgoing GSSAPI message would not use confidentiality\n" msgstr "odchozí GSSAPI zpráva by nepoužívala důvěrnost (confidentiality)\n" -#: fe-secure-gssapi.c:173 +#: fe-secure-gssapi.c:217 #, c-format msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" msgstr "klient se pokusil zaslat příliš velký GSSAPI packet (%zu > %zu)\n" -#: fe-secure-gssapi.c:291 fe-secure-gssapi.c:497 +#: fe-secure-gssapi.c:354 fe-secure-gssapi.c:596 #, c-format msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" msgstr "příliš velký GSSAPI packet zaslán serverem (%zu > %zu)\n" -#: fe-secure-gssapi.c:327 +#: fe-secure-gssapi.c:393 msgid "GSSAPI unwrap error" msgstr "GSSAPI unwrap error" -#: fe-secure-gssapi.c:335 +#: fe-secure-gssapi.c:403 msgid "incoming GSSAPI message did not use confidentiality\n" msgstr "příchozí GSSAPI zpráva nepoužívala důvěrnost (confidentiality)\n" -#: fe-secure-gssapi.c:543 -#| msgid "could not create SSL context: %s\n" +#: fe-secure-gssapi.c:642 msgid "could not initiate GSSAPI security context" msgstr "nelze inicializovat GSSAPI bezpečnostní kontext" -#: fe-secure-gssapi.c:568 -#| msgid "GSSAPI name import error" +#: fe-secure-gssapi.c:673 msgid "GSSAPI size check error" msgstr "GSSAPI size check error" -#: fe-secure-gssapi.c:577 -#| msgid "GSSAPI continuation error" +#: fe-secure-gssapi.c:684 msgid "GSSAPI context establishment error" msgstr "GSSAPI context establishment error" -#: fe-secure-openssl.c:211 fe-secure-openssl.c:319 fe-secure-openssl.c:1219 +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1291 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "SSL SYSCALL chyba: %s\n" -#: fe-secure-openssl.c:218 fe-secure-openssl.c:326 fe-secure-openssl.c:1223 +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1295 msgid "SSL SYSCALL error: EOF detected\n" msgstr "SSL SYSCALL chyba: detekován EOF\n" -#: fe-secure-openssl.c:229 fe-secure-openssl.c:337 fe-secure-openssl.c:1232 +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1304 #, c-format msgid "SSL error: %s\n" msgstr "SSL chyba: %s\n" -#: fe-secure-openssl.c:244 fe-secure-openssl.c:352 +#: fe-secure-openssl.c:247 fe-secure-openssl.c:354 msgid "SSL connection has been closed unexpectedly\n" msgstr "SSL spojení bylo neočekávaně ukončeno\n" -#: fe-secure-openssl.c:250 fe-secure-openssl.c:358 fe-secure-openssl.c:1241 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1354 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "neznámý chybový kód SSL: %d\n" -#: fe-secure-openssl.c:398 +#: fe-secure-openssl.c:400 msgid "could not determine server certificate signature algorithm\n" msgstr "nelze určit podepisovací algoritmus serverového certifikátu\n" -#: fe-secure-openssl.c:419 +#: fe-secure-openssl.c:421 #, c-format msgid "could not find digest for NID %s\n" msgstr "nelze nalézt digest pro NID %s\n" -#: fe-secure-openssl.c:429 +#: fe-secure-openssl.c:431 msgid "could not generate peer certificate hash\n" msgstr "nelze vygenerovat hash peer cerfitikátu\n" -#: fe-secure-openssl.c:486 +#: fe-secure-openssl.c:488 msgid "SSL certificate's name entry is missing\n" msgstr "SSL certifikátu chybí položka name\n" @@ -1108,17 +1149,35 @@ msgstr "SSL certifikátu chybí položka name\n" msgid "could not create SSL context: %s\n" msgstr "nelze vytvořit SSL kontext: %s\n" -#: fe-secure-openssl.c:852 +#: fe-secure-openssl.c:854 #, c-format -msgid "could not read root certificate file \"%s\": %s\n" -msgstr "nelze číst soubor s kořenovým certifikátem \"%s\": %s\n" +#| msgid "invalid integer value \"%s\" for connection option \"%s\"\n" +msgid "invalid value \"%s\" for minimum SSL protocol version\n" +msgstr "neplatná hodnota \"%s\" pro minimální verzi SSL protokolu\n" + +#: fe-secure-openssl.c:865 +#, c-format +#| msgid "could not establish SSL connection: %s\n" +msgid "could not set minimum SSL protocol version: %s\n" +msgstr "nelze nastavit minimální verzi SSL protokolu: %s\n" -#: fe-secure-openssl.c:880 +#: fe-secure-openssl.c:883 #, c-format -msgid "SSL library does not support CRL certificates (file \"%s\")\n" -msgstr "knihovna SSL nepodporuje CRL certifikáty (soubor \"%s\")\n" +msgid "invalid value \"%s\" for maximum SSL protocol version\n" +msgstr "neplatná hodnota \"%s\" pro maximální verzi SSL protokolu\n" + +#: fe-secure-openssl.c:894 +#, c-format +#| msgid "could not establish SSL connection: %s\n" +msgid "could not set maximum SSL protocol version: %s\n" +msgstr "nelze nastavit maximální verzi SSL protokolu: %s\n" + +#: fe-secure-openssl.c:930 +#, c-format +msgid "could not read root certificate file \"%s\": %s\n" +msgstr "nelze číst soubor s kořenovým certifikátem \"%s\": %s\n" -#: fe-secure-openssl.c:908 +#: fe-secure-openssl.c:974 msgid "" "could not get home directory to locate root certificate file\n" "Either provide the file or change sslmode to disable server certificate verification.\n" @@ -1126,7 +1185,7 @@ msgstr "" "nelze určit domácí adresář pro nalezení souboru s kořenovým certifikátem\n" "Buď poskytněte soubor nebo změňte ssl mód tak, aby neověřoval certifkát serveru.\n" -#: fe-secure-openssl.c:912 +#: fe-secure-openssl.c:978 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -1135,134 +1194,141 @@ msgstr "" "soubor s kořenovým certifikátem \"%s\" neexistuje\n" "poskytněnte soubor nebo změntě ssl mód tak, aby neověřoval certifkát serveru.\n" -#: fe-secure-openssl.c:943 +#: fe-secure-openssl.c:1009 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "nelze otevřít soubor s certifikátem \"%s\": %s\n" -#: fe-secure-openssl.c:962 +#: fe-secure-openssl.c:1028 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "nelze číst soubor s certifikátem \"%s\": %s\n" -#: fe-secure-openssl.c:987 +#: fe-secure-openssl.c:1053 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "nelze vytvořit SSL spojení: %s\n" -#: fe-secure-openssl.c:1041 +#: fe-secure-openssl.c:1107 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "nelze nahrát SSL engine \"%s\": %s\n" -#: fe-secure-openssl.c:1053 +#: fe-secure-openssl.c:1119 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "nelze inicializovat SSL engine \"%s\": %s\n" -#: fe-secure-openssl.c:1069 +#: fe-secure-openssl.c:1135 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "nelze číst soubor privátního klíče \"%s\" z enginu \"%s\": %s\n" -#: fe-secure-openssl.c:1083 +#: fe-secure-openssl.c:1149 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "nelze načíst soubor privátního klíče \"%s\" z enginu \"%s\": %s\n" -#: fe-secure-openssl.c:1120 +#: fe-secure-openssl.c:1186 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "certifikát je přítomen, ale soubor privátního klíče ne \"%s\"\n" -#: fe-secure-openssl.c:1128 +#: fe-secure-openssl.c:1194 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "soubor s privátním klíčem \"%s\" má povolená přístupová práva pro skupinu nebo všechny uživatele; práva by měla být u=rw (0600) nebo přísnější\n" -#: fe-secure-openssl.c:1139 +#: fe-secure-openssl.c:1219 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "nelze načíst soubor privátního klíče \"%s\": %s\n" -#: fe-secure-openssl.c:1153 +#: fe-secure-openssl.c:1237 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "certifikát nesouhlasí se souborem privátního klíče \"%s\": %s\n" -#: fe-secure-openssl.c:1262 +#: fe-secure-openssl.c:1337 +#, c-format +msgid "This may indicate that the server does not support any SSL protocol version between %s and %s.\n" +msgstr "Toto může znamenat že server nepodporuje verzi SSL protokolu mezi %s a %s.\n" + +#: fe-secure-openssl.c:1373 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "certifikát nelze získat: %s\n" -#: fe-secure-openssl.c:1351 +#: fe-secure-openssl.c:1462 #, c-format msgid "no SSL error reported" msgstr "žádný chybový kód SSL nebyl hlášený" -#: fe-secure-openssl.c:1360 +#: fe-secure-openssl.c:1471 #, c-format msgid "SSL error code %lu" msgstr "SSL chybový kód %lu" -#: fe-secure.c:276 +#: fe-secure-openssl.c:1718 +#, c-format +msgid "WARNING: sslpassword truncated\n" +msgstr "WARNING: hodnota sslpassword oříznuta\n" + +#: fe-secure.c:275 #, c-format msgid "could not receive data from server: %s\n" msgstr "nelze přijmout data ze serveru: %s\n" -#: fe-secure.c:392 +#: fe-secure.c:390 #, c-format msgid "could not send data to server: %s\n" msgstr "nelze poslat data na server: %s\n" -#: win32.c:317 +#: win32.c:314 #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "neznámá chyba socketu: 0x%08X/%d" -#~ msgid "could not get home directory to locate client certificate files" -#~ msgstr "nelze získat domovský adresář pro nalezení klientského certifikátu" +#~ msgid "empty channel binding data for channel binding type \"%s\"\n" +#~ msgstr "" +#~ "prázdná \"channel binding data\" pro channel binding typu \"%s\"\n" +#~ "\n" -#~ msgid "could not open private key file \"%s\": %s\n" -#~ msgstr "nelze otevřít soubor s privátním klíčem \"%s\": %s\n" +#~ msgid "could not set socket to blocking mode: %s\n" +#~ msgstr "nelze nastavit soket do blokujícího módu: %s\n" -#~ msgid "private key file \"%s\" changed during execution\n" -#~ msgstr "soubor privátního klíče \"%s\" byl za chodu změněn\n" +#~ msgid "Kerberos 5 authentication rejected: %*s\n" +#~ msgstr "Kerberos 5 autentizace odmítnuta: %*s\n" -#~ msgid "unrecognized return value from row processor" -#~ msgstr "nerozpoznaná návratová hodnota z processoru řádek" +#~ msgid "setsockopt(TCP_KEEPIDLE) failed: %s\n" +#~ msgstr "setsockopt(TCP_KEEPIDLE) selhalo: %s\n" -#~ msgid "socket not open\n" -#~ msgstr "soket není otevřen\n" +#~ msgid "setsockopt(TCP_KEEPALIVE) failed: %s\n" +#~ msgstr "setsockopt(TCP_KEEPALIVE) selhalo: %s\n" -#~ msgid "could not get home directory to locate service definition file" -#~ msgstr "nelze získat domovský adresář pro nalezení kořenového certifikátu" +#~ msgid "setsockopt(TCP_KEEPINTVL) failed: %s\n" +#~ msgstr "setsockopt(TCP_KEEPINTVL) selhalo: %s\n" #~ msgid "setsockopt(SO_KEEPALIVE) failed: %s\n" #~ msgstr "setsockopt(SO_KEEPALIVE) selhalo: %s\n" -#~ msgid "setsockopt(TCP_KEEPINTVL) failed: %s\n" -#~ msgstr "setsockopt(TCP_KEEPINTVL) selhalo: %s\n" - -#~ msgid "setsockopt(TCP_KEEPALIVE) failed: %s\n" -#~ msgstr "setsockopt(TCP_KEEPALIVE) selhalo: %s\n" +#~ msgid "could not get home directory to locate service definition file" +#~ msgstr "nelze získat domovský adresář pro nalezení kořenového certifikátu" -#~ msgid "setsockopt(TCP_KEEPIDLE) failed: %s\n" -#~ msgstr "setsockopt(TCP_KEEPIDLE) selhalo: %s\n" +#~ msgid "socket not open\n" +#~ msgstr "soket není otevřen\n" -#~ msgid "Kerberos 5 authentication rejected: %*s\n" -#~ msgstr "Kerberos 5 autentizace odmítnuta: %*s\n" +#~ msgid "unrecognized return value from row processor" +#~ msgstr "nerozpoznaná návratová hodnota z processoru řádek" -#~ msgid "could not set socket to blocking mode: %s\n" -#~ msgstr "nelze nastavit soket do blokujícího módu: %s\n" +#~ msgid "private key file \"%s\" changed during execution\n" +#~ msgstr "soubor privátního klíče \"%s\" byl za chodu změněn\n" -#~ msgid "channel binding type \"tls-server-end-point\" is not supported by this build\n" -#~ msgstr "channel binding typu \"tls-server-end-point\" není tímto buildem podporován\n" +#~ msgid "could not open private key file \"%s\": %s\n" +#~ msgstr "nelze otevřít soubor s privátním klíčem \"%s\": %s\n" -#~ msgid "empty channel binding data for channel binding type \"%s\"\n" -#~ msgstr "" -#~ "prázdná \"channel binding data\" pro channel binding typu \"%s\"\n" -#~ "\n" +#~ msgid "could not get home directory to locate client certificate files" +#~ msgstr "nelze získat domovský adresář pro nalezení klientského certifikátu" -#~ msgid "invalid channel binding type\n" -#~ msgstr "neplatný channel binding typ\n" +#~ msgid "SSL library does not support CRL certificates (file \"%s\")\n" +#~ msgstr "knihovna SSL nepodporuje CRL certifikáty (soubor \"%s\")\n" diff --git a/src/interfaces/libpq/po/de.po b/src/interfaces/libpq/po/de.po index e08b9ed5d773c..c34b84ec3992f 100644 --- a/src/interfaces/libpq/po/de.po +++ b/src/interfaces/libpq/po/de.po @@ -1,14 +1,14 @@ # German message translation file for libpq -# Peter Eisentraut , 2001 - 2020. +# Peter Eisentraut , 2001 - 2021. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 13\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-18 03:39+0000\n" -"PO-Revision-Date: 2020-05-18 08:47+0200\n" +"POT-Creation-Date: 2021-05-03 16:39+0000\n" +"PO-Revision-Date: 2021-05-03 19:42+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -16,86 +16,94 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: fe-auth-scram.c:212 +#: fe-auth-scram.c:213 msgid "malformed SCRAM message (empty message)\n" msgstr "fehlerhafte SCRAM-Nachricht (leere Nachricht)\n" -#: fe-auth-scram.c:218 +#: fe-auth-scram.c:219 msgid "malformed SCRAM message (length mismatch)\n" msgstr "fehlerhafte SCRAM-Nachricht (Länge stimmt nicht überein)\n" -#: fe-auth-scram.c:265 +#: fe-auth-scram.c:263 +msgid "could not verify server signature\n" +msgstr "konnte Serversignatur nicht überprüfen\n" + +#: fe-auth-scram.c:270 msgid "incorrect server signature\n" msgstr "falsche Serversignatur\n" -#: fe-auth-scram.c:274 +#: fe-auth-scram.c:279 msgid "invalid SCRAM exchange state\n" msgstr "ungültiger Zustand des SCRAM-Austauschs\n" -#: fe-auth-scram.c:296 +#: fe-auth-scram.c:306 #, c-format msgid "malformed SCRAM message (attribute \"%c\" expected)\n" msgstr "fehlerhafte SCRAM-Nachricht (Attribut »%c« erwartet)\n" -#: fe-auth-scram.c:305 +#: fe-auth-scram.c:315 #, c-format msgid "malformed SCRAM message (expected character \"=\" for attribute \"%c\")\n" msgstr "fehlerhafte SCRAM-Nachricht (Zeichen »=« für Attribut »%c« erwartet)\n" -#: fe-auth-scram.c:346 +#: fe-auth-scram.c:356 msgid "could not generate nonce\n" msgstr "konnte Nonce nicht erzeugen\n" -#: fe-auth-scram.c:356 fe-auth-scram.c:431 fe-auth-scram.c:579 -#: fe-auth-scram.c:600 fe-auth-scram.c:626 fe-auth-scram.c:641 -#: fe-auth-scram.c:691 fe-auth-scram.c:725 fe-auth.c:289 fe-auth.c:359 -#: fe-auth.c:394 fe-auth.c:611 fe-auth.c:770 fe-auth.c:1129 fe-auth.c:1277 -#: fe-connect.c:886 fe-connect.c:1413 fe-connect.c:1589 fe-connect.c:2199 -#: fe-connect.c:2222 fe-connect.c:2948 fe-connect.c:4614 fe-connect.c:4870 -#: fe-connect.c:4989 fe-connect.c:5242 fe-connect.c:5322 fe-connect.c:5421 -#: fe-connect.c:5677 fe-connect.c:5706 fe-connect.c:5778 fe-connect.c:5802 -#: fe-connect.c:5820 fe-connect.c:5921 fe-connect.c:5930 fe-connect.c:6286 -#: fe-connect.c:6436 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 -#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1207 fe-protocol3.c:995 -#: fe-protocol3.c:1699 fe-secure-common.c:110 fe-secure-gssapi.c:504 -#: fe-secure-openssl.c:440 fe-secure-openssl.c:1091 +#: fe-auth-scram.c:366 fe-auth-scram.c:441 fe-auth-scram.c:595 +#: fe-auth-scram.c:616 fe-auth-scram.c:642 fe-auth-scram.c:657 +#: fe-auth-scram.c:707 fe-auth-scram.c:746 fe-auth.c:290 fe-auth.c:362 +#: fe-auth.c:398 fe-auth.c:615 fe-auth.c:774 fe-auth.c:1132 fe-auth.c:1282 +#: fe-connect.c:912 fe-connect.c:1456 fe-connect.c:1625 fe-connect.c:2977 +#: fe-connect.c:4658 fe-connect.c:4919 fe-connect.c:5038 fe-connect.c:5282 +#: fe-connect.c:5364 fe-connect.c:5463 fe-connect.c:5719 fe-connect.c:5748 +#: fe-connect.c:5820 fe-connect.c:5844 fe-connect.c:5862 fe-connect.c:5963 +#: fe-connect.c:5972 fe-connect.c:6330 fe-connect.c:6480 fe-exec.c:1209 +#: fe-exec.c:2993 fe-exec.c:3145 fe-exec.c:3918 fe-exec.c:4083 +#: fe-gssapi-common.c:110 fe-lobj.c:881 fe-protocol3.c:1016 fe-protocol3.c:1724 +#: fe-secure-common.c:110 fe-secure-gssapi.c:504 fe-secure-openssl.c:440 +#: fe-secure-openssl.c:1129 msgid "out of memory\n" msgstr "Speicher aufgebraucht\n" -#: fe-auth-scram.c:364 +#: fe-auth-scram.c:374 msgid "could not encode nonce\n" msgstr "konnte Nonce nicht kodieren\n" #: fe-auth-scram.c:563 +msgid "could not calculate client proof\n" +msgstr "konnte Client-Proof nicht berechnen\n" + +#: fe-auth-scram.c:579 msgid "could not encode client proof\n" msgstr "konnte Client-Proof nicht kodieren\n" -#: fe-auth-scram.c:618 +#: fe-auth-scram.c:634 msgid "invalid SCRAM response (nonce mismatch)\n" msgstr "ungültige SCRAM-Antwort (Nonce stimmt nicht überein)\n" -#: fe-auth-scram.c:651 +#: fe-auth-scram.c:667 msgid "malformed SCRAM message (invalid salt)\n" msgstr "fehlerhafte SCRAM-Nachricht (ungültiges Salt)\n" -#: fe-auth-scram.c:665 +#: fe-auth-scram.c:681 msgid "malformed SCRAM message (invalid iteration count)\n" msgstr "fehlerhafte SCRAM-Nachricht (ungültige Iterationszahl)\n" -#: fe-auth-scram.c:671 +#: fe-auth-scram.c:687 msgid "malformed SCRAM message (garbage at end of server-first-message)\n" msgstr "fehlerhafte SCRAM-Nachricht (Müll am Ende der »server-first-message«)\n" -#: fe-auth-scram.c:702 +#: fe-auth-scram.c:723 #, c-format msgid "error received from server in SCRAM exchange: %s\n" msgstr "Fehler vom Server empfangen im SCRAM-Austausch: %s\n" -#: fe-auth-scram.c:718 +#: fe-auth-scram.c:739 msgid "malformed SCRAM message (garbage at end of server-final-message)\n" msgstr "fehlerhafte SCRAM-Nachricht (Müll am Ende der »server-final-message«)\n" -#: fe-auth-scram.c:737 +#: fe-auth-scram.c:758 msgid "malformed SCRAM message (invalid server signature)\n" msgstr "fehlerhafte SCRAM-Nachricht (ungültige Serversignatur)\n" @@ -108,7 +116,7 @@ msgstr "Speicher aufgebraucht beim Anlegen des GSSAPI-Puffers (%d)\n" msgid "GSSAPI continuation error" msgstr "GSSAPI-Fortsetzungsfehler" -#: fe-auth.c:158 fe-auth.c:388 fe-gssapi-common.c:98 fe-secure-common.c:98 +#: fe-auth.c:158 fe-auth.c:391 fe-gssapi-common.c:97 fe-secure-common.c:98 msgid "host name must be specified\n" msgstr "Hostname muss angegeben werden\n" @@ -125,48 +133,48 @@ msgstr "Speicher aufgebraucht beim Anlegen des SSPI-Puffers (%d)\n" msgid "SSPI continuation error" msgstr "SSPI-Fortsetzungsfehler" -#: fe-auth.c:349 +#: fe-auth.c:351 msgid "duplicate SSPI authentication request\n" msgstr "doppelte SSPI-Authentifizierungsanfrage\n" -#: fe-auth.c:374 +#: fe-auth.c:377 msgid "could not acquire SSPI credentials" msgstr "konnte SSPI-Credentials nicht erhalten" -#: fe-auth.c:429 +#: fe-auth.c:433 msgid "channel binding required, but SSL not in use\n" msgstr "Channel-Binding wurde verlangt, aber SSL wird nicht verwendet\n" -#: fe-auth.c:436 +#: fe-auth.c:440 msgid "duplicate SASL authentication request\n" msgstr "doppelte SASL-Authentifizierungsanfrage\n" -#: fe-auth.c:492 +#: fe-auth.c:496 msgid "channel binding is required, but client does not support it\n" msgstr "Channel-Binding wurde verlangt, aber der Client unterstützt es nicht\n" -#: fe-auth.c:509 +#: fe-auth.c:513 msgid "server offered SCRAM-SHA-256-PLUS authentication over a non-SSL connection\n" msgstr "Server hat Authentifizierung mit SCRAM-SHA-256-PLUS über eine Verbindung ohne SSL angeboten\n" -#: fe-auth.c:521 +#: fe-auth.c:525 msgid "none of the server's SASL authentication mechanisms are supported\n" msgstr "keine der SASL-Authentifizierungsmechanismen des Servers werden unterstützt\n" -#: fe-auth.c:529 +#: fe-auth.c:533 msgid "channel binding is required, but server did not offer an authentication method that supports channel binding\n" msgstr "Channel-Binding wurde verlangt, aber der Server hat keine Authentifizierungsmethode mit Channel-Binding angeboten\n" -#: fe-auth.c:635 +#: fe-auth.c:639 #, c-format msgid "out of memory allocating SASL buffer (%d)\n" msgstr "Speicher aufgebraucht beim Anlegen des SASL-Puffers (%d)\n" -#: fe-auth.c:660 +#: fe-auth.c:664 msgid "AuthenticationSASLFinal received from server, but SASL authentication was not completed\n" msgstr "AuthenticationSASLFinal vom Server empfangen, aber SASL-Authentifizierung war noch nicht abgeschlossen\n" -#: fe-auth.c:737 +#: fe-auth.c:741 msgid "SCM_CRED authentication method not supported\n" msgstr "SCM_CRED-Authentifizierungsmethode nicht unterstützt\n" @@ -178,689 +186,644 @@ msgstr "Channel-Binding wurde verlangt, aber der Server hat den Client ohne Chan msgid "channel binding required but not supported by server's authentication request\n" msgstr "Channel-Binding wurde verlangt aber von der Authentifizierungsanfrage des Servers nicht unterstützt\n" -#: fe-auth.c:875 +#: fe-auth.c:877 msgid "Kerberos 4 authentication not supported\n" msgstr "Authentifizierung mit Kerberos 4 nicht unterstützt\n" -#: fe-auth.c:880 +#: fe-auth.c:882 msgid "Kerberos 5 authentication not supported\n" msgstr "Authentifizierung mit Kerberos 5 nicht unterstützt\n" -#: fe-auth.c:951 +#: fe-auth.c:953 msgid "GSSAPI authentication not supported\n" msgstr "Authentifizierung mit GSSAPI nicht unterstützt\n" -#: fe-auth.c:983 +#: fe-auth.c:985 msgid "SSPI authentication not supported\n" msgstr "Authentifizierung mit SSPI nicht unterstützt\n" -#: fe-auth.c:991 +#: fe-auth.c:993 msgid "Crypt authentication not supported\n" msgstr "Authentifizierung mit Crypt nicht unterstützt\n" -#: fe-auth.c:1057 +#: fe-auth.c:1060 #, c-format msgid "authentication method %u not supported\n" msgstr "Authentifizierungsmethode %u nicht unterstützt\n" -#: fe-auth.c:1104 +#: fe-auth.c:1107 #, c-format msgid "user name lookup failure: error code %lu\n" msgstr "Fehler beim Nachschlagen des Benutzernamens: Fehlercode %lu\n" -#: fe-auth.c:1114 fe-connect.c:2830 +#: fe-auth.c:1117 fe-connect.c:2852 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "konnte lokale Benutzer-ID %d nicht nachschlagen: %s\n" -#: fe-auth.c:1119 fe-connect.c:2835 +#: fe-auth.c:1122 fe-connect.c:2857 #, c-format msgid "local user with ID %d does not exist\n" msgstr "lokaler Benutzer mit ID %d existiert nicht\n" -#: fe-auth.c:1221 +#: fe-auth.c:1226 msgid "unexpected shape of result set returned for SHOW\n" msgstr "unerwartete Form der Ergebnismenge von SHOW\n" -#: fe-auth.c:1230 +#: fe-auth.c:1235 msgid "password_encryption value too long\n" msgstr "Wert von password_encryption ist zu lang\n" -#: fe-auth.c:1270 +#: fe-auth.c:1275 #, c-format msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "unbekannter Passwortverschlüsselungsalgorithmus »%s«\n" -#: fe-connect.c:1069 +#: fe-connect.c:1095 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "fehlerhafte Angabe: %d Hostnamen und %d hostaddr-Angaben\n" -#: fe-connect.c:1150 +#: fe-connect.c:1176 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "fehlerhafte Angabe: %d Portnummern und %d Hosts\n" -#: fe-connect.c:1243 -#, c-format -msgid "invalid channel_binding value: \"%s\"\n" -msgstr "ungültiger channel_binding-Wert: »%s«\n" - -#: fe-connect.c:1269 +#: fe-connect.c:1269 fe-connect.c:1295 fe-connect.c:1337 fe-connect.c:1346 +#: fe-connect.c:1379 fe-connect.c:1423 #, c-format -msgid "invalid sslmode value: \"%s\"\n" -msgstr "ungültiger sslmode-Wert: »%s«\n" +msgid "invalid %s value: \"%s\"\n" +msgstr "ungültiger %s-Wert: »%s«\n" -#: fe-connect.c:1290 +#: fe-connect.c:1316 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "sslmode-Wert »%s« ist ungültig, wenn SSL-Unterstützung nicht einkompiliert worden ist\n" -#: fe-connect.c:1311 -#, c-format -msgid "invalid ssl_min_protocol_version value: \"%s\"\n" -msgstr "ungültiger ssl_min_protocol_version-Wert: »%s«\n" - -#: fe-connect.c:1319 -#, c-format -msgid "invalid ssl_max_protocol_version value: \"%s\"\n" -msgstr "ungültiger ssl_max_protocol_version-Wert: »%s«\n" - -#: fe-connect.c:1336 +#: fe-connect.c:1364 msgid "invalid SSL protocol version range\n" msgstr "ungültiges SSL-Protokollsintervall\n" -#: fe-connect.c:1351 -#, c-format -msgid "invalid gssencmode value: \"%s\"\n" -msgstr "ungültiger gssencmode-Wert: »%s«\n" - -#: fe-connect.c:1360 +#: fe-connect.c:1389 #, c-format msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" msgstr "gssencmode-Wert »%s« ist ungültig, wenn GSSAPI-Unterstützung nicht einkompiliert worden ist\n" -#: fe-connect.c:1395 -#, c-format -msgid "invalid target_session_attrs value: \"%s\"\n" -msgstr "ungültiger target_session_attrs-Wert: »%s«\n" - -#: fe-connect.c:1613 +#: fe-connect.c:1649 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "konnte Socket nicht auf TCP »No Delay«-Modus umstellen: %s\n" -#: fe-connect.c:1674 -#, c-format -msgid "" -"could not connect to server: %s\n" -"\tIs the server running locally and accepting\n" -"\tconnections on Unix domain socket \"%s\"?\n" +#: fe-connect.c:1711 +#, fuzzy, c-format +#| msgid "connection to server was lost" +msgid "connection to server on socket \"%s\" failed: " +msgstr "Verbindung zum Server wurde verloren" + +#: fe-connect.c:1738 +#, fuzzy, c-format +#| msgid "connection to server was lost" +msgid "connection to server at \"%s\" (%s), port %s failed: " +msgstr "Verbindung zum Server wurde verloren" + +#: fe-connect.c:1743 +#, fuzzy, c-format +#| msgid "connection to server was lost" +msgid "connection to server at \"%s\", port %s failed: " +msgstr "Verbindung zum Server wurde verloren" + +#: fe-connect.c:1768 +#, fuzzy +#| msgid "" +#| "could not connect to server: %s\n" +#| "\tIs the server running locally and accepting\n" +#| "\tconnections on Unix domain socket \"%s\"?\n" +msgid "\tIs the server running locally and accepting connections on that socket?\n" msgstr "" "konnte nicht mit dem Server verbinden: %s\n" "\tLäuft der Server lokal und akzeptiert er Verbindungen\n" "\tauf dem Unix-Domain-Socket »%s«?\n" -#: fe-connect.c:1711 -#, c-format -msgid "" -"could not connect to server: %s\n" -"\tIs the server running on host \"%s\" (%s) and accepting\n" -"\tTCP/IP connections on port %s?\n" -msgstr "" -"konnte nicht mit dem Server verbinden: %s\n" -"\tLäuft der Server auf dem Host »%s« (%s) und akzeptiert er\n" -"\tTCP/IP-Verbindungen auf Port %s?\n" - -#: fe-connect.c:1719 -#, c-format -msgid "" -"could not connect to server: %s\n" -"\tIs the server running on host \"%s\" and accepting\n" -"\tTCP/IP connections on port %s?\n" +#: fe-connect.c:1772 +#, fuzzy +#| msgid "" +#| "could not connect to server: %s\n" +#| "\tIs the server running on host \"%s\" and accepting\n" +#| "\tTCP/IP connections on port %s?\n" +msgid "\tIs the server running on that host and accepting TCP/IP connections?\n" msgstr "" "konnte nicht mit dem Server verbinden: %s\n" "\tLäuft der Server auf dem Host »%s« und akzeptiert er\n" "\tTCP/IP-Verbindungen auf Port %s?\n" -#: fe-connect.c:1789 +#: fe-connect.c:1836 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "ungültiger Zahlenwert »%s« für Verbindungsoption »%s«\n" -#: fe-connect.c:1819 fe-connect.c:1853 fe-connect.c:1888 fe-connect.c:1975 -#: fe-connect.c:2619 +#: fe-connect.c:1866 fe-connect.c:1901 fe-connect.c:1937 fe-connect.c:2026 +#: fe-connect.c:2640 #, c-format -msgid "setsockopt(%s) failed: %s\n" -msgstr "setsockopt(%s) fehlgeschlagen: %s\n" +msgid "%s(%s) failed: %s\n" +msgstr "%s(%s) fehlgeschlagen: %s\n" -#: fe-connect.c:1941 +#: fe-connect.c:1991 #, c-format -msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" -msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) fehlgeschlagen: %ui\n" +msgid "%s(%s) failed: error code %d\n" +msgstr "%s(%s) fehlgeschlagen: Fehlercode %d\n" -#: fe-connect.c:2312 +#: fe-connect.c:2306 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "ungültiger Verbindungszustand, möglicherweise ein Speicherproblem\n" -#: fe-connect.c:2378 +#: fe-connect.c:2385 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "ungültige Portnummer: »%s«\n" -#: fe-connect.c:2394 +#: fe-connect.c:2401 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "konnte Hostnamen »%s« nicht in Adresse übersetzen: %s\n" -#: fe-connect.c:2407 +#: fe-connect.c:2414 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "konnte Netzwerkadresse »%s« nicht interpretieren: %s\n" -#: fe-connect.c:2420 +#: fe-connect.c:2427 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Unix-Domain-Socket-Pfad »%s« ist zu lang (maximal %d Bytes)\n" -#: fe-connect.c:2435 +#: fe-connect.c:2442 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "konnte Unix-Domain-Socket-Pfad »%s« nicht in Adresse übersetzen: %s\n" -#: fe-connect.c:2556 +#: fe-connect.c:2568 #, c-format msgid "could not create socket: %s\n" msgstr "konnte Socket nicht erzeugen: %s\n" -#: fe-connect.c:2578 +#: fe-connect.c:2599 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "konnte Socket nicht auf nicht-blockierenden Modus umstellen: %s\n" -#: fe-connect.c:2588 +#: fe-connect.c:2609 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "konnte Socket nicht auf »Close on exec«-Modus umstellen: %s\n" -#: fe-connect.c:2606 +#: fe-connect.c:2627 msgid "keepalives parameter must be an integer\n" msgstr "Parameter »keepalives« muss eine ganze Zahl sein\n" -#: fe-connect.c:2746 +#: fe-connect.c:2768 #, c-format msgid "could not get socket error status: %s\n" msgstr "konnte Socket-Fehlerstatus nicht ermitteln: %s\n" -#: fe-connect.c:2774 +#: fe-connect.c:2796 #, c-format msgid "could not get client address from socket: %s\n" msgstr "konnte Client-Adresse vom Socket nicht ermitteln: %s\n" -#: fe-connect.c:2816 +#: fe-connect.c:2838 msgid "requirepeer parameter is not supported on this platform\n" msgstr "Parameter »requirepeer« wird auf dieser Plattform nicht unterstützt\n" -#: fe-connect.c:2819 +#: fe-connect.c:2841 #, c-format msgid "could not get peer credentials: %s\n" msgstr "konnte Credentials von Gegenstelle nicht ermitteln: %s\n" -#: fe-connect.c:2843 +#: fe-connect.c:2865 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer gibt »%s« an, aber tatsächlicher Benutzername der Gegenstelle ist »%s«\n" -#: fe-connect.c:2883 +#: fe-connect.c:2905 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "konnte Paket zur GSSAPI-Verhandlung nicht senden: %s\n" -#: fe-connect.c:2895 +#: fe-connect.c:2917 msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" msgstr "GSSAPI-Verschlüsselung war gefordert aber war nicht möglich (möglicherweise kein Credential-Cache, keine Serverunterstützung oder lokales Socket wird verwendet)\n" -#: fe-connect.c:2922 +#: fe-connect.c:2959 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "konnte Paket zur SSL-Verhandlung nicht senden: %s\n" -#: fe-connect.c:2961 +#: fe-connect.c:2990 #, c-format msgid "could not send startup packet: %s\n" msgstr "konnte Startpaket nicht senden: %s\n" -#: fe-connect.c:3031 +#: fe-connect.c:3066 msgid "server does not support SSL, but SSL was required\n" msgstr "Server unterstützt kein SSL, aber SSL wurde verlangt\n" -#: fe-connect.c:3057 +#: fe-connect.c:3093 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "ungültige Antwort auf SSL-Verhandlungspaket empfangen: %c\n" -#: fe-connect.c:3147 +#: fe-connect.c:3182 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "Server unterstützt keine GSSAPI-Verschlüsselung, sie wurde aber verlangt\n" -#: fe-connect.c:3158 +#: fe-connect.c:3194 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "ungültige Antwort auf GSSAPI-Verhandlungspaket empfangen: %c\n" -#: fe-connect.c:3225 fe-connect.c:3256 +#: fe-connect.c:3260 fe-connect.c:3285 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "Authentifizierungsanfrage wurde vom Server erwartet, aber %c wurde empfangen\n" -#: fe-connect.c:3502 +#: fe-connect.c:3492 msgid "unexpected message from server during startup\n" msgstr "unerwartete Nachricht vom Server beim Start\n" -#: fe-connect.c:3707 -#, c-format -msgid "could not make a writable connection to server \"%s:%s\"\n" -msgstr "konnte keine schreibbare Verbindung zum Server »%s:%s« aufbauen\n" +#: fe-connect.c:3584 +msgid "session is read-only\n" +msgstr "Sitzung ist read-only\n" + +#: fe-connect.c:3587 +msgid "session is not read-only\n" +msgstr "Sitzung ist nicht read-only\n" -#: fe-connect.c:3753 +#: fe-connect.c:3641 +msgid "server is in hot standby mode\n" +msgstr "Server ist im Hot-Standby-Modus\n" + +#: fe-connect.c:3644 +msgid "server is not in hot standby mode\n" +msgstr "Server ist nicht im Hot-Standby-Modus\n" + +#: fe-connect.c:3755 fe-connect.c:3807 #, c-format -msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" -msgstr "Test »SHOW transaction_read_only« fehlgeschlagen auf Server »%s:%s«\n" +msgid "\"%s\" failed\n" +msgstr "»%s« fehlgeschlagen\n" -#: fe-connect.c:3768 +#: fe-connect.c:3821 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "ungültiger Verbindungszustand %d, möglicherweise ein Speicherproblem\n" -#: fe-connect.c:4220 fe-connect.c:4280 +#: fe-connect.c:4267 fe-connect.c:4327 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc »%s« während PGEVT_CONNRESET-Ereignis fehlgeschlagen\n" -#: fe-connect.c:4627 +#: fe-connect.c:4671 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "ungültige LDAP-URL »%s«: Schema muss ldap:// sein\n" -#: fe-connect.c:4642 +#: fe-connect.c:4686 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "ungültige LDAP-URL »%s«: Distinguished Name fehlt\n" -#: fe-connect.c:4654 fe-connect.c:4709 +#: fe-connect.c:4698 fe-connect.c:4756 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "ungültige LDAP-URL »%s«: muss genau ein Attribut haben\n" -#: fe-connect.c:4665 fe-connect.c:4724 +#: fe-connect.c:4710 fe-connect.c:4772 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "ungültige LDAP-URL »%s«: Suchbereich fehlt (base/one/sub)\n" -#: fe-connect.c:4676 +#: fe-connect.c:4722 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "ungültige LDAP-URL »%s«: kein Filter\n" -#: fe-connect.c:4697 +#: fe-connect.c:4744 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "ungültige LDAP-URL »%s«: ungültige Portnummer\n" -#: fe-connect.c:4733 +#: fe-connect.c:4782 msgid "could not create LDAP structure\n" msgstr "konnte LDAP-Struktur nicht erzeugen\n" -#: fe-connect.c:4809 +#: fe-connect.c:4858 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "Suche auf LDAP-Server fehlgeschlagen: %s\n" -#: fe-connect.c:4820 +#: fe-connect.c:4869 msgid "more than one entry found on LDAP lookup\n" msgstr "LDAP-Suche ergab mehr als einen Eintrag\n" -#: fe-connect.c:4821 fe-connect.c:4833 +#: fe-connect.c:4870 fe-connect.c:4882 msgid "no entry found on LDAP lookup\n" msgstr "kein Eintrag gefunden bei LDAP-Suche\n" -#: fe-connect.c:4844 fe-connect.c:4857 +#: fe-connect.c:4893 fe-connect.c:4906 msgid "attribute has no values on LDAP lookup\n" msgstr "Attribut hat keine Werte bei LDAP-Suche\n" -#: fe-connect.c:4909 fe-connect.c:4928 fe-connect.c:5460 +#: fe-connect.c:4958 fe-connect.c:4977 fe-connect.c:5502 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "fehlendes »=« nach »%s« in der Zeichenkette der Verbindungsdaten\n" -#: fe-connect.c:5001 fe-connect.c:5645 fe-connect.c:6419 +#: fe-connect.c:5050 fe-connect.c:5687 fe-connect.c:6463 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "ungültige Verbindungsoption »%s«\n" -#: fe-connect.c:5017 fe-connect.c:5509 +#: fe-connect.c:5066 fe-connect.c:5551 msgid "unterminated quoted string in connection info string\n" msgstr "fehlendes schließendes Anführungszeichen (\") in der Zeichenkette der Verbindungsdaten\n" -#: fe-connect.c:5100 +#: fe-connect.c:5147 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "Definition von Service »%s« nicht gefunden\n" -#: fe-connect.c:5123 +#: fe-connect.c:5173 #, c-format msgid "service file \"%s\" not found\n" msgstr "Servicedatei »%s« nicht gefunden\n" -#: fe-connect.c:5138 -#, c-format -msgid "line %d too long in service file \"%s\"\n" -msgstr "Zeile %d zu lang in Servicedatei »%s«\n" - -#: fe-connect.c:5210 fe-connect.c:5254 +#: fe-connect.c:5250 fe-connect.c:5294 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "Syntaxfehler in Servicedatei »%s«, Zeile %d\n" -#: fe-connect.c:5221 +#: fe-connect.c:5261 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "geschachtelte »service«-Definitionen werden nicht unterstützt in Servicedatei »%s«, Zeile %d\n" -#: fe-connect.c:5941 +#: fe-connect.c:5983 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "ungültige URI an interne Parserroutine weitergeleitet: »%s«\n" -#: fe-connect.c:6018 +#: fe-connect.c:6060 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "Ende der Eingabezeichenkette gefunden beim Suchen nach passendem »]« in IPv6-Hostadresse in URI: »%s«\n" -#: fe-connect.c:6025 +#: fe-connect.c:6067 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "IPv6-Hostadresse darf nicht leer sein in URI: »%s«\n" -#: fe-connect.c:6040 +#: fe-connect.c:6082 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "unerwartetes Zeichen »%c« an Position %d in URI (»:« oder »/« erwartet): »%s«\n" -#: fe-connect.c:6169 +#: fe-connect.c:6212 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "zusätzliches Schlüssel/Wert-Trennzeichen »=« in URI-Query-Parameter: »%s«\n" -#: fe-connect.c:6189 +#: fe-connect.c:6232 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "fehlendes Schlüssel/Wert-Trennzeichen »=« in URI-Query-Parameter: »%s«\n" -#: fe-connect.c:6240 +#: fe-connect.c:6284 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "ungültiger URI-Query-Parameter: »%s«\n" -#: fe-connect.c:6314 +#: fe-connect.c:6358 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "ungültiges Prozent-kodiertes Token: »%s«\n" -#: fe-connect.c:6324 +#: fe-connect.c:6368 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "verbotener Wert %%00 in Prozent-kodiertem Wert: »%s«\n" -#: fe-connect.c:6687 +#: fe-connect.c:6738 msgid "connection pointer is NULL\n" msgstr "Verbindung ist ein NULL-Zeiger\n" -#: fe-connect.c:6986 +#: fe-connect.c:7018 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "WARNUNG: Passwortdatei »%s« ist keine normale Datei\n" -#: fe-connect.c:6995 +#: fe-connect.c:7027 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "WARNUNG: Passwortdatei »%s« erlaubt Lesezugriff für Gruppe oder Andere; Rechte sollten u=rw (0600) oder weniger sein\n" -#: fe-connect.c:7036 -#, c-format -msgid "WARNING: line %d too long in password file \"%s\"\n" -msgstr "WARNUNG: Zeile %d zu lang in Passwortdatei »%s«\n" - -#: fe-connect.c:7115 +#: fe-connect.c:7135 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "Passwort wurde aus Datei »%s« gelesen\n" -#: fe-exec.c:444 fe-exec.c:2821 +#: fe-exec.c:449 fe-exec.c:3219 #, c-format msgid "row number %d is out of range 0..%d" msgstr "Zeilennummer %d ist außerhalb des zulässigen Bereichs 0..%d" -#: fe-exec.c:505 fe-protocol2.c:497 fe-protocol2.c:532 fe-protocol2.c:1050 -#: fe-protocol3.c:206 fe-protocol3.c:233 fe-protocol3.c:250 fe-protocol3.c:330 -#: fe-protocol3.c:723 fe-protocol3.c:954 +#: fe-exec.c:510 fe-protocol3.c:219 fe-protocol3.c:244 fe-protocol3.c:273 +#: fe-protocol3.c:291 fe-protocol3.c:371 fe-protocol3.c:743 fe-protocol3.c:975 msgid "out of memory" msgstr "Speicher aufgebraucht" -#: fe-exec.c:506 fe-protocol2.c:1396 fe-protocol3.c:1907 +#: fe-exec.c:511 fe-protocol3.c:1932 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:815 +#: fe-exec.c:778 msgid "write to server failed\n" msgstr "Schreiben zum Server fehlgeschlagen\n" -#: fe-exec.c:896 +#: fe-exec.c:850 msgid "NOTICE" msgstr "HINWEIS" -#: fe-exec.c:954 +#: fe-exec.c:908 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresult kann nicht mehr als INT_MAX Tupel enthalten" -#: fe-exec.c:966 +#: fe-exec.c:920 msgid "size_t overflow" msgstr "Überlauf von size_t" -#: fe-exec.c:1243 fe-exec.c:1301 fe-exec.c:1347 +#: fe-exec.c:1302 fe-exec.c:1403 fe-exec.c:1451 msgid "command string is a null pointer\n" msgstr "Befehlszeichenkette ist ein NULL-Zeiger\n" -#: fe-exec.c:1307 fe-exec.c:1353 fe-exec.c:1448 +#: fe-exec.c:1409 fe-exec.c:1457 fe-exec.c:1554 msgid "number of parameters must be between 0 and 65535\n" msgstr "Anzahl der Parameter muss zwischen 0 und 65535 sein\n" -#: fe-exec.c:1341 fe-exec.c:1442 +#: fe-exec.c:1445 fe-exec.c:1548 msgid "statement name is a null pointer\n" msgstr "Anweisungsname ist ein NULL-Zeiger\n" -#: fe-exec.c:1361 fe-exec.c:1524 fe-exec.c:2233 fe-exec.c:2435 -msgid "function requires at least protocol version 3.0\n" -msgstr "Funktion erfordert mindestens Protokollversion 3.0\n" - -#: fe-exec.c:1479 +#: fe-exec.c:1589 msgid "no connection to the server\n" msgstr "keine Verbindung mit dem Server\n" -#: fe-exec.c:1486 +#: fe-exec.c:1598 msgid "another command is already in progress\n" msgstr "ein anderer Befehl ist bereits in Ausführung\n" -#: fe-exec.c:1600 +#: fe-exec.c:1627 +msgid "cannot queue commands during COPY\n" +msgstr "während COPY können keine Befehle aufgereiht werden\n" + +#: fe-exec.c:1745 msgid "length must be given for binary parameter\n" msgstr "für binäre Parameter muss eine Länge angegeben werden\n" -#: fe-exec.c:1863 +#: fe-exec.c:2066 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "unerwarteter asyncStatus: %d\n" -#: fe-exec.c:1883 +#: fe-exec.c:2086 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEventProc »%s« während PGEVT_RESULTCREATE-Ereignis fehlgeschlagen\n" -#: fe-exec.c:2043 +#: fe-exec.c:2234 +msgid "synchronous command execution functions are not allowed in pipeline mode\n" +msgstr "synchrone Befehlsausführungsfunktionen sind im Pipeline-Modus nicht erlaubt\n" + +#: fe-exec.c:2256 msgid "COPY terminated by new PQexec" msgstr "COPY von neuem PQexec beendet" -#: fe-exec.c:2051 -msgid "COPY IN state must be terminated first\n" -msgstr "COPY-IN-Zustand muss erst beendet werden\n" - -#: fe-exec.c:2071 -msgid "COPY OUT state must be terminated first\n" -msgstr "COPY-OUT-Zustand muss erst beendet werden\n" - -#: fe-exec.c:2079 +#: fe-exec.c:2273 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec ist während COPY BOTH nicht erlaubt\n" -#: fe-exec.c:2325 fe-exec.c:2392 fe-exec.c:2482 fe-protocol2.c:1353 -#: fe-protocol3.c:1838 +#: fe-exec.c:2502 fe-exec.c:2558 fe-exec.c:2627 fe-protocol3.c:1863 msgid "no COPY in progress\n" msgstr "keine COPY in Ausführung\n" -#: fe-exec.c:2672 +#: fe-exec.c:2804 +msgid "PQfn not allowed in pipeline mode\n" +msgstr "PQfn im Pipeline-Modus nicht erlaubt\n" + +#: fe-exec.c:2812 msgid "connection in wrong state\n" msgstr "Verbindung im falschen Zustand\n" -#: fe-exec.c:2703 +#: fe-exec.c:2856 +msgid "cannot enter pipeline mode, connection not idle\n" +msgstr "kann Pipeline-Modus nicht einschalten, Verbindung ist nicht inaktiv\n" + +#: fe-exec.c:2890 fe-exec.c:2907 +msgid "cannot exit pipeline mode with uncollected results\n" +msgstr "kann Pipeline-Modus nicht beenden, wegen nicht eingesammelter Ergebnisse\n" + +#: fe-exec.c:2895 +msgid "cannot exit pipeline mode while busy\n" +msgstr "kann Pipeline-Modus nicht beenden während die Verbindung beschäftigt ist\n" + +#: fe-exec.c:3037 +msgid "cannot send pipeline when not in pipeline mode\n" +msgstr "Pipeline kann nicht gesendet werden, wenn der Pipeline-Modus aus ist\n" + +#: fe-exec.c:3108 msgid "invalid ExecStatusType code" msgstr "ungültiger ExecStatusType-Kode" -#: fe-exec.c:2730 +#: fe-exec.c:3135 msgid "PGresult is not an error result\n" msgstr "PGresult ist kein Fehlerresultat\n" -#: fe-exec.c:2805 fe-exec.c:2828 +#: fe-exec.c:3203 fe-exec.c:3226 #, c-format msgid "column number %d is out of range 0..%d" msgstr "Spaltennummer %d ist außerhalb des zulässigen Bereichs 0..%d" -#: fe-exec.c:2843 +#: fe-exec.c:3241 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "Parameternummer %d ist außerhalb des zulässigen Bereichs 0..%d" -#: fe-exec.c:3153 +#: fe-exec.c:3551 #, c-format msgid "could not interpret result from server: %s" msgstr "konnte Ergebnis vom Server nicht interpretieren: %s" -#: fe-exec.c:3392 fe-exec.c:3476 +#: fe-exec.c:3811 fe-exec.c:3900 msgid "incomplete multibyte character\n" msgstr "unvollständiges Mehrbyte-Zeichen\n" -#: fe-gssapi-common.c:124 +#: fe-gssapi-common.c:123 msgid "GSSAPI name import error" msgstr "GSSAPI-Namensimportfehler" -#: fe-lobj.c:154 -msgid "cannot determine OID of function lo_truncate\n" -msgstr "kann OID der Funktion lo_truncate nicht ermitteln\n" +#: fe-lobj.c:145 fe-lobj.c:210 fe-lobj.c:403 fe-lobj.c:494 fe-lobj.c:568 +#: fe-lobj.c:969 fe-lobj.c:977 fe-lobj.c:985 fe-lobj.c:993 fe-lobj.c:1001 +#: fe-lobj.c:1009 fe-lobj.c:1017 fe-lobj.c:1025 +#, c-format +msgid "cannot determine OID of function %s\n" +msgstr "kann OID der Funktion %s nicht ermitteln\n" -#: fe-lobj.c:170 +#: fe-lobj.c:162 msgid "argument of lo_truncate exceeds integer range\n" msgstr "Argument von lo_truncate überschreitet Bereich für ganze Zahlen\n" -#: fe-lobj.c:221 -msgid "cannot determine OID of function lo_truncate64\n" -msgstr "kann OID der Funktion lo_truncate64 nicht ermitteln\n" - -#: fe-lobj.c:279 +#: fe-lobj.c:266 msgid "argument of lo_read exceeds integer range\n" msgstr "Argument von lo_read überschreitet Bereich für ganze Zahlen\n" -#: fe-lobj.c:334 +#: fe-lobj.c:318 msgid "argument of lo_write exceeds integer range\n" msgstr "Argument von lo_write überschreitet Bereich für ganze Zahlen\n" -#: fe-lobj.c:425 -msgid "cannot determine OID of function lo_lseek64\n" -msgstr "kann OID der Funktion lo_lseek64 nicht ermitteln\n" - -#: fe-lobj.c:521 -msgid "cannot determine OID of function lo_create\n" -msgstr "kann OID der Funktion lo_create nicht ermitteln\n" - -#: fe-lobj.c:600 -msgid "cannot determine OID of function lo_tell64\n" -msgstr "kann OID der Funktion lo_tell64 nicht ermitteln\n" - -#: fe-lobj.c:706 fe-lobj.c:815 +#: fe-lobj.c:678 fe-lobj.c:789 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "konnte Datei »%s« nicht öffnen: %s\n" -#: fe-lobj.c:761 +#: fe-lobj.c:734 #, c-format msgid "could not read from file \"%s\": %s\n" msgstr "konnte nicht aus Datei »%s« lesen: %s\n" -#: fe-lobj.c:835 fe-lobj.c:859 +#: fe-lobj.c:810 fe-lobj.c:834 #, c-format msgid "could not write to file \"%s\": %s\n" msgstr "konnte nicht in Datei »%s« schreiben: %s\n" -#: fe-lobj.c:946 +#: fe-lobj.c:920 msgid "query to initialize large object functions did not return data\n" msgstr "Abfrage zur Initialisierung der Large-Object-Funktionen ergab keine Daten\n" -#: fe-lobj.c:995 -msgid "cannot determine OID of function lo_open\n" -msgstr "kann OID der Funktion lo_open nicht ermitteln\n" - -#: fe-lobj.c:1002 -msgid "cannot determine OID of function lo_close\n" -msgstr "kann OID der Funktion lo_close nicht ermitteln\n" - -#: fe-lobj.c:1009 -msgid "cannot determine OID of function lo_creat\n" -msgstr "kann OID der Funktion lo_creat nicht ermitteln\n" - -#: fe-lobj.c:1016 -msgid "cannot determine OID of function lo_unlink\n" -msgstr "kann OID der Funktion lo_unlink nicht ermitteln\n" - -#: fe-lobj.c:1023 -msgid "cannot determine OID of function lo_lseek\n" -msgstr "kann OID der Funktion lo_lseek nicht ermitteln\n" - -#: fe-lobj.c:1030 -msgid "cannot determine OID of function lo_tell\n" -msgstr "kann OID der Funktion lo_tell nicht ermitteln\n" - -#: fe-lobj.c:1037 -msgid "cannot determine OID of function loread\n" -msgstr "kann OID der Funktion loread nicht ermitteln\n" - -#: fe-lobj.c:1044 -msgid "cannot determine OID of function lowrite\n" -msgstr "kann OID der Funktion lowrite nicht ermitteln\n" - -#: fe-misc.c:289 +#: fe-misc.c:242 #, c-format msgid "integer of size %lu not supported by pqGetInt" msgstr "Integer der Größe %lu wird von pqGetInt nicht unterstützt" -#: fe-misc.c:325 +#: fe-misc.c:275 #, c-format msgid "integer of size %lu not supported by pqPutInt" msgstr "Integer der Größe %lu wird von pqPutInt nicht unterstützt" -#: fe-misc.c:636 fe-misc.c:857 +#: fe-misc.c:576 fe-misc.c:822 msgid "connection not open\n" msgstr "Verbindung nicht offen\n" -#: fe-misc.c:805 fe-secure-openssl.c:209 fe-secure-openssl.c:316 -#: fe-secure.c:267 fe-secure.c:383 +#: fe-misc.c:755 fe-secure-openssl.c:209 fe-secure-openssl.c:316 +#: fe-secure.c:260 fe-secure.c:373 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -870,184 +833,146 @@ msgstr "" "\tDas heißt wahrscheinlich, dass der Server abnormal beendete\n" "\tbevor oder während die Anweisung bearbeitet wurde.\n" -#: fe-misc.c:1044 +#: fe-misc.c:1015 msgid "timeout expired\n" msgstr "Timeout abgelaufen\n" -#: fe-misc.c:1089 +#: fe-misc.c:1060 msgid "invalid socket\n" msgstr "ungültiges Socket\n" -#: fe-misc.c:1112 +#: fe-misc.c:1083 #, c-format -msgid "select() failed: %s\n" -msgstr "select() fehlgeschlagen: %s\n" +msgid "%s() failed: %s\n" +msgstr "%s() fehlgeschlagen: %s\n" -#: fe-protocol2.c:87 -#, c-format -msgid "invalid setenv state %c, probably indicative of memory corruption\n" -msgstr "ungültiger Setenv-Zustand %c, möglicherweise ein Speicherproblem\n" - -#: fe-protocol2.c:384 -#, c-format -msgid "invalid state %c, probably indicative of memory corruption\n" -msgstr "ungültiger Zustand %c, möglicherweise ein Speicherproblem\n" - -#: fe-protocol2.c:473 fe-protocol3.c:183 +#: fe-protocol3.c:196 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "Nachricht vom Typ 0x%02x kam vom Server im Ruhezustand" -#: fe-protocol2.c:523 -#, c-format -msgid "unexpected character %c following empty query response (\"I\" message)" -msgstr "unerwartetes Zeichen %c kam nach Antwort auf leere Anfrage (»I«-Nachricht)" - -#: fe-protocol2.c:589 -#, c-format -msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" -msgstr "Server sendete Daten (»D«-Nachricht) ohne vorherige Zeilenbeschreibung (»T«-Nachricht)" - -#: fe-protocol2.c:607 -#, c-format -msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" -msgstr "Server sendete binäre Daten (»B«-Nachricht) ohne vorherige Zeilenbeschreibung (»T«-Nachricht)" +#: fe-protocol3.c:403 +msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" +msgstr "Server sendete Daten (»D«-Nachricht) ohne vorherige Zeilenbeschreibung (»T«-Nachricht)\n" -#: fe-protocol2.c:626 fe-protocol3.c:408 +#: fe-protocol3.c:446 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "unerwartete Antwort vom Server; erstes empfangenes Zeichen war »%c«\n" -#: fe-protocol2.c:755 fe-protocol2.c:930 fe-protocol3.c:622 fe-protocol3.c:849 -msgid "out of memory for query result" -msgstr "Speicher für Anfrageergebnis aufgebraucht" - -#: fe-protocol2.c:1408 -#, c-format -msgid "lost synchronization with server, resetting connection" -msgstr "Synchronisation mit Server verloren, Verbindung wird zurückgesetzt" - -#: fe-protocol2.c:1530 fe-protocol2.c:1562 fe-protocol3.c:2095 -#, c-format -msgid "protocol error: id=0x%x\n" -msgstr "Protokollfehler: id=0x%x\n" - -#: fe-protocol3.c:365 -msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" -msgstr "Server sendete Daten (»D«-Nachricht) ohne vorherige Zeilenbeschreibung (»T«-Nachricht)\n" - -#: fe-protocol3.c:429 +#: fe-protocol3.c:471 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "Nachrichteninhalt stimmt nicht mit Länge in Nachrichtentyp »%c« überein\n" -#: fe-protocol3.c:449 +#: fe-protocol3.c:491 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "Synchronisation mit Server verloren: Nachrichtentyp »%c« empfangen, Länge %d\n" -#: fe-protocol3.c:500 fe-protocol3.c:540 +#: fe-protocol3.c:543 fe-protocol3.c:583 msgid "insufficient data in \"T\" message" msgstr "nicht genug Daten in »T«-Nachricht" -#: fe-protocol3.c:573 -msgid "extraneous data in \"T\" message" -msgstr "zu viele Daten in »T«-Nachricht" +#: fe-protocol3.c:654 fe-protocol3.c:860 +msgid "out of memory for query result" +msgstr "Speicher für Anfrageergebnis aufgebraucht" -#: fe-protocol3.c:686 -msgid "extraneous data in \"t\" message" -msgstr "zu viele Daten in »t«-Nachricht" +#: fe-protocol3.c:723 +msgid "insufficient data in \"t\" message" +msgstr "nicht genug Daten in »t«-Nachricht" -#: fe-protocol3.c:757 fe-protocol3.c:789 fe-protocol3.c:807 +#: fe-protocol3.c:782 fe-protocol3.c:814 fe-protocol3.c:832 msgid "insufficient data in \"D\" message" msgstr "nicht genug Daten in »D«-Nachricht" -#: fe-protocol3.c:763 +#: fe-protocol3.c:788 msgid "unexpected field count in \"D\" message" msgstr "unerwartete Feldzahl in »D«-Nachricht" -#: fe-protocol3.c:816 -msgid "extraneous data in \"D\" message" -msgstr "zu viele Daten in »D«-Nachricht" - -#: fe-protocol3.c:1008 +#: fe-protocol3.c:1029 msgid "no error message available\n" msgstr "keine Fehlermeldung verfügbar\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1056 fe-protocol3.c:1075 +#: fe-protocol3.c:1077 fe-protocol3.c:1096 #, c-format msgid " at character %s" msgstr " bei Zeichen %s" -#: fe-protocol3.c:1088 +#: fe-protocol3.c:1109 #, c-format msgid "DETAIL: %s\n" msgstr "DETAIL: %s\n" -#: fe-protocol3.c:1091 +#: fe-protocol3.c:1112 #, c-format msgid "HINT: %s\n" msgstr "TIP: %s\n" -#: fe-protocol3.c:1094 +#: fe-protocol3.c:1115 #, c-format msgid "QUERY: %s\n" msgstr "ANFRAGE: %s\n" -#: fe-protocol3.c:1101 +#: fe-protocol3.c:1122 #, c-format msgid "CONTEXT: %s\n" msgstr "KONTEXT: %s\n" -#: fe-protocol3.c:1110 +#: fe-protocol3.c:1131 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "SCHEMANAME: %s\n" -#: fe-protocol3.c:1114 +#: fe-protocol3.c:1135 #, c-format msgid "TABLE NAME: %s\n" msgstr "TABELLENNAME: %s\n" -#: fe-protocol3.c:1118 +#: fe-protocol3.c:1139 #, c-format msgid "COLUMN NAME: %s\n" msgstr "SPALTENNAME: %s\n" -#: fe-protocol3.c:1122 +#: fe-protocol3.c:1143 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "DATENTYPNAME: %s\n" -#: fe-protocol3.c:1126 +#: fe-protocol3.c:1147 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "CONSTRAINT-NAME: %s\n" -#: fe-protocol3.c:1138 +#: fe-protocol3.c:1159 msgid "LOCATION: " msgstr "ORT: " -#: fe-protocol3.c:1140 +#: fe-protocol3.c:1161 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1163 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1337 +#: fe-protocol3.c:1358 #, c-format msgid "LINE %d: " msgstr "ZEILE %d: " -#: fe-protocol3.c:1732 +#: fe-protocol3.c:1757 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: Text COPY OUT nicht ausgeführt\n" +#: fe-protocol3.c:2123 +#, c-format +msgid "protocol error: id=0x%x\n" +msgstr "Protokollfehler: id=0x%x\n" + #: fe-secure-common.c:124 msgid "SSL certificate's name contains embedded null\n" msgstr "Name im SSL-Zertifikat enthält Null-Byte\n" @@ -1095,24 +1020,24 @@ msgstr "eingehende GSSAPI-Nachricht verwendete keine Vertraulichkeit\n" msgid "could not initiate GSSAPI security context" msgstr "konnte GSSAPI-Sicherheitskontext nicht initiieren" -#: fe-secure-gssapi.c:673 +#: fe-secure-gssapi.c:670 msgid "GSSAPI size check error" msgstr "GSSAPI-Fehler bei der Größenprüfung" -#: fe-secure-gssapi.c:684 +#: fe-secure-gssapi.c:681 msgid "GSSAPI context establishment error" msgstr "GSSAPI-Fehler beim Einrichten des Kontexts" -#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1291 +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1329 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "SSL-SYSCALL-Fehler: %s\n" -#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1295 +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1333 msgid "SSL SYSCALL error: EOF detected\n" msgstr "SSL-SYSCALL-Fehler: Dateiende entdeckt\n" -#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1304 +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1342 #, c-format msgid "SSL error: %s\n" msgstr "SSL-Fehler: %s\n" @@ -1121,7 +1046,7 @@ msgstr "SSL-Fehler: %s\n" msgid "SSL connection has been closed unexpectedly\n" msgstr "SSL-Verbindung wurde unerwartet geschlossen\n" -#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1313 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1392 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "unbekannter SSL-Fehlercode: %d\n" @@ -1143,37 +1068,37 @@ msgstr "konnte Hash des Zertifikats der Gegenstelle nicht erzeugen\n" msgid "SSL certificate's name entry is missing\n" msgstr "Namenseintrag fehlt im SSL-Zertifikat\n" -#: fe-secure-openssl.c:815 +#: fe-secure-openssl.c:822 #, c-format msgid "could not create SSL context: %s\n" msgstr "konnte SSL-Kontext nicht erzeugen: %s\n" -#: fe-secure-openssl.c:854 +#: fe-secure-openssl.c:861 #, c-format -msgid "invalid value \"%s\" for minimum version of SSL protocol\n" +msgid "invalid value \"%s\" for minimum SSL protocol version\n" msgstr "ungültiger Wert »%s« für minimale SSL-Protokollversion\n" -#: fe-secure-openssl.c:865 +#: fe-secure-openssl.c:872 #, c-format -msgid "could not set minimum version of SSL protocol: %s\n" +msgid "could not set minimum SSL protocol version: %s\n" msgstr "konnte minimale SSL-Protokollversion nicht setzen: %s\n" -#: fe-secure-openssl.c:883 +#: fe-secure-openssl.c:890 #, c-format -msgid "invalid value \"%s\" for maximum version of SSL protocol\n" +msgid "invalid value \"%s\" for maximum SSL protocol version\n" msgstr "ungültiger Wert »%s« für maximale SSL-Protokollversion\n" -#: fe-secure-openssl.c:894 +#: fe-secure-openssl.c:901 #, c-format -msgid "could not set maximum version of SSL protocol: %s\n" +msgid "could not set maximum SSL protocol version: %s\n" msgstr "konnte maximale SSL-Protokollversion nicht setzen: %s\n" -#: fe-secure-openssl.c:930 +#: fe-secure-openssl.c:937 #, c-format msgid "could not read root certificate file \"%s\": %s\n" msgstr "konnte Root-Zertifikat-Datei »%s« nicht lesen: %s\n" -#: fe-secure-openssl.c:974 +#: fe-secure-openssl.c:990 msgid "" "could not get home directory to locate root certificate file\n" "Either provide the file or change sslmode to disable server certificate verification.\n" @@ -1181,7 +1106,7 @@ msgstr "" "konnte Home-Verzeichnis nicht ermitteln, um Root-Zertifikat-Datei zu finden\n" "Legen Sie entweder die Datei an oder ändern Sie sslmode, um die Überprüfung der Serverzertifikate abzuschalten.\n" -#: fe-secure-openssl.c:978 +#: fe-secure-openssl.c:994 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -1190,87 +1115,97 @@ msgstr "" "Root-Zertifikat-Datei »%s« existiert nicht\n" "Legen Sie entweder die Datei an oder ändern Sie sslmode, um die Überprüfung der Serverzertifikate abzuschalten.\n" -#: fe-secure-openssl.c:1009 +#: fe-secure-openssl.c:1025 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "konnte Zertifikatdatei »%s« nicht öffnen: %s\n" -#: fe-secure-openssl.c:1028 +#: fe-secure-openssl.c:1044 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "konnte Zertifikatdatei »%s« nicht lesen: %s\n" -#: fe-secure-openssl.c:1053 +#: fe-secure-openssl.c:1069 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "konnte SSL-Verbindung nicht aufbauen: %s\n" -#: fe-secure-openssl.c:1107 +#: fe-secure-openssl.c:1099 +#, c-format +msgid "could not set SSL Server Name Indication (SNI): %s\n" +msgstr "konnte SSL-Server-Name-Indication (SNI) nicht setzen: %s\n" + +#: fe-secure-openssl.c:1145 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "konnte SSL-Engine »%s« nicht laden: %s\n" -#: fe-secure-openssl.c:1119 +#: fe-secure-openssl.c:1157 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "konnte SSL-Engine »%s« nicht initialisieren: %s\n" -#: fe-secure-openssl.c:1135 +#: fe-secure-openssl.c:1173 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "konnte privaten SSL-Schlüssel »%s« nicht von Engine »%s« lesen: %s\n" -#: fe-secure-openssl.c:1149 +#: fe-secure-openssl.c:1187 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "konnte privaten SSL-Schlüssel »%s« nicht von Engine »%s« laden: %s\n" -#: fe-secure-openssl.c:1186 +#: fe-secure-openssl.c:1224 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "Zertifikat vorhanden, aber keine private Schlüsseldatei »%s«\n" -#: fe-secure-openssl.c:1194 +#: fe-secure-openssl.c:1232 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "WARNUNG: private Schlüsseldatei »%s« erlaubt Lesezugriff für Gruppe oder Andere; Rechte sollten u=rw (0600) oder weniger sein\n" -#: fe-secure-openssl.c:1219 +#: fe-secure-openssl.c:1257 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "konnte private Schlüsseldatei »%s« nicht laden: %s\n" -#: fe-secure-openssl.c:1237 +#: fe-secure-openssl.c:1275 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "Zertifikat passt nicht zur privaten Schlüsseldatei »%s«: %s\n" -#: fe-secure-openssl.c:1332 +#: fe-secure-openssl.c:1375 +#, c-format +msgid "This may indicate that the server does not support any SSL protocol version between %s and %s.\n" +msgstr "Das zeigt möglicherweise an, dass der Server keine SSL-Protokollversion zwischen %s und %s unterstützt.\n" + +#: fe-secure-openssl.c:1411 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "Zertifikat konnte nicht ermittelt werden: %s\n" -#: fe-secure-openssl.c:1421 +#: fe-secure-openssl.c:1517 #, c-format msgid "no SSL error reported" msgstr "kein SSL-Fehler berichtet" -#: fe-secure-openssl.c:1430 +#: fe-secure-openssl.c:1526 #, c-format msgid "SSL error code %lu" msgstr "SSL-Fehlercode %lu" -#: fe-secure-openssl.c:1677 +#: fe-secure-openssl.c:1773 #, c-format msgid "WARNING: sslpassword truncated\n" msgstr "WARNUNG: sslpassword abgeschnitten\n" -#: fe-secure.c:275 +#: fe-secure.c:267 #, c-format msgid "could not receive data from server: %s\n" msgstr "konnte keine Daten vom Server empfangen: %s\n" -#: fe-secure.c:390 +#: fe-secure.c:380 #, c-format msgid "could not send data to server: %s\n" msgstr "konnte keine Daten an den Server senden: %s\n" @@ -1279,3 +1214,15 @@ msgstr "konnte keine Daten an den Server senden: %s\n" #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "unbekannter Socket-Fehler: 0x%08X/%d" + +#~ msgid "" +#~ "could not connect to server: %s\n" +#~ "\tIs the server running on host \"%s\" (%s) and accepting\n" +#~ "\tTCP/IP connections on port %s?\n" +#~ msgstr "" +#~ "konnte nicht mit dem Server verbinden: %s\n" +#~ "\tLäuft der Server auf dem Host »%s« (%s) und akzeptiert er\n" +#~ "\tTCP/IP-Verbindungen auf Port %s?\n" + +#~ msgid "could not make a writable connection to server \"%s:%s\"\n" +#~ msgstr "konnte keine schreibbare Verbindung zum Server »%s:%s« aufbauen\n" diff --git a/src/interfaces/libpq/po/el.po b/src/interfaces/libpq/po/el.po new file mode 100644 index 0000000000000..93fe8d6f69b62 --- /dev/null +++ b/src/interfaces/libpq/po/el.po @@ -0,0 +1,1422 @@ +# Greek message translation file for libpq +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the libpq (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: libpq (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-03-12 17:39+0000\n" +"PO-Revision-Date: 2021-04-23 09:35+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"Last-Translator: Georgios Kokolatos \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: el\n" + +#: fe-auth-scram.c:212 +msgid "malformed SCRAM message (empty message)\n" +msgstr "κακοσχηματισμένο μήνυμα SCRAM (κενό μήνυμα)\n" + +#: fe-auth-scram.c:218 +msgid "malformed SCRAM message (length mismatch)\n" +msgstr "κακοσχηματισμένο μήνυμα SCRAM (αναντιστοιχία μήκους)\n" + +#: fe-auth-scram.c:265 +msgid "incorrect server signature\n" +msgstr "λανθασμένη υπογραφή διακομιστή\n" + +#: fe-auth-scram.c:274 +msgid "invalid SCRAM exchange state\n" +msgstr "άκυρη κατάσταση ανταλλαγής SCRAM\n" + +#: fe-auth-scram.c:296 +#, c-format +msgid "malformed SCRAM message (attribute \"%c\" expected)\n" +msgstr "κακοσχηματισμένο μήνυμα SCRAM (αναμένεται χαρακτηριστικό \"%c\")\n" + +#: fe-auth-scram.c:305 +#, c-format +msgid "" +"malformed SCRAM message (expected character \"=\" for attribute \"%c\")\n" +msgstr "" +"κακοσχηματισμένο μήνυμα SCRAM (αναμένεται χαρακτήρας “=“ για το " +"χαρακτηριστικό \"%c\")\n" + +#: fe-auth-scram.c:346 +msgid "could not generate nonce\n" +msgstr "δεν δύναται να δημιουργήσει nonce\n" + +#: fe-auth-scram.c:356 fe-auth-scram.c:431 fe-auth-scram.c:579 +#: fe-auth-scram.c:600 fe-auth-scram.c:626 fe-auth-scram.c:641 +#: fe-auth-scram.c:691 fe-auth-scram.c:725 fe-auth.c:289 fe-auth.c:359 +#: fe-auth.c:394 fe-auth.c:611 fe-auth.c:770 fe-auth.c:1129 fe-auth.c:1277 +#: fe-connect.c:892 fe-connect.c:1419 fe-connect.c:1595 fe-connect.c:2200 +#: fe-connect.c:2223 fe-connect.c:2957 fe-connect.c:4605 fe-connect.c:4861 +#: fe-connect.c:4980 fe-connect.c:5233 fe-connect.c:5313 fe-connect.c:5412 +#: fe-connect.c:5668 fe-connect.c:5697 fe-connect.c:5769 fe-connect.c:5793 +#: fe-connect.c:5811 fe-connect.c:5912 fe-connect.c:5921 fe-connect.c:6277 +#: fe-connect.c:6427 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 +#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1207 fe-protocol3.c:961 +#: fe-protocol3.c:1665 fe-secure-common.c:110 fe-secure-gssapi.c:504 +#: fe-secure-openssl.c:440 fe-secure-openssl.c:1091 +msgid "out of memory\n" +msgstr "έλλειψη μνήμης\n" + +#: fe-auth-scram.c:364 +msgid "could not encode nonce\n" +msgstr "δεν δύναται να κωδικοποιήσει nonce\n" + +#: fe-auth-scram.c:563 +msgid "could not encode client proof\n" +msgstr "δεν δύναται να κωδικοποιήσει την απόδειξη του πελάτη\n" + +#: fe-auth-scram.c:618 +msgid "invalid SCRAM response (nonce mismatch)\n" +msgstr "μη έγκυρη απόκριση SCRAM (ασυμφωνία nonce)\n" + +#: fe-auth-scram.c:651 +msgid "malformed SCRAM message (invalid salt)\n" +msgstr "κακοσχηματισμένο μήνυμα SCRAM (άκυρο salt)\n" + +#: fe-auth-scram.c:665 +msgid "malformed SCRAM message (invalid iteration count)\n" +msgstr "κακοσχηματισμένο μήνυμα SCRAM (άκυρη μέτρηση επαναλήψεων)\n" + +#: fe-auth-scram.c:671 +msgid "malformed SCRAM message (garbage at end of server-first-message)\n" +msgstr "" +"κακοσχηματισμένο μήνυμα SCRAM (σκουπίδια στο τέλος του πρώτου-μηνύματος-" +"διακομιστή)\n" + +#: fe-auth-scram.c:702 +#, c-format +msgid "error received from server in SCRAM exchange: %s\n" +msgstr "ελήφθει σφάλμα από τον διακομιστή κατά την ανταλλαγή SCRAM: %s\n" + +#: fe-auth-scram.c:718 +msgid "malformed SCRAM message (garbage at end of server-final-message)\n" +msgstr "" +"κακοσχηματισμένο μήνυμα SCRAM (σκουπίδια στο τέλος του τελικού-μηνύματος-" +"διακομιστή)\n" + +#: fe-auth-scram.c:737 +msgid "malformed SCRAM message (invalid server signature)\n" +msgstr "κακοσχηματισμένο μήνυμα SCRAM (άκυρη υπογραφή διακομιστή)\n" + +#: fe-auth.c:76 +#, c-format +msgid "out of memory allocating GSSAPI buffer (%d)\n" +msgstr "" +"η μνήμη δεν επαρκεί για την εκχώρηση της ενδιάμεσης μνήμης του GSSAPI (%d)\n" + +#: fe-auth.c:131 +msgid "GSSAPI continuation error" +msgstr "σφάλμα συνέχισης GSSAPI" + +#: fe-auth.c:158 fe-auth.c:388 fe-gssapi-common.c:98 fe-secure-common.c:98 +msgid "host name must be specified\n" +msgstr "πρέπει να καθοριστεί το όνομα κεντρικού υπολογιστή\n" + +#: fe-auth.c:165 +msgid "duplicate GSS authentication request\n" +msgstr "διπλότυπη αίτηση ελέγχου ταυτότητας GSS\n" + +#: fe-auth.c:230 +#, c-format +msgid "out of memory allocating SSPI buffer (%d)\n" +msgstr "" +"η μνήμη δεν επαρκεί για την εκχώρηση της ενδιάμεσης μνήμης του SSPI (%d)\n" + +#: fe-auth.c:278 +msgid "SSPI continuation error" +msgstr "σφάλμα συνέχισης SSPI" + +#: fe-auth.c:349 +msgid "duplicate SSPI authentication request\n" +msgstr "διπλότυπη αίτηση ελέγχου ταυτότητας SSPI\n" + +#: fe-auth.c:374 +msgid "could not acquire SSPI credentials" +msgstr "δεν δύναται η απόκτηση διαπιστευτηρίων SSPI" + +#: fe-auth.c:429 +msgid "channel binding required, but SSL not in use\n" +msgstr "απαιτείται σύνδεση καναλιού, αλλά δεν χρησιμοποιείται SSL\n" + +#: fe-auth.c:436 +msgid "duplicate SASL authentication request\n" +msgstr "διπλότυπη αίτηση ελέγχου ταυτότητας SASL\n" + +#: fe-auth.c:492 +msgid "channel binding is required, but client does not support it\n" +msgstr "απαιτείται σύνδεση καναλιού, αλλά ο πελάτης δεν την υποστηρίζει\n" + +#: fe-auth.c:509 +msgid "" +"server offered SCRAM-SHA-256-PLUS authentication over a non-SSL connection\n" +msgstr "" +"ο διακομιστής προσέφερε έλεγχο ταυτότητας SCRAM-SHA-256-PLUS μέσω σύνδεσης " +"που δεν είναι SSL\n" + +#: fe-auth.c:521 +msgid "none of the server's SASL authentication mechanisms are supported\n" +msgstr "" +"δεν υποστηρίζεται κανένας από τους μηχανισμούς ελέγχου ταυτότητας SASL του " +"διακομιστή\n" + +#: fe-auth.c:529 +msgid "" +"channel binding is required, but server did not offer an authentication " +"method that supports channel binding\n" +msgstr "" +"απαιτείται σύνδεση καναλιού, αλλά ο διακομιστής δεν προσέφερε καμία μέθοδο " +"ελέγχου ταυτότητας που να υποστηρίζει σύνδεση καναλιού\n" + +#: fe-auth.c:635 +#, c-format +msgid "out of memory allocating SASL buffer (%d)\n" +msgstr "" +"η μνήμη δεν επαρκεί για την εκχώρηση της ενδιάμεσης μνήμης του SASL (%d)\n" + +#: fe-auth.c:660 +msgid "" +"AuthenticationSASLFinal received from server, but SASL authentication was " +"not completed\n" +msgstr "" +"παραλήφθηκε AuthenticationSASLFinal από το διακομιστή, αλλά ο έλεγχος " +"ταυτότητας SASL έχει ολοκληρωθεί\n" + +#: fe-auth.c:737 +msgid "SCM_CRED authentication method not supported\n" +msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης SCM_CRED\n" + +#: fe-auth.c:836 +msgid "" +"channel binding required, but server authenticated client without channel " +"binding\n" +msgstr "" +"απαιτείται σύνδεση καναλιού, αλλά ο διακομιστής πιστοποίησε τον πελάτη χωρίς " +"σύνδεση καναλιού\n" + +#: fe-auth.c:842 +msgid "" +"channel binding required but not supported by server's authentication " +"request\n" +msgstr "" +"απαιτείται σύνδεση καναλιού αλλά αυτή δεν υποστηρίζεται από την αίτηση " +"ελέγχου ταυτότητας του διακομιστή\n" + +#: fe-auth.c:875 +msgid "Kerberos 4 authentication not supported\n" +msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης Kerberos 4\n" + +#: fe-auth.c:880 +msgid "Kerberos 5 authentication not supported\n" +msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης Kerberos 5\n" + +#: fe-auth.c:951 +msgid "GSSAPI authentication not supported\n" +msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης GSSAPI\n" + +#: fe-auth.c:983 +msgid "SSPI authentication not supported\n" +msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης SSPI\n" + +#: fe-auth.c:991 +msgid "Crypt authentication not supported\n" +msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης Crypt\n" + +#: fe-auth.c:1057 +#, c-format +msgid "authentication method %u not supported\n" +msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης %u\n" + +#: fe-auth.c:1104 +#, c-format +msgid "user name lookup failure: error code %lu\n" +msgstr "αποτυχία αναζήτησης ονόματος χρήστη: κωδικός σφάλματος % lu\n" + +#: fe-auth.c:1114 fe-connect.c:2834 +#, c-format +msgid "could not look up local user ID %d: %s\n" +msgstr "δεν ήταν δυνατή η αναζήτηση ID τοπικού χρήστη %d: %s\n" + +#: fe-auth.c:1119 fe-connect.c:2839 +#, c-format +msgid "local user with ID %d does not exist\n" +msgstr "δεν υπάρχει τοπικός χρήστης με ID %d\n" + +#: fe-auth.c:1221 +msgid "unexpected shape of result set returned for SHOW\n" +msgstr "" +"μη αναμενόμενο σχήμα συνόλου αποτελεσμάτων που επιστράφηκε από την εντολή " +"SHOW\n" + +#: fe-auth.c:1230 +msgid "password_encryption value too long\n" +msgstr "πολύ μακρυά τιμή password_encryption\n" + +#: fe-auth.c:1270 +#, c-format +msgid "unrecognized password encryption algorithm \"%s\"\n" +msgstr "μη αναγνωρίσιμος αλγόριθμος κρυπτογράφησης “%s” κωδικού πρόσβασης\n" + +#: fe-connect.c:1075 +#, c-format +msgid "could not match %d host names to %d hostaddr values\n" +msgstr "" +"δεν μπόρεσε να ταιριάξει %d ονομασίες διακομιστών με %d τιμές hostaddr\n" + +#: fe-connect.c:1156 +#, c-format +msgid "could not match %d port numbers to %d hosts\n" +msgstr "δεν μπόρεσε να ταιριάξει %d αριθμούς θυρών με %d διακομιστές\n" + +#: fe-connect.c:1249 +#, c-format +msgid "invalid channel_binding value: \"%s\"\n" +msgstr "άκυρη τιμή channel_binding: “%s”\n" + +#: fe-connect.c:1275 +#, c-format +msgid "invalid sslmode value: \"%s\"\n" +msgstr "άκυρη τιμή sslmode: “%s”\n" + +#: fe-connect.c:1296 +#, c-format +msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" +msgstr "" +"η τιμή SSLmode \"%s\" είναι άκυρη όταν η υποστήριξη SSL δεν έχει " +"μεταγλωττιστεί (compiled)\n" + +#: fe-connect.c:1317 +#, c-format +msgid "invalid ssl_min_protocol_version value: \"%s\"\n" +msgstr "άκυρη τιμή ssl_min_protocol_version: “%s”\n" + +#: fe-connect.c:1325 +#, c-format +msgid "invalid ssl_max_protocol_version value: \"%s\"\n" +msgstr "άκυρη τιμή ssl_max_protocol_version: “%s”\n" + +#: fe-connect.c:1342 +msgid "invalid SSL protocol version range\n" +msgstr "άκυρο εύρος εκδόσεων πρωτοκόλλου SSL\n" + +#: fe-connect.c:1357 +#, c-format +msgid "invalid gssencmode value: \"%s\"\n" +msgstr "άκυρη τιμή gssencmode: “%s”\n" + +#: fe-connect.c:1366 +#, c-format +msgid "" +"gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" +msgstr "" +"η τιμή SSLmode \"%s\" είναι άκυρη όταν η υποστήριξη GSSAPI δεν έχει " +"μεταγλωττιστεί (compiled)\n" + +#: fe-connect.c:1401 +#, c-format +msgid "invalid target_session_attrs value: \"%s\"\n" +msgstr "άκυρη τιμή target_session_attrs: “%s”\n" + +#: fe-connect.c:1619 +#, c-format +msgid "could not set socket to TCP no delay mode: %s\n" +msgstr "" +"δεν μπόρεσε να ορίσει τον υποδοχέα σε λειτουργία TCP χωρίς καθυστέρηση: %s\n" + +#: fe-connect.c:1680 +#, c-format +msgid "" +"could not connect to server: %s\n" +"\tIs the server running locally and accepting\n" +"\tconnections on Unix domain socket \"%s\"?\n" +msgstr "" +"δεν ήταν δυνατή η σύνδεση με το διακομιστή: %s\n" +"\tΕκτελείται τοπικά ο διακομιστής και αποδέχεται\n" +"\tσυνδέσεις στην υποδοχή πεδίου Unix \"%s\";\n" + +#: fe-connect.c:1717 +#, c-format +msgid "" +"could not connect to server: %s\n" +"\tIs the server running on host \"%s\" (%s) and accepting\n" +"\tTCP/IP connections on port %s?\n" +msgstr "" +"δεν ήταν δυνατή η σύνδεση με το διακομιστή: %s\n" +"\tΕκτελείται ο διακομιστής στον κεντρικό υπολογιστή ”%s” (%s) και " +"αποδέχεται\n" +"\tσυνδέσεις TCP/IP στην θύρα %s;\n" + +#: fe-connect.c:1725 +#, c-format +msgid "" +"could not connect to server: %s\n" +"\tIs the server running on host \"%s\" and accepting\n" +"\tTCP/IP connections on port %s?\n" +msgstr "" +"δεν ήταν δυνατή η σύνδεση με το διακομιστή: %s\n" +"\tΕκτελείται ο διακομιστής στον κεντρικό υπολογιστή \"%s\" και αποδέχεται\n" +"\tσυνδέσεις TCP/IP στην θύρα %s;\n" + +#: fe-connect.c:1795 +#, c-format +msgid "invalid integer value \"%s\" for connection option \"%s\"\n" +msgstr "άκυρη τιμή ακεραίου ”%s” για την επιλογή σύνδεσης “%s”\n" + +#: fe-connect.c:1825 fe-connect.c:1859 fe-connect.c:1894 fe-connect.c:1981 +#: fe-connect.c:2623 +#, c-format +msgid "setsockopt(%s) failed: %s\n" +msgstr "setsockopt(%s) απέτυχε: %s\n" + +#: fe-connect.c:1947 +#, c-format +msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" +msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) απέτυχε: %ui\n" + +#: fe-connect.c:2313 +msgid "invalid connection state, probably indicative of memory corruption\n" +msgstr "μη έγκυρη κατάσταση σύνδεσης, πιθανώς ενδεικτική αλλοίωσης μνήμης\n" + +#: fe-connect.c:2379 +#, c-format +msgid "invalid port number: \"%s\"\n" +msgstr "μη έγκυρος αριθμός πύλης: “%s”\n" + +#: fe-connect.c:2395 +#, c-format +msgid "could not translate host name \"%s\" to address: %s\n" +msgstr "" +"δεν ήταν δυνατή η μετάφραση του ονόματος κεντρικού υπολογιστή \"%s\" στη " +"διεύθυνση: %s\n" + +#: fe-connect.c:2408 +#, c-format +msgid "could not parse network address \"%s\": %s\n" +msgstr "δεν ήταν δυνατή η ανάλυση της διεύθυνσης δικτύου \"%s\": %s\n" + +#: fe-connect.c:2421 +#, c-format +msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" +msgstr "" +"η διαδρομή υποδοχής τομέα Unix \"%s\" είναι πολύ μακρυά (μέγιστο %d bytes)\n" + +#: fe-connect.c:2436 +#, c-format +msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" +msgstr "" +"δεν ήταν δυνατή η μετάφραση της διαδρομής υποδοχής πεδίου-Unix \"%s\" στη " +"διεύθυνση: %s\n" + +#: fe-connect.c:2560 +#, c-format +msgid "could not create socket: %s\n" +msgstr "δεν ήταν δυνατή η δημιουργία υποδοχέα: %s\n" + +#: fe-connect.c:2582 +#, c-format +msgid "could not set socket to nonblocking mode: %s\n" +msgstr "" +"δεν ήταν δυνατή η ρύθμιση της υποδοχής σε λειτουργία μη αποκλεισμού: %s\n" + +#: fe-connect.c:2592 +#, c-format +msgid "could not set socket to close-on-exec mode: %s\n" +msgstr "" +"δεν ήταν δυνατή η ρύθμιση της υποδοχής σε λειτουργία close-on-exec: %s\n" + +#: fe-connect.c:2610 +msgid "keepalives parameter must be an integer\n" +msgstr "η παράμετρος keepalives πρέπει να είναι ακέραιος\n" + +#: fe-connect.c:2750 +#, c-format +msgid "could not get socket error status: %s\n" +msgstr "δεν ήταν δυνατή η απόκτηση κατάστασης σφάλματος της υποδοχής: %s\n" + +#: fe-connect.c:2778 +#, c-format +msgid "could not get client address from socket: %s\n" +msgstr "δεν ήταν δυνατή η απόκτηση διεύθυνσης πελάτη από την υποδοχή: %s\n" + +#: fe-connect.c:2820 +msgid "requirepeer parameter is not supported on this platform\n" +msgstr "η παράμετρος requirepeer δεν υποστηρίζεται από την παρούσα πλατφόρμα\n" + +#: fe-connect.c:2823 +#, c-format +msgid "could not get peer credentials: %s\n" +msgstr "δεν ήταν δυνατή η απόκτηση διαπιστευτηρίων από peer: %s\n" + +#: fe-connect.c:2847 +#, c-format +msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" +msgstr "" +"το requirepeer καθορίζει \"%s\", αλλά το πραγματικό όνομα ομότιμου χρήστη " +"είναι \"%s\"\n" + +#: fe-connect.c:2887 +#, c-format +msgid "could not send GSSAPI negotiation packet: %s\n" +msgstr "δεν ήταν δυνατή η αποστολή GSSAPI πακέτου διαπραγμάτευσης: %s\n" + +#: fe-connect.c:2899 +msgid "" +"GSSAPI encryption required but was impossible (possibly no credential cache, " +"no server support, or using a local socket)\n" +msgstr "" +"απαιτείται κρυπτογράφηση GSSAPI, αλλά ήταν αδύνατη (πιθανώς απουσία cache " +"διαπιστευτηρίων, απουσία υποστήριξης διακομιστή, ή χρησιμοποιεί τοπική " +"υποδοχή)\n" + +#: fe-connect.c:2931 +#, c-format +msgid "could not send SSL negotiation packet: %s\n" +msgstr "" +"δεν ήταν δυνατή η αποστολή SSL πακέτου διαπραγμάτευσης: %s\n" +"\n" + +#: fe-connect.c:2970 +#, c-format +msgid "could not send startup packet: %s\n" +msgstr "δεν ήταν δυνατή η αποστολή πακέτου εκκίνησης: %s\n" + +#: fe-connect.c:3040 +msgid "server does not support SSL, but SSL was required\n" +msgstr "ο διακομιστής δεν υποστηρίζει SSL, αλλά απαιτείται SSL\n" + +#: fe-connect.c:3067 +#, c-format +msgid "received invalid response to SSL negotiation: %c\n" +msgstr "έλαβε μη έγκυρη απάντηση κατά τη διαπραγμάτευση SSL: %c\n" + +#: fe-connect.c:3156 +msgid "server doesn't support GSSAPI encryption, but it was required\n" +msgstr "" +"ο διακομιστής δεν υποστηρίζει κρυπτογράφηση GSSAPI, αλλά αυτή ήταν " +"απαραίτητη\n" + +#: fe-connect.c:3168 +#, c-format +msgid "received invalid response to GSSAPI negotiation: %c\n" +msgstr "έλαβε μη έγκυρη απάντηση κατά τη διαπραγμάτευση GSSAPI: %c\n" + +#: fe-connect.c:3234 fe-connect.c:3265 +#, c-format +msgid "expected authentication request from server, but received %c\n" +msgstr "" +"ανέμενε αίτηση ελέγχου ταυτότητας από το διακομιστή, αλλά αντί αυτής ελήφθη " +"%c\n" + +#: fe-connect.c:3506 +msgid "unexpected message from server during startup\n" +msgstr "μη αναμενόμενο μήνυμα από το διακομιστή κατά την εκκίνηση\n" + +#: fe-connect.c:3711 +#, c-format +msgid "could not make a writable connection to server \"%s:%s\"\n" +msgstr "" +"δεν ήταν δυνατή η πραγματοποίηση εγγράψιμης σύνδεσης με το διακομιστή \"%s:%s" +"\"\n" + +#: fe-connect.c:3757 +#, c-format +msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" +msgstr "το τεστ “SHOW transaction_read_only” απέτυχε στον διακομιστή “%s:%s”\n" + +#: fe-connect.c:3772 +#, c-format +msgid "invalid connection state %d, probably indicative of memory corruption\n" +msgstr "" +"κατάσταση μη έγκυρης σύνδεσης %d, πιθανώς ενδεικτική αλλοίωσης της μνήμης\n" + +#: fe-connect.c:4211 fe-connect.c:4271 +#, c-format +msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" +msgstr "" +"PGEventProc \"%s\" απέτυχε κατά τη διάρκεια συμβάντος PGEVT_CONNRESET\n" + +#: fe-connect.c:4618 +#, c-format +msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" +msgstr "" +"άκυρη διεύθυνση URL LDAP \"%s\": ο συνδυασμός πρέπει να είναι ldap://\n" + +#: fe-connect.c:4633 +#, c-format +msgid "invalid LDAP URL \"%s\": missing distinguished name\n" +msgstr "άκυρη διεύθυνση URL LDAP \"%s\": λείπει το αποκλειστικό όνομα\n" + +#: fe-connect.c:4645 fe-connect.c:4700 +#, c-format +msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" +msgstr "" +"άκυρη διεύθυνση URL LDAP \"%s\": πρέπει να περιέχει ακριβώς ένα " +"χαρακτηριστικό\n" + +#: fe-connect.c:4656 fe-connect.c:4715 +#, c-format +msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" +msgstr "" +"άκυρη διεύθυνση URL LDAP \"%s\": πρέπει να έχει εμβέλεια αναζήτησης (base/" +"one/sub)\n" + +#: fe-connect.c:4667 +#, c-format +msgid "invalid LDAP URL \"%s\": no filter\n" +msgstr "άκυρη διεύθυνση URL LDAP “%s”: κανένα φίλτρο\n" + +#: fe-connect.c:4688 +#, c-format +msgid "invalid LDAP URL \"%s\": invalid port number\n" +msgstr "άκυρη διεύθυνση URL LDAP “%s”: άκυρος αριθμός θύρας\n" + +#: fe-connect.c:4724 +msgid "could not create LDAP structure\n" +msgstr "δεν ήταν δυνατή η δημιουργία δομής LDAP\n" + +#: fe-connect.c:4800 +#, c-format +msgid "lookup on LDAP server failed: %s\n" +msgstr "απέτυχε η αναζήτηση στον διακομιστή LDAP: %s\n" + +#: fe-connect.c:4811 +msgid "more than one entry found on LDAP lookup\n" +msgstr "βρέθηκαν περισσότερες από μία καταχωρήσεις στην αναζήτηση LDAP\n" + +#: fe-connect.c:4812 fe-connect.c:4824 +msgid "no entry found on LDAP lookup\n" +msgstr "δεν βρέθηκε καταχώρηση στην αναζήτηση LDAP\n" + +#: fe-connect.c:4835 fe-connect.c:4848 +msgid "attribute has no values on LDAP lookup\n" +msgstr "το χαρακτηριστικό δεν έχει τιμές στην αναζήτηση LDAP\n" + +#: fe-connect.c:4900 fe-connect.c:4919 fe-connect.c:5451 +#, c-format +msgid "missing \"=\" after \"%s\" in connection info string\n" +msgstr "λείπει το “=“ μετά από “%s” στην συμβολοσειρά πληροφορίας σύνδεσης\n" + +#: fe-connect.c:4992 fe-connect.c:5636 fe-connect.c:6410 +#, c-format +msgid "invalid connection option \"%s\"\n" +msgstr "άκυρη επιλογή σύνδεσης “%s”\n" + +#: fe-connect.c:5008 fe-connect.c:5500 +msgid "unterminated quoted string in connection info string\n" +msgstr "" +"ατερμάτιστη συμβολοσειρά με εισαγωγικά στην συμβολοσειρά πληροφορίας " +"σύνδεσης\n" + +#: fe-connect.c:5091 +#, c-format +msgid "definition of service \"%s\" not found\n" +msgstr "δεν βρέθηκε ο ορισμός της υπηρεσίας “%s”\n" + +#: fe-connect.c:5114 +#, c-format +msgid "service file \"%s\" not found\n" +msgstr "δεν βρέθηκε αρχείο υπηρεσίας “%s”\n" + +#: fe-connect.c:5129 +#, c-format +msgid "line %d too long in service file \"%s\"\n" +msgstr "Πολύ μακρυά γραμμή %d στο αρχείο υπηρεσίας “%s”\n" + +#: fe-connect.c:5201 fe-connect.c:5245 +#, c-format +msgid "syntax error in service file \"%s\", line %d\n" +msgstr "συντακτικό σφάλμα στο αρχείο υπηρεσίας “%s”, γραμμή %d\n" + +#: fe-connect.c:5212 +#, c-format +msgid "" +"nested service specifications not supported in service file \"%s\", line %d\n" +msgstr "" +"οι ένθετες προδιαγραφές υπηρεσίας δεν υποστηρίζονται στο αρχείο υπηρεσίας " +"\"%s\", γραμμή %d\n" + +#: fe-connect.c:5932 +#, c-format +msgid "invalid URI propagated to internal parser routine: \"%s\"\n" +msgstr "μη έγκυρο URI διαδόθηκε στη ρουτίνα εσωτερικής ανάλυσης: \"%s\"\n" + +#: fe-connect.c:6009 +#, c-format +msgid "" +"end of string reached when looking for matching \"]\" in IPv6 host address " +"in URI: \"%s\"\n" +msgstr "" +"έφτασε στο τέλος της συμβολοσειράς κατά την αναζήτηση αντίστοιχου \"]\" στη " +"διεύθυνση IPv6 κεντρικού υπολογιστή στο URI: \"%s\"\n" + +#: fe-connect.c:6016 +#, c-format +msgid "IPv6 host address may not be empty in URI: \"%s\"\n" +msgstr "" +"η διεύθυνση IPv6 κεντρικού υπολογιστή δεν δύναται να είναι κενή στο URI: \"%s" +"\"\n" + +#: fe-connect.c:6031 +#, c-format +msgid "" +"unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): " +"\"%s\"\n" +msgstr "" +"μη αναμενόμενος χαρακτήρας \"%c\" στη θέση %d του URI (αναμένεται “:” ή \"/" +"\"): \"%s\"\n" + +#: fe-connect.c:6160 +#, c-format +msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" +msgstr "" +"επιπλέον διαχωριστικό κλειδιού/τιμής \"=\" στην παράμετρο ερωτήματος URI: " +"\"%s\"\n" + +#: fe-connect.c:6180 +#, c-format +msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" +msgstr "" +"λείπει διαχωριστικό κλειδιού/τιμής “=“ στην παράμετρο ερωτήματος URI: “%s”\n" + +#: fe-connect.c:6231 +#, c-format +msgid "invalid URI query parameter: \"%s\"\n" +msgstr "άκυρη παράμετρος ερωτήματος URI: “%s”\n" + +#: fe-connect.c:6305 +#, c-format +msgid "invalid percent-encoded token: \"%s\"\n" +msgstr "άκυρο διακριτικό με κωδικοποίηση ποσοστού: \"%s\"\n" + +#: fe-connect.c:6315 +#, c-format +msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" +msgstr "απαγορευμένη τιμή %%00 σε τιμή κωδικοποιημένου ποσοστού: \"%s\"\n" + +#: fe-connect.c:6678 +msgid "connection pointer is NULL\n" +msgstr "ο δείκτης σύνδεσης είναι NULL\n" + +#: fe-connect.c:6974 +#, c-format +msgid "WARNING: password file \"%s\" is not a plain file\n" +msgstr "" +"ΠΡΟΕΙΔΟΠΟΙΗΣΗ: το αρχείο κωδικών πρόσβασης “%s” δεν είναι ένα απλό αρχείο\n" + +#: fe-connect.c:6983 +#, c-format +msgid "" +"WARNING: password file \"%s\" has group or world access; permissions should " +"be u=rw (0600) or less\n" +msgstr "" +"ΠΡΟΕΙΔΟΠΟΙΗΣΗ: το αρχείο κωδικού πρόσβασης \"%s\" έχει ομαδική ή παγκόσμια " +"πρόσβαση· τα δικαιώματα πρέπει να είναι U=RW (0600) ή λιγότερα\n" + +#: fe-connect.c:7091 +#, c-format +msgid "password retrieved from file \"%s\"\n" +msgstr "ο κωδικός πρόσβασης ελήφθει από αρχείο “%s”\n" + +#: fe-exec.c:444 fe-exec.c:2821 +#, c-format +msgid "row number %d is out of range 0..%d" +msgstr "ο αριθμός σειράς %d βρίσκεται εκτός εύρους 0..%d" + +#: fe-exec.c:505 fe-protocol2.c:497 fe-protocol2.c:532 fe-protocol2.c:1050 +#: fe-protocol3.c:206 fe-protocol3.c:233 fe-protocol3.c:250 fe-protocol3.c:328 +#: fe-protocol3.c:692 fe-protocol3.c:920 +msgid "out of memory" +msgstr "έλλειψη μνήμης" + +#: fe-exec.c:506 fe-protocol2.c:1396 fe-protocol3.c:1873 +#, c-format +msgid "%s" +msgstr "%s" + +#: fe-exec.c:815 +msgid "write to server failed\n" +msgstr "απέτυχε η εγγραφή στον διακομιστή\n" + +#: fe-exec.c:896 +msgid "NOTICE" +msgstr "NOTICE" + +#: fe-exec.c:954 +msgid "PGresult cannot support more than INT_MAX tuples" +msgstr "" +"το PGresult δεν μπορεί να υποστηρίξει περισσότερες πλείαδες από INT_MAX" + +#: fe-exec.c:966 +msgid "size_t overflow" +msgstr "υπερχείλιση overflow" + +#: fe-exec.c:1243 fe-exec.c:1301 fe-exec.c:1347 +msgid "command string is a null pointer\n" +msgstr "η συμβολοσειρά εντολής είναι ένας κενός δείκτης\n" + +#: fe-exec.c:1307 fe-exec.c:1353 fe-exec.c:1448 +msgid "number of parameters must be between 0 and 65535\n" +msgstr "ο αριθμός των παραμέτρων πρέπει να είναι μεταξύ 0 και 65535\n" + +#: fe-exec.c:1341 fe-exec.c:1442 +msgid "statement name is a null pointer\n" +msgstr "η ονομασία της δήλωσης είναι ένας κενός δείκτης\n" + +#: fe-exec.c:1361 fe-exec.c:1524 fe-exec.c:2233 fe-exec.c:2435 +msgid "function requires at least protocol version 3.0\n" +msgstr "η συνάρτηση απαιτεί πρωτόκολλο ελάχιστης έκδοσης 3.0\n" + +#: fe-exec.c:1479 +msgid "no connection to the server\n" +msgstr "καμία σύνδεση στον διακομιστή\n" + +#: fe-exec.c:1486 +msgid "another command is already in progress\n" +msgstr "υπάρχει άλλη εντολή σε πρόοδο\n" + +#: fe-exec.c:1600 +msgid "length must be given for binary parameter\n" +msgstr "το μήκος πρέπει να περαστεί ως δυαδική παράμετρος\n" + +#: fe-exec.c:1863 +#, c-format +msgid "unexpected asyncStatus: %d\n" +msgstr "μη αναμενόμενο asyncStatus: %d\n" + +#: fe-exec.c:1883 +#, c-format +msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" +msgstr "PGEventProc “%s” κατά τη διάρκεια συμβάντος PGEVT_RESULTCREATE\n" + +#: fe-exec.c:2043 +msgid "COPY terminated by new PQexec" +msgstr "COPY τερματίστηκε από νέο PQexec" + +#: fe-exec.c:2051 +msgid "COPY IN state must be terminated first\n" +msgstr "" +"πρέπει πρώτα να τερματιστεί η κατάσταση COPY IN\n" +"\n" + +#: fe-exec.c:2071 +msgid "COPY OUT state must be terminated first\n" +msgstr "πρέπει πρώτα να τερματιστεί η κατάσταση COPY OUT\n" + +#: fe-exec.c:2079 +msgid "PQexec not allowed during COPY BOTH\n" +msgstr "PQexec δεν επιτρέπεται κατά τη διάρκεια COPY BOTH\n" + +#: fe-exec.c:2325 fe-exec.c:2392 fe-exec.c:2482 fe-protocol2.c:1353 +#: fe-protocol3.c:1804 +msgid "no COPY in progress\n" +msgstr "κανένα COPY σε εξέλιξη\n" + +#: fe-exec.c:2672 +msgid "connection in wrong state\n" +msgstr "σύνδεση σε λανθάνουσα κατάσταση\n" + +#: fe-exec.c:2703 +msgid "invalid ExecStatusType code" +msgstr "άκυρος κωδικός ExecStatusType" + +#: fe-exec.c:2730 +msgid "PGresult is not an error result\n" +msgstr "PGresult δεν είναι ένα αποτέλεσμα σφάλματος\n" + +#: fe-exec.c:2805 fe-exec.c:2828 +#, c-format +msgid "column number %d is out of range 0..%d" +msgstr "αριθμός στήλης %d βρίσκεται εκτός εύρους 0..%d" + +#: fe-exec.c:2843 +#, c-format +msgid "parameter number %d is out of range 0..%d" +msgstr "αριθμός παραμέτρου %d βρίσκεται εκτός εύρους 0..%d" + +#: fe-exec.c:3153 +#, c-format +msgid "could not interpret result from server: %s" +msgstr "δεν μπόρεσε να ερμηνεύσει το αποτέλεσμα από τον διακομιστή: %s" + +#: fe-exec.c:3392 fe-exec.c:3476 +msgid "incomplete multibyte character\n" +msgstr "ελλιπής χαρακτήρας πολλαπλών byte\n" + +#: fe-gssapi-common.c:124 +msgid "GSSAPI name import error" +msgstr "σφάλμα εισαγωγής ονόματος GSSAPI" + +#: fe-lobj.c:154 +msgid "cannot determine OID of function lo_truncate\n" +msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_truncate\n" + +#: fe-lobj.c:170 +msgid "argument of lo_truncate exceeds integer range\n" +msgstr "η παράμετρος του lo_truncate υπερβαίνει το εύρος ακέραιων\n" + +#: fe-lobj.c:221 +msgid "cannot determine OID of function lo_truncate64\n" +msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_truncate64\n" + +#: fe-lobj.c:279 +msgid "argument of lo_read exceeds integer range\n" +msgstr "η παράμετρος του lo_read υπερβαίνει το εύρος ακέραιων\n" + +#: fe-lobj.c:334 +msgid "argument of lo_write exceeds integer range\n" +msgstr "η παράμετρος του lo_write υπερβαίνει το εύρος ακέραιων\n" + +#: fe-lobj.c:425 +msgid "cannot determine OID of function lo_lseek64\n" +msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_lseek64\n" + +#: fe-lobj.c:521 +msgid "cannot determine OID of function lo_create\n" +msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_create\n" + +#: fe-lobj.c:600 +msgid "cannot determine OID of function lo_tell64\n" +msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_tell64\n" + +#: fe-lobj.c:706 fe-lobj.c:815 +#, c-format +msgid "could not open file \"%s\": %s\n" +msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου “%s”: %s\n" + +#: fe-lobj.c:761 +#, c-format +msgid "could not read from file \"%s\": %s\n" +msgstr "δεν ήταν δυνατή η ανάγνωση από το αρχείο “%s”: %s\n" + +#: fe-lobj.c:835 fe-lobj.c:859 +#, c-format +msgid "could not write to file \"%s\": %s\n" +msgstr "δεν ήταν δυνατή η εγγραφή στο αρχείο ”%s”: %s\n" + +#: fe-lobj.c:946 +msgid "query to initialize large object functions did not return data\n" +msgstr "" +"το ερώτημα αρχικοποίησης συναρτήσεων μεγάλων αντικειμένων δεν επέστρεψε " +"δεδομένα\n" + +#: fe-lobj.c:995 +msgid "cannot determine OID of function lo_open\n" +msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_open\n" + +#: fe-lobj.c:1002 +msgid "cannot determine OID of function lo_close\n" +msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_close\n" + +#: fe-lobj.c:1009 +msgid "cannot determine OID of function lo_creat\n" +msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_creat\n" + +#: fe-lobj.c:1016 +msgid "cannot determine OID of function lo_unlink\n" +msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_unlink\n" + +#: fe-lobj.c:1023 +msgid "cannot determine OID of function lo_lseek\n" +msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_lseek\n" + +#: fe-lobj.c:1030 +msgid "cannot determine OID of function lo_tell\n" +msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_tell\n" + +#: fe-lobj.c:1037 +msgid "cannot determine OID of function loread\n" +msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης loread\n" + +#: fe-lobj.c:1044 +msgid "cannot determine OID of function lowrite\n" +msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lowrite\n" + +#: fe-misc.c:289 +#, c-format +msgid "integer of size %lu not supported by pqGetInt" +msgstr "ακέραιος μεγέθους %lu δεν υποστηρίζεται από pqGetInt" + +#: fe-misc.c:325 +#, c-format +msgid "integer of size %lu not supported by pqPutInt" +msgstr "ακέραιος μεγέθους %lu δεν υποστηρίζεται από pqPutInt" + +#: fe-misc.c:636 fe-misc.c:869 +msgid "connection not open\n" +msgstr "μη ανοικτή σύνδεση\n" + +#: fe-misc.c:805 fe-secure-openssl.c:209 fe-secure-openssl.c:316 +#: fe-secure.c:267 fe-secure.c:383 +msgid "" +"server closed the connection unexpectedly\n" +"\tThis probably means the server terminated abnormally\n" +"\tbefore or while processing the request.\n" +msgstr "" +"ο διακομιστής έκλεισε απροσδόκητα τη σύνδεση\n" +"\tΑυτό πιθανώς σημαίνει ότι ο διακομιστής τερματίστηκε ασυνήθιστα\n" +"\tπριν ή κατά την επεξεργασία του αιτήματος.\n" + +#: fe-misc.c:1063 +msgid "timeout expired\n" +msgstr "έληξε το χρονικό όριο\n" + +#: fe-misc.c:1108 +msgid "invalid socket\n" +msgstr "άκυρος υποδοχέας\n" + +#: fe-misc.c:1131 +#, c-format +msgid "select() failed: %s\n" +msgstr "απέτυχε το select(): %s\n" + +#: fe-protocol2.c:87 +#, c-format +msgid "invalid setenv state %c, probably indicative of memory corruption\n" +msgstr "μη έγκυρη κατάσταση %c setenv, πιθανώς ενδεικτική αλλοίωσης μνήμης\n" + +#: fe-protocol2.c:384 +#, c-format +msgid "invalid state %c, probably indicative of memory corruption\n" +msgstr "μη έγκυρη κατάσταση %c, πιθανώς ενδεικτική αλλοίωσης μνήμης\n" + +#: fe-protocol2.c:473 fe-protocol3.c:183 +#, c-format +msgid "message type 0x%02x arrived from server while idle" +msgstr "μήνυμα τύπου 0x%02x έφτασε από το διακομιστή ενώ αυτός ήταν αδρανής" + +#: fe-protocol2.c:523 +#, c-format +msgid "unexpected character %c following empty query response (\"I\" message)" +msgstr "" +"μη αναμενόμενος χαρακτήρας %c μετά από κενή απόκριση ερωτήματος (“I” μήνυμα)" + +#: fe-protocol2.c:589 +#, c-format +msgid "" +"server sent data (\"D\" message) without prior row description (\"T\" " +"message)" +msgstr "" +"ο διακομιστής έστειλε δεδομένα (“D” μήνυμα) χωρίς προηγούμενη περιγραφή " +"γραμμής (“T” μήνυμα)" + +#: fe-protocol2.c:607 +#, c-format +msgid "" +"server sent binary data (\"B\" message) without prior row description (\"T\" " +"message)" +msgstr "" +"ο διακομιστής έστειλε δυαδικά δεδομένα (“B” μήνυμα) χωρίς προηγούμενη " +"περιγραφή γραμμής (“T” μήνυμα)" + +#: fe-protocol2.c:626 fe-protocol3.c:403 +#, c-format +msgid "unexpected response from server; first received character was \"%c\"\n" +msgstr "" +"μη αναμενόμενη απόκριση από το διακομιστή· πρώτος χαρακτήρας που ελήφθη ήταν " +"\"%c\"\n" + +#: fe-protocol2.c:755 fe-protocol2.c:930 fe-protocol3.c:603 fe-protocol3.c:809 +msgid "out of memory for query result" +msgstr "έλλειψη μνήμης για το αποτέλεσμα ερωτήματος" + +#: fe-protocol2.c:1408 +#, c-format +msgid "lost synchronization with server, resetting connection" +msgstr "χάθηκε ο συγχρονισμός με τον διακομιστή, επαναρυθμίζεται η σύνδεση" + +#: fe-protocol2.c:1530 fe-protocol2.c:1562 fe-protocol3.c:2061 +#, c-format +msgid "protocol error: id=0x%x\n" +msgstr "σφάλμα πρωτοκόλλου: id=0x%x\n" + +#: fe-protocol3.c:360 +msgid "" +"server sent data (\"D\" message) without prior row description (\"T\" " +"message)\n" +msgstr "" +"ο διακομιστής έστειλε δεδομένα (“D” μήνυμα) χωρίς προηγούμενη περιγραφή " +"γραμμής (“T” μήνυμα)\n" + +#: fe-protocol3.c:424 +#, c-format +msgid "message contents do not agree with length in message type \"%c\"\n" +msgstr "" +"τα περιεχόμενα του μηνύματος δεν συμφωνούν με το μήκος του σε τύπο μηνύματος " +"\"%c\"\n" + +#: fe-protocol3.c:444 +#, c-format +msgid "lost synchronization with server: got message type \"%c\", length %d\n" +msgstr "" +"χάθηκε ο συγχρονισμός με το διακομιστή: ελήφθει τύπος μηνύματος \"%c\", " +"μήκους %d\n" + +#: fe-protocol3.c:494 fe-protocol3.c:534 +msgid "insufficient data in \"T\" message" +msgstr "ανεπαρκή δεδομένα σε “T” μήνυμα" + +#: fe-protocol3.c:672 +msgid "insufficient data in \"t\" message" +msgstr "ανεπαρκή δεδομένα σε “t” μήνυμα" + +#: fe-protocol3.c:731 fe-protocol3.c:763 fe-protocol3.c:781 +msgid "insufficient data in \"D\" message" +msgstr "ανεπαρκή δεδομένα σε “D” μήνυμα" + +#: fe-protocol3.c:737 +msgid "unexpected field count in \"D\" message" +msgstr "μη αναμενόμενο πλήθος πεδίων σε ”D” μήνυμα" + +#: fe-protocol3.c:974 +msgid "no error message available\n" +msgstr "κανένα μήνυμα σφάλματος διαθέσιμο\n" + +#. translator: %s represents a digit string +#: fe-protocol3.c:1022 fe-protocol3.c:1041 +#, c-format +msgid " at character %s" +msgstr "σε χαρακτήρα %s" + +#: fe-protocol3.c:1054 +#, c-format +msgid "DETAIL: %s\n" +msgstr "DETAIL: %s\n" + +#: fe-protocol3.c:1057 +#, c-format +msgid "HINT: %s\n" +msgstr "HINT: %s\n" + +#: fe-protocol3.c:1060 +#, c-format +msgid "QUERY: %s\n" +msgstr "ΕΡΩΤΗΜΑ: %s\n" + +#: fe-protocol3.c:1067 +#, c-format +msgid "CONTEXT: %s\n" +msgstr "CONTEXT: %s\n" + +#: fe-protocol3.c:1076 +#, c-format +msgid "SCHEMA NAME: %s\n" +msgstr "SCHEMA NAME: %s\n" + +#: fe-protocol3.c:1080 +#, c-format +msgid "TABLE NAME: %s\n" +msgstr "TABLE NAME: %s\n" + +#: fe-protocol3.c:1084 +#, c-format +msgid "COLUMN NAME: %s\n" +msgstr "COLUMN NAME: %s\n" + +#: fe-protocol3.c:1088 +#, c-format +msgid "DATATYPE NAME: %s\n" +msgstr "DATATYPE NAME: %s\n" + +#: fe-protocol3.c:1092 +#, c-format +msgid "CONSTRAINT NAME: %s\n" +msgstr "CONSTRAINT NAME: %s\n" + +#: fe-protocol3.c:1104 +msgid "LOCATION: " +msgstr "LOCATION: " + +#: fe-protocol3.c:1106 +#, c-format +msgid "%s, " +msgstr "%s," + +#: fe-protocol3.c:1108 +#, c-format +msgid "%s:%s" +msgstr "%s: %s" + +#: fe-protocol3.c:1303 +#, c-format +msgid "LINE %d: " +msgstr "ΓΡΑΜΜΗ %d: " + +#: fe-protocol3.c:1698 +msgid "PQgetline: not doing text COPY OUT\n" +msgstr "PQgetline: δεν κάνει το κείμενο COPY OUT\n" + +#: fe-secure-common.c:124 +msgid "SSL certificate's name contains embedded null\n" +msgstr "το όνομα του πιστοποιητικού SSL περιέχει ενσωματωμένο null\n" + +#: fe-secure-common.c:171 +msgid "host name must be specified for a verified SSL connection\n" +msgstr "" +"το όνομα κεντρικού υπολογιστή πρέπει να έχει καθοριστεί για μια επαληθευμένη " +"σύνδεση SSL\n" + +#: fe-secure-common.c:196 +#, c-format +msgid "server certificate for \"%s\" does not match host name \"%s\"\n" +msgstr "" +"το πιστοποιητικό διακομιστή για το \"%s\" δεν ταιριάζει με το όνομα " +"κεντρικού υπολογιστή \"%s\"\n" + +#: fe-secure-common.c:202 +msgid "could not get server's host name from server certificate\n" +msgstr "" +"δεν ήταν δυνατή η απόκτηση του όνοματος κεντρικού υπολογιστή του διακομιστή " +"από το πιστοποιητικό διακομιστή\n" + +#: fe-secure-gssapi.c:201 +msgid "GSSAPI wrap error" +msgstr "σφάλμα αναδίπλωσης GSSAPI" + +#: fe-secure-gssapi.c:209 +msgid "outgoing GSSAPI message would not use confidentiality\n" +msgstr "το εξερχόμενο μήνυμα GSSAPI δεν θα χρησιμοποιούσε εμπιστευτικότητα\n" + +#: fe-secure-gssapi.c:217 +#, c-format +msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" +msgstr "" +"ο πελάτης προσπάθησε να στείλει υπερμέγεθες πακέτο GSSAPI (%zu > %zu)\n" + +#: fe-secure-gssapi.c:354 fe-secure-gssapi.c:596 +#, c-format +msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" +msgstr "ο διακομιστής έστειλε υπερμέγεθες πακέτο GSSAPI (%zu > %zu)\n" + +#: fe-secure-gssapi.c:393 +msgid "GSSAPI unwrap error" +msgstr "σφάλμα ξεδιπλώσης GSSAPI" + +#: fe-secure-gssapi.c:403 +msgid "incoming GSSAPI message did not use confidentiality\n" +msgstr "εισερχόμενο μήνυμα GSSAPI δεν χρησιμοποίησε εμπιστευτικότητα\n" + +#: fe-secure-gssapi.c:642 +msgid "could not initiate GSSAPI security context" +msgstr "δεν ήταν δυνατή η έναρξη περιεχομένου ασφαλείας GSSAPI" + +#: fe-secure-gssapi.c:670 +msgid "GSSAPI size check error" +msgstr "σφάλμα ελέγχου μεγέθους GSSAPI" + +#: fe-secure-gssapi.c:681 +msgid "GSSAPI context establishment error" +msgstr "σφάλμα δημιουργίας περιεχομένου GSSAPI" + +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1291 +#, c-format +msgid "SSL SYSCALL error: %s\n" +msgstr "SSL SYSCALL σφάλμα: %s\n" + +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1295 +msgid "SSL SYSCALL error: EOF detected\n" +msgstr "SSL SYSCALL σφάλμα: ανιχνεύτηκε EOF\n" + +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1304 +#, c-format +msgid "SSL error: %s\n" +msgstr "SSL σφάλμα: %s\n" + +#: fe-secure-openssl.c:247 fe-secure-openssl.c:354 +msgid "SSL connection has been closed unexpectedly\n" +msgstr "η σύνδεση SSL έκλεισε απροσδόκητα\n" + +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1354 +#, c-format +msgid "unrecognized SSL error code: %d\n" +msgstr "μη αναγνωρίσιμος κωδικός σφάλματος SSL: %d\n" + +#: fe-secure-openssl.c:400 +msgid "could not determine server certificate signature algorithm\n" +msgstr "" +"δεν μπόρεσε να προσδιορίσει τον αλγόριθμο υπογραφής πιστοποιητικού " +"διακομιστή\n" + +#: fe-secure-openssl.c:421 +#, c-format +msgid "could not find digest for NID %s\n" +msgstr "δεν μπόρεσε να βρεθεί σύνοψη (digest) για NID %s\n" + +#: fe-secure-openssl.c:431 +msgid "could not generate peer certificate hash\n" +msgstr "Δεν ήταν δυνατή η δημιουργία ομότιμου πιστοποιητικού hash\n" + +#: fe-secure-openssl.c:488 +msgid "SSL certificate's name entry is missing\n" +msgstr "λείπει καταχώρηση ονόματος του πιστοποιητικού SSL\n" + +#: fe-secure-openssl.c:815 +#, c-format +msgid "could not create SSL context: %s\n" +msgstr "δεν ήταν δυνατή η δημιουργία περιεχομένου SSL: %s\n" + +#: fe-secure-openssl.c:854 +#, c-format +msgid "invalid value \"%s\" for minimum SSL protocol version\n" +msgstr "άκυρη τιμή \"%s\" για την ελάχιστη έκδοση πρωτοκόλλου SSL\n" + +#: fe-secure-openssl.c:865 +#, c-format +msgid "could not set minimum SSL protocol version: %s\n" +msgstr "δεν ήταν δυνατό να ορίσει ελάχιστη έκδοση πρωτοκόλλου SSL: %s\n" + +#: fe-secure-openssl.c:883 +#, c-format +msgid "invalid value \"%s\" for maximum SSL protocol version\n" +msgstr "άκυρη τιμή “%s” για μέγιστη έκδοση πρωτοκόλλου SSL\n" + +#: fe-secure-openssl.c:894 +#, c-format +msgid "could not set maximum SSL protocol version: %s\n" +msgstr "δεν ήταν δυνατό να ορίσει μέγιστη έκδοση πρωτοκόλλου SSL: %s\n" + +#: fe-secure-openssl.c:930 +#, c-format +msgid "could not read root certificate file \"%s\": %s\n" +msgstr "δεν ήταν δυνατή η ανάγνωση βασικού αρχείου πιστοποιητικού “%s”: %s\n" + +#: fe-secure-openssl.c:974 +msgid "" +"could not get home directory to locate root certificate file\n" +"Either provide the file or change sslmode to disable server certificate " +"verification.\n" +msgstr "" +"δεν ήταν δυνατή η δημιουργία του προσωπικού καταλόγου για τον εντοπισμό " +"βασικού αρχείου πιστοποιητικού\n" +"Δώστε το αρχείο ή αλλάξτε το sslmode για να απενεργοποιήσετε την επαλήθευση " +"πιστοποιητικού διακομιστή.\n" + +#: fe-secure-openssl.c:978 +#, c-format +msgid "" +"root certificate file \"%s\" does not exist\n" +"Either provide the file or change sslmode to disable server certificate " +"verification.\n" +msgstr "" +"βασικό αρχείο πιστοποιητικού \"%s\" δεν υπάρχει\n" +"Είτε παρουσιάστε το αρχείο ή αλλάξτε το sslmode για να απενεργοποιήσετε την " +"επαλήθευση πιστοποιητικού διακομιστή.\n" + +#: fe-secure-openssl.c:1009 +#, c-format +msgid "could not open certificate file \"%s\": %s\n" +msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου πιστοποιητικού “%s”: %s\n" + +#: fe-secure-openssl.c:1028 +#, c-format +msgid "could not read certificate file \"%s\": %s\n" +msgstr "δεν ήταν δυνατή η ανάγνωση αρχείου πιστοποιητικού “%s”: %s\n" + +#: fe-secure-openssl.c:1053 +#, c-format +msgid "could not establish SSL connection: %s\n" +msgstr "δεν ήταν δυνατή η δημιουργία σύνδεσης SSL: %s\n" + +#: fe-secure-openssl.c:1107 +#, c-format +msgid "could not load SSL engine \"%s\": %s\n" +msgstr "δεν ήταν δυνατή η φόρτωση της μηχανής SSL \"%s\": %s\n" + +#: fe-secure-openssl.c:1119 +#, c-format +msgid "could not initialize SSL engine \"%s\": %s\n" +msgstr "" +"δεν ήταν δυνατή η εκκίνηση του κινητήρα SSL ”%s”: %s\n" +"\n" + +#: fe-secure-openssl.c:1135 +#, c-format +msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" +msgstr "" +"δεν ήταν δυνατή η ανάγνωση του ιδιωτικού κλειδιού SSL \"%s\" από την μηχανή " +"\"%s\": %s\n" + +#: fe-secure-openssl.c:1149 +#, c-format +msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" +msgstr "" +"δεν ήταν δυνατή η φόρτωση του ιδιωτικού κλειδιού SSL \"%s\" από την μηχανή " +"\"%s\": %s\n" + +#: fe-secure-openssl.c:1186 +#, c-format +msgid "certificate present, but not private key file \"%s\"\n" +msgstr "υπάρχει πιστοποιητικό, αλλά όχι αρχείο ιδιωτικού κλειδιού \"%s\"\n" + +#: fe-secure-openssl.c:1194 +#, c-format +msgid "" +"private key file \"%s\" has group or world access; permissions should be " +"u=rw (0600) or less\n" +msgstr "" +"αρχείο ιδιωτικού κλειδιού \"%s\" έχει ομαδική ή παγκόσμια πρόσβαση· τα " +"δικαιώματα πρέπει να είναι U=RW (0600) ή λιγότερα\n" + +#: fe-secure-openssl.c:1219 +#, c-format +msgid "could not load private key file \"%s\": %s\n" +msgstr "δεν ήταν δυνατή η φόρτωση αρχείου ιδιωτικού κλειδιού “%s”: %s\n" + +#: fe-secure-openssl.c:1237 +#, c-format +msgid "certificate does not match private key file \"%s\": %s\n" +msgstr "" +"το πιστοποιητικό δεν ταιριάζει με το αρχείο ιδιωτικού κλειδιού “%s”: %s\n" + +#: fe-secure-openssl.c:1337 +#, c-format +msgid "" +"This may indicate that the server does not support any SSL protocol version " +"between %s and %s.\n" +msgstr "" +"Αυτό μπορεί να υποδεικνύει ότι ο διακομιστής δεν υποστηρίζει καμία έκδοση " +"πρωτοκόλλου SSL μεταξύ %s και %s.\n" + +#: fe-secure-openssl.c:1373 +#, c-format +msgid "certificate could not be obtained: %s\n" +msgstr "" +"δεν ήταν δυνατή η λήψη πιστοποιητικού: %s\n" +"\n" + +#: fe-secure-openssl.c:1462 +#, c-format +msgid "no SSL error reported" +msgstr "δεν αναφέρθηκε κανένα σφάλμα SSL" + +#: fe-secure-openssl.c:1471 +#, c-format +msgid "SSL error code %lu" +msgstr "κωδικός σφάλματος SSL %lu" + +#: fe-secure-openssl.c:1718 +#, c-format +msgid "WARNING: sslpassword truncated\n" +msgstr "WARNING: περικομμένο sslpassword\n" + +#: fe-secure.c:275 +#, c-format +msgid "could not receive data from server: %s\n" +msgstr "δεν ήταν δυνατή η λήψη δεδομένων από το διακομιστή: %s\n" + +#: fe-secure.c:390 +#, c-format +msgid "could not send data to server: %s\n" +msgstr "δεν ήταν δυνατή η αποστολή δεδομένων στο διακομιστή: %s\n" + +#: win32.c:314 +#, c-format +msgid "unrecognized socket error: 0x%08X/%d" +msgstr "μη αναγνωρίσιμο σφάλμα υποδοχής: 0x%08X/%d" diff --git a/src/interfaces/libpq/po/es.po b/src/interfaces/libpq/po/es.po index 6fc8e22b83832..9f462920a04b2 100644 --- a/src/interfaces/libpq/po/es.po +++ b/src/interfaces/libpq/po/es.po @@ -12,15 +12,15 @@ msgid "" msgstr "" "Project-Id-Version: libpq (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:39+0000\n" -"PO-Revision-Date: 2019-09-29 22:11-0300\n" +"POT-Creation-Date: 2020-09-13 10:39+0000\n" +"PO-Revision-Date: 2020-09-12 22:47-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: BlackCAT 1.0\n" +"X-Generator: Poedit 2.3\n" #: fe-auth-scram.c:212 msgid "malformed SCRAM message (empty message)\n" @@ -56,12 +56,12 @@ msgstr "no se pude generar nonce\n" #: fe-auth-scram.c:600 fe-auth-scram.c:626 fe-auth-scram.c:641 #: fe-auth-scram.c:691 fe-auth-scram.c:725 fe-auth.c:289 fe-auth.c:359 #: fe-auth.c:394 fe-auth.c:611 fe-auth.c:770 fe-auth.c:1129 fe-auth.c:1277 -#: fe-connect.c:886 fe-connect.c:1413 fe-connect.c:1589 fe-connect.c:2199 -#: fe-connect.c:2222 fe-connect.c:2948 fe-connect.c:4614 fe-connect.c:4870 -#: fe-connect.c:4989 fe-connect.c:5242 fe-connect.c:5322 fe-connect.c:5421 -#: fe-connect.c:5677 fe-connect.c:5706 fe-connect.c:5778 fe-connect.c:5802 -#: fe-connect.c:5820 fe-connect.c:5921 fe-connect.c:5930 fe-connect.c:6286 -#: fe-connect.c:6436 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 +#: fe-connect.c:892 fe-connect.c:1419 fe-connect.c:1595 fe-connect.c:2200 +#: fe-connect.c:2223 fe-connect.c:2952 fe-connect.c:4598 fe-connect.c:4854 +#: fe-connect.c:4973 fe-connect.c:5226 fe-connect.c:5306 fe-connect.c:5405 +#: fe-connect.c:5661 fe-connect.c:5690 fe-connect.c:5762 fe-connect.c:5786 +#: fe-connect.c:5804 fe-connect.c:5905 fe-connect.c:5914 fe-connect.c:6270 +#: fe-connect.c:6420 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 #: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1207 fe-protocol3.c:995 #: fe-protocol3.c:1699 fe-secure-common.c:110 fe-secure-gssapi.c:504 #: fe-secure-openssl.c:440 fe-secure-openssl.c:1091 @@ -69,16 +69,12 @@ msgid "out of memory\n" msgstr "memoria agotada\n" #: fe-auth-scram.c:364 -#, fuzzy -#| msgid "could not generate nonce\n" msgid "could not encode nonce\n" msgstr "no se pude generar nonce\n" #: fe-auth-scram.c:563 -#, fuzzy -#| msgid "could not send data to client: %m" msgid "could not encode client proof\n" -msgstr "no se pudo enviar datos al cliente: %m" +msgstr "no se pudo codificar la prueba del cliente\n" #: fe-auth-scram.c:618 msgid "invalid SCRAM response (nonce mismatch)\n" @@ -145,7 +141,7 @@ msgstr "no se pudo obtener las credenciales SSPI" #: fe-auth.c:429 msgid "channel binding required, but SSL not in use\n" -msgstr "" +msgstr "se requiere enlazado de canal (channel binding), pero no se está usando SSL\n" #: fe-auth.c:436 msgid "duplicate SASL authentication request\n" @@ -153,7 +149,7 @@ msgstr "petición de autentificación SASL duplicada\n" #: fe-auth.c:492 msgid "channel binding is required, but client does not support it\n" -msgstr "" +msgstr "se requiere enlazado de canal (channel binding), pero no está soportado en el cliente\n" #: fe-auth.c:509 msgid "server offered SCRAM-SHA-256-PLUS authentication over a non-SSL connection\n" @@ -165,7 +161,7 @@ msgstr "ningún método de autentificación SASL del servidor está soportado\n" #: fe-auth.c:529 msgid "channel binding is required, but server did not offer an authentication method that supports channel binding\n" -msgstr "" +msgstr "se requiere enlazado de canal (channel binding), pero el servidor no ofrece un método de autenticación que lo soporte\n" #: fe-auth.c:635 #, c-format @@ -182,11 +178,11 @@ msgstr "el método de autentificación SCM_CRED no está soportado\n" #: fe-auth.c:836 msgid "channel binding required, but server authenticated client without channel binding\n" -msgstr "" +msgstr "se requiere enlazado de canal (channel binding), pero el servidor autenticó al cliente sin enlazado de canal\n" #: fe-auth.c:842 msgid "channel binding required but not supported by server's authentication request\n" -msgstr "" +msgstr "se requiere enlazado de canal (channel binding), pero no es compatible con la solicitud de autenticación del servidor\n" #: fe-auth.c:875 msgid "Kerberos 4 authentication not supported\n" @@ -218,12 +214,12 @@ msgstr "el método de autentificación %u no está soportado\n" msgid "user name lookup failure: error code %lu\n" msgstr "fallo en la búsqueda del nombre de usuario: código de error %lu\n" -#: fe-auth.c:1114 fe-connect.c:2830 +#: fe-auth.c:1114 fe-connect.c:2834 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "no se pudo buscar el usuario local de ID %d: %s\n" -#: fe-auth.c:1119 fe-connect.c:2835 +#: fe-auth.c:1119 fe-connect.c:2839 #, c-format msgid "local user with ID %d does not exist\n" msgstr "no existe un usuario local con ID %d\n" @@ -241,71 +237,66 @@ msgstr "el valor para password_encryption es demasiado largo\n" msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "algoritmo para cifrado de contraseña «%s» desconocido\n" -#: fe-connect.c:1069 +#: fe-connect.c:1075 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "no se pudo emparejar %d nombres de host a %d direcciones de host\n" -#: fe-connect.c:1150 +#: fe-connect.c:1156 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "no se pudo emparejar %d números de puertos a %d hosts\n" -#: fe-connect.c:1243 -#, fuzzy, c-format -#| msgid "invalid cidr value: \"%s\"" +#: fe-connect.c:1249 +#, c-format msgid "invalid channel_binding value: \"%s\"\n" -msgstr "valor cidr no válido: «%s»" +msgstr "valor cidr no válido: «%s»\n" -#: fe-connect.c:1269 +#: fe-connect.c:1275 #, c-format msgid "invalid sslmode value: \"%s\"\n" msgstr "valor sslmode no válido: «%s»\n" -#: fe-connect.c:1290 +#: fe-connect.c:1296 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "el valor sslmode «%s» no es válido cuando no se ha compilado con soporte SSL\n" -#: fe-connect.c:1311 -#, fuzzy, c-format -#| msgid "invalid sslmode value: \"%s\"\n" +#: fe-connect.c:1317 +#, c-format msgid "invalid ssl_min_protocol_version value: \"%s\"\n" msgstr "valor sslmode no válido: «%s»\n" -#: fe-connect.c:1319 -#, fuzzy, c-format -#| msgid "invalid sslmode value: \"%s\"\n" +#: fe-connect.c:1325 +#, c-format msgid "invalid ssl_max_protocol_version value: \"%s\"\n" msgstr "valor sslmode no válido: «%s»\n" -#: fe-connect.c:1336 -#, fuzzy -#| msgid "invalid proto_version" +#: fe-connect.c:1342 msgid "invalid SSL protocol version range\n" -msgstr "proto_version no válido" +msgstr "rango de protocolo SSL no válido \n" -#: fe-connect.c:1351 +#: fe-connect.c:1357 #, c-format msgid "invalid gssencmode value: \"%s\"\n" msgstr "valor gssencmode no válido: «%s»\n" -#: fe-connect.c:1360 +#: fe-connect.c:1366 #, c-format msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" msgstr "el valor gssencmode «%s» no es válido cuando no se ha compilado con soporte GSSAPI\n" -#: fe-connect.c:1395 +#: fe-connect.c:1401 #, c-format msgid "invalid target_session_attrs value: \"%s\"\n" msgstr "valor para target_session_attrs no válido: «%s»\n" -#: fe-connect.c:1613 +#: fe-connect.c:1619 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "no se pudo establecer el socket en modo TCP sin retardo: %s\n" -#: fe-connect.c:1674 +#: fe-connect.c:1680 #, c-format msgid "" "could not connect to server: %s\n" @@ -316,7 +307,7 @@ msgstr "" "\t¿Está el servidor en ejecución localmente y aceptando\n" "\tconexiones en el socket de dominio Unix «%s»?\n" -#: fe-connect.c:1711 +#: fe-connect.c:1717 #, c-format msgid "" "could not connect to server: %s\n" @@ -327,7 +318,7 @@ msgstr "" "\t¿Está el servidor en ejecución en el servidor «%s» (%s) y aceptando\n" "\tconexiones TCP/IP en el puerto %s?\n" -#: fe-connect.c:1719 +#: fe-connect.c:1725 #, c-format msgid "" "could not connect to server: %s\n" @@ -338,132 +329,132 @@ msgstr "" "\t¿Está el servidor en ejecución en el servidor «%s» y aceptando\n" "\tconexiones TCP/IP en el puerto %s?\n" -#: fe-connect.c:1789 +#: fe-connect.c:1795 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "valor entero «%s» no válido para la opción de conexión «%s»\n" -#: fe-connect.c:1819 fe-connect.c:1853 fe-connect.c:1888 fe-connect.c:1975 -#: fe-connect.c:2619 +#: fe-connect.c:1825 fe-connect.c:1859 fe-connect.c:1894 fe-connect.c:1981 +#: fe-connect.c:2623 #, c-format msgid "setsockopt(%s) failed: %s\n" msgstr "setsockopt(%s) falló: %s\n" -#: fe-connect.c:1941 +#: fe-connect.c:1947 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" -#: fe-connect.c:2312 +#: fe-connect.c:2313 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "el estado de conexión no es válido, probablemente por corrupción de memoria\n" -#: fe-connect.c:2378 +#: fe-connect.c:2379 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "número de puerto no válido: «%s»\n" -#: fe-connect.c:2394 +#: fe-connect.c:2395 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "no se pudo traducir el nombre «%s» a una dirección: %s\n" -#: fe-connect.c:2407 +#: fe-connect.c:2408 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "no se pudo interpretar la dirección de red «%s»: %s\n" -#: fe-connect.c:2420 +#: fe-connect.c:2421 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "la ruta del socket de dominio Unix «%s» es demasiado larga (máximo %d bytes)\n" -#: fe-connect.c:2435 +#: fe-connect.c:2436 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "no se pudo traducir la ruta del socket Unix «%s» a una dirección: %s\n" -#: fe-connect.c:2556 +#: fe-connect.c:2560 #, c-format msgid "could not create socket: %s\n" msgstr "no se pudo crear el socket: %s\n" -#: fe-connect.c:2578 +#: fe-connect.c:2582 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "no se pudo establecer el socket en modo no bloqueante: %s\n" -#: fe-connect.c:2588 +#: fe-connect.c:2592 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "no se pudo poner el socket en modo close-on-exec: %s\n" -#: fe-connect.c:2606 +#: fe-connect.c:2610 msgid "keepalives parameter must be an integer\n" msgstr "el parámetro de keepalives debe ser un entero\n" -#: fe-connect.c:2746 +#: fe-connect.c:2750 #, c-format msgid "could not get socket error status: %s\n" msgstr "no se pudo determinar el estado de error del socket: %s\n" -#: fe-connect.c:2774 +#: fe-connect.c:2778 #, c-format msgid "could not get client address from socket: %s\n" msgstr "no se pudo obtener la dirección del cliente desde el socket: %s\n" -#: fe-connect.c:2816 +#: fe-connect.c:2820 msgid "requirepeer parameter is not supported on this platform\n" msgstr "el parámetro requirepeer no está soportado en esta plataforma\n" -#: fe-connect.c:2819 +#: fe-connect.c:2823 #, c-format msgid "could not get peer credentials: %s\n" msgstr "no se pudo obtener credenciales de la contraparte: %s\n" -#: fe-connect.c:2843 +#: fe-connect.c:2847 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer especifica «%s», pero el nombre de usuario de la contraparte es «%s»\n" -#: fe-connect.c:2883 +#: fe-connect.c:2887 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "no se pudo enviar el paquete de negociación GSSAPI: %s\n" -#: fe-connect.c:2895 +#: fe-connect.c:2899 msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" msgstr "cifrado GSSAPI requerido, pero fue imposible (posiblemente no hay cache de credenciales, no hay soporte de servidor, o se está usando un socket local)\n" -#: fe-connect.c:2922 +#: fe-connect.c:2926 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "no se pudo enviar el paquete de negociación SSL: %s\n" -#: fe-connect.c:2961 +#: fe-connect.c:2965 #, c-format msgid "could not send startup packet: %s\n" msgstr "no se pudo enviar el paquete de inicio: %s\n" -#: fe-connect.c:3031 +#: fe-connect.c:3035 msgid "server does not support SSL, but SSL was required\n" msgstr "el servidor no soporta SSL, pero SSL es requerida\n" -#: fe-connect.c:3057 +#: fe-connect.c:3061 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "se ha recibido una respuesta no válida en la negociación SSL: %c\n" -#: fe-connect.c:3147 +#: fe-connect.c:3151 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "el servidor no soporta cifrado GSSAPI, pero es requerida\n" -#: fe-connect.c:3158 +#: fe-connect.c:3162 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "se ha recibido una respuesta no válida en la negociación GSSAPI: %c\n" -#: fe-connect.c:3225 fe-connect.c:3256 +#: fe-connect.c:3229 fe-connect.c:3260 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "se esperaba una petición de autentificación desde el servidor, pero se ha recibido %c\n" @@ -487,167 +478,161 @@ msgstr "la prueba «SHOW transaction_read_only» falló en el servidor «%s:%s» msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "estado de conexión no válido %d, probablemente por corrupción de memoria\n" -#: fe-connect.c:4220 fe-connect.c:4280 +#: fe-connect.c:4204 fe-connect.c:4264 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc «%s» falló durante el evento PGEVT_CONNRESET\n" -#: fe-connect.c:4627 +#: fe-connect.c:4611 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "URL LDAP no válida «%s»: el esquema debe ser ldap://\n" -#: fe-connect.c:4642 +#: fe-connect.c:4626 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "URL LDAP no válida «%s»: distinguished name faltante\n" -#: fe-connect.c:4654 fe-connect.c:4709 +#: fe-connect.c:4638 fe-connect.c:4693 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "URL LDAP no válida «%s»: debe tener exactamente un atributo\n" -#: fe-connect.c:4665 fe-connect.c:4724 +#: fe-connect.c:4649 fe-connect.c:4708 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "URL LDAP no válida «%s»: debe tener ámbito de búsqueda (base/one/sub)\n" -#: fe-connect.c:4676 +#: fe-connect.c:4660 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "URL LDAP no válida «%s»: no tiene filtro\n" -#: fe-connect.c:4697 +#: fe-connect.c:4681 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "URL LDAP no válida «%s»: número de puerto no válido\n" -#: fe-connect.c:4733 +#: fe-connect.c:4717 msgid "could not create LDAP structure\n" msgstr "no se pudo crear estructura LDAP\n" -#: fe-connect.c:4809 +#: fe-connect.c:4793 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "búsqueda en servidor LDAP falló: %s\n" -#: fe-connect.c:4820 +#: fe-connect.c:4804 msgid "more than one entry found on LDAP lookup\n" msgstr "se encontro más de una entrada en búsqueda LDAP\n" -#: fe-connect.c:4821 fe-connect.c:4833 +#: fe-connect.c:4805 fe-connect.c:4817 msgid "no entry found on LDAP lookup\n" msgstr "no se encontró ninguna entrada en búsqueda LDAP\n" -#: fe-connect.c:4844 fe-connect.c:4857 +#: fe-connect.c:4828 fe-connect.c:4841 msgid "attribute has no values on LDAP lookup\n" msgstr "la búsqueda LDAP entregó atributo sin valores\n" -#: fe-connect.c:4909 fe-connect.c:4928 fe-connect.c:5460 +#: fe-connect.c:4893 fe-connect.c:4912 fe-connect.c:5444 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "falta «=» después de «%s» en la cadena de información de la conexión\n" -#: fe-connect.c:5001 fe-connect.c:5645 fe-connect.c:6419 +#: fe-connect.c:4985 fe-connect.c:5629 fe-connect.c:6403 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "opción de conexión no válida «%s»\n" -#: fe-connect.c:5017 fe-connect.c:5509 +#: fe-connect.c:5001 fe-connect.c:5493 msgid "unterminated quoted string in connection info string\n" msgstr "cadena de caracteres entre comillas sin terminar en la cadena de información de conexión\n" -#: fe-connect.c:5100 +#: fe-connect.c:5084 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "la definición de servicio «%s» no fue encontrada\n" -#: fe-connect.c:5123 +#: fe-connect.c:5107 #, c-format msgid "service file \"%s\" not found\n" msgstr "el archivo de servicio «%s» no fue encontrado\n" -#: fe-connect.c:5138 +#: fe-connect.c:5122 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "la línea %d es demasiado larga en archivo de servicio «%s»\n" -#: fe-connect.c:5210 fe-connect.c:5254 +#: fe-connect.c:5194 fe-connect.c:5238 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "error de sintaxis en archivo de servicio «%s», línea %d\n" -#: fe-connect.c:5221 +#: fe-connect.c:5205 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "especificaciones de servicio anidadas no soportadas en archivo de servicio «%s», línea %d\n" -#: fe-connect.c:5941 +#: fe-connect.c:5925 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "URI no válida propagada a rutina interna de procesamiento: «%s»\n" -#: fe-connect.c:6018 +#: fe-connect.c:6002 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "se encontró el fin de la cadena mientras se buscaba el «]» correspondiente en dirección IPv6 en URI: «%s»\n" -#: fe-connect.c:6025 +#: fe-connect.c:6009 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "la dirección IPv6 no puede ser vacía en la URI: «%s»\n" -#: fe-connect.c:6040 +#: fe-connect.c:6024 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "carácter «%c» inesperado en la posición %d en URI (se esperaba «:» o «/»): «%s»\n" -#: fe-connect.c:6169 +#: fe-connect.c:6153 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "separador llave/valor «=» extra en parámetro de la URI: «%s»\n" -#: fe-connect.c:6189 +#: fe-connect.c:6173 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "separador llave/valor «=» faltante en parámetro de la URI: «%s»\n" -#: fe-connect.c:6240 +#: fe-connect.c:6224 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "parámetro de URI no válido: «%s»\n" -#: fe-connect.c:6314 +#: fe-connect.c:6298 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "elemento escapado con %% no válido: «%s»\n" -#: fe-connect.c:6324 +#: fe-connect.c:6308 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "valor no permitido %%00 en valor escapado con %%: «%s»\n" -#: fe-connect.c:6687 +#: fe-connect.c:6671 msgid "connection pointer is NULL\n" msgstr "el puntero de conexión es NULL\n" -#: fe-connect.c:6986 +#: fe-connect.c:6967 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "ADVERTENCIA: El archivo de claves «%s» no es un archivo plano\n" -#: fe-connect.c:6995 +#: fe-connect.c:6976 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "ADVERTENCIA: El archivo de claves «%s» tiene permiso de lectura para el grupo u otros; los permisos deberían ser u=rw (0600) o menos\n" -#: fe-connect.c:7036 -#, fuzzy, c-format -#| msgid "line %d too long in service file \"%s\"\n" -msgid "WARNING: line %d too long in password file \"%s\"\n" -msgstr "la línea %d es demasiado larga en archivo de servicio «%s»\n" - -#: fe-connect.c:7115 +#: fe-connect.c:7084 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "contraseña obtenida desde el archivo «%s»\n" @@ -871,7 +856,7 @@ msgstr "el entero de tamaño %lu no está soportado por pqGetInt" msgid "integer of size %lu not supported by pqPutInt" msgstr "el entero de tamaño %lu no está soportado por pqPutInt" -#: fe-misc.c:636 fe-misc.c:857 +#: fe-misc.c:636 fe-misc.c:869 msgid "connection not open\n" msgstr "la conexión no está abierta\n" @@ -886,15 +871,15 @@ msgstr "" "\tProbablemente se debe a que el servidor terminó de manera anormal\n" "\tantes o durante el procesamiento de la petición.\n" -#: fe-misc.c:1044 +#: fe-misc.c:1063 msgid "timeout expired\n" msgstr "tiempo de espera agotado\n" -#: fe-misc.c:1089 +#: fe-misc.c:1108 msgid "invalid socket\n" msgstr "socket no válido\n" -#: fe-misc.c:1112 +#: fe-misc.c:1131 #, c-format msgid "select() failed: %s\n" msgstr "select() fallida: %s\n" @@ -1137,7 +1122,7 @@ msgstr "error de SSL: %s\n" msgid "SSL connection has been closed unexpectedly\n" msgstr "la conexión SSL se ha cerrado inesperadamente\n" -#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1313 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1354 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "código de error SSL no reconocido: %d\n" @@ -1165,28 +1150,24 @@ msgid "could not create SSL context: %s\n" msgstr "no se pudo crear un contexto SSL: %s\n" #: fe-secure-openssl.c:854 -#, fuzzy, c-format -#| msgid "invalid integer value \"%s\" for connection option \"%s\"\n" -msgid "invalid value \"%s\" for minimum version of SSL protocol\n" -msgstr "valor entero «%s» no válido para la opción de conexión «%s»\n" +#, c-format +msgid "invalid value \"%s\" for minimum SSL protocol version\n" +msgstr "valor entero «%s» no válido para la versión mínima del protocolo SSL\n" #: fe-secure-openssl.c:865 -#, fuzzy, c-format -#| msgid "could not set minimum SSL protocol version" -msgid "could not set minimum version of SSL protocol: %s\n" -msgstr "no se pudo definir la versión mínima de protocolo SSL" +#, c-format +msgid "could not set minimum SSL protocol version: %s\n" +msgstr "no se pudo definir la versión mínima de protocolo SSL: %s\n" #: fe-secure-openssl.c:883 -#, fuzzy, c-format -#| msgid "invalid value for \"buffering\" option" -msgid "invalid value \"%s\" for maximum version of SSL protocol\n" -msgstr "valor no válido para la opción «buffering»" +#, c-format +msgid "invalid value \"%s\" for maximum SSL protocol version\n" +msgstr "valor entero «%s» no válido para la versión máxima del protocolo SSL\n" #: fe-secure-openssl.c:894 -#, fuzzy, c-format -#| msgid "could not set maximum SSL protocol version" -msgid "could not set maximum version of SSL protocol: %s\n" -msgstr "no se pudo definir la versión máxima de protocolo SSL" +#, c-format +msgid "could not set maximum SSL protocol version: %s\n" +msgstr "no se pudo definir la versión máxima de protocolo SSL: %s\n" #: fe-secure-openssl.c:930 #, c-format @@ -1265,25 +1246,30 @@ msgstr "no se pudo cargar el archivo de la llave privada «%s»: %s\n" msgid "certificate does not match private key file \"%s\": %s\n" msgstr "el certificado no coincide con la llave privada «%s»: %s\n" -#: fe-secure-openssl.c:1332 +#: fe-secure-openssl.c:1337 +#, c-format +msgid "This may indicate that the server does not support any SSL protocol version between %s and %s.\n" +msgstr "Esto puede indicar que el servidor no soporta ninguna versión del protocolo SSL entre %s and %s.\n" + +#: fe-secure-openssl.c:1373 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "el certificado no pudo ser obtenido: %s\n" -#: fe-secure-openssl.c:1421 +#: fe-secure-openssl.c:1462 #, c-format msgid "no SSL error reported" msgstr "código de error SSL no reportado" -#: fe-secure-openssl.c:1430 +#: fe-secure-openssl.c:1471 #, c-format msgid "SSL error code %lu" msgstr "código de error SSL %lu" -#: fe-secure-openssl.c:1677 +#: fe-secure-openssl.c:1718 #, c-format msgid "WARNING: sslpassword truncated\n" -msgstr "" +msgstr "ADVERTENCIA: sslpassword truncada\n" #: fe-secure.c:275 #, c-format @@ -1299,6 +1285,3 @@ msgstr "no se pudo enviar datos al servidor: %s\n" #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "código de error de socket no reconocido: 0x%08X/%d" - -#~ msgid "SSL library does not support CRL certificates (file \"%s\")\n" -#~ msgstr "la biblioteca SSL no soporta certificados CRL (archivo «%s»)\n" diff --git a/src/interfaces/libpq/po/fr.po b/src/interfaces/libpq/po/fr.po index 2c62699dfe89b..36c653db56ae2 100644 --- a/src/interfaces/libpq/po/fr.po +++ b/src/interfaces/libpq/po/fr.po @@ -7,98 +7,106 @@ # Stéphane Schildknecht , 2009. msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 12\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-10 20:39+0000\n" -"PO-Revision-Date: 2020-05-11 09:23+0200\n" +"POT-Creation-Date: 2021-04-26 06:39+0000\n" +"PO-Revision-Date: 2021-04-26 11:37+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: PostgreSQLfr \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" -#: fe-auth-scram.c:212 +#: fe-auth-scram.c:213 msgid "malformed SCRAM message (empty message)\n" msgstr "message SCRAM malformé (message vide)\n" -#: fe-auth-scram.c:218 +#: fe-auth-scram.c:219 msgid "malformed SCRAM message (length mismatch)\n" msgstr "message SCRAM malformé (pas de correspondance sur la longueur)\n" -#: fe-auth-scram.c:265 +#: fe-auth-scram.c:263 +msgid "could not verify server signature\n" +msgstr "n'a pas pu vérifier la signature du serveur\n" + +#: fe-auth-scram.c:270 msgid "incorrect server signature\n" msgstr "signature invalide du serveur\n" -#: fe-auth-scram.c:274 +#: fe-auth-scram.c:279 msgid "invalid SCRAM exchange state\n" msgstr "état d'échange SCRAM invalide\n" -#: fe-auth-scram.c:296 +#: fe-auth-scram.c:306 #, c-format msgid "malformed SCRAM message (attribute \"%c\" expected)\n" msgstr "message SCRAM malformé (attribut « %c » attendu)\n" -#: fe-auth-scram.c:305 +#: fe-auth-scram.c:315 #, c-format msgid "malformed SCRAM message (expected character \"=\" for attribute \"%c\")\n" msgstr "message SCRAM malformé (caractère « = » attendu pour l'attribut « %c »)\n" -#: fe-auth-scram.c:346 +#: fe-auth-scram.c:356 msgid "could not generate nonce\n" msgstr "n'a pas pu générer le nonce\n" -#: fe-auth-scram.c:356 fe-auth-scram.c:431 fe-auth-scram.c:579 -#: fe-auth-scram.c:600 fe-auth-scram.c:626 fe-auth-scram.c:641 -#: fe-auth-scram.c:691 fe-auth-scram.c:725 fe-auth.c:289 fe-auth.c:359 -#: fe-auth.c:394 fe-auth.c:611 fe-auth.c:770 fe-auth.c:1129 fe-auth.c:1277 -#: fe-connect.c:886 fe-connect.c:1413 fe-connect.c:1589 fe-connect.c:2199 -#: fe-connect.c:2222 fe-connect.c:2948 fe-connect.c:4614 fe-connect.c:4870 -#: fe-connect.c:4989 fe-connect.c:5242 fe-connect.c:5322 fe-connect.c:5421 -#: fe-connect.c:5677 fe-connect.c:5706 fe-connect.c:5778 fe-connect.c:5802 -#: fe-connect.c:5820 fe-connect.c:5921 fe-connect.c:5930 fe-connect.c:6286 -#: fe-connect.c:6436 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 -#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1207 fe-protocol3.c:995 -#: fe-protocol3.c:1699 fe-secure-common.c:110 fe-secure-gssapi.c:504 -#: fe-secure-openssl.c:440 fe-secure-openssl.c:1092 +#: fe-auth-scram.c:366 fe-auth-scram.c:441 fe-auth-scram.c:595 +#: fe-auth-scram.c:616 fe-auth-scram.c:642 fe-auth-scram.c:657 +#: fe-auth-scram.c:707 fe-auth-scram.c:746 fe-auth.c:290 fe-auth.c:362 +#: fe-auth.c:398 fe-auth.c:615 fe-auth.c:774 fe-auth.c:1132 fe-auth.c:1282 +#: fe-connect.c:912 fe-connect.c:1456 fe-connect.c:1625 fe-connect.c:2976 +#: fe-connect.c:4655 fe-connect.c:4916 fe-connect.c:5035 fe-connect.c:5279 +#: fe-connect.c:5361 fe-connect.c:5460 fe-connect.c:5716 fe-connect.c:5745 +#: fe-connect.c:5817 fe-connect.c:5841 fe-connect.c:5859 fe-connect.c:5960 +#: fe-connect.c:5969 fe-connect.c:6327 fe-connect.c:6477 fe-exec.c:1209 +#: fe-exec.c:2993 fe-exec.c:3145 fe-exec.c:3918 fe-exec.c:4083 +#: fe-gssapi-common.c:110 fe-lobj.c:881 fe-protocol3.c:1016 fe-protocol3.c:1724 +#: fe-secure-common.c:110 fe-secure-gssapi.c:504 fe-secure-openssl.c:440 +#: fe-secure-openssl.c:1129 msgid "out of memory\n" msgstr "mémoire épuisée\n" -#: fe-auth-scram.c:364 +#: fe-auth-scram.c:374 msgid "could not encode nonce\n" msgstr "n'a pas pu encoder le nonce\n" #: fe-auth-scram.c:563 +msgid "could not calculate client proof\n" +msgstr "n'a pas pu calculer la preuve du client\n" + +#: fe-auth-scram.c:579 msgid "could not encode client proof\n" msgstr "n'a pas pu encoder la preuve du client\n" -#: fe-auth-scram.c:618 +#: fe-auth-scram.c:634 msgid "invalid SCRAM response (nonce mismatch)\n" msgstr "réponse SCRAM invalide (pas de correspondance sur nonce)\n" -#: fe-auth-scram.c:651 +#: fe-auth-scram.c:667 msgid "malformed SCRAM message (invalid salt)\n" msgstr "message SCRAM malformé (sel invalide)\n" -#: fe-auth-scram.c:665 +#: fe-auth-scram.c:681 msgid "malformed SCRAM message (invalid iteration count)\n" msgstr "message SCRAM malformé (décompte d'itération invalide)\n" -#: fe-auth-scram.c:671 +#: fe-auth-scram.c:687 msgid "malformed SCRAM message (garbage at end of server-first-message)\n" msgstr "message SCRAM malformé (problème à la fin du server-first-message)\n" -#: fe-auth-scram.c:702 +#: fe-auth-scram.c:723 #, c-format msgid "error received from server in SCRAM exchange: %s\n" msgstr "réception d'une erreur du serveur dans l'échange SCRAM : %s\n" -#: fe-auth-scram.c:718 +#: fe-auth-scram.c:739 msgid "malformed SCRAM message (garbage at end of server-final-message)\n" msgstr "message SCRAM malformé (problème à la fin du server-final-message)\n" -#: fe-auth-scram.c:737 +#: fe-auth-scram.c:758 msgid "malformed SCRAM message (invalid server signature)\n" msgstr "message SCRAM malformé (signature serveur invalide)\n" @@ -111,7 +119,7 @@ msgstr "mémoire épuisée lors de l'allocation du tampon GSSAPI (%d)\n" msgid "GSSAPI continuation error" msgstr "erreur de suite GSSAPI" -#: fe-auth.c:158 fe-auth.c:388 fe-gssapi-common.c:98 fe-secure-common.c:98 +#: fe-auth.c:158 fe-auth.c:391 fe-gssapi-common.c:97 fe-secure-common.c:98 msgid "host name must be specified\n" msgstr "le nom d'hôte doit être précisé\n" @@ -128,50 +136,50 @@ msgstr "mémoire épuisée lors de l'allocation du tampon SSPI (%d)\n" msgid "SSPI continuation error" msgstr "erreur de suite SSPI" -#: fe-auth.c:349 +#: fe-auth.c:351 msgid "duplicate SSPI authentication request\n" msgstr "requête d'authentification SSPI dupliquée\n" -#: fe-auth.c:374 +#: fe-auth.c:377 msgid "could not acquire SSPI credentials" msgstr "n'a pas pu récupérer les pièces d'identité SSPI" -#: fe-auth.c:429 +#: fe-auth.c:433 msgid "channel binding required, but SSL not in use\n" msgstr "lien de canal requis, mais SSL non utilisé\n" -#: fe-auth.c:436 +#: fe-auth.c:440 msgid "duplicate SASL authentication request\n" msgstr "requête d'authentification SASL dupliquée\n" -#: fe-auth.c:492 +#: fe-auth.c:496 msgid "channel binding is required, but client does not support it\n" msgstr "le lien de canal SCRAM est requis mais le client ne supporte par cette option\n" -#: fe-auth.c:509 +#: fe-auth.c:513 msgid "server offered SCRAM-SHA-256-PLUS authentication over a non-SSL connection\n" msgstr "le serveur a proposé une authentification SCRAM-SHA-256-PLUS sur une connexion non SSL\n" -#: fe-auth.c:521 +#: fe-auth.c:525 msgid "none of the server's SASL authentication mechanisms are supported\n" msgstr "" "authentification Kerberos 4 non supportée\n" "aucun des mécanismes d'authentification SASL du serveur n'est supporté\n" -#: fe-auth.c:529 +#: fe-auth.c:533 msgid "channel binding is required, but server did not offer an authentication method that supports channel binding\n" msgstr "Lien de canal requis, mais le serveur ne propose pas de méthode d'authentification le supportant\n" -#: fe-auth.c:635 +#: fe-auth.c:639 #, c-format msgid "out of memory allocating SASL buffer (%d)\n" msgstr "mémoire épuisée lors de l'allocation du tampon SASL (%d)\n" -#: fe-auth.c:660 +#: fe-auth.c:664 msgid "AuthenticationSASLFinal received from server, but SASL authentication was not completed\n" msgstr "AuthenticationSASLFinal reçu du serveur mais l'authentification SASL n'a pas été terminée\n" -#: fe-auth.c:737 +#: fe-auth.c:741 msgid "SCM_CRED authentication method not supported\n" msgstr "authentification SCM_CRED non supportée\n" @@ -183,460 +191,435 @@ msgstr "lien de canal requis, mais le serveur a authentifié le client sans lien msgid "channel binding required but not supported by server's authentication request\n" msgstr "lien de canal requis, mais non supporté par la requête d'authentification du serveur\n" -#: fe-auth.c:875 +#: fe-auth.c:877 msgid "Kerberos 4 authentication not supported\n" msgstr "authentification Kerberos 4 non supportée\n" -#: fe-auth.c:880 +#: fe-auth.c:882 msgid "Kerberos 5 authentication not supported\n" msgstr "authentification Kerberos 5 non supportée\n" -#: fe-auth.c:951 +#: fe-auth.c:953 msgid "GSSAPI authentication not supported\n" msgstr "authentification GSSAPI non supportée\n" -#: fe-auth.c:983 +#: fe-auth.c:985 msgid "SSPI authentication not supported\n" msgstr "authentification SSPI non supportée\n" -#: fe-auth.c:991 +#: fe-auth.c:993 msgid "Crypt authentication not supported\n" msgstr "authentification crypt non supportée\n" -#: fe-auth.c:1057 +#: fe-auth.c:1060 #, c-format msgid "authentication method %u not supported\n" msgstr "méthode d'authentification %u non supportée\n" -#: fe-auth.c:1104 +#: fe-auth.c:1107 #, c-format msgid "user name lookup failure: error code %lu\n" msgstr "échec de la recherche du nom d'utilisateur : code erreur %lu\n" -#: fe-auth.c:1114 fe-connect.c:2830 +#: fe-auth.c:1117 fe-connect.c:2851 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "n'a pas pu rechercher l'identifiant de l'utilisateur local %d : %s\n" -#: fe-auth.c:1119 fe-connect.c:2835 +#: fe-auth.c:1122 fe-connect.c:2856 #, c-format msgid "local user with ID %d does not exist\n" msgstr "l'utilisateur local dont l'identifiant est %d n'existe pas\n" -#: fe-auth.c:1221 +#: fe-auth.c:1226 msgid "unexpected shape of result set returned for SHOW\n" msgstr "forme du résultat inattendu pour SHOW\n" -#: fe-auth.c:1230 +#: fe-auth.c:1235 msgid "password_encryption value too long\n" msgstr "la valeur de password_encryption est trop longue\n" -#: fe-auth.c:1270 +#: fe-auth.c:1275 #, c-format msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "algorithme de chiffrement du mot de passe « %s » non reconnu\n" -#: fe-connect.c:1069 +#: fe-connect.c:1095 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "n'a pas pu faire correspondre les %d noms d'hôte aux %d valeurs hostaddr\n" -#: fe-connect.c:1150 +#: fe-connect.c:1176 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "n'a pas pu faire correspondre les %d numéros de port aux %d hôtes\n" -#: fe-connect.c:1243 +#: fe-connect.c:1269 fe-connect.c:1295 fe-connect.c:1337 fe-connect.c:1346 +#: fe-connect.c:1379 fe-connect.c:1423 #, c-format -msgid "invalid channel_binding value: \"%s\"\n" -msgstr "valeur de channel_binding invalide : « %s »\n" +msgid "invalid %s value: \"%s\"\n" +msgstr "valeur %s invalide : « %s »\n" -#: fe-connect.c:1269 -#, c-format -msgid "invalid sslmode value: \"%s\"\n" -msgstr "valeur sslmode invalide : « %s »\n" - -#: fe-connect.c:1290 +#: fe-connect.c:1316 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "valeur sslmode « %s » invalide si le support SSL n'est pas compilé initialement\n" -#: fe-connect.c:1311 -#, c-format -msgid "invalid ssl_min_protocol_version value: \"%s\"\n" -msgstr "valeur ssl_min_protocol_version invalide : « %s »\n" - -#: fe-connect.c:1319 -#, c-format -msgid "invalid ssl_max_protocol_version value: \"%s\"\n" -msgstr "valeur ssl_max_protocol_version invalide : « %s »\n" - -#: fe-connect.c:1336 +#: fe-connect.c:1364 msgid "invalid SSL protocol version range\n" msgstr "intervalle de version invalide pour le protocole SSL\n" -#: fe-connect.c:1351 -#, c-format -msgid "invalid gssencmode value: \"%s\"\n" -msgstr "valeur gssencmode invalide : « %s »\n" - -#: fe-connect.c:1360 +#: fe-connect.c:1389 #, c-format msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" msgstr "valeur gssencmode « %s » invalide si le support GSSAPI n'est pas compilé\n" -#: fe-connect.c:1395 -#, c-format -msgid "invalid target_session_attrs value: \"%s\"\n" -msgstr "valeur target_session_attrs invalide : « %s »\n" - -#: fe-connect.c:1613 +#: fe-connect.c:1649 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "n'a pas pu activer le mode TCP sans délai pour la socket : %s\n" -#: fe-connect.c:1674 +#: fe-connect.c:1711 #, c-format -msgid "" -"could not connect to server: %s\n" -"\tIs the server running locally and accepting\n" -"\tconnections on Unix domain socket \"%s\"?\n" -msgstr "" -"n'a pas pu se connecter au serveur : %s\n" -"\tLe serveur est-il actif localement et accepte-t-il les connexions sur la\n" -" \tsocket Unix « %s » ?\n" +msgid "connection to server on socket \"%s\" failed: " +msgstr "la connexion au serveur sur le socket « %s » a échoué : " -#: fe-connect.c:1711 +#: fe-connect.c:1738 #, c-format -msgid "" -"could not connect to server: %s\n" -"\tIs the server running on host \"%s\" (%s) and accepting\n" -"\tTCP/IP connections on port %s?\n" -msgstr "" -"n'a pas pu se connecter au serveur : %s\n" -"\tLe serveur est-il actif sur l'hôte « %s » (%s)\n" -"\tet accepte-t-il les connexionsTCP/IP sur le port %s ?\n" +msgid "connection to server at \"%s\" (%s), port %s failed: " +msgstr "la connexion au serveur sur « %s » (%s), port %s a échoué : " -#: fe-connect.c:1719 +#: fe-connect.c:1743 #, c-format -msgid "" -"could not connect to server: %s\n" -"\tIs the server running on host \"%s\" and accepting\n" -"\tTCP/IP connections on port %s?\n" -msgstr "" -"n'a pas pu se connecter au serveur : %s\n" -"\tLe serveur est-il actif sur l'hôte « %s » et accepte-t-il les connexions\n" -"\tTCP/IP sur le port %s ?\n" +msgid "connection to server at \"%s\", port %s failed: " +msgstr "la connexion au serveur sur « %s », port %s a échoué : " + +#: fe-connect.c:1768 +msgid "\tIs the server running locally and accepting connections on that socket?\n" +msgstr "\tLe serveur est-il actif localement et accepte-t-il les connexions sur ce socket ?\n" -#: fe-connect.c:1789 +#: fe-connect.c:1772 +msgid "\tIs the server running on that host and accepting TCP/IP connections?\n" +msgstr "\tLe serveur est-il actif sur cet hôte et accepte-t-il les connexions ?\n" + +#: fe-connect.c:1836 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "valeur entière « %s » invalide pour l'option de connexion « %s »\n" -#: fe-connect.c:1819 fe-connect.c:1853 fe-connect.c:1888 fe-connect.c:1975 -#: fe-connect.c:2619 +#: fe-connect.c:1866 fe-connect.c:1901 fe-connect.c:1937 fe-connect.c:2025 +#: fe-connect.c:2639 #, c-format -msgid "setsockopt(%s) failed: %s\n" -msgstr "setsockopt(%s) a échoué : %s\n" +msgid "%s(%s) failed: %s\n" +msgstr "échec de %s(%s) : %s\n" -#: fe-connect.c:1941 +#: fe-connect.c:1991 #, c-format -msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" -msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) a échoué : %ui\n" +msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %d\n" +msgstr "échec de WSAIoctl(SIO_KEEPALIVE_VALS) : %d\n" -#: fe-connect.c:2312 +#: fe-connect.c:2305 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "état de connexion invalide, indique probablement une corruption de mémoire\n" -#: fe-connect.c:2378 +#: fe-connect.c:2384 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "numéro de port invalide : « %s »\n" -#: fe-connect.c:2394 +#: fe-connect.c:2400 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "n'a pas pu traduire le nom d'hôte « %s » en adresse : %s\n" -#: fe-connect.c:2407 +#: fe-connect.c:2413 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "n'a pas pu analyser l'adresse réseau « %s » : %s\n" -#: fe-connect.c:2420 +#: fe-connect.c:2426 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Le chemin du socket de domaine Unix, « %s », est trop (maximum %d octets)\n" -#: fe-connect.c:2435 +#: fe-connect.c:2441 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "" "n'a pas pu traduire le chemin de la socket du domaine Unix « %s » en adresse :\n" "%s\n" -#: fe-connect.c:2556 +#: fe-connect.c:2567 #, c-format msgid "could not create socket: %s\n" msgstr "n'a pas pu créer la socket : %s\n" -#: fe-connect.c:2578 +#: fe-connect.c:2598 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "n'a pas pu activer le mode non-bloquant pour la socket : %s\n" -#: fe-connect.c:2588 +#: fe-connect.c:2608 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "n'a pas pu paramétrer la socket en mode close-on-exec : %s\n" -#: fe-connect.c:2606 +#: fe-connect.c:2626 msgid "keepalives parameter must be an integer\n" msgstr "le paramètre keepalives doit être un entier\n" -#: fe-connect.c:2746 +#: fe-connect.c:2767 #, c-format msgid "could not get socket error status: %s\n" msgstr "n'a pas pu déterminer le statut d'erreur de la socket : %s\n" -#: fe-connect.c:2774 +#: fe-connect.c:2795 #, c-format msgid "could not get client address from socket: %s\n" msgstr "n'a pas pu obtenir l'adresse du client depuis la socket : %s\n" -#: fe-connect.c:2816 +#: fe-connect.c:2837 msgid "requirepeer parameter is not supported on this platform\n" msgstr "le paramètre requirepeer n'est pas supporté sur cette plateforme\n" -#: fe-connect.c:2819 +#: fe-connect.c:2840 #, c-format msgid "could not get peer credentials: %s\n" msgstr "n'a pas pu obtenir l'authentification de l'autre : %s\n" -#: fe-connect.c:2843 +#: fe-connect.c:2864 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer indique « %s » mais le nom de l'utilisateur réel est « %s »\n" -#: fe-connect.c:2883 +#: fe-connect.c:2904 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "n'a pas pu transmettre le paquet de négociation GSSAPI : %s\n" -#: fe-connect.c:2895 +#: fe-connect.c:2916 msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" msgstr "le chiffrage avec GSSAPI était requis, mais impossible (potentiellement pas de cache, de support serveur ou de socket local)\n" -#: fe-connect.c:2922 +#: fe-connect.c:2958 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "n'a pas pu transmettre le paquet de négociation SSL : %s\n" -#: fe-connect.c:2961 +#: fe-connect.c:2989 #, c-format msgid "could not send startup packet: %s\n" msgstr "n'a pas pu transmettre le paquet de démarrage : %s\n" -#: fe-connect.c:3031 +#: fe-connect.c:3065 msgid "server does not support SSL, but SSL was required\n" msgstr "le serveur ne supporte pas SSL alors que SSL était réclamé\n" -#: fe-connect.c:3057 +#: fe-connect.c:3092 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "a reçu une réponse invalide à la négociation SSL : %c\n" -#: fe-connect.c:3147 +#: fe-connect.c:3181 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "le serveur ne supporte pas le chiffrage GSSAPI alors qu'il était réclamé\n" -#: fe-connect.c:3158 +#: fe-connect.c:3193 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "a reçu une réponse invalide à la négociation GSSAPI : %c\n" -#: fe-connect.c:3225 fe-connect.c:3256 +#: fe-connect.c:3259 fe-connect.c:3284 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "" "attendait une requête d'authentification en provenance du serveur, mais a\n" " reçu %c\n" -#: fe-connect.c:3502 +#: fe-connect.c:3491 msgid "unexpected message from server during startup\n" msgstr "message inattendu du serveur lors du démarrage\n" -#: fe-connect.c:3707 -#, c-format -msgid "could not make a writable connection to server \"%s:%s\"\n" -msgstr "n'a pas pu réaliser une connexion en écriture au serveur « %s » : %s\n" +#: fe-connect.c:3583 +msgid "session is read-only\n" +msgstr "la session est en lecture seule\n" -#: fe-connect.c:3753 -#, c-format -msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" -msgstr "le test \"SHOW transaction_read_only\" a échoué sur le serveur \"%s:%s\"\n" +#: fe-connect.c:3586 +msgid "session is not read-only\n" +msgstr "la session n'est pas en lecture seule\n" + +#: fe-connect.c:3640 +msgid "server is in hot standby mode\n" +msgstr "le serveur est dans le mode hot standby\n" + +#: fe-connect.c:3643 +msgid "server is not in hot standby mode\n" +msgstr "le serveur n'est pas dans le mode hot standby\n" + +#: fe-connect.c:3754 +msgid "\"SHOW transaction_read_only\" failed\n" +msgstr "\"SHOW transaction_read_only\" a échoué\n" -#: fe-connect.c:3768 +#: fe-connect.c:3805 +msgid "\"SELECT pg_is_in_recovery()\" failed\n" +msgstr "\"SELECT pg_is_in_recovery()\" a échoué\n" + +#: fe-connect.c:3818 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "" "état de connexion invalide (%d), indiquant probablement une corruption de\n" " mémoire\n" -#: fe-connect.c:4220 fe-connect.c:4280 +#: fe-connect.c:4264 fe-connect.c:4324 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "échec de PGEventProc « %s » lors de l'événement PGEVT_CONNRESET\n" -#: fe-connect.c:4627 +#: fe-connect.c:4668 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "URL LDAP « %s » invalide : le schéma doit être ldap://\n" -#: fe-connect.c:4642 +#: fe-connect.c:4683 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "URL LDAP « %s » invalide : le « distinguished name » manque\n" -#: fe-connect.c:4654 fe-connect.c:4709 +#: fe-connect.c:4695 fe-connect.c:4753 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "URL LDAP « %s » invalide : doit avoir exactement un attribut\n" -#: fe-connect.c:4665 fe-connect.c:4724 +#: fe-connect.c:4707 fe-connect.c:4769 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "URL LDAP « %s » invalide : doit avoir une échelle de recherche (base/un/sous)\n" -#: fe-connect.c:4676 +#: fe-connect.c:4719 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "URL LDAP « %s » invalide : aucun filtre\n" -#: fe-connect.c:4697 +#: fe-connect.c:4741 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "URL LDAP « %s » invalide : numéro de port invalide\n" -#: fe-connect.c:4733 +#: fe-connect.c:4779 msgid "could not create LDAP structure\n" msgstr "n'a pas pu créer la structure LDAP\n" -#: fe-connect.c:4809 +#: fe-connect.c:4855 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "échec de la recherche sur le serveur LDAP : %s\n" -#: fe-connect.c:4820 +#: fe-connect.c:4866 msgid "more than one entry found on LDAP lookup\n" msgstr "plusieurs entrées trouvées pendant la recherche LDAP\n" -#: fe-connect.c:4821 fe-connect.c:4833 +#: fe-connect.c:4867 fe-connect.c:4879 msgid "no entry found on LDAP lookup\n" msgstr "aucune entrée trouvée pendant la recherche LDAP\n" -#: fe-connect.c:4844 fe-connect.c:4857 +#: fe-connect.c:4890 fe-connect.c:4903 msgid "attribute has no values on LDAP lookup\n" msgstr "l'attribut n'a pas de valeur après la recherche LDAP\n" -#: fe-connect.c:4909 fe-connect.c:4928 fe-connect.c:5460 +#: fe-connect.c:4955 fe-connect.c:4974 fe-connect.c:5499 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "« = » manquant après « %s » dans la chaîne des paramètres de connexion\n" -#: fe-connect.c:5001 fe-connect.c:5645 fe-connect.c:6419 +#: fe-connect.c:5047 fe-connect.c:5684 fe-connect.c:6460 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "option de connexion « %s » invalide\n" -#: fe-connect.c:5017 fe-connect.c:5509 +#: fe-connect.c:5063 fe-connect.c:5548 msgid "unterminated quoted string in connection info string\n" msgstr "guillemets non refermés dans la chaîne des paramètres de connexion\n" -#: fe-connect.c:5100 +#: fe-connect.c:5144 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "définition du service « %s » introuvable\n" -#: fe-connect.c:5123 +#: fe-connect.c:5170 #, c-format msgid "service file \"%s\" not found\n" msgstr "fichier de service « %s » introuvable\n" -#: fe-connect.c:5138 -#, c-format -msgid "line %d too long in service file \"%s\"\n" -msgstr "ligne %d trop longue dans le fichier service « %s »\n" - -#: fe-connect.c:5210 fe-connect.c:5254 +#: fe-connect.c:5247 fe-connect.c:5291 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "erreur de syntaxe dans le fichier service « %s », ligne %d\n" -#: fe-connect.c:5221 +#: fe-connect.c:5258 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "spécifications imbriquées de service non supportées dans le fichier service « %s », ligne %d\n" -#: fe-connect.c:5941 +#: fe-connect.c:5980 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "URI invalide propagée à la routine d'analyse interne : « %s »\n" -#: fe-connect.c:6018 +#: fe-connect.c:6057 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "" "fin de chaîne atteinte lors de la recherche du « ] » correspondant dans\n" "l'adresse IPv6 de l'hôte indiquée dans l'URI : « %s »\n" -#: fe-connect.c:6025 +#: fe-connect.c:6064 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "l'adresse IPv6 de l'hôte ne peut pas être vide dans l'URI : « %s »\n" -#: fe-connect.c:6040 +#: fe-connect.c:6079 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "" "caractère « %c » inattendu à la position %d de l'URI (caractère « : » ou\n" "« / » attendu) : « %s »\n" -#: fe-connect.c:6169 +#: fe-connect.c:6209 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "séparateur « = » de clé/valeur en trop dans le paramètre de requête URI : « %s »\n" -#: fe-connect.c:6189 +#: fe-connect.c:6229 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "séparateur « = » de clé/valeur manquant dans le paramètre de requête URI : « %s »\n" -#: fe-connect.c:6240 +#: fe-connect.c:6281 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "paramètre de la requête URI invalide : « %s »\n" -#: fe-connect.c:6314 +#: fe-connect.c:6355 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "jeton encodé en pourcentage invalide : « %s »\n" -#: fe-connect.c:6324 +#: fe-connect.c:6365 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "valeur %%00 interdite dans la valeur codée en pourcentage : « %s »\n" -#: fe-connect.c:6687 +#: fe-connect.c:6735 msgid "connection pointer is NULL\n" msgstr "le pointeur de connexion est NULL\n" -#: fe-connect.c:6986 +#: fe-connect.c:7015 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "ATTENTION : le fichier de mots de passe « %s » n'est pas un fichier texte\n" -#: fe-connect.c:6995 +#: fe-connect.c:7024 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "" @@ -644,243 +627,207 @@ msgstr "" "lecture pour le groupe ou universel ; les droits devraient être u=rw (0600)\n" "ou inférieur\n" -#: fe-connect.c:7036 -#, c-format -msgid "WARNING: line %d too long in password file \"%s\"\n" -msgstr "ATTENTION : ligne %d trop longue dans le fichier de mots de passe « %s »\n" - -#: fe-connect.c:7115 +#: fe-connect.c:7132 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "mot de passe récupéré dans le fichier « %s »\n" -#: fe-exec.c:444 fe-exec.c:2821 +#: fe-exec.c:449 fe-exec.c:3219 #, c-format msgid "row number %d is out of range 0..%d" msgstr "le numéro de ligne %d est en dehors des limites 0..%d" -#: fe-exec.c:505 fe-protocol2.c:497 fe-protocol2.c:532 fe-protocol2.c:1050 -#: fe-protocol3.c:206 fe-protocol3.c:233 fe-protocol3.c:250 fe-protocol3.c:330 -#: fe-protocol3.c:723 fe-protocol3.c:954 +#: fe-exec.c:510 fe-protocol3.c:219 fe-protocol3.c:244 fe-protocol3.c:273 +#: fe-protocol3.c:291 fe-protocol3.c:371 fe-protocol3.c:743 fe-protocol3.c:975 msgid "out of memory" msgstr "mémoire épuisée" -#: fe-exec.c:506 fe-protocol2.c:1396 fe-protocol3.c:1907 +#: fe-exec.c:511 fe-protocol3.c:1932 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:815 +#: fe-exec.c:778 msgid "write to server failed\n" msgstr "échec en écriture vers le serveur\n" -#: fe-exec.c:896 +#: fe-exec.c:850 msgid "NOTICE" msgstr "NOTICE" -#: fe-exec.c:954 +#: fe-exec.c:908 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresult ne supporte pas plus de INT_MAX lignes" -#: fe-exec.c:966 +#: fe-exec.c:920 msgid "size_t overflow" msgstr "saturation de size_t" -#: fe-exec.c:1243 fe-exec.c:1301 fe-exec.c:1347 +#: fe-exec.c:1302 fe-exec.c:1403 fe-exec.c:1451 msgid "command string is a null pointer\n" msgstr "la chaîne de commande est un pointeur nul\n" -#: fe-exec.c:1307 fe-exec.c:1353 fe-exec.c:1448 +#: fe-exec.c:1409 fe-exec.c:1457 fe-exec.c:1554 msgid "number of parameters must be between 0 and 65535\n" msgstr "le nombre de paramètres doit être compris entre 0 et 65535\n" -#: fe-exec.c:1341 fe-exec.c:1442 +#: fe-exec.c:1445 fe-exec.c:1548 msgid "statement name is a null pointer\n" msgstr "le nom de l'instruction est un pointeur nul\n" -#: fe-exec.c:1361 fe-exec.c:1524 fe-exec.c:2233 fe-exec.c:2435 -msgid "function requires at least protocol version 3.0\n" -msgstr "la fonction nécessite au minimum le protocole 3.0\n" - -#: fe-exec.c:1479 +#: fe-exec.c:1589 msgid "no connection to the server\n" msgstr "aucune connexion au serveur\n" -#: fe-exec.c:1486 +#: fe-exec.c:1598 msgid "another command is already in progress\n" msgstr "une autre commande est déjà en cours\n" -#: fe-exec.c:1600 +#: fe-exec.c:1627 +msgid "cannot queue commands during COPY\n" +msgstr "ne peut pas mettre en queue les commandes lors du COPY\n" + +#: fe-exec.c:1745 msgid "length must be given for binary parameter\n" msgstr "la longueur doit être indiquée pour les paramètres binaires\n" -#: fe-exec.c:1863 +#: fe-exec.c:2066 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "asyncStatus inattendu : %d\n" -#: fe-exec.c:1883 +#: fe-exec.c:2086 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "échec de PGEventProc « %s » lors de l'événement PGEVT_RESULTCREATE\n" -#: fe-exec.c:2043 +#: fe-exec.c:2234 +msgid "synchronous command execution functions are not allowed in pipeline mode\n" +msgstr "les fonctions d'exécution de commande synchrone ne sont pas autorisées en mode pipeline\n" + +#: fe-exec.c:2256 msgid "COPY terminated by new PQexec" msgstr "COPY terminé par un nouveau PQexec" -#: fe-exec.c:2051 -msgid "COPY IN state must be terminated first\n" -msgstr "l'état COPY IN doit d'abord être terminé\n" - -#: fe-exec.c:2071 -msgid "COPY OUT state must be terminated first\n" -msgstr "l'état COPY OUT doit d'abord être terminé\n" - -#: fe-exec.c:2079 +#: fe-exec.c:2273 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec non autorisé pendant COPY BOTH\n" -#: fe-exec.c:2325 fe-exec.c:2392 fe-exec.c:2482 fe-protocol2.c:1353 -#: fe-protocol3.c:1838 +#: fe-exec.c:2502 fe-exec.c:2558 fe-exec.c:2627 fe-protocol3.c:1863 msgid "no COPY in progress\n" msgstr "aucun COPY en cours\n" -#: fe-exec.c:2672 +#: fe-exec.c:2804 +msgid "PQfn not allowed in pipeline mode\n" +msgstr "PQfn non autorisé dans le mode pipeline\n" + +#: fe-exec.c:2812 msgid "connection in wrong state\n" msgstr "connexion dans un état erroné\n" -#: fe-exec.c:2703 +#: fe-exec.c:2856 +msgid "cannot enter pipeline mode, connection not idle\n" +msgstr "ne peut pas entrer dans le mode pipeline, connexion active\n" + +#: fe-exec.c:2890 fe-exec.c:2907 +msgid "cannot exit pipeline mode with uncollected results\n" +msgstr "ne peut pas sortir du mode pipeline avec des résultats non récupérés\n" + +#: fe-exec.c:2895 +msgid "cannot exit pipeline mode while busy\n" +msgstr "ne peut pas sortir du mode pipeline alors qu'il est occupé\n" + +#: fe-exec.c:3037 +msgid "cannot send pipeline when not in pipeline mode\n" +msgstr "ne peut pas envoyer le pipeline lorsqu'il n'est pas en mode pipeline\n" + +#: fe-exec.c:3108 msgid "invalid ExecStatusType code" msgstr "code ExecStatusType invalide" -#: fe-exec.c:2730 +#: fe-exec.c:3135 msgid "PGresult is not an error result\n" msgstr "PGresult n'est pas un résultat d'erreur\n" -#: fe-exec.c:2805 fe-exec.c:2828 +#: fe-exec.c:3203 fe-exec.c:3226 #, c-format msgid "column number %d is out of range 0..%d" msgstr "le numéro de colonne %d est en dehors des limites 0..%d" -#: fe-exec.c:2843 +#: fe-exec.c:3241 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "le numéro de paramètre %d est en dehors des limites 0..%d" -#: fe-exec.c:3153 +#: fe-exec.c:3551 #, c-format msgid "could not interpret result from server: %s" msgstr "n'a pas pu interpréter la réponse du serveur : %s" -#: fe-exec.c:3392 fe-exec.c:3476 +#: fe-exec.c:3811 fe-exec.c:3900 msgid "incomplete multibyte character\n" msgstr "caractère multi-octet incomplet\n" -#: fe-gssapi-common.c:124 +#: fe-gssapi-common.c:123 msgid "GSSAPI name import error" msgstr "erreur d'import du nom GSSAPI" -#: fe-lobj.c:154 -msgid "cannot determine OID of function lo_truncate\n" -msgstr "ne peut pas déterminer l'OID de la fonction lo_truncate\n" +#: fe-lobj.c:145 fe-lobj.c:210 fe-lobj.c:403 fe-lobj.c:494 fe-lobj.c:568 +#: fe-lobj.c:969 fe-lobj.c:977 fe-lobj.c:985 fe-lobj.c:993 fe-lobj.c:1001 +#: fe-lobj.c:1009 fe-lobj.c:1017 fe-lobj.c:1025 +#, c-format +msgid "cannot determine OID of function %s\n" +msgstr "ne peut pas déterminer l'OID de la fonction %s\n" -#: fe-lobj.c:170 +#: fe-lobj.c:162 msgid "argument of lo_truncate exceeds integer range\n" msgstr "l'argument de lo_truncate dépasse l'échelle des entiers\n" -#: fe-lobj.c:221 -msgid "cannot determine OID of function lo_truncate64\n" -msgstr "ne peut pas déterminer l'OID de la fonction lo_truncate64\n" - -#: fe-lobj.c:279 +#: fe-lobj.c:266 msgid "argument of lo_read exceeds integer range\n" msgstr "l'argument de lo_read dépasse l'échelle des entiers\n" -#: fe-lobj.c:334 +#: fe-lobj.c:318 msgid "argument of lo_write exceeds integer range\n" msgstr "l'argument de lo_write dépasse l'échelle des entiers\n" -#: fe-lobj.c:425 -msgid "cannot determine OID of function lo_lseek64\n" -msgstr "ne peut pas déterminer l'OID de la fonction lo_lseek64\n" - -#: fe-lobj.c:521 -msgid "cannot determine OID of function lo_create\n" -msgstr "ne peut pas déterminer l'OID de la fonction lo_create\n" - -#: fe-lobj.c:600 -msgid "cannot determine OID of function lo_tell64\n" -msgstr "ne peut pas déterminer l'OID de la fonction lo_tell64\n" - -#: fe-lobj.c:706 fe-lobj.c:815 +#: fe-lobj.c:678 fe-lobj.c:789 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "n'a pas pu ouvrir le fichier « %s » : %s\n" -#: fe-lobj.c:761 +#: fe-lobj.c:734 #, c-format msgid "could not read from file \"%s\": %s\n" msgstr "n'a pas pu lire le fichier « %s » : %s\n" -#: fe-lobj.c:835 fe-lobj.c:859 +#: fe-lobj.c:810 fe-lobj.c:834 #, c-format msgid "could not write to file \"%s\": %s\n" msgstr "n'a pas pu écrire dans le fichier « %s » : %s\n" -#: fe-lobj.c:946 +#: fe-lobj.c:920 msgid "query to initialize large object functions did not return data\n" msgstr "" "la requête d'initialisation des fonctions pour « Larges Objects » ne renvoie\n" "pas de données\n" -#: fe-lobj.c:995 -msgid "cannot determine OID of function lo_open\n" -msgstr "ne peut pas déterminer l'OID de la fonction lo_open\n" - -#: fe-lobj.c:1002 -msgid "cannot determine OID of function lo_close\n" -msgstr "ne peut pas déterminer l'OID de la fonction lo_close\n" - -#: fe-lobj.c:1009 -msgid "cannot determine OID of function lo_creat\n" -msgstr "ne peut pas déterminer l'OID de la fonction lo_creat\n" - -#: fe-lobj.c:1016 -msgid "cannot determine OID of function lo_unlink\n" -msgstr "ne peut pas déterminer l'OID de la fonction lo_unlink\n" - -#: fe-lobj.c:1023 -msgid "cannot determine OID of function lo_lseek\n" -msgstr "ne peut pas déterminer l'OID de la fonction lo_lseek\n" - -#: fe-lobj.c:1030 -msgid "cannot determine OID of function lo_tell\n" -msgstr "ne peut pas déterminer l'OID de la fonction lo_tell\n" - -#: fe-lobj.c:1037 -msgid "cannot determine OID of function loread\n" -msgstr "ne peut pas déterminer l'OID de la fonction loread\n" - -#: fe-lobj.c:1044 -msgid "cannot determine OID of function lowrite\n" -msgstr "ne peut pas déterminer l'OID de la fonction lowrite\n" - -#: fe-misc.c:289 +#: fe-misc.c:242 #, c-format msgid "integer of size %lu not supported by pqGetInt" msgstr "entier de taille %lu non supporté par pqGetInt" -#: fe-misc.c:325 +#: fe-misc.c:275 #, c-format msgid "integer of size %lu not supported by pqPutInt" msgstr "entier de taille %lu non supporté par pqPutInt" -#: fe-misc.c:636 fe-misc.c:857 +#: fe-misc.c:576 fe-misc.c:822 msgid "connection not open\n" msgstr "la connexion n'est pas active\n" -#: fe-misc.c:805 fe-secure-openssl.c:209 fe-secure-openssl.c:316 -#: fe-secure.c:267 fe-secure.c:383 +#: fe-misc.c:755 fe-secure-openssl.c:209 fe-secure-openssl.c:316 +#: fe-secure.c:260 fe-secure.c:373 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -890,196 +837,152 @@ msgstr "" "\tLe serveur s'est peut-être arrêté anormalement avant ou durant le\n" "\ttraitement de la requête.\n" -#: fe-misc.c:1044 +#: fe-misc.c:1015 msgid "timeout expired\n" msgstr "le délai est dépassé\n" -#: fe-misc.c:1089 +#: fe-misc.c:1060 msgid "invalid socket\n" msgstr "socket invalide\n" -#: fe-misc.c:1112 -#, c-format -msgid "select() failed: %s\n" -msgstr "échec de select() : %s\n" - -#: fe-protocol2.c:87 +#: fe-misc.c:1083 #, c-format -msgid "invalid setenv state %c, probably indicative of memory corruption\n" -msgstr "état setenv %c invalide, indiquant probablement une corruption de la mémoire\n" +msgid "%s() failed: %s\n" +msgstr "échec de %s() : %s\n" -#: fe-protocol2.c:384 -#, c-format -msgid "invalid state %c, probably indicative of memory corruption\n" -msgstr "état %c invalide, indiquant probablement une corruption de la mémoire\n" - -#: fe-protocol2.c:473 fe-protocol3.c:183 +#: fe-protocol3.c:196 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "le message de type 0x%02x est arrivé alors que le serveur était en attente" -#: fe-protocol2.c:523 -#, c-format -msgid "unexpected character %c following empty query response (\"I\" message)" -msgstr "" -"caractère %c inattendu à la suite d'une réponse de requête vide (message\n" -"« I »)" - -#: fe-protocol2.c:589 -#, c-format -msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" +#: fe-protocol3.c:403 +msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "" "le serveur a envoyé des données (message « D ») sans description préalable\n" -"de la ligne (message « T »)" - -#: fe-protocol2.c:607 -#, c-format -msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" -msgstr "" -"le serveur a envoyé des données binaires (message « B ») sans description\n" -"préalable de la ligne (message « T »)" +"de la ligne (message « T »)\n" -#: fe-protocol2.c:626 fe-protocol3.c:408 +#: fe-protocol3.c:446 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "réponse inattendue du serveur, le premier caractère reçu étant « %c »\n" -#: fe-protocol2.c:755 fe-protocol2.c:930 fe-protocol3.c:622 fe-protocol3.c:849 -msgid "out of memory for query result" -msgstr "mémoire épuisée pour le résultat de la requête" - -#: fe-protocol2.c:1408 -#, c-format -msgid "lost synchronization with server, resetting connection" -msgstr "synchronisation perdue avec le serveur, réinitialisation de la connexion" - -#: fe-protocol2.c:1530 fe-protocol2.c:1562 fe-protocol3.c:2095 -#, c-format -msgid "protocol error: id=0x%x\n" -msgstr "erreur de protocole : id=0x%x\n" - -#: fe-protocol3.c:365 -msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" -msgstr "" -"le serveur a envoyé des données (message « D ») sans description préalable\n" -"de la ligne (message « T »)\n" - -#: fe-protocol3.c:429 +#: fe-protocol3.c:471 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "" "le contenu du message ne correspond pas avec la longueur du type de message\n" "« %c »\n" -#: fe-protocol3.c:449 +#: fe-protocol3.c:491 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "" "synchronisation perdue avec le serveur : a reçu le type de message « %c »,\n" "longueur %d\n" -#: fe-protocol3.c:500 fe-protocol3.c:540 +#: fe-protocol3.c:543 fe-protocol3.c:583 msgid "insufficient data in \"T\" message" msgstr "données insuffisantes dans le message « T »" -#: fe-protocol3.c:573 -msgid "extraneous data in \"T\" message" -msgstr "données supplémentaires dans le message « T »" +#: fe-protocol3.c:654 fe-protocol3.c:860 +msgid "out of memory for query result" +msgstr "mémoire épuisée pour le résultat de la requête" -#: fe-protocol3.c:686 -msgid "extraneous data in \"t\" message" -msgstr "données supplémentaires dans le message « t »" +#: fe-protocol3.c:723 +msgid "insufficient data in \"t\" message" +msgstr "données insuffisantes dans le message « t »" -#: fe-protocol3.c:757 fe-protocol3.c:789 fe-protocol3.c:807 +#: fe-protocol3.c:782 fe-protocol3.c:814 fe-protocol3.c:832 msgid "insufficient data in \"D\" message" msgstr "données insuffisantes dans le message « D »" -#: fe-protocol3.c:763 +#: fe-protocol3.c:788 msgid "unexpected field count in \"D\" message" msgstr "nombre de champs inattendu dans le message « D »" -#: fe-protocol3.c:816 -msgid "extraneous data in \"D\" message" -msgstr "données supplémentaires dans le message « D »" - -#: fe-protocol3.c:1008 +#: fe-protocol3.c:1029 msgid "no error message available\n" msgstr "aucun message d'erreur disponible\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1056 fe-protocol3.c:1075 +#: fe-protocol3.c:1077 fe-protocol3.c:1096 #, c-format msgid " at character %s" msgstr " au caractère %s" -#: fe-protocol3.c:1088 +#: fe-protocol3.c:1109 #, c-format msgid "DETAIL: %s\n" msgstr "DÉTAIL : %s\n" -#: fe-protocol3.c:1091 +#: fe-protocol3.c:1112 #, c-format msgid "HINT: %s\n" msgstr "ASTUCE : %s\n" -#: fe-protocol3.c:1094 +#: fe-protocol3.c:1115 #, c-format msgid "QUERY: %s\n" msgstr "REQUÊTE : %s\n" -#: fe-protocol3.c:1101 +#: fe-protocol3.c:1122 #, c-format msgid "CONTEXT: %s\n" msgstr "CONTEXTE : %s\n" -#: fe-protocol3.c:1110 +#: fe-protocol3.c:1131 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "NOM DE SCHÉMA : %s\n" -#: fe-protocol3.c:1114 +#: fe-protocol3.c:1135 #, c-format msgid "TABLE NAME: %s\n" msgstr "NOM DE TABLE : %s\n" -#: fe-protocol3.c:1118 +#: fe-protocol3.c:1139 #, c-format msgid "COLUMN NAME: %s\n" msgstr "NOM DE COLONNE : %s\n" -#: fe-protocol3.c:1122 +#: fe-protocol3.c:1143 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "NOM DU TYPE DE DONNÉES : %s\n" -#: fe-protocol3.c:1126 +#: fe-protocol3.c:1147 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "NOM DE CONTRAINTE : %s\n" -#: fe-protocol3.c:1138 +#: fe-protocol3.c:1159 msgid "LOCATION: " msgstr "EMPLACEMENT : " -#: fe-protocol3.c:1140 +#: fe-protocol3.c:1161 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1163 #, c-format msgid "%s:%s" msgstr "%s : %s" -#: fe-protocol3.c:1337 +#: fe-protocol3.c:1358 #, c-format msgid "LINE %d: " msgstr "LIGNE %d : " -#: fe-protocol3.c:1732 +#: fe-protocol3.c:1757 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline : ne va pas réaliser un COPY OUT au format texte\n" +#: fe-protocol3.c:2123 +#, c-format +msgid "protocol error: id=0x%x\n" +msgstr "erreur de protocole : id=0x%x\n" + #: fe-secure-common.c:124 msgid "SSL certificate's name contains embedded null\n" msgstr "le nom du certificat SSL contient des NULL\n" @@ -1127,24 +1030,24 @@ msgstr "le message entrant GSSAPI n'utilisait pas la confidentialité\n" msgid "could not initiate GSSAPI security context" msgstr "n'a pas pu initier le contexte de sécurité GSSAPI" -#: fe-secure-gssapi.c:673 +#: fe-secure-gssapi.c:670 msgid "GSSAPI size check error" msgstr "erreur de vérification de la taille GSSAPI" -#: fe-secure-gssapi.c:684 +#: fe-secure-gssapi.c:681 msgid "GSSAPI context establishment error" msgstr "erreur d'établissement du contexte GSSAPI" -#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1292 +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1329 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "erreur SYSCALL SSL : %s\n" -#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1296 +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1333 msgid "SSL SYSCALL error: EOF detected\n" msgstr "erreur SYSCALL SSL : EOF détecté\n" -#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1305 +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1342 #, c-format msgid "SSL error: %s\n" msgstr "erreur SSL : %s\n" @@ -1153,7 +1056,7 @@ msgstr "erreur SSL : %s\n" msgid "SSL connection has been closed unexpectedly\n" msgstr "la connexion SSL a été fermée de façon inattendu\n" -#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1314 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1392 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "code d'erreur SSL inconnu : %d\n" @@ -1175,37 +1078,37 @@ msgstr "n'a pas pu générer le hachage du certificat peer\n" msgid "SSL certificate's name entry is missing\n" msgstr "l'entrée du nom du certificat SSL est manquante\n" -#: fe-secure-openssl.c:815 +#: fe-secure-openssl.c:822 #, c-format msgid "could not create SSL context: %s\n" msgstr "n'a pas pu créer le contexte SSL : %s\n" -#: fe-secure-openssl.c:855 +#: fe-secure-openssl.c:861 #, c-format -msgid "invalid value \"%s\" for minimum version of SSL protocol\n" +msgid "invalid value \"%s\" for minimum SSL protocol version\n" msgstr "valeur « %s » invalide pour la version minimale du protocole SSL\n" -#: fe-secure-openssl.c:866 +#: fe-secure-openssl.c:872 #, c-format -msgid "could not set minimum version of SSL protocol: %s\n" -msgstr "n'a pas pu mettre en place la version minimale du protocole SSL : %s\n" +msgid "could not set minimum SSL protocol version: %s\n" +msgstr "n'a pas pu configurer la version minimale de protocole SSL : %s\n" -#: fe-secure-openssl.c:884 +#: fe-secure-openssl.c:890 #, c-format -msgid "invalid value \"%s\" for maximum version of SSL protocol\n" +msgid "invalid value \"%s\" for maximum SSL protocol version\n" msgstr "valeur « %s » invalide pour la version maximale du protocole SSL\n" -#: fe-secure-openssl.c:895 +#: fe-secure-openssl.c:901 #, c-format -msgid "could not set maximum version of SSL protocol: %s\n" -msgstr "n'a pas pu mettre en place la version maximale du protocole SSL : %s\n" +msgid "could not set maximum SSL protocol version: %s\n" +msgstr "n'a pas pu configurer la version maximale de protocole SSL : %s\n" -#: fe-secure-openssl.c:931 +#: fe-secure-openssl.c:937 #, c-format msgid "could not read root certificate file \"%s\": %s\n" msgstr "n'a pas pu lire le certificat racine « %s » : %s\n" -#: fe-secure-openssl.c:975 +#: fe-secure-openssl.c:990 msgid "" "could not get home directory to locate root certificate file\n" "Either provide the file or change sslmode to disable server certificate verification.\n" @@ -1214,7 +1117,7 @@ msgstr "" "Fournissez le fichier ou modifiez sslmode pour désactiver la vérification du\n" "certificat par le serveur.\n" -#: fe-secure-openssl.c:979 +#: fe-secure-openssl.c:994 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -1224,47 +1127,52 @@ msgstr "" "Fournissez le fichier ou modifiez sslmode pour désactiver la vérification du\n" "certificat par le serveur.\n" -#: fe-secure-openssl.c:1010 +#: fe-secure-openssl.c:1025 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "n'a pas pu ouvrir le certificat « %s » : %s\n" -#: fe-secure-openssl.c:1029 +#: fe-secure-openssl.c:1044 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "n'a pas pu lire le certificat « %s » : %s\n" -#: fe-secure-openssl.c:1054 +#: fe-secure-openssl.c:1069 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "n'a pas pu établir la connexion SSL : %s\n" -#: fe-secure-openssl.c:1108 +#: fe-secure-openssl.c:1099 +#, c-format +msgid "could not set SSL Server Name Indication (SNI): %s\n" +msgstr "n'a pas pu configurer le SSL Server Name Indication (SNI) : %s\n" + +#: fe-secure-openssl.c:1145 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "n'a pas pu charger le moteur SSL « %s » : %s\n" -#: fe-secure-openssl.c:1120 +#: fe-secure-openssl.c:1157 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "n'a pas pu initialiser le moteur SSL « %s » : %s\n" -#: fe-secure-openssl.c:1136 +#: fe-secure-openssl.c:1173 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "n'a pas pu lire la clé privée SSL « %s » à partir du moteur « %s » : %s\n" -#: fe-secure-openssl.c:1150 +#: fe-secure-openssl.c:1187 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "n'a pas pu charger la clé privée SSL « %s » à partir du moteur « %s » : %s\n" -#: fe-secure-openssl.c:1187 +#: fe-secure-openssl.c:1224 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "le certificat est présent, mais la clé privée « %s » est absente\n" -#: fe-secure-openssl.c:1195 +#: fe-secure-openssl.c:1232 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "" @@ -1272,42 +1180,47 @@ msgstr "" "pour le groupe ou universel ; les droits devraient être u=rw (0600)\n" "ou inférieur\n" -#: fe-secure-openssl.c:1220 +#: fe-secure-openssl.c:1257 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "n'a pas pu charger le fichier de clé privée « %s » : %s\n" -#: fe-secure-openssl.c:1238 +#: fe-secure-openssl.c:1275 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "le certificat ne correspond pas à la clé privée « %s » : %s\n" -#: fe-secure-openssl.c:1333 +#: fe-secure-openssl.c:1375 +#, c-format +msgid "This may indicate that the server does not support any SSL protocol version between %s and %s.\n" +msgstr "Ceci pourrait indiquer que le serveur ne supporte aucune des versions du protocole SSL entre %s et %s.\n" + +#: fe-secure-openssl.c:1411 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "le certificat n'a pas pu être obtenu : %s\n" -#: fe-secure-openssl.c:1422 +#: fe-secure-openssl.c:1517 #, c-format msgid "no SSL error reported" msgstr "aucune erreur SSL reportée" -#: fe-secure-openssl.c:1431 +#: fe-secure-openssl.c:1526 #, c-format msgid "SSL error code %lu" msgstr "erreur SSL %lu" -#: fe-secure-openssl.c:1678 +#: fe-secure-openssl.c:1773 #, c-format msgid "WARNING: sslpassword truncated\n" msgstr "ATTENTION : sslpassword tronqué\n" -#: fe-secure.c:275 +#: fe-secure.c:267 #, c-format msgid "could not receive data from server: %s\n" msgstr "n'a pas pu recevoir des données depuis le serveur : %s\n" -#: fe-secure.c:390 +#: fe-secure.c:380 #, c-format msgid "could not send data to server: %s\n" msgstr "n'a pas pu transmettre les données au serveur : %s\n" @@ -1317,6 +1230,111 @@ msgstr "n'a pas pu transmettre les données au serveur : %s\n" msgid "unrecognized socket error: 0x%08X/%d" msgstr "erreur de socket non reconnue : 0x%08X/%d" +#~ msgid "invalid channel_binding value: \"%s\"\n" +#~ msgstr "valeur de channel_binding invalide : « %s »\n" + +#~ msgid "invalid ssl_min_protocol_version value: \"%s\"\n" +#~ msgstr "valeur ssl_min_protocol_version invalide : « %s »\n" + +#~ msgid "invalid ssl_max_protocol_version value: \"%s\"\n" +#~ msgstr "valeur ssl_max_protocol_version invalide : « %s »\n" + +#~ msgid "invalid gssencmode value: \"%s\"\n" +#~ msgstr "valeur gssencmode invalide : « %s »\n" + +#~ msgid "invalid target_session_attrs value: \"%s\"\n" +#~ msgstr "valeur target_session_attrs invalide : « %s »\n" + +#~ msgid "" +#~ "could not connect to server: %s\n" +#~ "\tIs the server running on host \"%s\" (%s) and accepting\n" +#~ "\tTCP/IP connections on port %s?\n" +#~ msgstr "" +#~ "n'a pas pu se connecter au serveur : %s\n" +#~ "\tLe serveur est-il actif sur l'hôte « %s » (%s)\n" +#~ "\tet accepte-t-il les connexionsTCP/IP sur le port %s ?\n" + +#~ msgid "could not make a writable connection to server \"%s:%s\"\n" +#~ msgstr "n'a pas pu réaliser une connexion en écriture au serveur « %s » : %s\n" + +#~ msgid "line %d too long in service file \"%s\"\n" +#~ msgstr "ligne %d trop longue dans le fichier service « %s »\n" + +#~ msgid "function requires at least protocol version 3.0\n" +#~ msgstr "la fonction nécessite au minimum le protocole 3.0\n" + +#~ msgid "COPY IN state must be terminated first\n" +#~ msgstr "l'état COPY IN doit d'abord être terminé\n" + +#~ msgid "COPY OUT state must be terminated first\n" +#~ msgstr "l'état COPY OUT doit d'abord être terminé\n" + +#~ msgid "cannot determine OID of function lo_truncate\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_truncate\n" + +#~ msgid "cannot determine OID of function lo_truncate64\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_truncate64\n" + +#~ msgid "cannot determine OID of function lo_lseek64\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_lseek64\n" + +#~ msgid "cannot determine OID of function lo_create\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_create\n" + +#~ msgid "cannot determine OID of function lo_tell64\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_tell64\n" + +#~ msgid "cannot determine OID of function lo_open\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_open\n" + +#~ msgid "cannot determine OID of function lo_creat\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_creat\n" + +#~ msgid "cannot determine OID of function lo_unlink\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_unlink\n" + +#~ msgid "cannot determine OID of function lo_lseek\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_lseek\n" + +#~ msgid "cannot determine OID of function loread\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction loread\n" + +#~ msgid "cannot determine OID of function lowrite\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lowrite\n" + +#~ msgid "invalid setenv state %c, probably indicative of memory corruption\n" +#~ msgstr "état setenv %c invalide, indiquant probablement une corruption de la mémoire\n" + +#~ msgid "invalid state %c, probably indicative of memory corruption\n" +#~ msgstr "état %c invalide, indiquant probablement une corruption de la mémoire\n" + +#~ msgid "unexpected character %c following empty query response (\"I\" message)" +#~ msgstr "" +#~ "caractère %c inattendu à la suite d'une réponse de requête vide (message\n" +#~ "« I »)" + +#~ msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" +#~ msgstr "" +#~ "le serveur a envoyé des données (message « D ») sans description préalable\n" +#~ "de la ligne (message « T »)" + +#~ msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" +#~ msgstr "" +#~ "le serveur a envoyé des données binaires (message « B ») sans description\n" +#~ "préalable de la ligne (message « T »)" + +#~ msgid "lost synchronization with server, resetting connection" +#~ msgstr "synchronisation perdue avec le serveur, réinitialisation de la connexion" + +#~ msgid "WARNING: line %d too long in password file \"%s\"\n" +#~ msgstr "ATTENTION : ligne %d trop longue dans le fichier de mots de passe « %s »\n" + +#~ msgid "could not set minimum version of SSL protocol: %s\n" +#~ msgstr "n'a pas pu mettre en place la version minimale du protocole SSL : %s\n" + +#~ msgid "could not set maximum version of SSL protocol: %s\n" +#~ msgstr "n'a pas pu mettre en place la version maximale du protocole SSL : %s\n" + #~ msgid "SSL library does not support CRL certificates (file \"%s\")\n" #~ msgstr "la bibliothèque SSL ne supporte pas les certificats CRL (fichier « %s »)\n" @@ -1387,3 +1405,18 @@ msgstr "erreur de socket non reconnue : 0x%08X/%d" #~ msgid "no GSSAPI support; cannot require GSSAPI\n" #~ msgstr "pas de support de GSSAPI : ne peut pas nécessiter GSSAPI\n" + +#~ msgid "extraneous data in \"D\" message" +#~ msgstr "données supplémentaires dans le message « D »" + +#~ msgid "extraneous data in \"t\" message" +#~ msgstr "données supplémentaires dans le message « t »" + +#~ msgid "extraneous data in \"T\" message" +#~ msgstr "données supplémentaires dans le message « T »" + +#~ msgid "select() failed: %s\n" +#~ msgstr "échec de select() : %s\n" + +#~ msgid "setsockopt(%s) failed: %s\n" +#~ msgstr "setsockopt(%s) a échoué : %s\n" diff --git a/src/interfaces/libpq/po/ja.po b/src/interfaces/libpq/po/ja.po index 91d8ae92d9c4e..3e08d465cbc34 100644 --- a/src/interfaces/libpq/po/ja.po +++ b/src/interfaces/libpq/po/ja.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: libpq (PostgreSQL 12 beta 1)\n" +"Project-Id-Version: libpq (PostgreSQL 13)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-11-05 01:39+0000\n" -"PO-Revision-Date: 2019-06-11 09:36+0900\n" +"POT-Creation-Date: 2020-08-21 23:39+0900\n" +"PO-Revision-Date: 2020-08-22 00:02+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -15,239 +15,259 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.13\n" -#: fe-auth-scram.c:183 +#: fe-auth-scram.c:212 msgid "malformed SCRAM message (empty message)\n" msgstr "SCRAMメッセージのフォーマット異常 (空のメッセージ)\n" -#: fe-auth-scram.c:189 +#: fe-auth-scram.c:218 msgid "malformed SCRAM message (length mismatch)\n" msgstr "SCRAMメッセージのフォーマット異常 (長さの不整合)\n" -#: fe-auth-scram.c:238 +#: fe-auth-scram.c:265 msgid "incorrect server signature\n" msgstr "正しくないサーバ署名\n" -#: fe-auth-scram.c:247 +#: fe-auth-scram.c:274 msgid "invalid SCRAM exchange state\n" msgstr "不正なSCRAM交換状態\n" -#: fe-auth-scram.c:270 +#: fe-auth-scram.c:296 #, c-format msgid "malformed SCRAM message (attribute \"%c\" expected)\n" msgstr "SCRAMメッセージのフォーマット異常 (属性 \"%c\" が必要)\n" -#: fe-auth-scram.c:279 +#: fe-auth-scram.c:305 #, c-format msgid "malformed SCRAM message (expected character \"=\" for attribute \"%c\")\n" msgstr "SCRAMメッセージのフォーマット異常 (属性 \"%c\" に文字 \"=\" が必要)\n" -#: fe-auth-scram.c:320 +#: fe-auth-scram.c:346 msgid "could not generate nonce\n" msgstr "nonce を生成できませんでした\n" -#: fe-auth-scram.c:328 fe-auth-scram.c:395 fe-auth-scram.c:517 -#: fe-auth-scram.c:537 fe-auth-scram.c:563 fe-auth-scram.c:577 -#: fe-auth-scram.c:626 fe-auth-scram.c:660 fe-auth.c:290 fe-auth.c:360 -#: fe-auth.c:395 fe-auth.c:581 fe-auth.c:740 fe-auth.c:1052 fe-auth.c:1200 -#: fe-connect.c:858 fe-connect.c:1320 fe-connect.c:1496 fe-connect.c:2106 -#: fe-connect.c:2129 fe-connect.c:2852 fe-connect.c:4534 fe-connect.c:4786 -#: fe-connect.c:4905 fe-connect.c:5159 fe-connect.c:5239 fe-connect.c:5338 -#: fe-connect.c:5594 fe-connect.c:5623 fe-connect.c:5695 fe-connect.c:5719 -#: fe-connect.c:5737 fe-connect.c:5838 fe-connect.c:5847 fe-connect.c:6203 -#: fe-connect.c:6353 fe-exec.c:2748 fe-exec.c:3495 fe-exec.c:3660 -#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1213 fe-protocol3.c:999 -#: fe-protocol3.c:1703 fe-secure-common.c:110 fe-secure-openssl.c:438 -#: fe-secure-openssl.c:1025 +#: fe-auth-scram.c:356 fe-auth-scram.c:431 fe-auth-scram.c:579 +#: fe-auth-scram.c:600 fe-auth-scram.c:626 fe-auth-scram.c:641 +#: fe-auth-scram.c:691 fe-auth-scram.c:725 fe-auth.c:289 fe-auth.c:359 +#: fe-auth.c:394 fe-auth.c:611 fe-auth.c:770 fe-auth.c:1129 fe-auth.c:1277 +#: fe-connect.c:892 fe-connect.c:1423 fe-connect.c:1599 fe-connect.c:2204 +#: fe-connect.c:2227 fe-connect.c:2956 fe-connect.c:4602 fe-connect.c:4858 +#: fe-connect.c:4977 fe-connect.c:5230 fe-connect.c:5310 fe-connect.c:5409 +#: fe-connect.c:5665 fe-connect.c:5694 fe-connect.c:5766 fe-connect.c:5790 +#: fe-connect.c:5808 fe-connect.c:5909 fe-connect.c:5918 fe-connect.c:6274 +#: fe-connect.c:6424 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 +#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1207 fe-protocol3.c:995 +#: fe-protocol3.c:1699 fe-secure-common.c:110 fe-secure-gssapi.c:504 +#: fe-secure-openssl.c:440 fe-secure-openssl.c:1091 msgid "out of memory\n" msgstr "メモリ不足\n" -#: fe-auth-scram.c:555 +#: fe-auth-scram.c:364 +msgid "could not encode nonce\n" +msgstr "nonceをエンコードに失敗しました\n" + +#: fe-auth-scram.c:563 +msgid "could not encode client proof\n" +msgstr "クライアントの証明のエンコードに失敗しました\n" + +#: fe-auth-scram.c:618 msgid "invalid SCRAM response (nonce mismatch)\n" msgstr "不正なSCRAM応答 (nonce の不一致)\n" -#: fe-auth-scram.c:586 -#, fuzzy -#| msgid "malformed SCRAM message (invalid server signature)\n" +#: fe-auth-scram.c:651 msgid "malformed SCRAM message (invalid salt)\n" -msgstr "SCRAMメッセージのフォーマット異常 (不正なサーバ署名)\n" +msgstr "SCRAMメッセージのフォーマット異常 (不正なサーバソルト)\n" -#: fe-auth-scram.c:600 +#: fe-auth-scram.c:665 msgid "malformed SCRAM message (invalid iteration count)\n" msgstr "SCRAMメッセージのフォーマット異常 (不正な繰り返し回数)\n" -#: fe-auth-scram.c:606 +#: fe-auth-scram.c:671 msgid "malformed SCRAM message (garbage at end of server-first-message)\n" msgstr "SCRAMメッセージのフォーマット異常 (server-first-message 終端の余分なデータ)\n" -#: fe-auth-scram.c:637 +#: fe-auth-scram.c:702 #, c-format msgid "error received from server in SCRAM exchange: %s\n" msgstr "SCRAM交換中にサーバからのエラーを受信しました: %s\n" -#: fe-auth-scram.c:653 +#: fe-auth-scram.c:718 msgid "malformed SCRAM message (garbage at end of server-final-message)\n" msgstr "SCRAMメッセージのフォーマット異常 (server-final-message 終端の余分なデータ)\n" -#: fe-auth-scram.c:671 +#: fe-auth-scram.c:737 msgid "malformed SCRAM message (invalid server signature)\n" msgstr "SCRAMメッセージのフォーマット異常 (不正なサーバ署名)\n" -#: fe-auth.c:77 +#: fe-auth.c:76 #, c-format msgid "out of memory allocating GSSAPI buffer (%d)\n" msgstr "GSSAPIバッファの割り当ての際のメモリ不足(%d)\n" -#: fe-auth.c:132 +#: fe-auth.c:131 msgid "GSSAPI continuation error" msgstr "GSSAI続行エラー" -#: fe-auth.c:159 fe-auth.c:389 fe-gssapi-common.c:98 fe-secure-common.c:98 +#: fe-auth.c:158 fe-auth.c:388 fe-gssapi-common.c:98 fe-secure-common.c:98 msgid "host name must be specified\n" msgstr "ホスト名を指定しなければなりません\n" -#: fe-auth.c:166 +#: fe-auth.c:165 msgid "duplicate GSS authentication request\n" msgstr "重複するGSS認証要求\n" -#: fe-auth.c:231 +#: fe-auth.c:230 #, c-format msgid "out of memory allocating SSPI buffer (%d)\n" msgstr "SSPIバッファの割り当ての際のメモリ不足(%d)\n" -#: fe-auth.c:279 +#: fe-auth.c:278 msgid "SSPI continuation error" msgstr "SSPI続行エラー" -#: fe-auth.c:350 +#: fe-auth.c:349 msgid "duplicate SSPI authentication request\n" msgstr "重複するSSPI認証要求\n" -#: fe-auth.c:375 +#: fe-auth.c:374 msgid "could not acquire SSPI credentials" msgstr "SSPI資格を入手できませんでした" #: fe-auth.c:429 +msgid "channel binding required, but SSL not in use\n" +msgstr "チャネルバインディングが要求されていますが、SSLが使用されていません\n" + +#: fe-auth.c:436 msgid "duplicate SASL authentication request\n" msgstr "重複するSASL認証要求\n" -#: fe-auth.c:487 +#: fe-auth.c:492 +msgid "channel binding is required, but client does not support it\n" +msgstr "チャネルバインディングが要求されていますが、クライアントがサポートしていません\n" + +#: fe-auth.c:509 msgid "server offered SCRAM-SHA-256-PLUS authentication over a non-SSL connection\n" msgstr "サーバが非SSL接続上で SCRAM-SHA-256-PLUS 認証を提示してきました\n" -#: fe-auth.c:499 +#: fe-auth.c:521 msgid "none of the server's SASL authentication mechanisms are supported\n" msgstr "サーバ側のいずれのSASL認証機構もサポートされていません\n" -#: fe-auth.c:605 +#: fe-auth.c:529 +msgid "channel binding is required, but server did not offer an authentication method that supports channel binding\n" +msgstr "チャネルバインディングが要求されていますが、サーバがチャネルバインディングをサポートする認証方式を提供しませんでした\n" + +#: fe-auth.c:635 #, c-format msgid "out of memory allocating SASL buffer (%d)\n" msgstr "SASLバッファの割り当ての際のメモリ不足(%d)\n" -#: fe-auth.c:630 +#: fe-auth.c:660 msgid "AuthenticationSASLFinal received from server, but SASL authentication was not completed\n" msgstr "サーバからAuthenticationSASLFinalを受信しました、しかしSASL認証は完了していません\n" -#: fe-auth.c:707 +#: fe-auth.c:737 msgid "SCM_CRED authentication method not supported\n" msgstr "SCM_CRED認証方式はサポートされていません\n" -#: fe-auth.c:798 +#: fe-auth.c:836 +msgid "channel binding required, but server authenticated client without channel binding\n" +msgstr "チャネルバインディングが要求されていますが、サーバはチャネルバインディングを使用せずに認証を行いました\n" + +#: fe-auth.c:842 +msgid "channel binding required but not supported by server's authentication request\n" +msgstr "チャネルバインディングが要求されていますが、サーバの認証要求ではサポートされていません\n" + +#: fe-auth.c:875 msgid "Kerberos 4 authentication not supported\n" msgstr "Kerberos 4認証はサポートされていません\n" -#: fe-auth.c:803 +#: fe-auth.c:880 msgid "Kerberos 5 authentication not supported\n" msgstr "Kerberos 5認証はサポートされていません\n" -#: fe-auth.c:874 +#: fe-auth.c:951 msgid "GSSAPI authentication not supported\n" msgstr "GSSAPI認証はサポートされていません\n" -#: fe-auth.c:906 +#: fe-auth.c:983 msgid "SSPI authentication not supported\n" msgstr "SSPI認証はサポートされていません\n" -#: fe-auth.c:914 +#: fe-auth.c:991 msgid "Crypt authentication not supported\n" msgstr "Crypt認証はサポートされていません\n" -#: fe-auth.c:980 +#: fe-auth.c:1057 #, c-format msgid "authentication method %u not supported\n" msgstr "認証方式%uはサポートされていません\n" -#: fe-auth.c:1027 +#: fe-auth.c:1104 #, c-format msgid "user name lookup failure: error code %lu\n" msgstr "ユーザー名の検索に失敗: エラー コード %lu\n" -#: fe-auth.c:1037 fe-connect.c:2739 +#: fe-auth.c:1114 fe-connect.c:2838 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "ローカルユーザID%dが見つかりませんでした: %s\n" -#: fe-auth.c:1042 fe-connect.c:2744 +#: fe-auth.c:1119 fe-connect.c:2843 #, c-format msgid "local user with ID %d does not exist\n" msgstr "ID %d を持つローカルユーザは存在しません\n" -#: fe-auth.c:1144 +#: fe-auth.c:1221 msgid "unexpected shape of result set returned for SHOW\n" msgstr "SHOW に対する予期しない形のリザルトセット\n" -#: fe-auth.c:1153 +#: fe-auth.c:1230 msgid "password_encryption value too long\n" msgstr "password_encryptionの値が長すぎます\n" -#: fe-auth.c:1193 +#: fe-auth.c:1270 #, c-format msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "認識できないパスワード暗号化アルゴリズム \"%s\"\n" -#: fe-connect.c:1041 +#: fe-connect.c:1075 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "%d個のホスト名と%d個のhostaddrの値との突き合せはできません\n" -#: fe-connect.c:1117 +#: fe-connect.c:1156 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "%d個のポート番号と%d個のホストとの突き合せはできません\n" -#: fe-connect.c:1213 +#: fe-connect.c:1249 fe-connect.c:1275 fe-connect.c:1317 fe-connect.c:1326 +#: fe-connect.c:1359 fe-connect.c:1404 #, c-format -msgid "invalid sslmode value: \"%s\"\n" -msgstr "sslmodeの値が不正です: \"%s\"\n" +msgid "invalid %s value: \"%s\"\n" +msgstr "%s の値が不正: \"%s\"\n" -#: fe-connect.c:1234 +#: fe-connect.c:1296 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "SSLサポートが組み込まれていない場合sslmodeの値\"%s\"は不正です\n" -#: fe-connect.c:1258 -#, c-format -msgid "invalid gssencmode value: \"%s\"\n" -msgstr "gssencmodeの値が不正です: \"%s\"\n" - -#: fe-connect.c:1267 -#, fuzzy, c-format -#| msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" -msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" -msgstr "SSLサポートが組み込まれていない場合sslmodeの値\"%s\"は不正です\n" +#: fe-connect.c:1344 +msgid "invalid SSL protocol version range\n" +msgstr "不正なSSLプロトコルバージョン範囲\n" -#: fe-connect.c:1302 +#: fe-connect.c:1369 #, c-format -msgid "invalid target_session_attrs value: \"%s\"\n" -msgstr "target_session_attrsの値が不正です: \"%s\"\n" +msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" +msgstr "gssencmodeの値\"%s\"はGSSAPIサポートがコンパイルされていない場合は不正\n" -#: fe-connect.c:1520 +#: fe-connect.c:1623 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "TCPソケットを非遅延モードに設定できませんでした: %s\n" -#: fe-connect.c:1581 +#: fe-connect.c:1684 #, c-format msgid "" "could not connect to server: %s\n" @@ -258,7 +278,7 @@ msgstr "" " ローカルにサーバが稼動していますか?\n" " Unixドメインソケット\"%s\"で通信を受け付けていますか?\n" -#: fe-connect.c:1618 +#: fe-connect.c:1721 #, c-format msgid "" "could not connect to server: %s\n" @@ -269,7 +289,7 @@ msgstr "" "\tサーバはホスト \"%s\" (%s) で稼動しており、\n" "\tまた、ポート %s で TCP/IP 接続を受け付けていますか?\n" -#: fe-connect.c:1626 +#: fe-connect.c:1729 #, c-format msgid "" "could not connect to server: %s\n" @@ -280,434 +300,438 @@ msgstr "" "\tサーバはホスト\"%s\"で稼動していますか?\n" "\tまた、ポート%sでTCP/IP接続を受け付けていますか?\n" -#: fe-connect.c:1696 -#, fuzzy, c-format -#| msgid "invalid integer value \"%s\" for keyword \"%s\"\n" +#: fe-connect.c:1799 +#, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" -msgstr "キーワード\"%2$s\"に対する不正な整数値\"%1$s\"\n" +msgstr "接続オプション\"%2$s\"に対する不正な整数値\"%1$s\"\n" -#: fe-connect.c:1726 fe-connect.c:1760 fe-connect.c:1795 fe-connect.c:1882 -#: fe-connect.c:2529 +#: fe-connect.c:1829 fe-connect.c:1863 fe-connect.c:1898 fe-connect.c:1985 +#: fe-connect.c:2627 #, c-format msgid "setsockopt(%s) failed: %s\n" msgstr "setsockopt(%s)が失敗しました: %s\n" -#: fe-connect.c:1848 +#: fe-connect.c:1951 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "WSAIoctl(SIO_KEEPALIVE_VALS)に失敗しました:%ui\n" -#: fe-connect.c:2220 +#: fe-connect.c:2317 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "接続状態が不正です。メモリ障害の可能性があります\n" -#: fe-connect.c:2288 +#: fe-connect.c:2383 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "不正なポート番号です: \"%s\"\n" -#: fe-connect.c:2304 +#: fe-connect.c:2399 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "ホスト名\"%s\"をアドレスに変換できませんでした: %s\n" -#: fe-connect.c:2317 +#: fe-connect.c:2412 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "ネットワークアドレス\"%s\"をパースできませんでした: %s\n" -#: fe-connect.c:2330 +#: fe-connect.c:2425 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Unixドメインソケットのパス\"%s\"が長すぎます(最大 %d バイト)\n" -#: fe-connect.c:2345 +#: fe-connect.c:2440 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "Unixドメインソケットのパス\"%s\"をアドレスに変換できませんでした: %s\n" -#: fe-connect.c:2466 +#: fe-connect.c:2564 #, c-format msgid "could not create socket: %s\n" msgstr "ソケットを作成できませんでした: %s\n" -#: fe-connect.c:2488 +#: fe-connect.c:2586 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "ソケットを非ブロッキングモードに設定できませんでした: %s\n" -#: fe-connect.c:2498 +#: fe-connect.c:2596 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "ソケットをclose-on-execモードに設定できませんでした: %s\n" -#: fe-connect.c:2516 +#: fe-connect.c:2614 msgid "keepalives parameter must be an integer\n" msgstr "keepaliveのパラメータは整数でなければなりません\n" -#: fe-connect.c:2656 +#: fe-connect.c:2754 #, c-format msgid "could not get socket error status: %s\n" msgstr "ソケットのエラー状態を入手できませんでした: %s\n" -#: fe-connect.c:2684 +#: fe-connect.c:2782 #, c-format msgid "could not get client address from socket: %s\n" msgstr "ソケットからクライアントアドレスを入手できませんでした: %s\n" -#: fe-connect.c:2726 +#: fe-connect.c:2824 msgid "requirepeer parameter is not supported on this platform\n" msgstr "このプラットフォームでは requirepeer パラメータはサポートされていません\n" -#: fe-connect.c:2729 +#: fe-connect.c:2827 #, c-format msgid "could not get peer credentials: %s\n" msgstr "ピアの資格証明を入手できませんでした: %s\n" -#: fe-connect.c:2752 +#: fe-connect.c:2851 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeerは\"%s\"を指定していますが、実際のピア名は\"%s\"です\n" -#: fe-connect.c:2787 +#: fe-connect.c:2891 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "GSSAPIネゴシエーションパケットを送信できませんでした: %s\n" -#: fe-connect.c:2799 +#: fe-connect.c:2903 msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" -msgstr "" +msgstr "GSSAPI暗号化が要求されていますが、実行できませんでした(おそらく資格キャッシュがない、サーバがサポートしていないあるいはローカルソケットで接続しています)\n" -#: fe-connect.c:2826 +#: fe-connect.c:2930 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "SSLネゴシエーションパケットを送信できませんでした: %s\n" -#: fe-connect.c:2865 +#: fe-connect.c:2969 #, c-format msgid "could not send startup packet: %s\n" msgstr "開始パケットを送信できませんでした: %s\n" -#: fe-connect.c:2935 +#: fe-connect.c:3039 msgid "server does not support SSL, but SSL was required\n" msgstr "サーバはSSLをサポートしていませんが、SSLが要求されました\n" -#: fe-connect.c:2961 +#: fe-connect.c:3065 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "SSLネゴシエーションに対して不正な応答を受信しました: %c\n" -#: fe-connect.c:3051 +#: fe-connect.c:3155 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "サーバはGSSAPI暗号化をサポートしていませんが、要求されました\n" -#: fe-connect.c:3062 +#: fe-connect.c:3166 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "GSSAPIネゴシエーションに対して不正な応答を受信しました: %c\n" -#: fe-connect.c:3130 fe-connect.c:3163 +#: fe-connect.c:3233 fe-connect.c:3264 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "サーバからの認証要求を想定していましたが、%cを受信しました\n" -#: fe-connect.c:3410 +#: fe-connect.c:3506 msgid "unexpected message from server during startup\n" msgstr "起動時にサーバから想定外のメッセージがありました\n" -#: fe-connect.c:3637 +#: fe-connect.c:3711 #, c-format msgid "could not make a writable connection to server \"%s:%s\"\n" msgstr "サーバ\"%s:%s\"への書き込み可能な接続を確立できませんでした\n" -#: fe-connect.c:3683 +#: fe-connect.c:3757 #, c-format msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" msgstr "サーバ\"%s:%s\"で\"SHOW transaction_read_only\"のテストに失敗しました\n" -#: fe-connect.c:3698 +#: fe-connect.c:3772 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "接続状態%dが不正です。メモリ障害の可能性があります\n" -#: fe-connect.c:4140 fe-connect.c:4200 +#: fe-connect.c:4208 fe-connect.c:4268 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEVT_CONNRESETイベント中にPGEventProc \"%s\"に失敗しました\n" -#: fe-connect.c:4547 +#: fe-connect.c:4615 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "不正なLDAP URL\"%s\":スキーマはldap://でなければなりません\n" -#: fe-connect.c:4562 +#: fe-connect.c:4630 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "不正なLDAP URL \"%s\": 区別名がありません\n" -#: fe-connect.c:4573 fe-connect.c:4626 +#: fe-connect.c:4642 fe-connect.c:4697 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "不正なLDAP URL \"%s\": 正確に1つの属性を持たなければなりません\n" -#: fe-connect.c:4583 fe-connect.c:4640 +#: fe-connect.c:4653 fe-connect.c:4712 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "不正なLDAP URL \"%s\": 検索スコープ(base/one/sub)を持たなければなりません\n" -#: fe-connect.c:4594 +#: fe-connect.c:4664 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "不正なLDAP URL \"%s\": フィルタがありません\n" -#: fe-connect.c:4615 +#: fe-connect.c:4685 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "不正なLDAP URL \"%s\": ポート番号が不正です\n" -#: fe-connect.c:4649 +#: fe-connect.c:4721 msgid "could not create LDAP structure\n" msgstr "LDAP構造体を作成できませんでした\n" -#: fe-connect.c:4725 +#: fe-connect.c:4797 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "LDAPサーバで検索に失敗しました: %s\n" -#: fe-connect.c:4736 +#: fe-connect.c:4808 msgid "more than one entry found on LDAP lookup\n" msgstr "LDAP検索結果が複数ありました\n" -#: fe-connect.c:4737 fe-connect.c:4749 +#: fe-connect.c:4809 fe-connect.c:4821 msgid "no entry found on LDAP lookup\n" msgstr "LDAP検索結果が空でした\n" -#: fe-connect.c:4760 fe-connect.c:4773 +#: fe-connect.c:4832 fe-connect.c:4845 msgid "attribute has no values on LDAP lookup\n" msgstr "LDAP検索で属性に値がありませんでした\n" -#: fe-connect.c:4825 fe-connect.c:4844 fe-connect.c:5377 +#: fe-connect.c:4897 fe-connect.c:4916 fe-connect.c:5448 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "接続情報文字列において\"%s\"の後に\"=\"がありませんでした\n" -#: fe-connect.c:4917 fe-connect.c:5562 fe-connect.c:6336 +#: fe-connect.c:4989 fe-connect.c:5633 fe-connect.c:6407 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "接続オプション\"%s\"は不正です\n" -#: fe-connect.c:4933 fe-connect.c:5426 +#: fe-connect.c:5005 fe-connect.c:5497 msgid "unterminated quoted string in connection info string\n" msgstr "接続情報文字列において閉じていない引用符がありました\n" -#: fe-connect.c:5016 +#: fe-connect.c:5088 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "サービス定義\"%s\"がみつかりません\n" -#: fe-connect.c:5039 +#: fe-connect.c:5111 #, c-format msgid "service file \"%s\" not found\n" msgstr "サービスファイル\"%s\"がみつかりません\n" -#: fe-connect.c:5054 +#: fe-connect.c:5126 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "サービスファイル\"%2$s\"の行%1$dが長すぎます。\n" -#: fe-connect.c:5127 fe-connect.c:5171 +#: fe-connect.c:5198 fe-connect.c:5242 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "サービスファイル\"%s\"の行%dに構文エラーがあります\n" -#: fe-connect.c:5138 +#: fe-connect.c:5209 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "サービスファイル\"%s\"ではネストしたサービス指定はサポートされていません、行%d\n" -#: fe-connect.c:5858 +#: fe-connect.c:5929 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "内部パーサ処理へ伝わった不正なURI: \"%s\"\n" -#: fe-connect.c:5935 +#: fe-connect.c:6006 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "URI \"%s\"内のIPv6ホストアドレスにおいて対応する\"]\"を探している間に文字列が終わりました\n" -#: fe-connect.c:5942 +#: fe-connect.c:6013 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "URI \"%s\"内のIPv6ホストアドレスが空である可能性があります\n" -#: fe-connect.c:5957 +#: fe-connect.c:6028 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "URI(\":\"と\"/\"を除く)内の位置%2$dに想定外の\"%1$c\"文字があります: \"%3$s\"\n" -#: fe-connect.c:6086 +#: fe-connect.c:6157 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "URI問い合わせパラメータ内に余分なキーと値を分ける\"=\"があります: \"%s\"\n" -#: fe-connect.c:6106 +#: fe-connect.c:6177 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "URI問い合わせパラメータ内にキーと値を分ける\\\"=\\\"がありません: \"%s\"\n" -#: fe-connect.c:6157 +#: fe-connect.c:6228 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "不正なURI問い合わせパラメータ:\"%s\"\n" -#: fe-connect.c:6231 +#: fe-connect.c:6302 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "不正なパーセント符号化トークン: \"%s\"\n" -#: fe-connect.c:6241 +#: fe-connect.c:6312 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "パーセント符号化された値では%%00値は許されません: \"%s\"\n" -#: fe-connect.c:6604 +#: fe-connect.c:6675 msgid "connection pointer is NULL\n" msgstr "接続ポインタはNULLです\n" -#: fe-connect.c:6902 +#: fe-connect.c:6974 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "WARNING: パスワードファイル\"%s\"がテキストファイルではありません\n" -#: fe-connect.c:6911 +#: fe-connect.c:6983 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "警告: パスワードファイル \"%s\" がグループメンバもしくは他のユーザから読める状態になっています。この権限はu=rw (0600)以下にすべきです\n" -#: fe-connect.c:7005 +#: fe-connect.c:7024 +#, c-format +msgid "WARNING: line %d too long in password file \"%s\"\n" +msgstr "警告: パスワードファイル\"%2$s\"中の行%1$dが長すぎます\n" + +#: fe-connect.c:7103 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "ファイル\"%s\"からパスワードを読み込みました\n" -#: fe-exec.c:445 fe-exec.c:2822 +#: fe-exec.c:444 fe-exec.c:2821 #, c-format msgid "row number %d is out of range 0..%d" msgstr "行番号%dは0..%dの範囲を超えています" -#: fe-exec.c:506 fe-protocol2.c:502 fe-protocol2.c:537 fe-protocol2.c:1056 -#: fe-protocol3.c:208 fe-protocol3.c:235 fe-protocol3.c:252 fe-protocol3.c:332 -#: fe-protocol3.c:727 fe-protocol3.c:958 +#: fe-exec.c:505 fe-protocol2.c:497 fe-protocol2.c:532 fe-protocol2.c:1050 +#: fe-protocol3.c:206 fe-protocol3.c:233 fe-protocol3.c:250 fe-protocol3.c:330 +#: fe-protocol3.c:723 fe-protocol3.c:954 msgid "out of memory" msgstr "メモリ不足です" -#: fe-exec.c:507 fe-protocol2.c:1402 fe-protocol3.c:1911 +#: fe-exec.c:506 fe-protocol2.c:1396 fe-protocol3.c:1907 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:816 +#: fe-exec.c:815 msgid "write to server failed\n" msgstr "サーバへの書き込みに失敗\n" -#: fe-exec.c:897 +#: fe-exec.c:896 msgid "NOTICE" msgstr "注意" -#: fe-exec.c:955 +#: fe-exec.c:954 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresultはINT_MAX個以上のタプルを扱えません" -#: fe-exec.c:967 +#: fe-exec.c:966 msgid "size_t overflow" msgstr "size_t オーバーフロー" -#: fe-exec.c:1244 fe-exec.c:1302 fe-exec.c:1348 +#: fe-exec.c:1243 fe-exec.c:1301 fe-exec.c:1347 msgid "command string is a null pointer\n" msgstr "コマンド文字列がヌルポインタです\n" -#: fe-exec.c:1308 fe-exec.c:1354 fe-exec.c:1449 +#: fe-exec.c:1307 fe-exec.c:1353 fe-exec.c:1448 msgid "number of parameters must be between 0 and 65535\n" msgstr "パラメータ数は0から65535まででなければなりません\n" -#: fe-exec.c:1342 fe-exec.c:1443 +#: fe-exec.c:1341 fe-exec.c:1442 msgid "statement name is a null pointer\n" msgstr "文の名前がヌルポインタです\n" -#: fe-exec.c:1362 fe-exec.c:1525 fe-exec.c:2234 fe-exec.c:2436 +#: fe-exec.c:1361 fe-exec.c:1524 fe-exec.c:2233 fe-exec.c:2435 msgid "function requires at least protocol version 3.0\n" msgstr "関数は少なくともプロトコルバージョン3.0が必要です\n" -#: fe-exec.c:1480 +#: fe-exec.c:1479 msgid "no connection to the server\n" msgstr "サーバへの接続がありません\n" -#: fe-exec.c:1487 +#: fe-exec.c:1486 msgid "another command is already in progress\n" msgstr "他のコマンドを処理しています\n" -#: fe-exec.c:1601 +#: fe-exec.c:1600 msgid "length must be given for binary parameter\n" msgstr "バイナリパラメータには長さを指定しなければなりません\n" -#: fe-exec.c:1864 +#: fe-exec.c:1863 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "想定外のasyncStatus: %d\n" -#: fe-exec.c:1884 +#: fe-exec.c:1883 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEVT_RESULTCREATEイベント中にPGEventProc \"%s\"に失敗しました\n" -#: fe-exec.c:2044 +#: fe-exec.c:2043 msgid "COPY terminated by new PQexec" msgstr "新たなPQexec\"によりCOPYが終了しました" -#: fe-exec.c:2052 +#: fe-exec.c:2051 msgid "COPY IN state must be terminated first\n" msgstr "まずCOPY IN状態を終了させなければなりません\n" -#: fe-exec.c:2072 +#: fe-exec.c:2071 msgid "COPY OUT state must be terminated first\n" msgstr "まずCOPY OUT状態を終了させなければなりません\n" -#: fe-exec.c:2080 +#: fe-exec.c:2079 msgid "PQexec not allowed during COPY BOTH\n" msgstr "COPY BOTH 実行中の PQexec は許可されていません\n" -#: fe-exec.c:2326 fe-exec.c:2393 fe-exec.c:2483 fe-protocol2.c:1359 -#: fe-protocol3.c:1842 +#: fe-exec.c:2325 fe-exec.c:2392 fe-exec.c:2482 fe-protocol2.c:1353 +#: fe-protocol3.c:1838 msgid "no COPY in progress\n" msgstr "実行中のCOPYはありません\n" -#: fe-exec.c:2673 +#: fe-exec.c:2672 msgid "connection in wrong state\n" msgstr "接続状態が異常です\n" -#: fe-exec.c:2704 +#: fe-exec.c:2703 msgid "invalid ExecStatusType code" msgstr "ExecStatusTypeコードが不正です" -#: fe-exec.c:2731 +#: fe-exec.c:2730 msgid "PGresult is not an error result\n" msgstr "PGresutがエラー結果ではありません\n" -#: fe-exec.c:2806 fe-exec.c:2829 +#: fe-exec.c:2805 fe-exec.c:2828 #, c-format msgid "column number %d is out of range 0..%d" msgstr "列番号%dは0..%dの範囲を超えています" -#: fe-exec.c:2844 +#: fe-exec.c:2843 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "パラメータ%dは0..%dの範囲を超えています" -#: fe-exec.c:3154 +#: fe-exec.c:3153 #, c-format msgid "could not interpret result from server: %s" msgstr "サーバからの結果を解釈できませんでした: %s" -#: fe-exec.c:3393 fe-exec.c:3477 +#: fe-exec.c:3392 fe-exec.c:3476 msgid "incomplete multibyte character\n" msgstr "不完全なマルチバイト文字\n" @@ -798,22 +822,22 @@ msgstr "loread関数のOIDを決定できません\n" msgid "cannot determine OID of function lowrite\n" msgstr "lowrite関数のOIDを決定できません\n" -#: fe-misc.c:290 +#: fe-misc.c:276 #, c-format msgid "integer of size %lu not supported by pqGetInt" msgstr "サイズ%luの整数はpqGetIntでサポートされていません" -#: fe-misc.c:326 +#: fe-misc.c:312 #, c-format msgid "integer of size %lu not supported by pqPutInt" msgstr "サイズ%luの整数はpqPutIntでサポートされていません" -#: fe-misc.c:637 fe-misc.c:859 +#: fe-misc.c:623 fe-misc.c:856 msgid "connection not open\n" msgstr "接続はオープンされていません\n" -#: fe-misc.c:807 fe-secure-openssl.c:206 fe-secure-openssl.c:314 -#: fe-secure.c:268 fe-secure.c:385 +#: fe-misc.c:792 fe-secure-openssl.c:209 fe-secure-openssl.c:316 +#: fe-secure.c:267 fe-secure.c:383 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -823,181 +847,181 @@ msgstr "" " おそらく要求の処理前または処理中にサーバが異常終了\n" " したことを意味しています。\n" -#: fe-misc.c:1046 +#: fe-misc.c:1050 msgid "timeout expired\n" msgstr "タイムアウト期間が過ぎました\n" -#: fe-misc.c:1091 +#: fe-misc.c:1095 msgid "invalid socket\n" msgstr "不正なソケットです\n" -#: fe-misc.c:1114 +#: fe-misc.c:1118 #, c-format msgid "select() failed: %s\n" msgstr "select()が失敗しました: %s\n" -#: fe-protocol2.c:90 +#: fe-protocol2.c:87 #, c-format msgid "invalid setenv state %c, probably indicative of memory corruption\n" msgstr "setenv状態%cは不正です。メモリ障害の可能性があります\n" -#: fe-protocol2.c:389 +#: fe-protocol2.c:384 #, c-format msgid "invalid state %c, probably indicative of memory corruption\n" msgstr "状態%cは不正です。メモリ障害の可能性があります\n" -#: fe-protocol2.c:478 fe-protocol3.c:185 +#: fe-protocol2.c:473 fe-protocol3.c:183 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "待機中にサーバからメッセージ種類0x%02xが届きました" -#: fe-protocol2.c:528 +#: fe-protocol2.c:523 #, c-format msgid "unexpected character %c following empty query response (\"I\" message)" msgstr "空の問い合わせ応答(\"I\"メッセージ)の後に想定外の文字%cがありました" -#: fe-protocol2.c:594 +#: fe-protocol2.c:589 #, c-format msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" msgstr "サーバが事前の行記述(\"T\"メッセージ)なしにデータ(\"D\"メッセージ)を送信しました" -#: fe-protocol2.c:612 +#: fe-protocol2.c:607 #, c-format msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" msgstr "サーバが事前の行記述(\"T\"メッセージ)なしにバイナリデータ(\"B\"メッセージ)を送信しました" -#: fe-protocol2.c:632 fe-protocol3.c:411 +#: fe-protocol2.c:626 fe-protocol3.c:408 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "サーバから想定外の応答がありました。受け付けた先頭文字は\"%c\"です\n" -#: fe-protocol2.c:761 fe-protocol2.c:936 fe-protocol3.c:626 fe-protocol3.c:853 +#: fe-protocol2.c:755 fe-protocol2.c:930 fe-protocol3.c:622 fe-protocol3.c:849 msgid "out of memory for query result" msgstr "問い合わせ結果用のメモリが不足しています" -#: fe-protocol2.c:1414 +#: fe-protocol2.c:1408 #, c-format msgid "lost synchronization with server, resetting connection" msgstr "サーバとの動機が失われました。接続をリセットしています" -#: fe-protocol2.c:1536 fe-protocol2.c:1568 fe-protocol3.c:2099 +#: fe-protocol2.c:1530 fe-protocol2.c:1562 fe-protocol3.c:2095 #, c-format msgid "protocol error: id=0x%x\n" msgstr "プロトコルエラー: id=0x%x\n" -#: fe-protocol3.c:367 +#: fe-protocol3.c:365 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "サーバが事前の行記述(\"T\"メッセージ)なしにデータ(\"D\"メッセージ)を送信しました\"\n" -#: fe-protocol3.c:432 +#: fe-protocol3.c:429 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "メッセージの内容がメッセージ種類\"%c\"の長さに合いません\n" -#: fe-protocol3.c:453 +#: fe-protocol3.c:449 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "サーバとの同期が失われました。受信したメッセージ種類は\"%c\"、長さは%d\n" -#: fe-protocol3.c:504 fe-protocol3.c:544 +#: fe-protocol3.c:500 fe-protocol3.c:540 msgid "insufficient data in \"T\" message" msgstr "\"T\"メッセージ内のデータが不十分です" -#: fe-protocol3.c:577 +#: fe-protocol3.c:573 msgid "extraneous data in \"T\" message" msgstr "\"T\"メッセージ内に無関係なデータがあります" -#: fe-protocol3.c:690 +#: fe-protocol3.c:686 msgid "extraneous data in \"t\" message" msgstr "\"t\"メッセージ内に無関係なデータがあります" -#: fe-protocol3.c:761 fe-protocol3.c:793 fe-protocol3.c:811 +#: fe-protocol3.c:757 fe-protocol3.c:789 fe-protocol3.c:807 msgid "insufficient data in \"D\" message" msgstr "\"D\"\"メッセージ内のデータが不十分です" -#: fe-protocol3.c:767 +#: fe-protocol3.c:763 msgid "unexpected field count in \"D\" message" msgstr "\"D\"メッセージ内のフィールド数が想定外です。" -#: fe-protocol3.c:820 +#: fe-protocol3.c:816 msgid "extraneous data in \"D\" message" msgstr "”D\"メッセージ内に無関係なデータがあります" -#: fe-protocol3.c:1012 +#: fe-protocol3.c:1008 msgid "no error message available\n" msgstr "エラーメッセージがありません\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1060 fe-protocol3.c:1079 +#: fe-protocol3.c:1056 fe-protocol3.c:1075 #, c-format msgid " at character %s" msgstr "(文字位置: %s)" -#: fe-protocol3.c:1092 +#: fe-protocol3.c:1088 #, c-format msgid "DETAIL: %s\n" msgstr "DETAIL: %s\n" -#: fe-protocol3.c:1095 +#: fe-protocol3.c:1091 #, c-format msgid "HINT: %s\n" msgstr "HINT: %s\n" -#: fe-protocol3.c:1098 +#: fe-protocol3.c:1094 #, c-format msgid "QUERY: %s\n" msgstr "QUERY: %s\n" -#: fe-protocol3.c:1105 +#: fe-protocol3.c:1101 #, c-format msgid "CONTEXT: %s\n" msgstr "CONTEXT: %s\n" -#: fe-protocol3.c:1114 +#: fe-protocol3.c:1110 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "SCHEMA NAME: %s\n" -#: fe-protocol3.c:1118 +#: fe-protocol3.c:1114 #, c-format msgid "TABLE NAME: %s\n" msgstr "TABLE NAME: %s\n" -#: fe-protocol3.c:1122 +#: fe-protocol3.c:1118 #, c-format msgid "COLUMN NAME: %s\n" msgstr "COLUMN NAME: %s\n" -#: fe-protocol3.c:1126 +#: fe-protocol3.c:1122 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "DATATYPE NAME: %s\n" -#: fe-protocol3.c:1130 +#: fe-protocol3.c:1126 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "CONSTRAINT NAME: %s\n" -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1138 msgid "LOCATION: " msgstr "LOCATION: " -#: fe-protocol3.c:1144 +#: fe-protocol3.c:1140 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1146 +#: fe-protocol3.c:1142 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1341 +#: fe-protocol3.c:1337 #, c-format msgid "LINE %d: " msgstr "行 %d: " -#: fe-protocol3.c:1736 +#: fe-protocol3.c:1732 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: テキストのCOPY OUTを行っていません\n" @@ -1018,91 +1042,81 @@ msgstr "\"%s\"のサーバ証明書がホスト名\"%s\"とマッチしません msgid "could not get server's host name from server certificate\n" msgstr "サーバ証明書からサーバのホスト名を取り出すことができませんでした。\n" -#: fe-secure-gssapi.c:160 +#: fe-secure-gssapi.c:201 msgid "GSSAPI wrap error" msgstr "GSSAPI名ラップエラー" -#: fe-secure-gssapi.c:166 -#, fuzzy -#| msgid "GSSAPI did not provide confidentiality" +#: fe-secure-gssapi.c:209 msgid "outgoing GSSAPI message would not use confidentiality\n" -msgstr "GSSAPI は気密性を提供しませんでした" +msgstr "送出されるGSSAPIメッセージは機密性を使用しません\n" -#: fe-secure-gssapi.c:173 -#, fuzzy, c-format -#| msgid "server tried to send oversize GSSAPI packet: %zu bytes" +#: fe-secure-gssapi.c:217 +#, c-format msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" -msgstr "サーバは過大なサイズのGSSAPIパケットを送信しようとしました: %zu バイト" +msgstr "クライアントは過大なGSSAPIパケットを送信しようとしました: (%zu > %zu)\n" -#: fe-secure-gssapi.c:291 fe-secure-gssapi.c:497 -#, fuzzy, c-format -#| msgid "oversize GSSAPI packet sent by the client: %zu bytes" +#: fe-secure-gssapi.c:354 fe-secure-gssapi.c:596 +#, c-format msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" -msgstr "過大なサイズのGSSAPIパケットがクライアントから送出されました: %zu バイト" +msgstr "過大なGSSAPIパケットがサーバから送出されました: (%zu > %zu)\n" -#: fe-secure-gssapi.c:327 +#: fe-secure-gssapi.c:393 msgid "GSSAPI unwrap error" msgstr "GSSAPIアンラップエラー" -#: fe-secure-gssapi.c:335 -#, fuzzy -#| msgid "GSSAPI did not provide confidentiality" +#: fe-secure-gssapi.c:403 msgid "incoming GSSAPI message did not use confidentiality\n" -msgstr "GSSAPI は気密性を提供しませんでした" +msgstr "受信したGSSAPIパケットは機密性を使用していませんでした\n" -#: fe-secure-gssapi.c:543 -#, fuzzy -#| msgid "could not accept SSPI security context" +#: fe-secure-gssapi.c:642 msgid "could not initiate GSSAPI security context" -msgstr "SSPIセキュリティコンテキストを受け付けられませんでした" +msgstr "GSSAPIセキュリティコンテキストを初期化できませんでした" -#: fe-secure-gssapi.c:568 +#: fe-secure-gssapi.c:673 msgid "GSSAPI size check error" msgstr "GSSAPIサイズチェックエラー" -#: fe-secure-gssapi.c:577 -#, fuzzy -#| msgid "GSSAPI context error" +#: fe-secure-gssapi.c:684 msgid "GSSAPI context establishment error" -msgstr "GSSAPIコンテクストエラー" +msgstr "GSSAPIコンテクスト確立エラー" -#: fe-secure-openssl.c:211 fe-secure-openssl.c:319 fe-secure-openssl.c:1219 +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1291 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "SSL SYSCALLエラー: %s\n" -#: fe-secure-openssl.c:218 fe-secure-openssl.c:326 fe-secure-openssl.c:1223 +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1295 msgid "SSL SYSCALL error: EOF detected\n" msgstr "SSL SYSCALLエラー: EOFを検知\n" -#: fe-secure-openssl.c:229 fe-secure-openssl.c:337 fe-secure-openssl.c:1232 +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1304 #, c-format msgid "SSL error: %s\n" msgstr "SSLエラー: %s\n" -#: fe-secure-openssl.c:244 fe-secure-openssl.c:352 +#: fe-secure-openssl.c:247 fe-secure-openssl.c:354 msgid "SSL connection has been closed unexpectedly\n" msgstr "SSL接続が意図せずにクローズされました\n" -#: fe-secure-openssl.c:250 fe-secure-openssl.c:358 fe-secure-openssl.c:1241 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1354 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "不明のSSLエラーコード: %d\n" -#: fe-secure-openssl.c:398 +#: fe-secure-openssl.c:400 msgid "could not determine server certificate signature algorithm\n" msgstr "サーバ証明書の署名アルゴリズムを決定できませんでした\n" -#: fe-secure-openssl.c:419 +#: fe-secure-openssl.c:421 #, c-format msgid "could not find digest for NID %s\n" msgstr "NID %sのダイジェストが見つかりませんでした\n" -#: fe-secure-openssl.c:429 +#: fe-secure-openssl.c:431 msgid "could not generate peer certificate hash\n" msgstr "ピアの証明書ハッシュの生成に失敗しました\n" -#: fe-secure-openssl.c:486 +#: fe-secure-openssl.c:488 msgid "SSL certificate's name entry is missing\n" msgstr "SSL証明書に名前の項目がありません\n" @@ -1111,17 +1125,32 @@ msgstr "SSL証明書に名前の項目がありません\n" msgid "could not create SSL context: %s\n" msgstr "SSLコンテキストを作成できませんでした: %s\n" -#: fe-secure-openssl.c:852 +#: fe-secure-openssl.c:854 #, c-format -msgid "could not read root certificate file \"%s\": %s\n" -msgstr "ルート証明書\"%s\"を読み取れませんでした: %s\n" +msgid "invalid value \"%s\" for minimum SSL protocol version\n" +msgstr "不正なSSLプロトコル最小バージョンの値\"%s\"\n" + +#: fe-secure-openssl.c:865 +#, c-format +msgid "could not set minimum SSL protocol version: %s\n" +msgstr "SSLプロトコル最小バージョンを設定できませんでした: %s\n" + +#: fe-secure-openssl.c:883 +#, c-format +msgid "invalid value \"%s\" for maximum SSL protocol version\n" +msgstr "不正なSSLプロトコル最大バージョンの値\"%s\"\n" -#: fe-secure-openssl.c:880 +#: fe-secure-openssl.c:894 #, c-format -msgid "SSL library does not support CRL certificates (file \"%s\")\n" -msgstr "SSLライブラリがCRL証明書(\"%s\")をオープンできませんでした\n" +msgid "could not set maximum SSL protocol version: %s\n" +msgstr "SSLプロトコル最大バージョンを設定できませんでした: %s\n" -#: fe-secure-openssl.c:908 +#: fe-secure-openssl.c:930 +#, c-format +msgid "could not read root certificate file \"%s\": %s\n" +msgstr "ルート証明書\"%s\"を読み取れませんでした: %s\n" + +#: fe-secure-openssl.c:974 msgid "" "could not get home directory to locate root certificate file\n" "Either provide the file or change sslmode to disable server certificate verification.\n" @@ -1129,7 +1158,7 @@ msgstr "" "ルート証明書ファイルを置くためのホームディレクトリが存在しません。\n" "ファイルを用意するか、サーバ証明書の検証を無効にするように sslmode を変更してください\n" -#: fe-secure-openssl.c:912 +#: fe-secure-openssl.c:978 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -1138,87 +1167,106 @@ msgstr "" "ルート証明書ファイル\"%s\"が存在しません。\n" "ファイルを用意するかサーバ証明書の検証を無効にするようにsslmodeを変更してください\n" -#: fe-secure-openssl.c:943 +#: fe-secure-openssl.c:1009 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "証明書ファイル\"%s\"をオープンできませんでした: %s\n" -#: fe-secure-openssl.c:962 +#: fe-secure-openssl.c:1028 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "証明書ファイル\"%s\"を読み込めませんでした: %s\n" -#: fe-secure-openssl.c:987 +#: fe-secure-openssl.c:1053 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "SSL接続を確立できませんでした: %s\n" -#: fe-secure-openssl.c:1041 +#: fe-secure-openssl.c:1107 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "SSLエンジン\"%s\"を読み込みできませんでした: %s\n" -#: fe-secure-openssl.c:1053 +#: fe-secure-openssl.c:1119 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "SSLエンジン\"%s\"を初期化できませんでした: %s\n" -#: fe-secure-openssl.c:1069 +#: fe-secure-openssl.c:1135 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "SSL秘密キーファイル\"%s\"をエンジン\"%s\"から読み取れませんでした: %s\n" -#: fe-secure-openssl.c:1083 +#: fe-secure-openssl.c:1149 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "SSL秘密キー\"%s\"をエンジン\"%s\"から読み取れませんでした: %s\n" -#: fe-secure-openssl.c:1120 +#: fe-secure-openssl.c:1186 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "証明書はありましたが、秘密キーファイル\"%s\"はありませんでした\n" -#: fe-secure-openssl.c:1128 +#: fe-secure-openssl.c:1194 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "警告:秘密キーファイル \"%s\" がグループメンバや第三者から読める状態になっています。この権限はu=rw (0600)またはそれ以下とすべきです\n" -#: fe-secure-openssl.c:1139 +#: fe-secure-openssl.c:1219 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "秘密キーファイル\"%s\"をロードできませんでした: %s\n" -#: fe-secure-openssl.c:1153 +#: fe-secure-openssl.c:1237 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "証明書と秘密キーファイル\"%s\"が一致しません: %s\n" -#: fe-secure-openssl.c:1262 +#: fe-secure-openssl.c:1337 +#, c-format +msgid "This may indicate that the server does not support any SSL protocol version between %s and %s.\n" +msgstr "このことは、クライアントがSSLプロトコルのバージョン%sから%sの間のいずれもサポートしていないことを示唆しているかもしれません。\n" + +#: fe-secure-openssl.c:1373 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "証明書を入手できませんでした: %s\n" -#: fe-secure-openssl.c:1351 +#: fe-secure-openssl.c:1462 #, c-format msgid "no SSL error reported" msgstr "SSLエラーはありませんでした" -#: fe-secure-openssl.c:1360 +#: fe-secure-openssl.c:1471 #, c-format msgid "SSL error code %lu" msgstr "SSLエラーコード: %lu" -#: fe-secure.c:276 +#: fe-secure-openssl.c:1718 +#, c-format +msgid "WARNING: sslpassword truncated\n" +msgstr "警告: sslpasswordが切り詰められました\n" + +#: fe-secure.c:275 #, c-format msgid "could not receive data from server: %s\n" msgstr "サーバからデータを受信できませんでした: %s\n" -#: fe-secure.c:392 +#: fe-secure.c:390 #, c-format msgid "could not send data to server: %s\n" msgstr "サーバにデータを送信できませんでした: %s\n" -#: win32.c:317 +#: win32.c:314 #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "不明なソケットエラー 0x%08X/%d" + +#~ msgid "SSL library does not support CRL certificates (file \"%s\")\n" +#~ msgstr "SSLライブラリがCRL証明書(\"%s\")をオープンできませんでした\n" + +#~ msgid "invalid target_session_attrs value: \"%s\"\n" +#~ msgstr "target_session_attrsの値が不正です: \"%s\"\n" + +#~ msgid "invalid gssencmode value: \"%s\"\n" +#~ msgstr "gssencmodeの値が不正です: \"%s\"\n" diff --git a/src/interfaces/libpq/po/ko.po b/src/interfaces/libpq/po/ko.po index 9a85aeccac455..602069ae8bff8 100644 --- a/src/interfaces/libpq/po/ko.po +++ b/src/interfaces/libpq/po/ko.po @@ -3,10 +3,10 @@ # msgid "" msgstr "" -"Project-Id-Version: libpq (PostgreSQL) 12\n" +"Project-Id-Version: libpq (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:09+0000\n" -"PO-Revision-Date: 2019-11-01 11:17+0900\n" +"POT-Creation-Date: 2020-10-05 01:09+0000\n" +"PO-Revision-Date: 2020-10-05 17:53+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean \n" "Language: ko\n" @@ -15,228 +15,284 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: fe-auth-scram.c:183 +#: fe-auth-scram.c:212 msgid "malformed SCRAM message (empty message)\n" msgstr "SCRAM 메시지가 형식에 안맞음 (메시지 비었음)\n" -#: fe-auth-scram.c:189 +#: fe-auth-scram.c:218 msgid "malformed SCRAM message (length mismatch)\n" msgstr "SCRAM 메시지가 형식에 안맞음 (길이 불일치)\n" -#: fe-auth-scram.c:238 +#: fe-auth-scram.c:265 msgid "incorrect server signature\n" msgstr "잘못된 서버 서명\n" -#: fe-auth-scram.c:247 +#: fe-auth-scram.c:274 msgid "invalid SCRAM exchange state\n" msgstr "SCRAM 교화 상태가 바르지 않음\n" -#: fe-auth-scram.c:270 +#: fe-auth-scram.c:296 #, c-format msgid "malformed SCRAM message (attribute \"%c\" expected)\n" msgstr "SCRAM 메시지가 형식에 안맞음 (\"%c\" 속성이 예상됨)\n" -#: fe-auth-scram.c:279 +#: fe-auth-scram.c:305 #, c-format msgid "" "malformed SCRAM message (expected character \"=\" for attribute \"%c\")\n" msgstr "SCRAM 메시지가 형식에 안맞음 (\"%c\" 속성 예상값은 \"=\")\n" -#: fe-auth-scram.c:320 +#: fe-auth-scram.c:346 msgid "could not generate nonce\n" msgstr "암호화 토큰(nonce)을 만들 수 없음\n" -#: fe-auth-scram.c:328 fe-auth-scram.c:395 fe-auth-scram.c:517 -#: fe-auth-scram.c:537 fe-auth-scram.c:563 fe-auth-scram.c:577 -#: fe-auth-scram.c:626 fe-auth-scram.c:660 fe-auth.c:290 fe-auth.c:360 -#: fe-auth.c:395 fe-auth.c:581 fe-auth.c:740 fe-auth.c:1052 fe-auth.c:1200 -#: fe-connect.c:864 fe-connect.c:1326 fe-connect.c:1502 fe-connect.c:2112 -#: fe-connect.c:2135 fe-connect.c:2858 fe-connect.c:4536 fe-connect.c:4788 -#: fe-connect.c:4907 fe-connect.c:5161 fe-connect.c:5241 fe-connect.c:5340 -#: fe-connect.c:5596 fe-connect.c:5625 fe-connect.c:5697 fe-connect.c:5721 -#: fe-connect.c:5739 fe-connect.c:5840 fe-connect.c:5849 fe-connect.c:6205 -#: fe-connect.c:6355 fe-exec.c:2748 fe-exec.c:3495 fe-exec.c:3660 -#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1213 fe-protocol3.c:999 -#: fe-protocol3.c:1703 fe-secure-common.c:110 fe-secure-gssapi.c:498 -#: fe-secure-openssl.c:438 fe-secure-openssl.c:1025 +#: fe-auth-scram.c:356 fe-auth-scram.c:431 fe-auth-scram.c:579 +#: fe-auth-scram.c:600 fe-auth-scram.c:626 fe-auth-scram.c:641 +#: fe-auth-scram.c:691 fe-auth-scram.c:725 fe-auth.c:289 fe-auth.c:359 +#: fe-auth.c:394 fe-auth.c:611 fe-auth.c:770 fe-auth.c:1129 fe-auth.c:1277 +#: fe-connect.c:892 fe-connect.c:1419 fe-connect.c:1595 fe-connect.c:2200 +#: fe-connect.c:2223 fe-connect.c:2952 fe-connect.c:4598 fe-connect.c:4854 +#: fe-connect.c:4973 fe-connect.c:5226 fe-connect.c:5306 fe-connect.c:5405 +#: fe-connect.c:5661 fe-connect.c:5690 fe-connect.c:5762 fe-connect.c:5786 +#: fe-connect.c:5804 fe-connect.c:5905 fe-connect.c:5914 fe-connect.c:6270 +#: fe-connect.c:6420 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 +#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1207 fe-protocol3.c:995 +#: fe-protocol3.c:1699 fe-secure-common.c:110 fe-secure-gssapi.c:504 +#: fe-secure-openssl.c:440 fe-secure-openssl.c:1091 msgid "out of memory\n" msgstr "메모리 부족\n" -#: fe-auth-scram.c:555 +#: fe-auth-scram.c:364 +msgid "could not encode nonce\n" +msgstr "암호화 토큰(nonce)을 인코딩할 수 없음\n" + +#: fe-auth-scram.c:563 +msgid "could not encode client proof\n" +msgstr "클라이언트 프루프(proof)를 인코딩할 수 없음\n" + +#: fe-auth-scram.c:618 msgid "invalid SCRAM response (nonce mismatch)\n" msgstr "잘못된 SCRAM 응답 (토큰 불일치)\n" -#: fe-auth-scram.c:586 +#: fe-auth-scram.c:651 msgid "malformed SCRAM message (invalid salt)\n" msgstr "형식에 맞지 않은 SCRAM 메시지 (잘못된 소금)\n" -#: fe-auth-scram.c:600 +#: fe-auth-scram.c:665 msgid "malformed SCRAM message (invalid iteration count)\n" msgstr "형식에 맞지 않은 SCRAM 메시지 (나열 숫자가 이상함)\n" -#: fe-auth-scram.c:606 +#: fe-auth-scram.c:671 msgid "malformed SCRAM message (garbage at end of server-first-message)\n" msgstr "" "형식에 맞지 않은 SCRAM 메시지 (서버 첫 메시지 끝에 쓸모 없는 값이 있음)\n" -#: fe-auth-scram.c:637 +#: fe-auth-scram.c:702 #, c-format msgid "error received from server in SCRAM exchange: %s\n" msgstr "SCRAM 교환작업에서 서버로부터 데이터를 받지 못했음: %s\n" -#: fe-auth-scram.c:653 +#: fe-auth-scram.c:718 msgid "malformed SCRAM message (garbage at end of server-final-message)\n" msgstr "" "형식에 맞지 않은 SCRAM 메시지 (서버 끝 메시지 뒤에 쓸모 없는 값이 있음)\n" -#: fe-auth-scram.c:671 +#: fe-auth-scram.c:737 msgid "malformed SCRAM message (invalid server signature)\n" msgstr "형식에 맞지 않은 SCRAM 메시지 (서버 사인이 이상함)\n" -#: fe-auth.c:77 +#: fe-auth.c:76 #, c-format msgid "out of memory allocating GSSAPI buffer (%d)\n" msgstr "GSSAPI 버퍼(%d)에 할당할 메모리 부족\n" -#: fe-auth.c:132 +#: fe-auth.c:131 msgid "GSSAPI continuation error" msgstr "GSSAPI 연속 오류" -#: fe-auth.c:159 fe-auth.c:389 fe-gssapi-common.c:98 fe-secure-common.c:98 +#: fe-auth.c:158 fe-auth.c:388 fe-gssapi-common.c:98 fe-secure-common.c:98 msgid "host name must be specified\n" msgstr "호스트 이름을 지정해야 함\n" -#: fe-auth.c:166 +#: fe-auth.c:165 msgid "duplicate GSS authentication request\n" msgstr "중복된 GSS 인증 요청\n" -#: fe-auth.c:231 +#: fe-auth.c:230 #, c-format msgid "out of memory allocating SSPI buffer (%d)\n" msgstr "SSPI 버퍼(%d)에 할당할 메모리 부족\n" -#: fe-auth.c:279 +#: fe-auth.c:278 msgid "SSPI continuation error" msgstr "SSPI 연속 오류" -#: fe-auth.c:350 +#: fe-auth.c:349 msgid "duplicate SSPI authentication request\n" msgstr "중복된 SSPI 인증 요청\n" -#: fe-auth.c:375 +#: fe-auth.c:374 msgid "could not acquire SSPI credentials" msgstr "SSPI 자격 증명을 가져올 수 없음" #: fe-auth.c:429 +msgid "channel binding required, but SSL not in use\n" +msgstr "채널 바인딩이 필요한데, SSL 기능이 꺼져있음\n" + +#: fe-auth.c:436 msgid "duplicate SASL authentication request\n" msgstr "중복된 SASL 인증 요청\n" -#: fe-auth.c:487 +#: fe-auth.c:492 +msgid "channel binding is required, but client does not support it\n" +msgstr "채널 바인딩이 필요한데, 클라이언트에서 지원하지 않음\n" + +#: fe-auth.c:509 msgid "" "server offered SCRAM-SHA-256-PLUS authentication over a non-SSL connection\n" msgstr "서버는 non-SSL 접속으로 SCRAM-SHA-256-PLUS 인증을 제공함\n" -#: fe-auth.c:499 +#: fe-auth.c:521 msgid "none of the server's SASL authentication mechanisms are supported\n" msgstr "SASL 인증 메커니즘을 지원하는 서버가 없습니다.\n" -#: fe-auth.c:605 +#: fe-auth.c:529 +msgid "" +"channel binding is required, but server did not offer an authentication " +"method that supports channel binding\n" +msgstr "" +"채널 바인딩 기능을 사용하도록 지정했지만, 서버가 이 기능을 지원하지 않음\n" + +#: fe-auth.c:635 #, c-format msgid "out of memory allocating SASL buffer (%d)\n" msgstr "SASL 버퍼(%d)에 할당할 메모리 부족\n" -#: fe-auth.c:630 +#: fe-auth.c:660 msgid "" "AuthenticationSASLFinal received from server, but SASL authentication was " "not completed\n" msgstr "" "서버에서 AuthenticationSASLFinal 응답을 받았지만, SASL 인증이 끝나지 않았음\n" -#: fe-auth.c:707 +#: fe-auth.c:737 msgid "SCM_CRED authentication method not supported\n" msgstr "SCM_CRED 인증 방법이 지원되지 않음\n" -#: fe-auth.c:798 +#: fe-auth.c:836 +msgid "" +"channel binding required, but server authenticated client without channel " +"binding\n" +msgstr "" +"채널 바인딩이 필요한데, 서버가 체널 바인딩 없이 클라이언트를 인증함\n" + +#: fe-auth.c:842 +msgid "" +"channel binding required but not supported by server's authentication " +"request\n" +msgstr "" +"채널 바인딩이 필요한데, 서버 인증 요청에서 지원하지 않음\n" + +#: fe-auth.c:875 msgid "Kerberos 4 authentication not supported\n" msgstr "Kerberos 4 인증 방법이 지원되지 않음\n" -#: fe-auth.c:803 +#: fe-auth.c:880 msgid "Kerberos 5 authentication not supported\n" msgstr "Kerberos 5 인증 방법이 지원되지 않음\n" -#: fe-auth.c:874 +#: fe-auth.c:951 msgid "GSSAPI authentication not supported\n" msgstr "GSSAPI 인증은 지원되지 않음\n" -#: fe-auth.c:906 +#: fe-auth.c:983 msgid "SSPI authentication not supported\n" msgstr "SSPI 인증은 지원되지 않음\n" -#: fe-auth.c:914 +#: fe-auth.c:991 msgid "Crypt authentication not supported\n" msgstr "암호화 인증은 지원되지 않음\n" -#: fe-auth.c:980 +#: fe-auth.c:1057 #, c-format msgid "authentication method %u not supported\n" msgstr "%u 인증 방법이 지원되지 않음\n" -#: fe-auth.c:1027 +#: fe-auth.c:1104 #, c-format msgid "user name lookup failure: error code %lu\n" msgstr "사용자 이름 찾기 실패: 오류 코드 %lu\n" -#: fe-auth.c:1037 fe-connect.c:2745 +#: fe-auth.c:1114 fe-connect.c:2834 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "UID %d 해당하는 사용자를 찾을 수 없음: %s\n" -#: fe-auth.c:1042 fe-connect.c:2750 +#: fe-auth.c:1119 fe-connect.c:2839 #, c-format msgid "local user with ID %d does not exist\n" msgstr "ID %d 로컬 사용자 없음\n" -#: fe-auth.c:1144 +#: fe-auth.c:1221 msgid "unexpected shape of result set returned for SHOW\n" msgstr "SHOW 명령의 결과 자료가 비정상임\n" -#: fe-auth.c:1153 +#: fe-auth.c:1230 msgid "password_encryption value too long\n" msgstr "password_encryption 너무 긺\n" -#: fe-auth.c:1193 +#: fe-auth.c:1270 #, c-format msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "알 수 없는 비밀번호 암호화 알고리즘: \"%s\"\n" -#: fe-connect.c:1047 +#: fe-connect.c:1075 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "호스트 이름은 %d개인데, 호스트 주소는 %d개임\n" -#: fe-connect.c:1123 +#: fe-connect.c:1156 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "포트 번호는 %d개인데, 호스트는 %d개입니다.\n" -#: fe-connect.c:1219 +#: fe-connect.c:1249 +#, c-format +msgid "invalid channel_binding value: \"%s\"\n" +msgstr "잘못된 channel_binding 값: \"%s\"\n" + +#: fe-connect.c:1275 #, c-format msgid "invalid sslmode value: \"%s\"\n" msgstr "잘못된 sslmode 값: \"%s\"\n" -#: fe-connect.c:1240 +#: fe-connect.c:1296 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "" "SSL 연결 기능을 지원하지 않고 컴파일 된 경우는 sslmode 값으로 \"%s\" 값은 타" "당치 않습니다\n" -#: fe-connect.c:1264 +#: fe-connect.c:1317 +#, c-format +msgid "invalid ssl_min_protocol_version value: \"%s\"\n" +msgstr "잘못된 ssl_min_protocol_version 값: \"%s\"\n" + +#: fe-connect.c:1325 +#, c-format +msgid "invalid ssl_max_protocol_version value: \"%s\"\n" +msgstr "잘못된 ssl_max_protocol_version 값: \"%s\"\n" + +#: fe-connect.c:1342 +msgid "invalid SSL protocol version range\n" +msgstr "잘못된 SSL 프로토콜 버전 범위\n" + +#: fe-connect.c:1357 #, c-format msgid "invalid gssencmode value: \"%s\"\n" msgstr "잘못된 gssencmode 값: \"%s\"\n" -#: fe-connect.c:1273 +#: fe-connect.c:1366 #, c-format msgid "" "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" @@ -244,17 +300,17 @@ msgstr "" "GSSAPI 접속을 지원하지 않는 서버에서는 gssencmode 값(\"%s\")이 적당하지 않" "음\n" -#: fe-connect.c:1308 +#: fe-connect.c:1401 #, c-format msgid "invalid target_session_attrs value: \"%s\"\n" msgstr "잘못된 target_session_attrs 값: \"%s\"\n" -#: fe-connect.c:1526 +#: fe-connect.c:1619 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "소켓을 TCP에 no delay 모드로 지정할 수 없음: %s\n" -#: fe-connect.c:1587 +#: fe-connect.c:1680 #, c-format msgid "" "could not connect to server: %s\n" @@ -265,7 +321,7 @@ msgstr "" "\t로컬호스트에 서버가 가동 중인지,\n" "\t\"%s\" 유닉스 도메인 소켓 접근이 가능한지 살펴보십시오.\n" -#: fe-connect.c:1624 +#: fe-connect.c:1717 #, c-format msgid "" "could not connect to server: %s\n" @@ -276,7 +332,7 @@ msgstr "" "\t\"%s\" (%s) 호스트에 서버가 가동 중인지,\n" "\t%s 포트로 TCP/IP 연결이 가능한지 살펴보십시오.\n" -#: fe-connect.c:1632 +#: fe-connect.c:1725 #, c-format msgid "" "could not connect to server: %s\n" @@ -287,101 +343,101 @@ msgstr "" "\t\"%s\" 호스트에 서버가 가동 중인지,\n" "\t%s 포트로 TCP/IP 연결이 가능한지 살펴보십시오.\n" -#: fe-connect.c:1702 +#: fe-connect.c:1795 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "잘못된 정수값: \"%s\", 해당 연결 옵션: \"%s\"\n" -#: fe-connect.c:1732 fe-connect.c:1766 fe-connect.c:1801 fe-connect.c:1888 -#: fe-connect.c:2535 +#: fe-connect.c:1825 fe-connect.c:1859 fe-connect.c:1894 fe-connect.c:1981 +#: fe-connect.c:2623 #, c-format msgid "setsockopt(%s) failed: %s\n" msgstr "setsockopt(%s) 실패: %s\n" -#: fe-connect.c:1854 +#: fe-connect.c:1947 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) 실패: %ui\n" -#: fe-connect.c:2226 +#: fe-connect.c:2313 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "잘못된 연결 상태, 메모리 손상일 가능성이 큼\n" -#: fe-connect.c:2294 +#: fe-connect.c:2379 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "잘못된 포트 번호: \"%s\"\n" -#: fe-connect.c:2310 +#: fe-connect.c:2395 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "\"%s\" 호스트 이름을 전송할 수 없습니다: 대상 주소: %s\n" -#: fe-connect.c:2323 +#: fe-connect.c:2408 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "\"%s\" 네트워크 주소를 해석할 수 없음: %s\n" -#: fe-connect.c:2336 +#: fe-connect.c:2421 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "\"%s\" 유닉스 도메인 소켓 경로가 너무 깁니다 (최대 %d 바이트)\n" -#: fe-connect.c:2351 +#: fe-connect.c:2436 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "\"%s\" 유닉스 도메인 소켓 경로를 전송할 수 없습니다: 대상 주소: %s\n" -#: fe-connect.c:2472 +#: fe-connect.c:2560 #, c-format msgid "could not create socket: %s\n" msgstr "소켓을 만들 수 없음: %s\n" -#: fe-connect.c:2494 +#: fe-connect.c:2582 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "소켓을 nonblocking 모드로 지정할 수 없음: %s\n" -#: fe-connect.c:2504 +#: fe-connect.c:2592 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "소켓을 close-on-exec 모드로 지정할 수 없음: %s\n" -#: fe-connect.c:2522 +#: fe-connect.c:2610 msgid "keepalives parameter must be an integer\n" msgstr "keepalives 매개변수값은 정수여야 합니다.\n" -#: fe-connect.c:2662 +#: fe-connect.c:2750 #, c-format msgid "could not get socket error status: %s\n" msgstr "소켓 오류 상태를 구할 수 없음: %s\n" -#: fe-connect.c:2690 +#: fe-connect.c:2778 #, c-format msgid "could not get client address from socket: %s\n" msgstr "소켓에서 클라이언트 주소를 구할 수 없음: %s\n" -#: fe-connect.c:2732 +#: fe-connect.c:2820 msgid "requirepeer parameter is not supported on this platform\n" msgstr "requirepeer 매개변수는 이 운영체제에서 지원하지 않음\n" -#: fe-connect.c:2735 +#: fe-connect.c:2823 #, c-format msgid "could not get peer credentials: %s\n" msgstr "신뢰성 피어를 얻을 수 없습니다: %s\n" -#: fe-connect.c:2758 +#: fe-connect.c:2847 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "" "\"%s\" 이름으로 requirepeer를 지정했지만, 실재 사용자 이름은 \"%s\" 입니다\n" -#: fe-connect.c:2793 +#: fe-connect.c:2887 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "GSSAPI 교섭 패킷을 보낼 수 없음: %s\n" -#: fe-connect.c:2805 +#: fe-connect.c:2899 msgid "" "GSSAPI encryption required but was impossible (possibly no credential cache, " "no server support, or using a local socket)\n" @@ -389,160 +445,160 @@ msgstr "" "GSSAPI 암호화가 필요하지만 사용할 수 없음 (자격 증명 캐시가 없거나, 서버가 지" "원하지 않거나, 로컬 소켓을 사용하고 있는 듯합니다.)\n" -#: fe-connect.c:2832 +#: fe-connect.c:2926 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "SSL 교섭 패킷을 보낼 수 없음: %s\n" -#: fe-connect.c:2871 +#: fe-connect.c:2965 #, c-format msgid "could not send startup packet: %s\n" msgstr "시작 패킷을 보낼 수 없음: %s\n" -#: fe-connect.c:2941 +#: fe-connect.c:3035 msgid "server does not support SSL, but SSL was required\n" msgstr "서버가 SSL 기능을 지원하지 않는데, SSL 기능을 요구했음\n" -#: fe-connect.c:2967 +#: fe-connect.c:3061 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "SSL 교섭에 대한 잘못된 응답을 감지했음: %c\n" -#: fe-connect.c:3057 +#: fe-connect.c:3151 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "서버가 GSSAPI 암호화 기능을 지원하지 않는데, 이것이 필요함\n" -#: fe-connect.c:3068 +#: fe-connect.c:3162 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "GSSAPI 교섭에 대한 잘못된 응답을 감지했음: %c\n" -#: fe-connect.c:3136 fe-connect.c:3169 +#: fe-connect.c:3229 fe-connect.c:3260 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "서버가 인증을 요구했지만, %c 받았음\n" -#: fe-connect.c:3416 +#: fe-connect.c:3502 msgid "unexpected message from server during startup\n" msgstr "시작하는 동안 서버로부터 기대되지 않는 메시지\n" -#: fe-connect.c:3643 +#: fe-connect.c:3707 #, c-format msgid "could not make a writable connection to server \"%s:%s\"\n" msgstr "\"%s:%s\" 서버에 쓰기 가능한 연결을 맺을 수 없음\n" -#: fe-connect.c:3689 +#: fe-connect.c:3753 #, c-format msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" msgstr "\"%s:%s\" 서버에서 \"SHOW transaction_read_only\" 검사가 실패함\n" -#: fe-connect.c:3704 +#: fe-connect.c:3768 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "잘못된 연결 상태 %d, 메모리 손상일 가능성이 큼\n" -#: fe-connect.c:4142 fe-connect.c:4202 +#: fe-connect.c:4204 fe-connect.c:4264 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEVT_CONNRESET 이벤트 동안 PGEventProc \"%s\"이(가) 실패함\n" -#: fe-connect.c:4549 +#: fe-connect.c:4611 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "잘못된 LDAP URL \"%s\": 스키마는 ldap:// 여야함\n" -#: fe-connect.c:4564 +#: fe-connect.c:4626 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "잘못된 LDAP URL \"%s\": 식별자 이름이 빠졌음\n" -#: fe-connect.c:4575 fe-connect.c:4628 +#: fe-connect.c:4638 fe-connect.c:4693 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "잘못된 LDAP URL \"%s\": 단 하나의 속성만 가져야함\n" -#: fe-connect.c:4585 fe-connect.c:4642 +#: fe-connect.c:4649 fe-connect.c:4708 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "잘못된 LDAP URL \"%s\": 검색범위(base/one/sub)를 지정해야함\n" -#: fe-connect.c:4596 +#: fe-connect.c:4660 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "잘못된 LDAP URL \"%s\": 필터 없음\n" -#: fe-connect.c:4617 +#: fe-connect.c:4681 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "잘못된 LDAP URL \"%s\": 포트번호가 잘못됨\n" -#: fe-connect.c:4651 +#: fe-connect.c:4717 msgid "could not create LDAP structure\n" msgstr "LDAP 구조를 만들 수 없음\n" -#: fe-connect.c:4727 +#: fe-connect.c:4793 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "LDAP 서버를 찾을 수 없음: %s\n" -#: fe-connect.c:4738 +#: fe-connect.c:4804 msgid "more than one entry found on LDAP lookup\n" msgstr "LDAP 검색에서 하나 이상의 엔트리가 발견되었음\n" -#: fe-connect.c:4739 fe-connect.c:4751 +#: fe-connect.c:4805 fe-connect.c:4817 msgid "no entry found on LDAP lookup\n" msgstr "LDAP 검색에서 해당 항목 없음\n" -#: fe-connect.c:4762 fe-connect.c:4775 +#: fe-connect.c:4828 fe-connect.c:4841 msgid "attribute has no values on LDAP lookup\n" msgstr "LDAP 검색에서 속성의 값이 없음\n" -#: fe-connect.c:4827 fe-connect.c:4846 fe-connect.c:5379 +#: fe-connect.c:4893 fe-connect.c:4912 fe-connect.c:5444 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "연결문자열에서 \"%s\" 다음에 \"=\" 문자 빠졌음\n" -#: fe-connect.c:4919 fe-connect.c:5564 fe-connect.c:6338 +#: fe-connect.c:4985 fe-connect.c:5629 fe-connect.c:6403 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "잘못된 연결 옵션 \"%s\"\n" -#: fe-connect.c:4935 fe-connect.c:5428 +#: fe-connect.c:5001 fe-connect.c:5493 msgid "unterminated quoted string in connection info string\n" msgstr "연결문자열에서 완성되지 못한 따옴표문자열이 있음\n" -#: fe-connect.c:5018 +#: fe-connect.c:5084 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "\"%s\" 서비스 정의를 찾을 수 없음\n" -#: fe-connect.c:5041 +#: fe-connect.c:5107 #, c-format msgid "service file \"%s\" not found\n" msgstr "\"%s\" 서비스 파일을 찾을 수 없음\n" -#: fe-connect.c:5056 +#: fe-connect.c:5122 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "%d번째 줄이 \"%s\" 서비스 파일에서 너무 깁니다\n" -#: fe-connect.c:5129 fe-connect.c:5173 +#: fe-connect.c:5194 fe-connect.c:5238 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "\"%s\" 서비스 파일의 %d번째 줄에 구문 오류 있음\n" -#: fe-connect.c:5140 +#: fe-connect.c:5205 #, c-format msgid "" "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "\"%s\" 서비스 파일의 %d번째 줄에 설정을 지원하지 않음\n" -#: fe-connect.c:5860 +#: fe-connect.c:5925 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "URI 구문 분석을 할 수 없음: \"%s\"\n" -#: fe-connect.c:5937 +#: fe-connect.c:6002 #, c-format msgid "" "end of string reached when looking for matching \"]\" in IPv6 host address " @@ -550,12 +606,12 @@ msgid "" msgstr "" "URI의 IPv6 호스트 주소에서 \"]\" 매칭 검색을 실패했습니다, 해당 URI: \"%s\"\n" -#: fe-connect.c:5944 +#: fe-connect.c:6009 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "IPv6 호스트 주소가 없습니다, 해당 URI: \"%s\"\n" -#: fe-connect.c:5959 +#: fe-connect.c:6024 #, c-format msgid "" "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): " @@ -564,41 +620,41 @@ msgstr "" "잘못된 \"%c\" 문자가 URI 문자열 가운데 %d 번째 있습니다(\":\" 또는 \"/\" 문자" "가 있어야 함): \"%s\"\n" -#: fe-connect.c:6088 +#: fe-connect.c:6153 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "키/밸류 구분자 \"=\" 문자가 필요함, 해당 URI 쿼리 매개변수: \"%s\"\n" -#: fe-connect.c:6108 +#: fe-connect.c:6173 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "키/밸류 구분자 \"=\" 문자가 필요함, 해당 URI 쿼리 매개변수: \"%s\"\n" -#: fe-connect.c:6159 +#: fe-connect.c:6224 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "잘못된 URL 쿼리 매개변수값: \"%s\"\n" -#: fe-connect.c:6233 +#: fe-connect.c:6298 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "잘못된 퍼센트 인코드 토큰: \"%s\"\n" -#: fe-connect.c:6243 +#: fe-connect.c:6308 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "퍼센트 인코드 값에 %%00 숨김 값이 있음: \"%s\"\n" -#: fe-connect.c:6606 +#: fe-connect.c:6671 msgid "connection pointer is NULL\n" msgstr "연결 포인터가 NULL\n" -#: fe-connect.c:6904 +#: fe-connect.c:6967 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "경고: \"%s\" 패스워드 파일이 plain 파일이 아님\n" -#: fe-connect.c:6913 +#: fe-connect.c:6976 #, c-format msgid "" "WARNING: password file \"%s\" has group or world access; permissions should " @@ -607,130 +663,130 @@ msgstr "" "경고: 패스워드 파일 \"%s\"에 그룹 또는 범용 액세스 권한이 있습니다. 권한은 " "u=rw(0600) 이하여야 합니다.\n" -#: fe-connect.c:7007 +#: fe-connect.c:7084 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "\"%s\" 파일에서 암호를 찾을 수 없음\n" -#: fe-exec.c:445 fe-exec.c:2822 +#: fe-exec.c:444 fe-exec.c:2821 #, c-format msgid "row number %d is out of range 0..%d" msgstr "%d 번째 행(row)은 0..%d 범위를 벗어났음" -#: fe-exec.c:506 fe-protocol2.c:502 fe-protocol2.c:537 fe-protocol2.c:1056 -#: fe-protocol3.c:208 fe-protocol3.c:235 fe-protocol3.c:252 fe-protocol3.c:332 -#: fe-protocol3.c:727 fe-protocol3.c:958 +#: fe-exec.c:505 fe-protocol2.c:497 fe-protocol2.c:532 fe-protocol2.c:1050 +#: fe-protocol3.c:206 fe-protocol3.c:233 fe-protocol3.c:250 fe-protocol3.c:330 +#: fe-protocol3.c:723 fe-protocol3.c:954 msgid "out of memory" msgstr "메모리 부족" -#: fe-exec.c:507 fe-protocol2.c:1402 fe-protocol3.c:1911 +#: fe-exec.c:506 fe-protocol2.c:1396 fe-protocol3.c:1907 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:816 +#: fe-exec.c:815 msgid "write to server failed\n" msgstr "서버에 쓰기 실패\n" -#: fe-exec.c:897 +#: fe-exec.c:896 msgid "NOTICE" msgstr "알림" -#: fe-exec.c:955 +#: fe-exec.c:954 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresult 함수는 INT_MAX 튜플보다 많은 경우를 지원하지 않음" -#: fe-exec.c:967 +#: fe-exec.c:966 msgid "size_t overflow" msgstr "size_t 초과" -#: fe-exec.c:1244 fe-exec.c:1302 fe-exec.c:1348 +#: fe-exec.c:1243 fe-exec.c:1301 fe-exec.c:1347 msgid "command string is a null pointer\n" msgstr "명령 문자열이 null 포인터\n" -#: fe-exec.c:1308 fe-exec.c:1354 fe-exec.c:1449 +#: fe-exec.c:1307 fe-exec.c:1353 fe-exec.c:1448 msgid "number of parameters must be between 0 and 65535\n" msgstr "매개변수값으로 숫자는 0에서 65535까지만 쓸 수 있음\n" -#: fe-exec.c:1342 fe-exec.c:1443 +#: fe-exec.c:1341 fe-exec.c:1442 msgid "statement name is a null pointer\n" msgstr "실행 구문 이름이 null 포인트(값이 없음)입니다\n" -#: fe-exec.c:1362 fe-exec.c:1525 fe-exec.c:2234 fe-exec.c:2436 +#: fe-exec.c:1361 fe-exec.c:1524 fe-exec.c:2233 fe-exec.c:2435 msgid "function requires at least protocol version 3.0\n" msgstr "함수는 적어도 버전 3의 프로토콜을 요구하고 있습니다\n" -#: fe-exec.c:1480 +#: fe-exec.c:1479 msgid "no connection to the server\n" msgstr "서버에 대한 연결이 없음\n" -#: fe-exec.c:1487 +#: fe-exec.c:1486 msgid "another command is already in progress\n" msgstr "처리 중에 이미 다른 명령이 존재함\n" -#: fe-exec.c:1601 +#: fe-exec.c:1600 msgid "length must be given for binary parameter\n" msgstr "바이너리 자료 매개 변수를 사용할 때는 그 길이를 지정해야 함\n" -#: fe-exec.c:1864 +#: fe-exec.c:1863 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "기대되지 않은 동기화상태: %d\n" -#: fe-exec.c:1884 +#: fe-exec.c:1883 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEVT_RESULTCREATE 이벤트 동안 PGEventProc \"%s\" 실패함\n" -#: fe-exec.c:2044 +#: fe-exec.c:2043 msgid "COPY terminated by new PQexec" msgstr "새 PQexec 호출로 COPY 작업이 중지 되었습니다" -#: fe-exec.c:2052 +#: fe-exec.c:2051 msgid "COPY IN state must be terminated first\n" msgstr "COPY IN 상태가 먼저 끝나야함\n" -#: fe-exec.c:2072 +#: fe-exec.c:2071 msgid "COPY OUT state must be terminated first\n" msgstr "COPY OUT 상태가 먼저 끝나야함\n" -#: fe-exec.c:2080 +#: fe-exec.c:2079 msgid "PQexec not allowed during COPY BOTH\n" msgstr "COPY BOTH 작업 중에는 PQexec 사용할 수 없음\n" -#: fe-exec.c:2326 fe-exec.c:2393 fe-exec.c:2483 fe-protocol2.c:1359 -#: fe-protocol3.c:1842 +#: fe-exec.c:2325 fe-exec.c:2392 fe-exec.c:2482 fe-protocol2.c:1353 +#: fe-protocol3.c:1838 msgid "no COPY in progress\n" msgstr "처리 가운데 COPY가 없음\n" -#: fe-exec.c:2673 +#: fe-exec.c:2672 msgid "connection in wrong state\n" msgstr "잘못된 상태의 연결\n" -#: fe-exec.c:2704 +#: fe-exec.c:2703 msgid "invalid ExecStatusType code" msgstr "잘못된 ExecStatusType 코드" -#: fe-exec.c:2731 +#: fe-exec.c:2730 msgid "PGresult is not an error result\n" msgstr "PGresult가 오류 결과가 아님\n" -#: fe-exec.c:2806 fe-exec.c:2829 +#: fe-exec.c:2805 fe-exec.c:2828 #, c-format msgid "column number %d is out of range 0..%d" msgstr "%d 번째 열은 0..%d 범위를 벗어났음" -#: fe-exec.c:2844 +#: fe-exec.c:2843 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "%d개의 매개 변수는 0..%d 범위를 벗어났음" -#: fe-exec.c:3154 +#: fe-exec.c:3153 #, c-format msgid "could not interpret result from server: %s" msgstr "서버로부터 결과처리를 중지 시킬 수 없음: %s" -#: fe-exec.c:3393 fe-exec.c:3477 +#: fe-exec.c:3392 fe-exec.c:3476 msgid "incomplete multibyte character\n" msgstr "완성되지 않은 멀티바이트 문자\n" @@ -821,22 +877,22 @@ msgstr "loread 함수의 OID 조사를 할 수 없음\n" msgid "cannot determine OID of function lowrite\n" msgstr "lowrite 함수의 OID 조사를 할 수 없음\n" -#: fe-misc.c:290 +#: fe-misc.c:289 #, c-format msgid "integer of size %lu not supported by pqGetInt" msgstr "%lu 정수형 크기는 pqGetInt 함수에서 지원하지 않음" -#: fe-misc.c:326 +#: fe-misc.c:325 #, c-format msgid "integer of size %lu not supported by pqPutInt" msgstr "%lu 정수형 크기는 pqPutInt 함수에서 지원하지 않음" -#: fe-misc.c:637 fe-misc.c:859 +#: fe-misc.c:636 fe-misc.c:869 msgid "connection not open\n" msgstr "연결 열기 실패\n" -#: fe-misc.c:807 fe-secure-openssl.c:206 fe-secure-openssl.c:314 -#: fe-secure.c:268 fe-secure.c:385 +#: fe-misc.c:805 fe-secure-openssl.c:209 fe-secure-openssl.c:316 +#: fe-secure.c:267 fe-secure.c:383 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -846,40 +902,40 @@ msgstr "" "\t이런 처리는 클라이언트의 요구를 처리하는 동안이나\n" "\t처리하기 전에 서버가 갑자기 종료되었음을 의미함\n" -#: fe-misc.c:1046 +#: fe-misc.c:1063 msgid "timeout expired\n" msgstr "시간 초과\n" -#: fe-misc.c:1091 +#: fe-misc.c:1108 msgid "invalid socket\n" msgstr "잘못된 소켓\n" -#: fe-misc.c:1114 +#: fe-misc.c:1131 #, c-format msgid "select() failed: %s\n" msgstr "select() 실패: %s\n" -#: fe-protocol2.c:90 +#: fe-protocol2.c:87 #, c-format msgid "invalid setenv state %c, probably indicative of memory corruption\n" msgstr "잘못된 환경변수 상태 %c, 메모리 손상일 가능성이 큼\n" -#: fe-protocol2.c:389 +#: fe-protocol2.c:384 #, c-format msgid "invalid state %c, probably indicative of memory corruption\n" msgstr "잘못된 상태 %c, 메모리 손상일 가능성이 큼\n" -#: fe-protocol2.c:478 fe-protocol3.c:185 +#: fe-protocol2.c:473 fe-protocol3.c:183 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "휴지(idle)동안 서버로 부터 0x%02x 형태 메시지를 받았음" -#: fe-protocol2.c:528 +#: fe-protocol2.c:523 #, c-format msgid "unexpected character %c following empty query response (\"I\" message)" msgstr "비어있는 쿼리 응답(\"I\" 메시지)에 뒤이어 %c의 잘못된 문자가 있음" -#: fe-protocol2.c:594 +#: fe-protocol2.c:589 #, c-format msgid "" "server sent data (\"D\" message) without prior row description (\"T\" " @@ -887,7 +943,7 @@ msgid "" msgstr "" "서버에서 먼저 행(row) 설명(\"T\" 메시지) 없이 자료(\"D\" 메시지)를 보냈음" -#: fe-protocol2.c:612 +#: fe-protocol2.c:607 #, c-format msgid "" "server sent binary data (\"B\" message) without prior row description (\"T\" " @@ -896,141 +952,141 @@ msgstr "" "서버에서 먼저 행(row) 설명(\"T\" 메시지) 없이 바이너리 자료(\"B\" 메시지)를 " "보냈음" -#: fe-protocol2.c:632 fe-protocol3.c:411 +#: fe-protocol2.c:626 fe-protocol3.c:408 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "서버로부터 예상치 못한 응답을 받았음; \"%c\" 문자를 첫문자로 받았음\n" -#: fe-protocol2.c:761 fe-protocol2.c:936 fe-protocol3.c:626 fe-protocol3.c:853 +#: fe-protocol2.c:755 fe-protocol2.c:930 fe-protocol3.c:622 fe-protocol3.c:849 msgid "out of memory for query result" msgstr "쿼리 결과 처리를 위한 메모리 부족" -#: fe-protocol2.c:1414 +#: fe-protocol2.c:1408 #, c-format msgid "lost synchronization with server, resetting connection" msgstr "서버와의 동기화가 끊김, 연결을 재 시도함" -#: fe-protocol2.c:1536 fe-protocol2.c:1568 fe-protocol3.c:2099 +#: fe-protocol2.c:1530 fe-protocol2.c:1562 fe-protocol3.c:2095 #, c-format msgid "protocol error: id=0x%x\n" msgstr "프로토콜 오류: id=0x%x\n" -#: fe-protocol3.c:367 +#: fe-protocol3.c:365 msgid "" "server sent data (\"D\" message) without prior row description (\"T\" " "message)\n" msgstr "" "서버에서 먼저 행(row) 설명(\"T\" 메시지) 없이 자료(\"D\" 메시지)를 보냈음\n" -#: fe-protocol3.c:432 +#: fe-protocol3.c:429 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "메시지 내용이 \"%c\" 메시지 형태의 길이를 허락하지 않음\n" -#: fe-protocol3.c:453 +#: fe-protocol3.c:449 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "서버와의 동기화가 끊김: \"%c\" 형태 길이 %d 메시지 받음\n" -#: fe-protocol3.c:504 fe-protocol3.c:544 +#: fe-protocol3.c:500 fe-protocol3.c:540 msgid "insufficient data in \"T\" message" msgstr "\"T\" 메시지 안에 부족자 데이터" -#: fe-protocol3.c:577 +#: fe-protocol3.c:573 msgid "extraneous data in \"T\" message" msgstr "\"T\" 메시지 안에 잘못된 데이터" -#: fe-protocol3.c:690 +#: fe-protocol3.c:686 msgid "extraneous data in \"t\" message" msgstr "\"t\" 메시지 안에 잘못된 데이터" -#: fe-protocol3.c:761 fe-protocol3.c:793 fe-protocol3.c:811 +#: fe-protocol3.c:757 fe-protocol3.c:789 fe-protocol3.c:807 msgid "insufficient data in \"D\" message" msgstr "\"D\" 메시지 안에 불충분한 데이터" -#: fe-protocol3.c:767 +#: fe-protocol3.c:763 msgid "unexpected field count in \"D\" message" msgstr "\"D\" 메시지 안에 예상치 못한 필드 수" -#: fe-protocol3.c:820 +#: fe-protocol3.c:816 msgid "extraneous data in \"D\" message" msgstr "\"D\" 메시지 안에 잘못된 데이터" -#: fe-protocol3.c:1012 +#: fe-protocol3.c:1008 msgid "no error message available\n" msgstr "보여줄 오류 메시지가 없음\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1060 fe-protocol3.c:1079 +#: fe-protocol3.c:1056 fe-protocol3.c:1075 #, c-format msgid " at character %s" msgstr " 위치: %s" -#: fe-protocol3.c:1092 +#: fe-protocol3.c:1088 #, c-format msgid "DETAIL: %s\n" msgstr "상세정보: %s\n" -#: fe-protocol3.c:1095 +#: fe-protocol3.c:1091 #, c-format msgid "HINT: %s\n" msgstr "힌트: %s\n" -#: fe-protocol3.c:1098 +#: fe-protocol3.c:1094 #, c-format msgid "QUERY: %s\n" msgstr "쿼리: %s\n" -#: fe-protocol3.c:1105 +#: fe-protocol3.c:1101 #, c-format msgid "CONTEXT: %s\n" msgstr "구문: %s\n" -#: fe-protocol3.c:1114 +#: fe-protocol3.c:1110 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "스키마 이름: %s\n" -#: fe-protocol3.c:1118 +#: fe-protocol3.c:1114 #, c-format msgid "TABLE NAME: %s\n" msgstr "테이블 이름: %s\n" -#: fe-protocol3.c:1122 +#: fe-protocol3.c:1118 #, c-format msgid "COLUMN NAME: %s\n" msgstr "칼럼 이름: %s\n" -#: fe-protocol3.c:1126 +#: fe-protocol3.c:1122 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "자료형 이름: %s\n" -#: fe-protocol3.c:1130 +#: fe-protocol3.c:1126 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "제약조건 이름: %s\n" -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1138 msgid "LOCATION: " msgstr "위치: " -#: fe-protocol3.c:1144 +#: fe-protocol3.c:1140 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1146 +#: fe-protocol3.c:1142 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1341 +#: fe-protocol3.c:1337 #, c-format msgid "LINE %d: " msgstr "줄 %d: " -#: fe-protocol3.c:1736 +#: fe-protocol3.c:1732 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: text COPY OUT 작업을 할 수 없음\n" @@ -1065,68 +1121,68 @@ msgstr "GSSAPI 송출 메시지는 기밀성을 사용하지 말아야함\n" msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" msgstr "클라이언트의 GSSAPI 패킷이 너무 큼 (%zu > %zu)\n" -#: fe-secure-gssapi.c:350 fe-secure-gssapi.c:590 +#: fe-secure-gssapi.c:354 fe-secure-gssapi.c:596 #, c-format msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" msgstr "서버의 GSSAPI 패킷이 너무 큼 (%zu > %zu)\n" -#: fe-secure-gssapi.c:389 +#: fe-secure-gssapi.c:393 msgid "GSSAPI unwrap error" msgstr "GSSAPI 벗기기 오류" -#: fe-secure-gssapi.c:399 +#: fe-secure-gssapi.c:403 msgid "incoming GSSAPI message did not use confidentiality\n" msgstr "GSSAPI 수신 메시지는 기밀성을 사용하지 말아야 함\n" -#: fe-secure-gssapi.c:636 +#: fe-secure-gssapi.c:642 msgid "could not initiate GSSAPI security context" msgstr "GSSAPI 보안 context 초기화 실패" -#: fe-secure-gssapi.c:666 +#: fe-secure-gssapi.c:673 msgid "GSSAPI size check error" msgstr "GSSAPI 크기 검사 오류" -#: fe-secure-gssapi.c:677 +#: fe-secure-gssapi.c:684 msgid "GSSAPI context establishment error" msgstr "GSSAPI context 설정 오류" -#: fe-secure-openssl.c:211 fe-secure-openssl.c:319 fe-secure-openssl.c:1219 +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1291 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "SSL SYSCALL 오류: %s\n" -#: fe-secure-openssl.c:218 fe-secure-openssl.c:326 fe-secure-openssl.c:1223 +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1295 msgid "SSL SYSCALL error: EOF detected\n" msgstr "SSL SYSCALL 오류: EOF 감지됨\n" -#: fe-secure-openssl.c:229 fe-secure-openssl.c:337 fe-secure-openssl.c:1232 +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1304 #, c-format msgid "SSL error: %s\n" msgstr "SSL 오류: %s\n" -#: fe-secure-openssl.c:244 fe-secure-openssl.c:352 +#: fe-secure-openssl.c:247 fe-secure-openssl.c:354 msgid "SSL connection has been closed unexpectedly\n" msgstr "SSL 연결이 예상치 못하게 끊김\n" -#: fe-secure-openssl.c:250 fe-secure-openssl.c:358 fe-secure-openssl.c:1241 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1354 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "알 수 없는 SSL 오류 코드: %d\n" -#: fe-secure-openssl.c:398 +#: fe-secure-openssl.c:400 msgid "could not determine server certificate signature algorithm\n" msgstr "서버 인증서 서명 알고리즘을 알 수 없음\n" -#: fe-secure-openssl.c:419 +#: fe-secure-openssl.c:421 #, c-format msgid "could not find digest for NID %s\n" msgstr "%s NID용 다이제스트를 찾을 수 없음\n" -#: fe-secure-openssl.c:429 +#: fe-secure-openssl.c:431 msgid "could not generate peer certificate hash\n" msgstr "피어 인증 해시 값을 만들 수 없음\n" -#: fe-secure-openssl.c:486 +#: fe-secure-openssl.c:488 msgid "SSL certificate's name entry is missing\n" msgstr "SSL 인증서의 이름 항목이 잘못됨\n" @@ -1135,17 +1191,32 @@ msgstr "SSL 인증서의 이름 항목이 잘못됨\n" msgid "could not create SSL context: %s\n" msgstr "SSL context를 만들 수 없음: %s\n" -#: fe-secure-openssl.c:852 +#: fe-secure-openssl.c:854 #, c-format -msgid "could not read root certificate file \"%s\": %s\n" -msgstr "\"%s\" 루트 인증서 파일을 읽을 수 없음: %s\n" +msgid "invalid value \"%s\" for minimum SSL protocol version\n" +msgstr "잘못된 값: \"%s\", 대상: 최소 SSL 프로토콜 버전\n" + +#: fe-secure-openssl.c:865 +#, c-format +msgid "could not set minimum SSL protocol version: %s\n" +msgstr "최소 SSL 프로토콜 버전을 지정할 수 없음: %s\n" + +#: fe-secure-openssl.c:883 +#, c-format +msgid "invalid value \"%s\" for maximum SSL protocol version\n" +msgstr "잘못된 값: \"%s\", 대상: 최대 SSL 프로토콜 버전\n" -#: fe-secure-openssl.c:880 +#: fe-secure-openssl.c:894 #, c-format -msgid "SSL library does not support CRL certificates (file \"%s\")\n" -msgstr "SSL 라이브러리가 CRL 인증서 (\"%s\" 파일)를 지원하지 않음\n" +msgid "could not set maximum SSL protocol version: %s\n" +msgstr "최대 SSL 프로토콜 버전을 지정할 수 없음: %s\n" -#: fe-secure-openssl.c:908 +#: fe-secure-openssl.c:930 +#, c-format +msgid "could not read root certificate file \"%s\": %s\n" +msgstr "\"%s\" 루트 인증서 파일을 읽을 수 없음: %s\n" + +#: fe-secure-openssl.c:974 msgid "" "could not get home directory to locate root certificate file\n" "Either provide the file or change sslmode to disable server certificate " @@ -1155,7 +1226,7 @@ msgstr "" "해당 파일을 제공하거나 서버 인증서 확인을 사용하지 않도록 sslmode를 변경하십" "시오.\n" -#: fe-secure-openssl.c:912 +#: fe-secure-openssl.c:978 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -1166,47 +1237,47 @@ msgstr "" "해당 파일을 제공하거나 서버 인증서 확인을 사용하지 않도록 sslmode를 변경하십" "시오.\n" -#: fe-secure-openssl.c:943 +#: fe-secure-openssl.c:1009 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "\"%s\" 인증서 파일을 열수 없음: %s\n" -#: fe-secure-openssl.c:962 +#: fe-secure-openssl.c:1028 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "\"%s\" 인증서 파일을 읽을 수 없음: %s\n" -#: fe-secure-openssl.c:987 +#: fe-secure-openssl.c:1053 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "SSL 연결을 확립할 수 없음: %s\n" -#: fe-secure-openssl.c:1041 +#: fe-secure-openssl.c:1107 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "SSL 엔진 \"%s\"을(를) 로드할 수 없음: %s\n" -#: fe-secure-openssl.c:1053 +#: fe-secure-openssl.c:1119 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "SSL 엔진 \"%s\"을(를) 초기화할 수 없음: %s\n" -#: fe-secure-openssl.c:1069 +#: fe-secure-openssl.c:1135 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "개인 SSL 키 \"%s\"을(를) \"%s\" 엔진에서 읽을 수 없음: %s\n" -#: fe-secure-openssl.c:1083 +#: fe-secure-openssl.c:1149 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "개인 SSL 키 \"%s\"을(를) \"%s\" 엔진에서 읽을 수 없음: %s\n" -#: fe-secure-openssl.c:1120 +#: fe-secure-openssl.c:1186 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "인증서가 있지만, \"%s\" 개인키가 아닙니다.\n" -#: fe-secure-openssl.c:1128 +#: fe-secure-openssl.c:1194 #, c-format msgid "" "private key file \"%s\" has group or world access; permissions should be " @@ -1215,42 +1286,55 @@ msgstr "" "개인 키 파일 \"%s\"에 그룹 또는 범용 액세스 권한이 있습니다. 권한은 " "u=rw(0600) 이하여야 합니다.\n" -#: fe-secure-openssl.c:1139 +#: fe-secure-openssl.c:1219 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "\"%s\" 개인키 파일을 불러들일 수 없습니다: %s\n" -#: fe-secure-openssl.c:1153 +#: fe-secure-openssl.c:1237 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "인증서가 \"%s\" 개인키 파일과 맞지 않습니다: %s\n" -#: fe-secure-openssl.c:1262 +#: fe-secure-openssl.c:1337 +#, c-format +msgid "" +"This may indicate that the server does not support any SSL protocol version " +"between %s and %s.\n" +msgstr "" +"해당 서버는 SSL 프로토콜 버전 %s - %s 사이를 지원하지 않습니다.\n" + +#: fe-secure-openssl.c:1373 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "인증서를 구하질 못했습니다: %s\n" -#: fe-secure-openssl.c:1351 +#: fe-secure-openssl.c:1462 #, c-format msgid "no SSL error reported" msgstr "SSL 오류 없음이 보고됨" -#: fe-secure-openssl.c:1360 +#: fe-secure-openssl.c:1471 #, c-format msgid "SSL error code %lu" msgstr "SSL 오류 번호 %lu" -#: fe-secure.c:276 +#: fe-secure-openssl.c:1718 +#, c-format +msgid "WARNING: sslpassword truncated\n" +msgstr "경고: sslpassword 삭제됨\n" + +#: fe-secure.c:275 #, c-format msgid "could not receive data from server: %s\n" msgstr "서버로부터 데이터를 받지 못했음: %s\n" -#: fe-secure.c:392 +#: fe-secure.c:390 #, c-format msgid "could not send data to server: %s\n" msgstr "서버에 데이터를 보낼 수 없음: %s\n" -#: win32.c:317 +#: win32.c:314 #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "알 수 없는 소켓오류: 0x%08X/%d" diff --git a/src/interfaces/libpq/po/ru.po b/src/interfaces/libpq/po/ru.po index e16d24a89c4bd..ac21a953b58c6 100644 --- a/src/interfaces/libpq/po/ru.po +++ b/src/interfaces/libpq/po/ru.po @@ -4,13 +4,13 @@ # Serguei A. Mokhov , 2001-2004. # Oleg Bartunov , 2005. # Andrey Sudnik , 2010. -# Alexander Lakhin , 2012-2017, 2018, 2019. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: libpq (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-05 11:03+0300\n" -"PO-Revision-Date: 2019-09-23 09:30+0300\n" +"POT-Creation-Date: 2021-01-26 17:52+0300\n" +"PO-Revision-Date: 2020-09-07 15:43+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -20,141 +20,165 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: fe-auth-scram.c:183 +#: fe-auth-scram.c:212 msgid "malformed SCRAM message (empty message)\n" msgstr "неправильное сообщение SCRAM (пустое содержимое)\n" -#: fe-auth-scram.c:189 +#: fe-auth-scram.c:218 msgid "malformed SCRAM message (length mismatch)\n" msgstr "неправильное сообщение SCRAM (некорректная длина)\n" -#: fe-auth-scram.c:238 +#: fe-auth-scram.c:265 msgid "incorrect server signature\n" msgstr "некорректная сигнатура сервера\n" -#: fe-auth-scram.c:247 +#: fe-auth-scram.c:274 msgid "invalid SCRAM exchange state\n" msgstr "ошибочное состояние обмена SCRAM\n" -#: fe-auth-scram.c:270 +#: fe-auth-scram.c:296 #, c-format msgid "malformed SCRAM message (attribute \"%c\" expected)\n" msgstr "неправильное сообщение SCRAM (ожидался атрибут \"%c\")\n" -#: fe-auth-scram.c:279 +#: fe-auth-scram.c:305 #, c-format msgid "" "malformed SCRAM message (expected character \"=\" for attribute \"%c\")\n" msgstr "" "неправильное сообщение SCRAM (для атрибута \"%c\" ожидался символ \"=\")\n" -#: fe-auth-scram.c:320 +#: fe-auth-scram.c:346 msgid "could not generate nonce\n" msgstr "не удалось сгенерировать разовый код\n" -#: fe-auth-scram.c:328 fe-auth-scram.c:395 fe-auth-scram.c:517 -#: fe-auth-scram.c:537 fe-auth-scram.c:563 fe-auth-scram.c:577 -#: fe-auth-scram.c:626 fe-auth-scram.c:660 fe-auth.c:290 fe-auth.c:360 -#: fe-auth.c:395 fe-auth.c:581 fe-auth.c:740 fe-auth.c:1052 fe-auth.c:1200 -#: fe-connect.c:864 fe-connect.c:1326 fe-connect.c:1502 fe-connect.c:2112 -#: fe-connect.c:2135 fe-connect.c:2858 fe-connect.c:4536 fe-connect.c:4788 -#: fe-connect.c:4907 fe-connect.c:5161 fe-connect.c:5241 fe-connect.c:5340 -#: fe-connect.c:5596 fe-connect.c:5625 fe-connect.c:5697 fe-connect.c:5721 -#: fe-connect.c:5739 fe-connect.c:5840 fe-connect.c:5849 fe-connect.c:6205 -#: fe-connect.c:6355 fe-exec.c:2748 fe-exec.c:3495 fe-exec.c:3660 -#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1213 fe-protocol3.c:999 -#: fe-protocol3.c:1703 fe-secure-common.c:110 fe-secure-gssapi.c:498 -#: fe-secure-openssl.c:438 fe-secure-openssl.c:1025 +#: fe-auth-scram.c:356 fe-auth-scram.c:431 fe-auth-scram.c:579 +#: fe-auth-scram.c:600 fe-auth-scram.c:626 fe-auth-scram.c:641 +#: fe-auth-scram.c:691 fe-auth-scram.c:725 fe-auth.c:289 fe-auth.c:359 +#: fe-auth.c:394 fe-auth.c:611 fe-auth.c:770 fe-auth.c:1129 fe-auth.c:1277 +#: fe-connect.c:892 fe-connect.c:1419 fe-connect.c:1595 fe-connect.c:2200 +#: fe-connect.c:2223 fe-connect.c:2957 fe-connect.c:4605 fe-connect.c:4861 +#: fe-connect.c:4980 fe-connect.c:5233 fe-connect.c:5313 fe-connect.c:5412 +#: fe-connect.c:5668 fe-connect.c:5697 fe-connect.c:5769 fe-connect.c:5793 +#: fe-connect.c:5811 fe-connect.c:5912 fe-connect.c:5921 fe-connect.c:6277 +#: fe-connect.c:6427 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 +#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1207 fe-protocol3.c:995 +#: fe-protocol3.c:1699 fe-secure-common.c:110 fe-secure-gssapi.c:504 +#: fe-secure-openssl.c:440 fe-secure-openssl.c:1091 msgid "out of memory\n" msgstr "нехватка памяти\n" -#: fe-auth-scram.c:555 +#: fe-auth-scram.c:364 +msgid "could not encode nonce\n" +msgstr "не удалось оформить разовый код\n" + +#: fe-auth-scram.c:563 +msgid "could not encode client proof\n" +msgstr "не удалось закодировать подтверждение клиента\n" + +#: fe-auth-scram.c:618 msgid "invalid SCRAM response (nonce mismatch)\n" msgstr "неверный ответ SCRAM (несовпадение проверочного кода)\n" -#: fe-auth-scram.c:586 +#: fe-auth-scram.c:651 msgid "malformed SCRAM message (invalid salt)\n" msgstr "неправильное сообщение SCRAM (некорректная соль)\n" -#: fe-auth-scram.c:600 +#: fe-auth-scram.c:665 msgid "malformed SCRAM message (invalid iteration count)\n" msgstr "неправильное сообщение SCRAM (некорректное число итераций)\n" -#: fe-auth-scram.c:606 +#: fe-auth-scram.c:671 msgid "malformed SCRAM message (garbage at end of server-first-message)\n" msgstr "" "неправильное сообщение SCRAM (мусор в конце первого сообщения сервера)\n" -#: fe-auth-scram.c:637 +#: fe-auth-scram.c:702 #, c-format msgid "error received from server in SCRAM exchange: %s\n" msgstr "в ходе обмена SCRAM от сервера получена ошибка: %s\n" -#: fe-auth-scram.c:653 +#: fe-auth-scram.c:718 msgid "malformed SCRAM message (garbage at end of server-final-message)\n" msgstr "" "неправильное сообщение SCRAM (мусор в конце последнего сообщения сервера)\n" -#: fe-auth-scram.c:671 +#: fe-auth-scram.c:737 msgid "malformed SCRAM message (invalid server signature)\n" msgstr "неправильное сообщение SCRAM (неверная сигнатура сервера)\n" -#: fe-auth.c:77 +#: fe-auth.c:76 #, c-format msgid "out of memory allocating GSSAPI buffer (%d)\n" msgstr "недостаточно памяти для буфера GSSAPI (%d)\n" -#: fe-auth.c:132 +#: fe-auth.c:131 msgid "GSSAPI continuation error" msgstr "ошибка продолжения в GSSAPI" -#: fe-auth.c:159 fe-auth.c:389 fe-gssapi-common.c:98 fe-secure-common.c:98 +#: fe-auth.c:158 fe-auth.c:388 fe-gssapi-common.c:98 fe-secure-common.c:98 msgid "host name must be specified\n" msgstr "требуется указать имя сервера\n" -#: fe-auth.c:166 +#: fe-auth.c:165 msgid "duplicate GSS authentication request\n" msgstr "повторный запрос аутентификации GSS\n" -#: fe-auth.c:231 +#: fe-auth.c:230 #, c-format msgid "out of memory allocating SSPI buffer (%d)\n" msgstr "недостаточно памяти для буфера SSPI (%d)\n" -#: fe-auth.c:279 +#: fe-auth.c:278 msgid "SSPI continuation error" msgstr "ошибка продолжения в SSPI" -#: fe-auth.c:350 +#: fe-auth.c:349 msgid "duplicate SSPI authentication request\n" msgstr "повторный запрос аутентификации SSPI\n" -#: fe-auth.c:375 +#: fe-auth.c:374 msgid "could not acquire SSPI credentials" msgstr "не удалось получить удостоверение SSPI" #: fe-auth.c:429 +msgid "channel binding required, but SSL not in use\n" +msgstr "требуется привязка каналов, но SSL не используется\n" + +#: fe-auth.c:436 msgid "duplicate SASL authentication request\n" msgstr "повторный запрос аутентификации SASL\n" -#: fe-auth.c:487 +#: fe-auth.c:492 +msgid "channel binding is required, but client does not support it\n" +msgstr "требуется привязка каналов, но клиент её не поддерживает\n" + +#: fe-auth.c:509 msgid "" "server offered SCRAM-SHA-256-PLUS authentication over a non-SSL connection\n" msgstr "" "сервер предложил аутентификацию SCRAM-SHA-256-PLUS для соединения, не " "защищённого SSL\n" -#: fe-auth.c:499 +#: fe-auth.c:521 msgid "none of the server's SASL authentication mechanisms are supported\n" msgstr "" "ни один из серверных механизмов аутентификации SASL не поддерживается\n" -#: fe-auth.c:605 +#: fe-auth.c:529 +msgid "" +"channel binding is required, but server did not offer an authentication " +"method that supports channel binding\n" +msgstr "" +"требуется привязка каналов, но сервер не предложил поддерживающий её метод " +"аутентификации\n" + +#: fe-auth.c:635 #, c-format msgid "out of memory allocating SASL buffer (%d)\n" msgstr "недостаточно памяти для буфера SASL (%d)\n" -#: fe-auth.c:630 +#: fe-auth.c:660 msgid "" "AuthenticationSASLFinal received from server, but SASL authentication was " "not completed\n" @@ -162,106 +186,140 @@ msgstr "" "c сервера получено сообщение AuthenticationSASLFinal, но аутентификация SASL " "ещё не завершена\n" -#: fe-auth.c:707 +#: fe-auth.c:737 msgid "SCM_CRED authentication method not supported\n" msgstr "аутентификация SCM_CRED не поддерживается\n" -#: fe-auth.c:798 +#: fe-auth.c:836 +msgid "" +"channel binding required, but server authenticated client without channel " +"binding\n" +msgstr "" +"требуется привязка каналов, но сервер аутентифицировал клиента без привязки\n" + +#: fe-auth.c:842 +msgid "" +"channel binding required but not supported by server's authentication " +"request\n" +msgstr "" +"требуется привязка каналов, но она не поддерживается при том запросе " +"аутентификации, который передал сервер\n" + +#: fe-auth.c:875 msgid "Kerberos 4 authentication not supported\n" msgstr "аутентификация Kerberos 4 не поддерживается\n" -#: fe-auth.c:803 +#: fe-auth.c:880 msgid "Kerberos 5 authentication not supported\n" msgstr "аутентификация Kerberos 5 не поддерживается\n" -#: fe-auth.c:874 +#: fe-auth.c:951 msgid "GSSAPI authentication not supported\n" msgstr "аутентификация через GSSAPI не поддерживается\n" -#: fe-auth.c:906 +#: fe-auth.c:983 msgid "SSPI authentication not supported\n" msgstr "аутентификация через SSPI не поддерживается\n" -#: fe-auth.c:914 +#: fe-auth.c:991 msgid "Crypt authentication not supported\n" msgstr "аутентификация Crypt не поддерживается\n" -#: fe-auth.c:980 +#: fe-auth.c:1057 #, c-format msgid "authentication method %u not supported\n" msgstr "метод аутентификации %u не поддерживается\n" -#: fe-auth.c:1027 +#: fe-auth.c:1104 #, c-format msgid "user name lookup failure: error code %lu\n" msgstr "распознать имя пользователя не удалось (код ошибки: %lu)\n" -#: fe-auth.c:1037 fe-connect.c:2745 +#: fe-auth.c:1114 fe-connect.c:2834 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "найти локального пользователя по идентификатору (%d) не удалось: %s\n" -#: fe-auth.c:1042 fe-connect.c:2750 +#: fe-auth.c:1119 fe-connect.c:2839 #, c-format msgid "local user with ID %d does not exist\n" msgstr "локальный пользователь с ID %d не существует\n" -#: fe-auth.c:1144 +#: fe-auth.c:1221 msgid "unexpected shape of result set returned for SHOW\n" msgstr "неожиданная форма набора результатов, возвращённого для SHOW\n" -#: fe-auth.c:1153 +#: fe-auth.c:1230 msgid "password_encryption value too long\n" msgstr "слишком длинное значение password_encryption\n" -#: fe-auth.c:1193 +#: fe-auth.c:1270 #, c-format msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "нераспознанный алгоритм шифрования пароля \"%s\"\n" -#: fe-connect.c:1047 +#: fe-connect.c:1075 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "не удалось сопоставить имена узлов (%d) со значениями hostaddr (%d)\n" -#: fe-connect.c:1123 +#: fe-connect.c:1156 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "не удалось сопоставить номера портов (%d) с узлами (%d)\n" -#: fe-connect.c:1219 +#: fe-connect.c:1249 +#, c-format +msgid "invalid channel_binding value: \"%s\"\n" +msgstr "неверное значение channel_binding: \"%s\"\n" + +#: fe-connect.c:1275 #, c-format msgid "invalid sslmode value: \"%s\"\n" msgstr "неверное значение sslmode: \"%s\"\n" -#: fe-connect.c:1240 +#: fe-connect.c:1296 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "значение sslmode \"%s\" недопустимо для сборки без поддержки SSL\n" -#: fe-connect.c:1264 +#: fe-connect.c:1317 +#, c-format +msgid "invalid ssl_min_protocol_version value: \"%s\"\n" +msgstr "неверное значение ssl_min_protocol_version: \"%s\"\n" + +#: fe-connect.c:1325 +#, c-format +msgid "invalid ssl_max_protocol_version value: \"%s\"\n" +msgstr "неверное значение ssl_max_protocol_version: \"%s\"\n" + +#: fe-connect.c:1342 +msgid "invalid SSL protocol version range\n" +msgstr "неверный диапазон версий протокола SSL\n" + +#: fe-connect.c:1357 #, c-format msgid "invalid gssencmode value: \"%s\"\n" msgstr "неверное значение gssencmode: \"%s\"\n" -#: fe-connect.c:1273 +#: fe-connect.c:1366 #, c-format msgid "" "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" msgstr "" "значение gssencmode \"%s\" недопустимо для сборки без поддержки GSSAPI\n" -#: fe-connect.c:1308 +#: fe-connect.c:1401 #, c-format msgid "invalid target_session_attrs value: \"%s\"\n" msgstr "неверное значение target_session_attrs: \"%s\"\n" -#: fe-connect.c:1526 +#: fe-connect.c:1619 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "не удалось перевести сокет в режим TCP-передачи без задержки: %s\n" -#: fe-connect.c:1587 +#: fe-connect.c:1680 #, c-format msgid "" "could not connect to server: %s\n" @@ -272,7 +330,7 @@ msgstr "" "\tОн действительно работает локально и принимает\n" "\tсоединения через Unix-сокет \"%s\"?\n" -#: fe-connect.c:1624 +#: fe-connect.c:1717 #, c-format msgid "" "could not connect to server: %s\n" @@ -283,7 +341,7 @@ msgstr "" "\tОн действительно работает по адресу \"%s\" (%s)\n" "\t и принимает TCP-соединения (порт %s)?\n" -#: fe-connect.c:1632 +#: fe-connect.c:1725 #, c-format msgid "" "could not connect to server: %s\n" @@ -294,105 +352,105 @@ msgstr "" "\tОн действительно работает по адресу \"%s\"\n" "\t и принимает TCP-соединения (порт %s)?\n" -#: fe-connect.c:1702 +#: fe-connect.c:1795 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "" "неверное целочисленное значение \"%s\" для параметра соединения \"%s\"\n" -#: fe-connect.c:1732 fe-connect.c:1766 fe-connect.c:1801 fe-connect.c:1888 -#: fe-connect.c:2535 +#: fe-connect.c:1825 fe-connect.c:1859 fe-connect.c:1894 fe-connect.c:1981 +#: fe-connect.c:2623 #, c-format msgid "setsockopt(%s) failed: %s\n" msgstr "ошибка в setsockopt(%s): %s\n" -#: fe-connect.c:1854 +#: fe-connect.c:1947 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "ошибка в WSAIoctl(SIO_KEEPALIVE_VALS): %ui\n" -#: fe-connect.c:2226 +#: fe-connect.c:2313 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "неверное состояние соединения - возможно разрушение памяти\n" -#: fe-connect.c:2294 +#: fe-connect.c:2379 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "неверный номер порта: \"%s\"\n" -#: fe-connect.c:2310 +#: fe-connect.c:2395 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "преобразовать имя \"%s\" в адрес не удалось: %s\n" -#: fe-connect.c:2323 +#: fe-connect.c:2408 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "не удалось разобрать сетевой адрес \"%s\": %s\n" -#: fe-connect.c:2336 +#: fe-connect.c:2421 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "длина пути Unix-сокета \"%s\" превышает предел (%d байт)\n" -#: fe-connect.c:2351 +#: fe-connect.c:2436 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "преобразовать путь Unix-сокета \"%s\" в адрес не удалось: %s\n" -#: fe-connect.c:2472 +#: fe-connect.c:2560 #, c-format msgid "could not create socket: %s\n" msgstr "не удалось создать сокет: %s\n" -#: fe-connect.c:2494 +#: fe-connect.c:2582 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "не удалось перевести сокет в неблокирующий режим: %s\n" -#: fe-connect.c:2504 +#: fe-connect.c:2592 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "" "не удалось перевести сокет в режим закрытия при выполнении (close-on-exec): " "%s\n" -#: fe-connect.c:2522 +#: fe-connect.c:2610 msgid "keepalives parameter must be an integer\n" msgstr "параметр keepalives должен быть целым числом\n" -#: fe-connect.c:2662 +#: fe-connect.c:2750 #, c-format msgid "could not get socket error status: %s\n" msgstr "не удалось получить статус ошибки сокета: %s\n" -#: fe-connect.c:2690 +#: fe-connect.c:2778 #, c-format msgid "could not get client address from socket: %s\n" msgstr "не удалось получить адрес клиента из сокета: %s\n" -#: fe-connect.c:2732 +#: fe-connect.c:2820 msgid "requirepeer parameter is not supported on this platform\n" msgstr "параметр requirepeer не поддерживается в этой ОС\n" -#: fe-connect.c:2735 +#: fe-connect.c:2823 #, c-format msgid "could not get peer credentials: %s\n" msgstr "не удалось получить учётные данные сервера: %s\n" -#: fe-connect.c:2758 +#: fe-connect.c:2847 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "" "requirepeer допускает подключение только к \"%s\", но сервер работает под " "именем \"%s\"\n" -#: fe-connect.c:2793 +#: fe-connect.c:2887 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "не удалось отправить пакет согласования GSSAPI: %s\n" -#: fe-connect.c:2805 +#: fe-connect.c:2899 msgid "" "GSSAPI encryption required but was impossible (possibly no credential cache, " "no server support, or using a local socket)\n" @@ -401,152 +459,152 @@ msgstr "" "отсутствует кеш учётных данных, нет поддержки на сервере или используется " "локальный сокет)\n" -#: fe-connect.c:2832 +#: fe-connect.c:2931 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "не удалось отправить пакет согласования SSL: %s\n" -#: fe-connect.c:2871 +#: fe-connect.c:2970 #, c-format msgid "could not send startup packet: %s\n" msgstr "не удалось отправить стартовый пакет: %s\n" -#: fe-connect.c:2941 +#: fe-connect.c:3040 msgid "server does not support SSL, but SSL was required\n" msgstr "затребовано подключение через SSL, но сервер не поддерживает SSL\n" -#: fe-connect.c:2967 +#: fe-connect.c:3067 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "получен неверный ответ при согласовании SSL: %c\n" -#: fe-connect.c:3057 +#: fe-connect.c:3156 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "затребовано шифрование GSSAPI, но сервер его не поддерживает\n" -#: fe-connect.c:3068 +#: fe-connect.c:3168 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "получен неверный ответ при согласовании GSSAPI: %c\n" -#: fe-connect.c:3136 fe-connect.c:3169 +#: fe-connect.c:3234 fe-connect.c:3265 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "ожидался запрос аутентификации от сервера, но получено: %c\n" -#: fe-connect.c:3416 +#: fe-connect.c:3506 msgid "unexpected message from server during startup\n" msgstr "неожиданное сообщение от сервера в начале работы\n" -#: fe-connect.c:3643 +#: fe-connect.c:3711 #, c-format msgid "could not make a writable connection to server \"%s:%s\"\n" msgstr "" "не удалось установить подключение для чтения/записи к серверу \"%s:%s\"\n" -#: fe-connect.c:3689 +#: fe-connect.c:3757 #, c-format msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" msgstr "" "проверка \"SHOW transaction_read_only\" не пройдена на сервере \"%s:%s\"\n" -#: fe-connect.c:3704 +#: fe-connect.c:3772 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "неверное состояние соединения %d - возможно разрушение памяти\n" -#: fe-connect.c:4142 fe-connect.c:4202 +#: fe-connect.c:4211 fe-connect.c:4271 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "ошибка в PGEventProc \"%s\" при обработке события PGEVT_CONNRESET\n" -#: fe-connect.c:4549 +#: fe-connect.c:4618 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "некорректный адрес LDAP \"%s\": схема должна быть ldap://\n" -#: fe-connect.c:4564 +#: fe-connect.c:4633 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "некорректный адрес LDAP \"%s\": отсутствует уникальное имя\n" -#: fe-connect.c:4575 fe-connect.c:4628 +#: fe-connect.c:4645 fe-connect.c:4700 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "некорректный адрес LDAP \"%s\": должен быть только один атрибут\n" -#: fe-connect.c:4585 fe-connect.c:4642 +#: fe-connect.c:4656 fe-connect.c:4715 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "" "некорректный адрес LDAP \"%s\": не указана область поиска (base/one/sub)\n" -#: fe-connect.c:4596 +#: fe-connect.c:4667 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "некорректный адрес LDAP \"%s\": нет фильтра\n" -#: fe-connect.c:4617 +#: fe-connect.c:4688 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "некорректный адрес LDAP \"%s\": неверный номер порта\n" -#: fe-connect.c:4651 +#: fe-connect.c:4724 msgid "could not create LDAP structure\n" msgstr "не удалось создать структуру LDAP\n" -#: fe-connect.c:4727 +#: fe-connect.c:4800 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "ошибка поиска на сервере LDAP: %s\n" -#: fe-connect.c:4738 +#: fe-connect.c:4811 msgid "more than one entry found on LDAP lookup\n" msgstr "при поиске LDAP найдено более одного вхождения\n" -#: fe-connect.c:4739 fe-connect.c:4751 +#: fe-connect.c:4812 fe-connect.c:4824 msgid "no entry found on LDAP lookup\n" msgstr "при поиске LDAP ничего не найдено\n" -#: fe-connect.c:4762 fe-connect.c:4775 +#: fe-connect.c:4835 fe-connect.c:4848 msgid "attribute has no values on LDAP lookup\n" msgstr "атрибут не содержит значений при поиске LDAP\n" -#: fe-connect.c:4827 fe-connect.c:4846 fe-connect.c:5379 +#: fe-connect.c:4900 fe-connect.c:4919 fe-connect.c:5451 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "в строке соединения нет \"=\" после \"%s\"\n" -#: fe-connect.c:4919 fe-connect.c:5564 fe-connect.c:6338 +#: fe-connect.c:4992 fe-connect.c:5636 fe-connect.c:6410 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "неверный параметр соединения \"%s\"\n" -#: fe-connect.c:4935 fe-connect.c:5428 +#: fe-connect.c:5008 fe-connect.c:5500 msgid "unterminated quoted string in connection info string\n" msgstr "в строке соединения не хватает закрывающей кавычки\n" -#: fe-connect.c:5018 +#: fe-connect.c:5091 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "определение службы \"%s\" не найдено\n" -#: fe-connect.c:5041 +#: fe-connect.c:5114 #, c-format msgid "service file \"%s\" not found\n" msgstr "файл определений служб \"%s\" не найден\n" -#: fe-connect.c:5056 +#: fe-connect.c:5129 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "слишком длинная строка (%d) в файле определений служб \"%s\"\n" -#: fe-connect.c:5129 fe-connect.c:5173 +#: fe-connect.c:5201 fe-connect.c:5245 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "синтаксическая ошибка в файле определения служб \"%s\" (строка %d)\n" -#: fe-connect.c:5140 +#: fe-connect.c:5212 #, c-format msgid "" "nested service specifications not supported in service file \"%s\", line %d\n" @@ -554,24 +612,24 @@ msgstr "" "рекурсивные определения служб не поддерживаются (файл определения служб \"%s" "\", строка %d)\n" -#: fe-connect.c:5860 +#: fe-connect.c:5932 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "во внутреннюю процедуру разбора строки передан ошибочный URI: \"%s\"\n" -#: fe-connect.c:5937 +#: fe-connect.c:6009 #, c-format msgid "" "end of string reached when looking for matching \"]\" in IPv6 host address " "in URI: \"%s\"\n" msgstr "URI не содержит символ \"]\" после адреса IPv6: \"%s\"\n" -#: fe-connect.c:5944 +#: fe-connect.c:6016 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "IPv6, содержащийся в URI, не может быть пустым: \"%s\"\n" -#: fe-connect.c:5959 +#: fe-connect.c:6031 #, c-format msgid "" "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): " @@ -580,41 +638,41 @@ msgstr "" "неожиданный символ \"%c\" в позиции %d в URI (ожидалось \":\" или \"/\"): " "\"%s\"\n" -#: fe-connect.c:6088 +#: fe-connect.c:6160 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "лишний разделитель ключа/значения \"=\" в параметрах URI: \"%s\"\n" -#: fe-connect.c:6108 +#: fe-connect.c:6180 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "в параметрах URI не хватает разделителя ключа/значения \"=\": \"%s\"\n" -#: fe-connect.c:6159 +#: fe-connect.c:6231 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "неверный параметр в URI: \"%s\"\n" -#: fe-connect.c:6233 +#: fe-connect.c:6305 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "неверный символ, закодированный с %%: \"%s\"\n" -#: fe-connect.c:6243 +#: fe-connect.c:6315 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "недопустимое значение %%00 для символа, закодированного с %%: \"%s\"\n" -#: fe-connect.c:6606 +#: fe-connect.c:6678 msgid "connection pointer is NULL\n" msgstr "нулевой указатель соединения\n" -#: fe-connect.c:6904 +#: fe-connect.c:6974 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "ПРЕДУПРЕЖДЕНИЕ: файл паролей \"%s\" - не обычный файл\n" -#: fe-connect.c:6913 +#: fe-connect.c:6983 #, c-format msgid "" "WARNING: password file \"%s\" has group or world access; permissions should " @@ -623,130 +681,130 @@ msgstr "" "ПРЕДУПРЕЖДЕНИЕ: к файлу паролей \"%s\" имеют доступ все или группа; права " "должны быть u=rw (0600) или более ограниченные\n" -#: fe-connect.c:7007 +#: fe-connect.c:7091 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "пароль получен из файла \"%s\"\n" -#: fe-exec.c:445 fe-exec.c:2822 +#: fe-exec.c:444 fe-exec.c:2821 #, c-format msgid "row number %d is out of range 0..%d" msgstr "номер записи %d вне диапазона 0..%d" -#: fe-exec.c:506 fe-protocol2.c:502 fe-protocol2.c:537 fe-protocol2.c:1056 -#: fe-protocol3.c:208 fe-protocol3.c:235 fe-protocol3.c:252 fe-protocol3.c:332 -#: fe-protocol3.c:727 fe-protocol3.c:958 +#: fe-exec.c:505 fe-protocol2.c:497 fe-protocol2.c:532 fe-protocol2.c:1050 +#: fe-protocol3.c:206 fe-protocol3.c:233 fe-protocol3.c:250 fe-protocol3.c:330 +#: fe-protocol3.c:723 fe-protocol3.c:954 msgid "out of memory" msgstr "нехватка памяти" -#: fe-exec.c:507 fe-protocol2.c:1402 fe-protocol3.c:1911 +#: fe-exec.c:506 fe-protocol2.c:1396 fe-protocol3.c:1907 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:816 +#: fe-exec.c:815 msgid "write to server failed\n" msgstr "ошибка при передаче данных серверу\n" -#: fe-exec.c:897 +#: fe-exec.c:896 msgid "NOTICE" msgstr "ЗАМЕЧАНИЕ" -#: fe-exec.c:955 +#: fe-exec.c:954 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresult не может вместить больше чем INT_MAX кортежей" -#: fe-exec.c:967 +#: fe-exec.c:966 msgid "size_t overflow" msgstr "переполнение size_t" -#: fe-exec.c:1244 fe-exec.c:1302 fe-exec.c:1348 +#: fe-exec.c:1243 fe-exec.c:1301 fe-exec.c:1347 msgid "command string is a null pointer\n" msgstr "указатель на командную строку нулевой\n" -#: fe-exec.c:1308 fe-exec.c:1354 fe-exec.c:1449 +#: fe-exec.c:1307 fe-exec.c:1353 fe-exec.c:1448 msgid "number of parameters must be between 0 and 65535\n" msgstr "число параметров должно быть от 0 до 65535\n" -#: fe-exec.c:1342 fe-exec.c:1443 +#: fe-exec.c:1341 fe-exec.c:1442 msgid "statement name is a null pointer\n" msgstr "указатель на имя оператора нулевой\n" -#: fe-exec.c:1362 fe-exec.c:1525 fe-exec.c:2234 fe-exec.c:2436 +#: fe-exec.c:1361 fe-exec.c:1524 fe-exec.c:2233 fe-exec.c:2435 msgid "function requires at least protocol version 3.0\n" msgstr "функция требует протокол минимум версии 3.0\n" -#: fe-exec.c:1480 +#: fe-exec.c:1479 msgid "no connection to the server\n" msgstr "нет соединения с сервером\n" -#: fe-exec.c:1487 +#: fe-exec.c:1486 msgid "another command is already in progress\n" msgstr "уже выполняется другая команда\n" -#: fe-exec.c:1601 +#: fe-exec.c:1600 msgid "length must be given for binary parameter\n" msgstr "для двоичного параметра должна быть указана длина\n" -#: fe-exec.c:1864 +#: fe-exec.c:1863 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "неожиданный asyncStatus: %d\n" -#: fe-exec.c:1884 +#: fe-exec.c:1883 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "ошибка в PGEventProc \"%s\" при обработке события PGEVT_RESULTCREATE\n" -#: fe-exec.c:2044 +#: fe-exec.c:2043 msgid "COPY terminated by new PQexec" msgstr "операция COPY прервана вызовом PQexec" -#: fe-exec.c:2052 +#: fe-exec.c:2051 msgid "COPY IN state must be terminated first\n" msgstr "сначала должно завершиться состояние COPY IN\n" -#: fe-exec.c:2072 +#: fe-exec.c:2071 msgid "COPY OUT state must be terminated first\n" msgstr "сначала должно завершиться состояние COPY OUT\n" -#: fe-exec.c:2080 +#: fe-exec.c:2079 msgid "PQexec not allowed during COPY BOTH\n" msgstr "вызов PQexec не допускается в процессе COPY BOTH\n" -#: fe-exec.c:2326 fe-exec.c:2393 fe-exec.c:2483 fe-protocol2.c:1359 -#: fe-protocol3.c:1842 +#: fe-exec.c:2325 fe-exec.c:2392 fe-exec.c:2482 fe-protocol2.c:1353 +#: fe-protocol3.c:1838 msgid "no COPY in progress\n" msgstr "операция COPY не выполняется\n" -#: fe-exec.c:2673 +#: fe-exec.c:2672 msgid "connection in wrong state\n" msgstr "соединение в неправильном состоянии\n" -#: fe-exec.c:2704 +#: fe-exec.c:2703 msgid "invalid ExecStatusType code" msgstr "неверный код ExecStatusType" -#: fe-exec.c:2731 +#: fe-exec.c:2730 msgid "PGresult is not an error result\n" msgstr "В PGresult не передан результат ошибки\n" -#: fe-exec.c:2806 fe-exec.c:2829 +#: fe-exec.c:2805 fe-exec.c:2828 #, c-format msgid "column number %d is out of range 0..%d" msgstr "номер столбца %d вне диапазона 0..%d" -#: fe-exec.c:2844 +#: fe-exec.c:2843 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "номер параметра %d вне диапазона 0..%d" -#: fe-exec.c:3154 +#: fe-exec.c:3153 #, c-format msgid "could not interpret result from server: %s" msgstr "не удалось интерпретировать ответ сервера: %s" -#: fe-exec.c:3393 fe-exec.c:3477 +#: fe-exec.c:3392 fe-exec.c:3476 msgid "incomplete multibyte character\n" msgstr "неполный многобайтный символ\n" @@ -837,22 +895,22 @@ msgstr "не удалось определить OID функции loread\n" msgid "cannot determine OID of function lowrite\n" msgstr "не удалось определить OID функции lowrite\n" -#: fe-misc.c:290 +#: fe-misc.c:289 #, c-format msgid "integer of size %lu not supported by pqGetInt" msgstr "функция pqGetInt не поддерживает integer размером %lu байт" -#: fe-misc.c:326 +#: fe-misc.c:325 #, c-format msgid "integer of size %lu not supported by pqPutInt" msgstr "функция pqPutInt не поддерживает integer размером %lu байт" -#: fe-misc.c:637 fe-misc.c:859 +#: fe-misc.c:636 fe-misc.c:869 msgid "connection not open\n" msgstr "соединение не открыто\n" -#: fe-misc.c:807 fe-secure-openssl.c:206 fe-secure-openssl.c:314 -#: fe-secure.c:268 fe-secure.c:385 +#: fe-misc.c:805 fe-secure-openssl.c:209 fe-secure-openssl.c:316 +#: fe-secure.c:267 fe-secure.c:383 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -862,40 +920,40 @@ msgstr "" "\tСкорее всего сервер прекратил работу из-за сбоя\n" "\tдо или в процессе выполнения запроса.\n" -#: fe-misc.c:1046 +#: fe-misc.c:1063 msgid "timeout expired\n" msgstr "тайм-аут\n" -#: fe-misc.c:1091 +#: fe-misc.c:1108 msgid "invalid socket\n" msgstr "неверный сокет\n" -#: fe-misc.c:1114 +#: fe-misc.c:1131 #, c-format msgid "select() failed: %s\n" msgstr "ошибка в select(): %s\n" -#: fe-protocol2.c:90 +#: fe-protocol2.c:87 #, c-format msgid "invalid setenv state %c, probably indicative of memory corruption\n" msgstr "неверное состояние setenv %c - возможно разрушение памяти\n" -#: fe-protocol2.c:389 +#: fe-protocol2.c:384 #, c-format msgid "invalid state %c, probably indicative of memory corruption\n" msgstr "неверное состояние %c - возможно разрушение памяти\n" -#: fe-protocol2.c:478 fe-protocol3.c:185 +#: fe-protocol2.c:473 fe-protocol3.c:183 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "от сервера во время простоя получено сообщение типа 0x%02x" -#: fe-protocol2.c:528 +#: fe-protocol2.c:523 #, c-format msgid "unexpected character %c following empty query response (\"I\" message)" msgstr "неожиданный символ %c вслед за пустым ответом (сообщение \"I\")" -#: fe-protocol2.c:594 +#: fe-protocol2.c:589 #, c-format msgid "" "server sent data (\"D\" message) without prior row description (\"T\" " @@ -904,7 +962,7 @@ msgstr "" "сервер отправил данные (сообщение \"D\") без предварительного описания " "строки (сообщение \"T\")" -#: fe-protocol2.c:612 +#: fe-protocol2.c:607 #, c-format msgid "" "server sent binary data (\"B\" message) without prior row description (\"T\" " @@ -913,26 +971,26 @@ msgstr "" "сервер отправил двоичные данные (сообщение \"B\") без предварительного " "описания строки (сообщение \"T\")" -#: fe-protocol2.c:632 fe-protocol3.c:411 +#: fe-protocol2.c:626 fe-protocol3.c:408 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "неожиданный ответ сервера; первый полученный символ: \"%c\"\n" -#: fe-protocol2.c:761 fe-protocol2.c:936 fe-protocol3.c:626 fe-protocol3.c:853 +#: fe-protocol2.c:755 fe-protocol2.c:930 fe-protocol3.c:622 fe-protocol3.c:849 msgid "out of memory for query result" msgstr "недостаточно памяти для результата запроса" -#: fe-protocol2.c:1414 +#: fe-protocol2.c:1408 #, c-format msgid "lost synchronization with server, resetting connection" msgstr "потеряна синхронизация с сервером; попытка восстановить соединение" -#: fe-protocol2.c:1536 fe-protocol2.c:1568 fe-protocol3.c:2099 +#: fe-protocol2.c:1530 fe-protocol2.c:1562 fe-protocol3.c:2095 #, c-format msgid "protocol error: id=0x%x\n" msgstr "ошибка протокола: id=0x%x\n" -#: fe-protocol3.c:367 +#: fe-protocol3.c:365 msgid "" "server sent data (\"D\" message) without prior row description (\"T\" " "message)\n" @@ -940,116 +998,116 @@ msgstr "" "сервер отправил данные (сообщение \"D\") без предварительного описания " "строки (сообщение \"T\")\n" -#: fe-protocol3.c:432 +#: fe-protocol3.c:429 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "содержимое не соответствует длине в сообщении типа \"%c\"\n" -#: fe-protocol3.c:453 +#: fe-protocol3.c:449 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "" "потеряна синхронизация с сервером: получено сообщение типа \"%c\", длина %d\n" -#: fe-protocol3.c:504 fe-protocol3.c:544 +#: fe-protocol3.c:500 fe-protocol3.c:540 msgid "insufficient data in \"T\" message" msgstr "недостаточно данных в сообщении \"T\"" -#: fe-protocol3.c:577 +#: fe-protocol3.c:573 msgid "extraneous data in \"T\" message" msgstr "лишние данные в сообщении \"T\"" -#: fe-protocol3.c:690 +#: fe-protocol3.c:686 msgid "extraneous data in \"t\" message" msgstr "лишние данные в сообщении \"t\"" -#: fe-protocol3.c:761 fe-protocol3.c:793 fe-protocol3.c:811 +#: fe-protocol3.c:757 fe-protocol3.c:789 fe-protocol3.c:807 msgid "insufficient data in \"D\" message" msgstr "недостаточно данных в сообщении \"D\"" -#: fe-protocol3.c:767 +#: fe-protocol3.c:763 msgid "unexpected field count in \"D\" message" msgstr "неверное число полей в сообщении \"D\"" -#: fe-protocol3.c:820 +#: fe-protocol3.c:816 msgid "extraneous data in \"D\" message" msgstr "лишние данные в сообщении \"D\"" -#: fe-protocol3.c:1012 +#: fe-protocol3.c:1008 msgid "no error message available\n" msgstr "нет сообщения об ошибке\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1060 fe-protocol3.c:1079 +#: fe-protocol3.c:1056 fe-protocol3.c:1075 #, c-format msgid " at character %s" msgstr " символ %s" -#: fe-protocol3.c:1092 +#: fe-protocol3.c:1088 #, c-format msgid "DETAIL: %s\n" msgstr "ПОДРОБНОСТИ: %s\n" -#: fe-protocol3.c:1095 +#: fe-protocol3.c:1091 #, c-format msgid "HINT: %s\n" msgstr "ПОДСКАЗКА: %s\n" -#: fe-protocol3.c:1098 +#: fe-protocol3.c:1094 #, c-format msgid "QUERY: %s\n" msgstr "ЗАПРОС: %s\n" -#: fe-protocol3.c:1105 +#: fe-protocol3.c:1101 #, c-format msgid "CONTEXT: %s\n" msgstr "КОНТЕКСТ: %s\n" -#: fe-protocol3.c:1114 +#: fe-protocol3.c:1110 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "СХЕМА: %s\n" -#: fe-protocol3.c:1118 +#: fe-protocol3.c:1114 #, c-format msgid "TABLE NAME: %s\n" msgstr "ТАБЛИЦА: %s\n" -#: fe-protocol3.c:1122 +#: fe-protocol3.c:1118 #, c-format msgid "COLUMN NAME: %s\n" msgstr "СТОЛБЕЦ: %s\n" -#: fe-protocol3.c:1126 +#: fe-protocol3.c:1122 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "ТИП ДАННЫХ: %s\n" -#: fe-protocol3.c:1130 +#: fe-protocol3.c:1126 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "ОГРАНИЧЕНИЕ: %s\n" -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1138 msgid "LOCATION: " msgstr "ПОЛОЖЕНИЕ: " -#: fe-protocol3.c:1144 +#: fe-protocol3.c:1140 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1146 +#: fe-protocol3.c:1142 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1341 +#: fe-protocol3.c:1337 #, c-format msgid "LINE %d: " msgstr "СТРОКА %d: " -#: fe-protocol3.c:1736 +#: fe-protocol3.c:1732 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline можно вызывать только во время COPY OUT с текстом\n" @@ -1084,68 +1142,68 @@ msgstr "исходящее сообщение GSSAPI не будет защищ msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" msgstr "клиент попытался передать чрезмерно большой пакет GSSAPI (%zu > %zu)\n" -#: fe-secure-gssapi.c:350 fe-secure-gssapi.c:590 +#: fe-secure-gssapi.c:354 fe-secure-gssapi.c:596 #, c-format msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" msgstr "сервер передал чрезмерно большой пакет GSSAPI (%zu > %zu)\n" -#: fe-secure-gssapi.c:389 +#: fe-secure-gssapi.c:393 msgid "GSSAPI unwrap error" msgstr "ошибка развёртывания сообщения в GSSAPI" -#: fe-secure-gssapi.c:399 +#: fe-secure-gssapi.c:403 msgid "incoming GSSAPI message did not use confidentiality\n" msgstr "входящее сообщение GSSAPI не защищено\n" -#: fe-secure-gssapi.c:636 +#: fe-secure-gssapi.c:642 msgid "could not initiate GSSAPI security context" msgstr "не удалось инициализировать контекст безопасности GSSAPI" -#: fe-secure-gssapi.c:666 +#: fe-secure-gssapi.c:670 msgid "GSSAPI size check error" msgstr "ошибка проверки размера в GSSAPI" -#: fe-secure-gssapi.c:677 +#: fe-secure-gssapi.c:681 msgid "GSSAPI context establishment error" msgstr "ошибка установления контекста в GSSAPI" -#: fe-secure-openssl.c:211 fe-secure-openssl.c:319 fe-secure-openssl.c:1219 +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1291 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "ошибка SSL SYSCALL: %s\n" -#: fe-secure-openssl.c:218 fe-secure-openssl.c:326 fe-secure-openssl.c:1223 +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1295 msgid "SSL SYSCALL error: EOF detected\n" msgstr "ошибка SSL SYSCALL: конец файла (EOF)\n" -#: fe-secure-openssl.c:229 fe-secure-openssl.c:337 fe-secure-openssl.c:1232 +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1304 #, c-format msgid "SSL error: %s\n" msgstr "ошибка SSL: %s\n" -#: fe-secure-openssl.c:244 fe-secure-openssl.c:352 +#: fe-secure-openssl.c:247 fe-secure-openssl.c:354 msgid "SSL connection has been closed unexpectedly\n" msgstr "SSL-соединение было неожиданно закрыто\n" -#: fe-secure-openssl.c:250 fe-secure-openssl.c:358 fe-secure-openssl.c:1241 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1354 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "нераспознанный код ошибки SSL: %d\n" -#: fe-secure-openssl.c:398 +#: fe-secure-openssl.c:400 msgid "could not determine server certificate signature algorithm\n" msgstr "не удалось определить алгоритм подписи сертификата сервера\n" -#: fe-secure-openssl.c:419 +#: fe-secure-openssl.c:421 #, c-format msgid "could not find digest for NID %s\n" msgstr "не удалось найти алгоритм хеширования по NID %s\n" -#: fe-secure-openssl.c:429 +#: fe-secure-openssl.c:431 msgid "could not generate peer certificate hash\n" msgstr "не удалось сгенерировать хеш сертификата сервера\n" -#: fe-secure-openssl.c:486 +#: fe-secure-openssl.c:488 msgid "SSL certificate's name entry is missing\n" msgstr "запись имени в SSL-сертификате отсутствует\n" @@ -1154,17 +1212,32 @@ msgstr "запись имени в SSL-сертификате отсутству msgid "could not create SSL context: %s\n" msgstr "не удалось создать контекст SSL: %s\n" -#: fe-secure-openssl.c:852 +#: fe-secure-openssl.c:854 #, c-format -msgid "could not read root certificate file \"%s\": %s\n" -msgstr "не удалось прочитать файл корневых сертификатов \"%s\": %s\n" +msgid "invalid value \"%s\" for minimum SSL protocol version\n" +msgstr "неверное значение \"%s\" для минимальной версии протокола SSL\n" + +#: fe-secure-openssl.c:865 +#, c-format +msgid "could not set minimum SSL protocol version: %s\n" +msgstr "не удалось задать минимальную версию протокола SSL: %s\n" -#: fe-secure-openssl.c:880 +#: fe-secure-openssl.c:883 #, c-format -msgid "SSL library does not support CRL certificates (file \"%s\")\n" -msgstr "Библиотека SSL не поддерживает проверку CRL (файл \"%s\")\n" +msgid "invalid value \"%s\" for maximum SSL protocol version\n" +msgstr "неверное значение \"%s\" для максимальной версии протокола SSL\n" -#: fe-secure-openssl.c:908 +#: fe-secure-openssl.c:894 +#, c-format +msgid "could not set maximum SSL protocol version: %s\n" +msgstr "не удалось задать максимальную версию протокола SSL: %s\n" + +#: fe-secure-openssl.c:930 +#, c-format +msgid "could not read root certificate file \"%s\": %s\n" +msgstr "не удалось прочитать файл корневых сертификатов \"%s\": %s\n" + +#: fe-secure-openssl.c:974 msgid "" "could not get home directory to locate root certificate file\n" "Either provide the file or change sslmode to disable server certificate " @@ -1174,7 +1247,7 @@ msgstr "" "Укажите полный путь к файлу или отключите проверку сертификата сервера, " "изменив sslmode.\n" -#: fe-secure-openssl.c:912 +#: fe-secure-openssl.c:978 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -1185,47 +1258,47 @@ msgstr "" "Укажите полный путь к файлу или отключите проверку сертификата сервера, " "изменив sslmode.\n" -#: fe-secure-openssl.c:943 +#: fe-secure-openssl.c:1009 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "не удалось открыть файл сертификата \"%s\": %s\n" -#: fe-secure-openssl.c:962 +#: fe-secure-openssl.c:1028 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "не удалось прочитать файл сертификата \"%s\": %s\n" -#: fe-secure-openssl.c:987 +#: fe-secure-openssl.c:1053 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "не удалось установить SSL-соединение: %s\n" -#: fe-secure-openssl.c:1041 +#: fe-secure-openssl.c:1107 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "не удалось загрузить модуль SSL ENGINE \"%s\": %s\n" -#: fe-secure-openssl.c:1053 +#: fe-secure-openssl.c:1119 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "не удалось инициализировать модуль SSL ENGINE \"%s\": %s\n" -#: fe-secure-openssl.c:1069 +#: fe-secure-openssl.c:1135 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "не удалось прочитать закрытый ключ SSL \"%s\" из модуля \"%s\": %s\n" -#: fe-secure-openssl.c:1083 +#: fe-secure-openssl.c:1149 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "не удалось загрузить закрытый ключ SSL \"%s\" из модуля \"%s\": %s\n" -#: fe-secure-openssl.c:1120 +#: fe-secure-openssl.c:1186 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "сертификат присутствует, но файла закрытого ключа \"%s\" нет\n" -#: fe-secure-openssl.c:1128 +#: fe-secure-openssl.c:1194 #, c-format msgid "" "private key file \"%s\" has group or world access; permissions should be " @@ -1234,46 +1307,63 @@ msgstr "" "к файлу закрытого ключа \"%s\" имеют доступ все или группа; права должны " "быть u=rw (0600) или более ограниченные\n" -#: fe-secure-openssl.c:1139 +#: fe-secure-openssl.c:1219 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "не удалось загрузить файл закрытого ключа \"%s\": %s\n" -#: fe-secure-openssl.c:1153 +#: fe-secure-openssl.c:1237 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "сертификат не соответствует файлу закрытого ключа \"%s\": %s\n" -#: fe-secure-openssl.c:1262 +#: fe-secure-openssl.c:1337 +#, c-format +msgid "" +"This may indicate that the server does not support any SSL protocol version " +"between %s and %s.\n" +msgstr "" +"Это может указывать на то, что сервер не поддерживает ни одну версию " +"протокола SSL между %s и %s.\n" + +#: fe-secure-openssl.c:1373 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "не удалось получить сертификат: %s\n" -#: fe-secure-openssl.c:1351 +#: fe-secure-openssl.c:1462 #, c-format msgid "no SSL error reported" msgstr "нет сообщения об ошибке SSL" -#: fe-secure-openssl.c:1360 +#: fe-secure-openssl.c:1471 #, c-format msgid "SSL error code %lu" msgstr "код ошибки SSL: %lu" -#: fe-secure.c:276 +#: fe-secure-openssl.c:1718 +#, c-format +msgid "WARNING: sslpassword truncated\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: значение sslpassword усечено\n" + +#: fe-secure.c:275 #, c-format msgid "could not receive data from server: %s\n" msgstr "не удалось получить данные с сервера: %s\n" -#: fe-secure.c:392 +#: fe-secure.c:390 #, c-format msgid "could not send data to server: %s\n" msgstr "не удалось передать данные серверу: %s\n" -#: win32.c:317 +#: win32.c:314 #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "нераспознанная ошибка сокета: 0x%08X/%d" +#~ msgid "SSL library does not support CRL certificates (file \"%s\")\n" +#~ msgstr "Библиотека SSL не поддерживает проверку CRL (файл \"%s\")\n" + #~ msgid "could not get home directory to locate password file\n" #~ msgstr "не удалось получить домашний каталог для загрузки файла паролей\n" diff --git a/src/interfaces/libpq/po/sv.po b/src/interfaces/libpq/po/sv.po index 6363410885a9f..6d7f4aaefd6b2 100644 --- a/src/interfaces/libpq/po/sv.po +++ b/src/interfaces/libpq/po/sv.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-09 08:39+0000\n" -"PO-Revision-Date: 2020-05-09 13:55+0200\n" +"POT-Creation-Date: 2020-08-27 21:39+0000\n" +"PO-Revision-Date: 2020-08-30 07:05+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -52,15 +52,15 @@ msgstr "kunde inte skapa engångsnummer\n" #: fe-auth-scram.c:600 fe-auth-scram.c:626 fe-auth-scram.c:641 #: fe-auth-scram.c:691 fe-auth-scram.c:725 fe-auth.c:289 fe-auth.c:359 #: fe-auth.c:394 fe-auth.c:611 fe-auth.c:770 fe-auth.c:1129 fe-auth.c:1277 -#: fe-connect.c:886 fe-connect.c:1413 fe-connect.c:1589 fe-connect.c:2199 -#: fe-connect.c:2222 fe-connect.c:2948 fe-connect.c:4614 fe-connect.c:4870 -#: fe-connect.c:4989 fe-connect.c:5242 fe-connect.c:5322 fe-connect.c:5421 -#: fe-connect.c:5677 fe-connect.c:5706 fe-connect.c:5778 fe-connect.c:5802 -#: fe-connect.c:5820 fe-connect.c:5921 fe-connect.c:5930 fe-connect.c:6286 -#: fe-connect.c:6436 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 +#: fe-connect.c:892 fe-connect.c:1419 fe-connect.c:1595 fe-connect.c:2200 +#: fe-connect.c:2223 fe-connect.c:2952 fe-connect.c:4598 fe-connect.c:4854 +#: fe-connect.c:4973 fe-connect.c:5226 fe-connect.c:5306 fe-connect.c:5405 +#: fe-connect.c:5661 fe-connect.c:5690 fe-connect.c:5762 fe-connect.c:5786 +#: fe-connect.c:5804 fe-connect.c:5905 fe-connect.c:5914 fe-connect.c:6270 +#: fe-connect.c:6420 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 #: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1207 fe-protocol3.c:995 #: fe-protocol3.c:1699 fe-secure-common.c:110 fe-secure-gssapi.c:504 -#: fe-secure-openssl.c:440 fe-secure-openssl.c:1092 +#: fe-secure-openssl.c:440 fe-secure-openssl.c:1091 msgid "out of memory\n" msgstr "slut på minne\n" @@ -210,12 +210,12 @@ msgstr "autentiseringsmetod %u stöds ej\n" msgid "user name lookup failure: error code %lu\n" msgstr "misslyckad sökning efter användarnamn: felkod %lu\n" -#: fe-auth.c:1114 fe-connect.c:2830 +#: fe-auth.c:1114 fe-connect.c:2834 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "kunde inte slå upp lokalt användar-id %d: %s\n" -#: fe-auth.c:1119 fe-connect.c:2835 +#: fe-auth.c:1119 fe-connect.c:2839 #, c-format msgid "local user with ID %d does not exist\n" msgstr "lokal användare med ID %d existerar inte\n" @@ -233,66 +233,66 @@ msgstr "password_encryption-värdet är för långt\n" msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "okänd lösenordskrypteringsalgoritm \"%s\"\n" -#: fe-connect.c:1069 +#: fe-connect.c:1075 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "kunde inte matcha %d värdnamn till %d värdadresser\n" -#: fe-connect.c:1150 +#: fe-connect.c:1156 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "kunde inte matcha %d portnummer med %d värdar\n" -#: fe-connect.c:1243 +#: fe-connect.c:1249 #, c-format msgid "invalid channel_binding value: \"%s\"\n" msgstr "ogiltigt channel_binding-värde: \"%s\"\n" -#: fe-connect.c:1269 +#: fe-connect.c:1275 #, c-format msgid "invalid sslmode value: \"%s\"\n" msgstr "ogiltigt värde för ssl-läge: \"%s\"\n" -#: fe-connect.c:1290 +#: fe-connect.c:1296 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "värde för ssl-läge, \"%s\", är ogiltigt när SSL-stöd inte kompilerats in\n" -#: fe-connect.c:1311 +#: fe-connect.c:1317 #, c-format msgid "invalid ssl_min_protocol_version value: \"%s\"\n" msgstr "ogiltigt ssl_min_protocol_version-värde: \"%s\"\n" -#: fe-connect.c:1319 +#: fe-connect.c:1325 #, c-format msgid "invalid ssl_max_protocol_version value: \"%s\"\n" msgstr "ogiltigt ssl_max_protocol_version-värde: \"%s\"\n" -#: fe-connect.c:1336 +#: fe-connect.c:1342 msgid "invalid SSL protocol version range\n" msgstr "ogiltigt intervall för SSL-protokollversion\n" -#: fe-connect.c:1351 +#: fe-connect.c:1357 #, c-format msgid "invalid gssencmode value: \"%s\"\n" msgstr "ogiltigt värde för gssencmode: \"%s\"\n" -#: fe-connect.c:1360 +#: fe-connect.c:1366 #, c-format msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" msgstr "värde för gssenc-läge, \"%s\", är ogiltigt när GSSAPI-stöd inte kompilerats in\n" -#: fe-connect.c:1395 +#: fe-connect.c:1401 #, c-format msgid "invalid target_session_attrs value: \"%s\"\n" msgstr "ogiltigt target_session_attrs-värde: \"%s\"\n" -#: fe-connect.c:1613 +#: fe-connect.c:1619 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "kunde inte sätta uttag (socket) till läget TCP-ingen-fördröjning: %s\n" -#: fe-connect.c:1674 +#: fe-connect.c:1680 #, c-format msgid "" "could not connect to server: %s\n" @@ -303,7 +303,7 @@ msgstr "" "\tKör servern på lokalt och accepterar den\n" "\tanslutningar på Unix-uttaget \"%s\"?\n" -#: fe-connect.c:1711 +#: fe-connect.c:1717 #, c-format msgid "" "could not connect to server: %s\n" @@ -314,7 +314,7 @@ msgstr "" "\tKör servern på värden \"%s\" (%s) och accepterar\n" "\tden TCP/IP-uppkopplingar på port %s?\n" -#: fe-connect.c:1719 +#: fe-connect.c:1725 #, c-format msgid "" "could not connect to server: %s\n" @@ -325,132 +325,132 @@ msgstr "" "\tKör servern på värden \"%s\" och accepterar\n" "\tden TCP/IP-uppkopplingar på porten %s?\n" -#: fe-connect.c:1789 +#: fe-connect.c:1795 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "ogiltigt heltalsvärde \"%s\" för anslutningsflagga \"%s\"\n" -#: fe-connect.c:1819 fe-connect.c:1853 fe-connect.c:1888 fe-connect.c:1975 -#: fe-connect.c:2619 +#: fe-connect.c:1825 fe-connect.c:1859 fe-connect.c:1894 fe-connect.c:1981 +#: fe-connect.c:2623 #, c-format msgid "setsockopt(%s) failed: %s\n" msgstr "setsockopt(%s) misslyckades: %s\n" -#: fe-connect.c:1941 +#: fe-connect.c:1947 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) misslyckades: %ui\n" -#: fe-connect.c:2312 +#: fe-connect.c:2313 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "ogiltigt förbindelsetillstånd, antagligen korrupt minne\n" -#: fe-connect.c:2378 +#: fe-connect.c:2379 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "ogiltigt portnummer \"%s\"\n" -#: fe-connect.c:2394 +#: fe-connect.c:2395 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "kunde inte översätta värdnamn \"%s\" till adress: %s\n" -#: fe-connect.c:2407 +#: fe-connect.c:2408 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "kunde inte parsa nätverksadress \"%s\": %s\n" -#: fe-connect.c:2420 +#: fe-connect.c:2421 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Sökväg till unixdomänuttag \"%s\" är för lång (maximalt %d byte)\n" -#: fe-connect.c:2435 +#: fe-connect.c:2436 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "kunde inte översätta sökväg till unix-uttag (socket) \"%s\" till adress: %s\n" -#: fe-connect.c:2556 +#: fe-connect.c:2560 #, c-format msgid "could not create socket: %s\n" msgstr "kan inte skapa uttag: %s\n" -#: fe-connect.c:2578 +#: fe-connect.c:2582 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "kunde inte sätta uttag (socket) till ickeblockerande läge: %s\n" -#: fe-connect.c:2588 +#: fe-connect.c:2592 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "kunde inte ställa in uttag (socket) i \"close-on-exec\"-läge: %s\n" -#: fe-connect.c:2606 +#: fe-connect.c:2610 msgid "keepalives parameter must be an integer\n" msgstr "keepalives-parameter måste vara ett heltal\n" -#: fe-connect.c:2746 +#: fe-connect.c:2750 #, c-format msgid "could not get socket error status: %s\n" msgstr "kunde inte hämta felstatus för uttag (socket): %s\n" -#: fe-connect.c:2774 +#: fe-connect.c:2778 #, c-format msgid "could not get client address from socket: %s\n" msgstr "kunde inte få tag på klientadressen från uttag (socket): %s\n" -#: fe-connect.c:2816 +#: fe-connect.c:2820 msgid "requirepeer parameter is not supported on this platform\n" msgstr "requirepeer-parameter stöds inte på denna plattform\n" -#: fe-connect.c:2819 +#: fe-connect.c:2823 #, c-format msgid "could not get peer credentials: %s\n" msgstr "kunde inte hämta andra sidans referenser: %s\n" -#: fe-connect.c:2843 +#: fe-connect.c:2847 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer anger \"%s\", men andra sidans användarnamn är \"%s\"\n" -#: fe-connect.c:2883 +#: fe-connect.c:2887 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "kunde inte skicka GSSAPI-paket för uppkopplingsförhandling: %s\n" -#: fe-connect.c:2895 +#: fe-connect.c:2899 msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" msgstr "GSSAPI-kryptering krävdes men var omöjligt (kanske ingen credential-cache, inget serverstöd eller använder ett lokalt uttag)\n" -#: fe-connect.c:2922 +#: fe-connect.c:2926 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "kunde inte skicka SSL-paket för uppkopplingsförhandling: %s\n" -#: fe-connect.c:2961 +#: fe-connect.c:2965 #, c-format msgid "could not send startup packet: %s\n" msgstr "kan inte skicka startpaketet: %s\n" -#: fe-connect.c:3031 +#: fe-connect.c:3035 msgid "server does not support SSL, but SSL was required\n" msgstr "SSL stöds inte av servern, men SSL krävdes\n" -#: fe-connect.c:3057 +#: fe-connect.c:3061 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "tog emot ogiltigt svar till SSL-uppkopplingsförhandling: %c\n" -#: fe-connect.c:3147 +#: fe-connect.c:3151 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "GSSAPI stöds inte av servern, men det krävdes\n" -#: fe-connect.c:3158 +#: fe-connect.c:3162 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "tog emot ogiltigt svar till GSSAPI-uppkopplingsförhandling: %c\n" -#: fe-connect.c:3225 fe-connect.c:3256 +#: fe-connect.c:3229 fe-connect.c:3260 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "förväntade autentiseringsförfrågan från servern, men fick %c\n" @@ -474,166 +474,166 @@ msgstr "test \"SHOW transaction_read_only\" misslyckades på server \"%s:%s\"\n" msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "ogiltigt förbindelsetillstånd %d, antagligen korrupt minne\n" -#: fe-connect.c:4220 fe-connect.c:4280 +#: fe-connect.c:4204 fe-connect.c:4264 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc \"%s\" misslyckades under PGEVT_CONNRESET-händelse\n" -#: fe-connect.c:4627 +#: fe-connect.c:4611 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "ogiltig LDAP URL \"%s\": schemat måste vara ldap://\n" -#: fe-connect.c:4642 +#: fe-connect.c:4626 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "ogiltig LDAP URL \"%s\": saknar urskiljbart namn\n" -#: fe-connect.c:4654 fe-connect.c:4709 +#: fe-connect.c:4638 fe-connect.c:4693 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "ogiltig LDAP URL \"%s\": måste finnas exakt ett attribut\n" -#: fe-connect.c:4665 fe-connect.c:4724 +#: fe-connect.c:4649 fe-connect.c:4708 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "ogiltig LDAP URL \"%s\": måste ha sök-scope (base/one/sub)\n" -#: fe-connect.c:4676 +#: fe-connect.c:4660 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "ogiltigt LDAP URL \"%s\": inget filter\n" -#: fe-connect.c:4697 +#: fe-connect.c:4681 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "ogiltig LDAP URL \"%s\": ogiltigt portnummer\n" -#: fe-connect.c:4733 +#: fe-connect.c:4717 msgid "could not create LDAP structure\n" msgstr "kunde inte skapa LDAP-struktur\n" -#: fe-connect.c:4809 +#: fe-connect.c:4793 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "uppslagning av LDAP-server misslyckades: %s\n" -#: fe-connect.c:4820 +#: fe-connect.c:4804 msgid "more than one entry found on LDAP lookup\n" msgstr "mer än en post hittad i LDAP-uppslagning\n" -#: fe-connect.c:4821 fe-connect.c:4833 +#: fe-connect.c:4805 fe-connect.c:4817 msgid "no entry found on LDAP lookup\n" msgstr "ingen post hittad i LDAP-uppslagning\n" -#: fe-connect.c:4844 fe-connect.c:4857 +#: fe-connect.c:4828 fe-connect.c:4841 msgid "attribute has no values on LDAP lookup\n" msgstr "attributet har inga värden i LDAP-uppslagning\n" -#: fe-connect.c:4909 fe-connect.c:4928 fe-connect.c:5460 +#: fe-connect.c:4893 fe-connect.c:4912 fe-connect.c:5444 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "\"=\" efter \"%s\" saknas i förbindelseinfosträng\n" -#: fe-connect.c:5001 fe-connect.c:5645 fe-connect.c:6419 +#: fe-connect.c:4985 fe-connect.c:5629 fe-connect.c:6403 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "ogiltig förbindelseparameter \"%s\"\n" -#: fe-connect.c:5017 fe-connect.c:5509 +#: fe-connect.c:5001 fe-connect.c:5493 msgid "unterminated quoted string in connection info string\n" msgstr "icke terminerad sträng i uppkopplingsinformationen\n" -#: fe-connect.c:5100 +#: fe-connect.c:5084 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "definition av service \"%s\" hittades inte\n" -#: fe-connect.c:5123 +#: fe-connect.c:5107 #, c-format msgid "service file \"%s\" not found\n" msgstr "servicefil \"%s\" hittades inte\n" -#: fe-connect.c:5138 +#: fe-connect.c:5122 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "rad %d för lång i servicefil \"%s\"\n" -#: fe-connect.c:5210 fe-connect.c:5254 +#: fe-connect.c:5194 fe-connect.c:5238 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "syntaxfel i servicefel \"%s\", rad %d\n" -#: fe-connect.c:5221 +#: fe-connect.c:5205 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "nästlade servicespecifikationer stöds inte i servicefil \"%s\", rad %d\n" -#: fe-connect.c:5941 +#: fe-connect.c:5925 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "ogiltig URI propagerad till intern parsningsrutin: \"%s\"\n" -#: fe-connect.c:6018 +#: fe-connect.c:6002 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "nådde slutet på strängen när vi letade efter matchande \"]\" i IPv6-värdadress i URI: \"%s\"\n" -#: fe-connect.c:6025 +#: fe-connect.c:6009 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "IPv6-värdadress får ej vara tom i URI: \"%s\"\n" -#: fe-connect.c:6040 +#: fe-connect.c:6024 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "oväntat tecken \"%c\" vid position %d i URI (förväntade \":\" eller \"/\"): \"%s\"\n" -#: fe-connect.c:6169 +#: fe-connect.c:6153 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "extra nyckel/värde-separator \"=\" i URI-frågeparameter: \"%s\"\n" -#: fe-connect.c:6189 +#: fe-connect.c:6173 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "saknar nyckel/värde-separator \"=\" i URI-frågeparameter: \"%s\"\n" -#: fe-connect.c:6240 +#: fe-connect.c:6224 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "ogiltig URI-frågeparameter: \"%s\"\n" -#: fe-connect.c:6314 +#: fe-connect.c:6298 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "ogiltigt procent-kodad symbol: \"%s\"\n" -#: fe-connect.c:6324 +#: fe-connect.c:6308 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "förbjudet värde %%00 i procentkodat värde: \"%s\"\n" -#: fe-connect.c:6687 +#: fe-connect.c:6671 msgid "connection pointer is NULL\n" msgstr "anslutningspekare är NULL\n" -#: fe-connect.c:6986 +#: fe-connect.c:6970 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "FEL: lösenordsfil \"%s\" är inte en vanlig fil\n" -#: fe-connect.c:6995 +#: fe-connect.c:6979 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "VARNING: lösenordsfilen \"%s\" har läsrättigheter för gruppen eller världen; rättigheten skall vara u=rw (0600) eller mindre\n" -#: fe-connect.c:7036 +#: fe-connect.c:7020 #, c-format msgid "WARNING: line %d too long in password file \"%s\"\n" msgstr "VARNING: rad %d för lång i lösenordsfil \"%s\"\n" -#: fe-connect.c:7115 +#: fe-connect.c:7099 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "lösenord hämtat från fil \"%s\"\n" @@ -857,7 +857,7 @@ msgstr "heltal med storlek %lu stöds inte av pqGetInt" msgid "integer of size %lu not supported by pqPutInt" msgstr "heltal med storlek %lu stöds inte av pqPutInt" -#: fe-misc.c:636 fe-misc.c:857 +#: fe-misc.c:636 fe-misc.c:869 msgid "connection not open\n" msgstr "förbindelse inte öppen\n" @@ -872,15 +872,15 @@ msgstr "" "\tTroligen så terminerade servern pga något fel antingen\n" "\tinnan eller under tiden den bearbetade en förfrågan.\n" -#: fe-misc.c:1044 +#: fe-misc.c:1063 msgid "timeout expired\n" msgstr "timeout utgången\n" -#: fe-misc.c:1089 +#: fe-misc.c:1108 msgid "invalid socket\n" msgstr "ogiltigt uttag\n" -#: fe-misc.c:1112 +#: fe-misc.c:1131 #, c-format msgid "select() failed: %s\n" msgstr "select() misslyckades: %s\n" @@ -1105,16 +1105,16 @@ msgstr "GSSAPI-fel vid kontroll av storlek" msgid "GSSAPI context establishment error" msgstr "GSSAPI-fel vid skapande av kontext" -#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1292 +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1291 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "SSL SYSCALL fel: %s\n" -#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1296 +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1295 msgid "SSL SYSCALL error: EOF detected\n" msgstr "SSL SYSCALL-fel: EOF upptäckt\n" -#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1305 +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1304 #, c-format msgid "SSL error: %s\n" msgstr "SSL-fel: %s\n" @@ -1123,7 +1123,7 @@ msgstr "SSL-fel: %s\n" msgid "SSL connection has been closed unexpectedly\n" msgstr "SSL-anslutning har oväntat stängts\n" -#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1314 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1354 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "okänd SSL-felkod: %d\n" @@ -1150,32 +1150,32 @@ msgstr "SSL-certifikatets namn saknas\n" msgid "could not create SSL context: %s\n" msgstr "kan inte skapa SSL-omgivning: %s\n" -#: fe-secure-openssl.c:855 +#: fe-secure-openssl.c:854 #, c-format -msgid "invalid value \"%s\" for minimum version of SSL protocol\n" -msgstr "ogiltigt värde \"%s\" för minimal version av SSL-protokoll\n" +msgid "invalid value \"%s\" for minimum SSL protocol version\n" +msgstr "ogiltigt värde \"%s\" för minimal SSL-protokollversion\n" -#: fe-secure-openssl.c:866 +#: fe-secure-openssl.c:865 #, c-format -msgid "could not set minimum version of SSL protocol: %s\n" -msgstr "kunde inte sätta minimal version för SSL-protokoll: %s\n" +msgid "could not set minimum SSL protocol version: %s\n" +msgstr "kunde inte sätta minimal SSL-protokollversion: %s\n" -#: fe-secure-openssl.c:884 +#: fe-secure-openssl.c:883 #, c-format -msgid "invalid value \"%s\" for maximum version of SSL protocol\n" -msgstr "ogiltigt värde \"%s\" för maximal version av SSL-protokoll\n" +msgid "invalid value \"%s\" for maximum SSL protocol version\n" +msgstr "ogiltigt värde \"%s\" för maximal SSL-protokollversion\n" -#: fe-secure-openssl.c:895 +#: fe-secure-openssl.c:894 #, c-format -msgid "could not set maximum version of SSL protocol: %s\n" -msgstr "kunde inte sätta maximal version för SSL-protokollet: %s\n" +msgid "could not set maximum SSL protocol version: %s\n" +msgstr "kunde inte sätta maximal SSL-protokollversion: %s\n" -#: fe-secure-openssl.c:931 +#: fe-secure-openssl.c:930 #, c-format msgid "could not read root certificate file \"%s\": %s\n" msgstr "kunde inte läsa root-certifikatfilen \"%s\": %s\n" -#: fe-secure-openssl.c:975 +#: fe-secure-openssl.c:974 msgid "" "could not get home directory to locate root certificate file\n" "Either provide the file or change sslmode to disable server certificate verification.\n" @@ -1183,7 +1183,7 @@ msgstr "" "kunde inte hämta hemkatalogen för att lokalisera root-certifikatfilen\n" "Antingen tillhandahåll filen eller ändra sslmode för att stänga av serverns certifikatverifiering.\n" -#: fe-secure-openssl.c:979 +#: fe-secure-openssl.c:978 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -1192,77 +1192,82 @@ msgstr "" "root-certifikatfilen \"%s\" finns inte\n" "Antingen tillhandahåll filen eller ändra sslmode för att stänga av serverns certifikatverifiering.\n" -#: fe-secure-openssl.c:1010 +#: fe-secure-openssl.c:1009 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "kunde inte öppna certifikatfil \"%s\": %s\n" -#: fe-secure-openssl.c:1029 +#: fe-secure-openssl.c:1028 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "kunde inte läsa certifikatfil \"%s\": %s\n" -#: fe-secure-openssl.c:1054 +#: fe-secure-openssl.c:1053 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "kan inte skapa SSL-förbindelse: %s\n" -#: fe-secure-openssl.c:1108 +#: fe-secure-openssl.c:1107 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "kunde inte ladda SSL-motor \"%s\": %s\n" -#: fe-secure-openssl.c:1120 +#: fe-secure-openssl.c:1119 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "kunde inte initiera SSL-motor \"%s\": %s\n" -#: fe-secure-openssl.c:1136 +#: fe-secure-openssl.c:1135 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "kunde inte läsa privat SSL-nyckel \"%s\" från motor \"%s\": %s\n" -#: fe-secure-openssl.c:1150 +#: fe-secure-openssl.c:1149 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "kunde inte ladda privat SSL-nyckel \"%s\" från motor \"%s\": %s\n" -#: fe-secure-openssl.c:1187 +#: fe-secure-openssl.c:1186 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "certifikat tillgängligt, men inte den privata nyckelfilen \"%s\"\n" -#: fe-secure-openssl.c:1195 +#: fe-secure-openssl.c:1194 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "privata nyckelfilen \"%s\" har läsrättigheter för gruppen eller världen; rättigheten skall vara u=rw (0600) eller mindre\n" -#: fe-secure-openssl.c:1220 +#: fe-secure-openssl.c:1219 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "kunde inte ladda privata nyckelfilen \"%s\": %s\n" -#: fe-secure-openssl.c:1238 +#: fe-secure-openssl.c:1237 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "certifikatet matchar inte den privata nyckelfilen \"%s\": %s\n" -#: fe-secure-openssl.c:1333 +#: fe-secure-openssl.c:1337 +#, c-format +msgid "This may indicate that the server does not support any SSL protocol version between %s and %s.\n" +msgstr "Detta kan tyda på att servern inte stöder någon SSL-protokolversion mellan %s och %s.\n" + +#: fe-secure-openssl.c:1373 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "certifikatet kunde inte hämtas: %s\n" -#: fe-secure-openssl.c:1422 +#: fe-secure-openssl.c:1462 #, c-format msgid "no SSL error reported" msgstr "inget SSL-fel rapporterat" -#: fe-secure-openssl.c:1431 +#: fe-secure-openssl.c:1471 #, c-format msgid "SSL error code %lu" msgstr "SSL-felkod %lu" -#: fe-secure-openssl.c:1678 +#: fe-secure-openssl.c:1718 #, c-format msgid "WARNING: sslpassword truncated\n" msgstr "VARNING: sslpassword trunkerat\n" @@ -1281,3 +1286,9 @@ msgstr "kan inte skicka data till servern: %s\n" #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "okänt uttagsfel: 0x%08X/%d" + +#~ msgid "could not set minimum version of SSL protocol: %s\n" +#~ msgstr "kunde inte sätta minimal version för SSL-protokoll: %s\n" + +#~ msgid "could not set maximum version of SSL protocol: %s\n" +#~ msgstr "kunde inte sätta maximal version för SSL-protokollet: %s\n" diff --git a/src/interfaces/libpq/po/uk.po b/src/interfaces/libpq/po/uk.po index 9e8319a52aa13..3920b7d7ba4bd 100644 --- a/src/interfaces/libpq/po/uk.po +++ b/src/interfaces/libpq/po/uk.po @@ -1,238 +1,297 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2018-12-04 20:35+0100\n" -"PO-Revision-Date: 2019-08-13 18:47\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:09+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" "Last-Translator: pasha_golub\n" "Language-Team: Ukrainian\n" -"Language: uk_UA\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_11_STABLE/src/interfaces/libpq/po/libpq.pot\n" +"X-Crowdin-File: /DEV_13/libpq.pot\n" +"X-Crowdin-File-ID: 486\n" -#: fe-auth-scram.c:189 +#: fe-auth-scram.c:212 msgid "malformed SCRAM message (empty message)\n" msgstr "неправильне повідомлення SCRAM (пусте повідомлення)\n" -#: fe-auth-scram.c:195 +#: fe-auth-scram.c:218 msgid "malformed SCRAM message (length mismatch)\n" msgstr "неправильне повідомлення SCRAM (невідповідність довжини)\n" -#: fe-auth-scram.c:244 +#: fe-auth-scram.c:265 msgid "incorrect server signature\n" msgstr "невірний підпис сервера\n" -#: fe-auth-scram.c:253 +#: fe-auth-scram.c:274 msgid "invalid SCRAM exchange state\n" msgstr "неприпустимий стан обміну SCRAM\n" -#: fe-auth-scram.c:276 +#: fe-auth-scram.c:296 #, c-format msgid "malformed SCRAM message (attribute \"%c\" expected)\n" msgstr "неправильне повідомлення SCRAM (очікувався атрибут \"%c\")\n" -#: fe-auth-scram.c:285 +#: fe-auth-scram.c:305 #, c-format msgid "malformed SCRAM message (expected character \"=\" for attribute \"%c\")\n" msgstr "неправильне повідомлення SCRAM (очікувався символ \"=\" для атрибута \"%c\")\n" -#: fe-auth-scram.c:326 +#: fe-auth-scram.c:346 msgid "could not generate nonce\n" msgstr "не вдалося згенерувати одноразовий ідентифікатор\n" -#: fe-auth-scram.c:334 fe-auth-scram.c:401 fe-auth-scram.c:523 -#: fe-auth-scram.c:543 fe-auth-scram.c:569 fe-auth-scram.c:583 -#: fe-auth-scram.c:625 fe-auth.c:227 fe-auth.c:362 fe-auth.c:432 fe-auth.c:467 -#: fe-auth.c:643 fe-auth.c:802 fe-auth.c:1114 fe-auth.c:1262 fe-connect.c:835 -#: fe-connect.c:1264 fe-connect.c:1440 fe-connect.c:1922 fe-connect.c:1945 -#: fe-connect.c:2606 fe-connect.c:4152 fe-connect.c:4404 fe-connect.c:4523 -#: fe-connect.c:4773 fe-connect.c:4853 fe-connect.c:4952 fe-connect.c:5208 -#: fe-connect.c:5237 fe-connect.c:5309 fe-connect.c:5333 fe-connect.c:5351 -#: fe-connect.c:5452 fe-connect.c:5461 fe-connect.c:5817 fe-connect.c:5967 -#: fe-exec.c:2705 fe-exec.c:3452 fe-exec.c:3617 fe-lobj.c:895 -#: fe-protocol2.c:1213 fe-protocol3.c:999 fe-protocol3.c:1685 -#: fe-secure-common.c:110 fe-secure-openssl.c:438 fe-secure-openssl.c:1025 +#: fe-auth-scram.c:356 fe-auth-scram.c:431 fe-auth-scram.c:579 +#: fe-auth-scram.c:600 fe-auth-scram.c:626 fe-auth-scram.c:641 +#: fe-auth-scram.c:691 fe-auth-scram.c:725 fe-auth.c:289 fe-auth.c:359 +#: fe-auth.c:394 fe-auth.c:611 fe-auth.c:770 fe-auth.c:1129 fe-auth.c:1277 +#: fe-connect.c:892 fe-connect.c:1419 fe-connect.c:1595 fe-connect.c:2200 +#: fe-connect.c:2223 fe-connect.c:2952 fe-connect.c:4598 fe-connect.c:4854 +#: fe-connect.c:4973 fe-connect.c:5226 fe-connect.c:5306 fe-connect.c:5405 +#: fe-connect.c:5661 fe-connect.c:5690 fe-connect.c:5762 fe-connect.c:5786 +#: fe-connect.c:5804 fe-connect.c:5905 fe-connect.c:5914 fe-connect.c:6270 +#: fe-connect.c:6420 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 +#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1207 fe-protocol3.c:995 +#: fe-protocol3.c:1699 fe-secure-common.c:110 fe-secure-gssapi.c:504 +#: fe-secure-openssl.c:440 fe-secure-openssl.c:1091 msgid "out of memory\n" msgstr "недостатньо пам'яті\n" -#: fe-auth-scram.c:561 +#: fe-auth-scram.c:364 +msgid "could not encode nonce\n" +msgstr "не вдалося закодувати одноразовий ідентифікатор\n" + +#: fe-auth-scram.c:563 +msgid "could not encode client proof\n" +msgstr "не вдалося закодувати підтвердження клієнта\n" + +#: fe-auth-scram.c:618 msgid "invalid SCRAM response (nonce mismatch)\n" msgstr "неприпустима відповідь SCRAM (невідповідність одноразового ідентифікатора)\n" -#: fe-auth-scram.c:600 +#: fe-auth-scram.c:651 +msgid "malformed SCRAM message (invalid salt)\n" +msgstr "неправильне повідомлення SCRAM (неприпустима сіль)\n" + +#: fe-auth-scram.c:665 msgid "malformed SCRAM message (invalid iteration count)\n" msgstr "неправильне повідомлення SCRAM (неприпустима кількість ітерацій)\n" -#: fe-auth-scram.c:606 +#: fe-auth-scram.c:671 msgid "malformed SCRAM message (garbage at end of server-first-message)\n" msgstr "неправильне повідомлення SCRAM (сміття в кінці першого повідомлення сервера)\n" -#: fe-auth-scram.c:636 +#: fe-auth-scram.c:702 #, c-format msgid "error received from server in SCRAM exchange: %s\n" msgstr "отримано помилку від сервера під час обміну SCRAM: %s\n" -#: fe-auth-scram.c:652 +#: fe-auth-scram.c:718 msgid "malformed SCRAM message (garbage at end of server-final-message)\n" msgstr "неправильне повідомлення SCRAM (сміття в кінці останнього повідомлення сервера)\n" -#: fe-auth-scram.c:660 +#: fe-auth-scram.c:737 msgid "malformed SCRAM message (invalid server signature)\n" msgstr "неправильне повідомлення SCRAM (неприпустимий підпис сервера)\n" -#: fe-auth.c:122 +#: fe-auth.c:76 #, c-format msgid "out of memory allocating GSSAPI buffer (%d)\n" msgstr "недостатньо пам'яті для буфера GSSAPI (%d)\n" -#: fe-auth.c:177 +#: fe-auth.c:131 msgid "GSSAPI continuation error" msgstr "Помилка продовження у GSSAPI" -#: fe-auth.c:207 fe-auth.c:461 fe-secure-common.c:98 +#: fe-auth.c:158 fe-auth.c:388 fe-gssapi-common.c:98 fe-secure-common.c:98 msgid "host name must be specified\n" msgstr "потрібно вказати ім’я хоста\n" -#: fe-auth.c:214 +#: fe-auth.c:165 msgid "duplicate GSS authentication request\n" msgstr "дублікат запиту автентифікації GSS\n" -#: fe-auth.c:240 -msgid "GSSAPI name import error" -msgstr "Помилка імпорту імені у GSSAPI" - -#: fe-auth.c:303 +#: fe-auth.c:230 #, c-format msgid "out of memory allocating SSPI buffer (%d)\n" msgstr "недостатньо пам'яті для буфера SSPI (%d)\n" -#: fe-auth.c:351 +#: fe-auth.c:278 msgid "SSPI continuation error" msgstr "Помилка продовження SSPI" -#: fe-auth.c:422 +#: fe-auth.c:349 msgid "duplicate SSPI authentication request\n" msgstr "дублікат запиту автентифікації SSPI\n" -#: fe-auth.c:447 +#: fe-auth.c:374 msgid "could not acquire SSPI credentials" msgstr "не вдалось отримати облікові дані SSPI" -#: fe-auth.c:501 +#: fe-auth.c:429 +msgid "channel binding required, but SSL not in use\n" +msgstr "необхідно зв’язування каналів, але SSL не використовується\n" + +#: fe-auth.c:436 msgid "duplicate SASL authentication request\n" msgstr "дублікат запиту автентифікації SASL\n" -#: fe-auth.c:549 +#: fe-auth.c:492 +msgid "channel binding is required, but client does not support it\n" +msgstr "потрібно зв'язування каналів, але клієнт не підтримує його\n" + +#: fe-auth.c:509 msgid "server offered SCRAM-SHA-256-PLUS authentication over a non-SSL connection\n" msgstr "сервер запропонував автентифікацію SCRAM-SHA-256-PLUS через підключення без SSL\n" -#: fe-auth.c:561 +#: fe-auth.c:521 msgid "none of the server's SASL authentication mechanisms are supported\n" msgstr "жоден з серверних механізмів автентифікації SASL не підтримується\n" -#: fe-auth.c:667 +#: fe-auth.c:529 +msgid "channel binding is required, but server did not offer an authentication method that supports channel binding\n" +msgstr "потрібно зв'язування каналів, але сервер не запропонував метод аутентифікації, який підтримує зв’язування каналів\n" + +#: fe-auth.c:635 #, c-format msgid "out of memory allocating SASL buffer (%d)\n" msgstr "недостатньо пам'яті для буфера SASL (%d)\n" -#: fe-auth.c:692 +#: fe-auth.c:660 msgid "AuthenticationSASLFinal received from server, but SASL authentication was not completed\n" msgstr "Від сервера отримано AuthenticationSASLFinal, але автентифікація SASL не була завершена\n" -#: fe-auth.c:769 +#: fe-auth.c:737 msgid "SCM_CRED authentication method not supported\n" msgstr "Спосіб автентифікації SCM_CRED не підтримується\n" -#: fe-auth.c:860 +#: fe-auth.c:836 +msgid "channel binding required, but server authenticated client without channel binding\n" +msgstr "потрібно зв'язування каналів, але сервер автентифікував клієнта без зв’язування каналів\n" + +#: fe-auth.c:842 +msgid "channel binding required but not supported by server's authentication request\n" +msgstr "потрібно зв'язування каналів, але не підтримується запитом на аутентифікацію сервера\n" + +#: fe-auth.c:875 msgid "Kerberos 4 authentication not supported\n" msgstr "Автентифікація Kerberos 4 не підтримується\n" -#: fe-auth.c:865 +#: fe-auth.c:880 msgid "Kerberos 5 authentication not supported\n" msgstr "Автентифікація Kerberos 5 не підтримується\n" -#: fe-auth.c:936 +#: fe-auth.c:951 msgid "GSSAPI authentication not supported\n" msgstr "Автентифікація GSSAPI не підтримується\n" -#: fe-auth.c:968 +#: fe-auth.c:983 msgid "SSPI authentication not supported\n" msgstr "Автентифікація SSPI не підтримується\n" -#: fe-auth.c:976 +#: fe-auth.c:991 msgid "Crypt authentication not supported\n" msgstr "Автентифікація Crypt не підтримується\n" -#: fe-auth.c:1042 +#: fe-auth.c:1057 #, c-format msgid "authentication method %u not supported\n" msgstr "спосіб автентифікації %u не підтримується\n" -#: fe-auth.c:1089 +#: fe-auth.c:1104 #, c-format msgid "user name lookup failure: error code %lu\n" msgstr "невдала підстановка імені користувача: код помилки %lu\n" -#: fe-auth.c:1099 fe-connect.c:2533 +#: fe-auth.c:1114 fe-connect.c:2834 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "не вдалося знайти локального користувача за ідентифікатором: %d: %s\n" -#: fe-auth.c:1104 fe-connect.c:2538 +#: fe-auth.c:1119 fe-connect.c:2839 #, c-format msgid "local user with ID %d does not exist\n" msgstr "локального користувача з ідентифікатором %d не існує\n" -#: fe-auth.c:1206 +#: fe-auth.c:1221 msgid "unexpected shape of result set returned for SHOW\n" msgstr "неочікувану форму набору результатів повернуто для SHOW\n" -#: fe-auth.c:1215 +#: fe-auth.c:1230 msgid "password_encryption value too long\n" msgstr "занадто довге значення password_encryption \n" -#: fe-auth.c:1255 +#: fe-auth.c:1270 #, c-format msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "нерозпізнаний алгоритм шифрування пароля \"%s\"\n" -#: fe-connect.c:1018 +#: fe-connect.c:1075 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "не вдалося зіставити %d імен хостів зі %d значеннями hostaddr\n" -#: fe-connect.c:1094 +#: fe-connect.c:1156 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "не вдалося зіставити %d номерів портів з %d хостами\n" -#: fe-connect.c:1190 +#: fe-connect.c:1249 +#, c-format +msgid "invalid channel_binding value: \"%s\"\n" +msgstr "неприпустиме значення channel_binding : \"%s\"\n" + +#: fe-connect.c:1275 #, c-format msgid "invalid sslmode value: \"%s\"\n" msgstr "неприпустиме значення sslmode: \"%s\"\n" -#: fe-connect.c:1211 +#: fe-connect.c:1296 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "значення sslmode \"%s\" неприпустиме, якщо підтримку протоколу SSL не скомпільовано\n" -#: fe-connect.c:1246 +#: fe-connect.c:1317 +#, c-format +msgid "invalid ssl_min_protocol_version value: \"%s\"\n" +msgstr "неприпустиме значення ssl_min_protocol_version: \"%s\"\n" + +#: fe-connect.c:1325 +#, c-format +msgid "invalid ssl_max_protocol_version value: \"%s\"\n" +msgstr "неприпустиме значення ssl_max_protocol_version: \"%s\"\n" + +#: fe-connect.c:1342 +msgid "invalid SSL protocol version range\n" +msgstr "неприпустимий діапазон версії протоколу SSL\n" + +#: fe-connect.c:1357 +#, c-format +msgid "invalid gssencmode value: \"%s\"\n" +msgstr "неприпустиме значення gssencmode: \"%s\"\n" + +#: fe-connect.c:1366 +#, c-format +msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" +msgstr "значення gssencmode \"%s\" неприпустиме, якщо підтримку протоколу GSSAPI не скомпільовано\n" + +#: fe-connect.c:1401 #, c-format msgid "invalid target_session_attrs value: \"%s\"\n" msgstr "неприпустиме значення target_session_attrs: \"%s\"\n" -#: fe-connect.c:1464 +#: fe-connect.c:1619 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "не вдалося встановити сокет у TCP-режим без затримки: %s\n" -#: fe-connect.c:1494 +#: fe-connect.c:1680 #, c-format msgid "could not connect to server: %s\n" "\tIs the server running locally and accepting\n" @@ -241,7 +300,7 @@ msgstr "не вдалося підключитися до сервера: %s\n" " Чи дійсно працює сервер локально і приймає\n" " підключення через домен сокету Unix \"%s\"?\n" -#: fe-connect.c:1552 +#: fe-connect.c:1717 #, c-format msgid "could not connect to server: %s\n" "\tIs the server running on host \"%s\" (%s) and accepting\n" @@ -250,7 +309,7 @@ msgstr "не вдалося підключитися до сервера: %s\n" " Чи дійсно сервер працює на хості \"%s\" (%s) і приймає\n" " TCP/IP підключення на порту %s?\n" -#: fe-connect.c:1561 +#: fe-connect.c:1725 #, c-format msgid "could not connect to server: %s\n" "\tIs the server running on host \"%s\" and accepting\n" @@ -259,408 +318,440 @@ msgstr "не вдалося підключитися до сервера: %s\n" " Чи дійсно сервер працює на хості \"%s\" і приймає\n" " TCP/IP підключення на порту %s?\n" -#: fe-connect.c:1612 fe-connect.c:1644 fe-connect.c:1677 fe-connect.c:2325 +#: fe-connect.c:1795 +#, c-format +msgid "invalid integer value \"%s\" for connection option \"%s\"\n" +msgstr "неприпустиме ціле значення \"%s\" для параметра з'єднання \"%s\"\n" + +#: fe-connect.c:1825 fe-connect.c:1859 fe-connect.c:1894 fe-connect.c:1981 +#: fe-connect.c:2623 #, c-format msgid "setsockopt(%s) failed: %s\n" msgstr "помилка у setsockopt(%s): %s\n" -#: fe-connect.c:1726 +#: fe-connect.c:1947 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "Помилка у WSAIoctl(SIO_KEEPALIVE_VALS): %ui\n" -#: fe-connect.c:2035 +#: fe-connect.c:2313 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "неприпустимий стан підключення, можливо, пошкоджена пам'ять\n" -#: fe-connect.c:2101 +#: fe-connect.c:2379 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "неприпустимий номер порту: \"%s\"\n" -#: fe-connect.c:2117 +#: fe-connect.c:2395 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "не вдалося перекласти ім’я хоста \"%s\" в адресу: %s\n" -#: fe-connect.c:2130 +#: fe-connect.c:2408 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "не вдалося проаналізувати адресу мережі \"%s\": %s\n" -#: fe-connect.c:2143 +#: fe-connect.c:2421 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Шлях Unix-сокету \"%s\" занадто довгий (максимум %d байтів)\n" -#: fe-connect.c:2158 +#: fe-connect.c:2436 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "не вдалося перекласти шлях Unix-сокету \"%s\" в адресу: %s\n" -#: fe-connect.c:2262 +#: fe-connect.c:2560 #, c-format msgid "could not create socket: %s\n" msgstr "не вдалося створити сокет: %s\n" -#: fe-connect.c:2284 +#: fe-connect.c:2582 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "не вдалося встановити сокет у режим без блокування: %s\n" -#: fe-connect.c:2294 +#: fe-connect.c:2592 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "не вдалося встановити сокет у режим закриття по виконанню: %s\n" -#: fe-connect.c:2312 +#: fe-connect.c:2610 msgid "keepalives parameter must be an integer\n" msgstr "параметр keepalives має бути цілим числом\n" -#: fe-connect.c:2450 +#: fe-connect.c:2750 #, c-format msgid "could not get socket error status: %s\n" msgstr "не вдалося отримати статус помилки сокету: %s\n" -#: fe-connect.c:2478 +#: fe-connect.c:2778 #, c-format msgid "could not get client address from socket: %s\n" msgstr "не вдалося отримати адресу клієнта з сокету: %s\n" -#: fe-connect.c:2520 +#: fe-connect.c:2820 msgid "requirepeer parameter is not supported on this platform\n" msgstr "параметр requirepeer не підтримується на цій платформі\n" -#: fe-connect.c:2523 +#: fe-connect.c:2823 #, c-format msgid "could not get peer credentials: %s\n" msgstr "не вдалося отримати облікові дані сервера: %s\n" -#: fe-connect.c:2546 +#: fe-connect.c:2847 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer вказує на \"%s\", але фактичне ім'я вузла \"%s\"\n" -#: fe-connect.c:2580 +#: fe-connect.c:2887 +#, c-format +msgid "could not send GSSAPI negotiation packet: %s\n" +msgstr "не вдалося передати пакет узгодження протоколу GSSAPI: %s\n" + +#: fe-connect.c:2899 +msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" +msgstr "вимагалося шифрування GSSAPI, але не було неможливим (можливо, без кешу облікових даних, підтримки сервера, або використання локального сокета)\n" + +#: fe-connect.c:2926 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "не вдалося передати пакет узгодження протоколу SSL: %s\n" -#: fe-connect.c:2619 +#: fe-connect.c:2965 #, c-format msgid "could not send startup packet: %s\n" msgstr "не вдалося передати стартовий пакет: %s\n" -#: fe-connect.c:2689 +#: fe-connect.c:3035 msgid "server does not support SSL, but SSL was required\n" msgstr "сервер не підтримує протокол SSL, але протокол SSL вимагається\n" -#: fe-connect.c:2715 +#: fe-connect.c:3061 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "отримано неприпустиму відповідь на узгодження SSL: %c\n" -#: fe-connect.c:2792 fe-connect.c:2825 +#: fe-connect.c:3151 +msgid "server doesn't support GSSAPI encryption, but it was required\n" +msgstr "сервер не підтримує шифрування GSSAPI, але це було необхідно\n" + +#: fe-connect.c:3162 +#, c-format +msgid "received invalid response to GSSAPI negotiation: %c\n" +msgstr "отримано неприпустиму відповідь на узгодження GSSAPI: %c\n" + +#: fe-connect.c:3229 fe-connect.c:3260 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "очікувався запит автентифікації від сервера, але отримано %c\n" -#: fe-connect.c:3052 +#: fe-connect.c:3502 msgid "unexpected message from server during startup\n" msgstr "неочікуване повідомлення від сервера під час запуску\n" -#: fe-connect.c:3282 +#: fe-connect.c:3707 #, c-format msgid "could not make a writable connection to server \"%s:%s\"\n" msgstr "не вдалося встановити підключення для запису з сервером \"%s:%s\"\n" -#: fe-connect.c:3328 +#: fe-connect.c:3753 #, c-format msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" msgstr "помилка тесту \"SHOW transaction_read_only\" на сервері \"%s:%s\"\n" -#: fe-connect.c:3343 +#: fe-connect.c:3768 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "неприпустимий стан підключення %d, можливо, пошкоджена пам'ять\n" -#: fe-connect.c:3758 fe-connect.c:3818 +#: fe-connect.c:4204 fe-connect.c:4264 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "Помилка у PGEventProc \"%s\" під час події PGEVT_CONNRESET\n" -#: fe-connect.c:4165 +#: fe-connect.c:4611 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "неприпустима URL-адреса протоколу LDAP \"%s\": схема має бути ldap://\n" -#: fe-connect.c:4180 +#: fe-connect.c:4626 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "неприпустима URL-адреса протоколу LDAP \"%s\": відсутнє унікальне ім'я\n" -#: fe-connect.c:4191 fe-connect.c:4244 +#: fe-connect.c:4638 fe-connect.c:4693 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "неприпустима URL-адреса протоколу LDAP \"%s\": має бути лише один атрибут\n" -#: fe-connect.c:4201 fe-connect.c:4258 +#: fe-connect.c:4649 fe-connect.c:4708 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "неприпустима URL-адреса протоколу LDAP \"%s\": відсутня область пошуку (base/one/sub)\n" -#: fe-connect.c:4212 +#: fe-connect.c:4660 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "неприпустима URL-адреса протоколу LDAP \"%s\": відсутній фільтр\n" -#: fe-connect.c:4233 +#: fe-connect.c:4681 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "неприпустима URL-адреса протоколу LDAP \"%s\": неприпустимий номер порту\n" -#: fe-connect.c:4267 +#: fe-connect.c:4717 msgid "could not create LDAP structure\n" msgstr "не вдалося створити структуру протоколу LDAP\n" -#: fe-connect.c:4343 +#: fe-connect.c:4793 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "помилка підстановки на сервері протоколу LDAP: %s\n" -#: fe-connect.c:4354 +#: fe-connect.c:4804 msgid "more than one entry found on LDAP lookup\n" msgstr "знайдено більше одного входження при підстановці протоколу LDAP\n" -#: fe-connect.c:4355 fe-connect.c:4367 +#: fe-connect.c:4805 fe-connect.c:4817 msgid "no entry found on LDAP lookup\n" msgstr "не знайдено входження при підстановці протоколу LDAP\n" -#: fe-connect.c:4378 fe-connect.c:4391 +#: fe-connect.c:4828 fe-connect.c:4841 msgid "attribute has no values on LDAP lookup\n" msgstr "атрибут не має значення при підстановці протоколу LDAP\n" -#: fe-connect.c:4443 fe-connect.c:4462 fe-connect.c:4991 +#: fe-connect.c:4893 fe-connect.c:4912 fe-connect.c:5444 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "відсутній \"=\" після \"%s\" у рядку інформації про підключення\n" -#: fe-connect.c:4535 fe-connect.c:5176 fe-connect.c:5950 +#: fe-connect.c:4985 fe-connect.c:5629 fe-connect.c:6403 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "неприпустимий параметр підключення \"%s\"\n" -#: fe-connect.c:4551 fe-connect.c:5040 +#: fe-connect.c:5001 fe-connect.c:5493 msgid "unterminated quoted string in connection info string\n" msgstr "відкриті лапки у рядку інформації про підключення\n" -#: fe-connect.c:4634 +#: fe-connect.c:5084 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "не знайдено визначення сервера \"%s\"\n" -#: fe-connect.c:4657 +#: fe-connect.c:5107 #, c-format msgid "service file \"%s\" not found\n" msgstr "не знайдено сервісний файл \"%s\"\n" -#: fe-connect.c:4670 +#: fe-connect.c:5122 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "рядок %d занадто довгий у сервісному файлі \"%s\"\n" -#: fe-connect.c:4741 fe-connect.c:4785 +#: fe-connect.c:5194 fe-connect.c:5238 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "синтаксична помилка у сервісному файлі \"%s\", рядок %d\n" -#: fe-connect.c:4752 +#: fe-connect.c:5205 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "вкладені сервісні специфікації не підтримуються у сервісному файлі \"%s\", рядок %d\n" -#: fe-connect.c:5472 +#: fe-connect.c:5925 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "у внутрішню процедуру аналізу рядка передано помилковий URI: \"%s\"\n" -#: fe-connect.c:5549 +#: fe-connect.c:6002 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "досягнуто кінця рядка під час пошуку відповідного \"]\" в адресі IPv6 URI: \"%s\"\n" -#: fe-connect.c:5556 +#: fe-connect.c:6009 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "IPv6, що знаходиться в URI, не може бути пустим: \"%s\"\n" -#: fe-connect.c:5571 +#: fe-connect.c:6024 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "неочікуваний символ \"%c\" на позиції %d в URI (очікувалося \":\" або \"/\"): \"%s\"\n" -#: fe-connect.c:5700 +#: fe-connect.c:6153 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "зайвий розділювач ключа/значення \"=\" в параметрі запиту URI: \"%s\"\n" -#: fe-connect.c:5720 +#: fe-connect.c:6173 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "відсутній розділювач ключа/значення \"=\" у параметрі запиту URI: \"%s\"\n" -#: fe-connect.c:5771 +#: fe-connect.c:6224 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "неприпустимий параметр запиту URI: \"%s\"\n" -#: fe-connect.c:5845 +#: fe-connect.c:6298 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "неприпустимий токен, закодований відсотками: \"%s\"\n" -#: fe-connect.c:5855 +#: fe-connect.c:6308 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "неприпустиме значення %%00 для значення, закодованого відсотками: \"%s\"\n" -#: fe-connect.c:6201 +#: fe-connect.c:6671 msgid "connection pointer is NULL\n" msgstr "нульове значення вказівника підключення \n" -#: fe-connect.c:6499 +#: fe-connect.c:6967 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "ПОПЕРЕДЖЕННЯ: файл паролів \"%s\" не є простим файлом\n" -#: fe-connect.c:6508 +#: fe-connect.c:6976 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "ПОПЕРЕДЖЕННЯ: до файлу паролів \"%s\" мають доступ група або всі; дозволи мають бути u=rw (0600) або менше\n" -#: fe-connect.c:6602 +#: fe-connect.c:7084 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "пароль отримано з файлу \"%s\"\n" -#: fe-exec.c:437 fe-exec.c:2779 +#: fe-exec.c:444 fe-exec.c:2821 #, c-format msgid "row number %d is out of range 0..%d" msgstr "число рядків %d поза діапазоном 0..%d" -#: fe-exec.c:498 fe-protocol2.c:502 fe-protocol2.c:537 fe-protocol2.c:1056 -#: fe-protocol3.c:208 fe-protocol3.c:235 fe-protocol3.c:252 fe-protocol3.c:332 -#: fe-protocol3.c:727 fe-protocol3.c:958 +#: fe-exec.c:505 fe-protocol2.c:497 fe-protocol2.c:532 fe-protocol2.c:1050 +#: fe-protocol3.c:206 fe-protocol3.c:233 fe-protocol3.c:250 fe-protocol3.c:330 +#: fe-protocol3.c:723 fe-protocol3.c:954 msgid "out of memory" msgstr "недостатньо пам'яті" -#: fe-exec.c:499 fe-protocol2.c:1402 fe-protocol3.c:1893 +#: fe-exec.c:506 fe-protocol2.c:1396 fe-protocol3.c:1907 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:847 +#: fe-exec.c:815 +msgid "write to server failed\n" +msgstr "записати на сервер не вдалося\n" + +#: fe-exec.c:896 msgid "NOTICE" msgstr "ПОВІДОМЛЕННЯ" -#: fe-exec.c:905 +#: fe-exec.c:954 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresult не може підтримувати більше ніж INT_MAX кортежів" -#: fe-exec.c:917 +#: fe-exec.c:966 msgid "size_t overflow" msgstr "переповнення size_t" -#: fe-exec.c:1192 fe-exec.c:1250 fe-exec.c:1296 +#: fe-exec.c:1243 fe-exec.c:1301 fe-exec.c:1347 msgid "command string is a null pointer\n" msgstr "рядок команди є нульовим вказівником\n" -#: fe-exec.c:1256 fe-exec.c:1302 fe-exec.c:1397 +#: fe-exec.c:1307 fe-exec.c:1353 fe-exec.c:1448 msgid "number of parameters must be between 0 and 65535\n" msgstr "число параметрів має бути між 0 і 65535\n" -#: fe-exec.c:1290 fe-exec.c:1391 +#: fe-exec.c:1341 fe-exec.c:1442 msgid "statement name is a null pointer\n" msgstr "ім’я оператора є пустим вказівником\n" -#: fe-exec.c:1310 fe-exec.c:1473 fe-exec.c:2191 fe-exec.c:2393 +#: fe-exec.c:1361 fe-exec.c:1524 fe-exec.c:2233 fe-exec.c:2435 msgid "function requires at least protocol version 3.0\n" msgstr "функція вимагає протокол мінімум версії 3.0\n" -#: fe-exec.c:1428 +#: fe-exec.c:1479 msgid "no connection to the server\n" msgstr "немає підключення до сервера\n" -#: fe-exec.c:1435 +#: fe-exec.c:1486 msgid "another command is already in progress\n" msgstr "інша команда уже в прогресі\n" -#: fe-exec.c:1549 +#: fe-exec.c:1600 msgid "length must be given for binary parameter\n" msgstr "для бінарного параметра має бути надана довжина\n" -#: fe-exec.c:1821 +#: fe-exec.c:1863 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "неочікуваний asyncStatus: %d\n" -#: fe-exec.c:1841 +#: fe-exec.c:1883 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "Помилка у PGEventProc \"%s\" під час події PGEVT_RESULTCREAT\n" -#: fe-exec.c:2001 +#: fe-exec.c:2043 msgid "COPY terminated by new PQexec" msgstr "COPY завершено новим PQexec" -#: fe-exec.c:2009 +#: fe-exec.c:2051 msgid "COPY IN state must be terminated first\n" msgstr "Спочатку стан COPY IN має завершитися\n" -#: fe-exec.c:2029 +#: fe-exec.c:2071 msgid "COPY OUT state must be terminated first\n" msgstr "Спочатку стан COPY OUT має завершитися\n" -#: fe-exec.c:2037 +#: fe-exec.c:2079 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec не дозволяється під час COPY BOTH\n" -#: fe-exec.c:2283 fe-exec.c:2350 fe-exec.c:2440 fe-protocol2.c:1359 -#: fe-protocol3.c:1824 +#: fe-exec.c:2325 fe-exec.c:2392 fe-exec.c:2482 fe-protocol2.c:1353 +#: fe-protocol3.c:1838 msgid "no COPY in progress\n" msgstr "Немає COPY у процесі\n" -#: fe-exec.c:2630 +#: fe-exec.c:2672 msgid "connection in wrong state\n" msgstr "підключення у неправильному стані\n" -#: fe-exec.c:2661 +#: fe-exec.c:2703 msgid "invalid ExecStatusType code" msgstr "неприпустимий код ExecStatusType" -#: fe-exec.c:2688 +#: fe-exec.c:2730 msgid "PGresult is not an error result\n" msgstr "PGresult не є помилковим результатом\n" -#: fe-exec.c:2763 fe-exec.c:2786 +#: fe-exec.c:2805 fe-exec.c:2828 #, c-format msgid "column number %d is out of range 0..%d" msgstr "число стовпців %d поза діапазоном 0..%d" -#: fe-exec.c:2801 +#: fe-exec.c:2843 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "число параметрів %d поза діапазоном 0..%d" -#: fe-exec.c:3111 +#: fe-exec.c:3153 #, c-format msgid "could not interpret result from server: %s" msgstr "не вдалося інтерпретувати результат від сервера: %s" -#: fe-exec.c:3350 fe-exec.c:3434 +#: fe-exec.c:3392 fe-exec.c:3476 msgid "incomplete multibyte character\n" msgstr "неповний мультибайтний символ\n" +#: fe-gssapi-common.c:124 +msgid "GSSAPI name import error" +msgstr "Помилка імпорту імені у GSSAPI" + #: fe-lobj.c:154 msgid "cannot determine OID of function lo_truncate\n" msgstr "неможливо визначити ідентифікатор OID функції lo_truncate\n" @@ -744,203 +835,203 @@ msgstr "неможливо визначити ідентифікатор OID ф msgid "cannot determine OID of function lowrite\n" msgstr "неможливо визначити ідентифікатор OID функції lowrite\n" -#: fe-misc.c:290 +#: fe-misc.c:289 #, c-format msgid "integer of size %lu not supported by pqGetInt" msgstr "pqGetInt не підтримує ціле число розміром %lu" -#: fe-misc.c:326 +#: fe-misc.c:325 #, c-format msgid "integer of size %lu not supported by pqPutInt" msgstr "pqPutInt не підтримує ціле число розміром %lu" -#: fe-misc.c:637 fe-misc.c:838 +#: fe-misc.c:636 fe-misc.c:869 msgid "connection not open\n" msgstr "підключення не відкрито\n" -#: fe-misc.c:807 fe-secure-openssl.c:206 fe-secure-openssl.c:314 -#: fe-secure.c:261 fe-secure.c:371 +#: fe-misc.c:805 fe-secure-openssl.c:209 fe-secure-openssl.c:316 +#: fe-secure.c:267 fe-secure.c:383 msgid "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" "\tbefore or while processing the request.\n" msgstr "сервер неочікувано закрив підключення\n" " Це може означати, що сервер завершив роботу ненормально до або під час обробки запиту.\n" -#: fe-misc.c:1009 +#: fe-misc.c:1063 msgid "timeout expired\n" msgstr "тайм-аут минув\n" -#: fe-misc.c:1054 +#: fe-misc.c:1108 msgid "invalid socket\n" msgstr "неприпустимий сокет\n" -#: fe-misc.c:1077 +#: fe-misc.c:1131 #, c-format msgid "select() failed: %s\n" msgstr "помилка в select(): %s\n" -#: fe-protocol2.c:90 +#: fe-protocol2.c:87 #, c-format msgid "invalid setenv state %c, probably indicative of memory corruption\n" msgstr "неприпустимий стан setenv %c, можливо, пошкоджена пам'ять\n" -#: fe-protocol2.c:389 +#: fe-protocol2.c:384 #, c-format msgid "invalid state %c, probably indicative of memory corruption\n" msgstr "неприпустимий стан %c, можливо, пошкоджена пам'ять\n" -#: fe-protocol2.c:478 fe-protocol3.c:185 +#: fe-protocol2.c:473 fe-protocol3.c:183 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "отримано тип повідомлення 0x%02x від сервера під час бездіяльності" -#: fe-protocol2.c:528 +#: fe-protocol2.c:523 #, c-format msgid "unexpected character %c following empty query response (\"I\" message)" msgstr "неочікуваний символ %c слідом за пустою відповіддю на запит (\"I\" повідомлення)" -#: fe-protocol2.c:594 +#: fe-protocol2.c:589 #, c-format msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" msgstr "сервер передав дані (повідомлення \"D\") без попереднього опису рядка (повідомлення \"T\")" -#: fe-protocol2.c:612 +#: fe-protocol2.c:607 #, c-format msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" msgstr "сервер передав бінарні дані (повідомлення \"B\") без попереднього опису рядка (повідомлення \"T\")" -#: fe-protocol2.c:632 fe-protocol3.c:411 +#: fe-protocol2.c:626 fe-protocol3.c:408 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "неочікувана відповідь від сервера; перший отриманий символ був \"%c\"\n" -#: fe-protocol2.c:761 fe-protocol2.c:936 fe-protocol3.c:626 fe-protocol3.c:853 +#: fe-protocol2.c:755 fe-protocol2.c:930 fe-protocol3.c:622 fe-protocol3.c:849 msgid "out of memory for query result" msgstr "недостатньо пам'яті для результату запиту" -#: fe-protocol2.c:1414 +#: fe-protocol2.c:1408 #, c-format msgid "lost synchronization with server, resetting connection" msgstr "втрачено синхронізацію з сервером, відновлення підключення" -#: fe-protocol2.c:1548 fe-protocol2.c:1580 fe-protocol3.c:2096 +#: fe-protocol2.c:1530 fe-protocol2.c:1562 fe-protocol3.c:2095 #, c-format msgid "protocol error: id=0x%x\n" msgstr "помилка протоколу: id=0x%x\n" -#: fe-protocol3.c:367 +#: fe-protocol3.c:365 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "сервер передав дані (повідомлення \"D\") без попереднього опису рядка (повідомлення \"T\")\n" -#: fe-protocol3.c:432 +#: fe-protocol3.c:429 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "вміст повідомлення не відповідає довжині у типі повідомлення \"%c\"\n" -#: fe-protocol3.c:453 +#: fe-protocol3.c:449 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "втрачено синхронізацію з сервером: отримано тип повідомлення \"%c\", довжина %d\n" -#: fe-protocol3.c:504 fe-protocol3.c:544 +#: fe-protocol3.c:500 fe-protocol3.c:540 msgid "insufficient data in \"T\" message" msgstr "недостатньо даних у повідомленні \"T\"" -#: fe-protocol3.c:577 +#: fe-protocol3.c:573 msgid "extraneous data in \"T\" message" msgstr "зайві дані у повідомленні \"T\"" -#: fe-protocol3.c:690 +#: fe-protocol3.c:686 msgid "extraneous data in \"t\" message" msgstr "зайві дані у повідомленні \"t\"" -#: fe-protocol3.c:761 fe-protocol3.c:793 fe-protocol3.c:811 +#: fe-protocol3.c:757 fe-protocol3.c:789 fe-protocol3.c:807 msgid "insufficient data in \"D\" message" msgstr "зайві дані у повідомленні \"D\"" -#: fe-protocol3.c:767 +#: fe-protocol3.c:763 msgid "unexpected field count in \"D\" message" msgstr "неочікувана кількість полів у повідомленні \"D\"" -#: fe-protocol3.c:820 +#: fe-protocol3.c:816 msgid "extraneous data in \"D\" message" msgstr "зайві дані у повідомленні \"D\"" -#: fe-protocol3.c:1012 +#: fe-protocol3.c:1008 msgid "no error message available\n" msgstr "немає доступного повідомлення про помилку\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1042 fe-protocol3.c:1061 +#: fe-protocol3.c:1056 fe-protocol3.c:1075 #, c-format msgid " at character %s" msgstr " в символі %s" -#: fe-protocol3.c:1074 +#: fe-protocol3.c:1088 #, c-format msgid "DETAIL: %s\n" msgstr "ДЕТАЛІ: %s\n" -#: fe-protocol3.c:1077 +#: fe-protocol3.c:1091 #, c-format msgid "HINT: %s\n" msgstr "ПІДКАЗКА: %s\n" -#: fe-protocol3.c:1080 +#: fe-protocol3.c:1094 #, c-format msgid "QUERY: %s\n" msgstr "ЗАПИТ: %s\n" -#: fe-protocol3.c:1087 +#: fe-protocol3.c:1101 #, c-format msgid "CONTEXT: %s\n" msgstr "КОНТЕКСТ: %s\n" -#: fe-protocol3.c:1096 +#: fe-protocol3.c:1110 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "ІМ'Я СХЕМИ: %s\n" -#: fe-protocol3.c:1100 +#: fe-protocol3.c:1114 #, c-format msgid "TABLE NAME: %s\n" msgstr "ІМ'Я ТАБЛИЦІ: %s\n" -#: fe-protocol3.c:1104 +#: fe-protocol3.c:1118 #, c-format msgid "COLUMN NAME: %s\n" msgstr "ІМ'Я СТОВПЦЯ: %s\n" -#: fe-protocol3.c:1108 +#: fe-protocol3.c:1122 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "ІМ'Я ТИПУ ДАНИХ: %s\n" -#: fe-protocol3.c:1112 +#: fe-protocol3.c:1126 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "ІМ'Я ОБМЕЖЕННЯ: %s\n" -#: fe-protocol3.c:1124 +#: fe-protocol3.c:1138 msgid "LOCATION: " msgstr "РОЗТАШУВАННЯ: " -#: fe-protocol3.c:1126 +#: fe-protocol3.c:1140 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1128 +#: fe-protocol3.c:1142 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1323 +#: fe-protocol3.c:1337 #, c-format msgid "LINE %d: " msgstr "РЯДОК %d: " -#: fe-protocol3.c:1718 +#: fe-protocol3.c:1732 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline можна викликати лише під час COPY OUT\n" @@ -961,43 +1052,81 @@ msgstr "серверний сертифікат \"%s\" не співпадає msgid "could not get server's host name from server certificate\n" msgstr "не вдалося отримати ім'я хосту від серверного сертифікату\n" -#: fe-secure-openssl.c:211 fe-secure-openssl.c:319 fe-secure-openssl.c:1219 +#: fe-secure-gssapi.c:201 +msgid "GSSAPI wrap error" +msgstr "помилка при згортанні GSSAPI" + +#: fe-secure-gssapi.c:209 +msgid "outgoing GSSAPI message would not use confidentiality\n" +msgstr "вихідне повідомлення GSSAPI не буде використовувати конфіденційність\n" + +#: fe-secure-gssapi.c:217 +#, c-format +msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" +msgstr "клієнт намагався відправити переповнений пакет GSSAPI: (%zu > %zu)\n" + +#: fe-secure-gssapi.c:354 fe-secure-gssapi.c:596 +#, c-format +msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" +msgstr "переповнений пакет GSSAPI відправлений сервером: (%zu > %zu)\n" + +#: fe-secure-gssapi.c:393 +msgid "GSSAPI unwrap error" +msgstr "помилка при розгортанні GSSAPI" + +#: fe-secure-gssapi.c:403 +msgid "incoming GSSAPI message did not use confidentiality\n" +msgstr "вхідне повідомлення GSSAPI не використовувує конфіденційність\n" + +#: fe-secure-gssapi.c:642 +msgid "could not initiate GSSAPI security context" +msgstr "не вдалося ініціювати контекст безпеки GSSAPI" + +#: fe-secure-gssapi.c:673 +msgid "GSSAPI size check error" +msgstr "помилка перевірки розміру GSSAPI" + +#: fe-secure-gssapi.c:684 +msgid "GSSAPI context establishment error" +msgstr "помилка встановлення контексту GSSAPI" + +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1291 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "Помилка SSL SYSCALL: %s\n" -#: fe-secure-openssl.c:218 fe-secure-openssl.c:326 fe-secure-openssl.c:1223 +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1295 msgid "SSL SYSCALL error: EOF detected\n" msgstr "Помилка SSL SYSCALL: виявлено EOF\n" -#: fe-secure-openssl.c:229 fe-secure-openssl.c:337 fe-secure-openssl.c:1232 +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1304 #, c-format msgid "SSL error: %s\n" msgstr "Помилка протоколу SSL: %s\n" -#: fe-secure-openssl.c:244 fe-secure-openssl.c:352 +#: fe-secure-openssl.c:247 fe-secure-openssl.c:354 msgid "SSL connection has been closed unexpectedly\n" msgstr "SSL підключення було неочікувано перервано\n" -#: fe-secure-openssl.c:250 fe-secure-openssl.c:358 fe-secure-openssl.c:1241 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1354 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "нерозпізнаний код помилки протоколу SSL: %d\n" -#: fe-secure-openssl.c:398 +#: fe-secure-openssl.c:400 msgid "could not determine server certificate signature algorithm\n" msgstr "не вдалося визначити алгоритм підпису серверного сертифікату\n" -#: fe-secure-openssl.c:419 +#: fe-secure-openssl.c:421 #, c-format msgid "could not find digest for NID %s\n" msgstr "не вдалося знайти дайджест для NID %s\n" -#: fe-secure-openssl.c:429 +#: fe-secure-openssl.c:431 msgid "could not generate peer certificate hash\n" msgstr "не вдалося згенерувати хеш сертифікату вузла\n" -#: fe-secure-openssl.c:486 +#: fe-secure-openssl.c:488 msgid "SSL certificate's name entry is missing\n" msgstr "Відсутня ім'я в сертифікаті SSL\n" @@ -1006,111 +1135,139 @@ msgstr "Відсутня ім'я в сертифікаті SSL\n" msgid "could not create SSL context: %s\n" msgstr "не вдалося створити контекст SSL: %s\n" -#: fe-secure-openssl.c:852 +#: fe-secure-openssl.c:854 #, c-format -msgid "could not read root certificate file \"%s\": %s\n" -msgstr "не вдалося прочитати файл кореневого сертифікату \"%s\": %s\n" +msgid "invalid value \"%s\" for minimum SSL protocol version\n" +msgstr "неприпустиме значення \"%s\" для мінімальної версії протоколу SSL\n" + +#: fe-secure-openssl.c:865 +#, c-format +msgid "could not set minimum SSL protocol version: %s\n" +msgstr "не вдалося встановити мінімальну версію протоколу SSL: %s\n" + +#: fe-secure-openssl.c:883 +#, c-format +msgid "invalid value \"%s\" for maximum SSL protocol version\n" +msgstr "неприпустиме значення \"%s\" для максимальної версії протоколу SSL\n" + +#: fe-secure-openssl.c:894 +#, c-format +msgid "could not set maximum SSL protocol version: %s\n" +msgstr "не вдалося встановити максимальну версію протоколу SSL: %s\n" -#: fe-secure-openssl.c:880 +#: fe-secure-openssl.c:930 #, c-format -msgid "SSL library does not support CRL certificates (file \"%s\")\n" -msgstr "Бібліотека протоколу SSL не підтримує сертифікати CRL (файл \"%s\")\n" +msgid "could not read root certificate file \"%s\": %s\n" +msgstr "не вдалося прочитати файл кореневого сертифікату \"%s\": %s\n" -#: fe-secure-openssl.c:908 +#: fe-secure-openssl.c:974 msgid "could not get home directory to locate root certificate file\n" "Either provide the file or change sslmode to disable server certificate verification.\n" msgstr "не вдалося отримати домашній каталог, щоб знайти файл кореневого сертифікату\n" "Надайте файл або змініть sslmode, щоб вимкнути перевірку серверного сертифікату.\n" -#: fe-secure-openssl.c:912 +#: fe-secure-openssl.c:978 #, c-format msgid "root certificate file \"%s\" does not exist\n" "Either provide the file or change sslmode to disable server certificate verification.\n" msgstr "файлу кореневого сертифікату \"%s\" не існує\n" "Вкажіть повний шлях до файлу або вимкніть перевірку сертифікату сервера, змінивши sslmode.\n" -#: fe-secure-openssl.c:943 +#: fe-secure-openssl.c:1009 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "не вдалося відкрити файл сертифікату \"%s\": %s\n" -#: fe-secure-openssl.c:962 +#: fe-secure-openssl.c:1028 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "не вдалося прочитати файл сертифікату \"%s\": %s\n" -#: fe-secure-openssl.c:987 +#: fe-secure-openssl.c:1053 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "не вдалося встановити SSL-підключення: %s\n" -#: fe-secure-openssl.c:1041 +#: fe-secure-openssl.c:1107 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "не вдалося завантажити модуль SSL \"%s\": %s\n" -#: fe-secure-openssl.c:1053 +#: fe-secure-openssl.c:1119 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "не вдалося ініціалізувати модуль SSL \"%s\": %s\n" -#: fe-secure-openssl.c:1069 +#: fe-secure-openssl.c:1135 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "не вдалося прочитати закритий ключ SSL \"%s\" з модуля \"%s\": %s\n" -#: fe-secure-openssl.c:1083 +#: fe-secure-openssl.c:1149 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "не вдалося завантажити закритий ключ SSL \"%s\" з модуля \"%s\": %s\n" -#: fe-secure-openssl.c:1120 +#: fe-secure-openssl.c:1186 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "сертифікат присутній, але файл закритого ключа \"%s\" ні\n" -#: fe-secure-openssl.c:1128 +#: fe-secure-openssl.c:1194 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "файл закритого ключа \"%s\" має груповий або всесвітній доступ; права повинні бути u=rw (0600) або більш обмежені\n" -#: fe-secure-openssl.c:1139 +#: fe-secure-openssl.c:1219 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "не вдалося завантажити файл закритого ключа \"%s\": %s\n" -#: fe-secure-openssl.c:1153 +#: fe-secure-openssl.c:1237 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "сертифікат не відповідає файлу закритого ключа \"%s\": %s\n" -#: fe-secure-openssl.c:1262 +#: fe-secure-openssl.c:1337 +#, c-format +msgid "This may indicate that the server does not support any SSL protocol version between %s and %s.\n" +msgstr "Це може вказувати, що сервер не підтримує жодної версії протоколу SSL між %s і %s.\n" + +#: fe-secure-openssl.c:1373 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "не вдалося отримати сертифікат: %s\n" -#: fe-secure-openssl.c:1351 +#: fe-secure-openssl.c:1462 #, c-format msgid "no SSL error reported" msgstr "немає повідомлення про помилку SSL" -#: fe-secure-openssl.c:1360 +#: fe-secure-openssl.c:1471 #, c-format msgid "SSL error code %lu" msgstr "Код помилки SSL %lu" -#: fe-secure.c:269 +#: fe-secure-openssl.c:1718 +#, c-format +msgid "WARNING: sslpassword truncated\n" +msgstr "ПОПЕРЕДЖЕННЯ: sslpassword скорочено\n" + +#: fe-secure.c:275 #, c-format msgid "could not receive data from server: %s\n" msgstr "не вдалося отримати дані з серверу: %s\n" -#: fe-secure.c:378 +#: fe-secure.c:390 #, c-format msgid "could not send data to server: %s\n" msgstr "не вдалося передати дані серверу: %s\n" -#: win32.c:317 +#: win32.c:314 #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "нерозпізнана помилка сокету: 0x%08X/%d" +#~ msgid "WARNING: line %d too long in password file \"%s\"\n" +#~ msgstr "ПОПЕРЕДЖЕННЯ: рядок %d занадто довгий у файлі паролю \"%s\"\n" + diff --git a/src/interfaces/libpq/po/zh_CN.po b/src/interfaces/libpq/po/zh_CN.po index 55475f88df21b..c128306e569ad 100644 --- a/src/interfaces/libpq/po/zh_CN.po +++ b/src/interfaces/libpq/po/zh_CN.po @@ -3,240 +3,293 @@ # msgid "" msgstr "" -"Project-Id-Version: libpq (PostgreSQL) 12\n" +"Project-Id-Version: libpq (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-05-22 17:56+0800\n" -"PO-Revision-Date: 2019-06-16 16:25+0800\n" +"POT-Creation-Date: 2020-06-05 01:39+0000\n" +"PO-Revision-Date: 2020-06-20 16:25+0800\n" "Last-Translator: Jie Zhang \n" "Language-Team: Chinese (Simplified) \n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" "X-Generator: Poedit 1.5.7\n" -#: fe-auth-scram.c:183 +#: fe-auth-scram.c:212 msgid "malformed SCRAM message (empty message)\n" msgstr "错误的SCRAM消息(空消息)\n" -#: fe-auth-scram.c:189 +#: fe-auth-scram.c:218 msgid "malformed SCRAM message (length mismatch)\n" msgstr "错误的SCRAM消息(长度不匹配)\n" -#: fe-auth-scram.c:238 +#: fe-auth-scram.c:265 msgid "incorrect server signature\n" msgstr "服务器签名不正确\n" -#: fe-auth-scram.c:247 +#: fe-auth-scram.c:274 msgid "invalid SCRAM exchange state\n" msgstr "SCRAM交换状态无效\n" -#: fe-auth-scram.c:270 +#: fe-auth-scram.c:296 #, c-format msgid "malformed SCRAM message (attribute \"%c\" expected)\n" msgstr "错误的SCRAM消息(应为属性\"%c\")\n" -#: fe-auth-scram.c:279 +#: fe-auth-scram.c:305 #, c-format msgid "malformed SCRAM message (expected character \"=\" for attribute \"%c\")\n" msgstr "错误的SCRAM消息(属性\"%c\"需要字符\"=\")\n" -#: fe-auth-scram.c:320 +#: fe-auth-scram.c:346 msgid "could not generate nonce\n" msgstr "无法生成nonce\n" -#: fe-auth-scram.c:328 fe-auth-scram.c:395 fe-auth-scram.c:517 -#: fe-auth-scram.c:537 fe-auth-scram.c:563 fe-auth-scram.c:577 -#: fe-auth-scram.c:619 fe-auth.c:290 fe-auth.c:360 fe-auth.c:395 fe-auth.c:581 -#: fe-auth.c:740 fe-auth.c:1052 fe-auth.c:1200 fe-connect.c:858 -#: fe-connect.c:1320 fe-connect.c:1496 fe-connect.c:2085 fe-connect.c:2108 -#: fe-connect.c:2830 fe-connect.c:4512 fe-connect.c:4764 fe-connect.c:4883 -#: fe-connect.c:5133 fe-connect.c:5213 fe-connect.c:5312 fe-connect.c:5568 -#: fe-connect.c:5597 fe-connect.c:5669 fe-connect.c:5693 fe-connect.c:5711 -#: fe-connect.c:5812 fe-connect.c:5821 fe-connect.c:6177 fe-connect.c:6327 -#: fe-exec.c:2748 fe-exec.c:3495 fe-exec.c:3660 fe-lobj.c:895 -#: fe-protocol2.c:1213 fe-protocol3.c:999 fe-protocol3.c:1703 -#: fe-secure-common.c:110 fe-secure-openssl.c:438 fe-secure-openssl.c:1025 +#: fe-auth-scram.c:356 fe-auth-scram.c:431 fe-auth-scram.c:579 +#: fe-auth-scram.c:600 fe-auth-scram.c:626 fe-auth-scram.c:641 +#: fe-auth-scram.c:691 fe-auth-scram.c:725 fe-auth.c:289 fe-auth.c:359 +#: fe-auth.c:394 fe-auth.c:611 fe-auth.c:770 fe-auth.c:1129 fe-auth.c:1277 +#: fe-connect.c:886 fe-connect.c:1413 fe-connect.c:1589 fe-connect.c:2199 +#: fe-connect.c:2222 fe-connect.c:2948 fe-connect.c:4617 fe-connect.c:4873 +#: fe-connect.c:4992 fe-connect.c:5245 fe-connect.c:5325 fe-connect.c:5424 +#: fe-connect.c:5680 fe-connect.c:5709 fe-connect.c:5781 fe-connect.c:5805 +#: fe-connect.c:5823 fe-connect.c:5924 fe-connect.c:5933 fe-connect.c:6289 +#: fe-connect.c:6439 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 +#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1207 fe-protocol3.c:995 +#: fe-protocol3.c:1699 fe-secure-common.c:110 fe-secure-gssapi.c:504 +#: fe-secure-openssl.c:440 fe-secure-openssl.c:1091 msgid "out of memory\n" msgstr "内存用尽\n" -#: fe-auth-scram.c:555 +#: fe-auth-scram.c:364 +msgid "could not encode nonce\n" +msgstr "无法编码nonce\n" + +#: fe-auth-scram.c:563 +msgid "could not encode client proof\n" +msgstr "无法对客户端证明进行编码\n" + +#: fe-auth-scram.c:618 msgid "invalid SCRAM response (nonce mismatch)\n" msgstr "SCRAM响应无效(非匹配)\n" -#: fe-auth-scram.c:594 +#: fe-auth-scram.c:651 +msgid "malformed SCRAM message (invalid salt)\n" +msgstr "错误的SCRAM消息 (无效的salt)\n" + +#: fe-auth-scram.c:665 msgid "malformed SCRAM message (invalid iteration count)\n" msgstr "错误的SCRAM消息(迭代计数无效)\n" -#: fe-auth-scram.c:600 +#: fe-auth-scram.c:671 msgid "malformed SCRAM message (garbage at end of server-first-message)\n" msgstr "错误的SCRAM消息 (服务器第一条消息结束时为垃圾消息)\n" -#: fe-auth-scram.c:630 +#: fe-auth-scram.c:702 #, c-format msgid "error received from server in SCRAM exchange: %s\n" msgstr "在SCRAM交换中从服务器接收到错误: %s\n" -#: fe-auth-scram.c:646 +#: fe-auth-scram.c:718 msgid "malformed SCRAM message (garbage at end of server-final-message)\n" msgstr "错误的SCRAM消息 (服务器最后一条消息结束时为垃圾消息)\n" -#: fe-auth-scram.c:654 +#: fe-auth-scram.c:737 msgid "malformed SCRAM message (invalid server signature)\n" msgstr "错误的SCRAM消息 (服务器签名无效)\n" -#: fe-auth.c:77 +#: fe-auth.c:76 #, c-format msgid "out of memory allocating GSSAPI buffer (%d)\n" msgstr "在分配GSSAPI缓冲区(%d)时内存用尽\n" -#: fe-auth.c:132 +#: fe-auth.c:131 msgid "GSSAPI continuation error" msgstr "GSSAPI连续出现错误" -#: fe-auth.c:159 fe-auth.c:389 fe-secure-common.c:98 +#: fe-auth.c:158 fe-auth.c:388 fe-gssapi-common.c:98 fe-secure-common.c:98 msgid "host name must be specified\n" msgstr "必须指定主机名\n" -#: fe-auth.c:166 +#: fe-auth.c:165 msgid "duplicate GSS authentication request\n" msgstr "重复的GSS认证请求\n" -#: fe-auth.c:231 +#: fe-auth.c:230 #, c-format msgid "out of memory allocating SSPI buffer (%d)\n" msgstr "在分配SSPI缓冲区(%d)时内存用尽\n" -#: fe-auth.c:279 +#: fe-auth.c:278 msgid "SSPI continuation error" msgstr "SSPI连续出现错误" -#: fe-auth.c:350 +#: fe-auth.c:349 msgid "duplicate SSPI authentication request\n" msgstr "重复的SSPI认证请求\n" -#: fe-auth.c:375 +#: fe-auth.c:374 msgid "could not acquire SSPI credentials" msgstr "无法获得SSPI证书" #: fe-auth.c:429 +msgid "channel binding required, but SSL not in use\n" +msgstr "需要通道绑定,但未使用SSL\n" + +#: fe-auth.c:436 msgid "duplicate SASL authentication request\n" msgstr "重复的SASL认证请求\n" -#: fe-auth.c:487 +#: fe-auth.c:492 +msgid "channel binding is required, but client does not support it\n" +msgstr "通道绑定是必需的,但客户端不支持它\n" + +#: fe-auth.c:509 msgid "server offered SCRAM-SHA-256-PLUS authentication over a non-SSL connection\n" msgstr "服务器通过非SSL连接提供了SCRAM-SHA-256-PLUS身份验证\n" -#: fe-auth.c:499 +#: fe-auth.c:521 msgid "none of the server's SASL authentication mechanisms are supported\n" msgstr "不支持服务器的SASL身份验证机制\n" -#: fe-auth.c:605 +#: fe-auth.c:529 +msgid "channel binding is required, but server did not offer an authentication method that supports channel binding\n" +msgstr "需要通道绑定,但服务器未提供支持通道绑定的身份验证方法\n" + +#: fe-auth.c:635 #, c-format msgid "out of memory allocating SASL buffer (%d)\n" msgstr "在分配SASL缓冲区(%d)时内存用尽\n" -#: fe-auth.c:630 +#: fe-auth.c:660 msgid "AuthenticationSASLFinal received from server, but SASL authentication was not completed\n" msgstr "从服务器接收到AuthenticationSASLFinal,但未完成SASL身份验证\n" -#: fe-auth.c:707 +#: fe-auth.c:737 msgid "SCM_CRED authentication method not supported\n" msgstr "不支持 SCM_CRED 认证方式\n" -#: fe-auth.c:798 +#: fe-auth.c:836 +msgid "channel binding required, but server authenticated client without channel binding\n" +msgstr "需要通道绑定,但服务器验证的客户端没有通道绑定\n" + +#: fe-auth.c:842 +msgid "channel binding required but not supported by server's authentication request\n" +msgstr "服务器的身份验证请求需要但不支持通道绑定\n" + +#: fe-auth.c:875 msgid "Kerberos 4 authentication not supported\n" msgstr "不支持 Kerberos 4 认证\n" -#: fe-auth.c:803 +#: fe-auth.c:880 msgid "Kerberos 5 authentication not supported\n" msgstr "不支持 Kerberos 5 认证\n" -#: fe-auth.c:874 +#: fe-auth.c:951 msgid "GSSAPI authentication not supported\n" msgstr "不支持GSSAPI认证\n" -#: fe-auth.c:906 +#: fe-auth.c:983 msgid "SSPI authentication not supported\n" msgstr "不支持SSPI认证\n" -#: fe-auth.c:914 +#: fe-auth.c:991 msgid "Crypt authentication not supported\n" msgstr "不支持Crypt认证\n" -#: fe-auth.c:980 +#: fe-auth.c:1057 #, c-format msgid "authentication method %u not supported\n" msgstr "不支持 %u 认证方式\n" -#: fe-auth.c:1027 +#: fe-auth.c:1104 #, c-format msgid "user name lookup failure: error code %lu\n" msgstr "用户名查找失败:错误代码%lu\n" -#: fe-auth.c:1037 fe-connect.c:2717 +#: fe-auth.c:1114 fe-connect.c:2830 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "无法查找本地用户ID %d: %s\n" -#: fe-auth.c:1042 fe-connect.c:2722 +#: fe-auth.c:1119 fe-connect.c:2835 #, c-format msgid "local user with ID %d does not exist\n" msgstr "ID 为 %d 的本地用户不存在\n" -#: fe-auth.c:1144 +#: fe-auth.c:1221 msgid "unexpected shape of result set returned for SHOW\n" msgstr "SHOW出现意外的结果状态\n" -#: fe-auth.c:1153 +#: fe-auth.c:1230 msgid "password_encryption value too long\n" msgstr "密码_加密值太长\n" -#: fe-auth.c:1193 +#: fe-auth.c:1270 #, c-format msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "无法识别的密码加密算法 \"%s\"\n" -#: fe-connect.c:1041 +#: fe-connect.c:1069 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "无法将主机名 %d 与主机地址 %d匹配\n" -#: fe-connect.c:1117 +#: fe-connect.c:1150 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "无法将端口号 %d与主机%d匹配\n" -#: fe-connect.c:1213 +#: fe-connect.c:1243 +#, c-format +msgid "invalid channel_binding value: \"%s\"\n" +msgstr "通道绑定值无效: \"%s\"\n" + +#: fe-connect.c:1269 #, c-format msgid "invalid sslmode value: \"%s\"\n" msgstr "无效的 sslmode 值: \"%s\"\n" -#: fe-connect.c:1234 +#: fe-connect.c:1290 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "无效的 sslmode 值 \"%s\" 当没有把 SSL 支持编译进来时\n" -#: fe-connect.c:1258 +#: fe-connect.c:1311 +#, c-format +msgid "invalid ssl_min_protocol_version value: \"%s\"\n" +msgstr "无效的 ssl_min_protocol_version 值: \"%s\"\n" + +#: fe-connect.c:1319 +#, c-format +msgid "invalid ssl_max_protocol_version value: \"%s\"\n" +msgstr "无效的 ssl_max_protocol_version 值: \"%s\"\n" + +#: fe-connect.c:1336 +msgid "invalid SSL protocol version range\n" +msgstr "无效的SSL协议版本范围\n" + +#: fe-connect.c:1351 #, c-format msgid "invalid gssencmode value: \"%s\"\n" msgstr "无效的 gssencmode 值: \"%s\"\n" -#: fe-connect.c:1268 -msgid "no GSSAPI support; cannot require GSSAPI\n" -msgstr "没有GSSAPI支持;不能请求GSSAPI\n" +#: fe-connect.c:1360 +#, c-format +msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" +msgstr "无效的 gssencmode 值 \"%s\" 当没有把 GSSAPI 支持编译进来时\n" -#: fe-connect.c:1302 +#: fe-connect.c:1395 #, c-format msgid "invalid target_session_attrs value: \"%s\"\n" msgstr "无效的 target_session_attrs 值: \"%s\"\n" -#: fe-connect.c:1520 +#: fe-connect.c:1613 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "无法将套接字设置为 TCP 无延迟模式: %s\n" -#: fe-connect.c:1583 +#: fe-connect.c:1674 #, c-format msgid "" "could not connect to server: %s\n" @@ -247,7 +300,7 @@ msgstr "" "\t服务器是否在本地运行并且在 Unix 域套接字\n" "\t\"%s\"上准备接受联接?\n" -#: fe-connect.c:1620 +#: fe-connect.c:1711 #, c-format msgid "" "could not connect to server: %s\n" @@ -258,7 +311,7 @@ msgstr "" "\t服务器是否在主机 \"%s\"(%s) 上运行并且准备接受在端口\n" "%s 上的 TCP/IP 联接?\n" -#: fe-connect.c:1628 +#: fe-connect.c:1719 #, c-format msgid "" "could not connect to server: %s\n" @@ -269,436 +322,445 @@ msgstr "" "\t服务器是否在主机 \"%s\" 上运行并且准备接受在端口\n" "%s 上的 TCP/IP 联接?\n" -#: fe-connect.c:1679 +#: fe-connect.c:1789 #, c-format -msgid "invalid integer value \"%s\" for keyword \"%s\"\n" -msgstr "关键字\"%2$s\"的整数值\"%1$s\"无效\n" +msgid "invalid integer value \"%s\" for connection option \"%s\"\n" +msgstr "连接选项\"%2$s\"的整数值\"%1$s\"无效\n" -#: fe-connect.c:1709 fe-connect.c:1743 fe-connect.c:1778 fe-connect.c:1865 -#: fe-connect.c:2507 +#: fe-connect.c:1819 fe-connect.c:1853 fe-connect.c:1888 fe-connect.c:1975 +#: fe-connect.c:2619 #, c-format msgid "setsockopt(%s) failed: %s\n" msgstr "执行setsockopt(%s) 失败: %s\n" -#: fe-connect.c:1831 +#: fe-connect.c:1941 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "执行WSAIoctl(SIO_KEEPALIVE_VALS)失败:%u\n" -#: fe-connect.c:2199 +#: fe-connect.c:2312 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "无效的联接状态, 可能是存储器数据被破坏的标志\n" -#: fe-connect.c:2267 +#: fe-connect.c:2378 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "无效端口号: \"%s\"\n" -#: fe-connect.c:2283 +#: fe-connect.c:2394 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "无法解释主机名 \"%s\" 到地址: %s\n" -#: fe-connect.c:2296 +#: fe-connect.c:2407 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "无法分析网络地址\"%s\": %s\n" -#: fe-connect.c:2309 +#: fe-connect.c:2420 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Unix域的套接字路径\"%s\"超长(最大为%d字节)\n" -#: fe-connect.c:2324 +#: fe-connect.c:2435 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "无法解释 Unix-domian 套接字路径 \"%s\" 到地址: %s\n" -#: fe-connect.c:2444 +#: fe-connect.c:2556 #, c-format msgid "could not create socket: %s\n" msgstr "无法创建套接字: %s\n" -#: fe-connect.c:2466 +#: fe-connect.c:2578 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "无法设置套接字为非阻塞模式: %s\n" -#: fe-connect.c:2476 +#: fe-connect.c:2588 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "无法将套接字设置为执行时关闭 (close-on-exec) 模式: %s\n" -#: fe-connect.c:2494 +#: fe-connect.c:2606 msgid "keepalives parameter must be an integer\n" msgstr "参数keepalives必须是一个整数\n" -#: fe-connect.c:2634 +#: fe-connect.c:2746 #, c-format msgid "could not get socket error status: %s\n" msgstr "无法获取套接字错误状态: %s\n" -#: fe-connect.c:2662 +#: fe-connect.c:2774 #, c-format msgid "could not get client address from socket: %s\n" msgstr "无法从套接字获取客户端地址: %s\n" -#: fe-connect.c:2704 +#: fe-connect.c:2816 msgid "requirepeer parameter is not supported on this platform\n" msgstr "在此平台上不支持requirepeer参数\n" -#: fe-connect.c:2707 +#: fe-connect.c:2819 #, c-format msgid "could not get peer credentials: %s\n" msgstr "无法获得对等(peer)证书:%s\n" -#: fe-connect.c:2730 +#: fe-connect.c:2843 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "期望对方用户指定值为 \"%s\", 但实际的对方用户名为 \"%s\"\n" -#: fe-connect.c:2765 +#: fe-connect.c:2883 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "无法发送 GSSAPI 握手包: %s\n" -#: fe-connect.c:2777 -msgid "GSSAPI encryption required, but was impossible (possibly no ccache, no server support, or using a local socket)\n" -msgstr "需要GSSAPI加密,但不可能(可能没有ccache、服务器不支持或使用本地套接字)\n" +#: fe-connect.c:2895 +msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" +msgstr "需要GSSAPI加密,但不可能(可能没有凭据缓存、服务器不支持或使用本地套接字)\n" -#: fe-connect.c:2804 +#: fe-connect.c:2922 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "无法发送 SSL 握手包: %s\n" -#: fe-connect.c:2843 +#: fe-connect.c:2961 #, c-format msgid "could not send startup packet: %s\n" msgstr "无法发送启动包: %s\n" -#: fe-connect.c:2913 +#: fe-connect.c:3031 msgid "server does not support SSL, but SSL was required\n" msgstr "服务器不支持 SSL, 但是要求使用 SSL\n" -#: fe-connect.c:2939 +#: fe-connect.c:3057 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "收到对 SSL 握手的无效响应: %c\n" -#: fe-connect.c:3029 +#: fe-connect.c:3147 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "服务器不支持 GSSAPI, 但这是必须的\n" -#: fe-connect.c:3040 +#: fe-connect.c:3158 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "收到对 GSSAPI 握手的无效响应: %c\n" -#: fe-connect.c:3108 fe-connect.c:3141 +#: fe-connect.c:3225 fe-connect.c:3256 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "期待来自服务器的认证请求, 却收到 %c\n" -#: fe-connect.c:3388 +#: fe-connect.c:3502 msgid "unexpected message from server during startup\n" msgstr "启动过程中收到来自服务器的非预期信息\n" -#: fe-connect.c:3615 +#: fe-connect.c:3707 #, c-format msgid "could not make a writable connection to server \"%s:%s\"\n" msgstr "无法与服务器建立可写连接\"%s:%s\"\n" -#: fe-connect.c:3661 +#: fe-connect.c:3753 #, c-format msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" msgstr "在服务器\"%s:%s\"上测试\"SHOW transaction_read_only\"失败\n" -#: fe-connect.c:3676 +#: fe-connect.c:3768 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "无效的连接状态 %d, 这可能表示内存出现问题\n" -#: fe-connect.c:4118 fe-connect.c:4178 +#: fe-connect.c:4223 fe-connect.c:4283 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "在PGEVT_CONNRESET事件触发期间执行PGEventProc \"%s\"错误\n" -#: fe-connect.c:4525 +#: fe-connect.c:4630 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "无效LDAP URL\"%s\": 模式必须是ldap://\n" -#: fe-connect.c:4540 +#: fe-connect.c:4645 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "无效LDAP URL \"%s\": 丢失可区分的名称\n" -#: fe-connect.c:4551 fe-connect.c:4604 +#: fe-connect.c:4657 fe-connect.c:4712 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "无效LDAP URL \"%s\": 只能有一个属性\n" -#: fe-connect.c:4561 fe-connect.c:4618 +#: fe-connect.c:4668 fe-connect.c:4727 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "无效LDAP URL \"%s\": 必须有搜索范围(base/one/sub)\n" -#: fe-connect.c:4572 +#: fe-connect.c:4679 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "无效的 LDAP URL \"%s\": 没有过滤器\n" -#: fe-connect.c:4593 +#: fe-connect.c:4700 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "无效LDAP URL \"%s\": 无效端口号\n" -#: fe-connect.c:4627 +#: fe-connect.c:4736 msgid "could not create LDAP structure\n" msgstr "无法创建LDAP结构\n" -#: fe-connect.c:4703 +#: fe-connect.c:4812 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "在LDAP服务器上的查找失败: %s\n" -#: fe-connect.c:4714 +#: fe-connect.c:4823 msgid "more than one entry found on LDAP lookup\n" msgstr "在LDAP搜索上找到多个入口\n" -#: fe-connect.c:4715 fe-connect.c:4727 +#: fe-connect.c:4824 fe-connect.c:4836 msgid "no entry found on LDAP lookup\n" msgstr "在LDAP查找上没有发现入口\n" -#: fe-connect.c:4738 fe-connect.c:4751 +#: fe-connect.c:4847 fe-connect.c:4860 msgid "attribute has no values on LDAP lookup\n" msgstr "在LDAP查找上的属性没有值\n" -#: fe-connect.c:4803 fe-connect.c:4822 fe-connect.c:5351 +#: fe-connect.c:4912 fe-connect.c:4931 fe-connect.c:5463 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "在联接信息字串里的 \"%s\" 后面缺少 \"=\"\n" -#: fe-connect.c:4895 fe-connect.c:5536 fe-connect.c:6310 +#: fe-connect.c:5004 fe-connect.c:5648 fe-connect.c:6422 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "非法联接选项 \"%s\"\n" -#: fe-connect.c:4911 fe-connect.c:5400 +#: fe-connect.c:5020 fe-connect.c:5512 msgid "unterminated quoted string in connection info string\n" msgstr "联接信息字串中未结束的引号字串\n" -#: fe-connect.c:4994 +#: fe-connect.c:5103 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "错误:没有找到服务\"%s\"的定义\n" -#: fe-connect.c:5017 +#: fe-connect.c:5126 #, c-format msgid "service file \"%s\" not found\n" msgstr "错误:没有找到服务文件\"%s\"\n" -#: fe-connect.c:5030 +#: fe-connect.c:5141 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "在服务文件\"%2$s\"中的第%1$d行的长度太长\n" -#: fe-connect.c:5101 fe-connect.c:5145 +#: fe-connect.c:5213 fe-connect.c:5257 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "在服务文件\"%s\"的第%d行出现语法错误\n" -#: fe-connect.c:5112 +#: fe-connect.c:5224 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "在服务文件\"%s\"的第%d行出现不支持的嵌套服务说明\n" -#: fe-connect.c:5832 +#: fe-connect.c:5944 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "无效的URI传入内部解析器处理程序: \"%s\"\n" -#: fe-connect.c:5909 +#: fe-connect.c:6021 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "在 URI: \"%s\"中的IPv6主机地址里查找匹配符\"]\"时遇到了字符串结束符\n" -#: fe-connect.c:5916 +#: fe-connect.c:6028 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "URI:\"%s\"中的IPv6主机地址可能不为空\n" -#: fe-connect.c:5931 +#: fe-connect.c:6043 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "非预期的字符\"%c\"出现在在位置%d, URI (expected \":\" or \"/\"):\"%s\"\n" -#: fe-connect.c:6060 +#: fe-connect.c:6172 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "遇到多余的键/值分隔符\"=\"在URI查询参数里: \"%s\"\n" -#: fe-connect.c:6080 +#: fe-connect.c:6192 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "缺少相应的键/值分隔符\"=\"在URI查询参数里: \"%s\"\n" -#: fe-connect.c:6131 +#: fe-connect.c:6243 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "无效的URI查询参数: \"%s\"\n" -#: fe-connect.c:6205 +#: fe-connect.c:6317 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "无效的百分号编码令牌: \"%s\"\n" -#: fe-connect.c:6215 +#: fe-connect.c:6327 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "在百分值编码的值: \"%s\"里禁止使用 %%00\n" -#: fe-connect.c:6580 +#: fe-connect.c:6690 msgid "connection pointer is NULL\n" msgstr "联接指针是 NULL\n" -#: fe-connect.c:6878 +#: fe-connect.c:6989 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "警告: 口令文件\"%s\"不是普通文本文件\n" -#: fe-connect.c:6887 +#: fe-connect.c:6998 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "警告: 口令文件\"%s\"的访问权限过大; 权限应设置 为 u=rw (0600)或更少\n" -#: fe-connect.c:6981 +#: fe-connect.c:7039 +#, c-format +msgid "WARNING: line %d too long in password file \"%s\"\n" +msgstr "警告:在密码文件\"%2$s\"中的第%1$d行的长度太长\n" + +#: fe-connect.c:7118 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "从文件\"%s\"中获取口令\n" -#: fe-exec.c:445 fe-exec.c:2822 +#: fe-exec.c:444 fe-exec.c:2821 #, c-format msgid "row number %d is out of range 0..%d" msgstr "行号码 %d 超出了范围 0..%d" -#: fe-exec.c:506 fe-protocol2.c:502 fe-protocol2.c:537 fe-protocol2.c:1056 -#: fe-protocol3.c:208 fe-protocol3.c:235 fe-protocol3.c:252 fe-protocol3.c:332 -#: fe-protocol3.c:727 fe-protocol3.c:958 +#: fe-exec.c:505 fe-protocol2.c:497 fe-protocol2.c:532 fe-protocol2.c:1050 +#: fe-protocol3.c:206 fe-protocol3.c:233 fe-protocol3.c:250 fe-protocol3.c:330 +#: fe-protocol3.c:723 fe-protocol3.c:954 msgid "out of memory" msgstr "内存用尽" -#: fe-exec.c:507 fe-protocol2.c:1402 fe-protocol3.c:1911 +#: fe-exec.c:506 fe-protocol2.c:1396 fe-protocol3.c:1907 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:816 +#: fe-exec.c:815 msgid "write to server failed\n" msgstr "写入服务器失败\n" -#: fe-exec.c:897 +#: fe-exec.c:896 msgid "NOTICE" msgstr "注意" -#: fe-exec.c:955 +#: fe-exec.c:954 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresult不能支持超过INT_MAX元组" -#: fe-exec.c:967 +#: fe-exec.c:966 msgid "size_t overflow" msgstr "size_t溢出" -#: fe-exec.c:1244 fe-exec.c:1302 fe-exec.c:1348 +#: fe-exec.c:1243 fe-exec.c:1301 fe-exec.c:1347 msgid "command string is a null pointer\n" msgstr "命令字串是一个空指针\n" -#: fe-exec.c:1308 fe-exec.c:1354 fe-exec.c:1449 +#: fe-exec.c:1307 fe-exec.c:1353 fe-exec.c:1448 msgid "number of parameters must be between 0 and 65535\n" msgstr "参数的个数必须介于0到65535之间\n" -#: fe-exec.c:1342 fe-exec.c:1443 +#: fe-exec.c:1341 fe-exec.c:1442 msgid "statement name is a null pointer\n" msgstr "声明名字是一个空指针\n" -#: fe-exec.c:1362 fe-exec.c:1525 fe-exec.c:2234 fe-exec.c:2436 +#: fe-exec.c:1361 fe-exec.c:1524 fe-exec.c:2233 fe-exec.c:2435 msgid "function requires at least protocol version 3.0\n" msgstr "函数至少需要 3.0 版本的协议\n" -#: fe-exec.c:1480 +#: fe-exec.c:1479 msgid "no connection to the server\n" msgstr "没有到服务器的联接\n" -#: fe-exec.c:1487 +#: fe-exec.c:1486 msgid "another command is already in progress\n" msgstr "已经有另外一条命令在处理\n" -#: fe-exec.c:1601 +#: fe-exec.c:1600 msgid "length must be given for binary parameter\n" msgstr "对于2进制参数必须指定长度\n" -#: fe-exec.c:1864 +#: fe-exec.c:1863 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "意外的 asyncStatus(异步状态): %d\n" -#: fe-exec.c:1884 +#: fe-exec.c:1883 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "在PGEVT_CONNRESET事件触发期间执行PGEventProc \"%s\"错误\n" -#: fe-exec.c:2044 +#: fe-exec.c:2043 msgid "COPY terminated by new PQexec" msgstr "COPY 被一个新的 PQexec 终止" -#: fe-exec.c:2052 +#: fe-exec.c:2051 msgid "COPY IN state must be terminated first\n" msgstr "COPY IN 状态必须先结束\n" -#: fe-exec.c:2072 +#: fe-exec.c:2071 msgid "COPY OUT state must be terminated first\n" msgstr "COPY OUT 状态必须先结束\n" -#: fe-exec.c:2080 +#: fe-exec.c:2079 msgid "PQexec not allowed during COPY BOTH\n" msgstr "在 COPY BOTH时不允许调用PQexec\n" -#: fe-exec.c:2326 fe-exec.c:2393 fe-exec.c:2483 fe-protocol2.c:1359 -#: fe-protocol3.c:1842 +#: fe-exec.c:2325 fe-exec.c:2392 fe-exec.c:2482 fe-protocol2.c:1353 +#: fe-protocol3.c:1838 msgid "no COPY in progress\n" msgstr "没有正在处理的 COPY\n" -#: fe-exec.c:2673 +#: fe-exec.c:2672 msgid "connection in wrong state\n" msgstr "联接处于错误状态\n" -#: fe-exec.c:2704 +#: fe-exec.c:2703 msgid "invalid ExecStatusType code" msgstr "非法 ExecStatusType 代码" -#: fe-exec.c:2731 +#: fe-exec.c:2730 msgid "PGresult is not an error result\n" msgstr "PGresult不是错误的结果\n" -#: fe-exec.c:2806 fe-exec.c:2829 +#: fe-exec.c:2805 fe-exec.c:2828 #, c-format msgid "column number %d is out of range 0..%d" msgstr "列号码 %d 超出了范围 0..%d" -#: fe-exec.c:2844 +#: fe-exec.c:2843 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "参数号%d超出了范围 0..%d" -#: fe-exec.c:3154 +#: fe-exec.c:3153 #, c-format msgid "could not interpret result from server: %s" msgstr "无法解释来自服务器的结果: %s" -#: fe-exec.c:3393 fe-exec.c:3477 +#: fe-exec.c:3392 fe-exec.c:3476 msgid "incomplete multibyte character\n" msgstr "无效的多字节字符\n" +#: fe-gssapi-common.c:124 +msgid "GSSAPI name import error" +msgstr "GSSAPI名称导入错误" + #: fe-lobj.c:154 msgid "cannot determine OID of function lo_truncate\n" msgstr "无法确定函数 lo_creat 的 OID\n" @@ -782,22 +844,22 @@ msgstr "无法判断函数 loread 的 OID\n" msgid "cannot determine OID of function lowrite\n" msgstr "无法判断函数 lowrite 的 OID\n" -#: fe-misc.c:290 +#: fe-misc.c:289 #, c-format msgid "integer of size %lu not supported by pqGetInt" msgstr "pqGetInt 不支持大小为 %lu 的整数" -#: fe-misc.c:326 +#: fe-misc.c:325 #, c-format msgid "integer of size %lu not supported by pqPutInt" msgstr "pqPutInt 不支持大小为 %lu 的整数" -#: fe-misc.c:637 fe-misc.c:859 +#: fe-misc.c:636 fe-misc.c:869 msgid "connection not open\n" msgstr "联接未打开\n" -#: fe-misc.c:807 fe-secure-openssl.c:206 fe-secure-openssl.c:314 -#: fe-secure.c:268 fe-secure.c:385 +#: fe-misc.c:805 fe-secure-openssl.c:209 fe-secure-openssl.c:316 +#: fe-secure.c:267 fe-secure.c:383 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -807,181 +869,181 @@ msgstr "" "\t这种现象通常意味着服务器在处理请求之前\n" "或者正在处理请求的时候意外中止\n" -#: fe-misc.c:1046 +#: fe-misc.c:1063 msgid "timeout expired\n" msgstr "超时满\n" -#: fe-misc.c:1091 +#: fe-misc.c:1108 msgid "invalid socket\n" msgstr "无效套接字\n" -#: fe-misc.c:1114 +#: fe-misc.c:1131 #, c-format msgid "select() failed: %s\n" msgstr "select() 失败: %s\n" -#: fe-protocol2.c:90 +#: fe-protocol2.c:87 #, c-format msgid "invalid setenv state %c, probably indicative of memory corruption\n" msgstr "无效的 setenv 状态 %c, 可能是内存被破坏\n" -#: fe-protocol2.c:389 +#: fe-protocol2.c:384 #, c-format msgid "invalid state %c, probably indicative of memory corruption\n" msgstr "无效状态 %c, 可能是内存被破坏\n" -#: fe-protocol2.c:478 fe-protocol3.c:185 +#: fe-protocol2.c:473 fe-protocol3.c:183 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "当空闲时收到服务起发送过来的消息类型 0x%02x" -#: fe-protocol2.c:528 +#: fe-protocol2.c:523 #, c-format msgid "unexpected character %c following empty query response (\"I\" message)" msgstr "unexpected character %c following empty query response (\"I\" message)" -#: fe-protocol2.c:594 +#: fe-protocol2.c:589 #, c-format msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" msgstr "server sent data (\"D\" message) without prior row description (\"T\" message)" -#: fe-protocol2.c:612 +#: fe-protocol2.c:607 #, c-format msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" msgstr "server sent binary data (\"B\" message) without prior row description (\"T\" message)" -#: fe-protocol2.c:632 fe-protocol3.c:411 +#: fe-protocol2.c:626 fe-protocol3.c:408 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "来自服务器意外的回执, 第一个收到的字符是 \"%c\"\n" -#: fe-protocol2.c:761 fe-protocol2.c:936 fe-protocol3.c:626 fe-protocol3.c:853 +#: fe-protocol2.c:755 fe-protocol2.c:930 fe-protocol3.c:622 fe-protocol3.c:849 msgid "out of memory for query result" msgstr "查询结果时内存耗尽" -#: fe-protocol2.c:1414 +#: fe-protocol2.c:1408 #, c-format msgid "lost synchronization with server, resetting connection" msgstr "失去与服务器同步, 重置连接" -#: fe-protocol2.c:1536 fe-protocol2.c:1568 fe-protocol3.c:2099 +#: fe-protocol2.c:1530 fe-protocol2.c:1562 fe-protocol3.c:2095 #, c-format msgid "protocol error: id=0x%x\n" msgstr "协议错误: id=0x%x\n" -#: fe-protocol3.c:367 +#: fe-protocol3.c:365 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "server sent data (\"D\" message) without prior row description (\"T\" message)\n" -#: fe-protocol3.c:432 +#: fe-protocol3.c:429 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "在消息类型 \"%c\" 中, 消息内容与长度不匹配\n" -#: fe-protocol3.c:453 +#: fe-protocol3.c:449 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "失去与服务器同步: 获取到消息类型 \"%c\", 长度 %d\n" -#: fe-protocol3.c:504 fe-protocol3.c:544 +#: fe-protocol3.c:500 fe-protocol3.c:540 msgid "insufficient data in \"T\" message" msgstr "\"T\"消息中剩下的数据不够" -#: fe-protocol3.c:577 +#: fe-protocol3.c:573 msgid "extraneous data in \"T\" message" msgstr "\"T\"消息中有无关的数据" -#: fe-protocol3.c:690 +#: fe-protocol3.c:686 msgid "extraneous data in \"t\" message" msgstr "\"t\"消息中有无关的数据" -#: fe-protocol3.c:761 fe-protocol3.c:793 fe-protocol3.c:811 +#: fe-protocol3.c:757 fe-protocol3.c:789 fe-protocol3.c:807 msgid "insufficient data in \"D\" message" msgstr "\"D\"消息中剩下的数据不够" -#: fe-protocol3.c:767 +#: fe-protocol3.c:763 msgid "unexpected field count in \"D\" message" msgstr "在 \"D\" 消息中, 意外的字段个数" -#: fe-protocol3.c:820 +#: fe-protocol3.c:816 msgid "extraneous data in \"D\" message" msgstr "\"D\"消息中已经没有数据了" -#: fe-protocol3.c:1012 +#: fe-protocol3.c:1008 msgid "no error message available\n" msgstr "没有可用的错误消息\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1060 fe-protocol3.c:1079 +#: fe-protocol3.c:1056 fe-protocol3.c:1075 #, c-format msgid " at character %s" msgstr " 在字符 %s" -#: fe-protocol3.c:1092 +#: fe-protocol3.c:1088 #, c-format msgid "DETAIL: %s\n" msgstr "描述: %s\n" -#: fe-protocol3.c:1095 +#: fe-protocol3.c:1091 #, c-format msgid "HINT: %s\n" msgstr "提示: %s\n" -#: fe-protocol3.c:1098 +#: fe-protocol3.c:1094 #, c-format msgid "QUERY: %s\n" msgstr "查询: %s\n" -#: fe-protocol3.c:1105 +#: fe-protocol3.c:1101 #, c-format msgid "CONTEXT: %s\n" msgstr "背景: %s\n" -#: fe-protocol3.c:1114 +#: fe-protocol3.c:1110 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "方案名: %s\n" -#: fe-protocol3.c:1118 +#: fe-protocol3.c:1114 #, c-format msgid "TABLE NAME: %s\n" msgstr "表名: %s\n" -#: fe-protocol3.c:1122 +#: fe-protocol3.c:1118 #, c-format msgid "COLUMN NAME: %s\n" msgstr "列名: %s\n" -#: fe-protocol3.c:1126 +#: fe-protocol3.c:1122 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "数据类型名: %s\n" -#: fe-protocol3.c:1130 +#: fe-protocol3.c:1126 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "约束名: %s\n" -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1138 msgid "LOCATION: " msgstr "位置: " -#: fe-protocol3.c:1144 +#: fe-protocol3.c:1140 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1146 +#: fe-protocol3.c:1142 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1341 +#: fe-protocol3.c:1337 #, c-format msgid "LINE %d: " msgstr "第%d行" -#: fe-protocol3.c:1736 +#: fe-protocol3.c:1732 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: not doing text COPY OUT\n" @@ -1002,43 +1064,81 @@ msgstr "\"%s\"的服务器证书与主机名不匹配\"%s\"\n" msgid "could not get server's host name from server certificate\n" msgstr "无法从服务器证书得到服务器的主机名\n" -#: fe-secure-openssl.c:211 fe-secure-openssl.c:319 fe-secure-openssl.c:1219 +#: fe-secure-gssapi.c:201 +msgid "GSSAPI wrap error" +msgstr "GSSAPI包装错误" + +#: fe-secure-gssapi.c:209 +msgid "outgoing GSSAPI message would not use confidentiality\n" +msgstr "传出的GSSAPI消息将不使用机密性\n" + +#: fe-secure-gssapi.c:217 +#, c-format +msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" +msgstr "客户端试图发送过大的GSSAPI数据包 (%zu > %zu)\n" + +#: fe-secure-gssapi.c:354 fe-secure-gssapi.c:596 +#, c-format +msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" +msgstr "服务器端发送的超大GSSAPI数据包(%zu > %zu)\n" + +#: fe-secure-gssapi.c:393 +msgid "GSSAPI unwrap error" +msgstr "GSSAPI展开错误" + +#: fe-secure-gssapi.c:403 +msgid "incoming GSSAPI message did not use confidentiality\n" +msgstr "传入的GSSAPI消息未使用机密性\n" + +#: fe-secure-gssapi.c:642 +msgid "could not initiate GSSAPI security context" +msgstr "无法初始化GSSAPI安全上下文" + +#: fe-secure-gssapi.c:673 +msgid "GSSAPI size check error" +msgstr "GSSAPI大小检查错误" + +#: fe-secure-gssapi.c:684 +msgid "GSSAPI context establishment error" +msgstr "GSSAPI上下文创建错误" + +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1291 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "SSL SYSCALL 错误: %s\n" -#: fe-secure-openssl.c:218 fe-secure-openssl.c:326 fe-secure-openssl.c:1223 +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1295 msgid "SSL SYSCALL error: EOF detected\n" msgstr "SSL SYSCALL 错误: 发现结束符\n" -#: fe-secure-openssl.c:229 fe-secure-openssl.c:337 fe-secure-openssl.c:1232 +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1304 #, c-format msgid "SSL error: %s\n" msgstr "SSL 错误: %s\n" -#: fe-secure-openssl.c:244 fe-secure-openssl.c:352 +#: fe-secure-openssl.c:247 fe-secure-openssl.c:354 msgid "SSL connection has been closed unexpectedly\n" msgstr "SSL连接异常关闭\n" -#: fe-secure-openssl.c:250 fe-secure-openssl.c:358 fe-secure-openssl.c:1241 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1313 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "未知的 SSL 错误码: %d\n" -#: fe-secure-openssl.c:398 +#: fe-secure-openssl.c:400 msgid "could not determine server certificate signature algorithm\n" msgstr "无法确定服务器证书签名算法\n" -#: fe-secure-openssl.c:419 +#: fe-secure-openssl.c:421 #, c-format msgid "could not find digest for NID %s\n" msgstr "找不到NID %s的摘要\n" -#: fe-secure-openssl.c:429 +#: fe-secure-openssl.c:431 msgid "could not generate peer certificate hash\n" msgstr "无法生成对等证书哈希\n" -#: fe-secure-openssl.c:486 +#: fe-secure-openssl.c:488 msgid "SSL certificate's name entry is missing\n" msgstr "SSL证书的名称项缺失\n" @@ -1047,17 +1147,32 @@ msgstr "SSL证书的名称项缺失\n" msgid "could not create SSL context: %s\n" msgstr "无法创建 SSL 环境: %s\n" -#: fe-secure-openssl.c:852 +#: fe-secure-openssl.c:854 #, c-format -msgid "could not read root certificate file \"%s\": %s\n" -msgstr "无法读取根证书文件 \"%s\": %s\n" +msgid "invalid value \"%s\" for minimum SSL protocol version\n" +msgstr "最小SSL协议版本的值\"%s\"无效\n" + +#: fe-secure-openssl.c:865 +#, c-format +msgid "could not set minimum SSL protocol version: %s\n" +msgstr "无法设置最低SSL协议版本: %s\n" + +#: fe-secure-openssl.c:883 +#, c-format +msgid "invalid value \"%s\" for maximum SSL protocol version\n" +msgstr "最大SSL协议版本的值\"%s\"无效\n" + +#: fe-secure-openssl.c:894 +#, c-format +msgid "could not set maximum SSL protocol version: %s\n" +msgstr "无法设置最大SSL协议版本: %s\n" -#: fe-secure-openssl.c:880 +#: fe-secure-openssl.c:930 #, c-format -msgid "SSL library does not support CRL certificates (file \"%s\")\n" -msgstr "SSL库不支持CRL认证(文件 \"%s\")\n" +msgid "could not read root certificate file \"%s\": %s\n" +msgstr "无法读取根证书文件 \"%s\": %s\n" -#: fe-secure-openssl.c:908 +#: fe-secure-openssl.c:974 msgid "" "could not get home directory to locate root certificate file\n" "Either provide the file or change sslmode to disable server certificate verification.\n" @@ -1065,7 +1180,7 @@ msgstr "" "无法获取home目录以定位根认证文件\n" "可以提供该文件或者将sslmode改为禁用服务器证书认证.\n" -#: fe-secure-openssl.c:912 +#: fe-secure-openssl.c:978 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -1074,88 +1189,92 @@ msgstr "" "根认证文件\"%s\"不存在\n" "可以提供这个文件或者将sslmode改为禁用服务器认证检验.\n" -#: fe-secure-openssl.c:943 +#: fe-secure-openssl.c:1009 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "无法打开证书文件 \"%s\": %s\n" -#: fe-secure-openssl.c:962 +#: fe-secure-openssl.c:1028 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "无法读取证书文件 \"%s\": %s\n" -#: fe-secure-openssl.c:987 +#: fe-secure-openssl.c:1053 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "无法建立 SSL 联接: %s\n" -#: fe-secure-openssl.c:1041 +#: fe-secure-openssl.c:1107 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "无法加载SSL引擎 \"%s\": %s\n" -#: fe-secure-openssl.c:1053 +#: fe-secure-openssl.c:1119 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "无法初始化SSL引擎\"%s\": %s\n" -#: fe-secure-openssl.c:1069 +#: fe-secure-openssl.c:1135 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "无法从引擎\"%2$s\"读取私有SSL钥\"%1$s\": %3$s\n" -#: fe-secure-openssl.c:1083 +#: fe-secure-openssl.c:1149 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "无法从引擎\"%2$s\"读取私有SSL钥\"%1$s\": %3$s\n" -#: fe-secure-openssl.c:1120 +#: fe-secure-openssl.c:1186 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "有证书, 但不是私钥文件 \"%s\"\n" -#: fe-secure-openssl.c:1128 +#: fe-secure-openssl.c:1194 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "警告: 私钥文件 \"%s\"的访问权限过大; 权限应设置 为 u=rw (0600)或更小\n" -#: fe-secure-openssl.c:1139 +#: fe-secure-openssl.c:1219 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "无法装载私钥文件 \"%s\": %s\n" -#: fe-secure-openssl.c:1153 +#: fe-secure-openssl.c:1237 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "证书不匹配私钥文件 \"%s\": %s\n" -#: fe-secure-openssl.c:1262 +#: fe-secure-openssl.c:1332 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "无法获得证书: %s\n" -#: fe-secure-openssl.c:1351 +#: fe-secure-openssl.c:1421 #, c-format msgid "no SSL error reported" msgstr "没有报告SSL错误" -#: fe-secure-openssl.c:1360 +#: fe-secure-openssl.c:1430 #, c-format msgid "SSL error code %lu" msgstr "SSL 错误代码 %lu" -#: fe-secure.c:276 +#: fe-secure-openssl.c:1677 +#, c-format +msgid "WARNING: sslpassword truncated\n" +msgstr "警告:ssl密码被截断\n" + +#: fe-secure.c:275 #, c-format msgid "could not receive data from server: %s\n" msgstr "无法从服务器接收数据: %s\n" -#: fe-secure.c:392 +#: fe-secure.c:390 #, c-format msgid "could not send data to server: %s\n" msgstr "无法向服务器发送数据: %s\n" -#: win32.c:317 +#: win32.c:314 #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "不可识别的套接字错误: 0x%08X/%d" - diff --git a/src/pl/plperl/nls.mk b/src/pl/plperl/nls.mk index f33e325c76e24..7c2fd99ac3b72 100644 --- a/src/pl/plperl/nls.mk +++ b/src/pl/plperl/nls.mk @@ -1,6 +1,6 @@ # src/pl/plperl/nls.mk CATALOG_NAME = plperl -AVAIL_LANGUAGES = cs de es fr it ja ko pl pt_BR ro ru sv tr vi zh_CN zh_TW +AVAIL_LANGUAGES = cs de es fr it ja ko pl pt_BR ro ru sv tr uk vi zh_CN zh_TW GETTEXT_FILES = plperl.c SPI.c GETTEXT_TRIGGERS = $(BACKEND_COMMON_GETTEXT_TRIGGERS) GETTEXT_FLAGS = $(BACKEND_COMMON_GETTEXT_FLAGS) diff --git a/src/pl/plperl/po/es.po b/src/pl/plperl/po/es.po index be4d1a818efe9..7d75fece995bb 100644 --- a/src/pl/plperl/po/es.po +++ b/src/pl/plperl/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: plperl (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:38+0000\n" +"POT-Creation-Date: 2020-09-13 10:38+0000\n" "PO-Revision-Date: 2019-06-06 17:25-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/pl/plperl/po/ru.po b/src/pl/plperl/po/ru.po index 43b513056901f..fa609f770d4b4 100644 --- a/src/pl/plperl/po/ru.po +++ b/src/pl/plperl/po/ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: plperl (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-09 12:21+0300\n" +"POT-Creation-Date: 2020-09-03 11:22+0300\n" "PO-Revision-Date: 2019-08-29 15:42+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -17,95 +17,95 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: plperl.c:406 +#: plperl.c:405 msgid "" "If true, trusted and untrusted Perl code will be compiled in strict mode." msgstr "" "Если этот параметр равен true, доверенный и недоверенный код Perl будет " "компилироваться в строгом режиме." -#: plperl.c:420 +#: plperl.c:419 msgid "" "Perl initialization code to execute when a Perl interpreter is initialized." msgstr "" "Код инициализации Perl, который выполняется при инициализации интерпретатора " "Perl." -#: plperl.c:442 +#: plperl.c:441 msgid "Perl initialization code to execute once when plperl is first used." msgstr "" "Код инициализации Perl, который выполняется один раз, при первом " "использовании plperl." -#: plperl.c:450 +#: plperl.c:449 msgid "Perl initialization code to execute once when plperlu is first used." msgstr "" "Код инициализации Perl, который выполняется один раз, при первом " "использовании plperlu." -#: plperl.c:647 +#: plperl.c:646 #, c-format msgid "cannot allocate multiple Perl interpreters on this platform" msgstr "на этой платформе нельзя запустить множество интерпретаторов Perl" -#: plperl.c:670 plperl.c:854 plperl.c:860 plperl.c:977 plperl.c:989 -#: plperl.c:1032 plperl.c:1055 plperl.c:2154 plperl.c:2264 plperl.c:2332 -#: plperl.c:2395 +#: plperl.c:669 plperl.c:853 plperl.c:859 plperl.c:976 plperl.c:988 +#: plperl.c:1031 plperl.c:1054 plperl.c:2136 plperl.c:2244 plperl.c:2312 +#: plperl.c:2375 #, c-format msgid "%s" msgstr "%s" -#: plperl.c:671 +#: plperl.c:670 #, c-format msgid "while executing PostgreSQL::InServer::SPI::bootstrap" msgstr "при выполнении PostgreSQL::InServer::SPI::bootstrap" -#: plperl.c:855 +#: plperl.c:854 #, c-format msgid "while parsing Perl initialization" msgstr "при разборе параметров инициализации Perl" -#: plperl.c:861 +#: plperl.c:860 #, c-format msgid "while running Perl initialization" msgstr "при выполнении инициализации Perl" -#: plperl.c:978 +#: plperl.c:977 #, c-format msgid "while executing PLC_TRUSTED" msgstr "при выполнении PLC_TRUSTED" -#: plperl.c:990 +#: plperl.c:989 #, c-format msgid "while executing utf8fix" msgstr "при выполнении utf8fix" -#: plperl.c:1033 +#: plperl.c:1032 #, c-format msgid "while executing plperl.on_plperl_init" msgstr "при выполнении plperl.on_plperl_init" -#: plperl.c:1056 +#: plperl.c:1055 #, c-format msgid "while executing plperl.on_plperlu_init" msgstr "при выполнении plperl.on_plperlu_init" -#: plperl.c:1102 plperl.c:1793 +#: plperl.c:1101 plperl.c:1789 #, c-format msgid "Perl hash contains nonexistent column \"%s\"" msgstr "Perl-хеш содержит несуществующий столбец \"%s\"" -#: plperl.c:1107 plperl.c:1798 +#: plperl.c:1106 plperl.c:1794 #, c-format msgid "cannot set system attribute \"%s\"" msgstr "присвоить значение системному атрибуту \"%s\" нельзя" -#: plperl.c:1195 +#: plperl.c:1194 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "число размерностей массива (%d) превышает предел (%d)" -#: plperl.c:1207 plperl.c:1224 +#: plperl.c:1206 plperl.c:1223 #, c-format msgid "" "multidimensional arrays must have array expressions with matching dimensions" @@ -113,80 +113,80 @@ msgstr "" "для многомерных массивов должны задаваться выражения с соответствующими " "размерностями" -#: plperl.c:1260 +#: plperl.c:1259 #, c-format msgid "cannot convert Perl array to non-array type %s" msgstr "Perl-массив нельзя преобразовать в тип не массива %s" -#: plperl.c:1363 +#: plperl.c:1362 #, c-format msgid "cannot convert Perl hash to non-composite type %s" msgstr "Perl-хеш нельзя преобразовать в не составной тип %s" -#: plperl.c:1385 plperl.c:3306 +#: plperl.c:1384 plperl.c:3284 #, c-format msgid "" "function returning record called in context that cannot accept type record" msgstr "" "функция, возвращающая запись, вызвана в контексте, не допускающем этот тип" -#: plperl.c:1444 +#: plperl.c:1443 #, c-format msgid "lookup failed for type %s" msgstr "найти тип %s не удалось" -#: plperl.c:1768 +#: plperl.c:1764 #, c-format msgid "$_TD->{new} does not exist" msgstr "$_TD->{new} не существует" -#: plperl.c:1772 +#: plperl.c:1768 #, c-format msgid "$_TD->{new} is not a hash reference" msgstr "$_TD->{new} - не ссылка на хеш" -#: plperl.c:1803 +#: plperl.c:1799 #, c-format msgid "cannot set generated column \"%s\"" msgstr "присвоить значение генерируемому столбцу \"%s\" нельзя" -#: plperl.c:2029 plperl.c:2871 +#: plperl.c:2011 plperl.c:2849 #, c-format msgid "PL/Perl functions cannot return type %s" msgstr "функции PL/Perl не могут возвращать тип %s" -#: plperl.c:2042 plperl.c:2912 +#: plperl.c:2024 plperl.c:2890 #, c-format msgid "PL/Perl functions cannot accept type %s" msgstr "функции PL/Perl не могут принимать тип %s" -#: plperl.c:2159 +#: plperl.c:2141 #, c-format msgid "didn't get a CODE reference from compiling function \"%s\"" msgstr "не удалось получить ссылку на код после компиляции функции \"%s\"" -#: plperl.c:2252 +#: plperl.c:2232 #, c-format msgid "didn't get a return item from function" msgstr "не удалось получить возвращаемый элемент от функции" -#: plperl.c:2296 plperl.c:2363 +#: plperl.c:2276 plperl.c:2343 #, c-format msgid "couldn't fetch $_TD" msgstr "не удалось получить $_TD" -#: plperl.c:2320 plperl.c:2383 +#: plperl.c:2300 plperl.c:2363 #, c-format msgid "didn't get a return item from trigger function" msgstr "не удалось получить возвращаемый элемент от триггерной функции" -#: plperl.c:2444 +#: plperl.c:2422 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "" "функция, возвращающая множество, вызвана в контексте, где ему нет места" -#: plperl.c:2489 +#: plperl.c:2467 #, c-format msgid "" "set-returning PL/Perl function must return reference to array or use " @@ -195,12 +195,12 @@ msgstr "" "функция PL/Perl, возвращающая множество, должна возвращать ссылку на массив " "или вызывать return_next" -#: plperl.c:2610 +#: plperl.c:2588 #, c-format msgid "ignoring modified row in DELETE trigger" msgstr "в триггере DELETE изменённая строка игнорируется" -#: plperl.c:2618 +#: plperl.c:2596 #, c-format msgid "" "result of PL/Perl trigger function must be undef, \"SKIP\", or \"MODIFY\"" @@ -208,24 +208,24 @@ msgstr "" "результатом триггерной функции PL/Perl должен быть undef, \"SKIP\" или " "\"MODIFY\"" -#: plperl.c:2866 +#: plperl.c:2844 #, c-format msgid "trigger functions can only be called as triggers" msgstr "триггерные функции могут вызываться только в триггерах" -#: plperl.c:3213 +#: plperl.c:3191 #, c-format msgid "query result has too many rows to fit in a Perl array" msgstr "" "результат запроса содержит слишком много строк для передачи в массиве Perl" -#: plperl.c:3283 +#: plperl.c:3261 #, c-format msgid "cannot use return_next in a non-SETOF function" msgstr "" "return_next можно использовать только в функциях, возвращающих множества" -#: plperl.c:3357 +#: plperl.c:3335 #, c-format msgid "" "SETOF-composite-returning PL/Perl function must call return_next with " @@ -234,17 +234,17 @@ msgstr "" "функция PL/Perl, возвращающая составное множество, должна вызывать " "return_next со ссылкой на хеш" -#: plperl.c:4132 +#: plperl.c:4110 #, c-format msgid "PL/Perl function \"%s\"" msgstr "функция PL/Perl \"%s\"" -#: plperl.c:4144 +#: plperl.c:4122 #, c-format msgid "compilation of PL/Perl function \"%s\"" msgstr "компиляция функции PL/Perl \"%s\"" -#: plperl.c:4153 +#: plperl.c:4131 #, c-format msgid "PL/Perl anonymous code block" msgstr "анонимный блок кода PL/Perl" diff --git a/src/pl/plperl/po/uk.po b/src/pl/plperl/po/uk.po new file mode 100644 index 0000000000000..28a5884bf464d --- /dev/null +++ b/src/pl/plperl/po/uk.po @@ -0,0 +1,222 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:08+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: \n" +"Language-Team: Ukrainian\n" +"Language: uk_UA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /DEV_13/plperl.pot\n" +"X-Crowdin-File-ID: 516\n" + +#: plperl.c:405 +msgid "If true, trusted and untrusted Perl code will be compiled in strict mode." +msgstr "Якщо увімкнено, надійний і ненадійний код Perl буде скомпільований в суворому режимі." + +#: plperl.c:419 +msgid "Perl initialization code to execute when a Perl interpreter is initialized." +msgstr "Виконати ініціалізаційний код під час ініціалізації інтерпретатора Perl." + +#: plperl.c:441 +msgid "Perl initialization code to execute once when plperl is first used." +msgstr "Виконати код ініціалізації один раз під час першого використання plperl." + +#: plperl.c:449 +msgid "Perl initialization code to execute once when plperlu is first used." +msgstr "Виконати код ініціалізації один раз під час першого використання plperlu." + +#: plperl.c:646 +#, c-format +msgid "cannot allocate multiple Perl interpreters on this platform" +msgstr "не можна розмістити декілька Perl інтерпретаторів на цій платформі" + +#: plperl.c:669 plperl.c:853 plperl.c:859 plperl.c:976 plperl.c:988 +#: plperl.c:1031 plperl.c:1054 plperl.c:2136 plperl.c:2244 plperl.c:2312 +#: plperl.c:2375 +#, c-format +msgid "%s" +msgstr "%s" + +#: plperl.c:670 +#, c-format +msgid "while executing PostgreSQL::InServer::SPI::bootstrap" +msgstr "під час виконання PostgreSQL::InServer::SPI::bootstrap" + +#: plperl.c:854 +#, c-format +msgid "while parsing Perl initialization" +msgstr "під час обробки ініціалізації Perl" + +#: plperl.c:860 +#, c-format +msgid "while running Perl initialization" +msgstr "під час запуску Perl ініціалізації" + +#: plperl.c:977 +#, c-format +msgid "while executing PLC_TRUSTED" +msgstr "під час виконання PLC_TRUSTED" + +#: plperl.c:989 +#, c-format +msgid "while executing utf8fix" +msgstr "під час виконання utf8fix" + +#: plperl.c:1032 +#, c-format +msgid "while executing plperl.on_plperl_init" +msgstr "під час виконання plperl.on_plperl_init" + +#: plperl.c:1055 +#, c-format +msgid "while executing plperl.on_plperlu_init" +msgstr "під час виконання plperl.on_plperlu_init" + +#: plperl.c:1101 plperl.c:1789 +#, c-format +msgid "Perl hash contains nonexistent column \"%s\"" +msgstr "хеш Perl містить неіснуючу колонку \"%s\"" + +#: plperl.c:1106 plperl.c:1794 +#, c-format +msgid "cannot set system attribute \"%s\"" +msgstr "не вдалося встановити системний атрибут \"%s\"" + +#: plperl.c:1194 +#, c-format +msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" +msgstr "число вимірів масива (%d) перевищує ліміт (%d)" + +#: plperl.c:1206 plperl.c:1223 +#, c-format +msgid "multidimensional arrays must have array expressions with matching dimensions" +msgstr "для багатовимірних масивів повинні задаватись вирази з відповідними вимірами" + +#: plperl.c:1259 +#, c-format +msgid "cannot convert Perl array to non-array type %s" +msgstr "неможливо конвертувати масив Perl у тип не масиву %s" + +#: plperl.c:1362 +#, c-format +msgid "cannot convert Perl hash to non-composite type %s" +msgstr "неможливо конвертувати хеш Perl у нескладений тип %s" + +#: plperl.c:1384 plperl.c:3284 +#, c-format +msgid "function returning record called in context that cannot accept type record" +msgstr "функція, що повертає набір, викликана у контексті, що не приймає тип запис" + +#: plperl.c:1443 +#, c-format +msgid "lookup failed for type %s" +msgstr "неможливо фільтрувати для типу %s" + +#: plperl.c:1764 +#, c-format +msgid "$_TD->{new} does not exist" +msgstr "$_TD->{new} не існує" + +#: plperl.c:1768 +#, c-format +msgid "$_TD->{new} is not a hash reference" +msgstr "$_TD->{new} не є посиланням на хеш" + +#: plperl.c:1799 +#, c-format +msgid "cannot set generated column \"%s\"" +msgstr "неможливо оновити згенерований стовпець \"%s\"" + +#: plperl.c:2011 plperl.c:2849 +#, c-format +msgid "PL/Perl functions cannot return type %s" +msgstr "функції PL/Perl не можуть повертати тип %s" + +#: plperl.c:2024 plperl.c:2890 +#, c-format +msgid "PL/Perl functions cannot accept type %s" +msgstr "функції PL/Perl не можуть приймати тип %s" + +#: plperl.c:2141 +#, c-format +msgid "didn't get a CODE reference from compiling function \"%s\"" +msgstr "не отримано посилання CODE з функції компіляції \"%s\"" + +#: plperl.c:2232 +#, c-format +msgid "didn't get a return item from function" +msgstr "не отримано елемент результату з функції" + +#: plperl.c:2276 plperl.c:2343 +#, c-format +msgid "couldn't fetch $_TD" +msgstr "не вдалось отримати $_TD" + +#: plperl.c:2300 plperl.c:2363 +#, c-format +msgid "didn't get a return item from trigger function" +msgstr "не отримано елемент результату з функції-тригеру" + +#: plperl.c:2422 +#, c-format +msgid "set-valued function called in context that cannot accept a set" +msgstr "функція \"set-valued\" викликана в контексті, де йому немає місця" + +#: plperl.c:2467 +#, c-format +msgid "set-returning PL/Perl function must return reference to array or use return_next" +msgstr "функція PL/Perl, що вертає набір значень, повинна посилатися на масив або використовувати return_next" + +#: plperl.c:2588 +#, c-format +msgid "ignoring modified row in DELETE trigger" +msgstr "ігнорується змінений рядок у тригері DELETE" + +#: plperl.c:2596 +#, c-format +msgid "result of PL/Perl trigger function must be undef, \"SKIP\", or \"MODIFY\"" +msgstr "результат тригерної функції PL/Perl повинен бути undef, \"SKIP\" або \"MODIFY\"" + +#: plperl.c:2844 +#, c-format +msgid "trigger functions can only be called as triggers" +msgstr "тригер-функція може викликатися лише як тригер" + +#: plperl.c:3191 +#, c-format +msgid "query result has too many rows to fit in a Perl array" +msgstr "результат запиту має забагато рядків для відповідності в масиві Perl" + +#: plperl.c:3261 +#, c-format +msgid "cannot use return_next in a non-SETOF function" +msgstr "не можна використовувати return_next в функціях, що не повертають набори даних" + +#: plperl.c:3335 +#, c-format +msgid "SETOF-composite-returning PL/Perl function must call return_next with reference to hash" +msgstr "Функція PL/Perl, що повертає набір композитних даних, повинна викликати return_next з посиланням на хеш" + +#: plperl.c:4110 +#, c-format +msgid "PL/Perl function \"%s\"" +msgstr "PL/Perl функція \"%s\"" + +#: plperl.c:4122 +#, c-format +msgid "compilation of PL/Perl function \"%s\"" +msgstr "компіляція функції PL/Perl \"%s\"" + +#: plperl.c:4131 +#, c-format +msgid "PL/Perl anonymous code block" +msgstr "анонімний блок коду PL/Perl" + diff --git a/src/pl/plpgsql/src/po/cs.po b/src/pl/plpgsql/src/po/cs.po index 9710af75d554d..d70e16ac74b61 100644 --- a/src/pl/plpgsql/src/po/cs.po +++ b/src/pl/plpgsql/src/po/cs.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: plpgsql-cs (PostgreSQL 9.3)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-27 08:08+0000\n" -"PO-Revision-Date: 2019-09-27 21:01+0200\n" +"POT-Creation-Date: 2020-10-31 16:09+0000\n" +"PO-Revision-Date: 2020-10-31 20:56+0100\n" "Last-Translator: Tomas Vondra \n" "Language-Team: Czech \n" "Language: cs\n" @@ -16,12 +16,12 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.1\n" -#: pl_comp.c:438 pl_handler.c:461 +#: pl_comp.c:436 pl_handler.c:471 #, c-format msgid "PL/pgSQL functions cannot accept type %s" -msgstr "funkce v PL/pgSQL nepodporují typ %s" +msgstr "PL/pgSQL funkce nemohou přijímat typ %s" #: pl_comp.c:526 #, c-format @@ -33,10 +33,10 @@ msgstr "nelze určit skutečný návratový typ polymorfní funkce \"%s\"" msgid "trigger functions can only be called as triggers" msgstr "funkce pro obsluhu triggerů mohou být volané pouze prostřednictvím triggerů" -#: pl_comp.c:560 pl_handler.c:445 +#: pl_comp.c:560 pl_handler.c:455 #, c-format msgid "PL/pgSQL functions cannot return type %s" -msgstr "funkce v PL/pgSQL nemohou vracet typ %s" +msgstr "PL/pgSQL funkce nemohou vracet typ %s" #: pl_comp.c:600 #, c-format @@ -75,8 +75,8 @@ msgstr "nejednoznačný odkaz na sloupec \"%s\"" msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Identifikátor může odkazovat na proměnnou PL/pgSQL nebo na sloupec v tabulce." -#: pl_comp.c:1317 pl_exec.c:5134 pl_exec.c:5499 pl_exec.c:5586 pl_exec.c:5677 -#: pl_exec.c:6594 +#: pl_comp.c:1317 pl_exec.c:5218 pl_exec.c:5583 pl_exec.c:5670 pl_exec.c:5761 +#: pl_exec.c:6749 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "záznam \"%s\" nemá položku \"%s\"" @@ -101,7 +101,7 @@ msgstr "proměnná \"%s\" je deklarována jako pseudo-typ \"%s\"" msgid "type \"%s\" is only a shell" msgstr "typ \"%s\" je jen obálkou (shell)" -#: pl_comp.c:2162 pl_exec.c:6886 +#: pl_comp.c:2162 pl_exec.c:7050 #, c-format msgid "type %s is not composite" msgstr "typ %s není kompozitní" @@ -111,63 +111,63 @@ msgstr "typ %s není kompozitní" msgid "unrecognized exception condition \"%s\"" msgstr "nedefinovaná výjimka \"%s\"" -#: pl_comp.c:2477 +#: pl_comp.c:2484 #, c-format msgid "could not determine actual argument type for polymorphic function \"%s\"" msgstr "nelze určit skutečný typ argumentu polymorfní funkce \"%s\"" -#: pl_exec.c:477 pl_exec.c:914 pl_exec.c:1152 +#: pl_exec.c:498 pl_exec.c:935 pl_exec.c:1173 msgid "during initialization of execution state" msgstr "během inicializace proměnné execution state" -#: pl_exec.c:483 +#: pl_exec.c:504 msgid "while storing call arguments into local variables" msgstr "během ukládání parametrů funkce do lokálních proměnných" -#: pl_exec.c:571 pl_exec.c:987 +#: pl_exec.c:592 pl_exec.c:1008 msgid "during function entry" msgstr "během vstupu do funkce" -#: pl_exec.c:596 +#: pl_exec.c:617 #, c-format msgid "control reached end of function without RETURN" msgstr "funkce skončila, aniž by byl proveden příkaz RETURN" -#: pl_exec.c:603 +#: pl_exec.c:624 msgid "while casting return value to function's return type" msgstr "během konverze vracené hodnoty do návratového typu funkce" -#: pl_exec.c:616 pl_exec.c:3584 +#: pl_exec.c:637 pl_exec.c:3653 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "funkce vracející tabulku (set-valued) byla zavolána z kontextu, který neumožňuje přijetí tabulky" -#: pl_exec.c:742 pl_exec.c:1016 pl_exec.c:1177 +#: pl_exec.c:763 pl_exec.c:1037 pl_exec.c:1198 msgid "during function exit" msgstr "během ukončování funkce" -#: pl_exec.c:797 pl_exec.c:861 pl_exec.c:3429 +#: pl_exec.c:818 pl_exec.c:882 pl_exec.c:3498 msgid "returned record type does not match expected record type" msgstr "vracenou hodnotu typu record nelze konvertovat do očekávaného typu record" -#: pl_exec.c:1012 pl_exec.c:1173 +#: pl_exec.c:1033 pl_exec.c:1194 #, c-format msgid "control reached end of trigger procedure without RETURN" msgstr "funkce obsluhy triggeru skončila, aniž by byl proveden příkaz RETURN" -#: pl_exec.c:1021 +#: pl_exec.c:1042 #, c-format msgid "trigger procedure cannot return a set" msgstr "funkce obsluhy triggeru nemůže vrátit tabulku" -#: pl_exec.c:1060 pl_exec.c:1088 +#: pl_exec.c:1081 pl_exec.c:1109 msgid "returned row structure does not match the structure of the triggering table" msgstr "struktura vrácené hodnoty neodpovídá struktuře tabulky svázané s triggerem" #. translator: last %s is a phrase such as "during statement block #. local variable initialization" #. -#: pl_exec.c:1225 +#: pl_exec.c:1244 #, c-format msgid "PL/pgSQL function %s line %d %s" msgstr "PL/pgSQL funkce %s řádek %d %s" @@ -175,305 +175,305 @@ msgstr "PL/pgSQL funkce %s řádek %d %s" #. translator: last %s is a phrase such as "while storing call #. arguments into local variables" #. -#: pl_exec.c:1236 +#: pl_exec.c:1255 #, c-format msgid "PL/pgSQL function %s %s" msgstr "PL/pgSQL funkce %s %s" #. translator: last %s is a plpgsql statement type name -#: pl_exec.c:1244 +#: pl_exec.c:1263 #, c-format msgid "PL/pgSQL function %s line %d at %s" msgstr "PL/pgSQL funkce %s řádek %d na %s" -#: pl_exec.c:1250 +#: pl_exec.c:1269 #, c-format msgid "PL/pgSQL function %s" msgstr "PL/pgSQL funkce %s" -#: pl_exec.c:1588 +#: pl_exec.c:1607 msgid "during statement block local variable initialization" msgstr "během inicializace lokálních proměnných bloku" -#: pl_exec.c:1686 +#: pl_exec.c:1705 msgid "during statement block entry" msgstr "během zahájení bloku" -#: pl_exec.c:1718 +#: pl_exec.c:1737 msgid "during statement block exit" msgstr "během ukončování bloku" -#: pl_exec.c:1756 +#: pl_exec.c:1775 msgid "during exception cleanup" msgstr "během čištění po zachycení výjimky" -#: pl_exec.c:2252 +#: pl_exec.c:2304 #, c-format msgid "procedure parameter \"%s\" is an output parameter but corresponding argument is not writable" msgstr "parametr \"%s\" procedury je výstupní argument ale odpovídající argument není zapisovatelný" -#: pl_exec.c:2257 +#: pl_exec.c:2309 #, c-format msgid "procedure parameter %d is an output parameter but corresponding argument is not writable" msgstr "parametr %d procedury je výstupní argument ale odpovídající argument není zapisovatelný" -#: pl_exec.c:2368 +#: pl_exec.c:2437 #, c-format msgid "GET STACKED DIAGNOSTICS cannot be used outside an exception handler" msgstr "GET STACKED DIAGNOSTICS nelze použít mimo obsluhu výjimky" -#: pl_exec.c:2568 +#: pl_exec.c:2637 #, c-format msgid "case not found" msgstr "varianta nenalezena" -#: pl_exec.c:2569 +#: pl_exec.c:2638 #, c-format msgid "CASE statement is missing ELSE part." -msgstr "V příkazu CASE chybí část ELSE" +msgstr "CASE příkazu chybí část ELSE." -#: pl_exec.c:2662 +#: pl_exec.c:2731 #, c-format msgid "lower bound of FOR loop cannot be null" msgstr "spodní limit příkazu FOR nesmí být nullL" -#: pl_exec.c:2678 +#: pl_exec.c:2747 #, c-format msgid "upper bound of FOR loop cannot be null" msgstr "horní limit příkazu FOR nesmí být null" -#: pl_exec.c:2696 +#: pl_exec.c:2765 #, c-format msgid "BY value of FOR loop cannot be null" -msgstr "krok příkazu FOR nesmí být null" +msgstr "BY hodnota pro FOR cyklus nesmí být null" -#: pl_exec.c:2702 +#: pl_exec.c:2771 #, c-format msgid "BY value of FOR loop must be greater than zero" -msgstr "krok příkazu FOR musí být větší než nula" +msgstr "BY hodnota pro FOR cyklus musí být větší než nula" -#: pl_exec.c:2836 pl_exec.c:4558 +#: pl_exec.c:2905 pl_exec.c:4632 #, c-format msgid "cursor \"%s\" already in use" msgstr "kurzor \"%s\" se již používá" -#: pl_exec.c:2859 pl_exec.c:4623 +#: pl_exec.c:2928 pl_exec.c:4697 #, c-format msgid "arguments given for cursor without arguments" msgstr "argumenty pro kurzor bez argumentů" -#: pl_exec.c:2878 pl_exec.c:4642 +#: pl_exec.c:2947 pl_exec.c:4716 #, c-format msgid "arguments required for cursor" msgstr "kurzor vyžaduje argumenty" -#: pl_exec.c:2965 +#: pl_exec.c:3034 #, c-format msgid "FOREACH expression must not be null" msgstr "výraz ve FOREACH nesmí být null" # výrazu/příkazu -#: pl_exec.c:2980 +#: pl_exec.c:3049 #, c-format msgid "FOREACH expression must yield an array, not type %s" -msgstr "výsledkem výrazu příkazu FOREACH musí být pole, nikoliv %s" +msgstr "výraz ve FOREACH musí vracet pole, nikoliv typ %s" -#: pl_exec.c:2997 +#: pl_exec.c:3066 #, c-format msgid "slice dimension (%d) is out of the valid range 0..%d" msgstr "dimenze podpole (%d) je mimo validní rozsah 0..%d" -#: pl_exec.c:3024 +#: pl_exec.c:3093 #, c-format msgid "FOREACH ... SLICE loop variable must be of an array type" msgstr "FOREACH ... SLICE proměnná cyklu musí být typu pole" -#: pl_exec.c:3028 +#: pl_exec.c:3097 #, c-format msgid "FOREACH loop variable must not be of an array type" msgstr "FOREACH proměnná cyklu nesmí být typu pole" -#: pl_exec.c:3190 pl_exec.c:3247 pl_exec.c:3422 +#: pl_exec.c:3259 pl_exec.c:3316 pl_exec.c:3491 #, c-format msgid "cannot return non-composite value from function returning composite type" msgstr "z funkce vracející kompozitní typ nelze vracet jednoduchý datový typ" -#: pl_exec.c:3286 pl_gram.y:3309 +#: pl_exec.c:3355 pl_gram.y:3309 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "RETURN NEXT nelze použít ve funkci, která nevrací tabulku" -#: pl_exec.c:3327 pl_exec.c:3459 +#: pl_exec.c:3396 pl_exec.c:3528 #, c-format msgid "wrong result type supplied in RETURN NEXT" -msgstr "typ parametru příkazu RETURN NEXT neodpovídá návratovému typu funkce " +msgstr "chybný návratový typ v RETURN NEXT" -#: pl_exec.c:3365 pl_exec.c:3386 +#: pl_exec.c:3434 pl_exec.c:3455 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "obsah parametru příkazu RETURN NEXT nelze převést na návratový typ funkce" -#: pl_exec.c:3478 +#: pl_exec.c:3547 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "RETURN NEXT musí mít parametr" -#: pl_exec.c:3504 pl_gram.y:3373 +#: pl_exec.c:3573 pl_gram.y:3373 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "uvnitř funkce, která nevrací tabulku, nelze použít RETURN QUERY" -#: pl_exec.c:3528 +#: pl_exec.c:3597 msgid "structure of query does not match function result type" msgstr "struktura dotazu neodpovídá návratovému typu funkce" -#: pl_exec.c:3612 pl_exec.c:3750 +#: pl_exec.c:3681 pl_exec.c:3819 #, c-format msgid "RAISE option already specified: %s" -msgstr "opakované použití volitelného parametru: %s příkazu RAISE" +msgstr "RAISE volba již zadána: %s" -#: pl_exec.c:3646 +#: pl_exec.c:3715 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "RAISE bez parametrů nesmí být použito mimo obsluhu výjimky" -#: pl_exec.c:3740 +#: pl_exec.c:3809 #, c-format msgid "RAISE statement option cannot be null" -msgstr "volitelný parametr příkazu RAISE nesmí být null" +msgstr "volba příkazu RAISE nesmí být null" -#: pl_exec.c:3810 +#: pl_exec.c:3879 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3865 +#: pl_exec.c:3934 #, c-format msgid "assertion failed" msgstr "assertion selhalo" -#: pl_exec.c:4207 pl_exec.c:4397 +#: pl_exec.c:4281 pl_exec.c:4471 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "v PL/pgSQL nelze použít COPY to/from klient" -#: pl_exec.c:4213 +#: pl_exec.c:4287 #, c-format msgid "unsupported transaction command in PL/pgSQL" msgstr "nepodporovaný transakční příkaz v PL/pgSQL" # "nevrací" má trochu jiný význam než "nemůže vracet" -#: pl_exec.c:4236 pl_exec.c:4426 +#: pl_exec.c:4310 pl_exec.c:4500 #, c-format msgid "INTO used with a command that cannot return data" msgstr "INTO je použito v příkazu, který nevrací data" -#: pl_exec.c:4259 pl_exec.c:4449 +#: pl_exec.c:4333 pl_exec.c:4523 #, c-format msgid "query returned no rows" msgstr "dotaz nevrátil žádný řádek" -#: pl_exec.c:4281 pl_exec.c:4468 +#: pl_exec.c:4355 pl_exec.c:4542 #, c-format msgid "query returned more than one row" msgstr "dotaz vrátil více než jeden řádek" -#: pl_exec.c:4283 +#: pl_exec.c:4357 #, c-format msgid "Make sure the query returns a single row, or use LIMIT 1." msgstr "Ujistěte se že dotaz vrací jediný řádek, nebo použijte LIMIT 1." -#: pl_exec.c:4299 +#: pl_exec.c:4373 #, c-format msgid "query has no destination for result data" msgstr "chybí cíl pro výsledek dotazu" -#: pl_exec.c:4300 +#: pl_exec.c:4374 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." msgstr "Pokud nechcete použít výsledek SELECTu, použijte PERFORM." # generující? spíš asi "obsahující" nebo jenom "s dynamickým dotazem" # ok -#: pl_exec.c:4333 pl_exec.c:8518 +#: pl_exec.c:4407 pl_exec.c:8729 #, c-format msgid "query string argument of EXECUTE is null" msgstr "textový argument s dynamickým dotazem příkazu EXECUTE je null" -#: pl_exec.c:4389 +#: pl_exec.c:4463 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "EXECUTE příkazu SELECT ... INTO není implementováno" -#: pl_exec.c:4390 +#: pl_exec.c:4464 #, c-format msgid "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS instead." msgstr "Možná chcete použít EXECUTE ... INTO nebo EXECUTE CREATE TABLE ... AS." -#: pl_exec.c:4403 +#: pl_exec.c:4477 #, c-format msgid "EXECUTE of transaction commands is not implemented" msgstr "EXECUTE transakčního příkazu není implementováno" # myslí se tím proměnná která se předává kurzoru nebo samotný kurzor? Pokud kurzor, tak asi spíš kurzorová proměnná. # ok, i kdyz v tom necitim rozdil -#: pl_exec.c:4704 pl_exec.c:4792 +#: pl_exec.c:4778 pl_exec.c:4866 #, c-format msgid "cursor variable \"%s\" is null" msgstr "kurzorová proměnná \"%s\" je null" -#: pl_exec.c:4715 pl_exec.c:4803 +#: pl_exec.c:4789 pl_exec.c:4877 #, c-format msgid "cursor \"%s\" does not exist" msgstr "kurzor \"%s\" neexistuje" -#: pl_exec.c:4728 +#: pl_exec.c:4802 #, c-format msgid "relative or absolute cursor position is null" msgstr "relativní nebo absolutní pozice kurzoru je null" -#: pl_exec.c:4984 pl_exec.c:5079 +#: pl_exec.c:5068 pl_exec.c:5163 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "proměnné \"%s\" deklarované jako NOT NULL nelze přiřadit null" # hodnotU -#: pl_exec.c:5060 +#: pl_exec.c:5144 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "proměnné složeného typu nelze přiřadit jinou než složenou hodnot" -#: pl_exec.c:5092 +#: pl_exec.c:5176 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "proměnné typu record nelze přiřadit jinou než slouženou hodnotu" -#: pl_exec.c:5143 +#: pl_exec.c:5227 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "nelze přiřazovat do systémového sloupce \"%s\"" -#: pl_exec.c:5207 +#: pl_exec.c:5291 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "počet rozměrů pole (%d) překračuje povolené maximum (%d)" -#: pl_exec.c:5239 +#: pl_exec.c:5323 #, c-format msgid "subscripted object is not an array" msgstr "indexovaná proměnná není pole" -#: pl_exec.c:5277 +#: pl_exec.c:5361 #, c-format msgid "array subscript in assignment must not be null" msgstr "index pole v přířazovacím příkazu nesmí být null" -#: pl_exec.c:5784 +#: pl_exec.c:5868 #, c-format msgid "query \"%s\" did not return data" msgstr "dotaz \"%s\" nevrátil žádná data" -#: pl_exec.c:5792 +#: pl_exec.c:5876 #, c-format msgid "query \"%s\" returned %d column" msgid_plural "query \"%s\" returned %d columns" @@ -481,80 +481,80 @@ msgstr[0] "dotaz \"%s\" vrátil %d sloupec" msgstr[1] "dotaz \"%s\" vrátil %d sloupce" msgstr[2] "dotaz \"%s\" vrátil %d sloupců" -#: pl_exec.c:5820 +#: pl_exec.c:5904 #, c-format msgid "query \"%s\" returned more than one row" msgstr "dotaz \"%s\" vrátil více než jeden řádek" -#: pl_exec.c:5883 +#: pl_exec.c:5967 #, c-format msgid "query \"%s\" is not a SELECT" msgstr "dotaz \"%s\" není SELECT" -#: pl_exec.c:6608 pl_exec.c:6648 pl_exec.c:6688 +#: pl_exec.c:6763 pl_exec.c:6803 pl_exec.c:6843 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "typ parametru %d (%s) neodpovídá typu při přípravě plánu (%s)" -#: pl_exec.c:7090 pl_exec.c:7124 pl_exec.c:7198 pl_exec.c:7224 +#: pl_exec.c:7254 pl_exec.c:7288 pl_exec.c:7362 pl_exec.c:7388 #, c-format msgid "number of source and target fields in assignment does not match" msgstr "počet zdrojových a cílových položek v přiřazení neodpovídá" #. translator: %s represents a name of an extra check -#: pl_exec.c:7092 pl_exec.c:7126 pl_exec.c:7200 pl_exec.c:7226 +#: pl_exec.c:7256 pl_exec.c:7290 pl_exec.c:7364 pl_exec.c:7390 #, c-format msgid "%s check of %s is active." msgstr "%s kontrola %s je aktivní." -#: pl_exec.c:7096 pl_exec.c:7130 pl_exec.c:7204 pl_exec.c:7230 +#: pl_exec.c:7260 pl_exec.c:7294 pl_exec.c:7368 pl_exec.c:7394 #, c-format msgid "Make sure the query returns the exact list of columns." msgstr "Ujistěte se že dotaz vrací přesný seznam sloupců." -#: pl_exec.c:7617 +#: pl_exec.c:7781 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "proměnné \"%s\" typu record ještě nebyla přiřazena hodnota" # tečka na konci # ok -#: pl_exec.c:7618 +#: pl_exec.c:7782 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "Proměnná typu record, které ještě nebyla přiřazena hodnota, nemá definovanou strukturu." -#: pl_funcs.c:239 +#: pl_funcs.c:237 msgid "statement block" msgstr "blok" -#: pl_funcs.c:241 +#: pl_funcs.c:239 msgid "assignment" msgstr "přiřazení" -#: pl_funcs.c:251 +#: pl_funcs.c:249 msgid "FOR with integer loop variable" msgstr "FOR s celočíselnou řídící proměnnou" # možná spíš "FOR nad SELECT dotazem # zkusim jeste neco jineho" -#: pl_funcs.c:253 +#: pl_funcs.c:251 msgid "FOR over SELECT rows" msgstr "FOR nad SELECT(em)" -#: pl_funcs.c:255 +#: pl_funcs.c:253 msgid "FOR over cursor" msgstr "FOR nad kurzorem" -#: pl_funcs.c:257 +#: pl_funcs.c:255 msgid "FOREACH over array" msgstr "FOREACH nad polem" -#: pl_funcs.c:271 +#: pl_funcs.c:269 msgid "SQL statement" msgstr "SQL příkaz" -#: pl_funcs.c:275 +#: pl_funcs.c:273 msgid "FOR over EXECUTE statement" msgstr "FOR nad dynamickým výběrem (FOR over EXECUTE)" @@ -785,8 +785,8 @@ msgstr "příliš mnoho cílových proměnných v klauzuli INTO" #: pl_gram.y:3752 #, c-format -msgid "end label \"%s\" specified for unlabelled block" -msgstr "použití koncového návěstí \"%s\" k bloku bez návěstí" +msgid "end label \"%s\" specified for unlabeled block" +msgstr "koncové návěstí \"%s\" použito pro blok bez návěstí" #: pl_gram.y:3759 #, c-format @@ -841,23 +841,23 @@ msgstr "příliš mnoho parametrů příkazu RAISE" msgid "too few parameters specified for RAISE" msgstr "příliš málo parametrů příkazu RAISE" -#: pl_handler.c:158 +#: pl_handler.c:156 msgid "Sets handling of conflicts between PL/pgSQL variable names and table column names." msgstr "Nastavuje způsob řešení konfliktu mezi názvy PL/pgSQL proměnných a názvy sloupců tabulek." -#: pl_handler.c:167 +#: pl_handler.c:165 msgid "Print information about parameters in the DETAIL part of the error messages generated on INTO ... STRICT failures." msgstr "Vypíše informace o parametrech v DETAIL částo chybové zprávy generované selháním INTO ... STRICT." -#: pl_handler.c:175 +#: pl_handler.c:173 msgid "Perform checks given in ASSERT statements." msgstr "Vyková kontroly uvedené v ASSERT příkazech." -#: pl_handler.c:183 +#: pl_handler.c:181 msgid "List of programming constructs that should produce a warning." msgstr "Seznam programovacích kontruktů které by měly vygenerovat varování." -#: pl_handler.c:193 +#: pl_handler.c:191 msgid "List of programming constructs that should produce an error." msgstr "Seznam programovacích konstruktů které by měly vygenerovat chybu." @@ -873,17 +873,23 @@ msgstr "\"%s\" na konci vstupu" msgid "%s at or near \"%s\"" msgstr "%s na nebo blízko \"%s\"" -#~ msgid "relation \"%s\" is not a table" -#~ msgstr "relace \"%s\" není tabulkou" +#~ msgid "duplicate value for cursor \"%s\" parameter \"%s\"" +#~ msgstr "duplicitní hodnota pro kurzor \"%s\" parametr \"%s\"" -#~ msgid "variable \"%s\" declared NOT NULL cannot default to NULL" -#~ msgstr "NULL nemůže být výchozí hodnotou proměnné \"%s\" deklarované jako NOT NULL" +#~ msgid "RETURN NEXT must specify a record or row variable in function returning row" +#~ msgstr "uvnitř funkce, která vrací složenou hodnotu, lze použít RETURN NEXT pouze s proměnnou typu record nebo složeného typu" -#~ msgid "Use a BEGIN block with an EXCEPTION clause instead." -#~ msgstr "Použijte blok BEGIN .. END s klauzulí EXCEPTION." +#~ msgid "RETURN must specify a record or row variable in function returning row" +#~ msgstr "uvnitř funkce, která vrací složenou hodnotu, lze použít RETURN pouze s proměnnou typu record nebo složeného typu" -#~ msgid "EXECUTE statement" -#~ msgstr "EXECUTE příkaz" +#~ msgid "label does not exist" +#~ msgstr "návěstí neexistuje" + +#~ msgid "default value for row or record variable is not supported" +#~ msgstr "nelze zadat defaultní hodnotu proměnným typu record nebo složeného typu" + +#~ msgid "row or record variable cannot be NOT NULL" +#~ msgstr "proměnná typu record nebo složeného typu nemůže být označena jako NOT NULL" # překládat RECORD jako "proměnná složeného typu" mi přijde divný (resp. spousta lidí nebude vědět o co jde), ale "záznam" se asi často používá pro řádek tabulky ... # record neprekladam (je to typ), prekladam row, ktery odpovida castecne zaznamu tabulek, ale take odpovida kompozitnim typum @@ -892,20 +898,14 @@ msgstr "%s na nebo blízko \"%s\"" #~ msgid "row or record variable cannot be CONSTANT" #~ msgstr "proměnná typu record nebo složeného typu nemůže být označena jako konstanta" -#~ msgid "row or record variable cannot be NOT NULL" -#~ msgstr "proměnná typu record nebo složeného typu nemůže být označena jako NOT NULL" - -#~ msgid "default value for row or record variable is not supported" -#~ msgstr "nelze zadat defaultní hodnotu proměnným typu record nebo složeného typu" - -#~ msgid "label does not exist" -#~ msgstr "návěstí neexistuje" +#~ msgid "EXECUTE statement" +#~ msgstr "EXECUTE příkaz" -#~ msgid "RETURN must specify a record or row variable in function returning row" -#~ msgstr "uvnitř funkce, která vrací složenou hodnotu, lze použít RETURN pouze s proměnnou typu record nebo složeného typu" +#~ msgid "Use a BEGIN block with an EXCEPTION clause instead." +#~ msgstr "Použijte blok BEGIN .. END s klauzulí EXCEPTION." -#~ msgid "RETURN NEXT must specify a record or row variable in function returning row" -#~ msgstr "uvnitř funkce, která vrací složenou hodnotu, lze použít RETURN NEXT pouze s proměnnou typu record nebo složeného typu" +#~ msgid "variable \"%s\" declared NOT NULL cannot default to NULL" +#~ msgstr "NULL nemůže být výchozí hodnotou proměnné \"%s\" deklarované jako NOT NULL" -#~ msgid "duplicate value for cursor \"%s\" parameter \"%s\"" -#~ msgstr "duplicitní hodnota pro kurzor \"%s\" parametr \"%s\"" +#~ msgid "relation \"%s\" is not a table" +#~ msgstr "relace \"%s\" není tabulkou" diff --git a/src/pl/plpgsql/src/po/de.po b/src/pl/plpgsql/src/po/de.po index fcd4b5e926fb4..5cf84696d9b77 100644 --- a/src/pl/plpgsql/src/po/de.po +++ b/src/pl/plpgsql/src/po/de.po @@ -1,16 +1,15 @@ # German message translation file for plpgsql -# Copyright (C) 2009 - 2019 PostgreSQL Global Development Group +# Copyright (C) 2009 - 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Peter Eisentraut , 2009 - 2019. # # Use these quotes: »%s« # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 12\n" +"Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-08-26 12:08+0000\n" -"PO-Revision-Date: 2019-08-26 14:58+0200\n" +"POT-Creation-Date: 2021-04-12 14:08+0000\n" +"PO-Revision-Date: 2021-04-12 17:04+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -19,149 +18,154 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: pl_comp.c:438 pl_handler.c:461 +#: pl_comp.c:438 pl_handler.c:496 #, c-format msgid "PL/pgSQL functions cannot accept type %s" msgstr "PL/pgSQL-Funktionen können Typ %s nicht annehmen" -#: pl_comp.c:526 +#: pl_comp.c:531 #, c-format msgid "could not determine actual return type for polymorphic function \"%s\"" msgstr "konnte den tatsächlichen Rückgabetyp der polymorphischen Funktion »%s« nicht ermitteln" -#: pl_comp.c:556 +#: pl_comp.c:561 #, c-format msgid "trigger functions can only be called as triggers" msgstr "Triggerfunktionen können nur als Trigger aufgerufen werden" -#: pl_comp.c:560 pl_handler.c:445 +#: pl_comp.c:565 pl_handler.c:480 #, c-format msgid "PL/pgSQL functions cannot return type %s" msgstr "PL/pgSQL-Funktionen können keinen Rückgabetyp %s haben" -#: pl_comp.c:600 +#: pl_comp.c:605 #, c-format msgid "trigger functions cannot have declared arguments" msgstr "Triggerfunktionen können keine deklarierten Argumente haben" -#: pl_comp.c:601 +#: pl_comp.c:606 #, c-format msgid "The arguments of the trigger can be accessed through TG_NARGS and TG_ARGV instead." msgstr "Auf die Argumente des Triggers kann stattdessen über TG_NARGS und TG_ARGV zugegriffen werden." -#: pl_comp.c:734 +#: pl_comp.c:739 #, c-format msgid "event trigger functions cannot have declared arguments" msgstr "Ereignistriggerfunktionen können keine deklarierten Argumente haben" -#: pl_comp.c:997 +#: pl_comp.c:1003 #, c-format msgid "compilation of PL/pgSQL function \"%s\" near line %d" msgstr "Kompilierung der PL/pgSQL-Funktion »%s« nahe Zeile %d" -#: pl_comp.c:1020 +#: pl_comp.c:1026 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "Parametername »%s« mehrmals angegeben" -#: pl_comp.c:1132 +#: pl_comp.c:1138 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "Spaltenverweis »%s« ist nicht eindeutig" -#: pl_comp.c:1134 +#: pl_comp.c:1140 #, c-format msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Er könnte sich entweder auf eine PL/pgSQL-Variable oder eine Tabellenspalte beziehen." -#: pl_comp.c:1317 pl_exec.c:5134 pl_exec.c:5499 pl_exec.c:5586 pl_exec.c:5677 -#: pl_exec.c:6594 +#: pl_comp.c:1323 pl_exec.c:5235 pl_exec.c:5408 pl_exec.c:5495 pl_exec.c:5586 +#: pl_exec.c:6566 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "Record »%s« hat kein Feld »%s«" -#: pl_comp.c:1793 +#: pl_comp.c:1817 #, c-format msgid "relation \"%s\" does not exist" msgstr "Relation »%s« existiert nicht" -#: pl_comp.c:1891 +#: pl_comp.c:1824 pl_comp.c:1866 +#, c-format +msgid "relation \"%s\" does not have a composite type" +msgstr "Relation »%s« hat keinen zusammengesetzten Typ" + +#: pl_comp.c:1932 #, c-format msgid "variable \"%s\" has pseudo-type %s" msgstr "Variable »%s« hat Pseudotyp %s" -#: pl_comp.c:2080 +#: pl_comp.c:2121 #, c-format msgid "type \"%s\" is only a shell" msgstr "Typ »%s« ist nur eine Hülle" -#: pl_comp.c:2162 pl_exec.c:6886 +#: pl_comp.c:2203 pl_exec.c:6867 #, c-format msgid "type %s is not composite" msgstr "Typ %s ist kein zusammengesetzter Typ" -#: pl_comp.c:2210 pl_comp.c:2263 +#: pl_comp.c:2251 pl_comp.c:2304 #, c-format msgid "unrecognized exception condition \"%s\"" msgstr "unbekannte Ausnahmebedingung »%s«" -#: pl_comp.c:2477 +#: pl_comp.c:2525 #, c-format msgid "could not determine actual argument type for polymorphic function \"%s\"" msgstr "konnte den tatsächlichen Argumenttyp der polymorphischen Funktion »%s« nicht ermitteln" -#: pl_exec.c:477 pl_exec.c:914 pl_exec.c:1152 +#: pl_exec.c:501 pl_exec.c:935 pl_exec.c:1170 msgid "during initialization of execution state" msgstr "bei der Initialisierung des Ausführungszustandes" -#: pl_exec.c:483 +#: pl_exec.c:507 msgid "while storing call arguments into local variables" msgstr "beim Abspeichern der Aufrufargumente in lokale Variablen" -#: pl_exec.c:571 pl_exec.c:987 +#: pl_exec.c:595 pl_exec.c:1008 msgid "during function entry" msgstr "beim Eintritts in die Funktion" -#: pl_exec.c:596 +#: pl_exec.c:618 #, c-format msgid "control reached end of function without RETURN" msgstr "Kontrollfluss erreichte das Ende der Funktion ohne RETURN" -#: pl_exec.c:603 +#: pl_exec.c:624 msgid "while casting return value to function's return type" msgstr "bei der Umwandlung des Rückgabewerts in den Rückgabetyp der Funktion" -#: pl_exec.c:616 pl_exec.c:3584 +#: pl_exec.c:637 pl_exec.c:3670 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "Funktion mit Mengenergebnis in einem Zusammenhang aufgerufen, der keine Mengenergebnisse verarbeiten kann" -#: pl_exec.c:742 pl_exec.c:1016 pl_exec.c:1177 +#: pl_exec.c:763 pl_exec.c:1034 pl_exec.c:1192 msgid "during function exit" msgstr "beim Verlassen der Funktion" -#: pl_exec.c:797 pl_exec.c:861 pl_exec.c:3429 +#: pl_exec.c:818 pl_exec.c:882 pl_exec.c:3468 msgid "returned record type does not match expected record type" msgstr "zurückgegebener Record-Typ stimmt nicht mit erwartetem Record-Typ überein" -#: pl_exec.c:1012 pl_exec.c:1173 +#: pl_exec.c:1031 pl_exec.c:1189 #, c-format msgid "control reached end of trigger procedure without RETURN" msgstr "Kontrollfluss erreichte das Ende der Triggerprozedur ohne RETURN" -#: pl_exec.c:1021 +#: pl_exec.c:1039 #, c-format msgid "trigger procedure cannot return a set" msgstr "Triggerprozedur kann keine Ergebnismenge zurückgeben" -#: pl_exec.c:1060 pl_exec.c:1088 +#: pl_exec.c:1078 pl_exec.c:1106 msgid "returned row structure does not match the structure of the triggering table" msgstr "zurückgegebene Zeilenstruktur stimmt nicht mit der Struktur der Tabelle, die den Trigger ausgelöst hat, überein" #. translator: last %s is a phrase such as "during statement block #. local variable initialization" #. -#: pl_exec.c:1225 +#: pl_exec.c:1238 #, c-format msgid "PL/pgSQL function %s line %d %s" msgstr "PL/pgSQL-Funktion %s Zeile %d %s" @@ -169,672 +173,657 @@ msgstr "PL/pgSQL-Funktion %s Zeile %d %s" #. translator: last %s is a phrase such as "while storing call #. arguments into local variables" #. -#: pl_exec.c:1236 +#: pl_exec.c:1249 #, c-format msgid "PL/pgSQL function %s %s" msgstr "PL/pgSQL-Funktion %s %s" #. translator: last %s is a plpgsql statement type name -#: pl_exec.c:1244 +#: pl_exec.c:1257 #, c-format msgid "PL/pgSQL function %s line %d at %s" msgstr "PL/pgSQL-Funktion %s Zeile %d bei %s" -#: pl_exec.c:1250 +#: pl_exec.c:1263 #, c-format msgid "PL/pgSQL function %s" msgstr "PL/pgSQL-Funktion %s" -#: pl_exec.c:1588 +#: pl_exec.c:1634 msgid "during statement block local variable initialization" msgstr "bei der Initialisierung der lokalen Variablen des Anweisungsblocks" -#: pl_exec.c:1686 +#: pl_exec.c:1732 msgid "during statement block entry" msgstr "beim Eintreten in den Anweisungsblock" -#: pl_exec.c:1718 +#: pl_exec.c:1764 msgid "during statement block exit" msgstr "beim Verlassen des Anweisungsblocks" -#: pl_exec.c:1756 +#: pl_exec.c:1802 msgid "during exception cleanup" msgstr "beim Aufräumen der Ausnahme" -#: pl_exec.c:2252 +#: pl_exec.c:2369 #, c-format msgid "procedure parameter \"%s\" is an output parameter but corresponding argument is not writable" msgstr "Prozedurparameter »%s« ist ein Ausgabeparameter, aber das entsprechende Argument ist nicht schreibbar" -#: pl_exec.c:2257 +#: pl_exec.c:2374 #, c-format msgid "procedure parameter %d is an output parameter but corresponding argument is not writable" msgstr "Prozedurparameter %d ist ein Ausgabeparameter, aber das entsprechende Argument ist nicht schreibbar" -#: pl_exec.c:2368 +#: pl_exec.c:2407 #, c-format msgid "GET STACKED DIAGNOSTICS cannot be used outside an exception handler" msgstr "GET STACKED DIAGNOSTICS kann nicht außerhalb einer Ausnahmebehandlung verwendet werden" -#: pl_exec.c:2568 +#: pl_exec.c:2607 #, c-format msgid "case not found" msgstr "Fall nicht gefunden" -#: pl_exec.c:2569 +#: pl_exec.c:2608 #, c-format msgid "CASE statement is missing ELSE part." msgstr "Der CASE-Anweisung fehlt ein ELSE-Teil." -#: pl_exec.c:2662 +#: pl_exec.c:2701 #, c-format msgid "lower bound of FOR loop cannot be null" msgstr "Untergrenze einer FOR-Schleife darf nicht NULL sein" -#: pl_exec.c:2678 +#: pl_exec.c:2717 #, c-format msgid "upper bound of FOR loop cannot be null" msgstr "Obergrenze einer FOR-Schleife darf nicht NULL sein" -#: pl_exec.c:2696 +#: pl_exec.c:2735 #, c-format msgid "BY value of FOR loop cannot be null" msgstr "BY-Wert einer FOR-Schleife darf nicht NULL sein" -#: pl_exec.c:2702 +#: pl_exec.c:2741 #, c-format msgid "BY value of FOR loop must be greater than zero" msgstr "BY-Wert einer FOR-Schleife muss größer als null sein" -#: pl_exec.c:2836 pl_exec.c:4558 +#: pl_exec.c:2875 pl_exec.c:4640 #, c-format msgid "cursor \"%s\" already in use" msgstr "Cursor »%s« ist bereits in Verwendung" -#: pl_exec.c:2859 pl_exec.c:4623 +#: pl_exec.c:2898 pl_exec.c:4705 #, c-format msgid "arguments given for cursor without arguments" msgstr "einem Cursor ohne Argumente wurden Argumente übergeben" -#: pl_exec.c:2878 pl_exec.c:4642 +#: pl_exec.c:2917 pl_exec.c:4724 #, c-format msgid "arguments required for cursor" msgstr "Cursor benötigt Argumente" -#: pl_exec.c:2965 +#: pl_exec.c:3004 #, c-format msgid "FOREACH expression must not be null" msgstr "FOREACH-Ausdruck darf nicht NULL sein" -#: pl_exec.c:2980 +#: pl_exec.c:3019 #, c-format msgid "FOREACH expression must yield an array, not type %s" msgstr "FOREACH-Ausdruck muss ein Array ergeben, nicht Typ %s" -#: pl_exec.c:2997 +#: pl_exec.c:3036 #, c-format msgid "slice dimension (%d) is out of the valid range 0..%d" msgstr "Slice-Dimension (%d) ist außerhalb des gültigen Bereichs 0..%d" -#: pl_exec.c:3024 +#: pl_exec.c:3063 #, c-format msgid "FOREACH ... SLICE loop variable must be of an array type" msgstr "FOREACH ... SLICE Schleifenvariable muss einen Arraytyp haben" -#: pl_exec.c:3028 +#: pl_exec.c:3067 #, c-format msgid "FOREACH loop variable must not be of an array type" msgstr "FOREACH-Schleifenvariable darf keinen Array-Typ haben" -#: pl_exec.c:3190 pl_exec.c:3247 pl_exec.c:3422 +#: pl_exec.c:3229 pl_exec.c:3286 pl_exec.c:3461 #, c-format msgid "cannot return non-composite value from function returning composite type" msgstr "kann keinen nicht zusammengesetzten Wert aus einer Funktion zurückgeben, die einen zusammengesetzten Typ zurückgibt" -#: pl_exec.c:3286 pl_gram.y:3309 +#: pl_exec.c:3325 pl_gram.y:3344 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "RETURN NEXT kann nur in einer Funktion mit SETOF-Rückgabetyp verwendet werden" -#: pl_exec.c:3327 pl_exec.c:3459 +#: pl_exec.c:3366 pl_exec.c:3498 #, c-format msgid "wrong result type supplied in RETURN NEXT" msgstr "falscher Ergebnistyp angegeben in RETURN NEXT" -#: pl_exec.c:3365 pl_exec.c:3386 +#: pl_exec.c:3404 pl_exec.c:3425 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "falscher Record-Typ angegeben in RETURN NEXT" -#: pl_exec.c:3478 +#: pl_exec.c:3517 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "RETURN NEXT muss einen Parameter haben" -#: pl_exec.c:3504 pl_gram.y:3373 +#: pl_exec.c:3545 pl_gram.y:3408 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "RETURN QUERY kann nur in einer Funktion mit SETOF-Rückgabetyp verwendet werden" -#: pl_exec.c:3528 +#: pl_exec.c:3563 msgid "structure of query does not match function result type" msgstr "Struktur der Anfrage stimmt nicht mit Rückgabetyp der Funktion überein" -#: pl_exec.c:3612 pl_exec.c:3750 +#: pl_exec.c:3596 pl_exec.c:5792 +#, c-format +msgid "query \"%s\" is not a SELECT" +msgstr "Anfrage »%s« ist kein SELECT" + +#: pl_exec.c:3618 pl_exec.c:4418 pl_exec.c:8603 +#, c-format +msgid "query string argument of EXECUTE is null" +msgstr "Anfrageargument von EXECUTE ist NULL" + +#: pl_exec.c:3698 pl_exec.c:3836 #, c-format msgid "RAISE option already specified: %s" msgstr "RAISE-Option bereits angegeben: %s" -#: pl_exec.c:3646 +#: pl_exec.c:3732 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "RAISE ohne Parameter kann nicht außerhalb einer Ausnahmebehandlung verwendet werden" -#: pl_exec.c:3740 +#: pl_exec.c:3826 #, c-format msgid "RAISE statement option cannot be null" msgstr "Option einer RAISE-Anweisung darf nicht NULL sein" -#: pl_exec.c:3810 +#: pl_exec.c:3896 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3865 +#: pl_exec.c:3951 #, c-format msgid "assertion failed" msgstr "Assertion fehlgeschlagen" -#: pl_exec.c:4207 pl_exec.c:4397 +#: pl_exec.c:4291 pl_exec.c:4479 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "COPY vom/zum Client funktioniert in PL/pgSQL nicht" -#: pl_exec.c:4213 +#: pl_exec.c:4297 #, c-format msgid "unsupported transaction command in PL/pgSQL" msgstr "nicht unterstützter Transaktionsbefehl in PL/pgSQL" -#: pl_exec.c:4236 pl_exec.c:4426 +#: pl_exec.c:4320 pl_exec.c:4508 #, c-format msgid "INTO used with a command that cannot return data" msgstr "INTO mit einem Befehl verwendet, der keine Daten zurückgeben kann" -#: pl_exec.c:4259 pl_exec.c:4449 +#: pl_exec.c:4343 pl_exec.c:4531 #, c-format msgid "query returned no rows" msgstr "Anfrage gab keine Zeilen zurück" -#: pl_exec.c:4281 pl_exec.c:4468 +#: pl_exec.c:4365 pl_exec.c:4550 #, c-format msgid "query returned more than one row" msgstr "Anfrage gab mehr als eine Zeile zurück" -#: pl_exec.c:4283 +#: pl_exec.c:4367 #, c-format msgid "Make sure the query returns a single row, or use LIMIT 1." msgstr "Stellen Sie sicher, dass die Anfrage eine einzige Zeile zurückgibt, oder verwenden Sie LIMIT 1." -#: pl_exec.c:4299 +#: pl_exec.c:4383 #, c-format msgid "query has no destination for result data" msgstr "Anfrage hat keinen Bestimmungsort für die Ergebnisdaten" -#: pl_exec.c:4300 +#: pl_exec.c:4384 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." msgstr "Wenn Sie die Ergebnisse eines SELECT verwerfen wollen, verwenden Sie stattdessen PERFORM." -#: pl_exec.c:4333 pl_exec.c:8518 -#, c-format -msgid "query string argument of EXECUTE is null" -msgstr "Anfrageargument von EXECUTE ist NULL" - -#: pl_exec.c:4389 +#: pl_exec.c:4471 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "EXECUTE von SELECT ... INTO ist nicht implementiert" -#: pl_exec.c:4390 +#: pl_exec.c:4472 #, c-format msgid "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS instead." msgstr "Sie könnten stattdessen EXECUTE ... INTO oder EXECUTE CREATE TABLE ... AS verwenden." -#: pl_exec.c:4403 +#: pl_exec.c:4485 #, c-format msgid "EXECUTE of transaction commands is not implemented" msgstr "EXECUTE von Transaktionsbefehlen ist nicht implementiert" -#: pl_exec.c:4704 pl_exec.c:4792 +#: pl_exec.c:4786 pl_exec.c:4874 #, c-format msgid "cursor variable \"%s\" is null" msgstr "Cursor-Variable »%s« ist NULL" -#: pl_exec.c:4715 pl_exec.c:4803 +#: pl_exec.c:4797 pl_exec.c:4885 #, c-format msgid "cursor \"%s\" does not exist" msgstr "Cursor »%s« existiert nicht" -#: pl_exec.c:4728 +#: pl_exec.c:4810 #, c-format msgid "relative or absolute cursor position is null" msgstr "relative oder absolute Cursorposition ist NULL" -#: pl_exec.c:4984 pl_exec.c:5079 +#: pl_exec.c:5085 pl_exec.c:5180 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "NULL-Wert kann der Variable »%s« nicht zugewiesen werden, weil sie als NOT NULL deklariert ist" -#: pl_exec.c:5060 +#: pl_exec.c:5161 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "nicht zusammengesetzter Wert kann nicht einer Zeilenvariable zugewiesen werden" -#: pl_exec.c:5092 +#: pl_exec.c:5193 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "nicht zusammengesetzter Wert kann nicht einer Record-Variable zugewiesen werden" -#: pl_exec.c:5143 +#: pl_exec.c:5244 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "kann Systemspalte »%s« keinen Wert zuweisen" -#: pl_exec.c:5207 -#, c-format -msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" -msgstr "Anzahl der Arraydimensionen (%d) überschreitet erlaubtes Maximum (%d)" - -#: pl_exec.c:5239 -#, c-format -msgid "subscripted object is not an array" -msgstr "Objekt mit Arrayindex ist kein Array" - -#: pl_exec.c:5277 -#, c-format -msgid "array subscript in assignment must not be null" -msgstr "Arrayindex in Zuweisung darf nicht NULL sein" - -#: pl_exec.c:5784 +#: pl_exec.c:5693 #, c-format msgid "query \"%s\" did not return data" msgstr "Anfrage »%s« hat keine Daten zurückgegeben" -#: pl_exec.c:5792 +#: pl_exec.c:5701 #, c-format msgid "query \"%s\" returned %d column" msgid_plural "query \"%s\" returned %d columns" msgstr[0] "Anfrage »%s« hat %d Spalte zurückgegeben" msgstr[1] "Anfrage »%s« hat %d Spalten zurückgegeben" -#: pl_exec.c:5820 +#: pl_exec.c:5729 #, c-format msgid "query \"%s\" returned more than one row" msgstr "Anfrage »%s« hat mehr als eine Zeile zurückgegeben" -#: pl_exec.c:5883 -#, c-format -msgid "query \"%s\" is not a SELECT" -msgstr "Anfrage »%s« ist kein SELECT" - -#: pl_exec.c:6608 pl_exec.c:6648 pl_exec.c:6688 +#: pl_exec.c:6580 pl_exec.c:6620 pl_exec.c:6660 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "Typ von Parameter %d (%s) stimmt nicht mit dem überein, als der Plan vorbereitet worden ist (%s)" -#: pl_exec.c:7090 pl_exec.c:7124 pl_exec.c:7198 pl_exec.c:7224 +#: pl_exec.c:7071 pl_exec.c:7105 pl_exec.c:7179 pl_exec.c:7205 #, c-format msgid "number of source and target fields in assignment does not match" msgstr "Anzahl der Quell- und Zielfelder in der Zuweisung stimmt nicht überein" #. translator: %s represents a name of an extra check -#: pl_exec.c:7092 pl_exec.c:7126 pl_exec.c:7200 pl_exec.c:7226 +#: pl_exec.c:7073 pl_exec.c:7107 pl_exec.c:7181 pl_exec.c:7207 #, c-format msgid "%s check of %s is active." msgstr "Check »%s« aus »%s« ist aktiv." -#: pl_exec.c:7096 pl_exec.c:7130 pl_exec.c:7204 pl_exec.c:7230 +#: pl_exec.c:7077 pl_exec.c:7111 pl_exec.c:7185 pl_exec.c:7211 #, c-format msgid "Make sure the query returns the exact list of columns." msgstr "Stellen Sie sicher, dass die Anfrage die genaue Spaltenliste zurückgibt." -#: pl_exec.c:7617 +#: pl_exec.c:7598 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "Record »%s« hat noch keinen Wert" -#: pl_exec.c:7618 +#: pl_exec.c:7599 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "Die Tupelstruktur eines Records ohne Wert ist unbestimmt." -#: pl_funcs.c:239 +#: pl_funcs.c:237 msgid "statement block" msgstr "Anweisungsblock" -#: pl_funcs.c:241 +#: pl_funcs.c:239 msgid "assignment" msgstr "Zuweisung" -#: pl_funcs.c:251 +#: pl_funcs.c:249 msgid "FOR with integer loop variable" msgstr "FOR mit ganzzahliger Schleifenvariable" -#: pl_funcs.c:253 +#: pl_funcs.c:251 msgid "FOR over SELECT rows" msgstr "FOR über SELECT-Zeilen" -#: pl_funcs.c:255 +#: pl_funcs.c:253 msgid "FOR over cursor" msgstr "FOR über Cursor" -#: pl_funcs.c:257 +#: pl_funcs.c:255 msgid "FOREACH over array" msgstr "FOREACH über Array" -#: pl_funcs.c:271 +#: pl_funcs.c:269 msgid "SQL statement" msgstr "SQL-Anweisung" -#: pl_funcs.c:275 +#: pl_funcs.c:273 msgid "FOR over EXECUTE statement" msgstr "FOR-über-EXECUTE-Anweisung" -#: pl_gram.y:489 +#: pl_gram.y:487 #, c-format msgid "block label must be placed before DECLARE, not after" msgstr "Blocklabel muss vor DECLARE stehen, nicht danach" -#: pl_gram.y:509 +#: pl_gram.y:507 #, c-format msgid "collations are not supported by type %s" msgstr "Sortierfolgen werden von Typ %s nicht unterstützt" -#: pl_gram.y:528 +#: pl_gram.y:526 #, c-format msgid "variable \"%s\" must have a default value, since it's declared NOT NULL" msgstr "Variable »%s« muss einen Vorgabewert haben, da sie als NOT NULL deklariert ist" -#: pl_gram.y:675 pl_gram.y:690 pl_gram.y:716 +#: pl_gram.y:674 pl_gram.y:689 pl_gram.y:715 #, c-format msgid "variable \"%s\" does not exist" msgstr "Variable »%s« existiert nicht" -#: pl_gram.y:734 pl_gram.y:762 +#: pl_gram.y:733 pl_gram.y:761 msgid "duplicate declaration" msgstr "doppelte Deklaration" -#: pl_gram.y:745 pl_gram.y:773 +#: pl_gram.y:744 pl_gram.y:772 #, c-format msgid "variable \"%s\" shadows a previously defined variable" msgstr "Variable »%s« verdeckt eine zuvor definierte Variable" -#: pl_gram.y:993 +#: pl_gram.y:1046 #, c-format msgid "diagnostics item %s is not allowed in GET STACKED DIAGNOSTICS" msgstr "Diagnostikelement %s ist in GET STACKED DIAGNOSTICS nicht erlaubt" -#: pl_gram.y:1011 +#: pl_gram.y:1064 #, c-format msgid "diagnostics item %s is not allowed in GET CURRENT DIAGNOSTICS" msgstr "Diagnostikelement %s ist in GET CURRENT DIAGNOSTICS nicht erlaubt" -#: pl_gram.y:1106 +#: pl_gram.y:1159 msgid "unrecognized GET DIAGNOSTICS item" msgstr "unbekanntes Element in GET DIAGNOSTICS" -#: pl_gram.y:1116 pl_gram.y:3553 +#: pl_gram.y:1175 pl_gram.y:3583 #, c-format msgid "\"%s\" is not a scalar variable" msgstr "»%s« ist keine skalare Variable" -#: pl_gram.y:1370 pl_gram.y:1567 +#: pl_gram.y:1405 pl_gram.y:1599 #, c-format msgid "loop variable of loop over rows must be a record variable or list of scalar variables" msgstr "Schleifenvariable einer Schleife über Zeilen muss eine Record-Variable oder eine Liste von skalaren Variablen sein" -#: pl_gram.y:1405 +#: pl_gram.y:1440 #, c-format msgid "cursor FOR loop must have only one target variable" msgstr "Cursor-FOR-Schleife darf nur eine Zielvariable haben" -#: pl_gram.y:1412 +#: pl_gram.y:1447 #, c-format msgid "cursor FOR loop must use a bound cursor variable" msgstr "Cursor-FOR-Schleife muss eine gebundene Cursor-Variable verwenden" -#: pl_gram.y:1499 +#: pl_gram.y:1538 #, c-format msgid "integer FOR loop must have only one target variable" msgstr "ganzzahlige FOR-Schleife darf nur eine Zielvariable haben" -#: pl_gram.y:1537 +#: pl_gram.y:1572 #, c-format msgid "cannot specify REVERSE in query FOR loop" msgstr "REVERSE kann nicht in einer Anfrage-FOR-Schleife verwendet werden" -#: pl_gram.y:1670 +#: pl_gram.y:1702 #, c-format msgid "loop variable of FOREACH must be a known variable or list of variables" msgstr "Schleifenvariable von FOREACH muss eine bekannte Variable oder Liste von Variablen sein" -#: pl_gram.y:1712 +#: pl_gram.y:1744 #, c-format msgid "there is no label \"%s\" attached to any block or loop enclosing this statement" msgstr "diese Anweisung umschließt kein Block und keine Schleife mit Label »%s«" -#: pl_gram.y:1720 +#: pl_gram.y:1752 #, c-format msgid "block label \"%s\" cannot be used in CONTINUE" msgstr "Blocklabel »%s« kann nicht in CONTINUE verwendet werden" -#: pl_gram.y:1735 +#: pl_gram.y:1767 #, c-format msgid "EXIT cannot be used outside a loop, unless it has a label" msgstr "EXIT kann nicht außerhalb einer Schleife verwendet werden, außer wenn es ein Label hat" -#: pl_gram.y:1736 +#: pl_gram.y:1768 #, c-format msgid "CONTINUE cannot be used outside a loop" msgstr "CONTINUE kann nicht außerhalb einer Schleife verwendet werden" -#: pl_gram.y:1760 pl_gram.y:1798 pl_gram.y:1846 pl_gram.y:2998 pl_gram.y:3083 -#: pl_gram.y:3194 pl_gram.y:3957 +#: pl_gram.y:1792 pl_gram.y:1830 pl_gram.y:1878 pl_gram.y:3032 pl_gram.y:3118 +#: pl_gram.y:3229 pl_gram.y:3982 msgid "unexpected end of function definition" msgstr "unerwartetes Ende der Funktionsdefinition" -#: pl_gram.y:1866 pl_gram.y:1890 pl_gram.y:1906 pl_gram.y:1912 pl_gram.y:2031 -#: pl_gram.y:2039 pl_gram.y:2053 pl_gram.y:2148 pl_gram.y:2399 pl_gram.y:2493 -#: pl_gram.y:2652 pl_gram.y:3799 pl_gram.y:3860 pl_gram.y:3938 +#: pl_gram.y:1898 pl_gram.y:1922 pl_gram.y:1938 pl_gram.y:1944 pl_gram.y:2065 +#: pl_gram.y:2073 pl_gram.y:2087 pl_gram.y:2182 pl_gram.y:2434 pl_gram.y:2524 +#: pl_gram.y:2683 pl_gram.y:3825 pl_gram.y:3886 pl_gram.y:3963 msgid "syntax error" msgstr "Syntaxfehler" -#: pl_gram.y:1894 pl_gram.y:1896 pl_gram.y:2403 pl_gram.y:2405 +#: pl_gram.y:1926 pl_gram.y:1928 pl_gram.y:2438 pl_gram.y:2440 msgid "invalid SQLSTATE code" msgstr "ungültiger SQLSTATE-Code" -#: pl_gram.y:2096 +#: pl_gram.y:2130 msgid "syntax error, expected \"FOR\"" msgstr "Syntaxfehler, »FOR« erwartet" -#: pl_gram.y:2157 +#: pl_gram.y:2191 #, c-format msgid "FETCH statement cannot return multiple rows" msgstr "FETCH-Anweisung kann nicht mehrere Zeilen zurückgeben" -#: pl_gram.y:2281 +#: pl_gram.y:2316 #, c-format msgid "cursor variable must be a simple variable" msgstr "Cursor-Variable muss eine einfache Variable sein" -#: pl_gram.y:2287 +#: pl_gram.y:2322 #, c-format msgid "variable \"%s\" must be of type cursor or refcursor" msgstr "Variable »%s« muss Typ cursor oder refcursor haben" -#: pl_gram.y:2623 pl_gram.y:2634 +#: pl_gram.y:2654 pl_gram.y:2665 #, c-format msgid "\"%s\" is not a known variable" msgstr "»%s« ist keine bekannte Variable" -#: pl_gram.y:2738 pl_gram.y:2748 pl_gram.y:2903 +#: pl_gram.y:2771 pl_gram.y:2781 pl_gram.y:2937 msgid "mismatched parentheses" msgstr "Klammern passen nicht" -#: pl_gram.y:2752 +#: pl_gram.y:2785 #, c-format msgid "missing \"%s\" at end of SQL expression" msgstr "»%s« fehlt am Ende des SQL-Ausdrucks" -#: pl_gram.y:2758 +#: pl_gram.y:2791 #, c-format msgid "missing \"%s\" at end of SQL statement" msgstr "»%s« fehlt am Ende der SQL-Anweisung" -#: pl_gram.y:2775 +#: pl_gram.y:2808 msgid "missing expression" msgstr "Ausdruck fehlt" -#: pl_gram.y:2777 +#: pl_gram.y:2810 msgid "missing SQL statement" msgstr "SQL-Anweisung fehlt" -#: pl_gram.y:2905 +#: pl_gram.y:2939 msgid "incomplete data type declaration" msgstr "unvollständige Datentypdeklaration" -#: pl_gram.y:2928 +#: pl_gram.y:2962 msgid "missing data type declaration" msgstr "fehlende Datentypdeklaration" -#: pl_gram.y:3006 +#: pl_gram.y:3040 msgid "INTO specified more than once" msgstr "INTO mehr als einmal angegeben" -#: pl_gram.y:3175 +#: pl_gram.y:3210 msgid "expected FROM or IN" msgstr "FROM oder IN erwartet" -#: pl_gram.y:3236 +#: pl_gram.y:3271 #, c-format msgid "RETURN cannot have a parameter in function returning set" msgstr "RETURN kann keinen Parameter haben in einer Funktion mit Mengenergebnis" -#: pl_gram.y:3237 +#: pl_gram.y:3272 #, c-format msgid "Use RETURN NEXT or RETURN QUERY." msgstr "Verwenden Sie RETURN NEXT oder RETURN QUERY." -#: pl_gram.y:3247 +#: pl_gram.y:3282 #, c-format msgid "RETURN cannot have a parameter in a procedure" msgstr "RETURN kann keinen Parameter haben in einer Prozedur" -#: pl_gram.y:3252 +#: pl_gram.y:3287 #, c-format msgid "RETURN cannot have a parameter in function returning void" msgstr "RETURN kann keinen Parameter haben in einer Funktion, die »void« zurückgibt" -#: pl_gram.y:3261 +#: pl_gram.y:3296 #, c-format msgid "RETURN cannot have a parameter in function with OUT parameters" msgstr "RETURN kann keinen Parameter haben in einer Funktion mit OUT-Parametern" -#: pl_gram.y:3324 +#: pl_gram.y:3359 #, c-format msgid "RETURN NEXT cannot have a parameter in function with OUT parameters" msgstr "RETURN NEXT kann keinen Parameter haben in einer Funktion mit OUT-Parametern" -#: pl_gram.y:3432 +#: pl_gram.y:3467 #, c-format msgid "variable \"%s\" is declared CONSTANT" msgstr "Variable »%s« ist als CONSTANT deklariert" -#: pl_gram.y:3495 +#: pl_gram.y:3525 #, c-format msgid "record variable cannot be part of multiple-item INTO list" msgstr "Record-Variable kann nicht Teil einer INTO-Liste mit mehreren Elementen sein" -#: pl_gram.y:3541 +#: pl_gram.y:3571 #, c-format msgid "too many INTO variables specified" msgstr "zu viele INTO-Variablen angegeben" -#: pl_gram.y:3752 +#: pl_gram.y:3779 #, c-format -msgid "end label \"%s\" specified for unlabelled block" +msgid "end label \"%s\" specified for unlabeled block" msgstr "Endlabel »%s« für ungelabelten Block angegeben" -#: pl_gram.y:3759 +#: pl_gram.y:3786 #, c-format msgid "end label \"%s\" differs from block's label \"%s\"" msgstr "Endlabel »%s« unterscheidet sich vom Label des Blocks »%s«" -#: pl_gram.y:3794 +#: pl_gram.y:3820 #, c-format msgid "cursor \"%s\" has no arguments" msgstr "Cursor »%s« hat keine Argumente" -#: pl_gram.y:3808 +#: pl_gram.y:3834 #, c-format msgid "cursor \"%s\" has arguments" msgstr "Cursor »%s« hat Argumente" -#: pl_gram.y:3850 +#: pl_gram.y:3876 #, c-format msgid "cursor \"%s\" has no argument named \"%s\"" msgstr "Cursor »%s« hat kein Argument namens »%s«" -#: pl_gram.y:3870 +#: pl_gram.y:3896 #, c-format msgid "value for parameter \"%s\" of cursor \"%s\" specified more than once" msgstr "Wert für Parameter »%s« von Cursor »%s« mehrmals angegeben" -#: pl_gram.y:3895 +#: pl_gram.y:3921 #, c-format msgid "not enough arguments for cursor \"%s\"" msgstr "nicht genügend Argumente für Cursor »%s«" -#: pl_gram.y:3902 +#: pl_gram.y:3928 #, c-format msgid "too many arguments for cursor \"%s\"" msgstr "zu viele Argumente für Cursor »%s«" -#: pl_gram.y:3989 +#: pl_gram.y:4014 msgid "unrecognized RAISE statement option" msgstr "unbekannte Option für RAISE-Anweisung" -#: pl_gram.y:3993 +#: pl_gram.y:4018 msgid "syntax error, expected \"=\"" msgstr "Syntaxfehler, »=« erwartet" -#: pl_gram.y:4034 +#: pl_gram.y:4059 #, c-format msgid "too many parameters specified for RAISE" msgstr "zu viele Parameter für RAISE angegeben" -#: pl_gram.y:4038 +#: pl_gram.y:4063 #, c-format msgid "too few parameters specified for RAISE" msgstr "zu wenige Parameter für RAISE angegeben" -#: pl_handler.c:158 +#: pl_handler.c:156 msgid "Sets handling of conflicts between PL/pgSQL variable names and table column names." msgstr "Bestimmt die Verarbeitung von Konflikten zwischen PL/pgSQL-Variablennamen und Tabellenspaltennamen." -#: pl_handler.c:167 +#: pl_handler.c:165 msgid "Print information about parameters in the DETAIL part of the error messages generated on INTO ... STRICT failures." msgstr "Informationen über Parameter im DETAIL-Teil von Fehlermeldungen ausgeben, die durch Fehler in INTO ... STRICT erzeugt wurden." -#: pl_handler.c:175 +#: pl_handler.c:173 msgid "Perform checks given in ASSERT statements." msgstr "Prüfungen in ASSERT-Anweisungen ausführen." -#: pl_handler.c:183 +#: pl_handler.c:181 msgid "List of programming constructs that should produce a warning." msgstr "Zählt Programmierkonstrukte auf, die eine Warnung erzeugen sollen." -#: pl_handler.c:193 +#: pl_handler.c:191 msgid "List of programming constructs that should produce an error." msgstr "Zählt Programmierkonstrukte auf, die einen Fehler zeugen sollen." diff --git a/src/pl/plpgsql/src/po/es.po b/src/pl/plpgsql/src/po/es.po index b2336c8a87f8b..90f217ec669ec 100644 --- a/src/pl/plpgsql/src/po/es.po +++ b/src/pl/plpgsql/src/po/es.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: plpgsql (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:38+0000\n" -"PO-Revision-Date: 2019-06-06 17:26-0400\n" +"POT-Creation-Date: 2020-09-13 10:39+0000\n" +"PO-Revision-Date: 2020-09-18 18:36-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -766,7 +766,7 @@ msgstr "se especificaron demasiadas variables INTO" #: pl_gram.y:3752 #, c-format -msgid "end label \"%s\" specified for unlabelled block" +msgid "end label \"%s\" specified for unlabeled block" msgstr "etiqueta de término «%s» especificada para un bloque sin etiqueta" #: pl_gram.y:3759 diff --git a/src/pl/plpgsql/src/po/fr.po b/src/pl/plpgsql/src/po/fr.po index 53c8eaf6e7b11..e797c24f92586 100644 --- a/src/pl/plpgsql/src/po/fr.po +++ b/src/pl/plpgsql/src/po/fr.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-30 21:08+0000\n" -"PO-Revision-Date: 2019-10-01 19:02+0200\n" +"POT-Creation-Date: 2021-04-15 01:39+0000\n" +"PO-Revision-Date: 2021-04-15 08:43+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -17,151 +17,156 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Poedit 2.4.2\n" -#: pl_comp.c:438 pl_handler.c:461 +#: pl_comp.c:438 pl_handler.c:496 #, c-format msgid "PL/pgSQL functions cannot accept type %s" msgstr "les fonctions PL/pgSQL ne peuvent pas accepter le type %s" -#: pl_comp.c:526 +#: pl_comp.c:531 #, c-format msgid "could not determine actual return type for polymorphic function \"%s\"" msgstr "n'a pas pu déterminer le type de retour pour la fonction polymorphique « %s »" -#: pl_comp.c:556 +#: pl_comp.c:561 #, c-format msgid "trigger functions can only be called as triggers" msgstr "les fonctions triggers peuvent seulement être appelées par des triggers" -#: pl_comp.c:560 pl_handler.c:445 +#: pl_comp.c:565 pl_handler.c:480 #, c-format msgid "PL/pgSQL functions cannot return type %s" msgstr "les fonctions PL/pgSQL ne peuvent pas renvoyer le type %s" -#: pl_comp.c:600 +#: pl_comp.c:605 #, c-format msgid "trigger functions cannot have declared arguments" msgstr "les fonctions triggers ne peuvent pas avoir d'arguments déclarés" -#: pl_comp.c:601 +#: pl_comp.c:606 #, c-format msgid "The arguments of the trigger can be accessed through TG_NARGS and TG_ARGV instead." msgstr "À la place, on peut accéder aux arguments du trigger par TG_NARGS et TG_ARGV." -#: pl_comp.c:734 +#: pl_comp.c:739 #, c-format msgid "event trigger functions cannot have declared arguments" msgstr "les fonctions triggers sur événement ne peuvent pas avoir des arguments déclarés" -#: pl_comp.c:997 +#: pl_comp.c:1003 #, c-format msgid "compilation of PL/pgSQL function \"%s\" near line %d" msgstr "compilation de la fonction PL/pgSQL « %s » près de la ligne %d" -#: pl_comp.c:1020 +#: pl_comp.c:1026 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "le nom du paramètre « %s » est utilisé plus d'une fois" -#: pl_comp.c:1132 +#: pl_comp.c:1138 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "la référence à la colonne « %s » est ambigüe" -#: pl_comp.c:1134 +#: pl_comp.c:1140 #, c-format msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Cela pourrait faire référence à une variable PL/pgSQL ou à la colonne d'une table." -#: pl_comp.c:1317 pl_exec.c:5134 pl_exec.c:5499 pl_exec.c:5586 pl_exec.c:5677 -#: pl_exec.c:6594 +#: pl_comp.c:1323 pl_exec.c:5235 pl_exec.c:5408 pl_exec.c:5495 pl_exec.c:5586 +#: pl_exec.c:6566 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "l'enregistrement « %s » n'a pas de champs « %s »" -#: pl_comp.c:1793 +#: pl_comp.c:1817 #, c-format msgid "relation \"%s\" does not exist" msgstr "la relation « %s » n'existe pas" -#: pl_comp.c:1891 +#: pl_comp.c:1824 pl_comp.c:1866 +#, c-format +msgid "relation \"%s\" does not have a composite type" +msgstr "la relation « %s » n'a pas un type composite" + +#: pl_comp.c:1932 #, c-format msgid "variable \"%s\" has pseudo-type %s" msgstr "la variable « %s » a le pseudo-type %s" -#: pl_comp.c:2080 +#: pl_comp.c:2121 #, c-format msgid "type \"%s\" is only a shell" msgstr "le type « %s » n'est qu'une coquille" -#: pl_comp.c:2162 pl_exec.c:6886 +#: pl_comp.c:2203 pl_exec.c:6867 #, c-format msgid "type %s is not composite" msgstr "le type %s n'est pas un type composite" -#: pl_comp.c:2210 pl_comp.c:2263 +#: pl_comp.c:2251 pl_comp.c:2304 #, c-format msgid "unrecognized exception condition \"%s\"" msgstr "condition d'exception non reconnue « %s »" -#: pl_comp.c:2477 +#: pl_comp.c:2525 #, c-format msgid "could not determine actual argument type for polymorphic function \"%s\"" msgstr "n'a pas pu déterminer le type d'argument pour la fonction polymorphique « %s »" -#: pl_exec.c:477 pl_exec.c:914 pl_exec.c:1152 +#: pl_exec.c:501 pl_exec.c:935 pl_exec.c:1170 msgid "during initialization of execution state" msgstr "durant l'initialisation de l'état de la fonction" -#: pl_exec.c:483 +#: pl_exec.c:507 msgid "while storing call arguments into local variables" msgstr "lors du stockage des arguments dans les variables locales" -#: pl_exec.c:571 pl_exec.c:987 +#: pl_exec.c:595 pl_exec.c:1008 msgid "during function entry" msgstr "durant l'entrée d'une fonction" -#: pl_exec.c:596 +#: pl_exec.c:618 #, c-format msgid "control reached end of function without RETURN" msgstr "le contrôle a atteint la fin de la fonction sans RETURN" -#: pl_exec.c:603 +#: pl_exec.c:624 msgid "while casting return value to function's return type" msgstr "lors de la conversion de la valeur de retour au type de retour de la fonction" -#: pl_exec.c:616 pl_exec.c:3584 +#: pl_exec.c:637 pl_exec.c:3670 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "fonction renvoyant un ensemble appelée dans un contexte qui ne peut pas accepter un ensemble" -#: pl_exec.c:742 pl_exec.c:1016 pl_exec.c:1177 +#: pl_exec.c:763 pl_exec.c:1034 pl_exec.c:1192 msgid "during function exit" msgstr "lors de la sortie de la fonction" -#: pl_exec.c:797 pl_exec.c:861 pl_exec.c:3429 +#: pl_exec.c:818 pl_exec.c:882 pl_exec.c:3468 msgid "returned record type does not match expected record type" msgstr "le type d'enregistrement renvoyé ne correspond pas au type d'enregistrement attendu" -#: pl_exec.c:1012 pl_exec.c:1173 +#: pl_exec.c:1031 pl_exec.c:1189 #, c-format msgid "control reached end of trigger procedure without RETURN" msgstr "le contrôle a atteint la fin de la procédure trigger sans RETURN" -#: pl_exec.c:1021 +#: pl_exec.c:1039 #, c-format msgid "trigger procedure cannot return a set" msgstr "une procédure trigger ne peut pas renvoyer un ensemble" -#: pl_exec.c:1060 pl_exec.c:1088 +#: pl_exec.c:1078 pl_exec.c:1106 msgid "returned row structure does not match the structure of the triggering table" msgstr "la structure de ligne renvoyée ne correspond pas à la structure de la table du trigger" #. translator: last %s is a phrase such as "during statement block #. local variable initialization" #. -#: pl_exec.c:1225 +#: pl_exec.c:1238 #, c-format msgid "PL/pgSQL function %s line %d %s" msgstr "fonction PL/pgSQL %s, ligne %d, %s" @@ -169,49 +174,49 @@ msgstr "fonction PL/pgSQL %s, ligne %d, %s" #. translator: last %s is a phrase such as "while storing call #. arguments into local variables" #. -#: pl_exec.c:1236 +#: pl_exec.c:1249 #, c-format msgid "PL/pgSQL function %s %s" msgstr "fonction PL/pgSQL %s, %s" #. translator: last %s is a plpgsql statement type name -#: pl_exec.c:1244 +#: pl_exec.c:1257 #, c-format msgid "PL/pgSQL function %s line %d at %s" msgstr "fonction PL/pgSQL %s, ligne %d à %s" -#: pl_exec.c:1250 +#: pl_exec.c:1263 #, c-format msgid "PL/pgSQL function %s" msgstr "fonction PL/pgSQL %s" -#: pl_exec.c:1588 +#: pl_exec.c:1634 msgid "during statement block local variable initialization" msgstr "lors de l'initialisation des variables locales du bloc d'instructions" -#: pl_exec.c:1686 +#: pl_exec.c:1732 msgid "during statement block entry" msgstr "lors de l'entrée dans le bloc d'instructions" -#: pl_exec.c:1718 +#: pl_exec.c:1764 msgid "during statement block exit" msgstr "lors de la sortie du bloc d'instructions" -#: pl_exec.c:1756 +#: pl_exec.c:1802 msgid "during exception cleanup" msgstr "lors du nettoyage de l'exception" -#: pl_exec.c:2252 +#: pl_exec.c:2369 #, c-format msgid "procedure parameter \"%s\" is an output parameter but corresponding argument is not writable" msgstr "le paramètre de la procédure « %s » est un argument en sortie mais l'argument correspondant n'est pas modifiable" -#: pl_exec.c:2257 +#: pl_exec.c:2374 #, c-format msgid "procedure parameter %d is an output parameter but corresponding argument is not writable" msgstr "le paramètre de la procédure %d est un paramètre en sortie mais l'argument correspondant n'est pas modifiable" -#: pl_exec.c:2368 +#: pl_exec.c:2407 #, c-format msgid "GET STACKED DIAGNOSTICS cannot be used outside an exception handler" msgstr "GET STACKED DIAGNOSTICS ne peut pas être utilisé à l'extérieur d'un gestionnaire d'exception" @@ -222,625 +227,610 @@ msgstr "GET STACKED DIAGNOSTICS ne peut pas être utilisé à l'extérieur d'un # (errcode(ERRCODE_CASE_NOT_FOUND), # errmsg("case not found"), # errhint("CASE statement is missing ELSE part."))); -#: pl_exec.c:2568 +#: pl_exec.c:2607 #, c-format msgid "case not found" msgstr "cas introuvable" -#: pl_exec.c:2569 +#: pl_exec.c:2608 #, c-format msgid "CASE statement is missing ELSE part." msgstr "l'instruction CASE n'a pas de partie ELSE." -#: pl_exec.c:2662 +#: pl_exec.c:2701 #, c-format msgid "lower bound of FOR loop cannot be null" msgstr "la limite inférieure d'une boucle FOR ne peut pas être NULL" -#: pl_exec.c:2678 +#: pl_exec.c:2717 #, c-format msgid "upper bound of FOR loop cannot be null" msgstr "la limite supérieure de la boucle FOR ne peut pas être NULL" -#: pl_exec.c:2696 +#: pl_exec.c:2735 #, c-format msgid "BY value of FOR loop cannot be null" msgstr "la valeur BY d'une boucle FOR ne peut pas être NULL" -#: pl_exec.c:2702 +#: pl_exec.c:2741 #, c-format msgid "BY value of FOR loop must be greater than zero" msgstr "la valeur BY d'une boucle FOR doit être plus grande que zéro" -#: pl_exec.c:2836 pl_exec.c:4558 +#: pl_exec.c:2875 pl_exec.c:4640 #, c-format msgid "cursor \"%s\" already in use" msgstr "curseur « %s » déjà en cours d'utilisation" -#: pl_exec.c:2859 pl_exec.c:4623 +#: pl_exec.c:2898 pl_exec.c:4705 #, c-format msgid "arguments given for cursor without arguments" msgstr "arguments fournis pour un curseur sans argument" -#: pl_exec.c:2878 pl_exec.c:4642 +#: pl_exec.c:2917 pl_exec.c:4724 #, c-format msgid "arguments required for cursor" msgstr "arguments requis pour le curseur" -#: pl_exec.c:2965 +#: pl_exec.c:3004 #, c-format msgid "FOREACH expression must not be null" msgstr "l'expression FOREACH ne doit pas être NULL" -#: pl_exec.c:2980 +#: pl_exec.c:3019 #, c-format msgid "FOREACH expression must yield an array, not type %s" msgstr "l'expression FOREACH doit renvoyer un tableau, pas un type %s" -#: pl_exec.c:2997 +#: pl_exec.c:3036 #, c-format msgid "slice dimension (%d) is out of the valid range 0..%d" msgstr "la dimension de la partie (%d) est en dehors des valeurs valides (0..%d)" -#: pl_exec.c:3024 +#: pl_exec.c:3063 #, c-format msgid "FOREACH ... SLICE loop variable must be of an array type" msgstr "la variable d'une boucle FOREACH ... SLICE doit être d'un type tableau" -#: pl_exec.c:3028 +#: pl_exec.c:3067 #, c-format msgid "FOREACH loop variable must not be of an array type" msgstr "la valeur d'une boucle FOREACH ne doit pas être de type tableau" -#: pl_exec.c:3190 pl_exec.c:3247 pl_exec.c:3422 +#: pl_exec.c:3229 pl_exec.c:3286 pl_exec.c:3461 #, c-format msgid "cannot return non-composite value from function returning composite type" msgstr "ne peut pas renvoyer de valeurs non composites à partir d'une fonction renvoyant un type composite" -#: pl_exec.c:3286 pl_gram.y:3309 +#: pl_exec.c:3325 pl_gram.y:3344 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "ne peut pas utiliser RETURN NEXT dans une fonction non SETOF" -#: pl_exec.c:3327 pl_exec.c:3459 +#: pl_exec.c:3366 pl_exec.c:3498 #, c-format msgid "wrong result type supplied in RETURN NEXT" msgstr "mauvais type de résultat fourni dans RETURN NEXT" -#: pl_exec.c:3365 pl_exec.c:3386 +#: pl_exec.c:3404 pl_exec.c:3425 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "mauvais type d'enregistrement fourni à RETURN NEXT" -#: pl_exec.c:3478 +#: pl_exec.c:3517 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "RETURN NEXT doit avoir un paramètre" -#: pl_exec.c:3504 pl_gram.y:3373 +#: pl_exec.c:3545 pl_gram.y:3408 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "ne peut pas utiliser RETURN QUERY dans une fonction non SETOF" -#: pl_exec.c:3528 +#: pl_exec.c:3563 msgid "structure of query does not match function result type" msgstr "la structure de la requête ne correspond pas au type de résultat de la fonction" -#: pl_exec.c:3612 pl_exec.c:3750 +#: pl_exec.c:3596 pl_exec.c:5792 +#, c-format +msgid "query \"%s\" is not a SELECT" +msgstr "la requête « %s » n'est pas un SELECT" + +#: pl_exec.c:3618 pl_exec.c:4418 pl_exec.c:8603 +#, c-format +msgid "query string argument of EXECUTE is null" +msgstr "l'argument de la requête d'EXECUTE est NULL" + +#: pl_exec.c:3698 pl_exec.c:3836 #, c-format msgid "RAISE option already specified: %s" msgstr "option RAISE déjà spécifiée : %s" -#: pl_exec.c:3646 +#: pl_exec.c:3732 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "RAISE sans paramètre ne peut pas être utilisé sans un gestionnaire d'exceptions" -#: pl_exec.c:3740 +#: pl_exec.c:3826 #, c-format msgid "RAISE statement option cannot be null" msgstr "l'option de l'instruction RAISE ne peut pas être NULL" -#: pl_exec.c:3810 +#: pl_exec.c:3896 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3865 +#: pl_exec.c:3951 #, c-format msgid "assertion failed" msgstr "échec de l'assertion" -#: pl_exec.c:4207 pl_exec.c:4397 +#: pl_exec.c:4291 pl_exec.c:4479 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "ne peut pas utiliser COPY vers/depuis un client en PL/pgSQL" -#: pl_exec.c:4213 +#: pl_exec.c:4297 #, c-format msgid "unsupported transaction command in PL/pgSQL" msgstr "commande de transaction non supportée dans PL/pgSQL" -#: pl_exec.c:4236 pl_exec.c:4426 +#: pl_exec.c:4320 pl_exec.c:4508 #, c-format msgid "INTO used with a command that cannot return data" msgstr "INTO utilisé dans une commande qui ne peut pas envoyer de données" -#: pl_exec.c:4259 pl_exec.c:4449 +#: pl_exec.c:4343 pl_exec.c:4531 #, c-format msgid "query returned no rows" msgstr "la requête n'a renvoyé aucune ligne" -#: pl_exec.c:4281 pl_exec.c:4468 +#: pl_exec.c:4365 pl_exec.c:4550 #, c-format msgid "query returned more than one row" msgstr "la requête a renvoyé plus d'une ligne" -#: pl_exec.c:4283 +#: pl_exec.c:4367 #, c-format msgid "Make sure the query returns a single row, or use LIMIT 1." msgstr "Assurez-vous que la requête ne renvoie qu'une seule ligne ou utilisez LIMIT 1." -#: pl_exec.c:4299 +#: pl_exec.c:4383 #, c-format msgid "query has no destination for result data" msgstr "la requête n'a pas de destination pour les données résultantes" -#: pl_exec.c:4300 +#: pl_exec.c:4384 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." msgstr "Si vous voulez ignorer le résultat d'un SELECT, utilisez PERFORM à la place." -#: pl_exec.c:4333 pl_exec.c:8518 -#, c-format -msgid "query string argument of EXECUTE is null" -msgstr "l'argument de la requête d'EXECUTE est NULL" - -#: pl_exec.c:4389 +#: pl_exec.c:4471 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "EXECUTE n'est pas implementé pour SELECT ... INTO" -#: pl_exec.c:4390 +#: pl_exec.c:4472 #, c-format msgid "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS instead." msgstr "Vous pouvez aussi utiliser EXECUTE ... INTO ou EXECUTE CREATE TABLE ... AS à la place." -#: pl_exec.c:4403 +#: pl_exec.c:4485 #, c-format msgid "EXECUTE of transaction commands is not implemented" msgstr "EXECUTE pour les commandes de transactions n'est pas implémenté" -#: pl_exec.c:4704 pl_exec.c:4792 +#: pl_exec.c:4786 pl_exec.c:4874 #, c-format msgid "cursor variable \"%s\" is null" msgstr "la variable du curseur « %s » est NULL" -#: pl_exec.c:4715 pl_exec.c:4803 +#: pl_exec.c:4797 pl_exec.c:4885 #, c-format msgid "cursor \"%s\" does not exist" msgstr "le curseur « %s » n'existe pas" -#: pl_exec.c:4728 +#: pl_exec.c:4810 #, c-format msgid "relative or absolute cursor position is null" msgstr "la position relative ou absolue du curseur est NULL" -#: pl_exec.c:4984 pl_exec.c:5079 +#: pl_exec.c:5085 pl_exec.c:5180 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "une valeur NULL ne peut pas être affectée à la variable « %s » déclarée non NULL" -#: pl_exec.c:5060 +#: pl_exec.c:5161 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "ne peut pas affecter une valeur non composite à une variable de type ROW" -#: pl_exec.c:5092 +#: pl_exec.c:5193 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "ne peut pas affecter une valeur non composite à une variable RECORD" -#: pl_exec.c:5143 +#: pl_exec.c:5244 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "ne peut pas affecter « %s » à une colonne système" -#: pl_exec.c:5207 -#, c-format -msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" -msgstr "le nombre de dimensions du tableau (%d) dépasse la maximum autorisé (%d)" - -#: pl_exec.c:5239 -#, c-format -msgid "subscripted object is not an array" -msgstr "l'objet souscrit n'est pas un tableau" - -#: pl_exec.c:5277 -#, c-format -msgid "array subscript in assignment must not be null" -msgstr "un indice de tableau dans une affectation ne peut pas être NULL" - -#: pl_exec.c:5784 +#: pl_exec.c:5693 #, c-format msgid "query \"%s\" did not return data" msgstr "la requête « %s » ne renvoie pas de données" -#: pl_exec.c:5792 +#: pl_exec.c:5701 #, c-format msgid "query \"%s\" returned %d column" msgid_plural "query \"%s\" returned %d columns" msgstr[0] "la requête « %s » a renvoyé %d colonne" msgstr[1] "la requête « %s » a renvoyé %d colonnes" -#: pl_exec.c:5820 +#: pl_exec.c:5729 #, c-format msgid "query \"%s\" returned more than one row" msgstr "la requête « %s » a renvoyé plus d'une ligne" -#: pl_exec.c:5883 -#, c-format -msgid "query \"%s\" is not a SELECT" -msgstr "la requête « %s » n'est pas un SELECT" - -#: pl_exec.c:6608 pl_exec.c:6648 pl_exec.c:6688 +#: pl_exec.c:6580 pl_exec.c:6620 pl_exec.c:6660 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "le type de paramètre %d (%s) ne correspond pas à celui préparé dans le plan (%s)" -#: pl_exec.c:7090 pl_exec.c:7124 pl_exec.c:7198 pl_exec.c:7224 +#: pl_exec.c:7071 pl_exec.c:7105 pl_exec.c:7179 pl_exec.c:7205 #, c-format msgid "number of source and target fields in assignment does not match" msgstr "le nombre de champs source et celui de champs cible dans l'affectation ne correspondent pas" #. translator: %s represents a name of an extra check -#: pl_exec.c:7092 pl_exec.c:7126 pl_exec.c:7200 pl_exec.c:7226 +#: pl_exec.c:7073 pl_exec.c:7107 pl_exec.c:7181 pl_exec.c:7207 #, c-format msgid "%s check of %s is active." msgstr "%s vérification de %s est active." -#: pl_exec.c:7096 pl_exec.c:7130 pl_exec.c:7204 pl_exec.c:7230 +#: pl_exec.c:7077 pl_exec.c:7111 pl_exec.c:7185 pl_exec.c:7211 #, c-format msgid "Make sure the query returns the exact list of columns." msgstr "Assurez-vous que la requête renvoie la liste exacte des colonnes." -#: pl_exec.c:7617 +#: pl_exec.c:7598 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "l'enregistrement « %s » n'est pas encore affecté" -#: pl_exec.c:7618 +#: pl_exec.c:7599 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "La structure de ligne d'un enregistrement pas encore affecté est indéterminée." -#: pl_funcs.c:239 +#: pl_funcs.c:237 msgid "statement block" msgstr "bloc d'instructions" -#: pl_funcs.c:241 +#: pl_funcs.c:239 msgid "assignment" msgstr "affectation" -#: pl_funcs.c:251 +#: pl_funcs.c:249 msgid "FOR with integer loop variable" msgstr "variable entière de boucle FOR" -#: pl_funcs.c:253 +#: pl_funcs.c:251 msgid "FOR over SELECT rows" msgstr "FOR sur des lignes de SELECT" -#: pl_funcs.c:255 +#: pl_funcs.c:253 msgid "FOR over cursor" msgstr "FOR sur un curseur" -#: pl_funcs.c:257 +#: pl_funcs.c:255 msgid "FOREACH over array" msgstr "FOREACH sur un tableau" -#: pl_funcs.c:271 +#: pl_funcs.c:269 msgid "SQL statement" msgstr "instruction SQL" -#: pl_funcs.c:275 +#: pl_funcs.c:273 msgid "FOR over EXECUTE statement" msgstr "FOR sur une instruction EXECUTE" -#: pl_gram.y:489 +#: pl_gram.y:487 #, c-format msgid "block label must be placed before DECLARE, not after" msgstr "le label du bloc doit être placé avant DECLARE, et non pas après" -#: pl_gram.y:509 +#: pl_gram.y:507 #, c-format msgid "collations are not supported by type %s" msgstr "les collationnements ne sont pas supportés par le type %s" -#: pl_gram.y:528 +#: pl_gram.y:526 #, c-format msgid "variable \"%s\" must have a default value, since it's declared NOT NULL" msgstr "la variable « %s » doit avoir une valeur par défaut car elle est déclarée NOT NULL" -#: pl_gram.y:675 pl_gram.y:690 pl_gram.y:716 +#: pl_gram.y:674 pl_gram.y:689 pl_gram.y:715 #, c-format msgid "variable \"%s\" does not exist" msgstr "la variable « %s » n'existe pas" -#: pl_gram.y:734 pl_gram.y:762 +#: pl_gram.y:733 pl_gram.y:761 msgid "duplicate declaration" msgstr "déclaration dupliquée" -#: pl_gram.y:745 pl_gram.y:773 +#: pl_gram.y:744 pl_gram.y:772 #, c-format msgid "variable \"%s\" shadows a previously defined variable" msgstr "la variable « %s » cache une variable définie précédemment" -#: pl_gram.y:993 +#: pl_gram.y:1046 #, c-format msgid "diagnostics item %s is not allowed in GET STACKED DIAGNOSTICS" msgstr "l'élément %s de diagnostique n'est pas autorisé dans GET STACKED DIAGNOSTICS" -#: pl_gram.y:1011 +#: pl_gram.y:1064 #, c-format msgid "diagnostics item %s is not allowed in GET CURRENT DIAGNOSTICS" msgstr "l'élément %s de diagnostique n'est pas autorisé dans GET CURRENT DIAGNOSTICS" -#: pl_gram.y:1106 +#: pl_gram.y:1159 msgid "unrecognized GET DIAGNOSTICS item" msgstr "élément GET DIAGNOSTICS non reconnu" -#: pl_gram.y:1116 pl_gram.y:3553 +#: pl_gram.y:1175 pl_gram.y:3583 #, c-format msgid "\"%s\" is not a scalar variable" msgstr "« %s » n'est pas une variable scalaire" -#: pl_gram.y:1370 pl_gram.y:1567 +#: pl_gram.y:1405 pl_gram.y:1599 #, c-format msgid "loop variable of loop over rows must be a record variable or list of scalar variables" msgstr "la variable d'une boucle sur des lignes doit être une variable de type record ou une liste de variables scalaires" -#: pl_gram.y:1405 +#: pl_gram.y:1440 #, c-format msgid "cursor FOR loop must have only one target variable" msgstr "le curseur de la boucle FOR ne doit avoir qu'une seule variable cible" -#: pl_gram.y:1412 +#: pl_gram.y:1447 #, c-format msgid "cursor FOR loop must use a bound cursor variable" msgstr "le curseur de la boucle FOR doit utiliser une variable d'un curseur lié" -#: pl_gram.y:1499 +#: pl_gram.y:1538 #, c-format msgid "integer FOR loop must have only one target variable" msgstr "une boucle FOR de type entier ne doit avoir qu'une seule variable cible" -#: pl_gram.y:1537 +#: pl_gram.y:1572 #, c-format msgid "cannot specify REVERSE in query FOR loop" msgstr "ne peut pas spécifier REVERSE dans la requête d'une boucle FOR" -#: pl_gram.y:1670 +#: pl_gram.y:1702 #, c-format msgid "loop variable of FOREACH must be a known variable or list of variables" msgstr "la variable d'une boucle FOREACH doit être une variable connue ou une liste de variables" -#: pl_gram.y:1712 +#: pl_gram.y:1744 #, c-format msgid "there is no label \"%s\" attached to any block or loop enclosing this statement" msgstr "il n'existe pas de label « %s » attaché à un bloc ou à une boucle englobant cette instruction" -#: pl_gram.y:1720 +#: pl_gram.y:1752 #, c-format msgid "block label \"%s\" cannot be used in CONTINUE" msgstr "le label de bloc « %s » ne peut pas être utilisé avec CONTINUE" -#: pl_gram.y:1735 +#: pl_gram.y:1767 #, c-format msgid "EXIT cannot be used outside a loop, unless it has a label" msgstr "EXIT ne peut pas être utilisé à l'extérieur d'une boucle, sauf s'il a un label" -#: pl_gram.y:1736 +#: pl_gram.y:1768 #, c-format msgid "CONTINUE cannot be used outside a loop" msgstr "CONTINUE ne peut pas être utilisé à l'extérieur d'une boucle" -#: pl_gram.y:1760 pl_gram.y:1798 pl_gram.y:1846 pl_gram.y:2998 pl_gram.y:3083 -#: pl_gram.y:3194 pl_gram.y:3957 +#: pl_gram.y:1792 pl_gram.y:1830 pl_gram.y:1878 pl_gram.y:3032 pl_gram.y:3118 +#: pl_gram.y:3229 pl_gram.y:3982 msgid "unexpected end of function definition" msgstr "fin inattendue de la définition de la fonction" -#: pl_gram.y:1866 pl_gram.y:1890 pl_gram.y:1906 pl_gram.y:1912 pl_gram.y:2031 -#: pl_gram.y:2039 pl_gram.y:2053 pl_gram.y:2148 pl_gram.y:2399 pl_gram.y:2493 -#: pl_gram.y:2652 pl_gram.y:3799 pl_gram.y:3860 pl_gram.y:3938 +#: pl_gram.y:1898 pl_gram.y:1922 pl_gram.y:1938 pl_gram.y:1944 pl_gram.y:2065 +#: pl_gram.y:2073 pl_gram.y:2087 pl_gram.y:2182 pl_gram.y:2434 pl_gram.y:2524 +#: pl_gram.y:2683 pl_gram.y:3825 pl_gram.y:3886 pl_gram.y:3963 msgid "syntax error" msgstr "erreur de syntaxe" -#: pl_gram.y:1894 pl_gram.y:1896 pl_gram.y:2403 pl_gram.y:2405 +#: pl_gram.y:1926 pl_gram.y:1928 pl_gram.y:2438 pl_gram.y:2440 msgid "invalid SQLSTATE code" msgstr "code SQLSTATE invalide" -#: pl_gram.y:2096 +#: pl_gram.y:2130 msgid "syntax error, expected \"FOR\"" msgstr "erreur de syntaxe, « FOR » attendu" -#: pl_gram.y:2157 +#: pl_gram.y:2191 #, c-format msgid "FETCH statement cannot return multiple rows" msgstr "l'instruction FETCH ne peut pas renvoyer plusieurs lignes" -#: pl_gram.y:2281 +#: pl_gram.y:2316 #, c-format msgid "cursor variable must be a simple variable" msgstr "la variable de curseur doit être une variable simple" -#: pl_gram.y:2287 +#: pl_gram.y:2322 #, c-format msgid "variable \"%s\" must be of type cursor or refcursor" msgstr "la variable « %s » doit être de type cursor ou refcursor" -#: pl_gram.y:2623 pl_gram.y:2634 +#: pl_gram.y:2654 pl_gram.y:2665 #, c-format msgid "\"%s\" is not a known variable" msgstr "« %s » n'est pas une variable connue" -#: pl_gram.y:2738 pl_gram.y:2748 pl_gram.y:2903 +#: pl_gram.y:2771 pl_gram.y:2781 pl_gram.y:2937 msgid "mismatched parentheses" msgstr "parenthèses non correspondantes" -#: pl_gram.y:2752 +#: pl_gram.y:2785 #, c-format msgid "missing \"%s\" at end of SQL expression" msgstr "« %s » manquant à la fin de l'expression SQL" -#: pl_gram.y:2758 +#: pl_gram.y:2791 #, c-format msgid "missing \"%s\" at end of SQL statement" msgstr "« %s » manquant à la fin de l'instruction SQL" -#: pl_gram.y:2775 +#: pl_gram.y:2808 msgid "missing expression" msgstr "expression manquante" -#: pl_gram.y:2777 +#: pl_gram.y:2810 msgid "missing SQL statement" msgstr "instruction SQL manquante" -#: pl_gram.y:2905 +#: pl_gram.y:2939 msgid "incomplete data type declaration" msgstr "déclaration incomplète d'un type de données" -#: pl_gram.y:2928 +#: pl_gram.y:2962 msgid "missing data type declaration" msgstr "déclaration manquante d'un type de données" -#: pl_gram.y:3006 +#: pl_gram.y:3040 msgid "INTO specified more than once" msgstr "INTO spécifié plus d'une fois" -#: pl_gram.y:3175 +#: pl_gram.y:3210 msgid "expected FROM or IN" msgstr "attendait FROM ou IN" -#: pl_gram.y:3236 +#: pl_gram.y:3271 #, c-format msgid "RETURN cannot have a parameter in function returning set" msgstr "RETURN ne peut pas avoir de paramètre dans une fonction renvoyant un ensemble" -#: pl_gram.y:3237 +#: pl_gram.y:3272 #, c-format msgid "Use RETURN NEXT or RETURN QUERY." msgstr "Utilisez RETURN NEXT ou RETURN QUERY." -#: pl_gram.y:3247 +#: pl_gram.y:3282 #, c-format msgid "RETURN cannot have a parameter in a procedure" msgstr "RETURN ne peut pas avoir de paramètre dans une procédure" -#: pl_gram.y:3252 +#: pl_gram.y:3287 #, c-format msgid "RETURN cannot have a parameter in function returning void" msgstr "RETURN ne peut pas avoir de paramètre dans une fonction renvoyant void" -#: pl_gram.y:3261 +#: pl_gram.y:3296 #, c-format msgid "RETURN cannot have a parameter in function with OUT parameters" msgstr "RETURN ne peut pas avoir de paramètre dans une fonction avec des paramètres OUT" -#: pl_gram.y:3324 +#: pl_gram.y:3359 #, c-format msgid "RETURN NEXT cannot have a parameter in function with OUT parameters" msgstr "RETURN NEXT ne peut pas avoir de paramètre dans une fonction avec des paramètres OUT" -#: pl_gram.y:3432 +#: pl_gram.y:3467 #, c-format msgid "variable \"%s\" is declared CONSTANT" msgstr "la variable « %s » est déclarée CONSTANT" -#: pl_gram.y:3495 +#: pl_gram.y:3525 #, c-format msgid "record variable cannot be part of multiple-item INTO list" msgstr "la variable de type record ne peut pas faire partie d'une liste INTO à plusieurs éléments" -#: pl_gram.y:3541 +#: pl_gram.y:3571 #, c-format msgid "too many INTO variables specified" msgstr "trop de variables INTO indiquées" -#: pl_gram.y:3752 +#: pl_gram.y:3779 #, c-format -msgid "end label \"%s\" specified for unlabelled block" +msgid "end label \"%s\" specified for unlabeled block" msgstr "label de fin « %s » spécifié pour un bloc sans label" -#: pl_gram.y:3759 +#: pl_gram.y:3786 #, c-format msgid "end label \"%s\" differs from block's label \"%s\"" msgstr "le label de fin « %s » est différent du label « %s » du bloc" -#: pl_gram.y:3794 +#: pl_gram.y:3820 #, c-format msgid "cursor \"%s\" has no arguments" msgstr "le curseur « %s » n'a pas d'argument" -#: pl_gram.y:3808 +#: pl_gram.y:3834 #, c-format msgid "cursor \"%s\" has arguments" msgstr "le curseur « %s » a des arguments" -#: pl_gram.y:3850 +#: pl_gram.y:3876 #, c-format msgid "cursor \"%s\" has no argument named \"%s\"" msgstr "le curseur « %s » n'a pas d'argument nommé « %s »" -#: pl_gram.y:3870 +#: pl_gram.y:3896 #, c-format msgid "value for parameter \"%s\" of cursor \"%s\" specified more than once" msgstr "la valeur du paramètre « %s » pour le curseur « %s » est spécifiée plus d'une fois" -#: pl_gram.y:3895 +#: pl_gram.y:3921 #, c-format msgid "not enough arguments for cursor \"%s\"" msgstr "pas assez d'arguments pour le curseur « %s »" -#: pl_gram.y:3902 +#: pl_gram.y:3928 #, c-format msgid "too many arguments for cursor \"%s\"" msgstr "trop d'arguments pour le curseur « %s »" -#: pl_gram.y:3989 +#: pl_gram.y:4014 msgid "unrecognized RAISE statement option" msgstr "option de l'instruction RAISE inconnue" -#: pl_gram.y:3993 +#: pl_gram.y:4018 msgid "syntax error, expected \"=\"" msgstr "erreur de syntaxe, « = » attendu" -#: pl_gram.y:4034 +#: pl_gram.y:4059 #, c-format msgid "too many parameters specified for RAISE" msgstr "trop de paramètres spécifiés pour RAISE" -#: pl_gram.y:4038 +#: pl_gram.y:4063 #, c-format msgid "too few parameters specified for RAISE" msgstr "trop peu de paramètres pour RAISE" -#: pl_handler.c:158 +#: pl_handler.c:156 msgid "Sets handling of conflicts between PL/pgSQL variable names and table column names." msgstr "Configure la gestion des conflits entre les noms de variables PL/pgSQL et les noms des colonnes des tables." -#: pl_handler.c:167 +#: pl_handler.c:165 msgid "Print information about parameters in the DETAIL part of the error messages generated on INTO ... STRICT failures." msgstr "Affiche des informations sur les paramètres dans la partie DETAIL des messages d'erreur générés pour des échecs INTO .. STRICT." -#: pl_handler.c:175 +#: pl_handler.c:173 msgid "Perform checks given in ASSERT statements." msgstr "Réalise les vérifications données dans les instructions ASSERT." -#: pl_handler.c:183 +#: pl_handler.c:181 msgid "List of programming constructs that should produce a warning." msgstr "Liste des constructions de programmation qui devraient produire un message d'avertissement." -#: pl_handler.c:193 +#: pl_handler.c:191 msgid "List of programming constructs that should produce an error." msgstr "Liste des constructions de programmation qui devraient produire une erreur." @@ -988,3 +978,12 @@ msgstr "%s sur ou près de « %s »" #~ msgid "label does not exist" #~ msgstr "le label n'existe pas" + +#~ msgid "array subscript in assignment must not be null" +#~ msgstr "un indice de tableau dans une affectation ne peut pas être NULL" + +#~ msgid "subscripted object is not an array" +#~ msgstr "l'objet souscrit n'est pas un tableau" + +#~ msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" +#~ msgstr "le nombre de dimensions du tableau (%d) dépasse la maximum autorisé (%d)" diff --git a/src/pl/plpgsql/src/po/ko.po b/src/pl/plpgsql/src/po/ko.po index ed84bf1d6606c..e1397d110280a 100644 --- a/src/pl/plpgsql/src/po/ko.po +++ b/src/pl/plpgsql/src/po/ko.po @@ -4,10 +4,10 @@ # Ioseph Kim , 2010 msgid "" msgstr "" -"Project-Id-Version: plpgsql (PostgreSQL) 12\n" +"Project-Id-Version: plpgsql (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-09 20:08+0000\n" -"PO-Revision-Date: 2019-11-01 12:48+0900\n" +"POT-Creation-Date: 2020-10-05 20:38+0000\n" +"PO-Revision-Date: 2020-10-06 16:39+0900\n" "Last-Translator: Ioseph Kim \n" "Language-Team: Korean \n" "Language: ko\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: pl_comp.c:438 pl_handler.c:461 +#: pl_comp.c:436 pl_handler.c:471 #, c-format msgid "PL/pgSQL functions cannot accept type %s" msgstr "PL/pgSQL 함수에 %s 형식을 사용할 수 없음" @@ -31,7 +31,7 @@ msgstr "다형적 함수 \"%s\"의 실제 반환 형식을 확인할 수 없음" msgid "trigger functions can only be called as triggers" msgstr "트리거 함수는 트리거로만 호출될 수 있음" -#: pl_comp.c:560 pl_handler.c:445 +#: pl_comp.c:560 pl_handler.c:455 #, c-format msgid "PL/pgSQL functions cannot return type %s" msgstr "PL/pgSQL 함수는 %s 형식을 반환할 수 없음" @@ -73,8 +73,8 @@ msgstr "열 참조 \"%s\" 가 명확하지 않습니다." msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "PL/pgSQL 변수명도, 테이블 칼럼 이름도 아니여야 함" -#: pl_comp.c:1317 pl_exec.c:5134 pl_exec.c:5499 pl_exec.c:5586 pl_exec.c:5677 -#: pl_exec.c:6594 +#: pl_comp.c:1317 pl_exec.c:5218 pl_exec.c:5583 pl_exec.c:5670 pl_exec.c:5761 +#: pl_exec.c:6749 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "\"%s\" 레코드에 \"%s\" 필드가 없음" @@ -94,7 +94,7 @@ msgstr "\"%s\" 변수에 의사 형식 %s이(가) 있음" msgid "type \"%s\" is only a shell" msgstr "자료형 \"%s\" 는 오로지 shell 에만 있습니다. " -#: pl_comp.c:2162 pl_exec.c:6895 +#: pl_comp.c:2162 pl_exec.c:7050 #, c-format msgid "type %s is not composite" msgstr "%s 자료형은 복합 자료형이 아님" @@ -104,59 +104,59 @@ msgstr "%s 자료형은 복합 자료형이 아님" msgid "unrecognized exception condition \"%s\"" msgstr "인식할 수 없는 예외 조건 \"%s\"" -#: pl_comp.c:2477 +#: pl_comp.c:2484 #, c-format msgid "" "could not determine actual argument type for polymorphic function \"%s\"" msgstr "다형적 함수 \"%s\"의 실제 인수 형식을 확인할 수 없음" -#: pl_exec.c:477 pl_exec.c:914 pl_exec.c:1152 +#: pl_exec.c:498 pl_exec.c:935 pl_exec.c:1173 msgid "during initialization of execution state" msgstr "실행 상태를 초기화하는 동안" -#: pl_exec.c:483 +#: pl_exec.c:504 msgid "while storing call arguments into local variables" msgstr "호출 인수를 로컬 변수에 저장하는 동안" -#: pl_exec.c:571 pl_exec.c:987 +#: pl_exec.c:592 pl_exec.c:1008 msgid "during function entry" msgstr "함수를 시작하는 동안" -#: pl_exec.c:596 +#: pl_exec.c:617 #, c-format msgid "control reached end of function without RETURN" msgstr "컨트롤이 RETURN 없이 함수 끝에 도달함" -#: pl_exec.c:603 +#: pl_exec.c:624 msgid "while casting return value to function's return type" msgstr "함수의 반환 형식으로 반환 값을 형변환하는 동안" -#: pl_exec.c:616 pl_exec.c:3584 +#: pl_exec.c:637 pl_exec.c:3653 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "" "set-values 함수(테이블 리턴 함수)가 set 정의 없이 사용되었습니다 (테이블과 해" "당 열 alias 지정하세요)" -#: pl_exec.c:742 pl_exec.c:1016 pl_exec.c:1177 +#: pl_exec.c:763 pl_exec.c:1037 pl_exec.c:1198 msgid "during function exit" msgstr "함수를 종료하는 동안" -#: pl_exec.c:797 pl_exec.c:861 pl_exec.c:3429 +#: pl_exec.c:818 pl_exec.c:882 pl_exec.c:3498 msgid "returned record type does not match expected record type" msgstr "반환된 레코드 형식이 필요한 레코드 형식과 일치하지 않음" -#: pl_exec.c:1012 pl_exec.c:1173 +#: pl_exec.c:1033 pl_exec.c:1194 #, c-format msgid "control reached end of trigger procedure without RETURN" msgstr "컨트롤이 RETURN 없이 트리거 프로시저 끝에 도달함" -#: pl_exec.c:1021 +#: pl_exec.c:1042 #, c-format msgid "trigger procedure cannot return a set" msgstr "트리거 프로시저는 집합을 반환할 수 없음" -#: pl_exec.c:1060 pl_exec.c:1088 +#: pl_exec.c:1081 pl_exec.c:1109 msgid "" "returned row structure does not match the structure of the triggering table" msgstr "반환된 행 구조가 트리거하는 테이블의 구조와 일치하지 않음" @@ -164,7 +164,7 @@ msgstr "반환된 행 구조가 트리거하는 테이블의 구조와 일치하 #. translator: last %s is a phrase such as "during statement block #. local variable initialization" #. -#: pl_exec.c:1225 +#: pl_exec.c:1244 #, c-format msgid "PL/pgSQL function %s line %d %s" msgstr "PL/pgSQL 함수 \"%s\" 의 %d번째 줄 %s" @@ -172,383 +172,383 @@ msgstr "PL/pgSQL 함수 \"%s\" 의 %d번째 줄 %s" #. translator: last %s is a phrase such as "while storing call #. arguments into local variables" #. -#: pl_exec.c:1236 +#: pl_exec.c:1255 #, c-format msgid "PL/pgSQL function %s %s" msgstr "PL/pgSQL 함수 %s %s" #. translator: last %s is a plpgsql statement type name -#: pl_exec.c:1244 +#: pl_exec.c:1263 #, c-format msgid "PL/pgSQL function %s line %d at %s" msgstr "PL/pgSQL 함수 \"%s\" 의 %d번째 %s" -#: pl_exec.c:1250 +#: pl_exec.c:1269 #, c-format msgid "PL/pgSQL function %s" msgstr "PL/pgSQL 함수 %s" -#: pl_exec.c:1588 +#: pl_exec.c:1607 msgid "during statement block local variable initialization" msgstr "문 블록 로컬 변수를 초기화하는 동안" -#: pl_exec.c:1686 +#: pl_exec.c:1705 msgid "during statement block entry" msgstr "문 블록을 시작하는 동안" -#: pl_exec.c:1718 +#: pl_exec.c:1737 msgid "during statement block exit" msgstr "문 블록을 종료하는 동안" -#: pl_exec.c:1756 +#: pl_exec.c:1775 msgid "during exception cleanup" msgstr "예외를 정리하는 동안" -#: pl_exec.c:2252 +#: pl_exec.c:2304 #, c-format msgid "" "procedure parameter \"%s\" is an output parameter but corresponding argument " "is not writable" msgstr "\"%s\" 프로시져 인자는 출력 인자인데, 값 변경이 불가능 함" -#: pl_exec.c:2257 +#: pl_exec.c:2309 #, c-format msgid "" "procedure parameter %d is an output parameter but corresponding argument is " "not writable" msgstr "%d 프로시져 인자는 출력 인자인데, 값 변경이 불가능 함" -#: pl_exec.c:2368 +#: pl_exec.c:2437 #, c-format msgid "GET STACKED DIAGNOSTICS cannot be used outside an exception handler" msgstr "GET STACKED DIAGNOSTICS 구문은 예외처리 헨들러 밖에서 사용할 수 없음" -#: pl_exec.c:2568 +#: pl_exec.c:2637 #, c-format msgid "case not found" msgstr "사례를 찾지 못함" -#: pl_exec.c:2569 +#: pl_exec.c:2638 #, c-format msgid "CASE statement is missing ELSE part." msgstr "CASE 문에 ELSE 부분이 누락되었습니다." -#: pl_exec.c:2662 +#: pl_exec.c:2731 #, c-format msgid "lower bound of FOR loop cannot be null" msgstr "FOR 루프의 하한은 null일 수 없음" -#: pl_exec.c:2678 +#: pl_exec.c:2747 #, c-format msgid "upper bound of FOR loop cannot be null" msgstr "FOR 루프의 상한은 null일 수 없음" -#: pl_exec.c:2696 +#: pl_exec.c:2765 #, c-format msgid "BY value of FOR loop cannot be null" msgstr "FOR 루프의 BY 값은 null일 수 없음" -#: pl_exec.c:2702 +#: pl_exec.c:2771 #, c-format msgid "BY value of FOR loop must be greater than zero" msgstr "FOR 루프의 BY 값은 0보다 커야 함" -#: pl_exec.c:2836 pl_exec.c:4558 +#: pl_exec.c:2905 pl_exec.c:4632 #, c-format msgid "cursor \"%s\" already in use" msgstr "\"%s\" 커서가 이미 사용 중임" -#: pl_exec.c:2859 pl_exec.c:4623 +#: pl_exec.c:2928 pl_exec.c:4697 #, c-format msgid "arguments given for cursor without arguments" msgstr "인수가 없는 커서에 인수가 제공됨" -#: pl_exec.c:2878 pl_exec.c:4642 +#: pl_exec.c:2947 pl_exec.c:4716 #, c-format msgid "arguments required for cursor" msgstr "커서에 인수 필요" -#: pl_exec.c:2965 +#: pl_exec.c:3034 #, c-format msgid "FOREACH expression must not be null" msgstr "FOREACH 구문은 null 이 아니여야 함" -#: pl_exec.c:2980 +#: pl_exec.c:3049 #, c-format msgid "FOREACH expression must yield an array, not type %s" msgstr "FOREACH 구문에서는 배열이 사용됩니다. 사용된 자료형 %s" -#: pl_exec.c:2997 +#: pl_exec.c:3066 #, c-format msgid "slice dimension (%d) is out of the valid range 0..%d" msgstr "slice dimension (%d) 값이 범위를 벗어남, 0..%d" -#: pl_exec.c:3024 +#: pl_exec.c:3093 #, c-format msgid "FOREACH ... SLICE loop variable must be of an array type" msgstr "FOREACH ... SLICE 루프 변수는 배열 자료형이어야 함" -#: pl_exec.c:3028 +#: pl_exec.c:3097 #, c-format msgid "FOREACH loop variable must not be of an array type" msgstr "FOREACH 반복 변수는 배열형이 아니여야 함" -#: pl_exec.c:3190 pl_exec.c:3247 pl_exec.c:3422 +#: pl_exec.c:3259 pl_exec.c:3316 pl_exec.c:3491 #, c-format msgid "" "cannot return non-composite value from function returning composite type" msgstr "" "함수의 반환값이 복합 자료형인데, 복합 자료형아닌 자료형을 반환하려고 함" -#: pl_exec.c:3286 pl_gram.y:3309 +#: pl_exec.c:3355 pl_gram.y:3309 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "SETOF 함수가 아닌 함수에서 RETURN NEXT를 사용할 수 없음" -#: pl_exec.c:3327 pl_exec.c:3459 +#: pl_exec.c:3396 pl_exec.c:3528 #, c-format msgid "wrong result type supplied in RETURN NEXT" msgstr "RETURN NEXT에 잘못된 결과 형식이 제공됨" -#: pl_exec.c:3365 pl_exec.c:3386 +#: pl_exec.c:3434 pl_exec.c:3455 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "RETURN NEXT에 잘못된 레코드 형식이 제공됨" -#: pl_exec.c:3478 +#: pl_exec.c:3547 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "RETURN NEXT에 매개 변수 필요" -#: pl_exec.c:3504 pl_gram.y:3373 +#: pl_exec.c:3573 pl_gram.y:3373 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "SETOF 함수가 아닌 함수에서 RETURN QUERY를 사용할 수 없음" -#: pl_exec.c:3528 +#: pl_exec.c:3597 msgid "structure of query does not match function result type" msgstr "쿼리 구조가 함수 결과 형식과 일치하지 않음" -#: pl_exec.c:3612 pl_exec.c:3750 +#: pl_exec.c:3681 pl_exec.c:3819 #, c-format msgid "RAISE option already specified: %s" msgstr "RAISE 옵션이 이미 지정됨: %s" -#: pl_exec.c:3646 +#: pl_exec.c:3715 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "매개 변수 없는 RAISE를 예외 처리기 외부에 사용할 수 없음" -#: pl_exec.c:3740 +#: pl_exec.c:3809 #, c-format msgid "RAISE statement option cannot be null" msgstr "RAISE 문 옵션이 null일 수 없음" -#: pl_exec.c:3810 +#: pl_exec.c:3879 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3865 +#: pl_exec.c:3934 #, c-format msgid "assertion failed" msgstr "assertion 실패" -#: pl_exec.c:4207 pl_exec.c:4397 +#: pl_exec.c:4281 pl_exec.c:4471 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "PL/pgSQL의 클라이언트와 상호 복사할 수 없음" -#: pl_exec.c:4213 +#: pl_exec.c:4287 #, c-format msgid "unsupported transaction command in PL/pgSQL" msgstr "PL/pgSQL 안에서는 지원하지 않는 트랜잭션 명령" -#: pl_exec.c:4236 pl_exec.c:4426 +#: pl_exec.c:4310 pl_exec.c:4500 #, c-format msgid "INTO used with a command that cannot return data" msgstr "데이터를 반환할 수 없는 명령과 함께 INTO가 사용됨" -#: pl_exec.c:4259 pl_exec.c:4449 +#: pl_exec.c:4333 pl_exec.c:4523 #, c-format msgid "query returned no rows" msgstr "쿼리에서 행을 반환하지 않음" -#: pl_exec.c:4281 pl_exec.c:4468 +#: pl_exec.c:4355 pl_exec.c:4542 #, c-format msgid "query returned more than one row" msgstr "쿼리에서 두 개 이상의 행을 반환" -#: pl_exec.c:4283 +#: pl_exec.c:4357 #, c-format msgid "Make sure the query returns a single row, or use LIMIT 1." msgstr "하나의 로우만 반환하도록 쿼리를 바꾸거나 LIMIT 1 옵션을 추가하세요." -#: pl_exec.c:4299 +#: pl_exec.c:4373 #, c-format msgid "query has no destination for result data" msgstr "쿼리에 결과 데이터의 대상이 없음" -#: pl_exec.c:4300 +#: pl_exec.c:4374 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." msgstr "SELECT의 결과를 취소하려면 대신 PERFORM을 사용하십시오." -#: pl_exec.c:4333 pl_exec.c:8527 +#: pl_exec.c:4407 pl_exec.c:8729 #, c-format msgid "query string argument of EXECUTE is null" msgstr "EXECUTE의 쿼리 문자열 인수가 null임" -#: pl_exec.c:4389 +#: pl_exec.c:4463 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "SELECT의 EXECUTE... INTO가 구현되지 않음" -#: pl_exec.c:4390 +#: pl_exec.c:4464 #, c-format msgid "" "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS " "instead." msgstr "EXECUTE ... INTO 또는 EXECUTE CREATE TABLE ... AS 구문을 사용하세요." -#: pl_exec.c:4403 +#: pl_exec.c:4477 #, c-format msgid "EXECUTE of transaction commands is not implemented" msgstr "트랜잭션 명령들의 EXECUTE 기능은 구현되지 않았음" -#: pl_exec.c:4704 pl_exec.c:4792 +#: pl_exec.c:4778 pl_exec.c:4866 #, c-format msgid "cursor variable \"%s\" is null" msgstr "커서 변수 \"%s\"이(가) null임" -#: pl_exec.c:4715 pl_exec.c:4803 +#: pl_exec.c:4789 pl_exec.c:4877 #, c-format msgid "cursor \"%s\" does not exist" msgstr "\"%s\" 이름의 커서가 없음" -#: pl_exec.c:4728 +#: pl_exec.c:4802 #, c-format msgid "relative or absolute cursor position is null" msgstr "상대 또는 절대 커서 위치가 null임" -#: pl_exec.c:4984 pl_exec.c:5079 +#: pl_exec.c:5068 pl_exec.c:5163 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "NOT NULL이 선언된 \"%s\" 변수에 null 값을 할당할 수 없음" -#: pl_exec.c:5060 +#: pl_exec.c:5144 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "행 변수에 비복합 값을 할당할 수 없음" -#: pl_exec.c:5092 +#: pl_exec.c:5176 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "레코드 변수에 비복합 값을 할당할 수 없음" -#: pl_exec.c:5143 +#: pl_exec.c:5227 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "시스템 열 \"%s\"에 할당할 수 없습니다." -#: pl_exec.c:5207 +#: pl_exec.c:5291 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "지정한 배열 크기(%d)가 최대치(%d)를 초과했습니다" -#: pl_exec.c:5239 +#: pl_exec.c:5323 #, c-format msgid "subscripted object is not an array" msgstr "하위 스크립트 개체는 배열이 아님" -#: pl_exec.c:5277 +#: pl_exec.c:5361 #, c-format msgid "array subscript in assignment must not be null" msgstr "배열 하위 스크립트로 지정하는 값으로 null 값을 사용할 수 없습니다" -#: pl_exec.c:5784 +#: pl_exec.c:5868 #, c-format msgid "query \"%s\" did not return data" msgstr "\"%s\" 쿼리에서 데이터를 반환하지 않음" -#: pl_exec.c:5792 +#: pl_exec.c:5876 #, c-format msgid "query \"%s\" returned %d column" msgid_plural "query \"%s\" returned %d columns" msgstr[0] "\"%s\" 쿼리가 %d 개의 칼럼을 반환함" -#: pl_exec.c:5820 +#: pl_exec.c:5904 #, c-format msgid "query \"%s\" returned more than one row" msgstr "\"%s\" 쿼리에서 두 개 이상의 행을 반환함" -#: pl_exec.c:5883 +#: pl_exec.c:5967 #, c-format msgid "query \"%s\" is not a SELECT" msgstr "\"%s\" 쿼리가 SELECT가 아님" -#: pl_exec.c:6608 pl_exec.c:6648 pl_exec.c:6688 +#: pl_exec.c:6763 pl_exec.c:6803 pl_exec.c:6843 #, c-format msgid "" "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "" "%d번째 매개 변수의 자료형(%s)이 미리 준비된 실행계획의 자료형(%s)과 다릅니다" -#: pl_exec.c:7099 pl_exec.c:7133 pl_exec.c:7207 pl_exec.c:7233 +#: pl_exec.c:7254 pl_exec.c:7288 pl_exec.c:7362 pl_exec.c:7388 #, c-format msgid "number of source and target fields in assignment does not match" msgstr "원본과 대상 필드 수가 같지 않습니다." #. translator: %s represents a name of an extra check -#: pl_exec.c:7101 pl_exec.c:7135 pl_exec.c:7209 pl_exec.c:7235 +#: pl_exec.c:7256 pl_exec.c:7290 pl_exec.c:7364 pl_exec.c:7390 #, c-format msgid "%s check of %s is active." msgstr "%s 검사(해당 변수이름: %s)가 활성화 되어있습니다." -#: pl_exec.c:7105 pl_exec.c:7139 pl_exec.c:7213 pl_exec.c:7239 +#: pl_exec.c:7260 pl_exec.c:7294 pl_exec.c:7368 pl_exec.c:7394 #, c-format msgid "Make sure the query returns the exact list of columns." msgstr "쿼리 결과가 정확한 칼럼 목록을 반환하도록 수정하세요." -#: pl_exec.c:7626 +#: pl_exec.c:7781 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "\"%s\" 레코드가 아직 할당되지 않음" -#: pl_exec.c:7627 +#: pl_exec.c:7782 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "아직 할당되지 않은 레코드의 튜플 구조는 미정입니다." -#: pl_funcs.c:239 +#: pl_funcs.c:237 msgid "statement block" msgstr "문 블록" -#: pl_funcs.c:241 +#: pl_funcs.c:239 msgid "assignment" msgstr "할당" -#: pl_funcs.c:251 +#: pl_funcs.c:249 msgid "FOR with integer loop variable" msgstr "정수 루프 변수를 포함하는 FOR" -#: pl_funcs.c:253 +#: pl_funcs.c:251 msgid "FOR over SELECT rows" msgstr "SELECT 행을 제어하는 FOR" -#: pl_funcs.c:255 +#: pl_funcs.c:253 msgid "FOR over cursor" msgstr "커서를 제어하는 FOR" -#: pl_funcs.c:257 +#: pl_funcs.c:255 msgid "FOREACH over array" msgstr "배열 초과된 FOREACH" -#: pl_funcs.c:271 +#: pl_funcs.c:269 msgid "SQL statement" msgstr "SQL 문" -#: pl_funcs.c:275 +#: pl_funcs.c:273 msgid "FOR over EXECUTE statement" msgstr "EXECUTE 문을 제어하는 FOR" @@ -779,7 +779,7 @@ msgstr "너무 많은 INTO 변수가 지정됨" #: pl_gram.y:3752 #, c-format -msgid "end label \"%s\" specified for unlabelled block" +msgid "end label \"%s\" specified for unlabeled block" msgstr "레이블이 없는 블록에 끝 레이블 \"%s\"이(가) 지정됨" #: pl_gram.y:3759 @@ -835,14 +835,14 @@ msgstr "RAISE에 지정된 매개 변수가 너무 많음" msgid "too few parameters specified for RAISE" msgstr "RAISE에 지정된 매개 변수가 너무 적음" -#: pl_handler.c:158 +#: pl_handler.c:156 msgid "" "Sets handling of conflicts between PL/pgSQL variable names and table column " "names." msgstr "" "PL/pgSQL 변수명과 테이블 칼럼명 사이 충돌이 일어날 경우에 대한 처리를 하세요." -#: pl_handler.c:167 +#: pl_handler.c:165 msgid "" "Print information about parameters in the DETAIL part of the error messages " "generated on INTO ... STRICT failures." @@ -850,15 +850,15 @@ msgstr "" "INTO ... STRICT 실패에서 오류 메시지를 만들 때 그 DETAIL 부분에 들어갈 내용" "을 출력 하세요" -#: pl_handler.c:175 +#: pl_handler.c:173 msgid "Perform checks given in ASSERT statements." msgstr "ASSERT 구문에서 주어진 검사를 수행하세요." -#: pl_handler.c:183 +#: pl_handler.c:181 msgid "List of programming constructs that should produce a warning." msgstr "경고로 처리할 프로그래밍 컨스트럭트 목록" -#: pl_handler.c:193 +#: pl_handler.c:191 msgid "List of programming constructs that should produce an error." msgstr "오류로 처리할 프로그래밍 컨스트럭트 목록" @@ -873,21 +873,3 @@ msgstr "%s, 입력 끝부분" #, c-format msgid "%s at or near \"%s\"" msgstr "%s, \"%s\" 부근" - -#~ msgid "default value for row or record variable is not supported" -#~ msgstr "행 또는 레코드 변수의 기본 값이 지원되지 않음" - -#~ msgid "row or record variable cannot be NOT NULL" -#~ msgstr "행 또는 레코드 변수는 NOT NULL일 수 없음" - -#~ msgid "row or record variable cannot be CONSTANT" -#~ msgstr "행 또는 레코드 변수는 CONSTANT일 수 없음" - -#~ msgid "Use a BEGIN block with an EXCEPTION clause instead." -#~ msgstr "대신 BEGIN 블록을 EXCEPTION 절과 함께 사용하십시오." - -#~ msgid "variable \"%s\" declared NOT NULL cannot default to NULL" -#~ msgstr "NOT NULL이 선언된 \"%s\" 변수의 기본 값이 NULL로 설정될 수 없음" - -#~ msgid "relation \"%s\" is not a table" -#~ msgstr "\"%s\" 관계가 테이블이 아님" diff --git a/src/pl/plpgsql/src/po/ru.po b/src/pl/plpgsql/src/po/ru.po index f9b5f34916273..317fbef8d370a 100644 --- a/src/pl/plpgsql/src/po/ru.po +++ b/src/pl/plpgsql/src/po/ru.po @@ -1,13 +1,13 @@ # Russian message translation file for plpgsql # Copyright (C) 2012-2016 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2012-2017, 2018, 2019. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: plpgsql (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-02-05 11:03+0300\n" -"PO-Revision-Date: 2019-08-29 16:00+0300\n" +"POT-Creation-Date: 2021-02-08 07:28+0300\n" +"PO-Revision-Date: 2020-09-03 15:25+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -17,7 +17,7 @@ msgstr "" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#: pl_comp.c:438 pl_handler.c:461 +#: pl_comp.c:436 pl_handler.c:471 #, c-format msgid "PL/pgSQL functions cannot accept type %s" msgstr "функции PL/pgSQL не могут принимать тип %s" @@ -34,7 +34,7 @@ msgstr "" msgid "trigger functions can only be called as triggers" msgstr "триггерные функции могут вызываться только в триггерах" -#: pl_comp.c:560 pl_handler.c:445 +#: pl_comp.c:560 pl_handler.c:455 #, c-format msgid "PL/pgSQL functions cannot return type %s" msgstr "функции PL/pgSQL не могут возвращать тип %s" @@ -78,8 +78,8 @@ msgstr "неоднозначная ссылка на столбец \"%s\"" msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Подразумевается ссылка на переменную PL/pgSQL или столбец таблицы." -#: pl_comp.c:1317 pl_exec.c:5134 pl_exec.c:5499 pl_exec.c:5586 pl_exec.c:5677 -#: pl_exec.c:6594 +#: pl_comp.c:1317 pl_exec.c:5218 pl_exec.c:5583 pl_exec.c:5670 pl_exec.c:5761 +#: pl_exec.c:6749 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "в записи \"%s\" нет поля \"%s\"" @@ -99,7 +99,7 @@ msgstr "переменная \"%s\" имеет псевдотип %s" msgid "type \"%s\" is only a shell" msgstr "тип \"%s\" — лишь пустышка" -#: pl_comp.c:2162 pl_exec.c:6895 +#: pl_comp.c:2162 pl_exec.c:7050 #, c-format msgid "type %s is not composite" msgstr "тип %s не является составным" @@ -109,7 +109,7 @@ msgstr "тип %s не является составным" msgid "unrecognized exception condition \"%s\"" msgstr "нераспознанное условие исключения \"%s\"" -#: pl_comp.c:2477 +#: pl_comp.c:2484 #, c-format msgid "" "could not determine actual argument type for polymorphic function \"%s\"" @@ -117,52 +117,52 @@ msgstr "" "не удалось определить фактический тип аргумента для полиморфной функции \"%s" "\"" -#: pl_exec.c:477 pl_exec.c:914 pl_exec.c:1152 +#: pl_exec.c:498 pl_exec.c:935 pl_exec.c:1173 msgid "during initialization of execution state" msgstr "в процессе инициализации состояния выполнения" -#: pl_exec.c:483 +#: pl_exec.c:504 msgid "while storing call arguments into local variables" msgstr "при сохранении аргументов вызова в локальных переменных" -#: pl_exec.c:571 pl_exec.c:987 +#: pl_exec.c:592 pl_exec.c:1008 msgid "during function entry" msgstr "при входе в функцию" -#: pl_exec.c:596 +#: pl_exec.c:617 #, c-format msgid "control reached end of function without RETURN" msgstr "конец функции достигнут без RETURN" -#: pl_exec.c:603 +#: pl_exec.c:624 msgid "while casting return value to function's return type" msgstr "при приведении возвращаемого значения к типу результата функции" -#: pl_exec.c:616 pl_exec.c:3584 +#: pl_exec.c:637 pl_exec.c:3653 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "" "функция, возвращающая множество, вызвана в контексте, где ему нет места" -#: pl_exec.c:742 pl_exec.c:1016 pl_exec.c:1177 +#: pl_exec.c:763 pl_exec.c:1037 pl_exec.c:1198 msgid "during function exit" msgstr "при выходе из функции" -#: pl_exec.c:797 pl_exec.c:861 pl_exec.c:3429 +#: pl_exec.c:818 pl_exec.c:882 pl_exec.c:3498 msgid "returned record type does not match expected record type" msgstr "возвращаемый тип записи не соответствует ожидаемому" -#: pl_exec.c:1012 pl_exec.c:1173 +#: pl_exec.c:1033 pl_exec.c:1194 #, c-format msgid "control reached end of trigger procedure without RETURN" msgstr "конец триггерной процедуры достигнут без RETURN" -#: pl_exec.c:1021 +#: pl_exec.c:1042 #, c-format msgid "trigger procedure cannot return a set" msgstr "триггерная процедура не может возвращать множество" -#: pl_exec.c:1060 pl_exec.c:1088 +#: pl_exec.c:1081 pl_exec.c:1109 msgid "" "returned row structure does not match the structure of the triggering table" msgstr "" @@ -172,7 +172,7 @@ msgstr "" #. translator: last %s is a phrase such as "during statement block #. local variable initialization" #. -#: pl_exec.c:1225 +#: pl_exec.c:1244 #, c-format msgid "PL/pgSQL function %s line %d %s" msgstr "функция PL/pgSQL %s, строка %d, %s" @@ -180,39 +180,39 @@ msgstr "функция PL/pgSQL %s, строка %d, %s" #. translator: last %s is a phrase such as "while storing call #. arguments into local variables" #. -#: pl_exec.c:1236 +#: pl_exec.c:1255 #, c-format msgid "PL/pgSQL function %s %s" msgstr "функция PL/pgSQL %s, %s" #. translator: last %s is a plpgsql statement type name -#: pl_exec.c:1244 +#: pl_exec.c:1263 #, c-format msgid "PL/pgSQL function %s line %d at %s" msgstr "функция PL/pgSQL %s, строка %d, оператор %s" -#: pl_exec.c:1250 +#: pl_exec.c:1269 #, c-format msgid "PL/pgSQL function %s" msgstr "функция PL/pgSQL %s" -#: pl_exec.c:1588 +#: pl_exec.c:1607 msgid "during statement block local variable initialization" msgstr "при инициализации локальной переменной в блоке операторов" -#: pl_exec.c:1686 +#: pl_exec.c:1705 msgid "during statement block entry" msgstr "при входе в блок операторов" -#: pl_exec.c:1718 +#: pl_exec.c:1737 msgid "during statement block exit" msgstr "при выходе из блока операторов" -#: pl_exec.c:1756 +#: pl_exec.c:1775 msgid "during exception cleanup" msgstr "при очистке после исключения" -#: pl_exec.c:2252 +#: pl_exec.c:2304 #, c-format msgid "" "procedure parameter \"%s\" is an output parameter but corresponding argument " @@ -221,7 +221,7 @@ msgstr "" "параметр процедуры \"%s\" является выходным, но соответствующий аргумент не " "допускает запись" -#: pl_exec.c:2257 +#: pl_exec.c:2309 #, c-format msgid "" "procedure parameter %d is an output parameter but corresponding argument is " @@ -230,199 +230,199 @@ msgstr "" "параметр процедуры %d является выходным, но соответствующий аргумент не " "допускает запись" -#: pl_exec.c:2368 +#: pl_exec.c:2437 #, c-format msgid "GET STACKED DIAGNOSTICS cannot be used outside an exception handler" msgstr "" "GET STACKED DIAGNOSTICS нельзя использовать вне блока обработчика исключения" -#: pl_exec.c:2568 +#: pl_exec.c:2637 #, c-format msgid "case not found" msgstr "неправильный CASE" -#: pl_exec.c:2569 +#: pl_exec.c:2638 #, c-format msgid "CASE statement is missing ELSE part." msgstr "В операторе CASE не хватает части ELSE." -#: pl_exec.c:2662 +#: pl_exec.c:2731 #, c-format msgid "lower bound of FOR loop cannot be null" msgstr "нижняя граница цикла FOR не может быть равна NULL" -#: pl_exec.c:2678 +#: pl_exec.c:2747 #, c-format msgid "upper bound of FOR loop cannot be null" msgstr "верхняя граница цикла FOR не может быть равна NULL" -#: pl_exec.c:2696 +#: pl_exec.c:2765 #, c-format msgid "BY value of FOR loop cannot be null" msgstr "значение BY в цикле FOR не может быть равно NULL" -#: pl_exec.c:2702 +#: pl_exec.c:2771 #, c-format msgid "BY value of FOR loop must be greater than zero" msgstr "значение BY в цикле FOR должно быть больше нуля" -#: pl_exec.c:2836 pl_exec.c:4558 +#: pl_exec.c:2905 pl_exec.c:4632 #, c-format msgid "cursor \"%s\" already in use" msgstr "курсор \"%s\" уже используется" -#: pl_exec.c:2859 pl_exec.c:4623 +#: pl_exec.c:2928 pl_exec.c:4697 #, c-format msgid "arguments given for cursor without arguments" msgstr "курсору без аргументов были переданы аргументы" -#: pl_exec.c:2878 pl_exec.c:4642 +#: pl_exec.c:2947 pl_exec.c:4716 #, c-format msgid "arguments required for cursor" msgstr "курсору требуются аргументы" -#: pl_exec.c:2965 +#: pl_exec.c:3034 #, c-format msgid "FOREACH expression must not be null" msgstr "выражение FOREACH не может быть равно NULL" -#: pl_exec.c:2980 +#: pl_exec.c:3049 #, c-format msgid "FOREACH expression must yield an array, not type %s" msgstr "выражение в FOREACH должно быть массивом, но не типом %s" -#: pl_exec.c:2997 +#: pl_exec.c:3066 #, c-format msgid "slice dimension (%d) is out of the valid range 0..%d" msgstr "размерность среза (%d) вне допустимого диапазона 0..%d" -#: pl_exec.c:3024 +#: pl_exec.c:3093 #, c-format msgid "FOREACH ... SLICE loop variable must be of an array type" msgstr "переменная цикла FOREACH ... SLICE должна быть массивом" -#: pl_exec.c:3028 +#: pl_exec.c:3097 #, c-format msgid "FOREACH loop variable must not be of an array type" msgstr "переменная цикла FOREACH не должна быть массивом" -#: pl_exec.c:3190 pl_exec.c:3247 pl_exec.c:3422 +#: pl_exec.c:3259 pl_exec.c:3316 pl_exec.c:3491 #, c-format msgid "" "cannot return non-composite value from function returning composite type" msgstr "" "функция, возвращающая составной тип, не может вернуть несоставное значение" -#: pl_exec.c:3286 pl_gram.y:3309 +#: pl_exec.c:3355 pl_gram.y:3307 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "" "RETURN NEXT можно использовать только в функциях, возвращающих множества" -#: pl_exec.c:3327 pl_exec.c:3459 +#: pl_exec.c:3396 pl_exec.c:3528 #, c-format msgid "wrong result type supplied in RETURN NEXT" msgstr "в RETURN NEXT передан неправильный тип результата" -#: pl_exec.c:3365 pl_exec.c:3386 +#: pl_exec.c:3434 pl_exec.c:3455 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "в RETURN NEXT передан неправильный тип записи" -#: pl_exec.c:3478 +#: pl_exec.c:3547 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "у оператора RETURN NEXT должен быть параметр" -#: pl_exec.c:3504 pl_gram.y:3373 +#: pl_exec.c:3573 pl_gram.y:3371 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "" "RETURN QUERY можно использовать только в функциях, возвращающих множества" -#: pl_exec.c:3528 +#: pl_exec.c:3597 msgid "structure of query does not match function result type" msgstr "структура запроса не соответствует типу результата функции" -#: pl_exec.c:3612 pl_exec.c:3750 +#: pl_exec.c:3681 pl_exec.c:3819 #, c-format msgid "RAISE option already specified: %s" msgstr "этот параметр RAISE уже указан: %s" -#: pl_exec.c:3646 +#: pl_exec.c:3715 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "" "RAISE без параметров нельзя использовать вне блока обработчика исключения" -#: pl_exec.c:3740 +#: pl_exec.c:3809 #, c-format msgid "RAISE statement option cannot be null" msgstr "параметром оператора RAISE не может быть NULL" -#: pl_exec.c:3810 +#: pl_exec.c:3879 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3865 +#: pl_exec.c:3934 #, c-format msgid "assertion failed" msgstr "нарушение истинности" -#: pl_exec.c:4207 pl_exec.c:4397 +#: pl_exec.c:4281 pl_exec.c:4471 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "в PL/pgSQL нельзя выполнить COPY с участием клиента" -#: pl_exec.c:4213 +#: pl_exec.c:4287 #, c-format msgid "unsupported transaction command in PL/pgSQL" msgstr "неподдерживаемая транзакционная команда в PL/pgSQL" -#: pl_exec.c:4236 pl_exec.c:4426 +#: pl_exec.c:4310 pl_exec.c:4500 #, c-format msgid "INTO used with a command that cannot return data" msgstr "INTO с командой не может возвращать данные" -#: pl_exec.c:4259 pl_exec.c:4449 +#: pl_exec.c:4333 pl_exec.c:4523 #, c-format msgid "query returned no rows" msgstr "запрос не вернул строк" -#: pl_exec.c:4281 pl_exec.c:4468 +#: pl_exec.c:4355 pl_exec.c:4542 #, c-format msgid "query returned more than one row" msgstr "запрос вернул несколько строк" -#: pl_exec.c:4283 +#: pl_exec.c:4357 #, c-format msgid "Make sure the query returns a single row, or use LIMIT 1." msgstr "" "Измените запрос, чтобы он выбирал одну строку, или используйте LIMIT 1." -#: pl_exec.c:4299 +#: pl_exec.c:4373 #, c-format msgid "query has no destination for result data" msgstr "в запросе нет назначения для данных результата" -#: pl_exec.c:4300 +#: pl_exec.c:4374 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." msgstr "Если вам нужно отбросить результаты SELECT, используйте PERFORM." -#: pl_exec.c:4333 pl_exec.c:8527 +#: pl_exec.c:4407 pl_exec.c:8729 #, c-format msgid "query string argument of EXECUTE is null" msgstr "в качестве текста запроса в EXECUTE передан NULL" -#: pl_exec.c:4389 +#: pl_exec.c:4463 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "возможность выполнения SELECT ... INTO в EXECUTE не реализована" # skip-rule: space-before-ellipsis -#: pl_exec.c:4390 +#: pl_exec.c:4464 #, c-format msgid "" "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS " @@ -431,67 +431,67 @@ msgstr "" "Альтернативой может стать EXECUTE ... INTO или EXECUTE CREATE TABLE ... " "AS ..." -#: pl_exec.c:4403 +#: pl_exec.c:4477 #, c-format msgid "EXECUTE of transaction commands is not implemented" msgstr "EXECUTE с транзакционными командами не поддерживается" -#: pl_exec.c:4704 pl_exec.c:4792 +#: pl_exec.c:4778 pl_exec.c:4866 #, c-format msgid "cursor variable \"%s\" is null" msgstr "переменная курсора \"%s\" равна NULL" -#: pl_exec.c:4715 pl_exec.c:4803 +#: pl_exec.c:4789 pl_exec.c:4877 #, c-format msgid "cursor \"%s\" does not exist" msgstr "курсор \"%s\" не существует" -#: pl_exec.c:4728 +#: pl_exec.c:4802 #, c-format msgid "relative or absolute cursor position is null" msgstr "относительная или абсолютная позиция курсора равна NULL" -#: pl_exec.c:4984 pl_exec.c:5079 +#: pl_exec.c:5068 pl_exec.c:5163 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "значение NULL нельзя присвоить переменной \"%s\", объявленной NOT NULL" -#: pl_exec.c:5060 +#: pl_exec.c:5144 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "переменной типа кортеж можно присвоить только составное значение" -#: pl_exec.c:5092 +#: pl_exec.c:5176 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "переменной типа запись можно присвоить только составное значение" -#: pl_exec.c:5143 +#: pl_exec.c:5227 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "присвоить значение системному столбцу \"%s\" нельзя" -#: pl_exec.c:5207 +#: pl_exec.c:5291 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "число размерностей массива (%d) превышает предел (%d)" -#: pl_exec.c:5239 +#: pl_exec.c:5323 #, c-format msgid "subscripted object is not an array" msgstr "для объекта указан индекс, но этот объект - не массив" -#: pl_exec.c:5277 +#: pl_exec.c:5361 #, c-format msgid "array subscript in assignment must not be null" msgstr "индекс элемента массива в присваивании не может быть NULL" -#: pl_exec.c:5784 +#: pl_exec.c:5868 #, c-format msgid "query \"%s\" did not return data" msgstr "запрос \"%s\" не вернул данные" -#: pl_exec.c:5792 +#: pl_exec.c:5876 #, c-format msgid "query \"%s\" returned %d column" msgid_plural "query \"%s\" returned %d columns" @@ -499,17 +499,17 @@ msgstr[0] "запрос \"%s\" вернул %d столбец" msgstr[1] "запрос \"%s\" вернул %d столбца" msgstr[2] "запрос \"%s\" вернул %d столбцов" -#: pl_exec.c:5820 +#: pl_exec.c:5904 #, c-format msgid "query \"%s\" returned more than one row" msgstr "запрос \"%s\" вернул несколько строк" -#: pl_exec.c:5883 +#: pl_exec.c:5967 #, c-format msgid "query \"%s\" is not a SELECT" msgstr "запрос \"%s\" - не SELECT" -#: pl_exec.c:6608 pl_exec.c:6648 pl_exec.c:6688 +#: pl_exec.c:6763 pl_exec.c:6803 pl_exec.c:6843 #, c-format msgid "" "type of parameter %d (%s) does not match that when preparing the plan (%s)" @@ -517,63 +517,63 @@ msgstr "" "тип параметра %d (%s) не соответствует тому, с которым подготавливался план " "(%s)" -#: pl_exec.c:7099 pl_exec.c:7133 pl_exec.c:7207 pl_exec.c:7233 +#: pl_exec.c:7254 pl_exec.c:7288 pl_exec.c:7362 pl_exec.c:7388 #, c-format msgid "number of source and target fields in assignment does not match" msgstr "в левой и правой части присваивания разное количество полей" #. translator: %s represents a name of an extra check -#: pl_exec.c:7101 pl_exec.c:7135 pl_exec.c:7209 pl_exec.c:7235 +#: pl_exec.c:7256 pl_exec.c:7290 pl_exec.c:7364 pl_exec.c:7390 #, c-format msgid "%s check of %s is active." msgstr "Включена проверка %s (с %s)." -#: pl_exec.c:7105 pl_exec.c:7139 pl_exec.c:7213 pl_exec.c:7239 +#: pl_exec.c:7260 pl_exec.c:7294 pl_exec.c:7368 pl_exec.c:7394 #, c-format msgid "Make sure the query returns the exact list of columns." msgstr "" "Измените запрос, чтобы он возвращал в точности требуемый список столбцов." -#: pl_exec.c:7626 +#: pl_exec.c:7781 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "записи \"%s\" не присвоено значение" -#: pl_exec.c:7627 +#: pl_exec.c:7782 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "" "Для записи, которой не присвоено значение, структура кортежа не определена." -#: pl_funcs.c:239 +#: pl_funcs.c:237 msgid "statement block" msgstr "блок операторов" -#: pl_funcs.c:241 +#: pl_funcs.c:239 msgid "assignment" msgstr "присваивание" -#: pl_funcs.c:251 +#: pl_funcs.c:249 msgid "FOR with integer loop variable" msgstr "FOR с целочисленной переменной цикла" -#: pl_funcs.c:253 +#: pl_funcs.c:251 msgid "FOR over SELECT rows" msgstr "FOR по результатам SELECT" -#: pl_funcs.c:255 +#: pl_funcs.c:253 msgid "FOR over cursor" msgstr "FOR по курсору" -#: pl_funcs.c:257 +#: pl_funcs.c:255 msgid "FOREACH over array" msgstr "FOREACH для массива" -#: pl_funcs.c:271 +#: pl_funcs.c:269 msgid "SQL statement" msgstr "SQL-оператор" -#: pl_funcs.c:275 +#: pl_funcs.c:273 msgid "FOR over EXECUTE statement" msgstr "FOR по результатам EXECUTE" @@ -622,12 +622,12 @@ msgstr "команда GET CURRENT DIAGNOSTICS не принимает элем msgid "unrecognized GET DIAGNOSTICS item" msgstr "нераспознанный элемент GET DIAGNOSTICS" -#: pl_gram.y:1116 pl_gram.y:3553 +#: pl_gram.y:1116 pl_gram.y:3551 #, c-format msgid "\"%s\" is not a scalar variable" msgstr "\"%s\" - не скалярная переменная" -#: pl_gram.y:1370 pl_gram.y:1567 +#: pl_gram.y:1368 pl_gram.y:1565 #, c-format msgid "" "loop variable of loop over rows must be a record variable or list of scalar " @@ -636,239 +636,239 @@ msgstr "" "переменная цикла по кортежам должна быть переменной типа запись или списком " "скалярных переменных" -#: pl_gram.y:1405 +#: pl_gram.y:1403 #, c-format msgid "cursor FOR loop must have only one target variable" msgstr "в цикле FOR с курсором должна быть только одна переменная" -#: pl_gram.y:1412 +#: pl_gram.y:1410 #, c-format msgid "cursor FOR loop must use a bound cursor variable" msgstr "" "в цикле FOR с курсором должен использоваться курсор, привязанный к запросу" -#: pl_gram.y:1499 +#: pl_gram.y:1497 #, c-format msgid "integer FOR loop must have only one target variable" msgstr "в целочисленном цикле FOR должна быть только одна переменная" -#: pl_gram.y:1537 +#: pl_gram.y:1535 #, c-format msgid "cannot specify REVERSE in query FOR loop" msgstr "в цикле FOR с запросом нельзя указать REVERSE" -#: pl_gram.y:1670 +#: pl_gram.y:1668 #, c-format msgid "loop variable of FOREACH must be a known variable or list of variables" msgstr "" "переменной цикла FOREACH должна быть известная переменная или список " "переменных" -#: pl_gram.y:1712 +#: pl_gram.y:1710 #, c-format msgid "" "there is no label \"%s\" attached to any block or loop enclosing this " "statement" msgstr "в блоке или цикле, окружающем этот оператор, нет метки \"%s\"" -#: pl_gram.y:1720 +#: pl_gram.y:1718 #, c-format msgid "block label \"%s\" cannot be used in CONTINUE" msgstr "метку блока \"%s\" нельзя использовать в CONTINUE" -#: pl_gram.y:1735 +#: pl_gram.y:1733 #, c-format msgid "EXIT cannot be used outside a loop, unless it has a label" msgstr "EXIT можно использовать вне цикла только с указанием метки" -#: pl_gram.y:1736 +#: pl_gram.y:1734 #, c-format msgid "CONTINUE cannot be used outside a loop" msgstr "CONTINUE нельзя использовать вне цикла" -#: pl_gram.y:1760 pl_gram.y:1798 pl_gram.y:1846 pl_gram.y:2998 pl_gram.y:3083 -#: pl_gram.y:3194 pl_gram.y:3957 +#: pl_gram.y:1758 pl_gram.y:1796 pl_gram.y:1844 pl_gram.y:2996 pl_gram.y:3081 +#: pl_gram.y:3192 pl_gram.y:3955 msgid "unexpected end of function definition" msgstr "неожиданный конец определения функции" -#: pl_gram.y:1866 pl_gram.y:1890 pl_gram.y:1906 pl_gram.y:1912 pl_gram.y:2031 -#: pl_gram.y:2039 pl_gram.y:2053 pl_gram.y:2148 pl_gram.y:2399 pl_gram.y:2493 -#: pl_gram.y:2652 pl_gram.y:3799 pl_gram.y:3860 pl_gram.y:3938 +#: pl_gram.y:1864 pl_gram.y:1888 pl_gram.y:1904 pl_gram.y:1910 pl_gram.y:2029 +#: pl_gram.y:2037 pl_gram.y:2051 pl_gram.y:2146 pl_gram.y:2397 pl_gram.y:2491 +#: pl_gram.y:2650 pl_gram.y:3797 pl_gram.y:3858 pl_gram.y:3936 msgid "syntax error" msgstr "ошибка синтаксиса" -#: pl_gram.y:1894 pl_gram.y:1896 pl_gram.y:2403 pl_gram.y:2405 +#: pl_gram.y:1892 pl_gram.y:1894 pl_gram.y:2401 pl_gram.y:2403 msgid "invalid SQLSTATE code" msgstr "неверный код SQLSTATE" -#: pl_gram.y:2096 +#: pl_gram.y:2094 msgid "syntax error, expected \"FOR\"" msgstr "ошибка синтаксиса, ожидался \"FOR\"" -#: pl_gram.y:2157 +#: pl_gram.y:2155 #, c-format msgid "FETCH statement cannot return multiple rows" msgstr "оператор FETCH не может вернуть несколько строк" -#: pl_gram.y:2281 +#: pl_gram.y:2279 #, c-format msgid "cursor variable must be a simple variable" msgstr "переменная-курсор должна быть простой переменной" -#: pl_gram.y:2287 +#: pl_gram.y:2285 #, c-format msgid "variable \"%s\" must be of type cursor or refcursor" msgstr "переменная \"%s\" должна быть типа cursor или refcursor" -#: pl_gram.y:2623 pl_gram.y:2634 +#: pl_gram.y:2621 pl_gram.y:2632 #, c-format msgid "\"%s\" is not a known variable" msgstr "\"%s\" - не известная переменная" -#: pl_gram.y:2738 pl_gram.y:2748 pl_gram.y:2903 +#: pl_gram.y:2736 pl_gram.y:2746 pl_gram.y:2901 msgid "mismatched parentheses" msgstr "непарные скобки" -#: pl_gram.y:2752 +#: pl_gram.y:2750 #, c-format msgid "missing \"%s\" at end of SQL expression" msgstr "отсутствует \"%s\" в конце выражения SQL" -#: pl_gram.y:2758 +#: pl_gram.y:2756 #, c-format msgid "missing \"%s\" at end of SQL statement" msgstr "отсутствует \"%s\" в конце оператора SQL" -#: pl_gram.y:2775 +#: pl_gram.y:2773 msgid "missing expression" msgstr "отсутствует выражение" -#: pl_gram.y:2777 +#: pl_gram.y:2775 msgid "missing SQL statement" msgstr "отсутствует оператор SQL" -#: pl_gram.y:2905 +#: pl_gram.y:2903 msgid "incomplete data type declaration" msgstr "неполное определение типа данных" -#: pl_gram.y:2928 +#: pl_gram.y:2926 msgid "missing data type declaration" msgstr "отсутствует определение типа данных" -#: pl_gram.y:3006 +#: pl_gram.y:3004 msgid "INTO specified more than once" msgstr "INTO указано неоднократно" -#: pl_gram.y:3175 +#: pl_gram.y:3173 msgid "expected FROM or IN" msgstr "ожидалось FROM или IN" -#: pl_gram.y:3236 +#: pl_gram.y:3234 #, c-format msgid "RETURN cannot have a parameter in function returning set" msgstr "в функции, возвращающей множество, RETURN должен быть без параметров" -#: pl_gram.y:3237 +#: pl_gram.y:3235 #, c-format msgid "Use RETURN NEXT or RETURN QUERY." msgstr "Используйте RETURN NEXT или RETURN QUERY." -#: pl_gram.y:3247 +#: pl_gram.y:3245 #, c-format msgid "RETURN cannot have a parameter in a procedure" msgstr "в процедуре RETURN должен быть без параметров" -#: pl_gram.y:3252 +#: pl_gram.y:3250 #, c-format msgid "RETURN cannot have a parameter in function returning void" msgstr "в функции, не возвращающей ничего, RETURN не должен иметь параметров" -#: pl_gram.y:3261 +#: pl_gram.y:3259 #, c-format msgid "RETURN cannot have a parameter in function with OUT parameters" msgstr "RETURN должен быть без параметров в функции с параметрами OUT" -#: pl_gram.y:3324 +#: pl_gram.y:3322 #, c-format msgid "RETURN NEXT cannot have a parameter in function with OUT parameters" msgstr "RETURN NEXT должен быть без параметров в функции с параметрами OUT" -#: pl_gram.y:3432 +#: pl_gram.y:3430 #, c-format msgid "variable \"%s\" is declared CONSTANT" msgstr "переменная \"%s\" объявлена как CONSTANT" -#: pl_gram.y:3495 +#: pl_gram.y:3493 #, c-format msgid "record variable cannot be part of multiple-item INTO list" msgstr "" "переменная типа запись не может быть частью списка INTO с несколькими " "элементами" -#: pl_gram.y:3541 +#: pl_gram.y:3539 #, c-format msgid "too many INTO variables specified" msgstr "указано слишком много переменных INTO" -#: pl_gram.y:3752 +#: pl_gram.y:3750 #, c-format -msgid "end label \"%s\" specified for unlabelled block" -msgstr "конечная метка \"%s\" указана для не помеченного блока" +msgid "end label \"%s\" specified for unlabeled block" +msgstr "конечная метка \"%s\" указана для непомеченного блока" -#: pl_gram.y:3759 +#: pl_gram.y:3757 #, c-format msgid "end label \"%s\" differs from block's label \"%s\"" msgstr "конечная метка \"%s\" отличается от метки блока \"%s\"" -#: pl_gram.y:3794 +#: pl_gram.y:3792 #, c-format msgid "cursor \"%s\" has no arguments" msgstr "курсор \"%s\" не имеет аргументов" -#: pl_gram.y:3808 +#: pl_gram.y:3806 #, c-format msgid "cursor \"%s\" has arguments" msgstr "курсор \"%s\" имеет аргументы" -#: pl_gram.y:3850 +#: pl_gram.y:3848 #, c-format msgid "cursor \"%s\" has no argument named \"%s\"" msgstr "курсор \"%s\" не имеет аргумента \"%s\"" -#: pl_gram.y:3870 +#: pl_gram.y:3868 #, c-format msgid "value for parameter \"%s\" of cursor \"%s\" specified more than once" msgstr "значение параметра \"%s\" курсора \"%s\" указано неоднократно" -#: pl_gram.y:3895 +#: pl_gram.y:3893 #, c-format msgid "not enough arguments for cursor \"%s\"" msgstr "недостаточно аргументов для курсора \"%s\"" -#: pl_gram.y:3902 +#: pl_gram.y:3900 #, c-format msgid "too many arguments for cursor \"%s\"" msgstr "слишком много аргументов для курсора \"%s\"" -#: pl_gram.y:3989 +#: pl_gram.y:3987 msgid "unrecognized RAISE statement option" msgstr "нераспознанный параметр оператора RAISE" -#: pl_gram.y:3993 +#: pl_gram.y:3991 msgid "syntax error, expected \"=\"" msgstr "ошибка синтаксиса, ожидалось \"=\"" -#: pl_gram.y:4034 +#: pl_gram.y:4032 #, c-format msgid "too many parameters specified for RAISE" msgstr "слишком много параметров для RAISE" -#: pl_gram.y:4038 +#: pl_gram.y:4036 #, c-format msgid "too few parameters specified for RAISE" msgstr "недостаточно параметров для RAISE" -#: pl_handler.c:158 +#: pl_handler.c:156 msgid "" "Sets handling of conflicts between PL/pgSQL variable names and table column " "names." @@ -876,7 +876,7 @@ msgstr "" "Выбирает режим разрешения конфликтов между именами переменных PL/pgSQL и " "именами столбцов таблиц." -#: pl_handler.c:167 +#: pl_handler.c:165 msgid "" "Print information about parameters in the DETAIL part of the error messages " "generated on INTO ... STRICT failures." @@ -884,16 +884,16 @@ msgstr "" "Добавляет информацию о параметрах в раздел DETAIL сообщений, выводимых при " "ошибках в INTO ... STRICT." -#: pl_handler.c:175 +#: pl_handler.c:173 msgid "Perform checks given in ASSERT statements." msgstr "Выполняет проверки, заданные в операторах ASSERT." -#: pl_handler.c:183 +#: pl_handler.c:181 msgid "List of programming constructs that should produce a warning." msgstr "" "Список программных конструкций, которые должны выдавать предупреждения." -#: pl_handler.c:193 +#: pl_handler.c:191 msgid "List of programming constructs that should produce an error." msgstr "Список программных конструкций, которые должны выдавать ошибку." diff --git a/src/pl/plpgsql/src/po/sv.po b/src/pl/plpgsql/src/po/sv.po index 50a7390643f48..1e55336851fbe 100644 --- a/src/pl/plpgsql/src/po/sv.po +++ b/src/pl/plpgsql/src/po/sv.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-04-11 01:08+0000\n" -"PO-Revision-Date: 2020-04-11 08:43+0200\n" +"POT-Creation-Date: 2020-06-21 02:08+0000\n" +"PO-Revision-Date: 2020-06-21 11:27+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -760,7 +760,7 @@ msgstr "för många INTO-variabler angivna" #: pl_gram.y:3752 #, c-format -msgid "end label \"%s\" specified for unlabelled block" +msgid "end label \"%s\" specified for unlabeled block" msgstr "slutetikett \"%s\" angiven för block utan etikett" #: pl_gram.y:3759 diff --git a/src/pl/plpgsql/src/po/uk.po b/src/pl/plpgsql/src/po/uk.po index d1913ab70b5da..d3a381c3aa8ae 100644 --- a/src/pl/plpgsql/src/po/uk.po +++ b/src/pl/plpgsql/src/po/uk.po @@ -1,159 +1,165 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2018-12-04 20:35+0100\n" -"PO-Revision-Date: 2019-08-13 18:00\n" -"Last-Translator: pasha_golub\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:09+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_11_STABLE/src/pl/plpgsql/src/po/plpgsql.pot\n" +"X-Crowdin-File: /DEV_13/plpgsql.pot\n" +"X-Crowdin-File-ID: 518\n" -#: pl_comp.c:434 pl_handler.c:457 +#: pl_comp.c:436 pl_handler.c:471 #, c-format msgid "PL/pgSQL functions cannot accept type %s" msgstr "Функції PL/pgSQl не можуть приймати тип %s" -#: pl_comp.c:522 +#: pl_comp.c:526 #, c-format msgid "could not determine actual return type for polymorphic function \"%s\"" msgstr "не вдалося визначити фактичний тип результату поліморфної функції \"%s\"" -#: pl_comp.c:552 +#: pl_comp.c:556 #, c-format msgid "trigger functions can only be called as triggers" msgstr "тригер-функція може викликатися лише як тригер" -#: pl_comp.c:556 pl_handler.c:441 +#: pl_comp.c:560 pl_handler.c:455 #, c-format msgid "PL/pgSQL functions cannot return type %s" msgstr "Функції PL/pgSQL не можуть повертати тип %s" -#: pl_comp.c:595 +#: pl_comp.c:600 #, c-format msgid "trigger functions cannot have declared arguments" msgstr "тригер-функції не можуть мати задекларованих аргументи" -#: pl_comp.c:596 +#: pl_comp.c:601 #, c-format msgid "The arguments of the trigger can be accessed through TG_NARGS and TG_ARGV instead." msgstr "Аргументи тригеру доступні через TG_NARGS та TG_ARGV замість цього." -#: pl_comp.c:719 +#: pl_comp.c:734 #, c-format msgid "event trigger functions cannot have declared arguments" msgstr "функції тригерів подій не можуть мати задекларовані аргументи" -#: pl_comp.c:976 +#: pl_comp.c:997 #, c-format msgid "compilation of PL/pgSQL function \"%s\" near line %d" msgstr "компіляція функції PL/pgSQL \"%s\" біля рядка %d" -#: pl_comp.c:999 +#: pl_comp.c:1020 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "ім'я параметру «%s» використано декілька разів" -#: pl_comp.c:1109 +#: pl_comp.c:1132 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "посилання на стовпець \"%s\" є неоднозначним" -#: pl_comp.c:1111 +#: pl_comp.c:1134 #, c-format msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Це може відноситися до змінної PL/pgSQL або стовпця таблиці." -#: pl_comp.c:1294 pl_exec.c:5078 pl_exec.c:5443 pl_exec.c:5530 pl_exec.c:5621 -#: pl_exec.c:6539 +#: pl_comp.c:1317 pl_exec.c:5169 pl_exec.c:5534 pl_exec.c:5621 pl_exec.c:5712 +#: pl_exec.c:6700 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "запис \"%s\" не має поля \"%s\"" -#: pl_comp.c:1756 +#: pl_comp.c:1793 #, c-format msgid "relation \"%s\" does not exist" msgstr "відношення \"%s\" не існує" -#: pl_comp.c:1848 +#: pl_comp.c:1891 #, c-format msgid "variable \"%s\" has pseudo-type %s" msgstr "змінна \"%s\" має псевдотип %s" -#: pl_comp.c:2028 +#: pl_comp.c:2080 #, c-format msgid "type \"%s\" is only a shell" msgstr "тип \"%s\" є лише оболонкою" -#: pl_comp.c:2125 pl_comp.c:2178 +#: pl_comp.c:2162 pl_exec.c:7001 +#, c-format +msgid "type %s is not composite" +msgstr "тип %s не є складеним" + +#: pl_comp.c:2210 pl_comp.c:2263 #, c-format msgid "unrecognized exception condition \"%s\"" msgstr "нерозпізнана умова виключення \"%s\"" -#: pl_comp.c:2392 +#: pl_comp.c:2484 #, c-format msgid "could not determine actual argument type for polymorphic function \"%s\"" msgstr "не вдалося визначити фактичний тип аргумента поліморфної функції \"%s\"" -#: pl_exec.c:475 pl_exec.c:887 pl_exec.c:1104 +#: pl_exec.c:498 pl_exec.c:935 pl_exec.c:1173 msgid "during initialization of execution state" msgstr "під час ініціалізації стану виконання" -#: pl_exec.c:481 +#: pl_exec.c:504 msgid "while storing call arguments into local variables" msgstr "під час зберігання аргументів виклику до локальних змінних" -#: pl_exec.c:569 pl_exec.c:939 +#: pl_exec.c:592 pl_exec.c:1008 msgid "during function entry" msgstr "під час входу до функції" -#: pl_exec.c:594 +#: pl_exec.c:617 #, c-format msgid "control reached end of function without RETURN" msgstr "досягнуто кінця функції без RETURN" -#: pl_exec.c:601 +#: pl_exec.c:624 msgid "while casting return value to function's return type" msgstr "під час приведення значення, що повертається, до типу результата функції" -#: pl_exec.c:614 pl_exec.c:3541 +#: pl_exec.c:637 pl_exec.c:3604 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "функція \"set-valued\" викликана в контексті, де йому немає місця" -#: pl_exec.c:740 pl_exec.c:968 pl_exec.c:1129 +#: pl_exec.c:763 pl_exec.c:1037 pl_exec.c:1198 msgid "during function exit" msgstr "під час виходу з функції" -#: pl_exec.c:795 pl_exec.c:834 pl_exec.c:3386 +#: pl_exec.c:818 pl_exec.c:882 pl_exec.c:3449 msgid "returned record type does not match expected record type" msgstr "тип запису, що повертається, не відповідає очікуваному типу" -#: pl_exec.c:964 pl_exec.c:1125 +#: pl_exec.c:1033 pl_exec.c:1194 #, c-format msgid "control reached end of trigger procedure without RETURN" msgstr "досягнуто кінця тригерної процедури без RETURN" -#: pl_exec.c:973 +#: pl_exec.c:1042 #, c-format msgid "trigger procedure cannot return a set" msgstr "тригерна процедура не може повернути набір" -#: pl_exec.c:1012 pl_exec.c:1040 +#: pl_exec.c:1081 pl_exec.c:1109 msgid "returned row structure does not match the structure of the triggering table" msgstr "структура рядка, що повертається, не відповідає структурі таблиці, яка викликала тригер" #. translator: last %s is a phrase such as "during statement block #. local variable initialization" #. -#: pl_exec.c:1177 +#: pl_exec.c:1244 #, c-format msgid "PL/pgSQL function %s line %d %s" msgstr "Функція PL/pgSQL %s рядок %d %s" @@ -161,293 +167,298 @@ msgstr "Функція PL/pgSQL %s рядок %d %s" #. translator: last %s is a phrase such as "while storing call #. arguments into local variables" #. -#: pl_exec.c:1188 +#: pl_exec.c:1255 #, c-format msgid "PL/pgSQL function %s %s" msgstr "Функція PL/pgSQL %s %s" #. translator: last %s is a plpgsql statement type name -#: pl_exec.c:1196 +#: pl_exec.c:1263 #, c-format msgid "PL/pgSQL function %s line %d at %s" msgstr "Функція PL/pgSQL %s рядок %d в %s" -#: pl_exec.c:1202 +#: pl_exec.c:1269 #, c-format msgid "PL/pgSQL function %s" msgstr "Функція PL/pgSQL %s" -#: pl_exec.c:1540 +#: pl_exec.c:1607 msgid "during statement block local variable initialization" msgstr "під час ініціалізації локальної змінної в блоці операторів" -#: pl_exec.c:1638 +#: pl_exec.c:1705 msgid "during statement block entry" msgstr "під час входу в блок операторів" -#: pl_exec.c:1670 +#: pl_exec.c:1737 msgid "during statement block exit" msgstr "під час виходу з блоку операторів" -#: pl_exec.c:1708 +#: pl_exec.c:1775 msgid "during exception cleanup" msgstr "під час очищення винятку" -#: pl_exec.c:2204 +#: pl_exec.c:2271 #, c-format msgid "procedure parameter \"%s\" is an output parameter but corresponding argument is not writable" msgstr "параметр процедури \"%s\" є вихідним, але відповідний аргумент не допускає запис" -#: pl_exec.c:2209 +#: pl_exec.c:2276 #, c-format msgid "procedure parameter %d is an output parameter but corresponding argument is not writable" msgstr "параметр процедури %d є вихідним, але відповідний аргумент не допускає запис" -#: pl_exec.c:2320 +#: pl_exec.c:2388 #, c-format msgid "GET STACKED DIAGNOSTICS cannot be used outside an exception handler" msgstr "GET STACKED DIAGNOSTICS не може використовуватись поза блоком обробника винятків" -#: pl_exec.c:2525 +#: pl_exec.c:2588 #, c-format msgid "case not found" msgstr "гілку не знайдено" -#: pl_exec.c:2526 +#: pl_exec.c:2589 #, c-format msgid "CASE statement is missing ELSE part." msgstr "В операторі CASE пропущено частину ELSE." -#: pl_exec.c:2619 +#: pl_exec.c:2682 #, c-format msgid "lower bound of FOR loop cannot be null" msgstr "нижня границя циклу FOR не може бути null" -#: pl_exec.c:2635 +#: pl_exec.c:2698 #, c-format msgid "upper bound of FOR loop cannot be null" msgstr "верхня границя циклу FOR не може бути null" -#: pl_exec.c:2653 +#: pl_exec.c:2716 #, c-format msgid "BY value of FOR loop cannot be null" msgstr "Значення BY циклу FOR не може бути null" -#: pl_exec.c:2659 +#: pl_exec.c:2722 #, c-format msgid "BY value of FOR loop must be greater than zero" msgstr "Значення BY циклу FOR повинно бути більше нуля" -#: pl_exec.c:2793 pl_exec.c:4508 +#: pl_exec.c:2856 pl_exec.c:4583 #, c-format msgid "cursor \"%s\" already in use" msgstr "курсор \"%s\" вже використовується" -#: pl_exec.c:2816 pl_exec.c:4573 +#: pl_exec.c:2879 pl_exec.c:4648 #, c-format msgid "arguments given for cursor without arguments" msgstr "аргументи, надані курсору без аргументів" -#: pl_exec.c:2835 pl_exec.c:4592 +#: pl_exec.c:2898 pl_exec.c:4667 #, c-format msgid "arguments required for cursor" msgstr "аргументи, необхідні для курсора" -#: pl_exec.c:2922 +#: pl_exec.c:2985 #, c-format msgid "FOREACH expression must not be null" msgstr "Вираз FOREACH не може бути null" -#: pl_exec.c:2937 +#: pl_exec.c:3000 #, c-format msgid "FOREACH expression must yield an array, not type %s" msgstr "Вираз в FOREACH повинен бути масивом, не типом %s" -#: pl_exec.c:2954 +#: pl_exec.c:3017 #, c-format msgid "slice dimension (%d) is out of the valid range 0..%d" msgstr "розмір зрізу (%d) поза припустимим діапазоном 0..%d" -#: pl_exec.c:2981 +#: pl_exec.c:3044 #, c-format msgid "FOREACH ... SLICE loop variable must be of an array type" msgstr "Змінна циклу FOREACH ... SLICE повинна бути масивом" -#: pl_exec.c:2985 +#: pl_exec.c:3048 #, c-format msgid "FOREACH loop variable must not be of an array type" msgstr "Змінна циклу FOREACH не повинна бути масивом" -#: pl_exec.c:3147 pl_exec.c:3204 pl_exec.c:3379 +#: pl_exec.c:3210 pl_exec.c:3267 pl_exec.c:3442 #, c-format msgid "cannot return non-composite value from function returning composite type" msgstr "функція, що повертає складений тип, не може повернути не складене значення" -#: pl_exec.c:3243 pl_gram.y:3267 +#: pl_exec.c:3306 pl_gram.y:3309 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "не можна використовувати RETURN NEXT в функціях, що не повертають набори даних" -#: pl_exec.c:3284 pl_exec.c:3416 +#: pl_exec.c:3347 pl_exec.c:3479 #, c-format msgid "wrong result type supplied in RETURN NEXT" msgstr "в RETURN NEXT вказано неправильний тип результату" -#: pl_exec.c:3322 pl_exec.c:3343 +#: pl_exec.c:3385 pl_exec.c:3406 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "в RETURN NEXT вказано неправильний тип запису" -#: pl_exec.c:3435 +#: pl_exec.c:3498 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "RETURN NEXT повинен мати параметр" -#: pl_exec.c:3461 pl_gram.y:3330 +#: pl_exec.c:3524 pl_gram.y:3373 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "не можна використовувати RETURN QUERY в функціях, що не повертають набір" -#: pl_exec.c:3485 +#: pl_exec.c:3548 msgid "structure of query does not match function result type" msgstr "структура запиту не відповідає типу результата функції" -#: pl_exec.c:3569 pl_exec.c:3707 +#: pl_exec.c:3632 pl_exec.c:3770 #, c-format msgid "RAISE option already specified: %s" msgstr "Параметр RAISE вже вказано: %s" -#: pl_exec.c:3603 +#: pl_exec.c:3666 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "RAISE без параметрів не можна використовувати поза блоком обробника винятків" -#: pl_exec.c:3697 +#: pl_exec.c:3760 #, c-format msgid "RAISE statement option cannot be null" msgstr "Параметром оператора RAISE не може бути null" -#: pl_exec.c:3767 +#: pl_exec.c:3830 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3822 +#: pl_exec.c:3885 #, c-format msgid "assertion failed" msgstr "порушення істинності" -#: pl_exec.c:4159 pl_exec.c:4346 +#: pl_exec.c:4232 pl_exec.c:4422 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "в PL/pgSQL не можна виконати COPY за участю клієнта" -#: pl_exec.c:4165 +#: pl_exec.c:4238 #, c-format msgid "unsupported transaction command in PL/pgSQL" msgstr "непідтримувана транзакційна команда в PL/pgSQL" -#: pl_exec.c:4189 pl_exec.c:4376 +#: pl_exec.c:4261 pl_exec.c:4451 #, c-format msgid "INTO used with a command that cannot return data" msgstr "INTO використаний з командою, що не може повертати дані" -#: pl_exec.c:4212 pl_exec.c:4399 +#: pl_exec.c:4284 pl_exec.c:4474 #, c-format msgid "query returned no rows" msgstr "запит не повернув рядки" -#: pl_exec.c:4231 pl_exec.c:4418 +#: pl_exec.c:4306 pl_exec.c:4493 #, c-format msgid "query returned more than one row" msgstr "запит повернув декілька рядків" -#: pl_exec.c:4248 +#: pl_exec.c:4308 +#, c-format +msgid "Make sure the query returns a single row, or use LIMIT 1." +msgstr "Переконайтеся, що запит повертає один рядок, або використовуйте LIMIT 1." + +#: pl_exec.c:4324 #, c-format msgid "query has no destination for result data" msgstr "запит не має призначення для даних результату" -#: pl_exec.c:4249 +#: pl_exec.c:4325 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." msgstr "Якщо ви хочете відкинути результати SELECT, використайте PERFORM." -#: pl_exec.c:4282 pl_exec.c:8300 +#: pl_exec.c:4358 pl_exec.c:8680 #, c-format msgid "query string argument of EXECUTE is null" msgstr "текстовий аргумент запиту EXECUTE є null" -#: pl_exec.c:4338 +#: pl_exec.c:4414 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "EXECUTE виразу SELECT ... INTO не реалізовано" -#: pl_exec.c:4339 +#: pl_exec.c:4415 #, c-format msgid "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS instead." msgstr "Альтернативою може стати EXECUTE ... INTO або EXECUTE CREATE TABLE ... AS." -#: pl_exec.c:4352 +#: pl_exec.c:4428 #, c-format msgid "EXECUTE of transaction commands is not implemented" msgstr "EXECUTE з транзакційними командами не реалізовано" -#: pl_exec.c:4654 pl_exec.c:4742 +#: pl_exec.c:4729 pl_exec.c:4817 #, c-format msgid "cursor variable \"%s\" is null" msgstr "змінна курсора \"%s\" дорівнює null" -#: pl_exec.c:4665 pl_exec.c:4753 +#: pl_exec.c:4740 pl_exec.c:4828 #, c-format msgid "cursor \"%s\" does not exist" msgstr "курсор \"%s\" не існує" -#: pl_exec.c:4678 +#: pl_exec.c:4753 #, c-format msgid "relative or absolute cursor position is null" msgstr "відносна або абсолютна позиція курсора дорівнює null" -#: pl_exec.c:4928 pl_exec.c:5023 +#: pl_exec.c:5019 pl_exec.c:5114 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "значення null не можна призначити змінній \"%s\", оголошеній NOT NULL" -#: pl_exec.c:5004 +#: pl_exec.c:5095 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "змінній типу кортеж можна призначити лише складене значення" -#: pl_exec.c:5036 +#: pl_exec.c:5127 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "змінній типу запис можна призначити лише складене значення" -#: pl_exec.c:5087 +#: pl_exec.c:5178 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "призначити значення системному стовпцю \"%s\" не можна" -#: pl_exec.c:5151 +#: pl_exec.c:5242 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "число вимірів масива (%d) перевищує ліміт (%d)" -#: pl_exec.c:5183 +#: pl_exec.c:5274 #, c-format msgid "subscripted object is not an array" msgstr "для об'єкта вказано індекс, але цей об'єкт не є масивом" -#: pl_exec.c:5221 +#: pl_exec.c:5312 #, c-format msgid "array subscript in assignment must not be null" msgstr "підрядковий символ масиву у призначенні не може бути NULL" -#: pl_exec.c:5728 +#: pl_exec.c:5819 #, c-format msgid "query \"%s\" did not return data" msgstr "запит \"%s\" не повернув дані" -#: pl_exec.c:5736 +#: pl_exec.c:5827 #, c-format msgid "query \"%s\" returned %d column" msgid_plural "query \"%s\" returned %d columns" @@ -456,369 +467,385 @@ msgstr[1] "запит \"%s\" повернув %d колонки" msgstr[2] "запит \"%s\" повернув %d колонок" msgstr[3] "запит \"%s\" повернув %d колонки" -#: pl_exec.c:5764 +#: pl_exec.c:5855 #, c-format msgid "query \"%s\" returned more than one row" msgstr "запит \"%s\" повернув декілька рядків" -#: pl_exec.c:5827 +#: pl_exec.c:5918 #, c-format msgid "query \"%s\" is not a SELECT" msgstr "запит \"%s\" не є SELECT" -#: pl_exec.c:6553 pl_exec.c:6593 pl_exec.c:6633 +#: pl_exec.c:6714 pl_exec.c:6754 pl_exec.c:6794 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "тип параметру %d (%s) не відповідає тому, з котрим тривала підготовка плану (%s)" -#: pl_exec.c:7408 +#: pl_exec.c:7205 pl_exec.c:7239 pl_exec.c:7313 pl_exec.c:7339 +#, c-format +msgid "number of source and target fields in assignment does not match" +msgstr "кількість вихідних і цільових полів у присвоюванні не збігається" + +#. translator: %s represents a name of an extra check +#: pl_exec.c:7207 pl_exec.c:7241 pl_exec.c:7315 pl_exec.c:7341 +#, c-format +msgid "%s check of %s is active." +msgstr "%s перевірка %s активна." + +#: pl_exec.c:7211 pl_exec.c:7245 pl_exec.c:7319 pl_exec.c:7345 +#, c-format +msgid "Make sure the query returns the exact list of columns." +msgstr "Переконайтеся, що запит повертає точний список стовпців." + +#: pl_exec.c:7732 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "запис \"%s\" ще не призначено" -#: pl_exec.c:7409 +#: pl_exec.c:7733 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "Для запису, котрому не призначене значення, структура кортежа не визначена." -#: pl_funcs.c:239 +#: pl_funcs.c:237 msgid "statement block" msgstr "блок операторів" -#: pl_funcs.c:241 +#: pl_funcs.c:239 msgid "assignment" msgstr "призначення" -#: pl_funcs.c:251 +#: pl_funcs.c:249 msgid "FOR with integer loop variable" msgstr "FOR з цілим числом змінної циклу" -#: pl_funcs.c:253 +#: pl_funcs.c:251 msgid "FOR over SELECT rows" msgstr "FOR за результатами SELECT" -#: pl_funcs.c:255 +#: pl_funcs.c:253 msgid "FOR over cursor" msgstr "FOR за курсором" -#: pl_funcs.c:257 +#: pl_funcs.c:255 msgid "FOREACH over array" msgstr "FOREACH за масивом" -#: pl_funcs.c:271 +#: pl_funcs.c:269 msgid "SQL statement" msgstr "SQL-оператор" -#: pl_funcs.c:275 +#: pl_funcs.c:273 msgid "FOR over EXECUTE statement" msgstr "FOR за результатами EXECUTE" -#: pl_gram.y:485 +#: pl_gram.y:489 #, c-format msgid "block label must be placed before DECLARE, not after" msgstr "мітка блоку повинна бути розміщена до DECLARE, а не після" -#: pl_gram.y:505 +#: pl_gram.y:509 #, c-format msgid "collations are not supported by type %s" msgstr "тип %s не підтримує правила сортування" -#: pl_gram.y:524 +#: pl_gram.y:528 #, c-format msgid "variable \"%s\" must have a default value, since it's declared NOT NULL" msgstr "змінна \"%s\" повинна мати значення за замовчуванням після того, як вона оголошена як NOT NULL" -#: pl_gram.y:670 pl_gram.y:685 pl_gram.y:711 +#: pl_gram.y:675 pl_gram.y:690 pl_gram.y:716 #, c-format msgid "variable \"%s\" does not exist" msgstr "змінної \"%s\" не існує" -#: pl_gram.y:729 pl_gram.y:757 +#: pl_gram.y:734 pl_gram.y:762 msgid "duplicate declaration" msgstr "дублікат оголошення" -#: pl_gram.y:740 pl_gram.y:768 +#: pl_gram.y:745 pl_gram.y:773 #, c-format msgid "variable \"%s\" shadows a previously defined variable" msgstr "змінна \"%s\" приховує раніше оголошену змінну" -#: pl_gram.y:984 +#: pl_gram.y:993 #, c-format msgid "diagnostics item %s is not allowed in GET STACKED DIAGNOSTICS" msgstr "команда GET STACKED DIAGNOSTICS не дозволяє елемент діагностування %s" -#: pl_gram.y:1002 +#: pl_gram.y:1011 #, c-format msgid "diagnostics item %s is not allowed in GET CURRENT DIAGNOSTICS" msgstr "команда GET CURRENT DIAGNOSTICS не дозволяє елемент діагностування %s" -#: pl_gram.y:1100 +#: pl_gram.y:1106 msgid "unrecognized GET DIAGNOSTICS item" msgstr "нерозпізнаний елемент GET DIAGNOSTICS" -#: pl_gram.y:1110 pl_gram.y:3509 +#: pl_gram.y:1116 pl_gram.y:3553 #, c-format msgid "\"%s\" is not a scalar variable" msgstr "\"%s\" не є скалярною змінною" -#: pl_gram.y:1358 pl_gram.y:1551 +#: pl_gram.y:1370 pl_gram.y:1567 #, c-format msgid "loop variable of loop over rows must be a record variable or list of scalar variables" msgstr "змінна циклу по кортежах повинна бути змінною типу запис або списком скалярних змінних" -#: pl_gram.y:1392 +#: pl_gram.y:1405 #, c-format msgid "cursor FOR loop must have only one target variable" msgstr "курсор в циклі FOR повинен мати лише одну цільову змінну" -#: pl_gram.y:1399 +#: pl_gram.y:1412 #, c-format msgid "cursor FOR loop must use a bound cursor variable" msgstr "цикл курсора FOR повинен використовувати обмежуючу змінну курсора" -#: pl_gram.y:1486 +#: pl_gram.y:1499 #, c-format msgid "integer FOR loop must have only one target variable" msgstr "цілочисельний цикл FOR повинен мати лише одну цільову змінну" -#: pl_gram.y:1522 +#: pl_gram.y:1537 #, c-format msgid "cannot specify REVERSE in query FOR loop" msgstr "в циклі FOR з запитом не можна вказати REVERSE" -#: pl_gram.y:1653 +#: pl_gram.y:1670 #, c-format msgid "loop variable of FOREACH must be a known variable or list of variables" msgstr "змінній циклу FOREACH повинна бути відома змінна або список змінних" -#: pl_gram.y:1694 +#: pl_gram.y:1712 #, c-format msgid "there is no label \"%s\" attached to any block or loop enclosing this statement" msgstr "в блоку або циклу, розділеному цим оператором, немає мітки \"%s\"" -#: pl_gram.y:1702 +#: pl_gram.y:1720 #, c-format msgid "block label \"%s\" cannot be used in CONTINUE" msgstr "мітку блока \"%s\" не можна використовувати в CONTINUE" -#: pl_gram.y:1717 +#: pl_gram.y:1735 #, c-format msgid "EXIT cannot be used outside a loop, unless it has a label" msgstr "EXIT можна використовувати поза циклом, тільки з зазначенням мітки" -#: pl_gram.y:1718 +#: pl_gram.y:1736 #, c-format msgid "CONTINUE cannot be used outside a loop" msgstr "CONTINUE не можна використовувати поза циклом" -#: pl_gram.y:1742 pl_gram.y:1779 pl_gram.y:1827 pl_gram.y:2959 pl_gram.y:3042 -#: pl_gram.y:3153 pl_gram.y:3910 +#: pl_gram.y:1760 pl_gram.y:1798 pl_gram.y:1846 pl_gram.y:2998 pl_gram.y:3083 +#: pl_gram.y:3194 pl_gram.y:3957 msgid "unexpected end of function definition" msgstr "неочікуваний кінец визначення функції" -#: pl_gram.y:1847 pl_gram.y:1871 pl_gram.y:1887 pl_gram.y:1893 pl_gram.y:2010 -#: pl_gram.y:2018 pl_gram.y:2032 pl_gram.y:2126 pl_gram.y:2361 pl_gram.y:2455 -#: pl_gram.y:2613 pl_gram.y:3752 pl_gram.y:3813 pl_gram.y:3891 +#: pl_gram.y:1866 pl_gram.y:1890 pl_gram.y:1906 pl_gram.y:1912 pl_gram.y:2031 +#: pl_gram.y:2039 pl_gram.y:2053 pl_gram.y:2148 pl_gram.y:2399 pl_gram.y:2493 +#: pl_gram.y:2652 pl_gram.y:3799 pl_gram.y:3860 pl_gram.y:3938 msgid "syntax error" msgstr "синтаксична помилка" -#: pl_gram.y:1875 pl_gram.y:1877 pl_gram.y:2365 pl_gram.y:2367 +#: pl_gram.y:1894 pl_gram.y:1896 pl_gram.y:2403 pl_gram.y:2405 msgid "invalid SQLSTATE code" msgstr "неприпустимий код SQLSTATE" -#: pl_gram.y:2074 +#: pl_gram.y:2096 msgid "syntax error, expected \"FOR\"" msgstr "помилка синтаксису, очікувався \"FOR\"" -#: pl_gram.y:2135 +#: pl_gram.y:2157 #, c-format msgid "FETCH statement cannot return multiple rows" msgstr "Оператор FETCH не може повернути декілька рядків" -#: pl_gram.y:2245 +#: pl_gram.y:2281 #, c-format msgid "cursor variable must be a simple variable" msgstr "змінна-курсор повинна бути простою змінною" -#: pl_gram.y:2251 +#: pl_gram.y:2287 #, c-format msgid "variable \"%s\" must be of type cursor or refcursor" msgstr "змінна \"%s\" повинна бути типу cursor або refcursor" -#: pl_gram.y:2584 pl_gram.y:2595 +#: pl_gram.y:2623 pl_gram.y:2634 #, c-format msgid "\"%s\" is not a known variable" msgstr "\"%s\" - невідома змінна" -#: pl_gram.y:2699 pl_gram.y:2709 pl_gram.y:2864 +#: pl_gram.y:2738 pl_gram.y:2748 pl_gram.y:2903 msgid "mismatched parentheses" msgstr "неузгоджені дужки" -#: pl_gram.y:2713 +#: pl_gram.y:2752 #, c-format msgid "missing \"%s\" at end of SQL expression" msgstr "пропущено \"%s\" в кінці виразу SQL" -#: pl_gram.y:2719 +#: pl_gram.y:2758 #, c-format msgid "missing \"%s\" at end of SQL statement" msgstr "пропущено \"%s\" в кінці оператора SQL" -#: pl_gram.y:2736 +#: pl_gram.y:2775 msgid "missing expression" msgstr "пропущено вираз" -#: pl_gram.y:2738 +#: pl_gram.y:2777 msgid "missing SQL statement" msgstr "пропущений оператор SQL" -#: pl_gram.y:2866 +#: pl_gram.y:2905 msgid "incomplete data type declaration" msgstr "неповне оголошення типу даних" -#: pl_gram.y:2889 +#: pl_gram.y:2928 msgid "missing data type declaration" msgstr "пропущено оголошення типу даних" -#: pl_gram.y:2967 +#: pl_gram.y:3006 msgid "INTO specified more than once" msgstr "INTO вказано неодноразово" -#: pl_gram.y:3134 +#: pl_gram.y:3175 msgid "expected FROM or IN" msgstr "очікувалось FROM або IN" -#: pl_gram.y:3194 +#: pl_gram.y:3236 #, c-format msgid "RETURN cannot have a parameter in function returning set" msgstr "В функції, яка повертає набір, RETURN не може мати параметр" -#: pl_gram.y:3195 +#: pl_gram.y:3237 #, c-format msgid "Use RETURN NEXT or RETURN QUERY." msgstr "Використайте RETURN NEXT або RETURN QUERY." -#: pl_gram.y:3205 +#: pl_gram.y:3247 #, c-format msgid "RETURN cannot have a parameter in a procedure" msgstr "В процедурі RETURN не може мати параметр" -#: pl_gram.y:3210 +#: pl_gram.y:3252 #, c-format msgid "RETURN cannot have a parameter in function returning void" msgstr "В функції, яка не повертає нічого, RETURN не може мати параметр" -#: pl_gram.y:3219 +#: pl_gram.y:3261 #, c-format msgid "RETURN cannot have a parameter in function with OUT parameters" msgstr "В функції з параметрами OUT, RETURN не може мати параметр" -#: pl_gram.y:3281 +#: pl_gram.y:3324 #, c-format msgid "RETURN NEXT cannot have a parameter in function with OUT parameters" msgstr "В функції з параметрами OUT, RETURN NEXT не може мати параметр" -#: pl_gram.y:3388 +#: pl_gram.y:3432 #, c-format msgid "variable \"%s\" is declared CONSTANT" msgstr "змінна \"%s\" оголошена як CONSTANT" -#: pl_gram.y:3451 +#: pl_gram.y:3495 #, c-format msgid "record variable cannot be part of multiple-item INTO list" msgstr "змінна типу запис не може бути частиною списка INTO з декількома елементами" -#: pl_gram.y:3497 +#: pl_gram.y:3541 #, c-format msgid "too many INTO variables specified" msgstr "вказано занадто багато змінних INTO" -#: pl_gram.y:3705 +#: pl_gram.y:3752 #, c-format -msgid "end label \"%s\" specified for unlabelled block" -msgstr "кінцева мітка \"%s\" вказана для непоміченого блоку" +msgid "end label \"%s\" specified for unlabeled block" +msgstr "кінцева мітка \"%s\" вказана для невідміченого блоку" -#: pl_gram.y:3712 +#: pl_gram.y:3759 #, c-format msgid "end label \"%s\" differs from block's label \"%s\"" msgstr "кінцева мітка \"%s\" відрізняється від мітки блоку \"%s\"" -#: pl_gram.y:3747 +#: pl_gram.y:3794 #, c-format msgid "cursor \"%s\" has no arguments" msgstr "курсор \"%s\" не має аргументів" -#: pl_gram.y:3761 +#: pl_gram.y:3808 #, c-format msgid "cursor \"%s\" has arguments" msgstr "курсор \"%s\" має аргументи" -#: pl_gram.y:3803 +#: pl_gram.y:3850 #, c-format msgid "cursor \"%s\" has no argument named \"%s\"" msgstr "курсор \"%s\" не має аргументу \"%s\"" -#: pl_gram.y:3823 +#: pl_gram.y:3870 #, c-format msgid "value for parameter \"%s\" of cursor \"%s\" specified more than once" msgstr "значення параметра \"%s\" курсора \"%s\" вказано неодноразово" -#: pl_gram.y:3848 +#: pl_gram.y:3895 #, c-format msgid "not enough arguments for cursor \"%s\"" msgstr "недостатньо аргументів для курсора \"%s\"" -#: pl_gram.y:3855 +#: pl_gram.y:3902 #, c-format msgid "too many arguments for cursor \"%s\"" msgstr "занадто багато аргументів для курсора \"%s\"" -#: pl_gram.y:3942 +#: pl_gram.y:3989 msgid "unrecognized RAISE statement option" msgstr "нерозпізнаний параметр оператора RAISE" -#: pl_gram.y:3946 +#: pl_gram.y:3993 msgid "syntax error, expected \"=\"" msgstr "помилка синтаксису, очікувалось \"=\"" -#: pl_gram.y:3987 +#: pl_gram.y:4034 #, c-format msgid "too many parameters specified for RAISE" msgstr "занадто багато параметрів вказано для RAISE" -#: pl_gram.y:3991 +#: pl_gram.y:4038 #, c-format msgid "too few parameters specified for RAISE" msgstr "занадто мало параметрів вказано для RAISE" -#: pl_handler.c:154 +#: pl_handler.c:156 msgid "Sets handling of conflicts between PL/pgSQL variable names and table column names." msgstr "Обирає режим вирішення конфліктів між іменами змінних PL/pgSQL та іменами стовпців таблиць." -#: pl_handler.c:163 +#: pl_handler.c:165 msgid "Print information about parameters in the DETAIL part of the error messages generated on INTO ... STRICT failures." msgstr "Додає інформацію про параметри в частину DETAIL повідомлень, які виводяться під час помилок в INTO ... STRICT." -#: pl_handler.c:171 +#: pl_handler.c:173 msgid "Perform checks given in ASSERT statements." msgstr "Виконує перевірки, задані в операторах ASSERT." -#: pl_handler.c:179 +#: pl_handler.c:181 msgid "List of programming constructs that should produce a warning." msgstr "Список програмних конструкцій, які повинні видавати попередження." -#: pl_handler.c:189 +#: pl_handler.c:191 msgid "List of programming constructs that should produce an error." msgstr "Список програмних конструкцій, які повинні видавати помилку." #. translator: %s is typically the translation of "syntax error" -#: pl_scanner.c:630 +#: pl_scanner.c:508 #, c-format msgid "%s at end of input" msgstr "%s в кінці введення" #. translator: first %s is typically the translation of "syntax error" -#: pl_scanner.c:646 +#: pl_scanner.c:524 #, c-format msgid "%s at or near \"%s\"" msgstr "%s в або поблизу \"%s\"" diff --git a/src/pl/plpython/po/es.po b/src/pl/plpython/po/es.po index 7c7cca0f90ff3..a28f27fef96e5 100644 --- a/src/pl/plpython/po/es.po +++ b/src/pl/plpython/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: plpython (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:38+0000\n" +"POT-Creation-Date: 2020-09-13 10:38+0000\n" "PO-Revision-Date: 2019-06-06 17:26-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -21,49 +21,49 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Poedit 2.0.2\n" -#: plpy_cursorobject.c:74 +#: plpy_cursorobject.c:72 #, c-format msgid "plpy.cursor expected a query or a plan" msgstr "plpy.cursor espera una consulta o un plan" -#: plpy_cursorobject.c:157 +#: plpy_cursorobject.c:155 #, c-format msgid "plpy.cursor takes a sequence as its second argument" msgstr "plpy.cursor lleva una secuencia como segundo argumento" -#: plpy_cursorobject.c:173 plpy_spi.c:207 +#: plpy_cursorobject.c:171 plpy_spi.c:207 #, c-format msgid "could not execute plan" msgstr "no se pudo ejecutar el plan" -#: plpy_cursorobject.c:176 plpy_spi.c:210 +#: plpy_cursorobject.c:174 plpy_spi.c:210 #, c-format msgid "Expected sequence of %d argument, got %d: %s" msgid_plural "Expected sequence of %d arguments, got %d: %s" msgstr[0] "Se esperaba una secuencia de %d argumento, se obtuvo %d: %s" msgstr[1] "Se esperaba una secuencia de %d argumentos, se obtuvo %d: %s" -#: plpy_cursorobject.c:323 +#: plpy_cursorobject.c:321 #, c-format msgid "iterating a closed cursor" msgstr "iterando un cursor cerrado" -#: plpy_cursorobject.c:331 plpy_cursorobject.c:397 +#: plpy_cursorobject.c:329 plpy_cursorobject.c:395 #, c-format msgid "iterating a cursor in an aborted subtransaction" msgstr "iterando un cursor en una subtransacción abortada" -#: plpy_cursorobject.c:389 +#: plpy_cursorobject.c:387 #, c-format msgid "fetch from a closed cursor" msgstr "haciendo «fetch» en un cursor cerrado" -#: plpy_cursorobject.c:432 plpy_spi.c:403 +#: plpy_cursorobject.c:430 plpy_spi.c:403 #, c-format msgid "query result has too many rows to fit in a Python list" msgstr "el resultado de la consulta tiene demasiados registros y no entran en una lista de Python" -#: plpy_cursorobject.c:484 +#: plpy_cursorobject.c:482 #, c-format msgid "closing a cursor in an aborted subtransaction" msgstr "cerrando un cursor en una subtransacción abortada" @@ -298,7 +298,7 @@ msgstr "no se pudo compilar la función PL/Python «%s»" msgid "could not compile anonymous PL/Python code block" msgstr "no se pudo compilar el bloque anónimo PL/Python" -#: plpy_resultobject.c:119 plpy_resultobject.c:145 plpy_resultobject.c:171 +#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169 #, c-format msgid "command did not produce a result set" msgstr "la orden no produjo un conjunto de resultados" @@ -333,22 +333,22 @@ msgstr "falló SPI_execute_plan: %s" msgid "SPI_execute failed: %s" msgstr "falló SPI_execute: %s" -#: plpy_subxactobject.c:93 +#: plpy_subxactobject.c:92 #, c-format msgid "this subtransaction has already been entered" msgstr "ya se ha entrado en esta subtransacción" -#: plpy_subxactobject.c:99 plpy_subxactobject.c:157 +#: plpy_subxactobject.c:98 plpy_subxactobject.c:156 #, c-format msgid "this subtransaction has already been exited" msgstr "ya se ha salido de esta subtransacción" -#: plpy_subxactobject.c:151 +#: plpy_subxactobject.c:150 #, c-format msgid "this subtransaction has not been entered" msgstr "no se ha entrado en esta subtransacción" -#: plpy_subxactobject.c:163 +#: plpy_subxactobject.c:162 #, c-format msgid "there is no subtransaction to exit from" msgstr "no hay una subtransacción de la cual salir" diff --git a/src/pl/plpython/po/ru.po b/src/pl/plpython/po/ru.po index 6978a651d977a..93d229997b744 100644 --- a/src/pl/plpython/po/ru.po +++ b/src/pl/plpython/po/ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: plpython (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-09 12:21+0300\n" +"POT-Creation-Date: 2020-09-03 11:22+0300\n" "PO-Revision-Date: 2019-08-29 15:42+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -17,22 +17,22 @@ msgstr "" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#: plpy_cursorobject.c:78 +#: plpy_cursorobject.c:72 #, c-format msgid "plpy.cursor expected a query or a plan" msgstr "plpy.cursor ожидает запрос или план" -#: plpy_cursorobject.c:161 +#: plpy_cursorobject.c:155 #, c-format msgid "plpy.cursor takes a sequence as its second argument" msgstr "plpy.cursor принимает в качестве второго аргумента последовательность" -#: plpy_cursorobject.c:177 plpy_spi.c:211 +#: plpy_cursorobject.c:171 plpy_spi.c:207 #, c-format msgid "could not execute plan" msgstr "нельзя выполнить план" -#: plpy_cursorobject.c:180 plpy_spi.c:214 +#: plpy_cursorobject.c:174 plpy_spi.c:210 #, c-format msgid "Expected sequence of %d argument, got %d: %s" msgid_plural "Expected sequence of %d arguments, got %d: %s" @@ -40,43 +40,43 @@ msgstr[0] "Ожидалась последовательность из %d ар msgstr[1] "Ожидалась последовательность из %d аргументов, получено %d: %s" msgstr[2] "Ожидалась последовательность из %d аргументов, получено %d: %s" -#: plpy_cursorobject.c:329 +#: plpy_cursorobject.c:321 #, c-format msgid "iterating a closed cursor" msgstr "перемещение закрытого курсора" -#: plpy_cursorobject.c:337 plpy_cursorobject.c:403 +#: plpy_cursorobject.c:329 plpy_cursorobject.c:395 #, c-format msgid "iterating a cursor in an aborted subtransaction" msgstr "перемещение курсора в прерванной подтранзакции" -#: plpy_cursorobject.c:395 +#: plpy_cursorobject.c:387 #, c-format msgid "fetch from a closed cursor" msgstr "выборка из закрытого курсора" -#: plpy_cursorobject.c:438 plpy_spi.c:409 +#: plpy_cursorobject.c:430 plpy_spi.c:403 #, c-format msgid "query result has too many rows to fit in a Python list" msgstr "" "результат запроса содержит слишком много строк для передачи в списке Python" -#: plpy_cursorobject.c:490 +#: plpy_cursorobject.c:482 #, c-format msgid "closing a cursor in an aborted subtransaction" msgstr "закрытие курсора в прерванной подтранзакции" -#: plpy_elog.c:129 plpy_elog.c:130 plpy_plpymodule.c:553 +#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:549 #, c-format msgid "%s" msgstr "%s" -#: plpy_exec.c:143 +#: plpy_exec.c:139 #, c-format msgid "unsupported set function return mode" msgstr "неподдерживаемый режим возврата для функции с результатом-множеством" -#: plpy_exec.c:144 +#: plpy_exec.c:140 #, c-format msgid "" "PL/Python set-returning functions only support returning one value per call." @@ -84,44 +84,44 @@ msgstr "" "Функции PL/Python с результатом-множеством могут возвращать только одно " "значение за вызов." -#: plpy_exec.c:157 +#: plpy_exec.c:153 #, c-format msgid "returned object cannot be iterated" msgstr "возвращаемый объект не поддерживает итерации" -#: plpy_exec.c:158 +#: plpy_exec.c:154 #, c-format msgid "PL/Python set-returning functions must return an iterable object." msgstr "" "Функции PL/Python с результатом-множеством должны возвращать объекты с " "возможностью итерации." -#: plpy_exec.c:172 +#: plpy_exec.c:168 #, c-format msgid "error fetching next item from iterator" msgstr "ошибка получения следующего элемента из итератора" -#: plpy_exec.c:215 +#: plpy_exec.c:211 #, c-format msgid "PL/Python procedure did not return None" msgstr "процедура PL/Python вернула не None" -#: plpy_exec.c:219 +#: plpy_exec.c:215 #, c-format msgid "PL/Python function with return type \"void\" did not return None" msgstr "функция PL/Python с типом результата \"void\" вернула не None" -#: plpy_exec.c:375 plpy_exec.c:401 +#: plpy_exec.c:371 plpy_exec.c:397 #, c-format msgid "unexpected return value from trigger procedure" msgstr "триггерная процедура вернула недопустимое значение" -#: plpy_exec.c:376 +#: plpy_exec.c:372 #, c-format msgid "Expected None or a string." msgstr "Ожидалось None или строка." -#: plpy_exec.c:391 +#: plpy_exec.c:387 #, c-format msgid "" "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored" @@ -129,49 +129,49 @@ msgstr "" "триггерная функция PL/Python вернула \"MODIFY\" в триггере DELETE -- " "игнорируется" -#: plpy_exec.c:402 +#: plpy_exec.c:398 #, c-format msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"." msgstr "Ожидалось None, \"OK\", \"SKIP\" или \"MODIFY\"." -#: plpy_exec.c:452 +#: plpy_exec.c:443 #, c-format msgid "PyList_SetItem() failed, while setting up arguments" msgstr "ошибка в PyList_SetItem() при настройке аргументов" -#: plpy_exec.c:456 +#: plpy_exec.c:447 #, c-format msgid "PyDict_SetItemString() failed, while setting up arguments" msgstr "ошибка в PyDict_SetItemString() при настройке аргументов" -#: plpy_exec.c:468 +#: plpy_exec.c:459 #, c-format msgid "" "function returning record called in context that cannot accept type record" msgstr "" "функция, возвращающая запись, вызвана в контексте, не допускающем этот тип" -#: plpy_exec.c:685 +#: plpy_exec.c:676 #, c-format msgid "while creating return value" msgstr "при создании возвращаемого значения" -#: plpy_exec.c:919 +#: plpy_exec.c:910 #, c-format msgid "TD[\"new\"] deleted, cannot modify row" msgstr "элемент TD[\"new\"] удалён -- изменить строку нельзя" -#: plpy_exec.c:924 +#: plpy_exec.c:915 #, c-format msgid "TD[\"new\"] is not a dictionary" msgstr "TD[\"new\"] - не словарь" -#: plpy_exec.c:951 +#: plpy_exec.c:942 #, c-format msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string" msgstr "ключ словаря TD[\"new\"] с порядковым номером %d не является строкой" -#: plpy_exec.c:958 +#: plpy_exec.c:949 #, c-format msgid "" "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering " @@ -180,216 +180,216 @@ msgstr "" "ключу \"%s\", найденному в TD[\"new\"], не соответствует столбец в строке, " "обрабатываемой триггером" -#: plpy_exec.c:963 +#: plpy_exec.c:954 #, c-format msgid "cannot set system attribute \"%s\"" msgstr "присвоить значение системному атрибуту \"%s\" нельзя" -#: plpy_exec.c:968 +#: plpy_exec.c:959 #, c-format msgid "cannot set generated column \"%s\"" msgstr "присвоить значение генерируемому столбцу \"%s\" нельзя" -#: plpy_exec.c:1026 +#: plpy_exec.c:1017 #, c-format msgid "while modifying trigger row" msgstr "при изменении строки в триггере" -#: plpy_exec.c:1087 +#: plpy_exec.c:1075 #, c-format msgid "forcibly aborting a subtransaction that has not been exited" msgstr "принудительное прерывание незавершённой подтранзакции" -#: plpy_main.c:125 +#: plpy_main.c:121 #, c-format msgid "multiple Python libraries are present in session" msgstr "в сеансе представлено несколько библиотек Python" -#: plpy_main.c:126 +#: plpy_main.c:122 #, c-format msgid "Only one Python major version can be used in one session." msgstr "В одном сеансе нельзя использовать Python разных старших версий." -#: plpy_main.c:142 +#: plpy_main.c:138 #, c-format msgid "untrapped error in initialization" msgstr "необработанная ошибка при инициализации" -#: plpy_main.c:165 +#: plpy_main.c:161 #, c-format msgid "could not import \"__main__\" module" msgstr "не удалось импортировать модуль \"__main__\"" -#: plpy_main.c:174 +#: plpy_main.c:170 #, c-format msgid "could not initialize globals" msgstr "не удалось инициализировать глобальные данные" -#: plpy_main.c:399 +#: plpy_main.c:393 #, c-format msgid "PL/Python procedure \"%s\"" msgstr "процедура PL/Python \"%s\"" -#: plpy_main.c:402 +#: plpy_main.c:396 #, c-format msgid "PL/Python function \"%s\"" msgstr "функция PL/Python \"%s\"" -#: plpy_main.c:410 +#: plpy_main.c:404 #, c-format msgid "PL/Python anonymous code block" msgstr "анонимный блок кода PL/Python" -#: plpy_plpymodule.c:186 plpy_plpymodule.c:189 +#: plpy_plpymodule.c:182 plpy_plpymodule.c:185 #, c-format msgid "could not import \"plpy\" module" msgstr "не удалось импортировать модуль \"plpy\"" -#: plpy_plpymodule.c:204 +#: plpy_plpymodule.c:200 #, c-format msgid "could not create the spiexceptions module" msgstr "не удалось создать модуль spiexceptions" -#: plpy_plpymodule.c:212 +#: plpy_plpymodule.c:208 #, c-format msgid "could not add the spiexceptions module" msgstr "не удалось добавить модуль spiexceptions" -#: plpy_plpymodule.c:280 +#: plpy_plpymodule.c:276 #, c-format msgid "could not generate SPI exceptions" msgstr "не удалось сгенерировать исключения SPI" -#: plpy_plpymodule.c:448 +#: plpy_plpymodule.c:444 #, c-format msgid "could not unpack arguments in plpy.elog" msgstr "не удалось распаковать аргументы в plpy.elog" -#: plpy_plpymodule.c:457 +#: plpy_plpymodule.c:453 msgid "could not parse error message in plpy.elog" msgstr "не удалось разобрать сообщение об ошибке в plpy.elog" -#: plpy_plpymodule.c:474 +#: plpy_plpymodule.c:470 #, c-format msgid "argument 'message' given by name and position" msgstr "аргумент 'message' задан и по имени, и по позиции" -#: plpy_plpymodule.c:501 +#: plpy_plpymodule.c:497 #, c-format msgid "'%s' is an invalid keyword argument for this function" msgstr "'%s' - недопустимое ключевое слово (аргумент) для этой функции" -#: plpy_plpymodule.c:512 plpy_plpymodule.c:518 +#: plpy_plpymodule.c:508 plpy_plpymodule.c:514 #, c-format msgid "invalid SQLSTATE code" msgstr "неверный код SQLSTATE" -#: plpy_procedure.c:230 +#: plpy_procedure.c:226 #, c-format msgid "trigger functions can only be called as triggers" msgstr "триггерные функции могут вызываться только в триггерах" -#: plpy_procedure.c:234 +#: plpy_procedure.c:230 #, c-format msgid "PL/Python functions cannot return type %s" msgstr "функции PL/Python не могут возвращать тип %s" -#: plpy_procedure.c:312 +#: plpy_procedure.c:308 #, c-format msgid "PL/Python functions cannot accept type %s" msgstr "функции PL/Python не могут принимать тип %s" -#: plpy_procedure.c:402 +#: plpy_procedure.c:398 #, c-format msgid "could not compile PL/Python function \"%s\"" msgstr "не удалось скомпилировать функцию PL/Python \"%s\"" -#: plpy_procedure.c:405 +#: plpy_procedure.c:401 #, c-format msgid "could not compile anonymous PL/Python code block" msgstr "не удалось скомпилировать анонимный блок кода PL/Python" -#: plpy_resultobject.c:121 plpy_resultobject.c:147 plpy_resultobject.c:173 +#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169 #, c-format msgid "command did not produce a result set" msgstr "команда не выдала результирующий набор" -#: plpy_spi.c:60 +#: plpy_spi.c:56 #, c-format msgid "second argument of plpy.prepare must be a sequence" msgstr "вторым аргументом plpy.prepare должна быть последовательность" -#: plpy_spi.c:104 +#: plpy_spi.c:100 #, c-format msgid "plpy.prepare: type name at ordinal position %d is not a string" msgstr "plpy.prepare: имя типа с порядковым номером %d не является строкой" -#: plpy_spi.c:176 +#: plpy_spi.c:172 #, c-format msgid "plpy.execute expected a query or a plan" msgstr "plpy.execute ожидает запрос или план" -#: plpy_spi.c:195 +#: plpy_spi.c:191 #, c-format msgid "plpy.execute takes a sequence as its second argument" msgstr "plpy.execute принимает в качестве второго аргумента последовательность" -#: plpy_spi.c:305 +#: plpy_spi.c:299 #, c-format msgid "SPI_execute_plan failed: %s" msgstr "ошибка в SPI_execute_plan: %s" -#: plpy_spi.c:347 +#: plpy_spi.c:341 #, c-format msgid "SPI_execute failed: %s" msgstr "ошибка в SPI_execute: %s" -#: plpy_subxactobject.c:97 +#: plpy_subxactobject.c:92 #, c-format msgid "this subtransaction has already been entered" msgstr "эта подтранзакция уже начата" -#: plpy_subxactobject.c:103 plpy_subxactobject.c:161 +#: plpy_subxactobject.c:98 plpy_subxactobject.c:156 #, c-format msgid "this subtransaction has already been exited" msgstr "эта подтранзакция уже закончена" -#: plpy_subxactobject.c:155 +#: plpy_subxactobject.c:150 #, c-format msgid "this subtransaction has not been entered" msgstr "эта подтранзакция ещё не начата" -#: plpy_subxactobject.c:167 +#: plpy_subxactobject.c:162 #, c-format msgid "there is no subtransaction to exit from" msgstr "нет подтранзакции, которую нужно закончить" -#: plpy_typeio.c:591 +#: plpy_typeio.c:587 #, c-format msgid "could not import a module for Decimal constructor" msgstr "не удалось импортировать модуль для конструктора Decimal" -#: plpy_typeio.c:595 +#: plpy_typeio.c:591 #, c-format msgid "no Decimal attribute in module" msgstr "в модуле нет атрибута Decimal" -#: plpy_typeio.c:601 +#: plpy_typeio.c:597 #, c-format msgid "conversion from numeric to Decimal failed" msgstr "не удалось преобразовать numeric в Decimal" -#: plpy_typeio.c:915 +#: plpy_typeio.c:911 #, c-format msgid "could not create bytes representation of Python object" msgstr "не удалось создать байтовое представление объекта Python" -#: plpy_typeio.c:1063 +#: plpy_typeio.c:1056 #, c-format msgid "could not create string representation of Python object" msgstr "не удалось создать строковое представление объекта Python" -#: plpy_typeio.c:1074 +#: plpy_typeio.c:1067 #, c-format msgid "" "could not convert Python object into cstring: Python string representation " @@ -398,24 +398,24 @@ msgstr "" "не удалось преобразовать объект Python в cstring: похоже, представление " "строки Python содержит нулевые байты" -#: plpy_typeio.c:1183 +#: plpy_typeio.c:1176 #, c-format msgid "number of array dimensions exceeds the maximum allowed (%d)" msgstr "число размерностей массива превышает предел (%d)" -#: plpy_typeio.c:1187 +#: plpy_typeio.c:1180 #, c-format msgid "could not determine sequence length for function return value" msgstr "" "не удалось определить длину последовательности в возвращаемом функцией " "значении" -#: plpy_typeio.c:1190 plpy_typeio.c:1194 +#: plpy_typeio.c:1183 plpy_typeio.c:1187 #, c-format msgid "array size exceeds the maximum allowed" msgstr "размер массива превышает предел" -#: plpy_typeio.c:1220 +#: plpy_typeio.c:1213 #, c-format msgid "" "return value of function with array return type is not a Python sequence" @@ -423,12 +423,12 @@ msgstr "" "возвращаемое значение функции с результатом-массивом не является " "последовательностью" -#: plpy_typeio.c:1266 +#: plpy_typeio.c:1259 #, c-format msgid "wrong length of inner sequence: has length %d, but %d was expected" msgstr "неверная длина внутренней последовательности: %d (ожидалось: %d)" -#: plpy_typeio.c:1268 +#: plpy_typeio.c:1261 #, c-format msgid "" "To construct a multidimensional array, the inner sequences must all have the " @@ -437,17 +437,17 @@ msgstr "" "Для образования многомерного массива внутренние последовательности должны " "иметь одинаковую длину." -#: plpy_typeio.c:1347 +#: plpy_typeio.c:1340 #, c-format msgid "malformed record literal: \"%s\"" msgstr "ошибка в литерале записи: \"%s\"" -#: plpy_typeio.c:1348 +#: plpy_typeio.c:1341 #, c-format msgid "Missing left parenthesis." msgstr "Отсутствует левая скобка." -#: plpy_typeio.c:1349 plpy_typeio.c:1550 +#: plpy_typeio.c:1342 plpy_typeio.c:1543 #, c-format msgid "" "To return a composite type in an array, return the composite type as a " @@ -456,12 +456,12 @@ msgstr "" "Чтобы возвратить составной тип в массиве, нужно возвратить составное " "значение в виде кортежа Python, например: \"[('foo',)]\"." -#: plpy_typeio.c:1396 +#: plpy_typeio.c:1389 #, c-format msgid "key \"%s\" not found in mapping" msgstr "ключ \"%s\" не найден в сопоставлении" -#: plpy_typeio.c:1397 +#: plpy_typeio.c:1390 #, c-format msgid "" "To return null in a column, add the value None to the mapping with the key " @@ -470,17 +470,17 @@ msgstr "" "Чтобы присвоить столбцу NULL, добавьте в сопоставление значение None с " "ключом-именем столбца." -#: plpy_typeio.c:1450 +#: plpy_typeio.c:1443 #, c-format msgid "length of returned sequence did not match number of columns in row" msgstr "длина возвращённой последовательности не равна числу столбцов в строке" -#: plpy_typeio.c:1548 +#: plpy_typeio.c:1541 #, c-format msgid "attribute \"%s\" does not exist in Python object" msgstr "в объекте Python не существует атрибут \"%s\"" -#: plpy_typeio.c:1551 +#: plpy_typeio.c:1544 #, c-format msgid "" "To return null in a column, let the returned object have an attribute named " @@ -489,12 +489,12 @@ msgstr "" "Чтобы присвоить столбцу NULL, присвойте возвращаемому значению атрибут с " "именем столбца и значением None." -#: plpy_util.c:35 +#: plpy_util.c:31 #, c-format msgid "could not convert Python Unicode object to bytes" msgstr "не удалось преобразовать объект Python Unicode в байты" -#: plpy_util.c:41 +#: plpy_util.c:37 #, c-format msgid "could not extract bytes from encoded string" msgstr "не удалось извлечь байты из кодированной строки" diff --git a/src/pl/plpython/po/uk.po b/src/pl/plpython/po/uk.po index 680fef6cb78da..d20c9a0d8eafa 100644 --- a/src/pl/plpython/po/uk.po +++ b/src/pl/plpython/po/uk.po @@ -1,37 +1,38 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2018-12-05 10:35+0100\n" -"PO-Revision-Date: 2019-07-11 16:30\n" -"Last-Translator: pasha_golub\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:08+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_11_STABLE/src/pl/plpython/po/plpython.pot\n" +"X-Crowdin-File: /DEV_13/plpython.pot\n" +"X-Crowdin-File-ID: 520\n" -#: plpy_cursorobject.c:101 +#: plpy_cursorobject.c:72 #, c-format msgid "plpy.cursor expected a query or a plan" msgstr "plpy.cursor очікував запит або план" -#: plpy_cursorobject.c:184 +#: plpy_cursorobject.c:155 #, c-format msgid "plpy.cursor takes a sequence as its second argument" msgstr "plpy.сursor приймає як другий аргумент послідовність" -#: plpy_cursorobject.c:200 plpy_spi.c:211 +#: plpy_cursorobject.c:171 plpy_spi.c:207 #, c-format msgid "could not execute plan" msgstr "не вдалося виконати план" -#: plpy_cursorobject.c:203 plpy_spi.c:214 +#: plpy_cursorobject.c:174 plpy_spi.c:210 #, c-format msgid "Expected sequence of %d argument, got %d: %s" msgid_plural "Expected sequence of %d arguments, got %d: %s" @@ -40,326 +41,331 @@ msgstr[1] "Очікувалась послідовність %d аргумент msgstr[2] "Очікувалась послідовність %d аргументів, отримано %d: %s" msgstr[3] "Очікувалась послідовність %d аргумента, отримано %d: %s" -#: plpy_cursorobject.c:352 +#: plpy_cursorobject.c:321 #, c-format msgid "iterating a closed cursor" msgstr "ітерація закритого курсора" -#: plpy_cursorobject.c:360 plpy_cursorobject.c:426 +#: plpy_cursorobject.c:329 plpy_cursorobject.c:395 #, c-format msgid "iterating a cursor in an aborted subtransaction" msgstr "ітерація курсора в перерваній субтранзакції" -#: plpy_cursorobject.c:418 +#: plpy_cursorobject.c:387 #, c-format msgid "fetch from a closed cursor" msgstr "витяг з закритого курсору" -#: plpy_cursorobject.c:461 plpy_spi.c:409 +#: plpy_cursorobject.c:430 plpy_spi.c:403 #, c-format msgid "query result has too many rows to fit in a Python list" msgstr "результат запиту має забагато рядків для передачі у список Python" -#: plpy_cursorobject.c:512 +#: plpy_cursorobject.c:482 #, c-format msgid "closing a cursor in an aborted subtransaction" msgstr "закриття курсора в перерваній транзакції" -#: plpy_elog.c:127 plpy_elog.c:128 plpy_plpymodule.c:559 +#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:549 #, c-format msgid "%s" msgstr "%s" -#: plpy_exec.c:142 +#: plpy_exec.c:139 #, c-format msgid "unsupported set function return mode" msgstr "режим не підтримується для функцій, що повертають набір" -#: plpy_exec.c:143 +#: plpy_exec.c:140 #, c-format msgid "PL/Python set-returning functions only support returning one value per call." msgstr "функції PL/Python підтримують лише одне значення на виклик, коли повертають набір." -#: plpy_exec.c:156 +#: plpy_exec.c:153 #, c-format msgid "returned object cannot be iterated" msgstr "повернутий об'єкт не підтримує ітерації" -#: plpy_exec.c:157 +#: plpy_exec.c:154 #, c-format msgid "PL/Python set-returning functions must return an iterable object." msgstr "функції PL/Python повинні повертати об'єкт з підтримкою ітерації, коли повертають набір." -#: plpy_exec.c:171 +#: plpy_exec.c:168 #, c-format msgid "error fetching next item from iterator" msgstr "помилка отримання наступного елемента від ітератора" -#: plpy_exec.c:214 +#: plpy_exec.c:211 #, c-format msgid "PL/Python procedure did not return None" msgstr "процедура PL/Python не повернула None" -#: plpy_exec.c:218 +#: plpy_exec.c:215 #, c-format msgid "PL/Python function with return type \"void\" did not return None" msgstr "PL/Python функція з типом результату \"void\" не повернули None" -#: plpy_exec.c:374 plpy_exec.c:400 +#: plpy_exec.c:371 plpy_exec.c:397 #, c-format msgid "unexpected return value from trigger procedure" msgstr "неочікуване значення процедури тригера" -#: plpy_exec.c:375 +#: plpy_exec.c:372 #, c-format msgid "Expected None or a string." msgstr "Очікувалось None або рядок." -#: plpy_exec.c:390 +#: plpy_exec.c:387 #, c-format msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored" msgstr "Тригерна функція PL/Python повернула \"MODIFY\" в тригері DELETE -- проігноровано" -#: plpy_exec.c:401 +#: plpy_exec.c:398 #, c-format msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"." msgstr "Очікувалось None, \"OK\", \"SKIP\" або \"MODIFY\"." -#: plpy_exec.c:451 +#: plpy_exec.c:443 #, c-format msgid "PyList_SetItem() failed, while setting up arguments" msgstr "помилка PyList_SetItem() під час встановлення параметрів" -#: plpy_exec.c:455 +#: plpy_exec.c:447 #, c-format msgid "PyDict_SetItemString() failed, while setting up arguments" msgstr "помилка PyDict_SetItemString() під час встановлення параметрів" -#: plpy_exec.c:467 +#: plpy_exec.c:459 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "функція, що повертає набір, викликана у контексті, що не приймає тип запис" -#: plpy_exec.c:684 +#: plpy_exec.c:676 #, c-format msgid "while creating return value" msgstr "під час створення значення результату" -#: plpy_exec.c:909 +#: plpy_exec.c:910 #, c-format msgid "TD[\"new\"] deleted, cannot modify row" msgstr "TD[\"new\"] видалено, неможливо змінити рядок" -#: plpy_exec.c:914 +#: plpy_exec.c:915 #, c-format msgid "TD[\"new\"] is not a dictionary" msgstr "TD[\"new\"] не є словником" -#: plpy_exec.c:941 +#: plpy_exec.c:942 #, c-format msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string" msgstr "ключ словника TD[\"new\"] на порядковий позиції %d не є рядком" -#: plpy_exec.c:948 +#: plpy_exec.c:949 #, c-format msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row" msgstr "ключ \"%s\" знайдений у TD[\"new\"] не існує як стовпець у рядку тригера" -#: plpy_exec.c:953 +#: plpy_exec.c:954 #, c-format msgid "cannot set system attribute \"%s\"" msgstr "не вдалося встановити системний атрибут \"%s\"" -#: plpy_exec.c:1011 +#: plpy_exec.c:959 +#, c-format +msgid "cannot set generated column \"%s\"" +msgstr "неможливо оновити згенерований стовпець \"%s\"" + +#: plpy_exec.c:1017 #, c-format msgid "while modifying trigger row" msgstr "під час зміни рядка тригера" -#: plpy_exec.c:1072 +#: plpy_exec.c:1075 #, c-format msgid "forcibly aborting a subtransaction that has not been exited" msgstr "примусове переривання субтранзакції, яка не вийшла" -#: plpy_main.c:125 +#: plpy_main.c:121 #, c-format msgid "multiple Python libraries are present in session" msgstr "декілька бібліотек Python присутні у сесії" -#: plpy_main.c:126 +#: plpy_main.c:122 #, c-format msgid "Only one Python major version can be used in one session." msgstr "За один сеанс може використовуватися лише одна основна версія Python." -#: plpy_main.c:142 +#: plpy_main.c:138 #, c-format msgid "untrapped error in initialization" msgstr "неопрацьована помилка під час ініціалізації" -#: plpy_main.c:165 +#: plpy_main.c:161 #, c-format msgid "could not import \"__main__\" module" msgstr "не вдалося імпортувати \"__main__\" модуль" -#: plpy_main.c:174 +#: plpy_main.c:170 #, c-format msgid "could not initialize globals" msgstr "не вдалося ініціалізувати globals" -#: plpy_main.c:399 +#: plpy_main.c:393 #, c-format msgid "PL/Python procedure \"%s\"" msgstr "PL/Python процедура \"%s\"" -#: plpy_main.c:402 +#: plpy_main.c:396 #, c-format msgid "PL/Python function \"%s\"" msgstr "PL/Python функція \"%s\"" -#: plpy_main.c:410 +#: plpy_main.c:404 #, c-format msgid "PL/Python anonymous code block" msgstr "анонімні коди блоку PL/Python" -#: plpy_plpymodule.c:192 plpy_plpymodule.c:195 +#: plpy_plpymodule.c:182 plpy_plpymodule.c:185 #, c-format msgid "could not import \"plpy\" module" msgstr "не вдалося імпортувати \"plpy\" модуль" -#: plpy_plpymodule.c:210 +#: plpy_plpymodule.c:200 #, c-format msgid "could not create the spiexceptions module" msgstr "не вдалося створити spiexceptions модуль" -#: plpy_plpymodule.c:218 +#: plpy_plpymodule.c:208 #, c-format msgid "could not add the spiexceptions module" msgstr "не вдалося додати spiexceptions модуль" -#: plpy_plpymodule.c:286 +#: plpy_plpymodule.c:276 #, c-format msgid "could not generate SPI exceptions" msgstr "не вдається створити винятки SPI" -#: plpy_plpymodule.c:454 +#: plpy_plpymodule.c:444 #, c-format msgid "could not unpack arguments in plpy.elog" msgstr "не вдалося розпакувати аргументи в plpy.elog" -#: plpy_plpymodule.c:463 +#: plpy_plpymodule.c:453 msgid "could not parse error message in plpy.elog" msgstr "не вдалося проаналізувати повідомлення про помилку в plpy.elog" -#: plpy_plpymodule.c:480 +#: plpy_plpymodule.c:470 #, c-format msgid "argument 'message' given by name and position" msgstr "аргумент 'повідомлення' виданий за ім'ям та розташуванням" -#: plpy_plpymodule.c:507 +#: plpy_plpymodule.c:497 #, c-format msgid "'%s' is an invalid keyword argument for this function" msgstr "'%s' є неприпустимим ключовим словом-аргументом для цієї функції" -#: plpy_plpymodule.c:518 plpy_plpymodule.c:524 +#: plpy_plpymodule.c:508 plpy_plpymodule.c:514 #, c-format msgid "invalid SQLSTATE code" -msgstr "невірний код SQLSTATE" +msgstr "неприпустимий код SQLSTATE" -#: plpy_procedure.c:230 +#: plpy_procedure.c:226 #, c-format msgid "trigger functions can only be called as triggers" -msgstr "тригерні функції можуть викликатися лише як тригер" +msgstr "тригер-функція може викликатися лише як тригер" -#: plpy_procedure.c:234 +#: plpy_procedure.c:230 #, c-format msgid "PL/Python functions cannot return type %s" msgstr "PL/Python функції не можуть повернути тип %s" -#: plpy_procedure.c:312 +#: plpy_procedure.c:308 #, c-format msgid "PL/Python functions cannot accept type %s" msgstr "PL/Python функції не можуть прийняти тип %s" -#: plpy_procedure.c:402 +#: plpy_procedure.c:398 #, c-format msgid "could not compile PL/Python function \"%s\"" msgstr "не вдалося скомпілювати функцію PL/Python \"%s\"" -#: plpy_procedure.c:405 +#: plpy_procedure.c:401 #, c-format msgid "could not compile anonymous PL/Python code block" msgstr "не вдалося скомпілювати анонімні коди блоку PL/Python" -#: plpy_resultobject.c:150 plpy_resultobject.c:176 plpy_resultobject.c:202 +#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169 #, c-format msgid "command did not produce a result set" msgstr "команда не створила набір результатів" -#: plpy_spi.c:60 +#: plpy_spi.c:56 #, c-format msgid "second argument of plpy.prepare must be a sequence" msgstr "другий аргумент plpy.prepare має бути послідовністю" -#: plpy_spi.c:104 +#: plpy_spi.c:100 #, c-format msgid "plpy.prepare: type name at ordinal position %d is not a string" msgstr "plpy.prepare: ім'я на порядковий позиції %d не є рядком" -#: plpy_spi.c:176 +#: plpy_spi.c:172 #, c-format msgid "plpy.execute expected a query or a plan" msgstr "plpy.execute очікував запит або план" -#: plpy_spi.c:195 +#: plpy_spi.c:191 #, c-format msgid "plpy.execute takes a sequence as its second argument" msgstr "plpy.execute приймає як другий аргумент послідовність" -#: plpy_spi.c:305 +#: plpy_spi.c:299 #, c-format msgid "SPI_execute_plan failed: %s" msgstr "SPI_execute_plan не спрацював: %s" -#: plpy_spi.c:347 +#: plpy_spi.c:341 #, c-format msgid "SPI_execute failed: %s" msgstr "SPI_execute не спрацював: %s" -#: plpy_subxactobject.c:122 +#: plpy_subxactobject.c:92 #, c-format msgid "this subtransaction has already been entered" msgstr "ця субтранзакція вже почалась" -#: plpy_subxactobject.c:128 plpy_subxactobject.c:186 +#: plpy_subxactobject.c:98 plpy_subxactobject.c:156 #, c-format msgid "this subtransaction has already been exited" msgstr "ця субтранзакція вже вийшла" -#: plpy_subxactobject.c:180 +#: plpy_subxactobject.c:150 #, c-format msgid "this subtransaction has not been entered" msgstr "ця субтранзакція ще не почалася" -#: plpy_subxactobject.c:192 +#: plpy_subxactobject.c:162 #, c-format msgid "there is no subtransaction to exit from" msgstr "немає субтранзакції, щоб з неї вийти" -#: plpy_typeio.c:591 +#: plpy_typeio.c:587 #, c-format msgid "could not import a module for Decimal constructor" msgstr "не вдалося імпортувати модуль для конструктора Decimal" -#: plpy_typeio.c:595 +#: plpy_typeio.c:591 #, c-format msgid "no Decimal attribute in module" msgstr "відсутній атрибут Decimal у модулі" -#: plpy_typeio.c:601 +#: plpy_typeio.c:597 #, c-format msgid "conversion from numeric to Decimal failed" msgstr "не вдалося виконати перетворення з numeric на Decimal" -#: plpy_typeio.c:908 +#: plpy_typeio.c:911 #, c-format msgid "could not create bytes representation of Python object" msgstr "не вдалося створити байтову репрезентацію об'єкта Python" @@ -444,12 +450,12 @@ msgstr "атрибут \"%s\" не існує в об'єкті Python" msgid "To return null in a column, let the returned object have an attribute named after column with value None." msgstr "Щоб повернути null в стовпці, результуючий об'єкт має мати атрибут з іменем стовпця зі значенням None." -#: plpy_util.c:35 +#: plpy_util.c:31 #, c-format msgid "could not convert Python Unicode object to bytes" msgstr "не вдалося конвертувати об'єкт Python Unicode в байти" -#: plpy_util.c:41 +#: plpy_util.c:37 #, c-format msgid "could not extract bytes from encoded string" msgstr "не можливо отримати байт з закодованого рядка" diff --git a/src/pl/tcl/po/es.po b/src/pl/tcl/po/es.po index d0d4e886401f2..7aa76588ee36d 100644 --- a/src/pl/tcl/po/es.po +++ b/src/pl/tcl/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: pltcl (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:38+0000\n" +"POT-Creation-Date: 2020-09-13 10:38+0000\n" "PO-Revision-Date: 2019-06-06 17:26-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/pl/tcl/po/ru.po b/src/pl/tcl/po/ru.po index 491b3713840c1..c866c071e0303 100644 --- a/src/pl/tcl/po/ru.po +++ b/src/pl/tcl/po/ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: pltcl (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-09-09 12:21+0300\n" +"POT-Creation-Date: 2020-09-03 11:22+0300\n" "PO-Revision-Date: 2019-08-29 15:43+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -17,11 +17,11 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: pltcl.c:464 +#: pltcl.c:465 msgid "PL/Tcl function to call once when pltcl is first used." msgstr "Функция на PL/Tcl, вызываемая при первом использовании pltcl." -#: pltcl.c:471 +#: pltcl.c:472 msgid "PL/TclU function to call once when pltclu is first used." msgstr "Функция на PL/TclU, вызываемая при первом использовании pltclu." @@ -41,30 +41,30 @@ msgstr "функция \"%s\" не должна иметь характерис msgid "processing %s parameter" msgstr "обработка параметра %s" -#: pltcl.c:842 +#: pltcl.c:835 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "" "функция, возвращающая множество, вызвана в контексте, где ему нет места" -#: pltcl.c:1015 +#: pltcl.c:1008 #, c-format msgid "" "function returning record called in context that cannot accept type record" msgstr "" "функция, возвращающая запись, вызвана в контексте, не допускающем этот тип" -#: pltcl.c:1299 +#: pltcl.c:1292 #, c-format msgid "could not split return value from trigger: %s" msgstr "разложить возвращаемое из триггера значение не удалось: %s" -#: pltcl.c:1379 pltcl.c:1809 +#: pltcl.c:1373 pltcl.c:1803 #, c-format msgid "%s" msgstr "%s" -#: pltcl.c:1380 +#: pltcl.c:1374 #, c-format msgid "" "%s\n" @@ -73,43 +73,43 @@ msgstr "" "%s\n" "в функции PL/Tcl \"%s\"" -#: pltcl.c:1544 +#: pltcl.c:1538 #, c-format msgid "trigger functions can only be called as triggers" msgstr "триггерные функции могут вызываться только в триггерах" -#: pltcl.c:1548 +#: pltcl.c:1542 #, c-format msgid "PL/Tcl functions cannot return type %s" msgstr "функции PL/Tcl не могут возвращать тип %s" -#: pltcl.c:1587 +#: pltcl.c:1581 #, c-format msgid "PL/Tcl functions cannot accept type %s" msgstr "функции PL/Tcl не могут принимать тип %s" -#: pltcl.c:1701 +#: pltcl.c:1695 #, c-format msgid "could not create internal procedure \"%s\": %s" msgstr "не удалось создать внутреннюю процедуру \"%s\": %s" -#: pltcl.c:3208 +#: pltcl.c:3199 #, c-format msgid "column name/value list must have even number of elements" msgstr "в списке имён/значений столбцов должно быть чётное число элементов" -#: pltcl.c:3226 +#: pltcl.c:3217 #, c-format msgid "column name/value list contains nonexistent column name \"%s\"" msgstr "" "список имён/значений столбцов содержит имя несуществующего столбца \"%s\"" -#: pltcl.c:3233 +#: pltcl.c:3224 #, c-format msgid "cannot set system attribute \"%s\"" msgstr "присвоить значение системному атрибуту \"%s\" нельзя" -#: pltcl.c:3239 +#: pltcl.c:3230 #, c-format msgid "cannot set generated column \"%s\"" msgstr "присвоить значение генерируемому столбцу \"%s\" нельзя" diff --git a/src/pl/tcl/po/uk.po b/src/pl/tcl/po/uk.po index 0b48864e86759..bea5631a50bf2 100644 --- a/src/pl/tcl/po/uk.po +++ b/src/pl/tcl/po/uk.po @@ -1,104 +1,110 @@ msgid "" msgstr "" "Project-Id-Version: postgresql\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2018-12-05 10:35+0100\n" -"PO-Revision-Date: 2019-03-01 16:07\n" -"Last-Translator: pasha_golub \n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-09-21 21:08+0000\n" +"PO-Revision-Date: 2020-09-22 13:43\n" +"Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" "X-Crowdin-Language: uk\n" -"X-Crowdin-File: /REL_11_STABLE/src/pl/tcl/po/pltcl.pot\n" +"X-Crowdin-File: /DEV_13/pltcl.pot\n" +"X-Crowdin-File-ID: 522\n" -#: pltcl.c:466 +#: pltcl.c:465 msgid "PL/Tcl function to call once when pltcl is first used." msgstr "Функція PL/Tcl використовується для виклику коли pltcl вперше використаний." -#: pltcl.c:473 +#: pltcl.c:472 msgid "PL/TclU function to call once when pltclu is first used." msgstr "Функція PL/TclU використовується для виклику коли pltclu вперше використаний." -#: pltcl.c:640 +#: pltcl.c:636 #, c-format msgid "function \"%s\" is in the wrong language" msgstr "функція «%s» написана неправильною мовою" -#: pltcl.c:651 +#: pltcl.c:647 #, c-format msgid "function \"%s\" must not be SECURITY DEFINER" msgstr "функція \"%s\" не має бути SECURITY DEFINER" #. translator: %s is "pltcl.start_proc" or "pltclu.start_proc" -#: pltcl.c:685 +#: pltcl.c:681 #, c-format msgid "processing %s parameter" msgstr "обробляється параметр %s" -#: pltcl.c:846 +#: pltcl.c:835 #, c-format msgid "set-valued function called in context that cannot accept a set" -msgstr "" +msgstr "функція \"set-valued\" викликана в контексті, де йому немає місця" -#: pltcl.c:1019 +#: pltcl.c:1008 #, c-format msgid "function returning record called in context that cannot accept type record" -msgstr "" +msgstr "функція, що повертає набір, викликана у контексті, що не приймає тип запис" -#: pltcl.c:1296 +#: pltcl.c:1292 #, c-format msgid "could not split return value from trigger: %s" msgstr "не вдалося розділити повернене значення з тригера: %s" -#: pltcl.c:1376 pltcl.c:1806 +#: pltcl.c:1373 pltcl.c:1803 #, c-format msgid "%s" msgstr "%s" -#: pltcl.c:1377 +#: pltcl.c:1374 #, c-format msgid "%s\n" "in PL/Tcl function \"%s\"" msgstr "%s\n" "у функції PL/Tcl \"%s\"" -#: pltcl.c:1541 +#: pltcl.c:1538 #, c-format msgid "trigger functions can only be called as triggers" -msgstr "функція тригер може викликатися лише як тригер" +msgstr "тригер-функція може викликатися лише як тригер" -#: pltcl.c:1545 +#: pltcl.c:1542 #, c-format msgid "PL/Tcl functions cannot return type %s" msgstr "Функції PL/Tcl не можуть повертати тип %s" -#: pltcl.c:1584 +#: pltcl.c:1581 #, c-format msgid "PL/Tcl functions cannot accept type %s" msgstr "Функції PL/Tcl не можуть приймати тип %s" -#: pltcl.c:1698 +#: pltcl.c:1695 #, c-format msgid "could not create internal procedure \"%s\": %s" msgstr "не вдалося створити внутрішню процедуру \"%s\": %s" -#: pltcl.c:3220 +#: pltcl.c:3199 #, c-format msgid "column name/value list must have even number of elements" msgstr "список імен і значень стовпців повинен мати парну кількість елементів" -#: pltcl.c:3238 +#: pltcl.c:3217 #, c-format msgid "column name/value list contains nonexistent column name \"%s\"" msgstr "список імен і значень стовпців містить неіснуєче ім'я стовпця \"%s\"" -#: pltcl.c:3245 +#: pltcl.c:3224 #, c-format msgid "cannot set system attribute \"%s\"" msgstr "не вдалося встановити системний атрибут \"%s\"" +#: pltcl.c:3230 +#, c-format +msgid "cannot set generated column \"%s\"" +msgstr "неможливо оновити згенерований стовпець \"%s\"" + From f02b9085ad2f6fefd9c5cdf85579cb9f0ff0f0ea Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 10 May 2021 10:44:38 -0400 Subject: [PATCH 274/671] Prevent integer overflows in array subscripting calculations. While we were (mostly) careful about ensuring that the dimensions of arrays aren't large enough to cause integer overflow, the lower bound values were generally not checked. This allows situations where lower_bound + dimension overflows an integer. It seems that that's harmless so far as array reading is concerned, except that array elements with subscripts notionally exceeding INT_MAX are inaccessible. However, it confuses various array-assignment logic, resulting in a potential for memory stomps. Fix by adding checks that array lower bounds aren't large enough to cause lower_bound + dimension to overflow. (Note: this results in disallowing cases where the last subscript position would be exactly INT_MAX. In principle we could probably allow that, but there's a lot of code that computes lower_bound + dimension and would need adjustment. It seems doubtful that it's worth the trouble/risk to allow it.) Somewhat independently of that, array_set_element() was careless about possible overflow when checking the subscript of a fixed-length array, creating a different route to memory stomps. Fix that too. Security: CVE-2021-32027 --- src/backend/executor/execExprInterp.c | 4 +++ src/backend/utils/adt/array_userfuncs.c | 1 + src/backend/utils/adt/arrayfuncs.c | 40 +++++++++++++++---------- src/backend/utils/adt/arrayutils.c | 31 +++++++++++++++++++ src/include/utils/array.h | 1 + 5 files changed, 61 insertions(+), 16 deletions(-) diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c index 094e22d3923a9..a9ed98ae48524 100644 --- a/src/backend/executor/execExprInterp.c +++ b/src/backend/executor/execExprInterp.c @@ -2828,6 +2828,10 @@ ExecEvalArrayExpr(ExprState *state, ExprEvalStep *op) lbs[i] = elem_lbs[i - 1]; } + /* check for subscript overflow */ + (void) ArrayGetNItems(ndims, dims); + ArrayCheckBounds(ndims, dims, lbs); + if (havenulls) { dataoffset = ARR_OVERHEAD_WITHNULLS(ndims, nitems); diff --git a/src/backend/utils/adt/array_userfuncs.c b/src/backend/utils/adt/array_userfuncs.c index a2793bfae32a9..42503525b88f5 100644 --- a/src/backend/utils/adt/array_userfuncs.c +++ b/src/backend/utils/adt/array_userfuncs.c @@ -411,6 +411,7 @@ array_cat(PG_FUNCTION_ARGS) /* Do this mainly for overflow checking */ nitems = ArrayGetNItems(ndims, dims); + ArrayCheckBounds(ndims, dims, lbs); /* build the result array */ ndatabytes = ndatabytes1 + ndatabytes2; diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index 17a16b4c5ccfa..04d487c544232 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -372,6 +372,8 @@ array_in(PG_FUNCTION_ARGS) /* This checks for overflow of the array dimensions */ nitems = ArrayGetNItems(ndim, dim); + ArrayCheckBounds(ndim, dim, lBound); + /* Empty array? */ if (nitems == 0) PG_RETURN_ARRAYTYPE_P(construct_empty_array(element_type)); @@ -1342,24 +1344,11 @@ array_recv(PG_FUNCTION_ARGS) { dim[i] = pq_getmsgint(buf, 4); lBound[i] = pq_getmsgint(buf, 4); - - /* - * Check overflow of upper bound. (ArrayGetNItems() below checks that - * dim[i] >= 0) - */ - if (dim[i] != 0) - { - int ub = lBound[i] + dim[i] - 1; - - if (lBound[i] > ub) - ereport(ERROR, - (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("integer out of range"))); - } } /* This checks for overflow of array dimensions */ nitems = ArrayGetNItems(ndim, dim); + ArrayCheckBounds(ndim, dim, lBound); /* * We arrange to look up info about element type, including its receive @@ -2265,7 +2254,7 @@ array_set_element(Datum arraydatum, (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), errmsg("wrong number of array subscripts"))); - if (indx[0] < 0 || indx[0] * elmlen >= arraytyplen) + if (indx[0] < 0 || indx[0] >= arraytyplen / elmlen) ereport(ERROR, (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), errmsg("array subscript out of range"))); @@ -2380,10 +2369,13 @@ array_set_element(Datum arraydatum, } } + /* This checks for overflow of the array dimensions */ + newnitems = ArrayGetNItems(ndim, dim); + ArrayCheckBounds(ndim, dim, lb); + /* * Compute sizes of items and areas to copy */ - newnitems = ArrayGetNItems(ndim, dim); if (newhasnulls) overheadlen = ARR_OVERHEAD_WITHNULLS(ndim, newnitems); else @@ -2641,6 +2633,13 @@ array_set_element_expanded(Datum arraydatum, } } + /* Check for overflow of the array dimensions */ + if (dimschanged) + { + (void) ArrayGetNItems(ndim, dim); + ArrayCheckBounds(ndim, dim, lb); + } + /* Now we can calculate linear offset of target item in array */ offset = ArrayGetOffset(nSubscripts, dim, lb, indx); @@ -2960,6 +2959,7 @@ array_set_slice(Datum arraydatum, /* Do this mainly to check for overflow */ nitems = ArrayGetNItems(ndim, dim); + ArrayCheckBounds(ndim, dim, lb); /* * Make sure source array has enough entries. Note we ignore the shape of @@ -3374,7 +3374,9 @@ construct_md_array(Datum *elems, errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)", ndims, MAXDIM))); + /* This checks for overflow of the array dimensions */ nelems = ArrayGetNItems(ndims, dims); + ArrayCheckBounds(ndims, dims, lbs); /* if ndims <= 0 or any dims[i] == 0, return empty array */ if (nelems <= 0) @@ -5449,6 +5451,10 @@ makeArrayResultArr(ArrayBuildStateArr *astate, int dataoffset, nbytes; + /* Check for overflow of the array dimensions */ + (void) ArrayGetNItems(astate->ndims, astate->dims); + ArrayCheckBounds(astate->ndims, astate->dims, astate->lbs); + /* Compute required space */ nbytes = astate->nbytes; if (astate->nullbitmap != NULL) @@ -5878,7 +5884,9 @@ array_fill_internal(ArrayType *dims, ArrayType *lbs, lbsv = deflbs; } + /* This checks for overflow of the array dimensions */ nitems = ArrayGetNItems(ndims, dimv); + ArrayCheckBounds(ndims, dimv, lbsv); /* fast track for empty array */ if (nitems <= 0) diff --git a/src/backend/utils/adt/arrayutils.c b/src/backend/utils/adt/arrayutils.c index 2a6a05718f8e4..6988edd93619c 100644 --- a/src/backend/utils/adt/arrayutils.c +++ b/src/backend/utils/adt/arrayutils.c @@ -16,6 +16,7 @@ #include "postgres.h" #include "catalog/pg_type.h" +#include "common/int.h" #include "utils/array.h" #include "utils/builtins.h" #include "utils/memutils.h" @@ -111,6 +112,36 @@ ArrayGetNItems(int ndim, const int *dims) return (int) ret; } +/* + * Verify sanity of proposed lower-bound values for an array + * + * The lower-bound values must not be so large as to cause overflow when + * calculating subscripts, e.g. lower bound 2147483640 with length 10 + * must be disallowed. We actually insist that dims[i] + lb[i] be + * computable without overflow, meaning that an array with last subscript + * equal to INT_MAX will be disallowed. + * + * It is assumed that the caller already called ArrayGetNItems, so that + * overflowed (negative) dims[] values have been eliminated. + */ +void +ArrayCheckBounds(int ndim, const int *dims, const int *lb) +{ + int i; + + for (i = 0; i < ndim; i++) + { + /* PG_USED_FOR_ASSERTS_ONLY prevents variable-isn't-read warnings */ + int32 sum PG_USED_FOR_ASSERTS_ONLY; + + if (pg_add_s32_overflow(dims[i], lb[i], &sum)) + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("array lower bound is too large: %d", + lb[i]))); + } +} + /* * Compute ranges (sub-array dimensions) for an array slice * diff --git a/src/include/utils/array.h b/src/include/utils/array.h index 937caf7565b02..4ae6c3be2f8b5 100644 --- a/src/include/utils/array.h +++ b/src/include/utils/array.h @@ -443,6 +443,7 @@ extern void array_free_iterator(ArrayIterator iterator); extern int ArrayGetOffset(int n, const int *dim, const int *lb, const int *indx); extern int ArrayGetOffset0(int n, const int *tup, const int *scale); extern int ArrayGetNItems(int ndim, const int *dims); +extern void ArrayCheckBounds(int ndim, const int *dims, const int *lb); extern void mda_get_range(int n, int *span, const int *st, const int *endp); extern void mda_get_prod(int n, const int *range, int *prod); extern void mda_get_offset_values(int n, int *dist, const int *prod, const int *span); From 049e1e2edb06854d7cd9460c22516efaa165fbf8 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 10 May 2021 11:02:29 -0400 Subject: [PATCH 275/671] Fix mishandling of resjunk columns in ON CONFLICT ... UPDATE tlists. It's unusual to have any resjunk columns in an ON CONFLICT ... UPDATE list, but it can happen when MULTIEXPR_SUBLINK SubPlans are present. If it happens, the ON CONFLICT UPDATE code path would end up storing tuples that include the values of the extra resjunk columns. That's fairly harmless in the short run, but if new columns are added to the table then the values would become accessible, possibly leading to malfunctions if they don't match the datatypes of the new columns. This had escaped notice through a confluence of missing sanity checks, including * There's no cross-check that a tuple presented to heap_insert or heap_update matches the table rowtype. While it's difficult to check that fully at reasonable cost, we can easily add assertions that there aren't too many columns. * The output-column-assignment cases in execExprInterp.c lacked any sanity checks on the output column numbers, which seems like an oversight considering there are plenty of assertion checks on input column numbers. Add assertions there too. * We failed to apply nodeModifyTable's ExecCheckPlanOutput() to the ON CONFLICT UPDATE tlist. That wouldn't have caught this specific error, since that function is chartered to ignore resjunk columns; but it sure seems like a bad omission now that we've seen this bug. In HEAD, the right way to fix this is to make the processing of ON CONFLICT UPDATE tlists work the same as regular UPDATE tlists now do, that is don't add "SET x = x" entries, and use ExecBuildUpdateProjection to evaluate the tlist and combine it with old values of the not-set columns. This adds a little complication to ExecBuildUpdateProjection, but allows removal of a comparable amount of now-dead code from the planner. In the back branches, the most expedient solution seems to be to (a) use an output slot for the ON CONFLICT UPDATE projection that actually matches the target table, and then (b) invent a variant of ExecBuildProjectionInfo that can be told to not store values resulting from resjunk columns, so it doesn't try to store into nonexistent columns of the output slot. (We can't simply ignore the resjunk columns altogether; they have to be evaluated for MULTIEXPR_SUBLINK to work.) This works back to v10. In 9.6, projections work much differently and we can't cheaply give them such an option. The 9.6 version of this patch works by inserting a JunkFilter when it's necessary to get rid of resjunk columns. In addition, v11 and up have the reverse problem when trying to perform ON CONFLICT UPDATE on a partitioned table. Through a further oversight, adjust_partition_tlist() discarded resjunk columns when re-ordering the ON CONFLICT UPDATE tlist to match a partition. This accidentally prevented the storing-bogus-tuples problem, but at the cost that MULTIEXPR_SUBLINK cases didn't work, typically crashing if more than one row has to be updated. Fix by preserving resjunk columns in that routine. (I failed to resist the temptation to add more assertions there too, and to do some minor code beautification.) Per report from Andres Freund. Back-patch to all supported branches. Security: CVE-2021-32028 --- src/backend/access/heap/heapam.c | 8 ++ src/backend/executor/execExpr.c | 112 +++++++++++++++------ src/backend/executor/execExprInterp.c | 10 +- src/backend/executor/execPartition.c | 123 +++++++++--------------- src/backend/executor/nodeModifyTable.c | 29 +++--- src/backend/nodes/copyfuncs.c | 1 + src/backend/nodes/outfuncs.c | 1 + src/backend/nodes/readfuncs.c | 1 + src/backend/optimizer/plan/createplan.c | 11 +++ src/backend/optimizer/prep/preptlist.c | 94 ++++-------------- src/include/executor/executor.h | 3 +- src/include/nodes/plannodes.h | 3 +- src/include/optimizer/prep.h | 2 + src/test/regress/expected/update.out | 41 +++++++- src/test/regress/sql/update.sql | 31 +++++- 15 files changed, 265 insertions(+), 205 deletions(-) diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 13396eb7f2c51..ba36da2b83c82 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -2070,6 +2070,10 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, bool all_frozen_set = false; uint8 vmstatus = 0; + /* Cheap, simplistic check that the tuple matches the rel's rowtype. */ + Assert(HeapTupleHeaderGetNatts(tup->t_data) <= + RelationGetNumberOfAttributes(relation)); + /* * Fill in tuple header fields and toast the tuple if necessary. * @@ -3255,6 +3259,10 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, Assert(ItemPointerIsValid(otid)); + /* Cheap, simplistic check that the tuple matches the rel's rowtype. */ + Assert(HeapTupleHeaderGetNatts(newtup->t_data) <= + RelationGetNumberOfAttributes(relation)); + /* * Forbid this during a parallel operation, lest it allocate a combo CID. * Other workers might need that combo CID for visibility checks, and we diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c index 77c9d785d991a..8c9f8a6aeb624 100644 --- a/src/backend/executor/execExpr.c +++ b/src/backend/executor/execExpr.c @@ -485,14 +485,21 @@ ExecBuildProjectionInfo(List *targetList, * be stored into the given tuple slot. (Caller must have ensured that tuple * slot has a descriptor matching the target rel!) * - * subTargetList is the tlist of the subplan node feeding ModifyTable. - * We use this mainly to cross-check that the expressions being assigned - * are of the correct types. The values from this tlist are assumed to be - * available from the "outer" tuple slot. They are assigned to target columns - * listed in the corresponding targetColnos elements. (Only non-resjunk tlist - * entries are assigned.) Columns not listed in targetColnos are filled from - * the UPDATE's old tuple, which is assumed to be available in the "scan" - * tuple slot. + * When evalTargetList is false, targetList contains the UPDATE ... SET + * expressions that have already been computed by a subplan node; the values + * from this tlist are assumed to be available in the "outer" tuple slot. + * When evalTargetList is true, targetList contains the UPDATE ... SET + * expressions that must be computed (which could contain references to + * the outer, inner, or scan tuple slots). + * + * In either case, targetColnos contains a list of the target column numbers + * corresponding to the non-resjunk entries of targetList. The tlist values + * are assigned into these columns of the result tuple slot. Target columns + * not listed in targetColnos are filled from the UPDATE's old tuple, which + * is assumed to be available in the "scan" tuple slot. + * + * targetList can also contain resjunk columns. These must be evaluated + * if evalTargetList is true, but their values are discarded. * * relDesc must describe the relation we intend to update. * @@ -503,7 +510,8 @@ ExecBuildProjectionInfo(List *targetList, * ExecCheckPlanOutput, so we must do our safety checks here. */ ProjectionInfo * -ExecBuildUpdateProjection(List *subTargetList, +ExecBuildUpdateProjection(List *targetList, + bool evalTargetList, List *targetColnos, TupleDesc relDesc, ExprContext *econtext, @@ -525,19 +533,22 @@ ExecBuildUpdateProjection(List *subTargetList, /* We embed ExprState into ProjectionInfo instead of doing extra palloc */ projInfo->pi_state.tag = T_ExprState; state = &projInfo->pi_state; - state->expr = NULL; /* not used */ + if (evalTargetList) + state->expr = (Expr *) targetList; + else + state->expr = NULL; /* not used */ state->parent = parent; state->ext_params = NULL; state->resultslot = slot; /* - * Examine the subplan tlist to see how many non-junk columns there are, - * and to verify that the non-junk columns come before the junk ones. + * Examine the targetList to see how many non-junk columns there are, and + * to verify that the non-junk columns come before the junk ones. */ nAssignableCols = 0; sawJunk = false; - foreach(lc, subTargetList) + foreach(lc, targetList) { TargetEntry *tle = lfirst_node(TargetEntry, lc); @@ -569,12 +580,10 @@ ExecBuildUpdateProjection(List *subTargetList, } /* - * We want to insert EEOP_*_FETCHSOME steps to ensure the outer and scan - * tuples are sufficiently deconstructed. Outer tuple is easy, but for - * scan tuple we must find out the last old column we need. + * We need to insert EEOP_*_FETCHSOME steps to ensure the input tuples are + * sufficiently deconstructed. The scan tuple must be deconstructed at + * least as far as the last old column we need. */ - deform.last_outer = nAssignableCols; - for (int attnum = relDesc->natts; attnum > 0; attnum--) { Form_pg_attribute attr = TupleDescAttr(relDesc, attnum - 1); @@ -587,15 +596,26 @@ ExecBuildUpdateProjection(List *subTargetList, break; } + /* + * If we're actually evaluating the tlist, incorporate its input + * requirements too; otherwise, we'll just need to fetch the appropriate + * number of columns of the "outer" tuple. + */ + if (evalTargetList) + get_last_attnums_walker((Node *) targetList, &deform); + else + deform.last_outer = nAssignableCols; + ExecPushExprSlots(state, &deform); /* - * Now generate code to fetch data from the outer tuple, incidentally - * validating that it'll be of the right type. The checks above ensure - * that the forboth() will iterate over exactly the non-junk columns. + * Now generate code to evaluate the tlist's assignable expressions or + * fetch them from the outer tuple, incidentally validating that they'll + * be of the right data type. The checks above ensure that the forboth() + * will iterate over exactly the non-junk columns. */ outerattnum = 0; - forboth(lc, subTargetList, lc2, targetColnos) + forboth(lc, targetList, lc2, targetColnos) { TargetEntry *tle = lfirst_node(TargetEntry, lc); AttrNumber targetattnum = lfirst_int(lc2); @@ -628,13 +648,47 @@ ExecBuildUpdateProjection(List *subTargetList, targetattnum, format_type_be(exprType((Node *) tle->expr))))); - /* - * OK, build an outer-tuple reference. - */ - scratch.opcode = EEOP_ASSIGN_OUTER_VAR; - scratch.d.assign_var.attnum = outerattnum++; - scratch.d.assign_var.resultnum = targetattnum - 1; - ExprEvalPushStep(state, &scratch); + /* OK, generate code to perform the assignment. */ + if (evalTargetList) + { + /* + * We must evaluate the TLE's expression and assign it. We do not + * bother jumping through hoops for "safe" Vars like + * ExecBuildProjectionInfo does; this is a relatively less-used + * path and it doesn't seem worth expending code for that. + */ + ExecInitExprRec(tle->expr, state, + &state->resvalue, &state->resnull); + /* Needn't worry about read-only-ness here, either. */ + scratch.opcode = EEOP_ASSIGN_TMP; + scratch.d.assign_tmp.resultnum = targetattnum - 1; + ExprEvalPushStep(state, &scratch); + } + else + { + /* Just assign from the outer tuple. */ + scratch.opcode = EEOP_ASSIGN_OUTER_VAR; + scratch.d.assign_var.attnum = outerattnum; + scratch.d.assign_var.resultnum = targetattnum - 1; + ExprEvalPushStep(state, &scratch); + } + outerattnum++; + } + + /* + * If we're evaluating the tlist, must evaluate any resjunk columns too. + * (This matters for things like MULTIEXPR_SUBLINK SubPlans.) + */ + if (evalTargetList) + { + for_each_cell(lc, targetList, lc) + { + TargetEntry *tle = lfirst_node(TargetEntry, lc); + + Assert(tle->resjunk); + ExecInitExprRec(tle->expr, state, + &state->resvalue, &state->resnull); + } } /* diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c index a9ed98ae48524..5483dee650798 100644 --- a/src/backend/executor/execExprInterp.c +++ b/src/backend/executor/execExprInterp.c @@ -626,6 +626,7 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) * care of at compilation time. But see EEOP_INNER_VAR comments. */ Assert(attnum >= 0 && attnum < innerslot->tts_nvalid); + Assert(resultnum >= 0 && resultnum < resultslot->tts_tupleDescriptor->natts); resultslot->tts_values[resultnum] = innerslot->tts_values[attnum]; resultslot->tts_isnull[resultnum] = innerslot->tts_isnull[attnum]; @@ -642,6 +643,7 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) * care of at compilation time. But see EEOP_INNER_VAR comments. */ Assert(attnum >= 0 && attnum < outerslot->tts_nvalid); + Assert(resultnum >= 0 && resultnum < resultslot->tts_tupleDescriptor->natts); resultslot->tts_values[resultnum] = outerslot->tts_values[attnum]; resultslot->tts_isnull[resultnum] = outerslot->tts_isnull[attnum]; @@ -658,6 +660,7 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) * care of at compilation time. But see EEOP_INNER_VAR comments. */ Assert(attnum >= 0 && attnum < scanslot->tts_nvalid); + Assert(resultnum >= 0 && resultnum < resultslot->tts_tupleDescriptor->natts); resultslot->tts_values[resultnum] = scanslot->tts_values[attnum]; resultslot->tts_isnull[resultnum] = scanslot->tts_isnull[attnum]; @@ -668,6 +671,7 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) { int resultnum = op->d.assign_tmp.resultnum; + Assert(resultnum >= 0 && resultnum < resultslot->tts_tupleDescriptor->natts); resultslot->tts_values[resultnum] = state->resvalue; resultslot->tts_isnull[resultnum] = state->resnull; @@ -678,6 +682,7 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) { int resultnum = op->d.assign_tmp.resultnum; + Assert(resultnum >= 0 && resultnum < resultslot->tts_tupleDescriptor->natts); resultslot->tts_isnull[resultnum] = state->resnull; if (!resultslot->tts_isnull[resultnum]) resultslot->tts_values[resultnum] = @@ -2091,8 +2096,10 @@ ExecJustAssignVarImpl(ExprState *state, TupleTableSlot *inslot, bool *isnull) * * Since we use slot_getattr(), we don't need to implement the FETCHSOME * step explicitly, and we also needn't Assert that the attnum is in range - * --- slot_getattr() will take care of any problems. + * --- slot_getattr() will take care of any problems. Nonetheless, check + * that resultnum is in range. */ + Assert(resultnum >= 0 && resultnum < outslot->tts_tupleDescriptor->natts); outslot->tts_values[resultnum] = slot_getattr(inslot, attnum, &outslot->tts_isnull[resultnum]); return 0; @@ -2224,6 +2231,7 @@ ExecJustAssignVarVirtImpl(ExprState *state, TupleTableSlot *inslot, bool *isnull Assert(TTS_IS_VIRTUAL(inslot)); Assert(TTS_FIXED(inslot)); Assert(attnum >= 0 && attnum < inslot->tts_nvalid); + Assert(resultnum >= 0 && resultnum < outslot->tts_tupleDescriptor->natts); outslot->tts_values[resultnum] = inslot->tts_values[attnum]; outslot->tts_isnull[resultnum] = inslot->tts_isnull[attnum]; diff --git a/src/backend/executor/execPartition.c b/src/backend/executor/execPartition.c index 8afddca73a0ec..8e2feafd28c33 100644 --- a/src/backend/executor/execPartition.c +++ b/src/backend/executor/execPartition.c @@ -181,7 +181,7 @@ static char *ExecBuildSlotPartitionKeyDescription(Relation rel, Datum *values, bool *isnull, int maxfieldlen); -static List *adjust_partition_tlist(List *tlist, TupleConversionMap *map); +static List *adjust_partition_colnos(List *colnos, ResultRelInfo *leaf_part_rri); static void ExecInitPruningContext(PartitionPruneContext *context, List *pruning_steps, PartitionDesc partdesc, @@ -714,6 +714,7 @@ ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, */ if (node->onConflictAction == ONCONFLICT_UPDATE) { + OnConflictSetState *onconfl = makeNode(OnConflictSetState); TupleConversionMap *map; map = leaf_part_rri->ri_RootToPartitionMap; @@ -721,14 +722,14 @@ ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, Assert(node->onConflictSet != NIL); Assert(rootResultRelInfo->ri_onConflict != NULL); - leaf_part_rri->ri_onConflict = makeNode(OnConflictSetState); + leaf_part_rri->ri_onConflict = onconfl; /* * Need a separate existing slot for each partition, as the * partition could be of a different AM, even if the tuple * descriptors match. */ - leaf_part_rri->ri_onConflict->oc_Existing = + onconfl->oc_Existing = table_slot_create(leaf_part_rri->ri_RelationDesc, &mtstate->ps.state->es_tupleTable); @@ -748,17 +749,17 @@ ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, * Projections and where clauses themselves don't store state * / are independent of the underlying storage. */ - leaf_part_rri->ri_onConflict->oc_ProjSlot = + onconfl->oc_ProjSlot = rootResultRelInfo->ri_onConflict->oc_ProjSlot; - leaf_part_rri->ri_onConflict->oc_ProjInfo = + onconfl->oc_ProjInfo = rootResultRelInfo->ri_onConflict->oc_ProjInfo; - leaf_part_rri->ri_onConflict->oc_WhereClause = + onconfl->oc_WhereClause = rootResultRelInfo->ri_onConflict->oc_WhereClause; } else { List *onconflset; - TupleDesc tupDesc; + List *onconflcols; bool found_whole_row; /* @@ -768,7 +769,7 @@ ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, * pseudo-relation (INNER_VAR), and second to handle the main * target relation (firstVarno). */ - onconflset = (List *) copyObject((Node *) node->onConflictSet); + onconflset = copyObject(node->onConflictSet); if (part_attmap == NULL) part_attmap = build_attrmap_by_name(RelationGetDescr(partrel), @@ -788,20 +789,24 @@ ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, &found_whole_row); /* We ignore the value of found_whole_row. */ - /* Finally, adjust this tlist to match the partition. */ - onconflset = adjust_partition_tlist(onconflset, map); + /* Finally, adjust the target colnos to match the partition. */ + onconflcols = adjust_partition_colnos(node->onConflictCols, + leaf_part_rri); /* create the tuple slot for the UPDATE SET projection */ - tupDesc = ExecTypeFromTL(onconflset); - leaf_part_rri->ri_onConflict->oc_ProjSlot = - ExecInitExtraTupleSlot(mtstate->ps.state, tupDesc, - &TTSOpsVirtual); + onconfl->oc_ProjSlot = + table_slot_create(partrel, + &mtstate->ps.state->es_tupleTable); /* build UPDATE SET projection state */ - leaf_part_rri->ri_onConflict->oc_ProjInfo = - ExecBuildProjectionInfo(onconflset, econtext, - leaf_part_rri->ri_onConflict->oc_ProjSlot, - &mtstate->ps, partrelDesc); + onconfl->oc_ProjInfo = + ExecBuildUpdateProjection(onconflset, + true, + onconflcols, + partrelDesc, + econtext, + onconfl->oc_ProjSlot, + &mtstate->ps); /* * If there is a WHERE clause, initialize state where it will @@ -828,7 +833,7 @@ ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, RelationGetForm(partrel)->reltype, &found_whole_row); /* We ignore the value of found_whole_row. */ - leaf_part_rri->ri_onConflict->oc_WhereClause = + onconfl->oc_WhereClause = ExecInitQual((List *) clause, &mtstate->ps); } } @@ -1421,71 +1426,35 @@ ExecBuildSlotPartitionKeyDescription(Relation rel, } /* - * adjust_partition_tlist - * Adjust the targetlist entries for a given partition to account for - * attribute differences between parent and the partition - * - * The expressions have already been fixed, but here we fix the list to make - * target resnos match the partition's attribute numbers. This results in a - * copy of the original target list in which the entries appear in resno - * order, including both the existing entries (that may have their resno - * changed in-place) and the newly added entries for columns that don't exist - * in the parent. - * - * Scribbles on the input tlist, so callers must make sure to make a copy - * before passing it to us. + * adjust_partition_colnos + * Adjust the list of UPDATE target column numbers to account for + * attribute differences between the parent and the partition. */ static List * -adjust_partition_tlist(List *tlist, TupleConversionMap *map) +adjust_partition_colnos(List *colnos, ResultRelInfo *leaf_part_rri) { - List *new_tlist = NIL; - TupleDesc tupdesc = map->outdesc; - AttrMap *attrMap = map->attrMap; - AttrNumber attrno; - - Assert(tupdesc->natts == attrMap->maplen); - for (attrno = 1; attrno <= tupdesc->natts; attrno++) - { - Form_pg_attribute att_tup = TupleDescAttr(tupdesc, attrno - 1); - TargetEntry *tle; - - if (attrMap->attnums[attrno - 1] != InvalidAttrNumber) - { - Assert(!att_tup->attisdropped); - - /* - * Use the corresponding entry from the parent's tlist, adjusting - * the resno the match the partition's attno. - */ - tle = (TargetEntry *) list_nth(tlist, attrMap->attnums[attrno - 1] - 1); - tle->resno = attrno; - } - else - { - Const *expr; + List *new_colnos = NIL; + TupleConversionMap *map = ExecGetChildToRootMap(leaf_part_rri); + AttrMap *attrMap; + ListCell *lc; - /* - * For a dropped attribute in the partition, generate a dummy - * entry with resno matching the partition's attno. - */ - Assert(att_tup->attisdropped); - expr = makeConst(INT4OID, - -1, - InvalidOid, - sizeof(int32), - (Datum) 0, - true, /* isnull */ - true /* byval */ ); - tle = makeTargetEntry((Expr *) expr, - attrno, - pstrdup(NameStr(att_tup->attname)), - false); - } + Assert(map != NULL); /* else we shouldn't be here */ + attrMap = map->attrMap; - new_tlist = lappend(new_tlist, tle); + foreach(lc, colnos) + { + AttrNumber parentattrno = lfirst_int(lc); + + if (parentattrno <= 0 || + parentattrno > attrMap->maplen || + attrMap->attnums[parentattrno - 1] == 0) + elog(ERROR, "unexpected attno %d in target column list", + parentattrno); + new_colnos = lappend_int(new_colnos, + attrMap->attnums[parentattrno - 1]); } - return new_tlist; + return new_colnos; } /*------------------------------------------------------------------------- diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index c5a2a9a054ba4..a62928ae7cea1 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -492,6 +492,7 @@ ExecInitUpdateProjection(ModifyTableState *mtstate, resultRelInfo->ri_projectNew = ExecBuildUpdateProjection(subplan->targetlist, + false, /* subplan did the evaluation */ updateColnos, relDesc, mtstate->ps.ps_ExprContext, @@ -2972,9 +2973,9 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) */ if (node->onConflictAction == ONCONFLICT_UPDATE) { + OnConflictSetState *onconfl = makeNode(OnConflictSetState); ExprContext *econtext; TupleDesc relationDesc; - TupleDesc tupDesc; /* already exists if created by RETURNING processing above */ if (mtstate->ps.ps_ExprContext == NULL) @@ -2984,10 +2985,10 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) relationDesc = resultRelInfo->ri_RelationDesc->rd_att; /* create state for DO UPDATE SET operation */ - resultRelInfo->ri_onConflict = makeNode(OnConflictSetState); + resultRelInfo->ri_onConflict = onconfl; /* initialize slot for the existing tuple */ - resultRelInfo->ri_onConflict->oc_Existing = + onconfl->oc_Existing = table_slot_create(resultRelInfo->ri_RelationDesc, &mtstate->ps.state->es_tupleTable); @@ -2997,17 +2998,19 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) * into the table, and for RETURNING processing - which may access * system attributes. */ - tupDesc = ExecTypeFromTL((List *) node->onConflictSet); - resultRelInfo->ri_onConflict->oc_ProjSlot = - ExecInitExtraTupleSlot(mtstate->ps.state, tupDesc, - table_slot_callbacks(resultRelInfo->ri_RelationDesc)); + onconfl->oc_ProjSlot = + table_slot_create(resultRelInfo->ri_RelationDesc, + &mtstate->ps.state->es_tupleTable); /* build UPDATE SET projection state */ - resultRelInfo->ri_onConflict->oc_ProjInfo = - ExecBuildProjectionInfo(node->onConflictSet, econtext, - resultRelInfo->ri_onConflict->oc_ProjSlot, - &mtstate->ps, - relationDesc); + onconfl->oc_ProjInfo = + ExecBuildUpdateProjection(node->onConflictSet, + true, + node->onConflictCols, + relationDesc, + econtext, + onconfl->oc_ProjSlot, + &mtstate->ps); /* initialize state to evaluate the WHERE clause, if any */ if (node->onConflictWhere) @@ -3016,7 +3019,7 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) qualexpr = ExecInitQual((List *) node->onConflictWhere, &mtstate->ps); - resultRelInfo->ri_onConflict->oc_WhereClause = qualexpr; + onconfl->oc_WhereClause = qualexpr; } } diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index f5a7760740f56..90770a89b0b66 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -217,6 +217,7 @@ _copyModifyTable(const ModifyTable *from) COPY_SCALAR_FIELD(onConflictAction); COPY_NODE_FIELD(arbiterIndexes); COPY_NODE_FIELD(onConflictSet); + COPY_NODE_FIELD(onConflictCols); COPY_NODE_FIELD(onConflictWhere); COPY_SCALAR_FIELD(exclRelRTI); COPY_NODE_FIELD(exclRelTlist); diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index c723f6d635f4f..8da8b14f0e56d 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -418,6 +418,7 @@ _outModifyTable(StringInfo str, const ModifyTable *node) WRITE_ENUM_FIELD(onConflictAction, OnConflictAction); WRITE_NODE_FIELD(arbiterIndexes); WRITE_NODE_FIELD(onConflictSet); + WRITE_NODE_FIELD(onConflictCols); WRITE_NODE_FIELD(onConflictWhere); WRITE_UINT_FIELD(exclRelRTI); WRITE_NODE_FIELD(exclRelTlist); diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 3746668f526f0..3772ea07dfd6d 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -1697,6 +1697,7 @@ _readModifyTable(void) READ_ENUM_FIELD(onConflictAction, OnConflictAction); READ_NODE_FIELD(arbiterIndexes); READ_NODE_FIELD(onConflictSet); + READ_NODE_FIELD(onConflictCols); READ_NODE_FIELD(onConflictWhere); READ_UINT_FIELD(exclRelRTI); READ_NODE_FIELD(exclRelTlist); diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index a9aff24831470..7003238d76b16 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -34,6 +34,7 @@ #include "optimizer/placeholder.h" #include "optimizer/plancat.h" #include "optimizer/planmain.h" +#include "optimizer/prep.h" #include "optimizer/restrictinfo.h" #include "optimizer/subselect.h" #include "optimizer/tlist.h" @@ -6909,6 +6910,7 @@ make_modifytable(PlannerInfo *root, Plan *subplan, { node->onConflictAction = ONCONFLICT_NONE; node->onConflictSet = NIL; + node->onConflictCols = NIL; node->onConflictWhere = NULL; node->arbiterIndexes = NIL; node->exclRelRTI = 0; @@ -6917,7 +6919,16 @@ make_modifytable(PlannerInfo *root, Plan *subplan, else { node->onConflictAction = onconflict->action; + + /* + * Here we convert the ON CONFLICT UPDATE tlist, if any, to the + * executor's convention of having consecutive resno's. The actual + * target column numbers are saved in node->onConflictCols. (This + * could be done earlier, but there seems no need to.) + */ node->onConflictSet = onconflict->onConflictSet; + node->onConflictCols = + extract_update_targetlist_colnos(node->onConflictSet); node->onConflictWhere = onconflict->onConflictWhere; /* diff --git a/src/backend/optimizer/prep/preptlist.c b/src/backend/optimizer/prep/preptlist.c index 363132185d099..aefb6f8d4e8c3 100644 --- a/src/backend/optimizer/prep/preptlist.c +++ b/src/backend/optimizer/prep/preptlist.c @@ -46,9 +46,7 @@ #include "parser/parsetree.h" #include "utils/rel.h" -static List *extract_update_colnos(List *tlist); -static List *expand_targetlist(List *tlist, int command_type, - Index result_relation, Relation rel); +static List *expand_insert_targetlist(List *tlist, Relation rel); /* @@ -59,9 +57,6 @@ static List *expand_targetlist(List *tlist, int command_type, * Also, if this is an UPDATE, we return a list of target column numbers * in root->update_colnos. (Resnos in processed_tlist will be consecutive, * so do not look at that to find out which columns are targets!) - * - * As a side effect, if there's an ON CONFLICT UPDATE clause, its targetlist - * is also preprocessed (and updated in-place). */ void preprocess_targetlist(PlannerInfo *root) @@ -107,10 +102,9 @@ preprocess_targetlist(PlannerInfo *root) */ tlist = parse->targetList; if (command_type == CMD_INSERT) - tlist = expand_targetlist(tlist, command_type, - result_relation, target_relation); + tlist = expand_insert_targetlist(tlist, target_relation); else if (command_type == CMD_UPDATE) - root->update_colnos = extract_update_colnos(tlist); + root->update_colnos = extract_update_targetlist_colnos(tlist); /* * For non-inherited UPDATE/DELETE, register any junk column(s) needed to @@ -245,23 +239,12 @@ preprocess_targetlist(PlannerInfo *root) root->processed_tlist = tlist; - /* - * If there's an ON CONFLICT UPDATE clause, preprocess its targetlist too - * while we have the relation open. - */ - if (parse->onConflict) - parse->onConflict->onConflictSet = - expand_targetlist(parse->onConflict->onConflictSet, - CMD_UPDATE, - result_relation, - target_relation); - if (target_relation) table_close(target_relation, NoLock); } /* - * extract_update_colnos + * extract_update_targetlist_colnos * Extract a list of the target-table column numbers that * an UPDATE's targetlist wants to assign to, then renumber. * @@ -270,9 +253,12 @@ preprocess_targetlist(PlannerInfo *root) * to assign to. Here, we extract that info into a separate list, and * then convert the tlist to the sequential-numbering convention that's * used by all other query types. + * + * This is also applied to the tlist associated with INSERT ... ON CONFLICT + * ... UPDATE, although not till much later in planning. */ -static List * -extract_update_colnos(List *tlist) +List * +extract_update_targetlist_colnos(List *tlist) { List *update_colnos = NIL; AttrNumber nextresno = 1; @@ -297,18 +283,16 @@ extract_update_colnos(List *tlist) *****************************************************************************/ /* - * expand_targetlist + * expand_insert_targetlist * Given a target list as generated by the parser and a result relation, * add targetlist entries for any missing attributes, and ensure the * non-junk attributes appear in proper field order. * - * command_type is a bit of an archaism now: it's CMD_INSERT when we're - * processing an INSERT, all right, but the only other use of this function - * is for ON CONFLICT UPDATE tlists, for which command_type is CMD_UPDATE. + * Once upon a time we also did more or less this with UPDATE targetlists, + * but now this code is only applied to INSERT targetlists. */ static List * -expand_targetlist(List *tlist, int command_type, - Index result_relation, Relation rel) +expand_insert_targetlist(List *tlist, Relation rel) { List *new_tlist = NIL; ListCell *tlist_item; @@ -347,15 +331,11 @@ expand_targetlist(List *tlist, int command_type, /* * Didn't find a matching tlist entry, so make one. * - * For INSERT, generate a NULL constant. (We assume the rewriter - * would have inserted any available default value.) Also, if the - * column isn't dropped, apply any domain constraints that might - * exist --- this is to catch domain NOT NULL. - * - * For UPDATE, generate a Var reference to the existing value of - * the attribute, so that it gets copied to the new tuple. But - * generate a NULL for dropped columns (we want to drop any old - * values). + * INSERTs should insert NULL in this case. (We assume the + * rewriter would have inserted any available non-NULL default + * value.) Also, if the column isn't dropped, apply any domain + * constraints that might exist --- this is to catch domain NOT + * NULL. * * When generating a NULL constant for a dropped column, we label * it INT4 (any other guaranteed-to-exist datatype would do as @@ -367,13 +347,9 @@ expand_targetlist(List *tlist, int command_type, * relation, however. */ Oid atttype = att_tup->atttypid; - int32 atttypmod = att_tup->atttypmod; Oid attcollation = att_tup->attcollation; Node *new_expr; - switch (command_type) - { - case CMD_INSERT: if (!att_tup->attisdropped) { new_expr = (Node *) makeConst(atttype, @@ -402,35 +378,6 @@ expand_targetlist(List *tlist, int command_type, true, /* isnull */ true /* byval */ ); } - break; - case CMD_UPDATE: - if (!att_tup->attisdropped) - { - new_expr = (Node *) makeVar(result_relation, - attrno, - atttype, - atttypmod, - attcollation, - 0); - } - else - { - /* Insert NULL for dropped column */ - new_expr = (Node *) makeConst(INT4OID, - -1, - InvalidOid, - sizeof(int32), - (Datum) 0, - true, /* isnull */ - true /* byval */ ); - } - break; - default: - elog(ERROR, "unrecognized command_type: %d", - (int) command_type); - new_expr = NULL; /* keep compiler quiet */ - break; - } new_tle = makeTargetEntry((Expr *) new_expr, attrno, @@ -445,9 +392,8 @@ expand_targetlist(List *tlist, int command_type, * The remaining tlist entries should be resjunk; append them all to the * end of the new tlist, making sure they have resnos higher than the last * real attribute. (Note: although the rewriter already did such - * renumbering, we have to do it again here in case we are doing an UPDATE - * in a table with dropped columns, or an inheritance child table with - * extra columns.) + * renumbering, we have to do it again here in case we added NULL entries + * above.) */ while (tlist_item) { diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h index 6eae134c08b40..3dc03c913e3f9 100644 --- a/src/include/executor/executor.h +++ b/src/include/executor/executor.h @@ -287,7 +287,8 @@ extern ProjectionInfo *ExecBuildProjectionInfo(List *targetList, TupleTableSlot *slot, PlanState *parent, TupleDesc inputDesc); -extern ProjectionInfo *ExecBuildUpdateProjection(List *subTargetList, +extern ProjectionInfo *ExecBuildUpdateProjection(List *targetList, + bool evalTargetList, List *targetColnos, TupleDesc relDesc, ExprContext *econtext, diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h index d671328dfd66b..841401be207fe 100644 --- a/src/include/nodes/plannodes.h +++ b/src/include/nodes/plannodes.h @@ -232,7 +232,8 @@ typedef struct ModifyTable int epqParam; /* ID of Param for EvalPlanQual re-eval */ OnConflictAction onConflictAction; /* ON CONFLICT action */ List *arbiterIndexes; /* List of ON CONFLICT arbiter index OIDs */ - List *onConflictSet; /* SET for INSERT ON CONFLICT DO UPDATE */ + List *onConflictSet; /* INSERT ON CONFLICT DO UPDATE targetlist */ + List *onConflictCols; /* target column numbers for onConflictSet */ Node *onConflictWhere; /* WHERE for ON CONFLICT UPDATE */ Index exclRelRTI; /* RTI of the EXCLUDED pseudo relation */ List *exclRelTlist; /* tlist of the EXCLUDED pseudo relation */ diff --git a/src/include/optimizer/prep.h b/src/include/optimizer/prep.h index b1c4065689c16..bcd2a86166633 100644 --- a/src/include/optimizer/prep.h +++ b/src/include/optimizer/prep.h @@ -36,6 +36,8 @@ extern Relids get_relids_for_join(Query *query, int joinrelid); */ extern void preprocess_targetlist(PlannerInfo *root); +extern List *extract_update_targetlist_colnos(List *tlist); + extern PlanRowMark *get_plan_rowmark(List *rowmarks, Index rtindex); /* diff --git a/src/test/regress/expected/update.out b/src/test/regress/expected/update.out index bbf6705b656c0..c809f88f5461f 100644 --- a/src/test/regress/expected/update.out +++ b/src/test/regress/expected/update.out @@ -199,7 +199,7 @@ SELECT a, b, char_length(c) FROM update_test; (4 rows) -- Test ON CONFLICT DO UPDATE -INSERT INTO upsert_test VALUES(1, 'Boo'); +INSERT INTO upsert_test VALUES(1, 'Boo'), (3, 'Zoo'); -- uncorrelated sub-select: WITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test VALUES (1, 'Bar') ON CONFLICT(a) @@ -210,22 +210,24 @@ WITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test (1 row) -- correlated sub-select: -INSERT INTO upsert_test VALUES (1, 'Baz') ON CONFLICT(a) +INSERT INTO upsert_test VALUES (1, 'Baz'), (3, 'Zaz') ON CONFLICT(a) DO UPDATE SET (b, a) = (SELECT b || ', Correlated', a from upsert_test i WHERE i.a = upsert_test.a) RETURNING *; a | b ---+----------------- 1 | Foo, Correlated -(1 row) + 3 | Zoo, Correlated +(2 rows) -- correlated sub-select (EXCLUDED.* alias): -INSERT INTO upsert_test VALUES (1, 'Bat') ON CONFLICT(a) +INSERT INTO upsert_test VALUES (1, 'Bat'), (3, 'Zot') ON CONFLICT(a) DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a) RETURNING *; a | b ---+--------------------------- 1 | Foo, Correlated, Excluded -(1 row) + 3 | Zoo, Correlated, Excluded +(2 rows) -- ON CONFLICT using system attributes in RETURNING, testing both the -- inserting and updating paths. See bug report at: @@ -249,6 +251,35 @@ INSERT INTO upsert_test VALUES (2, 'Brox') ON CONFLICT(a) (1 row) DROP TABLE update_test; +DROP TABLE upsert_test; +-- Test ON CONFLICT DO UPDATE with partitioned table and non-identical children +CREATE TABLE upsert_test ( + a INT PRIMARY KEY, + b TEXT +) PARTITION BY LIST (a); +CREATE TABLE upsert_test_1 PARTITION OF upsert_test FOR VALUES IN (1); +CREATE TABLE upsert_test_2 (b TEXT, a INT PRIMARY KEY); +ALTER TABLE upsert_test ATTACH PARTITION upsert_test_2 FOR VALUES IN (2); +INSERT INTO upsert_test VALUES(1, 'Boo'), (2, 'Zoo'); +-- uncorrelated sub-select: +WITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test + VALUES (1, 'Bar') ON CONFLICT(a) + DO UPDATE SET (b, a) = (SELECT b, a FROM aaa) RETURNING *; + a | b +---+----- + 1 | Foo +(1 row) + +-- correlated sub-select: +WITH aaa AS (SELECT 1 AS ctea, ' Foo' AS cteb) INSERT INTO upsert_test + VALUES (1, 'Bar'), (2, 'Baz') ON CONFLICT(a) + DO UPDATE SET (b, a) = (SELECT upsert_test.b||cteb, upsert_test.a FROM aaa) RETURNING *; + a | b +---+--------- + 1 | Foo Foo + 2 | Zoo Foo +(2 rows) + DROP TABLE upsert_test; --------------------------- -- UPDATE with row movement diff --git a/src/test/regress/sql/update.sql b/src/test/regress/sql/update.sql index d0bc8e9228bac..7a7bee77b9260 100644 --- a/src/test/regress/sql/update.sql +++ b/src/test/regress/sql/update.sql @@ -100,17 +100,18 @@ UPDATE update_test t SELECT a, b, char_length(c) FROM update_test; -- Test ON CONFLICT DO UPDATE -INSERT INTO upsert_test VALUES(1, 'Boo'); + +INSERT INTO upsert_test VALUES(1, 'Boo'), (3, 'Zoo'); -- uncorrelated sub-select: WITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test VALUES (1, 'Bar') ON CONFLICT(a) DO UPDATE SET (b, a) = (SELECT b, a FROM aaa) RETURNING *; -- correlated sub-select: -INSERT INTO upsert_test VALUES (1, 'Baz') ON CONFLICT(a) +INSERT INTO upsert_test VALUES (1, 'Baz'), (3, 'Zaz') ON CONFLICT(a) DO UPDATE SET (b, a) = (SELECT b || ', Correlated', a from upsert_test i WHERE i.a = upsert_test.a) RETURNING *; -- correlated sub-select (EXCLUDED.* alias): -INSERT INTO upsert_test VALUES (1, 'Bat') ON CONFLICT(a) +INSERT INTO upsert_test VALUES (1, 'Bat'), (3, 'Zot') ON CONFLICT(a) DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a) RETURNING *; @@ -126,10 +127,32 @@ INSERT INTO upsert_test VALUES (2, 'Brox') ON CONFLICT(a) DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a) RETURNING tableoid::regclass, xmin = pg_current_xact_id()::xid AS xmin_correct, xmax = pg_current_xact_id()::xid AS xmax_correct; - DROP TABLE update_test; DROP TABLE upsert_test; +-- Test ON CONFLICT DO UPDATE with partitioned table and non-identical children + +CREATE TABLE upsert_test ( + a INT PRIMARY KEY, + b TEXT +) PARTITION BY LIST (a); + +CREATE TABLE upsert_test_1 PARTITION OF upsert_test FOR VALUES IN (1); +CREATE TABLE upsert_test_2 (b TEXT, a INT PRIMARY KEY); +ALTER TABLE upsert_test ATTACH PARTITION upsert_test_2 FOR VALUES IN (2); + +INSERT INTO upsert_test VALUES(1, 'Boo'), (2, 'Zoo'); +-- uncorrelated sub-select: +WITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test + VALUES (1, 'Bar') ON CONFLICT(a) + DO UPDATE SET (b, a) = (SELECT b, a FROM aaa) RETURNING *; +-- correlated sub-select: +WITH aaa AS (SELECT 1 AS ctea, ' Foo' AS cteb) INSERT INTO upsert_test + VALUES (1, 'Bar'), (2, 'Baz') ON CONFLICT(a) + DO UPDATE SET (b, a) = (SELECT upsert_test.b||cteb, upsert_test.a FROM aaa) RETURNING *; + +DROP TABLE upsert_test; + --------------------------- -- UPDATE with row movement From 9ca40dcd4d0cad43d95a9a253fafaa9a9ba7de24 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 11 May 2021 10:43:05 +0900 Subject: [PATCH 276/671] Add support for LZ4 build in MSVC scripts Since its introduction in bbe0a81, compression of table data supports LZ4, but nothing had been done within the MSVC scripts to allow users to build the code with this library. This commit closes the gap by extending the MSVC scripts to be able to build optionally with LZ4. Getting libraries that can be used for compilation and execution is possible as LZ4 can be compiled down to MSVC 2010 using its source tarball. MinGW may require extra efforts to be able to work, and I have been able to test this only with MSVC, still this is better than nothing to give users a way to test the feature on Windows. Author: Dilip Kumar Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/YJPdNeF68XpwDDki@paquier.xyz --- doc/src/sgml/install-windows.sgml | 10 ++++++++++ src/tools/msvc/Solution.pm | 12 ++++++++++++ src/tools/msvc/config_default.pl | 1 + 3 files changed, 23 insertions(+) diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgml index 64687b12e6733..92087dba6870e 100644 --- a/doc/src/sgml/install-windows.sgml +++ b/doc/src/sgml/install-windows.sgml @@ -304,6 +304,16 @@ $ENV{MSBFLAGS}="/m"; + + LZ4 + + Required for supporting LZ4 compression + method for compressing the table data. Binaries and source can be + downloaded from + . + + + OpenSSL diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index 459579d312f30..85af28fe0bd09 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -535,6 +535,12 @@ sub GenerateFiles $define{HAVE_LIBXSLT} = 1; $define{USE_LIBXSLT} = 1; } + if ($self->{options}->{lz4}) + { + $define{HAVE_LIBLZ4} = 1; + $define{HAVE_LZ4_H} = 1; + $define{USE_LZ4} = 1; + } if ($self->{options}->{openssl}) { $define{USE_OPENSSL} = 1; @@ -1054,6 +1060,11 @@ sub AddProject $proj->AddIncludeDir($self->{options}->{xslt} . '\include'); $proj->AddLibrary($self->{options}->{xslt} . '\lib\libxslt.lib'); } + if ($self->{options}->{lz4}) + { + $proj->AddIncludeDir($self->{options}->{lz4} . '\include'); + $proj->AddLibrary($self->{options}->{lz4} . '\lib\liblz4.lib'); + } if ($self->{options}->{uuid}) { $proj->AddIncludeDir($self->{options}->{uuid} . '\include'); @@ -1165,6 +1176,7 @@ sub GetFakeConfigure $cfg .= ' --with-uuid' if ($self->{options}->{uuid}); $cfg .= ' --with-libxml' if ($self->{options}->{xml}); $cfg .= ' --with-libxslt' if ($self->{options}->{xslt}); + $cfg .= ' --with-lz4' if ($self->{options}->{lz4}); $cfg .= ' --with-gssapi' if ($self->{options}->{gss}); $cfg .= ' --with-icu' if ($self->{options}->{icu}); $cfg .= ' --with-tcl' if ($self->{options}->{tcl}); diff --git a/src/tools/msvc/config_default.pl b/src/tools/msvc/config_default.pl index 256878f582086..460c0375d4b56 100644 --- a/src/tools/msvc/config_default.pl +++ b/src/tools/msvc/config_default.pl @@ -14,6 +14,7 @@ extraver => undef, # --with-extra-version= gss => undef, # --with-gssapi= icu => undef, # --with-icu= + lz4 => undef, # --with-lz4= nls => undef, # --enable-nls= tap_tests => undef, # --enable-tap-tests tcl => undef, # --with-tcl= From 1692d0c3a3fc7716d7d00e0d657248cb98bf4df8 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Tue, 11 May 2021 15:55:33 +1200 Subject: [PATCH 277/671] Doc: Remove outdated note about run-time partition pruning The note is no longer true as of 86dc90056, so remove it. Author: Amit Langote Discussion: https://postgr.es/m/CA+HiwqFxQn7Hz1wT+wYgnf_9SK0c4BwOOwFFT8jcSZwJrd8HEA@mail.gmail.com --- doc/src/sgml/ddl.sgml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml index 63bc946c3b625..498654876fdce 100644 --- a/doc/src/sgml/ddl.sgml +++ b/doc/src/sgml/ddl.sgml @@ -4678,16 +4678,6 @@ EXPLAIN SELECT count(*) FROM measurement WHERE logdate >= DATE '2008-01-01'; Partition pruning can be disabled using the setting. - - - - Execution-time partition pruning currently only occurs for the - Append and MergeAppend node types. - It is not yet implemented for the ModifyTable node - type, but that is likely to be changed in a future release of - PostgreSQL. - - From ff51679220ce31091bfdbc96d2e90fc02ac6f329 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 10 May 2021 23:56:32 -0400 Subject: [PATCH 278/671] doc: update PG 14 release notes based on feedback so far --- doc/src/sgml/release-14.sgml | 108 ++++++++++++++++++++--------------- 1 file changed, 62 insertions(+), 46 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 0c59fcbcd6bce..b15472bd7a9f4 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -189,16 +189,18 @@ This was already disabled by default in previous Postgres releases, and most mod -Remove containment operators @ and ~ from contrib modules cube, hstore, intarray, and seg (Justin Pryzby) +Remove deprecated containment operators @ and ~ for built-in geometric data types and contrib modules cube, hstore, intarray, and seg (Justin Pryzby) -The more consistent containment operators <@ and @> have been supported since PostgreSQL 8.2 (year 2006). +The more consistent <@ and @> have been recommended for many years. @@ -264,29 +266,27 @@ This previously was allowed but produced incorrect results. -Remove contrib program pg_standby (Justin Pryzby) +Return false for has_column_privilege() checks on non-existent or dropped columns (Joe Conway) + + + +Previously such columns returned an invalid column error. -Remove deprecated containment operators for built-in geometry data types (Justin Pryzby) - - - -The more consistent <@ and @> have been recommended for many years. +Remove contrib program pg_standby (Justin Pryzby) @@ -351,21 +351,6 @@ pg_dump and pg_upgrade will warn if post-fix operators are being dumped. - - - - -Avoid retrieval of CHECK constraints and DEFAULT exprs in data-only dump (Julien Rouhaud) - - - -IS THIS BACKWARD INCOMPATIBLE? - - - -Remove password_encryption's support for boolean values, e.g. true (Peter Eisentraut) +Limit the ways password_encryption can enable md5 hashing (Peter Eisentraut) -Previous boolean values enabled md5. Now, only the md5 string does this. +Previously on/true/yes/1 values enabled md5. Now, only the string md5 does this. @@ -463,7 +448,7 @@ Author: Alvaro Herrera --> -Improve autovacuum's analyze of partitioned tables (Yuzuko Hosoya) +Autovacuum now analyzes partitioned tables (Yuzuko Hosoya) @@ -538,7 +523,7 @@ Add long-running queries to be canceled if the client disconnects (Sergey Cherka -The server variable check_client_connection_interval allows supporting operating systems, e.g., Linux, to automatically cancel queries by disconnected clients. +The server variable client_connection_check_interval allows supporting operating systems, e.g., Linux, to automatically cancel queries by disconnected clients. @@ -555,6 +540,32 @@ Remove temporary files after backend crashes (Euler Taveira) These files were previously retained for debugging purposes; deletion can be disabled with remove_temp_files_after_crash. + + + + + + +Deallocate space reserved by trailing unused heap line pointers (Matthias van de Meent, Peter Geoghegan) + + + + + + + +Allow wide tuples to be always added to almost-empty heap pages (John Naylor, Floris van Nee) + + + +Previously tuples whose insertion would have exceeded the page's fill factor were instead added to new pages. + @@ -616,7 +627,7 @@ Remove expired btree index entries to prevent page splits (Peter Geoghegan) -This is particularly helpful for reducing index bloat on tables that frequently update indexed columns. +This is particularly helpful for reducing index bloat on tables whose indexed columns are frequently updated. @@ -757,7 +768,7 @@ Author: David Rowley --> -Add executor method to cache results from the inner-side of joins (David Rowley) +Add executor method to cache results from the inner-side of nested loop joins (David Rowley) @@ -772,7 +783,7 @@ Author: Etsuro Fujita --> -Allow multiple foreign table scans to be run in parallel (Robert Haas, Kyotaro Horiguchi, Thomas Munro, Etsuro Fujita) +Allow a query referencing multiple foreign tables to perform foreign table scans in parallel (Robert Haas, Kyotaro Horiguchi, Thomas Munro, Etsuro Fujita) @@ -817,7 +828,7 @@ Author: David Rowley --> -Improve the performance of parallel sequential scans (Thomas Munro, David Rowley) +Improve the I/O performance of parallel sequential scans (Thomas Munro, David Rowley) @@ -913,6 +924,10 @@ Author: Bruce Momjian If server variable compute_query_id is enabled, display the hash in pg_stat_activity, EXPLAIN VERBOSE, csvlog, and optionally in log_line_prefix (Julien Rouhaud) + + +A query id computed by an extension will also be displayed. + @@ -1066,7 +1081,6 @@ Add system view pg_stat_replication_slots to report replication slot activity (S Function pg_stat_reset_replication_slot() resets slot statistics. -THIS IS LOGICAL ONLY, BUT NO "LOGICAL" IN THE NAME? IS "ACTIVITY" THE RIGHT WORD? @@ -1136,7 +1150,7 @@ Author: Andrew Dunstan --> -Allow more than the common name (CN) to be matched for client certificate authentication (Andrew Dunstan) +Allow the certificate's distinguished name (DN) to be matched for client certificate authentication (Andrew Dunstan) @@ -1415,7 +1429,9 @@ Allow file system sync at the start of crash recovery on Linux (Thomas Munro) -This allows for faster recovery on systems with many database files and is enabled via recovery_init_sync_method, +By default, Postgres opens and fsyncs every data file at the start of crash recovery. +This new setting, recovery_init_sync_method=syncfs, instead syncs each filesystem used by the database cluster. +This allows for faster recovery on systems with many database files. @@ -2274,7 +2290,7 @@ Author: David Rowley --> -Allow efficient retrieval of heap rows via tid (Edmund Horner, David Rowley) +Allow efficient heap scanning of a range of tids (Edmund Horner, David Rowley) @@ -2466,7 +2482,7 @@ Author: Tom Lane --> -Make built-in type coercion functions as leakproof where possible (Tom Lane) +Mark built-in type coercion functions as leakproof where possible (Tom Lane) @@ -2711,11 +2727,11 @@ Author: Tom Lane --> -When using \e in psql, if the buffer is not modified by the editor, ignore the editor contents and leave the buffer unchanged (Laurenz Albe) +When editing the previous query or a file with psql's \e, or using \ef and \ev, ignore the contents if the editor exits without saving (Laurenz Albe) -The \ef and \ev commands also now have this behavior. DOCS SAY BUFFER IS CLEARED. +Previously, such edits would still execute the editor contents. @@ -2821,7 +2837,7 @@ Author: Alvaro Herrera --> -Improve tab completion (Vignesh C,, Michael Paquier, Justin Pryzby, Georgios Kokolatos, Julien Rouhaud, ADD NAMES) +Improve tab completion (Vignesh C, Michael Paquier, Justin Pryzby, Georgios Kokolatos, Julien Rouhaud, ADD NAMES) @@ -3127,8 +3143,8 @@ Move query hash computation from pg_stat_statements to the core server (Julien R -Extension pg_stat_statements will need to enable hash computation via the compute_query_id server variable to function properly. -pg_stat_statements can now use a custom hash computation method. +Extension pg_stat_statements will now need to enable query hash computation to function properly. +This can be done by enabling the server variable compute_query_id or by using an extension with a custom hash computation method. From 6d177e2813a2b4415539e2861b595583cc1a8f71 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 11 May 2021 09:06:49 +0200 Subject: [PATCH 279/671] Fix typo --- src/backend/parser/parse_cte.c | 2 +- src/test/regress/expected/with.out | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/parser/parse_cte.c b/src/backend/parser/parse_cte.c index f46d63d45131a..ee7613187aa63 100644 --- a/src/backend/parser/parse_cte.c +++ b/src/backend/parser/parse_cte.c @@ -524,7 +524,7 @@ analyzeCTE(ParseState *pstate, CommonTableExpr *cte) cte->cycle_clause->cycle_path_column) == 0) ereport(ERROR, errcode(ERRCODE_SYNTAX_ERROR), - errmsg("search_sequence column name and cycle path column name are the same"), + errmsg("search sequence column name and cycle path column name are the same"), parser_errposition(pstate, cte->search_clause->location)); } } diff --git a/src/test/regress/expected/with.out b/src/test/regress/expected/with.out index 0affacc19154f..584bdc6600b53 100644 --- a/src/test/regress/expected/with.out +++ b/src/test/regress/expected/with.out @@ -1253,7 +1253,7 @@ with recursive search_graph(f, t, label) as ( ) search depth first by f, t set foo cycle f, t set is_cycle to true default false using foo select * from search_graph; -ERROR: search_sequence column name and cycle path column name are the same +ERROR: search sequence column name and cycle path column name are the same LINE 7: ) search depth first by f, t set foo ^ -- test ruleutils and view expansion From 6303a5730914dfe6ef2709b28b225553315c573c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 11 May 2021 14:28:11 -0400 Subject: [PATCH 280/671] Replace opr_sanity test's binary_coercible() function with C code. opr_sanity's binary_coercible() function has always been meant to match the parser's notion of binary coercibility, but it also has always been a rather poor approximation of the parser's real rules (as embodied in IsBinaryCoercible()). That hasn't bit us so far, but it's predictable that it will eventually. It also now emerges that implementing this check in plpgsql performs absolutely horribly in clobber-cache-always testing. (Perhaps we could do something about that, but I suspect it just means that plpgsql is exploiting catalog caching to the hilt.) Hence, let's replace binary_coercible() with a C shim that directly invokes IsBinaryCoercible(), eliminating both the semantic hazard and the performance issue. Most of regress.c's C functions are declared in create_function_1, but we can't simply move that to before opr_sanity/type_sanity since those tests would complain about the resulting shell types. I chose to split it into create_function_0 and create_function_1. Since create_function_0 now runs as part of a parallel group while create_function_1 doesn't, reduce the latter to create just those functions that opr_sanity and type_sanity would whine about. To make room for create_function_0 in the second parallel group of tests, move tstypes to the third parallel group. In passing, clean up some ordering deviations between parallel_schedule and serial_schedule. Discussion: https://postgr.es/m/292305.1620503097@sss.pgh.pa.us --- src/test/regress/expected/.gitignore | 1 + src/test/regress/expected/conversion.out | 2 +- src/test/regress/expected/opr_sanity.out | 55 ----------- src/test/regress/expected/type_sanity.out | 2 +- .../regress/input/create_function_0.source | 95 +++++++++++++++++++ .../regress/input/create_function_1.source | 88 +---------------- .../regress/output/create_function_0.source | 88 +++++++++++++++++ .../regress/output/create_function_1.source | 82 +--------------- src/test/regress/parallel_schedule | 7 +- src/test/regress/regress.c | 12 +++ src/test/regress/serial_schedule | 15 +-- src/test/regress/sql/.gitignore | 1 + src/test/regress/sql/conversion.sql | 2 +- src/test/regress/sql/opr_sanity.sql | 59 ------------ src/test/regress/sql/type_sanity.sql | 2 +- 15 files changed, 216 insertions(+), 295 deletions(-) create mode 100644 src/test/regress/input/create_function_0.source create mode 100644 src/test/regress/output/create_function_0.source diff --git a/src/test/regress/expected/.gitignore b/src/test/regress/expected/.gitignore index 93c56c85a09a5..b99caf5f40b09 100644 --- a/src/test/regress/expected/.gitignore +++ b/src/test/regress/expected/.gitignore @@ -1,5 +1,6 @@ /constraints.out /copy.out +/create_function_0.out /create_function_1.out /create_function_2.out /largeobject.out diff --git a/src/test/regress/expected/conversion.out b/src/test/regress/expected/conversion.out index e34ab20974dce..04fdcba4964a5 100644 --- a/src/test/regress/expected/conversion.out +++ b/src/test/regress/expected/conversion.out @@ -41,7 +41,7 @@ DROP USER regress_conversion_user; -- Test built-in conversion functions. -- -- Helper function to test a conversion. Uses the test_enc_conversion function --- that was created in the create_function_1 test. +-- that was created in the create_function_0 test. create or replace function test_conv( input IN bytea, src_encoding IN text, diff --git a/src/test/regress/expected/opr_sanity.out b/src/test/regress/expected/opr_sanity.out index 7a0d345b608cf..562b586d8e048 100644 --- a/src/test/regress/expected/opr_sanity.out +++ b/src/test/regress/expected/opr_sanity.out @@ -16,61 +16,6 @@ -- -- NB: run this test earlier than the create_operator test, because -- that test creates some bogus operators... --- Helper functions to deal with cases where binary-coercible matches are --- allowed. --- This should match IsBinaryCoercible() in parse_coerce.c. --- It doesn't currently know about some cases, notably domains, anyelement, --- anynonarray, anyenum, or record, but it doesn't need to (yet). -create function binary_coercible(oid, oid) returns bool as $$ -begin - if $1 = $2 then return true; end if; - if EXISTS(select 1 from pg_catalog.pg_cast where - castsource = $1 and casttarget = $2 and - castmethod = 'b' and castcontext = 'i') - then return true; end if; - if $2 = 'pg_catalog.any'::pg_catalog.regtype then return true; end if; - if $2 = 'pg_catalog.anyarray'::pg_catalog.regtype then - if EXISTS(select 1 from pg_catalog.pg_type where - oid = $1 and typelem != 0 and - typsubscript = 'pg_catalog.array_subscript_handler'::pg_catalog.regproc) - then return true; end if; - end if; - if $2 = 'pg_catalog.anyrange'::pg_catalog.regtype then - if (select typtype from pg_catalog.pg_type where oid = $1) = 'r' - then return true; end if; - end if; - if $2 = 'pg_catalog.anymultirange'::pg_catalog.regtype then - if (select typtype from pg_catalog.pg_type where oid = $1) = 'm' - then return true; end if; - end if; - return false; -end -$$ language plpgsql strict stable; --- This one ignores castcontext, so it will allow cases where an explicit --- (but still binary) cast would be required to convert the input type. --- We don't currently use this for any tests in this file, but it is a --- reasonable alternative definition for some scenarios. -create function explicitly_binary_coercible(oid, oid) returns bool as $$ -begin - if $1 = $2 then return true; end if; - if EXISTS(select 1 from pg_catalog.pg_cast where - castsource = $1 and casttarget = $2 and - castmethod = 'b') - then return true; end if; - if $2 = 'pg_catalog.any'::pg_catalog.regtype then return true; end if; - if $2 = 'pg_catalog.anyarray'::pg_catalog.regtype then - if EXISTS(select 1 from pg_catalog.pg_type where - oid = $1 and typelem != 0 and - typsubscript = 'pg_catalog.array_subscript_handler'::pg_catalog.regproc) - then return true; end if; - end if; - if $2 = 'pg_catalog.anyrange'::pg_catalog.regtype then - if (select typtype from pg_catalog.pg_type where oid = $1) = 'r' - then return true; end if; - end if; - return false; -end -$$ language plpgsql strict stable; -- **************** pg_proc **************** -- Look for illegal values in pg_proc fields. SELECT p1.oid, p1.proname diff --git a/src/test/regress/expected/type_sanity.out b/src/test/regress/expected/type_sanity.out index 5480f979c65e0..f567fd378e79c 100644 --- a/src/test/regress/expected/type_sanity.out +++ b/src/test/regress/expected/type_sanity.out @@ -635,7 +635,7 @@ WHERE (rngcollation = 0) != (typcollation = 0); (0 rows) -- opclass had better be a btree opclass accepting the subtype. --- We must allow anyarray matches, cf opr_sanity's binary_coercible() +-- We must allow anyarray matches, cf IsBinaryCoercible() SELECT p1.rngtypid, p1.rngsubtype, o.opcmethod, o.opcname FROM pg_range p1 JOIN pg_opclass o ON o.oid = p1.rngsubopc WHERE o.opcmethod != 403 OR diff --git a/src/test/regress/input/create_function_0.source b/src/test/regress/input/create_function_0.source new file mode 100644 index 0000000000000..f47f635789ab2 --- /dev/null +++ b/src/test/regress/input/create_function_0.source @@ -0,0 +1,95 @@ +-- +-- CREATE_FUNCTION_0 +-- + +-- Create a bunch of C functions that will be used by later tests: + +CREATE FUNCTION check_primary_key () + RETURNS trigger + AS '@libdir@/refint@DLSUFFIX@' + LANGUAGE C; + +CREATE FUNCTION check_foreign_key () + RETURNS trigger + AS '@libdir@/refint@DLSUFFIX@' + LANGUAGE C; + +CREATE FUNCTION autoinc () + RETURNS trigger + AS '@libdir@/autoinc@DLSUFFIX@' + LANGUAGE C; + +CREATE FUNCTION trigger_return_old () + RETURNS trigger + AS '@libdir@/regress@DLSUFFIX@' + LANGUAGE C; + +CREATE FUNCTION ttdummy () + RETURNS trigger + AS '@libdir@/regress@DLSUFFIX@' + LANGUAGE C; + +CREATE FUNCTION set_ttdummy (int4) + RETURNS int4 + AS '@libdir@/regress@DLSUFFIX@' + LANGUAGE C STRICT; + +CREATE FUNCTION make_tuple_indirect (record) + RETURNS record + AS '@libdir@/regress@DLSUFFIX@' + LANGUAGE C STRICT; + +CREATE FUNCTION test_atomic_ops() + RETURNS bool + AS '@libdir@/regress@DLSUFFIX@' + LANGUAGE C; + +CREATE FUNCTION test_fdw_handler() + RETURNS fdw_handler + AS '@libdir@/regress@DLSUFFIX@', 'test_fdw_handler' + LANGUAGE C; + +CREATE FUNCTION test_support_func(internal) + RETURNS internal + AS '@libdir@/regress@DLSUFFIX@', 'test_support_func' + LANGUAGE C STRICT; + +CREATE FUNCTION test_opclass_options_func(internal) + RETURNS void + AS '@libdir@/regress@DLSUFFIX@', 'test_opclass_options_func' + LANGUAGE C; + +CREATE FUNCTION test_enc_conversion(bytea, name, name, bool, validlen OUT int, result OUT bytea) + AS '@libdir@/regress@DLSUFFIX@', 'test_enc_conversion' + LANGUAGE C STRICT; + +CREATE FUNCTION binary_coercible(oid, oid) + RETURNS bool + AS '@libdir@/regress@DLSUFFIX@', 'binary_coercible' + LANGUAGE C STRICT STABLE PARALLEL SAFE; + +-- Things that shouldn't work: + +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL + AS 'SELECT ''not an integer'';'; + +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL + AS 'not even SQL'; + +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL + AS 'SELECT 1, 2, 3;'; + +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL + AS 'SELECT $2;'; + +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL + AS 'a', 'b'; + +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C + AS 'nosuchfile'; + +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C + AS '@libdir@/regress@DLSUFFIX@', 'nosuchsymbol'; + +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE internal + AS 'nosuch'; diff --git a/src/test/regress/input/create_function_1.source b/src/test/regress/input/create_function_1.source index 6c69b7fe6cbbf..79a41562bb04b 100644 --- a/src/test/regress/input/create_function_1.source +++ b/src/test/regress/input/create_function_1.source @@ -2,6 +2,8 @@ -- CREATE_FUNCTION_1 -- +-- Create C functions needed by create_type.sql + CREATE FUNCTION widget_in(cstring) RETURNS widget AS '@libdir@/regress@DLSUFFIX@' @@ -21,89 +23,3 @@ CREATE FUNCTION int44out(city_budget) RETURNS cstring AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION check_primary_key () - RETURNS trigger - AS '@libdir@/refint@DLSUFFIX@' - LANGUAGE C; - -CREATE FUNCTION check_foreign_key () - RETURNS trigger - AS '@libdir@/refint@DLSUFFIX@' - LANGUAGE C; - -CREATE FUNCTION autoinc () - RETURNS trigger - AS '@libdir@/autoinc@DLSUFFIX@' - LANGUAGE C; - -CREATE FUNCTION trigger_return_old () - RETURNS trigger - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C; - -CREATE FUNCTION ttdummy () - RETURNS trigger - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C; - -CREATE FUNCTION set_ttdummy (int4) - RETURNS int4 - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C STRICT; - -CREATE FUNCTION make_tuple_indirect (record) - RETURNS record - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C STRICT; - -CREATE FUNCTION test_atomic_ops() - RETURNS bool - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C; - --- Tests creating a FDW handler -CREATE FUNCTION test_fdw_handler() - RETURNS fdw_handler - AS '@libdir@/regress@DLSUFFIX@', 'test_fdw_handler' - LANGUAGE C; - -CREATE FUNCTION test_support_func(internal) - RETURNS internal - AS '@libdir@/regress@DLSUFFIX@', 'test_support_func' - LANGUAGE C STRICT; - -CREATE FUNCTION test_opclass_options_func(internal) - RETURNS void - AS '@libdir@/regress@DLSUFFIX@', 'test_opclass_options_func' - LANGUAGE C; - -CREATE FUNCTION test_enc_conversion(bytea, name, name, bool, validlen OUT int, result OUT bytea) - AS '@libdir@/regress@DLSUFFIX@', 'test_enc_conversion' - LANGUAGE C STRICT; - --- Things that shouldn't work: - -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL - AS 'SELECT ''not an integer'';'; - -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL - AS 'not even SQL'; - -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL - AS 'SELECT 1, 2, 3;'; - -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL - AS 'SELECT $2;'; - -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL - AS 'a', 'b'; - -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C - AS 'nosuchfile'; - -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C - AS '@libdir@/regress@DLSUFFIX@', 'nosuchsymbol'; - -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE internal - AS 'nosuch'; diff --git a/src/test/regress/output/create_function_0.source b/src/test/regress/output/create_function_0.source new file mode 100644 index 0000000000000..342bc40e115ff --- /dev/null +++ b/src/test/regress/output/create_function_0.source @@ -0,0 +1,88 @@ +-- +-- CREATE_FUNCTION_0 +-- +-- Create a bunch of C functions that will be used by later tests: +CREATE FUNCTION check_primary_key () + RETURNS trigger + AS '@libdir@/refint@DLSUFFIX@' + LANGUAGE C; +CREATE FUNCTION check_foreign_key () + RETURNS trigger + AS '@libdir@/refint@DLSUFFIX@' + LANGUAGE C; +CREATE FUNCTION autoinc () + RETURNS trigger + AS '@libdir@/autoinc@DLSUFFIX@' + LANGUAGE C; +CREATE FUNCTION trigger_return_old () + RETURNS trigger + AS '@libdir@/regress@DLSUFFIX@' + LANGUAGE C; +CREATE FUNCTION ttdummy () + RETURNS trigger + AS '@libdir@/regress@DLSUFFIX@' + LANGUAGE C; +CREATE FUNCTION set_ttdummy (int4) + RETURNS int4 + AS '@libdir@/regress@DLSUFFIX@' + LANGUAGE C STRICT; +CREATE FUNCTION make_tuple_indirect (record) + RETURNS record + AS '@libdir@/regress@DLSUFFIX@' + LANGUAGE C STRICT; +CREATE FUNCTION test_atomic_ops() + RETURNS bool + AS '@libdir@/regress@DLSUFFIX@' + LANGUAGE C; +CREATE FUNCTION test_fdw_handler() + RETURNS fdw_handler + AS '@libdir@/regress@DLSUFFIX@', 'test_fdw_handler' + LANGUAGE C; +CREATE FUNCTION test_support_func(internal) + RETURNS internal + AS '@libdir@/regress@DLSUFFIX@', 'test_support_func' + LANGUAGE C STRICT; +CREATE FUNCTION test_opclass_options_func(internal) + RETURNS void + AS '@libdir@/regress@DLSUFFIX@', 'test_opclass_options_func' + LANGUAGE C; +CREATE FUNCTION test_enc_conversion(bytea, name, name, bool, validlen OUT int, result OUT bytea) + AS '@libdir@/regress@DLSUFFIX@', 'test_enc_conversion' + LANGUAGE C STRICT; +CREATE FUNCTION binary_coercible(oid, oid) + RETURNS bool + AS '@libdir@/regress@DLSUFFIX@', 'binary_coercible' + LANGUAGE C STRICT STABLE PARALLEL SAFE; +-- Things that shouldn't work: +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL + AS 'SELECT ''not an integer'';'; +ERROR: return type mismatch in function declared to return integer +DETAIL: Actual return type is text. +CONTEXT: SQL function "test1" +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL + AS 'not even SQL'; +ERROR: syntax error at or near "not" +LINE 2: AS 'not even SQL'; + ^ +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL + AS 'SELECT 1, 2, 3;'; +ERROR: return type mismatch in function declared to return integer +DETAIL: Final statement must return exactly one column. +CONTEXT: SQL function "test1" +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL + AS 'SELECT $2;'; +ERROR: there is no parameter $2 +LINE 2: AS 'SELECT $2;'; + ^ +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL + AS 'a', 'b'; +ERROR: only one AS item needed for language "sql" +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C + AS 'nosuchfile'; +ERROR: could not access file "nosuchfile": No such file or directory +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C + AS '@libdir@/regress@DLSUFFIX@', 'nosuchsymbol'; +ERROR: could not find function "nosuchsymbol" in file "@libdir@/regress@DLSUFFIX@" +CREATE FUNCTION test1 (int) RETURNS int LANGUAGE internal + AS 'nosuch'; +ERROR: there is no built-in function named "nosuch" diff --git a/src/test/regress/output/create_function_1.source b/src/test/regress/output/create_function_1.source index c66146db9d53e..616b610e86245 100644 --- a/src/test/regress/output/create_function_1.source +++ b/src/test/regress/output/create_function_1.source @@ -1,6 +1,7 @@ -- -- CREATE_FUNCTION_1 -- +-- Create C functions needed by create_type.sql CREATE FUNCTION widget_in(cstring) RETURNS widget AS '@libdir@/regress@DLSUFFIX@' @@ -23,84 +24,3 @@ CREATE FUNCTION int44out(city_budget) AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT IMMUTABLE; NOTICE: argument type city_budget is only a shell -CREATE FUNCTION check_primary_key () - RETURNS trigger - AS '@libdir@/refint@DLSUFFIX@' - LANGUAGE C; -CREATE FUNCTION check_foreign_key () - RETURNS trigger - AS '@libdir@/refint@DLSUFFIX@' - LANGUAGE C; -CREATE FUNCTION autoinc () - RETURNS trigger - AS '@libdir@/autoinc@DLSUFFIX@' - LANGUAGE C; -CREATE FUNCTION trigger_return_old () - RETURNS trigger - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C; -CREATE FUNCTION ttdummy () - RETURNS trigger - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C; -CREATE FUNCTION set_ttdummy (int4) - RETURNS int4 - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C STRICT; -CREATE FUNCTION make_tuple_indirect (record) - RETURNS record - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C STRICT; -CREATE FUNCTION test_atomic_ops() - RETURNS bool - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C; --- Tests creating a FDW handler -CREATE FUNCTION test_fdw_handler() - RETURNS fdw_handler - AS '@libdir@/regress@DLSUFFIX@', 'test_fdw_handler' - LANGUAGE C; -CREATE FUNCTION test_support_func(internal) - RETURNS internal - AS '@libdir@/regress@DLSUFFIX@', 'test_support_func' - LANGUAGE C STRICT; -CREATE FUNCTION test_opclass_options_func(internal) - RETURNS void - AS '@libdir@/regress@DLSUFFIX@', 'test_opclass_options_func' - LANGUAGE C; -CREATE FUNCTION test_enc_conversion(bytea, name, name, bool, validlen OUT int, result OUT bytea) - AS '@libdir@/regress@DLSUFFIX@', 'test_enc_conversion' - LANGUAGE C STRICT; --- Things that shouldn't work: -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL - AS 'SELECT ''not an integer'';'; -ERROR: return type mismatch in function declared to return integer -DETAIL: Actual return type is text. -CONTEXT: SQL function "test1" -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL - AS 'not even SQL'; -ERROR: syntax error at or near "not" -LINE 2: AS 'not even SQL'; - ^ -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL - AS 'SELECT 1, 2, 3;'; -ERROR: return type mismatch in function declared to return integer -DETAIL: Final statement must return exactly one column. -CONTEXT: SQL function "test1" -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL - AS 'SELECT $2;'; -ERROR: there is no parameter $2 -LINE 2: AS 'SELECT $2;'; - ^ -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL - AS 'a', 'b'; -ERROR: only one AS item needed for language "sql" -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C - AS 'nosuchfile'; -ERROR: could not access file "nosuchfile": No such file or directory -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C - AS '@libdir@/regress@DLSUFFIX@', 'nosuchsymbol'; -ERROR: could not find function "nosuchsymbol" in file "@libdir@/regress@DLSUFFIX@" -CREATE FUNCTION test1 (int) RETURNS int LANGUAGE internal - AS 'nosuch'; -ERROR: there is no built-in function named "nosuch" diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule index a091300857720..22b0d3584da94 100644 --- a/src/test/regress/parallel_schedule +++ b/src/test/regress/parallel_schedule @@ -20,16 +20,17 @@ test: boolean char name varchar text int2 int4 int8 oid float4 float8 bit numeri # strings depends on char, varchar and text # numerology depends on int2, int4, int8, float4, float8 # multirangetypes depends on rangetypes -# multirangetypes shouldn't be in the one group with type_sanity +# multirangetypes shouldn't run concurrently with type_sanity # ---------- -test: strings numerology point lseg line box path polygon circle date time timetz timestamp timestamptz interval inet macaddr macaddr8 tstypes multirangetypes +test: strings numerology point lseg line box path polygon circle date time timetz timestamp timestamptz interval inet macaddr macaddr8 multirangetypes create_function_0 # ---------- # Another group of parallel tests # geometry depends on point, lseg, box, path, polygon and circle # horology depends on interval, timetz, timestamp, timestamptz +# opr_sanity depends on create_function_0 # ---------- -test: geometry horology regex type_sanity opr_sanity misc_sanity comments expressions unicode xid mvcc +test: geometry horology tstypes regex type_sanity opr_sanity misc_sanity comments expressions unicode xid mvcc # ---------- # These four each depend on the previous one diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c index 1990cbb6a13ba..d8756e5ba005a 100644 --- a/src/test/regress/regress.c +++ b/src/test/regress/regress.c @@ -36,6 +36,7 @@ #include "nodes/supportnodes.h" #include "optimizer/optimizer.h" #include "optimizer/plancat.h" +#include "parser/parse_coerce.h" #include "port/atomics.h" #include "storage/spin.h" #include "utils/builtins.h" @@ -1194,3 +1195,14 @@ test_enc_conversion(PG_FUNCTION_ARGS) PG_RETURN_DATUM(HeapTupleGetDatum(tuple)); } + +/* Provide SQL access to IsBinaryCoercible() */ +PG_FUNCTION_INFO_V1(binary_coercible); +Datum +binary_coercible(PG_FUNCTION_ARGS) +{ + Oid srctype = PG_GETARG_OID(0); + Oid targettype = PG_GETARG_OID(1); + + PG_RETURN_BOOL(IsBinaryCoercible(srctype, targettype)); +} diff --git a/src/test/regress/serial_schedule b/src/test/regress/serial_schedule index 5644847601565..6e9cdf92af39c 100644 --- a/src/test/regress/serial_schedule +++ b/src/test/regress/serial_schedule @@ -10,8 +10,6 @@ test: int2 test: int4 test: int8 test: oid -test: xid -test: mvcc test: float4 test: float8 test: bit @@ -21,7 +19,6 @@ test: uuid test: enum test: money test: rangetypes -test: multirangetypes test: pg_lsn test: regproc test: strings @@ -42,9 +39,11 @@ test: interval test: inet test: macaddr test: macaddr8 -test: tstypes +test: multirangetypes +test: create_function_0 test: geometry test: horology +test: tstypes test: regex test: type_sanity test: opr_sanity @@ -52,6 +51,8 @@ test: misc_sanity test: comments test: expressions test: unicode +test: xid +test: mvcc test: create_function_1 test: create_type test: create_table @@ -92,7 +93,6 @@ test: select_distinct_on test: select_implicit test: select_having test: subselect -test: incremental_sort test: union test: case test: join @@ -109,8 +109,6 @@ test: delete test: namespace test: prepared_xacts test: brin -test: brin_bloom -test: brin_multi test: gin test: gist test: spgist @@ -130,6 +128,8 @@ test: password test: identity test: generated test: join_hash +test: brin_bloom +test: brin_multi test: create_table_like test: alter_generic test: alter_operator @@ -143,6 +143,7 @@ test: tid test: tidscan test: tidrangescan test: collate.icu.utf8 +test: incremental_sort test: rules test: psql test: psql_crosstab diff --git a/src/test/regress/sql/.gitignore b/src/test/regress/sql/.gitignore index 46c8112094c9e..fe14af6ae7a9d 100644 --- a/src/test/regress/sql/.gitignore +++ b/src/test/regress/sql/.gitignore @@ -1,5 +1,6 @@ /constraints.sql /copy.sql +/create_function_0.sql /create_function_1.sql /create_function_2.sql /largeobject.sql diff --git a/src/test/regress/sql/conversion.sql b/src/test/regress/sql/conversion.sql index ea85f20ed8354..8358682432197 100644 --- a/src/test/regress/sql/conversion.sql +++ b/src/test/regress/sql/conversion.sql @@ -40,7 +40,7 @@ DROP USER regress_conversion_user; -- -- Helper function to test a conversion. Uses the test_enc_conversion function --- that was created in the create_function_1 test. +-- that was created in the create_function_0 test. create or replace function test_conv( input IN bytea, src_encoding IN text, diff --git a/src/test/regress/sql/opr_sanity.sql b/src/test/regress/sql/opr_sanity.sql index 393acdf8c3cf3..5a9c4796923d6 100644 --- a/src/test/regress/sql/opr_sanity.sql +++ b/src/test/regress/sql/opr_sanity.sql @@ -18,65 +18,6 @@ -- that test creates some bogus operators... --- Helper functions to deal with cases where binary-coercible matches are --- allowed. - --- This should match IsBinaryCoercible() in parse_coerce.c. --- It doesn't currently know about some cases, notably domains, anyelement, --- anynonarray, anyenum, or record, but it doesn't need to (yet). -create function binary_coercible(oid, oid) returns bool as $$ -begin - if $1 = $2 then return true; end if; - if EXISTS(select 1 from pg_catalog.pg_cast where - castsource = $1 and casttarget = $2 and - castmethod = 'b' and castcontext = 'i') - then return true; end if; - if $2 = 'pg_catalog.any'::pg_catalog.regtype then return true; end if; - if $2 = 'pg_catalog.anyarray'::pg_catalog.regtype then - if EXISTS(select 1 from pg_catalog.pg_type where - oid = $1 and typelem != 0 and - typsubscript = 'pg_catalog.array_subscript_handler'::pg_catalog.regproc) - then return true; end if; - end if; - if $2 = 'pg_catalog.anyrange'::pg_catalog.regtype then - if (select typtype from pg_catalog.pg_type where oid = $1) = 'r' - then return true; end if; - end if; - if $2 = 'pg_catalog.anymultirange'::pg_catalog.regtype then - if (select typtype from pg_catalog.pg_type where oid = $1) = 'm' - then return true; end if; - end if; - return false; -end -$$ language plpgsql strict stable; - --- This one ignores castcontext, so it will allow cases where an explicit --- (but still binary) cast would be required to convert the input type. --- We don't currently use this for any tests in this file, but it is a --- reasonable alternative definition for some scenarios. -create function explicitly_binary_coercible(oid, oid) returns bool as $$ -begin - if $1 = $2 then return true; end if; - if EXISTS(select 1 from pg_catalog.pg_cast where - castsource = $1 and casttarget = $2 and - castmethod = 'b') - then return true; end if; - if $2 = 'pg_catalog.any'::pg_catalog.regtype then return true; end if; - if $2 = 'pg_catalog.anyarray'::pg_catalog.regtype then - if EXISTS(select 1 from pg_catalog.pg_type where - oid = $1 and typelem != 0 and - typsubscript = 'pg_catalog.array_subscript_handler'::pg_catalog.regproc) - then return true; end if; - end if; - if $2 = 'pg_catalog.anyrange'::pg_catalog.regtype then - if (select typtype from pg_catalog.pg_type where oid = $1) = 'r' - then return true; end if; - end if; - return false; -end -$$ language plpgsql strict stable; - - -- **************** pg_proc **************** -- Look for illegal values in pg_proc fields. diff --git a/src/test/regress/sql/type_sanity.sql b/src/test/regress/sql/type_sanity.sql index 4739aca84a390..404c3a20432e5 100644 --- a/src/test/regress/sql/type_sanity.sql +++ b/src/test/regress/sql/type_sanity.sql @@ -465,7 +465,7 @@ FROM pg_range p1 JOIN pg_type t ON t.oid = p1.rngsubtype WHERE (rngcollation = 0) != (typcollation = 0); -- opclass had better be a btree opclass accepting the subtype. --- We must allow anyarray matches, cf opr_sanity's binary_coercible() +-- We must allow anyarray matches, cf IsBinaryCoercible() SELECT p1.rngtypid, p1.rngsubtype, o.opcmethod, o.opcname FROM pg_range p1 JOIN pg_opclass o ON o.oid = p1.rngsubopc From 5b2d09beaffa915edd6e74fcf030b13844d3326f Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 11 May 2021 17:40:44 -0400 Subject: [PATCH 281/671] doc: update PG 14 release notes based on feedback --- doc/src/sgml/release-14.sgml | 216 +++++++++++++++++------------------ 1 file changed, 104 insertions(+), 112 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index b15472bd7a9f4..10a0dfd86a52b 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -78,6 +78,22 @@ Disallow single-quoting of the language name in the CREATE/DROP LANGUAGE command + + + + +Fix to_tsquery() and websearch_to_tsquery() to properly parse certain discarded tokens in quotes (Alexander Korotkov) + + + +Certain discarded tokens, like underscore, caused the output of these functions to produce incorrect tsquery output, e.g., websearch_to_tsquery('"pg_class pg"') used to output '( pg & class ) +<-> pg',but now outputs 'pg <-> class <-> pg'. + + + -Make websearch_to_tsquery() parse text in quotes as a single token (Alexander Korotkov) +Fix websearch_to_tsquery() to properly parse multiple adjacent discarded tokens in quotes (Alexander Korotkov) -DETAILS? ALREADY CHANGED ABOVE. +Previously, quoted text that contained multiple adjacent discarded tokens were treated as multiple tokens, causing incorrect tsquery output, e.g., websearch_to_tsquery('"aaa: bbb"') used to output +'aaa <2> bbb', but now outputs 'aaa <-> bbb'. + + + + + + + +Change password_encryption's default to scram-sha-256 (Peter Eisentraut) + + + +Previously it was md5. All new passwords will be stored as SHA256 unless this server variable is changed or the password is already md5-hashed. @@ -264,6 +296,17 @@ This previously was allowed but produced incorrect results. + + + + +Force custom server variable names to match the pattern used for unquoted SQL identifiers (Tom Lane) + + + -Return false for has_column_privilege() checks on non-existent or dropped columns (Joe Conway) +Return false for has_column_privilege() checks on non-existent or dropped columns when using attribute numbers (Joe Conway) -Previously such columns returned an invalid column error. +Previously such attribute numbers returned an invalid column error. @@ -347,7 +390,7 @@ Remove support for postfix (right-unary) operators (Mark Dilger) -pg_dump and pg_upgrade will warn if post-fix operators are being dumped. +pg_dump and pg_upgrade will warn if postfix operators are being dumped. @@ -377,22 +420,6 @@ This was needed for warning applications about PostgreSQL 9.5 changes. - - - - -Initialize work_mem and maintenance_work_mem using current guc.c default (Peter Geoghegan) - - - -Oversight in commit 848ae330a49, which increased the previous defaults -for work_mem and maintenance_work_mem by 4X. IS THIS A BEHAVIORAL CHANGE? - - - + + +Allow VACUUM to eagerly add newly deleted btree pages in the free space map (Peter Geoghegan) + + + +Previously VACUUM could only place preexisting deleted pages in the free space map. + + + -Remove expired btree index entries to prevent page splits (Peter Geoghegan) +Allow index additions to remove expired btree index entries to prevent page splits (Peter Geoghegan) @@ -679,7 +721,7 @@ Author: Heikki Linnakangas --> -Allow some GiST index to be built by presorting the data (Andrey Borodin) +Allow some GiST indexes to be built by presorting the data (Andrey Borodin) @@ -802,7 +844,7 @@ Add ability to use LZ4 compression on TOAST data (Dilip Kumar) -This can be set at the column level, or set as a default via server setting default_toast_compression. The server must be compiled with --with-lz4 support to enable this feature; the default is still pglz. +This can be set at the column level, or set as a default via server setting default_toast_compression. The server must be compiled with --with-lz4 to support this feature; the default is still pglz. @@ -874,7 +916,7 @@ Author: Amit Kapila --> -Speed truncation of small tables on large shared buffer servers (Kirk Jamison) +Speed truncation of small tables during recovery on clusters with a large number of shared buffers (Kirk Jamison) @@ -896,7 +938,7 @@ Author: David Rowley --> -Allow windowing functions to perform incremental sorts (David Rowley) +Allow window functions to perform incremental sorts (David Rowley) @@ -1005,7 +1047,7 @@ Author: Tom Lane --> -Improve pg_stat_activity reporting for walsenders processes (Tom Lane) +Improve pg_stat_activity reporting for walsender processes (Tom Lane) @@ -1076,7 +1118,7 @@ Author: Amit Kapila --> -Add system view pg_stat_replication_slots to report replication slot activity (Sawada Masahiko, Amit Kapila) +Add system view pg_stat_replication_slots to report replication slot activity (Sawada Masahiko, Amit Kapila, Vignesh C) @@ -1128,21 +1170,6 @@ Add wait event WalReceiverExit to report WAL receiver exit wait time (Fujii Masa - - - - -Change password_encryption's default to scram-sha-256 (Peter Eisentraut) - - - -Previously it was md5. - - - - - -Force custom server variable names to match the pattern used for unquoted SQL identifiers (Tom Lane) - - - -Allow multiple xacts during table sync in logical replication (Peter Smith, Amit Kapila, and Takamichi Osumi) - - - -IMPORTANT? +Allow multiple transactions during table sync in logical replication (Peter Smith, Amit Kapila, and Takamichi Osumi) @@ -1485,21 +1497,12 @@ Author: Amit Kapila 2020-12-30 [0aa8a01d0] Extend the output plugin API to allow decoding of prepar Author: Amit Kapila 2021-01-04 [a271a1b50] Allow decoding at prepare time in ReorderBuffer. ---> - - -Add support for streaming to built-in logical replication (Vondra, Dilip Kumar, Amit Kapila, Ajin Cherian, Nikhil Sontakke, Stas Kelvich) - - - - - -Allow logical replication to stream long transactions to standbys (Dilip Kumar, Tomas Vondra, Amit Kapila, Nikhil Sontakke) +Allow logical replication to stream long in-progress transactions to standbys (Tomas Vondra, Dilip Kumar, Amit Kapila, Ajin Cherian, Nikhil Sontakke, Stas Kelvich) @@ -1570,7 +1573,7 @@ Allow replication origin functions to be controlled using standard function perm -Previously these functions could only be executed by super-users, and still defaults do that. +Previously these functions could only be executed by super-users, and this is still the default. @@ -1596,7 +1599,7 @@ Author: Amit Kapila --> -Improve the logical replication API to allow streaming large in-progress transactions (Tomas Vondra, Dilip Kumar, Amit Kapila) +Enhance the logical replication API to allow streaming large in-progress transactions (Tomas Vondra, Dilip Kumar, Amit Kapila) @@ -1622,11 +1625,15 @@ Previously the standby would shut down immediately. -Enable logical replication to handle two phase commits (Ajin Cherian) +Enhance logical decoding APIs to handle two-phase commits (Ajin Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich) @@ -1634,6 +1641,21 @@ This is controlled via pg_create_logical_replication_slot(). + + + + +Allow logical decoding to more efficiently process cache invalidation messages + + + +This allows Logical decoding to work efficiently in presence of a large amount of DDL. + + + - - -Allow VACUUM VERBOSE to report page deletion counts for each scan of an index (Peter Geoghegan) - - - -Previously only total page count deletion was reported. - - - -Allow REINDEX to process all child tables and indexes of a partitioned table (Justin Pryzby, Michael Paquier) +Allow REINDEX to process all child tables or indexes of a partitioned relation (Justin Pryzby, Michael Paquier) @@ -2339,21 +2346,6 @@ Subscripting can be used to extract from and assign to jsonb documents. - - - - -Improve to_tsquery() and websearch_to_tsquery() handling (Alexander Korotkov) - - - -NEED TEXT HERE - - - -Enhance libpq libpq's target_session_attrs parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane) +Enhance libpq's target_session_attrs parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane) @@ -2959,7 +2951,7 @@ Add documentation for the factorial() function (Peter Eisentraut) -With the removal of the ! operator in this release, factorial() is the only built-in way to computer a factorial. +With the removal of the ! operator in this release, factorial() is the only built-in way to compute a factorial. @@ -2979,7 +2971,7 @@ Author: Michael Paquier --> -Add configure option --with-openssl to behave like --with-ssl={openssl} (Daniel Gustafsson, Michael Paquier) +Add configure option --with-ssl={openssl} to behave like --with-openssl (Daniel Gustafsson, Michael Paquier) @@ -3174,7 +3166,7 @@ Allow postgres_fdw to import table partitions if specified by IMPORT FOREIGN SCH -By default, only the root of partitioned tables are imported. +By default, only the root of partitioned tables is imported. From 1df3555acc78dedc3ca25eb5e83649b3da1f298f Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 11 May 2021 17:52:04 -0400 Subject: [PATCH 282/671] Get rid of the separate serial_schedule list of tests. Having to maintain two lists of regression test scripts has proven annoyingly error-prone. We can achieve the effect of the serial_schedule by running the parallel_schedule with "--max_connections=1"; so do that and remove serial_schedule. This causes cosmetic differences in the progress output, but it doesn't seem worth restructuring pg_regress to avoid that. Discussion: https://postgr.es/m/899209.1620759506@sss.pgh.pa.us --- src/test/regress/GNUmakefile | 6 +- src/test/regress/serial_schedule | 212 ------------------------------- src/tools/msvc/vcregress.pl | 12 ++ 3 files changed, 15 insertions(+), 215 deletions(-) delete mode 100644 src/test/regress/serial_schedule diff --git a/src/test/regress/GNUmakefile b/src/test/regress/GNUmakefile index 95e4bc8228079..5dc4bbcb001ee 100644 --- a/src/test/regress/GNUmakefile +++ b/src/test/regress/GNUmakefile @@ -83,7 +83,7 @@ regress_data_files = \ $(wildcard $(srcdir)/output/*.source) \ $(filter-out $(addprefix $(srcdir)/,$(input_files)),$(wildcard $(srcdir)/sql/*.sql)) \ $(wildcard $(srcdir)/data/*.data) \ - $(srcdir)/parallel_schedule $(srcdir)/serial_schedule $(srcdir)/resultmap + $(srcdir)/parallel_schedule $(srcdir)/resultmap install-tests: all install install-lib installdirs-tests $(MAKE) -C $(top_builddir)/contrib/spi install @@ -128,7 +128,7 @@ check-tests: all | temp-install $(pg_regress_check) $(REGRESS_OPTS) $(MAXCONNOPT) $(TESTS) $(EXTRA_TESTS) installcheck: all - $(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/serial_schedule $(EXTRA_TESTS) + $(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule --max-connections=1 $(EXTRA_TESTS) installcheck-parallel: all $(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(EXTRA_TESTS) @@ -146,7 +146,7 @@ runtest: installcheck runtest-parallel: installcheck-parallel bigtest: all - $(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/serial_schedule numeric_big + $(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule --max-connections=1 numeric_big bigcheck: all | temp-install $(pg_regress_check) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) numeric_big diff --git a/src/test/regress/serial_schedule b/src/test/regress/serial_schedule deleted file mode 100644 index 6e9cdf92af39c..0000000000000 --- a/src/test/regress/serial_schedule +++ /dev/null @@ -1,212 +0,0 @@ -# src/test/regress/serial_schedule -# This should probably be in an order similar to parallel_schedule. -test: tablespace -test: boolean -test: char -test: name -test: varchar -test: text -test: int2 -test: int4 -test: int8 -test: oid -test: float4 -test: float8 -test: bit -test: numeric -test: txid -test: uuid -test: enum -test: money -test: rangetypes -test: pg_lsn -test: regproc -test: strings -test: numerology -test: point -test: lseg -test: line -test: box -test: path -test: polygon -test: circle -test: date -test: time -test: timetz -test: timestamp -test: timestamptz -test: interval -test: inet -test: macaddr -test: macaddr8 -test: multirangetypes -test: create_function_0 -test: geometry -test: horology -test: tstypes -test: regex -test: type_sanity -test: opr_sanity -test: misc_sanity -test: comments -test: expressions -test: unicode -test: xid -test: mvcc -test: create_function_1 -test: create_type -test: create_table -test: create_function_2 -test: copy -test: copyselect -test: copydml -test: insert -test: insert_conflict -test: create_misc -test: create_operator -test: create_procedure -test: create_index -test: create_index_spgist -test: create_view -test: index_including -test: index_including_gist -test: create_aggregate -test: create_function_3 -test: create_cast -test: constraints -test: triggers -test: select -test: inherit -test: typed_table -test: vacuum -test: drop_if_exists -test: updatable_views -test: roleattributes -test: create_am -test: hash_func -test: errors -test: infinite_recurse -test: sanity_check -test: select_into -test: select_distinct -test: select_distinct_on -test: select_implicit -test: select_having -test: subselect -test: union -test: case -test: join -test: aggregates -test: transactions -ignore: random -test: random -test: portals -test: arrays -test: btree_index -test: hash_index -test: update -test: delete -test: namespace -test: prepared_xacts -test: brin -test: gin -test: gist -test: spgist -test: privileges -test: init_privs -test: security_label -test: collate -test: matview -test: lock -test: replica_identity -test: rowsecurity -test: object_address -test: tablesample -test: groupingsets -test: drop_operator -test: password -test: identity -test: generated -test: join_hash -test: brin_bloom -test: brin_multi -test: create_table_like -test: alter_generic -test: alter_operator -test: misc -test: async -test: dbsize -test: misc_functions -test: sysviews -test: tsrf -test: tid -test: tidscan -test: tidrangescan -test: collate.icu.utf8 -test: incremental_sort -test: rules -test: psql -test: psql_crosstab -test: amutils -test: stats_ext -test: collate.linux.utf8 -test: select_parallel -test: write_parallel -test: publication -test: subscription -test: select_views -test: portals_p2 -test: foreign_key -test: cluster -test: dependency -test: guc -test: bitmapops -test: combocid -test: tsearch -test: tsdicts -test: foreign_data -test: window -test: xmlmap -test: functional_deps -test: advisory_lock -test: indirect_toast -test: equivclass -test: json -test: jsonb -test: json_encoding -test: jsonpath -test: jsonpath_encoding -test: jsonb_jsonpath -test: plancache -test: limit -test: plpgsql -test: copy2 -test: temp -test: domain -test: rangefuncs -test: prepare -test: conversion -test: truncate -test: alter_table -test: sequence -test: polymorphism -test: rowtypes -test: returning -test: largeobject -test: with -test: xml -test: partition_join -test: partition_prune -test: reloptions -test: hash_part -test: indexing -test: partition_aggregate -test: partition_info -test: tuplesort -test: explain -test: compression -test: resultcache -test: event_trigger -test: oidjoins -test: fast_default -test: stats diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index 860899c039417..0c2d56a45bea9 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -106,6 +106,12 @@ sub installcheck_internal { my ($schedule, @EXTRA_REGRESS_OPTS) = @_; + # for backwards compatibility, "serial" runs the tests in + # parallel_schedule one by one. + my $maxconn = $maxconn; + $maxconn = "--max_connections=1" if $schedule eq 'serial'; + $schedule = 'parallel' if $schedule eq 'serial'; + my @args = ( "../../../$Config/pg_regress/pg_regress", "--dlpath=.", @@ -132,6 +138,12 @@ sub installcheck sub check { my $schedule = shift || 'parallel'; + # for backwards compatibility, "serial" runs the tests in + # parallel_schedule one by one. + my $maxconn = $maxconn; + $maxconn = "--max_connections=1" if $schedule eq 'serial'; + $schedule = 'parallel' if $schedule eq 'serial'; + InstallTemp(); chdir "${topdir}/src/test/regress"; my @args = ( From 0b85fa93e4575183aa5a71ebe3c6bae8d97704ed Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 11 May 2021 19:17:07 -0400 Subject: [PATCH 283/671] Fix vcregress.pl's ancient misspelling of --max-connections. I copied the existing spelling of "--max_connections", but that's just wrong :-(. Evidently setting $ENV{MAX_CONNECTIONS} has never actually worked in this script. Given the lack of complaints, it's probably not worth back-patching a fix. Per buildfarm. Discussion: https://postgr.es/m/899209.1620759506@sss.pgh.pa.us --- src/tools/msvc/vcregress.pl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index 0c2d56a45bea9..a09b60fc858e5 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -71,7 +71,7 @@ } my $maxconn = ""; -$maxconn = "--max_connections=$ENV{MAX_CONNECTIONS}" +$maxconn = "--max-connections=$ENV{MAX_CONNECTIONS}" if $ENV{MAX_CONNECTIONS}; my $temp_config = ""; @@ -109,7 +109,7 @@ sub installcheck_internal # for backwards compatibility, "serial" runs the tests in # parallel_schedule one by one. my $maxconn = $maxconn; - $maxconn = "--max_connections=1" if $schedule eq 'serial'; + $maxconn = "--max-connections=1" if $schedule eq 'serial'; $schedule = 'parallel' if $schedule eq 'serial'; my @args = ( @@ -141,7 +141,7 @@ sub check # for backwards compatibility, "serial" runs the tests in # parallel_schedule one by one. my $maxconn = $maxconn; - $maxconn = "--max_connections=1" if $schedule eq 'serial'; + $maxconn = "--max-connections=1" if $schedule eq 'serial'; $schedule = 'parallel' if $schedule eq 'serial'; InstallTemp(); From 0bf62931cae0db1294937eb9190b183494af4cf8 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Tue, 11 May 2021 20:02:02 -0400 Subject: [PATCH 284/671] Tweak generation of Gen_dummy_probes.pl Use a static prolog file instead of generating the prolog from the existing perl script. Also, support generation of the file in a vpath build. Discussion: https://postgr.es/m/700620.1620662868@sss.pgh.pa.us --- src/backend/utils/Gen_dummy_probes.pl.prolog | 19 +++++++++++++++++++ src/backend/utils/Makefile | 8 ++++---- src/backend/utils/README.Gen_dummy_probes | 2 ++ 3 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 src/backend/utils/Gen_dummy_probes.pl.prolog diff --git a/src/backend/utils/Gen_dummy_probes.pl.prolog b/src/backend/utils/Gen_dummy_probes.pl.prolog new file mode 100644 index 0000000000000..1c8993377d62a --- /dev/null +++ b/src/backend/utils/Gen_dummy_probes.pl.prolog @@ -0,0 +1,19 @@ +#! /usr/bin/perl -w +#------------------------------------------------------------------------- +# +# Gen_dummy_probes.pl +# Perl script that generates probes.h file when dtrace is not available +# +# Portions Copyright (c) 2008-2021, PostgreSQL Global Development Group +# +# +# IDENTIFICATION +# src/backend/utils/Gen_dummy_probes.pl +# +# This program was generated by running perl's s2p over Gen_dummy_probes.sed +# +#------------------------------------------------------------------------- + +# turn off perlcritic for autogenerated code +## no critic + diff --git a/src/backend/utils/Makefile b/src/backend/utils/Makefile index bcf9dd41adfbe..ef8df25482651 100644 --- a/src/backend/utils/Makefile +++ b/src/backend/utils/Makefile @@ -92,10 +92,10 @@ $(top_builddir)/src/include/utils/probes.h: probes.h # Nothing depends on it, so it will never be called unless explicitly requested # The last two lines of the recipe format the script according to our # standard and put back some blank lines for improved readability. -Gen_dummy_probes.pl: Gen_dummy_probes.sed - perl -ni -e ' print; exit if /^\$$0/;' $@ - s2p -f $< | sed -e 1,4d -e '/# #/d' -e '$$d' >> $@ - perltidy --profile=../../tools/pgindent/perltidyrc $@ +Gen_dummy_probes.pl: Gen_dummy_probes.sed Gen_dummy_probes.pl.prolog + cp $(srcdir)/Gen_dummy_probes.pl.prolog $@ + s2p -f $< | sed -e 1,3d -e '/# #/ d' -e '$$d' >> $@ + perltidy --profile=$(srcdir)/../../tools/pgindent/perltidyrc $@ perl -pi -e '!$$lb && ( /^\t+#/ || /^# prototypes/ ) && print qq{\n};'\ -e '$$lb = m/^\n/; ' $@ diff --git a/src/backend/utils/README.Gen_dummy_probes b/src/backend/utils/README.Gen_dummy_probes index 90fec37bce471..e17060ef24804 100644 --- a/src/backend/utils/README.Gen_dummy_probes +++ b/src/backend/utils/README.Gen_dummy_probes @@ -23,3 +23,5 @@ on Fedora it can be installed using `cpan App::s2p` or The Makefile contains a recipe for regenerating Gen_dummy_probes.pl, so all you need to do is once you have s2p installed is `make Gen_dummy_probes.pl` +Note that in a VPATH build this will generate the file in the vpath tree, +not the source tree. From d780d7c0882fe9a385102b292907baaceb505ed0 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 12 May 2021 09:56:34 +0900 Subject: [PATCH 285/671] Change data type of counters in BufferUsage and WalUsage from long to int64. Previously long was used as the data type for some counters in BufferUsage and WalUsage. But long is only four byte, e.g., on Windows, and it's entirely possible to wrap a four byte counter. For example, emitting more than four billion WAL records in one transaction isn't actually particularly rare. To avoid the overflows of those counters, this commit changes the data type of them from long to int64. Suggested-by: Andres Freund Author: Masahiro Ikeda Reviewed-by: Fujii Masao Discussion: https://postgr.es/m/20201221211650.k7b53tcnadrciqjo@alap3.anarazel.de Discussion: https://postgr.es/m/af0964ac-7080-1984-dc23-513754987716@oss.nttdata.com --- src/backend/access/heap/vacuumlazy.c | 6 ++-- src/backend/commands/explain.c | 48 ++++++++++++++-------------- src/include/executor/instrument.h | 24 +++++++------- 3 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 47ac6385d1212..4b4db4c81b5e6 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -830,9 +830,9 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, } appendStringInfo(&buf, _("system usage: %s\n"), pg_rusage_show(&ru0)); appendStringInfo(&buf, - _("WAL usage: %ld records, %ld full page images, %llu bytes"), - walusage.wal_records, - walusage.wal_fpi, + _("WAL usage: %lld records, %lld full page images, %llu bytes"), + (long long) walusage.wal_records, + (long long) walusage.wal_fpi, (unsigned long long) walusage.wal_bytes); ereport(LOG, diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 8ab7bca866b04..9867da83bca0d 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -3526,17 +3526,17 @@ show_buffer_usage(ExplainState *es, const BufferUsage *usage, bool planning) { appendStringInfoString(es->str, " shared"); if (usage->shared_blks_hit > 0) - appendStringInfo(es->str, " hit=%ld", - usage->shared_blks_hit); + appendStringInfo(es->str, " hit=%lld", + (long long) usage->shared_blks_hit); if (usage->shared_blks_read > 0) - appendStringInfo(es->str, " read=%ld", - usage->shared_blks_read); + appendStringInfo(es->str, " read=%lld", + (long long) usage->shared_blks_read); if (usage->shared_blks_dirtied > 0) - appendStringInfo(es->str, " dirtied=%ld", - usage->shared_blks_dirtied); + appendStringInfo(es->str, " dirtied=%lld", + (long long) usage->shared_blks_dirtied); if (usage->shared_blks_written > 0) - appendStringInfo(es->str, " written=%ld", - usage->shared_blks_written); + appendStringInfo(es->str, " written=%lld", + (long long) usage->shared_blks_written); if (has_local || has_temp) appendStringInfoChar(es->str, ','); } @@ -3544,17 +3544,17 @@ show_buffer_usage(ExplainState *es, const BufferUsage *usage, bool planning) { appendStringInfoString(es->str, " local"); if (usage->local_blks_hit > 0) - appendStringInfo(es->str, " hit=%ld", - usage->local_blks_hit); + appendStringInfo(es->str, " hit=%lld", + (long long) usage->local_blks_hit); if (usage->local_blks_read > 0) - appendStringInfo(es->str, " read=%ld", - usage->local_blks_read); + appendStringInfo(es->str, " read=%lld", + (long long) usage->local_blks_read); if (usage->local_blks_dirtied > 0) - appendStringInfo(es->str, " dirtied=%ld", - usage->local_blks_dirtied); + appendStringInfo(es->str, " dirtied=%lld", + (long long) usage->local_blks_dirtied); if (usage->local_blks_written > 0) - appendStringInfo(es->str, " written=%ld", - usage->local_blks_written); + appendStringInfo(es->str, " written=%lld", + (long long) usage->local_blks_written); if (has_temp) appendStringInfoChar(es->str, ','); } @@ -3562,11 +3562,11 @@ show_buffer_usage(ExplainState *es, const BufferUsage *usage, bool planning) { appendStringInfoString(es->str, " temp"); if (usage->temp_blks_read > 0) - appendStringInfo(es->str, " read=%ld", - usage->temp_blks_read); + appendStringInfo(es->str, " read=%lld", + (long long) usage->temp_blks_read); if (usage->temp_blks_written > 0) - appendStringInfo(es->str, " written=%ld", - usage->temp_blks_written); + appendStringInfo(es->str, " written=%lld", + (long long) usage->temp_blks_written); } appendStringInfoChar(es->str, '\n'); } @@ -3638,11 +3638,11 @@ show_wal_usage(ExplainState *es, const WalUsage *usage) appendStringInfoString(es->str, "WAL:"); if (usage->wal_records > 0) - appendStringInfo(es->str, " records=%ld", - usage->wal_records); + appendStringInfo(es->str, " records=%lld", + (long long) usage->wal_records); if (usage->wal_fpi > 0) - appendStringInfo(es->str, " fpi=%ld", - usage->wal_fpi); + appendStringInfo(es->str, " fpi=%lld", + (long long) usage->wal_fpi); if (usage->wal_bytes > 0) appendStringInfo(es->str, " bytes=" UINT64_FORMAT, usage->wal_bytes); diff --git a/src/include/executor/instrument.h b/src/include/executor/instrument.h index aa8eceda5f411..c25aa1b04c2c2 100644 --- a/src/include/executor/instrument.h +++ b/src/include/executor/instrument.h @@ -18,24 +18,24 @@ typedef struct BufferUsage { - long shared_blks_hit; /* # of shared buffer hits */ - long shared_blks_read; /* # of shared disk blocks read */ - long shared_blks_dirtied; /* # of shared blocks dirtied */ - long shared_blks_written; /* # of shared disk blocks written */ - long local_blks_hit; /* # of local buffer hits */ - long local_blks_read; /* # of local disk blocks read */ - long local_blks_dirtied; /* # of local blocks dirtied */ - long local_blks_written; /* # of local disk blocks written */ - long temp_blks_read; /* # of temp blocks read */ - long temp_blks_written; /* # of temp blocks written */ + int64 shared_blks_hit; /* # of shared buffer hits */ + int64 shared_blks_read; /* # of shared disk blocks read */ + int64 shared_blks_dirtied; /* # of shared blocks dirtied */ + int64 shared_blks_written; /* # of shared disk blocks written */ + int64 local_blks_hit; /* # of local buffer hits */ + int64 local_blks_read; /* # of local disk blocks read */ + int64 local_blks_dirtied; /* # of local blocks dirtied */ + int64 local_blks_written; /* # of local disk blocks written */ + int64 temp_blks_read; /* # of temp blocks read */ + int64 temp_blks_written; /* # of temp blocks written */ instr_time blk_read_time; /* time spent reading */ instr_time blk_write_time; /* time spent writing */ } BufferUsage; typedef struct WalUsage { - long wal_records; /* # of WAL records produced */ - long wal_fpi; /* # of WAL full page images produced */ + int64 wal_records; /* # of WAL records produced */ + int64 wal_fpi; /* # of WAL full page images produced */ uint64 wal_bytes; /* size of WAL records produced */ } WalUsage; From e135743ef07ea59088d09c459f41ee2eaabe95c3 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 11 May 2021 20:59:45 -0400 Subject: [PATCH 286/671] Reduce runtime of privileges.sql test under CLOBBER_CACHE_ALWAYS. Several queries in the privileges regression test cause the planner to apply the plpgsql function "leak()" to every element of the histogram for atest12.b. Since commit 0c882e52a increased the size of that histogram to 10000 entries, the test invokes that function over 100000 times, which takes an absolutely unreasonable amount of time in clobber-cache-always mode. However, there's no real reason why that has to be a plpgsql function: for the purposes of this test, all that matters is that it not be marked leakproof. So we can replace the plpgsql implementation with a direct call of int4lt, which has the same behavior and is orders of magnitude faster. This is expected to cut several hours off the buildfarm cycle time for CCA animals. It has some positive impact in normal builds too, though that's probably lost in the noise. Back-patch to v13 where 0c882e52a came in. Discussion: https://postgr.es/m/575884.1620626638@sss.pgh.pa.us --- src/test/regress/expected/privileges.out | 8 +++++--- src/test/regress/sql/privileges.sql | 9 ++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/test/regress/expected/privileges.out b/src/test/regress/expected/privileges.out index 1b4fc16644d2c..83cff902f31e0 100644 --- a/src/test/regress/expected/privileges.out +++ b/src/test/regress/expected/privileges.out @@ -38,6 +38,11 @@ ALTER GROUP regress_priv_group2 ADD USER regress_priv_user2; -- duplicate NOTICE: role "regress_priv_user2" is already a member of role "regress_priv_group2" ALTER GROUP regress_priv_group2 DROP USER regress_priv_user2; GRANT regress_priv_group2 TO regress_priv_user4 WITH ADMIN OPTION; +-- prepare non-leakproof function for later +CREATE FUNCTION leak(integer,integer) RETURNS boolean + AS 'int4lt' + LANGUAGE internal IMMUTABLE STRICT; -- but deliberately not LEAKPROOF +ALTER FUNCTION leak(integer,integer) OWNER TO regress_priv_user1; -- test owner privileges SET SESSION AUTHORIZATION regress_priv_user1; SELECT session_user, current_user; @@ -233,9 +238,6 @@ ALTER TABLE atest12 SET (autovacuum_enabled = off); SET default_statistics_target = 10000; VACUUM ANALYZE atest12; RESET default_statistics_target; -CREATE FUNCTION leak(integer,integer) RETURNS boolean - AS $$begin return $1 < $2; end$$ - LANGUAGE plpgsql immutable; CREATE OPERATOR <<< (procedure = leak, leftarg = integer, rightarg = integer, restrict = scalarltsel); -- views with leaky operator diff --git a/src/test/regress/sql/privileges.sql b/src/test/regress/sql/privileges.sql index 013bc95c74bd2..3d1a1db987083 100644 --- a/src/test/regress/sql/privileges.sql +++ b/src/test/regress/sql/privileges.sql @@ -45,6 +45,12 @@ ALTER GROUP regress_priv_group2 ADD USER regress_priv_user2; -- duplicate ALTER GROUP regress_priv_group2 DROP USER regress_priv_user2; GRANT regress_priv_group2 TO regress_priv_user4 WITH ADMIN OPTION; +-- prepare non-leakproof function for later +CREATE FUNCTION leak(integer,integer) RETURNS boolean + AS 'int4lt' + LANGUAGE internal IMMUTABLE STRICT; -- but deliberately not LEAKPROOF +ALTER FUNCTION leak(integer,integer) OWNER TO regress_priv_user1; + -- test owner privileges SET SESSION AUTHORIZATION regress_priv_user1; @@ -166,9 +172,6 @@ SET default_statistics_target = 10000; VACUUM ANALYZE atest12; RESET default_statistics_target; -CREATE FUNCTION leak(integer,integer) RETURNS boolean - AS $$begin return $1 < $2; end$$ - LANGUAGE plpgsql immutable; CREATE OPERATOR <<< (procedure = leak, leftarg = integer, rightarg = integer, restrict = scalarltsel); From a363bc6da96b14d27e1cae1bae97242eb6ade5e6 Mon Sep 17 00:00:00 2001 From: Etsuro Fujita Date: Wed, 12 May 2021 14:00:00 +0900 Subject: [PATCH 287/671] Fix EXPLAIN ANALYZE for async-capable nodes. EXPLAIN ANALYZE for an async-capable ForeignScan node associated with postgres_fdw is done just by using instrumentation for ExecProcNode() called from the node's callbacks, causing the following problems: 1) If the remote table to scan is empty, the node is incorrectly considered as "never executed" by the command even if the node is executed, as ExecProcNode() isn't called from the node's callbacks at all in that case. 2) The command fails to collect timings for things other than ExecProcNode() done in the node, such as creating a cursor for the node's remote query. To fix these problems, add instrumentation for async-capable nodes, and modify postgres_fdw accordingly. My oversight in commit 27e1f1456. While at it, update a comment for the AsyncRequest struct in execnodes.h and the documentation for the ForeignAsyncRequest API in fdwhandler.sgml to match the code in ExecAsyncAppendResponse() in nodeAppend.c, and fix typos in comments in nodeAppend.c. Per report from Andrey Lepikhov, though I didn't use his patch. Reviewed-by: Andrey Lepikhov Discussion: https://postgr.es/m/2eb662bb-105d-fc20-7412-2f027cc3ca72%40postgrespro.ru --- contrib/auto_explain/auto_explain.c | 2 +- .../pg_stat_statements/pg_stat_statements.c | 2 +- .../postgres_fdw/expected/postgres_fdw.out | 39 ++++++++++++++++--- contrib/postgres_fdw/postgres_fdw.c | 9 ++++- contrib/postgres_fdw/sql/postgres_fdw.sql | 21 +++++++--- doc/src/sgml/fdwhandler.sgml | 2 +- src/backend/executor/execAsync.c | 30 ++++++++++++++ src/backend/executor/execMain.c | 2 +- src/backend/executor/execProcnode.c | 3 +- src/backend/executor/instrument.c | 21 +++++++++- src/backend/executor/nodeAppend.c | 12 +++--- src/backend/executor/nodeForeignscan.c | 7 ++++ src/include/executor/instrument.h | 5 ++- src/include/nodes/execnodes.h | 5 ++- 14 files changed, 134 insertions(+), 26 deletions(-) diff --git a/contrib/auto_explain/auto_explain.c b/contrib/auto_explain/auto_explain.c index 445bb37191217..e9092ba359ad8 100644 --- a/contrib/auto_explain/auto_explain.c +++ b/contrib/auto_explain/auto_explain.c @@ -314,7 +314,7 @@ explain_ExecutorStart(QueryDesc *queryDesc, int eflags) MemoryContext oldcxt; oldcxt = MemoryContextSwitchTo(queryDesc->estate->es_query_cxt); - queryDesc->totaltime = InstrAlloc(1, INSTRUMENT_ALL); + queryDesc->totaltime = InstrAlloc(1, INSTRUMENT_ALL, false); MemoryContextSwitchTo(oldcxt); } } diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index f42f07622e942..77ca5abcdc85d 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -974,7 +974,7 @@ pgss_ExecutorStart(QueryDesc *queryDesc, int eflags) MemoryContext oldcxt; oldcxt = MemoryContextSwitchTo(queryDesc->estate->es_query_cxt); - queryDesc->totaltime = InstrAlloc(1, INSTRUMENT_ALL); + queryDesc->totaltime = InstrAlloc(1, INSTRUMENT_ALL, false); MemoryContextSwitchTo(oldcxt); } } diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 6f533c745d696..0b0c45f0d9a18 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -10051,6 +10051,21 @@ SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1; Filter: (t1_3.b === 505) (14 rows) +EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) +SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1; + QUERY PLAN +------------------------------------------------------------------------- + Limit (actual rows=1 loops=1) + -> Append (actual rows=1 loops=1) + -> Async Foreign Scan on async_p1 t1_1 (actual rows=0 loops=1) + Filter: (b === 505) + -> Async Foreign Scan on async_p2 t1_2 (actual rows=0 loops=1) + Filter: (b === 505) + -> Seq Scan on async_p3 t1_3 (actual rows=1 loops=1) + Filter: (b === 505) + Rows Removed by Filter: 101 +(9 rows) + SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1; a | b | c ------+-----+------ @@ -10132,18 +10147,32 @@ SELECT * FROM join_tbl ORDER BY a1; (3 rows) DELETE FROM join_tbl; +DROP TABLE local_tbl; +DROP FOREIGN TABLE remote_tbl; +DROP FOREIGN TABLE insert_tbl; +DROP TABLE base_tbl3; +DROP TABLE base_tbl4; RESET enable_mergejoin; RESET enable_hashjoin; +-- Check EXPLAIN ANALYZE for a query that scans empty partitions asynchronously +DELETE FROM async_p1; +DELETE FROM async_p2; +DELETE FROM async_p3; +EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) +SELECT * FROM async_pt; + QUERY PLAN +------------------------------------------------------------------------- + Append (actual rows=0 loops=1) + -> Async Foreign Scan on async_p1 async_pt_1 (actual rows=0 loops=1) + -> Async Foreign Scan on async_p2 async_pt_2 (actual rows=0 loops=1) + -> Seq Scan on async_p3 async_pt_3 (actual rows=0 loops=1) +(4 rows) + -- Clean up DROP TABLE async_pt; DROP TABLE base_tbl1; DROP TABLE base_tbl2; DROP TABLE result_tbl; -DROP TABLE local_tbl; -DROP FOREIGN TABLE remote_tbl; -DROP FOREIGN TABLE insert_tbl; -DROP TABLE base_tbl3; -DROP TABLE base_tbl4; DROP TABLE join_tbl; ALTER SERVER loopback OPTIONS (DROP async_capable); ALTER SERVER loopback2 OPTIONS (DROP async_capable); diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index 4ff58d9c2756c..ee93ee07cc473 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -1542,7 +1542,7 @@ postgresBeginForeignScan(ForeignScanState *node, int eflags) &fsstate->param_values); /* Set the async-capable flag */ - fsstate->async_capable = node->ss.ps.plan->async_capable; + fsstate->async_capable = node->ss.ps.async_capable; } /* @@ -6867,7 +6867,7 @@ produce_tuple_asynchronously(AsyncRequest *areq, bool fetch) } /* Get a tuple from the ForeignScan node */ - result = ExecProcNode((PlanState *) node); + result = areq->requestee->ExecProcNodeReal(areq->requestee); if (!TupIsNull(result)) { /* Mark the request as complete */ @@ -6956,6 +6956,11 @@ process_pending_request(AsyncRequest *areq) /* Unlike AsyncNotify, we call ExecAsyncResponse ourselves */ ExecAsyncResponse(areq); + /* Also, we do instrumentation ourselves, if required */ + if (areq->requestee->instrument) + InstrUpdateTupleCount(areq->requestee->instrument, + TupIsNull(areq->result) ? 0.0 : 1.0); + MemoryContextSwitchTo(oldcontext); } diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 000e2534fc8ab..53adfe2abc895 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -3195,6 +3195,8 @@ SELECT * FROM async_pt t1, async_p2 t2 WHERE t1.a = t2.a AND t1.b === 505; EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1; +EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) +SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1; SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1; -- Check with foreign modify @@ -3226,19 +3228,28 @@ INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND SELECT * FROM join_tbl ORDER BY a1; DELETE FROM join_tbl; +DROP TABLE local_tbl; +DROP FOREIGN TABLE remote_tbl; +DROP FOREIGN TABLE insert_tbl; +DROP TABLE base_tbl3; +DROP TABLE base_tbl4; + RESET enable_mergejoin; RESET enable_hashjoin; +-- Check EXPLAIN ANALYZE for a query that scans empty partitions asynchronously +DELETE FROM async_p1; +DELETE FROM async_p2; +DELETE FROM async_p3; + +EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) +SELECT * FROM async_pt; + -- Clean up DROP TABLE async_pt; DROP TABLE base_tbl1; DROP TABLE base_tbl2; DROP TABLE result_tbl; -DROP TABLE local_tbl; -DROP FOREIGN TABLE remote_tbl; -DROP FOREIGN TABLE insert_tbl; -DROP TABLE base_tbl3; -DROP TABLE base_tbl4; DROP TABLE join_tbl; ALTER SERVER loopback OPTIONS (DROP async_capable); diff --git a/doc/src/sgml/fdwhandler.sgml b/doc/src/sgml/fdwhandler.sgml index 8aa7edfe4af10..d1194def8200d 100644 --- a/doc/src/sgml/fdwhandler.sgml +++ b/doc/src/sgml/fdwhandler.sgml @@ -1597,7 +1597,7 @@ ForeignAsyncRequest(AsyncRequest *areq); areq->callback_pending to true for the ForeignScan node to get a callback from the callback functions described below. If no more tuples are available, - set the slot to NULL, and the + set the slot to NULL or an empty slot, and the areq->request_complete flag to true. It's recommended to use ExecAsyncRequestDone or diff --git a/src/backend/executor/execAsync.c b/src/backend/executor/execAsync.c index f1985e658c4b7..75108d36be20e 100644 --- a/src/backend/executor/execAsync.c +++ b/src/backend/executor/execAsync.c @@ -15,6 +15,7 @@ #include "postgres.h" #include "executor/execAsync.h" +#include "executor/executor.h" #include "executor/nodeAppend.h" #include "executor/nodeForeignscan.h" @@ -24,6 +25,13 @@ void ExecAsyncRequest(AsyncRequest *areq) { + if (areq->requestee->chgParam != NULL) /* something changed? */ + ExecReScan(areq->requestee); /* let ReScan handle this */ + + /* must provide our own instrumentation support */ + if (areq->requestee->instrument) + InstrStartNode(areq->requestee->instrument); + switch (nodeTag(areq->requestee)) { case T_ForeignScanState: @@ -36,6 +44,11 @@ ExecAsyncRequest(AsyncRequest *areq) } ExecAsyncResponse(areq); + + /* must provide our own instrumentation support */ + if (areq->requestee->instrument) + InstrStopNode(areq->requestee->instrument, + TupIsNull(areq->result) ? 0.0 : 1.0); } /* @@ -48,6 +61,10 @@ ExecAsyncRequest(AsyncRequest *areq) void ExecAsyncConfigureWait(AsyncRequest *areq) { + /* must provide our own instrumentation support */ + if (areq->requestee->instrument) + InstrStartNode(areq->requestee->instrument); + switch (nodeTag(areq->requestee)) { case T_ForeignScanState: @@ -58,6 +75,10 @@ ExecAsyncConfigureWait(AsyncRequest *areq) elog(ERROR, "unrecognized node type: %d", (int) nodeTag(areq->requestee)); } + + /* must provide our own instrumentation support */ + if (areq->requestee->instrument) + InstrStopNode(areq->requestee->instrument, 0.0); } /* @@ -66,6 +87,10 @@ ExecAsyncConfigureWait(AsyncRequest *areq) void ExecAsyncNotify(AsyncRequest *areq) { + /* must provide our own instrumentation support */ + if (areq->requestee->instrument) + InstrStartNode(areq->requestee->instrument); + switch (nodeTag(areq->requestee)) { case T_ForeignScanState: @@ -78,6 +103,11 @@ ExecAsyncNotify(AsyncRequest *areq) } ExecAsyncResponse(areq); + + /* must provide our own instrumentation support */ + if (areq->requestee->instrument) + InstrStopNode(areq->requestee->instrument, + TupIsNull(areq->result) ? 0.0 : 1.0); } /* diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index df3d7f9a8bced..58b496873507b 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -1214,7 +1214,7 @@ InitResultRelInfo(ResultRelInfo *resultRelInfo, resultRelInfo->ri_TrigWhenExprs = (ExprState **) palloc0(n * sizeof(ExprState *)); if (instrument_options) - resultRelInfo->ri_TrigInstrument = InstrAlloc(n, instrument_options); + resultRelInfo->ri_TrigInstrument = InstrAlloc(n, instrument_options, false); } else { diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c index 9f8c7582e04eb..753f46863b723 100644 --- a/src/backend/executor/execProcnode.c +++ b/src/backend/executor/execProcnode.c @@ -407,7 +407,8 @@ ExecInitNode(Plan *node, EState *estate, int eflags) /* Set up instrumentation for this node if requested */ if (estate->es_instrument) - result->instrument = InstrAlloc(1, estate->es_instrument); + result->instrument = InstrAlloc(1, estate->es_instrument, + result->async_capable); return result; } diff --git a/src/backend/executor/instrument.c b/src/backend/executor/instrument.c index 237e13361b5d0..2b106d8473ce5 100644 --- a/src/backend/executor/instrument.c +++ b/src/backend/executor/instrument.c @@ -28,7 +28,7 @@ static void WalUsageAdd(WalUsage *dst, WalUsage *add); /* Allocate new instrumentation structure(s) */ Instrumentation * -InstrAlloc(int n, int instrument_options) +InstrAlloc(int n, int instrument_options, bool async_mode) { Instrumentation *instr; @@ -46,6 +46,7 @@ InstrAlloc(int n, int instrument_options) instr[i].need_bufusage = need_buffers; instr[i].need_walusage = need_wal; instr[i].need_timer = need_timer; + instr[i].async_mode = async_mode; } } @@ -82,6 +83,7 @@ InstrStartNode(Instrumentation *instr) void InstrStopNode(Instrumentation *instr, double nTuples) { + double save_tuplecount = instr->tuplecount; instr_time endtime; /* count the returned tuples */ @@ -114,6 +116,23 @@ InstrStopNode(Instrumentation *instr, double nTuples) instr->running = true; instr->firsttuple = INSTR_TIME_GET_DOUBLE(instr->counter); } + else + { + /* + * In async mode, if the plan node hadn't emitted any tuples before, + * this might be the first tuple + */ + if (instr->async_mode && save_tuplecount < 1.0) + instr->firsttuple = INSTR_TIME_GET_DOUBLE(instr->counter); + } +} + +/* Update tuple count */ +void +InstrUpdateTupleCount(Instrumentation *instr, double nTuples) +{ + /* count the returned tuples */ + instr->tuplecount += nTuples; } /* Finish a run cycle for a plan node */ diff --git a/src/backend/executor/nodeAppend.c b/src/backend/executor/nodeAppend.c index 3c1f12adafb54..1558fafad1e5e 100644 --- a/src/backend/executor/nodeAppend.c +++ b/src/backend/executor/nodeAppend.c @@ -362,9 +362,9 @@ ExecAppend(PlanState *pstate) } /* - * wait or poll async events if any. We do this before checking for - * the end of iteration, because it might drain the remaining async - * subplans. + * wait or poll for async events if any. We do this before checking + * for the end of iteration, because it might drain the remaining + * async subplans. */ if (node->as_nasyncremain > 0) ExecAppendAsyncEventWait(node); @@ -440,7 +440,7 @@ ExecReScanAppend(AppendState *node) /* * If chgParam of subnode is not null then plan will be re-scanned by - * first ExecProcNode. + * first ExecProcNode or by first ExecAsyncRequest. */ if (subnode->chgParam == NULL) ExecReScan(subnode); @@ -911,7 +911,7 @@ ExecAppendAsyncGetNext(AppendState *node, TupleTableSlot **result) { CHECK_FOR_INTERRUPTS(); - /* Wait or poll async events. */ + /* Wait or poll for async events. */ ExecAppendAsyncEventWait(node); /* Request a tuple asynchronously. */ @@ -1084,7 +1084,7 @@ ExecAsyncAppendResponse(AsyncRequest *areq) /* Nothing to do if the request is pending. */ if (!areq->request_complete) { - /* The request would have been pending for a callback */ + /* The request would have been pending for a callback. */ Assert(areq->callback_pending); return; } diff --git a/src/backend/executor/nodeForeignscan.c b/src/backend/executor/nodeForeignscan.c index 898890fb08faf..9dc38d47ea78a 100644 --- a/src/backend/executor/nodeForeignscan.c +++ b/src/backend/executor/nodeForeignscan.c @@ -209,6 +209,13 @@ ExecInitForeignScan(ForeignScan *node, EState *estate, int eflags) scanstate->fdw_recheck_quals = ExecInitQual(node->fdw_recheck_quals, (PlanState *) scanstate); + /* + * Determine whether to scan the foreign relation asynchronously or not; + * this has to be kept in sync with the code in ExecInitAppend(). + */ + scanstate->ss.ps.async_capable = (((Plan *) node)->async_capable && + estate->es_epq_active == NULL); + /* * Initialize FDW-related state. */ diff --git a/src/include/executor/instrument.h b/src/include/executor/instrument.h index c25aa1b04c2c2..fc87eed4fb237 100644 --- a/src/include/executor/instrument.h +++ b/src/include/executor/instrument.h @@ -55,6 +55,7 @@ typedef struct Instrumentation bool need_timer; /* true if we need timer data */ bool need_bufusage; /* true if we need buffer usage data */ bool need_walusage; /* true if we need WAL usage data */ + bool async_mode; /* true if node is in async mode */ /* Info about current plan cycle: */ bool running; /* true if we've completed first tuple */ instr_time starttime; /* start time of current iteration of node */ @@ -84,10 +85,12 @@ typedef struct WorkerInstrumentation extern PGDLLIMPORT BufferUsage pgBufferUsage; extern PGDLLIMPORT WalUsage pgWalUsage; -extern Instrumentation *InstrAlloc(int n, int instrument_options); +extern Instrumentation *InstrAlloc(int n, int instrument_options, + bool async_mode); extern void InstrInit(Instrumentation *instr, int instrument_options); extern void InstrStartNode(Instrumentation *instr); extern void InstrStopNode(Instrumentation *instr, double nTuples); +extern void InstrUpdateTupleCount(Instrumentation *instr, double nTuples); extern void InstrEndLoop(Instrumentation *instr); extern void InstrAggNode(Instrumentation *dst, Instrumentation *add); extern void InstrStartParallelQuery(void); diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index e7ae21c023c95..91a1c3a780ee0 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -538,7 +538,8 @@ typedef struct AsyncRequest int request_index; /* Scratch space for requestor */ bool callback_pending; /* Callback is needed */ bool request_complete; /* Request complete, result valid */ - TupleTableSlot *result; /* Result (NULL if no more tuples) */ + TupleTableSlot *result; /* Result (NULL or an empty slot if no more + * tuples) */ } AsyncRequest; /* ---------------- @@ -1003,6 +1004,8 @@ typedef struct PlanState ExprContext *ps_ExprContext; /* node's expression-evaluation context */ ProjectionInfo *ps_ProjInfo; /* info for doing tuple projection */ + bool async_capable; /* true if node is async-capable */ + /* * Scanslot's descriptor if known. This is a bit of a hack, but otherwise * it's hard for expression compilation to optimize based on the From ec6e70c79fffe9292402ee602d3742a8c7d31bd2 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 12 May 2021 07:20:10 +0200 Subject: [PATCH 288/671] Refactor some error messages for easier translation --- src/backend/access/common/toast_compression.c | 2 +- src/backend/parser/parse_coerce.c | 12 ++++++------ src/backend/utils/adt/pg_locale.c | 2 +- src/backend/utils/adt/xml.c | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/backend/access/common/toast_compression.c b/src/backend/access/common/toast_compression.c index 52dedac263d71..682fd70e2ef9b 100644 --- a/src/backend/access/common/toast_compression.c +++ b/src/backend/access/common/toast_compression.c @@ -31,7 +31,7 @@ int default_toast_compression = TOAST_PGLZ_COMPRESSION; (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), \ errmsg("unsupported LZ4 compression method"), \ errdetail("This functionality requires the server to be built with lz4 support."), \ - errhint("You need to rebuild PostgreSQL using --with-lz4."))) + errhint("You need to rebuild PostgreSQL using %s.", "--with-lz4"))) /* * Compress a varlena using PGLZ. diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c index aa4a21126d32b..7e963b8895239 100644 --- a/src/backend/parser/parse_coerce.c +++ b/src/backend/parser/parse_coerce.c @@ -2086,7 +2086,7 @@ enforce_generic_type_consistency(const Oid *actual_arg_types, if (OidIsValid(elem_typeid) && actual_type != elem_typeid) ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), - errmsg("arguments declared \"anyelement\" are not all alike"), + errmsg("arguments declared \"%s\" are not all alike", "anyelement"), errdetail("%s versus %s", format_type_be(elem_typeid), format_type_be(actual_type)))); @@ -2106,7 +2106,7 @@ enforce_generic_type_consistency(const Oid *actual_arg_types, if (OidIsValid(array_typeid) && actual_type != array_typeid) ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), - errmsg("arguments declared \"anyarray\" are not all alike"), + errmsg("arguments declared \"%s\" are not all alike", "anyarray"), errdetail("%s versus %s", format_type_be(array_typeid), format_type_be(actual_type)))); @@ -2126,7 +2126,7 @@ enforce_generic_type_consistency(const Oid *actual_arg_types, if (OidIsValid(range_typeid) && actual_type != range_typeid) ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), - errmsg("arguments declared \"anyrange\" are not all alike"), + errmsg("arguments declared \"%s\" are not all alike", "anyrange"), errdetail("%s versus %s", format_type_be(range_typeid), format_type_be(actual_type)))); @@ -2146,7 +2146,7 @@ enforce_generic_type_consistency(const Oid *actual_arg_types, if (OidIsValid(multirange_typeid) && actual_type != multirange_typeid) ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), - errmsg("arguments declared \"anymultirange\" are not all alike"), + errmsg("arguments declared \"%s\" are not all alike", "anymultirange"), errdetail("%s versus %s", format_type_be(multirange_typeid), format_type_be(actual_type)))); @@ -2201,7 +2201,7 @@ enforce_generic_type_consistency(const Oid *actual_arg_types, if (anycompatible_range_typeid != actual_type) ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), - errmsg("arguments declared \"anycompatiblerange\" are not all alike"), + errmsg("arguments declared \"%s\" are not all alike", "anycompatiblerange"), errdetail("%s versus %s", format_type_be(anycompatible_range_typeid), format_type_be(actual_type)))); @@ -2234,7 +2234,7 @@ enforce_generic_type_consistency(const Oid *actual_arg_types, if (anycompatible_multirange_typeid != actual_type) ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), - errmsg("arguments declared \"anycompatiblemultirange\" are not all alike"), + errmsg("arguments declared \"%s\" are not all alike", "anycompatiblemultirange"), errdetail("%s versus %s", format_type_be(anycompatible_multirange_typeid), format_type_be(actual_type)))); diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index eab089f252f7d..caa09d6373e93 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -1586,7 +1586,7 @@ pg_newlocale_from_collation(Oid collid) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("ICU is not supported in this build"), \ - errhint("You need to rebuild PostgreSQL using --with-icu."))); + errhint("You need to rebuild PostgreSQL using %s.", "--with-icu"))); #endif /* not USE_ICU */ } diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c index 7350940b66dcd..3ae5cfac9e0f0 100644 --- a/src/backend/utils/adt/xml.c +++ b/src/backend/utils/adt/xml.c @@ -221,7 +221,7 @@ const TableFuncRoutine XmlTableRoutine = (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), \ errmsg("unsupported XML feature"), \ errdetail("This functionality requires the server to be built with libxml support."), \ - errhint("You need to rebuild PostgreSQL using --with-libxml."))) + errhint("You need to rebuild PostgreSQL using %s.", "--with-libxml"))) /* from SQL/XML:2008 section 4.9 */ From e6ccd1ce1644d1b40b7981f8bc172394de524f99 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 12 May 2021 14:54:02 +0900 Subject: [PATCH 289/671] Simplify one use of ScanKey in pg_subscription.c The section of the code in charge of returning all the relations associated to a subscription only need one ScanKey, but allocated two of them. This code was introduced as a copy-paste from a different area on the same file by 7c4f524, making the result confusing to follow. Author: Peter Smith Reviewed-by: Tom Lane, Julien Rouhaud, Bharath Rupireddy Discussion: https://postgr.es/m/CAHut+PsLKe+rN3FjchoJsd76rx2aMsFTB7CTFxRgUP05p=kcpQ@mail.gmail.com --- src/backend/catalog/pg_subscription.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/backend/catalog/pg_subscription.c b/src/backend/catalog/pg_subscription.c index 4039768865194..7db1f7df08ca0 100644 --- a/src/backend/catalog/pg_subscription.c +++ b/src/backend/catalog/pg_subscription.c @@ -461,19 +461,18 @@ GetSubscriptionRelations(Oid subid) List *res = NIL; Relation rel; HeapTuple tup; - int nkeys = 0; - ScanKeyData skey[2]; + ScanKeyData skey[1]; SysScanDesc scan; rel = table_open(SubscriptionRelRelationId, AccessShareLock); - ScanKeyInit(&skey[nkeys++], + ScanKeyInit(&skey[0], Anum_pg_subscription_rel_srsubid, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(subid)); scan = systable_beginscan(rel, InvalidOid, false, - NULL, nkeys, skey); + NULL, 1, skey); while (HeapTupleIsValid(tup = systable_getnext(scan))) { From def5b065ff22a16a80084587613599fe15627213 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 12 May 2021 13:14:10 -0400 Subject: [PATCH 290/671] Initial pgindent and pgperltidy run for v14. Also "make reformat-dat-files". The only change worthy of note is that pgindent messed up the formatting of launcher.c's struct LogicalRepWorkerId, which led me to notice that that struct wasn't used at all anymore, so I just took it out. --- contrib/amcheck/t/001_verify_heapam.pl | 3 +- contrib/amcheck/verify_heapam.c | 39 +- contrib/amcheck/verify_nbtree.c | 16 +- contrib/old_snapshot/time_mapping.c | 29 +- .../pg_stat_statements/pg_stat_statements.c | 7 +- contrib/postgres_fdw/deparse.c | 7 +- contrib/postgres_fdw/postgres_fdw.c | 84 ++-- src/backend/access/brin/brin.c | 18 +- src/backend/access/brin/brin_bloom.c | 8 +- src/backend/access/brin/brin_minmax_multi.c | 38 +- src/backend/access/brin/brin_revmap.c | 1 + src/backend/access/brin/brin_tuple.c | 20 +- src/backend/access/common/indextuple.c | 8 +- src/backend/access/common/toast_compression.c | 12 +- src/backend/access/common/toast_internals.c | 2 +- src/backend/access/common/tupconvert.c | 2 +- src/backend/access/gist/gistproc.c | 4 +- src/backend/access/gist/gistvalidate.c | 2 +- src/backend/access/heap/heapam.c | 71 +-- src/backend/access/heap/heapam_handler.c | 12 +- src/backend/access/heap/heapam_visibility.c | 12 +- src/backend/access/heap/hio.c | 4 +- src/backend/access/heap/pruneheap.c | 4 +- src/backend/access/heap/vacuumlazy.c | 6 +- src/backend/access/index/genam.c | 4 +- src/backend/access/nbtree/nbtpage.c | 30 +- src/backend/access/nbtree/nbtxlog.c | 4 +- src/backend/access/transam/multixact.c | 12 +- src/backend/access/transam/twophase.c | 6 +- src/backend/access/transam/varsup.c | 24 +- src/backend/access/transam/xlog.c | 113 ++--- src/backend/access/transam/xlogfuncs.c | 4 +- src/backend/access/transam/xloginsert.c | 4 +- src/backend/bootstrap/bootstrap.c | 18 +- src/backend/catalog/Catalog.pm | 11 +- src/backend/catalog/aclchk.c | 26 +- src/backend/catalog/dependency.c | 2 +- src/backend/catalog/genbki.pl | 6 +- src/backend/catalog/index.c | 17 +- src/backend/catalog/objectaddress.c | 10 +- src/backend/catalog/pg_inherits.c | 4 +- src/backend/catalog/pg_proc.c | 12 +- src/backend/catalog/pg_shdepend.c | 2 +- src/backend/catalog/pg_subscription.c | 1 + src/backend/catalog/toasting.c | 11 +- src/backend/commands/analyze.c | 15 +- src/backend/commands/copyto.c | 14 +- src/backend/commands/explain.c | 8 +- src/backend/commands/extension.c | 4 +- src/backend/commands/indexcmds.c | 6 +- src/backend/commands/subscriptioncmds.c | 8 +- src/backend/commands/tablecmds.c | 52 +-- src/backend/commands/trigger.c | 2 +- src/backend/commands/typecmds.c | 14 +- src/backend/commands/vacuum.c | 4 +- src/backend/executor/execAmi.c | 1 + src/backend/executor/execAsync.c | 4 +- src/backend/executor/execMain.c | 4 +- src/backend/executor/execPartition.c | 4 +- src/backend/executor/nodeAgg.c | 21 +- src/backend/executor/nodeAppend.c | 16 +- src/backend/executor/nodeGather.c | 4 +- src/backend/executor/nodeGatherMerge.c | 6 +- src/backend/executor/nodeIncrementalSort.c | 4 +- src/backend/executor/nodeModifyTable.c | 66 +-- src/backend/jit/llvm/llvmjit.c | 8 +- src/backend/libpq/auth.c | 9 +- src/backend/libpq/be-secure-openssl.c | 1 + src/backend/libpq/pqcomm.c | 4 +- src/backend/optimizer/plan/createplan.c | 10 +- src/backend/optimizer/prep/preptlist.c | 56 +-- src/backend/optimizer/util/clauses.c | 130 +++--- src/backend/parser/analyze.c | 4 +- src/backend/parser/parse_agg.c | 15 +- src/backend/parser/parse_cte.c | 2 +- src/backend/parser/parse_relation.c | 4 +- src/backend/parser/parse_utilcmd.c | 4 +- src/backend/partitioning/partbounds.c | 9 +- src/backend/partitioning/partdesc.c | 4 +- src/backend/port/win32_shmem.c | 6 +- src/backend/postmaster/bgworker.c | 4 +- src/backend/postmaster/checkpointer.c | 2 +- src/backend/postmaster/pgstat.c | 2 +- src/backend/postmaster/postmaster.c | 3 +- src/backend/postmaster/syslogger.c | 3 +- src/backend/replication/basebackup.c | 2 +- src/backend/replication/logical/launcher.c | 8 +- src/backend/replication/logical/origin.c | 4 +- .../replication/logical/reorderbuffer.c | 10 +- src/backend/replication/logical/snapbuild.c | 4 +- src/backend/replication/slot.c | 50 +- src/backend/replication/slotfuncs.c | 10 +- src/backend/replication/syncrep.c | 13 +- src/backend/replication/walreceiver.c | 4 +- src/backend/replication/walsender.c | 4 +- src/backend/statistics/dependencies.c | 4 +- src/backend/statistics/extended_stats.c | 18 +- src/backend/storage/buffer/bufmgr.c | 4 +- src/backend/storage/file/fd.c | 4 +- src/backend/storage/file/sharedfileset.c | 4 +- src/backend/storage/ipc/latch.c | 6 +- src/backend/storage/ipc/procarray.c | 14 +- src/backend/storage/ipc/procsignal.c | 38 +- src/backend/storage/ipc/signalfuncs.c | 23 +- src/backend/storage/ipc/standby.c | 2 +- src/backend/storage/lmgr/proc.c | 31 +- src/backend/storage/lmgr/spin.c | 2 +- src/backend/storage/page/bufpage.c | 2 +- src/backend/storage/sync/sync.c | 2 +- src/backend/tcop/postgres.c | 10 +- src/backend/utils/activity/backend_progress.c | 2 +- src/backend/utils/activity/backend_status.c | 13 +- src/backend/utils/activity/wait_event.c | 4 +- src/backend/utils/adt/acl.c | 6 +- src/backend/utils/adt/dbsize.c | 14 +- src/backend/utils/adt/genfile.c | 13 +- src/backend/utils/adt/lockfuncs.c | 8 +- src/backend/utils/adt/mcxtfuncs.c | 14 +- src/backend/utils/adt/name.c | 2 +- src/backend/utils/adt/pg_locale.c | 10 +- src/backend/utils/adt/rangetypes_typanalyze.c | 2 +- src/backend/utils/adt/ri_triggers.c | 4 +- src/backend/utils/adt/rowtypes.c | 8 +- src/backend/utils/adt/ruleutils.c | 57 +-- src/backend/utils/adt/selfuncs.c | 16 +- src/backend/utils/adt/timestamp.c | 8 +- src/backend/utils/adt/varlena.c | 2 +- src/backend/utils/cache/inval.c | 35 +- src/backend/utils/cache/plancache.c | 5 +- src/backend/utils/cache/relcache.c | 6 +- src/backend/utils/cache/typcache.c | 6 +- src/backend/utils/error/elog.c | 4 +- src/backend/utils/mb/Unicode/convutils.pm | 2 +- src/backend/utils/misc/guc.c | 7 +- src/backend/utils/misc/queryjumble.c | 20 +- src/backend/utils/sort/logtape.c | 1 + src/backend/utils/time/snapmgr.c | 16 +- src/bin/pg_amcheck/pg_amcheck.c | 4 +- src/bin/pg_amcheck/t/002_nonesuch.pl | 236 +++++----- src/bin/pg_amcheck/t/003_check.pl | 143 +++--- src/bin/pg_amcheck/t/004_verify_heapam.pl | 240 +++++----- src/bin/pg_amcheck/t/005_opclass_damage.pl | 10 +- src/bin/pg_basebackup/t/010_pg_basebackup.pl | 2 +- src/bin/pg_dump/common.c | 2 +- src/bin/pg_dump/pg_backup_archiver.h | 5 +- src/bin/pg_dump/pg_backup_tar.c | 2 +- src/bin/pg_dump/t/010_dump_connstr.pl | 2 +- src/bin/pg_rewind/t/001_basic.pl | 5 +- src/bin/pg_rewind/t/003_extrafiles.pl | 9 +- src/bin/pg_rewind/t/008_min_recovery_point.pl | 41 +- src/bin/pg_rewind/t/RewindTest.pm | 6 +- src/bin/pg_test_fsync/pg_test_fsync.c | 1 + src/bin/pg_upgrade/check.c | 8 +- src/bin/pg_upgrade/exec.c | 10 +- src/bin/pgbench/pgbench.c | 4 +- src/bin/pgbench/t/001_pgbench_with_server.pl | 8 +- src/bin/psql/tab-complete.c | 4 +- src/include/access/brin_tuple.h | 2 +- src/include/access/commit_ts.h | 2 +- src/include/access/nbtree.h | 2 +- src/include/access/relscan.h | 2 +- src/include/access/toast_compression.h | 2 +- src/include/access/transam.h | 2 +- src/include/access/xact.h | 4 +- src/include/catalog/pg_aggregate.dat | 12 +- src/include/catalog/pg_amproc.dat | 273 +++++------ src/include/catalog/pg_collation.h | 6 +- src/include/catalog/pg_opclass.dat | 114 ++--- src/include/catalog/pg_operator.dat | 6 +- src/include/catalog/pg_proc.dat | 435 +++++++++--------- src/include/catalog/pg_type.dat | 27 +- src/include/catalog/renumber_oids.pl | 2 +- src/include/commands/copy.h | 4 +- src/include/commands/copyfrom_internal.h | 16 +- src/include/commands/defrem.h | 2 +- src/include/executor/execAsync.h | 2 +- src/include/executor/functions.h | 2 +- src/include/foreign/fdwapi.h | 8 +- src/include/lib/sort_template.h | 16 +- src/include/nodes/execnodes.h | 14 +- src/include/nodes/parsenodes.h | 2 +- src/include/nodes/pathnodes.h | 4 +- src/include/nodes/plannodes.h | 2 +- src/include/pg_config_manual.h | 4 +- src/include/pgstat.h | 8 +- src/include/storage/fd.h | 7 +- src/include/storage/proc.h | 12 +- src/include/utils/backend_progress.h | 2 +- src/include/utils/backend_status.h | 6 +- src/include/utils/builtins.h | 12 +- src/include/utils/selfuncs.h | 2 +- src/include/utils/wait_event.h | 2 +- src/interfaces/ecpg/preproc/ecpg.c | 1 + src/interfaces/ecpg/preproc/parse.pl | 24 +- src/interfaces/libpq/fe-secure-openssl.c | 8 +- src/interfaces/libpq/fe-trace.c | 2 +- src/port/preadv.c | 4 +- src/test/authentication/t/001_password.pl | 8 +- src/test/kerberos/t/001_auth.pl | 8 +- src/test/modules/commit_ts/t/002_standby.pl | 2 +- src/test/modules/commit_ts/t/003_standby_2.pl | 2 +- .../libpq_pipeline/t/001_libpq_pipeline.pl | 2 +- src/test/perl/PostgresNode.pm | 139 +++--- src/test/perl/PostgresVersion.pm | 10 +- src/test/perl/TestLib.pm | 7 +- src/test/recovery/t/001_stream_rep.pl | 16 +- src/test/recovery/t/003_recovery_targets.pl | 2 +- src/test/recovery/t/007_sync_rep.pl | 2 +- src/test/recovery/t/011_crash_recovery.pl | 2 +- src/test/recovery/t/021_row_visibility.pl | 143 +++--- src/test/recovery/t/022_crash_temp_files.pl | 34 +- src/test/recovery/t/024_archive_recovery.pl | 19 +- src/test/regress/regress.c | 22 +- src/test/ssl/t/001_ssltests.pl | 4 +- src/test/ssl/t/SSLServer.pm | 6 +- src/test/subscription/t/001_rep_changes.pl | 20 +- src/test/subscription/t/004_sync.pl | 11 +- src/test/subscription/t/010_truncate.pl | 3 +- src/test/subscription/t/015_stream.pl | 44 +- src/test/subscription/t/016_stream_subxact.pl | 27 +- src/test/subscription/t/017_stream_ddl.pl | 46 +- .../t/018_stream_subxact_abort.pl | 41 +- .../t/019_stream_subxact_ddl_abort.pl | 26 +- src/test/subscription/t/020_messages.pl | 15 +- src/test/subscription/t/100_bugs.pl | 7 +- src/tools/msvc/Install.pm | 3 +- src/tools/msvc/Mkvcbuild.pm | 23 +- src/tools/msvc/Solution.pm | 2 +- src/tools/msvc/vcregress.pl | 16 +- src/tools/pgindent/typedefs.list | 211 +++++++-- 230 files changed, 2415 insertions(+), 2132 deletions(-) diff --git a/contrib/amcheck/t/001_verify_heapam.pl b/contrib/amcheck/t/001_verify_heapam.pl index f86a932bd07b3..9bd66c07f46f8 100644 --- a/contrib/amcheck/t/001_verify_heapam.pl +++ b/contrib/amcheck/t/001_verify_heapam.pl @@ -51,8 +51,7 @@ # fresh_test_table('test'); $node->safe_psql('postgres', q(VACUUM (FREEZE, DISABLE_PAGE_SKIPPING) test)); -detects_no_corruption( - "verify_heapam('test')", +detects_no_corruption("verify_heapam('test')", "all-frozen not corrupted table"); corrupt_first_page('test'); detects_heap_corruption("verify_heapam('test')", diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c index 36c1b791a22d9..d8b3fd3d4f98b 100644 --- a/contrib/amcheck/verify_heapam.c +++ b/contrib/amcheck/verify_heapam.c @@ -839,13 +839,16 @@ check_tuple_visibility(HeapCheckContext *ctx) return false; case XID_COMMITTED: + /* * The tuple is dead, because the xvac transaction moved - * it off and committed. It's checkable, but also prunable. + * it off and committed. It's checkable, but also + * prunable. */ return true; case XID_ABORTED: + /* * The original xmin must have committed, because the xvac * transaction tried to move it later. Since xvac is @@ -905,6 +908,7 @@ check_tuple_visibility(HeapCheckContext *ctx) return false; case XID_COMMITTED: + /* * The original xmin must have committed, because the xvac * transaction moved it later. Whether it's still alive @@ -913,9 +917,11 @@ check_tuple_visibility(HeapCheckContext *ctx) break; case XID_ABORTED: + /* * The tuple is dead, because the xvac transaction moved - * it off and committed. It's checkable, but also prunable. + * it off and committed. It's checkable, but also + * prunable. */ return true; } @@ -924,12 +930,12 @@ check_tuple_visibility(HeapCheckContext *ctx) { /* * Inserting transaction is not in progress, and not committed, so - * it might have changed the TupleDesc in ways we don't know about. - * Thus, don't try to check the tuple structure. + * it might have changed the TupleDesc in ways we don't know + * about. Thus, don't try to check the tuple structure. * * If xmin_status happens to be XID_IS_CURRENT_XID, then in theory - * any such DDL changes ought to be visible to us, so perhaps - * we could check anyway in that case. But, for now, let's be + * any such DDL changes ought to be visible to us, so perhaps we + * could check anyway in that case. But, for now, let's be * conservative and treat this like any other uncommitted insert. */ return false; @@ -945,18 +951,19 @@ check_tuple_visibility(HeapCheckContext *ctx) { /* * xmax is a multixact, so sanity-check the MXID. Note that we do this - * prior to checking for HEAP_XMAX_INVALID or HEAP_XMAX_IS_LOCKED_ONLY. - * This might therefore complain about things that wouldn't actually - * be a problem during a normal scan, but eventually we're going to - * have to freeze, and that process will ignore hint bits. + * prior to checking for HEAP_XMAX_INVALID or + * HEAP_XMAX_IS_LOCKED_ONLY. This might therefore complain about + * things that wouldn't actually be a problem during a normal scan, + * but eventually we're going to have to freeze, and that process will + * ignore hint bits. * * Even if the MXID is out of range, we still know that the original * insert committed, so we can check the tuple itself. However, we * can't rule out the possibility that this tuple is dead, so don't * clear ctx->tuple_could_be_pruned. Possibly we should go ahead and * clear that flag anyway if HEAP_XMAX_INVALID is set or if - * HEAP_XMAX_IS_LOCKED_ONLY is true, but for now we err on the side - * of avoiding possibly-bogus complaints about missing TOAST entries. + * HEAP_XMAX_IS_LOCKED_ONLY is true, but for now we err on the side of + * avoiding possibly-bogus complaints about missing TOAST entries. */ xmax = HeapTupleHeaderGetRawXmax(tuphdr); switch (check_mxid_valid_in_rel(xmax, ctx)) @@ -1066,9 +1073,10 @@ check_tuple_visibility(HeapCheckContext *ctx) * away depends on how old the deleting transaction is. */ ctx->tuple_could_be_pruned = TransactionIdPrecedes(xmax, - ctx->safe_xmin); + ctx->safe_xmin); break; case XID_ABORTED: + /* * The delete aborted or crashed. The tuple is still live. */ @@ -1127,15 +1135,17 @@ check_tuple_visibility(HeapCheckContext *ctx) break; case XID_COMMITTED: + /* * The delete committed. Whether the toast can be vacuumed away * depends on how old the deleting transaction is. */ ctx->tuple_could_be_pruned = TransactionIdPrecedes(xmax, - ctx->safe_xmin); + ctx->safe_xmin); break; case XID_ABORTED: + /* * The delete aborted or crashed. The tuple is still live. */ @@ -1248,6 +1258,7 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, ta->toast_pointer.va_valueid, chunk_seq, chunksize, expected_size)); } + /* * Check the current attribute as tracked in ctx, recording any corruption * found in ctx->tupstore. diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c index 2c1d5f81a88e3..fdfc320e84f9b 100644 --- a/contrib/amcheck/verify_nbtree.c +++ b/contrib/amcheck/verify_nbtree.c @@ -536,7 +536,7 @@ bt_check_every_level(Relation rel, Relation heaprel, bool heapkeyspace, ereport(DEBUG1, (errcode(ERRCODE_NO_DATA), errmsg_internal("harmless fast root mismatch in index \"%s\"", - RelationGetRelationName(rel)), + RelationGetRelationName(rel)), errdetail_internal("Fast root block %u (level %u) differs from true root block %u (level %u).", metad->btm_fastroot, metad->btm_fastlevel, metad->btm_root, metad->btm_level))); @@ -722,7 +722,7 @@ bt_check_level_from_leftmost(BtreeCheckState *state, BtreeLevel level) ereport(DEBUG1, (errcode(ERRCODE_NO_DATA), errmsg_internal("block %u of index \"%s\" concurrently deleted", - current, RelationGetRelationName(state->rel)))); + current, RelationGetRelationName(state->rel)))); goto nextpage; } else if (nextleveldown.leftmost == InvalidBlockNumber) @@ -918,7 +918,7 @@ bt_recheck_sibling_links(BtreeCheckState *state, Buffer newtargetbuf; Page page; BTPageOpaque opaque; - BlockNumber newtargetblock; + BlockNumber newtargetblock; /* Couple locks in the usual order for nbtree: Left to right */ lbuf = ReadBufferExtended(state->rel, MAIN_FORKNUM, leftcurrent, @@ -980,7 +980,7 @@ bt_recheck_sibling_links(BtreeCheckState *state, ereport(DEBUG1, (errcode(ERRCODE_INTERNAL_ERROR), errmsg_internal("harmless concurrent page split detected in index \"%s\"", - RelationGetRelationName(state->rel)), + RelationGetRelationName(state->rel)), errdetail_internal("Block=%u new right sibling=%u original right sibling=%u.", leftcurrent, newtargetblock, state->targetblock))); @@ -1599,7 +1599,7 @@ bt_right_page_check_scankey(BtreeCheckState *state) ereport(DEBUG2, (errcode(ERRCODE_NO_DATA), errmsg_internal("level %u sibling page in block %u of index \"%s\" was found deleted or half dead", - opaque->btpo_level, targetnext, RelationGetRelationName(state->rel)), + opaque->btpo_level, targetnext, RelationGetRelationName(state->rel)), errdetail_internal("Deleted page found when building scankey from right sibling."))); targetnext = opaque->btpo_next; @@ -1729,8 +1729,8 @@ bt_right_page_check_scankey(BtreeCheckState *state) ereport(DEBUG2, (errcode(ERRCODE_NO_DATA), errmsg_internal("%s block %u of index \"%s\" has no first data item", - P_ISLEAF(opaque) ? "leaf" : "internal", targetnext, - RelationGetRelationName(state->rel)))); + P_ISLEAF(opaque) ? "leaf" : "internal", targetnext, + RelationGetRelationName(state->rel)))); return NULL; } @@ -2278,7 +2278,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit, ereport(DEBUG1, (errcode(ERRCODE_NO_DATA), errmsg_internal("harmless interrupted page split detected in index \"%s\"", - RelationGetRelationName(state->rel)), + RelationGetRelationName(state->rel)), errdetail_internal("Block=%u level=%u left sibling=%u page lsn=%X/%X.", blkno, opaque->btpo_level, opaque->btpo_prev, diff --git a/contrib/old_snapshot/time_mapping.c b/contrib/old_snapshot/time_mapping.c index 3df07177ed661..02acf77b1ad02 100644 --- a/contrib/old_snapshot/time_mapping.c +++ b/contrib/old_snapshot/time_mapping.c @@ -25,11 +25,11 @@ */ typedef struct { - int current_index; - int head_offset; - TimestampTz head_timestamp; - int count_used; - TransactionId xid_by_minute[FLEXIBLE_ARRAY_MEMBER]; + int current_index; + int head_offset; + TimestampTz head_timestamp; + int count_used; + TransactionId xid_by_minute[FLEXIBLE_ARRAY_MEMBER]; } OldSnapshotTimeMapping; #define NUM_TIME_MAPPING_COLUMNS 3 @@ -53,7 +53,7 @@ pg_old_snapshot_time_mapping(PG_FUNCTION_ARGS) if (SRF_IS_FIRSTCALL()) { - MemoryContext oldcontext; + MemoryContext oldcontext; funcctx = SRF_FIRSTCALL_INIT(); oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); @@ -127,24 +127,25 @@ MakeOldSnapshotTimeMappingTupleDesc(void) static HeapTuple MakeOldSnapshotTimeMappingTuple(TupleDesc tupdesc, OldSnapshotTimeMapping *mapping) { - Datum values[NUM_TIME_MAPPING_COLUMNS]; - bool nulls[NUM_TIME_MAPPING_COLUMNS]; - int array_position; - TimestampTz timestamp; + Datum values[NUM_TIME_MAPPING_COLUMNS]; + bool nulls[NUM_TIME_MAPPING_COLUMNS]; + int array_position; + TimestampTz timestamp; /* * Figure out the array position corresponding to the current index. * * Index 0 means the oldest entry in the mapping, which is stored at - * mapping->head_offset. Index 1 means the next-oldest entry, which is a the - * following index, and so on. We wrap around when we reach the end of the array. + * mapping->head_offset. Index 1 means the next-oldest entry, which is a + * the following index, and so on. We wrap around when we reach the end of + * the array. */ array_position = (mapping->head_offset + mapping->current_index) % OLD_SNAPSHOT_TIME_MAP_ENTRIES; /* - * No explicit timestamp is stored for any entry other than the oldest one, - * but each entry corresponds to 1-minute period, so we can just add. + * No explicit timestamp is stored for any entry other than the oldest + * one, but each entry corresponds to 1-minute period, so we can just add. */ timestamp = TimestampTzPlusMilliseconds(mapping->head_timestamp, mapping->current_index * 60000); diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index 77ca5abcdc85d..a85f9628013f2 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -1074,9 +1074,10 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, * Force utility statements to get queryId zero. We do this even in cases * where the statement contains an optimizable statement for which a * queryId could be derived (such as EXPLAIN or DECLARE CURSOR). For such - * cases, runtime control will first go through ProcessUtility and then the - * executor, and we don't want the executor hooks to do anything, since we - * are already measuring the statement's costs at the utility level. + * cases, runtime control will first go through ProcessUtility and then + * the executor, and we don't want the executor hooks to do anything, + * since we are already measuring the statement's costs at the utility + * level. * * Note that this is only done if pg_stat_statements is enabled and * configured to track utility statements, in the unlikely possibility diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c index 7a798530e3a05..31919fda8c61c 100644 --- a/contrib/postgres_fdw/deparse.c +++ b/contrib/postgres_fdw/deparse.c @@ -1779,7 +1779,8 @@ rebuildInsertSql(StringInfo buf, char *orig_query, int values_end_len, int num_cols, int num_rows) { - int i, j; + int i, + j; int pindex; bool first; @@ -1790,8 +1791,8 @@ rebuildInsertSql(StringInfo buf, char *orig_query, appendBinaryStringInfo(buf, orig_query, values_end_len); /* - * Add records to VALUES clause (we already have parameters for the - * first row, so start at the right offset). + * Add records to VALUES clause (we already have parameters for the first + * row, so start at the right offset). */ pindex = num_cols + 1; for (i = 0; i < num_rows; i++) diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index ee93ee07cc473..cb757d9404557 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -146,7 +146,7 @@ typedef struct PgFdwScanState /* for remote query execution */ PGconn *conn; /* connection for the scan */ - PgFdwConnState *conn_state; /* extra per-connection state */ + PgFdwConnState *conn_state; /* extra per-connection state */ unsigned int cursor_number; /* quasi-unique ID for my cursor */ bool cursor_exists; /* have we created the cursor? */ int numParams; /* number of parameters passed to query */ @@ -164,7 +164,7 @@ typedef struct PgFdwScanState bool eof_reached; /* true if last fetch reached EOF */ /* for asynchronous execution */ - bool async_capable; /* engage asynchronous-capable logic? */ + bool async_capable; /* engage asynchronous-capable logic? */ /* working memory contexts */ MemoryContext batch_cxt; /* context holding current batch of tuples */ @@ -183,7 +183,7 @@ typedef struct PgFdwModifyState /* for remote query execution */ PGconn *conn; /* connection for the scan */ - PgFdwConnState *conn_state; /* extra per-connection state */ + PgFdwConnState *conn_state; /* extra per-connection state */ char *p_name; /* name of prepared statement, if created */ /* extracted fdw_private data */ @@ -227,7 +227,7 @@ typedef struct PgFdwDirectModifyState /* for remote query execution */ PGconn *conn; /* connection for the update */ - PgFdwConnState *conn_state; /* extra per-connection state */ + PgFdwConnState *conn_state; /* extra per-connection state */ int numParams; /* number of parameters passed to query */ FmgrInfo *param_flinfo; /* output conversion functions for them */ List *param_exprs; /* executable expressions for param values */ @@ -364,10 +364,10 @@ static TupleTableSlot *postgresExecForeignInsert(EState *estate, TupleTableSlot *slot, TupleTableSlot *planSlot); static TupleTableSlot **postgresExecForeignBatchInsert(EState *estate, - ResultRelInfo *resultRelInfo, - TupleTableSlot **slots, - TupleTableSlot **planSlots, - int *numSlots); + ResultRelInfo *resultRelInfo, + TupleTableSlot **slots, + TupleTableSlot **planSlots, + int *numSlots); static int postgresGetForeignModifyBatchSize(ResultRelInfo *resultRelInfo); static TupleTableSlot *postgresExecForeignUpdate(EState *estate, ResultRelInfo *resultRelInfo, @@ -467,11 +467,11 @@ static PgFdwModifyState *create_foreign_modify(EState *estate, bool has_returning, List *retrieved_attrs); static TupleTableSlot **execute_foreign_modify(EState *estate, - ResultRelInfo *resultRelInfo, - CmdType operation, - TupleTableSlot **slots, - TupleTableSlot **planSlots, - int *numSlots); + ResultRelInfo *resultRelInfo, + CmdType operation, + TupleTableSlot **slots, + TupleTableSlot **planSlots, + int *numSlots); static void prepare_foreign_modify(PgFdwModifyState *fmstate); static const char **convert_prep_stmt_params(PgFdwModifyState *fmstate, ItemPointer tupleid, @@ -545,7 +545,7 @@ static void apply_table_options(PgFdwRelationInfo *fpinfo); static void merge_fdw_options(PgFdwRelationInfo *fpinfo, const PgFdwRelationInfo *fpinfo_o, const PgFdwRelationInfo *fpinfo_i); -static int get_batch_size_option(Relation rel); +static int get_batch_size_option(Relation rel); /* @@ -1870,7 +1870,7 @@ postgresBeginForeignModify(ModifyTableState *mtstate, target_attrs = (List *) list_nth(fdw_private, FdwModifyPrivateTargetAttnums); values_end_len = intVal(list_nth(fdw_private, - FdwModifyPrivateLen)); + FdwModifyPrivateLen)); has_returning = intVal(list_nth(fdw_private, FdwModifyPrivateHasReturning)); retrieved_attrs = (List *) list_nth(fdw_private, @@ -1907,7 +1907,7 @@ postgresExecForeignInsert(EState *estate, { PgFdwModifyState *fmstate = (PgFdwModifyState *) resultRelInfo->ri_FdwState; TupleTableSlot **rslot; - int numSlots = 1; + int numSlots = 1; /* * If the fmstate has aux_fmstate set, use the aux_fmstate (see @@ -1930,10 +1930,10 @@ postgresExecForeignInsert(EState *estate, */ static TupleTableSlot ** postgresExecForeignBatchInsert(EState *estate, - ResultRelInfo *resultRelInfo, - TupleTableSlot **slots, - TupleTableSlot **planSlots, - int *numSlots) + ResultRelInfo *resultRelInfo, + TupleTableSlot **slots, + TupleTableSlot **planSlots, + int *numSlots) { PgFdwModifyState *fmstate = (PgFdwModifyState *) resultRelInfo->ri_FdwState; TupleTableSlot **rslot; @@ -1964,17 +1964,17 @@ postgresExecForeignBatchInsert(EState *estate, static int postgresGetForeignModifyBatchSize(ResultRelInfo *resultRelInfo) { - int batch_size; + int batch_size; PgFdwModifyState *fmstate = resultRelInfo->ri_FdwState ? - (PgFdwModifyState *) resultRelInfo->ri_FdwState : - NULL; + (PgFdwModifyState *) resultRelInfo->ri_FdwState : + NULL; /* should be called only once */ Assert(resultRelInfo->ri_BatchSize == 0); /* - * Should never get called when the insert is being performed as part of - * a row movement operation. + * Should never get called when the insert is being performed as part of a + * row movement operation. */ Assert(fmstate == NULL || fmstate->aux_fmstate == NULL); @@ -2009,10 +2009,10 @@ postgresExecForeignUpdate(EState *estate, TupleTableSlot *planSlot) { TupleTableSlot **rslot; - int numSlots = 1; + int numSlots = 1; rslot = execute_foreign_modify(estate, resultRelInfo, CMD_UPDATE, - &slot, &planSlot, &numSlots); + &slot, &planSlot, &numSlots); return rslot ? rslot[0] : NULL; } @@ -2028,10 +2028,10 @@ postgresExecForeignDelete(EState *estate, TupleTableSlot *planSlot) { TupleTableSlot **rslot; - int numSlots = 1; + int numSlots = 1; rslot = execute_foreign_modify(estate, resultRelInfo, CMD_DELETE, - &slot, &planSlot, &numSlots); + &slot, &planSlot, &numSlots); return rslot ? rslot[0] : NULL; } @@ -2117,13 +2117,13 @@ postgresBeginForeignInsert(ModifyTableState *mtstate, /* * If the foreign table is a partition that doesn't have a corresponding - * RTE entry, we need to create a new RTE - * describing the foreign table for use by deparseInsertSql and - * create_foreign_modify() below, after first copying the parent's RTE and - * modifying some fields to describe the foreign partition to work on. - * However, if this is invoked by UPDATE, the existing RTE may already - * correspond to this partition if it is one of the UPDATE subplan target - * rels; in that case, we can just use the existing RTE as-is. + * RTE entry, we need to create a new RTE describing the foreign table for + * use by deparseInsertSql and create_foreign_modify() below, after first + * copying the parent's RTE and modifying some fields to describe the + * foreign partition to work on. However, if this is invoked by UPDATE, + * the existing RTE may already correspond to this partition if it is one + * of the UPDATE subplan target rels; in that case, we can just use the + * existing RTE as-is. */ if (resultRelInfo->ri_RangeTableIndex == 0) { @@ -2847,8 +2847,8 @@ postgresExplainForeignModify(ModifyTableState *mtstate, ExplainPropertyText("Remote SQL", sql, es); /* - * For INSERT we should always have batch size >= 1, but UPDATE - * and DELETE don't support batching so don't show the property. + * For INSERT we should always have batch size >= 1, but UPDATE and + * DELETE don't support batching so don't show the property. */ if (rinfo->ri_BatchSize > 0) ExplainPropertyInteger("Batch Size", NULL, rinfo->ri_BatchSize, es); @@ -7255,18 +7255,18 @@ find_em_expr_for_input_target(PlannerInfo *root, static int get_batch_size_option(Relation rel) { - Oid foreigntableid = RelationGetRelid(rel); + Oid foreigntableid = RelationGetRelid(rel); ForeignTable *table; ForeignServer *server; List *options; ListCell *lc; /* we use 1 by default, which means "no batching" */ - int batch_size = 1; + int batch_size = 1; /* - * Load options for table and server. We append server options after - * table options, because table options take precedence. + * Load options for table and server. We append server options after table + * options, because table options take precedence. */ table = GetForeignTable(foreigntableid); server = GetForeignServer(table->serverid); diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c index c23ea44866a10..ccc9fa0959a9c 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -645,11 +645,11 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm) * range values; if so, have the pages in the range added * to the output bitmap. * - * The opclass may or may not support processing of multiple - * scan keys. We can determine that based on the number of - * arguments - functions with extra parameter (number of scan - * keys) do support this, otherwise we have to simply pass the - * scan keys one by one. + * The opclass may or may not support processing of + * multiple scan keys. We can determine that based on the + * number of arguments - functions with extra parameter + * (number of scan keys) do support this, otherwise we + * have to simply pass the scan keys one by one. */ if (consistentFn[attno - 1].fn_nargs >= 4) { @@ -667,10 +667,10 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm) /* * Check keys one by one * - * When there are multiple scan keys, failure to meet the - * criteria for a single one of them is enough to discard - * the range as a whole, so break out of the loop as soon - * as a false return value is obtained. + * When there are multiple scan keys, failure to meet + * the criteria for a single one of them is enough to + * discard the range as a whole, so break out of the + * loop as soon as a false return value is obtained. */ int keyno; diff --git a/src/backend/access/brin/brin_bloom.c b/src/backend/access/brin/brin_bloom.c index e83c2b82e15ac..99b2543f767e0 100644 --- a/src/backend/access/brin/brin_bloom.c +++ b/src/backend/access/brin/brin_bloom.c @@ -258,7 +258,7 @@ typedef struct BloomFilter /* data of the bloom filter */ char data[FLEXIBLE_ARRAY_MEMBER]; -} BloomFilter; +} BloomFilter; /* @@ -341,7 +341,7 @@ bloom_init(int ndistinct, double false_positive_rate) * Add value to the bloom filter. */ static BloomFilter * -bloom_add_value(BloomFilter * filter, uint32 value, bool *updated) +bloom_add_value(BloomFilter *filter, uint32 value, bool *updated) { int i; uint64 h1, @@ -378,7 +378,7 @@ bloom_add_value(BloomFilter * filter, uint32 value, bool *updated) * Check if the bloom filter contains a particular value. */ static bool -bloom_contains_value(BloomFilter * filter, uint32 value) +bloom_contains_value(BloomFilter *filter, uint32 value) { int i; uint64 h1, @@ -414,7 +414,7 @@ typedef struct BloomOpaque */ FmgrInfo extra_procinfos[BLOOM_MAX_PROCNUMS]; bool extra_proc_missing[BLOOM_MAX_PROCNUMS]; -} BloomOpaque; +} BloomOpaque; static FmgrInfo *bloom_get_procinfo(BrinDesc *bdesc, uint16 attno, uint16 procnum); diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c index 5e4b234cc61d7..bd14184d76726 100644 --- a/src/backend/access/brin/brin_minmax_multi.c +++ b/src/backend/access/brin/brin_minmax_multi.c @@ -114,7 +114,7 @@ typedef struct MinmaxMultiOpaque bool extra_proc_missing[MINMAX_MAX_PROCNUMS]; Oid cached_subtype; FmgrInfo strategy_procinfos[BTMaxStrategyNumber]; -} MinmaxMultiOpaque; +} MinmaxMultiOpaque; /* * Storage type for BRIN's minmax reloptions @@ -261,7 +261,7 @@ typedef struct compare_context { FmgrInfo *cmpFn; Oid colloid; -} compare_context; +} compare_context; static int compare_values(const void *a, const void *b, void *arg); @@ -670,11 +670,11 @@ range_serialize(Ranges *range) /* * For values passed by value, we need to copy just the * significant bytes - we can't use memcpy directly, as that - * assumes little endian behavior. store_att_byval does - * almost what we need, but it requires properly aligned - * buffer - the output buffer does not guarantee that. So we - * simply use a local Datum variable (which guarantees proper - * alignment), and then copy the value from it. + * assumes little endian behavior. store_att_byval does almost + * what we need, but it requires properly aligned buffer - the + * output buffer does not guarantee that. So we simply use a local + * Datum variable (which guarantees proper alignment), and then + * copy the value from it. */ store_att_byval(&tmp, range->values[i], typlen); @@ -771,7 +771,7 @@ range_deserialize(int maxvalues, SerializedRanges *serialized) dataptr = NULL; for (i = 0; (i < nvalues) && (!typbyval); i++) { - if (typlen > 0) /* fixed-length by-ref types */ + if (typlen > 0) /* fixed-length by-ref types */ datalen += MAXALIGN(typlen); else if (typlen == -1) /* varlena */ { @@ -824,7 +824,8 @@ range_deserialize(int maxvalues, SerializedRanges *serialized) } else if (typlen == -2) /* cstring */ { - Size slen = strlen(ptr) + 1; + Size slen = strlen(ptr) + 1; + range->values[i] = PointerGetDatum(dataptr); memcpy(dataptr, ptr, slen); @@ -2156,8 +2157,8 @@ brin_minmax_multi_distance_interval(PG_FUNCTION_ARGS) /* * Delta is (fractional) number of days between the intervals. Assume - * months have 30 days for consistency with interval_cmp_internal. - * We don't need to be exact, in the worst case we'll build a bit less + * months have 30 days for consistency with interval_cmp_internal. We + * don't need to be exact, in the worst case we'll build a bit less * efficient ranges. But we should not contradict interval_cmp. */ dayfraction = result->time % USECS_PER_DAY; @@ -2315,13 +2316,12 @@ brin_minmax_multi_distance_inet(PG_FUNCTION_ARGS) /* * The length is calculated from the mask length, because we sort the - * addresses by first address in the range, so A.B.C.D/24 < A.B.C.1 - * (the first range starts at A.B.C.0, which is before A.B.C.1). We - * don't want to produce negative delta in this case, so we just cut - * the extra bytes. + * addresses by first address in the range, so A.B.C.D/24 < A.B.C.1 (the + * first range starts at A.B.C.0, which is before A.B.C.1). We don't want + * to produce negative delta in this case, so we just cut the extra bytes. * - * XXX Maybe this should be a bit more careful and cut the bits, not - * just whole bytes. + * XXX Maybe this should be a bit more careful and cut the bits, not just + * whole bytes. */ lena = ip_bits(ipa); lenb = ip_bits(ipb); @@ -2331,8 +2331,8 @@ brin_minmax_multi_distance_inet(PG_FUNCTION_ARGS) /* apply the network mask to both addresses */ for (i = 0; i < len; i++) { - unsigned char mask; - int nbits; + unsigned char mask; + int nbits; nbits = lena - (i * 8); if (nbits < 8) diff --git a/src/backend/access/brin/brin_revmap.c b/src/backend/access/brin/brin_revmap.c index bab2a88ee3f3c..c574c8a06ef80 100644 --- a/src/backend/access/brin/brin_revmap.c +++ b/src/backend/access/brin/brin_revmap.c @@ -371,6 +371,7 @@ brinRevmapDesummarizeRange(Relation idxrel, BlockNumber heapBlk) regBuf = ReadBuffer(idxrel, ItemPointerGetBlockNumber(iptr)); LockBuffer(regBuf, BUFFER_LOCK_EXCLUSIVE); regPg = BufferGetPage(regBuf); + /* * We're only removing data, not reading it, so there's no need to * TestForOldSnapshot here. diff --git a/src/backend/access/brin/brin_tuple.c b/src/backend/access/brin/brin_tuple.c index 8c94e4aa8c56e..ee05372f795c4 100644 --- a/src/backend/access/brin/brin_tuple.c +++ b/src/backend/access/brin/brin_tuple.c @@ -177,15 +177,15 @@ brin_form_tuple(BrinDesc *brdesc, BlockNumber blkno, BrinMemTuple *tuple, datumno < brdesc->bd_info[keyno]->oi_nstored; datumno++) { - Datum value = tuple->bt_columns[keyno].bv_values[datumno]; + Datum value = tuple->bt_columns[keyno].bv_values[datumno]; #ifdef TOAST_INDEX_HACK /* We must look at the stored type, not at the index descriptor. */ - TypeCacheEntry *atttype = brdesc->bd_info[keyno]->oi_typcache[datumno]; + TypeCacheEntry *atttype = brdesc->bd_info[keyno]->oi_typcache[datumno]; /* Do we need to free the value at the end? */ - bool free_value = false; + bool free_value = false; /* For non-varlena types we don't need to do anything special */ if (atttype->typlen != -1) @@ -201,9 +201,9 @@ brin_form_tuple(BrinDesc *brdesc, BlockNumber blkno, BrinMemTuple *tuple, * If value is stored EXTERNAL, must fetch it so we are not * depending on outside storage. * - * XXX Is this actually true? Could it be that the summary is - * NULL even for range with non-NULL data? E.g. degenerate bloom - * filter may be thrown away, etc. + * XXX Is this actually true? Could it be that the summary is NULL + * even for range with non-NULL data? E.g. degenerate bloom filter + * may be thrown away, etc. */ if (VARATT_IS_EXTERNAL(DatumGetPointer(value))) { @@ -213,16 +213,16 @@ brin_form_tuple(BrinDesc *brdesc, BlockNumber blkno, BrinMemTuple *tuple, } /* - * If value is above size target, and is of a compressible datatype, - * try to compress it in-line. + * If value is above size target, and is of a compressible + * datatype, try to compress it in-line. */ if (!VARATT_IS_EXTENDED(DatumGetPointer(value)) && VARSIZE(DatumGetPointer(value)) > TOAST_INDEX_TARGET && (atttype->typstorage == TYPSTORAGE_EXTENDED || atttype->typstorage == TYPSTORAGE_MAIN)) { - Datum cvalue; - char compression; + Datum cvalue; + char compression; Form_pg_attribute att = TupleDescAttr(brdesc->bd_tupdesc, keyno); diff --git a/src/backend/access/common/indextuple.c b/src/backend/access/common/indextuple.c index a4cb8914cc611..521256041135b 100644 --- a/src/backend/access/common/indextuple.c +++ b/src/backend/access/common/indextuple.c @@ -103,14 +103,14 @@ index_form_tuple(TupleDesc tupleDescriptor, (att->attstorage == TYPSTORAGE_EXTENDED || att->attstorage == TYPSTORAGE_MAIN)) { - Datum cvalue; - char compression = att->attcompression; + Datum cvalue; + char compression = att->attcompression; /* * If the compression method is not valid, use the default. We * don't expect this to happen for regular index columns, which - * inherit the setting from the corresponding table column, but - * we do expect it to happen whenever an expression is indexed. + * inherit the setting from the corresponding table column, but we + * do expect it to happen whenever an expression is indexed. */ if (!CompressionMethodIsValid(compression)) compression = GetDefaultToastCompression(); diff --git a/src/backend/access/common/toast_compression.c b/src/backend/access/common/toast_compression.c index 682fd70e2ef9b..9e9d4457aceaa 100644 --- a/src/backend/access/common/toast_compression.c +++ b/src/backend/access/common/toast_compression.c @@ -24,7 +24,7 @@ #include "utils/builtins.h" /* GUC */ -int default_toast_compression = TOAST_PGLZ_COMPRESSION; +int default_toast_compression = TOAST_PGLZ_COMPRESSION; #define NO_LZ4_SUPPORT() \ ereport(ERROR, \ @@ -109,7 +109,7 @@ pglz_decompress_datum(const struct varlena *value) */ struct varlena * pglz_decompress_datum_slice(const struct varlena *value, - int32 slicelength) + int32 slicelength) { struct varlena *result; int32 rawsize; @@ -255,12 +255,12 @@ lz4_decompress_datum_slice(const struct varlena *value, int32 slicelength) ToastCompressionId toast_get_compression_id(struct varlena *attr) { - ToastCompressionId cmid = TOAST_INVALID_COMPRESSION_ID; + ToastCompressionId cmid = TOAST_INVALID_COMPRESSION_ID; /* - * If it is stored externally then fetch the compression method id from the - * external toast pointer. If compressed inline, fetch it from the toast - * compression header. + * If it is stored externally then fetch the compression method id from + * the external toast pointer. If compressed inline, fetch it from the + * toast compression header. */ if (VARATT_IS_EXTERNAL_ONDISK(attr)) { diff --git a/src/backend/access/common/toast_internals.c b/src/backend/access/common/toast_internals.c index 730cd04a2d7d9..c036319a0b8f9 100644 --- a/src/backend/access/common/toast_internals.c +++ b/src/backend/access/common/toast_internals.c @@ -48,7 +48,7 @@ toast_compress_datum(Datum value, char cmethod) { struct varlena *tmp = NULL; int32 valsize; - ToastCompressionId cmid = TOAST_INVALID_COMPRESSION_ID; + ToastCompressionId cmid = TOAST_INVALID_COMPRESSION_ID; Assert(!VARATT_IS_EXTERNAL(DatumGetPointer(value))); Assert(!VARATT_IS_COMPRESSED(DatumGetPointer(value))); diff --git a/src/backend/access/common/tupconvert.c b/src/backend/access/common/tupconvert.c index e055df2f32397..64f54393f353a 100644 --- a/src/backend/access/common/tupconvert.c +++ b/src/backend/access/common/tupconvert.c @@ -236,7 +236,7 @@ execute_attr_map_slot(AttrMap *attrMap, Bitmapset * execute_attr_map_cols(AttrMap *attrMap, Bitmapset *in_cols) { - Bitmapset *out_cols; + Bitmapset *out_cols; int out_attnum; /* fast path for the common trivial case */ diff --git a/src/backend/access/gist/gistproc.c b/src/backend/access/gist/gistproc.c index b8a39cd543997..d474612b77d15 100644 --- a/src/backend/access/gist/gistproc.c +++ b/src/backend/access/gist/gistproc.c @@ -35,9 +35,9 @@ static bool rtree_internal_consistent(BOX *key, BOX *query, static uint64 point_zorder_internal(float4 x, float4 y); static uint64 part_bits32_by2(uint32 x); static uint32 ieee_float32_to_uint32(float f); -static int gist_bbox_zorder_cmp(Datum a, Datum b, SortSupport ssup); +static int gist_bbox_zorder_cmp(Datum a, Datum b, SortSupport ssup); static Datum gist_bbox_zorder_abbrev_convert(Datum original, SortSupport ssup); -static int gist_bbox_zorder_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup); +static int gist_bbox_zorder_cmp_abbrev(Datum z1, Datum z2, SortSupport ssup); static bool gist_bbox_zorder_abbrev_abort(int memtupcount, SortSupport ssup); diff --git a/src/backend/access/gist/gistvalidate.c b/src/backend/access/gist/gistvalidate.c index 7d83b1143c665..b885fa2b256bf 100644 --- a/src/backend/access/gist/gistvalidate.c +++ b/src/backend/access/gist/gistvalidate.c @@ -267,7 +267,7 @@ gistvalidate(Oid opclassoid) continue; /* got it */ if (i == GIST_DISTANCE_PROC || i == GIST_FETCH_PROC || i == GIST_COMPRESS_PROC || i == GIST_DECOMPRESS_PROC || - i == GIST_OPTIONS_PROC || i == GIST_SORTSUPPORT_PROC) + i == GIST_OPTIONS_PROC || i == GIST_SORTSUPPORT_PROC) continue; /* optional methods */ ereport(INFO, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index ba36da2b83c82..6ac07f2fdac1e 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -432,11 +432,11 @@ heapgetpage(TableScanDesc sscan, BlockNumber page) * transactions on the primary might still be invisible to a read-only * transaction in the standby. We partly handle this problem by tracking * the minimum xmin of visible tuples as the cut-off XID while marking a - * page all-visible on the primary and WAL log that along with the visibility - * map SET operation. In hot standby, we wait for (or abort) all - * transactions that can potentially may not see one or more tuples on the - * page. That's how index-only scans work fine in hot standby. A crucial - * difference between index-only scans and heap scans is that the + * page all-visible on the primary and WAL log that along with the + * visibility map SET operation. In hot standby, we wait for (or abort) + * all transactions that can potentially may not see one or more tuples on + * the page. That's how index-only scans work fine in hot standby. A + * crucial difference between index-only scans and heap scans is that the * index-only scan completely relies on the visibility map where as heap * scan looks at the page-level PD_ALL_VISIBLE flag. We are not sure if * the page-level flag can be trusted in the same way, because it might @@ -2095,11 +2095,11 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, /* - * If we're inserting frozen entry into an empty page, - * set visibility map bits and PageAllVisible() hint. + * If we're inserting frozen entry into an empty page, set visibility map + * bits and PageAllVisible() hint. * - * If we're inserting frozen entry into already all_frozen page, - * preserve this state. + * If we're inserting frozen entry into already all_frozen page, preserve + * this state. */ if (options & HEAP_INSERT_FROZEN) { @@ -2109,7 +2109,7 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, if (visibilitymap_pin_ok(BufferGetBlockNumber(buffer), vmbuffer)) vmstatus = visibilitymap_get_status(relation, - BufferGetBlockNumber(buffer), &vmbuffer); + BufferGetBlockNumber(buffer), &vmbuffer); if ((starting_with_empty_page || vmstatus & VISIBILITYMAP_ALL_FROZEN)) all_frozen_set = true; @@ -2139,8 +2139,8 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, (options & HEAP_INSERT_SPECULATIVE) != 0); /* - * If the page is all visible, need to clear that, unless we're only - * going to add further frozen rows to it. + * If the page is all visible, need to clear that, unless we're only going + * to add further frozen rows to it. * * If we're only adding already frozen rows to a page that was empty or * marked as all visible, mark it as all-visible. @@ -2258,11 +2258,11 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, END_CRIT_SECTION(); /* - * If we've frozen everything on the page, update the visibilitymap. - * We're already holding pin on the vmbuffer. + * If we've frozen everything on the page, update the visibilitymap. We're + * already holding pin on the vmbuffer. * - * No need to update the visibilitymap if it had all_frozen bit set - * before this insertion. + * No need to update the visibilitymap if it had all_frozen bit set before + * this insertion. */ if (all_frozen_set && ((vmstatus & VISIBILITYMAP_ALL_FROZEN) == 0)) { @@ -2270,14 +2270,14 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, Assert(visibilitymap_pin_ok(BufferGetBlockNumber(buffer), vmbuffer)); /* - * It's fine to use InvalidTransactionId here - this is only used - * when HEAP_INSERT_FROZEN is specified, which intentionally - * violates visibility rules. + * It's fine to use InvalidTransactionId here - this is only used when + * HEAP_INSERT_FROZEN is specified, which intentionally violates + * visibility rules. */ visibilitymap_set(relation, BufferGetBlockNumber(buffer), buffer, - InvalidXLogRecPtr, vmbuffer, - InvalidTransactionId, - VISIBILITYMAP_ALL_VISIBLE | VISIBILITYMAP_ALL_FROZEN); + InvalidXLogRecPtr, vmbuffer, + InvalidTransactionId, + VISIBILITYMAP_ALL_VISIBLE | VISIBILITYMAP_ALL_FROZEN); } UnlockReleaseBuffer(buffer); @@ -2547,7 +2547,7 @@ heap_multi_insert(Relation relation, TupleTableSlot **slots, int ntuples, tupledata = scratchptr; /* check that the mutually exclusive flags are not both set */ - Assert (!(all_visible_cleared && all_frozen_set)); + Assert(!(all_visible_cleared && all_frozen_set)); xlrec->flags = 0; if (all_visible_cleared) @@ -3063,7 +3063,10 @@ heap_delete(Relation relation, ItemPointer tid, xl_heap_header xlhdr; XLogRecPtr recptr; - /* For logical decode we need combo CIDs to properly decode the catalog */ + /* + * For logical decode we need combo CIDs to properly decode the + * catalog + */ if (RelationIsAccessibleInLogicalDecoding(relation)) log_heap_new_cid(relation, &tp); @@ -7932,16 +7935,16 @@ bottomup_sort_and_shrink(TM_IndexDeleteOp *delstate) * TIDs as each other. The goal is to ignore relatively small differences * in the total number of promising entries, so that the whole process can * give a little weight to heapam factors (like heap block locality) - * instead. This isn't a trade-off, really -- we have nothing to lose. - * It would be foolish to interpret small differences in npromisingtids + * instead. This isn't a trade-off, really -- we have nothing to lose. It + * would be foolish to interpret small differences in npromisingtids * values as anything more than noise. * * We tiebreak on nhtids when sorting block group subsets that have the * same npromisingtids, but this has the same issues as npromisingtids, - * and so nhtids is subject to the same power-of-two bucketing scheme. - * The only reason that we don't fix nhtids in the same way here too is - * that we'll need accurate nhtids values after the sort. We handle - * nhtids bucketization dynamically instead (in the sort comparator). + * and so nhtids is subject to the same power-of-two bucketing scheme. The + * only reason that we don't fix nhtids in the same way here too is that + * we'll need accurate nhtids values after the sort. We handle nhtids + * bucketization dynamically instead (in the sort comparator). * * See bottomup_nblocksfavorable() for a full explanation of when and how * heap locality/favorable blocks can significantly influence when and how @@ -8944,8 +8947,8 @@ heap_xlog_insert(XLogReaderState *record) ItemPointerSetOffsetNumber(&target_tid, xlrec->offnum); /* check that the mutually exclusive flags are not both set */ - Assert (!((xlrec->flags & XLH_INSERT_ALL_VISIBLE_CLEARED) && - (xlrec->flags & XLH_INSERT_ALL_FROZEN_SET))); + Assert(!((xlrec->flags & XLH_INSERT_ALL_VISIBLE_CLEARED) && + (xlrec->flags & XLH_INSERT_ALL_FROZEN_SET))); /* * The visibility map may need to be fixed even if the heap page is @@ -9072,8 +9075,8 @@ heap_xlog_multi_insert(XLogReaderState *record) XLogRecGetBlockTag(record, 0, &rnode, NULL, &blkno); /* check that the mutually exclusive flags are not both set */ - Assert (!((xlrec->flags & XLH_INSERT_ALL_VISIBLE_CLEARED) && - (xlrec->flags & XLH_INSERT_ALL_FROZEN_SET))); + Assert(!((xlrec->flags & XLH_INSERT_ALL_VISIBLE_CLEARED) && + (xlrec->flags & XLH_INSERT_ALL_FROZEN_SET))); /* * The visibility map may need to be fixed even if the heap page is diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index 7a9a640989ab6..61d90448161d9 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -1659,13 +1659,13 @@ heapam_index_build_range_scan(Relation heapRelation, offnum = ItemPointerGetOffsetNumber(&heapTuple->t_self); /* - * If a HOT tuple points to a root that we don't know - * about, obtain root items afresh. If that still fails, - * report it as corruption. + * If a HOT tuple points to a root that we don't know about, + * obtain root items afresh. If that still fails, report it as + * corruption. */ if (root_offsets[offnum - 1] == InvalidOffsetNumber) { - Page page = BufferGetPage(hscan->rs_cbuf); + Page page = BufferGetPage(hscan->rs_cbuf); LockBuffer(hscan->rs_cbuf, BUFFER_LOCK_SHARE); heap_get_root_tuples(page, root_offsets); @@ -2482,8 +2482,8 @@ reform_and_rewrite_tuple(HeapTuple tuple, else if (!isnull[i] && TupleDescAttr(newTupDesc, i)->attlen == -1) { struct varlena *new_value; - ToastCompressionId cmid; - char cmethod; + ToastCompressionId cmid; + char cmethod; new_value = (struct varlena *) DatumGetPointer(values[i]); cmid = toast_get_compression_id(new_value); diff --git a/src/backend/access/heap/heapam_visibility.c b/src/backend/access/heap/heapam_visibility.c index cc0bed5243560..d3c57cd16a836 100644 --- a/src/backend/access/heap/heapam_visibility.c +++ b/src/backend/access/heap/heapam_visibility.c @@ -1608,8 +1608,8 @@ HeapTupleSatisfiesHistoricMVCC(HeapTuple htup, Snapshot snapshot, /* * another transaction might have (tried to) delete this tuple or - * cmin/cmax was stored in a combo CID. So we need to lookup the actual - * values externally. + * cmin/cmax was stored in a combo CID. So we need to lookup the + * actual values externally. */ resolved = ResolveCminCmaxDuringDecoding(HistoricSnapshotGetTupleCids(), snapshot, htup, buffer, @@ -1629,8 +1629,8 @@ HeapTupleSatisfiesHistoricMVCC(HeapTuple htup, Snapshot snapshot, * elog inside ResolveCminCmaxDuringDecoding. * * XXX For the streaming case, we can track the largest combo CID - * assigned, and error out based on this (when unable to resolve - * combo CID below that observed maximum value). + * assigned, and error out based on this (when unable to resolve combo + * CID below that observed maximum value). */ if (!resolved) return false; @@ -1717,8 +1717,8 @@ HeapTupleSatisfiesHistoricMVCC(HeapTuple htup, Snapshot snapshot, * elog inside ResolveCminCmaxDuringDecoding. * * XXX For the streaming case, we can track the largest combo CID - * assigned, and error out based on this (when unable to resolve - * combo CID below that observed maximum value). + * assigned, and error out based on this (when unable to resolve combo + * CID below that observed maximum value). */ if (!resolved || cmax == InvalidCommandId) return true; diff --git a/src/backend/access/heap/hio.c b/src/backend/access/heap/hio.c index ffc89685bff6f..d34edb4190c8b 100644 --- a/src/backend/access/heap/hio.c +++ b/src/backend/access/heap/hio.c @@ -410,8 +410,8 @@ RelationGetBufferForTuple(Relation relation, Size len, } /* - * If the FSM knows nothing of the rel, try the last page before we - * give up and extend. This avoids one-tuple-per-page syndrome during + * If the FSM knows nothing of the rel, try the last page before we give + * up and extend. This avoids one-tuple-per-page syndrome during * bootstrapping or in a recently-started system. */ if (targetBlock == InvalidBlockNumber) diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c index 0c8e49d3e6c61..15ca1b304a085 100644 --- a/src/backend/access/heap/pruneheap.c +++ b/src/backend/access/heap/pruneheap.c @@ -95,8 +95,8 @@ heap_page_prune_opt(Relation relation, Buffer buffer) /* * We can't write WAL in recovery mode, so there's no point trying to - * clean the page. The primary will likely issue a cleaning WAL record soon - * anyway, so this is no particular loss. + * clean the page. The primary will likely issue a cleaning WAL record + * soon anyway, so this is no particular loss. */ if (RecoveryInProgress()) return; diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 4b4db4c81b5e6..17519a970fe95 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -691,8 +691,8 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, * * Deliberately avoid telling the stats collector about LP_DEAD items that * remain in the table due to VACUUM bypassing index and heap vacuuming. - * ANALYZE will consider the remaining LP_DEAD items to be dead tuples. - * It seems like a good idea to err on the side of not vacuuming again too + * ANALYZE will consider the remaining LP_DEAD items to be dead tuples. It + * seems like a good idea to err on the side of not vacuuming again too * soon in cases where the failsafe prevented significant amounts of heap * vacuuming. */ @@ -2284,7 +2284,7 @@ static void lazy_vacuum_heap_rel(LVRelState *vacrel) { int tupindex; - BlockNumber vacuumed_pages; + BlockNumber vacuumed_pages; PGRUsage ru0; Buffer vmbuffer = InvalidBuffer; LVSavedErrInfo saved_err_info; diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c index 0aa26b448b792..b93288a6fe61c 100644 --- a/src/backend/access/index/genam.c +++ b/src/backend/access/index/genam.c @@ -612,8 +612,8 @@ systable_endscan(SysScanDesc sysscan) UnregisterSnapshot(sysscan->snapshot); /* - * Reset the bsysscan flag at the end of the systable scan. See - * detailed comments in xact.c where these variables are declared. + * Reset the bsysscan flag at the end of the systable scan. See detailed + * comments in xact.c where these variables are declared. */ if (TransactionIdIsValid(CheckXidAlive)) bsysscan = false; diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index 706e16ae949da..ebec8fa5b8967 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -1054,22 +1054,22 @@ _bt_lockbuf(Relation rel, Buffer buf, int access) LockBuffer(buf, access); /* - * It doesn't matter that _bt_unlockbuf() won't get called in the - * event of an nbtree error (e.g. a unique violation error). That - * won't cause Valgrind false positives. + * It doesn't matter that _bt_unlockbuf() won't get called in the event of + * an nbtree error (e.g. a unique violation error). That won't cause + * Valgrind false positives. * - * The nbtree client requests are superimposed on top of the - * bufmgr.c buffer pin client requests. In the event of an nbtree - * error the buffer will certainly get marked as defined when the - * backend once again acquires its first pin on the buffer. (Of - * course, if the backend never touches the buffer again then it - * doesn't matter that it remains non-accessible to Valgrind.) + * The nbtree client requests are superimposed on top of the bufmgr.c + * buffer pin client requests. In the event of an nbtree error the buffer + * will certainly get marked as defined when the backend once again + * acquires its first pin on the buffer. (Of course, if the backend never + * touches the buffer again then it doesn't matter that it remains + * non-accessible to Valgrind.) * - * Note: When an IndexTuple C pointer gets computed using an - * ItemId read from a page while a lock was held, the C pointer - * becomes unsafe to dereference forever as soon as the lock is - * released. Valgrind can only detect cases where the pointer - * gets dereferenced with no _current_ lock/pin held, though. + * Note: When an IndexTuple C pointer gets computed using an ItemId read + * from a page while a lock was held, the C pointer becomes unsafe to + * dereference forever as soon as the lock is released. Valgrind can only + * detect cases where the pointer gets dereferenced with no _current_ + * lock/pin held, though. */ if (!RelationUsesLocalBuffers(rel)) VALGRIND_MAKE_MEM_DEFINED(BufferGetPage(buf), BLCKSZ); @@ -2395,7 +2395,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, BlockNumber scanblkno, opaque = (BTPageOpaque) PageGetSpecialPointer(page); while (P_ISDELETED(opaque) || opaque->btpo_next != target) { - bool leftsibvalid = true; + bool leftsibvalid = true; /* * Before we follow the link from the page that was the left diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c index 1779b6ba47023..c2e920f159ccb 100644 --- a/src/backend/access/nbtree/nbtxlog.c +++ b/src/backend/access/nbtree/nbtxlog.c @@ -898,8 +898,8 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record) * top parent link when deleting leafbuf because it's the last page * we'll delete in the subtree undergoing deletion. */ - Buffer leafbuf; - IndexTupleData trunctuple; + Buffer leafbuf; + IndexTupleData trunctuple; Assert(!isleaf); diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index 1f9f1a1fa10ca..daab546f29684 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -2278,7 +2278,7 @@ SetMultiXactIdLimit(MultiXactId oldest_datminmxid, Oid oldest_datoid, /* Log the info */ ereport(DEBUG1, (errmsg_internal("MultiXactId wrap limit is %u, limited by database with OID %u", - multiWrapLimit, oldest_datoid))); + multiWrapLimit, oldest_datoid))); /* * Computing the actual limits is only possible once the data directory is @@ -2612,7 +2612,7 @@ SetOffsetVacuumLimit(bool is_startup) if (oldestOffsetKnown) ereport(DEBUG1, (errmsg_internal("oldest MultiXactId member is at offset %u", - oldestOffset))); + oldestOffset))); else ereport(LOG, (errmsg("MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk", @@ -2641,7 +2641,7 @@ SetOffsetVacuumLimit(bool is_startup) ereport(DEBUG1, (errmsg_internal("MultiXact member stop limit is now %u based on MultiXact %u", - offsetStopLimit, oldestMultiXactId))); + offsetStopLimit, oldestMultiXactId))); } else if (prevOldestOffsetKnown) { @@ -3283,9 +3283,9 @@ multixact_redo(XLogReaderState *record) xlrec->moff + xlrec->nmembers); /* - * Make sure nextXid is beyond any XID mentioned in the record. - * This should be unnecessary, since any XID found here ought to have - * other evidence in the XLOG, but let's be safe. + * Make sure nextXid is beyond any XID mentioned in the record. This + * should be unnecessary, since any XID found here ought to have other + * evidence in the XLOG, but let's be safe. */ max_xid = XLogRecGetXid(record); for (i = 0; i < xlrec->nmembers; i++) diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index 46f3d0824926f..f67d813c56493 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -1134,9 +1134,9 @@ EndPrepare(GlobalTransaction gxact) gxact->prepare_start_lsn = ProcLastRecPtr; /* - * Mark the prepared transaction as valid. As soon as xact.c marks - * MyProc as not running our XID (which it will do immediately after - * this function returns), others can commit/rollback the xact. + * Mark the prepared transaction as valid. As soon as xact.c marks MyProc + * as not running our XID (which it will do immediately after this + * function returns), others can commit/rollback the xact. * * NB: a side effect of this is to make a dummy ProcArray entry for the * prepared XID. This must happen before we clear the XID from MyProc / diff --git a/src/backend/access/transam/varsup.c b/src/backend/access/transam/varsup.c index 142da4aaff3cc..a22bf375f8514 100644 --- a/src/backend/access/transam/varsup.c +++ b/src/backend/access/transam/varsup.c @@ -179,10 +179,10 @@ GetNewTransactionId(bool isSubXact) ExtendSUBTRANS(xid); /* - * Now advance the nextXid counter. This must not happen until after - * we have successfully completed ExtendCLOG() --- if that routine fails, - * we want the next incoming transaction to try it again. We cannot - * assign more XIDs until there is CLOG space for them. + * Now advance the nextXid counter. This must not happen until after we + * have successfully completed ExtendCLOG() --- if that routine fails, we + * want the next incoming transaction to try it again. We cannot assign + * more XIDs until there is CLOG space for them. */ FullTransactionIdAdvance(&ShmemVariableCache->nextXid); @@ -192,8 +192,8 @@ GetNewTransactionId(bool isSubXact) * latestCompletedXid is present in the ProcArray, which is essential for * correct OldestXmin tracking; see src/backend/access/transam/README. * - * Note that readers of ProcGlobal->xids/PGPROC->xid should be careful - * to fetch the value for each proc only once, rather than assume they can + * Note that readers of ProcGlobal->xids/PGPROC->xid should be careful to + * fetch the value for each proc only once, rather than assume they can * read a value multiple times and get the same answer each time. Note we * are assuming that TransactionId and int fetch/store are atomic. * @@ -281,9 +281,9 @@ AdvanceNextFullTransactionIdPastXid(TransactionId xid) uint32 epoch; /* - * It is safe to read nextXid without a lock, because this is only - * called from the startup process or single-process mode, meaning that no - * other process can modify it. + * It is safe to read nextXid without a lock, because this is only called + * from the startup process or single-process mode, meaning that no other + * process can modify it. */ Assert(AmStartupProcess() || !IsUnderPostmaster); @@ -426,7 +426,7 @@ SetTransactionIdLimit(TransactionId oldest_datfrozenxid, Oid oldest_datoid) /* Log the info */ ereport(DEBUG1, (errmsg_internal("transaction ID wrap limit is %u, limited by database with OID %u", - xidWrapLimit, oldest_datoid))); + xidWrapLimit, oldest_datoid))); /* * If past the autovacuum force point, immediately signal an autovac @@ -617,8 +617,8 @@ AssertTransactionIdInAllowableRange(TransactionId xid) * We can't acquire XidGenLock, as this may be called with XidGenLock * already held (or with other locks that don't allow XidGenLock to be * nested). That's ok for our purposes though, since we already rely on - * 32bit reads to be atomic. While nextXid is 64 bit, we only look at - * the lower 32bit, so a skewed read doesn't hurt. + * 32bit reads to be atomic. While nextXid is 64 bit, we only look at the + * lower 32bit, so a skewed read doesn't hurt. * * There's no increased danger of falling outside [oldest, next] by * accessing them without a lock. xid needs to have been created with diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index c1d4415a43340..8d163f190f378 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -723,7 +723,7 @@ typedef struct XLogCtlData */ TimestampTz currentChunkStartTime; /* Recovery pause state */ - RecoveryPauseState recoveryPauseState; + RecoveryPauseState recoveryPauseState; ConditionVariable recoveryNotPausedCV; /* @@ -2858,8 +2858,8 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force) ereport(DEBUG2, (errmsg_internal("updated min recovery point to %X/%X on timeline %u", - LSN_FORMAT_ARGS(minRecoveryPoint), - newMinRecoveryPointTLI))); + LSN_FORMAT_ARGS(minRecoveryPoint), + newMinRecoveryPointTLI))); } } LWLockRelease(ControlFileLock); @@ -3357,7 +3357,7 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent, bool use_lock) blocks = wal_segment_size / XLOG_BLCKSZ; for (int i = 0; i < blocks;) { - int iovcnt = Min(blocks - i, lengthof(iov)); + int iovcnt = Min(blocks - i, lengthof(iov)); off_t offset = i * XLOG_BLCKSZ; if (pg_pwritev_with_retry(fd, iov, iovcnt, offset) < 0) @@ -3814,8 +3814,8 @@ XLogFileReadAnyTLI(XLogSegNo segno, int emode, XLogSource source) * however, unless we actually find a valid segment. That way if there is * neither a timeline history file nor a WAL segment in the archive, and * streaming replication is set up, we'll read the timeline history file - * streamed from the primary when we start streaming, instead of recovering - * with a dummy history generated here. + * streamed from the primary when we start streaming, instead of + * recovering with a dummy history generated here. */ if (expectedTLEs) tles = expectedTLEs; @@ -4229,7 +4229,7 @@ RemoveXlogFile(const char *segname, XLogSegNo recycleSegNo, { ereport(DEBUG2, (errmsg_internal("recycled write-ahead log file \"%s\"", - segname))); + segname))); CheckpointStats.ckpt_segs_recycled++; /* Needn't recheck that slot on future iterations */ (*endlogSegNo)++; @@ -4241,7 +4241,7 @@ RemoveXlogFile(const char *segname, XLogSegNo recycleSegNo, ereport(DEBUG2, (errmsg_internal("removing write-ahead log file \"%s\"", - segname))); + segname))); #ifdef WIN32 @@ -6093,7 +6093,7 @@ recoveryPausesHere(bool endOfRecovery) RecoveryPauseState GetRecoveryPauseState(void) { - RecoveryPauseState state; + RecoveryPauseState state; SpinLockAcquire(&XLogCtl->info_lck); state = XLogCtl->recoveryPauseState; @@ -6347,7 +6347,11 @@ RecoveryRequiresIntParameter(const char *param_name, int currValue, int minValue ereport(WARNING, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("promotion is not possible because of insufficient parameter settings"), - /* Repeat the detail from above so it's easy to find in the log. */ + + /* + * Repeat the detail from above so it's easy to find + * in the log. + */ errdetail("%s = %d is a lower setting than on the primary server, where its value was %d.", param_name, currValue, @@ -6357,15 +6361,15 @@ RecoveryRequiresIntParameter(const char *param_name, int currValue, int minValue } /* - * If recovery pause is requested then set it paused. While we - * are in the loop, user might resume and pause again so set - * this every time. + * If recovery pause is requested then set it paused. While + * we are in the loop, user might resume and pause again so + * set this every time. */ ConfirmRecoveryPaused(); /* - * We wait on a condition variable that will wake us as soon as - * the pause ends, but we use a timeout so we can check the + * We wait on a condition variable that will wake us as soon + * as the pause ends, but we use a timeout so we can check the * above conditions periodically too. */ ConditionVariableTimedSleep(&XLogCtl->recoveryNotPausedCV, 1000, @@ -6377,7 +6381,7 @@ RecoveryRequiresIntParameter(const char *param_name, int currValue, int minValue ereport(FATAL, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("recovery aborted because of insufficient parameter settings"), - /* Repeat the detail from above so it's easy to find in the log. */ + /* Repeat the detail from above so it's easy to find in the log. */ errdetail("%s = %d is a lower setting than on the primary server, where its value was %d.", param_name, currValue, @@ -6920,9 +6924,8 @@ StartupXLOG(void) StartupReorderBuffer(); /* - * Startup CLOG. This must be done after ShmemVariableCache->nextXid - * has been initialized and before we accept connections or begin WAL - * replay. + * Startup CLOG. This must be done after ShmemVariableCache->nextXid has + * been initialized and before we accept connections or begin WAL replay. */ StartupCLOG(); @@ -6969,11 +6972,11 @@ StartupXLOG(void) * ourselves - the history file of the recovery target timeline covers all * the previous timelines in the history too - a cascading standby server * might be interested in them. Or, if you archive the WAL from this - * server to a different archive than the primary, it'd be good for all the - * history files to get archived there after failover, so that you can use - * one of the old timelines as a PITR target. Timeline history files are - * small, so it's better to copy them unnecessarily than not copy them and - * regret later. + * server to a different archive than the primary, it'd be good for all + * the history files to get archived there after failover, so that you can + * use one of the old timelines as a PITR target. Timeline history files + * are small, so it's better to copy them unnecessarily than not copy them + * and regret later. */ restoreTimeLineHistoryFiles(ThisTimeLineID, recoveryTargetTLI); @@ -7196,9 +7199,9 @@ StartupXLOG(void) ProcArrayInitRecovery(XidFromFullTransactionId(ShmemVariableCache->nextXid)); /* - * Startup subtrans only. CLOG, MultiXact and commit - * timestamp have already been started up and other SLRUs are not - * maintained during recovery and need not be started yet. + * Startup subtrans only. CLOG, MultiXact and commit timestamp + * have already been started up and other SLRUs are not maintained + * during recovery and need not be started yet. */ StartupSUBTRANS(oldestActiveXID); @@ -7400,8 +7403,7 @@ StartupXLOG(void) error_context_stack = &errcallback; /* - * ShmemVariableCache->nextXid must be beyond record's - * xid. + * ShmemVariableCache->nextXid must be beyond record's xid. */ AdvanceNextFullTransactionIdPastXid(record->xl_xid); @@ -8092,10 +8094,10 @@ StartupXLOG(void) WalSndWakeup(); /* - * If this was a promotion, request an (online) checkpoint now. This - * isn't required for consistency, but the last restartpoint might be far - * back, and in case of a crash, recovering from it might take a longer - * than is appropriate now that we're not in standby mode anymore. + * If this was a promotion, request an (online) checkpoint now. This isn't + * required for consistency, but the last restartpoint might be far back, + * and in case of a crash, recovering from it might take a longer than is + * appropriate now that we're not in standby mode anymore. */ if (promoted) RequestCheckpoint(CHECKPOINT_FORCE); @@ -8674,7 +8676,7 @@ LogCheckpointStart(int flags, bool restartpoint) { if (restartpoint) ereport(LOG, - /* translator: the placeholders show checkpoint options */ + /* translator: the placeholders show checkpoint options */ (errmsg("restartpoint starting:%s%s%s%s%s%s%s%s", (flags & CHECKPOINT_IS_SHUTDOWN) ? " shutdown" : "", (flags & CHECKPOINT_END_OF_RECOVERY) ? " end-of-recovery" : "", @@ -8686,7 +8688,7 @@ LogCheckpointStart(int flags, bool restartpoint) (flags & CHECKPOINT_FLUSH_ALL) ? " flush-all" : ""))); else ereport(LOG, - /* translator: the placeholders show checkpoint options */ + /* translator: the placeholders show checkpoint options */ (errmsg("checkpoint starting:%s%s%s%s%s%s%s%s", (flags & CHECKPOINT_IS_SHUTDOWN) ? " shutdown" : "", (flags & CHECKPOINT_END_OF_RECOVERY) ? " end-of-recovery" : "", @@ -11851,12 +11853,12 @@ read_backup_label(XLogRecPtr *checkPointLoc, bool *backupEndRequired, if (fscanf(lfp, "START TIME: %127[^\n]\n", backuptime) == 1) ereport(DEBUG1, (errmsg_internal("backup time %s in file \"%s\"", - backuptime, BACKUP_LABEL_FILE))); + backuptime, BACKUP_LABEL_FILE))); if (fscanf(lfp, "LABEL: %1023[^\n]\n", backuplabel) == 1) ereport(DEBUG1, (errmsg_internal("backup label %s in file \"%s\"", - backuplabel, BACKUP_LABEL_FILE))); + backuplabel, BACKUP_LABEL_FILE))); /* * START TIMELINE is new as of 11. Its parsing is not mandatory, still use @@ -11873,7 +11875,7 @@ read_backup_label(XLogRecPtr *checkPointLoc, bool *backupEndRequired, ereport(DEBUG1, (errmsg_internal("backup timeline %u in file \"%s\"", - tli_from_file, BACKUP_LABEL_FILE))); + tli_from_file, BACKUP_LABEL_FILE))); } if (ferror(lfp) || FreeFile(lfp)) @@ -12177,8 +12179,8 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, Assert(readFile != -1); /* - * If the current segment is being streamed from the primary, calculate how - * much of the current page we have received already. We know the + * If the current segment is being streamed from the primary, calculate + * how much of the current page we have received already. We know the * requested record has been received, but this is for the benefit of * future calls, to allow quick exit at the top of this function. */ @@ -12239,12 +12241,13 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, * and replay reaches a record that's split across two WAL segments. The * first page is only available locally, in pg_wal, because it's already * been recycled on the primary. The second page, however, is not present - * in pg_wal, and we should stream it from the primary. There is a recycled - * WAL segment present in pg_wal, with garbage contents, however. We would - * read the first page from the local WAL segment, but when reading the - * second page, we would read the bogus, recycled, WAL segment. If we - * didn't catch that case here, we would never recover, because - * ReadRecord() would retry reading the whole record from the beginning. + * in pg_wal, and we should stream it from the primary. There is a + * recycled WAL segment present in pg_wal, with garbage contents, however. + * We would read the first page from the local WAL segment, but when + * reading the second page, we would read the bogus, recycled, WAL + * segment. If we didn't catch that case here, we would never recover, + * because ReadRecord() would retry reading the whole record from the + * beginning. * * Of course, this only catches errors in the page header, which is what * happens in the case of a recycled WAL segment. Other kinds of errors or @@ -12399,15 +12402,15 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, * Failure while streaming. Most likely, we got here * because streaming replication was terminated, or * promotion was triggered. But we also get here if we - * find an invalid record in the WAL streamed from the primary, - * in which case something is seriously wrong. There's - * little chance that the problem will just go away, but - * PANIC is not good for availability either, especially - * in hot standby mode. So, we treat that the same as - * disconnection, and retry from archive/pg_wal again. The - * WAL in the archive should be identical to what was - * streamed, so it's unlikely that it helps, but one can - * hope... + * find an invalid record in the WAL streamed from the + * primary, in which case something is seriously wrong. + * There's little chance that the problem will just go + * away, but PANIC is not good for availability either, + * especially in hot standby mode. So, we treat that the + * same as disconnection, and retry from archive/pg_wal + * again. The WAL in the archive should be identical to + * what was streamed, so it's unlikely that it helps, but + * one can hope... */ /* diff --git a/src/backend/access/transam/xlogfuncs.c b/src/backend/access/transam/xlogfuncs.c index f363a4c639930..b98deb72ec69d 100644 --- a/src/backend/access/transam/xlogfuncs.c +++ b/src/backend/access/transam/xlogfuncs.c @@ -600,7 +600,7 @@ pg_is_wal_replay_paused(PG_FUNCTION_ARGS) Datum pg_get_wal_replay_pause_state(PG_FUNCTION_ARGS) { - char *statestr = NULL; + char *statestr = NULL; if (!RecoveryInProgress()) ereport(ERROR, @@ -609,7 +609,7 @@ pg_get_wal_replay_pause_state(PG_FUNCTION_ARGS) errhint("Recovery control functions can only be executed during recovery."))); /* get the recovery pause state */ - switch(GetRecoveryPauseState()) + switch (GetRecoveryPauseState()) { case RECOVERY_NOT_PAUSED: statestr = "not paused"; diff --git a/src/backend/access/transam/xloginsert.c b/src/backend/access/transam/xloginsert.c index 7052dc245ee02..32b4cc84e79aa 100644 --- a/src/backend/access/transam/xloginsert.c +++ b/src/backend/access/transam/xloginsert.c @@ -1065,8 +1065,8 @@ log_newpages(RelFileNode *rnode, ForkNumber forkNum, int num_pages, for (j = batch_start; j < i; j++) { /* - * The page may be uninitialized. If so, we can't set the LSN because that - * would corrupt the page. + * The page may be uninitialized. If so, we can't set the LSN + * because that would corrupt the page. */ if (!PageIsNew(pages[j])) { diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index 174727b501d06..b1552374884df 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -160,7 +160,7 @@ struct typmap FormData_pg_type am_typ; }; -static List *Typ = NIL; /* List of struct typmap* */ +static List *Typ = NIL; /* List of struct typmap* */ static struct typmap *Ap = NULL; static Datum values[MAXATTR]; /* current row's attribute values */ @@ -926,11 +926,12 @@ gettype(char *type) { if (Typ != NIL) { - ListCell *lc; + ListCell *lc; - foreach (lc, Typ) + foreach(lc, Typ) { struct typmap *app = lfirst(lc); + if (strncmp(NameStr(app->am_typ.typname), type, NAMEDATALEN) == 0) { Ap = app; @@ -948,12 +949,13 @@ gettype(char *type) populate_typ_list(); /* - * Calling gettype would result in infinite recursion for types missing - * in pg_type, so just repeat the lookup. + * Calling gettype would result in infinite recursion for types + * missing in pg_type, so just repeat the lookup. */ - foreach (lc, Typ) + foreach(lc, Typ) { struct typmap *app = lfirst(lc); + if (strncmp(NameStr(app->am_typ.typname), type, NAMEDATALEN) == 0) { Ap = app; @@ -1004,9 +1006,9 @@ boot_get_type_io_data(Oid typid, { /* We have the boot-time contents of pg_type, so use it */ struct typmap *ap = NULL; - ListCell *lc; + ListCell *lc; - foreach (lc, Typ) + foreach(lc, Typ) { ap = lfirst(lc); if (ap->am_oid == typid) diff --git a/src/backend/catalog/Catalog.pm b/src/backend/catalog/Catalog.pm index b44d568b54440..a5e9869378b97 100644 --- a/src/backend/catalog/Catalog.pm +++ b/src/backend/catalog/Catalog.pm @@ -94,18 +94,21 @@ sub ParseHeader push @{ $catalog{toasting} }, { parent_table => $1, toast_oid => $2, toast_index_oid => $3 }; } - elsif (/^DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*(\w+),\s*(\d+),\s*(.+)\)/) + elsif ( + /^DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*(\w+),\s*(\d+),\s*(.+)\)/) { push @{ $catalog{indexing} }, - { + { is_unique => $1 ? 1 : 0, - is_pkey => $2 ? 1 : 0, + is_pkey => $2 ? 1 : 0, index_name => $3, index_oid => $4, index_decl => $5 }; } - elsif (/^DECLARE_(ARRAY_)?FOREIGN_KEY(_OPT)?\(\s*\(([^)]+)\),\s*(\w+),\s*\(([^)]+)\)\)/) + elsif ( + /^DECLARE_(ARRAY_)?FOREIGN_KEY(_OPT)?\(\s*\(([^)]+)\),\s*(\w+),\s*\(([^)]+)\)\)/ + ) { push @{ $catalog{foreign_keys} }, { diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c index e1573eb3984fd..53392414f1098 100644 --- a/src/backend/catalog/aclchk.c +++ b/src/backend/catalog/aclchk.c @@ -3926,8 +3926,8 @@ pg_class_aclmask_ext(Oid table_oid, Oid roleid, AclMode mask, ReleaseSysCache(tuple); /* - * Check if ACL_SELECT is being checked and, if so, and not set already - * as part of the result, then check if the user is a member of the + * Check if ACL_SELECT is being checked and, if so, and not set already as + * part of the result, then check if the user is a member of the * pg_read_all_data role, which allows read access to all relations. */ if (mask & ACL_SELECT && !(result & ACL_SELECT) && @@ -3935,14 +3935,14 @@ pg_class_aclmask_ext(Oid table_oid, Oid roleid, AclMode mask, result |= ACL_SELECT; /* - * Check if ACL_INSERT, ACL_UPDATE, or ACL_DELETE is being checked - * and, if so, and not set already as part of the result, then check - * if the user is a member of the pg_write_all_data role, which - * allows INSERT/UPDATE/DELETE access to all relations (except - * system catalogs, which requires superuser, see above). + * Check if ACL_INSERT, ACL_UPDATE, or ACL_DELETE is being checked and, if + * so, and not set already as part of the result, then check if the user + * is a member of the pg_write_all_data role, which allows + * INSERT/UPDATE/DELETE access to all relations (except system catalogs, + * which requires superuser, see above). */ if (mask & (ACL_INSERT | ACL_UPDATE | ACL_DELETE) && - !(result & (ACL_INSERT | ACL_UPDATE | ACL_DELETE)) && + !(result & (ACL_INSERT | ACL_UPDATE | ACL_DELETE)) && has_privs_of_role(roleid, ROLE_PG_WRITE_ALL_DATA)) result |= (mask & (ACL_INSERT | ACL_UPDATE | ACL_DELETE)); @@ -4273,10 +4273,10 @@ pg_namespace_aclmask(Oid nsp_oid, Oid roleid, ReleaseSysCache(tuple); /* - * Check if ACL_USAGE is being checked and, if so, and not set already - * as part of the result, then check if the user is a member of the - * pg_read_all_data or pg_write_all_data roles, which allow usage - * access to all schemas. + * Check if ACL_USAGE is being checked and, if so, and not set already as + * part of the result, then check if the user is a member of the + * pg_read_all_data or pg_write_all_data roles, which allow usage access + * to all schemas. */ if (mask & ACL_USAGE && !(result & ACL_USAGE) && (has_privs_of_role(roleid, ROLE_PG_READ_ALL_DATA) || @@ -4568,7 +4568,7 @@ pg_attribute_aclcheck(Oid table_oid, AttrNumber attnum, */ AclResult pg_attribute_aclcheck_ext(Oid table_oid, AttrNumber attnum, - Oid roleid, AclMode mode, bool *is_missing) + Oid roleid, AclMode mode, bool *is_missing) { if (pg_attribute_aclmask_ext(table_oid, attnum, roleid, mode, ACLMASK_ANY, is_missing) != 0) diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index 259cde33976a4..0c37fc1d53ff9 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -1120,7 +1120,7 @@ reportDependentObjects(const ObjectAddresses *targetObjects, */ ereport(DEBUG2, (errmsg_internal("drop auto-cascades to %s", - objDesc))); + objDesc))); } else if (behavior == DROP_RESTRICT) { diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index 9586c29ad0680..bf080b5f124fb 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -786,9 +786,9 @@ close $constraints; # Finally, rename the completed files into place. -Catalog::RenameTempFile($bkifile, $tmpext); -Catalog::RenameTempFile($schemafile, $tmpext); -Catalog::RenameTempFile($fk_info_file, $tmpext); +Catalog::RenameTempFile($bkifile, $tmpext); +Catalog::RenameTempFile($schemafile, $tmpext); +Catalog::RenameTempFile($fk_info_file, $tmpext); Catalog::RenameTempFile($constraints_file, $tmpext); exit 0; diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 8ded2b53d4c74..0f8cfae4ec9d6 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -382,8 +382,8 @@ ConstructTupleDescriptor(Relation heapRelation, * For expression columns, set attcompression invalid, since * there's no table column from which to copy the value. Whenever * we actually need to compress a value, we'll use whatever the - * current value of default_compression_method is at that point - * in time. + * current value of default_compression_method is at that point in + * time. */ to->attcompression = InvalidCompressionMethod; @@ -2927,14 +2927,14 @@ index_build(Relation heapRelation, if (indexInfo->ii_ParallelWorkers == 0) ereport(DEBUG1, (errmsg_internal("building index \"%s\" on table \"%s\" serially", - RelationGetRelationName(indexRelation), - RelationGetRelationName(heapRelation)))); + RelationGetRelationName(indexRelation), + RelationGetRelationName(heapRelation)))); else ereport(DEBUG1, (errmsg_internal("building index \"%s\" on table \"%s\" with request for %d parallel workers", - RelationGetRelationName(indexRelation), - RelationGetRelationName(heapRelation), - indexInfo->ii_ParallelWorkers))); + RelationGetRelationName(indexRelation), + RelationGetRelationName(heapRelation), + indexInfo->ii_ParallelWorkers))); /* * Switch to the table owner's userid, so that any index functions are run @@ -3619,8 +3619,7 @@ reindex_index(Oid indexId, bool skip_constraint_checks, char persistence, SetRelationTableSpace(iRel, params->tablespaceOid, InvalidOid); /* - * Schedule unlinking of the old index storage at transaction - * commit. + * Schedule unlinking of the old index storage at transaction commit. */ RelationDropStorage(iRel); RelationAssumeNewRelfilenode(iRel); diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index d1d7a10b43832..d79c3cde7c6ab 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -96,7 +96,8 @@ */ typedef struct { - const char *class_descr; /* string describing the catalog, for internal error messages */ + const char *class_descr; /* string describing the catalog, for internal + * error messages */ Oid class_oid; /* oid of catalog */ Oid oid_index_oid; /* oid of index on system oid column */ int oid_catcache_id; /* id of catcache on system oid column */ @@ -2871,6 +2872,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok) char *attname = get_attname(object->objectId, object->objectSubId, missing_ok); + if (!attname) break; @@ -2888,6 +2890,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok) bits16 flags = FORMAT_PROC_INVALID_AS_NULL; char *proname = format_procedure_extended(object->objectId, flags); + if (proname == NULL) break; @@ -2900,6 +2903,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok) bits16 flags = FORMAT_TYPE_INVALID_AS_NULL; char *typname = format_type_extended(object->objectId, -1, flags); + if (typname == NULL) break; @@ -3861,6 +3865,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok) { char *pubname = get_publication_name(object->objectId, missing_ok); + if (pubname) appendStringInfo(&buffer, _("publication %s"), pubname); break; @@ -3901,6 +3906,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok) { char *subname = get_subscription_name(object->objectId, missing_ok); + if (subname) appendStringInfo(&buffer, _("subscription %s"), subname); break; @@ -4708,6 +4714,7 @@ getObjectIdentityParts(const ObjectAddress *object, bits16 flags = FORMAT_PROC_FORCE_QUALIFY | FORMAT_PROC_INVALID_AS_NULL; char *proname = format_procedure_extended(object->objectId, flags); + if (proname == NULL) break; @@ -4957,6 +4964,7 @@ getObjectIdentityParts(const ObjectAddress *object, bits16 flags = FORMAT_OPERATOR_FORCE_QUALIFY | FORMAT_OPERATOR_INVALID_AS_NULL; char *oprname = format_operator_extended(object->objectId, flags); + if (oprname == NULL) break; diff --git a/src/backend/catalog/pg_inherits.c b/src/backend/catalog/pg_inherits.c index c373faf2d64de..1c37a438c3915 100644 --- a/src/backend/catalog/pg_inherits.c +++ b/src/backend/catalog/pg_inherits.c @@ -578,7 +578,7 @@ DeleteInheritsTuple(Oid inhrelid, Oid inhparent, bool expect_detach_pending, parent = ((Form_pg_inherits) GETSTRUCT(inheritsTuple))->inhparent; if (!OidIsValid(inhparent) || parent == inhparent) { - bool detach_pending; + bool detach_pending; detach_pending = ((Form_pg_inherits) GETSTRUCT(inheritsTuple))->inhdetachpending; @@ -640,7 +640,7 @@ PartitionHasPendingDetach(Oid partoid) while (HeapTupleIsValid(inheritsTuple = systable_getnext(scan))) { - bool detached; + bool detached; detached = ((Form_pg_inherits) GETSTRUCT(inheritsTuple))->inhdetachpending; diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index 478dbde3fe67d..5403110820412 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -903,10 +903,10 @@ fmgr_sql_validator(PG_FUNCTION_ARGS) else { /* - * We can't do full prechecking of the function definition if there - * are any polymorphic input types, because actual datatypes of - * expression results will be unresolvable. The check will be done at - * runtime instead. + * We can't do full prechecking of the function definition if + * there are any polymorphic input types, because actual datatypes + * of expression results will be unresolvable. The check will be + * done at runtime instead. * * We can run the text through the raw parser though; this will at * least catch silly syntactic errors. @@ -917,8 +917,8 @@ fmgr_sql_validator(PG_FUNCTION_ARGS) if (!haspolyarg) { /* - * OK to do full precheck: analyze and rewrite the queries, then - * verify the result type. + * OK to do full precheck: analyze and rewrite the queries, + * then verify the result type. */ SQLFunctionParseInfoPtr pinfo; diff --git a/src/backend/catalog/pg_shdepend.c b/src/backend/catalog/pg_shdepend.c index 90b7a5de29962..420ad965653e9 100644 --- a/src/backend/catalog/pg_shdepend.c +++ b/src/backend/catalog/pg_shdepend.c @@ -361,7 +361,7 @@ void recordDependencyOnTablespace(Oid classId, Oid objectId, Oid tablespace) { ObjectAddress myself, - referenced; + referenced; ObjectAddressSet(myself, classId, objectId); ObjectAddressSet(referenced, TableSpaceRelationId, tablespace); diff --git a/src/backend/catalog/pg_subscription.c b/src/backend/catalog/pg_subscription.c index 7db1f7df08ca0..29fc4218cd4bb 100644 --- a/src/backend/catalog/pg_subscription.c +++ b/src/backend/catalog/pg_subscription.c @@ -433,6 +433,7 @@ RemoveSubscriptionRel(Oid subid, Oid relid) get_subscription_name(subrel->srsubid, false)), errdetail("Table synchronization for relation \"%s\" is in progress and is in state \"%c\".", get_rel_name(relid), subrel->srsubstate), + /* * translator: first %s is a SQL ALTER command and second %s is a * SQL DROP command diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c index 933a0734d1a94..bf81f6ccc5552 100644 --- a/src/backend/catalog/toasting.c +++ b/src/backend/catalog/toasting.c @@ -351,9 +351,8 @@ create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid, table_close(class_rel, RowExclusiveLock); /* - * Register dependency from the toast table to the main, so that the - * toast table will be deleted if the main is. Skip this in bootstrap - * mode. + * Register dependency from the toast table to the main, so that the toast + * table will be deleted if the main is. Skip this in bootstrap mode. */ if (!IsBootstrapProcessingMode()) { @@ -396,9 +395,9 @@ needs_toast_table(Relation rel) /* * Ignore attempts to create toast tables on catalog tables after initdb. - * Which catalogs get toast tables is explicitly chosen in - * catalog/pg_*.h. (We could get here via some ALTER TABLE command if - * the catalog doesn't have a toast table.) + * Which catalogs get toast tables is explicitly chosen in catalog/pg_*.h. + * (We could get here via some ALTER TABLE command if the catalog doesn't + * have a toast table.) */ if (IsCatalogRelation(rel) && !IsBootstrapProcessingMode()) return false; diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 8aa329a2a03d6..426c1e671092b 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -617,11 +617,10 @@ do_analyze_rel(Relation onerel, VacuumParams *params, * * We assume that VACUUM hasn't set pg_class.reltuples already, even * during a VACUUM ANALYZE. Although VACUUM often updates pg_class, - * exceptions exist. A "VACUUM (ANALYZE, INDEX_CLEANUP OFF)" command - * will never update pg_class entries for index relations. It's also - * possible that an individual index's pg_class entry won't be updated - * during VACUUM if the index AM returns NULL from its amvacuumcleanup() - * routine. + * exceptions exist. A "VACUUM (ANALYZE, INDEX_CLEANUP OFF)" command will + * never update pg_class entries for index relations. It's also possible + * that an individual index's pg_class entry won't be updated during + * VACUUM if the index AM returns NULL from its amvacuumcleanup() routine. */ if (!inh) { @@ -659,9 +658,9 @@ do_analyze_rel(Relation onerel, VacuumParams *params, else if (onerel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) { /* - * Partitioned tables don't have storage, so we don't set any fields in - * their pg_class entries except for reltuples, which is necessary for - * auto-analyze to work properly. + * Partitioned tables don't have storage, so we don't set any fields + * in their pg_class entries except for reltuples, which is necessary + * for auto-analyze to work properly. */ vac_update_relstats(onerel, -1, totalrows, 0, false, InvalidTransactionId, diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c index 67bac9ccab60b..89a4f8f810e5a 100644 --- a/src/backend/commands/copyto.c +++ b/src/backend/commands/copyto.c @@ -104,7 +104,7 @@ typedef struct CopyToStateData typedef struct { DestReceiver pub; /* publicly-known function pointers */ - CopyToState cstate; /* CopyToStateData for the command */ + CopyToState cstate; /* CopyToStateData for the command */ uint64 processed; /* # of tuples processed */ } DR_copy; @@ -348,7 +348,7 @@ BeginCopyTo(ParseState *pstate, List *attnamelist, List *options) { - CopyToState cstate; + CopyToState cstate; bool pipe = (filename == NULL); TupleDesc tupDesc; int num_phys_attrs; @@ -415,7 +415,7 @@ BeginCopyTo(ParseState *pstate, oldcontext = MemoryContextSwitchTo(cstate->copycontext); /* Extract options from the statement node tree */ - ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */, options); + ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options); /* Process the source/target relation or query */ if (rel) @@ -793,7 +793,7 @@ DoCopyTo(CopyToState cstate) else tupDesc = cstate->queryDesc->tupDesc; num_phys_attrs = tupDesc->natts; - cstate->opts.null_print_client = cstate->opts.null_print; /* default */ + cstate->opts.null_print_client = cstate->opts.null_print; /* default */ /* We use fe_msgbuf as a per-row buffer regardless of copy_dest */ cstate->fe_msgbuf = makeStringInfo(); @@ -850,8 +850,8 @@ DoCopyTo(CopyToState cstate) */ if (cstate->need_transcoding) cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print, - cstate->opts.null_print_len, - cstate->file_encoding); + cstate->opts.null_print_len, + cstate->file_encoding); /* if a header has been requested send the line */ if (cstate->opts.header_line) @@ -1265,7 +1265,7 @@ static bool copy_dest_receive(TupleTableSlot *slot, DestReceiver *self) { DR_copy *myState = (DR_copy *) self; - CopyToState cstate = myState->cstate; + CopyToState cstate = myState->cstate; /* Send the data */ CopyOneRowTo(cstate, slot); diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 9867da83bca0d..1202bf85a367a 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -167,7 +167,7 @@ ExplainQuery(ParseState *pstate, ExplainStmt *stmt, ExplainState *es = NewExplainState(); TupOutputState *tstate; JumbleState *jstate = NULL; - Query *query; + Query *query; List *rewritten; ListCell *lc; bool timing_set = false; @@ -458,7 +458,7 @@ ExplainOneUtility(Node *utilityStmt, IntoClause *into, ExplainState *es, else if (ctas->objtype == OBJECT_MATVIEW) ExplainDummyGroup("CREATE MATERIALIZED VIEW", NULL, es); else - elog(ERROR, "unexpected object type: %d", + elog(ERROR, "unexpected object type: %d", (int) ctas->objtype); return; } @@ -612,7 +612,7 @@ ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, ExplainState *es, if (es->verbose && plannedstmt->queryId != UINT64CONST(0)) { - char buf[MAXINT8LEN+1]; + char buf[MAXINT8LEN + 1]; pg_lltoa(plannedstmt->queryId, buf); ExplainPropertyText("Query Identifier", buf, es); @@ -3298,7 +3298,7 @@ show_hashagg_info(AggState *aggstate, ExplainState *es) if (aggstate->hash_batches_used > 1) { appendStringInfo(es->str, " Disk Usage: " UINT64_FORMAT "kB", - aggstate->hash_disk_used); + aggstate->hash_disk_used); } } diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index 19db329fe6f08..008505368c404 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -3293,8 +3293,8 @@ ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt, case OBJECT_SUBSCRIPTION: case OBJECT_TABLESPACE: ereport(ERROR, - (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), - errmsg("cannot add an object of this type to an extension"))); + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("cannot add an object of this type to an extension"))); break; default: /* OK */ diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 3edf61993ad96..76774dce06446 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1086,9 +1086,9 @@ DefineIndex(Oid relationId, ereport(DEBUG1, (errmsg_internal("%s %s will create implicit index \"%s\" for table \"%s\"", - is_alter_table ? "ALTER TABLE / ADD" : "CREATE TABLE /", - constraint_type, - indexRelationName, RelationGetRelationName(rel)))); + is_alter_table ? "ALTER TABLE / ADD" : "CREATE TABLE /", + constraint_type, + indexRelationName, RelationGetRelationName(rel)))); } /* diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index bbb2f5d029ea7..8aa6de17850af 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -628,7 +628,7 @@ AlterSubscription_refresh(Subscription *sub, bool copy_data) InvalidXLogRecPtr); ereport(DEBUG1, (errmsg_internal("table \"%s.%s\" added to subscription \"%s\"", - rv->schemaname, rv->relname, sub->name))); + rv->schemaname, rv->relname, sub->name))); } } @@ -702,9 +702,9 @@ AlterSubscription_refresh(Subscription *sub, bool copy_data) ereport(DEBUG1, (errmsg_internal("table \"%s.%s\" removed from subscription \"%s\"", - get_namespace_name(get_rel_namespace(relid)), - get_rel_name(relid), - sub->name))); + get_namespace_name(get_rel_namespace(relid)), + get_rel_name(relid), + sub->name))); } } diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 591bf01189b11..ebc62034d26e9 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -563,7 +563,7 @@ static void ATExecGenericOptions(Relation rel, List *options); static void ATExecSetRowSecurity(Relation rel, bool rls); static void ATExecForceNoForceRowSecurity(Relation rel, bool force_rls); static ObjectAddress ATExecSetCompression(AlteredTableInfo *tab, Relation rel, - const char *column, Node *newValue, LOCKMODE lockmode); + const char *column, Node *newValue, LOCKMODE lockmode); static void index_copy_data(Relation rel, RelFileNode newrnode); static const char *storage_name(char c); @@ -2593,7 +2593,7 @@ MergeAttributes(List *schema, List *supers, char relpersistence, if (CompressionMethodIsValid(attribute->attcompression)) { const char *compression = - GetCompressionMethodName(attribute->attcompression); + GetCompressionMethodName(attribute->attcompression); if (def->compression == NULL) def->compression = pstrdup(compression); @@ -2641,7 +2641,7 @@ MergeAttributes(List *schema, List *supers, char relpersistence, def->location = -1; if (CompressionMethodIsValid(attribute->attcompression)) def->compression = pstrdup(GetCompressionMethodName( - attribute->attcompression)); + attribute->attcompression)); else def->compression = NULL; inhSchema = lappend(inhSchema, def); @@ -4524,7 +4524,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, /* No command-specific prep needed */ pass = AT_PASS_MISC; break; - case AT_SetCompression: /* ALTER COLUMN SET COMPRESSION */ + case AT_SetCompression: /* ALTER COLUMN SET COMPRESSION */ ATSimplePermissions(rel, ATT_TABLE | ATT_MATVIEW); /* This command never recurses */ /* No command-specific prep needed */ @@ -5666,11 +5666,11 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode) if (newrel) ereport(DEBUG1, (errmsg_internal("rewriting table \"%s\"", - RelationGetRelationName(oldrel)))); + RelationGetRelationName(oldrel)))); else ereport(DEBUG1, (errmsg_internal("verifying table \"%s\"", - RelationGetRelationName(oldrel)))); + RelationGetRelationName(oldrel)))); if (newrel) { @@ -7297,7 +7297,7 @@ NotNullImpliedByRelConstraints(Relation rel, Form_pg_attribute attr) { ereport(DEBUG1, (errmsg_internal("existing constraints on column \"%s.%s\" are sufficient to prove that it does not contain nulls", - RelationGetRelationName(rel), NameStr(attr->attname)))); + RelationGetRelationName(rel), NameStr(attr->attname)))); return true; } @@ -12876,7 +12876,7 @@ ATPostAlterTypeParse(Oid oldId, Oid oldRelId, Oid refRelId, char *cmd, } else if (IsA(stm, CreateStatsStmt)) { - CreateStatsStmt *stmt = (CreateStatsStmt *) stm; + CreateStatsStmt *stmt = (CreateStatsStmt *) stm; AlterTableCmd *newcmd; /* keep the statistics object's comment */ @@ -14539,9 +14539,9 @@ MergeAttributesIntoExisting(Relation child_rel, Relation parent_rel) if (strcmp(child_expr, parent_expr) != 0) ereport(ERROR, - (errcode(ERRCODE_DATATYPE_MISMATCH), - errmsg("column \"%s\" in child table has a conflicting generation expression", - attributeName))); + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("column \"%s\" in child table has a conflicting generation expression", + attributeName))); } /* @@ -14769,7 +14769,7 @@ static void MarkInheritDetached(Relation child_rel, Relation parent_rel) { Relation catalogRelation; - SysScanDesc scan; + SysScanDesc scan; ScanKeyData key; HeapTuple inheritsTuple; bool found = false; @@ -15645,7 +15645,7 @@ ATExecSetCompression(AlteredTableInfo *tab, if (!IsStorageCompressible(typstorage)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("column data type %s does not support compression", + errmsg("column data type %s does not support compression", format_type_be(atttableform->atttypid)))); /* get the attribute compression method. */ @@ -17010,11 +17010,11 @@ QueuePartitionConstraintValidation(List **wqueue, Relation scanrel, if (!validate_default) ereport(DEBUG1, (errmsg_internal("partition constraint for table \"%s\" is implied by existing constraints", - RelationGetRelationName(scanrel)))); + RelationGetRelationName(scanrel)))); else ereport(DEBUG1, (errmsg_internal("updated partition constraint for default partition \"%s\" is implied by existing constraints", - RelationGetRelationName(scanrel)))); + RelationGetRelationName(scanrel)))); return; } @@ -17745,8 +17745,8 @@ ATExecDetachPartition(List **wqueue, AlteredTableInfo *tab, Relation rel, AccessExclusiveLock); /* - * Check inheritance conditions and either delete the pg_inherits row - * (in non-concurrent mode) or just set the inhdetachpending flag. + * Check inheritance conditions and either delete the pg_inherits row (in + * non-concurrent mode) or just set the inhdetachpending flag. */ if (!concurrent) RemoveInheritance(partRel, rel, false); @@ -17771,11 +17771,11 @@ ATExecDetachPartition(List **wqueue, AlteredTableInfo *tab, Relation rel, */ if (concurrent) { - Oid partrelid, - parentrelid; + Oid partrelid, + parentrelid; LOCKTAG tag; - char *parentrelname; - char *partrelname; + char *parentrelname; + char *partrelname; /* * Add a new constraint to the partition being detached, which @@ -17815,10 +17815,10 @@ ATExecDetachPartition(List **wqueue, AlteredTableInfo *tab, Relation rel, StartTransactionCommand(); /* - * Now wait. This ensures that all queries that were planned including - * the partition are finished before we remove the rest of catalog - * entries. We don't need or indeed want to acquire this lock, though - * -- that would block later queries. + * Now wait. This ensures that all queries that were planned + * including the partition are finished before we remove the rest of + * catalog entries. We don't need or indeed want to acquire this + * lock, though -- that would block later queries. * * We don't need to concern ourselves with waiting for a lock on the * partition itself, since we will acquire AccessExclusiveLock below. @@ -18046,7 +18046,7 @@ DetachPartitionFinalize(Relation rel, Relation partRel, bool concurrent, static ObjectAddress ATExecDetachPartitionFinalize(Relation rel, RangeVar *name) { - Relation partRel; + Relation partRel; ObjectAddress address; Snapshot snap = GetActiveSnapshot(); diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index f305f8bc0f202..ef34421f1ca93 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -4353,7 +4353,7 @@ GetAfterTriggersStoreSlot(AfterTriggersTableData *table, /* Create it if not already done. */ if (!table->storeslot) { - MemoryContext oldcxt; + MemoryContext oldcxt; /* * We only need this slot only until AfterTriggerEndQuery, but making diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 036fa69d17dd9..58ec65c6afc10 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -1569,7 +1569,7 @@ DefineRange(CreateRangeStmt *stmt) /* Create the multirange that goes with it */ if (multirangeTypeName) { - Oid old_typoid; + Oid old_typoid; /* * Look to see if multirange type already exists. @@ -1579,8 +1579,8 @@ DefineRange(CreateRangeStmt *stmt) ObjectIdGetDatum(multirangeNamespace)); /* - * If it's not a shell, see if it's an autogenerated array type, and if so - * rename it out of the way. + * If it's not a shell, see if it's an autogenerated array type, and + * if so rename it out of the way. */ if (OidIsValid(old_typoid) && get_typisdefined(old_typoid)) { @@ -1600,7 +1600,7 @@ DefineRange(CreateRangeStmt *stmt) mltrngaddress = TypeCreate(multirangeOid, /* force assignment of this type OID */ multirangeTypeName, /* type name */ - multirangeNamespace, /* namespace */ + multirangeNamespace, /* namespace */ InvalidOid, /* relation oid (n/a here) */ 0, /* relation kind (ditto) */ GetUserId(), /* owner's ID */ @@ -1682,7 +1682,7 @@ DefineRange(CreateRangeStmt *stmt) TypeCreate(multirangeArrayOid, /* force assignment of this type OID */ multirangeArrayName, /* type name */ - multirangeNamespace, /* namespace */ + multirangeNamespace, /* namespace */ InvalidOid, /* relation oid (n/a here) */ 0, /* relation kind (ditto) */ GetUserId(), /* owner's ID */ @@ -1844,7 +1844,7 @@ makeMultirangeConstructors(const char *name, Oid namespace, PROKIND_FUNCTION, false, /* security_definer */ false, /* leakproof */ - true, /* isStrict */ + true, /* isStrict */ PROVOLATILE_IMMUTABLE, /* volatility */ PROPARALLEL_SAFE, /* parallel safety */ argtypes, /* parameterTypes */ @@ -1929,7 +1929,7 @@ makeMultirangeConstructors(const char *name, Oid namespace, PROKIND_FUNCTION, false, /* security_definer */ false, /* leakproof */ - true, /* isStrict */ + true, /* isStrict */ PROVOLATILE_IMMUTABLE, /* volatility */ PROPARALLEL_SAFE, /* parallel safety */ argtypes, /* parameterTypes */ diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index 39df05c7352b6..d549d0d86fb12 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -1173,8 +1173,8 @@ vacuum_xid_failsafe_check(TransactionId relfrozenxid, MultiXactId relminmxid) /* * Similar to above, determine the index skipping age to use for - * multixact. In any case no less than autovacuum_multixact_freeze_max_age - * * 1.05. + * multixact. In any case no less than autovacuum_multixact_freeze_max_age * + * 1.05. */ skip_index_vacuum = Max(vacuum_multixact_failsafe_age, autovacuum_multixact_freeze_max_age * 1.05); diff --git a/src/backend/executor/execAmi.c b/src/backend/executor/execAmi.c index b3726a54f3789..10f0b349b583a 100644 --- a/src/backend/executor/execAmi.c +++ b/src/backend/executor/execAmi.c @@ -427,6 +427,7 @@ ExecSupportsMarkRestore(Path *pathnode) { case T_IndexScan: case T_IndexOnlyScan: + /* * Not all index types support mark/restore. */ diff --git a/src/backend/executor/execAsync.c b/src/backend/executor/execAsync.c index 75108d36be20e..94a284a31e151 100644 --- a/src/backend/executor/execAsync.c +++ b/src/backend/executor/execAsync.c @@ -26,7 +26,7 @@ void ExecAsyncRequest(AsyncRequest *areq) { if (areq->requestee->chgParam != NULL) /* something changed? */ - ExecReScan(areq->requestee); /* let ReScan handle this */ + ExecReScan(areq->requestee); /* let ReScan handle this */ /* must provide our own instrumentation support */ if (areq->requestee->instrument) @@ -124,7 +124,7 @@ ExecAsyncResponse(AsyncRequest *areq) default: /* If the node doesn't support async, caller messed up. */ elog(ERROR, "unrecognized node type: %d", - (int) nodeTag(areq->requestor)); + (int) nodeTag(areq->requestor)); } } diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 58b496873507b..b3ce4bae53078 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -132,8 +132,8 @@ ExecutorStart(QueryDesc *queryDesc, int eflags) /* * In some cases (e.g. an EXECUTE statement) a query execution will skip * parse analysis, which means that the query_id won't be reported. Note - * that it's harmless to report the query_id multiple time, as the call will - * be ignored if the top level query_id has already been reported. + * that it's harmless to report the query_id multiple time, as the call + * will be ignored if the top level query_id has already been reported. */ pgstat_report_query_id(queryDesc->plannedstmt->queryId, false); diff --git a/src/backend/executor/execPartition.c b/src/backend/executor/execPartition.c index 8e2feafd28c33..606c920b06805 100644 --- a/src/backend/executor/execPartition.c +++ b/src/backend/executor/execPartition.c @@ -917,8 +917,8 @@ ExecInitRoutingInfo(ModifyTableState *mtstate, partRelInfo->ri_FdwRoutine->BeginForeignInsert(mtstate, partRelInfo); /* - * Determine if the FDW supports batch insert and determine the batch - * size (a FDW may support batching, but it may be disabled for the + * Determine if the FDW supports batch insert and determine the batch size + * (a FDW may support batching, but it may be disabled for the * server/table or for this particular query). * * If the FDW does not support batching, we set the batch size to 1. diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index d80adc519dd78..8440a76fbdc9e 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -349,7 +349,7 @@ typedef struct HashAggSpill int64 *ntuples; /* number of tuples in each partition */ uint32 mask; /* mask to find partition from hash value */ int shift; /* after masking, shift by this amount */ - hyperLogLogState *hll_card; /* cardinality estimate for contents */ + hyperLogLogState *hll_card; /* cardinality estimate for contents */ } HashAggSpill; /* @@ -374,9 +374,9 @@ typedef struct HashAggBatch /* used to find referenced colnos */ typedef struct FindColsContext { - bool is_aggref; /* is under an aggref */ - Bitmapset *aggregated; /* column references under an aggref */ - Bitmapset *unaggregated; /* other column references */ + bool is_aggref; /* is under an aggref */ + Bitmapset *aggregated; /* column references under an aggref */ + Bitmapset *unaggregated; /* other column references */ } FindColsContext; static void select_current_set(AggState *aggstate, int setno, bool is_hash); @@ -1397,7 +1397,7 @@ project_aggregates(AggState *aggstate) static void find_cols(AggState *aggstate, Bitmapset **aggregated, Bitmapset **unaggregated) { - Agg *agg = (Agg *) aggstate->ss.ps.plan; + Agg *agg = (Agg *) aggstate->ss.ps.plan; FindColsContext context; context.is_aggref = false; @@ -1579,7 +1579,8 @@ find_hash_columns(AggState *aggstate) for (int i = 0; i < scanDesc->natts; i++) { - int colno = i + 1; + int colno = i + 1; + if (bms_is_member(colno, aggstate->colnos_needed)) aggstate->max_colno_needed = colno; else @@ -3158,10 +3159,10 @@ hashagg_spill_finish(AggState *aggstate, HashAggSpill *spill, int setno) for (i = 0; i < spill->npartitions; i++) { - LogicalTapeSet *tapeset = aggstate->hash_tapeinfo->tapeset; - int tapenum = spill->partitions[i]; - HashAggBatch *new_batch; - double cardinality; + LogicalTapeSet *tapeset = aggstate->hash_tapeinfo->tapeset; + int tapenum = spill->partitions[i]; + HashAggBatch *new_batch; + double cardinality; /* if the partition is empty, don't create a new batch of work */ if (spill->ntuples[i] == 0) diff --git a/src/backend/executor/nodeAppend.c b/src/backend/executor/nodeAppend.c index 1558fafad1e5e..62335ed4c4744 100644 --- a/src/backend/executor/nodeAppend.c +++ b/src/backend/executor/nodeAppend.c @@ -566,9 +566,9 @@ choose_next_subplan_locally(AppendState *node) /* * If first call then have the bms member function choose the first valid - * sync subplan by initializing whichplan to -1. If there happen to be - * no valid sync subplans then the bms member function will handle that - * by returning a negative number which will allow us to exit returning a + * sync subplan by initializing whichplan to -1. If there happen to be no + * valid sync subplans then the bms member function will handle that by + * returning a negative number which will allow us to exit returning a * false value. */ if (whichplan == INVALID_SUBPLAN_INDEX) @@ -925,8 +925,8 @@ ExecAppendAsyncGetNext(AppendState *node, TupleTableSlot **result) /* * If all sync subplans are complete, we're totally done scanning the - * given node. Otherwise, we're done with the asynchronous stuff but - * must continue scanning the sync subplans. + * given node. Otherwise, we're done with the asynchronous stuff but must + * continue scanning the sync subplans. */ if (node->as_syncdone) { @@ -1003,7 +1003,7 @@ ExecAppendAsyncEventWait(AppendState *node) { int nevents = node->as_nasyncplans + 1; long timeout = node->as_syncdone ? -1 : 0; - WaitEvent occurred_event[EVENT_BUFFER_SIZE]; + WaitEvent occurred_event[EVENT_BUFFER_SIZE]; int noccurred; int i; @@ -1054,8 +1054,8 @@ ExecAppendAsyncEventWait(AppendState *node) /* * Mark it as no longer needing a callback. We must do this - * before dispatching the callback in case the callback resets - * the flag. + * before dispatching the callback in case the callback resets the + * flag. */ Assert(areq->callback_pending); areq->callback_pending = false; diff --git a/src/backend/executor/nodeGather.c b/src/backend/executor/nodeGather.c index 9e1dc464cb097..734142b7b16f6 100644 --- a/src/backend/executor/nodeGather.c +++ b/src/backend/executor/nodeGather.c @@ -266,7 +266,7 @@ gather_getnext(GatherState *gatherstate) PlanState *outerPlan = outerPlanState(gatherstate); TupleTableSlot *outerTupleSlot; TupleTableSlot *fslot = gatherstate->funnel_slot; - MinimalTuple tup; + MinimalTuple tup; while (gatherstate->nreaders > 0 || gatherstate->need_to_scan_locally) { @@ -278,7 +278,7 @@ gather_getnext(GatherState *gatherstate) if (HeapTupleIsValid(tup)) { - ExecStoreMinimalTuple(tup, /* tuple to store */ + ExecStoreMinimalTuple(tup, /* tuple to store */ fslot, /* slot to store the tuple */ false); /* don't pfree tuple */ return fslot; diff --git a/src/backend/executor/nodeGatherMerge.c b/src/backend/executor/nodeGatherMerge.c index aa5743cebfc1a..03f02a19aabe2 100644 --- a/src/backend/executor/nodeGatherMerge.c +++ b/src/backend/executor/nodeGatherMerge.c @@ -700,9 +700,9 @@ gather_merge_readnext(GatherMergeState *gm_state, int reader, bool nowait) Assert(tup); /* Build the TupleTableSlot for the given tuple */ - ExecStoreMinimalTuple(tup, /* tuple to store */ - gm_state->gm_slots[reader], /* slot in which to store - * the tuple */ + ExecStoreMinimalTuple(tup, /* tuple to store */ + gm_state->gm_slots[reader], /* slot in which to + * store the tuple */ true); /* pfree tuple when done with it */ return true; diff --git a/src/backend/executor/nodeIncrementalSort.c b/src/backend/executor/nodeIncrementalSort.c index 18f246a8233c9..934426a66798a 100644 --- a/src/backend/executor/nodeIncrementalSort.c +++ b/src/backend/executor/nodeIncrementalSort.c @@ -1162,8 +1162,8 @@ ExecReScanIncrementalSort(IncrementalSortState *node) } /* - * If chgParam of subnode is not null, then the plan will be re-scanned - * by the first ExecProcNode. + * If chgParam of subnode is not null, then the plan will be re-scanned by + * the first ExecProcNode. */ if (outerPlan->chgParam == NULL) ExecReScan(outerPlan); diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index a62928ae7cea1..0816027f7f7c7 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -61,12 +61,12 @@ typedef struct MTTargetRelLookup } MTTargetRelLookup; static void ExecBatchInsert(ModifyTableState *mtstate, - ResultRelInfo *resultRelInfo, - TupleTableSlot **slots, - TupleTableSlot **planSlots, - int numSlots, - EState *estate, - bool canSetTag); + ResultRelInfo *resultRelInfo, + TupleTableSlot **slots, + TupleTableSlot **planSlots, + int numSlots, + EState *estate, + bool canSetTag); static bool ExecOnConflictUpdate(ModifyTableState *mtstate, ResultRelInfo *resultRelInfo, ItemPointer conflictTid, @@ -673,17 +673,17 @@ ExecInsert(ModifyTableState *mtstate, if (resultRelInfo->ri_BatchSize > 1) { /* - * If a certain number of tuples have already been accumulated, - * or a tuple has come for a different relation than that for - * the accumulated tuples, perform the batch insert + * If a certain number of tuples have already been accumulated, or + * a tuple has come for a different relation than that for the + * accumulated tuples, perform the batch insert */ if (resultRelInfo->ri_NumSlots == resultRelInfo->ri_BatchSize) { ExecBatchInsert(mtstate, resultRelInfo, - resultRelInfo->ri_Slots, - resultRelInfo->ri_PlanSlots, - resultRelInfo->ri_NumSlots, - estate, canSetTag); + resultRelInfo->ri_Slots, + resultRelInfo->ri_PlanSlots, + resultRelInfo->ri_NumSlots, + estate, canSetTag); resultRelInfo->ri_NumSlots = 0; } @@ -692,9 +692,9 @@ ExecInsert(ModifyTableState *mtstate, if (resultRelInfo->ri_Slots == NULL) { resultRelInfo->ri_Slots = palloc(sizeof(TupleTableSlot *) * - resultRelInfo->ri_BatchSize); + resultRelInfo->ri_BatchSize); resultRelInfo->ri_PlanSlots = palloc(sizeof(TupleTableSlot *) * - resultRelInfo->ri_BatchSize); + resultRelInfo->ri_BatchSize); } resultRelInfo->ri_Slots[resultRelInfo->ri_NumSlots] = @@ -982,12 +982,12 @@ ExecInsert(ModifyTableState *mtstate, */ static void ExecBatchInsert(ModifyTableState *mtstate, - ResultRelInfo *resultRelInfo, - TupleTableSlot **slots, - TupleTableSlot **planSlots, - int numSlots, - EState *estate, - bool canSetTag) + ResultRelInfo *resultRelInfo, + TupleTableSlot **slots, + TupleTableSlot **planSlots, + int numSlots, + EState *estate, + bool canSetTag) { int i; int numInserted = numSlots; @@ -998,10 +998,10 @@ ExecBatchInsert(ModifyTableState *mtstate, * insert into foreign table: let the FDW do it */ rslots = resultRelInfo->ri_FdwRoutine->ExecForeignBatchInsert(estate, - resultRelInfo, - slots, - planSlots, - &numInserted); + resultRelInfo, + slots, + planSlots, + &numInserted); for (i = 0; i < numInserted; i++) { @@ -2604,10 +2604,10 @@ ExecModifyTable(PlanState *pstate) resultRelInfo = lfirst(lc); if (resultRelInfo->ri_NumSlots > 0) ExecBatchInsert(node, resultRelInfo, - resultRelInfo->ri_Slots, - resultRelInfo->ri_PlanSlots, - resultRelInfo->ri_NumSlots, - estate, node->canSetTag); + resultRelInfo->ri_Slots, + resultRelInfo->ri_PlanSlots, + resultRelInfo->ri_NumSlots, + estate, node->canSetTag); } /* @@ -3091,12 +3091,12 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) mtstate->mt_resultOidHash = NULL; /* - * Determine if the FDW supports batch insert and determine the batch - * size (a FDW may support batching, but it may be disabled for the + * Determine if the FDW supports batch insert and determine the batch size + * (a FDW may support batching, but it may be disabled for the * server/table). * - * We only do this for INSERT, so that for UPDATE/DELETE the batch - * size remains set to 0. + * We only do this for INSERT, so that for UPDATE/DELETE the batch size + * remains set to 0. */ if (operation == CMD_INSERT) { diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c index 98a27f08bfd0f..71029a39a989b 100644 --- a/src/backend/jit/llvm/llvmjit.c +++ b/src/backend/jit/llvm/llvmjit.c @@ -769,9 +769,9 @@ llvm_compile_module(LLVMJitContext *context) ereport(DEBUG1, (errmsg_internal("time to inline: %.3fs, opt: %.3fs, emit: %.3fs", - INSTR_TIME_GET_DOUBLE(context->base.instr.inlining_counter), - INSTR_TIME_GET_DOUBLE(context->base.instr.optimization_counter), - INSTR_TIME_GET_DOUBLE(context->base.instr.emission_counter)), + INSTR_TIME_GET_DOUBLE(context->base.instr.inlining_counter), + INSTR_TIME_GET_DOUBLE(context->base.instr.optimization_counter), + INSTR_TIME_GET_DOUBLE(context->base.instr.emission_counter)), errhidestmt(true), errhidecontext(true))); } @@ -1094,7 +1094,7 @@ llvm_resolve_symbol(const char *symname, void *ctx) static LLVMErrorRef llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx, - LLVMOrcLookupStateRef *LookupState, LLVMOrcLookupKind Kind, + LLVMOrcLookupStateRef * LookupState, LLVMOrcLookupKind Kind, LLVMOrcJITDylibRef JD, LLVMOrcJITDylibLookupFlags JDLookupFlags, LLVMOrcCLookupSet LookupSet, size_t LookupSetSize) { diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index 45a91235a4546..68372fcea87e3 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -711,17 +711,16 @@ recv_password_packet(Port *port) if (mtype != 'p') { /* - * If the client just disconnects without offering a password, - * don't make a log entry. This is legal per protocol spec and in - * fact commonly done by psql, so complaining just clutters the - * log. + * If the client just disconnects without offering a password, don't + * make a log entry. This is legal per protocol spec and in fact + * commonly done by psql, so complaining just clutters the log. */ if (mtype != EOF) ereport(ERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("expected password response, got message type %d", mtype))); - return NULL; /* EOF or bad message type */ + return NULL; /* EOF or bad message type */ } initStringInfo(&buf); diff --git a/src/backend/libpq/be-secure-openssl.c b/src/backend/libpq/be-secure-openssl.c index 40deab13c7dc4..c4e8113241d39 100644 --- a/src/backend/libpq/be-secure-openssl.c +++ b/src/backend/libpq/be-secure-openssl.c @@ -602,6 +602,7 @@ be_tls_open_server(Port *port) port->peer_cn = NULL; return -1; } + /* * RFC2253 is the closest thing to an accepted standard format for * DNs. We have documented how to produce this format from a diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index b9ccd4473f7d8..89a5f901aa096 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -175,8 +175,8 @@ WaitEventSet *FeBeWaitSet; void pq_init(void) { - int socket_pos PG_USED_FOR_ASSERTS_ONLY; - int latch_pos PG_USED_FOR_ASSERTS_ONLY; + int socket_pos PG_USED_FOR_ASSERTS_ONLY; + int latch_pos PG_USED_FOR_ASSERTS_ONLY; /* initialize state variables */ PqSendBufferSize = PQ_SEND_BUFFER_SIZE; diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 7003238d76b16..b02f7809c9662 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -1907,11 +1907,11 @@ create_gather_merge_plan(PlannerInfo *root, GatherMergePath *best_path) /* - * All gather merge paths should have already guaranteed the necessary sort - * order either by adding an explicit sort node or by using presorted input. - * We can't simply add a sort here on additional pathkeys, because we can't - * guarantee the sort would be safe. For example, expressions may be - * volatile or otherwise parallel unsafe. + * All gather merge paths should have already guaranteed the necessary + * sort order either by adding an explicit sort node or by using presorted + * input. We can't simply add a sort here on additional pathkeys, because + * we can't guarantee the sort would be safe. For example, expressions may + * be volatile or otherwise parallel unsafe. */ if (!pathkeys_contained_in(pathkeys, best_path->subpath->pathkeys)) elog(ERROR, "gather merge input not sufficiently sorted"); diff --git a/src/backend/optimizer/prep/preptlist.c b/src/backend/optimizer/prep/preptlist.c index aefb6f8d4e8c3..e9434580d6d93 100644 --- a/src/backend/optimizer/prep/preptlist.c +++ b/src/backend/optimizer/prep/preptlist.c @@ -350,34 +350,34 @@ expand_insert_targetlist(List *tlist, Relation rel) Oid attcollation = att_tup->attcollation; Node *new_expr; - if (!att_tup->attisdropped) - { - new_expr = (Node *) makeConst(atttype, - -1, - attcollation, - att_tup->attlen, - (Datum) 0, - true, /* isnull */ - att_tup->attbyval); - new_expr = coerce_to_domain(new_expr, - InvalidOid, -1, - atttype, - COERCION_IMPLICIT, - COERCE_IMPLICIT_CAST, - -1, - false); - } - else - { - /* Insert NULL for dropped column */ - new_expr = (Node *) makeConst(INT4OID, - -1, - InvalidOid, - sizeof(int32), - (Datum) 0, - true, /* isnull */ - true /* byval */ ); - } + if (!att_tup->attisdropped) + { + new_expr = (Node *) makeConst(atttype, + -1, + attcollation, + att_tup->attlen, + (Datum) 0, + true, /* isnull */ + att_tup->attbyval); + new_expr = coerce_to_domain(new_expr, + InvalidOid, -1, + atttype, + COERCION_IMPLICIT, + COERCE_IMPLICIT_CAST, + -1, + false); + } + else + { + /* Insert NULL for dropped column */ + new_expr = (Node *) makeConst(INT4OID, + -1, + InvalidOid, + sizeof(int32), + (Datum) 0, + true, /* isnull */ + true /* byval */ ); + } new_tle = makeTargetEntry((Expr *) new_expr, attrno, diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index d9ad4efc5eac5..e117ab976e62b 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -2563,9 +2563,9 @@ eval_const_expressions_mutator(Node *node, } case T_NullIfExpr: { - NullIfExpr *expr; - ListCell *arg; - bool has_nonconst_input = false; + NullIfExpr *expr; + ListCell *arg; + bool has_nonconst_input = false; /* Copy the node and const-simplify its arguments */ expr = (NullIfExpr *) ece_generic_processing(node); @@ -4359,49 +4359,49 @@ inline_function(Oid funcid, Oid result_type, Oid result_collid, } else { - /* - * Set up to handle parameters while parsing the function body. We need a - * dummy FuncExpr node containing the already-simplified arguments to pass - * to prepare_sql_fn_parse_info. (In some cases we don't really need - * that, but for simplicity we always build it.) - */ - fexpr = makeNode(FuncExpr); - fexpr->funcid = funcid; - fexpr->funcresulttype = result_type; - fexpr->funcretset = false; - fexpr->funcvariadic = funcvariadic; - fexpr->funcformat = COERCE_EXPLICIT_CALL; /* doesn't matter */ - fexpr->funccollid = result_collid; /* doesn't matter */ - fexpr->inputcollid = input_collid; - fexpr->args = args; - fexpr->location = -1; - - pinfo = prepare_sql_fn_parse_info(func_tuple, - (Node *) fexpr, - input_collid); - - /* fexpr also provides a convenient way to resolve a composite result */ - (void) get_expr_result_type((Node *) fexpr, - NULL, - &rettupdesc); + /* + * Set up to handle parameters while parsing the function body. We + * need a dummy FuncExpr node containing the already-simplified + * arguments to pass to prepare_sql_fn_parse_info. (In some cases we + * don't really need that, but for simplicity we always build it.) + */ + fexpr = makeNode(FuncExpr); + fexpr->funcid = funcid; + fexpr->funcresulttype = result_type; + fexpr->funcretset = false; + fexpr->funcvariadic = funcvariadic; + fexpr->funcformat = COERCE_EXPLICIT_CALL; /* doesn't matter */ + fexpr->funccollid = result_collid; /* doesn't matter */ + fexpr->inputcollid = input_collid; + fexpr->args = args; + fexpr->location = -1; + + pinfo = prepare_sql_fn_parse_info(func_tuple, + (Node *) fexpr, + input_collid); + + /* fexpr also provides a convenient way to resolve a composite result */ + (void) get_expr_result_type((Node *) fexpr, + NULL, + &rettupdesc); - /* - * We just do parsing and parse analysis, not rewriting, because rewriting - * will not affect table-free-SELECT-only queries, which is all that we - * care about. Also, we can punt as soon as we detect more than one - * command in the function body. - */ - raw_parsetree_list = pg_parse_query(src); - if (list_length(raw_parsetree_list) != 1) - goto fail; + /* + * We just do parsing and parse analysis, not rewriting, because + * rewriting will not affect table-free-SELECT-only queries, which is + * all that we care about. Also, we can punt as soon as we detect + * more than one command in the function body. + */ + raw_parsetree_list = pg_parse_query(src); + if (list_length(raw_parsetree_list) != 1) + goto fail; - pstate = make_parsestate(NULL); - pstate->p_sourcetext = src; - sql_fn_parser_setup(pstate, pinfo); + pstate = make_parsestate(NULL); + pstate->p_sourcetext = src; + sql_fn_parser_setup(pstate, pinfo); - querytree = transformTopLevelStmt(pstate, linitial(raw_parsetree_list)); + querytree = transformTopLevelStmt(pstate, linitial(raw_parsetree_list)); - free_parsestate(pstate); + free_parsestate(pstate); } /* @@ -4931,31 +4931,31 @@ inline_set_returning_function(PlannerInfo *root, RangeTblEntry *rte) } else { - /* - * Set up to handle parameters while parsing the function body. We can - * use the FuncExpr just created as the input for - * prepare_sql_fn_parse_info. - */ - pinfo = prepare_sql_fn_parse_info(func_tuple, - (Node *) fexpr, - fexpr->inputcollid); + /* + * Set up to handle parameters while parsing the function body. We + * can use the FuncExpr just created as the input for + * prepare_sql_fn_parse_info. + */ + pinfo = prepare_sql_fn_parse_info(func_tuple, + (Node *) fexpr, + fexpr->inputcollid); - /* - * Parse, analyze, and rewrite (unlike inline_function(), we can't skip - * rewriting here). We can fail as soon as we find more than one query, - * though. - */ - raw_parsetree_list = pg_parse_query(src); - if (list_length(raw_parsetree_list) != 1) - goto fail; + /* + * Parse, analyze, and rewrite (unlike inline_function(), we can't + * skip rewriting here). We can fail as soon as we find more than one + * query, though. + */ + raw_parsetree_list = pg_parse_query(src); + if (list_length(raw_parsetree_list) != 1) + goto fail; - querytree_list = pg_analyze_and_rewrite_params(linitial(raw_parsetree_list), - src, - (ParserSetupHook) sql_fn_parser_setup, - pinfo, NULL); - if (list_length(querytree_list) != 1) - goto fail; - querytree = linitial(querytree_list); + querytree_list = pg_analyze_and_rewrite_params(linitial(raw_parsetree_list), + src, + (ParserSetupHook) sql_fn_parser_setup, + pinfo, NULL); + if (list_length(querytree_list) != 1) + goto fail; + querytree = linitial(querytree_list); } /* diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index e415bc3df0fe3..168198acd143c 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -2752,7 +2752,7 @@ transformDeclareCursorStmt(ParseState *pstate, DeclareCursorStmt *stmt) (stmt->options & CURSOR_OPT_NO_SCROLL)) ereport(ERROR, (errcode(ERRCODE_INVALID_CURSOR_DEFINITION), - /* translator: %s is a SQL keyword */ + /* translator: %s is a SQL keyword */ errmsg("cannot specify both %s and %s", "SCROLL", "NO SCROLL"))); @@ -2760,7 +2760,7 @@ transformDeclareCursorStmt(ParseState *pstate, DeclareCursorStmt *stmt) (stmt->options & CURSOR_OPT_INSENSITIVE)) ereport(ERROR, (errcode(ERRCODE_INVALID_CURSOR_DEFINITION), - /* translator: %s is a SQL keyword */ + /* translator: %s is a SQL keyword */ errmsg("cannot specify both %s and %s", "ASENSITIVE", "INSENSITIVE"))); diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c index ceb0bf597d679..9562ffcf3e2bc 100644 --- a/src/backend/parser/parse_agg.c +++ b/src/backend/parser/parse_agg.c @@ -1749,19 +1749,20 @@ cmp_list_len_asc(const ListCell *a, const ListCell *b) static int cmp_list_len_contents_asc(const ListCell *a, const ListCell *b) { - int res = cmp_list_len_asc(a, b); + int res = cmp_list_len_asc(a, b); if (res == 0) { - List *la = (List *) lfirst(a); - List *lb = (List *) lfirst(b); - ListCell *lca; - ListCell *lcb; + List *la = (List *) lfirst(a); + List *lb = (List *) lfirst(b); + ListCell *lca; + ListCell *lcb; forboth(lca, la, lcb, lb) { - int va = lfirst_int(lca); - int vb = lfirst_int(lcb); + int va = lfirst_int(lca); + int vb = lfirst_int(lcb); + if (va > vb) return 1; if (va < vb) diff --git a/src/backend/parser/parse_cte.c b/src/backend/parser/parse_cte.c index ee7613187aa63..f6ae96333af79 100644 --- a/src/backend/parser/parse_cte.c +++ b/src/backend/parser/parse_cte.c @@ -356,7 +356,7 @@ analyzeCTE(ParseState *pstate, CommonTableExpr *cte) * than just being recursive. It basically means the query expression * looks like * - * non-recursive query UNION [ALL] recursive query + * non-recursive query UNION [ALL] recursive query * * and that the recursive query is not itself a set operation. * diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c index d451f055f72bd..74659190447a2 100644 --- a/src/backend/parser/parse_relation.c +++ b/src/backend/parser/parse_relation.c @@ -2360,8 +2360,8 @@ addRangeTableEntryForCTE(ParseState *pstate, * list --- caller must do that if appropriate. */ psi = buildNSItemFromLists(rte, list_length(pstate->p_rtable), - rte->coltypes, rte->coltypmods, - rte->colcollations); + rte->coltypes, rte->coltypmods, + rte->colcollations); /* * The columns added by search and cycle clauses are not included in star diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 48cce4567b438..d5b67d48cfcfc 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -447,8 +447,8 @@ generateSerialExtraStmts(CreateStmtContext *cxt, ColumnDef *column, ereport(DEBUG1, (errmsg_internal("%s will create implicit sequence \"%s\" for serial column \"%s.%s\"", - cxt->stmtType, sname, - cxt->relation->relname, column->colname))); + cxt->stmtType, sname, + cxt->relation->relname, column->colname))); /* * Build a CREATE SEQUENCE command to create the sequence object, and add diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index d3dedfd784442..7925fcce3b355 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -2876,7 +2876,10 @@ check_new_partition_bound(char *relname, Relation parent, { int prev_modulus; - /* We found the largest modulus less than or equal to ours. */ + /* + * We found the largest modulus less than or equal to + * ours. + */ prev_modulus = DatumGetInt32(boundinfo->datums[offset][0]); if (spec->modulus % prev_modulus != 0) @@ -3171,7 +3174,7 @@ check_default_partition_contents(Relation parent, Relation default_rel, { ereport(DEBUG1, (errmsg_internal("updated partition constraint for default partition \"%s\" is implied by existing constraints", - RelationGetRelationName(default_rel)))); + RelationGetRelationName(default_rel)))); return; } @@ -3222,7 +3225,7 @@ check_default_partition_contents(Relation parent, Relation default_rel, { ereport(DEBUG1, (errmsg_internal("updated partition constraint for default partition \"%s\" is implied by existing constraints", - RelationGetRelationName(part_rel)))); + RelationGetRelationName(part_rel)))); table_close(part_rel, NoLock); continue; diff --git a/src/backend/partitioning/partdesc.c b/src/backend/partitioning/partdesc.c index cf1ca0fe5f75f..9a9d6a9643f7f 100644 --- a/src/backend/partitioning/partdesc.c +++ b/src/backend/partitioning/partdesc.c @@ -336,8 +336,8 @@ RelationBuildPartitionDesc(Relation rel, bool omit_detached) * descriptor, it contains an old partition descriptor that may still be * referenced somewhere. Preserve it, while not leaking it, by * reattaching it as a child context of the new one. Eventually it will - * get dropped by either RelationClose or RelationClearRelation. - * (We keep the regular partdesc in rd_pdcxt, and the partdesc-excluding- + * get dropped by either RelationClose or RelationClearRelation. (We keep + * the regular partdesc in rd_pdcxt, and the partdesc-excluding- * detached-partitions in rd_pddcxt.) */ if (is_omit) diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c index 6140ee7617fa8..d7a71992d81a2 100644 --- a/src/backend/port/win32_shmem.c +++ b/src/backend/port/win32_shmem.c @@ -142,7 +142,11 @@ EnableLockPagesPrivilege(int elevel) { ereport(elevel, (errmsg("could not enable user right \"%s\": error code %lu", - /* translator: This is a term from Windows and should be translated to match the Windows localization. */ + + /* + * translator: This is a term from Windows and should be translated to + * match the Windows localization. + */ _("Lock pages in memory"), GetLastError()), errdetail("Failed system call was %s.", "OpenProcessToken"))); diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c index 11fc1b786379f..2d2c450ba35a7 100644 --- a/src/backend/postmaster/bgworker.c +++ b/src/backend/postmaster/bgworker.c @@ -403,7 +403,7 @@ BackgroundWorkerStateChange(bool allow_new_workers) /* Log it! */ ereport(DEBUG1, (errmsg_internal("registering background worker \"%s\"", - rw->rw_worker.bgw_name))); + rw->rw_worker.bgw_name))); slist_push_head(&BackgroundWorkerList, &rw->rw_lnode); } @@ -435,7 +435,7 @@ ForgetBackgroundWorker(slist_mutable_iter *cur) ereport(DEBUG1, (errmsg_internal("unregistering background worker \"%s\"", - rw->rw_worker.bgw_name))); + rw->rw_worker.bgw_name))); slist_delete_current(cur); free(rw); diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c index e7e6a2a4594b9..cdd07770a0149 100644 --- a/src/backend/postmaster/checkpointer.c +++ b/src/backend/postmaster/checkpointer.c @@ -1238,7 +1238,7 @@ CompactCheckpointerRequestQueue(void) } ereport(DEBUG1, (errmsg_internal("compacted fsync request queue from %d entries to %d entries", - CheckpointerShmem->num_requests, preserve_count))); + CheckpointerShmem->num_requests, preserve_count))); CheckpointerShmem->num_requests = preserve_count; /* Cleanup. */ diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index e94f5f55c7859..249b17c92b796 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -3708,7 +3708,7 @@ pgstat_write_statsfiles(bool permanent, bool allDbs) { fputc('R', fpout); rc = fwrite(slotent, sizeof(PgStat_StatReplSlotEntry), 1, fpout); - (void) rc; /* we'll check for error with ferror */ + (void) rc; /* we'll check for error with ferror */ } } diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index b05db5a473503..6833f0f7f2dbc 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -660,6 +660,7 @@ PostmasterMain(int argc, char *argv[]) pqsignal_pm(SIGCHLD, reaper); /* handle child termination */ #ifdef SIGURG + /* * Ignore SIGURG for now. Child processes may change this (see * InitializeLatchSupport), but they will not receive any such signals @@ -5780,7 +5781,7 @@ do_start_bgworker(RegisteredBgWorker *rw) ereport(DEBUG1, (errmsg_internal("starting background worker process \"%s\"", - rw->rw_worker.bgw_name))); + rw->rw_worker.bgw_name))); #ifdef EXEC_BACKEND switch ((worker_pid = bgworker_forkexec(rw->rw_shmem_slot))) diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c index e7a7486c35433..cad43bdef23fc 100644 --- a/src/backend/postmaster/syslogger.c +++ b/src/backend/postmaster/syslogger.c @@ -239,7 +239,8 @@ SysLoggerMain(int argc, char *argv[]) * broken backends... */ - pqsignal(SIGHUP, SignalHandlerForConfigReload); /* set flag to read config file */ + pqsignal(SIGHUP, SignalHandlerForConfigReload); /* set flag to read config + * file */ pqsignal(SIGINT, SIG_IGN); pqsignal(SIGTERM, SIG_IGN); pqsignal(SIGQUIT, SIG_IGN); diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index 767eac33e4f7b..e09108d0ece98 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -414,7 +414,7 @@ perform_base_backup(basebackup_options *opt) if (ti->path == NULL) { struct stat statbuf; - bool sendtblspclinks = true; + bool sendtblspclinks = true; /* In the main tar, include the backup_label first... */ sendFileWithContent(BACKUP_LABEL_FILE, labelfile->data, diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index cb462a052ad47..85f325c38960f 100644 --- a/src/backend/replication/logical/launcher.c +++ b/src/backend/replication/logical/launcher.c @@ -67,12 +67,6 @@ typedef struct LogicalRepCtxStruct LogicalRepCtxStruct *LogicalRepCtx; -typedef struct LogicalRepWorkerId -{ - Oid subid; - Oid relid; -} LogicalRepWorkerId; - static void ApplyLauncherWakeup(void); static void logicalrep_launcher_onexit(int code, Datum arg); static void logicalrep_worker_onexit(int code, Datum arg); @@ -283,7 +277,7 @@ logicalrep_worker_launch(Oid dbid, Oid subid, const char *subname, Oid userid, ereport(DEBUG1, (errmsg_internal("starting logical replication worker for subscription \"%s\"", - subname))); + subname))); /* Report this after the initial starting message for consistency. */ if (max_replication_slots == 0) diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c index 39471fddad6b4..b955f4345895d 100644 --- a/src/backend/replication/logical/origin.c +++ b/src/backend/replication/logical/origin.c @@ -576,8 +576,8 @@ CheckPointReplicationOrigin(void) tmppath))); /* - * no other backend can perform this at the same time; only one - * checkpoint can happen at a time. + * no other backend can perform this at the same time; only one checkpoint + * can happen at a time. */ tmpfd = OpenTransientFile(tmppath, O_CREAT | O_EXCL | O_WRONLY | PG_BINARY); diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index e80a195472e62..b0ab91cc71b18 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -2493,11 +2493,11 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn, * need to do the cleanup and return gracefully on this error, see * SetupCheckXidLive. * - * This error code can be thrown by one of the callbacks we call during - * decoding so we need to ensure that we return gracefully only when we are - * sending the data in streaming mode and the streaming is not finished yet - * or when we are sending the data out on a PREPARE during a two-phase - * commit. + * This error code can be thrown by one of the callbacks we call + * during decoding so we need to ensure that we return gracefully only + * when we are sending the data in streaming mode and the streaming is + * not finished yet or when we are sending the data out on a PREPARE + * during a two-phase commit. */ if (errdata->sqlerrcode == ERRCODE_TRANSACTION_ROLLBACK && (stream_started || rbtxn_prepared(txn))) diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c index 9118e214220ab..04f3355f60270 100644 --- a/src/backend/replication/logical/snapbuild.c +++ b/src/backend/replication/logical/snapbuild.c @@ -1395,8 +1395,8 @@ SnapBuildWaitSnapshot(xl_running_xacts *running, TransactionId cutoff) /* * All transactions we needed to finish finished - try to ensure there is * another xl_running_xacts record in a timely manner, without having to - * wait for bgwriter or checkpointer to log one. During recovery we - * can't enforce that, so we'll have to wait. + * wait for bgwriter or checkpointer to log one. During recovery we can't + * enforce that, so we'll have to wait. */ if (!RecoveryInProgress()) { diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index cf261e200e4bc..c88b803e5d0b4 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -99,8 +99,8 @@ ReplicationSlot *MyReplicationSlot = NULL; int max_replication_slots = 0; /* the maximum number of replication * slots */ -static int ReplicationSlotAcquireInternal(ReplicationSlot *slot, - const char *name, SlotAcquireBehavior behavior); +static int ReplicationSlotAcquireInternal(ReplicationSlot *slot, + const char *name, SlotAcquireBehavior behavior); static void ReplicationSlotDropAcquired(void); static void ReplicationSlotDropPtr(ReplicationSlot *slot); @@ -451,8 +451,8 @@ ReplicationSlotAcquireInternal(ReplicationSlot *slot, const char *name, /* * If we found the slot but it's already active in another process, we - * either error out, return the PID of the owning process, or retry - * after a short wait, as caller specified. + * either error out, return the PID of the owning process, or retry after + * a short wait, as caller specified. */ if (active_pid != MyProcPid) { @@ -471,7 +471,7 @@ ReplicationSlotAcquireInternal(ReplicationSlot *slot, const char *name, goto retry; } else if (behavior == SAB_Block) - ConditionVariableCancelSleep(); /* no sleep needed after all */ + ConditionVariableCancelSleep(); /* no sleep needed after all */ /* Let everybody know we've modified this slot */ ConditionVariableBroadcast(&s->active_cv); @@ -1180,8 +1180,8 @@ InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno) ReplicationSlot *s = &ReplicationSlotCtl->replication_slots[i]; XLogRecPtr restart_lsn = InvalidXLogRecPtr; NameData slotname; - int wspid; - int last_signaled_pid = 0; + int wspid; + int last_signaled_pid = 0; if (!s->in_use) continue; @@ -1204,20 +1204,20 @@ InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno) /* * Try to mark this slot as used by this process. * - * Note that ReplicationSlotAcquireInternal(SAB_Inquire) - * should not cancel the prepared condition variable - * if this slot is active in other process. Because in this case - * we have to wait on that CV for the process owning - * the slot to be terminated, later. + * Note that ReplicationSlotAcquireInternal(SAB_Inquire) should + * not cancel the prepared condition variable if this slot is + * active in other process. Because in this case we have to wait + * on that CV for the process owning the slot to be terminated, + * later. */ wspid = ReplicationSlotAcquireInternal(s, NULL, SAB_Inquire); /* - * Exit the loop if we successfully acquired the slot or - * the slot was dropped during waiting for the owning process - * to be terminated. For example, the latter case is likely to - * happen when the slot is temporary because it's automatically - * dropped by the termination of the owning process. + * Exit the loop if we successfully acquired the slot or the slot + * was dropped during waiting for the owning process to be + * terminated. For example, the latter case is likely to happen + * when the slot is temporary because it's automatically dropped + * by the termination of the owning process. */ if (wspid <= 0) break; @@ -1225,13 +1225,13 @@ InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno) /* * Signal to terminate the process that owns the slot. * - * There is the race condition where other process may own - * the slot after the process using it was terminated and before - * this process owns it. To handle this case, we signal again - * if the PID of the owning process is changed than the last. + * There is the race condition where other process may own the + * slot after the process using it was terminated and before this + * process owns it. To handle this case, we signal again if the + * PID of the owning process is changed than the last. * - * XXX This logic assumes that the same PID is not reused - * very quickly. + * XXX This logic assumes that the same PID is not reused very + * quickly. */ if (last_signaled_pid != wspid) { @@ -1248,8 +1248,8 @@ InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno) ConditionVariableCancelSleep(); /* - * Do nothing here and start from scratch if the slot has - * already been dropped. + * Do nothing here and start from scratch if the slot has already been + * dropped. */ if (wspid == -1) goto restart; diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c index d9d36879ed785..e4e6632f82e04 100644 --- a/src/backend/replication/slotfuncs.c +++ b/src/backend/replication/slotfuncs.c @@ -415,11 +415,11 @@ pg_get_replication_slots(PG_FUNCTION_ARGS) nulls[i++] = true; else { - XLogSegNo targetSeg; - uint64 slotKeepSegs; - uint64 keepSegs; - XLogSegNo failSeg; - XLogRecPtr failLSN; + XLogSegNo targetSeg; + uint64 slotKeepSegs; + uint64 keepSegs; + XLogSegNo failSeg; + XLogRecPtr failLSN; XLByteToSeg(slot_contents.data.restart_lsn, targetSeg, wal_segment_size); diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c index 7fa1a87cd8288..bdbc9ef844bd8 100644 --- a/src/backend/replication/syncrep.c +++ b/src/backend/replication/syncrep.c @@ -165,12 +165,11 @@ SyncRepWaitForLSN(XLogRecPtr lsn, bool commit) * Since this routine gets called every commit time, it's important to * exit quickly if sync replication is not requested. So we check * WalSndCtl->sync_standbys_defined flag without the lock and exit - * immediately if it's false. If it's true, we need to check it again later - * while holding the lock, to check the flag and operate the sync rep - * queue atomically. This is necessary to avoid the race condition - * described in SyncRepUpdateSyncStandbysDefined(). On the other - * hand, if it's false, the lock is not necessary because we don't touch - * the queue. + * immediately if it's false. If it's true, we need to check it again + * later while holding the lock, to check the flag and operate the sync + * rep queue atomically. This is necessary to avoid the race condition + * described in SyncRepUpdateSyncStandbysDefined(). On the other hand, if + * it's false, the lock is not necessary because we don't touch the queue. */ if (!SyncRepRequested() || !((volatile WalSndCtlData *) WalSndCtl)->sync_standbys_defined) @@ -426,7 +425,7 @@ SyncRepInitConfig(void) ereport(DEBUG1, (errmsg_internal("standby \"%s\" now has synchronous standby priority %u", - application_name, priority))); + application_name, priority))); } } diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index 9a0e3806fcf18..b94910bfe9ad5 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -747,8 +747,8 @@ WalRcvFetchTimeLineHistoryFiles(TimeLineID first, TimeLineID last) writeTimeLineHistoryFile(tli, content, len); /* - * Mark the streamed history file as ready for archiving - * if archive_mode is always. + * Mark the streamed history file as ready for archiving if + * archive_mode is always. */ if (XLogArchiveMode != ARCHIVE_MODE_ALWAYS) XLogArchiveForceDone(fname); diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index 628c8d49d9854..e94069c366a36 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -2326,7 +2326,7 @@ WalSndLoop(WalSndSendDataCallback send_data) { ereport(DEBUG1, (errmsg_internal("\"%s\" has now caught up with upstream server", - application_name))); + application_name))); WalSndSetState(WALSNDSTATE_STREAMING); } @@ -3139,7 +3139,7 @@ WalSndWakeup(void) static void WalSndWait(uint32 socket_events, long timeout, uint32 wait_event) { - WaitEvent event; + WaitEvent event; ModifyWaitEvent(FeBeWaitSet, FeBeWaitSetSocketPos, socket_events, NULL); if (WaitEventSetWait(FeBeWaitSet, timeout, &event, 1, wait_event) == 1 && diff --git a/src/backend/statistics/dependencies.c b/src/backend/statistics/dependencies.c index ba7decb6a4ebd..d703e9b9ba1f3 100644 --- a/src/backend/statistics/dependencies.c +++ b/src/backend/statistics/dependencies.c @@ -241,8 +241,8 @@ dependency_degree(StatsBuildData *data, int k, AttrNumber *dependency) mss = multi_sort_init(k); /* - * Translate the array of indexes to regular attnums for the dependency (we - * will need this to identify the columns in StatsBuildData). + * Translate the array of indexes to regular attnums for the dependency + * (we will need this to identify the columns in StatsBuildData). */ attnums_dep = (AttrNumber *) palloc(k * sizeof(AttrNumber)); for (i = 0; i < k; i++) diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index 5e53783ea6636..b05e818ba9ede 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -91,9 +91,9 @@ typedef struct AnlExprData } AnlExprData; static void compute_expr_stats(Relation onerel, double totalrows, - AnlExprData * exprdata, int nexprs, + AnlExprData *exprdata, int nexprs, HeapTuple *rows, int numrows); -static Datum serialize_expr_stats(AnlExprData * exprdata, int nexprs); +static Datum serialize_expr_stats(AnlExprData *exprdata, int nexprs); static Datum expr_fetch_func(VacAttrStatsP stats, int rownum, bool *isNull); static AnlExprData *build_expr_data(List *exprs, int stattarget); @@ -539,9 +539,9 @@ examine_attribute(Node *expr) /* * When analyzing an expression, believe the expression tree's type not - * the column datatype --- the latter might be the opckeytype storage - * type of the opclass, which is not interesting for our purposes. (Note: - * if we did anything with non-expression statistics columns, we'd need to + * the column datatype --- the latter might be the opckeytype storage type + * of the opclass, which is not interesting for our purposes. (Note: if + * we did anything with non-expression statistics columns, we'd need to * figure out where to get the correct type info from, but for now that's * not a problem.) It's not clear whether anyone will care about the * typmod, but we store that too just in case. @@ -1788,16 +1788,16 @@ statext_mcv_clauselist_selectivity(PlannerInfo *root, List *clauses, int varReli * attnums of expressions from it. Ignore it if it's not fully * covered by the chosen statistics. * - * We need to check both attributes and expressions, and reject - * if either is not covered. + * We need to check both attributes and expressions, and reject if + * either is not covered. */ if (!bms_is_subset(list_attnums[listidx], stat->keys) || !stat_covers_expressions(stat, list_exprs[listidx], NULL)) continue; /* - * Now we know the clause is compatible (we have either attnums - * or expressions extracted from it), and was not estimated yet. + * Now we know the clause is compatible (we have either attnums or + * expressions extracted from it), and was not estimated yet. */ /* record simple clauses (single column or expression) */ diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 0c5b87864b90b..4b296a22c45a4 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -3071,7 +3071,7 @@ DropRelFileNodeBuffers(SMgrRelation smgr_reln, ForkNumber *forkNum, int j; RelFileNodeBackend rnode; BlockNumber nForkBlock[MAX_FORKNUM]; - uint64 nBlocksToInvalidate = 0; + uint64 nBlocksToInvalidate = 0; rnode = smgr_reln->smgr_rnode; @@ -3195,7 +3195,7 @@ DropRelFileNodesAllBuffers(SMgrRelation *smgr_reln, int nnodes) int n = 0; SMgrRelation *rels; BlockNumber (*block)[MAX_FORKNUM + 1]; - uint64 nBlocksToInvalidate = 0; + uint64 nBlocksToInvalidate = 0; RelFileNode *nodes; bool cached = true; bool use_bsearch; diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c index 06b57ae71f186..e8cd7ef0886cf 100644 --- a/src/backend/storage/file/fd.c +++ b/src/backend/storage/file/fd.c @@ -3288,7 +3288,7 @@ looks_like_temp_rel_name(const char *name) static void do_syncfs(const char *path) { - int fd; + int fd; fd = OpenTransientFile(path, O_RDONLY); if (fd < 0) @@ -3394,7 +3394,7 @@ SyncDataDirectory(void) do_syncfs("pg_wal"); return; } -#endif /* !HAVE_SYNCFS */ +#endif /* !HAVE_SYNCFS */ /* * If possible, hint to the kernel that we're soon going to fsync the data diff --git a/src/backend/storage/file/sharedfileset.c b/src/backend/storage/file/sharedfileset.c index de422b1ebdf63..ed37c940adc78 100644 --- a/src/backend/storage/file/sharedfileset.c +++ b/src/backend/storage/file/sharedfileset.c @@ -267,8 +267,8 @@ static void SharedFileSetDeleteOnProcExit(int status, Datum arg) { /* - * Remove all the pending shared fileset entries. We don't use foreach() here - * because SharedFileSetDeleteAll will remove the current element in + * Remove all the pending shared fileset entries. We don't use foreach() + * here because SharedFileSetDeleteAll will remove the current element in * filesetlist. Though we have used foreach_delete_current() to remove the * element from filesetlist it could only fix up the state of one of the * loops, see SharedFileSetUnregister. diff --git a/src/backend/storage/ipc/latch.c b/src/backend/storage/ipc/latch.c index ad781131e2ac8..1d893cf863dcd 100644 --- a/src/backend/storage/ipc/latch.c +++ b/src/backend/storage/ipc/latch.c @@ -1655,9 +1655,9 @@ WaitEventSetWaitBlock(WaitEventSet *set, int cur_timeout, (cur_kqueue_event->fflags & NOTE_EXIT) != 0) { /* - * The kernel will tell this kqueue object only once about the exit - * of the postmaster, so let's remember that for next time so that - * we provide level-triggered semantics. + * The kernel will tell this kqueue object only once about the + * exit of the postmaster, so let's remember that for next time so + * that we provide level-triggered semantics. */ set->report_postmaster_not_running = true; diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 5ff8cab394eda..42a89fc5dc9ff 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -2056,7 +2056,7 @@ GetSnapshotDataInitOldSnapshot(Snapshot snapshot) static bool GetSnapshotDataReuse(Snapshot snapshot) { - uint64 curXactCompletionCount; + uint64 curXactCompletionCount; Assert(LWLockHeldByMe(ProcArrayLock)); @@ -2080,8 +2080,8 @@ GetSnapshotDataReuse(Snapshot snapshot) * holding ProcArrayLock) exclusively). Thus the xactCompletionCount check * ensures we would detect if the snapshot would have changed. * - * As the snapshot contents are the same as it was before, it is safe - * to re-enter the snapshot's xmin into the PGPROC array. None of the rows + * As the snapshot contents are the same as it was before, it is safe to + * re-enter the snapshot's xmin into the PGPROC array. None of the rows * visible under the snapshot could already have been removed (that'd * require the set of running transactions to change) and it fulfills the * requirement that concurrent GetSnapshotData() calls yield the same @@ -2259,10 +2259,10 @@ GetSnapshotData(Snapshot snapshot) continue; /* - * The only way we are able to get here with a non-normal xid - * is during bootstrap - with this backend using - * BootstrapTransactionId. But the above test should filter - * that out. + * The only way we are able to get here with a non-normal xid is + * during bootstrap - with this backend using + * BootstrapTransactionId. But the above test should filter that + * out. */ Assert(TransactionIdIsNormal(xid)); diff --git a/src/backend/storage/ipc/procsignal.c b/src/backend/storage/ipc/procsignal.c index eac6895141455..defb75aa26aed 100644 --- a/src/backend/storage/ipc/procsignal.c +++ b/src/backend/storage/ipc/procsignal.c @@ -61,7 +61,7 @@ */ typedef struct { - volatile pid_t pss_pid; + volatile pid_t pss_pid; volatile sig_atomic_t pss_signalFlags[NUM_PROCSIGNALS]; pg_atomic_uint64 pss_barrierGeneration; pg_atomic_uint32 pss_barrierCheckMask; @@ -454,7 +454,7 @@ ProcessProcSignalBarrier(void) { uint64 local_gen; uint64 shared_gen; - volatile uint32 flags; + volatile uint32 flags; Assert(MyProcSignalSlot); @@ -484,15 +484,15 @@ ProcessProcSignalBarrier(void) * extract the flags, and that any subsequent state changes happen * afterward. * - * NB: In order to avoid race conditions, we must zero pss_barrierCheckMask - * first and only afterwards try to do barrier processing. If we did it - * in the other order, someone could send us another barrier of some - * type right after we called the barrier-processing function but before - * we cleared the bit. We would have no way of knowing that the bit needs - * to stay set in that case, so the need to call the barrier-processing - * function again would just get forgotten. So instead, we tentatively - * clear all the bits and then put back any for which we don't manage - * to successfully absorb the barrier. + * NB: In order to avoid race conditions, we must zero + * pss_barrierCheckMask first and only afterwards try to do barrier + * processing. If we did it in the other order, someone could send us + * another barrier of some type right after we called the + * barrier-processing function but before we cleared the bit. We would + * have no way of knowing that the bit needs to stay set in that case, so + * the need to call the barrier-processing function again would just get + * forgotten. So instead, we tentatively clear all the bits and then put + * back any for which we don't manage to successfully absorb the barrier. */ flags = pg_atomic_exchange_u32(&MyProcSignalSlot->pss_barrierCheckMask, 0); @@ -503,15 +503,15 @@ ProcessProcSignalBarrier(void) */ if (flags != 0) { - bool success = true; + bool success = true; PG_TRY(); { /* * Process each type of barrier. The barrier-processing functions - * should normally return true, but may return false if the barrier - * can't be absorbed at the current time. This should be rare, - * because it's pretty expensive. Every single + * should normally return true, but may return false if the + * barrier can't be absorbed at the current time. This should be + * rare, because it's pretty expensive. Every single * CHECK_FOR_INTERRUPTS() will return here until we manage to * absorb the barrier, and that cost will add up in a hurry. * @@ -521,8 +521,8 @@ ProcessProcSignalBarrier(void) */ while (flags != 0) { - ProcSignalBarrierType type; - bool processed = true; + ProcSignalBarrierType type; + bool processed = true; type = (ProcSignalBarrierType) pg_rightmost_one_pos32(flags); switch (type) @@ -533,8 +533,8 @@ ProcessProcSignalBarrier(void) } /* - * To avoid an infinite loop, we must always unset the bit - * in flags. + * To avoid an infinite loop, we must always unset the bit in + * flags. */ BARRIER_CLEAR_BIT(flags, type); diff --git a/src/backend/storage/ipc/signalfuncs.c b/src/backend/storage/ipc/signalfuncs.c index 0337b00226ab6..837699481ca7d 100644 --- a/src/backend/storage/ipc/signalfuncs.c +++ b/src/backend/storage/ipc/signalfuncs.c @@ -137,11 +137,12 @@ pg_wait_until_termination(int pid, int64 timeout) * Wait in steps of waittime milliseconds until this function exits or * timeout. */ - int64 waittime = 100; + int64 waittime = 100; + /* * Initially remaining time is the entire timeout specified by the user. */ - int64 remainingtime = timeout; + int64 remainingtime = timeout; /* * Check existence of the backend. If the backend still exists, then wait @@ -162,7 +163,7 @@ pg_wait_until_termination(int pid, int64 timeout) ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg("could not check the existence of the backend with PID %d: %m", - pid))); + pid))); } /* Process interrupts, if any, before waiting */ @@ -198,9 +199,9 @@ pg_wait_until_termination(int pid, int64 timeout) Datum pg_terminate_backend(PG_FUNCTION_ARGS) { - int pid; - int r; - int timeout; + int pid; + int r; + int timeout; pid = PG_GETARG_INT32(0); timeout = PG_GETARG_INT64(1); @@ -208,7 +209,7 @@ pg_terminate_backend(PG_FUNCTION_ARGS) if (timeout < 0) ereport(ERROR, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("\"timeout\" must not be negative"))); + errmsg("\"timeout\" must not be negative"))); r = pg_signal_backend(pid, SIGTERM); @@ -240,9 +241,9 @@ pg_terminate_backend(PG_FUNCTION_ARGS) Datum pg_wait_for_backend_termination(PG_FUNCTION_ARGS) { - int pid; - int64 timeout; - PGPROC *proc = NULL; + int pid; + int64 timeout; + PGPROC *proc = NULL; pid = PG_GETARG_INT32(0); timeout = PG_GETARG_INT64(1); @@ -250,7 +251,7 @@ pg_wait_for_backend_termination(PG_FUNCTION_ARGS) if (timeout <= 0) ereport(ERROR, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("\"timeout\" must not be negative or zero"))); + errmsg("\"timeout\" must not be negative or zero"))); proc = BackendPidGetProc(pid); diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index 1465ee44a12e3..553b6e5460354 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -482,7 +482,7 @@ ResolveRecoveryConflictWithSnapshotFullXid(FullTransactionId latestRemovedFullXi * snapshots that still see it. */ FullTransactionId nextXid = ReadNextFullTransactionId(); - uint64 diff; + uint64 diff; diff = U64FromFullTransactionId(nextXid) - U64FromFullTransactionId(latestRemovedFullXid); diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index 692f21ef6a8e3..2575ea1ca0d9a 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -103,7 +103,7 @@ ProcGlobalShmemSize(void) { Size size = 0; Size TotalProcs = - add_size(MaxBackends, add_size(NUM_AUXILIARY_PROCS, max_prepared_xacts)); + add_size(MaxBackends, add_size(NUM_AUXILIARY_PROCS, max_prepared_xacts)); /* ProcGlobal */ size = add_size(size, sizeof(PROC_HDR)); @@ -1245,8 +1245,8 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable) /* * Set timer so we can wake up after awhile and check for a deadlock. If a * deadlock is detected, the handler sets MyProc->waitStatus = - * PROC_WAIT_STATUS_ERROR, allowing us to know that we must report failure rather - * than success. + * PROC_WAIT_STATUS_ERROR, allowing us to know that we must report failure + * rather than success. * * By delaying the check until we've waited for a bit, we can avoid * running the rather expensive deadlock-check code in most cases. @@ -1371,9 +1371,9 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable) } /* - * waitStatus could change from PROC_WAIT_STATUS_WAITING to something else - * asynchronously. Read it just once per loop to prevent surprising - * behavior (such as missing log messages). + * waitStatus could change from PROC_WAIT_STATUS_WAITING to something + * else asynchronously. Read it just once per loop to prevent + * surprising behavior (such as missing log messages). */ myWaitStatus = *((volatile ProcWaitStatus *) &MyProc->waitStatus); @@ -1429,7 +1429,7 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable) ereport(DEBUG1, (errmsg_internal("sending cancel to blocking autovacuum PID %d", - pid), + pid), errdetail_log("%s", logbuf.data))); pfree(locktagbuf.data); @@ -1587,11 +1587,12 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable) /* * Currently, the deadlock checker always kicks its own - * process, which means that we'll only see PROC_WAIT_STATUS_ERROR when - * deadlock_state == DS_HARD_DEADLOCK, and there's no need to - * print redundant messages. But for completeness and - * future-proofing, print a message if it looks like someone - * else kicked us off the lock. + * process, which means that we'll only see + * PROC_WAIT_STATUS_ERROR when deadlock_state == + * DS_HARD_DEADLOCK, and there's no need to print redundant + * messages. But for completeness and future-proofing, print + * a message if it looks like someone else kicked us off the + * lock. */ if (deadlock_state != DS_HARD_DEADLOCK) ereport(LOG, @@ -1830,9 +1831,9 @@ CheckDeadLock(void) * preserve the flexibility to kill some other transaction than the * one detecting the deadlock.) * - * RemoveFromWaitQueue sets MyProc->waitStatus to PROC_WAIT_STATUS_ERROR, so - * ProcSleep will report an error after we return from the signal - * handler. + * RemoveFromWaitQueue sets MyProc->waitStatus to + * PROC_WAIT_STATUS_ERROR, so ProcSleep will report an error after we + * return from the signal handler. */ Assert(MyProc->waitLock != NULL); RemoveFromWaitQueue(MyProc, LockTagHashCode(&(MyProc->waitLock->tag))); diff --git a/src/backend/storage/lmgr/spin.c b/src/backend/storage/lmgr/spin.c index 6fe0c6532c621..557672caddade 100644 --- a/src/backend/storage/lmgr/spin.c +++ b/src/backend/storage/lmgr/spin.c @@ -37,7 +37,7 @@ #define NUM_EMULATION_SEMAPHORES (NUM_SPINLOCK_SEMAPHORES + NUM_ATOMICS_SEMAPHORES) #else #define NUM_EMULATION_SEMAPHORES (NUM_SPINLOCK_SEMAPHORES) -#endif /* DISABLE_ATOMICS */ +#endif /* DISABLE_ATOMICS */ PGSemaphore *SpinlockSemaArray; diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c index b231c438f95a5..82ca91f597749 100644 --- a/src/backend/storage/page/bufpage.c +++ b/src/backend/storage/page/bufpage.c @@ -259,7 +259,7 @@ PageAddItemExtended(Page page, * group at the end of the line pointer array. */ for (offsetNumber = FirstOffsetNumber; - offsetNumber < limit; /* limit is maxoff+1 */ + offsetNumber < limit; /* limit is maxoff+1 */ offsetNumber++) { itemId = PageGetItemId(phdr, offsetNumber); diff --git a/src/backend/storage/sync/sync.c b/src/backend/storage/sync/sync.c index 708215614db65..bc3ceb27125d4 100644 --- a/src/backend/storage/sync/sync.c +++ b/src/backend/storage/sync/sync.c @@ -420,7 +420,7 @@ ProcessSyncRequests(void) ereport(DEBUG1, (errcode_for_file_access(), errmsg_internal("could not fsync file \"%s\" but retrying: %m", - path))); + path))); /* * Absorb incoming requests and check to see if a cancel diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 2d6d145ecc053..6200699ddd741 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -454,7 +454,7 @@ SocketBackend(StringInfo inBuf) * the type. */ if (pq_getmessage(inBuf, maxmsglen)) - return EOF; /* suitable message already logged */ + return EOF; /* suitable message already logged */ RESUME_CANCEL_INTERRUPTS(); return qtype; @@ -1350,8 +1350,8 @@ exec_parse_message(const char *query_string, /* string to execute */ ereport(DEBUG2, (errmsg_internal("parse %s: %s", - *stmt_name ? stmt_name : "", - query_string))); + *stmt_name ? stmt_name : "", + query_string))); /* * Start up a transaction command so we can run parse analysis etc. (Note @@ -1606,8 +1606,8 @@ exec_bind_message(StringInfo input_message) ereport(DEBUG2, (errmsg_internal("bind %s to %s", - *portal_name ? portal_name : "", - *stmt_name ? stmt_name : ""))); + *portal_name ? portal_name : "", + *stmt_name ? stmt_name : ""))); /* Find prepared statement */ if (stmt_name[0] != '\0') diff --git a/src/backend/utils/activity/backend_progress.c b/src/backend/utils/activity/backend_progress.c index 293254993c707..6743e68cef694 100644 --- a/src/backend/utils/activity/backend_progress.c +++ b/src/backend/utils/activity/backend_progress.c @@ -10,7 +10,7 @@ */ #include "postgres.h" -#include "port/atomics.h" /* for memory barriers */ +#include "port/atomics.h" /* for memory barriers */ #include "utils/backend_progress.h" #include "utils/backend_status.h" diff --git a/src/backend/utils/activity/backend_status.c b/src/backend/utils/activity/backend_status.c index a368101103042..2901f9f5a9fa2 100644 --- a/src/backend/utils/activity/backend_status.c +++ b/src/backend/utils/activity/backend_status.c @@ -16,13 +16,13 @@ #include "miscadmin.h" #include "pg_trace.h" #include "pgstat.h" -#include "port/atomics.h" /* for memory barriers */ +#include "port/atomics.h" /* for memory barriers */ #include "storage/ipc.h" -#include "storage/proc.h" /* for MyProc */ +#include "storage/proc.h" /* for MyProc */ #include "storage/sinvaladt.h" #include "utils/ascii.h" #include "utils/backend_status.h" -#include "utils/guc.h" /* for application_name */ +#include "utils/guc.h" /* for application_name */ #include "utils/memutils.h" @@ -498,8 +498,8 @@ pgstat_setup_backend_status_context(void) { if (!backendStatusSnapContext) backendStatusSnapContext = AllocSetContextCreate(TopMemoryContext, - "Backend Status Snapshot", - ALLOCSET_SMALL_SIZES); + "Backend Status Snapshot", + ALLOCSET_SMALL_SIZES); } @@ -1033,7 +1033,8 @@ pgstat_get_my_query_id(void) if (!MyBEEntry) return 0; - /* There's no need for a lock around pgstat_begin_read_activity / + /* + * There's no need for a lock around pgstat_begin_read_activity / * pgstat_end_read_activity here as it's only called from * pg_stat_get_activity which is already protected, or from the same * backend which means that there won't be concurrent writes. diff --git a/src/backend/utils/activity/wait_event.c b/src/backend/utils/activity/wait_event.c index 89b5b8b7b9d07..6baf67740c7dd 100644 --- a/src/backend/utils/activity/wait_event.c +++ b/src/backend/utils/activity/wait_event.c @@ -22,8 +22,8 @@ */ #include "postgres.h" -#include "storage/lmgr.h" /* for GetLockNameFromTagType */ -#include "storage/lwlock.h" /* for GetLWLockIdentifier */ +#include "storage/lmgr.h" /* for GetLockNameFromTagType */ +#include "storage/lwlock.h" /* for GetLWLockIdentifier */ #include "utils/wait_event.h" diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index 7861a0a613a1d..67f8b29434ac0 100644 --- a/src/backend/utils/adt/acl.c +++ b/src/backend/utils/adt/acl.c @@ -2453,9 +2453,9 @@ column_privilege_check(Oid tableoid, AttrNumber attnum, return -1; /* - * Check for column-level privileges first. This serves in - * part as a check on whether the column even exists, so we - * need to do it before checking table-level privilege. + * Check for column-level privileges first. This serves in part as a check + * on whether the column even exists, so we need to do it before checking + * table-level privilege. */ aclresult = pg_attribute_aclcheck_ext(tableoid, attnum, roleid, mode, &is_missing); diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c index da1a879f1f64a..3c70bb59433ec 100644 --- a/src/backend/utils/adt/dbsize.c +++ b/src/backend/utils/adt/dbsize.c @@ -867,7 +867,7 @@ pg_relation_filenode(PG_FUNCTION_ARGS) { if (relform->relfilenode) result = relform->relfilenode; - else /* Consult the relation mapper */ + else /* Consult the relation mapper */ result = RelationMapOidToFilenode(relid, relform->relisshared); } @@ -946,17 +946,17 @@ pg_relation_filepath(PG_FUNCTION_ARGS) rnode.dbNode = MyDatabaseId; if (relform->relfilenode) rnode.relNode = relform->relfilenode; - else /* Consult the relation mapper */ + else /* Consult the relation mapper */ rnode.relNode = RelationMapOidToFilenode(relid, relform->relisshared); } else { - /* no storage, return NULL */ - rnode.relNode = InvalidOid; - /* some compilers generate warnings without these next two lines */ - rnode.dbNode = InvalidOid; - rnode.spcNode = InvalidOid; + /* no storage, return NULL */ + rnode.relNode = InvalidOid; + /* some compilers generate warnings without these next two lines */ + rnode.dbNode = InvalidOid; + rnode.spcNode = InvalidOid; } if (!OidIsValid(rnode.relNode)) diff --git a/src/backend/utils/adt/genfile.c b/src/backend/utils/adt/genfile.c index 322152ebd9717..c436d9318b674 100644 --- a/src/backend/utils/adt/genfile.c +++ b/src/backend/utils/adt/genfile.c @@ -160,16 +160,15 @@ read_binary_file(const char *filename, int64 seek_offset, int64 bytes_to_read, #define MIN_READ_SIZE 4096 /* - * If not at end of file, and sbuf.len is equal to - * MaxAllocSize - 1, then either the file is too large, or - * there is nothing left to read. Attempt to read one more - * byte to see if the end of file has been reached. If not, - * the file is too large; we'd rather give the error message - * for that ourselves. + * If not at end of file, and sbuf.len is equal to MaxAllocSize - + * 1, then either the file is too large, or there is nothing left + * to read. Attempt to read one more byte to see if the end of + * file has been reached. If not, the file is too large; we'd + * rather give the error message for that ourselves. */ if (sbuf.len == MaxAllocSize - 1) { - char rbuf[1]; + char rbuf[1]; if (fread(rbuf, 1, 1, file) != 0 || !feof(file)) ereport(ERROR, diff --git a/src/backend/utils/adt/lockfuncs.c b/src/backend/utils/adt/lockfuncs.c index 97f0265c12deb..085fec3ea2044 100644 --- a/src/backend/utils/adt/lockfuncs.c +++ b/src/backend/utils/adt/lockfuncs.c @@ -636,10 +636,10 @@ pg_isolation_test_session_is_blocked(PG_FUNCTION_ARGS) * Check if any of these are in the list of interesting PIDs, that being * the sessions that the isolation tester is running. We don't use * "arrayoverlaps" here, because it would lead to cache lookups and one of - * our goals is to run quickly with debug_invalidate_system_caches_always > 0. We expect - * blocking_pids to be usually empty and otherwise a very small number in - * isolation tester cases, so make that the outer loop of a naive search - * for a match. + * our goals is to run quickly with debug_invalidate_system_caches_always + * > 0. We expect blocking_pids to be usually empty and otherwise a very + * small number in isolation tester cases, so make that the outer loop of + * a naive search for a match. */ for (i = 0; i < num_blocking_pids; i++) for (j = 0; j < num_interesting_pids; j++) diff --git a/src/backend/utils/adt/mcxtfuncs.c b/src/backend/utils/adt/mcxtfuncs.c index e2b87a7ed9f67..2984768d19948 100644 --- a/src/backend/utils/adt/mcxtfuncs.c +++ b/src/backend/utils/adt/mcxtfuncs.c @@ -34,8 +34,8 @@ */ static void PutMemoryContextsStatsTupleStore(Tuplestorestate *tupstore, - TupleDesc tupdesc, MemoryContext context, - const char *parent, int level) + TupleDesc tupdesc, MemoryContext context, + const char *parent, int level) { #define PG_GET_BACKEND_MEMORY_CONTEXTS_COLS 9 @@ -52,8 +52,8 @@ PutMemoryContextsStatsTupleStore(Tuplestorestate *tupstore, ident = context->ident; /* - * To be consistent with logging output, we label dynahash contexts - * with just the hash table name as with MemoryContextStatsPrint(). + * To be consistent with logging output, we label dynahash contexts with + * just the hash table name as with MemoryContextStatsPrint(). */ if (ident && strcmp(name, "dynahash") == 0) { @@ -75,7 +75,7 @@ PutMemoryContextsStatsTupleStore(Tuplestorestate *tupstore, if (ident) { - int idlen = strlen(ident); + int idlen = strlen(ident); char clipped_ident[MEMORY_CONTEXT_IDENT_DISPLAY_SIZE]; /* @@ -108,7 +108,7 @@ PutMemoryContextsStatsTupleStore(Tuplestorestate *tupstore, for (child = context->firstchild; child != NULL; child = child->nextchild) { PutMemoryContextsStatsTupleStore(tupstore, tupdesc, - child, name, level + 1); + child, name, level + 1); } } @@ -150,7 +150,7 @@ pg_get_backend_memory_contexts(PG_FUNCTION_ARGS) MemoryContextSwitchTo(oldcontext); PutMemoryContextsStatsTupleStore(tupstore, tupdesc, - TopMemoryContext, NULL, 0); + TopMemoryContext, NULL, 0); /* clean up and return the tuplestore */ tuplestore_donestoring(tupstore); diff --git a/src/backend/utils/adt/name.c b/src/backend/utils/adt/name.c index c93be3350ea72..602a724d2f8f3 100644 --- a/src/backend/utils/adt/name.c +++ b/src/backend/utils/adt/name.c @@ -234,7 +234,7 @@ namestrcpy(Name name, const char *str) { /* NB: We need to zero-pad the destination. */ strncpy(NameStr(*name), str, NAMEDATALEN); - NameStr(*name)[NAMEDATALEN-1] = '\0'; + NameStr(*name)[NAMEDATALEN - 1] = '\0'; } /* diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index caa09d6373e93..453af401cabff 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -1668,16 +1668,16 @@ get_collation_actual_version(char collprovider, const char *collcollate) } else #endif - if (collprovider == COLLPROVIDER_LIBC && - pg_strcasecmp("C", collcollate) != 0 && - pg_strncasecmp("C.", collcollate, 2) != 0 && - pg_strcasecmp("POSIX", collcollate) != 0) + if (collprovider == COLLPROVIDER_LIBC && + pg_strcasecmp("C", collcollate) != 0 && + pg_strncasecmp("C.", collcollate, 2) != 0 && + pg_strcasecmp("POSIX", collcollate) != 0) { #if defined(__GLIBC__) /* Use the glibc version because we don't have anything better. */ collversion = pstrdup(gnu_get_libc_version()); #elif defined(LC_VERSION_MASK) - locale_t loc; + locale_t loc; /* Look up FreeBSD collation version. */ loc = newlocale(LC_COLLATE, collcollate, NULL); diff --git a/src/backend/utils/adt/rangetypes_typanalyze.c b/src/backend/utils/adt/rangetypes_typanalyze.c index 2c10f2c867c64..671fe6ddb7a97 100644 --- a/src/backend/utils/adt/rangetypes_typanalyze.c +++ b/src/backend/utils/adt/rangetypes_typanalyze.c @@ -330,7 +330,7 @@ compute_range_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc, stats->statypid[slot_idx] = typcache->type_id; stats->statyplen[slot_idx] = typcache->typlen; stats->statypbyval[slot_idx] = typcache->typbyval; - stats->statypalign[slot_idx] = typcache->typalign; + stats->statypalign[slot_idx] = typcache->typalign; slot_idx++; } diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index 7c77c338cecbc..96269fc2adb63 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -394,8 +394,8 @@ RI_FKey_check(TriggerData *trigdata) * Now check that foreign key exists in PK table * * XXX detectNewRows must be true when a partitioned table is on the - * referenced side. The reason is that our snapshot must be fresh - * in order for the hack in find_inheritance_children() to work. + * referenced side. The reason is that our snapshot must be fresh in + * order for the hack in find_inheritance_children() to work. */ ri_PerformCheck(riinfo, &qkey, qplan, fk_rel, pk_rel, diff --git a/src/backend/utils/adt/rowtypes.c b/src/backend/utils/adt/rowtypes.c index 23787a6ae7d71..1a71fdbc33f57 100644 --- a/src/backend/utils/adt/rowtypes.c +++ b/src/backend/utils/adt/rowtypes.c @@ -1802,8 +1802,8 @@ hash_record(PG_FUNCTION_ARGS) tuple.t_data = record; /* - * We arrange to look up the needed hashing info just once per series - * of calls, assuming the record type doesn't change underneath us. + * We arrange to look up the needed hashing info just once per series of + * calls, assuming the record type doesn't change underneath us. */ my_extra = (RecordCompareData *) fcinfo->flinfo->fn_extra; if (my_extra == NULL || @@ -1923,8 +1923,8 @@ hash_record_extended(PG_FUNCTION_ARGS) tuple.t_data = record; /* - * We arrange to look up the needed hashing info just once per series - * of calls, assuming the record type doesn't change underneath us. + * We arrange to look up the needed hashing info just once per series of + * calls, assuming the record type doesn't change underneath us. */ my_extra = (RecordCompareData *) fcinfo->flinfo->fn_extra; if (my_extra == NULL || diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 881e8ec03d296..84ad62caea327 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -2980,37 +2980,38 @@ pg_get_functiondef(PG_FUNCTION_ARGS) } else { - appendStringInfoString(&buf, "AS "); + appendStringInfoString(&buf, "AS "); - tmp = SysCacheGetAttr(PROCOID, proctup, Anum_pg_proc_probin, &isnull); - if (!isnull) - { - simple_quote_literal(&buf, TextDatumGetCString(tmp)); - appendStringInfoString(&buf, ", "); /* assume prosrc isn't null */ - } + tmp = SysCacheGetAttr(PROCOID, proctup, Anum_pg_proc_probin, &isnull); + if (!isnull) + { + simple_quote_literal(&buf, TextDatumGetCString(tmp)); + appendStringInfoString(&buf, ", "); /* assume prosrc isn't null */ + } - tmp = SysCacheGetAttr(PROCOID, proctup, Anum_pg_proc_prosrc, &isnull); - if (isnull) - elog(ERROR, "null prosrc"); - prosrc = TextDatumGetCString(tmp); + tmp = SysCacheGetAttr(PROCOID, proctup, Anum_pg_proc_prosrc, &isnull); + if (isnull) + elog(ERROR, "null prosrc"); + prosrc = TextDatumGetCString(tmp); - /* - * We always use dollar quoting. Figure out a suitable delimiter. - * - * Since the user is likely to be editing the function body string, we - * shouldn't use a short delimiter that he might easily create a conflict - * with. Hence prefer "$function$"/"$procedure$", but extend if needed. - */ - initStringInfo(&dq); - appendStringInfoChar(&dq, '$'); - appendStringInfoString(&dq, (isfunction ? "function" : "procedure")); - while (strstr(prosrc, dq.data) != NULL) - appendStringInfoChar(&dq, 'x'); - appendStringInfoChar(&dq, '$'); - - appendBinaryStringInfo(&buf, dq.data, dq.len); - appendStringInfoString(&buf, prosrc); - appendBinaryStringInfo(&buf, dq.data, dq.len); + /* + * We always use dollar quoting. Figure out a suitable delimiter. + * + * Since the user is likely to be editing the function body string, we + * shouldn't use a short delimiter that he might easily create a + * conflict with. Hence prefer "$function$"/"$procedure$", but extend + * if needed. + */ + initStringInfo(&dq); + appendStringInfoChar(&dq, '$'); + appendStringInfoString(&dq, (isfunction ? "function" : "procedure")); + while (strstr(prosrc, dq.data) != NULL) + appendStringInfoChar(&dq, 'x'); + appendStringInfoChar(&dq, '$'); + + appendBinaryStringInfo(&buf, dq.data, dq.len); + appendStringInfoString(&buf, prosrc); + appendBinaryStringInfo(&buf, dq.data, dq.len); } appendStringInfoChar(&buf, '\n'); diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 3d4304cce7a3c..37ddda7724012 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -3446,10 +3446,10 @@ estimate_num_groups(PlannerInfo *root, List *groupExprs, double input_rows, * XXX This has the consequence that if there's a statistics on the * expression, we don't split it into individual Vars. This affects * our selection of statistics in estimate_multivariate_ndistinct, - * because it's probably better to use more accurate estimate for - * each expression and treat them as independent, than to combine - * estimates for the extracted variables when we don't know how that - * relates to the expressions. + * because it's probably better to use more accurate estimate for each + * expression and treat them as independent, than to combine estimates + * for the extracted variables when we don't know how that relates to + * the expressions. */ examine_variable(root, groupexpr, 0, &vardata); if (HeapTupleIsValid(vardata.statsTuple) || vardata.isunique) @@ -4039,16 +4039,16 @@ estimate_multivariate_ndistinct(PlannerInfo *root, RelOptInfo *rel, /* * Process a simple Var expression, by matching it to keys - * directly. If there's a matching expression, we'll try - * matching it later. + * directly. If there's a matching expression, we'll try matching + * it later. */ if (IsA(varinfo->var, Var)) { AttrNumber attnum = ((Var *) varinfo->var)->varattno; /* - * Ignore expressions on system attributes. Can't rely on - * the bms check for negative values. + * Ignore expressions on system attributes. Can't rely on the + * bms check for negative values. */ if (!AttrNumberIsForUserDefinedAttr(attnum)) continue; diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 3a93e92e4036d..79761f809c8ed 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -3847,8 +3847,8 @@ timestamp_bin(PG_FUNCTION_ARGS) tm_delta = tm_diff - tm_diff % stride_usecs; /* - * Make sure the returned timestamp is at the start of the bin, - * even if the origin is in the future. + * Make sure the returned timestamp is at the start of the bin, even if + * the origin is in the future. */ if (origin > timestamp && stride_usecs > 1) tm_delta -= stride_usecs; @@ -4025,8 +4025,8 @@ timestamptz_bin(PG_FUNCTION_ARGS) tm_delta = tm_diff - tm_diff % stride_usecs; /* - * Make sure the returned timestamp is at the start of the bin, - * even if the origin is in the future. + * Make sure the returned timestamp is at the start of the bin, even if + * the origin is in the future. */ if (origin > timestamp && stride_usecs > 1) tm_delta -= stride_usecs; diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index 0c6e5f24ba1f9..d2a11b1b5ddba 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -307,7 +307,7 @@ byteain(PG_FUNCTION_ARGS) size_t len = strlen(inputText); uint64 dstlen = pg_hex_dec_len(len - 2); - bc = dstlen + VARHDRSZ; /* maximum possible length */ + bc = dstlen + VARHDRSZ; /* maximum possible length */ result = palloc(bc); bc = pg_hex_decode(inputText + 2, len - 2, VARDATA(result), dstlen); diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index f54dc12b718a2..dcfd9e83893e9 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -181,7 +181,7 @@ static int numSharedInvalidMessagesArray; static int maxSharedInvalidMessagesArray; /* GUC storage */ -int debug_invalidate_system_caches_always = 0; +int debug_invalidate_system_caches_always = 0; /* * Dynamically-registered callback functions. Current implementation @@ -692,26 +692,27 @@ AcceptInvalidationMessages(void) /* * Test code to force cache flushes anytime a flush could happen. * - * This helps detect intermittent faults caused by code that reads a - * cache entry and then performs an action that could invalidate the entry, - * but rarely actually does so. This can spot issues that would otherwise + * This helps detect intermittent faults caused by code that reads a cache + * entry and then performs an action that could invalidate the entry, but + * rarely actually does so. This can spot issues that would otherwise * only arise with badly timed concurrent DDL, for example. * - * The default debug_invalidate_system_caches_always = 0 does no forced cache flushes. + * The default debug_invalidate_system_caches_always = 0 does no forced + * cache flushes. * - * If used with CLOBBER_FREED_MEMORY, debug_invalidate_system_caches_always = 1 - * (CLOBBER_CACHE_ALWAYS) provides a fairly thorough test that the system - * contains no cache-flush hazards. However, it also makes the system - * unbelievably slow --- the regression tests take about 100 times longer - * than normal. + * If used with CLOBBER_FREED_MEMORY, + * debug_invalidate_system_caches_always = 1 (CLOBBER_CACHE_ALWAYS) + * provides a fairly thorough test that the system contains no cache-flush + * hazards. However, it also makes the system unbelievably slow --- the + * regression tests take about 100 times longer than normal. * - * If you're a glutton for punishment, try debug_invalidate_system_caches_always = 3 - * (CLOBBER_CACHE_RECURSIVELY). This slows things by at least a factor - * of 10000, so I wouldn't suggest trying to run the entire regression - * tests that way. It's useful to try a few simple tests, to make sure - * that cache reload isn't subject to internal cache-flush hazards, but - * after you've done a few thousand recursive reloads it's unlikely - * you'll learn more. + * If you're a glutton for punishment, try + * debug_invalidate_system_caches_always = 3 (CLOBBER_CACHE_RECURSIVELY). + * This slows things by at least a factor of 10000, so I wouldn't suggest + * trying to run the entire regression tests that way. It's useful to try + * a few simple tests, to make sure that cache reload isn't subject to + * internal cache-flush hazards, but after you've done a few thousand + * recursive reloads it's unlikely you'll learn more. */ #ifdef CLOBBER_CACHE_ENABLED { diff --git a/src/backend/utils/cache/plancache.c b/src/backend/utils/cache/plancache.c index 1a0950489d741..07b0145132735 100644 --- a/src/backend/utils/cache/plancache.c +++ b/src/backend/utils/cache/plancache.c @@ -897,8 +897,9 @@ BuildCachedPlan(CachedPlanSource *plansource, List *qlist, * rejected a generic plan, it's possible to reach here with is_valid * false due to an invalidation while making the generic plan. In theory * the invalidation must be a false positive, perhaps a consequence of an - * sinval reset event or the debug_invalidate_system_caches_always code. But for - * safety, let's treat it as real and redo the RevalidateCachedQuery call. + * sinval reset event or the debug_invalidate_system_caches_always code. + * But for safety, let's treat it as real and redo the + * RevalidateCachedQuery call. */ if (!plansource->is_valid) qlist = RevalidateCachedQuery(plansource, queryEnv); diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index bd88f6105ba10..fd05615e7690c 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -1016,9 +1016,9 @@ RelationBuildDesc(Oid targetRelId, bool insertIt) * * When cache clobbering is enabled or when forced to by * RECOVER_RELATION_BUILD_MEMORY=1, arrange to allocate the junk in a - * temporary context that we'll free before returning. Make it a child - * of caller's context so that it will get cleaned up appropriately if - * we error out partway through. + * temporary context that we'll free before returning. Make it a child of + * caller's context so that it will get cleaned up appropriately if we + * error out partway through. */ #ifdef MAYBE_RECOVER_RELATION_BUILD_MEMORY MemoryContext tmpcxt = NULL; diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cache/typcache.c index 4915ef59349be..35c8cf7b244d9 100644 --- a/src/backend/utils/cache/typcache.c +++ b/src/backend/utils/cache/typcache.c @@ -696,7 +696,7 @@ lookup_type_cache(Oid type_id, int flags) !record_fields_have_hashing(typentry)) hash_proc = InvalidOid; else if (hash_proc == F_HASH_RANGE && - !range_element_has_hashing(typentry)) + !range_element_has_hashing(typentry)) hash_proc = InvalidOid; /* @@ -742,10 +742,10 @@ lookup_type_cache(Oid type_id, int flags) !array_element_has_extended_hashing(typentry)) hash_extended_proc = InvalidOid; else if (hash_extended_proc == F_HASH_RECORD_EXTENDED && - !record_fields_have_extended_hashing(typentry)) + !record_fields_have_extended_hashing(typentry)) hash_extended_proc = InvalidOid; else if (hash_extended_proc == F_HASH_RANGE_EXTENDED && - !range_element_has_extended_hashing(typentry)) + !range_element_has_extended_hashing(typentry)) hash_extended_proc = InvalidOid; /* diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 65019989cf6ba..a3e1c59a82994 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -2717,10 +2717,10 @@ log_line_prefix(StringInfo buf, ErrorData *edata) case 'Q': if (padding != 0) appendStringInfo(buf, "%*lld", padding, - (long long) pgstat_get_my_query_id()); + (long long) pgstat_get_my_query_id()); else appendStringInfo(buf, "%lld", - (long long) pgstat_get_my_query_id()); + (long long) pgstat_get_my_query_id()); break; default: /* format error - ignore it */ diff --git a/src/backend/utils/mb/Unicode/convutils.pm b/src/backend/utils/mb/Unicode/convutils.pm index adfe12b2c298e..5ad38514beea1 100644 --- a/src/backend/utils/mb/Unicode/convutils.pm +++ b/src/backend/utils/mb/Unicode/convutils.pm @@ -381,7 +381,7 @@ sub print_radix_table header => "Dummy map, for invalid values", min_idx => 0, max_idx => $widest_range, - label => "dummy map" + label => "dummy map" }; ### diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 0a180341c227e..eb7f7181e43df 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -2636,7 +2636,7 @@ static struct config_int ConfigureNamesInt[] = NULL }, &vacuum_defer_cleanup_age, - 0, 0, 1000000, /* see ComputeXidHorizons */ + 0, 0, 1000000, /* see ComputeXidHorizons */ NULL, NULL, NULL }, { @@ -3257,6 +3257,7 @@ static struct config_int ConfigureNamesInt[] = NULL }, &autovacuum_freeze_max_age, + /* * see pg_resetwal and vacuum_failsafe_age if you change the * upper-limit value. @@ -3513,9 +3514,9 @@ static struct config_int ConfigureNamesInt[] = 0, #endif 0, 5, -#else /* not CLOBBER_CACHE_ENABLED */ +#else /* not CLOBBER_CACHE_ENABLED */ 0, 0, 0, -#endif /* not CLOBBER_CACHE_ENABLED */ +#endif /* not CLOBBER_CACHE_ENABLED */ NULL, NULL, NULL }, diff --git a/src/backend/utils/misc/queryjumble.c b/src/backend/utils/misc/queryjumble.c index 1bb9fe20ea822..f004a9ce8cde1 100644 --- a/src/backend/utils/misc/queryjumble.c +++ b/src/backend/utils/misc/queryjumble.c @@ -55,8 +55,8 @@ static void RecordConstLocation(JumbleState *jstate, int location); const char * CleanQuerytext(const char *query, int *location, int *len) { - int query_location = *location; - int query_len = *len; + int query_location = *location; + int query_len = *len; /* First apply starting offset, unless it's -1 (unknown). */ if (query_location >= 0) @@ -95,11 +95,12 @@ JumbleState * JumbleQuery(Query *query, const char *querytext) { JumbleState *jstate = NULL; + if (query->utilityStmt) { query->queryId = compute_utility_query_id(querytext, - query->stmt_location, - query->stmt_len); + query->stmt_location, + query->stmt_len); } else { @@ -137,12 +138,12 @@ JumbleQuery(Query *query, const char *querytext) static uint64 compute_utility_query_id(const char *query_text, int query_location, int query_len) { - uint64 queryId; + uint64 queryId; const char *sql; /* - * Confine our attention to the relevant part of the string, if the - * query is a portion of a multi-statement source string. + * Confine our attention to the relevant part of the string, if the query + * is a portion of a multi-statement source string. */ sql = CleanQuerytext(query_text, &query_location, &query_len); @@ -150,9 +151,8 @@ compute_utility_query_id(const char *query_text, int query_location, int query_l query_len, 0)); /* - * If we are unlucky enough to get a hash of zero(invalid), use - * queryID as 2 instead, queryID 1 is already in use for normal - * statements. + * If we are unlucky enough to get a hash of zero(invalid), use queryID as + * 2 instead, queryID 1 is already in use for normal statements. */ if (queryId == UINT64CONST(0)) queryId = UINT64CONST(2); diff --git a/src/backend/utils/sort/logtape.c b/src/backend/utils/sort/logtape.c index 089ba2e106885..cafc087254906 100644 --- a/src/backend/utils/sort/logtape.c +++ b/src/backend/utils/sort/logtape.c @@ -1275,6 +1275,7 @@ LogicalTapeSetBlocks(LogicalTapeSet *lts) for (int i = 0; i < lts->nTapes; i++) { LogicalTape *lt = <s->tapes[i]; + Assert(!lt->writing || lt->buffer == NULL); } #endif diff --git a/src/backend/utils/time/snapmgr.c b/src/backend/utils/time/snapmgr.c index 95704265b6785..2968c7f7b7dc0 100644 --- a/src/backend/utils/time/snapmgr.c +++ b/src/backend/utils/time/snapmgr.c @@ -1808,8 +1808,8 @@ TransactionIdLimitedForOldSnapshots(TransactionId recentXmin, if (ts == threshold_timestamp) { /* - * Current timestamp is in same bucket as the last limit that - * was applied. Reuse. + * Current timestamp is in same bucket as the last limit that was + * applied. Reuse. */ xlimit = threshold_xid; } @@ -1965,13 +1965,13 @@ MaintainOldSnapshotTimeMapping(TimestampTz whenTaken, TransactionId xmin) * number of minutes of difference between ts and the current * head_timestamp. * - * The distance from the current head to the current tail is one - * less than the number of entries in the mapping, because the - * entry at the head_offset is for 0 minutes after head_timestamp. + * The distance from the current head to the current tail is one less + * than the number of entries in the mapping, because the entry at the + * head_offset is for 0 minutes after head_timestamp. * - * The difference between these two values is the number of minutes - * by which we need to advance the mapping, either adding new entries - * or rotating old ones out. + * The difference between these two values is the number of minutes by + * which we need to advance the mapping, either adding new entries or + * rotating old ones out. */ distance_to_new_tail = (ts - oldSnapshotControl->head_timestamp) / USECS_PER_MINUTE; diff --git a/src/bin/pg_amcheck/pg_amcheck.c b/src/bin/pg_amcheck/pg_amcheck.c index 09ebb4929a7b8..58a45b47b2626 100644 --- a/src/bin/pg_amcheck/pg_amcheck.c +++ b/src/bin/pg_amcheck/pg_amcheck.c @@ -564,8 +564,8 @@ main(int argc, char *argv[]) */ if (opts.install_missing) { - char *schema; - char *install_sql; + char *schema; + char *install_sql; /* * Must re-escape the schema name for each database, as the diff --git a/src/bin/pg_amcheck/t/002_nonesuch.pl b/src/bin/pg_amcheck/t/002_nonesuch.pl index 7c446064ab62f..5f712ee32acb3 100644 --- a/src/bin/pg_amcheck/t/002_nonesuch.pl +++ b/src/bin/pg_amcheck/t/002_nonesuch.pl @@ -24,25 +24,26 @@ # Failing to connect to the initial database is an error. $node->command_checks_all( [ 'pg_amcheck', 'qqq' ], - 1, - [ qr/^$/ ], - [ qr/FATAL: database "qqq" does not exist/ ], + 1, [qr/^$/], + [qr/FATAL: database "qqq" does not exist/], 'checking a non-existent database'); # Failing to resolve a database pattern is an error by default. $node->command_checks_all( [ 'pg_amcheck', '-d', 'qqq', '-d', 'postgres' ], 1, - [ qr/^$/ ], - [ qr/pg_amcheck: error: no connectable databases to check matching "qqq"/ ], + [qr/^$/], + [qr/pg_amcheck: error: no connectable databases to check matching "qqq"/], 'checking an unresolvable database pattern'); # But only a warning under --no-strict-names $node->command_checks_all( [ 'pg_amcheck', '--no-strict-names', '-d', 'qqq', '-d', 'postgres' ], 0, - [ qr/^$/ ], - [ qr/pg_amcheck: warning: no connectable databases to check matching "qqq"/ ], + [qr/^$/], + [ + qr/pg_amcheck: warning: no connectable databases to check matching "qqq"/ + ], 'checking an unresolvable database pattern under --no-strict-names'); # Check that a substring of an existent database name does not get interpreted @@ -50,29 +51,31 @@ $node->command_checks_all( [ 'pg_amcheck', '-d', 'post', '-d', 'postgres' ], 1, - [ qr/^$/ ], - [ qr/pg_amcheck: error: no connectable databases to check matching "post"/ ], - 'checking an unresolvable database pattern (substring of existent database)'); + [qr/^$/], + [ + qr/pg_amcheck: error: no connectable databases to check matching "post"/ + ], + 'checking an unresolvable database pattern (substring of existent database)' +); # Check that a superstring of an existent database name does not get interpreted # as a matching pattern. $node->command_checks_all( [ 'pg_amcheck', '-d', 'postgresql', '-d', 'postgres' ], 1, - [ qr/^$/ ], - [ qr/pg_amcheck: error: no connectable databases to check matching "postgresql"/ ], - 'checking an unresolvable database pattern (superstring of existent database)'); + [qr/^$/], + [ + qr/pg_amcheck: error: no connectable databases to check matching "postgresql"/ + ], + 'checking an unresolvable database pattern (superstring of existent database)' +); ######################################### # Test connecting with a non-existent user # Failing to connect to the initial database due to bad username is an error. -$node->command_checks_all( - [ 'pg_amcheck', '-U', 'no_such_user', 'postgres' ], - 1, - [ qr/^$/ ], - [ ], - 'checking with a non-existent user'); +$node->command_checks_all([ 'pg_amcheck', '-U', 'no_such_user', 'postgres' ], + 1, [qr/^$/], [], 'checking with a non-existent user'); ######################################### # Test checking databases without amcheck installed @@ -83,26 +86,35 @@ $node->command_checks_all( [ 'pg_amcheck', 'template1' ], 1, - [ qr/^$/ ], - [ qr/pg_amcheck: warning: skipping database "template1": amcheck is not installed/, - qr/pg_amcheck: error: no relations to check/ ], - 'checking a database by name without amcheck installed, no other databases'); + [qr/^$/], + [ + qr/pg_amcheck: warning: skipping database "template1": amcheck is not installed/, + qr/pg_amcheck: error: no relations to check/ + ], + 'checking a database by name without amcheck installed, no other databases' +); # Again, but this time with another database to check, so no error is raised. $node->command_checks_all( [ 'pg_amcheck', '-d', 'template1', '-d', 'postgres' ], 0, - [ qr/^$/ ], - [ qr/pg_amcheck: warning: skipping database "template1": amcheck is not installed/ ], - 'checking a database by name without amcheck installed, with other databases'); + [qr/^$/], + [ + qr/pg_amcheck: warning: skipping database "template1": amcheck is not installed/ + ], + 'checking a database by name without amcheck installed, with other databases' +); # Again, but by way of checking all databases $node->command_checks_all( [ 'pg_amcheck', '--all' ], 0, - [ qr/^$/ ], - [ qr/pg_amcheck: warning: skipping database "template1": amcheck is not installed/ ], - 'checking a database by pattern without amcheck installed, with other databases'); + [qr/^$/], + [ + qr/pg_amcheck: warning: skipping database "template1": amcheck is not installed/ + ], + 'checking a database by pattern without amcheck installed, with other databases' +); ######################################### # Test unreasonable patterns @@ -111,24 +123,28 @@ $node->command_checks_all( [ 'pg_amcheck', '-d', 'postgres', '-t', '..' ], 1, - [ qr/^$/ ], - [ qr/pg_amcheck: error: no connectable databases to check matching "\.\."/ ], + [qr/^$/], + [ + qr/pg_amcheck: error: no connectable databases to check matching "\.\."/ + ], 'checking table pattern ".."'); # Again, but with non-trivial schema and relation parts $node->command_checks_all( [ 'pg_amcheck', '-d', 'postgres', '-t', '.foo.bar' ], 1, - [ qr/^$/ ], - [ qr/pg_amcheck: error: no connectable databases to check matching "\.foo\.bar"/ ], + [qr/^$/], + [ + qr/pg_amcheck: error: no connectable databases to check matching "\.foo\.bar"/ + ], 'checking table pattern ".foo.bar"'); # Check two-part unreasonable pattern that has zero-length names $node->command_checks_all( [ 'pg_amcheck', '-d', 'postgres', '-t', '.' ], 1, - [ qr/^$/ ], - [ qr/pg_amcheck: error: no heap tables to check matching "\."/ ], + [qr/^$/], + [qr/pg_amcheck: error: no heap tables to check matching "\."/], 'checking table pattern "."'); ######################################### @@ -137,73 +153,80 @@ # Use --no-strict-names and a single existent table so we only get warnings # about the failed pattern matches $node->command_checks_all( - [ 'pg_amcheck', '--no-strict-names', - '-t', 'no_such_table', - '-t', 'no*such*table', - '-i', 'no_such_index', - '-i', 'no*such*index', - '-r', 'no_such_relation', - '-r', 'no*such*relation', - '-d', 'no_such_database', - '-d', 'no*such*database', - '-r', 'none.none', - '-r', 'none.none.none', - '-r', 'this.is.a.really.long.dotted.string', - '-r', 'postgres.none.none', - '-r', 'postgres.long.dotted.string', - '-r', 'postgres.pg_catalog.none', - '-r', 'postgres.none.pg_class', - '-t', 'postgres.pg_catalog.pg_class', # This exists + [ + 'pg_amcheck', '--no-strict-names', + '-t', 'no_such_table', + '-t', 'no*such*table', + '-i', 'no_such_index', + '-i', 'no*such*index', + '-r', 'no_such_relation', + '-r', 'no*such*relation', + '-d', 'no_such_database', + '-d', 'no*such*database', + '-r', 'none.none', + '-r', 'none.none.none', + '-r', 'this.is.a.really.long.dotted.string', + '-r', 'postgres.none.none', + '-r', 'postgres.long.dotted.string', + '-r', 'postgres.pg_catalog.none', + '-r', 'postgres.none.pg_class', + '-t', 'postgres.pg_catalog.pg_class', # This exists ], 0, - [ qr/^$/ ], - [ qr/pg_amcheck: warning: no heap tables to check matching "no_such_table"/, - qr/pg_amcheck: warning: no heap tables to check matching "no\*such\*table"/, - qr/pg_amcheck: warning: no btree indexes to check matching "no_such_index"/, - qr/pg_amcheck: warning: no btree indexes to check matching "no\*such\*index"/, - qr/pg_amcheck: warning: no relations to check matching "no_such_relation"/, - qr/pg_amcheck: warning: no relations to check matching "no\*such\*relation"/, - qr/pg_amcheck: warning: no heap tables to check matching "no\*such\*table"/, - qr/pg_amcheck: warning: no connectable databases to check matching "no_such_database"/, - qr/pg_amcheck: warning: no connectable databases to check matching "no\*such\*database"/, - qr/pg_amcheck: warning: no relations to check matching "none\.none"/, - qr/pg_amcheck: warning: no connectable databases to check matching "none\.none\.none"/, - qr/pg_amcheck: warning: no connectable databases to check matching "this\.is\.a\.really\.long\.dotted\.string"/, - qr/pg_amcheck: warning: no relations to check matching "postgres\.none\.none"/, - qr/pg_amcheck: warning: no relations to check matching "postgres\.long\.dotted\.string"/, - qr/pg_amcheck: warning: no relations to check matching "postgres\.pg_catalog\.none"/, - qr/pg_amcheck: warning: no relations to check matching "postgres\.none\.pg_class"/, - ], - 'many unmatched patterns and one matched pattern under --no-strict-names'); + [qr/^$/], + [ + qr/pg_amcheck: warning: no heap tables to check matching "no_such_table"/, + qr/pg_amcheck: warning: no heap tables to check matching "no\*such\*table"/, + qr/pg_amcheck: warning: no btree indexes to check matching "no_such_index"/, + qr/pg_amcheck: warning: no btree indexes to check matching "no\*such\*index"/, + qr/pg_amcheck: warning: no relations to check matching "no_such_relation"/, + qr/pg_amcheck: warning: no relations to check matching "no\*such\*relation"/, + qr/pg_amcheck: warning: no heap tables to check matching "no\*such\*table"/, + qr/pg_amcheck: warning: no connectable databases to check matching "no_such_database"/, + qr/pg_amcheck: warning: no connectable databases to check matching "no\*such\*database"/, + qr/pg_amcheck: warning: no relations to check matching "none\.none"/, + qr/pg_amcheck: warning: no connectable databases to check matching "none\.none\.none"/, + qr/pg_amcheck: warning: no connectable databases to check matching "this\.is\.a\.really\.long\.dotted\.string"/, + qr/pg_amcheck: warning: no relations to check matching "postgres\.none\.none"/, + qr/pg_amcheck: warning: no relations to check matching "postgres\.long\.dotted\.string"/, + qr/pg_amcheck: warning: no relations to check matching "postgres\.pg_catalog\.none"/, + qr/pg_amcheck: warning: no relations to check matching "postgres\.none\.pg_class"/, + ], + 'many unmatched patterns and one matched pattern under --no-strict-names' +); ######################################### # Test checking otherwise existent objects but in databases where they do not exist -$node->safe_psql('postgres', q( +$node->safe_psql( + 'postgres', q( CREATE TABLE public.foo (f integer); CREATE INDEX foo_idx ON foo(f); )); $node->safe_psql('postgres', q(CREATE DATABASE another_db)); $node->command_checks_all( - [ 'pg_amcheck', '-d', 'postgres', '--no-strict-names', - '-t', 'template1.public.foo', - '-t', 'another_db.public.foo', - '-t', 'no_such_database.public.foo', - '-i', 'template1.public.foo_idx', - '-i', 'another_db.public.foo_idx', - '-i', 'no_such_database.public.foo_idx', + [ + 'pg_amcheck', '-d', + 'postgres', '--no-strict-names', + '-t', 'template1.public.foo', + '-t', 'another_db.public.foo', + '-t', 'no_such_database.public.foo', + '-i', 'template1.public.foo_idx', + '-i', 'another_db.public.foo_idx', + '-i', 'no_such_database.public.foo_idx', ], 1, - [ qr/^$/ ], - [ qr/pg_amcheck: warning: skipping database "template1": amcheck is not installed/, - qr/pg_amcheck: warning: no heap tables to check matching "template1\.public\.foo"/, - qr/pg_amcheck: warning: no heap tables to check matching "another_db\.public\.foo"/, - qr/pg_amcheck: warning: no connectable databases to check matching "no_such_database\.public\.foo"/, - qr/pg_amcheck: warning: no btree indexes to check matching "template1\.public\.foo_idx"/, - qr/pg_amcheck: warning: no btree indexes to check matching "another_db\.public\.foo_idx"/, - qr/pg_amcheck: warning: no connectable databases to check matching "no_such_database\.public\.foo_idx"/, - qr/pg_amcheck: error: no relations to check/, + [qr/^$/], + [ + qr/pg_amcheck: warning: skipping database "template1": amcheck is not installed/, + qr/pg_amcheck: warning: no heap tables to check matching "template1\.public\.foo"/, + qr/pg_amcheck: warning: no heap tables to check matching "another_db\.public\.foo"/, + qr/pg_amcheck: warning: no connectable databases to check matching "no_such_database\.public\.foo"/, + qr/pg_amcheck: warning: no btree indexes to check matching "template1\.public\.foo_idx"/, + qr/pg_amcheck: warning: no btree indexes to check matching "another_db\.public\.foo_idx"/, + qr/pg_amcheck: warning: no connectable databases to check matching "no_such_database\.public\.foo_idx"/, + qr/pg_amcheck: error: no relations to check/, ], 'checking otherwise existent objets in the wrong databases'); @@ -213,30 +236,31 @@ # Check with only schema exclusion patterns $node->command_checks_all( - [ 'pg_amcheck', '--all', '--no-strict-names', - '-S', 'public', - '-S', 'pg_catalog', - '-S', 'pg_toast', - '-S', 'information_schema', + [ + 'pg_amcheck', '--all', '--no-strict-names', '-S', + 'public', '-S', 'pg_catalog', '-S', + 'pg_toast', '-S', 'information_schema', ], 1, - [ qr/^$/ ], - [ qr/pg_amcheck: warning: skipping database "template1": amcheck is not installed/, - qr/pg_amcheck: error: no relations to check/ ], + [qr/^$/], + [ + qr/pg_amcheck: warning: skipping database "template1": amcheck is not installed/, + qr/pg_amcheck: error: no relations to check/ + ], 'schema exclusion patterns exclude all relations'); # Check with schema exclusion patterns overriding relation and schema inclusion patterns $node->command_checks_all( - [ 'pg_amcheck', '--all', '--no-strict-names', - '-s', 'public', - '-s', 'pg_catalog', - '-s', 'pg_toast', - '-s', 'information_schema', - '-t', 'pg_catalog.pg_class', - '-S*' + [ + 'pg_amcheck', '--all', '--no-strict-names', '-s', + 'public', '-s', 'pg_catalog', '-s', + 'pg_toast', '-s', 'information_schema', '-t', + 'pg_catalog.pg_class', '-S*' ], 1, - [ qr/^$/ ], - [ qr/pg_amcheck: warning: skipping database "template1": amcheck is not installed/, - qr/pg_amcheck: error: no relations to check/ ], + [qr/^$/], + [ + qr/pg_amcheck: warning: skipping database "template1": amcheck is not installed/, + qr/pg_amcheck: error: no relations to check/ + ], 'schema exclusion pattern overrides all inclusion patterns'); diff --git a/src/bin/pg_amcheck/t/003_check.pl b/src/bin/pg_amcheck/t/003_check.pl index 659fd15983e8e..817eb4e1160d7 100644 --- a/src/bin/pg_amcheck/t/003_check.pl +++ b/src/bin/pg_amcheck/t/003_check.pl @@ -20,8 +20,8 @@ sub relation_filepath my ($dbname, $relname) = @_; my $pgdata = $node->data_dir; - my $rel = $node->safe_psql($dbname, - qq(SELECT pg_relation_filepath('$relname'))); + my $rel = + $node->safe_psql($dbname, qq(SELECT pg_relation_filepath('$relname'))); die "path not found for relation $relname" unless defined $rel; return "$pgdata/$rel"; } @@ -33,7 +33,8 @@ sub relation_toast { my ($dbname, $relname) = @_; - my $rel = $node->safe_psql($dbname, qq( + my $rel = $node->safe_psql( + $dbname, qq( SELECT c.reltoastrelid::regclass FROM pg_catalog.pg_class c WHERE c.oid = '$relname'::regclass @@ -83,23 +84,22 @@ sub corrupt_first_page my $fh; open($fh, '+<', $relpath) - or BAIL_OUT("open failed: $!"); + or BAIL_OUT("open failed: $!"); binmode $fh; # Corrupt some line pointers. The values are chosen to hit the # various line-pointer-corruption checks in verify_heapam.c # on both little-endian and big-endian architectures. seek($fh, 32, SEEK_SET) - or BAIL_OUT("seek failed: $!"); + or BAIL_OUT("seek failed: $!"); syswrite( $fh, pack("L*", - 0xAAA15550, 0xAAA0D550, 0x00010000, - 0x00008000, 0x0000800F, 0x001e8000, - 0xFFFFFFFF) + 0xAAA15550, 0xAAA0D550, 0x00010000, 0x00008000, + 0x0000800F, 0x001e8000, 0xFFFFFFFF) ) or BAIL_OUT("syswrite failed: $!"); close($fh) - or BAIL_OUT("close failed: $!"); + or BAIL_OUT("close failed: $!"); } # Stops the node, performs all the corruptions previously planned, and @@ -137,7 +137,8 @@ () # check that pg_amcheck does not get confused by them. Create functions in # schema public that look like amcheck functions to check that pg_amcheck # does not use them. - $node->safe_psql($dbname, q( + $node->safe_psql( + $dbname, q( CREATE SCHEMA amcheck_schema; CREATE EXTENSION amcheck WITH SCHEMA amcheck_schema; CREATE TABLE amcheck_schema.pg_database (junk text); @@ -187,7 +188,8 @@ () # for my $schema (qw(s1 s2 s3 s4 s5)) { - $node->safe_psql($dbname, qq( + $node->safe_psql( + $dbname, qq( CREATE SCHEMA $schema; CREATE SEQUENCE $schema.seq1; CREATE SEQUENCE $schema.seq2; @@ -318,21 +320,18 @@ () my @cmd = ('pg_amcheck', '--quiet', '-p', $port); # Regular expressions to match various expected output -my $no_output_re = qr/^$/; +my $no_output_re = qr/^$/; my $line_pointer_corruption_re = qr/line pointer/; my $missing_file_re = qr/could not open file ".*": No such file or directory/; -my $index_missing_relation_fork_re = qr/index ".*" lacks a main relation fork/; +my $index_missing_relation_fork_re = + qr/index ".*" lacks a main relation fork/; # We have created test databases with tables populated with data, but have not # yet corrupted anything. As such, we expect no corruption and verify that # none is reported # -$node->command_checks_all( - [ @cmd, '-d', 'db1', '-d', 'db2', '-d', 'db3' ], - 0, - [ $no_output_re ], - [ $no_output_re ], - 'pg_amcheck prior to corruption'); +$node->command_checks_all([ @cmd, '-d', 'db1', '-d', 'db2', '-d', 'db3' ], + 0, [$no_output_re], [$no_output_re], 'pg_amcheck prior to corruption'); # Perform the corruptions we planned above using only a single database restart. # @@ -347,22 +346,23 @@ () $node->command_checks_all( [ @cmd, 'db1' ], 2, - [ $index_missing_relation_fork_re, - $line_pointer_corruption_re, - $missing_file_re, + [ + $index_missing_relation_fork_re, $line_pointer_corruption_re, + $missing_file_re, ], - [ $no_output_re ], + [$no_output_re], 'pg_amcheck all schemas, tables and indexes in database db1'); $node->command_checks_all( [ @cmd, '-d', 'db1', '-d', 'db2', '-d', 'db3' ], 2, - [ $index_missing_relation_fork_re, - $line_pointer_corruption_re, - $missing_file_re, + [ + $index_missing_relation_fork_re, $line_pointer_corruption_re, + $missing_file_re, ], - [ $no_output_re ], - 'pg_amcheck all schemas, tables and indexes in databases db1, db2, and db3'); + [$no_output_re], + 'pg_amcheck all schemas, tables and indexes in databases db1, db2, and db3' +); # Scans of indexes in s1 should detect the specific corruption that we created # above. For missing relation forks, we know what the error message looks @@ -376,15 +376,17 @@ () $node->command_checks_all( [ @cmd, '--all', '-s', 's1', '-i', 't1_btree' ], 2, - [ $index_missing_relation_fork_re ], - [ qr/pg_amcheck: warning: skipping database "postgres": amcheck is not installed/ ], + [$index_missing_relation_fork_re], + [ + qr/pg_amcheck: warning: skipping database "postgres": amcheck is not installed/ + ], 'pg_amcheck index s1.t1_btree reports missing main relation fork'); $node->command_checks_all( [ @cmd, '-d', 'db1', '-s', 's1', '-i', 't2_btree' ], 2, - [ qr/.+/ ], # Any non-empty error message is acceptable - [ $no_output_re ], + [qr/.+/], # Any non-empty error message is acceptable + [$no_output_re], 'pg_amcheck index s1.s2 reports index corruption'); # Checking db1.s1 with indexes excluded should show no corruptions because we @@ -393,18 +395,14 @@ () # $node->command_checks_all( [ @cmd, '-t', 's1.*', '--no-dependent-indexes', 'db1' ], - 0, - [ $no_output_re ], - [ $no_output_re ], + 0, [$no_output_re], [$no_output_re], 'pg_amcheck of db1.s1 excluding indexes'); # Checking db2.s1 should show table corruptions if indexes are excluded # $node->command_checks_all( [ @cmd, '-t', 's1.*', '--no-dependent-indexes', 'db2' ], - 2, - [ $missing_file_re ], - [ $no_output_re ], + 2, [$missing_file_re], [$no_output_re], 'pg_amcheck of db2.s1 excluding indexes'); # In schema db1.s3, the tables and indexes are both corrupt. We should see @@ -413,36 +411,33 @@ () $node->command_checks_all( [ @cmd, '-s', 's3', 'db1' ], 2, - [ $index_missing_relation_fork_re, - $line_pointer_corruption_re, - $missing_file_re, + [ + $index_missing_relation_fork_re, $line_pointer_corruption_re, + $missing_file_re, ], - [ $no_output_re ], + [$no_output_re], 'pg_amcheck schema s3 reports table and index errors'); # In schema db1.s4, only toast tables are corrupt. Check that under default # options the toast corruption is reported, but when excluding toast we get no # error reports. -$node->command_checks_all( - [ @cmd, '-s', 's4', 'db1' ], - 2, - [ $missing_file_re ], - [ $no_output_re ], +$node->command_checks_all([ @cmd, '-s', 's4', 'db1' ], + 2, [$missing_file_re], [$no_output_re], 'pg_amcheck in schema s4 reports toast corruption'); $node->command_checks_all( - [ @cmd, '--no-dependent-toast', '--exclude-toast-pointers', '-s', 's4', 'db1' ], + [ + @cmd, '--no-dependent-toast', '--exclude-toast-pointers', '-s', 's4', + 'db1' + ], 0, - [ $no_output_re ], - [ $no_output_re ], + [$no_output_re], + [$no_output_re], 'pg_amcheck in schema s4 excluding toast reports no corruption'); # Check that no corruption is reported in schema db1.s5 -$node->command_checks_all( - [ @cmd, '-s', 's5', 'db1' ], - 0, - [ $no_output_re ], - [ $no_output_re ], +$node->command_checks_all([ @cmd, '-s', 's5', 'db1' ], + 0, [$no_output_re], [$no_output_re], 'pg_amcheck over schema s5 reports no corruption'); # In schema db1.s1, only indexes are corrupt. Verify that when we exclude @@ -451,9 +446,10 @@ () $node->command_checks_all( [ @cmd, '-s', 's1', '-I', 't1_btree', '-I', 't2_btree', 'db1' ], 0, - [ $no_output_re ], - [ $no_output_re ], - 'pg_amcheck over schema s1 with corrupt indexes excluded reports no corruption'); + [$no_output_re], + [$no_output_re], + 'pg_amcheck over schema s1 with corrupt indexes excluded reports no corruption' +); # In schema db1.s1, only indexes are corrupt. Verify that when we provide only # table inclusions, and disable index expansion, no corruption is reported @@ -462,9 +458,10 @@ () $node->command_checks_all( [ @cmd, '-t', 's1.*', '--no-dependent-indexes', 'db1' ], 0, - [ $no_output_re ], - [ $no_output_re ], - 'pg_amcheck over schema s1 with all indexes excluded reports no corruption'); + [$no_output_re], + [$no_output_re], + 'pg_amcheck over schema s1 with all indexes excluded reports no corruption' +); # In schema db1.s2, only tables are corrupt. Verify that when we exclude those # tables that no corruption is reported. @@ -472,9 +469,10 @@ () $node->command_checks_all( [ @cmd, '-s', 's2', '-T', 't1', '-T', 't2', 'db1' ], 0, - [ $no_output_re ], - [ $no_output_re ], - 'pg_amcheck over schema s2 with corrupt tables excluded reports no corruption'); + [$no_output_re], + [$no_output_re], + 'pg_amcheck over schema s2 with corrupt tables excluded reports no corruption' +); # Check errors about bad block range command line arguments. We use schema s5 # to avoid getting messages about corrupt tables or indexes. @@ -501,20 +499,21 @@ () $node->command_checks_all( [ @cmd, '-s', 's1', '-i', 't1_btree', '--parent-check', 'db1' ], 2, - [ $index_missing_relation_fork_re ], - [ $no_output_re ], + [$index_missing_relation_fork_re], + [$no_output_re], 'pg_amcheck smoke test --parent-check'); $node->command_checks_all( - [ @cmd, '-s', 's1', '-i', 't1_btree', '--heapallindexed', '--rootdescend', 'db1' ], + [ + @cmd, '-s', 's1', '-i', 't1_btree', '--heapallindexed', + '--rootdescend', 'db1' + ], 2, - [ $index_missing_relation_fork_re ], - [ $no_output_re ], + [$index_missing_relation_fork_re], + [$no_output_re], 'pg_amcheck smoke test --heapallindexed --rootdescend'); $node->command_checks_all( [ @cmd, '-d', 'db1', '-d', 'db2', '-d', 'db3', '-S', 's*' ], - 0, - [ $no_output_re ], - [ $no_output_re ], + 0, [$no_output_re], [$no_output_re], 'pg_amcheck excluding all corrupt schemas'); diff --git a/src/bin/pg_amcheck/t/004_verify_heapam.pl b/src/bin/pg_amcheck/t/004_verify_heapam.pl index fa4059172ecd1..b3a96e801690a 100644 --- a/src/bin/pg_amcheck/t/004_verify_heapam.pl +++ b/src/bin/pg_amcheck/t/004_verify_heapam.pl @@ -85,7 +85,7 @@ # constants here, where they can be compared easily against the layout. use constant HEAPTUPLE_PACK_CODE => 'LLLSSSSSCCLLCCCCCCCCCCllLL'; -use constant HEAPTUPLE_PACK_LENGTH => 58; # Total size +use constant HEAPTUPLE_PACK_LENGTH => 58; # Total size # Read a tuple of our table from a heap page. # @@ -100,39 +100,40 @@ sub read_tuple my ($fh, $offset) = @_; my ($buffer, %tup); seek($fh, $offset, SEEK_SET) - or BAIL_OUT("seek failed: $!"); + or BAIL_OUT("seek failed: $!"); defined(sysread($fh, $buffer, HEAPTUPLE_PACK_LENGTH)) - or BAIL_OUT("sysread failed: $!"); + or BAIL_OUT("sysread failed: $!"); @_ = unpack(HEAPTUPLE_PACK_CODE, $buffer); - %tup = (t_xmin => shift, - t_xmax => shift, - t_field3 => shift, - bi_hi => shift, - bi_lo => shift, - ip_posid => shift, - t_infomask2 => shift, - t_infomask => shift, - t_hoff => shift, - t_bits => shift, - a_1 => shift, - a_2 => shift, - b_header => shift, - b_body1 => shift, - b_body2 => shift, - b_body3 => shift, - b_body4 => shift, - b_body5 => shift, - b_body6 => shift, - b_body7 => shift, - c_va_header => shift, - c_va_vartag => shift, - c_va_rawsize => shift, - c_va_extinfo => shift, - c_va_valueid => shift, - c_va_toastrelid => shift); + %tup = ( + t_xmin => shift, + t_xmax => shift, + t_field3 => shift, + bi_hi => shift, + bi_lo => shift, + ip_posid => shift, + t_infomask2 => shift, + t_infomask => shift, + t_hoff => shift, + t_bits => shift, + a_1 => shift, + a_2 => shift, + b_header => shift, + b_body1 => shift, + b_body2 => shift, + b_body3 => shift, + b_body4 => shift, + b_body5 => shift, + b_body6 => shift, + b_body7 => shift, + c_va_header => shift, + c_va_vartag => shift, + c_va_rawsize => shift, + c_va_extinfo => shift, + c_va_valueid => shift, + c_va_toastrelid => shift); # Stitch together the text for column 'b' - $tup{b} = join('', map { chr($tup{"b_body$_"}) } (1..7)); + $tup{b} = join('', map { chr($tup{"b_body$_"}) } (1 .. 7)); return \%tup; } @@ -149,37 +150,25 @@ sub read_tuple sub write_tuple { my ($fh, $offset, $tup) = @_; - my $buffer = pack(HEAPTUPLE_PACK_CODE, - $tup->{t_xmin}, - $tup->{t_xmax}, - $tup->{t_field3}, - $tup->{bi_hi}, - $tup->{bi_lo}, - $tup->{ip_posid}, - $tup->{t_infomask2}, - $tup->{t_infomask}, - $tup->{t_hoff}, - $tup->{t_bits}, - $tup->{a_1}, - $tup->{a_2}, - $tup->{b_header}, - $tup->{b_body1}, - $tup->{b_body2}, - $tup->{b_body3}, - $tup->{b_body4}, - $tup->{b_body5}, - $tup->{b_body6}, - $tup->{b_body7}, - $tup->{c_va_header}, - $tup->{c_va_vartag}, - $tup->{c_va_rawsize}, - $tup->{c_va_extinfo}, - $tup->{c_va_valueid}, - $tup->{c_va_toastrelid}); + my $buffer = pack( + HEAPTUPLE_PACK_CODE, + $tup->{t_xmin}, $tup->{t_xmax}, + $tup->{t_field3}, $tup->{bi_hi}, + $tup->{bi_lo}, $tup->{ip_posid}, + $tup->{t_infomask2}, $tup->{t_infomask}, + $tup->{t_hoff}, $tup->{t_bits}, + $tup->{a_1}, $tup->{a_2}, + $tup->{b_header}, $tup->{b_body1}, + $tup->{b_body2}, $tup->{b_body3}, + $tup->{b_body4}, $tup->{b_body5}, + $tup->{b_body6}, $tup->{b_body7}, + $tup->{c_va_header}, $tup->{c_va_vartag}, + $tup->{c_va_rawsize}, $tup->{c_va_extinfo}, + $tup->{c_va_valueid}, $tup->{c_va_toastrelid}); seek($fh, $offset, SEEK_SET) - or BAIL_OUT("seek failed: $!"); + or BAIL_OUT("seek failed: $!"); defined(syswrite($fh, $buffer, HEAPTUPLE_PACK_LENGTH)) - or BAIL_OUT("syswrite failed: $!"); + or BAIL_OUT("syswrite failed: $!"); return; } @@ -196,7 +185,7 @@ sub write_tuple # Start the node and load the extensions. We depend on both # amcheck and pageinspect for this test. $node->start; -my $port = $node->port; +my $port = $node->port; my $pgdata = $node->data_dir; $node->safe_psql('postgres', "CREATE EXTENSION amcheck"); $node->safe_psql('postgres', "CREATE EXTENSION pageinspect"); @@ -224,12 +213,14 @@ sub write_tuple VACUUM FREEZE public.junk )); -my $rel = $node->safe_psql('postgres', qq(SELECT pg_relation_filepath('public.test'))); +my $rel = $node->safe_psql('postgres', + qq(SELECT pg_relation_filepath('public.test'))); my $relpath = "$pgdata/$rel"; # Insert data and freeze public.test use constant ROWCOUNT => 16; -$node->safe_psql('postgres', qq( +$node->safe_psql( + 'postgres', qq( INSERT INTO public.test (a, b, c) VALUES ( x'DEADF9F9DEADF9F9'::bigint, @@ -237,7 +228,7 @@ sub write_tuple repeat('w', 10000) ); VACUUM FREEZE public.test - )) for (1..ROWCOUNT); + )) for (1 .. ROWCOUNT); my $relfrozenxid = $node->safe_psql('postgres', q(select relfrozenxid from pg_class where relname = 'test')); @@ -250,15 +241,19 @@ sub write_tuple if ($datfrozenxid <= 3 || $datfrozenxid >= $relfrozenxid) { $node->clean_node; - plan skip_all => "Xid thresholds not as expected: got datfrozenxid = $datfrozenxid, relfrozenxid = $relfrozenxid"; + plan skip_all => + "Xid thresholds not as expected: got datfrozenxid = $datfrozenxid, relfrozenxid = $relfrozenxid"; exit; } # Find where each of the tuples is located on the page. my @lp_off; -for my $tup (0..ROWCOUNT-1) +for my $tup (0 .. ROWCOUNT - 1) { - push (@lp_off, $node->safe_psql('postgres', qq( + push( + @lp_off, + $node->safe_psql( + 'postgres', qq( select lp_off from heap_page_items(get_raw_page('test', 'main', 0)) offset $tup limit 1))); } @@ -269,26 +264,28 @@ sub write_tuple $node->stop; my $file; open($file, '+<', $relpath) - or BAIL_OUT("open failed: $!"); + or BAIL_OUT("open failed: $!"); binmode $file; my $ENDIANNESS; for (my $tupidx = 0; $tupidx < ROWCOUNT; $tupidx++) { - my $offnum = $tupidx + 1; # offnum is 1-based, not zero-based + my $offnum = $tupidx + 1; # offnum is 1-based, not zero-based my $offset = $lp_off[$tupidx]; my $tup = read_tuple($file, $offset); # Sanity-check that the data appears on the page where we expect. my $a_1 = $tup->{a_1}; my $a_2 = $tup->{a_2}; - my $b = $tup->{b}; + my $b = $tup->{b}; if ($a_1 != 0xDEADF9F9 || $a_2 != 0xDEADF9F9 || $b ne 'abcdefg') { - close($file); # ignore errors on close; we're exiting anyway + close($file); # ignore errors on close; we're exiting anyway $node->clean_node; - plan skip_all => sprintf("Page layout differs from our expectations: expected (%x, %x, \"%s\"), got (%x, %x, \"%s\")", - 0xDEADF9F9, 0xDEADF9F9, "abcdefg", $a_1, $a_2, $b); + plan skip_all => + sprintf( + "Page layout differs from our expectations: expected (%x, %x, \"%s\"), got (%x, %x, \"%s\")", + 0xDEADF9F9, 0xDEADF9F9, "abcdefg", $a_1, $a_2, $b); exit; } @@ -296,44 +293,47 @@ sub write_tuple $ENDIANNESS = $tup->{b_header} == 0x11 ? "little" : "big"; } close($file) - or BAIL_OUT("close failed: $!"); + or BAIL_OUT("close failed: $!"); $node->start; # Ok, Xids and page layout look ok. We can run corruption tests. plan tests => 19; # Check that pg_amcheck runs against the uncorrupted table without error. -$node->command_ok(['pg_amcheck', '-p', $port, 'postgres'], - 'pg_amcheck test table, prior to corruption'); +$node->command_ok( + [ 'pg_amcheck', '-p', $port, 'postgres' ], + 'pg_amcheck test table, prior to corruption'); # Check that pg_amcheck runs against the uncorrupted table and index without error. -$node->command_ok(['pg_amcheck', '-p', $port, 'postgres'], - 'pg_amcheck test table and index, prior to corruption'); +$node->command_ok([ 'pg_amcheck', '-p', $port, 'postgres' ], + 'pg_amcheck test table and index, prior to corruption'); $node->stop; # Some #define constants from access/htup_details.h for use while corrupting. -use constant HEAP_HASNULL => 0x0001; -use constant HEAP_XMAX_LOCK_ONLY => 0x0080; -use constant HEAP_XMIN_COMMITTED => 0x0100; -use constant HEAP_XMIN_INVALID => 0x0200; -use constant HEAP_XMAX_COMMITTED => 0x0400; -use constant HEAP_XMAX_INVALID => 0x0800; -use constant HEAP_NATTS_MASK => 0x07FF; -use constant HEAP_XMAX_IS_MULTI => 0x1000; -use constant HEAP_KEYS_UPDATED => 0x2000; +use constant HEAP_HASNULL => 0x0001; +use constant HEAP_XMAX_LOCK_ONLY => 0x0080; +use constant HEAP_XMIN_COMMITTED => 0x0100; +use constant HEAP_XMIN_INVALID => 0x0200; +use constant HEAP_XMAX_COMMITTED => 0x0400; +use constant HEAP_XMAX_INVALID => 0x0800; +use constant HEAP_NATTS_MASK => 0x07FF; +use constant HEAP_XMAX_IS_MULTI => 0x1000; +use constant HEAP_KEYS_UPDATED => 0x2000; # Helper function to generate a regular expression matching the header we # expect verify_heapam() to return given which fields we expect to be non-null. sub header { my ($blkno, $offnum, $attnum) = @_; - return qr/heap table "postgres"\."public"\."test", block $blkno, offset $offnum, attribute $attnum:\s+/ms - if (defined $attnum); - return qr/heap table "postgres"\."public"\."test", block $blkno, offset $offnum:\s+/ms - if (defined $offnum); + return + qr/heap table "postgres"\."public"\."test", block $blkno, offset $offnum, attribute $attnum:\s+/ms + if (defined $attnum); + return + qr/heap table "postgres"\."public"\."test", block $blkno, offset $offnum:\s+/ms + if (defined $offnum); return qr/heap table "postgres"\."public"\."test", block $blkno:\s+/ms - if (defined $blkno); + if (defined $blkno); return qr/heap table "postgres"\."public"\."test":\s+/ms; } @@ -344,12 +344,12 @@ sub header # my @expected; open($file, '+<', $relpath) - or BAIL_OUT("open failed: $!"); + or BAIL_OUT("open failed: $!"); binmode $file; for (my $tupidx = 0; $tupidx < ROWCOUNT; $tupidx++) { - my $offnum = $tupidx + 1; # offnum is 1-based, not zero-based + my $offnum = $tupidx + 1; # offnum is 1-based, not zero-based my $offset = $lp_off[$tupidx]; my $tup = read_tuple($file, $offset); @@ -364,7 +364,7 @@ sub header # Expected corruption report push @expected, - qr/${header}xmin $xmin precedes relation freeze threshold 0:\d+/; + qr/${header}xmin $xmin precedes relation freeze threshold 0:\d+/; } if ($offnum == 2) { @@ -375,7 +375,7 @@ sub header $tup->{t_infomask} &= ~HEAP_XMIN_INVALID; push @expected, - qr/${$header}xmin $xmin precedes oldest valid transaction ID 0:\d+/; + qr/${$header}xmin $xmin precedes oldest valid transaction ID 0:\d+/; } elsif ($offnum == 3) { @@ -387,7 +387,7 @@ sub header $tup->{t_infomask} &= ~HEAP_XMIN_INVALID; push @expected, - qr/${$header}xmin 4026531839 equals or exceeds next valid transaction ID 0:\d+/; + qr/${$header}xmin 4026531839 equals or exceeds next valid transaction ID 0:\d+/; } elsif ($offnum == 4) { @@ -396,7 +396,7 @@ sub header $tup->{t_infomask} &= ~HEAP_XMAX_INVALID; push @expected, - qr/${$header}xmax 4026531839 equals or exceeds next valid transaction ID 0:\d+/; + qr/${$header}xmax 4026531839 equals or exceeds next valid transaction ID 0:\d+/; } elsif ($offnum == 5) { @@ -404,8 +404,8 @@ sub header $tup->{t_hoff} += 128; push @expected, - qr/${$header}data begins at offset 152 beyond the tuple length 58/, - qr/${$header}tuple data should begin at byte 24, but actually begins at byte 152 \(3 attributes, no nulls\)/; + qr/${$header}data begins at offset 152 beyond the tuple length 58/, + qr/${$header}tuple data should begin at byte 24, but actually begins at byte 152 \(3 attributes, no nulls\)/; } elsif ($offnum == 6) { @@ -413,7 +413,7 @@ sub header $tup->{t_hoff} += 3; push @expected, - qr/${$header}tuple data should begin at byte 24, but actually begins at byte 27 \(3 attributes, no nulls\)/; + qr/${$header}tuple data should begin at byte 24, but actually begins at byte 27 \(3 attributes, no nulls\)/; } elsif ($offnum == 7) { @@ -421,7 +421,7 @@ sub header $tup->{t_hoff} -= 8; push @expected, - qr/${$header}tuple data should begin at byte 24, but actually begins at byte 16 \(3 attributes, no nulls\)/; + qr/${$header}tuple data should begin at byte 24, but actually begins at byte 16 \(3 attributes, no nulls\)/; } elsif ($offnum == 8) { @@ -429,7 +429,7 @@ sub header $tup->{t_hoff} -= 3; push @expected, - qr/${$header}tuple data should begin at byte 24, but actually begins at byte 21 \(3 attributes, no nulls\)/; + qr/${$header}tuple data should begin at byte 24, but actually begins at byte 21 \(3 attributes, no nulls\)/; } elsif ($offnum == 9) { @@ -437,30 +437,30 @@ sub header $tup->{t_infomask2} |= HEAP_NATTS_MASK; push @expected, - qr/${$header}number of attributes 2047 exceeds maximum expected for table 3/; + qr/${$header}number of attributes 2047 exceeds maximum expected for table 3/; } elsif ($offnum == 10) { # Corrupt the tuple to look like it has lots of attributes, some of # them null. This falsely creates the impression that the t_bits # array is longer than just one byte, but t_hoff still says otherwise. - $tup->{t_infomask} |= HEAP_HASNULL; + $tup->{t_infomask} |= HEAP_HASNULL; $tup->{t_infomask2} |= HEAP_NATTS_MASK; $tup->{t_bits} = 0xAA; push @expected, - qr/${$header}tuple data should begin at byte 280, but actually begins at byte 24 \(2047 attributes, has nulls\)/; + qr/${$header}tuple data should begin at byte 280, but actually begins at byte 24 \(2047 attributes, has nulls\)/; } elsif ($offnum == 11) { # Same as above, but this time t_hoff plays along - $tup->{t_infomask} |= HEAP_HASNULL; + $tup->{t_infomask} |= HEAP_HASNULL; $tup->{t_infomask2} |= (HEAP_NATTS_MASK & 0x40); $tup->{t_bits} = 0xAA; $tup->{t_hoff} = 32; push @expected, - qr/${$header}number of attributes 67 exceeds maximum expected for table 3/; + qr/${$header}number of attributes 67 exceeds maximum expected for table 3/; } elsif ($offnum == 12) { @@ -478,13 +478,13 @@ sub header # bytes with 0xFF using 0x3FFFFFFF. # $tup->{b_header} = $ENDIANNESS eq 'little' ? 0xFC : 0x3F; - $tup->{b_body1} = 0xFF; - $tup->{b_body2} = 0xFF; - $tup->{b_body3} = 0xFF; + $tup->{b_body1} = 0xFF; + $tup->{b_body2} = 0xFF; + $tup->{b_body3} = 0xFF; $header = header(0, $offnum, 1); push @expected, - qr/${header}attribute with length \d+ ends at offset \d+ beyond total tuple length \d+/; + qr/${header}attribute with length \d+ ends at offset \d+ beyond total tuple length \d+/; } elsif ($offnum == 13) { @@ -492,8 +492,7 @@ sub header $tup->{c_va_valueid} = 0xFFFFFFFF; $header = header(0, $offnum, 2); - push @expected, - qr/${header}toast value \d+ not found in toast table/; + push @expected, qr/${header}toast value \d+ not found in toast table/; } elsif ($offnum == 14) { @@ -503,9 +502,9 @@ sub header $tup->{t_xmax} = 4; push @expected, - qr/${header}multitransaction ID 4 equals or exceeds next valid multitransaction ID 1/; + qr/${header}multitransaction ID 4 equals or exceeds next valid multitransaction ID 1/; } - elsif ($offnum == 15) # Last offnum must equal ROWCOUNT + elsif ($offnum == 15) # Last offnum must equal ROWCOUNT { # Set both HEAP_XMAX_COMMITTED and HEAP_XMAX_IS_MULTI $tup->{t_infomask} |= HEAP_XMAX_COMMITTED; @@ -513,22 +512,19 @@ sub header $tup->{t_xmax} = 4000000000; push @expected, - qr/${header}multitransaction ID 4000000000 precedes relation minimum multitransaction ID threshold 1/; + qr/${header}multitransaction ID 4000000000 precedes relation minimum multitransaction ID threshold 1/; } write_tuple($file, $offset, $tup); } close($file) - or BAIL_OUT("close failed: $!"); + or BAIL_OUT("close failed: $!"); $node->start; # Run pg_amcheck against the corrupt table with epoch=0, comparing actual # corruption messages against the expected messages $node->command_checks_all( - ['pg_amcheck', '--no-dependent-indexes', '-p', $port, 'postgres'], - 2, - [ @expected ], - [ ], - 'Expected corruption message output'); + [ 'pg_amcheck', '--no-dependent-indexes', '-p', $port, 'postgres' ], + 2, [@expected], [], 'Expected corruption message output'); $node->teardown_node; $node->clean_node; diff --git a/src/bin/pg_amcheck/t/005_opclass_damage.pl b/src/bin/pg_amcheck/t/005_opclass_damage.pl index 062015aa00392..b65becae9d81f 100644 --- a/src/bin/pg_amcheck/t/005_opclass_damage.pl +++ b/src/bin/pg_amcheck/t/005_opclass_damage.pl @@ -15,7 +15,8 @@ $node->start; # Create a custom operator class and an index which uses it. -$node->safe_psql('postgres', q( +$node->safe_psql( + 'postgres', q( CREATE EXTENSION amcheck; CREATE FUNCTION int4_asc_cmp (a int4, b int4) RETURNS int LANGUAGE sql AS $$ @@ -39,7 +40,8 @@ # Change the operator class to use a function which sorts in a different # order to corrupt the btree index -$node->safe_psql('postgres', q( +$node->safe_psql( + 'postgres', q( CREATE FUNCTION int4_desc_cmp (int4, int4) RETURNS int LANGUAGE sql AS $$ SELECT CASE WHEN $1 = $2 THEN 0 WHEN $1 > $2 THEN -1 ELSE 1 END; $$; UPDATE pg_catalog.pg_amproc @@ -51,7 +53,7 @@ $node->command_checks_all( [ 'pg_amcheck', '-p', $node->port, 'postgres' ], 2, - [ qr/item order invariant violated for index "fickleidx"/ ], - [ ], + [qr/item order invariant violated for index "fickleidx"/], + [], 'pg_amcheck all schemas, tables and indexes reports fickleidx corruption' ); diff --git a/src/bin/pg_basebackup/t/010_pg_basebackup.pl b/src/bin/pg_basebackup/t/010_pg_basebackup.pl index 28949c9caf817..74f8c2c739342 100644 --- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl +++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl @@ -554,7 +554,7 @@ # set page header and block sizes my $pageheader_size = 24; -my $block_size = $node->safe_psql('postgres', 'SHOW block_size;'); +my $block_size = $node->safe_psql('postgres', 'SHOW block_size;'); # induce corruption system_or_bail 'pg_ctl', '-D', $pgdata, 'stop'; diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c index 7fcd2014e7389..1f24e796651ff 100644 --- a/src/bin/pg_dump/common.c +++ b/src/bin/pg_dump/common.c @@ -522,7 +522,7 @@ flagInhAttrs(DumpOptions *dopt, TableInfo *tblinfo, int numTables) { bool foundNotNull; /* Attr was NOT NULL in a parent */ bool foundDefault; /* Found a default in a parent */ - bool foundGenerated; /* Found a generated in a parent */ + bool foundGenerated; /* Found a generated in a parent */ /* no point in examining dropped columns */ if (tbinfo->attisdropped[j]) diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h index 2fdc0d341f327..91060944f1fab 100644 --- a/src/bin/pg_dump/pg_backup_archiver.h +++ b/src/bin/pg_dump/pg_backup_archiver.h @@ -393,7 +393,8 @@ struct _tocEntry /* working state while dumping/restoring */ pgoff_t dataLength; /* item's data size; 0 if none or unknown */ - int reqs; /* do we need schema and/or data of object (REQ_* bit mask) */ + int reqs; /* do we need schema and/or data of object + * (REQ_* bit mask) */ bool created; /* set for DATA member if TABLE was created */ /* working state (needed only for parallel restore) */ @@ -443,7 +444,7 @@ extern void WriteDataChunksForTocEntry(ArchiveHandle *AH, TocEntry *te); extern ArchiveHandle *CloneArchive(ArchiveHandle *AH); extern void DeCloneArchive(ArchiveHandle *AH); -extern int TocIDRequired(ArchiveHandle *AH, DumpId id); +extern int TocIDRequired(ArchiveHandle *AH, DumpId id); TocEntry *getTocEntryByDumpId(ArchiveHandle *AH, DumpId id); extern bool checkSeek(FILE *fp); diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c index b773ed0cb8286..65bcb41a2f86e 100644 --- a/src/bin/pg_dump/pg_backup_tar.c +++ b/src/bin/pg_dump/pg_backup_tar.c @@ -1187,7 +1187,7 @@ _tarPositionTo(ArchiveHandle *AH, const char *filename) /* Header doesn't match, so read to next header */ len = th->fileLen; len += tarPaddingBytesRequired(th->fileLen); - blks = len / TAR_BLOCK_SIZE; /* # of tar blocks */ + blks = len / TAR_BLOCK_SIZE; /* # of tar blocks */ for (i = 0; i < blks; i++) _tarReadRaw(AH, &header[0], TAR_BLOCK_SIZE, NULL, ctx->tarFH); diff --git a/src/bin/pg_dump/t/010_dump_connstr.pl b/src/bin/pg_dump/t/010_dump_connstr.pl index 9a61eea060d34..6478894160b7c 100644 --- a/src/bin/pg_dump/t/010_dump_connstr.pl +++ b/src/bin/pg_dump/t/010_dump_connstr.pl @@ -30,7 +30,7 @@ # The odds of finding something interesting by testing all ASCII letters # seem too small to justify the cycles of testing a fifth name. my $dbname1 = - 'regression' + 'regression' . generate_ascii_string(1, 9) . generate_ascii_string(11, 12) . generate_ascii_string(14, 33) diff --git a/src/bin/pg_rewind/t/001_basic.pl b/src/bin/pg_rewind/t/001_basic.pl index 15a6f25adeeec..d636f35f5e5ed 100644 --- a/src/bin/pg_rewind/t/001_basic.pl +++ b/src/bin/pg_rewind/t/001_basic.pl @@ -74,7 +74,8 @@ sub run_test primary_psql("VACUUM tail_tbl"); # Drop drop_tbl. pg_rewind should copy it back. - primary_psql("insert into drop_tbl values ('in primary, after promotion')"); + primary_psql( + "insert into drop_tbl values ('in primary, after promotion')"); primary_psql("DROP TABLE drop_tbl"); # Before running pg_rewind, do a couple of extra tests with several @@ -83,7 +84,7 @@ sub run_test # in "local" mode for simplicity's sake. if ($test_mode eq 'local') { - my $primary_pgdata = $node_primary->data_dir; + my $primary_pgdata = $node_primary->data_dir; my $standby_pgdata = $node_standby->data_dir; # First check that pg_rewind fails if the target cluster is diff --git a/src/bin/pg_rewind/t/003_extrafiles.pl b/src/bin/pg_rewind/t/003_extrafiles.pl index 4fc500d4b4c24..672c5e586ba74 100644 --- a/src/bin/pg_rewind/t/003_extrafiles.pl +++ b/src/bin/pg_rewind/t/003_extrafiles.pl @@ -27,10 +27,13 @@ sub run_test # Create a subdir and files that will be present in both mkdir "$test_primary_datadir/tst_both_dir"; - append_to_file "$test_primary_datadir/tst_both_dir/both_file1", "in both1"; - append_to_file "$test_primary_datadir/tst_both_dir/both_file2", "in both2"; + append_to_file "$test_primary_datadir/tst_both_dir/both_file1", + "in both1"; + append_to_file "$test_primary_datadir/tst_both_dir/both_file2", + "in both2"; mkdir "$test_primary_datadir/tst_both_dir/both_subdir/"; - append_to_file "$test_primary_datadir/tst_both_dir/both_subdir/both_file3", + append_to_file + "$test_primary_datadir/tst_both_dir/both_subdir/both_file3", "in both3"; RewindTest::create_standby($test_mode); diff --git a/src/bin/pg_rewind/t/008_min_recovery_point.pl b/src/bin/pg_rewind/t/008_min_recovery_point.pl index 7d9362cc2294c..9ebcbad0d266d 100644 --- a/src/bin/pg_rewind/t/008_min_recovery_point.pl +++ b/src/bin/pg_rewind/t/008_min_recovery_point.pl @@ -42,7 +42,8 @@ my $node_1 = get_new_node('node_1'); $node_1->init(allows_streaming => 1); -$node_1->append_conf('postgresql.conf', qq( +$node_1->append_conf( + 'postgresql.conf', qq( wal_keep_size='100 MB' )); @@ -60,13 +61,11 @@ $node_1->backup($backup_name); my $node_2 = get_new_node('node_2'); -$node_2->init_from_backup($node_1, $backup_name, - has_streaming => 1); +$node_2->init_from_backup($node_1, $backup_name, has_streaming => 1); $node_2->start; my $node_3 = get_new_node('node_3'); -$node_3->init_from_backup($node_1, $backup_name, - has_streaming => 1); +$node_3->init_from_backup($node_1, $backup_name, has_streaming => 1); $node_3->start; # Wait until node 3 has connected and caught up @@ -88,14 +87,16 @@ # reconfigure node_1 as a standby following node_3 my $node_3_connstr = $node_3->connstr; -$node_1->append_conf('postgresql.conf', qq( +$node_1->append_conf( + 'postgresql.conf', qq( primary_conninfo='$node_3_connstr' )); $node_1->set_standby_mode(); $node_1->start(); # also reconfigure node_2 to follow node_3 -$node_2->append_conf('postgresql.conf', qq( +$node_2->append_conf( + 'postgresql.conf', qq( primary_conninfo='$node_3_connstr' )); $node_2->restart(); @@ -117,17 +118,21 @@ # demonstratively create a split brain. After the rewind, we should only # see the insert on 1, as the insert on node 3 is rewound away. # -$node_1->safe_psql('postgres', "INSERT INTO public.foo (t) VALUES ('keep this')"); +$node_1->safe_psql('postgres', + "INSERT INTO public.foo (t) VALUES ('keep this')"); # 'bar' is unmodified in node 1, so it won't be overwritten by replaying the # WAL from node 1. -$node_3->safe_psql('postgres', "INSERT INTO public.bar (t) VALUES ('rewind this')"); +$node_3->safe_psql('postgres', + "INSERT INTO public.bar (t) VALUES ('rewind this')"); # Insert more rows in node 1, to bump up the XID counter. Otherwise, if # rewind doesn't correctly rewind the changes made on the other node, # we might fail to notice if the inserts are invisible because the XIDs # are not marked as committed. -$node_1->safe_psql('postgres', "INSERT INTO public.foo (t) VALUES ('and this')"); -$node_1->safe_psql('postgres', "INSERT INTO public.foo (t) VALUES ('and this too')"); +$node_1->safe_psql('postgres', + "INSERT INTO public.foo (t) VALUES ('and this')"); +$node_1->safe_psql('postgres', + "INSERT INTO public.foo (t) VALUES ('and this too')"); # Wait for node 2 to catch up $node_2->poll_query_until('postgres', @@ -138,7 +143,7 @@ $node_2->stop('fast'); $node_3->stop('fast'); -my $node_2_pgdata = $node_2->data_dir; +my $node_2_pgdata = $node_2->data_dir; my $node_1_connstr = $node_1->connstr; # Keep a temporary postgresql.conf or it would be overwritten during the rewind. @@ -147,12 +152,10 @@ "$tmp_folder/node_2-postgresql.conf.tmp"); command_ok( - [ - 'pg_rewind', - "--source-server=$node_1_connstr", - "--target-pgdata=$node_2_pgdata", - "--debug" - ], + [ + 'pg_rewind', "--source-server=$node_1_connstr", + "--target-pgdata=$node_2_pgdata", "--debug" + ], 'run pg_rewind'); # Now move back postgresql.conf with old settings @@ -166,7 +169,7 @@ # before rewind should've been overwritten with the data from node 1. my $result; $result = $node_2->safe_psql('postgres', 'SELECT * FROM public.foo'); -is($result, qq(keep this +is( $result, qq(keep this and this and this too), 'table foo after rewind'); diff --git a/src/bin/pg_rewind/t/RewindTest.pm b/src/bin/pg_rewind/t/RewindTest.pm index 55a350af9d633..938c661afc29f 100644 --- a/src/bin/pg_rewind/t/RewindTest.pm +++ b/src/bin/pg_rewind/t/RewindTest.pm @@ -223,7 +223,7 @@ sub promote_standby sub run_pg_rewind { my $test_mode = shift; - my $primary_pgdata = $node_primary->data_dir; + my $primary_pgdata = $node_primary->data_dir; my $standby_pgdata = $node_standby->data_dir; my $standby_connstr = $node_standby->connstr('postgres'); my $tmp_folder = TestLib::tempdir; @@ -286,8 +286,8 @@ sub run_pg_rewind # recovery configuration automatically. command_ok( [ - 'pg_rewind', "--debug", - "--source-server", $standby_connstr, + 'pg_rewind', "--debug", + "--source-server", $standby_connstr, "--target-pgdata=$primary_pgdata", "--no-sync", "--write-recovery-conf" ], diff --git a/src/bin/pg_test_fsync/pg_test_fsync.c b/src/bin/pg_test_fsync/pg_test_fsync.c index 29ee7c7d6f174..78dab5096c6e8 100644 --- a/src/bin/pg_test_fsync/pg_test_fsync.c +++ b/src/bin/pg_test_fsync/pg_test_fsync.c @@ -401,6 +401,7 @@ test_sync(int writes_per_op) buf, XLOG_BLCKSZ, writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) + /* * This can generate write failures if the filesystem has * a large block size, e.g. 4k, and there is no support diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c index 955a1533d05df..0c47a6b8cc0b3 100644 --- a/src/bin/pg_upgrade/check.c +++ b/src/bin/pg_upgrade/check.c @@ -486,8 +486,8 @@ check_databases_are_compatible(void) static void check_for_new_tablespace_dir(ClusterInfo *new_cluster) { - int tblnum; - char new_tablespace_dir[MAXPGPATH]; + int tblnum; + char new_tablespace_dir[MAXPGPATH]; prep_status("Checking for new cluster tablespace directories"); @@ -496,8 +496,8 @@ check_for_new_tablespace_dir(ClusterInfo *new_cluster) struct stat statbuf; snprintf(new_tablespace_dir, MAXPGPATH, "%s%s", - os_info.old_tablespaces[tblnum], - new_cluster->tablespace_suffix); + os_info.old_tablespaces[tblnum], + new_cluster->tablespace_suffix); if (stat(new_tablespace_dir, &statbuf) == 0 || errno != ENOENT) pg_fatal("new cluster tablespace directory already exists: \"%s\"\n", diff --git a/src/bin/pg_upgrade/exec.c b/src/bin/pg_upgrade/exec.c index 9e52846ef8ba0..19cc06e0c36be 100644 --- a/src/bin/pg_upgrade/exec.c +++ b/src/bin/pg_upgrade/exec.c @@ -416,11 +416,11 @@ check_bin_dir(ClusterInfo *cluster, bool check_versions) static void check_exec(const char *dir, const char *program, bool check_version) { - char path[MAXPGPATH]; - char line[MAXPGPATH]; - char cmd[MAXPGPATH]; - char versionstr[128]; - int ret; + char path[MAXPGPATH]; + char line[MAXPGPATH]; + char cmd[MAXPGPATH]; + char versionstr[128]; + int ret; snprintf(path, sizeof(path), "%s/%s", dir, program); diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index 08276659977d5..dc84b7b9b7890 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -6577,8 +6577,8 @@ threadRun(void *arg) * GO before proceeding to the "done" path which will cleanup, * so as to avoid locking the process. * - * It is unclear whether it is worth doing anything rather than - * coldly exiting with an error message. + * It is unclear whether it is worth doing anything rather + * than coldly exiting with an error message. */ THREAD_BARRIER_WAIT(&barrier); goto done; diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index e1496bb213069..2eaf9ab4c29c5 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -487,7 +487,7 @@ sub pgbench qr{command=98.: int 5432\b}, # :random_seed qr{command=99.: int -9223372036854775808\b}, # min int qr{command=100.: int 9223372036854775807\b}, # max int - # pseudorandom permutation tests + # pseudorandom permutation tests qr{command=101.: boolean true\b}, qr{command=102.: boolean true\b}, qr{command=103.: boolean true\b}, @@ -1091,8 +1091,10 @@ sub pgbench [qr{malformed variable.*trueXXX}], q{\set b :badtrue or true} ], [ - 'invalid permute size', 2, - [qr{permute size parameter must be greater than zero}], q{\set i permute(0, 0)} + 'invalid permute size', + 2, + [qr{permute size parameter must be greater than zero}], + q{\set i permute(0, 0)} ], # GSET diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index d917987fd588c..51ae248ed8c0a 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1788,14 +1788,14 @@ psql_completion(const char *text, int start, int end) /* ALTER INDEX SET|RESET ( */ else if (Matches("ALTER", "INDEX", MatchAny, "RESET", "(")) COMPLETE_WITH("fillfactor", - "deduplicate_items", /* BTREE */ + "deduplicate_items", /* BTREE */ "fastupdate", "gin_pending_list_limit", /* GIN */ "buffering", /* GiST */ "pages_per_range", "autosummarize" /* BRIN */ ); else if (Matches("ALTER", "INDEX", MatchAny, "SET", "(")) COMPLETE_WITH("fillfactor =", - "deduplicate_items =", /* BTREE */ + "deduplicate_items =", /* BTREE */ "fastupdate =", "gin_pending_list_limit =", /* GIN */ "buffering =", /* GiST */ "pages_per_range =", "autosummarize =" /* BRIN */ diff --git a/src/include/access/brin_tuple.h b/src/include/access/brin_tuple.h index 87de94f39702c..c80341f4d6a63 100644 --- a/src/include/access/brin_tuple.h +++ b/src/include/access/brin_tuple.h @@ -33,7 +33,7 @@ typedef struct BrinValues bool bv_allnulls; /* are all values nulls in the page range? */ Datum *bv_values; /* current accumulated values */ Datum bv_mem_value; /* expanded accumulated values */ - MemoryContext bv_context; + MemoryContext bv_context; brin_serialize_callback_type bv_serialize; } BrinValues; diff --git a/src/include/access/commit_ts.h b/src/include/access/commit_ts.h index 608a1643cdd9c..e045dd416f2d8 100644 --- a/src/include/access/commit_ts.h +++ b/src/include/access/commit_ts.h @@ -57,7 +57,7 @@ typedef struct xl_commit_ts_set RepOriginId nodeid; TransactionId mainxid; /* subxact Xids follow */ -} xl_commit_ts_set; +} xl_commit_ts_set; #define SizeOfCommitTsSet (offsetof(xl_commit_ts_set, mainxid) + \ sizeof(TransactionId)) diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index a645c42e6854c..42c66fac57c49 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -1086,7 +1086,7 @@ typedef struct BTOptions { int32 varlena_header_; /* varlena header (do not touch directly!) */ int fillfactor; /* page fill factor in percent (0..100) */ - float8 vacuum_cleanup_index_scale_factor; /* deprecated */ + float8 vacuum_cleanup_index_scale_factor; /* deprecated */ bool deduplicate_items; /* Try to deduplicate items? */ } BTOptions; diff --git a/src/include/access/relscan.h b/src/include/access/relscan.h index 17a161c69a9d8..74a07ef152d30 100644 --- a/src/include/access/relscan.h +++ b/src/include/access/relscan.h @@ -93,7 +93,7 @@ typedef struct ParallelBlockTableScanWorkerData uint32 phsw_chunk_remaining; /* # blocks left in this chunk */ uint32 phsw_chunk_size; /* The number of blocks to allocate in * each I/O chunk for the scan */ -} ParallelBlockTableScanWorkerData; +} ParallelBlockTableScanWorkerData; typedef struct ParallelBlockTableScanWorkerData *ParallelBlockTableScanWorker; /* diff --git a/src/include/access/toast_compression.h b/src/include/access/toast_compression.h index 46c2544e31872..9e2c1cbe1a68e 100644 --- a/src/include/access/toast_compression.h +++ b/src/include/access/toast_compression.h @@ -20,7 +20,7 @@ * but the value is one of the char values defined below, as they appear in * pg_attribute.attcompression, e.g. TOAST_PGLZ_COMPRESSION. */ -extern int default_toast_compression; +extern int default_toast_compression; /* * Built-in compression method-id. The toast compression header will store diff --git a/src/include/access/transam.h b/src/include/access/transam.h index 2f7338ee82740..05c6fbffe44a6 100644 --- a/src/include/access/transam.h +++ b/src/include/access/transam.h @@ -238,7 +238,7 @@ typedef struct VariableCacheData * GetSnapshotData() needs to recompute the contents of the snapshot, or * not. There are likely other users of this. Always above 1. */ - uint64 xactCompletionCount; + uint64 xactCompletionCount; /* * These fields are protected by XactTruncationLock diff --git a/src/include/access/xact.h b/src/include/access/xact.h index f49a57b35e15d..134f6862da0bc 100644 --- a/src/include/access/xact.h +++ b/src/include/access/xact.h @@ -72,8 +72,8 @@ typedef enum SYNCHRONOUS_COMMIT_REMOTE_WRITE, /* wait for local flush and remote * write */ SYNCHRONOUS_COMMIT_REMOTE_FLUSH, /* wait for local and remote flush */ - SYNCHRONOUS_COMMIT_REMOTE_APPLY /* wait for local and remote flush - and remote apply */ + SYNCHRONOUS_COMMIT_REMOTE_APPLY /* wait for local and remote flush and + * remote apply */ } SyncCommitLevel; /* Define the default setting for synchronous_commit */ diff --git a/src/include/catalog/pg_aggregate.dat b/src/include/catalog/pg_aggregate.dat index 0d8c5a922a3d7..fc6d3bfd9454e 100644 --- a/src/include/catalog/pg_aggregate.dat +++ b/src/include/catalog/pg_aggregate.dat @@ -505,20 +505,20 @@ aggcombinefn => 'int2and', aggtranstype => 'int2' }, { aggfnoid => 'bit_or(int2)', aggtransfn => 'int2or', aggcombinefn => 'int2or', aggtranstype => 'int2' }, -{ aggfnoid => 'bit_xor(int2)', aggtransfn => 'int2xor', aggcombinefn => 'int2xor', - aggtranstype => 'int2' }, +{ aggfnoid => 'bit_xor(int2)', aggtransfn => 'int2xor', + aggcombinefn => 'int2xor', aggtranstype => 'int2' }, { aggfnoid => 'bit_and(int4)', aggtransfn => 'int4and', aggcombinefn => 'int4and', aggtranstype => 'int4' }, { aggfnoid => 'bit_or(int4)', aggtransfn => 'int4or', aggcombinefn => 'int4or', aggtranstype => 'int4' }, -{ aggfnoid => 'bit_xor(int4)', aggtransfn => 'int4xor', aggcombinefn => 'int4xor', - aggtranstype => 'int4' }, +{ aggfnoid => 'bit_xor(int4)', aggtransfn => 'int4xor', + aggcombinefn => 'int4xor', aggtranstype => 'int4' }, { aggfnoid => 'bit_and(int8)', aggtransfn => 'int8and', aggcombinefn => 'int8and', aggtranstype => 'int8' }, { aggfnoid => 'bit_or(int8)', aggtransfn => 'int8or', aggcombinefn => 'int8or', aggtranstype => 'int8' }, -{ aggfnoid => 'bit_xor(int8)', aggtransfn => 'int8xor', aggcombinefn => 'int8xor', - aggtranstype => 'int8' }, +{ aggfnoid => 'bit_xor(int8)', aggtransfn => 'int8xor', + aggcombinefn => 'int8xor', aggtranstype => 'int8' }, { aggfnoid => 'bit_and(bit)', aggtransfn => 'bitand', aggcombinefn => 'bitand', aggtranstype => 'bit' }, { aggfnoid => 'bit_or(bit)', aggtransfn => 'bitor', aggcombinefn => 'bitor', diff --git a/src/include/catalog/pg_amproc.dat b/src/include/catalog/pg_amproc.dat index 7fedf78099640..5460aa2422207 100644 --- a/src/include/catalog/pg_amproc.dat +++ b/src/include/catalog/pg_amproc.dat @@ -838,8 +838,7 @@ # bloom "char" { amprocfamily => 'brin/char_bloom_ops', amproclefttype => 'char', - amprocrighttype => 'char', amprocnum => '1', - amproc => 'brin_bloom_opcinfo' }, + amprocrighttype => 'char', amprocnum => '1', amproc => 'brin_bloom_opcinfo' }, { amprocfamily => 'brin/char_bloom_ops', amproclefttype => 'char', amprocrighttype => 'char', amprocnum => '2', amproc => 'brin_bloom_add_value' }, @@ -849,8 +848,7 @@ { amprocfamily => 'brin/char_bloom_ops', amproclefttype => 'char', amprocrighttype => 'char', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/char_bloom_ops', amproclefttype => 'char', - amprocrighttype => 'char', amprocnum => '5', - amproc => 'brin_bloom_options' }, + amprocrighttype => 'char', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/char_bloom_ops', amproclefttype => 'char', amprocrighttype => 'char', amprocnum => '11', amproc => 'hashchar' }, @@ -869,8 +867,7 @@ # bloom name { amprocfamily => 'brin/name_bloom_ops', amproclefttype => 'name', - amprocrighttype => 'name', amprocnum => '1', - amproc => 'brin_bloom_opcinfo' }, + amprocrighttype => 'name', amprocnum => '1', amproc => 'brin_bloom_opcinfo' }, { amprocfamily => 'brin/name_bloom_ops', amproclefttype => 'name', amprocrighttype => 'name', amprocnum => '2', amproc => 'brin_bloom_add_value' }, @@ -880,8 +877,7 @@ { amprocfamily => 'brin/name_bloom_ops', amproclefttype => 'name', amprocrighttype => 'name', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/name_bloom_ops', amproclefttype => 'name', - amprocrighttype => 'name', amprocnum => '5', - amproc => 'brin_bloom_options' }, + amprocrighttype => 'name', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/name_bloom_ops', amproclefttype => 'name', amprocrighttype => 'name', amprocnum => '11', amproc => 'hashname' }, @@ -933,12 +929,14 @@ amprocrighttype => 'int2', amprocnum => '3', amproc => 'brin_minmax_multi_consistent' }, { amprocfamily => 'brin/integer_minmax_multi_ops', amproclefttype => 'int2', - amprocrighttype => 'int2', amprocnum => '4', amproc => 'brin_minmax_multi_union' }, + amprocrighttype => 'int2', amprocnum => '4', + amproc => 'brin_minmax_multi_union' }, { amprocfamily => 'brin/integer_minmax_multi_ops', amproclefttype => 'int2', amprocrighttype => 'int2', amprocnum => '5', amproc => 'brin_minmax_multi_options' }, { amprocfamily => 'brin/integer_minmax_multi_ops', amproclefttype => 'int2', - amprocrighttype => 'int2', amprocnum => '11', amproc => 'brin_minmax_multi_distance_int2' }, + amprocrighttype => 'int2', amprocnum => '11', + amproc => 'brin_minmax_multi_distance_int2' }, { amprocfamily => 'brin/integer_minmax_multi_ops', amproclefttype => 'int4', amprocrighttype => 'int4', amprocnum => '1', @@ -950,12 +948,14 @@ amprocrighttype => 'int4', amprocnum => '3', amproc => 'brin_minmax_multi_consistent' }, { amprocfamily => 'brin/integer_minmax_multi_ops', amproclefttype => 'int4', - amprocrighttype => 'int4', amprocnum => '4', amproc => 'brin_minmax_multi_union' }, + amprocrighttype => 'int4', amprocnum => '4', + amproc => 'brin_minmax_multi_union' }, { amprocfamily => 'brin/integer_minmax_multi_ops', amproclefttype => 'int4', amprocrighttype => 'int4', amprocnum => '5', amproc => 'brin_minmax_multi_options' }, { amprocfamily => 'brin/integer_minmax_multi_ops', amproclefttype => 'int4', - amprocrighttype => 'int4', amprocnum => '11', amproc => 'brin_minmax_multi_distance_int4' }, + amprocrighttype => 'int4', amprocnum => '11', + amproc => 'brin_minmax_multi_distance_int4' }, { amprocfamily => 'brin/integer_minmax_multi_ops', amproclefttype => 'int8', amprocrighttype => 'int8', amprocnum => '1', @@ -967,17 +967,18 @@ amprocrighttype => 'int8', amprocnum => '3', amproc => 'brin_minmax_multi_consistent' }, { amprocfamily => 'brin/integer_minmax_multi_ops', amproclefttype => 'int8', - amprocrighttype => 'int8', amprocnum => '4', amproc => 'brin_minmax_multi_union' }, + amprocrighttype => 'int8', amprocnum => '4', + amproc => 'brin_minmax_multi_union' }, { amprocfamily => 'brin/integer_minmax_multi_ops', amproclefttype => 'int8', amprocrighttype => 'int8', amprocnum => '5', amproc => 'brin_minmax_multi_options' }, { amprocfamily => 'brin/integer_minmax_multi_ops', amproclefttype => 'int8', - amprocrighttype => 'int8', amprocnum => '11', amproc => 'brin_minmax_multi_distance_int8' }, + amprocrighttype => 'int8', amprocnum => '11', + amproc => 'brin_minmax_multi_distance_int8' }, # bloom integer: int2, int4, int8 { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int8', - amprocrighttype => 'int8', amprocnum => '1', - amproc => 'brin_bloom_opcinfo' }, + amprocrighttype => 'int8', amprocnum => '1', amproc => 'brin_bloom_opcinfo' }, { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int8', amprocrighttype => 'int8', amprocnum => '2', amproc => 'brin_bloom_add_value' }, @@ -987,14 +988,12 @@ { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int8', amprocrighttype => 'int8', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int8', - amprocrighttype => 'int8', amprocnum => '5', - amproc => 'brin_bloom_options' }, + amprocrighttype => 'int8', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int8', amprocrighttype => 'int8', amprocnum => '11', amproc => 'hashint8' }, { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int2', - amprocrighttype => 'int2', amprocnum => '1', - amproc => 'brin_bloom_opcinfo' }, + amprocrighttype => 'int2', amprocnum => '1', amproc => 'brin_bloom_opcinfo' }, { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int2', amprocrighttype => 'int2', amprocnum => '2', amproc => 'brin_bloom_add_value' }, @@ -1004,14 +1003,12 @@ { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int2', amprocrighttype => 'int2', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int2', - amprocrighttype => 'int2', amprocnum => '5', - amproc => 'brin_bloom_options' }, + amprocrighttype => 'int2', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int2', amprocrighttype => 'int2', amprocnum => '11', amproc => 'hashint2' }, { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int4', - amprocrighttype => 'int4', amprocnum => '1', - amproc => 'brin_bloom_opcinfo' }, + amprocrighttype => 'int4', amprocnum => '1', amproc => 'brin_bloom_opcinfo' }, { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int4', amprocrighttype => 'int4', amprocnum => '2', amproc => 'brin_bloom_add_value' }, @@ -1021,8 +1018,7 @@ { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int4', amprocrighttype => 'int4', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int4', - amprocrighttype => 'int4', amprocnum => '5', - amproc => 'brin_bloom_options' }, + amprocrighttype => 'int4', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/integer_bloom_ops', amproclefttype => 'int4', amprocrighttype => 'int4', amprocnum => '11', amproc => 'hashint4' }, @@ -1041,8 +1037,7 @@ # bloom text { amprocfamily => 'brin/text_bloom_ops', amproclefttype => 'text', - amprocrighttype => 'text', amprocnum => '1', - amproc => 'brin_bloom_opcinfo' }, + amprocrighttype => 'text', amprocnum => '1', amproc => 'brin_bloom_opcinfo' }, { amprocfamily => 'brin/text_bloom_ops', amproclefttype => 'text', amprocrighttype => 'text', amprocnum => '2', amproc => 'brin_bloom_add_value' }, @@ -1052,8 +1047,7 @@ { amprocfamily => 'brin/text_bloom_ops', amproclefttype => 'text', amprocrighttype => 'text', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/text_bloom_ops', amproclefttype => 'text', - amprocrighttype => 'text', amprocnum => '5', - amproc => 'brin_bloom_options' }, + amprocrighttype => 'text', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/text_bloom_ops', amproclefttype => 'text', amprocrighttype => 'text', amprocnum => '11', amproc => 'hashtext' }, @@ -1071,7 +1065,8 @@ # minmax multi oid { amprocfamily => 'brin/oid_minmax_multi_ops', amproclefttype => 'oid', - amprocrighttype => 'oid', amprocnum => '1', amproc => 'brin_minmax_multi_opcinfo' }, + amprocrighttype => 'oid', amprocnum => '1', + amproc => 'brin_minmax_multi_opcinfo' }, { amprocfamily => 'brin/oid_minmax_multi_ops', amproclefttype => 'oid', amprocrighttype => 'oid', amprocnum => '2', amproc => 'brin_minmax_multi_add_value' }, @@ -1079,12 +1074,14 @@ amprocrighttype => 'oid', amprocnum => '3', amproc => 'brin_minmax_multi_consistent' }, { amprocfamily => 'brin/oid_minmax_multi_ops', amproclefttype => 'oid', - amprocrighttype => 'oid', amprocnum => '4', amproc => 'brin_minmax_multi_union' }, + amprocrighttype => 'oid', amprocnum => '4', + amproc => 'brin_minmax_multi_union' }, { amprocfamily => 'brin/oid_minmax_multi_ops', amproclefttype => 'oid', amprocrighttype => 'oid', amprocnum => '5', amproc => 'brin_minmax_multi_options' }, { amprocfamily => 'brin/oid_minmax_multi_ops', amproclefttype => 'oid', - amprocrighttype => 'oid', amprocnum => '11', amproc => 'brin_minmax_multi_distance_int4' }, + amprocrighttype => 'oid', amprocnum => '11', + amproc => 'brin_minmax_multi_distance_int4' }, # bloom oid { amprocfamily => 'brin/oid_bloom_ops', amproclefttype => 'oid', @@ -1098,8 +1095,7 @@ { amprocfamily => 'brin/oid_bloom_ops', amproclefttype => 'oid', amprocrighttype => 'oid', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/oid_bloom_ops', amproclefttype => 'oid', - amprocrighttype => 'oid', amprocnum => '5', - amproc => 'brin_bloom_options' }, + amprocrighttype => 'oid', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/oid_bloom_ops', amproclefttype => 'oid', amprocrighttype => 'oid', amprocnum => '11', amproc => 'hashoid' }, @@ -1127,14 +1123,14 @@ { amprocfamily => 'brin/tid_bloom_ops', amproclefttype => 'tid', amprocrighttype => 'tid', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/tid_bloom_ops', amproclefttype => 'tid', - amprocrighttype => 'tid', amprocnum => '5', - amproc => 'brin_bloom_options' }, + amprocrighttype => 'tid', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/tid_bloom_ops', amproclefttype => 'tid', amprocrighttype => 'tid', amprocnum => '11', amproc => 'hashtid' }, # minmax multi tid { amprocfamily => 'brin/tid_minmax_multi_ops', amproclefttype => 'tid', - amprocrighttype => 'tid', amprocnum => '1', amproc => 'brin_minmax_multi_opcinfo' }, + amprocrighttype => 'tid', amprocnum => '1', + amproc => 'brin_minmax_multi_opcinfo' }, { amprocfamily => 'brin/tid_minmax_multi_ops', amproclefttype => 'tid', amprocrighttype => 'tid', amprocnum => '2', amproc => 'brin_minmax_multi_add_value' }, @@ -1142,12 +1138,14 @@ amprocrighttype => 'tid', amprocnum => '3', amproc => 'brin_minmax_multi_consistent' }, { amprocfamily => 'brin/tid_minmax_multi_ops', amproclefttype => 'tid', - amprocrighttype => 'tid', amprocnum => '4', amproc => 'brin_minmax_multi_union' }, + amprocrighttype => 'tid', amprocnum => '4', + amproc => 'brin_minmax_multi_union' }, { amprocfamily => 'brin/tid_minmax_multi_ops', amproclefttype => 'tid', amprocrighttype => 'tid', amprocnum => '5', amproc => 'brin_minmax_multi_options' }, { amprocfamily => 'brin/tid_minmax_multi_ops', amproclefttype => 'tid', - amprocrighttype => 'tid', amprocnum => '11', amproc => 'brin_minmax_multi_distance_tid' }, + amprocrighttype => 'tid', amprocnum => '11', + amproc => 'brin_minmax_multi_distance_tid' }, # minmax float { amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float4', @@ -1226,14 +1224,12 @@ amprocrighttype => 'float4', amprocnum => '3', amproc => 'brin_bloom_consistent' }, { amprocfamily => 'brin/float_bloom_ops', amproclefttype => 'float4', - amprocrighttype => 'float4', amprocnum => '4', - amproc => 'brin_bloom_union' }, + amprocrighttype => 'float4', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/float_bloom_ops', amproclefttype => 'float4', amprocrighttype => 'float4', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/float_bloom_ops', amproclefttype => 'float4', - amprocrighttype => 'float4', amprocnum => '11', - amproc => 'hashfloat4' }, + amprocrighttype => 'float4', amprocnum => '11', amproc => 'hashfloat4' }, { amprocfamily => 'brin/float_bloom_ops', amproclefttype => 'float8', amprocrighttype => 'float8', amprocnum => '1', @@ -1245,14 +1241,12 @@ amprocrighttype => 'float8', amprocnum => '3', amproc => 'brin_bloom_consistent' }, { amprocfamily => 'brin/float_bloom_ops', amproclefttype => 'float8', - amprocrighttype => 'float8', amprocnum => '4', - amproc => 'brin_bloom_union' }, + amprocrighttype => 'float8', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/float_bloom_ops', amproclefttype => 'float8', amprocrighttype => 'float8', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/float_bloom_ops', amproclefttype => 'float8', - amprocrighttype => 'float8', amprocnum => '11', - amproc => 'hashfloat8' }, + amprocrighttype => 'float8', amprocnum => '11', amproc => 'hashfloat8' }, # minmax macaddr { amprocfamily => 'brin/macaddr_minmax_ops', amproclefttype => 'macaddr', @@ -1305,8 +1299,7 @@ amprocrighttype => 'macaddr', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/macaddr_bloom_ops', amproclefttype => 'macaddr', - amprocrighttype => 'macaddr', amprocnum => '11', - amproc => 'hashmacaddr' }, + amprocrighttype => 'macaddr', amprocnum => '11', amproc => 'hashmacaddr' }, # minmax macaddr8 { amprocfamily => 'brin/macaddr8_minmax_ops', amproclefttype => 'macaddr8', @@ -1323,24 +1316,24 @@ amproc => 'brin_minmax_union' }, # minmax multi macaddr8 -{ amprocfamily => 'brin/macaddr8_minmax_multi_ops', amproclefttype => 'macaddr8', - amprocrighttype => 'macaddr8', amprocnum => '1', +{ amprocfamily => 'brin/macaddr8_minmax_multi_ops', + amproclefttype => 'macaddr8', amprocrighttype => 'macaddr8', amprocnum => '1', amproc => 'brin_minmax_multi_opcinfo' }, -{ amprocfamily => 'brin/macaddr8_minmax_multi_ops', amproclefttype => 'macaddr8', - amprocrighttype => 'macaddr8', amprocnum => '2', +{ amprocfamily => 'brin/macaddr8_minmax_multi_ops', + amproclefttype => 'macaddr8', amprocrighttype => 'macaddr8', amprocnum => '2', amproc => 'brin_minmax_multi_add_value' }, -{ amprocfamily => 'brin/macaddr8_minmax_multi_ops', amproclefttype => 'macaddr8', - amprocrighttype => 'macaddr8', amprocnum => '3', +{ amprocfamily => 'brin/macaddr8_minmax_multi_ops', + amproclefttype => 'macaddr8', amprocrighttype => 'macaddr8', amprocnum => '3', amproc => 'brin_minmax_multi_consistent' }, -{ amprocfamily => 'brin/macaddr8_minmax_multi_ops', amproclefttype => 'macaddr8', - amprocrighttype => 'macaddr8', amprocnum => '4', +{ amprocfamily => 'brin/macaddr8_minmax_multi_ops', + amproclefttype => 'macaddr8', amprocrighttype => 'macaddr8', amprocnum => '4', amproc => 'brin_minmax_multi_union' }, -{ amprocfamily => 'brin/macaddr8_minmax_multi_ops', amproclefttype => 'macaddr8', - amprocrighttype => 'macaddr8', amprocnum => '5', +{ amprocfamily => 'brin/macaddr8_minmax_multi_ops', + amproclefttype => 'macaddr8', amprocrighttype => 'macaddr8', amprocnum => '5', amproc => 'brin_minmax_multi_options' }, -{ amprocfamily => 'brin/macaddr8_minmax_multi_ops', amproclefttype => 'macaddr8', - amprocrighttype => 'macaddr8', amprocnum => '11', - amproc => 'brin_minmax_multi_distance_macaddr8' }, +{ amprocfamily => 'brin/macaddr8_minmax_multi_ops', + amproclefttype => 'macaddr8', amprocrighttype => 'macaddr8', + amprocnum => '11', amproc => 'brin_minmax_multi_distance_macaddr8' }, # bloom macaddr8 { amprocfamily => 'brin/macaddr8_bloom_ops', amproclefttype => 'macaddr8', @@ -1359,8 +1352,7 @@ amprocrighttype => 'macaddr8', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/macaddr8_bloom_ops', amproclefttype => 'macaddr8', - amprocrighttype => 'macaddr8', amprocnum => '11', - amproc => 'hashmacaddr8' }, + amprocrighttype => 'macaddr8', amprocnum => '11', amproc => 'hashmacaddr8' }, # minmax inet { amprocfamily => 'brin/network_minmax_ops', amproclefttype => 'inet', @@ -1397,8 +1389,7 @@ # bloom inet { amprocfamily => 'brin/network_bloom_ops', amproclefttype => 'inet', - amprocrighttype => 'inet', amprocnum => '1', - amproc => 'brin_bloom_opcinfo' }, + amprocrighttype => 'inet', amprocnum => '1', amproc => 'brin_bloom_opcinfo' }, { amprocfamily => 'brin/network_bloom_ops', amproclefttype => 'inet', amprocrighttype => 'inet', amprocnum => '2', amproc => 'brin_bloom_add_value' }, @@ -1408,8 +1399,7 @@ { amprocfamily => 'brin/network_bloom_ops', amproclefttype => 'inet', amprocrighttype => 'inet', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/network_bloom_ops', amproclefttype => 'inet', - amprocrighttype => 'inet', amprocnum => '5', - amproc => 'brin_bloom_options' }, + amprocrighttype => 'inet', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/network_bloom_ops', amproclefttype => 'inet', amprocrighttype => 'inet', amprocnum => '11', amproc => 'hashinet' }, @@ -1458,14 +1448,12 @@ amprocrighttype => 'bpchar', amprocnum => '3', amproc => 'brin_bloom_consistent' }, { amprocfamily => 'brin/bpchar_bloom_ops', amproclefttype => 'bpchar', - amprocrighttype => 'bpchar', amprocnum => '4', - amproc => 'brin_bloom_union' }, + amprocrighttype => 'bpchar', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/bpchar_bloom_ops', amproclefttype => 'bpchar', amprocrighttype => 'bpchar', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/bpchar_bloom_ops', amproclefttype => 'bpchar', - amprocrighttype => 'bpchar', amprocnum => '11', - amproc => 'hashbpchar' }, + amprocrighttype => 'bpchar', amprocnum => '11', amproc => 'hashbpchar' }, # minmax time without time zone { amprocfamily => 'brin/time_minmax_ops', amproclefttype => 'time', @@ -1491,7 +1479,8 @@ amprocrighttype => 'time', amprocnum => '3', amproc => 'brin_minmax_multi_consistent' }, { amprocfamily => 'brin/time_minmax_multi_ops', amproclefttype => 'time', - amprocrighttype => 'time', amprocnum => '4', amproc => 'brin_minmax_multi_union' }, + amprocrighttype => 'time', amprocnum => '4', + amproc => 'brin_minmax_multi_union' }, { amprocfamily => 'brin/time_minmax_multi_ops', amproclefttype => 'time', amprocrighttype => 'time', amprocnum => '5', amproc => 'brin_minmax_multi_options' }, @@ -1501,8 +1490,7 @@ # bloom time without time zone { amprocfamily => 'brin/time_bloom_ops', amproclefttype => 'time', - amprocrighttype => 'time', amprocnum => '1', - amproc => 'brin_bloom_opcinfo' }, + amprocrighttype => 'time', amprocnum => '1', amproc => 'brin_bloom_opcinfo' }, { amprocfamily => 'brin/time_bloom_ops', amproclefttype => 'time', amprocrighttype => 'time', amprocnum => '2', amproc => 'brin_bloom_add_value' }, @@ -1512,8 +1500,7 @@ { amprocfamily => 'brin/time_bloom_ops', amproclefttype => 'time', amprocrighttype => 'time', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/time_bloom_ops', amproclefttype => 'time', - amprocrighttype => 'time', amprocnum => '5', - amproc => 'brin_bloom_options' }, + amprocrighttype => 'time', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/time_bloom_ops', amproclefttype => 'time', amprocrighttype => 'time', amprocnum => '11', amproc => 'time_hash' }, @@ -1557,43 +1544,43 @@ amprocrighttype => 'date', amprocnum => '4', amproc => 'brin_minmax_union' }, # minmax multi datetime (date, timestamp, timestamptz) -{ amprocfamily => 'brin/datetime_minmax_multi_ops', amproclefttype => 'timestamp', - amprocrighttype => 'timestamp', amprocnum => '1', - amproc => 'brin_minmax_multi_opcinfo' }, -{ amprocfamily => 'brin/datetime_minmax_multi_ops', amproclefttype => 'timestamp', - amprocrighttype => 'timestamp', amprocnum => '2', - amproc => 'brin_minmax_multi_add_value' }, -{ amprocfamily => 'brin/datetime_minmax_multi_ops', amproclefttype => 'timestamp', - amprocrighttype => 'timestamp', amprocnum => '3', - amproc => 'brin_minmax_multi_consistent' }, -{ amprocfamily => 'brin/datetime_minmax_multi_ops', amproclefttype => 'timestamp', - amprocrighttype => 'timestamp', amprocnum => '4', - amproc => 'brin_minmax_multi_union' }, -{ amprocfamily => 'brin/datetime_minmax_multi_ops', amproclefttype => 'timestamp', - amprocrighttype => 'timestamp', amprocnum => '5', - amproc => 'brin_minmax_multi_options' }, -{ amprocfamily => 'brin/datetime_minmax_multi_ops', amproclefttype => 'timestamp', - amprocrighttype => 'timestamp', amprocnum => '11', - amproc => 'brin_minmax_multi_distance_timestamp' }, - -{ amprocfamily => 'brin/datetime_minmax_multi_ops', amproclefttype => 'timestamptz', - amprocrighttype => 'timestamptz', amprocnum => '1', - amproc => 'brin_minmax_multi_opcinfo' }, -{ amprocfamily => 'brin/datetime_minmax_multi_ops', amproclefttype => 'timestamptz', - amprocrighttype => 'timestamptz', amprocnum => '2', - amproc => 'brin_minmax_multi_add_value' }, -{ amprocfamily => 'brin/datetime_minmax_multi_ops', amproclefttype => 'timestamptz', - amprocrighttype => 'timestamptz', amprocnum => '3', - amproc => 'brin_minmax_multi_consistent' }, -{ amprocfamily => 'brin/datetime_minmax_multi_ops', amproclefttype => 'timestamptz', - amprocrighttype => 'timestamptz', amprocnum => '4', - amproc => 'brin_minmax_multi_union' }, -{ amprocfamily => 'brin/datetime_minmax_multi_ops', amproclefttype => 'timestamptz', - amprocrighttype => 'timestamptz', amprocnum => '5', - amproc => 'brin_minmax_multi_options' }, -{ amprocfamily => 'brin/datetime_minmax_multi_ops', amproclefttype => 'timestamptz', - amprocrighttype => 'timestamptz', amprocnum => '11', - amproc => 'brin_minmax_multi_distance_timestamp' }, +{ amprocfamily => 'brin/datetime_minmax_multi_ops', + amproclefttype => 'timestamp', amprocrighttype => 'timestamp', + amprocnum => '1', amproc => 'brin_minmax_multi_opcinfo' }, +{ amprocfamily => 'brin/datetime_minmax_multi_ops', + amproclefttype => 'timestamp', amprocrighttype => 'timestamp', + amprocnum => '2', amproc => 'brin_minmax_multi_add_value' }, +{ amprocfamily => 'brin/datetime_minmax_multi_ops', + amproclefttype => 'timestamp', amprocrighttype => 'timestamp', + amprocnum => '3', amproc => 'brin_minmax_multi_consistent' }, +{ amprocfamily => 'brin/datetime_minmax_multi_ops', + amproclefttype => 'timestamp', amprocrighttype => 'timestamp', + amprocnum => '4', amproc => 'brin_minmax_multi_union' }, +{ amprocfamily => 'brin/datetime_minmax_multi_ops', + amproclefttype => 'timestamp', amprocrighttype => 'timestamp', + amprocnum => '5', amproc => 'brin_minmax_multi_options' }, +{ amprocfamily => 'brin/datetime_minmax_multi_ops', + amproclefttype => 'timestamp', amprocrighttype => 'timestamp', + amprocnum => '11', amproc => 'brin_minmax_multi_distance_timestamp' }, + +{ amprocfamily => 'brin/datetime_minmax_multi_ops', + amproclefttype => 'timestamptz', amprocrighttype => 'timestamptz', + amprocnum => '1', amproc => 'brin_minmax_multi_opcinfo' }, +{ amprocfamily => 'brin/datetime_minmax_multi_ops', + amproclefttype => 'timestamptz', amprocrighttype => 'timestamptz', + amprocnum => '2', amproc => 'brin_minmax_multi_add_value' }, +{ amprocfamily => 'brin/datetime_minmax_multi_ops', + amproclefttype => 'timestamptz', amprocrighttype => 'timestamptz', + amprocnum => '3', amproc => 'brin_minmax_multi_consistent' }, +{ amprocfamily => 'brin/datetime_minmax_multi_ops', + amproclefttype => 'timestamptz', amprocrighttype => 'timestamptz', + amprocnum => '4', amproc => 'brin_minmax_multi_union' }, +{ amprocfamily => 'brin/datetime_minmax_multi_ops', + amproclefttype => 'timestamptz', amprocrighttype => 'timestamptz', + amprocnum => '5', amproc => 'brin_minmax_multi_options' }, +{ amprocfamily => 'brin/datetime_minmax_multi_ops', + amproclefttype => 'timestamptz', amprocrighttype => 'timestamptz', + amprocnum => '11', amproc => 'brin_minmax_multi_distance_timestamp' }, { amprocfamily => 'brin/datetime_minmax_multi_ops', amproclefttype => 'date', amprocrighttype => 'date', amprocnum => '1', @@ -1654,8 +1641,7 @@ amproc => 'timestamp_hash' }, { amprocfamily => 'brin/datetime_bloom_ops', amproclefttype => 'date', - amprocrighttype => 'date', amprocnum => '1', - amproc => 'brin_bloom_opcinfo' }, + amprocrighttype => 'date', amprocnum => '1', amproc => 'brin_bloom_opcinfo' }, { amprocfamily => 'brin/datetime_bloom_ops', amproclefttype => 'date', amprocrighttype => 'date', amprocnum => '2', amproc => 'brin_bloom_add_value' }, @@ -1665,8 +1651,7 @@ { amprocfamily => 'brin/datetime_bloom_ops', amproclefttype => 'date', amprocrighttype => 'date', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/datetime_bloom_ops', amproclefttype => 'date', - amprocrighttype => 'date', amprocnum => '5', - amproc => 'brin_bloom_options' }, + amprocrighttype => 'date', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/datetime_bloom_ops', amproclefttype => 'date', amprocrighttype => 'date', amprocnum => '11', amproc => 'hashint4' }, @@ -1685,24 +1670,24 @@ amproc => 'brin_minmax_union' }, # minmax multi interval -{ amprocfamily => 'brin/interval_minmax_multi_ops', amproclefttype => 'interval', - amprocrighttype => 'interval', amprocnum => '1', +{ amprocfamily => 'brin/interval_minmax_multi_ops', + amproclefttype => 'interval', amprocrighttype => 'interval', amprocnum => '1', amproc => 'brin_minmax_multi_opcinfo' }, -{ amprocfamily => 'brin/interval_minmax_multi_ops', amproclefttype => 'interval', - amprocrighttype => 'interval', amprocnum => '2', +{ amprocfamily => 'brin/interval_minmax_multi_ops', + amproclefttype => 'interval', amprocrighttype => 'interval', amprocnum => '2', amproc => 'brin_minmax_multi_add_value' }, -{ amprocfamily => 'brin/interval_minmax_multi_ops', amproclefttype => 'interval', - amprocrighttype => 'interval', amprocnum => '3', +{ amprocfamily => 'brin/interval_minmax_multi_ops', + amproclefttype => 'interval', amprocrighttype => 'interval', amprocnum => '3', amproc => 'brin_minmax_multi_consistent' }, -{ amprocfamily => 'brin/interval_minmax_multi_ops', amproclefttype => 'interval', - amprocrighttype => 'interval', amprocnum => '4', +{ amprocfamily => 'brin/interval_minmax_multi_ops', + amproclefttype => 'interval', amprocrighttype => 'interval', amprocnum => '4', amproc => 'brin_minmax_multi_union' }, -{ amprocfamily => 'brin/interval_minmax_multi_ops', amproclefttype => 'interval', - amprocrighttype => 'interval', amprocnum => '5', +{ amprocfamily => 'brin/interval_minmax_multi_ops', + amproclefttype => 'interval', amprocrighttype => 'interval', amprocnum => '5', amproc => 'brin_minmax_multi_options' }, -{ amprocfamily => 'brin/interval_minmax_multi_ops', amproclefttype => 'interval', - amprocrighttype => 'interval', amprocnum => '11', - amproc => 'brin_minmax_multi_distance_interval' }, +{ amprocfamily => 'brin/interval_minmax_multi_ops', + amproclefttype => 'interval', amprocrighttype => 'interval', + amprocnum => '11', amproc => 'brin_minmax_multi_distance_interval' }, # bloom interval { amprocfamily => 'brin/interval_bloom_ops', amproclefttype => 'interval', @@ -1721,8 +1706,7 @@ amprocrighttype => 'interval', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/interval_bloom_ops', amproclefttype => 'interval', - amprocrighttype => 'interval', amprocnum => '11', - amproc => 'interval_hash' }, + amprocrighttype => 'interval', amprocnum => '11', amproc => 'interval_hash' }, # minmax time with time zone { amprocfamily => 'brin/timetz_minmax_ops', amproclefttype => 'timetz', @@ -1769,14 +1753,12 @@ amprocrighttype => 'timetz', amprocnum => '3', amproc => 'brin_bloom_consistent' }, { amprocfamily => 'brin/timetz_bloom_ops', amproclefttype => 'timetz', - amprocrighttype => 'timetz', amprocnum => '4', - amproc => 'brin_bloom_union' }, + amprocrighttype => 'timetz', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/timetz_bloom_ops', amproclefttype => 'timetz', amprocrighttype => 'timetz', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/timetz_bloom_ops', amproclefttype => 'timetz', - amprocrighttype => 'timetz', amprocnum => '11', - amproc => 'timetz_hash' }, + amprocrighttype => 'timetz', amprocnum => '11', amproc => 'timetz_hash' }, # minmax bit { amprocfamily => 'brin/bit_minmax_ops', amproclefttype => 'bit', @@ -1855,8 +1837,7 @@ amprocrighttype => 'numeric', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/numeric_bloom_ops', amproclefttype => 'numeric', - amprocrighttype => 'numeric', amprocnum => '11', - amproc => 'hash_numeric' }, + amprocrighttype => 'numeric', amprocnum => '11', amproc => 'hash_numeric' }, # minmax uuid { amprocfamily => 'brin/uuid_minmax_ops', amproclefttype => 'uuid', @@ -1893,8 +1874,7 @@ # bloom uuid { amprocfamily => 'brin/uuid_bloom_ops', amproclefttype => 'uuid', - amprocrighttype => 'uuid', amprocnum => '1', - amproc => 'brin_bloom_opcinfo' }, + amprocrighttype => 'uuid', amprocnum => '1', amproc => 'brin_bloom_opcinfo' }, { amprocfamily => 'brin/uuid_bloom_ops', amproclefttype => 'uuid', amprocrighttype => 'uuid', amprocnum => '2', amproc => 'brin_bloom_add_value' }, @@ -1904,8 +1884,7 @@ { amprocfamily => 'brin/uuid_bloom_ops', amproclefttype => 'uuid', amprocrighttype => 'uuid', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/uuid_bloom_ops', amproclefttype => 'uuid', - amprocrighttype => 'uuid', amprocnum => '5', - amproc => 'brin_bloom_options' }, + amprocrighttype => 'uuid', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/uuid_bloom_ops', amproclefttype => 'uuid', amprocrighttype => 'uuid', amprocnum => '11', amproc => 'uuid_hash' }, @@ -1977,14 +1956,12 @@ amprocrighttype => 'pg_lsn', amprocnum => '3', amproc => 'brin_bloom_consistent' }, { amprocfamily => 'brin/pg_lsn_bloom_ops', amproclefttype => 'pg_lsn', - amprocrighttype => 'pg_lsn', amprocnum => '4', - amproc => 'brin_bloom_union' }, + amprocrighttype => 'pg_lsn', amprocnum => '4', amproc => 'brin_bloom_union' }, { amprocfamily => 'brin/pg_lsn_bloom_ops', amproclefttype => 'pg_lsn', amprocrighttype => 'pg_lsn', amprocnum => '5', amproc => 'brin_bloom_options' }, { amprocfamily => 'brin/pg_lsn_bloom_ops', amproclefttype => 'pg_lsn', - amprocrighttype => 'pg_lsn', amprocnum => '11', - amproc => 'pg_lsn_hash' }, + amprocrighttype => 'pg_lsn', amprocnum => '11', amproc => 'pg_lsn_hash' }, # inclusion box { amprocfamily => 'brin/box_inclusion_ops', amproclefttype => 'box', diff --git a/src/include/catalog/pg_collation.h b/src/include/catalog/pg_collation.h index 52bfd2cb7bf4b..6400702b3d214 100644 --- a/src/include/catalog/pg_collation.h +++ b/src/include/catalog/pg_collation.h @@ -42,9 +42,9 @@ CATALOG(pg_collation,3456,CollationRelationId) NameData collcollate; /* LC_COLLATE setting */ NameData collctype; /* LC_CTYPE setting */ #ifdef CATALOG_VARLEN /* variable-length fields start here */ - text collversion BKI_DEFAULT(_null_); /* provider-dependent */ - /* version of */ - /* collation data */ + text collversion BKI_DEFAULT(_null_); /* provider-dependent + * version of collation + * data */ #endif } FormData_pg_collation; diff --git a/src/include/catalog/pg_opclass.dat b/src/include/catalog/pg_opclass.dat index da25befefef39..484727a2fcd27 100644 --- a/src/include/catalog/pg_opclass.dat +++ b/src/include/catalog/pg_opclass.dat @@ -267,114 +267,114 @@ opcfamily => 'brin/bytea_minmax_ops', opcintype => 'bytea', opckeytype => 'bytea' }, { opcmethod => 'brin', opcname => 'bytea_bloom_ops', - opcfamily => 'brin/bytea_bloom_ops', opcintype => 'bytea', - opckeytype => 'bytea', opcdefault => 'f' }, + opcfamily => 'brin/bytea_bloom_ops', opcintype => 'bytea', opcdefault => 'f', + opckeytype => 'bytea' }, { opcmethod => 'brin', opcname => 'char_minmax_ops', opcfamily => 'brin/char_minmax_ops', opcintype => 'char', opckeytype => 'char' }, { opcmethod => 'brin', opcname => 'char_bloom_ops', - opcfamily => 'brin/char_bloom_ops', opcintype => 'char', - opckeytype => 'char', opcdefault => 'f' }, + opcfamily => 'brin/char_bloom_ops', opcintype => 'char', opcdefault => 'f', + opckeytype => 'char' }, { opcmethod => 'brin', opcname => 'name_minmax_ops', opcfamily => 'brin/name_minmax_ops', opcintype => 'name', opckeytype => 'name' }, { opcmethod => 'brin', opcname => 'name_bloom_ops', - opcfamily => 'brin/name_bloom_ops', opcintype => 'name', - opckeytype => 'name', opcdefault => 'f' }, + opcfamily => 'brin/name_bloom_ops', opcintype => 'name', opcdefault => 'f', + opckeytype => 'name' }, { opcmethod => 'brin', opcname => 'int8_minmax_ops', opcfamily => 'brin/integer_minmax_ops', opcintype => 'int8', opckeytype => 'int8' }, { opcmethod => 'brin', opcname => 'int8_minmax_multi_ops', opcfamily => 'brin/integer_minmax_multi_ops', opcintype => 'int8', - opckeytype => 'int8', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'int8' }, { opcmethod => 'brin', opcname => 'int8_bloom_ops', - opcfamily => 'brin/integer_bloom_ops', opcintype => 'int8', - opckeytype => 'int8', opcdefault => 'f' }, + opcfamily => 'brin/integer_bloom_ops', opcintype => 'int8', opcdefault => 'f', + opckeytype => 'int8' }, { opcmethod => 'brin', opcname => 'int2_minmax_ops', opcfamily => 'brin/integer_minmax_ops', opcintype => 'int2', opckeytype => 'int2' }, { opcmethod => 'brin', opcname => 'int2_minmax_multi_ops', opcfamily => 'brin/integer_minmax_multi_ops', opcintype => 'int2', - opckeytype => 'int2', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'int2' }, { opcmethod => 'brin', opcname => 'int2_bloom_ops', - opcfamily => 'brin/integer_bloom_ops', opcintype => 'int2', - opckeytype => 'int2', opcdefault => 'f' }, + opcfamily => 'brin/integer_bloom_ops', opcintype => 'int2', opcdefault => 'f', + opckeytype => 'int2' }, { opcmethod => 'brin', opcname => 'int4_minmax_ops', opcfamily => 'brin/integer_minmax_ops', opcintype => 'int4', opckeytype => 'int4' }, { opcmethod => 'brin', opcname => 'int4_minmax_multi_ops', opcfamily => 'brin/integer_minmax_multi_ops', opcintype => 'int4', - opckeytype => 'int4', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'int4' }, { opcmethod => 'brin', opcname => 'int4_bloom_ops', - opcfamily => 'brin/integer_bloom_ops', opcintype => 'int4', - opckeytype => 'int4', opcdefault => 'f' }, + opcfamily => 'brin/integer_bloom_ops', opcintype => 'int4', opcdefault => 'f', + opckeytype => 'int4' }, { opcmethod => 'brin', opcname => 'text_minmax_ops', opcfamily => 'brin/text_minmax_ops', opcintype => 'text', opckeytype => 'text' }, { opcmethod => 'brin', opcname => 'text_bloom_ops', - opcfamily => 'brin/text_bloom_ops', opcintype => 'text', - opckeytype => 'text', opcdefault => 'f' }, + opcfamily => 'brin/text_bloom_ops', opcintype => 'text', opcdefault => 'f', + opckeytype => 'text' }, { opcmethod => 'brin', opcname => 'oid_minmax_ops', opcfamily => 'brin/oid_minmax_ops', opcintype => 'oid', opckeytype => 'oid' }, { opcmethod => 'brin', opcname => 'oid_minmax_multi_ops', opcfamily => 'brin/oid_minmax_multi_ops', opcintype => 'oid', - opckeytype => 'oid', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'oid' }, { opcmethod => 'brin', opcname => 'oid_bloom_ops', - opcfamily => 'brin/oid_bloom_ops', opcintype => 'oid', - opckeytype => 'oid', opcdefault => 'f' }, + opcfamily => 'brin/oid_bloom_ops', opcintype => 'oid', opcdefault => 'f', + opckeytype => 'oid' }, { opcmethod => 'brin', opcname => 'tid_minmax_ops', opcfamily => 'brin/tid_minmax_ops', opcintype => 'tid', opckeytype => 'tid' }, { opcmethod => 'brin', opcname => 'tid_bloom_ops', - opcfamily => 'brin/tid_bloom_ops', opcintype => 'tid', opckeytype => 'tid', - opcdefault => 'f'}, + opcfamily => 'brin/tid_bloom_ops', opcintype => 'tid', opcdefault => 'f', + opckeytype => 'tid' }, { opcmethod => 'brin', opcname => 'tid_minmax_multi_ops', opcfamily => 'brin/tid_minmax_multi_ops', opcintype => 'tid', - opckeytype => 'tid', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'tid' }, { opcmethod => 'brin', opcname => 'float4_minmax_ops', opcfamily => 'brin/float_minmax_ops', opcintype => 'float4', opckeytype => 'float4' }, { opcmethod => 'brin', opcname => 'float4_minmax_multi_ops', opcfamily => 'brin/float_minmax_multi_ops', opcintype => 'float4', - opckeytype => 'float4', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'float4' }, { opcmethod => 'brin', opcname => 'float4_bloom_ops', - opcfamily => 'brin/float_bloom_ops', opcintype => 'float4', - opckeytype => 'float4', opcdefault => 'f' }, + opcfamily => 'brin/float_bloom_ops', opcintype => 'float4', opcdefault => 'f', + opckeytype => 'float4' }, { opcmethod => 'brin', opcname => 'float8_minmax_ops', opcfamily => 'brin/float_minmax_ops', opcintype => 'float8', opckeytype => 'float8' }, { opcmethod => 'brin', opcname => 'float8_minmax_multi_ops', opcfamily => 'brin/float_minmax_multi_ops', opcintype => 'float8', - opckeytype => 'float8', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'float8' }, { opcmethod => 'brin', opcname => 'float8_bloom_ops', - opcfamily => 'brin/float_bloom_ops', opcintype => 'float8', - opckeytype => 'float8', opcdefault => 'f' }, + opcfamily => 'brin/float_bloom_ops', opcintype => 'float8', opcdefault => 'f', + opckeytype => 'float8' }, { opcmethod => 'brin', opcname => 'macaddr_minmax_ops', opcfamily => 'brin/macaddr_minmax_ops', opcintype => 'macaddr', opckeytype => 'macaddr' }, { opcmethod => 'brin', opcname => 'macaddr_minmax_multi_ops', opcfamily => 'brin/macaddr_minmax_multi_ops', opcintype => 'macaddr', - opckeytype => 'macaddr', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'macaddr' }, { opcmethod => 'brin', opcname => 'macaddr_bloom_ops', opcfamily => 'brin/macaddr_bloom_ops', opcintype => 'macaddr', - opckeytype => 'macaddr', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'macaddr' }, { opcmethod => 'brin', opcname => 'macaddr8_minmax_ops', opcfamily => 'brin/macaddr8_minmax_ops', opcintype => 'macaddr8', opckeytype => 'macaddr8' }, { opcmethod => 'brin', opcname => 'macaddr8_minmax_multi_ops', opcfamily => 'brin/macaddr8_minmax_multi_ops', opcintype => 'macaddr8', - opckeytype => 'macaddr8', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'macaddr8' }, { opcmethod => 'brin', opcname => 'macaddr8_bloom_ops', opcfamily => 'brin/macaddr8_bloom_ops', opcintype => 'macaddr8', - opckeytype => 'macaddr8', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'macaddr8' }, { opcmethod => 'brin', opcname => 'inet_minmax_ops', opcfamily => 'brin/network_minmax_ops', opcintype => 'inet', opcdefault => 'f', opckeytype => 'inet' }, { opcmethod => 'brin', opcname => 'inet_minmax_multi_ops', opcfamily => 'brin/network_minmax_multi_ops', opcintype => 'inet', - opcdefault => 'f', opckeytype => 'inet', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'inet' }, { opcmethod => 'brin', opcname => 'inet_bloom_ops', - opcfamily => 'brin/network_bloom_ops', opcintype => 'inet', - opcdefault => 'f', opckeytype => 'inet', opcdefault => 'f' }, + opcfamily => 'brin/network_bloom_ops', opcintype => 'inet', opcdefault => 'f', + opckeytype => 'inet' }, { opcmethod => 'brin', opcname => 'inet_inclusion_ops', opcfamily => 'brin/network_inclusion_ops', opcintype => 'inet', opckeytype => 'inet' }, @@ -383,61 +383,61 @@ opckeytype => 'bpchar' }, { opcmethod => 'brin', opcname => 'bpchar_bloom_ops', opcfamily => 'brin/bpchar_bloom_ops', opcintype => 'bpchar', - opckeytype => 'bpchar', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'bpchar' }, { opcmethod => 'brin', opcname => 'time_minmax_ops', opcfamily => 'brin/time_minmax_ops', opcintype => 'time', opckeytype => 'time' }, { opcmethod => 'brin', opcname => 'time_minmax_multi_ops', opcfamily => 'brin/time_minmax_multi_ops', opcintype => 'time', - opckeytype => 'time', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'time' }, { opcmethod => 'brin', opcname => 'time_bloom_ops', - opcfamily => 'brin/time_bloom_ops', opcintype => 'time', - opckeytype => 'time', opcdefault => 'f' }, + opcfamily => 'brin/time_bloom_ops', opcintype => 'time', opcdefault => 'f', + opckeytype => 'time' }, { opcmethod => 'brin', opcname => 'date_minmax_ops', opcfamily => 'brin/datetime_minmax_ops', opcintype => 'date', opckeytype => 'date' }, { opcmethod => 'brin', opcname => 'date_minmax_multi_ops', opcfamily => 'brin/datetime_minmax_multi_ops', opcintype => 'date', - opckeytype => 'date', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'date' }, { opcmethod => 'brin', opcname => 'date_bloom_ops', opcfamily => 'brin/datetime_bloom_ops', opcintype => 'date', - opckeytype => 'date', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'date' }, { opcmethod => 'brin', opcname => 'timestamp_minmax_ops', opcfamily => 'brin/datetime_minmax_ops', opcintype => 'timestamp', opckeytype => 'timestamp' }, { opcmethod => 'brin', opcname => 'timestamp_minmax_multi_ops', opcfamily => 'brin/datetime_minmax_multi_ops', opcintype => 'timestamp', - opckeytype => 'timestamp', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'timestamp' }, { opcmethod => 'brin', opcname => 'timestamp_bloom_ops', opcfamily => 'brin/datetime_bloom_ops', opcintype => 'timestamp', - opckeytype => 'timestamp', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'timestamp' }, { opcmethod => 'brin', opcname => 'timestamptz_minmax_ops', opcfamily => 'brin/datetime_minmax_ops', opcintype => 'timestamptz', opckeytype => 'timestamptz' }, { opcmethod => 'brin', opcname => 'timestamptz_minmax_multi_ops', opcfamily => 'brin/datetime_minmax_multi_ops', opcintype => 'timestamptz', - opckeytype => 'timestamptz', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'timestamptz' }, { opcmethod => 'brin', opcname => 'timestamptz_bloom_ops', opcfamily => 'brin/datetime_bloom_ops', opcintype => 'timestamptz', - opckeytype => 'timestamptz', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'timestamptz' }, { opcmethod => 'brin', opcname => 'interval_minmax_ops', opcfamily => 'brin/interval_minmax_ops', opcintype => 'interval', opckeytype => 'interval' }, { opcmethod => 'brin', opcname => 'interval_minmax_multi_ops', opcfamily => 'brin/interval_minmax_multi_ops', opcintype => 'interval', - opckeytype => 'interval', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'interval' }, { opcmethod => 'brin', opcname => 'interval_bloom_ops', opcfamily => 'brin/interval_bloom_ops', opcintype => 'interval', - opckeytype => 'interval', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'interval' }, { opcmethod => 'brin', opcname => 'timetz_minmax_ops', opcfamily => 'brin/timetz_minmax_ops', opcintype => 'timetz', opckeytype => 'timetz' }, { opcmethod => 'brin', opcname => 'timetz_minmax_multi_ops', opcfamily => 'brin/timetz_minmax_multi_ops', opcintype => 'timetz', - opckeytype => 'timetz', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'timetz' }, { opcmethod => 'brin', opcname => 'timetz_bloom_ops', opcfamily => 'brin/timetz_bloom_ops', opcintype => 'timetz', - opckeytype => 'timetz', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'timetz' }, { opcmethod => 'brin', opcname => 'bit_minmax_ops', opcfamily => 'brin/bit_minmax_ops', opcintype => 'bit', opckeytype => 'bit' }, { opcmethod => 'brin', opcname => 'varbit_minmax_ops', @@ -448,10 +448,10 @@ opckeytype => 'numeric' }, { opcmethod => 'brin', opcname => 'numeric_minmax_multi_ops', opcfamily => 'brin/numeric_minmax_multi_ops', opcintype => 'numeric', - opckeytype => 'numeric', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'numeric' }, { opcmethod => 'brin', opcname => 'numeric_bloom_ops', opcfamily => 'brin/numeric_bloom_ops', opcintype => 'numeric', - opckeytype => 'numeric', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'numeric' }, # no brin opclass for record, anyarray @@ -460,10 +460,10 @@ opckeytype => 'uuid' }, { opcmethod => 'brin', opcname => 'uuid_minmax_multi_ops', opcfamily => 'brin/uuid_minmax_multi_ops', opcintype => 'uuid', - opckeytype => 'uuid', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'uuid' }, { opcmethod => 'brin', opcname => 'uuid_bloom_ops', - opcfamily => 'brin/uuid_bloom_ops', opcintype => 'uuid', - opckeytype => 'uuid', opcdefault => 'f' }, + opcfamily => 'brin/uuid_bloom_ops', opcintype => 'uuid', opcdefault => 'f', + opckeytype => 'uuid' }, { opcmethod => 'brin', opcname => 'range_inclusion_ops', opcfamily => 'brin/range_inclusion_ops', opcintype => 'anyrange', opckeytype => 'anyrange' }, @@ -472,10 +472,10 @@ opckeytype => 'pg_lsn' }, { opcmethod => 'brin', opcname => 'pg_lsn_minmax_multi_ops', opcfamily => 'brin/pg_lsn_minmax_multi_ops', opcintype => 'pg_lsn', - opckeytype => 'pg_lsn', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'pg_lsn' }, { opcmethod => 'brin', opcname => 'pg_lsn_bloom_ops', opcfamily => 'brin/pg_lsn_bloom_ops', opcintype => 'pg_lsn', - opckeytype => 'pg_lsn', opcdefault => 'f' }, + opcdefault => 'f', opckeytype => 'pg_lsn' }, # no brin opclass for enum, tsvector, tsquery, jsonb diff --git a/src/include/catalog/pg_operator.dat b/src/include/catalog/pg_operator.dat index 85395a81eec04..ec1615cccca6e 100644 --- a/src/include/catalog/pg_operator.dat +++ b/src/include/catalog/pg_operator.dat @@ -241,11 +241,13 @@ oprname => '>', oprleft => 'tid', oprright => 'tid', oprresult => 'bool', oprcom => '<(tid,tid)', oprnegate => '<=(tid,tid)', oprcode => 'tidgt', oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, -{ oid => '2801', oid_symbol => 'TIDLessEqOperator', descr => 'less than or equal', +{ oid => '2801', oid_symbol => 'TIDLessEqOperator', + descr => 'less than or equal', oprname => '<=', oprleft => 'tid', oprright => 'tid', oprresult => 'bool', oprcom => '>=(tid,tid)', oprnegate => '>(tid,tid)', oprcode => 'tidle', oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, -{ oid => '2802', oid_symbol => 'TIDGreaterEqOperator', descr => 'greater than or equal', +{ oid => '2802', oid_symbol => 'TIDGreaterEqOperator', + descr => 'greater than or equal', oprname => '>=', oprleft => 'tid', oprright => 'tid', oprresult => 'bool', oprcom => '<=(tid,tid)', oprnegate => '<(tid,tid)', oprcode => 'tidge', oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 26c3fc0f6ba39..c3c38c748f80a 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -1448,7 +1448,7 @@ proargtypes => 'bytea bytea int4', prosrc => 'byteaoverlay_no_len' }, { oid => '8436', descr => 'number of set bits', proname => 'bit_count', prorettype => 'int8', proargtypes => 'bytea', - prosrc => 'bytea_bit_count'}, + prosrc => 'bytea_bit_count' }, { oid => '725', proname => 'dist_pl', prorettype => 'float8', proargtypes => 'point line', @@ -3731,7 +3731,8 @@ { oid => '8103', descr => 'list of catalog foreign key relationships', proname => 'pg_get_catalog_foreign_keys', procost => '10', prorows => '250', proretset => 't', provolatile => 's', prorettype => 'record', - proargtypes => '', proallargtypes => '{regclass,_text,regclass,_text,bool,bool}', + proargtypes => '', + proallargtypes => '{regclass,_text,regclass,_text,bool,bool}', proargmodes => '{o,o,o,o,o,o}', proargnames => '{fktable,fkcols,pktable,pkcols,is_array,is_opt}', prosrc => 'pg_get_catalog_foreign_keys' }, @@ -3905,7 +3906,7 @@ prosrc => 'bitsetbit' }, { oid => '8435', descr => 'number of set bits', proname => 'bit_count', prorettype => 'int8', proargtypes => 'bit', - prosrc => 'bit_bit_count'}, + prosrc => 'bit_bit_count' }, # for macaddr type support { oid => '436', descr => 'I/O', @@ -5309,8 +5310,8 @@ proargnames => '{pid,status,receive_start_lsn,receive_start_tli,written_lsn,flushed_lsn,received_tli,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time,slot_name,sender_host,sender_port,conninfo}', prosrc => 'pg_stat_get_wal_receiver' }, { oid => '8595', descr => 'statistics: information about replication slot', - proname => 'pg_stat_get_replication_slot', prorows => '1', - proisstrict => 'f', proretset => 't', provolatile => 's', proparallel => 'r', + proname => 'pg_stat_get_replication_slot', prorows => '1', proisstrict => 'f', + proretset => 't', provolatile => 's', proparallel => 'r', prorettype => 'record', proargtypes => 'text', proallargtypes => '{text,text,int8,int8,int8,int8,int8,int8,int8,int8,timestamptz}', proargmodes => '{i,o,o,o,o,o,o,o,o,o,o}', @@ -5838,15 +5839,14 @@ proname => 'date_trunc', prorettype => 'timestamp', proargtypes => 'text timestamp', prosrc => 'timestamp_trunc' }, -{ oid => '8990', - descr => 'bin timestamp into specified interval', +{ oid => '8990', descr => 'bin timestamp into specified interval', proname => 'date_bin', prorettype => 'timestamp', - proargtypes => 'interval timestamp timestamp', - prosrc => 'timestamp_bin' }, + proargtypes => 'interval timestamp timestamp', prosrc => 'timestamp_bin' }, { oid => '8993', descr => 'bin timestamp with time zone into specified interval', proname => 'date_bin', prorettype => 'timestamptz', - proargtypes => 'interval timestamptz timestamptz', prosrc => 'timestamptz_bin' }, + proargtypes => 'interval timestamptz timestamptz', + prosrc => 'timestamptz_bin' }, { oid => '2021', descr => 'extract field from timestamp', proname => 'date_part', prorettype => 'float8', @@ -6186,14 +6186,15 @@ { oid => '2171', descr => 'cancel a server process\' current query', proname => 'pg_cancel_backend', provolatile => 'v', prorettype => 'bool', proargtypes => 'int4', prosrc => 'pg_cancel_backend' }, -{ oid => '2096', descr => 'terminate a backend process and if timeout is specified, wait for its exit or until timeout occurs', +{ oid => '2096', + descr => 'terminate a backend process and if timeout is specified, wait for its exit or until timeout occurs', proname => 'pg_terminate_backend', provolatile => 'v', prorettype => 'bool', proargtypes => 'int4 int8', proargnames => '{pid,timeout}', prosrc => 'pg_terminate_backend' }, { oid => '2137', descr => 'wait for a backend process exit or timeout occurs', - proname => 'pg_wait_for_backend_termination', provolatile => 'v', prorettype => 'bool', - proargtypes => 'int4 int8', proargnames => '{pid,timeout}', - prosrc => 'pg_wait_for_backend_termination' }, + proname => 'pg_wait_for_backend_termination', provolatile => 'v', + prorettype => 'bool', proargtypes => 'int4 int8', + proargnames => '{pid,timeout}', prosrc => 'pg_wait_for_backend_termination' }, { oid => '2172', descr => 'prepare for taking an online backup', proname => 'pg_start_backup', provolatile => 'v', proparallel => 'r', prorettype => 'pg_lsn', proargtypes => 'text bool bool', @@ -7151,8 +7152,7 @@ descr => 'bytes required to store the value, perhaps with compression', proname => 'pg_column_size', provolatile => 's', prorettype => 'int4', proargtypes => 'any', prosrc => 'pg_column_size' }, -{ oid => '2121', - descr => 'compression method for the compressed datum', +{ oid => '2121', descr => 'compression method for the compressed datum', proname => 'pg_column_compression', provolatile => 's', prorettype => 'text', proargtypes => 'any', prosrc => 'pg_column_compression' }, { oid => '2322', @@ -7971,9 +7971,9 @@ # logging memory contexts of the specified backend { oid => '4543', descr => 'log memory contexts of the specified backend', - proname => 'pg_log_backend_memory_contexts', - provolatile => 'v', prorettype => 'bool', - proargtypes => 'int4', prosrc => 'pg_log_backend_memory_contexts' }, + proname => 'pg_log_backend_memory_contexts', provolatile => 'v', + prorettype => 'bool', proargtypes => 'int4', + prosrc => 'pg_log_backend_memory_contexts' }, # non-persistent series generator { oid => '1066', descr => 'non-persistent series generator', @@ -8059,8 +8059,8 @@ proname => 'bit_or', prokind => 'a', proisstrict => 'f', prorettype => 'int2', proargtypes => 'int2', prosrc => 'aggregate_dummy' }, { oid => '8452', descr => 'bitwise-xor smallint aggregate', - proname => 'bit_xor', prokind => 'a', proisstrict => 'f', prorettype => 'int2', - proargtypes => 'int2', prosrc => 'aggregate_dummy' }, + proname => 'bit_xor', prokind => 'a', proisstrict => 'f', + prorettype => 'int2', proargtypes => 'int2', prosrc => 'aggregate_dummy' }, { oid => '2238', descr => 'bitwise-and integer aggregate', proname => 'bit_and', prokind => 'a', proisstrict => 'f', prorettype => 'int4', proargtypes => 'int4', prosrc => 'aggregate_dummy' }, @@ -8068,8 +8068,8 @@ proname => 'bit_or', prokind => 'a', proisstrict => 'f', prorettype => 'int4', proargtypes => 'int4', prosrc => 'aggregate_dummy' }, { oid => '8453', descr => 'bitwise-xor integer aggregate', - proname => 'bit_xor', prokind => 'a', proisstrict => 'f', prorettype => 'int4', - proargtypes => 'int4', prosrc => 'aggregate_dummy' }, + proname => 'bit_xor', prokind => 'a', proisstrict => 'f', + prorettype => 'int4', proargtypes => 'int4', prosrc => 'aggregate_dummy' }, { oid => '2240', descr => 'bitwise-and bigint aggregate', proname => 'bit_and', prokind => 'a', proisstrict => 'f', prorettype => 'int8', proargtypes => 'int8', prosrc => 'aggregate_dummy' }, @@ -8077,8 +8077,8 @@ proname => 'bit_or', prokind => 'a', proisstrict => 'f', prorettype => 'int8', proargtypes => 'int8', prosrc => 'aggregate_dummy' }, { oid => '8454', descr => 'bitwise-xor bigint aggregate', - proname => 'bit_xor', prokind => 'a', proisstrict => 'f', prorettype => 'int8', - proargtypes => 'int8', prosrc => 'aggregate_dummy' }, + proname => 'bit_xor', prokind => 'a', proisstrict => 'f', + prorettype => 'int8', proargtypes => 'int8', prosrc => 'aggregate_dummy' }, { oid => '2242', descr => 'bitwise-and bit aggregate', proname => 'bit_and', prokind => 'a', proisstrict => 'f', prorettype => 'bit', proargtypes => 'bit', prosrc => 'aggregate_dummy' }, @@ -8289,62 +8289,81 @@ prosrc => 'brin_minmax_multi_consistent' }, { oid => '4619', descr => 'BRIN multi minmax support', proname => 'brin_minmax_multi_union', prorettype => 'bool', - proargtypes => 'internal internal internal', prosrc => 'brin_minmax_multi_union' }, + proargtypes => 'internal internal internal', + prosrc => 'brin_minmax_multi_union' }, { oid => '4620', descr => 'BRIN multi minmax support', - proname => 'brin_minmax_multi_options', prorettype => 'void', proisstrict => 'f', - proargtypes => 'internal', prosrc => 'brin_minmax_multi_options' }, + proname => 'brin_minmax_multi_options', proisstrict => 'f', + prorettype => 'void', proargtypes => 'internal', + prosrc => 'brin_minmax_multi_options' }, { oid => '4621', descr => 'BRIN multi minmax int2 distance', proname => 'brin_minmax_multi_distance_int2', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_int2' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_int2' }, { oid => '4622', descr => 'BRIN multi minmax int4 distance', proname => 'brin_minmax_multi_distance_int4', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_int4' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_int4' }, { oid => '4623', descr => 'BRIN multi minmax int8 distance', proname => 'brin_minmax_multi_distance_int8', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_int8' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_int8' }, { oid => '4624', descr => 'BRIN multi minmax float4 distance', proname => 'brin_minmax_multi_distance_float4', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_float4' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_float4' }, { oid => '4625', descr => 'BRIN multi minmax float8 distance', proname => 'brin_minmax_multi_distance_float8', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_float8' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_float8' }, { oid => '4626', descr => 'BRIN multi minmax numeric distance', proname => 'brin_minmax_multi_distance_numeric', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_numeric' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_numeric' }, { oid => '4627', descr => 'BRIN multi minmax tid distance', proname => 'brin_minmax_multi_distance_tid', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_tid' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_tid' }, { oid => '4628', descr => 'BRIN multi minmax uuid distance', proname => 'brin_minmax_multi_distance_uuid', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_uuid' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_uuid' }, { oid => '4629', descr => 'BRIN multi minmax date distance', proname => 'brin_minmax_multi_distance_date', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_date' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_date' }, { oid => '4630', descr => 'BRIN multi minmax time distance', proname => 'brin_minmax_multi_distance_time', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_time' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_time' }, { oid => '4631', descr => 'BRIN multi minmax interval distance', proname => 'brin_minmax_multi_distance_interval', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_interval' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_interval' }, { oid => '4632', descr => 'BRIN multi minmax timetz distance', proname => 'brin_minmax_multi_distance_timetz', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_timetz' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_timetz' }, { oid => '4633', descr => 'BRIN multi minmax pg_lsn distance', proname => 'brin_minmax_multi_distance_pg_lsn', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_pg_lsn' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_pg_lsn' }, { oid => '4634', descr => 'BRIN multi minmax macaddr distance', proname => 'brin_minmax_multi_distance_macaddr', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_macaddr' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_macaddr' }, { oid => '4635', descr => 'BRIN multi minmax macaddr8 distance', proname => 'brin_minmax_multi_distance_macaddr8', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_macaddr8' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_macaddr8' }, { oid => '4636', descr => 'BRIN multi minmax inet distance', proname => 'brin_minmax_multi_distance_inet', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_inet' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_inet' }, { oid => '4637', descr => 'BRIN multi minmax timestamp distance', proname => 'brin_minmax_multi_distance_timestamp', prorettype => 'float8', - proargtypes => 'internal internal', prosrc => 'brin_minmax_multi_distance_timestamp' }, + proargtypes => 'internal internal', + prosrc => 'brin_minmax_multi_distance_timestamp' }, # BRIN inclusion { oid => '4105', descr => 'BRIN inclusion support', @@ -8377,10 +8396,9 @@ prosrc => 'brin_bloom_consistent' }, { oid => '4594', descr => 'BRIN bloom support', proname => 'brin_bloom_union', prorettype => 'bool', - proargtypes => 'internal internal internal', - prosrc => 'brin_bloom_union' }, + proargtypes => 'internal internal internal', prosrc => 'brin_bloom_union' }, { oid => '4595', descr => 'BRIN bloom support', - proname => 'brin_bloom_options', prorettype => 'void', proisstrict => 'f', + proname => 'brin_bloom_options', proisstrict => 'f', prorettype => 'void', proargtypes => 'internal', prosrc => 'brin_bloom_options' }, # userlock replacements @@ -10437,9 +10455,8 @@ proargtypes => 'anymultirange int8', prosrc => 'hash_multirange_extended' }, { oid => '4280', descr => 'int4multirange constructor', - proname => 'int4multirange', - prorettype => 'int4multirange', proargtypes => '', - prosrc => 'multirange_constructor0' }, + proname => 'int4multirange', prorettype => 'int4multirange', + proargtypes => '', prosrc => 'multirange_constructor0' }, { oid => '4281', descr => 'int4multirange constructor', proname => 'int4multirange', prorettype => 'int4multirange', proargtypes => 'int4range', prosrc => 'multirange_constructor1' }, @@ -10449,8 +10466,8 @@ proallargtypes => '{_int4range}', proargmodes => '{v}', prosrc => 'multirange_constructor2' }, { oid => '4283', descr => 'nummultirange constructor', - proname => 'nummultirange', prorettype => 'nummultirange', - proargtypes => '', prosrc => 'multirange_constructor0' }, + proname => 'nummultirange', prorettype => 'nummultirange', proargtypes => '', + prosrc => 'multirange_constructor0' }, { oid => '4284', descr => 'nummultirange constructor', proname => 'nummultirange', prorettype => 'nummultirange', proargtypes => 'numrange', prosrc => 'multirange_constructor1' }, @@ -10460,8 +10477,8 @@ proallargtypes => '{_numrange}', proargmodes => '{v}', prosrc => 'multirange_constructor2' }, { oid => '4286', descr => 'tsmultirange constructor', - proname => 'tsmultirange', prorettype => 'tsmultirange', - proargtypes => '', prosrc => 'multirange_constructor0' }, + proname => 'tsmultirange', prorettype => 'tsmultirange', proargtypes => '', + prosrc => 'multirange_constructor0' }, { oid => '4287', descr => 'tsmultirange constructor', proname => 'tsmultirange', prorettype => 'tsmultirange', proargtypes => 'tsrange', prosrc => 'multirange_constructor1' }, @@ -10471,9 +10488,8 @@ proallargtypes => '{_tsrange}', proargmodes => '{v}', prosrc => 'multirange_constructor2' }, { oid => '4289', descr => 'tstzmultirange constructor', - proname => 'tstzmultirange', - prorettype => 'tstzmultirange', proargtypes => '', - prosrc => 'multirange_constructor0' }, + proname => 'tstzmultirange', prorettype => 'tstzmultirange', + proargtypes => '', prosrc => 'multirange_constructor0' }, { oid => '4290', descr => 'tstzmultirange constructor', proname => 'tstzmultirange', prorettype => 'tstzmultirange', proargtypes => 'tstzrange', prosrc => 'multirange_constructor1' }, @@ -10483,9 +10499,8 @@ proallargtypes => '{_tstzrange}', proargmodes => '{v}', prosrc => 'multirange_constructor2' }, { oid => '4292', descr => 'datemultirange constructor', - proname => 'datemultirange', - prorettype => 'datemultirange', proargtypes => '', - prosrc => 'multirange_constructor0' }, + proname => 'datemultirange', prorettype => 'datemultirange', + proargtypes => '', prosrc => 'multirange_constructor0' }, { oid => '4293', descr => 'datemultirange constructor', proname => 'datemultirange', prorettype => 'datemultirange', proargtypes => 'daterange', prosrc => 'multirange_constructor1' }, @@ -10495,9 +10510,8 @@ proallargtypes => '{_daterange}', proargmodes => '{v}', prosrc => 'multirange_constructor2' }, { oid => '4295', descr => 'int8multirange constructor', - proname => 'int8multirange', - prorettype => 'int8multirange', proargtypes => '', - prosrc => 'multirange_constructor0' }, + proname => 'int8multirange', prorettype => 'int8multirange', + proargtypes => '', prosrc => 'multirange_constructor0' }, { oid => '4296', descr => 'int8multirange constructor', proname => 'int8multirange', prorettype => 'int8multirange', proargtypes => 'int8range', prosrc => 'multirange_constructor1' }, @@ -10686,7 +10700,8 @@ prosrc => 'pg_get_replication_slots' }, { oid => '3786', descr => 'set up a logical replication slot', proname => 'pg_create_logical_replication_slot', provolatile => 'v', - proparallel => 'u', prorettype => 'record', proargtypes => 'name name bool bool', + proparallel => 'u', prorettype => 'record', + proargtypes => 'name name bool bool', proallargtypes => '{name,name,bool,bool,name,pg_lsn}', proargmodes => '{i,i,i,i,o,o}', proargnames => '{slot_name,plugin,temporary,twophase,slot_name,lsn}', @@ -10959,13 +10974,13 @@ { oid => '4302', descr => 'internal conversion function for KOI8R to MULE_INTERNAL', proname => 'koi8r_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'koi8r_to_mic', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'koi8r_to_mic', probin => '$libdir/cyrillic_and_mic' }, { oid => '4303', descr => 'internal conversion function for MULE_INTERNAL to KOI8R', proname => 'mic_to_koi8r', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_koi8r', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_koi8r', probin => '$libdir/cyrillic_and_mic' }, { oid => '4304', descr => 'internal conversion function for ISO-8859-5 to MULE_INTERNAL', proname => 'iso_to_mic', prolang => 'c', prorettype => 'int4', @@ -10979,23 +10994,23 @@ { oid => '4306', descr => 'internal conversion function for WIN1251 to MULE_INTERNAL', proname => 'win1251_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'win1251_to_mic', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'win1251_to_mic', probin => '$libdir/cyrillic_and_mic' }, { oid => '4307', descr => 'internal conversion function for MULE_INTERNAL to WIN1251', proname => 'mic_to_win1251', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_win1251', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_win1251', probin => '$libdir/cyrillic_and_mic' }, { oid => '4308', descr => 'internal conversion function for WIN866 to MULE_INTERNAL', proname => 'win866_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'win866_to_mic', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'win866_to_mic', probin => '$libdir/cyrillic_and_mic' }, { oid => '4309', descr => 'internal conversion function for MULE_INTERNAL to WIN866', proname => 'mic_to_win866', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_win866', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_win866', probin => '$libdir/cyrillic_and_mic' }, { oid => '4310', descr => 'internal conversion function for KOI8R to WIN1251', proname => 'koi8r_to_win1251', prolang => 'c', prorettype => 'int4', proargtypes => 'int4 int4 cstring internal int4 bool', @@ -11006,12 +11021,12 @@ prosrc => 'win1251_to_koi8r', probin => '$libdir/cyrillic_and_mic' }, { oid => '4312', descr => 'internal conversion function for KOI8R to WIN866', proname => 'koi8r_to_win866', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'koi8r_to_win866', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'koi8r_to_win866', probin => '$libdir/cyrillic_and_mic' }, { oid => '4313', descr => 'internal conversion function for WIN866 to KOI8R', proname => 'win866_to_koi8r', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'win866_to_koi8r', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'win866_to_koi8r', probin => '$libdir/cyrillic_and_mic' }, { oid => '4314', descr => 'internal conversion function for WIN866 to WIN1251', proname => 'win866_to_win1251', prolang => 'c', prorettype => 'int4', @@ -11025,129 +11040,129 @@ { oid => '4316', descr => 'internal conversion function for ISO-8859-5 to KOI8R', proname => 'iso_to_koi8r', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'iso_to_koi8r', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'iso_to_koi8r', probin => '$libdir/cyrillic_and_mic' }, { oid => '4317', descr => 'internal conversion function for KOI8R to ISO-8859-5', proname => 'koi8r_to_iso', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'koi8r_to_iso', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'koi8r_to_iso', probin => '$libdir/cyrillic_and_mic' }, { oid => '4318', descr => 'internal conversion function for ISO-8859-5 to WIN1251', proname => 'iso_to_win1251', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'iso_to_win1251', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'iso_to_win1251', probin => '$libdir/cyrillic_and_mic' }, { oid => '4319', descr => 'internal conversion function for WIN1251 to ISO-8859-5', proname => 'win1251_to_iso', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'win1251_to_iso', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'win1251_to_iso', probin => '$libdir/cyrillic_and_mic' }, { oid => '4320', descr => 'internal conversion function for ISO-8859-5 to WIN866', proname => 'iso_to_win866', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'iso_to_win866', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'iso_to_win866', probin => '$libdir/cyrillic_and_mic' }, { oid => '4321', descr => 'internal conversion function for WIN866 to ISO-8859-5', proname => 'win866_to_iso', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'win866_to_iso', - probin => '$libdir/cyrillic_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'win866_to_iso', probin => '$libdir/cyrillic_and_mic' }, { oid => '4322', descr => 'internal conversion function for EUC_CN to MULE_INTERNAL', proname => 'euc_cn_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'euc_cn_to_mic', - probin => '$libdir/euc_cn_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'euc_cn_to_mic', probin => '$libdir/euc_cn_and_mic' }, { oid => '4323', descr => 'internal conversion function for MULE_INTERNAL to EUC_CN', proname => 'mic_to_euc_cn', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_euc_cn', - probin => '$libdir/euc_cn_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_euc_cn', probin => '$libdir/euc_cn_and_mic' }, { oid => '4324', descr => 'internal conversion function for EUC_JP to SJIS', proname => 'euc_jp_to_sjis', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'euc_jp_to_sjis', - probin => '$libdir/euc_jp_and_sjis' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'euc_jp_to_sjis', probin => '$libdir/euc_jp_and_sjis' }, { oid => '4325', descr => 'internal conversion function for SJIS to EUC_JP', proname => 'sjis_to_euc_jp', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'sjis_to_euc_jp', - probin => '$libdir/euc_jp_and_sjis' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'sjis_to_euc_jp', probin => '$libdir/euc_jp_and_sjis' }, { oid => '4326', descr => 'internal conversion function for EUC_JP to MULE_INTERNAL', proname => 'euc_jp_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'euc_jp_to_mic', - probin => '$libdir/euc_jp_and_sjis' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'euc_jp_to_mic', probin => '$libdir/euc_jp_and_sjis' }, { oid => '4327', descr => 'internal conversion function for SJIS to MULE_INTERNAL', proname => 'sjis_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'sjis_to_mic', - probin => '$libdir/euc_jp_and_sjis' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'sjis_to_mic', probin => '$libdir/euc_jp_and_sjis' }, { oid => '4328', descr => 'internal conversion function for MULE_INTERNAL to EUC_JP', proname => 'mic_to_euc_jp', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_euc_jp', - probin => '$libdir/euc_jp_and_sjis' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_euc_jp', probin => '$libdir/euc_jp_and_sjis' }, { oid => '4329', descr => 'internal conversion function for MULE_INTERNAL to SJIS', proname => 'mic_to_sjis', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_sjis', - probin => '$libdir/euc_jp_and_sjis' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_sjis', probin => '$libdir/euc_jp_and_sjis' }, { oid => '4330', descr => 'internal conversion function for EUC_KR to MULE_INTERNAL', proname => 'euc_kr_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'euc_kr_to_mic', - probin => '$libdir/euc_kr_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'euc_kr_to_mic', probin => '$libdir/euc_kr_and_mic' }, { oid => '4331', descr => 'internal conversion function for MULE_INTERNAL to EUC_KR', proname => 'mic_to_euc_kr', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_euc_kr', - probin => '$libdir/euc_kr_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_euc_kr', probin => '$libdir/euc_kr_and_mic' }, { oid => '4332', descr => 'internal conversion function for EUC_TW to BIG5', proname => 'euc_tw_to_big5', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'euc_tw_to_big5', - probin => '$libdir/euc_tw_and_big5' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'euc_tw_to_big5', probin => '$libdir/euc_tw_and_big5' }, { oid => '4333', descr => 'internal conversion function for BIG5 to EUC_TW', proname => 'big5_to_euc_tw', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'big5_to_euc_tw', - probin => '$libdir/euc_tw_and_big5' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'big5_to_euc_tw', probin => '$libdir/euc_tw_and_big5' }, { oid => '4334', descr => 'internal conversion function for EUC_TW to MULE_INTERNAL', proname => 'euc_tw_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'euc_tw_to_mic', - probin => '$libdir/euc_tw_and_big5' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'euc_tw_to_mic', probin => '$libdir/euc_tw_and_big5' }, { oid => '4335', descr => 'internal conversion function for BIG5 to MULE_INTERNAL', proname => 'big5_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'big5_to_mic', - probin => '$libdir/euc_tw_and_big5' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'big5_to_mic', probin => '$libdir/euc_tw_and_big5' }, { oid => '4336', descr => 'internal conversion function for MULE_INTERNAL to EUC_TW', proname => 'mic_to_euc_tw', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_euc_tw', - probin => '$libdir/euc_tw_and_big5' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_euc_tw', probin => '$libdir/euc_tw_and_big5' }, { oid => '4337', descr => 'internal conversion function for MULE_INTERNAL to BIG5', proname => 'mic_to_big5', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_big5', - probin => '$libdir/euc_tw_and_big5' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_big5', probin => '$libdir/euc_tw_and_big5' }, { oid => '4338', descr => 'internal conversion function for LATIN2 to MULE_INTERNAL', proname => 'latin2_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'latin2_to_mic', - probin => '$libdir/latin2_and_win1250' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'latin2_to_mic', probin => '$libdir/latin2_and_win1250' }, { oid => '4339', descr => 'internal conversion function for MULE_INTERNAL to LATIN2', proname => 'mic_to_latin2', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_latin2', - probin => '$libdir/latin2_and_win1250' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_latin2', probin => '$libdir/latin2_and_win1250' }, { oid => '4340', descr => 'internal conversion function for WIN1250 to MULE_INTERNAL', proname => 'win1250_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'win1250_to_mic', - probin => '$libdir/latin2_and_win1250' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'win1250_to_mic', probin => '$libdir/latin2_and_win1250' }, { oid => '4341', descr => 'internal conversion function for MULE_INTERNAL to WIN1250', proname => 'mic_to_win1250', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_win1250', - probin => '$libdir/latin2_and_win1250' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_win1250', probin => '$libdir/latin2_and_win1250' }, { oid => '4342', descr => 'internal conversion function for LATIN2 to WIN1250', proname => 'latin2_to_win1250', prolang => 'c', prorettype => 'int4', @@ -11161,123 +11176,123 @@ { oid => '4344', descr => 'internal conversion function for LATIN1 to MULE_INTERNAL', proname => 'latin1_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'latin1_to_mic', - probin => '$libdir/latin_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'latin1_to_mic', probin => '$libdir/latin_and_mic' }, { oid => '4345', descr => 'internal conversion function for MULE_INTERNAL to LATIN1', proname => 'mic_to_latin1', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_latin1', - probin => '$libdir/latin_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_latin1', probin => '$libdir/latin_and_mic' }, { oid => '4346', descr => 'internal conversion function for LATIN3 to MULE_INTERNAL', proname => 'latin3_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'latin3_to_mic', - probin => '$libdir/latin_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'latin3_to_mic', probin => '$libdir/latin_and_mic' }, { oid => '4347', descr => 'internal conversion function for MULE_INTERNAL to LATIN3', proname => 'mic_to_latin3', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_latin3', - probin => '$libdir/latin_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_latin3', probin => '$libdir/latin_and_mic' }, { oid => '4348', descr => 'internal conversion function for LATIN4 to MULE_INTERNAL', proname => 'latin4_to_mic', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'latin4_to_mic', - probin => '$libdir/latin_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'latin4_to_mic', probin => '$libdir/latin_and_mic' }, { oid => '4349', descr => 'internal conversion function for MULE_INTERNAL to LATIN4', proname => 'mic_to_latin4', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'mic_to_latin4', - probin => '$libdir/latin_and_mic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'mic_to_latin4', probin => '$libdir/latin_and_mic' }, { oid => '4352', descr => 'internal conversion function for BIG5 to UTF8', proname => 'big5_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'big5_to_utf8', - probin => '$libdir/utf8_and_big5' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'big5_to_utf8', probin => '$libdir/utf8_and_big5' }, { oid => '4353', descr => 'internal conversion function for UTF8 to BIG5', proname => 'utf8_to_big5', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_big5', - probin => '$libdir/utf8_and_big5' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_big5', probin => '$libdir/utf8_and_big5' }, { oid => '4354', descr => 'internal conversion function for UTF8 to KOI8R', proname => 'utf8_to_koi8r', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_koi8r', - probin => '$libdir/utf8_and_cyrillic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_koi8r', probin => '$libdir/utf8_and_cyrillic' }, { oid => '4355', descr => 'internal conversion function for KOI8R to UTF8', proname => 'koi8r_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'koi8r_to_utf8', - probin => '$libdir/utf8_and_cyrillic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'koi8r_to_utf8', probin => '$libdir/utf8_and_cyrillic' }, { oid => '4356', descr => 'internal conversion function for UTF8 to KOI8U', proname => 'utf8_to_koi8u', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_koi8u', - probin => '$libdir/utf8_and_cyrillic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_koi8u', probin => '$libdir/utf8_and_cyrillic' }, { oid => '4357', descr => 'internal conversion function for KOI8U to UTF8', proname => 'koi8u_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'koi8u_to_utf8', - probin => '$libdir/utf8_and_cyrillic' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'koi8u_to_utf8', probin => '$libdir/utf8_and_cyrillic' }, { oid => '4358', descr => 'internal conversion function for UTF8 to WIN', proname => 'utf8_to_win', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_win', - probin => '$libdir/utf8_and_win' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_win', probin => '$libdir/utf8_and_win' }, { oid => '4359', descr => 'internal conversion function for WIN to UTF8', proname => 'win_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'win_to_utf8', - probin => '$libdir/utf8_and_win' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'win_to_utf8', probin => '$libdir/utf8_and_win' }, { oid => '4360', descr => 'internal conversion function for EUC_CN to UTF8', proname => 'euc_cn_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'euc_cn_to_utf8', - probin => '$libdir/utf8_and_euc_cn' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'euc_cn_to_utf8', probin => '$libdir/utf8_and_euc_cn' }, { oid => '4361', descr => 'internal conversion function for UTF8 to EUC_CN', proname => 'utf8_to_euc_cn', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_euc_cn', - probin => '$libdir/utf8_and_euc_cn' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_euc_cn', probin => '$libdir/utf8_and_euc_cn' }, { oid => '4362', descr => 'internal conversion function for EUC_JP to UTF8', proname => 'euc_jp_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'euc_jp_to_utf8', - probin => '$libdir/utf8_and_euc_jp' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'euc_jp_to_utf8', probin => '$libdir/utf8_and_euc_jp' }, { oid => '4363', descr => 'internal conversion function for UTF8 to EUC_JP', proname => 'utf8_to_euc_jp', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_euc_jp', - probin => '$libdir/utf8_and_euc_jp' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_euc_jp', probin => '$libdir/utf8_and_euc_jp' }, { oid => '4364', descr => 'internal conversion function for EUC_KR to UTF8', proname => 'euc_kr_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'euc_kr_to_utf8', - probin => '$libdir/utf8_and_euc_kr' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'euc_kr_to_utf8', probin => '$libdir/utf8_and_euc_kr' }, { oid => '4365', descr => 'internal conversion function for UTF8 to EUC_KR', proname => 'utf8_to_euc_kr', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_euc_kr', - probin => '$libdir/utf8_and_euc_kr' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_euc_kr', probin => '$libdir/utf8_and_euc_kr' }, { oid => '4366', descr => 'internal conversion function for EUC_TW to UTF8', proname => 'euc_tw_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'euc_tw_to_utf8', - probin => '$libdir/utf8_and_euc_tw' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'euc_tw_to_utf8', probin => '$libdir/utf8_and_euc_tw' }, { oid => '4367', descr => 'internal conversion function for UTF8 to EUC_TW', proname => 'utf8_to_euc_tw', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_euc_tw', - probin => '$libdir/utf8_and_euc_tw' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_euc_tw', probin => '$libdir/utf8_and_euc_tw' }, { oid => '4368', descr => 'internal conversion function for GB18030 to UTF8', proname => 'gb18030_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'gb18030_to_utf8', - probin => '$libdir/utf8_and_gb18030' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'gb18030_to_utf8', probin => '$libdir/utf8_and_gb18030' }, { oid => '4369', descr => 'internal conversion function for UTF8 to GB18030', proname => 'utf8_to_gb18030', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_gb18030', - probin => '$libdir/utf8_and_gb18030' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_gb18030', probin => '$libdir/utf8_and_gb18030' }, { oid => '4370', descr => 'internal conversion function for GBK to UTF8', proname => 'gbk_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'gbk_to_utf8', - probin => '$libdir/utf8_and_gbk' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'gbk_to_utf8', probin => '$libdir/utf8_and_gbk' }, { oid => '4371', descr => 'internal conversion function for UTF8 to GBK', proname => 'utf8_to_gbk', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_gbk', - probin => '$libdir/utf8_and_gbk' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_gbk', probin => '$libdir/utf8_and_gbk' }, { oid => '4372', descr => 'internal conversion function for UTF8 to ISO-8859 2-16', proname => 'utf8_to_iso8859', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_iso8859', - probin => '$libdir/utf8_and_iso8859' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_iso8859', probin => '$libdir/utf8_and_iso8859' }, { oid => '4373', descr => 'internal conversion function for ISO-8859 2-16 to UTF8', proname => 'iso8859_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'iso8859_to_utf8', - probin => '$libdir/utf8_and_iso8859' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'iso8859_to_utf8', probin => '$libdir/utf8_and_iso8859' }, { oid => '4374', descr => 'internal conversion function for LATIN1 to UTF8', proname => 'iso8859_1_to_utf8', prolang => 'c', prorettype => 'int4', proargtypes => 'int4 int4 cstring internal int4 bool', @@ -11288,28 +11303,28 @@ prosrc => 'utf8_to_iso8859_1', probin => '$libdir/utf8_and_iso8859_1' }, { oid => '4376', descr => 'internal conversion function for JOHAB to UTF8', proname => 'johab_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'johab_to_utf8', - probin => '$libdir/utf8_and_johab' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'johab_to_utf8', probin => '$libdir/utf8_and_johab' }, { oid => '4377', descr => 'internal conversion function for UTF8 to JOHAB', proname => 'utf8_to_johab', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_johab', - probin => '$libdir/utf8_and_johab' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_johab', probin => '$libdir/utf8_and_johab' }, { oid => '4378', descr => 'internal conversion function for SJIS to UTF8', proname => 'sjis_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'sjis_to_utf8', - probin => '$libdir/utf8_and_sjis' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'sjis_to_utf8', probin => '$libdir/utf8_and_sjis' }, { oid => '4379', descr => 'internal conversion function for UTF8 to SJIS', proname => 'utf8_to_sjis', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_sjis', - probin => '$libdir/utf8_and_sjis' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_sjis', probin => '$libdir/utf8_and_sjis' }, { oid => '4380', descr => 'internal conversion function for UHC to UTF8', proname => 'uhc_to_utf8', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'uhc_to_utf8', - probin => '$libdir/utf8_and_uhc' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'uhc_to_utf8', probin => '$libdir/utf8_and_uhc' }, { oid => '4381', descr => 'internal conversion function for UTF8 to UHC', proname => 'utf8_to_uhc', prolang => 'c', prorettype => 'int4', - proargtypes => 'int4 int4 cstring internal int4 bool', prosrc => 'utf8_to_uhc', - probin => '$libdir/utf8_and_uhc' }, + proargtypes => 'int4 int4 cstring internal int4 bool', + prosrc => 'utf8_to_uhc', probin => '$libdir/utf8_and_uhc' }, { oid => '4382', descr => 'internal conversion function for EUC_JIS_2004 to UTF8', proname => 'euc_jis_2004_to_utf8', prolang => 'c', prorettype => 'int4', @@ -11586,21 +11601,25 @@ prorettype => 'pg_brin_bloom_summary', proargtypes => 'internal', prosrc => 'brin_bloom_summary_recv' }, { oid => '4599', descr => 'I/O', - proname => 'brin_bloom_summary_send', provolatile => 's', prorettype => 'bytea', - proargtypes => 'pg_brin_bloom_summary', prosrc => 'brin_bloom_summary_send' }, + proname => 'brin_bloom_summary_send', provolatile => 's', + prorettype => 'bytea', proargtypes => 'pg_brin_bloom_summary', + prosrc => 'brin_bloom_summary_send' }, { oid => '4638', descr => 'I/O', - proname => 'brin_minmax_multi_summary_in', prorettype => 'pg_brin_minmax_multi_summary', - proargtypes => 'cstring', prosrc => 'brin_minmax_multi_summary_in' }, + proname => 'brin_minmax_multi_summary_in', + prorettype => 'pg_brin_minmax_multi_summary', proargtypes => 'cstring', + prosrc => 'brin_minmax_multi_summary_in' }, { oid => '4639', descr => 'I/O', proname => 'brin_minmax_multi_summary_out', prorettype => 'cstring', - proargtypes => 'pg_brin_minmax_multi_summary', prosrc => 'brin_minmax_multi_summary_out' }, + proargtypes => 'pg_brin_minmax_multi_summary', + prosrc => 'brin_minmax_multi_summary_out' }, { oid => '4640', descr => 'I/O', proname => 'brin_minmax_multi_summary_recv', provolatile => 's', prorettype => 'pg_brin_minmax_multi_summary', proargtypes => 'internal', prosrc => 'brin_minmax_multi_summary_recv' }, { oid => '4641', descr => 'I/O', - proname => 'brin_minmax_multi_summary_send', provolatile => 's', prorettype => 'bytea', - proargtypes => 'pg_brin_minmax_multi_summary', prosrc => 'brin_minmax_multi_summary_send' }, + proname => 'brin_minmax_multi_summary_send', provolatile => 's', + prorettype => 'bytea', proargtypes => 'pg_brin_minmax_multi_summary', + prosrc => 'brin_minmax_multi_summary_send' }, ] diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat index 8c145c00be35f..09fe7691dbbf6 100644 --- a/src/include/catalog/pg_type.dat +++ b/src/include/catalog/pg_type.dat @@ -443,9 +443,9 @@ # jsonb { oid => '3802', array_type_oid => '3807', descr => 'Binary JSON', typname => 'jsonb', typlen => '-1', typbyval => 'f', typcategory => 'U', - typinput => 'jsonb_in', typoutput => 'jsonb_out', typreceive => 'jsonb_recv', - typsend => 'jsonb_send', typalign => 'i', typstorage => 'x', - typsubscript => 'jsonb_subscript_handler' }, + typsubscript => 'jsonb_subscript_handler', typinput => 'jsonb_in', + typoutput => 'jsonb_out', typreceive => 'jsonb_recv', typsend => 'jsonb_send', + typalign => 'i', typstorage => 'x' }, { oid => '4072', array_type_oid => '4073', descr => 'JSON path', typname => 'jsonpath', typlen => '-1', typbyval => 'f', typcategory => 'U', typinput => 'jsonpath_in', typoutput => 'jsonpath_out', @@ -679,16 +679,17 @@ typtype => 'p', typcategory => 'P', typinput => 'anycompatiblemultirange_in', typoutput => 'anycompatiblemultirange_out', typreceive => '-', typsend => '-', typalign => 'd', typstorage => 'x' }, -{ oid => '4600', - descr => 'BRIN bloom summary', - typname => 'pg_brin_bloom_summary', typlen => '-1', typbyval => 'f', typcategory => 'S', - typinput => 'brin_bloom_summary_in', typoutput => 'brin_bloom_summary_out', +{ oid => '4600', descr => 'BRIN bloom summary', + typname => 'pg_brin_bloom_summary', typlen => '-1', typbyval => 'f', + typcategory => 'S', typinput => 'brin_bloom_summary_in', + typoutput => 'brin_bloom_summary_out', typreceive => 'brin_bloom_summary_recv', typsend => 'brin_bloom_summary_send', typalign => 'i', typstorage => 'x', typcollation => 'default' }, -{ oid => '4601', - descr => 'BRIN minmax-multi summary', - typname => 'pg_brin_minmax_multi_summary', typlen => '-1', typbyval => 'f', typcategory => 'S', - typinput => 'brin_minmax_multi_summary_in', typoutput => 'brin_minmax_multi_summary_out', - typreceive => 'brin_minmax_multi_summary_recv', typsend => 'brin_minmax_multi_summary_send', - typalign => 'i', typstorage => 'x', typcollation => 'default' }, +{ oid => '4601', descr => 'BRIN minmax-multi summary', + typname => 'pg_brin_minmax_multi_summary', typlen => '-1', typbyval => 'f', + typcategory => 'S', typinput => 'brin_minmax_multi_summary_in', + typoutput => 'brin_minmax_multi_summary_out', + typreceive => 'brin_minmax_multi_summary_recv', + typsend => 'brin_minmax_multi_summary_send', typalign => 'i', + typstorage => 'x', typcollation => 'default' }, ] diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl index 52c32dc961024..660f7ddf24ac0 100755 --- a/src/include/catalog/renumber_oids.pl +++ b/src/include/catalog/renumber_oids.pl @@ -62,7 +62,7 @@ # Collect all the existing assigned OIDs (including those to be remapped). my @header_files = glob("pg_*.h"); -my $oids = Catalog::FindAllOidsFromHeaders(@header_files); +my $oids = Catalog::FindAllOidsFromHeaders(@header_files); # Hash-ify the existing OIDs for convenient lookup. my %oidhash; diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h index 8c4748e33d6f7..264895d278aee 100644 --- a/src/include/commands/copy.h +++ b/src/include/commands/copy.h @@ -62,8 +62,8 @@ extern void DoCopy(ParseState *state, const CopyStmt *stmt, extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *ops_out, bool is_from, List *options); extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *whereClause, - const char *filename, - bool is_program, copy_data_source_cb data_source_cb, List *attnamelist, List *options); + const char *filename, + bool is_program, copy_data_source_cb data_source_cb, List *attnamelist, List *options); extern void EndCopyFrom(CopyFromState cstate); extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls); diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h index 858af7a717b14..4d68d9cceba8f 100644 --- a/src/include/commands/copyfrom_internal.h +++ b/src/include/commands/copyfrom_internal.h @@ -129,23 +129,23 @@ typedef struct CopyFromStateData /* * input_buf holds input data, already converted to database encoding. * - * In text mode, CopyReadLine parses this data sufficiently to locate - * line boundaries, then transfers the data to line_buf. We guarantee - * that there is a \0 at input_buf[input_buf_len] at all times. (In - * binary mode, input_buf is not used.) + * In text mode, CopyReadLine parses this data sufficiently to locate line + * boundaries, then transfers the data to line_buf. We guarantee that + * there is a \0 at input_buf[input_buf_len] at all times. (In binary + * mode, input_buf is not used.) * * If encoding conversion is not required, input_buf is not a separate * buffer but points directly to raw_buf. In that case, input_buf_len * tracks the number of bytes that have been verified as valid in the - * database encoding, and raw_buf_len is the total number of bytes - * stored in the buffer. + * database encoding, and raw_buf_len is the total number of bytes stored + * in the buffer. */ #define INPUT_BUF_SIZE 65536 /* we palloc INPUT_BUF_SIZE+1 bytes */ char *input_buf; int input_buf_index; /* next byte to process */ - int input_buf_len; /* total # of bytes stored */ + int input_buf_len; /* total # of bytes stored */ bool input_reached_eof; /* true if we reached EOF */ - bool input_reached_error; /* true if a conversion error happened */ + bool input_reached_error; /* true if a conversion error happened */ /* Shorthand for number of unconsumed bytes available in input_buf */ #define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index) diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h index 6bce4d76fe50c..42bf1c7519828 100644 --- a/src/include/commands/defrem.h +++ b/src/include/commands/defrem.h @@ -83,7 +83,7 @@ extern ObjectAddress AlterOperator(AlterOperatorStmt *stmt); extern ObjectAddress CreateStatistics(CreateStatsStmt *stmt); extern ObjectAddress AlterStatistics(AlterStatsStmt *stmt); extern void RemoveStatisticsById(Oid statsOid); -extern Oid StatisticsGetRelation(Oid statId, bool missing_ok); +extern Oid StatisticsGetRelation(Oid statId, bool missing_ok); /* commands/aggregatecmds.c */ extern ObjectAddress DefineAggregate(ParseState *pstate, List *name, List *args, bool oldstyle, diff --git a/src/include/executor/execAsync.h b/src/include/executor/execAsync.h index 724034f226504..7551b553f82c9 100644 --- a/src/include/executor/execAsync.h +++ b/src/include/executor/execAsync.h @@ -22,4 +22,4 @@ extern void ExecAsyncResponse(AsyncRequest *areq); extern void ExecAsyncRequestDone(AsyncRequest *areq, TupleTableSlot *result); extern void ExecAsyncRequestPending(AsyncRequest *areq); -#endif /* EXECASYNC_H */ +#endif /* EXECASYNC_H */ diff --git a/src/include/executor/functions.h b/src/include/executor/functions.h index b56ce26da07f9..a9e14e2fbed24 100644 --- a/src/include/executor/functions.h +++ b/src/include/executor/functions.h @@ -30,7 +30,7 @@ typedef struct SQLFunctionParseInfo char **argnames; /* names of input arguments; NULL if none */ /* Note that argnames[i] can be NULL, if some args are unnamed */ Oid collation; /* function's input collation, if known */ -} SQLFunctionParseInfo; +} SQLFunctionParseInfo; typedef SQLFunctionParseInfo *SQLFunctionParseInfoPtr; diff --git a/src/include/foreign/fdwapi.h b/src/include/foreign/fdwapi.h index 4f17becbb81c1..a801cd305768a 100644 --- a/src/include/foreign/fdwapi.h +++ b/src/include/foreign/fdwapi.h @@ -87,10 +87,10 @@ typedef TupleTableSlot *(*ExecForeignInsert_function) (EState *estate, TupleTableSlot *planSlot); typedef TupleTableSlot **(*ExecForeignBatchInsert_function) (EState *estate, - ResultRelInfo *rinfo, - TupleTableSlot **slots, - TupleTableSlot **planSlots, - int *numSlots); + ResultRelInfo *rinfo, + TupleTableSlot **slots, + TupleTableSlot **planSlots, + int *numSlots); typedef int (*GetForeignModifyBatchSize_function) (ResultRelInfo *rinfo); diff --git a/src/include/lib/sort_template.h b/src/include/lib/sort_template.h index 24d6d0006cfd7..f52627d8ce7f8 100644 --- a/src/include/lib/sort_template.h +++ b/src/include/lib/sort_template.h @@ -176,11 +176,11 @@ #ifdef ST_COMPARE_RUNTIME_POINTER typedef int (*ST_COMPARATOR_TYPE_NAME) (const ST_ELEMENT_TYPE *, - const ST_ELEMENT_TYPE *ST_SORT_PROTO_ARG); + const ST_ELEMENT_TYPE * ST_SORT_PROTO_ARG); #endif /* Declare the sort function. Note optional arguments at end. */ -ST_SCOPE void ST_SORT(ST_ELEMENT_TYPE *first, size_t n +ST_SCOPE void ST_SORT(ST_ELEMENT_TYPE * first, size_t n ST_SORT_PROTO_ELEMENT_SIZE ST_SORT_PROTO_COMPARE ST_SORT_PROTO_ARG); @@ -245,9 +245,9 @@ ST_SCOPE void ST_SORT(ST_ELEMENT_TYPE *first, size_t n * in the qsort function. */ static pg_noinline ST_ELEMENT_TYPE * -ST_MED3(ST_ELEMENT_TYPE *a, - ST_ELEMENT_TYPE *b, - ST_ELEMENT_TYPE *c +ST_MED3(ST_ELEMENT_TYPE * a, + ST_ELEMENT_TYPE * b, + ST_ELEMENT_TYPE * c ST_SORT_PROTO_COMPARE ST_SORT_PROTO_ARG) { @@ -257,7 +257,7 @@ ST_MED3(ST_ELEMENT_TYPE *a, } static inline void -ST_SWAP(ST_POINTER_TYPE *a, ST_POINTER_TYPE *b) +ST_SWAP(ST_POINTER_TYPE * a, ST_POINTER_TYPE * b) { ST_POINTER_TYPE tmp = *a; @@ -266,7 +266,7 @@ ST_SWAP(ST_POINTER_TYPE *a, ST_POINTER_TYPE *b) } static inline void -ST_SWAPN(ST_POINTER_TYPE *a, ST_POINTER_TYPE *b, size_t n) +ST_SWAPN(ST_POINTER_TYPE * a, ST_POINTER_TYPE * b, size_t n) { for (size_t i = 0; i < n; ++i) ST_SWAP(&a[i], &b[i]); @@ -276,7 +276,7 @@ ST_SWAPN(ST_POINTER_TYPE *a, ST_POINTER_TYPE *b, size_t n) * Sort an array. */ ST_SCOPE void -ST_SORT(ST_ELEMENT_TYPE *data, size_t n +ST_SORT(ST_ELEMENT_TYPE * data, size_t n ST_SORT_PROTO_ELEMENT_SIZE ST_SORT_PROTO_COMPARE ST_SORT_PROTO_ARG) diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 91a1c3a780ee0..7795a69490505 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -461,9 +461,9 @@ typedef struct ResultRelInfo bool ri_usesFdwDirectModify; /* batch insert stuff */ - int ri_NumSlots; /* number of slots in the array */ - int ri_BatchSize; /* max slots inserted in a single batch */ - TupleTableSlot **ri_Slots; /* input tuples for batch insert */ + int ri_NumSlots; /* number of slots in the array */ + int ri_BatchSize; /* max slots inserted in a single batch */ + TupleTableSlot **ri_Slots; /* input tuples for batch insert */ TupleTableSlot **ri_PlanSlots; /* list of WithCheckOption's to be checked */ @@ -1255,16 +1255,16 @@ struct AppendState int as_whichplan; bool as_begun; /* false means need to initialize */ Bitmapset *as_asyncplans; /* asynchronous plans indexes */ - int as_nasyncplans; /* # of asynchronous plans */ + int as_nasyncplans; /* # of asynchronous plans */ AsyncRequest **as_asyncrequests; /* array of AsyncRequests */ TupleTableSlot **as_asyncresults; /* unreturned results of async plans */ int as_nasyncresults; /* # of valid entries in as_asyncresults */ bool as_syncdone; /* true if all synchronous plans done in * asynchronous mode, else false */ int as_nasyncremain; /* # of remaining asynchronous plans */ - Bitmapset *as_needrequest; /* asynchronous plans needing a new request */ - struct WaitEventSet *as_eventset; /* WaitEventSet used to configure - * file descriptor wait events */ + Bitmapset *as_needrequest; /* asynchronous plans needing a new request */ + struct WaitEventSet *as_eventset; /* WaitEventSet used to configure file + * descriptor wait events */ int as_first_partial_plan; /* Index of 'appendplans' containing * the first partial plan */ ParallelAppendState *as_pstate; /* parallel coordination info */ diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index fea3123251942..ef73342019fae 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -1929,7 +1929,7 @@ typedef enum AlterTableType AT_GenericOptions, /* OPTIONS (...) */ AT_AttachPartition, /* ATTACH PARTITION */ AT_DetachPartition, /* DETACH PARTITION */ - AT_DetachPartitionFinalize, /* DETACH PARTITION FINALIZE */ + AT_DetachPartitionFinalize, /* DETACH PARTITION FINALIZE */ AT_AddIdentity, /* ADD IDENTITY */ AT_SetIdentity, /* SET identity column options */ AT_DropIdentity, /* DROP IDENTITY */ diff --git a/src/include/nodes/pathnodes.h b/src/include/nodes/pathnodes.h index a65bda7e3c6f3..b7b2817a5de85 100644 --- a/src/include/nodes/pathnodes.h +++ b/src/include/nodes/pathnodes.h @@ -1103,7 +1103,7 @@ typedef struct PathTarget Index *sortgrouprefs; /* corresponding sort/group refnos, or 0 */ QualCost cost; /* cost of evaluating the expressions */ int width; /* estimated avg width of result tuples */ - VolatileFunctionStatus has_volatile_expr; /* indicates if exprs contain + VolatileFunctionStatus has_volatile_expr; /* indicates if exprs contain * any volatile functions. */ } PathTarget; @@ -2054,7 +2054,7 @@ typedef struct RestrictInfo bool leakproof; /* true if known to contain no leaked Vars */ - VolatileFunctionStatus has_volatile; /* to indicate if clause contains + VolatileFunctionStatus has_volatile; /* to indicate if clause contains * any volatile functions. */ Index security_level; /* see comment above */ diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h index 841401be207fe..57f320a1759ed 100644 --- a/src/include/nodes/plannodes.h +++ b/src/include/nodes/plannodes.h @@ -132,7 +132,7 @@ typedef struct Plan /* * information needed for asynchronous execution */ - bool async_capable; /* engage asynchronous-capable logic? */ + bool async_capable; /* engage asynchronous-capable logic? */ /* * Common structural data for all Plan types. diff --git a/src/include/pg_config_manual.h b/src/include/pg_config_manual.h index 42ee43f0aa7ef..27da86e5e09af 100644 --- a/src/include/pg_config_manual.h +++ b/src/include/pg_config_manual.h @@ -357,8 +357,8 @@ * memory even when clobber is off, or to 0 to never free relation cache * memory even when clobbering is on. */ -/* #define RECOVER_RELATION_BUILD_MEMORY 0 */ /* Force disable */ -/* #define RECOVER_RELATION_BUILD_MEMORY 1 */ /* Force enable */ + /* #define RECOVER_RELATION_BUILD_MEMORY 0 */ /* Force disable */ + /* #define RECOVER_RELATION_BUILD_MEMORY 1 */ /* Force enable */ /* * Define this to force all parse and plan trees to be passed through diff --git a/src/include/pgstat.h b/src/include/pgstat.h index 72ff4a06d6f24..5fbd3a05ba1be 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -13,12 +13,12 @@ #include "datatype/timestamp.h" #include "portability/instr_time.h" -#include "postmaster/pgarch.h" /* for MAX_XFN_CHARS */ +#include "postmaster/pgarch.h" /* for MAX_XFN_CHARS */ #include "utils/backend_progress.h" /* for backward compatibility */ -#include "utils/backend_status.h" /* for backward compatibility */ +#include "utils/backend_status.h" /* for backward compatibility */ #include "utils/hsearch.h" #include "utils/relcache.h" -#include "utils/wait_event.h" /* for backward compatibility */ +#include "utils/wait_event.h" /* for backward compatibility */ /* ---------- @@ -379,7 +379,7 @@ typedef struct PgStat_MsgResetslrucounter typedef struct PgStat_MsgResetreplslotcounter { PgStat_MsgHdr m_hdr; - NameData m_slotname; + NameData m_slotname; bool clearall; } PgStat_MsgResetreplslotcounter; diff --git a/src/include/storage/fd.h b/src/include/storage/fd.h index 328473bdc94c2..5b3c280dd7a92 100644 --- a/src/include/storage/fd.h +++ b/src/include/storage/fd.h @@ -45,10 +45,11 @@ #include -typedef enum RecoveryInitSyncMethod { +typedef enum RecoveryInitSyncMethod +{ RECOVERY_INIT_SYNC_METHOD_FSYNC, RECOVERY_INIT_SYNC_METHOD_SYNCFS -} RecoveryInitSyncMethod; +} RecoveryInitSyncMethod; struct iovec; /* avoid including port/pg_iovec.h here */ @@ -58,7 +59,7 @@ typedef int File; /* GUC parameter */ extern PGDLLIMPORT int max_files_per_process; extern PGDLLIMPORT bool data_sync_retry; -extern int recovery_init_sync_method; +extern int recovery_init_sync_method; /* * This is private to fd.c, but exported for save/restore_backend_variables() diff --git a/src/include/storage/proc.h b/src/include/storage/proc.h index 2fd1ff09a73e7..be67d8a861660 100644 --- a/src/include/storage/proc.h +++ b/src/include/storage/proc.h @@ -38,9 +38,9 @@ typedef struct XidCacheStatus { /* number of cached subxids, never more than PGPROC_MAX_CACHED_SUBXIDS */ - uint8 count; + uint8 count; /* has PGPROC->subxids overflowed */ - bool overflowed; + bool overflowed; } XidCacheStatus; struct XidCache @@ -145,8 +145,8 @@ struct PGPROC * else InvalidLocalTransactionId */ int pid; /* Backend's process ID; 0 if prepared xact */ - int pgxactoff; /* offset into various ProcGlobal->arrays - * with data mirrored from this PGPROC */ + int pgxactoff; /* offset into various ProcGlobal->arrays with + * data mirrored from this PGPROC */ int pgprocno; /* These fields are zero while a backend is still starting up: */ @@ -207,8 +207,8 @@ struct PGPROC */ SHM_QUEUE myProcLocks[NUM_LOCK_PARTITIONS]; - XidCacheStatus subxidStatus; /* mirrored with - * ProcGlobal->subxidStates[i] */ + XidCacheStatus subxidStatus; /* mirrored with + * ProcGlobal->subxidStates[i] */ struct XidCache subxids; /* cache for subtransaction XIDs */ /* Support for group XID clearing. */ diff --git a/src/include/utils/backend_progress.h b/src/include/utils/backend_progress.h index 1714fa09c16e6..53bddf665b1df 100644 --- a/src/include/utils/backend_progress.h +++ b/src/include/utils/backend_progress.h @@ -41,4 +41,4 @@ extern void pgstat_progress_update_multi_param(int nparam, const int *index, extern void pgstat_progress_end_command(void); -#endif /* BACKEND_PROGRESS_H */ +#endif /* BACKEND_PROGRESS_H */ diff --git a/src/include/utils/backend_status.h b/src/include/utils/backend_status.h index 0cbcc9c943555..8042b817df563 100644 --- a/src/include/utils/backend_status.h +++ b/src/include/utils/backend_status.h @@ -12,7 +12,7 @@ #include "datatype/timestamp.h" #include "libpq/pqcomm.h" -#include "miscadmin.h" /* for BackendType */ +#include "miscadmin.h" /* for BackendType */ #include "utils/backend_progress.h" @@ -273,7 +273,7 @@ extern PGDLLIMPORT int pgstat_track_activity_query_size; * Other global variables * ---------- */ -extern PGDLLIMPORT PgBackendStatus *MyBEEntry; +extern PGDLLIMPORT PgBackendStatus *MyBEEntry; /* ---------- @@ -318,4 +318,4 @@ extern LocalPgBackendStatus *pgstat_fetch_stat_local_beentry(int beid); extern char *pgstat_clip_activity(const char *raw_activity); -#endif /* BACKEND_STATUS_H */ +#endif /* BACKEND_STATUS_H */ diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index 27d2f2ffb3465..f3ce4fb17398c 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -35,18 +35,18 @@ extern int errdomainconstraint(Oid datatypeOid, const char *conname); extern int2vector *buildint2vector(const int16 *int2s, int n); /* name.c */ -extern void namestrcpy(Name name, const char *str); +extern void namestrcpy(Name name, const char *str); extern int namestrcmp(Name name, const char *str); /* numutils.c */ extern int32 pg_atoi(const char *s, int size, int c); extern int16 pg_strtoint16(const char *s); extern int32 pg_strtoint32(const char *s); -extern int pg_itoa(int16 i, char *a); -extern int pg_ultoa_n(uint32 l, char *a); -extern int pg_ulltoa_n(uint64 l, char *a); -extern int pg_ltoa(int32 l, char *a); -extern int pg_lltoa(int64 ll, char *a); +extern int pg_itoa(int16 i, char *a); +extern int pg_ultoa_n(uint32 l, char *a); +extern int pg_ulltoa_n(uint64 l, char *a); +extern int pg_ltoa(int32 l, char *a); +extern int pg_lltoa(int64 ll, char *a); extern char *pg_ultostr_zeropad(char *str, uint32 value, int32 minwidth); extern char *pg_ultostr(char *str, uint32 value); extern uint64 pg_strtouint64(const char *str, char **endptr, int base); diff --git a/src/include/utils/selfuncs.h b/src/include/utils/selfuncs.h index 78cde58acc109..9dd444e1ff5da 100644 --- a/src/include/utils/selfuncs.h +++ b/src/include/utils/selfuncs.h @@ -79,7 +79,7 @@ typedef struct EstimationInfo { - uint32 flags; /* Flags, as defined above to mark special + uint32 flags; /* Flags, as defined above to mark special * properties of the estimation. */ } EstimationInfo; diff --git a/src/include/utils/wait_event.h b/src/include/utils/wait_event.h index 47accc5ffe22f..6c6ec2e7118fa 100644 --- a/src/include/utils/wait_event.h +++ b/src/include/utils/wait_event.h @@ -281,4 +281,4 @@ pgstat_report_wait_end(void) } -#endif /* WAIT_EVENT_H */ +#endif /* WAIT_EVENT_H */ diff --git a/src/interfaces/ecpg/preproc/ecpg.c b/src/interfaces/ecpg/preproc/ecpg.c index 9d861b428b02c..13e0f8cf9c2c3 100644 --- a/src/interfaces/ecpg/preproc/ecpg.c +++ b/src/interfaces/ecpg/preproc/ecpg.c @@ -379,6 +379,7 @@ main(int argc, char *const argv[]) for (list = g_declared_list; list != NULL;) { struct declared_list *this = list; + list = list->next; free(this); } diff --git a/src/interfaces/ecpg/preproc/parse.pl b/src/interfaces/ecpg/preproc/parse.pl index e46d2a589b432..1e24801a6fbaf 100644 --- a/src/interfaces/ecpg/preproc/parse.pl +++ b/src/interfaces/ecpg/preproc/parse.pl @@ -63,19 +63,19 @@ 'opt_array_bounds' => '', # "ignore" means: do not create type and rules for this non-term-id - 'parse_toplevel' => 'ignore', - 'stmtmulti' => 'ignore', - 'CreateAsStmt' => 'ignore', - 'DeallocateStmt' => 'ignore', - 'ColId' => 'ignore', - 'type_function_name' => 'ignore', - 'ColLabel' => 'ignore', - 'Sconst' => 'ignore', + 'parse_toplevel' => 'ignore', + 'stmtmulti' => 'ignore', + 'CreateAsStmt' => 'ignore', + 'DeallocateStmt' => 'ignore', + 'ColId' => 'ignore', + 'type_function_name' => 'ignore', + 'ColLabel' => 'ignore', + 'Sconst' => 'ignore', 'opt_distinct_clause' => 'ignore', - 'PLpgSQL_Expr' => 'ignore', - 'PLAssignStmt' => 'ignore', - 'plassign_target' => 'ignore', - 'plassign_equals' => 'ignore',); + 'PLpgSQL_Expr' => 'ignore', + 'PLAssignStmt' => 'ignore', + 'plassign_target' => 'ignore', + 'plassign_equals' => 'ignore',); # these replace_line commands excise certain keywords from the core keyword # lists. Be sure to account for these in ColLabel and related productions. diff --git a/src/interfaces/libpq/fe-secure-openssl.c b/src/interfaces/libpq/fe-secure-openssl.c index 6f357dfbfec56..00d43f3efff1e 100644 --- a/src/interfaces/libpq/fe-secure-openssl.c +++ b/src/interfaces/libpq/fe-secure-openssl.c @@ -943,8 +943,8 @@ initialize_SSL(PGconn *conn) if ((cvstore = SSL_CTX_get_cert_store(SSL_context)) != NULL) { - char *fname = NULL; - char *dname = NULL; + char *fname = NULL; + char *dname = NULL; if (conn->sslcrl && strlen(conn->sslcrl) > 0) fname = conn->sslcrl; @@ -1467,8 +1467,8 @@ pgtls_close(PGconn *conn) { /* * In the non-SSL case, just remove the crypto callbacks if the - * connection has then loaded. This code path has no dependency - * on any pending SSL calls. + * connection has then loaded. This code path has no dependency on + * any pending SSL calls. */ if (conn->crypto_loaded) destroy_needed = true; diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c index 37ec06fc4d01c..ed4247be673a4 100644 --- a/src/interfaces/libpq/fe-trace.c +++ b/src/interfaces/libpq/fe-trace.c @@ -644,7 +644,7 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer) if (!toServer) pqTraceOutputS(conn->Pfdebug, message, &logCursor); else - fprintf(conn->Pfdebug, "Sync"); /* no message content */ + fprintf(conn->Pfdebug, "Sync"); /* no message content */ break; case 't': /* Parameter Description */ pqTraceOutputt(conn->Pfdebug, message, &logCursor, regress); diff --git a/src/port/preadv.c b/src/port/preadv.c index 29c808cd0c256..eb153ca502853 100644 --- a/src/port/preadv.c +++ b/src/port/preadv.c @@ -35,8 +35,8 @@ pg_preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset) return -1; return readv(fd, iov, iovcnt); #else - ssize_t sum = 0; - ssize_t part; + ssize_t sum = 0; + ssize_t part; for (int i = 0; i < iovcnt; ++i) { diff --git a/src/test/authentication/t/001_password.pl b/src/test/authentication/t/001_password.pl index 17d686e702e4c..427a3601987cc 100644 --- a/src/test/authentication/t/001_password.pl +++ b/src/test/authentication/t/001_password.pl @@ -141,7 +141,8 @@ sub test_role $ENV{"PGPASSFILE"} = $pgpassfile; unlink($pgpassfile); -append_to_file($pgpassfile, qq! +append_to_file( + $pgpassfile, qq! # This very long comment is just here to exercise handling of long lines in the file. This very long comment is just here to exercise handling of long lines in the file. This very long comment is just here to exercise handling of long lines in the file. This very long comment is just here to exercise handling of long lines in the file. This very long comment is just here to exercise handling of long lines in the file. *:*:postgres:scram_role:pass:this is not part of the password. !); @@ -151,8 +152,9 @@ sub test_role test_role($node, 'scram_role', 'password from pgpass', 0); test_role($node, 'md5_role', 'password from pgpass', 2); -append_to_file($pgpassfile, qq! +append_to_file( + $pgpassfile, qq! *:*:*:md5_role:p\\ass !); -test_role($node, 'md5_role', 'password from pgpass', 0); +test_role($node, 'md5_role', 'password from pgpass', 0); diff --git a/src/test/kerberos/t/001_auth.pl b/src/test/kerberos/t/001_auth.pl index 03337064380cd..b5594924cae86 100644 --- a/src/test/kerberos/t/001_auth.pl +++ b/src/test/kerberos/t/001_auth.pl @@ -79,8 +79,8 @@ my $kdc_pidfile = "${TestLib::tmp_check}/krb5kdc.pid"; my $keytab = "${TestLib::tmp_check}/krb5.keytab"; -my $dbname = 'postgres'; -my $username = 'test1'; +my $dbname = 'postgres'; +my $username = 'test1'; my $application = '001_auth.pl'; note "setting up Kerberos"; @@ -193,9 +193,7 @@ sub test_access my $connstr = $node->connstr('postgres') . " user=$role host=$host hostaddr=$hostaddr $gssencmode"; - my %params = ( - sql => $query, - ); + my %params = (sql => $query,); if (@expect_log_msgs) { diff --git a/src/test/modules/commit_ts/t/002_standby.pl b/src/test/modules/commit_ts/t/002_standby.pl index 24446bb38413d..2664b177ec223 100644 --- a/src/test/modules/commit_ts/t/002_standby.pl +++ b/src/test/modules/commit_ts/t/002_standby.pl @@ -11,7 +11,7 @@ use PostgresNode; my $bkplabel = 'backup'; -my $primary = get_new_node('primary'); +my $primary = get_new_node('primary'); $primary->init(allows_streaming => 1); $primary->append_conf( diff --git a/src/test/modules/commit_ts/t/003_standby_2.pl b/src/test/modules/commit_ts/t/003_standby_2.pl index 1d57ecedae544..57ab9b1d4631d 100644 --- a/src/test/modules/commit_ts/t/003_standby_2.pl +++ b/src/test/modules/commit_ts/t/003_standby_2.pl @@ -11,7 +11,7 @@ use PostgresNode; my $bkplabel = 'backup'; -my $primary = get_new_node('primary'); +my $primary = get_new_node('primary'); $primary->init(allows_streaming => 1); $primary->append_conf( 'postgresql.conf', qq{ diff --git a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl index 99a41150a2cb2..8fd6cd45e7610 100644 --- a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl +++ b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl @@ -26,7 +26,7 @@ for my $testname (@tests) { my @extraargs = ('-r', $numrows); - my $cmptrace = grep(/^$testname$/, + my $cmptrace = grep(/^$testname$/, qw(simple_pipeline multi_pipelines prepared singlerow pipeline_abort transaction disallowed_in_pipeline)) > 0; diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index fcbd18af798db..f7088667a4ab9 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -568,8 +568,10 @@ sub backup print "# Taking pg_basebackup $backup_name from node \"$name\"\n"; TestLib::system_or_bail( - 'pg_basebackup', '-D', $backup_path, '-h', - $self->host, '-p', $self->port, '--checkpoint', + 'pg_basebackup', '-D', + $backup_path, '-h', + $self->host, '-p', + $self->port, '--checkpoint', 'fast', '--no-sync', @{ $params{backup_options} }); print "# Backup finished\n"; @@ -713,9 +715,10 @@ sub init_from_backup TestLib::system_or_bail($params{tar_program}, 'xf', $backup_path . '/base.tar', '-C', $data_path); - TestLib::system_or_bail($params{tar_program}, 'xf', - $backup_path . '/pg_wal.tar', - '-C', $data_path . '/pg_wal'); + TestLib::system_or_bail( + $params{tar_program}, 'xf', + $backup_path . '/pg_wal.tar', '-C', + $data_path . '/pg_wal'); } else { @@ -1216,44 +1219,43 @@ sub get_new_node # sub _set_pg_version { - my ($self) = @_; - my $inst = $self->{_install_path}; - my $pg_config = "pg_config"; - - if (defined $inst) - { - # If the _install_path is invalid, our PATH variables might find an - # unrelated pg_config executable elsewhere. Sanity check the - # directory. - BAIL_OUT("directory not found: $inst") - unless -d $inst; - - # If the directory exists but is not the root of a postgresql - # installation, or if the user configured using - # --bindir=$SOMEWHERE_ELSE, we're not going to find pg_config, so - # complain about that, too. - $pg_config = "$inst/bin/pg_config"; - BAIL_OUT("pg_config not found: $pg_config") - unless -e $pg_config; - BAIL_OUT("pg_config not executable: $pg_config") - unless -x $pg_config; - - # Leave $pg_config install_path qualified, to be sure we get the right - # version information, below, or die trying - } - - local %ENV = $self->_get_env(); - - # We only want the version field - open my $fh, "-|", $pg_config, "--version" - or - BAIL_OUT("$pg_config failed: $!"); - my $version_line = <$fh>; - close $fh or die; - - $self->{_pg_version} = PostgresVersion->new($version_line); - - BAIL_OUT("could not parse pg_config --version output: $version_line") + my ($self) = @_; + my $inst = $self->{_install_path}; + my $pg_config = "pg_config"; + + if (defined $inst) + { + # If the _install_path is invalid, our PATH variables might find an + # unrelated pg_config executable elsewhere. Sanity check the + # directory. + BAIL_OUT("directory not found: $inst") + unless -d $inst; + + # If the directory exists but is not the root of a postgresql + # installation, or if the user configured using + # --bindir=$SOMEWHERE_ELSE, we're not going to find pg_config, so + # complain about that, too. + $pg_config = "$inst/bin/pg_config"; + BAIL_OUT("pg_config not found: $pg_config") + unless -e $pg_config; + BAIL_OUT("pg_config not executable: $pg_config") + unless -x $pg_config; + + # Leave $pg_config install_path qualified, to be sure we get the right + # version information, below, or die trying + } + + local %ENV = $self->_get_env(); + + # We only want the version field + open my $fh, "-|", $pg_config, "--version" + or BAIL_OUT("$pg_config failed: $!"); + my $version_line = <$fh>; + close $fh or die; + + $self->{_pg_version} = PostgresVersion->new($version_line); + + BAIL_OUT("could not parse pg_config --version output: $version_line") unless defined $self->{_pg_version}; } @@ -1277,7 +1279,7 @@ sub _set_pg_version # a common parent directory. sub _get_env { - my $self = shift; + my $self = shift; my %inst_env = (%ENV, PGHOST => $self->{_host}, PGPORT => $self->{_port}); # the remaining arguments are modifications to make to the environment my %mods = (@_); @@ -1338,17 +1340,17 @@ sub _get_env # caching a command. sub installed_command { - my ($self, $cmd) = @_; + my ($self, $cmd) = @_; - # Nodes using alternate installation locations use their installation's - # bin/ directory explicitly - return join('/', $self->{_install_path}, 'bin', $cmd) - if defined $self->{_install_path}; + # Nodes using alternate installation locations use their installation's + # bin/ directory explicitly + return join('/', $self->{_install_path}, 'bin', $cmd) + if defined $self->{_install_path}; - # Nodes implicitly using the default installation location rely on IPC::Run - # to find the right binary, which should not cause %cmd_cache confusion, - # because no nodes with other installation paths do it that way. - return $cmd; + # Nodes implicitly using the default installation location rely on IPC::Run + # to find the right binary, which should not cause %cmd_cache confusion, + # because no nodes with other installation paths do it that way. + return $cmd; } =pod @@ -1402,9 +1404,9 @@ sub get_free_port if ($found == 1) { foreach my $addr (qw(127.0.0.1), - ($use_tcp && $TestLib::windows_os) - ? qw(127.0.0.2 127.0.0.3 0.0.0.0) - : ()) + ($use_tcp && $TestLib::windows_os) + ? qw(127.0.0.2 127.0.0.3 0.0.0.0) + : ()) { if (!can_bind($addr, $port)) { @@ -1650,8 +1652,9 @@ sub psql } $psql_connstr .= defined $replication ? " replication=$replication" : ""; - my @psql_params = ($self->installed_command('psql'), - '-XAtq', '-d', $psql_connstr, '-f', '-'); + my @psql_params = ( + $self->installed_command('psql'), + '-XAtq', '-d', $psql_connstr, '-f', '-'); # If the caller wants an array and hasn't passed stdout/stderr # references, allocate temporary ones to capture them so we @@ -1914,8 +1917,9 @@ sub interactive_psql local %ENV = $self->_get_env(); - my @psql_params = ($self->installed_command('psql'), - '-XAt', '-d', $self->connstr($dbname)); + my @psql_params = ( + $self->installed_command('psql'), + '-XAt', '-d', $self->connstr($dbname)); push @psql_params, @{ $params{extra_params} } if defined $params{extra_params}; @@ -2020,8 +2024,7 @@ sub connect_ok } if (@log_like or @log_unlike) { - my $log_contents = TestLib::slurp_file($self->logfile, - $log_location); + my $log_contents = TestLib::slurp_file($self->logfile, $log_location); while (my $regex = shift @log_like) { @@ -2091,8 +2094,7 @@ sub connect_fails if (@log_like or @log_unlike) { - my $log_contents = TestLib::slurp_file($self->logfile, - $log_location); + my $log_contents = TestLib::slurp_file($self->logfile, $log_location); while (my $regex = shift @log_like) { @@ -2125,8 +2127,10 @@ sub poll_query_until $expected = 't' unless defined($expected); # default value - my $cmd = [ $self->installed_command('psql'), - '-XAt', '-c', $query, '-d', $self->connstr($dbname) ]; + my $cmd = [ + $self->installed_command('psql'), + '-XAt', '-c', $query, '-d', $self->connstr($dbname) + ]; my ($stdout, $stderr); my $max_attempts = 180 * 10; my $attempts = 0; @@ -2547,8 +2551,7 @@ sub pg_recvlogical_upto my @cmd = ( $self->installed_command('pg_recvlogical'), - '-S', $slot_name, '--dbname', - $self->connstr($dbname)); + '-S', $slot_name, '--dbname', $self->connstr($dbname)); push @cmd, '--endpos', $endpos; push @cmd, '-f', '-', '--no-loop', '--start'; diff --git a/src/test/perl/PostgresVersion.pm b/src/test/perl/PostgresVersion.pm index 55984ec7e8120..4e764c36a55cb 100644 --- a/src/test/perl/PostgresVersion.pm +++ b/src/test/perl/PostgresVersion.pm @@ -78,9 +78,9 @@ sub new # Accept standard formats, in case caller has handed us the output of a # postgres command line tool my $devel; - ($arg,$devel) = ($1, $2) - if ($arg =~ - m!^ # beginning of line + ($arg, $devel) = ($1, $2) + if ( + $arg =~ m!^ # beginning of line (?:\(?PostgreSQL\)?\s)? # ignore PostgreSQL marker (\d+(?:\.\d+)*) # version number, dotted notation (devel|(?:alpha|beta|rc)\d+)? # dev marker - see version_stamp.pl @@ -95,7 +95,7 @@ sub new $devel ||= ""; - return bless { str => "$arg$devel", num => \@numbers }, $class; + return bless { str => "$arg$devel", num => \@numbers }, $class; } # Routine which compares the _pg_version_array obtained for the two @@ -129,7 +129,7 @@ sub _version_cmp # Render the version number using the saved string. sub _stringify { - my $self = shift; + my $self = shift; return $self->{str}; } diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index 000eb0df1cbc2..d6c3eb87232f9 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -126,7 +126,8 @@ BEGIN if ($windows_os) { require Win32API::File; - Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle setFilePointer)); + Win32API::File->import( + qw(createFile OsFHandleOpen CloseHandle setFilePointer)); } # Specifies whether to use Unix sockets for test setups. On @@ -165,7 +166,7 @@ INIT # TESTDIR environment variable, which is normally set by the invoking # Makefile. $tmp_check = $ENV{TESTDIR} ? "$ENV{TESTDIR}/tmp_check" : "tmp_check"; - $log_path = "$tmp_check/log"; + $log_path = "$tmp_check/log"; mkdir $tmp_check; mkdir $log_path; @@ -739,7 +740,7 @@ sub command_exit_is # long as the process was not terminated by an exception. To work around # that, use $h->full_results on Windows instead. my $result = - ($Config{osname} eq "MSWin32") + ($Config{osname} eq "MSWin32") ? ($h->full_results)[0] : $h->result(0); is($result, $expected, $test_name); diff --git a/src/test/recovery/t/001_stream_rep.pl b/src/test/recovery/t/001_stream_rep.pl index 7ce67d2b200bc..df6fdc20d1e2f 100644 --- a/src/test/recovery/t/001_stream_rep.pl +++ b/src/test/recovery/t/001_stream_rep.pl @@ -81,12 +81,12 @@ sub test_target_session_attrs my $mode = shift; my $status = shift; - my $node1_host = $node1->host; - my $node1_port = $node1->port; - my $node1_name = $node1->name; - my $node2_host = $node2->host; - my $node2_port = $node2->port; - my $node2_name = $node2->name; + my $node1_host = $node1->host; + my $node1_port = $node1->port; + my $node1_name = $node1->name; + my $node2_host = $node2->host; + my $node2_port = $node2->port; + my $node2_name = $node2->name; my $target_port = undef; $target_port = $target_node->port if (defined $target_node); my $target_name = undef; @@ -202,8 +202,8 @@ sub test_target_session_attrs 'postgres', " CREATE ROLE repl_role REPLICATION LOGIN; GRANT pg_read_all_settings TO repl_role;"); -my $primary_host = $node_primary->host; -my $primary_port = $node_primary->port; +my $primary_host = $node_primary->host; +my $primary_port = $node_primary->port; my $connstr_common = "host=$primary_host port=$primary_port user=repl_role"; my $connstr_rep = "$connstr_common replication=1"; my $connstr_db = "$connstr_common replication=database dbname=postgres"; diff --git a/src/test/recovery/t/003_recovery_targets.pl b/src/test/recovery/t/003_recovery_targets.pl index 4da7ed970e120..84e977bd6d9b4 100644 --- a/src/test/recovery/t/003_recovery_targets.pl +++ b/src/test/recovery/t/003_recovery_targets.pl @@ -16,7 +16,7 @@ sub test_recovery_standby { my $test_name = shift; my $node_name = shift; - my $node_primary = shift; + my $node_primary = shift; my $recovery_params = shift; my $num_rows = shift; my $until_lsn = shift; diff --git a/src/test/recovery/t/007_sync_rep.pl b/src/test/recovery/t/007_sync_rep.pl index ad3fb1b44ce42..81098dcf00cf1 100644 --- a/src/test/recovery/t/007_sync_rep.pl +++ b/src/test/recovery/t/007_sync_rep.pl @@ -36,7 +36,7 @@ sub test_sync_state sub start_standby_and_wait { my ($primary, $standby) = @_; - my $primary_name = $primary->name; + my $primary_name = $primary->name; my $standby_name = $standby->name; my $query = "SELECT count(1) = 1 FROM pg_stat_replication WHERE application_name = '$standby_name'"; diff --git a/src/test/recovery/t/011_crash_recovery.pl b/src/test/recovery/t/011_crash_recovery.pl index 0e5059db99728..a26e99500b23c 100644 --- a/src/test/recovery/t/011_crash_recovery.pl +++ b/src/test/recovery/t/011_crash_recovery.pl @@ -61,4 +61,4 @@ 'aborted', 'xid is aborted after crash'); $stdin .= "\\q\n"; -$tx->finish; # wait for psql to quit gracefully +$tx->finish; # wait for psql to quit gracefully diff --git a/src/test/recovery/t/021_row_visibility.pl b/src/test/recovery/t/021_row_visibility.pl index 2d0f0556298d6..fcff0a2febaa1 100644 --- a/src/test/recovery/t/021_row_visibility.pl +++ b/src/test/recovery/t/021_row_visibility.pl @@ -41,122 +41,131 @@ # One psql to primary and standby each, for all queries. That allows # to check uncommitted changes being replicated and such. my %psql_primary = (stdin => '', stdout => '', stderr => ''); -$psql_primary{run} = - IPC::Run::start( - ['psql', '-XA', '-f', '-', '-d', $node_primary->connstr('postgres')], - '<', \$psql_primary{stdin}, - '>', \$psql_primary{stdout}, - '2>', \$psql_primary{stderr}, - $psql_timeout); +$psql_primary{run} = IPC::Run::start( + [ 'psql', '-XA', '-f', '-', '-d', $node_primary->connstr('postgres') ], + '<', + \$psql_primary{stdin}, + '>', + \$psql_primary{stdout}, + '2>', + \$psql_primary{stderr}, + $psql_timeout); my %psql_standby = ('stdin' => '', 'stdout' => '', 'stderr' => ''); -$psql_standby{run} = - IPC::Run::start( - ['psql', '-XA', '-f', '-', '-d', $node_standby->connstr('postgres')], - '<', \$psql_standby{stdin}, - '>', \$psql_standby{stdout}, - '2>', \$psql_standby{stderr}, - $psql_timeout); +$psql_standby{run} = IPC::Run::start( + [ 'psql', '-XA', '-f', '-', '-d', $node_standby->connstr('postgres') ], + '<', + \$psql_standby{stdin}, + '>', + \$psql_standby{stdout}, + '2>', + \$psql_standby{stderr}, + $psql_timeout); # # 1. Check initial data is the same # -ok(send_query_and_wait(\%psql_standby, - q/SELECT * FROM test_visibility ORDER BY data;/, - qr/^\(0 rows\)$/m), - 'data not visible'); +ok( send_query_and_wait( + \%psql_standby, + q/SELECT * FROM test_visibility ORDER BY data;/, + qr/^\(0 rows\)$/m), + 'data not visible'); # # 2. Check if an INSERT is replayed and visible # -$node_primary->psql('postgres', "INSERT INTO test_visibility VALUES ('first insert')"); +$node_primary->psql('postgres', + "INSERT INTO test_visibility VALUES ('first insert')"); $node_primary->wait_for_catchup($node_standby, 'replay', $node_primary->lsn('insert')); -ok(send_query_and_wait(\%psql_standby, - q[SELECT * FROM test_visibility ORDER BY data;], - qr/first insert.*\n\(1 row\)/m), - 'insert visible'); +ok( send_query_and_wait( + \%psql_standby, + q[SELECT * FROM test_visibility ORDER BY data;], + qr/first insert.*\n\(1 row\)/m), + 'insert visible'); # # 3. Verify that uncommitted changes aren't visible. # -ok(send_query_and_wait(\%psql_primary, - q[ +ok( send_query_and_wait( + \%psql_primary, + q[ BEGIN; UPDATE test_visibility SET data = 'first update' RETURNING data; ], - qr/^UPDATE 1$/m), - 'UPDATE'); + qr/^UPDATE 1$/m), + 'UPDATE'); -$node_primary->psql('postgres', "SELECT txid_current();"); # ensure WAL flush +$node_primary->psql('postgres', "SELECT txid_current();"); # ensure WAL flush $node_primary->wait_for_catchup($node_standby, 'replay', - $node_primary->lsn('insert')); + $node_primary->lsn('insert')); -ok(send_query_and_wait(\%psql_standby, - q[SELECT * FROM test_visibility ORDER BY data;], - qr/first insert.*\n\(1 row\)/m), - 'uncommitted update invisible'); +ok( send_query_and_wait( + \%psql_standby, + q[SELECT * FROM test_visibility ORDER BY data;], + qr/first insert.*\n\(1 row\)/m), + 'uncommitted update invisible'); # # 4. That a commit turns 3. visible # -ok(send_query_and_wait(\%psql_primary, - q[COMMIT;], - qr/^COMMIT$/m), - 'COMMIT'); +ok(send_query_and_wait(\%psql_primary, q[COMMIT;], qr/^COMMIT$/m), 'COMMIT'); $node_primary->wait_for_catchup($node_standby, 'replay', $node_primary->lsn('insert')); -ok(send_query_and_wait(\%psql_standby, - q[SELECT * FROM test_visibility ORDER BY data;], - qr/first update\n\(1 row\)$/m), - 'committed update visible'); +ok( send_query_and_wait( + \%psql_standby, + q[SELECT * FROM test_visibility ORDER BY data;], + qr/first update\n\(1 row\)$/m), + 'committed update visible'); # # 5. Check that changes in prepared xacts is invisible # -ok(send_query_and_wait(\%psql_primary, q[ +ok( send_query_and_wait( + \%psql_primary, q[ DELETE from test_visibility; -- delete old data, so we start with clean slate BEGIN; INSERT INTO test_visibility VALUES('inserted in prepared will_commit'); PREPARE TRANSACTION 'will_commit';], - qr/^PREPARE TRANSACTION$/m), - 'prepared will_commit'); + qr/^PREPARE TRANSACTION$/m), + 'prepared will_commit'); -ok(send_query_and_wait(\%psql_primary, q[ +ok( send_query_and_wait( + \%psql_primary, q[ BEGIN; INSERT INTO test_visibility VALUES('inserted in prepared will_abort'); PREPARE TRANSACTION 'will_abort'; ], - qr/^PREPARE TRANSACTION$/m), - 'prepared will_abort'); + qr/^PREPARE TRANSACTION$/m), + 'prepared will_abort'); $node_primary->wait_for_catchup($node_standby, 'replay', - $node_primary->lsn('insert')); + $node_primary->lsn('insert')); -ok(send_query_and_wait(\%psql_standby, - q[SELECT * FROM test_visibility ORDER BY data;], - qr/^\(0 rows\)$/m), - 'uncommitted prepared invisible'); +ok( send_query_and_wait( + \%psql_standby, + q[SELECT * FROM test_visibility ORDER BY data;], + qr/^\(0 rows\)$/m), + 'uncommitted prepared invisible'); # For some variation, finish prepared xacts via separate connections -$node_primary->safe_psql('postgres', - "COMMIT PREPARED 'will_commit';"); -$node_primary->safe_psql('postgres', - "ROLLBACK PREPARED 'will_abort';"); +$node_primary->safe_psql('postgres', "COMMIT PREPARED 'will_commit';"); +$node_primary->safe_psql('postgres', "ROLLBACK PREPARED 'will_abort';"); $node_primary->wait_for_catchup($node_standby, 'replay', $node_primary->lsn('insert')); -ok(send_query_and_wait(\%psql_standby, - q[SELECT * FROM test_visibility ORDER BY data;], - qr/will_commit.*\n\(1 row\)$/m), - 'finished prepared visible'); +ok( send_query_and_wait( + \%psql_standby, + q[SELECT * FROM test_visibility ORDER BY data;], + qr/will_commit.*\n\(1 row\)$/m), + 'finished prepared visible'); # explicitly shut down psql instances gracefully - to avoid hangs # or worse on windows -$psql_primary{stdin} .= "\\q\n"; +$psql_primary{stdin} .= "\\q\n"; $psql_primary{run}->finish; $psql_standby{stdin} .= "\\q\n"; $psql_standby{run}->finish; @@ -185,16 +194,16 @@ sub send_query_and_wait if ($psql_timeout->is_expired) { - BAIL_OUT("aborting wait: program timed out\n". - "stream contents: >>$$psql{stdout}<<\n". - "pattern searched for: $untl\n"); + BAIL_OUT("aborting wait: program timed out\n" + . "stream contents: >>$$psql{stdout}<<\n" + . "pattern searched for: $untl\n"); return 0; } if (not $$psql{run}->pumpable()) { - BAIL_OUT("aborting wait: program died\n". - "stream contents: >>$$psql{stdout}<<\n". - "pattern searched for: $untl\n"); + BAIL_OUT("aborting wait: program died\n" + . "stream contents: >>$$psql{stdout}<<\n" + . "pattern searched for: $untl\n"); return 0; } $$psql{run}->pump(); diff --git a/src/test/recovery/t/022_crash_temp_files.pl b/src/test/recovery/t/022_crash_temp_files.pl index 42c3cfc027d39..b912f4b2323c7 100644 --- a/src/test/recovery/t/022_crash_temp_files.pl +++ b/src/test/recovery/t/022_crash_temp_files.pl @@ -41,9 +41,7 @@ SELECT pg_reload_conf();]); # create table, insert rows -$node->safe_psql( - 'postgres', - q[CREATE TABLE tab_crash (a integer UNIQUE);]); +$node->safe_psql('postgres', q[CREATE TABLE tab_crash (a integer UNIQUE);]); # Run psql, keeping session alive, so we have an alive backend to kill. my ($killme_stdin, $killme_stdout, $killme_stderr) = ('', '', ''); @@ -118,7 +116,8 @@ c INT; BEGIN LOOP - SELECT COUNT(*) INTO c FROM pg_locks WHERE pid = ] . $pid . q[ AND NOT granted; + SELECT COUNT(*) INTO c FROM pg_locks WHERE pid = ] . $pid + . q[ AND NOT granted; IF c > 0 THEN EXIT; END IF; @@ -143,10 +142,10 @@ BEGIN $node->poll_query_until('postgres', 'SELECT 1', '1'); # Check for temporary files -is($node->safe_psql( - 'postgres', - 'SELECT COUNT(1) FROM pg_ls_dir($$base/pgsql_tmp$$)'), - qq(0), 'no temporary files'); +is( $node->safe_psql( + 'postgres', 'SELECT COUNT(1) FROM pg_ls_dir($$base/pgsql_tmp$$)'), + qq(0), + 'no temporary files'); # # Test old behavior (don't remove temporary files after crash) @@ -206,7 +205,8 @@ BEGIN c INT; BEGIN LOOP - SELECT COUNT(*) INTO c FROM pg_locks WHERE pid = ] . $pid . q[ AND NOT granted; + SELECT COUNT(*) INTO c FROM pg_locks WHERE pid = ] . $pid + . q[ AND NOT granted; IF c > 0 THEN EXIT; END IF; @@ -231,19 +231,19 @@ BEGIN $node->poll_query_until('postgres', 'SELECT 1', '1'); # Check for temporary files -- should be there -is($node->safe_psql( - 'postgres', - 'SELECT COUNT(1) FROM pg_ls_dir($$base/pgsql_tmp$$)'), - qq(1), 'one temporary file'); +is( $node->safe_psql( + 'postgres', 'SELECT COUNT(1) FROM pg_ls_dir($$base/pgsql_tmp$$)'), + qq(1), + 'one temporary file'); # Restart should remove the temporary files $node->restart(); # Check the temporary files -- should be gone -is($node->safe_psql( - 'postgres', - 'SELECT COUNT(1) FROM pg_ls_dir($$base/pgsql_tmp$$)'), - qq(0), 'temporary file was removed'); +is( $node->safe_psql( + 'postgres', 'SELECT COUNT(1) FROM pg_ls_dir($$base/pgsql_tmp$$)'), + qq(0), + 'temporary file was removed'); $node->stop(); diff --git a/src/test/recovery/t/024_archive_recovery.pl b/src/test/recovery/t/024_archive_recovery.pl index 302c69f96b5aa..f06ed8c8a13a6 100644 --- a/src/test/recovery/t/024_archive_recovery.pl +++ b/src/test/recovery/t/024_archive_recovery.pl @@ -50,8 +50,8 @@ # Make WAL segment eligible for archival $node->safe_psql('postgres', 'SELECT pg_switch_wal()'); -my $archive_wait_query - = "SELECT '$walfile_to_be_archived' <= last_archived_wal FROM pg_stat_archiver;"; +my $archive_wait_query = + "SELECT '$walfile_to_be_archived' <= last_archived_wal FROM pg_stat_archiver;"; # Wait until the WAL segment has been archived. $node->poll_query_until('postgres', $archive_wait_query) @@ -69,13 +69,17 @@ sub test_recovery_wal_level_minimal my $recovery_node = get_new_node($node_name); $recovery_node->init_from_backup( $node, $backup_name, - has_restoring => 1, standby => $standby_setting); + has_restoring => 1, + standby => $standby_setting); # Use run_log instead of recovery_node->start because this test expects # that the server ends with an error during recovery. run_log( - ['pg_ctl','-D', $recovery_node->data_dir, '-l', - $recovery_node->logfile, 'start']); + [ + 'pg_ctl', '-D', + $recovery_node->data_dir, '-l', + $recovery_node->logfile, 'start' + ]); # Wait up to 180s for postgres to terminate foreach my $i (0 .. 1800) @@ -87,8 +91,9 @@ sub test_recovery_wal_level_minimal # Confirm that the archive recovery fails with an expected error my $logfile = slurp_file($recovery_node->logfile()); ok( $logfile =~ - qr/FATAL: .* WAL was generated with wal_level=minimal, cannot continue recovering/, - "$node_text ends with an error because it finds WAL generated with wal_level=minimal"); + qr/FATAL: .* WAL was generated with wal_level=minimal, cannot continue recovering/, + "$node_text ends with an error because it finds WAL generated with wal_level=minimal" + ); } # Test for archive recovery diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c index d8756e5ba005a..351d79e1f0910 100644 --- a/src/test/regress/regress.c +++ b/src/test/regress/regress.c @@ -824,7 +824,7 @@ test_spinlock(void) char data_before[4]; slock_t lock; char data_after[4]; - } struct_w_lock; + } struct_w_lock; memcpy(struct_w_lock.data_before, "abcd", 4); memcpy(struct_w_lock.data_after, "ef12", 4); @@ -872,28 +872,28 @@ test_spinlock(void) } /* - * Ensure that allocating more than INT32_MAX emulated spinlocks - * works. That's interesting because the spinlock emulation uses a 32bit - * integer to map spinlocks onto semaphores. There've been bugs... + * Ensure that allocating more than INT32_MAX emulated spinlocks works. + * That's interesting because the spinlock emulation uses a 32bit integer + * to map spinlocks onto semaphores. There've been bugs... */ #ifndef HAVE_SPINLOCKS { /* - * Initialize enough spinlocks to advance counter close to - * wraparound. It's too expensive to perform acquire/release for each, - * as those may be syscalls when the spinlock emulation is used (and - * even just atomic TAS would be expensive). + * Initialize enough spinlocks to advance counter close to wraparound. + * It's too expensive to perform acquire/release for each, as those + * may be syscalls when the spinlock emulation is used (and even just + * atomic TAS would be expensive). */ for (uint32 i = 0; i < INT32_MAX - 100000; i++) { - slock_t lock; + slock_t lock; SpinLockInit(&lock); } for (uint32 i = 0; i < 200000; i++) { - slock_t lock; + slock_t lock; SpinLockInit(&lock); @@ -923,7 +923,7 @@ test_spinlock(void) static void test_atomic_spin_nest(void) { - slock_t lock; + slock_t lock; #define NUM_TEST_ATOMICS (NUM_SPINLOCK_SEMAPHORES + NUM_ATOMICS_SEMAPHORES + 27) pg_atomic_uint32 atomics32[NUM_TEST_ATOMICS]; pg_atomic_uint64 atomics64[NUM_TEST_ATOMICS]; diff --git a/src/test/ssl/t/001_ssltests.pl b/src/test/ssl/t/001_ssltests.pl index 45acb1687c8b9..44daefb00217a 100644 --- a/src/test/ssl/t/001_ssltests.pl +++ b/src/test/ssl/t/001_ssltests.pl @@ -41,8 +41,8 @@ # This changes ssl/client.key to ssl/client_tmp.key etc for the rest # of the tests. my @keys = ( - "client", "client-revoked", - "client-der", "client-encrypted-pem", + "client", "client-revoked", + "client-der", "client-encrypted-pem", "client-encrypted-der", "client-dn"); foreach my $key (@keys) { diff --git a/src/test/ssl/t/SSLServer.pm b/src/test/ssl/t/SSLServer.pm index 0ca2bebf2b3a9..804d008245231 100644 --- a/src/test/ssl/t/SSLServer.pm +++ b/src/test/ssl/t/SSLServer.pm @@ -139,13 +139,13 @@ sub switch_server_cert my $cafile = $_[2] || "root+client_ca"; my $crlfile = "root+client.crl"; my $crldir; - my $pgdata = $node->data_dir; + my $pgdata = $node->data_dir; # defaults to use crl file if (defined $_[3] || defined $_[4]) { $crlfile = $_[3]; - $crldir = $_[4]; + $crldir = $_[4]; } open my $sslconf, '>', "$pgdata/sslconfig.conf"; @@ -154,7 +154,7 @@ sub switch_server_cert print $sslconf "ssl_cert_file='$certfile.crt'\n"; print $sslconf "ssl_key_file='$certfile.key'\n"; print $sslconf "ssl_crl_file='$crlfile'\n" if defined $crlfile; - print $sslconf "ssl_crl_dir='$crldir'\n" if defined $crldir; + print $sslconf "ssl_crl_dir='$crldir'\n" if defined $crldir; close $sslconf; $node->restart; diff --git a/src/test/subscription/t/001_rep_changes.pl b/src/test/subscription/t/001_rep_changes.pl index 46a88b6d30552..1f654ee6afc37 100644 --- a/src/test/subscription/t/001_rep_changes.pl +++ b/src/test/subscription/t/001_rep_changes.pl @@ -164,7 +164,8 @@ # from the publication. $result = $node_subscriber->safe_psql('postgres', "SELECT count(*), min(a), max(a) FROM tab_ins"); -is($result, qq(1052|1|1002), 'check rows on subscriber before table drop from publication'); +is($result, qq(1052|1|1002), + 'check rows on subscriber before table drop from publication'); # Drop the table from publication $node_publisher->safe_psql('postgres', @@ -179,7 +180,8 @@ # publication, so row count should remain the same. $result = $node_subscriber->safe_psql('postgres', "SELECT count(*), min(a), max(a) FROM tab_ins"); -is($result, qq(1052|1|1002), 'check rows on subscriber after table drop from publication'); +is($result, qq(1052|1|1002), + 'check rows on subscriber after table drop from publication'); # Delete the inserted row in publisher $node_publisher->safe_psql('postgres', "DELETE FROM tab_ins WHERE a = 8888"); @@ -205,7 +207,8 @@ # Setup logical replication that will only be used for this test $node_publisher->safe_psql('postgres', - "CREATE PUBLICATION tap_pub_temp1 FOR TABLE temp1 WITH (publish = insert)"); + "CREATE PUBLICATION tap_pub_temp1 FOR TABLE temp1 WITH (publish = insert)" +); $node_publisher->safe_psql('postgres', "CREATE PUBLICATION tap_pub_temp2 FOR TABLE temp2"); $node_subscriber->safe_psql('postgres', @@ -221,9 +224,10 @@ or die "Timed out while waiting for subscriber to synchronize data"; # Subscriber table will have no rows initially -$result = $node_subscriber->safe_psql('postgres', - "SELECT count(*) FROM temp1"); -is($result, qq(0), 'check initial rows on subscriber with multiple publications'); +$result = + $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM temp1"); +is($result, qq(0), + 'check initial rows on subscriber with multiple publications'); # Insert a row into the table that's part of first publication in subscriber # list of publications. @@ -232,8 +236,8 @@ $node_publisher->wait_for_catchup('tap_sub_temp1'); # Subscriber should receive the inserted row -$result = $node_subscriber->safe_psql('postgres', - "SELECT count(*) FROM temp1"); +$result = + $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM temp1"); is($result, qq(1), 'check rows on subscriber with multiple publications'); # Drop subscription as we don't need it anymore diff --git a/src/test/subscription/t/004_sync.pl b/src/test/subscription/t/004_sync.pl index f4afdc241d54c..b3c91af21d145 100644 --- a/src/test/subscription/t/004_sync.pl +++ b/src/test/subscription/t/004_sync.pl @@ -161,17 +161,20 @@ # at this time. Recreate the subscription which will do the initial copy of # the table again and fails due to unique constraint violation. $node_subscriber->safe_psql('postgres', - "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub"); + "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub" +); $result = $node_subscriber->poll_query_until('postgres', $started_query) - or die "Timed out while waiting for subscriber to start sync"; + or die "Timed out while waiting for subscriber to start sync"; # DROP SUBSCRIPTION must clean up slots on the publisher side when the # subscriber is stuck on data copy for constraint violation. $node_subscriber->safe_psql('postgres', "DROP SUBSCRIPTION tap_sub"); -$result = $node_publisher->safe_psql('postgres', "SELECT count(*) FROM pg_replication_slots"); -is($result, qq(0), 'DROP SUBSCRIPTION during error can clean up the slots on the publisher'); +$result = $node_publisher->safe_psql('postgres', + "SELECT count(*) FROM pg_replication_slots"); +is($result, qq(0), + 'DROP SUBSCRIPTION during error can clean up the slots on the publisher'); $node_subscriber->stop('fast'); $node_publisher->stop('fast'); diff --git a/src/test/subscription/t/010_truncate.pl b/src/test/subscription/t/010_truncate.pl index cd3f45c1925ce..2d49f2537b807 100644 --- a/src/test/subscription/t/010_truncate.pl +++ b/src/test/subscription/t/010_truncate.pl @@ -185,4 +185,5 @@ $result = $node_subscriber->safe_psql('postgres', "SELECT count(*), min(a), max(a) FROM tab1"); -is($result, qq(0||), 'truncate replicated in synchronous logical replication'); +is($result, qq(0||), + 'truncate replicated in synchronous logical replication'); diff --git a/src/test/subscription/t/015_stream.pl b/src/test/subscription/t/015_stream.pl index d76e14c37640d..6cc8b4a8d262d 100644 --- a/src/test/subscription/t/015_stream.pl +++ b/src/test/subscription/t/015_stream.pl @@ -11,7 +11,8 @@ # Create publisher node my $node_publisher = get_new_node('publisher'); $node_publisher->init(allows_streaming => 'logical'); -$node_publisher->append_conf('postgresql.conf', 'logical_decoding_work_mem = 64kB'); +$node_publisher->append_conf('postgresql.conf', + 'logical_decoding_work_mem = 64kB'); $node_publisher->start; # Create subscriber node @@ -26,27 +27,31 @@ "INSERT INTO test_tab VALUES (1, 'foo'), (2, 'bar')"); # Setup structure on subscriber -$node_subscriber->safe_psql('postgres', "CREATE TABLE test_tab (a int primary key, b text, c timestamptz DEFAULT now(), d bigint DEFAULT 999)"); +$node_subscriber->safe_psql('postgres', + "CREATE TABLE test_tab (a int primary key, b text, c timestamptz DEFAULT now(), d bigint DEFAULT 999)" +); # Setup logical replication my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres'; -$node_publisher->safe_psql('postgres', "CREATE PUBLICATION tap_pub FOR TABLE test_tab"); +$node_publisher->safe_psql('postgres', + "CREATE PUBLICATION tap_pub FOR TABLE test_tab"); my $appname = 'tap_sub'; $node_subscriber->safe_psql('postgres', -"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" + "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" ); $node_publisher->wait_for_catchup($appname); # Also wait for initial table sync to finish my $synced_query = -"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');"; + "SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');"; $node_subscriber->poll_query_until('postgres', $synced_query) or die "Timed out while waiting for subscriber to synchronize data"; my $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c), count(d = 999) FROM test_tab"); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c), count(d = 999) FROM test_tab"); is($result, qq(2|2|2), 'check initial data was copied to subscriber'); # Interleave a pair of transactions, each exceeding the 64kB limit. @@ -83,16 +88,17 @@ $node_publisher->wait_for_catchup($appname); $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c), count(d = 999) FROM test_tab"); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c), count(d = 999) FROM test_tab"); is($result, qq(3334|3334|3334), 'check extra columns contain local defaults'); # Test the streaming in binary mode $node_subscriber->safe_psql('postgres', -"ALTER SUBSCRIPTION tap_sub SET (binary = on)" -); + "ALTER SUBSCRIPTION tap_sub SET (binary = on)"); # Insert, update and delete enough rows to exceed the 64kB limit. -$node_publisher->safe_psql('postgres', q{ +$node_publisher->safe_psql( + 'postgres', q{ BEGIN; INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(5001, 10000) s(i); UPDATE test_tab SET b = md5(b) WHERE mod(a,2) = 0; @@ -103,21 +109,27 @@ $node_publisher->wait_for_catchup($appname); $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c), count(d = 999) FROM test_tab"); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c), count(d = 999) FROM test_tab"); is($result, qq(6667|6667|6667), 'check extra columns contain local defaults'); # Change the local values of the extra columns on the subscriber, # update publisher, and check that subscriber retains the expected # values. This is to ensure that non-streaming transactions behave # properly after a streaming transaction. -$node_subscriber->safe_psql('postgres', "UPDATE test_tab SET c = 'epoch'::timestamptz + 987654321 * interval '1s'"); -$node_publisher->safe_psql('postgres', "UPDATE test_tab SET b = md5(a::text)"); +$node_subscriber->safe_psql('postgres', + "UPDATE test_tab SET c = 'epoch'::timestamptz + 987654321 * interval '1s'" +); +$node_publisher->safe_psql('postgres', + "UPDATE test_tab SET b = md5(a::text)"); $node_publisher->wait_for_catchup($appname); -$result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(extract(epoch from c) = 987654321), count(d = 999) FROM test_tab"); -is($result, qq(6667|6667|6667), 'check extra columns contain locally changed data'); +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(extract(epoch from c) = 987654321), count(d = 999) FROM test_tab" +); +is($result, qq(6667|6667|6667), + 'check extra columns contain locally changed data'); $node_subscriber->stop; $node_publisher->stop; diff --git a/src/test/subscription/t/016_stream_subxact.pl b/src/test/subscription/t/016_stream_subxact.pl index 399036f14b4b0..0245b0685b137 100644 --- a/src/test/subscription/t/016_stream_subxact.pl +++ b/src/test/subscription/t/016_stream_subxact.pl @@ -11,7 +11,8 @@ # Create publisher node my $node_publisher = get_new_node('publisher'); $node_publisher->init(allows_streaming => 'logical'); -$node_publisher->append_conf('postgresql.conf', 'logical_decoding_work_mem = 64kB'); +$node_publisher->append_conf('postgresql.conf', + 'logical_decoding_work_mem = 64kB'); $node_publisher->start; # Create subscriber node @@ -26,31 +27,36 @@ "INSERT INTO test_tab VALUES (1, 'foo'), (2, 'bar')"); # Setup structure on subscriber -$node_subscriber->safe_psql('postgres', "CREATE TABLE test_tab (a int primary key, b text, c timestamptz DEFAULT now(), d bigint DEFAULT 999)"); +$node_subscriber->safe_psql('postgres', + "CREATE TABLE test_tab (a int primary key, b text, c timestamptz DEFAULT now(), d bigint DEFAULT 999)" +); # Setup logical replication my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres'; -$node_publisher->safe_psql('postgres', "CREATE PUBLICATION tap_pub FOR TABLE test_tab"); +$node_publisher->safe_psql('postgres', + "CREATE PUBLICATION tap_pub FOR TABLE test_tab"); my $appname = 'tap_sub'; $node_subscriber->safe_psql('postgres', -"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" + "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" ); $node_publisher->wait_for_catchup($appname); # Also wait for initial table sync to finish my $synced_query = -"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');"; + "SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');"; $node_subscriber->poll_query_until('postgres', $synced_query) or die "Timed out while waiting for subscriber to synchronize data"; my $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c), count(d = 999) FROM test_tab"); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c), count(d = 999) FROM test_tab"); is($result, qq(2|2|2), 'check initial data was copied to subscriber'); # Insert, update and delete enough rows to exceed 64kB limit. -$node_publisher->safe_psql('postgres', q{ +$node_publisher->safe_psql( + 'postgres', q{ BEGIN; INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series( 3, 500) s(i); UPDATE test_tab SET b = md5(b) WHERE mod(a,2) = 0; @@ -77,8 +83,11 @@ $node_publisher->wait_for_catchup($appname); $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c), count(d = 999) FROM test_tab"); -is($result, qq(1667|1667|1667), 'check data was copied to subscriber in streaming mode and extra columns contain local defaults'); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c), count(d = 999) FROM test_tab"); +is($result, qq(1667|1667|1667), + 'check data was copied to subscriber in streaming mode and extra columns contain local defaults' +); $node_subscriber->stop; $node_publisher->stop; diff --git a/src/test/subscription/t/017_stream_ddl.pl b/src/test/subscription/t/017_stream_ddl.pl index 8194a3882ac18..35b146827d3c2 100644 --- a/src/test/subscription/t/017_stream_ddl.pl +++ b/src/test/subscription/t/017_stream_ddl.pl @@ -11,7 +11,8 @@ # Create publisher node my $node_publisher = get_new_node('publisher'); $node_publisher->init(allows_streaming => 'logical'); -$node_publisher->append_conf('postgresql.conf', 'logical_decoding_work_mem = 64kB'); +$node_publisher->append_conf('postgresql.conf', + 'logical_decoding_work_mem = 64kB'); $node_publisher->start; # Create subscriber node @@ -26,31 +27,36 @@ "INSERT INTO test_tab VALUES (1, 'foo'), (2, 'bar')"); # Setup structure on subscriber -$node_subscriber->safe_psql('postgres', "CREATE TABLE test_tab (a int primary key, b text, c INT, d INT, e INT, f INT)"); +$node_subscriber->safe_psql('postgres', + "CREATE TABLE test_tab (a int primary key, b text, c INT, d INT, e INT, f INT)" +); # Setup logical replication my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres'; -$node_publisher->safe_psql('postgres', "CREATE PUBLICATION tap_pub FOR TABLE test_tab"); +$node_publisher->safe_psql('postgres', + "CREATE PUBLICATION tap_pub FOR TABLE test_tab"); my $appname = 'tap_sub'; $node_subscriber->safe_psql('postgres', -"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" + "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" ); $node_publisher->wait_for_catchup($appname); # Also wait for initial table sync to finish my $synced_query = -"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');"; + "SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');"; $node_subscriber->poll_query_until('postgres', $synced_query) or die "Timed out while waiting for subscriber to synchronize data"; my $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c), count(d = 999) FROM test_tab"); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c), count(d = 999) FROM test_tab"); is($result, qq(2|0|0), 'check initial data was copied to subscriber'); # a small (non-streamed) transaction with DDL and DML -$node_publisher->safe_psql('postgres', q{ +$node_publisher->safe_psql( + 'postgres', q{ BEGIN; INSERT INTO test_tab VALUES (3, md5(3::text)); ALTER TABLE test_tab ADD COLUMN c INT; @@ -60,7 +66,8 @@ }); # large (streamed) transaction with DDL and DML -$node_publisher->safe_psql('postgres', q{ +$node_publisher->safe_psql( + 'postgres', q{ BEGIN; INSERT INTO test_tab SELECT i, md5(i::text), -i FROM generate_series(5, 1000) s(i); ALTER TABLE test_tab ADD COLUMN d INT; @@ -70,7 +77,8 @@ }); # a small (non-streamed) transaction with DDL and DML -$node_publisher->safe_psql('postgres', q{ +$node_publisher->safe_psql( + 'postgres', q{ BEGIN; INSERT INTO test_tab VALUES (2001, md5(2001::text), -2001, 2*2001); ALTER TABLE test_tab ADD COLUMN e INT; @@ -82,13 +90,17 @@ $node_publisher->wait_for_catchup($appname); $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c), count(d), count(e) FROM test_tab"); -is($result, qq(2002|1999|1002|1), 'check data was copied to subscriber in streaming mode and extra columns contain local defaults'); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c), count(d), count(e) FROM test_tab"); +is($result, qq(2002|1999|1002|1), + 'check data was copied to subscriber in streaming mode and extra columns contain local defaults' +); # A large (streamed) transaction with DDL and DML. One of the DDL is performed # after DML to ensure that we invalidate the schema sent for test_tab so that # the next transaction has to send the schema again. -$node_publisher->safe_psql('postgres', q{ +$node_publisher->safe_psql( + 'postgres', q{ BEGIN; INSERT INTO test_tab SELECT i, md5(i::text), -i, 2*i, -3*i FROM generate_series(2003,5000) s(i); ALTER TABLE test_tab ADD COLUMN f INT; @@ -97,7 +109,8 @@ # A small transaction that won't get streamed. This is just to ensure that we # send the schema again to reflect the last column added in the previous test. -$node_publisher->safe_psql('postgres', q{ +$node_publisher->safe_psql( + 'postgres', q{ BEGIN; INSERT INTO test_tab SELECT i, md5(i::text), -i, 2*i, -3*i, 4*i FROM generate_series(5001,5005) s(i); COMMIT; @@ -106,8 +119,11 @@ $node_publisher->wait_for_catchup($appname); $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c), count(d), count(e), count(f) FROM test_tab"); -is($result, qq(5005|5002|4005|3004|5), 'check data was copied to subscriber for both streaming and non-streaming transactions'); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c), count(d), count(e), count(f) FROM test_tab"); +is($result, qq(5005|5002|4005|3004|5), + 'check data was copied to subscriber for both streaming and non-streaming transactions' +); $node_subscriber->stop; $node_publisher->stop; diff --git a/src/test/subscription/t/018_stream_subxact_abort.pl b/src/test/subscription/t/018_stream_subxact_abort.pl index aafb555ada547..7fc60b5bde8b9 100644 --- a/src/test/subscription/t/018_stream_subxact_abort.pl +++ b/src/test/subscription/t/018_stream_subxact_abort.pl @@ -11,7 +11,8 @@ # Create publisher node my $node_publisher = get_new_node('publisher'); $node_publisher->init(allows_streaming => 'logical'); -$node_publisher->append_conf('postgresql.conf', 'logical_decoding_work_mem = 64kB'); +$node_publisher->append_conf('postgresql.conf', + 'logical_decoding_work_mem = 64kB'); $node_publisher->start; # Create subscriber node @@ -26,31 +27,35 @@ "INSERT INTO test_tab VALUES (1, 'foo'), (2, 'bar')"); # Setup structure on subscriber -$node_subscriber->safe_psql('postgres', "CREATE TABLE test_tab (a int primary key, b text, c INT, d INT, e INT)"); +$node_subscriber->safe_psql('postgres', + "CREATE TABLE test_tab (a int primary key, b text, c INT, d INT, e INT)"); # Setup logical replication my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres'; -$node_publisher->safe_psql('postgres', "CREATE PUBLICATION tap_pub FOR TABLE test_tab"); +$node_publisher->safe_psql('postgres', + "CREATE PUBLICATION tap_pub FOR TABLE test_tab"); my $appname = 'tap_sub'; $node_subscriber->safe_psql('postgres', -"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" + "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" ); $node_publisher->wait_for_catchup($appname); # Also wait for initial table sync to finish my $synced_query = -"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');"; + "SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');"; $node_subscriber->poll_query_until('postgres', $synced_query) or die "Timed out while waiting for subscriber to synchronize data"; my $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c) FROM test_tab"); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c) FROM test_tab"); is($result, qq(2|0), 'check initial data was copied to subscriber'); # large (streamed) transaction with DDL, DML and ROLLBACKs -$node_publisher->safe_psql('postgres', q{ +$node_publisher->safe_psql( + 'postgres', q{ BEGIN; INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(3,500) s(i); SAVEPOINT s1; @@ -73,12 +78,16 @@ $node_publisher->wait_for_catchup($appname); $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c) FROM test_tab"); -is($result, qq(2000|0), 'check rollback to savepoint was reflected on subscriber and extra columns contain local defaults'); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c) FROM test_tab"); +is($result, qq(2000|0), + 'check rollback to savepoint was reflected on subscriber and extra columns contain local defaults' +); # large (streamed) transaction with subscriber receiving out of order # subtransaction ROLLBACKs -$node_publisher->safe_psql('postgres', q{ +$node_publisher->safe_psql( + 'postgres', q{ BEGIN; INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(4001,4500) s(i); SAVEPOINT s1; @@ -96,11 +105,14 @@ $node_publisher->wait_for_catchup($appname); $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c) FROM test_tab"); -is($result, qq(2500|0), 'check rollback to savepoint was reflected on subscriber'); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c) FROM test_tab"); +is($result, qq(2500|0), + 'check rollback to savepoint was reflected on subscriber'); # large (streamed) transaction with subscriber receiving rollback -$node_publisher->safe_psql('postgres', q{ +$node_publisher->safe_psql( + 'postgres', q{ BEGIN; INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(8501,9000) s(i); SAVEPOINT s1; @@ -113,7 +125,8 @@ $node_publisher->wait_for_catchup($appname); $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c) FROM test_tab"); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c) FROM test_tab"); is($result, qq(2500|0), 'check rollback was reflected on subscriber'); $node_subscriber->stop; diff --git a/src/test/subscription/t/019_stream_subxact_ddl_abort.pl b/src/test/subscription/t/019_stream_subxact_ddl_abort.pl index 517a26342baf7..81149b86a998f 100644 --- a/src/test/subscription/t/019_stream_subxact_ddl_abort.pl +++ b/src/test/subscription/t/019_stream_subxact_ddl_abort.pl @@ -12,7 +12,8 @@ # Create publisher node my $node_publisher = get_new_node('publisher'); $node_publisher->init(allows_streaming => 'logical'); -$node_publisher->append_conf('postgresql.conf', 'logical_decoding_work_mem = 64kB'); +$node_publisher->append_conf('postgresql.conf', + 'logical_decoding_work_mem = 64kB'); $node_publisher->start; # Create subscriber node @@ -27,31 +28,35 @@ "INSERT INTO test_tab VALUES (1, 'foo'), (2, 'bar')"); # Setup structure on subscriber -$node_subscriber->safe_psql('postgres', "CREATE TABLE test_tab (a int primary key, b text, c INT, d INT, e INT)"); +$node_subscriber->safe_psql('postgres', + "CREATE TABLE test_tab (a int primary key, b text, c INT, d INT, e INT)"); # Setup logical replication my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres'; -$node_publisher->safe_psql('postgres', "CREATE PUBLICATION tap_pub FOR TABLE test_tab"); +$node_publisher->safe_psql('postgres', + "CREATE PUBLICATION tap_pub FOR TABLE test_tab"); my $appname = 'tap_sub'; $node_subscriber->safe_psql('postgres', -"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" + "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" ); $node_publisher->wait_for_catchup($appname); # Also wait for initial table sync to finish my $synced_query = -"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');"; + "SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');"; $node_subscriber->poll_query_until('postgres', $synced_query) or die "Timed out while waiting for subscriber to synchronize data"; my $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c) FROM test_tab"); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c) FROM test_tab"); is($result, qq(2|0), 'check initial data was copied to subscriber'); # large (streamed) transaction with DDL, DML and ROLLBACKs -$node_publisher->safe_psql('postgres', q{ +$node_publisher->safe_psql( + 'postgres', q{ BEGIN; INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(3,500) s(i); ALTER TABLE test_tab ADD COLUMN c INT; @@ -72,8 +77,11 @@ $node_publisher->wait_for_catchup($appname); $result = - $node_subscriber->safe_psql('postgres', "SELECT count(*), count(c) FROM test_tab"); -is($result, qq(1000|500), 'check rollback to savepoint was reflected on subscriber and extra columns contain local defaults'); + $node_subscriber->safe_psql('postgres', + "SELECT count(*), count(c) FROM test_tab"); +is($result, qq(1000|500), + 'check rollback to savepoint was reflected on subscriber and extra columns contain local defaults' +); $node_subscriber->stop; $node_publisher->stop; diff --git a/src/test/subscription/t/020_messages.pl b/src/test/subscription/t/020_messages.pl index e5d48ec8a0062..0940d0f45f287 100644 --- a/src/test/subscription/t/020_messages.pl +++ b/src/test/subscription/t/020_messages.pl @@ -28,7 +28,8 @@ # Setup logical replication my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres'; -$node_publisher->safe_psql('postgres', "CREATE PUBLICATION tap_pub FOR TABLE tab_test"); +$node_publisher->safe_psql('postgres', + "CREATE PUBLICATION tap_pub FOR TABLE tab_test"); $node_subscriber->safe_psql('postgres', "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub" @@ -55,7 +56,7 @@ )); # 66 77 67 == B M C == BEGIN MESSAGE COMMIT -is($result, qq(66 +is( $result, qq(66 77 67), 'messages on slot are B M C with message option'); @@ -82,9 +83,10 @@ )); # 66 67 == B C == BEGIN COMMIT -is($result, qq(66 +is( $result, qq(66 67), - 'option messages defaults to false so message (M) is not available on slot'); + 'option messages defaults to false so message (M) is not available on slot' +); $node_subscriber->safe_psql('postgres', "ALTER SUBSCRIPTION tap_sub ENABLE"); $node_publisher->wait_for_catchup('tap_sub'); @@ -99,7 +101,8 @@ $node_publisher->safe_psql('postgres', "INSERT INTO tab_test VALUES (1)"); my $message_lsn = $node_publisher->safe_psql('postgres', - "SELECT pg_logical_emit_message(false, 'pgoutput', 'a non-transactional message')"); + "SELECT pg_logical_emit_message(false, 'pgoutput', 'a non-transactional message')" +); $node_publisher->safe_psql('postgres', "INSERT INTO tab_test VALUES (2)"); @@ -151,7 +154,7 @@ 'messages', 'true') )); -is($result, qq(77|0 +is( $result, qq(77|0 77|0), 'non-transactional message on slot from aborted transaction is M'); diff --git a/src/test/subscription/t/100_bugs.pl b/src/test/subscription/t/100_bugs.pl index 76a9a90bcb9c5..21eabceb2f6eb 100644 --- a/src/test/subscription/t/100_bugs.pl +++ b/src/test/subscription/t/100_bugs.pl @@ -137,10 +137,9 @@ INSERT INTO t SELECT * FROM generate_series(1, $rows); INSERT INTO t2 SELECT * FROM generate_series(1, $rows); }); -$node_twoways->safe_psql( - 'd1', 'ALTER PUBLICATION testpub ADD TABLE t2'); -$node_twoways->safe_psql( - 'd2', 'ALTER SUBSCRIPTION testsub REFRESH PUBLICATION'); +$node_twoways->safe_psql('d1', 'ALTER PUBLICATION testpub ADD TABLE t2'); +$node_twoways->safe_psql('d2', + 'ALTER SUBSCRIPTION testsub REFRESH PUBLICATION'); # We cannot rely solely on wait_for_catchup() here; it isn't sufficient # when tablesync workers might still be running. So in addition to that, diff --git a/src/tools/msvc/Install.pm b/src/tools/msvc/Install.pm index 2ff6b0784fa9e..de22c9ba2c7ca 100644 --- a/src/tools/msvc/Install.pm +++ b/src/tools/msvc/Install.pm @@ -371,8 +371,7 @@ sub GenerateTimezoneFiles print "Generating timezone files..."; - my @args = ( - "$conf/zic/zic", '-d', "$target/share/timezone"); + my @args = ("$conf/zic/zic", '-d', "$target/share/timezone"); foreach (@tzfiles) { my $tzfile = $_; diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm index 5a1ab33b3d461..233ddbf4c25ca 100644 --- a/src/tools/msvc/Mkvcbuild.pm +++ b/src/tools/msvc/Mkvcbuild.pm @@ -40,9 +40,9 @@ my @contrib_uselibpq = ('dblink', 'oid2name', 'postgres_fdw', 'vacuumlo', 'libpq_pipeline'); my @contrib_uselibpgport = ('libpq_pipeline', 'oid2name', 'vacuumlo'); my @contrib_uselibpgcommon = ('libpq_pipeline', 'oid2name', 'vacuumlo'); -my $contrib_extralibs = { 'libpq_pipeline' => ['ws2_32.lib'] }; -my $contrib_extraincludes = { 'dblink' => ['src/backend'] }; -my $contrib_extrasource = { +my $contrib_extralibs = { 'libpq_pipeline' => ['ws2_32.lib'] }; +my $contrib_extraincludes = { 'dblink' => ['src/backend'] }; +my $contrib_extrasource = { 'cube' => [ 'contrib/cube/cubescan.l', 'contrib/cube/cubeparse.y' ], 'seg' => [ 'contrib/seg/segscan.l', 'contrib/seg/segparse.y' ], }; @@ -58,15 +58,18 @@ my @contrib_excludes = ( # Set of variables for frontend modules my $frontend_defines = { 'initdb' => 'FRONTEND' }; -my @frontend_uselibpq = ('pg_amcheck', 'pg_ctl', 'pg_upgrade', 'pgbench', 'psql', 'initdb'); +my @frontend_uselibpq = + ('pg_amcheck', 'pg_ctl', 'pg_upgrade', 'pgbench', 'psql', 'initdb'); my @frontend_uselibpgport = ( - 'pg_amcheck', 'pg_archivecleanup', 'pg_test_fsync', - 'pg_test_timing', 'pg_upgrade', - 'pg_waldump', 'pgbench'); + 'pg_amcheck', 'pg_archivecleanup', + 'pg_test_fsync', 'pg_test_timing', + 'pg_upgrade', 'pg_waldump', + 'pgbench'); my @frontend_uselibpgcommon = ( - 'pg_amcheck', 'pg_archivecleanup', 'pg_test_fsync', - 'pg_test_timing', 'pg_upgrade', - 'pg_waldump', 'pgbench'); + 'pg_amcheck', 'pg_archivecleanup', + 'pg_test_fsync', 'pg_test_timing', + 'pg_upgrade', 'pg_waldump', + 'pgbench'); my $frontend_extralibs = { 'initdb' => ['ws2_32.lib'], 'pg_amcheck' => ['ws2_32.lib'], diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index 85af28fe0bd09..3c5fe5dddcbd2 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -184,7 +184,7 @@ sub GenerateFiles elsif (/\bAC_DEFINE\(OPENSSL_API_COMPAT, \[([0-9xL]+)\]/) { $ac_define_openssl_api_compat_found = 1; - $openssl_api_compat = $1; + $openssl_api_compat = $1; } } close($c); diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index a09b60fc858e5..1852c341091ef 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -109,8 +109,8 @@ sub installcheck_internal # for backwards compatibility, "serial" runs the tests in # parallel_schedule one by one. my $maxconn = $maxconn; - $maxconn = "--max-connections=1" if $schedule eq 'serial'; - $schedule = 'parallel' if $schedule eq 'serial'; + $maxconn = "--max-connections=1" if $schedule eq 'serial'; + $schedule = 'parallel' if $schedule eq 'serial'; my @args = ( "../../../$Config/pg_regress/pg_regress", @@ -141,8 +141,8 @@ sub check # for backwards compatibility, "serial" runs the tests in # parallel_schedule one by one. my $maxconn = $maxconn; - $maxconn = "--max-connections=1" if $schedule eq 'serial'; - $schedule = 'parallel' if $schedule eq 'serial'; + $maxconn = "--max-connections=1" if $schedule eq 'serial'; + $schedule = 'parallel' if $schedule eq 'serial'; InstallTemp(); chdir "${topdir}/src/test/regress"; @@ -225,9 +225,9 @@ sub tap_check # Fetch and adjust PROVE_TESTS, applying glob() to each element # defined to build a list of all the tests matching patterns. - my $prove_tests_val = $ENV{PROVE_TESTS} || "t/*.pl"; + my $prove_tests_val = $ENV{PROVE_TESTS} || "t/*.pl"; my @prove_tests_array = split(/\s+/, $prove_tests_val); - my @prove_tests = (); + my @prove_tests = (); foreach (@prove_tests_array) { push(@prove_tests, glob($_)); @@ -235,7 +235,7 @@ sub tap_check # Fetch and adjust PROVE_FLAGS, handling multiple arguments. my $prove_flags_val = $ENV{PROVE_FLAGS} || ""; - my @prove_flags = split(/\s+/, $prove_flags_val); + my @prove_flags = split(/\s+/, $prove_flags_val); my @args = ("prove", @flags, @prove_tests, @prove_flags); @@ -598,7 +598,7 @@ sub upgradecheck $ENV{PGDATA} = "$data.old"; my $outputdir = "$tmp_root/regress"; my @EXTRA_REGRESS_OPTS = ("--outputdir=$outputdir"); - mkdir "$outputdir" || die $!; + mkdir "$outputdir" || die $!; my $logdir = "$topdir/src/bin/pg_upgrade/log"; rmtree($logdir); diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 1196febfa2512..abdb08319ca91 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -49,7 +49,9 @@ AggStatePerHash AggStatePerPhase AggStatePerTrans AggStrategy +AggTransInfo Aggref +AggregateInstrumentation AlenState Alias AllocBlock @@ -100,10 +102,11 @@ AlterTypeStmt AlterUserMappingStmt AlteredTableInfo AlternativeSubPlan -AlternativeSubPlanState +AmcheckOptions AnalyzeAttrComputeStatsFunc AnalyzeAttrFetchFunc AnalyzeForeignTable_function +AnlExprData AnlIndexData AnyArrayType Append @@ -132,9 +135,11 @@ ArrayIterator ArrayMapState ArrayMetaState ArrayParseState +ArraySubWorkspace ArrayType AsyncQueueControl AsyncQueueEntry +AsyncRequest AttInMetadata AttStatsSlot AttoptCacheEntry @@ -172,6 +177,7 @@ BTCycleId BTDedupInterval BTDedupState BTDedupStateData +BTDeletedPageData BTIndexStat BTInsertState BTInsertStateData @@ -185,6 +191,7 @@ BTPageOpaqueData BTPageStat BTPageState BTParallelScanDesc +BTPendingFSM BTScanInsert BTScanInsertData BTScanOpaque @@ -202,7 +209,9 @@ BTVacState BTVacuumPosting BTVacuumPostingData BTWriteState +BUF_MEM BYTE +BY_HANDLE_FILE_INFORMATION Backend BackendId BackendParameters @@ -223,6 +232,7 @@ BernoulliSamplerData BgWorkerStartTime BgwHandleStatus BinaryArithmFunc +BindParamCbData BipartiteMatchState BitmapAnd BitmapAndPath @@ -247,7 +257,9 @@ BlockSamplerData BlockedProcData BlockedProcsData BloomBuildState +BloomFilter BloomMetaPageData +BloomOpaque BloomOptions BloomPageOpaque BloomPageOpaqueData @@ -311,7 +323,9 @@ COP CRITICAL_SECTION CRSSnapshotAction CState +CTECycleClause CTEMaterialize +CTESearchClause CV CachedExpression CachedPlan @@ -341,6 +355,7 @@ CkptSortItem CkptTsStatus ClientAuthentication_hook_type ClientCertMode +ClientCertName ClientData ClonePtrType ClosePortalStmt @@ -408,6 +423,7 @@ ConnParams ConnStatusType ConnType ConnectionStateEnum +ConnsAllowedState ConsiderSplitContext Const ConstrCheck @@ -424,12 +440,16 @@ ConversionLocation ConvertRowtypeExpr CookedConstraint CopyDest +CopyFormatOptions +CopyFromState +CopyFromStateData CopyInsertMethod CopyMultiInsertBuffer CopyMultiInsertInfo -CopyState -CopyStateData +CopySource CopyStmt +CopyToState +CopyToStateData Cost CostSelector Counters @@ -500,6 +520,7 @@ DSA DWORD DataDumperPtr DataPageDeleteStack +DatabaseInfo DateADT Datum DatumTupleFields @@ -533,6 +554,7 @@ DirectoryMethodFile DisableTimeoutParams DiscardMode DiscardStmt +DistanceValue DistinctExpr DoStmt DocRepresentation @@ -596,6 +618,7 @@ EquivalenceMember ErrorContextCallback ErrorData EstimateDSMForeignScan_function +EstimationInfo EventTriggerCacheEntry EventTriggerCacheItem EventTriggerCacheStateType @@ -607,9 +630,12 @@ ExceptionLabelMap ExceptionMap ExclusiveBackupState ExecAuxRowMark +ExecEvalBoolSubroutine ExecEvalSubroutine +ExecForeignBatchInsert_function ExecForeignDelete_function ExecForeignInsert_function +ExecForeignTruncate_function ExecForeignUpdate_function ExecParallelEstimateContext ExecParallelInitializeDSMContext @@ -629,6 +655,7 @@ ExecutorStart_hook_type ExpandedArrayHeader ExpandedObjectHeader ExpandedObjectMethods +ExpandedRange ExpandedRecordFieldInfo ExpandedRecordHeader ExplainDirectModify_function @@ -647,6 +674,7 @@ ExprContext_CB ExprDoneCond ExprEvalOp ExprEvalOpLookup +ExprEvalRowtypeCache ExprEvalStep ExprState ExprStateEvalFunc @@ -661,6 +689,8 @@ FDWCollateState FD_SET FILE FILETIME +FILE_INFORMATION_CLASS +FILE_STANDARD_INFORMATION FSMAddress FSMPage FSMPageData @@ -679,6 +709,7 @@ FileFdwPlanState FileNameMap FileTag FinalPathExtraData +FindColsContext FindSplitData FindSplitStrat FixedParallelExecutorState @@ -695,6 +726,9 @@ ForEachState ForFiveState ForFourState ForThreeState +ForeignAsyncConfigureWait_function +ForeignAsyncNotify_function +ForeignAsyncRequest_function ForeignDataWrapper ForeignKeyCacheInfo ForeignKeyOptInfo @@ -838,7 +872,6 @@ FuncDetailCode FuncExpr FuncInfo FuncLookupError -Function FunctionCallInfo FunctionCallInfoBaseData FunctionParameter @@ -890,6 +923,7 @@ GenericCosts GenericXLogState GeqoPrivateData GetForeignJoinPaths_function +GetForeignModifyBatchSize_function GetForeignPaths_function GetForeignPlan_function GetForeignRelSize_function @@ -924,12 +958,13 @@ GinStatsData GinTernaryValue GinTupleCollector GinVacuumState -GistBufferingMode +GistBuildMode GistEntryVector GistHstoreOptions GistInetKey GistNSN GistOptBufferingMode +GistSortedBuildPageState GistSplitUnion GistSplitVector GistTsVectorOptions @@ -940,6 +975,7 @@ GrantRoleStmt GrantStmt GrantTargetType Group +GroupClause GroupPath GroupPathExtraData GroupResultPath @@ -980,6 +1016,7 @@ HEntry HIST_ENTRY HKEY HLOCAL +HMAC_CTX HMODULE HOldEntry HRESULT @@ -1041,6 +1078,7 @@ INFIX INT128 INTERFACE_INFO IOFuncSelector +IO_STATUS_BLOCK IPCompareMethod ITEM IV @@ -1073,6 +1111,8 @@ IndexBulkDeleteCallback IndexBulkDeleteResult IndexClause IndexClauseSet +IndexDeleteCounts +IndexDeletePrefetchState IndexElem IndexFetchHeapData IndexFetchTableData @@ -1099,7 +1139,6 @@ InferenceElem InfoItem InhInfo InheritableSocket -InheritanceKind InitSampleScan_function InitializeDSMForeignScan_function InitializeWorkerForeignScan_function @@ -1121,6 +1160,7 @@ IpcMemoryKey IpcMemoryState IpcSemaphoreId IpcSemaphoreKey +IsForeignPathAsyncCapable_function IsForeignRelUpdatable_function IsForeignScanParallelSafe_function IspellDict @@ -1204,6 +1244,7 @@ JsonbParseState JsonbSubWorkspace JsonbTypeCategory JsonbValue +JumbleState JunkFilter KeyArray KeySuffix @@ -1223,7 +1264,6 @@ LLVMJitHandle LLVMMemoryBufferRef LLVMModuleRef LLVMOrcJITStackRef -LLVMOrcLookupStateRef LLVMOrcModuleHandle LLVMOrcTargetAddress LLVMPassManagerBuilderRef @@ -1252,20 +1292,21 @@ LPDWORD LPSECURITY_ATTRIBUTES LPSERVICE_STATUS LPSTR +LPTHREAD_START_ROUTINE LPTSTR LPVOID LPWSTR LSEG LUID LVDeadTuples +LVPagePruneState LVParallelState -LVRelStats +LVRelState LVSavedErrInfo LVShared LVSharedIndStats LWLock LWLockHandle -LWLockMinimallyPadded LWLockMode LWLockPadded LabelProvider @@ -1298,6 +1339,7 @@ LocalBufferLookupEnt LocalPgBackendStatus LocalTransactionId LocationIndex +LocationLen LockAcquireResult LockClauseStrength LockData @@ -1318,24 +1360,25 @@ LockingClause LogOpts LogStmtLevel LogicalDecodeBeginCB +LogicalDecodeBeginPrepareCB LogicalDecodeChangeCB LogicalDecodeCommitCB -LogicalDecodeFilterPrepareCB -LogicalDecodeBeginPrepareCB -LogicalDecodePrepareCB LogicalDecodeCommitPreparedCB -LogicalDecodeRollbackPreparedCB LogicalDecodeFilterByOriginCB +LogicalDecodeFilterPrepareCB LogicalDecodeMessageCB +LogicalDecodePrepareCB +LogicalDecodeRollbackPreparedCB LogicalDecodeShutdownCB -LogicalDecodeStreamStartCB -LogicalDecodeStreamStopCB +LogicalDecodeStartupCB LogicalDecodeStreamAbortCB -LogicalDecodeStreamPrepareCB -LogicalDecodeStreamCommitCB LogicalDecodeStreamChangeCB +LogicalDecodeStreamCommitCB LogicalDecodeStreamMessageCB -LogicalDecodeStartupCB +LogicalDecodeStreamPrepareCB +LogicalDecodeStreamStartCB +LogicalDecodeStreamStopCB +LogicalDecodeStreamTruncateCB LogicalDecodeTruncateCB LogicalDecodingContext LogicalErrorCallbackState @@ -1346,6 +1389,7 @@ LogicalOutputPluginWriterWrite LogicalRepBeginData LogicalRepCommitData LogicalRepCtxStruct +LogicalRepMsgType LogicalRepPartMapEntry LogicalRepRelId LogicalRepRelMapEntry @@ -1353,7 +1397,6 @@ LogicalRepRelation LogicalRepTupleData LogicalRepTyp LogicalRepWorker -LogicalRepWorkerId LogicalRewriteMappingData LogicalTape LogicalTapeSet @@ -1367,6 +1410,7 @@ MEMORY_BASIC_INFORMATION MINIDUMPWRITEDUMP MINIDUMP_TYPE MJEvalResult +MTTargetRelLookup MVDependencies MVDependency MVNDistinct @@ -1394,10 +1438,12 @@ MetaCommand MinMaxAggInfo MinMaxAggPath MinMaxExpr +MinMaxMultiOptions MinMaxOp MinimalTuple MinimalTupleData MinimalTupleTableSlot +MinmaxMultiOpaque MinmaxOpaque ModifyTable ModifyTablePath @@ -1417,6 +1463,7 @@ MultirangeParseState MultirangeType NDBOX NODE +NTSTATUS NUMCacheEntry NUMDesc NUMProc @@ -1486,6 +1533,7 @@ Oid OidOptions OkeysState OldSnapshotControlData +OldSnapshotTimeMapping OldToNewMapping OldToNewMappingData OnCommitAction @@ -1521,6 +1569,7 @@ PATH PBOOL PCtxtHandle PFN +PFN_NTQUERYINFORMATIONFILE PGAlignedBlock PGAlignedXLogBlock PGAsyncStatusType @@ -1556,8 +1605,9 @@ PGQueryClass PGRUsage PGSemaphore PGSemaphoreData -PGSetenvStatusType PGShmemHeader +PGTargetServerType +PGTernaryBool PGTransactionStatusType PGVerbosity PG_Locale_Strategy @@ -1575,12 +1625,12 @@ PGresAttValue PGresParamDesc PGresult PGresult_data -PgArchData PHANDLE +PIO_STATUS_BLOCK PLAINTREE +PLAssignStmt PLUID_AND_ATTRIBUTES PLcword -PLpgSQL_arrayelem PLpgSQL_case_when PLpgSQL_condition PLpgSQL_datum @@ -1725,6 +1775,8 @@ Pairs ParallelAppendState ParallelBitmapHeapState ParallelBlockTableScanDesc +ParallelBlockTableScanWorker +ParallelBlockTableScanWorkerData ParallelCompletionPtr ParallelContext ParallelExecutorInfo @@ -1736,6 +1788,7 @@ ParallelIndexScanDesc ParallelReadyList ParallelSlot ParallelSlotArray +ParallelSlotResultHandler ParallelState ParallelTableScanDesc ParallelTableScanDescData @@ -1792,7 +1845,6 @@ PartitionPruningData PartitionRangeBound PartitionRangeDatum PartitionRangeDatumKind -PartitionRoutingInfo PartitionScheme PartitionSpec PartitionTupleRouting @@ -1807,6 +1859,8 @@ PathHashStack PathKey PathKeysComparison PathTarget +PatternInfo +PatternInfoArray Pattern_Prefix_Status Pattern_Type PendingFsyncEntry @@ -1818,6 +1872,7 @@ PerlInterpreter Perl_check_t Perl_ppaddr_t Permutation +PgArchData PgBackendGSSStatus PgBackendSSLStatus PgBackendStatus @@ -1830,6 +1885,7 @@ PgBenchValue PgBenchValueType PgChecksumMode PgFdwAnalyzeState +PgFdwConnState PgFdwDirectModifyState PgFdwModifyState PgFdwOption @@ -1846,10 +1902,12 @@ PgStat_FunctionEntry PgStat_GlobalStats PgStat_Msg PgStat_MsgAnalyze +PgStat_MsgAnlAncestors PgStat_MsgArchiver PgStat_MsgAutovacStart PgStat_MsgBgWriter PgStat_MsgChecksumFailure +PgStat_MsgConn PgStat_MsgDeadlock PgStat_MsgDropdb PgStat_MsgDummy @@ -1930,7 +1988,6 @@ PredicateLockTargetType PrefetchBufferResult PrepParallelRestorePtrType PrepareStmt -PreparedParamsData PreparedStatement PresortedKeyData PrewarmType @@ -1949,6 +2006,7 @@ ProcSignalHeader ProcSignalReason ProcSignalSlot ProcState +ProcWaitStatus ProcessUtilityContext ProcessUtility_hook_type ProcessingMode @@ -2009,6 +2067,7 @@ QueryRepresentationOperand QuerySource QueueBackendStatus QueuePosition +QuitSignalReason RBTNode RBTOrderControl RBTree @@ -2040,7 +2099,9 @@ RangeTblRef RangeType RangeVar RangeVarGetRelidCallback +Ranges RawColumnDefault +RawParseMode RawStmt ReInitializeDSMForeignScan_function ReScanForeignScan_function @@ -2055,6 +2116,7 @@ RecordCacheEntry RecordCompareData RecordIOData RecoveryLockListsEntry +RecoveryPauseState RecoveryState RecoveryTargetTimeLineGoal RecoveryTargetType @@ -2089,6 +2151,7 @@ RelToCluster RelabelType Relation RelationData +RelationInfo RelationPtr RelationSyncEntry RelcacheCallbackFunction @@ -2107,10 +2170,21 @@ ReorderBufferApplyTruncateCB ReorderBufferBeginCB ReorderBufferChange ReorderBufferCommitCB +ReorderBufferCommitPreparedCB ReorderBufferDiskChange ReorderBufferIterTXNEntry ReorderBufferIterTXNState ReorderBufferMessageCB +ReorderBufferPrepareCB +ReorderBufferRollbackPreparedCB +ReorderBufferStreamAbortCB +ReorderBufferStreamChangeCB +ReorderBufferStreamCommitCB +ReorderBufferStreamMessageCB +ReorderBufferStreamPrepareCB +ReorderBufferStreamStartCB +ReorderBufferStreamStopCB +ReorderBufferStreamTruncateCB ReorderBufferTXN ReorderBufferTXNByIdEnt ReorderBufferToastEnt @@ -2144,9 +2218,17 @@ RestoreOptions RestorePass RestrictInfo Result +ResultCache +ResultCacheEntry +ResultCacheInstrumentation +ResultCacheKey +ResultCachePath +ResultCacheState +ResultCacheTuple ResultRelInfo ResultState ReturnSetInfo +ReturnStmt RevmapContents RewriteMappingDataEntry RewriteMappingFile @@ -2163,6 +2245,7 @@ RollupData RowCompareExpr RowCompareType RowExpr +RowIdentityVarInfo RowMarkClause RowMarkType RowSecurityDesc @@ -2182,9 +2265,6 @@ SERIALIZABLEXIDTAG SERVICE_STATUS SERVICE_STATUS_HANDLE SERVICE_TABLE_ENTRY -SHA1_CTX -SHA256_CTX -SHA512_CTX SHM_QUEUE SID_AND_ATTRIBUTES SID_IDENTIFIER_AUTHORITY @@ -2197,7 +2277,11 @@ SMgrSortArray SOCKADDR SOCKET SPELL +SPICallbackArg +SPIExecuteOptions +SPIParseOpenOptions SPIPlanPtr +SPIPrepareOptions SPITupleTable SPLITCOST SPNode @@ -2207,6 +2291,7 @@ SQLCmd SQLDropObject SQLFunctionCache SQLFunctionCachePtr +SQLFunctionParseInfo SQLFunctionParseInfoPtr SQLValueFunction SQLValueFunctionOp @@ -2215,14 +2300,15 @@ SSLExtensionInfoContext SSL_CTX STARTUPINFO STRLEN -ST_ELEMENT_TYPE -ST_POINTER_TYPE SV +SYNCHRONIZATION_BARRIER SampleScan SampleScanGetSampleSize_function SampleScanState SamplerRandomState ScalarArrayOpExpr +ScalarArrayOpExprHashEntry +ScalarArrayOpExprHashTable ScalarIOData ScalarItem ScalarMCVItem @@ -2254,11 +2340,13 @@ SerCommitSeqNo SerialControl SerializableXactHandle SerializedActiveRelMaps +SerializedRanges SerializedReindexState SerializedSnapshotData SerializedTransactionState Session SessionBackupState +SessionEndType SetConstraintState SetConstraintStateData SetConstraintTriggerData @@ -2272,9 +2360,11 @@ SetOpStatePerGroup SetOpStrategy SetOperation SetOperationStmt +SetQuantifier SetToDefault SetupWorkerPtrType ShDependObjectInfo +SharedAggInfo SharedBitmapState SharedDependencyObjectType SharedDependencyType @@ -2293,6 +2383,7 @@ SharedJitInstrumentation SharedRecordTableEntry SharedRecordTableKey SharedRecordTypmodRegistry +SharedResultCacheInfo SharedSortInfo SharedTuplestore SharedTuplestoreAccessor @@ -2385,6 +2476,7 @@ SpinDelayStatus SplitInterval SplitLR SplitPoint +SplitTextOutputData SplitVar SplitedPageLayout StackElem @@ -2392,7 +2484,6 @@ StartBlobPtrType StartBlobsPtrType StartDataPtrType StartReplicationCmd -StartupPacket StartupStatusEnum StatEntry StatExtEntry @@ -2400,7 +2491,9 @@ StatMsgType StateFileChunk StatisticExtInfo Stats +StatsBuildData StatsData +StatsElem StatsExtInfo StdAnalyzeData StdRdOptions @@ -2422,10 +2515,13 @@ SubXactCallback SubXactCallbackItem SubXactEvent SubXactInfo -SubplanResultRelHashElem SubqueryScan SubqueryScanPath SubqueryScanState +SubscriptExecSetup +SubscriptExecSteps +SubscriptRoutines +SubscriptTransform SubscriptingRef SubscriptingRefState Subscription @@ -2442,6 +2538,7 @@ SyncRepConfigData SyncRepStandbyData SyncRequestHandler SyncRequestType +SysFKRelationship SysScanDesc SyscacheCallbackFunction SystemRowsSamplerData @@ -2457,6 +2554,9 @@ TBMStatus TBlockState TIDBitmap TM_FailureData +TM_IndexDelete +TM_IndexDeleteOp +TM_IndexStatus TM_Result TOKEN_DEFAULT_DACL TOKEN_INFORMATION_CLASS @@ -2502,6 +2602,7 @@ T_WorkerStatus TabStatHashEntry TabStatusArray TableAmRoutine +TableAttachInfo TableDataInfo TableFunc TableFuncRoutine @@ -2539,8 +2640,13 @@ TextPositionState TheLexeme TheSubstitute TidExpr +TidExprType TidHashKey +TidOpExpr TidPath +TidRangePath +TidRangeScan +TidRangeScanState TidScan TidScanState TimeADT @@ -2558,6 +2664,7 @@ TimestampTz TmFromChar TmToChar ToastAttrInfo +ToastCompressionId ToastTupleContext ToastedAttribute TocEntry @@ -2702,6 +2809,7 @@ ViewOptions ViewStmt VirtualTransactionId VirtualTupleTableSlot +VolatileFunctionStatus Vsrt WAIT_ORDER WALAvailability @@ -2716,7 +2824,6 @@ WCHAR WCOKind WFW_WaitOption WIDGET -WIN32_FILE_ATTRIBUTE_DATA WORD WORKSTATE WSABUF @@ -2825,8 +2932,8 @@ XactCallbackItem XactEvent XactLockTableWaitInfo XidBoundsViolation +XidCacheStatus XidCommitStatus -XidHorizonPrefetchState XidStatus XmlExpr XmlExprOp @@ -2844,12 +2951,16 @@ __CreateRestrictedToken __IsProcessInJob __QueryInformationJobObject __SetInformationJobObject +__time64_t +_dev_t +_ino_t _resultmap _stringlist -abs acquireLocksOnSubLinks_context adjust_appendrel_attrs_context +aff_regex_struct allocfunc +amadjustmembers_function ambeginscan_function ambuild_function ambuildempty_function @@ -2894,6 +3005,7 @@ bits32 bits8 bloom_filter brin_column_state +brin_serialize_callback_type bytea cached_re_str cashKEY @@ -2913,6 +3025,7 @@ coercion collation_cache_entry color colormaprange +compare_context config_var_value contain_aggs_of_level_context convert_testexpr_context @@ -2922,6 +3035,7 @@ core_yy_extra_type core_yyscan_t corrupt_items cost_qual_eval_context +cp_hash_func create_upper_paths_hook_type createdb_failure_params crosstab_HashEnt @@ -2990,6 +3104,7 @@ file_action_t file_entry_t file_type_t filehash_hash +filehash_iterator filemap_t fill_string_relopt finalize_primnode_context @@ -3023,7 +3138,6 @@ generate_series_numeric_fctx generate_series_timestamp_fctx generate_series_timestamptz_fctx generate_subscripts_fctx -get_agg_clause_costs_context get_attavgwidth_hook_type get_index_stats_hook_type get_relation_info_hook_type @@ -3097,8 +3211,8 @@ intset_internal_node intset_leaf_node intset_node intvKEY -itemIdSort -itemIdSortData +itemIdCompact +itemIdCompactData iterator jmp_buf join_search_hook_type @@ -3147,11 +3261,11 @@ manifest_wal_range map_variable_attnos_context max_parallel_hazard_context mb2wchar_with_len_converter +mbchar_verifier mbcharacter_incrementer mbdisplaylen_converter mblen_converter -mbverifier -md5_ctxt +mbstr_verifier metastring mix_data_t mixedStruct @@ -3214,6 +3328,7 @@ pg_enc pg_enc2gettext pg_enc2name pg_encname +pg_funcptr_t pg_gssinfo pg_hmac_ctx pg_int64 @@ -3236,9 +3351,11 @@ pg_time_usec_t pg_tz pg_tz_cache pg_tzenum +pg_unicode_decompinfo pg_unicode_decomposition pg_unicode_norminfo pg_unicode_normprops +pg_unicode_recompinfo pg_utf_to_local_combined pg_uuid_t pg_wc_probefunc @@ -3251,8 +3368,6 @@ pgsql_thing_t pgssEntry pgssGlobalStats pgssHashKey -pgssJumbleState -pgssLocationLen pgssSharedState pgssStoreKind pgssVersion @@ -3283,6 +3398,7 @@ pointer polymorphic_actuals pos_trgm post_parse_analyze_hook_type +postprocess_result_function pqbool pqsigfunc printQueryOpt @@ -3301,8 +3417,8 @@ proclist_head proclist_mutable_iter proclist_node promptStatus_t -pthread_attr_t pthread_barrier_t +pthread_cond_t pthread_key_t pthread_mutex_t pthread_once_t @@ -3314,6 +3430,7 @@ pull_varnos_context pull_vars_context pullup_replace_vars_context pushdown_safety_info +qc_hash_func qsort_arg_comparator qsort_comparator query_pathkeys_callback @@ -3353,6 +3470,8 @@ remoteDep rendezvousHashEntry replace_rte_variables_callback replace_rte_variables_context +resultcache_hash +resultcache_iterator ret_type rewind_source rewrite_event @@ -3361,6 +3480,7 @@ rm_detail_t role_auth_extra row_security_policy_hook_type rsv_callback +saophash_hash save_buffer scram_state scram_state_enum @@ -3432,12 +3552,13 @@ substitute_phv_relids_context svtype symbol tablespaceinfo -teReqs teSection temp_tablespaces_extra -test_function +test_re_flags +test_regex_ctx test_shm_mq_header test_spec +test_start_function text timeKEY time_t @@ -3515,7 +3636,6 @@ walrcv_startstreaming_fn wchar2mb_with_len_converter wchar_t win32_deadchild_waitinfo -win32_pthread wint_t worker_state worktable @@ -3538,7 +3658,6 @@ xl_btree_unlink_page xl_btree_update xl_btree_vacuum xl_clog_truncate -xl_commit_ts_set xl_commit_ts_truncate xl_dbase_create_rec xl_dbase_drop_rec From 14472442861ca95cc9158518acdedf740c4bff55 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 12 May 2021 13:36:06 -0400 Subject: [PATCH 291/671] Do pre-release housekeeping on catalog data. Run renumber_oids.pl to move high-numbered OIDs down, as per pre-beta tasks specified by RELEASE_CHANGES. For reference, the command was ./renumber_oids.pl --first-mapped-oid 8000 --target-oid 6150 --- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_authid.dat | 6 +-- src/include/catalog/pg_collation.h | 2 +- src/include/catalog/pg_opfamily.dat | 4 +- src/include/catalog/pg_proc.dat | 84 ++++++++++++++--------------- src/include/catalog/pg_type.dat | 12 ++--- 6 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index c8d445e4d9c99..d5385d4c55020 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202105091 +#define CATALOG_VERSION_NO 202105121 #endif diff --git a/src/include/catalog/pg_authid.dat b/src/include/catalog/pg_authid.dat index ed5916330c9d4..3da68016b61ea 100644 --- a/src/include/catalog/pg_authid.dat +++ b/src/include/catalog/pg_authid.dat @@ -24,17 +24,17 @@ rolcreaterole => 't', rolcreatedb => 't', rolcanlogin => 't', rolreplication => 't', rolbypassrls => 't', rolconnlimit => '-1', rolpassword => '_null_', rolvaliduntil => '_null_' }, -{ oid => '8778', oid_symbol => 'ROLE_PG_DATABASE_OWNER', +{ oid => '6171', oid_symbol => 'ROLE_PG_DATABASE_OWNER', rolname => 'pg_database_owner', rolsuper => 'f', rolinherit => 't', rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f', rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1', rolpassword => '_null_', rolvaliduntil => '_null_' }, -{ oid => '9274', oid_symbol => 'ROLE_PG_READ_ALL_DATA', +{ oid => '6181', oid_symbol => 'ROLE_PG_READ_ALL_DATA', rolname => 'pg_read_all_data', rolsuper => 'f', rolinherit => 't', rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f', rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1', rolpassword => '_null_', rolvaliduntil => '_null_' }, -{ oid => '9275', oid_symbol => 'ROLE_PG_WRITE_ALL_DATA', +{ oid => '6182', oid_symbol => 'ROLE_PG_WRITE_ALL_DATA', rolname => 'pg_write_all_data', rolsuper => 'f', rolinherit => 't', rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f', rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1', diff --git a/src/include/catalog/pg_collation.h b/src/include/catalog/pg_collation.h index 6400702b3d214..6adbeab690bd1 100644 --- a/src/include/catalog/pg_collation.h +++ b/src/include/catalog/pg_collation.h @@ -55,7 +55,7 @@ CATALOG(pg_collation,3456,CollationRelationId) */ typedef FormData_pg_collation *Form_pg_collation; -DECLARE_TOAST(pg_collation, 8888, 8889); +DECLARE_TOAST(pg_collation, 6175, 6176); DECLARE_UNIQUE_INDEX(pg_collation_name_enc_nsp_index, 3164, on pg_collation using btree(collname name_ops, collencoding int4_ops, collnamespace oid_ops)); #define CollationNameEncNspIndexId 3164 diff --git a/src/include/catalog/pg_opfamily.dat b/src/include/catalog/pg_opfamily.dat index 04edca6cb0a6d..8e480efd286f2 100644 --- a/src/include/catalog/pg_opfamily.dat +++ b/src/include/catalog/pg_opfamily.dat @@ -76,7 +76,7 @@ opfmethod => 'hash', opfname => 'oidvector_ops' }, { oid => '2994', opfmethod => 'btree', opfname => 'record_ops' }, -{ oid => '9611', +{ oid => '6194', opfmethod => 'hash', opfname => 'record_ops' }, { oid => '3194', opfmethod => 'btree', opfname => 'record_image_ops' }, @@ -302,7 +302,7 @@ opfmethod => 'btree', opfname => 'multirange_ops' }, { oid => '4225', opfmethod => 'hash', opfname => 'multirange_ops' }, -{ oid => '8021', +{ oid => '6158', opfmethod => 'gist', opfname => 'multirange_ops' }, ] diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index c3c38c748f80a..acbcae46070c4 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -1446,7 +1446,7 @@ { oid => '752', descr => 'substitute portion of string', proname => 'overlay', prorettype => 'bytea', proargtypes => 'bytea bytea int4', prosrc => 'byteaoverlay_no_len' }, -{ oid => '8436', descr => 'number of set bits', +{ oid => '6163', descr => 'number of set bits', proname => 'bit_count', prorettype => 'int8', proargtypes => 'bytea', prosrc => 'bytea_bit_count' }, @@ -1570,11 +1570,11 @@ { oid => '376', descr => 'split delimited text, with null string', proname => 'string_to_array', proisstrict => 'f', prorettype => '_text', proargtypes => 'text text text', prosrc => 'text_to_array_null' }, -{ oid => '8432', descr => 'split delimited text', +{ oid => '6160', descr => 'split delimited text', proname => 'string_to_table', prorows => '1000', proisstrict => 'f', proretset => 't', prorettype => 'text', proargtypes => 'text text', prosrc => 'text_to_table' }, -{ oid => '8433', descr => 'split delimited text, with null string', +{ oid => '6161', descr => 'split delimited text, with null string', proname => 'string_to_table', prorows => '1000', proisstrict => 'f', proretset => 't', prorettype => 'text', proargtypes => 'text text text', prosrc => 'text_to_table_null' }, @@ -1666,7 +1666,7 @@ proname => 'width_bucket', prorettype => 'int4', proargtypes => 'anycompatible anycompatiblearray', prosrc => 'width_bucket_array' }, -{ oid => '8819', descr => 'remove last N elements of array', +{ oid => '6172', descr => 'remove last N elements of array', proname => 'trim_array', prorettype => 'anyarray', proargtypes => 'anyarray int4', prosrc => 'trim_array' }, { oid => '3816', descr => 'array typanalyze', @@ -2339,13 +2339,13 @@ { oid => '1171', descr => 'extract field from timestamp with time zone', proname => 'date_part', provolatile => 's', prorettype => 'float8', proargtypes => 'text timestamptz', prosrc => 'timestamptz_part' }, -{ oid => '9983', descr => 'extract field from timestamp with time zone', +{ oid => '6203', descr => 'extract field from timestamp with time zone', proname => 'extract', provolatile => 's', prorettype => 'numeric', proargtypes => 'text timestamptz', prosrc => 'extract_timestamptz' }, { oid => '1172', descr => 'extract field from interval', proname => 'date_part', prorettype => 'float8', proargtypes => 'text interval', prosrc => 'interval_part' }, -{ oid => '9984', descr => 'extract field from interval', +{ oid => '6204', descr => 'extract field from interval', proname => 'extract', prorettype => 'numeric', proargtypes => 'text interval', prosrc => 'extract_interval' }, { oid => '1174', descr => 'convert date to timestamp with time zone', @@ -2495,7 +2495,7 @@ { oid => '1273', descr => 'extract field from time with time zone', proname => 'date_part', prorettype => 'float8', proargtypes => 'text timetz', prosrc => 'timetz_part' }, -{ oid => '9981', descr => 'extract field from time with time zone', +{ oid => '6201', descr => 'extract field from time with time zone', proname => 'extract', prorettype => 'numeric', proargtypes => 'text timetz', prosrc => 'extract_timetz' }, { oid => '1274', @@ -2842,13 +2842,13 @@ { oid => '1384', descr => 'extract field from date', proname => 'date_part', prolang => 'sql', prorettype => 'float8', proargtypes => 'text date', prosrc => 'see system_functions.sql' }, -{ oid => '9979', descr => 'extract field from date', +{ oid => '6199', descr => 'extract field from date', proname => 'extract', prorettype => 'numeric', proargtypes => 'text date', prosrc => 'extract_date' }, { oid => '1385', descr => 'extract field from time', proname => 'date_part', prorettype => 'float8', proargtypes => 'text time', prosrc => 'time_part' }, -{ oid => '9980', descr => 'extract field from time', +{ oid => '6200', descr => 'extract field from time', proname => 'extract', prorettype => 'numeric', proargtypes => 'text time', prosrc => 'extract_time' }, { oid => '1386', @@ -3670,11 +3670,11 @@ proname => 'pg_get_statisticsobjdef', provolatile => 's', prorettype => 'text', proargtypes => 'oid', prosrc => 'pg_get_statisticsobjdef' }, -{ oid => '8887', descr => 'extended statistics columns', +{ oid => '6174', descr => 'extended statistics columns', proname => 'pg_get_statisticsobjdef_columns', provolatile => 's', prorettype => 'text', proargtypes => 'oid', prosrc => 'pg_get_statisticsobjdef_columns' }, -{ oid => '8886', descr => 'extended statistics expressions', +{ oid => '6173', descr => 'extended statistics expressions', proname => 'pg_get_statisticsobjdef_expressions', provolatile => 's', prorettype => '_text', proargtypes => 'oid', prosrc => 'pg_get_statisticsobjdef_expressions' }, @@ -3715,7 +3715,7 @@ proname => 'pg_get_function_arg_default', provolatile => 's', prorettype => 'text', proargtypes => 'oid int4', prosrc => 'pg_get_function_arg_default' }, -{ oid => '9704', descr => 'function SQL body', +{ oid => '6197', descr => 'function SQL body', proname => 'pg_get_function_sqlbody', provolatile => 's', prorettype => 'text', proargtypes => 'oid', prosrc => 'pg_get_function_sqlbody' }, @@ -3728,7 +3728,7 @@ proargnames => '{word,catcode,barelabel,catdesc,baredesc}', prosrc => 'pg_get_keywords' }, -{ oid => '8103', descr => 'list of catalog foreign key relationships', +{ oid => '6159', descr => 'list of catalog foreign key relationships', proname => 'pg_get_catalog_foreign_keys', procost => '10', prorows => '250', proretset => 't', provolatile => 's', prorettype => 'record', proargtypes => '', @@ -3904,7 +3904,7 @@ { oid => '3033', descr => 'set bit', proname => 'set_bit', prorettype => 'bit', proargtypes => 'bit int4 int4', prosrc => 'bitsetbit' }, -{ oid => '8435', descr => 'number of set bits', +{ oid => '6162', descr => 'number of set bits', proname => 'bit_count', prorettype => 'int8', proargtypes => 'bit', prosrc => 'bit_bit_count' }, @@ -5309,7 +5309,7 @@ proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}', proargnames => '{pid,status,receive_start_lsn,receive_start_tli,written_lsn,flushed_lsn,received_tli,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time,slot_name,sender_host,sender_port,conninfo}', prosrc => 'pg_stat_get_wal_receiver' }, -{ oid => '8595', descr => 'statistics: information about replication slot', +{ oid => '6169', descr => 'statistics: information about replication slot', proname => 'pg_stat_get_replication_slot', prorows => '1', proisstrict => 'f', proretset => 't', provolatile => 's', proparallel => 'r', prorettype => 'record', proargtypes => 'text', @@ -5483,34 +5483,34 @@ proname => 'pg_stat_get_db_blk_write_time', provolatile => 's', proparallel => 'r', prorettype => 'float8', proargtypes => 'oid', prosrc => 'pg_stat_get_db_blk_write_time' }, -{ oid => '9575', descr => 'statistics: session time, in milliseconds', +{ oid => '6185', descr => 'statistics: session time, in milliseconds', proname => 'pg_stat_get_db_session_time', provolatile => 's', proparallel => 'r', prorettype => 'float8', proargtypes => 'oid', prosrc => 'pg_stat_get_db_session_time' }, -{ oid => '9576', descr => 'statistics: session active time, in milliseconds', +{ oid => '6186', descr => 'statistics: session active time, in milliseconds', proname => 'pg_stat_get_db_active_time', provolatile => 's', proparallel => 'r', prorettype => 'float8', proargtypes => 'oid', prosrc => 'pg_stat_get_db_active_time' }, -{ oid => '9577', +{ oid => '6187', descr => 'statistics: session idle in transaction time, in milliseconds', proname => 'pg_stat_get_db_idle_in_transaction_time', provolatile => 's', proparallel => 'r', prorettype => 'float8', proargtypes => 'oid', prosrc => 'pg_stat_get_db_idle_in_transaction_time' }, -{ oid => '9578', descr => 'statistics: total number of sessions', +{ oid => '6188', descr => 'statistics: total number of sessions', proname => 'pg_stat_get_db_sessions', provolatile => 's', proparallel => 'r', prorettype => 'int8', proargtypes => 'oid', prosrc => 'pg_stat_get_db_sessions' }, -{ oid => '9579', +{ oid => '6189', descr => 'statistics: number of sessions disconnected by the client closing the network connection', proname => 'pg_stat_get_db_sessions_abandoned', provolatile => 's', proparallel => 'r', prorettype => 'int8', proargtypes => 'oid', prosrc => 'pg_stat_get_db_sessions_abandoned' }, -{ oid => '9580', +{ oid => '6190', descr => 'statistics: number of sessions disconnected by fatal errors', proname => 'pg_stat_get_db_sessions_fatal', provolatile => 's', proparallel => 'r', prorettype => 'int8', proargtypes => 'oid', prosrc => 'pg_stat_get_db_sessions_fatal' }, -{ oid => '9581', +{ oid => '6191', descr => 'statistics: number of sessions killed by administrative action', proname => 'pg_stat_get_db_sessions_killed', provolatile => 's', proparallel => 'r', prorettype => 'int8', proargtypes => 'oid', @@ -5699,7 +5699,7 @@ descr => 'statistics: reset collected statistics for a single SLRU', proname => 'pg_stat_reset_slru', proisstrict => 'f', provolatile => 'v', prorettype => 'void', proargtypes => 'text', prosrc => 'pg_stat_reset_slru' }, -{ oid => '8596', +{ oid => '6170', descr => 'statistics: reset collected statistics for a single replication slot', proname => 'pg_stat_reset_replication_slot', proisstrict => 'f', provolatile => 'v', prorettype => 'void', proargtypes => 'text', @@ -5825,10 +5825,10 @@ { oid => '2015', descr => 'trim selected bytes from both ends of string', proname => 'btrim', prorettype => 'bytea', proargtypes => 'bytea bytea', prosrc => 'byteatrim' }, -{ oid => '9612', descr => 'trim selected bytes from left end of string', +{ oid => '6195', descr => 'trim selected bytes from left end of string', proname => 'ltrim', prorettype => 'bytea', proargtypes => 'bytea bytea', prosrc => 'bytealtrim' }, -{ oid => '9613', descr => 'trim selected bytes from right end of string', +{ oid => '6196', descr => 'trim selected bytes from right end of string', proname => 'rtrim', prorettype => 'bytea', proargtypes => 'bytea bytea', prosrc => 'byteartrim' }, @@ -5839,10 +5839,10 @@ proname => 'date_trunc', prorettype => 'timestamp', proargtypes => 'text timestamp', prosrc => 'timestamp_trunc' }, -{ oid => '8990', descr => 'bin timestamp into specified interval', +{ oid => '6177', descr => 'bin timestamp into specified interval', proname => 'date_bin', prorettype => 'timestamp', proargtypes => 'interval timestamp timestamp', prosrc => 'timestamp_bin' }, -{ oid => '8993', +{ oid => '6178', descr => 'bin timestamp with time zone into specified interval', proname => 'date_bin', prorettype => 'timestamptz', proargtypes => 'interval timestamptz timestamptz', @@ -5851,7 +5851,7 @@ { oid => '2021', descr => 'extract field from timestamp', proname => 'date_part', prorettype => 'float8', proargtypes => 'text timestamp', prosrc => 'timestamp_part' }, -{ oid => '9982', descr => 'extract field from timestamp', +{ oid => '6202', descr => 'extract field from timestamp', proname => 'extract', prorettype => 'numeric', proargtypes => 'text timestamp', prosrc => 'extract_timestamp' }, { oid => '2024', descr => 'convert date to timestamp', @@ -6076,7 +6076,7 @@ prorettype => 'timestamptz', proargtypes => 'xid', prosrc => 'pg_xact_commit_timestamp' }, -{ oid => '8456', +{ oid => '6168', descr => 'get commit timestamp and replication origin of a transaction', proname => 'pg_xact_commit_timestamp_origin', provolatile => 'v', prorettype => 'record', proargtypes => 'xid', @@ -8058,7 +8058,7 @@ { oid => '2237', descr => 'bitwise-or smallint aggregate', proname => 'bit_or', prokind => 'a', proisstrict => 'f', prorettype => 'int2', proargtypes => 'int2', prosrc => 'aggregate_dummy' }, -{ oid => '8452', descr => 'bitwise-xor smallint aggregate', +{ oid => '6164', descr => 'bitwise-xor smallint aggregate', proname => 'bit_xor', prokind => 'a', proisstrict => 'f', prorettype => 'int2', proargtypes => 'int2', prosrc => 'aggregate_dummy' }, { oid => '2238', descr => 'bitwise-and integer aggregate', @@ -8067,7 +8067,7 @@ { oid => '2239', descr => 'bitwise-or integer aggregate', proname => 'bit_or', prokind => 'a', proisstrict => 'f', prorettype => 'int4', proargtypes => 'int4', prosrc => 'aggregate_dummy' }, -{ oid => '8453', descr => 'bitwise-xor integer aggregate', +{ oid => '6165', descr => 'bitwise-xor integer aggregate', proname => 'bit_xor', prokind => 'a', proisstrict => 'f', prorettype => 'int4', proargtypes => 'int4', prosrc => 'aggregate_dummy' }, { oid => '2240', descr => 'bitwise-and bigint aggregate', @@ -8076,7 +8076,7 @@ { oid => '2241', descr => 'bitwise-or bigint aggregate', proname => 'bit_or', prokind => 'a', proisstrict => 'f', prorettype => 'int8', proargtypes => 'int8', prosrc => 'aggregate_dummy' }, -{ oid => '8454', descr => 'bitwise-xor bigint aggregate', +{ oid => '6166', descr => 'bitwise-xor bigint aggregate', proname => 'bit_xor', prokind => 'a', proisstrict => 'f', prorettype => 'int8', proargtypes => 'int8', prosrc => 'aggregate_dummy' }, { oid => '2242', descr => 'bitwise-and bit aggregate', @@ -8085,7 +8085,7 @@ { oid => '2243', descr => 'bitwise-or bit aggregate', proname => 'bit_or', prokind => 'a', proisstrict => 'f', prorettype => 'bit', proargtypes => 'bit', prosrc => 'aggregate_dummy' }, -{ oid => '8455', descr => 'bitwise-xor bit aggregate', +{ oid => '6167', descr => 'bitwise-xor bit aggregate', proname => 'bit_xor', prokind => 'a', proisstrict => 'f', prorettype => 'bit', proargtypes => 'bit', prosrc => 'aggregate_dummy' }, @@ -9323,7 +9323,7 @@ proname => 'ts_lexize', prorettype => '_text', proargtypes => 'regdictionary text', prosrc => 'ts_lexize' }, -{ oid => '9531', descr => 'debug function for text search configuration', +{ oid => '6183', descr => 'debug function for text search configuration', proname => 'ts_debug', prolang => 'sql', prorows => '1000', proretset => 't', provolatile => 's', prorettype => 'record', proargtypes => 'regconfig text', proallargtypes => '{regconfig,text,text,text,text,_regdictionary,regdictionary,_text}', @@ -9331,7 +9331,7 @@ proargnames => '{config,document,alias,description,token,dictionaries,dictionary,lexemes}', prosrc => 'see system_functions.sql' }, -{ oid => '9532', +{ oid => '6184', descr => 'debug function for current text search configuration', proname => 'ts_debug', prolang => 'sql', prorows => '1000', proretset => 't', provolatile => 's', prorettype => 'record', proargtypes => 'text', @@ -9939,10 +9939,10 @@ proname => 'btrecordcmp', prorettype => 'int4', proargtypes => 'record record', prosrc => 'btrecordcmp' }, -{ oid => '9609', descr => 'hash', +{ oid => '6192', descr => 'hash', proname => 'hash_record', prorettype => 'int4', proargtypes => 'record', prosrc => 'hash_record' }, -{ oid => '9610', descr => 'hash', +{ oid => '6193', descr => 'hash', proname => 'hash_record_extended', prorettype => 'int8', proargtypes => 'record int8', prosrc => 'hash_record_extended' }, @@ -10172,11 +10172,11 @@ { oid => '3881', descr => 'GiST support', proname => 'range_gist_same', prorettype => 'internal', proargtypes => 'anyrange anyrange internal', prosrc => 'range_gist_same' }, -{ oid => '8017', descr => 'GiST support', +{ oid => '6154', descr => 'GiST support', proname => 'multirange_gist_consistent', prorettype => 'bool', proargtypes => 'internal anymultirange int2 oid internal', prosrc => 'multirange_gist_consistent' }, -{ oid => '8019', descr => 'GiST support', +{ oid => '6156', descr => 'GiST support', proname => 'multirange_gist_compress', prorettype => 'internal', proargtypes => 'internal', prosrc => 'multirange_gist_compress' }, { oid => '3902', descr => 'hash a range', @@ -11501,10 +11501,10 @@ prosrc => 'pg_control_init' }, # subscripting support for built-in types -{ oid => '9255', descr => 'standard array subscripting support', +{ oid => '6179', descr => 'standard array subscripting support', proname => 'array_subscript_handler', prorettype => 'internal', proargtypes => 'internal', prosrc => 'array_subscript_handler' }, -{ oid => '9256', descr => 'raw array subscripting support', +{ oid => '6180', descr => 'raw array subscripting support', proname => 'raw_array_subscript_handler', prorettype => 'internal', proargtypes => 'internal', prosrc => 'raw_array_subscript_handler' }, # type subscripting support @@ -11586,7 +11586,7 @@ proname => 'is_normalized', prorettype => 'bool', proargtypes => 'text text', prosrc => 'unicode_is_normalized' }, -{ oid => '9822', descr => 'unescape Unicode characters', +{ oid => '6198', descr => 'unescape Unicode characters', proname => 'unistr', prorettype => 'text', proargtypes => 'text', prosrc => 'unistr' }, diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat index 09fe7691dbbf6..41074c994b118 100644 --- a/src/include/catalog/pg_type.dat +++ b/src/include/catalog/pg_type.dat @@ -498,39 +498,39 @@ typanalyze => 'range_typanalyze', typalign => 'd', typstorage => 'x' }, # multirange types -{ oid => '4451', array_type_oid => '8010', descr => 'multirange of integers', +{ oid => '4451', array_type_oid => '6150', descr => 'multirange of integers', typname => 'int4multirange', typlen => '-1', typbyval => 'f', typtype => 'm', typcategory => 'R', typinput => 'multirange_in', typoutput => 'multirange_out', typreceive => 'multirange_recv', typsend => 'multirange_send', typanalyze => 'multirange_typanalyze', typalign => 'i', typstorage => 'x' }, -{ oid => '4532', array_type_oid => '8012', descr => 'multirange of numerics', +{ oid => '4532', array_type_oid => '6151', descr => 'multirange of numerics', typname => 'nummultirange', typlen => '-1', typbyval => 'f', typtype => 'm', typcategory => 'R', typinput => 'multirange_in', typoutput => 'multirange_out', typreceive => 'multirange_recv', typsend => 'multirange_send', typanalyze => 'multirange_typanalyze', typalign => 'i', typstorage => 'x' }, -{ oid => '4533', array_type_oid => '8014', +{ oid => '4533', array_type_oid => '6152', descr => 'multirange of timestamps without time zone', typname => 'tsmultirange', typlen => '-1', typbyval => 'f', typtype => 'm', typcategory => 'R', typinput => 'multirange_in', typoutput => 'multirange_out', typreceive => 'multirange_recv', typsend => 'multirange_send', typanalyze => 'multirange_typanalyze', typalign => 'd', typstorage => 'x' }, -{ oid => '4534', array_type_oid => '8016', +{ oid => '4534', array_type_oid => '6153', descr => 'multirange of timestamps with time zone', typname => 'tstzmultirange', typlen => '-1', typbyval => 'f', typtype => 'm', typcategory => 'R', typinput => 'multirange_in', typoutput => 'multirange_out', typreceive => 'multirange_recv', typsend => 'multirange_send', typanalyze => 'multirange_typanalyze', typalign => 'd', typstorage => 'x' }, -{ oid => '4535', array_type_oid => '8018', descr => 'multirange of dates', +{ oid => '4535', array_type_oid => '6155', descr => 'multirange of dates', typname => 'datemultirange', typlen => '-1', typbyval => 'f', typtype => 'm', typcategory => 'R', typinput => 'multirange_in', typoutput => 'multirange_out', typreceive => 'multirange_recv', typsend => 'multirange_send', typanalyze => 'multirange_typanalyze', typalign => 'i', typstorage => 'x' }, -{ oid => '4536', array_type_oid => '8020', descr => 'multirange of bigints', +{ oid => '4536', array_type_oid => '6157', descr => 'multirange of bigints', typname => 'int8multirange', typlen => '-1', typbyval => 'f', typtype => 'm', typcategory => 'R', typinput => 'multirange_in', typoutput => 'multirange_out', typreceive => 'multirange_recv', From 1f9b0e6938054515b8c9df545437c3d347eed683 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 12 May 2021 17:41:07 -0400 Subject: [PATCH 292/671] Doc: update bki.sgml's statements about OID ranges. Commit ab596105b neglected to make the docs match the code. --- doc/src/sgml/bki.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/bki.sgml b/doc/src/sgml/bki.sgml index db1b3d5e9a028..b33e59d5e42c5 100644 --- a/doc/src/sgml/bki.sgml +++ b/doc/src/sgml/bki.sgml @@ -418,11 +418,11 @@ If genbki.pl needs to assign an OID to a catalog entry that does not have a manually-assigned OID, it will use a value in - the range 10000—11999. The server's OID counter is set to 12000 + the range 10000—12999. The server's OID counter is set to 13000 at the start of a bootstrap run. Thus objects created by regular SQL commands during the later phases of bootstrap, such as objects created while running the information_schema.sql script, - receive OIDs of 12000 or above. + receive OIDs of 13000 or above. From 7dde98728a2ef6d48ef397ee783dd130fdb34e6b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 12 May 2021 18:41:39 -0400 Subject: [PATCH 293/671] Double-space commands in system_constraints.sql/system_functions.sql. Previously, any error reported by the backend while reading system_constraints.sql would report the entire file, not just the particular command it was working on. (Ask me how I know.) Likewise, there were chunks of system_functions.sql that would be read as one command, which would be annoying if anything failed there. The issue for system_constraints.sql is an oversight in commit dfb75e478. I didn't try to trace down where the poor formatting in system_functions.sql started, but it's certainly contrary to the advice at the head of that file. --- src/backend/catalog/genbki.pl | 3 +- src/backend/catalog/system_functions.sql | 47 ++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index bf080b5f124fb..63a907d50d5bc 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -678,7 +678,8 @@ foreach my $c (@system_constraints) { - print $constraints $c, "\n"; + # leave blank lines to localize any bootstrap error messages better + print $constraints $c, "\n\n"; } # Now generate schemapg.h diff --git a/src/backend/catalog/system_functions.sql b/src/backend/catalog/system_functions.sql index 1b2b37c1bf080..a4373b176c621 100644 --- a/src/backend/catalog/system_functions.sql +++ b/src/backend/catalog/system_functions.sql @@ -607,72 +607,119 @@ AS 'unicode_is_normalized'; -- can later change who can access these functions, or leave them as only -- available to superuser / cluster owner, if they choose. -- + REVOKE EXECUTE ON FUNCTION pg_start_backup(text, boolean, boolean) FROM public; + REVOKE EXECUTE ON FUNCTION pg_stop_backup() FROM public; + REVOKE EXECUTE ON FUNCTION pg_stop_backup(boolean, boolean) FROM public; + REVOKE EXECUTE ON FUNCTION pg_create_restore_point(text) FROM public; + REVOKE EXECUTE ON FUNCTION pg_switch_wal() FROM public; + REVOKE EXECUTE ON FUNCTION pg_wal_replay_pause() FROM public; + REVOKE EXECUTE ON FUNCTION pg_wal_replay_resume() FROM public; + REVOKE EXECUTE ON FUNCTION pg_rotate_logfile() FROM public; + REVOKE EXECUTE ON FUNCTION pg_reload_conf() FROM public; + REVOKE EXECUTE ON FUNCTION pg_current_logfile() FROM public; + REVOKE EXECUTE ON FUNCTION pg_current_logfile(text) FROM public; + REVOKE EXECUTE ON FUNCTION pg_promote(boolean, integer) FROM public; REVOKE EXECUTE ON FUNCTION pg_stat_reset() FROM public; + REVOKE EXECUTE ON FUNCTION pg_stat_reset_shared(text) FROM public; + REVOKE EXECUTE ON FUNCTION pg_stat_reset_slru(text) FROM public; + REVOKE EXECUTE ON FUNCTION pg_stat_reset_single_table_counters(oid) FROM public; + REVOKE EXECUTE ON FUNCTION pg_stat_reset_single_function_counters(oid) FROM public; + REVOKE EXECUTE ON FUNCTION pg_stat_reset_replication_slot(text) FROM public; REVOKE EXECUTE ON FUNCTION lo_import(text) FROM public; + REVOKE EXECUTE ON FUNCTION lo_import(text, oid) FROM public; + REVOKE EXECUTE ON FUNCTION lo_export(oid, text) FROM public; REVOKE EXECUTE ON FUNCTION pg_ls_logdir() FROM public; + REVOKE EXECUTE ON FUNCTION pg_ls_waldir() FROM public; + REVOKE EXECUTE ON FUNCTION pg_ls_archive_statusdir() FROM public; + REVOKE EXECUTE ON FUNCTION pg_ls_tmpdir() FROM public; + REVOKE EXECUTE ON FUNCTION pg_ls_tmpdir(oid) FROM public; REVOKE EXECUTE ON FUNCTION pg_read_file(text) FROM public; + REVOKE EXECUTE ON FUNCTION pg_read_file(text,bigint,bigint) FROM public; + REVOKE EXECUTE ON FUNCTION pg_read_file(text,bigint,bigint,boolean) FROM public; REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text) FROM public; + REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint) FROM public; + REVOKE EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint,boolean) FROM public; REVOKE EXECUTE ON FUNCTION pg_replication_origin_advance(text, pg_lsn) FROM public; + REVOKE EXECUTE ON FUNCTION pg_replication_origin_create(text) FROM public; + REVOKE EXECUTE ON FUNCTION pg_replication_origin_drop(text) FROM public; + REVOKE EXECUTE ON FUNCTION pg_replication_origin_oid(text) FROM public; + REVOKE EXECUTE ON FUNCTION pg_replication_origin_progress(text, boolean) FROM public; + REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_is_setup() FROM public; + REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_progress(boolean) FROM public; + REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_reset() FROM public; + REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_setup(text) FROM public; + REVOKE EXECUTE ON FUNCTION pg_replication_origin_xact_reset() FROM public; + REVOKE EXECUTE ON FUNCTION pg_replication_origin_xact_setup(pg_lsn, timestamp with time zone) FROM public; + REVOKE EXECUTE ON FUNCTION pg_show_replication_origin_status() FROM public; REVOKE EXECUTE ON FUNCTION pg_stat_file(text) FROM public; + REVOKE EXECUTE ON FUNCTION pg_stat_file(text,boolean) FROM public; REVOKE EXECUTE ON FUNCTION pg_ls_dir(text) FROM public; + REVOKE EXECUTE ON FUNCTION pg_ls_dir(text,boolean,boolean) FROM public; -- -- We also set up some things as accessible to standard roles. -- + GRANT EXECUTE ON FUNCTION pg_ls_logdir() TO pg_monitor; + GRANT EXECUTE ON FUNCTION pg_ls_waldir() TO pg_monitor; + GRANT EXECUTE ON FUNCTION pg_ls_archive_statusdir() TO pg_monitor; + GRANT EXECUTE ON FUNCTION pg_ls_tmpdir() TO pg_monitor; + GRANT EXECUTE ON FUNCTION pg_ls_tmpdir(oid) TO pg_monitor; GRANT pg_read_all_settings TO pg_monitor; + GRANT pg_read_all_stats TO pg_monitor; + GRANT pg_stat_scan_tables TO pg_monitor; From db16c656478b815627a03bb0a31833391a733eb0 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Wed, 12 May 2021 19:13:54 -0400 Subject: [PATCH 294/671] Rename the logical replication global "wrconn" The worker.c global wrconn is only meant to be used by logical apply/ tablesync workers, but there are other variables with the same name. To reduce future confusion rename the global from "wrconn" to "LogRepWorkerWalRcvConn". While this is just cosmetic, it seems better to backpatch it all the way back to 10 where this code appeared, to avoid future backpatching issues. Author: Peter Smith Discussion: https://postgr.es/m/CAHut+Pu7Jv9L2BOEx_Z0UtJxfDevQSAUW2mJqWU+CtmDrEZVAg@mail.gmail.com --- src/backend/replication/logical/launcher.c | 4 +-- src/backend/replication/logical/tablesync.c | 35 ++++++++++++--------- src/backend/replication/logical/worker.c | 23 +++++++------- src/include/replication/worker_internal.h | 2 +- 4 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index 85f325c38960f..e3b11daa897ff 100644 --- a/src/backend/replication/logical/launcher.c +++ b/src/backend/replication/logical/launcher.c @@ -643,8 +643,8 @@ static void logicalrep_worker_onexit(int code, Datum arg) { /* Disconnect gracefully from the remote side. */ - if (wrconn) - walrcv_disconnect(wrconn); + if (LogRepWorkerWalRcvConn) + walrcv_disconnect(LogRepWorkerWalRcvConn); logicalrep_worker_detach(); diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c index 0638f5c7f8768..67f907cdd968f 100644 --- a/src/backend/replication/logical/tablesync.c +++ b/src/backend/replication/logical/tablesync.c @@ -302,8 +302,11 @@ process_syncing_tables_for_sync(XLogRecPtr current_lsn) MyLogicalRepWorker->relstate, MyLogicalRepWorker->relstate_lsn); - /* End wal streaming so wrconn can be re-used to drop the slot. */ - walrcv_endstreaming(wrconn, &tli); + /* + * End streaming so that LogRepWorkerWalRcvConn can be used to drop + * the slot. + */ + walrcv_endstreaming(LogRepWorkerWalRcvConn, &tli); /* * Cleanup the tablesync slot. @@ -322,7 +325,7 @@ process_syncing_tables_for_sync(XLogRecPtr current_lsn) * otherwise, it won't be dropped till the corresponding subscription * is dropped. So passing missing_ok = false. */ - ReplicationSlotDropAtPubNode(wrconn, syncslotname, false); + ReplicationSlotDropAtPubNode(LogRepWorkerWalRcvConn, syncslotname, false); finish_sync_worker(); } @@ -642,7 +645,7 @@ copy_read_data(void *outbuf, int minread, int maxread) for (;;) { /* Try read the data. */ - len = walrcv_receive(wrconn, &buf, &fd); + len = walrcv_receive(LogRepWorkerWalRcvConn, &buf, &fd); CHECK_FOR_INTERRUPTS(); @@ -715,7 +718,8 @@ fetch_remote_table_info(char *nspname, char *relname, " AND c.relname = %s", quote_literal_cstr(nspname), quote_literal_cstr(relname)); - res = walrcv_exec(wrconn, cmd.data, lengthof(tableRow), tableRow); + res = walrcv_exec(LogRepWorkerWalRcvConn, cmd.data, + lengthof(tableRow), tableRow); if (res->status != WALRCV_OK_TUPLES) ereport(ERROR, @@ -752,9 +756,11 @@ fetch_remote_table_info(char *nspname, char *relname, " AND a.attrelid = %u" " ORDER BY a.attnum", lrel->remoteid, - (walrcv_server_version(wrconn) >= 120000 ? "AND a.attgenerated = ''" : ""), + (walrcv_server_version(LogRepWorkerWalRcvConn) >= 120000 ? + "AND a.attgenerated = ''" : ""), lrel->remoteid); - res = walrcv_exec(wrconn, cmd.data, lengthof(attrRow), attrRow); + res = walrcv_exec(LogRepWorkerWalRcvConn, cmd.data, + lengthof(attrRow), attrRow); if (res->status != WALRCV_OK_TUPLES) ereport(ERROR, @@ -841,7 +847,7 @@ copy_table(Relation rel) appendStringInfo(&cmd, " FROM %s) TO STDOUT", quote_qualified_identifier(lrel.nspname, lrel.relname)); } - res = walrcv_exec(wrconn, cmd.data, 0, NULL); + res = walrcv_exec(LogRepWorkerWalRcvConn, cmd.data, 0, NULL); pfree(cmd.data); if (res->status != WALRCV_OK_COPY_OUT) ereport(ERROR, @@ -957,8 +963,9 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) * application_name, so that it is different from the main apply worker, * so that synchronous replication can distinguish them. */ - wrconn = walrcv_connect(MySubscription->conninfo, true, slotname, &err); - if (wrconn == NULL) + LogRepWorkerWalRcvConn = + walrcv_connect(MySubscription->conninfo, true, slotname, &err); + if (LogRepWorkerWalRcvConn == NULL) ereport(ERROR, (errmsg("could not connect to the publisher: %s", err))); @@ -985,7 +992,7 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) * breakdown then it wouldn't have succeeded so trying it next time * seems like a better bet. */ - ReplicationSlotDropAtPubNode(wrconn, slotname, true); + ReplicationSlotDropAtPubNode(LogRepWorkerWalRcvConn, slotname, true); } else if (MyLogicalRepWorker->relstate == SUBREL_STATE_FINISHEDCOPY) { @@ -1038,7 +1045,7 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) * ensures that both the replication slot we create (see below) and the * COPY are consistent with each other. */ - res = walrcv_exec(wrconn, + res = walrcv_exec(LogRepWorkerWalRcvConn, "BEGIN READ ONLY ISOLATION LEVEL REPEATABLE READ", 0, NULL); if (res->status != WALRCV_OK_COMMAND) @@ -1058,7 +1065,7 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) * slot leading to a dangling slot on the server. */ HOLD_INTERRUPTS(); - walrcv_create_slot(wrconn, slotname, false /* permanent */ , + walrcv_create_slot(LogRepWorkerWalRcvConn, slotname, false /* permanent */ , CRS_USE_SNAPSHOT, origin_startpos); RESUME_INTERRUPTS(); @@ -1100,7 +1107,7 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) copy_table(rel); PopActiveSnapshot(); - res = walrcv_exec(wrconn, "COMMIT", 0, NULL); + res = walrcv_exec(LogRepWorkerWalRcvConn, "COMMIT", 0, NULL); if (res->status != WALRCV_OK_COMMAND) ereport(ERROR, (errmsg("table copy could not finish transaction on publisher: %s", diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index d9f157172b234..1432554d5a718 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -156,7 +156,7 @@ MemoryContext ApplyContext = NULL; /* per stream context for streaming transactions */ static MemoryContext LogicalStreamingContext = NULL; -WalReceiverConn *wrconn = NULL; +WalReceiverConn *LogRepWorkerWalRcvConn = NULL; Subscription *MySubscription = NULL; bool MySubscriptionValid = false; @@ -2126,7 +2126,7 @@ LogicalRepApplyLoop(XLogRecPtr last_received) MemoryContextSwitchTo(ApplyMessageContext); - len = walrcv_receive(wrconn, &buf, &fd); + len = walrcv_receive(LogRepWorkerWalRcvConn, &buf, &fd); if (len != 0) { @@ -2206,7 +2206,7 @@ LogicalRepApplyLoop(XLogRecPtr last_received) MemoryContextReset(ApplyMessageContext); } - len = walrcv_receive(wrconn, &buf, &fd); + len = walrcv_receive(LogRepWorkerWalRcvConn, &buf, &fd); } } @@ -2312,7 +2312,7 @@ LogicalRepApplyLoop(XLogRecPtr last_received) } /* All done */ - walrcv_endstreaming(wrconn, &tli); + walrcv_endstreaming(LogRepWorkerWalRcvConn, &tli); } /* @@ -2396,7 +2396,8 @@ send_feedback(XLogRecPtr recvpos, bool force, bool requestReply) LSN_FORMAT_ARGS(writepos), LSN_FORMAT_ARGS(flushpos)); - walrcv_send(wrconn, reply_message->data, reply_message->len); + walrcv_send(LogRepWorkerWalRcvConn, + reply_message->data, reply_message->len); if (recvpos > last_recvpos) last_recvpos = recvpos; @@ -3090,9 +3091,9 @@ ApplyWorkerMain(Datum main_arg) origin_startpos = replorigin_session_get_progress(false); CommitTransactionCommand(); - wrconn = walrcv_connect(MySubscription->conninfo, true, MySubscription->name, - &err); - if (wrconn == NULL) + LogRepWorkerWalRcvConn = walrcv_connect(MySubscription->conninfo, true, + MySubscription->name, &err); + if (LogRepWorkerWalRcvConn == NULL) ereport(ERROR, (errmsg("could not connect to the publisher: %s", err))); @@ -3100,7 +3101,7 @@ ApplyWorkerMain(Datum main_arg) * We don't really use the output identify_system for anything but it * does some initializations on the upstream so let's still call it. */ - (void) walrcv_identify_system(wrconn, &startpointTLI); + (void) walrcv_identify_system(LogRepWorkerWalRcvConn, &startpointTLI); } /* @@ -3116,14 +3117,14 @@ ApplyWorkerMain(Datum main_arg) options.startpoint = origin_startpos; options.slotname = myslotname; options.proto.logical.proto_version = - walrcv_server_version(wrconn) >= 140000 ? + walrcv_server_version(LogRepWorkerWalRcvConn) >= 140000 ? LOGICALREP_PROTO_STREAM_VERSION_NUM : LOGICALREP_PROTO_VERSION_NUM; options.proto.logical.publication_names = MySubscription->publications; options.proto.logical.binary = MySubscription->binary; options.proto.logical.streaming = MySubscription->stream; /* Start normal logical streaming replication. */ - walrcv_startstreaming(wrconn, &options); + walrcv_startstreaming(LogRepWorkerWalRcvConn, &options); /* Run the main loop. */ LogicalRepApplyLoop(origin_startpos); diff --git a/src/include/replication/worker_internal.h b/src/include/replication/worker_internal.h index 1cac75e5a9b49..179eb43900d51 100644 --- a/src/include/replication/worker_internal.h +++ b/src/include/replication/worker_internal.h @@ -62,7 +62,7 @@ typedef struct LogicalRepWorker extern MemoryContext ApplyContext; /* libpqreceiver connection */ -extern struct WalReceiverConn *wrconn; +extern struct WalReceiverConn *LogRepWorkerWalRcvConn; /* Worker and subscription objects. */ extern Subscription *MySubscription; From 1906cc07d90a8e58fd381dba43c1085e9231f236 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 13 May 2021 09:48:28 +0900 Subject: [PATCH 295/671] Make saner the tab completion of INSERT and DELETE in psql When specified directly as DML queries, INSERT was not getting always completed to "INSERT INTO", same for DELETE with "DELETE FROM". This makes the completion behavior more consistent for both commands, saving a few keystrokes. Commands on policies, triggers, grant/revoke, etc. require only DELETE as completion keyword. Author: Haiying Tang Reviewed-by: Dilip Kumar, Julien Rouhaud Discussion: https://postgr.es/m/OS0PR01MB61135AE2B07CCD1AB8C6A0F6FB549@OS0PR01MB6113.jpnprd01.prod.outlook.com --- src/bin/psql/tab-complete.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 51ae248ed8c0a..6598c5369a8f5 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1491,7 +1491,7 @@ psql_completion(const char *text, int start, int end) "ABORT", "ALTER", "ANALYZE", "BEGIN", "CALL", "CHECKPOINT", "CLOSE", "CLUSTER", "COMMENT", "COMMIT", "COPY", "CREATE", "DEALLOCATE", "DECLARE", "DELETE FROM", "DISCARD", "DO", "DROP", "END", "EXECUTE", "EXPLAIN", - "FETCH", "GRANT", "IMPORT FOREIGN SCHEMA", "INSERT", "LISTEN", "LOAD", "LOCK", + "FETCH", "GRANT", "IMPORT FOREIGN SCHEMA", "INSERT INTO", "LISTEN", "LOAD", "LOCK", "MOVE", "NOTIFY", "PREPARE", "REASSIGN", "REFRESH MATERIALIZED VIEW", "REINDEX", "RELEASE", "RESET", "REVOKE", "ROLLBACK", @@ -2386,7 +2386,7 @@ psql_completion(const char *text, int start, int end) " UNION ALL SELECT '('"); /* Complete COPY ( with legal query commands */ else if (Matches("COPY|\\copy", "(")) - COMPLETE_WITH("SELECT", "TABLE", "VALUES", "INSERT", "UPDATE", "DELETE", "WITH"); + COMPLETE_WITH("SELECT", "TABLE", "VALUES", "INSERT INTO", "UPDATE", "DELETE FROM", "WITH"); /* Complete COPY */ else if (Matches("COPY|\\copy", MatchAny)) COMPLETE_WITH("FROM", "TO"); @@ -3080,7 +3080,7 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH("FOR"); /* DELETE --- can be inside EXPLAIN, RULE, etc */ - /* ... despite which, only complete DELETE with FROM at start of line */ + /* Complete DELETE with "FROM" */ else if (Matches("DELETE")) COMPLETE_WITH("FROM"); /* Complete DELETE FROM with a list of tables */ @@ -3208,7 +3208,7 @@ psql_completion(const char *text, int start, int end) * EXPLAIN [ ANALYZE ] [ VERBOSE ] statement */ else if (Matches("EXPLAIN")) - COMPLETE_WITH("SELECT", "INSERT", "DELETE", "UPDATE", "DECLARE", + COMPLETE_WITH("SELECT", "INSERT INTO", "DELETE FROM", "UPDATE", "DECLARE", "ANALYZE", "VERBOSE"); else if (HeadMatches("EXPLAIN", "(*") && !HeadMatches("EXPLAIN", "(*)")) @@ -3227,12 +3227,12 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH("TEXT", "XML", "JSON", "YAML"); } else if (Matches("EXPLAIN", "ANALYZE")) - COMPLETE_WITH("SELECT", "INSERT", "DELETE", "UPDATE", "DECLARE", + COMPLETE_WITH("SELECT", "INSERT INTO", "DELETE FROM", "UPDATE", "DECLARE", "VERBOSE"); else if (Matches("EXPLAIN", "(*)") || Matches("EXPLAIN", "VERBOSE") || Matches("EXPLAIN", "ANALYZE", "VERBOSE")) - COMPLETE_WITH("SELECT", "INSERT", "DELETE", "UPDATE", "DECLARE"); + COMPLETE_WITH("SELECT", "INSERT INTO", "DELETE FROM", "UPDATE", "DECLARE"); /* FETCH && MOVE */ @@ -3587,7 +3587,7 @@ psql_completion(const char *text, int start, int end) /* PREPARE xx AS */ else if (Matches("PREPARE", MatchAny, "AS")) - COMPLETE_WITH("SELECT", "UPDATE", "INSERT", "DELETE FROM"); + COMPLETE_WITH("SELECT", "UPDATE", "INSERT INTO", "DELETE FROM"); /* * PREPARE TRANSACTION is missing on purpose. It's intended for transaction From b35f827b68dc1e761e17f621fbf17c3ecd073cb0 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 12 May 2021 23:34:35 -0400 Subject: [PATCH 296/671] doc: update PG 14 release notes based on current feedback --- doc/src/sgml/release-14.sgml | 85 +++++++++++++++++++++++++----------- 1 file changed, 59 insertions(+), 26 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 10a0dfd86a52b..48dc7576d88b6 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -85,12 +85,12 @@ Author: Alexander Korotkov --> -Fix to_tsquery() and websearch_to_tsquery() to properly parse certain discarded tokens in quotes (Alexander Korotkov) +Fix to_tsquery() and websearch_to_tsquery() to properly parse query text containing discarded tokens (Alexander Korotkov) -Certain discarded tokens, like underscore, caused the output of these functions to produce incorrect tsquery output, e.g., websearch_to_tsquery('"pg_class pg"') used to output '( pg & class ) -<-> pg',but now outputs 'pg <-> class <-> pg'. +Certain discarded tokens, like underscore, caused the output of these functions to produce incorrect tsquery output, e.g., both websearch_to_tsquery('"pg_class pg"') and to_tsquery('pg_class <-> +pg') used to output '( pg & class ) <-> pg', but now both output 'pg <-> class <-> pg'. @@ -117,11 +117,12 @@ Author: Peter Eisentraut --> -Change password_encryption's default to scram-sha-256 (Peter Eisentraut) +Change the default of the password_encryption server parameter to scram-sha-256 (Peter Eisentraut) Previously it was md5. All new passwords will be stored as SHA256 unless this server variable is changed or the password is already md5-hashed. +Also, the legacy (and undocumented) boolean-like values which were previously synonyms of md5 are no longer accepted. @@ -516,7 +517,7 @@ Author: Peter Geoghegan --> -Allow VACUUM to eagerly add newly deleted btree pages in the free space map (Peter Geoghegan) +Allow VACUUM to eagerly add newly deleted btree pages to the free space map (Peter Geoghegan) @@ -645,6 +646,25 @@ Allow the arbitrary collations of partition boundary values (Tom Lane) Previously it had to match the collation of the partition key. + + + + + + +Improve the performance of updates/deletes on partitioned tables when only a few partitions are affected (Amit Langote, Tom Lane) + + + +This also allows run-time pruning of updates/deletes on partitioned tables. + @@ -940,6 +960,23 @@ Author: David Rowley Allow window functions to perform incremental sorts (David Rowley) + + + + + + +Dramatically improve Unicode normalization (John Naylor) + + + +This speeds normalize() and IS NORMALIZED. + @@ -1159,6 +1196,17 @@ Author: Fujii Masao Add wait event WalReceiverExit to report WAL receiver exit wait time (Fujii Masao) + + + + + + +Implement information schema view routine_column_usage to track columns referenced by function and procedure default expressions (Peter Eisentraut) + @@ -1181,7 +1229,7 @@ Allow the certificate's distinguished name (DN) to be matched for client certifi -The new pg_hba.conf keyword "clientname=DN" allows comparison with non-CN certificate attributes and can be combined with ident maps. +The new pg_hba.conf keyword "clientname=DN" allows comparison with certificate attributes beyond the CN and can be combined with ident maps. @@ -1502,7 +1550,7 @@ Author: Amit Kapila --> -Allow logical replication to stream long in-progress transactions to standbys (Tomas Vondra, Dilip Kumar, Amit Kapila, Ajin Cherian, Nikhil Sontakke, Stas Kelvich) +Allow logical replication to stream long in-progress transactions to subscribers (Tomas Vondra, Dilip Kumar, Amit Kapila, Ajin Cherian, Nikhil Sontakke, Stas Kelvich) @@ -1648,7 +1696,7 @@ Author: Amit Kapila --> -Allow logical decoding to more efficiently process cache invalidation messages +Allow logical decoding to more efficiently process cache invalidation messages (Dilip Kumar) @@ -2234,7 +2282,7 @@ Add date_bin function (John Naylor) -WHAT DOES THIS DO? +The function date_bin "bins" the input timestamp into a specified interval aligned with a specified origin. @@ -2338,11 +2386,11 @@ Author: Alexander Korotkov --> -Allow subscripting of jsonb (Dmitry Dolgov) +Allow subscripting of JSONB and simplify the implementation of subscripting (Dmitry Dolgov) -Subscripting can be used to extract from and assign to jsonb documents. +JSONB subscripting can be used to extract from and assign to JSONB documents. Extensions and built-in data types can now implement subscripting more easily. @@ -2409,21 +2457,6 @@ Allow more flexible data types for default values of lead() and lag() window fun - - - - -Dramatically improve Unicode normalization (John Naylor) - - - -WHAT OPERATIONS USE THIS? - - - -Disallow single-quoting of the language name in the CREATE/DROP LANGUAGE command (Peter Eisentraut) +Remove deprecated containment operators @ and ~ for built-in geometric data types and contrib modules cube, hstore, intarray, and seg (Justin Pryzby) + + + +The more consistent <@ and @> have been recommended for many years. @@ -114,6 +119,8 @@ Previously, quoted text that contained multiple adjacent discarded tokens were t @@ -122,276 +129,270 @@ Change the default of the password_encryption server parameter to scram-sha-256 Previously it was md5. All new passwords will be stored as SHA256 unless this server variable is changed or the password is already md5-hashed. -Also, the legacy (and undocumented) boolean-like values which were previously synonyms of md5 are no longer accepted. +Also, the legacy (and undocumented) boolean-like values which were previously synonyms for md5 are no longer accepted. -Change EXTRACT to return the NUMERIC data type (Peter Eisentraut) +Overhaul the specification of clientcert in pg_hba.conf (Kyotaro Horiguchi) -EXTRACT(date) now throws an error for units that are not part of the date data type. +Values 1/0/no-verify are no longer supported; only the strings verify-ca and verify-full can be used. Also, disallow verify-ca if cert authentication is enabled since cert requires verify-full +checking. -Pass doubled quote marks in ecpg SQL command strings literally (Tom Lane) +Remove support for SSL compression (Daniel Gustafsson, Michael Paquier) -Previously 'abc''def' was passed to the server as 'abc'def'; "abc""def" was passed as "abc"def". +This was already disabled by default in previous Postgres releases, and most modern OpenSSL and TLS versions no longer support it. -Prevent tablefunc's function normal_rand() from accepting negative values (Ashutosh Bapat) +Remove server and libpq support for the version 2 wire protocol (Heikki Linnakangas) -Negative values produced undesirable results. +This was last used as the default in Postgres 7.2 (year 2002). -Fix handling of infinite window function ranges (Tom Lane) +Change EXTRACT to return the NUMERIC data type (Peter Eisentraut) -Previously window frame clauses like 'inf' PRECEDING AND 'inf' FOLLOWING returned incorrect results. +EXTRACT(date) now throws an error for units that are not part of the date data type. -Change var_samp() and stddev_samp() with numeric parameters to return NULL for a single NaN value (Tom Lane) +Fix handling of infinite window function ranges (Tom Lane) -Previously NaN was returned. +Previously window frame clauses like 'inf' PRECEDING AND 'inf' FOLLOWING returned incorrect results. -Remove support for SSL compression (Daniel Gustafsson, Michael Paquier) +Prevent tablefunc's function normal_rand() from accepting negative values (Ashutosh Bapat) -This was already disabled by default in previous Postgres releases, and most modern OpenSSL and TLS versions no longer support it. +Negative values produced undesirable results. -Remove deprecated containment operators @ and ~ for built-in geometric data types and contrib modules cube, hstore, intarray, and seg (Justin Pryzby) +Change var_samp() and stddev_samp() with numeric parameters to return NULL for a single NaN value (Tom Lane) -The more consistent <@ and @> have been recommended for many years. +Previously NaN was returned. -Remove server and libpq support for the version 2 wire protocol (Heikki Linnakangas) +Remove factorial operators ! and !! (Mark Dilger) -This was last used as the default in Postgres 7.2 (year 2002). +The factorial() function is still supported. Also remove function numeric_fac(). -Improve handling of regular expression back-references (Tom Lane) +Disallow factorial() of negative numbers (Peter Eisentraut) -For example, disregard ^ in its expansion in \1 in "(^\d+).*\1". +Previously such cases returned 1. -Allow \D and \W shorthands to match newlines in newline-sensitive mode (Tom Lane) +Remove support for postfix (right-unary) operators (Mark Dilger) -Previously they did not match; [^[:digit:]] or [^[:word:]] can be used to get the old behavior. +pg_dump and pg_upgrade will warn if postfix operators are being dumped. -Disallow \w as range start/end in character classes (Tom Lane) +Allow \D and \W shorthands to match newlines in newline-sensitive mode (Tom Lane) -This previously was allowed but produced incorrect results. +Previously they did not match; [^[:digit:]] or [^[:word:]] can be used to get the old behavior. -Force custom server variable names to match the pattern used for unquoted SQL identifiers (Tom Lane) +Improve handling of regular expression back-references (Tom Lane) + + + +For example, disregard ^ in its expansion in \1 in "(^\d+).*\1". -Return false for has_column_privilege() checks on non-existent or dropped columns when using attribute numbers (Joe Conway) +Disallow \w as range start/end in character classes (Tom Lane) -Previously such attribute numbers returned an invalid column error. +This previously was allowed but produced incorrect results. -Remove contrib program pg_standby (Justin Pryzby) +Force custom server variable names to match the pattern used for unquoted SQL identifiers (Tom Lane) -Overhaul the specification of clientcert in pg_hba.conf (Kyotaro Horiguchi) +Return false for has_column_privilege() checks on non-existent or dropped columns when using attribute numbers (Joe Conway) -Values 1/0/no-verify are no longer supported; only the strings verify-ca and verify-full can be used. Also, disallow verify-ca if cert authentication is enabled since cert requires verify-full -checking. +Previously such attribute numbers returned an invalid column error. -Remove factorial operators ! and !! (Mark Dilger) +Pass doubled quote marks in ecpg SQL command strings literally (Tom Lane) -The factorial() function is still supported. Also remove function numeric_fac(). +Previously 'abc''def' was passed to the server as 'abc'def', and "abc""def" was passed as "abc"def". -Disallow factorial() of negative numbers (Peter Eisentraut) - - - -Previously such cases returned 1. +Disallow single-quoting of the language name in the CREATE/DROP LANGUAGE command (Peter Eisentraut) -Remove support for postfix (right-unary) operators (Mark Dilger) - - - -pg_dump and pg_upgrade will warn if postfix operators are being dumped. +Remove contrib program pg_standby (Justin Pryzby) @@ -419,21 +420,6 @@ Remove operator_precedence_warning setting (Tom Lane) This was needed for warning applications about PostgreSQL 9.5 changes. - - - - - - -Limit the ways password_encryption can enable md5 hashing (Peter Eisentraut) - - - -Previously on/true/yes/1 values enabled md5. Now, only the string md5 does this. - @@ -456,132 +442,139 @@ Previously on/true/yes/1 values enabled md5. Now, only the string md5 does this -Add function pg_wait_for_backend_termination() that waits for session exit (Bharath Rupireddy) +Add predefined roles pg_read_all_data and pg_write_all_data (Stephen Frost) -Also add a similar optional wait parameter to pg_terminate_backend(). +These non-login roles give read-only/write-only access to all objects. -Autovacuum now analyzes partitioned tables (Yuzuko Hosoya) +Add a predefined role to match the database owner (Noah Misch) -DETAILS? +It is called pg_database_owner; this is useful in template databases. -Allow vacuum to skip index vacuuming when the number of removable index entries is insignificant (Masahiko Sawada, Peter Geoghegan) +Remove temporary files after backend crashes (Euler Taveira) + + + +These files were previously retained for debugging purposes; deletion can be disabled with remove_temp_files_after_crash. -Cause vacuum operations to be aggressive if the table is near xid or multixact wraparound (Masahiko Sawada, Peter Geoghegan) +Add long-running queries to be canceled if the client disconnects (Sergey Cherkashin, Thomas Munro) -This is controlled by vacuum_failsafe_age and vacuum_multixact_failsafe_age. +The server variable client_connection_check_interval allows supporting operating systems, e.g., Linux, to automatically cancel queries by disconnected clients. -Allow VACUUM to eagerly add newly deleted btree pages to the free space map (Peter Geoghegan) +Add function pg_wait_for_backend_termination() that waits for session exit (Bharath Rupireddy) -Previously VACUUM could only place preexisting deleted pages in the free space map. +Also add a similar optional wait parameter to pg_terminate_backend(). -Add a predefined role to match the database owner (Noah Misch) +Allow wide tuples to be always added to almost-empty heap pages (John Naylor, Floris van Nee) -It is called pg_database_owner; this is useful in template databases. +Previously tuples whose insertion would have exceeded the page's fill factor were instead added to new pages. -Add predefined roles pg_read_all_data and pg_write_all_data (Stephen Frost) +Add Set Server Name Indication (SNI) for SSL connection packets (Peter Eisentraut) -These non-login roles give read-only/write-only access to all objects. +This can be disabled by turning client option "sslsni" off. + + + + Vacuuming + + + -Add long-running queries to be canceled if the client disconnects (Sergey Cherkashin, Thomas Munro) - - - -The server variable client_connection_check_interval allows supporting operating systems, e.g., Linux, to automatically cancel queries by disconnected clients. +Allow vacuum to skip index vacuuming when the number of removable index entries is insignificant (Masahiko Sawada, Peter Geoghegan) -Remove temporary files after backend crashes (Euler Taveira) +Allow VACUUM to eagerly add newly deleted btree pages to the free space map (Peter Geoghegan) -These files were previously retained for debugging purposes; deletion can be disabled with remove_temp_files_after_crash. +Previously VACUUM could only place preexisting deleted pages in the free space map. @@ -592,62 +585,115 @@ Author: Peter Geoghegan --> -Deallocate space reserved by trailing unused heap line pointers (Matthias van de Meent, Peter Geoghegan) +Allow vacuum to deallocate space reserved by trailing unused heap line pointers (Matthias van de Meent, Peter Geoghegan) -Allow wide tuples to be always added to almost-empty heap pages (John Naylor, Floris van Nee) +Speed up vacuuming of databases with many relations (Tatsuhito Kasahara) + - -Previously tuples whose insertion would have exceeded the page's fill factor were instead added to new pages. + + + + +Reduce the default value of vacuum_cost_page_miss (Peter Geoghegan) + + + +This new default better reflects current hardware capabilities. - + + - - <link linkend="ddl-partitioning">Partitioning</link> + +Add ability to skip vacuuming of TOAST tables (Nathan Bossart) + - + +VACUUM now has a PROCESS_TOAST which can be set to false to disable TOAST processing, and vacuumdb has a --no-process-toast option. + + -Allow partitions to be detached in a non-blocking manner (Álvaro Herrera) +Cause vacuum operations to be aggressive if the table is near xid or multixact wraparound (Masahiko Sawada, Peter Geoghegan) -The syntax is ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY, and FINALIZE. +This is controlled by vacuum_failsafe_age and vacuum_multixact_failsafe_age. -Allow the arbitrary collations of partition boundary values (Tom Lane) +Increase warning time and hard limit before transaction id and multi-transaction wraparound (Noah Misch) -Previously it had to match the collation of the partition key. +This should reduce the possibility of failures that occur without having issued warnings about wraparound. + + + + + + + +Autovacuum now analyzes partitioned tables (Yuzuko Hosoya) + + + +DETAILS? + + + + + + + +Add per-index information to autovacuum logging output (Masahiko Sawada) + + + + + <link linkend="ddl-partitioning">Partitioning</link> + + + + + +Allow partitions to be detached in a non-blocking manner (Álvaro Herrera) + + + +The syntax is ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY, and FINALIZE. + + + + + + + +Allow the arbitrary collations of partition boundary values (Tom Lane) + + + +Previously it had to match the collation of the partition key. + @@ -685,7 +761,7 @@ Author: Peter Geoghegan --> -Allow index additions to remove expired btree index entries to prevent page splits (Peter Geoghegan) +Allow btree index additions to remove expired index entries to prevent page splits (Peter Geoghegan) @@ -725,27 +801,27 @@ This allows bloom indexes to be used effectively with data that is not physicall -Allow SP-GiST to use INCLUDE'd columns (Pavel Borisov) +Allow some GiST indexes to be built by presorting the data (Andrey Borodin) + + + +Presorting happens automatically and allows for faster index creation and smaller indexes. -Allow some GiST indexes to be built by presorting the data (Andrey Borodin) - - - -Presorting happens automatically and allows for faster index creation and smaller indexes. +Allow SP-GiST to use INCLUDE'd columns (Pavel Borisov) @@ -760,17 +836,16 @@ Presorting happens automatically and allows for faster index creation and smalle -Allow extended statistics on expressions (Tomas Vondra) +Allow hash lookup of IN clause with many constants (James Coleman, David Rowley) -This allows statistics on a group of expressions and columns, rather than only columns like previously. System view pg_stats_ext_exprs reports such statistics. -ALTER TABLE ... ALTER COLUMN ... TYPE RESETS STASTISTICS? +Previously the only option was to sequentially scan the list of constants. @@ -787,6 +862,52 @@ Author: Dean Rasheed Increase the number of places extended statistics can be used for OR clause estimation (Tomas Vondra, Dean Rasheed) + + + + + + +Allow extended statistics on expressions (Tomas Vondra) + + + +This allows statistics on a group of expressions and columns, rather than only columns like previously. System view pg_stats_ext_exprs reports such statistics. +ALTER TABLE ... ALTER COLUMN ... TYPE RESETS STASTISTICS? + + + + + + + +Allow efficient heap scanning of a range of tids (Edmund Horner, David Rowley) + + + +Previously a sequential scan was required for non-equality tid specifications. + + + + + + + +Fix EXPLAIN CREATE TABLE AS and EXPLAIN CREATE MATERIALIZED VIEW to honor IF NOT EXISTS (Bharath Rupireddy) + + + +Previously, if the object already exists, EXPLAIN would fail. + @@ -815,7 +936,7 @@ Author: Andres Freund --> -Improve speed of computing MVCC visibility snapshots on systems with many CPUs and high session count (Andres Freund) +Improve the speed of computing MVCC visibility snapshots on systems with many CPUs and high session counts (Andres Freund) @@ -840,61 +961,57 @@ This is useful if only a small percentage of rows is checked on the inner side. -Allow a query referencing multiple foreign tables to perform foreign table scans in parallel (Robert Haas, Kyotaro Horiguchi, Thomas Munro, Etsuro Fujita) - - - -The postgres_fdw supports these type of scans if "async_capable" is set. +Allow window functions to perform incremental sorts (David Rowley) -Add ability to use LZ4 compression on TOAST data (Dilip Kumar) +Improve the I/O performance of parallel sequential scans (Thomas Munro, David Rowley) -This can be set at the column level, or set as a default via server setting default_toast_compression. The server must be compiled with --with-lz4 to support this feature; the default is still pglz. +This was done by allocating blocks in groups to parallel workers. -Allow analyze to do page prefetching (Stephen Frost) +Allow a query referencing multiple foreign tables to perform foreign table scans in parallel (Robert Haas, Kyotaro Horiguchi, Thomas Munro, Etsuro Fujita) -This is controlled by maintenance_io_concurrency. +The postgres_fdw supports these type of scans if "async_capable" is set. -Improve the I/O performance of parallel sequential scans (Thomas Munro, David Rowley) +Allow analyze to do page prefetching (Stephen Frost) -This was done by allocating blocks in groups to parallel workers. +This is controlled by maintenance_io_concurrency. @@ -931,51 +1048,33 @@ Improve the performance of regular expression comparisons (Tom Lane) - - -Speed truncation of small tables during recovery on clusters with a large number of shared buffers (Kirk Jamison) - - - - - -Speed up vacuuming of databases with many relations (Tatsuhito Kasahara) +Dramatically improve Unicode normalization (John Naylor) - - - - -Allow window functions to perform incremental sorts (David Rowley) +This speeds normalize() and IS NORMALIZED. -Dramatically improve Unicode normalization (John Naylor) +Add ability to use LZ4 compression on TOAST data (Dilip Kumar) -This speeds normalize() and IS NORMALIZED. +This can be set at the column level, or set as a default via server setting default_toast_compression. The server must be compiled with --with-lz4 to support this feature; the default is still pglz. @@ -1011,12 +1110,14 @@ A query id computed by an extension will also be displayed. -Add information about the original user name supplied by the client to the output of log_connections (Jacob Champion) +Add system view pg_backend_memory_contexts to report session memory usage (Atsushi Torikoshi, Fujii Masao) @@ -1033,27 +1134,27 @@ Add function pg_backend_memory_contexts() to output the memory contexts of arbit -Add per-index information to autovacuum logging output (Masahiko Sawada) +Improve logging of auto-vacuum and auto-analyze (Stephen Frost, Jakub Wartak) + + + +This reports I/O timings for auto-vacuum and auto-analyze if track_io_timing is enabled. Also, report buffer read and dirty rates for auto-analyze. -Improve logging of auto-vacuum and auto-analyze (Stephen Frost, Jakub Wartak) - - - -This reports I/O timings for auto-vacuum and auto-analyze if track_io_timing is enabled. Also, report buffer read and dirty rates for auto-analyze. +Add information about the original user name supplied by the client to the output of log_connections (Jacob Champion) @@ -1068,55 +1169,36 @@ This reports I/O timings for auto-vacuum and auto-analyze if track_io_timing is - - -Make the archiver process visible in pg_stat_activity (Kyotaro Horiguchi) - - - - - -Improve pg_stat_activity reporting for walsender processes (Tom Lane) - - - -Previously only SQL commands were reported. +Add view pg_stat_progress_copy to report COPY progress (Josef Šimánek, Matthias van de Meent) -Add view pg_stat_progress_copy to report COPY progress (Josef Šimánek, Matthias van de Meent) +Add session statistics to the pg_stat_database system view (Laurenz Albe) -Add system view pg_stat_wal which reports WAL activity (Masahiro Ikeda) +Add columns to pg_prepared_statements to report generic and custom plan counts (Atsushi Torikoshi, Kyotaro Horiguchi) @@ -1133,12 +1215,16 @@ Add lock wait time to pg_locks (Atsushi Torikoshi) -Add session statistics to the pg_stat_database system view (Laurenz Albe) +Add system view pg_stat_wal which reports WAL activity (Masahiro Ikeda) @@ -1165,25 +1251,27 @@ Function pg_stat_reset_replication_slot() resets slot statistics. -Add system view pg_backend_memory_contexts to report session memory usage (Atsushi Torikoshi, Fujii Masao) +Improve pg_stat_activity reporting of walsender processes (Tom Lane) + + + +Previously only SQL commands were reported. -Add columns to pg_prepared_statements to report generic and custom plan counts (Atsushi Torikoshi, Kyotaro Horiguchi) +Make the archiver process visible in pg_stat_activity (Kyotaro Horiguchi) @@ -1236,26 +1324,41 @@ The new pg_hba.conf keyword "clientname=DN" allows comparison with certificate a -Allow passwords of an arbitrary length (Tom Lane, Nathan Bossart) +Allow pg_hba.conf and pg_ident.conf records to span multiple lines (Fabien Coelho) + + + +A backslash at the end of a line allows record contents to be continued on the next line. -Allow pg_hba.conf and pg_ident.conf records to span multiple lines (Fabien Coelho) +Allow the specification of a certificate revocation list (CRL) directory (Kyotaro Horiguchi) -A backslash at the end of a line allows record contents to be continued on the next line. +This is controlled by server variable ssl_crl_dir and libpq connection option sslcrldir. Previously only CRL files could be specified. + + + + + + + +Allow passwords of an arbitrary length (Tom Lane, Nathan Bossart) @@ -1300,70 +1403,75 @@ The previous default was 0.5. -Reduce the default value of vacuum_cost_page_miss (Peter Geoghegan) - - - -This new default better reflects current hardware capabilities. +Add %P to log_line_prefix to report the parallel group leader (Justin Pryzby) -Add Set Server Name Indication (SNI) for SSL connection packets (Peter Eisentraut) +Allow unix_socket_directories to specify paths as individual, comma-separated quoted strings (Ian Lawrence Barwick) -This can be disabled by turning client option "sslsni" off. +Previously all the paths had to be in a single quoted string. -Allow the specification of a certificate revocation list (CRL) directory (Kyotaro Horiguchi) +Allow startup allocation of dynamic shared memory (Thomas Munro) -This is controlled by server variable ssl_crl_dir and libpq connection option sslcrldir. Previously only CRL files could be specified. +This is controlled by min_dynamic_shared_memory. This allows more use of huge pages. -Add server variable log_recovery_conflict_waits to report long recovery conflict wait times (Bertrand Drouvot, Masahiko Sawada) +Add setting huge_page_size to control the size of huge pages used on Linux (Odin Ugedal) + + + + + + + + Streaming Replication and Recovery + + + -Add new server-side variable in_hot_standby (Haribabu Kommi, Greg Nancarrow, Tom Lane) +Allow standby servers to be rewound via pg_rewind (Heikki Linnakangas) @@ -1384,129 +1492,120 @@ You can also set restore_command to an empty string and reload to force recovery -Allow unix_socket_directories to specify paths as individual, comma-separated quoted strings (Ian Lawrence Barwick) - - - -Previously all the paths had to be in a single quoted string. +Add server variable log_recovery_conflict_waits to report long recovery conflict wait times (Bertrand Drouvot, Masahiko Sawada) -Add %P to log_line_prefix to report the parallel group leader (Justin Pryzby) +Pause recovery if the primary changes its parameters in a way that prevents replay on the hot standby (Peter Eisentraut) + + + +Previously the standby would shut down immediately. -Increase warning time and hard limit before transaction id and multi-transaction wraparound (Noah Misch) +Add function pg_get_wal_replay_pause_state() to report the recovery state (Dilip Kumar) -This should reduce the possibility of failures that occur without having issued warnings about wraparound. +It gives more detailed information than pg_is_wal_replay_paused(), which still exists. -Allow startup allocation of dynamic shared memory (Thomas Munro) - - - -This is controlled by min_dynamic_shared_memory. This allows more use of huge pages. +Add new server-side variable in_hot_standby (Haribabu Kommi, Greg Nancarrow, Tom Lane) -Add setting huge_page_size to control the size of huge pages used on Linux (Odin Ugedal) +Speed truncation of small tables during recovery on clusters with a large number of shared buffers (Kirk Jamison) - - - - - - - - Streaming Replication and Recovery - - - -Allow control over whether logical decoding messages are sent to the replication stream (David Pirotte, Euler Taveira) +Allow file system sync at the start of crash recovery on Linux (Thomas Munro) + + + +By default, Postgres opens and fsyncs every data file at the start of crash recovery. +This new setting, recovery_init_sync_method=syncfs, instead syncs each filesystem used by the database cluster. +This allows for faster recovery on systems with many database files. -Allow logical decoding to be filtered by xid (Markus Wanner) +Add function pg_xact_commit_timestamp_origin() to return the commit timestamp and replication origin of the specified transaction (Movead Li) -Allow file system sync at the start of crash recovery on Linux (Thomas Munro) - - - -By default, Postgres opens and fsyncs every data file at the start of crash recovery. -This new setting, recovery_init_sync_method=syncfs, instead syncs each filesystem used by the database cluster. -This allows for faster recovery on systems with many database files. +Add the replication origin to the record returned by pg_last_committed_xact() (Movead Li) -Allow multiple transactions during table sync in logical replication (Peter Smith, Amit Kapila, and Takamichi Osumi) +Allow replication origin functions to be controlled using standard function permission controls (Martín Marqués) + + + +Previously these functions could only be executed by super-users, and this is still the default. @@ -1526,16 +1625,12 @@ GENERAL ENOUGH? - - + - -Allow standby servers to be rewound via pg_rewind (Heikki Linnakangas) - - + + Logical Replication + + -Immediately WAL-log subtransaction and top-level XID association (Tomas Vondra, Dilip Kumar, Amit Kapila) +Enhance the logical replication API to allow streaming large in-progress transactions (Tomas Vondra, Dilip Kumar, Amit Kapila) -This is useful for logical decoding. +The output functions begin with "stream". test_decoding also supports these. -Allow logical replication subscriptions to use binary transfer mode (Dave Cramer) - - - -This is faster than text mode, but slightly less robust. +Allow multiple transactions during table sync in logical replication (Peter Smith, Amit Kapila, and Takamichi Osumi) -Add the replication origin to the record returned by pg_last_committed_xact() (Movead Li) +Immediately WAL-log subtransaction and top-level XID association (Tomas Vondra, Dilip Kumar, Amit Kapila) - - - - -Add function pg_xact_commit_timestamp_origin() to return the commit timestamp and replication origin of the specified transaction (Movead Li) +This is useful for logical decoding. -Allow replication origin functions to be controlled using standard function permission controls (Martín Marqués) +Enhance logical decoding APIs to handle two-phase commits (Ajin Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich) -Previously these functions could only be executed by super-users, and this is still the default. +This is controlled via pg_create_logical_replication_slot(). @@ -1643,83 +1731,57 @@ When logical replication is disabled, WAL invalidation messages are generated at - - -Enhance the logical replication API to allow streaming large in-progress transactions (Tomas Vondra, Dilip Kumar, Amit Kapila) - - - -The output functions begin with "stream". test_decoding also supports these. - - - - - -Pause recovery if the primary changes its parameters in a way that prevents replay on the hot standby (Peter Eisentraut) +Allow logical decoding to more efficiently process cache invalidation messages (Dilip Kumar) -Previously the standby would shut down immediately. +This allows Logical decoding to work efficiently in presence of a large amount of DDL. -Enhance logical decoding APIs to handle two-phase commits (Ajin Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich) - - - -This is controlled via pg_create_logical_replication_slot(). +Allow control over whether logical decoding messages are sent to the replication stream (David Pirotte, Euler Taveira) -Allow logical decoding to more efficiently process cache invalidation messages (Dilip Kumar) +Allow logical replication subscriptions to use binary transfer mode (Dave Cramer) -This allows Logical decoding to work efficiently in presence of a large amount of DDL. +This is faster than text mode, but slightly less robust. -Add function pg_get_wal_replay_pause_state() to report the recovery state (Dilip Kumar) - - - -It gives more detailed information than pg_is_wal_replay_paused(), which still exists. +Allow logical decoding to be filtered by xid (Markus Wanner) - + + @@ -1731,30 +1793,15 @@ It gives more detailed information than pg_is_wal_replay_paused(), which still e - - -Allow the WHERE clause of ON CONFLICT to be table-qualified (Tom Lane) - - - -Only the target table can be referenced. - - - - - -Allow hash lookup of IN clause with many constants (James Coleman, David Rowley) +Reduce the number of keywords that can't be used as column labels without "AS" (Mark Dilger) -Previously the only option was to sequentially scan the list of constants. +There are now 90% fewer restricted keywords. @@ -1790,48 +1837,48 @@ For example, GROUP BY CUBE (a,b), CUBE (b,c) will generate duplicate grouping co -Add SQL-standard SEARCH and CYCLE clauses for common table expressions (Peter Eisentraut) +Properly handle DEFAULT values for columns in multi-column inserts (Dean Rasheed) -This could be accomplished previously using existing syntax. +This used to throw an error. -Properly handle DEFAULT values for columns in multi-column inserts (Dean Rasheed) +Add SQL-standard SEARCH and CYCLE clauses for common table expressions (Peter Eisentraut) -This used to throw an error. +This could be accomplished previously using existing syntax. -Reduce the number of keywords that can't be used as column labels without "AS" (Mark Dilger) +Allow the WHERE clause of ON CONFLICT to be table-qualified (Tom Lane) -There are now 90% fewer restricted keywords. +Only the target table can be referenced. @@ -1844,51 +1891,6 @@ There are now 90% fewer restricted keywords. - - - - -Allow TRUNCATE to operate on foreign tables (Kazutaka Onishi, Kohei KaiGai) - - - -The postgres_fdw module also now supports this. - - - - - - - -Allow publications to be more easily added and removed (Japin Li) - - - -The new syntax is ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION. This avoids having to specify all publications to add/remove entries. - - - - - - - -Allow control over whether foreign servers keep connections open after transaction completion (Bharath Rupireddy) - - - -This is controlled by keep_connections and defaults to on. - - - -Add ability to skip vacuuming of TOAST tables (Nathan Bossart) +Allow REINDEX to change the tablespace of the new index (Alexey Kondratov, Michael Paquier, Justin Pryzby) -VACUUM now has a PROCESS_TOAST which can be set to false to disable TOAST processing, and vacuumdb has a --no-process-toast option. +This is done by specifying a TABLESPACE clause. -Allow REINDEX to change the tablespace of the new index (Alexey Kondratov, Michael Paquier, Justin Pryzby) +Allow REINDEX to process all child tables or indexes of a partitioned relation (Justin Pryzby, Michael Paquier) + + + + -This is done by specifying a TABLESPACE clause. +Improve the performance of COPY FROM in binary mode (Bharath Rupireddy, Amit Langote) -Add primary keys, unique constraints, and foreign keys to system catalogs (Peter Eisentraut) +Preserve SQL standard syntax in view definitions, if possible (Tom Lane) -This helps GUI tools analyze the system tables. +Previously non-function call SQL standard syntax, e.g. EXTRACT, were converted to non-SQL standard function calls. @@ -1960,79 +1967,89 @@ Add the SQL-standard clause GRANTED BY to GRANT and REVOKE (Peter Eisentraut) -Fix EXPLAIN CREATE TABLE AS and EXPLAIN CREATE MATERIALIZED VIEW to honor IF NOT EXISTS (Bharath Rupireddy) +Add OR REPLACE for CREATE TRIGGER (Takamichi Osumi) -Previously, if the object already exists, EXPLAIN would fail. +This allows pre-existing triggers to be conditionally replaced. -Add OR REPLACE for CREATE TRIGGER (Takamichi Osumi) +Allow control over whether foreign servers keep connections open after transaction completion (Bharath Rupireddy) -This allows pre-existing triggers to be conditionally replaced. +This is controlled by keep_connections and defaults to on. -Preserve SQL standard syntax in view definitions, if possible (Tom Lane) +Allow TRUNCATE to operate on foreign tables (Kazutaka Onishi, Kohei KaiGai) -Previously non-function call SQL standard syntax, e.g. EXTRACT, were converted to non-SQL standard function calls. +The postgres_fdw module also now supports this. -Allow CURRENT_ROLE every place CURRENT_USER is accepted (Peter Eisentraut) +Allow publications to be more easily added and removed (Japin Li) + + + +The new syntax is ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION. This avoids having to specify all publications to add/remove entries. -Allow REINDEX to process all child tables or indexes of a partitioned relation (Justin Pryzby, Michael Paquier) +Add primary keys, unique constraints, and foreign keys to system catalogs (Peter Eisentraut) + + + +This helps GUI tools analyze the system tables. -Improve the performance of COPY FROM in binary mode (Bharath Rupireddy, Amit Langote) +Allow CURRENT_ROLE every place CURRENT_USER is accepted (Peter Eisentraut) @@ -2045,17 +2062,6 @@ Improve the performance of COPY FROM in binary mode (Bharath Rupireddy, Amit Lan - - - - -Create composite array types for most system relations (Wenjing Zeng) - - - -Improve the accuracy of floating point computations involving infinity (Tom Lane) +Add support for the stemming of languages Armenian, Basque, Catalan, Hindi, Serbian, and Yiddish (Peter Eisentraut) @@ -2136,37 +2145,11 @@ Floating point data types already supported these. - - -Allow binary data transfer to be more forgiving of array and record OID mismatches (Tom Lane) - - - - - - - -Add operators to add and subtract LSN and numeric (byte) values (Fujii Masao) - - - - - -Add support for the stemming of languages Armenian, Basque, Catalan, Hindi, Serbian, and Yiddish (Peter Eisentraut) +Improve the accuracy of floating point computations involving infinity (Tom Lane) @@ -2200,45 +2183,48 @@ Previously this returned an error. Division with Numerics always returned NaN. - - - - - - Functions - - - -Change pg_describe_object(), pg_identify_object(), and pg_identify_object_as_address() to always report helpful error messages for non-existent objects (Michael Paquier) +Add operators to add and subtract LSN and numeric (byte) values (Fujii Masao) -Cause exp() and power() for negative-infinity exponents to return zero (Tom Lane) +Allow binary data transfer to be more forgiving of array and record OID mismatches (Tom Lane) + + + + -Previously they often returned underflow errors. +Create composite array types for most system relations (Wenjing Zeng) + + + + + + Functions + + + -Add unistr() function to allow Unicode characters to be specified as backslash-hex escapes in strings (Pavel Stehule) - - - -This is similar to how Unicode can be specified in literal string. +Allow procedures to have OUT parameters (Peter Eisentraut) -Add date_bin function (John Naylor) +Allow subscripting of JSONB and simplify the implementation of subscripting (Dmitry Dolgov) -The function date_bin "bins" the input timestamp into a specified interval aligned with a specified origin. +JSONB subscripting can be used to extract from and assign to JSONB documents. Extensions and built-in data types can now implement subscripting more easily. -Add function bit_count() to return the number of bits set in a bit or byte string (David Fetter) +Allow some array functions to operate on a mix of compatible data types (Tom Lane) + + + +The functions are array_append() array_prepend(), array_cat(), array_position(), array_positions(), array_remove(), array_replace(), and width_bucket(). Previously only identical data types could be used. -Mark pg_stat_get_subscription() as returning a set (Tom Lane) +Add SQL-standard trim_array() function (Vik Fearing) -While it worked in previous releases, it didn't report proper optimizer statistics and couldn't be used in the target list. +This can already be done with array slices. -Add bit_xor XOR aggregate function (Alexey Bashtanov) +Add bytea equivalents of ltrim() and rtrim() (Joel Jacobson) -Add SQL-standard trim_array() function (Vik Fearing) +Support negative indexes in split_part() (Nikhil Benesch) -This can already be done with array slices. +Negative values start from the last field and count backward. -Allow efficient heap scanning of a range of tids (Edmund Horner, David Rowley) +A string_to_table() function to split a string on delimiters (Pavel Stehule) -Previously a sequential scan was required for non-equality tid specifications. +This is similar to the regexp_split_to_table() function. -Add [[:word:]] as a character class to match \w (Tom Lane) +Add unistr() function to allow Unicode characters to be specified as backslash-hex escapes in strings (Pavel Stehule) + + + +This is similar to how Unicode can be specified in literal string. -Allow complemented character class escapes \D, \S, and \W within regex brackets (Tom Lane) +Add bit_xor XOR aggregate function (Alexey Bashtanov) - - -Allow subscripting of JSONB and simplify the implementation of subscripting (Dmitry Dolgov) - +Author: Peter Eisentraut +2021-03-23 [a6715af1e] Add bit_count SQL function +--> -JSONB subscripting can be used to extract from and assign to JSONB documents. Extensions and built-in data types can now implement subscripting more easily. +Add function bit_count() to return the number of bits set in a bit or byte string (David Fetter) -Add bytea equivalents of ltrim() and rtrim() (Joel Jacobson) +Add date_bin function (John Naylor) + + + +The function date_bin "bins" the input timestamp into a specified interval aligned with a specified origin. -Prevent inet_server_addr() and inet_server_port() from being run by parallel workers (Masahiko Sawada) +Allow make_timestamp/make_timestamptz to accept negative years (Peter Eisentraut) + + + +They are interpreted as BC years. -Support negative indexes in split_part() (Nikhil Benesch) +Add newer regular expression substring() syntax (Peter Eisentraut) -Negative values start from the last field and count backward. +The new syntax is SUBSTRING(text SIMILAR pattern ESCAPE escapechar). The previous standard syntax was SUBSTRING(text FROM pattern FOR escapechar), and is still supported by Postgres. -Allow some array functions to operate on a mix of compatible data types (Tom Lane) - - - -The functions are array_append() array_prepend(), array_cat(), array_position(), array_positions(), array_remove(), array_replace(), and width_bucket(). Previously only identical data types could be used. +Allow complemented character class escapes \D, \S, and \W within regex brackets (Tom Lane) -Allow more flexible data types for default values of lead() and lag() window functions (Vik Fearing) +Add [[:word:]] as a character class to match \w (Tom Lane) -Allow procedures to have OUT parameters (Peter Eisentraut) +Allow more flexible data types for default values of lead() and lag() window functions (Vik Fearing) -Allow make_timestamp/make_timestamptz to accept negative years (Peter Eisentraut) +Cause exp() and power() for negative-infinity exponents to return zero (Tom Lane) -They are interpreted as BC years. +Previously they often returned underflow errors. -A string_to_table() function to split a string on delimiters (Pavel Stehule) +Mark built-in type coercion functions as leakproof where possible (Tom Lane) -This is similar to the regexp_split_to_table() function. +This allows more use of functions that require type conversion in security-sensitive situations. -Mark built-in type coercion functions as leakproof where possible (Tom Lane) +Mark pg_stat_get_subscription() as returning a set (Tom Lane) -This allows more use of functions that require type conversion in security-sensitive situations. +While it worked in previous releases, it didn't report proper optimizer statistics and couldn't be used in the target list. -Add newer regular expression substring() syntax (Peter Eisentraut) +Prevent inet_server_addr() and inet_server_port() from being run by parallel workers (Masahiko Sawada) + + + + -The new syntax is SUBSTRING(text SIMILAR pattern ESCAPE escapechar). The previous standard syntax was SUBSTRING(text FROM pattern FOR escapechar), and is still supported by Postgres. +Change pg_describe_object(), pg_identify_object(), and pg_identify_object_as_address() to always report helpful error messages for non-existent objects (Michael Paquier) @@ -2542,37 +2543,37 @@ The new syntax is SUBSTRING(text SIMILAR pattern ESCAPE escapechar). The previo -Improve performance of repeated CALLs within plpgsql procedures (Pavel Stehule, Tom Lane) +Improve PL/pgSQL's expression and assignment parsing (Tom Lane) + + + +This adds nested record and array slicing support. -Improve PL/pgSQL's expression and assignment parsing (Tom Lane) - - - -This adds nested record and array slicing support. +Allow plpgsql's RETURN QUERY to execute its query using parallelism (Tom Lane) -Allow plpgsql's RETURN QUERY to execute its query using parallelism (Tom Lane) +Improve performance of repeated CALLs within plpgsql procedures (Pavel Stehule, Tom Lane) @@ -2588,73 +2589,73 @@ Allow plpgsql's RETURN QUERY to execute its query using parallelism (Tom Lane) -Improve the output format of libpq's PQtrace() (Aya Iwata) +Add pipeline mode to libpq (Craig Ringer, Matthieu Garrigues, Álvaro Herrera) + + + +This allows multiple queries to be sent and only wait for completion when a specific synchronization message is sent. -Allow an ECPG SQL identifier to be linked to a specific connection (Hayato Kuroda) +Enhance libpq's target_session_attrs parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane) -This is done via DECLARE ... STATEMENT. +New options are "read-only", "primary", "standby", and "prefer-standby". -Add pipeline mode to libpq (Craig Ringer, Matthieu Garrigues, Álvaro Herrera) - - - -This allows multiple queries to be sent and only wait for completion when a specific synchronization message is sent. +Improve the output format of libpq's PQtrace() (Aya Iwata) -Enhance libpq's target_session_attrs parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane) +Allow libpq service files to have unlimited line lengths (Daniel Gustafsson) -New options are "read-only", "primary", "standby", and "prefer-standby". +The previous limit was 255 bytes. -Allow libpq service files to have unlimited line lengths (Daniel Gustafsson) +Allow an ECPG SQL identifier to be linked to a specific connection (Hayato Kuroda) -The previous limit was 255 bytes. +This is done via DECLARE ... STATEMENT. @@ -2670,108 +2671,115 @@ The previous limit was 255 bytes. -Allow vacuumdb to skip index cleanup and truncation (Nathan Bossart) +Allow reindexdb to change the tablespace of the new index (Michael Paquier) -The options are --no-index-cleanup and --no-truncate. +This is done by specifying --tablespace. -Allow multiple verbose option specifications (-v) to increase the logging verbosity (Tom Lane) +Allow vacuumdb to skip index cleanup and truncation (Nathan Bossart) -This is now supported by pg_dump, pg_dumpall, and pg_restore. +The options are --no-index-cleanup and --no-truncate. -Allow reindexdb to change the tablespace of the new index (Michael Paquier) +Allow pg_dump to dump only certain extensions (Guillaume Lelarge) -This is done by specifying --tablespace. +This is controlled by option --extension. - - - - <xref linkend="app-psql"/> - - - -Fix psql's \dT to understand array syntax and backend grammar aliases, like "int" for "integer" (Greg Sabino Mullane, Tom Lane) +Add pgbench permute() function to randomly shuffle values (Fabien Coelho, Hironobu Suzuki, Dean Rasheed) -Allow psql's \df and \do commands to specify function and operator argument types (Greg Sabino Mullane, Tom Lane) +Allow multiple verbose option specifications (-v) to increase the logging verbosity (Tom Lane) -This helps reduce the number of matches for overloaded entries. +This is now supported by pg_dump, pg_dumpall, and pg_restore. + + + + <xref linkend="app-psql"/> + + + -When editing the previous query or a file with psql's \e, or using \ef and \ev, ignore the contents if the editor exits without saving (Laurenz Albe) +Allow psql's \df and \do commands to specify function and operator argument types (Greg Sabino Mullane, Tom Lane) -Previously, such edits would still execute the editor contents. +This helps reduce the number of matches for overloaded entries. -Allow pg_dump to dump only certain extensions (Guillaume Lelarge) +Add an access method column to psql's \d[i|m|t]+ output (Georgios Kokolatos) + + + + -This is controlled by option --extension. +Allow psql's \dt and \di to show TOAST tables and their indexes (Justin Pryzby) @@ -2789,37 +2797,41 @@ Add psql command \dX to list extended statistics objects (Tatsuro Yamada) -Allow psql's \dt and \di to show TOAST tables and their indexes (Justin Pryzby) +Fix psql's \dT to understand array syntax and backend grammar aliases, like "int" for "integer" (Greg Sabino Mullane, Tom Lane) -Improve psql's handling of \connect with -reuse-previous (Tom Lane) +When editing the previous query or a file with psql's \e, or using \ef and \ev, ignore the contents if the editor exits without saving (Laurenz Albe) -Specifically, properly reuse the password previously specified, and prompt for a new password if the previous one failed. +Previously, such edits would still execute the editor contents. -Add an access method column to psql's \d[i|m|t]+ output (Georgios Kokolatos) +Improve psql's handling of \connect with -reuse-previous (Tom Lane) + + + +Specifically, properly reuse the password previously specified, and prompt for a new password if the previous one failed. @@ -2857,32 +2869,12 @@ Author: Fujii Masao 2021-04-12 [81e094bdf] Support tab-complete for TRUNCATE on foreign tables. Author: Michael Paquier 2021-04-21 [22b2dec31] Add CURRENT_ROLE to list of roles for tab completion of -Author: Alvaro Herrera -2021-04-26 [6dd1042ed] psql: tab-complete ALTER ... DETACH CONCURRENTLY / FINAL ---> - - -Improve tab completion (Vignesh C, Michael Paquier, Justin Pryzby, Georgios Kokolatos, Julien Rouhaud, ADD NAMES) - - - - - - - - - <link linkend="pgbench"><application>pgbench</application></link> - - - - - -Add pgbench permute() function to randomly shuffle values (Fabien Coelho, Hironobu Suzuki, Dean Rasheed) +Improve tab completion (Vignesh C, Michael Paquier, Justin Pryzby, Georgios Kokolatos, Julien Rouhaud, ADD NAMES) @@ -2926,30 +2918,30 @@ This removes the server start instructions that are normally output. -Remove support for the postmaster -o option (Magnus Hagander) +Stop pg_upgrade from creating analyze_new_cluster script (Michael Paquier) -This option was unnecessary since all passed options could already be specified directly. +Instead, give comparable vacuumdb instructions. -Stop pg_upgrade from creating analyze_new_cluster script (Michael Paquier) +Remove support for the postmaster -o option (Magnus Hagander) -Instead, give comparable vacuumdb instructions. +This option was unnecessary since all passed options could already be specified directly. @@ -3014,23 +3006,16 @@ The option --with-openssl is kept for compatibility. -Add direct conversion routines between EUC_TW and Big5 (Heikki Linnakangas) +Add support for abstract Unix-domain sockets (Peter Eisentraut) - - - - -Add a test module for the regular expression package (Tom Lane) +This is currently supported on Linux and Windows. @@ -3051,37 +3036,59 @@ Previously this could only be controlled at compile time and is enabled only in -Change SHA1, SHA2, and MD5 hash computations to use the OpenSSL EVP API (Michael Paquier) +Various improvements in valgrind detection (Álvaro Herrera, Peter Geoghegan) + + + + -This is more modern and supports FIPS mode. +Add a test module for the regular expression package (Tom Lane) -Add support for abstract Unix-domain sockets (Peter Eisentraut) +Add support for LLVM 12 (Andres Freund) + + + + + + + +Change SHA1, SHA2, and MD5 hash computations to use the OpenSSL EVP API (Michael Paquier) -This is currently supported on Linux and Windows. +This is more modern and supports FIPS mode. @@ -3098,23 +3105,23 @@ Remove build control over the random library used (Daniel Gustafsson) -Add collation versions for FreeBSD (Thomas Munro) +Add direct conversion routines between EUC_TW and Big5 (Heikki Linnakangas) -Add support for LLVM 12 (Andres Freund) +Add collation versions for FreeBSD (Thomas Munro) @@ -3131,21 +3138,6 @@ Add "amadjustmembers" to the index access method API (Tom Lane) REMOVE? - - - - - - -Various improvements in valgrind detection (Álvaro Herrera, Peter Geoghegan) - @@ -3191,89 +3183,104 @@ Previously, when tracking all statements, identical top and nested statements we -Allow postgres_fdw to import table partitions if specified by IMPORT FOREIGN SCHEMA ... LIMIT TO (Matthias van de Meent) +Add row counts for utility commands to pg_stat_statements (Fujii Masao, Katsuragi Yuta, Seino Yuki) + + + + -By default, only the root of partitioned tables is imported. +Add pg_stat_statements_info system view to show pg_stat_statements activity (Katsuragi Yuta, Yuki Seino, Naoki Nakamichi) -Add postgres_fdw functions to discard cached connections (Bharath Rupireddy) +Allow subscripting of hstore values (Tom Lane, Dmitry Dolgov) -Allow postgres_fdw to INSERT rows in bulk (Takayuki Tsunakawa, Tomas Vondra, Amit Langote) +Allow GiST/GIN pg_trgm indexes to do equality lookups (Julien Rouhaud) + + + +This is similar to LIKE except no wildcards are honored. -Add postgres_fdw function postgres_fdw_get_connections to report open foreign server connections (Bharath Rupireddy) +Allow the cube data type to be transferred in binary mode (KaiGai Kohei) -Allow postgres_fdw to reestablish foreign server connections if necessary (Bharath Rupireddy) +Add contrib module pg_surgery which allows changes to row visibility (Ashutosh Sharma) -Previously foreign server restarts could cause foreign table access errors. +This is useful for correcting database corruption. -Allow the cube data type to be transferred in binary mode (KaiGai Kohei) +Add contrib module old_snapshot to report the XID/time mapping used by an active old_snapshot_threshold (Robert Haas) -Change pageinspect block numbers to be bigints (Peter Eisentraut) +Allow amcheck to also check heap pages (Mark Dilger) + + + +Previously it only checked B-Tree index pages. @@ -3290,120 +3297,114 @@ Allow pageinspect to inspect GiST indexes (Andrey Borodin, Heikki Linnakangas) -Allow subscripting of hstore values (Tom Lane, Dmitry Dolgov) +Change pageinspect block numbers to be bigints (Peter Eisentraut) -Add pg_stat_statements_info system view to show pg_stat_statements activity (Katsuragi Yuta, Yuki Seino, Naoki Nakamichi) +Allow pgstattuple_approx() to report on TOAST tables (Peter Eisentraut) -Allow GiST/GIN pg_trgm indexes to do equality lookups (Julien Rouhaud) - - - -This is similar to LIKE except no wildcards are honored. +Mark btree_gist functions as parallel safe (Steven Winfield) - - + - -Allow amcheck to also check heap pages (Mark Dilger) - + + Postgres_fdw - -Previously it only checked B-Tree index pages. - - + -Add contrib module old_snapshot to report the XID/time mapping used by an active old_snapshot_threshold (Robert Haas) +Allow postgres_fdw to INSERT rows in bulk (Takayuki Tsunakawa, Tomas Vondra, Amit Langote) -Add contrib module pg_surgery which allows changes to row visibility (Ashutosh Sharma) +Allow postgres_fdw to import table partitions if specified by IMPORT FOREIGN SCHEMA ... LIMIT TO (Matthias van de Meent) -This is useful for correcting database corruption. +By default, only the root of partitioned tables is imported. -Add row counts for utility commands to pg_stat_statements (Fujii Masao, Katsuragi Yuta, Seino Yuki) +Add postgres_fdw function postgres_fdw_get_connections to report open foreign server connections (Bharath Rupireddy) -Mark btree_gist functions as parallel safe (Steven Winfield) +Add postgres_fdw functions to discard cached connections (Bharath Rupireddy) -Allow pgstattuple_approx() to report on TOAST tables (Peter Eisentraut) +Allow postgres_fdw to reestablish foreign server connections if necessary (Bharath Rupireddy) + + + +Previously foreign server restarts could cause foreign table access errors. - + + + From 09ae329957b739dfbaf722eb5624d0a71fdff3b4 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 14 May 2021 10:21:28 +0200 Subject: [PATCH 305/671] Message style improvements --- src/bin/pg_dump/pg_dump.c | 4 ++-- src/bin/pg_rewind/pg_rewind.c | 2 +- src/interfaces/ecpg/preproc/ecpg.trailer | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index e384690d94ae2..339c3937180f9 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -1070,7 +1070,7 @@ help(const char *progname) printf(_(" --no-subscriptions do not dump subscriptions\n")); printf(_(" --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n")); printf(_(" --no-tablespaces do not dump tablespace assignments\n")); - printf(_(" --no-toast-compression do not dump toast compression methods\n")); + printf(_(" --no-toast-compression do not dump TOAST compression methods\n")); printf(_(" --no-unlogged-table-data do not dump unlogged table data\n")); printf(_(" --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n")); printf(_(" --quote-all-identifiers quote all identifiers, even if not key words\n")); @@ -16758,7 +16758,7 @@ dumpIndex(Archive *fout, const IndxInfo *indxinfo) if (!parsePGArray(indstatvals, &indstatvalsarray, &nstatvals)) fatal("could not parse index statistic values"); if (nstatcols != nstatvals) - fatal("mismatched number of columns and values for index stats"); + fatal("mismatched number of columns and values for index statistics"); for (j = 0; j < nstatcols; j++) { diff --git a/src/bin/pg_rewind/pg_rewind.c b/src/bin/pg_rewind/pg_rewind.c index 5157f59cf79b3..2ac4910778b61 100644 --- a/src/bin/pg_rewind/pg_rewind.c +++ b/src/bin/pg_rewind/pg_rewind.c @@ -561,7 +561,7 @@ perform_rewind(filemap_t *filemap, rewind_source *source, break; case FILE_ACTION_UNDECIDED: - pg_fatal("no action decided for \"%s\"", entry->path); + pg_fatal("no action decided for file \"%s\"", entry->path); break; } } diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer b/src/interfaces/ecpg/preproc/ecpg.trailer index 3600d7c605434..96c55349e8226 100644 --- a/src/interfaces/ecpg/preproc/ecpg.trailer +++ b/src/interfaces/ecpg/preproc/ecpg.trailer @@ -302,7 +302,7 @@ ECPGDeclareStmt: DECLARE prepared_name STATEMENT if (strcmp($2, ptr->name) == 0) { /* re-definition is not allowed */ - mmerror(PARSE_ERROR, ET_ERROR, "declared name %s is already defined", ptr->name); + mmerror(PARSE_ERROR, ET_ERROR, "name \"%s\" is already declared", ptr->name); } } From 5eb1b27d20670b378508391fab01a6871a86a8e9 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 14 May 2021 13:01:03 -0400 Subject: [PATCH 306/671] doc: update PG 14 release notes with recent feedback Reported-by: Justin Pryzby Discussion: https://postgr.es/m/20210514020141.GQ27406@telsasoft.com --- doc/src/sgml/release-14.sgml | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 2b2cb84c39b6a..c4df401c68629 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -630,6 +630,17 @@ VACUUM now has a PROCESS_TOAST which can be set to false to disable TOAST proces + + + + +Have COPY FREEZE appropriately update page visibility bits (Anastasia Lubennikova, Pavan Deolasee, Jeff Janes) + + + + + +Allow ALTER TYPE to specify or remove a SUBSCRIPT handler (Tom Lane) + + + @@ -3331,7 +3355,7 @@ Mark btree_gist functions as parallel safe (Steven Winfield) - Postgres_fdw + postgres_fdw From 1b5617eb844cd2470a334c1d2eec66cf9b39c41a Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 14 May 2021 13:10:52 -0400 Subject: [PATCH 307/671] Describe (auto-)analyze behavior for partitioned tables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This explains the new behavior introduced by 0827e8af70f4 as well as preexisting. Author: Justin Pryzby Author: Álvaro Herrera Discussion: https://postgr.es/m/20210423180152.GA17270@telsasoft.com --- doc/src/sgml/maintenance.sgml | 6 +++++ doc/src/sgml/perform.sgml | 3 ++- doc/src/sgml/ref/analyze.sgml | 40 +++++++++++++++++++++++--------- doc/src/sgml/ref/pg_restore.sgml | 6 +++-- 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml index de7fd75e1c609..4b535809b63ed 100644 --- a/doc/src/sgml/maintenance.sgml +++ b/doc/src/sgml/maintenance.sgml @@ -817,6 +817,12 @@ analyze threshold = analyze base threshold + analyze scale factor * number of tu is compared to the total number of tuples inserted, updated, or deleted since the last ANALYZE. + For partitioned tables, inserts, updates and deletes on partitions + are counted towards this threshold; however, DDL + operations such as ATTACH, DETACH + and DROP are not, so running a manual + ANALYZE is recommended if the partition added or + removed contains a statistically significant volume of data. diff --git a/doc/src/sgml/perform.sgml b/doc/src/sgml/perform.sgml index 89ff58338e5db..ddd6c3ff3e0e2 100644 --- a/doc/src/sgml/perform.sgml +++ b/doc/src/sgml/perform.sgml @@ -1767,7 +1767,8 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse; Whenever you have significantly altered the distribution of data within a table, running ANALYZE is strongly recommended. This - includes bulk loading large amounts of data into the table. Running + includes bulk loading large amounts of data into the table as well as + attaching, detaching or dropping partitions. Running ANALYZE (or VACUUM ANALYZE) ensures that the planner has up-to-date statistics about the table. With no statistics or obsolete statistics, the planner might diff --git a/doc/src/sgml/ref/analyze.sgml b/doc/src/sgml/ref/analyze.sgml index c8fcebc1612e4..0879004b8457a 100644 --- a/doc/src/sgml/ref/analyze.sgml +++ b/doc/src/sgml/ref/analyze.sgml @@ -250,20 +250,38 @@ ANALYZE [ VERBOSE ] [ table_and_columns - If the table being analyzed has one or more children, - ANALYZE will gather statistics twice: once on the - rows of the parent table only, and a second time on the rows of the - parent table with all of its children. This second set of statistics - is needed when planning queries that traverse the entire inheritance - tree. The autovacuum daemon, however, will only consider inserts or - updates on the parent table itself when deciding whether to trigger an - automatic analyze for that table. If that table is rarely inserted into - or updated, the inheritance statistics will not be up to date unless you - run ANALYZE manually. + If the table being analyzed is partitioned, ANALYZE + will gather statistics by sampling blocks randomly from its partitions; + in addition, it will recurse into each partition and update its statistics. + (However, in multi-level partitioning scenarios, each leaf partition + will only be analyzed once.) + By constrast, if the table being analyzed has inheritance children, + ANALYZE will gather statistics for it twice: + once on the rows of the parent table only, and a second time on the + rows of the parent table with all of its children. This second set of + statistics is needed when planning queries that traverse the entire + inheritance tree. The child tables themselves are not individually + analyzed in this case. - If any of the child tables are foreign tables whose foreign data wrappers + The autovacuum daemon counts inserts, updates and deletes in the + partitions to determine if auto-analyze is needed. However, adding + or removing partitions does not affect autovacuum daemon decisions, + so triggering a manual ANALYZE is recommended + when this occurs. + + + + Tuples changed in inheritance children do not count towards analyze + on the parent table. If the parent table is empty or rarely modified, + it may never be processed by autovacuum. It's necessary to + periodically run a manual ANALYZE to keep the + statistics of the table hierarchy up to date. + + + + If any of the child tables or partitions are foreign tables whose foreign data wrappers do not support ANALYZE, those child tables are ignored while gathering inheritance statistics. diff --git a/doc/src/sgml/ref/pg_restore.sgml b/doc/src/sgml/ref/pg_restore.sgml index 93ea937ac8ea7..35cd56297c87c 100644 --- a/doc/src/sgml/ref/pg_restore.sgml +++ b/doc/src/sgml/ref/pg_restore.sgml @@ -922,8 +922,10 @@ CREATE DATABASE foo WITH TEMPLATE template0; Once restored, it is wise to run ANALYZE on each - restored table so the optimizer has useful statistics; see - and + restored table so the optimizer has useful statistics. + If the table is a partition or an inheritance child, it may also be useful + to analyze the parent to update statistics for the table hierarchy. + See and for more information. From e47f93f981ccb70b4c4c5a0966e5fa0400e11a7e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 14 May 2021 12:54:26 -0400 Subject: [PATCH 308/671] Refactor CHECK_FOR_INTERRUPTS() to add flexibility. Split up CHECK_FOR_INTERRUPTS() to provide an additional macro INTERRUPTS_PENDING_CONDITION(), which just tests whether an interrupt is pending without attempting to service it. This is useful in situations where the caller knows that interrupts are blocked, and would like to find out if it's worth the trouble to unblock them. Also add INTERRUPTS_CAN_BE_PROCESSED(), which indicates whether CHECK_FOR_INTERRUPTS() can be relied on to clear the pending interrupt. This commit doesn't actually add any uses of the new macros, but a follow-on bug fix will do so. Back-patch to all supported branches to provide infrastructure for that fix. Alvaro Herrera and Tom Lane Discussion: https://postgr.es/m/20210513155351.GA7848@alvherre.pgsql --- src/backend/tcop/postgres.c | 14 ++++++++++++-- src/include/miscadmin.h | 34 +++++++++++++++++++++++----------- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 6200699ddd741..dd2ade7bb652c 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -554,7 +554,7 @@ ProcessClientWriteInterrupt(bool blocked) { /* * Don't mess with whereToSendOutput if ProcessInterrupts wouldn't - * do anything. + * service ProcDiePending. */ if (InterruptHoldoffCount == 0 && CritSectionCount == 0) { @@ -3118,6 +3118,12 @@ RecoveryConflictInterrupt(ProcSignalReason reason) * If an interrupt condition is pending, and it's safe to service it, * then clear the flag and accept the interrupt. Called only when * InterruptPending is true. + * + * Note: if INTERRUPTS_CAN_BE_PROCESSED() is true, then ProcessInterrupts + * is guaranteed to clear the InterruptPending flag before returning. + * (This is not the same as guaranteeing that it's still clear when we + * return; another interrupt could have arrived. But we promise that + * any pre-existing one will have been serviced.) */ void ProcessInterrupts(void) @@ -3248,7 +3254,11 @@ ProcessInterrupts(void) { /* * Re-arm InterruptPending so that we process the cancel request as - * soon as we're done reading the message. + * soon as we're done reading the message. (XXX this is seriously + * ugly: it complicates INTERRUPTS_CAN_BE_PROCESSED(), and it means we + * can't use that macro directly as the initial test in this function, + * meaning that this code also creates opportunities for other bugs to + * appear.) */ InterruptPending = true; } diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index 95202d37af5d3..4dc343cbc597d 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -57,6 +57,15 @@ * allowing die interrupts: HOLD_CANCEL_INTERRUPTS() and * RESUME_CANCEL_INTERRUPTS(). * + * Note that ProcessInterrupts() has also acquired a number of tasks that + * do not necessarily cause a query-cancel-or-die response. Hence, it's + * possible that it will just clear InterruptPending and return. + * + * INTERRUPTS_PENDING_CONDITION() can be checked to see whether an + * interrupt needs to be serviced, without trying to do so immediately. + * Some callers are also interested in INTERRUPTS_CAN_BE_PROCESSED(), + * which tells whether ProcessInterrupts is sure to clear the interrupt. + * * Special mechanisms are used to let an interrupt be accepted when we are * waiting for a lock or when we are waiting for command input (but, of * course, only if the interrupt holdoff counter is zero). See the @@ -97,24 +106,27 @@ extern PGDLLIMPORT volatile uint32 CritSectionCount; /* in tcop/postgres.c */ extern void ProcessInterrupts(void); +/* Test whether an interrupt is pending */ #ifndef WIN32 +#define INTERRUPTS_PENDING_CONDITION() \ + (unlikely(InterruptPending)) +#else +#define INTERRUPTS_PENDING_CONDITION() \ + (unlikely(UNBLOCKED_SIGNAL_QUEUE()) ? pgwin32_dispatch_queued_signals() : 0, \ + unlikely(InterruptPending)) +#endif +/* Service interrupt, if one is pending and it's safe to service it now */ #define CHECK_FOR_INTERRUPTS() \ do { \ - if (unlikely(InterruptPending)) \ - ProcessInterrupts(); \ -} while(0) -#else /* WIN32 */ - -#define CHECK_FOR_INTERRUPTS() \ -do { \ - if (unlikely(UNBLOCKED_SIGNAL_QUEUE())) \ - pgwin32_dispatch_queued_signals(); \ - if (unlikely(InterruptPending)) \ + if (INTERRUPTS_PENDING_CONDITION()) \ ProcessInterrupts(); \ } while(0) -#endif /* WIN32 */ +/* Is ProcessInterrupts() guaranteed to clear InterruptPending? */ +#define INTERRUPTS_CAN_BE_PROCESSED() \ + (InterruptHoldoffCount == 0 && CritSectionCount == 0 && \ + QueryCancelHoldoffCount == 0) #define HOLD_INTERRUPTS() (InterruptHoldoffCount++) From eb7a6b9229432dcb791f4bf0c44fe97bab661134 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 14 May 2021 13:26:55 -0400 Subject: [PATCH 309/671] Fix query-cancel handling in spgdoinsert(). Knowing that a buggy opclass could cause an infinite insertion loop, spgdoinsert() intended to allow its loop to be interrupted by query cancel. However, that never actually worked, because in iterations after the first, we'd be holding buffer lock(s) which would cause InterruptHoldoffCount to be positive, preventing servicing of the interrupt. To fix, check if an interrupt is pending, and if so fall out of the insertion loop and service the interrupt after we've released the buffers. If it was indeed a query cancel, that's the end of the matter. If it was a non-canceling interrupt reason, make use of the existing provision to retry the whole insertion. (This isn't as wasteful as it might seem, since any upper-level index tuples we already created should be usable in the next attempt.) While there's no known instance of such a bug in existing release branches, it still seems like a good idea to back-patch this to all supported branches, since the behavior is fairly nasty if a loop does happen --- not only is it uncancelable, but it will quickly consume memory to the point of an OOM failure. In any case, this code is certainly not working as intended. Per report from Dilip Kumar. Discussion: https://postgr.es/m/CAFiTN-uxP_soPhVG840tRMQTBmtA_f_Y8N51G7DKYYqDh7XN-A@mail.gmail.com --- src/backend/access/spgist/spgdoinsert.c | 52 +++++++++++++++++++++---- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/src/backend/access/spgist/spgdoinsert.c b/src/backend/access/spgist/spgdoinsert.c index 4d380c99f06f5..88ae2499dd543 100644 --- a/src/backend/access/spgist/spgdoinsert.c +++ b/src/backend/access/spgist/spgdoinsert.c @@ -1905,13 +1905,14 @@ spgSplitNodeAction(Relation index, SpGistState *state, * Insert one item into the index. * * Returns true on success, false if we failed to complete the insertion - * because of conflict with a concurrent insert. In the latter case, - * caller should re-call spgdoinsert() with the same args. + * (typically because of conflict with a concurrent insert). In the latter + * case, caller should re-call spgdoinsert() with the same args. */ bool spgdoinsert(Relation index, SpGistState *state, ItemPointer heapPtr, Datum *datums, bool *isnulls) { + bool result = true; TupleDesc leafDescriptor = state->leafTupDesc; bool isnull = isnulls[spgKeyColumn]; int level = 0; @@ -2012,6 +2013,14 @@ spgdoinsert(Relation index, SpGistState *state, parent.offnum = InvalidOffsetNumber; parent.node = -1; + /* + * Before entering the loop, try to clear any pending interrupt condition. + * If a query cancel is pending, we might as well accept it now not later; + * while if a non-canceling condition is pending, servicing it here avoids + * having to restart the insertion and redo all the work so far. + */ + CHECK_FOR_INTERRUPTS(); + for (;;) { bool isNew = false; @@ -2019,9 +2028,18 @@ spgdoinsert(Relation index, SpGistState *state, /* * Bail out if query cancel is pending. We must have this somewhere * in the loop since a broken opclass could produce an infinite - * picksplit loop. + * picksplit loop. However, because we'll be holding buffer lock(s) + * after the first iteration, ProcessInterrupts() wouldn't be able to + * throw a cancel error here. Hence, if we see that an interrupt is + * pending, break out of the loop and deal with the situation below. + * Set result = false because we must restart the insertion if the + * interrupt isn't a query-cancel-or-die case. */ - CHECK_FOR_INTERRUPTS(); + if (INTERRUPTS_PENDING_CONDITION()) + { + result = false; + break; + } if (current.blkno == InvalidBlockNumber) { @@ -2140,10 +2158,14 @@ spgdoinsert(Relation index, SpGistState *state, * spgAddNode and spgSplitTuple cases will loop back to here to * complete the insertion operation. Just in case the choose * function is broken and produces add or split requests - * repeatedly, check for query cancel. + * repeatedly, check for query cancel (see comments above). */ process_inner_tuple: - CHECK_FOR_INTERRUPTS(); + if (INTERRUPTS_PENDING_CONDITION()) + { + result = false; + break; + } innerTuple = (SpGistInnerTuple) PageGetItem(current.page, PageGetItemId(current.page, current.offnum)); @@ -2267,5 +2289,21 @@ spgdoinsert(Relation index, SpGistState *state, UnlockReleaseBuffer(parent.buffer); } - return true; + /* + * We do not support being called while some outer function is holding a + * buffer lock (or any other reason to postpone query cancels). If that + * were the case, telling the caller to retry would create an infinite + * loop. + */ + Assert(INTERRUPTS_CAN_BE_PROCESSED()); + + /* + * Finally, check for interrupts again. If there was a query cancel, + * ProcessInterrupts() will be able to throw the error here. If it was + * some other kind of interrupt that can just be cleared, return false to + * tell our caller to retry. + */ + CHECK_FOR_INTERRUPTS(); + + return result; } From c3c35a733c77b298d3cf7e7de2eeb4aea540a631 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 14 May 2021 15:07:34 -0400 Subject: [PATCH 310/671] Prevent infinite insertion loops in spgdoinsert(). Formerly we just relied on operator classes that assert longValuesOK to eventually shorten the leaf value enough to fit on an index page. That fails since the introduction of INCLUDE-column support (commit 09c1c6ab4), because the INCLUDE columns might alone take up more than a page, meaning no amount of leaf-datum compaction will get the job done. At least with spgtextproc.c, that leads to an infinite loop, since spgtextproc.c won't throw an error for not being able to shorten the leaf datum anymore. To fix without breaking cases that would otherwise work, add logic to spgdoinsert() to verify that the leaf tuple size is decreasing after each "choose" step. Some opclasses might not decrease the size on every single cycle, and in any case, alignment roundoff of the tuple size could obscure small gains. Therefore, allow up to 10 cycles without additional savings before throwing an error. (Perhaps this number will need adjustment, but it seems quite generous right now.) As long as we've developed this logic, let's back-patch it. The back branches don't have INCLUDE columns to worry about, but this seems like a good defense against possible bugs in operator classes. We already know that an infinite loop here is pretty unpleasant, so having a defense seems to outweigh the risk of breaking things. (Note that spgtextproc.c is actually the only known opclass with longValuesOK support, so that this is all moot for known non-core opclasses anyway.) Per report from Dilip Kumar. Discussion: https://postgr.es/m/CAFiTN-uxP_soPhVG840tRMQTBmtA_f_Y8N51G7DKYYqDh7XN-A@mail.gmail.com --- doc/src/sgml/spgist.sgml | 12 ++++ src/backend/access/spgist/spgdoinsert.c | 67 ++++++++++++++++--- .../expected/spgist_name_ops.out | 10 +++ .../spgist_name_ops/sql/spgist_name_ops.sql | 10 +++ 4 files changed, 88 insertions(+), 11 deletions(-) diff --git a/doc/src/sgml/spgist.sgml b/doc/src/sgml/spgist.sgml index cfb2b3c836f19..18f1f3cdbd830 100644 --- a/doc/src/sgml/spgist.sgml +++ b/doc/src/sgml/spgist.sgml @@ -978,6 +978,18 @@ LANGUAGE C STRICT; fails to do that, the SP-GiST core resorts to extraordinary measures described in . + + + When longValuesOK is true, it is expected + that successive levels of the SP-GiST tree will + absorb more and more information into the prefixes and node labels of + the inner tuples, making the required leaf datum smaller and smaller, + so that eventually it will fit on a page. + To prevent bugs in operator classes from causing infinite insertion + loops, the SP-GiST core will raise an error if the + leaf datum does not become any smaller within ten cycles + of choose method calls. + diff --git a/src/backend/access/spgist/spgdoinsert.c b/src/backend/access/spgist/spgdoinsert.c index 88ae2499dd543..70557bcf3d0ad 100644 --- a/src/backend/access/spgist/spgdoinsert.c +++ b/src/backend/access/spgist/spgdoinsert.c @@ -669,7 +669,8 @@ checkAllTheSame(spgPickSplitIn *in, spgPickSplitOut *out, bool tooBig, * will eventually terminate if lack of balance is the issue. If the tuple * is too big, we assume that repeated picksplit operations will eventually * make it small enough by repeated prefix-stripping. A broken opclass could - * make this an infinite loop, though. + * make this an infinite loop, though, so spgdoinsert() checks that the + * leaf datums get smaller each time. */ static bool doPickSplit(Relation index, SpGistState *state, @@ -1918,6 +1919,8 @@ spgdoinsert(Relation index, SpGistState *state, int level = 0; Datum leafDatums[INDEX_MAX_KEYS]; int leafSize; + int bestLeafSize; + int numNoProgressCycles = 0; SPPageDesc current, parent; FmgrInfo *procinfo = NULL; @@ -1988,9 +1991,10 @@ spgdoinsert(Relation index, SpGistState *state, /* * If it isn't gonna fit, and the opclass can't reduce the datum size by - * suffixing, bail out now rather than getting into an endless loop. + * suffixing, bail out now rather than doing a lot of useless work. */ - if (leafSize > SPGIST_PAGE_CAPACITY && !state->config.longValuesOK) + if (leafSize > SPGIST_PAGE_CAPACITY && + (isnull || !state->config.longValuesOK)) ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg("index row size %zu exceeds maximum %zu for index \"%s\"", @@ -1998,6 +2002,7 @@ spgdoinsert(Relation index, SpGistState *state, SPGIST_PAGE_CAPACITY - sizeof(ItemIdData), RelationGetRelationName(index)), errhint("Values larger than a buffer page cannot be indexed."))); + bestLeafSize = leafSize; /* Initialize "current" to the appropriate root page */ current.blkno = isnull ? SPGIST_NULL_BLKNO : SPGIST_ROOT_BLKNO; @@ -2226,19 +2231,59 @@ spgdoinsert(Relation index, SpGistState *state, leafSize += sizeof(ItemIdData); } + /* + * Check new tuple size; fail if it can't fit, unless the + * opclass says it can handle the situation by suffixing. + * + * However, the opclass can only shorten the leaf datum, + * which may not be enough to ever make the tuple fit, + * since INCLUDE columns might alone use more than a page. + * Depending on the opclass' behavior, that could lead to + * an infinite loop --- spgtextproc.c, for example, will + * just repeatedly generate an empty-string leaf datum + * once it runs out of data. Actual bugs in opclasses + * might cause infinite looping, too. To detect such a + * loop, check to see if we are making progress by + * reducing the leafSize in each pass. This is a bit + * tricky though. Because of alignment considerations, + * the total tuple size might not decrease on every pass. + * Also, there are edge cases where the choose method + * might seem to not make progress for a cycle or two. + * Somewhat arbitrarily, we allow up to 10 no-progress + * iterations before failing. (This limit should be more + * than MAXALIGN, to accommodate opclasses that trim one + * byte from the leaf datum per pass.) + */ + if (leafSize > SPGIST_PAGE_CAPACITY) + { + bool ok = false; + + if (state->config.longValuesOK && !isnull) + { + if (leafSize < bestLeafSize) + { + ok = true; + bestLeafSize = leafSize; + numNoProgressCycles = 0; + } + else if (++numNoProgressCycles < 10) + ok = true; + } + if (!ok) + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("index row size %zu exceeds maximum %zu for index \"%s\"", + leafSize - sizeof(ItemIdData), + SPGIST_PAGE_CAPACITY - sizeof(ItemIdData), + RelationGetRelationName(index)), + errhint("Values larger than a buffer page cannot be indexed."))); + } + /* * Loop around and attempt to insert the new leafDatum at * "current" (which might reference an existing child * tuple, or might be invalid to force us to find a new * page for the tuple). - * - * Note: if the opclass sets longValuesOK, we rely on the - * choose function to eventually shorten the leafDatum - * enough to fit on a page. We could add a test here to - * complain if the datum doesn't get visibly shorter each - * time, but that could get in the way of opclasses that - * "simplify" datums in a way that doesn't necessarily - * lead to physical shortening on every cycle. */ break; case spgAddNode: diff --git a/src/test/modules/spgist_name_ops/expected/spgist_name_ops.out b/src/test/modules/spgist_name_ops/expected/spgist_name_ops.out index 0ac99d08fbab4..ac0ddcecead78 100644 --- a/src/test/modules/spgist_name_ops/expected/spgist_name_ops.out +++ b/src/test/modules/spgist_name_ops/expected/spgist_name_ops.out @@ -61,6 +61,12 @@ select * from t binary_upgrade_set_next_toast_pg_class_oid | 1 | binary_upgrade_set_next_toast_pg_class_oid (9 rows) +-- Verify clean failure when INCLUDE'd columns result in overlength tuple +-- The error message details are platform-dependent, so show only SQLSTATE +\set VERBOSITY sqlstate +insert into t values(repeat('xyzzy', 12), 42, repeat('xyzzy', 4000)); +ERROR: 54000 +\set VERBOSITY default drop index t_f1_f2_f3_idx; create index on t using spgist(f1 name_ops_old) include(f2, f3); \d+ t_f1_f2_f3_idx @@ -100,3 +106,7 @@ select * from t binary_upgrade_set_next_toast_pg_class_oid | 1 | binary_upgrade_set_next_toast_pg_class_oid (9 rows) +\set VERBOSITY sqlstate +insert into t values(repeat('xyzzy', 12), 42, repeat('xyzzy', 4000)); +ERROR: 54000 +\set VERBOSITY default diff --git a/src/test/modules/spgist_name_ops/sql/spgist_name_ops.sql b/src/test/modules/spgist_name_ops/sql/spgist_name_ops.sql index 76e78ba41c779..982f221a8b2d8 100644 --- a/src/test/modules/spgist_name_ops/sql/spgist_name_ops.sql +++ b/src/test/modules/spgist_name_ops/sql/spgist_name_ops.sql @@ -27,6 +27,12 @@ select * from t where f1 > 'binary_upgrade_set_n' and f1 < 'binary_upgrade_set_p' order by 1; +-- Verify clean failure when INCLUDE'd columns result in overlength tuple +-- The error message details are platform-dependent, so show only SQLSTATE +\set VERBOSITY sqlstate +insert into t values(repeat('xyzzy', 12), 42, repeat('xyzzy', 4000)); +\set VERBOSITY default + drop index t_f1_f2_f3_idx; create index on t using spgist(f1 name_ops_old) include(f2, f3); @@ -39,3 +45,7 @@ select * from t select * from t where f1 > 'binary_upgrade_set_n' and f1 < 'binary_upgrade_set_p' order by 1; + +\set VERBOSITY sqlstate +insert into t values(repeat('xyzzy', 12), 42, repeat('xyzzy', 4000)); +\set VERBOSITY default From 8f72bbac3e4b1d1be9598e8edb9353fa5dc48138 Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Fri, 14 May 2021 15:08:02 -0700 Subject: [PATCH 311/671] Harden nbtree deduplication posting split code. Add a defensive "can't happen" error to code that handles nbtree posting list splits (promote an existing assertion). This avoids a segfault in the event of an insertion of a newitem that is somehow identical to an existing non-pivot tuple in the index. An nbtree index should never have two index tuples with identical TIDs. This scenario is not particular unlikely in the event of any kind of corruption that leaves the index in an inconsistent state relative to the heap relation that is indexed. There are two known reports of preventable hard crashes. Doing nothing seems unacceptable given the general expectation that nbtree will cope reasonably well with corrupt data. Discussion: https://postgr.es/m/CAH2-Wz=Jr_d-dOYEEmwz0-ifojVNWho01eAqewfQXgKfoe114w@mail.gmail.com Backpatch: 13-, where nbtree deduplication was introduced. --- src/backend/access/nbtree/nbtdedup.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/backend/access/nbtree/nbtdedup.c b/src/backend/access/nbtree/nbtdedup.c index 854e3b2cf9acf..271994b08df13 100644 --- a/src/backend/access/nbtree/nbtdedup.c +++ b/src/backend/access/nbtree/nbtdedup.c @@ -1024,7 +1024,19 @@ _bt_swap_posting(IndexTuple newitem, IndexTuple oposting, int postingoff) nhtids = BTreeTupleGetNPosting(oposting); Assert(_bt_posting_valid(oposting)); - Assert(postingoff > 0 && postingoff < nhtids); + + /* + * The postingoff argument originated as a _bt_binsrch_posting() return + * value. It will be 0 in the event of corruption that makes a leaf page + * contain a non-pivot tuple that's somehow identical to newitem (no two + * non-pivot tuples should ever have the same TID). This has been known + * to happen in the field from time to time. + * + * Perform a basic sanity check to catch this case now. + */ + if (!(postingoff > 0 && postingoff < nhtids)) + elog(ERROR, "posting list tuple with %d items cannot be split at offset %d", + nhtids, postingoff); /* * Move item pointers in posting list to make a gap for the new item's From 30d8bad494ad1f604295033e4f4de4b8f258fe74 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 15 May 2021 12:21:06 -0400 Subject: [PATCH 312/671] Be more careful about barriers when releasing BackgroundWorkerSlots. ForgetBackgroundWorker lacked any memory barrier at all, while BackgroundWorkerStateChange had one but unaccountably did additional manipulation of the slot after the barrier. AFAICS, the rule must be that the barrier is immediately before setting or clearing slot->in_use. It looks like back in 9.6 when ForgetBackgroundWorker was first written, there might have been some case for not needing a barrier there, but I'm not very convinced of that --- the fact that the load of bgw_notify_pid is in the caller doesn't seem to guarantee no memory ordering problem. So patch 9.6 too. It's likely that this doesn't fix any observable bug on Intel hardware, but machines with weaker memory ordering rules could have problems here. Discussion: https://postgr.es/m/4046084.1620244003@sss.pgh.pa.us --- src/backend/postmaster/bgworker.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c index 2d2c450ba35a7..c40410d73ea83 100644 --- a/src/backend/postmaster/bgworker.c +++ b/src/backend/postmaster/bgworker.c @@ -327,9 +327,11 @@ BackgroundWorkerStateChange(bool allow_new_workers) notify_pid = slot->worker.bgw_notify_pid; if ((slot->worker.bgw_flags & BGWORKER_CLASS_PARALLEL) != 0) BackgroundWorkerData->parallel_terminate_count++; - pg_memory_barrier(); slot->pid = 0; + + pg_memory_barrier(); slot->in_use = false; + if (notify_pid != 0) kill(notify_pid, SIGUSR1); @@ -416,6 +418,8 @@ BackgroundWorkerStateChange(bool allow_new_workers) * points to it. This convention allows deletion of workers during * searches of the worker list, and saves having to search the list again. * + * Caller is responsible for notifying bgw_notify_pid, if appropriate. + * * This function must be invoked only in the postmaster. */ void @@ -428,9 +432,16 @@ ForgetBackgroundWorker(slist_mutable_iter *cur) Assert(rw->rw_shmem_slot < max_worker_processes); slot = &BackgroundWorkerData->slot[rw->rw_shmem_slot]; + Assert(slot->in_use); + + /* + * We need a memory barrier here to make sure that the update of + * parallel_terminate_count completes before the store to in_use. + */ if ((rw->rw_worker.bgw_flags & BGWORKER_CLASS_PARALLEL) != 0) BackgroundWorkerData->parallel_terminate_count++; + pg_memory_barrier(); slot->in_use = false; ereport(DEBUG1, From cafde58b337e007cb6a719f5ab4dd6459d932a39 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Sat, 15 May 2021 14:13:09 -0400 Subject: [PATCH 313/671] Allow compute_query_id to be set to 'auto' and make it default Allowing only on/off meant that all either all existing configuration guides would become obsolete if we disabled it by default, or that we would have to accept a performance loss in the default config if we enabled it by default. By allowing 'auto' as a middle ground, the performance cost is only paid by those who enable pg_stat_statements and similar modules. I only edited the release notes to comment-out a paragraph that is now factually wrong; further edits are probably needed to describe the related change in more detail. Author: Julien Rouhaud Reviewed-by: Justin Pryzby Discussion: https://postgr.es/m/20210513002623.eugftm4nk2lvvks3@nol --- .../pg_stat_statements/pg_stat_statements.c | 6 +++ .../pg_stat_statements.conf | 1 - doc/src/sgml/config.sgml | 9 ++++- doc/src/sgml/pgstatstatements.sgml | 14 +++---- doc/src/sgml/release-14.sgml | 2 + src/backend/commands/explain.c | 2 +- src/backend/parser/analyze.c | 4 +- src/backend/postmaster/postmaster.c | 3 ++ src/backend/tcop/postgres.c | 2 +- src/backend/utils/misc/guc.c | 38 ++++++++++++++----- src/backend/utils/misc/postgresql.conf.sample | 2 +- src/backend/utils/misc/queryjumble.c | 21 ++++++++++ src/include/utils/guc.h | 1 - src/include/utils/queryjumble.h | 33 +++++++++++++++- 14 files changed, 108 insertions(+), 30 deletions(-) diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index a85f9628013f2..09433c8c96c75 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -369,6 +369,12 @@ _PG_init(void) if (!process_shared_preload_libraries_in_progress) return; + /* + * Inform the postmaster that we want to enable query_id calculation if + * compute_query_id is set to auto. + */ + EnableQueryId(); + /* * Define (or redefine) custom GUC variables. */ diff --git a/contrib/pg_stat_statements/pg_stat_statements.conf b/contrib/pg_stat_statements/pg_stat_statements.conf index e47b26040ffcd..13346e2807835 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.conf +++ b/contrib/pg_stat_statements/pg_stat_statements.conf @@ -1,2 +1 @@ shared_preload_libraries = 'pg_stat_statements' -compute_query_id = on diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 45bd1f1b7e3bc..7e32b0686c6ae 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -7627,7 +7627,7 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; - compute_query_id (boolean) + compute_query_id (enum) compute_query_id configuration parameter @@ -7643,7 +7643,12 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; identifier to be computed. Note that an external module can alternatively be used if the in-core query identifier computation method is not acceptable. In this case, in-core computation - must be disabled. The default is off. + must be always disabled. + Valid values are off (always disabled), + on (always enabled) and auto, + which lets modules such as + automatically enable it. + The default is auto. diff --git a/doc/src/sgml/pgstatstatements.sgml b/doc/src/sgml/pgstatstatements.sgml index bc2b6038ee851..aa332d8cc2264 100644 --- a/doc/src/sgml/pgstatstatements.sgml +++ b/doc/src/sgml/pgstatstatements.sgml @@ -18,18 +18,14 @@ in postgresql.conf, because it requires additional shared memory. This means that a server restart is needed to add or remove the module. + In addition, query identifier calculation must be enabled in order for the + module to be active, which is done automatically if + is set to auto or on, or any third-party + module that calculates query identifiers is loaded. - The module will not track statistics unless query - identifiers are calculated. This can be done by enabling or using a third-party module that - computes its own query identifiers. Note that all statistics tracked - by this module must be reset if the query identifier method is changed. - - - - When pg_stat_statements is loaded, it tracks + When pg_stat_statements is active, it tracks statistics across all databases of the server. To access and manipulate these statistics, the module provides views pg_stat_statements and diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index c4df401c68629..bad12860924e8 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -3181,10 +3181,12 @@ Author: Bruce Momjian Move query hash computation from pg_stat_statements to the core server (Julien Rouhaud) + diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 1202bf85a367a..9a60865d19111 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -245,7 +245,7 @@ ExplainQuery(ParseState *pstate, ExplainStmt *stmt, es->summary = (summary_set) ? es->summary : es->analyze; query = castNode(Query, stmt->query); - if (compute_query_id) + if (IsQueryIdEnabled()) jstate = JumbleQuery(query, pstate->p_sourcetext); if (post_parse_analyze_hook) diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 168198acd143c..201b88d1adb1d 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -124,7 +124,7 @@ parse_analyze(RawStmt *parseTree, const char *sourceText, query = transformTopLevelStmt(pstate, parseTree); - if (compute_query_id) + if (IsQueryIdEnabled()) jstate = JumbleQuery(query, sourceText); if (post_parse_analyze_hook) @@ -163,7 +163,7 @@ parse_analyze_varparams(RawStmt *parseTree, const char *sourceText, /* make sure all is well with parameter types */ check_variable_parameters(pstate, query); - if (compute_query_id) + if (IsQueryIdEnabled()) jstate = JumbleQuery(query, sourceText); if (post_parse_analyze_hook) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 6833f0f7f2dbc..9ca1095f47feb 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -521,6 +521,7 @@ typedef struct pg_time_t first_syslogger_file_time; bool redirection_done; bool IsBinaryUpgrade; + bool auto_query_id_enabled; int max_safe_fds; int MaxBackends; #ifdef WIN32 @@ -6168,6 +6169,7 @@ save_backend_variables(BackendParameters *param, Port *port, param->redirection_done = redirection_done; param->IsBinaryUpgrade = IsBinaryUpgrade; + param->auto_query_id_enabled = auto_query_id_enabled; param->max_safe_fds = max_safe_fds; param->MaxBackends = MaxBackends; @@ -6401,6 +6403,7 @@ restore_backend_variables(BackendParameters *param, Port *port) redirection_done = param->redirection_done; IsBinaryUpgrade = param->IsBinaryUpgrade; + auto_query_id_enabled = param->auto_query_id_enabled; max_safe_fds = param->max_safe_fds; MaxBackends = param->MaxBackends; diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index dd2ade7bb652c..8cea10c90191b 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -704,7 +704,7 @@ pg_analyze_and_rewrite_params(RawStmt *parsetree, query = transformTopLevelStmt(pstate, parsetree); - if (compute_query_id) + if (IsQueryIdEnabled()) jstate = JumbleQuery(query, query_string); if (post_parse_analyze_hook) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index eb7f7181e43df..ee731044b6395 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -101,6 +101,7 @@ #include "utils/plancache.h" #include "utils/portal.h" #include "utils/ps_status.h" +#include "utils/queryjumble.h" #include "utils/rls.h" #include "utils/snapmgr.h" #include "utils/tzparser.h" @@ -402,6 +403,23 @@ static const struct config_enum_entry backslash_quote_options[] = { {NULL, 0, false} }; +/* + * Although only "on", "off", and "auto" are documented, we accept + * all the likely variants of "on" and "off". + */ +static const struct config_enum_entry compute_query_id_options[] = { + {"auto", COMPUTE_QUERY_ID_AUTO, false}, + {"on", COMPUTE_QUERY_ID_ON, false}, + {"off", COMPUTE_QUERY_ID_OFF, false}, + {"true", COMPUTE_QUERY_ID_ON, true}, + {"false", COMPUTE_QUERY_ID_OFF, true}, + {"yes", COMPUTE_QUERY_ID_ON, true}, + {"no", COMPUTE_QUERY_ID_OFF, true}, + {"1", COMPUTE_QUERY_ID_ON, true}, + {"0", COMPUTE_QUERY_ID_OFF, true}, + {NULL, 0, false} +}; + /* * Although only "on", "off", and "partition" are documented, we * accept all the likely variants of "on" and "off". @@ -534,7 +552,6 @@ extern const struct config_enum_entry dynamic_shared_memory_options[]; /* * GUC option variables that are exported from this module */ -bool compute_query_id = false; bool log_duration = false; bool Debug_print_plan = false; bool Debug_print_parse = false; @@ -1441,15 +1458,6 @@ static struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, - { - {"compute_query_id", PGC_SUSET, STATS_MONITORING, - gettext_noop("Compute query identifiers."), - NULL - }, - &compute_query_id, - false, - NULL, NULL, NULL - }, { {"log_parser_stats", PGC_SUSET, STATS_MONITORING, gettext_noop("Writes parser performance statistics to the server log."), @@ -4619,6 +4627,16 @@ static struct config_enum ConfigureNamesEnum[] = NULL, NULL, NULL }, + { + {"compute_query_id", PGC_SUSET, STATS_MONITORING, + gettext_noop("Compute query identifiers."), + NULL + }, + &compute_query_id, + COMPUTE_QUERY_ID_AUTO, compute_query_id_options, + NULL, NULL, NULL + }, + { {"constraint_exclusion", PGC_USERSET, QUERY_TUNING_OTHER, gettext_noop("Enables the planner to use constraints to optimize queries."), diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index efde01ee566db..6e36e4c2eff6d 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -604,7 +604,7 @@ # - Monitoring - -#compute_query_id = off +#compute_query_id = auto #log_statement_stats = off #log_parser_stats = off #log_planner_stats = off diff --git a/src/backend/utils/misc/queryjumble.c b/src/backend/utils/misc/queryjumble.c index f004a9ce8cde1..9f2cd1f127691 100644 --- a/src/backend/utils/misc/queryjumble.c +++ b/src/backend/utils/misc/queryjumble.c @@ -39,6 +39,12 @@ #define JUMBLE_SIZE 1024 /* query serialization buffer size */ +/* GUC parameters */ +int compute_query_id = COMPUTE_QUERY_ID_AUTO; + +/* True when compute_query_id is ON, or AUTO and a module requests them */ +bool query_id_enabled = false; + static uint64 compute_utility_query_id(const char *str, int query_location, int query_len); static void AppendJumble(JumbleState *jstate, const unsigned char *item, Size size); @@ -96,6 +102,8 @@ JumbleQuery(Query *query, const char *querytext) { JumbleState *jstate = NULL; + Assert(IsQueryIdEnabled()); + if (query->utilityStmt) { query->queryId = compute_utility_query_id(querytext, @@ -132,6 +140,19 @@ JumbleQuery(Query *query, const char *querytext) return jstate; } +/* + * Enables query identifier computation. + * + * Third-party plugins can use this function to inform core that they require + * a query identifier to be computed. + */ +void +EnableQueryId(void) +{ + if (compute_query_id != COMPUTE_QUERY_ID_OFF) + query_id_enabled = true; +} + /* * Compute a query identifier for the given utility query string. */ diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 24a5d9d3fb283..a7c3a4958e064 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -247,7 +247,6 @@ extern bool log_btree_build_stats; extern PGDLLIMPORT bool check_function_bodies; extern bool session_auth_is_superuser; -extern bool compute_query_id; extern bool log_duration; extern int log_parameter_max_length; extern int log_parameter_max_length_on_error; diff --git a/src/include/utils/queryjumble.h b/src/include/utils/queryjumble.h index 83ba7339faee8..1f4d062babd27 100644 --- a/src/include/utils/queryjumble.h +++ b/src/include/utils/queryjumble.h @@ -52,7 +52,36 @@ typedef struct JumbleState int highest_extern_param_id; } JumbleState; -const char *CleanQuerytext(const char *query, int *location, int *len); -JumbleState *JumbleQuery(Query *query, const char *querytext); +/* Values for the compute_query_id GUC */ +typedef enum +{ + COMPUTE_QUERY_ID_OFF, + COMPUTE_QUERY_ID_ON, + COMPUTE_QUERY_ID_AUTO +} ComputeQueryIdType; + +/* GUC parameters */ +extern int compute_query_id; + + +extern const char *CleanQuerytext(const char *query, int *location, int *len); +extern JumbleState *JumbleQuery(Query *query, const char *querytext); +extern void EnableQueryId(void); + +extern bool query_id_enabled; + +/* + * Returns whether query identifier computation has been enabled, either + * directly in the GUC or by a module when the setting is 'auto'. + */ +static inline bool +IsQueryIdEnabled(void) +{ + if (compute_query_id == COMPUTE_QUERY_ID_OFF) + return false; + if (compute_query_id == COMPUTE_QUERY_ID_ON) + return true; + return query_id_enabled; +} #endif /* QUERYJUMBLE_H */ From 354f32d01dedc2c86a05be298a62cdae9710d203 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Sat, 15 May 2021 15:17:15 -0400 Subject: [PATCH 314/671] Unbreak EXEC_BACKEND build Per buildfarm --- src/backend/postmaster/postmaster.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 9ca1095f47feb..53278594722a6 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -128,6 +128,7 @@ #include "utils/memutils.h" #include "utils/pidfile.h" #include "utils/ps_status.h" +#include "utils/queryjumble.h" #include "utils/timeout.h" #include "utils/timestamp.h" #include "utils/varlena.h" @@ -521,7 +522,7 @@ typedef struct pg_time_t first_syslogger_file_time; bool redirection_done; bool IsBinaryUpgrade; - bool auto_query_id_enabled; + bool query_id_enabled; int max_safe_fds; int MaxBackends; #ifdef WIN32 @@ -6169,7 +6170,7 @@ save_backend_variables(BackendParameters *param, Port *port, param->redirection_done = redirection_done; param->IsBinaryUpgrade = IsBinaryUpgrade; - param->auto_query_id_enabled = auto_query_id_enabled; + param->query_id_enabled = query_id_enabled; param->max_safe_fds = max_safe_fds; param->MaxBackends = MaxBackends; @@ -6403,7 +6404,7 @@ restore_backend_variables(BackendParameters *param, Port *port) redirection_done = param->redirection_done; IsBinaryUpgrade = param->IsBinaryUpgrade; - auto_query_id_enabled = param->auto_query_id_enabled; + query_id_enabled = param->query_id_enabled; max_safe_fds = param->max_safe_fds; MaxBackends = param->MaxBackends; From 6cb5346cb15d56e6ba8288b891c7098f0aecdadc Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sat, 15 May 2021 17:26:26 -0400 Subject: [PATCH 315/671] doc: update PG 14 release notes for compute_query_id change Also remove ALTER TYPE ...SUBSCRIPT, and update for all current commits. --- doc/src/sgml/release-14.sgml | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index bad12860924e8..b32c7154cbba4 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -6,7 +6,7 @@ Release date: - 2021-??-?? (AS OF 2021-05-09) + 2021-??-?? (AS OF 2021-05-15) @@ -1108,10 +1108,12 @@ Author: Bruce Momjian 2021-04-20 [9660834dd] adjust query id feature to use pg_stat_activity.query_id Author: Bruce Momjian 2021-05-03 [f7a97b6ec] Update query_id computation +Author: Alvaro Herrera +2021-05-15 [cafde58b3] Allow compute_query_id to be set to 'auto' and make it d --> -If server variable compute_query_id is enabled, display the hash in pg_stat_activity, EXPLAIN VERBOSE, csvlog, and optionally in log_line_prefix (Julien Rouhaud) +If server variable compute_query_id is enabled, display the hash in pg_stat_activity, EXPLAIN VERBOSE, csvlog, and optionally in log_line_prefix (Julien Rouhaud, Álvaro Herrera) @@ -2021,17 +2023,6 @@ The postgres_fdw module also now supports this. - - - - -Allow ALTER TYPE to specify or remove a SUBSCRIPT handler (Tom Lane) - - - @@ -3183,8 +3176,7 @@ Move query hash computation from pg_stat_statements to the core server (Julien R From f39b21e6a25c7269f50a709aa874e321e6f84b20 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sat, 15 May 2021 17:30:45 -0400 Subject: [PATCH 316/671] doc: remove XML comments around compute_query_id PG14 rel text --- doc/src/sgml/release-14.sgml | 2 -- 1 file changed, 2 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index b32c7154cbba4..6747860a4fc69 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -3174,11 +3174,9 @@ Author: Bruce Momjian Move query hash computation from pg_stat_statements to the core server (Julien Rouhaud) - From 07af57dbad589bbef9d7178d9b1cb354412e823f Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sun, 16 May 2021 23:34:50 -0400 Subject: [PATCH 317/671] doc: update PG 14 relnotes from feedback by Tom, Alvaro, Julien --- doc/src/sgml/release-14.sgml | 64 ++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 6747860a4fc69..2f5f4e91ed461 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -128,7 +128,7 @@ Change the default of the password_encryption server parameter to scram-sha-256 -Previously it was md5. All new passwords will be stored as SHA256 unless this server variable is changed or the password is already md5-hashed. +Previously it was md5. All new passwords will be stored as SHA256 unless this server variable is changed or the password is specified in md5 format. Also, the legacy (and undocumented) boolean-like values which were previously synonyms for md5 are no longer accepted. @@ -678,11 +678,11 @@ Author: Alvaro Herrera --> -Autovacuum now analyzes partitioned tables (Yuzuko Hosoya) +Autovacuum now analyzes partitioned tables (Yuzuko Hosoya, Álvaro Herrera) -DETAILS? +Insert, update, and delete tuple counts from partitions are now propagated to their parent tables so autovacuum knows when to process them. @@ -1113,7 +1113,7 @@ Author: Alvaro Herrera --> -If server variable compute_query_id is enabled, display the hash in pg_stat_activity, EXPLAIN VERBOSE, csvlog, and optionally in log_line_prefix (Julien Rouhaud, Álvaro Herrera) +If server variable compute_query_id is enabled, display the query id in pg_stat_activity, EXPLAIN VERBOSE, csvlog, and optionally in log_line_prefix (Julien Rouhaud) @@ -2075,6 +2075,41 @@ Allow CURRENT_ROLE every place CURRENT_USER is accepted (Peter Eisentraut) + + + + +Allow extensions and built-in data types to implement subscripting (Dmitry Dolgov) + + + +Previously subscript handling was hard-coded into the server, so that subscripting could only be applied to array types. This change allows subscript notation to be used to extract or +assign portions of a value of any type for which the concept makes sense. + + + + + + + +Allow subscripting of JSONB (Dmitry Dolgov) + + + +JSONB subscripting can be used to extract and assign to portions of JSONB documents. + + + - - -Allow subscripting of JSONB and simplify the implementation of subscripting (Dmitry Dolgov) - - - -JSONB subscripting can be used to extract from and assign to JSONB documents. Extensions and built-in data types can now implement subscripting more easily. - - - -Improve the output format of libpq's PQtrace() (Aya Iwata) +Improve the output format of libpq's PQtrace() (Aya Iwata, Álvaro Herrera) From 15fcd33e0694428d0567a6796891b759bc91e6f9 Mon Sep 17 00:00:00 2001 From: Etsuro Fujita Date: Mon, 17 May 2021 17:30:00 +0900 Subject: [PATCH 318/671] Doc: Update documentation for asynchronous execution. Add a note of caution on the performance of asynchronous execution by postgres_fdw. Follow-up for commit 27e1f1456. Stephen Frost, a little bit expanded by me. Discussion: https://postgr.es/m/20210506171224.GV20766%40tamriel.snowman.net --- doc/src/sgml/postgres-fdw.sgml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/src/sgml/postgres-fdw.sgml b/doc/src/sgml/postgres-fdw.sgml index 839126c4efe79..fb87372bde1a2 100644 --- a/doc/src/sgml/postgres-fdw.sgml +++ b/doc/src/sgml/postgres-fdw.sgml @@ -401,6 +401,16 @@ OPTIONS (ADD password_required 'false'); A table-level option overrides a server-level option. The default is false. + + + In order to ensure that the data being returned from a foreign server + is consistent, postgres_fdw will only open one + connection for a given foreign server and will run all queries against + that server sequentially even if there are multiple foreign tables + involved, unless those tables are subject to different user mappings. + In such a case, it may be more performant to disable this option to + eliminate the overhead associated with running queries asynchronously. + From f9e6d00df029144fd8f4ec70c52b5a1d2444f895 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Mon, 17 May 2021 10:59:54 +0200 Subject: [PATCH 319/671] Fix wording in description of pg_stat_statements.toplevel Incorrect wording got applied in 7531fcb1fcf. Reported-By: Fujii Masao Discussion: https://postgr.es/m/e5512912-eac9-b163-df2b-e2601ce06d27@oss.nttdata.com --- doc/src/sgml/pgstatstatements.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/pgstatstatements.sgml b/doc/src/sgml/pgstatstatements.sgml index aa332d8cc2264..f20b255d4e425 100644 --- a/doc/src/sgml/pgstatstatements.sgml +++ b/doc/src/sgml/pgstatstatements.sgml @@ -89,8 +89,8 @@ True if the query was executed as a top level statement - (if pg_stat_statements.track is set to - all, otherwise always false) + (always true if pg_stat_statements.track is set to + top) From 6292b83074243db94df89271842bda0877cbc4ce Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 17 May 2021 14:30:27 +0200 Subject: [PATCH 320/671] Translation updates Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git Source-Git-Hash: 9bbd9c3714d0c76daaa806588b1fbf744aa60496 --- src/backend/po/de.po | 3309 +++-- src/backend/po/es.po | 16619 ++++++++++++++----------- src/backend/po/fr.po | 4173 +++---- src/bin/initdb/po/es.po | 333 +- src/bin/pg_amcheck/nls.mk | 2 +- src/bin/pg_amcheck/po/de.po | 461 + src/bin/pg_archivecleanup/nls.mk | 2 +- src/bin/pg_archivecleanup/po/el.po | 178 + src/bin/pg_basebackup/po/es.po | 183 +- src/bin/pg_checksums/nls.mk | 2 +- src/bin/pg_checksums/po/el.po | 308 + src/bin/pg_checksums/po/es.po | 75 +- src/bin/pg_config/nls.mk | 2 +- src/bin/pg_config/po/el.po | 259 + src/bin/pg_config/po/es.po | 28 +- src/bin/pg_ctl/po/es.po | 278 +- src/bin/pg_dump/po/de.po | 408 +- src/bin/pg_dump/po/es.po | 1054 +- src/bin/pg_rewind/po/de.po | 90 +- src/bin/pg_rewind/po/es.po | 538 +- src/bin/pg_rewind/po/fr.po | 440 +- src/bin/pg_test_fsync/nls.mk | 2 +- src/bin/pg_test_fsync/po/el.po | 175 + src/bin/pg_test_fsync/po/es.po | 82 +- src/bin/pg_test_timing/nls.mk | 2 +- src/bin/pg_test_timing/po/el.po | 83 + src/bin/pg_upgrade/po/de.po | 330 +- src/bin/pg_upgrade/po/es.po | 603 +- src/bin/pg_upgrade/po/fr.po | 448 +- src/bin/pg_verifybackup/po/es.po | 180 +- src/bin/psql/po/es.po | 3051 ++--- src/bin/scripts/po/es.po | 570 +- src/interfaces/ecpg/preproc/po/de.po | 92 +- src/interfaces/ecpg/preproc/po/es.po | 200 +- src/interfaces/libpq/po/es.po | 885 +- src/interfaces/libpq/po/fr.po | 430 +- src/pl/plpgsql/src/po/es.po | 360 +- src/pl/tcl/nls.mk | 2 +- src/pl/tcl/po/el.po | 110 + 39 files changed, 20020 insertions(+), 16327 deletions(-) create mode 100644 src/bin/pg_amcheck/po/de.po create mode 100644 src/bin/pg_archivecleanup/po/el.po create mode 100644 src/bin/pg_checksums/po/el.po create mode 100644 src/bin/pg_config/po/el.po create mode 100644 src/bin/pg_test_fsync/po/el.po create mode 100644 src/bin/pg_test_timing/po/el.po create mode 100644 src/pl/tcl/po/el.po diff --git a/src/backend/po/de.po b/src/backend/po/de.po index e77e20fb1c961..99d40a045a033 100644 --- a/src/backend/po/de.po +++ b/src/backend/po/de.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-08 01:40+0000\n" -"PO-Revision-Date: 2021-05-10 11:57+0200\n" +"POT-Creation-Date: 2021-05-14 08:40+0000\n" +"PO-Revision-Date: 2021-05-14 15:15+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -32,11 +32,11 @@ msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %m" #: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1271 access/transam/xlog.c:3553 -#: access/transam/xlog.c:4781 access/transam/xlog.c:11363 -#: access/transam/xlog.c:11376 access/transam/xlog.c:11829 -#: access/transam/xlog.c:11909 access/transam/xlog.c:11946 -#: access/transam/xlog.c:12006 access/transam/xlogfuncs.c:703 +#: access/transam/twophase.c:1271 access/transam/xlog.c:3547 +#: access/transam/xlog.c:4772 access/transam/xlog.c:11338 +#: access/transam/xlog.c:11351 access/transam/xlog.c:11804 +#: access/transam/xlog.c:11884 access/transam/xlog.c:11921 +#: access/transam/xlog.c:11981 access/transam/xlogfuncs.c:703 #: access/transam/xlogfuncs.c:722 commands/extension.c:3465 libpq/hba.c:536 #: replication/basebackup.c:2020 replication/logical/origin.c:729 #: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4876 @@ -44,13 +44,13 @@ msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %m" #: replication/logical/snapbuild.c:1802 replication/slot.c:1658 #: replication/slot.c:1699 replication/walsender.c:544 #: storage/file/buffile.c:445 storage/file/copydir.c:195 -#: utils/adt/genfile.c:203 utils/adt/misc.c:859 utils/cache/relmapper.c:741 +#: utils/adt/genfile.c:202 utils/adt/misc.c:859 utils/cache/relmapper.c:741 #, c-format msgid "could not read file \"%s\": %m" msgstr "konnte Datei »%s« nicht lesen: %m" #: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 -#: access/transam/xlog.c:3558 access/transam/xlog.c:4786 +#: access/transam/xlog.c:3552 access/transam/xlog.c:4777 #: replication/basebackup.c:2024 replication/logical/origin.c:734 #: replication/logical/origin.c:773 replication/logical/snapbuild.c:1738 #: replication/logical/snapbuild.c:1780 replication/logical/snapbuild.c:1807 @@ -65,10 +65,10 @@ msgstr "konnte Datei »%s« nicht lesen: %d von %zu gelesen" #: access/heap/rewriteheap.c:1185 access/heap/rewriteheap.c:1288 #: access/transam/timeline.c:392 access/transam/timeline.c:438 #: access/transam/timeline.c:516 access/transam/twophase.c:1283 -#: access/transam/twophase.c:1682 access/transam/xlog.c:3425 -#: access/transam/xlog.c:3593 access/transam/xlog.c:3598 -#: access/transam/xlog.c:3925 access/transam/xlog.c:4751 -#: access/transam/xlog.c:5676 access/transam/xlogfuncs.c:728 +#: access/transam/twophase.c:1680 access/transam/xlog.c:3419 +#: access/transam/xlog.c:3587 access/transam/xlog.c:3592 +#: access/transam/xlog.c:3920 access/transam/xlog.c:4742 +#: access/transam/xlog.c:5667 access/transam/xlogfuncs.c:728 #: commands/copyfrom.c:1576 commands/copyto.c:328 libpq/be-fsstubs.c:462 #: libpq/be-fsstubs.c:533 replication/logical/origin.c:667 #: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:4934 @@ -104,33 +104,33 @@ msgstr "" #: ../common/file_utils.c:365 access/heap/rewriteheap.c:1271 #: access/transam/timeline.c:111 access/transam/timeline.c:251 #: access/transam/timeline.c:348 access/transam/twophase.c:1227 -#: access/transam/xlog.c:3311 access/transam/xlog.c:3467 -#: access/transam/xlog.c:3508 access/transam/xlog.c:3706 -#: access/transam/xlog.c:3790 access/transam/xlog.c:3893 -#: access/transam/xlog.c:4771 access/transam/xlogutils.c:817 -#: postmaster/syslogger.c:1487 replication/basebackup.c:616 +#: access/transam/xlog.c:3305 access/transam/xlog.c:3461 +#: access/transam/xlog.c:3502 access/transam/xlog.c:3700 +#: access/transam/xlog.c:3785 access/transam/xlog.c:3888 +#: access/transam/xlog.c:4762 access/transam/xlogutils.c:803 +#: postmaster/syslogger.c:1488 replication/basebackup.c:616 #: replication/basebackup.c:1610 replication/logical/origin.c:719 #: replication/logical/reorderbuffer.c:3544 #: replication/logical/reorderbuffer.c:4091 #: replication/logical/reorderbuffer.c:4856 #: replication/logical/snapbuild.c:1597 replication/logical/snapbuild.c:1704 #: replication/slot.c:1630 replication/walsender.c:517 -#: replication/walsender.c:2527 storage/file/copydir.c:161 +#: replication/walsender.c:2526 storage/file/copydir.c:161 #: storage/file/fd.c:713 storage/file/fd.c:3521 storage/file/fd.c:3608 #: storage/smgr/md.c:502 utils/cache/relmapper.c:724 #: utils/cache/relmapper.c:836 utils/error/elog.c:1938 #: utils/init/miscinit.c:1346 utils/init/miscinit.c:1480 -#: utils/init/miscinit.c:1557 utils/misc/guc.c:8637 utils/misc/guc.c:8669 +#: utils/init/miscinit.c:1557 utils/misc/guc.c:8585 utils/misc/guc.c:8617 #, c-format msgid "could not open file \"%s\": %m" msgstr "konnte Datei »%s« nicht öffnen: %m" #: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 -#: access/transam/twophase.c:1655 access/transam/twophase.c:1664 -#: access/transam/xlog.c:11120 access/transam/xlog.c:11158 -#: access/transam/xlog.c:11571 access/transam/xlogfuncs.c:782 -#: postmaster/postmaster.c:5641 postmaster/syslogger.c:1498 -#: postmaster/syslogger.c:1511 utils/cache/relmapper.c:870 +#: access/transam/twophase.c:1653 access/transam/twophase.c:1662 +#: access/transam/xlog.c:11095 access/transam/xlog.c:11133 +#: access/transam/xlog.c:11546 access/transam/xlogfuncs.c:782 +#: postmaster/postmaster.c:5642 postmaster/syslogger.c:1499 +#: postmaster/syslogger.c:1512 utils/cache/relmapper.c:870 #, c-format msgid "could not write file \"%s\": %m" msgstr "konnte Datei »%s« nicht schreiben: %m" @@ -139,13 +139,13 @@ msgstr "konnte Datei »%s« nicht schreiben: %m" #: ../common/file_utils.c:303 ../common/file_utils.c:373 #: access/heap/rewriteheap.c:967 access/heap/rewriteheap.c:1179 #: access/heap/rewriteheap.c:1282 access/transam/timeline.c:432 -#: access/transam/timeline.c:510 access/transam/twophase.c:1676 -#: access/transam/xlog.c:3418 access/transam/xlog.c:3587 -#: access/transam/xlog.c:4744 access/transam/xlog.c:10611 -#: access/transam/xlog.c:10652 replication/logical/snapbuild.c:1635 +#: access/transam/timeline.c:510 access/transam/twophase.c:1674 +#: access/transam/xlog.c:3412 access/transam/xlog.c:3581 +#: access/transam/xlog.c:4735 access/transam/xlog.c:10586 +#: access/transam/xlog.c:10627 replication/logical/snapbuild.c:1635 #: replication/slot.c:1535 replication/slot.c:1640 storage/file/fd.c:730 #: storage/file/fd.c:3629 storage/smgr/md.c:950 storage/smgr/md.c:991 -#: storage/sync/sync.c:417 utils/cache/relmapper.c:885 utils/misc/guc.c:8424 +#: storage/sync/sync.c:417 utils/cache/relmapper.c:885 utils/misc/guc.c:8372 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fsyncen: %m" @@ -153,14 +153,14 @@ msgstr "konnte Datei »%s« nicht fsyncen: %m" #: ../common/cryptohash_openssl.c:104 ../common/exec.c:522 ../common/exec.c:567 #: ../common/exec.c:659 ../common/hmac_openssl.c:103 ../common/psprintf.c:143 #: ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 -#: ../port/path.c:685 access/transam/twophase.c:1338 access/transam/xlog.c:6633 -#: lib/dshash.c:246 libpq/auth.c:1483 libpq/auth.c:1551 libpq/auth.c:2109 +#: ../port/path.c:685 access/transam/twophase.c:1341 access/transam/xlog.c:6633 +#: lib/dshash.c:246 libpq/auth.c:1482 libpq/auth.c:1550 libpq/auth.c:2108 #: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:347 -#: postmaster/bgworker.c:937 postmaster/postmaster.c:2513 -#: postmaster/postmaster.c:4156 postmaster/postmaster.c:4826 -#: postmaster/postmaster.c:5566 postmaster/postmaster.c:5930 +#: postmaster/bgworker.c:937 postmaster/postmaster.c:2514 +#: postmaster/postmaster.c:4157 postmaster/postmaster.c:4827 +#: postmaster/postmaster.c:5567 postmaster/postmaster.c:5931 #: replication/libpqwalreceiver/libpqwalreceiver.c:282 -#: replication/logical/logical.c:206 replication/walsender.c:588 +#: replication/logical/logical.c:205 replication/walsender.c:591 #: storage/buffer/localbuf.c:442 storage/file/fd.c:882 storage/file/fd.c:1352 #: storage/file/fd.c:1513 storage/file/fd.c:2321 storage/ipc/procarray.c:1388 #: storage/ipc/procarray.c:2182 storage/ipc/procarray.c:2189 @@ -171,8 +171,8 @@ msgstr "konnte Datei »%s« nicht fsyncen: %m" #: utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 #: utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 #: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 -#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5069 -#: utils/misc/guc.c:5085 utils/misc/guc.c:5098 utils/misc/guc.c:8402 +#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5017 +#: utils/misc/guc.c:5033 utils/misc/guc.c:5046 utils/misc/guc.c:8350 #: utils/misc/tzparser.c:467 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:701 #: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:234 #: utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 @@ -208,7 +208,7 @@ msgstr "konnte kein »%s« zum Ausführen finden" msgid "could not change directory to \"%s\": %m" msgstr "konnte nicht in Verzeichnis »%s« wechseln: %m" -#: ../common/exec.c:286 access/transam/xlog.c:10994 +#: ../common/exec.c:286 access/transam/xlog.c:10969 #: replication/basebackup.c:1428 utils/adt/misc.c:340 #, c-format msgid "could not read symbolic link \"%s\": %m" @@ -237,8 +237,8 @@ msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" #: ../common/file_utils.c:87 ../common/file_utils.c:451 #: ../common/file_utils.c:455 access/transam/twophase.c:1239 -#: access/transam/xlog.c:11096 access/transam/xlog.c:11134 -#: access/transam/xlog.c:11351 access/transam/xlogarchive.c:110 +#: access/transam/xlog.c:11071 access/transam/xlog.c:11109 +#: access/transam/xlog.c:11326 access/transam/xlogarchive.c:110 #: access/transam/xlogarchive.c:227 commands/copyfrom.c:1526 #: commands/copyto.c:734 commands/extension.c:3444 commands/tablespace.c:807 #: commands/tablespace.c:898 guc-file.l:1060 replication/basebackup.c:439 @@ -246,14 +246,14 @@ msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" #: replication/logical/snapbuild.c:1514 storage/file/copydir.c:68 #: storage/file/copydir.c:107 storage/file/fd.c:1863 storage/file/fd.c:1949 #: storage/file/fd.c:3149 storage/file/fd.c:3353 utils/adt/dbsize.c:70 -#: utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:419 -#: utils/adt/genfile.c:645 +#: utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:418 +#: utils/adt/genfile.c:644 #, c-format msgid "could not stat file \"%s\": %m" msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" #: ../common/file_utils.c:166 ../common/pgfnames.c:48 commands/tablespace.c:730 -#: commands/tablespace.c:740 postmaster/postmaster.c:1512 +#: commands/tablespace.c:740 postmaster/postmaster.c:1513 #: storage/file/fd.c:2724 storage/file/reinit.c:122 utils/adt/misc.c:262 #: utils/misc/tzparser.c:338 #, c-format @@ -266,7 +266,7 @@ msgid "could not read directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht lesen: %m" #: ../common/file_utils.c:383 access/transam/xlogarchive.c:412 -#: postmaster/syslogger.c:1522 replication/logical/snapbuild.c:1654 +#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1654 #: replication/slot.c:668 replication/slot.c:1421 replication/slot.c:1563 #: storage/file/fd.c:748 storage/file/fd.c:846 utils/time/snapmgr.c:1265 #, c-format @@ -413,7 +413,7 @@ msgstr "ungültiger Fork-Name" msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Gültige Fork-Namen sind »main«, »fsm«, »vm« und »init«." -#: ../common/restricted_token.c:64 libpq/auth.c:1513 libpq/auth.c:2545 +#: ../common/restricted_token.c:64 libpq/auth.c:1512 libpq/auth.c:2544 #, c-format msgid "could not load library \"%s\": error code %lu" msgstr "konnte Bibliothek »%s« nicht laden: Fehlercode %lu" @@ -485,7 +485,7 @@ msgstr "" msgid "could not look up effective user ID %ld: %s" msgstr "konnte effektive Benutzer-ID %ld nicht nachschlagen: %s" -#: ../common/username.c:45 libpq/auth.c:2045 +#: ../common/username.c:45 libpq/auth.c:2044 msgid "user does not exist" msgstr "Benutzer existiert nicht" @@ -608,7 +608,7 @@ msgid "request for BRIN range summarization for index \"%s\" page %u was not rec msgstr "Aufforderung für BRIN-Range-Summarization für Index »%s« Seite %u wurde nicht aufgezeichnet" #: access/brin/brin.c:1015 access/brin/brin.c:1092 access/gin/ginfast.c:1035 -#: access/transam/xlog.c:10773 access/transam/xlog.c:11302 +#: access/transam/xlog.c:10748 access/transam/xlog.c:11277 #: access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 #: access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 #: access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 @@ -647,8 +647,8 @@ msgstr "konnte Basistabelle von Index »%s« nicht öffnen" msgid "cannot accept a value of type %s" msgstr "kann keinen Wert vom Typ %s annehmen" -#: access/brin/brin_minmax_multi.c:2141 access/brin/brin_minmax_multi.c:2148 -#: access/brin/brin_minmax_multi.c:2155 utils/adt/timestamp.c:941 +#: access/brin/brin_minmax_multi.c:2142 access/brin/brin_minmax_multi.c:2149 +#: access/brin/brin_minmax_multi.c:2156 utils/adt/timestamp.c:941 #: utils/adt/timestamp.c:1515 utils/adt/timestamp.c:1982 #: utils/adt/timestamp.c:3059 utils/adt/timestamp.c:3064 #: utils/adt/timestamp.c:3069 utils/adt/timestamp.c:3119 @@ -669,12 +669,12 @@ msgstr "interval-Wert ist außerhalb des gültigen Bereichs" msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "Größe %zu der Indexzeile überschreitet Maximum %zu für Index »%s«" -#: access/brin/brin_revmap.c:392 access/brin/brin_revmap.c:398 +#: access/brin/brin_revmap.c:393 access/brin/brin_revmap.c:399 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "verfälschter BRIN-Index: inkonsistente Range-Map" -#: access/brin/brin_revmap.c:601 +#: access/brin/brin_revmap.c:602 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "unerwarteter Seitentyp 0x%04X in BRIN-Index »%s« Block %u" @@ -806,7 +806,7 @@ msgstr "RESET darf keinen Parameterwert enthalten" msgid "unrecognized parameter namespace \"%s\"" msgstr "unbekannter Parameter-Namensraum »%s«" -#: access/common/reloptions.c:1277 utils/misc/guc.c:12561 +#: access/common/reloptions.c:1277 utils/misc/guc.c:12495 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "Tabellen mit WITH OIDS werden nicht unterstützt" @@ -868,10 +868,11 @@ msgstr "Unlink wird bei Komprimierung nicht unterstützt" msgid "This functionality requires the server to be built with lz4 support." msgstr "Diese Funktionalität verlangt, dass der Server mit Libxml-Unterstützung gebaut wird." -#: access/common/toast_compression.c:34 +#: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1589 +#: utils/adt/xml.c:224 #, c-format -msgid "You need to rebuild PostgreSQL using --with-lz4." -msgstr "Sie müssen PostgreSQL mit --with-lz4 neu bauen." +msgid "You need to rebuild PostgreSQL using %s." +msgstr "Sie müssen PostgreSQL mit %s neu bauen." #: access/common/tupdesc.c:822 parser/parse_clause.c:772 #: parser/parse_relation.c:1838 @@ -919,8 +920,8 @@ msgstr "alte GIN-Indexe unterstützen keine Scans des ganzen Index oder Suchen n msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Um das zu reparieren, führen Sie REINDEX INDEX \"%s\" aus." -#: access/gin/ginutil.c:145 executor/execExpr.c:2112 -#: utils/adt/arrayfuncs.c:3816 utils/adt/arrayfuncs.c:6444 +#: access/gin/ginutil.c:145 executor/execExpr.c:2166 +#: utils/adt/arrayfuncs.c:3818 utils/adt/arrayfuncs.c:6452 #: utils/adt/rowtypes.c:957 #, c-format msgid "could not identify a comparison function for type %s" @@ -1062,33 +1063,33 @@ msgstr "in Operatorfamilie »%s« für Zugriffsmethode %s fehlt Support-Funktion msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "in Operatorfamilie »%s« für Zugriffsmethode %s fehlen typübergreifende Operatoren" -#: access/heap/heapam.c:2324 +#: access/heap/heapam.c:2328 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "in einem parallelen Arbeitsprozess können keine Tupel eingefügt werden" -#: access/heap/heapam.c:2795 +#: access/heap/heapam.c:2799 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "während einer parallelen Operation können keine Tupel gelöscht werden" -#: access/heap/heapam.c:2841 +#: access/heap/heapam.c:2845 #, c-format msgid "attempted to delete invisible tuple" msgstr "Versuch ein unsichtbares Tupel zu löschen" -#: access/heap/heapam.c:3266 access/heap/heapam.c:6067 +#: access/heap/heapam.c:3277 access/heap/heapam.c:6078 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "während einer parallelen Operation können keine Tupel aktualisiert werden" -#: access/heap/heapam.c:3399 +#: access/heap/heapam.c:3410 #, c-format msgid "attempted to update invisible tuple" msgstr "Versuch ein unsichtbares Tupel zu aktualisieren" -#: access/heap/heapam.c:4720 access/heap/heapam.c:4758 -#: access/heap/heapam.c:5014 access/heap/heapam_handler.c:454 +#: access/heap/heapam.c:4731 access/heap/heapam.c:4769 +#: access/heap/heapam.c:5025 access/heap/heapam_handler.c:454 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "konnte Sperre für Zeile in Relation »%s« nicht setzen" @@ -1110,11 +1111,11 @@ msgstr "konnte nicht in Datei »%s« schreiben, %d von %d geschrieben: %m" #: access/heap/rewriteheap.c:1020 access/heap/rewriteheap.c:1138 #: access/transam/timeline.c:329 access/transam/timeline.c:485 -#: access/transam/xlog.c:3334 access/transam/xlog.c:3522 -#: access/transam/xlog.c:4723 access/transam/xlog.c:11111 -#: access/transam/xlog.c:11149 access/transam/xlog.c:11554 -#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4581 -#: postmaster/postmaster.c:5628 replication/logical/origin.c:587 +#: access/transam/xlog.c:3328 access/transam/xlog.c:3516 +#: access/transam/xlog.c:4714 access/transam/xlog.c:11086 +#: access/transam/xlog.c:11124 access/transam/xlog.c:11529 +#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4582 +#: postmaster/postmaster.c:5629 replication/logical/origin.c:587 #: replication/slot.c:1482 storage/file/copydir.c:167 storage/smgr/md.c:218 #: utils/time/snapmgr.c:1244 #, c-format @@ -1128,23 +1129,23 @@ msgstr "konnte Datei »%s« nicht auf %u kürzen: %m" #: access/heap/rewriteheap.c:1166 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:502 -#: access/transam/xlog.c:3406 access/transam/xlog.c:3578 -#: access/transam/xlog.c:4735 postmaster/postmaster.c:4591 -#: postmaster/postmaster.c:4601 replication/logical/origin.c:599 +#: access/transam/xlog.c:3400 access/transam/xlog.c:3572 +#: access/transam/xlog.c:4726 postmaster/postmaster.c:4592 +#: postmaster/postmaster.c:4602 replication/logical/origin.c:599 #: replication/logical/origin.c:641 replication/logical/origin.c:660 #: replication/logical/snapbuild.c:1611 replication/slot.c:1517 #: storage/file/buffile.c:506 storage/file/copydir.c:207 #: utils/init/miscinit.c:1421 utils/init/miscinit.c:1432 -#: utils/init/miscinit.c:1440 utils/misc/guc.c:8385 utils/misc/guc.c:8416 -#: utils/misc/guc.c:10325 utils/misc/guc.c:10339 utils/time/snapmgr.c:1249 +#: utils/init/miscinit.c:1440 utils/misc/guc.c:8333 utils/misc/guc.c:8364 +#: utils/misc/guc.c:10273 utils/misc/guc.c:10287 utils/time/snapmgr.c:1249 #: utils/time/snapmgr.c:1256 #, c-format msgid "could not write to file \"%s\": %m" msgstr "konnte nicht in Datei »%s« schreiben: %m" -#: access/heap/rewriteheap.c:1256 access/transam/twophase.c:1615 +#: access/heap/rewriteheap.c:1256 access/transam/twophase.c:1613 #: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 -#: postmaster/postmaster.c:1093 postmaster/syslogger.c:1464 +#: postmaster/postmaster.c:1094 postmaster/syslogger.c:1465 #: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4358 #: replication/logical/snapbuild.c:1556 replication/logical/snapbuild.c:1972 #: replication/slot.c:1614 storage/file/fd.c:788 storage/file/fd.c:3169 @@ -1185,183 +1186,184 @@ msgstr "Seiten: %u entfernt, %u verbleiben, %u übersprungen wegen Pins, %u übe msgid "tuples: %lld removed, %lld remain, %lld are dead but not yet removable, oldest xmin: %u\n" msgstr "Tupel: %lld entfernt, %lld verbleiben, %lld sind tot aber noch nicht entfernbar, ältestes xmin: %u\n" -#: access/heap/vacuumlazy.c:774 commands/analyze.c:795 +#: access/heap/vacuumlazy.c:774 commands/analyze.c:794 #, c-format msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" msgstr "Puffer-Verwendung: %lld Treffer, %lld Verfehlen, %lld geändert\n" -#: access/heap/vacuumlazy.c:782 +#: access/heap/vacuumlazy.c:784 #, c-format msgid " %u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n" msgstr "" -#: access/heap/vacuumlazy.c:785 +#: access/heap/vacuumlazy.c:787 #, fuzzy #| msgid "index \"%s\" not found" msgid "index scan not needed:" msgstr "Index »%s« nicht gefunden" -#: access/heap/vacuumlazy.c:787 +#: access/heap/vacuumlazy.c:789 #, fuzzy #| msgid "index \"%s\" was reindexed" msgid "index scan needed:" msgstr "Index »%s« wurde neu indiziert" -#: access/heap/vacuumlazy.c:791 +#: access/heap/vacuumlazy.c:793 #, c-format msgid " %u pages from table (%.2f%% of total) have %lld dead item identifiers\n" msgstr "" -#: access/heap/vacuumlazy.c:794 +#: access/heap/vacuumlazy.c:796 msgid "index scan bypassed:" msgstr "" -#: access/heap/vacuumlazy.c:796 +#: access/heap/vacuumlazy.c:798 msgid "index scan bypassed by failsafe:" msgstr "" -#: access/heap/vacuumlazy.c:811 +#: access/heap/vacuumlazy.c:814 #, c-format msgid "index \"%s\": pages: %u in total, %u newly deleted, %u currently deleted, %u reusable\n" msgstr "" -#: access/heap/vacuumlazy.c:818 commands/analyze.c:799 +#: access/heap/vacuumlazy.c:821 commands/analyze.c:798 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "durchschn. Leserate: %.3f MB/s, durchschn. Schreibrate: %.3f MB/s\n" -#: access/heap/vacuumlazy.c:822 commands/analyze.c:803 +#: access/heap/vacuumlazy.c:825 commands/analyze.c:802 msgid "I/O Timings:" msgstr "" -#: access/heap/vacuumlazy.c:824 commands/analyze.c:805 +#: access/heap/vacuumlazy.c:827 commands/analyze.c:804 #, c-format msgid " read=%.3f" msgstr "" -#: access/heap/vacuumlazy.c:827 commands/analyze.c:808 +#: access/heap/vacuumlazy.c:830 commands/analyze.c:807 #, c-format msgid " write=%.3f" msgstr "" -#: access/heap/vacuumlazy.c:831 +#: access/heap/vacuumlazy.c:834 #, c-format msgid "system usage: %s\n" msgstr "Systembenutzung: %s\n" -#: access/heap/vacuumlazy.c:833 -#, c-format -msgid "WAL usage: %ld records, %ld full page images, %llu bytes" +#: access/heap/vacuumlazy.c:836 +#, fuzzy, c-format +#| msgid "WAL usage: %ld records, %ld full page images, %llu bytes" +msgid "WAL usage: %lld records, %lld full page images, %llu bytes" msgstr "WAL-Benutzung: %ld Einträge, %ld Full Page Images, %llu Bytes" -#: access/heap/vacuumlazy.c:908 +#: access/heap/vacuumlazy.c:911 #, c-format msgid "aggressively vacuuming \"%s.%s\"" msgstr "aggressives Vacuum von »%s.%s«" -#: access/heap/vacuumlazy.c:913 commands/cluster.c:898 +#: access/heap/vacuumlazy.c:916 commands/cluster.c:898 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "Vacuum von »%s.%s«" -#: access/heap/vacuumlazy.c:1614 +#: access/heap/vacuumlazy.c:1617 #, fuzzy, c-format #| msgid "\"%s\": removed %d row versions in %d pages" msgid "\"%s\": removed %lld dead item identifiers in %u pages" msgstr "»%s«: %d Zeilenversionen in %d Seiten entfernt" -#: access/heap/vacuumlazy.c:1620 +#: access/heap/vacuumlazy.c:1623 #, c-format msgid "%lld dead row versions cannot be removed yet, oldest xmin: %u\n" msgstr "%lld tote Zeilenversionen können noch nicht entfernt werden, ältestes xmin: %u\n" -#: access/heap/vacuumlazy.c:1622 +#: access/heap/vacuumlazy.c:1625 #, c-format msgid "%u page removed.\n" msgid_plural "%u pages removed.\n" msgstr[0] "" msgstr[1] "" -#: access/heap/vacuumlazy.c:1626 +#: access/heap/vacuumlazy.c:1629 #, c-format msgid "Skipped %u page due to buffer pins, " msgid_plural "Skipped %u pages due to buffer pins, " msgstr[0] "%u Seite wegen Buffer-Pins übersprungen, " msgstr[1] "%u Seiten wegen Buffer-Pins übersprungen, " -#: access/heap/vacuumlazy.c:1630 +#: access/heap/vacuumlazy.c:1633 #, c-format msgid "%u frozen page.\n" msgid_plural "%u frozen pages.\n" msgstr[0] "%u eingefrorene Seite.\n" msgstr[1] "%u eingefrorene Seiten.\n" -#: access/heap/vacuumlazy.c:1634 commands/indexcmds.c:3986 +#: access/heap/vacuumlazy.c:1637 commands/indexcmds.c:3986 #: commands/indexcmds.c:4005 #, c-format msgid "%s." msgstr "%s." -#: access/heap/vacuumlazy.c:1637 +#: access/heap/vacuumlazy.c:1640 #, c-format msgid "\"%s\": found %lld removable, %lld nonremovable row versions in %u out of %u pages" msgstr "»%s«: %lld entfernbare, %lld nicht entfernbare Zeilenversionen in %u von %u Seiten gefunden" -#: access/heap/vacuumlazy.c:2142 +#: access/heap/vacuumlazy.c:2145 #, c-format msgid "\"%s\": index scan bypassed: %u pages from table (%.2f%% of total) have %lld dead item identifiers" msgstr "" -#: access/heap/vacuumlazy.c:2353 +#: access/heap/vacuumlazy.c:2356 #, fuzzy, c-format #| msgid "\"%s\": removed %d row versions in %d pages" msgid "\"%s\": removed %d dead item identifiers in %u pages" msgstr "»%s«: %d Zeilenversionen in %d Seiten entfernt" -#: access/heap/vacuumlazy.c:2600 +#: access/heap/vacuumlazy.c:2603 #, fuzzy, c-format #| msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgid "abandoned index vacuuming of table \"%s.%s.%s\" as a failsafe after %d index scans" msgstr "automatisches Vacuum der Tabelle »%s.%s.%s«: Index-Scans: %d\n" -#: access/heap/vacuumlazy.c:2605 +#: access/heap/vacuumlazy.c:2608 #, fuzzy, c-format #| msgid "oldest xmin is far in the past" msgid "table's relfrozenxid or relminmxid is too far in the past" msgstr "älteste xmin ist weit in der Vergangenheit" -#: access/heap/vacuumlazy.c:2606 +#: access/heap/vacuumlazy.c:2609 #, c-format msgid "" "Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" "You might also need to consider other ways for VACUUM to keep up with the allocation of transaction IDs." msgstr "" -#: access/heap/vacuumlazy.c:2746 +#: access/heap/vacuumlazy.c:2749 #, c-format msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index cleanup (planned: %d)" msgstr[0] "%d parallelen Vacuum-Worker für Index-Cleanup gestartet (geplant: %d)" msgstr[1] "%d parallele Vacuum-Worker für Index-Cleanup gestartet (geplant: %d)" -#: access/heap/vacuumlazy.c:2752 +#: access/heap/vacuumlazy.c:2755 #, c-format msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" msgstr[0] "%d parallelen Vacuum-Worker für Index-Vacuum gestartet (geplant: %d)" msgstr[1] "%d parallele Vacuum-Worker für Index-Vacuum gestartet (geplant: %d)" -#: access/heap/vacuumlazy.c:3041 +#: access/heap/vacuumlazy.c:3044 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "Index »%s« gelesen und %d Zeilenversionen entfernt" -#: access/heap/vacuumlazy.c:3098 +#: access/heap/vacuumlazy.c:3101 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "Index »%s« enthält %.0f Zeilenversionen in %u Seiten" -#: access/heap/vacuumlazy.c:3102 +#: access/heap/vacuumlazy.c:3105 #, fuzzy, c-format #| msgid "" #| "%.0f index row versions were removed.\n" @@ -1377,69 +1379,69 @@ msgstr "" "%u Indexseiten wurden gelöscht, %u sind gegenwärtig wiederverwendbar.\n" "%s." -#: access/heap/vacuumlazy.c:3214 +#: access/heap/vacuumlazy.c:3217 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "»%s«: Truncate wird gestoppt wegen Sperrkonflikt" -#: access/heap/vacuumlazy.c:3280 +#: access/heap/vacuumlazy.c:3283 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "»%s«: von %u auf %u Seiten verkürzt" -#: access/heap/vacuumlazy.c:3345 +#: access/heap/vacuumlazy.c:3348 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "»%s«: Truncate wird ausgesetzt wegen Sperrkonflikt" -#: access/heap/vacuumlazy.c:3491 +#: access/heap/vacuumlazy.c:3494 #, c-format msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" msgstr "Paralleloption für Vacuum von »%s« wird deaktiviert --- Vacuum in temporären Tabellen kann nicht parallel ausgeführt werden" -#: access/heap/vacuumlazy.c:4246 +#: access/heap/vacuumlazy.c:4249 #, fuzzy, c-format #| msgid "while scanning block %u of relation \"%s.%s\"" msgid "while scanning block %u and offset %u of relation \"%s.%s\"" msgstr "beim Scannen von Block %u von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4249 +#: access/heap/vacuumlazy.c:4252 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "beim Scannen von Block %u von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4253 +#: access/heap/vacuumlazy.c:4256 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "beim Scannen von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4261 +#: access/heap/vacuumlazy.c:4264 #, fuzzy, c-format #| msgid "while vacuuming block %u of relation \"%s.%s\"" msgid "while vacuuming block %u and offset %u of relation \"%s.%s\"" msgstr "beim Vacuum von Block %u von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4264 +#: access/heap/vacuumlazy.c:4267 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "beim Vacuum von Block %u von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4268 +#: access/heap/vacuumlazy.c:4271 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "beim Vacuum von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4273 +#: access/heap/vacuumlazy.c:4276 #, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" msgstr "beim Vacuum von Index »%s« von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4278 +#: access/heap/vacuumlazy.c:4281 #, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" msgstr "beim Säubern von Index »%s« von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4284 +#: access/heap/vacuumlazy.c:4287 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "beim Trunkieren von Relation »%s.%s« auf %u Blöcke" @@ -1460,7 +1462,7 @@ msgstr "Indexzugriffsmethode »%s« hat keinen Handler" msgid "transaction aborted during system catalog scan" msgstr "Systemkataloge können nicht nebenläufig reindiziert werden" -#: access/index/indexam.c:142 catalog/objectaddress.c:1354 +#: access/index/indexam.c:142 catalog/objectaddress.c:1355 #: commands/indexcmds.c:2670 commands/tablecmds.c:267 commands/tablecmds.c:291 #: commands/tablecmds.c:16525 commands/tablecmds.c:18227 #, c-format @@ -1576,7 +1578,7 @@ msgstr "tid (%u, %u) ist nicht gültig für Relation »%s«" msgid "%s cannot be empty." msgstr "%s kann nicht leer sein." -#: access/table/tableamapi.c:122 utils/misc/guc.c:12485 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12419 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s ist zu lang (maximal %d Zeichen)." @@ -1877,12 +1879,12 @@ msgstr "Setzen Sie max_prepared_transactions auf einen Wert höher als null." msgid "transaction identifier \"%s\" is already in use" msgstr "Transaktionsbezeichner »%s« wird bereits verwendet" -#: access/transam/twophase.c:417 access/transam/twophase.c:2387 +#: access/transam/twophase.c:417 access/transam/twophase.c:2385 #, c-format msgid "maximum number of prepared transactions reached" msgstr "maximale Anzahl vorbereiteter Transaktionen erreicht" -#: access/transam/twophase.c:418 access/transam/twophase.c:2388 +#: access/transam/twophase.c:418 access/transam/twophase.c:2386 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "Erhöhen Sie max_prepared_transactions (aktuell %d)." @@ -1954,64 +1956,64 @@ msgstr "ungültige Größe in Datei »%s« gespeichert" msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "berechnete CRC-Prüfsumme stimmt nicht mit dem Wert in Datei »%s« überein" -#: access/transam/twophase.c:1339 access/transam/xlog.c:6634 +#: access/transam/twophase.c:1342 access/transam/xlog.c:6634 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Fehlgeschlagen beim Anlegen eines WAL-Leseprozessors." -#: access/transam/twophase.c:1359 +#: access/transam/twophase.c:1357 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "konnte Zweiphasen-Status nicht aus dem WAL bei %X/%X lesen" -#: access/transam/twophase.c:1366 +#: access/transam/twophase.c:1364 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "erwartete Zweiphasen-Status-Daten sind nicht im WAL bei %X/%X vorhanden" -#: access/transam/twophase.c:1643 +#: access/transam/twophase.c:1641 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "konnte Datei »%s« nicht neu erzeugen: %m" -#: access/transam/twophase.c:1770 +#: access/transam/twophase.c:1768 #, c-format msgid "%u two-phase state file was written for a long-running prepared transaction" msgid_plural "%u two-phase state files were written for long-running prepared transactions" msgstr[0] "%u Zweiphasen-Statusdatei wurde für eine lange laufende vorbereitete Transaktion geschrieben" msgstr[1] "%u Zweiphasen-Statusdateien wurden für lange laufende vorbereitete Transaktionen geschrieben" -#: access/transam/twophase.c:2004 +#: access/transam/twophase.c:2002 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "Wiederherstellung der vorbereiteten Transaktion %u aus dem Shared Memory" -#: access/transam/twophase.c:2095 +#: access/transam/twophase.c:2093 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "entferne abgelaufene Zweiphasen-Statusdatei für Transaktion %u" -#: access/transam/twophase.c:2102 +#: access/transam/twophase.c:2100 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "entferne abgelaufenen Zweiphasen-Status aus dem Speicher für Transaktion %u" -#: access/transam/twophase.c:2115 +#: access/transam/twophase.c:2113 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "entferne zukünftige Zweiphasen-Statusdatei für Transaktion %u" -#: access/transam/twophase.c:2122 +#: access/transam/twophase.c:2120 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "entferne zukünftigen Zweiphasen-Status aus dem Speicher für Transaktion %u" -#: access/transam/twophase.c:2147 +#: access/transam/twophase.c:2145 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "verfälschte Zweiphasen-Statusdatei für Transaktion %u" -#: access/transam/twophase.c:2152 +#: access/transam/twophase.c:2150 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "verfälschter Zweiphasen-Status im Speicher für Transaktion %u" @@ -2154,448 +2156,448 @@ msgstr "während einer parallelen Operation können keine Subtransaktionen commi msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "kann nicht mehr als 2^32-1 Subtransaktionen in einer Transaktion haben" -#: access/transam/xlog.c:1831 +#: access/transam/xlog.c:1825 #, c-format msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" msgstr "" -#: access/transam/xlog.c:2592 +#: access/transam/xlog.c:2586 #, c-format msgid "could not write to log file %s at offset %u, length %zu: %m" msgstr "konnte nicht in Logdatei %s bei Position %u, Länge %zu schreiben: %m" -#: access/transam/xlog.c:3993 access/transam/xlogutils.c:812 -#: replication/walsender.c:2521 +#: access/transam/xlog.c:3988 access/transam/xlogutils.c:798 +#: replication/walsender.c:2520 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "das angeforderte WAL-Segment %s wurde schon entfernt" -#: access/transam/xlog.c:4268 +#: access/transam/xlog.c:4263 #, c-format msgid "could not rename file \"%s\": %m" msgstr "konnte Datei »%s« nicht umbenennen: %m" -#: access/transam/xlog.c:4310 access/transam/xlog.c:4320 +#: access/transam/xlog.c:4305 access/transam/xlog.c:4315 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "benötigtes WAL-Verzeichnis »%s« existiert nicht" -#: access/transam/xlog.c:4326 +#: access/transam/xlog.c:4321 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "erzeuge fehlendes WAL-Verzeichnis »%s«" -#: access/transam/xlog.c:4329 +#: access/transam/xlog.c:4324 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "konnte fehlendes Verzeichnis »%s« nicht erzeugen: %m" -#: access/transam/xlog.c:4436 +#: access/transam/xlog.c:4427 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "unerwartete Zeitleisten-ID %u in Logsegment %s, Offset %u" -#: access/transam/xlog.c:4574 +#: access/transam/xlog.c:4565 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "neue Zeitleiste %u ist kein Kind der Datenbanksystemzeitleiste %u" -#: access/transam/xlog.c:4588 +#: access/transam/xlog.c:4579 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "neue Zeitleiste %u zweigte von der aktuellen Datenbanksystemzeitleiste %u vor dem aktuellen Wiederherstellungspunkt %X/%X ab" -#: access/transam/xlog.c:4607 +#: access/transam/xlog.c:4598 #, c-format msgid "new target timeline is %u" msgstr "neue Zielzeitleiste ist %u" -#: access/transam/xlog.c:4643 +#: access/transam/xlog.c:4634 #, c-format msgid "could not generate secret authorization token" msgstr "konnte geheimes Autorisierungstoken nicht erzeugen" -#: access/transam/xlog.c:4802 access/transam/xlog.c:4811 -#: access/transam/xlog.c:4835 access/transam/xlog.c:4842 -#: access/transam/xlog.c:4849 access/transam/xlog.c:4854 -#: access/transam/xlog.c:4861 access/transam/xlog.c:4868 -#: access/transam/xlog.c:4875 access/transam/xlog.c:4882 -#: access/transam/xlog.c:4889 access/transam/xlog.c:4896 -#: access/transam/xlog.c:4905 access/transam/xlog.c:4912 +#: access/transam/xlog.c:4793 access/transam/xlog.c:4802 +#: access/transam/xlog.c:4826 access/transam/xlog.c:4833 +#: access/transam/xlog.c:4840 access/transam/xlog.c:4845 +#: access/transam/xlog.c:4852 access/transam/xlog.c:4859 +#: access/transam/xlog.c:4866 access/transam/xlog.c:4873 +#: access/transam/xlog.c:4880 access/transam/xlog.c:4887 +#: access/transam/xlog.c:4896 access/transam/xlog.c:4903 #: utils/init/miscinit.c:1578 #, c-format msgid "database files are incompatible with server" msgstr "Datenbankdateien sind inkompatibel mit Server" -#: access/transam/xlog.c:4803 +#: access/transam/xlog.c:4794 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), but the server was compiled with PG_CONTROL_VERSION %d (0x%08x)." msgstr "Der Datenbank-Cluster wurde mit PG_CONTROL_VERSION %d (0x%08x) initialisiert, aber der Server wurde mit PG_CONTROL_VERSION %d (0x%08x) kompiliert." -#: access/transam/xlog.c:4807 +#: access/transam/xlog.c:4798 #, c-format msgid "This could be a problem of mismatched byte ordering. It looks like you need to initdb." msgstr "Das Problem könnte eine falsche Byte-Reihenfolge sein. Es sieht so aus, dass Sie initdb ausführen müssen." -#: access/transam/xlog.c:4812 +#: access/transam/xlog.c:4803 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d, but the server was compiled with PG_CONTROL_VERSION %d." msgstr "Der Datenbank-Cluster wurde mit PG_CONTROL_VERSION %d initialisiert, aber der Server wurde mit PG_CONTROL_VERSION %d kompiliert." -#: access/transam/xlog.c:4815 access/transam/xlog.c:4839 -#: access/transam/xlog.c:4846 access/transam/xlog.c:4851 +#: access/transam/xlog.c:4806 access/transam/xlog.c:4830 +#: access/transam/xlog.c:4837 access/transam/xlog.c:4842 #, c-format msgid "It looks like you need to initdb." msgstr "Es sieht so aus, dass Sie initdb ausführen müssen." -#: access/transam/xlog.c:4826 +#: access/transam/xlog.c:4817 #, c-format msgid "incorrect checksum in control file" msgstr "falsche Prüfsumme in Kontrolldatei" -#: access/transam/xlog.c:4836 +#: access/transam/xlog.c:4827 #, c-format msgid "The database cluster was initialized with CATALOG_VERSION_NO %d, but the server was compiled with CATALOG_VERSION_NO %d." msgstr "Der Datenbank-Cluster wurde mit CATALOG_VERSION_NO %d initialisiert, aber der Server wurde mit CATALOG_VERSION_NO %d kompiliert." -#: access/transam/xlog.c:4843 +#: access/transam/xlog.c:4834 #, c-format msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." msgstr "Der Datenbank-Cluster wurde mit MAXALIGN %d initialisiert, aber der Server wurde mit MAXALIGN %d kompiliert." -#: access/transam/xlog.c:4850 +#: access/transam/xlog.c:4841 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "Der Datenbank-Cluster verwendet anscheinend ein anderes Fließkommazahlenformat als das Serverprogramm." -#: access/transam/xlog.c:4855 +#: access/transam/xlog.c:4846 #, c-format msgid "The database cluster was initialized with BLCKSZ %d, but the server was compiled with BLCKSZ %d." msgstr "Der Datenbank-Cluster wurde mit BLCKSZ %d initialisiert, aber der Server wurde mit BLCKSZ %d kompiliert." -#: access/transam/xlog.c:4858 access/transam/xlog.c:4865 -#: access/transam/xlog.c:4872 access/transam/xlog.c:4879 -#: access/transam/xlog.c:4886 access/transam/xlog.c:4893 -#: access/transam/xlog.c:4900 access/transam/xlog.c:4908 -#: access/transam/xlog.c:4915 +#: access/transam/xlog.c:4849 access/transam/xlog.c:4856 +#: access/transam/xlog.c:4863 access/transam/xlog.c:4870 +#: access/transam/xlog.c:4877 access/transam/xlog.c:4884 +#: access/transam/xlog.c:4891 access/transam/xlog.c:4899 +#: access/transam/xlog.c:4906 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Es sieht so aus, dass Sie neu kompilieren oder initdb ausführen müssen." -#: access/transam/xlog.c:4862 +#: access/transam/xlog.c:4853 #, c-format msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." msgstr "Der Datenbank-Cluster wurde mit RELSEG_SIZE %d initialisiert, aber der Server wurde mit RELSEGSIZE %d kompiliert." -#: access/transam/xlog.c:4869 +#: access/transam/xlog.c:4860 #, c-format msgid "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was compiled with XLOG_BLCKSZ %d." msgstr "Der Datenbank-Cluster wurde mit XLOG_BLCKSZ %d initialisiert, aber der Server wurde mit XLOG_BLCKSZ %d kompiliert." -#: access/transam/xlog.c:4876 +#: access/transam/xlog.c:4867 #, c-format msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." msgstr "Der Datenbank-Cluster wurde mit NAMEDATALEN %d initialisiert, aber der Server wurde mit NAMEDATALEN %d kompiliert." -#: access/transam/xlog.c:4883 +#: access/transam/xlog.c:4874 #, c-format msgid "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server was compiled with INDEX_MAX_KEYS %d." msgstr "Der Datenbank-Cluster wurde mit INDEX_MAX_KEYS %d initialisiert, aber der Server wurde mit INDEX_MAX_KEYS %d kompiliert." -#: access/transam/xlog.c:4890 +#: access/transam/xlog.c:4881 #, c-format msgid "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the server was compiled with TOAST_MAX_CHUNK_SIZE %d." msgstr "Der Datenbank-Cluster wurde mit TOAST_MAX_CHUNK_SIZE %d initialisiert, aber der Server wurde mit TOAST_MAX_CHUNK_SIZE %d kompiliert." -#: access/transam/xlog.c:4897 +#: access/transam/xlog.c:4888 #, c-format msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." msgstr "Der Datenbank-Cluster wurde mit LOBLKSIZE %d initialisiert, aber der Server wurde mit LOBLKSIZE %d kompiliert." -#: access/transam/xlog.c:4906 +#: access/transam/xlog.c:4897 #, c-format msgid "The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL." msgstr "Der Datenbank-Cluster wurde ohne USE_FLOAT8_BYVAL initialisiert, aber der Server wurde mit USE_FLOAT8_BYVAL kompiliert." -#: access/transam/xlog.c:4913 +#: access/transam/xlog.c:4904 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "Der Datenbank-Cluster wurde mit USE_FLOAT8_BYVAL initialisiert, aber der Server wurde ohne USE_FLOAT8_BYVAL kompiliert." -#: access/transam/xlog.c:4922 +#: access/transam/xlog.c:4913 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "WAL-Segmentgröße muss eine Zweierpotenz zwischen 1 MB und 1 GB sein, aber die Kontrolldatei gibt %d Byte an" msgstr[1] "WAL-Segmentgröße muss eine Zweierpotenz zwischen 1 MB und 1 GB sein, aber die Kontrolldatei gibt %d Bytes an" -#: access/transam/xlog.c:4934 +#: access/transam/xlog.c:4925 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "»min_wal_size« muss mindestens zweimal so groß wie »wal_segment_size« sein" -#: access/transam/xlog.c:4938 +#: access/transam/xlog.c:4929 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "»max_wal_size« muss mindestens zweimal so groß wie »wal_segment_size« sein" -#: access/transam/xlog.c:5372 +#: access/transam/xlog.c:5363 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "konnte Bootstrap-Write-Ahead-Log-Datei nicht schreiben: %m" -#: access/transam/xlog.c:5380 +#: access/transam/xlog.c:5371 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "konnte Bootstrap-Write-Ahead-Log-Datei nicht fsyncen: %m" -#: access/transam/xlog.c:5386 +#: access/transam/xlog.c:5377 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "konnte Bootstrap-Write-Ahead-Log-Datei nicht schließen: %m" -#: access/transam/xlog.c:5447 +#: access/transam/xlog.c:5438 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "Verwendung von Recovery-Befehlsdatei »%s« wird nicht unterstützt" -#: access/transam/xlog.c:5512 +#: access/transam/xlog.c:5503 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "Standby-Modus wird von Servern im Einzelbenutzermodus nicht unterstützt" -#: access/transam/xlog.c:5529 +#: access/transam/xlog.c:5520 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "weder primary_conninfo noch restore_command angegeben" -#: access/transam/xlog.c:5530 +#: access/transam/xlog.c:5521 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "Der Datenbankserver prüft das Unterverzeichnis pg_wal regelmäßig auf dort abgelegte Dateien." -#: access/transam/xlog.c:5538 +#: access/transam/xlog.c:5529 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "restore_command muss angegeben werden, wenn der Standby-Modus nicht eingeschaltet ist" -#: access/transam/xlog.c:5576 +#: access/transam/xlog.c:5567 #, c-format msgid "recovery target timeline %u does not exist" msgstr "recovery_target_timeline %u existiert nicht" -#: access/transam/xlog.c:5698 +#: access/transam/xlog.c:5689 #, c-format msgid "archive recovery complete" msgstr "Wiederherstellung aus Archiv abgeschlossen" -#: access/transam/xlog.c:5764 access/transam/xlog.c:6035 +#: access/transam/xlog.c:5755 access/transam/xlog.c:6026 #, c-format msgid "recovery stopping after reaching consistency" msgstr "Wiederherstellung beendet nachdem Konsistenz erreicht wurde" -#: access/transam/xlog.c:5785 +#: access/transam/xlog.c:5776 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "Wiederherstellung beendet vor WAL-Position (LSN) »%X/%X«" -#: access/transam/xlog.c:5870 +#: access/transam/xlog.c:5861 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "Wiederherstellung beendet vor Commit der Transaktion %u, Zeit %s" -#: access/transam/xlog.c:5877 +#: access/transam/xlog.c:5868 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "Wiederherstellung beendet vor Abbruch der Transaktion %u, Zeit %s" -#: access/transam/xlog.c:5930 +#: access/transam/xlog.c:5921 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "Wiederherstellung beendet bei Restore-Punkt »%s«, Zeit %s" -#: access/transam/xlog.c:5948 +#: access/transam/xlog.c:5939 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "Wiederherstellung beendet nach WAL-Position (LSN) »%X/%X«" -#: access/transam/xlog.c:6015 +#: access/transam/xlog.c:6006 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "Wiederherstellung beendet nach Commit der Transaktion %u, Zeit %s" -#: access/transam/xlog.c:6023 +#: access/transam/xlog.c:6014 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "Wiederherstellung beendet nach Abbruch der Transaktion %u, Zeit %s" -#: access/transam/xlog.c:6068 +#: access/transam/xlog.c:6059 #, c-format msgid "pausing at the end of recovery" msgstr "pausiere am Ende der Wiederherstellung" -#: access/transam/xlog.c:6069 +#: access/transam/xlog.c:6060 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Führen Sie pg_wal_replay_resume() aus, um den Server zum Primärserver zu befördern." -#: access/transam/xlog.c:6072 access/transam/xlog.c:6345 +#: access/transam/xlog.c:6063 access/transam/xlog.c:6336 #, c-format msgid "recovery has paused" msgstr "Wiederherstellung wurde pausiert" -#: access/transam/xlog.c:6073 +#: access/transam/xlog.c:6064 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Führen Sie pg_wal_replay_resume() aus um fortzusetzen." -#: access/transam/xlog.c:6336 +#: access/transam/xlog.c:6327 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "Hot Standby ist nicht möglich wegen unzureichender Parametereinstellungen" -#: access/transam/xlog.c:6337 access/transam/xlog.c:6360 -#: access/transam/xlog.c:6390 +#: access/transam/xlog.c:6328 access/transam/xlog.c:6355 +#: access/transam/xlog.c:6385 #, c-format msgid "%s = %d is a lower setting than on the primary server, where its value was %d." msgstr "%s = %d ist eine niedrigere Einstellung als auf dem Primärserver, wo der Wert %d war." -#: access/transam/xlog.c:6346 +#: access/transam/xlog.c:6337 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "Wenn die Wiederherstellungspause beendet wird, wird der Server herunterfahren." -#: access/transam/xlog.c:6347 +#: access/transam/xlog.c:6338 #, c-format msgid "You can then restart the server after making the necessary configuration changes." msgstr "Sie können den Server dann neu starten, nachdem die nötigen Konfigurationsänderungen getätigt worden sind." -#: access/transam/xlog.c:6358 +#: access/transam/xlog.c:6349 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "Beförderung ist nicht möglich wegen unzureichender Parametereinstellungen" -#: access/transam/xlog.c:6364 +#: access/transam/xlog.c:6359 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "Starten Sie den Server neu, nachdem die nötigen Konfigurationsänderungen getätigt worden sind." -#: access/transam/xlog.c:6388 +#: access/transam/xlog.c:6383 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "Wiederherstellung abgebrochen wegen unzureichender Parametereinstellungen" -#: access/transam/xlog.c:6394 +#: access/transam/xlog.c:6389 #, c-format msgid "You can restart the server after making the necessary configuration changes." msgstr "Sie können den Server neu starten, nachdem die nötigen Konfigurationsänderungen getätigt worden sind." -#: access/transam/xlog.c:6416 +#: access/transam/xlog.c:6411 #, c-format msgid "WAL was generated with wal_level=minimal, cannot continue recovering" msgstr "WAL wurde mit wal_level=minimal erzeugt, Wiederherstellung kann nicht fortgesetzt werden" -#: access/transam/xlog.c:6417 +#: access/transam/xlog.c:6412 #, c-format msgid "This happens if you temporarily set wal_level=minimal on the server." msgstr "Das passiert, wenn auf dem Server vorübergehend wal_level=minimal gesetzt wurde." -#: access/transam/xlog.c:6418 +#: access/transam/xlog.c:6413 #, c-format msgid "Use a backup taken after setting wal_level to higher than minimal." msgstr "Verwenden Sie ein Backup, das durchgeführt wurde, nachdem wal_level auf höher als minimal gesetzt wurde." -#: access/transam/xlog.c:6486 +#: access/transam/xlog.c:6482 #, c-format msgid "control file contains invalid checkpoint location" msgstr "Kontrolldatei enthält ungültige Checkpoint-Position" -#: access/transam/xlog.c:6497 +#: access/transam/xlog.c:6493 #, c-format msgid "database system was shut down at %s" msgstr "Datenbanksystem wurde am %s heruntergefahren" -#: access/transam/xlog.c:6503 +#: access/transam/xlog.c:6499 #, c-format msgid "database system was shut down in recovery at %s" msgstr "Datenbanksystem wurde während der Wiederherstellung am %s heruntergefahren" -#: access/transam/xlog.c:6509 +#: access/transam/xlog.c:6505 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "Datenbanksystem wurde beim Herunterfahren unterbrochen; letzte bekannte Aktion am %s" -#: access/transam/xlog.c:6515 +#: access/transam/xlog.c:6511 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "Datenbanksystem wurde während der Wiederherstellung am %s unterbrochen" -#: access/transam/xlog.c:6517 +#: access/transam/xlog.c:6513 #, c-format msgid "This probably means that some data is corrupted and you will have to use the last backup for recovery." msgstr "Das bedeutet wahrscheinlich, dass einige Daten verfälscht sind und Sie die letzte Datensicherung zur Wiederherstellung verwenden müssen." -#: access/transam/xlog.c:6523 +#: access/transam/xlog.c:6519 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "Datenbanksystem wurde während der Wiederherstellung bei Logzeit %s unterbrochen" -#: access/transam/xlog.c:6525 +#: access/transam/xlog.c:6521 #, c-format msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." msgstr "Wenn dies mehr als einmal vorgekommen ist, dann sind einige Daten möglicherweise verfälscht und Sie müssen ein früheres Wiederherstellungsziel wählen." -#: access/transam/xlog.c:6531 +#: access/transam/xlog.c:6527 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "Datenbanksystem wurde unterbrochen; letzte bekannte Aktion am %s" -#: access/transam/xlog.c:6537 +#: access/transam/xlog.c:6533 #, c-format msgid "control file contains invalid database cluster state" msgstr "Kontrolldatei enthält ungültigen Datenbankclusterstatus" -#: access/transam/xlog.c:6594 +#: access/transam/xlog.c:6590 #, c-format msgid "entering standby mode" msgstr "Standby-Modus eingeschaltet" -#: access/transam/xlog.c:6597 +#: access/transam/xlog.c:6593 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "starte Point-in-Time-Recovery bis XID %u" -#: access/transam/xlog.c:6601 +#: access/transam/xlog.c:6597 #, c-format msgid "starting point-in-time recovery to %s" msgstr "starte Point-in-Time-Recovery bis %s" -#: access/transam/xlog.c:6605 +#: access/transam/xlog.c:6601 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "starte Point-in-Time-Recovery bis »%s«" -#: access/transam/xlog.c:6609 +#: access/transam/xlog.c:6605 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "starte Point-in-Time-Recovery bis WAL-Position (LSN) »%X/%X«" -#: access/transam/xlog.c:6613 +#: access/transam/xlog.c:6609 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "starte Point-in-Time-Recovery bis zum frühesten konsistenten Punkt" -#: access/transam/xlog.c:6616 +#: access/transam/xlog.c:6612 #, c-format msgid "starting archive recovery" msgstr "starte Wiederherstellung aus Archiv" -#: access/transam/xlog.c:6692 +#: access/transam/xlog.c:6686 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "konnte die vom Checkpoint-Datensatz referenzierte Redo-Position nicht finden" -#: access/transam/xlog.c:6693 access/transam/xlog.c:6703 +#: access/transam/xlog.c:6687 access/transam/xlog.c:6697 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2606,281 +2608,281 @@ msgstr "" "Wenn Sie gerade kein Backup wiederherstellen, dann versuchen Sie, die Datei »%s/backup_label« zu entfernen.\n" "Vorsicht: Wenn ein Backup wiederhergestellt wird und »%s/backup_label« gelöscht wird, dann wird das den Cluster verfälschen." -#: access/transam/xlog.c:6702 +#: access/transam/xlog.c:6696 #, c-format msgid "could not locate required checkpoint record" msgstr "konnte den nötigen Checkpoint-Datensatz nicht finden" -#: access/transam/xlog.c:6731 commands/tablespace.c:666 +#: access/transam/xlog.c:6725 commands/tablespace.c:666 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht erstellen: %m" -#: access/transam/xlog.c:6763 access/transam/xlog.c:6769 +#: access/transam/xlog.c:6757 access/transam/xlog.c:6763 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ignoriere Datei »%s«, weil keine Datei »%s« existiert" -#: access/transam/xlog.c:6765 access/transam/xlog.c:12085 +#: access/transam/xlog.c:6759 access/transam/xlog.c:12060 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Datei »%s« wurde in »%s« umbenannt." -#: access/transam/xlog.c:6771 +#: access/transam/xlog.c:6765 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "Konnte Datei »%s« nicht in »%s« umbenennen: %m." -#: access/transam/xlog.c:6822 +#: access/transam/xlog.c:6816 #, c-format msgid "could not locate a valid checkpoint record" msgstr "konnte keinen gültigen Checkpoint-Datensatz finden" -#: access/transam/xlog.c:6860 +#: access/transam/xlog.c:6854 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "angeforderte Zeitleiste %u ist kein Kind der History dieses Servers" -#: access/transam/xlog.c:6862 +#: access/transam/xlog.c:6856 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "Neuester Checkpoint ist bei %X/%X auf Zeitleiste %u, aber in der History der angeforderten Zeitleiste zweigte der Server von dieser Zeitleiste bei %X/%X ab." -#: access/transam/xlog.c:6876 +#: access/transam/xlog.c:6870 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "angeforderte Zeitleiste %u enthält nicht den minimalen Wiederherstellungspunkt %X/%X auf Zeitleiste %u" -#: access/transam/xlog.c:6906 +#: access/transam/xlog.c:6900 #, c-format msgid "invalid next transaction ID" msgstr "ungültige nächste Transaktions-ID" -#: access/transam/xlog.c:7007 +#: access/transam/xlog.c:7000 #, c-format msgid "invalid redo in checkpoint record" msgstr "ungültiges Redo im Checkpoint-Datensatz" -#: access/transam/xlog.c:7018 +#: access/transam/xlog.c:7011 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "ungültiger Redo-Datensatz im Shutdown-Checkpoint" -#: access/transam/xlog.c:7052 +#: access/transam/xlog.c:7045 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "Datenbanksystem wurde nicht richtig heruntergefahren; automatische Wiederherstellung läuft" -#: access/transam/xlog.c:7056 +#: access/transam/xlog.c:7049 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "Wiederherstellung nach Absturz beginnt in Zeitleiste %u und hat Zielzeitleiste %u" -#: access/transam/xlog.c:7103 +#: access/transam/xlog.c:7096 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "Daten in backup_label stimmen nicht mit Kontrolldatei überein" -#: access/transam/xlog.c:7104 +#: access/transam/xlog.c:7097 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "Das bedeutet, dass die Datensicherung verfälscht ist und Sie eine andere Datensicherung zur Wiederherstellung verwenden werden müssen." -#: access/transam/xlog.c:7331 +#: access/transam/xlog.c:7323 #, c-format msgid "redo starts at %X/%X" msgstr "Redo beginnt bei %X/%X" -#: access/transam/xlog.c:7572 +#: access/transam/xlog.c:7548 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "angeforderter Recovery-Endpunkt ist vor konsistentem Recovery-Punkt" -#: access/transam/xlog.c:7610 +#: access/transam/xlog.c:7586 #, fuzzy, c-format #| msgid "redo done at %X/%X" msgid "redo done at %X/%X system usage: %s" msgstr "Redo fertig bei %X/%X" -#: access/transam/xlog.c:7616 +#: access/transam/xlog.c:7592 #, c-format msgid "last completed transaction was at log time %s" msgstr "letzte vollständige Transaktion war bei Logzeit %s" -#: access/transam/xlog.c:7625 +#: access/transam/xlog.c:7601 #, c-format msgid "redo is not required" msgstr "Redo nicht nötig" -#: access/transam/xlog.c:7637 +#: access/transam/xlog.c:7613 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "Wiederherstellung endete bevor das konfigurierte Wiederherstellungsziel erreicht wurde" -#: access/transam/xlog.c:7716 access/transam/xlog.c:7720 +#: access/transam/xlog.c:7692 access/transam/xlog.c:7696 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL endet vor dem Ende der Online-Sicherung" -#: access/transam/xlog.c:7717 +#: access/transam/xlog.c:7693 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Der komplette WAL, der während der Online-Sicherung erzeugt wurde, muss bei der Wiederherstellung verfügbar sein." -#: access/transam/xlog.c:7721 +#: access/transam/xlog.c:7697 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "Die mit pg_start_backup() begonnene Online-Sicherung muss mit pg_stop_backup() beendet werden und der ganze WAL bis zu diesem Punkt muss bei der Wiederherstellung verfügbar sein." -#: access/transam/xlog.c:7724 +#: access/transam/xlog.c:7700 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL endet vor einem konsistenten Wiederherstellungspunkt" -#: access/transam/xlog.c:7759 +#: access/transam/xlog.c:7735 #, c-format msgid "selected new timeline ID: %u" msgstr "gewählte neue Zeitleisten-ID: %u" -#: access/transam/xlog.c:8203 +#: access/transam/xlog.c:8178 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "konsistenter Wiederherstellungszustand erreicht bei %X/%X" -#: access/transam/xlog.c:8412 +#: access/transam/xlog.c:8387 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "ungültige primäre Checkpoint-Verknüpfung in Kontrolldatei" -#: access/transam/xlog.c:8416 +#: access/transam/xlog.c:8391 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "ungültige Checkpoint-Verknüpfung in backup_label-Datei" -#: access/transam/xlog.c:8434 +#: access/transam/xlog.c:8409 #, c-format msgid "invalid primary checkpoint record" msgstr "ungültiger primärer Checkpoint-Datensatz" -#: access/transam/xlog.c:8438 +#: access/transam/xlog.c:8413 #, c-format msgid "invalid checkpoint record" msgstr "ungültiger Checkpoint-Datensatz" -#: access/transam/xlog.c:8449 +#: access/transam/xlog.c:8424 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "ungültige Resource-Manager-ID im primären Checkpoint-Datensatz" -#: access/transam/xlog.c:8453 +#: access/transam/xlog.c:8428 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "ungültige Resource-Manager-ID im Checkpoint-Datensatz" -#: access/transam/xlog.c:8466 +#: access/transam/xlog.c:8441 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "ungültige xl_info im primären Checkpoint-Datensatz" -#: access/transam/xlog.c:8470 +#: access/transam/xlog.c:8445 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "ungültige xl_info im Checkpoint-Datensatz" -#: access/transam/xlog.c:8481 +#: access/transam/xlog.c:8456 #, c-format msgid "invalid length of primary checkpoint record" msgstr "ungültige Länge des primären Checkpoint-Datensatzes" -#: access/transam/xlog.c:8485 +#: access/transam/xlog.c:8460 #, c-format msgid "invalid length of checkpoint record" msgstr "ungültige Länge des Checkpoint-Datensatzes" -#: access/transam/xlog.c:8666 +#: access/transam/xlog.c:8641 #, c-format msgid "shutting down" msgstr "fahre herunter" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8705 +#: access/transam/xlog.c:8680 #, c-format msgid "restartpoint starting:%s%s%s%s%s%s%s%s" msgstr "Restart-Punkt beginnt:%s%s%s%s%s%s%s%s" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8717 +#: access/transam/xlog.c:8692 #, c-format msgid "checkpoint starting:%s%s%s%s%s%s%s%s" msgstr "Checkpoint beginnt:%s%s%s%s%s%s%s%s" -#: access/transam/xlog.c:8777 +#: access/transam/xlog.c:8752 #, c-format msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "" -#: access/transam/xlog.c:8797 +#: access/transam/xlog.c:8772 #, c-format msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "" -#: access/transam/xlog.c:9230 +#: access/transam/xlog.c:9205 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "gleichzeitige Write-Ahead-Log-Aktivität während das Datenbanksystem herunterfährt" -#: access/transam/xlog.c:9686 +#: access/transam/xlog.c:9661 #, c-format msgid "recovery restart point at %X/%X" msgstr "Recovery-Restart-Punkt bei %X/%X" -#: access/transam/xlog.c:9688 +#: access/transam/xlog.c:9663 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Die letzte vollständige Transaktion war bei Logzeit %s." -#: access/transam/xlog.c:9928 +#: access/transam/xlog.c:9903 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "Restore-Punkt »%s« erzeugt bei %X/%X" -#: access/transam/xlog.c:10073 +#: access/transam/xlog.c:10048 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "unerwartete vorherige Zeitleisten-ID %u (aktuelle Zeitleisten-ID %u) im Checkpoint-Datensatz" -#: access/transam/xlog.c:10082 +#: access/transam/xlog.c:10057 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "unerwartete Zeitleisten-ID %u (nach %u) im Checkpoint-Datensatz" -#: access/transam/xlog.c:10098 +#: access/transam/xlog.c:10073 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "unerwartete Zeitleisten-ID %u in Checkpoint-Datensatz, bevor der minimale Wiederherstellungspunkt %X/%X auf Zeitleiste %u erreicht wurde" -#: access/transam/xlog.c:10173 +#: access/transam/xlog.c:10148 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "Online-Sicherung wurde storniert, Wiederherstellung kann nicht fortgesetzt werden" -#: access/transam/xlog.c:10229 access/transam/xlog.c:10285 -#: access/transam/xlog.c:10308 +#: access/transam/xlog.c:10204 access/transam/xlog.c:10260 +#: access/transam/xlog.c:10283 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "unerwartete Zeitleisten-ID %u (sollte %u sein) im Checkpoint-Datensatz" -#: access/transam/xlog.c:10657 +#: access/transam/xlog.c:10632 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "konnte Write-Through-Logdatei »%s« nicht fsyncen: %m" -#: access/transam/xlog.c:10663 +#: access/transam/xlog.c:10638 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fdatasyncen: %m" -#: access/transam/xlog.c:10774 access/transam/xlog.c:11303 +#: access/transam/xlog.c:10749 access/transam/xlog.c:11278 #: access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 #: access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 #: access/transam/xlogfuncs.c:383 @@ -2888,186 +2890,186 @@ msgstr "konnte Datei »%s« nicht fdatasyncen: %m" msgid "WAL control functions cannot be executed during recovery." msgstr "Während der Wiederherstellung können keine WAL-Kontrollfunktionen ausgeführt werden." -#: access/transam/xlog.c:10783 access/transam/xlog.c:11312 +#: access/transam/xlog.c:10758 access/transam/xlog.c:11287 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "WAL-Level nicht ausreichend, um Online-Sicherung durchzuführen" -#: access/transam/xlog.c:10784 access/transam/xlog.c:11313 +#: access/transam/xlog.c:10759 access/transam/xlog.c:11288 #: access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "wal_level muss beim Serverstart auf »replica« oder »logical« gesetzt werden." -#: access/transam/xlog.c:10789 +#: access/transam/xlog.c:10764 #, c-format msgid "backup label too long (max %d bytes)" msgstr "Backup-Label zu lang (maximal %d Bytes)" -#: access/transam/xlog.c:10826 access/transam/xlog.c:11102 -#: access/transam/xlog.c:11140 +#: access/transam/xlog.c:10801 access/transam/xlog.c:11077 +#: access/transam/xlog.c:11115 #, c-format msgid "a backup is already in progress" msgstr "ein Backup läuft bereits" -#: access/transam/xlog.c:10827 +#: access/transam/xlog.c:10802 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Führen Sie pg_stop_backup() aus und versuchen Sie es nochmal." -#: access/transam/xlog.c:10923 +#: access/transam/xlog.c:10898 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "mit full_page_writes=off erzeugtes WAL wurde seit dem letzten Restart-Punkt zurückgespielt" -#: access/transam/xlog.c:10925 access/transam/xlog.c:11508 +#: access/transam/xlog.c:10900 access/transam/xlog.c:11483 #, c-format msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the primary, and then try an online backup again." msgstr "Das bedeutet, dass die aktuelle Datensicherung auf dem Standby-Server verfälscht ist und nicht verwendet werden sollte. Schalten Sie auf dem Primärserver full_page_writes ein, führen Sie dort CHECKPOINT aus und versuchen Sie dann die Online-Sicherung erneut." -#: access/transam/xlog.c:11001 replication/basebackup.c:1433 +#: access/transam/xlog.c:10976 replication/basebackup.c:1433 #: utils/adt/misc.c:345 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "Ziel für symbolische Verknüpfung »%s« ist zu lang" -#: access/transam/xlog.c:11051 commands/tablespace.c:402 +#: access/transam/xlog.c:11026 commands/tablespace.c:402 #: commands/tablespace.c:578 replication/basebackup.c:1448 utils/adt/misc.c:353 #, c-format msgid "tablespaces are not supported on this platform" msgstr "Tablespaces werden auf dieser Plattform nicht unterstützt" -#: access/transam/xlog.c:11103 access/transam/xlog.c:11141 +#: access/transam/xlog.c:11078 access/transam/xlog.c:11116 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "Wenn Sie sicher sind, dass noch kein Backup läuft, entfernen Sie die Datei »%s« und versuchen Sie es noch einmal." -#: access/transam/xlog.c:11328 +#: access/transam/xlog.c:11303 #, c-format msgid "exclusive backup not in progress" msgstr "es läuft kein exklusives Backup" -#: access/transam/xlog.c:11355 +#: access/transam/xlog.c:11330 #, c-format msgid "a backup is not in progress" msgstr "es läuft kein Backup" -#: access/transam/xlog.c:11441 access/transam/xlog.c:11454 -#: access/transam/xlog.c:11843 access/transam/xlog.c:11849 -#: access/transam/xlog.c:11897 access/transam/xlog.c:11977 -#: access/transam/xlog.c:12001 access/transam/xlogfuncs.c:733 +#: access/transam/xlog.c:11416 access/transam/xlog.c:11429 +#: access/transam/xlog.c:11818 access/transam/xlog.c:11824 +#: access/transam/xlog.c:11872 access/transam/xlog.c:11952 +#: access/transam/xlog.c:11976 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "ungültige Daten in Datei »%s«" -#: access/transam/xlog.c:11458 replication/basebackup.c:1281 +#: access/transam/xlog.c:11433 replication/basebackup.c:1281 #, c-format msgid "the standby was promoted during online backup" msgstr "der Standby-Server wurde während der Online-Sicherung zum Primärserver befördert" -#: access/transam/xlog.c:11459 replication/basebackup.c:1282 +#: access/transam/xlog.c:11434 replication/basebackup.c:1282 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "Das bedeutet, dass die aktuelle Online-Sicherung verfälscht ist und nicht verwendet werden sollte. Versuchen Sie, eine neue Online-Sicherung durchzuführen." -#: access/transam/xlog.c:11506 +#: access/transam/xlog.c:11481 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "mit full_page_writes=off erzeugtes WAL wurde während der Online-Sicherung zurückgespielt" -#: access/transam/xlog.c:11626 +#: access/transam/xlog.c:11601 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "Basissicherung beendet, warte bis die benötigten WAL-Segmente archiviert sind" -#: access/transam/xlog.c:11638 +#: access/transam/xlog.c:11613 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "warte immer noch, bis alle benötigten WAL-Segmente archiviert sind (%d Sekunden abgelaufen)" -#: access/transam/xlog.c:11640 +#: access/transam/xlog.c:11615 #, c-format msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." msgstr "Prüfen Sie, ob das archive_command korrekt ausgeführt wird. Dieser Sicherungsvorgang kann gefahrlos abgebrochen werden, aber die Datenbanksicherung wird ohne die fehlenden WAL-Segmente nicht benutzbar sein." -#: access/transam/xlog.c:11647 +#: access/transam/xlog.c:11622 #, c-format msgid "all required WAL segments have been archived" msgstr "alle benötigten WAL-Segmente wurden archiviert" -#: access/transam/xlog.c:11651 +#: access/transam/xlog.c:11626 #, c-format msgid "WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup" msgstr "WAL-Archivierung ist nicht eingeschaltet; Sie müssen dafür sorgen, dass alle benötigten WAL-Segmente auf andere Art kopiert werden, um die Sicherung abzuschließen" -#: access/transam/xlog.c:11704 +#: access/transam/xlog.c:11679 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "Backup wird abgebrochen, weil Backend-Prozess beendete, bevor pg_stop_backup aufgerufen wurde" -#: access/transam/xlog.c:11898 +#: access/transam/xlog.c:11873 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "Gelesene Zeitleisten-ID ist %u, aber %u wurde erwartet." #. translator: %s is a WAL record description -#: access/transam/xlog.c:12026 +#: access/transam/xlog.c:12001 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "WAL-Redo bei %X/%X für %s" -#: access/transam/xlog.c:12074 +#: access/transam/xlog.c:12049 #, c-format msgid "online backup mode was not canceled" msgstr "Online-Sicherungsmodus wurde nicht storniert" -#: access/transam/xlog.c:12075 +#: access/transam/xlog.c:12050 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "Konnte Datei »%s« nicht in »%s« umbenennen: %m." -#: access/transam/xlog.c:12084 access/transam/xlog.c:12096 -#: access/transam/xlog.c:12106 +#: access/transam/xlog.c:12059 access/transam/xlog.c:12071 +#: access/transam/xlog.c:12081 #, c-format msgid "online backup mode canceled" msgstr "Online-Sicherungsmodus storniert" -#: access/transam/xlog.c:12097 +#: access/transam/xlog.c:12072 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "Dateien »%s« und »%s« wurden in »%s« und »%s« umbenannt." -#: access/transam/xlog.c:12107 +#: access/transam/xlog.c:12082 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "Datei »%s« wurde in »%s« umbenannt, aber Datei »%s« konnte nicht in »%s« umbenannt werden: %m." -#: access/transam/xlog.c:12246 access/transam/xlogutils.c:986 +#: access/transam/xlog.c:12215 access/transam/xlogutils.c:967 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "konnte nicht aus Logsegment %s, Position %u lesen: %m" -#: access/transam/xlog.c:12252 access/transam/xlogutils.c:993 +#: access/transam/xlog.c:12221 access/transam/xlogutils.c:974 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "konnte nicht aus Logsegment %s bei Position %u lesen: %d von %zu gelesen" -#: access/transam/xlog.c:12793 +#: access/transam/xlog.c:12758 #, c-format msgid "WAL receiver process shutdown requested" msgstr "Herunterfahren des WAL-Receiver-Prozesses verlangt" -#: access/transam/xlog.c:12880 +#: access/transam/xlog.c:12845 #, c-format msgid "received promote request" msgstr "Anforderung zum Befördern empfangen" -#: access/transam/xlog.c:12893 +#: access/transam/xlog.c:12858 #, c-format msgid "promote trigger file found: %s" msgstr "Promote-Triggerdatei gefunden: %s" -#: access/transam/xlog.c:12901 +#: access/transam/xlog.c:12866 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "konnte »stat« für Promote-Triggerdatei »%s« nicht ausführen: %m" @@ -3125,37 +3127,35 @@ msgstr "es läuft ein nicht-exklusives Backup" msgid "Did you mean to use pg_stop_backup('f')?" msgstr "Meinten Sie pg_stop_backup('f')?" -#: access/transam/xlogfuncs.c:185 access/transam/xlogprefetch.c:720 -#: commands/event_trigger.c:1311 commands/event_trigger.c:1869 -#: commands/extension.c:1944 commands/extension.c:2052 -#: commands/extension.c:2337 commands/prepare.c:712 executor/execExpr.c:2453 -#: executor/execSRF.c:738 executor/functions.c:1058 foreign/foreign.c:520 -#: libpq/hba.c:2712 replication/logical/launcher.c:943 +#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 +#: commands/event_trigger.c:1869 commands/extension.c:1944 +#: commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:712 +#: executor/execExpr.c:2507 executor/execSRF.c:738 executor/functions.c:1058 +#: foreign/foreign.c:520 libpq/hba.c:2712 replication/logical/launcher.c:937 #: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 -#: replication/slotfuncs.c:254 replication/walsender.c:3297 -#: storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:508 -#: utils/adt/genfile.c:591 utils/adt/jsonfuncs.c:1933 +#: replication/slotfuncs.c:255 replication/walsender.c:3291 +#: storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 +#: utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1933 #: utils/adt/jsonfuncs.c:2045 utils/adt/jsonfuncs.c:2233 #: utils/adt/jsonfuncs.c:2342 utils/adt/jsonfuncs.c:3803 #: utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:218 utils/adt/pgstatfuncs.c:477 #: utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 -#: utils/adt/varlena.c:4832 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10026 +#: utils/adt/varlena.c:4832 utils/fmgr/funcapi.c:74 utils/misc/guc.c:9974 #: utils/mmgr/portalmem.c:1136 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "Funktion mit Mengenergebnis in einem Zusammenhang aufgerufen, der keine Mengenergebnisse verarbeiten kann" -#: access/transam/xlogfuncs.c:189 access/transam/xlogprefetch.c:724 -#: commands/event_trigger.c:1315 commands/event_trigger.c:1873 -#: commands/extension.c:1948 commands/extension.c:2056 -#: commands/extension.c:2341 commands/prepare.c:716 foreign/foreign.c:525 -#: libpq/hba.c:2716 replication/logical/launcher.c:947 +#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 +#: commands/event_trigger.c:1873 commands/extension.c:1948 +#: commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:716 +#: foreign/foreign.c:525 libpq/hba.c:2716 replication/logical/launcher.c:941 #: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 -#: replication/slotfuncs.c:258 replication/walsender.c:3301 -#: storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:512 -#: utils/adt/genfile.c:595 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:222 +#: replication/slotfuncs.c:259 replication/walsender.c:3295 +#: storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:511 +#: utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:222 #: utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 -#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4836 utils/misc/guc.c:10030 +#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4836 utils/misc/guc.c:9978 #: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 #, c-format msgid "materialize mode required, but it is not allowed in this context" @@ -3215,7 +3215,7 @@ msgstr "%s kann nicht ausgeführt werden, nachdem eine Beförderung angestoßen msgid "\"wait_seconds\" must not be negative or zero" msgstr "»wait_seconds« darf nicht negativ oder null sein" -#: access/transam/xlogfuncs.c:789 storage/ipc/signalfuncs.c:280 +#: access/transam/xlogfuncs.c:789 storage/ipc/signalfuncs.c:281 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "konnte Signal nicht an Postmaster senden: %m" @@ -3227,154 +3227,139 @@ msgid_plural "server did not promote within %d seconds" msgstr[0] "Befördern des Servers wurde nicht innerhalb von %d Sekunde abgeschlossen" msgstr[1] "Befördern des Servers wurde nicht innerhalb von %d Sekunden abgeschlossen" -#: access/transam/xlogprefetch.c:360 -#, c-format -msgid "recovery finished prefetching at %X/%X; prefetch = %llu, skip_hit = %llu, skip_new = %llu, skip_fpw = %llu, skip_seq = %llu, avg_distance = %f, avg_queue_depth = %f" -msgstr "" - -#: access/transam/xlogprefetch.c:462 -#, fuzzy, c-format -#| msgid "recovery stopping after reaching consistency" -msgid "recovery no longer prefetching: %s" -msgstr "Wiederherstellung beendet nachdem Konsistenz erreicht wurde" - -#: access/transam/xlogprefetch.c:466 -#, fuzzy, c-format -#| msgid "aclremove is no longer supported" -msgid "recovery no longer prefetching" -msgstr "aclremove wird nicht mehr unterstützt" - -#: access/transam/xlogreader.c:747 +#: access/transam/xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "ungültiger Datensatz-Offset bei %X/%X" -#: access/transam/xlogreader.c:756 +#: access/transam/xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "Contrecord angefordert von %X/%X" -#: access/transam/xlogreader.c:818 access/transam/xlogreader.c:1277 +#: access/transam/xlogreader.c:398 access/transam/xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "ungültige Datensatzlänge bei %X/%X: %u erwartet, %u erhalten" -#: access/transam/xlogreader.c:909 +#: access/transam/xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "Datensatzlänge %u bei %X/%X ist zu lang" -#: access/transam/xlogreader.c:969 -#, c-format -msgid "there is no contrecord flag at %X/%X reading %X/%X" +#: access/transam/xlogreader.c:453 +#, fuzzy, c-format +#| msgid "there is no contrecord flag at %X/%X reading %X/%X" +msgid "there is no contrecord flag at %X/%X" msgstr "keine Contrecord-Flag bei %X/%X beim Lesen von %X/%X" -#: access/transam/xlogreader.c:984 -#, c-format -msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" +#: access/transam/xlogreader.c:466 +#, fuzzy, c-format +#| msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" +msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "ungültige Contrecord-Länge %u bei %X/%X beim Lesen von %X/%X, erwartet wurde %u" -#: access/transam/xlogreader.c:1285 +#: access/transam/xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ungültige Resource-Manager-ID %u bei %X/%X" -#: access/transam/xlogreader.c:1298 access/transam/xlogreader.c:1314 +#: access/transam/xlogreader.c:716 access/transam/xlogreader.c:732 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "Datensatz mit falschem Prev-Link %X/%X bei %X/%X" -#: access/transam/xlogreader.c:1350 +#: access/transam/xlogreader.c:768 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "ungültige Resource-Manager-Datenprüfsumme in Datensatz bei %X/%X" -#: access/transam/xlogreader.c:1387 +#: access/transam/xlogreader.c:805 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "ungültige magische Zahl %04X in Logsegment %s, Offset %u" -#: access/transam/xlogreader.c:1401 access/transam/xlogreader.c:1442 +#: access/transam/xlogreader.c:819 access/transam/xlogreader.c:860 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "ungültige Info-Bits %04X in Logsegment %s, Offset %u" -#: access/transam/xlogreader.c:1416 +#: access/transam/xlogreader.c:834 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Datenbanksystemidentifikator in WAL-Datei ist %llu, Datenbanksystemidentifikator in pg_control ist %llu" -#: access/transam/xlogreader.c:1424 +#: access/transam/xlogreader.c:842 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: falsche Segmentgröße im Seitenkopf" -#: access/transam/xlogreader.c:1430 +#: access/transam/xlogreader.c:848 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: falsche XLOG_BLCKSZ im Seitenkopf" -#: access/transam/xlogreader.c:1461 +#: access/transam/xlogreader.c:879 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "unerwartete Pageaddr %X/%X in Logsegment %s, Offset %u" -#: access/transam/xlogreader.c:1486 +#: access/transam/xlogreader.c:904 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "Zeitleisten-ID %u außer der Reihe (nach %u) in Logsegment %s, Offset %u" -#: access/transam/xlogreader.c:1908 +#: access/transam/xlogreader.c:1249 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u außer der Reihe bei %X/%X" -#: access/transam/xlogreader.c:1932 +#: access/transam/xlogreader.c:1271 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA gesetzt, aber keine Daten enthalten bei %X/%X" -#: access/transam/xlogreader.c:1939 +#: access/transam/xlogreader.c:1278 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA nicht gesetzt, aber Datenlänge ist %u bei %X/%X" -#: access/transam/xlogreader.c:1975 +#: access/transam/xlogreader.c:1314 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE gesetzt, aber Loch Offset %u Länge %u Block-Abbild-Länge %u bei %X/%X" -#: access/transam/xlogreader.c:1991 +#: access/transam/xlogreader.c:1330 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE nicht gesetzt, aber Loch Offset %u Länge %u bei %X/%X" -#: access/transam/xlogreader.c:2006 +#: access/transam/xlogreader.c:1345 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge %u bei %X/%X" -#: access/transam/xlogreader.c:2021 +#: access/transam/xlogreader.c:1360 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "weder BKPIMAGE_HAS_HOLE noch BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge ist %u bei %X/%X" -#: access/transam/xlogreader.c:2037 +#: access/transam/xlogreader.c:1376 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL gesetzt, aber keine vorangehende Relation bei %X/%X" -#: access/transam/xlogreader.c:2049 +#: access/transam/xlogreader.c:1388 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "ungültige block_id %u bei %X/%X" -#: access/transam/xlogreader.c:2116 +#: access/transam/xlogreader.c:1475 #, c-format msgid "record with invalid length at %X/%X" msgstr "Datensatz mit ungültiger Länge bei %X/%X" -#: access/transam/xlogreader.c:2219 +#: access/transam/xlogreader.c:1564 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "ungültiges komprimiertes Abbild bei %X/%X, Block %d" @@ -3384,18 +3369,18 @@ msgstr "ungültiges komprimiertes Abbild bei %X/%X, Block %d" msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X benötigt eine Zweierpotenz zwischen 1 MB und 1 GB" -#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:844 tcop/postgres.c:3848 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:845 tcop/postgres.c:3848 #, c-format msgid "--%s requires a value" msgstr "--%s benötigt einen Wert" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:849 tcop/postgres.c:3853 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:850 tcop/postgres.c:3853 #, c-format msgid "-c %s requires a value" msgstr "-c %s benötigt einen Wert" -#: bootstrap/bootstrap.c:303 postmaster/postmaster.c:861 -#: postmaster/postmaster.c:874 +#: bootstrap/bootstrap.c:303 postmaster/postmaster.c:862 +#: postmaster/postmaster.c:875 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" @@ -3532,7 +3517,7 @@ msgid "column privileges are only valid for relations" msgstr "Spaltenprivilegien sind nur für Relation gültig" #: catalog/aclchk.c:697 catalog/aclchk.c:4164 catalog/aclchk.c:4985 -#: catalog/objectaddress.c:1059 catalog/pg_largeobject.c:116 +#: catalog/objectaddress.c:1060 catalog/pg_largeobject.c:116 #: storage/large_object/inv_api.c:285 #, c-format msgid "large object %u does not exist" @@ -3579,8 +3564,8 @@ msgstr "Large Object %u existiert nicht" #: commands/user.c:663 parser/parse_utilcmd.c:407 #: replication/pgoutput/pgoutput.c:192 replication/pgoutput/pgoutput.c:213 #: replication/pgoutput/pgoutput.c:227 replication/pgoutput/pgoutput.c:237 -#: replication/pgoutput/pgoutput.c:247 replication/walsender.c:885 -#: replication/walsender.c:896 replication/walsender.c:906 +#: replication/pgoutput/pgoutput.c:247 replication/walsender.c:882 +#: replication/walsender.c:893 replication/walsender.c:903 #, c-format msgid "conflicting or redundant options" msgstr "widersprüchliche oder überflüssige Optionen" @@ -3595,7 +3580,7 @@ msgstr "Vorgabeprivilegien können nicht für Spalten gesetzt werden" msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "Klausel IN SCHEMA kann nicht verwendet werden, wenn GRANT/REVOKE ON SCHEMAS verwendet wird" -#: catalog/aclchk.c:1544 catalog/catalog.c:553 catalog/objectaddress.c:1521 +#: catalog/aclchk.c:1544 catalog/catalog.c:553 catalog/objectaddress.c:1522 #: commands/analyze.c:390 commands/copy.c:741 commands/sequence.c:1701 #: commands/tablecmds.c:6990 commands/tablecmds.c:7133 #: commands/tablecmds.c:7183 commands/tablecmds.c:7257 @@ -3615,7 +3600,7 @@ msgstr "Klausel IN SCHEMA kann nicht verwendet werden, wenn GRANT/REVOKE ON SCHE msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "Spalte »%s« von Relation »%s« existiert nicht" -#: catalog/aclchk.c:1807 catalog/objectaddress.c:1361 commands/sequence.c:1139 +#: catalog/aclchk.c:1807 catalog/objectaddress.c:1362 commands/sequence.c:1139 #: commands/tablecmds.c:249 commands/tablecmds.c:16498 utils/adt/acl.c:2053 #: utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 #: utils/adt/acl.c:2175 utils/adt/acl.c:2205 @@ -3663,7 +3648,7 @@ msgstr "für Array-Typen können keine Privilegien gesetzt werden" msgid "Set the privileges of the element type instead." msgstr "Setzen Sie stattdessen die Privilegien des Elementtyps." -#: catalog/aclchk.c:3147 catalog/objectaddress.c:1655 +#: catalog/aclchk.c:3147 catalog/objectaddress.c:1656 #, c-format msgid "\"%s\" is not a domain" msgstr "»%s« ist keine Domäne" @@ -4036,7 +4021,7 @@ msgstr "Sprache mit OID %u existiert nicht" msgid "schema with OID %u does not exist" msgstr "Schema mit OID %u existiert nicht" -#: catalog/aclchk.c:4313 catalog/aclchk.c:5039 utils/adt/genfile.c:689 +#: catalog/aclchk.c:4313 catalog/aclchk.c:5039 utils/adt/genfile.c:688 #, c-format msgid "tablespace with OID %u does not exist" msgstr "Tablespace mit OID %u existiert nicht" @@ -4208,11 +4193,11 @@ msgstr "kann %s nicht löschen, weil andere Objekte davon abhängen" #: catalog/dependency.c:1206 catalog/dependency.c:1207 #: commands/tablecmds.c:1306 commands/tablecmds.c:13687 #: commands/tablespace.c:481 commands/user.c:1095 commands/view.c:495 -#: libpq/auth.c:338 replication/syncrep.c:1044 storage/lmgr/deadlock.c:1152 +#: libpq/auth.c:338 replication/syncrep.c:1043 storage/lmgr/deadlock.c:1152 #: storage/lmgr/proc.c:1433 utils/adt/acl.c:5250 utils/adt/jsonfuncs.c:618 -#: utils/adt/jsonfuncs.c:624 utils/misc/guc.c:7147 utils/misc/guc.c:7183 -#: utils/misc/guc.c:7253 utils/misc/guc.c:11433 utils/misc/guc.c:11467 -#: utils/misc/guc.c:11501 utils/misc/guc.c:11544 utils/misc/guc.c:11586 +#: utils/adt/jsonfuncs.c:624 utils/misc/guc.c:7095 utils/misc/guc.c:7131 +#: utils/misc/guc.c:7201 utils/misc/guc.c:11381 utils/misc/guc.c:11415 +#: utils/misc/guc.c:11449 utils/misc/guc.c:11492 utils/misc/guc.c:11534 #, c-format msgid "%s" msgstr "%s" @@ -4482,12 +4467,12 @@ msgstr "ungültiger Index einer TOAST-Tabelle kann nicht reindiziert werden" msgid "cannot move system relation \"%s\"" msgstr "Systemrelation »%s« kann nicht verschoben werden" -#: catalog/index.c:3746 +#: catalog/index.c:3745 #, c-format msgid "index \"%s\" was reindexed" msgstr "Index »%s« wurde neu indiziert" -#: catalog/index.c:3877 +#: catalog/index.c:3876 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "ungültiger Index »%s.%s« einer TOAST-Tabelle kann nicht reindizert werden, wird übersprungen" @@ -4629,12 +4614,12 @@ msgid "cannot create temporary tables during a parallel operation" msgstr "während einer parallelen Operation können keine temporären Tabellen erzeugt werden" #: catalog/namespace.c:4285 commands/tablespace.c:1217 commands/variable.c:64 -#: utils/misc/guc.c:11618 utils/misc/guc.c:11696 +#: utils/misc/guc.c:11566 utils/misc/guc.c:11644 #, c-format msgid "List syntax is invalid." msgstr "Die Listensyntax ist ungültig." -#: catalog/objectaddress.c:1369 catalog/pg_publication.c:57 +#: catalog/objectaddress.c:1370 catalog/pg_publication.c:57 #: commands/policy.c:95 commands/policy.c:375 commands/policy.c:465 #: commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2153 #: commands/tablecmds.c:6021 commands/tablecmds.c:11685 @@ -4642,40 +4627,40 @@ msgstr "Die Listensyntax ist ungültig." msgid "\"%s\" is not a table" msgstr "»%s« ist keine Tabelle" -#: catalog/objectaddress.c:1376 commands/tablecmds.c:255 +#: catalog/objectaddress.c:1377 commands/tablecmds.c:255 #: commands/tablecmds.c:6051 commands/tablecmds.c:16503 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "»%s« ist keine Sicht" -#: catalog/objectaddress.c:1383 commands/matview.c:175 commands/tablecmds.c:261 +#: catalog/objectaddress.c:1384 commands/matview.c:175 commands/tablecmds.c:261 #: commands/tablecmds.c:16508 #, c-format msgid "\"%s\" is not a materialized view" msgstr "»%s« ist keine materialisierte Sicht" -#: catalog/objectaddress.c:1390 commands/tablecmds.c:279 +#: catalog/objectaddress.c:1391 commands/tablecmds.c:279 #: commands/tablecmds.c:6054 commands/tablecmds.c:16513 #, c-format msgid "\"%s\" is not a foreign table" msgstr "»%s« ist keine Fremdtabelle" -#: catalog/objectaddress.c:1431 +#: catalog/objectaddress.c:1432 #, c-format msgid "must specify relation and object name" msgstr "Relations- und Objektname müssen angegeben werden" -#: catalog/objectaddress.c:1507 catalog/objectaddress.c:1560 +#: catalog/objectaddress.c:1508 catalog/objectaddress.c:1561 #, c-format msgid "column name must be qualified" msgstr "Spaltenname muss qualifiziert werden" -#: catalog/objectaddress.c:1607 +#: catalog/objectaddress.c:1608 #, c-format msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "Vorgabewert für Spalte »%s« von Relation »%s« existiert nicht" -#: catalog/objectaddress.c:1644 commands/functioncmds.c:136 +#: catalog/objectaddress.c:1645 commands/functioncmds.c:136 #: commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 #: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 #: utils/adt/acl.c:4411 @@ -4683,179 +4668,179 @@ msgstr "Vorgabewert für Spalte »%s« von Relation »%s« existiert nicht" msgid "type \"%s\" does not exist" msgstr "Typ »%s« existiert nicht" -#: catalog/objectaddress.c:1763 +#: catalog/objectaddress.c:1764 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "Operator %d (%s, %s) von %s existiert nicht" -#: catalog/objectaddress.c:1794 +#: catalog/objectaddress.c:1795 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "Funktion %d (%s, %s) von %s existiert nicht" -#: catalog/objectaddress.c:1845 catalog/objectaddress.c:1871 +#: catalog/objectaddress.c:1846 catalog/objectaddress.c:1872 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "Benutzerabbildung für Benutzer »%s« auf Server »%s« existiert nicht" -#: catalog/objectaddress.c:1860 commands/foreigncmds.c:430 +#: catalog/objectaddress.c:1861 commands/foreigncmds.c:430 #: commands/foreigncmds.c:988 commands/foreigncmds.c:1347 foreign/foreign.c:723 #, c-format msgid "server \"%s\" does not exist" msgstr "Server »%s« existiert nicht" -#: catalog/objectaddress.c:1927 +#: catalog/objectaddress.c:1928 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "Publikationsrelation »%s« in Publikation »%s« existiert nicht" -#: catalog/objectaddress.c:1989 +#: catalog/objectaddress.c:1990 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "unbekannter Standard-ACL-Objekttyp »%c«" -#: catalog/objectaddress.c:1990 +#: catalog/objectaddress.c:1991 #, c-format msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." msgstr "Gültige Objekttypen sind »%c«, »%c«, »%c«, »%c«, »%c«." -#: catalog/objectaddress.c:2041 +#: catalog/objectaddress.c:2042 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "Standard-ACL für Benutzer »%s« in Schema »%s« für %s existiert nicht" -#: catalog/objectaddress.c:2046 +#: catalog/objectaddress.c:2047 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "Standard-ACL für Benutzer »%s« für %s existiert nicht" -#: catalog/objectaddress.c:2073 catalog/objectaddress.c:2131 -#: catalog/objectaddress.c:2188 +#: catalog/objectaddress.c:2074 catalog/objectaddress.c:2132 +#: catalog/objectaddress.c:2189 #, c-format msgid "name or argument lists may not contain nulls" msgstr "Namens- oder Argumentlisten dürfen keine NULL-Werte enthalten" -#: catalog/objectaddress.c:2107 +#: catalog/objectaddress.c:2108 #, c-format msgid "unsupported object type \"%s\"" msgstr "nicht unterstützter Objekttyp »%s«" -#: catalog/objectaddress.c:2127 catalog/objectaddress.c:2145 -#: catalog/objectaddress.c:2286 +#: catalog/objectaddress.c:2128 catalog/objectaddress.c:2146 +#: catalog/objectaddress.c:2287 #, c-format msgid "name list length must be exactly %d" msgstr "Länge der Namensliste muss genau %d sein" -#: catalog/objectaddress.c:2149 +#: catalog/objectaddress.c:2150 #, c-format msgid "large object OID may not be null" msgstr "Large-Object-OID darf nicht NULL sein" -#: catalog/objectaddress.c:2158 catalog/objectaddress.c:2221 -#: catalog/objectaddress.c:2228 +#: catalog/objectaddress.c:2159 catalog/objectaddress.c:2222 +#: catalog/objectaddress.c:2229 #, c-format msgid "name list length must be at least %d" msgstr "Länge der Namensliste muss mindestens %d sein" -#: catalog/objectaddress.c:2214 catalog/objectaddress.c:2235 +#: catalog/objectaddress.c:2215 catalog/objectaddress.c:2236 #, c-format msgid "argument list length must be exactly %d" msgstr "Länge der Argumentliste muss genau %d sein" -#: catalog/objectaddress.c:2487 libpq/be-fsstubs.c:321 +#: catalog/objectaddress.c:2488 libpq/be-fsstubs.c:321 #, c-format msgid "must be owner of large object %u" msgstr "Berechtigung nur für Eigentümer des Large Object %u" -#: catalog/objectaddress.c:2502 commands/functioncmds.c:1555 +#: catalog/objectaddress.c:2503 commands/functioncmds.c:1555 #, c-format msgid "must be owner of type %s or type %s" msgstr "Berechtigung nur für Eigentümer des Typs %s oder des Typs %s" -#: catalog/objectaddress.c:2552 catalog/objectaddress.c:2569 +#: catalog/objectaddress.c:2553 catalog/objectaddress.c:2570 #, c-format msgid "must be superuser" msgstr "Berechtigung nur für Superuser" -#: catalog/objectaddress.c:2559 +#: catalog/objectaddress.c:2560 #, c-format msgid "must have CREATEROLE privilege" msgstr "Berechtigung nur mit CREATEROLE-Privileg" -#: catalog/objectaddress.c:2638 +#: catalog/objectaddress.c:2639 #, c-format msgid "unrecognized object type \"%s\"" msgstr "unbekannter Objekttyp »%s«" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2880 +#: catalog/objectaddress.c:2882 #, c-format msgid "column %s of %s" msgstr "Spalte %s von %s" -#: catalog/objectaddress.c:2894 +#: catalog/objectaddress.c:2897 #, c-format msgid "function %s" msgstr "Funktion %s" -#: catalog/objectaddress.c:2906 +#: catalog/objectaddress.c:2910 #, c-format msgid "type %s" msgstr "Typ %s" -#: catalog/objectaddress.c:2943 +#: catalog/objectaddress.c:2947 #, c-format msgid "cast from %s to %s" msgstr "Typumwandlung von %s in %s" -#: catalog/objectaddress.c:2976 +#: catalog/objectaddress.c:2980 #, c-format msgid "collation %s" msgstr "Sortierfolge %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3007 +#: catalog/objectaddress.c:3011 #, c-format msgid "constraint %s on %s" msgstr "Constraint %s für %s" -#: catalog/objectaddress.c:3013 +#: catalog/objectaddress.c:3017 #, c-format msgid "constraint %s" msgstr "Constraint %s" -#: catalog/objectaddress.c:3045 +#: catalog/objectaddress.c:3049 #, c-format msgid "conversion %s" msgstr "Konversion %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3091 +#: catalog/objectaddress.c:3095 #, c-format msgid "default value for %s" msgstr "Vorgabewert für %s" -#: catalog/objectaddress.c:3105 +#: catalog/objectaddress.c:3109 #, c-format msgid "language %s" msgstr "Sprache %s" -#: catalog/objectaddress.c:3113 +#: catalog/objectaddress.c:3117 #, c-format msgid "large object %u" msgstr "Large Object %u" -#: catalog/objectaddress.c:3126 +#: catalog/objectaddress.c:3130 #, c-format msgid "operator %s" msgstr "Operator %s" -#: catalog/objectaddress.c:3163 +#: catalog/objectaddress.c:3167 #, c-format msgid "operator class %s for access method %s" msgstr "Operatorklasse %s für Zugriffsmethode %s" -#: catalog/objectaddress.c:3191 +#: catalog/objectaddress.c:3195 #, c-format msgid "access method %s" msgstr "Zugriffsmethode %s" @@ -4864,7 +4849,7 @@ msgstr "Zugriffsmethode %s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3240 +#: catalog/objectaddress.c:3244 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "Operator %d (%s, %s) von %s: %s" @@ -4873,221 +4858,221 @@ msgstr "Operator %d (%s, %s) von %s: %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3297 +#: catalog/objectaddress.c:3301 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "Funktion %d (%s, %s) von %s: %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3349 +#: catalog/objectaddress.c:3353 #, c-format msgid "rule %s on %s" msgstr "Regel %s für %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3395 +#: catalog/objectaddress.c:3399 #, c-format msgid "trigger %s on %s" msgstr "Trigger %s für %s" -#: catalog/objectaddress.c:3415 +#: catalog/objectaddress.c:3419 #, c-format msgid "schema %s" msgstr "Schema %s" -#: catalog/objectaddress.c:3443 +#: catalog/objectaddress.c:3447 #, c-format msgid "statistics object %s" msgstr "Statistikobjekt %s" -#: catalog/objectaddress.c:3474 +#: catalog/objectaddress.c:3478 #, c-format msgid "text search parser %s" msgstr "Textsucheparser %s" -#: catalog/objectaddress.c:3505 +#: catalog/objectaddress.c:3509 #, c-format msgid "text search dictionary %s" msgstr "Textsuchewörterbuch %s" -#: catalog/objectaddress.c:3536 +#: catalog/objectaddress.c:3540 #, c-format msgid "text search template %s" msgstr "Textsuchevorlage %s" -#: catalog/objectaddress.c:3567 +#: catalog/objectaddress.c:3571 #, c-format msgid "text search configuration %s" msgstr "Textsuchekonfiguration %s" -#: catalog/objectaddress.c:3580 +#: catalog/objectaddress.c:3584 #, c-format msgid "role %s" msgstr "Rolle %s" -#: catalog/objectaddress.c:3596 +#: catalog/objectaddress.c:3600 #, c-format msgid "database %s" msgstr "Datenbank %s" -#: catalog/objectaddress.c:3612 +#: catalog/objectaddress.c:3616 #, c-format msgid "tablespace %s" msgstr "Tablespace %s" -#: catalog/objectaddress.c:3623 +#: catalog/objectaddress.c:3627 #, c-format msgid "foreign-data wrapper %s" msgstr "Fremddaten-Wrapper %s" -#: catalog/objectaddress.c:3633 +#: catalog/objectaddress.c:3637 #, c-format msgid "server %s" msgstr "Server %s" -#: catalog/objectaddress.c:3666 +#: catalog/objectaddress.c:3670 #, c-format msgid "user mapping for %s on server %s" msgstr "Benutzerabbildung für %s auf Server %s" -#: catalog/objectaddress.c:3718 +#: catalog/objectaddress.c:3722 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "Vorgabeprivilegien für neue Relationen von Rolle %s in Schema %s" -#: catalog/objectaddress.c:3722 +#: catalog/objectaddress.c:3726 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "Vorgabeprivilegien für neue Relationen von Rolle %s" -#: catalog/objectaddress.c:3728 +#: catalog/objectaddress.c:3732 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "Vorgabeprivilegien für neue Sequenzen von Rolle %s in Schema %s" -#: catalog/objectaddress.c:3732 +#: catalog/objectaddress.c:3736 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "Vorgabeprivilegien für neue Sequenzen von Rolle %s" -#: catalog/objectaddress.c:3738 +#: catalog/objectaddress.c:3742 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "Vorgabeprivilegien für neue Funktionen von Rolle %s in Schema %s" -#: catalog/objectaddress.c:3742 +#: catalog/objectaddress.c:3746 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "Vorgabeprivilegien für neue Funktionen von Rolle %s" -#: catalog/objectaddress.c:3748 +#: catalog/objectaddress.c:3752 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "Vorgabeprivilegien für neue Typen von Rolle %s in Schema %s" -#: catalog/objectaddress.c:3752 +#: catalog/objectaddress.c:3756 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "Vorgabeprivilegien für neue Typen von Rolle %s" -#: catalog/objectaddress.c:3758 +#: catalog/objectaddress.c:3762 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "Vorgabeprivilegien für neue Schemas von Rolle %s" -#: catalog/objectaddress.c:3765 +#: catalog/objectaddress.c:3769 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "Vorgabeprivilegien von Rolle %s in Schema %s" -#: catalog/objectaddress.c:3769 +#: catalog/objectaddress.c:3773 #, c-format msgid "default privileges belonging to role %s" msgstr "Vorgabeprivilegien von Rolle %s" -#: catalog/objectaddress.c:3791 +#: catalog/objectaddress.c:3795 #, c-format msgid "extension %s" msgstr "Erweiterung %s" -#: catalog/objectaddress.c:3808 +#: catalog/objectaddress.c:3812 #, c-format msgid "event trigger %s" msgstr "Ereignistrigger %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3852 +#: catalog/objectaddress.c:3856 #, c-format msgid "policy %s on %s" msgstr "Policy %s für %s" -#: catalog/objectaddress.c:3865 +#: catalog/objectaddress.c:3870 #, c-format msgid "publication %s" msgstr "Publikation %s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3893 +#: catalog/objectaddress.c:3898 #, c-format msgid "publication of %s in publication %s" msgstr "Publikation von %s in Publikation %s" -#: catalog/objectaddress.c:3905 +#: catalog/objectaddress.c:3911 #, c-format msgid "subscription %s" msgstr "Subskription %s" -#: catalog/objectaddress.c:3926 +#: catalog/objectaddress.c:3932 #, c-format msgid "transform for %s language %s" msgstr "Transformation %s für Sprache %s" -#: catalog/objectaddress.c:3997 +#: catalog/objectaddress.c:4003 #, c-format msgid "table %s" msgstr "Tabelle %s" -#: catalog/objectaddress.c:4002 +#: catalog/objectaddress.c:4008 #, c-format msgid "index %s" msgstr "Index %s" -#: catalog/objectaddress.c:4006 +#: catalog/objectaddress.c:4012 #, c-format msgid "sequence %s" msgstr "Sequenz %s" -#: catalog/objectaddress.c:4010 +#: catalog/objectaddress.c:4016 #, c-format msgid "toast table %s" msgstr "TOAST-Tabelle %s" -#: catalog/objectaddress.c:4014 +#: catalog/objectaddress.c:4020 #, c-format msgid "view %s" msgstr "Sicht %s" -#: catalog/objectaddress.c:4018 +#: catalog/objectaddress.c:4024 #, c-format msgid "materialized view %s" msgstr "materialisierte Sicht %s" -#: catalog/objectaddress.c:4022 +#: catalog/objectaddress.c:4028 #, c-format msgid "composite type %s" msgstr "zusammengesetzter Typ %s" -#: catalog/objectaddress.c:4026 +#: catalog/objectaddress.c:4032 #, c-format msgid "foreign table %s" msgstr "Fremdtabelle %s" -#: catalog/objectaddress.c:4031 +#: catalog/objectaddress.c:4037 #, c-format msgid "relation %s" msgstr "Relation %s" -#: catalog/objectaddress.c:4072 +#: catalog/objectaddress.c:4078 #, c-format msgid "operator family %s for access method %s" msgstr "Operatorfamilie %s für Zugriffsmethode %s" @@ -5144,7 +5129,7 @@ msgstr "Abschlussfunktion mit zusätzlichen Argumenten darf nicht als STRICT dek msgid "return type of combine function %s is not %s" msgstr "Rückgabetyp der Kombinierfunktion %s ist nicht %s" -#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:4127 +#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:4128 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "Kombinierfunktion mit Übergangstyp %s darf nicht als STRICT deklariert sein" @@ -5633,7 +5618,7 @@ msgstr "" #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:440 +#: catalog/pg_subscription.c:441 #, c-format msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." msgstr "" @@ -5914,29 +5899,29 @@ msgstr "analysiere »%s.%s«" msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "Spalte »%s« von Relation »%s« erscheint mehrmals" -#: commands/analyze.c:791 +#: commands/analyze.c:790 #, fuzzy, c-format #| msgid "automatic analyze of table \"%s.%s.%s\"" msgid "automatic analyze of table \"%s.%s.%s\"\n" msgstr "automatisches Analysieren der Tabelle »%s.%s.%s«" -#: commands/analyze.c:812 +#: commands/analyze.c:811 #, fuzzy, c-format #| msgid "system usage: %s\n" msgid "system usage: %s" msgstr "Systembenutzung: %s\n" -#: commands/analyze.c:1351 +#: commands/analyze.c:1350 #, c-format msgid "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead rows; %d rows in sample, %.0f estimated total rows" msgstr "»%s«: %d von %u Seiten gelesen, enthalten %.0f lebende Zeilen und %.0f tote Zeilen; %d Zeilen in Stichprobe, schätzungsweise %.0f Zeilen insgesamt" -#: commands/analyze.c:1431 +#: commands/analyze.c:1430 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" msgstr "überspringe Analysieren des Vererbungsbaums »%s.%s« --- dieser Vererbungsbaum enthält keine abgeleiteten Tabellen" -#: commands/analyze.c:1529 +#: commands/analyze.c:1528 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "überspringe Analysieren des Vererbungsbaums »%s.%s« --- dieser Vererbungsbaum enthält keine analysierbaren abgeleiteten Tabellen" @@ -6106,16 +6091,14 @@ msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "Sortierfolge »%s« existiert bereits in Schema »%s«" #: commands/collationcmds.c:325 -#, fuzzy, c-format -#| msgid "cast from %s to %s" +#, c-format msgid "changing version from %s to %s" -msgstr "Typumwandlung von %s in %s" +msgstr "Version wird von %s in %s geändert" #: commands/collationcmds.c:340 -#, fuzzy, c-format -#| msgid "proto_version \"%s\" out of range" +#, c-format msgid "version has not changed" -msgstr "proto_version »%s« ist außerhalb des gültigen Bereichs" +msgstr "Version hat sich nicht geändert" #: commands/collationcmds.c:454 #, c-format @@ -7308,7 +7291,7 @@ msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "Parameter »%s« kann nicht in einer sekundären Erweitungskontrolldatei gesetzt werden" #: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 -#: utils/misc/guc.c:7125 +#: utils/misc/guc.c:7073 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "Parameter »%s« erfordert einen Boole’schen Wert" @@ -8987,7 +8970,7 @@ msgid "must be superuser to create subscriptions" msgstr "nur Superuser können Subskriptionen erzeugen" #: commands/subscriptioncmds.c:471 commands/subscriptioncmds.c:568 -#: replication/logical/tablesync.c:963 replication/logical/worker.c:3097 +#: replication/logical/tablesync.c:970 replication/logical/worker.c:3098 #, c-format msgid "could not connect to the publisher: %s" msgstr "konnte nicht mit dem Publikationsserver verbinden: %s" @@ -9524,7 +9507,7 @@ msgstr "Spalte »%s« von Relation »%s« enthält NULL-Werte" msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" msgstr "Check-Constraint »%s« von Relation »%s« wird von irgendeiner Zeile verletzt" -#: commands/tablecmds.c:5873 partitioning/partbounds.c:3279 +#: commands/tablecmds.c:5873 partitioning/partbounds.c:3282 #, c-format msgid "updated partition constraint for default partition \"%s\" would be violated by some row" msgstr "aktualisierter Partitions-Constraint der Standardpartition »%s« würde von irgendeiner Zeile verletzt werden" @@ -10900,29 +10883,29 @@ msgstr "Verschieben einer Zeile in eine andere Partition durch einen BEFORE-FOR- msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "Vor der Ausführung von Trigger »%s« gehörte die Zeile in Partition »%s.%s«." -#: commands/trigger.c:3043 executor/nodeModifyTable.c:1798 -#: executor/nodeModifyTable.c:1880 +#: commands/trigger.c:3043 executor/nodeModifyTable.c:1799 +#: executor/nodeModifyTable.c:1881 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "das zu aktualisierende Tupel wurde schon durch eine vom aktuellen Befehl ausgelöste Operation verändert" -#: commands/trigger.c:3044 executor/nodeModifyTable.c:1186 -#: executor/nodeModifyTable.c:1260 executor/nodeModifyTable.c:1799 -#: executor/nodeModifyTable.c:1881 +#: commands/trigger.c:3044 executor/nodeModifyTable.c:1187 +#: executor/nodeModifyTable.c:1261 executor/nodeModifyTable.c:1800 +#: executor/nodeModifyTable.c:1882 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Verwenden Sie einen AFTER-Trigger anstelle eines BEFORE-Triggers, um Änderungen an andere Zeilen zu propagieren." #: commands/trigger.c:3073 executor/nodeLockRows.c:225 #: executor/nodeLockRows.c:234 executor/nodeModifyTable.c:228 -#: executor/nodeModifyTable.c:1202 executor/nodeModifyTable.c:1816 -#: executor/nodeModifyTable.c:2046 +#: executor/nodeModifyTable.c:1203 executor/nodeModifyTable.c:1817 +#: executor/nodeModifyTable.c:2047 #, c-format msgid "could not serialize access due to concurrent update" msgstr "konnte Zugriff nicht serialisieren wegen gleichzeitiger Aktualisierung" -#: commands/trigger.c:3081 executor/nodeModifyTable.c:1292 -#: executor/nodeModifyTable.c:1898 executor/nodeModifyTable.c:2070 +#: commands/trigger.c:3081 executor/nodeModifyTable.c:1293 +#: executor/nodeModifyTable.c:1899 executor/nodeModifyTable.c:2071 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "konnte Zugriff nicht serialisieren wegen gleichzeitigem Löschen" @@ -11716,7 +11699,7 @@ msgstr "Sie haben möglicherweise bereits Daten wegen Transaktionsnummernüberla msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "überspringe »%s« --- kann Nicht-Tabellen oder besondere Systemtabellen nicht vacuumen" -#: commands/variable.c:165 utils/misc/guc.c:11658 utils/misc/guc.c:11720 +#: commands/variable.c:165 utils/misc/guc.c:11606 utils/misc/guc.c:11668 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Unbekanntes Schlüsselwort: »%s«." @@ -11902,57 +11885,57 @@ msgstr "Cursor »%s« ist nicht auf eine Zeile positioniert" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "Cursor »%s« ist kein einfach aktualisierbarer Scan der Tabelle »%s«" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2443 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2451 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "Typ von Parameter %d (%s) stimmt nicht mit dem überein, als der Plan vorbereitet worden ist (%s)" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2455 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2463 #, c-format msgid "no value found for parameter %d" msgstr "kein Wert für Parameter %d gefunden" -#: executor/execExpr.c:612 executor/execExpr.c:619 executor/execExpr.c:625 -#: executor/execExprInterp.c:4011 executor/execExprInterp.c:4028 -#: executor/execExprInterp.c:4129 executor/nodeModifyTable.c:117 +#: executor/execExpr.c:632 executor/execExpr.c:639 executor/execExpr.c:645 +#: executor/execExprInterp.c:4023 executor/execExprInterp.c:4040 +#: executor/execExprInterp.c:4141 executor/nodeModifyTable.c:117 #: executor/nodeModifyTable.c:128 executor/nodeModifyTable.c:145 #: executor/nodeModifyTable.c:153 #, c-format msgid "table row type and query-specified row type do not match" msgstr "Zeilentyp der Tabelle und der von der Anfrage angegebene Zeilentyp stimmen nicht überein" -#: executor/execExpr.c:613 executor/nodeModifyTable.c:118 +#: executor/execExpr.c:633 executor/nodeModifyTable.c:118 #, c-format msgid "Query has too many columns." msgstr "Anfrage hat zu viele Spalten." -#: executor/execExpr.c:620 executor/nodeModifyTable.c:146 +#: executor/execExpr.c:640 executor/nodeModifyTable.c:146 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "Anfrage liefert einen Wert für eine gelöschte Spalte auf Position %d." -#: executor/execExpr.c:626 executor/execExprInterp.c:4029 +#: executor/execExpr.c:646 executor/execExprInterp.c:4041 #: executor/nodeModifyTable.c:129 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "Tabelle hat Typ %s auf Position %d, aber Anfrage erwartet %s." -#: executor/execExpr.c:1056 parser/parse_agg.c:827 +#: executor/execExpr.c:1110 parser/parse_agg.c:827 #, c-format msgid "window function calls cannot be nested" msgstr "Aufrufe von Fensterfunktionen können nicht geschachtelt werden" -#: executor/execExpr.c:1561 +#: executor/execExpr.c:1615 #, c-format msgid "target type is not an array" msgstr "Zieltyp ist kein Array" -#: executor/execExpr.c:1901 +#: executor/execExpr.c:1955 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "ROW()-Spalte hat Typ %s statt Typ %s" -#: executor/execExpr.c:2426 executor/execSRF.c:718 parser/parse_func.c:136 +#: executor/execExpr.c:2480 executor/execSRF.c:718 parser/parse_func.c:136 #: parser/parse_func.c:654 parser/parse_func.c:1030 #, c-format msgid "cannot pass more than %d argument to a function" @@ -11960,35 +11943,35 @@ msgid_plural "cannot pass more than %d arguments to a function" msgstr[0] "kann nicht mehr als %d Argument an eine Funktion übergeben" msgstr[1] "kann nicht mehr als %d Argumente an eine Funktion übergeben" -#: executor/execExpr.c:2812 parser/parse_node.c:277 parser/parse_node.c:327 +#: executor/execExpr.c:2866 parser/parse_node.c:277 parser/parse_node.c:327 #, fuzzy, c-format #| msgid "cannot subscript type %s because it is not an array" msgid "cannot subscript type %s because it does not support subscripting" msgstr "kann aus Typ %s kein Element auswählen, weil er kein Array ist" -#: executor/execExpr.c:2940 executor/execExpr.c:2962 +#: executor/execExpr.c:2994 executor/execExpr.c:3016 #, fuzzy, c-format #| msgid "The server (version %s) does not support subscriptions." msgid "type %s does not support subscripted assignment" msgstr "Der Server (Version %s) unterstützt keine Subskriptionen." -#: executor/execExprInterp.c:1911 +#: executor/execExprInterp.c:1916 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "Attribut %d von Typ %s wurde gelöscht" -#: executor/execExprInterp.c:1917 +#: executor/execExprInterp.c:1922 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "Attribut %d von Typ %s hat falschen Typ" -#: executor/execExprInterp.c:1919 executor/execExprInterp.c:3040 -#: executor/execExprInterp.c:3086 +#: executor/execExprInterp.c:1924 executor/execExprInterp.c:3052 +#: executor/execExprInterp.c:3098 #, c-format msgid "Table has type %s, but query expects %s." msgstr "Tabelle hat Typ %s, aber Anfrage erwartet %s." -#: executor/execExprInterp.c:1998 utils/adt/expandedrecord.c:99 +#: executor/execExprInterp.c:2003 utils/adt/expandedrecord.c:99 #: utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1748 #: utils/cache/typcache.c:1904 utils/cache/typcache.c:2033 #: utils/fmgr/funcapi.c:458 @@ -11996,58 +11979,58 @@ msgstr "Tabelle hat Typ %s, aber Anfrage erwartet %s." msgid "type %s is not composite" msgstr "Typ %s ist kein zusammengesetzter Typ" -#: executor/execExprInterp.c:2533 +#: executor/execExprInterp.c:2541 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF wird für diesen Tabellentyp nicht unterstützt" -#: executor/execExprInterp.c:2746 +#: executor/execExprInterp.c:2754 #, c-format msgid "cannot merge incompatible arrays" msgstr "kann inkompatible Arrays nicht verschmelzen" -#: executor/execExprInterp.c:2747 +#: executor/execExprInterp.c:2755 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "Arrayelement mit Typ %s kann nicht in ARRAY-Konstrukt mit Elementtyp %s verwendet werden." -#: executor/execExprInterp.c:2768 utils/adt/arrayfuncs.c:262 -#: utils/adt/arrayfuncs.c:560 utils/adt/arrayfuncs.c:1302 -#: utils/adt/arrayfuncs.c:3374 utils/adt/arrayfuncs.c:5334 -#: utils/adt/arrayfuncs.c:5847 utils/adt/arraysubs.c:150 +#: executor/execExprInterp.c:2776 utils/adt/arrayfuncs.c:262 +#: utils/adt/arrayfuncs.c:562 utils/adt/arrayfuncs.c:1304 +#: utils/adt/arrayfuncs.c:3374 utils/adt/arrayfuncs.c:5336 +#: utils/adt/arrayfuncs.c:5853 utils/adt/arraysubs.c:150 #: utils/adt/arraysubs.c:488 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "Anzahl der Arraydimensionen (%d) überschreitet erlaubtes Maximum (%d)" -#: executor/execExprInterp.c:2788 executor/execExprInterp.c:2818 +#: executor/execExprInterp.c:2796 executor/execExprInterp.c:2826 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "mehrdimensionale Arrays müssen Arraysausdrücke mit gleicher Anzahl Dimensionen haben" -#: executor/execExprInterp.c:3039 executor/execExprInterp.c:3085 +#: executor/execExprInterp.c:3051 executor/execExprInterp.c:3097 #, c-format msgid "attribute %d has wrong type" msgstr "Attribut %d hat falschen Typ" -#: executor/execExprInterp.c:3640 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3652 utils/adt/domains.c:149 #, c-format msgid "domain %s does not allow null values" msgstr "Domäne %s erlaubt keine NULL-Werte" -#: executor/execExprInterp.c:3655 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3667 utils/adt/domains.c:184 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "Wert für Domäne %s verletzt Check-Constraint »%s«" -#: executor/execExprInterp.c:4012 +#: executor/execExprInterp.c:4024 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." msgstr[0] "Tabellenzeile enthält %d Attribut, aber Anfrage erwartet %d." msgstr[1] "Tabellenzeile enthält %d Attribute, aber Anfrage erwartet %d." -#: executor/execExprInterp.c:4130 executor/execSRF.c:977 +#: executor/execExprInterp.c:4142 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "Physischer Speicher stimmt nicht überein mit gelöschtem Attribut auf Position %d." @@ -12276,9 +12259,9 @@ msgid "concurrent delete, retrying" msgstr "gleichzeitiges Löschen, versuche erneut" #: executor/execReplication.c:269 parser/parse_cte.c:502 -#: parser/parse_oper.c:233 utils/adt/array_userfuncs.c:719 -#: utils/adt/array_userfuncs.c:858 utils/adt/arrayfuncs.c:3652 -#: utils/adt/arrayfuncs.c:4172 utils/adt/arrayfuncs.c:6158 +#: parser/parse_oper.c:233 utils/adt/array_userfuncs.c:720 +#: utils/adt/array_userfuncs.c:859 utils/adt/arrayfuncs.c:3654 +#: utils/adt/arrayfuncs.c:4174 utils/adt/arrayfuncs.c:6166 #: utils/adt/rowtypes.c:1203 #, c-format msgid "could not identify an equality operator for type %s" @@ -12456,17 +12439,17 @@ msgstr "Die letzte Anweisung gibt zu wenige Spalten zurück." msgid "return type %s is not supported for SQL functions" msgstr "Rückgabetyp %s wird von SQL-Funktionen nicht unterstützt" -#: executor/nodeAgg.c:3082 executor/nodeAgg.c:3091 executor/nodeAgg.c:3103 +#: executor/nodeAgg.c:3083 executor/nodeAgg.c:3092 executor/nodeAgg.c:3104 #, c-format msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" msgstr "unerwartetes EOF für Tape %d: %zu Bytes angefordert, %zu Bytes gelesen" -#: executor/nodeAgg.c:3976 parser/parse_agg.c:666 parser/parse_agg.c:696 +#: executor/nodeAgg.c:3977 parser/parse_agg.c:666 parser/parse_agg.c:696 #, c-format msgid "aggregate function calls cannot be nested" msgstr "Aufrufe von Aggregatfunktionen können nicht geschachtelt werden" -#: executor/nodeAgg.c:4184 executor/nodeWindowAgg.c:2836 +#: executor/nodeAgg.c:4185 executor/nodeWindowAgg.c:2836 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "Aggregatfunktion %u muss kompatiblen Eingabe- und Übergangstyp haben" @@ -12516,27 +12499,27 @@ msgstr "FULL JOIN wird nur für Merge-Verbund-fähige Verbundbedingungen unterst msgid "Query has too few columns." msgstr "Anfrage hat zu wenige Spalten." -#: executor/nodeModifyTable.c:1185 executor/nodeModifyTable.c:1259 +#: executor/nodeModifyTable.c:1186 executor/nodeModifyTable.c:1260 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "das zu löschende Tupel wurde schon durch eine vom aktuellen Befehl ausgelöste Operation verändert" -#: executor/nodeModifyTable.c:1434 +#: executor/nodeModifyTable.c:1435 #, c-format msgid "invalid ON UPDATE specification" msgstr "ungültige ON-UPDATE-Angabe" -#: executor/nodeModifyTable.c:1435 +#: executor/nodeModifyTable.c:1436 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "Das Ergebnistupel würde in einer anderen Partition erscheinen als das ursprüngliche Tupel." -#: executor/nodeModifyTable.c:2025 +#: executor/nodeModifyTable.c:2026 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "Befehl in ON CONFLICT DO UPDATE kann eine Zeile nicht ein zweites Mal ändern" -#: executor/nodeModifyTable.c:2026 +#: executor/nodeModifyTable.c:2027 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "Stellen Sie sicher, dass keine im selben Befehl fürs Einfügen vorgesehene Zeilen doppelte Werte haben, die einen Constraint verletzen würden." @@ -13065,9 +13048,9 @@ msgstr "%s-Constraints können nicht als NO INHERIT markiert werden" msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "unbekannter Konfigurationsparameter »%s« in Datei »%s« Zeile %d" -#: guc-file.l:351 utils/misc/guc.c:7393 utils/misc/guc.c:7591 -#: utils/misc/guc.c:7685 utils/misc/guc.c:7779 utils/misc/guc.c:7899 -#: utils/misc/guc.c:7998 +#: guc-file.l:351 utils/misc/guc.c:7341 utils/misc/guc.c:7539 +#: utils/misc/guc.c:7633 utils/misc/guc.c:7727 utils/misc/guc.c:7847 +#: utils/misc/guc.c:7946 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "Parameter »%s« kann nicht geändert werden, ohne den Server neu zu starten" @@ -13506,411 +13489,411 @@ msgstr "kein pg_hba.conf-Eintrag für Replikationsverbindung von Host »%s«, Be msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "kein pg_hba.conf-Eintrag für Host »%s«, Benutzer »%s«, Datenbank »%s«, %s" -#: libpq/auth.c:722 +#: libpq/auth.c:721 #, c-format msgid "expected password response, got message type %d" msgstr "Passwort-Antwort erwartet, Message-Typ %d empfangen" -#: libpq/auth.c:743 +#: libpq/auth.c:742 #, c-format msgid "invalid password packet size" msgstr "ungültige Größe des Passwortpakets" -#: libpq/auth.c:761 +#: libpq/auth.c:760 #, c-format msgid "empty password returned by client" msgstr "Client gab leeres Passwort zurück" -#: libpq/auth.c:888 libpq/hba.c:1368 +#: libpq/auth.c:887 libpq/hba.c:1368 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "MD5-Authentifizierung wird nicht unterstützt, wenn »db_user_namespace« angeschaltet ist" -#: libpq/auth.c:894 +#: libpq/auth.c:893 #, c-format msgid "could not generate random MD5 salt" msgstr "konnte zufälliges MD5-Salt nicht erzeugen" -#: libpq/auth.c:960 +#: libpq/auth.c:959 #, c-format msgid "expected SASL response, got message type %d" msgstr "SASL-Antwort erwartet, Message-Typ %d empfangen" -#: libpq/auth.c:1089 libpq/be-secure-gssapi.c:535 +#: libpq/auth.c:1088 libpq/be-secure-gssapi.c:535 #, c-format msgid "could not set environment: %m" msgstr "konnte Umgebung nicht setzen: %m" -#: libpq/auth.c:1125 +#: libpq/auth.c:1124 #, c-format msgid "expected GSS response, got message type %d" msgstr "GSS-Antwort erwartet, Message-Typ %d empfangen" -#: libpq/auth.c:1185 +#: libpq/auth.c:1184 msgid "accepting GSS security context failed" msgstr "Annahme des GSS-Sicherheitskontexts fehlgeschlagen" -#: libpq/auth.c:1225 +#: libpq/auth.c:1224 msgid "retrieving GSS user name failed" msgstr "Abfrage des GSS-Benutzernamens fehlgeschlagen" -#: libpq/auth.c:1366 +#: libpq/auth.c:1365 msgid "could not acquire SSPI credentials" msgstr "konnte SSPI-Credentials nicht erhalten" -#: libpq/auth.c:1391 +#: libpq/auth.c:1390 #, c-format msgid "expected SSPI response, got message type %d" msgstr "SSPI-Antwort erwartet, Message-Typ %d empfangen" -#: libpq/auth.c:1469 +#: libpq/auth.c:1468 msgid "could not accept SSPI security context" msgstr "konnte SSPI-Sicherheitskontext nicht akzeptieren" -#: libpq/auth.c:1531 +#: libpq/auth.c:1530 msgid "could not get token from SSPI security context" msgstr "konnte kein Token vom SSPI-Sicherheitskontext erhalten" -#: libpq/auth.c:1670 libpq/auth.c:1689 +#: libpq/auth.c:1669 libpq/auth.c:1688 #, c-format msgid "could not translate name" msgstr "konnte Namen nicht umwandeln" -#: libpq/auth.c:1702 +#: libpq/auth.c:1701 #, c-format msgid "realm name too long" msgstr "Realm-Name zu lang" -#: libpq/auth.c:1717 +#: libpq/auth.c:1716 #, c-format msgid "translated account name too long" msgstr "umgewandelter Account-Name zu lang" -#: libpq/auth.c:1898 +#: libpq/auth.c:1897 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "konnte Socket für Ident-Verbindung nicht erzeugen: %m" -#: libpq/auth.c:1913 +#: libpq/auth.c:1912 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "konnte nicht mit lokaler Adresse »%s« verbinden: %m" -#: libpq/auth.c:1925 +#: libpq/auth.c:1924 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "konnte nicht mit Ident-Server auf Adresse »%s«, Port %s verbinden: %m" -#: libpq/auth.c:1947 +#: libpq/auth.c:1946 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "konnte Anfrage an Ident-Server auf Adresse »%s«, Port %s nicht senden: %m" -#: libpq/auth.c:1964 +#: libpq/auth.c:1963 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "konnte Antwort von Ident-Server auf Adresse »%s«, Port %s nicht empfangen: %m" -#: libpq/auth.c:1974 +#: libpq/auth.c:1973 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "ungültig formatierte Antwort vom Ident-Server: »%s«" -#: libpq/auth.c:2027 +#: libpq/auth.c:2026 #, c-format msgid "peer authentication is not supported on this platform" msgstr "Peer-Authentifizierung wird auf dieser Plattform nicht unterstützt" -#: libpq/auth.c:2031 +#: libpq/auth.c:2030 #, c-format msgid "could not get peer credentials: %m" msgstr "konnte Credentials von Gegenstelle nicht ermitteln: %m" -#: libpq/auth.c:2043 +#: libpq/auth.c:2042 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "konnte lokale Benutzer-ID %ld nicht nachschlagen: %s" -#: libpq/auth.c:2144 +#: libpq/auth.c:2143 #, c-format msgid "error from underlying PAM layer: %s" msgstr "Fehler von der unteren PAM-Ebene: %s" -#: libpq/auth.c:2155 +#: libpq/auth.c:2154 #, fuzzy, c-format #| msgid "unsupported format code: %d" msgid "unsupported PAM conversation %d/\"%s\"" msgstr "nicht unterstützter Formatcode: %d" -#: libpq/auth.c:2215 +#: libpq/auth.c:2214 #, c-format msgid "could not create PAM authenticator: %s" msgstr "konnte PAM-Authenticator nicht erzeugen: %s" -#: libpq/auth.c:2226 +#: libpq/auth.c:2225 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) fehlgeschlagen: %s" -#: libpq/auth.c:2258 +#: libpq/auth.c:2257 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST) fehlgeschlagen: %s" -#: libpq/auth.c:2270 +#: libpq/auth.c:2269 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) fehlgeschlagen: %s" -#: libpq/auth.c:2283 +#: libpq/auth.c:2282 #, c-format msgid "pam_authenticate failed: %s" msgstr "pam_authenticate fehlgeschlagen: %s" -#: libpq/auth.c:2296 +#: libpq/auth.c:2295 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt fehlgeschlagen: %s" -#: libpq/auth.c:2307 +#: libpq/auth.c:2306 #, c-format msgid "could not release PAM authenticator: %s" msgstr "konnte PAM-Authenticator nicht freigeben: %s" -#: libpq/auth.c:2387 +#: libpq/auth.c:2386 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "konnte LDAP nicht initialisieren: Fehlercode %d" -#: libpq/auth.c:2424 +#: libpq/auth.c:2423 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "konnte keinen Domain-Namen aus ldapbasedn herauslesen" -#: libpq/auth.c:2432 +#: libpq/auth.c:2431 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "LDAP-Authentifizierung konnte keine DNS-SRV-Einträge für »%s« finden" -#: libpq/auth.c:2434 +#: libpq/auth.c:2433 #, c-format msgid "Set an LDAP server name explicitly." msgstr "Geben Sie einen LDAP-Servernamen explizit an." -#: libpq/auth.c:2486 +#: libpq/auth.c:2485 #, c-format msgid "could not initialize LDAP: %s" msgstr "konnte LDAP nicht initialisieren: %s" -#: libpq/auth.c:2496 +#: libpq/auth.c:2495 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "ldaps wird mit dieser LDAP-Bibliothek nicht unterstützt" -#: libpq/auth.c:2504 +#: libpq/auth.c:2503 #, c-format msgid "could not initialize LDAP: %m" msgstr "konnte LDAP nicht initialisieren: %m" -#: libpq/auth.c:2514 +#: libpq/auth.c:2513 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "konnte LDAP-Protokollversion nicht setzen: %s" -#: libpq/auth.c:2554 +#: libpq/auth.c:2553 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "konnte Funktion _ldap_start_tls_sA in wldap32.dll nicht laden" -#: libpq/auth.c:2555 +#: libpq/auth.c:2554 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "LDAP über SSL wird auf dieser Plattform nicht unterstützt." -#: libpq/auth.c:2571 +#: libpq/auth.c:2570 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "konnte LDAP-TLS-Sitzung nicht starten: %s" -#: libpq/auth.c:2642 +#: libpq/auth.c:2641 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "LDAP-Server nicht angegeben, und kein ldapbasedn" -#: libpq/auth.c:2649 +#: libpq/auth.c:2648 #, c-format msgid "LDAP server not specified" msgstr "LDAP-Server nicht angegeben" -#: libpq/auth.c:2711 +#: libpq/auth.c:2710 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "ungültiges Zeichen im Benutzernamen für LDAP-Authentifizierung" -#: libpq/auth.c:2728 +#: libpq/auth.c:2727 #, c-format msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" msgstr "erstes LDAP-Binden für ldapbinddn »%s« auf Server »%s« fehlgeschlagen: %s" -#: libpq/auth.c:2757 +#: libpq/auth.c:2756 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "konnte LDAP nicht mit Filter »%s« auf Server »%s« durchsuchen: %s" -#: libpq/auth.c:2771 +#: libpq/auth.c:2770 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "LDAP-Benutzer »%s« existiert nicht" -#: libpq/auth.c:2772 +#: libpq/auth.c:2771 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "LDAP-Suche nach Filter »%s« auf Server »%s« gab keine Einträge zurück." -#: libpq/auth.c:2776 +#: libpq/auth.c:2775 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "LDAP-Benutzer »%s« ist nicht eindeutig" -#: libpq/auth.c:2777 +#: libpq/auth.c:2776 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." msgstr[0] "LDAP-Suche nach Filter »%s« auf Server »%s« gab %d Eintrag zurück." msgstr[1] "LDAP-Suche nach Filter »%s« auf Server »%s« gab %d Einträge zurück." -#: libpq/auth.c:2797 +#: libpq/auth.c:2796 #, c-format msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "konnte DN fũr den ersten Treffer für »%s« auf Server »%s« nicht lesen: %s" -#: libpq/auth.c:2818 +#: libpq/auth.c:2817 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\"" msgstr "Losbinden fehlgeschlagen nach Suche nach Benutzer »%s« auf Server »%s«" -#: libpq/auth.c:2849 +#: libpq/auth.c:2848 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "LDAP-Login fehlgeschlagen für Benutzer »%s« auf Server »%s«: %s" -#: libpq/auth.c:2881 +#: libpq/auth.c:2880 #, c-format msgid "LDAP diagnostics: %s" msgstr "LDAP-Diagnostik: %s" -#: libpq/auth.c:2919 +#: libpq/auth.c:2918 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "Zertifikatauthentifizierung für Benutzer »%s« fehlgeschlagen: Client-Zertifikat enthält keinen Benutzernamen" -#: libpq/auth.c:2940 +#: libpq/auth.c:2939 #, fuzzy, c-format #| msgid "certificate authentication failed for user \"%s\"" msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" msgstr "Zertifikatauthentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:2963 +#: libpq/auth.c:2962 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" msgstr "Zertifikatüberprüfung (clientcert=verify=full) für Benutzer »%s« fehlgeschlagen: DN stimmt nicht überein" -#: libpq/auth.c:2968 +#: libpq/auth.c:2967 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" msgstr "Zertifikatüberprüfung (clientcert=verify=full) für Benutzer »%s« fehlgeschlagen: CN stimmt nicht überein" -#: libpq/auth.c:3070 +#: libpq/auth.c:3069 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS-Server nicht angegeben" -#: libpq/auth.c:3077 +#: libpq/auth.c:3076 #, c-format msgid "RADIUS secret not specified" msgstr "RADIUS-Geheimnis nicht angegeben" -#: libpq/auth.c:3091 +#: libpq/auth.c:3090 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "RADIUS-Authentifizierung unterstützt keine Passwörter länger als %d Zeichen" -#: libpq/auth.c:3198 libpq/hba.c:1998 +#: libpq/auth.c:3197 libpq/hba.c:1998 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "konnte RADIUS-Servername »%s« nicht in Adresse übersetzen: %s" -#: libpq/auth.c:3212 +#: libpq/auth.c:3211 #, c-format msgid "could not generate random encryption vector" msgstr "konnte zufälligen Verschlüsselungsvektor nicht erzeugen" -#: libpq/auth.c:3246 +#: libpq/auth.c:3245 #, c-format msgid "could not perform MD5 encryption of password" msgstr "konnte MD5-Verschlüsselung des Passworts nicht durchführen" -#: libpq/auth.c:3272 +#: libpq/auth.c:3271 #, c-format msgid "could not create RADIUS socket: %m" msgstr "konnte RADIUS-Socket nicht erstellen: %m" -#: libpq/auth.c:3294 +#: libpq/auth.c:3293 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "konnte lokales RADIUS-Socket nicht binden: %m" -#: libpq/auth.c:3304 +#: libpq/auth.c:3303 #, c-format msgid "could not send RADIUS packet: %m" msgstr "konnte RADIUS-Paket nicht senden: %m" -#: libpq/auth.c:3337 libpq/auth.c:3363 +#: libpq/auth.c:3336 libpq/auth.c:3362 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "Zeitüberschreitung beim Warten auf RADIUS-Antwort von %s" -#: libpq/auth.c:3356 +#: libpq/auth.c:3355 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "konnte Status des RADIUS-Sockets nicht prüfen: %m" -#: libpq/auth.c:3386 +#: libpq/auth.c:3385 #, c-format msgid "could not read RADIUS response: %m" msgstr "konnte RADIUS-Antwort nicht lesen: %m" -#: libpq/auth.c:3399 libpq/auth.c:3403 +#: libpq/auth.c:3398 libpq/auth.c:3402 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "RADIUS-Antwort von %s wurde von falschem Port gesendet: %d" -#: libpq/auth.c:3412 +#: libpq/auth.c:3411 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "RADIUS-Antwort von %s zu kurz: %d" -#: libpq/auth.c:3419 +#: libpq/auth.c:3418 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "RADIUS-Antwort von %s hat verfälschte Länge: %d (tatsächliche Länge %d)" -#: libpq/auth.c:3427 +#: libpq/auth.c:3426 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "RADIUS-Antwort von %s unterscheidet sich von Anfrage: %d (sollte %d sein)" -#: libpq/auth.c:3452 +#: libpq/auth.c:3451 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "konnte MD5-Verschlüsselung des empfangenen Pakets nicht durchführen" -#: libpq/auth.c:3461 +#: libpq/auth.c:3460 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "RADIUS-Antwort von %s hat falsche MD5-Signatur" -#: libpq/auth.c:3479 +#: libpq/auth.c:3478 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "RADIUS-Antwort von %s hat ungültigen Code (%d) für Benutzer »%s«" @@ -13967,8 +13950,8 @@ msgstr "konnte Serverdatei »%s« nicht schreiben: %m" msgid "large object read request is too large" msgstr "Large-Object-Leseaufforderung ist zu groß" -#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:268 utils/adt/genfile.c:307 -#: utils/adt/genfile.c:343 +#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:267 utils/adt/genfile.c:306 +#: utils/adt/genfile.c:342 #, c-format msgid "requested length cannot be negative" msgstr "verlangte Länge darf nicht negativ sein" @@ -14167,8 +14150,8 @@ msgstr "konnte SSL-Verbindung nicht annehmen: %s" msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." msgstr "Das zeigt möglicherweise an, dass der Client keine SSL-Protokollversion zwischen %s und %s unterstützt." -#: libpq/be-secure-openssl.c:544 libpq/be-secure-openssl.c:723 -#: libpq/be-secure-openssl.c:787 +#: libpq/be-secure-openssl.c:544 libpq/be-secure-openssl.c:724 +#: libpq/be-secure-openssl.c:788 #, c-format msgid "unrecognized SSL error code: %d" msgstr "unbekannter SSL-Fehlercode: %d" @@ -14178,81 +14161,81 @@ msgstr "unbekannter SSL-Fehlercode: %d" msgid "SSL certificate's common name contains embedded null" msgstr "Common-Name im SSL-Zertifikat enthält Null-Byte" -#: libpq/be-secure-openssl.c:629 +#: libpq/be-secure-openssl.c:630 #, c-format msgid "SSL certificate's distinguished name contains embedded null" msgstr "Distinguished Name im SSL-Zertifikat enthält Null-Byte" -#: libpq/be-secure-openssl.c:712 libpq/be-secure-openssl.c:771 +#: libpq/be-secure-openssl.c:713 libpq/be-secure-openssl.c:772 #, c-format msgid "SSL error: %s" msgstr "SSL-Fehler: %s" -#: libpq/be-secure-openssl.c:952 +#: libpq/be-secure-openssl.c:953 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "konnte DH-Parameterdatei »%s« nicht öffnen: %m" -#: libpq/be-secure-openssl.c:964 +#: libpq/be-secure-openssl.c:965 #, c-format msgid "could not load DH parameters file: %s" msgstr "konnte DH-Parameterdatei nicht laden: %s" -#: libpq/be-secure-openssl.c:974 +#: libpq/be-secure-openssl.c:975 #, c-format msgid "invalid DH parameters: %s" msgstr "ungültige DH-Parameter: %s" -#: libpq/be-secure-openssl.c:983 +#: libpq/be-secure-openssl.c:984 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "ungültige DH-Parameter: p ist keine Primzahl" -#: libpq/be-secure-openssl.c:992 +#: libpq/be-secure-openssl.c:993 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "ungültige DH-Parameter: weder geeigneter Generator noch sichere Primzahl" -#: libpq/be-secure-openssl.c:1153 +#: libpq/be-secure-openssl.c:1154 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: konnte DH-Parameter nicht laden" -#: libpq/be-secure-openssl.c:1161 +#: libpq/be-secure-openssl.c:1162 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: konnte DH-Parameter nicht setzen: %s" -#: libpq/be-secure-openssl.c:1188 +#: libpq/be-secure-openssl.c:1189 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: unbekannter Kurvenname: %s" -#: libpq/be-secure-openssl.c:1197 +#: libpq/be-secure-openssl.c:1198 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: konnte Schlüssel nicht erzeugen" -#: libpq/be-secure-openssl.c:1225 +#: libpq/be-secure-openssl.c:1226 msgid "no SSL error reported" msgstr "kein SSL-Fehler berichtet" -#: libpq/be-secure-openssl.c:1229 +#: libpq/be-secure-openssl.c:1230 #, c-format msgid "SSL error code %lu" msgstr "SSL-Fehlercode %lu" -#: libpq/be-secure-openssl.c:1383 +#: libpq/be-secure-openssl.c:1384 #, c-format msgid "failed to create BIO" msgstr "" -#: libpq/be-secure-openssl.c:1393 +#: libpq/be-secure-openssl.c:1394 #, c-format msgid "could not get NID for ASN1_OBJECT object" msgstr "" -#: libpq/be-secure-openssl.c:1401 +#: libpq/be-secure-openssl.c:1402 #, fuzzy, c-format #| msgid "could not create LDAP structure\n" msgid "could not convert NID %d to an ASN1_OBJECT structure" @@ -14773,8 +14756,8 @@ msgstr "konnte neue Verbindung nicht akzeptieren: %m" #: libpq/pqcomm.c:766 libpq/pqcomm.c:775 libpq/pqcomm.c:807 libpq/pqcomm.c:817 #: libpq/pqcomm.c:1630 libpq/pqcomm.c:1675 libpq/pqcomm.c:1715 #: libpq/pqcomm.c:1759 libpq/pqcomm.c:1798 libpq/pqcomm.c:1837 -#: libpq/pqcomm.c:1873 libpq/pqcomm.c:1912 postmaster/pgstat.c:621 -#: postmaster/pgstat.c:632 +#: libpq/pqcomm.c:1873 libpq/pqcomm.c:1912 postmaster/pgstat.c:618 +#: postmaster/pgstat.c:629 #, c-format msgid "%s(%s) failed: %m" msgstr "%s(%s) fehlgeschlagen: %m" @@ -14842,7 +14825,7 @@ msgid "no data left in message" msgstr "keine Daten in Message übrig" #: libpq/pqformat.c:517 libpq/pqformat.c:535 libpq/pqformat.c:556 -#: utils/adt/arrayfuncs.c:1492 utils/adt/rowtypes.c:588 +#: utils/adt/arrayfuncs.c:1481 utils/adt/rowtypes.c:588 #, c-format msgid "insufficient data left in message" msgstr "nicht genug Daten in Message übrig" @@ -16148,25 +16131,12 @@ msgstr "Argumenttypen %s und %s passen nicht zusammen" msgid "%s could not convert type %s to %s" msgstr "%s konnte Typ %s nicht in %s umwandeln" -#: parser/parse_coerce.c:2089 -#, c-format -msgid "arguments declared \"anyelement\" are not all alike" -msgstr "als »anyelement« deklariert Argumente sind nicht alle gleich" - -#: parser/parse_coerce.c:2109 -#, c-format -msgid "arguments declared \"anyarray\" are not all alike" -msgstr "als »anyarray« deklarierte Argumente sind nicht alle gleich" - -#: parser/parse_coerce.c:2129 +#: parser/parse_coerce.c:2089 parser/parse_coerce.c:2109 +#: parser/parse_coerce.c:2129 parser/parse_coerce.c:2149 +#: parser/parse_coerce.c:2204 parser/parse_coerce.c:2237 #, c-format -msgid "arguments declared \"anyrange\" are not all alike" -msgstr "als »anyrange« deklarierte Argumente sind nicht alle gleich" - -#: parser/parse_coerce.c:2149 -#, c-format -msgid "arguments declared \"anymultirange\" are not all alike" -msgstr "als »anymultirange« deklarierte Argumente sind nicht alle gleich" +msgid "arguments declared \"%s\" are not all alike" +msgstr "als »%s« deklarierte Argumente sind nicht alle gleich" #: parser/parse_coerce.c:2183 parser/parse_coerce.c:2297 #: utils/fmgr/funcapi.c:489 @@ -16174,22 +16144,12 @@ msgstr "als »anymultirange« deklarierte Argumente sind nicht alle gleich" msgid "argument declared %s is not an array but type %s" msgstr "als %s deklariertes Argument ist kein Array sondern Typ %s" -#: parser/parse_coerce.c:2204 -#, c-format -msgid "arguments declared \"anycompatiblerange\" are not all alike" -msgstr "als »anycompatiblerange« deklarierte Argumente sind nicht alle gleich" - #: parser/parse_coerce.c:2216 parser/parse_coerce.c:2329 #: utils/fmgr/funcapi.c:503 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "als %s deklariertes Argument ist kein Bereichstyp sondern Typ %s" -#: parser/parse_coerce.c:2237 -#, c-format -msgid "arguments declared \"anycompatiblemultirange\" are not all alike" -msgstr "als »anycompatiblemultirange« deklarierte Argumente sind nicht alle gleich" - #: parser/parse_coerce.c:2250 parser/parse_coerce.c:2363 #: utils/fmgr/funcapi.c:521 utils/fmgr/funcapi.c:586 #, c-format @@ -16380,10 +16340,9 @@ msgid "cycle column \"%s\" not in WITH query column list" msgstr "Cycle-Spalte »%s« ist nicht in der Spaltenliste der WITH-Anfrage" #: parser/parse_cte.c:443 -#, fuzzy, c-format -#| msgid "column \"%s\" specified more than once" +#, c-format msgid "cycle column \"%s\" specified more than once" -msgstr "Spalte »%s« mehrmals angegeben" +msgstr "Zyklusspalte »%s« mehrmals angegeben" #: parser/parse_cte.c:452 #, c-format @@ -16412,8 +16371,8 @@ msgstr "Search-Sequenz-Spaltenname und Zyklusmarkierungsspaltenname sind gleich" #: parser/parse_cte.c:527 #, c-format -msgid "search_sequence column name and cycle path column name are the same" -msgstr "" +msgid "search sequence column name and cycle path column name are the same" +msgstr "Search-Sequenz-Spaltenname und Zykluspfadspaltenname sind gleich" #: parser/parse_cte.c:611 #, c-format @@ -16555,10 +16514,8 @@ msgid "cannot use subquery in index predicate" msgstr "Unteranfragen können nicht im Indexprädikat verwendet werden" #: parser/parse_expr.c:1746 -#, fuzzy -#| msgid "cannot use subquery in partition key expression" msgid "cannot use subquery in statistics expression" -msgstr "Unteranfragen können nicht in Partitionierungsschlüsselausdrücken verwendet werden" +msgstr "Unteranfragen können nicht in Statistikausdrücken verwendet werden" #: parser/parse_expr.c:1749 msgid "cannot use subquery in transform expression" @@ -16982,10 +16939,8 @@ msgid "set-returning functions are not allowed in index predicates" msgstr "Funktionen mit Ergebnismenge sind in Indexprädikaten nicht erlaubt" #: parser/parse_func.c:2513 -#, fuzzy -#| msgid "set-returning functions are not allowed in policy expressions" msgid "set-returning functions are not allowed in statistics expressions" -msgstr "Funktionen mit Ergebnismenge sind in Policy-Ausdrücken nicht erlaubt" +msgstr "Funktionen mit Ergebnismenge sind in Statistikausdrücken nicht erlaubt" #: parser/parse_func.c:2516 msgid "set-returning functions are not allowed in transform expressions" @@ -17464,10 +17419,9 @@ msgid "index expressions and predicates can refer only to the table being indexe msgstr "Indexausdrücke und -prädikate können nur auf die zu indizierende Tabelle verweisen" #: parser/parse_utilcmd.c:2974 -#, fuzzy, c-format -#| msgid "index expressions and predicates can refer only to the table being indexed" +#, c-format msgid "statistics expressions can refer only to the table being indexed" -msgstr "Indexausdrücke und -prädikate können nur auf die zu indizierende Tabelle verweisen" +msgstr "Statistikausdrücke können nur auf die zu indizierende Tabelle verweisen" #: parser/parse_utilcmd.c:3020 #, c-format @@ -17580,12 +17534,12 @@ msgstr "eine hashpartitionierte Tabelle kann keine Standardpartition haben" msgid "invalid bound specification for a hash partition" msgstr "ungültige Begrenzungsangabe für eine Hash-Partition" -#: parser/parse_utilcmd.c:4071 partitioning/partbounds.c:4698 +#: parser/parse_utilcmd.c:4071 partitioning/partbounds.c:4701 #, c-format msgid "modulus for hash partition must be a positive integer" msgstr "Modulus für Hashpartition muss eine positive ganze Zahl sein" -#: parser/parse_utilcmd.c:4078 partitioning/partbounds.c:4706 +#: parser/parse_utilcmd.c:4078 partitioning/partbounds.c:4709 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "Rest für Hashpartition muss kleiner als Modulus sein" @@ -17669,64 +17623,63 @@ msgstr "Bezeichner »%s« wird auf »%.*s« gekürzt" msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "Partition »%s« kollidiert mit bestehender Standardpartition »%s«" -#: partitioning/partbounds.c:2870 partitioning/partbounds.c:2885 -#: partitioning/partbounds.c:2901 +#: partitioning/partbounds.c:2870 partitioning/partbounds.c:2888 +#: partitioning/partbounds.c:2904 #, c-format msgid "every hash partition modulus must be a factor of the next larger modulus" msgstr "der Modulus jeder Hashpartition muss ein Faktor des nächstgrößeren Modulus sein" -#: partitioning/partbounds.c:2871 partitioning/partbounds.c:2902 +#: partitioning/partbounds.c:2871 partitioning/partbounds.c:2905 #, c-format msgid "The new modulus %d is not a factor of %d, the modulus of existing partition \"%s\"." msgstr "Der neue Modulus %d ist kein Faktor von %d, dem Modulus der bestehenden Partition »%s«." -#: partitioning/partbounds.c:2886 +#: partitioning/partbounds.c:2889 #, c-format msgid "The new modulus %d is not divisible by %d, the modulus of existing partition \"%s\"." msgstr "Der neue Modulus %d ist nicht durch %d, den Modulus der bestehenden Parition »%s«, teilbar." -#: partitioning/partbounds.c:3015 +#: partitioning/partbounds.c:3018 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "leere Bereichsgrenze angegeben für Partition »%s«" -#: partitioning/partbounds.c:3017 +#: partitioning/partbounds.c:3020 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "Angegebene Untergrenze %s ist größer als oder gleich der Obergrenze %s." -#: partitioning/partbounds.c:3129 +#: partitioning/partbounds.c:3132 #, c-format msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "Partition »%s« würde sich mit Partition »%s« überlappen" -#: partitioning/partbounds.c:3246 +#: partitioning/partbounds.c:3249 #, c-format msgid "skipped scanning foreign table \"%s\" which is a partition of default partition \"%s\"" msgstr "Scannen von Fremdtabelle »%s«, die eine Partition der Standardpartition »%s« ist, wurde übersprungen" -#: partitioning/partbounds.c:4702 +#: partitioning/partbounds.c:4705 #, c-format msgid "remainder for hash partition must be a non-negative integer" msgstr "Rest für Hashpartition muss eine nichtnegative ganze Zahl sein" -#: partitioning/partbounds.c:4726 +#: partitioning/partbounds.c:4729 #, c-format msgid "\"%s\" is not a hash partitioned table" msgstr "»%s« ist keine Hash-partitionierte Tabelle" -#: partitioning/partbounds.c:4737 partitioning/partbounds.c:4854 +#: partitioning/partbounds.c:4740 partitioning/partbounds.c:4857 #, c-format msgid "number of partitioning columns (%d) does not match number of partition keys provided (%d)" msgstr "Anzahl der Partitionierungsspalten (%d) stimmt nicht mit der Anzahl der angegebenen Partitionierungsschlüssel (%d) überein" -#: partitioning/partbounds.c:4759 -#, fuzzy, c-format -#| msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" +#: partitioning/partbounds.c:4762 +#, c-format msgid "column %d of the partition key has type %s, but supplied value is of type %s" -msgstr "Spalte %d des Partitionierungsschlüssels hat Typ »%s«, aber der angegebene Wert hat Typ »%s«" +msgstr "Spalte %d des Partitionierungsschlüssels hat Typ %s, aber der angegebene Wert hat Typ %s" -#: partitioning/partbounds.c:4791 +#: partitioning/partbounds.c:4794 #, c-format msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" msgstr "Spalte %d des Partitionierungsschlüssels hat Typ »%s«, aber der angegebene Wert hat Typ »%s«" @@ -17880,65 +17833,67 @@ msgstr "konnte Semaphore nicht entsperren: Fehlercode %lu" msgid "could not try-lock semaphore: error code %lu" msgstr "konnte Semaphore nicht versuchsweise sperren: Fehlercode %lu" -#: port/win32_shmem.c:144 port/win32_shmem.c:155 port/win32_shmem.c:167 -#: port/win32_shmem.c:183 +#: port/win32_shmem.c:144 port/win32_shmem.c:159 port/win32_shmem.c:171 +#: port/win32_shmem.c:187 #, c-format msgid "could not enable user right \"%s\": error code %lu" msgstr "konnte Benutzerrecht »%s« nicht aktivieren: Fehlercode %lu" -#. translator: This is a term from Windows and should be translated to match the Windows localization. -#: port/win32_shmem.c:146 port/win32_shmem.c:155 port/win32_shmem.c:167 -#: port/win32_shmem.c:178 port/win32_shmem.c:180 port/win32_shmem.c:183 +#. translator: This is a term from Windows and should be translated to +#. match the Windows localization. +#. +#: port/win32_shmem.c:150 port/win32_shmem.c:159 port/win32_shmem.c:171 +#: port/win32_shmem.c:182 port/win32_shmem.c:184 port/win32_shmem.c:187 msgid "Lock pages in memory" msgstr "Sperren von Seiten im Speicher" -#: port/win32_shmem.c:148 port/win32_shmem.c:156 port/win32_shmem.c:168 -#: port/win32_shmem.c:184 +#: port/win32_shmem.c:152 port/win32_shmem.c:160 port/win32_shmem.c:172 +#: port/win32_shmem.c:188 #, c-format msgid "Failed system call was %s." msgstr "Fehlgeschlagener Systemaufruf war %s." -#: port/win32_shmem.c:178 +#: port/win32_shmem.c:182 #, c-format msgid "could not enable user right \"%s\"" msgstr "konnte Benutzerrecht »%s« nicht aktivieren" -#: port/win32_shmem.c:179 +#: port/win32_shmem.c:183 #, c-format msgid "Assign user right \"%s\" to the Windows user account which runs PostgreSQL." msgstr "Weisen Sie dem Windows-Benutzerkonto, unter dem PostgreSQL läuft, das Benutzerrecht »%s« zu." -#: port/win32_shmem.c:237 +#: port/win32_shmem.c:241 #, c-format msgid "the processor does not support large pages" msgstr "der Prozessor unterstützt keine Large Pages" -#: port/win32_shmem.c:306 port/win32_shmem.c:342 port/win32_shmem.c:360 +#: port/win32_shmem.c:310 port/win32_shmem.c:346 port/win32_shmem.c:364 #, c-format msgid "could not create shared memory segment: error code %lu" msgstr "konnte Shared-Memory-Segment nicht erzeugen: Fehlercode %lu" -#: port/win32_shmem.c:307 +#: port/win32_shmem.c:311 #, c-format msgid "Failed system call was CreateFileMapping(size=%zu, name=%s)." msgstr "Fehlgeschlagener Systemaufruf war CreateFileMapping(Größe=%zu, Name=%s)." -#: port/win32_shmem.c:332 +#: port/win32_shmem.c:336 #, c-format msgid "pre-existing shared memory block is still in use" msgstr "bereits bestehender Shared-Memory-Block wird noch benutzt" -#: port/win32_shmem.c:333 +#: port/win32_shmem.c:337 #, c-format msgid "Check if there are any old server processes still running, and terminate them." msgstr "Prüfen Sie, ob irgendwelche alten Serverprozesse noch laufen und beenden Sie diese." -#: port/win32_shmem.c:343 +#: port/win32_shmem.c:347 #, c-format msgid "Failed system call was DuplicateHandle." msgstr "Fehlgeschlagener Systemaufruf war DuplicateHandle." -#: port/win32_shmem.c:361 +#: port/win32_shmem.c:365 #, c-format msgid "Failed system call was MapViewOfFileEx." msgstr "Fehlgeschlagener Systemaufruf war MapViewOfFileEx." @@ -18098,7 +18053,7 @@ msgstr "Der fehlgeschlagene Archivbefehl war: %s" msgid "archive command was terminated by exception 0x%X" msgstr "Archivbefehl wurde durch Ausnahme 0x%X beendet" -#: postmaster/pgarch.c:552 postmaster/postmaster.c:3721 +#: postmaster/pgarch.c:552 postmaster/postmaster.c:3722 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "Sehen Sie die Beschreibung des Hexadezimalwerts in der C-Include-Datei »ntstatus.h« nach." @@ -18113,282 +18068,281 @@ msgstr "Archivbefehl wurde von Signal %d beendet: %s" msgid "archive command exited with unrecognized status %d" msgstr "Archivbefehl hat mit unbekanntem Status %d beendet" -#: postmaster/pgstat.c:420 +#: postmaster/pgstat.c:417 #, c-format msgid "could not resolve \"localhost\": %s" msgstr "konnte »localhost« nicht auflösen: %s" -#: postmaster/pgstat.c:443 +#: postmaster/pgstat.c:440 #, c-format msgid "trying another address for the statistics collector" msgstr "andere Adresse für Statistiksammelprozess wird versucht" -#: postmaster/pgstat.c:452 +#: postmaster/pgstat.c:449 #, c-format msgid "could not create socket for statistics collector: %m" msgstr "konnte Socket für Statistiksammelprozess nicht erzeugen: %m" -#: postmaster/pgstat.c:464 +#: postmaster/pgstat.c:461 #, c-format msgid "could not bind socket for statistics collector: %m" msgstr "konnte Socket für Statistiksammelprozess nicht binden: %m" -#: postmaster/pgstat.c:475 +#: postmaster/pgstat.c:472 #, c-format msgid "could not get address of socket for statistics collector: %m" msgstr "konnte Adresse für Socket für Statistiksammelprozess nicht ermitteln: %m" -#: postmaster/pgstat.c:491 +#: postmaster/pgstat.c:488 #, c-format msgid "could not connect socket for statistics collector: %m" msgstr "konnte nicht mit Socket für Statistiksammelprozess verbinden: %m" -#: postmaster/pgstat.c:512 +#: postmaster/pgstat.c:509 #, c-format msgid "could not send test message on socket for statistics collector: %m" msgstr "konnte Testnachricht auf Socket für Statistiksammelprozess nicht senden: %m" -#: postmaster/pgstat.c:538 +#: postmaster/pgstat.c:535 #, c-format msgid "select() failed in statistics collector: %m" msgstr "select() im Statistiksammelprozess fehlgeschlagen: %m" -#: postmaster/pgstat.c:553 +#: postmaster/pgstat.c:550 #, c-format msgid "test message did not get through on socket for statistics collector" msgstr "Testnachricht auf Socket für Statistiksammelprozess kam nicht durch" -#: postmaster/pgstat.c:568 +#: postmaster/pgstat.c:565 #, c-format msgid "could not receive test message on socket for statistics collector: %m" msgstr "konnte Testnachricht auf Socket für Statistiksammelprozess nicht empfangen: %m" -#: postmaster/pgstat.c:578 +#: postmaster/pgstat.c:575 #, c-format msgid "incorrect test message transmission on socket for statistics collector" msgstr "fehlerhafte Übertragung der Testnachricht auf Socket für Statistiksammelprozess" -#: postmaster/pgstat.c:601 +#: postmaster/pgstat.c:598 #, c-format msgid "could not set statistics collector socket to nonblocking mode: %m" msgstr "konnte Socket von Statistiksammelprozess nicht auf nicht blockierenden Modus setzen: %m" -#: postmaster/pgstat.c:645 +#: postmaster/pgstat.c:642 #, c-format msgid "disabling statistics collector for lack of working socket" msgstr "Statistiksammelprozess abgeschaltet wegen nicht funkionierender Socket" -#: postmaster/pgstat.c:792 +#: postmaster/pgstat.c:789 #, c-format msgid "could not fork statistics collector: %m" msgstr "konnte Statistiksammelprozess nicht starten (fork-Fehler): %m" -#: postmaster/pgstat.c:1461 +#: postmaster/pgstat.c:1449 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "unbekanntes Reset-Ziel: »%s«" -#: postmaster/pgstat.c:1462 +#: postmaster/pgstat.c:1450 #, fuzzy, c-format #| msgid "Target must be \"archiver\" or \"bgwriter\"." -msgid "Target must be \"archiver\", \"bgwriter\", \"wal\" or \"prefetch_recovery\"." +msgid "Target must be \"archiver\", \"bgwriter\" or \"wal\"." msgstr "Das Reset-Ziel muss »archiver« oder »bgwriter« sein." -#: postmaster/pgstat.c:3330 +#: postmaster/pgstat.c:3285 #, c-format msgid "could not read statistics message: %m" msgstr "konnte Statistiknachricht nicht lesen: %m" -#: postmaster/pgstat.c:3680 postmaster/pgstat.c:3872 +#: postmaster/pgstat.c:3631 postmaster/pgstat.c:3816 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "konnte temporäre Statistikdatei »%s« nicht öffnen: %m" -#: postmaster/pgstat.c:3782 postmaster/pgstat.c:3917 +#: postmaster/pgstat.c:3726 postmaster/pgstat.c:3861 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "konnte temporäre Statistikdatei »%s« nicht schreiben: %m" -#: postmaster/pgstat.c:3791 postmaster/pgstat.c:3926 +#: postmaster/pgstat.c:3735 postmaster/pgstat.c:3870 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "konnte temporäre Statistikdatei »%s« nicht schließen: %m" -#: postmaster/pgstat.c:3799 postmaster/pgstat.c:3934 +#: postmaster/pgstat.c:3743 postmaster/pgstat.c:3878 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "konnte temporäre Statistikdatei »%s« nicht in »%s« umbenennen: %m" -#: postmaster/pgstat.c:4033 postmaster/pgstat.c:4311 postmaster/pgstat.c:4469 +#: postmaster/pgstat.c:3976 postmaster/pgstat.c:4242 postmaster/pgstat.c:4399 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "konnte Statistikdatei »%s« nicht öffnen: %m" -#: postmaster/pgstat.c:4045 postmaster/pgstat.c:4055 postmaster/pgstat.c:4076 -#: postmaster/pgstat.c:4087 postmaster/pgstat.c:4098 postmaster/pgstat.c:4110 -#: postmaster/pgstat.c:4132 postmaster/pgstat.c:4147 postmaster/pgstat.c:4217 -#: postmaster/pgstat.c:4248 postmaster/pgstat.c:4323 postmaster/pgstat.c:4343 -#: postmaster/pgstat.c:4361 postmaster/pgstat.c:4377 postmaster/pgstat.c:4395 -#: postmaster/pgstat.c:4411 postmaster/pgstat.c:4481 postmaster/pgstat.c:4493 -#: postmaster/pgstat.c:4505 postmaster/pgstat.c:4516 postmaster/pgstat.c:4527 -#: postmaster/pgstat.c:4539 postmaster/pgstat.c:4564 postmaster/pgstat.c:4591 -#: postmaster/pgstat.c:4604 +#: postmaster/pgstat.c:3988 postmaster/pgstat.c:3998 postmaster/pgstat.c:4019 +#: postmaster/pgstat.c:4030 postmaster/pgstat.c:4041 postmaster/pgstat.c:4063 +#: postmaster/pgstat.c:4078 postmaster/pgstat.c:4148 postmaster/pgstat.c:4179 +#: postmaster/pgstat.c:4254 postmaster/pgstat.c:4274 postmaster/pgstat.c:4292 +#: postmaster/pgstat.c:4308 postmaster/pgstat.c:4326 postmaster/pgstat.c:4342 +#: postmaster/pgstat.c:4411 postmaster/pgstat.c:4423 postmaster/pgstat.c:4435 +#: postmaster/pgstat.c:4446 postmaster/pgstat.c:4457 postmaster/pgstat.c:4482 +#: postmaster/pgstat.c:4509 postmaster/pgstat.c:4522 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "verfälschte Statistikdatei »%s«" -#: postmaster/pgstat.c:4713 +#: postmaster/pgstat.c:4631 #, c-format msgid "statistics collector's time %s is later than backend local time %s" msgstr "" -#: postmaster/pgstat.c:4743 +#: postmaster/pgstat.c:4654 #, c-format msgid "using stale statistics instead of current ones because stats collector is not responding" msgstr "verwende veraltete Statistiken anstatt aktueller, weil der Statistiksammelprozess nicht antwortet" -#: postmaster/pgstat.c:4870 +#: postmaster/pgstat.c:4781 #, c-format msgid "stats_timestamp %s is later than collector's time %s for database %u" msgstr "" -#: postmaster/pgstat.c:5080 +#: postmaster/pgstat.c:4991 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "Datenbank-Hash-Tabelle beim Aufräumen verfälscht --- Abbruch" -#: postmaster/postmaster.c:742 +#: postmaster/postmaster.c:743 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: ungültiges Argument für Option -f: »%s«\n" -#: postmaster/postmaster.c:821 +#: postmaster/postmaster.c:822 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: ungültiges Argument für Option -t: »%s«\n" -#: postmaster/postmaster.c:872 +#: postmaster/postmaster.c:873 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: ungültiges Argument: »%s«\n" -#: postmaster/postmaster.c:914 +#: postmaster/postmaster.c:915 #, c-format msgid "%s: superuser_reserved_connections (%d) must be less than max_connections (%d)\n" msgstr "%s: superuser_reserved_connections (%d) muss kleiner als max_connections (%d) sein\n" -#: postmaster/postmaster.c:921 +#: postmaster/postmaster.c:922 #, c-format msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" msgstr "WAL-Archivierung kann nicht eingeschaltet werden, wenn wal_level »minimal« ist" -#: postmaster/postmaster.c:924 +#: postmaster/postmaster.c:925 #, c-format msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" msgstr "WAL-Streaming (max_wal_senders > 0) benötigt wal_level »replica« oder »logical«" -#: postmaster/postmaster.c:932 +#: postmaster/postmaster.c:933 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: ungültige datetoken-Tabellen, bitte reparieren\n" -#: postmaster/postmaster.c:1049 +#: postmaster/postmaster.c:1050 #, c-format msgid "could not create I/O completion port for child queue" msgstr "konnte Ein-/Ausgabe-Completion-Port für Child-Queue nicht erzeugen" -#: postmaster/postmaster.c:1114 +#: postmaster/postmaster.c:1115 #, c-format msgid "ending log output to stderr" msgstr "Logausgabe nach stderr endet" -#: postmaster/postmaster.c:1115 +#: postmaster/postmaster.c:1116 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "Die weitere Logausgabe geht an Logziel »%s«." -#: postmaster/postmaster.c:1126 +#: postmaster/postmaster.c:1127 #, c-format msgid "starting %s" msgstr "%s startet" -#: postmaster/postmaster.c:1155 postmaster/postmaster.c:1254 +#: postmaster/postmaster.c:1156 postmaster/postmaster.c:1255 #: utils/init/miscinit.c:1627 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "ungültige Listensyntax für Parameter »%s«" -#: postmaster/postmaster.c:1186 +#: postmaster/postmaster.c:1187 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "konnte Listen-Socket für »%s« nicht erzeugen" -#: postmaster/postmaster.c:1192 +#: postmaster/postmaster.c:1193 #, c-format msgid "could not create any TCP/IP sockets" msgstr "konnte keine TCP/IP-Sockets erstellen" -#: postmaster/postmaster.c:1224 +#: postmaster/postmaster.c:1225 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "DNSServiceRegister() fehlgeschlagen: Fehlercode %ld" -#: postmaster/postmaster.c:1276 +#: postmaster/postmaster.c:1277 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "konnte Unix-Domain-Socket in Verzeichnis »%s« nicht erzeugen" -#: postmaster/postmaster.c:1282 +#: postmaster/postmaster.c:1283 #, c-format msgid "could not create any Unix-domain sockets" msgstr "konnte keine Unix-Domain-Sockets erzeugen" -#: postmaster/postmaster.c:1294 +#: postmaster/postmaster.c:1295 #, c-format msgid "no socket created for listening" msgstr "keine Listen-Socket erzeugt" -#: postmaster/postmaster.c:1325 +#: postmaster/postmaster.c:1326 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: konnte Rechte der externen PID-Datei »%s« nicht ändern: %s\n" -#: postmaster/postmaster.c:1329 +#: postmaster/postmaster.c:1330 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: konnte externe PID-Datei »%s« nicht schreiben: %s\n" -#: postmaster/postmaster.c:1362 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1363 utils/init/postinit.c:216 #, c-format msgid "could not load pg_hba.conf" msgstr "konnte pg_hba.conf nicht laden" -#: postmaster/postmaster.c:1388 +#: postmaster/postmaster.c:1389 #, c-format msgid "postmaster became multithreaded during startup" msgstr "Postmaster ist während des Starts multithreaded geworden" -#: postmaster/postmaster.c:1389 +#: postmaster/postmaster.c:1390 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Setzen Sie die Umgebungsvariable LC_ALL auf eine gültige Locale." -#: postmaster/postmaster.c:1484 +#: postmaster/postmaster.c:1485 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: konnte Pfad des eigenen Programs nicht finden" -#: postmaster/postmaster.c:1491 +#: postmaster/postmaster.c:1492 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: konnte kein passendes Programm »postgres« finden" -#: postmaster/postmaster.c:1514 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1515 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Dies kann auf eine unvollständige PostgreSQL-Installation hindeuten, oder darauf, dass die Datei »%s« von ihrer richtigen Stelle verschoben worden ist." -#: postmaster/postmaster.c:1541 +#: postmaster/postmaster.c:1542 #, c-format msgid "" "%s: could not find the database system\n" @@ -18399,510 +18353,510 @@ msgstr "" "Es wurde im Verzeichnis »%s« erwartet,\n" "aber die Datei »%s« konnte nicht geöffnet werden: %s\n" -#: postmaster/postmaster.c:1718 +#: postmaster/postmaster.c:1719 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() fehlgeschlagen im Postmaster: %m" -#: postmaster/postmaster.c:1854 +#: postmaster/postmaster.c:1855 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "" -#: postmaster/postmaster.c:1875 +#: postmaster/postmaster.c:1876 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "führe sofortiges Herunterfahren durch, weil Sperrdatei im Datenverzeichnis ungültig ist" -#: postmaster/postmaster.c:1978 postmaster/postmaster.c:2006 +#: postmaster/postmaster.c:1979 postmaster/postmaster.c:2007 #, c-format msgid "incomplete startup packet" msgstr "unvollständiges Startpaket" -#: postmaster/postmaster.c:1990 +#: postmaster/postmaster.c:1991 #, c-format msgid "invalid length of startup packet" msgstr "ungültige Länge des Startpakets" -#: postmaster/postmaster.c:2045 +#: postmaster/postmaster.c:2046 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "konnte SSL-Verhandlungsantwort nicht senden: %m" -#: postmaster/postmaster.c:2077 +#: postmaster/postmaster.c:2078 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "konnte GSSAPI-Verhandlungsantwort nicht senden: %m" -#: postmaster/postmaster.c:2107 +#: postmaster/postmaster.c:2108 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "nicht unterstütztes Frontend-Protokoll %u.%u: Server unterstützt %u.0 bis %u.%u" -#: postmaster/postmaster.c:2171 utils/misc/guc.c:7145 utils/misc/guc.c:7181 -#: utils/misc/guc.c:7251 utils/misc/guc.c:8583 utils/misc/guc.c:11539 -#: utils/misc/guc.c:11580 +#: postmaster/postmaster.c:2172 utils/misc/guc.c:7093 utils/misc/guc.c:7129 +#: utils/misc/guc.c:7199 utils/misc/guc.c:8531 utils/misc/guc.c:11487 +#: utils/misc/guc.c:11528 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "ungültiger Wert für Parameter »%s«: »%s«" -#: postmaster/postmaster.c:2174 +#: postmaster/postmaster.c:2175 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Gültige Werte sind: »false«, 0, »true«, 1, »database«." -#: postmaster/postmaster.c:2219 +#: postmaster/postmaster.c:2220 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "ungültiges Layout des Startpakets: Abschluss als letztes Byte erwartet" -#: postmaster/postmaster.c:2236 +#: postmaster/postmaster.c:2237 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "kein PostgreSQL-Benutzername im Startpaket angegeben" -#: postmaster/postmaster.c:2300 +#: postmaster/postmaster.c:2301 #, c-format msgid "the database system is starting up" msgstr "das Datenbanksystem startet" -#: postmaster/postmaster.c:2306 +#: postmaster/postmaster.c:2307 #, fuzzy, c-format #| msgid "database system is ready to accept connections" msgid "the database system is not yet accepting connections" msgstr "Datenbanksystem ist bereit, um Verbindungen anzunehmen" -#: postmaster/postmaster.c:2307 +#: postmaster/postmaster.c:2308 #, fuzzy, c-format #| msgid "consistent recovery state reached at %X/%X" msgid "Consistent recovery state has not been yet reached." msgstr "konsistenter Wiederherstellungszustand erreicht bei %X/%X" -#: postmaster/postmaster.c:2311 +#: postmaster/postmaster.c:2312 #, fuzzy, c-format #| msgid "database system is ready to accept connections" msgid "the database system is not accepting connections" msgstr "Datenbanksystem ist bereit, um Verbindungen anzunehmen" -#: postmaster/postmaster.c:2312 +#: postmaster/postmaster.c:2313 #, c-format msgid "Hot standby mode is disabled." msgstr "Hot-Standby-Modus ist deaktiviert." -#: postmaster/postmaster.c:2317 +#: postmaster/postmaster.c:2318 #, c-format msgid "the database system is shutting down" msgstr "das Datenbanksystem fährt herunter" -#: postmaster/postmaster.c:2322 +#: postmaster/postmaster.c:2323 #, c-format msgid "the database system is in recovery mode" msgstr "das Datenbanksystem ist im Wiederherstellungsmodus" -#: postmaster/postmaster.c:2327 storage/ipc/procarray.c:463 +#: postmaster/postmaster.c:2328 storage/ipc/procarray.c:463 #: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "tut mir leid, schon zu viele Verbindungen" -#: postmaster/postmaster.c:2417 +#: postmaster/postmaster.c:2418 #, c-format msgid "wrong key in cancel request for process %d" msgstr "falscher Schlüssel in Stornierungsanfrage für Prozess %d" -#: postmaster/postmaster.c:2429 +#: postmaster/postmaster.c:2430 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "PID %d in Stornierungsanfrage stimmte mit keinem Prozess überein" -#: postmaster/postmaster.c:2683 +#: postmaster/postmaster.c:2684 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "SIGHUP empfangen, Konfigurationsdateien werden neu geladen" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2709 postmaster/postmaster.c:2713 +#: postmaster/postmaster.c:2710 postmaster/postmaster.c:2714 #, c-format msgid "%s was not reloaded" msgstr "%s wurde nicht neu geladen" -#: postmaster/postmaster.c:2723 +#: postmaster/postmaster.c:2724 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL-Konfiguration wurde nicht neu geladen" -#: postmaster/postmaster.c:2779 +#: postmaster/postmaster.c:2780 #, c-format msgid "received smart shutdown request" msgstr "intelligentes Herunterfahren verlangt" -#: postmaster/postmaster.c:2825 +#: postmaster/postmaster.c:2826 #, c-format msgid "received fast shutdown request" msgstr "schnelles Herunterfahren verlangt" -#: postmaster/postmaster.c:2843 +#: postmaster/postmaster.c:2844 #, c-format msgid "aborting any active transactions" msgstr "etwaige aktive Transaktionen werden abgebrochen" -#: postmaster/postmaster.c:2867 +#: postmaster/postmaster.c:2868 #, c-format msgid "received immediate shutdown request" msgstr "sofortiges Herunterfahren verlangt" -#: postmaster/postmaster.c:2944 +#: postmaster/postmaster.c:2945 #, c-format msgid "shutdown at recovery target" msgstr "Herunterfahren beim Wiederherstellungsziel" -#: postmaster/postmaster.c:2962 postmaster/postmaster.c:2998 +#: postmaster/postmaster.c:2963 postmaster/postmaster.c:2999 msgid "startup process" msgstr "Startprozess" -#: postmaster/postmaster.c:2965 +#: postmaster/postmaster.c:2966 #, c-format msgid "aborting startup due to startup process failure" msgstr "Serverstart abgebrochen wegen Startprozessfehler" -#: postmaster/postmaster.c:3040 +#: postmaster/postmaster.c:3041 #, c-format msgid "database system is ready to accept connections" msgstr "Datenbanksystem ist bereit, um Verbindungen anzunehmen" -#: postmaster/postmaster.c:3061 +#: postmaster/postmaster.c:3062 msgid "background writer process" msgstr "Background-Writer-Prozess" -#: postmaster/postmaster.c:3115 +#: postmaster/postmaster.c:3116 msgid "checkpointer process" msgstr "Checkpointer-Prozess" -#: postmaster/postmaster.c:3131 +#: postmaster/postmaster.c:3132 msgid "WAL writer process" msgstr "WAL-Schreibprozess" -#: postmaster/postmaster.c:3146 +#: postmaster/postmaster.c:3147 msgid "WAL receiver process" msgstr "WAL-Receiver-Prozess" -#: postmaster/postmaster.c:3161 +#: postmaster/postmaster.c:3162 msgid "autovacuum launcher process" msgstr "Autovacuum-Launcher-Prozess" -#: postmaster/postmaster.c:3179 +#: postmaster/postmaster.c:3180 msgid "archiver process" msgstr "Archivierprozess" -#: postmaster/postmaster.c:3194 +#: postmaster/postmaster.c:3195 msgid "statistics collector process" msgstr "Statistiksammelprozess" -#: postmaster/postmaster.c:3208 +#: postmaster/postmaster.c:3209 msgid "system logger process" msgstr "Systemlogger-Prozess" -#: postmaster/postmaster.c:3272 +#: postmaster/postmaster.c:3273 #, c-format msgid "background worker \"%s\"" msgstr "Background-Worker »%s«" -#: postmaster/postmaster.c:3356 postmaster/postmaster.c:3376 -#: postmaster/postmaster.c:3383 postmaster/postmaster.c:3401 +#: postmaster/postmaster.c:3357 postmaster/postmaster.c:3377 +#: postmaster/postmaster.c:3384 postmaster/postmaster.c:3402 msgid "server process" msgstr "Serverprozess" -#: postmaster/postmaster.c:3455 +#: postmaster/postmaster.c:3456 #, c-format msgid "terminating any other active server processes" msgstr "aktive Serverprozesse werden abgebrochen" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3708 +#: postmaster/postmaster.c:3709 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) beendete mit Status %d" -#: postmaster/postmaster.c:3710 postmaster/postmaster.c:3722 -#: postmaster/postmaster.c:3732 postmaster/postmaster.c:3743 +#: postmaster/postmaster.c:3711 postmaster/postmaster.c:3723 +#: postmaster/postmaster.c:3733 postmaster/postmaster.c:3744 #, c-format msgid "Failed process was running: %s" msgstr "Der fehlgeschlagene Prozess führte aus: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3719 +#: postmaster/postmaster.c:3720 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) wurde durch Ausnahme 0x%X beendet" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3729 +#: postmaster/postmaster.c:3730 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) wurde von Signal %d beendet: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3741 +#: postmaster/postmaster.c:3742 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) beendete mit unbekanntem Status %d" -#: postmaster/postmaster.c:3956 +#: postmaster/postmaster.c:3957 #, c-format msgid "abnormal database system shutdown" msgstr "abnormales Herunterfahren des Datenbanksystems" -#: postmaster/postmaster.c:3996 +#: postmaster/postmaster.c:3997 #, c-format msgid "all server processes terminated; reinitializing" msgstr "alle Serverprozesse beendet; initialisiere neu" -#: postmaster/postmaster.c:4170 postmaster/postmaster.c:5530 -#: postmaster/postmaster.c:5921 +#: postmaster/postmaster.c:4171 postmaster/postmaster.c:5531 +#: postmaster/postmaster.c:5922 #, c-format msgid "could not generate random cancel key" msgstr "konnte zufälligen Stornierungsschlüssel nicht erzeugen" -#: postmaster/postmaster.c:4224 +#: postmaster/postmaster.c:4225 #, c-format msgid "could not fork new process for connection: %m" msgstr "konnte neuen Prozess für Verbindung nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:4266 +#: postmaster/postmaster.c:4267 msgid "could not fork new process for connection: " msgstr "konnte neuen Prozess für Verbindung nicht starten (fork-Fehler): " -#: postmaster/postmaster.c:4372 +#: postmaster/postmaster.c:4373 #, c-format msgid "connection received: host=%s port=%s" msgstr "Verbindung empfangen: Host=%s Port=%s" -#: postmaster/postmaster.c:4377 +#: postmaster/postmaster.c:4378 #, c-format msgid "connection received: host=%s" msgstr "Verbindung empfangen: Host=%s" -#: postmaster/postmaster.c:4620 +#: postmaster/postmaster.c:4621 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "konnte Serverprozess »%s« nicht ausführen: %m" -#: postmaster/postmaster.c:4678 +#: postmaster/postmaster.c:4679 #, fuzzy, c-format #| msgid "could not close handle to backend parameter variables: error code %lu\n" msgid "could not create backend parameter file mapping: error code %lu" msgstr "konnte Handle für Backend-Parametervariablen nicht schließen: Fehlercode %lu\n" -#: postmaster/postmaster.c:4687 +#: postmaster/postmaster.c:4688 #, fuzzy, c-format #| msgid "could not map view of backend variables: error code %lu\n" msgid "could not map backend parameter memory: error code %lu" msgstr "konnte Sicht der Backend-Variablen nicht mappen: Fehlercode %lu\n" -#: postmaster/postmaster.c:4714 +#: postmaster/postmaster.c:4715 #, fuzzy, c-format #| msgid "command too long\n" msgid "subprocess command line too long" msgstr "Befehl zu lang\n" -#: postmaster/postmaster.c:4732 +#: postmaster/postmaster.c:4733 #, fuzzy, c-format #| msgid "pgpipe: getsockname() failed: error code %d" msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "pgpipe: getsockname() fehlgeschlagen: Fehlercode %d" -#: postmaster/postmaster.c:4759 +#: postmaster/postmaster.c:4760 #, fuzzy, c-format #| msgid "could not unmap view of backend variables: error code %lu\n" msgid "could not unmap view of backend parameter file: error code %lu" msgstr "konnte Sicht der Backend-Variablen nicht unmappen: Fehlercode %lu\n" -#: postmaster/postmaster.c:4763 +#: postmaster/postmaster.c:4764 #, fuzzy, c-format #| msgid "could not close handle to backend parameter variables: error code %lu\n" msgid "could not close handle to backend parameter file: error code %lu" msgstr "konnte Handle für Backend-Parametervariablen nicht schließen: Fehlercode %lu\n" -#: postmaster/postmaster.c:4785 +#: postmaster/postmaster.c:4786 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "Aufgabe nach zu vielen Versuchen, Shared Memory zu reservieren" -#: postmaster/postmaster.c:4786 +#: postmaster/postmaster.c:4787 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Dies kann durch ASLR oder Antivirus-Software verursacht werden." -#: postmaster/postmaster.c:4976 +#: postmaster/postmaster.c:4977 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "SSL-Konfiguration konnte im Kindprozess nicht geladen werden" -#: postmaster/postmaster.c:5102 +#: postmaster/postmaster.c:5103 #, c-format msgid "Please report this to <%s>." msgstr "Bitte berichten Sie dies an <%s>." -#: postmaster/postmaster.c:5189 +#: postmaster/postmaster.c:5190 #, c-format msgid "database system is ready to accept read only connections" msgstr "Datenbanksystem ist bereit, um lesende Verbindungen anzunehmen" -#: postmaster/postmaster.c:5454 +#: postmaster/postmaster.c:5455 #, c-format msgid "could not fork startup process: %m" msgstr "konnte Startprozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5458 +#: postmaster/postmaster.c:5459 #, c-format msgid "could not fork archiver process: %m" msgstr "konnte Archivierer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5462 +#: postmaster/postmaster.c:5463 #, c-format msgid "could not fork background writer process: %m" msgstr "konnte Background-Writer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5466 +#: postmaster/postmaster.c:5467 #, c-format msgid "could not fork checkpointer process: %m" msgstr "konnte Checkpointer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5470 +#: postmaster/postmaster.c:5471 #, c-format msgid "could not fork WAL writer process: %m" msgstr "konnte WAL-Writer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5474 +#: postmaster/postmaster.c:5475 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "konnte WAL-Receiver-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5478 +#: postmaster/postmaster.c:5479 #, c-format msgid "could not fork process: %m" msgstr "konnte Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5679 postmaster/postmaster.c:5702 +#: postmaster/postmaster.c:5680 postmaster/postmaster.c:5703 #, c-format msgid "database connection requirement not indicated during registration" msgstr "die Notwendigkeit, Datenbankverbindungen zu erzeugen, wurde bei der Registrierung nicht angezeigt" -#: postmaster/postmaster.c:5686 postmaster/postmaster.c:5709 +#: postmaster/postmaster.c:5687 postmaster/postmaster.c:5710 #, c-format msgid "invalid processing mode in background worker" msgstr "ungültiger Verarbeitungsmodus in Background-Worker" -#: postmaster/postmaster.c:5794 +#: postmaster/postmaster.c:5795 #, c-format msgid "could not fork worker process: %m" msgstr "konnte Worker-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5907 +#: postmaster/postmaster.c:5908 #, c-format msgid "no slot available for new worker process" msgstr "kein Slot für neuen Worker-Prozess verfügbar" -#: postmaster/postmaster.c:6240 +#: postmaster/postmaster.c:6241 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "konnte Socket %d nicht für Verwendung in Backend duplizieren: Fehlercode %d" -#: postmaster/postmaster.c:6272 +#: postmaster/postmaster.c:6273 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "konnte geerbtes Socket nicht erzeugen: Fehlercode %d\n" -#: postmaster/postmaster.c:6301 +#: postmaster/postmaster.c:6302 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "konnte Servervariablendatei »%s« nicht öffnen: %s\n" -#: postmaster/postmaster.c:6308 +#: postmaster/postmaster.c:6309 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "konnte nicht aus Servervariablendatei »%s« lesen: %s\n" -#: postmaster/postmaster.c:6317 +#: postmaster/postmaster.c:6318 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "konnte Datei »%s« nicht löschen: %s\n" -#: postmaster/postmaster.c:6334 +#: postmaster/postmaster.c:6335 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "konnte Sicht der Backend-Variablen nicht mappen: Fehlercode %lu\n" -#: postmaster/postmaster.c:6343 +#: postmaster/postmaster.c:6344 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "konnte Sicht der Backend-Variablen nicht unmappen: Fehlercode %lu\n" -#: postmaster/postmaster.c:6350 +#: postmaster/postmaster.c:6351 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "konnte Handle für Backend-Parametervariablen nicht schließen: Fehlercode %lu\n" -#: postmaster/postmaster.c:6526 +#: postmaster/postmaster.c:6527 #, c-format msgid "could not read exit code for process\n" msgstr "konnte Exitcode des Prozesses nicht lesen\n" -#: postmaster/postmaster.c:6531 +#: postmaster/postmaster.c:6532 #, c-format msgid "could not post child completion status\n" msgstr "konnte Child-Completion-Status nicht versenden\n" -#: postmaster/syslogger.c:473 postmaster/syslogger.c:1152 +#: postmaster/syslogger.c:474 postmaster/syslogger.c:1153 #, c-format msgid "could not read from logger pipe: %m" msgstr "konnte nicht aus Logger-Pipe lesen: %m" -#: postmaster/syslogger.c:570 postmaster/syslogger.c:584 +#: postmaster/syslogger.c:571 postmaster/syslogger.c:585 #, c-format msgid "could not create pipe for syslog: %m" msgstr "konnte Pipe für Syslog nicht erzeugen: %m" -#: postmaster/syslogger.c:635 +#: postmaster/syslogger.c:636 #, c-format msgid "could not fork system logger: %m" msgstr "konnte Systemlogger nicht starten (fork-Fehler): %m" -#: postmaster/syslogger.c:671 +#: postmaster/syslogger.c:672 #, c-format msgid "redirecting log output to logging collector process" msgstr "Logausgabe wird an Logsammelprozess umgeleitet" -#: postmaster/syslogger.c:672 +#: postmaster/syslogger.c:673 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "Die weitere Logausgabe wird im Verzeichnis »%s« erscheinen." -#: postmaster/syslogger.c:680 +#: postmaster/syslogger.c:681 #, c-format msgid "could not redirect stdout: %m" msgstr "konnte Standardausgabe nicht umleiten: %m" -#: postmaster/syslogger.c:685 postmaster/syslogger.c:702 +#: postmaster/syslogger.c:686 postmaster/syslogger.c:703 #, c-format msgid "could not redirect stderr: %m" msgstr "konnte Standardfehlerausgabe nicht umleiten: %m" -#: postmaster/syslogger.c:1107 +#: postmaster/syslogger.c:1108 #, c-format msgid "could not write to log file: %s\n" msgstr "konnte nicht in Logdatei schreiben: %s\n" -#: postmaster/syslogger.c:1224 +#: postmaster/syslogger.c:1225 #, c-format msgid "could not open log file \"%s\": %m" msgstr "konnte Logdatei »%s« nicht öffnen: %m" -#: postmaster/syslogger.c:1286 postmaster/syslogger.c:1336 +#: postmaster/syslogger.c:1287 postmaster/syslogger.c:1337 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "automatische Rotation abgeschaltet (SIGHUP zum Wiederanschalten verwenden)" @@ -19175,37 +19129,37 @@ msgstr "leere Anfrage" msgid "unexpected pipeline mode" msgstr "unerwartetes Trennzeichen" -#: replication/logical/launcher.c:292 +#: replication/logical/launcher.c:286 #, c-format msgid "cannot start logical replication workers when max_replication_slots = 0" msgstr "Arbeitsprozesse für logische Replikation können nicht gestartet werden, wenn max_replication_slots = 0" -#: replication/logical/launcher.c:372 +#: replication/logical/launcher.c:366 #, c-format msgid "out of logical replication worker slots" msgstr "alle Slots für Arbeitsprozesse für logische Replikation belegt" -#: replication/logical/launcher.c:373 +#: replication/logical/launcher.c:367 #, c-format msgid "You might need to increase max_logical_replication_workers." msgstr "Sie müssen möglicherweise max_logical_replication_workers erhöhen." -#: replication/logical/launcher.c:428 +#: replication/logical/launcher.c:422 #, c-format msgid "out of background worker slots" msgstr "alle Slots für Background-Worker belegt" -#: replication/logical/launcher.c:429 +#: replication/logical/launcher.c:423 #, c-format msgid "You might need to increase max_worker_processes." msgstr "Sie müssen möglicherweise max_worker_processes erhöhen." -#: replication/logical/launcher.c:583 +#: replication/logical/launcher.c:577 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "Arbeitsprozess-Slot %d für logische Replikation ist leer, kann nicht zugeteilt werden" -#: replication/logical/launcher.c:592 +#: replication/logical/launcher.c:586 #, c-format msgid "logical replication worker slot %d is already used by another worker, cannot attach" msgstr "Arbeitsprozess-Slot %d für logische Replikation wird schon von einem anderen Arbeitsprozess verwendet, kann nicht zugeteilt werden" @@ -19225,90 +19179,90 @@ msgstr "logische Dekodierung benötigt eine Datenbankverbindung" msgid "logical decoding cannot be used while in recovery" msgstr "logische Dekodierung kann nicht während der Wiederherstellung verwendet werden" -#: replication/logical/logical.c:350 replication/logical/logical.c:503 +#: replication/logical/logical.c:347 replication/logical/logical.c:499 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "physischer Replikations-Slot kann nicht für logisches Dekodieren verwendet werden" -#: replication/logical/logical.c:355 replication/logical/logical.c:508 +#: replication/logical/logical.c:352 replication/logical/logical.c:504 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "Replikations-Slot »%s« wurde nicht in dieser Datenbank erzeugt" -#: replication/logical/logical.c:362 +#: replication/logical/logical.c:359 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "logischer Replikations-Slot kann nicht in einer Transaktion erzeugt werden, die Schreibvorgänge ausgeführt hat" -#: replication/logical/logical.c:553 +#: replication/logical/logical.c:549 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "starte logisches Dekodieren für Slot »%s«" -#: replication/logical/logical.c:555 +#: replication/logical/logical.c:551 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "Streaming beginnt bei Transaktionen, die nach %X/%X committen; lese WAL ab %X/%X." -#: replication/logical/logical.c:706 +#: replication/logical/logical.c:696 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "Slot »%s«, Ausgabe-Plugin »%s«, im Callback %s, zugehörige LSN %X/%X" -#: replication/logical/logical.c:712 +#: replication/logical/logical.c:702 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "Slot »%s«, Ausgabe-Plugin »%s«, im Callback %s" -#: replication/logical/logical.c:878 +#: replication/logical/logical.c:868 #, c-format msgid "logical replication at prepare time requires begin_prepare_cb callback" msgstr "" -#: replication/logical/logical.c:921 +#: replication/logical/logical.c:911 #, c-format msgid "logical replication at prepare time requires prepare_cb callback" msgstr "" -#: replication/logical/logical.c:964 +#: replication/logical/logical.c:954 #, c-format msgid "logical replication at prepare time requires commit_prepared_cb callback" msgstr "" -#: replication/logical/logical.c:1008 +#: replication/logical/logical.c:998 #, c-format msgid "logical replication at prepare time requires rollback_prepared_cb callback" msgstr "" -#: replication/logical/logical.c:1230 +#: replication/logical/logical.c:1220 #, fuzzy, c-format #| msgid "logical decoding requires a database connection" msgid "logical streaming requires a stream_start_cb callback" msgstr "logische Dekodierung benötigt eine Datenbankverbindung" -#: replication/logical/logical.c:1276 +#: replication/logical/logical.c:1266 #, fuzzy, c-format #| msgid "logical decoding requires a database connection" msgid "logical streaming requires a stream_stop_cb callback" msgstr "logische Dekodierung benötigt eine Datenbankverbindung" -#: replication/logical/logical.c:1315 +#: replication/logical/logical.c:1305 #, fuzzy, c-format #| msgid "logical decoding requires a database connection" msgid "logical streaming requires a stream_abort_cb callback" msgstr "logische Dekodierung benötigt eine Datenbankverbindung" -#: replication/logical/logical.c:1358 +#: replication/logical/logical.c:1348 #, c-format msgid "logical streaming at prepare time requires a stream_prepare_cb callback" msgstr "" -#: replication/logical/logical.c:1397 +#: replication/logical/logical.c:1387 #, c-format msgid "logical streaming requires a stream_commit_cb callback" msgstr "" -#: replication/logical/logical.c:1443 +#: replication/logical/logical.c:1433 #, fuzzy, c-format #| msgid "logical decoding requires a database connection" msgid "logical streaming requires a stream_change_cb callback" @@ -19345,18 +19299,18 @@ msgstr "Array darf keine NULL-Werte enthalten" msgid "array must have even number of elements" msgstr "Array muss eine gerade Anzahl Elemente haben" -#: replication/logical/logicalfuncs.c:250 +#: replication/logical/logicalfuncs.c:251 #, c-format msgid "can no longer get changes from replication slot \"%s\"" msgstr "aus Replikations-Slot »%s« können keine Änderungen mehr gelesen werden" -#: replication/logical/logicalfuncs.c:252 replication/slotfuncs.c:654 +#: replication/logical/logicalfuncs.c:253 replication/slotfuncs.c:650 #, fuzzy, c-format #| msgid "This slot has never previously reserved WAL, or has been invalidated." msgid "This slot has never previously reserved WAL, or it has been invalidated." msgstr "Diese Slot hat nie zuvor WAL reserviert oder er wurde ungültig gemacht." -#: replication/logical/logicalfuncs.c:264 +#: replication/logical/logicalfuncs.c:265 #, c-format msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" msgstr "Ausgabe-Plugin »%s« erzeugt binäre Ausgabe, aber Funktion »%s« erwartet Textdaten" @@ -19577,33 +19531,33 @@ msgstr "konnte Dateinamen »%s« nicht parsen" msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "Arbeitsprozess für logische Replikation für Tabellensynchronisation für Subskription »%s«, Tabelle »%s« hat abgeschlossen" -#: replication/logical/tablesync.c:722 replication/logical/tablesync.c:761 +#: replication/logical/tablesync.c:726 replication/logical/tablesync.c:767 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "konnte Tabelleninformationen für Tabelle »%s.%s« nicht vom Publikationsserver holen: %s" -#: replication/logical/tablesync.c:728 +#: replication/logical/tablesync.c:732 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "Tabelle »%s.%s« nicht auf dem Publikationsserver gefunden" -#: replication/logical/tablesync.c:848 +#: replication/logical/tablesync.c:854 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "konnte Kopieren des Anfangsinhalts für Tabelle »%s.%s« nicht starten: %s" -#: replication/logical/tablesync.c:1046 +#: replication/logical/tablesync.c:1053 #, fuzzy, c-format #| msgid "table copy could not start transaction on publisher" msgid "table copy could not start transaction on publisher: %s" msgstr "beim Kopieren der Tabelle konnte die Transaktion auf dem Publikationsserver nicht gestartet werden" -#: replication/logical/tablesync.c:1094 +#: replication/logical/tablesync.c:1101 #, c-format msgid "replication origin \"%s\" already exists" msgstr "Replication-Origin »%s« existiert bereits" -#: replication/logical/tablesync.c:1106 +#: replication/logical/tablesync.c:1113 #, fuzzy, c-format #| msgid "table copy could not finish transaction on publisher" msgid "table copy could not finish transaction on publisher: %s" @@ -19656,49 +19610,49 @@ msgstr "Datenstrom vom Publikationsserver endete" msgid "terminating logical replication worker due to timeout" msgstr "Arbeitsprozess für logische Replikation wird abgebrochen wegen Zeitüberschreitung" -#: replication/logical/worker.c:2442 +#: replication/logical/worker.c:2443 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was removed" msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird anhalten, weil die Subskription entfernt wurde" -#: replication/logical/worker.c:2456 +#: replication/logical/worker.c:2457 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird anhalten, weil die Subskription deaktiviert wurde" -#: replication/logical/worker.c:2478 +#: replication/logical/worker.c:2479 #, fuzzy, c-format #| msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" msgid "logical replication apply worker for subscription \"%s\" will restart because of a parameter change" msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird neu starten, weil die Subskription umbenannt wurde" -#: replication/logical/worker.c:2641 replication/logical/worker.c:2663 +#: replication/logical/worker.c:2642 replication/logical/worker.c:2664 #, fuzzy, c-format #| msgid "could not read from file \"%s\": %m" msgid "could not read from streaming transaction's subxact file \"%s\": %m" msgstr "konnte nicht aus Datei »%s« lesen: %m" -#: replication/logical/worker.c:3009 +#: replication/logical/worker.c:3010 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "Apply-Worker für logische Replikation für Subskription %u« wird nicht starten, weil die Subskription während des Starts deaktiviert wurde" -#: replication/logical/worker.c:3021 +#: replication/logical/worker.c:3022 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird nicht starten, weil die Subskription während des Starts deaktiviert wurde" -#: replication/logical/worker.c:3039 +#: replication/logical/worker.c:3040 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "Arbeitsprozess für logische Replikation für Tabellensynchronisation für Subskription »%s«, Tabelle »%s« hat gestartet" -#: replication/logical/worker.c:3043 +#: replication/logical/worker.c:3044 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "Apply-Worker für logische Replikation für Subskription »%s« hat gestartet" -#: replication/logical/worker.c:3080 +#: replication/logical/worker.c:3081 #, c-format msgid "subscription has no replication slot set" msgstr "für die Subskription ist kein Replikations-Slot gesetzt" @@ -19780,7 +19734,7 @@ msgstr "alle Replikations-Slots sind in Benutzung" msgid "Free one or increase max_replication_slots." msgstr "Geben Sie einen frei oder erhöhen Sie max_replication_slots." -#: replication/slot.c:424 replication/slotfuncs.c:765 +#: replication/slot.c:424 replication/slotfuncs.c:761 #: utils/adt/pgstatfuncs.c:2227 #, c-format msgid "replication slot \"%s\" does not exist" @@ -19861,87 +19815,87 @@ msgstr "Ändern Sie wal_level in replica oder höher." msgid "too many replication slots active before shutdown" msgstr "zu viele aktive Replikations-Slots vor dem Herunterfahren" -#: replication/slotfuncs.c:630 +#: replication/slotfuncs.c:626 #, c-format msgid "invalid target WAL LSN" msgstr "ungültige Ziel-WAL-LSN" -#: replication/slotfuncs.c:652 +#: replication/slotfuncs.c:648 #, c-format msgid "replication slot \"%s\" cannot be advanced" msgstr "Replikations-Slot »%s« kann nicht vorwärtsgesetzt werden" -#: replication/slotfuncs.c:670 +#: replication/slotfuncs.c:666 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "Replikations-Slot kann nicht auf %X/%X vorwärtsgesetzt werden, Minimum ist %X/%X" -#: replication/slotfuncs.c:777 +#: replication/slotfuncs.c:773 #, c-format msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "physischer Replikations-Slot »%s« kann nicht als logischer Replikations-Slot kopiert werden" -#: replication/slotfuncs.c:779 +#: replication/slotfuncs.c:775 #, c-format msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "logischer Replikations-Slot »%s« kann nicht als physischer Replikations-Slot kopiert werden" -#: replication/slotfuncs.c:786 +#: replication/slotfuncs.c:782 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "ein Replikations-Slot, der kein WAL reserviert, kann nicht kopiert werden" -#: replication/slotfuncs.c:863 +#: replication/slotfuncs.c:859 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "konnte Replikations-Slot »%s« nicht kopieren" -#: replication/slotfuncs.c:865 +#: replication/slotfuncs.c:861 #, c-format msgid "The source replication slot was modified incompatibly during the copy operation." msgstr "Der Quell-Replikations-Slot wurde während der Kopieroperation inkompatibel geändert." -#: replication/slotfuncs.c:871 +#: replication/slotfuncs.c:867 #, c-format msgid "cannot copy unfinished logical replication slot \"%s\"" msgstr "kann unfertigen Replikations-Slot »%s« nicht kopieren" -#: replication/slotfuncs.c:873 +#: replication/slotfuncs.c:869 #, c-format msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "Versuchen Sie es erneut, wenn confirmed_flush_lsn des Quell-Replikations-Slots gültig ist." -#: replication/syncrep.c:269 +#: replication/syncrep.c:268 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "Warten auf synchrone Replikation wird storniert and Verbindung wird abgebrochen, aufgrund von Anweisung des Administrators" -#: replication/syncrep.c:270 replication/syncrep.c:287 +#: replication/syncrep.c:269 replication/syncrep.c:286 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "Die Transaktion wurde lokal bereits committet, aber möglicherweise noch nicht zum Standby repliziert." -#: replication/syncrep.c:286 +#: replication/syncrep.c:285 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "storniere Warten auf synchrone Replikation wegen Benutzeraufforderung" -#: replication/syncrep.c:495 +#: replication/syncrep.c:494 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "Standby »%s« ist jetzt ein synchroner Standby mit Priorität %u" -#: replication/syncrep.c:499 +#: replication/syncrep.c:498 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "Standby »%s« ist jetzt ein Kandidat für synchroner Standby mit Quorum" -#: replication/syncrep.c:1046 +#: replication/syncrep.c:1045 #, c-format msgid "synchronous_standby_names parser failed" msgstr "Parser für synchronous_standby_names fehlgeschlagen" -#: replication/syncrep.c:1052 +#: replication/syncrep.c:1051 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "Anzahl synchroner Standbys (%d) muss größer als null sein" @@ -20036,109 +19990,109 @@ msgstr "konnte Positionszeiger nicht den Anfang der Datei »%s« setzen: %m" msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "IDENTIFY_SYSTEM wurde nicht vor START_REPLICATION ausgeführt" -#: replication/walsender.c:605 +#: replication/walsender.c:608 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "logischer Replikations-Slot kann nicht für physische Replikation verwendet werden" -#: replication/walsender.c:674 +#: replication/walsender.c:677 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "angeforderter Startpunkt %X/%X auf Zeitleiste %u ist nicht in der History dieses Servers" -#: replication/walsender.c:677 +#: replication/walsender.c:680 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "Die History dieses Servers zweigte von Zeitleiste %u bei %X/%X ab." -#: replication/walsender.c:721 +#: replication/walsender.c:724 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "angeforderter Startpunkt %X/%X ist vor der WAL-Flush-Position dieses Servers %X/%X" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:977 +#: replication/walsender.c:974 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s darf nicht in einer Transaktion aufgerufen werden" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:987 +#: replication/walsender.c:984 #, c-format msgid "%s must be called inside a transaction" msgstr "%s muss in einer Transaktion aufgerufen werden" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:993 +#: replication/walsender.c:990 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s muss in einer Transaktion im Isolationsmodus REPEATABLE READ aufgerufen werden" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:999 +#: replication/walsender.c:996 #, c-format msgid "%s must be called before any query" msgstr "%s muss vor allen Anfragen aufgerufen werden" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1005 +#: replication/walsender.c:1002 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s darf nicht in einer Subtransaktion aufgerufen werden" -#: replication/walsender.c:1147 +#: replication/walsender.c:1145 #, c-format msgid "cannot read from logical replication slot \"%s\"" msgstr "kann nicht aus logischem Replikations-Slot »%s« lesen" -#: replication/walsender.c:1149 +#: replication/walsender.c:1147 #, c-format msgid "This slot has been invalidated because it exceeded the maximum reserved size." msgstr "Dieser Slot wurde ungültig gemacht, weil er die maximale reservierte Größe überschritten hat." -#: replication/walsender.c:1159 +#: replication/walsender.c:1157 #, c-format msgid "terminating walsender process after promotion" msgstr "WAL-Sender-Prozess wird nach Beförderung abgebrochen" -#: replication/walsender.c:1524 +#: replication/walsender.c:1523 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "während der WAL-Sender im Stoppmodus ist können keine neuen Befehle ausgeführt werden" -#: replication/walsender.c:1561 +#: replication/walsender.c:1560 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "im WAL-Sender für physische Replikation können keine SQL-Befehle ausgeführt werden" -#: replication/walsender.c:1584 +#: replication/walsender.c:1583 #, c-format msgid "received replication command: %s" msgstr "Replikationsbefehl empfangen: %s" -#: replication/walsender.c:1592 tcop/fastpath.c:208 tcop/postgres.c:1078 +#: replication/walsender.c:1591 tcop/fastpath.c:208 tcop/postgres.c:1078 #: tcop/postgres.c:1430 tcop/postgres.c:1691 tcop/postgres.c:2176 #: tcop/postgres.c:2586 tcop/postgres.c:2665 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "aktuelle Transaktion wurde abgebrochen, Befehle werden bis zum Ende der Transaktion ignoriert" -#: replication/walsender.c:1727 replication/walsender.c:1762 +#: replication/walsender.c:1726 replication/walsender.c:1761 #, c-format msgid "unexpected EOF on standby connection" msgstr "unerwartetes EOF auf Standby-Verbindung" -#: replication/walsender.c:1750 +#: replication/walsender.c:1749 #, c-format msgid "invalid standby message type \"%c\"" msgstr "ungültiger Standby-Message-Typ »%c«" -#: replication/walsender.c:1839 +#: replication/walsender.c:1838 #, c-format msgid "unexpected message type \"%c\"" msgstr "unerwarteter Message-Typ »%c«" -#: replication/walsender.c:2252 +#: replication/walsender.c:2251 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "WAL-Sender-Prozess wird abgebrochen wegen Zeitüberschreitung bei der Replikation" @@ -20961,12 +20915,12 @@ msgstr "konnte Handle für »%s« nicht duplizieren: %m" msgid "database \"%s\" is being used by prepared transactions" msgstr "Datenbank »%s« wird von vorbereiteten Transaktionen verwendet" -#: storage/ipc/procarray.c:3756 storage/ipc/signalfuncs.c:218 +#: storage/ipc/procarray.c:3756 storage/ipc/signalfuncs.c:219 #, c-format msgid "must be a superuser to terminate superuser process" msgstr "nur Superuser können Prozesse eines Superusers beenden" -#: storage/ipc/procarray.c:3763 storage/ipc/signalfuncs.c:223 +#: storage/ipc/procarray.c:3763 storage/ipc/signalfuncs.c:224 #, c-format msgid "must be a member of the role whose process is being terminated or member of pg_signal_backend" msgstr "muss Mitglied der Rolle sein, deren Prozess beendet wird, oder Mitglied von pg_signal_backend" @@ -21016,7 +20970,7 @@ msgstr "nicht genug Shared-Memory für Datenstruktur »%s« (%zu Bytes angeforde msgid "requested shared memory size overflows size_t" msgstr "angeforderte Shared-Memory-Größe übersteigt Kapazität von size_t" -#: storage/ipc/signalfuncs.c:68 storage/ipc/signalfuncs.c:260 +#: storage/ipc/signalfuncs.c:68 storage/ipc/signalfuncs.c:261 #: utils/adt/mcxtfuncs.c:196 #, c-format msgid "PID %d is not a PostgreSQL server process" @@ -21038,41 +20992,41 @@ msgstr "nur Superuser können Anfragen eines Superusers stornieren" msgid "must be a member of the role whose query is being canceled or member of pg_signal_backend" msgstr "muss Mitglied der Rolle sein, deren Anfrage storniert wird, oder Mitglied von pg_signal_backend" -#: storage/ipc/signalfuncs.c:164 +#: storage/ipc/signalfuncs.c:165 #, c-format msgid "could not check the existence of the backend with PID %d: %m" msgstr "" -#: storage/ipc/signalfuncs.c:182 +#: storage/ipc/signalfuncs.c:183 #, fuzzy, c-format #| msgid "server did not promote within %d seconds" msgid "backend with PID %d did not terminate within %lld milliseconds" msgstr "Befördern des Servers wurde nicht innerhalb von %d Sekunden abgeschlossen" -#: storage/ipc/signalfuncs.c:211 +#: storage/ipc/signalfuncs.c:212 #, fuzzy, c-format #| msgid "LIMIT must not be negative" msgid "\"timeout\" must not be negative" msgstr "LIMIT darf nicht negativ sein" -#: storage/ipc/signalfuncs.c:253 +#: storage/ipc/signalfuncs.c:254 #, fuzzy, c-format #| msgid "\"wait_seconds\" must not be negative or zero" msgid "\"timeout\" must not be negative or zero" msgstr "»wait_seconds« darf nicht negativ oder null sein" -#: storage/ipc/signalfuncs.c:299 +#: storage/ipc/signalfuncs.c:300 #, c-format msgid "must be superuser to rotate log files with adminpack 1.0" msgstr "nur Superuser können mit adminpack 1.0 Logdateien rotieren" #. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:301 utils/adt/genfile.c:256 +#: storage/ipc/signalfuncs.c:302 utils/adt/genfile.c:255 #, c-format msgid "Consider using %s, which is part of core, instead." msgstr "Verwenden Sie stattdessen %s, was im Kernsystem enthalten ist." -#: storage/ipc/signalfuncs.c:307 storage/ipc/signalfuncs.c:327 +#: storage/ipc/signalfuncs.c:308 storage/ipc/signalfuncs.c:328 #, c-format msgid "rotation not possible because log collection not active" msgstr "Rotierung nicht möglich, weil Logsammlung nicht aktiv ist" @@ -21386,7 +21340,7 @@ msgstr "Prozess %d wartet immer noch auf %s-Sperre auf %s nach %ld,%03d ms" msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "Prozess %d erlangte %s-Sperre auf %s nach %ld,%03d ms" -#: storage/lmgr/proc.c:1598 +#: storage/lmgr/proc.c:1599 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "Prozess %d konnte %s-Sperre auf %s nach %ld,%03d ms nicht erlangen" @@ -22223,17 +22177,17 @@ msgstr "Funktion »%s« existiert nicht" msgid "must be member of role \"%s\"" msgstr "Berechtigung nur für Mitglied von Rolle »%s«" -#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:933 -#: utils/adt/arrayfuncs.c:1554 utils/adt/arrayfuncs.c:3262 -#: utils/adt/arrayfuncs.c:3402 utils/adt/arrayfuncs.c:5937 -#: utils/adt/arrayfuncs.c:6278 utils/adt/arrayutils.c:93 -#: utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 +#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:935 +#: utils/adt/arrayfuncs.c:1543 utils/adt/arrayfuncs.c:3262 +#: utils/adt/arrayfuncs.c:3404 utils/adt/arrayfuncs.c:5945 +#: utils/adt/arrayfuncs.c:6286 utils/adt/arrayutils.c:94 +#: utils/adt/arrayutils.c:103 utils/adt/arrayutils.c:110 #, c-format msgid "array size exceeds the maximum allowed (%d)" msgstr "Arraygröße überschreitet erlaubtes Maximum (%d)" -#: utils/adt/array_userfuncs.c:80 utils/adt/array_userfuncs.c:466 -#: utils/adt/array_userfuncs.c:546 utils/adt/json.c:645 utils/adt/json.c:740 +#: utils/adt/array_userfuncs.c:80 utils/adt/array_userfuncs.c:467 +#: utils/adt/array_userfuncs.c:547 utils/adt/json.c:645 utils/adt/json.c:740 #: utils/adt/json.c:778 utils/adt/jsonb.c:1115 utils/adt/jsonb.c:1144 #: utils/adt/jsonb.c:1538 utils/adt/jsonb.c:1702 utils/adt/jsonb.c:1712 #, c-format @@ -22246,16 +22200,16 @@ msgid "input data type is not an array" msgstr "Eingabedatentyp ist kein Array" #: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 -#: utils/adt/arrayfuncs.c:1357 utils/adt/float.c:1233 utils/adt/float.c:1307 -#: utils/adt/float.c:4052 utils/adt/float.c:4066 utils/adt/int.c:757 -#: utils/adt/int.c:779 utils/adt/int.c:793 utils/adt/int.c:807 -#: utils/adt/int.c:838 utils/adt/int.c:859 utils/adt/int.c:976 -#: utils/adt/int.c:990 utils/adt/int.c:1004 utils/adt/int.c:1037 -#: utils/adt/int.c:1051 utils/adt/int.c:1065 utils/adt/int.c:1096 -#: utils/adt/int.c:1178 utils/adt/int.c:1242 utils/adt/int.c:1310 -#: utils/adt/int.c:1316 utils/adt/int8.c:1299 utils/adt/numeric.c:1776 -#: utils/adt/numeric.c:4207 utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 -#: utils/adt/varlena.c:1121 utils/adt/varlena.c:3433 +#: utils/adt/float.c:1233 utils/adt/float.c:1307 utils/adt/float.c:4052 +#: utils/adt/float.c:4066 utils/adt/int.c:757 utils/adt/int.c:779 +#: utils/adt/int.c:793 utils/adt/int.c:807 utils/adt/int.c:838 +#: utils/adt/int.c:859 utils/adt/int.c:976 utils/adt/int.c:990 +#: utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 +#: utils/adt/int.c:1065 utils/adt/int.c:1096 utils/adt/int.c:1178 +#: utils/adt/int.c:1242 utils/adt/int.c:1310 utils/adt/int.c:1316 +#: utils/adt/int8.c:1299 utils/adt/numeric.c:1776 utils/adt/numeric.c:4207 +#: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1121 +#: utils/adt/varlena.c:3433 #, c-format msgid "integer out of range" msgstr "integer ist außerhalb des gültigen Bereichs" @@ -22292,12 +22246,12 @@ msgstr "Arrays mit unterschiedlichen Elementdimensionen sind nicht kompatibel f msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "Arrays mit unterschiedlichen Dimensionen sind nicht kompatibel für Aneinanderhängen." -#: utils/adt/array_userfuncs.c:662 utils/adt/array_userfuncs.c:814 +#: utils/adt/array_userfuncs.c:663 utils/adt/array_userfuncs.c:815 #, c-format msgid "searching for elements in multidimensional arrays is not supported" msgstr "Suche nach Elementen in mehrdimensionalen Arrays wird nicht unterstützt" -#: utils/adt/array_userfuncs.c:686 +#: utils/adt/array_userfuncs.c:687 #, c-format msgid "initial position must not be null" msgstr "Startposition darf nicht NULL sein" @@ -22306,14 +22260,14 @@ msgstr "Startposition darf nicht NULL sein" #: utils/adt/arrayfuncs.c:295 utils/adt/arrayfuncs.c:317 #: utils/adt/arrayfuncs.c:332 utils/adt/arrayfuncs.c:346 #: utils/adt/arrayfuncs.c:352 utils/adt/arrayfuncs.c:359 -#: utils/adt/arrayfuncs.c:490 utils/adt/arrayfuncs.c:506 -#: utils/adt/arrayfuncs.c:517 utils/adt/arrayfuncs.c:532 -#: utils/adt/arrayfuncs.c:553 utils/adt/arrayfuncs.c:583 -#: utils/adt/arrayfuncs.c:590 utils/adt/arrayfuncs.c:598 -#: utils/adt/arrayfuncs.c:632 utils/adt/arrayfuncs.c:655 -#: utils/adt/arrayfuncs.c:675 utils/adt/arrayfuncs.c:787 -#: utils/adt/arrayfuncs.c:796 utils/adt/arrayfuncs.c:826 -#: utils/adt/arrayfuncs.c:841 utils/adt/arrayfuncs.c:894 +#: utils/adt/arrayfuncs.c:492 utils/adt/arrayfuncs.c:508 +#: utils/adt/arrayfuncs.c:519 utils/adt/arrayfuncs.c:534 +#: utils/adt/arrayfuncs.c:555 utils/adt/arrayfuncs.c:585 +#: utils/adt/arrayfuncs.c:592 utils/adt/arrayfuncs.c:600 +#: utils/adt/arrayfuncs.c:634 utils/adt/arrayfuncs.c:657 +#: utils/adt/arrayfuncs.c:677 utils/adt/arrayfuncs.c:789 +#: utils/adt/arrayfuncs.c:798 utils/adt/arrayfuncs.c:828 +#: utils/adt/arrayfuncs.c:843 utils/adt/arrayfuncs.c:896 #, c-format msgid "malformed array literal: \"%s\"" msgstr "fehlerhafte Arraykonstante: »%s«" @@ -22333,8 +22287,8 @@ msgstr "Dimensionswert fehlt." msgid "Missing \"%s\" after array dimensions." msgstr "»%s« fehlt nach Arraydimensionen." -#: utils/adt/arrayfuncs.c:305 utils/adt/arrayfuncs.c:2910 -#: utils/adt/arrayfuncs.c:2942 utils/adt/arrayfuncs.c:2957 +#: utils/adt/arrayfuncs.c:305 utils/adt/arrayfuncs.c:2909 +#: utils/adt/arrayfuncs.c:2941 utils/adt/arrayfuncs.c:2956 #, c-format msgid "upper bound cannot be less than lower bound" msgstr "Obergrenze kann nicht kleiner als Untergrenze sein" @@ -22354,7 +22308,7 @@ msgstr "Array-Inhalt muss mit {« anfangen." msgid "Specified array dimensions do not match array contents." msgstr "Angegebene Array-Dimensionen stimmen nicht mit dem Array-Inhalt überein." -#: utils/adt/arrayfuncs.c:491 utils/adt/arrayfuncs.c:518 +#: utils/adt/arrayfuncs.c:493 utils/adt/arrayfuncs.c:520 #: utils/adt/multirangetypes.c:162 utils/adt/rangetypes.c:2310 #: utils/adt/rangetypes.c:2318 utils/adt/rowtypes.c:211 #: utils/adt/rowtypes.c:219 @@ -22362,74 +22316,74 @@ msgstr "Angegebene Array-Dimensionen stimmen nicht mit dem Array-Inhalt überein msgid "Unexpected end of input." msgstr "Unerwartetes Ende der Eingabe." -#: utils/adt/arrayfuncs.c:507 utils/adt/arrayfuncs.c:554 -#: utils/adt/arrayfuncs.c:584 utils/adt/arrayfuncs.c:633 +#: utils/adt/arrayfuncs.c:509 utils/adt/arrayfuncs.c:556 +#: utils/adt/arrayfuncs.c:586 utils/adt/arrayfuncs.c:635 #, c-format msgid "Unexpected \"%c\" character." msgstr "Unerwartetes Zeichen »%c«." -#: utils/adt/arrayfuncs.c:533 utils/adt/arrayfuncs.c:656 +#: utils/adt/arrayfuncs.c:535 utils/adt/arrayfuncs.c:658 #, c-format msgid "Unexpected array element." msgstr "Unerwartetes Arrayelement." -#: utils/adt/arrayfuncs.c:591 +#: utils/adt/arrayfuncs.c:593 #, c-format msgid "Unmatched \"%c\" character." msgstr "Zeichen »%c« ohne Gegenstück." -#: utils/adt/arrayfuncs.c:599 utils/adt/jsonfuncs.c:2593 +#: utils/adt/arrayfuncs.c:601 utils/adt/jsonfuncs.c:2593 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "Mehrdimensionale Arrays müssen Arraysausdrücke mit gleicher Anzahl Dimensionen haben." -#: utils/adt/arrayfuncs.c:676 +#: utils/adt/arrayfuncs.c:678 #, c-format msgid "Junk after closing right brace." msgstr "Müll nach schließender rechter geschweifter Klammer." -#: utils/adt/arrayfuncs.c:1298 utils/adt/arrayfuncs.c:3370 -#: utils/adt/arrayfuncs.c:5843 +#: utils/adt/arrayfuncs.c:1300 utils/adt/arrayfuncs.c:3370 +#: utils/adt/arrayfuncs.c:5849 #, c-format msgid "invalid number of dimensions: %d" msgstr "ungültige Anzahl Dimensionen: %d" -#: utils/adt/arrayfuncs.c:1309 +#: utils/adt/arrayfuncs.c:1311 #, c-format msgid "invalid array flags" msgstr "ungültige Array-Flags" -#: utils/adt/arrayfuncs.c:1331 +#: utils/adt/arrayfuncs.c:1333 #, c-format msgid "binary data has array element type %u (%s) instead of expected %u (%s)" msgstr "" -#: utils/adt/arrayfuncs.c:1388 utils/adt/multirangetypes.c:443 +#: utils/adt/arrayfuncs.c:1377 utils/adt/multirangetypes.c:443 #: utils/adt/rangetypes.c:333 utils/cache/lsyscache.c:2905 #, c-format msgid "no binary input function available for type %s" msgstr "keine binäre Eingabefunktion verfügbar für Typ %s" -#: utils/adt/arrayfuncs.c:1528 +#: utils/adt/arrayfuncs.c:1517 #, c-format msgid "improper binary format in array element %d" msgstr "falsches Binärformat in Arrayelement %d" -#: utils/adt/arrayfuncs.c:1609 utils/adt/multirangetypes.c:448 +#: utils/adt/arrayfuncs.c:1598 utils/adt/multirangetypes.c:448 #: utils/adt/rangetypes.c:338 utils/cache/lsyscache.c:2938 #, c-format msgid "no binary output function available for type %s" msgstr "keine binäre Ausgabefunktion verfügbar für Typ %s" -#: utils/adt/arrayfuncs.c:2088 +#: utils/adt/arrayfuncs.c:2077 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "Auswählen von Stücken aus Arrays mit fester Länge ist nicht implementiert" -#: utils/adt/arrayfuncs.c:2266 utils/adt/arrayfuncs.c:2288 -#: utils/adt/arrayfuncs.c:2337 utils/adt/arrayfuncs.c:2573 -#: utils/adt/arrayfuncs.c:2888 utils/adt/arrayfuncs.c:5829 -#: utils/adt/arrayfuncs.c:5855 utils/adt/arrayfuncs.c:5866 +#: utils/adt/arrayfuncs.c:2255 utils/adt/arrayfuncs.c:2277 +#: utils/adt/arrayfuncs.c:2326 utils/adt/arrayfuncs.c:2565 +#: utils/adt/arrayfuncs.c:2887 utils/adt/arrayfuncs.c:5835 +#: utils/adt/arrayfuncs.c:5861 utils/adt/arrayfuncs.c:5872 #: utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 #: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4427 utils/adt/jsonfuncs.c:4580 #: utils/adt/jsonfuncs.c:4692 utils/adt/jsonfuncs.c:4741 @@ -22437,116 +22391,116 @@ msgstr "Auswählen von Stücken aus Arrays mit fester Länge ist nicht implement msgid "wrong number of array subscripts" msgstr "falsche Anzahl Arrayindizes" -#: utils/adt/arrayfuncs.c:2271 utils/adt/arrayfuncs.c:2379 -#: utils/adt/arrayfuncs.c:2640 utils/adt/arrayfuncs.c:2947 +#: utils/adt/arrayfuncs.c:2260 utils/adt/arrayfuncs.c:2368 +#: utils/adt/arrayfuncs.c:2632 utils/adt/arrayfuncs.c:2946 #, c-format msgid "array subscript out of range" msgstr "Arrayindex außerhalb des gültigen Bereichs" -#: utils/adt/arrayfuncs.c:2276 +#: utils/adt/arrayfuncs.c:2265 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "Array mit fester Länge kann keinen NULL-Wert enthalten" -#: utils/adt/arrayfuncs.c:2835 +#: utils/adt/arrayfuncs.c:2834 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "Aktualisieren von Stücken aus Arrays mit fester Länge ist nicht implementiert" -#: utils/adt/arrayfuncs.c:2866 +#: utils/adt/arrayfuncs.c:2865 #, c-format msgid "array slice subscript must provide both boundaries" msgstr "Array-Slice-Index muss beide Begrenzungen angeben" -#: utils/adt/arrayfuncs.c:2867 +#: utils/adt/arrayfuncs.c:2866 #, c-format msgid "When assigning to a slice of an empty array value, slice boundaries must be fully specified." msgstr "Wenn ein Slice eines leeren Array-Wertes zugewiesen wird, dann müssen die Slice-Begrenzungen vollständig angegeben werden." -#: utils/adt/arrayfuncs.c:2878 utils/adt/arrayfuncs.c:2973 +#: utils/adt/arrayfuncs.c:2877 utils/adt/arrayfuncs.c:2973 #, c-format msgid "source array too small" msgstr "Quellarray ist zu klein" -#: utils/adt/arrayfuncs.c:3526 +#: utils/adt/arrayfuncs.c:3528 #, c-format msgid "null array element not allowed in this context" msgstr "NULL-Werte im Array sind in diesem Zusammenhang nicht erlaubt" -#: utils/adt/arrayfuncs.c:3628 utils/adt/arrayfuncs.c:3799 -#: utils/adt/arrayfuncs.c:4155 +#: utils/adt/arrayfuncs.c:3630 utils/adt/arrayfuncs.c:3801 +#: utils/adt/arrayfuncs.c:4157 #, c-format msgid "cannot compare arrays of different element types" msgstr "kann Arrays mit verschiedenen Elementtypen nicht vergleichen" -#: utils/adt/arrayfuncs.c:3977 utils/adt/multirangetypes.c:2670 +#: utils/adt/arrayfuncs.c:3979 utils/adt/multirangetypes.c:2670 #: utils/adt/multirangetypes.c:2742 utils/adt/rangetypes.c:1343 #: utils/adt/rangetypes.c:1407 utils/adt/rowtypes.c:1858 #, c-format msgid "could not identify a hash function for type %s" msgstr "konnte keine Hash-Funktion für Typ %s ermitteln" -#: utils/adt/arrayfuncs.c:4070 utils/adt/rowtypes.c:1979 +#: utils/adt/arrayfuncs.c:4072 utils/adt/rowtypes.c:1979 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "konnte keine erweiterte Hash-Funktion für Typ %s ermitteln" -#: utils/adt/arrayfuncs.c:5247 +#: utils/adt/arrayfuncs.c:5249 #, c-format msgid "data type %s is not an array type" msgstr "Datentyp %s ist kein Array-Typ" -#: utils/adt/arrayfuncs.c:5302 +#: utils/adt/arrayfuncs.c:5304 #, c-format msgid "cannot accumulate null arrays" msgstr "Arrays, die NULL sind, können nicht akkumuliert werden" -#: utils/adt/arrayfuncs.c:5330 +#: utils/adt/arrayfuncs.c:5332 #, c-format msgid "cannot accumulate empty arrays" msgstr "leere Arrays können nicht akkumuliert werden" -#: utils/adt/arrayfuncs.c:5357 utils/adt/arrayfuncs.c:5363 +#: utils/adt/arrayfuncs.c:5359 utils/adt/arrayfuncs.c:5365 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "Arrays unterschiedlicher Dimensionalität können nicht akkumuliert werden" -#: utils/adt/arrayfuncs.c:5727 utils/adt/arrayfuncs.c:5767 +#: utils/adt/arrayfuncs.c:5733 utils/adt/arrayfuncs.c:5773 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "Dimensions-Array oder Untergrenzen-Array darf nicht NULL sein" -#: utils/adt/arrayfuncs.c:5830 utils/adt/arrayfuncs.c:5856 +#: utils/adt/arrayfuncs.c:5836 utils/adt/arrayfuncs.c:5862 #, c-format msgid "Dimension array must be one dimensional." msgstr "Dimensions-Array muss eindimensional sein." -#: utils/adt/arrayfuncs.c:5835 utils/adt/arrayfuncs.c:5861 +#: utils/adt/arrayfuncs.c:5841 utils/adt/arrayfuncs.c:5867 #, c-format msgid "dimension values cannot be null" msgstr "Dimensionswerte dürfen nicht NULL sein" -#: utils/adt/arrayfuncs.c:5867 +#: utils/adt/arrayfuncs.c:5873 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "Untergrenzen-Array hat andere Größe als Dimensions-Array." -#: utils/adt/arrayfuncs.c:6143 +#: utils/adt/arrayfuncs.c:6151 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "Entfernen von Elementen aus mehrdimensionalen Arrays wird nicht unterstützt" -#: utils/adt/arrayfuncs.c:6420 +#: utils/adt/arrayfuncs.c:6428 #, c-format msgid "thresholds must be one-dimensional array" msgstr "Parameter »thresholds« muss ein eindimensionales Array sein" -#: utils/adt/arrayfuncs.c:6425 +#: utils/adt/arrayfuncs.c:6433 #, c-format msgid "thresholds array must not contain NULLs" msgstr "»thresholds«-Array darf keine NULL-Werte enthalten" -#: utils/adt/arrayfuncs.c:6658 +#: utils/adt/arrayfuncs.c:6666 #, fuzzy, c-format #| msgid "number of parameters must be between 0 and 65535\n" msgid "number of elements to trim must be between 0 and %d" @@ -22562,17 +22516,22 @@ msgstr "Arrayindex muss Typ integer haben" msgid "array subscript in assignment must not be null" msgstr "Arrayindex in Zuweisung darf nicht NULL sein" -#: utils/adt/arrayutils.c:209 +#: utils/adt/arrayutils.c:140 +#, c-format +msgid "array lower bound is too large: %d" +msgstr "" + +#: utils/adt/arrayutils.c:240 #, c-format msgid "typmod array must be type cstring[]" msgstr "Typmod-Array muss Typ cstring[] haben" -#: utils/adt/arrayutils.c:214 +#: utils/adt/arrayutils.c:245 #, c-format msgid "typmod array must be one-dimensional" msgstr "Typmod-Arrays müssen eindimensional sein" -#: utils/adt/arrayutils.c:219 +#: utils/adt/arrayutils.c:250 #, c-format msgid "typmod array must not contain nulls" msgstr "Typmod-Array darf keine NULL-Werte enthalten" @@ -23264,12 +23223,12 @@ msgstr "verlangte Länge zu groß" msgid "could not seek in file \"%s\": %m" msgstr "konnte Positionszeiger in Datei »%s« nicht setzen: %m" -#: utils/adt/genfile.c:177 +#: utils/adt/genfile.c:176 #, c-format msgid "file length too large" msgstr "Dateilänge zu groß" -#: utils/adt/genfile.c:254 +#: utils/adt/genfile.c:253 #, c-format msgid "must be superuser to read files with adminpack 1.0" msgstr "nur Superuser können mit adminpack 1.0 Dateien lesen" @@ -24387,32 +24346,25 @@ msgstr "konnte Collator für Locale »%s« nicht öffnen: %s" msgid "ICU is not supported in this build" msgstr "ICU wird in dieser Installation nicht unterstützt" -#: utils/adt/pg_locale.c:1589 -#, c-format -msgid "You need to rebuild PostgreSQL using --with-icu." -msgstr "Sie müssen PostgreSQL mit --with-icu neu bauen." - #: utils/adt/pg_locale.c:1609 -#, fuzzy, c-format -#| msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" +#, c-format msgid "collation \"%s\" has no actual version, but a version was specified" -msgstr "Erweiterung »%s« hat keinen Aktualisierungspfad von Version »%s« auf Version »%s«" +msgstr "Sortierfolge »%s« hat keine tatsächliche Version, aber eine Version wurde angegeben" #: utils/adt/pg_locale.c:1616 -#, fuzzy, c-format -#| msgid "incompatible library \"%s\": version mismatch" +#, c-format msgid "collation \"%s\" has version mismatch" -msgstr "inkompatible Bibliothek »%s«: Version stimmt nicht überein" +msgstr "Version von Sortierfolge »%s« stimmt nicht überein" #: utils/adt/pg_locale.c:1618 #, c-format msgid "The collation in the database was created using version %s, but the operating system provides version %s." -msgstr "" +msgstr "Die Sortierfolge in der Datenbank wurde mit Version %s erzeugt, aber das Betriebssystem hat Version %s." #: utils/adt/pg_locale.c:1621 #, c-format msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." -msgstr "" +msgstr "Bauen Sie alle von dieser Sortierfolge beinflussten Objekte neu und führen Sie ALTER COLLATION %s REFRESH VERSION aus, oder bauen Sie PostgreSQL mit der richtigen Bibliotheksversion." #: utils/adt/pg_locale.c:1692 #, fuzzy, c-format @@ -24600,7 +24552,7 @@ msgid "more than one operator named %s" msgstr "es gibt mehrere Operatoren namens %s" #: utils/adt/regproc.c:714 utils/adt/regproc.c:755 utils/adt/regproc.c:2054 -#: utils/adt/ruleutils.c:9641 utils/adt/ruleutils.c:9810 +#: utils/adt/ruleutils.c:9642 utils/adt/ruleutils.c:9811 #, c-format msgid "too many arguments" msgstr "zu viele Argumente" @@ -24771,7 +24723,7 @@ msgstr "kann unterschiedliche Spaltentyp %s und %s in Record-Spalte %d nicht ver msgid "cannot compare record types with different numbers of columns" msgstr "kann Record-Typen mit unterschiedlicher Anzahl Spalten nicht vergleichen" -#: utils/adt/ruleutils.c:5068 +#: utils/adt/ruleutils.c:5069 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "Regel »%s« hat nicht unterstützten Ereignistyp %d" @@ -24786,7 +24738,7 @@ msgstr "Präzision von TIMESTAMP(%d)%s darf nicht negativ sein" msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "Präzision von TIMESTAMP(%d)%s auf erlaubten Höchstwert %d reduziert" -#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12458 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12392 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp ist außerhalb des gültigen Bereichs: »%s«" @@ -25303,11 +25255,6 @@ msgstr "nicht unterstützte XML-Funktionalität" msgid "This functionality requires the server to be built with libxml support." msgstr "Diese Funktionalität verlangt, dass der Server mit Libxml-Unterstützung gebaut wird." -#: utils/adt/xml.c:224 -#, c-format -msgid "You need to rebuild PostgreSQL using --with-libxml." -msgstr "Sie müssen PostgreSQL mit --with-libxml neu bauen." - #: utils/adt/xml.c:243 utils/mb/mbutils.c:627 #, c-format msgid "invalid encoding name \"%s\"" @@ -25794,7 +25741,7 @@ msgstr "Datenverzeichnis »%s« hat ungültige Zugriffsrechte" msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Rechte sollten u=rwx (0700) oder u=rwx,g=rx (0750) sein." -#: utils/init/miscinit.c:645 utils/misc/guc.c:7514 +#: utils/init/miscinit.c:645 utils/misc/guc.c:7462 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "kann Parameter »%s« nicht in einer sicherheitsbeschränkten Operation setzen" @@ -25895,7 +25842,7 @@ msgstr "Die Datei ist anscheinend aus Versehen übrig geblieben, konnte aber nic msgid "could not write lock file \"%s\": %m" msgstr "konnte Sperrdatei »%s« nicht schreiben: %m" -#: utils/init/miscinit.c:1357 utils/init/miscinit.c:1499 utils/misc/guc.c:10410 +#: utils/init/miscinit.c:1357 utils/init/miscinit.c:1499 utils/misc/guc.c:10358 #, c-format msgid "could not read from file \"%s\": %m" msgstr "konnte nicht aus Datei »%s« lesen: %m" @@ -26153,2005 +26100,1949 @@ msgstr "ungültige Byte-Sequenz für Kodierung »%s«: %s" msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "Zeichen mit Byte-Folge %s in Kodierung »%s« hat keine Entsprechung in Kodierung »%s«" -#: utils/misc/guc.c:703 +#: utils/misc/guc.c:701 msgid "Ungrouped" msgstr "Ungruppiert" -#: utils/misc/guc.c:705 +#: utils/misc/guc.c:703 msgid "File Locations" msgstr "Dateipfade" -#: utils/misc/guc.c:707 -msgid "Connections and Authentication" -msgstr "Verbindungen und Authentifizierung" - -#: utils/misc/guc.c:709 +#: utils/misc/guc.c:705 msgid "Connections and Authentication / Connection Settings" msgstr "Verbindungen und Authentifizierung / Verbindungseinstellungen" -#: utils/misc/guc.c:711 +#: utils/misc/guc.c:707 msgid "Connections and Authentication / Authentication" msgstr "Verbindungen und Authentifizierung / Authentifizierung" -#: utils/misc/guc.c:713 +#: utils/misc/guc.c:709 msgid "Connections and Authentication / SSL" msgstr "Verbindungen und Authentifizierung / SSL" -#: utils/misc/guc.c:715 -msgid "Resource Usage" -msgstr "Resourcenbenutzung" - -#: utils/misc/guc.c:717 +#: utils/misc/guc.c:711 msgid "Resource Usage / Memory" msgstr "Resourcenbenutzung / Speicher" -#: utils/misc/guc.c:719 +#: utils/misc/guc.c:713 msgid "Resource Usage / Disk" msgstr "Resourcenbenutzung / Festplatte" -#: utils/misc/guc.c:721 +#: utils/misc/guc.c:715 msgid "Resource Usage / Kernel Resources" msgstr "Resourcenbenutzung / Kernelresourcen" -#: utils/misc/guc.c:723 +#: utils/misc/guc.c:717 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Resourcenbenutzung / Kostenbasierte Vacuum-Verzögerung" -#: utils/misc/guc.c:725 +#: utils/misc/guc.c:719 msgid "Resource Usage / Background Writer" msgstr "Resourcenbenutzung / Background-Writer" -#: utils/misc/guc.c:727 +#: utils/misc/guc.c:721 msgid "Resource Usage / Asynchronous Behavior" msgstr "Resourcenbenutzung / Asynchrones Verhalten" -#: utils/misc/guc.c:729 -msgid "Write-Ahead Log" -msgstr "Write-Ahead-Log" - -#: utils/misc/guc.c:731 +#: utils/misc/guc.c:723 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead-Log / Einstellungen" -#: utils/misc/guc.c:733 +#: utils/misc/guc.c:725 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead-Log / Checkpoints" -#: utils/misc/guc.c:735 +#: utils/misc/guc.c:727 msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead-Log / Archivierung" -#: utils/misc/guc.c:737 +#: utils/misc/guc.c:729 msgid "Write-Ahead Log / Archive Recovery" msgstr "Write-Ahead-Log / Archivwiederherstellung" -#: utils/misc/guc.c:739 +#: utils/misc/guc.c:731 msgid "Write-Ahead Log / Recovery Target" msgstr "Write-Ahead-Log / Wiederherstellungsziele" -#: utils/misc/guc.c:741 -msgid "Replication" -msgstr "Replikation" - -#: utils/misc/guc.c:743 +#: utils/misc/guc.c:733 msgid "Replication / Sending Servers" msgstr "Replikation / sendende Server" -#: utils/misc/guc.c:745 +#: utils/misc/guc.c:735 msgid "Replication / Primary Server" msgstr "Replikation / Primärserver" -#: utils/misc/guc.c:747 +#: utils/misc/guc.c:737 msgid "Replication / Standby Servers" msgstr "Replikation / Standby-Server" -#: utils/misc/guc.c:749 +#: utils/misc/guc.c:739 msgid "Replication / Subscribers" msgstr "Replikation / Subskriptionsserver" -#: utils/misc/guc.c:751 -msgid "Query Tuning" -msgstr "Anfragetuning" - -#: utils/misc/guc.c:753 +#: utils/misc/guc.c:741 msgid "Query Tuning / Planner Method Configuration" msgstr "Anfragetuning / Planermethoden" -#: utils/misc/guc.c:755 +#: utils/misc/guc.c:743 msgid "Query Tuning / Planner Cost Constants" msgstr "Anfragetuning / Planerkosten" -#: utils/misc/guc.c:757 +#: utils/misc/guc.c:745 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Anfragetuning / Genetischer Anfrageoptimierer" -#: utils/misc/guc.c:759 +#: utils/misc/guc.c:747 msgid "Query Tuning / Other Planner Options" msgstr "Anfragetuning / Andere Planeroptionen" -#: utils/misc/guc.c:761 -msgid "Reporting and Logging" -msgstr "Berichte und Logging" - -#: utils/misc/guc.c:763 +#: utils/misc/guc.c:749 msgid "Reporting and Logging / Where to Log" msgstr "Berichte und Logging / Wohin geloggt wird" -#: utils/misc/guc.c:765 +#: utils/misc/guc.c:751 msgid "Reporting and Logging / When to Log" msgstr "Berichte und Logging / Wann geloggt wird" -#: utils/misc/guc.c:767 +#: utils/misc/guc.c:753 msgid "Reporting and Logging / What to Log" msgstr "Berichte und Logging / Was geloggt wird" -#: utils/misc/guc.c:769 -msgid "Process Title" -msgstr "Prozesstitel" - -#: utils/misc/guc.c:771 -msgid "Statistics" -msgstr "Statistiken" +#: utils/misc/guc.c:755 +msgid "Reporting and Logging / Process Title" +msgstr "Berichte und Logging / Prozesstitel" -#: utils/misc/guc.c:773 +#: utils/misc/guc.c:757 msgid "Statistics / Monitoring" msgstr "Statistiken / Überwachung" -#: utils/misc/guc.c:775 +#: utils/misc/guc.c:759 msgid "Statistics / Query and Index Statistics Collector" msgstr "Statistiken / Statistiksammler für Anfragen und Indexe" -#: utils/misc/guc.c:777 +#: utils/misc/guc.c:761 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc.c:779 -msgid "Client Connection Defaults" -msgstr "Standardeinstellungen für Clientverbindungen" - -#: utils/misc/guc.c:781 +#: utils/misc/guc.c:763 msgid "Client Connection Defaults / Statement Behavior" msgstr "Standardeinstellungen für Clientverbindungen / Anweisungsverhalten" -#: utils/misc/guc.c:783 +#: utils/misc/guc.c:765 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Standardeinstellungen für Clientverbindungen / Locale und Formatierung" -#: utils/misc/guc.c:785 +#: utils/misc/guc.c:767 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Standardeinstellungen für Clientverbindungen / Shared Library Preloading" -#: utils/misc/guc.c:787 +#: utils/misc/guc.c:769 msgid "Client Connection Defaults / Other Defaults" msgstr "Standardeinstellungen für Clientverbindungen / Andere" -#: utils/misc/guc.c:789 +#: utils/misc/guc.c:771 msgid "Lock Management" msgstr "Sperrenverwaltung" -#: utils/misc/guc.c:791 -msgid "Version and Platform Compatibility" -msgstr "Versions- und Plattformkompatibilität" - -#: utils/misc/guc.c:793 +#: utils/misc/guc.c:773 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Versions- und Plattformkompatibilität / Frühere PostgreSQL-Versionen" -#: utils/misc/guc.c:795 +#: utils/misc/guc.c:775 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Versions- und Plattformkompatibilität / Andere Plattformen und Clients" -#: utils/misc/guc.c:797 +#: utils/misc/guc.c:777 msgid "Error Handling" msgstr "Fehlerbehandlung" -#: utils/misc/guc.c:799 +#: utils/misc/guc.c:779 msgid "Preset Options" msgstr "Voreingestellte Optionen" -#: utils/misc/guc.c:801 +#: utils/misc/guc.c:781 msgid "Customized Options" msgstr "Angepasste Optionen" -#: utils/misc/guc.c:803 +#: utils/misc/guc.c:783 msgid "Developer Options" msgstr "Entwickleroptionen" -#: utils/misc/guc.c:861 +#: utils/misc/guc.c:841 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Gültige Einheiten für diesen Parameter sind »B«, »kB«, »MB«, »GB« und »TB«." -#: utils/misc/guc.c:898 +#: utils/misc/guc.c:878 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "Gültige Einheiten für diesen Parameter sind »us«, »ms«, »s«, »min«, »h« und »d«." -#: utils/misc/guc.c:960 +#: utils/misc/guc.c:940 msgid "Enables the planner's use of sequential-scan plans." msgstr "Ermöglicht sequenzielle Scans in Planer." -#: utils/misc/guc.c:970 +#: utils/misc/guc.c:950 msgid "Enables the planner's use of index-scan plans." msgstr "Ermöglicht Index-Scans im Planer." -#: utils/misc/guc.c:980 +#: utils/misc/guc.c:960 msgid "Enables the planner's use of index-only-scan plans." msgstr "Ermöglicht Index-Only-Scans im Planer." -#: utils/misc/guc.c:990 +#: utils/misc/guc.c:970 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Ermöglicht Bitmap-Scans im Planer." -#: utils/misc/guc.c:1000 +#: utils/misc/guc.c:980 msgid "Enables the planner's use of TID scan plans." msgstr "Ermöglicht TID-Scans im Planer." -#: utils/misc/guc.c:1010 +#: utils/misc/guc.c:990 msgid "Enables the planner's use of explicit sort steps." msgstr "Ermöglicht Sortierschritte im Planer." -#: utils/misc/guc.c:1020 +#: utils/misc/guc.c:1000 msgid "Enables the planner's use of incremental sort steps." msgstr "Ermöglicht inkrementelle Sortierschritte im Planer." -#: utils/misc/guc.c:1029 +#: utils/misc/guc.c:1009 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Ermöglicht Hash-Aggregierung im Planer." -#: utils/misc/guc.c:1039 +#: utils/misc/guc.c:1019 msgid "Enables the planner's use of materialization." msgstr "Ermöglicht Materialisierung im Planer." -#: utils/misc/guc.c:1049 +#: utils/misc/guc.c:1029 #, fuzzy #| msgid "Enables the planner's use of parallel hash plans." msgid "Enables the planner's use of result caching." msgstr "Ermöglicht parallele Hash-Pläne im Planer." -#: utils/misc/guc.c:1059 +#: utils/misc/guc.c:1039 msgid "Enables the planner's use of nested-loop join plans." msgstr "Ermöglicht Nested-Loop-Verbunde im Planer." -#: utils/misc/guc.c:1069 +#: utils/misc/guc.c:1049 msgid "Enables the planner's use of merge join plans." msgstr "Ermöglicht Merge-Verbunde im Planer." -#: utils/misc/guc.c:1079 +#: utils/misc/guc.c:1059 msgid "Enables the planner's use of hash join plans." msgstr "Ermöglicht Hash-Verbunde im Planer." -#: utils/misc/guc.c:1089 +#: utils/misc/guc.c:1069 msgid "Enables the planner's use of gather merge plans." msgstr "Ermöglicht Gather-Merge-Pläne im Planer." -#: utils/misc/guc.c:1099 +#: utils/misc/guc.c:1079 msgid "Enables partitionwise join." msgstr "Ermöglicht partitionsweise Verbunde." -#: utils/misc/guc.c:1109 +#: utils/misc/guc.c:1089 msgid "Enables partitionwise aggregation and grouping." msgstr "Ermöglicht partitionsweise Aggregierung und Gruppierung." -#: utils/misc/guc.c:1119 +#: utils/misc/guc.c:1099 msgid "Enables the planner's use of parallel append plans." msgstr "Ermöglicht parallele Append-Pläne im Planer." -#: utils/misc/guc.c:1129 +#: utils/misc/guc.c:1109 msgid "Enables the planner's use of parallel hash plans." msgstr "Ermöglicht parallele Hash-Pläne im Planer." -#: utils/misc/guc.c:1139 -#, fuzzy -#| msgid "Enables plan-time and run-time partition pruning." +#: utils/misc/guc.c:1119 msgid "Enables plan-time and execution-time partition pruning." -msgstr "Ermöglicht Partition-Pruning zur Planzeit und zur Laufzeit." +msgstr "Ermöglicht Partition-Pruning zur Planzeit und zur Ausführungszeit." -#: utils/misc/guc.c:1140 +#: utils/misc/guc.c:1120 msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." msgstr "Erlaubt es dem Planer und dem Executor, Partitionsbegrenzungen mit Bedingungen in der Anfrage zu vergleichen, um festzustellen, welche Partitionen gelesen werden müssen." -#: utils/misc/guc.c:1151 +#: utils/misc/guc.c:1131 #, fuzzy #| msgid "Enables the planner's use of parallel append plans." msgid "Enables the planner's use of async append plans." msgstr "Ermöglicht parallele Append-Pläne im Planer." -#: utils/misc/guc.c:1161 +#: utils/misc/guc.c:1141 msgid "Enables genetic query optimization." msgstr "Ermöglicht genetische Anfrageoptimierung." -#: utils/misc/guc.c:1162 +#: utils/misc/guc.c:1142 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Dieser Algorithmus versucht das Planen ohne erschöpfende Suche durchzuführen." -#: utils/misc/guc.c:1173 +#: utils/misc/guc.c:1153 msgid "Shows whether the current user is a superuser." msgstr "Zeigt, ob der aktuelle Benutzer ein Superuser ist." -#: utils/misc/guc.c:1183 +#: utils/misc/guc.c:1163 msgid "Enables advertising the server via Bonjour." msgstr "Ermöglicht die Bekanntgabe des Servers mit Bonjour." -#: utils/misc/guc.c:1192 +#: utils/misc/guc.c:1172 msgid "Collects transaction commit time." msgstr "Sammelt Commit-Timestamps von Transaktionen." -#: utils/misc/guc.c:1201 +#: utils/misc/guc.c:1181 msgid "Enables SSL connections." msgstr "Ermöglicht SSL-Verbindungen." -#: utils/misc/guc.c:1210 +#: utils/misc/guc.c:1190 msgid "Also use ssl_passphrase_command during server reload." msgstr "ssl_passphrase_command auch beim Neuladen des Servers verwenden." -#: utils/misc/guc.c:1219 +#: utils/misc/guc.c:1199 msgid "Give priority to server ciphersuite order." msgstr "Der Ciphersuite-Reihenfolge des Servers Vorrang geben." -#: utils/misc/guc.c:1228 +#: utils/misc/guc.c:1208 msgid "Forces synchronization of updates to disk." msgstr "Erzwingt die Synchronisierung von Aktualisierungen auf Festplatte." -#: utils/misc/guc.c:1229 +#: utils/misc/guc.c:1209 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "Der Server verwendet den Systemaufruf fsync() an mehreren Stellen, um sicherzustellen, dass Datenänderungen physikalisch auf die Festplatte geschrieben werden. Das stellt sicher, dass der Datenbankcluster nach einem Betriebssystemabsturz oder Hardwarefehler in einem korrekten Zustand wiederhergestellt werden kann." -#: utils/misc/guc.c:1240 +#: utils/misc/guc.c:1220 msgid "Continues processing after a checksum failure." msgstr "Setzt die Verarbeitung trotz Prüfsummenfehler fort." -#: utils/misc/guc.c:1241 +#: utils/misc/guc.c:1221 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "Wenn eine fehlerhafte Prüfsumme entdeckt wird, gibt PostgreSQL normalerweise ein Fehler aus und bricht die aktuelle Transaktion ab. Wenn »ignore_checksum_failure« an ist, dann wird der Fehler ignoriert (aber trotzdem eine Warnung ausgegeben) und die Verarbeitung geht weiter. Dieses Verhalten kann Abstürze und andere ernsthafte Probleme verursachen. Es hat keine Auswirkungen, wenn Prüfsummen nicht eingeschaltet sind." -#: utils/misc/guc.c:1255 +#: utils/misc/guc.c:1235 msgid "Continues processing past damaged page headers." msgstr "Setzt die Verarbeitung trotz kaputter Seitenköpfe fort." -#: utils/misc/guc.c:1256 +#: utils/misc/guc.c:1236 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "Wenn ein kaputter Seitenkopf entdeckt wird, gibt PostgreSQL normalerweise einen Fehler aus und bricht die aktuelle Transaktion ab. Wenn »zero_damaged_pages« an ist, dann wird eine Warnung ausgegeben, die kaputte Seite mit Nullen gefüllt und die Verarbeitung geht weiter. Dieses Verhalten zerstört Daten, nämlich alle Zeilen in der kaputten Seite." -#: utils/misc/guc.c:1269 +#: utils/misc/guc.c:1249 msgid "Continues recovery after an invalid pages failure." msgstr "Setzt die Wiederherstellung trotz Fehler durch ungültige Seiten fort." -#: utils/misc/guc.c:1270 +#: utils/misc/guc.c:1250 msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." msgstr "Wenn WAL-Einträge mit Verweisen auf ungültige Seiten bei der Wiederherstellung erkannt werden, verursacht das einen PANIC-Fehler, wodurch die Wiederherstellung abgebrochen wird. Wenn »ignore_invalid_pages« an ist, dann werden ungültige Seitenverweise in WAL-Einträgen ignoriert (aber trotzen eine Warnung ausgegeben) und die Wiederherstellung wird fortgesetzt. Dieses Verhalten kann Abstürze und Datenverlust verursachen, Datenverfälschung verbreiten oder verstecken sowie andere ernsthafte Probleme verursachen. Es hat nur Auswirkungen im Wiederherstellungs- oder Standby-Modus." -#: utils/misc/guc.c:1288 +#: utils/misc/guc.c:1268 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "Schreibt volle Seiten in den WAL, sobald sie nach einem Checkpoint geändert werden." -#: utils/misc/guc.c:1289 +#: utils/misc/guc.c:1269 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "Ein Seitenschreibvorgang während eines Betriebssystemabsturzes könnte eventuell nur teilweise geschrieben worden sein. Bei der Wiederherstellung sind die im WAL gespeicherten Zeilenänderungen nicht ausreichend. Diese Option schreibt Seiten, sobald sie nach einem Checkpoint geändert worden sind, damit eine volle Wiederherstellung möglich ist." -#: utils/misc/guc.c:1301 -#, fuzzy -#| msgid "cannot execute %s during recovery" -msgid "Prefetch referenced blocks during recovery." -msgstr "%s kann nicht während der Wiederherstellung ausgeführt werden" - -#: utils/misc/guc.c:1302 -msgid "Read ahead of the current replay position to find uncached blocks." -msgstr "" - -#: utils/misc/guc.c:1310 -msgid "Prefetch blocks that have full page images in the WAL." -msgstr "" - -#: utils/misc/guc.c:1311 -msgid "On some systems, there is no benefit to prefetching pages that will be entirely overwritten, but if the logical page size of the filesystem is larger than PostgreSQL's, this can be beneficial. This option has no effect unless recovery_prefetch is enabled." -msgstr "" - -#: utils/misc/guc.c:1323 +#: utils/misc/guc.c:1282 msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification." msgstr "Schreibt volle Seiten in den WAL, sobald sie nach einem Checkpoint geändert werden, auch für eine nicht kritische Änderung." -#: utils/misc/guc.c:1333 +#: utils/misc/guc.c:1292 msgid "Compresses full-page writes written in WAL file." msgstr "Komprimiert in WAL-Dateien geschriebene volle Seiten." -#: utils/misc/guc.c:1343 +#: utils/misc/guc.c:1302 msgid "Writes zeroes to new WAL files before first use." msgstr "Schreibt Nullen in neue WAL-Dateien vor der ersten Verwendung." -#: utils/misc/guc.c:1353 +#: utils/misc/guc.c:1312 msgid "Recycles WAL files by renaming them." msgstr "WAL-Dateien werden durch Umbenennen wiederverwendet." -#: utils/misc/guc.c:1363 +#: utils/misc/guc.c:1322 msgid "Logs each checkpoint." msgstr "Schreibt jeden Checkpoint in den Log." -#: utils/misc/guc.c:1372 +#: utils/misc/guc.c:1331 msgid "Logs each successful connection." msgstr "Schreibt jede erfolgreiche Verbindung in den Log." -#: utils/misc/guc.c:1381 +#: utils/misc/guc.c:1340 msgid "Logs end of a session, including duration." msgstr "Schreibt jedes Verbindungsende mit Sitzungszeit in den Log." -#: utils/misc/guc.c:1390 +#: utils/misc/guc.c:1349 msgid "Logs each replication command." msgstr "Schreibt jeden Replikationsbefehl in den Log." -#: utils/misc/guc.c:1399 +#: utils/misc/guc.c:1358 msgid "Shows whether the running server has assertion checks enabled." msgstr "Zeigt, ob der laufende Server Assertion-Prüfungen aktiviert hat." -#: utils/misc/guc.c:1414 +#: utils/misc/guc.c:1373 msgid "Terminate session on any error." msgstr "Sitzung bei jedem Fehler abbrechen." -#: utils/misc/guc.c:1423 +#: utils/misc/guc.c:1382 msgid "Reinitialize server after backend crash." msgstr "Server nach Absturz eines Serverprozesses reinitialisieren." -#: utils/misc/guc.c:1432 +#: utils/misc/guc.c:1391 #, fuzzy #| msgid "Reinitialize server after backend crash." msgid "Remove temporary files after backend crash." msgstr "Server nach Absturz eines Serverprozesses reinitialisieren." -#: utils/misc/guc.c:1442 +#: utils/misc/guc.c:1401 msgid "Logs the duration of each completed SQL statement." msgstr "Loggt die Dauer jeder abgeschlossenen SQL-Anweisung." -#: utils/misc/guc.c:1451 +#: utils/misc/guc.c:1410 msgid "Logs each query's parse tree." msgstr "Scheibt den Parsebaum jeder Anfrage in den Log." -#: utils/misc/guc.c:1460 +#: utils/misc/guc.c:1419 msgid "Logs each query's rewritten parse tree." msgstr "Schreibt den umgeschriebenen Parsebaum jeder Anfrage in den Log." -#: utils/misc/guc.c:1469 +#: utils/misc/guc.c:1428 msgid "Logs each query's execution plan." msgstr "Schreibt den Ausführungsplan jeder Anfrage in den Log." -#: utils/misc/guc.c:1478 +#: utils/misc/guc.c:1437 msgid "Indents parse and plan tree displays." msgstr "Rückt die Anzeige von Parse- und Planbäumen ein." -#: utils/misc/guc.c:1487 +#: utils/misc/guc.c:1446 #, fuzzy #| msgid "unterminated quoted identifier" msgid "Compute query identifiers." msgstr "Bezeichner in Anführungszeichen nicht abgeschlossen" -#: utils/misc/guc.c:1496 +#: utils/misc/guc.c:1455 msgid "Writes parser performance statistics to the server log." msgstr "Schreibt Parser-Leistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1505 +#: utils/misc/guc.c:1464 msgid "Writes planner performance statistics to the server log." msgstr "Schreibt Planer-Leistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1514 +#: utils/misc/guc.c:1473 msgid "Writes executor performance statistics to the server log." msgstr "Schreibt Executor-Leistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1523 +#: utils/misc/guc.c:1482 msgid "Writes cumulative performance statistics to the server log." msgstr "Schreibt Gesamtleistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1533 +#: utils/misc/guc.c:1492 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Loggt Statistiken über Systemressourcen (Speicher und CPU) während diverser B-Baum-Operationen." -#: utils/misc/guc.c:1545 +#: utils/misc/guc.c:1504 msgid "Collects information about executing commands." msgstr "Sammelt Informationen über ausgeführte Befehle." -#: utils/misc/guc.c:1546 +#: utils/misc/guc.c:1505 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "Schaltet die Sammlung von Informationen über den aktuell ausgeführten Befehl jeder Sitzung ein, einschließlich der Zeit, and dem die Befehlsausführung begann." -#: utils/misc/guc.c:1556 +#: utils/misc/guc.c:1515 msgid "Collects statistics on database activity." msgstr "Sammelt Statistiken über Datenbankaktivität." -#: utils/misc/guc.c:1565 +#: utils/misc/guc.c:1524 msgid "Collects timing statistics for database I/O activity." msgstr "Sammelt Zeitmessungsstatistiken über Datenbank-I/O-Aktivität." -#: utils/misc/guc.c:1574 +#: utils/misc/guc.c:1533 #, fuzzy #| msgid "Collects timing statistics for database I/O activity." msgid "Collects timing statistics for WAL I/O activity." msgstr "Sammelt Zeitmessungsstatistiken über Datenbank-I/O-Aktivität." -#: utils/misc/guc.c:1584 +#: utils/misc/guc.c:1543 msgid "Updates the process title to show the active SQL command." msgstr "Der Prozesstitel wird aktualisiert, um den aktuellen SQL-Befehl anzuzeigen." -#: utils/misc/guc.c:1585 +#: utils/misc/guc.c:1544 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "Ermöglicht das Aktualisieren des Prozesstitels bei jedem von Server empfangenen neuen SQL-Befehl." -#: utils/misc/guc.c:1598 +#: utils/misc/guc.c:1557 msgid "Starts the autovacuum subprocess." msgstr "Startet den Autovacuum-Prozess." -#: utils/misc/guc.c:1608 +#: utils/misc/guc.c:1567 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Erzeugt Debug-Ausgabe für LISTEN und NOTIFY." -#: utils/misc/guc.c:1620 +#: utils/misc/guc.c:1579 msgid "Emits information about lock usage." msgstr "Gibt Informationen über Sperrenverwendung aus." -#: utils/misc/guc.c:1630 +#: utils/misc/guc.c:1589 msgid "Emits information about user lock usage." msgstr "Gibt Informationen über Benutzersperrenverwendung aus." -#: utils/misc/guc.c:1640 +#: utils/misc/guc.c:1599 msgid "Emits information about lightweight lock usage." msgstr "Gibt Informationen über die Verwendung von Lightweight Locks aus." -#: utils/misc/guc.c:1650 +#: utils/misc/guc.c:1609 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Gibt Informationen über alle aktuellen Sperren aus, wenn eine Verklemmung auftritt." -#: utils/misc/guc.c:1662 +#: utils/misc/guc.c:1621 msgid "Logs long lock waits." msgstr "Schreibt Meldungen über langes Warten auf Sperren in den Log." -#: utils/misc/guc.c:1671 +#: utils/misc/guc.c:1630 #, fuzzy #| msgid "abort reason: recovery conflict" msgid "Logs standby recovery conflict waits." msgstr "Abbruchgrund: Konflikt bei Wiederherstellung" -#: utils/misc/guc.c:1680 +#: utils/misc/guc.c:1639 msgid "Logs the host name in the connection logs." msgstr "Schreibt den Hostnamen jeder Verbindung in den Log." -#: utils/misc/guc.c:1681 +#: utils/misc/guc.c:1640 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "In der Standardeinstellung zeigen die Verbindungslogs nur die IP-Adresse der Clienthosts. Wenn Sie den Hostnamen auch anzeigen wollen, dann können Sie diese Option anschalten, aber je nachdem, wie Ihr DNS eingerichtet ist, kann das die Leistung nicht unerheblich beeinträchtigen." -#: utils/misc/guc.c:1692 +#: utils/misc/guc.c:1651 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Behandelt »ausdruck=NULL« als »ausdruck IS NULL«." -#: utils/misc/guc.c:1693 +#: utils/misc/guc.c:1652 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "Wenn an, dann werden Ausdrücke der Form ausdruck = NULL (oder NULL = ausdruck) wie ausdruck IS NULL behandelt, das heißt, sie ergeben wahr, wenn das Ergebnis von ausdruck der NULL-Wert ist, und ansonsten falsch. Das korrekte Verhalten von ausdruck = NULL ist immer den NULL-Wert (für unbekannt) zurückzugeben." -#: utils/misc/guc.c:1705 +#: utils/misc/guc.c:1664 msgid "Enables per-database user names." msgstr "Ermöglicht Datenbank-lokale Benutzernamen." -#: utils/misc/guc.c:1714 +#: utils/misc/guc.c:1673 msgid "Sets the default read-only status of new transactions." msgstr "Setzt den Standardwert für die Read-Only-Einstellung einer neuen Transaktion." -#: utils/misc/guc.c:1724 +#: utils/misc/guc.c:1683 msgid "Sets the current transaction's read-only status." msgstr "Setzt die Read-Only-Einstellung der aktuellen Transaktion." -#: utils/misc/guc.c:1734 +#: utils/misc/guc.c:1693 msgid "Sets the default deferrable status of new transactions." msgstr "Setzt den Standardwert für die Deferrable-Einstellung einer neuen Transaktion." -#: utils/misc/guc.c:1743 +#: utils/misc/guc.c:1702 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "Ob eine serialisierbare Read-Only-Transaktion aufgeschoben werden soll, bis sie ohne mögliche Serialisierungsfehler ausgeführt werden kann." -#: utils/misc/guc.c:1753 +#: utils/misc/guc.c:1712 msgid "Enable row security." msgstr "Schaltet Sicherheit auf Zeilenebene ein." -#: utils/misc/guc.c:1754 +#: utils/misc/guc.c:1713 msgid "When enabled, row security will be applied to all users." msgstr "Wenn eingeschaltet, wird Sicherheit auf Zeilenebene auf alle Benutzer angewendet." -#: utils/misc/guc.c:1762 +#: utils/misc/guc.c:1721 msgid "Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE." msgstr "Prüft Funktionskörper bei der Ausführung von CREATE FUNCTION und CREATE PROCEDURE." -#: utils/misc/guc.c:1771 +#: utils/misc/guc.c:1730 msgid "Enable input of NULL elements in arrays." msgstr "Ermöglicht die Eingabe von NULL-Elementen in Arrays." -#: utils/misc/guc.c:1772 +#: utils/misc/guc.c:1731 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "Wenn dies eingeschaltet ist, wird ein nicht gequotetes NULL in einem Array-Eingabewert als NULL-Wert interpretiert, ansonsten als Zeichenkette." -#: utils/misc/guc.c:1788 +#: utils/misc/guc.c:1747 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS wird nicht mehr unterstützt; kann nur auf falsch gesetzt werden." -#: utils/misc/guc.c:1798 +#: utils/misc/guc.c:1757 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "Startet einen Subprozess, um die Stderr-Ausgabe und/oder CSV-Logs in Logdateien auszugeben." -#: utils/misc/guc.c:1807 +#: utils/misc/guc.c:1766 msgid "Truncate existing log files of same name during log rotation." msgstr "Kürzt existierende Logdateien mit dem selben Namen beim Rotieren." -#: utils/misc/guc.c:1818 +#: utils/misc/guc.c:1777 msgid "Emit information about resource usage in sorting." msgstr "Gibt Informationen über die Ressourcenverwendung beim Sortieren aus." -#: utils/misc/guc.c:1832 +#: utils/misc/guc.c:1791 msgid "Generate debugging output for synchronized scanning." msgstr "Erzeugt Debug-Ausgabe für synchronisiertes Scannen." -#: utils/misc/guc.c:1847 +#: utils/misc/guc.c:1806 msgid "Enable bounded sorting using heap sort." msgstr "Ermöglicht Bounded Sorting mittels Heap-Sort." -#: utils/misc/guc.c:1860 +#: utils/misc/guc.c:1819 msgid "Emit WAL-related debugging output." msgstr "Gibt diverse Debug-Meldungen über WAL aus." -#: utils/misc/guc.c:1872 -msgid "Datetimes are integer based." +#: utils/misc/guc.c:1831 +#, fuzzy +#| msgid "Datetimes are integer based." +msgid "Shows whether datetimes are integer based." msgstr "Datum/Zeit verwendet intern ganze Zahlen." -#: utils/misc/guc.c:1883 +#: utils/misc/guc.c:1842 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "Bestimmt, ob Groß-/Kleinschreibung bei Kerberos- und GSSAPI-Benutzernamen ignoriert werden soll." -#: utils/misc/guc.c:1893 +#: utils/misc/guc.c:1852 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Warnt bei Backslash-Escapes in normalen Zeichenkettenkonstanten." -#: utils/misc/guc.c:1903 +#: utils/misc/guc.c:1862 msgid "Causes '...' strings to treat backslashes literally." msgstr "Bewirkt, dass Zeichenketten der Art '...' Backslashes als normales Zeichen behandeln." -#: utils/misc/guc.c:1914 +#: utils/misc/guc.c:1873 msgid "Enable synchronized sequential scans." msgstr "Ermöglicht synchronisierte sequenzielle Scans." -#: utils/misc/guc.c:1924 +#: utils/misc/guc.c:1883 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Setzt ob die Transaktion mit dem Wiederherstellungsziel einbezogen oder ausgeschlossen wird." -#: utils/misc/guc.c:1934 +#: utils/misc/guc.c:1893 msgid "Allows connections and queries during recovery." msgstr "Erlaubt Verbindungen und Anfragen während der Wiederherstellung." -#: utils/misc/guc.c:1944 +#: utils/misc/guc.c:1903 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Erlaubt Rückmeldungen von einem Hot Standby an den Primärserver, um Anfragekonflikte zu vermeiden." -#: utils/misc/guc.c:1954 +#: utils/misc/guc.c:1913 msgid "Shows whether hot standby is currently active." msgstr "Zeigt, ob Hot Standby aktuell aktiv ist." -#: utils/misc/guc.c:1965 +#: utils/misc/guc.c:1924 msgid "Allows modifications of the structure of system tables." msgstr "Erlaubt Änderungen an der Struktur von Systemtabellen." -#: utils/misc/guc.c:1976 +#: utils/misc/guc.c:1935 msgid "Disables reading from system indexes." msgstr "Schaltet das Lesen aus Systemindexen ab." -#: utils/misc/guc.c:1977 +#: utils/misc/guc.c:1936 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "Das Aktualisieren der Indexe wird nicht verhindert, also ist die Verwendung unbedenklich. Schlimmstenfalls wird alles langsamer." -#: utils/misc/guc.c:1988 +#: utils/misc/guc.c:1947 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Schaltet den rückwärtskompatiblen Modus für Privilegienprüfungen bei Large Objects ein." -#: utils/misc/guc.c:1989 +#: utils/misc/guc.c:1948 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "Überspringt Privilegienprüfungen beim Lesen oder Ändern von Large Objects, zur Kompatibilität mit PostgreSQL-Versionen vor 9.0." -#: utils/misc/guc.c:1999 +#: utils/misc/guc.c:1958 msgid "When generating SQL fragments, quote all identifiers." msgstr "Wenn SQL-Fragmente erzeugt werden, alle Bezeichner quoten." -#: utils/misc/guc.c:2009 +#: utils/misc/guc.c:1968 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Zeigt, ob Datenprüfsummen in diesem Cluster angeschaltet sind." -#: utils/misc/guc.c:2020 +#: utils/misc/guc.c:1979 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Syslog-Nachrichten mit Sequenznummern versehen, um Unterdrückung doppelter Nachrichten zu unterbinden." -#: utils/misc/guc.c:2030 +#: utils/misc/guc.c:1989 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "An Syslog gesendete Nachrichten nach Zeilen und in maximal 1024 Bytes aufteilen." -#: utils/misc/guc.c:2040 +#: utils/misc/guc.c:1999 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Kontrolliert, ob Gather und Gather Merge auch Subpläne ausführen." -#: utils/misc/guc.c:2041 +#: utils/misc/guc.c:2000 msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "Sollen Gather-Knoten auch Subpläne ausführen oder nur Tupel sammeln?" -#: utils/misc/guc.c:2051 +#: utils/misc/guc.c:2010 msgid "Allow JIT compilation." msgstr "Erlaubt JIT-Kompilierung." -#: utils/misc/guc.c:2062 +#: utils/misc/guc.c:2021 msgid "Register JIT-compiled functions with debugger." msgstr "JIT-kompilierte Funktionen im Debugger registrieren." -#: utils/misc/guc.c:2079 +#: utils/misc/guc.c:2038 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "LLVM-Bitcode in Dateien schreiben, um Debuggen von JIT zu erleichtern." -#: utils/misc/guc.c:2090 +#: utils/misc/guc.c:2049 msgid "Allow JIT compilation of expressions." msgstr "Erlaubt JIT-Kompilierung von Ausdrücken." -#: utils/misc/guc.c:2101 +#: utils/misc/guc.c:2060 msgid "Register JIT-compiled functions with perf profiler." msgstr "JIT-kompilierte Funktionen im Profiler perf registrieren." -#: utils/misc/guc.c:2118 +#: utils/misc/guc.c:2077 msgid "Allow JIT compilation of tuple deforming." msgstr "Erlaubt JIT-Kompilierung von Tuple-Deforming." -#: utils/misc/guc.c:2129 +#: utils/misc/guc.c:2088 msgid "Whether to continue running after a failure to sync data files." msgstr "Ob nach fehlgeschlagenem Synchronisieren von Datendateien fortgesetzt werden soll." -#: utils/misc/guc.c:2138 +#: utils/misc/guc.c:2097 msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." msgstr "Bestimmt, ob der WAL-Receiver einen temporären Replikations-Slot erzeugen soll, wenn kein permanenter Slot konfiguriert ist." -#: utils/misc/guc.c:2156 +#: utils/misc/guc.c:2115 msgid "Forces a switch to the next WAL file if a new file has not been started within N seconds." msgstr "Erzwingt das Umschalten zur nächsten WAL-Datei, wenn seit N Sekunden keine neue Datei begonnen worden ist." -#: utils/misc/guc.c:2167 +#: utils/misc/guc.c:2126 msgid "Waits N seconds on connection startup after authentication." msgstr "Wartet beim Starten einer Verbindung N Sekunden nach der Authentifizierung." -#: utils/misc/guc.c:2168 utils/misc/guc.c:2766 +#: utils/misc/guc.c:2127 utils/misc/guc.c:2725 msgid "This allows attaching a debugger to the process." msgstr "Das ermöglicht es, einen Debugger in den Prozess einzuhängen." -#: utils/misc/guc.c:2177 +#: utils/misc/guc.c:2136 msgid "Sets the default statistics target." msgstr "Setzt das voreingestellte Statistikziel." -#: utils/misc/guc.c:2178 +#: utils/misc/guc.c:2137 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "Diese Einstellung gilt für Tabellenspalten, für die kein spaltenspezifisches Ziel mit ALTER TABLE SET STATISTICS gesetzt worden ist." -#: utils/misc/guc.c:2187 +#: utils/misc/guc.c:2146 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Setzt die Größe der FROM-Liste, ab der Unteranfragen nicht kollabiert werden." -#: utils/misc/guc.c:2189 +#: utils/misc/guc.c:2148 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "Der Planer bindet Unteranfragen in die übergeordneten Anfragen ein, wenn die daraus resultierende FROM-Liste nicht mehr als so viele Elemente haben würde." -#: utils/misc/guc.c:2200 +#: utils/misc/guc.c:2159 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Setzt die Größe der FROM-Liste, ab der JOIN-Konstrukte nicht aufgelöst werden." -#: utils/misc/guc.c:2202 +#: utils/misc/guc.c:2161 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "Der Planer löst ausdrückliche JOIN-Konstrukte in FROM-Listen auf, wenn die daraus resultierende FROM-Liste nicht mehr als so viele Elemente haben würde." -#: utils/misc/guc.c:2213 +#: utils/misc/guc.c:2172 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Setzt die Anzahl der Elemente in der FROM-Liste, ab der GEQO verwendet wird." -#: utils/misc/guc.c:2223 +#: utils/misc/guc.c:2182 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: wird für die Berechnung der Vorgabewerte anderer GEQO-Parameter verwendet." -#: utils/misc/guc.c:2233 +#: utils/misc/guc.c:2192 msgid "GEQO: number of individuals in the population." msgstr "GEQO: Anzahl der Individien in der Bevölkerung." -#: utils/misc/guc.c:2234 utils/misc/guc.c:2244 +#: utils/misc/guc.c:2193 utils/misc/guc.c:2203 msgid "Zero selects a suitable default value." msgstr "Null wählt einen passenden Vorgabewert." -#: utils/misc/guc.c:2243 +#: utils/misc/guc.c:2202 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: Anzahl der Iterationen im Algorithmus." -#: utils/misc/guc.c:2255 +#: utils/misc/guc.c:2214 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Setzt die Zeit, die gewartet wird, bis auf Verklemmung geprüft wird." -#: utils/misc/guc.c:2266 +#: utils/misc/guc.c:2225 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Setzt die maximale Verzögerung bevor Anfragen storniert werden, wenn ein Hot-Standby-Server archivierte WAL-Daten verarbeitet." -#: utils/misc/guc.c:2277 +#: utils/misc/guc.c:2236 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "Setzt die maximale Verzögerung bevor Anfragen storniert werden, wenn ein Hot-Standby-Server gestreamte WAL-Daten verarbeitet." -#: utils/misc/guc.c:2288 +#: utils/misc/guc.c:2247 msgid "Sets the minimum delay for applying changes during recovery." msgstr "Setzt die minimale Verzögerung für das Einspielen von Änderungen während der Wiederherstellung." -#: utils/misc/guc.c:2299 +#: utils/misc/guc.c:2258 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "Setzt das maximale Intervall zwischen Statusberichten des WAL-Receivers an den sendenden Server." -#: utils/misc/guc.c:2310 +#: utils/misc/guc.c:2269 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "Setzt die maximale Zeit, um auf den Empfang von Daten vom sendenden Server zu warten." -#: utils/misc/guc.c:2321 +#: utils/misc/guc.c:2280 msgid "Sets the maximum number of concurrent connections." msgstr "Setzt die maximale Anzahl gleichzeitiger Verbindungen." -#: utils/misc/guc.c:2332 +#: utils/misc/guc.c:2291 msgid "Sets the number of connection slots reserved for superusers." msgstr "Setzt die Anzahl der für Superuser reservierten Verbindungen." -#: utils/misc/guc.c:2342 +#: utils/misc/guc.c:2301 #, fuzzy #| msgid "could not map dynamic shared memory segment" msgid "Amount of dynamic shared memory reserved at startup." msgstr "konnte dynamisches Shared-Memory-Segment nicht mappen" -#: utils/misc/guc.c:2357 +#: utils/misc/guc.c:2316 msgid "Sets the number of shared memory buffers used by the server." msgstr "Setzt die Anzahl der vom Server verwendeten Shared-Memory-Puffer." -#: utils/misc/guc.c:2368 +#: utils/misc/guc.c:2327 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Setzt die maximale Anzahl der von jeder Sitzung verwendeten temporären Puffer." -#: utils/misc/guc.c:2379 +#: utils/misc/guc.c:2338 msgid "Sets the TCP port the server listens on." msgstr "Setzt den TCP-Port, auf dem der Server auf Verbindungen wartet." -#: utils/misc/guc.c:2389 +#: utils/misc/guc.c:2348 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Setzt die Zugriffsrechte für die Unix-Domain-Socket." -#: utils/misc/guc.c:2390 +#: utils/misc/guc.c:2349 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Unix-Domain-Sockets verwenden die üblichen Zugriffsrechte für Unix-Dateisysteme. Der Wert dieser Option muss ein numerischer Wert in der von den Systemaufrufen chmod und umask verwendeten Form sein. (Um das gebräuchliche Oktalformat zu verwenden, muss die Zahl mit 0 (einer Null) anfangen.)" -#: utils/misc/guc.c:2404 +#: utils/misc/guc.c:2363 msgid "Sets the file permissions for log files." msgstr "Setzt die Dateizugriffsrechte für Logdateien." -#: utils/misc/guc.c:2405 +#: utils/misc/guc.c:2364 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Der Wert dieser Option muss ein numerischer Wert in der von den Systemaufrufen chmod und umask verwendeten Form sein. (Um das gebräuchliche Oktalformat zu verwenden, muss die Zahl mit 0 (einer Null) anfangen.)" -#: utils/misc/guc.c:2419 -msgid "Mode of the data directory." +#: utils/misc/guc.c:2378 +#, fuzzy +#| msgid "Mode of the data directory." +msgid "Shows the mode of the data directory." msgstr "Zugriffsrechte des Datenverzeichnisses." -#: utils/misc/guc.c:2420 +#: utils/misc/guc.c:2379 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Der Wert dieser Option muss ein numerischer Wert in der von den Systemaufrufen chmod und umask verwendeten Form sein. (Um das gebräuchliche Oktalformat zu verwenden, muss die Zahl mit 0 (einer Null) anfangen.)" -#: utils/misc/guc.c:2433 +#: utils/misc/guc.c:2392 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Setzt die maximale Speichergröße für Anfrage-Arbeitsbereiche." -#: utils/misc/guc.c:2434 +#: utils/misc/guc.c:2393 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "Gibt die Speichermenge an, die für interne Sortiervorgänge und Hashtabellen verwendet werden kann, bevor auf temporäre Dateien umgeschaltet wird." -#: utils/misc/guc.c:2446 +#: utils/misc/guc.c:2405 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Setzt die maximale Speichergröße für Wartungsoperationen." -#: utils/misc/guc.c:2447 +#: utils/misc/guc.c:2406 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Das schließt Operationen wie VACUUM und CREATE INDEX ein." -#: utils/misc/guc.c:2457 +#: utils/misc/guc.c:2416 msgid "Sets the maximum memory to be used for logical decoding." msgstr "Setzt die maximale Speichergröße für logische Dekodierung." -#: utils/misc/guc.c:2458 +#: utils/misc/guc.c:2417 msgid "This much memory can be used by each internal reorder buffer before spilling to disk." msgstr "Gibt die Speichermenge an, die für jeden internen Reorder-Puffer verwendet werden kann, bevor auf Festplatte ausgelagert wird." -#: utils/misc/guc.c:2474 +#: utils/misc/guc.c:2433 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Setzt die maximale Stackgröße, in Kilobytes." -#: utils/misc/guc.c:2485 +#: utils/misc/guc.c:2444 msgid "Limits the total size of all temporary files used by each process." msgstr "Beschränkt die Gesamtgröße aller temporären Dateien, die von einem Prozess verwendet werden." -#: utils/misc/guc.c:2486 +#: utils/misc/guc.c:2445 msgid "-1 means no limit." msgstr "-1 bedeutet keine Grenze." -#: utils/misc/guc.c:2496 +#: utils/misc/guc.c:2455 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Vacuum-Kosten für eine im Puffer-Cache gefundene Seite." -#: utils/misc/guc.c:2506 +#: utils/misc/guc.c:2465 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Vacuum-Kosten für eine nicht im Puffer-Cache gefundene Seite." -#: utils/misc/guc.c:2516 +#: utils/misc/guc.c:2475 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Vacuum-Kosten für eine durch Vacuum schmutzig gemachte Seite." -#: utils/misc/guc.c:2526 +#: utils/misc/guc.c:2485 msgid "Vacuum cost amount available before napping." msgstr "Verfügbare Vacuum-Kosten vor Nickerchen." -#: utils/misc/guc.c:2536 +#: utils/misc/guc.c:2495 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Verfügbare Vacuum-Kosten vor Nickerchen, für Autovacuum." -#: utils/misc/guc.c:2546 +#: utils/misc/guc.c:2505 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "Setzt die maximale Zahl gleichzeitig geöffneter Dateien für jeden Serverprozess." -#: utils/misc/guc.c:2559 +#: utils/misc/guc.c:2518 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Setzt die maximale Anzahl von gleichzeitig vorbereiteten Transaktionen." -#: utils/misc/guc.c:2570 +#: utils/misc/guc.c:2529 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Setzt die minimale Tabellen-OID für das Verfolgen von Sperren." -#: utils/misc/guc.c:2571 +#: utils/misc/guc.c:2530 msgid "Is used to avoid output on system tables." msgstr "Wird verwendet, um Ausgabe für Systemtabellen zu vermeiden." -#: utils/misc/guc.c:2580 +#: utils/misc/guc.c:2539 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Setzt die OID der Tabelle mit bedingungsloser Sperrenverfolgung." -#: utils/misc/guc.c:2592 +#: utils/misc/guc.c:2551 msgid "Sets the maximum allowed duration of any statement." msgstr "Setzt die maximal erlaubte Dauer jeder Anweisung." -#: utils/misc/guc.c:2593 utils/misc/guc.c:2604 utils/misc/guc.c:2615 -#: utils/misc/guc.c:2626 +#: utils/misc/guc.c:2552 utils/misc/guc.c:2563 utils/misc/guc.c:2574 +#: utils/misc/guc.c:2585 msgid "A value of 0 turns off the timeout." msgstr "Der Wert 0 schaltet die Zeitprüfung aus." -#: utils/misc/guc.c:2603 +#: utils/misc/guc.c:2562 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Setzt die maximal erlaubte Dauer, um auf eine Sperre zu warten." -#: utils/misc/guc.c:2614 +#: utils/misc/guc.c:2573 #, fuzzy #| msgid "Sets the maximum allowed duration of any idling transaction." msgid "Sets the maximum allowed idle time between queries, when in a transaction." msgstr "Setzt die maximal erlaubte Dauer einer inaktiven Transaktion." -#: utils/misc/guc.c:2625 +#: utils/misc/guc.c:2584 #, fuzzy #| msgid "Sets the maximum allowed duration of any idling transaction." msgid "Sets the maximum allowed idle time between queries, when not in a transaction." msgstr "Setzt die maximal erlaubte Dauer einer inaktiven Transaktion." -#: utils/misc/guc.c:2636 +#: utils/misc/guc.c:2595 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Mindestalter, bei dem VACUUM eine Tabellenzeile einfrieren soll." -#: utils/misc/guc.c:2646 +#: utils/misc/guc.c:2605 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." -#: utils/misc/guc.c:2656 +#: utils/misc/guc.c:2615 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Mindestalter, bei dem VACUUM eine MultiXactId in einer Tabellenzeile einfrieren soll." -#: utils/misc/guc.c:2666 +#: utils/misc/guc.c:2625 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Multixact-Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." -#: utils/misc/guc.c:2676 +#: utils/misc/guc.c:2635 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Anzahl Transaktionen, um die VACUUM- und HOT-Aufräumen aufgeschoben werden soll." -#: utils/misc/guc.c:2685 +#: utils/misc/guc.c:2644 #, fuzzy #| msgid "Age at which VACUUM should scan whole table to freeze tuples." msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." -#: utils/misc/guc.c:2694 +#: utils/misc/guc.c:2653 #, fuzzy #| msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "Multixact-Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." -#: utils/misc/guc.c:2707 +#: utils/misc/guc.c:2666 msgid "Sets the maximum number of locks per transaction." msgstr "Setzt die maximale Anzahl Sperren pro Transaktion." -#: utils/misc/guc.c:2708 +#: utils/misc/guc.c:2667 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "Die globale Sperrentabelle wird mit der Annahme angelegt, das höchstens max_locks_per_transaction * max_connections verschiedene Objekte gleichzeitig gesperrt werden müssen." -#: utils/misc/guc.c:2719 +#: utils/misc/guc.c:2678 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Setzt die maximale Anzahl Prädikatsperren pro Transaktion." -#: utils/misc/guc.c:2720 +#: utils/misc/guc.c:2679 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "Die globale Prädikatsperrentabelle wird mit der Annahme angelegt, das höchstens max_pred_locks_per_transaction * max_connections verschiedene Objekte gleichzeitig gesperrt werden müssen." -#: utils/misc/guc.c:2731 +#: utils/misc/guc.c:2690 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "Setzt die maximale Anzahl Prädikatsperren für Seiten und Tupel pro Relation." -#: utils/misc/guc.c:2732 +#: utils/misc/guc.c:2691 msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." msgstr "Wenn mehr als diese Gesamtzahl Seiten und Tupel in der selben Relation von einer Verbindung gesperrt sind, werden diese Sperren durch eine Sperre auf Relationsebene ersetzt." -#: utils/misc/guc.c:2742 +#: utils/misc/guc.c:2701 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Setzt die maximale Anzahl Prädikatsperren für Tupel pro Seite." -#: utils/misc/guc.c:2743 +#: utils/misc/guc.c:2702 msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." msgstr "Wenn mehr als diese Anzahl Tupel auf der selben Seite von einer Verbindung gesperrt sind, werden diese Sperren durch eine Sperre auf Seitenebene ersetzt." -#: utils/misc/guc.c:2753 +#: utils/misc/guc.c:2712 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Setzt die maximale Zeit, um die Client-Authentifizierung zu beenden." -#: utils/misc/guc.c:2765 +#: utils/misc/guc.c:2724 msgid "Waits N seconds on connection startup before authentication." msgstr "Wartet beim Starten einer Verbindung N Sekunden vor der Authentifizierung." -#: utils/misc/guc.c:2776 -msgid "Maximum buffer size for reading ahead in the WAL during recovery." -msgstr "" - -#: utils/misc/guc.c:2777 -msgid "This controls the maximum distance we can read ahead in the WAL to prefetch referenced blocks." -msgstr "" - -#: utils/misc/guc.c:2787 +#: utils/misc/guc.c:2735 msgid "Sets the size of WAL files held for standby servers." msgstr "Setzt die Größe der für Standby-Server vorgehaltenen WAL-Dateien." -#: utils/misc/guc.c:2798 +#: utils/misc/guc.c:2746 msgid "Sets the minimum size to shrink the WAL to." msgstr "Setzt die minimale Größe, auf die der WAL geschrumpft wird." -#: utils/misc/guc.c:2810 +#: utils/misc/guc.c:2758 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Setzt die WAL-Größe, die einen Checkpoint auslöst." -#: utils/misc/guc.c:2822 +#: utils/misc/guc.c:2770 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Setzt die maximale Zeit zwischen automatischen WAL-Checkpoints." -#: utils/misc/guc.c:2833 +#: utils/misc/guc.c:2781 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "Schreibt eine Logmeldung, wenn Checkpoint-Segmente häufiger als dieser Wert gefüllt werden." -#: utils/misc/guc.c:2835 +#: utils/misc/guc.c:2783 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "Schreibe Meldung in den Serverlog, wenn Checkpoints, die durch Füllen der Checkpoint-Segmente ausgelöst werden, häufiger als dieser Wert in Sekunden passieren. Null schaltet die Warnung ab." -#: utils/misc/guc.c:2847 utils/misc/guc.c:3063 utils/misc/guc.c:3111 +#: utils/misc/guc.c:2795 utils/misc/guc.c:3011 utils/misc/guc.c:3058 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "Anzahl der Seiten, nach denen getätigte Schreibvorgänge auf die Festplatte zurückgeschrieben werden." -#: utils/misc/guc.c:2858 +#: utils/misc/guc.c:2806 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Setzt die Anzahl Diskseitenpuffer für WAL im Shared Memory." -#: utils/misc/guc.c:2869 +#: utils/misc/guc.c:2817 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Zeit zwischen WAL-Flush-Operationen im WAL-Writer." -#: utils/misc/guc.c:2880 +#: utils/misc/guc.c:2828 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Ein Flush wird ausgelöst, wenn diese Menge WAL vom WAL-Writer geschrieben worden ist." -#: utils/misc/guc.c:2891 +#: utils/misc/guc.c:2839 #, fuzzy #| msgid "Size of new file to fsync instead of writing WAL." msgid "Minimum size of new file to fsync instead of writing WAL." msgstr "Größe ab der neue Datei gefsynct wird statt WAL zu schreiben." -#: utils/misc/guc.c:2902 +#: utils/misc/guc.c:2850 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "Setzt die maximale Anzahl gleichzeitig laufender WAL-Sender-Prozesse." -#: utils/misc/guc.c:2913 +#: utils/misc/guc.c:2861 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Setzt die maximale Anzahl von gleichzeitig definierten Replikations-Slots." -#: utils/misc/guc.c:2923 +#: utils/misc/guc.c:2871 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "Setzt die maximale WAL-Größe, die von Replikations-Slots reserviert werden kann." -#: utils/misc/guc.c:2924 +#: utils/misc/guc.c:2872 msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." msgstr "Replikations-Slots werden als fehlgeschlagen markiert, und Segmente zum Löschen oder Wiederverwenden freigegeben, wenn so viel Platz von WAL auf der Festplatte belegt wird." -#: utils/misc/guc.c:2936 +#: utils/misc/guc.c:2884 msgid "Sets the maximum time to wait for WAL replication." msgstr "Setzt die maximale Zeit, um auf WAL-Replikation zu warten." -#: utils/misc/guc.c:2947 +#: utils/misc/guc.c:2895 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Setzt die Verzögerung in Millisekunden zwischen Transaktionsabschluss und dem Schreiben von WAL auf die Festplatte." -#: utils/misc/guc.c:2959 +#: utils/misc/guc.c:2907 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "Setzt die minimale Anzahl gleichzeitig offener Transaktionen bevor »commit_delay« angewendet wird." -#: utils/misc/guc.c:2970 +#: utils/misc/guc.c:2918 msgid "Sets the number of digits displayed for floating-point values." msgstr "Setzt die Anzahl ausgegebener Ziffern für Fließkommawerte." -#: utils/misc/guc.c:2971 +#: utils/misc/guc.c:2919 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." msgstr "Diese Einstellung betrifft real, double precision und geometrische Datentypen. Null oder ein negativer Parameterwert wird zur Standardziffernanzahl (FLT_DIG bzw. DBL_DIG) hinzuaddiert. Ein Wert größer als Null wählt präzisen Ausgabemodus." -#: utils/misc/guc.c:2983 +#: utils/misc/guc.c:2931 msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." msgstr "Setzt die minimale Ausführungszeit, über der Stichproben aller Anweisungen geloggt werden. Die Stichproben werden durch log_statement_sample_rate bestimmt." -#: utils/misc/guc.c:2986 +#: utils/misc/guc.c:2934 msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "Null loggt eine Stichprobe aller Anfragen. -1 schaltet dieses Feature aus." -#: utils/misc/guc.c:2996 +#: utils/misc/guc.c:2944 msgid "Sets the minimum execution time above which all statements will be logged." msgstr "Setzt die minimale Ausführungszeit, über der alle Anweisungen geloggt werden." -#: utils/misc/guc.c:2998 +#: utils/misc/guc.c:2946 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Null zeigt alle Anfragen. -1 schaltet dieses Feature aus." -#: utils/misc/guc.c:3008 +#: utils/misc/guc.c:2956 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "Setzt die minimale Ausführungszeit, über der Autovacuum-Aktionen geloggt werden." -#: utils/misc/guc.c:3010 +#: utils/misc/guc.c:2958 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Null gibt alls Aktionen aus. -1 schaltet die Log-Aufzeichnung über Autovacuum aus." -#: utils/misc/guc.c:3020 +#: utils/misc/guc.c:2968 msgid "When logging statements, limit logged parameter values to first N bytes." msgstr "Wenn Anweisungen geloggt werden, die geloggten Parameterwerte auf die ersten N Bytes begrenzen." -#: utils/misc/guc.c:3021 utils/misc/guc.c:3032 +#: utils/misc/guc.c:2969 utils/misc/guc.c:2980 msgid "-1 to print values in full." msgstr "-1 um die Werte vollständig auszugeben." -#: utils/misc/guc.c:3031 +#: utils/misc/guc.c:2979 msgid "When reporting an error, limit logged parameter values to first N bytes." msgstr "Wenn ein Fehler ausgegeben wird, die geloggten Parameterwerte auf die ersten N Bytes begrenzen." -#: utils/misc/guc.c:3042 +#: utils/misc/guc.c:2990 msgid "Background writer sleep time between rounds." msgstr "Schlafzeit zwischen Durchläufen des Background-Writers." -#: utils/misc/guc.c:3053 +#: utils/misc/guc.c:3001 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Maximale Anzahl der vom Background-Writer pro Durchlauf zu flushenden LRU-Seiten." -#: utils/misc/guc.c:3076 +#: utils/misc/guc.c:3024 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Anzahl simultaner Anfragen, die das Festplattensubsystem effizient bearbeiten kann." -#: utils/misc/guc.c:3094 +#: utils/misc/guc.c:3042 msgid "A variant of effective_io_concurrency that is used for maintenance work." msgstr "Eine Variante von effective_io_concurrency, die für Wartungsarbeiten verwendet wird." -#: utils/misc/guc.c:3124 +#: utils/misc/guc.c:3071 msgid "Maximum number of concurrent worker processes." msgstr "Maximale Anzahl gleichzeitiger Worker-Prozesse." -#: utils/misc/guc.c:3136 +#: utils/misc/guc.c:3083 msgid "Maximum number of logical replication worker processes." msgstr "Maximale Anzahl Arbeitsprozesse für logische Replikation." -#: utils/misc/guc.c:3148 +#: utils/misc/guc.c:3095 msgid "Maximum number of table synchronization workers per subscription." msgstr "Maximale Anzahl Arbeitsprozesse für Tabellensynchronisation pro Subskription." -#: utils/misc/guc.c:3158 +#: utils/misc/guc.c:3105 msgid "Automatic log file rotation will occur after N minutes." msgstr "Automatische Rotation der Logdateien geschieht nach N Minuten." -#: utils/misc/guc.c:3169 +#: utils/misc/guc.c:3116 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "Automatische Rotation der Logdateien geschieht nach N Kilobytes." -#: utils/misc/guc.c:3180 +#: utils/misc/guc.c:3127 msgid "Shows the maximum number of function arguments." msgstr "Setzt die maximale Anzahl von Funktionsargumenten." -#: utils/misc/guc.c:3191 +#: utils/misc/guc.c:3138 msgid "Shows the maximum number of index keys." msgstr "Zeigt die maximale Anzahl von Indexschlüsseln." -#: utils/misc/guc.c:3202 +#: utils/misc/guc.c:3149 msgid "Shows the maximum identifier length." msgstr "Zeigt die maximale Länge von Bezeichnern." -#: utils/misc/guc.c:3213 +#: utils/misc/guc.c:3160 msgid "Shows the size of a disk block." msgstr "Zeigt die Größe eines Diskblocks." -#: utils/misc/guc.c:3224 +#: utils/misc/guc.c:3171 msgid "Shows the number of pages per disk file." msgstr "Zeigt die Anzahl Seiten pro Diskdatei." -#: utils/misc/guc.c:3235 +#: utils/misc/guc.c:3182 msgid "Shows the block size in the write ahead log." msgstr "Zeigt die Blockgröße im Write-Ahead-Log." -#: utils/misc/guc.c:3246 +#: utils/misc/guc.c:3193 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Setzt die Zeit, die gewartet wird, bevor nach einem fehlgeschlagenen Versuch neue WAL-Daten angefordert werden." -#: utils/misc/guc.c:3258 +#: utils/misc/guc.c:3205 msgid "Shows the size of write ahead log segments." msgstr "Zeigt die Größe eines Write-Ahead-Log-Segments." -#: utils/misc/guc.c:3271 +#: utils/misc/guc.c:3218 msgid "Time to sleep between autovacuum runs." msgstr "Wartezeit zwischen Autovacuum-Durchläufen." -#: utils/misc/guc.c:3281 +#: utils/misc/guc.c:3228 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Mindestanzahl an geänderten oder gelöschten Tupeln vor einem Vacuum." -#: utils/misc/guc.c:3290 +#: utils/misc/guc.c:3237 msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." msgstr "Mindestanzahl an Einfügeoperationen vor einem Vacuum, oder -1 um auszuschalten." -#: utils/misc/guc.c:3299 +#: utils/misc/guc.c:3246 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Mindestanzahl an Einfüge-, Änderungs- oder Löschoperationen vor einem Analyze." -#: utils/misc/guc.c:3309 +#: utils/misc/guc.c:3256 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Alter, nach dem eine Tabelle automatisch gevacuumt wird, um Transaktionsnummernüberlauf zu verhindern." -#: utils/misc/guc.c:3323 +#: utils/misc/guc.c:3271 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Multixact-Alter, nach dem eine Tabelle automatisch gevacuumt wird, um Transaktionsnummernüberlauf zu verhindern." -#: utils/misc/guc.c:3333 +#: utils/misc/guc.c:3281 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Setzt die maximale Anzahl gleichzeitig laufender Autovacuum-Worker-Prozesse." -#: utils/misc/guc.c:3343 +#: utils/misc/guc.c:3291 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "Setzt die maximale Anzahl paralleler Prozesse pro Wartungsoperation." -#: utils/misc/guc.c:3353 +#: utils/misc/guc.c:3301 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Setzt die maximale Anzahl paralleler Prozesse pro Executor-Knoten." -#: utils/misc/guc.c:3364 +#: utils/misc/guc.c:3312 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "Setzt die maximale Anzahl paralleler Arbeitsprozesse, die gleichzeitig aktiv sein können." -#: utils/misc/guc.c:3375 +#: utils/misc/guc.c:3323 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Setzt die maximale Speichergröße für jeden Autovacuum-Worker-Prozess." -#: utils/misc/guc.c:3386 +#: utils/misc/guc.c:3334 msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." msgstr "Zeit bevor ein Snapshot zu alt ist, um Seiten zu lesen, die geändert wurden, nachdem der Snapshot gemacht wurde." -#: utils/misc/guc.c:3387 +#: utils/misc/guc.c:3335 msgid "A value of -1 disables this feature." msgstr "Der Wert -1 schaltet dieses Feature aus." -#: utils/misc/guc.c:3397 +#: utils/misc/guc.c:3345 msgid "Time between issuing TCP keepalives." msgstr "Zeit zwischen TCP-Keepalive-Sendungen." -#: utils/misc/guc.c:3398 utils/misc/guc.c:3409 utils/misc/guc.c:3533 +#: utils/misc/guc.c:3346 utils/misc/guc.c:3357 utils/misc/guc.c:3481 msgid "A value of 0 uses the system default." msgstr "Der Wert 0 verwendet die Systemvoreinstellung." -#: utils/misc/guc.c:3408 +#: utils/misc/guc.c:3356 msgid "Time between TCP keepalive retransmits." msgstr "Zeit zwischen TCP-Keepalive-Neuübertragungen." -#: utils/misc/guc.c:3419 +#: utils/misc/guc.c:3367 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "SSL-Renegotiation wird nicht mehr unterstützt; kann nur auf 0 gesetzt werden." -#: utils/misc/guc.c:3430 +#: utils/misc/guc.c:3378 msgid "Maximum number of TCP keepalive retransmits." msgstr "Maximale Anzahl an TCP-Keepalive-Neuübertragungen." -#: utils/misc/guc.c:3431 +#: utils/misc/guc.c:3379 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "Dies bestimmt die Anzahl von aufeinanderfolgenden Keepalive-Neuübertragungen, die verloren gehen dürfen, bis die Verbindung als tot betrachtet wird. Der Wert 0 verwendet die Betriebssystemvoreinstellung." -#: utils/misc/guc.c:3442 +#: utils/misc/guc.c:3390 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Setzt die maximal erlaubte Anzahl Ergebnisse für eine genaue Suche mit GIN." -#: utils/misc/guc.c:3453 +#: utils/misc/guc.c:3401 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Setzt die Annahme des Planers über die Gesamtgröße der Daten-Caches." -#: utils/misc/guc.c:3454 +#: utils/misc/guc.c:3402 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "Das heißt, die Gesamtgröße der Caches (Kernel-Cache und Shared Buffers), die für Datendateien von PostgreSQL verwendet wird. Das wird in Diskseiten gemessen, welche normalerweise 8 kB groß sind." -#: utils/misc/guc.c:3465 +#: utils/misc/guc.c:3413 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Setzt die Mindestmenge an Tabellendaten für einen parallelen Scan." -#: utils/misc/guc.c:3466 +#: utils/misc/guc.c:3414 msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." msgstr "Wenn der Planer schätzt, dass zu wenige Tabellenseiten gelesen werden werden um diesen Wert zu erreichen, dann wird kein paralleler Scan in Erwägung gezogen werden." -#: utils/misc/guc.c:3476 +#: utils/misc/guc.c:3424 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Setzt die Mindestmenge an Indexdaten für einen parallelen Scan." -#: utils/misc/guc.c:3477 +#: utils/misc/guc.c:3425 msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." msgstr "Wenn der Planer schätzt, dass zu wenige Indexseiten gelesen werden werden um diesen Wert zu erreichen, dann wird kein paralleler Scan in Erwägung gezogen werden." -#: utils/misc/guc.c:3488 +#: utils/misc/guc.c:3436 msgid "Shows the server version as an integer." msgstr "Zeigt die Serverversion als Zahl." -#: utils/misc/guc.c:3499 +#: utils/misc/guc.c:3447 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "Schreibt Meldungen über die Verwendung von temporären Dateien in den Log, wenn sie größer als diese Anzahl an Kilobytes sind." -#: utils/misc/guc.c:3500 +#: utils/misc/guc.c:3448 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "Null loggt alle Dateien. Die Standardeinstellung ist -1 (wodurch dieses Feature ausgeschaltet wird)." -#: utils/misc/guc.c:3510 +#: utils/misc/guc.c:3458 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Setzt die für pg_stat_activity.query reservierte Größe, in Bytes." -#: utils/misc/guc.c:3521 +#: utils/misc/guc.c:3469 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Setzt die maximale Größe der Pending-Liste eines GIN-Index." -#: utils/misc/guc.c:3532 +#: utils/misc/guc.c:3480 msgid "TCP user timeout." msgstr "TCP-User-Timeout." -#: utils/misc/guc.c:3543 +#: utils/misc/guc.c:3491 msgid "The size of huge page that should be requested." msgstr "" -#: utils/misc/guc.c:3554 +#: utils/misc/guc.c:3502 msgid "Aggressively invalidate system caches for debugging purposes." msgstr "" -#: utils/misc/guc.c:3577 +#: utils/misc/guc.c:3525 #, fuzzy #| msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgid "Sets the time interval between checks for disconnection while running queries." msgstr "Setzt das maximale Intervall zwischen Statusberichten des WAL-Receivers an den sendenden Server." -#: utils/misc/guc.c:3597 +#: utils/misc/guc.c:3545 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "Setzt den vom Planer geschätzten Aufwand, um eine sequenzielle Diskseite zu lesen." -#: utils/misc/guc.c:3608 +#: utils/misc/guc.c:3556 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "Setzt den vom Planer geschätzten Aufwand, um eine nichtsequenzielle Diskseite zu lesen." -#: utils/misc/guc.c:3619 +#: utils/misc/guc.c:3567 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "Setzt den vom Planer geschätzten Aufwand für die Verarbeitung einer Zeile." -#: utils/misc/guc.c:3630 +#: utils/misc/guc.c:3578 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "Setzt den vom Planer geschätzten Aufwand für die Verarbeitung eines Indexeintrags während eines Index-Scans." -#: utils/misc/guc.c:3641 +#: utils/misc/guc.c:3589 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "Setzt den vom Planer geschätzten Aufwand für die Verarbeitung eines Operators oder Funktionsaufrufs." -#: utils/misc/guc.c:3652 +#: utils/misc/guc.c:3600 #, fuzzy #| msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to leader backend." msgstr "Setzt den vom Planer geschätzten Aufwand, um eine Zeile vom Arbeitsprozess and das Master-Backend zu senden." -#: utils/misc/guc.c:3663 +#: utils/misc/guc.c:3611 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "Setzt den vom Planer geschätzten Aufwand für das Starten von Arbeitsprozessen für parallele Anfragen." -#: utils/misc/guc.c:3675 +#: utils/misc/guc.c:3623 msgid "Perform JIT compilation if query is more expensive." msgstr "JIT-Kompilierung durchführen, wenn die Anfrage teurer ist." -#: utils/misc/guc.c:3676 +#: utils/misc/guc.c:3624 msgid "-1 disables JIT compilation." msgstr "-1 schaltet JIT-Kompilierung aus." -#: utils/misc/guc.c:3686 +#: utils/misc/guc.c:3634 msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "JIT-kompilierte Funktionen optimieren, wenn die Anfrage teurer ist." -#: utils/misc/guc.c:3687 +#: utils/misc/guc.c:3635 msgid "-1 disables optimization." msgstr "-1 schaltet Optimierung aus." -#: utils/misc/guc.c:3697 +#: utils/misc/guc.c:3645 msgid "Perform JIT inlining if query is more expensive." msgstr "JIT-Inlining durchführen, wenn die Anfrage teurer ist." -#: utils/misc/guc.c:3698 +#: utils/misc/guc.c:3646 msgid "-1 disables inlining." msgstr "-1 schaltet Inlining aus." -#: utils/misc/guc.c:3708 +#: utils/misc/guc.c:3656 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Setzt den vom Planer geschätzten Anteil der Cursor-Zeilen, die ausgelesen werden werden." -#: utils/misc/guc.c:3720 +#: utils/misc/guc.c:3668 msgid "GEQO: selective pressure within the population." msgstr "GEQO: selektiver Auswahldruck in der Bevölkerung." -#: utils/misc/guc.c:3731 +#: utils/misc/guc.c:3679 msgid "GEQO: seed for random path selection." msgstr "GEQO: Ausgangswert für die zufällige Pfadauswahl." -#: utils/misc/guc.c:3742 +#: utils/misc/guc.c:3690 msgid "Multiple of work_mem to use for hash tables." msgstr "Vielfaches von work_mem zur Verwendung bei Hash-Tabellen." -#: utils/misc/guc.c:3753 +#: utils/misc/guc.c:3701 msgid "Multiple of the average buffer usage to free per round." msgstr "Vielfaches der durchschnittlichen freizugebenden Pufferverwendung pro Runde." -#: utils/misc/guc.c:3763 +#: utils/misc/guc.c:3711 msgid "Sets the seed for random-number generation." msgstr "Setzt den Ausgangswert für die Zufallszahlenerzeugung." -#: utils/misc/guc.c:3774 +#: utils/misc/guc.c:3722 msgid "Vacuum cost delay in milliseconds." msgstr "Vacuum-Kosten-Verzögerung in Millisekunden." -#: utils/misc/guc.c:3785 +#: utils/misc/guc.c:3733 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Vacuum-Kosten-Verzögerung in Millisekunden, für Autovacuum." -#: utils/misc/guc.c:3796 +#: utils/misc/guc.c:3744 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Anzahl geänderter oder gelöschter Tupel vor einem Vacuum, relativ zu reltuples." -#: utils/misc/guc.c:3806 +#: utils/misc/guc.c:3754 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "Anzahl eingefügter Tupel vor einem Vacuum, relativ zu reltuples." -#: utils/misc/guc.c:3816 +#: utils/misc/guc.c:3764 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Anzahl eingefügter, geänderter oder gelöschter Tupel vor einem Analyze, relativ zu reltuples." -#: utils/misc/guc.c:3826 +#: utils/misc/guc.c:3774 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "Zeit, die damit verbracht wird, modifizierte Puffer während eines Checkpoints zurückzuschreiben, als Bruchteil des Checkpoint-Intervalls." -#: utils/misc/guc.c:3836 +#: utils/misc/guc.c:3784 msgid "Fraction of statements exceeding log_min_duration_sample to be logged." msgstr "Anteil der zu loggenden Anweisungen, die log_min_duration_sample überschreiten." -#: utils/misc/guc.c:3837 +#: utils/misc/guc.c:3785 msgid "Use a value between 0.0 (never log) and 1.0 (always log)." msgstr "Verwenden Sie einen Wert zwischen 0.0 (nie loggen) und 1.0 (immer loggen)." -#: utils/misc/guc.c:3846 +#: utils/misc/guc.c:3794 #, fuzzy #| msgid "Sets the fraction of transactions to log for new transactions." msgid "Sets the fraction of transactions from which to log all statements." msgstr "Setzt den Bruchteil zu loggender Transaktionen." -#: utils/misc/guc.c:3847 +#: utils/misc/guc.c:3795 #, fuzzy #| msgid "Logs all statements from a fraction of transactions. Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgid "Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgstr "Loggt alle Anweisungen in einem Bruchteil der Transaktionen. Verwenden Sie einen Wert zwischen 0.0 (nie loggen) und 1.0 (alle Anweisungen für alle Transaktionen loggen)." -#: utils/misc/guc.c:3866 +#: utils/misc/guc.c:3814 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Setzt den Shell-Befehl, der aufgerufen wird, um eine WAL-Datei zu archivieren." -#: utils/misc/guc.c:3876 +#: utils/misc/guc.c:3824 msgid "Sets the shell command that will be called to retrieve an archived WAL file." msgstr "Setzt den Shell-Befehl, der aufgerufen wird, um eine archivierte WAL-Datei zurückzuholen." -#: utils/misc/guc.c:3886 +#: utils/misc/guc.c:3834 msgid "Sets the shell command that will be executed at every restart point." msgstr "Setzt den Shell-Befehl, der bei jedem Restart-Punkt ausgeführt wird." -#: utils/misc/guc.c:3896 +#: utils/misc/guc.c:3844 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "Setzt den Shell-Befehl, der einmal am Ende der Wiederherstellung ausgeführt wird." -#: utils/misc/guc.c:3906 +#: utils/misc/guc.c:3854 msgid "Specifies the timeline to recover into." msgstr "Gibt die Zeitleiste für die Wiederherstellung an." -#: utils/misc/guc.c:3916 +#: utils/misc/guc.c:3864 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "Auf »immediate« setzen, um die Wiederherstellung zu beenden, sobald ein konsistenter Zustand erreicht ist." -#: utils/misc/guc.c:3925 +#: utils/misc/guc.c:3873 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "Setzt die Transaktions-ID, bis zu der die Wiederherstellung voranschreiten wird." -#: utils/misc/guc.c:3934 +#: utils/misc/guc.c:3882 msgid "Sets the time stamp up to which recovery will proceed." msgstr "Setzt den Zeitstempel, bis zu dem die Wiederherstellung voranschreiten wird." -#: utils/misc/guc.c:3943 +#: utils/misc/guc.c:3891 msgid "Sets the named restore point up to which recovery will proceed." msgstr "Setzt den benannten Restore-Punkt, bis zu dem die Wiederherstellung voranschreiten wird." -#: utils/misc/guc.c:3952 +#: utils/misc/guc.c:3900 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "Setzt die LSN der Write-Ahead-Log-Position, bis zu der die Wiederherstellung voranschreiten wird." -#: utils/misc/guc.c:3962 +#: utils/misc/guc.c:3910 msgid "Specifies a file name whose presence ends recovery in the standby." msgstr "Gibt einen Dateinamen an, dessen Präsenz die Wiederherstellung im Standby beendet." -#: utils/misc/guc.c:3972 +#: utils/misc/guc.c:3920 msgid "Sets the connection string to be used to connect to the sending server." msgstr "Setzt die Verbindungszeichenkette zur Verbindung mit dem sendenden Server." -#: utils/misc/guc.c:3983 +#: utils/misc/guc.c:3931 msgid "Sets the name of the replication slot to use on the sending server." msgstr "Setzt den Namen des zu verwendenden Replikations-Slots auf dem sendenden Server." -#: utils/misc/guc.c:3993 +#: utils/misc/guc.c:3941 msgid "Sets the client's character set encoding." msgstr "Setzt die Zeichensatzkodierung des Clients." -#: utils/misc/guc.c:4004 +#: utils/misc/guc.c:3952 msgid "Controls information prefixed to each log line." msgstr "Bestimmt die Informationen, die vor jede Logzeile geschrieben werden." -#: utils/misc/guc.c:4005 +#: utils/misc/guc.c:3953 msgid "If blank, no prefix is used." msgstr "Wenn leer, dann wird kein Präfix verwendet." -#: utils/misc/guc.c:4014 +#: utils/misc/guc.c:3962 msgid "Sets the time zone to use in log messages." msgstr "Setzt die in Logmeldungen verwendete Zeitzone." -#: utils/misc/guc.c:4024 +#: utils/misc/guc.c:3972 msgid "Sets the display format for date and time values." msgstr "Setzt das Ausgabeformat für Datums- und Zeitwerte." -#: utils/misc/guc.c:4025 +#: utils/misc/guc.c:3973 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Kontrolliert auch die Interpretation von zweideutigen Datumseingaben." -#: utils/misc/guc.c:4036 +#: utils/misc/guc.c:3984 msgid "Sets the default table access method for new tables." msgstr "Setzt die Standard-Tabellenzugriffsmethode für neue Tabellen." -#: utils/misc/guc.c:4047 +#: utils/misc/guc.c:3995 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Setzt den Standard-Tablespace für Tabellen und Indexe." -#: utils/misc/guc.c:4048 +#: utils/misc/guc.c:3996 msgid "An empty string selects the database's default tablespace." msgstr "Eine leere Zeichenkette wählt den Standard-Tablespace der Datenbank." -#: utils/misc/guc.c:4058 +#: utils/misc/guc.c:4006 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "Setzt den oder die Tablespaces für temporäre Tabellen und Sortierdateien." -#: utils/misc/guc.c:4069 +#: utils/misc/guc.c:4017 msgid "Sets the path for dynamically loadable modules." msgstr "Setzt den Pfad für ladbare dynamische Bibliotheken." -#: utils/misc/guc.c:4070 +#: utils/misc/guc.c:4018 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "Wenn ein dynamisch ladbares Modul geöffnet werden muss und der angegebene Name keine Verzeichniskomponente hat (das heißt er enthält keinen Schrägstrich), dann sucht das System in diesem Pfad nach der angegebenen Datei." -#: utils/misc/guc.c:4083 +#: utils/misc/guc.c:4031 msgid "Sets the location of the Kerberos server key file." msgstr "Setzt den Ort der Kerberos-Server-Schlüsseldatei." -#: utils/misc/guc.c:4094 +#: utils/misc/guc.c:4042 msgid "Sets the Bonjour service name." msgstr "Setzt den Bonjour-Servicenamen." -#: utils/misc/guc.c:4106 +#: utils/misc/guc.c:4054 msgid "Shows the collation order locale." msgstr "Zeigt die Locale für die Sortierreihenfolge." -#: utils/misc/guc.c:4117 +#: utils/misc/guc.c:4065 msgid "Shows the character classification and case conversion locale." msgstr "Zeigt die Locale für Zeichenklassifizierung und Groß-/Kleinschreibung." -#: utils/misc/guc.c:4128 +#: utils/misc/guc.c:4076 msgid "Sets the language in which messages are displayed." msgstr "Setzt die Sprache, in der Mitteilungen ausgegeben werden." -#: utils/misc/guc.c:4138 +#: utils/misc/guc.c:4086 msgid "Sets the locale for formatting monetary amounts." msgstr "Setzt die Locale für die Formatierung von Geldbeträgen." -#: utils/misc/guc.c:4148 +#: utils/misc/guc.c:4096 msgid "Sets the locale for formatting numbers." msgstr "Setzt die Locale für die Formatierung von Zahlen." -#: utils/misc/guc.c:4158 +#: utils/misc/guc.c:4106 msgid "Sets the locale for formatting date and time values." msgstr "Setzt die Locale für die Formatierung von Datums- und Zeitwerten." -#: utils/misc/guc.c:4168 +#: utils/misc/guc.c:4116 msgid "Lists shared libraries to preload into each backend." msgstr "Listet dynamische Bibliotheken, die vorab in jeden Serverprozess geladen werden." -#: utils/misc/guc.c:4179 +#: utils/misc/guc.c:4127 msgid "Lists shared libraries to preload into server." msgstr "Listet dynamische Bibliotheken, die vorab in den Server geladen werden." -#: utils/misc/guc.c:4190 +#: utils/misc/guc.c:4138 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Listet unprivilegierte dynamische Bibliotheken, die vorab in jeden Serverprozess geladen werden." -#: utils/misc/guc.c:4201 +#: utils/misc/guc.c:4149 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Setzt die Schemasuchreihenfolge für Namen ohne Schemaqualifikation." -#: utils/misc/guc.c:4213 -msgid "Sets the server (database) character set encoding." +#: utils/misc/guc.c:4161 +#, fuzzy +#| msgid "Sets the server (database) character set encoding." +msgid "Shows the server (database) character set encoding." msgstr "Setzt die Zeichensatzkodierung des Servers (der Datenbank)." -#: utils/misc/guc.c:4225 +#: utils/misc/guc.c:4173 msgid "Shows the server version." msgstr "Zeigt die Serverversion." -#: utils/misc/guc.c:4237 +#: utils/misc/guc.c:4185 msgid "Sets the current role." msgstr "Setzt die aktuelle Rolle." -#: utils/misc/guc.c:4249 +#: utils/misc/guc.c:4197 msgid "Sets the session user name." msgstr "Setzt den Sitzungsbenutzernamen." -#: utils/misc/guc.c:4260 +#: utils/misc/guc.c:4208 msgid "Sets the destination for server log output." msgstr "Setzt das Ziel für die Serverlogausgabe." -#: utils/misc/guc.c:4261 +#: utils/misc/guc.c:4209 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "Gültige Werte sind Kombinationen von »stderr«, »syslog«, »csvlog« und »eventlog«, je nach Plattform." -#: utils/misc/guc.c:4272 +#: utils/misc/guc.c:4220 msgid "Sets the destination directory for log files." msgstr "Bestimmt das Zielverzeichnis für Logdateien." -#: utils/misc/guc.c:4273 +#: utils/misc/guc.c:4221 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Kann relativ zum Datenverzeichnis oder als absoluter Pfad angegeben werden." -#: utils/misc/guc.c:4283 +#: utils/misc/guc.c:4231 msgid "Sets the file name pattern for log files." msgstr "Bestimmt das Dateinamenmuster für Logdateien." -#: utils/misc/guc.c:4294 +#: utils/misc/guc.c:4242 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Setzt den Programmnamen, mit dem PostgreSQL-Meldungen im Syslog identifiziert werden." -#: utils/misc/guc.c:4305 +#: utils/misc/guc.c:4253 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "Setzt den Programmnamen, mit dem PostgreSQL-Meldungen im Ereignisprotokoll identifiziert werden." -#: utils/misc/guc.c:4316 +#: utils/misc/guc.c:4264 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Setzt die Zeitzone, in der Zeitangaben interpretiert und ausgegeben werden." -#: utils/misc/guc.c:4326 +#: utils/misc/guc.c:4274 msgid "Selects a file of time zone abbreviations." msgstr "Wählt eine Datei mit Zeitzonenabkürzungen." -#: utils/misc/guc.c:4336 +#: utils/misc/guc.c:4284 msgid "Sets the owning group of the Unix-domain socket." msgstr "Setzt die Eigentümergruppe der Unix-Domain-Socket." -#: utils/misc/guc.c:4337 +#: utils/misc/guc.c:4285 msgid "The owning user of the socket is always the user that starts the server." msgstr "Der Eigentümer ist immer der Benutzer, der den Server startet." -#: utils/misc/guc.c:4347 +#: utils/misc/guc.c:4295 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Setzt die Verzeichnisse, in denen Unix-Domain-Sockets erzeugt werden sollen." -#: utils/misc/guc.c:4362 +#: utils/misc/guc.c:4310 msgid "Sets the host name or IP address(es) to listen to." msgstr "Setzt den Hostnamen oder die IP-Adresse(n), auf der auf Verbindungen gewartet wird." -#: utils/misc/guc.c:4377 +#: utils/misc/guc.c:4325 msgid "Sets the server's data directory." msgstr "Setzt das Datenverzeichnis des Servers." -#: utils/misc/guc.c:4388 +#: utils/misc/guc.c:4336 msgid "Sets the server's main configuration file." msgstr "Setzt die Hauptkonfigurationsdatei des Servers." -#: utils/misc/guc.c:4399 +#: utils/misc/guc.c:4347 msgid "Sets the server's \"hba\" configuration file." msgstr "Setzt die »hba«-Konfigurationsdatei des Servers." -#: utils/misc/guc.c:4410 +#: utils/misc/guc.c:4358 msgid "Sets the server's \"ident\" configuration file." msgstr "Setzt die »ident«-Konfigurationsdatei des Servers." -#: utils/misc/guc.c:4421 +#: utils/misc/guc.c:4369 msgid "Writes the postmaster PID to the specified file." msgstr "Schreibt die Postmaster-PID in die angegebene Datei." -#: utils/misc/guc.c:4432 -msgid "Name of the SSL library." +#: utils/misc/guc.c:4380 +#, fuzzy +#| msgid "Name of the SSL library." +msgid "Shows the name of the SSL library." msgstr "Name der SSL-Bibliothek." -#: utils/misc/guc.c:4447 +#: utils/misc/guc.c:4395 msgid "Location of the SSL server certificate file." msgstr "Ort der SSL-Serverzertifikatsdatei." -#: utils/misc/guc.c:4457 +#: utils/misc/guc.c:4405 msgid "Location of the SSL server private key file." msgstr "Setzt den Ort der Datei mit dem privaten SSL-Server-Schlüssel." -#: utils/misc/guc.c:4467 +#: utils/misc/guc.c:4415 msgid "Location of the SSL certificate authority file." msgstr "Ort der SSL-Certificate-Authority-Datei." -#: utils/misc/guc.c:4477 +#: utils/misc/guc.c:4425 msgid "Location of the SSL certificate revocation list file." msgstr "Ort der SSL-Certificate-Revocation-List-Datei." -#: utils/misc/guc.c:4487 +#: utils/misc/guc.c:4435 #, fuzzy #| msgid "Location of the SSL certificate revocation list file." msgid "Location of the SSL certificate revocation list directory." msgstr "Ort der SSL-Certificate-Revocation-List-Datei." -#: utils/misc/guc.c:4497 +#: utils/misc/guc.c:4445 msgid "Writes temporary statistics files to the specified directory." msgstr "Schreibt temporäre Statistikdateien in das angegebene Verzeichnis." -#: utils/misc/guc.c:4508 +#: utils/misc/guc.c:4456 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "Anzahl synchroner Standbys und Liste der Namen der möglichen synchronen Standbys." -#: utils/misc/guc.c:4519 +#: utils/misc/guc.c:4467 msgid "Sets default text search configuration." msgstr "Setzt die vorgegebene Textsuchekonfiguration." -#: utils/misc/guc.c:4529 +#: utils/misc/guc.c:4477 msgid "Sets the list of allowed SSL ciphers." msgstr "Setzt die Liste der erlaubten SSL-Verschlüsselungsalgorithmen." -#: utils/misc/guc.c:4544 +#: utils/misc/guc.c:4492 msgid "Sets the curve to use for ECDH." msgstr "Setzt die für ECDH zu verwendende Kurve." -#: utils/misc/guc.c:4559 +#: utils/misc/guc.c:4507 msgid "Location of the SSL DH parameters file." msgstr "Setzt den Ort der SSL-DH-Parameter-Datei." -#: utils/misc/guc.c:4570 +#: utils/misc/guc.c:4518 msgid "Command to obtain passphrases for SSL." msgstr "Befehl zum Einlesen von Passphrasen für SSL." -#: utils/misc/guc.c:4581 +#: utils/misc/guc.c:4529 msgid "Sets the application name to be reported in statistics and logs." msgstr "Setzt den Anwendungsnamen, der in Statistiken und Logs verzeichnet wird." -#: utils/misc/guc.c:4592 +#: utils/misc/guc.c:4540 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Setzt den Namen des Clusters, welcher im Prozesstitel angezeigt wird." -#: utils/misc/guc.c:4603 +#: utils/misc/guc.c:4551 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Setzt die WAL-Resource-Manager, für die WAL-Konsistenzprüfungen durchgeführt werden." -#: utils/misc/guc.c:4604 +#: utils/misc/guc.c:4552 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "Volle Seitenabbilder werden für alle Datenblöcke geloggt und gegen die Resultate der WAL-Wiederherstellung geprüft." -#: utils/misc/guc.c:4614 +#: utils/misc/guc.c:4562 msgid "JIT provider to use." msgstr "Zu verwendender JIT-Provider." -#: utils/misc/guc.c:4625 +#: utils/misc/guc.c:4573 msgid "Log backtrace for errors in these functions." msgstr "Backtrace für Fehler in diesen Funktionen loggen." -#: utils/misc/guc.c:4645 +#: utils/misc/guc.c:4593 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Bestimmt, ob »\\'« in Zeichenkettenkonstanten erlaubt ist." -#: utils/misc/guc.c:4655 +#: utils/misc/guc.c:4603 msgid "Sets the output format for bytea." msgstr "Setzt das Ausgabeformat für bytea." -#: utils/misc/guc.c:4665 +#: utils/misc/guc.c:4613 msgid "Sets the message levels that are sent to the client." msgstr "Setzt die Meldungstypen, die an den Client gesendet werden." -#: utils/misc/guc.c:4666 utils/misc/guc.c:4742 utils/misc/guc.c:4753 -#: utils/misc/guc.c:4829 +#: utils/misc/guc.c:4614 utils/misc/guc.c:4690 utils/misc/guc.c:4701 +#: utils/misc/guc.c:4777 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "Jeder Wert schließt alle ihm folgenden Werte mit ein. Je weiter hinten der Wert steht, desto weniger Meldungen werden gesendet werden." -#: utils/misc/guc.c:4676 +#: utils/misc/guc.c:4624 msgid "Enables the planner to use constraints to optimize queries." msgstr "Ermöglicht dem Planer die Verwendung von Constraints, um Anfragen zu optimieren." -#: utils/misc/guc.c:4677 +#: utils/misc/guc.c:4625 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "Tabellen-Scans werden übersprungen, wenn deren Constraints garantieren, dass keine Zeile mit der Abfrage übereinstimmt." -#: utils/misc/guc.c:4688 +#: utils/misc/guc.c:4636 #, fuzzy #| msgid "Sets the default table access method for new tables." msgid "Sets the default compression for new columns." msgstr "Setzt die Standard-Tabellenzugriffsmethode für neue Tabellen." -#: utils/misc/guc.c:4699 +#: utils/misc/guc.c:4647 msgid "Sets the transaction isolation level of each new transaction." msgstr "Setzt den Transaktionsisolationsgrad neuer Transaktionen." -#: utils/misc/guc.c:4709 +#: utils/misc/guc.c:4657 msgid "Sets the current transaction's isolation level." msgstr "Zeigt den Isolationsgrad der aktuellen Transaktion." -#: utils/misc/guc.c:4720 +#: utils/misc/guc.c:4668 msgid "Sets the display format for interval values." msgstr "Setzt das Ausgabeformat für Intervallwerte." -#: utils/misc/guc.c:4731 +#: utils/misc/guc.c:4679 msgid "Sets the verbosity of logged messages." msgstr "Setzt den Detailgrad von geloggten Meldungen." -#: utils/misc/guc.c:4741 +#: utils/misc/guc.c:4689 msgid "Sets the message levels that are logged." msgstr "Setzt die Meldungstypen, die geloggt werden." -#: utils/misc/guc.c:4752 +#: utils/misc/guc.c:4700 msgid "Causes all statements generating error at or above this level to be logged." msgstr "Schreibt alle Anweisungen, die einen Fehler auf dieser Stufe oder höher verursachen, in den Log." -#: utils/misc/guc.c:4763 +#: utils/misc/guc.c:4711 msgid "Sets the type of statements logged." msgstr "Setzt die Anweisungsarten, die geloggt werden." -#: utils/misc/guc.c:4773 +#: utils/misc/guc.c:4721 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "Setzt die zu verwendende Syslog-»Facility«, wenn Syslog angeschaltet ist." -#: utils/misc/guc.c:4788 +#: utils/misc/guc.c:4736 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "Setzt das Sitzungsverhalten für Trigger und Regeln." -#: utils/misc/guc.c:4798 +#: utils/misc/guc.c:4746 msgid "Sets the current transaction's synchronization level." msgstr "Setzt den Synchronisationsgrad der aktuellen Transaktion." -#: utils/misc/guc.c:4808 +#: utils/misc/guc.c:4756 msgid "Allows archiving of WAL files using archive_command." msgstr "Erlaubt die Archivierung von WAL-Dateien mittels archive_command." -#: utils/misc/guc.c:4818 +#: utils/misc/guc.c:4766 msgid "Sets the action to perform upon reaching the recovery target." msgstr "Setzt die Aktion, die beim Erreichen des Wiederherstellungsziels durchgeführt wird." -#: utils/misc/guc.c:4828 +#: utils/misc/guc.c:4776 msgid "Enables logging of recovery-related debugging information." msgstr "Ermöglicht das Loggen von Debug-Informationen über die Wiederherstellung." -#: utils/misc/guc.c:4844 +#: utils/misc/guc.c:4792 msgid "Collects function-level statistics on database activity." msgstr "Sammelt Statistiken auf Funktionsebene über Datenbankaktivität." -#: utils/misc/guc.c:4854 +#: utils/misc/guc.c:4802 #, fuzzy #| msgid "Set the level of information written to the WAL." msgid "Sets the level of information written to the WAL." msgstr "Setzt den Umfang der in den WAL geschriebenen Informationen." -#: utils/misc/guc.c:4864 +#: utils/misc/guc.c:4812 msgid "Selects the dynamic shared memory implementation used." msgstr "Wählt die zu verwendende Implementierung von dynamischem Shared Memory." -#: utils/misc/guc.c:4874 +#: utils/misc/guc.c:4822 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "Wählt die Shared-Memory-Implementierung, die für den Haupt-Shared-Memory-Bereich verwendet wird." -#: utils/misc/guc.c:4884 +#: utils/misc/guc.c:4832 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Wählt die Methode, um das Schreiben von WAL-Änderungen auf die Festplatte zu erzwingen." -#: utils/misc/guc.c:4894 +#: utils/misc/guc.c:4842 msgid "Sets how binary values are to be encoded in XML." msgstr "Setzt, wie binäre Werte in XML kodiert werden." -#: utils/misc/guc.c:4904 +#: utils/misc/guc.c:4852 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "Setzt, ob XML-Daten in impliziten Parse- und Serialisierungsoperationen als Dokument oder Fragment betrachtet werden sollen." -#: utils/misc/guc.c:4915 +#: utils/misc/guc.c:4863 msgid "Use of huge pages on Linux or Windows." msgstr "Huge Pages auf Linux oder Windows verwenden." -#: utils/misc/guc.c:4925 +#: utils/misc/guc.c:4873 msgid "Forces use of parallel query facilities." msgstr "Verwendung der Einrichtungen für parallele Anfragen erzwingen." -#: utils/misc/guc.c:4926 +#: utils/misc/guc.c:4874 msgid "If possible, run query using a parallel worker and with parallel restrictions." msgstr "Wenn möglich werden Anfragen in einem parallelen Arbeitsprozess und mit parallelen Beschränkungen ausgeführt." -#: utils/misc/guc.c:4936 +#: utils/misc/guc.c:4884 msgid "Chooses the algorithm for encrypting passwords." msgstr "Wählt den Algorithmus zum Verschlüsseln von Passwörtern." -#: utils/misc/guc.c:4946 +#: utils/misc/guc.c:4894 msgid "Controls the planner's selection of custom or generic plan." msgstr "Kontrolliert, ob der Planer einen maßgeschneiderten oder einen allgemeinen Plan verwendet." -#: utils/misc/guc.c:4947 +#: utils/misc/guc.c:4895 msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." msgstr "Vorbereitete Anweisungen können maßgeschneiderte oder allgemeine Pläne haben und der Planer wird versuchen, den besseren auszuwählen. Diese Einstellung kann das Standardverhalten außer Kraft setzen." -#: utils/misc/guc.c:4959 +#: utils/misc/guc.c:4907 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "Setzt die minimale zu verwendende SSL/TLS-Protokollversion." -#: utils/misc/guc.c:4971 +#: utils/misc/guc.c:4919 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "Setzt die maximale zu verwendende SSL/TLS-Protokollversion." -#: utils/misc/guc.c:4983 +#: utils/misc/guc.c:4931 msgid "Sets the method for synchronizing the data directory before crash recovery." msgstr "" -#: utils/misc/guc.c:5551 +#: utils/misc/guc.c:5499 #, fuzzy, c-format #| msgid "unrecognized configuration parameter \"%s\"" msgid "invalid configuration parameter name \"%s\"" msgstr "unbekannter Konfigurationsparameter »%s«" -#: utils/misc/guc.c:5553 +#: utils/misc/guc.c:5501 #, c-format msgid "Custom parameter names must be of the form \"identifier.identifier\"." msgstr "" -#: utils/misc/guc.c:5562 utils/misc/guc.c:9321 +#: utils/misc/guc.c:5510 utils/misc/guc.c:9269 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "unbekannter Konfigurationsparameter »%s«" -#: utils/misc/guc.c:5855 +#: utils/misc/guc.c:5803 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: konnte nicht auf Verzeichnis »%s« zugreifen: %s\n" -#: utils/misc/guc.c:5860 +#: utils/misc/guc.c:5808 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "Führen Sie initdb oder pg_basebackup aus, um ein PostgreSQL-Datenverzeichnis zu initialisieren.\n" -#: utils/misc/guc.c:5880 +#: utils/misc/guc.c:5828 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -28161,12 +28052,12 @@ msgstr "" "Sie müssen die Kommandozeilenoption --config-file oder -D angegeben oder\n" "die Umgebungsvariable PGDATA setzen.\n" -#: utils/misc/guc.c:5899 +#: utils/misc/guc.c:5847 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s: konnte nicht auf die Serverkonfigurationsdatei »%s« zugreifen: %s\n" -#: utils/misc/guc.c:5925 +#: utils/misc/guc.c:5873 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -28176,7 +28067,7 @@ msgstr "" "zu finden sind. Sie können dies mit »data_directory« in »%s«, mit der\n" "Kommandozeilenoption -D oder der Umgebungsvariable PGDATA angeben.\n" -#: utils/misc/guc.c:5973 +#: utils/misc/guc.c:5921 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -28186,7 +28077,7 @@ msgstr "" "Sie können dies mit »hba_file« in »%s«, mit der\n" "Kommandozeilenoption -D oder der Umgebungsvariable PGDATA angeben.\n" -#: utils/misc/guc.c:5996 +#: utils/misc/guc.c:5944 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -28196,183 +28087,183 @@ msgstr "" "Sie können dies mit »ident_file« in »%s«, mit der\n" "Kommandozeilenoption -D oder der Umgebungsvariable PGDATA angeben.\n" -#: utils/misc/guc.c:6921 +#: utils/misc/guc.c:6869 msgid "Value exceeds integer range." msgstr "Wert überschreitet Bereich für ganze Zahlen." -#: utils/misc/guc.c:7157 +#: utils/misc/guc.c:7105 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s ist außerhalb des gültigen Bereichs für Parameter »%s« (%d ... %d)" -#: utils/misc/guc.c:7193 +#: utils/misc/guc.c:7141 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s ist außerhalb des gültigen Bereichs für Parameter »%s« (%g ... %g)" -#: utils/misc/guc.c:7353 utils/misc/guc.c:8725 +#: utils/misc/guc.c:7301 utils/misc/guc.c:8673 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "während einer parallelen Operation können keine Parameter gesetzt werden" -#: utils/misc/guc.c:7370 utils/misc/guc.c:8566 +#: utils/misc/guc.c:7318 utils/misc/guc.c:8514 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "Parameter »%s« kann nicht geändert werden" -#: utils/misc/guc.c:7403 +#: utils/misc/guc.c:7351 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "Parameter »%s« kann jetzt nicht geändert werden" -#: utils/misc/guc.c:7421 utils/misc/guc.c:7468 utils/misc/guc.c:11366 +#: utils/misc/guc.c:7369 utils/misc/guc.c:7416 utils/misc/guc.c:11314 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "keine Berechtigung, um Parameter »%s« zu setzen" -#: utils/misc/guc.c:7458 +#: utils/misc/guc.c:7406 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "Parameter »%s« kann nach Start der Verbindung nicht geändert werden" -#: utils/misc/guc.c:7506 +#: utils/misc/guc.c:7454 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "Parameter »%s« kann nicht in einer Security-Definer-Funktion gesetzt werden" -#: utils/misc/guc.c:8139 utils/misc/guc.c:8186 utils/misc/guc.c:9583 +#: utils/misc/guc.c:8087 utils/misc/guc.c:8134 utils/misc/guc.c:9531 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "nur Superuser oder Mitglieder von pg_read_all_settings können »%s« ansehen" -#: utils/misc/guc.c:8270 +#: utils/misc/guc.c:8218 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s darf nur ein Argument haben" -#: utils/misc/guc.c:8518 +#: utils/misc/guc.c:8466 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "nur Superuser können den Befehl ALTER SYSTEM ausführen" -#: utils/misc/guc.c:8599 +#: utils/misc/guc.c:8547 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "Parameterwert für ALTER SYSTEM darf keine Newline enthalten" -#: utils/misc/guc.c:8644 +#: utils/misc/guc.c:8592 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "konnte Inhalt der Datei »%s« nicht parsen" -#: utils/misc/guc.c:8801 +#: utils/misc/guc.c:8749 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT ist nicht implementiert" -#: utils/misc/guc.c:8885 +#: utils/misc/guc.c:8833 #, c-format msgid "SET requires parameter name" msgstr "SET benötigt Parameternamen" -#: utils/misc/guc.c:9018 +#: utils/misc/guc.c:8966 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "Versuch, den Parameter »%s« zu redefinieren" -#: utils/misc/guc.c:10813 +#: utils/misc/guc.c:10761 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "beim Setzen von Parameter »%s« auf »%s«" -#: utils/misc/guc.c:10978 +#: utils/misc/guc.c:10926 #, c-format msgid "parameter \"%s\" could not be set" msgstr "Parameter »%s« kann nicht gesetzt werden" -#: utils/misc/guc.c:11070 +#: utils/misc/guc.c:11018 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "konnte Wert von Parameter »%s« nicht lesen" -#: utils/misc/guc.c:11428 utils/misc/guc.c:11462 +#: utils/misc/guc.c:11376 utils/misc/guc.c:11410 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "ungültiger Wert für Parameter »%s«: %d" -#: utils/misc/guc.c:11496 +#: utils/misc/guc.c:11444 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "ungültiger Wert für Parameter »%s«: %g" -#: utils/misc/guc.c:11783 +#: utils/misc/guc.c:11731 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "»temp_buffers« kann nicht geändert werden, nachdem in der Sitzung auf temporäre Tabellen zugriffen wurde." -#: utils/misc/guc.c:11795 +#: utils/misc/guc.c:11743 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour wird von dieser Installation nicht unterstützt" -#: utils/misc/guc.c:11808 +#: utils/misc/guc.c:11756 #, c-format msgid "SSL is not supported by this build" msgstr "SSL wird von dieser Installation nicht unterstützt" -#: utils/misc/guc.c:11820 +#: utils/misc/guc.c:11768 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Kann Parameter nicht einschalten, wenn »log_statement_stats« an ist." -#: utils/misc/guc.c:11832 +#: utils/misc/guc.c:11780 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "Kann »log_statement_stats« nicht einschalten, wenn »log_parser_stats«, »log_planner_stats« oder »log_executor_stats« an ist." -#: utils/misc/guc.c:12062 +#: utils/misc/guc.c:12010 #, c-format msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "effective_io_concurrency muss auf Plattformen ohne posix_fadvise() auf 0 gesetzt sein." -#: utils/misc/guc.c:12075 +#: utils/misc/guc.c:12023 #, c-format msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "maintenance_io_concurrency muss auf Plattformen ohne posix_fadvise() auf 0 gesetzt sein." -#: utils/misc/guc.c:12089 +#: utils/misc/guc.c:12037 #, fuzzy, c-format #| msgid "huge pages not supported on this platform" msgid "huge_page_size must be 0 on this platform." msgstr "Huge Pages werden auf dieser Plattform nicht unterstützt" -#: utils/misc/guc.c:12103 +#: utils/misc/guc.c:12051 #, fuzzy, c-format #| msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgid "client_connection_check_interval must be set to 0 on platforms that lack POLLRDHUP." msgstr "maintenance_io_concurrency muss auf Plattformen ohne posix_fadvise() auf 0 gesetzt sein." -#: utils/misc/guc.c:12245 +#: utils/misc/guc.c:12179 #, c-format msgid "invalid character" msgstr "ungültiges Zeichen" -#: utils/misc/guc.c:12305 +#: utils/misc/guc.c:12239 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline ist keine gültige Zahl." -#: utils/misc/guc.c:12345 +#: utils/misc/guc.c:12279 #, c-format msgid "multiple recovery targets specified" msgstr "mehrere Wiederherstellungsziele angegeben" -#: utils/misc/guc.c:12346 +#: utils/misc/guc.c:12280 #, c-format msgid "At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set." msgstr "Höchstens eins aus recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid darf gesetzt sein." -#: utils/misc/guc.c:12354 +#: utils/misc/guc.c:12288 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "Der einzige erlaubte Wert ist »immediate«." diff --git a/src/backend/po/es.po b/src/backend/po/es.po index 93d568da3a33e..628f08f2670e6 100644 --- a/src/backend/po/es.po +++ b/src/backend/po/es.po @@ -61,8 +61,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL server 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:40+0000\n" -"PO-Revision-Date: 2020-10-16 16:47-0300\n" +"POT-Creation-Date: 2021-05-14 19:40+0000\n" +"PO-Revision-Date: 2021-05-17 14:27+0200\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -79,37 +79,36 @@ msgid "not recorded" msgstr "no registrado" #: ../common/controldata_utils.c:68 ../common/controldata_utils.c:73 -#: commands/copy.c:3495 commands/extension.c:3436 utils/adt/genfile.c:125 +#: commands/copyfrom.c:1516 commands/extension.c:3455 utils/adt/genfile.c:128 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "no se pudo abrir archivo «%s» para lectura: %m" #: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1276 access/transam/xlog.c:3503 -#: access/transam/xlog.c:4728 access/transam/xlog.c:11121 -#: access/transam/xlog.c:11134 access/transam/xlog.c:11587 -#: access/transam/xlog.c:11667 access/transam/xlog.c:11706 -#: access/transam/xlog.c:11749 access/transam/xlogfuncs.c:662 -#: access/transam/xlogfuncs.c:681 commands/extension.c:3446 libpq/hba.c:499 -#: replication/logical/origin.c:717 replication/logical/origin.c:753 -#: replication/logical/reorderbuffer.c:3599 -#: replication/logical/snapbuild.c:1741 replication/logical/snapbuild.c:1783 -#: replication/logical/snapbuild.c:1811 replication/logical/snapbuild.c:1838 -#: replication/slot.c:1622 replication/slot.c:1663 replication/walsender.c:543 -#: storage/file/buffile.c:441 storage/file/copydir.c:195 -#: utils/adt/genfile.c:200 utils/adt/misc.c:763 utils/cache/relmapper.c:741 +#: access/transam/twophase.c:1271 access/transam/xlog.c:3547 +#: access/transam/xlog.c:4772 access/transam/xlog.c:11338 +#: access/transam/xlog.c:11351 access/transam/xlog.c:11804 +#: access/transam/xlog.c:11884 access/transam/xlog.c:11921 +#: access/transam/xlog.c:11981 access/transam/xlogfuncs.c:703 +#: access/transam/xlogfuncs.c:722 commands/extension.c:3465 libpq/hba.c:536 +#: replication/basebackup.c:2020 replication/logical/origin.c:729 +#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4876 +#: replication/logical/snapbuild.c:1733 replication/logical/snapbuild.c:1775 +#: replication/logical/snapbuild.c:1802 replication/slot.c:1658 +#: replication/slot.c:1699 replication/walsender.c:544 +#: storage/file/buffile.c:445 storage/file/copydir.c:195 +#: utils/adt/genfile.c:202 utils/adt/misc.c:859 utils/cache/relmapper.c:741 #, c-format msgid "could not read file \"%s\": %m" msgstr "no se pudo leer el archivo «%s»: %m" #: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 -#: access/transam/twophase.c:1279 access/transam/xlog.c:3508 -#: access/transam/xlog.c:4733 replication/logical/origin.c:722 -#: replication/logical/origin.c:761 replication/logical/snapbuild.c:1746 -#: replication/logical/snapbuild.c:1788 replication/logical/snapbuild.c:1816 -#: replication/logical/snapbuild.c:1843 replication/slot.c:1626 -#: replication/slot.c:1667 replication/walsender.c:548 +#: access/transam/xlog.c:3552 access/transam/xlog.c:4777 +#: replication/basebackup.c:2024 replication/logical/origin.c:734 +#: replication/logical/origin.c:773 replication/logical/snapbuild.c:1738 +#: replication/logical/snapbuild.c:1780 replication/logical/snapbuild.c:1807 +#: replication/slot.c:1662 replication/slot.c:1703 replication/walsender.c:549 #: utils/cache/relmapper.c:745 #, c-format msgid "could not read file \"%s\": read %d of %zu" @@ -117,20 +116,20 @@ msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" #: ../common/controldata_utils.c:112 ../common/controldata_utils.c:117 #: ../common/controldata_utils.c:256 ../common/controldata_utils.c:259 -#: access/heap/rewriteheap.c:1181 access/heap/rewriteheap.c:1284 +#: access/heap/rewriteheap.c:1185 access/heap/rewriteheap.c:1288 #: access/transam/timeline.c:392 access/transam/timeline.c:438 -#: access/transam/timeline.c:516 access/transam/twophase.c:1288 -#: access/transam/twophase.c:1676 access/transam/xlog.c:3375 -#: access/transam/xlog.c:3543 access/transam/xlog.c:3548 -#: access/transam/xlog.c:3876 access/transam/xlog.c:4698 -#: access/transam/xlog.c:5622 access/transam/xlogfuncs.c:687 -#: commands/copy.c:1810 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 -#: replication/logical/origin.c:655 replication/logical/origin.c:794 -#: replication/logical/reorderbuffer.c:3657 -#: replication/logical/snapbuild.c:1653 replication/logical/snapbuild.c:1851 -#: replication/slot.c:1513 replication/slot.c:1674 replication/walsender.c:558 -#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:704 -#: storage/file/fd.c:3425 storage/file/fd.c:3528 utils/cache/relmapper.c:753 +#: access/transam/timeline.c:516 access/transam/twophase.c:1283 +#: access/transam/twophase.c:1680 access/transam/xlog.c:3419 +#: access/transam/xlog.c:3587 access/transam/xlog.c:3592 +#: access/transam/xlog.c:3920 access/transam/xlog.c:4742 +#: access/transam/xlog.c:5667 access/transam/xlogfuncs.c:728 +#: commands/copyfrom.c:1576 commands/copyto.c:328 libpq/be-fsstubs.c:462 +#: libpq/be-fsstubs.c:533 replication/logical/origin.c:667 +#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:4934 +#: replication/logical/snapbuild.c:1642 replication/logical/snapbuild.c:1815 +#: replication/slot.c:1549 replication/slot.c:1710 replication/walsender.c:559 +#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 +#: storage/file/fd.c:3534 storage/file/fd.c:3637 utils/cache/relmapper.c:753 #: utils/cache/relmapper.c:892 #, c-format msgid "could not close file \"%s\": %m" @@ -155,125 +154,127 @@ msgstr "" "directorio de datos." #: ../common/controldata_utils.c:197 ../common/controldata_utils.c:203 -#: ../common/file_utils.c:224 ../common/file_utils.c:283 -#: ../common/file_utils.c:357 access/heap/rewriteheap.c:1267 +#: ../common/file_utils.c:232 ../common/file_utils.c:291 +#: ../common/file_utils.c:365 access/heap/rewriteheap.c:1271 #: access/transam/timeline.c:111 access/transam/timeline.c:251 -#: access/transam/timeline.c:348 access/transam/twophase.c:1232 -#: access/transam/xlog.c:3277 access/transam/xlog.c:3417 -#: access/transam/xlog.c:3458 access/transam/xlog.c:3656 -#: access/transam/xlog.c:3741 access/transam/xlog.c:3844 -#: access/transam/xlog.c:4718 access/transam/xlogutils.c:807 -#: postmaster/syslogger.c:1488 replication/basebackup.c:621 -#: replication/basebackup.c:1590 replication/logical/origin.c:707 -#: replication/logical/reorderbuffer.c:2465 -#: replication/logical/reorderbuffer.c:2825 -#: replication/logical/reorderbuffer.c:3579 -#: replication/logical/snapbuild.c:1608 replication/logical/snapbuild.c:1712 -#: replication/slot.c:1594 replication/walsender.c:516 -#: replication/walsender.c:2508 storage/file/copydir.c:161 -#: storage/file/fd.c:679 storage/file/fd.c:3412 storage/file/fd.c:3499 -#: storage/smgr/md.c:475 utils/cache/relmapper.c:724 -#: utils/cache/relmapper.c:836 utils/error/elog.c:1858 -#: utils/init/miscinit.c:1316 utils/init/miscinit.c:1450 -#: utils/init/miscinit.c:1527 utils/misc/guc.c:8252 utils/misc/guc.c:8284 +#: access/transam/timeline.c:348 access/transam/twophase.c:1227 +#: access/transam/xlog.c:3305 access/transam/xlog.c:3461 +#: access/transam/xlog.c:3502 access/transam/xlog.c:3700 +#: access/transam/xlog.c:3785 access/transam/xlog.c:3888 +#: access/transam/xlog.c:4762 access/transam/xlogutils.c:803 +#: postmaster/syslogger.c:1488 replication/basebackup.c:616 +#: replication/basebackup.c:1610 replication/logical/origin.c:719 +#: replication/logical/reorderbuffer.c:3544 +#: replication/logical/reorderbuffer.c:4091 +#: replication/logical/reorderbuffer.c:4856 +#: replication/logical/snapbuild.c:1597 replication/logical/snapbuild.c:1704 +#: replication/slot.c:1630 replication/walsender.c:517 +#: replication/walsender.c:2526 storage/file/copydir.c:161 +#: storage/file/fd.c:713 storage/file/fd.c:3521 storage/file/fd.c:3608 +#: storage/smgr/md.c:502 utils/cache/relmapper.c:724 +#: utils/cache/relmapper.c:836 utils/error/elog.c:1938 +#: utils/init/miscinit.c:1346 utils/init/miscinit.c:1480 +#: utils/init/miscinit.c:1557 utils/misc/guc.c:8585 utils/misc/guc.c:8617 #, c-format msgid "could not open file \"%s\": %m" msgstr "no se pudo abrir el archivo «%s»: %m" #: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 -#: access/transam/twophase.c:1649 access/transam/twophase.c:1658 -#: access/transam/xlog.c:10878 access/transam/xlog.c:10916 -#: access/transam/xlog.c:11329 access/transam/xlogfuncs.c:741 -#: postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 -#: utils/cache/relmapper.c:870 +#: access/transam/twophase.c:1653 access/transam/twophase.c:1662 +#: access/transam/xlog.c:11095 access/transam/xlog.c:11133 +#: access/transam/xlog.c:11546 access/transam/xlogfuncs.c:782 +#: postmaster/postmaster.c:5642 postmaster/syslogger.c:1499 +#: postmaster/syslogger.c:1512 utils/cache/relmapper.c:870 #, c-format msgid "could not write file \"%s\": %m" msgstr "no se pudo escribir el archivo «%s»: %m" #: ../common/controldata_utils.c:239 ../common/controldata_utils.c:245 -#: ../common/file_utils.c:295 ../common/file_utils.c:365 -#: access/heap/rewriteheap.c:961 access/heap/rewriteheap.c:1175 -#: access/heap/rewriteheap.c:1278 access/transam/timeline.c:432 -#: access/transam/timeline.c:510 access/transam/twophase.c:1670 -#: access/transam/xlog.c:3368 access/transam/xlog.c:3537 -#: access/transam/xlog.c:4691 access/transam/xlog.c:10386 -#: access/transam/xlog.c:10413 replication/logical/snapbuild.c:1646 -#: replication/slot.c:1499 replication/slot.c:1604 storage/file/fd.c:696 -#: storage/file/fd.c:3520 storage/smgr/md.c:921 storage/smgr/md.c:962 -#: storage/sync/sync.c:396 utils/cache/relmapper.c:885 utils/misc/guc.c:8035 +#: ../common/file_utils.c:303 ../common/file_utils.c:373 +#: access/heap/rewriteheap.c:967 access/heap/rewriteheap.c:1179 +#: access/heap/rewriteheap.c:1282 access/transam/timeline.c:432 +#: access/transam/timeline.c:510 access/transam/twophase.c:1674 +#: access/transam/xlog.c:3412 access/transam/xlog.c:3581 +#: access/transam/xlog.c:4735 access/transam/xlog.c:10586 +#: access/transam/xlog.c:10627 replication/logical/snapbuild.c:1635 +#: replication/slot.c:1535 replication/slot.c:1640 storage/file/fd.c:730 +#: storage/file/fd.c:3629 storage/smgr/md.c:950 storage/smgr/md.c:991 +#: storage/sync/sync.c:417 utils/cache/relmapper.c:885 utils/misc/guc.c:8372 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" -#: ../common/exec.c:137 ../common/exec.c:254 ../common/exec.c:300 +#: ../common/cryptohash_openssl.c:104 ../common/exec.c:522 ../common/exec.c:567 +#: ../common/exec.c:659 ../common/hmac_openssl.c:103 ../common/psprintf.c:143 +#: ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 +#: ../port/path.c:685 access/transam/twophase.c:1341 access/transam/xlog.c:6633 +#: lib/dshash.c:246 libpq/auth.c:1482 libpq/auth.c:1550 libpq/auth.c:2108 +#: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:347 +#: postmaster/bgworker.c:937 postmaster/postmaster.c:2514 +#: postmaster/postmaster.c:4157 postmaster/postmaster.c:4827 +#: postmaster/postmaster.c:5567 postmaster/postmaster.c:5931 +#: replication/libpqwalreceiver/libpqwalreceiver.c:282 +#: replication/logical/logical.c:205 replication/walsender.c:591 +#: storage/buffer/localbuf.c:442 storage/file/fd.c:882 storage/file/fd.c:1352 +#: storage/file/fd.c:1513 storage/file/fd.c:2321 storage/ipc/procarray.c:1388 +#: storage/ipc/procarray.c:2182 storage/ipc/procarray.c:2189 +#: storage/ipc/procarray.c:2678 storage/ipc/procarray.c:3302 +#: utils/adt/cryptohashfuncs.c:46 utils/adt/cryptohashfuncs.c:66 +#: utils/adt/formatting.c:1699 utils/adt/formatting.c:1823 +#: utils/adt/formatting.c:1948 utils/adt/pg_locale.c:450 +#: utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 +#: utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 +#: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 +#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5017 +#: utils/misc/guc.c:5033 utils/misc/guc.c:5046 utils/misc/guc.c:8350 +#: utils/misc/tzparser.c:467 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:701 +#: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:234 +#: utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 +#: utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1082 utils/mmgr/mcxt.c:1113 +#: utils/mmgr/mcxt.c:1149 utils/mmgr/mcxt.c:1201 utils/mmgr/mcxt.c:1236 +#: utils/mmgr/mcxt.c:1271 utils/mmgr/slab.c:236 +#, c-format +msgid "out of memory" +msgstr "memoria agotada" + +#: ../common/exec.c:136 ../common/exec.c:253 ../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "no se pudo identificar el directorio actual: %m" -#: ../common/exec.c:156 +#: ../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "el binario «%s» no es válido" -#: ../common/exec.c:206 +#: ../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "no se pudo leer el binario «%s»" -#: ../common/exec.c:214 +#: ../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "no se pudo encontrar un «%s» para ejecutar" -#: ../common/exec.c:270 ../common/exec.c:309 utils/init/miscinit.c:395 +#: ../common/exec.c:269 ../common/exec.c:308 utils/init/miscinit.c:425 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "no se pudo cambiar al directorio «%s»: %m" -#: ../common/exec.c:287 access/transam/xlog.c:10750 -#: replication/basebackup.c:1415 utils/adt/misc.c:337 +#: ../common/exec.c:286 access/transam/xlog.c:10969 +#: replication/basebackup.c:1428 utils/adt/misc.c:340 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "no se pudo leer el enlace simbólico «%s»: %m" -#: ../common/exec.c:410 -#, c-format -msgid "pclose failed: %m" -msgstr "pclose falló: %m" - -#: ../common/exec.c:539 ../common/exec.c:584 ../common/exec.c:676 -#: ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 -#: ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1341 -#: access/transam/xlog.c:6493 lib/dshash.c:246 libpq/auth.c:1090 -#: libpq/auth.c:1491 libpq/auth.c:1559 libpq/auth.c:2089 -#: libpq/be-secure-gssapi.c:484 postmaster/bgworker.c:336 -#: postmaster/bgworker.c:893 postmaster/postmaster.c:2518 -#: postmaster/postmaster.c:2540 postmaster/postmaster.c:4166 -#: postmaster/postmaster.c:4868 postmaster/postmaster.c:4938 -#: postmaster/postmaster.c:5635 postmaster/postmaster.c:5995 -#: replication/libpqwalreceiver/libpqwalreceiver.c:276 -#: replication/logical/logical.c:176 replication/walsender.c:590 -#: storage/buffer/localbuf.c:442 storage/file/fd.c:834 storage/file/fd.c:1304 -#: storage/file/fd.c:1465 storage/file/fd.c:2270 storage/ipc/procarray.c:1045 -#: storage/ipc/procarray.c:1541 storage/ipc/procarray.c:1548 -#: storage/ipc/procarray.c:1972 storage/ipc/procarray.c:2597 -#: utils/adt/cryptohashes.c:45 utils/adt/cryptohashes.c:65 -#: utils/adt/formatting.c:1698 utils/adt/formatting.c:1822 -#: utils/adt/formatting.c:1947 utils/adt/pg_locale.c:484 -#: utils/adt/pg_locale.c:648 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 -#: utils/hash/dynahash.c:450 utils/hash/dynahash.c:559 -#: utils/hash/dynahash.c:1071 utils/mb/mbutils.c:401 utils/mb/mbutils.c:428 -#: utils/mb/mbutils.c:757 utils/mb/mbutils.c:783 utils/misc/guc.c:4846 -#: utils/misc/guc.c:4862 utils/misc/guc.c:4875 utils/misc/guc.c:8013 -#: utils/misc/tzparser.c:467 utils/mmgr/aset.c:475 utils/mmgr/dsa.c:701 -#: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:233 -#: utils/mmgr/mcxt.c:821 utils/mmgr/mcxt.c:857 utils/mmgr/mcxt.c:895 -#: utils/mmgr/mcxt.c:933 utils/mmgr/mcxt.c:969 utils/mmgr/mcxt.c:1000 -#: utils/mmgr/mcxt.c:1036 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1123 -#: utils/mmgr/mcxt.c:1158 utils/mmgr/slab.c:235 -#, c-format -msgid "out of memory" -msgstr "memoria agotada" +#: ../common/exec.c:409 libpq/pqcomm.c:746 storage/ipc/latch.c:1064 +#: storage/ipc/latch.c:1233 storage/ipc/latch.c:1462 storage/ipc/latch.c:1614 +#: storage/ipc/latch.c:1730 +#, fuzzy, c-format +#| msgid "%s failed: %m" +msgid "%s() failed: %m" +msgstr "%s falló: %m" #: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 #: ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 @@ -289,137 +290,165 @@ msgstr "memoria agotada\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" -#: ../common/file_utils.c:79 ../common/file_utils.c:181 -#: access/transam/twophase.c:1244 access/transam/xlog.c:10854 -#: access/transam/xlog.c:10892 access/transam/xlog.c:11109 -#: access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:226 -#: commands/copy.c:1938 commands/copy.c:3505 commands/extension.c:3425 -#: commands/tablespace.c:795 commands/tablespace.c:886 -#: replication/basebackup.c:444 replication/basebackup.c:627 -#: replication/basebackup.c:700 replication/logical/snapbuild.c:1522 -#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1816 -#: storage/file/fd.c:3096 storage/file/fd.c:3278 storage/file/fd.c:3364 -#: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 -#: utils/adt/genfile.c:416 utils/adt/genfile.c:642 guc-file.l:1061 +#: ../common/file_utils.c:87 ../common/file_utils.c:451 +#: ../common/file_utils.c:455 access/transam/twophase.c:1239 +#: access/transam/xlog.c:11071 access/transam/xlog.c:11109 +#: access/transam/xlog.c:11326 access/transam/xlogarchive.c:110 +#: access/transam/xlogarchive.c:227 commands/copyfrom.c:1526 +#: commands/copyto.c:734 commands/extension.c:3444 commands/tablespace.c:807 +#: commands/tablespace.c:898 guc-file.l:1060 replication/basebackup.c:439 +#: replication/basebackup.c:622 replication/basebackup.c:698 +#: replication/logical/snapbuild.c:1514 storage/file/copydir.c:68 +#: storage/file/copydir.c:107 storage/file/fd.c:1863 storage/file/fd.c:1949 +#: storage/file/fd.c:3149 storage/file/fd.c:3353 utils/adt/dbsize.c:70 +#: utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:418 +#: utils/adt/genfile.c:644 #, c-format msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" -#: ../common/file_utils.c:158 ../common/pgfnames.c:48 commands/tablespace.c:718 -#: commands/tablespace.c:728 postmaster/postmaster.c:1509 -#: storage/file/fd.c:2673 storage/file/reinit.c:122 utils/adt/misc.c:259 +#: ../common/file_utils.c:166 ../common/pgfnames.c:48 commands/tablespace.c:730 +#: commands/tablespace.c:740 postmaster/postmaster.c:1513 +#: storage/file/fd.c:2724 storage/file/reinit.c:122 utils/adt/misc.c:262 #: utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" -#: ../common/file_utils.c:192 ../common/pgfnames.c:69 storage/file/fd.c:2685 +#: ../common/file_utils.c:200 ../common/pgfnames.c:69 storage/file/fd.c:2736 #, c-format msgid "could not read directory \"%s\": %m" msgstr "no se pudo leer el directorio «%s»: %m" -#: ../common/file_utils.c:375 access/transam/xlogarchive.c:411 -#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1665 -#: replication/slot.c:650 replication/slot.c:1385 replication/slot.c:1527 -#: storage/file/fd.c:714 utils/time/snapmgr.c:1350 +#: ../common/file_utils.c:383 access/transam/xlogarchive.c:412 +#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1654 +#: replication/slot.c:668 replication/slot.c:1421 replication/slot.c:1563 +#: storage/file/fd.c:748 storage/file/fd.c:846 utils/time/snapmgr.c:1265 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "no se pudo renombrar el archivo de «%s» a «%s»: %m" -#: ../common/jsonapi.c:1064 +#: ../common/hex.c:54 +#, fuzzy, c-format +#| msgid "invalid hexadecimal digit: \"%c\"" +msgid "invalid hexadecimal digit" +msgstr "el dígito hexadecimal no es válido: «%c»" + +#: ../common/hex.c:59 +#, fuzzy, c-format +#| msgid "invalid hexadecimal digit: \"%c\"" +msgid "invalid hexadecimal digit: \"%.*s\"" +msgstr "el dígito hexadecimal no es válido: «%c»" + +#: ../common/hex.c:90 +#, c-format +msgid "overflow of destination buffer in hex encoding" +msgstr "" + +#: ../common/hex.c:136 ../common/hex.c:141 +#, c-format +msgid "invalid hexadecimal data: odd number of digits" +msgstr "el dato hexadecimal no es válido: tiene un número impar de dígitos" + +#: ../common/hex.c:152 +#, c-format +msgid "overflow of destination buffer in hex decoding" +msgstr "" + +#: ../common/jsonapi.c:1066 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "La secuencia de escape «%s» no es válida." -#: ../common/jsonapi.c:1067 +#: ../common/jsonapi.c:1069 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Los caracteres con valor 0x%02x deben ser escapados" -#: ../common/jsonapi.c:1070 +#: ../common/jsonapi.c:1072 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Se esperaba el fin de la entrada, se encontró «%s»." -#: ../common/jsonapi.c:1073 +#: ../common/jsonapi.c:1075 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Se esperaba un elemento de array o «]», se encontró «%s»." -#: ../common/jsonapi.c:1076 +#: ../common/jsonapi.c:1078 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "Se esperaba «,» o «]», se encontró «%s»." -#: ../common/jsonapi.c:1079 +#: ../common/jsonapi.c:1081 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "Se esperaba «:», se encontró «%s»." -#: ../common/jsonapi.c:1082 +#: ../common/jsonapi.c:1084 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "Se esperaba un valor JSON, se encontró «%s»." -#: ../common/jsonapi.c:1085 +#: ../common/jsonapi.c:1087 msgid "The input string ended unexpectedly." msgstr "La cadena de entrada terminó inesperadamente." -#: ../common/jsonapi.c:1087 +#: ../common/jsonapi.c:1089 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Se esperaba una cadena o «}», se encontró «%s»." -#: ../common/jsonapi.c:1090 +#: ../common/jsonapi.c:1092 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "Se esperaba «,» o «}», se encontró «%s»." -#: ../common/jsonapi.c:1093 +#: ../common/jsonapi.c:1095 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Se esperaba una cadena, se encontró «%s»." -#: ../common/jsonapi.c:1096 +#: ../common/jsonapi.c:1098 #, c-format msgid "Token \"%s\" is invalid." msgstr "El elemento «%s» no es válido." -#: ../common/jsonapi.c:1099 jsonpath_scan.l:499 +#: ../common/jsonapi.c:1101 jsonpath_scan.l:499 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 no puede ser convertido a text." -#: ../common/jsonapi.c:1101 +#: ../common/jsonapi.c:1103 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "«\\u» debe ser seguido por cuatro dígitos hexadecimales." -#: ../common/jsonapi.c:1104 +#: ../common/jsonapi.c:1106 msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." msgstr "Los valores de escape Unicode no se pueden utilizar para valores de código superiores a 007F cuando la codificación no es UTF8." -#: ../common/jsonapi.c:1106 jsonpath_scan.l:520 +#: ../common/jsonapi.c:1108 jsonpath_scan.l:520 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Un «high-surrogate» Unicode no puede venir después de un «high-surrogate»." -#: ../common/jsonapi.c:1108 jsonpath_scan.l:531 jsonpath_scan.l:541 +#: ../common/jsonapi.c:1110 jsonpath_scan.l:531 jsonpath_scan.l:541 #: jsonpath_scan.l:583 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Un «low-surrogate» Unicode debe seguir a un «high-surrogate»." -#: ../common/logging.c:236 +#: ../common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../common/logging.c:243 +#: ../common/logging.c:266 #, c-format msgid "error: " msgstr "error: " -#: ../common/logging.c:250 +#: ../common/logging.c:273 #, c-format msgid "warning: " msgstr "precaución: " @@ -439,7 +468,7 @@ msgstr "nombre de «fork» no válido" msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Los nombres de «fork» válidos son «main», «fsm», «vm» e «init»." -#: ../common/restricted_token.c:64 libpq/auth.c:1521 libpq/auth.c:2520 +#: ../common/restricted_token.c:64 libpq/auth.c:1512 libpq/auth.c:2544 #, c-format msgid "could not load library \"%s\": error code %lu" msgstr "no se pudo cargar la biblioteca «%s»: código de error %lu" @@ -479,8 +508,8 @@ msgstr "no se pudo re-ejecutar con el token restringido: código de error %lu" msgid "could not get exit code from subprocess: error code %lu" msgstr "no se pudo obtener el código de salida del subproceso»: código de error %lu" -#: ../common/rmtree.c:79 replication/basebackup.c:1168 -#: replication/basebackup.c:1344 +#: ../common/rmtree.c:79 replication/basebackup.c:1181 +#: replication/basebackup.c:1357 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "no se pudo hacer stat al archivo o directorio «%s»: %m" @@ -490,11 +519,6 @@ msgstr "no se pudo hacer stat al archivo o directorio «%s»: %m" msgid "could not remove file or directory \"%s\": %m" msgstr "no se pudo borrar el archivo o el directorio «%s»: %m" -#: ../common/saslprep.c:1087 -#, c-format -msgid "password too long" -msgstr "la contraseña es demasiado larga" - #: ../common/stringinfo.c:306 #, c-format msgid "Cannot enlarge string buffer containing %d bytes by %d more bytes." @@ -516,7 +540,7 @@ msgstr "" msgid "could not look up effective user ID %ld: %s" msgstr "no se pudo encontrar el ID de usuario efectivo %ld: %s" -#: ../common/username.c:45 libpq/auth.c:2027 +#: ../common/username.c:45 libpq/auth.c:2044 msgid "user does not exist" msgstr "usuario no existe" @@ -633,13 +657,13 @@ msgstr "no se pudo obtener el SID del grupo PowerUsers: código de error %lu\n" msgid "could not check access token membership: error code %lu\n" msgstr "no se pudo verificar el token de proceso: código de error %lu\n" -#: access/brin/brin.c:210 +#: access/brin/brin.c:214 #, c-format msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" msgstr "petición para sumarización BRIN de rango para el índice «%s» página %u no fue registrada" -#: access/brin/brin.c:873 access/brin/brin.c:950 access/gin/ginfast.c:1035 -#: access/transam/xlog.c:10522 access/transam/xlog.c:11060 +#: access/brin/brin.c:1015 access/brin/brin.c:1092 access/gin/ginfast.c:1035 +#: access/transam/xlog.c:10748 access/transam/xlog.c:11277 #: access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 #: access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 #: access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 @@ -648,80 +672,107 @@ msgstr "petición para sumarización BRIN de rango para el índice «%s» págin msgid "recovery is in progress" msgstr "la recuperación está en proceso" -#: access/brin/brin.c:874 access/brin/brin.c:951 +#: access/brin/brin.c:1016 access/brin/brin.c:1093 #, c-format msgid "BRIN control functions cannot be executed during recovery." msgstr "Las funciones de control de BRIN no pueden ejecutarse durante la recuperación." -#: access/brin/brin.c:882 access/brin/brin.c:959 +#: access/brin/brin.c:1024 access/brin/brin.c:1101 #, c-format msgid "block number out of range: %s" msgstr "número de bloque fuera de rango: %s" -#: access/brin/brin.c:905 access/brin/brin.c:982 +#: access/brin/brin.c:1047 access/brin/brin.c:1124 #, c-format msgid "\"%s\" is not a BRIN index" msgstr "«%s» no es un índice BRIN" -#: access/brin/brin.c:921 access/brin/brin.c:998 -#, c-format -msgid "could not open parent table of index %s" +#: access/brin/brin.c:1063 access/brin/brin.c:1140 +#, fuzzy, c-format +#| msgid "could not open parent table of index %s" +msgid "could not open parent table of index \"%s\"" msgstr "no se pudo abrir la tabla padre del índice %s" +#: access/brin/brin_bloom.c:751 access/brin/brin_bloom.c:793 +#: access/brin/brin_minmax_multi.c:2984 access/brin/brin_minmax_multi.c:3129 +#: statistics/dependencies.c:651 statistics/dependencies.c:704 +#: statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 +#: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 +#: utils/adt/pseudotypes.c:77 utils/adt/pseudotypes.c:252 +#, c-format +msgid "cannot accept a value of type %s" +msgstr "no se puede aceptar un valor de tipo %s" + +#: access/brin/brin_minmax_multi.c:2142 access/brin/brin_minmax_multi.c:2149 +#: access/brin/brin_minmax_multi.c:2156 utils/adt/timestamp.c:941 +#: utils/adt/timestamp.c:1515 utils/adt/timestamp.c:1982 +#: utils/adt/timestamp.c:3059 utils/adt/timestamp.c:3064 +#: utils/adt/timestamp.c:3069 utils/adt/timestamp.c:3119 +#: utils/adt/timestamp.c:3126 utils/adt/timestamp.c:3133 +#: utils/adt/timestamp.c:3153 utils/adt/timestamp.c:3160 +#: utils/adt/timestamp.c:3167 utils/adt/timestamp.c:3197 +#: utils/adt/timestamp.c:3205 utils/adt/timestamp.c:3249 +#: utils/adt/timestamp.c:3676 utils/adt/timestamp.c:3801 +#: utils/adt/timestamp.c:4349 +#, c-format +msgid "interval out of range" +msgstr "interval fuera de rango" + #: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 #: access/brin/brin_pageops.c:843 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1435 access/spgist/spgdoinsert.c:1957 +#: access/gist/gist.c:1441 access/spgist/spgdoinsert.c:2000 +#: access/spgist/spgdoinsert.c:2275 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "el tamaño de fila de índice %zu excede el máximo %zu para el índice «%s»" -#: access/brin/brin_revmap.c:392 access/brin/brin_revmap.c:398 +#: access/brin/brin_revmap.c:393 access/brin/brin_revmap.c:399 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "índice BRIN corrompido: mapa de rango inconsistente" -#: access/brin/brin_revmap.c:601 +#: access/brin/brin_revmap.c:602 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "tipo de página 0x%04X inesperado en el índice BRIN «%s» bloque %u" #: access/brin/brin_validate.c:118 access/gin/ginvalidate.c:151 -#: access/gist/gistvalidate.c:149 access/hash/hashvalidate.c:136 -#: access/nbtree/nbtvalidate.c:117 access/spgist/spgvalidate.c:168 +#: access/gist/gistvalidate.c:153 access/hash/hashvalidate.c:139 +#: access/nbtree/nbtvalidate.c:120 access/spgist/spgvalidate.c:189 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with invalid support number %d" msgstr "familia de operadores «%s» de método de acceso %s contiene la función %s con número de soporte %d no válido" #: access/brin/brin_validate.c:134 access/gin/ginvalidate.c:163 -#: access/gist/gistvalidate.c:161 access/hash/hashvalidate.c:115 -#: access/nbtree/nbtvalidate.c:129 access/spgist/spgvalidate.c:180 +#: access/gist/gistvalidate.c:165 access/hash/hashvalidate.c:118 +#: access/nbtree/nbtvalidate.c:132 access/spgist/spgvalidate.c:201 #, c-format msgid "operator family \"%s\" of access method %s contains function %s with wrong signature for support number %d" msgstr "familia de operadores «%s» de método de acceso %s contiene la función %s con signatura incorrecta para el número de soporte %d" #: access/brin/brin_validate.c:156 access/gin/ginvalidate.c:182 -#: access/gist/gistvalidate.c:181 access/hash/hashvalidate.c:157 -#: access/nbtree/nbtvalidate.c:149 access/spgist/spgvalidate.c:200 +#: access/gist/gistvalidate.c:185 access/hash/hashvalidate.c:160 +#: access/nbtree/nbtvalidate.c:152 access/spgist/spgvalidate.c:221 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with invalid strategy number %d" msgstr "familia de operadores «%s» de método de acceso %s contiene el operador %s con número de estrategia %d no válido" #: access/brin/brin_validate.c:185 access/gin/ginvalidate.c:195 -#: access/hash/hashvalidate.c:170 access/nbtree/nbtvalidate.c:162 -#: access/spgist/spgvalidate.c:216 +#: access/hash/hashvalidate.c:173 access/nbtree/nbtvalidate.c:165 +#: access/spgist/spgvalidate.c:237 #, c-format msgid "operator family \"%s\" of access method %s contains invalid ORDER BY specification for operator %s" msgstr "familia de operadores «%s» de método de acceso %s contiene especificación ORDER BY no válida para el operador %s" #: access/brin/brin_validate.c:198 access/gin/ginvalidate.c:208 -#: access/gist/gistvalidate.c:229 access/hash/hashvalidate.c:183 -#: access/nbtree/nbtvalidate.c:175 access/spgist/spgvalidate.c:232 +#: access/gist/gistvalidate.c:233 access/hash/hashvalidate.c:186 +#: access/nbtree/nbtvalidate.c:178 access/spgist/spgvalidate.c:253 #, c-format msgid "operator family \"%s\" of access method %s contains operator %s with wrong signature" msgstr "familia de operadores «%s» de método de acceso %s contiene el operador %s con signatura incorrecta" -#: access/brin/brin_validate.c:236 access/hash/hashvalidate.c:223 -#: access/nbtree/nbtvalidate.c:233 access/spgist/spgvalidate.c:259 +#: access/brin/brin_validate.c:236 access/hash/hashvalidate.c:226 +#: access/nbtree/nbtvalidate.c:236 access/spgist/spgvalidate.c:280 #, c-format msgid "operator family \"%s\" of access method %s is missing operator(s) for types %s and %s" msgstr "el/los operador(es) para los tipos %3$s y %4$s faltan de la familia de operadores «%1$s» de método de acceso %2$s" @@ -731,14 +782,14 @@ msgstr "el/los operador(es) para los tipos %3$s y %4$s faltan de la familia de o msgid "operator family \"%s\" of access method %s is missing support function(s) for types %s and %s" msgstr "la(s) función/funciones de soporte para los tipos %3$s y %4$s faltan de la familia de operadores «%1$s» de método de acceso %2$s" -#: access/brin/brin_validate.c:259 access/hash/hashvalidate.c:237 -#: access/nbtree/nbtvalidate.c:257 access/spgist/spgvalidate.c:294 +#: access/brin/brin_validate.c:259 access/hash/hashvalidate.c:240 +#: access/nbtree/nbtvalidate.c:260 access/spgist/spgvalidate.c:315 #, c-format msgid "operator class \"%s\" of access method %s is missing operator(s)" msgstr "faltan operadores de la clase de operadores «%s» del método de acceso %s" #: access/brin/brin_validate.c:270 access/gin/ginvalidate.c:250 -#: access/gist/gistvalidate.c:270 +#: access/gist/gistvalidate.c:274 #, c-format msgid "operator class \"%s\" of access method %s is missing support function %d" msgstr "falta la función de soporte %3$d de la clase de operadores «%1$s» del método de acceso %2$s" @@ -778,13 +829,13 @@ msgstr "el número de columnas (%d) excede el límite (%d)" msgid "number of index columns (%d) exceeds limit (%d)" msgstr "el número de columnas del índice (%d) excede el límite (%d)" -#: access/common/indextuple.c:187 access/spgist/spgutils.c:703 +#: access/common/indextuple.c:199 access/spgist/spgutils.c:947 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "fila de índice requiere %zu bytes, tamaño máximo es %zu" -#: access/common/printtup.c:369 tcop/fastpath.c:180 tcop/fastpath.c:530 -#: tcop/postgres.c:1904 +#: access/common/printtup.c:292 tcop/fastpath.c:106 tcop/fastpath.c:453 +#: tcop/postgres.c:1900 #, c-format msgid "unsupported format code: %d" msgstr "código de formato no soportado: %d" @@ -812,7 +863,7 @@ msgstr "RESET no debe incluir valores de parámetros" msgid "unrecognized parameter namespace \"%s\"" msgstr "espacio de nombre de parámetro «%s» no reconocido" -#: access/common/reloptions.c:1277 utils/misc/guc.c:12004 +#: access/common/reloptions.c:1277 utils/misc/guc.c:12495 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "las tablas declaradas WITH OIDS no está soportado" @@ -862,8 +913,27 @@ msgstr "Valores aceptables están entre «%f» y «%f»." msgid "invalid value for enum option \"%s\": %s" msgstr "valor no válido para la opción enum «%s»: %s" -#: access/common/tupdesc.c:842 parser/parse_clause.c:772 -#: parser/parse_relation.c:1803 +#: access/common/toast_compression.c:32 +#, fuzzy, c-format +#| msgid "unlink not supported with compression" +msgid "unsupported LZ4 compression method" +msgstr "unlink no soportado con compresión" + +#: access/common/toast_compression.c:33 +#, fuzzy, c-format +#| msgid "This functionality requires the server to be built with libxml support." +msgid "This functionality requires the server to be built with lz4 support." +msgstr "Esta funcionalidad requiere que el servidor haya sido construido con soporte libxml." + +#: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1589 +#: utils/adt/xml.c:224 +#, fuzzy, c-format +#| msgid "You need to rebuild PostgreSQL using --with-icu." +msgid "You need to rebuild PostgreSQL using %s." +msgstr "Necesita reconstruir PostgreSQL usando --with-icu." + +#: access/common/tupdesc.c:822 parser/parse_clause.c:772 +#: parser/parse_relation.c:1838 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "la columna «%s» no puede ser declarada SETOF" @@ -893,7 +963,7 @@ msgstr "«%s» no es un índice GIN" msgid "cannot access temporary indexes of other sessions" msgstr "no se pueden acceder índices temporales de otras sesiones" -#: access/gin/ginget.c:270 access/nbtree/nbtinsert.c:745 +#: access/gin/ginget.c:270 access/nbtree/nbtinsert.c:759 #, c-format msgid "failed to re-find tuple within index \"%s\"" msgstr "no se pudo volver a encontrar la tupla dentro del índice «%s»" @@ -908,15 +978,15 @@ msgstr "los índices GIN antiguos no soportan recorridos del índice completo ni msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Para corregir esto, ejecute REINDEX INDEX \"%s\"." -#: access/gin/ginutil.c:144 executor/execExpr.c:1862 -#: utils/adt/arrayfuncs.c:3790 utils/adt/arrayfuncs.c:6418 -#: utils/adt/rowtypes.c:936 +#: access/gin/ginutil.c:145 executor/execExpr.c:2166 +#: utils/adt/arrayfuncs.c:3818 utils/adt/arrayfuncs.c:6452 +#: utils/adt/rowtypes.c:957 #, c-format msgid "could not identify a comparison function for type %s" msgstr "no se pudo identificar una función de comparación para el tipo %s" #: access/gin/ginvalidate.c:92 access/gist/gistvalidate.c:93 -#: access/hash/hashvalidate.c:99 access/spgist/spgvalidate.c:99 +#: access/hash/hashvalidate.c:102 access/spgist/spgvalidate.c:102 #, c-format msgid "operator family \"%s\" of access method %s contains support function %s with different left and right input types" msgstr "la familia de operadores «%s» del método de acceso %s contiene el procedimiento de soporte %s registrado entre tipos distintos" @@ -926,25 +996,38 @@ msgstr "la familia de operadores «%s» del método de acceso %s contiene el pro msgid "operator class \"%s\" of access method %s is missing support function %d or %d" msgstr "falta la función de soporte %3$d o %4$d de la clase de operadores «%1$s» del método de accesso %2$s" -#: access/gist/gist.c:753 access/gist/gistvacuum.c:408 +#: access/gin/ginvalidate.c:333 access/gist/gistvalidate.c:350 +#: access/spgist/spgvalidate.c:387 +#, fuzzy, c-format +#| msgid "operator family %s for access method %s" +msgid "support function number %d is invalid for access method %s" +msgstr "familia de operadores %s para el método de acceso %s" + +#: access/gist/gist.c:758 access/gist/gistvacuum.c:420 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "el índice «%s» contiene una tupla interna marcada como no válida" -#: access/gist/gist.c:755 access/gist/gistvacuum.c:410 +#: access/gist/gist.c:760 access/gist/gistvacuum.c:422 #, c-format msgid "This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1." msgstr "Esto es causado por una división de página incompleta durante una recuperación antes de actualizar a PostgreSQL 9.1." -#: access/gist/gist.c:756 access/gist/gistutil.c:786 access/gist/gistutil.c:797 -#: access/gist/gistvacuum.c:411 access/hash/hashutil.c:227 +#: access/gist/gist.c:761 access/gist/gistutil.c:801 access/gist/gistutil.c:812 +#: access/gist/gistvacuum.c:423 access/hash/hashutil.c:227 #: access/hash/hashutil.c:238 access/hash/hashutil.c:250 -#: access/hash/hashutil.c:271 access/nbtree/nbtpage.c:741 -#: access/nbtree/nbtpage.c:752 +#: access/hash/hashutil.c:271 access/nbtree/nbtpage.c:810 +#: access/nbtree/nbtpage.c:821 #, c-format msgid "Please REINDEX it." msgstr "Por favor aplíquele REINDEX." +#: access/gist/gist.c:1175 +#, fuzzy, c-format +#| msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" +msgid "fixing incomplete split in index \"%s\", block %u" +msgstr "tipo de página 0x%04X inesperado en el índice BRIN «%s» bloque %u" + #: access/gist/gistsplit.c:446 #, c-format msgid "picksplit method for column %d of index \"%s\" failed" @@ -955,24 +1038,24 @@ msgstr "el método picksplit para la columna %d del índice «%s» falló" msgid "The index is not optimal. To optimize it, contact a developer, or try to use the column as the second one in the CREATE INDEX command." msgstr "El índice no es óptimo. Para optimizarlo, contacte un desarrollador o trate de usar la columna en segunda posición en la orden CREATE INDEX." -#: access/gist/gistutil.c:783 access/hash/hashutil.c:224 -#: access/nbtree/nbtpage.c:738 +#: access/gist/gistutil.c:798 access/hash/hashutil.c:224 +#: access/nbtree/nbtpage.c:807 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "índice «%s» contiene páginas vacías no esperadas en el bloque %u" -#: access/gist/gistutil.c:794 access/hash/hashutil.c:235 -#: access/hash/hashutil.c:247 access/nbtree/nbtpage.c:749 +#: access/gist/gistutil.c:809 access/hash/hashutil.c:235 +#: access/hash/hashutil.c:247 access/nbtree/nbtpage.c:818 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "el índice «%s» contiene una página corrupta en el bloque %u" -#: access/gist/gistvalidate.c:199 +#: access/gist/gistvalidate.c:203 #, c-format msgid "operator family \"%s\" of access method %s contains unsupported ORDER BY specification for operator %s" msgstr "la familia de operadores «%s» del método de acceso %s contiene una especificación ORDER BY no soportada para el operador %s" -#: access/gist/gistvalidate.c:210 +#: access/gist/gistvalidate.c:214 #, c-format msgid "operator family \"%s\" of access method %s contains incorrect ORDER BY opfamily specification for operator %s" msgstr "la familia de operadores «%s» del método de acceso %s contiene una especificación de familia en ORDER BY incorrecta para el operador %s" @@ -983,14 +1066,13 @@ msgstr "la familia de operadores «%s» del método de acceso %s contiene una es msgid "could not determine which collation to use for string hashing" msgstr "no se pudo determinar qué ordenamiento usar para el hashing de cadenas" -#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:702 -#: catalog/heap.c:708 commands/createas.c:206 commands/createas.c:489 -#: commands/indexcmds.c:1815 commands/tablecmds.c:16004 commands/view.c:86 -#: parser/parse_utilcmd.c:4203 regex/regc_pg_locale.c:263 -#: utils/adt/formatting.c:1665 utils/adt/formatting.c:1789 -#: utils/adt/formatting.c:1914 utils/adt/like.c:194 +#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:712 +#: catalog/heap.c:718 commands/createas.c:206 commands/createas.c:509 +#: commands/indexcmds.c:1869 commands/tablecmds.c:16827 commands/view.c:86 +#: regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 +#: utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 #: utils/adt/like_support.c:1003 utils/adt/varchar.c:733 -#: utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1476 +#: utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1524 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Use la cláusula COLLATE para establecer el ordenamiento explícitamente." @@ -1000,8 +1082,8 @@ msgstr "Use la cláusula COLLATE para establecer el ordenamiento explícitamente msgid "index row size %zu exceeds hash maximum %zu" msgstr "el tamaño de fila de índice %zu excede el máximo para hash %zu" -#: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:1961 -#: access/spgist/spgutils.c:764 +#: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:2004 +#: access/spgist/spgdoinsert.c:2279 access/spgist/spgutils.c:1008 #, c-format msgid "Values larger than a buffer page cannot be indexed." msgstr "Valores mayores a una página del buffer no pueden ser indexados." @@ -1031,330 +1113,403 @@ msgstr "el índice «%s» no es un índice hash" msgid "index \"%s\" has wrong hash version" msgstr "el índice «%s» tiene una versión de hash incorrecta" -#: access/hash/hashvalidate.c:195 +#: access/hash/hashvalidate.c:198 #, c-format msgid "operator family \"%s\" of access method %s lacks support function for operator %s" msgstr "la familia de operadores «%s» del método de acceso %s no tiene función de soporte para el operador %s" -#: access/hash/hashvalidate.c:253 access/nbtree/nbtvalidate.c:273 +#: access/hash/hashvalidate.c:256 access/nbtree/nbtvalidate.c:276 #, c-format msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "faltan operadores entre tipos en la familia de operadores «%s» del método de acceso %s" -#: access/heap/heapam.c:2026 +#: access/heap/heapam.c:2328 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "no se pueden insertar tuplas en un ayudante paralelo" -#: access/heap/heapam.c:2444 +#: access/heap/heapam.c:2799 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "no se pueden eliminar tuplas durante una operación paralela" -#: access/heap/heapam.c:2490 +#: access/heap/heapam.c:2845 #, c-format msgid "attempted to delete invisible tuple" msgstr "se intentó eliminar una tupla invisible" -#: access/heap/heapam.c:2916 access/heap/heapam.c:5705 +#: access/heap/heapam.c:3277 access/heap/heapam.c:6078 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "no se pueden actualizar tuplas durante una operación paralela" -#: access/heap/heapam.c:3049 +#: access/heap/heapam.c:3410 #, c-format msgid "attempted to update invisible tuple" msgstr "se intentó actualizar una tupla invisible" -#: access/heap/heapam.c:4360 access/heap/heapam.c:4398 -#: access/heap/heapam.c:4655 access/heap/heapam_handler.c:450 +#: access/heap/heapam.c:4731 access/heap/heapam.c:4769 +#: access/heap/heapam.c:5025 access/heap/heapam_handler.c:454 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "no se pudo bloquear un candado en la fila de la relación «%s»" -#: access/heap/heapam_handler.c:399 +#: access/heap/heapam_handler.c:403 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update" msgstr "el registro a ser bloqueado ya fue movido a otra partición por un update concurrente" -#: access/heap/hio.c:345 access/heap/rewriteheap.c:662 +#: access/heap/hio.c:360 access/heap/rewriteheap.c:665 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "fila es demasiado grande: tamaño %zu, tamaño máximo %zu" -#: access/heap/rewriteheap.c:921 +#: access/heap/rewriteheap.c:927 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "no se pudo escribir al archivo «%s», se escribió %d de %d: %m" -#: access/heap/rewriteheap.c:1015 access/heap/rewriteheap.c:1134 +#: access/heap/rewriteheap.c:1020 access/heap/rewriteheap.c:1138 #: access/transam/timeline.c:329 access/transam/timeline.c:485 -#: access/transam/xlog.c:3300 access/transam/xlog.c:3472 -#: access/transam/xlog.c:4670 access/transam/xlog.c:10869 -#: access/transam/xlog.c:10907 access/transam/xlog.c:11312 -#: access/transam/xlogfuncs.c:735 postmaster/postmaster.c:4629 -#: replication/logical/origin.c:575 replication/slot.c:1446 -#: storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1329 +#: access/transam/xlog.c:3328 access/transam/xlog.c:3516 +#: access/transam/xlog.c:4714 access/transam/xlog.c:11086 +#: access/transam/xlog.c:11124 access/transam/xlog.c:11529 +#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4582 +#: postmaster/postmaster.c:5629 replication/logical/origin.c:587 +#: replication/slot.c:1482 storage/file/copydir.c:167 storage/smgr/md.c:218 +#: utils/time/snapmgr.c:1244 #, c-format msgid "could not create file \"%s\": %m" msgstr "no se pudo crear archivo «%s»: %m" -#: access/heap/rewriteheap.c:1144 +#: access/heap/rewriteheap.c:1148 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "no se pudo truncar el archivo «%s» a %u: %m" -#: access/heap/rewriteheap.c:1162 access/transam/timeline.c:384 +#: access/heap/rewriteheap.c:1166 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:502 -#: access/transam/xlog.c:3356 access/transam/xlog.c:3528 -#: access/transam/xlog.c:4682 postmaster/postmaster.c:4639 -#: postmaster/postmaster.c:4649 replication/logical/origin.c:587 -#: replication/logical/origin.c:629 replication/logical/origin.c:648 -#: replication/logical/snapbuild.c:1622 replication/slot.c:1481 -#: storage/file/buffile.c:502 storage/file/copydir.c:207 -#: utils/init/miscinit.c:1391 utils/init/miscinit.c:1402 -#: utils/init/miscinit.c:1410 utils/misc/guc.c:7996 utils/misc/guc.c:8027 -#: utils/misc/guc.c:9947 utils/misc/guc.c:9961 utils/time/snapmgr.c:1334 -#: utils/time/snapmgr.c:1341 +#: access/transam/xlog.c:3400 access/transam/xlog.c:3572 +#: access/transam/xlog.c:4726 postmaster/postmaster.c:4592 +#: postmaster/postmaster.c:4602 replication/logical/origin.c:599 +#: replication/logical/origin.c:641 replication/logical/origin.c:660 +#: replication/logical/snapbuild.c:1611 replication/slot.c:1517 +#: storage/file/buffile.c:506 storage/file/copydir.c:207 +#: utils/init/miscinit.c:1421 utils/init/miscinit.c:1432 +#: utils/init/miscinit.c:1440 utils/misc/guc.c:8333 utils/misc/guc.c:8364 +#: utils/misc/guc.c:10273 utils/misc/guc.c:10287 utils/time/snapmgr.c:1249 +#: utils/time/snapmgr.c:1256 #, c-format msgid "could not write to file \"%s\": %m" msgstr "no se pudo escribir a archivo «%s»: %m" -#: access/heap/rewriteheap.c:1252 access/transam/twophase.c:1609 -#: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:421 -#: postmaster/postmaster.c:1092 postmaster/syslogger.c:1465 -#: replication/logical/origin.c:563 replication/logical/reorderbuffer.c:3079 -#: replication/logical/snapbuild.c:1564 replication/logical/snapbuild.c:2006 -#: replication/slot.c:1578 storage/file/fd.c:754 storage/file/fd.c:3116 -#: storage/file/fd.c:3178 storage/file/reinit.c:255 storage/ipc/dsm.c:302 -#: storage/smgr/md.c:311 storage/smgr/md.c:367 storage/sync/sync.c:210 -#: utils/time/snapmgr.c:1674 +#: access/heap/rewriteheap.c:1256 access/transam/twophase.c:1613 +#: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 +#: postmaster/postmaster.c:1094 postmaster/syslogger.c:1465 +#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4358 +#: replication/logical/snapbuild.c:1556 replication/logical/snapbuild.c:1972 +#: replication/slot.c:1614 storage/file/fd.c:788 storage/file/fd.c:3169 +#: storage/file/fd.c:3231 storage/file/reinit.c:250 storage/ipc/dsm.c:315 +#: storage/smgr/md.c:344 storage/smgr/md.c:394 storage/sync/sync.c:231 +#: utils/time/snapmgr.c:1589 #, c-format msgid "could not remove file \"%s\": %m" msgstr "no se pudo eliminar el archivo «%s»: %m" -#: access/heap/vacuumlazy.c:648 +#: access/heap/vacuumlazy.c:746 #, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum agresivo automático para prevenir wraparound de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:650 +#: access/heap/vacuumlazy.c:748 #, c-format msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum automático para prevenir wraparound de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:655 +#: access/heap/vacuumlazy.c:753 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum agresivo automático de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:657 +#: access/heap/vacuumlazy.c:755 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum automático de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:664 +#: access/heap/vacuumlazy.c:762 #, c-format msgid "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n" msgstr "páginas: %u eliminadas, %u quedan, %u saltadas debido a «pins», %u congeladas saltadas\n" -#: access/heap/vacuumlazy.c:670 -#, c-format -msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable, oldest xmin: %u\n" +#: access/heap/vacuumlazy.c:768 +#, fuzzy, c-format +#| msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable, oldest xmin: %u\n" +msgid "tuples: %lld removed, %lld remain, %lld are dead but not yet removable, oldest xmin: %u\n" msgstr "tuplas: %.0f removidas, %.0f permanecen ,%.0f están muertas pero aún no se pueden quitar, el xmin más antiguo: %u\n" -#: access/heap/vacuumlazy.c:676 +#: access/heap/vacuumlazy.c:774 commands/analyze.c:794 #, c-format msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" msgstr "uso de búfers: %lld aciertos, %lld fallos, %lld ensuciados\n" -#: access/heap/vacuumlazy.c:680 +#: access/heap/vacuumlazy.c:784 +#, c-format +msgid " %u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n" +msgstr "" + +#: access/heap/vacuumlazy.c:787 +#, fuzzy +#| msgid "index \"%s\" not found" +msgid "index scan not needed:" +msgstr "índice «%s» no encontrado" + +#: access/heap/vacuumlazy.c:789 +#, fuzzy +#| msgid "index \"%s\" was reindexed" +msgid "index scan needed:" +msgstr "el índice «%s» fue reindexado" + +#: access/heap/vacuumlazy.c:793 +#, c-format +msgid " %u pages from table (%.2f%% of total) have %lld dead item identifiers\n" +msgstr "" + +#: access/heap/vacuumlazy.c:796 +msgid "index scan bypassed:" +msgstr "" + +#: access/heap/vacuumlazy.c:798 +msgid "index scan bypassed by failsafe:" +msgstr "" + +#: access/heap/vacuumlazy.c:814 +#, c-format +msgid "index \"%s\": pages: %u in total, %u newly deleted, %u currently deleted, %u reusable\n" +msgstr "" + +#: access/heap/vacuumlazy.c:821 commands/analyze.c:798 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "tasa lectura promedio: %.3f MB/s, tasa escritura promedio: %.3f MB/s\n" -#: access/heap/vacuumlazy.c:682 +#: access/heap/vacuumlazy.c:825 commands/analyze.c:802 +msgid "I/O Timings:" +msgstr "" + +#: access/heap/vacuumlazy.c:827 commands/analyze.c:804 +#, c-format +msgid " read=%.3f" +msgstr "" + +#: access/heap/vacuumlazy.c:830 commands/analyze.c:807 +#, c-format +msgid " write=%.3f" +msgstr "" + +#: access/heap/vacuumlazy.c:834 #, c-format msgid "system usage: %s\n" msgstr "uso de sistema: %s\n" -#: access/heap/vacuumlazy.c:684 -#, c-format -#| msgid "WAL usage: %ld records, %ld full page images, %llu bytes" -msgid "WAL usage: %ld records, %ld full page images, " +#: access/heap/vacuumlazy.c:836 +#, fuzzy, c-format +#| msgid "WAL usage: %ld records, %ld full page images, " +msgid "WAL usage: %lld records, %lld full page images, %llu bytes" msgstr "uso de WAL: %ld registros, %ld imágenes de página, " -#: access/heap/vacuumlazy.c:796 +#: access/heap/vacuumlazy.c:911 #, c-format msgid "aggressively vacuuming \"%s.%s\"" msgstr "haciendo vacuum agresivamente a «%s.%s»" -#: access/heap/vacuumlazy.c:801 commands/cluster.c:874 +#: access/heap/vacuumlazy.c:916 commands/cluster.c:898 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "haciendo vacuum a «%s.%s»" -#: access/heap/vacuumlazy.c:838 -#, c-format -msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" -msgstr "desactivando el comportamiento paralelo de vacuum en «%s» --- no se puede hacer vacuum de tablas temporales en paralelo" - -#: access/heap/vacuumlazy.c:1726 -#, c-format -msgid "\"%s\": removed %.0f row versions in %u pages" -msgstr "«%s»: se eliminaron %.0f versiones de filas en %u páginas" +#: access/heap/vacuumlazy.c:1617 +#, fuzzy, c-format +#| msgid "\"%s\": removed %d row versions in %d pages" +msgid "\"%s\": removed %lld dead item identifiers in %u pages" +msgstr "«%s»: se eliminaron %d versiones de filas en %d páginas" -#: access/heap/vacuumlazy.c:1736 -#, c-format -msgid "%.0f dead row versions cannot be removed yet, oldest xmin: %u\n" +#: access/heap/vacuumlazy.c:1623 +#, fuzzy, c-format +#| msgid "%.0f dead row versions cannot be removed yet, oldest xmin: %u\n" +msgid "%lld dead row versions cannot be removed yet, oldest xmin: %u\n" msgstr "%.0f versiones muertas de filas no pueden ser eliminadas aún, xmin máx antiguo: %u\n" -#: access/heap/vacuumlazy.c:1738 +#: access/heap/vacuumlazy.c:1625 #, c-format -msgid "There were %.0f unused item identifiers.\n" -msgstr "Hubo %.0f identificadores de ítem sin usar.\n" +msgid "%u page removed.\n" +msgid_plural "%u pages removed.\n" +msgstr[0] "" +msgstr[1] "" -#: access/heap/vacuumlazy.c:1740 +#: access/heap/vacuumlazy.c:1629 #, c-format msgid "Skipped %u page due to buffer pins, " msgid_plural "Skipped %u pages due to buffer pins, " msgstr[0] "Omitiendo %u página debido a «pins» de página, " msgstr[1] "Omitiendo %u páginas debido a «pins» de página, " -#: access/heap/vacuumlazy.c:1744 +#: access/heap/vacuumlazy.c:1633 #, c-format msgid "%u frozen page.\n" msgid_plural "%u frozen pages.\n" msgstr[0] "%u página marcadas «frozen».\n" msgstr[1] "%u páginas marcadas «frozen».\n" -#: access/heap/vacuumlazy.c:1748 -#, c-format -msgid "%u page is entirely empty.\n" -msgid_plural "%u pages are entirely empty.\n" -msgstr[0] "%u página está completamente vacía.\n" -msgstr[1] "%u páginas están completamente vacías.\n" - -#: access/heap/vacuumlazy.c:1752 commands/indexcmds.c:3450 -#: commands/indexcmds.c:3468 +#: access/heap/vacuumlazy.c:1637 commands/indexcmds.c:3986 +#: commands/indexcmds.c:4005 #, c-format msgid "%s." msgstr "%s." -#: access/heap/vacuumlazy.c:1755 -#, c-format -msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" +#: access/heap/vacuumlazy.c:1640 +#, fuzzy, c-format +#| msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" +msgid "\"%s\": found %lld removable, %lld nonremovable row versions in %u out of %u pages" msgstr "«%s»: se encontraron %.0f versiones de filas eliminables y %.0f no eliminables en %u de %u páginas" -#: access/heap/vacuumlazy.c:1889 +#: access/heap/vacuumlazy.c:2145 #, c-format -msgid "\"%s\": removed %d row versions in %d pages" +msgid "\"%s\": index scan bypassed: %u pages from table (%.2f%% of total) have %lld dead item identifiers" +msgstr "" + +#: access/heap/vacuumlazy.c:2356 +#, fuzzy, c-format +#| msgid "\"%s\": removed %d row versions in %d pages" +msgid "\"%s\": removed %d dead item identifiers in %u pages" msgstr "«%s»: se eliminaron %d versiones de filas en %d páginas" -#: access/heap/vacuumlazy.c:2144 +#: access/heap/vacuumlazy.c:2603 +#, fuzzy, c-format +#| msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" +msgid "abandoned index vacuuming of table \"%s.%s.%s\" as a failsafe after %d index scans" +msgstr "vacuum automático de la tabla «%s.%s.%s»: recorridos de índice: %d\n" + +#: access/heap/vacuumlazy.c:2608 +#, fuzzy, c-format +#| msgid "oldest xmin is far in the past" +msgid "table's relfrozenxid or relminmxid is too far in the past" +msgstr "xmin más antiguo es demasiado antiguo" + +#: access/heap/vacuumlazy.c:2609 +#, c-format +msgid "" +"Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" +"You might also need to consider other ways for VACUUM to keep up with the allocation of transaction IDs." +msgstr "" + +#: access/heap/vacuumlazy.c:2749 #, c-format msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index cleanup (planned: %d)" msgstr[0] "se lanzó %d proceso asistente para «cleanup» de índices (planeados: %d)" msgstr[1] "se lanzaron %d procesos asistentes para «cleanup» de índices (planeados: %d)" -#: access/heap/vacuumlazy.c:2150 +#: access/heap/vacuumlazy.c:2755 #, c-format msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" msgstr[0] "se lanzó %d proceso asistente para «vacuum» de índices (planeados: %d)" msgstr[1] "se lanzaron %d procesos asistentes para «vacuum» índices (planeados: %d)" -#: access/heap/vacuumlazy.c:2442 -#, fuzzy, c-format -#| msgid "scanned index \"%s\" to remove %d row versions" -msgid "scanned index \"%s\" to remove %d row versions by parallel vacuum worker" -msgstr "se recorrió el índice «%s» para eliminar %d versiones de filas" - -#: access/heap/vacuumlazy.c:2444 +#: access/heap/vacuumlazy.c:3044 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "se recorrió el índice «%s» para eliminar %d versiones de filas" -#: access/heap/vacuumlazy.c:2502 -#, fuzzy, c-format -#| msgid "index \"%s\" now contains %.0f row versions in %u pages" -msgid "index \"%s\" now contains %.0f row versions in %u pages as reported by parallel vacuum worker" -msgstr "el índice «%s» ahora contiene %.0f versiones de filas en %u páginas" - -#: access/heap/vacuumlazy.c:2504 +#: access/heap/vacuumlazy.c:3101 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "el índice «%s» ahora contiene %.0f versiones de filas en %u páginas" -#: access/heap/vacuumlazy.c:2511 -#, c-format +#: access/heap/vacuumlazy.c:3105 +#, fuzzy, c-format +#| msgid "" +#| "%.0f index row versions were removed.\n" +#| "%u index pages have been deleted, %u are currently reusable.\n" +#| "%s." msgid "" "%.0f index row versions were removed.\n" -"%u index pages have been deleted, %u are currently reusable.\n" +"%u index pages were newly deleted.\n" +"%u index pages are currently deleted, of which %u are currently reusable.\n" "%s." msgstr "" "%.0f versiones de filas del índice fueron eliminadas.\n" "%u páginas de índice han sido eliminadas, %u son reusables.\n" "%s." -#: access/heap/vacuumlazy.c:2614 +#: access/heap/vacuumlazy.c:3217 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "«%s»: suspendiendo el truncado debido a una petición de candado en conflicto" -#: access/heap/vacuumlazy.c:2680 +#: access/heap/vacuumlazy.c:3283 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "«%s»: truncadas %u a %u páginas" -#: access/heap/vacuumlazy.c:2745 +#: access/heap/vacuumlazy.c:3348 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "«%s»: suspendiendo el truncado debido a una petición de candado en conflicto" -#: access/heap/vacuumlazy.c:3492 +#: access/heap/vacuumlazy.c:3494 +#, c-format +msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" +msgstr "desactivando el comportamiento paralelo de vacuum en «%s» --- no se puede hacer vacuum de tablas temporales en paralelo" + +#: access/heap/vacuumlazy.c:4249 #, fuzzy, c-format -#| msgid "starting background worker process \"%s\"" -msgid "starting parallel vacuum worker for %s" -msgstr "iniciando el proceso ayudante «%s»" +#| msgid "while scanning block %u of relation \"%s.%s\"" +msgid "while scanning block %u and offset %u of relation \"%s.%s\"" +msgstr "recorriendo el bloque %u de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3583 +#: access/heap/vacuumlazy.c:4252 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "recorriendo el bloque %u de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3586 +#: access/heap/vacuumlazy.c:4256 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "recorriendo la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3592 +#: access/heap/vacuumlazy.c:4264 +#, fuzzy, c-format +#| msgid "while vacuuming block %u of relation \"%s.%s\"" +msgid "while vacuuming block %u and offset %u of relation \"%s.%s\"" +msgstr "haciendo «vacuum» al bloque %u de la relación «%s.%s»" + +#: access/heap/vacuumlazy.c:4267 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "haciendo «vacuum» al bloque %u de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3595 +#: access/heap/vacuumlazy.c:4271 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "mientras se hacía «vacuum» a la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3600 +#: access/heap/vacuumlazy.c:4276 #, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" msgstr "mientras se hacía «vacuum» al índice «%s» de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3605 +#: access/heap/vacuumlazy.c:4281 #, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" msgstr "mientras se limpiaba el índice «%s» de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:3611 +#: access/heap/vacuumlazy.c:4287 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "error mientras se truncaba la relación «%s.%s» a %u bloques" -#: access/index/amapi.c:83 commands/amcmds.c:170 +#: access/index/amapi.c:83 commands/amcmds.c:143 #, c-format msgid "access method \"%s\" is not of type %s" msgstr "el método de acceso «%s» no es de tipo %s" @@ -1364,65 +1519,71 @@ msgstr "el método de acceso «%s» no es de tipo %s" msgid "index access method \"%s\" does not have a handler" msgstr "el método de acceso «%s» no tiene manejador" -#: access/index/indexam.c:142 catalog/objectaddress.c:1260 -#: commands/indexcmds.c:2517 commands/tablecmds.c:254 commands/tablecmds.c:278 -#: commands/tablecmds.c:15702 commands/tablecmds.c:17157 +#: access/index/genam.c:486 +#, fuzzy, c-format +#| msgid "cannot reindex system catalogs concurrently" +msgid "transaction aborted during system catalog scan" +msgstr "no se pueden reindexar catálogos de sistema concurrentemente" + +#: access/index/indexam.c:142 catalog/objectaddress.c:1355 +#: commands/indexcmds.c:2670 commands/tablecmds.c:267 commands/tablecmds.c:291 +#: commands/tablecmds.c:16525 commands/tablecmds.c:18227 #, c-format msgid "\"%s\" is not an index" msgstr "«%s» no es un índice" -#: access/index/indexam.c:970 +#: access/index/indexam.c:973 #, c-format msgid "operator class %s has no options" msgstr "clase de operadores «%s» no tiene opciones" -#: access/nbtree/nbtinsert.c:651 +#: access/nbtree/nbtinsert.c:665 #, c-format msgid "duplicate key value violates unique constraint \"%s\"" msgstr "llave duplicada viola restricción de unicidad «%s»" -#: access/nbtree/nbtinsert.c:653 +#: access/nbtree/nbtinsert.c:667 #, c-format msgid "Key %s already exists." msgstr "Ya existe la llave %s." -#: access/nbtree/nbtinsert.c:747 +#: access/nbtree/nbtinsert.c:761 #, c-format msgid "This may be because of a non-immutable index expression." msgstr "Esto puede deberse a una expresión de índice no inmutable." -#: access/nbtree/nbtpage.c:150 access/nbtree/nbtpage.c:538 -#: parser/parse_utilcmd.c:2244 +#: access/nbtree/nbtpage.c:159 access/nbtree/nbtpage.c:608 +#: parser/parse_utilcmd.c:2329 #, c-format msgid "index \"%s\" is not a btree" msgstr "el índice «%s» no es un btree" -#: access/nbtree/nbtpage.c:157 access/nbtree/nbtpage.c:545 +#: access/nbtree/nbtpage.c:166 access/nbtree/nbtpage.c:615 #, c-format msgid "version mismatch in index \"%s\": file version %d, current version %d, minimal supported version %d" msgstr "discordancia de versión en índice «%s»: versión de archivo %d, versión de código %d, mínima versión soportada %d" -#: access/nbtree/nbtpage.c:1501 +#: access/nbtree/nbtpage.c:1875 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "el índice «%s» contiene una página interna parcialmente muerta" -#: access/nbtree/nbtpage.c:1503 +#: access/nbtree/nbtpage.c:1877 #, c-format msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "Esto puede ser causado por la interrupción de un VACUUM en la versión 9.3 o anteriores, antes de actualizar. Ejecute REINDEX por favor." -#: access/nbtree/nbtutils.c:2664 +#: access/nbtree/nbtutils.c:2665 #, c-format msgid "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" msgstr "el tamaño de fila de índice %1$zu excede el máximo %3$zu para btree versión %2$u para el índice «%4$s»" -#: access/nbtree/nbtutils.c:2670 +#: access/nbtree/nbtutils.c:2671 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "La tupla de índice hace referencia a la tupla (%u,%u) en la relación «%s»." -#: access/nbtree/nbtutils.c:2674 +#: access/nbtree/nbtutils.c:2675 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1431,39 +1592,46 @@ msgstr "" "Valores mayores a 1/3 de la página del buffer no pueden ser indexados.\n" "Considere un índice sobre una función que genere un hash MD5 del valor, o utilice un esquema de indexación de texto completo." -#: access/nbtree/nbtvalidate.c:243 +#: access/nbtree/nbtvalidate.c:246 #, c-format msgid "operator family \"%s\" of access method %s is missing support function for types %s and %s" msgstr "falta una función de soporte para los tipos %3$s y %4$s en la familia de operadores «%1$s» del método de acceso %2$s" -#: access/spgist/spgutils.c:147 +#: access/spgist/spgutils.c:232 #, c-format msgid "compress method must be defined when leaf type is different from input type" msgstr "método «compress» debe estar definido cuando el tipo hoja es distinto del tipo de entrada" -#: access/spgist/spgutils.c:761 +#: access/spgist/spgutils.c:1005 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "el tamaño de tupla interna SP-GiST %zu excede el máximo %zu" -#: access/spgist/spgvalidate.c:281 +#: access/spgist/spgvalidate.c:136 +#, fuzzy, c-format +#| msgid "anycompatiblerange type %s does not match anycompatible type %s" +msgid "SP-GiST leaf data type %s does not match declared type %s" +msgstr "el tipo anycompatiblerange %s no coincide con el tipo anycompatible %s" + +#: access/spgist/spgvalidate.c:302 #, c-format msgid "operator family \"%s\" of access method %s is missing support function %d for type %s" msgstr "falta la función de soporte %3$d para el tipo %4$s de la clase de operadores «%1$s» del método de accesso %2$s" -#: access/table/table.c:49 access/table/table.c:78 access/table/table.c:111 -#: catalog/aclchk.c:1806 +#: access/table/table.c:49 access/table/table.c:83 access/table/table.c:112 +#: access/table/table.c:145 catalog/aclchk.c:1792 #, c-format msgid "\"%s\" is an index" msgstr "«%s» es un índice" -#: access/table/table.c:54 access/table/table.c:83 access/table/table.c:116 -#: catalog/aclchk.c:1813 commands/tablecmds.c:12523 commands/tablecmds.c:15711 +#: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 +#: access/table/table.c:150 catalog/aclchk.c:1799 commands/tablecmds.c:13226 +#: commands/tablecmds.c:16534 #, c-format msgid "\"%s\" is a composite type" msgstr "«%s» es un tipo compuesto" -#: access/table/tableam.c:244 +#: access/table/tableam.c:266 #, c-format msgid "tid (%u, %u) is not valid for relation \"%s\"" msgstr "el tid (%u, %u) no es válido para la relación «%s»" @@ -1473,7 +1641,7 @@ msgstr "el tid (%u, %u) no es válido para la relación «%s»" msgid "%s cannot be empty." msgstr "%s no puede ser vacío." -#: access/table/tableamapi.c:122 utils/misc/guc.c:11928 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12419 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s es demasiado largo (máximo %d caracteres)." @@ -1493,33 +1661,34 @@ msgstr "No existe el método de acceso de tabla «%s»." msgid "sample percentage must be between 0 and 100" msgstr "el porcentaje de muestreo debe estar entre 0 y 100" -#: access/transam/commit_ts.c:295 +#: access/transam/commit_ts.c:278 #, c-format msgid "cannot retrieve commit timestamp for transaction %u" msgstr "no se puede obtener el timestamp de compromiso de la transacción %u" -#: access/transam/commit_ts.c:393 +#: access/transam/commit_ts.c:376 #, c-format msgid "could not get commit timestamp data" msgstr "no se pudo obtener datos de compromiso de transacción" -#: access/transam/commit_ts.c:395 -#, c-format -msgid "Make sure the configuration parameter \"%s\" is set on the master server." +#: access/transam/commit_ts.c:378 +#, fuzzy, c-format +#| msgid "Make sure the configuration parameter \"%s\" is set on the master server." +msgid "Make sure the configuration parameter \"%s\" is set on the primary server." msgstr "Asegúrese que el parámetro de configuración «%s» esté definido en el servidor maestro." -#: access/transam/commit_ts.c:397 +#: access/transam/commit_ts.c:380 #, c-format msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Asegúrese que el parámetro de configuración «%s» esté definido." -#: access/transam/multixact.c:1002 +#: access/transam/multixact.c:1021 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database \"%s\"" msgstr "la base de datos no está aceptando órdenes que generen nuevos MultiXactIds para evitar pérdida de datos debido al reciclaje de transacciones en la base de datos «%s»" -#: access/transam/multixact.c:1004 access/transam/multixact.c:1011 -#: access/transam/multixact.c:1035 access/transam/multixact.c:1044 +#: access/transam/multixact.c:1023 access/transam/multixact.c:1030 +#: access/transam/multixact.c:1054 access/transam/multixact.c:1063 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1528,72 +1697,67 @@ msgstr "" "Ejecute VACUUM de la base completa en esa base de datos.\n" "Puede que además necesite comprometer o abortar transacciones preparadas antiguas, o eliminar slots de replicación añejos." -#: access/transam/multixact.c:1009 +#: access/transam/multixact.c:1028 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database with OID %u" msgstr "la base de datos no está aceptando órdenes que generen nuevos MultiXactIds para evitar pérdida de datos debido al problema del reciclaje de transacciones en la base con OID %u" -#: access/transam/multixact.c:1030 access/transam/multixact.c:2320 +#: access/transam/multixact.c:1049 access/transam/multixact.c:2330 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "database \"%s\" must be vacuumed before %u more MultiXactIds are used" msgstr[0] "base de datos «%s» debe ser limpiada antes de que %u más MultiXactId sea usado" msgstr[1] "base de datos «%s» debe ser limpiada dentro de que %u más MultiXactIds sean usados" -#: access/transam/multixact.c:1039 access/transam/multixact.c:2329 +#: access/transam/multixact.c:1058 access/transam/multixact.c:2339 #, c-format msgid "database with OID %u must be vacuumed before %u more MultiXactId is used" msgid_plural "database with OID %u must be vacuumed before %u more MultiXactIds are used" msgstr[0] "base de datos con OID %u debe ser limpiada antes de que %u más MultiXactId sea usado" msgstr[1] "base de datos con OID %u debe ser limpiada antes de que %u más MultiXactIds sean usados" -#: access/transam/multixact.c:1100 +#: access/transam/multixact.c:1119 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "límite de miembros de multixact alcanzado" -#: access/transam/multixact.c:1101 +#: access/transam/multixact.c:1120 #, c-format msgid "This command would create a multixact with %u members, but the remaining space is only enough for %u member." msgid_plural "This command would create a multixact with %u members, but the remaining space is only enough for %u members." msgstr[0] "Esta orden crearía un multixact con %u miembros, pero el espacio que queda sólo sirve para %u miembro." msgstr[1] "Esta orden crearía un multixact con %u miembros, pero el espacio que queda sólo sirve para %u miembros." -#: access/transam/multixact.c:1106 +#: access/transam/multixact.c:1125 #, c-format msgid "Execute a database-wide VACUUM in database with OID %u with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "Ejecute un VACUUM de la base completa en la base de datos con OID %u con vacuum_multixact_freeze_min_age y vacuum_multixact_freeze_table_age reducidos." -#: access/transam/multixact.c:1137 +#: access/transam/multixact.c:1156 #, c-format msgid "database with OID %u must be vacuumed before %d more multixact member is used" msgid_plural "database with OID %u must be vacuumed before %d more multixact members are used" msgstr[0] "base de datos con OID %u debe ser limpiada antes de que %d miembro más de multixact sea usado" msgstr[1] "base de datos con OID %u debe ser limpiada antes de que %d más miembros de multixact sean usados" -#: access/transam/multixact.c:1142 +#: access/transam/multixact.c:1161 #, c-format msgid "Execute a database-wide VACUUM in that database with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "Ejecute un VACUUM de la base completa en esa base de datos con vacuum_multixact_freeze_min_age y vacuum_multixact_freeze_table_age reducidos." -#: access/transam/multixact.c:1279 +#: access/transam/multixact.c:1298 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "el MultiXactId %u ya no existe -- aparente problema por reciclaje" -#: access/transam/multixact.c:1287 +#: access/transam/multixact.c:1306 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "el MultiXactId %u no se ha creado aún -- aparente problema por reciclaje" -#: access/transam/multixact.c:2270 -#, c-format -msgid "MultiXactId wrap limit is %u, limited by database with OID %u" -msgstr "el límite para el reciclaje de MultiXactId es %u, limitado por base de datos con OID %u" - -#: access/transam/multixact.c:2325 access/transam/multixact.c:2334 -#: access/transam/varsup.c:149 access/transam/varsup.c:156 -#: access/transam/varsup.c:447 access/transam/varsup.c:454 +#: access/transam/multixact.c:2335 access/transam/multixact.c:2344 +#: access/transam/varsup.c:151 access/transam/varsup.c:158 +#: access/transam/varsup.c:466 access/transam/varsup.c:473 #, c-format msgid "" "To avoid a database shutdown, execute a database-wide VACUUM in that database.\n" @@ -1602,138 +1766,123 @@ msgstr "" "Para evitar que la base de datos se desactive, ejecute VACUUM en esa base de datos.\n" "Puede que además necesite comprometer o abortar transacciones preparadas antiguas, o eliminar slots de replicación añejos." -#: access/transam/multixact.c:2604 -#, c-format -msgid "oldest MultiXactId member is at offset %u" -msgstr "el miembro de multixact más antiguo está en la posición %u" - -#: access/transam/multixact.c:2608 +#: access/transam/multixact.c:2618 #, c-format msgid "MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk" msgstr "las protecciones de reciclaje de miembros de multixact están inhabilitadas porque el multixact más antiguo %u en checkpoint no existe en disco" -#: access/transam/multixact.c:2630 +#: access/transam/multixact.c:2640 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "las protecciones de reciclaje de miembros de multixact están habilitadas" -#: access/transam/multixact.c:2633 -#, c-format -msgid "MultiXact member stop limit is now %u based on MultiXact %u" -msgstr "el límite de detención de miembros de multixact es ahora %u basado en el multixact %u" - -#: access/transam/multixact.c:3013 +#: access/transam/multixact.c:3027 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "multixact más antiguo %u no encontrado, multixact más antiguo es %u, omitiendo el truncado" -#: access/transam/multixact.c:3031 +#: access/transam/multixact.c:3045 #, c-format msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" msgstr "no se puede truncar hasta el MultiXact %u porque no existe en disco, omitiendo el truncado" -#: access/transam/multixact.c:3345 +#: access/transam/multixact.c:3359 #, c-format msgid "invalid MultiXactId: %u" msgstr "el MultiXactId no es válido: %u" -#: access/transam/parallel.c:706 access/transam/parallel.c:825 +#: access/transam/parallel.c:707 access/transam/parallel.c:826 #, c-format msgid "parallel worker failed to initialize" msgstr "el ayudante paralelo no pudo iniciar" -#: access/transam/parallel.c:707 access/transam/parallel.c:826 +#: access/transam/parallel.c:708 access/transam/parallel.c:827 #, c-format msgid "More details may be available in the server log." msgstr "Puede haber más detalles disponibles en el log del servidor." -#: access/transam/parallel.c:887 +#: access/transam/parallel.c:888 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster terminó durante una transacción paralela" -#: access/transam/parallel.c:1074 +#: access/transam/parallel.c:1075 #, c-format msgid "lost connection to parallel worker" msgstr "se ha perdido la conexión al ayudante paralelo" -#: access/transam/parallel.c:1140 access/transam/parallel.c:1142 +#: access/transam/parallel.c:1141 access/transam/parallel.c:1143 msgid "parallel worker" msgstr "ayudante paralelo" -#: access/transam/parallel.c:1293 +#: access/transam/parallel.c:1294 #, c-format msgid "could not map dynamic shared memory segment" msgstr "no se pudo mapear el segmento de memoria compartida dinámica" -#: access/transam/parallel.c:1298 +#: access/transam/parallel.c:1299 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "número mágico no válido en segmento de memoria compartida dinámica" -#: access/transam/slru.c:696 +#: access/transam/slru.c:712 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "el archivo «%s» no existe, leyendo como ceros" -#: access/transam/slru.c:937 access/transam/slru.c:943 -#: access/transam/slru.c:951 access/transam/slru.c:956 -#: access/transam/slru.c:963 access/transam/slru.c:968 -#: access/transam/slru.c:975 access/transam/slru.c:982 +#: access/transam/slru.c:944 access/transam/slru.c:950 +#: access/transam/slru.c:958 access/transam/slru.c:963 +#: access/transam/slru.c:970 access/transam/slru.c:975 +#: access/transam/slru.c:982 access/transam/slru.c:989 #, c-format msgid "could not access status of transaction %u" msgstr "no se pudo encontrar el estado de la transacción %u" -#: access/transam/slru.c:938 +#: access/transam/slru.c:945 #, c-format msgid "Could not open file \"%s\": %m." msgstr "No se pudo abrir el archivo «%s»: %m." -#: access/transam/slru.c:944 +#: access/transam/slru.c:951 #, c-format msgid "Could not seek in file \"%s\" to offset %u: %m." msgstr "No se pudo posicionar (seek) en el archivo «%s» a la posición %u: %m." -#: access/transam/slru.c:952 +#: access/transam/slru.c:959 #, c-format msgid "Could not read from file \"%s\" at offset %u: %m." msgstr "No se pudo leer desde el archivo «%s» en la posición %u: %m." -#: access/transam/slru.c:957 +#: access/transam/slru.c:964 #, c-format msgid "Could not read from file \"%s\" at offset %u: read too few bytes." msgstr "No se pudo leer desde el archivo «%s» en la posición %u: se leyeron muy pocos bytes." -#: access/transam/slru.c:964 +#: access/transam/slru.c:971 #, c-format msgid "Could not write to file \"%s\" at offset %u: %m." msgstr "No se pudo escribir al archivo «%s» en la posición %u: %m." -#: access/transam/slru.c:969 +#: access/transam/slru.c:976 #, c-format msgid "Could not write to file \"%s\" at offset %u: wrote too few bytes." msgstr "No se pudo escribir al archivo «%s» en la posición %u: se escribieron muy pocos bytes." -#: access/transam/slru.c:976 +#: access/transam/slru.c:983 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "No se pudo sincronizar (fsync) archivo «%s»: %m." -#: access/transam/slru.c:983 +#: access/transam/slru.c:990 #, c-format msgid "Could not close file \"%s\": %m." msgstr "No se pudo cerrar el archivo «%s»: %m." -#: access/transam/slru.c:1254 +#: access/transam/slru.c:1251 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "no se pudo truncar el directorio «%s»: aparente problema por reciclaje de transacciones" -#: access/transam/slru.c:1309 access/transam/slru.c:1365 -#, c-format -msgid "removing file \"%s\"" -msgstr "eliminando el archivo «%s»" - #: access/transam/timeline.c:163 access/transam/timeline.c:168 #, c-format msgid "syntax error in history file: %s" @@ -1794,146 +1943,154 @@ msgstr "Defina max_prepared_transactions a un valor distinto de cero." msgid "transaction identifier \"%s\" is already in use" msgstr "identificador de transacción «%s» ya está siendo utilizado" -#: access/transam/twophase.c:417 access/transam/twophase.c:2368 +#: access/transam/twophase.c:417 access/transam/twophase.c:2385 #, c-format msgid "maximum number of prepared transactions reached" msgstr "se alcanzó el número máximo de transacciones preparadas" -#: access/transam/twophase.c:418 access/transam/twophase.c:2369 +#: access/transam/twophase.c:418 access/transam/twophase.c:2386 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "Incremente max_prepared_transactions (actualmente es %d)." -#: access/transam/twophase.c:586 +#: access/transam/twophase.c:584 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "transacción preparada con identificador «%s» está ocupada" -#: access/transam/twophase.c:592 +#: access/transam/twophase.c:590 #, c-format msgid "permission denied to finish prepared transaction" msgstr "se ha denegado el permiso para finalizar la transacción preparada" -#: access/transam/twophase.c:593 +#: access/transam/twophase.c:591 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "Debe ser superusuario o el usuario que preparó la transacción." -#: access/transam/twophase.c:604 +#: access/transam/twophase.c:602 #, c-format msgid "prepared transaction belongs to another database" msgstr "la transacción preparada pertenece a otra base de datos" -#: access/transam/twophase.c:605 +#: access/transam/twophase.c:603 #, c-format msgid "Connect to the database where the transaction was prepared to finish it." msgstr "Conéctese a la base de datos donde la transacción fue preparada para terminarla." -#: access/transam/twophase.c:620 +#: access/transam/twophase.c:618 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "transacción preparada con identificador «%s» no existe" -#: access/transam/twophase.c:1098 +#: access/transam/twophase.c:1093 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "el largo máximo del archivo de estado de dos fases fue excedido" -#: access/transam/twophase.c:1252 -#, c-format -msgid "incorrect size of file \"%s\": %zu byte" -msgid_plural "incorrect size of file \"%s\": %zu bytes" +#: access/transam/twophase.c:1247 +#, fuzzy, c-format +#| msgid "incorrect size of file \"%s\": %zu byte" +#| msgid_plural "incorrect size of file \"%s\": %zu bytes" +msgid "incorrect size of file \"%s\": %lld byte" +msgid_plural "incorrect size of file \"%s\": %lld bytes" msgstr[0] "tamaño incorrecto de archivo «%s»: %zu byte" msgstr[1] "tamaño incorrecto de archivo «%s»: %zu bytes" -#: access/transam/twophase.c:1261 +#: access/transam/twophase.c:1256 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" msgstr "alineamiento incorrecto del offset del CRC para el archivo «%s»" -#: access/transam/twophase.c:1294 +#: access/transam/twophase.c:1274 +#, fuzzy, c-format +#| msgid "could not read file \"%s\": read %d of %zu" +msgid "could not read file \"%s\": read %d of %lld" +msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" + +#: access/transam/twophase.c:1289 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "número mágico no válido almacenado en archivo «%s»" -#: access/transam/twophase.c:1300 +#: access/transam/twophase.c:1295 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "tamaño no válido en archivo «%s»" -#: access/transam/twophase.c:1312 +#: access/transam/twophase.c:1307 #, c-format msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "la suma de verificación calculada no coincide con el valor almacenado en el archivo «%s»" -#: access/transam/twophase.c:1342 access/transam/xlog.c:6494 +#: access/transam/twophase.c:1342 access/transam/xlog.c:6634 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Falló mientras se emplazaba un procesador de lectura de WAL." -#: access/transam/twophase.c:1349 +#: access/transam/twophase.c:1357 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "no se pudo leer el archivo de estado de dos fases desde WAL en %X/%X" -#: access/transam/twophase.c:1357 +#: access/transam/twophase.c:1364 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "los datos de estado de dos fases esperados no están presentes en WAL en %X/%X" -#: access/transam/twophase.c:1637 +#: access/transam/twophase.c:1641 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "no se pudo recrear archivo «%s»: %m" -#: access/transam/twophase.c:1764 +#: access/transam/twophase.c:1768 #, c-format msgid "%u two-phase state file was written for a long-running prepared transaction" msgid_plural "%u two-phase state files were written for long-running prepared transactions" msgstr[0] "%u archivo de estado de dos fases fue escrito para transacción de larga duración" msgstr[1] "%u archivos de estado de dos fases fueron escritos para transacciones de larga duración" -#: access/transam/twophase.c:1998 +#: access/transam/twophase.c:2002 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "recuperando transacción preparada %u desde memoria compartida" -#: access/transam/twophase.c:2089 +#: access/transam/twophase.c:2093 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "eliminando archivo obsoleto de estado de dos fases para transacción %u" -#: access/transam/twophase.c:2096 +#: access/transam/twophase.c:2100 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "eliminando de memoria estado de dos fases obsoleto para transacción %u" -#: access/transam/twophase.c:2109 +#: access/transam/twophase.c:2113 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "eliminando archivo futuro de estado de dos fases para transacción %u" -#: access/transam/twophase.c:2116 +#: access/transam/twophase.c:2120 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "eliminando estado de dos fases futuro de memoria para transacción %u" -#: access/transam/twophase.c:2141 +#: access/transam/twophase.c:2145 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "archivo de estado de dos fases corrupto para transacción %u" -#: access/transam/twophase.c:2146 +#: access/transam/twophase.c:2150 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "estado de dos fases en memoria corrupto para transacción %u" -#: access/transam/varsup.c:127 +#: access/transam/varsup.c:129 #, c-format msgid "database is not accepting commands to avoid wraparound data loss in database \"%s\"" msgstr "la base de datos no está aceptando órdenes para evitar pérdida de datos debido al problema del reciclaje de transacciones en la base de datos «%s»" -#: access/transam/varsup.c:129 access/transam/varsup.c:136 +#: access/transam/varsup.c:131 access/transam/varsup.c:138 #, c-format msgid "" "Stop the postmaster and vacuum that database in single-user mode.\n" @@ -1942,567 +2099,579 @@ msgstr "" "Detenga el postmaster y ejecute VACUUM de la base completa en esa base de datos.\n" "Puede que además necesite comprometer o abortar transacciones preparadas antiguas, o eliminar slots de replicación añejos." -#: access/transam/varsup.c:134 +#: access/transam/varsup.c:136 #, c-format msgid "database is not accepting commands to avoid wraparound data loss in database with OID %u" msgstr "la base de datos no está aceptando órdenes para evitar pérdida de datos debido al problema del reciclaje de transacciones en la base con OID %u" -#: access/transam/varsup.c:146 access/transam/varsup.c:444 +#: access/transam/varsup.c:148 access/transam/varsup.c:463 #, c-format msgid "database \"%s\" must be vacuumed within %u transactions" msgstr "base de datos «%s» debe ser limpiada dentro de %u transacciones" -#: access/transam/varsup.c:153 access/transam/varsup.c:451 +#: access/transam/varsup.c:155 access/transam/varsup.c:470 #, c-format msgid "database with OID %u must be vacuumed within %u transactions" msgstr "base de datos con OID %u debe ser limpiada dentro de %u transacciones" -#: access/transam/varsup.c:409 -#, c-format -msgid "transaction ID wrap limit is %u, limited by database with OID %u" -msgstr "el límite para el reciclaje de ID de transacciones es %u, limitado por base de datos con OID %u" - -#: access/transam/xact.c:1030 +#: access/transam/xact.c:1045 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "no se pueden tener más de 2^32-2 órdenes en una transacción" -#: access/transam/xact.c:1555 +#: access/transam/xact.c:1582 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "se superó el número máximo de subtransacciones comprometidas (%d)" -#: access/transam/xact.c:2395 +#: access/transam/xact.c:2423 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "no se puede hacer PREPARE de una transacción que ha operado en objetos temporales" -#: access/transam/xact.c:2405 +#: access/transam/xact.c:2433 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "no se puede hacer PREPARE de una transacción que ha exportado snapshots" -#: access/transam/xact.c:2414 -#, c-format -msgid "cannot PREPARE a transaction that has manipulated logical replication workers" -msgstr "no se puede hacer PREPARE de una transacción que ha manipulado procesos ayudantes de replicación lógica" - #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3359 +#: access/transam/xact.c:3388 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s no puede ser ejecutado dentro de un bloque de transacción" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3369 +#: access/transam/xact.c:3398 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s no puede ser ejecutado dentro de una subtransacción" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3379 +#: access/transam/xact.c:3408 #, c-format msgid "%s cannot be executed from a function" msgstr "%s no puede ser ejecutado desde una función" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3448 access/transam/xact.c:3754 -#: access/transam/xact.c:3833 access/transam/xact.c:3956 -#: access/transam/xact.c:4107 access/transam/xact.c:4176 -#: access/transam/xact.c:4287 +#: access/transam/xact.c:3477 access/transam/xact.c:3783 +#: access/transam/xact.c:3862 access/transam/xact.c:3985 +#: access/transam/xact.c:4136 access/transam/xact.c:4205 +#: access/transam/xact.c:4316 #, c-format msgid "%s can only be used in transaction blocks" msgstr "la orden %s sólo puede ser usada en bloques de transacción" -#: access/transam/xact.c:3640 +#: access/transam/xact.c:3669 #, c-format msgid "there is already a transaction in progress" msgstr "ya hay una transacción en curso" -#: access/transam/xact.c:3759 access/transam/xact.c:3838 -#: access/transam/xact.c:3961 +#: access/transam/xact.c:3788 access/transam/xact.c:3867 +#: access/transam/xact.c:3990 #, c-format msgid "there is no transaction in progress" msgstr "no hay una transacción en curso" -#: access/transam/xact.c:3849 +#: access/transam/xact.c:3878 #, c-format msgid "cannot commit during a parallel operation" msgstr "no se puede comprometer una transacción durante una operación paralela" -#: access/transam/xact.c:3972 +#: access/transam/xact.c:4001 #, c-format msgid "cannot abort during a parallel operation" msgstr "no se puede abortar durante una operación paralela" -#: access/transam/xact.c:4071 +#: access/transam/xact.c:4100 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "no se pueden definir savepoints durante una operación paralela" -#: access/transam/xact.c:4158 +#: access/transam/xact.c:4187 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "no se pueden liberar savepoints durante una operación paralela" -#: access/transam/xact.c:4168 access/transam/xact.c:4219 -#: access/transam/xact.c:4279 access/transam/xact.c:4328 +#: access/transam/xact.c:4197 access/transam/xact.c:4248 +#: access/transam/xact.c:4308 access/transam/xact.c:4357 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "no existe el «savepoint» «%s»" -#: access/transam/xact.c:4225 access/transam/xact.c:4334 +#: access/transam/xact.c:4254 access/transam/xact.c:4363 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "el «savepoint» «%s» no existe dentro del nivel de savepoint actual" -#: access/transam/xact.c:4267 +#: access/transam/xact.c:4296 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "no se puede hacer rollback a un savepoint durante una operación paralela" -#: access/transam/xact.c:4395 +#: access/transam/xact.c:4424 #, c-format msgid "cannot start subtransactions during a parallel operation" msgstr "no se pueden iniciar subtransacciones durante una operación paralela" -#: access/transam/xact.c:4463 +#: access/transam/xact.c:4492 #, c-format msgid "cannot commit subtransactions during a parallel operation" msgstr "no se pueden comprometer subtransacciones durante una operación paralela" -#: access/transam/xact.c:5103 +#: access/transam/xact.c:5133 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "no se pueden tener más de 2^32-1 subtransacciones en una transacción" -#: access/transam/xlog.c:2554 +#: access/transam/xlog.c:1825 #, c-format -msgid "could not write to log file %s at offset %u, length %zu: %m" -msgstr "no se pudo escribir archivo de registro %s en la posición %u, largo %zu: %m" +msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" +msgstr "" -#: access/transam/xlog.c:2830 +#: access/transam/xlog.c:2586 #, c-format -msgid "updated min recovery point to %X/%X on timeline %u" -msgstr "el punto mínimo de recuperación fue actualizado a %X/%X en el timeline %u" +msgid "could not write to log file %s at offset %u, length %zu: %m" +msgstr "no se pudo escribir archivo de registro %s en la posición %u, largo %zu: %m" -#: access/transam/xlog.c:3944 access/transam/xlogutils.c:802 -#: replication/walsender.c:2502 +#: access/transam/xlog.c:3988 access/transam/xlogutils.c:798 +#: replication/walsender.c:2520 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "el segmento de WAL solicitado %s ya ha sido eliminado" -#: access/transam/xlog.c:4187 -#, c-format -msgid "recycled write-ahead log file \"%s\"" -msgstr "reciclado archivo de WAL «%s»" - -#: access/transam/xlog.c:4199 -#, c-format -msgid "removing write-ahead log file \"%s\"" -msgstr "eliminando archivo de WAL «%s»" - -#: access/transam/xlog.c:4219 +#: access/transam/xlog.c:4263 #, c-format msgid "could not rename file \"%s\": %m" msgstr "no se pudo renombrar el archivo «%s»: %m" -#: access/transam/xlog.c:4261 access/transam/xlog.c:4271 +#: access/transam/xlog.c:4305 access/transam/xlog.c:4315 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "no existe el directorio WAL «%s»" -#: access/transam/xlog.c:4277 +#: access/transam/xlog.c:4321 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "creando el directorio WAL faltante «%s»" -#: access/transam/xlog.c:4280 +#: access/transam/xlog.c:4324 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "no se pudo crear el directorio faltante «%s»: %m" -#: access/transam/xlog.c:4383 +#: access/transam/xlog.c:4427 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "ID de timeline %u inesperado en archivo %s, posición %u" -#: access/transam/xlog.c:4521 +#: access/transam/xlog.c:4565 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "el nuevo timeline %u especificado no es hijo del timeline de sistema %u" -#: access/transam/xlog.c:4535 +#: access/transam/xlog.c:4579 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "el nuevo timeline %u bifurcó del timeline del sistema actual %u antes del punto re recuperación actual %X/%X" -#: access/transam/xlog.c:4554 +#: access/transam/xlog.c:4598 #, c-format msgid "new target timeline is %u" msgstr "el nuevo timeline destino es %u" -#: access/transam/xlog.c:4590 +#: access/transam/xlog.c:4634 #, c-format msgid "could not generate secret authorization token" msgstr "no se pudo generar un token de autorización secreto" -#: access/transam/xlog.c:4749 access/transam/xlog.c:4758 -#: access/transam/xlog.c:4782 access/transam/xlog.c:4789 -#: access/transam/xlog.c:4796 access/transam/xlog.c:4801 -#: access/transam/xlog.c:4808 access/transam/xlog.c:4815 -#: access/transam/xlog.c:4822 access/transam/xlog.c:4829 -#: access/transam/xlog.c:4836 access/transam/xlog.c:4843 +#: access/transam/xlog.c:4793 access/transam/xlog.c:4802 +#: access/transam/xlog.c:4826 access/transam/xlog.c:4833 +#: access/transam/xlog.c:4840 access/transam/xlog.c:4845 #: access/transam/xlog.c:4852 access/transam/xlog.c:4859 -#: utils/init/miscinit.c:1548 +#: access/transam/xlog.c:4866 access/transam/xlog.c:4873 +#: access/transam/xlog.c:4880 access/transam/xlog.c:4887 +#: access/transam/xlog.c:4896 access/transam/xlog.c:4903 +#: utils/init/miscinit.c:1578 #, c-format msgid "database files are incompatible with server" msgstr "los archivos de base de datos son incompatibles con el servidor" -#: access/transam/xlog.c:4750 +#: access/transam/xlog.c:4794 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), but the server was compiled with PG_CONTROL_VERSION %d (0x%08x)." msgstr "Los archivos de base de datos fueron inicializados con PG_CONTROL_VERSION %d (0x%08x), pero el servidor fue compilado con PG_CONTROL_VERSION %d (0x%08x)." -#: access/transam/xlog.c:4754 +#: access/transam/xlog.c:4798 #, c-format msgid "This could be a problem of mismatched byte ordering. It looks like you need to initdb." msgstr "Este puede ser un problema de discordancia en el orden de bytes. Parece que necesitará ejecutar initdb." -#: access/transam/xlog.c:4759 +#: access/transam/xlog.c:4803 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d, but the server was compiled with PG_CONTROL_VERSION %d." msgstr "Los archivos de base de datos fueron inicializados con PG_CONTROL_VERSION %d, pero el servidor fue compilado con PG_CONTROL_VERSION %d." -#: access/transam/xlog.c:4762 access/transam/xlog.c:4786 -#: access/transam/xlog.c:4793 access/transam/xlog.c:4798 +#: access/transam/xlog.c:4806 access/transam/xlog.c:4830 +#: access/transam/xlog.c:4837 access/transam/xlog.c:4842 #, c-format msgid "It looks like you need to initdb." msgstr "Parece que necesita ejecutar initdb." -#: access/transam/xlog.c:4773 +#: access/transam/xlog.c:4817 #, c-format msgid "incorrect checksum in control file" msgstr "la suma de verificación es incorrecta en el archivo de control" -#: access/transam/xlog.c:4783 +#: access/transam/xlog.c:4827 #, c-format msgid "The database cluster was initialized with CATALOG_VERSION_NO %d, but the server was compiled with CATALOG_VERSION_NO %d." msgstr "Los archivos de base de datos fueron inicializados con CATALOG_VERSION_NO %d, pero el servidor fue compilado con CATALOG_VERSION_NO %d." -#: access/transam/xlog.c:4790 +#: access/transam/xlog.c:4834 #, c-format msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." msgstr "Los archivos de la base de datos fueron inicializados con MAXALIGN %d, pero el servidor fue compilado con MAXALIGN %d." -#: access/transam/xlog.c:4797 +#: access/transam/xlog.c:4841 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "Los archivos de la base de datos parecen usar un formato de número de coma flotante distinto al del ejecutable del servidor." -#: access/transam/xlog.c:4802 +#: access/transam/xlog.c:4846 #, c-format msgid "The database cluster was initialized with BLCKSZ %d, but the server was compiled with BLCKSZ %d." msgstr "Los archivos de base de datos fueron inicializados con BLCKSZ %d, pero el servidor fue compilado con BLCKSZ %d." -#: access/transam/xlog.c:4805 access/transam/xlog.c:4812 -#: access/transam/xlog.c:4819 access/transam/xlog.c:4826 -#: access/transam/xlog.c:4833 access/transam/xlog.c:4840 -#: access/transam/xlog.c:4847 access/transam/xlog.c:4855 -#: access/transam/xlog.c:4862 +#: access/transam/xlog.c:4849 access/transam/xlog.c:4856 +#: access/transam/xlog.c:4863 access/transam/xlog.c:4870 +#: access/transam/xlog.c:4877 access/transam/xlog.c:4884 +#: access/transam/xlog.c:4891 access/transam/xlog.c:4899 +#: access/transam/xlog.c:4906 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Parece que necesita recompilar o ejecutar initdb." -#: access/transam/xlog.c:4809 +#: access/transam/xlog.c:4853 #, c-format msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." msgstr "Los archivos de la base de datos fueron inicializados con RELSEG_SIZE %d, pero el servidor fue compilado con RELSEG_SIZE %d." -#: access/transam/xlog.c:4816 +#: access/transam/xlog.c:4860 #, c-format msgid "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was compiled with XLOG_BLCKSZ %d." msgstr "Los archivos de base de datos fueron inicializados con XLOG_BLCKSZ %d, pero el servidor fue compilado con XLOG_BLCKSZ %d." -#: access/transam/xlog.c:4823 +#: access/transam/xlog.c:4867 #, c-format msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." msgstr "Los archivos de la base de datos fueron inicializados con NAMEDATALEN %d, pero el servidor fue compilado con NAMEDATALEN %d." -#: access/transam/xlog.c:4830 +#: access/transam/xlog.c:4874 #, c-format msgid "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server was compiled with INDEX_MAX_KEYS %d." msgstr "Los archivos de la base de datos fueron inicializados con INDEX_MAX_KEYS %d, pero el servidor fue compilado con INDEX_MAX_KEYS %d." -#: access/transam/xlog.c:4837 +#: access/transam/xlog.c:4881 #, c-format msgid "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the server was compiled with TOAST_MAX_CHUNK_SIZE %d." msgstr "Los archivos de la base de datos fueron inicializados con TOAST_MAX_CHUNK_SIZE %d, pero el servidor fue compilado con TOAST_MAX_CHUNK_SIZE %d." -#: access/transam/xlog.c:4844 +#: access/transam/xlog.c:4888 #, c-format msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." msgstr "Los archivos de base de datos fueron inicializados con LOBLKSIZE %d, pero el servidor fue compilado con LOBLKSIZE %d." -#: access/transam/xlog.c:4853 +#: access/transam/xlog.c:4897 #, c-format msgid "The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL." msgstr "Los archivos de base de datos fueron inicializados sin USE_FLOAT8_BYVAL, pero el servidor fue compilado con USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4860 +#: access/transam/xlog.c:4904 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "Los archivos de base de datos fueron inicializados con USE_FLOAT8_BYVAL, pero el servidor fue compilado sin USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4869 +#: access/transam/xlog.c:4913 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "El tamaño del segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el archivo de control especifica %d byte" msgstr[1] "El tamaño del segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el archivo de control especifica %d bytes" -#: access/transam/xlog.c:4881 +#: access/transam/xlog.c:4925 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "«min_wal_size» debe ser al menos el doble de «wal_segment_size»" -#: access/transam/xlog.c:4885 +#: access/transam/xlog.c:4929 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "«max_wal_size» debe ser al menos el doble de «wal_segment_size»" -#: access/transam/xlog.c:5318 +#: access/transam/xlog.c:5363 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "no se pudo escribir el archivo WAL de boostrap: %m" -#: access/transam/xlog.c:5326 +#: access/transam/xlog.c:5371 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "no se pudo sincronizar (fsync) el archivo de WAL de bootstrap: %m" -#: access/transam/xlog.c:5332 +#: access/transam/xlog.c:5377 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "no se pudo cerrar el archivo WAL de bootstrap: %m" -#: access/transam/xlog.c:5393 +#: access/transam/xlog.c:5438 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "el uso del archivo de configuración de recuperación «%s» no está soportado" -#: access/transam/xlog.c:5458 +#: access/transam/xlog.c:5503 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "el modo standby no está soportado en el modo mono-usuario" -#: access/transam/xlog.c:5475 +#: access/transam/xlog.c:5520 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "no se especifica primary_conninfo ni restore_command" -#: access/transam/xlog.c:5476 +#: access/transam/xlog.c:5521 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "El servidor de bases de datos monitoreará el subdirectorio pg_wal con regularidad en búsqueda de archivos almacenados ahí." -#: access/transam/xlog.c:5484 +#: access/transam/xlog.c:5529 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "debe especificarse restore_command cuando el modo standby no está activo" -#: access/transam/xlog.c:5522 +#: access/transam/xlog.c:5567 #, c-format msgid "recovery target timeline %u does not exist" msgstr "no existe el timeline %u especificado como destino de recuperación" -#: access/transam/xlog.c:5644 +#: access/transam/xlog.c:5689 #, c-format msgid "archive recovery complete" msgstr "recuperación completa" -#: access/transam/xlog.c:5710 access/transam/xlog.c:5983 +#: access/transam/xlog.c:5755 access/transam/xlog.c:6026 #, c-format msgid "recovery stopping after reaching consistency" msgstr "deteniendo recuperación al alcanzar un estado consistente" -#: access/transam/xlog.c:5731 +#: access/transam/xlog.c:5776 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "deteniendo recuperación antes de la ubicación (LSN) de WAL «%X/%X»" -#: access/transam/xlog.c:5817 +#: access/transam/xlog.c:5861 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "deteniendo recuperación antes de comprometer la transacción %u, hora %s" -#: access/transam/xlog.c:5824 +#: access/transam/xlog.c:5868 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "deteniendo recuperación antes de abortar la transacción %u, hora %s" -#: access/transam/xlog.c:5877 +#: access/transam/xlog.c:5921 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "deteniendo recuperación en el punto de recuperación «%s», hora %s" -#: access/transam/xlog.c:5895 +#: access/transam/xlog.c:5939 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "deteniendo recuperación después de la ubicación (LSN) de WAL «%X/%X»" -#: access/transam/xlog.c:5963 +#: access/transam/xlog.c:6006 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "deteniendo recuperación de comprometer la transacción %u, hora %s" -#: access/transam/xlog.c:5971 +#: access/transam/xlog.c:6014 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "deteniendo recuperación después de abortar la transacción %u, hora %s" -#: access/transam/xlog.c:6020 +#: access/transam/xlog.c:6059 #, c-format msgid "pausing at the end of recovery" msgstr "pausando al final de la recuperación" -#: access/transam/xlog.c:6021 +#: access/transam/xlog.c:6060 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Ejecute pg_wal_replay_resume() para promover." -#: access/transam/xlog.c:6024 +#: access/transam/xlog.c:6063 access/transam/xlog.c:6336 #, c-format msgid "recovery has paused" msgstr "la recuperación está en pausa" -#: access/transam/xlog.c:6025 +#: access/transam/xlog.c:6064 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Ejecute pg_wal_replay_resume() para continuar." -#: access/transam/xlog.c:6242 -#, c-format -msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" +#: access/transam/xlog.c:6327 +#, fuzzy, c-format +#| msgid "hot standby is not possible because wal_level was not set to \"replica\" or higher on the master server" +msgid "hot standby is not possible because of insufficient parameter settings" +msgstr "hot standby no es posible porque wal_level no estaba configurado como «replica» o superior en el servidor maestro" + +#: access/transam/xlog.c:6328 access/transam/xlog.c:6355 +#: access/transam/xlog.c:6385 +#, fuzzy, c-format +#| msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" +msgid "%s = %d is a lower setting than on the primary server, where its value was %d." msgstr "hot standby no es posible puesto que %s = %d es una configuración menor que en el servidor maestro (su valor era %d)" -#: access/transam/xlog.c:6266 +#: access/transam/xlog.c:6337 #, c-format -msgid "WAL was generated with wal_level=minimal, data may be missing" -msgstr "WAL fue generado con wal_level=minimal, puede haber datos faltantes" +msgid "If recovery is unpaused, the server will shut down." +msgstr "" -#: access/transam/xlog.c:6267 +#: access/transam/xlog.c:6338 #, c-format -msgid "This happens if you temporarily set wal_level=minimal without taking a new base backup." -msgstr "Esto sucede si temporalmente define wal_level=minimal sin tomar un nuevo respaldo base." +msgid "You can then restart the server after making the necessary configuration changes." +msgstr "" + +#: access/transam/xlog.c:6349 +#, fuzzy, c-format +#| msgid "rotation not possible because log collection not active" +msgid "promotion is not possible because of insufficient parameter settings" +msgstr "la rotación no es posible porque la recoleccion de log no está activa" -#: access/transam/xlog.c:6278 +#: access/transam/xlog.c:6359 +#, fuzzy, c-format +#| msgid "Sets the server's main configuration file." +msgid "Restart the server after making the necessary configuration changes." +msgstr "Define la ubicación del archivo principal de configuración del servidor." + +#: access/transam/xlog.c:6383 #, c-format -msgid "hot standby is not possible because wal_level was not set to \"replica\" or higher on the master server" -msgstr "hot standby no es posible porque wal_level no estaba configurado como «replica» o superior en el servidor maestro" +msgid "recovery aborted because of insufficient parameter settings" +msgstr "" + +#: access/transam/xlog.c:6389 +#, c-format +msgid "You can restart the server after making the necessary configuration changes." +msgstr "" -#: access/transam/xlog.c:6279 +#: access/transam/xlog.c:6411 +#, fuzzy, c-format +#| msgid "WAL was generated with wal_level=minimal, data may be missing" +msgid "WAL was generated with wal_level=minimal, cannot continue recovering" +msgstr "WAL fue generado con wal_level=minimal, puede haber datos faltantes" + +#: access/transam/xlog.c:6412 +#, fuzzy, c-format +#| msgid "This happens if you temporarily set wal_level=minimal without taking a new base backup." +msgid "This happens if you temporarily set wal_level=minimal on the server." +msgstr "Esto sucede si temporalmente define wal_level=minimal sin tomar un nuevo respaldo base." + +#: access/transam/xlog.c:6413 #, c-format -msgid "Either set wal_level to \"replica\" on the master, or turn off hot_standby here." -msgstr "Defina wal_level a «replica» en el maestro, o bien desactive hot_standby en este servidor." +msgid "Use a backup taken after setting wal_level to higher than minimal." +msgstr "" -#: access/transam/xlog.c:6341 +#: access/transam/xlog.c:6482 #, c-format msgid "control file contains invalid checkpoint location" msgstr "el archivo de control contiene una ubicación no válida de punto de control" -#: access/transam/xlog.c:6352 +#: access/transam/xlog.c:6493 #, c-format msgid "database system was shut down at %s" msgstr "el sistema de bases de datos fue apagado en %s" -#: access/transam/xlog.c:6358 +#: access/transam/xlog.c:6499 #, c-format msgid "database system was shut down in recovery at %s" msgstr "el sistema de bases de datos fue apagado durante la recuperación en %s" -#: access/transam/xlog.c:6364 +#: access/transam/xlog.c:6505 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "el apagado del sistema de datos fue interrumpido; última vez registrada en funcionamiento en %s" -#: access/transam/xlog.c:6370 +#: access/transam/xlog.c:6511 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "el sistema de bases de datos fue interrumpido durante la recuperación en %s" -#: access/transam/xlog.c:6372 +#: access/transam/xlog.c:6513 #, c-format msgid "This probably means that some data is corrupted and you will have to use the last backup for recovery." msgstr "Esto probablemente significa que algunos datos están corruptos y tendrá que usar el respaldo más reciente para la recuperación." -#: access/transam/xlog.c:6378 +#: access/transam/xlog.c:6519 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "el sistema de bases de datos fue interrumpido durante la recuperación en el instante de registro %s" -#: access/transam/xlog.c:6380 +#: access/transam/xlog.c:6521 #, c-format msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." msgstr "Si esto ha ocurrido más de una vez, algunos datos podrían estar corruptos y podría ser necesario escoger un punto de recuperación anterior." -#: access/transam/xlog.c:6386 +#: access/transam/xlog.c:6527 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "el sistema de bases de datos fue interrumpido; última vez en funcionamiento en %s" -#: access/transam/xlog.c:6392 +#: access/transam/xlog.c:6533 #, c-format msgid "control file contains invalid database cluster state" msgstr "el archivo de control contiene un estado no válido del clúster" -#: access/transam/xlog.c:6449 +#: access/transam/xlog.c:6590 #, c-format msgid "entering standby mode" msgstr "entrando al modo standby" -#: access/transam/xlog.c:6452 +#: access/transam/xlog.c:6593 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "comenzando el proceso de recuperación hasta el XID %u" -#: access/transam/xlog.c:6456 +#: access/transam/xlog.c:6597 #, c-format msgid "starting point-in-time recovery to %s" msgstr "comenzando el proceso de recuperación hasta %s" -#: access/transam/xlog.c:6460 +#: access/transam/xlog.c:6601 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "comenzando el proceso de recuperación hasta «%s»" -#: access/transam/xlog.c:6464 +#: access/transam/xlog.c:6605 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "comenzando el proceso de recuperación punto-en-el-tiempo a la ubicación (LSN) de WAL «%X/%X»" -#: access/transam/xlog.c:6469 +#: access/transam/xlog.c:6609 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "comenzando recuperación a un punto en el tiempo hasta alcanzar un estado consistente" -#: access/transam/xlog.c:6472 +#: access/transam/xlog.c:6612 #, c-format msgid "starting archive recovery" msgstr "comenzando proceso de recuperación" -#: access/transam/xlog.c:6531 access/transam/xlog.c:6664 -#, c-format -msgid "checkpoint record is at %X/%X" -msgstr "el registro del punto de control está en %X/%X" - -#: access/transam/xlog.c:6546 +#: access/transam/xlog.c:6686 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "no se pudo encontrar la ubicación de redo referida por el registro de punto de control" # Purposefully deviate from quoting convention here, since argument is a shell command. -#: access/transam/xlog.c:6547 access/transam/xlog.c:6557 +#: access/transam/xlog.c:6687 access/transam/xlog.c:6697 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2513,278 +2682,281 @@ msgstr "" "Si no está restaurando de un respaldo, intente eliminar el archivo \"%s/backup_label\".\n" "Tenga cuidado: eliminar \"%s/backup_label\" resultará en un clúster corrupto si está restaurando de un respaldo." -#: access/transam/xlog.c:6556 +#: access/transam/xlog.c:6696 #, c-format msgid "could not locate required checkpoint record" msgstr "no se pudo localizar el registro del punto de control requerido" -#: access/transam/xlog.c:6585 commands/tablespace.c:654 +#: access/transam/xlog.c:6725 commands/tablespace.c:666 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "no se pudo crear el enlace simbólico «%s»: %m" -#: access/transam/xlog.c:6617 access/transam/xlog.c:6623 +#: access/transam/xlog.c:6757 access/transam/xlog.c:6763 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ignorando el archivo «%s» porque no existe un archivo «%s»" -#: access/transam/xlog.c:6619 access/transam/xlog.c:11828 +#: access/transam/xlog.c:6759 access/transam/xlog.c:12060 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "El archivo «%s» fue renombrado a «%s»." -#: access/transam/xlog.c:6625 +#: access/transam/xlog.c:6765 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "No se pudo renombrar el archivo de «%s» a «%s»: %m." -#: access/transam/xlog.c:6676 +#: access/transam/xlog.c:6816 #, c-format msgid "could not locate a valid checkpoint record" msgstr "no se pudo localizar un registro de punto de control válido" -#: access/transam/xlog.c:6714 +#: access/transam/xlog.c:6854 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "el timeline solicitado %u no es un hijo de la historia de este servidor" -#: access/transam/xlog.c:6716 +#: access/transam/xlog.c:6856 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "El punto de control más reciente está en %X/%X en el timeline %u, pero en la historia del timeline solicitado, el servidor se desvió desde ese timeline en %X/%X." -#: access/transam/xlog.c:6732 +#: access/transam/xlog.c:6870 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "el timeline solicitado %u no contiene el punto mínimo de recuperación %X/%X en el timeline %u" -#: access/transam/xlog.c:6763 +#: access/transam/xlog.c:6900 #, c-format msgid "invalid next transaction ID" msgstr "el siguiente ID de transacción no es válido" -#: access/transam/xlog.c:6857 +#: access/transam/xlog.c:7000 #, c-format msgid "invalid redo in checkpoint record" msgstr "redo no es válido en el registro de punto de control" -#: access/transam/xlog.c:6868 +#: access/transam/xlog.c:7011 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "registro redo no es válido en el punto de control de apagado" -#: access/transam/xlog.c:6902 +#: access/transam/xlog.c:7045 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "el sistema de bases de datos no fue apagado apropiadamente; se está efectuando la recuperación automática" -#: access/transam/xlog.c:6906 +#: access/transam/xlog.c:7049 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "la recuperación comienza en el timeline %u y tiene un timeline de destino %u" -#: access/transam/xlog.c:6953 +#: access/transam/xlog.c:7096 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label contiene datos inconsistentes con el archivo de control" -#: access/transam/xlog.c:6954 +#: access/transam/xlog.c:7097 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "Esto significa que el respaldo está corrupto y deberá usar otro respaldo para la recuperación." -#: access/transam/xlog.c:7045 -#, c-format -msgid "initializing for hot standby" -msgstr "inicializando para hot standby" - -#: access/transam/xlog.c:7178 +#: access/transam/xlog.c:7323 #, c-format msgid "redo starts at %X/%X" msgstr "redo comienza en %X/%X" -#: access/transam/xlog.c:7402 +#: access/transam/xlog.c:7548 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "el punto de detención de recuperación pedido es antes del punto de recuperación consistente" -#: access/transam/xlog.c:7440 -#, c-format -msgid "redo done at %X/%X" +#: access/transam/xlog.c:7586 +#, fuzzy, c-format +#| msgid "redo done at %X/%X" +msgid "redo done at %X/%X system usage: %s" msgstr "redo listo en %X/%X" -#: access/transam/xlog.c:7445 +#: access/transam/xlog.c:7592 #, c-format msgid "last completed transaction was at log time %s" msgstr "última transacción completada al tiempo de registro %s" -#: access/transam/xlog.c:7454 +#: access/transam/xlog.c:7601 #, c-format msgid "redo is not required" msgstr "no se requiere redo" -#: access/transam/xlog.c:7466 +#: access/transam/xlog.c:7613 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "la recuperación terminó antes de alcanzar el punto configurado como destino de recuperación" -#: access/transam/xlog.c:7545 access/transam/xlog.c:7549 +#: access/transam/xlog.c:7692 access/transam/xlog.c:7696 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL termina antes del fin del respaldo en línea" -#: access/transam/xlog.c:7546 +#: access/transam/xlog.c:7693 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Todo el WAL generado durante el respaldo en línea debe estar disponible durante la recuperación." -#: access/transam/xlog.c:7550 +#: access/transam/xlog.c:7697 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "Un respaldo en línea iniciado con pg_start_backup() debe ser terminado con pg_stop_backup(), y todos los archivos WAL hasta ese punto deben estar disponibles durante la recuperación." -#: access/transam/xlog.c:7553 +#: access/transam/xlog.c:7700 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL termina antes del punto de recuperación consistente" -#: access/transam/xlog.c:7588 +#: access/transam/xlog.c:7735 #, c-format msgid "selected new timeline ID: %u" msgstr "seleccionado nuevo ID de timeline: %u" -#: access/transam/xlog.c:8036 +#: access/transam/xlog.c:8178 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "el estado de recuperación consistente fue alcanzado en %X/%X" -#: access/transam/xlog.c:8246 +#: access/transam/xlog.c:8387 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "el enlace de punto de control primario en archivo de control no es válido" -#: access/transam/xlog.c:8250 +#: access/transam/xlog.c:8391 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "el enlace del punto de control en backup_label no es válido" -#: access/transam/xlog.c:8268 +#: access/transam/xlog.c:8409 #, c-format msgid "invalid primary checkpoint record" msgstr "el registro del punto de control primario no es válido" -#: access/transam/xlog.c:8272 +#: access/transam/xlog.c:8413 #, c-format msgid "invalid checkpoint record" msgstr "el registro del punto de control no es válido" -#: access/transam/xlog.c:8283 +#: access/transam/xlog.c:8424 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "el ID de gestor de recursos en el registro del punto de control primario no es válido" -#: access/transam/xlog.c:8287 +#: access/transam/xlog.c:8428 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "el ID de gestor de recursos en el registro del punto de control no es válido" -#: access/transam/xlog.c:8300 +#: access/transam/xlog.c:8441 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "xl_info en el registro del punto de control primario no es válido" -#: access/transam/xlog.c:8304 +#: access/transam/xlog.c:8445 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "xl_info en el registro del punto de control no es válido" -#: access/transam/xlog.c:8315 +#: access/transam/xlog.c:8456 #, c-format msgid "invalid length of primary checkpoint record" msgstr "la longitud del registro del punto de control primario no es válida" -#: access/transam/xlog.c:8319 +#: access/transam/xlog.c:8460 #, c-format msgid "invalid length of checkpoint record" msgstr "la longitud del registro de punto de control no es válida" -#: access/transam/xlog.c:8499 +#: access/transam/xlog.c:8641 #, c-format msgid "shutting down" msgstr "apagando" -#: access/transam/xlog.c:8819 +#. translator: the placeholders show checkpoint options +#: access/transam/xlog.c:8680 +#, c-format +msgid "restartpoint starting:%s%s%s%s%s%s%s%s" +msgstr "" + +#. translator: the placeholders show checkpoint options +#: access/transam/xlog.c:8692 #, c-format -msgid "checkpoint skipped because system is idle" -msgstr "omitiendo checkpoint porque el sistema está inactivo" +msgid "checkpoint starting:%s%s%s%s%s%s%s%s" +msgstr "" -#: access/transam/xlog.c:9019 +#: access/transam/xlog.c:8752 #, c-format -msgid "concurrent write-ahead log activity while database system is shutting down" -msgstr "hay actividad de WAL mientras el sistema se está apagando" +msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" +msgstr "" -#: access/transam/xlog.c:9276 +#: access/transam/xlog.c:8772 #, c-format -msgid "skipping restartpoint, recovery has already ended" -msgstr "omitiendo el restartpoint, la recuperación ya ha terminado" +msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" +msgstr "" -#: access/transam/xlog.c:9299 +#: access/transam/xlog.c:9205 #, c-format -msgid "skipping restartpoint, already performed at %X/%X" -msgstr "omitiendo el restartpoint, ya fue llevado a cabo en %X/%X" +msgid "concurrent write-ahead log activity while database system is shutting down" +msgstr "hay actividad de WAL mientras el sistema se está apagando" -#: access/transam/xlog.c:9467 +#: access/transam/xlog.c:9661 #, c-format msgid "recovery restart point at %X/%X" msgstr "restartpoint de recuperación en %X/%X" -#: access/transam/xlog.c:9469 +#: access/transam/xlog.c:9663 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Última transacción completada al tiempo de registro %s." -#: access/transam/xlog.c:9711 +#: access/transam/xlog.c:9903 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "punto de recuperación «%s» creado en %X/%X" -#: access/transam/xlog.c:9856 +#: access/transam/xlog.c:10048 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "ID de timeline previo %u inesperado (timeline actual %u) en el registro de punto de control" -#: access/transam/xlog.c:9865 +#: access/transam/xlog.c:10057 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "ID de timeline %u inesperado (después de %u) en el registro de punto de control" -#: access/transam/xlog.c:9881 +#: access/transam/xlog.c:10073 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "timeline ID %u inesperado en registro de checkpoint, antes de alcanzar el punto mínimo de recuperación %X/%X en el timeline %u" -#: access/transam/xlog.c:9957 +#: access/transam/xlog.c:10148 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "el respaldo en línea fue cancelado, la recuperación no puede continuar" -#: access/transam/xlog.c:10013 access/transam/xlog.c:10069 -#: access/transam/xlog.c:10092 +#: access/transam/xlog.c:10204 access/transam/xlog.c:10260 +#: access/transam/xlog.c:10283 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "ID de timeline %u inesperado (debería ser %u) en el registro de punto de control" -#: access/transam/xlog.c:10418 +#: access/transam/xlog.c:10632 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "no se pudo sincronizar (fsync write-through) el archivo «%s»: %m" -#: access/transam/xlog.c:10424 +#: access/transam/xlog.c:10638 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "no se pudo sincronizar (fdatasync) archivo «%s»: %m" -#: access/transam/xlog.c:10523 access/transam/xlog.c:11061 +#: access/transam/xlog.c:10749 access/transam/xlog.c:11278 #: access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 #: access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 #: access/transam/xlogfuncs.c:383 @@ -2792,211 +2964,198 @@ msgstr "no se pudo sincronizar (fdatasync) archivo «%s»: %m" msgid "WAL control functions cannot be executed during recovery." msgstr "Las funciones de control de WAL no pueden ejecutarse durante la recuperación." -#: access/transam/xlog.c:10532 access/transam/xlog.c:11070 +#: access/transam/xlog.c:10758 access/transam/xlog.c:11287 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "el nivel de WAL no es suficiente para hacer un respaldo en línea" -#: access/transam/xlog.c:10533 access/transam/xlog.c:11071 +#: access/transam/xlog.c:10759 access/transam/xlog.c:11288 #: access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "wal_level debe ser definido a «replica» o «logical» al inicio del servidor." -#: access/transam/xlog.c:10538 +#: access/transam/xlog.c:10764 #, c-format msgid "backup label too long (max %d bytes)" msgstr "la etiqueta de respaldo es demasiado larga (máximo %d bytes)" -#: access/transam/xlog.c:10575 access/transam/xlog.c:10860 -#: access/transam/xlog.c:10898 +#: access/transam/xlog.c:10801 access/transam/xlog.c:11077 +#: access/transam/xlog.c:11115 #, c-format msgid "a backup is already in progress" msgstr "ya hay un respaldo en curso" -#: access/transam/xlog.c:10576 +#: access/transam/xlog.c:10802 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Ejecute pg_stop_backup() e intente nuevamente." -#: access/transam/xlog.c:10672 +#: access/transam/xlog.c:10898 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "el WAL generado con full_page_writes=off fue restaurado desde el último restartpoint" -#: access/transam/xlog.c:10674 access/transam/xlog.c:11266 -#, c-format -msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the master, and then try an online backup again." +#: access/transam/xlog.c:10900 access/transam/xlog.c:11483 +#, fuzzy, c-format +#| msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the master, and then try an online backup again." +msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the primary, and then try an online backup again." msgstr "Esto significa que el respaldo que estaba siendo tomado en el standby está corrupto y no debería usarse. Active full_page_writes y ejecute CHECKPOINT en el maestro, luego trate de ejecutar un respaldo en línea nuevamente." -#: access/transam/xlog.c:10757 replication/basebackup.c:1420 -#: utils/adt/misc.c:342 +#: access/transam/xlog.c:10976 replication/basebackup.c:1433 +#: utils/adt/misc.c:345 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "la ruta «%s» del enlace simbólico es demasiado larga" -#: access/transam/xlog.c:10810 commands/tablespace.c:402 -#: commands/tablespace.c:566 replication/basebackup.c:1435 utils/adt/misc.c:350 +#: access/transam/xlog.c:11026 commands/tablespace.c:402 +#: commands/tablespace.c:578 replication/basebackup.c:1448 utils/adt/misc.c:353 #, c-format msgid "tablespaces are not supported on this platform" msgstr "tablespaces no están soportados en esta plataforma" -#: access/transam/xlog.c:10861 access/transam/xlog.c:10899 +#: access/transam/xlog.c:11078 access/transam/xlog.c:11116 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "Si está seguro que no hay un respaldo en curso, elimine el archivo «%s» e intente nuevamente." -#: access/transam/xlog.c:11086 +#: access/transam/xlog.c:11303 #, c-format msgid "exclusive backup not in progress" msgstr "no hay un respaldo exclusivo en curso" -#: access/transam/xlog.c:11113 +#: access/transam/xlog.c:11330 #, c-format msgid "a backup is not in progress" msgstr "no hay un respaldo en curso" -#: access/transam/xlog.c:11199 access/transam/xlog.c:11212 -#: access/transam/xlog.c:11601 access/transam/xlog.c:11607 -#: access/transam/xlog.c:11655 access/transam/xlog.c:11728 -#: access/transam/xlogfuncs.c:692 +#: access/transam/xlog.c:11416 access/transam/xlog.c:11429 +#: access/transam/xlog.c:11818 access/transam/xlog.c:11824 +#: access/transam/xlog.c:11872 access/transam/xlog.c:11952 +#: access/transam/xlog.c:11976 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "datos no válidos en archivo «%s»" -#: access/transam/xlog.c:11216 replication/basebackup.c:1268 +#: access/transam/xlog.c:11433 replication/basebackup.c:1281 #, c-format msgid "the standby was promoted during online backup" msgstr "el standby fue promovido durante el respaldo en línea" -#: access/transam/xlog.c:11217 replication/basebackup.c:1269 +#: access/transam/xlog.c:11434 replication/basebackup.c:1282 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "Esto significa que el respaldo que se estaba tomando está corrupto y no debería ser usado. Trate de ejecutar un nuevo respaldo en línea." -#: access/transam/xlog.c:11264 +#: access/transam/xlog.c:11481 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "el WAL generado con full_page_writes=off fue restaurado durante el respaldo en línea" -#: access/transam/xlog.c:11384 +#: access/transam/xlog.c:11601 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "respaldo base completo, esperando que se archiven los segmentos WAL requeridos" -#: access/transam/xlog.c:11396 +#: access/transam/xlog.c:11613 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "todavía en espera de que todos los segmentos WAL requeridos sean archivados (han pasado %d segundos)" -#: access/transam/xlog.c:11398 +#: access/transam/xlog.c:11615 #, c-format msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." msgstr "Verifique que su archive_command se esté ejecutando con normalidad. Puede cancelar este respaldo con confianza, pero el respaldo de la base de datos no será utilizable a menos que disponga de todos los segmentos de WAL." -#: access/transam/xlog.c:11405 +#: access/transam/xlog.c:11622 #, c-format msgid "all required WAL segments have been archived" msgstr "todos los segmentos de WAL requeridos han sido archivados" -#: access/transam/xlog.c:11409 +#: access/transam/xlog.c:11626 #, c-format msgid "WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup" msgstr "el archivado de WAL no está activo; debe asegurarse que todos los segmentos WAL requeridos se copian por algún otro mecanismo para completar el respaldo" -#: access/transam/xlog.c:11462 +#: access/transam/xlog.c:11679 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "abortando el backup porque el proceso servidor terminó antes de que pg_stop_backup fuera invocada" -#: access/transam/xlog.c:11638 -#, c-format -msgid "backup time %s in file \"%s\"" -msgstr "tiempo de respaldo %s en archivo «%s»" - -#: access/transam/xlog.c:11643 -#, c-format -msgid "backup label %s in file \"%s\"" -msgstr "etiqueta de respaldo %s en archivo «%s»" - -#: access/transam/xlog.c:11656 +#: access/transam/xlog.c:11873 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "El ID de timeline interpretado es %u, pero se esperaba %u." -#: access/transam/xlog.c:11660 -#, c-format -msgid "backup timeline %u in file \"%s\"" -msgstr "línea de tiempo %u en archivo «%s»" - #. translator: %s is a WAL record description -#: access/transam/xlog.c:11768 +#: access/transam/xlog.c:12001 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "redo WAL en %X/%X para %s" -#: access/transam/xlog.c:11817 +#: access/transam/xlog.c:12049 #, c-format msgid "online backup mode was not canceled" msgstr "el modo de respaldo en línea no fue cancelado" -#: access/transam/xlog.c:11818 +#: access/transam/xlog.c:12050 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "El archivo «%s» no se pudo renombrar a «%s»: %m." -#: access/transam/xlog.c:11827 access/transam/xlog.c:11839 -#: access/transam/xlog.c:11849 +#: access/transam/xlog.c:12059 access/transam/xlog.c:12071 +#: access/transam/xlog.c:12081 #, c-format msgid "online backup mode canceled" msgstr "el modo de respaldo en línea fue cancelado" -#: access/transam/xlog.c:11840 +#: access/transam/xlog.c:12072 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "Los archivos «%s» y «%s» fueron renombrados a «%s» y «%s», respectivamente." -#: access/transam/xlog.c:11850 +#: access/transam/xlog.c:12082 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "El archivo «%s» fue renombrado a «%s», pero el archivo «%s» no pudo ser renombrado a «%s»: %m." # XXX why talk about "log segment" instead of "file"? -#: access/transam/xlog.c:11983 access/transam/xlogutils.c:971 +#: access/transam/xlog.c:12215 access/transam/xlogutils.c:967 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "no se pudo leer del archivo de segmento %s, posición %u: %m" # XXX why talk about "log segment" instead of "file"? -#: access/transam/xlog.c:11989 access/transam/xlogutils.c:978 +#: access/transam/xlog.c:12221 access/transam/xlogutils.c:974 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "no se pudo leer del archivo de segmento %s, posición %u: leídos %d de %zu" -#: access/transam/xlog.c:12518 +#: access/transam/xlog.c:12758 #, fuzzy, c-format #| msgid "WAL receiver process shutdown requested" -msgid "wal receiver process shutdown requested" +msgid "WAL receiver process shutdown requested" msgstr "se recibió una petición de apagado del proceso receptor de wal" -#: access/transam/xlog.c:12624 +#: access/transam/xlog.c:12845 #, c-format msgid "received promote request" msgstr "se recibió petición de promoción" -#: access/transam/xlog.c:12637 +#: access/transam/xlog.c:12858 #, c-format msgid "promote trigger file found: %s" msgstr "se encontró el archivo disparador de promoción: %s" -#: access/transam/xlog.c:12646 +#: access/transam/xlog.c:12866 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "no se pudo hacer stat al archivo disparador de promoción «%s»: %m" #: access/transam/xlogarchive.c:205 -#, c-format -msgid "archive file \"%s\" has wrong size: %lu instead of %lu" +#, fuzzy, c-format +#| msgid "archive file \"%s\" has wrong size: %lu instead of %lu" +msgid "archive file \"%s\" has wrong size: %lld instead of %lld" msgstr "el archivo «%s» tiene tamaño erróneo: %lu en lugar de %lu" #: access/transam/xlogarchive.c:214 @@ -3004,7 +3163,12 @@ msgstr "el archivo «%s» tiene tamaño erróneo: %lu en lugar de %lu" msgid "restored log file \"%s\" from archive" msgstr "se ha restaurado el archivo «%s» desde el área de archivado" -#: access/transam/xlogarchive.c:259 +#: access/transam/xlogarchive.c:228 +#, c-format +msgid "restore_command returned a zero exit status, but stat() failed." +msgstr "" + +#: access/transam/xlogarchive.c:260 #, c-format msgid "could not restore file \"%s\" from archive: %s" msgstr "no se pudo recuperar el archivo «%s»: %s" @@ -3012,17 +3176,17 @@ msgstr "no se pudo recuperar el archivo «%s»: %s" #. translator: First %s represents a postgresql.conf parameter name like #. "recovery_end_command", the 2nd is the value of that parameter, the #. third an already translated error message. -#: access/transam/xlogarchive.c:368 +#: access/transam/xlogarchive.c:369 #, c-format msgid "%s \"%s\": %s" msgstr "%s «%s»: %s" -#: access/transam/xlogarchive.c:478 access/transam/xlogarchive.c:542 +#: access/transam/xlogarchive.c:479 access/transam/xlogarchive.c:543 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "no se pudo crear el archivo de estado «%s»: %m" -#: access/transam/xlogarchive.c:486 access/transam/xlogarchive.c:550 +#: access/transam/xlogarchive.c:487 access/transam/xlogarchive.c:551 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "no se pudo escribir el archivo de estado «%s»: %m" @@ -3042,34 +3206,36 @@ msgstr "respaldo no-exclusivo en curso" msgid "Did you mean to use pg_stop_backup('f')?" msgstr "¿Quiso usar pg_stop_backup('f')?" -#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1332 -#: commands/event_trigger.c:1884 commands/extension.c:1944 +#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 +#: commands/event_trigger.c:1869 commands/extension.c:1944 #: commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:712 -#: executor/execExpr.c:2203 executor/execSRF.c:728 executor/functions.c:1046 -#: foreign/foreign.c:520 libpq/hba.c:2666 replication/logical/launcher.c:1086 -#: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1486 -#: replication/slotfuncs.c:252 replication/walsender.c:3257 -#: storage/ipc/shmem.c:550 utils/adt/datetime.c:4765 utils/adt/genfile.c:505 -#: utils/adt/genfile.c:588 utils/adt/jsonfuncs.c:1792 -#: utils/adt/jsonfuncs.c:1904 utils/adt/jsonfuncs.c:2092 -#: utils/adt/jsonfuncs.c:2201 utils/adt/jsonfuncs.c:3663 utils/adt/misc.c:215 -#: utils/adt/pgstatfuncs.c:476 utils/adt/pgstatfuncs.c:584 -#: utils/adt/pgstatfuncs.c:1719 utils/fmgr/funcapi.c:72 utils/misc/guc.c:9648 +#: executor/execExpr.c:2507 executor/execSRF.c:738 executor/functions.c:1058 +#: foreign/foreign.c:520 libpq/hba.c:2712 replication/logical/launcher.c:937 +#: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 +#: replication/slotfuncs.c:255 replication/walsender.c:3291 +#: storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 +#: utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1933 +#: utils/adt/jsonfuncs.c:2045 utils/adt/jsonfuncs.c:2233 +#: utils/adt/jsonfuncs.c:2342 utils/adt/jsonfuncs.c:3803 +#: utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:218 utils/adt/pgstatfuncs.c:477 +#: utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 +#: utils/adt/varlena.c:4832 utils/fmgr/funcapi.c:74 utils/misc/guc.c:9974 #: utils/mmgr/portalmem.c:1136 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "se llamó una función que retorna un conjunto en un contexto que no puede aceptarlo" -#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1336 -#: commands/event_trigger.c:1888 commands/extension.c:1948 +#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 +#: commands/event_trigger.c:1873 commands/extension.c:1948 #: commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:716 -#: foreign/foreign.c:525 libpq/hba.c:2670 replication/logical/launcher.c:1090 -#: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1490 -#: replication/slotfuncs.c:256 replication/walsender.c:3261 -#: storage/ipc/shmem.c:554 utils/adt/datetime.c:4769 utils/adt/genfile.c:509 -#: utils/adt/genfile.c:592 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:480 -#: utils/adt/pgstatfuncs.c:588 utils/adt/pgstatfuncs.c:1723 -#: utils/misc/guc.c:9652 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 +#: foreign/foreign.c:525 libpq/hba.c:2716 replication/logical/launcher.c:941 +#: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 +#: replication/slotfuncs.c:259 replication/walsender.c:3295 +#: storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:511 +#: utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:222 +#: utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 +#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4836 utils/misc/guc.c:9978 +#: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "se requiere un nodo «materialize», pero no está permitido en este contexto" @@ -3099,43 +3265,48 @@ msgstr "el valor es demasiado largo para un punto de recuperación (máximo %d c msgid "%s cannot be executed during recovery." msgstr "No se puede ejecutar %s durante la recuperación." -#: access/transam/xlogfuncs.c:531 access/transam/xlogfuncs.c:558 -#: access/transam/xlogfuncs.c:582 access/transam/xlogfuncs.c:722 +#: access/transam/xlogfuncs.c:531 access/transam/xlogfuncs.c:561 +#: access/transam/xlogfuncs.c:585 access/transam/xlogfuncs.c:608 +#: access/transam/xlogfuncs.c:763 #, c-format msgid "recovery is not in progress" msgstr "la recuperación no está en proceso" -#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:559 -#: access/transam/xlogfuncs.c:583 access/transam/xlogfuncs.c:723 +#: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:562 +#: access/transam/xlogfuncs.c:586 access/transam/xlogfuncs.c:609 +#: access/transam/xlogfuncs.c:764 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "Las funciones de control de recuperación sólo pueden ejecutarse durante la recuperación." -#: access/transam/xlogfuncs.c:537 access/transam/xlogfuncs.c:564 +#: access/transam/xlogfuncs.c:537 access/transam/xlogfuncs.c:567 #, c-format msgid "standby promotion is ongoing" msgstr "la promoción del standby está en curso" -#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:565 +#: access/transam/xlogfuncs.c:538 access/transam/xlogfuncs.c:568 #, fuzzy, c-format #| msgid "%s cannot be executed from a function" msgid "%s cannot be executed after promotion is triggered." msgstr "%s no puede ser ejecutado después que una promoción es solicitada." -#: access/transam/xlogfuncs.c:728 +#: access/transam/xlogfuncs.c:769 #, c-format msgid "\"wait_seconds\" must not be negative or zero" msgstr "«wait_seconds» no puede ser negativo o cero" -#: access/transam/xlogfuncs.c:748 storage/ipc/signalfuncs.c:164 +#: access/transam/xlogfuncs.c:789 storage/ipc/signalfuncs.c:281 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "no se pudo enviar señal a postmaster: %m" -#: access/transam/xlogfuncs.c:784 -#, c-format -msgid "server did not promote within %d seconds" -msgstr "el servidor no promovió en %d segundos" +#: access/transam/xlogfuncs.c:825 +#, fuzzy, c-format +#| msgid "server did not promote within %d seconds" +msgid "server did not promote within %d second" +msgid_plural "server did not promote within %d seconds" +msgstr[0] "el servidor no promovió en %d segundos" +msgstr[1] "el servidor no promovió en %d segundos" #: access/transam/xlogreader.c:349 #, c-format @@ -3157,14 +3328,15 @@ msgstr "largo de registro no válido en %X/%X: se esperaba %u, se obtuvo %u" msgid "record length %u at %X/%X too long" msgstr "largo de registro %u en %X/%X demasiado largo" -#: access/transam/xlogreader.c:454 +#: access/transam/xlogreader.c:453 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "no hay bandera de contrecord en %X/%X" -#: access/transam/xlogreader.c:467 -#, c-format -msgid "invalid contrecord length %u at %X/%X" +#: access/transam/xlogreader.c:466 +#, fuzzy, c-format +#| msgid "invalid contrecord length %u at %X/%X" +msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "largo de contrecord %u no válido en %X/%X" #: access/transam/xlogreader.c:703 @@ -3172,128 +3344,128 @@ msgstr "largo de contrecord %u no válido en %X/%X" msgid "invalid resource manager ID %u at %X/%X" msgstr "ID de gestor de recursos %u no válido en %X/%X" -#: access/transam/xlogreader.c:717 access/transam/xlogreader.c:734 +#: access/transam/xlogreader.c:716 access/transam/xlogreader.c:732 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "registro con prev-link %X/%X incorrecto en %X/%X" -#: access/transam/xlogreader.c:771 +#: access/transam/xlogreader.c:768 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "suma de verificación de los datos del gestor de recursos incorrecta en el registro en %X/%X" -#: access/transam/xlogreader.c:808 +#: access/transam/xlogreader.c:805 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "número mágico %04X no válido en archivo %s, posición %u" -#: access/transam/xlogreader.c:822 access/transam/xlogreader.c:863 +#: access/transam/xlogreader.c:819 access/transam/xlogreader.c:860 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "info bits %04X no válidos en archivo %s, posición %u" -#: access/transam/xlogreader.c:837 +#: access/transam/xlogreader.c:834 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "archivo WAL es de un sistema de bases de datos distinto: identificador de sistema en archivo WAL es %llu, identificador en pg_control es %llu" -#: access/transam/xlogreader.c:845 +#: access/transam/xlogreader.c:842 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: tamaño de segmento incorrecto en cabecera de paǵina" -#: access/transam/xlogreader.c:851 +#: access/transam/xlogreader.c:848 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: XLOG_BLCKSZ incorrecto en cabecera de paǵina" -#: access/transam/xlogreader.c:882 +#: access/transam/xlogreader.c:879 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "pageaddr %X/%X inesperado en archivo %s, posición %u" -#: access/transam/xlogreader.c:907 +#: access/transam/xlogreader.c:904 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "ID de timeline %u fuera de secuencia (después de %u) en archivo %s, posición %u" -#: access/transam/xlogreader.c:1247 +#: access/transam/xlogreader.c:1249 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u fuera de orden en %X/%X" -#: access/transam/xlogreader.c:1270 +#: access/transam/xlogreader.c:1271 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA está definido, pero no hay datos en %X/%X" -#: access/transam/xlogreader.c:1277 +#: access/transam/xlogreader.c:1278 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA no está definido, pero el largo de los datos es %u en %X/%X" -#: access/transam/xlogreader.c:1313 +#: access/transam/xlogreader.c:1314 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE está definido, pero posición del agujero es %u largo %u largo de imagen %u en %X/%X" -#: access/transam/xlogreader.c:1329 +#: access/transam/xlogreader.c:1330 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE no está definido, pero posición del agujero es %u largo %u en %X/%X" -#: access/transam/xlogreader.c:1344 +#: access/transam/xlogreader.c:1345 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%X" -#: access/transam/xlogreader.c:1359 +#: access/transam/xlogreader.c:1360 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED está definido, pero largo de imagen de bloque es %u en %X/%X" -#: access/transam/xlogreader.c:1375 +#: access/transam/xlogreader.c:1376 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL está definido, pero no hay «rel» anterior en %X/%X " -#: access/transam/xlogreader.c:1387 +#: access/transam/xlogreader.c:1388 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "block_id %u no válido en %X/%X" -#: access/transam/xlogreader.c:1476 +#: access/transam/xlogreader.c:1475 #, c-format msgid "record with invalid length at %X/%X" msgstr "registro con largo no válido en %X/%X" -#: access/transam/xlogreader.c:1565 +#: access/transam/xlogreader.c:1564 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "imagen comprimida no válida en %X/%X, bloque %d" -#: bootstrap/bootstrap.c:271 +#: bootstrap/bootstrap.c:270 #, c-format msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X require un valor potencia de dos entre 1 MB y 1 GB" -#: bootstrap/bootstrap.c:288 postmaster/postmaster.c:842 tcop/postgres.c:3705 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:845 tcop/postgres.c:3858 #, c-format msgid "--%s requires a value" msgstr "--%s requiere un valor" -#: bootstrap/bootstrap.c:293 postmaster/postmaster.c:847 tcop/postgres.c:3710 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:850 tcop/postgres.c:3863 #, c-format msgid "-c %s requires a value" msgstr "-c %s requiere un valor" -#: bootstrap/bootstrap.c:304 postmaster/postmaster.c:859 -#: postmaster/postmaster.c:872 +#: bootstrap/bootstrap.c:303 postmaster/postmaster.c:862 +#: postmaster/postmaster.c:875 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Pruebe «%s --help» para mayor información.\n" -#: bootstrap/bootstrap.c:313 +#: bootstrap/bootstrap.c:312 #, c-format msgid "%s: invalid command-line arguments\n" msgstr "%s: argumentos de línea de órdenes no válidos\n" @@ -3343,93 +3515,99 @@ msgstr "no todos los privilegios pudieron ser revocados para la columna «%s» d msgid "not all privileges could be revoked for \"%s\"" msgstr "no todos los privilegios pudieron ser revocados para «%s»" -#: catalog/aclchk.c:430 catalog/aclchk.c:973 +#: catalog/aclchk.c:379 +#, fuzzy, c-format +#| msgid "must be superuser" +msgid "grantor must be current user" +msgstr "debe ser superusuario" + +#: catalog/aclchk.c:446 catalog/aclchk.c:989 #, c-format msgid "invalid privilege type %s for relation" msgstr "el tipo de privilegio %s no es válido para una relación" -#: catalog/aclchk.c:434 catalog/aclchk.c:977 +#: catalog/aclchk.c:450 catalog/aclchk.c:993 #, c-format msgid "invalid privilege type %s for sequence" msgstr "el tipo de privilegio %s no es válido para una secuencia" -#: catalog/aclchk.c:438 +#: catalog/aclchk.c:454 #, c-format msgid "invalid privilege type %s for database" msgstr "el tipo de privilegio %s no es válido para una base de datos" -#: catalog/aclchk.c:442 +#: catalog/aclchk.c:458 #, c-format msgid "invalid privilege type %s for domain" msgstr "el tipo de privilegio %s no es válido para un dominio" -#: catalog/aclchk.c:446 catalog/aclchk.c:981 +#: catalog/aclchk.c:462 catalog/aclchk.c:997 #, c-format msgid "invalid privilege type %s for function" msgstr "el tipo de privilegio %s no es válido para una función" -#: catalog/aclchk.c:450 +#: catalog/aclchk.c:466 #, c-format msgid "invalid privilege type %s for language" msgstr "el tipo de privilegio %s no es válido para un lenguaje" -#: catalog/aclchk.c:454 +#: catalog/aclchk.c:470 #, c-format msgid "invalid privilege type %s for large object" msgstr "el tipo de privilegio %s no es válido para un objeto grande" -#: catalog/aclchk.c:458 catalog/aclchk.c:997 +#: catalog/aclchk.c:474 catalog/aclchk.c:1013 #, c-format msgid "invalid privilege type %s for schema" msgstr "el tipo de privilegio %s no es válido para un esquema" -#: catalog/aclchk.c:462 catalog/aclchk.c:985 +#: catalog/aclchk.c:478 catalog/aclchk.c:1001 #, c-format msgid "invalid privilege type %s for procedure" msgstr "el tipo de privilegio %s no es válido para un procedimiento" -#: catalog/aclchk.c:466 catalog/aclchk.c:989 +#: catalog/aclchk.c:482 catalog/aclchk.c:1005 #, c-format msgid "invalid privilege type %s for routine" msgstr "el tipo de privilegio %s no es válido para una rutina" -#: catalog/aclchk.c:470 +#: catalog/aclchk.c:486 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "el tipo de privilegio %s no es válido para un tablespace" -#: catalog/aclchk.c:474 catalog/aclchk.c:993 +#: catalog/aclchk.c:490 catalog/aclchk.c:1009 #, c-format msgid "invalid privilege type %s for type" msgstr "el tipo de privilegio %s no es válido para un tipo" -#: catalog/aclchk.c:478 +#: catalog/aclchk.c:494 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "el tipo de privilegio %s no es válido para un conector de datos externos" -#: catalog/aclchk.c:482 +#: catalog/aclchk.c:498 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "el tipo de privilegio %s no es válido para un servidor foráneo" -#: catalog/aclchk.c:521 +#: catalog/aclchk.c:537 #, c-format msgid "column privileges are only valid for relations" msgstr "los privilegios de columna son sólo válidos para relaciones" -#: catalog/aclchk.c:681 catalog/aclchk.c:4100 catalog/aclchk.c:4882 -#: catalog/objectaddress.c:965 catalog/pg_largeobject.c:116 +#: catalog/aclchk.c:697 catalog/aclchk.c:4164 catalog/aclchk.c:4985 +#: catalog/objectaddress.c:1060 catalog/pg_largeobject.c:116 #: storage/large_object/inv_api.c:285 #, c-format msgid "large object %u does not exist" msgstr "no existe el objeto grande %u" -#: catalog/aclchk.c:910 catalog/aclchk.c:919 commands/collationcmds.c:118 -#: commands/copy.c:1134 commands/copy.c:1154 commands/copy.c:1163 -#: commands/copy.c:1172 commands/copy.c:1181 commands/copy.c:1190 -#: commands/copy.c:1199 commands/copy.c:1208 commands/copy.c:1226 -#: commands/copy.c:1242 commands/copy.c:1262 commands/copy.c:1279 +#: catalog/aclchk.c:926 catalog/aclchk.c:935 commands/collationcmds.c:119 +#: commands/copy.c:362 commands/copy.c:382 commands/copy.c:392 +#: commands/copy.c:401 commands/copy.c:410 commands/copy.c:420 +#: commands/copy.c:429 commands/copy.c:438 commands/copy.c:456 +#: commands/copy.c:472 commands/copy.c:492 commands/copy.c:509 #: commands/dbcommands.c:157 commands/dbcommands.c:166 #: commands/dbcommands.c:175 commands/dbcommands.c:184 #: commands/dbcommands.c:193 commands/dbcommands.c:202 @@ -3440,622 +3618,637 @@ msgstr "no existe el objeto grande %u" #: commands/dbcommands.c:1529 commands/extension.c:1735 #: commands/extension.c:1745 commands/extension.c:1755 #: commands/extension.c:3055 commands/foreigncmds.c:539 -#: commands/foreigncmds.c:548 commands/functioncmds.c:570 -#: commands/functioncmds.c:736 commands/functioncmds.c:745 -#: commands/functioncmds.c:754 commands/functioncmds.c:763 -#: commands/functioncmds.c:2014 commands/functioncmds.c:2022 +#: commands/foreigncmds.c:548 commands/functioncmds.c:578 +#: commands/functioncmds.c:744 commands/functioncmds.c:753 +#: commands/functioncmds.c:762 commands/functioncmds.c:771 +#: commands/functioncmds.c:2068 commands/functioncmds.c:2076 #: commands/publicationcmds.c:90 commands/publicationcmds.c:133 -#: commands/sequence.c:1267 commands/sequence.c:1277 commands/sequence.c:1287 -#: commands/sequence.c:1297 commands/sequence.c:1307 commands/sequence.c:1317 -#: commands/sequence.c:1327 commands/sequence.c:1337 commands/sequence.c:1347 -#: commands/subscriptioncmds.c:104 commands/subscriptioncmds.c:114 +#: commands/sequence.c:1266 commands/sequence.c:1276 commands/sequence.c:1286 +#: commands/sequence.c:1296 commands/sequence.c:1306 commands/sequence.c:1316 +#: commands/sequence.c:1326 commands/sequence.c:1336 commands/sequence.c:1346 #: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 -#: commands/subscriptioncmds.c:148 commands/subscriptioncmds.c:159 -#: commands/subscriptioncmds.c:173 commands/tablecmds.c:7071 -#: commands/typecmds.c:322 commands/typecmds.c:1355 commands/typecmds.c:1364 -#: commands/typecmds.c:1372 commands/typecmds.c:1380 commands/typecmds.c:1388 -#: commands/user.c:133 commands/user.c:147 commands/user.c:156 -#: commands/user.c:165 commands/user.c:174 commands/user.c:183 -#: commands/user.c:192 commands/user.c:201 commands/user.c:210 -#: commands/user.c:219 commands/user.c:228 commands/user.c:237 -#: commands/user.c:246 commands/user.c:582 commands/user.c:590 -#: commands/user.c:598 commands/user.c:606 commands/user.c:614 -#: commands/user.c:622 commands/user.c:630 commands/user.c:638 -#: commands/user.c:647 commands/user.c:655 commands/user.c:663 -#: parser/parse_utilcmd.c:387 replication/pgoutput/pgoutput.c:141 -#: replication/pgoutput/pgoutput.c:162 replication/walsender.c:886 -#: replication/walsender.c:897 replication/walsender.c:907 +#: commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 +#: commands/subscriptioncmds.c:168 commands/subscriptioncmds.c:179 +#: commands/subscriptioncmds.c:193 commands/subscriptioncmds.c:203 +#: commands/subscriptioncmds.c:213 commands/tablecmds.c:7514 +#: commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 +#: commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 +#: commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 +#: commands/user.c:156 commands/user.c:165 commands/user.c:174 +#: commands/user.c:183 commands/user.c:192 commands/user.c:201 +#: commands/user.c:210 commands/user.c:219 commands/user.c:228 +#: commands/user.c:237 commands/user.c:246 commands/user.c:582 +#: commands/user.c:590 commands/user.c:598 commands/user.c:606 +#: commands/user.c:614 commands/user.c:622 commands/user.c:630 +#: commands/user.c:638 commands/user.c:647 commands/user.c:655 +#: commands/user.c:663 parser/parse_utilcmd.c:407 +#: replication/pgoutput/pgoutput.c:192 replication/pgoutput/pgoutput.c:213 +#: replication/pgoutput/pgoutput.c:227 replication/pgoutput/pgoutput.c:237 +#: replication/pgoutput/pgoutput.c:247 replication/walsender.c:882 +#: replication/walsender.c:893 replication/walsender.c:903 #, c-format msgid "conflicting or redundant options" msgstr "opciones contradictorias o redundantes" -#: catalog/aclchk.c:1030 +#: catalog/aclchk.c:1046 #, c-format msgid "default privileges cannot be set for columns" msgstr "los privilegios por omisión no pueden definirse para columnas" -#: catalog/aclchk.c:1190 +#: catalog/aclchk.c:1206 #, c-format msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "No puede utilizar la cláusula IN SCHEMA cuando se utiliza GRANT / REVOKE ON SCHEMAS" -#: catalog/aclchk.c:1558 catalog/catalog.c:506 catalog/objectaddress.c:1427 -#: commands/analyze.c:389 commands/copy.c:5080 commands/sequence.c:1702 -#: commands/tablecmds.c:6582 commands/tablecmds.c:6740 -#: commands/tablecmds.c:6814 commands/tablecmds.c:6884 -#: commands/tablecmds.c:6996 commands/tablecmds.c:7090 -#: commands/tablecmds.c:7149 commands/tablecmds.c:7222 -#: commands/tablecmds.c:7251 commands/tablecmds.c:7406 -#: commands/tablecmds.c:7488 commands/tablecmds.c:7581 -#: commands/tablecmds.c:7736 commands/tablecmds.c:10941 -#: commands/tablecmds.c:11123 commands/tablecmds.c:11283 -#: commands/tablecmds.c:12366 commands/trigger.c:876 parser/analyze.c:2339 -#: parser/parse_relation.c:713 parser/parse_target.c:1036 -#: parser/parse_type.c:144 parser/parse_utilcmd.c:3289 -#: parser/parse_utilcmd.c:3324 parser/parse_utilcmd.c:3366 utils/adt/acl.c:2870 -#: utils/adt/ruleutils.c:2535 +#: catalog/aclchk.c:1544 catalog/catalog.c:553 catalog/objectaddress.c:1522 +#: commands/analyze.c:390 commands/copy.c:741 commands/sequence.c:1701 +#: commands/tablecmds.c:6990 commands/tablecmds.c:7133 +#: commands/tablecmds.c:7183 commands/tablecmds.c:7257 +#: commands/tablecmds.c:7327 commands/tablecmds.c:7439 +#: commands/tablecmds.c:7533 commands/tablecmds.c:7592 +#: commands/tablecmds.c:7681 commands/tablecmds.c:7710 +#: commands/tablecmds.c:7865 commands/tablecmds.c:7947 +#: commands/tablecmds.c:8102 commands/tablecmds.c:8219 +#: commands/tablecmds.c:11568 commands/tablecmds.c:11750 +#: commands/tablecmds.c:11910 commands/tablecmds.c:13069 +#: commands/tablecmds.c:15631 commands/trigger.c:924 parser/analyze.c:2413 +#: parser/parse_relation.c:714 parser/parse_target.c:1064 +#: parser/parse_type.c:144 parser/parse_utilcmd.c:3453 +#: parser/parse_utilcmd.c:3488 parser/parse_utilcmd.c:3530 utils/adt/acl.c:2845 +#: utils/adt/ruleutils.c:2708 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "no existe la columna «%s» en la relación «%s»" -#: catalog/aclchk.c:1821 catalog/objectaddress.c:1267 commands/sequence.c:1140 -#: commands/tablecmds.c:236 commands/tablecmds.c:15675 utils/adt/acl.c:2060 -#: utils/adt/acl.c:2090 utils/adt/acl.c:2122 utils/adt/acl.c:2154 -#: utils/adt/acl.c:2182 utils/adt/acl.c:2212 +#: catalog/aclchk.c:1807 catalog/objectaddress.c:1362 commands/sequence.c:1139 +#: commands/tablecmds.c:249 commands/tablecmds.c:16498 utils/adt/acl.c:2053 +#: utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 +#: utils/adt/acl.c:2175 utils/adt/acl.c:2205 #, c-format msgid "\"%s\" is not a sequence" msgstr "«%s» no es una secuencia" -#: catalog/aclchk.c:1859 +#: catalog/aclchk.c:1845 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "la secuencia «%s» sólo soporta los privilegios USAGE, SELECT, y UPDATE" -#: catalog/aclchk.c:1876 +#: catalog/aclchk.c:1862 #, c-format msgid "invalid privilege type %s for table" msgstr "el tipo de privilegio %s no es válido para una tabla" -#: catalog/aclchk.c:2042 +#: catalog/aclchk.c:2028 #, c-format msgid "invalid privilege type %s for column" msgstr "el tipo de privilegio %s no es válido para una columna" -#: catalog/aclchk.c:2055 +#: catalog/aclchk.c:2041 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "la secuencia «%s» sólo soporta el privilegio SELECT" -#: catalog/aclchk.c:2637 +#: catalog/aclchk.c:2623 #, c-format msgid "language \"%s\" is not trusted" msgstr "el lenguaje «%s» no es confiable (trusted)" -#: catalog/aclchk.c:2639 +#: catalog/aclchk.c:2625 #, c-format msgid "GRANT and REVOKE are not allowed on untrusted languages, because only superusers can use untrusted languages." msgstr "GRANT y REVOKE no están permitidos en lenguajes no confiables, porque sólo los superusuarios pueden usar lenguajes no confiables." -#: catalog/aclchk.c:3153 +#: catalog/aclchk.c:3139 #, c-format msgid "cannot set privileges of array types" msgstr "no se puede definir privilegios para tipos de array" -#: catalog/aclchk.c:3154 +#: catalog/aclchk.c:3140 #, c-format msgid "Set the privileges of the element type instead." msgstr "Defina los privilegios del tipo elemento en su lugar." -#: catalog/aclchk.c:3161 catalog/objectaddress.c:1561 +#: catalog/aclchk.c:3147 catalog/objectaddress.c:1656 #, c-format msgid "\"%s\" is not a domain" msgstr "«%s» no es un dominio" -#: catalog/aclchk.c:3281 +#: catalog/aclchk.c:3267 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "tipo de privilegio «%s» no reconocido" -#: catalog/aclchk.c:3342 +#: catalog/aclchk.c:3328 #, c-format msgid "permission denied for aggregate %s" msgstr "permiso denegado a la función de agregación %s" -#: catalog/aclchk.c:3345 +#: catalog/aclchk.c:3331 #, c-format msgid "permission denied for collation %s" msgstr "permiso denegado al ordenamiento (collation) %s" -#: catalog/aclchk.c:3348 +#: catalog/aclchk.c:3334 #, c-format msgid "permission denied for column %s" msgstr "permiso denegado a la columna %s" -#: catalog/aclchk.c:3351 +#: catalog/aclchk.c:3337 #, c-format msgid "permission denied for conversion %s" msgstr "permiso denegado a la conversión %s" -#: catalog/aclchk.c:3354 +#: catalog/aclchk.c:3340 #, c-format msgid "permission denied for database %s" msgstr "permiso denegado a la base de datos %s" -#: catalog/aclchk.c:3357 +#: catalog/aclchk.c:3343 #, c-format msgid "permission denied for domain %s" msgstr "permiso denegado al dominio %s" -#: catalog/aclchk.c:3360 +#: catalog/aclchk.c:3346 #, c-format msgid "permission denied for event trigger %s" msgstr "permiso denegado al disparador por eventos %s" -#: catalog/aclchk.c:3363 +#: catalog/aclchk.c:3349 #, c-format msgid "permission denied for extension %s" msgstr "permiso denegado a la extensión %s" -#: catalog/aclchk.c:3366 +#: catalog/aclchk.c:3352 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "permiso denegado al conector de datos externos %s" -#: catalog/aclchk.c:3369 +#: catalog/aclchk.c:3355 #, c-format msgid "permission denied for foreign server %s" msgstr "permiso denegado al servidor foráneo %s" -#: catalog/aclchk.c:3372 +#: catalog/aclchk.c:3358 #, c-format msgid "permission denied for foreign table %s" msgstr "permiso denegado a la tabla foránea %s" -#: catalog/aclchk.c:3375 +#: catalog/aclchk.c:3361 #, c-format msgid "permission denied for function %s" msgstr "permiso denegado a la función %s" -#: catalog/aclchk.c:3378 +#: catalog/aclchk.c:3364 #, c-format msgid "permission denied for index %s" msgstr "permiso denegado al índice %s" -#: catalog/aclchk.c:3381 +#: catalog/aclchk.c:3367 #, c-format msgid "permission denied for language %s" msgstr "permiso denegado al lenguaje %s" -#: catalog/aclchk.c:3384 +#: catalog/aclchk.c:3370 #, c-format msgid "permission denied for large object %s" msgstr "permiso denegado al objeto grande %s" -#: catalog/aclchk.c:3387 +#: catalog/aclchk.c:3373 #, c-format msgid "permission denied for materialized view %s" msgstr "permiso denegado a la vista materializada %s" -#: catalog/aclchk.c:3390 +#: catalog/aclchk.c:3376 #, c-format msgid "permission denied for operator class %s" msgstr "permiso denegado a la clase de operadores %s" -#: catalog/aclchk.c:3393 +#: catalog/aclchk.c:3379 #, c-format msgid "permission denied for operator %s" msgstr "permiso denegado al operador %s" -#: catalog/aclchk.c:3396 +#: catalog/aclchk.c:3382 #, c-format msgid "permission denied for operator family %s" msgstr "permiso denegado a la familia de operadores %s" -#: catalog/aclchk.c:3399 +#: catalog/aclchk.c:3385 #, c-format msgid "permission denied for policy %s" msgstr "permiso denegado a la política %s" -#: catalog/aclchk.c:3402 +#: catalog/aclchk.c:3388 #, c-format msgid "permission denied for procedure %s" msgstr "permiso denegado al procedimiento %s" -#: catalog/aclchk.c:3405 +#: catalog/aclchk.c:3391 #, c-format msgid "permission denied for publication %s" msgstr "permiso denegado a la publicación %s" -#: catalog/aclchk.c:3408 +#: catalog/aclchk.c:3394 #, c-format msgid "permission denied for routine %s" msgstr "permiso denegado a la rutina %s" -#: catalog/aclchk.c:3411 +#: catalog/aclchk.c:3397 #, c-format msgid "permission denied for schema %s" msgstr "permiso denegado al esquema %s" -#: catalog/aclchk.c:3414 commands/sequence.c:610 commands/sequence.c:844 -#: commands/sequence.c:886 commands/sequence.c:927 commands/sequence.c:1800 -#: commands/sequence.c:1864 +#: catalog/aclchk.c:3400 commands/sequence.c:610 commands/sequence.c:844 +#: commands/sequence.c:886 commands/sequence.c:927 commands/sequence.c:1799 +#: commands/sequence.c:1863 #, c-format msgid "permission denied for sequence %s" msgstr "permiso denegado a la secuencia %s" -#: catalog/aclchk.c:3417 +#: catalog/aclchk.c:3403 #, c-format msgid "permission denied for statistics object %s" msgstr "permiso denegado al objeto de estadísticas %s" -#: catalog/aclchk.c:3420 +#: catalog/aclchk.c:3406 #, c-format msgid "permission denied for subscription %s" msgstr "permiso denegado a la suscripción %s" -#: catalog/aclchk.c:3423 +#: catalog/aclchk.c:3409 #, c-format msgid "permission denied for table %s" msgstr "permiso denegado a la tabla %s" -#: catalog/aclchk.c:3426 +#: catalog/aclchk.c:3412 #, c-format msgid "permission denied for tablespace %s" msgstr "permiso denegado al tablespace %s" -#: catalog/aclchk.c:3429 +#: catalog/aclchk.c:3415 #, c-format msgid "permission denied for text search configuration %s" msgstr "permiso denegado a la configuración de búsqueda en texto %s" -#: catalog/aclchk.c:3432 +#: catalog/aclchk.c:3418 #, c-format msgid "permission denied for text search dictionary %s" msgstr "permiso denegado a la configuración de búsqueda en texto %s" -#: catalog/aclchk.c:3435 +#: catalog/aclchk.c:3421 #, c-format msgid "permission denied for type %s" msgstr "permiso denegado al tipo %s" -#: catalog/aclchk.c:3438 +#: catalog/aclchk.c:3424 #, c-format msgid "permission denied for view %s" msgstr "permiso denegado a la vista %s" -#: catalog/aclchk.c:3473 +#: catalog/aclchk.c:3459 #, c-format msgid "must be owner of aggregate %s" msgstr "debe ser dueño de la función de agregación %s" -#: catalog/aclchk.c:3476 +#: catalog/aclchk.c:3462 #, c-format msgid "must be owner of collation %s" msgstr "debe ser dueño del ordenamiento (collation) %s" -#: catalog/aclchk.c:3479 +#: catalog/aclchk.c:3465 #, c-format msgid "must be owner of conversion %s" msgstr "debe ser dueño de la conversión %s" -#: catalog/aclchk.c:3482 +#: catalog/aclchk.c:3468 #, c-format msgid "must be owner of database %s" msgstr "debe ser dueño de la base de datos %s" -#: catalog/aclchk.c:3485 +#: catalog/aclchk.c:3471 #, c-format msgid "must be owner of domain %s" msgstr "debe ser dueño del dominio %s" -#: catalog/aclchk.c:3488 +#: catalog/aclchk.c:3474 #, c-format msgid "must be owner of event trigger %s" msgstr "debe ser dueño del disparador por eventos %s" -#: catalog/aclchk.c:3491 +#: catalog/aclchk.c:3477 #, c-format msgid "must be owner of extension %s" msgstr "debe ser dueño de la extensión %s" -#: catalog/aclchk.c:3494 +#: catalog/aclchk.c:3480 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "debe ser dueño del conector de datos externos %s" -#: catalog/aclchk.c:3497 +#: catalog/aclchk.c:3483 #, c-format msgid "must be owner of foreign server %s" msgstr "debe ser dueño del servidor foráneo %s" -#: catalog/aclchk.c:3500 +#: catalog/aclchk.c:3486 #, c-format msgid "must be owner of foreign table %s" msgstr "debe ser dueño de la tabla foránea %s" -#: catalog/aclchk.c:3503 +#: catalog/aclchk.c:3489 #, c-format msgid "must be owner of function %s" msgstr "debe ser dueño de la función %s" -#: catalog/aclchk.c:3506 +#: catalog/aclchk.c:3492 #, c-format msgid "must be owner of index %s" msgstr "debe ser dueño del índice %s" -#: catalog/aclchk.c:3509 +#: catalog/aclchk.c:3495 #, c-format msgid "must be owner of language %s" msgstr "debe ser dueño del lenguaje %s" -#: catalog/aclchk.c:3512 +#: catalog/aclchk.c:3498 #, c-format msgid "must be owner of large object %s" msgstr "debe ser dueño del objeto grande %s" -#: catalog/aclchk.c:3515 +#: catalog/aclchk.c:3501 #, c-format msgid "must be owner of materialized view %s" msgstr "debe ser dueño de la vista materializada %s" -#: catalog/aclchk.c:3518 +#: catalog/aclchk.c:3504 #, c-format msgid "must be owner of operator class %s" msgstr "debe ser dueño de la clase de operadores %s" -#: catalog/aclchk.c:3521 +#: catalog/aclchk.c:3507 #, c-format msgid "must be owner of operator %s" msgstr "debe ser dueño del operador %s" -#: catalog/aclchk.c:3524 +#: catalog/aclchk.c:3510 #, c-format msgid "must be owner of operator family %s" msgstr "debe ser dueño de la familia de operadores %s" -#: catalog/aclchk.c:3527 +#: catalog/aclchk.c:3513 #, c-format msgid "must be owner of procedure %s" msgstr "debe ser dueño del procedimiento %s" -#: catalog/aclchk.c:3530 +#: catalog/aclchk.c:3516 #, c-format msgid "must be owner of publication %s" msgstr "debe ser dueño de la publicación %s" -#: catalog/aclchk.c:3533 +#: catalog/aclchk.c:3519 #, c-format msgid "must be owner of routine %s" msgstr "debe ser dueño de la rutina %s" -#: catalog/aclchk.c:3536 +#: catalog/aclchk.c:3522 #, c-format msgid "must be owner of sequence %s" msgstr "debe ser dueño de la secuencia %s" -#: catalog/aclchk.c:3539 +#: catalog/aclchk.c:3525 #, c-format msgid "must be owner of subscription %s" msgstr "debe ser dueño de la suscripción %s" -#: catalog/aclchk.c:3542 +#: catalog/aclchk.c:3528 #, c-format msgid "must be owner of table %s" msgstr "debe ser dueño de la tabla %s" -#: catalog/aclchk.c:3545 +#: catalog/aclchk.c:3531 #, c-format msgid "must be owner of type %s" msgstr "debe ser dueño del tipo %s" -#: catalog/aclchk.c:3548 +#: catalog/aclchk.c:3534 #, c-format msgid "must be owner of view %s" msgstr "debe ser dueño de la vista %s" -#: catalog/aclchk.c:3551 +#: catalog/aclchk.c:3537 #, c-format msgid "must be owner of schema %s" msgstr "debe ser dueño del esquema %s" -#: catalog/aclchk.c:3554 +#: catalog/aclchk.c:3540 #, c-format msgid "must be owner of statistics object %s" msgstr "debe ser dueño del objeto de estadísticas %s" -#: catalog/aclchk.c:3557 +#: catalog/aclchk.c:3543 #, c-format msgid "must be owner of tablespace %s" msgstr "debe ser dueño del tablespace %s" -#: catalog/aclchk.c:3560 +#: catalog/aclchk.c:3546 #, c-format msgid "must be owner of text search configuration %s" msgstr "debe ser dueño de la configuración de búsqueda en texto %s" -#: catalog/aclchk.c:3563 +#: catalog/aclchk.c:3549 #, c-format msgid "must be owner of text search dictionary %s" msgstr "debe ser dueño del diccionario de búsqueda en texto %s" -#: catalog/aclchk.c:3577 +#: catalog/aclchk.c:3563 #, c-format msgid "must be owner of relation %s" msgstr "debe ser dueño de la relación %s" -#: catalog/aclchk.c:3621 +#: catalog/aclchk.c:3607 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "permiso denegado a la columna «%s» de la relación «%s»" -#: catalog/aclchk.c:3742 catalog/aclchk.c:3750 +#: catalog/aclchk.c:3750 catalog/aclchk.c:3769 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "no existe el atributo %d de la relación con OID %u" -#: catalog/aclchk.c:3823 catalog/aclchk.c:4733 +#: catalog/aclchk.c:3864 catalog/aclchk.c:4836 #, c-format msgid "relation with OID %u does not exist" msgstr "no existe la relación con OID %u" -#: catalog/aclchk.c:3913 catalog/aclchk.c:5151 +#: catalog/aclchk.c:3977 catalog/aclchk.c:5254 #, c-format msgid "database with OID %u does not exist" msgstr "no existe la base de datos con OID %u" -#: catalog/aclchk.c:3967 catalog/aclchk.c:4811 tcop/fastpath.c:221 -#: utils/fmgr/fmgr.c:2055 +#: catalog/aclchk.c:4031 catalog/aclchk.c:4914 tcop/fastpath.c:141 +#: utils/fmgr/fmgr.c:2051 #, c-format msgid "function with OID %u does not exist" msgstr "no existe la función con OID %u" -#: catalog/aclchk.c:4021 catalog/aclchk.c:4837 +#: catalog/aclchk.c:4085 catalog/aclchk.c:4940 #, c-format msgid "language with OID %u does not exist" msgstr "no existe el lenguaje con OID %u" -#: catalog/aclchk.c:4185 catalog/aclchk.c:4909 +#: catalog/aclchk.c:4249 catalog/aclchk.c:5012 commands/collationcmds.c:517 #, c-format msgid "schema with OID %u does not exist" msgstr "no existe el esquema con OID %u" -#: catalog/aclchk.c:4239 catalog/aclchk.c:4936 utils/adt/genfile.c:686 +#: catalog/aclchk.c:4313 catalog/aclchk.c:5039 utils/adt/genfile.c:688 #, c-format msgid "tablespace with OID %u does not exist" msgstr "no existe el tablespace con OID %u" -#: catalog/aclchk.c:4298 catalog/aclchk.c:5070 commands/foreigncmds.c:325 +#: catalog/aclchk.c:4372 catalog/aclchk.c:5173 commands/foreigncmds.c:325 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "no existe el conector de datos externos con OID %u" -#: catalog/aclchk.c:4360 catalog/aclchk.c:5097 commands/foreigncmds.c:462 +#: catalog/aclchk.c:4434 catalog/aclchk.c:5200 commands/foreigncmds.c:462 #, c-format msgid "foreign server with OID %u does not exist" msgstr "no existe el servidor foráneo con OID %u" -#: catalog/aclchk.c:4420 catalog/aclchk.c:4759 utils/cache/typcache.c:378 -#: utils/cache/typcache.c:432 +#: catalog/aclchk.c:4494 catalog/aclchk.c:4862 utils/cache/typcache.c:384 +#: utils/cache/typcache.c:439 #, c-format msgid "type with OID %u does not exist" msgstr "no existe el tipo con OID %u" -#: catalog/aclchk.c:4785 +#: catalog/aclchk.c:4888 #, c-format msgid "operator with OID %u does not exist" msgstr "no existe el operador con OID %u" -#: catalog/aclchk.c:4962 +#: catalog/aclchk.c:5065 #, c-format msgid "operator class with OID %u does not exist" msgstr "no existe la clase de operadores con OID %u" -#: catalog/aclchk.c:4989 +#: catalog/aclchk.c:5092 #, c-format msgid "operator family with OID %u does not exist" msgstr "no existe la familia de operadores con OID %u" -#: catalog/aclchk.c:5016 +#: catalog/aclchk.c:5119 #, c-format msgid "text search dictionary with OID %u does not exist" msgstr "no existe el diccionario de búsqueda en texto con OID %u" -#: catalog/aclchk.c:5043 +#: catalog/aclchk.c:5146 #, c-format msgid "text search configuration with OID %u does not exist" msgstr "no existe la configuración de búsqueda en texto con OID %u" -#: catalog/aclchk.c:5124 commands/event_trigger.c:475 +#: catalog/aclchk.c:5227 commands/event_trigger.c:453 #, c-format msgid "event trigger with OID %u does not exist" msgstr "no existe el disparador por eventos con OID %u" -#: catalog/aclchk.c:5177 commands/collationcmds.c:367 +#: catalog/aclchk.c:5280 commands/collationcmds.c:368 #, c-format msgid "collation with OID %u does not exist" msgstr "no existe el ordenamiento (collation) con OID %u" -#: catalog/aclchk.c:5203 +#: catalog/aclchk.c:5306 #, c-format msgid "conversion with OID %u does not exist" msgstr "no existe la conversión con OID %u" -#: catalog/aclchk.c:5244 +#: catalog/aclchk.c:5347 #, c-format msgid "extension with OID %u does not exist" msgstr "no existe la extensión con OID %u" -#: catalog/aclchk.c:5271 commands/publicationcmds.c:794 +#: catalog/aclchk.c:5374 commands/publicationcmds.c:771 #, c-format msgid "publication with OID %u does not exist" msgstr "no existe la publicación con OID %u" -#: catalog/aclchk.c:5297 commands/subscriptioncmds.c:1112 +#: catalog/aclchk.c:5400 commands/subscriptioncmds.c:1459 #, c-format msgid "subscription with OID %u does not exist" msgstr "no existe la suscripción con OID %u" -#: catalog/aclchk.c:5323 +#: catalog/aclchk.c:5426 #, c-format msgid "statistics object with OID %u does not exist" msgstr "no existe el objeto de estadísticas con OID %u" -#: catalog/catalog.c:485 -#, c-format -msgid "must be superuser to call pg_nextoid()" +#: catalog/catalog.c:378 +#, fuzzy, c-format +#| msgid "while inserting index tuple (%u,%u) in relation \"%s\"" +msgid "still finding an unused OID within relation \"%s\"" +msgstr "mientras se insertaba la tupla de índice (%u,%u) en la relación «%s»" + +#: catalog/catalog.c:380 +#, c-format +msgid "OID candidates were checked \"%llu\" times, but no unused OID is yet found." +msgstr "" + +#: catalog/catalog.c:403 +#, c-format +msgid "new OID has been assigned in relation \"%s\" after \"%llu\" retries" +msgstr "" + +#: catalog/catalog.c:532 +#, c-format +msgid "must be superuser to call pg_nextoid()" msgstr "debe ser superusuario para invocar pg_nextoid()" -#: catalog/catalog.c:493 +#: catalog/catalog.c:540 #, c-format msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() sólo puede usarse en catálogos de sistema" -#: catalog/catalog.c:498 parser/parse_utilcmd.c:2191 +#: catalog/catalog.c:545 parser/parse_utilcmd.c:2276 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "el índice «%s» no pertenece a la tabla «%s»" -#: catalog/catalog.c:515 +#: catalog/catalog.c:562 #, c-format msgid "column \"%s\" is not of type oid" msgstr "la columna «%s» no es de tipo oid" -#: catalog/catalog.c:522 +#: catalog/catalog.c:569 #, c-format msgid "index \"%s\" is not the index for column \"%s\"" msgstr "«el índice %s» no es el índice para la columna «%s»" -#: catalog/dependency.c:823 catalog/dependency.c:1061 +#: catalog/dependency.c:821 catalog/dependency.c:1060 #, c-format msgid "cannot drop %s because %s requires it" msgstr "no se puede eliminar %s porque %s lo requiere" -#: catalog/dependency.c:825 catalog/dependency.c:1063 +#: catalog/dependency.c:823 catalog/dependency.c:1062 #, c-format msgid "You can drop %s instead." msgstr "Puede eliminar %s en su lugar." -#: catalog/dependency.c:933 catalog/pg_shdepend.c:640 +#: catalog/dependency.c:931 catalog/pg_shdepend.c:696 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "no se puede eliminar %s porque es requerido por el sistema" -#: catalog/dependency.c:1129 -#, c-format -msgid "drop auto-cascades to %s" -msgstr "eliminando automáticamente %s" - -#: catalog/dependency.c:1141 catalog/dependency.c:1150 +#: catalog/dependency.c:1135 catalog/dependency.c:1144 #, c-format msgid "%s depends on %s" msgstr "%s depende de %s" -#: catalog/dependency.c:1162 catalog/dependency.c:1171 +#: catalog/dependency.c:1156 catalog/dependency.c:1165 #, c-format msgid "drop cascades to %s" msgstr "eliminando además %s" -#: catalog/dependency.c:1179 catalog/pg_shdepend.c:769 +#: catalog/dependency.c:1173 catalog/pg_shdepend.c:825 #, c-format msgid "" "\n" @@ -4070,311 +4263,302 @@ msgstr[1] "" "\n" "y otros %d objetos (vea el registro del servidor para obtener la lista)" -#: catalog/dependency.c:1191 +#: catalog/dependency.c:1185 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "no se puede eliminar %s porque otros objetos dependen de él" -#: catalog/dependency.c:1193 catalog/dependency.c:1194 -#: catalog/dependency.c:1200 catalog/dependency.c:1201 -#: catalog/dependency.c:1212 catalog/dependency.c:1213 -#: commands/tablecmds.c:1249 commands/tablecmds.c:12985 commands/user.c:1093 -#: commands/view.c:495 libpq/auth.c:334 replication/syncrep.c:1032 -#: storage/lmgr/deadlock.c:1154 storage/lmgr/proc.c:1350 utils/adt/acl.c:5329 -#: utils/adt/jsonfuncs.c:614 utils/adt/jsonfuncs.c:620 utils/misc/guc.c:6771 -#: utils/misc/guc.c:6807 utils/misc/guc.c:6877 utils/misc/guc.c:10947 -#: utils/misc/guc.c:10981 utils/misc/guc.c:11015 utils/misc/guc.c:11049 -#: utils/misc/guc.c:11084 +#: catalog/dependency.c:1187 catalog/dependency.c:1188 +#: catalog/dependency.c:1194 catalog/dependency.c:1195 +#: catalog/dependency.c:1206 catalog/dependency.c:1207 +#: commands/tablecmds.c:1306 commands/tablecmds.c:13687 +#: commands/tablespace.c:481 commands/user.c:1095 commands/view.c:495 +#: libpq/auth.c:338 replication/syncrep.c:1043 storage/lmgr/deadlock.c:1152 +#: storage/lmgr/proc.c:1433 utils/adt/acl.c:5250 utils/adt/jsonfuncs.c:618 +#: utils/adt/jsonfuncs.c:624 utils/misc/guc.c:7095 utils/misc/guc.c:7131 +#: utils/misc/guc.c:7201 utils/misc/guc.c:11381 utils/misc/guc.c:11415 +#: utils/misc/guc.c:11449 utils/misc/guc.c:11492 utils/misc/guc.c:11534 #, c-format msgid "%s" msgstr "%s" -#: catalog/dependency.c:1195 catalog/dependency.c:1202 +#: catalog/dependency.c:1189 catalog/dependency.c:1196 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Use DROP ... CASCADE para eliminar además los objetos dependientes." -#: catalog/dependency.c:1199 +#: catalog/dependency.c:1193 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "no se puede eliminar el o los objetos deseados porque otros objetos dependen de ellos" #. translator: %d always has a value larger than 1 -#: catalog/dependency.c:1208 +#: catalog/dependency.c:1202 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" msgstr[0] "eliminando además %d objeto más" msgstr[1] "eliminando además %d objetos más" -#: catalog/dependency.c:1875 +#: catalog/dependency.c:1863 #, c-format msgid "constant of the type %s cannot be used here" msgstr "no se puede usar una constante de tipo %s aquí" -#: catalog/heap.c:330 +#: catalog/heap.c:331 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "se ha denegado el permiso para crear «%s.%s»" -#: catalog/heap.c:332 +#: catalog/heap.c:333 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Las modificaciones al catálogo del sistema están actualmente deshabilitadas." -#: catalog/heap.c:500 commands/tablecmds.c:2145 commands/tablecmds.c:2745 -#: commands/tablecmds.c:6179 +#: catalog/heap.c:510 commands/tablecmds.c:2343 commands/tablecmds.c:2980 +#: commands/tablecmds.c:6572 #, c-format msgid "tables can have at most %d columns" msgstr "las tablas pueden tener a lo más %d columnas" -#: catalog/heap.c:518 commands/tablecmds.c:6472 +#: catalog/heap.c:528 commands/tablecmds.c:6880 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "el nombre de columna «%s» colisiona con nombre de una columna de sistema" -#: catalog/heap.c:534 +#: catalog/heap.c:544 #, c-format msgid "column name \"%s\" specified more than once" msgstr "el nombre de columna «%s» fue especificado más de una vez" #. translator: first %s is an integer not a name -#: catalog/heap.c:609 +#: catalog/heap.c:619 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "la columna %s de la llave de partición tiene pseudotipo %s" -#: catalog/heap.c:614 +#: catalog/heap.c:624 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "la columna «%s» tiene pseudotipo %s" -#: catalog/heap.c:645 +#: catalog/heap.c:655 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "un tipo compuesto %s no puede ser hecho miembro de sí mismo" #. translator: first %s is an integer not a name -#: catalog/heap.c:700 +#: catalog/heap.c:710 #, c-format msgid "no collation was derived for partition key column %s with collatable type %s" msgstr "no se derivó ningún ordenamiento (collate) para la columna %s de llave de partición con tipo ordenable %s" -#: catalog/heap.c:706 commands/createas.c:203 commands/createas.c:486 +#: catalog/heap.c:716 commands/createas.c:203 commands/createas.c:506 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "no se derivó ningún ordenamiento (collate) para la columna «%s» con tipo ordenable %s" -#: catalog/heap.c:1155 catalog/index.c:865 commands/tablecmds.c:3520 +#: catalog/heap.c:1198 catalog/index.c:868 commands/createas.c:411 +#: commands/tablecmds.c:3861 #, c-format msgid "relation \"%s\" already exists" msgstr "la relación «%s» ya existe" -#: catalog/heap.c:1171 catalog/pg_type.c:428 catalog/pg_type.c:775 -#: commands/typecmds.c:238 commands/typecmds.c:250 commands/typecmds.c:719 -#: commands/typecmds.c:1125 commands/typecmds.c:1337 commands/typecmds.c:2124 +#: catalog/heap.c:1214 catalog/pg_type.c:435 catalog/pg_type.c:773 +#: catalog/pg_type.c:920 commands/typecmds.c:249 commands/typecmds.c:261 +#: commands/typecmds.c:757 commands/typecmds.c:1172 commands/typecmds.c:1398 +#: commands/typecmds.c:1590 commands/typecmds.c:2563 #, c-format msgid "type \"%s\" already exists" msgstr "ya existe un tipo «%s»" -#: catalog/heap.c:1172 +#: catalog/heap.c:1215 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "Una relación tiene un tipo asociado del mismo nombre, de modo que debe usar un nombre que no entre en conflicto con un tipo existente." -#: catalog/heap.c:1201 +#: catalog/heap.c:1244 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "el valor de OID de heap de pg_class no se definió en modo de actualización binaria" -#: catalog/heap.c:2400 +#: catalog/heap.c:2451 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "no se puede agregar una restricción NO INHERIT a la tabla particionada «%s»" -#: catalog/heap.c:2670 +#: catalog/heap.c:2723 #, c-format msgid "check constraint \"%s\" already exists" msgstr "la restricción «check» «%s» ya existe" -#: catalog/heap.c:2840 catalog/index.c:879 catalog/pg_constraint.c:668 -#: commands/tablecmds.c:8086 +#: catalog/heap.c:2893 catalog/index.c:882 catalog/pg_constraint.c:670 +#: commands/tablecmds.c:8593 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "la restricción «%s» para la relación «%s» ya existe" -#: catalog/heap.c:2847 +#: catalog/heap.c:2900 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción no heredada de la relación «%s»" -#: catalog/heap.c:2858 +#: catalog/heap.c:2911 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción heredada de la relación «%s»" -#: catalog/heap.c:2868 +#: catalog/heap.c:2921 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción NOT VALID de la relación «%s»" -#: catalog/heap.c:2873 +#: catalog/heap.c:2926 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "mezclando la restricción «%s» con la definición heredada" -#: catalog/heap.c:2975 +#: catalog/heap.c:3028 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "no se puede usar la columna generada «%s» en una expresión de generación de columna" -#: catalog/heap.c:2977 +#: catalog/heap.c:3030 #, c-format msgid "A generated column cannot reference another generated column." msgstr "Una columna generada no puede hacer referencia a otra columna generada." -#: catalog/heap.c:3029 +#: catalog/heap.c:3082 #, c-format msgid "generation expression is not immutable" msgstr "la expresión de generación no es inmutable" -#: catalog/heap.c:3057 rewrite/rewriteHandler.c:1192 +#: catalog/heap.c:3110 rewrite/rewriteHandler.c:1245 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "la columna «%s» es de tipo %s pero la expresión default es de tipo %s" -#: catalog/heap.c:3062 commands/prepare.c:367 parser/parse_node.c:412 -#: parser/parse_target.c:589 parser/parse_target.c:869 -#: parser/parse_target.c:879 rewrite/rewriteHandler.c:1197 +#: catalog/heap.c:3115 commands/prepare.c:367 parser/analyze.c:2637 +#: parser/parse_target.c:595 parser/parse_target.c:883 +#: parser/parse_target.c:893 rewrite/rewriteHandler.c:1250 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Necesitará reescribir la expresión o aplicarle una conversión de tipo." -#: catalog/heap.c:3109 +#: catalog/heap.c:3162 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "sólo la tabla «%s» puede ser referenciada en una restricción «check»" -#: catalog/heap.c:3366 +#: catalog/heap.c:3460 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "combinación de ON COMMIT y llaves foráneas no soportada" -#: catalog/heap.c:3367 +#: catalog/heap.c:3461 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "La tabla «%s» se refiere a «%s», pero no tienen la misma expresión para ON COMMIT." -#: catalog/heap.c:3372 +#: catalog/heap.c:3466 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "no se puede truncar una tabla referida en una llave foránea" -#: catalog/heap.c:3373 +#: catalog/heap.c:3467 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "La tabla «%s» hace referencia a «%s»." -#: catalog/heap.c:3375 +#: catalog/heap.c:3469 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Trunque la tabla «%s» al mismo tiempo, o utilice TRUNCATE ... CASCADE." -#: catalog/index.c:219 parser/parse_utilcmd.c:2097 +#: catalog/index.c:221 parser/parse_utilcmd.c:2182 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "no se permiten múltiples llaves primarias para la tabla «%s»" -#: catalog/index.c:237 +#: catalog/index.c:239 #, c-format msgid "primary keys cannot be expressions" msgstr "las llaves primarias no pueden ser expresiones" -#: catalog/index.c:254 +#: catalog/index.c:256 #, c-format msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "columna de llave primaria «%s» no está marcada NOT NULL" -#: catalog/index.c:764 catalog/index.c:1843 +#: catalog/index.c:767 catalog/index.c:1903 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "los usuarios no pueden crear índices en tablas del sistema" -#: catalog/index.c:804 +#: catalog/index.c:807 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "los ordenamientos no determinísticos no están soportados para la clase de operadores «%s»" -#: catalog/index.c:819 +#: catalog/index.c:822 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "no se pueden crear índices de forma concurrente en tablas del sistema" -#: catalog/index.c:828 catalog/index.c:1281 +#: catalog/index.c:831 catalog/index.c:1282 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "no se pueden crear índices para restricciones de exclusión de forma concurrente" -#: catalog/index.c:837 +#: catalog/index.c:840 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "no se pueden crear índices compartidos después de initdb" -#: catalog/index.c:857 commands/createas.c:252 commands/sequence.c:154 -#: parser/parse_utilcmd.c:210 +#: catalog/index.c:860 commands/createas.c:417 commands/sequence.c:154 +#: parser/parse_utilcmd.c:211 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "la relación «%s» ya existe, omitiendo" -#: catalog/index.c:907 +#: catalog/index.c:910 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "el valor de OID de índice de pg_class no se definió en modo de actualización binaria" -#: catalog/index.c:2128 +#: catalog/index.c:2189 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY debe ser la primera acción en una transacción" -#: catalog/index.c:2859 -#, c-format -msgid "building index \"%s\" on table \"%s\" serially" -msgstr "construyendo índice «%s» en la tabla «%s» en forma serial" - -#: catalog/index.c:2864 -#, c-format -msgid "building index \"%s\" on table \"%s\" with request for %d parallel worker" -msgid_plural "building index \"%s\" on table \"%s\" with request for %d parallel workers" -msgstr[0] "construyendo índice «%s» en la tabla «%s» solicitando %d ayudante paralelo" -msgstr[1] "construyendo índice «%s» en la tabla «%s» solicitando %d ayudantes paralelos" - -#: catalog/index.c:3492 +#: catalog/index.c:3574 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "no se puede hacer reindex de tablas temporales de otras sesiones" -#: catalog/index.c:3503 +#: catalog/index.c:3585 commands/indexcmds.c:3426 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "no es posible reindexar un índice no válido en tabla TOAST" -#: catalog/index.c:3625 +#: catalog/index.c:3601 commands/indexcmds.c:3306 commands/indexcmds.c:3450 +#: commands/tablecmds.c:3300 #, c-format -msgid "index \"%s\" was reindexed" -msgstr "el índice «%s» fue reindexado" +msgid "cannot move system relation \"%s\"" +msgstr "no se puede mover la relación de sistema «%s»" -#: catalog/index.c:3701 commands/indexcmds.c:3017 +#: catalog/index.c:3745 #, c-format -msgid "REINDEX of partitioned tables is not yet implemented, skipping \"%s\"" -msgstr "REINDEX de tablas particionadas no está implementado aún, omitiendo «%s»" +msgid "index \"%s\" was reindexed" +msgstr "el índice «%s» fue reindexado" -#: catalog/index.c:3756 +#: catalog/index.c:3876 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "no se puede reindexar el índice no válido «%s.%s» en tabla TOAST, omitiendo" #: catalog/namespace.c:257 catalog/namespace.c:461 catalog/namespace.c:553 -#: commands/trigger.c:5043 +#: commands/trigger.c:5132 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "no están implementadas las referencias entre bases de datos: «%s.%s.%s»" @@ -4389,23 +4573,23 @@ msgstr "las tablas temporales no pueden especificar un nombre de esquema" msgid "could not obtain lock on relation \"%s.%s\"" msgstr "no se pudo bloquear un candado en la relación «%s.%s»" -#: catalog/namespace.c:400 commands/lockcmds.c:142 commands/lockcmds.c:227 +#: catalog/namespace.c:400 commands/lockcmds.c:143 commands/lockcmds.c:228 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "no se pudo bloquear un candado en la relación «%s»" -#: catalog/namespace.c:428 parser/parse_relation.c:1357 +#: catalog/namespace.c:428 parser/parse_relation.c:1362 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "no existe la relación «%s.%s»" -#: catalog/namespace.c:433 parser/parse_relation.c:1370 -#: parser/parse_relation.c:1378 +#: catalog/namespace.c:433 parser/parse_relation.c:1375 +#: parser/parse_relation.c:1383 #, c-format msgid "relation \"%s\" does not exist" msgstr "no existe la relación «%s»" -#: catalog/namespace.c:499 catalog/namespace.c:3030 commands/extension.c:1519 +#: catalog/namespace.c:499 catalog/namespace.c:3029 commands/extension.c:1519 #: commands/extension.c:1525 #, c-format msgid "no schema has been selected to create in" @@ -4426,318 +4610,317 @@ msgstr "no se pueden crear tablas temporales en esquemas no temporales" msgid "only temporary relations may be created in temporary schemas" msgstr "sólo relaciones temporales pueden ser creadas en los esquemas temporales" -#: catalog/namespace.c:2222 +#: catalog/namespace.c:2221 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "no existe el objeto de estadísticas «%s»" -#: catalog/namespace.c:2345 +#: catalog/namespace.c:2344 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "no existe el analizador de búsqueda en texto «%s»" -#: catalog/namespace.c:2471 +#: catalog/namespace.c:2470 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "no existe el diccionario de búsqueda en texto «%s»" -#: catalog/namespace.c:2598 +#: catalog/namespace.c:2597 #, c-format msgid "text search template \"%s\" does not exist" msgstr "no existe la plantilla de búsqueda en texto «%s»" -#: catalog/namespace.c:2724 commands/tsearchcmds.c:1194 -#: utils/cache/ts_cache.c:617 +#: catalog/namespace.c:2723 commands/tsearchcmds.c:1121 +#: utils/cache/ts_cache.c:613 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "no existe la configuración de búsqueda en texto «%s»" -#: catalog/namespace.c:2837 parser/parse_expr.c:872 parser/parse_target.c:1228 +#: catalog/namespace.c:2836 parser/parse_expr.c:810 parser/parse_target.c:1256 #, c-format msgid "cross-database references are not implemented: %s" msgstr "no están implementadas las referencias entre bases de datos: %s" -#: catalog/namespace.c:2843 parser/parse_expr.c:879 parser/parse_target.c:1235 -#: gram.y:14981 gram.y:16435 +#: catalog/namespace.c:2842 gram.y:15124 gram.y:17082 parser/parse_expr.c:817 +#: parser/parse_target.c:1263 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "el nombre no es válido (demasiados puntos): %s" -#: catalog/namespace.c:2973 +#: catalog/namespace.c:2972 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "no se puede mover objetos hacia o desde esquemas temporales" -#: catalog/namespace.c:2979 +#: catalog/namespace.c:2978 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "no se puede mover objetos hacia o desde el esquema TOAST" -#: catalog/namespace.c:3052 commands/schemacmds.c:256 commands/schemacmds.c:336 -#: commands/tablecmds.c:1194 +#: catalog/namespace.c:3051 commands/schemacmds.c:233 commands/schemacmds.c:313 +#: commands/tablecmds.c:1251 #, c-format msgid "schema \"%s\" does not exist" msgstr "no existe el esquema «%s»" -#: catalog/namespace.c:3083 +#: catalog/namespace.c:3082 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "el nombre de relación no es válido (demasiados puntos): %s" -#: catalog/namespace.c:3646 +#: catalog/namespace.c:3645 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "no existe el ordenamiento (collation) «%s» para la codificación «%s»" -#: catalog/namespace.c:3701 +#: catalog/namespace.c:3700 #, c-format msgid "conversion \"%s\" does not exist" msgstr "no existe la conversión «%s»" -#: catalog/namespace.c:3965 +#: catalog/namespace.c:3964 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "se ha denegado el permiso para crear tablas temporales en la base de datos «%s»" -#: catalog/namespace.c:3981 +#: catalog/namespace.c:3980 #, c-format msgid "cannot create temporary tables during recovery" msgstr "no se pueden crear tablas temporales durante la recuperación" -#: catalog/namespace.c:3987 +#: catalog/namespace.c:3986 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "no se pueden crear tablas temporales durante una operación paralela" -#: catalog/namespace.c:4286 commands/tablespace.c:1205 commands/variable.c:64 -#: utils/misc/guc.c:11116 utils/misc/guc.c:11194 +#: catalog/namespace.c:4285 commands/tablespace.c:1217 commands/variable.c:64 +#: utils/misc/guc.c:11566 utils/misc/guc.c:11644 #, c-format msgid "List syntax is invalid." msgstr "La sintaxis de lista no es válida." -#: catalog/objectaddress.c:1275 catalog/pg_publication.c:57 -#: commands/policy.c:95 commands/policy.c:395 commands/policy.c:485 -#: commands/tablecmds.c:230 commands/tablecmds.c:272 commands/tablecmds.c:1989 -#: commands/tablecmds.c:5626 commands/tablecmds.c:11058 +#: catalog/objectaddress.c:1370 catalog/pg_publication.c:57 +#: commands/policy.c:95 commands/policy.c:375 commands/policy.c:465 +#: commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2153 +#: commands/tablecmds.c:6021 commands/tablecmds.c:11685 #, c-format msgid "\"%s\" is not a table" msgstr "«%s» no es una tabla" -#: catalog/objectaddress.c:1282 commands/tablecmds.c:242 -#: commands/tablecmds.c:5656 commands/tablecmds.c:15680 commands/view.c:119 +#: catalog/objectaddress.c:1377 commands/tablecmds.c:255 +#: commands/tablecmds.c:6051 commands/tablecmds.c:16503 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "«%s» no es una vista" -#: catalog/objectaddress.c:1289 commands/matview.c:175 commands/tablecmds.c:248 -#: commands/tablecmds.c:15685 +#: catalog/objectaddress.c:1384 commands/matview.c:175 commands/tablecmds.c:261 +#: commands/tablecmds.c:16508 #, c-format msgid "\"%s\" is not a materialized view" msgstr "«%s» no es una vista materializada" -#: catalog/objectaddress.c:1296 commands/tablecmds.c:266 -#: commands/tablecmds.c:5659 commands/tablecmds.c:15690 +#: catalog/objectaddress.c:1391 commands/tablecmds.c:279 +#: commands/tablecmds.c:6054 commands/tablecmds.c:16513 #, c-format msgid "\"%s\" is not a foreign table" msgstr "«%s» no es una tabla foránea" -#: catalog/objectaddress.c:1337 +#: catalog/objectaddress.c:1432 #, c-format msgid "must specify relation and object name" msgstr "debe especificar nombre de relación y nombre de objeto" -#: catalog/objectaddress.c:1413 catalog/objectaddress.c:1466 +#: catalog/objectaddress.c:1508 catalog/objectaddress.c:1561 #, c-format msgid "column name must be qualified" msgstr "el nombre de columna debe ser calificado" -#: catalog/objectaddress.c:1513 +#: catalog/objectaddress.c:1608 #, c-format msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "no existe el valor por omisión para la columna «%s» de la relación «%s»" -#: catalog/objectaddress.c:1550 commands/functioncmds.c:133 -#: commands/tablecmds.c:258 commands/typecmds.c:263 commands/typecmds.c:3275 -#: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:845 -#: utils/adt/acl.c:4436 +#: catalog/objectaddress.c:1645 commands/functioncmds.c:136 +#: commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 +#: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 +#: utils/adt/acl.c:4411 #, c-format msgid "type \"%s\" does not exist" msgstr "no existe el tipo «%s»" -#: catalog/objectaddress.c:1669 +#: catalog/objectaddress.c:1764 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "no existe el operador %d (%s, %s) de %s" -#: catalog/objectaddress.c:1700 +#: catalog/objectaddress.c:1795 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "no existe la función %d (%s, %s) de %s" -#: catalog/objectaddress.c:1751 catalog/objectaddress.c:1777 +#: catalog/objectaddress.c:1846 catalog/objectaddress.c:1872 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "no existe el mapeo para el usuario «%s» en el servidor «%s»" -#: catalog/objectaddress.c:1766 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:1012 commands/foreigncmds.c:1395 -#: foreign/foreign.c:723 +#: catalog/objectaddress.c:1861 commands/foreigncmds.c:430 +#: commands/foreigncmds.c:988 commands/foreigncmds.c:1347 foreign/foreign.c:723 #, c-format msgid "server \"%s\" does not exist" msgstr "no existe el servidor «%s»" -#: catalog/objectaddress.c:1833 +#: catalog/objectaddress.c:1928 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "no existe la relación «%s» en la publicación «%s»" -#: catalog/objectaddress.c:1895 +#: catalog/objectaddress.c:1990 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "tipo de objeto para ACL por omisión «%c» no reconocido" -#: catalog/objectaddress.c:1896 +#: catalog/objectaddress.c:1991 #, c-format msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." msgstr "Tipos válidos de objeto son «%c», «%c», «%c», «%c» y «%c»." -#: catalog/objectaddress.c:1947 +#: catalog/objectaddress.c:2042 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "no existe el ACL por omisión para el usuario «%s» en el esquema «%s» en %s" -#: catalog/objectaddress.c:1952 +#: catalog/objectaddress.c:2047 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "no existe el ACL por omisión para el usuario «%s» en %s" -#: catalog/objectaddress.c:1979 catalog/objectaddress.c:2037 -#: catalog/objectaddress.c:2094 +#: catalog/objectaddress.c:2074 catalog/objectaddress.c:2132 +#: catalog/objectaddress.c:2189 #, c-format msgid "name or argument lists may not contain nulls" msgstr "las listas de nombres o argumentos no pueden contener nulls" -#: catalog/objectaddress.c:2013 +#: catalog/objectaddress.c:2108 #, c-format msgid "unsupported object type \"%s\"" msgstr "tipo de objeto «%s» no soportado" -#: catalog/objectaddress.c:2033 catalog/objectaddress.c:2051 -#: catalog/objectaddress.c:2192 +#: catalog/objectaddress.c:2128 catalog/objectaddress.c:2146 +#: catalog/objectaddress.c:2287 #, c-format msgid "name list length must be exactly %d" msgstr "el largo de la lista de nombres debe ser exactamente %d" -#: catalog/objectaddress.c:2055 +#: catalog/objectaddress.c:2150 #, c-format msgid "large object OID may not be null" msgstr "el OID de objeto grande no puede ser null" -#: catalog/objectaddress.c:2064 catalog/objectaddress.c:2127 -#: catalog/objectaddress.c:2134 +#: catalog/objectaddress.c:2159 catalog/objectaddress.c:2222 +#: catalog/objectaddress.c:2229 #, c-format msgid "name list length must be at least %d" msgstr "el largo de la lista de nombres debe ser al menos %d" -#: catalog/objectaddress.c:2120 catalog/objectaddress.c:2141 +#: catalog/objectaddress.c:2215 catalog/objectaddress.c:2236 #, c-format msgid "argument list length must be exactly %d" msgstr "el largo de la lista de argumentos debe ser exactamente %d" -#: catalog/objectaddress.c:2393 libpq/be-fsstubs.c:321 +#: catalog/objectaddress.c:2488 libpq/be-fsstubs.c:321 #, c-format msgid "must be owner of large object %u" msgstr "debe ser dueño del objeto grande %u" -#: catalog/objectaddress.c:2408 commands/functioncmds.c:1445 +#: catalog/objectaddress.c:2503 commands/functioncmds.c:1555 #, c-format msgid "must be owner of type %s or type %s" msgstr "debe ser dueño del tipo %s o el tipo %s" -#: catalog/objectaddress.c:2458 catalog/objectaddress.c:2475 +#: catalog/objectaddress.c:2553 catalog/objectaddress.c:2570 #, c-format msgid "must be superuser" msgstr "debe ser superusuario" -#: catalog/objectaddress.c:2465 +#: catalog/objectaddress.c:2560 #, c-format msgid "must have CREATEROLE privilege" msgstr "debe tener privilegio CREATEROLE" -#: catalog/objectaddress.c:2544 +#: catalog/objectaddress.c:2639 #, c-format msgid "unrecognized object type \"%s\"" msgstr "tipo de objeto «%s» no reconocido" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2772 +#: catalog/objectaddress.c:2882 #, c-format msgid "column %s of %s" msgstr " columna %s de %s" -#: catalog/objectaddress.c:2782 +#: catalog/objectaddress.c:2897 #, c-format msgid "function %s" msgstr "función %s" -#: catalog/objectaddress.c:2787 +#: catalog/objectaddress.c:2910 #, c-format msgid "type %s" msgstr "tipo %s" -#: catalog/objectaddress.c:2817 +#: catalog/objectaddress.c:2947 #, c-format msgid "cast from %s to %s" msgstr "conversión de %s a %s" -#: catalog/objectaddress.c:2845 +#: catalog/objectaddress.c:2980 #, c-format msgid "collation %s" msgstr "ordenamiento (collation) %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2871 +#: catalog/objectaddress.c:3011 #, c-format msgid "constraint %s on %s" msgstr "restricción «%s» en %s" -#: catalog/objectaddress.c:2877 +#: catalog/objectaddress.c:3017 #, c-format msgid "constraint %s" msgstr "restricción %s" -#: catalog/objectaddress.c:2904 +#: catalog/objectaddress.c:3049 #, c-format msgid "conversion %s" msgstr "conversión %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:2943 +#: catalog/objectaddress.c:3095 #, c-format msgid "default value for %s" msgstr "valor por omisión para %s" -#: catalog/objectaddress.c:2952 +#: catalog/objectaddress.c:3109 #, c-format msgid "language %s" msgstr "lenguaje %s" -#: catalog/objectaddress.c:2957 +#: catalog/objectaddress.c:3117 #, c-format msgid "large object %u" msgstr "objeto grande %u" -#: catalog/objectaddress.c:2962 +#: catalog/objectaddress.c:3130 #, c-format msgid "operator %s" msgstr "operador %s" -#: catalog/objectaddress.c:2994 +#: catalog/objectaddress.c:3167 #, c-format msgid "operator class %s for access method %s" msgstr "clase de operadores «%s» para el método de acceso «%s»" -#: catalog/objectaddress.c:3017 +#: catalog/objectaddress.c:3195 #, c-format msgid "access method %s" msgstr "método de acceso %s" @@ -4746,7 +4929,7 @@ msgstr "método de acceso %s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3059 +#: catalog/objectaddress.c:3244 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "operador %d (%s, %s) de %s: %s" @@ -4755,364 +4938,364 @@ msgstr "operador %d (%s, %s) de %s: %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3109 +#: catalog/objectaddress.c:3301 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "función %d (%s, %s) de %s: %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3153 +#: catalog/objectaddress.c:3353 #, c-format msgid "rule %s on %s" msgstr "regla %s en %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3191 +#: catalog/objectaddress.c:3399 #, c-format msgid "trigger %s on %s" msgstr "disparador %s en %s" -#: catalog/objectaddress.c:3207 +#: catalog/objectaddress.c:3419 #, c-format msgid "schema %s" msgstr "esquema %s" -#: catalog/objectaddress.c:3230 +#: catalog/objectaddress.c:3447 #, c-format msgid "statistics object %s" msgstr "object de estadísticas %s" -#: catalog/objectaddress.c:3257 +#: catalog/objectaddress.c:3478 #, c-format msgid "text search parser %s" msgstr "analizador de búsqueda en texto %s" -#: catalog/objectaddress.c:3283 +#: catalog/objectaddress.c:3509 #, c-format msgid "text search dictionary %s" msgstr "diccionario de búsqueda en texto %s" -#: catalog/objectaddress.c:3309 +#: catalog/objectaddress.c:3540 #, c-format msgid "text search template %s" msgstr "plantilla de búsqueda en texto %s" -#: catalog/objectaddress.c:3335 +#: catalog/objectaddress.c:3571 #, c-format msgid "text search configuration %s" msgstr "configuración de búsqueda en texto %s" -#: catalog/objectaddress.c:3344 +#: catalog/objectaddress.c:3584 #, c-format msgid "role %s" msgstr "rol %s" -#: catalog/objectaddress.c:3357 +#: catalog/objectaddress.c:3600 #, c-format msgid "database %s" msgstr "base de datos %s" -#: catalog/objectaddress.c:3369 +#: catalog/objectaddress.c:3616 #, c-format msgid "tablespace %s" msgstr "tablespace %s" -#: catalog/objectaddress.c:3378 +#: catalog/objectaddress.c:3627 #, c-format msgid "foreign-data wrapper %s" msgstr "conector de datos externos %s" -#: catalog/objectaddress.c:3387 +#: catalog/objectaddress.c:3637 #, c-format msgid "server %s" msgstr "servidor %s" -#: catalog/objectaddress.c:3415 +#: catalog/objectaddress.c:3670 #, c-format msgid "user mapping for %s on server %s" msgstr "mapeo para el usuario %s en el servidor %s" -#: catalog/objectaddress.c:3460 +#: catalog/objectaddress.c:3722 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "privilegios por omisión en nuevas relaciones pertenecientes al rol %s en el esquema %s" -#: catalog/objectaddress.c:3464 +#: catalog/objectaddress.c:3726 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "privilegios por omisión en nuevas relaciones pertenecientes al rol %s" -#: catalog/objectaddress.c:3470 +#: catalog/objectaddress.c:3732 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "privilegios por omisión en nuevas secuencias pertenecientes al rol %s en el esquema %s" -#: catalog/objectaddress.c:3474 +#: catalog/objectaddress.c:3736 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "privilegios por omisión en nuevas secuencias pertenecientes al rol %s" -#: catalog/objectaddress.c:3480 +#: catalog/objectaddress.c:3742 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "privilegios por omisión en nuevas funciones pertenecientes al rol %s en el esquema %s" -#: catalog/objectaddress.c:3484 +#: catalog/objectaddress.c:3746 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "privilegios por omisión en nuevas funciones pertenecientes al rol %s" -#: catalog/objectaddress.c:3490 +#: catalog/objectaddress.c:3752 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "privilegios por omisión en nuevos tipos pertenecientes al rol %s en el esquema %s" -#: catalog/objectaddress.c:3494 +#: catalog/objectaddress.c:3756 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "privilegios por omisión en nuevos tipos pertenecientes al rol %s" -#: catalog/objectaddress.c:3500 +#: catalog/objectaddress.c:3762 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "privilegios por omisión en nuevos esquemas pertenecientes al rol %s" -#: catalog/objectaddress.c:3507 +#: catalog/objectaddress.c:3769 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "privilegios por omisión pertenecientes al rol %s en el esquema %s" -#: catalog/objectaddress.c:3511 +#: catalog/objectaddress.c:3773 #, c-format msgid "default privileges belonging to role %s" msgstr "privilegios por omisión pertenecientes al rol %s" -#: catalog/objectaddress.c:3529 +#: catalog/objectaddress.c:3795 #, c-format msgid "extension %s" msgstr "extensión %s" -#: catalog/objectaddress.c:3542 +#: catalog/objectaddress.c:3812 #, c-format msgid "event trigger %s" msgstr "disparador por eventos %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3578 +#: catalog/objectaddress.c:3856 #, c-format msgid "policy %s on %s" msgstr "política %s en %s" -#: catalog/objectaddress.c:3588 +#: catalog/objectaddress.c:3870 #, c-format msgid "publication %s" msgstr "publicación %s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3614 +#: catalog/objectaddress.c:3898 #, c-format msgid "publication of %s in publication %s" msgstr "publicación de %s en la publicación %s" -#: catalog/objectaddress.c:3623 +#: catalog/objectaddress.c:3911 #, c-format msgid "subscription %s" msgstr "suscripción %s" -#: catalog/objectaddress.c:3642 +#: catalog/objectaddress.c:3932 #, c-format msgid "transform for %s language %s" msgstr "transformación para %s lenguaje %s" -#: catalog/objectaddress.c:3705 +#: catalog/objectaddress.c:4003 #, c-format msgid "table %s" msgstr "tabla %s" -#: catalog/objectaddress.c:3710 +#: catalog/objectaddress.c:4008 #, c-format msgid "index %s" msgstr "índice %s" -#: catalog/objectaddress.c:3714 +#: catalog/objectaddress.c:4012 #, c-format msgid "sequence %s" msgstr "secuencia %s" -#: catalog/objectaddress.c:3718 +#: catalog/objectaddress.c:4016 #, c-format msgid "toast table %s" msgstr "tabla toast %s" -#: catalog/objectaddress.c:3722 +#: catalog/objectaddress.c:4020 #, c-format msgid "view %s" msgstr "vista %s" -#: catalog/objectaddress.c:3726 +#: catalog/objectaddress.c:4024 #, c-format msgid "materialized view %s" msgstr "vista materializada %s" -#: catalog/objectaddress.c:3730 +#: catalog/objectaddress.c:4028 #, c-format msgid "composite type %s" msgstr "tipo compuesto %s" -#: catalog/objectaddress.c:3734 +#: catalog/objectaddress.c:4032 #, c-format msgid "foreign table %s" msgstr "tabla foránea %s" -#: catalog/objectaddress.c:3739 +#: catalog/objectaddress.c:4037 #, c-format msgid "relation %s" msgstr "relación %s" -#: catalog/objectaddress.c:3776 +#: catalog/objectaddress.c:4078 #, c-format msgid "operator family %s for access method %s" msgstr "familia de operadores %s para el método de acceso %s" -#: catalog/pg_aggregate.c:128 +#: catalog/pg_aggregate.c:129 #, c-format msgid "aggregates cannot have more than %d argument" msgid_plural "aggregates cannot have more than %d arguments" msgstr[0] "las funciones de agregación no pueden tener más de %d argumento" msgstr[1] "las funciones de agregación no pueden tener más de %d argumentos" -#: catalog/pg_aggregate.c:143 catalog/pg_aggregate.c:157 +#: catalog/pg_aggregate.c:144 catalog/pg_aggregate.c:158 #, c-format msgid "cannot determine transition data type" msgstr "no se pudo determinar el tipo de dato de transición" -#: catalog/pg_aggregate.c:172 +#: catalog/pg_aggregate.c:173 #, c-format msgid "a variadic ordered-set aggregate must use VARIADIC type ANY" msgstr "una función de agregación variádica de conjuntos ordenados debe ser de tipo VARIADIC ANY" -#: catalog/pg_aggregate.c:198 +#: catalog/pg_aggregate.c:199 #, c-format msgid "a hypothetical-set aggregate must have direct arguments matching its aggregated arguments" msgstr "la función de agregación de conjunto hipotético debe tener argumentos directos que coincidan con los argumentos agregados" -#: catalog/pg_aggregate.c:245 catalog/pg_aggregate.c:289 +#: catalog/pg_aggregate.c:246 catalog/pg_aggregate.c:290 #, c-format msgid "return type of transition function %s is not %s" msgstr "el tipo de retorno de la función de transición %s no es %s" -#: catalog/pg_aggregate.c:265 catalog/pg_aggregate.c:308 +#: catalog/pg_aggregate.c:266 catalog/pg_aggregate.c:309 #, c-format msgid "must not omit initial value when transition function is strict and transition type is not compatible with input type" msgstr "no se puede omitir el valor inicial cuando la función de transición es «strict» y el tipo de transición no es compatible con el tipo de entrada" -#: catalog/pg_aggregate.c:334 +#: catalog/pg_aggregate.c:335 #, c-format msgid "return type of inverse transition function %s is not %s" msgstr "el tipo de retorno de la función inversa de transición %s no es %s" -#: catalog/pg_aggregate.c:351 executor/nodeWindowAgg.c:2852 +#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:2852 #, c-format msgid "strictness of aggregate's forward and inverse transition functions must match" msgstr "la opción «strict» de las funciones de transición directa e inversa deben coincidir exactamente en la función de agregación" -#: catalog/pg_aggregate.c:395 catalog/pg_aggregate.c:553 +#: catalog/pg_aggregate.c:396 catalog/pg_aggregate.c:554 #, c-format msgid "final function with extra arguments must not be declared STRICT" msgstr "la función final con argumentos extra no debe declararse STRICT" -#: catalog/pg_aggregate.c:426 +#: catalog/pg_aggregate.c:427 #, c-format msgid "return type of combine function %s is not %s" msgstr "el tipo de retorno de la función «combine» %s no es %s" -#: catalog/pg_aggregate.c:438 executor/nodeAgg.c:4173 +#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:4128 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "la función «combine» con tipo de transición %s no debe declararse STRICT" -#: catalog/pg_aggregate.c:457 +#: catalog/pg_aggregate.c:458 #, c-format msgid "return type of serialization function %s is not %s" msgstr "el tipo de retorno de la función de serialización %s no es %s" -#: catalog/pg_aggregate.c:478 +#: catalog/pg_aggregate.c:479 #, c-format msgid "return type of deserialization function %s is not %s" msgstr "el tipo de retorno de la función de deserialización %s no es %s" -#: catalog/pg_aggregate.c:497 catalog/pg_proc.c:186 catalog/pg_proc.c:220 +#: catalog/pg_aggregate.c:498 catalog/pg_proc.c:189 catalog/pg_proc.c:223 #, c-format msgid "cannot determine result data type" msgstr "no se puede determinar el tipo de dato del resultado" -#: catalog/pg_aggregate.c:512 catalog/pg_proc.c:199 catalog/pg_proc.c:228 +#: catalog/pg_aggregate.c:513 catalog/pg_proc.c:202 catalog/pg_proc.c:231 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "uso inseguro de pseudotipo «internal»" -#: catalog/pg_aggregate.c:566 +#: catalog/pg_aggregate.c:567 #, c-format msgid "moving-aggregate implementation returns type %s, but plain implementation returns type %s" msgstr "la implementación de la función de agregación en modo «moving» devuelve tipo de dato %s, pero la implementación normal devuelve tipo de dato %s" -#: catalog/pg_aggregate.c:577 +#: catalog/pg_aggregate.c:578 #, c-format msgid "sort operator can only be specified for single-argument aggregates" msgstr "el operador de ordenamiento sólo puede ser especificado para funciones de agregación de un solo argumento" -#: catalog/pg_aggregate.c:704 catalog/pg_proc.c:374 +#: catalog/pg_aggregate.c:706 catalog/pg_proc.c:384 #, c-format msgid "cannot change routine kind" msgstr "no se puede cambiar el tipo de rutina" -#: catalog/pg_aggregate.c:706 +#: catalog/pg_aggregate.c:708 #, c-format msgid "\"%s\" is an ordinary aggregate function." msgstr "«%s» es una función de agregación corriente." -#: catalog/pg_aggregate.c:708 +#: catalog/pg_aggregate.c:710 #, c-format msgid "\"%s\" is an ordered-set aggregate." msgstr "«%s» es una función de agregación de conjunto ordenado." -#: catalog/pg_aggregate.c:710 +#: catalog/pg_aggregate.c:712 #, c-format msgid "\"%s\" is a hypothetical-set aggregate." msgstr "«%s» es una agregación de conjunto hipotético." -#: catalog/pg_aggregate.c:715 +#: catalog/pg_aggregate.c:717 #, c-format msgid "cannot change number of direct arguments of an aggregate function" msgstr "no se puede cambiar cantidad de argumentos directos de una función de agregación" -#: catalog/pg_aggregate.c:870 commands/functioncmds.c:667 -#: commands/typecmds.c:1658 commands/typecmds.c:1704 commands/typecmds.c:1756 -#: commands/typecmds.c:1793 commands/typecmds.c:1827 commands/typecmds.c:1861 -#: commands/typecmds.c:1895 commands/typecmds.c:1972 commands/typecmds.c:2014 -#: parser/parse_func.c:414 parser/parse_func.c:443 parser/parse_func.c:468 -#: parser/parse_func.c:482 parser/parse_func.c:602 parser/parse_func.c:622 -#: parser/parse_func.c:2129 parser/parse_func.c:2320 +#: catalog/pg_aggregate.c:858 commands/functioncmds.c:675 +#: commands/typecmds.c:1992 commands/typecmds.c:2038 commands/typecmds.c:2090 +#: commands/typecmds.c:2127 commands/typecmds.c:2161 commands/typecmds.c:2195 +#: commands/typecmds.c:2229 commands/typecmds.c:2258 commands/typecmds.c:2345 +#: commands/typecmds.c:2387 parser/parse_func.c:416 parser/parse_func.c:447 +#: parser/parse_func.c:474 parser/parse_func.c:488 parser/parse_func.c:610 +#: parser/parse_func.c:630 parser/parse_func.c:2143 parser/parse_func.c:2334 #, c-format msgid "function %s does not exist" msgstr "no existe la función %s" -#: catalog/pg_aggregate.c:876 +#: catalog/pg_aggregate.c:864 #, c-format msgid "function %s returns a set" msgstr "la función %s retorna un conjunto" -#: catalog/pg_aggregate.c:891 +#: catalog/pg_aggregate.c:879 #, c-format msgid "function %s must accept VARIADIC ANY to be used in this aggregate" msgstr "la función %s debe aceptar VARIADIC ANY para usarse en esta agregación" -#: catalog/pg_aggregate.c:915 +#: catalog/pg_aggregate.c:903 #, c-format msgid "function %s requires run-time type coercion" msgstr "la función %s requiere conversión de tipos en tiempo de ejecución" -#: catalog/pg_cast.c:67 +#: catalog/pg_cast.c:68 #, c-format msgid "cast from type %s to type %s already exists" msgstr "ya existe una conversión del tipo %s al tipo %s" @@ -5137,7 +5320,7 @@ msgstr "el ordenamiento «%s» ya existe" msgid "collation \"%s\" for encoding \"%s\" already exists" msgstr "la codificación «%2$s» ya tiene un ordenamiento llamado «%1$s»" -#: catalog/pg_constraint.c:676 +#: catalog/pg_constraint.c:678 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "el dominio %2$s ya contiene una restricción llamada «%1$s»" @@ -5162,24 +5345,25 @@ msgstr "ya existe la conversión «%s»" msgid "default conversion for %s to %s already exists" msgstr "ya existe una conversión por omisión desde %s a %s" -#: catalog/pg_depend.c:162 commands/extension.c:3324 +#: catalog/pg_depend.c:204 commands/extension.c:3343 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "«%s» ya es un miembro de la extensión «%s»" -#: catalog/pg_depend.c:538 +#: catalog/pg_depend.c:580 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "no se puede eliminar dependencia a %s porque es un objeto requerido por el sistema" -#: catalog/pg_enum.c:127 catalog/pg_enum.c:230 catalog/pg_enum.c:525 +#: catalog/pg_enum.c:128 catalog/pg_enum.c:230 catalog/pg_enum.c:525 #, c-format msgid "invalid enum label \"%s\"" msgstr "la etiqueta enum «%s» no es válida" -#: catalog/pg_enum.c:128 catalog/pg_enum.c:231 catalog/pg_enum.c:526 -#, c-format -msgid "Labels must be %d characters or less." +#: catalog/pg_enum.c:129 catalog/pg_enum.c:231 catalog/pg_enum.c:526 +#, fuzzy, c-format +#| msgid "Labels must be %d characters or less." +msgid "Labels must be %d bytes or less." msgstr "Las etiquetas deben ser de %d caracteres o menos." #: catalog/pg_enum.c:259 @@ -5207,7 +5391,34 @@ msgstr "el valor de OID de pg_enum no se definió en modo de actualización bina msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" msgstr "ALTER TYPE ADD BEFORE/AFTER es incompatible con la actualización binaria" -#: catalog/pg_namespace.c:64 commands/schemacmds.c:265 +#: catalog/pg_inherits.c:593 +#, fuzzy, c-format +#| msgid "cannot inherit from partition \"%s\"" +msgid "cannot detach partition \"%s\"" +msgstr "no se puede heredar de la partición «%s»" + +#: catalog/pg_inherits.c:595 +#, c-format +msgid "The partition is being detached concurrently or has an unfinished detach." +msgstr "" + +#: catalog/pg_inherits.c:596 +#, c-format +msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation" +msgstr "" + +#: catalog/pg_inherits.c:600 +#, fuzzy, c-format +#| msgid "cannot cluster on partial index \"%s\"" +msgid "cannot complete detaching partition \"%s\"" +msgstr "no se puede reordenar en índice parcial «%s»" + +#: catalog/pg_inherits.c:602 +#, c-format +msgid "There's no pending concurrent detach." +msgstr "" + +#: catalog/pg_namespace.c:64 commands/schemacmds.c:242 #, c-format msgid "schema \"%s\" already exists" msgstr "ya existe el esquema «%s»" @@ -5222,7 +5433,7 @@ msgstr "«%s» no es un nombre válido de operador" msgid "only binary operators can have commutators" msgstr "sólo los operadores binarios pueden tener conmutadores" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:495 +#: catalog/pg_operator.c:374 commands/operatorcmds.c:507 #, c-format msgid "only binary operators can have join selectivity" msgstr "sólo los operadores binarios pueden tener selectividad de join" @@ -5242,12 +5453,12 @@ msgstr "sólo los operadores binarios pueden ser usados en hash" msgid "only boolean operators can have negators" msgstr "sólo los operadores booleanos pueden tener negadores" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:503 +#: catalog/pg_operator.c:397 commands/operatorcmds.c:515 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "sólo los operadores booleanos pueden tener selectividad de restricción" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:507 +#: catalog/pg_operator.c:401 commands/operatorcmds.c:519 #, c-format msgid "only boolean operators can have join selectivity" msgstr "sólo los operadores booleanos pueden tener selectividad de join" @@ -5272,44 +5483,44 @@ msgstr "ya existe un operador %s" msgid "operator cannot be its own negator or sort operator" msgstr "un operador no puede ser su propio negador u operador de ordenamiento" -#: catalog/pg_proc.c:127 parser/parse_func.c:2191 +#: catalog/pg_proc.c:130 parser/parse_func.c:2205 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" msgstr[0] "las funciones no pueden tener más de %d argumento" msgstr[1] "las funciones no pueden tener más de %d argumentos" -#: catalog/pg_proc.c:364 +#: catalog/pg_proc.c:374 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "ya existe una función «%s» con los mismos argumentos" -#: catalog/pg_proc.c:376 +#: catalog/pg_proc.c:386 #, c-format msgid "\"%s\" is an aggregate function." msgstr "«%s» es una función de agregación." -#: catalog/pg_proc.c:378 +#: catalog/pg_proc.c:388 #, c-format msgid "\"%s\" is a function." msgstr "«%s» es una función de agregación." -#: catalog/pg_proc.c:380 +#: catalog/pg_proc.c:390 #, c-format msgid "\"%s\" is a procedure." msgstr "«%s» es un índice parcial." -#: catalog/pg_proc.c:382 +#: catalog/pg_proc.c:392 #, c-format msgid "\"%s\" is a window function." msgstr "«%s» es una función de ventana deslizante." -#: catalog/pg_proc.c:402 +#: catalog/pg_proc.c:412 #, c-format msgid "cannot change whether a procedure has output parameters" msgstr "no se puede cambiar que un procedimiento tenga parámetros de salida" -#: catalog/pg_proc.c:403 catalog/pg_proc.c:433 +#: catalog/pg_proc.c:413 catalog/pg_proc.c:443 #, c-format msgid "cannot change return type of existing function" msgstr "no se puede cambiar el tipo de retorno de una función existente" @@ -5318,48 +5529,48 @@ msgstr "no se puede cambiar el tipo de retorno de una función existente" #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:409 catalog/pg_proc.c:436 catalog/pg_proc.c:481 -#: catalog/pg_proc.c:507 catalog/pg_proc.c:533 +#: catalog/pg_proc.c:419 catalog/pg_proc.c:446 catalog/pg_proc.c:493 +#: catalog/pg_proc.c:519 catalog/pg_proc.c:545 #, c-format msgid "Use %s %s first." msgstr "Use %s %s primero." -#: catalog/pg_proc.c:434 +#: catalog/pg_proc.c:444 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "Tipo de registro definido por parámetros OUT es diferente." -#: catalog/pg_proc.c:478 +#: catalog/pg_proc.c:490 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "no se puede cambiar el nombre del parámetro de entrada «%s»" -#: catalog/pg_proc.c:505 +#: catalog/pg_proc.c:517 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "no se puede eliminar el valor por omisión de funciones existentes" -#: catalog/pg_proc.c:531 +#: catalog/pg_proc.c:543 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "no se puede cambiar el tipo de dato del valor por omisión de un parámetro" -#: catalog/pg_proc.c:748 +#: catalog/pg_proc.c:753 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "no hay ninguna función interna llamada «%s»" -#: catalog/pg_proc.c:846 +#: catalog/pg_proc.c:851 #, c-format msgid "SQL functions cannot return type %s" msgstr "las funciones SQL no pueden retornar el tipo %s" -#: catalog/pg_proc.c:861 +#: catalog/pg_proc.c:866 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "las funciones SQL no pueden tener argumentos de tipo %s" -#: catalog/pg_proc.c:954 executor/functions.c:1446 +#: catalog/pg_proc.c:978 executor/functions.c:1458 #, c-format msgid "SQL function \"%s\"" msgstr "función SQL «%s»" @@ -5395,12 +5606,12 @@ msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "la relación «%s» ya es un miembro de la publicación «%s»" #: catalog/pg_publication.c:470 commands/publicationcmds.c:451 -#: commands/publicationcmds.c:762 +#: commands/publicationcmds.c:739 #, c-format msgid "publication \"%s\" does not exist" msgstr "no existe la publicación «%s»" -#: catalog/pg_shdepend.c:776 +#: catalog/pg_shdepend.c:832 #, c-format msgid "" "\n" @@ -5415,193 +5626,229 @@ msgstr[1] "" "\n" "y objetos en otras %d bases de datos (vea el registro del servidor para obtener la lista)" -#: catalog/pg_shdepend.c:1082 +#: catalog/pg_shdepend.c:1176 #, c-format msgid "role %u was concurrently dropped" msgstr "el rol %u fue eliminado por una transacción concurrente" -#: catalog/pg_shdepend.c:1101 +#: catalog/pg_shdepend.c:1188 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "el tablespace %u fue eliminado por una transacción concurrente" -#: catalog/pg_shdepend.c:1116 +#: catalog/pg_shdepend.c:1202 #, c-format msgid "database %u was concurrently dropped" msgstr "la base de datos %u fue eliminado por una transacción concurrente" -#: catalog/pg_shdepend.c:1161 +#: catalog/pg_shdepend.c:1247 #, c-format msgid "owner of %s" msgstr "dueño de %s" -#: catalog/pg_shdepend.c:1163 +#: catalog/pg_shdepend.c:1249 #, c-format msgid "privileges for %s" msgstr "privilegios para %s" -#: catalog/pg_shdepend.c:1165 +#: catalog/pg_shdepend.c:1251 #, c-format msgid "target of %s" msgstr "destino de %s" +#: catalog/pg_shdepend.c:1253 +#, fuzzy, c-format +#| msgid "tablespace %s" +msgid "tablespace for %s" +msgstr "tablespace %s" + #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1173 +#: catalog/pg_shdepend.c:1261 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" msgstr[0] "%d objeto en %s" msgstr[1] "%d objetos en %s" -#: catalog/pg_shdepend.c:1284 +#: catalog/pg_shdepend.c:1372 #, c-format msgid "cannot drop objects owned by %s because they are required by the database system" msgstr "no se puede eliminar objetos de propiedad de %s porque son requeridos por el sistema" -#: catalog/pg_shdepend.c:1431 +#: catalog/pg_shdepend.c:1519 #, c-format msgid "cannot reassign ownership of objects owned by %s because they are required by the database system" msgstr "no se puede reasignar la propiedad de objetos de %s porque son requeridos por el sistema" -#: catalog/pg_subscription.c:171 commands/subscriptioncmds.c:644 -#: commands/subscriptioncmds.c:858 commands/subscriptioncmds.c:1080 +#: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:775 +#: commands/subscriptioncmds.c:1085 commands/subscriptioncmds.c:1427 #, c-format msgid "subscription \"%s\" does not exist" msgstr "no existe la suscripción «%s»" -#: catalog/pg_type.c:131 catalog/pg_type.c:468 +#: catalog/pg_subscription.c:432 +#, fuzzy, c-format +#| msgid "could not find function information for function \"%s\"" +msgid "could not drop relation mapping for subscription \"%s\"" +msgstr "no se pudo encontrar información de función para la función «%s»" + +#: catalog/pg_subscription.c:434 +#, c-format +msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." +msgstr "" + +#. translator: first %s is a SQL ALTER command and second %s is a +#. SQL DROP command +#. +#: catalog/pg_subscription.c:441 +#, c-format +msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." +msgstr "" + +#: catalog/pg_type.c:136 catalog/pg_type.c:475 #, c-format msgid "pg_type OID value not set when in binary upgrade mode" msgstr "el valor de OID de pg_type no se definió en modo de actualización binaria" -#: catalog/pg_type.c:249 +#: catalog/pg_type.c:255 #, c-format msgid "invalid type internal size %d" msgstr "el tamaño interno de tipo %d no es válido" -#: catalog/pg_type.c:265 catalog/pg_type.c:273 catalog/pg_type.c:281 -#: catalog/pg_type.c:290 +#: catalog/pg_type.c:271 catalog/pg_type.c:279 catalog/pg_type.c:287 +#: catalog/pg_type.c:296 #, c-format msgid "alignment \"%c\" is invalid for passed-by-value type of size %d" msgstr "el alineamiento «%c» no es válido para un tipo pasado por valor de tamaño %d" -#: catalog/pg_type.c:297 +#: catalog/pg_type.c:303 #, c-format msgid "internal size %d is invalid for passed-by-value type" msgstr "el tamaño interno %d no es válido para un tipo pasado por valor" -#: catalog/pg_type.c:307 catalog/pg_type.c:313 +#: catalog/pg_type.c:313 catalog/pg_type.c:319 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "el alineamiento «%c» no es válido para un tipo de largo variable" -#: catalog/pg_type.c:321 commands/typecmds.c:3727 +#: catalog/pg_type.c:327 commands/typecmds.c:4164 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "los tipos de tamaño fijo deben tener almacenamiento PLAIN" -#: catalog/pg_type.c:839 +#: catalog/pg_type.c:816 #, c-format msgid "could not form array type name for type \"%s\"" msgstr "no se pudo formar un nombre de tipo de array para el tipo «%s»" -#: catalog/storage.c:449 storage/buffer/bufmgr.c:933 +#: catalog/pg_type.c:921 +#, fuzzy, c-format +#| msgid "Failed while creating memory context \"%s\"." +msgid "Failed while creating a multirange type for type \"%s\"." +msgstr "Falla al crear el contexto de memoria «%s»." + +#: catalog/pg_type.c:922 +#, c-format +msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute" +msgstr "" + +#: catalog/storage.c:450 storage/buffer/bufmgr.c:1026 #, c-format msgid "invalid page in block %u of relation %s" msgstr "la página no es válida en el bloque %u de la relación %s" -#: catalog/toasting.c:106 commands/indexcmds.c:639 commands/tablecmds.c:5638 -#: commands/tablecmds.c:15545 +#: catalog/toasting.c:104 commands/indexcmds.c:667 commands/tablecmds.c:6033 +#: commands/tablecmds.c:16368 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "«%s» no es una tabla o vista materializada" -#: commands/aggregatecmds.c:171 +#: commands/aggregatecmds.c:170 #, c-format msgid "only ordered-set aggregates can be hypothetical" msgstr "sólo las funciones de agregación de conjuntos ordenados pueden ser hipotéticas" -#: commands/aggregatecmds.c:196 +#: commands/aggregatecmds.c:195 #, c-format msgid "aggregate attribute \"%s\" not recognized" msgstr "el atributo de la función de agregación «%s» no es reconocido" -#: commands/aggregatecmds.c:206 +#: commands/aggregatecmds.c:205 #, c-format msgid "aggregate stype must be specified" msgstr "debe especificarse el tipo de transición (stype) de la función de agregación" -#: commands/aggregatecmds.c:210 +#: commands/aggregatecmds.c:209 #, c-format msgid "aggregate sfunc must be specified" msgstr "debe especificarse la función de transición (sfunc) de la función de agregación" -#: commands/aggregatecmds.c:222 +#: commands/aggregatecmds.c:221 #, c-format msgid "aggregate msfunc must be specified when mstype is specified" msgstr "debe especificarse la función de transición msfunc cuando se especifica mstype" -#: commands/aggregatecmds.c:226 +#: commands/aggregatecmds.c:225 #, c-format msgid "aggregate minvfunc must be specified when mstype is specified" msgstr "debe especificarse la función de transición minvfunc cuando se especifica mstype" -#: commands/aggregatecmds.c:233 +#: commands/aggregatecmds.c:232 #, c-format msgid "aggregate msfunc must not be specified without mstype" msgstr "no debe especificarse msfunc sin mstype" -#: commands/aggregatecmds.c:237 +#: commands/aggregatecmds.c:236 #, c-format msgid "aggregate minvfunc must not be specified without mstype" msgstr "no debe especificarse minvfunc sin mstype" -#: commands/aggregatecmds.c:241 +#: commands/aggregatecmds.c:240 #, c-format msgid "aggregate mfinalfunc must not be specified without mstype" msgstr "no debe especificarse mfinalfunc sin mstype" -#: commands/aggregatecmds.c:245 +#: commands/aggregatecmds.c:244 #, c-format msgid "aggregate msspace must not be specified without mstype" msgstr "no debe especificarse msspace sin mstype" -#: commands/aggregatecmds.c:249 +#: commands/aggregatecmds.c:248 #, c-format msgid "aggregate minitcond must not be specified without mstype" msgstr "no debe especificarse minitcond sin mstype" -#: commands/aggregatecmds.c:278 +#: commands/aggregatecmds.c:277 #, c-format msgid "aggregate input type must be specified" msgstr "debe especificarse el tipo de entrada de la función de agregación" -#: commands/aggregatecmds.c:308 +#: commands/aggregatecmds.c:307 #, c-format msgid "basetype is redundant with aggregate input type specification" msgstr "el tipo base es redundante con el tipo de entrada en la función de agregación" -#: commands/aggregatecmds.c:349 commands/aggregatecmds.c:390 +#: commands/aggregatecmds.c:350 commands/aggregatecmds.c:391 #, c-format msgid "aggregate transition data type cannot be %s" msgstr "el tipo de transición de la función de agregación no puede ser %s" -#: commands/aggregatecmds.c:361 +#: commands/aggregatecmds.c:362 #, c-format msgid "serialization functions may be specified only when the aggregate transition data type is %s" msgstr "las funciones de serialización pueden especificarse sólo cuando el tipo de transición de la función de agregación es %s" -#: commands/aggregatecmds.c:371 +#: commands/aggregatecmds.c:372 #, c-format msgid "must specify both or neither of serialization and deserialization functions" msgstr "debe especificar ambas o ninguna de las funciones de serialización y deserialización" -#: commands/aggregatecmds.c:436 commands/functioncmds.c:615 +#: commands/aggregatecmds.c:437 commands/functioncmds.c:623 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "el parámetro «parallel» debe ser SAFE, RESTRICTED o UNSAFE" -#: commands/aggregatecmds.c:492 +#: commands/aggregatecmds.c:493 #, c-format msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "el parámetro «%s» debe ser READ_ONLY, SHAREABLE o READ_WRITE" @@ -5616,12 +5863,12 @@ msgstr "el disparador por eventos «%s» ya existe" msgid "foreign-data wrapper \"%s\" already exists" msgstr "el conector de datos externos «%s» ya existe" -#: commands/alter.c:90 commands/foreigncmds.c:903 +#: commands/alter.c:90 commands/foreigncmds.c:879 #, c-format msgid "server \"%s\" already exists" msgstr "el servidor «%s» ya existe" -#: commands/alter.c:93 commands/proclang.c:132 +#: commands/alter.c:93 commands/proclang.c:133 #, c-format msgid "language \"%s\" already exists" msgstr "ya existe el lenguaje «%s»" @@ -5631,7 +5878,7 @@ msgstr "ya existe el lenguaje «%s»" msgid "publication \"%s\" already exists" msgstr "la publicación «%s» ya existe" -#: commands/alter.c:99 commands/subscriptioncmds.c:371 +#: commands/alter.c:99 commands/subscriptioncmds.c:398 #, c-format msgid "subscription \"%s\" already exists" msgstr "la suscripción «%s» ya existe" @@ -5691,185 +5938,193 @@ msgstr "Debe ser superusuario para crear un método de acceso." msgid "access method \"%s\" already exists" msgstr "el método de acceso «%s» ya existe" -#: commands/amcmds.c:130 -#, c-format -msgid "must be superuser to drop access methods" -msgstr "debe ser superusuario para eliminar métodos de acceso" - -#: commands/amcmds.c:181 commands/indexcmds.c:188 commands/indexcmds.c:790 -#: commands/opclasscmds.c:373 commands/opclasscmds.c:793 +#: commands/amcmds.c:154 commands/indexcmds.c:210 commands/indexcmds.c:818 +#: commands/opclasscmds.c:370 commands/opclasscmds.c:824 #, c-format msgid "access method \"%s\" does not exist" msgstr "no existe el método de acceso «%s»" -#: commands/amcmds.c:270 +#: commands/amcmds.c:243 #, c-format msgid "handler function is not specified" msgstr "no se ha especificado una función manejadora" -#: commands/amcmds.c:291 commands/event_trigger.c:183 -#: commands/foreigncmds.c:489 commands/proclang.c:79 commands/trigger.c:687 +#: commands/amcmds.c:264 commands/event_trigger.c:183 +#: commands/foreigncmds.c:489 commands/proclang.c:80 commands/trigger.c:681 #: parser/parse_clause.c:941 #, c-format msgid "function %s must return type %s" msgstr "la función %s debe retornar el tipo %s" -#: commands/analyze.c:226 +#: commands/analyze.c:227 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "omitiendo «%s»: no se puede analizar esta tabla foránea" -#: commands/analyze.c:243 +#: commands/analyze.c:244 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "omitiendo «%s»: no se pueden analizar objetos que no son tablas, ni tablas especiales de sistema" -#: commands/analyze.c:329 +#: commands/analyze.c:324 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "analizando la jerarquía de herencia «%s.%s»" -#: commands/analyze.c:334 +#: commands/analyze.c:329 #, c-format msgid "analyzing \"%s.%s\"" msgstr "analizando «%s.%s»" -#: commands/analyze.c:394 +#: commands/analyze.c:395 #, c-format msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "la columna «%s» aparece más de una vez en la relación «%s»" -#: commands/analyze.c:700 -#, c-format -msgid "automatic analyze of table \"%s.%s.%s\" system usage: %s" -msgstr "analyze automático de la tabla «%s.%s.%s»: uso del sistema: %s" +#: commands/analyze.c:790 +#, fuzzy, c-format +#| msgid "automatic analyze of table \"%s.%s.%s\"" +msgid "automatic analyze of table \"%s.%s.%s\"\n" +msgstr "análisis automático de la tabla «%s.%s.%s»" + +#: commands/analyze.c:811 +#, fuzzy, c-format +#| msgid "system usage: %s\n" +msgid "system usage: %s" +msgstr "uso de sistema: %s\n" -#: commands/analyze.c:1169 +#: commands/analyze.c:1350 #, c-format msgid "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead rows; %d rows in sample, %.0f estimated total rows" msgstr "«%s»: se procesaron %d de %u páginas, que contenían %.0f filas vigentes y %.0f filas no vigentes; %d filas en la muestra, %.0f total de filas estimadas" -#: commands/analyze.c:1249 +#: commands/analyze.c:1430 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" msgstr "omitiendo el análisis del árbol de herencia «%s.%s» --- este árbol no contiene tablas hijas" -#: commands/analyze.c:1347 +#: commands/analyze.c:1528 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "omitiendo el análisis del árbol de herencia «%s.%s» --- este árbol no contiene tablas hijas analizables" -#: commands/async.c:634 +#: commands/async.c:639 #, c-format msgid "channel name cannot be empty" msgstr "el nombre de canal no puede ser vacío" -#: commands/async.c:640 +#: commands/async.c:645 #, c-format msgid "channel name too long" msgstr "el nombre de canal es demasiado largo" -#: commands/async.c:645 +#: commands/async.c:650 #, c-format msgid "payload string too long" msgstr "la cadena de carga es demasiado larga" -#: commands/async.c:864 +#: commands/async.c:869 #, c-format msgid "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" msgstr "no se puede hacer PREPARE de una transacción que ha ejecutado LISTEN, UNLISTEN o NOTIFY" -#: commands/async.c:970 +#: commands/async.c:975 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "demasiadas notificaciones en la cola NOTIFY" -#: commands/async.c:1636 +#: commands/async.c:1646 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "la cola NOTIFY está %.0f%% llena" -#: commands/async.c:1638 +#: commands/async.c:1648 #, c-format msgid "The server process with PID %d is among those with the oldest transactions." msgstr "El proceso servidor con PID %d está entre aquellos con transacciones más antiguas." -#: commands/async.c:1641 +#: commands/async.c:1651 #, c-format msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." msgstr "La cola NOTIFY no puede vaciarse hasta que ese proceso cierre su transacción actual." -#: commands/cluster.c:125 commands/cluster.c:362 +#: commands/cluster.c:119 +#, fuzzy, c-format +#| msgid "unrecognized VACUUM option \"%s\"" +msgid "unrecognized CLUSTER option \"%s\"" +msgstr "opción de VACUUM «%s» no reconocida" + +#: commands/cluster.c:147 commands/cluster.c:386 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "no se pueden reordenar tablas temporales de otras sesiones" -#: commands/cluster.c:133 +#: commands/cluster.c:155 #, c-format msgid "cannot cluster a partitioned table" msgstr "no se puede hacer «cluster» a una tabla particionada" -#: commands/cluster.c:151 +#: commands/cluster.c:173 #, c-format msgid "there is no previously clustered index for table \"%s\"" msgstr "no hay un índice de ordenamiento definido para la tabla «%s»" -#: commands/cluster.c:165 commands/tablecmds.c:12822 commands/tablecmds.c:14628 +#: commands/cluster.c:187 commands/tablecmds.c:13524 commands/tablecmds.c:15392 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "no existe el índice «%s» en la tabla «%s»" -#: commands/cluster.c:351 +#: commands/cluster.c:375 #, c-format msgid "cannot cluster a shared catalog" msgstr "no se puede reordenar un catálogo compartido" -#: commands/cluster.c:366 +#: commands/cluster.c:390 #, c-format msgid "cannot vacuum temporary tables of other sessions" msgstr "no se puede hacer vacuum a tablas temporales de otras sesiones" -#: commands/cluster.c:432 commands/tablecmds.c:14638 +#: commands/cluster.c:456 commands/tablecmds.c:15402 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "«%s» no es un índice de la tabla «%s»" -#: commands/cluster.c:440 +#: commands/cluster.c:464 #, c-format msgid "cannot cluster on index \"%s\" because access method does not support clustering" msgstr "no se puede reordenar en índice «%s» porque el método de acceso no soporta reordenamiento" -#: commands/cluster.c:452 +#: commands/cluster.c:476 #, c-format msgid "cannot cluster on partial index \"%s\"" msgstr "no se puede reordenar en índice parcial «%s»" -#: commands/cluster.c:466 +#: commands/cluster.c:490 #, c-format msgid "cannot cluster on invalid index \"%s\"" msgstr "no se puede reordenar en el índice no válido «%s»" -#: commands/cluster.c:490 +#: commands/cluster.c:514 #, c-format msgid "cannot mark index clustered in partitioned table" msgstr "no se puede marcar un índice «clustered» en una tabla particionada" -#: commands/cluster.c:863 +#: commands/cluster.c:887 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr "reordenando «%s.%s» usando un recorrido de índice en «%s»" -#: commands/cluster.c:869 +#: commands/cluster.c:893 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "reordenando «%s.%s» usando un recorrido secuencial y ordenamiento" -#: commands/cluster.c:900 +#: commands/cluster.c:924 #, c-format msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" msgstr "«%s»: se encontraron %.0f versiones eliminables de filas y %.0f no eliminables en %u páginas" -#: commands/cluster.c:904 +#: commands/cluster.c:928 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -5878,73 +6133,73 @@ msgstr "" "%.0f versiones muertas de filas no pueden ser eliminadas aún.\n" "%s." -#: commands/collationcmds.c:105 +#: commands/collationcmds.c:106 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "el atributo de ordenamiento (collation) «%s» no es reconocido" -#: commands/collationcmds.c:148 +#: commands/collationcmds.c:149 #, c-format msgid "collation \"default\" cannot be copied" msgstr "el ordenamiento «default» no puede copiarse" -#: commands/collationcmds.c:181 +#: commands/collationcmds.c:182 #, c-format msgid "unrecognized collation provider: %s" msgstr "proveedor de ordenamiento no reconocido: %s" -#: commands/collationcmds.c:190 +#: commands/collationcmds.c:191 #, c-format msgid "parameter \"lc_collate\" must be specified" msgstr "debe especificarse el parámetro «lc_collate»" -#: commands/collationcmds.c:195 +#: commands/collationcmds.c:196 #, c-format msgid "parameter \"lc_ctype\" must be specified" msgstr "debe especificarse el parámetro «lc_ctype»" -#: commands/collationcmds.c:205 +#: commands/collationcmds.c:206 #, c-format msgid "nondeterministic collations not supported with this provider" msgstr "los ordenamientos no determinísticos no están soportados con este proveedor" -#: commands/collationcmds.c:265 +#: commands/collationcmds.c:266 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "ya existe un ordenamiento (collation) llamado «%s» para la codificación «%s» en el esquema «%s»" -#: commands/collationcmds.c:276 +#: commands/collationcmds.c:277 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "ya existe un ordenamiento llamado «%s» en el esquema «%s»" -#: commands/collationcmds.c:324 +#: commands/collationcmds.c:325 #, c-format msgid "changing version from %s to %s" msgstr "cambiando versión de %s a %s" -#: commands/collationcmds.c:339 +#: commands/collationcmds.c:340 #, c-format msgid "version has not changed" msgstr "la versión no ha cambiado" -#: commands/collationcmds.c:470 +#: commands/collationcmds.c:454 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "no se pudo convertir el nombre de configuración regional «%s» a etiqueta de lenguaje: %s" -#: commands/collationcmds.c:531 +#: commands/collationcmds.c:512 #, c-format msgid "must be superuser to import system collations" msgstr "debe ser superusuario para importar ordenamientos del sistema" -#: commands/collationcmds.c:554 commands/copy.c:1894 commands/copy.c:3480 +#: commands/collationcmds.c:540 commands/copyfrom.c:1500 commands/copyto.c:688 #: libpq/be-secure-common.c:81 #, c-format msgid "could not execute command \"%s\": %m" msgstr "no se pudo ejecutar la orden «%s»: %m" -#: commands/collationcmds.c:685 +#: commands/collationcmds.c:671 #, c-format msgid "no usable system locales were found" msgstr "no se encontraron locales de sistema utilizables" @@ -5952,23 +6207,23 @@ msgstr "no se encontraron locales de sistema utilizables" #: commands/comment.c:61 commands/dbcommands.c:841 commands/dbcommands.c:1037 #: commands/dbcommands.c:1150 commands/dbcommands.c:1340 #: commands/dbcommands.c:1588 commands/dbcommands.c:1702 -#: commands/dbcommands.c:2142 utils/init/postinit.c:888 -#: utils/init/postinit.c:993 utils/init/postinit.c:1010 +#: commands/dbcommands.c:2142 utils/init/postinit.c:887 +#: utils/init/postinit.c:992 utils/init/postinit.c:1009 #, c-format msgid "database \"%s\" does not exist" msgstr "no existe la base de datos «%s»" -#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:957 +#: commands/comment.c:101 commands/seclabel.c:191 parser/parse_utilcmd.c:989 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" msgstr "«%s» no es una tabla, vista, vista materializada, tipo compuesto, o tabla foránea" -#: commands/constraint.c:63 utils/adt/ri_triggers.c:1923 +#: commands/constraint.c:63 utils/adt/ri_triggers.c:1948 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "la función «%s» no fue ejecutada por el manejador de triggers" -#: commands/constraint.c:70 utils/adt/ri_triggers.c:1932 +#: commands/constraint.c:70 utils/adt/ri_triggers.c:1957 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "la función «%s» debe ser ejecutada AFTER ROW" @@ -5978,554 +6233,551 @@ msgstr "la función «%s» debe ser ejecutada AFTER ROW" msgid "function \"%s\" must be fired for INSERT or UPDATE" msgstr "la función «%s» debe ser ejecutada en INSERT o UPDATE" -#: commands/conversioncmds.c:66 +#: commands/conversioncmds.c:67 #, c-format msgid "source encoding \"%s\" does not exist" msgstr "no existe la codificación fuente «%s»" -#: commands/conversioncmds.c:73 +#: commands/conversioncmds.c:74 #, c-format msgid "destination encoding \"%s\" does not exist" msgstr "no existe la codificación de destino «%s»" -#: commands/conversioncmds.c:86 +#: commands/conversioncmds.c:87 #, c-format msgid "encoding conversion to or from \"SQL_ASCII\" is not supported" msgstr "la conversión de codificación desde o hacia a «SQL_ASCII» no está soportada" -#: commands/conversioncmds.c:99 +#: commands/conversioncmds.c:100 #, c-format msgid "encoding conversion function %s must return type %s" msgstr "la función de conversión de codificación %s debe retornar tipo %s" -#: commands/copy.c:426 commands/copy.c:460 -#, c-format -msgid "COPY BINARY is not supported to stdout or from stdin" -msgstr "COPY BINARY no está soportado a la salida estándar o desde la entrada estándar" - -#: commands/copy.c:560 -#, c-format -msgid "could not write to COPY program: %m" -msgstr "no se pudo escribir al programa COPY: %m" - -#: commands/copy.c:565 -#, c-format -msgid "could not write to COPY file: %m" -msgstr "no se pudo escribir archivo COPY: %m" - -#: commands/copy.c:578 -#, c-format -msgid "connection lost during COPY to stdout" -msgstr "se perdió la conexión durante COPY a la salida estándar" - -#: commands/copy.c:622 -#, c-format -msgid "could not read from COPY file: %m" -msgstr "no se pudo leer desde archivo COPY: %m" - -#: commands/copy.c:640 commands/copy.c:661 commands/copy.c:665 -#: tcop/postgres.c:344 tcop/postgres.c:380 tcop/postgres.c:407 -#, c-format -msgid "unexpected EOF on client connection with an open transaction" -msgstr "se encontró fin de archivo inesperado en una conexión con una transacción abierta" - -#: commands/copy.c:678 -#, c-format -msgid "COPY from stdin failed: %s" -msgstr "falló COPY desde la entrada estándar: %s" - -#: commands/copy.c:694 -#, c-format -msgid "unexpected message type 0x%02X during COPY from stdin" -msgstr "se recibió un mensaje de tipo 0x%02X inesperado durante COPY desde la entrada estándar" +#: commands/conversioncmds.c:130 +#, fuzzy, c-format +#| msgid "encoding conversion function %s must return type %s" +msgid "encoding conversion function %s returned incorrect result for empty input" +msgstr "la función de conversión de codificación %s debe retornar tipo %s" -#: commands/copy.c:861 +#: commands/copy.c:86 #, c-format msgid "must be superuser or a member of the pg_execute_server_program role to COPY to or from an external program" msgstr "debe ser superusuario o miembro del rol pg_execute_server_program para usar COPY desde o hacia un programa externo" -#: commands/copy.c:862 commands/copy.c:871 commands/copy.c:878 +#: commands/copy.c:87 commands/copy.c:96 commands/copy.c:103 #, c-format msgid "Anyone can COPY to stdout or from stdin. psql's \\copy command also works for anyone." msgstr "Cualquier usuario puede usar COPY hacia la salida estándar o desde la entrada estándar. La orden \\copy de psql también puede ser utilizado por cualquier usuario." -#: commands/copy.c:870 +#: commands/copy.c:95 #, c-format msgid "must be superuser or a member of the pg_read_server_files role to COPY from a file" msgstr "debe ser superusuario o miembro del rol pg_read_server_files para hacer COPY desde un archivo" -#: commands/copy.c:877 +#: commands/copy.c:102 #, c-format msgid "must be superuser or a member of the pg_write_server_files role to COPY to a file" msgstr "debe ser superusuario o miembro del rol pg_write_server_files para hacer COPY a un archivo" -#: commands/copy.c:963 +#: commands/copy.c:188 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM no está soportado con seguridad a nivel de registros" -#: commands/copy.c:964 +#: commands/copy.c:189 #, c-format msgid "Use INSERT statements instead." msgstr "Use sentencias INSERT en su lugar." -#: commands/copy.c:1146 +#: commands/copy.c:374 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "el formato de COPY «%s» no es reconocido" -#: commands/copy.c:1217 commands/copy.c:1233 commands/copy.c:1248 -#: commands/copy.c:1270 +#: commands/copy.c:447 commands/copy.c:463 commands/copy.c:478 +#: commands/copy.c:500 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "el argumento de la opción «%s» debe ser una lista de nombres de columna" -#: commands/copy.c:1285 +#: commands/copy.c:515 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "el argumento de la opción «%s» debe ser un nombre válido de codificación" -#: commands/copy.c:1292 commands/dbcommands.c:253 commands/dbcommands.c:1536 +#: commands/copy.c:522 commands/dbcommands.c:253 commands/dbcommands.c:1536 #, c-format msgid "option \"%s\" not recognized" msgstr "no se reconoce la opción «%s»" -#: commands/copy.c:1304 +#: commands/copy.c:534 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "no se puede especificar DELIMITER en modo BINARY" -#: commands/copy.c:1309 +#: commands/copy.c:539 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "no se puede especificar NULL en modo BINARY" -#: commands/copy.c:1331 +#: commands/copy.c:561 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "el delimitador de COPY debe ser un solo carácter de un byte" -#: commands/copy.c:1338 +#: commands/copy.c:568 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "el delimitador de COPY no puede ser el carácter de nueva línea ni el de retorno de carro" -#: commands/copy.c:1344 +#: commands/copy.c:574 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "la representación de null de COPY no puede usar el carácter de nueva línea ni el de retorno de carro" -#: commands/copy.c:1361 +#: commands/copy.c:591 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "el delimitador de COPY no puede ser «%s»" -#: commands/copy.c:1367 +#: commands/copy.c:597 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "el «header» de COPY está disponible sólo en modo CSV" -#: commands/copy.c:1373 +#: commands/copy.c:603 #, c-format msgid "COPY quote available only in CSV mode" msgstr "el «quote» de COPY está disponible sólo en modo CSV" -#: commands/copy.c:1378 +#: commands/copy.c:608 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "la comilla («quote») de COPY debe ser un solo carácter de un byte" -#: commands/copy.c:1383 +#: commands/copy.c:613 #, c-format msgid "COPY delimiter and quote must be different" msgstr "el delimitador de COPY y la comilla («quote») deben ser diferentes" -#: commands/copy.c:1389 +#: commands/copy.c:619 #, c-format msgid "COPY escape available only in CSV mode" msgstr "escape de COPY disponible sólo en modo CSV" -#: commands/copy.c:1394 +#: commands/copy.c:624 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "el escape de COPY debe ser un sólo carácter de un byte" -#: commands/copy.c:1400 +#: commands/copy.c:630 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "el forzado de comillas de COPY sólo está disponible en modo CSV" -#: commands/copy.c:1404 +#: commands/copy.c:634 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "el forzado de comillas de COPY sólo está disponible en COPY TO" -#: commands/copy.c:1410 +#: commands/copy.c:640 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "el forzado de no nulos en COPY sólo está disponible en modo CSV" -#: commands/copy.c:1414 +#: commands/copy.c:644 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "el forzado de no nulos en COPY sólo está disponible usando COPY FROM" -#: commands/copy.c:1420 +#: commands/copy.c:650 #, c-format msgid "COPY force null available only in CSV mode" msgstr "el forzado de nulos en COPY sólo está disponible en modo CSV" -#: commands/copy.c:1425 +#: commands/copy.c:655 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "el forzado de nulos en COPY sólo está disponible usando COPY FROM" -#: commands/copy.c:1431 +#: commands/copy.c:661 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "el delimitador de COPY no debe aparecer en la especificación NULL" -#: commands/copy.c:1438 +#: commands/copy.c:668 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "el carácter de «quote» de CSV no debe aparecer en la especificación NULL" -#: commands/copy.c:1524 -#, c-format -msgid "DO INSTEAD NOTHING rules are not supported for COPY" -msgstr "las reglas DO INSTEAD NOTHING no están soportadas para COPY" - -#: commands/copy.c:1538 -#, c-format -msgid "conditional DO INSTEAD rules are not supported for COPY" -msgstr "las reglas DO INSTEAD condicionales no están soportadas para COPY" - -#: commands/copy.c:1542 -#, c-format -msgid "DO ALSO rules are not supported for the COPY" -msgstr "las reglas DO ALSO no están soportadas para COPY" - -#: commands/copy.c:1547 -#, c-format -msgid "multi-statement DO INSTEAD rules are not supported for COPY" -msgstr "las reglas DO INSTEAD de múltiples sentencias no están soportadas para COPY" - -#: commands/copy.c:1557 -#, c-format -msgid "COPY (SELECT INTO) is not supported" -msgstr "COPY (SELECT INTO) no está soportado" - -#: commands/copy.c:1574 -#, c-format -msgid "COPY query must have a RETURNING clause" -msgstr "la consulta COPY debe tener una cláusula RETURNING" - -#: commands/copy.c:1603 -#, c-format -msgid "relation referenced by COPY statement has changed" -msgstr "la relación referenciada por la sentencia COPY ha cambiado" - -#: commands/copy.c:1662 -#, c-format -msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" -msgstr "la columna FORCE_QUOTE «%s» no es referenciada en COPY" - -#: commands/copy.c:1685 -#, c-format -msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" -msgstr "la columna FORCE_NOT_NULL «%s» no es referenciada en COPY" - -#: commands/copy.c:1708 -#, c-format -msgid "FORCE_NULL column \"%s\" not referenced by COPY" -msgstr "la columna FORCE_NULL «%s» no es referenciada en COPY" - -#: commands/copy.c:1774 libpq/be-secure-common.c:105 -#, c-format -msgid "could not close pipe to external command: %m" -msgstr "no se pudo cerrar la tubería a la orden externa: %m" - -#: commands/copy.c:1789 -#, c-format -msgid "program \"%s\" failed" -msgstr "el programa «%s» falló" - -#: commands/copy.c:1840 -#, c-format -msgid "cannot copy from view \"%s\"" -msgstr "no se puede copiar desde la vista «%s»" - -#: commands/copy.c:1842 commands/copy.c:1848 commands/copy.c:1854 -#: commands/copy.c:1865 -#, c-format -msgid "Try the COPY (SELECT ...) TO variant." -msgstr "Intente la forma COPY (SELECT ...) TO." - -#: commands/copy.c:1846 -#, c-format -msgid "cannot copy from materialized view \"%s\"" -msgstr "no se puede copiar desde la vista materializada «%s»" - -#: commands/copy.c:1852 -#, c-format -msgid "cannot copy from foreign table \"%s\"" -msgstr "no se puede copiar desde la tabla foránea «%s»" - -#: commands/copy.c:1858 -#, c-format -msgid "cannot copy from sequence \"%s\"" -msgstr "no se puede copiar desde la secuencia «%s»" - -#: commands/copy.c:1863 -#, c-format -msgid "cannot copy from partitioned table \"%s\"" -msgstr "no se puede hacer copy de la tabla particionada «%s»" - -#: commands/copy.c:1869 -#, c-format -msgid "cannot copy from non-table relation \"%s\"" -msgstr "no se puede copiar desde la relación «%s» porque no es una tabla" - -#: commands/copy.c:1909 +#: commands/copy.c:729 #, c-format -msgid "relative path not allowed for COPY to file" -msgstr "no se permiten rutas relativas para COPY hacia un archivo" +msgid "column \"%s\" is a generated column" +msgstr "la columna «%s» es una columna generada" -#: commands/copy.c:1928 +#: commands/copy.c:731 #, c-format -msgid "could not open file \"%s\" for writing: %m" -msgstr "no se pudo abrir el archivo «%s» para escritura: %m" +msgid "Generated columns cannot be used in COPY." +msgstr "Las columnas generadas no pueden usarse en COPY." -#: commands/copy.c:1931 +#: commands/copy.c:746 commands/indexcmds.c:1754 commands/statscmds.c:250 +#: commands/tablecmds.c:2374 commands/tablecmds.c:3030 +#: commands/tablecmds.c:3523 parser/parse_relation.c:3593 +#: parser/parse_relation.c:3613 utils/adt/tsvector_op.c:2680 #, c-format -msgid "COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \\copy." -msgstr "COPY TO indica al proceso servidor PostgreSQL escribir a un archivo. Puede desear usar facilidades del lado del cliente, como \\copy de psql." +msgid "column \"%s\" does not exist" +msgstr "no existe la columna «%s»" -#: commands/copy.c:1944 commands/copy.c:3511 +#: commands/copy.c:753 commands/tablecmds.c:2400 commands/trigger.c:933 +#: parser/parse_target.c:1080 parser/parse_target.c:1091 #, c-format -msgid "\"%s\" is a directory" -msgstr "«%s» es un directorio" +msgid "column \"%s\" specified more than once" +msgstr "la columna «%s» fue especificada más de una vez" -#: commands/copy.c:2246 +#: commands/copyfrom.c:127 #, c-format msgid "COPY %s, line %s, column %s" msgstr "COPY %s, línea %s, columna %s" -#: commands/copy.c:2250 commands/copy.c:2297 +#: commands/copyfrom.c:131 commands/copyfrom.c:172 #, c-format msgid "COPY %s, line %s" msgstr "COPY %s, línea %s" -#: commands/copy.c:2261 +#: commands/copyfrom.c:142 #, c-format msgid "COPY %s, line %s, column %s: \"%s\"" msgstr "COPY %s, línea %s, columna %s: «%s»" -#: commands/copy.c:2269 +#: commands/copyfrom.c:150 #, c-format msgid "COPY %s, line %s, column %s: null input" msgstr "COPY %s, línea %s, columna %s: entrada nula" -#: commands/copy.c:2291 +#: commands/copyfrom.c:166 #, c-format msgid "COPY %s, line %s: \"%s\"" msgstr "COPY %s, línea %s: «%s»" -#: commands/copy.c:2692 +#: commands/copyfrom.c:566 #, c-format msgid "cannot copy to view \"%s\"" msgstr "no se puede copiar hacia la vista «%s»" -#: commands/copy.c:2694 +#: commands/copyfrom.c:568 #, c-format msgid "To enable copying to a view, provide an INSTEAD OF INSERT trigger." msgstr "Para posibilitar «copy» a una vista, provea un disparador INSTEAD OF INSERT." -#: commands/copy.c:2698 +#: commands/copyfrom.c:572 #, c-format msgid "cannot copy to materialized view \"%s\"" msgstr "no se puede copiar hacia la vista materializada «%s»" -#: commands/copy.c:2703 +#: commands/copyfrom.c:577 #, c-format msgid "cannot copy to sequence \"%s\"" msgstr "no se puede copiar hacia la secuencia «%s»" -#: commands/copy.c:2708 +#: commands/copyfrom.c:582 #, c-format msgid "cannot copy to non-table relation \"%s\"" msgstr "no se puede copiar hacia la relación «%s» porque no es una tabla" -#: commands/copy.c:2748 +#: commands/copyfrom.c:622 #, c-format msgid "cannot perform COPY FREEZE on a partitioned table" msgstr "no se puede hacer COPY FREEZE a una tabla particionada" -#: commands/copy.c:2763 +#: commands/copyfrom.c:637 #, c-format msgid "cannot perform COPY FREEZE because of prior transaction activity" msgstr "no se puede ejecutar COPY FREEZE debido a actividad anterior en la transacción" -#: commands/copy.c:2769 +#: commands/copyfrom.c:643 #, c-format msgid "cannot perform COPY FREEZE because the table was not created or truncated in the current subtransaction" msgstr "no se puede ejecutar COPY FREEZE porque la tabla no fue creada ni truncada en la subtransacción en curso" -#: commands/copy.c:3498 +#: commands/copyfrom.c:1264 commands/copyto.c:618 +#, c-format +msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" +msgstr "la columna FORCE_NOT_NULL «%s» no es referenciada en COPY" + +#: commands/copyfrom.c:1287 commands/copyto.c:641 +#, c-format +msgid "FORCE_NULL column \"%s\" not referenced by COPY" +msgstr "la columna FORCE_NULL «%s» no es referenciada en COPY" + +#: commands/copyfrom.c:1519 #, c-format msgid "COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \\copy." msgstr "COPY FROM indica al proceso servidor de PostgreSQL leer un archivo. Puede desear usar una facilidad del lado del cliente como \\copy de psql." -#: commands/copy.c:3526 +#: commands/copyfrom.c:1532 commands/copyto.c:740 +#, c-format +msgid "\"%s\" is a directory" +msgstr "«%s» es un directorio" + +#: commands/copyfrom.c:1600 commands/copyto.c:302 libpq/be-secure-common.c:105 +#, c-format +msgid "could not close pipe to external command: %m" +msgstr "no se pudo cerrar la tubería a la orden externa: %m" + +#: commands/copyfrom.c:1615 commands/copyto.c:307 +#, c-format +msgid "program \"%s\" failed" +msgstr "el programa «%s» falló" + +#: commands/copyfromparse.c:199 #, c-format msgid "COPY file signature not recognized" msgstr "la signatura del archivo COPY no es reconocido" -#: commands/copy.c:3531 +#: commands/copyfromparse.c:204 #, c-format msgid "invalid COPY file header (missing flags)" msgstr "el encabezado del archivo COPY no es válido (faltan campos)" -#: commands/copy.c:3535 +#: commands/copyfromparse.c:208 #, c-format msgid "invalid COPY file header (WITH OIDS)" msgstr "encabezado de archivo COPY no válido (WITH OIDS)" -#: commands/copy.c:3540 +#: commands/copyfromparse.c:213 #, c-format msgid "unrecognized critical flags in COPY file header" msgstr "valores requeridos no reconocidos en encabezado de COPY" -#: commands/copy.c:3546 +#: commands/copyfromparse.c:219 #, c-format msgid "invalid COPY file header (missing length)" msgstr "el encabezado del archivo COPY no es válido (falta el largo)" -#: commands/copy.c:3553 +#: commands/copyfromparse.c:226 #, c-format msgid "invalid COPY file header (wrong length)" msgstr "el encabezado del archivo COPY no es válido (largo incorrecto)" -#: commands/copy.c:3672 commands/copy.c:4337 commands/copy.c:4567 +#: commands/copyfromparse.c:255 +#, c-format +msgid "could not read from COPY file: %m" +msgstr "no se pudo leer desde archivo COPY: %m" + +#: commands/copyfromparse.c:277 commands/copyfromparse.c:302 +#: tcop/postgres.c:360 +#, c-format +msgid "unexpected EOF on client connection with an open transaction" +msgstr "se encontró fin de archivo inesperado en una conexión con una transacción abierta" + +#: commands/copyfromparse.c:293 +#, c-format +msgid "unexpected message type 0x%02X during COPY from stdin" +msgstr "se recibió un mensaje de tipo 0x%02X inesperado durante COPY desde la entrada estándar" + +#: commands/copyfromparse.c:316 +#, c-format +msgid "COPY from stdin failed: %s" +msgstr "falló COPY desde la entrada estándar: %s" + +#: commands/copyfromparse.c:841 commands/copyfromparse.c:1451 +#: commands/copyfromparse.c:1681 #, c-format msgid "extra data after last expected column" msgstr "datos extra después de la última columna esperada" -#: commands/copy.c:3686 +#: commands/copyfromparse.c:855 #, c-format msgid "missing data for column \"%s\"" msgstr "faltan datos en la columna «%s»" -#: commands/copy.c:3769 +#: commands/copyfromparse.c:933 #, c-format msgid "received copy data after EOF marker" msgstr "se recibieron datos de copy después del marcador EOF" -#: commands/copy.c:3776 +#: commands/copyfromparse.c:940 #, c-format msgid "row field count is %d, expected %d" msgstr "la cantidad de registros es %d, pero se esperaban %d" -#: commands/copy.c:4096 commands/copy.c:4113 +#: commands/copyfromparse.c:1233 commands/copyfromparse.c:1250 #, c-format msgid "literal carriage return found in data" msgstr "se encontró un retorno de carro literal en los datos" -#: commands/copy.c:4097 commands/copy.c:4114 +#: commands/copyfromparse.c:1234 commands/copyfromparse.c:1251 #, c-format msgid "unquoted carriage return found in data" msgstr "se encontró un retorno de carro fuera de comillas en los datos" -#: commands/copy.c:4099 commands/copy.c:4116 +#: commands/copyfromparse.c:1236 commands/copyfromparse.c:1253 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "Use «\\r» para representar el retorno de carro." -#: commands/copy.c:4100 commands/copy.c:4117 +#: commands/copyfromparse.c:1237 commands/copyfromparse.c:1254 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "Use un campo CSV entre comillas para representar el retorno de carro." -#: commands/copy.c:4129 +#: commands/copyfromparse.c:1266 #, c-format msgid "literal newline found in data" msgstr "se encontró un salto de línea literal en los datos" -#: commands/copy.c:4130 +#: commands/copyfromparse.c:1267 #, c-format msgid "unquoted newline found in data" msgstr "se encontró un salto de línea fuera de comillas en los datos" -#: commands/copy.c:4132 +#: commands/copyfromparse.c:1269 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "Use «\\n» para representar un salto de línea." -#: commands/copy.c:4133 +#: commands/copyfromparse.c:1270 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "Use un campo CSV entre comillas para representar un salto de línea." -#: commands/copy.c:4179 commands/copy.c:4215 +#: commands/copyfromparse.c:1316 commands/copyfromparse.c:1352 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "el marcador fin-de-copy no coincide con el estilo previo de salto de línea" -#: commands/copy.c:4188 commands/copy.c:4204 +#: commands/copyfromparse.c:1325 commands/copyfromparse.c:1341 #, c-format msgid "end-of-copy marker corrupt" msgstr "marcador fin-de-copy corrupto" -#: commands/copy.c:4651 +#: commands/copyfromparse.c:1765 #, c-format msgid "unterminated CSV quoted field" msgstr "un valor entre comillas está inconcluso" -#: commands/copy.c:4728 commands/copy.c:4747 +#: commands/copyfromparse.c:1841 commands/copyfromparse.c:1860 #, c-format msgid "unexpected EOF in COPY data" msgstr "EOF inesperado en datos de COPY" -#: commands/copy.c:4737 +#: commands/copyfromparse.c:1850 #, c-format msgid "invalid field size" msgstr "el tamaño de campo no es válido" -#: commands/copy.c:4760 +#: commands/copyfromparse.c:1873 #, c-format msgid "incorrect binary data format" msgstr "el formato de datos binarios es incorrecto" -#: commands/copy.c:5068 +#: commands/copyto.c:235 #, c-format -msgid "column \"%s\" is a generated column" -msgstr "la columna «%s» es una columna generada" +msgid "could not write to COPY program: %m" +msgstr "no se pudo escribir al programa COPY: %m" -#: commands/copy.c:5070 +#: commands/copyto.c:240 #, c-format -msgid "Generated columns cannot be used in COPY." -msgstr "Las columnas generadas no pueden usarse en COPY." +msgid "could not write to COPY file: %m" +msgstr "no se pudo escribir archivo COPY: %m" -#: commands/copy.c:5085 commands/indexcmds.c:1700 commands/statscmds.c:217 -#: commands/tablecmds.c:2176 commands/tablecmds.c:2795 -#: commands/tablecmds.c:3182 parser/parse_relation.c:3507 -#: parser/parse_relation.c:3527 utils/adt/tsvector_op.c:2668 +#: commands/copyto.c:370 #, c-format -msgid "column \"%s\" does not exist" -msgstr "no existe la columna «%s»" +msgid "cannot copy from view \"%s\"" +msgstr "no se puede copiar desde la vista «%s»" -#: commands/copy.c:5092 commands/tablecmds.c:2202 commands/trigger.c:885 -#: parser/parse_target.c:1052 parser/parse_target.c:1063 +#: commands/copyto.c:372 commands/copyto.c:378 commands/copyto.c:384 +#: commands/copyto.c:395 #, c-format -msgid "column \"%s\" specified more than once" -msgstr "la columna «%s» fue especificada más de una vez" +msgid "Try the COPY (SELECT ...) TO variant." +msgstr "Intente la forma COPY (SELECT ...) TO." + +#: commands/copyto.c:376 +#, c-format +msgid "cannot copy from materialized view \"%s\"" +msgstr "no se puede copiar desde la vista materializada «%s»" + +#: commands/copyto.c:382 +#, c-format +msgid "cannot copy from foreign table \"%s\"" +msgstr "no se puede copiar desde la tabla foránea «%s»" + +#: commands/copyto.c:388 +#, c-format +msgid "cannot copy from sequence \"%s\"" +msgstr "no se puede copiar desde la secuencia «%s»" + +#: commands/copyto.c:393 +#, c-format +msgid "cannot copy from partitioned table \"%s\"" +msgstr "no se puede hacer copy de la tabla particionada «%s»" + +#: commands/copyto.c:399 +#, c-format +msgid "cannot copy from non-table relation \"%s\"" +msgstr "no se puede copiar desde la relación «%s» porque no es una tabla" + +#: commands/copyto.c:457 +#, c-format +msgid "DO INSTEAD NOTHING rules are not supported for COPY" +msgstr "las reglas DO INSTEAD NOTHING no están soportadas para COPY" + +#: commands/copyto.c:471 +#, c-format +msgid "conditional DO INSTEAD rules are not supported for COPY" +msgstr "las reglas DO INSTEAD condicionales no están soportadas para COPY" + +#: commands/copyto.c:475 +#, c-format +msgid "DO ALSO rules are not supported for the COPY" +msgstr "las reglas DO ALSO no están soportadas para COPY" + +#: commands/copyto.c:480 +#, c-format +msgid "multi-statement DO INSTEAD rules are not supported for COPY" +msgstr "las reglas DO INSTEAD de múltiples sentencias no están soportadas para COPY" + +#: commands/copyto.c:490 +#, c-format +msgid "COPY (SELECT INTO) is not supported" +msgstr "COPY (SELECT INTO) no está soportado" + +#: commands/copyto.c:507 +#, c-format +msgid "COPY query must have a RETURNING clause" +msgstr "la consulta COPY debe tener una cláusula RETURNING" + +#: commands/copyto.c:536 +#, c-format +msgid "relation referenced by COPY statement has changed" +msgstr "la relación referenciada por la sentencia COPY ha cambiado" + +#: commands/copyto.c:595 +#, c-format +msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" +msgstr "la columna FORCE_QUOTE «%s» no es referenciada en COPY" + +#: commands/copyto.c:705 +#, c-format +msgid "relative path not allowed for COPY to file" +msgstr "no se permiten rutas relativas para COPY hacia un archivo" + +#: commands/copyto.c:724 +#, c-format +msgid "could not open file \"%s\" for writing: %m" +msgstr "no se pudo abrir el archivo «%s» para escritura: %m" + +#: commands/copyto.c:727 +#, c-format +msgid "COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \\copy." +msgstr "COPY TO indica al proceso servidor PostgreSQL escribir a un archivo. Puede desear usar facilidades del lado del cliente, como \\copy de psql." -#: commands/createas.c:215 commands/createas.c:497 +#: commands/createas.c:215 commands/createas.c:517 #, c-format msgid "too many column names were specified" msgstr "se especificaron demasiados nombres de columna" -#: commands/createas.c:539 +#: commands/createas.c:540 #, c-format msgid "policies not yet implemented for this command" msgstr "las políticas no están implementadas para esta orden" @@ -6728,7 +6980,7 @@ msgstr "Debe moverlas de vuelta al tablespace por omisión de la base de datos a #: commands/dbcommands.c:1404 commands/dbcommands.c:1980 #: commands/dbcommands.c:2203 commands/dbcommands.c:2261 -#: commands/tablespace.c:619 +#: commands/tablespace.c:631 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "algunos archivos inútiles pueden haber quedado en el directorio \"%s\"" @@ -6765,7 +7017,7 @@ msgid_plural "There are %d other sessions using the database." msgstr[0] "Hay %d otra sesión usando la base de datos." msgstr[1] "Hay otras %d sesiones usando la base de datos." -#: commands/dbcommands.c:2094 storage/ipc/procarray.c:3016 +#: commands/dbcommands.c:2094 storage/ipc/procarray.c:3726 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." @@ -6809,8 +7061,8 @@ msgstr "el argumento de %s debe ser un nombre de tipo" msgid "invalid argument for %s: \"%s\"" msgstr "argumento no válido para %s: «%s»" -#: commands/dropcmds.c:100 commands/functioncmds.c:1274 -#: utils/adt/ruleutils.c:2633 +#: commands/dropcmds.c:100 commands/functioncmds.c:1384 +#: utils/adt/ruleutils.c:2806 #, c-format msgid "\"%s\" is an aggregate function" msgstr "«%s» es una función de agregación" @@ -6820,19 +7072,19 @@ msgstr "«%s» es una función de agregación" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Use DROP AGGREGATE para eliminar funciones de agregación." -#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3266 -#: commands/tablecmds.c:3424 commands/tablecmds.c:3469 -#: commands/tablecmds.c:15007 tcop/utility.c:1298 +#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3607 +#: commands/tablecmds.c:3765 commands/tablecmds.c:3810 +#: commands/tablecmds.c:15829 tcop/utility.c:1291 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "no existe la relación «%s», omitiendo" -#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1199 +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1256 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "el esquema «%s» no existe, omitiendo" -#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:259 +#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:272 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "el tipo «%s» no existe, omitiendo" @@ -6852,7 +7104,7 @@ msgstr "no existe el ordenamiento (collation) «%s», omitiendo" msgid "conversion \"%s\" does not exist, skipping" msgstr "no existe la conversión «%s», omitiendo" -#: commands/dropcmds.c:293 commands/statscmds.c:479 +#: commands/dropcmds.c:293 commands/statscmds.c:641 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "no existe el objeto de estadísticas «%s», omitiendo" @@ -6947,7 +7199,7 @@ msgstr "la regla «%s» para la relación «%s» no existe, omitiendo" msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "no existe el conector de datos externos «%s», omitiendo" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1399 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1351 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "el servidor «%s» no existe, omitiendo" @@ -7003,53 +7255,53 @@ msgstr "los disparadores por eventos no están soportados para %s" msgid "filter variable \"%s\" specified more than once" msgstr "la variable de filtro «%s» fue especificada más de una vez" -#: commands/event_trigger.c:399 commands/event_trigger.c:443 -#: commands/event_trigger.c:537 +#: commands/event_trigger.c:377 commands/event_trigger.c:421 +#: commands/event_trigger.c:515 #, c-format msgid "event trigger \"%s\" does not exist" msgstr "no existe el disparador por eventos «%s»" -#: commands/event_trigger.c:505 +#: commands/event_trigger.c:483 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "se ha denegado el permiso para cambiar el dueño del disparador por eventos «%s»" -#: commands/event_trigger.c:507 +#: commands/event_trigger.c:485 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "El dueño de un disparador por eventos debe ser un superusuario." -#: commands/event_trigger.c:1325 +#: commands/event_trigger.c:1304 #, c-format msgid "%s can only be called in a sql_drop event trigger function" msgstr "%s sólo puede invocarse en una función de un disparador en el evento sql_drop" -#: commands/event_trigger.c:1445 commands/event_trigger.c:1466 +#: commands/event_trigger.c:1424 commands/event_trigger.c:1445 #, c-format msgid "%s can only be called in a table_rewrite event trigger function" msgstr "%s sólo puede invocarse en una función de un disparador en el evento table_rewrite" -#: commands/event_trigger.c:1877 +#: commands/event_trigger.c:1862 #, c-format msgid "%s can only be called in an event trigger function" msgstr "%s sólo puede invocarse en una función de un disparador por eventos" -#: commands/explain.c:213 +#: commands/explain.c:218 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "valor no reconocido para la opción de EXPLAIN «%s»: «%s»" -#: commands/explain.c:220 +#: commands/explain.c:225 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "opción de EXPLAIN «%s» no reconocida" -#: commands/explain.c:228 +#: commands/explain.c:233 #, c-format msgid "EXPLAIN option WAL requires ANALYZE" msgstr "la opción WAL de EXPLAIN requiere ANALYZE" -#: commands/explain.c:237 +#: commands/explain.c:242 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "la opción TIMING de EXPLAIN requiere ANALYZE" @@ -7122,7 +7374,7 @@ msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "el parámetro «%s» no se puede cambiar en un archivo control secundario de extensión" #: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 -#: utils/misc/guc.c:6749 +#: utils/misc/guc.c:7073 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "el parámetro «%s» requiere un valor lógico (booleano)" @@ -7282,17 +7534,23 @@ msgstr "los ALTER EXTENSION anidados no están soportados" msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "la versión «%s» de la extensión «%s» ya está instalada" -#: commands/extension.c:3336 +#: commands/extension.c:3297 +#, fuzzy, c-format +#| msgid "cannot cast jsonb object to type %s" +msgid "cannot add an object of this type to an extension" +msgstr "no se puede convertir un objeto jsonb a tipo %s" + +#: commands/extension.c:3355 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "no se puede agregar el esquema «%s» a la extensión «%s» porque el esquema contiene la extensión" -#: commands/extension.c:3364 +#: commands/extension.c:3383 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s no es un miembro de la extensión «%s»" -#: commands/extension.c:3430 +#: commands/extension.c:3449 #, c-format msgid "file \"%s\" is too large" msgstr "el archivo «%s» es demasiado grande" @@ -7357,684 +7615,706 @@ msgstr "al cambiar el manejador del conector de datos externos, el comportamient msgid "changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid" msgstr "al cambiar el validador del conector de datos externos, las opciones para los objetos dependientes de él pueden volverse no válidas" -#: commands/foreigncmds.c:895 +#: commands/foreigncmds.c:871 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "el servidor «%s» ya existe, omitiendo" -#: commands/foreigncmds.c:1183 +#: commands/foreigncmds.c:1135 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "el mapeo de usuario «%s» ya existe para el servidor «%s», omitiendo" -#: commands/foreigncmds.c:1193 +#: commands/foreigncmds.c:1145 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "el mapeo de usuario «%s» ya existe para el servidor «%s»" -#: commands/foreigncmds.c:1293 commands/foreigncmds.c:1413 +#: commands/foreigncmds.c:1245 commands/foreigncmds.c:1365 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "no existe el mapeo de usuario «%s» para el servidor «%s»" -#: commands/foreigncmds.c:1418 +#: commands/foreigncmds.c:1370 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "no existe el mapeo de usuario «%s» para el servidor «%s», omitiendo" -#: commands/foreigncmds.c:1569 foreign/foreign.c:389 +#: commands/foreigncmds.c:1498 foreign/foreign.c:389 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "el conector de datos externos «%s» no tiene manejador" -#: commands/foreigncmds.c:1575 +#: commands/foreigncmds.c:1504 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "el conector de datos externos «%s» no soporta IMPORT FOREIGN SCHEMA" -#: commands/foreigncmds.c:1678 +#: commands/foreigncmds.c:1607 #, c-format msgid "importing foreign table \"%s\"" msgstr "importando la tabla foránea «%s»" -#: commands/functioncmds.c:104 +#: commands/functioncmds.c:107 #, c-format msgid "SQL function cannot return shell type %s" msgstr "una función SQL no puede retornar el tipo inconcluso %s" -#: commands/functioncmds.c:109 +#: commands/functioncmds.c:112 #, c-format msgid "return type %s is only a shell" msgstr "el tipo de retorno %s está inconcluso" -#: commands/functioncmds.c:139 parser/parse_type.c:354 +#: commands/functioncmds.c:142 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "no se puede especificar un modificador de tipo para el tipo inconcluso «%s»" -#: commands/functioncmds.c:145 +#: commands/functioncmds.c:148 #, c-format msgid "type \"%s\" is not yet defined" msgstr "el tipo «%s» no ha sido definido aún" -#: commands/functioncmds.c:146 +#: commands/functioncmds.c:149 #, c-format msgid "Creating a shell type definition." msgstr "Creando una definición de tipo inconclusa." -#: commands/functioncmds.c:238 +#: commands/functioncmds.c:243 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "las funciones SQL no pueden aceptar el tipo inconcluso %s" -#: commands/functioncmds.c:244 +#: commands/functioncmds.c:249 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "las funciones de agregación no pueden aceptar el tipo inconcluso %s" -#: commands/functioncmds.c:249 +#: commands/functioncmds.c:254 #, c-format msgid "argument type %s is only a shell" msgstr "el tipo de argumento %s está inconcluso" -#: commands/functioncmds.c:259 +#: commands/functioncmds.c:264 #, c-format msgid "type %s does not exist" msgstr "no existe el tipo %s" -#: commands/functioncmds.c:273 +#: commands/functioncmds.c:278 #, c-format msgid "aggregates cannot accept set arguments" msgstr "las funciones de agregación no pueden aceptar argumentos de conjunto" -#: commands/functioncmds.c:277 +#: commands/functioncmds.c:282 #, c-format msgid "procedures cannot accept set arguments" msgstr "los procedimientos no pueden aceptar argumentos de conjunto" -#: commands/functioncmds.c:281 +#: commands/functioncmds.c:286 #, c-format msgid "functions cannot accept set arguments" msgstr "funciones no pueden aceptar argumentos de conjunto" -#: commands/functioncmds.c:289 -#, c-format -msgid "procedures cannot have OUT arguments" -msgstr "los procedimientos no pueden tener argumentos OUT" - -#: commands/functioncmds.c:290 -#, c-format -msgid "INOUT arguments are permitted." -msgstr "Argumentos INOUT están permitidos." - -#: commands/functioncmds.c:300 -#, c-format -msgid "VARIADIC parameter must be the last input parameter" +#: commands/functioncmds.c:306 +#, fuzzy, c-format +#| msgid "VARIADIC parameter must be the last input parameter" +msgid "VARIADIC parameter must be the last signature parameter" msgstr "el parámetro VARIADIC debe ser el último parámetro de entrada" -#: commands/functioncmds.c:331 +#: commands/functioncmds.c:336 #, c-format msgid "VARIADIC parameter must be an array" msgstr "el parámetro VARIADIC debe ser un array" -#: commands/functioncmds.c:371 +#: commands/functioncmds.c:376 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "nombre de parámetro «%s» usado más de una vez" -#: commands/functioncmds.c:386 +#: commands/functioncmds.c:394 #, c-format msgid "only input parameters can have default values" msgstr "solo los parámetros de entrada pueden tener valores por omisión" -#: commands/functioncmds.c:401 +#: commands/functioncmds.c:409 #, c-format msgid "cannot use table references in parameter default value" msgstr "no se pueden usar referencias a tablas en el valor por omisión de un parámetro" -#: commands/functioncmds.c:425 +#: commands/functioncmds.c:433 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "los parámetros de entrada después de uno que tenga valor por omisión también deben tener valores por omisión" -#: commands/functioncmds.c:577 commands/functioncmds.c:768 +#: commands/functioncmds.c:585 commands/functioncmds.c:776 #, c-format msgid "invalid attribute in procedure definition" msgstr "atributo no válido en definición de procedimiento" -#: commands/functioncmds.c:673 +#: commands/functioncmds.c:681 #, c-format msgid "support function %s must return type %s" msgstr "la función de soporte %s debe retornar el tipo %s" -#: commands/functioncmds.c:684 +#: commands/functioncmds.c:692 #, c-format msgid "must be superuser to specify a support function" msgstr "debe ser superusuario para especificar una función de soporte" -#: commands/functioncmds.c:800 -#, c-format -msgid "no function body specified" -msgstr "no se ha especificado un cuerpo para la función" - -#: commands/functioncmds.c:810 -#, c-format -msgid "no language specified" -msgstr "no se ha especificado el lenguaje" - -#: commands/functioncmds.c:835 commands/functioncmds.c:1319 +#: commands/functioncmds.c:825 commands/functioncmds.c:1429 #, c-format msgid "COST must be positive" msgstr "COST debe ser positivo" -#: commands/functioncmds.c:843 commands/functioncmds.c:1327 +#: commands/functioncmds.c:833 commands/functioncmds.c:1437 #, c-format msgid "ROWS must be positive" msgstr "ROWS debe ser positivo" -#: commands/functioncmds.c:897 +#: commands/functioncmds.c:862 +#, c-format +msgid "no function body specified" +msgstr "no se ha especificado un cuerpo para la función" + +#: commands/functioncmds.c:867 +#, fuzzy, c-format +#| msgid "no function body specified" +msgid "duplicate function body specified" +msgstr "no se ha especificado un cuerpo para la función" + +#: commands/functioncmds.c:872 +#, c-format +msgid "inline SQL function body only valid for language SQL" +msgstr "" + +#: commands/functioncmds.c:914 +#, fuzzy, c-format +#| msgid "event trigger functions cannot have declared arguments" +msgid "SQL function with unquoted function body cannot have polymorphic arguments" +msgstr "las funciones de disparador por eventos no pueden tener argumentos declarados" + +#: commands/functioncmds.c:940 commands/functioncmds.c:959 +#, fuzzy, c-format +#| msgid "%s is not allowed in a SQL function" +msgid "%s is not yet supported in unquoted SQL function body" +msgstr "%s no está permitido en una función SQL" + +#: commands/functioncmds.c:987 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "sólo se requiere un item AS para el lenguaje «%s»" -#: commands/functioncmds.c:995 commands/functioncmds.c:2048 -#: commands/proclang.c:259 +#: commands/functioncmds.c:1092 +#, c-format +msgid "no language specified" +msgstr "no se ha especificado el lenguaje" + +#: commands/functioncmds.c:1100 commands/functioncmds.c:2102 +#: commands/proclang.c:237 #, c-format msgid "language \"%s\" does not exist" msgstr "no existe el lenguaje «%s»" -#: commands/functioncmds.c:997 commands/functioncmds.c:2050 +#: commands/functioncmds.c:1102 commands/functioncmds.c:2104 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "Use CREATE EXTENSION para cargar el lenguaje en la base de datos." -#: commands/functioncmds.c:1032 commands/functioncmds.c:1311 +#: commands/functioncmds.c:1137 commands/functioncmds.c:1421 #, c-format msgid "only superuser can define a leakproof function" msgstr "sólo un superusuario puede definir funciones «leakproof»" -#: commands/functioncmds.c:1081 +#: commands/functioncmds.c:1188 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "tipo de retorno de función debe ser %s debido a los parámetros OUT" -#: commands/functioncmds.c:1094 +#: commands/functioncmds.c:1201 #, c-format msgid "function result type must be specified" msgstr "el tipo de retorno de la función debe ser especificado" -#: commands/functioncmds.c:1146 commands/functioncmds.c:1331 +#: commands/functioncmds.c:1255 commands/functioncmds.c:1441 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "ROWS no es aplicable cuando una función no retorna un conjunto" -#: commands/functioncmds.c:1431 +#: commands/functioncmds.c:1541 #, c-format msgid "source data type %s is a pseudo-type" msgstr "el tipo de origen %s es un pseudotipo" -#: commands/functioncmds.c:1437 +#: commands/functioncmds.c:1547 #, c-format msgid "target data type %s is a pseudo-type" msgstr "el tipo de retorno %s es un pseudotipo" -#: commands/functioncmds.c:1461 +#: commands/functioncmds.c:1571 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "el cast será ignorado porque el tipo de datos de origen es un dominio" -#: commands/functioncmds.c:1466 +#: commands/functioncmds.c:1576 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "el cast será ignorado porque el tipo de datos de destino es un dominio" -#: commands/functioncmds.c:1491 +#: commands/functioncmds.c:1601 #, c-format msgid "cast function must take one to three arguments" msgstr "la función de conversión lleva de uno a tres argumentos" -#: commands/functioncmds.c:1495 +#: commands/functioncmds.c:1605 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "el argumento de la función de conversión debe coincidir o ser binario-convertible con el tipo de origen" -#: commands/functioncmds.c:1499 +#: commands/functioncmds.c:1609 #, c-format msgid "second argument of cast function must be type %s" msgstr "el segundo argumento de la función de conversión debe ser de tipo %s" -#: commands/functioncmds.c:1504 +#: commands/functioncmds.c:1614 #, c-format msgid "third argument of cast function must be type %s" msgstr "el tercer argumento de la función de conversión debe ser de tipo %s" -#: commands/functioncmds.c:1509 +#: commands/functioncmds.c:1619 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "el tipo de salida de la función de conversión debe coincidir o ser binario-convertible con el tipo de retorno" -#: commands/functioncmds.c:1520 +#: commands/functioncmds.c:1630 #, c-format msgid "cast function must not be volatile" msgstr "la función de conversión no debe ser volatile" -#: commands/functioncmds.c:1525 +#: commands/functioncmds.c:1635 #, c-format msgid "cast function must be a normal function" msgstr "la función de conversión debe ser una función normal" -#: commands/functioncmds.c:1529 +#: commands/functioncmds.c:1639 #, c-format msgid "cast function must not return a set" msgstr "la función de conversión no debe retornar un conjunto" -#: commands/functioncmds.c:1555 +#: commands/functioncmds.c:1665 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "debe ser superusuario para crear una conversión sin especificar función" -#: commands/functioncmds.c:1570 +#: commands/functioncmds.c:1680 #, c-format msgid "source and target data types are not physically compatible" msgstr "los tipos de datos de origen y destino no son físicamente compatibles" -#: commands/functioncmds.c:1585 +#: commands/functioncmds.c:1695 #, c-format msgid "composite data types are not binary-compatible" msgstr "los tipos de datos compuestos no son binario-compatibles" -#: commands/functioncmds.c:1591 +#: commands/functioncmds.c:1701 #, c-format msgid "enum data types are not binary-compatible" msgstr "los tipos de datos enum no son binario-compatibles" -#: commands/functioncmds.c:1597 +#: commands/functioncmds.c:1707 #, c-format msgid "array data types are not binary-compatible" msgstr "los tipos de datos de array no son binario-compatibles" -#: commands/functioncmds.c:1614 +#: commands/functioncmds.c:1724 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "los tipos de dato de dominio no deben ser marcados binario-compatibles" -#: commands/functioncmds.c:1624 +#: commands/functioncmds.c:1734 #, c-format msgid "source data type and target data type are the same" msgstr "el tipo de origen y el tipo de retorno son el mismo" -#: commands/functioncmds.c:1682 +#: commands/functioncmds.c:1767 #, c-format msgid "transform function must not be volatile" msgstr "la función de transformación no debe ser volatile" -#: commands/functioncmds.c:1686 +#: commands/functioncmds.c:1771 #, c-format msgid "transform function must be a normal function" msgstr "la función de transformación debe ser una función normal" -#: commands/functioncmds.c:1690 +#: commands/functioncmds.c:1775 #, c-format msgid "transform function must not return a set" msgstr "la función de transformación no debe retornar un conjunto" -#: commands/functioncmds.c:1694 +#: commands/functioncmds.c:1779 #, c-format msgid "transform function must take one argument" msgstr "la función de transformación debe recibir un argumento" -#: commands/functioncmds.c:1698 +#: commands/functioncmds.c:1783 #, c-format msgid "first argument of transform function must be type %s" msgstr "el primer argumento de la función de transformación debe ser de tipo %s" -#: commands/functioncmds.c:1736 +#: commands/functioncmds.c:1822 #, c-format msgid "data type %s is a pseudo-type" msgstr "el tipo de dato %s es un pseudo-tipo" -#: commands/functioncmds.c:1742 +#: commands/functioncmds.c:1828 #, c-format msgid "data type %s is a domain" msgstr "tipo de dato «%s» es un dominio" -#: commands/functioncmds.c:1782 +#: commands/functioncmds.c:1868 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "el tipo de dato de retorno de la función FROM SQL debe ser %s" -#: commands/functioncmds.c:1808 +#: commands/functioncmds.c:1894 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "el tipo de dato de retorno de la función TO SQL debe ser el tipo de dato de la transformación" -#: commands/functioncmds.c:1837 +#: commands/functioncmds.c:1923 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "la transformación para el tipo %s lenguaje «%s» ya existe" -#: commands/functioncmds.c:1929 +#: commands/functioncmds.c:2010 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "la transformación para el tipo %s lenguaje «%s» no existe" -#: commands/functioncmds.c:1980 +#: commands/functioncmds.c:2034 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "ya existe una función llamada %s en el esquema «%s»" -#: commands/functioncmds.c:2035 +#: commands/functioncmds.c:2089 #, c-format msgid "no inline code specified" msgstr "no se ha especificado código" -#: commands/functioncmds.c:2081 +#: commands/functioncmds.c:2135 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "el lenguaje «%s» no soporta ejecución de código en línea" -#: commands/functioncmds.c:2193 +#: commands/functioncmds.c:2252 #, c-format msgid "cannot pass more than %d argument to a procedure" msgid_plural "cannot pass more than %d arguments to a procedure" msgstr[0] "no se pueden pasar más de %d argumento a un procedimiento" msgstr[1] "no se pueden pasar más de %d argumentos a un procedimiento" -#: commands/indexcmds.c:590 +#: commands/indexcmds.c:618 #, c-format msgid "must specify at least one column" msgstr "debe especificar al menos una columna" -#: commands/indexcmds.c:594 +#: commands/indexcmds.c:622 #, c-format msgid "cannot use more than %d columns in an index" msgstr "no se puede usar más de %d columnas en un índice" -#: commands/indexcmds.c:633 +#: commands/indexcmds.c:661 #, c-format msgid "cannot create index on foreign table \"%s\"" msgstr "no se puede crear un índice en la tabla foránea «%s»" -#: commands/indexcmds.c:664 +#: commands/indexcmds.c:692 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "no se puede crear un índice en la tabla particionada «%s» concurrentemente" -#: commands/indexcmds.c:669 +#: commands/indexcmds.c:697 #, c-format msgid "cannot create exclusion constraints on partitioned table \"%s\"" msgstr "no se pueden create restricciones de exclusión en la tabla particionada «%s»" -#: commands/indexcmds.c:679 +#: commands/indexcmds.c:707 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "no se pueden crear índices en tablas temporales de otras sesiones" -#: commands/indexcmds.c:717 commands/tablecmds.c:704 commands/tablespace.c:1173 +#: commands/indexcmds.c:745 commands/tablecmds.c:748 commands/tablespace.c:1185 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "no se puede especificar el tablespace por omisión para las relaciones particionadas" -#: commands/indexcmds.c:749 commands/tablecmds.c:739 commands/tablecmds.c:13131 -#: commands/tablecmds.c:13245 +#: commands/indexcmds.c:777 commands/tablecmds.c:783 commands/tablecmds.c:3307 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "sólo relaciones compartidas pueden ser puestas en el tablespace pg_global" -#: commands/indexcmds.c:782 +#: commands/indexcmds.c:810 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "sustituyendo el método de acceso obsoleto «rtree» por «gist»" -#: commands/indexcmds.c:803 +#: commands/indexcmds.c:831 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "el método de acceso «%s» no soporta índices únicos" -#: commands/indexcmds.c:808 +#: commands/indexcmds.c:836 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "el método de acceso «%s» no soporta columnas incluidas" -#: commands/indexcmds.c:813 +#: commands/indexcmds.c:841 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "el método de acceso «%s» no soporta índices multicolumna" -#: commands/indexcmds.c:818 +#: commands/indexcmds.c:846 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "el método de acceso «%s» no soporta restricciones de exclusión" -#: commands/indexcmds.c:941 +#: commands/indexcmds.c:969 #, c-format -#| msgid "cannot create partitioned table as inheritance child" msgid "cannot match partition key to an index using access method \"%s\"" msgstr "no se puede hacer coincidir la llave de partición a un índice usando el método de acceso «%s»" -#: commands/indexcmds.c:951 +#: commands/indexcmds.c:979 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "restricción %s no soportada con definición de llave de particionamiento" -#: commands/indexcmds.c:953 +#: commands/indexcmds.c:981 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "No se pueden usar restricciones %s cuando las llaves de particionamiento incluyen expresiones." -#: commands/indexcmds.c:992 -#, c-format -msgid "insufficient columns in %s constraint definition" -msgstr "columnas insuficientes en definición de restricción %s" +#: commands/indexcmds.c:1020 +#, fuzzy, c-format +#| msgid "cannot remove constraint from only the partitioned table when partitions exist" +msgid "unique constraint on partitioned table must include all partitioning columns" +msgstr "no se pueden eliminar restricciones sólo de la tabla particionada cuando existen particiones" -#: commands/indexcmds.c:994 +#: commands/indexcmds.c:1021 #, c-format msgid "%s constraint on table \"%s\" lacks column \"%s\" which is part of the partition key." msgstr "La restricción %s en la tabla «%s» no incluye la columna «%s» que es parte de la llave de particionamiento." -#: commands/indexcmds.c:1013 commands/indexcmds.c:1032 +#: commands/indexcmds.c:1040 commands/indexcmds.c:1059 #, c-format msgid "index creation on system columns is not supported" msgstr "la creación de índices en columnas de sistema no está soportada" -#: commands/indexcmds.c:1057 -#, c-format -msgid "%s %s will create implicit index \"%s\" for table \"%s\"" -msgstr "%s %s creará el índice implícito «%s» para la tabla «%s»" - -#: commands/indexcmds.c:1198 tcop/utility.c:1484 +#: commands/indexcmds.c:1231 tcop/utility.c:1477 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "no se puede crear un índice único en la tabla particionada «%s»" -#: commands/indexcmds.c:1200 tcop/utility.c:1486 +#: commands/indexcmds.c:1233 tcop/utility.c:1479 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "La tabla «%s» contiene particiones que son tablas foráneas." -#: commands/indexcmds.c:1629 +#: commands/indexcmds.c:1683 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "las funciones utilizadas en predicados de índice deben estar marcadas IMMUTABLE" -#: commands/indexcmds.c:1695 parser/parse_utilcmd.c:2440 -#: parser/parse_utilcmd.c:2575 +#: commands/indexcmds.c:1749 parser/parse_utilcmd.c:2525 +#: parser/parse_utilcmd.c:2660 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "no existe la columna «%s» en la llave" -#: commands/indexcmds.c:1719 parser/parse_utilcmd.c:1776 +#: commands/indexcmds.c:1773 parser/parse_utilcmd.c:1824 #, c-format msgid "expressions are not supported in included columns" msgstr "las expresiones no están soportadas en columnas incluidas" -#: commands/indexcmds.c:1760 +#: commands/indexcmds.c:1814 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "las funciones utilizadas en expresiones de índice deben estar marcadas IMMUTABLE" -#: commands/indexcmds.c:1775 +#: commands/indexcmds.c:1829 #, c-format msgid "including column does not support a collation" msgstr "la columna incluida no permite un ordenamiento (collation)" -#: commands/indexcmds.c:1779 +#: commands/indexcmds.c:1833 #, c-format msgid "including column does not support an operator class" msgstr "la columna incluida no permite una clase de operadores" -#: commands/indexcmds.c:1783 +#: commands/indexcmds.c:1837 #, c-format msgid "including column does not support ASC/DESC options" msgstr "la columna incluida no permite las opciones ASC/DESC" -#: commands/indexcmds.c:1787 +#: commands/indexcmds.c:1841 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "la columna incluida no permite las opciones NULLS FIRST/LAST" -#: commands/indexcmds.c:1814 +#: commands/indexcmds.c:1868 #, c-format msgid "could not determine which collation to use for index expression" msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de índice" -#: commands/indexcmds.c:1822 commands/tablecmds.c:16011 commands/typecmds.c:771 -#: parser/parse_expr.c:2850 parser/parse_type.c:566 parser/parse_utilcmd.c:3649 -#: parser/parse_utilcmd.c:4210 utils/adt/misc.c:503 +#: commands/indexcmds.c:1876 commands/tablecmds.c:16834 commands/typecmds.c:810 +#: parser/parse_expr.c:2680 parser/parse_type.c:566 parser/parse_utilcmd.c:3813 +#: utils/adt/misc.c:599 #, c-format msgid "collations are not supported by type %s" msgstr "los ordenamientos (collation) no están soportados por el tipo %s" -#: commands/indexcmds.c:1860 +#: commands/indexcmds.c:1914 #, c-format msgid "operator %s is not commutative" msgstr "el operador %s no es conmutativo" -#: commands/indexcmds.c:1862 +#: commands/indexcmds.c:1916 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "Sólo operadores conmutativos pueden ser usados en restricciones de exclusión." -#: commands/indexcmds.c:1888 +#: commands/indexcmds.c:1942 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "el operador %s no es un miembro de la familia de operadores «%s»" -#: commands/indexcmds.c:1891 +#: commands/indexcmds.c:1945 #, c-format msgid "The exclusion operator must be related to the index operator class for the constraint." msgstr "El operador de exclusión debe estar relacionado con la clase de operadores del índice para la restricción." -#: commands/indexcmds.c:1926 +#: commands/indexcmds.c:1980 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "el método de acceso «%s» no soporta las opciones ASC/DESC" -#: commands/indexcmds.c:1931 +#: commands/indexcmds.c:1985 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "el método de acceso «%s» no soporta las opciones NULLS FIRST/LAST" -#: commands/indexcmds.c:1977 commands/tablecmds.c:16036 -#: commands/tablecmds.c:16042 commands/typecmds.c:1945 +#: commands/indexcmds.c:2031 commands/tablecmds.c:16859 +#: commands/tablecmds.c:16865 commands/typecmds.c:2318 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "el tipo de dato %s no tiene una clase de operadores por omisión para el método de acceso «%s»" -#: commands/indexcmds.c:1979 +#: commands/indexcmds.c:2033 #, c-format msgid "You must specify an operator class for the index or define a default operator class for the data type." msgstr "Debe especificar una clase de operadores para el índice, o definir una clase de operadores por omisión para el tipo de datos." -#: commands/indexcmds.c:2008 commands/indexcmds.c:2016 -#: commands/opclasscmds.c:208 +#: commands/indexcmds.c:2062 commands/indexcmds.c:2070 +#: commands/opclasscmds.c:205 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "no existe la clase de operadores «%s» para el método de acceso «%s»" -#: commands/indexcmds.c:2030 commands/typecmds.c:1933 +#: commands/indexcmds.c:2084 commands/typecmds.c:2306 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "la clase de operadores «%s» no acepta el tipo de datos %s" -#: commands/indexcmds.c:2120 +#: commands/indexcmds.c:2174 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "hay múltiples clases de operadores por omisión para el tipo de datos %s" -#: commands/indexcmds.c:2569 +#: commands/indexcmds.c:2502 +#, fuzzy, c-format +#| msgid "unrecognized EXPLAIN option \"%s\"" +msgid "unrecognized REINDEX option \"%s\"" +msgstr "opción de EXPLAIN «%s» no reconocida" + +#: commands/indexcmds.c:2726 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "la tabla «%s» no tiene índices que puedan ser reindexados concurrentemente" -#: commands/indexcmds.c:2580 +#: commands/indexcmds.c:2740 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "la tabla «%s» no tiene índices para reindexar" -#: commands/indexcmds.c:2619 commands/indexcmds.c:2893 -#: commands/indexcmds.c:2986 +#: commands/indexcmds.c:2780 commands/indexcmds.c:3287 +#: commands/indexcmds.c:3415 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "no se pueden reindexar catálogos de sistema concurrentemente" -#: commands/indexcmds.c:2642 +#: commands/indexcmds.c:2803 #, c-format msgid "can only reindex the currently open database" msgstr "sólo se puede reindexar la base de datos actualmente abierta" -#: commands/indexcmds.c:2733 +#: commands/indexcmds.c:2891 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "no se puede reindexar un catálogo de sistema concurrentemente, omitiéndolos todos" -#: commands/indexcmds.c:2785 commands/indexcmds.c:3466 +#: commands/indexcmds.c:2924 +#, fuzzy, c-format +#| msgid "cannot move system relation \"%s\"" +msgid "cannot move system relations, skipping all" +msgstr "no se puede mover la relación de sistema «%s»" + +#: commands/indexcmds.c:2971 +#, fuzzy, c-format +#| msgid "Unlogged partitioned table \"%s.%s\"" +msgid "while reindexing partitioned table \"%s.%s\"" +msgstr "Tabla unlogged particionada «%s.%s»" + +#: commands/indexcmds.c:2974 +#, fuzzy, c-format +#| msgid "Unlogged partitioned index \"%s.%s\"" +msgid "while reindexing partitioned index \"%s.%s\"" +msgstr "Índice particionado unlogged «%s.%s»" + +#: commands/indexcmds.c:3167 commands/indexcmds.c:4003 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "la tabla «%s.%s» fue reindexada" -#: commands/indexcmds.c:2908 commands/indexcmds.c:2954 +#: commands/indexcmds.c:3319 commands/indexcmds.c:3371 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "no se puede reindexar el índice no válido «%s.%s» concurrentemente, omitiendo" -#: commands/indexcmds.c:2914 +#: commands/indexcmds.c:3325 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "no se puede reindexar el índice de restricción de exclusión «%s.%s» concurrentemente, omitiendo" -#: commands/indexcmds.c:2996 -#, c-format -msgid "cannot reindex invalid index on TOAST table concurrently" -msgstr "no se puede reindexar el índice no válido en una tabla TOAST concurrentemente" - -#: commands/indexcmds.c:3024 +#: commands/indexcmds.c:3480 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "no se puede reindexar este tipo de relación concurrentemente" -#: commands/indexcmds.c:3448 commands/indexcmds.c:3459 +#: commands/indexcmds.c:3501 +#, fuzzy, c-format +#| msgid "cannot move system relation \"%s\"" +msgid "cannot move non-shared relation to tablespace \"%s\"" +msgstr "no se puede mover la relación de sistema «%s»" + +#: commands/indexcmds.c:3984 commands/indexcmds.c:3996 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "el índice «%s.%s» fue reindexado" -#: commands/indexcmds.c:3491 -#, c-format -msgid "REINDEX is not yet implemented for partitioned indexes" -msgstr "REINDEX no está implementado aún para tablas particionadas" - -#: commands/lockcmds.c:91 commands/tablecmds.c:5629 commands/trigger.c:295 -#: rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:928 +#: commands/lockcmds.c:92 commands/tablecmds.c:6024 commands/trigger.c:289 +#: rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:938 #, c-format msgid "\"%s\" is not a table or view" msgstr "«%s» no es una tabla o vista" -#: commands/lockcmds.c:213 rewrite/rewriteHandler.c:1977 -#: rewrite/rewriteHandler.c:3782 -#, c-format -msgid "infinite recursion detected in rules for relation \"%s\"" -msgstr "se detectó recursión infinita en las reglas de la relación «%s»" - #: commands/matview.c:182 #, c-format msgid "CONCURRENTLY cannot be used when the materialized view is not populated" @@ -8055,238 +8335,238 @@ msgstr "no se puede refrescar la vista materializada «%s» concurrentemente" msgid "Create a unique index with no WHERE clause on one or more columns of the materialized view." msgstr "Cree un índice único sin cláusula WHERE en una o más columnas de la vista materializada." -#: commands/matview.c:641 +#: commands/matview.c:652 #, c-format msgid "new data for materialized view \"%s\" contains duplicate rows without any null columns" msgstr "nuevos datos para la vista materializada «%s» contiene filas duplicadas sin columnas nulas" -#: commands/matview.c:643 +#: commands/matview.c:654 #, c-format msgid "Row: %s" msgstr "Fila: %s" -#: commands/opclasscmds.c:127 +#: commands/opclasscmds.c:124 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\"" msgstr "no existe la familia de operadores «%s» para el método de acceso «%s»" -#: commands/opclasscmds.c:269 +#: commands/opclasscmds.c:266 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "ya exista una familia de operadores «%s» para el método de acceso «%s»" -#: commands/opclasscmds.c:414 +#: commands/opclasscmds.c:411 #, c-format msgid "must be superuser to create an operator class" msgstr "debe ser superusuario para crear una clase de operadores" -#: commands/opclasscmds.c:487 commands/opclasscmds.c:869 -#: commands/opclasscmds.c:993 +#: commands/opclasscmds.c:484 commands/opclasscmds.c:901 +#: commands/opclasscmds.c:1047 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "el número de operador %d es incorrecto, debe estar entre 1 y %d" -#: commands/opclasscmds.c:531 commands/opclasscmds.c:913 -#: commands/opclasscmds.c:1008 +#: commands/opclasscmds.c:529 commands/opclasscmds.c:951 +#: commands/opclasscmds.c:1063 #, c-format msgid "invalid function number %d, must be between 1 and %d" msgstr "número de función %d no válido, debe estar entre 1 y %d" -#: commands/opclasscmds.c:559 +#: commands/opclasscmds.c:558 #, c-format msgid "storage type specified more than once" msgstr "el tipo de almacenamiento fue especificado más de una vez" -#: commands/opclasscmds.c:586 +#: commands/opclasscmds.c:585 #, c-format msgid "storage type cannot be different from data type for access method \"%s\"" msgstr "el tipo de almacenamiento no puede ser diferente del tipo de dato para el método de acceso «%s»" -#: commands/opclasscmds.c:602 +#: commands/opclasscmds.c:601 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "ya exista una clase de operadores «%s» para el método de acceso «%s»" -#: commands/opclasscmds.c:630 +#: commands/opclasscmds.c:629 #, c-format msgid "could not make operator class \"%s\" be default for type %s" msgstr "no se pudo hacer que «%s» sea la clase de operadores por omisión para el tipo %s" -#: commands/opclasscmds.c:633 +#: commands/opclasscmds.c:632 #, c-format msgid "Operator class \"%s\" already is the default." msgstr "Actualmente, «%s» es la clase de operadores por omisión." -#: commands/opclasscmds.c:761 +#: commands/opclasscmds.c:792 #, c-format msgid "must be superuser to create an operator family" msgstr "debe ser superusuario para crear una familia de operadores" -#: commands/opclasscmds.c:821 +#: commands/opclasscmds.c:852 #, c-format msgid "must be superuser to alter an operator family" msgstr "debe ser superusuario para alterar una familia de operadores" -#: commands/opclasscmds.c:878 +#: commands/opclasscmds.c:910 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "los tipos de los argumentos de operador deben ser especificados en ALTER OPERATOR FAMILY" -#: commands/opclasscmds.c:941 +#: commands/opclasscmds.c:985 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "STORAGE no puede ser especificado en ALTER OPERATOR FAMILY" -#: commands/opclasscmds.c:1063 +#: commands/opclasscmds.c:1119 #, c-format msgid "one or two argument types must be specified" msgstr "uno o dos tipos de argumento debe/n ser especificado" -#: commands/opclasscmds.c:1089 +#: commands/opclasscmds.c:1145 #, c-format msgid "index operators must be binary" msgstr "los operadores de índice deben ser binarios" -#: commands/opclasscmds.c:1108 +#: commands/opclasscmds.c:1164 #, c-format msgid "access method \"%s\" does not support ordering operators" msgstr "el método de acceso «%s» no soporta operadores de ordenamiento" -#: commands/opclasscmds.c:1119 +#: commands/opclasscmds.c:1175 #, c-format msgid "index search operators must return boolean" msgstr "los operadores de búsqueda en índices deben retornar boolean" -#: commands/opclasscmds.c:1159 -#, c-format -#| msgid "associated data types for operator class options parsing functions must match opclass input type" -msgid "associated data types for opclass options parsing functions must match opclass input type" +#: commands/opclasscmds.c:1215 +#, fuzzy, c-format +#| msgid "associated data types for opclass options parsing functions must match opclass input type" +msgid "associated data types for operator class options parsing functions must match opclass input type" msgstr "los tipos de dato asociados a las funciones de interpretación de opciones de la clase de operadores deben coincidir exactamente con el tipo de entrada de la clase de operadores" -#: commands/opclasscmds.c:1166 -#, c-format -#| msgid "left and right associated data types for operator class options parsing functions must match" -msgid "left and right associated data types for opclass options parsing functions must match" +#: commands/opclasscmds.c:1222 +#, fuzzy, c-format +#| msgid "left and right associated data types for opclass options parsing functions must match" +msgid "left and right associated data types for operator class options parsing functions must match" msgstr "los tipos de dato izquierdo y derecho asociados a las funciones de interpretación de opciones de la clase de operadores deben coincidir" -#: commands/opclasscmds.c:1174 -#, c-format -#| msgid "invalid operator class options parsing function" -msgid "invalid opclass options parsing function" +#: commands/opclasscmds.c:1230 +#, fuzzy, c-format +#| msgid "invalid opclass options parsing function" +msgid "invalid operator class options parsing function" msgstr "función de interpretación de opciones de la clase de operadores no válida" -#: commands/opclasscmds.c:1175 -#, c-format -#| msgid "Valid signature of operator class options parsing function is %s." -msgid "Valid signature of opclass options parsing function is '%s'." +#: commands/opclasscmds.c:1231 +#, fuzzy, c-format +#| msgid "Valid signature of opclass options parsing function is '%s'." +msgid "Valid signature of operator class options parsing function is %s." msgstr "La signatura válida para la función de interpretación de opciones de una clase de operadores es '%s'." -#: commands/opclasscmds.c:1194 +#: commands/opclasscmds.c:1250 #, c-format msgid "btree comparison functions must have two arguments" msgstr "las funciones de comparación btree deben tener dos argumentos" -#: commands/opclasscmds.c:1198 +#: commands/opclasscmds.c:1254 #, c-format msgid "btree comparison functions must return integer" msgstr "las funciones de comparación btree deben retornar entero" -#: commands/opclasscmds.c:1215 +#: commands/opclasscmds.c:1271 #, c-format msgid "btree sort support functions must accept type \"internal\"" msgstr "las funciones btree de soporte de ordenamiento deben aceptar tipo «internal»" -#: commands/opclasscmds.c:1219 +#: commands/opclasscmds.c:1275 #, c-format msgid "btree sort support functions must return void" msgstr "las funciones btree de soporte de ordenamiento deben retornar void" -#: commands/opclasscmds.c:1230 +#: commands/opclasscmds.c:1286 #, c-format msgid "btree in_range functions must have five arguments" msgstr "las funciones btree in_range deben tener cinco argumentos" -#: commands/opclasscmds.c:1234 +#: commands/opclasscmds.c:1290 #, c-format msgid "btree in_range functions must return boolean" msgstr "las funciones btree in_range deben retornar booleano" -#: commands/opclasscmds.c:1250 +#: commands/opclasscmds.c:1306 #, c-format msgid "btree equal image functions must have one argument" msgstr "las funciones btree de igualdad de imagen deben tener un argumento" -#: commands/opclasscmds.c:1254 +#: commands/opclasscmds.c:1310 #, c-format msgid "btree equal image functions must return boolean" msgstr "las funciones btree de igualdad de imagen deben retornar booleano" -#: commands/opclasscmds.c:1267 +#: commands/opclasscmds.c:1323 #, c-format msgid "btree equal image functions must not be cross-type" msgstr "las funciones btree de igualdad de imagen no deben ser entre distintos tipos" -#: commands/opclasscmds.c:1277 +#: commands/opclasscmds.c:1333 #, c-format msgid "hash function 1 must have one argument" msgstr "la función de hash 1 debe tener un argumento" -#: commands/opclasscmds.c:1281 +#: commands/opclasscmds.c:1337 #, c-format msgid "hash function 1 must return integer" msgstr "la función de hash 1 debe retornar integer" -#: commands/opclasscmds.c:1288 +#: commands/opclasscmds.c:1344 #, c-format msgid "hash function 2 must have two arguments" msgstr "la función de hash 2 debe tener dos argumentos" -#: commands/opclasscmds.c:1292 +#: commands/opclasscmds.c:1348 #, c-format msgid "hash function 2 must return bigint" msgstr "la función de hash 2 debe retornar bigint" -#: commands/opclasscmds.c:1317 +#: commands/opclasscmds.c:1373 #, c-format msgid "associated data types must be specified for index support function" msgstr "los tipos de datos asociados deben ser especificados para una función de soporte de índice" -#: commands/opclasscmds.c:1342 +#: commands/opclasscmds.c:1398 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "la función número %d para (%s,%s) aparece más de una vez" -#: commands/opclasscmds.c:1349 +#: commands/opclasscmds.c:1405 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "el número de operador %d para (%s,%s) aparece más de una vez" -#: commands/opclasscmds.c:1398 +#: commands/opclasscmds.c:1451 #, c-format msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "ya existe un operador %d(%s,%s) en la familia de operadores «%s»" -#: commands/opclasscmds.c:1515 +#: commands/opclasscmds.c:1557 #, c-format msgid "function %d(%s,%s) already exists in operator family \"%s\"" msgstr "ya existe una función %d(%s,%s) en la familia de operador «%s»" -#: commands/opclasscmds.c:1606 +#: commands/opclasscmds.c:1638 #, c-format msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" msgstr "no existe el operador %d(%s,%s) en la familia de operadores «%s»" -#: commands/opclasscmds.c:1646 +#: commands/opclasscmds.c:1678 #, c-format msgid "function %d(%s,%s) does not exist in operator family \"%s\"" msgstr "no existe la función %d(%s,%s) en la familia de operadores «%s»" -#: commands/opclasscmds.c:1776 +#: commands/opclasscmds.c:1709 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "ya existe una clase de operadores «%s» para el método de acceso «%s» en el esquema «%s»" -#: commands/opclasscmds.c:1799 +#: commands/opclasscmds.c:1732 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "ya existe una familia de operadores «%s» para el método de acceso «%s» en el esquema «%s»" @@ -8296,7 +8576,7 @@ msgstr "ya existe una familia de operadores «%s» para el método de acceso «% msgid "SETOF type not allowed for operator argument" msgstr "no se permite un tipo SETOF en los argumentos de un operador" -#: commands/operatorcmds.c:152 commands/operatorcmds.c:467 +#: commands/operatorcmds.c:152 commands/operatorcmds.c:479 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "el atributo de operador «%s» no es reconocido" @@ -8306,38 +8586,51 @@ msgstr "el atributo de operador «%s» no es reconocido" msgid "operator function must be specified" msgstr "la función del operador debe especificarse" -#: commands/operatorcmds.c:174 -#, c-format -msgid "at least one of leftarg or rightarg must be specified" -msgstr "debe especificar al menos uno de los argumentos izquierdo o derecho" +#: commands/operatorcmds.c:181 +#, fuzzy, c-format +#| msgid "one or two argument types must be specified" +msgid "operator argument types must be specified" +msgstr "uno o dos tipos de argumento debe/n ser especificado" + +#: commands/operatorcmds.c:185 +#, fuzzy, c-format +#| msgid "one or two argument types must be specified" +msgid "operator right argument type must be specified" +msgstr "uno o dos tipos de argumento debe/n ser especificado" -#: commands/operatorcmds.c:278 +#: commands/operatorcmds.c:186 +#, fuzzy, c-format +#| msgid "log format \"%s\" is not supported" +msgid "Postfix operators are not supported." +msgstr "el formato de log «%s» no está soportado" + +#: commands/operatorcmds.c:290 #, c-format msgid "restriction estimator function %s must return type %s" msgstr "la función de estimación de restricción %s debe retornar tipo %s" -#: commands/operatorcmds.c:321 +#: commands/operatorcmds.c:333 #, c-format msgid "join estimator function %s has multiple matches" msgstr "la función de estimación de join %s tiene múltiples coincidencias" -#: commands/operatorcmds.c:336 +#: commands/operatorcmds.c:348 #, c-format msgid "join estimator function %s must return type %s" msgstr "la función de estimación de join %s debe retornar tipo %s" -#: commands/operatorcmds.c:461 +#: commands/operatorcmds.c:473 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "el atributo de operador «%s» no puede ser cambiado" -#: commands/policy.c:88 commands/policy.c:401 commands/policy.c:491 -#: commands/tablecmds.c:1512 commands/tablecmds.c:1994 -#: commands/tablecmds.c:3076 commands/tablecmds.c:5608 -#: commands/tablecmds.c:8364 commands/tablecmds.c:15601 -#: commands/tablecmds.c:15636 commands/trigger.c:301 commands/trigger.c:1206 -#: commands/trigger.c:1315 rewrite/rewriteDefine.c:277 -#: rewrite/rewriteDefine.c:933 rewrite/rewriteRemove.c:80 +#: commands/policy.c:88 commands/policy.c:381 commands/policy.c:471 +#: commands/statscmds.c:150 commands/tablecmds.c:1569 commands/tablecmds.c:2158 +#: commands/tablecmds.c:3417 commands/tablecmds.c:6003 +#: commands/tablecmds.c:8872 commands/tablecmds.c:16424 +#: commands/tablecmds.c:16459 commands/trigger.c:295 commands/trigger.c:1271 +#: commands/trigger.c:1380 rewrite/rewriteDefine.c:277 +#: rewrite/rewriteDefine.c:943 rewrite/rewriteRemove.c:80 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "permiso denegado: «%s» es un catálogo de sistema" @@ -8352,42 +8645,48 @@ msgstr "ignorando los roles especificados que no son PUBLIC" msgid "All roles are members of the PUBLIC role." msgstr "Todos los roles son miembros del rol PUBLIC." -#: commands/policy.c:515 +#: commands/policy.c:495 #, c-format msgid "role \"%s\" could not be removed from policy \"%s\" on \"%s\"" msgstr "el rol «%s» no pudo ser eliminado de la política «%s» en «%s»" -#: commands/policy.c:724 +#: commands/policy.c:704 #, c-format msgid "WITH CHECK cannot be applied to SELECT or DELETE" msgstr "WITH CHECK no puede ser aplicado a SELECT o DELETE" -#: commands/policy.c:733 commands/policy.c:1038 +#: commands/policy.c:713 commands/policy.c:1018 #, c-format msgid "only WITH CHECK expression allowed for INSERT" msgstr "sólo se permite una expresión WITH CHECK para INSERT" -#: commands/policy.c:808 commands/policy.c:1261 +#: commands/policy.c:788 commands/policy.c:1241 #, c-format msgid "policy \"%s\" for table \"%s\" already exists" msgstr "la política «%s» para la tabla «%s» ya existe" -#: commands/policy.c:1010 commands/policy.c:1289 commands/policy.c:1360 +#: commands/policy.c:990 commands/policy.c:1269 commands/policy.c:1340 #, c-format msgid "policy \"%s\" for table \"%s\" does not exist" msgstr "no existe la política «%s» para la tabla «%s»" -#: commands/policy.c:1028 +#: commands/policy.c:1008 #, c-format msgid "only USING expression allowed for SELECT, DELETE" msgstr "sólo se permite una expresión USING para SELECT, DELETE" -#: commands/portalcmds.c:59 commands/portalcmds.c:182 commands/portalcmds.c:233 +#: commands/portalcmds.c:60 commands/portalcmds.c:187 commands/portalcmds.c:238 #, c-format msgid "invalid cursor name: must not be empty" msgstr "el nombre de cursor no es válido: no debe ser vacío" -#: commands/portalcmds.c:190 commands/portalcmds.c:243 +#: commands/portalcmds.c:72 +#, fuzzy, c-format +#| msgid "cannot create temporary table within security-restricted operation" +msgid "cannot create a cursor WITH HOLD within security-restricted operation" +msgstr "no se puede crear una tabla temporal dentro una operación restringida por seguridad" + +#: commands/portalcmds.c:195 commands/portalcmds.c:248 #: executor/execCurrent.c:70 utils/adt/xml.c:2594 utils/adt/xml.c:2764 #, c-format msgid "cursor \"%s\" does not exist" @@ -8398,7 +8697,7 @@ msgstr "no existe el cursor «%s»" msgid "invalid statement name: must not be empty" msgstr "el nombre de sentencia no es válido: no debe ser vacío" -#: commands/prepare.c:134 parser/parse_param.c:304 tcop/postgres.c:1498 +#: commands/prepare.c:134 parser/parse_param.c:313 tcop/postgres.c:1473 #, c-format msgid "could not determine data type of parameter $%d" msgstr "no se pudo determinar el tipo del parámetro $%d" @@ -8428,17 +8727,17 @@ msgstr "Se esperaban %d parámetros pero se obtuvieron %d." msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "el parámetro $%d de tipo %s no puede ser convertido al tipo esperado %s" -#: commands/prepare.c:449 +#: commands/prepare.c:447 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "la sentencia preparada «%s» ya existe" -#: commands/prepare.c:488 +#: commands/prepare.c:486 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "no existe la sentencia preparada «%s»" -#: commands/proclang.c:67 +#: commands/proclang.c:68 #, c-format msgid "must be superuser to create custom procedural language" msgstr "debe ser superusuario para crear un lenguaje procedural personalizado" @@ -8483,27 +8782,27 @@ msgstr "la publicación \"%s\" se define como FOR ALL TABLES" msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "Las tablas no se pueden agregar ni eliminar de las publicaciones FOR ALL TABLES." -#: commands/publicationcmds.c:683 +#: commands/publicationcmds.c:660 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "relación «%s» no es parte de la publicación" -#: commands/publicationcmds.c:726 +#: commands/publicationcmds.c:703 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "se ha denegado el permiso para cambiar el dueño de la publicación «%s»" -#: commands/publicationcmds.c:728 +#: commands/publicationcmds.c:705 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "El dueño de una publicación FOR ALL TABLES debe ser un superusuario." -#: commands/schemacmds.c:105 commands/schemacmds.c:281 +#: commands/schemacmds.c:105 commands/schemacmds.c:258 #, c-format msgid "unacceptable schema name \"%s\"" msgstr "el nombre de schema «%s» es inaceptable" -#: commands/schemacmds.c:106 commands/schemacmds.c:282 +#: commands/schemacmds.c:106 commands/schemacmds.c:259 #, c-format msgid "The prefix \"pg_\" is reserved for system schemas." msgstr "El prefijo «pg_» está reservado para esquemas del sistema." @@ -8513,21 +8812,27 @@ msgstr "El prefijo «pg_» está reservado para esquemas del sistema." msgid "schema \"%s\" already exists, skipping" msgstr "el esquema «%s» ya existe, omitiendo" -#: commands/seclabel.c:60 +#: commands/seclabel.c:129 #, c-format msgid "no security label providers have been loaded" msgstr "no se ha cargado ningún proveedor de etiquetas de seguridad" -#: commands/seclabel.c:64 +#: commands/seclabel.c:133 #, c-format msgid "must specify provider when multiple security label providers have been loaded" msgstr "debe especificar un proveedor de etiquetas de seguridad cuando más de uno ha sido cargados" -#: commands/seclabel.c:82 +#: commands/seclabel.c:151 #, c-format msgid "security label provider \"%s\" is not loaded" msgstr "el proveedor de etiquetas de seguridad «%s» no está cargado" +#: commands/seclabel.c:158 +#, fuzzy, c-format +#| msgid "tablespaces are not supported on this platform" +msgid "security labels are not supported for this type of object" +msgstr "tablespaces no están soportados en esta plataforma" + #: commands/sequence.c:140 #, c-format msgid "unlogged sequences are not supported" @@ -8558,1700 +8863,1789 @@ msgstr "lastval no está definido en esta sesión" msgid "setval: value %s is out of bounds for sequence \"%s\" (%s..%s)" msgstr "setval: el valor %s está fuera del rango de la secuencia «%s» (%s..%s)" -#: commands/sequence.c:1360 +#: commands/sequence.c:1359 #, c-format msgid "invalid sequence option SEQUENCE NAME" msgstr "opción de secuencia no válida SEQUENCE NAME" -#: commands/sequence.c:1386 +#: commands/sequence.c:1385 #, c-format msgid "identity column type must be smallint, integer, or bigint" msgstr "el tipo de columna de identidad debe ser smallint, integer o bigint" -#: commands/sequence.c:1387 +#: commands/sequence.c:1386 #, c-format msgid "sequence type must be smallint, integer, or bigint" msgstr "el tipo de secuencia debe ser smallint, integer o bigint" -#: commands/sequence.c:1421 +#: commands/sequence.c:1420 #, c-format msgid "INCREMENT must not be zero" msgstr "INCREMENT no debe ser cero" -#: commands/sequence.c:1474 +#: commands/sequence.c:1473 #, c-format msgid "MAXVALUE (%s) is out of range for sequence data type %s" msgstr "MAXVALUE (%s) está fuera de rango para el tipo de dato de la secuencia %s" -#: commands/sequence.c:1511 +#: commands/sequence.c:1510 #, c-format msgid "MINVALUE (%s) is out of range for sequence data type %s" msgstr "MINVALUE (%s) está fuera de rango para el tipo de dato de la secuencia %s" -#: commands/sequence.c:1525 +#: commands/sequence.c:1524 #, c-format msgid "MINVALUE (%s) must be less than MAXVALUE (%s)" msgstr "MINVALUE (%s) debe ser menor que MAXVALUE (%s)" -#: commands/sequence.c:1552 +#: commands/sequence.c:1551 #, c-format msgid "START value (%s) cannot be less than MINVALUE (%s)" msgstr "el valor START (%s) no puede ser menor que MINVALUE (%s)" -#: commands/sequence.c:1564 +#: commands/sequence.c:1563 #, c-format msgid "START value (%s) cannot be greater than MAXVALUE (%s)" msgstr "el valor START (%s) no puede ser mayor que MAXVALUE (%s)" -#: commands/sequence.c:1594 +#: commands/sequence.c:1593 #, c-format msgid "RESTART value (%s) cannot be less than MINVALUE (%s)" msgstr "el valor RESTART (%s) no puede ser menor que MINVALUE (%s)" -#: commands/sequence.c:1606 +#: commands/sequence.c:1605 #, c-format msgid "RESTART value (%s) cannot be greater than MAXVALUE (%s)" msgstr "el valor RESTART (%s) no puede ser mayor que MAXVALUE (%s)" -#: commands/sequence.c:1621 +#: commands/sequence.c:1620 #, c-format msgid "CACHE (%s) must be greater than zero" msgstr "CACHE (%s) debe ser mayor que cero" -#: commands/sequence.c:1658 +#: commands/sequence.c:1657 #, c-format msgid "invalid OWNED BY option" msgstr "opción OWNED BY no válida" -#: commands/sequence.c:1659 +#: commands/sequence.c:1658 #, c-format msgid "Specify OWNED BY table.column or OWNED BY NONE." msgstr "Especifique OWNED BY tabla.columna o OWNED BY NONE." -#: commands/sequence.c:1684 +#: commands/sequence.c:1683 #, c-format msgid "referenced relation \"%s\" is not a table or foreign table" msgstr "la relación referida «%s» no es una tabla o tabla foránea" -#: commands/sequence.c:1691 +#: commands/sequence.c:1690 #, c-format msgid "sequence must have same owner as table it is linked to" msgstr "la secuencia debe tener el mismo dueño que la tabla a la que está enlazada" -#: commands/sequence.c:1695 +#: commands/sequence.c:1694 #, c-format msgid "sequence must be in same schema as table it is linked to" msgstr "la secuencia debe estar en el mismo esquema que la tabla a la que está enlazada" -#: commands/sequence.c:1717 +#: commands/sequence.c:1716 #, c-format msgid "cannot change ownership of identity sequence" msgstr "no se puede cambiar el dueño de la secuencia de identidad" -#: commands/sequence.c:1718 commands/tablecmds.c:12513 -#: commands/tablecmds.c:15027 +#: commands/sequence.c:1717 commands/tablecmds.c:13216 +#: commands/tablecmds.c:15849 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "La secuencia «%s» está enlazada a la tabla «%s»." -#: commands/statscmds.c:104 commands/statscmds.c:113 +#: commands/statscmds.c:111 commands/statscmds.c:120 tcop/utility.c:1827 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "sólo se permite una relación en CREATE STATISTICS" -#: commands/statscmds.c:131 +#: commands/statscmds.c:138 #, c-format msgid "relation \"%s\" is not a table, foreign table, or materialized view" msgstr "la relación «%s» no es una tabla, tabla foránea o vista materializada" -#: commands/statscmds.c:174 +#: commands/statscmds.c:188 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "el objeto de estadísticas «%s» ya existe, omitiendo" -#: commands/statscmds.c:182 +#: commands/statscmds.c:196 #, c-format msgid "statistics object \"%s\" already exists" msgstr "el objeto de estadísticas «%s» ya existe" -#: commands/statscmds.c:204 commands/statscmds.c:210 +#: commands/statscmds.c:207 #, c-format -msgid "only simple column references are allowed in CREATE STATISTICS" +msgid "cannot have more than %d columns in statistics" +msgstr "no se puede tener más de %d columnas en estadísticas" + +#: commands/statscmds.c:236 +#, fuzzy, c-format +#| msgid "only simple column references are allowed in CREATE STATISTICS" +msgid "only simple column references and expressions are allowed in CREATE STATISTICS" msgstr "sólo se permiten referencias de columnas simples en CREATE STATISTICS" -#: commands/statscmds.c:225 +#: commands/statscmds.c:258 #, c-format msgid "statistics creation on system columns is not supported" msgstr "la creación de estadísticas en columnas de sistema no está soportada" -#: commands/statscmds.c:232 +#: commands/statscmds.c:265 #, c-format msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" msgstr "la columna «%s» no puede ser usado en estadísticas porque su tipo %s no tiene una clase de operadores por omisión para btree" -#: commands/statscmds.c:239 +#: commands/statscmds.c:293 +#, fuzzy, c-format +#| msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" +msgid "expression cannot be used in multivariate statistics because its type %s has no default btree operator class" +msgstr "la columna «%s» no puede ser usado en estadísticas porque su tipo %s no tiene una clase de operadores por omisión para btree" + +#: commands/statscmds.c:314 #, c-format -msgid "cannot have more than %d columns in statistics" -msgstr "no se puede tener más de %d columnas en estadísticas" +msgid "when building statistics on a single expression, statistics kinds may not be specified" +msgstr "" + +#: commands/statscmds.c:343 +#, c-format +msgid "unrecognized statistics kind \"%s\"" +msgstr "tipo de estadísticas «%s» no reconocido" -#: commands/statscmds.c:254 +#: commands/statscmds.c:372 #, c-format msgid "extended statistics require at least 2 columns" msgstr "las estadísticas extendidas requieren al menos 2 columnas" -#: commands/statscmds.c:272 +#: commands/statscmds.c:390 #, c-format msgid "duplicate column name in statistics definition" msgstr "nombre de columna duplicado en definición de estadísticas" -#: commands/statscmds.c:306 -#, c-format -msgid "unrecognized statistics kind \"%s\"" -msgstr "tipo de estadísticas «%s» no reconocido" +#: commands/statscmds.c:425 +#, fuzzy, c-format +#| msgid "duplicate column name in statistics definition" +msgid "duplicate expression in statistics definition" +msgstr "nombre de columna duplicado en definición de estadísticas" -#: commands/statscmds.c:444 commands/tablecmds.c:7385 +#: commands/statscmds.c:606 commands/tablecmds.c:7844 #, c-format msgid "statistics target %d is too low" msgstr "el valor de estadísticas %d es demasiado bajo" -#: commands/statscmds.c:452 commands/tablecmds.c:7393 +#: commands/statscmds.c:614 commands/tablecmds.c:7852 #, c-format msgid "lowering statistics target to %d" msgstr "bajando el valor de estadísticas a %d" -#: commands/statscmds.c:475 +#: commands/statscmds.c:637 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "no existe el objeto de estadísticas «%s.%s», omitiendo" -#: commands/subscriptioncmds.c:181 +#: commands/subscriptioncmds.c:221 #, c-format msgid "unrecognized subscription parameter: \"%s\"" msgstr "parámetro de suscripción no reconocido: «%s»" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:201 -#: commands/subscriptioncmds.c:207 commands/subscriptioncmds.c:226 -#: commands/subscriptioncmds.c:232 +#: commands/subscriptioncmds.c:235 commands/subscriptioncmds.c:241 +#: commands/subscriptioncmds.c:247 commands/subscriptioncmds.c:266 +#: commands/subscriptioncmds.c:272 #, c-format msgid "%s and %s are mutually exclusive options" msgstr "%s y %s son opciones mutuamente excluyentes" #. translator: both %s are strings of the form "option = value" -#: commands/subscriptioncmds.c:239 commands/subscriptioncmds.c:245 +#: commands/subscriptioncmds.c:279 commands/subscriptioncmds.c:285 #, c-format msgid "subscription with %s must also set %s" msgstr "suscripción con %s también debe activar %s" -#: commands/subscriptioncmds.c:287 -#, c-format -msgid "publication name \"%s\" used more than once" -msgstr "nombre de publicación «%s» usado más de una vez" - -#: commands/subscriptioncmds.c:351 +#: commands/subscriptioncmds.c:378 #, c-format msgid "must be superuser to create subscriptions" msgstr "debe ser superusuario para crear suscripciones" -#: commands/subscriptioncmds.c:442 commands/subscriptioncmds.c:530 -#: replication/logical/tablesync.c:857 replication/logical/worker.c:2096 +#: commands/subscriptioncmds.c:471 commands/subscriptioncmds.c:568 +#: replication/logical/tablesync.c:970 replication/logical/worker.c:3098 #, c-format msgid "could not connect to the publisher: %s" msgstr "no se pudo connectar con el editor (publisher): %s" -#: commands/subscriptioncmds.c:484 +#: commands/subscriptioncmds.c:513 #, c-format msgid "created replication slot \"%s\" on publisher" msgstr "se creó el slot de replicación «%s» en el editor (publisher)" #. translator: %s is an SQL ALTER statement -#: commands/subscriptioncmds.c:497 +#: commands/subscriptioncmds.c:526 #, c-format msgid "tables were not subscribed, you will have to run %s to subscribe the tables" msgstr "las tablas no se suscribieron, tendrá que ejecutar %s para suscribir las tablas" -#: commands/subscriptioncmds.c:586 -#, c-format -msgid "table \"%s.%s\" added to subscription \"%s\"" -msgstr "tabla «%s.%s» agregada a suscripción «%s»" - -#: commands/subscriptioncmds.c:610 -#, c-format -msgid "table \"%s.%s\" removed from subscription \"%s\"" -msgstr "tabla «%s.%s» eliminada de suscripción «%s»" - -#: commands/subscriptioncmds.c:682 +#: commands/subscriptioncmds.c:824 #, c-format msgid "cannot set %s for enabled subscription" msgstr "no se puede establecer %s para la suscripción activada" -#: commands/subscriptioncmds.c:717 +#: commands/subscriptioncmds.c:880 #, c-format msgid "cannot enable subscription that does not have a slot name" msgstr "no se puede habilitar la suscripción que no tiene un nombre de slot" -#: commands/subscriptioncmds.c:763 +#: commands/subscriptioncmds.c:932 commands/subscriptioncmds.c:980 #, c-format msgid "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION con actualización no está permitido para las suscripciones desactivadas" -#: commands/subscriptioncmds.c:764 +#: commands/subscriptioncmds.c:933 commands/subscriptioncmds.c:981 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgstr "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." -#: commands/subscriptioncmds.c:782 +#: commands/subscriptioncmds.c:1001 #, c-format msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH no está permitido para las suscripciones desactivadas" -#: commands/subscriptioncmds.c:862 +#: commands/subscriptioncmds.c:1089 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "no existe la suscripción «%s», omitiendo" -#: commands/subscriptioncmds.c:987 -#, c-format -msgid "could not connect to publisher when attempting to drop the replication slot \"%s\"" -msgstr "no se pudo conectar con el editor (publisher) al intentar eliminar el slot \"%s\"" - -#: commands/subscriptioncmds.c:989 commands/subscriptioncmds.c:1004 -#: replication/logical/tablesync.c:906 replication/logical/tablesync.c:928 -#, c-format -msgid "The error was: %s" -msgstr "El error fue: %s" - -#. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:991 -#, c-format -msgid "Use %s to disassociate the subscription from the slot." -msgstr "Use %s para disociar la suscripción del slot." - -#: commands/subscriptioncmds.c:1002 -#, c-format -msgid "could not drop the replication slot \"%s\" on publisher" -msgstr "no se pudo eliminar el slot de replicación «%s» en editor (publisher)" - -#: commands/subscriptioncmds.c:1007 +#: commands/subscriptioncmds.c:1341 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "eliminando el slot de replicación «%s» en editor (publisher)" -#: commands/subscriptioncmds.c:1044 +#: commands/subscriptioncmds.c:1350 commands/subscriptioncmds.c:1357 +#, fuzzy, c-format +#| msgid "could not drop the replication slot \"%s\" on publisher" +msgid "could not drop replication slot \"%s\" on publisher: %s" +msgstr "no se pudo eliminar el slot de replicación «%s» en editor (publisher)" + +#: commands/subscriptioncmds.c:1391 #, c-format msgid "permission denied to change owner of subscription \"%s\"" msgstr "se ha denegado el permiso para cambiar el dueño de la suscripción «%s»" -#: commands/subscriptioncmds.c:1046 +#: commands/subscriptioncmds.c:1393 #, c-format msgid "The owner of a subscription must be a superuser." msgstr "El dueño de una suscripción debe ser un superusuario." -#: commands/subscriptioncmds.c:1161 +#: commands/subscriptioncmds.c:1508 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "no se pudo recibir la lista de tablas replicadas desde el editor (publisher): %s" -#: commands/tablecmds.c:228 commands/tablecmds.c:270 +#: commands/subscriptioncmds.c:1572 +#, fuzzy, c-format +#| msgid "could not connect to publisher when attempting to drop the replication slot \"%s\"" +msgid "could not connect to publisher when attempting to drop replication slot \"%s\": %s" +msgstr "no se pudo conectar con el editor (publisher) al intentar eliminar el slot \"%s\"" + +#. translator: %s is an SQL ALTER command +#: commands/subscriptioncmds.c:1575 +#, c-format +msgid "Use %s to disassociate the subscription from the slot." +msgstr "Use %s para disociar la suscripción del slot." + +#: commands/subscriptioncmds.c:1605 +#, c-format +msgid "publication name \"%s\" used more than once" +msgstr "nombre de publicación «%s» usado más de una vez" + +#: commands/subscriptioncmds.c:1649 +#, fuzzy, c-format +#| msgid "publication \"%s\" already exists" +msgid "publication \"%s\" is already in subscription \"%s\"" +msgstr "la publicación «%s» ya existe" + +#: commands/subscriptioncmds.c:1663 +#, fuzzy, c-format +#| msgid "publication of %s in publication %s" +msgid "publication \"%s\" is not in subscription \"%s\"" +msgstr "publicación de %s en la publicación %s" + +#: commands/subscriptioncmds.c:1674 +#, fuzzy, c-format +#| msgid "relation \"%s\" is not part of the publication" +msgid "subscription must contain at least one publication" +msgstr "relación «%s» no es parte de la publicación" + +#: commands/tablecmds.c:241 commands/tablecmds.c:283 #, c-format msgid "table \"%s\" does not exist" msgstr "no existe la tabla «%s»" -#: commands/tablecmds.c:229 commands/tablecmds.c:271 +#: commands/tablecmds.c:242 commands/tablecmds.c:284 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "la tabla «%s» no existe, omitiendo" -#: commands/tablecmds.c:231 commands/tablecmds.c:273 +#: commands/tablecmds.c:244 commands/tablecmds.c:286 msgid "Use DROP TABLE to remove a table." msgstr "Use DROP TABLE para eliminar una tabla." -#: commands/tablecmds.c:234 +#: commands/tablecmds.c:247 #, c-format msgid "sequence \"%s\" does not exist" msgstr "no existe la secuencia «%s»" -#: commands/tablecmds.c:235 +#: commands/tablecmds.c:248 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "la secuencia «%s» no existe, omitiendo" -#: commands/tablecmds.c:237 +#: commands/tablecmds.c:250 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "Use DROP SEQUENCE para eliminar una secuencia." -#: commands/tablecmds.c:240 +#: commands/tablecmds.c:253 #, c-format msgid "view \"%s\" does not exist" msgstr "no existe la vista «%s»" -#: commands/tablecmds.c:241 +#: commands/tablecmds.c:254 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "la vista «%s» no existe, omitiendo" -#: commands/tablecmds.c:243 +#: commands/tablecmds.c:256 msgid "Use DROP VIEW to remove a view." msgstr "Use DROP VIEW para eliminar una vista." -#: commands/tablecmds.c:246 +#: commands/tablecmds.c:259 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "no existe la vista materializada «%s»" -#: commands/tablecmds.c:247 +#: commands/tablecmds.c:260 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "la vista materializada «%s» no existe, omitiendo" -#: commands/tablecmds.c:249 +#: commands/tablecmds.c:262 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Use DROP MATERIALIZED VIEW para eliminar una vista materializada." -#: commands/tablecmds.c:252 commands/tablecmds.c:276 commands/tablecmds.c:17200 -#: parser/parse_utilcmd.c:2172 +#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18270 +#: parser/parse_utilcmd.c:2257 #, c-format msgid "index \"%s\" does not exist" msgstr "no existe el índice «%s»" -#: commands/tablecmds.c:253 commands/tablecmds.c:277 +#: commands/tablecmds.c:266 commands/tablecmds.c:290 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "el índice «%s» no existe, omitiendo" -#: commands/tablecmds.c:255 commands/tablecmds.c:279 +#: commands/tablecmds.c:268 commands/tablecmds.c:292 msgid "Use DROP INDEX to remove an index." msgstr "Use DROP INDEX para eliminar un índice." -#: commands/tablecmds.c:260 +#: commands/tablecmds.c:273 #, c-format msgid "\"%s\" is not a type" msgstr "«%s» no es un tipo" -#: commands/tablecmds.c:261 +#: commands/tablecmds.c:274 msgid "Use DROP TYPE to remove a type." msgstr "Use DROP TYPE para eliminar un tipo." -#: commands/tablecmds.c:264 commands/tablecmds.c:12352 -#: commands/tablecmds.c:14807 +#: commands/tablecmds.c:277 commands/tablecmds.c:13055 +#: commands/tablecmds.c:15548 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "no existe la tabla foránea «%s»" -#: commands/tablecmds.c:265 +#: commands/tablecmds.c:278 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "la tabla foránea «%s» no existe, omitiendo" -#: commands/tablecmds.c:267 +#: commands/tablecmds.c:280 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Use DROP FOREIGN TABLE para eliminar una tabla foránea." -#: commands/tablecmds.c:620 +#: commands/tablecmds.c:664 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT sólo puede ser usado en tablas temporales" -#: commands/tablecmds.c:651 +#: commands/tablecmds.c:695 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "no se puede crear una tabla temporal dentro una operación restringida por seguridad" -#: commands/tablecmds.c:687 commands/tablecmds.c:13711 +#: commands/tablecmds.c:731 commands/tablecmds.c:14339 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "se heredaría de la relación «%s» más de una vez" -#: commands/tablecmds.c:868 +#: commands/tablecmds.c:924 #, c-format msgid "specifying a table access method is not supported on a partitioned table" msgstr "especificar un método de acceso de tablas no está soportado en tablas particionadas." -#: commands/tablecmds.c:964 +#: commands/tablecmds.c:1020 #, c-format msgid "\"%s\" is not partitioned" msgstr "«%s» no está particionada" -#: commands/tablecmds.c:1058 +#: commands/tablecmds.c:1115 #, c-format msgid "cannot partition using more than %d columns" msgstr "no se puede particionar usando más de %d columnas" -#: commands/tablecmds.c:1114 +#: commands/tablecmds.c:1171 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "no se puede crear una partición foránea en la tabla particionada «%s»" -#: commands/tablecmds.c:1116 +#: commands/tablecmds.c:1173 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "La tabla «%s» contiene índices que son únicos." -#: commands/tablecmds.c:1279 +#: commands/tablecmds.c:1336 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY no soporta eliminar múltiples objetos" -#: commands/tablecmds.c:1283 +#: commands/tablecmds.c:1340 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY no soporta CASCADE" -#: commands/tablecmds.c:1384 +#: commands/tablecmds.c:1441 #, c-format msgid "cannot drop partitioned index \"%s\" concurrently" msgstr "no se puede eliminar el índice particionado «%s» concurrentemente" -#: commands/tablecmds.c:1654 +#: commands/tablecmds.c:1713 #, c-format msgid "cannot truncate only a partitioned table" msgstr "no se puede truncar ONLY una tabla particionada" -#: commands/tablecmds.c:1655 +#: commands/tablecmds.c:1714 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "No especifique la opción ONLY, o ejecute TRUNCATE ONLY en las particiones directamente." -#: commands/tablecmds.c:1724 +#: commands/tablecmds.c:1787 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "truncando además la tabla «%s»" -#: commands/tablecmds.c:2031 +#: commands/tablecmds.c:2146 +#, fuzzy, c-format +#| msgid "cannot update foreign table \"%s\"" +msgid "cannot truncate foreign table \"%s\"" +msgstr "no se puede actualizar la tabla foránea «%s»" + +#: commands/tablecmds.c:2195 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "no se pueden truncar tablas temporales de otras sesiones" -#: commands/tablecmds.c:2259 commands/tablecmds.c:13608 +#: commands/tablecmds.c:2457 commands/tablecmds.c:14236 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "no se puede heredar de la tabla particionada «%s»" -#: commands/tablecmds.c:2264 +#: commands/tablecmds.c:2462 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "no se puede heredar de la partición «%s»" -#: commands/tablecmds.c:2272 parser/parse_utilcmd.c:2402 -#: parser/parse_utilcmd.c:2544 +#: commands/tablecmds.c:2470 parser/parse_utilcmd.c:2487 +#: parser/parse_utilcmd.c:2629 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "la relación heredada «%s» no es una tabla o tabla foránea" -#: commands/tablecmds.c:2284 +#: commands/tablecmds.c:2482 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "no se puede crear una relación temporal como partición de la relación permanente «%s»" -#: commands/tablecmds.c:2293 commands/tablecmds.c:13587 +#: commands/tablecmds.c:2491 commands/tablecmds.c:14215 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "no se puede heredar de la tabla temporal «%s»" -#: commands/tablecmds.c:2303 commands/tablecmds.c:13595 +#: commands/tablecmds.c:2501 commands/tablecmds.c:14223 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "no se puede heredar de una tabla temporal de otra sesión" -#: commands/tablecmds.c:2357 +#: commands/tablecmds.c:2555 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "mezclando múltiples definiciones heredadas de la columna «%s»" -#: commands/tablecmds.c:2365 +#: commands/tablecmds.c:2563 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "columna heredada «%s» tiene conflicto de tipos" -#: commands/tablecmds.c:2367 commands/tablecmds.c:2390 -#: commands/tablecmds.c:2639 commands/tablecmds.c:2669 -#: parser/parse_coerce.c:1935 parser/parse_coerce.c:1955 -#: parser/parse_coerce.c:1975 parser/parse_coerce.c:2030 -#: parser/parse_coerce.c:2107 parser/parse_coerce.c:2141 -#: parser/parse_param.c:218 +#: commands/tablecmds.c:2565 commands/tablecmds.c:2588 +#: commands/tablecmds.c:2605 commands/tablecmds.c:2861 +#: commands/tablecmds.c:2891 commands/tablecmds.c:2905 +#: parser/parse_coerce.c:2090 parser/parse_coerce.c:2110 +#: parser/parse_coerce.c:2130 parser/parse_coerce.c:2150 +#: parser/parse_coerce.c:2205 parser/parse_coerce.c:2238 +#: parser/parse_coerce.c:2316 parser/parse_coerce.c:2348 +#: parser/parse_coerce.c:2382 parser/parse_coerce.c:2402 +#: parser/parse_param.c:227 #, c-format msgid "%s versus %s" msgstr "%s versus %s" -#: commands/tablecmds.c:2376 +#: commands/tablecmds.c:2574 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "columna heredada «%s» tiene conflicto de ordenamiento (collation)" -#: commands/tablecmds.c:2378 commands/tablecmds.c:2651 -#: commands/tablecmds.c:6110 +#: commands/tablecmds.c:2576 commands/tablecmds.c:2873 +#: commands/tablecmds.c:6503 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "«%s» versus «%s»" -#: commands/tablecmds.c:2388 +#: commands/tablecmds.c:2586 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "columna heredada «%s» tiene conflicto de parámetros de almacenamiento" -#: commands/tablecmds.c:2404 +#: commands/tablecmds.c:2603 commands/tablecmds.c:2903 +#, fuzzy, c-format +#| msgid "column \"%s\" has a collation conflict" +msgid "column \"%s\" has a compression method conflict" +msgstr "la columna «%s» tiene conflicto de ordenamientos (collation)" + +#: commands/tablecmds.c:2618 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "columna heredada «%s» tiene conflicto de generación" -#: commands/tablecmds.c:2490 commands/tablecmds.c:2545 -#: commands/tablecmds.c:11157 parser/parse_utilcmd.c:1252 -#: parser/parse_utilcmd.c:1295 parser/parse_utilcmd.c:1703 -#: parser/parse_utilcmd.c:1812 +#: commands/tablecmds.c:2712 commands/tablecmds.c:2767 +#: commands/tablecmds.c:11784 parser/parse_utilcmd.c:1301 +#: parser/parse_utilcmd.c:1344 parser/parse_utilcmd.c:1752 +#: parser/parse_utilcmd.c:1860 #, c-format msgid "cannot convert whole-row table reference" msgstr "no se puede convertir una referencia a la fila completa (whole-row)" -#: commands/tablecmds.c:2491 parser/parse_utilcmd.c:1253 +#: commands/tablecmds.c:2713 parser/parse_utilcmd.c:1302 #, c-format msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." msgstr "La expresión de generación para la columna «%s» contiene una referencia a la fila completa (whole-row) de la tabla «%s»." -#: commands/tablecmds.c:2546 parser/parse_utilcmd.c:1296 +#: commands/tablecmds.c:2768 parser/parse_utilcmd.c:1345 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "La restricción «%s» contiene una referencia a la fila completa (whole-row) de la tabla «%s»." -#: commands/tablecmds.c:2625 +#: commands/tablecmds.c:2847 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "mezclando la columna «%s» con la definición heredada" -#: commands/tablecmds.c:2629 +#: commands/tablecmds.c:2851 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "moviendo y mezclando la columna «%s» con la definición heredada" -#: commands/tablecmds.c:2630 +#: commands/tablecmds.c:2852 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "La columna especificada por el usuario fue movida a la posición de la columna heredada." -#: commands/tablecmds.c:2637 +#: commands/tablecmds.c:2859 #, c-format msgid "column \"%s\" has a type conflict" msgstr "la columna «%s» tiene conflicto de tipos" -#: commands/tablecmds.c:2649 +#: commands/tablecmds.c:2871 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "la columna «%s» tiene conflicto de ordenamientos (collation)" -#: commands/tablecmds.c:2667 +#: commands/tablecmds.c:2889 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "la columna «%s» tiene conflicto de parámetros de almacenamiento" -#: commands/tablecmds.c:2695 +#: commands/tablecmds.c:2930 #, c-format msgid "child column \"%s\" specifies generation expression" msgstr "la columna hija «%s» especifica una expresión de generación de columna" -#: commands/tablecmds.c:2697 +#: commands/tablecmds.c:2932 #, c-format msgid "Omit the generation expression in the definition of the child table column to inherit the generation expression from the parent table." msgstr "Omita la expresión de generación en la definición de la columna en la tabla hija para heredar la expresión de generación de la tabla padre." -#: commands/tablecmds.c:2701 +#: commands/tablecmds.c:2936 #, c-format msgid "column \"%s\" inherits from generated column but specifies default" msgstr "la columna «%s» hereda de una columna generada pero especifica un valor por omisión" -#: commands/tablecmds.c:2706 +#: commands/tablecmds.c:2941 #, c-format msgid "column \"%s\" inherits from generated column but specifies identity" msgstr "la columna «%s» hereda de una columna generada pero especifica una identidad" -#: commands/tablecmds.c:2815 +#: commands/tablecmds.c:3050 #, c-format msgid "column \"%s\" inherits conflicting generation expressions" msgstr "la columna «%s» hereda expresiones de generación en conflicto" -#: commands/tablecmds.c:2820 +#: commands/tablecmds.c:3055 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "la columna «%s» hereda valores por omisión no coincidentes" -#: commands/tablecmds.c:2822 +#: commands/tablecmds.c:3057 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Para resolver el conflicto, indique explícitamente un valor por omisión." -#: commands/tablecmds.c:2868 +#: commands/tablecmds.c:3103 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "la restricción «check» «%s» aparece más de una vez con diferentes expresiones" -#: commands/tablecmds.c:3045 +#: commands/tablecmds.c:3316 #, c-format -msgid "cannot rename column of typed table" +msgid "cannot move temporary tables of other sessions" +msgstr "no se pueden mover tablas temporales de otras sesiones" + +#: commands/tablecmds.c:3386 +#, c-format +msgid "cannot rename column of typed table" msgstr "no se puede cambiar el nombre a una columna de una tabla tipada" -#: commands/tablecmds.c:3064 +#: commands/tablecmds.c:3405 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "«%s» no es una tabla, vista, vista materializada, tipo compuesto, índice o tabla foránea" -#: commands/tablecmds.c:3158 +#: commands/tablecmds.c:3499 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "debe cambiar el nombre a la columna heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:3190 +#: commands/tablecmds.c:3531 #, c-format msgid "cannot rename system column \"%s\"" msgstr "no se puede cambiar el nombre a la columna de sistema «%s»" -#: commands/tablecmds.c:3205 +#: commands/tablecmds.c:3546 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "no se puede cambiar el nombre a la columna heredada «%s»" -#: commands/tablecmds.c:3357 +#: commands/tablecmds.c:3698 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "debe cambiar el nombre a la restricción heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:3364 +#: commands/tablecmds.c:3705 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "no se puede cambiar el nombre a la restricción heredada «%s»" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3597 +#: commands/tablecmds.c:3938 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "no se puede hacer %s en «%s» porque está siendo usada por consultas activas en esta sesión" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3606 +#: commands/tablecmds.c:3947 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "no se puede hacer %s en «%s» porque tiene eventos de disparador pendientes" -#: commands/tablecmds.c:4237 commands/tablecmds.c:4252 +#: commands/tablecmds.c:4411 +#, fuzzy, c-format +#| msgid "cannot convert partition \"%s\" to a view" +msgid "cannot alter partition \"%s\" with an incomplete detach" +msgstr "no se puede convertir la partición «%s» en vista" + +#: commands/tablecmds.c:4413 +#, c-format +msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." +msgstr "" + +#: commands/tablecmds.c:4605 commands/tablecmds.c:4620 #, c-format msgid "cannot change persistence setting twice" msgstr "no se puede cambiar la opción de persistencia dos veces" -#: commands/tablecmds.c:4969 +#: commands/tablecmds.c:5363 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "no se puede reescribir la relación de sistema «%s»" -#: commands/tablecmds.c:4975 +#: commands/tablecmds.c:5369 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "no se puede reescribir la tabla «%s» que es usada como tabla de catálogo" -#: commands/tablecmds.c:4985 +#: commands/tablecmds.c:5379 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "no se puede reescribir tablas temporales de otras sesiones" -#: commands/tablecmds.c:5274 -#, c-format -msgid "rewriting table \"%s\"" -msgstr "reescribiendo tabla «%s»" - -#: commands/tablecmds.c:5278 -#, c-format -msgid "verifying table \"%s\"" -msgstr "verificando tabla «%s»" - -#: commands/tablecmds.c:5443 +#: commands/tablecmds.c:5837 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "la columna «%s» de la relación «%s» contiene valores null" -#: commands/tablecmds.c:5460 +#: commands/tablecmds.c:5854 #, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" msgstr "la restricción check «%s» de la relación «%s» es violada por alguna fila" -#: commands/tablecmds.c:5479 partitioning/partbounds.c:3235 +#: commands/tablecmds.c:5873 partitioning/partbounds.c:3282 #, c-format msgid "updated partition constraint for default partition \"%s\" would be violated by some row" msgstr "la restricción de partición actualizada para la partición default «%s» sería violada por alguna fila" -#: commands/tablecmds.c:5485 +#: commands/tablecmds.c:5879 #, c-format msgid "partition constraint of relation \"%s\" is violated by some row" msgstr "la restricción de partición de la relación «%s» es violada por alguna fila" -#: commands/tablecmds.c:5632 commands/trigger.c:1200 commands/trigger.c:1306 +#: commands/tablecmds.c:6027 commands/trigger.c:1265 commands/trigger.c:1371 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "«%s» no es una tabla, vista o tabla foránea" -#: commands/tablecmds.c:5635 +#: commands/tablecmds.c:6030 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "«%s» no es una tabla, vista, vista materializada, o índice" -#: commands/tablecmds.c:5641 +#: commands/tablecmds.c:6036 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "«%s» no es una tabla, vista materializada, o índice" -#: commands/tablecmds.c:5644 +#: commands/tablecmds.c:6039 #, c-format msgid "\"%s\" is not a table, materialized view, or foreign table" msgstr "«%s» no es una tabla, vista materializada o tabla foránea" -#: commands/tablecmds.c:5647 +#: commands/tablecmds.c:6042 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "«%s» no es una tabla o tabla foránea" -#: commands/tablecmds.c:5650 +#: commands/tablecmds.c:6045 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "«%s» no es una tabla, tipo compuesto, o tabla foránea" -#: commands/tablecmds.c:5653 +#: commands/tablecmds.c:6048 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "«%s» no es una tabla, vista materializada, índice o tabla foránea" -#: commands/tablecmds.c:5663 +#: commands/tablecmds.c:6058 #, c-format msgid "\"%s\" is of the wrong type" msgstr "«%s» es tipo equivocado" -#: commands/tablecmds.c:5870 commands/tablecmds.c:5877 +#: commands/tablecmds.c:6261 commands/tablecmds.c:6268 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "no se puede alterar el tipo «%s» porque la columna «%s.%s» lo usa" -#: commands/tablecmds.c:5884 +#: commands/tablecmds.c:6275 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "no se puede alterar la tabla foránea «%s» porque la columna «%s.%s» usa su tipo de registro" -#: commands/tablecmds.c:5891 +#: commands/tablecmds.c:6282 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "no se puede alterar la tabla «%s» porque la columna «%s.%s» usa su tipo de registro" -#: commands/tablecmds.c:5947 +#: commands/tablecmds.c:6338 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "no se puede cambiar el tipo «%s» porque es el tipo de una tabla tipada" -#: commands/tablecmds.c:5949 +#: commands/tablecmds.c:6340 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Use ALTER ... CASCADE para eliminar además las tablas tipadas." -#: commands/tablecmds.c:5995 +#: commands/tablecmds.c:6386 #, c-format msgid "type %s is not a composite type" msgstr "el tipo %s no es un tipo compuesto" -#: commands/tablecmds.c:6022 +#: commands/tablecmds.c:6413 #, c-format msgid "cannot add column to typed table" msgstr "no se puede agregar una columna a una tabla tipada" -#: commands/tablecmds.c:6073 +#: commands/tablecmds.c:6466 #, c-format msgid "cannot add column to a partition" msgstr "no se puede agregar una columna a una partición" -#: commands/tablecmds.c:6102 commands/tablecmds.c:13838 +#: commands/tablecmds.c:6495 commands/tablecmds.c:14466 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "la tabla hija «%s» tiene un tipo diferente para la columna «%s»" -#: commands/tablecmds.c:6108 commands/tablecmds.c:13845 +#: commands/tablecmds.c:6501 commands/tablecmds.c:14473 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "la tabla hija «%s» tiene un ordenamiento (collation) diferente para la columna «%s»" -#: commands/tablecmds.c:6122 +#: commands/tablecmds.c:6515 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "mezclando la definición de la columna «%s» en la tabla hija «%s»" -#: commands/tablecmds.c:6165 +#: commands/tablecmds.c:6558 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "no se puede agregar una columna de identidad recursivamente a una tabla que tiene tablas hijas" -#: commands/tablecmds.c:6402 +#: commands/tablecmds.c:6810 #, c-format msgid "column must be added to child tables too" msgstr "la columna debe ser agregada a las tablas hijas también" -#: commands/tablecmds.c:6480 +#: commands/tablecmds.c:6888 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "la columna «%s» de la relación «%s» ya existe, omitiendo" -#: commands/tablecmds.c:6487 +#: commands/tablecmds.c:6895 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "ya existe la columna «%s» en la relación «%s»" -#: commands/tablecmds.c:6553 commands/tablecmds.c:10795 +#: commands/tablecmds.c:6961 commands/tablecmds.c:11422 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "no se pueden eliminar restricciones sólo de la tabla particionada cuando existen particiones" -#: commands/tablecmds.c:6554 commands/tablecmds.c:6823 -#: commands/tablecmds.c:7803 commands/tablecmds.c:10796 +#: commands/tablecmds.c:6962 commands/tablecmds.c:7266 +#: commands/tablecmds.c:8287 commands/tablecmds.c:11423 #, c-format msgid "Do not specify the ONLY keyword." msgstr "No especifique la opción ONLY." -#: commands/tablecmds.c:6591 commands/tablecmds.c:6749 -#: commands/tablecmds.c:6891 commands/tablecmds.c:7005 -#: commands/tablecmds.c:7099 commands/tablecmds.c:7158 -#: commands/tablecmds.c:7260 commands/tablecmds.c:7426 -#: commands/tablecmds.c:7496 commands/tablecmds.c:7589 -#: commands/tablecmds.c:10950 commands/tablecmds.c:12375 +#: commands/tablecmds.c:6999 commands/tablecmds.c:7192 +#: commands/tablecmds.c:7334 commands/tablecmds.c:7448 +#: commands/tablecmds.c:7542 commands/tablecmds.c:7601 +#: commands/tablecmds.c:7719 commands/tablecmds.c:7885 +#: commands/tablecmds.c:7955 commands/tablecmds.c:8110 +#: commands/tablecmds.c:11577 commands/tablecmds.c:13078 +#: commands/tablecmds.c:15640 #, c-format msgid "cannot alter system column \"%s\"" msgstr "no se puede alterar columna de sistema «%s»" -#: commands/tablecmds.c:6597 commands/tablecmds.c:6897 +#: commands/tablecmds.c:7005 commands/tablecmds.c:7340 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "la columna «%s» en la relación «%s» es una columna de identidad" -#: commands/tablecmds.c:6633 +#: commands/tablecmds.c:7041 #, c-format msgid "column \"%s\" is in a primary key" msgstr "la columna «%s» está en la llave primaria" -#: commands/tablecmds.c:6655 +#: commands/tablecmds.c:7063 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "columna «%s» está marcada NOT NULL en la tabla padre" -#: commands/tablecmds.c:6820 commands/tablecmds.c:8262 +#: commands/tablecmds.c:7263 commands/tablecmds.c:8770 #, c-format msgid "constraint must be added to child tables too" msgstr "la restricción debe ser agregada a las tablas hijas también" -#: commands/tablecmds.c:6821 +#: commands/tablecmds.c:7264 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "La columna «%s» de la relación «%s» no está previamente marcada NOT NULL." -#: commands/tablecmds.c:6856 -#, c-format -#| msgid "existing constraints on column \"%s.%s\" are sufficient to prove that it does not contain nulls" -msgid "existing constraints on column \"%s\".\"%s\" are sufficient to prove that it does not contain nulls" -msgstr "las restricciones existentes en la columna «%s.%s» son suficientes para demostrar que no contiene nulos" - -#: commands/tablecmds.c:6899 +#: commands/tablecmds.c:7342 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY en su lugar." -#: commands/tablecmds.c:6904 +#: commands/tablecmds.c:7347 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "la columna «%s» en la relación «%s» es una columna generada" -#: commands/tablecmds.c:6907 +#: commands/tablecmds.c:7350 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." msgstr "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION en su lugar." -#: commands/tablecmds.c:7016 +#: commands/tablecmds.c:7459 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "la columna «%s» en la relación «%s» debe ser declarada NOT NULL antes de que una identidad pueda agregarse" -#: commands/tablecmds.c:7022 +#: commands/tablecmds.c:7465 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "la columna «%s» en la relación «%s» ya es una columna de identidad" -#: commands/tablecmds.c:7028 +#: commands/tablecmds.c:7471 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "la columna «%s» en la relación «%s» ya tiene un valor por omisión" -#: commands/tablecmds.c:7105 commands/tablecmds.c:7166 +#: commands/tablecmds.c:7548 commands/tablecmds.c:7609 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "la columna «%s» en la relación «%s» no es una columna identidad" -#: commands/tablecmds.c:7171 +#: commands/tablecmds.c:7614 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "la columna «%s» de la relación «%s» no es una columna identidad, omitiendo" -#: commands/tablecmds.c:7230 +#: commands/tablecmds.c:7667 +#, fuzzy, c-format +#| msgid "column must be added to child tables too" +msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" +msgstr "la columna debe ser agregada a las tablas hijas también" + +#: commands/tablecmds.c:7689 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "no se puede eliminar la expresión de generación de una columna heredada" -#: commands/tablecmds.c:7268 +#: commands/tablecmds.c:7727 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "la columna «%s» en la relación «%s» no es una columna generada almacenada" -#: commands/tablecmds.c:7273 +#: commands/tablecmds.c:7732 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "la columna «%s» de la relación «%s» no es una columna generada almacenada, omitiendo" -#: commands/tablecmds.c:7373 +#: commands/tablecmds.c:7832 #, c-format msgid "cannot refer to non-index column by number" msgstr "no se puede referir a columnas que no son de índice por número" -#: commands/tablecmds.c:7416 +#: commands/tablecmds.c:7875 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "no existe la columna número %d en la relación «%s»" -#: commands/tablecmds.c:7435 +#: commands/tablecmds.c:7894 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "no se puede alterar estadísticas en la columna incluida «%s» del índice «%s»" -#: commands/tablecmds.c:7440 +#: commands/tablecmds.c:7899 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "no se puede alterar estadísticas en la columna no-de-expresión «%s» del índice «%s»" -#: commands/tablecmds.c:7442 +#: commands/tablecmds.c:7901 #, c-format msgid "Alter statistics on table column instead." msgstr "Altere las estadísticas en la columna de la tabla en su lugar." -#: commands/tablecmds.c:7569 +#: commands/tablecmds.c:8090 #, c-format msgid "invalid storage type \"%s\"" msgstr "tipo de almacenamiento no válido «%s»" -#: commands/tablecmds.c:7601 +#: commands/tablecmds.c:8122 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "el tipo de datos %s de la columna sólo puede tener almacenamiento PLAIN" -#: commands/tablecmds.c:7683 +#: commands/tablecmds.c:8166 #, c-format msgid "cannot drop column from typed table" msgstr "no se pueden eliminar columnas de una tabla tipada" -#: commands/tablecmds.c:7742 +#: commands/tablecmds.c:8225 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "no existe la columna «%s» en la relación «%s», omitiendo" -#: commands/tablecmds.c:7755 +#: commands/tablecmds.c:8238 #, c-format msgid "cannot drop system column \"%s\"" msgstr "no se puede eliminar la columna de sistema «%s»" -#: commands/tablecmds.c:7765 +#: commands/tablecmds.c:8248 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "no se puede eliminar la columna heredada «%s»" -#: commands/tablecmds.c:7778 +#: commands/tablecmds.c:8261 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "no se puede eliminar la columna «%s» porque es parte de la llave de partición de la relación «%s»" -#: commands/tablecmds.c:7802 +#: commands/tablecmds.c:8286 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "no se pueden eliminar columnas sólo de una tabla particionada cuando existe particiones" -#: commands/tablecmds.c:7983 +#: commands/tablecmds.c:8490 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX no está soportado en tablas particionadas" -#: commands/tablecmds.c:8008 +#: commands/tablecmds.c:8515 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX renombrará el índice «%s» a «%s»" -#: commands/tablecmds.c:8342 +#: commands/tablecmds.c:8850 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "no se puede usar ONLY para una llave foránea en la tabla particionada «%s» haciendo referencia a la relación «%s»" -#: commands/tablecmds.c:8348 +#: commands/tablecmds.c:8856 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "no se puede agregar una llave foránea NOT VALID a la tabla particionada «%s» haciendo referencia a la relación «%s»" -#: commands/tablecmds.c:8351 +#: commands/tablecmds.c:8859 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Esta característica no está aún soportada en tablas particionadas." -#: commands/tablecmds.c:8358 commands/tablecmds.c:8763 +#: commands/tablecmds.c:8866 commands/tablecmds.c:9271 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "la relación referida «%s» no es una tabla" -#: commands/tablecmds.c:8381 +#: commands/tablecmds.c:8889 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "las restricciones en tablas permanentes sólo pueden hacer referencia a tablas permanentes" -#: commands/tablecmds.c:8388 +#: commands/tablecmds.c:8896 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "las restricciones en tablas «unlogged» sólo pueden hacer referencia a tablas permanentes o «unlogged»" -#: commands/tablecmds.c:8394 +#: commands/tablecmds.c:8902 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "las restricciones en tablas temporales sólo pueden hacer referencia a tablas temporales" -#: commands/tablecmds.c:8398 +#: commands/tablecmds.c:8906 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "las restricciones en tablas temporales sólo pueden hacer referencia a tablas temporales de esta sesión" -#: commands/tablecmds.c:8464 commands/tablecmds.c:8470 +#: commands/tablecmds.c:8972 commands/tablecmds.c:8978 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "acción %s no válida para restricción de llave foránea que contiene columnas generadas" -#: commands/tablecmds.c:8486 +#: commands/tablecmds.c:8994 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "el número de columnas referidas en la llave foránea no coincide con el número de columnas de referencia" -#: commands/tablecmds.c:8593 +#: commands/tablecmds.c:9101 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "la restricción de llave foránea «%s» no puede ser implementada" -#: commands/tablecmds.c:8595 +#: commands/tablecmds.c:9103 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Las columnas llave «%s» y «%s» son de tipos incompatibles: %s y %s" -#: commands/tablecmds.c:8958 commands/tablecmds.c:9351 -#: parser/parse_utilcmd.c:764 parser/parse_utilcmd.c:893 +#: commands/tablecmds.c:9466 commands/tablecmds.c:9859 +#: parser/parse_utilcmd.c:796 parser/parse_utilcmd.c:925 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "las restricciones de llave foránea no están soportadas en tablas foráneas" -#: commands/tablecmds.c:9717 commands/tablecmds.c:9880 -#: commands/tablecmds.c:10752 commands/tablecmds.c:10827 +#: commands/tablecmds.c:10226 commands/tablecmds.c:10504 +#: commands/tablecmds.c:11379 commands/tablecmds.c:11454 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "no existe la restricción «%s» en la relación «%s»" -#: commands/tablecmds.c:9724 +#: commands/tablecmds.c:10233 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "la restricción «%s» de la relación «%s» no es una restriccion de llave foránea" -#: commands/tablecmds.c:9888 +#: commands/tablecmds.c:10271 +#, fuzzy, c-format +#| msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" +msgid "cannot alter constraint \"%s\" on relation \"%s\"" +msgstr "no se puede eliminar la restricción «%s» heredada de la relación «%s»" + +#: commands/tablecmds.c:10274 +#, fuzzy, c-format +#| msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" +msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." +msgstr "la restricción «%s» está en conflicto con la restricción heredada de la relación «%s»" + +#: commands/tablecmds.c:10276 +#, c-format +msgid "You may alter the constraint it derives from, instead." +msgstr "" + +#: commands/tablecmds.c:10512 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "la restricción «%s» de la relación «%s» no es una llave foránea o restricción «check»" -#: commands/tablecmds.c:9966 +#: commands/tablecmds.c:10590 #, c-format msgid "constraint must be validated on child tables too" msgstr "la restricción debe ser validada en las tablas hijas también" -#: commands/tablecmds.c:10050 +#: commands/tablecmds.c:10674 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "no existe la columna «%s» referida en la llave foránea" -#: commands/tablecmds.c:10055 +#: commands/tablecmds.c:10679 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "no se puede tener más de %d columnas en una llave foránea" -#: commands/tablecmds.c:10120 +#: commands/tablecmds.c:10744 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "no se puede usar una llave primaria postergable para la tabla referenciada «%s»" -#: commands/tablecmds.c:10137 +#: commands/tablecmds.c:10761 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "no hay llave primaria para la tabla referida «%s»" -#: commands/tablecmds.c:10202 +#: commands/tablecmds.c:10826 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "la lista de columnas referidas en una llave foránea no debe contener duplicados" -#: commands/tablecmds.c:10296 +#: commands/tablecmds.c:10920 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "no se puede usar una restricción unique postergable para la tabla referenciada «%s»" -#: commands/tablecmds.c:10301 +#: commands/tablecmds.c:10925 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "no hay restricción unique que coincida con las columnas dadas en la tabla referida «%s»" -#: commands/tablecmds.c:10389 -#, c-format -msgid "validating foreign key constraint \"%s\"" -msgstr "validando restricción de llave foránea «%s»" - -#: commands/tablecmds.c:10708 +#: commands/tablecmds.c:11335 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "no se puede eliminar la restricción «%s» heredada de la relación «%s»" -#: commands/tablecmds.c:10758 +#: commands/tablecmds.c:11385 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "no existe la restricción «%s» en la relación «%s», omitiendo" -#: commands/tablecmds.c:10934 +#: commands/tablecmds.c:11561 #, c-format msgid "cannot alter column type of typed table" msgstr "no se puede cambiar el tipo de una columna de una tabla tipada" -#: commands/tablecmds.c:10961 +#: commands/tablecmds.c:11588 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "no se puede alterar la columna heredada «%s»" -#: commands/tablecmds.c:10970 +#: commands/tablecmds.c:11597 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "no se puede alterar la columna «%s» porque es parte de la llave de partición de la relación «%s»" -#: commands/tablecmds.c:11020 +#: commands/tablecmds.c:11647 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "el resultado de la cláusula USING para la columna «%s» no puede ser convertido automáticamente al tipo %s" -#: commands/tablecmds.c:11023 +#: commands/tablecmds.c:11650 #, c-format msgid "You might need to add an explicit cast." msgstr "Puede ser necesario agregar un cast explícito." -#: commands/tablecmds.c:11027 +#: commands/tablecmds.c:11654 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "la columna «%s» no puede convertirse automáticamente al tipo %s" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:11030 +#: commands/tablecmds.c:11657 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Puede ser necesario especificar «USING %s::%s»." -#: commands/tablecmds.c:11130 +#: commands/tablecmds.c:11757 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "no se puede alterar la columna heredada «%s» de la relación «%s»" -#: commands/tablecmds.c:11158 +#: commands/tablecmds.c:11785 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "La expresión USING contiene una referencia a la fila completa (whole-row)." -#: commands/tablecmds.c:11169 +#: commands/tablecmds.c:11796 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "debe cambiar el tipo a la columna heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:11294 +#: commands/tablecmds.c:11921 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "no se puede alterar el tipo de la columna «%s» dos veces" -#: commands/tablecmds.c:11332 +#: commands/tablecmds.c:11959 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "la expresión de generación para la columna «%s» no puede ser convertido automáticamente al tipo %s" -#: commands/tablecmds.c:11337 +#: commands/tablecmds.c:11964 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "el valor por omisión para la columna «%s» no puede ser convertido automáticamente al tipo %s" -#: commands/tablecmds.c:11415 +#: commands/tablecmds.c:12042 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "no se puede alterar el tipo de una columna usada por una columna generada" -#: commands/tablecmds.c:11416 +#: commands/tablecmds.c:12043 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "La columna «%s» es usada por la columna generada «%s»." -#: commands/tablecmds.c:11437 +#: commands/tablecmds.c:12064 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "no se puede alterar el tipo de una columna usada en una regla o vista" -#: commands/tablecmds.c:11438 commands/tablecmds.c:11457 -#: commands/tablecmds.c:11475 +#: commands/tablecmds.c:12065 commands/tablecmds.c:12084 +#: commands/tablecmds.c:12102 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s depende de la columna «%s»" -#: commands/tablecmds.c:11456 +#: commands/tablecmds.c:12083 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "no se puede alterar el tipo de una columna usada en una definición de trigger" -#: commands/tablecmds.c:11474 +#: commands/tablecmds.c:12101 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "no se puede alterar el tipo de una columna usada en una definición de política" -#: commands/tablecmds.c:12483 commands/tablecmds.c:12495 +#: commands/tablecmds.c:13186 commands/tablecmds.c:13198 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "no se puede cambiar el dueño del índice «%s»" -#: commands/tablecmds.c:12485 commands/tablecmds.c:12497 +#: commands/tablecmds.c:13188 commands/tablecmds.c:13200 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Considere cambiar el dueño de la tabla en vez de cambiar el dueño del índice." -#: commands/tablecmds.c:12511 +#: commands/tablecmds.c:13214 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "no se puede cambiar el dueño de la secuencia «%s»" -#: commands/tablecmds.c:12525 commands/tablecmds.c:15712 +#: commands/tablecmds.c:13228 commands/tablecmds.c:16535 #, c-format msgid "Use ALTER TYPE instead." msgstr "Considere usar ALTER TYPE." -#: commands/tablecmds.c:12534 +#: commands/tablecmds.c:13237 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "«%s» no es una tabla, vista, secuencia o tabla foránea" -#: commands/tablecmds.c:12874 +#: commands/tablecmds.c:13576 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "no se pueden tener múltiples subórdenes SET TABLESPACE" -#: commands/tablecmds.c:12951 +#: commands/tablecmds.c:13653 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "«%s» no es una tabla, vista, tabla materializada, índice o tabla TOAST" -#: commands/tablecmds.c:12984 commands/view.c:494 +#: commands/tablecmds.c:13686 commands/view.c:494 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION sólo puede usarse en vistas automáticamente actualizables" -#: commands/tablecmds.c:13124 -#, c-format -msgid "cannot move system relation \"%s\"" -msgstr "no se puede mover la relación de sistema «%s»" - -#: commands/tablecmds.c:13140 -#, c-format -msgid "cannot move temporary tables of other sessions" -msgstr "no se pueden mover tablas temporales de otras sesiones" - -#: commands/tablecmds.c:13310 +#: commands/tablecmds.c:13938 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "solamente tablas, índices y vistas materializadas existen en tablespaces" -#: commands/tablecmds.c:13322 +#: commands/tablecmds.c:13950 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "no se puede mover objetos hacia o desde el tablespace pg_global" -#: commands/tablecmds.c:13414 +#: commands/tablecmds.c:14042 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "cancelando porque el lock en la relación «%s.%s» no está disponible" -#: commands/tablecmds.c:13430 +#: commands/tablecmds.c:14058 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "no se encontraron relaciones coincidentes en el tablespace «%s»" -#: commands/tablecmds.c:13546 +#: commands/tablecmds.c:14174 #, c-format msgid "cannot change inheritance of typed table" msgstr "no se puede cambiar la herencia de una tabla tipada" -#: commands/tablecmds.c:13551 commands/tablecmds.c:14047 +#: commands/tablecmds.c:14179 commands/tablecmds.c:14735 #, c-format msgid "cannot change inheritance of a partition" msgstr "no puede cambiar la herencia de una partición" -#: commands/tablecmds.c:13556 +#: commands/tablecmds.c:14184 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "no se puede cambiar la herencia de una tabla particionada" -#: commands/tablecmds.c:13602 +#: commands/tablecmds.c:14230 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "no se puede agregar herencia a tablas temporales de otra sesión" -#: commands/tablecmds.c:13615 +#: commands/tablecmds.c:14243 #, c-format msgid "cannot inherit from a partition" msgstr "no se puede heredar de una partición" -#: commands/tablecmds.c:13637 commands/tablecmds.c:16352 +#: commands/tablecmds.c:14265 commands/tablecmds.c:17179 #, c-format msgid "circular inheritance not allowed" msgstr "la herencia circular no está permitida" -#: commands/tablecmds.c:13638 commands/tablecmds.c:16353 +#: commands/tablecmds.c:14266 commands/tablecmds.c:17180 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "«%s» ya es un hijo de «%s»." -#: commands/tablecmds.c:13651 +#: commands/tablecmds.c:14279 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "el trigger «%s» impide a la tabla «%s» convertirse en hija de herencia" -#: commands/tablecmds.c:13653 +#: commands/tablecmds.c:14281 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "Los triggers ROW con tablas de transición no están permitidos en jerarquías de herencia." -#: commands/tablecmds.c:13856 +#: commands/tablecmds.c:14484 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "columna «%s» en tabla hija debe marcarse como NOT NULL" -#: commands/tablecmds.c:13883 +#: commands/tablecmds.c:14493 +#, fuzzy, c-format +#| msgid "column \"%s\" in child table must be marked NOT NULL" +msgid "column \"%s\" in child table must be a generated column" +msgstr "columna «%s» en tabla hija debe marcarse como NOT NULL" + +#: commands/tablecmds.c:14543 +#, fuzzy, c-format +#| msgid "column \"%s\" inherits conflicting generation expressions" +msgid "column \"%s\" in child table has a conflicting generation expression" +msgstr "la columna «%s» hereda expresiones de generación en conflicto" + +#: commands/tablecmds.c:14571 #, c-format msgid "child table is missing column \"%s\"" msgstr "tabla hija no tiene la columna «%s»" -#: commands/tablecmds.c:13971 +#: commands/tablecmds.c:14659 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "la tabla hija «%s» tiene una definición diferente para la restricción «check» «%s»" -#: commands/tablecmds.c:13979 +#: commands/tablecmds.c:14667 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción no heredada en la tabla hija «%s»" -#: commands/tablecmds.c:13990 +#: commands/tablecmds.c:14678 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción NOT VALID en la tabla hija «%s»" -#: commands/tablecmds.c:14025 +#: commands/tablecmds.c:14713 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "tabla hija no tiene la restricción «%s»" -#: commands/tablecmds.c:14114 +#: commands/tablecmds.c:14801 +#, fuzzy, c-format +#| msgid "partition \"%s\" would overlap partition \"%s\"" +msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" +msgstr "la partición «%s» traslaparía con la partición «%s»" + +#: commands/tablecmds.c:14805 +#, c-format +msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the detach operation." +msgstr "" + +#: commands/tablecmds.c:14830 commands/tablecmds.c:14878 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "relación «%s» no es una partición de la relación «%s»" -#: commands/tablecmds.c:14120 +#: commands/tablecmds.c:14884 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "relación «%s» no es un padre de la relación «%s»" -#: commands/tablecmds.c:14348 +#: commands/tablecmds.c:15112 #, c-format msgid "typed tables cannot inherit" msgstr "las tablas tipadas no pueden heredar" -#: commands/tablecmds.c:14378 +#: commands/tablecmds.c:15142 #, c-format msgid "table is missing column \"%s\"" msgstr "la tabla no tiene la columna «%s»" -#: commands/tablecmds.c:14389 +#: commands/tablecmds.c:15153 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "la tabla tiene columna «%s» en la posición en que el tipo requiere «%s»." -#: commands/tablecmds.c:14398 +#: commands/tablecmds.c:15162 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "la tabla «%s» tiene un tipo diferente para la columna «%s»" -#: commands/tablecmds.c:14412 +#: commands/tablecmds.c:15176 #, c-format msgid "table has extra column \"%s\"" msgstr "tabla tiene la columna extra «%s»" -#: commands/tablecmds.c:14464 +#: commands/tablecmds.c:15228 #, c-format msgid "\"%s\" is not a typed table" msgstr "«%s» no es una tabla tipada" -#: commands/tablecmds.c:14646 +#: commands/tablecmds.c:15410 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "no se puede usar el índice no-único «%s» como identidad de réplica" -#: commands/tablecmds.c:14652 +#: commands/tablecmds.c:15416 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "no puede usar el índice no-inmediato «%s» como identidad de réplica" -#: commands/tablecmds.c:14658 +#: commands/tablecmds.c:15422 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "no se puede usar el índice funcional «%s» como identidad de réplica" -#: commands/tablecmds.c:14664 +#: commands/tablecmds.c:15428 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "no se puede usar el índice parcial «%s» como identidad de réplica" -#: commands/tablecmds.c:14670 +#: commands/tablecmds.c:15434 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "no se puede usar el índice no válido «%s» como identidad de réplica" -#: commands/tablecmds.c:14687 +#: commands/tablecmds.c:15451 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "el índice «%s» no puede usarse como identidad de réplica porque la column %d es una columna de sistema" -#: commands/tablecmds.c:14694 +#: commands/tablecmds.c:15458 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "el índice «%s» no puede usarse como identidad de réplica porque la column «%s» acepta valores nulos" -#: commands/tablecmds.c:14887 +#: commands/tablecmds.c:15648 commands/tablecmds.c:18632 +#, fuzzy, c-format +#| msgid "this build does not support compression" +msgid "column data type %s does not support compression" +msgstr "esta instalación no soporta compresión" + +#: commands/tablecmds.c:15709 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "no se puede cambiar el estado «logged» de la tabla «%s» porque es temporal" -#: commands/tablecmds.c:14911 +#: commands/tablecmds.c:15733 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "no se pudo cambiar la tabla «%s» a «unlogged» porque es parte de una publicación" -#: commands/tablecmds.c:14913 +#: commands/tablecmds.c:15735 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Las tablas «unlogged» no pueden replicarse." -#: commands/tablecmds.c:14958 +#: commands/tablecmds.c:15780 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "no se pudo cambiar la tabla «%s» a «logged» porque hace referencia a la tabla «unlogged» «%s»" -#: commands/tablecmds.c:14968 +#: commands/tablecmds.c:15790 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "no se pudo cambiar la tabla «%s» a «unlogged» porque hace referencia a la tabla «logged» «%s»" -#: commands/tablecmds.c:15026 +#: commands/tablecmds.c:15848 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "no se puede mover una secuencia enlazada a una tabla hacia otro esquema" -#: commands/tablecmds.c:15132 +#: commands/tablecmds.c:15955 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "ya existe una relación llamada «%s» en el esquema «%s»" -#: commands/tablecmds.c:15695 +#: commands/tablecmds.c:16518 #, c-format msgid "\"%s\" is not a composite type" msgstr "«%s» no es un tipo compuesto" -#: commands/tablecmds.c:15727 +#: commands/tablecmds.c:16550 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "«%s» no es una tabla, vista, vista materializada, secuencia o tabla foránea" -#: commands/tablecmds.c:15762 +#: commands/tablecmds.c:16585 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "estrategia de particionamiento «%s» no reconocida" -#: commands/tablecmds.c:15770 +#: commands/tablecmds.c:16593 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "no se puede usar la estrategia de particionamiento «list» con más de una columna" -#: commands/tablecmds.c:15836 +#: commands/tablecmds.c:16659 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "la columna «%s» nombrada en llave de particionamiento no existe" -#: commands/tablecmds.c:15844 +#: commands/tablecmds.c:16667 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "no se puede usar la columna de sistema «%s» en llave de particionamiento" -#: commands/tablecmds.c:15855 commands/tablecmds.c:15969 +#: commands/tablecmds.c:16678 commands/tablecmds.c:16792 #, c-format msgid "cannot use generated column in partition key" msgstr "no se puede usar una columna generada en llave de particionamiento" -#: commands/tablecmds.c:15856 commands/tablecmds.c:15970 commands/trigger.c:641 -#: rewrite/rewriteHandler.c:829 rewrite/rewriteHandler.c:846 +#: commands/tablecmds.c:16679 commands/tablecmds.c:16793 commands/trigger.c:635 +#: rewrite/rewriteHandler.c:884 rewrite/rewriteHandler.c:919 #, c-format msgid "Column \"%s\" is a generated column." msgstr "La columna «%s» es una columna generada." -#: commands/tablecmds.c:15932 +#: commands/tablecmds.c:16755 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "las funciones utilizadas en expresiones de la llave de particionamiento deben estar marcadas IMMUTABLE" -#: commands/tablecmds.c:15952 +#: commands/tablecmds.c:16775 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "las expresiones en la llave de particionamiento no pueden contener referencias a columnas de sistema" -#: commands/tablecmds.c:15982 +#: commands/tablecmds.c:16805 #, c-format msgid "cannot use constant expression as partition key" msgstr "no se pueden usar expresiones constantes como llave de particionamiento" -#: commands/tablecmds.c:16003 +#: commands/tablecmds.c:16826 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de particionamiento" -#: commands/tablecmds.c:16038 +#: commands/tablecmds.c:16861 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "Debe especificar una clase de operadores hash, o definir una clase de operadores por omisión para hash para el tipo de datos." -#: commands/tablecmds.c:16044 +#: commands/tablecmds.c:16867 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "Debe especificar una clase de operadores btree, o definir una clase de operadores por omisión para btree para el tipo de datos." -#: commands/tablecmds.c:16189 -#, c-format -msgid "partition constraint for table \"%s\" is implied by existing constraints" -msgstr "la restricción de partición para la tabla \"%s\" está implícita en las restricciones existentes" - -#: commands/tablecmds.c:16193 partitioning/partbounds.c:3129 -#: partitioning/partbounds.c:3180 -#, c-format -msgid "updated partition constraint for default partition \"%s\" is implied by existing constraints" -msgstr "la restricción de partición actualizada para la partición por omisión \"%s\" está implícita en las restricciones existentes" - -#: commands/tablecmds.c:16292 +#: commands/tablecmds.c:17119 #, c-format msgid "\"%s\" is already a partition" msgstr "«%s» ya es una partición" -#: commands/tablecmds.c:16298 +#: commands/tablecmds.c:17125 #, c-format msgid "cannot attach a typed table as partition" msgstr "no puede adjuntar tabla tipada como partición" -#: commands/tablecmds.c:16314 +#: commands/tablecmds.c:17141 #, c-format msgid "cannot attach inheritance child as partition" msgstr "no puede adjuntar hija de herencia como partición" -#: commands/tablecmds.c:16328 +#: commands/tablecmds.c:17155 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "no puede adjuntar ancestro de herencia como partición" -#: commands/tablecmds.c:16362 +#: commands/tablecmds.c:17189 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "no se puede adjuntar una relación temporal como partición de la relación permanente «%s»" -#: commands/tablecmds.c:16370 +#: commands/tablecmds.c:17197 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "no se puede adjuntar una relación permanente como partición de la relación temporal «%s»" -#: commands/tablecmds.c:16378 +#: commands/tablecmds.c:17205 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "no se puede adjuntar como partición de una relación temporal de otra sesión" -#: commands/tablecmds.c:16385 +#: commands/tablecmds.c:17212 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "no se adjuntar una relación temporal de otra sesión como partición" -#: commands/tablecmds.c:16405 +#: commands/tablecmds.c:17232 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "la tabla «%s» contiene la columna «%s» no encontrada en el padre «%s»" -#: commands/tablecmds.c:16408 +#: commands/tablecmds.c:17235 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "La nueva partición sólo puede contener las columnas presentes en el padre." -#: commands/tablecmds.c:16420 +#: commands/tablecmds.c:17247 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "el trigger «%s» impide a la tabla «%s» devenir partición" -#: commands/tablecmds.c:16422 commands/trigger.c:447 +#: commands/tablecmds.c:17249 commands/trigger.c:441 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "los triggers ROW con tablas de transición no están soportados en particiones" -#: commands/tablecmds.c:16585 +#: commands/tablecmds.c:17412 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "no se puede adjuntar la tabla foránea «%s» como partición de la tabla particionada «%s»" -#: commands/tablecmds.c:16588 -#, c-format -msgid "Table \"%s\" contains unique indexes." +#: commands/tablecmds.c:17415 +#, fuzzy, c-format +#| msgid "Table \"%s\" contains unique indexes." +msgid "Partitioned table \"%s\" contains unique indexes." msgstr "La tabla «%s» contiene índices únicos." -#: commands/tablecmds.c:17234 commands/tablecmds.c:17254 -#: commands/tablecmds.c:17274 commands/tablecmds.c:17293 -#: commands/tablecmds.c:17335 +#: commands/tablecmds.c:17735 +#, fuzzy, c-format +#| msgid "a hash-partitioned table may not have a default partition" +msgid "cannot detach partitions concurrently when a default partition exists" +msgstr "una tabla particionada por hash no puede tener una partición default" + +#: commands/tablecmds.c:17844 +#, fuzzy, c-format +#| msgid "cannot create index on partitioned table \"%s\" concurrently" +msgid "partitioned table \"%s\" was removed concurrently" +msgstr "no se puede crear un índice en la tabla particionada «%s» concurrentemente" + +#: commands/tablecmds.c:17850 +#, fuzzy, c-format +#| msgid "cannot drop partitioned index \"%s\" concurrently" +msgid "partition \"%s\" was removed concurrently" +msgstr "no se puede eliminar el índice particionado «%s» concurrentemente" + +#: commands/tablecmds.c:18304 commands/tablecmds.c:18324 +#: commands/tablecmds.c:18344 commands/tablecmds.c:18363 +#: commands/tablecmds.c:18405 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "no se puede adjuntar el índice «%s» como partición del índice «%s»" -#: commands/tablecmds.c:17237 +#: commands/tablecmds.c:18307 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "El índice «%s» ya está adjunto a otro índice." -#: commands/tablecmds.c:17257 +#: commands/tablecmds.c:18327 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "El índice «%s» no es un índice en una partición de la tabla «%s»." -#: commands/tablecmds.c:17277 +#: commands/tablecmds.c:18347 #, c-format msgid "The index definitions do not match." msgstr "Las definiciones de los índices no coinciden." -#: commands/tablecmds.c:17296 +#: commands/tablecmds.c:18366 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "El índice «%s» pertenece a una restricción en la tabla «%s», pero no existe una restricción para el índice «%s»." -#: commands/tablecmds.c:17338 +#: commands/tablecmds.c:18408 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "Otro índice ya está adjunto para la partición «%s»." +#: commands/tablecmds.c:18644 +#, fuzzy, c-format +#| msgid "invalid compression level \"%s\"" +msgid "invalid compression method \"%s\"" +msgstr "valor de compresión «%s» no válido" + #: commands/tablespace.c:162 commands/tablespace.c:179 #: commands/tablespace.c:190 commands/tablespace.c:198 -#: commands/tablespace.c:638 replication/slot.c:1373 storage/file/copydir.c:47 +#: commands/tablespace.c:650 replication/slot.c:1409 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "no se pudo crear el directorio «%s»: %m" @@ -10296,751 +10690,798 @@ msgstr "la ruta «%s» del tablespace es demasiado larga" msgid "tablespace location should not be inside the data directory" msgstr "la ubicación del tablespace no debe estar dentro del directorio de datos" -#: commands/tablespace.c:305 commands/tablespace.c:965 +#: commands/tablespace.c:305 commands/tablespace.c:977 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "el nombre de tablespace «%s» es inaceptable" -#: commands/tablespace.c:307 commands/tablespace.c:966 +#: commands/tablespace.c:307 commands/tablespace.c:978 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "El prefijo «pg_» está reservado para tablespaces del sistema." -#: commands/tablespace.c:326 commands/tablespace.c:987 +#: commands/tablespace.c:326 commands/tablespace.c:999 #, c-format msgid "tablespace \"%s\" already exists" msgstr "el tablespace «%s» ya existe" -#: commands/tablespace.c:442 commands/tablespace.c:948 -#: commands/tablespace.c:1037 commands/tablespace.c:1106 -#: commands/tablespace.c:1252 commands/tablespace.c:1455 +#: commands/tablespace.c:444 commands/tablespace.c:960 +#: commands/tablespace.c:1049 commands/tablespace.c:1118 +#: commands/tablespace.c:1264 commands/tablespace.c:1467 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "no existe el tablespace «%s»" -#: commands/tablespace.c:448 +#: commands/tablespace.c:450 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "el tablespace «%s» no existe, omitiendo" -#: commands/tablespace.c:525 +#: commands/tablespace.c:478 +#, fuzzy, c-format +#| msgid "role \"%s\" cannot be dropped because some objects depend on it" +msgid "tablespace \"%s\" cannot be dropped because some objects depend on it" +msgstr "no se puede eliminar el rol «%s» porque otros objetos dependen de él" + +#: commands/tablespace.c:537 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "el tablespace «%s» no está vacío" -#: commands/tablespace.c:597 +#: commands/tablespace.c:609 #, c-format msgid "directory \"%s\" does not exist" msgstr "no existe el directorio «%s»" -#: commands/tablespace.c:598 +#: commands/tablespace.c:610 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "Cree este directorio para el tablespace antes de reiniciar el servidor." -#: commands/tablespace.c:603 +#: commands/tablespace.c:615 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "no se pudo definir los permisos del directorio «%s»: %m" -#: commands/tablespace.c:633 +#: commands/tablespace.c:645 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "el directorio «%s» ya está siendo usado como tablespace" -#: commands/tablespace.c:757 commands/tablespace.c:770 -#: commands/tablespace.c:806 commands/tablespace.c:898 storage/file/fd.c:3108 -#: storage/file/fd.c:3448 +#: commands/tablespace.c:769 commands/tablespace.c:782 +#: commands/tablespace.c:818 commands/tablespace.c:910 storage/file/fd.c:3161 +#: storage/file/fd.c:3557 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "no se pudo eliminar el directorio «%s»: %m" -#: commands/tablespace.c:819 commands/tablespace.c:907 +#: commands/tablespace.c:831 commands/tablespace.c:919 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "no se pudo eliminar el enlace simbólico «%s»: %m" -#: commands/tablespace.c:829 commands/tablespace.c:916 +#: commands/tablespace.c:841 commands/tablespace.c:928 #, c-format msgid "\"%s\" is not a directory or symbolic link" msgstr "«%s» no es un directorio o enlace simbólico" -#: commands/tablespace.c:1111 +#: commands/tablespace.c:1123 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "No existe el tablespace «%s»." -#: commands/tablespace.c:1554 +#: commands/tablespace.c:1566 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "algunos directorios para el tablespace %u no pudieron eliminarse" -#: commands/tablespace.c:1556 +#: commands/tablespace.c:1568 #, c-format msgid "You can remove the directories manually if necessary." msgstr "Puede eliminar los directorios manualmente, si es necesario." -#: commands/trigger.c:204 commands/trigger.c:215 +#: commands/trigger.c:198 commands/trigger.c:209 #, c-format msgid "\"%s\" is a table" msgstr "«%s» es una tabla" -#: commands/trigger.c:206 commands/trigger.c:217 +#: commands/trigger.c:200 commands/trigger.c:211 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "Las tablas no pueden tener disparadores INSTEAD OF." -#: commands/trigger.c:238 +#: commands/trigger.c:232 #, c-format msgid "\"%s\" is a partitioned table" msgstr "«%s» es una tabla particionada" -#: commands/trigger.c:240 +#: commands/trigger.c:234 #, c-format msgid "Triggers on partitioned tables cannot have transition tables." msgstr "Los triggers en tablas particionadas no pueden tener tablas de transición." -#: commands/trigger.c:252 commands/trigger.c:259 commands/trigger.c:429 +#: commands/trigger.c:246 commands/trigger.c:253 commands/trigger.c:423 #, c-format msgid "\"%s\" is a view" msgstr "«%s» es una vista" -#: commands/trigger.c:254 +#: commands/trigger.c:248 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "Las vistas no pueden tener disparadores BEFORE o AFTER a nivel de fila." -#: commands/trigger.c:261 +#: commands/trigger.c:255 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "Las vistas no pueden tener disparadores TRUNCATE." -#: commands/trigger.c:269 commands/trigger.c:276 commands/trigger.c:288 -#: commands/trigger.c:422 +#: commands/trigger.c:263 commands/trigger.c:270 commands/trigger.c:282 +#: commands/trigger.c:416 #, c-format msgid "\"%s\" is a foreign table" msgstr "«%s» es una tabla foránea" -#: commands/trigger.c:271 +#: commands/trigger.c:265 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "Las tablas foráneas no pueden tener disparadores INSTEAD OF." -#: commands/trigger.c:278 +#: commands/trigger.c:272 #, c-format msgid "Foreign tables cannot have TRUNCATE triggers." msgstr "Las tablas foráneas no pueden tener disparadores TRUNCATE." -#: commands/trigger.c:290 +#: commands/trigger.c:284 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "Las tablas foráneas no pueden tener disparadores de restricción." -#: commands/trigger.c:365 +#: commands/trigger.c:359 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "los disparadores TRUNCATE FOR EACH ROW no están soportados" -#: commands/trigger.c:373 +#: commands/trigger.c:367 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "los disparadores INSTEAD OF deben ser FOR EACH ROW" -#: commands/trigger.c:377 +#: commands/trigger.c:371 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "los disparadores INSTEAD OF no pueden tener condiciones WHEN" -#: commands/trigger.c:381 +#: commands/trigger.c:375 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "los disparadores INSTEAD OF no pueden tener listas de columnas" -#: commands/trigger.c:410 +#: commands/trigger.c:404 #, c-format msgid "ROW variable naming in the REFERENCING clause is not supported" msgstr "dar nombre a una variable ROW en la cláusula REFERENCING no está soportado" -#: commands/trigger.c:411 +#: commands/trigger.c:405 #, c-format msgid "Use OLD TABLE or NEW TABLE for naming transition tables." msgstr "utilice OLD TABLE o NEW TABLE para nombrar tablas de transición." -#: commands/trigger.c:424 +#: commands/trigger.c:418 #, c-format msgid "Triggers on foreign tables cannot have transition tables." msgstr "Las tablas foráneas no pueden tener tablas de transición." -#: commands/trigger.c:431 +#: commands/trigger.c:425 #, c-format msgid "Triggers on views cannot have transition tables." msgstr "Las triggers en vistas no pueden tener tablas de transición." -#: commands/trigger.c:451 +#: commands/trigger.c:445 #, c-format msgid "ROW triggers with transition tables are not supported on inheritance children" msgstr "los triggers ROW con tablas de transición no están soportados con hijas de herencia" -#: commands/trigger.c:457 +#: commands/trigger.c:451 #, c-format msgid "transition table name can only be specified for an AFTER trigger" msgstr "el nombre de la tabla de transición solo se puede especificar para un disparador AFTER" -#: commands/trigger.c:462 +#: commands/trigger.c:456 #, c-format msgid "TRUNCATE triggers with transition tables are not supported" msgstr "los triggers TRUNCATE con tablas de transición no están soportados" -#: commands/trigger.c:479 +#: commands/trigger.c:473 #, c-format msgid "transition tables cannot be specified for triggers with more than one event" msgstr "las tablas de transición no pueden especificarse para triggers con más de un evento" -#: commands/trigger.c:490 +#: commands/trigger.c:484 #, c-format msgid "transition tables cannot be specified for triggers with column lists" msgstr "las tablas de transición no pueden especificarse para triggers con lista de columnas" -#: commands/trigger.c:507 +#: commands/trigger.c:501 #, c-format msgid "NEW TABLE can only be specified for an INSERT or UPDATE trigger" msgstr "NEW TABLE sólo se puede especificar para un disparador INSERT o UPDATE" -#: commands/trigger.c:512 +#: commands/trigger.c:506 #, c-format msgid "NEW TABLE cannot be specified multiple times" msgstr "NEW TABLE no se puede especificar varias veces" -#: commands/trigger.c:522 +#: commands/trigger.c:516 #, c-format msgid "OLD TABLE can only be specified for a DELETE or UPDATE trigger" msgstr "OLD TABLE sólo se puede especificar para un disparador DELETE o UPDATE" -#: commands/trigger.c:527 +#: commands/trigger.c:521 #, c-format msgid "OLD TABLE cannot be specified multiple times" msgstr "OLD TABLE no se puede especificar varias veces" -#: commands/trigger.c:537 +#: commands/trigger.c:531 #, c-format msgid "OLD TABLE name and NEW TABLE name cannot be the same" msgstr "el nombre de OLD TABLE y el nombre de NEW TABLE no pueden ser iguales" -#: commands/trigger.c:601 commands/trigger.c:614 +#: commands/trigger.c:595 commands/trigger.c:608 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "la condición WHEN de un disparador por sentencias no pueden referirse a los valores de las columnas" -#: commands/trigger.c:606 +#: commands/trigger.c:600 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "la condición WHEN de un disparador en INSERT no puede referirse a valores OLD" -#: commands/trigger.c:619 +#: commands/trigger.c:613 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "la condición WHEN de un disparador en DELETE no puede referirse a valores NEW" -#: commands/trigger.c:624 +#: commands/trigger.c:618 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "la condición WHEN de un disparador BEFORE no puede referirse a columnas de sistema de NEW" -#: commands/trigger.c:632 commands/trigger.c:640 +#: commands/trigger.c:626 commands/trigger.c:634 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW generated columns" msgstr "la condición WHEN del trigger BEFORE no puede hacer referencia a columnas NEW generadas" -#: commands/trigger.c:633 +#: commands/trigger.c:627 #, c-format msgid "A whole-row reference is used and the table contains generated columns." msgstr "Se utiliza una referencia de la tupla completa, y la tabla contiene columnas generadas" -#: commands/trigger.c:780 commands/trigger.c:1385 +#: commands/trigger.c:741 commands/trigger.c:1450 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "ya existe un trigger «%s» para la relación «%s»" -#: commands/trigger.c:1271 commands/trigger.c:1432 commands/trigger.c:1568 +#: commands/trigger.c:755 +#, fuzzy, c-format +#| msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" +msgid "trigger \"%s\" for relation \"%s\" is an internal trigger" +msgstr "disparador «%s» para la relación «%s» no existe, omitiendo" + +#: commands/trigger.c:774 +#, fuzzy, c-format +#| msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" +msgid "trigger \"%s\" for relation \"%s\" is a constraint trigger" +msgstr "disparador «%s» para la relación «%s» no existe, omitiendo" + +#: commands/trigger.c:1336 commands/trigger.c:1497 commands/trigger.c:1612 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "no existe el trigger «%s» para la tabla «%s»" -#: commands/trigger.c:1515 +#: commands/trigger.c:1580 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "permiso denegado: «%s» es un trigger de sistema" -#: commands/trigger.c:2116 +#: commands/trigger.c:2160 #, c-format msgid "trigger function %u returned null value" msgstr "la función de trigger %u ha retornado un valor null" -#: commands/trigger.c:2176 commands/trigger.c:2390 commands/trigger.c:2625 -#: commands/trigger.c:2933 +#: commands/trigger.c:2220 commands/trigger.c:2434 commands/trigger.c:2673 +#: commands/trigger.c:2977 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "un trigger BEFORE STATEMENT no puede retornar un valor" -#: commands/trigger.c:2250 +#: commands/trigger.c:2294 #, c-format msgid "moving row to another partition during a BEFORE FOR EACH ROW trigger is not supported" msgstr "mover registros a otra partición durante un trigger BEFORE FOR EACH ROW no está soportado" -#: commands/trigger.c:2251 commands/trigger.c:2755 +#: commands/trigger.c:2295 #, c-format msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "Antes de ejecutar el trigger «%s», la fila iba a estar en la partición «%s.%s»." -#: commands/trigger.c:2754 -#, c-format -msgid "moving row to another partition during a BEFORE trigger is not supported" -msgstr "mover registros a otra partición durante un trigger BEFORE no está soportado" - -#: commands/trigger.c:2996 executor/nodeModifyTable.c:1380 -#: executor/nodeModifyTable.c:1449 +#: commands/trigger.c:3043 executor/nodeModifyTable.c:1799 +#: executor/nodeModifyTable.c:1881 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "el registro a ser actualizado ya fue modificado por una operación disparada por la orden actual" -#: commands/trigger.c:2997 executor/nodeModifyTable.c:840 -#: executor/nodeModifyTable.c:914 executor/nodeModifyTable.c:1381 -#: executor/nodeModifyTable.c:1450 +#: commands/trigger.c:3044 executor/nodeModifyTable.c:1187 +#: executor/nodeModifyTable.c:1261 executor/nodeModifyTable.c:1800 +#: executor/nodeModifyTable.c:1882 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Considere usar un disparador AFTER en lugar de un disparador BEFORE para propagar cambios a otros registros." -#: commands/trigger.c:3026 executor/nodeLockRows.c:225 -#: executor/nodeLockRows.c:234 executor/nodeModifyTable.c:220 -#: executor/nodeModifyTable.c:856 executor/nodeModifyTable.c:1397 -#: executor/nodeModifyTable.c:1613 +#: commands/trigger.c:3073 executor/nodeLockRows.c:225 +#: executor/nodeLockRows.c:234 executor/nodeModifyTable.c:228 +#: executor/nodeModifyTable.c:1203 executor/nodeModifyTable.c:1817 +#: executor/nodeModifyTable.c:2047 #, c-format msgid "could not serialize access due to concurrent update" msgstr "no se pudo serializar el acceso debido a un update concurrente" -#: commands/trigger.c:3034 executor/nodeModifyTable.c:946 -#: executor/nodeModifyTable.c:1467 executor/nodeModifyTable.c:1637 +#: commands/trigger.c:3081 executor/nodeModifyTable.c:1293 +#: executor/nodeModifyTable.c:1899 executor/nodeModifyTable.c:2071 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "no se pudo serializar el acceso debido a un delete concurrente" -#: commands/trigger.c:5094 +#: commands/trigger.c:4142 +#, fuzzy, c-format +#| msgid "cannot create temporary table within security-restricted operation" +msgid "cannot fire deferred trigger within security-restricted operation" +msgstr "no se puede crear una tabla temporal dentro una operación restringida por seguridad" + +#: commands/trigger.c:5183 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "la restricción «%s» no es postergable" -#: commands/trigger.c:5117 +#: commands/trigger.c:5206 #, c-format msgid "constraint \"%s\" does not exist" msgstr "no existe la restricción «%s»" -#: commands/tsearchcmds.c:118 commands/tsearchcmds.c:683 +#: commands/tsearchcmds.c:118 commands/tsearchcmds.c:635 #, c-format msgid "function %s should return type %s" msgstr "la función %s debería retornar el tipo %s" -#: commands/tsearchcmds.c:195 +#: commands/tsearchcmds.c:194 #, c-format msgid "must be superuser to create text search parsers" msgstr "debe ser superusuario para crear analizadores de búsqueda en texto" -#: commands/tsearchcmds.c:248 +#: commands/tsearchcmds.c:247 #, c-format msgid "text search parser parameter \"%s\" not recognized" msgstr "el parámetro de analizador de búsqueda en texto «%s» no es reconocido" -#: commands/tsearchcmds.c:258 +#: commands/tsearchcmds.c:257 #, c-format msgid "text search parser start method is required" msgstr "el método «start» del analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:263 +#: commands/tsearchcmds.c:262 #, c-format msgid "text search parser gettoken method is required" msgstr "el método «gettoken» del analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:268 +#: commands/tsearchcmds.c:267 #, c-format msgid "text search parser end method is required" msgstr "el método «end» del analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:273 +#: commands/tsearchcmds.c:272 #, c-format msgid "text search parser lextypes method is required" msgstr "el método «lextypes» del analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:390 +#: commands/tsearchcmds.c:366 #, c-format msgid "text search template \"%s\" does not accept options" msgstr "la plantilla de búsquede en texto «%s» no acepta opciones" -#: commands/tsearchcmds.c:464 +#: commands/tsearchcmds.c:440 #, c-format msgid "text search template is required" msgstr "la plantilla de búsqueda en texto es obligatoria" -#: commands/tsearchcmds.c:750 +#: commands/tsearchcmds.c:701 #, c-format msgid "must be superuser to create text search templates" msgstr "debe ser superusuario para crear una plantilla de búsqueda en texto" -#: commands/tsearchcmds.c:792 +#: commands/tsearchcmds.c:743 #, c-format msgid "text search template parameter \"%s\" not recognized" msgstr "el parámetro de la plantilla de búsqueda en texto «%s» no es reconocido" -#: commands/tsearchcmds.c:802 +#: commands/tsearchcmds.c:753 #, c-format msgid "text search template lexize method is required" msgstr "el método «lexize» de la plantilla de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:1006 +#: commands/tsearchcmds.c:933 #, c-format msgid "text search configuration parameter \"%s\" not recognized" msgstr "el parámetro de configuración de búsqueda en texto «%s» no es reconocido" -#: commands/tsearchcmds.c:1013 +#: commands/tsearchcmds.c:940 #, c-format msgid "cannot specify both PARSER and COPY options" msgstr "no se puede especificar simultáneamente las opciones PARSER y COPY" -#: commands/tsearchcmds.c:1049 +#: commands/tsearchcmds.c:976 #, c-format msgid "text search parser is required" msgstr "el analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:1273 +#: commands/tsearchcmds.c:1200 #, c-format msgid "token type \"%s\" does not exist" msgstr "no existe el tipo de elemento «%s»" -#: commands/tsearchcmds.c:1500 +#: commands/tsearchcmds.c:1427 #, c-format msgid "mapping for token type \"%s\" does not exist" msgstr "no existe un mapeo para el tipo de elemento «%s»" -#: commands/tsearchcmds.c:1506 +#: commands/tsearchcmds.c:1433 #, c-format msgid "mapping for token type \"%s\" does not exist, skipping" msgstr "el mapeo para el tipo de elemento «%s» no existe, omitiendo" -#: commands/tsearchcmds.c:1669 commands/tsearchcmds.c:1784 +#: commands/tsearchcmds.c:1596 commands/tsearchcmds.c:1711 #, c-format msgid "invalid parameter list format: \"%s\"" msgstr "el formato de la lista de parámetros no es válido: «%s»" -#: commands/typecmds.c:206 +#: commands/typecmds.c:217 #, c-format msgid "must be superuser to create a base type" msgstr "debe ser superusuario para crear un tipo base" -#: commands/typecmds.c:264 +#: commands/typecmds.c:275 #, c-format msgid "Create the type as a shell type, then create its I/O functions, then do a full CREATE TYPE." msgstr "Cree el tipo como un tipo inconcluso, luego cree sus funciones de I/O, luego haga un CREATE TYPE completo." -#: commands/typecmds.c:314 commands/typecmds.c:1394 commands/typecmds.c:3832 +#: commands/typecmds.c:327 commands/typecmds.c:1465 commands/typecmds.c:4281 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "el atributo de tipo «%s» no es reconocido" -#: commands/typecmds.c:370 +#: commands/typecmds.c:385 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "la categoría de tipo «%s» no es válida: debe ser ASCII simple" -#: commands/typecmds.c:389 +#: commands/typecmds.c:404 #, c-format msgid "array element type cannot be %s" msgstr "el tipo de elemento de array no puede ser %s" -#: commands/typecmds.c:421 +#: commands/typecmds.c:436 #, c-format msgid "alignment \"%s\" not recognized" msgstr "el alineamiento «%s» no es reconocido" -#: commands/typecmds.c:438 commands/typecmds.c:3718 +#: commands/typecmds.c:453 commands/typecmds.c:4155 #, c-format msgid "storage \"%s\" not recognized" msgstr "el almacenamiento «%s» no es reconocido" -#: commands/typecmds.c:449 +#: commands/typecmds.c:464 #, c-format msgid "type input function must be specified" msgstr "debe especificarse la función de ingreso del tipo" -#: commands/typecmds.c:453 +#: commands/typecmds.c:468 #, c-format msgid "type output function must be specified" msgstr "debe especificarse la función de salida de tipo" -#: commands/typecmds.c:458 +#: commands/typecmds.c:473 #, c-format msgid "type modifier output function is useless without a type modifier input function" msgstr "la función de salida de modificadores de tipo es inútil sin una función de entrada de modificadores de tipo" -#: commands/typecmds.c:745 +#: commands/typecmds.c:515 +#, c-format +msgid "element type cannot be specified without a valid subscripting procedure" +msgstr "" + +#: commands/typecmds.c:784 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "«%s» no es un tipo de dato base válido para un dominio" -#: commands/typecmds.c:837 +#: commands/typecmds.c:882 #, c-format msgid "multiple default expressions" msgstr "múltiples expresiones default" -#: commands/typecmds.c:900 commands/typecmds.c:909 +#: commands/typecmds.c:945 commands/typecmds.c:954 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "las restricciones NULL/NOT NULL no coinciden" -#: commands/typecmds.c:925 +#: commands/typecmds.c:970 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "las restricciones «check» en dominios no pueden ser marcadas NO INHERIT" -#: commands/typecmds.c:934 commands/typecmds.c:2536 +#: commands/typecmds.c:979 commands/typecmds.c:2975 #, c-format msgid "unique constraints not possible for domains" msgstr "no se pueden poner restricciones de unicidad a un dominio" -#: commands/typecmds.c:940 commands/typecmds.c:2542 +#: commands/typecmds.c:985 commands/typecmds.c:2981 #, c-format msgid "primary key constraints not possible for domains" msgstr "no se pueden poner restricciones de llave primaria a un dominio" -#: commands/typecmds.c:946 commands/typecmds.c:2548 +#: commands/typecmds.c:991 commands/typecmds.c:2987 #, c-format msgid "exclusion constraints not possible for domains" msgstr "las restricciones de exclusión no son posibles para los dominios" -#: commands/typecmds.c:952 commands/typecmds.c:2554 +#: commands/typecmds.c:997 commands/typecmds.c:2993 #, c-format msgid "foreign key constraints not possible for domains" msgstr "no se pueden poner restricciones de llave foránea a un dominio" -#: commands/typecmds.c:961 commands/typecmds.c:2563 +#: commands/typecmds.c:1006 commands/typecmds.c:3002 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "no se puede especificar la postergabilidad de las restricciones a un dominio" -#: commands/typecmds.c:1271 utils/cache/typcache.c:2430 +#: commands/typecmds.c:1320 utils/cache/typcache.c:2545 #, c-format msgid "%s is not an enum" msgstr "%s no es un enum" -#: commands/typecmds.c:1402 +#: commands/typecmds.c:1473 #, c-format msgid "type attribute \"subtype\" is required" msgstr "el atributo de tipo «subtype» es obligatorio" -#: commands/typecmds.c:1407 +#: commands/typecmds.c:1478 #, c-format msgid "range subtype cannot be %s" msgstr "el subtipo de rango no puede ser %s" -#: commands/typecmds.c:1426 +#: commands/typecmds.c:1497 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "se especificó un ordenamiento (collation) al rango, pero el subtipo no soporta ordenamiento" -#: commands/typecmds.c:1436 +#: commands/typecmds.c:1507 #, c-format msgid "cannot specify a canonical function without a pre-created shell type" msgstr "no se puede especificar una función canónica sin antes crear un tipo inconcluso" -#: commands/typecmds.c:1437 +#: commands/typecmds.c:1508 #, c-format msgid "Create the type as a shell type, then create its canonicalization function, then do a full CREATE TYPE." msgstr "Cree el tipo como un tipo inconcluso, luego cree su función de canonicalización, luego haga un CREATE TYPE completo." -#: commands/typecmds.c:1648 +#: commands/typecmds.c:1982 #, c-format msgid "type input function %s has multiple matches" msgstr "la función de entrada %s del tipo tiene múltiples coincidencias" -#: commands/typecmds.c:1666 +#: commands/typecmds.c:2000 #, c-format msgid "type input function %s must return type %s" msgstr "la función de entrada %s del tipo debe retornar %s" -#: commands/typecmds.c:1682 +#: commands/typecmds.c:2016 #, c-format msgid "type input function %s should not be volatile" msgstr "la función de entrada %s no debe ser volatile" -#: commands/typecmds.c:1710 +#: commands/typecmds.c:2044 #, c-format msgid "type output function %s must return type %s" msgstr "la función de salida %s del tipo debe retornar %s" -#: commands/typecmds.c:1717 +#: commands/typecmds.c:2051 #, c-format msgid "type output function %s should not be volatile" msgstr "la función de salida %s no debe ser volatile" -#: commands/typecmds.c:1746 +#: commands/typecmds.c:2080 #, c-format msgid "type receive function %s has multiple matches" msgstr "la función de recepción %s del tipo tiene múltiples coincidencias" -#: commands/typecmds.c:1764 +#: commands/typecmds.c:2098 #, c-format msgid "type receive function %s must return type %s" msgstr "la función de recepción %s del tipo debe retornar %s" -#: commands/typecmds.c:1771 +#: commands/typecmds.c:2105 #, c-format msgid "type receive function %s should not be volatile" msgstr "la función «receive» %s del tipo no debe ser volatile" -#: commands/typecmds.c:1799 +#: commands/typecmds.c:2133 #, c-format msgid "type send function %s must return type %s" msgstr "la función «send» %s del tipo debe retornar %s" -#: commands/typecmds.c:1806 +#: commands/typecmds.c:2140 #, c-format msgid "type send function %s should not be volatile" msgstr "la función «send» %s no debe ser volatile" -#: commands/typecmds.c:1833 +#: commands/typecmds.c:2167 #, c-format msgid "typmod_in function %s must return type %s" msgstr "la función typmod_in %s debe retornar tipo %s" -#: commands/typecmds.c:1840 +#: commands/typecmds.c:2174 #, c-format msgid "type modifier input function %s should not be volatile" msgstr "la función de modificadores de tipo %s no debe ser volatile" -#: commands/typecmds.c:1867 +#: commands/typecmds.c:2201 #, c-format msgid "typmod_out function %s must return type %s" msgstr "la función typmod_out %s debe retornar tipo %s" -#: commands/typecmds.c:1874 +#: commands/typecmds.c:2208 #, c-format msgid "type modifier output function %s should not be volatile" msgstr "la función de salida de modificadores de tipo %s no debe ser volatile" -#: commands/typecmds.c:1901 +#: commands/typecmds.c:2235 #, c-format msgid "type analyze function %s must return type %s" msgstr "la función de análisis %s del tipo debe retornar %s" -#: commands/typecmds.c:1947 +#: commands/typecmds.c:2264 +#, fuzzy, c-format +#| msgid "type input function %s must return type %s" +msgid "type subscripting function %s must return type %s" +msgstr "la función de entrada %s del tipo debe retornar %s" + +#: commands/typecmds.c:2274 +#, c-format +msgid "user-defined types cannot use subscripting function %s" +msgstr "" + +#: commands/typecmds.c:2320 #, c-format msgid "You must specify an operator class for the range type or define a default operator class for the subtype." msgstr "Debe especificar una clase de operadores para el tipo de rango, o definir una clase de operadores por omisión para el subtipo." -#: commands/typecmds.c:1978 +#: commands/typecmds.c:2351 #, c-format msgid "range canonical function %s must return range type" msgstr "la función canónica %s del rango debe retornar tipo de rango" -#: commands/typecmds.c:1984 +#: commands/typecmds.c:2357 #, c-format msgid "range canonical function %s must be immutable" msgstr "la función canónica %s del rango debe ser inmutable" -#: commands/typecmds.c:2020 +#: commands/typecmds.c:2393 #, c-format msgid "range subtype diff function %s must return type %s" msgstr "la función «diff» de subtipo, %s, debe retornar tipo %s" -#: commands/typecmds.c:2027 +#: commands/typecmds.c:2400 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "la función «diff» de subtipo, %s, debe ser inmutable" -#: commands/typecmds.c:2054 +#: commands/typecmds.c:2427 #, c-format msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "el valor de OID de pg_type no se definió en modo de actualización binaria" -#: commands/typecmds.c:2352 +#: commands/typecmds.c:2460 +#, fuzzy, c-format +#| msgid "pg_type array OID value not set when in binary upgrade mode" +msgid "pg_type multirange OID value not set when in binary upgrade mode" +msgstr "el valor de OID de pg_type no se definió en modo de actualización binaria" + +#: commands/typecmds.c:2493 +#, fuzzy, c-format +#| msgid "pg_type array OID value not set when in binary upgrade mode" +msgid "pg_type multirange array OID value not set when in binary upgrade mode" +msgstr "el valor de OID de pg_type no se definió en modo de actualización binaria" + +#: commands/typecmds.c:2791 #, c-format msgid "column \"%s\" of table \"%s\" contains null values" msgstr "la columna «%s» de la tabla «%s» contiene valores null" -#: commands/typecmds.c:2465 commands/typecmds.c:2667 +#: commands/typecmds.c:2904 commands/typecmds.c:3106 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "no existe la restricción «%s» en el dominio «%s»" -#: commands/typecmds.c:2469 +#: commands/typecmds.c:2908 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "no existe la restricción «%s» en el dominio «%s», omitiendo" -#: commands/typecmds.c:2674 +#: commands/typecmds.c:3113 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "la restricción «%s» en el dominio «%s» no es una restricción «check»" -#: commands/typecmds.c:2780 +#: commands/typecmds.c:3219 #, c-format msgid "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "la columna «%s» de la relación «%s» contiene valores que violan la nueva restricción" -#: commands/typecmds.c:3009 commands/typecmds.c:3207 commands/typecmds.c:3289 -#: commands/typecmds.c:3476 +#: commands/typecmds.c:3448 commands/typecmds.c:3646 commands/typecmds.c:3727 +#: commands/typecmds.c:3913 #, c-format msgid "%s is not a domain" msgstr "%s no es un dominio" -#: commands/typecmds.c:3041 +#: commands/typecmds.c:3480 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "el dominio «%2$s» ya contiene una restricción llamada «%1$s»" -#: commands/typecmds.c:3092 +#: commands/typecmds.c:3531 #, c-format msgid "cannot use table references in domain check constraint" msgstr "no se pueden usar referencias a tablas en restricción «check» para un dominio" -#: commands/typecmds.c:3219 commands/typecmds.c:3301 commands/typecmds.c:3593 +#: commands/typecmds.c:3658 commands/typecmds.c:3739 commands/typecmds.c:4030 #, c-format msgid "%s is a table's row type" msgstr "%s es el tipo de registro de una tabla" -#: commands/typecmds.c:3221 commands/typecmds.c:3303 commands/typecmds.c:3595 +#: commands/typecmds.c:3660 commands/typecmds.c:3741 commands/typecmds.c:4032 #, c-format msgid "Use ALTER TABLE instead." msgstr "Considere usar ALTER TABLE." -#: commands/typecmds.c:3228 commands/typecmds.c:3310 commands/typecmds.c:3508 +#: commands/typecmds.c:3666 commands/typecmds.c:3747 commands/typecmds.c:3945 #, c-format msgid "cannot alter array type %s" msgstr "no se puede alterar el tipo de array «%s»" -#: commands/typecmds.c:3230 commands/typecmds.c:3312 commands/typecmds.c:3510 +#: commands/typecmds.c:3668 commands/typecmds.c:3749 commands/typecmds.c:3947 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "Puede alterar el tipo %s, lo cual alterará el tipo de array también." -#: commands/typecmds.c:3578 +#: commands/typecmds.c:4015 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "ya existe un tipo llamado «%s» en el esquema «%s»" -#: commands/typecmds.c:3746 +#: commands/typecmds.c:4183 #, c-format msgid "cannot change type's storage to PLAIN" msgstr "no se puede cambiar el almacenamiento del tipo a PLAIN" -#: commands/typecmds.c:3827 +#: commands/typecmds.c:4276 #, c-format msgid "type attribute \"%s\" cannot be changed" msgstr "el atributo de tipo «%s» no puede ser cambiado" -#: commands/typecmds.c:3845 +#: commands/typecmds.c:4294 #, c-format msgid "must be superuser to alter a type" msgstr "debe ser superusuario para alterar un tipo" -#: commands/typecmds.c:3866 commands/typecmds.c:3876 +#: commands/typecmds.c:4315 commands/typecmds.c:4324 #, c-format msgid "%s is not a base type" msgstr "«%s» no es un tipo base" @@ -11060,33 +11501,34 @@ msgstr "debe ser superusuario para crear superusuarios" msgid "must be superuser to create replication users" msgstr "debe ser superusuario para crear usuarios de replicación" -#: commands/user.c:308 commands/user.c:734 -#, c-format -msgid "must be superuser to change bypassrls attribute" -msgstr "debe ser superusuario para cambiar el atributo bypassrls" +#: commands/user.c:308 +#, fuzzy, c-format +#| msgid "must be superuser to create superusers" +msgid "must be superuser to create bypassrls users" +msgstr "debe ser superusuario para crear superusuarios" #: commands/user.c:315 #, c-format msgid "permission denied to create role" msgstr "se ha denegado el permiso para crear el rol" -#: commands/user.c:325 commands/user.c:1224 commands/user.c:1231 -#: utils/adt/acl.c:5327 utils/adt/acl.c:5333 gram.y:15146 gram.y:15184 +#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15281 +#: gram.y:15326 utils/adt/acl.c:5248 utils/adt/acl.c:5254 #, c-format msgid "role name \"%s\" is reserved" msgstr "el nombre de rol «%s» está reservado" -#: commands/user.c:327 commands/user.c:1226 commands/user.c:1233 +#: commands/user.c:327 commands/user.c:1228 commands/user.c:1235 #, c-format msgid "Role names starting with \"pg_\" are reserved." msgstr "Los nombres de rol que empiezan con «pg_» están reservados." -#: commands/user.c:348 commands/user.c:1248 +#: commands/user.c:348 commands/user.c:1250 #, c-format msgid "role \"%s\" already exists" msgstr "el rol «%s» ya existe" -#: commands/user.c:414 commands/user.c:843 +#: commands/user.c:414 commands/user.c:845 #, c-format msgid "empty string is not a valid password, clearing password" msgstr "la cadena vacía no es una contraseña válida, limpiando la contraseña" @@ -11096,230 +11538,259 @@ msgstr "la cadena vacía no es una contraseña válida, limpiando la contraseña msgid "pg_authid OID value not set when in binary upgrade mode" msgstr "el valor de OID de pg_authid no se definió en modo de actualización binaria" -#: commands/user.c:720 commands/user.c:944 commands/user.c:1485 -#: commands/user.c:1627 -#, c-format -msgid "must be superuser to alter superusers" -msgstr "debe ser superusuario para alterar superusuarios" +#: commands/user.c:722 +#, fuzzy, c-format +#| msgid "must be superuser to change bypassrls attribute" +msgid "must be superuser to alter superuser roles or change superuser attribute" +msgstr "debe ser superusuario para cambiar el atributo bypassrls" -#: commands/user.c:727 +#: commands/user.c:729 +#, fuzzy, c-format +#| msgid "must be superuser or replication role to use replication slots" +msgid "must be superuser to alter replication roles or change replication attribute" +msgstr "debe ser superusuario o rol de replicación para usar slots de replicación" + +#: commands/user.c:736 #, c-format -msgid "must be superuser to alter replication users" -msgstr "debe ser superusuario para alterar usuarios de replicación" +msgid "must be superuser to change bypassrls attribute" +msgstr "debe ser superusuario para cambiar el atributo bypassrls" -#: commands/user.c:750 commands/user.c:951 +#: commands/user.c:752 commands/user.c:953 #, c-format msgid "permission denied" msgstr "permiso denegado" -#: commands/user.c:981 +#: commands/user.c:946 commands/user.c:1487 commands/user.c:1665 +#, c-format +msgid "must be superuser to alter superusers" +msgstr "debe ser superusuario para alterar superusuarios" + +#: commands/user.c:983 #, c-format msgid "must be superuser to alter settings globally" msgstr "debe ser superusuario para alterar parámetros globalmente" -#: commands/user.c:1003 +#: commands/user.c:1005 #, c-format msgid "permission denied to drop role" msgstr "se ha denegado el permiso para eliminar el rol" -#: commands/user.c:1028 +#: commands/user.c:1030 #, c-format msgid "cannot use special role specifier in DROP ROLE" msgstr "no se puede usar un especificador especial de rol en DROP ROLE" -#: commands/user.c:1038 commands/user.c:1195 commands/variable.c:770 -#: commands/variable.c:844 utils/adt/acl.c:5184 utils/adt/acl.c:5231 -#: utils/adt/acl.c:5259 utils/adt/acl.c:5277 utils/init/miscinit.c:675 +#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:778 +#: commands/variable.c:781 commands/variable.c:865 commands/variable.c:868 +#: utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 +#: utils/adt/acl.c:5198 utils/init/miscinit.c:705 #, c-format msgid "role \"%s\" does not exist" msgstr "no existe el rol «%s»" -#: commands/user.c:1043 +#: commands/user.c:1045 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "el rol «%s» no existe, omitiendo" -#: commands/user.c:1056 commands/user.c:1060 +#: commands/user.c:1058 commands/user.c:1062 #, c-format msgid "current user cannot be dropped" msgstr "el usuario activo no puede ser eliminado" -#: commands/user.c:1064 +#: commands/user.c:1066 #, c-format msgid "session user cannot be dropped" msgstr "no se puede eliminar un usuario de la sesión" -#: commands/user.c:1074 +#: commands/user.c:1076 #, c-format msgid "must be superuser to drop superusers" msgstr "debe ser superusuario para eliminar superusuarios" -#: commands/user.c:1090 +#: commands/user.c:1092 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "no se puede eliminar el rol «%s» porque otros objetos dependen de él" -#: commands/user.c:1211 +#: commands/user.c:1213 #, c-format msgid "session user cannot be renamed" msgstr "no se puede cambiar el nombre a un usuario de la sesión" -#: commands/user.c:1215 +#: commands/user.c:1217 #, c-format msgid "current user cannot be renamed" msgstr "no se puede cambiar el nombre al usuario activo" -#: commands/user.c:1258 +#: commands/user.c:1260 #, c-format msgid "must be superuser to rename superusers" msgstr "debe ser superusuario para cambiar el nombre a superusuarios" -#: commands/user.c:1265 +#: commands/user.c:1267 #, c-format msgid "permission denied to rename role" msgstr "se ha denegado el permiso para cambiar el nombre al rol" -#: commands/user.c:1286 +#: commands/user.c:1288 #, c-format msgid "MD5 password cleared because of role rename" msgstr "la contraseña MD5 fue borrada debido al cambio de nombre del rol" -#: commands/user.c:1346 +#: commands/user.c:1348 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "los nombres de columna no pueden ser incluidos en GRANT/REVOKE ROLE" -#: commands/user.c:1384 +#: commands/user.c:1386 #, c-format msgid "permission denied to drop objects" msgstr "se ha denegado el permiso para eliminar objetos" -#: commands/user.c:1411 commands/user.c:1420 +#: commands/user.c:1413 commands/user.c:1422 #, c-format msgid "permission denied to reassign objects" msgstr "se ha denegado el permiso para reasignar objetos" -#: commands/user.c:1493 commands/user.c:1635 +#: commands/user.c:1495 commands/user.c:1673 #, c-format msgid "must have admin option on role \"%s\"" msgstr "debe tener opción de admin en rol «%s»" -#: commands/user.c:1510 +#: commands/user.c:1509 +#, fuzzy, c-format +#| msgid "table \"%s\" cannot be replicated" +msgid "role \"%s\" cannot have explicit members" +msgstr "la tabla «%s» no puede replicarse" + +#: commands/user.c:1524 #, c-format msgid "must be superuser to set grantor" msgstr "debe ser superusuario para especificar el cedente (grantor)" -#: commands/user.c:1535 +#: commands/user.c:1560 +#, fuzzy, c-format +#| msgid "role \"%s\" is not a member of role \"%s\"" +msgid "role \"%s\" cannot be a member of any role" +msgstr "el rol «%s» no es un miembro del rol «%s»" + +#: commands/user.c:1573 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "el rol «%s» es un miembro del rol «%s»" -#: commands/user.c:1550 +#: commands/user.c:1588 #, c-format msgid "role \"%s\" is already a member of role \"%s\"" msgstr "el rol «%s» ya es un miembro del rol «%s»" -#: commands/user.c:1657 +#: commands/user.c:1695 #, c-format msgid "role \"%s\" is not a member of role \"%s\"" msgstr "el rol «%s» no es un miembro del rol «%s»" -#: commands/vacuum.c:129 +#: commands/vacuum.c:132 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "opción de ANALYZE «%s» no reconocida" -#: commands/vacuum.c:151 +#: commands/vacuum.c:156 #, c-format msgid "parallel option requires a value between 0 and %d" msgstr "la opción parallel requiere un valor entre 0 y %d" -#: commands/vacuum.c:163 +#: commands/vacuum.c:168 #, c-format msgid "parallel vacuum degree must be between 0 and %d" msgstr "el grado de paralelismo de vacuum debe estar entre 0 y %d" -#: commands/vacuum.c:180 +#: commands/vacuum.c:185 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "opción de VACUUM «%s» no reconocida" -#: commands/vacuum.c:203 +#: commands/vacuum.c:208 #, c-format msgid "VACUUM FULL cannot be performed in parallel" msgstr "VACUUM FULL no puede ser ejecutado en paralelo" -#: commands/vacuum.c:219 +#: commands/vacuum.c:224 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "la opción ANALYZE debe especificarse cuando se provee una lista de columnas" -#: commands/vacuum.c:309 +#: commands/vacuum.c:314 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s no puede ejecutarse desde VACUUM o ANALYZE" -#: commands/vacuum.c:319 +#: commands/vacuum.c:324 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "la opción DISABLE_PAGE_SKIPPING de VACUUM no puede usarse con FULL" -#: commands/vacuum.c:560 +#: commands/vacuum.c:331 +#, c-format +msgid "PROCESS_TOAST required with VACUUM FULL" +msgstr "" + +#: commands/vacuum.c:572 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "omitiendo «%s»: sólo un superusuario puede aplicarle VACUUM" -#: commands/vacuum.c:564 +#: commands/vacuum.c:576 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "omitiendo «%s»: sólo un superusuario o el dueño de la base de datos puede aplicarle VACUUM" -#: commands/vacuum.c:568 +#: commands/vacuum.c:580 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "omitiendo «%s»: sólo su dueño o el de la base de datos puede aplicarle VACUUM" -#: commands/vacuum.c:583 +#: commands/vacuum.c:595 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "omitiendo «%s»: sólo un superusuario puede analizarla" -#: commands/vacuum.c:587 +#: commands/vacuum.c:599 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "omitiendo «%s»: sólo un superusuario o el dueño de la base de datos puede analizarla" -#: commands/vacuum.c:591 +#: commands/vacuum.c:603 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "omitiendo «%s»: sólo su dueño o el de la base de datos puede analizarla" -#: commands/vacuum.c:670 commands/vacuum.c:766 +#: commands/vacuum.c:682 commands/vacuum.c:778 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "omitiendo el vacuum de «%s»: el candado no está disponible" -#: commands/vacuum.c:675 +#: commands/vacuum.c:687 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "omitiendo el vacuum de «%s» --- la relación ya no existe" -#: commands/vacuum.c:691 commands/vacuum.c:771 +#: commands/vacuum.c:703 commands/vacuum.c:783 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "omitiendo analyze de «%s»: el candado no está disponible" -#: commands/vacuum.c:696 +#: commands/vacuum.c:708 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "omitiendo analyze de «%s» --- la relación ya no existe" -#: commands/vacuum.c:994 +#: commands/vacuum.c:1026 #, c-format msgid "oldest xmin is far in the past" msgstr "xmin más antiguo es demasiado antiguo" -#: commands/vacuum.c:995 +#: commands/vacuum.c:1027 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -11328,32 +11799,32 @@ msgstr "" "Cierre transaciones abiertas pronto para impedir problemas por reciclaje de contadores.\n" "Puede que además necesite comprometer o abortar transacciones preparadas antiguas, o eliminar slots de replicación añejos." -#: commands/vacuum.c:1036 +#: commands/vacuum.c:1068 #, c-format msgid "oldest multixact is far in the past" msgstr "multixact más antiguo es demasiado antiguo" -#: commands/vacuum.c:1037 +#: commands/vacuum.c:1069 #, c-format msgid "Close open transactions with multixacts soon to avoid wraparound problems." msgstr "Cierre transacciones con multixact pronto para prevenir problemas por reciclaje del contador." -#: commands/vacuum.c:1623 +#: commands/vacuum.c:1726 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "algunas bases de datos no han tenido VACUUM en más de 2 mil millones de transacciones" -#: commands/vacuum.c:1624 +#: commands/vacuum.c:1727 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "Puede haber sufrido ya problemas de pérdida de datos por reciclaje del contador de transacciones." -#: commands/vacuum.c:1784 +#: commands/vacuum.c:1891 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "omitiendo «%s»: no se puede aplicar VACUUM a objetos que no son tablas o a tablas especiales de sistema" -#: commands/variable.c:165 utils/misc/guc.c:11156 utils/misc/guc.c:11218 +#: commands/variable.c:165 utils/misc/guc.c:11606 utils/misc/guc.c:11668 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Palabra clave no reconocida: «%s»." @@ -11413,7 +11884,7 @@ msgstr "SET TRANSACTION ISOLATION LEVEL debe ser llamado antes de cualquier cons msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" msgstr "SET TRANSACTION ISOLATION LEVEL no debe ser llamado en una subtransacción" -#: commands/variable.c:548 storage/lmgr/predicate.c:1623 +#: commands/variable.c:548 storage/lmgr/predicate.c:1693 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "no se puede utilizar el modo serializable en un hot standby" @@ -11448,7 +11919,13 @@ msgstr "No se puede cambiar «client_encoding» ahora." msgid "cannot change client_encoding during a parallel operation" msgstr "no se puede cambiar «client_encoding» durante una operación paralela" -#: commands/variable.c:863 +#: commands/variable.c:890 +#, fuzzy, c-format +#| msgid "permission denied to set role \"%s\"" +msgid "permission will be denied to set role \"%s\"" +msgstr "se ha denegado el permiso para definir el rol «%s»" + +#: commands/variable.c:895 #, c-format msgid "permission denied to set role \"%s\"" msgstr "se ha denegado el permiso para definir el rol «%s»" @@ -11534,333 +12011,360 @@ msgstr "el cursor «%s» no está posicionado en una fila" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "el cursor «%s» no es un recorrido simplemente actualizable de la tabla «%s»" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2404 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2451 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "el tipo del parámetro %d (%s) no coincide aquel con que fue preparado el plan (%s)" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2416 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2463 #, c-format msgid "no value found for parameter %d" msgstr "no se encontró un valor para parámetro %d" -#: executor/execExpr.c:859 parser/parse_agg.c:816 +#: executor/execExpr.c:632 executor/execExpr.c:639 executor/execExpr.c:645 +#: executor/execExprInterp.c:4023 executor/execExprInterp.c:4040 +#: executor/execExprInterp.c:4141 executor/nodeModifyTable.c:117 +#: executor/nodeModifyTable.c:128 executor/nodeModifyTable.c:145 +#: executor/nodeModifyTable.c:153 +#, c-format +msgid "table row type and query-specified row type do not match" +msgstr "el tipo de registro de la tabla no coincide con el tipo de registro de la consulta" + +#: executor/execExpr.c:633 executor/nodeModifyTable.c:118 +#, c-format +msgid "Query has too many columns." +msgstr "La consulta tiene demasiadas columnas." + +#: executor/execExpr.c:640 executor/nodeModifyTable.c:146 +#, c-format +msgid "Query provides a value for a dropped column at ordinal position %d." +msgstr "La consulta entrega un valor para una columna eliminada en la posición %d." + +#: executor/execExpr.c:646 executor/execExprInterp.c:4041 +#: executor/nodeModifyTable.c:129 +#, c-format +msgid "Table has type %s at ordinal position %d, but query expects %s." +msgstr "La tabla tiene tipo %s en posición ordinal %d, pero la consulta esperaba %s." + +#: executor/execExpr.c:1110 parser/parse_agg.c:827 #, c-format msgid "window function calls cannot be nested" msgstr "no se pueden anidar llamadas a funciones de ventana deslizante" -#: executor/execExpr.c:1318 +#: executor/execExpr.c:1615 #, c-format msgid "target type is not an array" msgstr "el tipo de destino no es un array" -#: executor/execExpr.c:1651 +#: executor/execExpr.c:1955 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "la columna de ROW() es de tipo %s en lugar de ser de tipo %s" -#: executor/execExpr.c:2176 executor/execSRF.c:708 parser/parse_func.c:135 -#: parser/parse_func.c:646 parser/parse_func.c:1020 +#: executor/execExpr.c:2480 executor/execSRF.c:718 parser/parse_func.c:136 +#: parser/parse_func.c:654 parser/parse_func.c:1030 #, c-format msgid "cannot pass more than %d argument to a function" msgid_plural "cannot pass more than %d arguments to a function" msgstr[0] "no se pueden pasar más de %d argumento a una función" msgstr[1] "no se pueden pasar más de %d argumentos a una función" -#: executor/execExpr.c:2587 executor/execExpr.c:2593 -#: executor/execExprInterp.c:2730 utils/adt/arrayfuncs.c:262 -#: utils/adt/arrayfuncs.c:560 utils/adt/arrayfuncs.c:1302 -#: utils/adt/arrayfuncs.c:3348 utils/adt/arrayfuncs.c:5308 -#: utils/adt/arrayfuncs.c:5821 -#, c-format -msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" -msgstr "el número de dimensiones del array (%d) excede el máximo permitido (%d)" +#: executor/execExpr.c:2866 parser/parse_node.c:277 parser/parse_node.c:327 +#, fuzzy, c-format +#| msgid "cannot subscript type %s because it is not an array" +msgid "cannot subscript type %s because it does not support subscripting" +msgstr "no se puede poner subíndices al tipo %s porque no es un array" + +#: executor/execExpr.c:2994 executor/execExpr.c:3016 +#, fuzzy, c-format +#| msgid "The server (version %s) does not support subscriptions." +msgid "type %s does not support subscripted assignment" +msgstr "El servidor (versión %s) no soporta suscripciones." -#: executor/execExprInterp.c:1894 +#: executor/execExprInterp.c:1916 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "El atributo %d de tipo %s ha sido eliminado" -#: executor/execExprInterp.c:1900 +#: executor/execExprInterp.c:1922 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "el atributo %d del tipo %s tiene tipo erróneo" -#: executor/execExprInterp.c:1902 executor/execExprInterp.c:3002 -#: executor/execExprInterp.c:3049 +#: executor/execExprInterp.c:1924 executor/execExprInterp.c:3052 +#: executor/execExprInterp.c:3098 #, c-format msgid "Table has type %s, but query expects %s." msgstr "La tabla tiene tipo %s, pero la consulta esperaba %s." -#: executor/execExprInterp.c:2494 +#: executor/execExprInterp.c:2003 utils/adt/expandedrecord.c:99 +#: utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1748 +#: utils/cache/typcache.c:1904 utils/cache/typcache.c:2033 +#: utils/fmgr/funcapi.c:458 +#, c-format +msgid "type %s is not composite" +msgstr "el tipo %s no es compuesto" + +#: executor/execExprInterp.c:2541 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF no está soportado para este tipo de tabla" -#: executor/execExprInterp.c:2708 +#: executor/execExprInterp.c:2754 #, c-format msgid "cannot merge incompatible arrays" msgstr "no se puede mezclar arrays incompatibles" -#: executor/execExprInterp.c:2709 +#: executor/execExprInterp.c:2755 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "El array con tipo de elemento %s no puede ser incluido en una sentencia ARRAY con tipo de elemento %s." -#: executor/execExprInterp.c:2750 executor/execExprInterp.c:2780 +#: executor/execExprInterp.c:2776 utils/adt/arrayfuncs.c:262 +#: utils/adt/arrayfuncs.c:562 utils/adt/arrayfuncs.c:1304 +#: utils/adt/arrayfuncs.c:3374 utils/adt/arrayfuncs.c:5336 +#: utils/adt/arrayfuncs.c:5853 utils/adt/arraysubs.c:150 +#: utils/adt/arraysubs.c:488 +#, c-format +msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" +msgstr "el número de dimensiones del array (%d) excede el máximo permitido (%d)" + +#: executor/execExprInterp.c:2796 executor/execExprInterp.c:2826 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "los arrays multidimensionales deben tener expresiones de arrays con dimensiones coincidentes" -#: executor/execExprInterp.c:3001 executor/execExprInterp.c:3048 +#: executor/execExprInterp.c:3051 executor/execExprInterp.c:3097 #, c-format msgid "attribute %d has wrong type" msgstr "el atributo %d tiene tipo erróneo" -#: executor/execExprInterp.c:3158 -#, c-format -msgid "array subscript in assignment must not be null" -msgstr "subíndice de array en asignación no puede ser nulo" - -#: executor/execExprInterp.c:3588 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3652 utils/adt/domains.c:149 #, c-format msgid "domain %s does not allow null values" msgstr "el dominio %s no permite valores null" -#: executor/execExprInterp.c:3603 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3667 utils/adt/domains.c:184 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "el valor para el dominio %s viola la restricción «check» «%s»" -#: executor/execExprInterp.c:3973 executor/execExprInterp.c:3990 -#: executor/execExprInterp.c:4091 executor/nodeModifyTable.c:109 -#: executor/nodeModifyTable.c:120 executor/nodeModifyTable.c:137 -#: executor/nodeModifyTable.c:145 -#, c-format -msgid "table row type and query-specified row type do not match" -msgstr "el tipo de registro de la tabla no coincide con el tipo de registro de la consulta" - -#: executor/execExprInterp.c:3974 +#: executor/execExprInterp.c:4024 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." msgstr[0] "La fila de la tabla contiene %d atributo, pero la consulta esperaba %d." msgstr[1] "La fila de la tabla contiene %d atributos, pero la consulta esperaba %d." -#: executor/execExprInterp.c:3991 executor/nodeModifyTable.c:121 -#, c-format -msgid "Table has type %s at ordinal position %d, but query expects %s." -msgstr "La tabla tiene tipo %s en posición ordinal %d, pero la consulta esperaba %s." - -#: executor/execExprInterp.c:4092 executor/execSRF.c:967 +#: executor/execExprInterp.c:4142 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "Discordancia de almacenamiento físico en atributo eliminado en la posición %d." -#: executor/execIndexing.c:550 +#: executor/execIndexing.c:571 #, c-format msgid "ON CONFLICT does not support deferrable unique constraints/exclusion constraints as arbiters" msgstr "ON CONFLICT no soporta las restricciones únicas o de exclusión postergables como árbitros" -#: executor/execIndexing.c:821 +#: executor/execIndexing.c:842 #, c-format msgid "could not create exclusion constraint \"%s\"" msgstr "no se pudo crear la restricción de exclusión «%s»" -#: executor/execIndexing.c:824 +#: executor/execIndexing.c:845 #, c-format msgid "Key %s conflicts with key %s." msgstr "La llave %s está en conflicto con la llave %s." -#: executor/execIndexing.c:826 +#: executor/execIndexing.c:847 #, c-format msgid "Key conflicts exist." msgstr "Existe un conflicto de llave." -#: executor/execIndexing.c:832 +#: executor/execIndexing.c:853 #, c-format msgid "conflicting key value violates exclusion constraint \"%s\"" msgstr "llave en conflicto viola la restricción de exclusión «%s»" -#: executor/execIndexing.c:835 +#: executor/execIndexing.c:856 #, c-format msgid "Key %s conflicts with existing key %s." msgstr "La llave %s está en conflicto con la llave existente %s." -#: executor/execIndexing.c:837 +#: executor/execIndexing.c:858 #, c-format msgid "Key conflicts with existing key." msgstr "La llave está en conflicto con una llave existente." -#: executor/execMain.c:1091 +#: executor/execMain.c:1007 #, c-format msgid "cannot change sequence \"%s\"" msgstr "no se puede cambiar la secuencia «%s»" -#: executor/execMain.c:1097 +#: executor/execMain.c:1013 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "no se puede cambiar la relación TOAST «%s»" -#: executor/execMain.c:1115 rewrite/rewriteHandler.c:2934 -#: rewrite/rewriteHandler.c:3708 +#: executor/execMain.c:1031 rewrite/rewriteHandler.c:3041 +#: rewrite/rewriteHandler.c:3824 #, c-format msgid "cannot insert into view \"%s\"" msgstr "no se puede insertar en la vista «%s»" -#: executor/execMain.c:1117 rewrite/rewriteHandler.c:2937 -#: rewrite/rewriteHandler.c:3711 +#: executor/execMain.c:1033 rewrite/rewriteHandler.c:3044 +#: rewrite/rewriteHandler.c:3827 #, c-format msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." msgstr "Para posibilitar las inserciones en la vista, provea un disparador INSTEAD OF INSERT o una regla incodicional ON INSERT DO INSTEAD." -#: executor/execMain.c:1123 rewrite/rewriteHandler.c:2942 -#: rewrite/rewriteHandler.c:3716 +#: executor/execMain.c:1039 rewrite/rewriteHandler.c:3049 +#: rewrite/rewriteHandler.c:3832 #, c-format msgid "cannot update view \"%s\"" msgstr "no se puede actualizar la vista «%s»" -#: executor/execMain.c:1125 rewrite/rewriteHandler.c:2945 -#: rewrite/rewriteHandler.c:3719 +#: executor/execMain.c:1041 rewrite/rewriteHandler.c:3052 +#: rewrite/rewriteHandler.c:3835 #, c-format msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." msgstr "Para posibilitar las actualizaciones en la vista, provea un disparador INSTEAD OF UPDATE o una regla incondicional ON UPDATE DO INSTEAD." -#: executor/execMain.c:1131 rewrite/rewriteHandler.c:2950 -#: rewrite/rewriteHandler.c:3724 +#: executor/execMain.c:1047 rewrite/rewriteHandler.c:3057 +#: rewrite/rewriteHandler.c:3840 #, c-format msgid "cannot delete from view \"%s\"" msgstr "no se puede eliminar de la vista «%s»" -#: executor/execMain.c:1133 rewrite/rewriteHandler.c:2953 -#: rewrite/rewriteHandler.c:3727 +#: executor/execMain.c:1049 rewrite/rewriteHandler.c:3060 +#: rewrite/rewriteHandler.c:3843 #, c-format msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." msgstr "Para posibilitar las eliminaciones en la vista, provea un disparador INSTEAD OF DELETE o una regla incondicional ON DELETE DO INSTEAD." -#: executor/execMain.c:1144 +#: executor/execMain.c:1060 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "no se puede cambiar la vista materializada «%s»" -#: executor/execMain.c:1156 +#: executor/execMain.c:1072 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "no se puede insertar en la tabla foránea «%s»" -#: executor/execMain.c:1162 +#: executor/execMain.c:1078 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "la tabla foránea «%s» no permite inserciones" -#: executor/execMain.c:1169 +#: executor/execMain.c:1085 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "no se puede actualizar la tabla foránea «%s»" -#: executor/execMain.c:1175 +#: executor/execMain.c:1091 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "la tabla foránea «%s» no permite actualizaciones" -#: executor/execMain.c:1182 +#: executor/execMain.c:1098 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "no se puede eliminar desde la tabla foránea «%s»" -#: executor/execMain.c:1188 +#: executor/execMain.c:1104 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "la tabla foránea «%s» no permite eliminaciones" -#: executor/execMain.c:1199 +#: executor/execMain.c:1115 #, c-format msgid "cannot change relation \"%s\"" msgstr "no se puede cambiar la relación «%s»" -#: executor/execMain.c:1226 +#: executor/execMain.c:1142 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "no se puede bloquear registros de la secuencia «%s»" -#: executor/execMain.c:1233 +#: executor/execMain.c:1149 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "no se puede bloquear registros en la relación TOAST «%s»" -#: executor/execMain.c:1240 +#: executor/execMain.c:1156 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "no se puede bloquear registros en la vista «%s»" -#: executor/execMain.c:1248 +#: executor/execMain.c:1164 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "no se puede bloquear registros en la vista materializada «%s»" -#: executor/execMain.c:1257 executor/execMain.c:2627 +#: executor/execMain.c:1173 executor/execMain.c:2555 #: executor/nodeLockRows.c:132 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "no se puede bloquear registros en la tabla foránea «%s»" -#: executor/execMain.c:1263 +#: executor/execMain.c:1179 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "no se puede bloquear registros en la tabla «%s»" -#: executor/execMain.c:1879 +#: executor/execMain.c:1803 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "el nuevo registro para la relación «%s» viola la restricción de partición" -#: executor/execMain.c:1881 executor/execMain.c:1964 executor/execMain.c:2012 -#: executor/execMain.c:2120 +#: executor/execMain.c:1805 executor/execMain.c:1888 executor/execMain.c:1938 +#: executor/execMain.c:2047 #, c-format msgid "Failing row contains %s." msgstr "La fila que falla contiene %s." -#: executor/execMain.c:1961 +#: executor/execMain.c:1885 #, c-format msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" msgstr "el valor nulo en la columna «%s» de la relación «%s» viola la restricción de no nulo" -#: executor/execMain.c:2010 +#: executor/execMain.c:1936 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "el nuevo registro para la relación «%s» viola la restricción «check» «%s»" -#: executor/execMain.c:2118 +#: executor/execMain.c:2045 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "el nuevo registro para la vista «%s» viola la opción check" -#: executor/execMain.c:2128 +#: executor/execMain.c:2055 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "el nuevo registro viola la política de seguridad de registros «%s» para la tabla «%s»" -#: executor/execMain.c:2133 +#: executor/execMain.c:2060 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "el nuevo registro viola la política de seguridad de registros para la tabla «%s»" -#: executor/execMain.c:2140 +#: executor/execMain.c:2067 #, c-format msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "el nuevo registro viola la política de seguridad de registros «%s» (expresión USING) para la tabla «%s»" -#: executor/execMain.c:2145 +#: executor/execMain.c:2072 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "el nuevo registro viola la política de seguridad de registros (expresión USING) para la tabla «%s»" -#: executor/execPartition.c:341 +#: executor/execPartition.c:322 #, c-format msgid "no partition of relation \"%s\" found for row" msgstr "no se encontró una partición de «%s» para el registro" -#: executor/execPartition.c:344 +#: executor/execPartition.c:325 #, c-format msgid "Partition key of the failing row contains %s." msgstr "La llave de particionamiento de la fila que falla contiene %s." @@ -11880,45 +12384,46 @@ msgstr "actualización simultánea, reintentando" msgid "concurrent delete, retrying" msgstr "eliminacón concurrente, reintentando" -#: executor/execReplication.c:269 parser/parse_oper.c:228 -#: utils/adt/array_userfuncs.c:719 utils/adt/array_userfuncs.c:858 -#: utils/adt/arrayfuncs.c:3626 utils/adt/arrayfuncs.c:4146 -#: utils/adt/arrayfuncs.c:6132 utils/adt/rowtypes.c:1182 +#: executor/execReplication.c:269 parser/parse_cte.c:502 +#: parser/parse_oper.c:233 utils/adt/array_userfuncs.c:720 +#: utils/adt/array_userfuncs.c:859 utils/adt/arrayfuncs.c:3654 +#: utils/adt/arrayfuncs.c:4174 utils/adt/arrayfuncs.c:6166 +#: utils/adt/rowtypes.c:1203 #, c-format msgid "could not identify an equality operator for type %s" msgstr "no se pudo identificar un operador de igualdad para el tipo %s" -#: executor/execReplication.c:586 +#: executor/execReplication.c:590 #, c-format msgid "cannot update table \"%s\" because it does not have a replica identity and publishes updates" msgstr "no se puede actualizar la tabla «%s» porque no tiene identidad de replicación y publica updates" -#: executor/execReplication.c:588 +#: executor/execReplication.c:592 #, c-format msgid "To enable updating the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "Para habilitar la actualización de la tabla, configure REPLICA IDENTITY utilizando ALTER TABLE." -#: executor/execReplication.c:592 +#: executor/execReplication.c:596 #, c-format msgid "cannot delete from table \"%s\" because it does not have a replica identity and publishes deletes" msgstr "no se puede eliminar de la tabla «%s» porque no tiene una identidad de replicación y publica deletes" -#: executor/execReplication.c:594 +#: executor/execReplication.c:598 #, c-format msgid "To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "para habilitar la eliminación en la tabla, configure REPLICA IDENTITY utilizando ALTER TABLE." -#: executor/execReplication.c:613 executor/execReplication.c:621 +#: executor/execReplication.c:617 executor/execReplication.c:625 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "no se puede usar la relación «%s.%s» como destino de replicación lógica" -#: executor/execReplication.c:615 +#: executor/execReplication.c:619 #, c-format msgid "\"%s.%s\" is a foreign table." msgstr "«%s.%s» es una tabla foránea." -#: executor/execReplication.c:623 +#: executor/execReplication.c:627 #, c-format msgid "\"%s.%s\" is not a table." msgstr "«%s.%s» no es una tabla." @@ -11928,138 +12433,151 @@ msgstr "«%s.%s» no es una tabla." msgid "rows returned by function are not all of the same row type" msgstr "las filas retornadas por la función no tienen todas el mismo tipo de registro" -#: executor/execSRF.c:363 executor/execSRF.c:657 +#: executor/execSRF.c:365 +#, fuzzy, c-format +#| msgid "table-function protocol for materialize mode was not followed" +msgid "table-function protocol for value-per-call mode was not followed" +msgstr "no se siguió el protocolo de función tabular para el modo de materialización" + +#: executor/execSRF.c:373 executor/execSRF.c:667 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "no se siguió el protocolo de función tabular para el modo de materialización" -#: executor/execSRF.c:370 executor/execSRF.c:675 +#: executor/execSRF.c:380 executor/execSRF.c:685 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "modo de retorno de la función tabular no es reconocido: %d" -#: executor/execSRF.c:884 +#: executor/execSRF.c:894 #, c-format msgid "function returning setof record called in context that cannot accept type record" msgstr "se llamó una función que retorna «setof record» en un contexto que no puede aceptar el tipo record" -#: executor/execSRF.c:940 executor/execSRF.c:956 executor/execSRF.c:966 +#: executor/execSRF.c:950 executor/execSRF.c:966 executor/execSRF.c:976 #, c-format msgid "function return row and query-specified return row do not match" msgstr "la fila de retorno especificada en la consulta no coincide con fila de retorno de la función" -#: executor/execSRF.c:941 +#: executor/execSRF.c:951 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." msgstr[0] "Fila retornada contiene %d atributo, pero la consulta esperaba %d." msgstr[1] "Fila retornada contiene %d atributos, pero la consulta esperaba %d." -#: executor/execSRF.c:957 +#: executor/execSRF.c:967 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "Tipo retornado %s en posición ordinal %d, pero la consulta esperaba %s." -#: executor/execUtils.c:750 +#: executor/execTuples.c:146 executor/execTuples.c:353 +#: executor/execTuples.c:521 executor/execTuples.c:712 +#, fuzzy, c-format +#| msgid "cannot use system column \"%s\" in partition key" +msgid "cannot retrieve a system column in this context" +msgstr "no se puede usar la columna de sistema «%s» en llave de particionamiento" + +#: executor/execUtils.c:736 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "la vista materializada «%s» no ha sido poblada" -#: executor/execUtils.c:752 +#: executor/execUtils.c:738 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "Use la orden REFRESH MATERIALIZED VIEW." -#: executor/functions.c:231 +#: executor/functions.c:217 #, c-format msgid "could not determine actual type of argument declared %s" msgstr "no se pudo determinar el tipo de argumento declarado %s" -#: executor/functions.c:528 +#: executor/functions.c:515 #, c-format msgid "cannot COPY to/from client in a SQL function" msgstr "no se puede ejecutar COPY desde/a un cliente en una función SQL" #. translator: %s is a SQL statement name -#: executor/functions.c:534 +#: executor/functions.c:521 #, c-format msgid "%s is not allowed in a SQL function" msgstr "%s no está permitido en una función SQL" #. translator: %s is a SQL statement name -#: executor/functions.c:542 executor/spi.c:1471 executor/spi.c:2257 +#: executor/functions.c:529 executor/spi.c:1634 executor/spi.c:2460 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s no está permitido en una función no-«volatile»" -#: executor/functions.c:1430 +#: executor/functions.c:1442 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "función SQL «%s» en la sentencia %d" -#: executor/functions.c:1456 +#: executor/functions.c:1468 #, c-format msgid "SQL function \"%s\" during startup" msgstr "función SQL «%s» durante el inicio" -#: executor/functions.c:1549 +#: executor/functions.c:1571 #, c-format msgid "calling procedures with output arguments is not supported in SQL functions" msgstr "no está permitido invocar procedimientos con arguments de salida en funciones SQL" -#: executor/functions.c:1671 executor/functions.c:1708 -#: executor/functions.c:1722 executor/functions.c:1812 -#: executor/functions.c:1845 executor/functions.c:1859 +#: executor/functions.c:1705 executor/functions.c:1743 +#: executor/functions.c:1757 executor/functions.c:1847 +#: executor/functions.c:1880 executor/functions.c:1894 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "el tipo de retorno de función declarada para retornar %s no concuerda" -#: executor/functions.c:1673 +#: executor/functions.c:1707 #, c-format msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." msgstr "La sentencia final de la función debe ser un SELECT o INSERT/UPDATE/DELETE RETURNING." -#: executor/functions.c:1710 +#: executor/functions.c:1745 #, c-format msgid "Final statement must return exactly one column." msgstr "La sentencia final debe retornar exactamente una columna." -#: executor/functions.c:1724 +#: executor/functions.c:1759 #, c-format msgid "Actual return type is %s." msgstr "El verdadero tipo de retorno es %s." -#: executor/functions.c:1814 +#: executor/functions.c:1849 #, c-format msgid "Final statement returns too many columns." msgstr "La sentencia final retorna demasiadas columnas." -#: executor/functions.c:1847 +#: executor/functions.c:1882 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "La sentencia final retorna %s en lugar de %s en la columna %d." -#: executor/functions.c:1861 +#: executor/functions.c:1896 #, c-format msgid "Final statement returns too few columns." msgstr "La sentencia final retorna muy pocas columnas." -#: executor/functions.c:1889 +#: executor/functions.c:1924 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "el tipo de retorno %s no es soportado en funciones SQL" -#: executor/nodeAgg.c:3076 executor/nodeAgg.c:3085 executor/nodeAgg.c:3097 +#: executor/nodeAgg.c:3083 executor/nodeAgg.c:3092 executor/nodeAgg.c:3104 #, c-format msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" msgstr "EOF inesperado para la cinta %d: se requerían %zu bytes, se leyeron %zu bytes" -#: executor/nodeAgg.c:4022 parser/parse_agg.c:655 parser/parse_agg.c:685 +#: executor/nodeAgg.c:3977 parser/parse_agg.c:666 parser/parse_agg.c:696 #, c-format msgid "aggregate function calls cannot be nested" msgstr "no se pueden anidar llamadas a funciones de agregación" -#: executor/nodeAgg.c:4230 executor/nodeWindowAgg.c:2836 +#: executor/nodeAgg.c:4185 executor/nodeWindowAgg.c:2836 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "la función de agregación %u necesita tener tipos de entrada y transición compatibles" @@ -12104,42 +12622,32 @@ msgstr "RIGHT JOIN sólo está soportado con condiciones que se pueden usar con msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "FULL JOIN sólo está soportado con condiciones que se pueden usar con merge join" -#: executor/nodeModifyTable.c:110 -#, c-format -msgid "Query has too many columns." -msgstr "La consulta tiene demasiadas columnas." - -#: executor/nodeModifyTable.c:138 -#, c-format -msgid "Query provides a value for a dropped column at ordinal position %d." -msgstr "La consulta entrega un valor para una columna eliminada en la posición %d." - -#: executor/nodeModifyTable.c:146 +#: executor/nodeModifyTable.c:154 #, c-format msgid "Query has too few columns." msgstr "La consulta tiene muy pocas columnas." -#: executor/nodeModifyTable.c:839 executor/nodeModifyTable.c:913 +#: executor/nodeModifyTable.c:1186 executor/nodeModifyTable.c:1260 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "el registro a ser eliminado ya fue modificado por una operación disparada por la orden actual" -#: executor/nodeModifyTable.c:1220 +#: executor/nodeModifyTable.c:1435 #, c-format msgid "invalid ON UPDATE specification" msgstr "especificación ON UPDATE no válida" -#: executor/nodeModifyTable.c:1221 +#: executor/nodeModifyTable.c:1436 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "La tupla de resultado aparecería en una partición diferente que la tupla original." -#: executor/nodeModifyTable.c:1592 +#: executor/nodeModifyTable.c:2026 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "la orden ON CONFLICT DO UPDATE no puede afectar el registro una segunda vez" -#: executor/nodeModifyTable.c:1593 +#: executor/nodeModifyTable.c:2027 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "Asegúrese de que ningún registro propuesto para inserción dentro de la misma orden tenga valores duplicados restringidos." @@ -12155,7 +12663,7 @@ msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "el parámetro TABLESAMPLE REPEATABLE no puede ser null" #: executor/nodeSubplan.c:346 executor/nodeSubplan.c:385 -#: executor/nodeSubplan.c:1151 +#: executor/nodeSubplan.c:1159 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "una subconsulta utilizada como expresión retornó más de un registro" @@ -12215,58 +12723,70 @@ msgstr "la posición final del marco no debe ser negativa" msgid "aggregate function %s does not support use as a window function" msgstr "la función de agregación %s no permite ser usada como función ventana" -#: executor/spi.c:228 executor/spi.c:297 +#: executor/spi.c:237 executor/spi.c:306 #, c-format msgid "invalid transaction termination" msgstr "terminación de transacción no válida" -#: executor/spi.c:242 +#: executor/spi.c:251 #, c-format msgid "cannot commit while a subtransaction is active" msgstr "no se puede comprometer mientras hay una subtransacción activa" -#: executor/spi.c:303 +#: executor/spi.c:312 #, c-format msgid "cannot roll back while a subtransaction is active" msgstr "no se puede hacer rollback mientras hay una subtransacción activa" -#: executor/spi.c:372 +#: executor/spi.c:381 #, c-format msgid "transaction left non-empty SPI stack" msgstr "transacción dejó un stack SPI no vacío" -#: executor/spi.c:373 executor/spi.c:435 +#: executor/spi.c:382 executor/spi.c:444 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "Revise llamadas a «SPI_finish» faltantes." -#: executor/spi.c:434 +#: executor/spi.c:443 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "subtransacción dejó un stack SPI no vacío" -#: executor/spi.c:1335 +#: executor/spi.c:1496 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "no se puede abrir plan de varias consultas como cursor" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1340 +#: executor/spi.c:1501 #, c-format msgid "cannot open %s query as cursor" msgstr "no se puede abrir consulta %s como cursor" -#: executor/spi.c:1445 +#: executor/spi.c:1608 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE no está soportado" -#: executor/spi.c:1446 parser/analyze.c:2508 +#: executor/spi.c:1609 parser/analyze.c:2806 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Los cursores declarados SCROLL deben ser READ ONLY." -#: executor/spi.c:2560 +#: executor/spi.c:2784 +#, fuzzy, c-format +#| msgid "SQL function \"%s\"" +msgid "SQL expression \"%s\"" +msgstr "función SQL «%s»" + +#: executor/spi.c:2789 +#, fuzzy, c-format +#| msgid "SQL statement \"%s\"" +msgid "PL/pgSQL assignment \"%s\"" +msgstr "sentencia SQL: «%s»" + +#: executor/spi.c:2792 #, c-format msgid "SQL statement \"%s\"" msgstr "sentencia SQL: «%s»" @@ -12291,2264 +12811,2842 @@ msgstr "el nombre de opción «%s» no es válido" msgid "Valid options in this context are: %s" msgstr "Las opciones válidas en este contexto son: %s" -#: jit/jit.c:205 utils/fmgr/dfmgr.c:209 utils/fmgr/dfmgr.c:417 -#: utils/fmgr/dfmgr.c:465 +#: gram.y:1107 #, c-format -msgid "could not access file \"%s\": %m" -msgstr "no se pudo acceder al archivo «%s»: %m" +msgid "UNENCRYPTED PASSWORD is no longer supported" +msgstr "UNENCRYPTED PASSWORD ya no está soportado" -#: jit/llvm/llvmjit.c:595 +#: gram.y:1108 #, c-format -msgid "time to inline: %.3fs, opt: %.3fs, emit: %.3fs" -msgstr "tiempo en «inline»: %.3fs, opt: %.3fs, emisión: %.3fs" +msgid "Remove UNENCRYPTED to store the password in encrypted form instead." +msgstr "Quite UNENCRYPTED para almacenar la contraseña en su lugar en forma cifrada." -#: lib/dshash.c:247 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 -#: utils/mmgr/dsa.c:805 +#: gram.y:1170 #, c-format -msgid "Failed on DSA request of size %zu." -msgstr "Falla en petición DSA de tamaño %zu." +msgid "unrecognized role option \"%s\"" +msgstr "opción de rol «%s» no reconocida" -#: libpq/auth-scram.c:248 +#: gram.y:1417 gram.y:1432 #, c-format -msgid "client selected an invalid SASL authentication mechanism" -msgstr "cliente eligió un mecanismo de autentificación SASL no válido" +msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" +msgstr "CREATE SCHEMA IF NOT EXISTS no puede incluir elementos de esquema" -#: libpq/auth-scram.c:269 libpq/auth-scram.c:509 libpq/auth-scram.c:520 +#: gram.y:1578 #, c-format -msgid "invalid SCRAM secret for user \"%s\"" -msgstr "el secreto SCRAM para el usuario «%s» no es válido" +msgid "current database cannot be changed" +msgstr "no se puede cambiar la base de datos activa" -#: libpq/auth-scram.c:280 +#: gram.y:1702 #, c-format -msgid "User \"%s\" does not have a valid SCRAM secret." -msgstr "El usuario «%s» no tiene un secreto SCRAM válido." +msgid "time zone interval must be HOUR or HOUR TO MINUTE" +msgstr "el intervalo de huso horario debe ser HOUR o HOUR TO MINUTE" -#: libpq/auth-scram.c:358 libpq/auth-scram.c:363 libpq/auth-scram.c:693 -#: libpq/auth-scram.c:701 libpq/auth-scram.c:806 libpq/auth-scram.c:819 -#: libpq/auth-scram.c:829 libpq/auth-scram.c:937 libpq/auth-scram.c:944 -#: libpq/auth-scram.c:959 libpq/auth-scram.c:974 libpq/auth-scram.c:988 -#: libpq/auth-scram.c:1006 libpq/auth-scram.c:1021 libpq/auth-scram.c:1321 -#: libpq/auth-scram.c:1329 +#: gram.y:2270 #, c-format -msgid "malformed SCRAM message" -msgstr "mensaje SCRAM mal formado" +msgid "column number must be in range from 1 to %d" +msgstr "el número de columna debe estar en el rango de 1 a %d" -#: libpq/auth-scram.c:359 +#: gram.y:2811 #, c-format -msgid "The message is empty." -msgstr "El mensaje está vacío." +msgid "sequence option \"%s\" not supported here" +msgstr "la opción de secuencia «%s» no está soportado aquí" -#: libpq/auth-scram.c:364 +#: gram.y:2840 #, c-format -msgid "Message length does not match input length." -msgstr "El largo del mensaje no coincide con el largo de entrada." +msgid "modulus for hash partition provided more than once" +msgstr "el módulo para partición de hash fue especificado más de una vez" -#: libpq/auth-scram.c:396 +#: gram.y:2849 #, c-format -msgid "invalid SCRAM response" -msgstr "respuesta SCRAM no válida" +msgid "remainder for hash partition provided more than once" +msgstr "el remanentde para partición de hash fue especificado más de una vez" -#: libpq/auth-scram.c:397 +#: gram.y:2856 #, c-format -msgid "Nonce does not match." -msgstr "El «nonce» no coincide." +msgid "unrecognized hash partition bound specification \"%s\"" +msgstr "especificación de borde de partición hash «%s» no reconocida" -#: libpq/auth-scram.c:471 +#: gram.y:2864 #, c-format -msgid "could not generate random salt" -msgstr "no se pudo generar una sal aleatoria" +msgid "modulus for hash partition must be specified" +msgstr "el módulo para una partición hash debe ser especificado" -#: libpq/auth-scram.c:694 +#: gram.y:2868 #, c-format -msgid "Expected attribute \"%c\" but found \"%s\"." -msgstr "Se esperaba un atributo «%c» pero se encontró «%s»." +msgid "remainder for hash partition must be specified" +msgstr "remanente en partición hash debe ser especificado" -#: libpq/auth-scram.c:702 libpq/auth-scram.c:830 +#: gram.y:3069 gram.y:3102 #, c-format -msgid "Expected character \"=\" for attribute \"%c\"." -msgstr "Se esperaba el carácter «=» para el atributo «%c»." +msgid "STDIN/STDOUT not allowed with PROGRAM" +msgstr "STDIN/STDOUT no están permitidos con PROGRAM" -#: libpq/auth-scram.c:807 +#: gram.y:3075 #, c-format -msgid "Attribute expected, but found end of string." -msgstr "Se esperaba un atributo, se encontró el fin de la cadena." +msgid "WHERE clause not allowed with COPY TO" +msgstr "la cláusula WHERE no está permitida con COPY TO" -#: libpq/auth-scram.c:820 +#: gram.y:3407 gram.y:3414 gram.y:11687 gram.y:11695 #, c-format -msgid "Attribute expected, but found invalid character \"%s\"." -msgstr "Se esperaba un atributo, se encontró el carácter no válido «%s»." +msgid "GLOBAL is deprecated in temporary table creation" +msgstr "GLOBAL está obsoleto para la creación de tablas temporales" -#: libpq/auth-scram.c:938 libpq/auth-scram.c:960 +#: gram.y:3663 #, c-format -msgid "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not include channel binding data." -msgstr "El cliente seleccionó SCRAM-SHA-256-PLUS, pero el mensaje SCRAM no incluye los datos de enlazado (binding) del canal." +msgid "for a generated column, GENERATED ALWAYS must be specified" +msgstr "para una columna generada, GENERATED ALWAYS debe ser especificado" -#: libpq/auth-scram.c:945 libpq/auth-scram.c:975 +#: gram.y:3931 utils/adt/ri_triggers.c:2032 #, c-format -msgid "Comma expected, but found character \"%s\"." -msgstr "Se esperaba una coma, se encontró el carácter «%s»." +msgid "MATCH PARTIAL not yet implemented" +msgstr "MATCH PARTIAL no está implementada" -#: libpq/auth-scram.c:966 +#: gram.y:4632 #, c-format -msgid "SCRAM channel binding negotiation error" -msgstr "error de negociación de enlazado (binding) de canal SCRAM" +msgid "CREATE EXTENSION ... FROM is no longer supported" +msgstr "CREATE EXTENSION ... FROM ya no está soportado" -#: libpq/auth-scram.c:967 +#: gram.y:5295 #, c-format -msgid "The client supports SCRAM channel binding but thinks the server does not. However, this server does support channel binding." -msgstr "El cliente soporta enlazado (binding) de canal SCRAM, pero piensa que el servidor no. Sin embargo, este servidor sí soporta enlazado de canal." +msgid "unrecognized row security option \"%s\"" +msgstr "opción de seguridad de registro «%s» no reconocida" -#: libpq/auth-scram.c:989 +#: gram.y:5296 #, c-format -msgid "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM message includes channel binding data." -msgstr "El cliente seleccionó SCRAM-SHA-256 sin enlazado de canal, pero el mensaje SCRAM incluye datos de enlazado de canal." +msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." +msgstr "sólo se admiten actualmente políticas PERMISSIVE o RESTRICTIVE." -#: libpq/auth-scram.c:1000 -#, c-format -msgid "unsupported SCRAM channel-binding type \"%s\"" -msgstr "tipo de enlazado de canal SCRAM «%s» no soportado" +#: gram.y:5378 +#, fuzzy, c-format +#| msgid "nested CREATE EXTENSION is not supported" +msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" +msgstr "los CREATE EXTENSION anidados no están soportados" + +#: gram.y:5415 +msgid "duplicate trigger events specified" +msgstr "se han especificado eventos de disparador duplicados" -#: libpq/auth-scram.c:1007 +#: gram.y:5556 parser/parse_utilcmd.c:3734 parser/parse_utilcmd.c:3760 #, c-format -msgid "Unexpected channel-binding flag \"%s\"." -msgstr "Indicador de enlazado de canal «%s» inesperado." +msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" +msgstr "una restricción declarada INITIALLY DEFERRED debe ser DEFERRABLE" -#: libpq/auth-scram.c:1017 +#: gram.y:5563 #, c-format -msgid "client uses authorization identity, but it is not supported" -msgstr "el cliente usa identidad de autorización, pero no está soportada" +msgid "conflicting constraint properties" +msgstr "propiedades de restricción contradictorias" -#: libpq/auth-scram.c:1022 +#: gram.y:5659 #, c-format -msgid "Unexpected attribute \"%s\" in client-first-message." -msgstr "Atributo inesperado \"%s\" en client-first-message." +msgid "CREATE ASSERTION is not yet implemented" +msgstr "CREATE ASSERTION no está implementado" -#: libpq/auth-scram.c:1038 +#: gram.y:6042 #, c-format -msgid "client requires an unsupported SCRAM extension" -msgstr "el cliente requiere una extensión SCRAM no soportada" +msgid "RECHECK is no longer required" +msgstr "RECHECK ya no es requerido" -#: libpq/auth-scram.c:1052 +#: gram.y:6043 #, c-format -msgid "non-printable characters in SCRAM nonce" -msgstr "caracteres no imprimibles en el «nonce» SCRAM" +msgid "Update your data type." +msgstr "Actualice su tipo de datos." -#: libpq/auth-scram.c:1169 +#: gram.y:7768 #, c-format -msgid "could not generate random nonce" -msgstr "no se pudo generar un «nonce» aleatorio" +msgid "aggregates cannot have output arguments" +msgstr "las funciones de agregación no pueden tener argumentos de salida" -#: libpq/auth-scram.c:1179 +#: gram.y:8210 utils/adt/regproc.c:709 utils/adt/regproc.c:750 #, c-format -msgid "could not encode random nonce" -msgstr "no se pudo codificar un «nonce» aleatorio" +msgid "missing argument" +msgstr "falta un argumento" -#: libpq/auth-scram.c:1285 +#: gram.y:8211 utils/adt/regproc.c:710 utils/adt/regproc.c:751 #, c-format -msgid "SCRAM channel binding check failed" -msgstr "la verificación de enlazado (binding) de canal SCRAM falló" +msgid "Use NONE to denote the missing argument of a unary operator." +msgstr "Use NONE para denotar el argumento faltante de un operador unario." -#: libpq/auth-scram.c:1303 +#: gram.y:10150 gram.y:10168 #, c-format -msgid "unexpected SCRAM channel-binding attribute in client-final-message" -msgstr "atributo de enlazado de canal SCRAM inesperado en client-final-message" +msgid "WITH CHECK OPTION not supported on recursive views" +msgstr "WITH CHECK OPTION no está soportado con vistas recursivas" -#: libpq/auth-scram.c:1322 +#: gram.y:11824 #, c-format -msgid "Malformed proof in client-final-message." -msgstr "Prueba (proof) mal formada en client-final-message." +msgid "LIMIT #,# syntax is not supported" +msgstr "la sintaxis LIMIT #,# no está soportada" -#: libpq/auth-scram.c:1330 +#: gram.y:11825 #, c-format -msgid "Garbage found at the end of client-final-message." -msgstr "Basura encontrada al final de client-final-message." +msgid "Use separate LIMIT and OFFSET clauses." +msgstr "Use cláusulas LIMIT y OFFSET separadas." -#: libpq/auth.c:280 +#: gram.y:12163 gram.y:12188 #, c-format -msgid "authentication failed for user \"%s\": host rejected" -msgstr "la autentificación falló para el usuario «%s»: anfitrión rechazado" +msgid "VALUES in FROM must have an alias" +msgstr "VALUES en FROM debe tener un alias" -#: libpq/auth.c:283 +#: gram.y:12164 gram.y:12189 #, c-format -msgid "\"trust\" authentication failed for user \"%s\"" -msgstr "la autentificación «trust» falló para el usuario «%s»" +msgid "For example, FROM (VALUES ...) [AS] foo." +msgstr "Por ejemplo, FROM (VALUES ...) [AS] foo." -#: libpq/auth.c:286 +#: gram.y:12169 gram.y:12194 #, c-format -msgid "Ident authentication failed for user \"%s\"" -msgstr "la autentificación Ident falló para el usuario «%s»" +msgid "subquery in FROM must have an alias" +msgstr "las subconsultas en FROM deben tener un alias" -#: libpq/auth.c:289 +#: gram.y:12170 gram.y:12195 #, c-format -msgid "Peer authentication failed for user \"%s\"" -msgstr "la autentificación Peer falló para el usuario «%s»" +msgid "For example, FROM (SELECT ...) [AS] foo." +msgstr "Por ejemplo, FROM (SELECT ...) [AS] foo." -#: libpq/auth.c:294 +#: gram.y:12690 #, c-format -msgid "password authentication failed for user \"%s\"" -msgstr "la autentificación password falló para el usuario «%s»" +msgid "only one DEFAULT value is allowed" +msgstr "Sólo se permite un valor DEFAULT" -#: libpq/auth.c:299 +#: gram.y:12699 #, c-format -msgid "GSSAPI authentication failed for user \"%s\"" -msgstr "la autentificación GSSAPI falló para el usuario «%s»" +msgid "only one PATH value per column is allowed" +msgstr "sólo se permite un valor de PATH por columna" -#: libpq/auth.c:302 +#: gram.y:12708 #, c-format -msgid "SSPI authentication failed for user \"%s\"" -msgstr "la autentificación SSPI falló para el usuario «%s»" +msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" +msgstr "declaraciones NULL/NOT NULL en conflicto o redundantes para la columna «%s»" -#: libpq/auth.c:305 +#: gram.y:12717 #, c-format -msgid "PAM authentication failed for user \"%s\"" -msgstr "la autentificación PAM falló para el usuario «%s»" +msgid "unrecognized column option \"%s\"" +msgstr "opción de columna «%s» no reconocida" -#: libpq/auth.c:308 +#: gram.y:12971 #, c-format -msgid "BSD authentication failed for user \"%s\"" -msgstr "la autentificación BSD falló para el usuario «%s»" +msgid "precision for type float must be at least 1 bit" +msgstr "la precisión para el tipo float debe ser al menos 1 bit" -#: libpq/auth.c:311 +#: gram.y:12980 #, c-format -msgid "LDAP authentication failed for user \"%s\"" -msgstr "la autentificación LDAP falló para el usuario «%s»" +msgid "precision for type float must be less than 54 bits" +msgstr "la precisión para el tipo float debe ser menor de 54 bits" -#: libpq/auth.c:314 +#: gram.y:13478 #, c-format -msgid "certificate authentication failed for user \"%s\"" -msgstr "la autentificación por certificado falló para el usuario «%s»" +msgid "wrong number of parameters on left side of OVERLAPS expression" +msgstr "el número de parámetros es incorrecto al lado izquierdo de la expresión OVERLAPS" -#: libpq/auth.c:317 +#: gram.y:13483 #, c-format -msgid "RADIUS authentication failed for user \"%s\"" -msgstr "la autentificación RADIUS falló para el usuario «%s»" +msgid "wrong number of parameters on right side of OVERLAPS expression" +msgstr "el número de parámetros es incorrecto al lado derecho de la expresión OVERLAPS" -#: libpq/auth.c:320 +#: gram.y:13651 #, c-format -msgid "authentication failed for user \"%s\": invalid authentication method" -msgstr "la autentificación falló para el usuario «%s»: método de autentificación no válido" +msgid "UNIQUE predicate is not yet implemented" +msgstr "el predicado UNIQUE no está implementado" -#: libpq/auth.c:324 +#: gram.y:14010 #, c-format -msgid "Connection matched pg_hba.conf line %d: \"%s\"" -msgstr "La conexión coincidió con la línea %d de pg_hba.conf: «%s»" +msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" +msgstr "no se permiten múltiples cláusulas ORDER BY con WITHIN GROUP" -#: libpq/auth.c:371 +#: gram.y:14015 #, c-format -msgid "client certificates can only be checked if a root certificate store is available" -msgstr "los certificados de cliente sólo pueden verificarse si un almacén de certificado raíz está disponible" +msgid "cannot use DISTINCT with WITHIN GROUP" +msgstr "no se permite DISTINCT con WITHIN GROUP" -#: libpq/auth.c:382 +#: gram.y:14020 #, c-format -msgid "connection requires a valid client certificate" -msgstr "la conexión requiere un certificado de cliente válido" +msgid "cannot use VARIADIC with WITHIN GROUP" +msgstr "no se permite VARIADIC con WITHIN GROUP" -#: libpq/auth.c:392 +#: gram.y:14544 gram.y:14567 #, c-format -msgid "GSSAPI encryption can only be used with gss, trust, or reject authentication methods" -msgstr "el cifrado GSSAPI sólo puede ser usado con los métodos gss, trust o reject" +msgid "frame start cannot be UNBOUNDED FOLLOWING" +msgstr "el inicio de «frame» no puede ser UNBOUNDED FOLLOWING" -#: libpq/auth.c:426 +#: gram.y:14549 #, c-format -msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" -msgstr "pg_hba.conf rechaza la conexión de replicación para el servidor «%s», usuario «%s», %s" +msgid "frame starting from following row cannot end with current row" +msgstr "el «frame» que se inicia desde la siguiente fila no puede terminar en la fila actual" -#: libpq/auth.c:428 libpq/auth.c:444 libpq/auth.c:502 libpq/auth.c:520 -msgid "SSL off" -msgstr "SSL inactivo" +#: gram.y:14572 +#, c-format +msgid "frame end cannot be UNBOUNDED PRECEDING" +msgstr "el fin de «frame» no puede ser UNBOUNDED PRECEDING" -#: libpq/auth.c:428 libpq/auth.c:444 libpq/auth.c:502 libpq/auth.c:520 -msgid "SSL on" -msgstr "SSL activo" +#: gram.y:14578 +#, c-format +msgid "frame starting from current row cannot have preceding rows" +msgstr "el «frame» que se inicia desde la fila actual no puede tener filas precedentes" -#: libpq/auth.c:432 +#: gram.y:14585 #, c-format -msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\"" -msgstr "pg_hba.conf rechaza la conexión de replicación para el servidor «%s», usuario «%s»" +msgid "frame starting from following row cannot have preceding rows" +msgstr "el «frame» que se inicia desde la fila siguiente no puede tener filas precedentes" -#: libpq/auth.c:441 +#: gram.y:15217 #, c-format -msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" -msgstr "pg_hba.conf rechaza la conexión para el servidor «%s», usuario «%s», base de datos «%s», %s" +msgid "type modifier cannot have parameter name" +msgstr "el modificador de tipo no puede tener nombre de parámetro" -#: libpq/auth.c:448 +#: gram.y:15223 #, c-format -msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\"" -msgstr "pg_hba.conf rechaza la conexión para el servidor «%s», usuario «%s», base de datos «%s»" +msgid "type modifier cannot have ORDER BY" +msgstr "el modificador de tipo no puede tener ORDER BY" -#: libpq/auth.c:477 +#: gram.y:15288 gram.y:15295 gram.y:15302 #, c-format -msgid "Client IP address resolved to \"%s\", forward lookup matches." -msgstr "La dirección IP del cliente fue resuelta a «%s», este resultado es coincidente." +msgid "%s cannot be used as a role name here" +msgstr "%s no puede ser usado como nombre de rol aquí" -#: libpq/auth.c:480 +#: gram.y:15391 gram.y:16823 +#, fuzzy, c-format +#| msgid "WITH TIES cannot be specified without ORDER BY clause" +msgid "WITH TIES cannot be specified without ORDER BY clause" +msgstr "la opción WITH TIES no puede ser especificada sin una cláusula ORDER BY" + +#: gram.y:16499 gram.y:16688 +msgid "improper use of \"*\"" +msgstr "uso impropio de «*»" + +#: gram.y:16651 gram.y:16668 tsearch/spell.c:982 tsearch/spell.c:999 +#: tsearch/spell.c:1016 tsearch/spell.c:1033 tsearch/spell.c:1098 #, c-format -msgid "Client IP address resolved to \"%s\", forward lookup not checked." -msgstr "La dirección IP del cliente fue resuelta a «%s», este resultado no fue verificado." +msgid "syntax error" +msgstr "error de sintaxis" -#: libpq/auth.c:483 +#: gram.y:16753 #, c-format -msgid "Client IP address resolved to \"%s\", forward lookup does not match." -msgstr "La dirección IP del cliente fue resuelta a «%s», este resultado no es coincidente." +msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" +msgstr "una agregación de conjunto-ordenado con un argumento directo VARIADIC debe tener al menos un argumento agregado VARIADIC del mismo tipo de datos" -#: libpq/auth.c:486 +#: gram.y:16790 #, c-format -msgid "Could not translate client host name \"%s\" to IP address: %s." -msgstr "No se pudo traducir el nombre de host del cliente «%s» a una dirección IP: %s." +msgid "multiple ORDER BY clauses not allowed" +msgstr "no se permiten múltiples cláusulas ORDER BY" -#: libpq/auth.c:491 +#: gram.y:16801 #, c-format -msgid "Could not resolve client IP address to a host name: %s." -msgstr "No se pudo obtener la dirección IP del cliente a un nombre de host: %s." +msgid "multiple OFFSET clauses not allowed" +msgstr "no se permiten múltiples cláusulas OFFSET" -#: libpq/auth.c:500 +#: gram.y:16810 #, c-format -msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" -msgstr "no hay una línea en pg_hba.conf para la conexión de replicación desde el servidor «%s», usuario «%s», %s" +msgid "multiple LIMIT clauses not allowed" +msgstr "no se permiten múltiples cláusulas LIMIT" -#: libpq/auth.c:507 +#: gram.y:16819 #, c-format -msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\"" -msgstr "no hay una línea en pg_hba.conf para la conexión de replicación desde el servidor «%s», usuario «%s»" +msgid "multiple limit options not allowed" +msgstr "no se permiten múltiples opciones limit" -#: libpq/auth.c:517 +#: gram.y:16831 #, c-format -msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" -msgstr "no hay una línea en pg_hba.conf para «%s», usuario «%s», base de datos «%s», %s" +msgid "multiple WITH clauses not allowed" +msgstr "no se permiten múltiples cláusulas WITH" -#: libpq/auth.c:525 +#: gram.y:17023 #, c-format -msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"" -msgstr "no hay una línea en pg_hba.conf para «%s», usuario «%s», base de datos «%s»" +msgid "OUT and INOUT arguments aren't allowed in TABLE functions" +msgstr "los argumentos OUT e INOUT no están permitidos en funciones TABLE" -#: libpq/auth.c:688 +#: gram.y:17119 #, c-format -msgid "expected password response, got message type %d" -msgstr "se esperaba una respuesta de contraseña, se obtuvo mensaje de tipo %d" +msgid "multiple COLLATE clauses not allowed" +msgstr "no se permiten múltiples cláusulas COLLATE" -#: libpq/auth.c:716 +#. translator: %s is CHECK, UNIQUE, or similar +#: gram.y:17157 gram.y:17170 #, c-format -msgid "invalid password packet size" -msgstr "el tamaño del paquete de contraseña no es válido" +msgid "%s constraints cannot be marked DEFERRABLE" +msgstr "las restricciones %s no pueden ser marcadas DEFERRABLE" -#: libpq/auth.c:734 +#. translator: %s is CHECK, UNIQUE, or similar +#: gram.y:17183 #, c-format -msgid "empty password returned by client" -msgstr "el cliente retornó una contraseña vacía" +msgid "%s constraints cannot be marked NOT VALID" +msgstr "las restricciones %s no pueden ser marcadas NOT VALID" -#: libpq/auth.c:854 libpq/hba.c:1340 +#. translator: %s is CHECK, UNIQUE, or similar +#: gram.y:17196 #, c-format -msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" -msgstr "la autentificación MD5 no está soportada cuando «db_user_namespace» está activo" +msgid "%s constraints cannot be marked NO INHERIT" +msgstr "las restricciones %s no pueden ser marcadas NO INHERIT" + +#: guc-file.l:314 +#, fuzzy, c-format +#| msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %u" +msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" +msgstr "parámetro de configuración «%s» no reconocido en el archivo «%s» línea %u" -#: libpq/auth.c:860 +#: guc-file.l:351 utils/misc/guc.c:7341 utils/misc/guc.c:7539 +#: utils/misc/guc.c:7633 utils/misc/guc.c:7727 utils/misc/guc.c:7847 +#: utils/misc/guc.c:7946 #, c-format -msgid "could not generate random MD5 salt" -msgstr "no se pudo generar una sal MD5 aleatoria" +msgid "parameter \"%s\" cannot be changed without restarting the server" +msgstr "el parámetro «%s» no se puede cambiar sin reiniciar el servidor" -#: libpq/auth.c:906 +#: guc-file.l:387 #, c-format -msgid "SASL authentication is not supported in protocol version 2" -msgstr "autentificación SASL no está soportada en el protocolo versión 2" +msgid "parameter \"%s\" removed from configuration file, reset to default" +msgstr "parámetro «%s» eliminado del archivo de configuración, volviendo al valor por omisión" -#: libpq/auth.c:939 +#: guc-file.l:453 #, c-format -msgid "expected SASL response, got message type %d" -msgstr "se esperaba una respuesta SASL, se obtuvo mensaje de tipo %d" +msgid "parameter \"%s\" changed to \"%s\"" +msgstr "el parámetro «%s» fue cambiado a «%s»" -#: libpq/auth.c:1068 +#: guc-file.l:495 #, c-format -msgid "GSSAPI is not supported in protocol version 2" -msgstr "GSSAPI no está soportado por el protocolo versión 2" +msgid "configuration file \"%s\" contains errors" +msgstr "el archivo de configuración «%s» contiene errores" -#: libpq/auth.c:1128 +#: guc-file.l:500 #, c-format -msgid "expected GSS response, got message type %d" -msgstr "se esperaba una respuesta GSS, se obtuvo mensaje de tipo %d" +msgid "configuration file \"%s\" contains errors; unaffected changes were applied" +msgstr "el archivo de configuración «%s» contiene errores; los cambios no afectados fueron aplicados" -#: libpq/auth.c:1189 -msgid "accepting GSS security context failed" -msgstr "falló la aceptación del contexto de seguridad GSS" - -#: libpq/auth.c:1228 -msgid "retrieving GSS user name failed" -msgstr "falló la obtención del nombre de usuario GSS" - -#: libpq/auth.c:1359 +#: guc-file.l:505 #, c-format -msgid "SSPI is not supported in protocol version 2" -msgstr "SSPI no está soportado por el protocolo versión 2" - -#: libpq/auth.c:1374 -msgid "could not acquire SSPI credentials" -msgstr "no se pudo obtener las credenciales SSPI" +msgid "configuration file \"%s\" contains errors; no changes were applied" +msgstr "el archivo de configuración «%s» contiene errores; no se aplicó ningún cambio" -#: libpq/auth.c:1399 +#: guc-file.l:577 #, c-format -msgid "expected SSPI response, got message type %d" -msgstr "se esperaba una respuesta SSPI, se obtuvo mensaje de tipo %d" - -#: libpq/auth.c:1477 -msgid "could not accept SSPI security context" -msgstr "no se pudo aceptar un contexto SSPI" - -#: libpq/auth.c:1539 -msgid "could not get token from SSPI security context" -msgstr "no se pudo obtener un testigo (token) desde el contexto de seguridad SSPI" +msgid "empty configuration file name: \"%s\"" +msgstr "nombre de archivo de configuración vacío: «%s»" -#: libpq/auth.c:1658 libpq/auth.c:1677 +#: guc-file.l:594 #, c-format -msgid "could not translate name" -msgstr "no se pudo traducir el nombre" +msgid "could not open configuration file \"%s\": maximum nesting depth exceeded" +msgstr "no se pudo abrir el archivo de configuración «%s»: nivel de anidamiento máximo excedido" -#: libpq/auth.c:1690 +#: guc-file.l:614 #, c-format -msgid "realm name too long" -msgstr "nombre de «realm» demasiado largo" +msgid "configuration file recursion in \"%s\"" +msgstr "recursión de archivos de configuración en «%s»" -#: libpq/auth.c:1705 +#: guc-file.l:630 libpq/hba.c:2245 libpq/hba.c:2659 #, c-format -msgid "translated account name too long" -msgstr "nombre de cuenta traducido demasiado largo" +msgid "could not open configuration file \"%s\": %m" +msgstr "no se pudo abrir el archivo de configuración «%s»: %m" -#: libpq/auth.c:1886 +#: guc-file.l:641 #, c-format -msgid "could not create socket for Ident connection: %m" -msgstr "no se pudo crear un socket para conexión Ident: %m" +msgid "skipping missing configuration file \"%s\"" +msgstr "omitiendo el archivo de configuración faltante «%s»" -#: libpq/auth.c:1901 +#: guc-file.l:895 #, c-format -msgid "could not bind to local address \"%s\": %m" -msgstr "no se pudo enlazar a la dirección local «%s»: %m" +msgid "syntax error in file \"%s\" line %u, near end of line" +msgstr "error de sintaxis en el archivo «%s» línea %u, cerca del fin de línea" -#: libpq/auth.c:1913 +#: guc-file.l:905 #, c-format -msgid "could not connect to Ident server at address \"%s\", port %s: %m" -msgstr "no se pudo conectar al servidor Ident en dirección «%s», port %s: %m" +msgid "syntax error in file \"%s\" line %u, near token \"%s\"" +msgstr "error de sintaxis en el archivo «%s» línea %u, cerca de la palabra «%s»" -#: libpq/auth.c:1935 +#: guc-file.l:925 #, c-format -msgid "could not send query to Ident server at address \"%s\", port %s: %m" -msgstr "no se pudo enviar consulta Ident al servidor «%s», port %s: %m" +msgid "too many syntax errors found, abandoning file \"%s\"" +msgstr "se encontraron demasiados errores de sintaxis, abandonando el archivo «%s»" -#: libpq/auth.c:1952 +#: guc-file.l:980 #, c-format -msgid "could not receive response from Ident server at address \"%s\", port %s: %m" -msgstr "no se pudo recibir respuesta Ident desde el servidor «%s», port %s: %m" +msgid "empty configuration directory name: \"%s\"" +msgstr "nombre de directorio de configuración vacío: «%s»" -#: libpq/auth.c:1962 +#: guc-file.l:999 #, c-format -msgid "invalidly formatted response from Ident server: \"%s\"" -msgstr "respuesta del servidor Ident en formato no válido: «%s»" +msgid "could not open configuration directory \"%s\": %m" +msgstr "no se pudo abrir el directorio de configuración «%s»: %m" -#: libpq/auth.c:2009 +#: jit/jit.c:205 utils/fmgr/dfmgr.c:209 utils/fmgr/dfmgr.c:417 +#: utils/fmgr/dfmgr.c:465 #, c-format -msgid "peer authentication is not supported on this platform" -msgstr "método de autentificación peer no está soportado en esta plataforma" +msgid "could not access file \"%s\": %m" +msgstr "no se pudo acceder al archivo «%s»: %m" -#: libpq/auth.c:2013 +#: jsonpath_gram.y:528 jsonpath_scan.l:519 jsonpath_scan.l:530 +#: jsonpath_scan.l:540 jsonpath_scan.l:582 utils/adt/encode.c:435 +#: utils/adt/encode.c:501 utils/adt/jsonfuncs.c:623 utils/adt/varlena.c:339 +#: utils/adt/varlena.c:380 #, c-format -msgid "could not get peer credentials: %m" -msgstr "no se pudo recibir credenciales: %m" +msgid "invalid input syntax for type %s" +msgstr "sintaxis de entrada no válida para tipo %s" + +#: jsonpath_gram.y:529 +#, fuzzy, c-format +#| msgid "unrecognized flag character \"%c\" in LIKE_REGEX predicate" +msgid "unrecognized flag character \"%.*s\" in LIKE_REGEX predicate" +msgstr "parámetro no reconocido «%c» en predicado LIKE_REGEX" -#: libpq/auth.c:2025 +#: jsonpath_gram.y:583 #, c-format -msgid "could not look up local user ID %ld: %s" -msgstr "no se pudo encontrar el ID del usuario local %ld: %s" +msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" +msgstr "la opción «x» de XQuery (expresiones regulares expandidas) no está implementada" -#: libpq/auth.c:2124 +#. translator: %s is typically "syntax error" +#: jsonpath_scan.l:286 #, c-format -msgid "error from underlying PAM layer: %s" -msgstr "se ha recibido un error de la biblioteca PAM: %s" +msgid "%s at end of jsonpath input" +msgstr "%s al final de la entrada jsonpath" -#: libpq/auth.c:2194 +#. translator: first %s is typically "syntax error" +#: jsonpath_scan.l:293 #, c-format -msgid "could not create PAM authenticator: %s" -msgstr "no se pudo crear autenticador PAM: %s" +msgid "%s at or near \"%s\" of jsonpath input" +msgstr "%s en o cerca de «%s» de la entrada jsonpath" -#: libpq/auth.c:2205 +#: jsonpath_scan.l:498 utils/adt/jsonfuncs.c:617 #, c-format -msgid "pam_set_item(PAM_USER) failed: %s" -msgstr "pam_set_item(PAM_USER) falló: %s" +msgid "unsupported Unicode escape sequence" +msgstr "secuencia de escape Unicode no soportado" -#: libpq/auth.c:2237 +#: lib/dshash.c:247 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 +#: utils/mmgr/dsa.c:805 #, c-format -msgid "pam_set_item(PAM_RHOST) failed: %s" -msgstr "pam_set_item(PAM_RHOST) falló: %s" +msgid "Failed on DSA request of size %zu." +msgstr "Falla en petición DSA de tamaño %zu." -#: libpq/auth.c:2249 +#: libpq/auth-scram.c:249 #, c-format -msgid "pam_set_item(PAM_CONV) failed: %s" -msgstr "pam_set_item(PAM_CONV) falló: %s" +msgid "client selected an invalid SASL authentication mechanism" +msgstr "cliente eligió un mecanismo de autentificación SASL no válido" -#: libpq/auth.c:2262 +#: libpq/auth-scram.c:270 libpq/auth-scram.c:510 libpq/auth-scram.c:521 #, c-format -msgid "pam_authenticate failed: %s" -msgstr "pam_authenticate falló: %s" +msgid "invalid SCRAM secret for user \"%s\"" +msgstr "el secreto SCRAM para el usuario «%s» no es válido" -#: libpq/auth.c:2275 +#: libpq/auth-scram.c:281 #, c-format -msgid "pam_acct_mgmt failed: %s" -msgstr "pam_acct_mgmt falló: %s" +msgid "User \"%s\" does not have a valid SCRAM secret." +msgstr "El usuario «%s» no tiene un secreto SCRAM válido." -#: libpq/auth.c:2286 +#: libpq/auth-scram.c:359 libpq/auth-scram.c:364 libpq/auth-scram.c:701 +#: libpq/auth-scram.c:709 libpq/auth-scram.c:814 libpq/auth-scram.c:827 +#: libpq/auth-scram.c:837 libpq/auth-scram.c:945 libpq/auth-scram.c:952 +#: libpq/auth-scram.c:967 libpq/auth-scram.c:982 libpq/auth-scram.c:996 +#: libpq/auth-scram.c:1014 libpq/auth-scram.c:1029 libpq/auth-scram.c:1340 +#: libpq/auth-scram.c:1348 #, c-format -msgid "could not release PAM authenticator: %s" -msgstr "no se pudo liberar autenticador PAM: %s" +msgid "malformed SCRAM message" +msgstr "mensaje SCRAM mal formado" -#: libpq/auth.c:2362 +#: libpq/auth-scram.c:360 #, c-format -msgid "could not initialize LDAP: error code %d" -msgstr "no se pudo inicializar LDAP: código de error %d" +msgid "The message is empty." +msgstr "El mensaje está vacío." -#: libpq/auth.c:2399 +#: libpq/auth-scram.c:365 #, c-format -msgid "could not extract domain name from ldapbasedn" -msgstr "no se pudo extraer el nombre de dominio de ldapbasedn" +msgid "Message length does not match input length." +msgstr "El largo del mensaje no coincide con el largo de entrada." -#: libpq/auth.c:2407 +#: libpq/auth-scram.c:397 #, c-format -msgid "LDAP authentication could not find DNS SRV records for \"%s\"" -msgstr "la autentificación LDAP no pudo encontrar registros DNS SRV para «%s»" +msgid "invalid SCRAM response" +msgstr "respuesta SCRAM no válida" -#: libpq/auth.c:2409 +#: libpq/auth-scram.c:398 #, c-format -msgid "Set an LDAP server name explicitly." -msgstr "Defina un nombre de servidor LDAP explícitamente." +msgid "Nonce does not match." +msgstr "El «nonce» no coincide." -#: libpq/auth.c:2461 +#: libpq/auth-scram.c:472 #, c-format -msgid "could not initialize LDAP: %s" -msgstr "no se pudo inicializar LDAP: %s" +msgid "could not generate random salt" +msgstr "no se pudo generar una sal aleatoria" -#: libpq/auth.c:2471 +#: libpq/auth-scram.c:702 #, c-format -msgid "ldaps not supported with this LDAP library" -msgstr "ldaps no está soportado con esta biblioteca LDAP" +msgid "Expected attribute \"%c\" but found \"%s\"." +msgstr "Se esperaba un atributo «%c» pero se encontró «%s»." -#: libpq/auth.c:2479 +#: libpq/auth-scram.c:710 libpq/auth-scram.c:838 #, c-format -msgid "could not initialize LDAP: %m" -msgstr "no se pudo inicializar LDAP: %m" +msgid "Expected character \"=\" for attribute \"%c\"." +msgstr "Se esperaba el carácter «=» para el atributo «%c»." -#: libpq/auth.c:2489 +#: libpq/auth-scram.c:815 #, c-format -msgid "could not set LDAP protocol version: %s" -msgstr "no se pudo definir la versión de protocolo LDAP: %s" +msgid "Attribute expected, but found end of string." +msgstr "Se esperaba un atributo, se encontró el fin de la cadena." -#: libpq/auth.c:2529 +#: libpq/auth-scram.c:828 #, c-format -msgid "could not load function _ldap_start_tls_sA in wldap32.dll" -msgstr "no se pudo cargar la función _ldap_start_tls_sA en wldap32.dll" +msgid "Attribute expected, but found invalid character \"%s\"." +msgstr "Se esperaba un atributo, se encontró el carácter no válido «%s»." -#: libpq/auth.c:2530 +#: libpq/auth-scram.c:946 libpq/auth-scram.c:968 #, c-format -msgid "LDAP over SSL is not supported on this platform." -msgstr "LDAP sobre SSL no está soportado en esta plataforma." +msgid "The client selected SCRAM-SHA-256-PLUS, but the SCRAM message does not include channel binding data." +msgstr "El cliente seleccionó SCRAM-SHA-256-PLUS, pero el mensaje SCRAM no incluye los datos de enlazado (binding) del canal." -#: libpq/auth.c:2546 +#: libpq/auth-scram.c:953 libpq/auth-scram.c:983 #, c-format -msgid "could not start LDAP TLS session: %s" -msgstr "no se pudo iniciar sesión de LDAP TLS: %s" +msgid "Comma expected, but found character \"%s\"." +msgstr "Se esperaba una coma, se encontró el carácter «%s»." -#: libpq/auth.c:2617 +#: libpq/auth-scram.c:974 #, c-format -msgid "LDAP server not specified, and no ldapbasedn" -msgstr "servidor LDAP no especificado, y no hay ldapbasedn" +msgid "SCRAM channel binding negotiation error" +msgstr "error de negociación de enlazado (binding) de canal SCRAM" -#: libpq/auth.c:2624 +#: libpq/auth-scram.c:975 #, c-format -msgid "LDAP server not specified" -msgstr "servidor LDAP no especificado" +msgid "The client supports SCRAM channel binding but thinks the server does not. However, this server does support channel binding." +msgstr "El cliente soporta enlazado (binding) de canal SCRAM, pero piensa que el servidor no. Sin embargo, este servidor sí soporta enlazado de canal." -#: libpq/auth.c:2686 +#: libpq/auth-scram.c:997 #, c-format -msgid "invalid character in user name for LDAP authentication" -msgstr "carácter no válido en nombre de usuario para autentificación LDAP" +msgid "The client selected SCRAM-SHA-256 without channel binding, but the SCRAM message includes channel binding data." +msgstr "El cliente seleccionó SCRAM-SHA-256 sin enlazado de canal, pero el mensaje SCRAM incluye datos de enlazado de canal." -#: libpq/auth.c:2703 +#: libpq/auth-scram.c:1008 #, c-format -msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" -msgstr "no se pudo hacer el enlace LDAP inicial para el ldapbinddb «%s» en el servidor «%s»: %s" +msgid "unsupported SCRAM channel-binding type \"%s\"" +msgstr "tipo de enlazado de canal SCRAM «%s» no soportado" -#: libpq/auth.c:2732 +#: libpq/auth-scram.c:1015 #, c-format -msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" -msgstr "no se pudo hacer la búsqueda LDAP para el filtro «%s» en el servidor «%s»: %s" +msgid "Unexpected channel-binding flag \"%s\"." +msgstr "Indicador de enlazado de canal «%s» inesperado." -#: libpq/auth.c:2746 +#: libpq/auth-scram.c:1025 #, c-format -msgid "LDAP user \"%s\" does not exist" -msgstr "no existe el usuario LDAP «%s»" +msgid "client uses authorization identity, but it is not supported" +msgstr "el cliente usa identidad de autorización, pero no está soportada" -#: libpq/auth.c:2747 +#: libpq/auth-scram.c:1030 #, c-format -msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." -msgstr "La búsqueda LDAP para el filtro «%s» en el servidor «%s» no retornó elementos." +msgid "Unexpected attribute \"%s\" in client-first-message." +msgstr "Atributo inesperado \"%s\" en client-first-message." -#: libpq/auth.c:2751 +#: libpq/auth-scram.c:1046 #, c-format -msgid "LDAP user \"%s\" is not unique" -msgstr "el usuario LDAP «%s» no es única" +msgid "client requires an unsupported SCRAM extension" +msgstr "el cliente requiere una extensión SCRAM no soportada" -#: libpq/auth.c:2752 +#: libpq/auth-scram.c:1060 #, c-format -msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." -msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." -msgstr[0] "La búsqueda LDAP para el filtro «%s» en el servidor «%s» retornó %d elemento." -msgstr[1] "La búsqueda LDAP para el filtro «%s» en el servidor «%s» retornó %d elementos." +msgid "non-printable characters in SCRAM nonce" +msgstr "caracteres no imprimibles en el «nonce» SCRAM" -#: libpq/auth.c:2772 +#: libpq/auth-scram.c:1188 #, c-format -msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" -msgstr "no se pudo obtener el dn para la primera entrada que coincide con «%s» en el servidor «%s»: %s" +msgid "could not generate random nonce" +msgstr "no se pudo generar un «nonce» aleatorio" -#: libpq/auth.c:2793 +#: libpq/auth-scram.c:1198 #, c-format -msgid "could not unbind after searching for user \"%s\" on server \"%s\"" -msgstr "no se pudo desconectar (unbind) después de buscar al usuario «%s» en el servidor «%s»" +msgid "could not encode random nonce" +msgstr "no se pudo codificar un «nonce» aleatorio" -#: libpq/auth.c:2824 +#: libpq/auth-scram.c:1304 #, c-format -msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" -msgstr "falló el inicio de sesión LDAP para el usuario «%s» en el servidor «%s»: %s" +msgid "SCRAM channel binding check failed" +msgstr "la verificación de enlazado (binding) de canal SCRAM falló" -#: libpq/auth.c:2853 +#: libpq/auth-scram.c:1322 #, c-format -msgid "LDAP diagnostics: %s" -msgstr "Diagnóstico LDAP: %s" +msgid "unexpected SCRAM channel-binding attribute in client-final-message" +msgstr "atributo de enlazado de canal SCRAM inesperado en client-final-message" -#: libpq/auth.c:2880 +#: libpq/auth-scram.c:1341 #, c-format -msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" -msgstr "la autentificación con certificado falló para el usuario «%s»: el certificado de cliente no contiene un nombre de usuario" +msgid "Malformed proof in client-final-message." +msgstr "Prueba (proof) mal formada en client-final-message." -#: libpq/auth.c:2897 +#: libpq/auth-scram.c:1349 #, c-format -msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" -msgstr "la validación de certificado (clientcert=verify-full) falló para el usuario «%s»: discordancia de CN" +msgid "Garbage found at the end of client-final-message." +msgstr "Basura encontrada al final de client-final-message." -#: libpq/auth.c:2998 +#: libpq/auth.c:284 #, c-format -msgid "RADIUS server not specified" -msgstr "servidor RADIUS no especificado" +msgid "authentication failed for user \"%s\": host rejected" +msgstr "la autentificación falló para el usuario «%s»: anfitrión rechazado" -#: libpq/auth.c:3005 +#: libpq/auth.c:287 #, c-format -msgid "RADIUS secret not specified" -msgstr "secreto RADIUS no especificado" +msgid "\"trust\" authentication failed for user \"%s\"" +msgstr "la autentificación «trust» falló para el usuario «%s»" -#: libpq/auth.c:3019 +#: libpq/auth.c:290 #, c-format -msgid "RADIUS authentication does not support passwords longer than %d characters" -msgstr "la autentificación RADIUS no soporta contraseñas más largas de %d caracteres" +msgid "Ident authentication failed for user \"%s\"" +msgstr "la autentificación Ident falló para el usuario «%s»" -#: libpq/auth.c:3124 libpq/hba.c:1954 +#: libpq/auth.c:293 #, c-format -msgid "could not translate RADIUS server name \"%s\" to address: %s" -msgstr "no se pudo traducir el nombre de servidor RADIUS «%s» a dirección: %s" +msgid "Peer authentication failed for user \"%s\"" +msgstr "la autentificación Peer falló para el usuario «%s»" -#: libpq/auth.c:3138 +#: libpq/auth.c:298 #, c-format -msgid "could not generate random encryption vector" -msgstr "no se pudo generar un vector aleatorio de encriptación" +msgid "password authentication failed for user \"%s\"" +msgstr "la autentificación password falló para el usuario «%s»" -#: libpq/auth.c:3172 +#: libpq/auth.c:303 #, c-format -msgid "could not perform MD5 encryption of password" -msgstr "no se pudo efectuar cifrado MD5 de la contraseña" +msgid "GSSAPI authentication failed for user \"%s\"" +msgstr "la autentificación GSSAPI falló para el usuario «%s»" -#: libpq/auth.c:3198 +#: libpq/auth.c:306 #, c-format -msgid "could not create RADIUS socket: %m" -msgstr "no se pudo crear el socket RADIUS: %m" +msgid "SSPI authentication failed for user \"%s\"" +msgstr "la autentificación SSPI falló para el usuario «%s»" -#: libpq/auth.c:3220 +#: libpq/auth.c:309 #, c-format -msgid "could not bind local RADIUS socket: %m" -msgstr "no se pudo enlazar el socket RADIUS local: %m" +msgid "PAM authentication failed for user \"%s\"" +msgstr "la autentificación PAM falló para el usuario «%s»" -#: libpq/auth.c:3230 +#: libpq/auth.c:312 #, c-format -msgid "could not send RADIUS packet: %m" -msgstr "no se pudo enviar el paquete RADIUS: %m" - -#: libpq/auth.c:3263 libpq/auth.c:3289 -#, c-format -msgid "timeout waiting for RADIUS response from %s" -msgstr "se agotó el tiempo de espera de la respuesta RADIUS desde %s" +msgid "BSD authentication failed for user \"%s\"" +msgstr "la autentificación BSD falló para el usuario «%s»" -#: libpq/auth.c:3282 +#: libpq/auth.c:315 #, c-format -msgid "could not check status on RADIUS socket: %m" -msgstr "no se pudo verificar el estado en el socket %m" +msgid "LDAP authentication failed for user \"%s\"" +msgstr "la autentificación LDAP falló para el usuario «%s»" -#: libpq/auth.c:3312 +#: libpq/auth.c:318 #, c-format -msgid "could not read RADIUS response: %m" -msgstr "no se pudo leer la respuesta RADIUS: %m" +msgid "certificate authentication failed for user \"%s\"" +msgstr "la autentificación por certificado falló para el usuario «%s»" -#: libpq/auth.c:3325 libpq/auth.c:3329 +#: libpq/auth.c:321 #, c-format -msgid "RADIUS response from %s was sent from incorrect port: %d" -msgstr "la respuesta RADIUS desde %s fue enviada desde el port incorrecto: %d" +msgid "RADIUS authentication failed for user \"%s\"" +msgstr "la autentificación RADIUS falló para el usuario «%s»" -#: libpq/auth.c:3338 +#: libpq/auth.c:324 #, c-format -msgid "RADIUS response from %s too short: %d" -msgstr "la respuesta RADIUS desde %s es demasiado corta: %d" +msgid "authentication failed for user \"%s\": invalid authentication method" +msgstr "la autentificación falló para el usuario «%s»: método de autentificación no válido" -#: libpq/auth.c:3345 +#: libpq/auth.c:328 #, c-format -msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" -msgstr "la respuesta RADIUS desde %ss tiene largo corrupto: %d (largo real %d)" +msgid "Connection matched pg_hba.conf line %d: \"%s\"" +msgstr "La conexión coincidió con la línea %d de pg_hba.conf: «%s»" -#: libpq/auth.c:3353 -#, c-format -msgid "RADIUS response from %s is to a different request: %d (should be %d)" -msgstr "la respuesta RADIUS desde %s es a una petición diferente: %d (debería ser %d)" +#: libpq/auth.c:371 +#, fuzzy, c-format +#| msgid "Connections and Authentication" +msgid "connection was re-authenticated" +msgstr "Conexiones y Autentificación" -#: libpq/auth.c:3378 +#: libpq/auth.c:372 #, c-format -msgid "could not perform MD5 encryption of received packet" -msgstr "no se pudo realizar cifrado MD5 del paquete recibido" +msgid "previous ID: \"%s\"; new ID: \"%s\"" +msgstr "" -#: libpq/auth.c:3387 +#: libpq/auth.c:381 #, c-format -msgid "RADIUS response from %s has incorrect MD5 signature" -msgstr "la respuesta RADIUS desde %s tiene firma MD5 incorrecta" +msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" +msgstr "" -#: libpq/auth.c:3405 +#: libpq/auth.c:420 #, c-format -msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" -msgstr "la respuesta RADIUS desde %s tiene código no válido (%d) para el usuario «%s»" +msgid "client certificates can only be checked if a root certificate store is available" +msgstr "los certificados de cliente sólo pueden verificarse si un almacén de certificado raíz está disponible" -#: libpq/be-fsstubs.c:119 libpq/be-fsstubs.c:150 libpq/be-fsstubs.c:178 -#: libpq/be-fsstubs.c:204 libpq/be-fsstubs.c:229 libpq/be-fsstubs.c:277 -#: libpq/be-fsstubs.c:300 libpq/be-fsstubs.c:553 +#: libpq/auth.c:431 #, c-format -msgid "invalid large-object descriptor: %d" -msgstr "el descriptor de objeto grande no es válido: %d" +msgid "connection requires a valid client certificate" +msgstr "la conexión requiere un certificado de cliente válido" -#: libpq/be-fsstubs.c:161 -#, c-format -msgid "large object descriptor %d was not opened for reading" -msgstr "el descriptor de objeto grande %d no fue abierto para lectura" +#: libpq/auth.c:462 libpq/auth.c:508 +#, fuzzy +#| msgid "GSSAPI-encrypted connection\n" +msgid "GSS encryption" +msgstr "Conexión Cifrada GSSAPI\n" -#: libpq/be-fsstubs.c:185 libpq/be-fsstubs.c:560 -#, c-format -msgid "large object descriptor %d was not opened for writing" -msgstr "el descriptor de objeto grande %d no fue abierto para escritura" +#: libpq/auth.c:465 libpq/auth.c:511 +#, fuzzy +#| msgid "SSL on" +msgid "SSL encryption" +msgstr "SSL activo" -#: libpq/be-fsstubs.c:212 -#, c-format -msgid "lo_lseek result out of range for large-object descriptor %d" -msgstr "resultado de lo_lseek fuera de rango para el descriptor de objeto grande %d" +#: libpq/auth.c:467 libpq/auth.c:513 +msgid "no encryption" +msgstr "" -#: libpq/be-fsstubs.c:285 +#. translator: last %s describes encryption state +#: libpq/auth.c:473 #, c-format -msgid "lo_tell result out of range for large-object descriptor %d" -msgstr "resultado de lo_tell fuera de rango para el descriptor de objeto grande %d" +msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" +msgstr "pg_hba.conf rechaza la conexión de replicación para el servidor «%s», usuario «%s», %s" -#: libpq/be-fsstubs.c:432 +#. translator: last %s describes encryption state +#: libpq/auth.c:480 #, c-format -msgid "could not open server file \"%s\": %m" -msgstr "no se pudo abrir el archivo de servidor «%s»: %m" +msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" +msgstr "pg_hba.conf rechaza la conexión para el servidor «%s», usuario «%s», base de datos «%s», %s" -#: libpq/be-fsstubs.c:454 +#: libpq/auth.c:518 #, c-format -msgid "could not read server file \"%s\": %m" -msgstr "no se pudo leer el archivo de servidor «%s»: %m" +msgid "Client IP address resolved to \"%s\", forward lookup matches." +msgstr "La dirección IP del cliente fue resuelta a «%s», este resultado es coincidente." -#: libpq/be-fsstubs.c:514 +#: libpq/auth.c:521 #, c-format -msgid "could not create server file \"%s\": %m" -msgstr "no se pudo crear el archivo del servidor «%s»: %m" +msgid "Client IP address resolved to \"%s\", forward lookup not checked." +msgstr "La dirección IP del cliente fue resuelta a «%s», este resultado no fue verificado." -#: libpq/be-fsstubs.c:526 +#: libpq/auth.c:524 #, c-format -msgid "could not write server file \"%s\": %m" -msgstr "no se pudo escribir el archivo del servidor «%s»: %m" +msgid "Client IP address resolved to \"%s\", forward lookup does not match." +msgstr "La dirección IP del cliente fue resuelta a «%s», este resultado no es coincidente." -#: libpq/be-fsstubs.c:760 +#: libpq/auth.c:527 #, c-format -msgid "large object read request is too large" -msgstr "el tamaño de petición de lectura de objeto grande es muy grande" +msgid "Could not translate client host name \"%s\" to IP address: %s." +msgstr "No se pudo traducir el nombre de host del cliente «%s» a una dirección IP: %s." -#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:265 utils/adt/genfile.c:304 -#: utils/adt/genfile.c:340 +#: libpq/auth.c:532 #, c-format -msgid "requested length cannot be negative" -msgstr "el tamaño solicitado no puede ser negativo" +msgid "Could not resolve client IP address to a host name: %s." +msgstr "No se pudo obtener la dirección IP del cliente a un nombre de host: %s." -#: libpq/be-fsstubs.c:855 storage/large_object/inv_api.c:297 -#: storage/large_object/inv_api.c:309 storage/large_object/inv_api.c:513 -#: storage/large_object/inv_api.c:624 storage/large_object/inv_api.c:814 +#. translator: last %s describes encryption state +#: libpq/auth.c:540 #, c-format -msgid "permission denied for large object %u" -msgstr "permiso denegado al objeto grande %u" +msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" +msgstr "no hay una línea en pg_hba.conf para la conexión de replicación desde el servidor «%s», usuario «%s», %s" -#: libpq/be-secure-common.c:93 +#. translator: last %s describes encryption state +#: libpq/auth.c:548 #, c-format -msgid "could not read from command \"%s\": %m" -msgstr "no se pudo leer desde la orden «%s»: %m" +msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" +msgstr "no hay una línea en pg_hba.conf para «%s», usuario «%s», base de datos «%s», %s" -#: libpq/be-secure-common.c:113 +#: libpq/auth.c:721 #, c-format -msgid "command \"%s\" failed" -msgstr "la orden «%s» falló" +msgid "expected password response, got message type %d" +msgstr "se esperaba una respuesta de contraseña, se obtuvo mensaje de tipo %d" -#: libpq/be-secure-common.c:141 +#: libpq/auth.c:742 #, c-format -msgid "could not access private key file \"%s\": %m" -msgstr "no se pudo acceder al archivo de la llave privada «%s»: %m" +msgid "invalid password packet size" +msgstr "el tamaño del paquete de contraseña no es válido" -#: libpq/be-secure-common.c:150 +#: libpq/auth.c:760 #, c-format -msgid "private key file \"%s\" is not a regular file" -msgstr "el archivo de llave privada «%s» no es un archivo regular" +msgid "empty password returned by client" +msgstr "el cliente retornó una contraseña vacía" -#: libpq/be-secure-common.c:165 +#: libpq/auth.c:887 libpq/hba.c:1368 #, c-format -msgid "private key file \"%s\" must be owned by the database user or root" -msgstr "el archivo de llave privada «%s» debe ser de propiedad del usuario de base de datos o root" +msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" +msgstr "la autentificación MD5 no está soportada cuando «db_user_namespace» está activo" -#: libpq/be-secure-common.c:188 +#: libpq/auth.c:893 #, c-format -msgid "private key file \"%s\" has group or world access" -msgstr "el archivo de la llave privada «%s» tiene acceso para el grupo u otros" +msgid "could not generate random MD5 salt" +msgstr "no se pudo generar una sal MD5 aleatoria" -#: libpq/be-secure-common.c:190 +#: libpq/auth.c:959 #, c-format -msgid "File must have permissions u=rw (0600) or less if owned by the database user, or permissions u=rw,g=r (0640) or less if owned by root." -msgstr "El archivo debe tener permisos u=rw (0600) o menos si es de propiedad del usuario de base deatos, o permisos u=rw,g=r (0640) o menos si es de root." - -#: libpq/be-secure-gssapi.c:195 -msgid "GSSAPI wrap error" -msgstr "error de «wrap» de GSSAPI" +msgid "expected SASL response, got message type %d" +msgstr "se esperaba una respuesta SASL, se obtuvo mensaje de tipo %d" -#: libpq/be-secure-gssapi.c:199 -#, c-format -msgid "outgoing GSSAPI message would not use confidentiality" -msgstr "mensaje saliente GSSAPI no proveería confidencialidad" +#: libpq/auth.c:1088 libpq/be-secure-gssapi.c:535 +#, fuzzy, c-format +#| msgid "could not send data to client: %m" +msgid "could not set environment: %m" +msgstr "no se pudo enviar datos al cliente: %m" -#: libpq/be-secure-gssapi.c:203 libpq/be-secure-gssapi.c:574 +#: libpq/auth.c:1124 #, c-format -msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" -msgstr "el servidor intentó enviar un paquete GSSAPI demasiado grande (%zu > %zu)" +msgid "expected GSS response, got message type %d" +msgstr "se esperaba una respuesta GSS, se obtuvo mensaje de tipo %d" -#: libpq/be-secure-gssapi.c:330 -#, c-format -msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" -msgstr "paquete GSSAPI demasiado grande enviado por el cliente (%zu > %zu)" +#: libpq/auth.c:1184 +msgid "accepting GSS security context failed" +msgstr "falló la aceptación del contexto de seguridad GSS" -#: libpq/be-secure-gssapi.c:364 -msgid "GSSAPI unwrap error" -msgstr "error de «unwrap» de GSSAPI" +#: libpq/auth.c:1224 +msgid "retrieving GSS user name failed" +msgstr "falló la obtención del nombre de usuario GSS" -#: libpq/be-secure-gssapi.c:369 -#, c-format -msgid "incoming GSSAPI message did not use confidentiality" -msgstr "mensaje GSSAPI entrante no usó confidencialidad" +#: libpq/auth.c:1365 +msgid "could not acquire SSPI credentials" +msgstr "no se pudo obtener las credenciales SSPI" -#: libpq/be-secure-gssapi.c:525 +#: libpq/auth.c:1390 #, c-format -msgid "oversize GSSAPI packet sent by the client (%zu > %d)" -msgstr "paquete GSSAPI demasiado grande enviado por el cliente (%zu > %d)" +msgid "expected SSPI response, got message type %d" +msgstr "se esperaba una respuesta SSPI, se obtuvo mensaje de tipo %d" -#: libpq/be-secure-gssapi.c:547 -msgid "could not accept GSSAPI security context" -msgstr "no se pudo aceptar un contexto de seguridad GSSAPI" +#: libpq/auth.c:1468 +msgid "could not accept SSPI security context" +msgstr "no se pudo aceptar un contexto SSPI" -#: libpq/be-secure-gssapi.c:637 -msgid "GSSAPI size check error" -msgstr "error de verificación de tamaño GSSAPI" +#: libpq/auth.c:1530 +msgid "could not get token from SSPI security context" +msgstr "no se pudo obtener un testigo (token) desde el contexto de seguridad SSPI" -#: libpq/be-secure-openssl.c:112 +#: libpq/auth.c:1669 libpq/auth.c:1688 #, c-format -msgid "could not create SSL context: %s" -msgstr "no se pudo crear un contexto SSL: %s" +msgid "could not translate name" +msgstr "no se pudo traducir el nombre" -#: libpq/be-secure-openssl.c:138 +#: libpq/auth.c:1701 #, c-format -msgid "could not load server certificate file \"%s\": %s" -msgstr "no se pudo cargar el archivo de certificado de servidor «%s»: %s" +msgid "realm name too long" +msgstr "nombre de «realm» demasiado largo" -#: libpq/be-secure-openssl.c:158 +#: libpq/auth.c:1716 #, c-format -msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" -msgstr "el archivo de clave privada \"%s\" no se puede volver a cargar porque requiere una contraseña" +msgid "translated account name too long" +msgstr "nombre de cuenta traducido demasiado largo" -#: libpq/be-secure-openssl.c:163 +#: libpq/auth.c:1897 #, c-format -msgid "could not load private key file \"%s\": %s" -msgstr "no se pudo cargar el archivo de la llave privada «%s»: %s" +msgid "could not create socket for Ident connection: %m" +msgstr "no se pudo crear un socket para conexión Ident: %m" -#: libpq/be-secure-openssl.c:172 +#: libpq/auth.c:1912 #, c-format -msgid "check of private key failed: %s" -msgstr "falló la revisión de la llave privada: %s" +msgid "could not bind to local address \"%s\": %m" +msgstr "no se pudo enlazar a la dirección local «%s»: %m" -#: libpq/be-secure-openssl.c:184 libpq/be-secure-openssl.c:206 +#: libpq/auth.c:1924 #, c-format -msgid "\"%s\" setting \"%s\" not supported by this build" -msgstr "el valor «%2$s» para la opción «%1$s» no está soportado en este servidor" +msgid "could not connect to Ident server at address \"%s\", port %s: %m" +msgstr "no se pudo conectar al servidor Ident en dirección «%s», port %s: %m" -#: libpq/be-secure-openssl.c:194 +#: libpq/auth.c:1946 #, c-format -msgid "could not set minimum SSL protocol version" -msgstr "no se pudo definir la versión mínima de protocolo SSL" +msgid "could not send query to Ident server at address \"%s\", port %s: %m" +msgstr "no se pudo enviar consulta Ident al servidor «%s», port %s: %m" -#: libpq/be-secure-openssl.c:216 +#: libpq/auth.c:1963 #, c-format -msgid "could not set maximum SSL protocol version" -msgstr "no se pudo definir la versión máxima de protocolo SSL" +msgid "could not receive response from Ident server at address \"%s\", port %s: %m" +msgstr "no se pudo recibir respuesta Ident desde el servidor «%s», port %s: %m" -#: libpq/be-secure-openssl.c:232 +#: libpq/auth.c:1973 #, c-format -msgid "could not set SSL protocol version range" -msgstr "no se pudo definir el rango de versión de protocolo SSL" +msgid "invalidly formatted response from Ident server: \"%s\"" +msgstr "respuesta del servidor Ident en formato no válido: «%s»" -#: libpq/be-secure-openssl.c:233 +#: libpq/auth.c:2026 #, c-format -msgid "\"%s\" cannot be higher than \"%s\"" -msgstr "«%s» no puede ser más alto que «%s»" +msgid "peer authentication is not supported on this platform" +msgstr "método de autentificación peer no está soportado en esta plataforma" -#: libpq/be-secure-openssl.c:257 +#: libpq/auth.c:2030 #, c-format -msgid "could not set the cipher list (no valid ciphers available)" -msgstr "no se pudo establecer la lista de cifrado (no hay cifradores disponibles)" +msgid "could not get peer credentials: %m" +msgstr "no se pudo recibir credenciales: %m" -#: libpq/be-secure-openssl.c:275 +#: libpq/auth.c:2042 #, c-format -msgid "could not load root certificate file \"%s\": %s" -msgstr "no se pudo cargar el archivo del certificado raíz «%s»: %s" +msgid "could not look up local user ID %ld: %s" +msgstr "no se pudo encontrar el ID del usuario local %ld: %s" -#: libpq/be-secure-openssl.c:302 +#: libpq/auth.c:2143 #, c-format -msgid "could not load SSL certificate revocation list file \"%s\": %s" -msgstr "no se pudo cargar el archivo de lista de revocación de certificados SSL «%s»: %s" +msgid "error from underlying PAM layer: %s" +msgstr "se ha recibido un error de la biblioteca PAM: %s" -#: libpq/be-secure-openssl.c:378 -#, c-format -msgid "could not initialize SSL connection: SSL context not set up" -msgstr "no se pudo inicializar la conexión SSL: el contexto SSL no está instalado" +#: libpq/auth.c:2154 +#, fuzzy, c-format +#| msgid "unsupported format code: %d" +msgid "unsupported PAM conversation %d/\"%s\"" +msgstr "código de formato no soportado: %d" -#: libpq/be-secure-openssl.c:386 +#: libpq/auth.c:2214 #, c-format -msgid "could not initialize SSL connection: %s" -msgstr "no se pudo inicializar la conexión SSL: %s" +msgid "could not create PAM authenticator: %s" +msgstr "no se pudo crear autenticador PAM: %s" -#: libpq/be-secure-openssl.c:394 +#: libpq/auth.c:2225 #, c-format -msgid "could not set SSL socket: %s" -msgstr "no se definir un socket SSL: %s" +msgid "pam_set_item(PAM_USER) failed: %s" +msgstr "pam_set_item(PAM_USER) falló: %s" -#: libpq/be-secure-openssl.c:449 +#: libpq/auth.c:2257 #, c-format -msgid "could not accept SSL connection: %m" -msgstr "no se pudo aceptar una conexión SSL: %m" +msgid "pam_set_item(PAM_RHOST) failed: %s" +msgstr "pam_set_item(PAM_RHOST) falló: %s" -#: libpq/be-secure-openssl.c:453 libpq/be-secure-openssl.c:506 +#: libpq/auth.c:2269 #, c-format -msgid "could not accept SSL connection: EOF detected" -msgstr "no se pudo aceptar una conexión SSL: se detectó EOF" +msgid "pam_set_item(PAM_CONV) failed: %s" +msgstr "pam_set_item(PAM_CONV) falló: %s" -#: libpq/be-secure-openssl.c:492 +#: libpq/auth.c:2282 #, c-format -msgid "could not accept SSL connection: %s" -msgstr "no se pudo aceptar una conexión SSL: %s" +msgid "pam_authenticate failed: %s" +msgstr "pam_authenticate falló: %s" -#: libpq/be-secure-openssl.c:495 +#: libpq/auth.c:2295 #, c-format -msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." -msgstr "Esto puede indicar que el cliente no soporta ninguna versión del protocolo SSL entre %s and %s." +msgid "pam_acct_mgmt failed: %s" +msgstr "pam_acct_mgmt falló: %s" -#: libpq/be-secure-openssl.c:511 libpq/be-secure-openssl.c:642 -#: libpq/be-secure-openssl.c:706 +#: libpq/auth.c:2306 #, c-format -msgid "unrecognized SSL error code: %d" -msgstr "código de error SSL no reconocido: %d" +msgid "could not release PAM authenticator: %s" +msgstr "no se pudo liberar autenticador PAM: %s" -#: libpq/be-secure-openssl.c:553 +#: libpq/auth.c:2386 #, c-format -msgid "SSL certificate's common name contains embedded null" -msgstr "el «common name» del certificado SSL contiene un carácter null" +msgid "could not initialize LDAP: error code %d" +msgstr "no se pudo inicializar LDAP: código de error %d" -#: libpq/be-secure-openssl.c:631 libpq/be-secure-openssl.c:690 +#: libpq/auth.c:2423 #, c-format -msgid "SSL error: %s" -msgstr "error de SSL: %s" +msgid "could not extract domain name from ldapbasedn" +msgstr "no se pudo extraer el nombre de dominio de ldapbasedn" -#: libpq/be-secure-openssl.c:871 +#: libpq/auth.c:2431 #, c-format -msgid "could not open DH parameters file \"%s\": %m" -msgstr "no se pudo abrir el archivo de parámetros DH «%s»: %m" +msgid "LDAP authentication could not find DNS SRV records for \"%s\"" +msgstr "la autentificación LDAP no pudo encontrar registros DNS SRV para «%s»" -#: libpq/be-secure-openssl.c:883 +#: libpq/auth.c:2433 #, c-format -msgid "could not load DH parameters file: %s" -msgstr "no se pudo cargar el archivo de parámetros DH: %s" +msgid "Set an LDAP server name explicitly." +msgstr "Defina un nombre de servidor LDAP explícitamente." -#: libpq/be-secure-openssl.c:893 +#: libpq/auth.c:2485 #, c-format -msgid "invalid DH parameters: %s" -msgstr "parámetros DH no válidos: %s" +msgid "could not initialize LDAP: %s" +msgstr "no se pudo inicializar LDAP: %s" -#: libpq/be-secure-openssl.c:901 +#: libpq/auth.c:2495 #, c-format -msgid "invalid DH parameters: p is not prime" -msgstr "parámetros DH no válidos: p no es primo" +msgid "ldaps not supported with this LDAP library" +msgstr "ldaps no está soportado con esta biblioteca LDAP" -#: libpq/be-secure-openssl.c:909 +#: libpq/auth.c:2503 #, c-format -msgid "invalid DH parameters: neither suitable generator or safe prime" -msgstr "parámetros DH no válidos: no hay generador apropiado o primo seguro" +msgid "could not initialize LDAP: %m" +msgstr "no se pudo inicializar LDAP: %m" -#: libpq/be-secure-openssl.c:1065 +#: libpq/auth.c:2513 #, c-format -msgid "DH: could not load DH parameters" -msgstr "DH: no se pudo cargar los parámetros DH" +msgid "could not set LDAP protocol version: %s" +msgstr "no se pudo definir la versión de protocolo LDAP: %s" -#: libpq/be-secure-openssl.c:1073 +#: libpq/auth.c:2553 #, c-format -msgid "DH: could not set DH parameters: %s" -msgstr "DH: no se pudo definir los parámetros DH: %s" +msgid "could not load function _ldap_start_tls_sA in wldap32.dll" +msgstr "no se pudo cargar la función _ldap_start_tls_sA en wldap32.dll" -#: libpq/be-secure-openssl.c:1100 +#: libpq/auth.c:2554 #, c-format -msgid "ECDH: unrecognized curve name: %s" -msgstr "ECDH: nombre de curva no reconocida: %s" +msgid "LDAP over SSL is not supported on this platform." +msgstr "LDAP sobre SSL no está soportado en esta plataforma." -#: libpq/be-secure-openssl.c:1109 +#: libpq/auth.c:2570 #, c-format -msgid "ECDH: could not create key" -msgstr "ECDH: no se pudo crear la llave" - -#: libpq/be-secure-openssl.c:1137 -msgid "no SSL error reported" -msgstr "código de error SSL no reportado" +msgid "could not start LDAP TLS session: %s" +msgstr "no se pudo iniciar sesión de LDAP TLS: %s" -#: libpq/be-secure-openssl.c:1141 +#: libpq/auth.c:2641 #, c-format -msgid "SSL error code %lu" -msgstr "código de error SSL %lu" +msgid "LDAP server not specified, and no ldapbasedn" +msgstr "servidor LDAP no especificado, y no hay ldapbasedn" -#: libpq/be-secure.c:122 +#: libpq/auth.c:2648 #, c-format -msgid "SSL connection from \"%s\"" -msgstr "conexión SSL desde «%s»" +msgid "LDAP server not specified" +msgstr "servidor LDAP no especificado" -#: libpq/be-secure.c:207 libpq/be-secure.c:303 +#: libpq/auth.c:2710 #, c-format -msgid "terminating connection due to unexpected postmaster exit" -msgstr "terminando la conexión debido al término inesperado de postmaster" +msgid "invalid character in user name for LDAP authentication" +msgstr "carácter no válido en nombre de usuario para autentificación LDAP" -#: libpq/crypt.c:49 +#: libpq/auth.c:2727 #, c-format -msgid "Role \"%s\" does not exist." -msgstr "No existe el rol «%s»." +msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" +msgstr "no se pudo hacer el enlace LDAP inicial para el ldapbinddb «%s» en el servidor «%s»: %s" -#: libpq/crypt.c:59 +#: libpq/auth.c:2756 #, c-format -msgid "User \"%s\" has no password assigned." -msgstr "El usuario «%s» no tiene una contraseña asignada." +msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" +msgstr "no se pudo hacer la búsqueda LDAP para el filtro «%s» en el servidor «%s»: %s" -#: libpq/crypt.c:77 +#: libpq/auth.c:2770 #, c-format -msgid "User \"%s\" has an expired password." -msgstr "El usuario «%s» tiene contraseña expirada." +msgid "LDAP user \"%s\" does not exist" +msgstr "no existe el usuario LDAP «%s»" -#: libpq/crypt.c:179 +#: libpq/auth.c:2771 #, c-format -msgid "User \"%s\" has a password that cannot be used with MD5 authentication." -msgstr "El usuario \"%s\" tiene una contraseña que no se puede usar con la autentificación MD5." +msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." +msgstr "La búsqueda LDAP para el filtro «%s» en el servidor «%s» no retornó elementos." -#: libpq/crypt.c:203 libpq/crypt.c:244 libpq/crypt.c:268 +#: libpq/auth.c:2775 #, c-format -msgid "Password does not match for user \"%s\"." -msgstr "La contraseña no coincide para el usuario «%s»." +msgid "LDAP user \"%s\" is not unique" +msgstr "el usuario LDAP «%s» no es única" -#: libpq/crypt.c:287 +#: libpq/auth.c:2776 #, c-format -msgid "Password of user \"%s\" is in unrecognized format." -msgstr "La contraseña del usuario \"%s\" está en un formato no reconocido." +msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." +msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." +msgstr[0] "La búsqueda LDAP para el filtro «%s» en el servidor «%s» retornó %d elemento." +msgstr[1] "La búsqueda LDAP para el filtro «%s» en el servidor «%s» retornó %d elementos." -#: libpq/hba.c:235 +#: libpq/auth.c:2796 #, c-format -msgid "authentication file token too long, skipping: \"%s\"" -msgstr "una palabra en el archivo de autentificación es demasiado larga, omitiendo: «%s»" +msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" +msgstr "no se pudo obtener el dn para la primera entrada que coincide con «%s» en el servidor «%s»: %s" -#: libpq/hba.c:407 +#: libpq/auth.c:2817 #, c-format -msgid "could not open secondary authentication file \"@%s\" as \"%s\": %m" -msgstr "no se pudo abrir el archivo secundario de autentificación «@%s» como «%s»: %m" +msgid "could not unbind after searching for user \"%s\" on server \"%s\"" +msgstr "no se pudo desconectar (unbind) después de buscar al usuario «%s» en el servidor «%s»" -#: libpq/hba.c:509 -#, c-format -msgid "authentication file line too long" -msgstr "línea en el archivo de autentificación demasiado larga" - -#: libpq/hba.c:510 libpq/hba.c:867 libpq/hba.c:887 libpq/hba.c:925 -#: libpq/hba.c:975 libpq/hba.c:989 libpq/hba.c:1013 libpq/hba.c:1022 -#: libpq/hba.c:1035 libpq/hba.c:1056 libpq/hba.c:1069 libpq/hba.c:1089 -#: libpq/hba.c:1111 libpq/hba.c:1123 libpq/hba.c:1179 libpq/hba.c:1199 -#: libpq/hba.c:1213 libpq/hba.c:1232 libpq/hba.c:1243 libpq/hba.c:1258 -#: libpq/hba.c:1276 libpq/hba.c:1292 libpq/hba.c:1304 libpq/hba.c:1341 -#: libpq/hba.c:1382 libpq/hba.c:1395 libpq/hba.c:1417 libpq/hba.c:1430 -#: libpq/hba.c:1442 libpq/hba.c:1460 libpq/hba.c:1510 libpq/hba.c:1554 -#: libpq/hba.c:1565 libpq/hba.c:1581 libpq/hba.c:1598 libpq/hba.c:1608 -#: libpq/hba.c:1666 libpq/hba.c:1704 libpq/hba.c:1726 libpq/hba.c:1738 -#: libpq/hba.c:1825 libpq/hba.c:1843 libpq/hba.c:1937 libpq/hba.c:1956 -#: libpq/hba.c:1985 libpq/hba.c:1998 libpq/hba.c:2021 libpq/hba.c:2043 -#: libpq/hba.c:2057 tsearch/ts_locale.c:190 +#: libpq/auth.c:2848 #, c-format -msgid "line %d of configuration file \"%s\"" -msgstr "línea %d del archivo de configuración «%s»" +msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" +msgstr "falló el inicio de sesión LDAP para el usuario «%s» en el servidor «%s»: %s" -#. translator: the second %s is a list of auth methods -#: libpq/hba.c:865 +#: libpq/auth.c:2880 #, c-format -msgid "authentication option \"%s\" is only valid for authentication methods %s" -msgstr "la opción de autentificación «%s» sólo es válida para los métodos de autentificación %s" +msgid "LDAP diagnostics: %s" +msgstr "Diagnóstico LDAP: %s" -#: libpq/hba.c:885 +#: libpq/auth.c:2918 #, c-format -msgid "authentication method \"%s\" requires argument \"%s\" to be set" -msgstr "el método de autentificación «%s» requiere que el argumento «%s» esté definido" +msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" +msgstr "la autentificación con certificado falló para el usuario «%s»: el certificado de cliente no contiene un nombre de usuario" -#: libpq/hba.c:913 -#, c-format -msgid "missing entry in file \"%s\" at end of line %d" -msgstr "falta una entrada en el archivo «%s» al final de la línea %d" +#: libpq/auth.c:2939 +#, fuzzy, c-format +#| msgid "certificate authentication failed for user \"%s\"" +msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" +msgstr "la autentificación por certificado falló para el usuario «%s»" -#: libpq/hba.c:924 -#, c-format -msgid "multiple values in ident field" -msgstr "múltiples valores en campo «ident»" +#: libpq/auth.c:2962 +#, fuzzy, c-format +#| msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" +msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" +msgstr "la validación de certificado (clientcert=verify-full) falló para el usuario «%s»: discordancia de CN" -#: libpq/hba.c:973 +#: libpq/auth.c:2967 #, c-format -msgid "multiple values specified for connection type" -msgstr "múltiples valores especificados para tipo de conexión" +msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" +msgstr "la validación de certificado (clientcert=verify-full) falló para el usuario «%s»: discordancia de CN" -#: libpq/hba.c:974 +#: libpq/auth.c:3069 #, c-format -msgid "Specify exactly one connection type per line." -msgstr "Especifique exactamente un tipo de conexión por línea." +msgid "RADIUS server not specified" +msgstr "servidor RADIUS no especificado" -#: libpq/hba.c:988 +#: libpq/auth.c:3076 #, c-format -msgid "local connections are not supported by this build" -msgstr "las conexiones locales no están soportadas en este servidor" +msgid "RADIUS secret not specified" +msgstr "secreto RADIUS no especificado" -#: libpq/hba.c:1011 +#: libpq/auth.c:3090 #, c-format -msgid "hostssl record cannot match because SSL is disabled" -msgstr "el registro hostssl no puede coincidir porque SSL está deshabilitado" +msgid "RADIUS authentication does not support passwords longer than %d characters" +msgstr "la autentificación RADIUS no soporta contraseñas más largas de %d caracteres" -#: libpq/hba.c:1012 +#: libpq/auth.c:3197 libpq/hba.c:1998 #, c-format -msgid "Set ssl = on in postgresql.conf." -msgstr "Defina «ssl = on» en postgresql.conf." +msgid "could not translate RADIUS server name \"%s\" to address: %s" +msgstr "no se pudo traducir el nombre de servidor RADIUS «%s» a dirección: %s" -#: libpq/hba.c:1020 +#: libpq/auth.c:3211 #, c-format -msgid "hostssl record cannot match because SSL is not supported by this build" -msgstr "el registro hostssl no puede coincidir porque SSL no está soportado en esta instalación" +msgid "could not generate random encryption vector" +msgstr "no se pudo generar un vector aleatorio de encriptación" -#: libpq/hba.c:1021 +#: libpq/auth.c:3245 #, c-format -msgid "Compile with --with-openssl to use SSL connections." -msgstr "Compile con --with-openssl para usar conexiones SSL." +msgid "could not perform MD5 encryption of password" +msgstr "no se pudo efectuar cifrado MD5 de la contraseña" -#: libpq/hba.c:1033 +#: libpq/auth.c:3271 #, c-format -msgid "hostgssenc record cannot match because GSSAPI is not supported by this build" -msgstr "el registro hostgssenc no puede coincidir porque GSSAPI no está soportado en esta instalación" +msgid "could not create RADIUS socket: %m" +msgstr "no se pudo crear el socket RADIUS: %m" -#: libpq/hba.c:1034 +#: libpq/auth.c:3293 #, c-format -msgid "Compile with --with-gssapi to use GSSAPI connections." -msgstr "Compile con --with-gssapi para usar conexiones GSSAPI." +msgid "could not bind local RADIUS socket: %m" +msgstr "no se pudo enlazar el socket RADIUS local: %m" -#: libpq/hba.c:1054 +#: libpq/auth.c:3303 #, c-format -msgid "invalid connection type \"%s\"" -msgstr "tipo de conexión «%s» no válido" +msgid "could not send RADIUS packet: %m" +msgstr "no se pudo enviar el paquete RADIUS: %m" -#: libpq/hba.c:1068 +#: libpq/auth.c:3336 libpq/auth.c:3362 #, c-format -msgid "end-of-line before database specification" -msgstr "fin de línea antes de especificación de base de datos" +msgid "timeout waiting for RADIUS response from %s" +msgstr "se agotó el tiempo de espera de la respuesta RADIUS desde %s" -#: libpq/hba.c:1088 +#: libpq/auth.c:3355 #, c-format -msgid "end-of-line before role specification" -msgstr "fin de línea antes de especificación de rol" +msgid "could not check status on RADIUS socket: %m" +msgstr "no se pudo verificar el estado en el socket %m" -#: libpq/hba.c:1110 +#: libpq/auth.c:3385 #, c-format -msgid "end-of-line before IP address specification" -msgstr "fin de línea antes de especificación de dirección IP" +msgid "could not read RADIUS response: %m" +msgstr "no se pudo leer la respuesta RADIUS: %m" -#: libpq/hba.c:1121 +#: libpq/auth.c:3398 libpq/auth.c:3402 #, c-format -msgid "multiple values specified for host address" -msgstr "múltiples valores especificados para la dirección de anfitrión" +msgid "RADIUS response from %s was sent from incorrect port: %d" +msgstr "la respuesta RADIUS desde %s fue enviada desde el port incorrecto: %d" -#: libpq/hba.c:1122 +#: libpq/auth.c:3411 #, c-format -msgid "Specify one address range per line." -msgstr "Especifique un rango de direcciones por línea." +msgid "RADIUS response from %s too short: %d" +msgstr "la respuesta RADIUS desde %s es demasiado corta: %d" -#: libpq/hba.c:1177 +#: libpq/auth.c:3418 #, c-format -msgid "invalid IP address \"%s\": %s" -msgstr "dirección IP «%s» no válida: %s" +msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" +msgstr "la respuesta RADIUS desde %ss tiene largo corrupto: %d (largo real %d)" -#: libpq/hba.c:1197 +#: libpq/auth.c:3426 #, c-format -msgid "specifying both host name and CIDR mask is invalid: \"%s\"" -msgstr "especificar tanto el nombre de host como la máscara CIDR no es válido: «%s»" +msgid "RADIUS response from %s is to a different request: %d (should be %d)" +msgstr "la respuesta RADIUS desde %s es a una petición diferente: %d (debería ser %d)" -#: libpq/hba.c:1211 +#: libpq/auth.c:3451 #, c-format -msgid "invalid CIDR mask in address \"%s\"" -msgstr "máscara CIDR no válida en dirección «%s»" +msgid "could not perform MD5 encryption of received packet" +msgstr "no se pudo realizar cifrado MD5 del paquete recibido" -#: libpq/hba.c:1230 +#: libpq/auth.c:3460 #, c-format -msgid "end-of-line before netmask specification" -msgstr "fin de línea antes de especificación de máscara de red" +msgid "RADIUS response from %s has incorrect MD5 signature" +msgstr "la respuesta RADIUS desde %s tiene firma MD5 incorrecta" -#: libpq/hba.c:1231 +#: libpq/auth.c:3478 #, c-format -msgid "Specify an address range in CIDR notation, or provide a separate netmask." -msgstr "Especifique un rango de direcciones en notación CIDR, o provea una netmask separadamente." +msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" +msgstr "la respuesta RADIUS desde %s tiene código no válido (%d) para el usuario «%s»" -#: libpq/hba.c:1242 +#: libpq/be-fsstubs.c:119 libpq/be-fsstubs.c:150 libpq/be-fsstubs.c:178 +#: libpq/be-fsstubs.c:204 libpq/be-fsstubs.c:229 libpq/be-fsstubs.c:277 +#: libpq/be-fsstubs.c:300 libpq/be-fsstubs.c:553 #, c-format -msgid "multiple values specified for netmask" -msgstr "múltiples valores especificados para la máscara de red" +msgid "invalid large-object descriptor: %d" +msgstr "el descriptor de objeto grande no es válido: %d" -#: libpq/hba.c:1256 +#: libpq/be-fsstubs.c:161 #, c-format -msgid "invalid IP mask \"%s\": %s" -msgstr "máscara IP «%s» no válida: %s" +msgid "large object descriptor %d was not opened for reading" +msgstr "el descriptor de objeto grande %d no fue abierto para lectura" -#: libpq/hba.c:1275 +#: libpq/be-fsstubs.c:185 libpq/be-fsstubs.c:560 #, c-format -msgid "IP address and mask do not match" -msgstr "La dirección y máscara IP no coinciden" +msgid "large object descriptor %d was not opened for writing" +msgstr "el descriptor de objeto grande %d no fue abierto para escritura" -#: libpq/hba.c:1291 +#: libpq/be-fsstubs.c:212 #, c-format -msgid "end-of-line before authentication method" -msgstr "fin de línea antes de especificación de método de autentificación" +msgid "lo_lseek result out of range for large-object descriptor %d" +msgstr "resultado de lo_lseek fuera de rango para el descriptor de objeto grande %d" -#: libpq/hba.c:1302 +#: libpq/be-fsstubs.c:285 #, c-format -msgid "multiple values specified for authentication type" -msgstr "múltiples valores especificados para el tipo de autentificación" +msgid "lo_tell result out of range for large-object descriptor %d" +msgstr "resultado de lo_tell fuera de rango para el descriptor de objeto grande %d" -#: libpq/hba.c:1303 +#: libpq/be-fsstubs.c:432 #, c-format -msgid "Specify exactly one authentication type per line." -msgstr "Especifique exactamente un tipo de autentificación por línea." +msgid "could not open server file \"%s\": %m" +msgstr "no se pudo abrir el archivo de servidor «%s»: %m" -#: libpq/hba.c:1380 +#: libpq/be-fsstubs.c:454 #, c-format -msgid "invalid authentication method \"%s\"" -msgstr "método de autentificación «%s» no válido" +msgid "could not read server file \"%s\": %m" +msgstr "no se pudo leer el archivo de servidor «%s»: %m" -#: libpq/hba.c:1393 +#: libpq/be-fsstubs.c:514 #, c-format -msgid "invalid authentication method \"%s\": not supported by this build" -msgstr "método de autentificación «%s» no válido: este servidor no lo soporta" +msgid "could not create server file \"%s\": %m" +msgstr "no se pudo crear el archivo del servidor «%s»: %m" -#: libpq/hba.c:1416 +#: libpq/be-fsstubs.c:526 #, c-format -msgid "gssapi authentication is not supported on local sockets" -msgstr "la autentificación gssapi no está soportada en conexiones locales" +msgid "could not write server file \"%s\": %m" +msgstr "no se pudo escribir el archivo del servidor «%s»: %m" -#: libpq/hba.c:1429 +#: libpq/be-fsstubs.c:760 #, c-format -msgid "GSSAPI encryption only supports gss, trust, or reject authentication" -msgstr "El cifrado GSSAPI sólo soporta autentificación gss, trust o reject" +msgid "large object read request is too large" +msgstr "el tamaño de petición de lectura de objeto grande es muy grande" -#: libpq/hba.c:1441 +#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:267 utils/adt/genfile.c:306 +#: utils/adt/genfile.c:342 #, c-format -msgid "peer authentication is only supported on local sockets" -msgstr "la autentificación peer sólo está soportada en conexiones locales" +msgid "requested length cannot be negative" +msgstr "el tamaño solicitado no puede ser negativo" -#: libpq/hba.c:1459 +#: libpq/be-fsstubs.c:855 storage/large_object/inv_api.c:297 +#: storage/large_object/inv_api.c:309 storage/large_object/inv_api.c:513 +#: storage/large_object/inv_api.c:624 storage/large_object/inv_api.c:814 #, c-format -msgid "cert authentication is only supported on hostssl connections" -msgstr "la autentificación cert sólo está soportada en conexiones hostssl" +msgid "permission denied for large object %u" +msgstr "permiso denegado al objeto grande %u" -#: libpq/hba.c:1509 +#: libpq/be-secure-common.c:93 #, c-format -msgid "authentication option not in name=value format: %s" -msgstr "opción de autentificación en formato nombre=valor: %s" +msgid "could not read from command \"%s\": %m" +msgstr "no se pudo leer desde la orden «%s»: %m" -#: libpq/hba.c:1553 +#: libpq/be-secure-common.c:113 #, c-format -msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" -msgstr "no se puede usar ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter o ldapurl junto con ldapprefix" +msgid "command \"%s\" failed" +msgstr "la orden «%s» falló" -#: libpq/hba.c:1564 +#: libpq/be-secure-common.c:141 #, c-format -msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" -msgstr "el método de autentificación «ldap» requiere que los argumento «ldapbasedn», «ldapprefix» o «ldapsuffix» estén definidos" +msgid "could not access private key file \"%s\": %m" +msgstr "no se pudo acceder al archivo de la llave privada «%s»: %m" -#: libpq/hba.c:1580 +#: libpq/be-secure-common.c:150 #, c-format -msgid "cannot use ldapsearchattribute together with ldapsearchfilter" -msgstr "no se puede usar ldapsearchattribute junto con ldapsearchfilter" +msgid "private key file \"%s\" is not a regular file" +msgstr "el archivo de llave privada «%s» no es un archivo regular" -#: libpq/hba.c:1597 +#: libpq/be-secure-common.c:165 #, c-format -msgid "list of RADIUS servers cannot be empty" -msgstr "la lista de servidores RADIUS no puede ser vacía" +msgid "private key file \"%s\" must be owned by the database user or root" +msgstr "el archivo de llave privada «%s» debe ser de propiedad del usuario de base de datos o root" -#: libpq/hba.c:1607 +#: libpq/be-secure-common.c:188 #, c-format -msgid "list of RADIUS secrets cannot be empty" -msgstr "la lista de secretos RADIUS no puede ser vacía" +msgid "private key file \"%s\" has group or world access" +msgstr "el archivo de la llave privada «%s» tiene acceso para el grupo u otros" -#: libpq/hba.c:1660 +#: libpq/be-secure-common.c:190 #, c-format -msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" -msgstr "el número de %s (%d) debe ser 1 o igual al número de %s (%d)" - -#: libpq/hba.c:1694 -msgid "ident, peer, gssapi, sspi, and cert" -msgstr "ident, peer, gssapi, sspi y cert" +msgid "File must have permissions u=rw (0600) or less if owned by the database user, or permissions u=rw,g=r (0640) or less if owned by root." +msgstr "El archivo debe tener permisos u=rw (0600) o menos si es de propiedad del usuario de base deatos, o permisos u=rw,g=r (0640) o menos si es de root." -#: libpq/hba.c:1703 -#, c-format -msgid "clientcert can only be configured for \"hostssl\" rows" -msgstr "clientcert sólo puede ser configurado en líneas «hostssl»" +#: libpq/be-secure-gssapi.c:204 +msgid "GSSAPI wrap error" +msgstr "error de «wrap» de GSSAPI" -#: libpq/hba.c:1725 +#: libpq/be-secure-gssapi.c:211 #, c-format -#| msgid "clientcert cannot be set to \"no-verify\" when using \"cert\" authentication" -msgid "clientcert can not be set to \"no-verify\" when using \"cert\" authentication" -msgstr "clientcert no puede establecerse a «no-verify» cuando se emplea autentificación «cert»" +msgid "outgoing GSSAPI message would not use confidentiality" +msgstr "mensaje saliente GSSAPI no proveería confidencialidad" -#: libpq/hba.c:1737 +#: libpq/be-secure-gssapi.c:218 libpq/be-secure-gssapi.c:622 #, c-format -msgid "invalid value for clientcert: \"%s\"" -msgstr "valor no válido para el parámetro clientcert: «%s»" +msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" +msgstr "el servidor intentó enviar un paquete GSSAPI demasiado grande (%zu > %zu)" -#: libpq/hba.c:1771 +#: libpq/be-secure-gssapi.c:351 #, c-format -msgid "could not parse LDAP URL \"%s\": %s" -msgstr "no se pudo interpretar la URL LDAP «%s»: %s" +msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" +msgstr "paquete GSSAPI demasiado grande enviado por el cliente (%zu > %zu)" -#: libpq/hba.c:1782 -#, c-format -msgid "unsupported LDAP URL scheme: %s" -msgstr "esquema de URL LDAP no soportado: %s" +#: libpq/be-secure-gssapi.c:389 +msgid "GSSAPI unwrap error" +msgstr "error de «unwrap» de GSSAPI" -#: libpq/hba.c:1806 +#: libpq/be-secure-gssapi.c:396 #, c-format -msgid "LDAP URLs not supported on this platform" -msgstr "las URLs LDAP no está soportado en esta plataforma" +msgid "incoming GSSAPI message did not use confidentiality" +msgstr "mensaje GSSAPI entrante no usó confidencialidad" -#: libpq/hba.c:1824 +#: libpq/be-secure-gssapi.c:570 #, c-format -msgid "invalid ldapscheme value: \"%s\"" -msgstr "valor ldapscheme no válido: «%s»" +msgid "oversize GSSAPI packet sent by the client (%zu > %d)" +msgstr "paquete GSSAPI demasiado grande enviado por el cliente (%zu > %d)" -#: libpq/hba.c:1842 -#, c-format -msgid "invalid LDAP port number: \"%s\"" -msgstr "número de puerto LDAP no válido: «%s»" +#: libpq/be-secure-gssapi.c:594 +msgid "could not accept GSSAPI security context" +msgstr "no se pudo aceptar un contexto de seguridad GSSAPI" -#: libpq/hba.c:1888 libpq/hba.c:1895 -msgid "gssapi and sspi" -msgstr "gssapi y sspi" +#: libpq/be-secure-gssapi.c:689 +msgid "GSSAPI size check error" +msgstr "error de verificación de tamaño GSSAPI" -#: libpq/hba.c:1904 libpq/hba.c:1913 -msgid "sspi" -msgstr "sspi" +#: libpq/be-secure-openssl.c:115 +#, c-format +msgid "could not create SSL context: %s" +msgstr "no se pudo crear un contexto SSL: %s" -#: libpq/hba.c:1935 +#: libpq/be-secure-openssl.c:141 #, c-format -msgid "could not parse RADIUS server list \"%s\"" -msgstr "no se pudo interpretar la lista de servidores RADIUS «%s»" +msgid "could not load server certificate file \"%s\": %s" +msgstr "no se pudo cargar el archivo de certificado de servidor «%s»: %s" -#: libpq/hba.c:1983 +#: libpq/be-secure-openssl.c:161 #, c-format -msgid "could not parse RADIUS port list \"%s\"" -msgstr "no se pudo interpretar la lista de port RADIUS «%s»" +msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" +msgstr "el archivo de clave privada \"%s\" no se puede volver a cargar porque requiere una contraseña" -#: libpq/hba.c:1997 +#: libpq/be-secure-openssl.c:166 #, c-format -msgid "invalid RADIUS port number: \"%s\"" -msgstr "número de puerto RADIUS no válido: «%s»" +msgid "could not load private key file \"%s\": %s" +msgstr "no se pudo cargar el archivo de la llave privada «%s»: %s" -#: libpq/hba.c:2019 +#: libpq/be-secure-openssl.c:175 #, c-format -msgid "could not parse RADIUS secret list \"%s\"" -msgstr "no se pudo interpretar la lista de secretos RADIUS «%s»" +msgid "check of private key failed: %s" +msgstr "falló la revisión de la llave privada: %s" -#: libpq/hba.c:2041 +#. translator: first %s is a GUC option name, second %s is its value +#: libpq/be-secure-openssl.c:188 libpq/be-secure-openssl.c:211 #, c-format -msgid "could not parse RADIUS identifiers list \"%s\"" -msgstr "no se pudo interpretar la lista de identificadoes RADIUS «%s»" +msgid "\"%s\" setting \"%s\" not supported by this build" +msgstr "el valor «%2$s» para la opción «%1$s» no está soportado en este servidor" -#: libpq/hba.c:2055 +#: libpq/be-secure-openssl.c:198 #, c-format -msgid "unrecognized authentication option name: \"%s\"" -msgstr "nombre de opción de autentificación desconocido: «%s»" +msgid "could not set minimum SSL protocol version" +msgstr "no se pudo definir la versión mínima de protocolo SSL" -#: libpq/hba.c:2199 libpq/hba.c:2613 guc-file.l:631 +#: libpq/be-secure-openssl.c:221 #, c-format -msgid "could not open configuration file \"%s\": %m" -msgstr "no se pudo abrir el archivo de configuración «%s»: %m" +msgid "could not set maximum SSL protocol version" +msgstr "no se pudo definir la versión máxima de protocolo SSL" -#: libpq/hba.c:2250 +#: libpq/be-secure-openssl.c:237 #, c-format -msgid "configuration file \"%s\" contains no entries" -msgstr "el archivo de configuración «%s» no contiene líneas" +msgid "could not set SSL protocol version range" +msgstr "no se pudo definir el rango de versión de protocolo SSL" -#: libpq/hba.c:2768 +#: libpq/be-secure-openssl.c:238 #, c-format -msgid "invalid regular expression \"%s\": %s" -msgstr "la expresión regular «%s» no es válida: %s" +msgid "\"%s\" cannot be higher than \"%s\"" +msgstr "«%s» no puede ser más alto que «%s»" -#: libpq/hba.c:2828 +#: libpq/be-secure-openssl.c:265 #, c-format -msgid "regular expression match for \"%s\" failed: %s" -msgstr "la coincidencia de expresión regular para «%s» falló: %s" +msgid "could not set the cipher list (no valid ciphers available)" +msgstr "no se pudo establecer la lista de cifrado (no hay cifradores disponibles)" -#: libpq/hba.c:2847 +#: libpq/be-secure-openssl.c:285 #, c-format -msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" -msgstr "la expresión regular «%s» no tiene subexpresiones según lo requiere la referencia hacia atrás en «%s»" +msgid "could not load root certificate file \"%s\": %s" +msgstr "no se pudo cargar el archivo del certificado raíz «%s»: %s" -#: libpq/hba.c:2943 +#: libpq/be-secure-openssl.c:334 #, c-format -msgid "provided user name (%s) and authenticated user name (%s) do not match" -msgstr "el nombre de usuario entregado (%s) y el nombre de usuario autentificado (%s) no coinciden" +msgid "could not load SSL certificate revocation list file \"%s\": %s" +msgstr "no se pudo cargar el archivo de lista de revocación de certificados SSL «%s»: %s" + +#: libpq/be-secure-openssl.c:342 +#, fuzzy, c-format +#| msgid "could not load SSL certificate revocation list file \"%s\": %s" +msgid "could not load SSL certificate revocation list directory \"%s\": %s" +msgstr "no se pudo cargar el archivo de lista de revocación de certificados SSL «%s»: %s" + +#: libpq/be-secure-openssl.c:350 +#, fuzzy, c-format +#| msgid "could not load SSL certificate revocation list file \"%s\": %s" +msgid "could not load SSL certificate revocation list file \"%s\" or directory \"%s\": %s" +msgstr "no se pudo cargar el archivo de lista de revocación de certificados SSL «%s»: %s" -#: libpq/hba.c:2963 +#: libpq/be-secure-openssl.c:408 #, c-format -msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" -msgstr "no hay coincidencia en el mapa «%s» para el usuario «%s» autentificado como «%s»" +msgid "could not initialize SSL connection: SSL context not set up" +msgstr "no se pudo inicializar la conexión SSL: el contexto SSL no está instalado" -#: libpq/hba.c:2996 +#: libpq/be-secure-openssl.c:419 #, c-format -msgid "could not open usermap file \"%s\": %m" -msgstr "no se pudo abrir el archivo de mapa de usuarios «%s»: %m" +msgid "could not initialize SSL connection: %s" +msgstr "no se pudo inicializar la conexión SSL: %s" -#: libpq/pqcomm.c:218 +#: libpq/be-secure-openssl.c:427 #, c-format -msgid "could not set socket to nonblocking mode: %m" -msgstr "no se pudo establecer el socket en modo no bloqueante: %m" +msgid "could not set SSL socket: %s" +msgstr "no se definir un socket SSL: %s" -#: libpq/pqcomm.c:372 +#: libpq/be-secure-openssl.c:482 #, c-format -msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" -msgstr "la ruta al socket de dominio Unix «%s» es demasiado larga (máximo %d bytes)" +msgid "could not accept SSL connection: %m" +msgstr "no se pudo aceptar una conexión SSL: %m" -#: libpq/pqcomm.c:393 +#: libpq/be-secure-openssl.c:486 libpq/be-secure-openssl.c:539 #, c-format -msgid "could not translate host name \"%s\", service \"%s\" to address: %s" -msgstr "no se pudo traducir el nombre de host «%s», servicio «%s» a dirección: %s" +msgid "could not accept SSL connection: EOF detected" +msgstr "no se pudo aceptar una conexión SSL: se detectó EOF" -#: libpq/pqcomm.c:397 +#: libpq/be-secure-openssl.c:525 #, c-format -msgid "could not translate service \"%s\" to address: %s" -msgstr "no se pudo traducir el servicio «%s» a dirección: %s" +msgid "could not accept SSL connection: %s" +msgstr "no se pudo aceptar una conexión SSL: %s" -#: libpq/pqcomm.c:424 +#: libpq/be-secure-openssl.c:528 #, c-format -msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" -msgstr "no se pudo enlazar a todas las direcciones pedidas: MAXLISTEN (%d) fue excedido" +msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." +msgstr "Esto puede indicar que el cliente no soporta ninguna versión del protocolo SSL entre %s and %s." -#: libpq/pqcomm.c:433 -msgid "IPv4" -msgstr "IPv4" +#: libpq/be-secure-openssl.c:544 libpq/be-secure-openssl.c:724 +#: libpq/be-secure-openssl.c:788 +#, c-format +msgid "unrecognized SSL error code: %d" +msgstr "código de error SSL no reconocido: %d" -#: libpq/pqcomm.c:437 -msgid "IPv6" -msgstr "IPv6" +#: libpq/be-secure-openssl.c:590 +#, c-format +msgid "SSL certificate's common name contains embedded null" +msgstr "el «common name» del certificado SSL contiene un carácter null" -#: libpq/pqcomm.c:442 -msgid "Unix" -msgstr "Unix" +#: libpq/be-secure-openssl.c:630 +#, fuzzy, c-format +#| msgid "SSL certificate's name contains embedded null\n" +msgid "SSL certificate's distinguished name contains embedded null" +msgstr "el elemento de nombre en el certificado SSL contiene un carácter null\n" -#: libpq/pqcomm.c:447 +#: libpq/be-secure-openssl.c:713 libpq/be-secure-openssl.c:772 #, c-format -msgid "unrecognized address family %d" -msgstr "la familia de direcciones %d no reconocida" +msgid "SSL error: %s" +msgstr "error de SSL: %s" -#. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:473 +#: libpq/be-secure-openssl.c:953 #, c-format -msgid "could not create %s socket for address \"%s\": %m" -msgstr "no se pudo crear el socket %s de escucha para la dirección «%s»: %m" +msgid "could not open DH parameters file \"%s\": %m" +msgstr "no se pudo abrir el archivo de parámetros DH «%s»: %m" -#. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:499 +#: libpq/be-secure-openssl.c:965 #, c-format -msgid "setsockopt(SO_REUSEADDR) failed for %s address \"%s\": %m" -msgstr "setsockopt(SO_REUSEADDR) falló para la dirección %s «%s»: %m" +msgid "could not load DH parameters file: %s" +msgstr "no se pudo cargar el archivo de parámetros DH: %s" -#. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:516 +#: libpq/be-secure-openssl.c:975 #, c-format -msgid "setsockopt(IPV6_V6ONLY) failed for %s address \"%s\": %m" -msgstr "setsockopt(IPV6_V6ONLY) falló para la dirección %s «%s»: %m" +msgid "invalid DH parameters: %s" +msgstr "parámetros DH no válidos: %s" -#. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:536 +#: libpq/be-secure-openssl.c:984 #, c-format -msgid "could not bind %s address \"%s\": %m" -msgstr "no se pudo enlazar a la dirección %s «%s»: %m" +msgid "invalid DH parameters: p is not prime" +msgstr "parámetros DH no válidos: p no es primo" -#: libpq/pqcomm.c:539 +#: libpq/be-secure-openssl.c:993 #, c-format -msgid "Is another postmaster already running on port %d? If not, remove socket file \"%s\" and retry." -msgstr "¿Hay otro postmaster corriendo en el puerto %d? Si no, elimine el socket «%s» y reintente." +msgid "invalid DH parameters: neither suitable generator or safe prime" +msgstr "parámetros DH no válidos: no hay generador apropiado o primo seguro" -#: libpq/pqcomm.c:542 +#: libpq/be-secure-openssl.c:1154 #, c-format -msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." -msgstr "¿Hay otro postmaster corriendo en el puerto %d? Si no, aguarde unos segundos y reintente." +msgid "DH: could not load DH parameters" +msgstr "DH: no se pudo cargar los parámetros DH" -#. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:575 +#: libpq/be-secure-openssl.c:1162 #, c-format -msgid "could not listen on %s address \"%s\": %m" -msgstr "no se pudo escuchar en la dirección %s «%s»: %m" +msgid "DH: could not set DH parameters: %s" +msgstr "DH: no se pudo definir los parámetros DH: %s" -#: libpq/pqcomm.c:584 +#: libpq/be-secure-openssl.c:1189 #, c-format -msgid "listening on Unix socket \"%s\"" -msgstr "escuchando en el socket Unix «%s»" +msgid "ECDH: unrecognized curve name: %s" +msgstr "ECDH: nombre de curva no reconocida: %s" -#. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:590 +#: libpq/be-secure-openssl.c:1198 #, c-format -msgid "listening on %s address \"%s\", port %d" -msgstr "escuchando en la dirección %s «%s», port %d" +msgid "ECDH: could not create key" +msgstr "ECDH: no se pudo crear la llave" -#: libpq/pqcomm.c:673 -#, c-format -msgid "group \"%s\" does not exist" -msgstr "no existe el grupo «%s»" +#: libpq/be-secure-openssl.c:1226 +msgid "no SSL error reported" +msgstr "código de error SSL no reportado" -#: libpq/pqcomm.c:683 +#: libpq/be-secure-openssl.c:1230 #, c-format -msgid "could not set group of file \"%s\": %m" -msgstr "no se pudo definir el grupo del archivo «%s»: %m" +msgid "SSL error code %lu" +msgstr "código de error SSL %lu" -#: libpq/pqcomm.c:694 +#: libpq/be-secure-openssl.c:1384 #, c-format -msgid "could not set permissions of file \"%s\": %m" -msgstr "no se pudo definir los permisos del archivo «%s»: %m" +msgid "failed to create BIO" +msgstr "" -#: libpq/pqcomm.c:724 +#: libpq/be-secure-openssl.c:1394 #, c-format -msgid "could not accept new connection: %m" -msgstr "no se pudo aceptar una nueva conexión: %m" +msgid "could not get NID for ASN1_OBJECT object" +msgstr "" -#: libpq/pqcomm.c:914 -#, c-format -msgid "there is no client connection" -msgstr "no hay conexión de cliente" +#: libpq/be-secure-openssl.c:1402 +#, fuzzy, c-format +#| msgid "could not create LDAP structure\n" +msgid "could not convert NID %d to an ASN1_OBJECT structure" +msgstr "no se pudo crear estructura LDAP\n" -#: libpq/pqcomm.c:965 libpq/pqcomm.c:1061 +#: libpq/be-secure.c:209 libpq/be-secure.c:305 #, c-format -msgid "could not receive data from client: %m" -msgstr "no se pudo recibir datos del cliente: %m" +msgid "terminating connection due to unexpected postmaster exit" +msgstr "terminando la conexión debido al término inesperado de postmaster" -#: libpq/pqcomm.c:1206 tcop/postgres.c:4142 +#: libpq/crypt.c:49 #, c-format -msgid "terminating connection because protocol synchronization was lost" -msgstr "terminando la conexión por pérdida de sincronía del protocolo" +msgid "Role \"%s\" does not exist." +msgstr "No existe el rol «%s»." -#: libpq/pqcomm.c:1272 +#: libpq/crypt.c:59 #, c-format -msgid "unexpected EOF within message length word" -msgstr "EOF inesperado dentro de la palabra de tamaño del mensaje" +msgid "User \"%s\" has no password assigned." +msgstr "El usuario «%s» no tiene una contraseña asignada." -#: libpq/pqcomm.c:1283 +#: libpq/crypt.c:77 #, c-format -msgid "invalid message length" -msgstr "el largo de mensaje no es válido" +msgid "User \"%s\" has an expired password." +msgstr "El usuario «%s» tiene contraseña expirada." -#: libpq/pqcomm.c:1305 libpq/pqcomm.c:1318 +#: libpq/crypt.c:179 #, c-format -msgid "incomplete message from client" -msgstr "mensaje incompleto del cliente" +msgid "User \"%s\" has a password that cannot be used with MD5 authentication." +msgstr "El usuario \"%s\" tiene una contraseña que no se puede usar con la autentificación MD5." -#: libpq/pqcomm.c:1451 +#: libpq/crypt.c:203 libpq/crypt.c:244 libpq/crypt.c:268 #, c-format -msgid "could not send data to client: %m" -msgstr "no se pudo enviar datos al cliente: %m" +msgid "Password does not match for user \"%s\"." +msgstr "La contraseña no coincide para el usuario «%s»." -#: libpq/pqformat.c:406 +#: libpq/crypt.c:287 #, c-format -msgid "no data left in message" -msgstr "no hay datos restantes en el mensaje" +msgid "Password of user \"%s\" is in unrecognized format." +msgstr "La contraseña del usuario \"%s\" está en un formato no reconocido." -#: libpq/pqformat.c:517 libpq/pqformat.c:535 libpq/pqformat.c:556 -#: utils/adt/arrayfuncs.c:1471 utils/adt/rowtypes.c:567 +#: libpq/hba.c:243 #, c-format -msgid "insufficient data left in message" -msgstr "los datos restantes del mensaje son insuficientes" +msgid "authentication file token too long, skipping: \"%s\"" +msgstr "una palabra en el archivo de autentificación es demasiado larga, omitiendo: «%s»" -#: libpq/pqformat.c:597 libpq/pqformat.c:626 +#: libpq/hba.c:415 #, c-format -msgid "invalid string in message" -msgstr "cadena inválida en el mensaje" +msgid "could not open secondary authentication file \"@%s\" as \"%s\": %m" +msgstr "no se pudo abrir el archivo secundario de autentificación «@%s» como «%s»: %m" -#: libpq/pqformat.c:642 -#, c-format -msgid "invalid message format" -msgstr "formato de mensaje no válido" +#: libpq/hba.c:861 +#, fuzzy, c-format +#| msgid "error during file seek: %m" +msgid "error enumerating network interfaces: %m" +msgstr "error durante el posicionamiento (seek) en el archivo: %m" -#: main/main.c:246 +#. translator: the second %s is a list of auth methods +#: libpq/hba.c:888 #, c-format -msgid "%s: WSAStartup failed: %d\n" -msgstr "%s: WSAStartup falló: %d\n" +msgid "authentication option \"%s\" is only valid for authentication methods %s" +msgstr "la opción de autentificación «%s» sólo es válida para los métodos de autentificación %s" -#: main/main.c:310 +#: libpq/hba.c:890 libpq/hba.c:910 libpq/hba.c:948 libpq/hba.c:998 +#: libpq/hba.c:1012 libpq/hba.c:1036 libpq/hba.c:1045 libpq/hba.c:1058 +#: libpq/hba.c:1079 libpq/hba.c:1092 libpq/hba.c:1112 libpq/hba.c:1134 +#: libpq/hba.c:1146 libpq/hba.c:1205 libpq/hba.c:1225 libpq/hba.c:1239 +#: libpq/hba.c:1259 libpq/hba.c:1270 libpq/hba.c:1285 libpq/hba.c:1304 +#: libpq/hba.c:1320 libpq/hba.c:1332 libpq/hba.c:1369 libpq/hba.c:1410 +#: libpq/hba.c:1423 libpq/hba.c:1445 libpq/hba.c:1457 libpq/hba.c:1475 +#: libpq/hba.c:1525 libpq/hba.c:1569 libpq/hba.c:1580 libpq/hba.c:1596 +#: libpq/hba.c:1613 libpq/hba.c:1623 libpq/hba.c:1683 libpq/hba.c:1721 +#: libpq/hba.c:1738 libpq/hba.c:1751 libpq/hba.c:1763 libpq/hba.c:1782 +#: libpq/hba.c:1869 libpq/hba.c:1887 libpq/hba.c:1981 libpq/hba.c:2000 +#: libpq/hba.c:2029 libpq/hba.c:2042 libpq/hba.c:2065 libpq/hba.c:2087 +#: libpq/hba.c:2101 tsearch/ts_locale.c:232 #, c-format -msgid "" -"%s is the PostgreSQL server.\n" -"\n" -msgstr "" -"%s es el servidor PostgreSQL.\n" -"\n" +msgid "line %d of configuration file \"%s\"" +msgstr "línea %d del archivo de configuración «%s»" -#: main/main.c:311 +#: libpq/hba.c:908 #, c-format -msgid "" -"Usage:\n" -" %s [OPTION]...\n" -"\n" -msgstr "" -"Empleo:\n" -" %s [OPCION]...\n" -"\n" +msgid "authentication method \"%s\" requires argument \"%s\" to be set" +msgstr "el método de autentificación «%s» requiere que el argumento «%s» esté definido" -#: main/main.c:312 +#: libpq/hba.c:936 #, c-format -msgid "Options:\n" -msgstr "Opciones:\n" +msgid "missing entry in file \"%s\" at end of line %d" +msgstr "falta una entrada en el archivo «%s» al final de la línea %d" -#: main/main.c:313 +#: libpq/hba.c:947 #, c-format -msgid " -B NBUFFERS number of shared buffers\n" -msgstr " -B NBUFFERS número de búfers de memoria compartida\n" +msgid "multiple values in ident field" +msgstr "múltiples valores en campo «ident»" -#: main/main.c:314 +#: libpq/hba.c:996 #, c-format -msgid " -c NAME=VALUE set run-time parameter\n" -msgstr " -c VAR=VALOR definir parámetro de ejecución\n" +msgid "multiple values specified for connection type" +msgstr "múltiples valores especificados para tipo de conexión" -#: main/main.c:315 +#: libpq/hba.c:997 #, c-format -msgid " -C NAME print value of run-time parameter, then exit\n" -msgstr " -C NOMBRE imprimir valor de parámetro de configuración, luego salir\n" +msgid "Specify exactly one connection type per line." +msgstr "Especifique exactamente un tipo de conexión por línea." -#: main/main.c:316 +#: libpq/hba.c:1011 #, c-format -msgid " -d 1-5 debugging level\n" -msgstr " -d 1-5 nivel de depuración\n" +msgid "local connections are not supported by this build" +msgstr "las conexiones locales no están soportadas en este servidor" -#: main/main.c:317 +#: libpq/hba.c:1034 #, c-format -msgid " -D DATADIR database directory\n" -msgstr " -D DATADIR directorio de bases de datos\n" +msgid "hostssl record cannot match because SSL is disabled" +msgstr "el registro hostssl no puede coincidir porque SSL está deshabilitado" -#: main/main.c:318 +#: libpq/hba.c:1035 #, c-format -msgid " -e use European date input format (DMY)\n" -msgstr " -e usar estilo europeo de fechas (DMY)\n" +msgid "Set ssl = on in postgresql.conf." +msgstr "Defina «ssl = on» en postgresql.conf." -#: main/main.c:319 +#: libpq/hba.c:1043 #, c-format -msgid " -F turn fsync off\n" -msgstr " -F desactivar fsync\n" +msgid "hostssl record cannot match because SSL is not supported by this build" +msgstr "el registro hostssl no puede coincidir porque SSL no está soportado en esta instalación" -#: main/main.c:320 +#: libpq/hba.c:1044 +#, fuzzy, c-format +#| msgid "Compile with --with-openssl to use SSL connections." +msgid "Compile with --with-ssl to use SSL connections." +msgstr "Compile con --with-openssl para usar conexiones SSL." + +#: libpq/hba.c:1056 #, c-format -msgid " -h HOSTNAME host name or IP address to listen on\n" -msgstr " -h NOMBRE nombre de host o dirección IP en que escuchar\n" +msgid "hostgssenc record cannot match because GSSAPI is not supported by this build" +msgstr "el registro hostgssenc no puede coincidir porque GSSAPI no está soportado en esta instalación" -#: main/main.c:321 +#: libpq/hba.c:1057 #, c-format -msgid " -i enable TCP/IP connections\n" -msgstr " -i activar conexiones TCP/IP\n" +msgid "Compile with --with-gssapi to use GSSAPI connections." +msgstr "Compile con --with-gssapi para usar conexiones GSSAPI." -#: main/main.c:322 +#: libpq/hba.c:1077 #, c-format -msgid " -k DIRECTORY Unix-domain socket location\n" -msgstr " -k DIRECTORIO ubicación del socket Unix\n" +msgid "invalid connection type \"%s\"" +msgstr "tipo de conexión «%s» no válido" -#: main/main.c:324 +#: libpq/hba.c:1091 #, c-format -msgid " -l enable SSL connections\n" -msgstr " -l activar conexiones SSL\n" +msgid "end-of-line before database specification" +msgstr "fin de línea antes de especificación de base de datos" -#: main/main.c:326 +#: libpq/hba.c:1111 #, c-format -msgid " -N MAX-CONNECT maximum number of allowed connections\n" -msgstr " -N MAX-CONN número máximo de conexiones permitidas\n" +msgid "end-of-line before role specification" +msgstr "fin de línea antes de especificación de rol" -#: main/main.c:327 +#: libpq/hba.c:1133 #, c-format -msgid " -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n" -msgstr " -o OPCIONES pasar «OPCIONES» a cada proceso servidor (obsoleto)\n" +msgid "end-of-line before IP address specification" +msgstr "fin de línea antes de especificación de dirección IP" -#: main/main.c:328 +#: libpq/hba.c:1144 #, c-format -msgid " -p PORT port number to listen on\n" -msgstr " -p PUERTO número de puerto en el cual escuchar\n" +msgid "multiple values specified for host address" +msgstr "múltiples valores especificados para la dirección de anfitrión" -#: main/main.c:329 +#: libpq/hba.c:1145 #, c-format -msgid " -s show statistics after each query\n" -msgstr " -s mostrar estadísticas después de cada consulta\n" +msgid "Specify one address range per line." +msgstr "Especifique un rango de direcciones por línea." -#: main/main.c:330 +#: libpq/hba.c:1203 #, c-format -msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" -msgstr " -S WORK-MEM definir cantidad de memoria para ordenamientos (en kB)\n" +msgid "invalid IP address \"%s\": %s" +msgstr "dirección IP «%s» no válida: %s" -#: main/main.c:331 +#: libpq/hba.c:1223 #, c-format -msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version mostrar información de la versión, luego salir\n" +msgid "specifying both host name and CIDR mask is invalid: \"%s\"" +msgstr "especificar tanto el nombre de host como la máscara CIDR no es válido: «%s»" -#: main/main.c:332 +#: libpq/hba.c:1237 #, c-format -msgid " --NAME=VALUE set run-time parameter\n" -msgstr " --NOMBRE=VALOR definir parámetro de ejecución\n" +msgid "invalid CIDR mask in address \"%s\"" +msgstr "máscara CIDR no válida en dirección «%s»" -#: main/main.c:333 +#: libpq/hba.c:1257 #, c-format -msgid " --describe-config describe configuration parameters, then exit\n" -msgstr "" -" --describe-config\n" -" mostrar parámetros de configuración y salir\n" +msgid "end-of-line before netmask specification" +msgstr "fin de línea antes de especificación de máscara de red" -#: main/main.c:334 +#: libpq/hba.c:1258 #, c-format -msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help muestra esta ayuda, luego sale\n" +msgid "Specify an address range in CIDR notation, or provide a separate netmask." +msgstr "Especifique un rango de direcciones en notación CIDR, o provea una netmask separadamente." -#: main/main.c:336 +#: libpq/hba.c:1269 #, c-format -msgid "" -"\n" -"Developer options:\n" -msgstr "" -"\n" -"Opciones de desarrollador:\n" +msgid "multiple values specified for netmask" +msgstr "múltiples valores especificados para la máscara de red" -#: main/main.c:337 +#: libpq/hba.c:1283 #, c-format -msgid " -f s|i|n|m|h forbid use of some plan types\n" -msgstr " -f s|i|n|m|h impedir el uso de algunos tipos de planes\n" +msgid "invalid IP mask \"%s\": %s" +msgstr "máscara IP «%s» no válida: %s" -#: main/main.c:338 +#: libpq/hba.c:1303 #, c-format -msgid " -n do not reinitialize shared memory after abnormal exit\n" -msgstr " -n no reinicializar memoria compartida después de salida anormal\n" +msgid "IP address and mask do not match" +msgstr "La dirección y máscara IP no coinciden" -#: main/main.c:339 +#: libpq/hba.c:1319 #, c-format -msgid " -O allow system table structure changes\n" -msgstr " -O permitir cambios en estructura de tablas de sistema\n" +msgid "end-of-line before authentication method" +msgstr "fin de línea antes de especificación de método de autentificación" -#: main/main.c:340 +#: libpq/hba.c:1330 #, c-format -msgid " -P disable system indexes\n" -msgstr " -P desactivar índices de sistema\n" +msgid "multiple values specified for authentication type" +msgstr "múltiples valores especificados para el tipo de autentificación" -#: main/main.c:341 +#: libpq/hba.c:1331 #, c-format -msgid " -t pa|pl|ex show timings after each query\n" -msgstr " -t pa|pl|ex mostrar tiempos después de cada consulta\n" +msgid "Specify exactly one authentication type per line." +msgstr "Especifique exactamente un tipo de autentificación por línea." -#: main/main.c:342 +#: libpq/hba.c:1408 #, c-format -msgid " -T send SIGSTOP to all backend processes if one dies\n" -msgstr "" -" -T enviar SIGSTOP a todos los procesos backend si uno de ellos\n" -" muere\n" +msgid "invalid authentication method \"%s\"" +msgstr "método de autentificación «%s» no válido" -#: main/main.c:343 +#: libpq/hba.c:1421 #, c-format -msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" -msgstr " -W NÚM espera NÚM segundos para permitir acoplar un depurador\n" +msgid "invalid authentication method \"%s\": not supported by this build" +msgstr "método de autentificación «%s» no válido: este servidor no lo soporta" -#: main/main.c:345 +#: libpq/hba.c:1444 #, c-format -msgid "" -"\n" -"Options for single-user mode:\n" -msgstr "" -"\n" -"Opciones para modo mono-usuario:\n" +msgid "gssapi authentication is not supported on local sockets" +msgstr "la autentificación gssapi no está soportada en conexiones locales" -#: main/main.c:346 +#: libpq/hba.c:1456 #, c-format -msgid " --single selects single-user mode (must be first argument)\n" -msgstr " --single selecciona modo mono-usuario (debe ser el primer argumento)\n" +msgid "peer authentication is only supported on local sockets" +msgstr "la autentificación peer sólo está soportada en conexiones locales" -#: main/main.c:347 +#: libpq/hba.c:1474 #, c-format -msgid " DBNAME database name (defaults to user name)\n" -msgstr " DBNAME nombre de base de datos (el valor por omisión es el nombre de usuario)\n" +msgid "cert authentication is only supported on hostssl connections" +msgstr "la autentificación cert sólo está soportada en conexiones hostssl" -#: main/main.c:348 +#: libpq/hba.c:1524 #, c-format -msgid " -d 0-5 override debugging level\n" -msgstr " -d 0-5 nivel de depuración\n" +msgid "authentication option not in name=value format: %s" +msgstr "opción de autentificación en formato nombre=valor: %s" -#: main/main.c:349 +#: libpq/hba.c:1568 #, c-format -msgid " -E echo statement before execution\n" -msgstr " -E mostrar las consultas antes de su ejecución\n" +msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" +msgstr "no se puede usar ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter o ldapurl junto con ldapprefix" -#: main/main.c:350 +#: libpq/hba.c:1579 #, c-format -msgid " -j do not use newline as interactive query delimiter\n" -msgstr " -j no usar saltos de línea como delimitadores de consulta\n" +msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" +msgstr "el método de autentificación «ldap» requiere que los argumento «ldapbasedn», «ldapprefix» o «ldapsuffix» estén definidos" -#: main/main.c:351 main/main.c:356 +#: libpq/hba.c:1595 #, c-format -msgid " -r FILENAME send stdout and stderr to given file\n" -msgstr " -r ARCHIVO enviar salida estándar y de error a ARCHIVO\n" +msgid "cannot use ldapsearchattribute together with ldapsearchfilter" +msgstr "no se puede usar ldapsearchattribute junto con ldapsearchfilter" -#: main/main.c:353 +#: libpq/hba.c:1612 #, c-format -msgid "" -"\n" -"Options for bootstrapping mode:\n" -msgstr "" -"\n" -"Opciones para modo de inicio (bootstrapping):\n" +msgid "list of RADIUS servers cannot be empty" +msgstr "la lista de servidores RADIUS no puede ser vacía" -#: main/main.c:354 +#: libpq/hba.c:1622 #, c-format -msgid " --boot selects bootstrapping mode (must be first argument)\n" -msgstr " --boot selecciona modo de inicio (debe ser el primer argumento)\n" +msgid "list of RADIUS secrets cannot be empty" +msgstr "la lista de secretos RADIUS no puede ser vacía" -#: main/main.c:355 +#: libpq/hba.c:1677 #, c-format -msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" -msgstr " DBNAME nombre de base de datos (argumento obligatorio en modo de inicio)\n" +msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" +msgstr "el número de %s (%d) debe ser 1 o igual al número de %s (%d)" -#: main/main.c:357 -#, c-format -msgid " -x NUM internal use\n" -msgstr " -x NUM uso interno\n" +#: libpq/hba.c:1711 +msgid "ident, peer, gssapi, sspi, and cert" +msgstr "ident, peer, gssapi, sspi y cert" -#: main/main.c:359 +#: libpq/hba.c:1720 #, c-format -msgid "" -"\n" -"Please read the documentation for the complete list of run-time\n" -"configuration settings and how to set them on the command line or in\n" -"the configuration file.\n" -"\n" -"Report bugs to <%s>.\n" -msgstr "" -"\n" -"Por favor lea la documentación para obtener la lista de parámetros de\n" -"configuración y cómo definirlos en la línea de órdenes o en el archivo\n" -"de configuración.\n" -"\n" -"Reporte errores a <%s>.\n" +msgid "clientcert can only be configured for \"hostssl\" rows" +msgstr "clientcert sólo puede ser configurado en líneas «hostssl»" -#: main/main.c:363 -#, c-format -msgid "%s home page: <%s>\n" -msgstr "Sitio web de %s: <%s>\n" +#: libpq/hba.c:1737 +#, fuzzy, c-format +#| msgid "clientcert can not be set to \"no-verify\" when using \"cert\" authentication" +msgid "clientcert only accepts \"verify-full\" when using \"cert\" authentication" +msgstr "clientcert no puede establecerse a «no-verify» cuando se emplea autentificación «cert»" -#: main/main.c:374 +#: libpq/hba.c:1750 #, c-format -msgid "" -"\"root\" execution of the PostgreSQL server is not permitted.\n" -"The server must be started under an unprivileged user ID to prevent\n" -"possible system security compromise. See the documentation for\n" -"more information on how to properly start the server.\n" -msgstr "" -"No se permite ejecución del servidor PostgreSQL como «root».\n" -"El servidor debe ser iniciado con un usuario no privilegiado\n" -"para prevenir posibles compromisos de seguridad del sistema.\n" -"Vea la documentación para obtener más información acerca de cómo\n" -"iniciar correctamente el servidor.\n" +msgid "invalid value for clientcert: \"%s\"" +msgstr "valor no válido para el parámetro clientcert: «%s»" -#: main/main.c:391 -#, c-format -msgid "%s: real and effective user IDs must match\n" -msgstr "%s: los IDs de usuario real y efectivo deben coincidir\n" +#: libpq/hba.c:1762 +#, fuzzy, c-format +#| msgid "clientcert can only be configured for \"hostssl\" rows" +msgid "clientname can only be configured for \"hostssl\" rows" +msgstr "clientcert sólo puede ser configurado en líneas «hostssl»" -#: main/main.c:398 -#, c-format -msgid "" -"Execution of PostgreSQL by a user with administrative permissions is not\n" -"permitted.\n" -"The server must be started under an unprivileged user ID to prevent\n" -"possible system security compromises. See the documentation for\n" -"more information on how to properly start the server.\n" -msgstr "" -"No se permite ejecución del servidor PostgreSQL por un usuario con privilegios administrativos.\n" -"El servidor debe ser iniciado con un usuario no privilegiado\n" -"para prevenir posibles compromisos de seguridad del sistema.\n" -"Vea la documentación para obtener más información acerca de cómo\n" -"iniciar correctamente el servidor.\n" +#: libpq/hba.c:1781 +#, fuzzy, c-format +#| msgid "invalid value for clientcert: \"%s\"" +msgid "invalid value for clientname: \"%s\"" +msgstr "valor no válido para el parámetro clientcert: «%s»" -#: nodes/extensible.c:66 +#: libpq/hba.c:1815 #, c-format -msgid "extensible node type \"%s\" already exists" -msgstr "el tipo de nodo extensible «%s» ya existe" +msgid "could not parse LDAP URL \"%s\": %s" +msgstr "no se pudo interpretar la URL LDAP «%s»: %s" -#: nodes/extensible.c:114 +#: libpq/hba.c:1826 #, c-format -msgid "ExtensibleNodeMethods \"%s\" was not registered" -msgstr "ExtensibleNodeMethods «%s» no fue registrado" +msgid "unsupported LDAP URL scheme: %s" +msgstr "esquema de URL LDAP no soportado: %s" -#: nodes/nodeFuncs.c:122 nodes/nodeFuncs.c:153 parser/parse_coerce.c:2208 -#: parser/parse_coerce.c:2317 parser/parse_coerce.c:2352 -#: parser/parse_expr.c:2207 parser/parse_func.c:701 parser/parse_oper.c:967 -#: utils/fmgr/funcapi.c:528 +#: libpq/hba.c:1850 #, c-format -msgid "could not find array type for data type %s" -msgstr "no se pudo encontrar un tipo de array para el tipo de dato %s" +msgid "LDAP URLs not supported on this platform" +msgstr "las URLs LDAP no está soportado en esta plataforma" -#: nodes/params.c:359 +#: libpq/hba.c:1868 #, c-format -#| msgid "portal \"%s\" with parameters: %s" -msgid "extended query \"%s\" with parameters: %s" -msgstr "consulta extendida «%s» con parámetros: %s" +msgid "invalid ldapscheme value: \"%s\"" +msgstr "valor ldapscheme no válido: «%s»" -#: nodes/params.c:362 +#: libpq/hba.c:1886 #, c-format -#| msgid "unnamed portal with parameters: %s" -msgid "extended query with parameters: %s" -msgstr "consulta extendida con parámetros: %s" +msgid "invalid LDAP port number: \"%s\"" +msgstr "número de puerto LDAP no válido: «%s»" -#: optimizer/path/joinrels.c:855 -#, c-format -msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join conditions" -msgstr "FULL JOIN sólo está soportado con condiciones que se pueden usar con merge join o hash join" +#: libpq/hba.c:1932 libpq/hba.c:1939 +msgid "gssapi and sspi" +msgstr "gssapi y sspi" -#. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1193 -#, c-format -msgid "%s cannot be applied to the nullable side of an outer join" -msgstr "%s no puede ser aplicado al lado nulable de un outer join" +#: libpq/hba.c:1948 libpq/hba.c:1957 +msgid "sspi" +msgstr "sspi" -#. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1922 parser/analyze.c:1639 parser/analyze.c:1855 -#: parser/analyze.c:2715 +#: libpq/hba.c:1979 #, c-format -msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" -msgstr "%s no está permitido con UNION/INTERSECT/EXCEPT" +msgid "could not parse RADIUS server list \"%s\"" +msgstr "no se pudo interpretar la lista de servidores RADIUS «%s»" -#: optimizer/plan/planner.c:2509 optimizer/plan/planner.c:4162 +#: libpq/hba.c:2027 #, c-format -msgid "could not implement GROUP BY" -msgstr "no se pudo implementar GROUP BY" +msgid "could not parse RADIUS port list \"%s\"" +msgstr "no se pudo interpretar la lista de port RADIUS «%s»" -#: optimizer/plan/planner.c:2510 optimizer/plan/planner.c:4163 -#: optimizer/plan/planner.c:4890 optimizer/prep/prepunion.c:1045 +#: libpq/hba.c:2041 #, c-format -msgid "Some of the datatypes only support hashing, while others only support sorting." -msgstr "Algunos de los tipos sólo soportan hashing, mientras que otros sólo soportan ordenamiento." +msgid "invalid RADIUS port number: \"%s\"" +msgstr "número de puerto RADIUS no válido: «%s»" -#: optimizer/plan/planner.c:4889 +#: libpq/hba.c:2063 #, c-format -msgid "could not implement DISTINCT" -msgstr "no se pudo implementar DISTINCT" +msgid "could not parse RADIUS secret list \"%s\"" +msgstr "no se pudo interpretar la lista de secretos RADIUS «%s»" -#: optimizer/plan/planner.c:5737 +#: libpq/hba.c:2085 #, c-format -msgid "could not implement window PARTITION BY" -msgstr "No se pudo implementar PARTITION BY de ventana" +msgid "could not parse RADIUS identifiers list \"%s\"" +msgstr "no se pudo interpretar la lista de identificadoes RADIUS «%s»" -#: optimizer/plan/planner.c:5738 +#: libpq/hba.c:2099 #, c-format -msgid "Window partitioning columns must be of sortable datatypes." -msgstr "Las columnas de particionamiento de ventana deben de tipos que se puedan ordenar." +msgid "unrecognized authentication option name: \"%s\"" +msgstr "nombre de opción de autentificación desconocido: «%s»" -#: optimizer/plan/planner.c:5742 +#: libpq/hba.c:2296 #, c-format -msgid "could not implement window ORDER BY" -msgstr "no se pudo implementar ORDER BY de ventana" +msgid "configuration file \"%s\" contains no entries" +msgstr "el archivo de configuración «%s» no contiene líneas" -#: optimizer/plan/planner.c:5743 +#: libpq/hba.c:2814 #, c-format -msgid "Window ordering columns must be of sortable datatypes." -msgstr "Las columnas de ordenamiento de ventana debe ser de tipos que se puedan ordenar." +msgid "invalid regular expression \"%s\": %s" +msgstr "la expresión regular «%s» no es válida: %s" -#: optimizer/plan/setrefs.c:451 +#: libpq/hba.c:2874 #, c-format -msgid "too many range table entries" -msgstr "demasiadas «range table entries»" +msgid "regular expression match for \"%s\" failed: %s" +msgstr "la coincidencia de expresión regular para «%s» falló: %s" -#: optimizer/prep/prepunion.c:508 +#: libpq/hba.c:2893 #, c-format -msgid "could not implement recursive UNION" -msgstr "no se pudo implementar UNION recursivo" +msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" +msgstr "la expresión regular «%s» no tiene subexpresiones según lo requiere la referencia hacia atrás en «%s»" -#: optimizer/prep/prepunion.c:509 +#: libpq/hba.c:2989 #, c-format -msgid "All column datatypes must be hashable." -msgstr "Todos los tipos de dato de las columnas deben ser tipos de los que se puedan hacer un hash." +msgid "provided user name (%s) and authenticated user name (%s) do not match" +msgstr "el nombre de usuario entregado (%s) y el nombre de usuario autentificado (%s) no coinciden" -#. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1044 +#: libpq/hba.c:3009 #, c-format -msgid "could not implement %s" -msgstr "no se pudo implementar %s" +msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" +msgstr "no hay coincidencia en el mapa «%s» para el usuario «%s» autentificado como «%s»" -#: optimizer/util/clauses.c:4746 +#: libpq/hba.c:3042 #, c-format -msgid "SQL function \"%s\" during inlining" -msgstr "función SQL «%s», durante expansión en línea" +msgid "could not open usermap file \"%s\": %m" +msgstr "no se pudo abrir el archivo de mapa de usuarios «%s»: %m" -#: optimizer/util/plancat.c:132 +#: libpq/pqcomm.c:204 #, c-format -msgid "cannot access temporary or unlogged relations during recovery" -msgstr "no se puede acceder a tablas temporales o «unlogged» durante la recuperación" +msgid "could not set socket to nonblocking mode: %m" +msgstr "no se pudo establecer el socket en modo no bloqueante: %m" -#: optimizer/util/plancat.c:662 +#: libpq/pqcomm.c:362 #, c-format -msgid "whole row unique index inference specifications are not supported" -msgstr "no están soportadas las especificaciones de inferencia de índice único de registro completo" +msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" +msgstr "la ruta al socket de dominio Unix «%s» es demasiado larga (máximo %d bytes)" -#: optimizer/util/plancat.c:679 +#: libpq/pqcomm.c:383 #, c-format -msgid "constraint in ON CONFLICT clause has no associated index" -msgstr "la restricción en la cláusula ON CONFLICT no tiene un índice asociado" +msgid "could not translate host name \"%s\", service \"%s\" to address: %s" +msgstr "no se pudo traducir el nombre de host «%s», servicio «%s» a dirección: %s" -#: optimizer/util/plancat.c:729 +#: libpq/pqcomm.c:387 #, c-format -msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" -msgstr "ON CONFLICT DO UPDATE no está soportado con restricciones de exclusión" +msgid "could not translate service \"%s\" to address: %s" +msgstr "no se pudo traducir el servicio «%s» a dirección: %s" -#: optimizer/util/plancat.c:834 +#: libpq/pqcomm.c:414 #, c-format -msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" -msgstr "no hay restricción única o de exclusión que coincida con la especificación ON CONFLICT" +msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" +msgstr "no se pudo enlazar a todas las direcciones pedidas: MAXLISTEN (%d) fue excedido" -#: parser/analyze.c:705 parser/analyze.c:1401 -#, c-format -msgid "VALUES lists must all be the same length" -msgstr "las listas VALUES deben ser todas de la misma longitud" +#: libpq/pqcomm.c:423 +msgid "IPv4" +msgstr "IPv4" -#: parser/analyze.c:904 -#, c-format -msgid "INSERT has more expressions than target columns" -msgstr "INSERT tiene más expresiones que columnas de destino" +#: libpq/pqcomm.c:427 +msgid "IPv6" +msgstr "IPv6" -#: parser/analyze.c:922 -#, c-format -msgid "INSERT has more target columns than expressions" -msgstr "INSERT tiene más columnas de destino que expresiones" +#: libpq/pqcomm.c:432 +msgid "Unix" +msgstr "Unix" -#: parser/analyze.c:926 +#: libpq/pqcomm.c:437 #, c-format -msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" -msgstr "La fuente de inserción es una expresión de fila que contiene la misma cantidad de columnas que esperaba el INSERT. ¿Usó accidentalmente paréntesis extra?" +msgid "unrecognized address family %d" +msgstr "la familia de direcciones %d no reconocida" -#: parser/analyze.c:1210 parser/analyze.c:1612 +#. translator: first %s is IPv4, IPv6, or Unix +#: libpq/pqcomm.c:463 #, c-format -msgid "SELECT ... INTO is not allowed here" -msgstr "SELECT ... INTO no está permitido aquí" +msgid "could not create %s socket for address \"%s\": %m" +msgstr "no se pudo crear el socket %s de escucha para la dirección «%s»: %m" -#. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1542 parser/analyze.c:2894 -#, c-format -msgid "%s cannot be applied to VALUES" -msgstr "%s no puede ser aplicado a VALUES" +#. translator: third %s is IPv4, IPv6, or Unix +#: libpq/pqcomm.c:489 libpq/pqcomm.c:507 +#, fuzzy, c-format +#| msgid "setsockopt(IPV6_V6ONLY) failed for %s address \"%s\": %m" +msgid "%s(%s) failed for %s address \"%s\": %m" +msgstr "setsockopt(IPV6_V6ONLY) falló para la dirección %s «%s»: %m" -#: parser/analyze.c:1777 +#. translator: first %s is IPv4, IPv6, or Unix +#: libpq/pqcomm.c:530 #, c-format -msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" -msgstr "cláusula UNION/INTERSECT/EXCEPT ORDER BY no válida" +msgid "could not bind %s address \"%s\": %m" +msgstr "no se pudo enlazar a la dirección %s «%s»: %m" -#: parser/analyze.c:1778 -#, c-format -msgid "Only result column names can be used, not expressions or functions." -msgstr "Sólo nombres de columna del resultado pueden usarse, no expresiones o funciones." +#: libpq/pqcomm.c:534 +#, fuzzy, c-format +#| msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." +msgid "Is another postmaster already running on port %d?" +msgstr "¿Hay otro postmaster corriendo en el puerto %d? Si no, aguarde unos segundos y reintente." -#: parser/analyze.c:1779 +#: libpq/pqcomm.c:536 #, c-format -msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." -msgstr "Agregue la función o expresión a todos los SELECT, o mueva el UNION dentro de una cláusula FROM." +msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." +msgstr "¿Hay otro postmaster corriendo en el puerto %d? Si no, aguarde unos segundos y reintente." -#: parser/analyze.c:1845 +#. translator: first %s is IPv4, IPv6, or Unix +#: libpq/pqcomm.c:569 #, c-format -msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" -msgstr "sólo se permite INTO en el primer SELECT de UNION/INTERSECT/EXCEPT" +msgid "could not listen on %s address \"%s\": %m" +msgstr "no se pudo escuchar en la dirección %s «%s»: %m" -#: parser/analyze.c:1917 +#: libpq/pqcomm.c:578 #, c-format -msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" -msgstr "una sentencia miembro de UNION/INSERT/EXCEPT no puede referirse a otras relaciones del mismo nivel de la consulta" +msgid "listening on Unix socket \"%s\"" +msgstr "escuchando en el socket Unix «%s»" -#: parser/analyze.c:2004 -#, c-format +#. translator: first %s is IPv4 or IPv6 +#: libpq/pqcomm.c:584 +#, c-format +msgid "listening on %s address \"%s\", port %d" +msgstr "escuchando en la dirección %s «%s», port %d" + +#: libpq/pqcomm.c:675 +#, c-format +msgid "group \"%s\" does not exist" +msgstr "no existe el grupo «%s»" + +#: libpq/pqcomm.c:685 +#, c-format +msgid "could not set group of file \"%s\": %m" +msgstr "no se pudo definir el grupo del archivo «%s»: %m" + +#: libpq/pqcomm.c:696 +#, c-format +msgid "could not set permissions of file \"%s\": %m" +msgstr "no se pudo definir los permisos del archivo «%s»: %m" + +#: libpq/pqcomm.c:726 +#, c-format +msgid "could not accept new connection: %m" +msgstr "no se pudo aceptar una nueva conexión: %m" + +#: libpq/pqcomm.c:766 libpq/pqcomm.c:775 libpq/pqcomm.c:807 libpq/pqcomm.c:817 +#: libpq/pqcomm.c:1630 libpq/pqcomm.c:1675 libpq/pqcomm.c:1715 +#: libpq/pqcomm.c:1759 libpq/pqcomm.c:1798 libpq/pqcomm.c:1837 +#: libpq/pqcomm.c:1873 libpq/pqcomm.c:1912 postmaster/pgstat.c:618 +#: postmaster/pgstat.c:629 +#, fuzzy, c-format +#| msgid "%s failed: %m" +msgid "%s(%s) failed: %m" +msgstr "%s falló: %m" + +#: libpq/pqcomm.c:921 +#, c-format +msgid "there is no client connection" +msgstr "no hay conexión de cliente" + +#: libpq/pqcomm.c:972 libpq/pqcomm.c:1068 +#, c-format +msgid "could not receive data from client: %m" +msgstr "no se pudo recibir datos del cliente: %m" + +#: libpq/pqcomm.c:1161 tcop/postgres.c:4290 +#, c-format +msgid "terminating connection because protocol synchronization was lost" +msgstr "terminando la conexión por pérdida de sincronía del protocolo" + +#: libpq/pqcomm.c:1227 +#, c-format +msgid "unexpected EOF within message length word" +msgstr "EOF inesperado dentro de la palabra de tamaño del mensaje" + +#: libpq/pqcomm.c:1237 +#, c-format +msgid "invalid message length" +msgstr "el largo de mensaje no es válido" + +#: libpq/pqcomm.c:1259 libpq/pqcomm.c:1272 +#, c-format +msgid "incomplete message from client" +msgstr "mensaje incompleto del cliente" + +#: libpq/pqcomm.c:1383 +#, c-format +msgid "could not send data to client: %m" +msgstr "no se pudo enviar datos al cliente: %m" + +#: libpq/pqcomm.c:1598 +#, fuzzy, c-format +#| msgid "pgpipe: getsockname() failed: error code %d" +msgid "%s(%s) failed: error code %d" +msgstr "pgpipe: getsockname() falló: código de error %d" + +#: libpq/pqcomm.c:1687 +#, fuzzy, c-format +#| msgid "using recovery command file \"%s\" is not supported" +msgid "setting the keepalive idle time is not supported" +msgstr "el uso del archivo de configuración de recuperación «%s» no está soportado" + +#: libpq/pqcomm.c:1771 libpq/pqcomm.c:1846 libpq/pqcomm.c:1921 +#, fuzzy, c-format +#| msgid "log format \"%s\" is not supported" +msgid "%s(%s) not supported" +msgstr "el formato de log «%s» no está soportado" + +#: libpq/pqcomm.c:1956 +#, fuzzy, c-format +#| msgid "could not set SSL socket: %s" +msgid "could not poll socket: %m" +msgstr "no se definir un socket SSL: %s" + +#: libpq/pqformat.c:406 +#, c-format +msgid "no data left in message" +msgstr "no hay datos restantes en el mensaje" + +#: libpq/pqformat.c:517 libpq/pqformat.c:535 libpq/pqformat.c:556 +#: utils/adt/arrayfuncs.c:1481 utils/adt/rowtypes.c:588 +#, c-format +msgid "insufficient data left in message" +msgstr "los datos restantes del mensaje son insuficientes" + +#: libpq/pqformat.c:597 libpq/pqformat.c:626 +#, c-format +msgid "invalid string in message" +msgstr "cadena inválida en el mensaje" + +#: libpq/pqformat.c:642 +#, c-format +msgid "invalid message format" +msgstr "formato de mensaje no válido" + +#: main/main.c:245 +#, c-format +msgid "%s: WSAStartup failed: %d\n" +msgstr "%s: WSAStartup falló: %d\n" + +#: main/main.c:309 +#, c-format +msgid "" +"%s is the PostgreSQL server.\n" +"\n" +msgstr "" +"%s es el servidor PostgreSQL.\n" +"\n" + +#: main/main.c:310 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]...\n" +"\n" +msgstr "" +"Empleo:\n" +" %s [OPCION]...\n" +"\n" + +#: main/main.c:311 +#, c-format +msgid "Options:\n" +msgstr "Opciones:\n" + +#: main/main.c:312 +#, c-format +msgid " -B NBUFFERS number of shared buffers\n" +msgstr " -B NBUFFERS número de búfers de memoria compartida\n" + +#: main/main.c:313 +#, c-format +msgid " -c NAME=VALUE set run-time parameter\n" +msgstr " -c VAR=VALOR definir parámetro de ejecución\n" + +#: main/main.c:314 +#, c-format +msgid " -C NAME print value of run-time parameter, then exit\n" +msgstr " -C NOMBRE imprimir valor de parámetro de configuración, luego salir\n" + +#: main/main.c:315 +#, c-format +msgid " -d 1-5 debugging level\n" +msgstr " -d 1-5 nivel de depuración\n" + +#: main/main.c:316 +#, c-format +msgid " -D DATADIR database directory\n" +msgstr " -D DATADIR directorio de bases de datos\n" + +#: main/main.c:317 +#, c-format +msgid " -e use European date input format (DMY)\n" +msgstr " -e usar estilo europeo de fechas (DMY)\n" + +#: main/main.c:318 +#, c-format +msgid " -F turn fsync off\n" +msgstr " -F desactivar fsync\n" + +#: main/main.c:319 +#, c-format +msgid " -h HOSTNAME host name or IP address to listen on\n" +msgstr " -h NOMBRE nombre de host o dirección IP en que escuchar\n" + +#: main/main.c:320 +#, c-format +msgid " -i enable TCP/IP connections\n" +msgstr " -i activar conexiones TCP/IP\n" + +#: main/main.c:321 +#, c-format +msgid " -k DIRECTORY Unix-domain socket location\n" +msgstr " -k DIRECTORIO ubicación del socket Unix\n" + +#: main/main.c:323 +#, c-format +msgid " -l enable SSL connections\n" +msgstr " -l activar conexiones SSL\n" + +#: main/main.c:325 +#, c-format +msgid " -N MAX-CONNECT maximum number of allowed connections\n" +msgstr " -N MAX-CONN número máximo de conexiones permitidas\n" + +#: main/main.c:326 +#, c-format +msgid " -p PORT port number to listen on\n" +msgstr " -p PUERTO número de puerto en el cual escuchar\n" + +#: main/main.c:327 +#, c-format +msgid " -s show statistics after each query\n" +msgstr " -s mostrar estadísticas después de cada consulta\n" + +#: main/main.c:328 +#, c-format +msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" +msgstr " -S WORK-MEM definir cantidad de memoria para ordenamientos (en kB)\n" + +#: main/main.c:329 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version mostrar información de la versión, luego salir\n" + +#: main/main.c:330 +#, c-format +msgid " --NAME=VALUE set run-time parameter\n" +msgstr " --NOMBRE=VALOR definir parámetro de ejecución\n" + +#: main/main.c:331 +#, c-format +msgid " --describe-config describe configuration parameters, then exit\n" +msgstr "" +" --describe-config\n" +" mostrar parámetros de configuración y salir\n" + +#: main/main.c:332 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help muestra esta ayuda, luego sale\n" + +#: main/main.c:334 +#, c-format +msgid "" +"\n" +"Developer options:\n" +msgstr "" +"\n" +"Opciones de desarrollador:\n" + +#: main/main.c:335 +#, c-format +msgid " -f s|i|n|m|h forbid use of some plan types\n" +msgstr " -f s|i|n|m|h impedir el uso de algunos tipos de planes\n" + +#: main/main.c:336 +#, c-format +msgid " -n do not reinitialize shared memory after abnormal exit\n" +msgstr " -n no reinicializar memoria compartida después de salida anormal\n" + +#: main/main.c:337 +#, c-format +msgid " -O allow system table structure changes\n" +msgstr " -O permitir cambios en estructura de tablas de sistema\n" + +#: main/main.c:338 +#, c-format +msgid " -P disable system indexes\n" +msgstr " -P desactivar índices de sistema\n" + +#: main/main.c:339 +#, c-format +msgid " -t pa|pl|ex show timings after each query\n" +msgstr " -t pa|pl|ex mostrar tiempos después de cada consulta\n" + +#: main/main.c:340 +#, c-format +msgid " -T send SIGSTOP to all backend processes if one dies\n" +msgstr "" +" -T enviar SIGSTOP a todos los procesos backend si uno de ellos\n" +" muere\n" + +#: main/main.c:341 +#, c-format +msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" +msgstr " -W NÚM espera NÚM segundos para permitir acoplar un depurador\n" + +#: main/main.c:343 +#, c-format +msgid "" +"\n" +"Options for single-user mode:\n" +msgstr "" +"\n" +"Opciones para modo mono-usuario:\n" + +#: main/main.c:344 +#, c-format +msgid " --single selects single-user mode (must be first argument)\n" +msgstr " --single selecciona modo mono-usuario (debe ser el primer argumento)\n" + +#: main/main.c:345 +#, c-format +msgid " DBNAME database name (defaults to user name)\n" +msgstr " DBNAME nombre de base de datos (el valor por omisión es el nombre de usuario)\n" + +#: main/main.c:346 +#, c-format +msgid " -d 0-5 override debugging level\n" +msgstr " -d 0-5 nivel de depuración\n" + +#: main/main.c:347 +#, c-format +msgid " -E echo statement before execution\n" +msgstr " -E mostrar las consultas antes de su ejecución\n" + +#: main/main.c:348 +#, c-format +msgid " -j do not use newline as interactive query delimiter\n" +msgstr " -j no usar saltos de línea como delimitadores de consulta\n" + +#: main/main.c:349 main/main.c:354 +#, c-format +msgid " -r FILENAME send stdout and stderr to given file\n" +msgstr " -r ARCHIVO enviar salida estándar y de error a ARCHIVO\n" + +#: main/main.c:351 +#, c-format +msgid "" +"\n" +"Options for bootstrapping mode:\n" +msgstr "" +"\n" +"Opciones para modo de inicio (bootstrapping):\n" + +#: main/main.c:352 +#, c-format +msgid " --boot selects bootstrapping mode (must be first argument)\n" +msgstr " --boot selecciona modo de inicio (debe ser el primer argumento)\n" + +#: main/main.c:353 +#, c-format +msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" +msgstr " DBNAME nombre de base de datos (argumento obligatorio en modo de inicio)\n" + +#: main/main.c:355 +#, c-format +msgid " -x NUM internal use\n" +msgstr " -x NUM uso interno\n" + +#: main/main.c:357 +#, c-format +msgid "" +"\n" +"Please read the documentation for the complete list of run-time\n" +"configuration settings and how to set them on the command line or in\n" +"the configuration file.\n" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Por favor lea la documentación para obtener la lista de parámetros de\n" +"configuración y cómo definirlos en la línea de órdenes o en el archivo\n" +"de configuración.\n" +"\n" +"Reporte errores a <%s>.\n" + +#: main/main.c:361 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Sitio web de %s: <%s>\n" + +#: main/main.c:372 +#, c-format +msgid "" +"\"root\" execution of the PostgreSQL server is not permitted.\n" +"The server must be started under an unprivileged user ID to prevent\n" +"possible system security compromise. See the documentation for\n" +"more information on how to properly start the server.\n" +msgstr "" +"No se permite ejecución del servidor PostgreSQL como «root».\n" +"El servidor debe ser iniciado con un usuario no privilegiado\n" +"para prevenir posibles compromisos de seguridad del sistema.\n" +"Vea la documentación para obtener más información acerca de cómo\n" +"iniciar correctamente el servidor.\n" + +#: main/main.c:389 +#, c-format +msgid "%s: real and effective user IDs must match\n" +msgstr "%s: los IDs de usuario real y efectivo deben coincidir\n" + +#: main/main.c:396 +#, c-format +msgid "" +"Execution of PostgreSQL by a user with administrative permissions is not\n" +"permitted.\n" +"The server must be started under an unprivileged user ID to prevent\n" +"possible system security compromises. See the documentation for\n" +"more information on how to properly start the server.\n" +msgstr "" +"No se permite ejecución del servidor PostgreSQL por un usuario con privilegios administrativos.\n" +"El servidor debe ser iniciado con un usuario no privilegiado\n" +"para prevenir posibles compromisos de seguridad del sistema.\n" +"Vea la documentación para obtener más información acerca de cómo\n" +"iniciar correctamente el servidor.\n" + +#: nodes/extensible.c:66 +#, c-format +msgid "extensible node type \"%s\" already exists" +msgstr "el tipo de nodo extensible «%s» ya existe" + +#: nodes/extensible.c:114 +#, c-format +msgid "ExtensibleNodeMethods \"%s\" was not registered" +msgstr "ExtensibleNodeMethods «%s» no fue registrado" + +#: nodes/makefuncs.c:150 +#, fuzzy, c-format +#| msgid "\"%s\" is not a composite type" +msgid "relation \"%s\" does not have a composite type" +msgstr "«%s» no es un tipo compuesto" + +#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2472 +#: parser/parse_coerce.c:2584 parser/parse_coerce.c:2630 +#: parser/parse_expr.c:2021 parser/parse_func.c:709 parser/parse_oper.c:883 +#: utils/fmgr/funcapi.c:558 +#, c-format +msgid "could not find array type for data type %s" +msgstr "no se pudo encontrar un tipo de array para el tipo de dato %s" + +#: nodes/params.c:417 +#, fuzzy, c-format +#| msgid "extended query \"%s\" with parameters: %s" +msgid "portal \"%s\" with parameters: %s" +msgstr "consulta extendida «%s» con parámetros: %s" + +#: nodes/params.c:420 +#, fuzzy, c-format +#| msgid "extended query with parameters: %s" +msgid "unnamed portal with parameters: %s" +msgstr "consulta extendida con parámetros: %s" + +#: optimizer/path/joinrels.c:855 +#, c-format +msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join conditions" +msgstr "FULL JOIN sólo está soportado con condiciones que se pueden usar con merge join o hash join" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: optimizer/plan/initsplan.c:1192 +#, c-format +msgid "%s cannot be applied to the nullable side of an outer join" +msgstr "%s no puede ser aplicado al lado nulable de un outer join" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: optimizer/plan/planner.c:1315 parser/analyze.c:1675 parser/analyze.c:1919 +#: parser/analyze.c:3013 +#, c-format +msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" +msgstr "%s no está permitido con UNION/INTERSECT/EXCEPT" + +#: optimizer/plan/planner.c:1978 optimizer/plan/planner.c:3634 +#, c-format +msgid "could not implement GROUP BY" +msgstr "no se pudo implementar GROUP BY" + +#: optimizer/plan/planner.c:1979 optimizer/plan/planner.c:3635 +#: optimizer/plan/planner.c:4392 optimizer/prep/prepunion.c:1046 +#, c-format +msgid "Some of the datatypes only support hashing, while others only support sorting." +msgstr "Algunos de los tipos sólo soportan hashing, mientras que otros sólo soportan ordenamiento." + +#: optimizer/plan/planner.c:4391 +#, c-format +msgid "could not implement DISTINCT" +msgstr "no se pudo implementar DISTINCT" + +#: optimizer/plan/planner.c:5239 +#, c-format +msgid "could not implement window PARTITION BY" +msgstr "No se pudo implementar PARTITION BY de ventana" + +#: optimizer/plan/planner.c:5240 +#, c-format +msgid "Window partitioning columns must be of sortable datatypes." +msgstr "Las columnas de particionamiento de ventana deben de tipos que se puedan ordenar." + +#: optimizer/plan/planner.c:5244 +#, c-format +msgid "could not implement window ORDER BY" +msgstr "no se pudo implementar ORDER BY de ventana" + +#: optimizer/plan/planner.c:5245 +#, c-format +msgid "Window ordering columns must be of sortable datatypes." +msgstr "Las columnas de ordenamiento de ventana debe ser de tipos que se puedan ordenar." + +#: optimizer/plan/setrefs.c:479 +#, c-format +msgid "too many range table entries" +msgstr "demasiadas «range table entries»" + +#: optimizer/prep/prepunion.c:509 +#, c-format +msgid "could not implement recursive UNION" +msgstr "no se pudo implementar UNION recursivo" + +#: optimizer/prep/prepunion.c:510 +#, c-format +msgid "All column datatypes must be hashable." +msgstr "Todos los tipos de dato de las columnas deben ser tipos de los que se puedan hacer un hash." + +#. translator: %s is UNION, INTERSECT, or EXCEPT +#: optimizer/prep/prepunion.c:1045 +#, c-format +msgid "could not implement %s" +msgstr "no se pudo implementar %s" + +#: optimizer/util/clauses.c:4670 +#, c-format +msgid "SQL function \"%s\" during inlining" +msgstr "función SQL «%s», durante expansión en línea" + +#: optimizer/util/plancat.c:132 +#, c-format +msgid "cannot access temporary or unlogged relations during recovery" +msgstr "no se puede acceder a tablas temporales o «unlogged» durante la recuperación" + +#: optimizer/util/plancat.c:672 +#, c-format +msgid "whole row unique index inference specifications are not supported" +msgstr "no están soportadas las especificaciones de inferencia de índice único de registro completo" + +#: optimizer/util/plancat.c:689 +#, c-format +msgid "constraint in ON CONFLICT clause has no associated index" +msgstr "la restricción en la cláusula ON CONFLICT no tiene un índice asociado" + +#: optimizer/util/plancat.c:739 +#, c-format +msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" +msgstr "ON CONFLICT DO UPDATE no está soportado con restricciones de exclusión" + +#: optimizer/util/plancat.c:844 +#, c-format +msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" +msgstr "no hay restricción única o de exclusión que coincida con la especificación ON CONFLICT" + +#: parser/analyze.c:735 parser/analyze.c:1449 +#, c-format +msgid "VALUES lists must all be the same length" +msgstr "las listas VALUES deben ser todas de la misma longitud" + +#: parser/analyze.c:936 +#, c-format +msgid "INSERT has more expressions than target columns" +msgstr "INSERT tiene más expresiones que columnas de destino" + +#: parser/analyze.c:954 +#, c-format +msgid "INSERT has more target columns than expressions" +msgstr "INSERT tiene más columnas de destino que expresiones" + +#: parser/analyze.c:958 +#, c-format +msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" +msgstr "La fuente de inserción es una expresión de fila que contiene la misma cantidad de columnas que esperaba el INSERT. ¿Usó accidentalmente paréntesis extra?" + +#: parser/analyze.c:1257 parser/analyze.c:1648 +#, c-format +msgid "SELECT ... INTO is not allowed here" +msgstr "SELECT ... INTO no está permitido aquí" + +#. translator: %s is a SQL row locking clause such as FOR UPDATE +#: parser/analyze.c:1578 parser/analyze.c:3192 +#, c-format +msgid "%s cannot be applied to VALUES" +msgstr "%s no puede ser aplicado a VALUES" + +#: parser/analyze.c:1814 +#, c-format +msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" +msgstr "cláusula UNION/INTERSECT/EXCEPT ORDER BY no válida" + +#: parser/analyze.c:1815 +#, c-format +msgid "Only result column names can be used, not expressions or functions." +msgstr "Sólo nombres de columna del resultado pueden usarse, no expresiones o funciones." + +#: parser/analyze.c:1816 +#, c-format +msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." +msgstr "Agregue la función o expresión a todos los SELECT, o mueva el UNION dentro de una cláusula FROM." + +#: parser/analyze.c:1909 +#, c-format +msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" +msgstr "sólo se permite INTO en el primer SELECT de UNION/INTERSECT/EXCEPT" + +#: parser/analyze.c:1981 +#, c-format +msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" +msgstr "una sentencia miembro de UNION/INSERT/EXCEPT no puede referirse a otras relaciones del mismo nivel de la consulta" + +#: parser/analyze.c:2068 +#, c-format msgid "each %s query must have the same number of columns" msgstr "cada consulta %s debe tener el mismo número de columnas" -#: parser/analyze.c:2426 +#: parser/analyze.c:2468 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNING debe tener al menos una columna" -#: parser/analyze.c:2467 -#, c-format -msgid "cannot specify both SCROLL and NO SCROLL" +#: parser/analyze.c:2571 +#, fuzzy, c-format +#| msgid "query \"%s\" returned %d column" +#| msgid_plural "query \"%s\" returned %d columns" +msgid "assignment source returned %d column" +msgid_plural "assignment source returned %d columns" +msgstr[0] "la consulta «%s» retornó %d columna" +msgstr[1] "la consulta «%s» retornó %d columnas" + +#: parser/analyze.c:2632 +#, fuzzy, c-format +#| msgid "subfield \"%s\" is of type %s but expression is of type %s" +msgid "variable \"%s\" is of type %s but expression is of type %s" +msgstr "el subcampo «%s» es de tipo %s pero la expresión es de tipo %s" + +#. translator: %s is a SQL keyword +#: parser/analyze.c:2756 parser/analyze.c:2764 +#, fuzzy, c-format +#| msgid "cannot specify both SCROLL and NO SCROLL" +msgid "cannot specify both %s and %s" msgstr "no se puede especificar SCROLL y NO SCROLL" -#: parser/analyze.c:2486 +#: parser/analyze.c:2784 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR no debe contener sentencias que modifiquen datos en WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2494 +#: parser/analyze.c:2792 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s no está soportado" -#: parser/analyze.c:2497 +#: parser/analyze.c:2795 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "Los cursores declarados HOLD deben ser READ ONLY." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2505 +#: parser/analyze.c:2803 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s no está soportado" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2516 -#, c-format -msgid "DECLARE INSENSITIVE CURSOR ... %s is not supported" +#: parser/analyze.c:2814 +#, fuzzy, c-format +#| msgid "DECLARE INSENSITIVE CURSOR ... %s is not supported" +msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s no está soportado" -#: parser/analyze.c:2519 +#: parser/analyze.c:2817 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Los cursores insensitivos deben ser READ ONLY." -#: parser/analyze.c:2585 +#: parser/analyze.c:2883 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "las vistas materializadas no deben usar sentencias que modifiquen datos en WITH" -#: parser/analyze.c:2595 +#: parser/analyze.c:2893 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "las vistas materializadas no deben usar tablas temporales o vistas" -#: parser/analyze.c:2605 +#: parser/analyze.c:2903 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "las vistas materializadas no pueden definirse usando parámetros enlazados" -#: parser/analyze.c:2617 +#: parser/analyze.c:2915 #, c-format msgid "materialized views cannot be unlogged" msgstr "las vistas materializadas no pueden ser «unlogged»" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2722 +#: parser/analyze.c:3020 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s no está permitido con cláusulas DISTINCT" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2729 +#: parser/analyze.c:3027 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s no está permitido con cláusulas GROUP BY" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2736 +#: parser/analyze.c:3034 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s no está permitido con cláusulas HAVING" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2743 +#: parser/analyze.c:3041 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s no está permitido con funciones de agregación" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2750 +#: parser/analyze.c:3048 #, c-format msgid "%s is not allowed with window functions" msgstr "%s no está permitido con funciones de ventana deslizante" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2757 +#: parser/analyze.c:3055 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "%s no está permitido con funciones que retornan conjuntos en la lista de resultados" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2836 +#: parser/analyze.c:3134 #, c-format msgid "%s must specify unqualified relation names" msgstr "%s debe especificar nombres de relaciones sin calificar" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2867 +#: parser/analyze.c:3165 #, c-format msgid "%s cannot be applied to a join" msgstr "%s no puede ser aplicado a un join" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2876 +#: parser/analyze.c:3174 #, c-format msgid "%s cannot be applied to a function" msgstr "%s no puede ser aplicado a una función" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2885 +#: parser/analyze.c:3183 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s no puede ser aplicado a una función de tabla" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2903 +#: parser/analyze.c:3201 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s no puede ser aplicado a una consulta WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2912 +#: parser/analyze.c:3210 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%s no puede ser aplicado a un «tuplestore» con nombre" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2932 +#: parser/analyze.c:3230 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "la relación «%s» en la cláusula %s no fue encontrada en la cláusula FROM" -#: parser/parse_agg.c:220 parser/parse_oper.c:222 +#: parser/parse_agg.c:220 parser/parse_oper.c:227 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "no se pudo identificar un operador de ordenamiento para el tipo %s" @@ -14652,213 +15750,231 @@ msgid "grouping operations are not allowed in index predicates" msgstr "no se permiten operaciones «grouping» en predicados de índice" #: parser/parse_agg.c:490 +#, fuzzy +#| msgid "aggregate functions are not allowed in policy expressions" +msgid "aggregate functions are not allowed in statistics expressions" +msgstr "no se permiten funciones de agregación en expresiones de políticas" + +#: parser/parse_agg.c:492 +#, fuzzy +#| msgid "grouping operations are not allowed in policy expressions" +msgid "grouping operations are not allowed in statistics expressions" +msgstr "no se permiten operaciones «grouping» en expresiones de políticas" + +#: parser/parse_agg.c:497 msgid "aggregate functions are not allowed in transform expressions" msgstr "no se permiten funciones de agregación en una expresión de transformación" -#: parser/parse_agg.c:492 +#: parser/parse_agg.c:499 msgid "grouping operations are not allowed in transform expressions" msgstr "no se permiten operaciones «grouping» en expresiones de transformación" -#: parser/parse_agg.c:497 +#: parser/parse_agg.c:504 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "no se permiten funciones de agregación en un parámetro a EXECUTE" -#: parser/parse_agg.c:499 +#: parser/parse_agg.c:506 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "no se permiten operaciones «grouping» en parámetros a EXECUTE" -#: parser/parse_agg.c:504 +#: parser/parse_agg.c:511 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "no se permiten funciones de agregación en condición WHEN de un disparador" -#: parser/parse_agg.c:506 +#: parser/parse_agg.c:513 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "no se permiten operaciones «grouping» en condiciones WHEN de un disparador" -#: parser/parse_agg.c:511 +#: parser/parse_agg.c:518 msgid "aggregate functions are not allowed in partition bound" msgstr "no se permiten funciones de agregación en borde de partición" -#: parser/parse_agg.c:513 +#: parser/parse_agg.c:520 msgid "grouping operations are not allowed in partition bound" msgstr "no se permiten operaciones «grouping» en borde de partición" -#: parser/parse_agg.c:518 +#: parser/parse_agg.c:525 msgid "aggregate functions are not allowed in partition key expressions" msgstr "no se permiten funciones de agregación en una expresión de llave de particionaiento" -#: parser/parse_agg.c:520 +#: parser/parse_agg.c:527 msgid "grouping operations are not allowed in partition key expressions" msgstr "no se permiten operaciones «grouping» en expresiones de llave de particionamiento" -#: parser/parse_agg.c:526 +#: parser/parse_agg.c:533 msgid "aggregate functions are not allowed in column generation expressions" msgstr "no se permiten funciones de agregación en expresiones de generación de columna" -#: parser/parse_agg.c:528 +#: parser/parse_agg.c:535 msgid "grouping operations are not allowed in column generation expressions" msgstr "no se permiten operaciones «grouping» en expresiones de generación de columna" -#: parser/parse_agg.c:534 +#: parser/parse_agg.c:541 msgid "aggregate functions are not allowed in CALL arguments" msgstr "no se permiten funciones de agregación en argumentos de CALL" -#: parser/parse_agg.c:536 +#: parser/parse_agg.c:543 msgid "grouping operations are not allowed in CALL arguments" msgstr "no se permiten operaciones «grouping» en argumentos de CALL" -#: parser/parse_agg.c:542 +#: parser/parse_agg.c:549 msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" msgstr "no se permiten funciones de agregación en las condiciones WHERE de COPY FROM" -#: parser/parse_agg.c:544 +#: parser/parse_agg.c:551 msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "no se permiten las operaciones «grouping» en condiciones WHERE de COPY FROM" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:567 parser/parse_clause.c:1828 +#: parser/parse_agg.c:578 parser/parse_clause.c:1847 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "no se permiten funciones de agregación en %s" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:570 +#: parser/parse_agg.c:581 #, c-format msgid "grouping operations are not allowed in %s" msgstr "no se permiten operaciones «grouping» en %s" -#: parser/parse_agg.c:678 +#: parser/parse_agg.c:689 #, c-format msgid "outer-level aggregate cannot contain a lower-level variable in its direct arguments" msgstr "una función de agregación de nivel exterior no puede contener una variable de nivel inferior en sus argumentos directos" -#: parser/parse_agg.c:757 +#: parser/parse_agg.c:768 #, c-format msgid "aggregate function calls cannot contain set-returning function calls" msgstr "las llamadas a funciones de agregación no pueden contener llamadas a funciones que retornan conjuntos" -#: parser/parse_agg.c:758 parser/parse_expr.c:1845 parser/parse_expr.c:2332 -#: parser/parse_func.c:872 +#: parser/parse_agg.c:769 parser/parse_expr.c:1673 parser/parse_expr.c:2146 +#: parser/parse_func.c:882 #, c-format msgid "You might be able to move the set-returning function into a LATERAL FROM item." msgstr "Puede intentar mover la funci[on que retorna conjuntos a un elemento LATERAL FROM." -#: parser/parse_agg.c:763 +#: parser/parse_agg.c:774 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "las llamadas a funciones de agregación no pueden contener llamadas a funciones de ventana deslizante" -#: parser/parse_agg.c:842 +#: parser/parse_agg.c:853 msgid "window functions are not allowed in JOIN conditions" msgstr "no se permiten funciones de ventana deslizante en condiciones JOIN" -#: parser/parse_agg.c:849 +#: parser/parse_agg.c:860 msgid "window functions are not allowed in functions in FROM" msgstr "no se permiten funciones de ventana deslizante en funciones en FROM" -#: parser/parse_agg.c:855 +#: parser/parse_agg.c:866 msgid "window functions are not allowed in policy expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones de políticas" -#: parser/parse_agg.c:868 +#: parser/parse_agg.c:879 msgid "window functions are not allowed in window definitions" msgstr "no se permiten funciones de ventana deslizante en definiciones de ventana deslizante" -#: parser/parse_agg.c:900 +#: parser/parse_agg.c:911 msgid "window functions are not allowed in check constraints" msgstr "no se permiten funciones de ventana deslizante en restricciones «check»" -#: parser/parse_agg.c:904 +#: parser/parse_agg.c:915 msgid "window functions are not allowed in DEFAULT expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones DEFAULT" -#: parser/parse_agg.c:907 +#: parser/parse_agg.c:918 msgid "window functions are not allowed in index expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones de índice" -#: parser/parse_agg.c:910 +#: parser/parse_agg.c:921 +#, fuzzy +#| msgid "window functions are not allowed in policy expressions" +msgid "window functions are not allowed in statistics expressions" +msgstr "no se permiten funciones de ventana deslizante en expresiones de políticas" + +#: parser/parse_agg.c:924 msgid "window functions are not allowed in index predicates" msgstr "no se permiten funciones de ventana deslizante en predicados de índice" -#: parser/parse_agg.c:913 +#: parser/parse_agg.c:927 msgid "window functions are not allowed in transform expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones de transformación" -#: parser/parse_agg.c:916 +#: parser/parse_agg.c:930 msgid "window functions are not allowed in EXECUTE parameters" msgstr "no se permiten funciones de ventana deslizante en parámetros a EXECUTE" -#: parser/parse_agg.c:919 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "no se permiten funciones de ventana deslizante en condiciones WHEN de un disparador" -#: parser/parse_agg.c:922 +#: parser/parse_agg.c:936 msgid "window functions are not allowed in partition bound" msgstr "no se permiten funciones de ventana deslizante en borde de partición" -#: parser/parse_agg.c:925 +#: parser/parse_agg.c:939 msgid "window functions are not allowed in partition key expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones de llave de particionamiento" -#: parser/parse_agg.c:928 +#: parser/parse_agg.c:942 msgid "window functions are not allowed in CALL arguments" msgstr "no se permiten funciones de ventana deslizante en argumentos de CALL" -#: parser/parse_agg.c:931 +#: parser/parse_agg.c:945 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "no se permiten funciones de ventana deslizante en las condiciones WHERE de COPY FROM" -#: parser/parse_agg.c:934 +#: parser/parse_agg.c:948 msgid "window functions are not allowed in column generation expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones de generación de columna" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:954 parser/parse_clause.c:1837 +#: parser/parse_agg.c:971 parser/parse_clause.c:1856 #, c-format msgid "window functions are not allowed in %s" msgstr "no se permiten funciones de ventana deslizante en %s" -#: parser/parse_agg.c:988 parser/parse_clause.c:2671 +#: parser/parse_agg.c:1005 parser/parse_clause.c:2690 #, c-format msgid "window \"%s\" does not exist" msgstr "la ventana «%s» no existe" -#: parser/parse_agg.c:1072 +#: parser/parse_agg.c:1089 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "demasiados conjuntos «grouping» presentes (máximo 4096)" -#: parser/parse_agg.c:1212 +#: parser/parse_agg.c:1229 #, c-format msgid "aggregate functions are not allowed in a recursive query's recursive term" msgstr "no se permiten funciones de agregación en el término recursivo de una consulta recursiva" -#: parser/parse_agg.c:1405 +#: parser/parse_agg.c:1422 #, c-format msgid "column \"%s.%s\" must appear in the GROUP BY clause or be used in an aggregate function" msgstr "la columna «%s.%s» debe aparecer en la cláusula GROUP BY o ser usada en una función de agregación" -#: parser/parse_agg.c:1408 +#: parser/parse_agg.c:1425 #, c-format msgid "Direct arguments of an ordered-set aggregate must use only grouped columns." msgstr "Argumentos directos de una función de agregación de conjuntos ordenados debe usar sólo columnas agrupadas." -#: parser/parse_agg.c:1413 +#: parser/parse_agg.c:1430 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "la subconsulta usa la columna «%s.%s» no agrupada de una consulta exterior" -#: parser/parse_agg.c:1577 +#: parser/parse_agg.c:1594 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "los argumentos de GROUPING deben ser expresiones agrupantes del nivel de consulta asociado" -#: parser/parse_clause.c:191 +#: parser/parse_clause.c:190 #, c-format msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "relación «%s» no puede ser destino de una sentencia modificadora" -#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2424 +#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2438 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "las funciones que retornan conjuntos deben aparecer en el nivel más externo del FROM" @@ -14940,1083 +16056,1172 @@ msgstr "el método de tablesample «%s» no soporta la opción REPEATABLE" msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "la cláusula TABLESAMPLE sólo puede aplicarse a tablas y vistas materializadas" -#: parser/parse_clause.c:1318 +#: parser/parse_clause.c:1325 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "la columna «%s» aparece más de una vez en la cláusula USING" -#: parser/parse_clause.c:1333 +#: parser/parse_clause.c:1340 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "la columna común «%s» aparece más de una vez en la tabla izquierda" -#: parser/parse_clause.c:1342 +#: parser/parse_clause.c:1349 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "la columna «%s» especificada en la cláusula USING no existe en la tabla izquierda" -#: parser/parse_clause.c:1357 +#: parser/parse_clause.c:1364 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "la columna común «%s» aparece más de una vez en la tabla derecha" -#: parser/parse_clause.c:1366 +#: parser/parse_clause.c:1373 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "la columna «%s» especificada en la cláusula USING no existe en la tabla derecha" -#: parser/parse_clause.c:1447 +#: parser/parse_clause.c:1452 #, c-format msgid "column alias list for \"%s\" has too many entries" msgstr "la lista de alias de columnas para «%s» tiene demasiadas entradas" -#: parser/parse_clause.c:1773 -#, c-format -#| msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" -msgid "row count cannot be NULL in FETCH FIRST ... WITH TIES clause" +#: parser/parse_clause.c:1792 +#, fuzzy, c-format +#| msgid "row count cannot be NULL in FETCH FIRST ... WITH TIES clause" +msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" msgstr "la cantidad de registros no puede ser nula en la cláusula FETCH FIRST ... WITH TIES" #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1798 +#: parser/parse_clause.c:1817 #, c-format msgid "argument of %s must not contain variables" msgstr "el argumento de %s no puede contener variables" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1963 +#: parser/parse_clause.c:1982 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "%s «%s» es ambiguo" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1992 +#: parser/parse_clause.c:2011 #, c-format msgid "non-integer constant in %s" msgstr "constante no entera en %s" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2014 +#: parser/parse_clause.c:2033 #, c-format msgid "%s position %d is not in select list" msgstr "la posición %2$d de %1$s no está en la lista de resultados" -#: parser/parse_clause.c:2453 +#: parser/parse_clause.c:2472 #, c-format msgid "CUBE is limited to 12 elements" msgstr "CUBE está limitado a 12 elementos" -#: parser/parse_clause.c:2659 +#: parser/parse_clause.c:2678 #, c-format msgid "window \"%s\" is already defined" msgstr "la ventana «%s» ya está definida" -#: parser/parse_clause.c:2720 +#: parser/parse_clause.c:2739 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "no se puede pasar a llevar la cláusula PARTITION BY de la ventana «%s»" -#: parser/parse_clause.c:2732 +#: parser/parse_clause.c:2751 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "no se puede pasar a llevar la cláusula ORDER BY de la ventana «%s»" -#: parser/parse_clause.c:2762 parser/parse_clause.c:2768 +#: parser/parse_clause.c:2781 parser/parse_clause.c:2787 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "no se puede copiar la ventana «%s» porque tiene una cláusula «frame»" -#: parser/parse_clause.c:2770 +#: parser/parse_clause.c:2789 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Omita el uso de paréntesis en esta cláusula OVER." -#: parser/parse_clause.c:2790 +#: parser/parse_clause.c:2809 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" msgstr "RANGE con desplazamiento PRECEDING/FOLLOWING requiere exactamente una columna ORDER BY" -#: parser/parse_clause.c:2813 +#: parser/parse_clause.c:2832 #, c-format msgid "GROUPS mode requires an ORDER BY clause" msgstr "el modo GROUPS requiere una cláusula ORDER BY" -#: parser/parse_clause.c:2883 +#: parser/parse_clause.c:2902 #, c-format msgid "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list" msgstr "en una agregación con DISTINCT, las expresiones en ORDER BY deben aparecer en la lista de argumentos" -#: parser/parse_clause.c:2884 +#: parser/parse_clause.c:2903 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "para SELECT DISTINCT, las expresiones en ORDER BY deben aparecer en la lista de resultados" -#: parser/parse_clause.c:2916 +#: parser/parse_clause.c:2935 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "una función de agregación con DISTINCT debe tener al menos un argumento" -#: parser/parse_clause.c:2917 +#: parser/parse_clause.c:2936 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCT debe tener al menos una columna" -#: parser/parse_clause.c:2983 parser/parse_clause.c:3015 +#: parser/parse_clause.c:3002 parser/parse_clause.c:3034 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "las expresiones de SELECT DISTINCT ON deben coincidir con las expresiones iniciales de ORDER BY" -#: parser/parse_clause.c:3093 +#: parser/parse_clause.c:3112 #, c-format msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "ASC/DESC no están permitidos en cláusulas ON CONFLICT" -#: parser/parse_clause.c:3099 +#: parser/parse_clause.c:3118 #, c-format msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "NULLS FIRST/LAST no están permitidos en cláusulas ON CONFLICT" -#: parser/parse_clause.c:3178 +#: parser/parse_clause.c:3197 #, c-format msgid "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "ON CONFLICT DO UPDATE requiere una especificación de inferencia o nombre de restricción" -#: parser/parse_clause.c:3179 +#: parser/parse_clause.c:3198 #, c-format msgid "For example, ON CONFLICT (column_name)." msgstr "Por ejemplo, ON CONFLICT (nombre_de_columna)." -#: parser/parse_clause.c:3190 +#: parser/parse_clause.c:3209 #, c-format msgid "ON CONFLICT is not supported with system catalog tables" msgstr "ON CONFLICT no está soportado con tablas que son catálogos de sistema" -#: parser/parse_clause.c:3198 +#: parser/parse_clause.c:3217 #, c-format msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" msgstr "ON CONFLICT no está soportado en la tabla «%s» usada como catálogo de sistema" -#: parser/parse_clause.c:3341 +#: parser/parse_clause.c:3347 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "el operador «%s» no es un operador válido de ordenamiento" -#: parser/parse_clause.c:3343 +#: parser/parse_clause.c:3349 #, c-format msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "Los operadores de ordenamiento deben ser miembros «<» o «>» de una familia de operadores btree." -#: parser/parse_clause.c:3654 +#: parser/parse_clause.c:3660 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" msgstr "RANGE con desplazamiento PRECEDING/FOLLOWING no está soportado para la columna de tipo %s" -#: parser/parse_clause.c:3660 +#: parser/parse_clause.c:3666 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s" msgstr "RANGE con desplazamiento PRECEDING/FOLLOWING no está soportado para la columna de tipo %s y tipo de desplazamiento %s" -#: parser/parse_clause.c:3663 +#: parser/parse_clause.c:3669 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "Convierta el valor de desplazamiento a un tipo apropiado." -#: parser/parse_clause.c:3668 +#: parser/parse_clause.c:3674 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s" msgstr "RANGE con desplazamiento PRECEDING/FOLLOWING tiene múltiples interpretaciones para la columna de tipo %s y tipo de desplazamiento %s" -#: parser/parse_clause.c:3671 +#: parser/parse_clause.c:3677 #, c-format msgid "Cast the offset value to the exact intended type." msgstr "Convierta el valor de desplazamiento al tipo deseado exacto." -#: parser/parse_coerce.c:1024 parser/parse_coerce.c:1062 -#: parser/parse_coerce.c:1080 parser/parse_coerce.c:1095 -#: parser/parse_expr.c:2241 parser/parse_expr.c:2819 parser/parse_target.c:967 +#: parser/parse_coerce.c:1034 parser/parse_coerce.c:1072 +#: parser/parse_coerce.c:1090 parser/parse_coerce.c:1105 +#: parser/parse_expr.c:2055 parser/parse_expr.c:2649 parser/parse_target.c:995 #, c-format msgid "cannot cast type %s to %s" msgstr "no se puede convertir el tipo %s a %s" -#: parser/parse_coerce.c:1065 +#: parser/parse_coerce.c:1075 #, c-format msgid "Input has too few columns." msgstr "La entrada tiene muy pocas columnas." -#: parser/parse_coerce.c:1083 +#: parser/parse_coerce.c:1093 #, c-format msgid "Cannot cast type %s to %s in column %d." msgstr "No se puede convertir el tipo %s a %s en la columna %d." -#: parser/parse_coerce.c:1098 +#: parser/parse_coerce.c:1108 #, c-format msgid "Input has too many columns." msgstr "La entrada tiene demasiadas columnas." #. translator: first %s is name of a SQL construct, eg WHERE #. translator: first %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1153 parser/parse_coerce.c:1201 +#: parser/parse_coerce.c:1163 parser/parse_coerce.c:1211 #, c-format msgid "argument of %s must be type %s, not type %s" msgstr "el argumento de %s debe ser de tipo %s, no tipo %s" #. translator: %s is name of a SQL construct, eg WHERE #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1164 parser/parse_coerce.c:1213 +#: parser/parse_coerce.c:1174 parser/parse_coerce.c:1223 #, c-format msgid "argument of %s must not return a set" msgstr "el argumento de %s no debe retornar un conjunto" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1353 +#: parser/parse_coerce.c:1363 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "los tipos %2$s y %3$s no son coincidentes en %1$s" -#: parser/parse_coerce.c:1465 +#: parser/parse_coerce.c:1475 #, c-format msgid "argument types %s and %s cannot be matched" msgstr "los tipos de argumento %s y %s no pueden hacerse coincidir" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1517 +#: parser/parse_coerce.c:1527 #, c-format msgid "%s could not convert type %s to %s" msgstr "%s no pudo convertir el tipo %s a %s" -#: parser/parse_coerce.c:1934 -#, c-format -msgid "arguments declared \"anyelement\" are not all alike" -msgstr "los argumentos declarados «anyelement» no son de tipos compatibles" - -#: parser/parse_coerce.c:1954 -#, c-format -msgid "arguments declared \"anyarray\" are not all alike" +#: parser/parse_coerce.c:2089 parser/parse_coerce.c:2109 +#: parser/parse_coerce.c:2129 parser/parse_coerce.c:2149 +#: parser/parse_coerce.c:2204 parser/parse_coerce.c:2237 +#, fuzzy, c-format +#| msgid "arguments declared \"anyarray\" are not all alike" +msgid "arguments declared \"%s\" are not all alike" msgstr "los argumentos declarados «anyarray» no son de tipos compatibles" -#: parser/parse_coerce.c:1974 -#, c-format -msgid "arguments declared \"anyrange\" are not all alike" -msgstr "los argumentos declarados «anyrange» no son de tipos compatibles" - -#: parser/parse_coerce.c:2008 parser/parse_coerce.c:2088 -#: utils/fmgr/funcapi.c:487 +#: parser/parse_coerce.c:2183 parser/parse_coerce.c:2297 +#: utils/fmgr/funcapi.c:489 #, c-format msgid "argument declared %s is not an array but type %s" msgstr "el argumento declarado %s no es un array sino de tipo %s" -#: parser/parse_coerce.c:2029 -#, c-format -msgid "arguments declared \"anycompatiblerange\" are not all alike" -msgstr "los argumentos declarados «anycompatiblerange» no son todos parecidos" - -#: parser/parse_coerce.c:2041 parser/parse_coerce.c:2122 -#: utils/fmgr/funcapi.c:501 +#: parser/parse_coerce.c:2216 parser/parse_coerce.c:2329 +#: utils/fmgr/funcapi.c:503 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "el argumento declarado %s no es un tipo de rango sino tipo %s" -#: parser/parse_coerce.c:2079 +#: parser/parse_coerce.c:2250 parser/parse_coerce.c:2363 +#: utils/fmgr/funcapi.c:521 utils/fmgr/funcapi.c:586 +#, fuzzy, c-format +#| msgid "argument declared %s is not a range type but type %s" +msgid "argument declared %s is not a multirange type but type %s" +msgstr "el argumento declarado %s no es un tipo de rango sino tipo %s" + +#: parser/parse_coerce.c:2288 #, c-format msgid "cannot determine element type of \"anyarray\" argument" msgstr "no se puede determinar el tipo del argumento «anyarray»" -#: parser/parse_coerce.c:2105 parser/parse_coerce.c:2139 +#: parser/parse_coerce.c:2314 parser/parse_coerce.c:2346 +#: parser/parse_coerce.c:2380 parser/parse_coerce.c:2400 #, c-format msgid "argument declared %s is not consistent with argument declared %s" msgstr "el argumento declarado %s no es consistente con el argumento declarado %s" -#: parser/parse_coerce.c:2163 +#: parser/parse_coerce.c:2427 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "no se pudo determinar el tipo polimórfico porque la entrada es de tipo %s" -#: parser/parse_coerce.c:2177 +#: parser/parse_coerce.c:2441 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "el argumento emparejado con anynonarray es un array: %s" -#: parser/parse_coerce.c:2187 +#: parser/parse_coerce.c:2451 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "el tipo emparejado con anyenum no es un tipo enum: %s" -#: parser/parse_coerce.c:2218 parser/parse_coerce.c:2267 -#: parser/parse_coerce.c:2329 parser/parse_coerce.c:2365 +#: parser/parse_coerce.c:2482 parser/parse_coerce.c:2532 +#: parser/parse_coerce.c:2596 parser/parse_coerce.c:2643 #, c-format msgid "could not determine polymorphic type %s because input has type %s" msgstr "no se pudo determinar el tipo polimórfico %s porque la entrada es de tipo %s" -#: parser/parse_coerce.c:2228 +#: parser/parse_coerce.c:2492 #, c-format msgid "anycompatiblerange type %s does not match anycompatible type %s" msgstr "el tipo anycompatiblerange %s no coincide con el tipo anycompatible %s" -#: parser/parse_coerce.c:2242 +#: parser/parse_coerce.c:2506 #, c-format msgid "type matched to anycompatiblenonarray is an array type: %s" msgstr "el argumento emparejado a anycompatiblenonarray es un array: %s" -#: parser/parse_coerce.c:2433 -#, c-format -msgid "A result of type %s requires at least one input of type %s." +#: parser/parse_coerce.c:2607 parser/parse_coerce.c:2658 +#: utils/fmgr/funcapi.c:614 +#, fuzzy, c-format +#| msgid "could not find array type for data type %s" +msgid "could not find multirange type for data type %s" +msgstr "no se pudo encontrar un tipo de array para el tipo de dato %s" + +#: parser/parse_coerce.c:2739 +#, fuzzy, c-format +#| msgid "A result of type %s requires at least one input of type %s." +msgid "A result of type %s requires at least one input of type anyrange or anymultirange." msgstr "Un resultado de tipo %s requiere al menos un argumento de tipo %s." -#: parser/parse_coerce.c:2445 -#, c-format -msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, or anyrange." +#: parser/parse_coerce.c:2756 +#, fuzzy, c-format +#| msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, or anycompatiblerange." +msgid "A result of type %s requires at least one input of type anycompatiblerange or anycompatiblemultirange." +msgstr "Un resultado de tipo %s requiere al menos una entrada de tipo anycompatible, anycompatiblearray, anycompatiblenonarray, o anycompatiblerange." + +#: parser/parse_coerce.c:2768 +#, fuzzy, c-format +#| msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, or anyrange." +msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, anyrange, or anymultirange." msgstr "Un resultado de tipo %s requiere al menos una entrada de tipo anyelement, anyarray, anynonarray, anyenum, o anyrange." -#: parser/parse_coerce.c:2457 +#: parser/parse_coerce.c:2780 #, c-format msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, or anycompatiblerange." msgstr "Un resultado de tipo %s requiere al menos una entrada de tipo anycompatible, anycompatiblearray, anycompatiblenonarray, o anycompatiblerange." -#: parser/parse_coerce.c:2487 +#: parser/parse_coerce.c:2810 msgid "A result of type internal requires at least one input of type internal." msgstr "Un resultado de tipo internal requiere al menos una entrada de tipo internal." #: parser/parse_collate.c:228 parser/parse_collate.c:475 -#: parser/parse_collate.c:981 +#: parser/parse_collate.c:1004 #, c-format msgid "collation mismatch between implicit collations \"%s\" and \"%s\"" msgstr "discordancia de ordenamientos (collation) entre los ordenamientos implícitos «%s» y «%s»" #: parser/parse_collate.c:231 parser/parse_collate.c:478 -#: parser/parse_collate.c:984 +#: parser/parse_collate.c:1007 #, c-format msgid "You can choose the collation by applying the COLLATE clause to one or both expressions." msgstr "Puede elegir el ordenamiento aplicando la cláusula COLLATE a una o ambas expresiones." -#: parser/parse_collate.c:831 +#: parser/parse_collate.c:854 #, c-format msgid "collation mismatch between explicit collations \"%s\" and \"%s\"" msgstr "discordancia de ordenamientos (collation) entre los ordenamientos explícitos «%s» y «%s»" -#: parser/parse_cte.c:42 +#: parser/parse_cte.c:46 #, c-format msgid "recursive reference to query \"%s\" must not appear within its non-recursive term" msgstr "la referencia recursiva a la consulta «%s» no debe aparecer dentro de su término no recursivo" -#: parser/parse_cte.c:44 +#: parser/parse_cte.c:48 #, c-format msgid "recursive reference to query \"%s\" must not appear within a subquery" msgstr "la referencia recursiva a la consulta «%s» no debe aparecer dentro de una subconsulta" -#: parser/parse_cte.c:46 +#: parser/parse_cte.c:50 #, c-format msgid "recursive reference to query \"%s\" must not appear within an outer join" msgstr "la referencia recursiva a la consulta «%s» no debe aparecer dentro de un outer join" -#: parser/parse_cte.c:48 +#: parser/parse_cte.c:52 #, c-format msgid "recursive reference to query \"%s\" must not appear within INTERSECT" msgstr "la referencia recursiva a la consulta «%s» no debe aparecer dentro de INTERSECT" -#: parser/parse_cte.c:50 +#: parser/parse_cte.c:54 #, c-format msgid "recursive reference to query \"%s\" must not appear within EXCEPT" msgstr "la referencia recursiva a la consulta «%s» no debe aparecer dentro de EXCEPT" -#: parser/parse_cte.c:132 +#: parser/parse_cte.c:136 #, c-format msgid "WITH query name \"%s\" specified more than once" msgstr "el nombre de consulta WITH «%s» fue especificado más de una vez" -#: parser/parse_cte.c:264 +#: parser/parse_cte.c:268 #, c-format msgid "WITH clause containing a data-modifying statement must be at the top level" msgstr "la cláusula WITH que contiene las sentencias que modifican datos debe estar en el nivel más externo" -#: parser/parse_cte.c:313 +#: parser/parse_cte.c:317 #, c-format msgid "recursive query \"%s\" column %d has type %s in non-recursive term but type %s overall" msgstr "la columna %2$d en la consulta recursiva «%1$s» tiene tipo %3$s en el término no recursivo, pero %4$s en general" -#: parser/parse_cte.c:319 +#: parser/parse_cte.c:323 #, c-format msgid "Cast the output of the non-recursive term to the correct type." msgstr "Aplique una conversión de tipo a la salida del término no recursivo al tipo correcto." -#: parser/parse_cte.c:324 +#: parser/parse_cte.c:328 #, c-format msgid "recursive query \"%s\" column %d has collation \"%s\" in non-recursive term but collation \"%s\" overall" msgstr "la columna %2$d en la consulta recursiva «%1$s» tiene ordenamiento (collation) %3$s en el término no recursivo, pero %4$s en general" -#: parser/parse_cte.c:328 +#: parser/parse_cte.c:332 #, c-format msgid "Use the COLLATE clause to set the collation of the non-recursive term." msgstr "Use la clásula COLLATE para definir el ordenamiento del término no-recursivo." -#: parser/parse_cte.c:418 +#: parser/parse_cte.c:350 +#, c-format +msgid "WITH query is not recursive" +msgstr "" + +#: parser/parse_cte.c:381 +#, c-format +msgid "with a SEARCH or CYCLE clause, the left side of the UNION must be a SELECT" +msgstr "" + +#: parser/parse_cte.c:386 +#, c-format +msgid "with a SEARCH or CYCLE clause, the right side of the UNION must be a SELECT" +msgstr "" + +#: parser/parse_cte.c:401 +#, c-format +msgid "search column \"%s\" not in WITH query column list" +msgstr "" + +#: parser/parse_cte.c:408 +#, fuzzy, c-format +#| msgid "column \"%s\" specified more than once" +msgid "search column \"%s\" specified more than once" +msgstr "la columna «%s» fue especificada más de una vez" + +#: parser/parse_cte.c:417 +#, c-format +msgid "search sequence column name \"%s\" already used in WITH query column list" +msgstr "" + +#: parser/parse_cte.c:436 +#, fuzzy, c-format +#| msgid "column \"%s\" named in key does not exist" +msgid "cycle column \"%s\" not in WITH query column list" +msgstr "no existe la columna «%s» en la llave" + +#: parser/parse_cte.c:443 +#, fuzzy, c-format +#| msgid "column \"%s\" specified more than once" +msgid "cycle column \"%s\" specified more than once" +msgstr "la columna «%s» fue especificada más de una vez" + +#: parser/parse_cte.c:452 +#, c-format +msgid "cycle mark column name \"%s\" already used in WITH query column list" +msgstr "" + +#: parser/parse_cte.c:464 +#, c-format +msgid "cycle path column name \"%s\" already used in WITH query column list" +msgstr "" + +#: parser/parse_cte.c:472 +#, c-format +msgid "cycle mark column name and cycle path column name are the same" +msgstr "" + +#: parser/parse_cte.c:508 +#, fuzzy, c-format +#| msgid "could not identify an equality operator for type %s" +msgid "could not identify an inequality operator for type %s" +msgstr "no se pudo identificar un operador de igualdad para el tipo %s" + +#: parser/parse_cte.c:520 +#, c-format +msgid "search sequence column name and cycle mark column name are the same" +msgstr "" + +#: parser/parse_cte.c:527 +#, c-format +msgid "search sequence column name and cycle path column name are the same" +msgstr "" + +#: parser/parse_cte.c:611 #, c-format msgid "WITH query \"%s\" has %d columns available but %d columns specified" msgstr "la consulta WITH «%s» tiene %d columnas disponibles pero se especificaron %d" -#: parser/parse_cte.c:598 +#: parser/parse_cte.c:791 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "la recursión mutua entre elementos de WITH no está implementada" -#: parser/parse_cte.c:650 +#: parser/parse_cte.c:843 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "la consulta recursiva «%s» no debe contener sentencias que modifiquen datos" -#: parser/parse_cte.c:658 +#: parser/parse_cte.c:851 #, c-format msgid "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] recursive-term" msgstr "la consulta recursiva «%s» no tiene la forma término-no-recursivo UNION [ALL] término-recursivo" -#: parser/parse_cte.c:702 +#: parser/parse_cte.c:895 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "ORDER BY no está implementado en una consulta recursiva" -#: parser/parse_cte.c:708 +#: parser/parse_cte.c:901 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "OFFSET no está implementado en una consulta recursiva" -#: parser/parse_cte.c:714 +#: parser/parse_cte.c:907 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "LIMIT no está implementado en una consulta recursiva" -#: parser/parse_cte.c:720 +#: parser/parse_cte.c:913 #, c-format msgid "FOR UPDATE/SHARE in a recursive query is not implemented" msgstr "FOR UPDATE/SHARE no está implementado en una consulta recursiva" -#: parser/parse_cte.c:777 +#: parser/parse_cte.c:970 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "la referencia recursiva a la consulta «%s» no debe aparecer más de una vez" -#: parser/parse_expr.c:349 +#: parser/parse_expr.c:287 #, c-format msgid "DEFAULT is not allowed in this context" msgstr "DEFAULT no está permitido en este contexto" -#: parser/parse_expr.c:402 parser/parse_relation.c:3506 -#: parser/parse_relation.c:3526 +#: parser/parse_expr.c:340 parser/parse_relation.c:3592 +#: parser/parse_relation.c:3612 #, c-format msgid "column %s.%s does not exist" msgstr "no existe la columna %s.%s" -#: parser/parse_expr.c:414 +#: parser/parse_expr.c:352 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "la columna «%s» no fue encontrado en el tipo %s" -#: parser/parse_expr.c:420 +#: parser/parse_expr.c:358 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "no se pudo identificar la columna «%s» en el tipo de dato record" -#: parser/parse_expr.c:426 +#: parser/parse_expr.c:364 #, c-format msgid "column notation .%s applied to type %s, which is not a composite type" msgstr "la notación de columna .%s fue aplicada al tipo %s, que no es un tipo compuesto" -#: parser/parse_expr.c:457 parser/parse_target.c:729 +#: parser/parse_expr.c:395 parser/parse_target.c:740 #, c-format msgid "row expansion via \"*\" is not supported here" msgstr "la expansión de filas a través de «*» no está soportado aquí" -#: parser/parse_expr.c:578 +#: parser/parse_expr.c:516 msgid "cannot use column reference in DEFAULT expression" msgstr "no se pueden usar referencias a columnas en una cláusula DEFAULT" -#: parser/parse_expr.c:581 +#: parser/parse_expr.c:519 msgid "cannot use column reference in partition bound expression" msgstr "no se pueden usar referencias a columnas en expresión de borde de partición" -#: parser/parse_expr.c:850 parser/parse_relation.c:799 -#: parser/parse_relation.c:881 parser/parse_target.c:1207 +#: parser/parse_expr.c:788 parser/parse_relation.c:807 +#: parser/parse_relation.c:889 parser/parse_target.c:1235 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "la referencia a la columna «%s» es ambigua" -#: parser/parse_expr.c:906 parser/parse_param.c:110 parser/parse_param.c:142 -#: parser/parse_param.c:199 parser/parse_param.c:298 +#: parser/parse_expr.c:844 parser/parse_param.c:110 parser/parse_param.c:142 +#: parser/parse_param.c:208 parser/parse_param.c:307 #, c-format msgid "there is no parameter $%d" msgstr "no hay parámetro $%d" -#: parser/parse_expr.c:1149 +#: parser/parse_expr.c:1044 #, c-format msgid "NULLIF requires = operator to yield boolean" msgstr "NULLIF requiere que el operador = retorne boolean" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1155 parser/parse_expr.c:3135 +#: parser/parse_expr.c:1050 parser/parse_expr.c:2965 #, c-format msgid "%s must not return a set" msgstr "%s no debe retornar un conjunto" -#: parser/parse_expr.c:1603 parser/parse_expr.c:1635 +#: parser/parse_expr.c:1430 parser/parse_expr.c:1462 #, c-format msgid "number of columns does not match number of values" msgstr "el número de columnas no coincide con el número de valores" -#: parser/parse_expr.c:1649 +#: parser/parse_expr.c:1476 #, c-format msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() expression" msgstr "el origen para un UPDATE de varias columnas debe ser una expresión sub-SELECT o ROW ()" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1843 parser/parse_expr.c:2330 parser/parse_func.c:2540 +#: parser/parse_expr.c:1671 parser/parse_expr.c:2144 parser/parse_func.c:2560 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "no se permiten funciones que retornan conjuntos en %s" -#: parser/parse_expr.c:1904 +#: parser/parse_expr.c:1733 msgid "cannot use subquery in check constraint" msgstr "no se pueden usar subconsultas en una restricción «check»" -#: parser/parse_expr.c:1908 +#: parser/parse_expr.c:1737 msgid "cannot use subquery in DEFAULT expression" msgstr "no se puede usar una subconsulta en una expresión DEFAULT" -#: parser/parse_expr.c:1911 +#: parser/parse_expr.c:1740 msgid "cannot use subquery in index expression" msgstr "no se puede usar una subconsulta en una expresión de índice" -#: parser/parse_expr.c:1914 +#: parser/parse_expr.c:1743 msgid "cannot use subquery in index predicate" msgstr "no se puede usar una subconsulta en un predicado de índice" -#: parser/parse_expr.c:1917 +#: parser/parse_expr.c:1746 +#, fuzzy +#| msgid "cannot use subquery in partition key expression" +msgid "cannot use subquery in statistics expression" +msgstr "no se puede usar una subconsulta en una expresión de llave de partición" + +#: parser/parse_expr.c:1749 msgid "cannot use subquery in transform expression" msgstr "no se puede usar una subconsulta en una expresión de transformación" -#: parser/parse_expr.c:1920 +#: parser/parse_expr.c:1752 msgid "cannot use subquery in EXECUTE parameter" msgstr "no se puede usar una subconsulta en un parámetro a EXECUTE" -#: parser/parse_expr.c:1923 +#: parser/parse_expr.c:1755 msgid "cannot use subquery in trigger WHEN condition" msgstr "no se puede usar una subconsulta en la condición WHEN de un disparador" -#: parser/parse_expr.c:1926 +#: parser/parse_expr.c:1758 msgid "cannot use subquery in partition bound" msgstr "no se puede usar una subconsulta en un borde de partición" -#: parser/parse_expr.c:1929 +#: parser/parse_expr.c:1761 msgid "cannot use subquery in partition key expression" msgstr "no se puede usar una subconsulta en una expresión de llave de partición" -#: parser/parse_expr.c:1932 +#: parser/parse_expr.c:1764 msgid "cannot use subquery in CALL argument" msgstr "no se puede usar una subconsulta en un argumento a CALL" -#: parser/parse_expr.c:1935 +#: parser/parse_expr.c:1767 msgid "cannot use subquery in COPY FROM WHERE condition" msgstr "no se puede usar una subconsulta en la condición WHERE de COPY FROM" -#: parser/parse_expr.c:1938 +#: parser/parse_expr.c:1770 msgid "cannot use subquery in column generation expression" msgstr "no se puede usar una subconsulta en una expresión de generación de columna" -#: parser/parse_expr.c:1991 +#: parser/parse_expr.c:1823 #, c-format msgid "subquery must return only one column" msgstr "la subconsulta debe retornar sólo una columna" -#: parser/parse_expr.c:2075 +#: parser/parse_expr.c:1894 #, c-format msgid "subquery has too many columns" msgstr "la subconsulta tiene demasiadas columnas" -#: parser/parse_expr.c:2080 +#: parser/parse_expr.c:1899 #, c-format msgid "subquery has too few columns" msgstr "la subconsulta tiene muy pocas columnas" -#: parser/parse_expr.c:2181 +#: parser/parse_expr.c:1995 #, c-format msgid "cannot determine type of empty array" msgstr "no se puede determinar el tipo de un array vacío" -#: parser/parse_expr.c:2182 +#: parser/parse_expr.c:1996 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "Agregue una conversión de tipo explícita al tipo deseado, por ejemplo ARRAY[]::integer[]." -#: parser/parse_expr.c:2196 +#: parser/parse_expr.c:2010 #, c-format msgid "could not find element type for data type %s" msgstr "no se pudo encontrar el tipo de dato de elemento para el tipo de dato %s" -#: parser/parse_expr.c:2481 +#: parser/parse_expr.c:2290 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "el valor del atributo XML sin nombre debe ser una referencia a una columna" -#: parser/parse_expr.c:2482 +#: parser/parse_expr.c:2291 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "el valor del elemento XML sin nombre debe ser una referencia a una columna" -#: parser/parse_expr.c:2497 +#: parser/parse_expr.c:2306 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "el nombre de atributo XML «%s» aparece más de una vez" -#: parser/parse_expr.c:2604 +#: parser/parse_expr.c:2413 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "no se puede convertir el resultado de XMLSERIALIZE a %s" -#: parser/parse_expr.c:2892 parser/parse_expr.c:3088 +#: parser/parse_expr.c:2722 parser/parse_expr.c:2918 #, c-format msgid "unequal number of entries in row expressions" msgstr "número desigual de entradas en expresiones de registro" -#: parser/parse_expr.c:2902 +#: parser/parse_expr.c:2732 #, c-format msgid "cannot compare rows of zero length" msgstr "no se pueden comparar registros de largo cero" -#: parser/parse_expr.c:2927 +#: parser/parse_expr.c:2757 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "el operador de comparación de registros debe retornar tipo boolean, no tipo %s" -#: parser/parse_expr.c:2934 +#: parser/parse_expr.c:2764 #, c-format msgid "row comparison operator must not return a set" msgstr "el operador de comparación de registros no puede retornar un conjunto" -#: parser/parse_expr.c:2993 parser/parse_expr.c:3034 +#: parser/parse_expr.c:2823 parser/parse_expr.c:2864 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "no se pudo determinar la interpretación del operador de comparación de registros %s" -#: parser/parse_expr.c:2995 +#: parser/parse_expr.c:2825 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "Los operadores de comparación de registros deben estar asociados a una familia de operadores btree." -#: parser/parse_expr.c:3036 +#: parser/parse_expr.c:2866 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Hay múltiples candidatos igualmente plausibles." -#: parser/parse_expr.c:3129 +#: parser/parse_expr.c:2959 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROM requiere que el operador = retorne boolean" -#: parser/parse_expr.c:3448 parser/parse_expr.c:3466 -#, c-format -msgid "operator precedence change: %s is now lower precedence than %s" -msgstr "cambio de precedencia de operadores: %s es ahora de menor precedencia que %s" - -#: parser/parse_func.c:191 +#: parser/parse_func.c:192 #, c-format msgid "argument name \"%s\" used more than once" msgstr "nombre de argumento «%s» especificado más de una vez" -#: parser/parse_func.c:202 +#: parser/parse_func.c:203 #, c-format msgid "positional argument cannot follow named argument" msgstr "un argumento posicional no puede seguir a un argumento con nombre" -#: parser/parse_func.c:284 parser/parse_func.c:2243 +#: parser/parse_func.c:286 parser/parse_func.c:2257 #, c-format msgid "%s is not a procedure" msgstr "%s no es un procedimiento" -#: parser/parse_func.c:288 +#: parser/parse_func.c:290 #, c-format msgid "To call a function, use SELECT." msgstr "Para invocar a una función, use SELECT." -#: parser/parse_func.c:294 +#: parser/parse_func.c:296 #, c-format msgid "%s is a procedure" msgstr "%s es un procedimiento" -#: parser/parse_func.c:298 +#: parser/parse_func.c:300 #, c-format msgid "To call a procedure, use CALL." msgstr "Para invocar a un procedimiento, use CALL." -#: parser/parse_func.c:312 +#: parser/parse_func.c:314 #, c-format msgid "%s(*) specified, but %s is not an aggregate function" msgstr "se especificó %s(*), pero %s no es una función de agregación" -#: parser/parse_func.c:319 +#: parser/parse_func.c:321 #, c-format msgid "DISTINCT specified, but %s is not an aggregate function" msgstr "se especificó DISTINCT, pero %s no es una función de agregación" -#: parser/parse_func.c:325 +#: parser/parse_func.c:327 #, c-format msgid "WITHIN GROUP specified, but %s is not an aggregate function" msgstr "se especificó WITHIN GROUP, pero %s no es una función de agregación" -#: parser/parse_func.c:331 +#: parser/parse_func.c:333 #, c-format msgid "ORDER BY specified, but %s is not an aggregate function" msgstr "se especificó ORDER BY, pero %s no es una función de agregación" -#: parser/parse_func.c:337 +#: parser/parse_func.c:339 #, c-format msgid "FILTER specified, but %s is not an aggregate function" msgstr "se especificó FILTER, pero %s no es una función de agregación" -#: parser/parse_func.c:343 +#: parser/parse_func.c:345 #, c-format msgid "OVER specified, but %s is not a window function nor an aggregate function" msgstr "se especificó OVER, pero %s no es una función de ventana deslizante ni una función de agregación" -#: parser/parse_func.c:381 +#: parser/parse_func.c:383 #, c-format msgid "WITHIN GROUP is required for ordered-set aggregate %s" msgstr "WITHIN GROUP es obligatorio para la función de agregación de conjuntos ordenados %s" -#: parser/parse_func.c:387 +#: parser/parse_func.c:389 #, c-format msgid "OVER is not supported for ordered-set aggregate %s" msgstr "OVER no está soportado para la función de agregación de conjuntos ordenados %s" -#: parser/parse_func.c:418 parser/parse_func.c:447 -#, c-format -msgid "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." -msgstr "Hay una función de agregación de conjuntos ordenados %s, pero requiere %d argumentos directos, no %d." +#: parser/parse_func.c:420 parser/parse_func.c:451 +#, fuzzy, c-format +#| msgid "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." +msgid "There is an ordered-set aggregate %s, but it requires %d direct argument, not %d." +msgid_plural "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." +msgstr[0] "Hay una función de agregación de conjuntos ordenados %s, pero requiere %d argumentos directos, no %d." +msgstr[1] "Hay una función de agregación de conjuntos ordenados %s, pero requiere %d argumentos directos, no %d." -#: parser/parse_func.c:472 +#: parser/parse_func.c:478 #, c-format msgid "To use the hypothetical-set aggregate %s, the number of hypothetical direct arguments (here %d) must match the number of ordering columns (here %d)." msgstr "Para usar la función de agregación de conjunto hipotética %s, el número de argumentos hipotéticos directos (acá %d) debe coincidir con el número de columnas del ordenamiento (acá %d)." -#: parser/parse_func.c:486 -#, c-format -msgid "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." -msgstr "Hay una función de agregación de conjuntos ordenados %s, pero requiere al menos %d argumentos directos" +#: parser/parse_func.c:492 +#, fuzzy, c-format +#| msgid "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." +msgid "There is an ordered-set aggregate %s, but it requires at least %d direct argument." +msgid_plural "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." +msgstr[0] "Hay una función de agregación de conjuntos ordenados %s, pero requiere al menos %d argumentos directos" +msgstr[1] "Hay una función de agregación de conjuntos ordenados %s, pero requiere al menos %d argumentos directos" -#: parser/parse_func.c:505 +#: parser/parse_func.c:513 #, c-format msgid "%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP" msgstr "%s no es una función de agregación de conjunto ordenado, por lo que no puede tener WITHIN GROUP" -#: parser/parse_func.c:518 +#: parser/parse_func.c:526 #, c-format msgid "window function %s requires an OVER clause" msgstr "la función de ventana deslizante %s requiere una cláusula OVER" -#: parser/parse_func.c:525 +#: parser/parse_func.c:533 #, c-format msgid "window function %s cannot have WITHIN GROUP" msgstr "la función de ventana deslizante %s no puede tener WITHIN GROUP" -#: parser/parse_func.c:554 +#: parser/parse_func.c:562 #, c-format msgid "procedure %s is not unique" msgstr "la procedimiento %s no es único" -#: parser/parse_func.c:557 +#: parser/parse_func.c:565 #, c-format msgid "Could not choose a best candidate procedure. You might need to add explicit type casts." msgstr "No se pudo escoger el procedimiento más adecuado. Puede ser necesario agregar conversiones explícitas de tipos." -#: parser/parse_func.c:563 +#: parser/parse_func.c:571 #, c-format msgid "function %s is not unique" msgstr "la función %s no es única" -#: parser/parse_func.c:566 +#: parser/parse_func.c:574 #, c-format msgid "Could not choose a best candidate function. You might need to add explicit type casts." msgstr "No se pudo escoger la función más adecuada. Puede ser necesario agregar conversiones explícitas de tipos." -#: parser/parse_func.c:605 +#: parser/parse_func.c:613 #, c-format msgid "No aggregate function matches the given name and argument types. Perhaps you misplaced ORDER BY; ORDER BY must appear after all regular arguments of the aggregate." msgstr "Ninguna función coincide en el nombre y tipos de argumentos. Quizás puso ORDER BY en una mala posición; ORDER BY debe aparecer después de todos los argumentos normales de la función de agregación." -#: parser/parse_func.c:613 parser/parse_func.c:2286 +#: parser/parse_func.c:621 parser/parse_func.c:2300 #, c-format msgid "procedure %s does not exist" msgstr "no existe el procedimiento «%s»" -#: parser/parse_func.c:616 +#: parser/parse_func.c:624 #, c-format msgid "No procedure matches the given name and argument types. You might need to add explicit type casts." msgstr "Ningún procedimiento coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos." -#: parser/parse_func.c:625 +#: parser/parse_func.c:633 #, c-format msgid "No function matches the given name and argument types. You might need to add explicit type casts." msgstr "Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos." -#: parser/parse_func.c:727 +#: parser/parse_func.c:735 #, c-format msgid "VARIADIC argument must be an array" msgstr "el parámetro VARIADIC debe ser un array" -#: parser/parse_func.c:779 parser/parse_func.c:843 +#: parser/parse_func.c:789 parser/parse_func.c:853 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "%s(*) debe ser usado para invocar una función de agregación sin parámetros" -#: parser/parse_func.c:786 +#: parser/parse_func.c:796 #, c-format msgid "aggregates cannot return sets" msgstr "las funciones de agregación no pueden retornar conjuntos" -#: parser/parse_func.c:801 +#: parser/parse_func.c:811 #, c-format msgid "aggregates cannot use named arguments" msgstr "las funciones de agregación no pueden usar argumentos con nombre" -#: parser/parse_func.c:833 +#: parser/parse_func.c:843 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "DISTINCT no está implementado para funciones de ventana deslizante" -#: parser/parse_func.c:853 +#: parser/parse_func.c:863 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "el ORDER BY de funciones de agregación no está implementado para funciones de ventana deslizante" -#: parser/parse_func.c:862 +#: parser/parse_func.c:872 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "FILTER no está implementado para funciones de ventana deslizante" -#: parser/parse_func.c:871 +#: parser/parse_func.c:881 #, c-format msgid "window function calls cannot contain set-returning function calls" msgstr "las llamadas a funciones de ventana no pueden contener llamadas a funciones que retornan conjuntos" -#: parser/parse_func.c:879 +#: parser/parse_func.c:889 #, c-format msgid "window functions cannot return sets" msgstr "las funciones de ventana deslizante no pueden retornar conjuntos" -#: parser/parse_func.c:2124 parser/parse_func.c:2315 +#: parser/parse_func.c:2138 parser/parse_func.c:2329 #, c-format msgid "could not find a function named \"%s\"" msgstr "no se pudo encontrar una función llamada «%s»" -#: parser/parse_func.c:2138 parser/parse_func.c:2333 +#: parser/parse_func.c:2152 parser/parse_func.c:2347 #, c-format msgid "function name \"%s\" is not unique" msgstr "el nombre de función «%s» no es único" -#: parser/parse_func.c:2140 parser/parse_func.c:2335 +#: parser/parse_func.c:2154 parser/parse_func.c:2349 #, c-format msgid "Specify the argument list to select the function unambiguously." msgstr "Especifique la lista de argumentos para seleccionar la función sin ambigüedad." -#: parser/parse_func.c:2184 +#: parser/parse_func.c:2198 #, c-format msgid "procedures cannot have more than %d argument" msgid_plural "procedures cannot have more than %d arguments" msgstr[0] "los procedimientos no pueden tener más de %d argumento" msgstr[1] "los procedimientos no pueden tener más de %d argumentos" -#: parser/parse_func.c:2233 +#: parser/parse_func.c:2247 #, c-format msgid "%s is not a function" msgstr "«%s» no es una función" -#: parser/parse_func.c:2253 +#: parser/parse_func.c:2267 #, c-format msgid "function %s is not an aggregate" msgstr "la función %s no es una función de agregación" -#: parser/parse_func.c:2281 +#: parser/parse_func.c:2295 #, c-format msgid "could not find a procedure named \"%s\"" msgstr "no se pudo encontrar un procedimiento llamado «%s»" -#: parser/parse_func.c:2295 +#: parser/parse_func.c:2309 #, c-format msgid "could not find an aggregate named \"%s\"" msgstr "no se pudo encontrar una función de agregación llamada «%s»" -#: parser/parse_func.c:2300 +#: parser/parse_func.c:2314 #, c-format msgid "aggregate %s(*) does not exist" msgstr "no existe la función de agregación %s(*)" -#: parser/parse_func.c:2305 +#: parser/parse_func.c:2319 #, c-format msgid "aggregate %s does not exist" msgstr "no existe la función de agregación %s" -#: parser/parse_func.c:2340 +#: parser/parse_func.c:2354 #, c-format msgid "procedure name \"%s\" is not unique" msgstr "el nombre de procedimiento «%s» no es única" -#: parser/parse_func.c:2342 +#: parser/parse_func.c:2356 #, c-format msgid "Specify the argument list to select the procedure unambiguously." msgstr "Especifique la lista de argumentos para seleccionar el procedimiento sin ambigüedad." -#: parser/parse_func.c:2347 +#: parser/parse_func.c:2361 #, c-format msgid "aggregate name \"%s\" is not unique" msgstr "el atributo de la función de agregación «%s» no es único" -#: parser/parse_func.c:2349 +#: parser/parse_func.c:2363 #, c-format msgid "Specify the argument list to select the aggregate unambiguously." msgstr "Especifique la lista de argumentos para seleccionar la función de agregación sin ambigüedad." -#: parser/parse_func.c:2354 +#: parser/parse_func.c:2368 #, c-format msgid "routine name \"%s\" is not unique" msgstr "el nombre de rutina «%s» no es único" -#: parser/parse_func.c:2356 +#: parser/parse_func.c:2370 #, c-format msgid "Specify the argument list to select the routine unambiguously." msgstr "Especifique la lista de argumentos para seleccionar la rutina sin ambigüedad." -#: parser/parse_func.c:2411 +#: parser/parse_func.c:2425 msgid "set-returning functions are not allowed in JOIN conditions" msgstr "no se permiten funciones que retornan conjuntos en condiciones JOIN" -#: parser/parse_func.c:2432 +#: parser/parse_func.c:2446 msgid "set-returning functions are not allowed in policy expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de política" -#: parser/parse_func.c:2448 +#: parser/parse_func.c:2462 msgid "set-returning functions are not allowed in window definitions" msgstr "no se permiten funciones que retornan conjuntos definiciones de ventana deslizante" -#: parser/parse_func.c:2486 +#: parser/parse_func.c:2500 msgid "set-returning functions are not allowed in check constraints" msgstr "no se permiten funciones de que retornan conjuntos en restricciones «check»" -#: parser/parse_func.c:2490 +#: parser/parse_func.c:2504 msgid "set-returning functions are not allowed in DEFAULT expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones DEFAULT" -#: parser/parse_func.c:2493 +#: parser/parse_func.c:2507 msgid "set-returning functions are not allowed in index expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de índice" -#: parser/parse_func.c:2496 +#: parser/parse_func.c:2510 msgid "set-returning functions are not allowed in index predicates" msgstr "no se permiten funciones que retornan conjuntos en predicados de índice" -#: parser/parse_func.c:2499 +#: parser/parse_func.c:2513 +#, fuzzy +#| msgid "set-returning functions are not allowed in policy expressions" +msgid "set-returning functions are not allowed in statistics expressions" +msgstr "no se permiten funciones que retornan conjuntos en expresiones de política" + +#: parser/parse_func.c:2516 msgid "set-returning functions are not allowed in transform expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de transformación" -#: parser/parse_func.c:2502 +#: parser/parse_func.c:2519 msgid "set-returning functions are not allowed in EXECUTE parameters" msgstr "no se permiten funciones que retornan conjuntos en parámetros a EXECUTE" -#: parser/parse_func.c:2505 +#: parser/parse_func.c:2522 msgid "set-returning functions are not allowed in trigger WHEN conditions" msgstr "no se permiten funciones que retornan conjuntos en condiciones WHEN de un disparador" -#: parser/parse_func.c:2508 +#: parser/parse_func.c:2525 msgid "set-returning functions are not allowed in partition bound" msgstr "no se permiten funciones que retornan conjuntos en bordes de partición" -#: parser/parse_func.c:2511 +#: parser/parse_func.c:2528 msgid "set-returning functions are not allowed in partition key expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de llave de particionamiento" -#: parser/parse_func.c:2514 +#: parser/parse_func.c:2531 msgid "set-returning functions are not allowed in CALL arguments" msgstr "no se permiten funciones que retornan conjuntos en argumentos de CALL" -#: parser/parse_func.c:2517 +#: parser/parse_func.c:2534 msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" msgstr "no se permiten funciones que retornan conjuntos en las condiciones WHERE de COPY FROM" -#: parser/parse_func.c:2520 +#: parser/parse_func.c:2537 msgid "set-returning functions are not allowed in column generation expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de generación de columna" -#: parser/parse_node.c:86 +#: parser/parse_node.c:87 #, c-format msgid "target lists can have at most %d entries" msgstr "las listas de resultados pueden tener a lo más %d entradas" -#: parser/parse_node.c:235 -#, c-format -msgid "cannot subscript type %s because it is not an array" -msgstr "no se puede poner subíndices al tipo %s porque no es un array" - -#: parser/parse_node.c:340 parser/parse_node.c:377 -#, c-format -msgid "array subscript must have type integer" -msgstr "los subíndices de arrays deben tener tipo entero" - -#: parser/parse_node.c:408 -#, c-format -msgid "array assignment requires type %s but expression is of type %s" -msgstr "la asignación de array debe tener tipo %s pero la expresión es de tipo %s" +#: parser/parse_oper.c:123 parser/parse_oper.c:690 +#, fuzzy, c-format +#| msgid "log format \"%s\" is not supported" +msgid "postfix operators are not supported" +msgstr "el formato de log «%s» no está soportado" -#: parser/parse_oper.c:125 parser/parse_oper.c:724 utils/adt/regproc.c:521 -#: utils/adt/regproc.c:705 +#: parser/parse_oper.c:130 parser/parse_oper.c:649 utils/adt/regproc.c:538 +#: utils/adt/regproc.c:722 #, c-format msgid "operator does not exist: %s" msgstr "el operador no existe: %s" -#: parser/parse_oper.c:224 +#: parser/parse_oper.c:229 #, c-format msgid "Use an explicit ordering operator or modify the query." msgstr "Use un operador de ordenamiento explícito o modifique la consulta." -#: parser/parse_oper.c:480 +#: parser/parse_oper.c:485 #, c-format msgid "operator requires run-time type coercion: %s" msgstr "el operador requiere conversión explícita de tipos: %s" -#: parser/parse_oper.c:716 +#: parser/parse_oper.c:641 #, c-format msgid "operator is not unique: %s" msgstr "el operador no es único: %s" -#: parser/parse_oper.c:718 +#: parser/parse_oper.c:643 #, c-format msgid "Could not choose a best candidate operator. You might need to add explicit type casts." msgstr "No se pudo escoger el operador más adecuado. Puede ser necesario agregar conversiones explícitas de tipos." -#: parser/parse_oper.c:727 +#: parser/parse_oper.c:652 #, c-format msgid "No operator matches the given name and argument type. You might need to add an explicit type cast." msgstr "Ningún operador coincide en el nombre y tipo de argumento. Puede ser necesario agregar conversión explícita de tipos." -#: parser/parse_oper.c:729 +#: parser/parse_oper.c:654 #, c-format msgid "No operator matches the given name and argument types. You might need to add explicit type casts." msgstr "Ningún operador coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos." -#: parser/parse_oper.c:790 parser/parse_oper.c:912 +#: parser/parse_oper.c:714 parser/parse_oper.c:828 #, c-format msgid "operator is only a shell: %s" msgstr "el operador está inconcluso: %s" -#: parser/parse_oper.c:900 +#: parser/parse_oper.c:816 #, c-format msgid "op ANY/ALL (array) requires array on right side" msgstr "op ANY/ALL (array) requiere un array al lado derecho" -#: parser/parse_oper.c:942 +#: parser/parse_oper.c:858 #, c-format msgid "op ANY/ALL (array) requires operator to yield boolean" msgstr "op ANY/ALL (array) requiere un operador que entregue boolean" -#: parser/parse_oper.c:947 +#: parser/parse_oper.c:863 #, c-format msgid "op ANY/ALL (array) requires operator not to return a set" msgstr "op ANY/ALL (array) requiere un operador que no retorne un conjunto" -#: parser/parse_param.c:216 +#: parser/parse_param.c:225 #, c-format msgid "inconsistent types deduced for parameter $%d" msgstr "para el parámetro $%d se dedujeron tipos de dato inconsistentes" @@ -16031,153 +17236,166 @@ msgstr "la referencia a la tabla «%s» es ambigua" msgid "table reference %u is ambiguous" msgstr "la referencia a la tabla %u es ambigua" -#: parser/parse_relation.c:444 +#: parser/parse_relation.c:445 #, c-format msgid "table name \"%s\" specified more than once" msgstr "el nombre de tabla «%s» fue especificado más de una vez" -#: parser/parse_relation.c:473 parser/parse_relation.c:3446 +#: parser/parse_relation.c:474 parser/parse_relation.c:3532 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "referencia a la entrada de la cláusula FROM para la tabla «%s» no válida" -#: parser/parse_relation.c:477 parser/parse_relation.c:3451 +#: parser/parse_relation.c:478 parser/parse_relation.c:3537 #, c-format msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." msgstr "Hay una entrada para la tabla «%s», pero no puede ser referenciada desde esta parte de la consulta." -#: parser/parse_relation.c:479 +#: parser/parse_relation.c:480 #, c-format msgid "The combining JOIN type must be INNER or LEFT for a LATERAL reference." msgstr "El tipo de JOIN debe ser INNER o LEFT para una referencia LATERAL." -#: parser/parse_relation.c:690 +#: parser/parse_relation.c:691 #, c-format msgid "system column \"%s\" reference in check constraint is invalid" msgstr "la referencia a columna a sistema «%s» en una restricción check no es válida" -#: parser/parse_relation.c:699 +#: parser/parse_relation.c:700 #, c-format msgid "cannot use system column \"%s\" in column generation expression" msgstr "no se puede usar la columna de sistema «%s» en una expresión de generación de columna" -#: parser/parse_relation.c:1170 parser/parse_relation.c:1620 -#: parser/parse_relation.c:2262 +#: parser/parse_relation.c:1173 parser/parse_relation.c:1625 +#: parser/parse_relation.c:2302 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "la tabla «%s» tiene %d columnas pero se especificaron %d" -#: parser/parse_relation.c:1372 +#: parser/parse_relation.c:1377 #, c-format msgid "There is a WITH item named \"%s\", but it cannot be referenced from this part of the query." msgstr "Hay un elemento WITH llamado «%s», pero no puede ser referenciada desde esta parte de la consulta." -#: parser/parse_relation.c:1374 +#: parser/parse_relation.c:1379 #, c-format msgid "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." msgstr "Use WITH RECURSIVE, o reordene los elementos de WITH para eliminar referencias hacia adelante." -#: parser/parse_relation.c:1747 +#: parser/parse_relation.c:1767 +#, fuzzy, c-format +#| msgid "a column definition list is required for functions returning \"record\"" +msgid "a column definition list is redundant for a function with OUT parameters" +msgstr "la lista de definición de columnas es obligatoria para funciones que retornan «record»" + +#: parser/parse_relation.c:1773 +#, fuzzy, c-format +#| msgid "a column definition list is required for functions returning \"record\"" +msgid "a column definition list is redundant for a function returning a named composite type" +msgstr "la lista de definición de columnas es obligatoria para funciones que retornan «record»" + +#: parser/parse_relation.c:1780 #, c-format msgid "a column definition list is only allowed for functions returning \"record\"" msgstr "sólo se permite una lista de definición de columnas en funciones que retornan «record»" -#: parser/parse_relation.c:1756 +#: parser/parse_relation.c:1791 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "la lista de definición de columnas es obligatoria para funciones que retornan «record»" -#: parser/parse_relation.c:1845 +#: parser/parse_relation.c:1880 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "la función «%s» en FROM tiene el tipo de retorno no soportado %s" -#: parser/parse_relation.c:2054 +#: parser/parse_relation.c:2089 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "la lista VALUES «%s» tiene %d columnas disponibles pero se especificaron %d" -#: parser/parse_relation.c:2125 +#: parser/parse_relation.c:2161 #, c-format msgid "joins can have at most %d columns" msgstr "los joins pueden tener a lo más %d columnas" -#: parser/parse_relation.c:2235 +#: parser/parse_relation.c:2275 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "la consulta WITH «%s» no tiene una cláusula RETURNING" -#: parser/parse_relation.c:3221 parser/parse_relation.c:3231 +#: parser/parse_relation.c:3307 parser/parse_relation.c:3317 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "no existe la columna %d en la relación «%s»" -#: parser/parse_relation.c:3449 +#: parser/parse_relation.c:3535 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "Probablemente quiera hacer referencia al alias de la tabla «%s»." -#: parser/parse_relation.c:3457 +#: parser/parse_relation.c:3543 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "falta una entrada para la tabla «%s» en la cláusula FROM" -#: parser/parse_relation.c:3509 +#: parser/parse_relation.c:3595 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "Probablemente quiera hacer referencia a la columna «%s.%s»." -#: parser/parse_relation.c:3511 +#: parser/parse_relation.c:3597 #, c-format msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." msgstr "Hay una columna llamada «%s» en la tabla «%s», pero no puede ser referenciada desde esta parte de la consulta." -#: parser/parse_relation.c:3528 +#: parser/parse_relation.c:3614 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "Probablemente quiera hacer referencia a la columna «%s.%s» o la columna «%s.%s»." -#: parser/parse_target.c:478 parser/parse_target.c:792 +#: parser/parse_target.c:483 parser/parse_target.c:804 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "no se puede asignar a la columna de sistema «%s»" -#: parser/parse_target.c:506 +#: parser/parse_target.c:511 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "no se puede definir un elemento de array a DEFAULT" -#: parser/parse_target.c:511 +#: parser/parse_target.c:516 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "no se puede definir un subcampo a DEFAULT" -#: parser/parse_target.c:584 +#: parser/parse_target.c:590 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "la columna «%s» es de tipo %s pero la expresión es de tipo %s" -#: parser/parse_target.c:776 +#: parser/parse_target.c:788 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a composite type" msgstr "no se puede asignar al campo «%s» de la columna «%s» porque su tipo %s no es un tipo compuesto" -#: parser/parse_target.c:785 +#: parser/parse_target.c:797 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because there is no such column in data type %s" msgstr "no se puede asignar al campo «%s» de la columna «%s» porque no existe esa columna en el tipo de dato %s" -#: parser/parse_target.c:864 -#, c-format -msgid "array assignment to \"%s\" requires type %s but expression is of type %s" +#: parser/parse_target.c:878 +#, fuzzy, c-format +#| msgid "array assignment to \"%s\" requires type %s but expression is of type %s" +msgid "subscripted assignment to \"%s\" requires type %s but expression is of type %s" msgstr "la asignación de array a «%s» requiere tipo %s pero la expresión es de tipo %s" -#: parser/parse_target.c:874 +#: parser/parse_target.c:888 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "el subcampo «%s» es de tipo %s pero la expresión es de tipo %s" -#: parser/parse_target.c:1295 +#: parser/parse_target.c:1323 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "SELECT * sin especificar tablas no es válido" @@ -16197,8 +17415,8 @@ msgstr "la referencia a %%TYPE es inapropiada (demasiados nombres con punto): %s msgid "type reference %s converted to %s" msgstr "la referencia al tipo %s convertida a %s" -#: parser/parse_type.c:278 parser/parse_type.c:857 utils/cache/typcache.c:383 -#: utils/cache/typcache.c:437 +#: parser/parse_type.c:278 parser/parse_type.c:803 utils/cache/typcache.c:389 +#: utils/cache/typcache.c:444 #, c-format msgid "type \"%s\" is only a shell" msgstr "el tipo «%s» está inconcluso" @@ -16213,453 +17431,459 @@ msgstr "un modificador de tipo no está permitido para el tipo «%s»" msgid "type modifiers must be simple constants or identifiers" msgstr "los modificadores de tipo deben ser constantes simples o identificadores" -#: parser/parse_type.c:721 parser/parse_type.c:820 +#: parser/parse_type.c:721 parser/parse_type.c:766 #, c-format msgid "invalid type name \"%s\"" msgstr "el nombre de tipo «%s» no es válido" -#: parser/parse_utilcmd.c:264 +#: parser/parse_utilcmd.c:266 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "no se puede crear una tabla particionada como hija de herencia" -#: parser/parse_utilcmd.c:428 -#, c-format -msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" -msgstr "%s creará una secuencia implícita «%s» para la columna serial «%s.%s»" - -#: parser/parse_utilcmd.c:559 +#: parser/parse_utilcmd.c:580 #, c-format msgid "array of serial is not implemented" msgstr "array de serial no está implementado" -#: parser/parse_utilcmd.c:637 parser/parse_utilcmd.c:649 +#: parser/parse_utilcmd.c:659 parser/parse_utilcmd.c:671 +#: parser/parse_utilcmd.c:730 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "las declaraciones NULL/NOT NULL no son coincidentes para la columna «%s» de la tabla «%s»" -#: parser/parse_utilcmd.c:661 +#: parser/parse_utilcmd.c:683 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "múltiples valores default especificados para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:678 +#: parser/parse_utilcmd.c:700 #, c-format msgid "identity columns are not supported on typed tables" msgstr "las columnas identidad no está soportadas en tablas tipadas" -#: parser/parse_utilcmd.c:682 +#: parser/parse_utilcmd.c:704 #, c-format msgid "identity columns are not supported on partitions" msgstr "las columnas identidad no están soportadas en particiones" -#: parser/parse_utilcmd.c:691 +#: parser/parse_utilcmd.c:713 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "múltiples especificaciones de identidad para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:711 +#: parser/parse_utilcmd.c:743 #, c-format msgid "generated columns are not supported on typed tables" msgstr "las columnas generadas no están soportadas en tablas tipadas" -#: parser/parse_utilcmd.c:715 +#: parser/parse_utilcmd.c:747 #, c-format msgid "generated columns are not supported on partitions" msgstr "las columnas generadas no están soportadas en particiones" -#: parser/parse_utilcmd.c:720 +#: parser/parse_utilcmd.c:752 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "múltiples cláusulas de generación especificadas para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:738 parser/parse_utilcmd.c:853 +#: parser/parse_utilcmd.c:770 parser/parse_utilcmd.c:885 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "las restricciones de llave primaria no están soportadas en tablas foráneas" -#: parser/parse_utilcmd.c:747 parser/parse_utilcmd.c:863 +#: parser/parse_utilcmd.c:779 parser/parse_utilcmd.c:895 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "las restricciones unique no están soportadas en tablas foráneas" -#: parser/parse_utilcmd.c:792 +#: parser/parse_utilcmd.c:824 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "tanto el valor por omisión como identidad especificados para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:800 +#: parser/parse_utilcmd.c:832 #, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" msgstr "tanto el valor por omisión como expresión de generación especificados para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:808 +#: parser/parse_utilcmd.c:840 #, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" msgstr "tanto identidad como expresión de generación especificados para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:873 +#: parser/parse_utilcmd.c:905 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "las restricciones de exclusión no están soportadas en tablas foráneas" -#: parser/parse_utilcmd.c:879 +#: parser/parse_utilcmd.c:911 #, c-format msgid "exclusion constraints are not supported on partitioned tables" msgstr "las restricciones de exclusión no están soportadas en tablas particionadas" -#: parser/parse_utilcmd.c:944 +#: parser/parse_utilcmd.c:976 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE no está soportado para la creación de tablas foráneas" -#: parser/parse_utilcmd.c:1704 parser/parse_utilcmd.c:1813 +#: parser/parse_utilcmd.c:1753 parser/parse_utilcmd.c:1861 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "El índice «%s» contiene una referencia a la fila completa (whole-row)." -#: parser/parse_utilcmd.c:2163 +#: parser/parse_utilcmd.c:2248 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "no se puede usar un índice existente en CREATE TABLE" -#: parser/parse_utilcmd.c:2183 +#: parser/parse_utilcmd.c:2268 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "el índice «%s» ya está asociado a una restricción" -#: parser/parse_utilcmd.c:2198 +#: parser/parse_utilcmd.c:2283 #, c-format msgid "index \"%s\" is not valid" msgstr "el índice «%s» no es válido" -#: parser/parse_utilcmd.c:2204 +#: parser/parse_utilcmd.c:2289 #, c-format msgid "\"%s\" is not a unique index" msgstr "«%s» no es un índice único" -#: parser/parse_utilcmd.c:2205 parser/parse_utilcmd.c:2212 -#: parser/parse_utilcmd.c:2219 parser/parse_utilcmd.c:2296 +#: parser/parse_utilcmd.c:2290 parser/parse_utilcmd.c:2297 +#: parser/parse_utilcmd.c:2304 parser/parse_utilcmd.c:2381 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "No se puede crear una restricción de llave primaria o única usando un índice así." -#: parser/parse_utilcmd.c:2211 +#: parser/parse_utilcmd.c:2296 #, c-format msgid "index \"%s\" contains expressions" msgstr "el índice «%s» contiene expresiones" -#: parser/parse_utilcmd.c:2218 +#: parser/parse_utilcmd.c:2303 #, c-format msgid "\"%s\" is a partial index" msgstr "«%s» es un índice parcial" -#: parser/parse_utilcmd.c:2230 +#: parser/parse_utilcmd.c:2315 #, c-format msgid "\"%s\" is a deferrable index" msgstr "«%s» no es un índice postergable (deferrable)" -#: parser/parse_utilcmd.c:2231 +#: parser/parse_utilcmd.c:2316 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "No se puede crear una restricción no postergable usando un índice postergable." -#: parser/parse_utilcmd.c:2295 +#: parser/parse_utilcmd.c:2380 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "el índice «%s» columna número %d no tiene comportamiento de ordenamiento por omisión" -#: parser/parse_utilcmd.c:2452 +#: parser/parse_utilcmd.c:2537 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "la columna «%s» aparece dos veces en llave primaria" -#: parser/parse_utilcmd.c:2458 +#: parser/parse_utilcmd.c:2543 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "la columna «%s» aparece dos veces en restricción unique" -#: parser/parse_utilcmd.c:2811 +#: parser/parse_utilcmd.c:2896 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "las expresiones y predicados de índice sólo pueden referirse a la tabla en indexación" -#: parser/parse_utilcmd.c:2857 +#: parser/parse_utilcmd.c:2974 +#, fuzzy, c-format +#| msgid "index expressions and predicates can refer only to the table being indexed" +msgid "statistics expressions can refer only to the table being indexed" +msgstr "las expresiones y predicados de índice sólo pueden referirse a la tabla en indexación" + +#: parser/parse_utilcmd.c:3020 #, c-format msgid "rules on materialized views are not supported" msgstr "las reglas en vistas materializadas no están soportadas" -#: parser/parse_utilcmd.c:2920 +#: parser/parse_utilcmd.c:3083 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "la condición WHERE de la regla no puede contener referencias a otras relaciones" -#: parser/parse_utilcmd.c:2994 +#: parser/parse_utilcmd.c:3157 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "las reglas con condiciones WHERE sólo pueden tener acciones SELECT, INSERT, UPDATE o DELETE" -#: parser/parse_utilcmd.c:3012 parser/parse_utilcmd.c:3113 -#: rewrite/rewriteHandler.c:502 rewrite/rewriteManip.c:1018 +#: parser/parse_utilcmd.c:3175 parser/parse_utilcmd.c:3276 +#: rewrite/rewriteHandler.c:508 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "las sentencias UNION/INTERSECT/EXCEPT condicionales no están implementadas" -#: parser/parse_utilcmd.c:3030 +#: parser/parse_utilcmd.c:3193 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "una regla ON SELECT no puede usar OLD" -#: parser/parse_utilcmd.c:3034 +#: parser/parse_utilcmd.c:3197 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "una regla ON SELECT no puede usar NEW" -#: parser/parse_utilcmd.c:3043 +#: parser/parse_utilcmd.c:3206 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "una regla ON INSERT no puede usar OLD" -#: parser/parse_utilcmd.c:3049 +#: parser/parse_utilcmd.c:3212 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "una regla ON DELETE no puede usar NEW" -#: parser/parse_utilcmd.c:3077 +#: parser/parse_utilcmd.c:3240 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "no se puede hacer referencia a OLD dentro de una consulta WITH" -#: parser/parse_utilcmd.c:3084 +#: parser/parse_utilcmd.c:3247 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "no se puede hacer referencia a NEW dentro de una consulta WITH" -#: parser/parse_utilcmd.c:3542 +#: parser/parse_utilcmd.c:3706 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "cláusula DEFERRABLE mal puesta" -#: parser/parse_utilcmd.c:3547 parser/parse_utilcmd.c:3562 +#: parser/parse_utilcmd.c:3711 parser/parse_utilcmd.c:3726 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "no se permiten múltiples cláusulas DEFERRABLE/NOT DEFERRABLE" -#: parser/parse_utilcmd.c:3557 +#: parser/parse_utilcmd.c:3721 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "la cláusula NOT DEFERRABLE está mal puesta" -#: parser/parse_utilcmd.c:3570 parser/parse_utilcmd.c:3596 gram.y:5593 -#, c-format -msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" -msgstr "una restricción declarada INITIALLY DEFERRED debe ser DEFERRABLE" - -#: parser/parse_utilcmd.c:3578 +#: parser/parse_utilcmd.c:3742 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "la cláusula INITIALLY DEFERRED está mal puesta" -#: parser/parse_utilcmd.c:3583 parser/parse_utilcmd.c:3609 +#: parser/parse_utilcmd.c:3747 parser/parse_utilcmd.c:3773 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "no se permiten múltiples cláusulas INITIALLY IMMEDIATE/DEFERRED" -#: parser/parse_utilcmd.c:3604 +#: parser/parse_utilcmd.c:3768 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "la cláusula INITIALLY IMMEDIATE está mal puesta" -#: parser/parse_utilcmd.c:3795 +#: parser/parse_utilcmd.c:3959 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE especifica un esquema (%s) diferente del que se está creando (%s)" -#: parser/parse_utilcmd.c:3830 +#: parser/parse_utilcmd.c:3994 #, c-format msgid "\"%s\" is not a partitioned table" msgstr "«%s» no es una tabla particionada" -#: parser/parse_utilcmd.c:3837 +#: parser/parse_utilcmd.c:4001 #, c-format msgid "table \"%s\" is not partitioned" msgstr "«la tabla %s» no está particionada" -#: parser/parse_utilcmd.c:3844 +#: parser/parse_utilcmd.c:4008 #, c-format msgid "index \"%s\" is not partitioned" msgstr "el índice «%s» no está particionado" -#: parser/parse_utilcmd.c:3884 +#: parser/parse_utilcmd.c:4048 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "una tabla particionada por hash no puede tener una partición default" -#: parser/parse_utilcmd.c:3901 +#: parser/parse_utilcmd.c:4065 #, c-format msgid "invalid bound specification for a hash partition" msgstr "especificación de borde no válida para partición de hash" -#: parser/parse_utilcmd.c:3907 partitioning/partbounds.c:4691 +#: parser/parse_utilcmd.c:4071 partitioning/partbounds.c:4701 #, c-format msgid "modulus for hash partition must be a positive integer" msgstr "el módulo para una partición hash debe ser un entero positivo" -#: parser/parse_utilcmd.c:3914 partitioning/partbounds.c:4699 +#: parser/parse_utilcmd.c:4078 partitioning/partbounds.c:4709 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "remanente en partición hash debe ser menor que el módulo" -#: parser/parse_utilcmd.c:3927 +#: parser/parse_utilcmd.c:4091 #, c-format msgid "invalid bound specification for a list partition" msgstr "especificación de borde no válida para partición de lista" -#: parser/parse_utilcmd.c:3980 +#: parser/parse_utilcmd.c:4144 #, c-format msgid "invalid bound specification for a range partition" msgstr "especificación de borde no válida para partición de rango" -#: parser/parse_utilcmd.c:3986 +#: parser/parse_utilcmd.c:4150 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM debe especificar exactamente un valor por cada columna de particionado" -#: parser/parse_utilcmd.c:3990 +#: parser/parse_utilcmd.c:4154 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO debe especificar exactamente un valor por cada columna de particionado" -#: parser/parse_utilcmd.c:4104 +#: parser/parse_utilcmd.c:4268 #, c-format msgid "cannot specify NULL in range bound" msgstr "no se puede especificar NULL en borde de rango" -#: parser/parse_utilcmd.c:4153 +#: parser/parse_utilcmd.c:4317 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "cada borde que sigue a un MAXVALUE debe ser también MAXVALUE" -#: parser/parse_utilcmd.c:4160 +#: parser/parse_utilcmd.c:4324 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "cada borde que siga a un MINVALUE debe ser también MINVALUE" -#: parser/parse_utilcmd.c:4202 -#, c-format -msgid "could not determine which collation to use for partition bound expression" -msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de borde de particionamiento" - -#: parser/parse_utilcmd.c:4219 -#, c-format -msgid "collation of partition bound value for column \"%s\" does not match partition key collation \"%s\"" -msgstr "el ordenamiento (collation) del valor de borde de partición para la columna «%s» no coincide con el ordenamiento de la llave de particionamiento «%s»" - -#: parser/parse_utilcmd.c:4236 +#: parser/parse_utilcmd.c:4367 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "el valor especificado no puede ser convertido al tipo %s para la columna «%s»" -#: parser/parser.c:228 +#: parser/parser.c:247 msgid "UESCAPE must be followed by a simple string literal" msgstr "UESCAPE debe ser seguido por un literal de cadena simple" -#: parser/parser.c:233 +#: parser/parser.c:252 msgid "invalid Unicode escape character" msgstr "carácter de escape Unicode no válido" -#: parser/parser.c:302 scan.l:1329 +#: parser/parser.c:321 scan.l:1329 #, c-format msgid "invalid Unicode escape value" msgstr "valor de escape Unicode no válido" -#: parser/parser.c:449 scan.l:677 +#: parser/parser.c:468 scan.l:677 utils/adt/varlena.c:6566 #, c-format msgid "invalid Unicode escape" msgstr "valor de escape Unicode no válido" -#: parser/parser.c:450 +#: parser/parser.c:469 #, c-format msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." msgstr "Los escapes Unicode deben ser \\XXXX o \\+XXXXXX." -#: parser/parser.c:478 scan.l:638 scan.l:654 scan.l:670 +#: parser/parser.c:497 scan.l:638 scan.l:654 scan.l:670 +#: utils/adt/varlena.c:6591 #, c-format msgid "invalid Unicode surrogate pair" msgstr "par sustituto (surrogate) Unicode no válido" -#: parser/scansup.c:203 -#, c-format -msgid "identifier \"%s\" will be truncated to \"%s\"" +#: parser/scansup.c:101 +#, fuzzy, c-format +#| msgid "identifier \"%s\" will be truncated to \"%s\"" +msgid "identifier \"%s\" will be truncated to \"%.*s\"" msgstr "el identificador «%s» se truncará a «%s»" -#: partitioning/partbounds.c:2831 +#: partitioning/partbounds.c:2821 #, c-format msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "la partición «%s» está en conflicto con la partición default «%s» existente" -#: partitioning/partbounds.c:2890 +#: partitioning/partbounds.c:2870 partitioning/partbounds.c:2888 +#: partitioning/partbounds.c:2904 #, c-format msgid "every hash partition modulus must be a factor of the next larger modulus" msgstr "cada módulo de partición hash debe ser un factor del próximo mayor módulo" -#: partitioning/partbounds.c:2986 +#: partitioning/partbounds.c:2871 partitioning/partbounds.c:2905 +#, c-format +msgid "The new modulus %d is not a factor of %d, the modulus of existing partition \"%s\"." +msgstr "" + +#: partitioning/partbounds.c:2889 +#, c-format +msgid "The new modulus %d is not divisible by %d, the modulus of existing partition \"%s\"." +msgstr "" + +#: partitioning/partbounds.c:3018 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "borde de rango vació especificado para la partición «%s»" -#: partitioning/partbounds.c:2988 +#: partitioning/partbounds.c:3020 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "El límite inferior %s especificado es mayor o igual al límite superior %s." -#: partitioning/partbounds.c:3085 +#: partitioning/partbounds.c:3132 #, c-format msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "la partición «%s» traslaparía con la partición «%s»" -#: partitioning/partbounds.c:3202 +#: partitioning/partbounds.c:3249 #, c-format msgid "skipped scanning foreign table \"%s\" which is a partition of default partition \"%s\"" msgstr "se omitió recorrer la tabla foránea «%s» que es una partición de la partición default «%s»" -#: partitioning/partbounds.c:4695 +#: partitioning/partbounds.c:4705 #, c-format msgid "remainder for hash partition must be a non-negative integer" msgstr "remanente en partición hash debe ser un entero no negativo" -#: partitioning/partbounds.c:4722 +#: partitioning/partbounds.c:4729 #, c-format msgid "\"%s\" is not a hash partitioned table" msgstr "«%s» es una tabla particionada por hash" -#: partitioning/partbounds.c:4733 partitioning/partbounds.c:4850 +#: partitioning/partbounds.c:4740 partitioning/partbounds.c:4857 #, c-format msgid "number of partitioning columns (%d) does not match number of partition keys provided (%d)" msgstr "el número de columnas de particionamiento (%d) no coincide con el número de llaves de particionamiento provistas (%d)" -#: partitioning/partbounds.c:4755 partitioning/partbounds.c:4787 +#: partitioning/partbounds.c:4762 +#, fuzzy, c-format +#| msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" +msgid "column %d of the partition key has type %s, but supplied value is of type %s" +msgstr "la columna %d de la llave de particionamiento tiene tipo «%s», pero el valor dado es de tipo «%s»" + +#: partitioning/partbounds.c:4794 #, c-format msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" msgstr "la columna %d de la llave de particionamiento tiene tipo «%s», pero el valor dado es de tipo «%s»" -#: port/pg_sema.c:209 port/pg_shmem.c:640 port/posix_sema.c:209 -#: port/sysv_sema.c:327 port/sysv_shmem.c:640 +#: port/pg_sema.c:209 port/pg_shmem.c:668 port/posix_sema.c:209 +#: port/sysv_sema.c:327 port/sysv_shmem.c:668 #, c-format msgid "could not stat data directory \"%s\": %m" msgstr "no se pudo hacer stat al directorio de datos «%s»: %m" -#: port/pg_shmem.c:216 port/sysv_shmem.c:216 +#: port/pg_shmem.c:217 port/sysv_shmem.c:217 #, c-format msgid "could not create shared memory segment: %m" msgstr "no se pudo crear el segmento de memoria compartida: %m" -#: port/pg_shmem.c:217 port/sysv_shmem.c:217 +#: port/pg_shmem.c:218 port/sysv_shmem.c:218 #, c-format msgid "Failed system call was shmget(key=%lu, size=%zu, 0%o)." msgstr "La llamada a sistema fallida fue shmget(key=%lu, size=%zu, 0%o)." -#: port/pg_shmem.c:221 port/sysv_shmem.c:221 +#: port/pg_shmem.c:222 port/sysv_shmem.c:222 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter, or possibly that it is less than your kernel's SHMMIN parameter.\n" @@ -16668,7 +17892,7 @@ msgstr "" "Este error normalmente significa que la petición de un segmento de memoria compartida de PostgreSQL excedió el parámetro SHMMAX del kernel, o posiblemente que es menor que el parámetro SHMMIN del kernel.\n" "La documentación de PostgreSQL contiene más información acerca de la configuración de memoria compartida." -#: port/pg_shmem.c:228 port/sysv_shmem.c:228 +#: port/pg_shmem.c:229 port/sysv_shmem.c:229 #, c-format msgid "" "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMALL parameter. You might need to reconfigure the kernel with larger SHMALL.\n" @@ -16677,7 +17901,7 @@ msgstr "" "Este error normalmente significa que la petición de un segmento de memoria compartida de PostgreSQL excedió el parámetro SHMALL del kernel. Puede ser necesario reconfigurar el kernel con un SHMALL mayor.\n" "La documentación de PostgreSQL contiene más información acerca de la configuración de memoria compartida." -#: port/pg_shmem.c:234 port/sysv_shmem.c:234 +#: port/pg_shmem.c:235 port/sysv_shmem.c:235 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs either if all available shared memory IDs have been taken, in which case you need to raise the SHMMNI parameter in your kernel, or because the system's overall limit for shared memory has been reached.\n" @@ -16686,27 +17910,27 @@ msgstr "" "Este error *no* significa que se haya quedado sin espacio en disco. Ocurre cuando se han usado todos los IDs de memoria compartida disponibles, en cuyo caso puede incrementar el parámetro SHMMNI del kernel, o bien porque se ha alcanzado el límite total de memoria compartida.\n" "La documentación de PostgreSQL contiene más información acerca de la configuración de memoria compartida." -#: port/pg_shmem.c:578 port/sysv_shmem.c:578 +#: port/pg_shmem.c:606 port/sysv_shmem.c:606 #, c-format msgid "could not map anonymous shared memory: %m" msgstr "no se pudo mapear memoria compartida anónima: %m" -#: port/pg_shmem.c:580 port/sysv_shmem.c:580 +#: port/pg_shmem.c:608 port/sysv_shmem.c:608 #, c-format msgid "This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently %zu bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections." msgstr "Este error normalmente significa que la petición de un segmento de memoria compartida de PostgreSQL excedía la memoria disponible, el espacio de intercambio (swap), o las huge pages. Para reducir el tamaño de la petición (actualmente %zu bytes), reduzca el uso de memoria compartida de PostgreSQL, quizás reduciendo el parámetro shared_buffers o el parámetro max_connections." -#: port/pg_shmem.c:648 port/sysv_shmem.c:648 +#: port/pg_shmem.c:676 port/sysv_shmem.c:676 #, c-format msgid "huge pages not supported on this platform" msgstr "las huge pages no están soportados en esta plataforma" -#: port/pg_shmem.c:709 port/sysv_shmem.c:709 utils/init/miscinit.c:1137 +#: port/pg_shmem.c:737 port/sysv_shmem.c:737 utils/init/miscinit.c:1167 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "el bloque de memoria compartida preexistente (clave %lu, ID %lu) aún está en uso" -#: port/pg_shmem.c:712 port/sysv_shmem.c:712 utils/init/miscinit.c:1139 +#: port/pg_shmem.c:740 port/sysv_shmem.c:740 utils/init/miscinit.c:1169 #, c-format msgid "Terminate any old server processes associated with data directory \"%s\"." msgstr "Termine cualquier proceso de servidor asociado al directorio de datos «%s»." @@ -16791,174 +18015,162 @@ msgstr "no se pudo desbloquear semáforo: código de error %lu" msgid "could not try-lock semaphore: error code %lu" msgstr "no se pudo intentar-bloquear (try-lock) el semáforo: código de error %lu" -#: port/win32_shmem.c:144 port/win32_shmem.c:152 port/win32_shmem.c:164 -#: port/win32_shmem.c:179 -#, c-format -msgid "could not enable Lock Pages in Memory user right: error code %lu" -msgstr "no se pudo activar el privilegio «Bloquear páginas en la memoria»: código de error %lu" +#: port/win32_shmem.c:144 port/win32_shmem.c:159 port/win32_shmem.c:171 +#: port/win32_shmem.c:187 +#, fuzzy, c-format +#| msgid "%s: could not open service \"%s\": error code %lu\n" +msgid "could not enable user right \"%s\": error code %lu" +msgstr "%s: no se pudo abrir el servicio «%s»: código de error %lu\n" + +#. translator: This is a term from Windows and should be translated to +#. match the Windows localization. +#. +#: port/win32_shmem.c:150 port/win32_shmem.c:159 port/win32_shmem.c:171 +#: port/win32_shmem.c:182 port/win32_shmem.c:184 port/win32_shmem.c:187 +#, fuzzy +#| msgid "Resource Usage / Memory" +msgid "Lock pages in memory" +msgstr "Uso de Recursos / Memoria" -#: port/win32_shmem.c:145 port/win32_shmem.c:153 port/win32_shmem.c:165 -#: port/win32_shmem.c:180 +#: port/win32_shmem.c:152 port/win32_shmem.c:160 port/win32_shmem.c:172 +#: port/win32_shmem.c:188 #, c-format msgid "Failed system call was %s." msgstr "La llamada a sistema fallida fue %s." -#: port/win32_shmem.c:175 -#, c-format -msgid "could not enable Lock Pages in Memory user right" -msgstr "no se pudo activar el privilegio «Bloquear páginas en la memoria»" +#: port/win32_shmem.c:182 +#, fuzzy, c-format +#| msgid "could not parse limit \"%s\"" +msgid "could not enable user right \"%s\"" +msgstr "no se pudo interpretar el límite «%s»" -#: port/win32_shmem.c:176 -#, c-format -msgid "Assign Lock Pages in Memory user right to the Windows user account which runs PostgreSQL." +#: port/win32_shmem.c:183 +#, fuzzy, c-format +#| msgid "Assign Lock Pages in Memory user right to the Windows user account which runs PostgreSQL." +msgid "Assign user right \"%s\" to the Windows user account which runs PostgreSQL." msgstr "Asigne el privilegio «Bloquear páginas en la memoria» a la cuenta de usuario de Windows que ejecuta PostgreSQL." -#: port/win32_shmem.c:233 +#: port/win32_shmem.c:241 #, c-format msgid "the processor does not support large pages" msgstr "el procesador no soporta páginas grandes" -#: port/win32_shmem.c:235 port/win32_shmem.c:240 -#, c-format -msgid "disabling huge pages" -msgstr "desactivando «huge pages»" - -#: port/win32_shmem.c:302 port/win32_shmem.c:338 port/win32_shmem.c:356 +#: port/win32_shmem.c:310 port/win32_shmem.c:346 port/win32_shmem.c:364 #, c-format msgid "could not create shared memory segment: error code %lu" msgstr "no se pudo crear el segmento de memoria compartida: código de error %lu" -#: port/win32_shmem.c:303 +#: port/win32_shmem.c:311 #, c-format msgid "Failed system call was CreateFileMapping(size=%zu, name=%s)." msgstr "La llamada a sistema fallida fue CreateFileMapping(size=%zu, name=%s)." -#: port/win32_shmem.c:328 +#: port/win32_shmem.c:336 #, c-format msgid "pre-existing shared memory block is still in use" msgstr "el bloque de memoria compartida preexistente aún está en uso" -#: port/win32_shmem.c:329 +#: port/win32_shmem.c:337 #, c-format msgid "Check if there are any old server processes still running, and terminate them." msgstr "Verifique si hay procesos de servidor antiguos aún en funcionamiento, y termínelos." -#: port/win32_shmem.c:339 +#: port/win32_shmem.c:347 #, c-format msgid "Failed system call was DuplicateHandle." msgstr "La llamada a sistema fallida fue DuplicateHandle." -#: port/win32_shmem.c:357 +#: port/win32_shmem.c:365 #, c-format msgid "Failed system call was MapViewOfFileEx." msgstr "La llamada a sistema fallida fue MapViewOfFileEx." -#: postmaster/autovacuum.c:406 +#: postmaster/autovacuum.c:411 #, c-format msgid "could not fork autovacuum launcher process: %m" msgstr "no se pudo iniciar el lanzador autovacuum: %m" -#: postmaster/autovacuum.c:442 -#, c-format -msgid "autovacuum launcher started" -msgstr "lanzador de autovacuum iniciado" - -#: postmaster/autovacuum.c:839 -#, c-format -msgid "autovacuum launcher shutting down" -msgstr "lanzador de autovacuum apagándose" - -#: postmaster/autovacuum.c:1477 +#: postmaster/autovacuum.c:1489 #, c-format msgid "could not fork autovacuum worker process: %m" msgstr "no se pudo lanzar el proceso «autovacuum worker»: %m" -#: postmaster/autovacuum.c:1686 -#, c-format -msgid "autovacuum: processing database \"%s\"" -msgstr "autovacuum: procesando la base de datos «%s»" - -#: postmaster/autovacuum.c:2256 +#: postmaster/autovacuum.c:2326 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "autovacuum: eliminando tabla temporal huérfana «%s.%s.%s»" -#: postmaster/autovacuum.c:2485 +#: postmaster/autovacuum.c:2555 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "vacuum automático de la tabla «%s.%s.%s»" -#: postmaster/autovacuum.c:2488 +#: postmaster/autovacuum.c:2558 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "análisis automático de la tabla «%s.%s.%s»" -#: postmaster/autovacuum.c:2681 +#: postmaster/autovacuum.c:2751 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "procesando elemento de tarea de la tabla «%s.%s.%s»" -#: postmaster/autovacuum.c:3285 +#: postmaster/autovacuum.c:3432 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "autovacuum no fue iniciado debido a un error de configuración" -#: postmaster/autovacuum.c:3286 +#: postmaster/autovacuum.c:3433 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Active la opción «track_counts»." -#: postmaster/bgworker.c:394 postmaster/bgworker.c:841 -#, c-format -msgid "registering background worker \"%s\"" -msgstr "registrando el proceso ayudante «%s»" - -#: postmaster/bgworker.c:426 +#: postmaster/bgworker.c:256 #, c-format -msgid "unregistering background worker \"%s\"" -msgstr "des-registrando el proceso ayudante «%s»" +msgid "inconsistent background worker state (max_worker_processes=%d, total_slots=%d)" +msgstr "" -#: postmaster/bgworker.c:591 +#: postmaster/bgworker.c:650 #, c-format msgid "background worker \"%s\": must attach to shared memory in order to request a database connection" msgstr "proceso ayudante «%s»: debe acoplarse a memoria compartida para poder solicitar una conexión a base de datos" -#: postmaster/bgworker.c:600 +#: postmaster/bgworker.c:659 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "proceso ayudante «%s»: no se puede solicitar una conexión a base de datos si está iniciando en el momento de inicio de postmaster" -#: postmaster/bgworker.c:614 +#: postmaster/bgworker.c:673 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "proceso ayudante «%s»: intervalo de reinicio no válido" -#: postmaster/bgworker.c:629 +#: postmaster/bgworker.c:688 #, c-format msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "proceso ayudante «%s»: los ayudantes paralelos no pueden ser configurados «restart»" -#: postmaster/bgworker.c:653 +#: postmaster/bgworker.c:712 tcop/postgres.c:3188 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "terminando el proceso ayudante «%s» debido a una orden del administrador" -#: postmaster/bgworker.c:849 +#: postmaster/bgworker.c:893 #, c-format msgid "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "proceso ayudante «%s»: debe ser registrado en shared_preload_libraries" -#: postmaster/bgworker.c:861 +#: postmaster/bgworker.c:905 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "proceso ayudante «%s»: sólo los ayudantes dinámicos pueden pedir notificaciones" -#: postmaster/bgworker.c:876 +#: postmaster/bgworker.c:920 #, c-format msgid "too many background workers" msgstr "demasiados procesos ayudantes" -#: postmaster/bgworker.c:877 +#: postmaster/bgworker.c:921 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." @@ -16966,12 +18178,12 @@ msgstr[0] "Hasta %d proceso ayudante puede registrarse con la configuración act msgstr[1] "Hasta %d procesos ayudantes pueden registrarse con la configuración actual." # FIXME a %s would be nice here -#: postmaster/bgworker.c:881 +#: postmaster/bgworker.c:925 #, c-format msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Considere incrementar el parámetro de configuración «max_worker_processes»." -#: postmaster/checkpointer.c:418 +#: postmaster/checkpointer.c:428 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" @@ -16979,138 +18191,128 @@ msgstr[0] "los puntos de control están ocurriendo con demasiada frecuencia (cad msgstr[1] "los puntos de control están ocurriendo con demasiada frecuencia (cada %d segundos)" # FIXME a %s would be nice here -#: postmaster/checkpointer.c:422 +#: postmaster/checkpointer.c:432 #, c-format msgid "Consider increasing the configuration parameter \"max_wal_size\"." msgstr "Considere incrementar el parámetro de configuración «max_wal_size»." -#: postmaster/checkpointer.c:1032 +#: postmaster/checkpointer.c:1056 #, c-format msgid "checkpoint request failed" msgstr "falló la petición de punto de control" -#: postmaster/checkpointer.c:1033 +#: postmaster/checkpointer.c:1057 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Vea los mensajes recientes en el registro del servidor para obtener más detalles." -#: postmaster/checkpointer.c:1217 -#, c-format -msgid "compacted fsync request queue from %d entries to %d entries" -msgstr "la cola de peticiones de fsync fue compactada de %d a %d elementos" - -#: postmaster/pgarch.c:155 -#, c-format -msgid "could not fork archiver: %m" -msgstr "no se pudo lanzar el proceso archivador: %m" - -#: postmaster/pgarch.c:425 +#: postmaster/pgarch.c:372 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "archive_mode activado, pero archive_command no está definido" -#: postmaster/pgarch.c:447 +#: postmaster/pgarch.c:394 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "eliminando archivo de estado huérfano «%s»" -#: postmaster/pgarch.c:457 +#: postmaster/pgarch.c:404 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" msgstr "la eliminación del archivo de estado huérfano «%s» falló demasiadas veces, se tratará de nuevo después" -#: postmaster/pgarch.c:493 +#: postmaster/pgarch.c:440 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "el archivado del archivo de WAL «%s» falló demasiadas veces, se tratará de nuevo más tarde" -#: postmaster/pgarch.c:594 +#: postmaster/pgarch.c:541 #, c-format msgid "archive command failed with exit code %d" msgstr "la orden de archivado falló con código de retorno %d" -#: postmaster/pgarch.c:596 postmaster/pgarch.c:606 postmaster/pgarch.c:612 -#: postmaster/pgarch.c:621 +#: postmaster/pgarch.c:543 postmaster/pgarch.c:553 postmaster/pgarch.c:559 +#: postmaster/pgarch.c:568 #, c-format msgid "The failed archive command was: %s" msgstr "La orden fallida era: «%s»" -#: postmaster/pgarch.c:603 +#: postmaster/pgarch.c:550 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "la orden de archivado fue terminada por una excepción 0x%X" -#: postmaster/pgarch.c:605 postmaster/postmaster.c:3742 +#: postmaster/pgarch.c:552 postmaster/postmaster.c:3722 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "Vea el archivo «ntstatus.h» para una descripción del valor hexadecimal." -#: postmaster/pgarch.c:610 +#: postmaster/pgarch.c:557 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "la orden de archivado fue terminada por una señal %d: %s" -#: postmaster/pgarch.c:619 +#: postmaster/pgarch.c:566 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "la orden de archivado fue terminada con código %d no reconocido" -#: postmaster/pgstat.c:419 +#: postmaster/pgstat.c:417 #, c-format msgid "could not resolve \"localhost\": %s" msgstr "no se pudo resolver «localhost»: %s" -#: postmaster/pgstat.c:442 +#: postmaster/pgstat.c:440 #, c-format msgid "trying another address for the statistics collector" msgstr "intentando otra dirección para el recolector de estadísticas" -#: postmaster/pgstat.c:451 +#: postmaster/pgstat.c:449 #, c-format msgid "could not create socket for statistics collector: %m" msgstr "no se pudo crear el socket para el recolector de estadísticas: %m" -#: postmaster/pgstat.c:463 +#: postmaster/pgstat.c:461 #, c-format msgid "could not bind socket for statistics collector: %m" msgstr "no se pudo enlazar (bind) el socket para el recolector de estadísticas: %m" -#: postmaster/pgstat.c:474 +#: postmaster/pgstat.c:472 #, c-format msgid "could not get address of socket for statistics collector: %m" msgstr "no se pudo obtener la dirección del socket de estadísticas: %m" -#: postmaster/pgstat.c:490 +#: postmaster/pgstat.c:488 #, c-format msgid "could not connect socket for statistics collector: %m" msgstr "no se pudo conectar el socket para el recolector de estadísticas: %m" -#: postmaster/pgstat.c:511 +#: postmaster/pgstat.c:509 #, c-format msgid "could not send test message on socket for statistics collector: %m" msgstr "no se pudo enviar el mensaje de prueba al recolector de estadísticas: %m" -#: postmaster/pgstat.c:537 +#: postmaster/pgstat.c:535 #, c-format msgid "select() failed in statistics collector: %m" msgstr "select() falló en el recolector de estadísticas: %m" -#: postmaster/pgstat.c:552 +#: postmaster/pgstat.c:550 #, c-format msgid "test message did not get through on socket for statistics collector" msgstr "el mensaje de prueba al recolector de estadísticas no ha sido recibido en el socket" -#: postmaster/pgstat.c:567 +#: postmaster/pgstat.c:565 #, c-format msgid "could not receive test message on socket for statistics collector: %m" msgstr "no se pudo recibir el mensaje de prueba en el socket del recolector de estadísticas: %m" -#: postmaster/pgstat.c:577 +#: postmaster/pgstat.c:575 #, c-format msgid "incorrect test message transmission on socket for statistics collector" msgstr "transmisión del mensaje de prueba incorrecta en el socket del recolector de estadísticas" -#: postmaster/pgstat.c:600 +#: postmaster/pgstat.c:598 #, c-format msgid "could not set statistics collector socket to nonblocking mode: %m" msgstr "no se pudo poner el socket de estadísticas en modo no bloqueante: %m" @@ -17125,189 +18327,213 @@ msgstr "desactivando el recolector de estadísticas por falla del socket" msgid "could not fork statistics collector: %m" msgstr "no se pudo crear el proceso para el recolector de estadísticas: %m" -#: postmaster/pgstat.c:1376 +#: postmaster/pgstat.c:1449 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "destino de reset no reconocido: «%s»" -#: postmaster/pgstat.c:1377 -#, c-format -msgid "Target must be \"archiver\" or \"bgwriter\"." +#: postmaster/pgstat.c:1450 +#, fuzzy, c-format +#| msgid "Target must be \"archiver\" or \"bgwriter\"." +msgid "Target must be \"archiver\", \"bgwriter\" or \"wal\"." msgstr "El destino debe ser «archiver» o «bgwriter»." -#: postmaster/pgstat.c:4561 +#: postmaster/pgstat.c:3285 #, c-format msgid "could not read statistics message: %m" msgstr "no se pudo leer un mensaje de estadísticas: %m" -#: postmaster/pgstat.c:4883 postmaster/pgstat.c:5046 +#: postmaster/pgstat.c:3631 postmaster/pgstat.c:3816 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "no se pudo abrir el archivo temporal de estadísticas «%s»: %m" -#: postmaster/pgstat.c:4956 postmaster/pgstat.c:5091 +#: postmaster/pgstat.c:3726 postmaster/pgstat.c:3861 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "no se pudo escribir el archivo temporal de estadísticas «%s»: %m" -#: postmaster/pgstat.c:4965 postmaster/pgstat.c:5100 +#: postmaster/pgstat.c:3735 postmaster/pgstat.c:3870 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "no se pudo cerrar el archivo temporal de estadísticas «%s»: %m" -#: postmaster/pgstat.c:4973 postmaster/pgstat.c:5108 +#: postmaster/pgstat.c:3743 postmaster/pgstat.c:3878 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "no se pudo cambiar el nombre al archivo temporal de estadísticas de «%s» a «%s»: %m" -#: postmaster/pgstat.c:5205 postmaster/pgstat.c:5422 postmaster/pgstat.c:5576 +#: postmaster/pgstat.c:3976 postmaster/pgstat.c:4242 postmaster/pgstat.c:4399 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "no se pudo abrir el archivo de estadísticas «%s»: %m" -#: postmaster/pgstat.c:5217 postmaster/pgstat.c:5227 postmaster/pgstat.c:5248 -#: postmaster/pgstat.c:5259 postmaster/pgstat.c:5281 postmaster/pgstat.c:5296 -#: postmaster/pgstat.c:5359 postmaster/pgstat.c:5434 postmaster/pgstat.c:5454 -#: postmaster/pgstat.c:5472 postmaster/pgstat.c:5488 postmaster/pgstat.c:5506 -#: postmaster/pgstat.c:5522 postmaster/pgstat.c:5588 postmaster/pgstat.c:5600 -#: postmaster/pgstat.c:5612 postmaster/pgstat.c:5623 postmaster/pgstat.c:5648 -#: postmaster/pgstat.c:5670 +#: postmaster/pgstat.c:3988 postmaster/pgstat.c:3998 postmaster/pgstat.c:4019 +#: postmaster/pgstat.c:4030 postmaster/pgstat.c:4041 postmaster/pgstat.c:4063 +#: postmaster/pgstat.c:4078 postmaster/pgstat.c:4148 postmaster/pgstat.c:4179 +#: postmaster/pgstat.c:4254 postmaster/pgstat.c:4274 postmaster/pgstat.c:4292 +#: postmaster/pgstat.c:4308 postmaster/pgstat.c:4326 postmaster/pgstat.c:4342 +#: postmaster/pgstat.c:4411 postmaster/pgstat.c:4423 postmaster/pgstat.c:4435 +#: postmaster/pgstat.c:4446 postmaster/pgstat.c:4457 postmaster/pgstat.c:4482 +#: postmaster/pgstat.c:4509 postmaster/pgstat.c:4522 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "el archivo de estadísticas «%s» está corrupto" -#: postmaster/pgstat.c:5799 +#: postmaster/pgstat.c:4631 +#, c-format +msgid "statistics collector's time %s is later than backend local time %s" +msgstr "" + +#: postmaster/pgstat.c:4654 #, c-format msgid "using stale statistics instead of current ones because stats collector is not responding" msgstr "usando estadísticas añejas en vez de actualizadas porque el recolector de estadísticas no está respondiendo" -#: postmaster/pgstat.c:6129 +#: postmaster/pgstat.c:4781 +#, c-format +msgid "stats_timestamp %s is later than collector's time %s for database %u" +msgstr "" + +#: postmaster/pgstat.c:4991 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "el hash de bases de datos se corrompió durante la finalización; abortando" -#: postmaster/postmaster.c:733 +#: postmaster/postmaster.c:743 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: argumento no válido para la opción -f: «%s»\n" -#: postmaster/postmaster.c:819 +#: postmaster/postmaster.c:822 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: argumento no válido para la opción -t: «%s»\n" -#: postmaster/postmaster.c:870 +#: postmaster/postmaster.c:873 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: argumento no válido: «%s»\n" -#: postmaster/postmaster.c:912 +#: postmaster/postmaster.c:915 #, c-format msgid "%s: superuser_reserved_connections (%d) must be less than max_connections (%d)\n" msgstr "%s: superuser_reserved_connections (%d) debe ser menor que max_connections (%d)\n" -#: postmaster/postmaster.c:919 +#: postmaster/postmaster.c:922 #, c-format msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" msgstr "el archivador de WAL no puede activarse cuando wal_level es «minimal»" -#: postmaster/postmaster.c:922 +#: postmaster/postmaster.c:925 #, c-format msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" msgstr "el flujo de WAL (max_wal_senders > 0) requiere wal_level «replica» o «logical»" -#: postmaster/postmaster.c:930 +#: postmaster/postmaster.c:933 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: las tablas de palabras clave de fecha no son válidas, arréglelas\n" -#: postmaster/postmaster.c:1047 +#: postmaster/postmaster.c:1050 #, c-format msgid "could not create I/O completion port for child queue" msgstr "no se pudo crear el port E/S de reporte de completitud para la cola de procesos hijos" -#: postmaster/postmaster.c:1113 +#: postmaster/postmaster.c:1115 #, c-format msgid "ending log output to stderr" msgstr "terminando la salida de registro a stderr" -#: postmaster/postmaster.c:1114 +#: postmaster/postmaster.c:1116 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "La salida futura del registro será enviada al destino de log «%s»." -#: postmaster/postmaster.c:1125 +#: postmaster/postmaster.c:1127 #, c-format msgid "starting %s" msgstr "iniciando %s" -#: postmaster/postmaster.c:1154 postmaster/postmaster.c:1252 -#: utils/init/miscinit.c:1597 +#: postmaster/postmaster.c:1156 postmaster/postmaster.c:1255 +#: utils/init/miscinit.c:1627 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "la sintaxis de lista no es válida para el parámetro «%s»" -#: postmaster/postmaster.c:1185 +#: postmaster/postmaster.c:1187 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "no se pudo crear el socket de escucha para «%s»" -#: postmaster/postmaster.c:1191 +#: postmaster/postmaster.c:1193 #, c-format msgid "could not create any TCP/IP sockets" msgstr "no se pudo crear ningún socket TCP/IP" -#: postmaster/postmaster.c:1274 +#: postmaster/postmaster.c:1225 +#, fuzzy, c-format +#| msgid "pgpipe: getsockname() failed: error code %d" +msgid "DNSServiceRegister() failed: error code %ld" +msgstr "pgpipe: getsockname() falló: código de error %d" + +#: postmaster/postmaster.c:1277 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "no se pudo crear el socket de dominio Unix en el directorio «%s»" -#: postmaster/postmaster.c:1280 +#: postmaster/postmaster.c:1283 #, c-format msgid "could not create any Unix-domain sockets" msgstr "no se pudo crear ningún socket de dominio Unix" -#: postmaster/postmaster.c:1292 +#: postmaster/postmaster.c:1295 #, c-format msgid "no socket created for listening" msgstr "no se creó el socket de atención" -#: postmaster/postmaster.c:1323 +#: postmaster/postmaster.c:1326 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: no se pudo cambiar los permisos del archivo de PID externo «%s»: %s\n" -#: postmaster/postmaster.c:1327 +#: postmaster/postmaster.c:1330 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: no pudo escribir en el archivo externo de PID «%s»: %s\n" -#: postmaster/postmaster.c:1360 utils/init/postinit.c:215 +#: postmaster/postmaster.c:1363 utils/init/postinit.c:216 #, c-format msgid "could not load pg_hba.conf" msgstr "no se pudo cargar pg_hba.conf" -#: postmaster/postmaster.c:1386 +#: postmaster/postmaster.c:1389 #, c-format msgid "postmaster became multithreaded during startup" msgstr "postmaster se volvió multi-hilo durante la partida" -#: postmaster/postmaster.c:1387 +#: postmaster/postmaster.c:1390 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Defina la variable de ambiente LC_ALL a un valor válido." -#: postmaster/postmaster.c:1488 +#: postmaster/postmaster.c:1485 +#, fuzzy, c-format +#| msgid "%s: could not locate my own executable path\n" +msgid "%s: could not locate my own executable path" +msgstr "%s: no se pudo localizar la ruta de mi propio ejecutable\n" + +#: postmaster/postmaster.c:1492 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: no se pudo localizar el ejecutable postgres correspondiente" -#: postmaster/postmaster.c:1511 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1515 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Esto puede indicar una instalación de PostgreSQL incompleta, o que el archivo «%s» ha sido movido de la ubicación adecuada." -#: postmaster/postmaster.c:1538 +#: postmaster/postmaster.c:1542 #, c-format msgid "" "%s: could not find the database system\n" @@ -17318,396 +18544,461 @@ msgstr "" "Se esperaba encontrar en el directorio PGDATA «%s»,\n" "pero no se pudo abrir el archivo «%s»: %s\n" -#: postmaster/postmaster.c:1715 +#: postmaster/postmaster.c:1719 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() falló en postmaster: %m" -#: postmaster/postmaster.c:1870 +#: postmaster/postmaster.c:1855 +#, c-format +msgid "issuing SIGKILL to recalcitrant children" +msgstr "" + +#: postmaster/postmaster.c:1876 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "ejecutando un apagado inmediato porque el archivo de bloqueo del directorio de datos no es válido" -#: postmaster/postmaster.c:1973 postmaster/postmaster.c:2004 +#: postmaster/postmaster.c:1979 postmaster/postmaster.c:2007 #, c-format msgid "incomplete startup packet" msgstr "el paquete de inicio está incompleto" -#: postmaster/postmaster.c:1985 +#: postmaster/postmaster.c:1991 #, c-format msgid "invalid length of startup packet" msgstr "el de paquete de inicio tiene largo incorrecto" -#: postmaster/postmaster.c:2043 +#: postmaster/postmaster.c:2046 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "no se pudo enviar la respuesta de negociación SSL: %m" -#: postmaster/postmaster.c:2074 +#: postmaster/postmaster.c:2078 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "no se pudo enviar la respuesta de negociación GSSAPI: %m" -#: postmaster/postmaster.c:2104 +#: postmaster/postmaster.c:2108 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "el protocolo %u.%u no está soportado: servidor soporta %u.0 hasta %u.%u" -#: postmaster/postmaster.c:2168 utils/misc/guc.c:6769 utils/misc/guc.c:6805 -#: utils/misc/guc.c:6875 utils/misc/guc.c:8198 utils/misc/guc.c:11044 -#: utils/misc/guc.c:11078 +#: postmaster/postmaster.c:2172 utils/misc/guc.c:7093 utils/misc/guc.c:7129 +#: utils/misc/guc.c:7199 utils/misc/guc.c:8531 utils/misc/guc.c:11487 +#: utils/misc/guc.c:11528 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "valor no válido para el parámetro «%s»: «%s»" -#: postmaster/postmaster.c:2171 +#: postmaster/postmaster.c:2175 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Los valores válidos son: «false», 0, «true», 1, «database»." -#: postmaster/postmaster.c:2216 +#: postmaster/postmaster.c:2220 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "el paquete de inicio no es válido: se esperaba un terminador en el último byte" -#: postmaster/postmaster.c:2254 +#: postmaster/postmaster.c:2237 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "no se especifica un nombre de usuario en el paquete de inicio" -#: postmaster/postmaster.c:2318 +#: postmaster/postmaster.c:2301 #, c-format msgid "the database system is starting up" msgstr "el sistema de base de datos está iniciándose" -#: postmaster/postmaster.c:2323 +#: postmaster/postmaster.c:2307 +#, fuzzy, c-format +#| msgid "database system is ready to accept connections" +msgid "the database system is not yet accepting connections" +msgstr "el sistema de bases de datos está listo para aceptar conexiones" + +#: postmaster/postmaster.c:2308 +#, fuzzy, c-format +#| msgid "consistent recovery state reached at %X/%X" +msgid "Consistent recovery state has not been yet reached." +msgstr "el estado de recuperación consistente fue alcanzado en %X/%X" + +#: postmaster/postmaster.c:2312 +#, fuzzy, c-format +#| msgid "database system is ready to accept connections" +msgid "the database system is not accepting connections" +msgstr "el sistema de bases de datos está listo para aceptar conexiones" + +#: postmaster/postmaster.c:2313 +#, c-format +msgid "Hot standby mode is disabled." +msgstr "" + +#: postmaster/postmaster.c:2318 #, c-format msgid "the database system is shutting down" msgstr "el sistema de base de datos está apagándose" -#: postmaster/postmaster.c:2328 +#: postmaster/postmaster.c:2323 #, c-format msgid "the database system is in recovery mode" msgstr "el sistema de base de datos está en modo de recuperación" -#: postmaster/postmaster.c:2333 storage/ipc/procarray.c:293 -#: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:362 +#: postmaster/postmaster.c:2328 storage/ipc/procarray.c:463 +#: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "lo siento, ya tenemos demasiados clientes" -#: postmaster/postmaster.c:2423 +#: postmaster/postmaster.c:2418 #, c-format msgid "wrong key in cancel request for process %d" msgstr "llave incorrecta en la petición de cancelación para el proceso %d" -#: postmaster/postmaster.c:2435 +#: postmaster/postmaster.c:2430 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "el PID %d en la petición de cancelación no coincidió con ningún proceso" -#: postmaster/postmaster.c:2706 +#: postmaster/postmaster.c:2684 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "se recibió SIGHUP, volviendo a cargar archivos de configuración" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2732 postmaster/postmaster.c:2736 +#: postmaster/postmaster.c:2710 postmaster/postmaster.c:2714 #, c-format msgid "%s was not reloaded" msgstr "%s no fue vuelto a cargar" -#: postmaster/postmaster.c:2746 +#: postmaster/postmaster.c:2724 #, c-format msgid "SSL configuration was not reloaded" msgstr "la configuración SSL no fue vuelta a cargar" -#: postmaster/postmaster.c:2802 +#: postmaster/postmaster.c:2780 #, c-format msgid "received smart shutdown request" msgstr "se recibió petición de apagado inteligente" -#: postmaster/postmaster.c:2848 +#: postmaster/postmaster.c:2826 #, c-format msgid "received fast shutdown request" msgstr "se recibió petición de apagado rápido" -#: postmaster/postmaster.c:2866 +#: postmaster/postmaster.c:2844 #, c-format msgid "aborting any active transactions" msgstr "abortando transacciones activas" -#: postmaster/postmaster.c:2890 +#: postmaster/postmaster.c:2868 #, c-format msgid "received immediate shutdown request" msgstr "se recibió petición de apagado inmediato" -#: postmaster/postmaster.c:2965 +#: postmaster/postmaster.c:2945 #, c-format msgid "shutdown at recovery target" msgstr "apagándose al alcanzar el destino de recuperación" -#: postmaster/postmaster.c:2983 postmaster/postmaster.c:3019 +#: postmaster/postmaster.c:2963 postmaster/postmaster.c:2999 msgid "startup process" msgstr "proceso de inicio" -#: postmaster/postmaster.c:2986 +#: postmaster/postmaster.c:2966 #, c-format msgid "aborting startup due to startup process failure" msgstr "abortando el inicio debido a una falla en el procesamiento de inicio" -#: postmaster/postmaster.c:3061 +#: postmaster/postmaster.c:3041 #, c-format msgid "database system is ready to accept connections" msgstr "el sistema de bases de datos está listo para aceptar conexiones" -#: postmaster/postmaster.c:3082 +#: postmaster/postmaster.c:3062 msgid "background writer process" msgstr "proceso background writer" -#: postmaster/postmaster.c:3136 +#: postmaster/postmaster.c:3116 msgid "checkpointer process" msgstr "proceso checkpointer" -#: postmaster/postmaster.c:3152 +#: postmaster/postmaster.c:3132 msgid "WAL writer process" msgstr "proceso escritor de WAL" -#: postmaster/postmaster.c:3167 +#: postmaster/postmaster.c:3147 msgid "WAL receiver process" msgstr "proceso receptor de WAL" -#: postmaster/postmaster.c:3182 +#: postmaster/postmaster.c:3162 msgid "autovacuum launcher process" msgstr "proceso lanzador de autovacuum" -#: postmaster/postmaster.c:3197 +#: postmaster/postmaster.c:3180 msgid "archiver process" msgstr "proceso de archivado" -#: postmaster/postmaster.c:3213 +#: postmaster/postmaster.c:3195 msgid "statistics collector process" msgstr "recolector de estadísticas" -#: postmaster/postmaster.c:3227 +#: postmaster/postmaster.c:3209 msgid "system logger process" msgstr "proceso de log" -#: postmaster/postmaster.c:3291 +#: postmaster/postmaster.c:3273 #, c-format msgid "background worker \"%s\"" msgstr "proceso ayudante «%s»" -#: postmaster/postmaster.c:3375 postmaster/postmaster.c:3395 -#: postmaster/postmaster.c:3402 postmaster/postmaster.c:3420 +#: postmaster/postmaster.c:3357 postmaster/postmaster.c:3377 +#: postmaster/postmaster.c:3384 postmaster/postmaster.c:3402 msgid "server process" msgstr "proceso de servidor" -#: postmaster/postmaster.c:3474 +#: postmaster/postmaster.c:3456 #, c-format msgid "terminating any other active server processes" msgstr "terminando todos los otros procesos de servidor activos" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3729 +#: postmaster/postmaster.c:3709 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) terminó con código de salida %d" -#: postmaster/postmaster.c:3731 postmaster/postmaster.c:3743 -#: postmaster/postmaster.c:3753 postmaster/postmaster.c:3764 +#: postmaster/postmaster.c:3711 postmaster/postmaster.c:3723 +#: postmaster/postmaster.c:3733 postmaster/postmaster.c:3744 #, c-format msgid "Failed process was running: %s" msgstr "El proceso que falló estaba ejecutando: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3740 +#: postmaster/postmaster.c:3720 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) fue terminado por una excepción 0x%X" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3750 +#: postmaster/postmaster.c:3730 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) fue terminado por una señal %d: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3762 +#: postmaster/postmaster.c:3742 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) terminó con código %d no reconocido" -#: postmaster/postmaster.c:3970 +#: postmaster/postmaster.c:3957 #, c-format msgid "abnormal database system shutdown" msgstr "apagado anormal del sistema de bases de datos" -#: postmaster/postmaster.c:4010 +#: postmaster/postmaster.c:3997 #, c-format msgid "all server processes terminated; reinitializing" msgstr "todos los procesos fueron terminados; reinicializando" -#: postmaster/postmaster.c:4180 postmaster/postmaster.c:5599 -#: postmaster/postmaster.c:5986 +#: postmaster/postmaster.c:4171 postmaster/postmaster.c:5531 +#: postmaster/postmaster.c:5922 #, c-format msgid "could not generate random cancel key" msgstr "no se pudo generar una llave de cancelación aleatoria" -#: postmaster/postmaster.c:4234 +#: postmaster/postmaster.c:4225 #, c-format msgid "could not fork new process for connection: %m" msgstr "no se pudo lanzar el nuevo proceso para la conexión: %m" -#: postmaster/postmaster.c:4276 +#: postmaster/postmaster.c:4267 msgid "could not fork new process for connection: " msgstr "no se pudo lanzar el nuevo proceso para la conexión: " -#: postmaster/postmaster.c:4393 +#: postmaster/postmaster.c:4373 #, c-format msgid "connection received: host=%s port=%s" msgstr "conexión recibida: host=%s port=%s" -#: postmaster/postmaster.c:4398 +#: postmaster/postmaster.c:4378 #, c-format msgid "connection received: host=%s" msgstr "conexión recibida: host=%s" -#: postmaster/postmaster.c:4668 -#, c-format -msgid "could not execute server process \"%s\": %m" -msgstr "no se pudo lanzar el proceso servidor «%s»: %m" +#: postmaster/postmaster.c:4621 +#, c-format +msgid "could not execute server process \"%s\": %m" +msgstr "no se pudo lanzar el proceso servidor «%s»: %m" + +#: postmaster/postmaster.c:4679 +#, fuzzy, c-format +#| msgid "could not close handle to backend parameter variables: error code %lu\n" +msgid "could not create backend parameter file mapping: error code %lu" +msgstr "no se pudo cerrar el archivo de variables de servidor: código de error %lu\n" + +#: postmaster/postmaster.c:4688 +#, fuzzy, c-format +#| msgid "could not map view of backend variables: error code %lu\n" +msgid "could not map backend parameter memory: error code %lu" +msgstr "no se pudo mapear la vista del archivo de variables: código de error %lu\n" + +#: postmaster/postmaster.c:4715 +#, fuzzy, c-format +#| msgid "command too long\n" +msgid "subprocess command line too long" +msgstr "orden demasiado larga\n" + +#: postmaster/postmaster.c:4733 +#, fuzzy, c-format +#| msgid "pgpipe: getsockname() failed: error code %d" +msgid "CreateProcess() call failed: %m (error code %lu)" +msgstr "pgpipe: getsockname() falló: código de error %d" + +#: postmaster/postmaster.c:4760 +#, fuzzy, c-format +#| msgid "could not unmap view of backend variables: error code %lu\n" +msgid "could not unmap view of backend parameter file: error code %lu" +msgstr "no se pudo desmapear la vista del archivo de variables: código de error %lu\n" + +#: postmaster/postmaster.c:4764 +#, fuzzy, c-format +#| msgid "could not close handle to backend parameter variables: error code %lu\n" +msgid "could not close handle to backend parameter file: error code %lu" +msgstr "no se pudo cerrar el archivo de variables de servidor: código de error %lu\n" -#: postmaster/postmaster.c:4827 +#: postmaster/postmaster.c:4786 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "renunciar después de demasiados intentos de reservar memoria compartida" -#: postmaster/postmaster.c:4828 +#: postmaster/postmaster.c:4787 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Esto podría deberse a ASLR o un software antivirus." -#: postmaster/postmaster.c:5034 +#: postmaster/postmaster.c:4977 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "No se pudo cargar la configuración SSL en proceso secundario" -#: postmaster/postmaster.c:5166 +#: postmaster/postmaster.c:5103 #, c-format msgid "Please report this to <%s>." msgstr "Por favor reporte esto a <%s>." -#: postmaster/postmaster.c:5259 +#: postmaster/postmaster.c:5190 #, c-format msgid "database system is ready to accept read only connections" msgstr "el sistema de bases de datos está listo para aceptar conexiones de sólo lectura" -#: postmaster/postmaster.c:5527 +#: postmaster/postmaster.c:5455 #, c-format msgid "could not fork startup process: %m" msgstr "no se pudo lanzar el proceso de inicio: %m" -#: postmaster/postmaster.c:5531 +#: postmaster/postmaster.c:5459 +#, fuzzy, c-format +#| msgid "could not fork WAL receiver process: %m" +msgid "could not fork archiver process: %m" +msgstr "no se pudo lanzar el proceso receptor de WAL: %m" + +#: postmaster/postmaster.c:5463 #, c-format msgid "could not fork background writer process: %m" msgstr "no se pudo lanzar el background writer: %m" -#: postmaster/postmaster.c:5535 +#: postmaster/postmaster.c:5467 #, c-format msgid "could not fork checkpointer process: %m" msgstr "no se pudo lanzar el checkpointer: %m" -#: postmaster/postmaster.c:5539 +#: postmaster/postmaster.c:5471 #, c-format msgid "could not fork WAL writer process: %m" msgstr "no se pudo lanzar el proceso escritor de WAL: %m" -#: postmaster/postmaster.c:5543 +#: postmaster/postmaster.c:5475 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "no se pudo lanzar el proceso receptor de WAL: %m" -#: postmaster/postmaster.c:5547 +#: postmaster/postmaster.c:5479 #, c-format msgid "could not fork process: %m" msgstr "no se pudo lanzar el proceso: %m" -#: postmaster/postmaster.c:5744 postmaster/postmaster.c:5767 +#: postmaster/postmaster.c:5680 postmaster/postmaster.c:5703 #, c-format msgid "database connection requirement not indicated during registration" msgstr "el requerimiento de conexión a base de datos no fue indicado durante el registro" -#: postmaster/postmaster.c:5751 postmaster/postmaster.c:5774 +#: postmaster/postmaster.c:5687 postmaster/postmaster.c:5710 #, c-format msgid "invalid processing mode in background worker" msgstr "modo de procesamiento no válido en proceso ayudante" -#: postmaster/postmaster.c:5847 -#, c-format -msgid "starting background worker process \"%s\"" -msgstr "iniciando el proceso ayudante «%s»" - -#: postmaster/postmaster.c:5859 +#: postmaster/postmaster.c:5795 #, c-format msgid "could not fork worker process: %m" msgstr "no se pudo lanzar el proceso ayudante: %m" -#: postmaster/postmaster.c:5972 +#: postmaster/postmaster.c:5908 #, c-format msgid "no slot available for new worker process" msgstr "no hay slot disponible para un nuevo proceso ayudante" -#: postmaster/postmaster.c:6307 +#: postmaster/postmaster.c:6241 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "no se pudo duplicar el socket %d para su empleo en el backend: código de error %d" -#: postmaster/postmaster.c:6339 +#: postmaster/postmaster.c:6273 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "no se pudo crear el socket heradado: código de error %d\n" -#: postmaster/postmaster.c:6368 +#: postmaster/postmaster.c:6302 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "no se pudo abrir el archivo de variables de servidor «%s»: %s\n" -#: postmaster/postmaster.c:6375 +#: postmaster/postmaster.c:6309 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "no se pudo leer el archivo de variables de servidor «%s»: %s\n" -#: postmaster/postmaster.c:6384 +#: postmaster/postmaster.c:6318 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "no se pudo eliminar el archivo «%s»: %s\n" -#: postmaster/postmaster.c:6401 +#: postmaster/postmaster.c:6335 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "no se pudo mapear la vista del archivo de variables: código de error %lu\n" -#: postmaster/postmaster.c:6410 +#: postmaster/postmaster.c:6344 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "no se pudo desmapear la vista del archivo de variables: código de error %lu\n" -#: postmaster/postmaster.c:6417 +#: postmaster/postmaster.c:6351 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "no se pudo cerrar el archivo de variables de servidor: código de error %lu\n" -#: postmaster/postmaster.c:6595 +#: postmaster/postmaster.c:6527 #, c-format msgid "could not read exit code for process\n" msgstr "no se pudo leer el código de salida del proceso\n" -#: postmaster/postmaster.c:6600 +#: postmaster/postmaster.c:6532 #, c-format msgid "could not post child completion status\n" msgstr "no se pudo publicar el estado de completitud del proceso hijo\n" @@ -17717,11 +19008,6 @@ msgstr "no se pudo publicar el estado de completitud del proceso hijo\n" msgid "could not read from logger pipe: %m" msgstr "no se pudo leer desde la tubería de log: %m" -#: postmaster/syslogger.c:522 -#, c-format -msgid "logger shutting down" -msgstr "proceso logger apagándose" - #: postmaster/syslogger.c:571 postmaster/syslogger.c:585 #, c-format msgid "could not create pipe for syslog: %m" @@ -17777,147 +19063,148 @@ msgstr "no se pudo determinar qué ordenamiento usar para la expresión regular" msgid "nondeterministic collations are not supported for regular expressions" msgstr "los ordenamientos no determinísticos no están soportados para expresiones regulares" -#: replication/backup_manifest.c:231 +#: repl_gram.y:349 repl_gram.y:381 +#, c-format +msgid "invalid timeline %u" +msgstr "timeline %u no válido" + +#: repl_scanner.l:131 +msgid "invalid streaming start location" +msgstr "posición de inicio de flujo de WAL no válida" + +#: repl_scanner.l:182 scan.l:717 +msgid "unterminated quoted string" +msgstr "una cadena de caracteres entre comillas está inconclusa" + +#: replication/backup_manifest.c:255 #, c-format msgid "expected end timeline %u but found timeline %u" msgstr "se esperaba el timeline de término %u pero se encontró el tieneline %u" -#: replication/backup_manifest.c:248 +#: replication/backup_manifest.c:272 #, c-format msgid "expected start timeline %u but found timeline %u" msgstr "se esperaba el timeline de inicio %u pero se encontró el timeline %u" -#: replication/backup_manifest.c:275 +#: replication/backup_manifest.c:299 #, c-format msgid "start timeline %u not found in history of timeline %u" msgstr "el timeline de inicio %u no fue encontrado en la historia del timeline %u" -#: replication/backup_manifest.c:322 +#: replication/backup_manifest.c:352 #, c-format msgid "could not rewind temporary file" msgstr "no se puede rebobinar el archivo temporal" -#: replication/backup_manifest.c:349 +#: replication/backup_manifest.c:379 #, c-format msgid "could not read from temporary file: %m" msgstr "no se pudo leer del archivo temporal: %m" -#: replication/basebackup.c:108 -#, c-format -msgid "could not read from file \"%s\"" -msgstr "no se pudo leer del archivo «%s»" - -#: replication/basebackup.c:551 +#: replication/basebackup.c:546 #, c-format msgid "could not find any WAL files" msgstr "no se pudo encontrar ningún archivo de WAL" -#: replication/basebackup.c:566 replication/basebackup.c:582 -#: replication/basebackup.c:591 +#: replication/basebackup.c:561 replication/basebackup.c:577 +#: replication/basebackup.c:586 #, c-format msgid "could not find WAL file \"%s\"" msgstr "no se pudo encontrar archivo de WAL «%s»" -#: replication/basebackup.c:634 replication/basebackup.c:665 +#: replication/basebackup.c:629 replication/basebackup.c:659 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "tamaño del archivo WAL «%s» inesperado" -#: replication/basebackup.c:648 replication/basebackup.c:1749 +#: replication/basebackup.c:644 replication/basebackup.c:1771 #, c-format msgid "base backup could not send data, aborting backup" msgstr "el respaldo base no pudo enviar datos, abortando el respaldo" -#: replication/basebackup.c:724 -#, c-format -#| msgid "%lld total checksum verification failure" -#| msgid_plural "%lld total checksum verification failures" -msgid "%lld total checksum verification failures" -msgstr "%lld fallas de verificación de suma de comprobación en total" +#: replication/basebackup.c:722 +#, fuzzy, c-format +#| msgid "%lld total checksum verification failures" +msgid "%lld total checksum verification failure" +msgid_plural "%lld total checksum verification failures" +msgstr[0] "%lld fallas de verificación de suma de comprobación en total" +msgstr[1] "%lld fallas de verificación de suma de comprobación en total" -#: replication/basebackup.c:728 +#: replication/basebackup.c:729 #, c-format msgid "checksum verification failure during base backup" msgstr "falla en verificación de checksums durante respaldo base" -#: replication/basebackup.c:781 replication/basebackup.c:790 -#: replication/basebackup.c:799 replication/basebackup.c:808 -#: replication/basebackup.c:817 replication/basebackup.c:828 -#: replication/basebackup.c:845 replication/basebackup.c:854 -#: replication/basebackup.c:866 replication/basebackup.c:890 +#: replication/basebackup.c:789 replication/basebackup.c:798 +#: replication/basebackup.c:807 replication/basebackup.c:816 +#: replication/basebackup.c:825 replication/basebackup.c:836 +#: replication/basebackup.c:853 replication/basebackup.c:862 +#: replication/basebackup.c:874 replication/basebackup.c:898 #, c-format msgid "duplicate option \"%s\"" msgstr "nombre de opción «%s» duplicada" -#: replication/basebackup.c:834 +#: replication/basebackup.c:842 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d está fuera del rango aceptable para el parámetro «%s» (%d .. %d)" -#: replication/basebackup.c:879 +#: replication/basebackup.c:887 #, c-format msgid "unrecognized manifest option: \"%s\"" msgstr "opción de manifiesto «%s» no reconocida" -#: replication/basebackup.c:895 +#: replication/basebackup.c:903 #, c-format msgid "unrecognized checksum algorithm: \"%s\"" msgstr "algoritmo de suma de comprobación no reconocido: \"%s\"" -#: replication/basebackup.c:910 +#: replication/basebackup.c:918 #, fuzzy, c-format #| msgid "manifest checksum mismatch" msgid "manifest checksums require a backup manifest" msgstr "discordancia en la suma de comprobación del manifiesto" -#: replication/basebackup.c:1501 +#: replication/basebackup.c:1519 #, c-format msgid "skipping special file \"%s\"" msgstr "omitiendo el archivo especial «%s»" -#: replication/basebackup.c:1620 +#: replication/basebackup.c:1640 #, c-format msgid "invalid segment number %d in file \"%s\"" msgstr "número de segmento %d no válido en archivo «%s»" -#: replication/basebackup.c:1639 -#, c-format -msgid "could not verify checksum in file \"%s\", block %d: read buffer size %d and page size %d differ" +#: replication/basebackup.c:1678 +#, fuzzy, c-format +#| msgid "could not verify checksum in file \"%s\", block %d: read buffer size %d and page size %d differ" +msgid "could not verify checksum in file \"%s\", block %u: read buffer size %d and page size %d differ" msgstr "no se pudo verificar el checksum en el archivo «%s», bloque %d: el tamaño leído %d y el tamaño de página %d difieren" -#: replication/basebackup.c:1683 replication/basebackup.c:1713 -#, c-format -msgid "could not fseek in file \"%s\": %m" -msgstr "no se pudo posicionar (fseek) el archivo «%s»: %m" - -#: replication/basebackup.c:1705 -#, c-format -msgid "could not reread block %d of file \"%s\": %m" -msgstr "no se pudo leer el bloque %d del archivo «%s»: %m" - -#: replication/basebackup.c:1729 -#, c-format -msgid "checksum verification failed in file \"%s\", block %d: calculated %X but expected %X" +#: replication/basebackup.c:1751 +#, fuzzy, c-format +#| msgid "checksum verification failed in file \"%s\", block %d: calculated %X but expected %X" +msgid "checksum verification failed in file \"%s\", block %u: calculated %X but expected %X" msgstr "verificación de checksums falló en archivo «%s», bloque %d: calculado %X pero se esperaba %X" -#: replication/basebackup.c:1736 +#: replication/basebackup.c:1758 #, c-format msgid "further checksum verification failures in file \"%s\" will not be reported" msgstr "subsiguientes fallas de verificación de checksums en el archivo «%s» no se reportarán" -#: replication/basebackup.c:1804 +#: replication/basebackup.c:1816 #, c-format msgid "file \"%s\" has a total of %d checksum verification failure" msgid_plural "file \"%s\" has a total of %d checksum verification failures" msgstr[0] "el archivo «%s» tiene un total de %d falla de verificación de checksum" msgstr[1] "el archivo «%s» tiene un total de %d fallas de verificación de checksums" -#: replication/basebackup.c:1840 +#: replication/basebackup.c:1852 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "nombre de archivo demasiado largo para el formato tar: «%s»" -#: replication/basebackup.c:1845 +#: replication/basebackup.c:1857 #, c-format msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "destino de enlace simbólico demasiado largo para el formato tar: nombre de archivo «%s», destino «%s»" @@ -17928,208 +19215,258 @@ msgstr "destino de enlace simbólico demasiado largo para el formato tar: nombre msgid "could not clear search path: %s" msgstr "no se pudo limpiar search_path: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:251 +#: replication/libpqwalreceiver/libpqwalreceiver.c:256 #, c-format msgid "invalid connection string syntax: %s" msgstr "sintaxis de cadena de conexión no válida: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:275 +#: replication/libpqwalreceiver/libpqwalreceiver.c:281 #, c-format msgid "could not parse connection string: %s" msgstr "no se pudo interpretar la cadena de conexión: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:347 +#: replication/libpqwalreceiver/libpqwalreceiver.c:353 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "no se pudo recibir el identificador de sistema y el ID de timeline del servidor primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:358 -#: replication/libpqwalreceiver/libpqwalreceiver.c:576 +#: replication/libpqwalreceiver/libpqwalreceiver.c:364 +#: replication/libpqwalreceiver/libpqwalreceiver.c:588 #, c-format msgid "invalid response from primary server" msgstr "respuesta no válida del servidor primario" -#: replication/libpqwalreceiver/libpqwalreceiver.c:359 +#: replication/libpqwalreceiver/libpqwalreceiver.c:365 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "No se pudo identificar el sistema: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d o más campos." -#: replication/libpqwalreceiver/libpqwalreceiver.c:432 -#: replication/libpqwalreceiver/libpqwalreceiver.c:438 -#: replication/libpqwalreceiver/libpqwalreceiver.c:463 +#: replication/libpqwalreceiver/libpqwalreceiver.c:440 +#: replication/libpqwalreceiver/libpqwalreceiver.c:446 +#: replication/libpqwalreceiver/libpqwalreceiver.c:475 #, c-format msgid "could not start WAL streaming: %s" msgstr "no se pudo iniciar el flujo de WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:486 +#: replication/libpqwalreceiver/libpqwalreceiver.c:498 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "no se pudo enviar el mensaje fin-de-flujo al primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:508 +#: replication/libpqwalreceiver/libpqwalreceiver.c:520 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "conjunto de resultados inesperado después del fin-de-flujo" -#: replication/libpqwalreceiver/libpqwalreceiver.c:522 +#: replication/libpqwalreceiver/libpqwalreceiver.c:534 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "ocurrió un error mientras se apagaba el flujo COPY: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:531 +#: replication/libpqwalreceiver/libpqwalreceiver.c:543 #, c-format msgid "error reading result of streaming command: %s" msgstr "ocurrió un error mientras se leía la orden de flujo: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:539 -#: replication/libpqwalreceiver/libpqwalreceiver.c:773 +#: replication/libpqwalreceiver/libpqwalreceiver.c:551 +#: replication/libpqwalreceiver/libpqwalreceiver.c:785 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "resultado inesperado después de CommandComplete: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:565 +#: replication/libpqwalreceiver/libpqwalreceiver.c:577 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "no se pudo recibir el archivo de historia de timeline del servidor primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:577 +#: replication/libpqwalreceiver/libpqwalreceiver.c:589 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Se esperaba 1 tupla con 2 campos, se obtuvieron %d tuplas con %d campos." -#: replication/libpqwalreceiver/libpqwalreceiver.c:737 -#: replication/libpqwalreceiver/libpqwalreceiver.c:788 -#: replication/libpqwalreceiver/libpqwalreceiver.c:794 +#: replication/libpqwalreceiver/libpqwalreceiver.c:749 +#: replication/libpqwalreceiver/libpqwalreceiver.c:800 +#: replication/libpqwalreceiver/libpqwalreceiver.c:806 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "no se pudo recibir datos desde el flujo de WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:813 +#: replication/libpqwalreceiver/libpqwalreceiver.c:825 #, c-format msgid "could not send data to WAL stream: %s" msgstr "no se pudo enviar datos al flujo de WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:866 +#: replication/libpqwalreceiver/libpqwalreceiver.c:878 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "no se pudo create el slot de replicación «%s»: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:911 +#: replication/libpqwalreceiver/libpqwalreceiver.c:923 #, c-format msgid "invalid query response" msgstr "respuesta no válida a consulta" -#: replication/libpqwalreceiver/libpqwalreceiver.c:912 +#: replication/libpqwalreceiver/libpqwalreceiver.c:924 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Se esperaban %d campos, se obtuvieron %d campos." -#: replication/libpqwalreceiver/libpqwalreceiver.c:981 +#: replication/libpqwalreceiver/libpqwalreceiver.c:994 #, c-format msgid "the query interface requires a database connection" msgstr "la interfaz de consulta requiere una conexión a base de datos" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1012 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1025 msgid "empty query" msgstr "consulta vacía" -#: replication/logical/launcher.c:295 -#, c-format -msgid "starting logical replication worker for subscription \"%s\"" -msgstr "iniciando el proceso ayudante de replicación lógica para la suscripción «%s»" +#: replication/libpqwalreceiver/libpqwalreceiver.c:1031 +#, fuzzy +#| msgid "unexpected delimiter" +msgid "unexpected pipeline mode" +msgstr "delimitador inesperado" -#: replication/logical/launcher.c:302 +#: replication/logical/launcher.c:286 #, c-format msgid "cannot start logical replication workers when max_replication_slots = 0" msgstr "no se pueden iniciar procesos ayudantes de replicación cuando max_replication_slots = 0" -#: replication/logical/launcher.c:382 +#: replication/logical/launcher.c:366 #, c-format msgid "out of logical replication worker slots" msgstr "se agotaron los slots de procesos ayudantes de replicación" -#: replication/logical/launcher.c:383 +#: replication/logical/launcher.c:367 #, c-format msgid "You might need to increase max_logical_replication_workers." msgstr "Puede ser necesario incrementar max_logical_replication_workers." -#: replication/logical/launcher.c:438 +#: replication/logical/launcher.c:422 #, c-format msgid "out of background worker slots" msgstr "se acabaron los slots de procesos ayudante" -#: replication/logical/launcher.c:439 +#: replication/logical/launcher.c:423 #, c-format msgid "You might need to increase max_worker_processes." msgstr "Puede ser necesario incrementar max_worker_processes." -#: replication/logical/launcher.c:638 +#: replication/logical/launcher.c:577 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "el slot del worker de replicación lógica %d está vacío, no se puede adjuntar" -#: replication/logical/launcher.c:647 +#: replication/logical/launcher.c:586 #, c-format msgid "logical replication worker slot %d is already used by another worker, cannot attach" msgstr "el slot de replicación lógica %d ya está siendo utilizado por otro worker, no se puede adjuntar" -#: replication/logical/launcher.c:951 -#, c-format -msgid "logical replication launcher started" -msgstr "lanzador de replicación lógica iniciado" - # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/logical/logical.c:87 +#: replication/logical/logical.c:115 #, c-format msgid "logical decoding requires wal_level >= logical" msgstr "la decodificación lógica requiere wal_level >= logical" -#: replication/logical/logical.c:92 +#: replication/logical/logical.c:120 #, c-format msgid "logical decoding requires a database connection" msgstr "decodificación lógica requiere una conexión a una base de datos" -#: replication/logical/logical.c:110 +#: replication/logical/logical.c:138 #, c-format msgid "logical decoding cannot be used while in recovery" msgstr "la decodificación lógica no puede ejecutarse durante la recuperación" -#: replication/logical/logical.c:258 replication/logical/logical.c:399 +#: replication/logical/logical.c:347 replication/logical/logical.c:499 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "no se puede usar un slot de replicación física para decodificación lógica" -#: replication/logical/logical.c:263 replication/logical/logical.c:404 +#: replication/logical/logical.c:352 replication/logical/logical.c:504 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "el slot de replicación «%s» no fue creado en esta base de datos" -#: replication/logical/logical.c:270 +#: replication/logical/logical.c:359 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "no se puede crear un slot de replicación lógica en una transacción que ha efectuado escrituras" -#: replication/logical/logical.c:444 +#: replication/logical/logical.c:549 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "iniciando la decodificación lógica para el slot «%s»" -#: replication/logical/logical.c:446 +#: replication/logical/logical.c:551 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "Transacciones en flujo comprometiendo después de %X/%X, leyendo WAL desde %X/%X." -#: replication/logical/logical.c:593 +#: replication/logical/logical.c:696 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "slot «%s», plugin de salida «%s», en el callback %s, LSN asociado %X/%X" # FIXME must quote callback name? Need a translator: comment? -#: replication/logical/logical.c:600 +#: replication/logical/logical.c:702 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "slot «%s», plugin de salida «%s», en el callback %s" +#: replication/logical/logical.c:868 +#, c-format +msgid "logical replication at prepare time requires begin_prepare_cb callback" +msgstr "" + +#: replication/logical/logical.c:911 +#, c-format +msgid "logical replication at prepare time requires prepare_cb callback" +msgstr "" + +#: replication/logical/logical.c:954 +#, c-format +msgid "logical replication at prepare time requires commit_prepared_cb callback" +msgstr "" + +#: replication/logical/logical.c:998 +#, c-format +msgid "logical replication at prepare time requires rollback_prepared_cb callback" +msgstr "" + +#: replication/logical/logical.c:1220 +#, fuzzy, c-format +#| msgid "logical decoding requires a database connection" +msgid "logical streaming requires a stream_start_cb callback" +msgstr "decodificación lógica requiere una conexión a una base de datos" + +#: replication/logical/logical.c:1266 +#, fuzzy, c-format +#| msgid "logical decoding requires a database connection" +msgid "logical streaming requires a stream_stop_cb callback" +msgstr "decodificación lógica requiere una conexión a una base de datos" + +#: replication/logical/logical.c:1305 +#, fuzzy, c-format +#| msgid "logical decoding requires a database connection" +msgid "logical streaming requires a stream_abort_cb callback" +msgstr "decodificación lógica requiere una conexión a una base de datos" + +#: replication/logical/logical.c:1348 +#, c-format +msgid "logical streaming at prepare time requires a stream_prepare_cb callback" +msgstr "" + +#: replication/logical/logical.c:1387 +#, c-format +msgid "logical streaming requires a stream_commit_cb callback" +msgstr "" + +#: replication/logical/logical.c:1433 +#, fuzzy, c-format +#| msgid "logical decoding requires a database connection" +msgid "logical streaming requires a stream_change_cb callback" +msgstr "decodificación lógica requiere una conexión a una base de datos" + #: replication/logical/logicalfuncs.c:104 replication/slotfuncs.c:34 #, c-format msgid "must be superuser or replication role to use replication slots" @@ -18167,9 +19504,10 @@ msgstr "el array debe tener un número par de elementos" msgid "can no longer get changes from replication slot \"%s\"" msgstr "no se puede cambiar la relación «%s»" -#: replication/logical/logicalfuncs.c:253 replication/slotfuncs.c:648 -#, c-format -msgid "This slot has never previously reserved WAL, or has been invalidated." +#: replication/logical/logicalfuncs.c:253 replication/slotfuncs.c:650 +#, fuzzy, c-format +#| msgid "This slot has never previously reserved WAL, or has been invalidated." +msgid "This slot has never previously reserved WAL, or it has been invalidated." msgstr "Este slot nunca ha reservado WAL previamente, o ha sido invalidado." #: replication/logical/logicalfuncs.c:265 @@ -18179,667 +19517,696 @@ msgstr "el plugin de salida de decodificación lógica «%s» produce salida bin #: replication/logical/origin.c:188 #, c-format -msgid "only superusers can query or manipulate replication origins" -msgstr "debe ser superusuario para consultar o manipular orígenes de replicación" - -#: replication/logical/origin.c:193 -#, c-format msgid "cannot query or manipulate replication origin when max_replication_slots = 0" msgstr "no se puede consultar o manipular orígenes de replicación cuando max_replication_slots = 0" -#: replication/logical/origin.c:198 +#: replication/logical/origin.c:193 #, c-format msgid "cannot manipulate replication origins during recovery" msgstr "no se puede manipular orígenes de replicación durante la recuperación" -#: replication/logical/origin.c:233 +#: replication/logical/origin.c:228 #, c-format msgid "replication origin \"%s\" does not exist" msgstr "no existe el origen de replicación «%s»" -#: replication/logical/origin.c:324 +#: replication/logical/origin.c:319 #, c-format msgid "could not find free replication origin OID" msgstr "no se pudo encontrar un OID de origen de replicación libre" -#: replication/logical/origin.c:372 +#: replication/logical/origin.c:355 #, c-format msgid "could not drop replication origin with OID %d, in use by PID %d" msgstr "no se pudo eliminar el origen de replicación con OID %d, en uso por el PID %d" -#: replication/logical/origin.c:464 +#: replication/logical/origin.c:476 #, c-format msgid "replication origin with OID %u does not exist" msgstr "el origen de replicación con OID %u no existe" -#: replication/logical/origin.c:729 +#: replication/logical/origin.c:741 #, c-format msgid "replication checkpoint has wrong magic %u instead of %u" msgstr "el checkpoint de replicación tiene número mágico erróneo %u en lugar de %u" -#: replication/logical/origin.c:770 +#: replication/logical/origin.c:782 #, c-format msgid "could not find free replication state, increase max_replication_slots" msgstr "no se pudo encontrar una estructura de replicación libre, incremente max_replication_slots" -#: replication/logical/origin.c:788 +#: replication/logical/origin.c:790 +#, fuzzy, c-format +#| msgid "recovery restart point at %X/%X" +msgid "recovered replication state of node %u to %X/%X" +msgstr "restartpoint de recuperación en %X/%X" + +#: replication/logical/origin.c:800 #, c-format msgid "replication slot checkpoint has wrong checksum %u, expected %u" msgstr "el checkpoint del slot de replicación tiene suma de verificación errónea %u, se esperaba %u" -#: replication/logical/origin.c:916 replication/logical/origin.c:1102 +#: replication/logical/origin.c:928 replication/logical/origin.c:1114 #, c-format msgid "replication origin with OID %d is already active for PID %d" msgstr "el origen de replicación con OID %d ya está activo para el PID %d" -#: replication/logical/origin.c:927 replication/logical/origin.c:1114 +#: replication/logical/origin.c:939 replication/logical/origin.c:1126 #, c-format msgid "could not find free replication state slot for replication origin with OID %u" msgstr "no se pudo encontrar un slot libre para el estado del origen de replicación con OID %u" -#: replication/logical/origin.c:929 replication/logical/origin.c:1116 -#: replication/slot.c:1762 +#: replication/logical/origin.c:941 replication/logical/origin.c:1128 +#: replication/slot.c:1798 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Aumente max_replication_slots y reintente." -#: replication/logical/origin.c:1073 +#: replication/logical/origin.c:1085 #, c-format msgid "cannot setup replication origin when one is already setup" msgstr "no se puede establecer un destino de replicación cuando ya hay uno definido" -#: replication/logical/origin.c:1153 replication/logical/origin.c:1369 -#: replication/logical/origin.c:1389 +#: replication/logical/origin.c:1165 replication/logical/origin.c:1377 +#: replication/logical/origin.c:1397 #, c-format msgid "no replication origin is configured" msgstr "no hay un destino de replicación configurado" -#: replication/logical/origin.c:1236 +#: replication/logical/origin.c:1248 #, c-format msgid "replication origin name \"%s\" is reserved" msgstr "el nombre de origen de replicación «%s» está reservado" -#: replication/logical/origin.c:1238 +#: replication/logical/origin.c:1250 #, c-format msgid "Origin names starting with \"pg_\" are reserved." msgstr "Los nombres de origen que empiezan con «pg_» están reservados." -#: replication/logical/relation.c:272 +#: replication/logical/relation.c:248 #, c-format -msgid "logical replication target relation \"%s.%s\" does not exist" -msgstr "la relación destino de replicación lógica «%s.%s» no existe" +msgid "\"%s\"" +msgstr "" + +#: replication/logical/relation.c:251 +#, c-format +msgid ", \"%s\"" +msgstr "" -#: replication/logical/relation.c:329 +#: replication/logical/relation.c:257 +#, fuzzy, c-format +#| msgid "logical replication target relation \"%s.%s\" is missing some replicated columns" +msgid "logical replication target relation \"%s.%s\" is missing replicated column: %s" +msgid_plural "logical replication target relation \"%s.%s\" is missing replicated columns: %s" +msgstr[0] "a la relación destino de replicación lógica «%s.%s» le faltan algunas columnas replicadas" +msgstr[1] "a la relación destino de replicación lógica «%s.%s» le faltan algunas columnas replicadas" + +#: replication/logical/relation.c:337 #, c-format -msgid "logical replication target relation \"%s.%s\" is missing some replicated columns" -msgstr "a la relación destino de replicación lógica «%s.%s» le faltan algunas columnas replicadas" +msgid "logical replication target relation \"%s.%s\" does not exist" +msgstr "la relación destino de replicación lógica «%s.%s» no existe" -#: replication/logical/relation.c:369 +#: replication/logical/relation.c:418 #, c-format msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "la relación de destino de replicación lógica «%s.%s» usa columnas de sistemas en el índice REPLICA IDENTITY" -#: replication/logical/reorderbuffer.c:2663 +#: replication/logical/reorderbuffer.c:3773 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "no se pudo escribir al archivo de datos para el XID %u: %m" -#: replication/logical/reorderbuffer.c:2850 -#: replication/logical/reorderbuffer.c:2875 +#: replication/logical/reorderbuffer.c:4116 +#: replication/logical/reorderbuffer.c:4141 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "no se pudo leer desde el archivo de desborde de reorderbuffer: %m" -#: replication/logical/reorderbuffer.c:2854 -#: replication/logical/reorderbuffer.c:2879 +#: replication/logical/reorderbuffer.c:4120 +#: replication/logical/reorderbuffer.c:4145 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "no se pudo leer desde el archivo de desborde de reorderbuffer: se leyeron sólo %d en ve de %u bytes" -#: replication/logical/reorderbuffer.c:3114 +#: replication/logical/reorderbuffer.c:4393 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "no se pudo borrar el archivo «%s» durante la eliminación de pg_replslot/%s/xid*: %m" # FIXME almost duplicated again!? -#: replication/logical/reorderbuffer.c:3606 +#: replication/logical/reorderbuffer.c:4883 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "no se pudo leer del archivo «%s»: se leyeron %d en lugar de %d bytes" -#: replication/logical/snapbuild.c:606 +#: replication/logical/snapbuild.c:588 #, c-format msgid "initial slot snapshot too large" msgstr "el snapshot inicial del slot es demasiado grande" # FIXME: snapshot? instantánea? -#: replication/logical/snapbuild.c:660 +#: replication/logical/snapbuild.c:642 #, c-format msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" msgid_plural "exported logical decoding snapshot: \"%s\" with %u transaction IDs" msgstr[0] "se exportó un snapshot de decodificación lógica: «%s» con %u ID de transacción" msgstr[1] "se exportó un snapshot de decodificación lógica: «%s» con %u IDs de transacción" -#: replication/logical/snapbuild.c:1265 replication/logical/snapbuild.c:1358 -#: replication/logical/snapbuild.c:1912 +#: replication/logical/snapbuild.c:1254 replication/logical/snapbuild.c:1347 +#: replication/logical/snapbuild.c:1878 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "la decodificación lógica encontró un punto consistente en %X/%X" -#: replication/logical/snapbuild.c:1267 +#: replication/logical/snapbuild.c:1256 #, c-format msgid "There are no running transactions." msgstr "No hay transacciones en ejecución." -#: replication/logical/snapbuild.c:1309 +#: replication/logical/snapbuild.c:1298 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "decodificación lógica encontró punto de inicio en %X/%X" -#: replication/logical/snapbuild.c:1311 replication/logical/snapbuild.c:1335 +#: replication/logical/snapbuild.c:1300 replication/logical/snapbuild.c:1324 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "Esperando que las (aproximadamente %d) transacciones más antiguas que %u terminen." -#: replication/logical/snapbuild.c:1333 +#: replication/logical/snapbuild.c:1322 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "la decodificación lógica encontró un punto consistente inicial en %X/%X" -#: replication/logical/snapbuild.c:1360 +#: replication/logical/snapbuild.c:1349 #, c-format msgid "There are no old transactions anymore." msgstr "Ya no hay transacciones antiguas en ejecución." # FIXME "snapbuild"? -#: replication/logical/snapbuild.c:1754 +#: replication/logical/snapbuild.c:1746 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "el archivo de estado de snapbuild «%s» tiene número mágico erróneo: %u en lugar de %u" -#: replication/logical/snapbuild.c:1760 +#: replication/logical/snapbuild.c:1752 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "el archivo de estado de snapbuild «%s» tiene versión no soportada: %u en vez de %u" -#: replication/logical/snapbuild.c:1859 +#: replication/logical/snapbuild.c:1823 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "suma de verificación no coincidente para el archivo de estado de snapbuild «%s»: es %u, debería ser %u" -#: replication/logical/snapbuild.c:1914 +#: replication/logical/snapbuild.c:1880 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "La decodificación lógica comenzará usando el snapshot guardado." -#: replication/logical/snapbuild.c:1986 +#: replication/logical/snapbuild.c:1952 #, c-format msgid "could not parse file name \"%s\"" msgstr "no se pudo interpretar el nombre de archivo «%s»" -#: replication/logical/tablesync.c:132 +#: replication/logical/tablesync.c:144 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "el ayudante de sincronización de tabla de replicación lógica para la suscripción «%s», tabla «%s» ha terminado" -#: replication/logical/tablesync.c:664 +#: replication/logical/tablesync.c:726 replication/logical/tablesync.c:767 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "no se pudo obtener información de la tabla «%s.%s» del editor (publisher): %s" -#: replication/logical/tablesync.c:670 +#: replication/logical/tablesync.c:732 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "la tabla \"%s.%s\" no fue encontrada en el editor (publisher)" -#: replication/logical/tablesync.c:704 -#, c-format -msgid "could not fetch table info for table \"%s.%s\": %s" -msgstr "no se pudo obtener información de la tabla «%s.%s»: %s" - -#: replication/logical/tablesync.c:791 +#: replication/logical/tablesync.c:854 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "no se pudo iniciar la copia de contenido inicial para de la tabla «%s.%s»: %s" -#: replication/logical/tablesync.c:905 -#, c-format -msgid "table copy could not start transaction on publisher" +#: replication/logical/tablesync.c:1053 +#, fuzzy, c-format +#| msgid "table copy could not start transaction on publisher" +msgid "table copy could not start transaction on publisher: %s" msgstr "la copia de la tabla no pudo iniciar una transacción en el editor (publisher)" -#: replication/logical/tablesync.c:927 -#, c-format -msgid "table copy could not finish transaction on publisher" +#: replication/logical/tablesync.c:1101 +#, fuzzy, c-format +#| msgid "replication slot \"%s\" already exists" +msgid "replication origin \"%s\" already exists" +msgstr "el slot de replicación «%s» ya existe" + +#: replication/logical/tablesync.c:1113 +#, fuzzy, c-format +#| msgid "table copy could not finish transaction on publisher" +msgid "table copy could not finish transaction on publisher: %s" msgstr "la copia de tabla no pudo terminar la transacción en el editor (publisher)" -#: replication/logical/worker.c:313 +#: replication/logical/worker.c:490 #, c-format msgid "processing remote data for replication target relation \"%s.%s\" column \"%s\", remote type %s, local type %s" msgstr "Procesamiento de datos remotos para la relación de destino de replicación \"%s.%s\" columna \"%s\", tipo remoto %s, tipo local %s" -#: replication/logical/worker.c:552 +#: replication/logical/worker.c:570 replication/logical/worker.c:699 +#, fuzzy, c-format +#| msgid "incorrect binary data format in function argument %d" +msgid "incorrect binary data format in logical replication column %d" +msgstr "el formato de datos binarios es incorrecto en argumento %d a función" + +#: replication/logical/worker.c:778 #, c-format msgid "ORIGIN message sent out of order" msgstr "mensaje ORIGIN enviado fuera de orden" -#: replication/logical/worker.c:702 +#: replication/logical/worker.c:1037 replication/logical/worker.c:1049 +#, fuzzy, c-format +#| msgid "could not read from backend variables file \"%s\": %s\n" +msgid "could not read from streaming transaction's changes file \"%s\": %m" +msgstr "no se pudo leer el archivo de variables de servidor «%s»: %s\n" + +#: replication/logical/worker.c:1274 #, c-format msgid "publisher did not send replica identity column expected by the logical replication target relation \"%s.%s\"" msgstr "el editor (publisher) no envía la columna identidad de réplica esperada por la relación de destino de replicación lógica «%s.%s»" -#: replication/logical/worker.c:709 +#: replication/logical/worker.c:1281 #, c-format msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "la relación destino de replicación lógica «%s.%s» no tiene índice REPLICA IDENTITY ni PRIMARY KEY y la relación publicada no tiene REPLICA IDENTITY FULL" -#: replication/logical/worker.c:1394 +#: replication/logical/worker.c:1994 #, c-format msgid "invalid logical replication message type \"%c\"" msgstr "tipo de mensaje de replicación lógica «%c» no válido" -#: replication/logical/worker.c:1537 +#: replication/logical/worker.c:2145 #, c-format msgid "data stream from publisher has ended" msgstr "el flujo de datos del publisher ha terminado" -#: replication/logical/worker.c:1692 +#: replication/logical/worker.c:2295 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "terminando el proceso de replicación lógica debido a que se agotó el tiempo de espera" -#: replication/logical/worker.c:1837 +#: replication/logical/worker.c:2443 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was removed" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se detendrá porque la suscripción fue eliminada" -#: replication/logical/worker.c:1851 +#: replication/logical/worker.c:2457 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se detendrá porque la suscripción fue inhabilitada" -#: replication/logical/worker.c:1865 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because the connection information was changed" -msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará porque la información de conexión fue cambiada" - -#: replication/logical/worker.c:1879 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" +#: replication/logical/worker.c:2479 +#, fuzzy, c-format +#| msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" +msgid "logical replication apply worker for subscription \"%s\" will restart because of a parameter change" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará porque a la suscripción se le cambió el nombre" -#: replication/logical/worker.c:1896 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because the replication slot name was changed" -msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará porque el nombre del slot de replicación fue cambiado" - -#: replication/logical/worker.c:1910 -#, c-format -msgid "logical replication apply worker for subscription \"%s\" will restart because subscription's publications were changed" -msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará porque las publicaciones de la suscripción fueron cambiadas" +#: replication/logical/worker.c:2642 replication/logical/worker.c:2664 +#, fuzzy, c-format +#| msgid "could not read from file \"%s\": %m" +msgid "could not read from streaming transaction's subxact file \"%s\": %m" +msgstr "no se pudo leer el archivo «%s»: %m" -#: replication/logical/worker.c:2006 +#: replication/logical/worker.c:3010 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "el ayudante «apply» de replicación lógica para la suscripción %u no se iniciará porque la suscripción fue eliminada durante el inicio" -#: replication/logical/worker.c:2018 +#: replication/logical/worker.c:3022 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» no se iniciará porque la suscripción fue inhabilitada durante el inicio" -#: replication/logical/worker.c:2036 +#: replication/logical/worker.c:3040 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "el ayudante de sincronización de tabla de replicación lógica para la suscripción «%s», tabla «%s» ha iniciado" -#: replication/logical/worker.c:2040 +#: replication/logical/worker.c:3044 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» ha iniciado" -#: replication/logical/worker.c:2079 +#: replication/logical/worker.c:3081 #, c-format msgid "subscription has no replication slot set" msgstr "la suscripción no tiene un slot de replicación establecido" -#: replication/pgoutput/pgoutput.c:147 +#: replication/pgoutput/pgoutput.c:198 #, c-format msgid "invalid proto_version" msgstr "proto_version no válido" -#: replication/pgoutput/pgoutput.c:152 +#: replication/pgoutput/pgoutput.c:203 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version «%s» fuera de rango" -#: replication/pgoutput/pgoutput.c:169 +#: replication/pgoutput/pgoutput.c:220 #, c-format msgid "invalid publication_names syntax" msgstr "sintaxis de publication_names no válida" -#: replication/pgoutput/pgoutput.c:211 +#: replication/pgoutput/pgoutput.c:290 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "el cliente envió proto_version=%d pero sólo soportamos el protocolo %d o inferior" -#: replication/pgoutput/pgoutput.c:217 +#: replication/pgoutput/pgoutput.c:296 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "el cliente envió proto_version=%d pero sólo soportamos el protocolo %d o superior" -#: replication/pgoutput/pgoutput.c:223 +#: replication/pgoutput/pgoutput.c:302 #, c-format msgid "publication_names parameter missing" msgstr "parámetro publication_names faltante" -#: replication/slot.c:183 +#: replication/pgoutput/pgoutput.c:315 +#, fuzzy, c-format +#| msgid "client sent proto_version=%d but we only support protocol %d or higher" +msgid "requested proto_version=%d does not support streaming, need %d or higher" +msgstr "el cliente envió proto_version=%d pero sólo soportamos el protocolo %d o superior" + +#: replication/pgoutput/pgoutput.c:320 +#, fuzzy, c-format +#| msgid "integer of size %lu not supported by pqPutInt" +msgid "streaming requested, but not supported by output plugin" +msgstr "el entero de tamaño %lu no está soportado por pqPutInt" + +#: replication/slot.c:182 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "el nombre de slot de replicación «%s» es demasiado corto" -#: replication/slot.c:192 +#: replication/slot.c:191 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "el nombre de slot de replicación «%s» es demasiado largo" -#: replication/slot.c:205 +#: replication/slot.c:204 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "el nombre de slot de replicación «%s» contiene caracteres no válidos" -#: replication/slot.c:207 +#: replication/slot.c:206 #, c-format msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "Los nombres de slots de replicación sólo pueden contener letras minúsculas, números y el carácter «_»." -#: replication/slot.c:254 +#: replication/slot.c:260 #, c-format msgid "replication slot \"%s\" already exists" msgstr "el slot de replicación «%s» ya existe" -#: replication/slot.c:264 +#: replication/slot.c:270 #, c-format msgid "all replication slots are in use" msgstr "todos los slots de replicación están en uso" -#: replication/slot.c:265 +#: replication/slot.c:271 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Libere uno o incremente max_replication_slots." -#: replication/slot.c:407 replication/slotfuncs.c:760 +#: replication/slot.c:424 replication/slotfuncs.c:761 +#: utils/adt/pgstatfuncs.c:2227 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "no existe el slot de replicación «%s»" -#: replication/slot.c:445 replication/slot.c:1006 +#: replication/slot.c:462 replication/slot.c:1043 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "el slot de replicación «%s» está activo para el PID %d" -#: replication/slot.c:683 replication/slot.c:1314 replication/slot.c:1697 +#: replication/slot.c:701 replication/slot.c:1350 replication/slot.c:1733 #, c-format msgid "could not remove directory \"%s\"" msgstr "no se pudo eliminar el directorio «%s»" -#: replication/slot.c:1041 +#: replication/slot.c:1078 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "los slots de replicación sólo pueden usarse si max_replication_slots > 0" # FIXME see logical.c:81 -#: replication/slot.c:1046 +#: replication/slot.c:1083 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "los slots de replicación sólo pueden usarse si wal_level >= replica" -#: replication/slot.c:1202 +#: replication/slot.c:1239 #, fuzzy, c-format #| msgid "terminating walsender process due to replication timeout" msgid "terminating process %d because replication slot \"%s\" is too far behind" msgstr "terminando el proceso walsender debido a que se agotó el tiempo de espera de replicación" -#: replication/slot.c:1221 +#: replication/slot.c:1258 #, c-format msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" msgstr "invalidando el slot «%s» porque su restart_lsn %X/%X excede max_slot_wal_keep_size" -#: replication/slot.c:1635 +#: replication/slot.c:1671 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "el archivo de slot de replicación «%s» tiene número mágico erróneo: %u en lugar de %u" -#: replication/slot.c:1642 +#: replication/slot.c:1678 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "el archivo de slot de replicación «%s» tiene versión no soportada %u" -#: replication/slot.c:1649 +#: replication/slot.c:1685 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "el archivo de slot de replicación «%s» tiene largo corrupto %u" -#: replication/slot.c:1685 +#: replication/slot.c:1721 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "suma de verificación no coincidenete en archivo de slot de replicación «%s»: es %u, debería ser %u" # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/slot.c:1719 +#: replication/slot.c:1755 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "existe el slot de replicación lógica «%s», pero wal_level < logical" -#: replication/slot.c:1721 +#: replication/slot.c:1757 #, c-format msgid "Change wal_level to be logical or higher." msgstr "Cambie wal_level a logical o superior." # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/slot.c:1725 +#: replication/slot.c:1761 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "existe el slot de replicación lógica «%s», pero wal_level < logical" # <> hello vim -#: replication/slot.c:1727 +#: replication/slot.c:1763 #, c-format msgid "Change wal_level to be replica or higher." msgstr "Cambie wal_level a replica o superior." -#: replication/slot.c:1761 +#: replication/slot.c:1797 #, c-format msgid "too many replication slots active before shutdown" msgstr "demasiados slots de replicacion activos antes del apagado" -#: replication/slotfuncs.c:624 +#: replication/slotfuncs.c:626 #, c-format msgid "invalid target WAL LSN" msgstr "el LSN de wal de destino no es válido" -#: replication/slotfuncs.c:646 +#: replication/slotfuncs.c:648 #, fuzzy, c-format #| msgid "replication slot \"%s\" does not exist" msgid "replication slot \"%s\" cannot be advanced" msgstr "no existe el slot de replicación «%s»" -#: replication/slotfuncs.c:664 +#: replication/slotfuncs.c:666 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "no puede avanzar un slot de replicación a %X/%X, el mínimo es %X/%X" -#: replication/slotfuncs.c:772 +#: replication/slotfuncs.c:773 #, c-format msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "no se puede copiar el slot de replicación física «%s» como slot de replicación lógica" -#: replication/slotfuncs.c:774 +#: replication/slotfuncs.c:775 #, c-format msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "no se puede copiar el slot de replicación lógica «%s» como slot de replicación física" -#: replication/slotfuncs.c:781 +#: replication/slotfuncs.c:782 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "no puede copiar un slot de replicación que no ha reservado WAL" -#: replication/slotfuncs.c:857 +#: replication/slotfuncs.c:859 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "no se pudo copiar el slot de replicación «%s»" -#: replication/slotfuncs.c:859 +#: replication/slotfuncs.c:861 #, c-format msgid "The source replication slot was modified incompatibly during the copy operation." msgstr "El slot de replicación de origen fue modificado incompatiblemente durante la operación de copia." -#: replication/slotfuncs.c:865 +#: replication/slotfuncs.c:867 #, fuzzy, c-format #| msgid "could not copy replication slot \"%s\"" msgid "cannot copy unfinished logical replication slot \"%s\"" msgstr "no se pudo copiar el slot de replicación «%s»" -#: replication/slotfuncs.c:867 +#: replication/slotfuncs.c:869 #, c-format msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "Reintente cuando el confirmed_flush_lsn del slot de replicación de origen sea válido." -#: replication/syncrep.c:257 +#: replication/syncrep.c:268 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "cancelando la espera para la replicación sincrónica y terminando la conexión debido a una orden del administrador" -#: replication/syncrep.c:258 replication/syncrep.c:275 +#: replication/syncrep.c:269 replication/syncrep.c:286 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "La transacción ya fue comprometida localmente, pero pudo no haber sido replicada al standby." -#: replication/syncrep.c:274 +#: replication/syncrep.c:285 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "cancelando espera para la replicación sincrónica debido a una petición del usuario" -#: replication/syncrep.c:416 -#, c-format -msgid "standby \"%s\" now has synchronous standby priority %u" -msgstr "el standby «%s» ahora tiene prioridad sincrónica %u" - -#: replication/syncrep.c:483 +#: replication/syncrep.c:494 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "el standby «%s» es ahora un standby sincrónico con prioridad %u" -#: replication/syncrep.c:487 +#: replication/syncrep.c:498 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "el standby «%s» es ahora un candidato para standby sincrónico de quórum" -#: replication/syncrep.c:1034 +#: replication/syncrep.c:1045 #, c-format msgid "synchronous_standby_names parser failed" msgstr "falló la interpretación de synchronous_standby_names" -#: replication/syncrep.c:1040 +#: replication/syncrep.c:1051 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "el argumento de standby sincrónicos (%d) debe ser mayor que cero" -#: replication/walreceiver.c:171 +#: replication/walreceiver.c:160 #, c-format msgid "terminating walreceiver process due to administrator command" msgstr "terminando el proceso walreceiver debido a una orden del administrador" -#: replication/walreceiver.c:297 +#: replication/walreceiver.c:285 #, c-format msgid "could not connect to the primary server: %s" msgstr "no se pudo conectar al servidor primario: %s" -#: replication/walreceiver.c:343 +#: replication/walreceiver.c:331 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "el identificador de sistema difiere entre el primario y el standby" -#: replication/walreceiver.c:344 +#: replication/walreceiver.c:332 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "El identificador del primario es %s, el identificador del standby es %s." -#: replication/walreceiver.c:354 +#: replication/walreceiver.c:342 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "el timeline más alto del primario, %u, está más atrás que el timeline de recuperación %u" -#: replication/walreceiver.c:408 +#: replication/walreceiver.c:396 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "iniciando el flujo de WAL desde el primario en %X/%X en el timeline %u" -#: replication/walreceiver.c:413 +#: replication/walreceiver.c:400 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "reiniciando el flujo de WAL en %X/%X en el timeline %u" -#: replication/walreceiver.c:442 +#: replication/walreceiver.c:428 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "no se puede continuar el flujo de WAL; la recuperación ya ha terminado" -#: replication/walreceiver.c:479 +#: replication/walreceiver.c:465 #, c-format msgid "replication terminated by primary server" msgstr "replicación terminada por el servidor primario" -#: replication/walreceiver.c:480 +#: replication/walreceiver.c:466 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "Se alcanzó el fin de WAL en el timeline %u en la posición %X/%X." -#: replication/walreceiver.c:568 +#: replication/walreceiver.c:554 #, c-format msgid "terminating walreceiver due to timeout" msgstr "terminando el proceso walreceiver debido a que se agotó el tiempo de espera" -#: replication/walreceiver.c:606 +#: replication/walreceiver.c:592 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "el servidor primario no contiene más WAL en el timeline %u solicitado" -#: replication/walreceiver.c:622 replication/walreceiver.c:929 +#: replication/walreceiver.c:608 replication/walreceiver.c:903 #, c-format msgid "could not close log segment %s: %m" msgstr "no se pudo cerrar archivo de segmento %s: %m" -#: replication/walreceiver.c:742 +#: replication/walreceiver.c:727 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "trayendo el archivo de historia del timeline para el timeline %u desde el servidor primario" -#: replication/walreceiver.c:976 +#: replication/walreceiver.c:950 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "no se pudo escribir al segmento de log %s en la posición %u, largo %lu: %m" -#: replication/walsender.c:523 storage/smgr/md.c:1291 +#: replication/walsender.c:524 storage/smgr/md.c:1320 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "no se pudo posicionar (seek) al fin del archivo «%s»: %m" -#: replication/walsender.c:527 +#: replication/walsender.c:528 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "no se pudo posicionar (seek) al comienzo del archivo «%s»: %m" -#: replication/walsender.c:578 +#: replication/walsender.c:579 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "IDENTIFY_SYSTEM no se ha ejecutado antes de START_REPLICATION" -#: replication/walsender.c:607 +#: replication/walsender.c:608 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "no se puede usar un slot de replicación lógica para replicación física" -#: replication/walsender.c:676 +#: replication/walsender.c:677 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "el punto de inicio solicitado %X/%X del timeline %u no está en la historia de este servidor" @@ -18849,110 +20216,100 @@ msgstr "el punto de inicio solicitado %X/%X del timeline %u no está en la histo msgid "This server's history forked from timeline %u at %X/%X." msgstr "La historia de este servidor bifurcó desde el timeline %u en %X/%X." -#: replication/walsender.c:725 +#: replication/walsender.c:724 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "el punto de inicio solicitado %X/%X está más adelante que la posición de sincronización (flush) de WAL de este servidor %X/%X" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:976 +#: replication/walsender.c:974 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s no debe ser ejecutado dentro de una transacción" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:986 +#: replication/walsender.c:984 #, c-format msgid "%s must be called inside a transaction" msgstr "%s no debe ser ejecutado dentro de una transacción" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:992 +#: replication/walsender.c:990 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s debe llamarse en una transacción de modo de aislamiento REPEATABLE READ" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:998 +#: replication/walsender.c:996 #, c-format msgid "%s must be called before any query" msgstr "%s debe ser llamado antes de cualquier consulta" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1004 +#: replication/walsender.c:1002 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s no está permitido en una subtransacción" -#: replication/walsender.c:1152 +#: replication/walsender.c:1145 #, fuzzy, c-format #| msgid "created temporary replication slot \"%s\"" msgid "cannot read from logical replication slot \"%s\"" msgstr "se creó slot temporal de replicación «%s»" -#: replication/walsender.c:1154 +#: replication/walsender.c:1147 #, c-format msgid "This slot has been invalidated because it exceeded the maximum reserved size." msgstr "Este slot ha sido invalidado porque excedió el máximo del tamaño de reserva." -#: replication/walsender.c:1164 +#: replication/walsender.c:1157 #, c-format msgid "terminating walsender process after promotion" msgstr "terminando el proceso walsender luego de la promoción" -#: replication/walsender.c:1538 +#: replication/walsender.c:1523 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "no puede ejecutar nuevas órdenes mientras el «WAL sender» está en modo de apagarse" -#: replication/walsender.c:1571 +#: replication/walsender.c:1560 +#, c-format +msgid "cannot execute SQL commands in WAL sender for physical replication" +msgstr "no puede ejecutar órdenes SQL en el «WAL sender» para replicación física" + +#: replication/walsender.c:1583 #, c-format msgid "received replication command: %s" msgstr "se recibió orden de replicación: %s" -#: replication/walsender.c:1587 tcop/fastpath.c:279 tcop/postgres.c:1103 -#: tcop/postgres.c:1455 tcop/postgres.c:1716 tcop/postgres.c:2174 -#: tcop/postgres.c:2535 tcop/postgres.c:2614 +#: replication/walsender.c:1591 tcop/fastpath.c:208 tcop/postgres.c:1078 +#: tcop/postgres.c:1430 tcop/postgres.c:1691 tcop/postgres.c:2176 +#: tcop/postgres.c:2586 tcop/postgres.c:2665 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "transacción abortada, las órdenes serán ignoradas hasta el fin de bloque de transacción" -#: replication/walsender.c:1657 -#, c-format -msgid "cannot execute SQL commands in WAL sender for physical replication" -msgstr "no puede ejecutar órdenes SQL en el «WAL sender» para replicación física" - -#: replication/walsender.c:1706 replication/walsender.c:1722 +#: replication/walsender.c:1726 replication/walsender.c:1761 #, c-format msgid "unexpected EOF on standby connection" msgstr "se encontró fin de archivo inesperado en la conexión standby" -#: replication/walsender.c:1736 -#, c-format -msgid "unexpected standby message type \"%c\", after receiving CopyDone" -msgstr "mensaje de standby de tipo «%c» inesperado, después de recibir CopyDone" - -#: replication/walsender.c:1774 +#: replication/walsender.c:1749 #, c-format msgid "invalid standby message type \"%c\"" msgstr "el tipo «%c» de mensaje del standby no es válido" -#: replication/walsender.c:1815 +#: replication/walsender.c:1838 #, c-format msgid "unexpected message type \"%c\"" msgstr "mensaje de tipo «%c» inesperado" -#: replication/walsender.c:2233 +#: replication/walsender.c:2251 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "terminando el proceso walsender debido a que se agotó el tiempo de espera de replicación" -#: replication/walsender.c:2310 -#, c-format -msgid "\"%s\" has now caught up with upstream server" -msgstr "«%s» ha alcanzado al servidor de origen" - -#: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:989 +#: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:999 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "ya existe una regla llamada «%s» para la relación «%s»" @@ -19017,327 +20374,339 @@ msgstr "«%s» ya es una vista" msgid "view rule for \"%s\" must be named \"%s\"" msgstr "la regla de vista para «%s» debe llamarse «%s»" -#: rewrite/rewriteDefine.c:434 +#: rewrite/rewriteDefine.c:435 #, c-format msgid "cannot convert partitioned table \"%s\" to a view" msgstr "no se puede convertir la tabla particionada «%s» en vista" -#: rewrite/rewriteDefine.c:440 +#: rewrite/rewriteDefine.c:444 #, c-format msgid "cannot convert partition \"%s\" to a view" msgstr "no se puede convertir la partición «%s» en vista" -#: rewrite/rewriteDefine.c:449 +#: rewrite/rewriteDefine.c:453 #, c-format msgid "could not convert table \"%s\" to a view because it is not empty" msgstr "no se pudo convertir la tabla «%s» en vista porque no está vacía" -#: rewrite/rewriteDefine.c:458 +#: rewrite/rewriteDefine.c:462 #, c-format msgid "could not convert table \"%s\" to a view because it has triggers" msgstr "no se pudo convertir la tabla «%s» en vista porque tiene triggers" -#: rewrite/rewriteDefine.c:460 +#: rewrite/rewriteDefine.c:464 #, c-format msgid "In particular, the table cannot be involved in any foreign key relationships." msgstr "En particular, la tabla no puede estar involucrada en relaciones de llave foránea." -#: rewrite/rewriteDefine.c:465 +#: rewrite/rewriteDefine.c:469 #, c-format msgid "could not convert table \"%s\" to a view because it has indexes" msgstr "no se pudo convertir la tabla «%s» en vista porque tiene índices" -#: rewrite/rewriteDefine.c:471 +#: rewrite/rewriteDefine.c:475 #, c-format msgid "could not convert table \"%s\" to a view because it has child tables" msgstr "no se pudo convertir la tabla «%s» en vista porque tiene tablas hijas" -#: rewrite/rewriteDefine.c:477 +#: rewrite/rewriteDefine.c:481 +#, fuzzy, c-format +#| msgid "could not convert table \"%s\" to a view because it has child tables" +msgid "could not convert table \"%s\" to a view because it has parent tables" +msgstr "no se pudo convertir la tabla «%s» en vista porque tiene tablas hijas" + +#: rewrite/rewriteDefine.c:487 #, c-format msgid "could not convert table \"%s\" to a view because it has row security enabled" msgstr "no se pudo convertir la tabla «%s» en vista porque tiene seguridad de registros activada" -#: rewrite/rewriteDefine.c:483 +#: rewrite/rewriteDefine.c:493 #, c-format msgid "could not convert table \"%s\" to a view because it has row security policies" msgstr "no se pudo convertir la tabla «%s» en vista porque tiene políticas de seguridad de registros" -#: rewrite/rewriteDefine.c:510 +#: rewrite/rewriteDefine.c:520 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "no se pueden tener múltiples listas RETURNING en una regla" -#: rewrite/rewriteDefine.c:515 +#: rewrite/rewriteDefine.c:525 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "listas de RETURNING no están soportadas en reglas condicionales" -#: rewrite/rewriteDefine.c:519 +#: rewrite/rewriteDefine.c:529 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "listas de RETURNING no están soportadas en reglas que no estén marcadas INSTEAD" -#: rewrite/rewriteDefine.c:683 +#: rewrite/rewriteDefine.c:693 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "la lista de destinos en la regla de SELECT tiene demasiadas entradas" -#: rewrite/rewriteDefine.c:684 +#: rewrite/rewriteDefine.c:694 #, c-format msgid "RETURNING list has too many entries" msgstr "la lista de RETURNING tiene demasiadas entradas" -#: rewrite/rewriteDefine.c:711 +#: rewrite/rewriteDefine.c:721 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "no se puede convertir en vista una relación que contiene columnas eliminadas" -#: rewrite/rewriteDefine.c:712 +#: rewrite/rewriteDefine.c:722 #, c-format msgid "cannot create a RETURNING list for a relation containing dropped columns" msgstr "no se puede crear una lista RETURNING para una relación que contiene columnas eliminadas" -#: rewrite/rewriteDefine.c:718 +#: rewrite/rewriteDefine.c:728 #, c-format msgid "SELECT rule's target entry %d has different column name from column \"%s\"" msgstr "la entrada de destino %d de la regla de SELECT tiene un nombre de columna diferente de «%s»" -#: rewrite/rewriteDefine.c:720 +#: rewrite/rewriteDefine.c:730 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "La entrada de destino de SELECT tiene nombre «%s»." -#: rewrite/rewriteDefine.c:729 +#: rewrite/rewriteDefine.c:739 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "el destino %d de la regla de SELECT tiene un tipo diferente de la columna «%s»" -#: rewrite/rewriteDefine.c:731 +#: rewrite/rewriteDefine.c:741 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "el destino %d de la lista de RETURNING tiene un tipo diferente de la columna «%s»" -#: rewrite/rewriteDefine.c:734 rewrite/rewriteDefine.c:758 +#: rewrite/rewriteDefine.c:744 rewrite/rewriteDefine.c:768 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "La entrada de destino de SELECT tiene un tipo «%s», pero la columna tiene tipo «%s»." -#: rewrite/rewriteDefine.c:737 rewrite/rewriteDefine.c:762 +#: rewrite/rewriteDefine.c:747 rewrite/rewriteDefine.c:772 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "una entrada de la lista RETURNING tiene tipo %s, pero la columna tiene tipo %s." -#: rewrite/rewriteDefine.c:753 +#: rewrite/rewriteDefine.c:763 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "el destino %d de la regla de SELECT tiene un tamaño diferente de la columna «%s»" -#: rewrite/rewriteDefine.c:755 +#: rewrite/rewriteDefine.c:765 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "el destino %d de la lista RETURNING tiene un tamaño diferente de la columna «%s»" -#: rewrite/rewriteDefine.c:772 +#: rewrite/rewriteDefine.c:782 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "la lista de destinos de regla de SELECT tiene muy pocas entradas" -#: rewrite/rewriteDefine.c:773 +#: rewrite/rewriteDefine.c:783 #, c-format msgid "RETURNING list has too few entries" msgstr "la lista de RETURNING tiene muy pocas entradas" -#: rewrite/rewriteDefine.c:866 rewrite/rewriteDefine.c:980 +#: rewrite/rewriteDefine.c:876 rewrite/rewriteDefine.c:990 #: rewrite/rewriteSupport.c:109 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "no existe la regla «%s» para la relación «%s»" -#: rewrite/rewriteDefine.c:999 +#: rewrite/rewriteDefine.c:1009 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "no se permite cambiar el nombre de una regla ON SELECT" -#: rewrite/rewriteHandler.c:545 +#: rewrite/rewriteHandler.c:551 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "el nombre de consulta WITH «%s» aparece tanto en una acción de regla y en la consulta que está siendo reescrita" -#: rewrite/rewriteHandler.c:605 +#: rewrite/rewriteHandler.c:611 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "no se puede usar RETURNING en múltiples reglas" -#: rewrite/rewriteHandler.c:816 rewrite/rewriteHandler.c:828 -#, c-format -msgid "cannot insert into column \"%s\"" +#: rewrite/rewriteHandler.c:843 rewrite/rewriteHandler.c:882 +#, fuzzy, c-format +#| msgid "cannot insert into column \"%s\"" +msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "no se puede insertar en la columna «%s»" -#: rewrite/rewriteHandler.c:817 rewrite/rewriteHandler.c:839 +#: rewrite/rewriteHandler.c:845 rewrite/rewriteHandler.c:911 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "La columna \"%s\" es una columna de identidad definida como GENERATED ALWAYS." -#: rewrite/rewriteHandler.c:819 +#: rewrite/rewriteHandler.c:847 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Use OVERRIDING SYSTEM VALUE para controlar manualmente." -#: rewrite/rewriteHandler.c:838 rewrite/rewriteHandler.c:845 +#: rewrite/rewriteHandler.c:909 rewrite/rewriteHandler.c:917 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "la columna «%s» sólo puede actualizarse a DEFAULT" -#: rewrite/rewriteHandler.c:1014 rewrite/rewriteHandler.c:1032 +#: rewrite/rewriteHandler.c:1064 rewrite/rewriteHandler.c:1082 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "hay múltiples asignaciones a la misma columna «%s»" -#: rewrite/rewriteHandler.c:2062 +#: rewrite/rewriteHandler.c:2084 rewrite/rewriteHandler.c:3898 +#, c-format +msgid "infinite recursion detected in rules for relation \"%s\"" +msgstr "se detectó recursión infinita en las reglas de la relación «%s»" + +#: rewrite/rewriteHandler.c:2169 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "se detectó recursión infinita en la política para la relación «%s»" -#: rewrite/rewriteHandler.c:2382 +#: rewrite/rewriteHandler.c:2489 msgid "Junk view columns are not updatable." msgstr "Las columnas «basura» de vistas no son actualizables." -#: rewrite/rewriteHandler.c:2387 +#: rewrite/rewriteHandler.c:2494 msgid "View columns that are not columns of their base relation are not updatable." msgstr "Las columnas de vistas que no son columnas de su relación base no son actualizables." -#: rewrite/rewriteHandler.c:2390 +#: rewrite/rewriteHandler.c:2497 msgid "View columns that refer to system columns are not updatable." msgstr "Las columnas de vistas que se refieren a columnas de sistema no son actualizables." -#: rewrite/rewriteHandler.c:2393 +#: rewrite/rewriteHandler.c:2500 msgid "View columns that return whole-row references are not updatable." msgstr "Las columnas de vistas que retornan referencias a la fila completa no son actualizables." # XXX a %s here would be nice ... -#: rewrite/rewriteHandler.c:2454 +#: rewrite/rewriteHandler.c:2561 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Las vistas que contienen DISTINCT no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2457 +#: rewrite/rewriteHandler.c:2564 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Las vistas que contienen GROUP BY no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2460 +#: rewrite/rewriteHandler.c:2567 msgid "Views containing HAVING are not automatically updatable." msgstr "Las vistas que contienen HAVING no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2463 +#: rewrite/rewriteHandler.c:2570 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "Las vistas que contienen UNION, INTERSECT o EXCEPT no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2466 +#: rewrite/rewriteHandler.c:2573 msgid "Views containing WITH are not automatically updatable." msgstr "Las vistas que contienen WITH no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2469 +#: rewrite/rewriteHandler.c:2576 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Las vistas que contienen LIMIT u OFFSET no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2481 +#: rewrite/rewriteHandler.c:2588 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Las vistas que retornan funciones de agregación no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2484 +#: rewrite/rewriteHandler.c:2591 msgid "Views that return window functions are not automatically updatable." msgstr "Las vistas que retornan funciones ventana no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2487 +#: rewrite/rewriteHandler.c:2594 msgid "Views that return set-returning functions are not automatically updatable." msgstr "Las vistas que retornan funciones-que-retornan-conjuntos no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2494 rewrite/rewriteHandler.c:2498 -#: rewrite/rewriteHandler.c:2506 +#: rewrite/rewriteHandler.c:2601 rewrite/rewriteHandler.c:2605 +#: rewrite/rewriteHandler.c:2613 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "Las vistas que no extraen desde una única tabla o vista no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2509 +#: rewrite/rewriteHandler.c:2616 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Las vistas que contienen TABLESAMPLE no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2533 +#: rewrite/rewriteHandler.c:2640 msgid "Views that have no updatable columns are not automatically updatable." msgstr "Las vistas que no tienen columnas actualizables no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:3010 +#: rewrite/rewriteHandler.c:3117 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "no se puede insertar en la columna «%s» de la vista «%s»" -#: rewrite/rewriteHandler.c:3018 +#: rewrite/rewriteHandler.c:3125 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "no se puede actualizar la columna «%s» vista «%s»" -#: rewrite/rewriteHandler.c:3496 +#: rewrite/rewriteHandler.c:3603 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "las reglas DO INSTEAD NOTHING no están soportadas para sentencias que modifiquen datos en WITH" -#: rewrite/rewriteHandler.c:3510 +#: rewrite/rewriteHandler.c:3617 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "las reglas DO INSTEAD condicionales no están soportadas para sentencias que modifiquen datos en WITH" -#: rewrite/rewriteHandler.c:3514 +#: rewrite/rewriteHandler.c:3621 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "las reglas DO ALSO no están soportadas para sentencias que modifiquen datos en WITH" -#: rewrite/rewriteHandler.c:3519 +#: rewrite/rewriteHandler.c:3626 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "las reglas DO INSTEAD de múltiples sentencias no están soportadas para sentencias que modifiquen datos en WITH" # XXX a %s here would be nice ... -#: rewrite/rewriteHandler.c:3710 rewrite/rewriteHandler.c:3718 -#: rewrite/rewriteHandler.c:3726 +#: rewrite/rewriteHandler.c:3826 rewrite/rewriteHandler.c:3834 +#: rewrite/rewriteHandler.c:3842 #, fuzzy, c-format #| msgid "Views containing DISTINCT are not automatically updatable." msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "Las vistas que contienen DISTINCT no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:3819 +#: rewrite/rewriteHandler.c:3935 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "no se puede hacer INSERT RETURNING a la relación «%s»" -#: rewrite/rewriteHandler.c:3821 +#: rewrite/rewriteHandler.c:3937 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "Necesita un regla incondicional ON INSERT DO INSTEAD con una cláusula RETURNING." -#: rewrite/rewriteHandler.c:3826 +#: rewrite/rewriteHandler.c:3942 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "no se puede hacer UPDATE RETURNING a la relación «%s»" -#: rewrite/rewriteHandler.c:3828 +#: rewrite/rewriteHandler.c:3944 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "Necesita un regla incondicional ON UPDATE DO INSTEAD con una cláusula RETURNING." -#: rewrite/rewriteHandler.c:3833 +#: rewrite/rewriteHandler.c:3949 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "no se puede hacer DELETE RETURNING a la relación «%s»" -#: rewrite/rewriteHandler.c:3835 +#: rewrite/rewriteHandler.c:3951 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "Necesita un regla incondicional ON DELETE DO INSTEAD con una clásula RETURNING." -#: rewrite/rewriteHandler.c:3853 +#: rewrite/rewriteHandler.c:3969 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "INSERT con una cláusula ON CONFLICT no puede usarse con una tabla que tiene reglas INSERT o UPDATE" -#: rewrite/rewriteHandler.c:3910 +#: rewrite/rewriteHandler.c:4026 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "WITH no puede ser usado en una consulta que está siendo convertida en múltiples consultas a través de reglas" @@ -19352,91 +20721,188 @@ msgstr "las sentencias condicionales de utilidad no están implementadas" msgid "WHERE CURRENT OF on a view is not implemented" msgstr "WHERE CURRENT OF no está implementado en una vista" -#: rewrite/rewriteManip.c:1507 +#: rewrite/rewriteManip.c:1507 +#, c-format +msgid "NEW variables in ON UPDATE rules cannot reference columns that are part of a multiple assignment in the subject UPDATE command" +msgstr "las variables NEW en reglas ON UPDATE no pueden referenciar columnas que son parte de una asignación múltiple en la orden UPDATE" + +#: scan.l:458 +msgid "unterminated /* comment" +msgstr "un comentario /* está inconcluso" + +#: scan.l:478 +msgid "unterminated bit string literal" +msgstr "una cadena de bits está inconclusa" + +#: scan.l:492 +msgid "unterminated hexadecimal string literal" +msgstr "una cadena hexadecimal está inconclusa" + +#: scan.l:542 +#, c-format +msgid "unsafe use of string constant with Unicode escapes" +msgstr "uso inseguro de literal de cadena con escapes Unicode" + +#: scan.l:543 +#, c-format +msgid "String constants with Unicode escapes cannot be used when standard_conforming_strings is off." +msgstr "Los literales de cadena con escapes Unicode no pueden usarse cuando standard_conforming_strings está desactivado." + +#: scan.l:604 +msgid "unhandled previous state in xqs" +msgstr "estado previo no manejado en xqs" + +#: scan.l:678 +#, c-format +msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." +msgstr "Los escapes Unicode deben ser \\uXXXX o \\UXXXXXXXX." + +#: scan.l:689 +#, c-format +msgid "unsafe use of \\' in a string literal" +msgstr "uso inseguro de \\' en un literal de cadena" + +#: scan.l:690 +#, c-format +msgid "Use '' to write quotes in strings. \\' is insecure in client-only encodings." +msgstr "Use '' para escribir comillas en cadenas. \\' es inseguro en codificaciones de sólo cliente." + +#: scan.l:762 +msgid "unterminated dollar-quoted string" +msgstr "una cadena separada por $ está inconclusa" + +#: scan.l:779 scan.l:789 +msgid "zero-length delimited identifier" +msgstr "un identificador delimitado tiene largo cero" + +#: scan.l:800 syncrep_scanner.l:91 +msgid "unterminated quoted identifier" +msgstr "un identificador entre comillas está inconcluso" + +#: scan.l:963 +msgid "operator too long" +msgstr "el operador es demasiado largo" + +#. translator: %s is typically the translation of "syntax error" +#: scan.l:1171 +#, c-format +msgid "%s at end of input" +msgstr "%s al final de la entrada" + +#. translator: first %s is typically the translation of "syntax error" +#: scan.l:1179 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s en o cerca de «%s»" + +#: scan.l:1373 +#, c-format +msgid "nonstandard use of \\' in a string literal" +msgstr "uso no estandar de \\' en un literal de cadena" + +#: scan.l:1374 +#, c-format +msgid "Use '' to write quotes in strings, or use the escape string syntax (E'...')." +msgstr "Use '' para escribir comillas en cadenas, o use la sintaxis de escape de cadenas (E'...')." + +#: scan.l:1383 +#, c-format +msgid "nonstandard use of \\\\ in a string literal" +msgstr "uso no estandar de \\\\ en un literal de cadena" + +#: scan.l:1384 +#, c-format +msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." +msgstr "Use '' para escribir comillas en cadenas, o use la sintaxis de escape de cadenas (E'\\\\')." + +#: scan.l:1398 +#, c-format +msgid "nonstandard use of escape in a string literal" +msgstr "uso no estandar de escape en un literal de cadena" + +#: scan.l:1399 #, c-format -msgid "NEW variables in ON UPDATE rules cannot reference columns that are part of a multiple assignment in the subject UPDATE command" -msgstr "las variables NEW en reglas ON UPDATE no pueden referenciar columnas que son parte de una asignación múltiple en la orden UPDATE" +msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." +msgstr "Use la sintaxis de escape para cadenas, por ej. E'\\r\\n'." -#: snowball/dict_snowball.c:199 +#: snowball/dict_snowball.c:215 #, c-format msgid "no Snowball stemmer available for language \"%s\" and encoding \"%s\"" msgstr "no se encontró un analizador Snowball para el lenguaje «%s» y la codificación «%s»" -#: snowball/dict_snowball.c:222 tsearch/dict_ispell.c:74 +#: snowball/dict_snowball.c:238 tsearch/dict_ispell.c:74 #: tsearch/dict_simple.c:49 #, c-format msgid "multiple StopWords parameters" msgstr "parámetro StopWords duplicado" -#: snowball/dict_snowball.c:231 +#: snowball/dict_snowball.c:247 #, c-format msgid "multiple Language parameters" msgstr "parámetro Language duplicado" -#: snowball/dict_snowball.c:238 +#: snowball/dict_snowball.c:254 #, c-format msgid "unrecognized Snowball parameter: \"%s\"" msgstr "parámetro Snowball no reconocido: «%s»" -#: snowball/dict_snowball.c:246 +#: snowball/dict_snowball.c:262 #, c-format msgid "missing Language parameter" msgstr "falta un parámetro Language" -#: statistics/dependencies.c:667 statistics/dependencies.c:720 -#: statistics/mcv.c:1477 statistics/mcv.c:1508 statistics/mvdistinct.c:348 -#: statistics/mvdistinct.c:401 utils/adt/pseudotypes.c:42 -#: utils/adt/pseudotypes.c:76 -#, c-format -msgid "cannot accept a value of type %s" -msgstr "no se puede aceptar un valor de tipo %s" - -#: statistics/extended_stats.c:145 +#: statistics/extended_stats.c:175 #, c-format msgid "statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"" msgstr "el objeto de estadísticas «%s.%s» no pudo ser calculado para la relación «%s.%s»" -#: statistics/mcv.c:1365 utils/adt/jsonfuncs.c:1800 +#: statistics/extended_stats.c:2277 +#, fuzzy, c-format +#| msgid "\"%s\" is not a composite type" +msgid "relation \"pg_statistic\" does not have a composite type" +msgstr "«%s» no es un tipo compuesto" + +#: statistics/mcv.c:1368 utils/adt/jsonfuncs.c:1941 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "se llamó una función que retorna un registro en un contexto que no puede aceptarlo" -#: storage/buffer/bufmgr.c:588 storage/buffer/bufmgr.c:669 +#: storage/buffer/bufmgr.c:601 storage/buffer/bufmgr.c:761 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "no se pueden acceder tablas temporales de otras sesiones" -#: storage/buffer/bufmgr.c:825 +#: storage/buffer/bufmgr.c:917 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "datos inesperados más allá del EOF en el bloque %u de relación %s" -#: storage/buffer/bufmgr.c:827 +#: storage/buffer/bufmgr.c:919 #, c-format msgid "This has been seen to occur with buggy kernels; consider updating your system." msgstr "Esto parece ocurrir sólo con kernels defectuosos; considere actualizar su sistema." -#: storage/buffer/bufmgr.c:925 +#: storage/buffer/bufmgr.c:1018 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "la página no es válida en el bloque %u de la relación «%s»; reinicializando la página" -#: storage/buffer/bufmgr.c:4211 +#: storage/buffer/bufmgr.c:4524 #, c-format msgid "could not write block %u of %s" msgstr "no se pudo escribir el bloque %u de %s" -#: storage/buffer/bufmgr.c:4213 +#: storage/buffer/bufmgr.c:4526 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Múltiples fallas --- el error de escritura puede ser permanente." -#: storage/buffer/bufmgr.c:4234 storage/buffer/bufmgr.c:4253 +#: storage/buffer/bufmgr.c:4547 storage/buffer/bufmgr.c:4566 #, c-format msgid "writing block %u of relation %s" msgstr "escribiendo el bloque %u de la relación %s" -#: storage/buffer/bufmgr.c:4556 +#: storage/buffer/bufmgr.c:4870 #, c-format msgid "snapshot too old" msgstr "snapshot demasiado antiguo" @@ -19451,216 +20917,249 @@ msgstr "no hay ningún búfer local disponible" msgid "cannot access temporary tables during a parallel operation" msgstr "no se pueden acceder tablas temporales durante una operación paralela" -#: storage/file/buffile.c:319 +#: storage/file/buffile.c:323 #, c-format msgid "could not open temporary file \"%s\" from BufFile \"%s\": %m" msgstr "no se pudo abrir archivo temporal «%s» del BufFile «%s»: %m" -#: storage/file/buffile.c:795 +#: storage/file/buffile.c:684 storage/file/buffile.c:805 #, c-format msgid "could not determine size of temporary file \"%s\" from BufFile \"%s\": %m" msgstr "no se pudo determinar el tamaño del archivo temporal «%s» del BufFile «%s»: %m" -#: storage/file/fd.c:508 storage/file/fd.c:580 storage/file/fd.c:616 +#: storage/file/buffile.c:884 +#, fuzzy, c-format +#| msgid "could not delete file \"%s\": %m" +msgid "could not delete shared fileset \"%s\": %m" +msgstr "no se pudo borrar el archivo «%s»: %m" + +#: storage/file/buffile.c:902 storage/smgr/md.c:306 storage/smgr/md.c:865 +#, c-format +msgid "could not truncate file \"%s\": %m" +msgstr "no se pudo truncar el archivo «%s»: %m" + +#: storage/file/fd.c:515 storage/file/fd.c:587 storage/file/fd.c:623 #, c-format msgid "could not flush dirty data: %m" msgstr "no se pudo sincronizar (flush) datos «sucios»: %m" -#: storage/file/fd.c:538 +#: storage/file/fd.c:545 #, c-format msgid "could not determine dirty data size: %m" msgstr "no se pudo determinar el tamaño de los datos «sucios»: %m" -#: storage/file/fd.c:590 +#: storage/file/fd.c:597 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "no se pudo ejecutar munmap() mientras se sincronizaban (flush) datos: %m" -#: storage/file/fd.c:798 +#: storage/file/fd.c:836 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "no se pudo enlazar (link) el archivo «%s» a «%s»: %m" -#: storage/file/fd.c:881 +#: storage/file/fd.c:929 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit falló: %m" -#: storage/file/fd.c:971 +#: storage/file/fd.c:1019 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "los descriptores de archivo disponibles son insuficientes para iniciar un proceso servidor" -#: storage/file/fd.c:972 +#: storage/file/fd.c:1020 #, c-format msgid "System allows %d, we need at least %d." msgstr "El sistema permite %d, se requieren al menos %d." -#: storage/file/fd.c:1023 storage/file/fd.c:2357 storage/file/fd.c:2467 -#: storage/file/fd.c:2618 +#: storage/file/fd.c:1071 storage/file/fd.c:2408 storage/file/fd.c:2518 +#: storage/file/fd.c:2669 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "se agotaron los descriptores de archivo: %m; libere e intente nuevamente" -#: storage/file/fd.c:1397 +#: storage/file/fd.c:1445 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "archivo temporal: ruta «%s», tamaño %lu" -#: storage/file/fd.c:1528 +#: storage/file/fd.c:1576 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "no se pudo crear el directorio temporal «%s»: %m" -#: storage/file/fd.c:1535 +#: storage/file/fd.c:1583 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "no se pudo crear el subdirectorio temporal «%s»: %m" -#: storage/file/fd.c:1728 +#: storage/file/fd.c:1776 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "no se pudo crear el archivo temporal «%s»: %m" -#: storage/file/fd.c:1763 +#: storage/file/fd.c:1810 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "no se pudo abrir el archivo temporal «%s»: %m" -#: storage/file/fd.c:1804 +#: storage/file/fd.c:1851 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "no se pudo eliminar (unlink) el archivo temporal «%s»: %m" -#: storage/file/fd.c:2068 +#: storage/file/fd.c:1939 +#, c-format +msgid "could not delete file \"%s\": %m" +msgstr "no se pudo borrar el archivo «%s»: %m" + +#: storage/file/fd.c:2119 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "el tamaño del archivo temporal excede temp_file_limit permitido (%dkB)" -#: storage/file/fd.c:2333 storage/file/fd.c:2392 +#: storage/file/fd.c:2384 storage/file/fd.c:2443 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "se excedió maxAllocatedDescs (%d) mientras se trataba de abrir el archivo «%s»" -#: storage/file/fd.c:2437 +#: storage/file/fd.c:2488 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "se excedió maxAllocatedDescs (%d) mientras se trataba de ejecutar la orden «%s»" -#: storage/file/fd.c:2594 +#: storage/file/fd.c:2645 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "se excedió maxAllocatedDescs (%d) mientras se trataba de abrir el directorio «%s»" -#: storage/file/fd.c:3122 +#: storage/file/fd.c:3175 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "archivo inesperado en directorio de archivos temporales: «%s»" -#: storage/file/sharedfileset.c:111 +#: storage/file/fd.c:3298 +#, fuzzy, c-format +#| msgid "could not open file \"%s\": %m" +msgid "could not open %s: %m" +msgstr "no se pudo abrir el archivo «%s»: %m" + +#: storage/file/fd.c:3304 +#, fuzzy, c-format +#| msgid "could not fsync file \"%s\": %m" +msgid "could not sync filesystem for \"%s\": %m" +msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" + +#: storage/file/sharedfileset.c:144 #, c-format msgid "could not attach to a SharedFileSet that is already destroyed" msgstr "no se puede adjuntar a un SharedFileSet que ya está destruido" -#: storage/ipc/dsm.c:338 +#: storage/ipc/dsm.c:351 #, c-format msgid "dynamic shared memory control segment is corrupt" msgstr "el segmento de control de memoria compartida dinámica está corrupto" -#: storage/ipc/dsm.c:399 +#: storage/ipc/dsm.c:415 #, c-format msgid "dynamic shared memory control segment is not valid" msgstr "el segmento de control de memoria compartida dinámica no es válido" -#: storage/ipc/dsm.c:494 +#: storage/ipc/dsm.c:592 #, c-format msgid "too many dynamic shared memory segments" msgstr "demasiados segmentos de memoria compartida dinámica" -#: storage/ipc/dsm_impl.c:230 storage/ipc/dsm_impl.c:526 -#: storage/ipc/dsm_impl.c:630 storage/ipc/dsm_impl.c:801 +#: storage/ipc/dsm_impl.c:233 storage/ipc/dsm_impl.c:529 +#: storage/ipc/dsm_impl.c:633 storage/ipc/dsm_impl.c:804 #, c-format msgid "could not unmap shared memory segment \"%s\": %m" msgstr "no se pudo desmapear el segmento de memoria compartida «%s»: %m" -#: storage/ipc/dsm_impl.c:240 storage/ipc/dsm_impl.c:536 -#: storage/ipc/dsm_impl.c:640 storage/ipc/dsm_impl.c:811 +#: storage/ipc/dsm_impl.c:243 storage/ipc/dsm_impl.c:539 +#: storage/ipc/dsm_impl.c:643 storage/ipc/dsm_impl.c:814 #, c-format msgid "could not remove shared memory segment \"%s\": %m" msgstr "no se pudo eliminar el segmento de memoria compartida «%s»: %m" -#: storage/ipc/dsm_impl.c:264 storage/ipc/dsm_impl.c:711 -#: storage/ipc/dsm_impl.c:825 +#: storage/ipc/dsm_impl.c:267 storage/ipc/dsm_impl.c:714 +#: storage/ipc/dsm_impl.c:828 #, c-format msgid "could not open shared memory segment \"%s\": %m" msgstr "no se pudo abrir el segmento de memoria compartida «%s»: %m" -#: storage/ipc/dsm_impl.c:289 storage/ipc/dsm_impl.c:552 -#: storage/ipc/dsm_impl.c:756 storage/ipc/dsm_impl.c:849 +#: storage/ipc/dsm_impl.c:292 storage/ipc/dsm_impl.c:555 +#: storage/ipc/dsm_impl.c:759 storage/ipc/dsm_impl.c:852 #, c-format msgid "could not stat shared memory segment \"%s\": %m" msgstr "no se pudo hacer stat del segmento de memoria compartida «%s»: %m" -#: storage/ipc/dsm_impl.c:316 storage/ipc/dsm_impl.c:900 +#: storage/ipc/dsm_impl.c:319 storage/ipc/dsm_impl.c:903 #, c-format msgid "could not resize shared memory segment \"%s\" to %zu bytes: %m" msgstr "no se pudo redimensionar el segmento de memoria compartida «%s» a %zu bytes: %m" -#: storage/ipc/dsm_impl.c:338 storage/ipc/dsm_impl.c:573 -#: storage/ipc/dsm_impl.c:732 storage/ipc/dsm_impl.c:922 +#: storage/ipc/dsm_impl.c:341 storage/ipc/dsm_impl.c:576 +#: storage/ipc/dsm_impl.c:735 storage/ipc/dsm_impl.c:925 #, c-format msgid "could not map shared memory segment \"%s\": %m" msgstr "no se pudo mapear el segmento de memoria compartida «%s»: %m" -#: storage/ipc/dsm_impl.c:508 +#: storage/ipc/dsm_impl.c:511 #, c-format msgid "could not get shared memory segment: %m" msgstr "no se pudo obtener el segmento de memoria compartida: %m" -#: storage/ipc/dsm_impl.c:696 +#: storage/ipc/dsm_impl.c:699 #, c-format msgid "could not create shared memory segment \"%s\": %m" msgstr "no se pudo crear el segmento de memoria compartida «%s»: %m" -#: storage/ipc/dsm_impl.c:933 +#: storage/ipc/dsm_impl.c:936 #, c-format msgid "could not close shared memory segment \"%s\": %m" msgstr "no se pudo cerrar el segmento de memoria compartida «%s»: %m" -#: storage/ipc/dsm_impl.c:972 storage/ipc/dsm_impl.c:1020 +#: storage/ipc/dsm_impl.c:975 storage/ipc/dsm_impl.c:1023 #, c-format msgid "could not duplicate handle for \"%s\": %m" msgstr "no se pudo duplicar el «handle» para «%s»: %m" -#. translator: %s is a syscall name, such as "poll()" -#: storage/ipc/latch.c:940 storage/ipc/latch.c:1094 storage/ipc/latch.c:1307 -#: storage/ipc/latch.c:1457 storage/ipc/latch.c:1570 -#, c-format -msgid "%s failed: %m" -msgstr "%s falló: %m" - -#: storage/ipc/procarray.c:3014 +#: storage/ipc/procarray.c:3724 #, fuzzy, c-format #| msgid "database \"%s\" is being used by logical replication subscription" -msgid "database \"%s\" is being used by prepared transaction" +msgid "database \"%s\" is being used by prepared transactions" msgstr "la base de datos «%s» está siendo utilizada por suscripciones de replicación lógica" -#: storage/ipc/procarray.c:3046 storage/ipc/signalfuncs.c:142 +#: storage/ipc/procarray.c:3756 storage/ipc/signalfuncs.c:219 #, c-format msgid "must be a superuser to terminate superuser process" msgstr "debe ser superusuario para terminar proceso de superusuario" -#: storage/ipc/procarray.c:3053 storage/ipc/signalfuncs.c:147 +#: storage/ipc/procarray.c:3763 storage/ipc/signalfuncs.c:224 #, c-format msgid "must be a member of the role whose process is being terminated or member of pg_signal_backend" msgstr "debe ser miembro del rol cuyo proceso se está terminando o ser miembro de pg_signal_backend" -#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:982 -#: storage/lmgr/lock.c:1020 storage/lmgr/lock.c:2845 storage/lmgr/lock.c:4175 -#: storage/lmgr/lock.c:4240 storage/lmgr/lock.c:4532 -#: storage/lmgr/predicate.c:2401 storage/lmgr/predicate.c:2416 -#: storage/lmgr/predicate.c:3898 storage/lmgr/predicate.c:5009 -#: utils/hash/dynahash.c:1067 +#: storage/ipc/shm_mq.c:368 +#, fuzzy, c-format +#| msgid "could not send tuple to shared-memory queue" +msgid "cannot send a message of size %zu via shared memory queue" +msgstr "no se pudo enviar la tupla a la cola en memoria compartida" + +#: storage/ipc/shm_mq.c:694 +#, fuzzy, c-format +#| msgid "invalid magic number in dynamic shared memory segment" +msgid "invalid message size %zu in shared memory queue" +msgstr "número mágico no válido en segmento de memoria compartida dinámica" + +#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:981 +#: storage/lmgr/lock.c:1019 storage/lmgr/lock.c:2844 storage/lmgr/lock.c:4173 +#: storage/lmgr/lock.c:4238 storage/lmgr/lock.c:4545 +#: storage/lmgr/predicate.c:2470 storage/lmgr/predicate.c:2485 +#: storage/lmgr/predicate.c:3967 storage/lmgr/predicate.c:5078 +#: utils/hash/dynahash.c:1112 #, c-format msgid "out of shared memory" msgstr "memoria compartida agotada" @@ -19670,72 +21169,145 @@ msgstr "memoria compartida agotada" msgid "out of shared memory (%zu bytes requested)" msgstr "memoria compartida agotada (%zu bytes solicitados)" -#: storage/ipc/shmem.c:441 +#: storage/ipc/shmem.c:445 #, c-format msgid "could not create ShmemIndex entry for data structure \"%s\"" msgstr "no se pudo crear la entrada en ShmemIndex para la estructura «%s»" -#: storage/ipc/shmem.c:456 +#: storage/ipc/shmem.c:460 #, c-format msgid "ShmemIndex entry size is wrong for data structure \"%s\": expected %zu, actual %zu" msgstr "el tamaño de la entrada ShmemIndex es incorrecto para la estructura «%s»: se esperaba %zu, real %zu" -#: storage/ipc/shmem.c:475 +#: storage/ipc/shmem.c:479 #, c-format msgid "not enough shared memory for data structure \"%s\" (%zu bytes requested)" msgstr "el espacio de memoria compartida es insuficiente para la estructura «%s» (%zu bytes solicitados)" -#: storage/ipc/shmem.c:507 storage/ipc/shmem.c:526 +#: storage/ipc/shmem.c:511 storage/ipc/shmem.c:530 #, c-format msgid "requested shared memory size overflows size_t" msgstr "la petición de tamaño de memoria compartida desborda size_t" -#: storage/ipc/signalfuncs.c:67 +#: storage/ipc/signalfuncs.c:68 storage/ipc/signalfuncs.c:261 +#: utils/adt/mcxtfuncs.c:196 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "PID %d no es un proceso servidor de PostgreSQL" -#: storage/ipc/signalfuncs.c:98 storage/lmgr/proc.c:1366 +#: storage/ipc/signalfuncs.c:99 storage/lmgr/proc.c:1454 +#: utils/adt/mcxtfuncs.c:210 #, c-format msgid "could not send signal to process %d: %m" msgstr "no se pudo enviar la señal al proceso %d: %m" -#: storage/ipc/signalfuncs.c:118 +#: storage/ipc/signalfuncs.c:119 #, c-format msgid "must be a superuser to cancel superuser query" msgstr "debe ser superusuario para cancelar una consulta de superusuario" -#: storage/ipc/signalfuncs.c:123 +#: storage/ipc/signalfuncs.c:124 #, c-format msgid "must be a member of the role whose query is being canceled or member of pg_signal_backend" msgstr "debe ser miembro del rol cuya consulta se está cancelando o ser miembro de pg_signal_backend" +#: storage/ipc/signalfuncs.c:165 +#, c-format +msgid "could not check the existence of the backend with PID %d: %m" +msgstr "" + #: storage/ipc/signalfuncs.c:183 +#, fuzzy, c-format +#| msgid "server did not promote within %d seconds" +msgid "backend with PID %d did not terminate within %lld milliseconds" +msgstr "el servidor no promovió en %d segundos" + +#: storage/ipc/signalfuncs.c:212 +#, fuzzy, c-format +#| msgid "LIMIT must not be negative" +msgid "\"timeout\" must not be negative" +msgstr "LIMIT no debe ser negativo" + +#: storage/ipc/signalfuncs.c:254 +#, fuzzy, c-format +#| msgid "\"wait_seconds\" must not be negative or zero" +msgid "\"timeout\" must not be negative or zero" +msgstr "«wait_seconds» no puede ser negativo o cero" + +#: storage/ipc/signalfuncs.c:300 #, c-format msgid "must be superuser to rotate log files with adminpack 1.0" msgstr "bebe ser superusuario para rotar archivos de log con adminpack 1.0" #. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:185 utils/adt/genfile.c:253 +#: storage/ipc/signalfuncs.c:302 utils/adt/genfile.c:255 #, c-format msgid "Consider using %s, which is part of core, instead." msgstr "Considere usar %s, que es parte del servidor, en su lugar." -#: storage/ipc/signalfuncs.c:191 storage/ipc/signalfuncs.c:211 +#: storage/ipc/signalfuncs.c:308 storage/ipc/signalfuncs.c:328 #, c-format msgid "rotation not possible because log collection not active" msgstr "la rotación no es posible porque la recoleccion de log no está activa" -#: storage/ipc/standby.c:580 tcop/postgres.c:3177 +#: storage/ipc/standby.c:305 +#, fuzzy, c-format +#| msgid "process %d still waiting for %s on %s after %ld.%03d ms" +msgid "recovery still waiting after %ld.%03d ms: %s" +msgstr "el proceso %d aún espera %s en %s después de %ld.%03d ms" + +#: storage/ipc/standby.c:314 +#, fuzzy, c-format +#| msgid "process %d still waiting for %s on %s after %ld.%03d ms" +msgid "recovery finished waiting after %ld.%03d ms: %s" +msgstr "el proceso %d aún espera %s en %s después de %ld.%03d ms" + +#: storage/ipc/standby.c:878 tcop/postgres.c:3317 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "cancelando la sentencia debido a un conflicto con la recuperación" -#: storage/ipc/standby.c:581 tcop/postgres.c:2469 +#: storage/ipc/standby.c:879 tcop/postgres.c:2471 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "La transacción del usuario causó un «deadlock» con la recuperación." +#: storage/ipc/standby.c:1421 +#, fuzzy +#| msgid "unknown" +msgid "unknown reason" +msgstr "desconocido" + +#: storage/ipc/standby.c:1426 +msgid "recovery conflict on buffer pin" +msgstr "" + +#: storage/ipc/standby.c:1429 +#, fuzzy +#| msgid "abort reason: recovery conflict" +msgid "recovery conflict on lock" +msgstr "razón para abortar: conflicto en la recuperación" + +#: storage/ipc/standby.c:1432 +#, fuzzy +#| msgid "remove a tablespace" +msgid "recovery conflict on tablespace" +msgstr "elimina un tablespace" + +#: storage/ipc/standby.c:1435 +msgid "recovery conflict on snapshot" +msgstr "" + +#: storage/ipc/standby.c:1438 +msgid "recovery conflict on buffer deadlock" +msgstr "" + +#: storage/ipc/standby.c:1441 +#, fuzzy +#| msgid "already connected to a database" +msgid "recovery conflict on database" +msgstr "ya está conectado a una base de datos" + #: storage/large_object/inv_api.c:191 #, c-format msgid "pg_largeobject entry for OID %u, page %d has invalid data field size %d" @@ -19756,62 +21328,62 @@ msgstr "parámetro «whence» no válido: %d" msgid "invalid large object write request size: %d" msgstr "tamaño de petición de escritura de objeto grande no válido: %d" -#: storage/lmgr/deadlock.c:1124 +#: storage/lmgr/deadlock.c:1122 #, c-format msgid "Process %d waits for %s on %s; blocked by process %d." msgstr "El proceso %d espera %s en %s; bloqueado por proceso %d." -#: storage/lmgr/deadlock.c:1143 +#: storage/lmgr/deadlock.c:1141 #, c-format msgid "Process %d: %s" msgstr "Proceso %d: %s" -#: storage/lmgr/deadlock.c:1152 +#: storage/lmgr/deadlock.c:1150 #, c-format msgid "deadlock detected" msgstr "se ha detectado un deadlock" -#: storage/lmgr/deadlock.c:1155 +#: storage/lmgr/deadlock.c:1153 #, c-format msgid "See server log for query details." msgstr "Vea el registro del servidor para obtener detalles de las consultas." -#: storage/lmgr/lmgr.c:830 +#: storage/lmgr/lmgr.c:831 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "mientras se actualizaba la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:833 +#: storage/lmgr/lmgr.c:834 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "mientras se borraba la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:836 +#: storage/lmgr/lmgr.c:837 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "mientras se bloqueaba la tupla (%u,%u) de la relación «%s»" -#: storage/lmgr/lmgr.c:839 +#: storage/lmgr/lmgr.c:840 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "mientras se bloqueaba la versión actualizada (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:842 +#: storage/lmgr/lmgr.c:843 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "mientras se insertaba la tupla de índice (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:845 +#: storage/lmgr/lmgr.c:846 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "mientras se verificaba la unicidad de la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:848 +#: storage/lmgr/lmgr.c:849 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "mientras se verificaba la tupla actualizada (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:851 +#: storage/lmgr/lmgr.c:852 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "mientras se verificaba una restricción de exclusión en la tupla (%u,%u) en la relación «%s»" @@ -19878,23 +21450,23 @@ msgstr "candado consultivo [%u,%u,%u,%u]" msgid "unrecognized locktag type %d" msgstr "tipo de locktag %d no reconocido" -#: storage/lmgr/lock.c:803 +#: storage/lmgr/lock.c:802 #, c-format msgid "cannot acquire lock mode %s on database objects while recovery is in progress" msgstr "no se puede adquirir candado en modo %s en objetos de la base de datos mientras la recuperación está en proceso" -#: storage/lmgr/lock.c:805 +#: storage/lmgr/lock.c:804 #, c-format msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." msgstr "Sólo candados RowExclusiveLock o menor pueden ser adquiridos en objetos de la base de datos durante la recuperación." -#: storage/lmgr/lock.c:983 storage/lmgr/lock.c:1021 storage/lmgr/lock.c:2846 -#: storage/lmgr/lock.c:4176 storage/lmgr/lock.c:4241 storage/lmgr/lock.c:4533 +#: storage/lmgr/lock.c:982 storage/lmgr/lock.c:1020 storage/lmgr/lock.c:2845 +#: storage/lmgr/lock.c:4174 storage/lmgr/lock.c:4239 storage/lmgr/lock.c:4546 #, c-format msgid "You might need to increase max_locks_per_transaction." msgstr "Puede ser necesario incrementar max_locks_per_transaction." -#: storage/lmgr/lock.c:3292 storage/lmgr/lock.c:3408 +#: storage/lmgr/lock.c:3283 storage/lmgr/lock.c:3399 #, c-format msgid "cannot PREPARE while holding both session-level and transaction-level locks on the same object" msgstr "no se puede hacer PREPARE mientras se mantienen candados a nivel de sesión y transacción simultáneamente sobre el mismo objeto" @@ -19914,515 +21486,511 @@ msgstr "Puede ser necesario ejecutar menos transacciones al mismo tiempo, o incr msgid "not enough elements in RWConflictPool to record a potential read/write conflict" msgstr "no hay suficientes elementos en RWConflictPool para registrar un potencial conflicto read/write" -#: storage/lmgr/predicate.c:1535 -#, c-format -msgid "deferrable snapshot was unsafe; trying a new one" -msgstr "la instantánea postergada era insegura; intentando con una nueva" - -#: storage/lmgr/predicate.c:1624 +#: storage/lmgr/predicate.c:1694 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "«default_transaction_isolation» está definido a «serializable»." -#: storage/lmgr/predicate.c:1625 +#: storage/lmgr/predicate.c:1695 #, c-format msgid "You can use \"SET default_transaction_isolation = 'repeatable read'\" to change the default." msgstr "Puede usar «SET default_transaction_isolation = 'repeatable read'» para cambiar el valor por omisión." -#: storage/lmgr/predicate.c:1676 +#: storage/lmgr/predicate.c:1746 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "una transacción que importa un snapshot no debe ser READ ONLY DEFERRABLE" -#: storage/lmgr/predicate.c:1755 utils/time/snapmgr.c:623 -#: utils/time/snapmgr.c:629 +#: storage/lmgr/predicate.c:1825 utils/time/snapmgr.c:567 +#: utils/time/snapmgr.c:573 #, c-format msgid "could not import the requested snapshot" msgstr "no se pudo importar el snapshot solicitado" -#: storage/lmgr/predicate.c:1756 utils/time/snapmgr.c:630 +#: storage/lmgr/predicate.c:1826 utils/time/snapmgr.c:574 #, c-format msgid "The source process with PID %d is not running anymore." msgstr "El proceso de origen con PID %d ya no está en ejecución." -#: storage/lmgr/predicate.c:2402 storage/lmgr/predicate.c:2417 -#: storage/lmgr/predicate.c:3899 +#: storage/lmgr/predicate.c:2471 storage/lmgr/predicate.c:2486 +#: storage/lmgr/predicate.c:3968 #, c-format msgid "You might need to increase max_pred_locks_per_transaction." msgstr "Puede ser necesario incrementar max_pred_locks_per_transaction." -#: storage/lmgr/predicate.c:4030 storage/lmgr/predicate.c:4066 -#: storage/lmgr/predicate.c:4099 storage/lmgr/predicate.c:4107 -#: storage/lmgr/predicate.c:4146 storage/lmgr/predicate.c:4388 -#: storage/lmgr/predicate.c:4725 storage/lmgr/predicate.c:4737 -#: storage/lmgr/predicate.c:4780 storage/lmgr/predicate.c:4818 +#: storage/lmgr/predicate.c:4099 storage/lmgr/predicate.c:4135 +#: storage/lmgr/predicate.c:4168 storage/lmgr/predicate.c:4176 +#: storage/lmgr/predicate.c:4215 storage/lmgr/predicate.c:4457 +#: storage/lmgr/predicate.c:4794 storage/lmgr/predicate.c:4806 +#: storage/lmgr/predicate.c:4849 storage/lmgr/predicate.c:4887 #, c-format msgid "could not serialize access due to read/write dependencies among transactions" msgstr "no se pudo serializar el acceso debido a dependencias read/write entre transacciones" -#: storage/lmgr/predicate.c:4032 storage/lmgr/predicate.c:4068 -#: storage/lmgr/predicate.c:4101 storage/lmgr/predicate.c:4109 -#: storage/lmgr/predicate.c:4148 storage/lmgr/predicate.c:4390 -#: storage/lmgr/predicate.c:4727 storage/lmgr/predicate.c:4739 -#: storage/lmgr/predicate.c:4782 storage/lmgr/predicate.c:4820 +#: storage/lmgr/predicate.c:4101 storage/lmgr/predicate.c:4137 +#: storage/lmgr/predicate.c:4170 storage/lmgr/predicate.c:4178 +#: storage/lmgr/predicate.c:4217 storage/lmgr/predicate.c:4459 +#: storage/lmgr/predicate.c:4796 storage/lmgr/predicate.c:4808 +#: storage/lmgr/predicate.c:4851 storage/lmgr/predicate.c:4889 #, c-format msgid "The transaction might succeed if retried." msgstr "La transacción podría tener éxito si es reintentada." -#: storage/lmgr/proc.c:358 +#: storage/lmgr/proc.c:357 #, c-format msgid "number of requested standby connections exceeds max_wal_senders (currently %d)" msgstr "la cantidad de conexiones standby pedidas excede max_wal_senders (actualmente %d)" -#: storage/lmgr/proc.c:1337 -#, c-format -msgid "Process %d waits for %s on %s." -msgstr "El proceso %d espera %s en %s." - -#: storage/lmgr/proc.c:1348 -#, c-format -msgid "sending cancel to blocking autovacuum PID %d" -msgstr "enviando señal de cancelación a la tarea autovacuum bloqueante con PID %d" - -#: storage/lmgr/proc.c:1468 +#: storage/lmgr/proc.c:1551 #, c-format msgid "process %d avoided deadlock for %s on %s by rearranging queue order after %ld.%03d ms" msgstr "el proceso %d evitó un deadlock para %s en %s reordenando la cola después de %ld.%03d ms" -#: storage/lmgr/proc.c:1483 +#: storage/lmgr/proc.c:1566 #, c-format msgid "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "el proceso %d detectó un deadlock mientras esperaba %s en %s después de %ld.%03d ms" -#: storage/lmgr/proc.c:1492 +#: storage/lmgr/proc.c:1575 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "el proceso %d aún espera %s en %s después de %ld.%03d ms" -#: storage/lmgr/proc.c:1499 +#: storage/lmgr/proc.c:1582 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "el proceso %d adquirió %s en %s después de %ld.%03d ms" -#: storage/lmgr/proc.c:1515 +#: storage/lmgr/proc.c:1599 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "el proceso %d no pudo adquirir %s en %s después de %ld.%03d ms" -#: storage/page/bufpage.c:145 +#: storage/page/bufpage.c:152 #, c-format msgid "page verification failed, calculated checksum %u but expected %u" msgstr "la suma de verificación falló, se calculó %u pero se esperaba %u" -#: storage/page/bufpage.c:209 storage/page/bufpage.c:503 -#: storage/page/bufpage.c:740 storage/page/bufpage.c:873 -#: storage/page/bufpage.c:969 storage/page/bufpage.c:1081 +#: storage/page/bufpage.c:217 storage/page/bufpage.c:739 +#: storage/page/bufpage.c:1066 storage/page/bufpage.c:1201 +#: storage/page/bufpage.c:1307 storage/page/bufpage.c:1419 #, c-format msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" msgstr "los punteros de página están corruptos: inferior = %u, superior = %u, especial = %u" -#: storage/page/bufpage.c:525 +#: storage/page/bufpage.c:768 #, c-format msgid "corrupted line pointer: %u" msgstr "puntero de ítem corrupto: %u" -#: storage/page/bufpage.c:552 storage/page/bufpage.c:924 +#: storage/page/bufpage.c:795 storage/page/bufpage.c:1259 #, c-format msgid "corrupted item lengths: total %u, available space %u" msgstr "los largos de ítem están corruptos: total %u, espacio disponible %u" -#: storage/page/bufpage.c:759 storage/page/bufpage.c:897 -#: storage/page/bufpage.c:985 storage/page/bufpage.c:1097 +#: storage/page/bufpage.c:1085 storage/page/bufpage.c:1226 +#: storage/page/bufpage.c:1323 storage/page/bufpage.c:1435 #, c-format msgid "corrupted line pointer: offset = %u, size = %u" msgstr "puntero de ítem corrupto: desplazamiento = %u, tamaño = %u" -#: storage/smgr/md.c:333 storage/smgr/md.c:836 -#, c-format -msgid "could not truncate file \"%s\": %m" -msgstr "no se pudo truncar el archivo «%s»: %m" - -#: storage/smgr/md.c:407 +#: storage/smgr/md.c:434 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "no se pudo extender el archivo «%s» más allá de %u bloques" -#: storage/smgr/md.c:422 +#: storage/smgr/md.c:449 #, c-format msgid "could not extend file \"%s\": %m" msgstr "no se pudo extender el archivo «%s»: %m" -#: storage/smgr/md.c:424 storage/smgr/md.c:431 storage/smgr/md.c:719 +#: storage/smgr/md.c:451 storage/smgr/md.c:458 storage/smgr/md.c:746 #, c-format msgid "Check free disk space." msgstr "Verifique el espacio libre en disco." -#: storage/smgr/md.c:428 +#: storage/smgr/md.c:455 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "no se pudo extender el archivo «%s»: sólo se escribieron %d de %d bytes en el bloque %u" -#: storage/smgr/md.c:640 +#: storage/smgr/md.c:667 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "no se pudo leer el bloque %u del archivo «%s»: %m" -#: storage/smgr/md.c:656 +#: storage/smgr/md.c:683 #, c-format msgid "could not read block %u in file \"%s\": read only %d of %d bytes" msgstr "no se pudo leer el bloque %u del archivo «%s»: se leyeron sólo %d de %d bytes" -#: storage/smgr/md.c:710 +#: storage/smgr/md.c:737 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "no se pudo escribir el bloque %u en el archivo «%s»: %m" -#: storage/smgr/md.c:715 +#: storage/smgr/md.c:742 #, c-format msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "no se pudo escribir el bloque %u en el archivo «%s»: se escribieron sólo %d de %d bytes" -#: storage/smgr/md.c:807 +#: storage/smgr/md.c:836 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "no se pudo truncar el archivo «%s» a %u bloques: es de sólo %u bloques ahora" -#: storage/smgr/md.c:862 +#: storage/smgr/md.c:891 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "no se pudo truncar el archivo «%s» a %u bloques: %m" -#: storage/smgr/md.c:957 -#, c-format -msgid "could not forward fsync request because request queue is full" -msgstr "no se pudo enviar una petición fsync porque la cola de peticiones está llena" - -#: storage/smgr/md.c:1256 +#: storage/smgr/md.c:1285 #, c-format msgid "could not open file \"%s\" (target block %u): previous segment is only %u blocks" msgstr "no se pudo abrir el archivo «%s» (bloque buscado %u): el segmento previo sólo tiene %u bloques" -#: storage/smgr/md.c:1270 +#: storage/smgr/md.c:1299 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "no se pudo abrir el archivo «%s» (bloque buscado %u): %m" -#: storage/sync/sync.c:401 -#, c-format -msgid "could not fsync file \"%s\" but retrying: %m" -msgstr "no se pudo sincronizar (fsync) archivo «%s» pero reintentando: %m" - -#: tcop/fastpath.c:109 tcop/fastpath.c:461 tcop/fastpath.c:591 +#: tcop/fastpath.c:148 #, c-format -msgid "invalid argument size %d in function call message" -msgstr "el tamaño de argumento %d no es válido en el mensaje de llamada a función" +msgid "cannot call function %s via fastpath interface" +msgstr "" -#: tcop/fastpath.c:307 +#: tcop/fastpath.c:233 #, c-format msgid "fastpath function call: \"%s\" (OID %u)" msgstr "llamada a función fastpath: «%s» (OID %u)" -#: tcop/fastpath.c:389 tcop/postgres.c:1323 tcop/postgres.c:1581 -#: tcop/postgres.c:2013 tcop/postgres.c:2250 +#: tcop/fastpath.c:312 tcop/postgres.c:1298 tcop/postgres.c:1556 +#: tcop/postgres.c:2015 tcop/postgres.c:2252 #, c-format msgid "duration: %s ms" msgstr "duración: %s ms" -#: tcop/fastpath.c:393 +#: tcop/fastpath.c:316 #, c-format msgid "duration: %s ms fastpath function call: \"%s\" (OID %u)" msgstr "duración: %s ms llamada a función fastpath: «%s» (OID %u)" -#: tcop/fastpath.c:429 tcop/fastpath.c:556 +#: tcop/fastpath.c:352 #, c-format msgid "function call message contains %d arguments but function requires %d" msgstr "el mensaje de llamada a función contiene %d argumentos pero la función requiere %d" -#: tcop/fastpath.c:437 +#: tcop/fastpath.c:360 #, c-format msgid "function call message contains %d argument formats but %d arguments" msgstr "el mensaje de llamada a función contiene %d formatos de argumento pero %d argumentos" -#: tcop/fastpath.c:524 tcop/fastpath.c:607 +#: tcop/fastpath.c:384 #, c-format -msgid "incorrect binary data format in function argument %d" -msgstr "el formato de datos binarios es incorrecto en argumento %d a función" +msgid "invalid argument size %d in function call message" +msgstr "el tamaño de argumento %d no es válido en el mensaje de llamada a función" -#: tcop/postgres.c:355 tcop/postgres.c:391 tcop/postgres.c:418 +#: tcop/fastpath.c:447 #, c-format -msgid "unexpected EOF on client connection" -msgstr "se encontró fin de archivo inesperado en la conexión del cliente" +msgid "incorrect binary data format in function argument %d" +msgstr "el formato de datos binarios es incorrecto en argumento %d a función" -#: tcop/postgres.c:441 tcop/postgres.c:453 tcop/postgres.c:464 -#: tcop/postgres.c:476 tcop/postgres.c:4539 +#: tcop/postgres.c:446 tcop/postgres.c:4716 #, c-format msgid "invalid frontend message type %d" msgstr "el tipo de mensaje de frontend %d no es válido" -#: tcop/postgres.c:1042 +#: tcop/postgres.c:1015 #, c-format msgid "statement: %s" msgstr "sentencia: %s" -#: tcop/postgres.c:1328 +#: tcop/postgres.c:1303 #, c-format msgid "duration: %s ms statement: %s" msgstr "duración: %s ms sentencia: %s" -#: tcop/postgres.c:1377 -#, c-format -msgid "parse %s: %s" -msgstr "parse %s: %s" - -#: tcop/postgres.c:1434 +#: tcop/postgres.c:1409 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "no se pueden insertar múltiples órdenes en una sentencia preparada" -#: tcop/postgres.c:1586 +#: tcop/postgres.c:1561 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "duración: %s ms parse: %s: %s" -#: tcop/postgres.c:1633 -#, c-format -msgid "bind %s to %s" -msgstr "bind %s a %s" - -#: tcop/postgres.c:1652 tcop/postgres.c:2516 +#: tcop/postgres.c:1627 tcop/postgres.c:2567 #, c-format msgid "unnamed prepared statement does not exist" msgstr "no existe una sentencia preparada sin nombre" -#: tcop/postgres.c:1693 +#: tcop/postgres.c:1668 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "el mensaje de enlace (bind) tiene %d formatos de parámetro pero %d parámetros" -#: tcop/postgres.c:1699 +#: tcop/postgres.c:1674 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "el mensaje de enlace (bind) entrega %d parámetros, pero la sentencia preparada «%s» requiere %d" -#: tcop/postgres.c:1897 +#: tcop/postgres.c:1893 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "el formato de datos binarios es incorrecto en el parámetro de enlace %d" -#: tcop/postgres.c:2018 +#: tcop/postgres.c:2020 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "duración: %s ms bind %s%s%s: %s" -#: tcop/postgres.c:2068 tcop/postgres.c:2600 +#: tcop/postgres.c:2070 tcop/postgres.c:2651 #, c-format msgid "portal \"%s\" does not exist" msgstr "no existe el portal «%s»" -#: tcop/postgres.c:2153 +#: tcop/postgres.c:2155 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2155 tcop/postgres.c:2258 +#: tcop/postgres.c:2157 tcop/postgres.c:2260 msgid "execute fetch from" msgstr "ejecutar fetch desde" -#: tcop/postgres.c:2156 tcop/postgres.c:2259 +#: tcop/postgres.c:2158 tcop/postgres.c:2261 msgid "execute" msgstr "ejecutar" -#: tcop/postgres.c:2255 +#: tcop/postgres.c:2257 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "duración: %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2401 +#: tcop/postgres.c:2403 #, c-format msgid "prepare: %s" msgstr "prepare: %s" -#: tcop/postgres.c:2426 +#: tcop/postgres.c:2428 #, c-format msgid "parameters: %s" msgstr "parámetros: %s" -#: tcop/postgres.c:2441 +#: tcop/postgres.c:2443 #, c-format msgid "abort reason: recovery conflict" msgstr "razón para abortar: conflicto en la recuperación" -#: tcop/postgres.c:2457 +#: tcop/postgres.c:2459 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "El usuario mantuvo el búfer compartido «clavado» por demasiado tiempo." -#: tcop/postgres.c:2460 +#: tcop/postgres.c:2462 #, c-format msgid "User was holding a relation lock for too long." msgstr "El usuario mantuvo una relación bloqueada por demasiado tiempo." -#: tcop/postgres.c:2463 +#: tcop/postgres.c:2465 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "El usuario estaba o pudo haber estado usando un tablespace que debía ser eliminado." -#: tcop/postgres.c:2466 +#: tcop/postgres.c:2468 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "La consulta del usuario pudo haber necesitado examinar versiones de tuplas que debían eliminarse." -#: tcop/postgres.c:2472 +#: tcop/postgres.c:2474 #, c-format msgid "User was connected to a database that must be dropped." msgstr "El usuario estaba conectado a una base de datos que debía ser eliminada." -#: tcop/postgres.c:2796 +#: tcop/postgres.c:2513 +#, fuzzy, c-format +#| msgid "there is no parameter $%d" +msgid "portal \"%s\" parameter $%d = %s" +msgstr "no hay parámetro $%d" + +#: tcop/postgres.c:2516 +#, fuzzy, c-format +#| msgid "there is no parameter $%d" +msgid "portal \"%s\" parameter $%d" +msgstr "no hay parámetro $%d" + +#: tcop/postgres.c:2522 +#, fuzzy, c-format +#| msgid "unrecognized Snowball parameter: \"%s\"" +msgid "unnamed portal parameter $%d = %s" +msgstr "parámetro Snowball no reconocido: «%s»" + +#: tcop/postgres.c:2525 +#, fuzzy, c-format +#| msgid "no value found for parameter %d" +msgid "unnamed portal parameter $%d" +msgstr "no se encontró un valor para parámetro %d" + +#: tcop/postgres.c:2871 +#, fuzzy, c-format +#| msgid "terminating connection due to unexpected postmaster exit" +msgid "terminating connection because of unexpected SIGQUIT signal" +msgstr "terminando la conexión debido al término inesperado de postmaster" + +#: tcop/postgres.c:2877 #, c-format msgid "terminating connection because of crash of another server process" msgstr "terminando la conexión debido a una falla en otro proceso servidor" -#: tcop/postgres.c:2797 +#: tcop/postgres.c:2878 #, c-format msgid "The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory." msgstr "Postmaster ha ordenado que este proceso servidor cancele la transacción en curso y finalice la conexión, porque otro proceso servidor ha terminado anormalmente y podría haber corrompido la memoria compartida." -#: tcop/postgres.c:2801 tcop/postgres.c:3107 +#: tcop/postgres.c:2882 tcop/postgres.c:3243 #, c-format msgid "In a moment you should be able to reconnect to the database and repeat your command." msgstr "Dentro de un momento debería poder reconectarse y repetir la consulta." -#: tcop/postgres.c:2883 +#: tcop/postgres.c:2889 +#, fuzzy, c-format +#| msgid "terminating connection due to administrator command" +msgid "terminating connection due to immediate shutdown command" +msgstr "terminando la conexión debido a una orden del administrador" + +#: tcop/postgres.c:2975 #, c-format msgid "floating-point exception" msgstr "excepción de coma flotante" -#: tcop/postgres.c:2884 +#: tcop/postgres.c:2976 #, c-format msgid "An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero." msgstr "Se ha recibido una señal de una operación de coma flotante no válida. Esto puede significar un resultado fuera de rango o una operación no válida, como una división por cero." -#: tcop/postgres.c:3037 +#: tcop/postgres.c:3147 #, c-format msgid "canceling authentication due to timeout" msgstr "cancelando la autentificación debido a que se agotó el tiempo de espera" -#: tcop/postgres.c:3041 +#: tcop/postgres.c:3151 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "terminando el proceso autovacuum debido a una orden del administrador" -#: tcop/postgres.c:3045 +#: tcop/postgres.c:3155 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "terminando el proceso de replicación lógica debido a una orden del administrador" -#: tcop/postgres.c:3049 -#, c-format -msgid "logical replication launcher shutting down" -msgstr "lanzador de replicación lógica apagándose" - -#: tcop/postgres.c:3062 tcop/postgres.c:3072 tcop/postgres.c:3105 +#: tcop/postgres.c:3172 tcop/postgres.c:3182 tcop/postgres.c:3241 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "terminando la conexión debido a un conflicto con la recuperación" -#: tcop/postgres.c:3078 +#: tcop/postgres.c:3193 #, c-format msgid "terminating connection due to administrator command" msgstr "terminando la conexión debido a una orden del administrador" -#: tcop/postgres.c:3088 +#: tcop/postgres.c:3224 #, c-format msgid "connection to client lost" msgstr "se ha perdido la conexión al cliente" -#: tcop/postgres.c:3154 +#: tcop/postgres.c:3294 #, c-format msgid "canceling statement due to lock timeout" msgstr "cancelando la sentencia debido a que se agotó el tiempo de espera de candados (locks)" -#: tcop/postgres.c:3161 +#: tcop/postgres.c:3301 #, c-format msgid "canceling statement due to statement timeout" msgstr "cancelando la sentencia debido a que se agotó el tiempo de espera de sentencias" -#: tcop/postgres.c:3168 +#: tcop/postgres.c:3308 #, c-format msgid "canceling autovacuum task" msgstr "cancelando tarea de autovacuum" -#: tcop/postgres.c:3191 +#: tcop/postgres.c:3331 #, c-format msgid "canceling statement due to user request" msgstr "cancelando la sentencia debido a una petición del usuario" -#: tcop/postgres.c:3201 +#: tcop/postgres.c:3345 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "terminando la conexión debido a que se agotó el tiempo de espera para transacciones abiertas inactivas" -#: tcop/postgres.c:3318 +#: tcop/postgres.c:3356 +#, fuzzy, c-format +#| msgid "terminating connection due to idle-in-transaction timeout" +msgid "terminating connection due to idle-session timeout" +msgstr "terminando la conexión debido a que se agotó el tiempo de espera para transacciones abiertas inactivas" + +#: tcop/postgres.c:3475 #, c-format msgid "stack depth limit exceeded" msgstr "límite de profundidad de stack alcanzado" -#: tcop/postgres.c:3319 +#: tcop/postgres.c:3476 #, c-format msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." msgstr "Incremente el parámetro de configuración «max_stack_depth» (actualmente %dkB), después de asegurarse que el límite de profundidad de stack de la plataforma es adecuado." -#: tcop/postgres.c:3382 +#: tcop/postgres.c:3539 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "«max_stack_depth» no debe exceder %ldkB." -#: tcop/postgres.c:3384 +#: tcop/postgres.c:3541 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "Incremente el límite de profundidad del stack del sistema usando «ulimit -s» o el equivalente de su sistema." -#: tcop/postgres.c:3744 +#: tcop/postgres.c:3897 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "argumentos de línea de órdenes no válidos para proceso servidor: %s" -#: tcop/postgres.c:3745 tcop/postgres.c:3751 +#: tcop/postgres.c:3898 tcop/postgres.c:3904 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Pruebe «%s --help» para mayor información." -#: tcop/postgres.c:3749 +#: tcop/postgres.c:3902 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: argumento de línea de órdenes no válido: %s" -#: tcop/postgres.c:3811 +#: tcop/postgres.c:3965 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: no se ha especificado base de datos ni usuario" -#: tcop/postgres.c:4447 +#: tcop/postgres.c:4618 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "subtipo %d de mensaje CLOSE no válido" -#: tcop/postgres.c:4482 +#: tcop/postgres.c:4653 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "subtipo %d de mensaje DESCRIBE no válido" -#: tcop/postgres.c:4560 +#: tcop/postgres.c:4737 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "la invocación «fastpath» de funciones no está soportada en conexiones de replicación" -#: tcop/postgres.c:4564 +#: tcop/postgres.c:4741 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "el protocolo extendido de consultas no está soportado en conexiones de replicación" -#: tcop/postgres.c:4741 +#: tcop/postgres.c:4918 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "desconexión: duración de sesión: %d:%02d:%02d.%03d usuario=%s base=%s host=%s%s%s" @@ -20443,35 +22011,35 @@ msgid "Declare it with SCROLL option to enable backward scan." msgstr "Declárelo con SCROLL para permitirle desplazar hacia atrás." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:413 +#: tcop/utility.c:414 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "no se puede ejecutar %s en una transacción de sólo lectura" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:431 +#: tcop/utility.c:432 #, c-format msgid "cannot execute %s during a parallel operation" msgstr "no se puede ejecutar %s durante una operación paralela" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:450 +#: tcop/utility.c:451 #, c-format msgid "cannot execute %s during recovery" msgstr "no se puede ejecutar %s durante la recuperación" #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:468 +#: tcop/utility.c:469 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "no se puede ejecutar %s durante una operación restringida por seguridad" -#: tcop/utility.c:912 +#: tcop/utility.c:913 #, c-format msgid "must be superuser to do CHECKPOINT" msgstr "debe ser superusuario para ejecutar CHECKPOINT" -#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:620 +#: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:615 #, c-format msgid "multiple DictFile parameters" msgstr "parámetro DictFile duplicado" @@ -20491,7 +22059,7 @@ msgstr "parámetro Ispell no reconocido: «%s»" msgid "missing AffFile parameter" msgstr "falta un parámetro AffFile" -#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:644 +#: tsearch/dict_ispell.c:102 tsearch/dict_thesaurus.c:639 #, c-format msgid "missing DictFile parameter" msgstr "falta un parámetro DictFile" @@ -20541,66 +22109,66 @@ msgstr "fin de línea o lexema inesperado" msgid "unexpected end of line" msgstr "fin de línea inesperado" -#: tsearch/dict_thesaurus.c:297 +#: tsearch/dict_thesaurus.c:292 #, c-format msgid "too many lexemes in thesaurus entry" msgstr "demasiados lexemas en la entrada del tesauro" -#: tsearch/dict_thesaurus.c:421 +#: tsearch/dict_thesaurus.c:416 #, c-format msgid "thesaurus sample word \"%s\" isn't recognized by subdictionary (rule %d)" msgstr "la palabra de muestra «%s» del tesauro no es reconocido por el subdiccionario (regla %d)" # XXX -- stopword? -#: tsearch/dict_thesaurus.c:427 +#: tsearch/dict_thesaurus.c:422 #, c-format msgid "thesaurus sample word \"%s\" is a stop word (rule %d)" msgstr "la palabra de muestra «%s» del tesauro es una stopword (regla %d)" # XXX -- stopword? -#: tsearch/dict_thesaurus.c:430 +#: tsearch/dict_thesaurus.c:425 #, c-format msgid "Use \"?\" to represent a stop word within a sample phrase." msgstr "Use «?» para representar una stopword en una frase muestra." # XXX -- stopword? -#: tsearch/dict_thesaurus.c:572 +#: tsearch/dict_thesaurus.c:567 #, c-format msgid "thesaurus substitute word \"%s\" is a stop word (rule %d)" msgstr "la palabra sustituta «%s» del tesauro es una stopword (regla %d)" -#: tsearch/dict_thesaurus.c:579 +#: tsearch/dict_thesaurus.c:574 #, c-format msgid "thesaurus substitute word \"%s\" isn't recognized by subdictionary (rule %d)" msgstr "la palabra sustituta «%s» del tesauro no es reconocida por el subdiccionario (regla %d)" -#: tsearch/dict_thesaurus.c:591 +#: tsearch/dict_thesaurus.c:586 #, c-format msgid "thesaurus substitute phrase is empty (rule %d)" msgstr "la frase sustituta del tesauro está vacía (regla %d)" -#: tsearch/dict_thesaurus.c:629 +#: tsearch/dict_thesaurus.c:624 #, c-format msgid "multiple Dictionary parameters" msgstr "parámetro Dictionary duplicado" -#: tsearch/dict_thesaurus.c:636 +#: tsearch/dict_thesaurus.c:631 #, c-format msgid "unrecognized Thesaurus parameter: \"%s\"" msgstr "parámetro no reconocido de tesauro: «%s»" -#: tsearch/dict_thesaurus.c:648 +#: tsearch/dict_thesaurus.c:643 #, c-format msgid "missing Dictionary parameter" msgstr "falta un paramétro Dictionary" #: tsearch/spell.c:380 tsearch/spell.c:397 tsearch/spell.c:406 -#: tsearch/spell.c:1036 +#: tsearch/spell.c:1062 #, c-format msgid "invalid affix flag \"%s\"" msgstr "marca de afijo «%s» no válida" -#: tsearch/spell.c:384 tsearch/spell.c:1040 +#: tsearch/spell.c:384 tsearch/spell.c:1066 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "la marca de afijo «%s» fuera de rango" @@ -20620,59 +22188,53 @@ msgstr "marca de afijo «%s» no válida con el valor de marca «long»" msgid "could not open dictionary file \"%s\": %m" msgstr "no se pudo abrir el archivo de diccionario «%s»: %m" -#: tsearch/spell.c:742 utils/adt/regexp.c:208 +#: tsearch/spell.c:763 utils/adt/regexp.c:208 #, c-format msgid "invalid regular expression: %s" msgstr "la expresión regular no es válida: %s" -#: tsearch/spell.c:956 tsearch/spell.c:973 tsearch/spell.c:990 -#: tsearch/spell.c:1007 tsearch/spell.c:1072 gram.y:15993 gram.y:16010 -#, c-format -msgid "syntax error" -msgstr "error de sintaxis" - -#: tsearch/spell.c:1163 tsearch/spell.c:1175 tsearch/spell.c:1734 -#: tsearch/spell.c:1739 tsearch/spell.c:1744 +#: tsearch/spell.c:1189 tsearch/spell.c:1201 tsearch/spell.c:1760 +#: tsearch/spell.c:1765 tsearch/spell.c:1770 #, c-format msgid "invalid affix alias \"%s\"" msgstr "alias de afijo «%s» no válido" -#: tsearch/spell.c:1216 tsearch/spell.c:1287 tsearch/spell.c:1436 +#: tsearch/spell.c:1242 tsearch/spell.c:1313 tsearch/spell.c:1462 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "no se pudo abrir el archivo de afijos «%s»: %m" -#: tsearch/spell.c:1270 +#: tsearch/spell.c:1296 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "el diccionario Ispell sólo permite los valores «default», «long» y «num»" -#: tsearch/spell.c:1314 +#: tsearch/spell.c:1340 #, c-format msgid "invalid number of flag vector aliases" msgstr "número no válido de alias de opciones" -#: tsearch/spell.c:1337 +#: tsearch/spell.c:1363 #, c-format msgid "number of aliases exceeds specified number %d" msgstr "el número de aliases excede el número especificado %d" -#: tsearch/spell.c:1552 +#: tsearch/spell.c:1578 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "el archivo de «affix» contiene órdenes en estilos antiguo y nuevo" -#: tsearch/to_tsany.c:185 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 +#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "la cadena es demasiado larga para tsvector (%d bytes, máximo %d bytes)" -#: tsearch/ts_locale.c:185 +#: tsearch/ts_locale.c:227 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "línea %d del archivo de configuración «%s»: «%s»" -#: tsearch/ts_locale.c:302 +#: tsearch/ts_locale.c:307 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "conversión desde un wchar_t a la codificación del servidor falló: %m" @@ -20704,152 +22266,152 @@ msgstr "no se pudo abrir el archivo de stopwords «%s»: %m" msgid "text search parser does not support headline creation" msgstr "el analizador de búsqueda en texto no soporta creación de encabezados (headline)" -#: tsearch/wparser_def.c:2585 +#: tsearch/wparser_def.c:2578 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "parámetro de encabezado (headline) no reconocido: «%s»" -#: tsearch/wparser_def.c:2604 +#: tsearch/wparser_def.c:2597 #, c-format msgid "MinWords should be less than MaxWords" msgstr "MinWords debería ser menor que MaxWords" -#: tsearch/wparser_def.c:2608 +#: tsearch/wparser_def.c:2601 #, c-format msgid "MinWords should be positive" msgstr "MinWords debería ser positivo" -#: tsearch/wparser_def.c:2612 +#: tsearch/wparser_def.c:2605 #, c-format msgid "ShortWord should be >= 0" msgstr "ShortWord debería ser >= 0" -#: tsearch/wparser_def.c:2616 +#: tsearch/wparser_def.c:2609 #, c-format msgid "MaxFragments should be >= 0" msgstr "MaxFragments debería ser >= 0" -#: utils/adt/acl.c:172 utils/adt/name.c:93 +#: utils/adt/acl.c:165 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "el identificador es demasiado largo" -#: utils/adt/acl.c:173 utils/adt/name.c:94 +#: utils/adt/acl.c:166 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "El identificador debe ser menor a %d caracteres." -#: utils/adt/acl.c:256 +#: utils/adt/acl.c:249 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "palabra clave no reconocida: «%s»" -#: utils/adt/acl.c:257 +#: utils/adt/acl.c:250 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "Palabra clave de ACL debe ser «group» o «user»." -#: utils/adt/acl.c:262 +#: utils/adt/acl.c:255 #, c-format msgid "missing name" msgstr "falta un nombre" -#: utils/adt/acl.c:263 +#: utils/adt/acl.c:256 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "Debe venir un nombre después de una palabra clave «group» o «user»." -#: utils/adt/acl.c:269 +#: utils/adt/acl.c:262 #, c-format msgid "missing \"=\" sign" msgstr "falta un signo «=»" -#: utils/adt/acl.c:322 +#: utils/adt/acl.c:315 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "carácter de modo no válido: debe ser uno de «%s»" -#: utils/adt/acl.c:344 +#: utils/adt/acl.c:337 #, c-format msgid "a name must follow the \"/\" sign" msgstr "debe venir un nombre después del signo «/»" -#: utils/adt/acl.c:352 +#: utils/adt/acl.c:345 #, c-format msgid "defaulting grantor to user ID %u" msgstr "usando el cedente por omisión con ID %u" -#: utils/adt/acl.c:538 +#: utils/adt/acl.c:531 #, c-format msgid "ACL array contains wrong data type" msgstr "el array ACL contiene tipo de datos incorrecto" -#: utils/adt/acl.c:542 +#: utils/adt/acl.c:535 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "los array de ACL debe ser unidimensional" -#: utils/adt/acl.c:546 +#: utils/adt/acl.c:539 #, c-format msgid "ACL arrays must not contain null values" msgstr "los arrays de ACL no pueden contener valores nulos" -#: utils/adt/acl.c:570 +#: utils/adt/acl.c:563 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "basura extra al final de la especificación de la ACL" -#: utils/adt/acl.c:1205 +#: utils/adt/acl.c:1198 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "la opción de grant no puede ser otorgada de vuelta a quien la otorgó" -#: utils/adt/acl.c:1266 +#: utils/adt/acl.c:1259 #, c-format msgid "dependent privileges exist" msgstr "existen privilegios dependientes" -#: utils/adt/acl.c:1267 +#: utils/adt/acl.c:1260 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Use CASCADE para revocarlos también." -#: utils/adt/acl.c:1521 +#: utils/adt/acl.c:1514 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert ya no está soportado" -#: utils/adt/acl.c:1531 +#: utils/adt/acl.c:1524 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove ya no está soportado" -#: utils/adt/acl.c:1617 utils/adt/acl.c:1671 +#: utils/adt/acl.c:1610 utils/adt/acl.c:1664 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "tipo de privilegio no reconocido: «%s»" -#: utils/adt/acl.c:3471 utils/adt/regproc.c:103 utils/adt/regproc.c:278 +#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:276 #, c-format msgid "function \"%s\" does not exist" msgstr "no existe la función «%s»" -#: utils/adt/acl.c:4943 +#: utils/adt/acl.c:4898 #, c-format msgid "must be member of role \"%s\"" msgstr "debe ser miembro del rol «%s»" -#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:933 -#: utils/adt/arrayfuncs.c:1533 utils/adt/arrayfuncs.c:3236 -#: utils/adt/arrayfuncs.c:3376 utils/adt/arrayfuncs.c:5911 -#: utils/adt/arrayfuncs.c:6252 utils/adt/arrayutils.c:93 -#: utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 +#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:935 +#: utils/adt/arrayfuncs.c:1543 utils/adt/arrayfuncs.c:3262 +#: utils/adt/arrayfuncs.c:3404 utils/adt/arrayfuncs.c:5945 +#: utils/adt/arrayfuncs.c:6286 utils/adt/arrayutils.c:94 +#: utils/adt/arrayutils.c:103 utils/adt/arrayutils.c:110 #, c-format msgid "array size exceeds the maximum allowed (%d)" msgstr "el tamaño del array excede el máximo permitido (%d)" -#: utils/adt/array_userfuncs.c:80 utils/adt/array_userfuncs.c:466 -#: utils/adt/array_userfuncs.c:546 utils/adt/json.c:645 utils/adt/json.c:740 +#: utils/adt/array_userfuncs.c:80 utils/adt/array_userfuncs.c:467 +#: utils/adt/array_userfuncs.c:547 utils/adt/json.c:645 utils/adt/json.c:740 #: utils/adt/json.c:778 utils/adt/jsonb.c:1115 utils/adt/jsonb.c:1144 #: utils/adt/jsonb.c:1538 utils/adt/jsonb.c:1702 utils/adt/jsonb.c:1712 #, c-format @@ -20862,16 +22424,16 @@ msgid "input data type is not an array" msgstr "el tipo de entrada no es un array" #: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 -#: utils/adt/arrayfuncs.c:1336 utils/adt/float.c:1243 utils/adt/float.c:1317 -#: utils/adt/float.c:3960 utils/adt/float.c:3974 utils/adt/int.c:759 -#: utils/adt/int.c:781 utils/adt/int.c:795 utils/adt/int.c:809 -#: utils/adt/int.c:840 utils/adt/int.c:861 utils/adt/int.c:978 -#: utils/adt/int.c:992 utils/adt/int.c:1006 utils/adt/int.c:1039 -#: utils/adt/int.c:1053 utils/adt/int.c:1067 utils/adt/int.c:1098 -#: utils/adt/int.c:1180 utils/adt/int.c:1244 utils/adt/int.c:1312 -#: utils/adt/int.c:1318 utils/adt/int8.c:1292 utils/adt/numeric.c:1559 -#: utils/adt/numeric.c:3435 utils/adt/varbit.c:1188 utils/adt/varbit.c:1576 -#: utils/adt/varlena.c:1087 utils/adt/varlena.c:3377 +#: utils/adt/float.c:1233 utils/adt/float.c:1307 utils/adt/float.c:4052 +#: utils/adt/float.c:4066 utils/adt/int.c:757 utils/adt/int.c:779 +#: utils/adt/int.c:793 utils/adt/int.c:807 utils/adt/int.c:838 +#: utils/adt/int.c:859 utils/adt/int.c:976 utils/adt/int.c:990 +#: utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 +#: utils/adt/int.c:1065 utils/adt/int.c:1096 utils/adt/int.c:1178 +#: utils/adt/int.c:1242 utils/adt/int.c:1310 utils/adt/int.c:1316 +#: utils/adt/int8.c:1299 utils/adt/numeric.c:1776 utils/adt/numeric.c:4207 +#: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1121 +#: utils/adt/varlena.c:3433 #, c-format msgid "integer out of range" msgstr "entero fuera de rango" @@ -20908,12 +22470,12 @@ msgstr "Los arrays con elementos de diferentes dimensiones son incompatibles par msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "Los arrays con diferentes dimensiones son incompatibles para la concatenación." -#: utils/adt/array_userfuncs.c:662 utils/adt/array_userfuncs.c:814 +#: utils/adt/array_userfuncs.c:663 utils/adt/array_userfuncs.c:815 #, c-format msgid "searching for elements in multidimensional arrays is not supported" msgstr "no está soportada la búsqueda de elementos en arrays multidimensionales" -#: utils/adt/array_userfuncs.c:686 +#: utils/adt/array_userfuncs.c:687 #, c-format msgid "initial position must not be null" msgstr "la posición inicial no debe ser null" @@ -20922,14 +22484,14 @@ msgstr "la posición inicial no debe ser null" #: utils/adt/arrayfuncs.c:295 utils/adt/arrayfuncs.c:317 #: utils/adt/arrayfuncs.c:332 utils/adt/arrayfuncs.c:346 #: utils/adt/arrayfuncs.c:352 utils/adt/arrayfuncs.c:359 -#: utils/adt/arrayfuncs.c:490 utils/adt/arrayfuncs.c:506 -#: utils/adt/arrayfuncs.c:517 utils/adt/arrayfuncs.c:532 -#: utils/adt/arrayfuncs.c:553 utils/adt/arrayfuncs.c:583 -#: utils/adt/arrayfuncs.c:590 utils/adt/arrayfuncs.c:598 -#: utils/adt/arrayfuncs.c:632 utils/adt/arrayfuncs.c:655 -#: utils/adt/arrayfuncs.c:675 utils/adt/arrayfuncs.c:787 -#: utils/adt/arrayfuncs.c:796 utils/adt/arrayfuncs.c:826 -#: utils/adt/arrayfuncs.c:841 utils/adt/arrayfuncs.c:894 +#: utils/adt/arrayfuncs.c:492 utils/adt/arrayfuncs.c:508 +#: utils/adt/arrayfuncs.c:519 utils/adt/arrayfuncs.c:534 +#: utils/adt/arrayfuncs.c:555 utils/adt/arrayfuncs.c:585 +#: utils/adt/arrayfuncs.c:592 utils/adt/arrayfuncs.c:600 +#: utils/adt/arrayfuncs.c:634 utils/adt/arrayfuncs.c:657 +#: utils/adt/arrayfuncs.c:677 utils/adt/arrayfuncs.c:789 +#: utils/adt/arrayfuncs.c:798 utils/adt/arrayfuncs.c:828 +#: utils/adt/arrayfuncs.c:843 utils/adt/arrayfuncs.c:896 #, c-format msgid "malformed array literal: \"%s\"" msgstr "literal de array mal formado: «%s»" @@ -20949,8 +22511,8 @@ msgstr "Falta un valor de dimensión de array." msgid "Missing \"%s\" after array dimensions." msgstr "Falta «%s» luego de las dimensiones de array." -#: utils/adt/arrayfuncs.c:305 utils/adt/arrayfuncs.c:2884 -#: utils/adt/arrayfuncs.c:2916 utils/adt/arrayfuncs.c:2931 +#: utils/adt/arrayfuncs.c:305 utils/adt/arrayfuncs.c:2909 +#: utils/adt/arrayfuncs.c:2941 utils/adt/arrayfuncs.c:2956 #, c-format msgid "upper bound cannot be less than lower bound" msgstr "el límite superior no puede ser menor que el límite inferior" @@ -20970,207 +22532,230 @@ msgstr "El contenido del array debe empezar con «{»." msgid "Specified array dimensions do not match array contents." msgstr "Las dimensiones del array especificadas no coinciden con el contenido del array." -#: utils/adt/arrayfuncs.c:491 utils/adt/arrayfuncs.c:518 -#: utils/adt/rangetypes.c:2181 utils/adt/rangetypes.c:2189 -#: utils/adt/rowtypes.c:210 utils/adt/rowtypes.c:218 +#: utils/adt/arrayfuncs.c:493 utils/adt/arrayfuncs.c:520 +#: utils/adt/multirangetypes.c:162 utils/adt/rangetypes.c:2310 +#: utils/adt/rangetypes.c:2318 utils/adt/rowtypes.c:211 +#: utils/adt/rowtypes.c:219 #, c-format msgid "Unexpected end of input." msgstr "Fin inesperado de la entrada." -#: utils/adt/arrayfuncs.c:507 utils/adt/arrayfuncs.c:554 -#: utils/adt/arrayfuncs.c:584 utils/adt/arrayfuncs.c:633 +#: utils/adt/arrayfuncs.c:509 utils/adt/arrayfuncs.c:556 +#: utils/adt/arrayfuncs.c:586 utils/adt/arrayfuncs.c:635 #, c-format msgid "Unexpected \"%c\" character." msgstr "Carácter «%c» inesperado." -#: utils/adt/arrayfuncs.c:533 utils/adt/arrayfuncs.c:656 +#: utils/adt/arrayfuncs.c:535 utils/adt/arrayfuncs.c:658 #, c-format msgid "Unexpected array element." msgstr "Elemento de array inesperado." -#: utils/adt/arrayfuncs.c:591 +#: utils/adt/arrayfuncs.c:593 #, c-format msgid "Unmatched \"%c\" character." msgstr "Carácter «%c» desemparejado." -#: utils/adt/arrayfuncs.c:599 utils/adt/jsonfuncs.c:2452 +#: utils/adt/arrayfuncs.c:601 utils/adt/jsonfuncs.c:2593 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "Los arrays multidimensionales deben tener sub-arrays con dimensiones coincidentes." -#: utils/adt/arrayfuncs.c:676 +#: utils/adt/arrayfuncs.c:678 #, c-format msgid "Junk after closing right brace." msgstr "Basura después de la llave derecha de cierre." -#: utils/adt/arrayfuncs.c:1298 utils/adt/arrayfuncs.c:3344 -#: utils/adt/arrayfuncs.c:5817 +#: utils/adt/arrayfuncs.c:1300 utils/adt/arrayfuncs.c:3370 +#: utils/adt/arrayfuncs.c:5849 #, c-format msgid "invalid number of dimensions: %d" msgstr "número incorrecto de dimensiones: %d" -#: utils/adt/arrayfuncs.c:1309 +#: utils/adt/arrayfuncs.c:1311 #, c-format msgid "invalid array flags" msgstr "opciones de array no válidas" -#: utils/adt/arrayfuncs.c:1317 +#: utils/adt/arrayfuncs.c:1333 #, c-format -msgid "wrong element type" -msgstr "el tipo de elemento es erróneo" +msgid "binary data has array element type %u (%s) instead of expected %u (%s)" +msgstr "" -#: utils/adt/arrayfuncs.c:1367 utils/adt/rangetypes.c:335 -#: utils/cache/lsyscache.c:2835 +#: utils/adt/arrayfuncs.c:1377 utils/adt/multirangetypes.c:443 +#: utils/adt/rangetypes.c:333 utils/cache/lsyscache.c:2905 #, c-format msgid "no binary input function available for type %s" msgstr "no hay una función binaria de entrada para el tipo %s" -#: utils/adt/arrayfuncs.c:1507 +#: utils/adt/arrayfuncs.c:1517 #, c-format msgid "improper binary format in array element %d" msgstr "el formato binario no es válido en elemento %d de array" -#: utils/adt/arrayfuncs.c:1588 utils/adt/rangetypes.c:340 -#: utils/cache/lsyscache.c:2868 +#: utils/adt/arrayfuncs.c:1598 utils/adt/multirangetypes.c:448 +#: utils/adt/rangetypes.c:338 utils/cache/lsyscache.c:2938 #, c-format msgid "no binary output function available for type %s" msgstr "no hay una función binaria de salida para el tipo %s" -#: utils/adt/arrayfuncs.c:2066 +#: utils/adt/arrayfuncs.c:2077 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "no está implementada la obtención de segmentos de arrays de largo fijo" -#: utils/adt/arrayfuncs.c:2244 utils/adt/arrayfuncs.c:2266 -#: utils/adt/arrayfuncs.c:2315 utils/adt/arrayfuncs.c:2551 -#: utils/adt/arrayfuncs.c:2862 utils/adt/arrayfuncs.c:5803 -#: utils/adt/arrayfuncs.c:5829 utils/adt/arrayfuncs.c:5840 +#: utils/adt/arrayfuncs.c:2255 utils/adt/arrayfuncs.c:2277 +#: utils/adt/arrayfuncs.c:2326 utils/adt/arrayfuncs.c:2565 +#: utils/adt/arrayfuncs.c:2887 utils/adt/arrayfuncs.c:5835 +#: utils/adt/arrayfuncs.c:5861 utils/adt/arrayfuncs.c:5872 #: utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 -#: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4340 utils/adt/jsonfuncs.c:4490 -#: utils/adt/jsonfuncs.c:4602 utils/adt/jsonfuncs.c:4648 +#: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4427 utils/adt/jsonfuncs.c:4580 +#: utils/adt/jsonfuncs.c:4692 utils/adt/jsonfuncs.c:4741 #, c-format msgid "wrong number of array subscripts" msgstr "número incorrecto de subíndices del array" -#: utils/adt/arrayfuncs.c:2249 utils/adt/arrayfuncs.c:2357 -#: utils/adt/arrayfuncs.c:2615 utils/adt/arrayfuncs.c:2921 +#: utils/adt/arrayfuncs.c:2260 utils/adt/arrayfuncs.c:2368 +#: utils/adt/arrayfuncs.c:2632 utils/adt/arrayfuncs.c:2946 #, c-format msgid "array subscript out of range" msgstr "subíndice de array fuera de rango" -#: utils/adt/arrayfuncs.c:2254 +#: utils/adt/arrayfuncs.c:2265 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "no se puede asignar un valor nulo a un elemento de un array de longitud fija" -#: utils/adt/arrayfuncs.c:2809 +#: utils/adt/arrayfuncs.c:2834 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "no están implementadas las actualizaciones en segmentos de arrays de largo fija" -#: utils/adt/arrayfuncs.c:2840 +#: utils/adt/arrayfuncs.c:2865 #, c-format msgid "array slice subscript must provide both boundaries" msgstr "los subíndices del segmento de array deben especificar ambos bordes" -#: utils/adt/arrayfuncs.c:2841 +#: utils/adt/arrayfuncs.c:2866 #, c-format msgid "When assigning to a slice of an empty array value, slice boundaries must be fully specified." msgstr "Cuando se asigna a un segmento de un array vacío, los bordes del segmento deben ser especificados completamente." -#: utils/adt/arrayfuncs.c:2852 utils/adt/arrayfuncs.c:2947 +#: utils/adt/arrayfuncs.c:2877 utils/adt/arrayfuncs.c:2973 #, c-format msgid "source array too small" msgstr "el array de origen es demasiado pequeño" -#: utils/adt/arrayfuncs.c:3500 +#: utils/adt/arrayfuncs.c:3528 #, c-format msgid "null array element not allowed in this context" msgstr "los arrays con elementos null no son permitidos en este contexto" -#: utils/adt/arrayfuncs.c:3602 utils/adt/arrayfuncs.c:3773 -#: utils/adt/arrayfuncs.c:4129 +#: utils/adt/arrayfuncs.c:3630 utils/adt/arrayfuncs.c:3801 +#: utils/adt/arrayfuncs.c:4157 #, c-format msgid "cannot compare arrays of different element types" msgstr "no se pueden comparar arrays con elementos de distintos tipos" -#: utils/adt/arrayfuncs.c:3951 utils/adt/rangetypes.c:1254 -#: utils/adt/rangetypes.c:1318 +#: utils/adt/arrayfuncs.c:3979 utils/adt/multirangetypes.c:2670 +#: utils/adt/multirangetypes.c:2742 utils/adt/rangetypes.c:1343 +#: utils/adt/rangetypes.c:1407 utils/adt/rowtypes.c:1858 #, c-format msgid "could not identify a hash function for type %s" msgstr "no se pudo identificar una función de hash para el tipo %s" -#: utils/adt/arrayfuncs.c:4044 +#: utils/adt/arrayfuncs.c:4072 utils/adt/rowtypes.c:1979 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "no se pudo identificar una función de hash extendida para el tipo %s" -#: utils/adt/arrayfuncs.c:5221 +#: utils/adt/arrayfuncs.c:5249 #, c-format msgid "data type %s is not an array type" msgstr "el tipo %s no es un array" -#: utils/adt/arrayfuncs.c:5276 +#: utils/adt/arrayfuncs.c:5304 #, c-format msgid "cannot accumulate null arrays" msgstr "no se pueden acumular arrays nulos" -#: utils/adt/arrayfuncs.c:5304 +#: utils/adt/arrayfuncs.c:5332 #, c-format msgid "cannot accumulate empty arrays" msgstr "no se pueden acumular arrays vacíos" -#: utils/adt/arrayfuncs.c:5331 utils/adt/arrayfuncs.c:5337 +#: utils/adt/arrayfuncs.c:5359 utils/adt/arrayfuncs.c:5365 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "no se pueden acumular arrays de distinta dimensionalidad" -#: utils/adt/arrayfuncs.c:5701 utils/adt/arrayfuncs.c:5741 +#: utils/adt/arrayfuncs.c:5733 utils/adt/arrayfuncs.c:5773 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "el array de dimensiones o el array de límites inferiores debe ser no nulo" -#: utils/adt/arrayfuncs.c:5804 utils/adt/arrayfuncs.c:5830 +#: utils/adt/arrayfuncs.c:5836 utils/adt/arrayfuncs.c:5862 #, c-format msgid "Dimension array must be one dimensional." msgstr "El array de dimensiones debe ser unidimensional." -#: utils/adt/arrayfuncs.c:5809 utils/adt/arrayfuncs.c:5835 +#: utils/adt/arrayfuncs.c:5841 utils/adt/arrayfuncs.c:5867 #, c-format msgid "dimension values cannot be null" msgstr "los valores de dimensión no pueden ser null" -#: utils/adt/arrayfuncs.c:5841 +#: utils/adt/arrayfuncs.c:5873 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "El array de límites inferiores tiene tamaño diferente que el array de dimensiones." -#: utils/adt/arrayfuncs.c:6117 +#: utils/adt/arrayfuncs.c:6151 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "la eliminación de elementos desde arrays multidimensionales no está soportada" -#: utils/adt/arrayfuncs.c:6394 +#: utils/adt/arrayfuncs.c:6428 #, c-format msgid "thresholds must be one-dimensional array" msgstr "los umbrales deben ser un array unidimensional" -#: utils/adt/arrayfuncs.c:6399 +#: utils/adt/arrayfuncs.c:6433 #, c-format msgid "thresholds array must not contain NULLs" msgstr "el array de umbrales no debe contener nulos" -#: utils/adt/arrayutils.c:209 +#: utils/adt/arrayfuncs.c:6666 +#, fuzzy, c-format +#| msgid "number of parameters must be between 0 and 65535\n" +msgid "number of elements to trim must be between 0 and %d" +msgstr "el número de parámetros debe estar entre 0 y 65535\n" + +#: utils/adt/arraysubs.c:93 utils/adt/arraysubs.c:130 +#, c-format +msgid "array subscript must have type integer" +msgstr "los subíndices de arrays deben tener tipo entero" + +#: utils/adt/arraysubs.c:198 utils/adt/arraysubs.c:217 +#, c-format +msgid "array subscript in assignment must not be null" +msgstr "subíndice de array en asignación no puede ser nulo" + +#: utils/adt/arrayutils.c:140 +#, c-format +msgid "array lower bound is too large: %d" +msgstr "" + +#: utils/adt/arrayutils.c:240 #, c-format msgid "typmod array must be type cstring[]" msgstr "el array de typmod debe ser de tipo cstring[]" -#: utils/adt/arrayutils.c:214 +#: utils/adt/arrayutils.c:245 #, c-format msgid "typmod array must be one-dimensional" msgstr "array de typmod debe ser unidimensional" -#: utils/adt/arrayutils.c:219 +#: utils/adt/arrayutils.c:250 #, c-format msgid "typmod array must not contain nulls" msgstr "los arrays de typmod no deben contener valores nulos" @@ -21181,25 +22766,24 @@ msgid "encoding conversion from %s to ASCII not supported" msgstr "la conversión de codificación de %s a ASCII no está soportada" #. translator: first %s is inet or cidr -#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3757 -#: utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:295 -#: utils/adt/float.c:412 utils/adt/float.c:497 utils/adt/float.c:525 +#: utils/adt/bool.c:153 utils/adt/cash.c:277 utils/adt/datetime.c:3802 +#: utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:283 +#: utils/adt/float.c:400 utils/adt/float.c:485 utils/adt/float.c:501 #: utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 #: utils/adt/geo_ops.c:274 utils/adt/geo_ops.c:316 utils/adt/geo_ops.c:326 -#: utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1378 utils/adt/geo_ops.c:1413 -#: utils/adt/geo_ops.c:1421 utils/adt/geo_ops.c:3476 utils/adt/geo_ops.c:4645 -#: utils/adt/geo_ops.c:4660 utils/adt/geo_ops.c:4667 utils/adt/int8.c:126 +#: utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1389 utils/adt/geo_ops.c:1424 +#: utils/adt/geo_ops.c:1432 utils/adt/geo_ops.c:3488 utils/adt/geo_ops.c:4657 +#: utils/adt/geo_ops.c:4672 utils/adt/geo_ops.c:4679 utils/adt/int8.c:126 #: utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 #: utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 -#: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:601 -#: utils/adt/numeric.c:628 utils/adt/numeric.c:6001 utils/adt/numeric.c:6025 -#: utils/adt/numeric.c:6049 utils/adt/numeric.c:6882 utils/adt/numeric.c:6908 -#: utils/adt/numutils.c:116 utils/adt/numutils.c:126 utils/adt/numutils.c:170 -#: utils/adt/numutils.c:246 utils/adt/numutils.c:322 utils/adt/oid.c:44 -#: utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 -#: utils/adt/pg_lsn.c:73 utils/adt/tid.c:74 utils/adt/tid.c:82 -#: utils/adt/tid.c:90 utils/adt/timestamp.c:494 utils/adt/uuid.c:136 -#: utils/adt/xid8funcs.c:346 +#: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:702 +#: utils/adt/numeric.c:721 utils/adt/numeric.c:6861 utils/adt/numeric.c:6885 +#: utils/adt/numeric.c:6909 utils/adt/numeric.c:7878 utils/adt/numutils.c:116 +#: utils/adt/numutils.c:126 utils/adt/numutils.c:170 utils/adt/numutils.c:246 +#: utils/adt/numutils.c:322 utils/adt/oid.c:44 utils/adt/oid.c:58 +#: utils/adt/oid.c:64 utils/adt/oid.c:86 utils/adt/pg_lsn.c:74 +#: utils/adt/tid.c:76 utils/adt/tid.c:84 utils/adt/tid.c:92 +#: utils/adt/timestamp.c:496 utils/adt/uuid.c:136 utils/adt/xid8funcs.c:346 #, c-format msgid "invalid input syntax for type %s: \"%s\"" msgstr "la sintaxis de entrada no es válida para tipo %s: «%s»" @@ -21214,12 +22798,14 @@ msgstr "el valor «%s» está fuera de rango para el tipo %s" #: utils/adt/cash.c:652 utils/adt/cash.c:702 utils/adt/cash.c:753 #: utils/adt/cash.c:802 utils/adt/cash.c:854 utils/adt/cash.c:904 -#: utils/adt/float.c:104 utils/adt/int.c:824 utils/adt/int.c:940 -#: utils/adt/int.c:1020 utils/adt/int.c:1082 utils/adt/int.c:1120 -#: utils/adt/int.c:1148 utils/adt/int8.c:593 utils/adt/int8.c:651 -#: utils/adt/int8.c:978 utils/adt/int8.c:1058 utils/adt/int8.c:1120 -#: utils/adt/int8.c:1200 utils/adt/numeric.c:7446 utils/adt/numeric.c:7736 -#: utils/adt/numeric.c:9318 utils/adt/timestamp.c:3264 +#: utils/adt/float.c:104 utils/adt/int.c:822 utils/adt/int.c:938 +#: utils/adt/int.c:1018 utils/adt/int.c:1080 utils/adt/int.c:1118 +#: utils/adt/int.c:1146 utils/adt/int8.c:600 utils/adt/int8.c:658 +#: utils/adt/int8.c:985 utils/adt/int8.c:1065 utils/adt/int8.c:1127 +#: utils/adt/int8.c:1207 utils/adt/numeric.c:3032 utils/adt/numeric.c:3055 +#: utils/adt/numeric.c:3140 utils/adt/numeric.c:3158 utils/adt/numeric.c:3254 +#: utils/adt/numeric.c:8427 utils/adt/numeric.c:8717 utils/adt/numeric.c:10299 +#: utils/adt/timestamp.c:3281 #, c-format msgid "division by zero" msgstr "división por cero" @@ -21229,153 +22815,164 @@ msgstr "división por cero" msgid "\"char\" out of range" msgstr "«char» fuera de rango" -#: utils/adt/date.c:61 utils/adt/timestamp.c:95 utils/adt/varbit.c:104 +#: utils/adt/date.c:62 utils/adt/timestamp.c:97 utils/adt/varbit.c:105 #: utils/adt/varchar.c:48 #, c-format msgid "invalid type modifier" msgstr "el modificador de tipo no es válido" -#: utils/adt/date.c:73 +#: utils/adt/date.c:74 #, c-format msgid "TIME(%d)%s precision must not be negative" msgstr "la precisión de TIME(%d)%s no debe ser negativa" -#: utils/adt/date.c:79 +#: utils/adt/date.c:80 #, c-format msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "la precisión de TIME(%d)%s fue reducida al máximo permitido, %d" -#: utils/adt/date.c:158 utils/adt/date.c:166 utils/adt/formatting.c:4196 -#: utils/adt/formatting.c:4205 utils/adt/formatting.c:4311 -#: utils/adt/formatting.c:4321 +#: utils/adt/date.c:159 utils/adt/date.c:167 utils/adt/formatting.c:4252 +#: utils/adt/formatting.c:4261 utils/adt/formatting.c:4367 +#: utils/adt/formatting.c:4377 #, c-format msgid "date out of range: \"%s\"" msgstr "fecha fuera de rango: «%s»" -#: utils/adt/date.c:213 utils/adt/date.c:525 utils/adt/date.c:549 +#: utils/adt/date.c:214 utils/adt/date.c:525 utils/adt/date.c:549 #: utils/adt/xml.c:2210 #, c-format msgid "date out of range" msgstr "fecha fuera de rango" -#: utils/adt/date.c:259 utils/adt/timestamp.c:574 +#: utils/adt/date.c:260 utils/adt/timestamp.c:580 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "valor en campo de fecha fuera de rango: %d-%02d-%02d" -#: utils/adt/date.c:266 utils/adt/date.c:275 utils/adt/timestamp.c:580 +#: utils/adt/date.c:267 utils/adt/date.c:276 utils/adt/timestamp.c:586 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "fecha fuera de rango: %d-%02d-%02d" -#: utils/adt/date.c:313 utils/adt/date.c:336 utils/adt/date.c:362 -#: utils/adt/date.c:1170 utils/adt/date.c:1216 utils/adt/date.c:1772 -#: utils/adt/date.c:1803 utils/adt/date.c:1832 utils/adt/date.c:2664 -#: utils/adt/datetime.c:1655 utils/adt/formatting.c:4053 -#: utils/adt/formatting.c:4085 utils/adt/formatting.c:4165 -#: utils/adt/formatting.c:4287 utils/adt/json.c:418 utils/adt/json.c:457 -#: utils/adt/timestamp.c:222 utils/adt/timestamp.c:254 -#: utils/adt/timestamp.c:692 utils/adt/timestamp.c:701 -#: utils/adt/timestamp.c:779 utils/adt/timestamp.c:812 -#: utils/adt/timestamp.c:2843 utils/adt/timestamp.c:2864 -#: utils/adt/timestamp.c:2877 utils/adt/timestamp.c:2886 -#: utils/adt/timestamp.c:2894 utils/adt/timestamp.c:2949 -#: utils/adt/timestamp.c:2972 utils/adt/timestamp.c:2985 -#: utils/adt/timestamp.c:2996 utils/adt/timestamp.c:3004 -#: utils/adt/timestamp.c:3664 utils/adt/timestamp.c:3789 -#: utils/adt/timestamp.c:3830 utils/adt/timestamp.c:3920 -#: utils/adt/timestamp.c:3964 utils/adt/timestamp.c:4067 -#: utils/adt/timestamp.c:4552 utils/adt/timestamp.c:4748 -#: utils/adt/timestamp.c:5075 utils/adt/timestamp.c:5089 -#: utils/adt/timestamp.c:5094 utils/adt/timestamp.c:5108 -#: utils/adt/timestamp.c:5141 utils/adt/timestamp.c:5218 -#: utils/adt/timestamp.c:5259 utils/adt/timestamp.c:5263 -#: utils/adt/timestamp.c:5332 utils/adt/timestamp.c:5336 -#: utils/adt/timestamp.c:5350 utils/adt/timestamp.c:5384 utils/adt/xml.c:2232 -#: utils/adt/xml.c:2239 utils/adt/xml.c:2259 utils/adt/xml.c:2266 -#, c-format -msgid "timestamp out of range" -msgstr "timestamp fuera de rango" - #: utils/adt/date.c:500 #, c-format msgid "cannot subtract infinite dates" msgstr "no se pueden restar fechas infinitas" -#: utils/adt/date.c:589 utils/adt/date.c:646 utils/adt/date.c:680 -#: utils/adt/date.c:2701 utils/adt/date.c:2711 +#: utils/adt/date.c:598 utils/adt/date.c:661 utils/adt/date.c:697 +#: utils/adt/date.c:2881 utils/adt/date.c:2891 #, c-format msgid "date out of range for timestamp" msgstr "fecha fuera de rango para timestamp" -#: utils/adt/date.c:1389 utils/adt/date.c:2159 utils/adt/formatting.c:4373 +#: utils/adt/date.c:1127 utils/adt/date.c:1210 utils/adt/date.c:1226 +#, fuzzy, c-format +#| msgid "interval units \"%s\" not supported" +msgid "date units \"%s\" not supported" +msgstr "las unidades de interval «%s» no están soportadas" + +#: utils/adt/date.c:1235 +#, fuzzy, c-format +#| msgid "\"time\" units \"%s\" not recognized" +msgid "date units \"%s\" not recognized" +msgstr "las unidades de «time» «%s» no son reconocidas" + +#: utils/adt/date.c:1318 utils/adt/date.c:1364 utils/adt/date.c:1920 +#: utils/adt/date.c:1951 utils/adt/date.c:1980 utils/adt/date.c:2844 +#: utils/adt/datetime.c:405 utils/adt/datetime.c:1700 +#: utils/adt/formatting.c:4109 utils/adt/formatting.c:4141 +#: utils/adt/formatting.c:4221 utils/adt/formatting.c:4343 utils/adt/json.c:418 +#: utils/adt/json.c:457 utils/adt/timestamp.c:224 utils/adt/timestamp.c:256 +#: utils/adt/timestamp.c:698 utils/adt/timestamp.c:707 +#: utils/adt/timestamp.c:785 utils/adt/timestamp.c:818 +#: utils/adt/timestamp.c:2860 utils/adt/timestamp.c:2881 +#: utils/adt/timestamp.c:2894 utils/adt/timestamp.c:2903 +#: utils/adt/timestamp.c:2911 utils/adt/timestamp.c:2966 +#: utils/adt/timestamp.c:2989 utils/adt/timestamp.c:3002 +#: utils/adt/timestamp.c:3013 utils/adt/timestamp.c:3021 +#: utils/adt/timestamp.c:3681 utils/adt/timestamp.c:3806 +#: utils/adt/timestamp.c:3891 utils/adt/timestamp.c:3981 +#: utils/adt/timestamp.c:4069 utils/adt/timestamp.c:4172 +#: utils/adt/timestamp.c:4674 utils/adt/timestamp.c:4948 +#: utils/adt/timestamp.c:5401 utils/adt/timestamp.c:5415 +#: utils/adt/timestamp.c:5420 utils/adt/timestamp.c:5434 +#: utils/adt/timestamp.c:5467 utils/adt/timestamp.c:5554 +#: utils/adt/timestamp.c:5595 utils/adt/timestamp.c:5599 +#: utils/adt/timestamp.c:5668 utils/adt/timestamp.c:5672 +#: utils/adt/timestamp.c:5686 utils/adt/timestamp.c:5720 utils/adt/xml.c:2232 +#: utils/adt/xml.c:2239 utils/adt/xml.c:2259 utils/adt/xml.c:2266 +#, c-format +msgid "timestamp out of range" +msgstr "timestamp fuera de rango" + +#: utils/adt/date.c:1537 utils/adt/date.c:2339 utils/adt/formatting.c:4429 #, c-format msgid "time out of range" msgstr "hora fuera de rango" -#: utils/adt/date.c:1441 utils/adt/timestamp.c:589 +#: utils/adt/date.c:1589 utils/adt/timestamp.c:595 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "valor en campo de hora fuera de rango: %d:%02d:%02g" -#: utils/adt/date.c:1961 utils/adt/date.c:2463 utils/adt/float.c:1071 -#: utils/adt/float.c:1140 utils/adt/int.c:616 utils/adt/int.c:663 -#: utils/adt/int.c:698 utils/adt/int8.c:492 utils/adt/numeric.c:2197 -#: utils/adt/timestamp.c:3313 utils/adt/timestamp.c:3344 -#: utils/adt/timestamp.c:3375 +#: utils/adt/date.c:2109 utils/adt/date.c:2643 utils/adt/float.c:1047 +#: utils/adt/float.c:1123 utils/adt/int.c:614 utils/adt/int.c:661 +#: utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2443 +#: utils/adt/timestamp.c:3330 utils/adt/timestamp.c:3361 +#: utils/adt/timestamp.c:3392 #, c-format msgid "invalid preceding or following size in window function" msgstr "tamaño «preceding» o «following» no válido en ventana deslizante" -#: utils/adt/date.c:2046 utils/adt/date.c:2059 +#: utils/adt/date.c:2208 utils/adt/date.c:2224 #, c-format msgid "\"time\" units \"%s\" not recognized" msgstr "las unidades de «time» «%s» no son reconocidas" -#: utils/adt/date.c:2167 +#: utils/adt/date.c:2347 #, c-format msgid "time zone displacement out of range" msgstr "desplazamiento de huso horario fuera de rango" -#: utils/adt/date.c:2796 utils/adt/date.c:2809 +#: utils/adt/date.c:2986 utils/adt/date.c:3006 #, c-format msgid "\"time with time zone\" units \"%s\" not recognized" msgstr "las unidades de «timestamp with time zone» «%s» no son reconocidas" -#: utils/adt/date.c:2882 utils/adt/datetime.c:906 utils/adt/datetime.c:1813 -#: utils/adt/datetime.c:4601 utils/adt/timestamp.c:513 -#: utils/adt/timestamp.c:540 utils/adt/timestamp.c:4150 -#: utils/adt/timestamp.c:5100 utils/adt/timestamp.c:5342 +#: utils/adt/date.c:3095 utils/adt/datetime.c:951 utils/adt/datetime.c:1858 +#: utils/adt/datetime.c:4648 utils/adt/timestamp.c:515 +#: utils/adt/timestamp.c:542 utils/adt/timestamp.c:4255 +#: utils/adt/timestamp.c:5426 utils/adt/timestamp.c:5678 #, c-format msgid "time zone \"%s\" not recognized" msgstr "el huso horario «%s» no es reconocido" -#: utils/adt/date.c:2914 utils/adt/timestamp.c:5130 utils/adt/timestamp.c:5373 +#: utils/adt/date.c:3127 utils/adt/timestamp.c:5456 utils/adt/timestamp.c:5709 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "el intervalo de huso horario «%s» no debe especificar meses o días" -#: utils/adt/datetime.c:3730 utils/adt/datetime.c:3737 +#: utils/adt/datetime.c:3775 utils/adt/datetime.c:3782 #, c-format msgid "date/time field value out of range: \"%s\"" msgstr "valor de hora/fecha fuera de rango: «%s»" -#: utils/adt/datetime.c:3739 +#: utils/adt/datetime.c:3784 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." msgstr "Quizás necesite una configuración diferente de «datestyle»." -#: utils/adt/datetime.c:3744 +#: utils/adt/datetime.c:3789 #, c-format msgid "interval field value out of range: \"%s\"" msgstr "valor de interval fuera de rango: «%s»" -#: utils/adt/datetime.c:3750 +#: utils/adt/datetime.c:3795 #, c-format msgid "time zone displacement out of range: \"%s\"" msgstr "desplazamiento de huso horario fuera de rango: «%s»" -#: utils/adt/datetime.c:4603 +#: utils/adt/datetime.c:4650 #, c-format msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "Este nombre de huso horario aparece en el archivo de configuración para abreviaciones de husos horarios «%s»." @@ -21385,17 +22982,17 @@ msgstr "Este nombre de huso horario aparece en el archivo de configuración para msgid "invalid Datum pointer" msgstr "puntero a Datum no válido" -#: utils/adt/dbsize.c:759 utils/adt/dbsize.c:827 +#: utils/adt/dbsize.c:749 utils/adt/dbsize.c:817 #, c-format msgid "invalid size: \"%s\"" msgstr "tamaño no válido: «%s»" -#: utils/adt/dbsize.c:828 +#: utils/adt/dbsize.c:818 #, c-format msgid "Invalid size unit: \"%s\"." msgstr "Nombre de unidad de tamaño no válido: «%s»." -#: utils/adt/dbsize.c:829 +#: utils/adt/dbsize.c:819 #, c-format msgid "Valid units are \"bytes\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Unidades válidas son «bytes«, «kB», «MB», «GB» y «TB»." @@ -21405,12 +23002,12 @@ msgstr "Unidades válidas son «bytes«, «kB», «MB», «GB» y «TB»." msgid "type %s is not a domain" msgstr "tipo «%s» no es un dominio" -#: utils/adt/encode.c:64 utils/adt/encode.c:112 +#: utils/adt/encode.c:68 utils/adt/encode.c:112 #, c-format msgid "unrecognized encoding: \"%s\"" msgstr "no se reconoce la codificación: «%s»" -#: utils/adt/encode.c:78 +#: utils/adt/encode.c:82 #, fuzzy, c-format #| msgid "result of decoding conversion is too large" msgid "result of encoding conversion is too large" @@ -21421,83 +23018,59 @@ msgstr "el resultado de la conversión de codificación es demasiado grande" msgid "result of decoding conversion is too large" msgstr "el resultado de la conversión de codificación es demasiado grande" -#: utils/adt/encode.c:184 -#, c-format -msgid "invalid hexadecimal digit: \"%c\"" -msgstr "el dígito hexadecimal no es válido: «%c»" - -#: utils/adt/encode.c:212 -#, c-format -msgid "invalid hexadecimal data: odd number of digits" -msgstr "el dato hexadecimal no es válido: tiene un número impar de dígitos" - -#: utils/adt/encode.c:329 +#: utils/adt/encode.c:261 #, c-format msgid "unexpected \"=\" while decoding base64 sequence" msgstr "«=» inesperado mientras se decodificaba la secuencia base64" -#: utils/adt/encode.c:341 -#, c-format -msgid "invalid symbol \"%c\" while decoding base64 sequence" +#: utils/adt/encode.c:273 +#, fuzzy, c-format +#| msgid "invalid symbol \"%c\" while decoding base64 sequence" +msgid "invalid symbol \"%.*s\" found while decoding base64 sequence" msgstr "símbolo «%c» no válido al decodificar secuencia base64" -#: utils/adt/encode.c:361 +#: utils/adt/encode.c:304 #, c-format msgid "invalid base64 end sequence" msgstr "secuencia de término base64 no válida" -#: utils/adt/encode.c:362 +#: utils/adt/encode.c:305 #, c-format msgid "Input data is missing padding, is truncated, or is otherwise corrupted." msgstr "A los datos de entrada les falta relleno, o están truncados, o están corruptos de alguna otra forma." -#: utils/adt/encode.c:476 utils/adt/encode.c:541 utils/adt/jsonfuncs.c:619 -#: utils/adt/varlena.c:319 utils/adt/varlena.c:360 jsonpath_gram.y:528 -#: jsonpath_scan.l:519 jsonpath_scan.l:530 jsonpath_scan.l:540 -#: jsonpath_scan.l:582 -#, c-format -msgid "invalid input syntax for type %s" -msgstr "sintaxis de entrada no válida para tipo %s" - -#: utils/adt/enum.c:100 +#: utils/adt/enum.c:99 #, c-format msgid "unsafe use of new value \"%s\" of enum type %s" msgstr "uso inseguro del nuevo valor «%s» del tipo enum %s" -#: utils/adt/enum.c:103 +#: utils/adt/enum.c:102 #, c-format msgid "New enum values must be committed before they can be used." msgstr "Los nuevos valores de enum deben estar comprometidos (committed) antes de que puedan usarse." -#: utils/adt/enum.c:121 utils/adt/enum.c:131 utils/adt/enum.c:189 -#: utils/adt/enum.c:199 +#: utils/adt/enum.c:120 utils/adt/enum.c:130 utils/adt/enum.c:188 +#: utils/adt/enum.c:198 #, c-format msgid "invalid input value for enum %s: \"%s\"" msgstr "la sintaxis de entrada no es válida para el enum %s: «%s»" -#: utils/adt/enum.c:161 utils/adt/enum.c:227 utils/adt/enum.c:286 +#: utils/adt/enum.c:160 utils/adt/enum.c:226 utils/adt/enum.c:285 #, c-format msgid "invalid internal value for enum: %u" msgstr "el valor interno no es válido para enum: %u" -#: utils/adt/enum.c:446 utils/adt/enum.c:475 utils/adt/enum.c:515 -#: utils/adt/enum.c:535 +#: utils/adt/enum.c:445 utils/adt/enum.c:474 utils/adt/enum.c:514 +#: utils/adt/enum.c:534 #, c-format msgid "could not determine actual enum type" msgstr "no se pudo determinar el tipo enum efectivo" -#: utils/adt/enum.c:454 utils/adt/enum.c:483 +#: utils/adt/enum.c:453 utils/adt/enum.c:482 #, c-format msgid "enum %s contains no values" msgstr "el enum %s no contiene valores" -#: utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 -#: utils/cache/typcache.c:1632 utils/cache/typcache.c:1788 -#: utils/cache/typcache.c:1918 utils/fmgr/funcapi.c:456 -#, c-format -msgid "type %s is not composite" -msgstr "el tipo %s no es compuesto" - #: utils/adt/float.c:88 #, c-format msgid "value out of range: overflow" @@ -21505,7 +23078,6 @@ msgstr "valor fuera de rango: desbordamiento" #: utils/adt/float.c:96 #, c-format -#| msgid "value out of range: overflow" msgid "value out of range: underflow" msgstr "valor fuera de rango: desbordamiento por abajo" @@ -21514,74 +23086,76 @@ msgstr "valor fuera de rango: desbordamiento por abajo" msgid "\"%s\" is out of range for type real" msgstr "«%s» está fuera de rango para el tipo real" -#: utils/adt/float.c:489 +#: utils/adt/float.c:477 #, c-format msgid "\"%s\" is out of range for type double precision" msgstr "«%s» está fuera de rango para el tipo double precision" -#: utils/adt/float.c:1268 utils/adt/float.c:1342 utils/adt/int.c:336 -#: utils/adt/int.c:874 utils/adt/int.c:896 utils/adt/int.c:910 -#: utils/adt/int.c:924 utils/adt/int.c:956 utils/adt/int.c:1194 -#: utils/adt/int8.c:1313 utils/adt/numeric.c:3553 utils/adt/numeric.c:3562 +#: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:334 +#: utils/adt/int.c:872 utils/adt/int.c:894 utils/adt/int.c:908 +#: utils/adt/int.c:922 utils/adt/int.c:954 utils/adt/int.c:1192 +#: utils/adt/int8.c:1320 utils/adt/numeric.c:4317 utils/adt/numeric.c:4326 #, c-format msgid "smallint out of range" msgstr "smallint fuera de rango" -#: utils/adt/float.c:1468 utils/adt/numeric.c:8329 +#: utils/adt/float.c:1458 utils/adt/numeric.c:3550 utils/adt/numeric.c:9310 #, c-format msgid "cannot take square root of a negative number" msgstr "no se puede calcular la raíz cuadrada un de número negativo" -#: utils/adt/float.c:1536 utils/adt/numeric.c:3239 +#: utils/adt/float.c:1526 utils/adt/numeric.c:3825 utils/adt/numeric.c:3935 #, c-format msgid "zero raised to a negative power is undefined" msgstr "cero elevado a una potencia negativa es indefinido" -#: utils/adt/float.c:1540 utils/adt/numeric.c:3245 +#: utils/adt/float.c:1530 utils/adt/numeric.c:3829 utils/adt/numeric.c:3940 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "un número negativo elevado a una potencia no positiva entrega un resultado complejo" -#: utils/adt/float.c:1614 utils/adt/float.c:1647 utils/adt/numeric.c:8993 +#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3737 +#: utils/adt/numeric.c:9974 #, c-format msgid "cannot take logarithm of zero" msgstr "no se puede calcular logaritmo de cero" -#: utils/adt/float.c:1618 utils/adt/float.c:1651 utils/adt/numeric.c:8997 +#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3675 +#: utils/adt/numeric.c:3732 utils/adt/numeric.c:9978 #, c-format msgid "cannot take logarithm of a negative number" msgstr "no se puede calcular logaritmo de un número negativo" -#: utils/adt/float.c:1684 utils/adt/float.c:1715 utils/adt/float.c:1810 -#: utils/adt/float.c:1837 utils/adt/float.c:1865 utils/adt/float.c:1892 -#: utils/adt/float.c:2039 utils/adt/float.c:2076 utils/adt/float.c:2246 -#: utils/adt/float.c:2302 utils/adt/float.c:2367 utils/adt/float.c:2424 -#: utils/adt/float.c:2615 utils/adt/float.c:2639 +#: utils/adt/float.c:1776 utils/adt/float.c:1807 utils/adt/float.c:1902 +#: utils/adt/float.c:1929 utils/adt/float.c:1957 utils/adt/float.c:1984 +#: utils/adt/float.c:2131 utils/adt/float.c:2168 utils/adt/float.c:2338 +#: utils/adt/float.c:2394 utils/adt/float.c:2459 utils/adt/float.c:2516 +#: utils/adt/float.c:2707 utils/adt/float.c:2731 #, c-format msgid "input is out of range" msgstr "la entrada está fuera de rango" -#: utils/adt/float.c:2706 +#: utils/adt/float.c:2798 #, c-format msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "parámetro setseed %g fuera del rango permitido [-1,1]" -#: utils/adt/float.c:3938 utils/adt/numeric.c:1509 +#: utils/adt/float.c:4030 utils/adt/numeric.c:1716 #, c-format msgid "count must be greater than zero" msgstr "count debe ser mayor que cero" -#: utils/adt/float.c:3943 utils/adt/numeric.c:1516 +#: utils/adt/float.c:4035 utils/adt/numeric.c:1727 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "el operando, límite inferior y límite superior no pueden ser NaN" -#: utils/adt/float.c:3949 +#: utils/adt/float.c:4041 utils/adt/numeric.c:1732 #, c-format msgid "lower and upper bounds must be finite" msgstr "los límites inferior y superior deben ser finitos" -#: utils/adt/float.c:3983 utils/adt/numeric.c:1529 +#: utils/adt/float.c:4075 utils/adt/numeric.c:1746 #, c-format msgid "lower bound cannot equal upper bound" msgstr "el límite superior no puede ser igual al límite inferior" @@ -21666,221 +23240,224 @@ msgstr "«EEEE» es incompatible con otros formatos" msgid "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "«EEEE» sólo puede ser usado en conjunción con patrones de dígitos y puntos decimales." -#: utils/adt/formatting.c:1392 +#: utils/adt/formatting.c:1394 #, fuzzy, c-format #| msgid "unmatched format separator \"%c\"" msgid "invalid datetime format separator: \"%s\"" msgstr "separador de formato «%c» desemparejado" -#: utils/adt/formatting.c:1520 +#: utils/adt/formatting.c:1521 #, c-format msgid "\"%s\" is not a number" msgstr "«%s» no es un número" -#: utils/adt/formatting.c:1598 +#: utils/adt/formatting.c:1599 #, c-format msgid "case conversion failed: %s" msgstr "falló la conversión de mayúsculas: %s" -#: utils/adt/formatting.c:1663 utils/adt/formatting.c:1787 -#: utils/adt/formatting.c:1912 +#: utils/adt/formatting.c:1664 utils/adt/formatting.c:1788 +#: utils/adt/formatting.c:1913 #, c-format msgid "could not determine which collation to use for %s function" msgstr "no se pudo determinar qué ordenamiento usar para la función %s" -#: utils/adt/formatting.c:2284 +#: utils/adt/formatting.c:2285 #, c-format msgid "invalid combination of date conventions" msgstr "combinacion invalida de convenciones de fecha" -#: utils/adt/formatting.c:2285 +#: utils/adt/formatting.c:2286 #, c-format msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr " No mezclar convenciones de semana Gregorianas e ISO en una plantilla formateada" -#: utils/adt/formatting.c:2308 +#: utils/adt/formatting.c:2309 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "valores en conflicto para le campo \"%s\" en cadena de formato" -#: utils/adt/formatting.c:2311 +#: utils/adt/formatting.c:2312 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "Este valor se contradice con un seteo previo para el mismo tipo de campo" -#: utils/adt/formatting.c:2382 +#: utils/adt/formatting.c:2383 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "cadena de texto fuente muy corta para campo formateado \"%s\" " -#: utils/adt/formatting.c:2385 +#: utils/adt/formatting.c:2386 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "El campo requiere %d caractéres, pero solo quedan %d." -#: utils/adt/formatting.c:2388 utils/adt/formatting.c:2403 +#: utils/adt/formatting.c:2389 utils/adt/formatting.c:2404 #, c-format msgid "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "Si su cadena de texto no es de ancho modificado, trate de usar el modificador \"FM\" " -#: utils/adt/formatting.c:2398 utils/adt/formatting.c:2412 -#: utils/adt/formatting.c:2635 +#: utils/adt/formatting.c:2399 utils/adt/formatting.c:2413 +#: utils/adt/formatting.c:2636 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "el valor «%s» no es válido para «%s»" -#: utils/adt/formatting.c:2400 +#: utils/adt/formatting.c:2401 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "El campo requiere %d caracteres, pero sólo %d pudieron ser analizados." -#: utils/adt/formatting.c:2414 +#: utils/adt/formatting.c:2415 #, c-format msgid "Value must be an integer." msgstr "El valor debe ser un entero." -#: utils/adt/formatting.c:2419 +#: utils/adt/formatting.c:2420 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "el valor para «%s» en la cadena de origen está fuera de rango" -#: utils/adt/formatting.c:2421 +#: utils/adt/formatting.c:2422 #, c-format msgid "Value must be in the range %d to %d." msgstr "El valor debe estar en el rango de %d a %d." -#: utils/adt/formatting.c:2637 +#: utils/adt/formatting.c:2638 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "El valor dado no concuerda con ninguno de los valores permitidos para este campo." -#: utils/adt/formatting.c:2854 utils/adt/formatting.c:2874 -#: utils/adt/formatting.c:2894 utils/adt/formatting.c:2914 -#: utils/adt/formatting.c:2933 utils/adt/formatting.c:2952 -#: utils/adt/formatting.c:2976 utils/adt/formatting.c:2994 -#: utils/adt/formatting.c:3012 utils/adt/formatting.c:3030 -#: utils/adt/formatting.c:3047 utils/adt/formatting.c:3064 +#: utils/adt/formatting.c:2855 utils/adt/formatting.c:2875 +#: utils/adt/formatting.c:2895 utils/adt/formatting.c:2915 +#: utils/adt/formatting.c:2934 utils/adt/formatting.c:2953 +#: utils/adt/formatting.c:2977 utils/adt/formatting.c:2995 +#: utils/adt/formatting.c:3013 utils/adt/formatting.c:3031 +#: utils/adt/formatting.c:3048 utils/adt/formatting.c:3065 #, c-format msgid "localized string format value too long" msgstr "cadena traducida en cadena de formato es demasiado larga" -#: utils/adt/formatting.c:3298 +#: utils/adt/formatting.c:3342 #, c-format msgid "unmatched format separator \"%c\"" msgstr "separador de formato «%c» desemparejado" -#: utils/adt/formatting.c:3453 utils/adt/formatting.c:3797 +#: utils/adt/formatting.c:3403 +#, fuzzy, c-format +#| msgid "unmatched format separator \"%c\"" +msgid "unmatched format character \"%s\"" +msgstr "separador de formato «%c» desemparejado" + +#: utils/adt/formatting.c:3509 utils/adt/formatting.c:3853 #, c-format msgid "formatting field \"%s\" is only supported in to_char" msgstr "el campo de formato «%s» sólo está soportado en to_char" -#: utils/adt/formatting.c:3628 +#: utils/adt/formatting.c:3684 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "cadena de entrada no válida para «Y,YYY»" -#: utils/adt/formatting.c:3714 +#: utils/adt/formatting.c:3770 #, c-format -#| msgid "source string too short for \"%s\" formatting field" msgid "input string is too short for datetime format" msgstr "cadena de entrada muy corta para formato de fecha/hora" -#: utils/adt/formatting.c:3722 +#: utils/adt/formatting.c:3778 #, c-format msgid "trailing characters remain in input string after datetime format" msgstr "quedan caracteres al final de la cadena de entrada después del formato fecha/hora" -#: utils/adt/formatting.c:4267 +#: utils/adt/formatting.c:4323 #, c-format msgid "missing time zone in input string for type timestamptz" msgstr "falta el huso horario en la cadena de entrada para el tipo timestamptz" -#: utils/adt/formatting.c:4273 +#: utils/adt/formatting.c:4329 #, c-format -#| msgid "timestamp out of range" msgid "timestamptz out of range" msgstr "timestamptz fuera de rango" -#: utils/adt/formatting.c:4301 +#: utils/adt/formatting.c:4357 #, c-format msgid "datetime format is zoned but not timed" msgstr "el formato de fecha/hora tiene huso horario pero no hora" -#: utils/adt/formatting.c:4353 +#: utils/adt/formatting.c:4409 #, c-format msgid "missing time zone in input string for type timetz" msgstr "falta el huso horario en la cadena de entrada del tipo timetz" -#: utils/adt/formatting.c:4359 +#: utils/adt/formatting.c:4415 #, c-format -#| msgid "time out of range" msgid "timetz out of range" msgstr "timetz fuera de rango" -#: utils/adt/formatting.c:4385 +#: utils/adt/formatting.c:4441 #, c-format msgid "datetime format is not dated and not timed" msgstr "el formato de fecha/hora no tiene fecha ni hora" -#: utils/adt/formatting.c:4518 +#: utils/adt/formatting.c:4574 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "la hora «%d» no es válida para el reloj de 12 horas" -#: utils/adt/formatting.c:4520 +#: utils/adt/formatting.c:4576 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Use el reloj de 24 horas, o entregue una hora entre 1 y 12." -#: utils/adt/formatting.c:4628 +#: utils/adt/formatting.c:4687 #, c-format msgid "cannot calculate day of year without year information" msgstr "no se puede calcular el día del año sin conocer el año" -#: utils/adt/formatting.c:5547 +#: utils/adt/formatting.c:5606 #, c-format msgid "\"EEEE\" not supported for input" msgstr "«EEEE» no está soportado en la entrada" -#: utils/adt/formatting.c:5559 +#: utils/adt/formatting.c:5618 #, c-format msgid "\"RN\" not supported for input" msgstr "«RN» no está soportado en la entrada" -#: utils/adt/genfile.c:75 +#: utils/adt/genfile.c:78 #, c-format msgid "reference to parent directory (\"..\") not allowed" msgstr "no se permiten referencias a directorios padre («..»)" -#: utils/adt/genfile.c:86 +#: utils/adt/genfile.c:89 #, c-format msgid "absolute path not allowed" msgstr "no se permiten rutas absolutas" -#: utils/adt/genfile.c:91 +#: utils/adt/genfile.c:94 #, c-format msgid "path must be in or below the current directory" msgstr "la ruta debe estar en o debajo del directorio actual" -#: utils/adt/genfile.c:116 utils/adt/oracle_compat.c:185 -#: utils/adt/oracle_compat.c:283 utils/adt/oracle_compat.c:759 -#: utils/adt/oracle_compat.c:1054 +#: utils/adt/genfile.c:119 utils/adt/oracle_compat.c:187 +#: utils/adt/oracle_compat.c:285 utils/adt/oracle_compat.c:833 +#: utils/adt/oracle_compat.c:1128 #, c-format msgid "requested length too large" msgstr "el tamaño solicitado es demasiado grande" -#: utils/adt/genfile.c:133 +#: utils/adt/genfile.c:136 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "no se pudo posicionar (seek) el archivo «%s»: %m" -#: utils/adt/genfile.c:174 +#: utils/adt/genfile.c:176 #, fuzzy, c-format #| msgid "requested length too large" msgid "file length too large" msgstr "el tamaño solicitado es demasiado grande" -#: utils/adt/genfile.c:251 +#: utils/adt/genfile.c:253 #, c-format msgid "must be superuser to read files with adminpack 1.0" msgstr "Debe ser superusuario leer archivos con adminpack 1.0." @@ -21890,74 +23467,74 @@ msgstr "Debe ser superusuario leer archivos con adminpack 1.0." msgid "invalid line specification: A and B cannot both be zero" msgstr "especificación de línea no válida: A y B no pueden ser ambos cero" -#: utils/adt/geo_ops.c:987 utils/adt/geo_ops.c:1090 +#: utils/adt/geo_ops.c:987 utils/adt/geo_ops.c:1097 #, c-format msgid "invalid line specification: must be two distinct points" msgstr "especificación de línea no válida: deben ser dos puntos distintos" -#: utils/adt/geo_ops.c:1399 utils/adt/geo_ops.c:3486 utils/adt/geo_ops.c:4354 -#: utils/adt/geo_ops.c:5248 +#: utils/adt/geo_ops.c:1410 utils/adt/geo_ops.c:3498 utils/adt/geo_ops.c:4366 +#: utils/adt/geo_ops.c:5260 #, c-format msgid "too many points requested" msgstr "se pidieron demasiados puntos" -#: utils/adt/geo_ops.c:1461 +#: utils/adt/geo_ops.c:1472 #, c-format msgid "invalid number of points in external \"path\" value" msgstr "el número de puntos no es válido en el valor «path» externo" -#: utils/adt/geo_ops.c:2537 +#: utils/adt/geo_ops.c:2549 #, c-format msgid "function \"dist_lb\" not implemented" msgstr "la función «dist_lb» no está implementada" -#: utils/adt/geo_ops.c:2556 +#: utils/adt/geo_ops.c:2568 #, fuzzy, c-format #| msgid "function \"dist_lb\" not implemented" msgid "function \"dist_bl\" not implemented" msgstr "la función «dist_lb» no está implementada" -#: utils/adt/geo_ops.c:2975 +#: utils/adt/geo_ops.c:2987 #, c-format msgid "function \"close_sl\" not implemented" msgstr "la función «close_sl» no está implementada" -#: utils/adt/geo_ops.c:3122 +#: utils/adt/geo_ops.c:3134 #, c-format msgid "function \"close_lb\" not implemented" msgstr "la función «close_lb» no está implementada" -#: utils/adt/geo_ops.c:3533 +#: utils/adt/geo_ops.c:3545 #, c-format msgid "invalid number of points in external \"polygon\" value" msgstr "el número de puntos no es válido en «polygon» externo" -#: utils/adt/geo_ops.c:4069 +#: utils/adt/geo_ops.c:4081 #, c-format msgid "function \"poly_distance\" not implemented" msgstr "la función «poly_distance» no está implementada" -#: utils/adt/geo_ops.c:4446 +#: utils/adt/geo_ops.c:4458 #, c-format msgid "function \"path_center\" not implemented" msgstr "la función «path_center» no está implementada" -#: utils/adt/geo_ops.c:4463 +#: utils/adt/geo_ops.c:4475 #, c-format msgid "open path cannot be converted to polygon" msgstr "no se puede convertir un camino abierto en polygon" -#: utils/adt/geo_ops.c:4713 +#: utils/adt/geo_ops.c:4725 #, c-format msgid "invalid radius in external \"circle\" value" msgstr "el radio no es válido en el valor «circle» externo" -#: utils/adt/geo_ops.c:5234 +#: utils/adt/geo_ops.c:5246 #, c-format msgid "cannot convert circle with radius zero to polygon" msgstr "no se puede convertir un círculo de radio cero a polygon" -#: utils/adt/geo_ops.c:5239 +#: utils/adt/geo_ops.c:5251 #, c-format msgid "must request at least 2 points" msgstr "debe pedir al menos 2 puntos" @@ -21967,38 +23544,38 @@ msgstr "debe pedir al menos 2 puntos" msgid "int2vector has too many elements" msgstr "int2vector tiene demasiados elementos" -#: utils/adt/int.c:239 +#: utils/adt/int.c:237 #, c-format msgid "invalid int2vector data" msgstr "datos de int2vector no válidos" -#: utils/adt/int.c:245 utils/adt/oid.c:215 utils/adt/oid.c:296 +#: utils/adt/int.c:243 utils/adt/oid.c:215 utils/adt/oid.c:296 #, c-format msgid "oidvector has too many elements" msgstr "el oidvector tiene demasiados elementos" -#: utils/adt/int.c:1510 utils/adt/int8.c:1439 utils/adt/numeric.c:1417 -#: utils/adt/timestamp.c:5435 utils/adt/timestamp.c:5515 +#: utils/adt/int.c:1508 utils/adt/int8.c:1446 utils/adt/numeric.c:1624 +#: utils/adt/timestamp.c:5771 utils/adt/timestamp.c:5851 #, c-format msgid "step size cannot equal zero" msgstr "el tamaño de paso no puede ser cero" -#: utils/adt/int8.c:527 utils/adt/int8.c:550 utils/adt/int8.c:564 -#: utils/adt/int8.c:578 utils/adt/int8.c:609 utils/adt/int8.c:633 -#: utils/adt/int8.c:715 utils/adt/int8.c:783 utils/adt/int8.c:789 -#: utils/adt/int8.c:815 utils/adt/int8.c:829 utils/adt/int8.c:853 -#: utils/adt/int8.c:866 utils/adt/int8.c:935 utils/adt/int8.c:949 -#: utils/adt/int8.c:963 utils/adt/int8.c:994 utils/adt/int8.c:1016 -#: utils/adt/int8.c:1030 utils/adt/int8.c:1044 utils/adt/int8.c:1077 -#: utils/adt/int8.c:1091 utils/adt/int8.c:1105 utils/adt/int8.c:1136 -#: utils/adt/int8.c:1158 utils/adt/int8.c:1172 utils/adt/int8.c:1186 -#: utils/adt/int8.c:1348 utils/adt/int8.c:1383 utils/adt/numeric.c:3508 -#: utils/adt/varbit.c:1656 +#: utils/adt/int8.c:534 utils/adt/int8.c:557 utils/adt/int8.c:571 +#: utils/adt/int8.c:585 utils/adt/int8.c:616 utils/adt/int8.c:640 +#: utils/adt/int8.c:722 utils/adt/int8.c:790 utils/adt/int8.c:796 +#: utils/adt/int8.c:822 utils/adt/int8.c:836 utils/adt/int8.c:860 +#: utils/adt/int8.c:873 utils/adt/int8.c:942 utils/adt/int8.c:956 +#: utils/adt/int8.c:970 utils/adt/int8.c:1001 utils/adt/int8.c:1023 +#: utils/adt/int8.c:1037 utils/adt/int8.c:1051 utils/adt/int8.c:1084 +#: utils/adt/int8.c:1098 utils/adt/int8.c:1112 utils/adt/int8.c:1143 +#: utils/adt/int8.c:1165 utils/adt/int8.c:1179 utils/adt/int8.c:1193 +#: utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4276 +#: utils/adt/varbit.c:1676 #, c-format msgid "bigint out of range" msgstr "bigint fuera de rango" -#: utils/adt/int8.c:1396 +#: utils/adt/int8.c:1403 #, c-format msgid "OID out of range" msgstr "OID fuera de rango" @@ -22008,7 +23585,7 @@ msgstr "OID fuera de rango" msgid "key value must be scalar, not array, composite, or json" msgstr "el valor de llave debe ser escalar, no array, composite o json" -#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:1812 +#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:1994 #, c-format msgid "could not determine data type for argument %d" msgstr "no se pudo determinar el tipo de dato para el argumento %d" @@ -22110,226 +23687,262 @@ msgstr "no se puede convertir un objeto jsonb a tipo %s" msgid "cannot cast jsonb array or object to type %s" msgstr "no se puede convertir un array u objeto jsonb a tipo %s" -#: utils/adt/jsonb_util.c:699 +#: utils/adt/jsonb_util.c:751 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "el número de pares en objeto jsonb excede el máximo permitido (%zu)" -#: utils/adt/jsonb_util.c:740 +#: utils/adt/jsonb_util.c:792 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "el número de elementos del array jsonb excede el máximo permitido (%zu)" -#: utils/adt/jsonb_util.c:1614 utils/adt/jsonb_util.c:1634 +#: utils/adt/jsonb_util.c:1666 utils/adt/jsonb_util.c:1686 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "el tamaño total de los elementos del array jsonb excede el máximo de %u bytes" -#: utils/adt/jsonb_util.c:1695 utils/adt/jsonb_util.c:1730 -#: utils/adt/jsonb_util.c:1750 +#: utils/adt/jsonb_util.c:1747 utils/adt/jsonb_util.c:1782 +#: utils/adt/jsonb_util.c:1802 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "el tamaño total de los elementos del objeto jsonb excede el máximo de %u bytes" -#: utils/adt/jsonfuncs.c:551 utils/adt/jsonfuncs.c:796 -#: utils/adt/jsonfuncs.c:2330 utils/adt/jsonfuncs.c:2770 -#: utils/adt/jsonfuncs.c:3560 utils/adt/jsonfuncs.c:3891 +#: utils/adt/jsonbsubs.c:70 utils/adt/jsonbsubs.c:152 +#, fuzzy, c-format +#| msgid "this build does not support compression" +msgid "jsonb subscript does not support slices" +msgstr "esta instalación no soporta compresión" + +#: utils/adt/jsonbsubs.c:103 utils/adt/jsonbsubs.c:118 +#, fuzzy, c-format +#| msgid "log format \"%s\" is not supported" +msgid "subscript type is not supported" +msgstr "el formato de log «%s» no está soportado" + +#: utils/adt/jsonbsubs.c:104 +#, c-format +msgid "Jsonb subscript must be coerced only to one type, integer or text." +msgstr "" + +#: utils/adt/jsonbsubs.c:119 +#, c-format +msgid "Jsonb subscript must be coerced to either integer or text" +msgstr "" + +#: utils/adt/jsonbsubs.c:140 +#, fuzzy, c-format +#| msgid "array subscript must have type integer" +msgid "jsonb subscript must have text type" +msgstr "los subíndices de arrays deben tener tipo entero" + +#: utils/adt/jsonbsubs.c:208 +#, fuzzy, c-format +#| msgid "array subscript in assignment must not be null" +msgid "jsonb subscript in assignment must not be null" +msgstr "subíndice de array en asignación no puede ser nulo" + +#: utils/adt/jsonfuncs.c:555 utils/adt/jsonfuncs.c:789 +#: utils/adt/jsonfuncs.c:2471 utils/adt/jsonfuncs.c:2911 +#: utils/adt/jsonfuncs.c:3700 utils/adt/jsonfuncs.c:4030 #, c-format msgid "cannot call %s on a scalar" msgstr "no se puede invocar %s en un escalar" -#: utils/adt/jsonfuncs.c:556 utils/adt/jsonfuncs.c:783 -#: utils/adt/jsonfuncs.c:2772 utils/adt/jsonfuncs.c:3549 +#: utils/adt/jsonfuncs.c:560 utils/adt/jsonfuncs.c:776 +#: utils/adt/jsonfuncs.c:2913 utils/adt/jsonfuncs.c:3689 #, c-format msgid "cannot call %s on an array" msgstr "no se puede invocar %s en un array" -#: utils/adt/jsonfuncs.c:613 jsonpath_scan.l:498 -#, c-format -msgid "unsupported Unicode escape sequence" -msgstr "secuencia de escape Unicode no soportado" - -#: utils/adt/jsonfuncs.c:692 +#: utils/adt/jsonfuncs.c:685 #, c-format msgid "JSON data, line %d: %s%s%s" msgstr "Datos JSON, línea %d: %s%s%s" -#: utils/adt/jsonfuncs.c:1682 utils/adt/jsonfuncs.c:1717 +#: utils/adt/jsonfuncs.c:1823 utils/adt/jsonfuncs.c:1858 #, c-format msgid "cannot get array length of a scalar" msgstr "no se puede obtener el largo de array de un escalar" -#: utils/adt/jsonfuncs.c:1686 utils/adt/jsonfuncs.c:1705 +#: utils/adt/jsonfuncs.c:1827 utils/adt/jsonfuncs.c:1846 #, c-format msgid "cannot get array length of a non-array" msgstr "no se puede obtener el largo de array de un no-array" -#: utils/adt/jsonfuncs.c:1782 +#: utils/adt/jsonfuncs.c:1923 #, c-format msgid "cannot call %s on a non-object" msgstr "no se puede invocar %s en un no-objeto" -#: utils/adt/jsonfuncs.c:2021 +#: utils/adt/jsonfuncs.c:2162 #, c-format msgid "cannot deconstruct an array as an object" msgstr "no se puede desconstruir un array como un objeto" -#: utils/adt/jsonfuncs.c:2033 +#: utils/adt/jsonfuncs.c:2174 #, c-format msgid "cannot deconstruct a scalar" msgstr "no se puede desconstruir un escalar" -#: utils/adt/jsonfuncs.c:2079 +#: utils/adt/jsonfuncs.c:2220 #, c-format msgid "cannot extract elements from a scalar" msgstr "no se pueden extraer elementos de un escalar" -#: utils/adt/jsonfuncs.c:2083 +#: utils/adt/jsonfuncs.c:2224 #, c-format msgid "cannot extract elements from an object" msgstr "no se pudo extraer elementos de un objeto" -#: utils/adt/jsonfuncs.c:2317 utils/adt/jsonfuncs.c:3775 +#: utils/adt/jsonfuncs.c:2458 utils/adt/jsonfuncs.c:3915 #, c-format msgid "cannot call %s on a non-array" msgstr "no se puede invocar %s en un no-array" -#: utils/adt/jsonfuncs.c:2387 utils/adt/jsonfuncs.c:2392 -#: utils/adt/jsonfuncs.c:2409 utils/adt/jsonfuncs.c:2415 +#: utils/adt/jsonfuncs.c:2528 utils/adt/jsonfuncs.c:2533 +#: utils/adt/jsonfuncs.c:2550 utils/adt/jsonfuncs.c:2556 #, c-format msgid "expected JSON array" msgstr "se esperaba un array JSON" -#: utils/adt/jsonfuncs.c:2388 +#: utils/adt/jsonfuncs.c:2529 #, c-format msgid "See the value of key \"%s\"." msgstr "Vea el valor de la llave «%s»." -#: utils/adt/jsonfuncs.c:2410 +#: utils/adt/jsonfuncs.c:2551 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "Vea el elemento %s de la llave «%s»." -#: utils/adt/jsonfuncs.c:2416 +#: utils/adt/jsonfuncs.c:2557 #, c-format msgid "See the array element %s." msgstr "Veo el elemento de array %s." -#: utils/adt/jsonfuncs.c:2451 +#: utils/adt/jsonfuncs.c:2592 #, c-format msgid "malformed JSON array" msgstr "array JSON mal formado" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3278 +#: utils/adt/jsonfuncs.c:3419 #, c-format msgid "first argument of %s must be a row type" msgstr "el primer argumento de %s debe ser un tipo de registro" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3302 +#: utils/adt/jsonfuncs.c:3443 #, c-format msgid "could not determine row type for result of %s" msgstr "no se pudo determinar el tipo de dato para el resultado de %s" -#: utils/adt/jsonfuncs.c:3304 +#: utils/adt/jsonfuncs.c:3445 #, c-format msgid "Provide a non-null record argument, or call the function in the FROM clause using a column definition list." msgstr "Provea un argumento de registro no-nulo, o invoque la función en la cláusula FROM usando una lista de definición de columnas." -#: utils/adt/jsonfuncs.c:3792 utils/adt/jsonfuncs.c:3873 +#: utils/adt/jsonfuncs.c:3932 utils/adt/jsonfuncs.c:4012 #, c-format msgid "argument of %s must be an array of objects" msgstr "el argumento de %s debe ser un array de objetos" -#: utils/adt/jsonfuncs.c:3825 +#: utils/adt/jsonfuncs.c:3965 #, c-format msgid "cannot call %s on an object" msgstr "no se puede invocar %s en un objeto" -#: utils/adt/jsonfuncs.c:4286 utils/adt/jsonfuncs.c:4345 -#: utils/adt/jsonfuncs.c:4425 +#: utils/adt/jsonfuncs.c:4373 utils/adt/jsonfuncs.c:4432 +#: utils/adt/jsonfuncs.c:4512 #, c-format msgid "cannot delete from scalar" msgstr "no se puede eliminar de un escalar" -#: utils/adt/jsonfuncs.c:4430 +#: utils/adt/jsonfuncs.c:4517 #, c-format msgid "cannot delete from object using integer index" msgstr "no se puede eliminar de un objeto usando un índice numérico" -#: utils/adt/jsonfuncs.c:4495 utils/adt/jsonfuncs.c:4653 +#: utils/adt/jsonfuncs.c:4585 utils/adt/jsonfuncs.c:4746 #, c-format msgid "cannot set path in scalar" msgstr "no se puede definir una ruta en un escalar" -#: utils/adt/jsonfuncs.c:4537 utils/adt/jsonfuncs.c:4579 +#: utils/adt/jsonfuncs.c:4627 utils/adt/jsonfuncs.c:4669 #, c-format msgid "null_value_treatment must be \"delete_key\", \"return_target\", \"use_json_null\", or \"raise_exception\"" msgstr "null_value_treatment debe ser «delete_key», «return_target», «use_json_null», o «raise_exception»" -#: utils/adt/jsonfuncs.c:4550 +#: utils/adt/jsonfuncs.c:4640 #, fuzzy, c-format #| msgid "slot name must not be null" msgid "JSON value must not be null" msgstr "el nombre de slot no debe ser null" -#: utils/adt/jsonfuncs.c:4551 +#: utils/adt/jsonfuncs.c:4641 #, c-format msgid "Exception was raised because null_value_treatment is \"raise_exception\"." msgstr "Una excepción fue lanzada porque null_value_treatment es «raise_exception»." -#: utils/adt/jsonfuncs.c:4552 +#: utils/adt/jsonfuncs.c:4642 #, c-format msgid "To avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not passed." msgstr "Para impedir esto, puede cambiar el argumento null_value_treatment o asegurarse que no se pase un nulo SQL." -#: utils/adt/jsonfuncs.c:4607 +#: utils/adt/jsonfuncs.c:4697 #, c-format msgid "cannot delete path in scalar" msgstr "no se puede eliminar una ruta en un escalar" -#: utils/adt/jsonfuncs.c:4776 -#, c-format -msgid "invalid concatenation of jsonb objects" -msgstr "concatenación no válida de objetos jsonb" - -#: utils/adt/jsonfuncs.c:4810 +#: utils/adt/jsonfuncs.c:4913 #, c-format msgid "path element at position %d is null" msgstr "el elemento en la posición %d de la ruta es null" -#: utils/adt/jsonfuncs.c:4896 +#: utils/adt/jsonfuncs.c:4932 utils/adt/jsonfuncs.c:4963 +#: utils/adt/jsonfuncs.c:5030 #, c-format msgid "cannot replace existing key" msgstr "no se puede reemplazar una llave existente" -#: utils/adt/jsonfuncs.c:4897 +#: utils/adt/jsonfuncs.c:4933 utils/adt/jsonfuncs.c:4964 +#, c-format +msgid "The path assumes key is a composite object, but it is a scalar value." +msgstr "" + +#: utils/adt/jsonfuncs.c:5031 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "Intente usar la función jsonb_set para reemplazar el valor de la llave." -#: utils/adt/jsonfuncs.c:4979 +#: utils/adt/jsonfuncs.c:5135 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "el elemento de ruta en la posición %d no es un entero: «%s»" -#: utils/adt/jsonfuncs.c:5098 +#: utils/adt/jsonfuncs.c:5152 +#, fuzzy, c-format +#| msgid "path element at position %d is not an integer: \"%s\"" +msgid "path element at position %d is out of range: %d" +msgstr "el elemento de ruta en la posición %d no es un entero: «%s»" + +#: utils/adt/jsonfuncs.c:5304 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "indicador de tipo errónea, sólo se permiten arrays y tipos escalares" -#: utils/adt/jsonfuncs.c:5105 +#: utils/adt/jsonfuncs.c:5311 #, c-format msgid "flag array element is not a string" msgstr "elemento del array de opciones no es un string" -#: utils/adt/jsonfuncs.c:5106 utils/adt/jsonfuncs.c:5128 +#: utils/adt/jsonfuncs.c:5312 utils/adt/jsonfuncs.c:5334 #, c-format msgid "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all\"." msgstr "Los valores posibles son: «string», «numeric», «boolean», «key» y «all»." -#: utils/adt/jsonfuncs.c:5126 +#: utils/adt/jsonfuncs.c:5332 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "indicador erróneo en array de indicadores: «%s»" @@ -22384,99 +23997,97 @@ msgstr "subíndice de array jsonpath fuera de los bordes" msgid "jsonpath array accessor can only be applied to an array" msgstr "el método de acceso de array jsonpath sólo puede aplicarse a un array" -#: utils/adt/jsonpath_exec.c:874 +#: utils/adt/jsonpath_exec.c:872 #, c-format msgid "jsonpath wildcard member accessor can only be applied to an object" msgstr "el método de acesso comodín de objeto jsonpath sólo puede aplicarse a un objeto" -#: utils/adt/jsonpath_exec.c:1004 +#: utils/adt/jsonpath_exec.c:1002 #, c-format msgid "jsonpath item method .%s() can only be applied to an array" msgstr "el método de ítem jsonpath .%s() sólo puede aplicase a un array" -#: utils/adt/jsonpath_exec.c:1059 +#: utils/adt/jsonpath_exec.c:1055 #, fuzzy, c-format #| msgid "string argument of jsonpath item method .%s() is not a valid representation of a double precision number" msgid "numeric argument of jsonpath item method .%s() is out of range for type double precision" msgstr "el argumento cadena del método de item jsonpath .%s() no es una representación válida de un número de precisión doble" -#: utils/adt/jsonpath_exec.c:1080 +#: utils/adt/jsonpath_exec.c:1076 #, c-format msgid "string argument of jsonpath item method .%s() is not a valid representation of a double precision number" msgstr "el argumento cadena del método de item jsonpath .%s() no es una representación válida de un número de precisión doble" -#: utils/adt/jsonpath_exec.c:1093 +#: utils/adt/jsonpath_exec.c:1089 #, c-format msgid "jsonpath item method .%s() can only be applied to a string or numeric value" msgstr "el método de ítem jsonpath .%s() sólo puede aplicarse a un valor numérico o de cadena" -#: utils/adt/jsonpath_exec.c:1583 +#: utils/adt/jsonpath_exec.c:1579 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "el operando izquiero del operador jsonpath %s no es un valor numérico escalar" -#: utils/adt/jsonpath_exec.c:1590 +#: utils/adt/jsonpath_exec.c:1586 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "el operando derecho del operador jsonpath %s no es un valor numérico escalar" -#: utils/adt/jsonpath_exec.c:1658 +#: utils/adt/jsonpath_exec.c:1654 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "el operando del operador jsonpath unario %s no es un valor numérico" -#: utils/adt/jsonpath_exec.c:1756 +#: utils/adt/jsonpath_exec.c:1752 #, c-format msgid "jsonpath item method .%s() can only be applied to a numeric value" msgstr "el método de ítem jsonpath .%s() sólo puede aplicarse a un valor numérico" -#: utils/adt/jsonpath_exec.c:1796 +#: utils/adt/jsonpath_exec.c:1792 #, c-format -#| msgid "jsonpath item method .%s() can only be applied to an array" msgid "jsonpath item method .%s() can only be applied to a string" msgstr "el método de ítem jsonpath .%s() sólo puede aplicase a una cadena" -#: utils/adt/jsonpath_exec.c:1884 +#: utils/adt/jsonpath_exec.c:1886 #, c-format -#| msgid "datetime format is not dated and not timed" msgid "datetime format is not recognized: \"%s\"" msgstr "el formato de fecha/hora no se reconoce: «%s»" -#: utils/adt/jsonpath_exec.c:1886 +#: utils/adt/jsonpath_exec.c:1888 #, c-format msgid "Use a datetime template argument to specify the input data format." msgstr "Use un argumento de patrón fecha/hora para especificar el formato de entrada del dato." -#: utils/adt/jsonpath_exec.c:1954 +#: utils/adt/jsonpath_exec.c:1956 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "el método de ítem jsonpath .%s() sólo puede ser aplicado a un objeto" -#: utils/adt/jsonpath_exec.c:2137 +#: utils/adt/jsonpath_exec.c:2138 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "no se pudo encontrar la variable jsonpath «%s»" -#: utils/adt/jsonpath_exec.c:2401 +#: utils/adt/jsonpath_exec.c:2402 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "el subíndice de array jsonpath no es un único valor numérico" -#: utils/adt/jsonpath_exec.c:2413 +#: utils/adt/jsonpath_exec.c:2414 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "subíndice de array jsonpath fuera del rango entero" -#: utils/adt/jsonpath_exec.c:2590 -#, c-format -#| msgid "cannot convert value from %s to %s without time zone usage" -msgid "cannot convert value from %s to %s without timezone usage" +#: utils/adt/jsonpath_exec.c:2591 +#, fuzzy, c-format +#| msgid "cannot convert value from %s to %s without timezone usage" +msgid "cannot convert value from %s to %s without time zone usage" msgstr "no se puede convertir el valor de %s a %s sin uso de huso horario" -#: utils/adt/jsonpath_exec.c:2592 -#, c-format -#| msgid "Use *_tz() function for time zone support." -msgid "Use *_tz() function for timezone support." +#: utils/adt/jsonpath_exec.c:2593 +#, fuzzy, c-format +#| msgid "Use *_tz() function for timezone support." +msgid "Use *_tz() function for time zone support." msgstr "Utilice una función *_tz() para el soporte de huso horario." #: utils/adt/levenshtein.c:133 @@ -22539,67 +24150,141 @@ msgstr "datos macaddr8 fuera de rango para convertir a macaddr" msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." msgstr "Sólo las direcciones que tienen FF y FF como valores en el cuarto y quinto bytes desde la izquierda, por ejemplo xx:xx:xx:ff:fe:xx:xx:xx se pueden convertir de macaddr8 a macaddr." -#: utils/adt/misc.c:240 +#: utils/adt/mcxtfuncs.c:204 +#, fuzzy, c-format +#| msgid "must be superuser to alter a type" +msgid "must be a superuser to log memory contexts" +msgstr "debe ser superusuario para alterar un tipo" + +#: utils/adt/misc.c:243 #, c-format msgid "global tablespace never has databases" msgstr "el tablespace global nunca tiene bases de datos" -#: utils/adt/misc.c:262 +#: utils/adt/misc.c:265 #, c-format msgid "%u is not a tablespace OID" msgstr "%u no es un OID de tablespace" -#: utils/adt/misc.c:448 +#: utils/adt/misc.c:455 msgid "unreserved" msgstr "no reservado" -#: utils/adt/misc.c:452 +#: utils/adt/misc.c:459 msgid "unreserved (cannot be function or type name)" msgstr "no reservado (no puede ser nombre de función o de tipo)" -#: utils/adt/misc.c:456 +#: utils/adt/misc.c:463 msgid "reserved (can be function or type name)" msgstr "reservado (puede ser nombre de función o de tipo)" -#: utils/adt/misc.c:460 +#: utils/adt/misc.c:467 msgid "reserved" msgstr "reservado" -#: utils/adt/misc.c:634 utils/adt/misc.c:648 utils/adt/misc.c:687 -#: utils/adt/misc.c:693 utils/adt/misc.c:699 utils/adt/misc.c:722 +#: utils/adt/misc.c:478 +msgid "can be bare label" +msgstr "" + +#: utils/adt/misc.c:483 +msgid "requires AS" +msgstr "" + +#: utils/adt/misc.c:730 utils/adt/misc.c:744 utils/adt/misc.c:783 +#: utils/adt/misc.c:789 utils/adt/misc.c:795 utils/adt/misc.c:818 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "la cadena no es un identificador válido: «%s»" -#: utils/adt/misc.c:636 +#: utils/adt/misc.c:732 #, c-format msgid "String has unclosed double quotes." msgstr "La cadena tiene comillas dobles sin cerrar." -#: utils/adt/misc.c:650 +#: utils/adt/misc.c:746 #, c-format msgid "Quoted identifier must not be empty." msgstr "El identificador en comillas no debe ser vacío." -#: utils/adt/misc.c:689 +#: utils/adt/misc.c:785 #, c-format msgid "No valid identifier before \".\"." msgstr "No hay un identificador válido antes de «.»." -#: utils/adt/misc.c:695 -#, c-format -msgid "No valid identifier after \".\"." -msgstr "No hay un identificador válido después de «.»." +#: utils/adt/misc.c:791 +#, c-format +msgid "No valid identifier after \".\"." +msgstr "No hay un identificador válido después de «.»." + +#: utils/adt/misc.c:849 +#, c-format +msgid "log format \"%s\" is not supported" +msgstr "el formato de log «%s» no está soportado" + +#: utils/adt/misc.c:850 +#, c-format +msgid "The supported log formats are \"stderr\" and \"csvlog\"." +msgstr "Los formatos de registro admitidos son \"stderr\" y \"csvlog\"." + +#: utils/adt/multirangetypes.c:147 utils/adt/multirangetypes.c:160 +#: utils/adt/multirangetypes.c:189 utils/adt/multirangetypes.c:259 +#: utils/adt/multirangetypes.c:283 +#, fuzzy, c-format +#| msgid "malformed range literal: \"%s\"" +msgid "malformed multirange literal: \"%s\"" +msgstr "literal de rango mal formado: «%s»" + +#: utils/adt/multirangetypes.c:149 +#, fuzzy, c-format +#| msgid "Missing left parenthesis." +msgid "Missing left bracket." +msgstr "Falta paréntesis izquierdo." + +#: utils/adt/multirangetypes.c:191 +#, fuzzy, c-format +#| msgid "unexpected array start" +msgid "Expected range start." +msgstr "inicio de array inesperado" + +#: utils/adt/multirangetypes.c:261 +#, fuzzy, c-format +#| msgid "unexpected end of line" +msgid "Expected comma or end of multirange." +msgstr "fin de línea inesperado" + +#: utils/adt/multirangetypes.c:285 +#, fuzzy, c-format +#| msgid "Junk after closing right brace." +msgid "Junk after right bracket." +msgstr "Basura después de la llave derecha de cierre." + +#: utils/adt/multirangetypes.c:971 +#, fuzzy, c-format +#| msgid "thresholds must be one-dimensional array" +msgid "multiranges cannot be constructed from multi-dimensional arrays" +msgstr "los umbrales deben ser un array unidimensional" + +#: utils/adt/multirangetypes.c:977 utils/adt/multirangetypes.c:1042 +#, fuzzy, c-format +#| msgid "type %s is not a composite type" +msgid "type %u does not match constructor type" +msgstr "el tipo %s no es un tipo compuesto" -#: utils/adt/misc.c:753 +#: utils/adt/multirangetypes.c:999 #, c-format -msgid "log format \"%s\" is not supported" -msgstr "el formato de log «%s» no está soportado" +msgid "multirange values cannot contain NULL members" +msgstr "" + +#: utils/adt/multirangetypes.c:1349 +#, fuzzy, c-format +#| msgid "%s must be called inside a transaction" +msgid "range_agg must be called with a range" +msgstr "%s no debe ser ejecutado dentro de una transacción" -#: utils/adt/misc.c:754 +#: utils/adt/multirangetypes.c:1420 #, c-format -msgid "The supported log formats are \"stderr\" and \"csvlog\"." -msgstr "Los formatos de registro admitidos son \"stderr\" y \"csvlog\"." +msgid "range_intersect_agg must be called with a multirange" +msgstr "" #: utils/adt/network.c:111 #, c-format @@ -22675,88 +24360,149 @@ msgstr "el resultado está fuera de rango" msgid "cannot subtract inet values of different sizes" msgstr "no se puede sustraer valores inet de distintos tamaños" -#: utils/adt/numeric.c:827 +#: utils/adt/numeric.c:975 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "el signo no es válido en el valor «numeric» externo" -#: utils/adt/numeric.c:833 +#: utils/adt/numeric.c:981 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "la escala no es válida en el valor «numeric» externo" -#: utils/adt/numeric.c:842 +#: utils/adt/numeric.c:990 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "hay un dígito no válido en el valor «numeric» externo" -#: utils/adt/numeric.c:1040 utils/adt/numeric.c:1054 +#: utils/adt/numeric.c:1203 utils/adt/numeric.c:1217 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "la precisión %d de NUMERIC debe estar entre 1 y %d" -#: utils/adt/numeric.c:1045 +#: utils/adt/numeric.c:1208 #, c-format msgid "NUMERIC scale %d must be between 0 and precision %d" msgstr "la escala de NUMERIC, %d, debe estar entre 0 y la precisión %d" -#: utils/adt/numeric.c:1063 +#: utils/adt/numeric.c:1226 #, c-format msgid "invalid NUMERIC type modifier" msgstr "modificador de tipo NUMERIC no es válido" -#: utils/adt/numeric.c:1395 +#: utils/adt/numeric.c:1584 #, c-format msgid "start value cannot be NaN" msgstr "el valor de inicio no puede ser NaN" -#: utils/adt/numeric.c:1400 +#: utils/adt/numeric.c:1588 +#, fuzzy, c-format +#| msgid "start value cannot be NaN" +msgid "start value cannot be infinity" +msgstr "el valor de inicio no puede ser NaN" + +#: utils/adt/numeric.c:1595 #, c-format msgid "stop value cannot be NaN" msgstr "el valor de término no puede ser NaN" -#: utils/adt/numeric.c:1410 +#: utils/adt/numeric.c:1599 +#, fuzzy, c-format +#| msgid "stop value cannot be NaN" +msgid "stop value cannot be infinity" +msgstr "el valor de término no puede ser NaN" + +#: utils/adt/numeric.c:1612 #, c-format msgid "step size cannot be NaN" msgstr "el tamaño de paso no puede ser NaN" -#: utils/adt/numeric.c:2958 utils/adt/numeric.c:6064 utils/adt/numeric.c:6522 -#: utils/adt/numeric.c:8802 utils/adt/numeric.c:9240 utils/adt/numeric.c:9354 -#: utils/adt/numeric.c:9427 +#: utils/adt/numeric.c:1616 +#, fuzzy, c-format +#| msgid "step size cannot be NaN" +msgid "step size cannot be infinity" +msgstr "el tamaño de paso no puede ser NaN" + +#: utils/adt/numeric.c:3490 +#, fuzzy, c-format +#| msgid "zero raised to a negative power is undefined" +msgid "factorial of a negative number is undefined" +msgstr "cero elevado a una potencia negativa es indefinido" + +#: utils/adt/numeric.c:3500 utils/adt/numeric.c:6924 utils/adt/numeric.c:7408 +#: utils/adt/numeric.c:9783 utils/adt/numeric.c:10221 utils/adt/numeric.c:10335 +#: utils/adt/numeric.c:10408 #, c-format msgid "value overflows numeric format" msgstr "el valor excede el formato numeric" -#: utils/adt/numeric.c:3417 +#: utils/adt/numeric.c:4185 #, c-format msgid "cannot convert NaN to integer" msgstr "no se puede convertir NaN a entero" -#: utils/adt/numeric.c:3500 +#: utils/adt/numeric.c:4189 +#, fuzzy, c-format +#| msgid "cannot convert infinity to numeric" +msgid "cannot convert infinity to integer" +msgstr "no se puede convertir infinito a numeric" + +#: utils/adt/numeric.c:4263 #, c-format msgid "cannot convert NaN to bigint" msgstr "no se puede convertir NaN a bigint" -#: utils/adt/numeric.c:3545 +#: utils/adt/numeric.c:4267 +#, fuzzy, c-format +#| msgid "cannot convert infinity to numeric" +msgid "cannot convert infinity to bigint" +msgstr "no se puede convertir infinito a numeric" + +#: utils/adt/numeric.c:4304 #, c-format msgid "cannot convert NaN to smallint" msgstr "no se puede convertir NaN a smallint" -#: utils/adt/numeric.c:3582 utils/adt/numeric.c:3653 -#, c-format -msgid "cannot convert infinity to numeric" +#: utils/adt/numeric.c:4308 +#, fuzzy, c-format +#| msgid "cannot convert infinity to numeric" +msgid "cannot convert infinity to smallint" +msgstr "no se puede convertir infinito a numeric" + +#: utils/adt/numeric.c:4499 +#, fuzzy, c-format +#| msgid "cannot convert NaN to bigint" +msgid "cannot convert NaN to pg_lsn" +msgstr "no se puede convertir NaN a bigint" + +#: utils/adt/numeric.c:4503 +#, fuzzy, c-format +#| msgid "cannot convert infinity to numeric" +msgid "cannot convert infinity to pg_lsn" msgstr "no se puede convertir infinito a numeric" -#: utils/adt/numeric.c:6606 +#: utils/adt/numeric.c:4512 +#, fuzzy, c-format +#| msgid "bigint out of range" +msgid "pg_lsn out of range" +msgstr "bigint fuera de rango" + +#: utils/adt/numeric.c:7492 utils/adt/numeric.c:7539 #, c-format msgid "numeric field overflow" msgstr "desbordamiento de campo numeric" -#: utils/adt/numeric.c:6607 +#: utils/adt/numeric.c:7493 #, c-format msgid "A field with precision %d, scale %d must round to an absolute value less than %s%d." msgstr "Un campo con precisión %d, escala %d debe redondear a un valor absoluto menor que %s%d." +#: utils/adt/numeric.c:7540 +#, fuzzy, c-format +#| msgid "A field with precision %d, scale %d must round to an absolute value less than %s%d." +msgid "A field with precision %d, scale %d cannot hold an infinite value." +msgstr "Un campo con precisión %d, escala %d debe redondear a un valor absoluto menor que %s%d." + #: utils/adt/numutils.c:154 #, c-format msgid "value \"%s\" is out of range for 8-bit integer" @@ -22767,22 +24513,22 @@ msgstr "el valor «%s» está fuera de rango para un entero de 8 bits" msgid "invalid oidvector data" msgstr "datos de oidvector no válidos" -#: utils/adt/oracle_compat.c:896 +#: utils/adt/oracle_compat.c:970 #, c-format msgid "requested character too large" msgstr "el carácter solicitado es demasiado grande" -#: utils/adt/oracle_compat.c:946 utils/adt/oracle_compat.c:1008 +#: utils/adt/oracle_compat.c:1020 utils/adt/oracle_compat.c:1082 #, c-format msgid "requested character too large for encoding: %d" msgstr "el carácter pedido es demasiado largo para el encoding: %d" -#: utils/adt/oracle_compat.c:987 +#: utils/adt/oracle_compat.c:1061 #, c-format msgid "requested character not valid for encoding: %d" msgstr "el carácter pedido no es válido para el encoding: %d" -#: utils/adt/oracle_compat.c:1001 +#: utils/adt/oracle_compat.c:1075 #, c-format msgid "null character not permitted" msgstr "el carácter nulo no está permitido" @@ -22793,202 +24539,220 @@ msgstr "el carácter nulo no está permitido" msgid "percentile value %g is not between 0 and 1" msgstr "el valor de percentil %g no está entre 0 y 1" -#: utils/adt/pg_locale.c:1262 +#: utils/adt/pg_locale.c:1228 #, c-format msgid "Apply system library package updates." msgstr "Aplique actualizaciones de paquetes de bibliotecas del sistema." -#: utils/adt/pg_locale.c:1477 +#: utils/adt/pg_locale.c:1442 #, c-format msgid "could not create locale \"%s\": %m" msgstr "no se pudo crear la configuración regional «%s»: %m" -#: utils/adt/pg_locale.c:1480 +#: utils/adt/pg_locale.c:1445 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "El sistema operativo no pudo encontrar datos de configuración regional para la configuración «%s»." -#: utils/adt/pg_locale.c:1582 +#: utils/adt/pg_locale.c:1547 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "los ordenamientos (collation) con valores collate y ctype diferentes no están soportados en esta plataforma" -#: utils/adt/pg_locale.c:1591 +#: utils/adt/pg_locale.c:1556 #, c-format msgid "collation provider LIBC is not supported on this platform" msgstr "el proveedor de ordenamientos LIBC no está soportado en esta plataforma" -#: utils/adt/pg_locale.c:1603 +#: utils/adt/pg_locale.c:1568 #, c-format msgid "collations with different collate and ctype values are not supported by ICU" msgstr "los ordenamientos (collation) con valores collate y ctype diferentes no están soportados por ICU" -#: utils/adt/pg_locale.c:1609 utils/adt/pg_locale.c:1696 -#: utils/adt/pg_locale.c:1969 +#: utils/adt/pg_locale.c:1574 utils/adt/pg_locale.c:1661 +#: utils/adt/pg_locale.c:1940 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "no se pudo abrir el «collator» para la configuración regional «%s»: %s" -#: utils/adt/pg_locale.c:1623 +#: utils/adt/pg_locale.c:1588 #, c-format msgid "ICU is not supported in this build" msgstr "ICU no está soportado en este servidor" -#: utils/adt/pg_locale.c:1624 -#, c-format -msgid "You need to rebuild PostgreSQL using --with-icu." -msgstr "Necesita reconstruir PostgreSQL usando --with-icu." - -#: utils/adt/pg_locale.c:1644 +#: utils/adt/pg_locale.c:1609 #, c-format msgid "collation \"%s\" has no actual version, but a version was specified" msgstr "la extensión «%s» no tiene versión actual, pero se especificó una versión" -#: utils/adt/pg_locale.c:1651 +#: utils/adt/pg_locale.c:1616 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "el ordenamiento (collation) «%s» tiene una discordancia de versión" -#: utils/adt/pg_locale.c:1653 +#: utils/adt/pg_locale.c:1618 #, c-format msgid "The collation in the database was created using version %s, but the operating system provides version %s." msgstr "El ordenamiento en la base de datos fue creado usando la versión %s, pero el sistema operativo provee la versión %s." -#: utils/adt/pg_locale.c:1656 +#: utils/adt/pg_locale.c:1621 #, c-format msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." msgstr "Reconstruya todos los objetos afectados por este ordenamiento y ejecute ALTER COLLATION %s REFRESH VERSION, o construya PostgreSQL con la versión correcta de la biblioteca." -#: utils/adt/pg_locale.c:1747 +#: utils/adt/pg_locale.c:1692 +#, fuzzy, c-format +#| msgid "could not create locale \"%s\": %m" +msgid "could not load locale \"%s\"" +msgstr "no se pudo crear la configuración regional «%s»: %m" + +#: utils/adt/pg_locale.c:1717 #, c-format -#| msgid "could not start process for command \"%s\": error code %lu" msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "no se pudo obtener la versión de «collation» para la configuración regional «%s»: código de error %lu" -#: utils/adt/pg_locale.c:1784 +#: utils/adt/pg_locale.c:1755 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "la codificación «%s» no estæ soportada por ICU" -#: utils/adt/pg_locale.c:1791 +#: utils/adt/pg_locale.c:1762 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "no se pudo abrir el conversor ICU para la codificación «%s»: %s" -#: utils/adt/pg_locale.c:1822 utils/adt/pg_locale.c:1831 -#: utils/adt/pg_locale.c:1860 utils/adt/pg_locale.c:1870 +#: utils/adt/pg_locale.c:1793 utils/adt/pg_locale.c:1802 +#: utils/adt/pg_locale.c:1831 utils/adt/pg_locale.c:1841 #, c-format msgid "%s failed: %s" msgstr "%s falló: %s" -#: utils/adt/pg_locale.c:2142 +#: utils/adt/pg_locale.c:2113 #, c-format msgid "invalid multibyte character for locale" msgstr "el carácter multibyte no es válido para esta configuración regional" -#: utils/adt/pg_locale.c:2143 +#: utils/adt/pg_locale.c:2114 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "La configuración regional LC_CTYPE del servidor es probablemente incompatible con la codificación de la base de datos." +#: utils/adt/pg_lsn.c:263 +#, fuzzy, c-format +#| msgid "cannot convert NaN to bigint" +msgid "cannot add NaN to pg_lsn" +msgstr "no se puede convertir NaN a bigint" + +#: utils/adt/pg_lsn.c:297 +#, fuzzy, c-format +#| msgid "cannot subtract infinite dates" +msgid "cannot subtract NaN from pg_lsn" +msgstr "no se pueden restar fechas infinitas" + #: utils/adt/pg_upgrade_support.c:29 #, c-format msgid "function can only be called when server is in binary upgrade mode" msgstr "la función sólo puede invocarse cuando el servidor está en modo de actualización binaria" -#: utils/adt/pgstatfuncs.c:500 +#: utils/adt/pgstatfuncs.c:503 #, c-format msgid "invalid command name: \"%s\"" msgstr "nombre de orden no válido: «%s»" -#: utils/adt/pseudotypes.c:57 utils/adt/pseudotypes.c:91 +#: utils/adt/pseudotypes.c:58 utils/adt/pseudotypes.c:92 #, c-format msgid "cannot display a value of type %s" msgstr "no se puede desplegar un valor de tipo %s" -#: utils/adt/pseudotypes.c:283 +#: utils/adt/pseudotypes.c:321 #, c-format msgid "cannot accept a value of a shell type" msgstr "no se puede aceptar un valor de un tipo inconcluso" -#: utils/adt/pseudotypes.c:293 +#: utils/adt/pseudotypes.c:331 #, c-format msgid "cannot display a value of a shell type" msgstr "no se puede desplegar un valor de un tipo inconcluso" -#: utils/adt/rangetypes.c:406 +#: utils/adt/rangetypes.c:404 #, c-format msgid "range constructor flags argument must not be null" msgstr "el argumento de opciones del constructor de rango no debe ser null" -#: utils/adt/rangetypes.c:993 +#: utils/adt/rangetypes.c:1003 #, c-format msgid "result of range difference would not be contiguous" msgstr "el resultado de la diferencia de rangos no sería contiguo" -#: utils/adt/rangetypes.c:1054 +#: utils/adt/rangetypes.c:1064 #, c-format msgid "result of range union would not be contiguous" msgstr "el resultado de la unión de rangos no sería contiguo" -#: utils/adt/rangetypes.c:1600 +#: utils/adt/rangetypes.c:1214 +#, c-format +msgid "range_intersect_agg must be called with a range" +msgstr "" + +#: utils/adt/rangetypes.c:1689 #, c-format msgid "range lower bound must be less than or equal to range upper bound" msgstr "el límite inferior del rango debe ser menor o igual al límite superior del rango" -#: utils/adt/rangetypes.c:1983 utils/adt/rangetypes.c:1996 -#: utils/adt/rangetypes.c:2010 +#: utils/adt/rangetypes.c:2112 utils/adt/rangetypes.c:2125 +#: utils/adt/rangetypes.c:2139 #, c-format msgid "invalid range bound flags" msgstr "opciones de bordes de rango no válidas" -#: utils/adt/rangetypes.c:1984 utils/adt/rangetypes.c:1997 -#: utils/adt/rangetypes.c:2011 +#: utils/adt/rangetypes.c:2113 utils/adt/rangetypes.c:2126 +#: utils/adt/rangetypes.c:2140 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "Los valores aceptables son «[]», «[)», «(]» y «()»." -#: utils/adt/rangetypes.c:2076 utils/adt/rangetypes.c:2093 -#: utils/adt/rangetypes.c:2106 utils/adt/rangetypes.c:2124 -#: utils/adt/rangetypes.c:2135 utils/adt/rangetypes.c:2179 -#: utils/adt/rangetypes.c:2187 +#: utils/adt/rangetypes.c:2205 utils/adt/rangetypes.c:2222 +#: utils/adt/rangetypes.c:2235 utils/adt/rangetypes.c:2253 +#: utils/adt/rangetypes.c:2264 utils/adt/rangetypes.c:2308 +#: utils/adt/rangetypes.c:2316 #, c-format msgid "malformed range literal: \"%s\"" msgstr "literal de rango mal formado: «%s»" -#: utils/adt/rangetypes.c:2078 +#: utils/adt/rangetypes.c:2207 #, c-format msgid "Junk after \"empty\" key word." msgstr "Basura a continuación de la palabra «empty»." -#: utils/adt/rangetypes.c:2095 +#: utils/adt/rangetypes.c:2224 #, c-format msgid "Missing left parenthesis or bracket." msgstr "Falta paréntesis o corchete izquierdo." -#: utils/adt/rangetypes.c:2108 +#: utils/adt/rangetypes.c:2237 #, c-format msgid "Missing comma after lower bound." msgstr "Coma faltante después del límite inferior." -#: utils/adt/rangetypes.c:2126 +#: utils/adt/rangetypes.c:2255 #, c-format msgid "Too many commas." msgstr "Demasiadas comas." -#: utils/adt/rangetypes.c:2137 +#: utils/adt/rangetypes.c:2266 #, c-format msgid "Junk after right parenthesis or bracket." msgstr "Basura después del paréntesis o corchete derecho." -#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4493 +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4560 #, c-format msgid "regular expression failed: %s" msgstr "la expresión regular falló: %s" #: utils/adt/regexp.c:426 -#, c-format -msgid "invalid regular expression option: \"%c\"" +#, fuzzy, c-format +#| msgid "invalid regular expression option: \"%c\"" +msgid "invalid regular expression option: \"%.*s\"" msgstr "opción de expresión regular no válida: «%c»" #: utils/adt/regexp.c:836 @@ -23012,327 +24776,310 @@ msgstr "En su lugar, utilice la función regexp_matches." msgid "too many regular expression matches" msgstr "demasiadas coincidencias de la expresión regular" -#: utils/adt/regproc.c:107 +#: utils/adt/regproc.c:105 #, c-format msgid "more than one function named \"%s\"" msgstr "existe más de una función llamada «%s»" -#: utils/adt/regproc.c:525 +#: utils/adt/regproc.c:542 #, c-format msgid "more than one operator named %s" msgstr "existe más de un operador llamado %s" -#: utils/adt/regproc.c:692 utils/adt/regproc.c:733 gram.y:8223 -#, c-format -msgid "missing argument" -msgstr "falta un argumento" - -#: utils/adt/regproc.c:693 utils/adt/regproc.c:734 gram.y:8224 -#, c-format -msgid "Use NONE to denote the missing argument of a unary operator." -msgstr "Use NONE para denotar el argumento faltante de un operador unario." - -#: utils/adt/regproc.c:697 utils/adt/regproc.c:738 utils/adt/regproc.c:2018 -#: utils/adt/ruleutils.c:9299 utils/adt/ruleutils.c:9468 +#: utils/adt/regproc.c:714 utils/adt/regproc.c:755 utils/adt/regproc.c:2054 +#: utils/adt/ruleutils.c:9642 utils/adt/ruleutils.c:9811 #, c-format msgid "too many arguments" msgstr "demasiados argumentos" -#: utils/adt/regproc.c:698 utils/adt/regproc.c:739 +#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 #, c-format msgid "Provide two argument types for operator." msgstr "Provea dos tipos de argumento para un operador." -#: utils/adt/regproc.c:1602 utils/adt/regproc.c:1626 utils/adt/regproc.c:1727 -#: utils/adt/regproc.c:1751 utils/adt/regproc.c:1853 utils/adt/regproc.c:1858 -#: utils/adt/varlena.c:3642 utils/adt/varlena.c:3647 +#: utils/adt/regproc.c:1638 utils/adt/regproc.c:1662 utils/adt/regproc.c:1763 +#: utils/adt/regproc.c:1787 utils/adt/regproc.c:1889 utils/adt/regproc.c:1894 +#: utils/adt/varlena.c:3709 utils/adt/varlena.c:3714 #, c-format msgid "invalid name syntax" msgstr "la sintaxis de nombre no es válida" -#: utils/adt/regproc.c:1916 +#: utils/adt/regproc.c:1952 #, c-format msgid "expected a left parenthesis" msgstr "se esperaba un paréntesis izquierdo" -#: utils/adt/regproc.c:1932 +#: utils/adt/regproc.c:1968 #, c-format msgid "expected a right parenthesis" msgstr "se esperaba un paréntesis derecho" -#: utils/adt/regproc.c:1951 +#: utils/adt/regproc.c:1987 #, c-format msgid "expected a type name" msgstr "se esperaba un nombre de tipo" -#: utils/adt/regproc.c:1983 +#: utils/adt/regproc.c:2019 #, c-format msgid "improper type name" msgstr "el nombre de tipo no es válido" -#: utils/adt/ri_triggers.c:296 utils/adt/ri_triggers.c:1537 -#: utils/adt/ri_triggers.c:2470 +#: utils/adt/ri_triggers.c:300 utils/adt/ri_triggers.c:1545 +#: utils/adt/ri_triggers.c:2530 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "inserción o actualización en la tabla «%s» viola la llave foránea «%s»" -#: utils/adt/ri_triggers.c:299 utils/adt/ri_triggers.c:1540 +#: utils/adt/ri_triggers.c:303 utils/adt/ri_triggers.c:1548 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL no permite la mezcla de valores de clave nulos y no nulos." -#: utils/adt/ri_triggers.c:1940 +#: utils/adt/ri_triggers.c:1965 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "la función «%s» debe ser ejecutada en INSERT" -#: utils/adt/ri_triggers.c:1946 +#: utils/adt/ri_triggers.c:1971 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "la función «%s» debe ser ejecutada en UPDATE" -#: utils/adt/ri_triggers.c:1952 +#: utils/adt/ri_triggers.c:1977 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "la función «%s» debe ser ejecutada en DELETE" -#: utils/adt/ri_triggers.c:1975 +#: utils/adt/ri_triggers.c:2000 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "no hay una entrada en pg_constraint para el trigger «%s» en tabla «%s»" -#: utils/adt/ri_triggers.c:1977 +#: utils/adt/ri_triggers.c:2002 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "Elimine este trigger de integridad referencial y sus pares, y utilice ALTER TABLE ADD CONSTRAINT." -#: utils/adt/ri_triggers.c:2007 gram.y:3818 -#, c-format -msgid "MATCH PARTIAL not yet implemented" -msgstr "MATCH PARTIAL no está implementada" - -#: utils/adt/ri_triggers.c:2295 +#: utils/adt/ri_triggers.c:2355 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "la consulta de integridad referencial en «%s» de la restricción «%s» en «%s» entregó un resultado inesperado" -#: utils/adt/ri_triggers.c:2299 +#: utils/adt/ri_triggers.c:2359 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Esto probablemente es causado por una regla que reescribió la consulta." -#: utils/adt/ri_triggers.c:2460 +#: utils/adt/ri_triggers.c:2520 #, c-format msgid "removing partition \"%s\" violates foreign key constraint \"%s\"" msgstr "eliminar la partición «%s» viola la llave foránea «%s»" -#: utils/adt/ri_triggers.c:2463 utils/adt/ri_triggers.c:2488 +#: utils/adt/ri_triggers.c:2523 utils/adt/ri_triggers.c:2548 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "La llave (%s)=(%s) todavía es referida desde la tabla «%s»." -#: utils/adt/ri_triggers.c:2474 +#: utils/adt/ri_triggers.c:2534 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "La llave (%s)=(%s) no está presente en la tabla «%s»." -#: utils/adt/ri_triggers.c:2477 +#: utils/adt/ri_triggers.c:2537 #, c-format msgid "Key is not present in table \"%s\"." msgstr "La llave no está presente en la tabla «%s»." -#: utils/adt/ri_triggers.c:2483 +#: utils/adt/ri_triggers.c:2543 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "update o delete en «%s» viola la llave foránea «%s» en la tabla «%s»" -#: utils/adt/ri_triggers.c:2491 +#: utils/adt/ri_triggers.c:2551 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "La llave todavía es referida desde la tabla «%s»." -#: utils/adt/rowtypes.c:104 utils/adt/rowtypes.c:482 +#: utils/adt/rowtypes.c:105 utils/adt/rowtypes.c:483 #, c-format msgid "input of anonymous composite types is not implemented" msgstr "el ingreso de tipos compuestos anónimos no está implementado" -#: utils/adt/rowtypes.c:156 utils/adt/rowtypes.c:185 utils/adt/rowtypes.c:208 -#: utils/adt/rowtypes.c:216 utils/adt/rowtypes.c:268 utils/adt/rowtypes.c:276 +#: utils/adt/rowtypes.c:157 utils/adt/rowtypes.c:186 utils/adt/rowtypes.c:209 +#: utils/adt/rowtypes.c:217 utils/adt/rowtypes.c:269 utils/adt/rowtypes.c:277 #, c-format msgid "malformed record literal: \"%s\"" msgstr "literal de record mal formado: «%s»" -#: utils/adt/rowtypes.c:157 +#: utils/adt/rowtypes.c:158 #, c-format msgid "Missing left parenthesis." msgstr "Falta paréntesis izquierdo." -#: utils/adt/rowtypes.c:186 +#: utils/adt/rowtypes.c:187 #, c-format msgid "Too few columns." msgstr "Muy pocas columnas." -#: utils/adt/rowtypes.c:269 +#: utils/adt/rowtypes.c:270 #, c-format msgid "Too many columns." msgstr "Demasiadas columnas." -#: utils/adt/rowtypes.c:277 +#: utils/adt/rowtypes.c:278 #, c-format msgid "Junk after right parenthesis." msgstr "Basura después del paréntesis derecho." -#: utils/adt/rowtypes.c:531 +#: utils/adt/rowtypes.c:532 #, c-format msgid "wrong number of columns: %d, expected %d" msgstr "número de columnas erróneo: %d, se esperaban %d" -#: utils/adt/rowtypes.c:559 +#: utils/adt/rowtypes.c:574 #, c-format -msgid "wrong data type: %u, expected %u" -msgstr "tipo de dato erróneo: %u, se esperaba %u" +msgid "binary data has type %u (%s) instead of expected %u (%s) in record column %d" +msgstr "" -#: utils/adt/rowtypes.c:620 +#: utils/adt/rowtypes.c:641 #, c-format msgid "improper binary format in record column %d" msgstr "formato binario incorrecto en la columna record %d" -#: utils/adt/rowtypes.c:911 utils/adt/rowtypes.c:1157 utils/adt/rowtypes.c:1415 -#: utils/adt/rowtypes.c:1661 +#: utils/adt/rowtypes.c:932 utils/adt/rowtypes.c:1178 utils/adt/rowtypes.c:1436 +#: utils/adt/rowtypes.c:1682 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "no se pueden comparar los tipos de columnas disímiles %s y %s en la columna %d" -#: utils/adt/rowtypes.c:1002 utils/adt/rowtypes.c:1227 -#: utils/adt/rowtypes.c:1512 utils/adt/rowtypes.c:1697 +#: utils/adt/rowtypes.c:1023 utils/adt/rowtypes.c:1248 +#: utils/adt/rowtypes.c:1533 utils/adt/rowtypes.c:1718 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "no se pueden comparar registros con cantidad distinta de columnas" -#: utils/adt/ruleutils.c:4821 +#: utils/adt/ruleutils.c:5069 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "la regla «%s» tiene el tipo de evento no soportado %d" -#: utils/adt/timestamp.c:107 +#: utils/adt/timestamp.c:109 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "la precisión de TIMESTAMP(%d)%s no debe ser negativa" -#: utils/adt/timestamp.c:113 +#: utils/adt/timestamp.c:115 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "la precisión de TIMESTAMP(%d)%s fue reducida al máximo permitido, %d" -#: utils/adt/timestamp.c:176 utils/adt/timestamp.c:434 utils/misc/guc.c:11901 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12392 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp fuera de rango: «%s»" -#: utils/adt/timestamp.c:372 +#: utils/adt/timestamp.c:374 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "la precisión de timestamp(%d) debe estar entre %d y %d" -#: utils/adt/timestamp.c:496 +#: utils/adt/timestamp.c:498 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "Los husos horarios numéricos deben tener «-» o «+» como su primer carácter." -#: utils/adt/timestamp.c:509 +#: utils/adt/timestamp.c:511 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "huso horario numérico «%s» fuera de rango" -#: utils/adt/timestamp.c:601 utils/adt/timestamp.c:611 -#: utils/adt/timestamp.c:619 +#: utils/adt/timestamp.c:607 utils/adt/timestamp.c:617 +#: utils/adt/timestamp.c:625 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestamp fuera de rango: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:720 +#: utils/adt/timestamp.c:726 #, c-format msgid "timestamp cannot be NaN" msgstr "el timestamp no puede ser NaN" -#: utils/adt/timestamp.c:738 utils/adt/timestamp.c:750 +#: utils/adt/timestamp.c:744 utils/adt/timestamp.c:756 #, c-format msgid "timestamp out of range: \"%g\"" msgstr "timestamp fuera de rango: «%g»" -#: utils/adt/timestamp.c:935 utils/adt/timestamp.c:1509 -#: utils/adt/timestamp.c:1944 utils/adt/timestamp.c:3042 -#: utils/adt/timestamp.c:3047 utils/adt/timestamp.c:3052 -#: utils/adt/timestamp.c:3102 utils/adt/timestamp.c:3109 -#: utils/adt/timestamp.c:3116 utils/adt/timestamp.c:3136 -#: utils/adt/timestamp.c:3143 utils/adt/timestamp.c:3150 -#: utils/adt/timestamp.c:3180 utils/adt/timestamp.c:3188 -#: utils/adt/timestamp.c:3232 utils/adt/timestamp.c:3659 -#: utils/adt/timestamp.c:3784 utils/adt/timestamp.c:4244 -#, c-format -msgid "interval out of range" -msgstr "interval fuera de rango" - -#: utils/adt/timestamp.c:1062 utils/adt/timestamp.c:1095 +#: utils/adt/timestamp.c:1068 utils/adt/timestamp.c:1101 #, c-format msgid "invalid INTERVAL type modifier" msgstr "modificador de tipo INTERVAL no válido" -#: utils/adt/timestamp.c:1078 +#: utils/adt/timestamp.c:1084 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "la precisión de INTERVAL(%d) no debe ser negativa" -#: utils/adt/timestamp.c:1084 +#: utils/adt/timestamp.c:1090 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "la precisión de INTERVAL(%d) fue reducida al máximo permitido, %d" -#: utils/adt/timestamp.c:1466 +#: utils/adt/timestamp.c:1472 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "la precisión de interval(%d) debe estar entre %d y %d" -#: utils/adt/timestamp.c:2643 +#: utils/adt/timestamp.c:2660 #, c-format msgid "cannot subtract infinite timestamps" msgstr "no se pueden restar timestamps infinitos" -#: utils/adt/timestamp.c:3912 utils/adt/timestamp.c:4505 -#: utils/adt/timestamp.c:4667 utils/adt/timestamp.c:4688 +#: utils/adt/timestamp.c:3837 utils/adt/timestamp.c:4015 +#, fuzzy, c-format +#| msgid "bigint out of range" +msgid "origin out of range" +msgstr "bigint fuera de rango" + +#: utils/adt/timestamp.c:3842 utils/adt/timestamp.c:4020 +#, c-format +msgid "timestamps cannot be binned into intervals containing months or years" +msgstr "" + +#: utils/adt/timestamp.c:3973 utils/adt/timestamp.c:4610 +#: utils/adt/timestamp.c:4810 utils/adt/timestamp.c:4857 #, c-format msgid "timestamp units \"%s\" not supported" msgstr "las unidades de timestamp «%s» no están soportadas" -#: utils/adt/timestamp.c:3926 utils/adt/timestamp.c:4459 -#: utils/adt/timestamp.c:4698 +#: utils/adt/timestamp.c:3987 utils/adt/timestamp.c:4564 +#: utils/adt/timestamp.c:4867 #, c-format msgid "timestamp units \"%s\" not recognized" msgstr "las unidades de timestamp «%s» no son reconocidas" -#: utils/adt/timestamp.c:4056 utils/adt/timestamp.c:4500 -#: utils/adt/timestamp.c:4863 utils/adt/timestamp.c:4885 +#: utils/adt/timestamp.c:4161 utils/adt/timestamp.c:4605 +#: utils/adt/timestamp.c:5081 utils/adt/timestamp.c:5129 #, c-format msgid "timestamp with time zone units \"%s\" not supported" msgstr "las unidades de timestamp with time zone «%s» no están soportadas" -#: utils/adt/timestamp.c:4073 utils/adt/timestamp.c:4454 -#: utils/adt/timestamp.c:4894 +#: utils/adt/timestamp.c:4178 utils/adt/timestamp.c:4559 +#: utils/adt/timestamp.c:5138 #, c-format msgid "timestamp with time zone units \"%s\" not recognized" msgstr "las unidades de timestamp with time zone «%s» no son reconocidas" -#: utils/adt/timestamp.c:4231 +#: utils/adt/timestamp.c:4336 #, c-format msgid "interval units \"%s\" not supported because months usually have fractional weeks" msgstr "las unidades de intervalo «%s» no están soportadas porque los meses normalmente tienen semanas fraccionales" -#: utils/adt/timestamp.c:4237 utils/adt/timestamp.c:4988 +#: utils/adt/timestamp.c:4342 utils/adt/timestamp.c:5261 #, c-format msgid "interval units \"%s\" not supported" msgstr "las unidades de interval «%s» no están soportadas" -#: utils/adt/timestamp.c:4253 utils/adt/timestamp.c:5011 +#: utils/adt/timestamp.c:4358 utils/adt/timestamp.c:5322 #, c-format msgid "interval units \"%s\" not recognized" msgstr "las unidades de interval «%s» no son reconocidas" @@ -23362,43 +25109,43 @@ msgstr "suppress_redundant_updates_trigger: debe ser invocado «FOR EACH ROW»" msgid "gtsvector_in not implemented" msgstr "gtsvector_in no está implementado" -#: utils/adt/tsquery.c:200 +#: utils/adt/tsquery.c:199 #, c-format msgid "distance in phrase operator should not be greater than %d" msgstr "distancia en operador de frases no debe ser mayor que %d" -#: utils/adt/tsquery.c:310 utils/adt/tsquery.c:725 +#: utils/adt/tsquery.c:306 utils/adt/tsquery.c:691 #: utils/adt/tsvector_parser.c:133 #, c-format msgid "syntax error in tsquery: \"%s\"" msgstr "error de sintaxis en tsquery: «%s»" -#: utils/adt/tsquery.c:334 +#: utils/adt/tsquery.c:330 #, c-format msgid "no operand in tsquery: \"%s\"" msgstr "no hay operando en tsquery: «%s»" -#: utils/adt/tsquery.c:568 +#: utils/adt/tsquery.c:534 #, c-format msgid "value is too big in tsquery: \"%s\"" msgstr "el valor es demasiado grande en tsquery: «%s»" -#: utils/adt/tsquery.c:573 +#: utils/adt/tsquery.c:539 #, c-format msgid "operand is too long in tsquery: \"%s\"" msgstr "el operando es muy largo en tsquery: «%s»" -#: utils/adt/tsquery.c:601 +#: utils/adt/tsquery.c:567 #, c-format msgid "word is too long in tsquery: \"%s\"" msgstr "palabra demasiado larga en tsquery: «%s»" -#: utils/adt/tsquery.c:870 +#: utils/adt/tsquery.c:835 #, c-format msgid "text-search query doesn't contain lexemes: \"%s\"" msgstr "la consulta de búsqueda en texto no contiene lexemas: «%s»" -#: utils/adt/tsquery.c:881 utils/adt/tsquery_util.c:375 +#: utils/adt/tsquery.c:846 utils/adt/tsquery_util.c:375 #, c-format msgid "tsquery is too large" msgstr "el tsquery es demasiado grande" @@ -23433,7 +25180,7 @@ msgstr "el array de pesos es muy corto" msgid "array of weight must not contain nulls" msgstr "los arrays de pesos no deben contener valores nulos" -#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:872 +#: utils/adt/tsrank.c:431 utils/adt/tsrank.c:871 #, c-format msgid "weight out of range" msgstr "peso fuera de rango" @@ -23464,42 +25211,42 @@ msgstr "el array de pesos no debe contener nulls" msgid "unrecognized weight: \"%c\"" msgstr "no se reconoce el peso: «%c»" -#: utils/adt/tsvector_op.c:2414 +#: utils/adt/tsvector_op.c:2426 #, c-format msgid "ts_stat query must return one tsvector column" msgstr "la consulta ts_stat debe retornar una columna tsvector" -#: utils/adt/tsvector_op.c:2603 +#: utils/adt/tsvector_op.c:2615 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "la columna tsvector «%s» no existe" -#: utils/adt/tsvector_op.c:2610 +#: utils/adt/tsvector_op.c:2622 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "la columna «%s» no es de tipo tsvector" -#: utils/adt/tsvector_op.c:2622 +#: utils/adt/tsvector_op.c:2634 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "la columna de configuración «%s» no existe" -#: utils/adt/tsvector_op.c:2628 +#: utils/adt/tsvector_op.c:2640 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "la columna «%s» no es de tipo regconfig" -#: utils/adt/tsvector_op.c:2635 +#: utils/adt/tsvector_op.c:2647 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "la columna de configuración «%s» no debe ser nula" -#: utils/adt/tsvector_op.c:2648 +#: utils/adt/tsvector_op.c:2660 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "el nombre de la configuración de búsqueda «%s» debe ser calificada con esquema" -#: utils/adt/tsvector_op.c:2673 +#: utils/adt/tsvector_op.c:2685 #, c-format msgid "column \"%s\" is not of a character type" msgstr "la columna «%s» no es de un tipo textual" @@ -23521,78 +25268,79 @@ msgstr "información posicional incorrecta en tsvector: «%s»" #: utils/adt/uuid.c:428 #, c-format -#| msgid "could not generate random salt" msgid "could not generate random values" msgstr "no se pudo generar valores aleatorios" -#: utils/adt/varbit.c:109 utils/adt/varchar.c:53 +#: utils/adt/varbit.c:110 utils/adt/varchar.c:53 #, c-format msgid "length for type %s must be at least 1" msgstr "el largo para el tipo %s debe ser al menos 1" -#: utils/adt/varbit.c:114 utils/adt/varchar.c:57 +#: utils/adt/varbit.c:115 utils/adt/varchar.c:57 #, c-format msgid "length for type %s cannot exceed %d" msgstr "el largo del tipo %s no puede exceder %d" -#: utils/adt/varbit.c:197 utils/adt/varbit.c:498 utils/adt/varbit.c:993 +#: utils/adt/varbit.c:198 utils/adt/varbit.c:499 utils/adt/varbit.c:994 #, c-format msgid "bit string length exceeds the maximum allowed (%d)" msgstr "el tamaño de la cadena de bits excede el máximo permitido (%d)" -#: utils/adt/varbit.c:211 utils/adt/varbit.c:355 utils/adt/varbit.c:405 +#: utils/adt/varbit.c:212 utils/adt/varbit.c:356 utils/adt/varbit.c:406 #, c-format msgid "bit string length %d does not match type bit(%d)" msgstr "el largo de la cadena de bits %d no coincide con el tipo bit(%d)" -#: utils/adt/varbit.c:233 utils/adt/varbit.c:534 -#, c-format -msgid "\"%c\" is not a valid binary digit" +#: utils/adt/varbit.c:234 utils/adt/varbit.c:535 +#, fuzzy, c-format +#| msgid "\"%c\" is not a valid binary digit" +msgid "\"%.*s\" is not a valid binary digit" msgstr "«%c» no es un dígito binario válido" -#: utils/adt/varbit.c:258 utils/adt/varbit.c:559 -#, c-format -msgid "\"%c\" is not a valid hexadecimal digit" +#: utils/adt/varbit.c:259 utils/adt/varbit.c:560 +#, fuzzy, c-format +#| msgid "\"%c\" is not a valid hexadecimal digit" +msgid "\"%.*s\" is not a valid hexadecimal digit" msgstr "«%c» no es un dígito hexadecimal válido" -#: utils/adt/varbit.c:346 utils/adt/varbit.c:651 +#: utils/adt/varbit.c:347 utils/adt/varbit.c:652 #, c-format msgid "invalid length in external bit string" msgstr "el largo no es válido en cadena de bits externa" -#: utils/adt/varbit.c:512 utils/adt/varbit.c:660 utils/adt/varbit.c:756 +#: utils/adt/varbit.c:513 utils/adt/varbit.c:661 utils/adt/varbit.c:757 #, c-format msgid "bit string too long for type bit varying(%d)" msgstr "la cadena de bits es demasiado larga para el tipo bit varying(%d)" -#: utils/adt/varbit.c:1086 utils/adt/varbit.c:1184 utils/adt/varlena.c:875 -#: utils/adt/varlena.c:939 utils/adt/varlena.c:1083 utils/adt/varlena.c:3306 -#: utils/adt/varlena.c:3373 +#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:897 +#: utils/adt/varlena.c:960 utils/adt/varlena.c:1117 utils/adt/varlena.c:3351 +#: utils/adt/varlena.c:3429 #, c-format msgid "negative substring length not allowed" msgstr "no se permite un largo negativo de subcadena" -#: utils/adt/varbit.c:1241 +#: utils/adt/varbit.c:1261 #, c-format msgid "cannot AND bit strings of different sizes" msgstr "no se puede hacer AND entre cadenas de bits de distintos tamaños" -#: utils/adt/varbit.c:1282 +#: utils/adt/varbit.c:1302 #, c-format msgid "cannot OR bit strings of different sizes" msgstr "no se puede hacer OR entre cadenas de bits de distintos tamaños" -#: utils/adt/varbit.c:1322 +#: utils/adt/varbit.c:1342 #, c-format msgid "cannot XOR bit strings of different sizes" msgstr "no se puede hacer XOR entre cadenas de bits de distintos tamaños" -#: utils/adt/varbit.c:1804 utils/adt/varbit.c:1862 +#: utils/adt/varbit.c:1824 utils/adt/varbit.c:1882 #, c-format msgid "bit index %d out of valid range (0..%d)" msgstr "el índice de bit %d está fuera del rango válido (0..%d)" -#: utils/adt/varbit.c:1813 utils/adt/varlena.c:3566 +#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3633 #, c-format msgid "new bit must be 0 or 1" msgstr "el nuevo bit debe ser 0 o 1" @@ -23607,103 +25355,115 @@ msgstr "el valor es demasiado largo para el tipo character(%d)" msgid "value too long for type character varying(%d)" msgstr "el valor es demasiado largo para el tipo character varying(%d)" -#: utils/adt/varchar.c:732 utils/adt/varlena.c:1475 +#: utils/adt/varchar.c:732 utils/adt/varlena.c:1523 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "no se pudo determinar qué ordenamiento usar para la comparación de cadenas" -#: utils/adt/varlena.c:1182 utils/adt/varlena.c:1915 +#: utils/adt/varlena.c:1216 utils/adt/varlena.c:1963 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "los ordenamientos no determinísticos no están soportados para búsquedas de sub-cadenas" -#: utils/adt/varlena.c:1574 utils/adt/varlena.c:1587 +#: utils/adt/varlena.c:1622 utils/adt/varlena.c:1635 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "no se pudo convertir la cadena a UTF-16: código de error %lu" -#: utils/adt/varlena.c:1602 +#: utils/adt/varlena.c:1650 #, c-format msgid "could not compare Unicode strings: %m" msgstr "no se pudieron comparar las cadenas Unicode: %m" -#: utils/adt/varlena.c:1653 utils/adt/varlena.c:2367 +#: utils/adt/varlena.c:1701 utils/adt/varlena.c:2415 #, c-format msgid "collation failed: %s" msgstr "el ordenamiento falló: %s" -#: utils/adt/varlena.c:2575 +#: utils/adt/varlena.c:2623 #, c-format msgid "sort key generation failed: %s" msgstr "la generación de la llave de ordenamiento falló: %s" -#: utils/adt/varlena.c:3450 utils/adt/varlena.c:3517 +#: utils/adt/varlena.c:3517 utils/adt/varlena.c:3584 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "el índice %d está fuera de rango [0..%d]" -#: utils/adt/varlena.c:3481 utils/adt/varlena.c:3553 +#: utils/adt/varlena.c:3548 utils/adt/varlena.c:3620 #, c-format -#| msgid "index %d out of valid range, 0..%d" msgid "index %lld out of valid range, 0..%lld" msgstr "el índice %lld está fuera de rango, 0..%lld" -#: utils/adt/varlena.c:4590 -#, c-format -msgid "field position must be greater than zero" +#: utils/adt/varlena.c:4656 +#, fuzzy, c-format +#| msgid "field position must be greater than zero" +msgid "field position must not be zero" msgstr "la posición del campo debe ser mayor que cero" -#: utils/adt/varlena.c:5456 +#: utils/adt/varlena.c:5697 #, c-format msgid "unterminated format() type specifier" msgstr "especificador de tipo inconcluso en format()" -#: utils/adt/varlena.c:5457 utils/adt/varlena.c:5591 utils/adt/varlena.c:5712 +#: utils/adt/varlena.c:5698 utils/adt/varlena.c:5832 utils/adt/varlena.c:5953 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "Para un «%%» solo, use «%%%%»." -#: utils/adt/varlena.c:5589 utils/adt/varlena.c:5710 -#, c-format -msgid "unrecognized format() type specifier \"%c\"" +#: utils/adt/varlena.c:5830 utils/adt/varlena.c:5951 +#, fuzzy, c-format +#| msgid "unrecognized format() type specifier \"%c\"" +msgid "unrecognized format() type specifier \"%.*s\"" msgstr "especificador de tipo no reconocido «%c» en format()" -#: utils/adt/varlena.c:5602 utils/adt/varlena.c:5659 +#: utils/adt/varlena.c:5843 utils/adt/varlena.c:5900 #, c-format msgid "too few arguments for format()" msgstr "muy pocos argumentos para format()" -#: utils/adt/varlena.c:5755 utils/adt/varlena.c:5937 +#: utils/adt/varlena.c:5996 utils/adt/varlena.c:6178 #, c-format msgid "number is out of range" msgstr "el número está fuera de rango" -#: utils/adt/varlena.c:5818 utils/adt/varlena.c:5846 +#: utils/adt/varlena.c:6059 utils/adt/varlena.c:6087 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "la conversión especifica el argumento 0, pero los argumentos se numeran desde 1" -#: utils/adt/varlena.c:5839 +#: utils/adt/varlena.c:6080 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "la posición del argumento de anchura debe terminar con «$»" -#: utils/adt/varlena.c:5884 +#: utils/adt/varlena.c:6125 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "los valores nulos no pueden ser formateados como un identificador SQL" -#: utils/adt/varlena.c:6010 +#: utils/adt/varlena.c:6251 #, c-format msgid "Unicode normalization can only be performed if server encoding is UTF8" msgstr "la normalización Unicode sólo puede ser hecha si la codificación de servidor es UTF8" -#: utils/adt/varlena.c:6023 +#: utils/adt/varlena.c:6264 #, c-format -#| msgid "invalid parameter list format: \"%s\"" msgid "invalid normalization form: %s" msgstr "forma de normalización no válida: %s" +#: utils/adt/varlena.c:6467 utils/adt/varlena.c:6502 utils/adt/varlena.c:6537 +#, fuzzy, c-format +#| msgid "invalid Unicode escape" +msgid "invalid Unicode code point: %04X" +msgstr "valor de escape Unicode no válido" + +#: utils/adt/varlena.c:6567 +#, fuzzy, c-format +#| msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." +msgid "Unicode escapes must be \\XXXX, \\+XXXXXX, \\uXXXX, or \\UXXXXXXXX." +msgstr "Los escapes Unicode deben ser \\uXXXX o \\UXXXXXXXX." + #: utils/adt/windowfuncs.c:243 #, c-format msgid "argument of ntile must be greater than zero" @@ -23721,7 +25481,6 @@ msgstr "el ID de transacción %s está en el futuro" #: utils/adt/xid8funcs.c:547 #, c-format -#| msgid "invalid snapshot data in file \"%s\"" msgid "invalid external pg_snapshot data" msgstr "datos externos pg_snapshot no válidos" @@ -23735,12 +25494,7 @@ msgstr "característica XML no soportada" msgid "This functionality requires the server to be built with libxml support." msgstr "Esta funcionalidad requiere que el servidor haya sido construido con soporte libxml." -#: utils/adt/xml.c:224 -#, c-format -msgid "You need to rebuild PostgreSQL using --with-libxml." -msgstr "Necesita reconstruir PostgreSQL usando --with-libxml." - -#: utils/adt/xml.c:243 utils/mb/mbutils.c:570 +#: utils/adt/xml.c:243 utils/mb/mbutils.c:627 #, c-format msgid "invalid encoding name \"%s\"" msgstr "nombre de codificación «%s» no válido" @@ -23879,28 +25633,28 @@ msgstr "el «path» de filtro de registros no debe ser la cadena vacía" msgid "column path filter must not be empty string" msgstr "el «path» de filtro de columna no debe ser la cadena vacía" -#: utils/adt/xml.c:4661 +#: utils/adt/xml.c:4655 #, c-format msgid "more than one value returned by column XPath expression" msgstr "la expresión XPath de columna retornó más de un valor" -#: utils/cache/lsyscache.c:1015 +#: utils/cache/lsyscache.c:1042 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "no existe la conversión del tipo %s al tipo %s" -#: utils/cache/lsyscache.c:2764 utils/cache/lsyscache.c:2797 -#: utils/cache/lsyscache.c:2830 utils/cache/lsyscache.c:2863 +#: utils/cache/lsyscache.c:2834 utils/cache/lsyscache.c:2867 +#: utils/cache/lsyscache.c:2900 utils/cache/lsyscache.c:2933 #, c-format msgid "type %s is only a shell" msgstr "el tipo %s está inconcluso" -#: utils/cache/lsyscache.c:2769 +#: utils/cache/lsyscache.c:2839 #, c-format msgid "no input function available for type %s" msgstr "no hay una función de entrada para el tipo %s" -#: utils/cache/lsyscache.c:2802 +#: utils/cache/lsyscache.c:2872 #, c-format msgid "no output function available for type %s" msgstr "no hay una función de salida para el tipo %s" @@ -23910,22 +25664,22 @@ msgstr "no hay una función de salida para el tipo %s" msgid "operator class \"%s\" of access method %s is missing support function %d for type %s" msgstr "falta la función de soporte %3$d para el tipo %4$s de la clase de operadores «%1$s» del método de acceso %2$s" -#: utils/cache/plancache.c:718 +#: utils/cache/plancache.c:720 #, c-format msgid "cached plan must not change result type" msgstr "el plan almacenado no debe cambiar el tipo de resultado" -#: utils/cache/relcache.c:6078 +#: utils/cache/relcache.c:6213 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "no se pudo crear el archivo de cache de catálogos de sistema «%s»: %m" -#: utils/cache/relcache.c:6080 +#: utils/cache/relcache.c:6215 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Prosiguiendo de todas maneras, pero hay algo mal." -#: utils/cache/relcache.c:6402 +#: utils/cache/relcache.c:6537 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "no se pudo eliminar el archivo de cache «%s»: %m" @@ -23945,113 +25699,114 @@ msgstr "el archivo de mapeo de relaciones «%s» contiene datos no válidos" msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "el archivo de mapeo de relaciones «%s» tiene una suma de verificación incorrecta" -#: utils/cache/typcache.c:1692 utils/fmgr/funcapi.c:461 +#: utils/cache/typcache.c:1808 utils/fmgr/funcapi.c:463 #, c-format msgid "record type has not been registered" msgstr "el tipo record no ha sido registrado" -#: utils/error/assert.c:37 -#, c-format -msgid "TRAP: ExceptionalCondition: bad arguments\n" +#: utils/error/assert.c:39 +#, fuzzy, c-format +#| msgid "TRAP: ExceptionalCondition: bad arguments\n" +msgid "TRAP: ExceptionalCondition: bad arguments in PID %d\n" msgstr "TRAP: ExceptionalConditions: argumentos erróneos\n" -#: utils/error/assert.c:40 -#, c-format -msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n" +#: utils/error/assert.c:42 +#, fuzzy, c-format +#| msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n" +msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d, PID: %d)\n" msgstr "TRAP: %s(«%s», Archivo: «%s», Línea: %d)\n" -#: utils/error/elog.c:322 +#: utils/error/elog.c:409 #, c-format msgid "error occurred before error message processing is available\n" msgstr "ocurrió un error antes de que el procesamiento de errores esté disponible\n" -#: utils/error/elog.c:1868 +#: utils/error/elog.c:1948 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "no se pudo reabrir «%s» para error estándar: %m" -#: utils/error/elog.c:1881 +#: utils/error/elog.c:1961 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "no se pudo reabrir «%s» para usar como salida estándar: %m" -#: utils/error/elog.c:2373 utils/error/elog.c:2407 utils/error/elog.c:2423 +#: utils/error/elog.c:2456 utils/error/elog.c:2490 utils/error/elog.c:2506 msgid "[unknown]" msgstr "[desconocido]" -#: utils/error/elog.c:2893 utils/error/elog.c:3203 utils/error/elog.c:3311 +#: utils/error/elog.c:3026 utils/error/elog.c:3344 utils/error/elog.c:3451 msgid "missing error text" msgstr "falta un texto de mensaje de error" -#: utils/error/elog.c:2896 utils/error/elog.c:2899 utils/error/elog.c:3314 -#: utils/error/elog.c:3317 +#: utils/error/elog.c:3029 utils/error/elog.c:3032 #, c-format msgid " at character %d" msgstr " en carácter %d" -#: utils/error/elog.c:2909 utils/error/elog.c:2916 +#: utils/error/elog.c:3042 utils/error/elog.c:3049 msgid "DETAIL: " msgstr "DETALLE: " -#: utils/error/elog.c:2923 +#: utils/error/elog.c:3056 msgid "HINT: " msgstr "HINT: " -#: utils/error/elog.c:2930 +#: utils/error/elog.c:3063 msgid "QUERY: " msgstr "CONSULTA: " -#: utils/error/elog.c:2937 +#: utils/error/elog.c:3070 msgid "CONTEXT: " msgstr "CONTEXTO: " -#: utils/error/elog.c:2947 +#: utils/error/elog.c:3080 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "UBICACIÓN: %s, %s:%d\n" -#: utils/error/elog.c:2954 +#: utils/error/elog.c:3087 #, c-format msgid "LOCATION: %s:%d\n" msgstr "UBICACIÓN: %s:%d\n" -#: utils/error/elog.c:2961 +#: utils/error/elog.c:3094 msgid "BACKTRACE: " msgstr "BACKTRACE: " -#: utils/error/elog.c:2975 +#: utils/error/elog.c:3108 msgid "STATEMENT: " msgstr "SENTENCIA: " -#: utils/error/elog.c:3364 +#: utils/error/elog.c:3496 msgid "DEBUG" msgstr "DEBUG" -#: utils/error/elog.c:3368 +#: utils/error/elog.c:3500 msgid "LOG" msgstr "LOG" -#: utils/error/elog.c:3371 +#: utils/error/elog.c:3503 msgid "INFO" msgstr "INFO" -#: utils/error/elog.c:3374 +#: utils/error/elog.c:3506 msgid "NOTICE" msgstr "NOTICE" -#: utils/error/elog.c:3377 +#: utils/error/elog.c:3510 msgid "WARNING" msgstr "WARNING" -#: utils/error/elog.c:3380 +#: utils/error/elog.c:3513 msgid "ERROR" msgstr "ERROR" -#: utils/error/elog.c:3383 +#: utils/error/elog.c:3516 msgid "FATAL" msgstr "FATAL" -#: utils/error/elog.c:3386 +#: utils/error/elog.c:3519 msgid "PANIC" msgstr "PANIC" @@ -24139,406 +25894,406 @@ msgstr "un componente en el parámetro «dynamic_library_path» no es una ruta a msgid "internal function \"%s\" is not in internal lookup table" msgstr "la función interna «%s» no está en la tabla interna de búsqueda" -#: utils/fmgr/fmgr.c:487 +#: utils/fmgr/fmgr.c:484 #, c-format msgid "could not find function information for function \"%s\"" msgstr "no se pudo encontrar información de función para la función «%s»" -#: utils/fmgr/fmgr.c:489 +#: utils/fmgr/fmgr.c:486 #, c-format msgid "SQL-callable functions need an accompanying PG_FUNCTION_INFO_V1(funcname)." msgstr "Funciones invocables desde SQL necesitan PG_FUNCTION_INFO_V1(función) que los acompañe." -#: utils/fmgr/fmgr.c:507 +#: utils/fmgr/fmgr.c:504 #, c-format msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "la versión de API %d no reconocida fue reportada por la función «%s»" -#: utils/fmgr/fmgr.c:2003 +#: utils/fmgr/fmgr.c:1999 #, fuzzy, c-format #| msgid "operator class options info is absent in function call context" -msgid "opclass options info is absent in function call context" +msgid "operator class options info is absent in function call context" msgstr "la información de opciones de la clase de operadores está ausente en el contexto de llamada a función" -#: utils/fmgr/fmgr.c:2070 +#: utils/fmgr/fmgr.c:2066 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "función de validación de lenguaje %u invocada para el lenguaje %u en lugar de %u" -#: utils/fmgr/funcapi.c:384 +#: utils/fmgr/funcapi.c:386 #, c-format msgid "could not determine actual result type for function \"%s\" declared to return type %s" msgstr "no se pudo determinar el tipo verdadero de resultado para la función «%s» declarada retornando tipo %s" -#: utils/fmgr/funcapi.c:1651 utils/fmgr/funcapi.c:1683 +#: utils/fmgr/funcapi.c:531 +#, fuzzy, c-format +#| msgid "argument declared %s is not a range type but type %s" +msgid "argument declared %s does not contain a range type but type %s" +msgstr "el argumento declarado %s no es un tipo de rango sino tipo %s" + +#: utils/fmgr/funcapi.c:1833 utils/fmgr/funcapi.c:1865 #, c-format msgid "number of aliases does not match number of columns" msgstr "el número de aliases no coincide con el número de columnas" -#: utils/fmgr/funcapi.c:1677 +#: utils/fmgr/funcapi.c:1859 #, c-format msgid "no column alias was provided" msgstr "no se entregó alias de columna" -#: utils/fmgr/funcapi.c:1701 +#: utils/fmgr/funcapi.c:1883 #, c-format msgid "could not determine row description for function returning record" msgstr "no se pudo encontrar descripción de registro de función que retorna record" -#: utils/init/miscinit.c:285 +#: utils/init/miscinit.c:315 #, c-format msgid "data directory \"%s\" does not exist" msgstr "no existe el directorio de datos «%s»" -#: utils/init/miscinit.c:290 +#: utils/init/miscinit.c:320 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "no se pudo obtener los permisos del directorio «%s»: %m" -#: utils/init/miscinit.c:298 +#: utils/init/miscinit.c:328 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "el directorio de datos especificado «%s» no es un directorio" -#: utils/init/miscinit.c:314 +#: utils/init/miscinit.c:344 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "el directorio de datos «%s» tiene dueño equivocado" -#: utils/init/miscinit.c:316 +#: utils/init/miscinit.c:346 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "El servidor debe ser iniciado por el usuario dueño del directorio de datos." -#: utils/init/miscinit.c:334 +#: utils/init/miscinit.c:364 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "el directorio de datos «%s» tiene permisos no válidos" -#: utils/init/miscinit.c:336 +#: utils/init/miscinit.c:366 #, c-format msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Los permisos deberían ser u=rwx (0700) o u=rwx,g=rx (0750)." -#: utils/init/miscinit.c:615 utils/misc/guc.c:7139 +#: utils/init/miscinit.c:645 utils/misc/guc.c:7462 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "no se puede definir el parámetro «%s» dentro de una operación restringida por seguridad" -#: utils/init/miscinit.c:683 +#: utils/init/miscinit.c:713 #, c-format msgid "role with OID %u does not exist" msgstr "no existe el rol con OID %u" -#: utils/init/miscinit.c:713 +#: utils/init/miscinit.c:743 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "al rol «%s» no se le permite conectarse" -#: utils/init/miscinit.c:731 +#: utils/init/miscinit.c:761 #, c-format msgid "too many connections for role \"%s\"" msgstr "demasiadas conexiones para el rol «%s»" -#: utils/init/miscinit.c:791 +#: utils/init/miscinit.c:821 #, c-format msgid "permission denied to set session authorization" msgstr "se ha denegado el permiso para cambiar el usuario actual" -#: utils/init/miscinit.c:874 +#: utils/init/miscinit.c:904 #, c-format msgid "invalid role OID: %u" msgstr "el OID de rol no es válido: %u" -#: utils/init/miscinit.c:928 +#: utils/init/miscinit.c:958 #, c-format msgid "database system is shut down" msgstr "el sistema de bases de datos está apagado" -#: utils/init/miscinit.c:1015 +#: utils/init/miscinit.c:1045 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "no se pudo crear el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:1029 +#: utils/init/miscinit.c:1059 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "no se pudo abrir el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:1036 +#: utils/init/miscinit.c:1066 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "no se pudo leer el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:1045 +#: utils/init/miscinit.c:1075 #, c-format msgid "lock file \"%s\" is empty" msgstr "el archivo de bloqueo «%s» está vacío" -#: utils/init/miscinit.c:1046 +#: utils/init/miscinit.c:1076 #, c-format msgid "Either another server is starting, or the lock file is the remnant of a previous server startup crash." msgstr "Otro proceso servidor está iniciándose, o el archivo de bloqueo es remanente de una caída durante un inicio anterior." -#: utils/init/miscinit.c:1090 +#: utils/init/miscinit.c:1120 #, c-format msgid "lock file \"%s\" already exists" msgstr "el archivo de bloqueo «%s» ya existe" -#: utils/init/miscinit.c:1094 +#: utils/init/miscinit.c:1124 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "¿Hay otro postgres (PID %d) corriendo en el directorio de datos «%s»?" -#: utils/init/miscinit.c:1096 +#: utils/init/miscinit.c:1126 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "¿Hay otro postmaster (PID %d) corriendo en el directorio de datos «%s»?" -#: utils/init/miscinit.c:1099 +#: utils/init/miscinit.c:1129 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "¿Hay otro postgres (PID %d) usando el socket «%s»?" -#: utils/init/miscinit.c:1101 +#: utils/init/miscinit.c:1131 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "¿Hay otro postmaster (PID %d) usando el socket «%s»?" -#: utils/init/miscinit.c:1152 +#: utils/init/miscinit.c:1182 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "no se pudo eliminar el archivo de bloqueo antiguo «%s»: %m" -#: utils/init/miscinit.c:1154 +#: utils/init/miscinit.c:1184 #, c-format msgid "The file seems accidentally left over, but it could not be removed. Please remove the file by hand and try again." msgstr "El archivo parece accidentalmente abandonado, pero no pudo ser eliminado. Por favor elimine el archivo manualmente e intente nuevamente." -#: utils/init/miscinit.c:1191 utils/init/miscinit.c:1205 -#: utils/init/miscinit.c:1216 +#: utils/init/miscinit.c:1221 utils/init/miscinit.c:1235 +#: utils/init/miscinit.c:1246 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "no se pudo escribir el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:1327 utils/init/miscinit.c:1469 utils/misc/guc.c:10038 +#: utils/init/miscinit.c:1357 utils/init/miscinit.c:1499 utils/misc/guc.c:10358 #, c-format msgid "could not read from file \"%s\": %m" msgstr "no se pudo leer el archivo «%s»: %m" -#: utils/init/miscinit.c:1457 +#: utils/init/miscinit.c:1487 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "no se pudo abrir el archivo «%s»: %m; continuando de todas formas" -#: utils/init/miscinit.c:1482 +#: utils/init/miscinit.c:1512 #, c-format msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" msgstr "el archivo de bloqueo «%s» tiene un PID erróneo: %ld en lugar de %ld" -#: utils/init/miscinit.c:1521 utils/init/miscinit.c:1537 +#: utils/init/miscinit.c:1551 utils/init/miscinit.c:1567 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "«%s» no es un directorio de datos válido" -#: utils/init/miscinit.c:1523 +#: utils/init/miscinit.c:1553 #, c-format msgid "File \"%s\" is missing." msgstr "Falta el archivo «%s»." -#: utils/init/miscinit.c:1539 +#: utils/init/miscinit.c:1569 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "El archivo «%s» no contiene datos válidos." -#: utils/init/miscinit.c:1541 +#: utils/init/miscinit.c:1571 #, c-format msgid "You might need to initdb." msgstr "Puede ser necesario ejecutar initdb." -#: utils/init/miscinit.c:1549 +#: utils/init/miscinit.c:1579 #, c-format msgid "The data directory was initialized by PostgreSQL version %s, which is not compatible with this version %s." msgstr "El directorio de datos fue inicializado por PostgreSQL versión %s, que no es compatible con esta versión %s." -#: utils/init/miscinit.c:1616 -#, c-format -msgid "loaded library \"%s\"" -msgstr "biblioteca «%s» cargada" - -#: utils/init/postinit.c:255 +#: utils/init/postinit.c:254 #, c-format -msgid "replication connection authorized: user=%s application_name=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "conexión de replicación autorizada: usuario=%s application_name=%s SSL activo (protocolo=%s, cifrado=%s, bits=%d, compresión=%s)" - -#: utils/init/postinit.c:261 utils/init/postinit.c:267 -#: utils/init/postinit.c:289 utils/init/postinit.c:295 -msgid "off" -msgstr "desactivado" +msgid "replication connection authorized: user=%s" +msgstr "conexión de replicación autorizada: usuario=%s" -#: utils/init/postinit.c:261 utils/init/postinit.c:267 -#: utils/init/postinit.c:289 utils/init/postinit.c:295 -msgid "on" -msgstr "activado" +#: utils/init/postinit.c:257 +#, fuzzy, c-format +#| msgid "replication connection authorized: user=%s" +msgid "connection authorized: user=%s" +msgstr "conexión de replicación autorizada: usuario=%s" -#: utils/init/postinit.c:262 -#, c-format -msgid "replication connection authorized: user=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "conexión de replicación autorizada: usuario=%s SSL activo (protocolo=%s, cifrado=%s, bits=%d, compresión=%s)" +#: utils/init/postinit.c:260 +#, fuzzy, c-format +#| msgid "database %s" +msgid " database=%s" +msgstr "base de datos %s" -#: utils/init/postinit.c:272 -#, c-format -msgid "replication connection authorized: user=%s application_name=%s" -msgstr "conexión de replicación autorizada: usuario=%s application_name=%s" +#: utils/init/postinit.c:263 +#, fuzzy, c-format +#| msgid "publication_name" +msgid " application_name=%s" +msgstr "nombre_de_publicación" -#: utils/init/postinit.c:275 -#, c-format -msgid "replication connection authorized: user=%s" -msgstr "conexión de replicación autorizada: usuario=%s" +#: utils/init/postinit.c:268 +#, fuzzy, c-format +#| msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" +msgid " SSL enabled (protocol=%s, cipher=%s, bits=%d)" +msgstr "Conexión SSL (protocolo: %s, cifrado: %s, bits: %s, compresión: %s)\n" -#: utils/init/postinit.c:284 +#: utils/init/postinit.c:280 #, c-format -msgid "connection authorized: user=%s database=%s application_name=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "conexión autorizada: usuario=%s base_de_datos=%s application_name=%s SSL activo (protocolo=%s, cifrado=%s, bits=%d, compresión=%s)" +msgid " GSS (authenticated=%s, encrypted=%s, principal=%s)" +msgstr "" -#: utils/init/postinit.c:290 -#, c-format -msgid "connection authorized: user=%s database=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" -msgstr "conexión autorizada: usuario=%s base de datos=%s SSL activo (protocolo=%s, cifrado=%s, bits=%d, compresión=%s" +#: utils/init/postinit.c:281 utils/init/postinit.c:282 +#: utils/init/postinit.c:287 utils/init/postinit.c:288 +msgid "no" +msgstr "no" -#: utils/init/postinit.c:300 -#, c-format -msgid "connection authorized: user=%s database=%s application_name=%s" -msgstr "conexión autorizada: usuario=%s base de datos=%s application_name=%s" +#: utils/init/postinit.c:281 utils/init/postinit.c:282 +#: utils/init/postinit.c:287 utils/init/postinit.c:288 +msgid "yes" +msgstr "sí" -#: utils/init/postinit.c:302 +#: utils/init/postinit.c:286 #, c-format -msgid "connection authorized: user=%s database=%s" -msgstr "conexión autorizada: usuario=%s database=%s" +msgid " GSS (authenticated=%s, encrypted=%s)" +msgstr "" -#: utils/init/postinit.c:334 +#: utils/init/postinit.c:323 #, c-format msgid "database \"%s\" has disappeared from pg_database" msgstr "la base de datos «%s» ha desaparecido de pg_database" -#: utils/init/postinit.c:336 +#: utils/init/postinit.c:325 #, c-format msgid "Database OID %u now seems to belong to \"%s\"." msgstr "Base de datos con OID %u ahora parece pertenecer a «%s»." -#: utils/init/postinit.c:356 +#: utils/init/postinit.c:345 #, c-format msgid "database \"%s\" is not currently accepting connections" msgstr "la base de datos «%s» no acepta conexiones" -#: utils/init/postinit.c:369 +#: utils/init/postinit.c:358 #, c-format msgid "permission denied for database \"%s\"" msgstr "permiso denegado a la base de datos «%s»" -#: utils/init/postinit.c:370 +#: utils/init/postinit.c:359 #, c-format msgid "User does not have CONNECT privilege." msgstr "Usuario no tiene privilegios de conexión." -#: utils/init/postinit.c:387 +#: utils/init/postinit.c:376 #, c-format msgid "too many connections for database \"%s\"" msgstr "demasiadas conexiones para la base de datos «%s»" -#: utils/init/postinit.c:409 utils/init/postinit.c:416 +#: utils/init/postinit.c:398 utils/init/postinit.c:405 #, c-format msgid "database locale is incompatible with operating system" msgstr "la configuración regional es incompatible con el sistema operativo" -#: utils/init/postinit.c:410 +#: utils/init/postinit.c:399 #, c-format msgid "The database was initialized with LC_COLLATE \"%s\", which is not recognized by setlocale()." msgstr "La base de datos fue inicializada con LC_COLLATE «%s», el cual no es reconocido por setlocale()." -#: utils/init/postinit.c:412 utils/init/postinit.c:419 +#: utils/init/postinit.c:401 utils/init/postinit.c:408 #, c-format msgid "Recreate the database with another locale or install the missing locale." msgstr "Recree la base de datos con otra configuración regional, o instale la configuración regional faltante." -#: utils/init/postinit.c:417 +#: utils/init/postinit.c:406 #, c-format msgid "The database was initialized with LC_CTYPE \"%s\", which is not recognized by setlocale()." msgstr "La base de datos fueron inicializada con LC_CTYPE «%s», el cual no es reconocido por setlocale()." -#: utils/init/postinit.c:762 +#: utils/init/postinit.c:761 #, c-format msgid "no roles are defined in this database system" msgstr "no hay roles definidos en esta base de datos" -#: utils/init/postinit.c:763 +#: utils/init/postinit.c:762 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Debería ejecutar imediatamente CREATE USER \"%s\" SUPERUSER;." -#: utils/init/postinit.c:799 +#: utils/init/postinit.c:798 #, c-format msgid "new replication connections are not allowed during database shutdown" msgstr "nuevas conexiones de replicación no son permitidas durante el apagado de la base de datos" -#: utils/init/postinit.c:803 +#: utils/init/postinit.c:802 #, c-format msgid "must be superuser to connect during database shutdown" msgstr "debe ser superusuario para conectarse durante el apagado de la base de datos" -#: utils/init/postinit.c:813 +#: utils/init/postinit.c:812 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "debe ser superusuario para conectarse en modo de actualización binaria" -#: utils/init/postinit.c:826 +#: utils/init/postinit.c:825 #, c-format msgid "remaining connection slots are reserved for non-replication superuser connections" msgstr "las conexiones restantes están reservadas a superusuarios y no de replicación" -#: utils/init/postinit.c:836 +#: utils/init/postinit.c:835 #, c-format msgid "must be superuser or replication role to start walsender" msgstr "debe ser superusuario o rol de replicación para iniciar el walsender" -#: utils/init/postinit.c:905 +#: utils/init/postinit.c:904 #, c-format msgid "database %u does not exist" msgstr "no existe la base de datos %u" -#: utils/init/postinit.c:994 +#: utils/init/postinit.c:993 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Parece haber sido eliminada o renombrada." -#: utils/init/postinit.c:1012 +#: utils/init/postinit.c:1011 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Falta el subdirectorio de base de datos «%s»." -#: utils/init/postinit.c:1017 +#: utils/init/postinit.c:1016 #, c-format msgid "could not access directory \"%s\": %m" msgstr "no se pudo acceder al directorio «%s»: %m" -#: utils/mb/conv.c:443 utils/mb/conv.c:635 +#: utils/mb/conv.c:522 utils/mb/conv.c:733 #, c-format msgid "invalid encoding number: %d" msgstr "el número de codificación no es válido: %d" -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:122 -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:154 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:129 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:165 #, c-format msgid "unexpected encoding ID %d for ISO 8859 character sets" msgstr "ID de codificación %d inesperado para juegos de caracteres ISO 8859" -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:103 -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:135 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:110 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:146 #, c-format msgid "unexpected encoding ID %d for WIN character sets" msgstr "ID de codificación %d inesperado para juegos de caracteres WIN" -#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:842 +#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:900 #, c-format msgid "conversion between %s and %s is not supported" msgstr "la conversión entre %s y %s no está soportada" @@ -24548,1936 +26303,2037 @@ msgstr "la conversión entre %s y %s no está soportada" msgid "default conversion function for encoding \"%s\" to \"%s\" does not exist" msgstr "no existe el procedimiento por omisión de conversión desde la codificación «%s» a «%s»" -#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:429 utils/mb/mbutils.c:758 -#: utils/mb/mbutils.c:784 +#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 +#: utils/mb/mbutils.c:842 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "La cadena de %d bytes es demasiado larga para la recodificación." -#: utils/mb/mbutils.c:511 +#: utils/mb/mbutils.c:568 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "la codificación de origen «%s» no es válida" -#: utils/mb/mbutils.c:516 +#: utils/mb/mbutils.c:573 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "la codificación de destino «%s» no es válida" -#: utils/mb/mbutils.c:656 +#: utils/mb/mbutils.c:713 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "byte no válido para codificación «%s»: 0x%02x" -#: utils/mb/mbutils.c:819 +#: utils/mb/mbutils.c:877 #, fuzzy, c-format #| msgid "invalid Unicode escape" msgid "invalid Unicode code point" msgstr "valor de escape Unicode no válido" -#: utils/mb/mbutils.c:1087 +#: utils/mb/mbutils.c:1146 #, c-format msgid "bind_textdomain_codeset failed" msgstr "bind_textdomain_codeset falló" -#: utils/mb/mbutils.c:1595 +#: utils/mb/mbutils.c:1667 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "secuencia de bytes no válida para codificación «%s»: %s" -#: utils/mb/mbutils.c:1628 +#: utils/mb/mbutils.c:1700 #, c-format msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "carácter con secuencia de bytes %s en codificación «%s» no tiene equivalente en la codificación «%s»" -#: utils/misc/guc.c:679 +#: utils/misc/guc.c:701 msgid "Ungrouped" msgstr "Sin Grupo" -#: utils/misc/guc.c:681 +#: utils/misc/guc.c:703 msgid "File Locations" msgstr "Ubicaciones de Archivos" -#: utils/misc/guc.c:683 -msgid "Connections and Authentication" -msgstr "Conexiones y Autentificación" - -#: utils/misc/guc.c:685 +#: utils/misc/guc.c:705 msgid "Connections and Authentication / Connection Settings" msgstr "Conexiones y Autentificación / Parámetros de Conexión" -#: utils/misc/guc.c:687 +#: utils/misc/guc.c:707 msgid "Connections and Authentication / Authentication" msgstr "Conexiones y Autentificación / Autentificación" -#: utils/misc/guc.c:689 +#: utils/misc/guc.c:709 msgid "Connections and Authentication / SSL" msgstr "Conexiones y Autentificación / SSL" -#: utils/misc/guc.c:691 -msgid "Resource Usage" -msgstr "Uso de Recursos" - -#: utils/misc/guc.c:693 +#: utils/misc/guc.c:711 msgid "Resource Usage / Memory" msgstr "Uso de Recursos / Memoria" -#: utils/misc/guc.c:695 +#: utils/misc/guc.c:713 msgid "Resource Usage / Disk" msgstr "Uso de Recursos / Disco" -#: utils/misc/guc.c:697 +#: utils/misc/guc.c:715 msgid "Resource Usage / Kernel Resources" msgstr "Uso de Recursos / Recursos del Kernel" -#: utils/misc/guc.c:699 +#: utils/misc/guc.c:717 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Uso de Recursos / Retardo de Vacuum por Costos" -#: utils/misc/guc.c:701 +#: utils/misc/guc.c:719 msgid "Resource Usage / Background Writer" msgstr "Uso de Recursos / Escritor en Segundo Plano" -#: utils/misc/guc.c:703 +#: utils/misc/guc.c:721 msgid "Resource Usage / Asynchronous Behavior" msgstr "Uso de Recursos / Comportamiento Asíncrono" -#: utils/misc/guc.c:705 -msgid "Write-Ahead Log" -msgstr "Write-Ahead Log" - -#: utils/misc/guc.c:707 +#: utils/misc/guc.c:723 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead Log / Configuraciones" -#: utils/misc/guc.c:709 +#: utils/misc/guc.c:725 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead Log / Puntos de Control (Checkpoints)" -#: utils/misc/guc.c:711 +#: utils/misc/guc.c:727 msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead Log / Archivado" -#: utils/misc/guc.c:713 +#: utils/misc/guc.c:729 msgid "Write-Ahead Log / Archive Recovery" msgstr "Write-Ahead Log / Recuperación desde Archivo" -#: utils/misc/guc.c:715 +#: utils/misc/guc.c:731 msgid "Write-Ahead Log / Recovery Target" msgstr "Write-Ahead Log / Destino de Recuperación" -#: utils/misc/guc.c:717 -msgid "Replication" -msgstr "Replicación" - -#: utils/misc/guc.c:719 +#: utils/misc/guc.c:733 msgid "Replication / Sending Servers" msgstr "Replicación / Servidores de Envío" -#: utils/misc/guc.c:721 -msgid "Replication / Master Server" +#: utils/misc/guc.c:735 +#, fuzzy +#| msgid "Replication / Master Server" +msgid "Replication / Primary Server" msgstr "Replicación / Servidor Maestro" -#: utils/misc/guc.c:723 +#: utils/misc/guc.c:737 msgid "Replication / Standby Servers" msgstr "Replicación / Servidores Standby" -#: utils/misc/guc.c:725 +#: utils/misc/guc.c:739 msgid "Replication / Subscribers" msgstr "Replicación / Suscriptores" -#: utils/misc/guc.c:727 -msgid "Query Tuning" -msgstr "Afinamiento de Consultas" - -#: utils/misc/guc.c:729 +#: utils/misc/guc.c:741 msgid "Query Tuning / Planner Method Configuration" msgstr "Afinamiento de Consultas / Configuración de Métodos del Planner" -#: utils/misc/guc.c:731 +#: utils/misc/guc.c:743 msgid "Query Tuning / Planner Cost Constants" msgstr "Afinamiento de Consultas / Constantes de Costo del Planner" -#: utils/misc/guc.c:733 +#: utils/misc/guc.c:745 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Afinamiento de Consultas / Optimizador Genético de Consultas" -#: utils/misc/guc.c:735 +#: utils/misc/guc.c:747 msgid "Query Tuning / Other Planner Options" msgstr "Afinamiento de Consultas / Otras Opciones del Planner" -#: utils/misc/guc.c:737 -msgid "Reporting and Logging" -msgstr "Reporte y Registro" - -#: utils/misc/guc.c:739 +#: utils/misc/guc.c:749 msgid "Reporting and Logging / Where to Log" msgstr "Reporte y Registro / Cuándo Registrar" -#: utils/misc/guc.c:741 +#: utils/misc/guc.c:751 msgid "Reporting and Logging / When to Log" msgstr "Reporte y Registro / Cuándo Registrar" -#: utils/misc/guc.c:743 +#: utils/misc/guc.c:753 msgid "Reporting and Logging / What to Log" msgstr "Reporte y Registro / Qué Registrar" -#: utils/misc/guc.c:745 -msgid "Process Title" -msgstr "Título de Proceso" - -#: utils/misc/guc.c:747 -msgid "Statistics" -msgstr "Estadísticas" +#: utils/misc/guc.c:755 +#, fuzzy +#| msgid "Reporting and Logging / Where to Log" +msgid "Reporting and Logging / Process Title" +msgstr "Reporte y Registro / Cuándo Registrar" -#: utils/misc/guc.c:749 +#: utils/misc/guc.c:757 msgid "Statistics / Monitoring" msgstr "Estadísticas / Monitoreo" -#: utils/misc/guc.c:751 +#: utils/misc/guc.c:759 msgid "Statistics / Query and Index Statistics Collector" msgstr "Estadísticas / Recolector de Estadísticas de Consultas e Índices" -#: utils/misc/guc.c:753 +#: utils/misc/guc.c:761 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc.c:755 -msgid "Client Connection Defaults" -msgstr "Valores por Omisión de Conexiones" - -#: utils/misc/guc.c:757 +#: utils/misc/guc.c:763 msgid "Client Connection Defaults / Statement Behavior" msgstr "Valores por Omisión de Conexiones / Comportamiento de Sentencias" -#: utils/misc/guc.c:759 +#: utils/misc/guc.c:765 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Valores por Omisión de Conexiones / Configuraciones Regionales y Formateo" -#: utils/misc/guc.c:761 +#: utils/misc/guc.c:767 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Valores por Omisión de Conexiones / Precargado de Bibliotecas Compartidas" -#: utils/misc/guc.c:763 +#: utils/misc/guc.c:769 msgid "Client Connection Defaults / Other Defaults" msgstr "Valores por Omisión de Conexiones / Otros Valores" -#: utils/misc/guc.c:765 +#: utils/misc/guc.c:771 msgid "Lock Management" msgstr "Manejo de Bloqueos" -#: utils/misc/guc.c:767 -msgid "Version and Platform Compatibility" -msgstr "Compatibilidad de Versión y Plataforma" - -#: utils/misc/guc.c:769 +#: utils/misc/guc.c:773 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Compatibilidad de Versión y Plataforma / Versiones Anteriores de PostgreSQL" -#: utils/misc/guc.c:771 +#: utils/misc/guc.c:775 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Compatibilidad de Versión y Plataforma / Otras Plataformas y Clientes" -#: utils/misc/guc.c:773 +#: utils/misc/guc.c:777 msgid "Error Handling" msgstr "Gestión de Errores" -#: utils/misc/guc.c:775 +#: utils/misc/guc.c:779 msgid "Preset Options" msgstr "Opciones Predefinidas" -#: utils/misc/guc.c:777 +#: utils/misc/guc.c:781 msgid "Customized Options" msgstr "Opciones Personalizadas" -#: utils/misc/guc.c:779 +#: utils/misc/guc.c:783 msgid "Developer Options" msgstr "Opciones de Desarrollador" -#: utils/misc/guc.c:837 +#: utils/misc/guc.c:841 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Unidades válidas para este parámetro son «B», «kB», «MB», «GB» y «TB»." -#: utils/misc/guc.c:874 +#: utils/misc/guc.c:878 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "Unidades válidas son para este parámetro son «us», «ms», «s», «min», «h» y «d»." -#: utils/misc/guc.c:936 +#: utils/misc/guc.c:940 msgid "Enables the planner's use of sequential-scan plans." msgstr "Permitir el uso de planes de recorrido secuencial." -#: utils/misc/guc.c:946 +#: utils/misc/guc.c:950 msgid "Enables the planner's use of index-scan plans." msgstr "Permitir el uso de planes de recorrido de índice." -#: utils/misc/guc.c:956 +#: utils/misc/guc.c:960 msgid "Enables the planner's use of index-only-scan plans." msgstr "Permitir el uso de planes de recorrido de sólo-índice." -#: utils/misc/guc.c:966 +#: utils/misc/guc.c:970 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Permitir el uso de planes de recorrido de índice por mapas de bits." -#: utils/misc/guc.c:976 +#: utils/misc/guc.c:980 msgid "Enables the planner's use of TID scan plans." msgstr "Permitir el uso de planes de recorrido por TID." -#: utils/misc/guc.c:986 +#: utils/misc/guc.c:990 msgid "Enables the planner's use of explicit sort steps." msgstr "Permitir el uso de pasos explícitos de ordenamiento." -#: utils/misc/guc.c:996 +#: utils/misc/guc.c:1000 #, fuzzy #| msgid "Enables the planner's use of explicit sort steps." msgid "Enables the planner's use of incremental sort steps." msgstr "Permitir el uso de pasos explícitos de ordenamiento." -#: utils/misc/guc.c:1005 +#: utils/misc/guc.c:1009 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Permitir el uso de planes de agregación a través de hash." -#: utils/misc/guc.c:1015 +#: utils/misc/guc.c:1019 msgid "Enables the planner's use of materialization." msgstr "Permitir el uso de materialización de planes." -#: utils/misc/guc.c:1025 +#: utils/misc/guc.c:1029 +#, fuzzy +#| msgid "Enables the planner's use of parallel hash plans." +msgid "Enables the planner's use of result caching." +msgstr "Permitir el uso de planes «hash join» paralelos." + +#: utils/misc/guc.c:1039 msgid "Enables the planner's use of nested-loop join plans." msgstr "Permitir el uso de planes «nested-loop join»." -#: utils/misc/guc.c:1035 +#: utils/misc/guc.c:1049 msgid "Enables the planner's use of merge join plans." msgstr "Permitir el uso de planes «merge join»." -#: utils/misc/guc.c:1045 +#: utils/misc/guc.c:1059 msgid "Enables the planner's use of hash join plans." msgstr "Permitir el uso de planes «hash join»." -#: utils/misc/guc.c:1055 +#: utils/misc/guc.c:1069 msgid "Enables the planner's use of gather merge plans." msgstr "Permitir el uso de planes «gather merge»." -#: utils/misc/guc.c:1065 +#: utils/misc/guc.c:1079 msgid "Enables partitionwise join." msgstr "Permitir el uso de joins por particiones." -#: utils/misc/guc.c:1075 +#: utils/misc/guc.c:1089 msgid "Enables partitionwise aggregation and grouping." msgstr "Permitir el uso de agregación y agrupamiento por particiones." -#: utils/misc/guc.c:1085 +#: utils/misc/guc.c:1099 msgid "Enables the planner's use of parallel append plans." msgstr "Permitir el uso de planes «append» paralelos." -#: utils/misc/guc.c:1095 +#: utils/misc/guc.c:1109 msgid "Enables the planner's use of parallel hash plans." msgstr "Permitir el uso de planes «hash join» paralelos." -#: utils/misc/guc.c:1105 -msgid "Enables plan-time and run-time partition pruning." +#: utils/misc/guc.c:1119 +#, fuzzy +#| msgid "Enables plan-time and run-time partition pruning." +msgid "Enables plan-time and execution-time partition pruning." msgstr "Permitir el uso de poda de particiones en tiempo de plan y ejecución." -#: utils/misc/guc.c:1106 +#: utils/misc/guc.c:1120 msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." msgstr "Permite al optimizador de consultas y al ejecutor a comparar bordes de particiones a condiciones en las consultas para determinar qué particiones deben recorrerse." -#: utils/misc/guc.c:1117 +#: utils/misc/guc.c:1131 +#, fuzzy +#| msgid "Enables the planner's use of parallel append plans." +msgid "Enables the planner's use of async append plans." +msgstr "Permitir el uso de planes «append» paralelos." + +#: utils/misc/guc.c:1141 msgid "Enables genetic query optimization." msgstr "Permitir el uso del optimizador genético de consultas." -#: utils/misc/guc.c:1118 +#: utils/misc/guc.c:1142 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Este algoritmo intenta planear las consultas sin hacer búsqueda exhaustiva." -#: utils/misc/guc.c:1129 +#: utils/misc/guc.c:1153 msgid "Shows whether the current user is a superuser." msgstr "Indica si el usuario actual es superusuario." -#: utils/misc/guc.c:1139 +#: utils/misc/guc.c:1163 msgid "Enables advertising the server via Bonjour." msgstr "Permitir la publicación del servidor vía Bonjour." -#: utils/misc/guc.c:1148 +#: utils/misc/guc.c:1172 msgid "Collects transaction commit time." msgstr "Recolectar tiempo de compromiso de transacciones." -#: utils/misc/guc.c:1157 +#: utils/misc/guc.c:1181 msgid "Enables SSL connections." msgstr "Permitir conexiones SSL." -#: utils/misc/guc.c:1166 +#: utils/misc/guc.c:1190 msgid "Also use ssl_passphrase_command during server reload." msgstr "También usar ssl_passphrase_command durante la recarga del servidor." -#: utils/misc/guc.c:1175 +#: utils/misc/guc.c:1199 msgid "Give priority to server ciphersuite order." msgstr "Da prioridad al orden de algoritmos de cifrado especificado por el servidor." -#: utils/misc/guc.c:1184 +#: utils/misc/guc.c:1208 msgid "Forces synchronization of updates to disk." msgstr "Forzar la sincronización de escrituras a disco." -#: utils/misc/guc.c:1185 +#: utils/misc/guc.c:1209 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "El servidor usará la llamada a sistema fsync() en varios lugares para asegurarse que las actualizaciones son escritas físicamente a disco. Esto asegura que las bases de datos se recuperarán a un estado consistente después de una caída de hardware o sistema operativo." -#: utils/misc/guc.c:1196 +#: utils/misc/guc.c:1220 msgid "Continues processing after a checksum failure." msgstr "Continuar procesando después de una falla de suma de verificación." -#: utils/misc/guc.c:1197 +#: utils/misc/guc.c:1221 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "La detección de una suma de verificación que no coincide normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo ignore_checksum_failure a true hace que el sistema ignore la falla (pero aún así reporta un mensaje de warning), y continúe el procesamiento. Este comportamiento podría causar caídas del sistema u otros problemas serios. Sólo tiene efecto si las sumas de verificación están activadas." -#: utils/misc/guc.c:1211 +#: utils/misc/guc.c:1235 msgid "Continues processing past damaged page headers." msgstr "Continuar procesando después de detectar encabezados de página dañados." -#: utils/misc/guc.c:1212 +#: utils/misc/guc.c:1236 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "La detección de un encabezado de página dañado normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo zero_damaged_pages a true hace que el sistema reporte un mensaje de warning, escriba ceros en toda la página, y continúe el procesamiento. Este comportamiento destruirá datos; en particular, todas las tuplas en la página dañada." -#: utils/misc/guc.c:1225 +#: utils/misc/guc.c:1249 #, fuzzy #| msgid "Continues processing after a checksum failure." msgid "Continues recovery after an invalid pages failure." msgstr "Continuar procesando después de una falla de suma de verificación." -#: utils/misc/guc.c:1226 +#: utils/misc/guc.c:1250 #, fuzzy #| msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." msgstr "La detección de una suma de verificación que no coincide normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo ignore_checksum_failure a true hace que el sistema ignore la falla (pero aún así reporta un mensaje de warning), y continúe el procesamiento. Este comportamiento podría causar caídas del sistema u otros problemas serios. Sólo tiene efecto si las sumas de verificación están activadas." -#: utils/misc/guc.c:1244 +#: utils/misc/guc.c:1268 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "Escribe páginas completas a WAL cuando son modificadas después de un punto de control." -#: utils/misc/guc.c:1245 +#: utils/misc/guc.c:1269 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "Una escritura de página que está siendo procesada durante una caída del sistema operativo puede ser completada sólo parcialmente. Durante la recuperación, los cambios de registros (tuplas) almacenados en WAL no son suficientes para la recuperación. Esta opción activa la escritura de las páginas a WAL cuando son modificadas por primera vez después de un punto de control, de manera que una recuperación total es posible." -#: utils/misc/guc.c:1258 -msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications." +#: utils/misc/guc.c:1282 +#, fuzzy +#| msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications." +msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification." msgstr "Escribir páginas completas a WAL cuando son modificadas después de un punto de control, incluso para modificaciones no críticas." -#: utils/misc/guc.c:1268 +#: utils/misc/guc.c:1292 msgid "Compresses full-page writes written in WAL file." msgstr "Comprimir las imágenes de páginas completas al escribirlas a WAL." -#: utils/misc/guc.c:1278 +#: utils/misc/guc.c:1302 msgid "Writes zeroes to new WAL files before first use." msgstr "Escribir ceros a nuevos archivos WAL antes del primer uso." -#: utils/misc/guc.c:1288 +#: utils/misc/guc.c:1312 msgid "Recycles WAL files by renaming them." msgstr "Reciclar archivos de WAL cambiándoles de nombre." -#: utils/misc/guc.c:1298 +#: utils/misc/guc.c:1322 msgid "Logs each checkpoint." msgstr "Registrar cada punto de control." -#: utils/misc/guc.c:1307 +#: utils/misc/guc.c:1331 msgid "Logs each successful connection." msgstr "Registrar cada conexión exitosa." -#: utils/misc/guc.c:1316 +#: utils/misc/guc.c:1340 msgid "Logs end of a session, including duration." msgstr "Registrar el fin de una sesión, incluyendo su duración." -#: utils/misc/guc.c:1325 +#: utils/misc/guc.c:1349 msgid "Logs each replication command." msgstr "Registrar cada orden de replicación." -#: utils/misc/guc.c:1334 +#: utils/misc/guc.c:1358 msgid "Shows whether the running server has assertion checks enabled." msgstr "Indica si el servidor actual tiene activas las aseveraciones (asserts) activas." -#: utils/misc/guc.c:1349 +#: utils/misc/guc.c:1373 msgid "Terminate session on any error." msgstr "Terminar sesión ante cualquier error." -#: utils/misc/guc.c:1358 +#: utils/misc/guc.c:1382 msgid "Reinitialize server after backend crash." msgstr "Reinicializar el servidor después de una caída de un proceso servidor." -#: utils/misc/guc.c:1368 +#: utils/misc/guc.c:1391 +#, fuzzy +#| msgid "Reinitialize server after backend crash." +msgid "Remove temporary files after backend crash." +msgstr "Reinicializar el servidor después de una caída de un proceso servidor." + +#: utils/misc/guc.c:1401 msgid "Logs the duration of each completed SQL statement." msgstr "Registrar la duración de cada sentencia SQL ejecutada." -#: utils/misc/guc.c:1377 +#: utils/misc/guc.c:1410 msgid "Logs each query's parse tree." msgstr "Registrar cada arbol analizado de consulta " -#: utils/misc/guc.c:1386 +#: utils/misc/guc.c:1419 msgid "Logs each query's rewritten parse tree." msgstr "Registrar cada reescritura del arból analizado de consulta" -#: utils/misc/guc.c:1395 +#: utils/misc/guc.c:1428 msgid "Logs each query's execution plan." msgstr "Registrar el plan de ejecución de cada consulta." -#: utils/misc/guc.c:1404 +#: utils/misc/guc.c:1437 msgid "Indents parse and plan tree displays." msgstr "Indentar los árboles de parse y plan." -#: utils/misc/guc.c:1413 +#: utils/misc/guc.c:1446 +#, fuzzy +#| msgid "unterminated quoted identifier" +msgid "Compute query identifiers." +msgstr "un identificador entre comillas está inconcluso" + +#: utils/misc/guc.c:1455 msgid "Writes parser performance statistics to the server log." msgstr "Escribir estadísticas de parser al registro del servidor." -#: utils/misc/guc.c:1422 +#: utils/misc/guc.c:1464 msgid "Writes planner performance statistics to the server log." msgstr "Escribir estadísticas de planner al registro del servidor." -#: utils/misc/guc.c:1431 +#: utils/misc/guc.c:1473 msgid "Writes executor performance statistics to the server log." msgstr "Escribir estadísticas del executor al registro del servidor." -#: utils/misc/guc.c:1440 +#: utils/misc/guc.c:1482 msgid "Writes cumulative performance statistics to the server log." msgstr "Escribir estadísticas acumulativas al registro del servidor." -#: utils/misc/guc.c:1450 +#: utils/misc/guc.c:1492 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Registrar uso de recursos de sistema (memoria y CPU) en varias operaciones B-tree." -#: utils/misc/guc.c:1462 +#: utils/misc/guc.c:1504 msgid "Collects information about executing commands." msgstr "Recolectar estadísticas sobre órdenes en ejecución." -#: utils/misc/guc.c:1463 +#: utils/misc/guc.c:1505 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "Activa la recolección de información sobre la orden actualmente en ejecución en cada sesión, junto con el momento en el cual esa orden comenzó la ejecución." -#: utils/misc/guc.c:1473 +#: utils/misc/guc.c:1515 msgid "Collects statistics on database activity." msgstr "Recolectar estadísticas de actividad de la base de datos." -#: utils/misc/guc.c:1482 +#: utils/misc/guc.c:1524 msgid "Collects timing statistics for database I/O activity." msgstr "Recolectar estadísticas de tiempos en las operaciones de I/O de la base de datos." -#: utils/misc/guc.c:1492 +#: utils/misc/guc.c:1533 +#, fuzzy +#| msgid "Collects timing statistics for database I/O activity." +msgid "Collects timing statistics for WAL I/O activity." +msgstr "Recolectar estadísticas de tiempos en las operaciones de I/O de la base de datos." + +#: utils/misc/guc.c:1543 msgid "Updates the process title to show the active SQL command." msgstr "Actualiza el título del proceso para mostrar la orden SQL activo." -#: utils/misc/guc.c:1493 +#: utils/misc/guc.c:1544 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "Habilita que se actualice el título del proceso cada vez que una orden SQL es recibido por el servidor." -#: utils/misc/guc.c:1506 +#: utils/misc/guc.c:1557 msgid "Starts the autovacuum subprocess." msgstr "Iniciar el subproceso de autovacuum." -#: utils/misc/guc.c:1516 +#: utils/misc/guc.c:1567 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Generar salida de depuración para LISTEN y NOTIFY." -#: utils/misc/guc.c:1528 +#: utils/misc/guc.c:1579 msgid "Emits information about lock usage." msgstr "Emitir información acerca del uso de locks." -#: utils/misc/guc.c:1538 +#: utils/misc/guc.c:1589 msgid "Emits information about user lock usage." msgstr "Emitir información acerca del uso de locks de usuario." -#: utils/misc/guc.c:1548 +#: utils/misc/guc.c:1599 msgid "Emits information about lightweight lock usage." msgstr "Emitir información acerca del uso de «lightweight locks»." -#: utils/misc/guc.c:1558 +#: utils/misc/guc.c:1609 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Volcar información acerca de los locks existentes cuando se agota el tiempo de deadlock." -#: utils/misc/guc.c:1570 +#: utils/misc/guc.c:1621 msgid "Logs long lock waits." msgstr "Registrar esperas largas de bloqueos." -#: utils/misc/guc.c:1580 +#: utils/misc/guc.c:1630 +#, fuzzy +#| msgid "abort reason: recovery conflict" +msgid "Logs standby recovery conflict waits." +msgstr "razón para abortar: conflicto en la recuperación" + +#: utils/misc/guc.c:1639 msgid "Logs the host name in the connection logs." msgstr "Registrar el nombre del host en la conexión." -#: utils/misc/guc.c:1581 +#: utils/misc/guc.c:1640 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "Por omisión, los registros de conexión sólo muestran la dirección IP del host que establece la conexión. Si desea que se despliegue el nombre del host puede activar esta opción, pero dependiendo de su configuración de resolución de nombres esto puede imponer una penalización de rendimiento no despreciable." -#: utils/misc/guc.c:1592 +#: utils/misc/guc.c:1651 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Tratar expr=NULL como expr IS NULL." -#: utils/misc/guc.c:1593 +#: utils/misc/guc.c:1652 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "Cuando está activado, expresiones de la forma expr = NULL (o NULL = expr) son tratadas como expr IS NULL, esto es, retornarán verdadero si expr es evaluada al valor nulo, y falso en caso contrario. El comportamiento correcto de expr = NULL es retornar siempre null (desconocido)." -#: utils/misc/guc.c:1605 +#: utils/misc/guc.c:1664 msgid "Enables per-database user names." msgstr "Activar el uso de nombre de usuario locales a cada base de datos." -#: utils/misc/guc.c:1614 +#: utils/misc/guc.c:1673 msgid "Sets the default read-only status of new transactions." msgstr "Estado por omisión de sólo lectura de nuevas transacciones." -#: utils/misc/guc.c:1623 +#: utils/misc/guc.c:1683 msgid "Sets the current transaction's read-only status." msgstr "Activa el estado de sólo lectura de la transacción en curso." -#: utils/misc/guc.c:1633 +#: utils/misc/guc.c:1693 msgid "Sets the default deferrable status of new transactions." msgstr "Estado por omisión de postergable de nuevas transacciones." -#: utils/misc/guc.c:1642 +#: utils/misc/guc.c:1702 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "Si está activo, las transacciones serializables de sólo lectura serán pausadas hasta que puedan ejecutarse sin posibles fallas de serialización." -#: utils/misc/guc.c:1652 +#: utils/misc/guc.c:1712 msgid "Enable row security." msgstr "Activar seguridad de registros." -#: utils/misc/guc.c:1653 +#: utils/misc/guc.c:1713 msgid "When enabled, row security will be applied to all users." msgstr "Cuando está activada, la seguridad de registros se aplicará a todos los usuarios." -#: utils/misc/guc.c:1661 -msgid "Check function bodies during CREATE FUNCTION." +#: utils/misc/guc.c:1721 +#, fuzzy +#| msgid "Check function bodies during CREATE FUNCTION." +msgid "Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE." msgstr "Verificar definición de funciones durante CREATE FUNCTION." -#: utils/misc/guc.c:1670 +#: utils/misc/guc.c:1730 msgid "Enable input of NULL elements in arrays." msgstr "Habilita el ingreso de elementos nulos en arrays." -#: utils/misc/guc.c:1671 +#: utils/misc/guc.c:1731 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "Cuando está activo, un valor NULL sin comillas en la entrada de un array significa un valor nulo; en caso contrario es tomado literalmente." -#: utils/misc/guc.c:1687 +#: utils/misc/guc.c:1747 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS ya no está soportado; esto sólo puede ser false." -#: utils/misc/guc.c:1697 +#: utils/misc/guc.c:1757 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "Lanzar un subproceso para capturar stderr y/o logs CSV en archivos de log." -#: utils/misc/guc.c:1706 +#: utils/misc/guc.c:1766 msgid "Truncate existing log files of same name during log rotation." msgstr "Truncar archivos de log del mismo nombre durante la rotación." -#: utils/misc/guc.c:1717 +#: utils/misc/guc.c:1777 msgid "Emit information about resource usage in sorting." msgstr "Emitir información acerca de uso de recursos durante los ordenamientos." -#: utils/misc/guc.c:1731 +#: utils/misc/guc.c:1791 msgid "Generate debugging output for synchronized scanning." msgstr "Generar salida de depuración para recorrido sincronizado." -#: utils/misc/guc.c:1746 +#: utils/misc/guc.c:1806 msgid "Enable bounded sorting using heap sort." msgstr "Activar ordenamiento acotado usando «heap sort»." -#: utils/misc/guc.c:1759 +#: utils/misc/guc.c:1819 msgid "Emit WAL-related debugging output." msgstr "Activar salida de depuración de WAL." -#: utils/misc/guc.c:1771 -msgid "Datetimes are integer based." +#: utils/misc/guc.c:1831 +#, fuzzy +#| msgid "Datetimes are integer based." +msgid "Shows whether datetimes are integer based." msgstr "Las fechas y horas se basan en tipos enteros." -#: utils/misc/guc.c:1782 +#: utils/misc/guc.c:1842 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "Define que los nombres de usuario Kerberos y GSSAPI deberían ser tratados sin distinción de mayúsculas." -#: utils/misc/guc.c:1792 +#: utils/misc/guc.c:1852 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Avisa acerca de escapes de backslash en literales de cadena corrientes." -#: utils/misc/guc.c:1802 +#: utils/misc/guc.c:1862 msgid "Causes '...' strings to treat backslashes literally." msgstr "Provoca que las cadenas '...' traten las barras inclinadas inversas (\\) en forma literal." -#: utils/misc/guc.c:1813 +#: utils/misc/guc.c:1873 msgid "Enable synchronized sequential scans." msgstr "Permitir la sincronización de recorridos secuenciales." -#: utils/misc/guc.c:1823 +#: utils/misc/guc.c:1883 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Define si incluir o excluir la transacción con el destino de recuperación." -#: utils/misc/guc.c:1833 +#: utils/misc/guc.c:1893 msgid "Allows connections and queries during recovery." msgstr "Permite conexiones y consultas durante la recuperación." -#: utils/misc/guc.c:1843 +#: utils/misc/guc.c:1903 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Permite retroalimentación desde un hot standby hacia el primario que evitará conflictos en consultas." -#: utils/misc/guc.c:1853 +#: utils/misc/guc.c:1913 +msgid "Shows whether hot standby is currently active." +msgstr "" + +#: utils/misc/guc.c:1924 msgid "Allows modifications of the structure of system tables." msgstr "Permite modificaciones de la estructura de las tablas del sistema." -#: utils/misc/guc.c:1864 +#: utils/misc/guc.c:1935 msgid "Disables reading from system indexes." msgstr "Deshabilita lectura de índices del sistema." -#: utils/misc/guc.c:1865 +#: utils/misc/guc.c:1936 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "No evita la actualización de índices, así que es seguro. Lo peor que puede ocurrir es lentitud del sistema." -#: utils/misc/guc.c:1876 +#: utils/misc/guc.c:1947 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Activa el modo de compatibilidad con versiones anteriores de las comprobaciones de privilegios de objetos grandes." -#: utils/misc/guc.c:1877 +#: utils/misc/guc.c:1948 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "Omite las comprobaciones de privilegios cuando se leen o modifican los objetos grandes, para compatibilidad con versiones de PostgreSQL anteriores a 9.0." -#: utils/misc/guc.c:1887 -msgid "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." -msgstr "Emitir una advertencia en constructos que cambiaron significado desde PostgreSQL 9.4." - -#: utils/misc/guc.c:1897 +#: utils/misc/guc.c:1958 msgid "When generating SQL fragments, quote all identifiers." msgstr "Al generar fragmentos SQL, entrecomillar todos los identificadores." -#: utils/misc/guc.c:1907 +#: utils/misc/guc.c:1968 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Indica si las sumas de verificación están activas en este cluster." -#: utils/misc/guc.c:1918 +#: utils/misc/guc.c:1979 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Agregar número de secuencia a mensajes syslog para evitar supresión de duplicados." -#: utils/misc/guc.c:1928 +#: utils/misc/guc.c:1989 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "Dividir mensajes enviados a syslog en líneas y que quepan en 1024 bytes." -#: utils/misc/guc.c:1938 +#: utils/misc/guc.c:1999 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Controla si los Gather y Gather Merge también ejecutan subplanes." -#: utils/misc/guc.c:1939 -msgid "Should gather nodes also run subplans, or just gather tuples?" +#: utils/misc/guc.c:2000 +#, fuzzy +#| msgid "Should gather nodes also run subplans, or just gather tuples?" +msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "¿Deben los nodos de recolección ejecutar subplanes, o sólo recolectar tuplas?" -#: utils/misc/guc.c:1949 +#: utils/misc/guc.c:2010 msgid "Allow JIT compilation." msgstr "Permitir compilación JIT." -#: utils/misc/guc.c:1960 -msgid "Register JIT compiled function with debugger." +#: utils/misc/guc.c:2021 +#, fuzzy +#| msgid "Register JIT compiled function with debugger." +msgid "Register JIT-compiled functions with debugger." msgstr "Registra la función JIT compilada con el depurador." -#: utils/misc/guc.c:1977 +#: utils/misc/guc.c:2038 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "Escribe el bitcode LLVM para facilitar depuración de JIT." -#: utils/misc/guc.c:1988 +#: utils/misc/guc.c:2049 msgid "Allow JIT compilation of expressions." msgstr "Permitir compilación JIT de expresiones." -#: utils/misc/guc.c:1999 -msgid "Register JIT compiled function with perf profiler." +#: utils/misc/guc.c:2060 +#, fuzzy +#| msgid "Register JIT compiled function with perf profiler." +msgid "Register JIT-compiled functions with perf profiler." msgstr "Registrar funciones JIT-compiladas con el analizador «perf»." -#: utils/misc/guc.c:2016 +#: utils/misc/guc.c:2077 msgid "Allow JIT compilation of tuple deforming." msgstr "Permitir compilación JIT de deformación de tuplas." -#: utils/misc/guc.c:2027 +#: utils/misc/guc.c:2088 msgid "Whether to continue running after a failure to sync data files." msgstr "Si continuar ejecutando después de una falla al sincronizar archivos de datos." -#: utils/misc/guc.c:2036 +#: utils/misc/guc.c:2097 msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." msgstr "Definir si un receptor de WAL debe crear un slot de replicación temporal en caso de no haber configurado un slot permanente." -#: utils/misc/guc.c:2054 +#: utils/misc/guc.c:2115 msgid "Forces a switch to the next WAL file if a new file has not been started within N seconds." msgstr "Fuerza a que utilizar el siguiente archivo de WAL si no se ha comenzado un nuevo archivo de WAL dentro de N segundos." -#: utils/misc/guc.c:2065 +#: utils/misc/guc.c:2126 msgid "Waits N seconds on connection startup after authentication." msgstr "Espera N segundos al inicio de la conexión después de la autentificación." -#: utils/misc/guc.c:2066 utils/misc/guc.c:2624 +#: utils/misc/guc.c:2127 utils/misc/guc.c:2725 msgid "This allows attaching a debugger to the process." msgstr "Esto permite adjuntar un depurador al proceso." -#: utils/misc/guc.c:2075 +#: utils/misc/guc.c:2136 msgid "Sets the default statistics target." msgstr "Definir el valor por omisión de toma de estadísticas." -#: utils/misc/guc.c:2076 +#: utils/misc/guc.c:2137 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "Esto se aplica a columnas de tablas que no tienen un valor definido a través de ALTER TABLE SET STATISTICS." -#: utils/misc/guc.c:2085 +#: utils/misc/guc.c:2146 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Tamaño de lista de FROM a partir del cual subconsultas no serán colapsadas." -#: utils/misc/guc.c:2087 +#: utils/misc/guc.c:2148 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "El planner mezclará subconsultas en consultas de nivel superior si la lista FROM resultante es menor que esta cantidad de ítems." -#: utils/misc/guc.c:2098 +#: utils/misc/guc.c:2159 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Tamaño de lista de FROM a partir del cual constructos JOIN no serán aplanados." -#: utils/misc/guc.c:2100 +#: utils/misc/guc.c:2161 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "El planner aplanará constructos JOIN explícitos en listas de ítems FROM siempre que la lista resultante no tenga más que esta cantidad de ítems." -#: utils/misc/guc.c:2111 +#: utils/misc/guc.c:2172 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Umbral de ítems en FROM a partir del cual se usará GEQO." -#: utils/misc/guc.c:2121 +#: utils/misc/guc.c:2182 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: effort se usa para determinar los valores por defecto para otros parámetros." -#: utils/misc/guc.c:2131 +#: utils/misc/guc.c:2192 msgid "GEQO: number of individuals in the population." msgstr "GEQO: número de individuos en una población." -#: utils/misc/guc.c:2132 utils/misc/guc.c:2142 +#: utils/misc/guc.c:2193 utils/misc/guc.c:2203 msgid "Zero selects a suitable default value." msgstr "Cero selecciona un valor por omisión razonable." -#: utils/misc/guc.c:2141 +#: utils/misc/guc.c:2202 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: número de iteraciones del algoritmo." -#: utils/misc/guc.c:2153 +#: utils/misc/guc.c:2214 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Define el tiempo a esperar un lock antes de buscar un deadlock." -#: utils/misc/guc.c:2164 +#: utils/misc/guc.c:2225 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Define el máximo retardo antes de cancelar consultas cuando un servidor hot standby está procesando datos de WAL archivado." -#: utils/misc/guc.c:2175 +#: utils/misc/guc.c:2236 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "Define el máximo retardo antes de cancelar consultas cuando un servidor hot standby está procesando datos de WAL en flujo." -#: utils/misc/guc.c:2186 +#: utils/misc/guc.c:2247 msgid "Sets the minimum delay for applying changes during recovery." msgstr "Define el retraso mínimo para aplicar cambios durante la recuperación." -#: utils/misc/guc.c:2197 +#: utils/misc/guc.c:2258 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "Define el intervalo máximo entre reportes de estado que el receptor de WAL envía al servidor origen." -#: utils/misc/guc.c:2208 +#: utils/misc/guc.c:2269 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "Define el máximo tiempo de espera para recibir datos desde el servidor origen." -#: utils/misc/guc.c:2219 +#: utils/misc/guc.c:2280 msgid "Sets the maximum number of concurrent connections." msgstr "Número máximo de conexiones concurrentes." -#: utils/misc/guc.c:2230 +#: utils/misc/guc.c:2291 msgid "Sets the number of connection slots reserved for superusers." msgstr "Número de conexiones reservadas para superusuarios." -#: utils/misc/guc.c:2244 +#: utils/misc/guc.c:2301 +#, fuzzy +#| msgid "could not map dynamic shared memory segment" +msgid "Amount of dynamic shared memory reserved at startup." +msgstr "no se pudo mapear el segmento de memoria compartida dinámica" + +#: utils/misc/guc.c:2316 msgid "Sets the number of shared memory buffers used by the server." msgstr "Número de búfers de memoria compartida usados por el servidor." -#: utils/misc/guc.c:2255 +#: utils/misc/guc.c:2327 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Número de búfers de memoria temporal usados por cada sesión." -#: utils/misc/guc.c:2266 +#: utils/misc/guc.c:2338 msgid "Sets the TCP port the server listens on." msgstr "Puerto TCP en el cual escuchará el servidor." -#: utils/misc/guc.c:2276 +#: utils/misc/guc.c:2348 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Privilegios de acceso al socket Unix." -#: utils/misc/guc.c:2277 +#: utils/misc/guc.c:2349 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Los sockets de dominio Unix usan la funcionalidad de permisos de archivos estándar de Unix. Se espera que el valor de esta opción sea una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. Para usar el modo octal acostumbrado, comience el número con un 0 (cero)." -#: utils/misc/guc.c:2291 +#: utils/misc/guc.c:2363 msgid "Sets the file permissions for log files." msgstr "Define los privilegios para los archivos del registro del servidor." -#: utils/misc/guc.c:2292 +#: utils/misc/guc.c:2364 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Se espera que el valor de esta opción sea una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. Para usar el modo octal acostumbrado, comience el número con un 0 (cero)." -#: utils/misc/guc.c:2306 -msgid "Mode of the data directory." +#: utils/misc/guc.c:2378 +#, fuzzy +#| msgid "Mode of the data directory." +msgid "Shows the mode of the data directory." msgstr "Modo del directorio de datos." -#: utils/misc/guc.c:2307 +#: utils/misc/guc.c:2379 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "El valor del parámetro es una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. (Para usar el modo octal acostumbrado, comience el número con un 0 (cero).)" -#: utils/misc/guc.c:2320 +#: utils/misc/guc.c:2392 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Establece el límite de memoria que se usará para espacios de trabajo de consultas." -#: utils/misc/guc.c:2321 +#: utils/misc/guc.c:2393 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "Esta es la cantidad máxima de memoria que se usará para operaciones internas de ordenamiento y tablas de hashing, antes de comenzar a usar archivos temporales en disco." -#: utils/misc/guc.c:2333 +#: utils/misc/guc.c:2405 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Establece el límite de memoria que se usará para operaciones de mantención." -#: utils/misc/guc.c:2334 +#: utils/misc/guc.c:2406 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Esto incluye operaciones como VACUUM y CREATE INDEX." -#: utils/misc/guc.c:2344 +#: utils/misc/guc.c:2416 #, fuzzy #| msgid "Sets the maximum memory to be used for maintenance operations." msgid "Sets the maximum memory to be used for logical decoding." msgstr "Establece el límite de memoria que se usará para operaciones de mantención." -#: utils/misc/guc.c:2345 +#: utils/misc/guc.c:2417 #, fuzzy #| msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgid "This much memory can be used by each internal reorder buffer before spilling to disk." msgstr "Esta es la cantidad máxima de memoria que se usará para operaciones internas de ordenamiento y tablas de hashing, antes de comenzar a usar archivos temporales en disco." -#: utils/misc/guc.c:2361 +#: utils/misc/guc.c:2433 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Establece el tamaño máximo del stack, en kilobytes." -#: utils/misc/guc.c:2372 +#: utils/misc/guc.c:2444 msgid "Limits the total size of all temporary files used by each process." msgstr "Limita el tamaño total de todos los archivos temporales usados en cada proceso." -#: utils/misc/guc.c:2373 +#: utils/misc/guc.c:2445 msgid "-1 means no limit." msgstr "-1 significa sin límite." -#: utils/misc/guc.c:2383 +#: utils/misc/guc.c:2455 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Costo de Vacuum de una página encontrada en el buffer." -#: utils/misc/guc.c:2393 +#: utils/misc/guc.c:2465 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Costo de Vacuum de una página no encontrada en el cache." -#: utils/misc/guc.c:2403 +#: utils/misc/guc.c:2475 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Costo de Vacuum de una página ensuciada por vacuum." -#: utils/misc/guc.c:2413 +#: utils/misc/guc.c:2485 msgid "Vacuum cost amount available before napping." msgstr "Costo de Vacuum disponible antes de descansar." -#: utils/misc/guc.c:2423 +#: utils/misc/guc.c:2495 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Costo de Vacuum disponible antes de descansar, para autovacuum." -#: utils/misc/guc.c:2433 +#: utils/misc/guc.c:2505 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "Define la cantidad máxima de archivos abiertos por cada subproceso." -#: utils/misc/guc.c:2446 +#: utils/misc/guc.c:2518 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Define la cantidad máxima de transacciones preparadas simultáneas." -#: utils/misc/guc.c:2457 +#: utils/misc/guc.c:2529 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Define el OID mínimo para hacer seguimiento de locks." -#: utils/misc/guc.c:2458 +#: utils/misc/guc.c:2530 msgid "Is used to avoid output on system tables." msgstr "Se usa para evitar salida excesiva por tablas de sistema." -#: utils/misc/guc.c:2467 +#: utils/misc/guc.c:2539 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Define el OID de una tabla con trazado incondicional de locks." -#: utils/misc/guc.c:2479 +#: utils/misc/guc.c:2551 msgid "Sets the maximum allowed duration of any statement." msgstr "Define la duración máxima permitida de sentencias." -#: utils/misc/guc.c:2480 utils/misc/guc.c:2491 utils/misc/guc.c:2502 +#: utils/misc/guc.c:2552 utils/misc/guc.c:2563 utils/misc/guc.c:2574 +#: utils/misc/guc.c:2585 msgid "A value of 0 turns off the timeout." msgstr "Un valor de 0 desactiva el máximo." -#: utils/misc/guc.c:2490 +#: utils/misc/guc.c:2562 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Define la duración máxima permitida de cualquier espera por un lock." -#: utils/misc/guc.c:2501 -msgid "Sets the maximum allowed duration of any idling transaction." +#: utils/misc/guc.c:2573 +#, fuzzy +#| msgid "Sets the maximum allowed duration of any idling transaction." +msgid "Sets the maximum allowed idle time between queries, when in a transaction." +msgstr "Define la duración máxima permitida de transacciones inactivas." + +#: utils/misc/guc.c:2584 +#, fuzzy +#| msgid "Sets the maximum allowed duration of any idling transaction." +msgid "Sets the maximum allowed idle time between queries, when not in a transaction." msgstr "Define la duración máxima permitida de transacciones inactivas." -#: utils/misc/guc.c:2512 +#: utils/misc/guc.c:2595 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Mínima edad a la cual VACUUM debería congelar (freeze) una fila de una tabla." -#: utils/misc/guc.c:2522 +#: utils/misc/guc.c:2605 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Edad a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." -#: utils/misc/guc.c:2532 +#: utils/misc/guc.c:2615 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Mínima edad a la cual VACUUM debería congelar (freeze) el multixact en una fila." -#: utils/misc/guc.c:2542 +#: utils/misc/guc.c:2625 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Edad de multixact a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." -#: utils/misc/guc.c:2552 +#: utils/misc/guc.c:2635 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Número de transacciones por las cuales VACUUM y la limpieza HOT deberían postergarse." -#: utils/misc/guc.c:2565 +#: utils/misc/guc.c:2644 +#, fuzzy +#| msgid "Age at which VACUUM should scan whole table to freeze tuples." +msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." +msgstr "Edad a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." + +#: utils/misc/guc.c:2653 +#, fuzzy +#| msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." +msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." +msgstr "Edad de multixact a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." + +#: utils/misc/guc.c:2666 msgid "Sets the maximum number of locks per transaction." msgstr "Cantidad máxima de candados (locks) por transacción." -#: utils/misc/guc.c:2566 +#: utils/misc/guc.c:2667 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "El tamaño de la tabla compartida de candados se calcula usando la suposición de que a lo más max_locks_per_transaction * max_connections objetos necesitarán ser bloqueados simultáneamente." -#: utils/misc/guc.c:2577 +#: utils/misc/guc.c:2678 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Cantidad máxima de candados (locks) de predicado por transacción." -#: utils/misc/guc.c:2578 +#: utils/misc/guc.c:2679 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "El tamaño de la tabla compartida de candados se calcula usando la suposición de que a lo más max_pred_locks_per_transaction * max_connections objetos necesitarán ser bloqueados simultáneamente." -#: utils/misc/guc.c:2589 +#: utils/misc/guc.c:2690 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "Cantidad máxima de páginas y tuplas bloqueadas por predicado." -#: utils/misc/guc.c:2590 +#: utils/misc/guc.c:2691 msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." msgstr "Si más que este total de páginas y tuplas en la misma relación están bloqueadas por una conexión, esos locks son reemplazados por un lock a nivel de relación." -#: utils/misc/guc.c:2600 +#: utils/misc/guc.c:2701 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Cantidad máxima de locks de predicado por página." -#: utils/misc/guc.c:2601 +#: utils/misc/guc.c:2702 msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." msgstr "Si más que este número de tuplas de la misma página están bloqueadas por una conexión, esos locks son reemplazados por un lock a nivel de página." -#: utils/misc/guc.c:2611 +#: utils/misc/guc.c:2712 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Define el tiempo máximo para completar proceso de autentificación." -#: utils/misc/guc.c:2623 +#: utils/misc/guc.c:2724 msgid "Waits N seconds on connection startup before authentication." msgstr "Espera N segundos al inicio de la conexión antes de la autentificación." -#: utils/misc/guc.c:2634 +#: utils/misc/guc.c:2735 #, fuzzy #| msgid "Shows the size of write ahead log segments." msgid "Sets the size of WAL files held for standby servers." msgstr "Muestra el tamaño de los segmentos de WAL." -#: utils/misc/guc.c:2645 +#: utils/misc/guc.c:2746 msgid "Sets the minimum size to shrink the WAL to." msgstr "Define el tamaño mínimo al cual reducir el WAL." -#: utils/misc/guc.c:2657 +#: utils/misc/guc.c:2758 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Define el tamaño de WAL que desencadena un checkpoint." -#: utils/misc/guc.c:2669 +#: utils/misc/guc.c:2770 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Define el tiempo máximo entre puntos de control de WAL automáticos." -#: utils/misc/guc.c:2680 +#: utils/misc/guc.c:2781 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "Registrar si el llenado de segmentos de WAL es más frecuente que esto." -#: utils/misc/guc.c:2682 +#: utils/misc/guc.c:2783 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "Envía un mensaje a los registros del servidor si los punto de control causados por el llenado de archivos de segmento sucede con más frecuencia que este número de segundos. Un valor de 0 (cero) desactiva la opción." -#: utils/misc/guc.c:2694 utils/misc/guc.c:2910 utils/misc/guc.c:2957 +#: utils/misc/guc.c:2795 utils/misc/guc.c:3011 utils/misc/guc.c:3058 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "Número de páginas después del cual las escrituras previamente ejecutadas se sincronizan a disco." -#: utils/misc/guc.c:2705 +#: utils/misc/guc.c:2806 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Búfers en memoria compartida para páginas de WAL." -#: utils/misc/guc.c:2716 +#: utils/misc/guc.c:2817 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Tiempo entre sincronizaciones de WAL ejecutadas por el proceso escritor de WAL." -#: utils/misc/guc.c:2727 +#: utils/misc/guc.c:2828 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Cantidad de WAL escrito por el proceso escritor de WAL que desencadena una sincronización (flush)." -#: utils/misc/guc.c:2738 -msgid "Size of new file to fsync instead of writing WAL." +#: utils/misc/guc.c:2839 +#, fuzzy +#| msgid "Size of new file to fsync instead of writing WAL." +msgid "Minimum size of new file to fsync instead of writing WAL." msgstr "Tamaño del nuevo archivo para hacer fsync en lugar de escribir WAL." -#: utils/misc/guc.c:2749 +#: utils/misc/guc.c:2850 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "Define la cantidad máxima de procesos «WAL sender» simultáneos." -#: utils/misc/guc.c:2760 +#: utils/misc/guc.c:2861 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Define la cantidad máxima de slots de replicación definidos simultáneamente." -#: utils/misc/guc.c:2770 +#: utils/misc/guc.c:2871 #, fuzzy #| msgid "Sets the maximum number of simultaneously defined replication slots." msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "Define la cantidad máxima de slots de replicación definidos simultáneamente." -#: utils/misc/guc.c:2771 +#: utils/misc/guc.c:2872 msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." msgstr "Los slots de replicación serán invalidados, y los segmentos de WAL eliminados o reciclados, si se usa esta cantidad de espacio de disco en WAL." -#: utils/misc/guc.c:2783 +#: utils/misc/guc.c:2884 msgid "Sets the maximum time to wait for WAL replication." msgstr "Define el tiempo máximo a esperar la replicación de WAL." -#: utils/misc/guc.c:2794 +#: utils/misc/guc.c:2895 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Retardo en microsegundos entre completar una transacción y escribir WAL a disco." -#: utils/misc/guc.c:2806 +#: utils/misc/guc.c:2907 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "Mínimo de transacciones concurrentes para esperar commit_delay." -#: utils/misc/guc.c:2817 +#: utils/misc/guc.c:2918 msgid "Sets the number of digits displayed for floating-point values." msgstr "Ajustar el número de dígitos mostrados para valores de coma flotante." -#: utils/misc/guc.c:2818 +#: utils/misc/guc.c:2919 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." msgstr "Esto afecta los tipos real, de doble precisión, y geométricos. Un valor del parámetro cero o negativo se agrega a la cantidad estándar de dígitos (FLT_DIG o DBL_DIG, según sea apropiado). Cualquier valor mayor que cero selecciona el modo de salida preciso." -#: utils/misc/guc.c:2830 +#: utils/misc/guc.c:2931 #, fuzzy #| msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." msgstr "Tiempo mínimo de ejecución a partir del cual se registran las acciones de autovacuum." -#: utils/misc/guc.c:2833 +#: utils/misc/guc.c:2934 #, fuzzy #| msgid "Zero prints all queries. -1 turns this feature off." -msgid "Zero log a sample of all queries. -1 turns this feature off." +msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "Cero imprime todas las consultas. -1 desactiva esta funcionalidad." -#: utils/misc/guc.c:2843 +#: utils/misc/guc.c:2944 #, fuzzy #| msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgid "Sets the minimum execution time above which all statements will be logged." msgstr "Tiempo mínimo de ejecución a partir del cual se registran las acciones de autovacuum." -#: utils/misc/guc.c:2845 +#: utils/misc/guc.c:2946 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Cero imprime todas las consultas. -1 desactiva esta funcionalidad." -#: utils/misc/guc.c:2855 +#: utils/misc/guc.c:2956 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "Tiempo mínimo de ejecución a partir del cual se registran las acciones de autovacuum." -#: utils/misc/guc.c:2857 +#: utils/misc/guc.c:2958 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Cero registra todas las acciones. -1 desactiva el registro de autovacuum." -#: utils/misc/guc.c:2867 +#: utils/misc/guc.c:2968 msgid "When logging statements, limit logged parameter values to first N bytes." msgstr "Cuando se registren sentencias, limitar los valores de parámetros registrados a los primeros N bytes." -#: utils/misc/guc.c:2868 utils/misc/guc.c:2879 +#: utils/misc/guc.c:2969 utils/misc/guc.c:2980 msgid "-1 to print values in full." msgstr "-1 para mostrar los valores completos." -#: utils/misc/guc.c:2878 +#: utils/misc/guc.c:2979 msgid "When reporting an error, limit logged parameter values to first N bytes." msgstr "Cuando se reporta un error, limitar los valores de parámetros registrados a los primeros N bytes." -#: utils/misc/guc.c:2889 +#: utils/misc/guc.c:2990 msgid "Background writer sleep time between rounds." msgstr "Tiempo de descanso entre rondas del background writer" -#: utils/misc/guc.c:2900 +#: utils/misc/guc.c:3001 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Número máximo de páginas LRU a escribir en cada ronda del background writer" -#: utils/misc/guc.c:2923 +#: utils/misc/guc.c:3024 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Cantidad máxima de peticiones simultáneas que pueden ser manejadas eficientemente por el sistema de disco." -#: utils/misc/guc.c:2924 -msgid "For RAID arrays, this should be approximately the number of drive spindles in the array." -msgstr "Para arrays RAID, esto debería ser aproximadamente la cantidad de discos en el array." - -#: utils/misc/guc.c:2941 +#: utils/misc/guc.c:3042 msgid "A variant of effective_io_concurrency that is used for maintenance work." msgstr "Una variante de effective_io_concurrency que se usa para tareas de mantención." -#: utils/misc/guc.c:2970 +#: utils/misc/guc.c:3071 msgid "Maximum number of concurrent worker processes." msgstr "Número máximo de procesos ayudantes concurrentes." -#: utils/misc/guc.c:2982 +#: utils/misc/guc.c:3083 msgid "Maximum number of logical replication worker processes." msgstr "Número máximo de procesos ayudantes de replicación lógica." -#: utils/misc/guc.c:2994 +#: utils/misc/guc.c:3095 msgid "Maximum number of table synchronization workers per subscription." msgstr "Número máximo de procesos ayudantes de sincronización por suscripción." -#: utils/misc/guc.c:3004 +#: utils/misc/guc.c:3105 msgid "Automatic log file rotation will occur after N minutes." msgstr "La rotación automática de archivos de log se efectuará después de N minutos." -#: utils/misc/guc.c:3015 +#: utils/misc/guc.c:3116 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "La rotación automática de archivos de log se efectuará después de N kilobytes." -#: utils/misc/guc.c:3026 +#: utils/misc/guc.c:3127 msgid "Shows the maximum number of function arguments." msgstr "Muestra la cantidad máxima de argumentos de funciones." -#: utils/misc/guc.c:3037 +#: utils/misc/guc.c:3138 msgid "Shows the maximum number of index keys." msgstr "Muestra la cantidad máxima de claves de índices." -#: utils/misc/guc.c:3048 +#: utils/misc/guc.c:3149 msgid "Shows the maximum identifier length." msgstr "Muestra el largo máximo de identificadores." -#: utils/misc/guc.c:3059 +#: utils/misc/guc.c:3160 msgid "Shows the size of a disk block." msgstr "Muestra el tamaño de un bloque de disco." -#: utils/misc/guc.c:3070 +#: utils/misc/guc.c:3171 msgid "Shows the number of pages per disk file." msgstr "Muestra el número de páginas por archivo en disco." -#: utils/misc/guc.c:3081 +#: utils/misc/guc.c:3182 msgid "Shows the block size in the write ahead log." msgstr "Muestra el tamaño de bloque en el write-ahead log." -#: utils/misc/guc.c:3092 +#: utils/misc/guc.c:3193 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Define el tiempo a esperar antes de reintentar obtener WAL después de un intento fallido." -#: utils/misc/guc.c:3104 +#: utils/misc/guc.c:3205 msgid "Shows the size of write ahead log segments." msgstr "Muestra el tamaño de los segmentos de WAL." -#: utils/misc/guc.c:3117 +#: utils/misc/guc.c:3218 msgid "Time to sleep between autovacuum runs." msgstr "Tiempo de descanso entre ejecuciones de autovacuum." -#: utils/misc/guc.c:3127 +#: utils/misc/guc.c:3228 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Número mínimo de updates o deletes antes de ejecutar vacuum." -#: utils/misc/guc.c:3136 +#: utils/misc/guc.c:3237 #, fuzzy #| msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." msgstr "Número mínimo de inserciones, actualizaciones y eliminaciones de tuplas antes de ejecutar analyze." -#: utils/misc/guc.c:3145 +#: utils/misc/guc.c:3246 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Número mínimo de inserciones, actualizaciones y eliminaciones de tuplas antes de ejecutar analyze." -#: utils/misc/guc.c:3155 +#: utils/misc/guc.c:3256 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Edad a la cual aplicar VACUUM automáticamente a una tabla para prevenir problemas por reciclaje de ID de transacción." -#: utils/misc/guc.c:3166 +#: utils/misc/guc.c:3271 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Edad de multixact a la cual aplicar VACUUM automáticamente a una tabla para prevenir problemas por reciclaje de ID de multixacts." -#: utils/misc/guc.c:3176 +#: utils/misc/guc.c:3281 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Define la cantidad máxima de procesos «autovacuum worker» simultáneos." -#: utils/misc/guc.c:3186 +#: utils/misc/guc.c:3291 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "Cantidad máxima de procesos ayudantes paralelos por operación de mantención." -#: utils/misc/guc.c:3196 +#: utils/misc/guc.c:3301 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Cantidad máxima de locks de predicado por nodo de ejecución." -#: utils/misc/guc.c:3207 +#: utils/misc/guc.c:3312 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "Define la cantidad máxima de procesos ayudantes que pueden estar activos en un momento dado." -#: utils/misc/guc.c:3218 +#: utils/misc/guc.c:3323 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Establece el límite de memoria que cada proceso «autovacuum worker» usará." -#: utils/misc/guc.c:3229 +#: utils/misc/guc.c:3334 msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." msgstr "Tiempo antes de que un snapshot sea demasiado antiguo para leer páginas después de que el snapshot fue tomado." -#: utils/misc/guc.c:3230 +#: utils/misc/guc.c:3335 msgid "A value of -1 disables this feature." msgstr "El valor -1 desactiva esta característica." -#: utils/misc/guc.c:3240 +#: utils/misc/guc.c:3345 msgid "Time between issuing TCP keepalives." msgstr "Tiempo entre cada emisión de TCP keepalive." -#: utils/misc/guc.c:3241 utils/misc/guc.c:3252 utils/misc/guc.c:3376 +#: utils/misc/guc.c:3346 utils/misc/guc.c:3357 utils/misc/guc.c:3481 msgid "A value of 0 uses the system default." msgstr "Un valor 0 usa el valor por omisión del sistema." -#: utils/misc/guc.c:3251 +#: utils/misc/guc.c:3356 msgid "Time between TCP keepalive retransmits." msgstr "Tiempo entre retransmisiones TCP keepalive." -#: utils/misc/guc.c:3262 +#: utils/misc/guc.c:3367 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "La renegociación SSL ya no está soportada; esto sólo puede ser 0." -#: utils/misc/guc.c:3273 +#: utils/misc/guc.c:3378 msgid "Maximum number of TCP keepalive retransmits." msgstr "Cantidad máxima de retransmisiones TCP keepalive." -#: utils/misc/guc.c:3274 +#: utils/misc/guc.c:3379 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "Esto controla el número de retransmisiones consecutivas de keepalive que pueden ser perdidas antes que la conexión sea considerada muerta. Un valor 0 usa el valor por omisión del sistema." -#: utils/misc/guc.c:3285 +#: utils/misc/guc.c:3390 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Define el máximo de resultados permitidos por búsquedas exactas con GIN." -#: utils/misc/guc.c:3296 +#: utils/misc/guc.c:3401 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Define la suposición del optimizador sobre el tamaño total de los caches de datos." -#: utils/misc/guc.c:3297 +#: utils/misc/guc.c:3402 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "Esto es, el tamaño total de caches (cache del kernel y búfers compartidos) usados por archivos de datos de PostgreSQL. Esto se mide en páginas de disco, que normalmente son de 8 kB cada una." -#: utils/misc/guc.c:3308 +#: utils/misc/guc.c:3413 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Define la cantidad mínima de datos en una tabla para un recorrido paralelo." -#: utils/misc/guc.c:3309 +#: utils/misc/guc.c:3414 msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." msgstr "Si el planificador estima que leerá un número de páginas de tabla demasiado pequeñas para alcanzar este límite, no se considerará una búsqueda paralela." -#: utils/misc/guc.c:3319 +#: utils/misc/guc.c:3424 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Define la cantidad mínima de datos en un índice para un recorrido paralelo." -#: utils/misc/guc.c:3320 +#: utils/misc/guc.c:3425 msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." msgstr "Si el planificador estima que leerá un número de páginas de índice demasiado pequeñas para alcanzar este límite, no se considerará una búsqueda paralela." -#: utils/misc/guc.c:3331 +#: utils/misc/guc.c:3436 msgid "Shows the server version as an integer." msgstr "Muestra la versión del servidor como un número entero." -#: utils/misc/guc.c:3342 +#: utils/misc/guc.c:3447 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "Registra el uso de archivos temporales que crezcan más allá de este número de kilobytes." -#: utils/misc/guc.c:3343 +#: utils/misc/guc.c:3448 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "Cero registra todos los archivos. El valor por omisión es -1 (lo cual desactiva el registro)." -#: utils/misc/guc.c:3353 +#: utils/misc/guc.c:3458 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Tamaño reservado para pg_stat_activity.query, en bytes." -#: utils/misc/guc.c:3364 +#: utils/misc/guc.c:3469 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Define el tamaño máximo de la lista de pendientes de un índice GIN." -#: utils/misc/guc.c:3375 +#: utils/misc/guc.c:3480 msgid "TCP user timeout." msgstr "Tiempo de expiración de TCP." -#: utils/misc/guc.c:3395 +#: utils/misc/guc.c:3491 +msgid "The size of huge page that should be requested." +msgstr "" + +#: utils/misc/guc.c:3502 +msgid "Aggressively invalidate system caches for debugging purposes." +msgstr "" + +#: utils/misc/guc.c:3525 +#, fuzzy +#| msgid "Sets the maximum interval between WAL receiver status reports to the sending server." +msgid "Sets the time interval between checks for disconnection while running queries." +msgstr "Define el intervalo máximo entre reportes de estado que el receptor de WAL envía al servidor origen." + +#: utils/misc/guc.c:3545 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "Estimación del costo de una página leída secuencialmente." -#: utils/misc/guc.c:3406 +#: utils/misc/guc.c:3556 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "Estimación del costo de una página leída no secuencialmente." -#: utils/misc/guc.c:3417 +#: utils/misc/guc.c:3567 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "Estimación del costo de procesar cada tupla (fila)." -#: utils/misc/guc.c:3428 +#: utils/misc/guc.c:3578 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "Estimación del costo de procesar cada fila de índice durante un recorrido de índice." -#: utils/misc/guc.c:3439 +#: utils/misc/guc.c:3589 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "Estimación del costo de procesar cada operador o llamada a función." -#: utils/misc/guc.c:3450 -msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." +#: utils/misc/guc.c:3600 +#, fuzzy +#| msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." +msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to leader backend." msgstr "Estimación del costo de pasar cada tupla (fila) desde un proceso ayudante al proceso servidor principal." -#: utils/misc/guc.c:3461 +#: utils/misc/guc.c:3611 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "Estimación del costo de lanzar procesos ayudantes para consultas en paralelo." -#: utils/misc/guc.c:3473 +#: utils/misc/guc.c:3623 msgid "Perform JIT compilation if query is more expensive." msgstr "Ejecutar compilación JIT si la consulta es más cara." -#: utils/misc/guc.c:3474 +#: utils/misc/guc.c:3624 msgid "-1 disables JIT compilation." msgstr "-1 inhabilita compilación JIT." -#: utils/misc/guc.c:3484 -msgid "Optimize JITed functions if query is more expensive." +#: utils/misc/guc.c:3634 +#, fuzzy +#| msgid "Optimize JITed functions if query is more expensive." +msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "Optimizar funciones JIT-compiladas si la consulta es más cara." -#: utils/misc/guc.c:3485 +#: utils/misc/guc.c:3635 msgid "-1 disables optimization." msgstr "-1 inhabilita la optimización." -#: utils/misc/guc.c:3495 +#: utils/misc/guc.c:3645 msgid "Perform JIT inlining if query is more expensive." msgstr "Ejecutar «inlining» JIT si la consulta es más cara." -#: utils/misc/guc.c:3496 +#: utils/misc/guc.c:3646 msgid "-1 disables inlining." msgstr "-1 inhabilita el «inlining»." -#: utils/misc/guc.c:3506 +#: utils/misc/guc.c:3656 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Estimación de la fracción de filas de un cursor que serán extraídas." -#: utils/misc/guc.c:3518 +#: utils/misc/guc.c:3668 msgid "GEQO: selective pressure within the population." msgstr "GEQO: presión selectiva dentro de la población." -#: utils/misc/guc.c:3529 +#: utils/misc/guc.c:3679 msgid "GEQO: seed for random path selection." msgstr "GEQO: semilla para la selección aleatoria de caminos." -#: utils/misc/guc.c:3540 +#: utils/misc/guc.c:3690 msgid "Multiple of work_mem to use for hash tables." msgstr "Múltiplo de work_mem para el uso de tablas de hash." -#: utils/misc/guc.c:3551 +#: utils/misc/guc.c:3701 msgid "Multiple of the average buffer usage to free per round." msgstr "Múltiplo del uso promedio de búfers que liberar en cada ronda." -#: utils/misc/guc.c:3561 +#: utils/misc/guc.c:3711 msgid "Sets the seed for random-number generation." msgstr "Semilla para la generación de números aleatorios." -#: utils/misc/guc.c:3572 +#: utils/misc/guc.c:3722 msgid "Vacuum cost delay in milliseconds." msgstr "Tiempo de descanso de vacuum en milisegundos." -#: utils/misc/guc.c:3583 +#: utils/misc/guc.c:3733 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Tiempo de descanso de vacuum en milisegundos, para autovacuum." -#: utils/misc/guc.c:3594 +#: utils/misc/guc.c:3744 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Número de updates o deletes de tuplas antes de ejecutar un vacuum, como fracción de reltuples." -#: utils/misc/guc.c:3604 +#: utils/misc/guc.c:3754 #, fuzzy #| msgid "Number of tuple inserts prior to index cleanup as a fraction of reltuples." msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "Número de inserts de tuplas antes de ejecutar una limpieza de índice, como fracción de reltuples." -#: utils/misc/guc.c:3614 +#: utils/misc/guc.c:3764 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Número mínimo de inserciones, actualizaciones y eliminaciones de tuplas antes de ejecutar analyze, como fracción de reltuples." -#: utils/misc/guc.c:3624 +#: utils/misc/guc.c:3774 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "Tiempo utilizado en escribir páginas «sucias» durante los puntos de control, medido como fracción del intervalo del punto de control." -#: utils/misc/guc.c:3634 -msgid "Number of tuple inserts prior to index cleanup as a fraction of reltuples." -msgstr "Número de inserts de tuplas antes de ejecutar una limpieza de índice, como fracción de reltuples." - -#: utils/misc/guc.c:3644 +#: utils/misc/guc.c:3784 msgid "Fraction of statements exceeding log_min_duration_sample to be logged." msgstr "Fracción de sentencias que duren más de log_min_duration_sample a ser registradas." -#: utils/misc/guc.c:3645 +#: utils/misc/guc.c:3785 msgid "Use a value between 0.0 (never log) and 1.0 (always log)." msgstr "Use un valor entre 0.0 (no registrar nunca) y 1.0 (registrar siempre)." -#: utils/misc/guc.c:3654 -msgid "Set the fraction of transactions to log for new transactions." +#: utils/misc/guc.c:3794 +#, fuzzy +#| msgid "Set the fraction of transactions to log for new transactions." +msgid "Sets the fraction of transactions from which to log all statements." msgstr "Define la fracción de transacciones que registrar en el log, para nuevas transacciones." -#: utils/misc/guc.c:3655 -msgid "Logs all statements from a fraction of transactions. Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." +#: utils/misc/guc.c:3795 +#, fuzzy +#| msgid "Logs all statements from a fraction of transactions. Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." +msgid "Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgstr "Registra todas las sentencias de una fracción de transacciones. Use un valor entre 0.0 (nunca registrar) y 1.0 (registrar todas las sentencias de todas las transacciones)." -#: utils/misc/guc.c:3675 +#: utils/misc/guc.c:3814 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Orden de shell que se invocará para archivar un archivo WAL." -#: utils/misc/guc.c:3685 +#: utils/misc/guc.c:3824 #, fuzzy #| msgid "Sets the shell command that will be called to archive a WAL file." -msgid "Sets the shell command that will retrieve an archived WAL file." +msgid "Sets the shell command that will be called to retrieve an archived WAL file." msgstr "Orden de shell que se invocará para archivar un archivo WAL." -#: utils/misc/guc.c:3695 +#: utils/misc/guc.c:3834 msgid "Sets the shell command that will be executed at every restart point." msgstr "Orden de shell que se invocará en cada «restart point»." -#: utils/misc/guc.c:3705 +#: utils/misc/guc.c:3844 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "Orden de shell que se invocará una vez al terminar la recuperación." -#: utils/misc/guc.c:3715 +#: utils/misc/guc.c:3854 msgid "Specifies the timeline to recover into." msgstr "Especifica la línea de tiempo a la cual recuperar." -#: utils/misc/guc.c:3725 +#: utils/misc/guc.c:3864 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "Defina a «immediate» para terminar la recuperación en cuando se alcance el estado consistente." -#: utils/misc/guc.c:3734 +#: utils/misc/guc.c:3873 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "Define el ID de transacción hasta el cual se ejecutará la recuperación." -#: utils/misc/guc.c:3743 +#: utils/misc/guc.c:3882 msgid "Sets the time stamp up to which recovery will proceed." msgstr "Define la marca de tiempo hasta la cual se ejecutará la recuperación." -#: utils/misc/guc.c:3752 +#: utils/misc/guc.c:3891 msgid "Sets the named restore point up to which recovery will proceed." msgstr "Define el nombre del punto de restauración hasta el cual se ejecutará la recuperación." -#: utils/misc/guc.c:3761 +#: utils/misc/guc.c:3900 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "Define el LSN de la ubicación de WAL hasta la cual se ejecutará la recuperación." -#: utils/misc/guc.c:3771 +#: utils/misc/guc.c:3910 msgid "Specifies a file name whose presence ends recovery in the standby." msgstr "Especifica un nombre de archivo cuya presencia termina la recuperación en el standby." -#: utils/misc/guc.c:3781 +#: utils/misc/guc.c:3920 msgid "Sets the connection string to be used to connect to the sending server." msgstr "Define la cadena de conexión que se usará para conectarse al servidor de origen." -#: utils/misc/guc.c:3792 +#: utils/misc/guc.c:3931 msgid "Sets the name of the replication slot to use on the sending server." msgstr "Define el nombre del slot de replicación a utilizar en el servidor de origen." -#: utils/misc/guc.c:3802 +#: utils/misc/guc.c:3941 msgid "Sets the client's character set encoding." msgstr "Codificación del juego de caracteres del cliente." -#: utils/misc/guc.c:3813 +#: utils/misc/guc.c:3952 msgid "Controls information prefixed to each log line." msgstr "Controla el prefijo que antecede cada línea registrada." -#: utils/misc/guc.c:3814 +#: utils/misc/guc.c:3953 msgid "If blank, no prefix is used." msgstr "si está en blanco, no se usa prefijo." -#: utils/misc/guc.c:3823 +#: utils/misc/guc.c:3962 msgid "Sets the time zone to use in log messages." msgstr "Define el huso horario usando en los mensajes registrados." -#: utils/misc/guc.c:3833 +#: utils/misc/guc.c:3972 msgid "Sets the display format for date and time values." msgstr "Formato de salida para valores de horas y fechas." -#: utils/misc/guc.c:3834 +#: utils/misc/guc.c:3973 msgid "Also controls interpretation of ambiguous date inputs." msgstr "También controla la interpretación de entradas ambiguas de fechas" -#: utils/misc/guc.c:3845 +#: utils/misc/guc.c:3984 msgid "Sets the default table access method for new tables." msgstr "Define el método de acceso a tablas por omisión para nuevas tablas." -#: utils/misc/guc.c:3856 +#: utils/misc/guc.c:3995 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Define el tablespace en el cual crear tablas e índices." -#: utils/misc/guc.c:3857 +#: utils/misc/guc.c:3996 msgid "An empty string selects the database's default tablespace." msgstr "Una cadena vacía especifica el tablespace por omisión de la base de datos." -#: utils/misc/guc.c:3867 +#: utils/misc/guc.c:4006 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "Define el/los tablespace/s en el cual crear tablas temporales y archivos de ordenamiento." -#: utils/misc/guc.c:3878 +#: utils/misc/guc.c:4017 msgid "Sets the path for dynamically loadable modules." msgstr "Ruta para módulos dinámicos." -#: utils/misc/guc.c:3879 +#: utils/misc/guc.c:4018 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "Si se necesita abrir un módulo dinámico y el nombre especificado no tiene un componente de directorio (es decir, no contiene un slash), el sistema buscará el archivo especificado en esta ruta." -#: utils/misc/guc.c:3892 +#: utils/misc/guc.c:4031 msgid "Sets the location of the Kerberos server key file." msgstr "Ubicación del archivo de llave del servidor Kerberos." -#: utils/misc/guc.c:3903 +#: utils/misc/guc.c:4042 msgid "Sets the Bonjour service name." msgstr "Nombre del servicio Bonjour." -#: utils/misc/guc.c:3915 +#: utils/misc/guc.c:4054 msgid "Shows the collation order locale." msgstr "Configuración regional de ordenamiento de cadenas (collation)." -#: utils/misc/guc.c:3926 +#: utils/misc/guc.c:4065 msgid "Shows the character classification and case conversion locale." msgstr "Configuración regional de clasificación de caracteres y conversión de mayúsculas." -#: utils/misc/guc.c:3937 +#: utils/misc/guc.c:4076 msgid "Sets the language in which messages are displayed." msgstr "Idioma en el que se despliegan los mensajes." -#: utils/misc/guc.c:3947 +#: utils/misc/guc.c:4086 msgid "Sets the locale for formatting monetary amounts." msgstr "Configuración regional para formatos de moneda." -#: utils/misc/guc.c:3957 +#: utils/misc/guc.c:4096 msgid "Sets the locale for formatting numbers." msgstr "Configuración regional para formatos de números." -#: utils/misc/guc.c:3967 +#: utils/misc/guc.c:4106 msgid "Sets the locale for formatting date and time values." msgstr "Configuración regional para formatos de horas y fechas." -#: utils/misc/guc.c:3977 +#: utils/misc/guc.c:4116 msgid "Lists shared libraries to preload into each backend." msgstr "Bibliotecas compartidas a precargar en cada proceso." -#: utils/misc/guc.c:3988 +#: utils/misc/guc.c:4127 msgid "Lists shared libraries to preload into server." msgstr "Bibliotecas compartidas a precargar en el servidor." -#: utils/misc/guc.c:3999 +#: utils/misc/guc.c:4138 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Bibliotecas compartidas no privilegiadas a precargar en cada proceso." -#: utils/misc/guc.c:4010 +#: utils/misc/guc.c:4149 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Orden de búsqueda en schemas para nombres que no especifican schema." -#: utils/misc/guc.c:4022 -msgid "Sets the server (database) character set encoding." +#: utils/misc/guc.c:4161 +#, fuzzy +#| msgid "Sets the server (database) character set encoding." +msgid "Shows the server (database) character set encoding." msgstr "Codificación de caracteres del servidor (bases de datos)." -#: utils/misc/guc.c:4034 +#: utils/misc/guc.c:4173 msgid "Shows the server version." msgstr "Versión del servidor." -#: utils/misc/guc.c:4046 +#: utils/misc/guc.c:4185 msgid "Sets the current role." msgstr "Define el rol actual." -#: utils/misc/guc.c:4058 +#: utils/misc/guc.c:4197 msgid "Sets the session user name." msgstr "Define el nombre del usuario de sesión." -#: utils/misc/guc.c:4069 +#: utils/misc/guc.c:4208 msgid "Sets the destination for server log output." msgstr "Define el destino de la salida del registro del servidor." -#: utils/misc/guc.c:4070 +#: utils/misc/guc.c:4209 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "Los valores aceptables son combinaciones de «stderr», «syslog», «csvlog» y «eventlog», dependiendo de la plataforma." -#: utils/misc/guc.c:4081 +#: utils/misc/guc.c:4220 msgid "Sets the destination directory for log files." msgstr "Define el directorio de destino de los archivos del registro del servidor." -#: utils/misc/guc.c:4082 +#: utils/misc/guc.c:4221 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Puede ser una ruta relativa al directorio de datos o una ruta absoluta." -#: utils/misc/guc.c:4092 +#: utils/misc/guc.c:4231 msgid "Sets the file name pattern for log files." msgstr "Define el patrón para los nombres de archivo del registro del servidor." -#: utils/misc/guc.c:4103 +#: utils/misc/guc.c:4242 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Nombre de programa para identificar PostgreSQL en mensajes de syslog." -#: utils/misc/guc.c:4114 +#: utils/misc/guc.c:4253 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "Nombre de programa para identificar PostgreSQL en mensajes del log de eventos." -#: utils/misc/guc.c:4125 +#: utils/misc/guc.c:4264 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Huso horario para desplegar e interpretar valores de tiempo." -#: utils/misc/guc.c:4135 +#: utils/misc/guc.c:4274 msgid "Selects a file of time zone abbreviations." msgstr "Selecciona un archivo de abreviaciones de huso horario." -#: utils/misc/guc.c:4145 +#: utils/misc/guc.c:4284 msgid "Sets the owning group of the Unix-domain socket." msgstr "Grupo dueño del socket de dominio Unix." -#: utils/misc/guc.c:4146 +#: utils/misc/guc.c:4285 msgid "The owning user of the socket is always the user that starts the server." msgstr "El usuario dueño del socket siempre es el usuario que inicia el servidor." -#: utils/misc/guc.c:4156 +#: utils/misc/guc.c:4295 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Directorios donde se crearán los sockets de dominio Unix." -#: utils/misc/guc.c:4171 +#: utils/misc/guc.c:4310 msgid "Sets the host name or IP address(es) to listen to." msgstr "Define el nombre de anfitrión o dirección IP en la cual escuchar." -#: utils/misc/guc.c:4186 +#: utils/misc/guc.c:4325 msgid "Sets the server's data directory." msgstr "Define la ubicación del directorio de datos." -#: utils/misc/guc.c:4197 +#: utils/misc/guc.c:4336 msgid "Sets the server's main configuration file." msgstr "Define la ubicación del archivo principal de configuración del servidor." -#: utils/misc/guc.c:4208 +#: utils/misc/guc.c:4347 msgid "Sets the server's \"hba\" configuration file." msgstr "Define la ubicación del archivo de configuración «hba» del servidor." -#: utils/misc/guc.c:4219 +#: utils/misc/guc.c:4358 msgid "Sets the server's \"ident\" configuration file." msgstr "Define la ubicación del archivo de configuración «ident» del servidor." -#: utils/misc/guc.c:4230 +#: utils/misc/guc.c:4369 msgid "Writes the postmaster PID to the specified file." msgstr "Registra el PID de postmaster en el archivo especificado." -#: utils/misc/guc.c:4241 -msgid "Name of the SSL library." +#: utils/misc/guc.c:4380 +#, fuzzy +#| msgid "Name of the SSL library." +msgid "Shows the name of the SSL library." msgstr "Nombre de la biblioteca SSL." -#: utils/misc/guc.c:4256 +#: utils/misc/guc.c:4395 msgid "Location of the SSL server certificate file." msgstr "Ubicación del archivo de certificado SSL del servidor." -#: utils/misc/guc.c:4266 +#: utils/misc/guc.c:4405 msgid "Location of the SSL server private key file." msgstr "Ubicación del archivo de la llave SSL privada del servidor." -#: utils/misc/guc.c:4276 +#: utils/misc/guc.c:4415 msgid "Location of the SSL certificate authority file." msgstr "Ubicación del archivo de autoridad certificadora SSL." -#: utils/misc/guc.c:4286 +#: utils/misc/guc.c:4425 msgid "Location of the SSL certificate revocation list file." msgstr "Ubicación del archivo de lista de revocación de certificados SSL" -#: utils/misc/guc.c:4296 +#: utils/misc/guc.c:4435 +#, fuzzy +#| msgid "Location of the SSL certificate revocation list file." +msgid "Location of the SSL certificate revocation list directory." +msgstr "Ubicación del archivo de lista de revocación de certificados SSL" + +#: utils/misc/guc.c:4445 msgid "Writes temporary statistics files to the specified directory." msgstr "Escribe los archivos temporales de estadísticas al directorio especificado." -#: utils/misc/guc.c:4307 +#: utils/misc/guc.c:4456 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "Número de standbys sincrónicos y lista de nombres de los potenciales sincrónicos." -#: utils/misc/guc.c:4318 +#: utils/misc/guc.c:4467 msgid "Sets default text search configuration." msgstr "Define la configuración de búsqueda en texto por omisión." -#: utils/misc/guc.c:4328 +#: utils/misc/guc.c:4477 msgid "Sets the list of allowed SSL ciphers." msgstr "Define la lista de cifrados SSL permitidos." -#: utils/misc/guc.c:4343 +#: utils/misc/guc.c:4492 msgid "Sets the curve to use for ECDH." msgstr "Define la curva a usar para ECDH." -#: utils/misc/guc.c:4358 +#: utils/misc/guc.c:4507 msgid "Location of the SSL DH parameters file." msgstr "Ubicación del archivo de parámetros DH para SSL." -#: utils/misc/guc.c:4369 +#: utils/misc/guc.c:4518 msgid "Command to obtain passphrases for SSL." msgstr "Orden para obtener frases clave para SSL." -#: utils/misc/guc.c:4380 +#: utils/misc/guc.c:4529 msgid "Sets the application name to be reported in statistics and logs." msgstr "Define el nombre de aplicación a reportarse en estadísticas y logs." -#: utils/misc/guc.c:4391 +#: utils/misc/guc.c:4540 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Define el nombre del clúster, el cual se incluye en el título de proceso." -#: utils/misc/guc.c:4402 +#: utils/misc/guc.c:4551 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Define los gestores de recursos WAL para los cuales hacer verificaciones de consistencia WAL." -#: utils/misc/guc.c:4403 +#: utils/misc/guc.c:4552 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "Se registrarán imágenes de página completa para todos los bloques de datos, y comparados con los resultados de la aplicación de WAL." -#: utils/misc/guc.c:4413 +#: utils/misc/guc.c:4562 msgid "JIT provider to use." msgstr "Proveedor JIT a usar." -#: utils/misc/guc.c:4424 +#: utils/misc/guc.c:4573 #, fuzzy #| msgid "Logs the host name in the connection logs." msgid "Log backtrace for errors in these functions." msgstr "Registrar el nombre del host en la conexión." -#: utils/misc/guc.c:4444 +#: utils/misc/guc.c:4593 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Define si «\\'» está permitido en literales de cadena." -#: utils/misc/guc.c:4454 +#: utils/misc/guc.c:4603 msgid "Sets the output format for bytea." msgstr "Formato de salida para bytea." -#: utils/misc/guc.c:4464 +#: utils/misc/guc.c:4613 msgid "Sets the message levels that are sent to the client." msgstr "Nivel de mensajes enviados al cliente." -#: utils/misc/guc.c:4465 utils/misc/guc.c:4530 utils/misc/guc.c:4541 -#: utils/misc/guc.c:4617 +#: utils/misc/guc.c:4614 utils/misc/guc.c:4690 utils/misc/guc.c:4701 +#: utils/misc/guc.c:4777 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "Cada nivel incluye todos los niveles que lo siguen. Mientras más posterior el nivel, menos mensajes se enviarán." -#: utils/misc/guc.c:4475 +#: utils/misc/guc.c:4624 msgid "Enables the planner to use constraints to optimize queries." msgstr "Permitir el uso de restricciones para limitar los accesos a tablas." -#: utils/misc/guc.c:4476 +#: utils/misc/guc.c:4625 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "Las tablas no serán recorridas si sus restricciones garantizan que ninguna fila coincidirá con la consulta." -#: utils/misc/guc.c:4487 +#: utils/misc/guc.c:4636 +#, fuzzy +#| msgid "Sets the default table access method for new tables." +msgid "Sets the default compression for new columns." +msgstr "Define el método de acceso a tablas por omisión para nuevas tablas." + +#: utils/misc/guc.c:4647 msgid "Sets the transaction isolation level of each new transaction." msgstr "Nivel de aislación (isolation level) de transacciones nuevas." -#: utils/misc/guc.c:4497 +#: utils/misc/guc.c:4657 msgid "Sets the current transaction's isolation level." msgstr "Define el nivel de aislación de la transacción en curso." -#: utils/misc/guc.c:4508 +#: utils/misc/guc.c:4668 msgid "Sets the display format for interval values." msgstr "Formato de salida para valores de intervalos." -#: utils/misc/guc.c:4519 +#: utils/misc/guc.c:4679 msgid "Sets the verbosity of logged messages." msgstr "Verbosidad de los mensajes registrados." -#: utils/misc/guc.c:4529 +#: utils/misc/guc.c:4689 msgid "Sets the message levels that are logged." msgstr "Nivel de mensajes registrados." -#: utils/misc/guc.c:4540 +#: utils/misc/guc.c:4700 msgid "Causes all statements generating error at or above this level to be logged." msgstr "Registrar sentencias que generan error de nivel superior o igual a éste." -#: utils/misc/guc.c:4551 +#: utils/misc/guc.c:4711 msgid "Sets the type of statements logged." msgstr "Define el tipo de sentencias que se registran." -#: utils/misc/guc.c:4561 +#: utils/misc/guc.c:4721 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "«Facility» de syslog que se usará cuando syslog esté habilitado." -#: utils/misc/guc.c:4576 +#: utils/misc/guc.c:4736 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "Define el comportamiento de la sesión con respecto a disparadores y reglas de reescritura." -#: utils/misc/guc.c:4586 +#: utils/misc/guc.c:4746 msgid "Sets the current transaction's synchronization level." msgstr "Define el nivel de sincronización de la transacción en curso." -#: utils/misc/guc.c:4596 +#: utils/misc/guc.c:4756 msgid "Allows archiving of WAL files using archive_command." msgstr "Permite el archivado de WAL usando archive_command." -#: utils/misc/guc.c:4606 +#: utils/misc/guc.c:4766 msgid "Sets the action to perform upon reaching the recovery target." msgstr "Acción a ejecutar al alcanzar el destino de recuperación." -#: utils/misc/guc.c:4616 +#: utils/misc/guc.c:4776 msgid "Enables logging of recovery-related debugging information." msgstr "Recolectar información de depuración relacionada con la recuperación." -#: utils/misc/guc.c:4632 +#: utils/misc/guc.c:4792 msgid "Collects function-level statistics on database activity." msgstr "Recolectar estadísticas de actividad de funciones en la base de datos." -#: utils/misc/guc.c:4642 -msgid "Set the level of information written to the WAL." +#: utils/misc/guc.c:4802 +#, fuzzy +#| msgid "Set the level of information written to the WAL." +msgid "Sets the level of information written to the WAL." msgstr "Nivel de información escrita a WAL." -#: utils/misc/guc.c:4652 +#: utils/misc/guc.c:4812 msgid "Selects the dynamic shared memory implementation used." msgstr "Escoge la implementación de memoria compartida dinámica que se usará." -#: utils/misc/guc.c:4662 +#: utils/misc/guc.c:4822 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "Escoge la implementación de memoria compartida dinámica que se usará para la región principal de memoria compartida." -#: utils/misc/guc.c:4672 +#: utils/misc/guc.c:4832 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Selecciona el método usado para forzar escritura de WAL a disco." -#: utils/misc/guc.c:4682 +#: utils/misc/guc.c:4842 msgid "Sets how binary values are to be encoded in XML." msgstr "Define cómo se codificarán los valores binarios en XML." -#: utils/misc/guc.c:4692 +#: utils/misc/guc.c:4852 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "Define si los datos XML implícitos en operaciones de análisis y serialización serán considerados documentos o fragmentos de contenido." -#: utils/misc/guc.c:4703 +#: utils/misc/guc.c:4863 msgid "Use of huge pages on Linux or Windows." msgstr "Usar páginas grandes (huge) en Linux o Windows." -#: utils/misc/guc.c:4713 +#: utils/misc/guc.c:4873 msgid "Forces use of parallel query facilities." msgstr "Obliga al uso de la funcionalidad de consultas paralelas." -#: utils/misc/guc.c:4714 +#: utils/misc/guc.c:4874 msgid "If possible, run query using a parallel worker and with parallel restrictions." msgstr "Si es posible, ejecuta cada consulta en un ayudante paralelo y con restricciones de paralelismo." -#: utils/misc/guc.c:4724 +#: utils/misc/guc.c:4884 msgid "Chooses the algorithm for encrypting passwords." msgstr "Escoge el algoritmo para cifrar contraseñas." -#: utils/misc/guc.c:4734 +#: utils/misc/guc.c:4894 msgid "Controls the planner's selection of custom or generic plan." msgstr "Controla la selección del optimizador de planes genéricos o «custom»." -#: utils/misc/guc.c:4735 +#: utils/misc/guc.c:4895 msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." msgstr "Las sentencias preparadas pueden tener planes genéricos y «custom», y el optimizador intentará escoger cuál es mejor. Esto puede usarse para controlar manualmente el comportamiento." -#: utils/misc/guc.c:4747 +#: utils/misc/guc.c:4907 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "Define la versión mínima del protocolo SSL/TLS a usar." -#: utils/misc/guc.c:4759 +#: utils/misc/guc.c:4919 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "Define la versión máxima del protocolo SSL/TLS a usar." -#: utils/misc/guc.c:5562 +#: utils/misc/guc.c:4931 +msgid "Sets the method for synchronizing the data directory before crash recovery." +msgstr "" + +#: utils/misc/guc.c:5499 +#, fuzzy, c-format +#| msgid "unrecognized configuration parameter \"%s\"" +msgid "invalid configuration parameter name \"%s\"" +msgstr "parámetro de configuración «%s» no reconocido" + +#: utils/misc/guc.c:5501 +#, c-format +msgid "Custom parameter names must be of the form \"identifier.identifier\"." +msgstr "" + +#: utils/misc/guc.c:5510 utils/misc/guc.c:9269 +#, c-format +msgid "unrecognized configuration parameter \"%s\"" +msgstr "parámetro de configuración «%s» no reconocido" + +#: utils/misc/guc.c:5803 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: no se pudo acceder al directorio «%s»: %s\n" -#: utils/misc/guc.c:5567 +#: utils/misc/guc.c:5808 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "Ejecute initdb o pg_basebackup para inicializar un directorio de datos de PostgreSQL.\n" -#: utils/misc/guc.c:5587 +#: utils/misc/guc.c:5828 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -26486,12 +28342,12 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración del servidor.\n" "Debe especificar la opción --config-file o -D o definir la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:5606 +#: utils/misc/guc.c:5847 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s: no se pudo acceder al archivo de configuración «%s»: %s\n" -#: utils/misc/guc.c:5632 +#: utils/misc/guc.c:5873 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -26500,7 +28356,7 @@ msgstr "" "%s no sabe dónde encontrar los archivos de sistema de la base de datos.\n" "Esto puede especificarse como «data_directory» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:5680 +#: utils/misc/guc.c:5921 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -26509,7 +28365,7 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración «hba».\n" "Esto puede especificarse como «hba_file» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:5703 +#: utils/misc/guc.c:5944 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -26518,188 +28374,186 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración «ident».\n" "Esto puede especificarse como «ident_file» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:6545 +#: utils/misc/guc.c:6869 msgid "Value exceeds integer range." msgstr "El valor excede el rango para enteros." -#: utils/misc/guc.c:6781 +#: utils/misc/guc.c:7105 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s está fuera del rango aceptable para el parámetro «%s» (%d .. %d)" -#: utils/misc/guc.c:6817 +#: utils/misc/guc.c:7141 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s está fuera del rango aceptable para el parámetro «%s» (%g .. %g)" -#: utils/misc/guc.c:6973 utils/misc/guc.c:8340 +#: utils/misc/guc.c:7301 utils/misc/guc.c:8673 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "no se puede definir parámetros durante una operación paralela" -#: utils/misc/guc.c:6980 utils/misc/guc.c:7732 utils/misc/guc.c:7785 -#: utils/misc/guc.c:7836 utils/misc/guc.c:8169 utils/misc/guc.c:8936 -#: utils/misc/guc.c:9198 utils/misc/guc.c:10864 -#, c-format -msgid "unrecognized configuration parameter \"%s\"" -msgstr "parámetro de configuración «%s» no reconocido" - -#: utils/misc/guc.c:6995 utils/misc/guc.c:8181 +#: utils/misc/guc.c:7318 utils/misc/guc.c:8514 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "no se puede cambiar el parámetro «%s»" -#: utils/misc/guc.c:7018 utils/misc/guc.c:7212 utils/misc/guc.c:7302 -#: utils/misc/guc.c:7392 utils/misc/guc.c:7500 utils/misc/guc.c:7595 -#: guc-file.l:352 -#, c-format -msgid "parameter \"%s\" cannot be changed without restarting the server" -msgstr "el parámetro «%s» no se puede cambiar sin reiniciar el servidor" - -#: utils/misc/guc.c:7028 +#: utils/misc/guc.c:7351 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "el parámetro «%s» no se puede cambiar en este momento" -#: utils/misc/guc.c:7046 utils/misc/guc.c:7093 utils/misc/guc.c:10880 +#: utils/misc/guc.c:7369 utils/misc/guc.c:7416 utils/misc/guc.c:11314 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "se ha denegado el permiso para cambiar la opción «%s»" -#: utils/misc/guc.c:7083 +#: utils/misc/guc.c:7406 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "el parámetro «%s» no se puede cambiar después de efectuar la conexión" -#: utils/misc/guc.c:7131 +#: utils/misc/guc.c:7454 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "no se puede definir el parámetro «%s» dentro una función security-definer" -#: utils/misc/guc.c:7740 utils/misc/guc.c:7790 utils/misc/guc.c:9205 +#: utils/misc/guc.c:8087 utils/misc/guc.c:8134 utils/misc/guc.c:9531 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "debe ser superusuario o miembro del rol pg_read_all settings para examinar «%s»" -#: utils/misc/guc.c:7881 +#: utils/misc/guc.c:8218 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s lleva sólo un argumento" -#: utils/misc/guc.c:8129 +#: utils/misc/guc.c:8466 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "debe ser superusuario para ejecutar la orden ALTER SYSTEM" -#: utils/misc/guc.c:8214 +#: utils/misc/guc.c:8547 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "los valores de parámetros para ALTER SYSTEM no deben contener saltos de línea" -#: utils/misc/guc.c:8259 +#: utils/misc/guc.c:8592 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "no se pudo interpretar el contenido del archivo «%s»" -#: utils/misc/guc.c:8416 +#: utils/misc/guc.c:8749 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT no está implementado" -#: utils/misc/guc.c:8500 +#: utils/misc/guc.c:8833 #, c-format msgid "SET requires parameter name" msgstr "SET requiere el nombre de un parámetro" -#: utils/misc/guc.c:8633 +#: utils/misc/guc.c:8966 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "intento de cambiar la opción «%s»" -#: utils/misc/guc.c:10426 +#: utils/misc/guc.c:10761 #, fuzzy, c-format #| msgid "parameter \"%s\" changed to \"%s\"" msgid "while setting parameter \"%s\" to \"%s\"" msgstr "el parámetro «%s» fue cambiado a «%s»" -#: utils/misc/guc.c:10494 +#: utils/misc/guc.c:10926 #, c-format msgid "parameter \"%s\" could not be set" msgstr "no se pudo cambiar el parámetro «%s»" -#: utils/misc/guc.c:10584 +#: utils/misc/guc.c:11018 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "no se pudo interpretar el valor de para el parámetro «%s»" -#: utils/misc/guc.c:10942 utils/misc/guc.c:10976 +#: utils/misc/guc.c:11376 utils/misc/guc.c:11410 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "valor no válido para el parámetro «%s»: %d" -#: utils/misc/guc.c:11010 +#: utils/misc/guc.c:11444 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "valor no válido para el parámetro «%s»: %g" -#: utils/misc/guc.c:11280 +#: utils/misc/guc.c:11731 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "«temp_buffers» no puede ser cambiado después de que cualquier tabla temporal haya sido accedida en la sesión." -#: utils/misc/guc.c:11292 +#: utils/misc/guc.c:11743 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour no está soportado en este servidor" -#: utils/misc/guc.c:11305 +#: utils/misc/guc.c:11756 #, c-format msgid "SSL is not supported by this build" msgstr "SSL no está soportado en este servidor" -#: utils/misc/guc.c:11317 +#: utils/misc/guc.c:11768 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "No se puede activar el parámetro cuando «log_statement_stats» está activo." -#: utils/misc/guc.c:11329 +#: utils/misc/guc.c:11780 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "No se puede activar «log_statement_stats» cuando «log_parser_stats», «log_planner_stats» o «log_executor_stats» están activos." -#: utils/misc/guc.c:11559 +#: utils/misc/guc.c:12010 #, c-format msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "effective_io_concurrency debe ser 0 en plataformas que no tienen posix_fadvise()." -#: utils/misc/guc.c:11572 +#: utils/misc/guc.c:12023 #, fuzzy, c-format #| msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "effective_io_concurrency debe ser 0 en plataformas que no tienen posix_fadvise()." -#: utils/misc/guc.c:11688 +#: utils/misc/guc.c:12037 +#, fuzzy, c-format +#| msgid "huge pages not supported on this platform" +msgid "huge_page_size must be 0 on this platform." +msgstr "las huge pages no están soportados en esta plataforma" + +#: utils/misc/guc.c:12051 +#, fuzzy, c-format +#| msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." +msgid "client_connection_check_interval must be set to 0 on platforms that lack POLLRDHUP." +msgstr "effective_io_concurrency debe ser 0 en plataformas que no tienen posix_fadvise()." + +#: utils/misc/guc.c:12179 #, fuzzy, c-format #| msgid "Invalid character value." msgid "invalid character" msgstr "Valor de carácter no válido." -#: utils/misc/guc.c:11748 +#: utils/misc/guc.c:12239 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline no es un número válido." -#: utils/misc/guc.c:11788 +#: utils/misc/guc.c:12279 #, c-format msgid "multiple recovery targets specified" msgstr "múltiples valores de destino de recuperación especificados" -#: utils/misc/guc.c:11789 +#: utils/misc/guc.c:12280 #, c-format msgid "At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set." msgstr "A lo más uno de recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid puede estar definido." -#: utils/misc/guc.c:11797 +#: utils/misc/guc.c:12288 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "El único valor permitido es «immediate»." @@ -26735,7 +28589,7 @@ msgstr "la consulta sería afectada por la política de seguridad de registros p msgid "To disable the policy for the table's owner, use ALTER TABLE NO FORCE ROW LEVEL SECURITY." msgstr "Para desactivar la política para el dueño de la tabla, use ALTER TABLE NO FORCE ROW LEVEL SECURITY." -#: utils/misc/timeout.c:395 +#: utils/misc/timeout.c:484 #, c-format msgid "cannot add more timeout reasons" msgstr "no se pueden agregar más razones de timeout" @@ -26805,24 +28659,29 @@ msgstr "línea demasiado larga en archivo de huso horario «%s», línea %d" msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "@INCLUDE sin nombre de archivo en archivo de huso horario «%s», línea %d" -#: utils/mmgr/aset.c:476 utils/mmgr/generation.c:234 utils/mmgr/slab.c:236 +#: utils/mmgr/aset.c:477 utils/mmgr/generation.c:235 utils/mmgr/slab.c:237 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "Falla al crear el contexto de memoria «%s»." -#: utils/mmgr/dsa.c:519 utils/mmgr/dsa.c:1332 +#: utils/mmgr/dsa.c:519 utils/mmgr/dsa.c:1329 #, c-format msgid "could not attach to dynamic shared area" msgstr "no se pudo adjuntar al segmento de memoria compartida dinámica" -#: utils/mmgr/mcxt.c:822 utils/mmgr/mcxt.c:858 utils/mmgr/mcxt.c:896 -#: utils/mmgr/mcxt.c:934 utils/mmgr/mcxt.c:970 utils/mmgr/mcxt.c:1001 -#: utils/mmgr/mcxt.c:1037 utils/mmgr/mcxt.c:1089 utils/mmgr/mcxt.c:1124 -#: utils/mmgr/mcxt.c:1159 +#: utils/mmgr/mcxt.c:889 utils/mmgr/mcxt.c:925 utils/mmgr/mcxt.c:963 +#: utils/mmgr/mcxt.c:1001 utils/mmgr/mcxt.c:1083 utils/mmgr/mcxt.c:1114 +#: utils/mmgr/mcxt.c:1150 utils/mmgr/mcxt.c:1202 utils/mmgr/mcxt.c:1237 +#: utils/mmgr/mcxt.c:1272 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "Falló una petición de tamaño %zu en el contexto de memoria «%s»." +#: utils/mmgr/mcxt.c:1046 +#, c-format +msgid "logging memory contexts of PID %d" +msgstr "" + #: utils/mmgr/portalmem.c:187 #, c-format msgid "cursor \"%s\" already exists" @@ -26858,13 +28717,13 @@ msgstr "no se puede hacer PREPARE de una transacción que ha creado un cursor WI msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "no se pueden ejecutar órdenes de transacción dentro de un bucle de cursor que no es de sólo lectura" -#: utils/sort/logtape.c:266 utils/sort/logtape.c:289 +#: utils/sort/logtape.c:268 utils/sort/logtape.c:291 #, fuzzy, c-format #| msgid "could not rewind temporary file" msgid "could not seek to block %ld of temporary file" msgstr "no se puede rebobinar el archivo temporal" -#: utils/sort/logtape.c:295 +#: utils/sort/logtape.c:297 #, fuzzy, c-format #| msgid "could not read from hash-join temporary file: read only %zu of %zu bytes" msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" @@ -26883,9 +28742,9 @@ msgid "unexpected chunk in shared tuplestore temporary file" msgstr "trozo inesperado en archivo temporal del tuplestore compartido" #: utils/sort/sharedtuplestore.c:569 -#, c-format -#| msgid "could not read from shared tuplestore temporary file" -msgid "could not seek block %u in shared tuplestore temporary file" +#, fuzzy, c-format +#| msgid "could not seek block %u in shared tuplestore temporary file" +msgid "could not seek to block %u in shared tuplestore temporary file" msgstr "no se pudo posicionar (seek) al bloque %u en el archivo temporal del tuplestore compartido" #: utils/sort/sharedtuplestore.c:576 @@ -26894,22 +28753,22 @@ msgstr "no se pudo posicionar (seek) al bloque %u en el archivo temporal del tup msgid "could not read from shared tuplestore temporary file: read only %zu of %zu bytes" msgstr "no se pudo leer el archivo temporal de hash-join: se leyeron sólo %zu de %zu bytes" -#: utils/sort/tuplesort.c:3140 +#: utils/sort/tuplesort.c:3216 #, c-format msgid "cannot have more than %d runs for an external sort" msgstr "no se pueden tener más de %d pasadas para un ordenamiento externo" -#: utils/sort/tuplesort.c:4221 +#: utils/sort/tuplesort.c:4297 #, c-format msgid "could not create unique index \"%s\"" msgstr "no se pudo crear el índice único «%s»" -#: utils/sort/tuplesort.c:4223 +#: utils/sort/tuplesort.c:4299 #, c-format msgid "Key %s is duplicated." msgstr "La llave %s está duplicada." -#: utils/sort/tuplesort.c:4224 +#: utils/sort/tuplesort.c:4300 #, c-format msgid "Duplicate keys exist." msgstr "Existe una llave duplicada." @@ -26920,7 +28779,6 @@ msgstr "Existe una llave duplicada." #: utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 #: utils/sort/tuplestore.c:1330 #, c-format -#| msgid "could not read from shared tuplestore temporary file" msgid "could not seek in tuplestore temporary file" msgstr "no se pudo posicionar (seek) en el archivo temporal del tuplestore" @@ -26931,593 +28789,452 @@ msgstr "no se pudo posicionar (seek) en el archivo temporal del tuplestore" msgid "could not read from tuplestore temporary file: read only %zu of %zu bytes" msgstr "no se pudo leer el archivo temporal de hash-join: se leyeron sólo %zu de %zu bytes" -#: utils/time/snapmgr.c:624 +#: utils/time/snapmgr.c:568 #, c-format msgid "The source transaction is not running anymore." msgstr "La transacción de origen ya no está en ejecución." -#: utils/time/snapmgr.c:1232 +#: utils/time/snapmgr.c:1147 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "no se puede exportar snapshots desde una subtransacción" -#: utils/time/snapmgr.c:1391 utils/time/snapmgr.c:1396 -#: utils/time/snapmgr.c:1401 utils/time/snapmgr.c:1416 -#: utils/time/snapmgr.c:1421 utils/time/snapmgr.c:1426 -#: utils/time/snapmgr.c:1441 utils/time/snapmgr.c:1446 -#: utils/time/snapmgr.c:1451 utils/time/snapmgr.c:1553 -#: utils/time/snapmgr.c:1569 utils/time/snapmgr.c:1594 +#: utils/time/snapmgr.c:1306 utils/time/snapmgr.c:1311 +#: utils/time/snapmgr.c:1316 utils/time/snapmgr.c:1331 +#: utils/time/snapmgr.c:1336 utils/time/snapmgr.c:1341 +#: utils/time/snapmgr.c:1356 utils/time/snapmgr.c:1361 +#: utils/time/snapmgr.c:1366 utils/time/snapmgr.c:1468 +#: utils/time/snapmgr.c:1484 utils/time/snapmgr.c:1509 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "datos no válidos en archivo de snapshot «%s»" -#: utils/time/snapmgr.c:1488 +#: utils/time/snapmgr.c:1403 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "SET TRANSACTION SNAPSHOT debe ser llamado antes de cualquier consulta" -#: utils/time/snapmgr.c:1497 +#: utils/time/snapmgr.c:1412 #, c-format msgid "a snapshot-importing transaction must have isolation level SERIALIZABLE or REPEATABLE READ" msgstr "una transacción que importa un snapshot no debe tener nivel de aislación SERIALIZABLE o REPEATABLE READ" -#: utils/time/snapmgr.c:1506 utils/time/snapmgr.c:1515 +#: utils/time/snapmgr.c:1421 utils/time/snapmgr.c:1430 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "identificador de snapshot no válido: «%s»" -#: utils/time/snapmgr.c:1607 +#: utils/time/snapmgr.c:1522 #, c-format msgid "a serializable transaction cannot import a snapshot from a non-serializable transaction" msgstr "una transacción serializable no puede importar un snapshot desde una transacción no serializable" -#: utils/time/snapmgr.c:1611 +#: utils/time/snapmgr.c:1526 #, c-format msgid "a non-read-only serializable transaction cannot import a snapshot from a read-only transaction" msgstr "una transacción serializable que no es de sólo lectura no puede importar un snapshot de una transacción de sólo lectura" -#: utils/time/snapmgr.c:1626 +#: utils/time/snapmgr.c:1541 #, c-format msgid "cannot import a snapshot from a different database" msgstr "no se puede importar un snapshot desde una base de datos diferente" -#: gram.y:1047 -#, c-format -msgid "UNENCRYPTED PASSWORD is no longer supported" -msgstr "UNENCRYPTED PASSWORD ya no está soportado" +#~ msgid "Number of tuple inserts prior to index cleanup as a fraction of reltuples." +#~ msgstr "Número de inserts de tuplas antes de ejecutar una limpieza de índice, como fracción de reltuples." -#: gram.y:1048 -#, c-format -msgid "Remove UNENCRYPTED to store the password in encrypted form instead." -msgstr "Quite UNENCRYPTED para almacenar la contraseña en su lugar en forma cifrada." +#~ msgid "For RAID arrays, this should be approximately the number of drive spindles in the array." +#~ msgstr "Para arrays RAID, esto debería ser aproximadamente la cantidad de discos en el array." -#: gram.y:1110 -#, c-format -msgid "unrecognized role option \"%s\"" -msgstr "opción de rol «%s» no reconocida" +#~ msgid "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." +#~ msgstr "Emitir una advertencia en constructos que cambiaron significado desde PostgreSQL 9.4." -#: gram.y:1357 gram.y:1372 -#, c-format -msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" -msgstr "CREATE SCHEMA IF NOT EXISTS no puede incluir elementos de esquema" +#~ msgid "Version and Platform Compatibility" +#~ msgstr "Compatibilidad de Versión y Plataforma" -#: gram.y:1518 -#, c-format -msgid "current database cannot be changed" -msgstr "no se puede cambiar la base de datos activa" +#~ msgid "Client Connection Defaults" +#~ msgstr "Valores por Omisión de Conexiones" -#: gram.y:1642 -#, c-format -msgid "time zone interval must be HOUR or HOUR TO MINUTE" -msgstr "el intervalo de huso horario debe ser HOUR o HOUR TO MINUTE" +#~ msgid "Statistics" +#~ msgstr "Estadísticas" -#: gram.y:2177 -#, c-format -msgid "column number must be in range from 1 to %d" -msgstr "el número de columna debe estar en el rango de 1 a %d" +#~ msgid "Process Title" +#~ msgstr "Título de Proceso" -#: gram.y:2709 -#, c-format -msgid "sequence option \"%s\" not supported here" -msgstr "la opción de secuencia «%s» no está soportado aquí" +#~ msgid "Reporting and Logging" +#~ msgstr "Reporte y Registro" -#: gram.y:2738 -#, c-format -msgid "modulus for hash partition provided more than once" -msgstr "el módulo para partición de hash fue especificado más de una vez" +#~ msgid "Query Tuning" +#~ msgstr "Afinamiento de Consultas" -#: gram.y:2747 -#, c-format -msgid "remainder for hash partition provided more than once" -msgstr "el remanentde para partición de hash fue especificado más de una vez" +#~ msgid "Replication" +#~ msgstr "Replicación" -#: gram.y:2754 -#, c-format -msgid "unrecognized hash partition bound specification \"%s\"" -msgstr "especificación de borde de partición hash «%s» no reconocida" +#~ msgid "Write-Ahead Log" +#~ msgstr "Write-Ahead Log" -#: gram.y:2762 -#, c-format -msgid "modulus for hash partition must be specified" -msgstr "el módulo para una partición hash debe ser especificado" +#~ msgid "Resource Usage" +#~ msgstr "Uso de Recursos" -#: gram.y:2766 -#, c-format -msgid "remainder for hash partition must be specified" -msgstr "remanente en partición hash debe ser especificado" +#~ msgid "connection authorized: user=%s database=%s" +#~ msgstr "conexión autorizada: usuario=%s database=%s" -#: gram.y:2967 gram.y:3000 -#, c-format -msgid "STDIN/STDOUT not allowed with PROGRAM" -msgstr "STDIN/STDOUT no están permitidos con PROGRAM" +#~ msgid "connection authorized: user=%s database=%s application_name=%s" +#~ msgstr "conexión autorizada: usuario=%s base de datos=%s application_name=%s" -#: gram.y:2973 -#, c-format -msgid "WHERE clause not allowed with COPY TO" -msgstr "la cláusula WHERE no está permitida con COPY TO" +#~ msgid "connection authorized: user=%s database=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +#~ msgstr "conexión autorizada: usuario=%s base de datos=%s SSL activo (protocolo=%s, cifrado=%s, bits=%d, compresión=%s" -#: gram.y:3305 gram.y:3312 gram.y:11647 gram.y:11655 -#, c-format -msgid "GLOBAL is deprecated in temporary table creation" -msgstr "GLOBAL está obsoleto para la creación de tablas temporales" +#~ msgid "connection authorized: user=%s database=%s application_name=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +#~ msgstr "conexión autorizada: usuario=%s base_de_datos=%s application_name=%s SSL activo (protocolo=%s, cifrado=%s, bits=%d, compresión=%s)" -#: gram.y:3552 -#, c-format -msgid "for a generated column, GENERATED ALWAYS must be specified" -msgstr "para una columna generada, GENERATED ALWAYS debe ser especificado" +#~ msgid "replication connection authorized: user=%s application_name=%s" +#~ msgstr "conexión de replicación autorizada: usuario=%s application_name=%s" -#: gram.y:4512 -#, c-format -msgid "CREATE EXTENSION ... FROM is no longer supported" -msgstr "CREATE EXTENSION ... FROM ya no está soportado" +#~ msgid "replication connection authorized: user=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +#~ msgstr "conexión de replicación autorizada: usuario=%s SSL activo (protocolo=%s, cifrado=%s, bits=%d, compresión=%s)" -#: gram.y:5338 -#, c-format -msgid "unrecognized row security option \"%s\"" -msgstr "opción de seguridad de registro «%s» no reconocida" +#~ msgid "on" +#~ msgstr "activado" -#: gram.y:5339 -#, c-format -msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." -msgstr "sólo se admiten actualmente políticas PERMISSIVE o RESTRICTIVE." +#~ msgid "off" +#~ msgstr "desactivado" -#: gram.y:5452 -msgid "duplicate trigger events specified" -msgstr "se han especificado eventos de disparador duplicados" +#~ msgid "replication connection authorized: user=%s application_name=%s SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)" +#~ msgstr "conexión de replicación autorizada: usuario=%s application_name=%s SSL activo (protocolo=%s, cifrado=%s, bits=%d, compresión=%s)" -#: gram.y:5600 -#, c-format -msgid "conflicting constraint properties" -msgstr "propiedades de restricción contradictorias" +#~ msgid "loaded library \"%s\"" +#~ msgstr "biblioteca «%s» cargada" -#: gram.y:5696 -#, c-format -msgid "CREATE ASSERTION is not yet implemented" -msgstr "CREATE ASSERTION no está implementado" +#~ msgid "You need to rebuild PostgreSQL using --with-libxml." +#~ msgstr "Necesita reconstruir PostgreSQL usando --with-libxml." -#: gram.y:6079 -#, c-format -msgid "RECHECK is no longer required" -msgstr "RECHECK ya no es requerido" +#~ msgid "wrong data type: %u, expected %u" +#~ msgstr "tipo de dato erróneo: %u, se esperaba %u" -#: gram.y:6080 -#, c-format -msgid "Update your data type." -msgstr "Actualice su tipo de datos." +#~ msgid "invalid concatenation of jsonb objects" +#~ msgstr "concatenación no válida de objetos jsonb" -#: gram.y:7831 -#, c-format -msgid "aggregates cannot have output arguments" -msgstr "las funciones de agregación no pueden tener argumentos de salida" +#~ msgid "wrong element type" +#~ msgstr "el tipo de elemento es erróneo" -#: gram.y:10153 gram.y:10171 -#, c-format -msgid "WITH CHECK OPTION not supported on recursive views" -msgstr "WITH CHECK OPTION no está soportado con vistas recursivas" +#~ msgid "logical replication launcher shutting down" +#~ msgstr "lanzador de replicación lógica apagándose" -#: gram.y:11779 -#, c-format -msgid "LIMIT #,# syntax is not supported" -msgstr "la sintaxis LIMIT #,# no está soportada" +#~ msgid "bind %s to %s" +#~ msgstr "bind %s a %s" -#: gram.y:11780 -#, c-format -msgid "Use separate LIMIT and OFFSET clauses." -msgstr "Use cláusulas LIMIT y OFFSET separadas." +#~ msgid "parse %s: %s" +#~ msgstr "parse %s: %s" -#: gram.y:12106 gram.y:12131 -#, c-format -msgid "VALUES in FROM must have an alias" -msgstr "VALUES en FROM debe tener un alias" +#~ msgid "unexpected EOF on client connection" +#~ msgstr "se encontró fin de archivo inesperado en la conexión del cliente" -#: gram.y:12107 gram.y:12132 -#, c-format -msgid "For example, FROM (VALUES ...) [AS] foo." -msgstr "Por ejemplo, FROM (VALUES ...) [AS] foo." +#~ msgid "could not fsync file \"%s\" but retrying: %m" +#~ msgstr "no se pudo sincronizar (fsync) archivo «%s» pero reintentando: %m" + +#~ msgid "could not forward fsync request because request queue is full" +#~ msgstr "no se pudo enviar una petición fsync porque la cola de peticiones está llena" + +#~ msgid "sending cancel to blocking autovacuum PID %d" +#~ msgstr "enviando señal de cancelación a la tarea autovacuum bloqueante con PID %d" + +#~ msgid "Process %d waits for %s on %s." +#~ msgstr "El proceso %d espera %s en %s." + +#~ msgid "deferrable snapshot was unsafe; trying a new one" +#~ msgstr "la instantánea postergada era insegura; intentando con una nueva" + +#~ msgid "\"%s\" has now caught up with upstream server" +#~ msgstr "«%s» ha alcanzado al servidor de origen" + +#~ msgid "unexpected standby message type \"%c\", after receiving CopyDone" +#~ msgstr "mensaje de standby de tipo «%c» inesperado, después de recibir CopyDone" + +#~ msgid "standby \"%s\" now has synchronous standby priority %u" +#~ msgstr "el standby «%s» ahora tiene prioridad sincrónica %u" + +#~ msgid "logical replication apply worker for subscription \"%s\" will restart because subscription's publications were changed" +#~ msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará porque las publicaciones de la suscripción fueron cambiadas" + +#~ msgid "logical replication apply worker for subscription \"%s\" will restart because the replication slot name was changed" +#~ msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará porque el nombre del slot de replicación fue cambiado" + +#~ msgid "logical replication apply worker for subscription \"%s\" will restart because the connection information was changed" +#~ msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará porque la información de conexión fue cambiada" + +#~ msgid "could not fetch table info for table \"%s.%s\": %s" +#~ msgstr "no se pudo obtener información de la tabla «%s.%s»: %s" + +#~ msgid "only superusers can query or manipulate replication origins" +#~ msgstr "debe ser superusuario para consultar o manipular orígenes de replicación" + +#~ msgid "logical replication launcher started" +#~ msgstr "lanzador de replicación lógica iniciado" + +#~ msgid "starting logical replication worker for subscription \"%s\"" +#~ msgstr "iniciando el proceso ayudante de replicación lógica para la suscripción «%s»" + +#~ msgid "could not reread block %d of file \"%s\": %m" +#~ msgstr "no se pudo leer el bloque %d del archivo «%s»: %m" + +#~ msgid "could not fseek in file \"%s\": %m" +#~ msgstr "no se pudo posicionar (fseek) el archivo «%s»: %m" + +#~ msgid "could not read from file \"%s\"" +#~ msgstr "no se pudo leer del archivo «%s»" + +#~ msgid "logger shutting down" +#~ msgstr "proceso logger apagándose" + +#~ msgid "starting background worker process \"%s\"" +#~ msgstr "iniciando el proceso ayudante «%s»" + +#~ msgid "could not fork archiver: %m" +#~ msgstr "no se pudo lanzar el proceso archivador: %m" + +#~ msgid "compacted fsync request queue from %d entries to %d entries" +#~ msgstr "la cola de peticiones de fsync fue compactada de %d a %d elementos" + +#~ msgid "unregistering background worker \"%s\"" +#~ msgstr "des-registrando el proceso ayudante «%s»" + +#~ msgid "registering background worker \"%s\"" +#~ msgstr "registrando el proceso ayudante «%s»" -#: gram.y:12112 gram.y:12137 -#, c-format -msgid "subquery in FROM must have an alias" -msgstr "las subconsultas en FROM deben tener un alias" +#~ msgid "autovacuum: processing database \"%s\"" +#~ msgstr "autovacuum: procesando la base de datos «%s»" -#: gram.y:12113 gram.y:12138 -#, c-format -msgid "For example, FROM (SELECT ...) [AS] foo." -msgstr "Por ejemplo, FROM (SELECT ...) [AS] foo." +#~ msgid "autovacuum launcher shutting down" +#~ msgstr "lanzador de autovacuum apagándose" -#: gram.y:12591 -#, c-format -msgid "only one DEFAULT value is allowed" -msgstr "Sólo se permite un valor DEFAULT" +#~ msgid "autovacuum launcher started" +#~ msgstr "lanzador de autovacuum iniciado" -#: gram.y:12600 -#, c-format -msgid "only one PATH value per column is allowed" -msgstr "sólo se permite un valor de PATH por columna" +#~ msgid "disabling huge pages" +#~ msgstr "desactivando «huge pages»" -#: gram.y:12609 -#, c-format -msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" -msgstr "declaraciones NULL/NOT NULL en conflicto o redundantes para la columna «%s»" +#~ msgid "could not enable Lock Pages in Memory user right" +#~ msgstr "no se pudo activar el privilegio «Bloquear páginas en la memoria»" -#: gram.y:12618 -#, c-format -msgid "unrecognized column option \"%s\"" -msgstr "opción de columna «%s» no reconocida" +#~ msgid "could not enable Lock Pages in Memory user right: error code %lu" +#~ msgstr "no se pudo activar el privilegio «Bloquear páginas en la memoria»: código de error %lu" -#: gram.y:12872 -#, c-format -msgid "precision for type float must be at least 1 bit" -msgstr "la precisión para el tipo float debe ser al menos 1 bit" +#~ msgid "collation of partition bound value for column \"%s\" does not match partition key collation \"%s\"" +#~ msgstr "el ordenamiento (collation) del valor de borde de partición para la columna «%s» no coincide con el ordenamiento de la llave de particionamiento «%s»" -#: gram.y:12881 -#, c-format -msgid "precision for type float must be less than 54 bits" -msgstr "la precisión para el tipo float debe ser menor de 54 bits" +#~ msgid "could not determine which collation to use for partition bound expression" +#~ msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de borde de particionamiento" -#: gram.y:13372 -#, c-format -msgid "wrong number of parameters on left side of OVERLAPS expression" -msgstr "el número de parámetros es incorrecto al lado izquierdo de la expresión OVERLAPS" +#~ msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" +#~ msgstr "%s creará una secuencia implícita «%s» para la columna serial «%s.%s»" -#: gram.y:13377 -#, c-format -msgid "wrong number of parameters on right side of OVERLAPS expression" -msgstr "el número de parámetros es incorrecto al lado derecho de la expresión OVERLAPS" +#~ msgid "array assignment requires type %s but expression is of type %s" +#~ msgstr "la asignación de array debe tener tipo %s pero la expresión es de tipo %s" -#: gram.y:13552 -#, c-format -msgid "UNIQUE predicate is not yet implemented" -msgstr "el predicado UNIQUE no está implementado" +#~ msgid "operator precedence change: %s is now lower precedence than %s" +#~ msgstr "cambio de precedencia de operadores: %s es ahora de menor precedencia que %s" -#: gram.y:13915 -#, c-format -msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" -msgstr "no se permiten múltiples cláusulas ORDER BY con WITHIN GROUP" +#~ msgid "arguments declared \"anycompatiblerange\" are not all alike" +#~ msgstr "los argumentos declarados «anycompatiblerange» no son todos parecidos" -#: gram.y:13920 -#, c-format -msgid "cannot use DISTINCT with WITHIN GROUP" -msgstr "no se permite DISTINCT con WITHIN GROUP" +#~ msgid "arguments declared \"anyrange\" are not all alike" +#~ msgstr "los argumentos declarados «anyrange» no son de tipos compatibles" -#: gram.y:13925 -#, c-format -msgid "cannot use VARIADIC with WITHIN GROUP" -msgstr "no se permite VARIADIC con WITHIN GROUP" +#~ msgid "arguments declared \"anyelement\" are not all alike" +#~ msgstr "los argumentos declarados «anyelement» no son de tipos compatibles" -#: gram.y:14391 gram.y:14414 -#, c-format -msgid "frame start cannot be UNBOUNDED FOLLOWING" -msgstr "el inicio de «frame» no puede ser UNBOUNDED FOLLOWING" +#~ msgid " -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n" +#~ msgstr " -o OPCIONES pasar «OPCIONES» a cada proceso servidor (obsoleto)\n" -#: gram.y:14396 -#, c-format -msgid "frame starting from following row cannot end with current row" -msgstr "el «frame» que se inicia desde la siguiente fila no puede terminar en la fila actual" +#~ msgid "Is another postmaster already running on port %d? If not, remove socket file \"%s\" and retry." +#~ msgstr "¿Hay otro postmaster corriendo en el puerto %d? Si no, elimine el socket «%s» y reintente." -#: gram.y:14419 -#, c-format -msgid "frame end cannot be UNBOUNDED PRECEDING" -msgstr "el fin de «frame» no puede ser UNBOUNDED PRECEDING" +#~ msgid "setsockopt(SO_REUSEADDR) failed for %s address \"%s\": %m" +#~ msgstr "setsockopt(SO_REUSEADDR) falló para la dirección %s «%s»: %m" -#: gram.y:14425 -#, c-format -msgid "frame starting from current row cannot have preceding rows" -msgstr "el «frame» que se inicia desde la fila actual no puede tener filas precedentes" +#~ msgid "GSSAPI encryption only supports gss, trust, or reject authentication" +#~ msgstr "El cifrado GSSAPI sólo soporta autentificación gss, trust o reject" -#: gram.y:14432 -#, c-format -msgid "frame starting from following row cannot have preceding rows" -msgstr "el «frame» que se inicia desde la fila siguiente no puede tener filas precedentes" +#~ msgid "authentication file line too long" +#~ msgstr "línea en el archivo de autentificación demasiado larga" -#: gram.y:15082 -#, c-format -msgid "type modifier cannot have parameter name" -msgstr "el modificador de tipo no puede tener nombre de parámetro" +#~ msgid "SSL connection from \"%s\"" +#~ msgstr "conexión SSL desde «%s»" -#: gram.y:15088 -#, c-format -msgid "type modifier cannot have ORDER BY" -msgstr "el modificador de tipo no puede tener ORDER BY" +#~ msgid "SSPI is not supported in protocol version 2" +#~ msgstr "SSPI no está soportado por el protocolo versión 2" -#: gram.y:15153 gram.y:15160 -#, c-format -msgid "%s cannot be used as a role name here" -msgstr "%s no puede ser usado como nombre de rol aquí" +#~ msgid "GSSAPI is not supported in protocol version 2" +#~ msgstr "GSSAPI no está soportado por el protocolo versión 2" -#: gram.y:15841 gram.y:16030 -msgid "improper use of \"*\"" -msgstr "uso impropio de «*»" +#~ msgid "SASL authentication is not supported in protocol version 2" +#~ msgstr "autentificación SASL no está soportada en el protocolo versión 2" -#: gram.y:16094 -#, c-format -msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" -msgstr "una agregación de conjunto-ordenado con un argumento directo VARIADIC debe tener al menos un argumento agregado VARIADIC del mismo tipo de datos" +#~ msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"" +#~ msgstr "no hay una línea en pg_hba.conf para «%s», usuario «%s», base de datos «%s»" -#: gram.y:16131 -#, c-format -msgid "multiple ORDER BY clauses not allowed" -msgstr "no se permiten múltiples cláusulas ORDER BY" +#~ msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\"" +#~ msgstr "no hay una línea en pg_hba.conf para la conexión de replicación desde el servidor «%s», usuario «%s»" -#: gram.y:16142 -#, c-format -msgid "multiple OFFSET clauses not allowed" -msgstr "no se permiten múltiples cláusulas OFFSET" +#~ msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\"" +#~ msgstr "pg_hba.conf rechaza la conexión para el servidor «%s», usuario «%s», base de datos «%s»" -#: gram.y:16151 -#, c-format -msgid "multiple LIMIT clauses not allowed" -msgstr "no se permiten múltiples cláusulas LIMIT" +#~ msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\"" +#~ msgstr "pg_hba.conf rechaza la conexión de replicación para el servidor «%s», usuario «%s»" -#: gram.y:16160 -#, c-format -msgid "multiple limit options not allowed" -msgstr "no se permiten múltiples opciones limit" +#~ msgid "SSL off" +#~ msgstr "SSL inactivo" -#: gram.y:16164 -#, fuzzy, c-format -#| msgid "WITH TIES cannot be specified without ORDER BY clause" -msgid "WITH TIES options can not be specified without ORDER BY clause" -msgstr "la opción WITH TIES no puede ser especificada sin una cláusula ORDER BY" +#~ msgid "GSSAPI encryption can only be used with gss, trust, or reject authentication methods" +#~ msgstr "el cifrado GSSAPI sólo puede ser usado con los métodos gss, trust o reject" -#: gram.y:16172 -#, c-format -msgid "multiple WITH clauses not allowed" -msgstr "no se permiten múltiples cláusulas WITH" +#~ msgid "time to inline: %.3fs, opt: %.3fs, emit: %.3fs" +#~ msgstr "tiempo en «inline»: %.3fs, opt: %.3fs, emisión: %.3fs" -#: gram.y:16376 -#, c-format -msgid "OUT and INOUT arguments aren't allowed in TABLE functions" -msgstr "los argumentos OUT e INOUT no están permitidos en funciones TABLE" +#~ msgid "must be superuser to alter replication users" +#~ msgstr "debe ser superusuario para alterar usuarios de replicación" -#: gram.y:16472 -#, c-format -msgid "multiple COLLATE clauses not allowed" -msgstr "no se permiten múltiples cláusulas COLLATE" +#~ msgid "moving row to another partition during a BEFORE trigger is not supported" +#~ msgstr "mover registros a otra partición durante un trigger BEFORE no está soportado" -#. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16510 gram.y:16523 -#, c-format -msgid "%s constraints cannot be marked DEFERRABLE" -msgstr "las restricciones %s no pueden ser marcadas DEFERRABLE" +#~ msgid "updated partition constraint for default partition \"%s\" is implied by existing constraints" +#~ msgstr "la restricción de partición actualizada para la partición por omisión \"%s\" está implícita en las restricciones existentes" -#. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16536 -#, c-format -msgid "%s constraints cannot be marked NOT VALID" -msgstr "las restricciones %s no pueden ser marcadas NOT VALID" +#~ msgid "partition constraint for table \"%s\" is implied by existing constraints" +#~ msgstr "la restricción de partición para la tabla \"%s\" está implícita en las restricciones existentes" -#. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:16549 -#, c-format -msgid "%s constraints cannot be marked NO INHERIT" -msgstr "las restricciones %s no pueden ser marcadas NO INHERIT" +#~ msgid "validating foreign key constraint \"%s\"" +#~ msgstr "validando restricción de llave foránea «%s»" -#: guc-file.l:315 -#, c-format -msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %u" -msgstr "parámetro de configuración «%s» no reconocido en el archivo «%s» línea %u" +#~ msgid "verifying table \"%s\"" +#~ msgstr "verificando tabla «%s»" -#: guc-file.l:388 -#, c-format -msgid "parameter \"%s\" removed from configuration file, reset to default" -msgstr "parámetro «%s» eliminado del archivo de configuración, volviendo al valor por omisión" +#~ msgid "rewriting table \"%s\"" +#~ msgstr "reescribiendo tabla «%s»" -#: guc-file.l:454 -#, c-format -msgid "parameter \"%s\" changed to \"%s\"" -msgstr "el parámetro «%s» fue cambiado a «%s»" +#~ msgid "The error was: %s" +#~ msgstr "El error fue: %s" -#: guc-file.l:496 -#, c-format -msgid "configuration file \"%s\" contains errors" -msgstr "el archivo de configuración «%s» contiene errores" +#~ msgid "table \"%s.%s\" removed from subscription \"%s\"" +#~ msgstr "tabla «%s.%s» eliminada de suscripción «%s»" -#: guc-file.l:501 -#, c-format -msgid "configuration file \"%s\" contains errors; unaffected changes were applied" -msgstr "el archivo de configuración «%s» contiene errores; los cambios no afectados fueron aplicados" +#~ msgid "table \"%s.%s\" added to subscription \"%s\"" +#~ msgstr "tabla «%s.%s» agregada a suscripción «%s»" -#: guc-file.l:506 -#, c-format -msgid "configuration file \"%s\" contains errors; no changes were applied" -msgstr "el archivo de configuración «%s» contiene errores; no se aplicó ningún cambio" +#~ msgid "at least one of leftarg or rightarg must be specified" +#~ msgstr "debe especificar al menos uno de los argumentos izquierdo o derecho" -#: guc-file.l:578 -#, c-format -msgid "empty configuration file name: \"%s\"" -msgstr "nombre de archivo de configuración vacío: «%s»" +#~ msgid "REINDEX is not yet implemented for partitioned indexes" +#~ msgstr "REINDEX no está implementado aún para tablas particionadas" -#: guc-file.l:595 -#, c-format -msgid "could not open configuration file \"%s\": maximum nesting depth exceeded" -msgstr "no se pudo abrir el archivo de configuración «%s»: nivel de anidamiento máximo excedido" +#~ msgid "cannot reindex invalid index on TOAST table concurrently" +#~ msgstr "no se puede reindexar el índice no válido en una tabla TOAST concurrentemente" -#: guc-file.l:615 -#, c-format -msgid "configuration file recursion in \"%s\"" -msgstr "recursión de archivos de configuración en «%s»" +#~ msgid "%s %s will create implicit index \"%s\" for table \"%s\"" +#~ msgstr "%s %s creará el índice implícito «%s» para la tabla «%s»" -#: guc-file.l:642 -#, c-format -msgid "skipping missing configuration file \"%s\"" -msgstr "omitiendo el archivo de configuración faltante «%s»" +#~ msgid "insufficient columns in %s constraint definition" +#~ msgstr "columnas insuficientes en definición de restricción %s" -#: guc-file.l:896 -#, c-format -msgid "syntax error in file \"%s\" line %u, near end of line" -msgstr "error de sintaxis en el archivo «%s» línea %u, cerca del fin de línea" +#~ msgid "INOUT arguments are permitted." +#~ msgstr "Argumentos INOUT están permitidos." -#: guc-file.l:906 -#, c-format -msgid "syntax error in file \"%s\" line %u, near token \"%s\"" -msgstr "error de sintaxis en el archivo «%s» línea %u, cerca de la palabra «%s»" +#~ msgid "procedures cannot have OUT arguments" +#~ msgstr "los procedimientos no pueden tener argumentos OUT" -#: guc-file.l:926 -#, c-format -msgid "too many syntax errors found, abandoning file \"%s\"" -msgstr "se encontraron demasiados errores de sintaxis, abandonando el archivo «%s»" +#~ msgid "connection lost during COPY to stdout" +#~ msgstr "se perdió la conexión durante COPY a la salida estándar" -#: guc-file.l:981 -#, c-format -msgid "empty configuration directory name: \"%s\"" -msgstr "nombre de directorio de configuración vacío: «%s»" +#~ msgid "COPY BINARY is not supported to stdout or from stdin" +#~ msgstr "COPY BINARY no está soportado a la salida estándar o desde la entrada estándar" -#: guc-file.l:1000 -#, c-format -msgid "could not open configuration directory \"%s\": %m" -msgstr "no se pudo abrir el directorio de configuración «%s»: %m" +#~ msgid "automatic analyze of table \"%s.%s.%s\" system usage: %s" +#~ msgstr "analyze automático de la tabla «%s.%s.%s»: uso del sistema: %s" -#: jsonpath_gram.y:529 -#, c-format -msgid "unrecognized flag character \"%c\" in LIKE_REGEX predicate" -msgstr "parámetro no reconocido «%c» en predicado LIKE_REGEX" +#~ msgid "must be superuser to drop access methods" +#~ msgstr "debe ser superusuario para eliminar métodos de acceso" -#: jsonpath_gram.y:583 -#, c-format -msgid "XQuery \"x\" flag (expanded regular expressions) is not implemented" -msgstr "la opción «x» de XQuery (expresiones regulares expandidas) no está implementada" +#~ msgid "REINDEX of partitioned tables is not yet implemented, skipping \"%s\"" +#~ msgstr "REINDEX de tablas particionadas no está implementado aún, omitiendo «%s»" -#. translator: %s is typically "syntax error" -#: jsonpath_scan.l:286 -#, c-format -msgid "%s at end of jsonpath input" -msgstr "%s al final de la entrada jsonpath" +#~ msgid "building index \"%s\" on table \"%s\" with request for %d parallel worker" +#~ msgid_plural "building index \"%s\" on table \"%s\" with request for %d parallel workers" +#~ msgstr[0] "construyendo índice «%s» en la tabla «%s» solicitando %d ayudante paralelo" +#~ msgstr[1] "construyendo índice «%s» en la tabla «%s» solicitando %d ayudantes paralelos" -#. translator: first %s is typically "syntax error" -#: jsonpath_scan.l:293 -#, c-format -msgid "%s at or near \"%s\" of jsonpath input" -msgstr "%s en o cerca de «%s» de la entrada jsonpath" +#~ msgid "building index \"%s\" on table \"%s\" serially" +#~ msgstr "construyendo índice «%s» en la tabla «%s» en forma serial" -#: repl_gram.y:349 repl_gram.y:381 -#, c-format -msgid "invalid timeline %u" -msgstr "timeline %u no válido" +#~ msgid "drop auto-cascades to %s" +#~ msgstr "eliminando automáticamente %s" -#: repl_scanner.l:131 -msgid "invalid streaming start location" -msgstr "posición de inicio de flujo de WAL no válida" +#~ msgid "backup timeline %u in file \"%s\"" +#~ msgstr "línea de tiempo %u en archivo «%s»" -#: repl_scanner.l:182 scan.l:717 -msgid "unterminated quoted string" -msgstr "una cadena de caracteres entre comillas está inconclusa" +#~ msgid "backup label %s in file \"%s\"" +#~ msgstr "etiqueta de respaldo %s en archivo «%s»" -#: scan.l:458 -msgid "unterminated /* comment" -msgstr "un comentario /* está inconcluso" +#~ msgid "backup time %s in file \"%s\"" +#~ msgstr "tiempo de respaldo %s en archivo «%s»" -#: scan.l:478 -msgid "unterminated bit string literal" -msgstr "una cadena de bits está inconclusa" +#~ msgid "skipping restartpoint, already performed at %X/%X" +#~ msgstr "omitiendo el restartpoint, ya fue llevado a cabo en %X/%X" -#: scan.l:492 -msgid "unterminated hexadecimal string literal" -msgstr "una cadena hexadecimal está inconclusa" +#~ msgid "skipping restartpoint, recovery has already ended" +#~ msgstr "omitiendo el restartpoint, la recuperación ya ha terminado" -#: scan.l:542 -#, c-format -msgid "unsafe use of string constant with Unicode escapes" -msgstr "uso inseguro de literal de cadena con escapes Unicode" +#~ msgid "checkpoint skipped because system is idle" +#~ msgstr "omitiendo checkpoint porque el sistema está inactivo" -#: scan.l:543 -#, c-format -msgid "String constants with Unicode escapes cannot be used when standard_conforming_strings is off." -msgstr "Los literales de cadena con escapes Unicode no pueden usarse cuando standard_conforming_strings está desactivado." +#~ msgid "initializing for hot standby" +#~ msgstr "inicializando para hot standby" -#: scan.l:604 -msgid "unhandled previous state in xqs" -msgstr "estado previo no manejado en xqs" +#~ msgid "checkpoint record is at %X/%X" +#~ msgstr "el registro del punto de control está en %X/%X" -#: scan.l:678 -#, c-format -msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." -msgstr "Los escapes Unicode deben ser \\uXXXX o \\UXXXXXXXX." +#~ msgid "Either set wal_level to \"replica\" on the master, or turn off hot_standby here." +#~ msgstr "Defina wal_level a «replica» en el maestro, o bien desactive hot_standby en este servidor." -#: scan.l:689 -#, c-format -msgid "unsafe use of \\' in a string literal" -msgstr "uso inseguro de \\' en un literal de cadena" +#~ msgid "removing write-ahead log file \"%s\"" +#~ msgstr "eliminando archivo de WAL «%s»" -#: scan.l:690 -#, c-format -msgid "Use '' to write quotes in strings. \\' is insecure in client-only encodings." -msgstr "Use '' para escribir comillas en cadenas. \\' es inseguro en codificaciones de sólo cliente." +#~ msgid "recycled write-ahead log file \"%s\"" +#~ msgstr "reciclado archivo de WAL «%s»" -#: scan.l:762 -msgid "unterminated dollar-quoted string" -msgstr "una cadena separada por $ está inconclusa" +#~ msgid "updated min recovery point to %X/%X on timeline %u" +#~ msgstr "el punto mínimo de recuperación fue actualizado a %X/%X en el timeline %u" -#: scan.l:779 scan.l:789 -msgid "zero-length delimited identifier" -msgstr "un identificador delimitado tiene largo cero" +#~ msgid "cannot PREPARE a transaction that has manipulated logical replication workers" +#~ msgstr "no se puede hacer PREPARE de una transacción que ha manipulado procesos ayudantes de replicación lógica" -#: scan.l:800 syncrep_scanner.l:91 -msgid "unterminated quoted identifier" -msgstr "un identificador entre comillas está inconcluso" +#~ msgid "transaction ID wrap limit is %u, limited by database with OID %u" +#~ msgstr "el límite para el reciclaje de ID de transacciones es %u, limitado por base de datos con OID %u" -#: scan.l:963 -msgid "operator too long" -msgstr "el operador es demasiado largo" +#~ msgid "removing file \"%s\"" +#~ msgstr "eliminando el archivo «%s»" -#. translator: %s is typically the translation of "syntax error" -#: scan.l:1171 -#, c-format -msgid "%s at end of input" -msgstr "%s al final de la entrada" +#~ msgid "MultiXact member stop limit is now %u based on MultiXact %u" +#~ msgstr "el límite de detención de miembros de multixact es ahora %u basado en el multixact %u" -#. translator: first %s is typically the translation of "syntax error" -#: scan.l:1179 -#, c-format -msgid "%s at or near \"%s\"" -msgstr "%s en o cerca de «%s»" +#~ msgid "oldest MultiXactId member is at offset %u" +#~ msgstr "el miembro de multixact más antiguo está en la posición %u" -#: scan.l:1373 -#, c-format -msgid "nonstandard use of \\' in a string literal" -msgstr "uso no estandar de \\' en un literal de cadena" +#~ msgid "MultiXactId wrap limit is %u, limited by database with OID %u" +#~ msgstr "el límite para el reciclaje de MultiXactId es %u, limitado por base de datos con OID %u" -#: scan.l:1374 -#, c-format -msgid "Use '' to write quotes in strings, or use the escape string syntax (E'...')." -msgstr "Use '' para escribir comillas en cadenas, o use la sintaxis de escape de cadenas (E'...')." +#~ msgid "%u page is entirely empty.\n" +#~ msgid_plural "%u pages are entirely empty.\n" +#~ msgstr[0] "%u página está completamente vacía.\n" +#~ msgstr[1] "%u páginas están completamente vacías.\n" -#: scan.l:1383 -#, c-format -msgid "nonstandard use of \\\\ in a string literal" -msgstr "uso no estandar de \\\\ en un literal de cadena" +#~ msgid "There were %.0f unused item identifiers.\n" +#~ msgstr "Hubo %.0f identificadores de ítem sin usar.\n" -#: scan.l:1384 -#, c-format -msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." -msgstr "Use '' para escribir comillas en cadenas, o use la sintaxis de escape de cadenas (E'\\\\')." +#~ msgid "\"%s\": removed %.0f row versions in %u pages" +#~ msgstr "«%s»: se eliminaron %.0f versiones de filas en %u páginas" -#: scan.l:1398 -#, c-format -msgid "nonstandard use of escape in a string literal" -msgstr "uso no estandar de escape en un literal de cadena" +#~ msgid "password too long" +#~ msgstr "la contraseña es demasiado larga" -#: scan.l:1399 -#, c-format -msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." -msgstr "Use la sintaxis de escape para cadenas, por ej. E'\\r\\n'." +#~ msgid "pclose failed: %m" +#~ msgstr "pclose falló: %m" diff --git a/src/backend/po/fr.po b/src/backend/po/fr.po index 7dbb263808aa3..e08201b0b3134 100644 --- a/src/backend/po/fr.po +++ b/src/backend/po/fr.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-29 07:40+0000\n" -"PO-Revision-Date: 2021-04-30 17:54+0200\n" +"POT-Creation-Date: 2021-05-12 06:10+0000\n" +"PO-Revision-Date: 2021-05-17 14:26+0200\n" "Last-Translator: Christophe Courtois \n" "Language-Team: French \n" "Language: fr\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 2.4.3\n" #: ../common/config_info.c:134 ../common/config_info.c:142 ../common/config_info.c:150 ../common/config_info.c:158 ../common/config_info.c:166 ../common/config_info.c:174 ../common/config_info.c:182 ../common/config_info.c:190 msgid "not recorded" @@ -28,19 +28,19 @@ msgstr "non enregistré" msgid "could not open file \"%s\" for reading: %m" msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %m" -#: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1271 access/transam/xlog.c:3553 access/transam/xlog.c:4781 access/transam/xlog.c:11363 access/transam/xlog.c:11376 access/transam/xlog.c:11829 access/transam/xlog.c:11909 access/transam/xlog.c:11946 access/transam/xlog.c:12006 access/transam/xlogfuncs.c:703 access/transam/xlogfuncs.c:722 commands/extension.c:3465 libpq/hba.c:536 replication/basebackup.c:2020 replication/logical/origin.c:729 replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4862 replication/logical/snapbuild.c:1733 +#: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1271 access/transam/xlog.c:3547 access/transam/xlog.c:4772 access/transam/xlog.c:11336 access/transam/xlog.c:11349 access/transam/xlog.c:11802 access/transam/xlog.c:11882 access/transam/xlog.c:11919 access/transam/xlog.c:11979 access/transam/xlogfuncs.c:703 access/transam/xlogfuncs.c:722 commands/extension.c:3465 libpq/hba.c:536 replication/basebackup.c:2020 replication/logical/origin.c:729 replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4876 replication/logical/snapbuild.c:1733 #: replication/logical/snapbuild.c:1775 replication/logical/snapbuild.c:1802 replication/slot.c:1658 replication/slot.c:1699 replication/walsender.c:544 storage/file/buffile.c:445 storage/file/copydir.c:195 utils/adt/genfile.c:203 utils/adt/misc.c:859 utils/cache/relmapper.c:741 #, c-format msgid "could not read file \"%s\": %m" msgstr "n'a pas pu lire le fichier « %s » : %m" -#: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 access/transam/xlog.c:3558 access/transam/xlog.c:4786 replication/basebackup.c:2024 replication/logical/origin.c:734 replication/logical/origin.c:773 replication/logical/snapbuild.c:1738 replication/logical/snapbuild.c:1780 replication/logical/snapbuild.c:1807 replication/slot.c:1662 replication/slot.c:1703 replication/walsender.c:549 utils/cache/relmapper.c:745 +#: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 access/transam/xlog.c:3552 access/transam/xlog.c:4777 replication/basebackup.c:2024 replication/logical/origin.c:734 replication/logical/origin.c:773 replication/logical/snapbuild.c:1738 replication/logical/snapbuild.c:1780 replication/logical/snapbuild.c:1807 replication/slot.c:1662 replication/slot.c:1703 replication/walsender.c:549 utils/cache/relmapper.c:745 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %zu" -#: ../common/controldata_utils.c:112 ../common/controldata_utils.c:117 ../common/controldata_utils.c:256 ../common/controldata_utils.c:259 access/heap/rewriteheap.c:1185 access/heap/rewriteheap.c:1288 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:516 access/transam/twophase.c:1283 access/transam/twophase.c:1682 access/transam/xlog.c:3425 access/transam/xlog.c:3593 access/transam/xlog.c:3598 access/transam/xlog.c:3925 access/transam/xlog.c:4751 access/transam/xlog.c:5676 access/transam/xlogfuncs.c:728 commands/copyfrom.c:1576 commands/copyto.c:328 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 replication/logical/origin.c:667 -#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:4920 replication/logical/snapbuild.c:1642 replication/logical/snapbuild.c:1815 replication/slot.c:1549 replication/slot.c:1710 replication/walsender.c:559 storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 storage/file/fd.c:3534 storage/file/fd.c:3637 utils/cache/relmapper.c:753 utils/cache/relmapper.c:892 +#: ../common/controldata_utils.c:112 ../common/controldata_utils.c:117 ../common/controldata_utils.c:256 ../common/controldata_utils.c:259 access/heap/rewriteheap.c:1185 access/heap/rewriteheap.c:1288 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:516 access/transam/twophase.c:1283 access/transam/twophase.c:1680 access/transam/xlog.c:3419 access/transam/xlog.c:3587 access/transam/xlog.c:3592 access/transam/xlog.c:3920 access/transam/xlog.c:4742 access/transam/xlog.c:5667 access/transam/xlogfuncs.c:728 commands/copyfrom.c:1576 commands/copyto.c:328 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 replication/logical/origin.c:667 +#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:4934 replication/logical/snapbuild.c:1642 replication/logical/snapbuild.c:1815 replication/slot.c:1549 replication/slot.c:1710 replication/walsender.c:559 storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 storage/file/fd.c:3534 storage/file/fd.c:3637 utils/cache/relmapper.c:753 utils/cache/relmapper.c:892 #, c-format msgid "could not close file \"%s\": %m" msgstr "n'a pas pu fermer le fichier « %s » : %m" @@ -63,26 +63,26 @@ msgstr "" "résultats ci-dessous sont incorrects, et l'installation de PostgreSQL\n" "est incompatible avec ce répertoire des données." -#: ../common/controldata_utils.c:197 ../common/controldata_utils.c:203 ../common/file_utils.c:232 ../common/file_utils.c:291 ../common/file_utils.c:365 access/heap/rewriteheap.c:1271 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1227 access/transam/xlog.c:3311 access/transam/xlog.c:3467 access/transam/xlog.c:3508 access/transam/xlog.c:3706 access/transam/xlog.c:3790 access/transam/xlog.c:3893 access/transam/xlog.c:4771 access/transam/xlogutils.c:817 postmaster/syslogger.c:1487 replication/basebackup.c:616 replication/basebackup.c:1610 replication/logical/origin.c:719 replication/logical/reorderbuffer.c:3536 -#: replication/logical/reorderbuffer.c:4077 replication/logical/reorderbuffer.c:4842 replication/logical/snapbuild.c:1597 replication/logical/snapbuild.c:1704 replication/slot.c:1630 replication/walsender.c:517 replication/walsender.c:2527 storage/file/copydir.c:161 storage/file/fd.c:713 storage/file/fd.c:3521 storage/file/fd.c:3608 storage/smgr/md.c:502 utils/cache/relmapper.c:724 utils/cache/relmapper.c:836 utils/error/elog.c:1938 utils/init/miscinit.c:1346 utils/init/miscinit.c:1480 utils/init/miscinit.c:1557 utils/misc/guc.c:8638 utils/misc/guc.c:8670 +#: ../common/controldata_utils.c:197 ../common/controldata_utils.c:203 ../common/file_utils.c:232 ../common/file_utils.c:291 ../common/file_utils.c:365 access/heap/rewriteheap.c:1271 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1227 access/transam/xlog.c:3305 access/transam/xlog.c:3461 access/transam/xlog.c:3502 access/transam/xlog.c:3700 access/transam/xlog.c:3785 access/transam/xlog.c:3888 access/transam/xlog.c:4762 access/transam/xlogutils.c:803 postmaster/syslogger.c:1487 replication/basebackup.c:616 replication/basebackup.c:1610 replication/logical/origin.c:719 replication/logical/reorderbuffer.c:3544 +#: replication/logical/reorderbuffer.c:4091 replication/logical/reorderbuffer.c:4856 replication/logical/snapbuild.c:1597 replication/logical/snapbuild.c:1704 replication/slot.c:1630 replication/walsender.c:517 replication/walsender.c:2526 storage/file/copydir.c:161 storage/file/fd.c:713 storage/file/fd.c:3521 storage/file/fd.c:3608 storage/smgr/md.c:502 utils/cache/relmapper.c:724 utils/cache/relmapper.c:836 utils/error/elog.c:1938 utils/init/miscinit.c:1346 utils/init/miscinit.c:1480 utils/init/miscinit.c:1557 utils/misc/guc.c:8584 utils/misc/guc.c:8616 #, c-format msgid "could not open file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier « %s » : %m" -#: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 access/transam/twophase.c:1655 access/transam/twophase.c:1664 access/transam/xlog.c:11120 access/transam/xlog.c:11158 access/transam/xlog.c:11571 access/transam/xlogfuncs.c:782 postmaster/postmaster.c:5641 postmaster/syslogger.c:1498 postmaster/syslogger.c:1511 utils/cache/relmapper.c:870 +#: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 access/transam/twophase.c:1653 access/transam/twophase.c:1662 access/transam/xlog.c:11093 access/transam/xlog.c:11131 access/transam/xlog.c:11544 access/transam/xlogfuncs.c:782 postmaster/postmaster.c:5641 postmaster/syslogger.c:1498 postmaster/syslogger.c:1511 utils/cache/relmapper.c:870 #, c-format msgid "could not write file \"%s\": %m" msgstr "impossible d'écrire le fichier « %s » : %m" -#: ../common/controldata_utils.c:239 ../common/controldata_utils.c:245 ../common/file_utils.c:303 ../common/file_utils.c:373 access/heap/rewriteheap.c:967 access/heap/rewriteheap.c:1179 access/heap/rewriteheap.c:1282 access/transam/timeline.c:432 access/transam/timeline.c:510 access/transam/twophase.c:1676 access/transam/xlog.c:3418 access/transam/xlog.c:3587 access/transam/xlog.c:4744 access/transam/xlog.c:10611 access/transam/xlog.c:10652 replication/logical/snapbuild.c:1635 replication/slot.c:1535 replication/slot.c:1640 storage/file/fd.c:730 storage/file/fd.c:3629 storage/smgr/md.c:950 storage/smgr/md.c:991 storage/sync/sync.c:417 utils/cache/relmapper.c:885 -#: utils/misc/guc.c:8425 +#: ../common/controldata_utils.c:239 ../common/controldata_utils.c:245 ../common/file_utils.c:303 ../common/file_utils.c:373 access/heap/rewriteheap.c:967 access/heap/rewriteheap.c:1179 access/heap/rewriteheap.c:1282 access/transam/timeline.c:432 access/transam/timeline.c:510 access/transam/twophase.c:1674 access/transam/xlog.c:3412 access/transam/xlog.c:3581 access/transam/xlog.c:4735 access/transam/xlog.c:10584 access/transam/xlog.c:10625 replication/logical/snapbuild.c:1635 replication/slot.c:1535 replication/slot.c:1640 storage/file/fd.c:730 storage/file/fd.c:3629 storage/smgr/md.c:950 storage/smgr/md.c:991 storage/sync/sync.c:417 utils/cache/relmapper.c:885 +#: utils/misc/guc.c:8371 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m" -#: ../common/cryptohash_openssl.c:104 ../common/exec.c:522 ../common/exec.c:567 ../common/exec.c:659 ../common/hmac_openssl.c:103 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1338 access/transam/xlog.c:6633 lib/dshash.c:246 libpq/auth.c:1483 libpq/auth.c:1551 libpq/auth.c:2109 libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:347 postmaster/bgworker.c:937 postmaster/postmaster.c:2513 postmaster/postmaster.c:4156 postmaster/postmaster.c:4826 postmaster/postmaster.c:5566 postmaster/postmaster.c:5930 replication/libpqwalreceiver/libpqwalreceiver.c:282 replication/logical/logical.c:206 -#: replication/walsender.c:588 storage/buffer/localbuf.c:442 storage/file/fd.c:882 storage/file/fd.c:1352 storage/file/fd.c:1513 storage/file/fd.c:2321 storage/ipc/procarray.c:1388 storage/ipc/procarray.c:2182 storage/ipc/procarray.c:2189 storage/ipc/procarray.c:2678 storage/ipc/procarray.c:3302 utils/adt/cryptohashfuncs.c:46 utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 utils/adt/pg_locale.c:455 utils/adt/pg_locale.c:619 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 utils/mb/mbutils.c:814 -#: utils/mb/mbutils.c:841 utils/misc/guc.c:5070 utils/misc/guc.c:5086 utils/misc/guc.c:5099 utils/misc/guc.c:8403 utils/misc/tzparser.c:467 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:701 utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:234 utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1082 utils/mmgr/mcxt.c:1113 utils/mmgr/mcxt.c:1149 utils/mmgr/mcxt.c:1201 utils/mmgr/mcxt.c:1236 utils/mmgr/mcxt.c:1271 utils/mmgr/slab.c:236 +#: ../common/cryptohash_openssl.c:104 ../common/exec.c:522 ../common/exec.c:567 ../common/exec.c:659 ../common/hmac_openssl.c:103 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1341 access/transam/xlog.c:6629 lib/dshash.c:246 libpq/auth.c:1483 libpq/auth.c:1551 libpq/auth.c:2109 libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:347 postmaster/bgworker.c:937 postmaster/postmaster.c:2513 postmaster/postmaster.c:4156 postmaster/postmaster.c:4826 postmaster/postmaster.c:5566 postmaster/postmaster.c:5930 replication/libpqwalreceiver/libpqwalreceiver.c:282 replication/logical/logical.c:205 +#: replication/walsender.c:591 storage/buffer/localbuf.c:442 storage/file/fd.c:882 storage/file/fd.c:1352 storage/file/fd.c:1513 storage/file/fd.c:2321 storage/ipc/procarray.c:1388 storage/ipc/procarray.c:2182 storage/ipc/procarray.c:2189 storage/ipc/procarray.c:2678 storage/ipc/procarray.c:3302 utils/adt/cryptohashfuncs.c:46 utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 utils/adt/pg_locale.c:450 utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 utils/mb/mbutils.c:814 +#: utils/mb/mbutils.c:841 utils/misc/guc.c:5016 utils/misc/guc.c:5032 utils/misc/guc.c:5045 utils/misc/guc.c:8349 utils/misc/tzparser.c:467 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:701 utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:234 utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1082 utils/mmgr/mcxt.c:1113 utils/mmgr/mcxt.c:1149 utils/mmgr/mcxt.c:1201 utils/mmgr/mcxt.c:1236 utils/mmgr/mcxt.c:1271 utils/mmgr/slab.c:236 #, c-format msgid "out of memory" msgstr "mémoire épuisée" @@ -112,7 +112,7 @@ msgstr "n'a pas pu trouver un « %s » à exécuter" msgid "could not change directory to \"%s\": %m" msgstr "n'a pas pu modifier le répertoire par « %s » : %m" -#: ../common/exec.c:286 access/transam/xlog.c:10994 replication/basebackup.c:1428 utils/adt/misc.c:340 +#: ../common/exec.c:286 access/transam/xlog.c:10967 replication/basebackup.c:1428 utils/adt/misc.c:340 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "n'a pas pu lire le lien symbolique « %s » : %m" @@ -132,7 +132,7 @@ msgstr "mémoire épuisée\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" -#: ../common/file_utils.c:87 ../common/file_utils.c:451 ../common/file_utils.c:455 access/transam/twophase.c:1239 access/transam/xlog.c:11096 access/transam/xlog.c:11134 access/transam/xlog.c:11351 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:227 commands/copyfrom.c:1526 commands/copyto.c:734 commands/extension.c:3444 commands/tablespace.c:807 commands/tablespace.c:898 guc-file.l:1060 replication/basebackup.c:439 replication/basebackup.c:622 replication/basebackup.c:698 replication/logical/snapbuild.c:1514 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1863 storage/file/fd.c:1949 storage/file/fd.c:3149 storage/file/fd.c:3353 +#: ../common/file_utils.c:87 ../common/file_utils.c:451 ../common/file_utils.c:455 access/transam/twophase.c:1239 access/transam/xlog.c:11069 access/transam/xlog.c:11107 access/transam/xlog.c:11324 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:227 commands/copyfrom.c:1526 commands/copyto.c:734 commands/extension.c:3444 commands/tablespace.c:807 commands/tablespace.c:898 guc-file.l:1060 replication/basebackup.c:439 replication/basebackup.c:622 replication/basebackup.c:698 replication/logical/snapbuild.c:1514 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1863 storage/file/fd.c:1949 storage/file/fd.c:3149 storage/file/fd.c:3353 #: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:419 utils/adt/genfile.c:645 #, c-format msgid "could not stat file \"%s\": %m" @@ -489,7 +489,7 @@ msgstr "n'a pas pu vérifier l'appartenance du jeton d'accès : code d'erreur %l msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" msgstr "requête de résumé d'intervalle BRIN pour la page « %s » de l'index « %u » n'a pas été enregistrée" -#: access/brin/brin.c:1015 access/brin/brin.c:1092 access/gin/ginfast.c:1035 access/transam/xlog.c:10773 access/transam/xlog.c:11302 access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 access/transam/xlogfuncs.c:509 +#: access/brin/brin.c:1015 access/brin/brin.c:1092 access/gin/ginfast.c:1035 access/transam/xlog.c:10746 access/transam/xlog.c:11275 access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 access/transam/xlogfuncs.c:509 #, c-format msgid "recovery is in progress" msgstr "restauration en cours" @@ -638,7 +638,7 @@ msgstr "le nombre de colonnes indexées (%d) dépasse la limite (%d)" msgid "index row requires %zu bytes, maximum size is %zu" msgstr "la ligne index requiert %zu octets, la taille maximum est %zu" -#: access/common/printtup.c:292 tcop/fastpath.c:106 tcop/fastpath.c:447 tcop/postgres.c:1900 +#: access/common/printtup.c:292 tcop/fastpath.c:106 tcop/fastpath.c:453 tcop/postgres.c:1900 #, c-format msgid "unsupported format code: %d" msgstr "code de format non supporté : %d" @@ -666,7 +666,7 @@ msgstr "RESET ne doit pas inclure de valeurs pour les paramètres" msgid "unrecognized parameter namespace \"%s\"" msgstr "espace de nom du paramètre « %s » non reconnu" -#: access/common/reloptions.c:1277 utils/misc/guc.c:12562 +#: access/common/reloptions.c:1277 utils/misc/guc.c:12494 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "les tables avec WITH OIDS ne sont pas supportées" @@ -726,10 +726,10 @@ msgstr "méthode compression LZ4 non supportée" msgid "This functionality requires the server to be built with lz4 support." msgstr "Cette fonctionnalité nécessite que le serveur dispose du support de lz4." -#: access/common/toast_compression.c:34 +#: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1589 utils/adt/xml.c:224 #, c-format -msgid "You need to rebuild PostgreSQL using --with-lz4." -msgstr "Vous devez recompiler PostgreSQL en utilisant --with-lz4." +msgid "You need to rebuild PostgreSQL using %s." +msgstr "Vous devez recompiler PostgreSQL en utilisant %s." #: access/common/tupdesc.c:822 parser/parse_clause.c:772 parser/parse_relation.c:1838 #, c-format @@ -778,7 +778,7 @@ msgstr "" msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Pour corriger ceci, faites un REINDEX INDEX « %s »." -#: access/gin/ginutil.c:145 executor/execExpr.c:2112 utils/adt/arrayfuncs.c:3816 utils/adt/arrayfuncs.c:6444 utils/adt/rowtypes.c:957 +#: access/gin/ginutil.c:145 executor/execExpr.c:2166 utils/adt/arrayfuncs.c:3818 utils/adt/arrayfuncs.c:6452 utils/adt/rowtypes.c:957 #, c-format msgid "could not identify a comparison function for type %s" msgstr "n'a pas pu identifier une fonction de comparaison pour le type %s" @@ -796,10 +796,9 @@ msgid "operator class \"%s\" of access method %s is missing support function %d msgstr "la classe d'opérateur « %s » de la méthode d'accès %s nécessite la fonction de support manquante %d ou %d" #: access/gin/ginvalidate.c:333 access/gist/gistvalidate.c:350 access/spgist/spgvalidate.c:387 -#, fuzzy, c-format -#| msgid "operator family %s for access method %s" +#, c-format msgid "support function number %d is invalid for access method %s" -msgstr "famille d'opérateur %s pour la méthode d'accès %s" +msgstr "le numéro de fonction d'appui %d est invalide pour la méthode d'accès %s" #: access/gist/gist.c:758 access/gist/gistvacuum.c:420 #, c-format @@ -865,7 +864,7 @@ msgstr "" msgid "could not determine which collation to use for string hashing" msgstr "n'a pas pu déterminer le collationnement à utiliser pour le hachage de chaîne" -#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:712 catalog/heap.c:718 commands/createas.c:206 commands/createas.c:509 commands/indexcmds.c:1869 commands/tablecmds.c:16664 commands/view.c:86 regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 utils/adt/like_support.c:1003 utils/adt/varchar.c:733 utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1524 +#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:712 catalog/heap.c:718 commands/createas.c:206 commands/createas.c:509 commands/indexcmds.c:1869 commands/tablecmds.c:16827 commands/view.c:86 regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 utils/adt/like_support.c:1003 utils/adt/varchar.c:733 utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1524 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Utilisez la clause COLLARE pour configurer explicitement le collationnement." @@ -917,32 +916,32 @@ msgstr "" msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "il manque un opérateur inter-type pour la famille d'opérateur « %s » de la méthode d'accès %s" -#: access/heap/heapam.c:2324 +#: access/heap/heapam.c:2328 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "ne peut pas insérer de lignes dans un processus parallèle" -#: access/heap/heapam.c:2795 +#: access/heap/heapam.c:2799 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "ne peut pas supprimer les lignes lors d'une opération parallèle" -#: access/heap/heapam.c:2841 +#: access/heap/heapam.c:2845 #, c-format msgid "attempted to delete invisible tuple" msgstr "tentative de supprimer une ligne invisible" -#: access/heap/heapam.c:3266 access/heap/heapam.c:6067 +#: access/heap/heapam.c:3274 access/heap/heapam.c:6075 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "ne peut pas mettre à jour les lignes lors d'une opération parallèle" -#: access/heap/heapam.c:3399 +#: access/heap/heapam.c:3407 #, c-format msgid "attempted to update invisible tuple" msgstr "tentative de mettre à jour une ligne invisible" -#: access/heap/heapam.c:4720 access/heap/heapam.c:4758 access/heap/heapam.c:5014 access/heap/heapam_handler.c:454 +#: access/heap/heapam.c:4728 access/heap/heapam.c:4766 access/heap/heapam.c:5022 access/heap/heapam_handler.c:454 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "n'a pas pu obtenir un verrou sur la relation « %s »" @@ -962,7 +961,7 @@ msgstr "la ligne est trop grande : taille %zu, taille maximale %zu" msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "n'a pas pu écrire le fichier « %s », a écrit %d de %d : %m" -#: access/heap/rewriteheap.c:1020 access/heap/rewriteheap.c:1138 access/transam/timeline.c:329 access/transam/timeline.c:485 access/transam/xlog.c:3334 access/transam/xlog.c:3522 access/transam/xlog.c:4723 access/transam/xlog.c:11111 access/transam/xlog.c:11149 access/transam/xlog.c:11554 access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4581 postmaster/postmaster.c:5628 replication/logical/origin.c:587 replication/slot.c:1482 storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1244 +#: access/heap/rewriteheap.c:1020 access/heap/rewriteheap.c:1138 access/transam/timeline.c:329 access/transam/timeline.c:485 access/transam/xlog.c:3328 access/transam/xlog.c:3516 access/transam/xlog.c:4714 access/transam/xlog.c:11084 access/transam/xlog.c:11122 access/transam/xlog.c:11527 access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4581 postmaster/postmaster.c:5628 replication/logical/origin.c:587 replication/slot.c:1482 storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1244 #, c-format msgid "could not create file \"%s\": %m" msgstr "n'a pas pu créer le fichier « %s » : %m" @@ -972,13 +971,13 @@ msgstr "n'a pas pu créer le fichier « %s » : %m" msgid "could not truncate file \"%s\" to %u: %m" msgstr "n'a pas pu tronquer le fichier « %s » en %u : %m" -#: access/heap/rewriteheap.c:1166 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:502 access/transam/xlog.c:3406 access/transam/xlog.c:3578 access/transam/xlog.c:4735 postmaster/postmaster.c:4591 postmaster/postmaster.c:4601 replication/logical/origin.c:599 replication/logical/origin.c:641 replication/logical/origin.c:660 replication/logical/snapbuild.c:1611 replication/slot.c:1517 storage/file/buffile.c:506 storage/file/copydir.c:207 utils/init/miscinit.c:1421 utils/init/miscinit.c:1432 utils/init/miscinit.c:1440 utils/misc/guc.c:8386 utils/misc/guc.c:8417 utils/misc/guc.c:10326 utils/misc/guc.c:10340 utils/time/snapmgr.c:1249 +#: access/heap/rewriteheap.c:1166 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:502 access/transam/xlog.c:3400 access/transam/xlog.c:3572 access/transam/xlog.c:4726 postmaster/postmaster.c:4591 postmaster/postmaster.c:4601 replication/logical/origin.c:599 replication/logical/origin.c:641 replication/logical/origin.c:660 replication/logical/snapbuild.c:1611 replication/slot.c:1517 storage/file/buffile.c:506 storage/file/copydir.c:207 utils/init/miscinit.c:1421 utils/init/miscinit.c:1432 utils/init/miscinit.c:1440 utils/misc/guc.c:8332 utils/misc/guc.c:8363 utils/misc/guc.c:10272 utils/misc/guc.c:10286 utils/time/snapmgr.c:1249 #: utils/time/snapmgr.c:1256 #, c-format msgid "could not write to file \"%s\": %m" msgstr "n'a pas pu écrire dans le fichier « %s » : %m" -#: access/heap/rewriteheap.c:1256 access/transam/twophase.c:1615 access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 postmaster/postmaster.c:1093 postmaster/syslogger.c:1464 replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4344 replication/logical/snapbuild.c:1556 replication/logical/snapbuild.c:1972 replication/slot.c:1614 storage/file/fd.c:788 storage/file/fd.c:3169 storage/file/fd.c:3231 storage/file/reinit.c:250 storage/ipc/dsm.c:315 storage/smgr/md.c:344 storage/smgr/md.c:394 storage/sync/sync.c:231 utils/time/snapmgr.c:1589 +#: access/heap/rewriteheap.c:1256 access/transam/twophase.c:1613 access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 postmaster/postmaster.c:1093 postmaster/syslogger.c:1464 replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4358 replication/logical/snapbuild.c:1556 replication/logical/snapbuild.c:1972 replication/slot.c:1614 storage/file/fd.c:788 storage/file/fd.c:3169 storage/file/fd.c:3231 storage/file/reinit.c:250 storage/ipc/dsm.c:315 storage/smgr/md.c:344 storage/smgr/md.c:394 storage/sync/sync.c:231 utils/time/snapmgr.c:1589 #, c-format msgid "could not remove file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier « %s » : %m" @@ -1009,10 +1008,9 @@ msgid "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n msgstr "pages : %u supprimées, %u restants, %u ignorées à cause de verrous; %u ignorées car gelées\n" #: access/heap/vacuumlazy.c:768 -#, fuzzy, c-format -#| msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable, oldest xmin: %u\n" +#, c-format msgid "tuples: %lld removed, %lld remain, %lld are dead but not yet removable, oldest xmin: %u\n" -msgstr "lignes : %.0f supprimées, %.0f restantes, %.0f sont mortes mais pas encore supprimables, plus ancien xmin : %u\n" +msgstr "lignes : %lld supprimées, %lld restantes, %lld sont mortes mais pas encore supprimables, plus ancien xmin : %u\n" #: access/heap/vacuumlazy.c:774 commands/analyze.c:795 #, c-format @@ -1046,14 +1044,9 @@ msgid "index scan bypassed by failsafe:" msgstr "" #: access/heap/vacuumlazy.c:811 -#, fuzzy, c-format -#| msgid "" -#| "%u index pages have been deleted, %u are currently reusable.\n" -#| "%s." +#, c-format msgid "index \"%s\": pages: %u in total, %u newly deleted, %u currently deleted, %u reusable\n" -msgstr "" -"%u pages d'index ont été supprimées, %u sont actuellement réutilisables.\n" -"%s." +msgstr "index \"%s\": blocs : %u au total, %u nouvellement supprimés, %u actuellement supprimés, %u réutilisables\n" #: access/heap/vacuumlazy.c:818 commands/analyze.c:799 #, c-format @@ -1062,17 +1055,17 @@ msgstr "vitesse moyenne de lecture : %.3f Mo/s, vitesse moyenne d'écriture : %. #: access/heap/vacuumlazy.c:822 commands/analyze.c:803 msgid "I/O Timings:" -msgstr "" +msgstr "Chronométrages I/O :" #: access/heap/vacuumlazy.c:824 commands/analyze.c:805 #, c-format msgid " read=%.3f" -msgstr "" +msgstr " lu=%.3f" #: access/heap/vacuumlazy.c:827 commands/analyze.c:808 #, c-format msgid " write=%.3f" -msgstr "" +msgstr " écrit=%.3f" #: access/heap/vacuumlazy.c:831 #, c-format @@ -1081,8 +1074,8 @@ msgstr "utilisation du système : %s\n" #: access/heap/vacuumlazy.c:833 #, c-format -msgid "WAL usage: %ld records, %ld full page images, %llu bytes" -msgstr "utilisation des WAL : %ld enregistrements, %ld images complètes de blocs, %llu octets" +msgid "WAL usage: %lld records, %lld full page images, %llu bytes" +msgstr "utilisation des WAL : %lld enregistrements, %lld images complètes de blocs, %llu octets" #: access/heap/vacuumlazy.c:908 #, c-format @@ -1094,109 +1087,102 @@ msgstr "exécution d'un VACUUM agressif sur « %s.%s »" msgid "vacuuming \"%s.%s\"" msgstr "exécution du VACUUM sur « %s.%s »" -#: access/heap/vacuumlazy.c:1615 -#, fuzzy, c-format -#| msgid "\"%s\": removed %d row versions in %d pages" +#: access/heap/vacuumlazy.c:1614 +#, c-format msgid "\"%s\": removed %lld dead item identifiers in %u pages" -msgstr "« %s »: %d versions de ligne supprimée dans %d pages" +msgstr "« %s »: %lld versions de ligne supprimées dans %u blocs" -#: access/heap/vacuumlazy.c:1621 -#, fuzzy, c-format -#| msgid "%.0f dead row versions cannot be removed yet, oldest xmin: %u\n" +#: access/heap/vacuumlazy.c:1620 +#, c-format msgid "%lld dead row versions cannot be removed yet, oldest xmin: %u\n" -msgstr "%.0f versions de lignes mortes ne peuvent pas encore être supprimées, plus ancien xmin : %u\n" +msgstr "%lld versions de lignes mortes ne peuvent pas encore être supprimées, plus ancien xmin : %u\n" -#: access/heap/vacuumlazy.c:1623 +#: access/heap/vacuumlazy.c:1622 #, c-format msgid "%u page removed.\n" msgid_plural "%u pages removed.\n" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%u bloc supprimé.\n" +msgstr[1] "%u blocs supprimés.\n" -#: access/heap/vacuumlazy.c:1627 +#: access/heap/vacuumlazy.c:1626 #, c-format msgid "Skipped %u page due to buffer pins, " msgid_plural "Skipped %u pages due to buffer pins, " msgstr[0] "Ignore %u page à cause des verrous de blocs, " msgstr[1] "Ignore %u pages à cause des verrous de blocs, " -#: access/heap/vacuumlazy.c:1631 +#: access/heap/vacuumlazy.c:1630 #, c-format msgid "%u frozen page.\n" msgid_plural "%u frozen pages.\n" msgstr[0] "%u page gelée.\n" msgstr[1] "%u pages gelées.\n" -#: access/heap/vacuumlazy.c:1635 commands/indexcmds.c:3986 commands/indexcmds.c:4005 +#: access/heap/vacuumlazy.c:1634 commands/indexcmds.c:3986 commands/indexcmds.c:4005 #, c-format msgid "%s." msgstr "%s." -#: access/heap/vacuumlazy.c:1638 -#, fuzzy, c-format -#| msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" +#: access/heap/vacuumlazy.c:1637 +#, c-format msgid "\"%s\": found %lld removable, %lld nonremovable row versions in %u out of %u pages" -msgstr "« %s » : trouvé %.0f versions de ligne supprimables, %.0f non supprimables, dans %u pages sur %u" +msgstr "« %s » : trouvé %lld versions de ligne supprimables, %lld non supprimables, dans %u blocs sur %u" -#: access/heap/vacuumlazy.c:2143 +#: access/heap/vacuumlazy.c:2142 #, c-format msgid "\"%s\": index scan bypassed: %u pages from table (%.2f%% of total) have %lld dead item identifiers" msgstr "" -#: access/heap/vacuumlazy.c:2354 -#, fuzzy, c-format -#| msgid "\"%s\": removed %d row versions in %d pages" +#: access/heap/vacuumlazy.c:2353 +#, c-format msgid "\"%s\": removed %d dead item identifiers in %u pages" -msgstr "« %s »: %d versions de ligne supprimée dans %d pages" +msgstr "« %s »: %d versions de lignes mortes supprimées dans %u blocs" -#: access/heap/vacuumlazy.c:2601 +#: access/heap/vacuumlazy.c:2600 #, c-format msgid "abandoned index vacuuming of table \"%s.%s.%s\" as a failsafe after %d index scans" msgstr "" -#: access/heap/vacuumlazy.c:2606 -#, fuzzy, c-format -#| msgid "oldest xmin is far in the past" +#: access/heap/vacuumlazy.c:2605 +#, c-format msgid "table's relfrozenxid or relminmxid is too far in the past" -msgstr "le plus ancien xmin est loin dans le passé" +msgstr "le relfrozenxid ou le relminmxid de la table est loin dans le passé" -#: access/heap/vacuumlazy.c:2607 +#: access/heap/vacuumlazy.c:2606 #, c-format msgid "" "Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" "You might also need to consider other ways for VACUUM to keep up with the allocation of transaction IDs." msgstr "" +"Réfléchissez à augmenter la valeur du paramètre de configuration « maintenance_work_mem » ou « autovacuum_work_mem ».\n" +"Vous pouvez aussi réfléchir à d'autres façons d'exécuter un VACUUM pour tenir sur l'allocation des identifiants de transaction." -#: access/heap/vacuumlazy.c:2747 +#: access/heap/vacuumlazy.c:2746 #, c-format msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index cleanup (planned: %d)" msgstr[0] "a lancé %d worker parallélisé pour le nettoyage d'index du VACUUM (planifié : %d)" msgstr[1] "a lancé %d workers parallélisés pour le nettoyage d'index du VACUUM (planifié : %d)" -#: access/heap/vacuumlazy.c:2753 +#: access/heap/vacuumlazy.c:2752 #, c-format msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" msgstr[0] "a lancé %d worker parallélisé pour le vacuum d'index (planifié : %d)" msgstr[1] "a lancé %d workers parallélisés pour le vacuum d'index (planifié : %d)" -#: access/heap/vacuumlazy.c:3042 +#: access/heap/vacuumlazy.c:3041 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "a parcouru l'index « %s » pour supprimer %d versions de lignes" -#: access/heap/vacuumlazy.c:3099 +#: access/heap/vacuumlazy.c:3098 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "l'index « %s » contient maintenant %.0f versions de ligne dans %u pages" -#: access/heap/vacuumlazy.c:3103 -#, fuzzy, c-format -#| msgid "" -#| "%.0f index row versions were removed.\n" -#| "%u index pages have been deleted, %u are currently reusable.\n" -#| "%s." +#: access/heap/vacuumlazy.c:3102 +#, c-format msgid "" "%.0f index row versions were removed.\n" "%u index pages were newly deleted.\n" @@ -1204,72 +1190,71 @@ msgid "" "%s." msgstr "" "%.0f versions de ligne d'index ont été supprimées.\n" -"%u pages d'index ont été supprimées, %u sont actuellement réutilisables.\n" +"%u blocs d'index ont été nouvellement supprimés.\n" +"%u blocs d'index sont actuellement supprimés, dont %u sont actuellement réutilisables.\n" "%s." -#: access/heap/vacuumlazy.c:3215 +#: access/heap/vacuumlazy.c:3214 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "« %s » : arrêt du TRUNCATE à cause d'un conflit dans la demande de verrou" -#: access/heap/vacuumlazy.c:3281 +#: access/heap/vacuumlazy.c:3280 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "« %s » : %u pages tronqués en %u" -#: access/heap/vacuumlazy.c:3346 +#: access/heap/vacuumlazy.c:3345 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "« %s » : mis en suspens du TRUNCATE à cause d'un conflit dans la demande de verrou" -#: access/heap/vacuumlazy.c:3492 +#: access/heap/vacuumlazy.c:3491 #, c-format msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" msgstr "désactivation de l'option de parallélisation du VACUUM sur « %s » --- ne peut pas exécuter un VACUUM parallélisé sur des tables temporaires" -#: access/heap/vacuumlazy.c:4247 -#, fuzzy, c-format -#| msgid "while scanning block %u of relation \"%s.%s\"" +#: access/heap/vacuumlazy.c:4246 +#, c-format msgid "while scanning block %u and offset %u of relation \"%s.%s\"" -msgstr "lors du parcours du bloc %u de la relation « %s.%s »" +msgstr "lors du parcours du bloc %u et du décalage %u de la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4250 +#: access/heap/vacuumlazy.c:4249 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "lors du parcours du bloc %u de la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4254 +#: access/heap/vacuumlazy.c:4253 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "lors du parcours de la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4262 -#, fuzzy, c-format -#| msgid "while vacuuming block %u of relation \"%s.%s\"" +#: access/heap/vacuumlazy.c:4261 +#, c-format msgid "while vacuuming block %u and offset %u of relation \"%s.%s\"" -msgstr "lors du VACUUM du bloc %u de la relation « %s.%s »" +msgstr "lors du traitement par VACUUM du bloc %u et du décalage %u de la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4265 +#: access/heap/vacuumlazy.c:4264 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "lors du VACUUM du bloc %u de la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4269 +#: access/heap/vacuumlazy.c:4268 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "lors du vacuum de la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4274 +#: access/heap/vacuumlazy.c:4273 #, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" msgstr "lors du nettoyage de l'index « %s » dans la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4279 +#: access/heap/vacuumlazy.c:4278 #, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" msgstr "lors du nettoyage de l'index « %s » dans la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4285 +#: access/heap/vacuumlazy.c:4284 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "lors du tronquage de la relation « %s.%s » à %u blocs" @@ -1289,7 +1274,7 @@ msgstr "la méthode d'accès « %s » n'a pas de handler" msgid "transaction aborted during system catalog scan" msgstr "transaction annulée lors du parcours du catalogue système" -#: access/index/indexam.c:142 catalog/objectaddress.c:1354 commands/indexcmds.c:2670 commands/tablecmds.c:268 commands/tablecmds.c:292 commands/tablecmds.c:16362 commands/tablecmds.c:18064 +#: access/index/indexam.c:142 catalog/objectaddress.c:1354 commands/indexcmds.c:2670 commands/tablecmds.c:267 commands/tablecmds.c:291 commands/tablecmds.c:16525 commands/tablecmds.c:18227 #, c-format msgid "\"%s\" is not an index" msgstr "« %s » n'est pas un index" @@ -1314,7 +1299,7 @@ msgstr "La clé « %s » existe déjà." msgid "This may be because of a non-immutable index expression." msgstr "Ceci peut être dû à une expression d'index immutable." -#: access/nbtree/nbtpage.c:159 access/nbtree/nbtpage.c:608 parser/parse_utilcmd.c:2327 +#: access/nbtree/nbtpage.c:159 access/nbtree/nbtpage.c:608 parser/parse_utilcmd.c:2329 #, c-format msgid "index \"%s\" is not a btree" msgstr "l'index « %s » n'est pas un btree" @@ -1373,10 +1358,9 @@ msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "la taille de la ligne interne SP-GiST, %zu, dépasse le maximum %zu" #: access/spgist/spgvalidate.c:136 -#, fuzzy, c-format -#| msgid "anycompatiblerange type %s does not match anycompatible type %s" +#, c-format msgid "SP-GiST leaf data type %s does not match declared type %s" -msgstr "le type anycompatiblerange %s ne correspond pas au type anycompatible %s." +msgstr "le type de données feuille SP-GiST %s ne correspond pas au type déclaré %s" #: access/spgist/spgvalidate.c:302 #, c-format @@ -1390,7 +1374,7 @@ msgstr "" msgid "\"%s\" is an index" msgstr "« %s » est un index" -#: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 access/table/table.c:150 catalog/aclchk.c:1799 commands/tablecmds.c:13123 commands/tablecmds.c:16371 +#: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 access/table/table.c:150 catalog/aclchk.c:1799 commands/tablecmds.c:13226 commands/tablecmds.c:16534 #, c-format msgid "\"%s\" is a composite type" msgstr "« %s » est un type composite" @@ -1405,7 +1389,7 @@ msgstr "le tid (%u, %u) n'est pas valide pour la relation « %s »" msgid "%s cannot be empty." msgstr "%s ne peut pas être vide." -#: access/table/tableamapi.c:122 utils/misc/guc.c:12486 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12418 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s est trop long (%d caractères maximum)." @@ -1436,8 +1420,7 @@ msgid "could not get commit timestamp data" msgstr "n'a pas pu récupérer les données d'horodatage de la validation" #: access/transam/commit_ts.c:378 -#, fuzzy, c-format -#| msgid "Make sure the configuration parameter \"%s\" is set on the master server." +#, c-format msgid "Make sure the configuration parameter \"%s\" is set on the primary server." msgstr "Assurez-vous que le paramètre de configuration « %s » soit configuré sur le serveur primaire." @@ -1706,12 +1689,12 @@ msgstr "Configure max_prepared_transactions à une valeur différente de zéro." msgid "transaction identifier \"%s\" is already in use" msgstr "l'identifiant de la transaction « %s » est déjà utilisé" -#: access/transam/twophase.c:417 access/transam/twophase.c:2387 +#: access/transam/twophase.c:417 access/transam/twophase.c:2385 #, c-format msgid "maximum number of prepared transactions reached" msgstr "nombre maximum de transactions préparées obtenu" -#: access/transam/twophase.c:418 access/transam/twophase.c:2388 +#: access/transam/twophase.c:418 access/transam/twophase.c:2386 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "Augmentez max_prepared_transactions (actuellement %d)." @@ -1787,66 +1770,66 @@ msgstr "taille invalide stockée dans le fichier « %s »" msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "la somme de contrôle CRC calculée ne correspond par à la valeur enregistrée dans le fichier « %s »" -#: access/transam/twophase.c:1339 access/transam/xlog.c:6634 +#: access/transam/twophase.c:1342 access/transam/xlog.c:6630 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Échec lors de l'allocation d'un processeur de lecture de journaux de transactions." -#: access/transam/twophase.c:1359 +#: access/transam/twophase.c:1357 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "n'a pas pu lire le fichier d'état de la validation en deux phases depuis les journaux de transactions à %X/%X" -#: access/transam/twophase.c:1366 +#: access/transam/twophase.c:1364 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "" "le fichier d'état de la validation en deux phases attendu n'est pas présent\n" "dans les journaux de transaction à %X/%X" -#: access/transam/twophase.c:1643 +#: access/transam/twophase.c:1641 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "n'a pas pu recréer le fichier « %s » : %m" -#: access/transam/twophase.c:1770 +#: access/transam/twophase.c:1768 #, c-format msgid "%u two-phase state file was written for a long-running prepared transaction" msgid_plural "%u two-phase state files were written for long-running prepared transactions" msgstr[0] "le fichier d'état de la validation en deux phases %u a été écrit pour une transaction préparée de longue durée" msgstr[1] "les fichiers d'état de la validation en deux phases %u ont été écrits pour des transactions préparées de longue durée" -#: access/transam/twophase.c:2004 +#: access/transam/twophase.c:2002 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "récupération de la transaction préparée %u à partir de la mémoire partagée" -#: access/transam/twophase.c:2095 +#: access/transam/twophase.c:2093 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "suppression du vieux fichier d'état de la validation en deux phases pour la transaction %u" -#: access/transam/twophase.c:2102 +#: access/transam/twophase.c:2100 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "suppression du vieux fichier d'état de la validation en deux phases de la mémoire pour la transaction %u" -#: access/transam/twophase.c:2115 +#: access/transam/twophase.c:2113 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "suppression du futur fichier d'état de la validation en deux phases pour la transaction %u" -#: access/transam/twophase.c:2122 +#: access/transam/twophase.c:2120 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "suppression du futur fichier d'état de la validation en deux phases en mémoire pour la transaction %u" -#: access/transam/twophase.c:2147 +#: access/transam/twophase.c:2145 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "fichier d'état de la validation en deux phases pour la transaction %u corrompu" -#: access/transam/twophase.c:2152 +#: access/transam/twophase.c:2150 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "mémoire d'état de la validation en deux phases pour la transaction %u corrompue" @@ -1998,74 +1981,74 @@ msgstr "ne peut pas valider de sous-transactions pendant une opération parallè msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "ne peut pas avoir plus de 2^32-1 sous-transactions dans une transaction" -#: access/transam/xlog.c:1831 +#: access/transam/xlog.c:1825 #, c-format msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" msgstr "" -#: access/transam/xlog.c:2592 +#: access/transam/xlog.c:2586 #, c-format msgid "could not write to log file %s at offset %u, length %zu: %m" msgstr "n'a pas pu écrire le fichier de transactions %s au décalage %u, longueur %zu : %m" -#: access/transam/xlog.c:3993 access/transam/xlogutils.c:812 replication/walsender.c:2521 +#: access/transam/xlog.c:3988 access/transam/xlogutils.c:798 replication/walsender.c:2520 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "le segment demandé du journal de transaction, %s, a déjà été supprimé" -#: access/transam/xlog.c:4268 +#: access/transam/xlog.c:4263 #, c-format msgid "could not rename file \"%s\": %m" msgstr "n'a pas pu renommer le fichier « %s » : %m" -#: access/transam/xlog.c:4310 access/transam/xlog.c:4320 +#: access/transam/xlog.c:4305 access/transam/xlog.c:4315 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "le répertoire « %s » requis pour les journaux de transactions n'existe pas" -#: access/transam/xlog.c:4326 +#: access/transam/xlog.c:4321 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "création du répertoire manquant pour les journaux de transactions « %s »" -#: access/transam/xlog.c:4329 +#: access/transam/xlog.c:4324 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "n'a pas pu créer le répertoire « %s » manquant : %m" -#: access/transam/xlog.c:4436 +#: access/transam/xlog.c:4427 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "identifiant timeline %u inattendu dans le journal de transactions %s, décalage %u" -#: access/transam/xlog.c:4574 +#: access/transam/xlog.c:4565 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "la nouvelle timeline %u n'est pas une enfant de la timeline %u du système" -#: access/transam/xlog.c:4588 +#: access/transam/xlog.c:4579 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "" "la nouvelle timeline %u a été créée à partir de la timeline de la base de données système %u\n" "avant le point de restauration courant %X/%X" -#: access/transam/xlog.c:4607 +#: access/transam/xlog.c:4598 #, c-format msgid "new target timeline is %u" msgstr "la nouvelle timeline cible est %u" -#: access/transam/xlog.c:4643 +#: access/transam/xlog.c:4634 #, c-format msgid "could not generate secret authorization token" msgstr "n'a pas pu générer le jeton secret d'autorisation" -#: access/transam/xlog.c:4802 access/transam/xlog.c:4811 access/transam/xlog.c:4835 access/transam/xlog.c:4842 access/transam/xlog.c:4849 access/transam/xlog.c:4854 access/transam/xlog.c:4861 access/transam/xlog.c:4868 access/transam/xlog.c:4875 access/transam/xlog.c:4882 access/transam/xlog.c:4889 access/transam/xlog.c:4896 access/transam/xlog.c:4905 access/transam/xlog.c:4912 utils/init/miscinit.c:1578 +#: access/transam/xlog.c:4793 access/transam/xlog.c:4802 access/transam/xlog.c:4826 access/transam/xlog.c:4833 access/transam/xlog.c:4840 access/transam/xlog.c:4845 access/transam/xlog.c:4852 access/transam/xlog.c:4859 access/transam/xlog.c:4866 access/transam/xlog.c:4873 access/transam/xlog.c:4880 access/transam/xlog.c:4887 access/transam/xlog.c:4896 access/transam/xlog.c:4903 utils/init/miscinit.c:1578 #, c-format msgid "database files are incompatible with server" msgstr "les fichiers de la base de données sont incompatibles avec le serveur" -#: access/transam/xlog.c:4803 +#: access/transam/xlog.c:4794 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), but the server was compiled with PG_CONTROL_VERSION %d (0x%08x)." msgstr "" @@ -2073,149 +2056,149 @@ msgstr "" "%d (0x%08x) alors que le serveur a été compilé avec un PG_CONTROL_VERSION à\n" "%d (0x%08x)." -#: access/transam/xlog.c:4807 +#: access/transam/xlog.c:4798 #, c-format msgid "This could be a problem of mismatched byte ordering. It looks like you need to initdb." msgstr "" "Ceci peut être un problème d'incohérence dans l'ordre des octets.\n" "Il se peut que vous ayez besoin d'initdb." -#: access/transam/xlog.c:4812 +#: access/transam/xlog.c:4803 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d, but the server was compiled with PG_CONTROL_VERSION %d." msgstr "" "Le cluster de base de données a été initialisé avec un PG_CONTROL_VERSION à\n" "%d alors que le serveur a été compilé avec un PG_CONTROL_VERSION à %d." -#: access/transam/xlog.c:4815 access/transam/xlog.c:4839 access/transam/xlog.c:4846 access/transam/xlog.c:4851 +#: access/transam/xlog.c:4806 access/transam/xlog.c:4830 access/transam/xlog.c:4837 access/transam/xlog.c:4842 #, c-format msgid "It looks like you need to initdb." msgstr "Il semble que vous avez besoin d'initdb." -#: access/transam/xlog.c:4826 +#: access/transam/xlog.c:4817 #, c-format msgid "incorrect checksum in control file" msgstr "somme de contrôle incorrecte dans le fichier de contrôle" -#: access/transam/xlog.c:4836 +#: access/transam/xlog.c:4827 #, c-format msgid "The database cluster was initialized with CATALOG_VERSION_NO %d, but the server was compiled with CATALOG_VERSION_NO %d." msgstr "" "Le cluster de base de données a été initialisé avec un CATALOG_VERSION_NO à\n" "%d alors que le serveur a été compilé avec un CATALOG_VERSION_NO à %d." -#: access/transam/xlog.c:4843 +#: access/transam/xlog.c:4834 #, c-format msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." msgstr "" "Le cluster de bases de données a été initialisé avec un MAXALIGN à %d alors\n" "que le serveur a été compilé avec un MAXALIGN à %d." -#: access/transam/xlog.c:4850 +#: access/transam/xlog.c:4841 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "" "Le cluster de bases de données semble utiliser un format différent pour les\n" "nombres à virgule flottante de celui de l'exécutable serveur." -#: access/transam/xlog.c:4855 +#: access/transam/xlog.c:4846 #, c-format msgid "The database cluster was initialized with BLCKSZ %d, but the server was compiled with BLCKSZ %d." msgstr "" "Le cluster de base de données a été initialisé avec un BLCKSZ à %d alors que\n" "le serveur a été compilé avec un BLCKSZ à %d." -#: access/transam/xlog.c:4858 access/transam/xlog.c:4865 access/transam/xlog.c:4872 access/transam/xlog.c:4879 access/transam/xlog.c:4886 access/transam/xlog.c:4893 access/transam/xlog.c:4900 access/transam/xlog.c:4908 access/transam/xlog.c:4915 +#: access/transam/xlog.c:4849 access/transam/xlog.c:4856 access/transam/xlog.c:4863 access/transam/xlog.c:4870 access/transam/xlog.c:4877 access/transam/xlog.c:4884 access/transam/xlog.c:4891 access/transam/xlog.c:4899 access/transam/xlog.c:4906 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Il semble que vous avez besoin de recompiler ou de relancer initdb." -#: access/transam/xlog.c:4862 +#: access/transam/xlog.c:4853 #, c-format msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." msgstr "" "Le cluster de bases de données a été initialisé avec un RELSEG_SIZE à %d\n" "alors que le serveur a été compilé avec un RELSEG_SIZE à %d." -#: access/transam/xlog.c:4869 +#: access/transam/xlog.c:4860 #, c-format msgid "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was compiled with XLOG_BLCKSZ %d." msgstr "" "Le cluster de base de données a été initialisé avec un XLOG_BLCKSZ à %d\n" "alors que le serveur a été compilé avec un XLOG_BLCKSZ à %d." -#: access/transam/xlog.c:4876 +#: access/transam/xlog.c:4867 #, c-format msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." msgstr "" "Le cluster de bases de données a été initialisé avec un NAMEDATALEN à %d\n" "alors que le serveur a été compilé avec un NAMEDATALEN à %d." -#: access/transam/xlog.c:4883 +#: access/transam/xlog.c:4874 #, c-format msgid "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server was compiled with INDEX_MAX_KEYS %d." msgstr "" "Le groupe de bases de données a été initialisé avec un INDEX_MAX_KEYS à %d\n" "alors que le serveur a été compilé avec un INDEX_MAX_KEYS à %d." -#: access/transam/xlog.c:4890 +#: access/transam/xlog.c:4881 #, c-format msgid "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the server was compiled with TOAST_MAX_CHUNK_SIZE %d." msgstr "" "Le cluster de bases de données a été initialisé avec un TOAST_MAX_CHUNK_SIZE\n" "à %d alors que le serveur a été compilé avec un TOAST_MAX_CHUNK_SIZE à %d." -#: access/transam/xlog.c:4897 +#: access/transam/xlog.c:4888 #, c-format msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." msgstr "" "Le cluster de base de données a été initialisé avec un LOBLKSIZE à %d alors que\n" "le serveur a été compilé avec un LOBLKSIZE à %d." -#: access/transam/xlog.c:4906 +#: access/transam/xlog.c:4897 #, c-format msgid "The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL." msgstr "" "Le cluster de base de données a été initialisé sans USE_FLOAT8_BYVAL\n" "alors que le serveur a été compilé avec USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4913 +#: access/transam/xlog.c:4904 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "" "Le cluster de base de données a été initialisé avec USE_FLOAT8_BYVAL\n" "alors que le serveur a été compilé sans USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4922 +#: access/transam/xlog.c:4913 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octet" msgstr[1] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octets" -#: access/transam/xlog.c:4934 +#: access/transam/xlog.c:4925 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "« min_wal_size » doit être au moins le double de « wal_segment_size »" -#: access/transam/xlog.c:4938 +#: access/transam/xlog.c:4929 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "« max_wal_size » doit être au moins le double de « wal_segment_size »" -#: access/transam/xlog.c:5372 +#: access/transam/xlog.c:5363 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "n'a pas pu écrire le « bootstrap » du journal des transactions : %m" -#: access/transam/xlog.c:5380 +#: access/transam/xlog.c:5371 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "" "n'a pas pu synchroniser sur disque (fsync) le « bootstrap » du journal des\n" "transactions : %m" -#: access/transam/xlog.c:5386 +#: access/transam/xlog.c:5377 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "n'a pas pu fermer le « bootstrap » du journal des transactions : %m" @@ -2223,266 +2206,255 @@ msgstr "n'a pas pu fermer le « bootstrap » du journal des transactions : %m" # /* # * Check for old recovery API file: recovery.conf # */ -#: access/transam/xlog.c:5447 +#: access/transam/xlog.c:5438 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "utiliser le fichier de commande de la restauration « %s » n'est plus supporté" -#: access/transam/xlog.c:5512 +#: access/transam/xlog.c:5503 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "le mode de restauration n'est pas supporté pour les serveurs mono-utilisateur" -#: access/transam/xlog.c:5529 +#: access/transam/xlog.c:5520 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "ni primary_conninfo ni restore_command n'est spécifié" -#: access/transam/xlog.c:5530 +#: access/transam/xlog.c:5521 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "" "Le serveur de la base de données va régulièrement interroger le sous-répertoire\n" "pg_wal pour vérifier les fichiers placés ici." -#: access/transam/xlog.c:5538 +#: access/transam/xlog.c:5529 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "doit spécifier une restore_command quand standby_mode n'est pas activé" -#: access/transam/xlog.c:5576 +#: access/transam/xlog.c:5567 #, c-format msgid "recovery target timeline %u does not exist" msgstr "le timeline cible, %u, de la restauration n'existe pas" -#: access/transam/xlog.c:5698 +#: access/transam/xlog.c:5689 #, c-format msgid "archive recovery complete" msgstr "restauration de l'archive terminée" -#: access/transam/xlog.c:5764 access/transam/xlog.c:6035 +#: access/transam/xlog.c:5755 access/transam/xlog.c:6026 #, c-format msgid "recovery stopping after reaching consistency" msgstr "arrêt de la restauration après avoir atteint le point de cohérence" -#: access/transam/xlog.c:5785 +#: access/transam/xlog.c:5776 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "arrêt de la restauration avant l'emplacement WAL (LSN) « %X/%X »" -#: access/transam/xlog.c:5870 +#: access/transam/xlog.c:5861 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "arrêt de la restauration avant validation de la transaction %u, %s" -#: access/transam/xlog.c:5877 +#: access/transam/xlog.c:5868 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "arrêt de la restauration avant annulation de la transaction %u, %s" -#: access/transam/xlog.c:5930 +#: access/transam/xlog.c:5921 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "restauration en arrêt au point de restauration « %s », heure %s" -#: access/transam/xlog.c:5948 +#: access/transam/xlog.c:5939 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "arrêt de la restauration après l'emplacement WAL (LSN) « %X/%X »" -#: access/transam/xlog.c:6015 +#: access/transam/xlog.c:6006 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "arrêt de la restauration après validation de la transaction %u, %s" -#: access/transam/xlog.c:6023 +#: access/transam/xlog.c:6014 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "arrêt de la restauration après annulation de la transaction %u, %s" -#: access/transam/xlog.c:6068 +#: access/transam/xlog.c:6059 #, c-format msgid "pausing at the end of recovery" msgstr "pause à la fin de la restauration" -#: access/transam/xlog.c:6069 +#: access/transam/xlog.c:6060 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Exécuter pg_wal_replay_resume() pour promouvoir." -#: access/transam/xlog.c:6072 access/transam/xlog.c:6345 +#: access/transam/xlog.c:6063 access/transam/xlog.c:6336 #, c-format msgid "recovery has paused" msgstr "restauration en pause" -#: access/transam/xlog.c:6073 +#: access/transam/xlog.c:6064 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Exécuter pg_wal_replay_resume() pour continuer." -#: access/transam/xlog.c:6336 -#, fuzzy, c-format -#| msgid "hot standby is not possible because wal_level was not set to \"replica\" or higher on the master server" +#: access/transam/xlog.c:6327 +#, c-format msgid "hot standby is not possible because of insufficient parameter settings" -msgstr "" -"les connexions en lecture seules ne sont pas possibles parce que le paramètre wal_level\n" -"n'a pas été positionné à « replica » ou plus sur le serveur maître" +msgstr "le hot standby n'est pas possible à cause d'un paramétrage insuffisant" -#: access/transam/xlog.c:6337 access/transam/xlog.c:6360 access/transam/xlog.c:6390 -#, fuzzy, c-format -#| msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" +#: access/transam/xlog.c:6328 access/transam/xlog.c:6351 access/transam/xlog.c:6381 +#, c-format msgid "%s = %d is a lower setting than on the primary server, where its value was %d." -msgstr "" -"les connexions en restauration ne sont pas possibles car %s = %d est un\n" -"paramètrage plus bas que celui du serveur maître des journaux de transactions\n" -"(la valeur était %d)" +msgstr "%s = %d est un paramètrage plus bas que celui du serveur primaire, où sa valeur était %d." -#: access/transam/xlog.c:6346 +#: access/transam/xlog.c:6337 #, c-format msgid "If recovery is unpaused, the server will shut down." -msgstr "" +msgstr "Si la restauration sort de la pause, le serveur sera arrêté." -#: access/transam/xlog.c:6347 +#: access/transam/xlog.c:6338 #, c-format msgid "You can then restart the server after making the necessary configuration changes." -msgstr "" +msgstr "Vous pouvez alors redémarrer le serveur après avoir réaliser les modifications nécessaires sur la configuration." -#: access/transam/xlog.c:6358 +#: access/transam/xlog.c:6349 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "la promotion n'est pas possible à cause d'une configuration insuffisante des paramètres" -#: access/transam/xlog.c:6364 +#: access/transam/xlog.c:6355 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "Redémarre le serveur après avoir effectuer les changements nécessaires de configuration." -#: access/transam/xlog.c:6388 +#: access/transam/xlog.c:6379 #, c-format msgid "recovery aborted because of insufficient parameter settings" -msgstr "" +msgstr "restauration annulée à cause d'un paramétrage insuffisant" -#: access/transam/xlog.c:6394 +#: access/transam/xlog.c:6385 #, c-format msgid "You can restart the server after making the necessary configuration changes." -msgstr "" +msgstr "Vous pouvez redémarrer le serveur après avoir réalisé les modifications nécessaires sur la configuration." -#: access/transam/xlog.c:6416 -#, fuzzy, c-format -#| msgid "WAL was generated with wal_level=minimal, data may be missing" +#: access/transam/xlog.c:6407 +#, c-format msgid "WAL was generated with wal_level=minimal, cannot continue recovering" -msgstr "le journal de transactions a été généré avec le paramètre wal_level=minimal, des données peuvent manquer" +msgstr "le journal de transactions a été généré avec le paramètre wal_level=minimal, ne peut pas continuer la restauration" -#: access/transam/xlog.c:6417 -#, fuzzy, c-format -#| msgid "This happens if you temporarily set wal_level=minimal without taking a new base backup." +#: access/transam/xlog.c:6408 +#, c-format msgid "This happens if you temporarily set wal_level=minimal on the server." -msgstr "" -"Ceci peut arriver si vous configurez temporairement wal_level à minimal sans avoir\n" -"pris une nouvelle sauvegarde de base." +msgstr "Ceci peut arriver si vous configurez temporairement wal_level à minimal sur le serveur." -#: access/transam/xlog.c:6418 +#: access/transam/xlog.c:6409 #, c-format msgid "Use a backup taken after setting wal_level to higher than minimal." -msgstr "" +msgstr "Utilisez la sauvegarde prise lors que la configuration de wal_level était au-dessus du niveau minimal." -#: access/transam/xlog.c:6486 +#: access/transam/xlog.c:6478 #, c-format msgid "control file contains invalid checkpoint location" msgstr "le fichier de contrôle contient un emplacement de checkpoint invalide" -#: access/transam/xlog.c:6497 +#: access/transam/xlog.c:6489 #, c-format msgid "database system was shut down at %s" msgstr "le système de bases de données a été arrêté à %s" -#: access/transam/xlog.c:6503 +#: access/transam/xlog.c:6495 #, c-format msgid "database system was shut down in recovery at %s" msgstr "le système de bases de données a été arrêté pendant la restauration à %s" -#: access/transam/xlog.c:6509 +#: access/transam/xlog.c:6501 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "le système de bases de données a été interrompu ; dernier lancement connu à %s" -#: access/transam/xlog.c:6515 +#: access/transam/xlog.c:6507 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "le système de bases de données a été interrompu lors d'une restauration à %s" -#: access/transam/xlog.c:6517 +#: access/transam/xlog.c:6509 #, c-format msgid "This probably means that some data is corrupted and you will have to use the last backup for recovery." msgstr "" "Ceci signifie probablement que des données ont été corrompues et que vous\n" "devrez utiliser la dernière sauvegarde pour la restauration." -#: access/transam/xlog.c:6523 +#: access/transam/xlog.c:6515 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "" "le système de bases de données a été interrompu lors d'une récupération à %s\n" "(moment de la journalisation)" -#: access/transam/xlog.c:6525 +#: access/transam/xlog.c:6517 #, c-format msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." msgstr "" "Si c'est arrivé plus d'une fois, des données ont pu être corrompues et vous\n" "pourriez avoir besoin de choisir une cible de récupération antérieure." -#: access/transam/xlog.c:6531 +#: access/transam/xlog.c:6523 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "le système de bases de données a été interrompu ; dernier lancement connu à %s" -#: access/transam/xlog.c:6537 +#: access/transam/xlog.c:6529 #, c-format msgid "control file contains invalid database cluster state" msgstr "le fichier de contrôle contient un état invalide de l'instance" -#: access/transam/xlog.c:6594 +#: access/transam/xlog.c:6586 #, c-format msgid "entering standby mode" msgstr "entre en mode standby" -#: access/transam/xlog.c:6597 +#: access/transam/xlog.c:6589 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "début de la restauration de l'archive au XID %u" -#: access/transam/xlog.c:6601 +#: access/transam/xlog.c:6593 #, c-format msgid "starting point-in-time recovery to %s" msgstr "début de la restauration de l'archive à %s" -#: access/transam/xlog.c:6605 +#: access/transam/xlog.c:6597 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "début de la restauration PITR à « %s »" -#: access/transam/xlog.c:6609 +#: access/transam/xlog.c:6601 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "début de la restauration PITR à l'emplacement WAL (LSN) « %X/%X »" -#: access/transam/xlog.c:6613 +#: access/transam/xlog.c:6605 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "début de la restauration de l'archive jusqu'au point de cohérence le plus proche" -#: access/transam/xlog.c:6616 +#: access/transam/xlog.c:6608 #, c-format msgid "starting archive recovery" msgstr "début de la restauration de l'archive" -#: access/transam/xlog.c:6692 +#: access/transam/xlog.c:6682 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "n'a pas pu localiser l'enregistrement redo référencé par le point de vérification" -#: access/transam/xlog.c:6693 access/transam/xlog.c:6703 +#: access/transam/xlog.c:6683 access/transam/xlog.c:6693 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2493,133 +2465,133 @@ msgstr "" "Si vous ne restaurez pas depuis une sauvegarde, essayez de supprimer « %s/backup_label ».\n" "Attention : supprimer « %s/backup_label » lors d'une restauration de sauvegarde entraînera la corruption de l'instance." -#: access/transam/xlog.c:6702 +#: access/transam/xlog.c:6692 #, c-format msgid "could not locate required checkpoint record" msgstr "n'a pas pu localiser l'enregistrement d'un point de vérification requis" -#: access/transam/xlog.c:6731 commands/tablespace.c:666 +#: access/transam/xlog.c:6721 commands/tablespace.c:666 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "n'a pas pu créer le lien symbolique « %s » : %m" -#: access/transam/xlog.c:6763 access/transam/xlog.c:6769 +#: access/transam/xlog.c:6753 access/transam/xlog.c:6759 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ignore le fichier « %s » car le fichier « %s » n'existe pas" -#: access/transam/xlog.c:6765 access/transam/xlog.c:12085 +#: access/transam/xlog.c:6755 access/transam/xlog.c:12058 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Le fichier « %s » a été renommé en « %s »." -#: access/transam/xlog.c:6771 +#: access/transam/xlog.c:6761 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "N'a pas pu renommer le fichier « %s » en « %s » : %m." -#: access/transam/xlog.c:6822 +#: access/transam/xlog.c:6812 #, c-format msgid "could not locate a valid checkpoint record" msgstr "n'a pas pu localiser un enregistrement d'un point de vérification valide" -#: access/transam/xlog.c:6860 +#: access/transam/xlog.c:6850 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "la timeline requise %u n'est pas un fils de l'historique de ce serveur" -#: access/transam/xlog.c:6862 +#: access/transam/xlog.c:6852 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "Le dernier checkpoint est à %X/%X sur la timeline %u, mais dans l'historique de la timeline demandée, le serveur est sorti de cette timeline à %X/%X." -#: access/transam/xlog.c:6876 +#: access/transam/xlog.c:6866 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "la timeline requise, %u, ne contient pas le point de restauration minimum (%X/%X) sur la timeline %u" -#: access/transam/xlog.c:6906 +#: access/transam/xlog.c:6896 #, c-format msgid "invalid next transaction ID" msgstr "prochain ID de transaction invalide" -#: access/transam/xlog.c:7007 +#: access/transam/xlog.c:6997 #, c-format msgid "invalid redo in checkpoint record" msgstr "ré-exécution invalide dans l'enregistrement du point de vérification" -#: access/transam/xlog.c:7018 +#: access/transam/xlog.c:7008 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "enregistrement de ré-exécution invalide dans le point de vérification d'arrêt" -#: access/transam/xlog.c:7052 +#: access/transam/xlog.c:7042 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "" "le système de bases de données n'a pas été arrêté proprement ; restauration\n" "automatique en cours" -#: access/transam/xlog.c:7056 +#: access/transam/xlog.c:7046 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "la restauration après crash commence par la timeline %u et a la timeline %u en cible" -#: access/transam/xlog.c:7103 +#: access/transam/xlog.c:7093 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label contient des données incohérentes avec le fichier de contrôle" -#: access/transam/xlog.c:7104 +#: access/transam/xlog.c:7094 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "" "Ceci signifie que la sauvegarde a été corrompue et que vous devrez utiliser\n" "la dernière sauvegarde pour la restauration." -#: access/transam/xlog.c:7331 +#: access/transam/xlog.c:7320 #, c-format msgid "redo starts at %X/%X" msgstr "la ré-exécution commence à %X/%X" -#: access/transam/xlog.c:7572 +#: access/transam/xlog.c:7546 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "" "le point d'arrêt de la restauration demandée se trouve avant le point\n" "cohérent de restauration" -#: access/transam/xlog.c:7610 +#: access/transam/xlog.c:7584 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "rejeu exécuté à %X/%X utilisation système : %s" -#: access/transam/xlog.c:7616 +#: access/transam/xlog.c:7590 #, c-format msgid "last completed transaction was at log time %s" msgstr "la dernière transaction a eu lieu à %s (moment de la journalisation)" -#: access/transam/xlog.c:7625 +#: access/transam/xlog.c:7599 #, c-format msgid "redo is not required" msgstr "la ré-exécution n'est pas nécessaire" -#: access/transam/xlog.c:7637 +#: access/transam/xlog.c:7611 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "la restauration s'est terminée avant d'avoir atteint la cible configurée pour la restauration" -#: access/transam/xlog.c:7716 access/transam/xlog.c:7720 +#: access/transam/xlog.c:7690 access/transam/xlog.c:7694 #, c-format msgid "WAL ends before end of online backup" msgstr "le journal de transactions se termine avant la fin de la sauvegarde de base" -#: access/transam/xlog.c:7717 +#: access/transam/xlog.c:7691 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Tous les journaux de transactions générés pendant la sauvegarde en ligne doivent être disponibles pour la restauration." -#: access/transam/xlog.c:7721 +#: access/transam/xlog.c:7695 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "" @@ -2627,187 +2599,187 @@ msgstr "" "pg_stop_backup() et tous les journaux de transactions générés entre les deux\n" "doivent être disponibles pour la restauration." -#: access/transam/xlog.c:7724 +#: access/transam/xlog.c:7698 #, c-format msgid "WAL ends before consistent recovery point" msgstr "Le journal de transaction se termine avant un point de restauration cohérent" -#: access/transam/xlog.c:7759 +#: access/transam/xlog.c:7733 #, c-format msgid "selected new timeline ID: %u" msgstr "identifiant d'un timeline nouvellement sélectionné : %u" -#: access/transam/xlog.c:8203 +#: access/transam/xlog.c:8176 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "état de restauration cohérent atteint à %X/%X" -#: access/transam/xlog.c:8412 +#: access/transam/xlog.c:8385 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "lien du point de vérification primaire invalide dans le fichier de contrôle" -#: access/transam/xlog.c:8416 +#: access/transam/xlog.c:8389 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "lien du point de vérification invalide dans le fichier backup_label" -#: access/transam/xlog.c:8434 +#: access/transam/xlog.c:8407 #, c-format msgid "invalid primary checkpoint record" msgstr "enregistrement du point de vérification primaire invalide" -#: access/transam/xlog.c:8438 +#: access/transam/xlog.c:8411 #, c-format msgid "invalid checkpoint record" msgstr "enregistrement du point de vérification invalide" -#: access/transam/xlog.c:8449 +#: access/transam/xlog.c:8422 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "identifiant du gestionnaire de ressource invalide dans l'enregistrement primaire du point de vérification" -#: access/transam/xlog.c:8453 +#: access/transam/xlog.c:8426 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "identifiant du gestionnaire de ressource invalide dans l'enregistrement du point de vérification" -#: access/transam/xlog.c:8466 +#: access/transam/xlog.c:8439 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "xl_info invalide dans l'enregistrement du point de vérification primaire" -#: access/transam/xlog.c:8470 +#: access/transam/xlog.c:8443 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "xl_info invalide dans l'enregistrement du point de vérification" -#: access/transam/xlog.c:8481 +#: access/transam/xlog.c:8454 #, c-format msgid "invalid length of primary checkpoint record" msgstr "longueur invalide de l'enregistrement primaire du point de vérification" -#: access/transam/xlog.c:8485 +#: access/transam/xlog.c:8458 #, c-format msgid "invalid length of checkpoint record" msgstr "longueur invalide de l'enregistrement du point de vérification" -#: access/transam/xlog.c:8666 +#: access/transam/xlog.c:8639 #, c-format msgid "shutting down" msgstr "arrêt en cours" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8705 +#: access/transam/xlog.c:8678 #, c-format msgid "restartpoint starting:%s%s%s%s%s%s%s%s" -msgstr "" +msgstr "début du restartpoint :%s%s%s%s%s%s%s%s" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8717 +#: access/transam/xlog.c:8690 #, c-format msgid "checkpoint starting:%s%s%s%s%s%s%s%s" -msgstr "" +msgstr "début du checkpoint :%s%s%s%s%s%s%s%s" -#: access/transam/xlog.c:8777 +#: access/transam/xlog.c:8750 #, c-format msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "" -#: access/transam/xlog.c:8797 +#: access/transam/xlog.c:8770 #, c-format msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "" -#: access/transam/xlog.c:9230 +#: access/transam/xlog.c:9203 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "" "activité en cours du journal de transactions alors que le système de bases\n" "de données est en cours d'arrêt" -#: access/transam/xlog.c:9686 +#: access/transam/xlog.c:9659 #, c-format msgid "recovery restart point at %X/%X" msgstr "la ré-exécution en restauration commence à %X/%X" -#: access/transam/xlog.c:9688 +#: access/transam/xlog.c:9661 #, c-format msgid "Last completed transaction was at log time %s." msgstr "La dernière transaction a eu lieu à %s (moment de la journalisation)." -#: access/transam/xlog.c:9928 +#: access/transam/xlog.c:9901 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "point de restauration « %s » créé à %X/%X" -#: access/transam/xlog.c:10073 +#: access/transam/xlog.c:10046 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "identifiant de timeline précédent %u inattendu (identifiant de la timeline courante %u) dans l'enregistrement du point de vérification" -#: access/transam/xlog.c:10082 +#: access/transam/xlog.c:10055 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "" "identifiant timeline %u inattendu (après %u) dans l'enregistrement du point\n" "de vérification" -#: access/transam/xlog.c:10098 +#: access/transam/xlog.c:10071 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "identifiant timeline %u inattendu dans l'enregistrement du checkpoint, avant d'atteindre le point de restauration minimum %X/%X sur la timeline %u" -#: access/transam/xlog.c:10173 +#: access/transam/xlog.c:10146 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "la sauvegarde en ligne a été annulée, la restauration ne peut pas continuer" -#: access/transam/xlog.c:10229 access/transam/xlog.c:10285 access/transam/xlog.c:10308 +#: access/transam/xlog.c:10202 access/transam/xlog.c:10258 access/transam/xlog.c:10281 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "" "identifiant timeline %u inattendu (devrait être %u) dans l'enregistrement du\n" "point de vérification" -#: access/transam/xlog.c:10657 +#: access/transam/xlog.c:10630 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier %s : %m" -#: access/transam/xlog.c:10663 +#: access/transam/xlog.c:10636 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fdatasync) le fichier « %s » : %m" -#: access/transam/xlog.c:10774 access/transam/xlog.c:11303 access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 access/transam/xlogfuncs.c:383 +#: access/transam/xlog.c:10747 access/transam/xlog.c:11276 access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 access/transam/xlogfuncs.c:383 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "les fonctions de contrôle des journaux de transactions ne peuvent pas être exécutées lors de la restauration." -#: access/transam/xlog.c:10783 access/transam/xlog.c:11312 +#: access/transam/xlog.c:10756 access/transam/xlog.c:11285 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "Le niveau de journalisation n'est pas suffisant pour faire une sauvegarde en ligne" -#: access/transam/xlog.c:10784 access/transam/xlog.c:11313 access/transam/xlogfuncs.c:308 +#: access/transam/xlog.c:10757 access/transam/xlog.c:11286 access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "" "wal_level doit être configuré à « replica » ou « logical »\n" "au démarrage du serveur." -#: access/transam/xlog.c:10789 +#: access/transam/xlog.c:10762 #, c-format msgid "backup label too long (max %d bytes)" msgstr "label de sauvegarde trop long (%d octets maximum)" -#: access/transam/xlog.c:10826 access/transam/xlog.c:11102 access/transam/xlog.c:11140 +#: access/transam/xlog.c:10799 access/transam/xlog.c:11075 access/transam/xlog.c:11113 #, c-format msgid "a backup is already in progress" msgstr "une sauvegarde est déjà en cours" -#: access/transam/xlog.c:10827 +#: access/transam/xlog.c:10800 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Exécutez pg_stop_backup() et tentez de nouveau." @@ -2817,161 +2789,157 @@ msgstr "Exécutez pg_stop_backup() et tentez de nouveau." # * (i.e., since last restartpoint used as backup starting # * checkpoint) contain full-page writes. # */ -#: access/transam/xlog.c:10923 +#: access/transam/xlog.c:10896 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "Un journal de transaction généré avec full_page_writes=off a été rejoué depuis le dernier point de reprise (restartpoint)" -#: access/transam/xlog.c:10925 access/transam/xlog.c:11508 -#, fuzzy, c-format -#| msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the master, and then try an online backup again." +#: access/transam/xlog.c:10898 access/transam/xlog.c:11481 +#, c-format msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the primary, and then try an online backup again." -msgstr "" -"Cela signifie que la sauvegarde en cours de réalisation sur l'esclave est\n" -"corrompue et ne doit pas être utilisée. Activez full_page_writes et lancez\n" -"CHECKPOINT sur le maître, puis recommencez la sauvegarde." +msgstr "Cela signifie que la sauvegarde en cours de réalisation sur le secondaire est corrompue et ne devrait pas être utilisée. Activez full_page_writes et lancez CHECKPOINT sur le primaire, puis recommencez la sauvegarde." -#: access/transam/xlog.c:11001 replication/basebackup.c:1433 utils/adt/misc.c:345 +#: access/transam/xlog.c:10974 replication/basebackup.c:1433 utils/adt/misc.c:345 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "la cible du lien symbolique « %s » est trop long" -#: access/transam/xlog.c:11051 commands/tablespace.c:402 commands/tablespace.c:578 replication/basebackup.c:1448 utils/adt/misc.c:353 +#: access/transam/xlog.c:11024 commands/tablespace.c:402 commands/tablespace.c:578 replication/basebackup.c:1448 utils/adt/misc.c:353 #, c-format msgid "tablespaces are not supported on this platform" msgstr "les tablespaces ne sont pas supportés sur cette plateforme" -#: access/transam/xlog.c:11103 access/transam/xlog.c:11141 +#: access/transam/xlog.c:11076 access/transam/xlog.c:11114 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "" "Si vous êtes certain qu'aucune sauvegarde n'est en cours, supprimez le\n" "fichier « %s » et recommencez de nouveau." -#: access/transam/xlog.c:11328 +#: access/transam/xlog.c:11301 #, c-format msgid "exclusive backup not in progress" msgstr "une sauvegarde exclusive n'est pas en cours" -#: access/transam/xlog.c:11355 +#: access/transam/xlog.c:11328 #, c-format msgid "a backup is not in progress" msgstr "aucune sauvegarde n'est en cours" -#: access/transam/xlog.c:11441 access/transam/xlog.c:11454 access/transam/xlog.c:11843 access/transam/xlog.c:11849 access/transam/xlog.c:11897 access/transam/xlog.c:11977 access/transam/xlog.c:12001 access/transam/xlogfuncs.c:733 +#: access/transam/xlog.c:11414 access/transam/xlog.c:11427 access/transam/xlog.c:11816 access/transam/xlog.c:11822 access/transam/xlog.c:11870 access/transam/xlog.c:11950 access/transam/xlog.c:11974 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "données invalides dans le fichier « %s »" -#: access/transam/xlog.c:11458 replication/basebackup.c:1281 +#: access/transam/xlog.c:11431 replication/basebackup.c:1281 #, c-format msgid "the standby was promoted during online backup" msgstr "le standby a été promu lors de la sauvegarde en ligne" -#: access/transam/xlog.c:11459 replication/basebackup.c:1282 +#: access/transam/xlog.c:11432 replication/basebackup.c:1282 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "" "Cela signifie que la sauvegarde en cours de réalisation est corrompue et ne\n" "doit pas être utilisée. Recommencez la sauvegarde." -#: access/transam/xlog.c:11506 +#: access/transam/xlog.c:11479 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "Un journal de transaction généré avec full_page_writes=off a été rejoué pendant la sauvegarde en ligne" -#: access/transam/xlog.c:11626 +#: access/transam/xlog.c:11599 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "backup de base terminé, en attente de l'archivage des journaux de transactions nécessaires" -#: access/transam/xlog.c:11638 +#: access/transam/xlog.c:11611 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "toujours en attente de la fin de l'archivage de tous les segments de journaux de transactions requis (%d secondes passées)" -#: access/transam/xlog.c:11640 +#: access/transam/xlog.c:11613 #, c-format msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." msgstr "Vérifiez que votre archive_command s'exécute correctement. Vous pouvez annuler cette sauvegarde sans souci, mais elle ne sera pas utilisable sans tous les segments WAL." -#: access/transam/xlog.c:11647 +#: access/transam/xlog.c:11620 #, c-format msgid "all required WAL segments have been archived" msgstr "tous les journaux de transactions requis ont été archivés" -#: access/transam/xlog.c:11651 +#: access/transam/xlog.c:11624 #, c-format msgid "WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup" msgstr "L'archivage des journaux de transactions n'est pas activé ; vous devez vous assurer que tous les des journaux de transactions requis sont copiés par d'autres moyens pour terminer la sauvegarde" -#: access/transam/xlog.c:11704 +#: access/transam/xlog.c:11677 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "annulation de la sauvegarde due à la déconnexion du processus serveur avant que pg_stop_backup ne soit appelé" -#: access/transam/xlog.c:11898 +#: access/transam/xlog.c:11871 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "L'identifiant de timeline parsé est %u, mais %u était attendu." #. translator: %s is a WAL record description -#: access/transam/xlog.c:12026 +#: access/transam/xlog.c:11999 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "rejeu des WAL à %X/%X pour %s" -#: access/transam/xlog.c:12074 +#: access/transam/xlog.c:12047 #, c-format msgid "online backup mode was not canceled" msgstr "le mode de sauvegarde en ligne n'a pas été annulé" -#: access/transam/xlog.c:12075 +#: access/transam/xlog.c:12048 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "Le fichier « %s » n'a pas pu être renommé en « %s » : %m." -#: access/transam/xlog.c:12084 access/transam/xlog.c:12096 access/transam/xlog.c:12106 +#: access/transam/xlog.c:12057 access/transam/xlog.c:12069 access/transam/xlog.c:12079 #, c-format msgid "online backup mode canceled" msgstr "mode de sauvegarde en ligne annulé" -#: access/transam/xlog.c:12097 +#: access/transam/xlog.c:12070 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "Les fichiers « %s » et « %s » sont renommés respectivement « %s » et « %s »." -#: access/transam/xlog.c:12107 +#: access/transam/xlog.c:12080 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "Le fichier « %s » a été renommé en « %s », mais le fichier « %s » n'a pas pu être renommé en « %s » : %m." -#: access/transam/xlog.c:12246 access/transam/xlogutils.c:986 +#: access/transam/xlog.c:12213 access/transam/xlogutils.c:967 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "n'a pas pu lire le journal de transactions %s, décalage %u : %m" -#: access/transam/xlog.c:12252 access/transam/xlogutils.c:993 +#: access/transam/xlog.c:12219 access/transam/xlogutils.c:974 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "n'a pas pu lire à partir du segment %s du journal de transactions, décalage %u: lu %d sur %zu" -#: access/transam/xlog.c:12793 +#: access/transam/xlog.c:12755 #, c-format msgid "WAL receiver process shutdown requested" msgstr "le processus wal receiver a reçu une demande d'arrêt" -#: access/transam/xlog.c:12880 +#: access/transam/xlog.c:12842 #, c-format msgid "received promote request" msgstr "a reçu une demande de promotion" -#: access/transam/xlog.c:12893 +#: access/transam/xlog.c:12855 #, c-format msgid "promote trigger file found: %s" msgstr "fichier trigger de promotion trouvé : %s" -#: access/transam/xlog.c:12901 +#: access/transam/xlog.c:12863 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "n'a pas pu récupérer les propriétés du fichier trigger pour la promotion « %s » : %m" @@ -2989,7 +2957,7 @@ msgstr "restauration du journal de transactions « %s » à partir de l'archive" #: access/transam/xlogarchive.c:228 #, c-format msgid "restore_command returned a zero exit status, but stat() failed." -msgstr "" +msgstr "restore_command a renvoyé un code de sortie zéro, mais stat() a échoué." #: access/transam/xlogarchive.c:260 #, c-format @@ -3029,16 +2997,16 @@ msgstr "une sauvegarde non exclusive est en cours" msgid "Did you mean to use pg_stop_backup('f')?" msgstr "Souhaitiez-vous utiliser pg_stop_backup('f') ?" -#: access/transam/xlogfuncs.c:185 access/transam/xlogprefetch.c:720 commands/event_trigger.c:1311 commands/event_trigger.c:1869 commands/extension.c:1944 commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:712 executor/execExpr.c:2453 executor/execSRF.c:738 executor/functions.c:1058 foreign/foreign.c:520 libpq/hba.c:2712 replication/logical/launcher.c:943 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 replication/slotfuncs.c:254 replication/walsender.c:3297 storage/ipc/shmem.c:554 utils/adt/datetime.c:4811 utils/adt/genfile.c:508 utils/adt/genfile.c:591 utils/adt/jsonfuncs.c:1933 utils/adt/jsonfuncs.c:2045 utils/adt/jsonfuncs.c:2233 -#: utils/adt/jsonfuncs.c:2342 utils/adt/jsonfuncs.c:3803 utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:218 utils/adt/pgstatfuncs.c:477 utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 utils/adt/varlena.c:4832 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10027 utils/mmgr/portalmem.c:1136 +#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 commands/event_trigger.c:1869 commands/extension.c:1944 commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:712 executor/execExpr.c:2507 executor/execSRF.c:738 executor/functions.c:1058 foreign/foreign.c:520 libpq/hba.c:2712 replication/logical/launcher.c:943 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 replication/slotfuncs.c:255 replication/walsender.c:3291 storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:508 utils/adt/genfile.c:591 utils/adt/jsonfuncs.c:1933 utils/adt/jsonfuncs.c:2045 utils/adt/jsonfuncs.c:2233 utils/adt/jsonfuncs.c:2342 +#: utils/adt/jsonfuncs.c:3803 utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:218 utils/adt/pgstatfuncs.c:477 utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 utils/adt/varlena.c:4832 utils/fmgr/funcapi.c:74 utils/misc/guc.c:9973 utils/mmgr/portalmem.c:1136 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "" "la fonction avec set-value a été appelé dans un contexte qui n'accepte pas\n" "un ensemble" -#: access/transam/xlogfuncs.c:189 access/transam/xlogprefetch.c:724 commands/event_trigger.c:1315 commands/event_trigger.c:1873 commands/extension.c:1948 commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:716 foreign/foreign.c:525 libpq/hba.c:2716 replication/logical/launcher.c:947 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 replication/slotfuncs.c:258 replication/walsender.c:3301 storage/ipc/shmem.c:558 utils/adt/datetime.c:4815 utils/adt/genfile.c:512 utils/adt/genfile.c:595 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:222 utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4836 -#: utils/misc/guc.c:10031 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 +#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 commands/event_trigger.c:1873 commands/extension.c:1948 commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:716 foreign/foreign.c:525 libpq/hba.c:2716 replication/logical/launcher.c:947 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 replication/slotfuncs.c:259 replication/walsender.c:3295 storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:512 utils/adt/genfile.c:595 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:222 utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4836 utils/misc/guc.c:9977 +#: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "mode matérialisé requis mais interdit dans ce contexte" @@ -3107,156 +3075,139 @@ msgid_plural "server did not promote within %d seconds" msgstr[0] "le serveur ne s'est pas promu en %d seconde" msgstr[1] "le serveur ne s'est pas promu dans les %d secondes" -#: access/transam/xlogprefetch.c:360 -#, c-format -msgid "recovery finished prefetching at %X/%X; prefetch = %llu, skip_hit = %llu, skip_new = %llu, skip_fpw = %llu, skip_seq = %llu, avg_distance = %f, avg_queue_depth = %f" -msgstr "" - -#: access/transam/xlogprefetch.c:462 -#, fuzzy, c-format -#| msgid "recovery stopping after reaching consistency" -msgid "recovery no longer prefetching: %s" -msgstr "arrêt de la restauration après avoir atteint le point de cohérence" - -#: access/transam/xlogprefetch.c:466 -#, fuzzy, c-format -#| msgid "aclremove is no longer supported" -msgid "recovery no longer prefetching" -msgstr "aclremove n'est plus supporté" - -#: access/transam/xlogreader.c:747 +#: access/transam/xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "décalage invalide de l'enregistrement %X/%X" -#: access/transam/xlogreader.c:756 +#: access/transam/xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "« contrecord » est requis par %X/%X" -#: access/transam/xlogreader.c:818 access/transam/xlogreader.c:1277 +#: access/transam/xlogreader.c:398 access/transam/xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "longueur invalide de l'enregistrement à %X/%X : voulait %u, a eu %u" -#: access/transam/xlogreader.c:909 +#: access/transam/xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "longueur trop importante de l'enregistrement %u à %X/%X" -#: access/transam/xlogreader.c:969 +#: access/transam/xlogreader.c:453 #, c-format -msgid "there is no contrecord flag at %X/%X reading %X/%X" -msgstr "il n'existe pas de drapeau contrecord à %X/%X en lisant %X/%X" +msgid "there is no contrecord flag at %X/%X" +msgstr "il n'existe pas de drapeau contrecord à %X/%X" -#: access/transam/xlogreader.c:984 +#: access/transam/xlogreader.c:466 #, c-format -msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" -msgstr "longueur %u invalide du contrecord à %X/%X en lisant %X/%X, attendait %u" +msgid "invalid contrecord length %u (expected %lld) at %X/%X" +msgstr "longueur %u invalide du contrecord (%lld attendu) à %X/%X" -#: access/transam/xlogreader.c:1285 +#: access/transam/xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "identifiant du gestionnaire de ressources invalide %u à %X/%X" -#: access/transam/xlogreader.c:1298 access/transam/xlogreader.c:1314 +#: access/transam/xlogreader.c:716 access/transam/xlogreader.c:732 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "enregistrement avec prev-link %X/%X incorrect à %X/%X" -#: access/transam/xlogreader.c:1350 +#: access/transam/xlogreader.c:768 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "" "somme de contrôle des données du gestionnaire de ressources incorrecte à\n" "l'enregistrement %X/%X" -#: access/transam/xlogreader.c:1387 +#: access/transam/xlogreader.c:805 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "numéro magique invalide %04X dans le segment %s, décalage %u" -#: access/transam/xlogreader.c:1401 access/transam/xlogreader.c:1442 +#: access/transam/xlogreader.c:819 access/transam/xlogreader.c:860 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "bits d'information %04X invalides dans le segment %s, décalage %u" -#: access/transam/xlogreader.c:1416 +#: access/transam/xlogreader.c:834 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "le fichier WAL provient d'un système différent : l'identifiant système de la base dans le fichier WAL est %llu, alors que l'identifiant système de la base dans pg_control est %llu" -#: access/transam/xlogreader.c:1424 +#: access/transam/xlogreader.c:842 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "Le fichier WAL provient d'un système différent : taille invalide du segment dans l'en-tête de page" -#: access/transam/xlogreader.c:1430 +#: access/transam/xlogreader.c:848 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "le fichier WAL provient d'une instance différente : XLOG_BLCKSZ incorrect dans l'en-tête de page" -#: access/transam/xlogreader.c:1461 +#: access/transam/xlogreader.c:879 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "pageaddr %X/%X inattendue dans le journal de transactions %s, segment %u" -#: access/transam/xlogreader.c:1486 +#: access/transam/xlogreader.c:904 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "identifiant timeline %u hors de la séquence (après %u) dans le segment %s, décalage %u" -#: access/transam/xlogreader.c:1908 +#: access/transam/xlogreader.c:1249 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u désordonné à %X/%X" -#: access/transam/xlogreader.c:1932 +#: access/transam/xlogreader.c:1271 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA configuré, mais aucune donnée inclus à %X/%X" -#: access/transam/xlogreader.c:1939 +#: access/transam/xlogreader.c:1278 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA non configuré, mais la longueur des données est %u à %X/%X" -#: access/transam/xlogreader.c:1975 +#: access/transam/xlogreader.c:1314 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE configué, mais du trou rencontré à l'offset %u longueur %u longueur de l'image du bloc %u à %X/%X" -#: access/transam/xlogreader.c:1991 +#: access/transam/xlogreader.c:1330 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE non configuré, mais trou rencontré à l'offset %u longueur %u à %X/%X" -#: access/transam/xlogreader.c:2006 +#: access/transam/xlogreader.c:1345 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X" -#: access/transam/xlogreader.c:2021 +#: access/transam/xlogreader.c:1360 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X" -#: access/transam/xlogreader.c:2037 +#: access/transam/xlogreader.c:1376 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL configuré, mais pas de relation précédente à %X/%X" -#: access/transam/xlogreader.c:2049 +#: access/transam/xlogreader.c:1388 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "block_id %u invalide à %X/%X" -#: access/transam/xlogreader.c:2116 +#: access/transam/xlogreader.c:1475 #, c-format msgid "record with invalid length at %X/%X" msgstr "enregistrement de longueur invalide à %X/%X" -#: access/transam/xlogreader.c:2219 +#: access/transam/xlogreader.c:1564 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "image compressée invalide à %X/%X, bloc %d" @@ -3332,10 +3283,9 @@ msgid "not all privileges could be revoked for \"%s\"" msgstr "certains droits n'ont pu être révoqué pour « %s »" #: catalog/aclchk.c:379 -#, fuzzy, c-format -#| msgid "must be superuser" +#, c-format msgid "grantor must be current user" -msgstr "doit être super-utilisateur" +msgstr "le concédant doit être l'utilisateur actuel" #: catalog/aclchk.c:446 catalog/aclchk.c:989 #, c-format @@ -3417,10 +3367,10 @@ msgstr "les droits sur la colonne sont seulement valides pour les relations" msgid "large object %u does not exist" msgstr "le « Large Object » %u n'existe pas" -#: catalog/aclchk.c:926 catalog/aclchk.c:935 commands/collationcmds.c:115 commands/copy.c:362 commands/copy.c:382 commands/copy.c:392 commands/copy.c:401 commands/copy.c:410 commands/copy.c:420 commands/copy.c:429 commands/copy.c:438 commands/copy.c:456 commands/copy.c:472 commands/copy.c:492 commands/copy.c:509 commands/dbcommands.c:157 commands/dbcommands.c:166 commands/dbcommands.c:175 commands/dbcommands.c:184 commands/dbcommands.c:193 commands/dbcommands.c:202 commands/dbcommands.c:211 commands/dbcommands.c:220 commands/dbcommands.c:229 commands/dbcommands.c:238 commands/dbcommands.c:260 commands/dbcommands.c:1502 commands/dbcommands.c:1511 commands/dbcommands.c:1520 +#: catalog/aclchk.c:926 catalog/aclchk.c:935 commands/collationcmds.c:119 commands/copy.c:362 commands/copy.c:382 commands/copy.c:392 commands/copy.c:401 commands/copy.c:410 commands/copy.c:420 commands/copy.c:429 commands/copy.c:438 commands/copy.c:456 commands/copy.c:472 commands/copy.c:492 commands/copy.c:509 commands/dbcommands.c:157 commands/dbcommands.c:166 commands/dbcommands.c:175 commands/dbcommands.c:184 commands/dbcommands.c:193 commands/dbcommands.c:202 commands/dbcommands.c:211 commands/dbcommands.c:220 commands/dbcommands.c:229 commands/dbcommands.c:238 commands/dbcommands.c:260 commands/dbcommands.c:1502 commands/dbcommands.c:1511 commands/dbcommands.c:1520 #: commands/dbcommands.c:1529 commands/extension.c:1735 commands/extension.c:1745 commands/extension.c:1755 commands/extension.c:3055 commands/foreigncmds.c:539 commands/foreigncmds.c:548 commands/functioncmds.c:578 commands/functioncmds.c:744 commands/functioncmds.c:753 commands/functioncmds.c:762 commands/functioncmds.c:771 commands/functioncmds.c:2068 commands/functioncmds.c:2076 commands/publicationcmds.c:90 commands/publicationcmds.c:133 commands/sequence.c:1266 commands/sequence.c:1276 commands/sequence.c:1286 commands/sequence.c:1296 commands/sequence.c:1306 commands/sequence.c:1316 commands/sequence.c:1326 commands/sequence.c:1336 commands/sequence.c:1346 -#: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 commands/subscriptioncmds.c:168 commands/subscriptioncmds.c:179 commands/subscriptioncmds.c:193 commands/subscriptioncmds.c:203 commands/subscriptioncmds.c:213 commands/tablecmds.c:7527 commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 commands/user.c:156 commands/user.c:165 commands/user.c:174 commands/user.c:183 commands/user.c:192 commands/user.c:201 commands/user.c:210 commands/user.c:219 -#: commands/user.c:228 commands/user.c:237 commands/user.c:246 commands/user.c:582 commands/user.c:590 commands/user.c:598 commands/user.c:606 commands/user.c:614 commands/user.c:622 commands/user.c:630 commands/user.c:638 commands/user.c:647 commands/user.c:655 commands/user.c:663 parser/parse_utilcmd.c:405 replication/pgoutput/pgoutput.c:192 replication/pgoutput/pgoutput.c:213 replication/pgoutput/pgoutput.c:227 replication/pgoutput/pgoutput.c:237 replication/pgoutput/pgoutput.c:247 replication/walsender.c:885 replication/walsender.c:896 replication/walsender.c:906 +#: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 commands/subscriptioncmds.c:168 commands/subscriptioncmds.c:179 commands/subscriptioncmds.c:193 commands/subscriptioncmds.c:203 commands/subscriptioncmds.c:213 commands/tablecmds.c:7514 commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 commands/user.c:156 commands/user.c:165 commands/user.c:174 commands/user.c:183 commands/user.c:192 commands/user.c:201 commands/user.c:210 commands/user.c:219 +#: commands/user.c:228 commands/user.c:237 commands/user.c:246 commands/user.c:582 commands/user.c:590 commands/user.c:598 commands/user.c:606 commands/user.c:614 commands/user.c:622 commands/user.c:630 commands/user.c:638 commands/user.c:647 commands/user.c:655 commands/user.c:663 parser/parse_utilcmd.c:407 replication/pgoutput/pgoutput.c:192 replication/pgoutput/pgoutput.c:213 replication/pgoutput/pgoutput.c:227 replication/pgoutput/pgoutput.c:237 replication/pgoutput/pgoutput.c:247 replication/walsender.c:882 replication/walsender.c:893 replication/walsender.c:903 #, c-format msgid "conflicting or redundant options" msgstr "options en conflit ou redondantes" @@ -3435,13 +3385,13 @@ msgstr "les droits par défaut ne peuvent pas être configurés pour les colonne msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "ne peut pas utiliser la clause IN SCHEMA lors de l'utilisation de GRANT/REVOKE ON SCHEMAS" -#: catalog/aclchk.c:1544 catalog/catalog.c:553 catalog/objectaddress.c:1521 commands/analyze.c:390 commands/copy.c:741 commands/sequence.c:1701 commands/tablecmds.c:7003 commands/tablecmds.c:7146 commands/tablecmds.c:7196 commands/tablecmds.c:7270 commands/tablecmds.c:7340 commands/tablecmds.c:7452 commands/tablecmds.c:7546 commands/tablecmds.c:7605 commands/tablecmds.c:7694 commands/tablecmds.c:7723 commands/tablecmds.c:7878 commands/tablecmds.c:7960 commands/tablecmds.c:8115 commands/tablecmds.c:8232 commands/tablecmds.c:11465 commands/tablecmds.c:11647 commands/tablecmds.c:11807 commands/tablecmds.c:12966 commands/tablecmds.c:15468 commands/trigger.c:924 parser/analyze.c:2413 -#: parser/parse_relation.c:714 parser/parse_target.c:1064 parser/parse_type.c:144 parser/parse_utilcmd.c:3451 parser/parse_utilcmd.c:3486 parser/parse_utilcmd.c:3528 utils/adt/acl.c:2845 utils/adt/ruleutils.c:2708 +#: catalog/aclchk.c:1544 catalog/catalog.c:553 catalog/objectaddress.c:1521 commands/analyze.c:390 commands/copy.c:741 commands/sequence.c:1701 commands/tablecmds.c:6990 commands/tablecmds.c:7133 commands/tablecmds.c:7183 commands/tablecmds.c:7257 commands/tablecmds.c:7327 commands/tablecmds.c:7439 commands/tablecmds.c:7533 commands/tablecmds.c:7592 commands/tablecmds.c:7681 commands/tablecmds.c:7710 commands/tablecmds.c:7865 commands/tablecmds.c:7947 commands/tablecmds.c:8102 commands/tablecmds.c:8219 commands/tablecmds.c:11568 commands/tablecmds.c:11750 commands/tablecmds.c:11910 commands/tablecmds.c:13069 commands/tablecmds.c:15631 commands/trigger.c:924 parser/analyze.c:2413 +#: parser/parse_relation.c:714 parser/parse_target.c:1064 parser/parse_type.c:144 parser/parse_utilcmd.c:3453 parser/parse_utilcmd.c:3488 parser/parse_utilcmd.c:3530 utils/adt/acl.c:2845 utils/adt/ruleutils.c:2708 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "la colonne « %s » de la relation « %s » n'existe pas" -#: catalog/aclchk.c:1807 catalog/objectaddress.c:1361 commands/sequence.c:1139 commands/tablecmds.c:250 commands/tablecmds.c:16335 utils/adt/acl.c:2053 utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 utils/adt/acl.c:2175 utils/adt/acl.c:2205 +#: catalog/aclchk.c:1807 catalog/objectaddress.c:1361 commands/sequence.c:1139 commands/tablecmds.c:249 commands/tablecmds.c:16498 utils/adt/acl.c:2053 utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 utils/adt/acl.c:2175 utils/adt/acl.c:2205 #, c-format msgid "\"%s\" is not a sequence" msgstr "« %s » n'est pas une séquence" @@ -3841,7 +3791,7 @@ msgstr "la relation d'OID %u n'existe pas" msgid "database with OID %u does not exist" msgstr "la base de données d'OID %u n'existe pas" -#: catalog/aclchk.c:4031 catalog/aclchk.c:4914 tcop/fastpath.c:144 utils/fmgr/fmgr.c:2051 +#: catalog/aclchk.c:4031 catalog/aclchk.c:4914 tcop/fastpath.c:141 utils/fmgr/fmgr.c:2051 #, c-format msgid "function with OID %u does not exist" msgstr "la fonction d'OID %u n'existe pas" @@ -3851,7 +3801,7 @@ msgstr "la fonction d'OID %u n'existe pas" msgid "language with OID %u does not exist" msgstr "le langage d'OID %u n'existe pas" -#: catalog/aclchk.c:4249 catalog/aclchk.c:5012 commands/collationcmds.c:418 +#: catalog/aclchk.c:4249 catalog/aclchk.c:5012 commands/collationcmds.c:517 #, c-format msgid "schema with OID %u does not exist" msgstr "le schéma d'OID %u n'existe pas" @@ -3906,7 +3856,7 @@ msgstr "la configuration de recherche plein texte d'OID %u n'existe pas" msgid "event trigger with OID %u does not exist" msgstr "le trigger sur événement d'OID %u n'existe pas" -#: catalog/aclchk.c:5280 +#: catalog/aclchk.c:5280 commands/collationcmds.c:368 #, c-format msgid "collation with OID %u does not exist" msgstr "le collationnement d'OID %u n'existe pas" @@ -3937,20 +3887,19 @@ msgid "statistics object with OID %u does not exist" msgstr "l'objet statistique d'OID %u n'existe pas" #: catalog/catalog.c:378 -#, fuzzy, c-format -#| msgid "while inserting index tuple (%u,%u) in relation \"%s\"" +#, c-format msgid "still finding an unused OID within relation \"%s\"" -msgstr "lors de l'insertion de l'enregistrement (%u, %u) de l'index dans la relation « %s »" +msgstr "trouve de nouveau un OID inutilisé dans la relation « %s »" #: catalog/catalog.c:380 #, c-format msgid "OID candidates were checked \"%llu\" times, but no unused OID is yet found." -msgstr "" +msgstr "Les candidats OID ont été vérifiés « %llu » fois, mais aucun OID inutilisé n'a encore été trouvé." #: catalog/catalog.c:403 #, c-format msgid "new OID has been assigned in relation \"%s\" after \"%llu\" retries" -msgstr "" +msgstr "le nouvel OID a été affecté à la relation « %s » après « %llu » tentatives" #: catalog/catalog.c:532 #, c-format @@ -3962,7 +3911,7 @@ msgstr "doit être un super-utilisateur pour appeller pg_nextoid()" msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() ne peut être utilisé que pour les catalogues système" -#: catalog/catalog.c:545 parser/parse_utilcmd.c:2274 +#: catalog/catalog.c:545 parser/parse_utilcmd.c:2276 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "l'index « %s » n'appartient pas à la table « %s »" @@ -3977,32 +3926,32 @@ msgstr "la colonne « %s » n'est pas de type oid" msgid "index \"%s\" is not the index for column \"%s\"" msgstr "l'index « %s » n'est pas un index de la colonne « %s »" -#: catalog/dependency.c:900 catalog/dependency.c:1139 +#: catalog/dependency.c:821 catalog/dependency.c:1060 #, c-format msgid "cannot drop %s because %s requires it" msgstr "n'a pas pu supprimer %s car il est requis par %s" -#: catalog/dependency.c:902 catalog/dependency.c:1141 +#: catalog/dependency.c:823 catalog/dependency.c:1062 #, c-format msgid "You can drop %s instead." msgstr "Vous pouvez supprimer %s à la place." -#: catalog/dependency.c:1010 catalog/pg_shdepend.c:696 +#: catalog/dependency.c:931 catalog/pg_shdepend.c:696 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "n'a pas pu supprimer %s car il est requis par le système de bases de données" -#: catalog/dependency.c:1214 catalog/dependency.c:1223 +#: catalog/dependency.c:1135 catalog/dependency.c:1144 #, c-format msgid "%s depends on %s" msgstr "%s dépend de %s" -#: catalog/dependency.c:1235 catalog/dependency.c:1244 +#: catalog/dependency.c:1156 catalog/dependency.c:1165 #, c-format msgid "drop cascades to %s" msgstr "DROP cascade sur %s" -#: catalog/dependency.c:1252 catalog/pg_shdepend.c:825 +#: catalog/dependency.c:1173 catalog/pg_shdepend.c:825 #, c-format msgid "" "\n" @@ -4017,35 +3966,35 @@ msgstr[1] "" "\n" "et %d autres objets (voir le journal applicatif du serveur pour une liste)" -#: catalog/dependency.c:1264 +#: catalog/dependency.c:1185 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "n'a pas pu supprimer %s car d'autres objets en dépendent" -#: catalog/dependency.c:1266 catalog/dependency.c:1267 catalog/dependency.c:1273 catalog/dependency.c:1274 catalog/dependency.c:1285 catalog/dependency.c:1286 commands/tablecmds.c:1305 commands/tablecmds.c:13584 commands/tablespace.c:481 commands/user.c:1095 commands/view.c:495 libpq/auth.c:338 replication/syncrep.c:1044 storage/lmgr/deadlock.c:1152 storage/lmgr/proc.c:1433 utils/adt/acl.c:5250 utils/adt/jsonfuncs.c:618 utils/adt/jsonfuncs.c:624 utils/misc/guc.c:7148 utils/misc/guc.c:7184 utils/misc/guc.c:7254 utils/misc/guc.c:11434 utils/misc/guc.c:11468 utils/misc/guc.c:11502 utils/misc/guc.c:11545 utils/misc/guc.c:11587 +#: catalog/dependency.c:1187 catalog/dependency.c:1188 catalog/dependency.c:1194 catalog/dependency.c:1195 catalog/dependency.c:1206 catalog/dependency.c:1207 commands/tablecmds.c:1306 commands/tablecmds.c:13687 commands/tablespace.c:481 commands/user.c:1095 commands/view.c:495 libpq/auth.c:338 replication/syncrep.c:1044 storage/lmgr/deadlock.c:1152 storage/lmgr/proc.c:1433 utils/adt/acl.c:5250 utils/adt/jsonfuncs.c:618 utils/adt/jsonfuncs.c:624 utils/misc/guc.c:7094 utils/misc/guc.c:7130 utils/misc/guc.c:7200 utils/misc/guc.c:11380 utils/misc/guc.c:11414 utils/misc/guc.c:11448 utils/misc/guc.c:11491 utils/misc/guc.c:11533 #, c-format msgid "%s" msgstr "%s" -#: catalog/dependency.c:1268 catalog/dependency.c:1275 +#: catalog/dependency.c:1189 catalog/dependency.c:1196 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Utilisez DROP ... CASCADE pour supprimer aussi les objets dépendants." -#: catalog/dependency.c:1272 +#: catalog/dependency.c:1193 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "ne peut pas supprimer les objets désirés car d'autres objets en dépendent" #. translator: %d always has a value larger than 1 -#: catalog/dependency.c:1281 +#: catalog/dependency.c:1202 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" msgstr[0] "DROP cascade sur %d autre objet" msgstr[1] "DROP cascade sur %d autres objets" -#: catalog/dependency.c:1979 +#: catalog/dependency.c:1863 #, c-format msgid "constant of the type %s cannot be used here" msgstr "la constante de type %s ne peut pas être utilisée ici" @@ -4060,12 +4009,12 @@ msgstr "droit refusé pour créer « %s.%s »" msgid "System catalog modifications are currently disallowed." msgstr "Les modifications du catalogue système sont actuellement interdites." -#: catalog/heap.c:510 commands/tablecmds.c:2342 commands/tablecmds.c:2979 commands/tablecmds.c:6585 +#: catalog/heap.c:510 commands/tablecmds.c:2343 commands/tablecmds.c:2980 commands/tablecmds.c:6572 #, c-format msgid "tables can have at most %d columns" msgstr "les tables peuvent avoir au plus %d colonnes" -#: catalog/heap.c:528 commands/tablecmds.c:6893 +#: catalog/heap.c:528 commands/tablecmds.c:6880 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "le nom de la colonne « %s » entre en conflit avec le nom d'une colonne système" @@ -4102,12 +4051,12 @@ msgstr "aucun collationnement n'a été dérivé pour la colonne « %s » sur la msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "aucun collationnement n'a été dérivé pour la colonne « %s » de type collationnable %s" -#: catalog/heap.c:1198 catalog/index.c:870 commands/createas.c:411 commands/tablecmds.c:3860 +#: catalog/heap.c:1198 catalog/index.c:868 commands/createas.c:411 commands/tablecmds.c:3861 #, c-format msgid "relation \"%s\" already exists" msgstr "la relation « %s » existe déjà" -#: catalog/heap.c:1214 catalog/pg_type.c:436 catalog/pg_type.c:842 catalog/pg_type.c:989 commands/typecmds.c:249 commands/typecmds.c:261 commands/typecmds.c:757 commands/typecmds.c:1172 commands/typecmds.c:1398 commands/typecmds.c:1590 commands/typecmds.c:2563 +#: catalog/heap.c:1214 catalog/pg_type.c:435 catalog/pg_type.c:773 catalog/pg_type.c:920 commands/typecmds.c:249 commands/typecmds.c:261 commands/typecmds.c:757 commands/typecmds.c:1172 commands/typecmds.c:1398 commands/typecmds.c:1590 commands/typecmds.c:2563 #, c-format msgid "type \"%s\" already exists" msgstr "le type « %s » existe déjà" @@ -4132,7 +4081,7 @@ msgstr "ne peut pas ajouter une contrainte NO INHERIT pour la table partitionné msgid "check constraint \"%s\" already exists" msgstr "la contrainte de vérification « %s » existe déjà" -#: catalog/heap.c:2893 catalog/index.c:884 catalog/pg_constraint.c:670 commands/tablecmds.c:8606 +#: catalog/heap.c:2893 catalog/index.c:882 catalog/pg_constraint.c:670 commands/tablecmds.c:8593 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "la contrainte « %s » de la relation « %s » existe déjà" @@ -4172,12 +4121,12 @@ msgstr "Une colonne générée ne peut référencer une autre colonne générée msgid "generation expression is not immutable" msgstr "l'expression de génération n'est pas immuable" -#: catalog/heap.c:3110 rewrite/rewriteHandler.c:1247 +#: catalog/heap.c:3110 rewrite/rewriteHandler.c:1245 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "la colonne « %s » est de type %s alors que l'expression par défaut est de type %s" -#: catalog/heap.c:3115 commands/prepare.c:367 parser/analyze.c:2637 parser/parse_target.c:595 parser/parse_target.c:883 parser/parse_target.c:893 rewrite/rewriteHandler.c:1252 +#: catalog/heap.c:3115 commands/prepare.c:367 parser/analyze.c:2637 parser/parse_target.c:595 parser/parse_target.c:883 parser/parse_target.c:893 rewrite/rewriteHandler.c:1250 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Vous devez réécrire l'expression ou lui appliquer une transformation de type." @@ -4214,102 +4163,84 @@ msgstr "La table « %s » référence « %s »." msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Tronquez la table « %s » en même temps, ou utilisez TRUNCATE ... CASCADE." -#: catalog/index.c:223 parser/parse_utilcmd.c:2180 +#: catalog/index.c:221 parser/parse_utilcmd.c:2182 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "les clés primaires multiples ne sont pas autorisées pour la table « %s »" -#: catalog/index.c:241 +#: catalog/index.c:239 #, c-format msgid "primary keys cannot be expressions" msgstr "les clés primaires ne peuvent pas être des expressions" -#: catalog/index.c:258 +#: catalog/index.c:256 #, c-format msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "la colonne de clé primaire « %s » n'est pas marquée NOT NULL" -#: catalog/index.c:769 catalog/index.c:2070 +#: catalog/index.c:767 catalog/index.c:1903 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "les index définis par l'utilisateur sur les tables du catalogue système ne sont pas supportés" -#: catalog/index.c:809 +#: catalog/index.c:807 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "les collationnements non-déterministes ne sont pas supportés pour la classe d'opérateurs « %s »" -#: catalog/index.c:824 +#: catalog/index.c:822 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "" "la création en parallèle d'un index sur les tables du catalogue système\n" "n'est pas supportée" -#: catalog/index.c:833 catalog/index.c:1445 +#: catalog/index.c:831 catalog/index.c:1282 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "la création de manière concurrente d'un index pour les contraintes d'exclusion n'est pas supportée" -#: catalog/index.c:842 +#: catalog/index.c:840 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "les index partagés ne peuvent pas être créés après initdb" -#: catalog/index.c:862 commands/createas.c:417 commands/sequence.c:154 parser/parse_utilcmd.c:212 +#: catalog/index.c:860 commands/createas.c:417 commands/sequence.c:154 parser/parse_utilcmd.c:211 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "la relation « %s » existe déjà, poursuite du traitement" -#: catalog/index.c:912 +#: catalog/index.c:910 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "OID de l'index de pg_class non configuré en mode de mise à jour binaire" -#: catalog/index.c:1324 -#, fuzzy, c-format -#| msgid "index \"%s\" contains %.0f row versions, but table contains %.0f row versions" -msgid "index \"%s\" depends on collation \"%s\" version \"%s\", but the current version is \"%s\"" -msgstr "" -"l'index « %s » contient %.0f versions de ligne, mais la table contient %.0f\n" -"versions de ligne" - -#: catalog/index.c:1329 -#, c-format -msgid "The index may be corrupted due to changes in sort order." -msgstr "" - -#: catalog/index.c:1330 -#, c-format -msgid "REINDEX to avoid the risk of corruption." -msgstr "" - -#: catalog/index.c:2356 +#: catalog/index.c:2189 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY doit être la première action dans une transaction" -#: catalog/index.c:3741 +#: catalog/index.c:3574 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "ne peut pas ré-indexer les tables temporaires des autres sessions" -#: catalog/index.c:3752 commands/indexcmds.c:3426 +#: catalog/index.c:3585 commands/indexcmds.c:3426 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "ne peut pas réindexer un index invalide sur une table TOAST" -#: catalog/index.c:3768 commands/indexcmds.c:3306 commands/indexcmds.c:3450 commands/tablecmds.c:3299 +#: catalog/index.c:3601 commands/indexcmds.c:3306 commands/indexcmds.c:3450 commands/tablecmds.c:3300 #, c-format msgid "cannot move system relation \"%s\"" msgstr "ne peut pas déplacer la colonne système « %s »" -#: catalog/index.c:3913 +#: catalog/index.c:3746 #, c-format msgid "index \"%s\" was reindexed" msgstr "l'index « %s » a été réindexée" -#: catalog/index.c:4047 +#: catalog/index.c:3877 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "ne peut pas réindexer l'index invalide « %s.%s » sur une table TOAST, ignoré" @@ -4394,7 +4325,7 @@ msgstr "la configuration de recherche plein texte « %s » n'existe pas" msgid "cross-database references are not implemented: %s" msgstr "les références entre bases de données ne sont pas implémentées : %s" -#: catalog/namespace.c:2842 gram.y:15116 gram.y:17074 parser/parse_expr.c:817 parser/parse_target.c:1263 +#: catalog/namespace.c:2842 gram.y:15124 gram.y:17082 parser/parse_expr.c:817 parser/parse_target.c:1263 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "mauvaise qualification du nom (trop de points entre les noms) : %s" @@ -4409,7 +4340,7 @@ msgstr "ne peut pas déplacer les objets dans ou à partir des schémas temporai msgid "cannot move objects into or out of TOAST schema" msgstr "ne peut pas déplacer les objets dans ou à partir des schémas TOAST" -#: catalog/namespace.c:3051 commands/schemacmds.c:233 commands/schemacmds.c:313 commands/tablecmds.c:1250 +#: catalog/namespace.c:3051 commands/schemacmds.c:233 commands/schemacmds.c:313 commands/tablecmds.c:1251 #, c-format msgid "schema \"%s\" does not exist" msgstr "le schéma « %s » n'existe pas" @@ -4444,27 +4375,27 @@ msgstr "ne peut pas créer des tables temporaires lors de la restauration" msgid "cannot create temporary tables during a parallel operation" msgstr "ne peut pas créer de tables temporaires pendant une opération parallèle" -#: catalog/namespace.c:4285 commands/tablespace.c:1217 commands/variable.c:64 utils/misc/guc.c:11619 utils/misc/guc.c:11697 +#: catalog/namespace.c:4285 commands/tablespace.c:1217 commands/variable.c:64 utils/misc/guc.c:11565 utils/misc/guc.c:11643 #, c-format msgid "List syntax is invalid." msgstr "La syntaxe de la liste est invalide." -#: catalog/objectaddress.c:1369 catalog/pg_publication.c:57 commands/policy.c:95 commands/policy.c:375 commands/policy.c:465 commands/tablecmds.c:244 commands/tablecmds.c:286 commands/tablecmds.c:2152 commands/tablecmds.c:6034 commands/tablecmds.c:11582 +#: catalog/objectaddress.c:1369 catalog/pg_publication.c:57 commands/policy.c:95 commands/policy.c:375 commands/policy.c:465 commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2153 commands/tablecmds.c:6021 commands/tablecmds.c:11685 #, c-format msgid "\"%s\" is not a table" msgstr "« %s » n'est pas une table" -#: catalog/objectaddress.c:1376 commands/tablecmds.c:256 commands/tablecmds.c:6064 commands/tablecmds.c:16340 commands/view.c:119 +#: catalog/objectaddress.c:1376 commands/tablecmds.c:255 commands/tablecmds.c:6051 commands/tablecmds.c:16503 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "« %s » n'est pas une vue" -#: catalog/objectaddress.c:1383 commands/matview.c:175 commands/tablecmds.c:262 commands/tablecmds.c:16345 +#: catalog/objectaddress.c:1383 commands/matview.c:175 commands/tablecmds.c:261 commands/tablecmds.c:16508 #, c-format msgid "\"%s\" is not a materialized view" msgstr "« %s » n'est pas une vue matérialisée" -#: catalog/objectaddress.c:1390 commands/tablecmds.c:280 commands/tablecmds.c:6067 commands/tablecmds.c:16350 +#: catalog/objectaddress.c:1390 commands/tablecmds.c:279 commands/tablecmds.c:6054 commands/tablecmds.c:16513 #, c-format msgid "\"%s\" is not a foreign table" msgstr "« %s » n'est pas une table distante" @@ -4484,7 +4415,7 @@ msgstr "le nom de la colonne doit être qualifié" msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "la valeur par défaut de la colonne « %s » de la relation « %s » n'existe pas" -#: catalog/objectaddress.c:1644 commands/functioncmds.c:136 commands/tablecmds.c:272 commands/typecmds.c:274 commands/typecmds.c:3713 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 utils/adt/acl.c:4411 +#: catalog/objectaddress.c:1644 commands/functioncmds.c:136 commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 utils/adt/acl.c:4411 #, c-format msgid "type \"%s\" does not exist" msgstr "le type « %s » n'existe pas" @@ -5034,22 +4965,22 @@ msgstr "la fonction %s requiert une coercion sur le type à l'exécution" msgid "cast from type %s to type %s already exists" msgstr "la conversion du type %s vers le type %s existe déjà" -#: catalog/pg_collation.c:92 catalog/pg_collation.c:139 +#: catalog/pg_collation.c:93 catalog/pg_collation.c:140 #, c-format msgid "collation \"%s\" already exists, skipping" msgstr "le collationnement « %s » existe déjà, poursuite du traitement" -#: catalog/pg_collation.c:94 +#: catalog/pg_collation.c:95 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists, skipping" msgstr "le collationnement « %s » pour l'encodage « %s » existe déjà, poursuite du traitement" -#: catalog/pg_collation.c:102 catalog/pg_collation.c:146 +#: catalog/pg_collation.c:103 catalog/pg_collation.c:147 #, c-format msgid "collation \"%s\" already exists" msgstr "le collationnement « %s » existe déjà" -#: catalog/pg_collation.c:104 +#: catalog/pg_collation.c:105 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists" msgstr "le collationnement « %s » pour l'encodage « %s » existe déjà" @@ -5079,12 +5010,12 @@ msgstr "la conversion « %s » existe déjà" msgid "default conversion for %s to %s already exists" msgstr "la conversion par défaut de %s vers %s existe déjà" -#: catalog/pg_depend.c:235 commands/extension.c:3343 +#: catalog/pg_depend.c:204 commands/extension.c:3343 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s est déjà un membre de l'extension « %s »" -#: catalog/pg_depend.c:611 +#: catalog/pg_depend.c:580 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "ne peut pas supprimer la dépendance sur %s car il s'agit d'un objet système" @@ -5132,12 +5063,12 @@ msgstr "ne peut pas détacher la partition « %s »" #: catalog/pg_inherits.c:595 #, c-format msgid "The partition is being detached concurrently or has an unfinished detach." -msgstr "" +msgstr "La partition est en cours de détachement ou à un détachement non terminé." #: catalog/pg_inherits.c:596 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation" -msgstr "" +msgstr "Utilisez ALTER TABLE ... DETACH PARTITION ... FINALIZE pour terminer l'opération de détachement en attente" #: catalog/pg_inherits.c:600 #, c-format @@ -5147,7 +5078,7 @@ msgstr "ne peut pas terminer le détachement de la partition « %s »" #: catalog/pg_inherits.c:602 #, c-format msgid "There's no pending concurrent detach." -msgstr "" +msgstr "Il n'y a pas de détachement en attente." #: catalog/pg_namespace.c:64 commands/schemacmds.c:242 #, c-format @@ -5427,7 +5358,7 @@ msgstr "n'a pas pu supprimer la correspondance des relations pour la souscriptio #: catalog/pg_subscription.c:434 #, c-format msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." -msgstr "" +msgstr "La synchronization de la table « %s » est en cours et est dans l'état « %c »." #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command @@ -5435,60 +5366,59 @@ msgstr "" #: catalog/pg_subscription.c:440 #, c-format msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." -msgstr "" +msgstr "Utiliser %s pour activer la souscription si elle n'est pas déjà activée ou utiliser %s pour supprimer la souscription." -#: catalog/pg_type.c:137 catalog/pg_type.c:476 +#: catalog/pg_type.c:136 catalog/pg_type.c:475 #, c-format msgid "pg_type OID value not set when in binary upgrade mode" msgstr "OID de pg_type non configuré en mode de mise à jour binaire" -#: catalog/pg_type.c:256 +#: catalog/pg_type.c:255 #, c-format msgid "invalid type internal size %d" msgstr "taille interne de type invalide %d" -#: catalog/pg_type.c:272 catalog/pg_type.c:280 catalog/pg_type.c:288 catalog/pg_type.c:297 +#: catalog/pg_type.c:271 catalog/pg_type.c:279 catalog/pg_type.c:287 catalog/pg_type.c:296 #, c-format msgid "alignment \"%c\" is invalid for passed-by-value type of size %d" msgstr "l'alignement « %c » est invalide pour le type passé par valeur de taille %d" -#: catalog/pg_type.c:304 +#: catalog/pg_type.c:303 #, c-format msgid "internal size %d is invalid for passed-by-value type" msgstr "la taille interne %d est invalide pour le type passé par valeur" -#: catalog/pg_type.c:314 catalog/pg_type.c:320 +#: catalog/pg_type.c:313 catalog/pg_type.c:319 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "l'alignement « %c » est invalide pour le type de longueur variable" -#: catalog/pg_type.c:328 commands/typecmds.c:4164 +#: catalog/pg_type.c:327 commands/typecmds.c:4164 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "les types de taille fixe doivent avoir un stockage de base" -#: catalog/pg_type.c:885 +#: catalog/pg_type.c:816 #, c-format msgid "could not form array type name for type \"%s\"" msgstr "n'a pas pu former le nom du type array pour le type de données « %s »" -#: catalog/pg_type.c:990 -#, fuzzy, c-format -#| msgid "Failed while creating memory context \"%s\"." +#: catalog/pg_type.c:921 +#, c-format msgid "Failed while creating a multirange type for type \"%s\"." -msgstr "Échec lors de la création du contexte mémoire « %s »." +msgstr "Échec lors de la création d'un type multirange pour le type « %s »." -#: catalog/pg_type.c:991 +#: catalog/pg_type.c:922 #, c-format msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute" -msgstr "" +msgstr "Vous pouvez modifier manuellement un nom de type multirange en utilisant l'attribut « multirange_type_name »" #: catalog/storage.c:450 storage/buffer/bufmgr.c:1026 #, c-format msgid "invalid page in block %u of relation %s" msgstr "page invalide dans le bloc %u de la relation %s" -#: catalog/toasting.c:104 commands/indexcmds.c:667 commands/tablecmds.c:6046 commands/tablecmds.c:16205 +#: catalog/toasting.c:104 commands/indexcmds.c:667 commands/tablecmds.c:6033 commands/tablecmds.c:16368 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "« %s » n'est ni une table ni une vue matérialisée" @@ -5713,10 +5643,9 @@ msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "la colonne « %s » de la relation « %s » apparait plus d'une fois" #: commands/analyze.c:791 -#, fuzzy, c-format -#| msgid "automatic analyze of table \"%s.%s.%s\"" +#, c-format msgid "automatic analyze of table \"%s.%s.%s\"\n" -msgstr "ANALYZE automatique de la table « %s.%s.%s »" +msgstr "ANALYZE automatique de la table « %s.%s.%s »\n" #: commands/analyze.c:812 #, c-format @@ -5802,7 +5731,7 @@ msgstr "ne peut pas exécuter CLUSTER sur une table partitionnée" msgid "there is no previously clustered index for table \"%s\"" msgstr "il n'y a pas d'index CLUSTER précédent pour la table « %s »" -#: commands/cluster.c:187 commands/tablecmds.c:13421 commands/tablecmds.c:15229 +#: commands/cluster.c:187 commands/tablecmds.c:13524 commands/tablecmds.c:15392 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "l'index « %s » pour la table « %s » n'existe pas" @@ -5817,7 +5746,7 @@ msgstr "ne peut pas exécuter CLUSTER sur un catalogue partagé" msgid "cannot vacuum temporary tables of other sessions" msgstr "ne peut pas exécuter VACUUM sur les tables temporaires des autres sessions" -#: commands/cluster.c:456 commands/tablecmds.c:15239 +#: commands/cluster.c:456 commands/tablecmds.c:15402 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "« %s » n'est pas un index de la table « %s »" @@ -5868,62 +5797,72 @@ msgstr "" "%.0f versions de lignes ne peuvent pas encore être supprimées.\n" "%s." -#: commands/collationcmds.c:102 +#: commands/collationcmds.c:106 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "attribut de collationnement « %s » non reconnu" -#: commands/collationcmds.c:145 +#: commands/collationcmds.c:149 #, c-format msgid "collation \"default\" cannot be copied" msgstr "le collationnement « default » ne peut pas être copié" -#: commands/collationcmds.c:175 +#: commands/collationcmds.c:182 #, c-format msgid "unrecognized collation provider: %s" msgstr "fournisseur de collationnement non reconnu : %s" -#: commands/collationcmds.c:184 +#: commands/collationcmds.c:191 #, c-format msgid "parameter \"lc_collate\" must be specified" msgstr "le paramètre « lc_collate » doit être spécifié" -#: commands/collationcmds.c:189 +#: commands/collationcmds.c:196 #, c-format msgid "parameter \"lc_ctype\" must be specified" msgstr "le paramètre « lc_ctype » doit être spécifié" -#: commands/collationcmds.c:199 +#: commands/collationcmds.c:206 #, c-format msgid "nondeterministic collations not supported with this provider" msgstr "les collationnements non déterministes ne sont pas supportés avec ce fournisseur" -#: commands/collationcmds.c:255 +#: commands/collationcmds.c:266 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "le collationnament « %s » pour l'encodage « %s » existe déjà dans le schéma « %s »" -#: commands/collationcmds.c:266 +#: commands/collationcmds.c:277 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "le collationnement « %s » existe déjà dans le schéma « %s »" -#: commands/collationcmds.c:355 +#: commands/collationcmds.c:325 +#, c-format +msgid "changing version from %s to %s" +msgstr "changement de version de %s à %s" + +#: commands/collationcmds.c:340 +#, c-format +msgid "version has not changed" +msgstr "la version n'a pas changé" + +#: commands/collationcmds.c:454 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "n'a pas pu convertir le nom de locale « %s » en balise de langage : %s" -#: commands/collationcmds.c:413 +#: commands/collationcmds.c:512 #, c-format msgid "must be superuser to import system collations" msgstr "doit être super-utilisateur pour importer les collationnements systèmes" -#: commands/collationcmds.c:441 commands/copyfrom.c:1500 commands/copyto.c:688 libpq/be-secure-common.c:81 +#: commands/collationcmds.c:540 commands/copyfrom.c:1500 commands/copyto.c:688 libpq/be-secure-common.c:81 #, c-format msgid "could not execute command \"%s\": %m" msgstr "n'a pas pu exécuter la commande « %s » : %m" -#: commands/collationcmds.c:570 +#: commands/collationcmds.c:671 #, c-format msgid "no usable system locales were found" msgstr "aucune locale système utilisable n'a été trouvée" @@ -5933,7 +5872,7 @@ msgstr "aucune locale système utilisable n'a été trouvée" msgid "database \"%s\" does not exist" msgstr "la base de données « %s » n'existe pas" -#: commands/comment.c:101 commands/seclabel.c:191 parser/parse_utilcmd.c:987 +#: commands/comment.c:101 commands/seclabel.c:191 parser/parse_utilcmd.c:989 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni un type composite, ni une table distante" @@ -5974,10 +5913,9 @@ msgid "encoding conversion function %s must return type %s" msgstr "la fonction de conversion d'encodage %s doit renvoyer le type %s" #: commands/conversioncmds.c:130 -#, fuzzy, c-format -#| msgid "encoding conversion function %s must return type %s" +#, c-format msgid "encoding conversion function %s returned incorrect result for empty input" -msgstr "la fonction de conversion d'encodage %s doit renvoyer le type %s" +msgstr "la fonction de conversion d'encodage %s a renvoyé un résultat incorrect pour l'entrée vide" #: commands/copy.c:86 #, c-format @@ -6139,12 +6077,12 @@ msgstr "la colonne « %s » est une colonne générée" msgid "Generated columns cannot be used in COPY." msgstr "Les colonnes générées ne peuvent pas être utilisées dans COPY." -#: commands/copy.c:746 commands/indexcmds.c:1754 commands/statscmds.c:250 commands/tablecmds.c:2373 commands/tablecmds.c:3029 commands/tablecmds.c:3522 parser/parse_relation.c:3593 parser/parse_relation.c:3613 utils/adt/tsvector_op.c:2680 +#: commands/copy.c:746 commands/indexcmds.c:1754 commands/statscmds.c:250 commands/tablecmds.c:2374 commands/tablecmds.c:3030 commands/tablecmds.c:3523 parser/parse_relation.c:3593 parser/parse_relation.c:3613 utils/adt/tsvector_op.c:2680 #, c-format msgid "column \"%s\" does not exist" msgstr "la colonne « %s » n'existe pas" -#: commands/copy.c:753 commands/tablecmds.c:2399 commands/trigger.c:933 parser/parse_target.c:1080 parser/parse_target.c:1091 +#: commands/copy.c:753 commands/tablecmds.c:2400 commands/trigger.c:933 parser/parse_target.c:1080 parser/parse_target.c:1091 #, c-format msgid "column \"%s\" specified more than once" msgstr "la colonne « %s » est spécifiée plus d'une fois" @@ -6799,17 +6737,17 @@ msgstr "« %s » est une fonction d'agrégat" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Utiliser DROP AGGREGATE pour supprimer les fonctions d'agrégat." -#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3606 commands/tablecmds.c:3764 commands/tablecmds.c:3809 commands/tablecmds.c:15666 tcop/utility.c:1291 +#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3607 commands/tablecmds.c:3765 commands/tablecmds.c:3810 commands/tablecmds.c:15829 tcop/utility.c:1291 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "la relation « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1255 +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1256 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "le schéma « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:273 +#: commands/dropcmds.c:228 commands/dropcmds.c:267 commands/tablecmds.c:272 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "le type « %s » n'existe pas, poursuite du traitement" @@ -7105,7 +7043,7 @@ msgstr "" "le paramètre « %s » ne peut pas être configuré dans un fichier de contrôle\n" "secondaire de l'extension" -#: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 utils/misc/guc.c:7126 +#: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 utils/misc/guc.c:7072 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "le paramètre « %s » requiert une valeur booléenne" @@ -7458,8 +7396,7 @@ msgid "functions cannot accept set arguments" msgstr "les fonctions ne peuvent pas accepter des arguments d'ensemble" #: commands/functioncmds.c:306 -#, fuzzy, c-format -#| msgid "VARIADIC parameter must be the last input parameter" +#, c-format msgid "VARIADIC parameter must be the last signature parameter" msgstr "le paramètre VARIADIC doit être le dernier paramètre en entrée" @@ -7531,16 +7468,14 @@ msgid "inline SQL function body only valid for language SQL" msgstr "" #: commands/functioncmds.c:914 -#, fuzzy, c-format -#| msgid "event trigger functions cannot have declared arguments" +#, c-format msgid "SQL function with unquoted function body cannot have polymorphic arguments" -msgstr "les fonctions triggers sur événement ne peuvent pas avoir des arguments déclarés" +msgstr "la fonction SQL avec un corps de fonction sans guillemets ne peuvent pas avoir des arguments polymorphiques" #: commands/functioncmds.c:940 commands/functioncmds.c:959 -#, fuzzy, c-format -#| msgid "%s is not allowed in a SQL function" +#, c-format msgid "%s is not yet supported in unquoted SQL function body" -msgstr "%s n'est pas autorisé dans une fonction SQL" +msgstr "%s n'est pas encore accepté dans une corps de fonction SQL sans guillemets" #: commands/functioncmds.c:987 #, c-format @@ -7786,12 +7721,12 @@ msgstr "ne peut pas créer de contraintes d'exclusion sur la table partitionnée msgid "cannot create indexes on temporary tables of other sessions" msgstr "ne peut pas créer les index sur les tables temporaires des autres sessions" -#: commands/indexcmds.c:745 commands/tablecmds.c:747 commands/tablespace.c:1185 +#: commands/indexcmds.c:745 commands/tablecmds.c:748 commands/tablespace.c:1185 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "ne peut pas spécifier un tablespace par défaut pour les relations partitionnées" -#: commands/indexcmds.c:777 commands/tablecmds.c:782 commands/tablecmds.c:3306 +#: commands/indexcmds.c:777 commands/tablecmds.c:783 commands/tablecmds.c:3307 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "seules les relations partagées peuvent être placées dans le tablespace pg_global" @@ -7866,12 +7801,12 @@ msgstr "La table « %s » contient des partitionso qui ne sont pas des tables di msgid "functions in index predicate must be marked IMMUTABLE" msgstr "les fonctions dans un prédicat d'index doivent être marquées comme IMMUTABLE" -#: commands/indexcmds.c:1749 parser/parse_utilcmd.c:2523 parser/parse_utilcmd.c:2658 +#: commands/indexcmds.c:1749 parser/parse_utilcmd.c:2525 parser/parse_utilcmd.c:2660 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "la colonne « %s » nommée dans la clé n'existe pas" -#: commands/indexcmds.c:1773 parser/parse_utilcmd.c:1822 +#: commands/indexcmds.c:1773 parser/parse_utilcmd.c:1824 #, c-format msgid "expressions are not supported in included columns" msgstr "les expressions ne sont pas supportées dans les colonnes incluses" @@ -7908,7 +7843,7 @@ msgstr "une colonne incluse ne supporte pas d'options NULLS FIRST/LAST" msgid "could not determine which collation to use for index expression" msgstr "n'a pas pu déterminer le collationnement à utiliser pour l'expression d'index" -#: commands/indexcmds.c:1876 commands/tablecmds.c:16671 commands/typecmds.c:810 parser/parse_expr.c:2680 parser/parse_type.c:566 parser/parse_utilcmd.c:3811 utils/adt/misc.c:599 +#: commands/indexcmds.c:1876 commands/tablecmds.c:16834 commands/typecmds.c:810 parser/parse_expr.c:2680 parser/parse_type.c:566 parser/parse_utilcmd.c:3813 utils/adt/misc.c:599 #, c-format msgid "collations are not supported by type %s" msgstr "les collationnements ne sont pas supportés par le type %s" @@ -7945,7 +7880,7 @@ msgstr "la méthode d'accès « %s » ne supporte pas les options ASC/DESC" msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "la méthode d'accès « %s » ne supporte pas les options NULLS FIRST/LAST" -#: commands/indexcmds.c:2031 commands/tablecmds.c:16696 commands/tablecmds.c:16702 commands/typecmds.c:2318 +#: commands/indexcmds.c:2031 commands/tablecmds.c:16859 commands/tablecmds.c:16865 commands/typecmds.c:2318 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "" @@ -8017,10 +7952,9 @@ msgid "while reindexing partitioned table \"%s.%s\"" msgstr "lors de la réindexation de la table partitionnée « %s.%s »" #: commands/indexcmds.c:2974 -#, fuzzy, c-format -#| msgid "Unlogged partitioned index \"%s.%s\"" +#, c-format msgid "while reindexing partitioned index \"%s.%s\"" -msgstr "Index partitionné non journalisé « %s.%s »" +msgstr "lors de la réindexation de l'index partitionné « %s.%s »" #: commands/indexcmds.c:3167 commands/indexcmds.c:4003 #, c-format @@ -8052,7 +7986,7 @@ msgstr "ne peut pas déplacer la relation non partagée dans le tablespace « %s msgid "index \"%s.%s\" was reindexed" msgstr "l'index « %s.%s » a été réindexé" -#: commands/lockcmds.c:92 commands/tablecmds.c:6037 commands/trigger.c:289 rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:938 +#: commands/lockcmds.c:92 commands/tablecmds.c:6024 commands/trigger.c:289 rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:938 #, c-format msgid "\"%s\" is not a table or view" msgstr "« %s » n'est ni une table ni une vue" @@ -8369,7 +8303,7 @@ msgstr "" msgid "operator attribute \"%s\" cannot be changed" msgstr "l'attribut « %s » de l'opérateur ne peut pas être changé" -#: commands/policy.c:88 commands/policy.c:381 commands/policy.c:471 commands/statscmds.c:150 commands/tablecmds.c:1568 commands/tablecmds.c:2157 commands/tablecmds.c:3416 commands/tablecmds.c:6016 commands/tablecmds.c:8885 commands/tablecmds.c:16261 commands/tablecmds.c:16296 commands/trigger.c:295 commands/trigger.c:1271 commands/trigger.c:1380 rewrite/rewriteDefine.c:277 rewrite/rewriteDefine.c:943 rewrite/rewriteRemove.c:80 +#: commands/policy.c:88 commands/policy.c:381 commands/policy.c:471 commands/statscmds.c:150 commands/tablecmds.c:1569 commands/tablecmds.c:2158 commands/tablecmds.c:3417 commands/tablecmds.c:6003 commands/tablecmds.c:8872 commands/tablecmds.c:16424 commands/tablecmds.c:16459 commands/trigger.c:295 commands/trigger.c:1271 commands/trigger.c:1380 rewrite/rewriteDefine.c:277 rewrite/rewriteDefine.c:943 rewrite/rewriteRemove.c:80 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "droit refusé : « %s » est un catalogue système" @@ -8693,7 +8627,7 @@ msgstr "la séquence doit être dans le même schéma que la table avec laquelle msgid "cannot change ownership of identity sequence" msgstr "ne peut pas modifier le propriétaire de la séquence d'identité" -#: commands/sequence.c:1717 commands/tablecmds.c:13113 commands/tablecmds.c:15686 +#: commands/sequence.c:1717 commands/tablecmds.c:13216 commands/tablecmds.c:15849 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "La séquence « %s » est liée à la table « %s »." @@ -8739,10 +8673,9 @@ msgid "column \"%s\" cannot be used in statistics because its type %s has no def msgstr "la colonne « %s » ne peut pas être utilisé dans des statistiques parce que son type %s n'a pas de classe d'opérateur btree par défaut" #: commands/statscmds.c:293 -#, fuzzy, c-format -#| msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" +#, c-format msgid "expression cannot be used in multivariate statistics because its type %s has no default btree operator class" -msgstr "la colonne « %s » ne peut pas être utilisé dans des statistiques parce que son type %s n'a pas de classe d'opérateur btree par défaut" +msgstr "l'expression ne peut pas être utilisé dans des statistiques multivariates parce que son type %s n'a pas de classe d'opérateur btree par défaut" #: commands/statscmds.c:314 #, c-format @@ -8769,12 +8702,12 @@ msgstr "nom de colonne dupliqué dans la définition des statistiques" msgid "duplicate expression in statistics definition" msgstr "expression dupliquée dans la définition des statistiques" -#: commands/statscmds.c:606 commands/tablecmds.c:7857 +#: commands/statscmds.c:606 commands/tablecmds.c:7844 #, c-format msgid "statistics target %d is too low" msgstr "la cible statistique %d est trop basse" -#: commands/statscmds.c:614 commands/tablecmds.c:7865 +#: commands/statscmds.c:614 commands/tablecmds.c:7852 #, c-format msgid "lowering statistics target to %d" msgstr "abaissement de la cible statistique à %d" @@ -8806,7 +8739,7 @@ msgstr "la souscription avec %s doit aussi configurer %s" msgid "must be superuser to create subscriptions" msgstr "doit être super-utilisateur pour créer des souscriptions" -#: commands/subscriptioncmds.c:471 commands/subscriptioncmds.c:569 replication/logical/tablesync.c:963 replication/logical/worker.c:3097 +#: commands/subscriptioncmds.c:471 commands/subscriptioncmds.c:568 replication/logical/tablesync.c:963 replication/logical/worker.c:3097 #, c-format msgid "could not connect to the publisher: %s" msgstr "n'a pas pu se connecter au publieur : %s" @@ -8878,10 +8811,9 @@ msgid "could not receive list of replicated tables from the publisher: %s" msgstr "n'a pas pu recevoir la liste des tables répliquées à partir du publieur : %s" #: commands/subscriptioncmds.c:1572 -#, fuzzy, c-format -#| msgid "could not connect to publisher when attempting to drop the replication slot \"%s\"" +#, c-format msgid "could not connect to publisher when attempting to drop replication slot \"%s\": %s" -msgstr "n'a pas pu se connecter au publieur pour supprimer le slot de réplication « %s »" +msgstr "n'a pas pu se connecter au publieur lors de la tentative de suppression du slot de réplication « %s » : %s" #. translator: %s is an SQL ALTER command #: commands/subscriptioncmds.c:1575 @@ -8909,380 +8841,380 @@ msgstr "la publication « %s » n'est pas dans la souscription « %s »" msgid "subscription must contain at least one publication" msgstr "la souscription doit contenir au moins une publication" -#: commands/tablecmds.c:242 commands/tablecmds.c:284 +#: commands/tablecmds.c:241 commands/tablecmds.c:283 #, c-format msgid "table \"%s\" does not exist" msgstr "la table « %s » n'existe pas" -#: commands/tablecmds.c:243 commands/tablecmds.c:285 +#: commands/tablecmds.c:242 commands/tablecmds.c:284 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "la table « %s » n'existe pas, poursuite du traitement" -#: commands/tablecmds.c:245 commands/tablecmds.c:287 +#: commands/tablecmds.c:244 commands/tablecmds.c:286 msgid "Use DROP TABLE to remove a table." msgstr "Utilisez DROP TABLE pour supprimer une table." -#: commands/tablecmds.c:248 +#: commands/tablecmds.c:247 #, c-format msgid "sequence \"%s\" does not exist" msgstr "la séquence « %s » n'existe pas" -#: commands/tablecmds.c:249 +#: commands/tablecmds.c:248 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "la séquence « %s » n'existe pas, poursuite du traitement" -#: commands/tablecmds.c:251 +#: commands/tablecmds.c:250 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "Utilisez DROP SEQUENCE pour supprimer une séquence." -#: commands/tablecmds.c:254 +#: commands/tablecmds.c:253 #, c-format msgid "view \"%s\" does not exist" msgstr "la vue « %s » n'existe pas" -#: commands/tablecmds.c:255 +#: commands/tablecmds.c:254 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "la vue « %s » n'existe pas, poursuite du traitement" -#: commands/tablecmds.c:257 +#: commands/tablecmds.c:256 msgid "Use DROP VIEW to remove a view." msgstr "Utilisez DROP VIEW pour supprimer une vue." -#: commands/tablecmds.c:260 +#: commands/tablecmds.c:259 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "la vue matérialisée « %s » n'existe pas" -#: commands/tablecmds.c:261 +#: commands/tablecmds.c:260 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "la vue matérialisée « %s » n'existe pas, poursuite du traitement" -#: commands/tablecmds.c:263 +#: commands/tablecmds.c:262 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Utilisez DROP MATERIALIZED VIEW pour supprimer une vue matérialisée." -#: commands/tablecmds.c:266 commands/tablecmds.c:290 commands/tablecmds.c:18107 parser/parse_utilcmd.c:2255 +#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18270 parser/parse_utilcmd.c:2257 #, c-format msgid "index \"%s\" does not exist" msgstr "l'index « %s » n'existe pas" -#: commands/tablecmds.c:267 commands/tablecmds.c:291 +#: commands/tablecmds.c:266 commands/tablecmds.c:290 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "l'index « %s » n'existe pas, poursuite du traitement" -#: commands/tablecmds.c:269 commands/tablecmds.c:293 +#: commands/tablecmds.c:268 commands/tablecmds.c:292 msgid "Use DROP INDEX to remove an index." msgstr "Utilisez DROP INDEX pour supprimer un index." -#: commands/tablecmds.c:274 +#: commands/tablecmds.c:273 #, c-format msgid "\"%s\" is not a type" msgstr "« %s » n'est pas un type" -#: commands/tablecmds.c:275 +#: commands/tablecmds.c:274 msgid "Use DROP TYPE to remove a type." msgstr "Utilisez DROP TYPE pour supprimer un type." -#: commands/tablecmds.c:278 commands/tablecmds.c:12952 commands/tablecmds.c:15385 +#: commands/tablecmds.c:277 commands/tablecmds.c:13055 commands/tablecmds.c:15548 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "la table distante « %s » n'existe pas" -#: commands/tablecmds.c:279 +#: commands/tablecmds.c:278 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "la table distante « %s » n'existe pas, poursuite du traitement" -#: commands/tablecmds.c:281 +#: commands/tablecmds.c:280 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Utilisez DROP FOREIGN TABLE pour supprimer une table distante." -#: commands/tablecmds.c:663 +#: commands/tablecmds.c:664 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT peut seulement être utilisé sur des tables temporaires" -#: commands/tablecmds.c:694 +#: commands/tablecmds.c:695 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "" "ne peut pas créer une table temporaire à l'intérieur d'une fonction\n" "restreinte pour sécurité" -#: commands/tablecmds.c:730 commands/tablecmds.c:14236 +#: commands/tablecmds.c:731 commands/tablecmds.c:14339 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "la relation « %s » serait héritée plus d'une fois" -#: commands/tablecmds.c:923 +#: commands/tablecmds.c:924 #, c-format msgid "specifying a table access method is not supported on a partitioned table" msgstr "spécifier une méthode d'accès à la table n'est pas supporté sur une partitionnée" -#: commands/tablecmds.c:1019 +#: commands/tablecmds.c:1020 #, c-format msgid "\"%s\" is not partitioned" msgstr "« %s » n'est pas partitionné" -#: commands/tablecmds.c:1114 +#: commands/tablecmds.c:1115 #, c-format msgid "cannot partition using more than %d columns" msgstr "ne peut pas partitionner en utilisant plus de %d colonnes" -#: commands/tablecmds.c:1170 +#: commands/tablecmds.c:1171 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "ne peut pas créer une partition distante sur la table partitionnée « %s »" -#: commands/tablecmds.c:1172 +#: commands/tablecmds.c:1173 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "La table « %s » contient des index qui sont uniques." -#: commands/tablecmds.c:1335 +#: commands/tablecmds.c:1336 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY ne permet pas de supprimer plusieurs objets" -#: commands/tablecmds.c:1339 +#: commands/tablecmds.c:1340 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY ne permet pas la CASCADE" -#: commands/tablecmds.c:1440 +#: commands/tablecmds.c:1441 #, c-format msgid "cannot drop partitioned index \"%s\" concurrently" msgstr "ne peut pas supprimer l'index partitionné « %s » de manière concurrente" -#: commands/tablecmds.c:1712 +#: commands/tablecmds.c:1713 #, c-format msgid "cannot truncate only a partitioned table" msgstr "ne peut pas seulement tronquer une table partitionnée" -#: commands/tablecmds.c:1713 +#: commands/tablecmds.c:1714 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "Ne spécifiez pas le mot clé ONLY ou utilisez TRUNCATE ONLY directement sur les partitions." -#: commands/tablecmds.c:1786 +#: commands/tablecmds.c:1787 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "TRUNCATE cascade sur la table « %s »" -#: commands/tablecmds.c:2145 +#: commands/tablecmds.c:2146 #, c-format msgid "cannot truncate foreign table \"%s\"" msgstr "ne peut pas tronquer la table distante « %s »" -#: commands/tablecmds.c:2194 +#: commands/tablecmds.c:2195 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "ne peut pas tronquer les tables temporaires des autres sessions" -#: commands/tablecmds.c:2456 commands/tablecmds.c:14133 +#: commands/tablecmds.c:2457 commands/tablecmds.c:14236 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "ne peut pas hériter de la table partitionnée « %s »" -#: commands/tablecmds.c:2461 +#: commands/tablecmds.c:2462 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "ne peut pas hériter de la partition « %s »" -#: commands/tablecmds.c:2469 parser/parse_utilcmd.c:2485 parser/parse_utilcmd.c:2627 +#: commands/tablecmds.c:2470 parser/parse_utilcmd.c:2487 parser/parse_utilcmd.c:2629 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "la relation héritée « %s » n'est ni une table ni une table distante" -#: commands/tablecmds.c:2481 +#: commands/tablecmds.c:2482 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "ne peut pas créer une relation temporaire comme partition de la relation permanente « %s »" -#: commands/tablecmds.c:2490 commands/tablecmds.c:14112 +#: commands/tablecmds.c:2491 commands/tablecmds.c:14215 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "ine peut pas hériter à partir d'une relation temporaire « %s »" -#: commands/tablecmds.c:2500 commands/tablecmds.c:14120 +#: commands/tablecmds.c:2501 commands/tablecmds.c:14223 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "ne peut pas hériter de la table temporaire d'une autre session" -#: commands/tablecmds.c:2554 +#: commands/tablecmds.c:2555 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "assemblage de plusieurs définitions d'héritage pour la colonne « %s »" -#: commands/tablecmds.c:2562 +#: commands/tablecmds.c:2563 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "la colonne héritée « %s » a un conflit de type" -#: commands/tablecmds.c:2564 commands/tablecmds.c:2587 commands/tablecmds.c:2604 commands/tablecmds.c:2860 commands/tablecmds.c:2890 commands/tablecmds.c:2904 parser/parse_coerce.c:2090 parser/parse_coerce.c:2110 parser/parse_coerce.c:2130 parser/parse_coerce.c:2150 parser/parse_coerce.c:2205 parser/parse_coerce.c:2238 parser/parse_coerce.c:2316 parser/parse_coerce.c:2348 parser/parse_coerce.c:2382 parser/parse_coerce.c:2402 parser/parse_param.c:227 +#: commands/tablecmds.c:2565 commands/tablecmds.c:2588 commands/tablecmds.c:2605 commands/tablecmds.c:2861 commands/tablecmds.c:2891 commands/tablecmds.c:2905 parser/parse_coerce.c:2090 parser/parse_coerce.c:2110 parser/parse_coerce.c:2130 parser/parse_coerce.c:2150 parser/parse_coerce.c:2205 parser/parse_coerce.c:2238 parser/parse_coerce.c:2316 parser/parse_coerce.c:2348 parser/parse_coerce.c:2382 parser/parse_coerce.c:2402 parser/parse_param.c:227 #, c-format msgid "%s versus %s" msgstr "%s versus %s" -#: commands/tablecmds.c:2573 +#: commands/tablecmds.c:2574 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "la colonne héritée « %s » a un conflit sur le collationnement" -#: commands/tablecmds.c:2575 commands/tablecmds.c:2872 commands/tablecmds.c:6516 +#: commands/tablecmds.c:2576 commands/tablecmds.c:2873 commands/tablecmds.c:6503 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "« %s » versus « %s »" -#: commands/tablecmds.c:2585 +#: commands/tablecmds.c:2586 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "la colonne héritée « %s » a un conflit de paramètre de stockage" -#: commands/tablecmds.c:2602 commands/tablecmds.c:2902 +#: commands/tablecmds.c:2603 commands/tablecmds.c:2903 #, c-format msgid "column \"%s\" has a compression method conflict" msgstr "la colonne « %s » a un conflit sur la méthode de compression" -#: commands/tablecmds.c:2617 +#: commands/tablecmds.c:2618 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "la colonne héritée « %s » a un conflit de génération" -#: commands/tablecmds.c:2711 commands/tablecmds.c:2766 commands/tablecmds.c:11681 parser/parse_utilcmd.c:1299 parser/parse_utilcmd.c:1342 parser/parse_utilcmd.c:1750 parser/parse_utilcmd.c:1858 +#: commands/tablecmds.c:2712 commands/tablecmds.c:2767 commands/tablecmds.c:11784 parser/parse_utilcmd.c:1301 parser/parse_utilcmd.c:1344 parser/parse_utilcmd.c:1752 parser/parse_utilcmd.c:1860 #, c-format msgid "cannot convert whole-row table reference" msgstr "ne peut pas convertir une référence de ligne complète de table" -#: commands/tablecmds.c:2712 parser/parse_utilcmd.c:1300 +#: commands/tablecmds.c:2713 parser/parse_utilcmd.c:1302 #, c-format msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." msgstr "L'expression de génération de la colonne « %s » contient une référence de ligne complète vers la table « %s »." -#: commands/tablecmds.c:2767 parser/parse_utilcmd.c:1343 +#: commands/tablecmds.c:2768 parser/parse_utilcmd.c:1345 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "La constrainte « %s » contient une référence de ligne complète vers la table « %s »." -#: commands/tablecmds.c:2846 +#: commands/tablecmds.c:2847 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "assemblage de la colonne « %s » avec une définition héritée" -#: commands/tablecmds.c:2850 +#: commands/tablecmds.c:2851 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "déplacement et assemblage de la colonne « %s » avec une définition héritée" -#: commands/tablecmds.c:2851 +#: commands/tablecmds.c:2852 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "Colonne utilisateur déplacée à la position de la colonne héritée." -#: commands/tablecmds.c:2858 +#: commands/tablecmds.c:2859 #, c-format msgid "column \"%s\" has a type conflict" msgstr "la colonne « %s » a un conflit de type" -#: commands/tablecmds.c:2870 +#: commands/tablecmds.c:2871 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "la colonne « %s » a un conflit sur le collationnement" -#: commands/tablecmds.c:2888 +#: commands/tablecmds.c:2889 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "la colonne « %s » a un conflit de paramètre de stockage" -#: commands/tablecmds.c:2929 +#: commands/tablecmds.c:2930 #, c-format msgid "child column \"%s\" specifies generation expression" msgstr "la colonne enfant « %s » précise une expression de génération" -#: commands/tablecmds.c:2931 +#: commands/tablecmds.c:2932 #, c-format msgid "Omit the generation expression in the definition of the child table column to inherit the generation expression from the parent table." msgstr "Omettre l'expression de génération dans la définition de la colonne de la table fille pour hériter de l'expression de génération de la table parent." -#: commands/tablecmds.c:2935 +#: commands/tablecmds.c:2936 #, c-format msgid "column \"%s\" inherits from generated column but specifies default" msgstr "la colonne « %s » hérite d'une colonne générée mais indique une valeur par défaut" -#: commands/tablecmds.c:2940 +#: commands/tablecmds.c:2941 #, c-format msgid "column \"%s\" inherits from generated column but specifies identity" msgstr "la colonne « %s » hérite d'une colonne générée mais précise une identité" -#: commands/tablecmds.c:3049 +#: commands/tablecmds.c:3050 #, c-format msgid "column \"%s\" inherits conflicting generation expressions" msgstr "la colonne « %s » hérite d'expressions de génération en conflit" -#: commands/tablecmds.c:3054 +#: commands/tablecmds.c:3055 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "la colonne « %s » hérite de valeurs par défaut conflictuelles" -#: commands/tablecmds.c:3056 +#: commands/tablecmds.c:3057 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Pour résoudre le conflit, spécifiez explicitement une valeur par défaut." -#: commands/tablecmds.c:3102 +#: commands/tablecmds.c:3103 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "" "le nom de la contrainte de vérification, « %s », apparaît plusieurs fois\n" "mais avec des expressions différentes" -#: commands/tablecmds.c:3315 +#: commands/tablecmds.c:3316 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "ne peut pas déplacer les tables temporaires d'autres sessions" -#: commands/tablecmds.c:3385 +#: commands/tablecmds.c:3386 #, c-format msgid "cannot rename column of typed table" msgstr "ne peut pas renommer une colonne d'une table typée" -#: commands/tablecmds.c:3404 +#: commands/tablecmds.c:3405 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni un type composite, ni un index, ni une table distante" -#: commands/tablecmds.c:3498 +#: commands/tablecmds.c:3499 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "la colonne héritée « %s » doit aussi être renommée pour les tables filles" -#: commands/tablecmds.c:3530 +#: commands/tablecmds.c:3531 #, c-format msgid "cannot rename system column \"%s\"" msgstr "ne peut pas renommer la colonne système « %s »" -#: commands/tablecmds.c:3545 +#: commands/tablecmds.c:3546 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "ne peut pas renommer la colonne héritée « %s »" -#: commands/tablecmds.c:3697 +#: commands/tablecmds.c:3698 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "la contrainte héritée « %s » doit aussi être renommée pour les tables enfants" -#: commands/tablecmds.c:3704 +#: commands/tablecmds.c:3705 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "ne peut pas renommer la colonne héritée « %s »" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3937 +#: commands/tablecmds.c:3938 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "" @@ -9290,1042 +9222,1066 @@ msgstr "" "des requêtes actives dans cette session" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3946 +#: commands/tablecmds.c:3947 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "ne peut pas exécuter %s « %s » car il reste des événements sur les triggers" -#: commands/tablecmds.c:4414 +#: commands/tablecmds.c:4411 #, c-format msgid "cannot alter partition \"%s\" with an incomplete detach" msgstr "ne peut pas modifier la partition « %s » avec un détachement incomplet" -#: commands/tablecmds.c:4416 +#: commands/tablecmds.c:4413 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." -msgstr "" +msgstr "Utiliser ALTER TABLE ... DETACH PARTITION ... FINALIZE pour terminer l'opération de détachement en attente." -#: commands/tablecmds.c:4614 commands/tablecmds.c:4629 +#: commands/tablecmds.c:4605 commands/tablecmds.c:4620 #, c-format msgid "cannot change persistence setting twice" msgstr "ne peut pas modifier la configuration de la persistence deux fois" -#: commands/tablecmds.c:5376 +#: commands/tablecmds.c:5363 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "ne peut pas ré-écrire la relation système « %s »" -#: commands/tablecmds.c:5382 +#: commands/tablecmds.c:5369 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "ne peut pas réécrire la table « %s » utilisée comme une table catalogue" -#: commands/tablecmds.c:5392 +#: commands/tablecmds.c:5379 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "ne peut pas ré-écrire les tables temporaires des autres sessions" -#: commands/tablecmds.c:5850 +#: commands/tablecmds.c:5837 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "la colonne « %s » de la table « %s » contient des valeurs NULL" -#: commands/tablecmds.c:5867 +#: commands/tablecmds.c:5854 #, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" msgstr "la contrainte de vérification « %s » de la relation « %s » est violée par une ligne" -#: commands/tablecmds.c:5886 partitioning/partbounds.c:3279 +#: commands/tablecmds.c:5873 partitioning/partbounds.c:3279 #, c-format msgid "updated partition constraint for default partition \"%s\" would be violated by some row" msgstr "la contrainte de partition mise à jour pour la partition par défaut « %s » serait transgressée par des lignes" -#: commands/tablecmds.c:5892 +#: commands/tablecmds.c:5879 #, c-format msgid "partition constraint of relation \"%s\" is violated by some row" msgstr "la contrainte de partition de la relation « %s » est violée par une ligne" -#: commands/tablecmds.c:6040 commands/trigger.c:1265 commands/trigger.c:1371 +#: commands/tablecmds.c:6027 commands/trigger.c:1265 commands/trigger.c:1371 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une table distante" -#: commands/tablecmds.c:6043 +#: commands/tablecmds.c:6030 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni une séquence, ni une table distante" -#: commands/tablecmds.c:6049 +#: commands/tablecmds.c:6036 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "« %s » n'est ni une table, ni une vue matérialisée, ni un index" -#: commands/tablecmds.c:6052 +#: commands/tablecmds.c:6039 #, c-format msgid "\"%s\" is not a table, materialized view, or foreign table" msgstr "« %s » n'est ni une table, ni une vue matérialisée, ni une table distante" -#: commands/tablecmds.c:6055 +#: commands/tablecmds.c:6042 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "« %s » n'est ni une table ni une table distante" -#: commands/tablecmds.c:6058 +#: commands/tablecmds.c:6045 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "« %s » n'est ni une table, ni un type composite, ni une table distante" -#: commands/tablecmds.c:6061 +#: commands/tablecmds.c:6048 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "« %s » n'est ni une table, ni une vue matérialisée, ni un index, ni une table distante" -#: commands/tablecmds.c:6071 +#: commands/tablecmds.c:6058 #, c-format msgid "\"%s\" is of the wrong type" msgstr "« %s » est du mauvais type" -#: commands/tablecmds.c:6274 commands/tablecmds.c:6281 +#: commands/tablecmds.c:6261 commands/tablecmds.c:6268 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "ne peux pas modifier le type « %s » car la colonne « %s.%s » l'utilise" -#: commands/tablecmds.c:6288 +#: commands/tablecmds.c:6275 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "" "ne peut pas modifier la table distante « %s » car la colonne « %s.%s » utilise\n" "son type de ligne" -#: commands/tablecmds.c:6295 +#: commands/tablecmds.c:6282 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "" "ne peut pas modifier la table « %s » car la colonne « %s.%s » utilise\n" "son type de ligne" -#: commands/tablecmds.c:6351 +#: commands/tablecmds.c:6338 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "ne peut pas modifier le type « %s » car il s'agit du type d'une table de type" -#: commands/tablecmds.c:6353 +#: commands/tablecmds.c:6340 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Utilisez ALTER ... CASCADE pour modifier aussi les tables de type." -#: commands/tablecmds.c:6399 +#: commands/tablecmds.c:6386 #, c-format msgid "type %s is not a composite type" msgstr "le type %s n'est pas un type composite" -#: commands/tablecmds.c:6426 +#: commands/tablecmds.c:6413 #, c-format msgid "cannot add column to typed table" msgstr "ne peut pas ajouter une colonne à une table typée" -#: commands/tablecmds.c:6479 +#: commands/tablecmds.c:6466 #, c-format msgid "cannot add column to a partition" msgstr "ne peut pas ajouter une colonne à une partition" -#: commands/tablecmds.c:6508 commands/tablecmds.c:14363 +#: commands/tablecmds.c:6495 commands/tablecmds.c:14466 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "la table fille « %s » a un type différent pour la colonne « %s »" -#: commands/tablecmds.c:6514 commands/tablecmds.c:14370 +#: commands/tablecmds.c:6501 commands/tablecmds.c:14473 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "la table fille « %s » a un collationnement différent pour la colonne « %s »" -#: commands/tablecmds.c:6528 +#: commands/tablecmds.c:6515 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "assemblage de la définition de la colonne « %s » pour le fils « %s »" -#: commands/tablecmds.c:6571 +#: commands/tablecmds.c:6558 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "ne peut pas ajouter récursivement la colonne identité à une table qui a des tables filles" -#: commands/tablecmds.c:6823 +#: commands/tablecmds.c:6810 #, c-format msgid "column must be added to child tables too" msgstr "la colonne doit aussi être ajoutée aux tables filles" -#: commands/tablecmds.c:6901 +#: commands/tablecmds.c:6888 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "la colonne « %s » de la relation « %s » existe déjà, poursuite du traitement" -#: commands/tablecmds.c:6908 +#: commands/tablecmds.c:6895 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "la colonne « %s » de la relation « %s » existe déjà" -#: commands/tablecmds.c:6974 commands/tablecmds.c:11319 +#: commands/tablecmds.c:6961 commands/tablecmds.c:11422 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "ne peut pas supprimer une contrainte uniquement d'une table partitionnée quand des partitions existent" -#: commands/tablecmds.c:6975 commands/tablecmds.c:7279 commands/tablecmds.c:8300 commands/tablecmds.c:11320 +#: commands/tablecmds.c:6962 commands/tablecmds.c:7266 commands/tablecmds.c:8287 commands/tablecmds.c:11423 #, c-format msgid "Do not specify the ONLY keyword." msgstr "Ne spécifiez pas le mot clé ONLY." -#: commands/tablecmds.c:7012 commands/tablecmds.c:7205 commands/tablecmds.c:7347 commands/tablecmds.c:7461 commands/tablecmds.c:7555 commands/tablecmds.c:7614 commands/tablecmds.c:7732 commands/tablecmds.c:7898 commands/tablecmds.c:7968 commands/tablecmds.c:8123 commands/tablecmds.c:11474 commands/tablecmds.c:12975 commands/tablecmds.c:15477 +#: commands/tablecmds.c:6999 commands/tablecmds.c:7192 commands/tablecmds.c:7334 commands/tablecmds.c:7448 commands/tablecmds.c:7542 commands/tablecmds.c:7601 commands/tablecmds.c:7719 commands/tablecmds.c:7885 commands/tablecmds.c:7955 commands/tablecmds.c:8110 commands/tablecmds.c:11577 commands/tablecmds.c:13078 commands/tablecmds.c:15640 #, c-format msgid "cannot alter system column \"%s\"" msgstr "n'a pas pu modifier la colonne système « %s »" -#: commands/tablecmds.c:7018 commands/tablecmds.c:7353 +#: commands/tablecmds.c:7005 commands/tablecmds.c:7340 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne d'identité" -#: commands/tablecmds.c:7054 +#: commands/tablecmds.c:7041 #, c-format msgid "column \"%s\" is in a primary key" msgstr "la colonne « %s » est dans une clé primaire" -#: commands/tablecmds.c:7076 +#: commands/tablecmds.c:7063 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "la colonne « %s » est marquée NOT NULL dans la table parent" -#: commands/tablecmds.c:7276 commands/tablecmds.c:8783 +#: commands/tablecmds.c:7263 commands/tablecmds.c:8770 #, c-format msgid "constraint must be added to child tables too" msgstr "la contrainte doit aussi être ajoutée aux tables filles" -#: commands/tablecmds.c:7277 +#: commands/tablecmds.c:7264 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "la colonne « %s » de la relation « %s » n'est pas déjà NOT NULL." -#: commands/tablecmds.c:7355 +#: commands/tablecmds.c:7342 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Utilisez à la place ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY." -#: commands/tablecmds.c:7360 +#: commands/tablecmds.c:7347 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "la colonne « %s » de la relation « %s » est une colonne générée" -#: commands/tablecmds.c:7363 +#: commands/tablecmds.c:7350 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." msgstr "Utilisez à la place ALTER TABLE ... ALTER COLUMN ... DROP EXTENSION." -#: commands/tablecmds.c:7472 +#: commands/tablecmds.c:7459 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "la colonne « %s » de la relation « %s » doit être déclarée NOT NULL avant que la colonne identité puisse être ajoutée" -#: commands/tablecmds.c:7478 +#: commands/tablecmds.c:7465 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "la colonne « %s » de la relation « %s » est déjà une colonne d'identité" -#: commands/tablecmds.c:7484 +#: commands/tablecmds.c:7471 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "la colonne « %s » de la relation « %s » a déjà une valeur par défaut" -#: commands/tablecmds.c:7561 commands/tablecmds.c:7622 +#: commands/tablecmds.c:7548 commands/tablecmds.c:7609 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne d'identité" -#: commands/tablecmds.c:7627 +#: commands/tablecmds.c:7614 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne d'identité, poursuite du traitement" -#: commands/tablecmds.c:7680 +#: commands/tablecmds.c:7667 #, c-format msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" msgstr "ALTER TABLE / DROP EXPRESSION doit aussi être appliqué aux tables filles" -#: commands/tablecmds.c:7702 +#: commands/tablecmds.c:7689 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "ne peut pas supprimer l'expression de génération à partir d'une colonne héritée" -#: commands/tablecmds.c:7740 +#: commands/tablecmds.c:7727 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne générée stockée" -#: commands/tablecmds.c:7745 +#: commands/tablecmds.c:7732 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne générée stockée, ignoré" -#: commands/tablecmds.c:7845 +#: commands/tablecmds.c:7832 #, c-format msgid "cannot refer to non-index column by number" msgstr "impossible de référence une colonne non liée à une table par un nombre" -#: commands/tablecmds.c:7888 +#: commands/tablecmds.c:7875 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "la colonne numéro %d de la relation « %s » n'existe pas" -#: commands/tablecmds.c:7907 +#: commands/tablecmds.c:7894 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "ne peut modifier les statistiques sur la colonne incluse « %s » de l'index « %s »" -#: commands/tablecmds.c:7912 +#: commands/tablecmds.c:7899 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "ne peut modifier les statistiques sur la colonne « %s » de l'index « %s », qui n'est pas une expression" -#: commands/tablecmds.c:7914 +#: commands/tablecmds.c:7901 #, c-format msgid "Alter statistics on table column instead." msgstr "Modifie les statistiques sur la colonne de la table à la place." -#: commands/tablecmds.c:8103 +#: commands/tablecmds.c:8090 #, c-format msgid "invalid storage type \"%s\"" msgstr "type de stockage « %s » invalide" -#: commands/tablecmds.c:8135 +#: commands/tablecmds.c:8122 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "le type de données %s de la colonne peut seulement avoir un stockage PLAIN" -#: commands/tablecmds.c:8179 +#: commands/tablecmds.c:8166 #, c-format msgid "cannot drop column from typed table" msgstr "ne peut pas supprimer une colonne à une table typée" -#: commands/tablecmds.c:8238 +#: commands/tablecmds.c:8225 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "la colonne « %s » de la relation « %s » n'existe pas, ignore" -#: commands/tablecmds.c:8251 +#: commands/tablecmds.c:8238 #, c-format msgid "cannot drop system column \"%s\"" msgstr "ne peut pas supprimer la colonne système « %s »" -#: commands/tablecmds.c:8261 +#: commands/tablecmds.c:8248 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "ne peut pas supprimer la colonne héritée « %s »" -#: commands/tablecmds.c:8274 +#: commands/tablecmds.c:8261 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "ne peut supprimer la colonne « %s » car elle fait partie de la clé de partitionnement de la relation « %s »" -#: commands/tablecmds.c:8299 +#: commands/tablecmds.c:8286 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "ne peut pas supprimer une colonne sur une seule partition quand plusieurs partitions existent" -#: commands/tablecmds.c:8503 +#: commands/tablecmds.c:8490 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX n'est pas supporté sur les tables partitionnées" -#: commands/tablecmds.c:8528 +#: commands/tablecmds.c:8515 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX renommera l'index « %s » en « %s »" -#: commands/tablecmds.c:8863 +#: commands/tablecmds.c:8850 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "ne peut pas utiliser ONLY pour une clé étrangère sur la table partitionnée « %s » référençant la relation « %s »" -#: commands/tablecmds.c:8869 +#: commands/tablecmds.c:8856 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "ne peut pas ajouter de clé étrangère NOT VALID sur la table partitionnée « %s » référençant la relation « %s »" -#: commands/tablecmds.c:8872 +#: commands/tablecmds.c:8859 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Cette fonctionnalité n'est pas encore implémentée sur les tables partitionnées." -#: commands/tablecmds.c:8879 commands/tablecmds.c:9284 +#: commands/tablecmds.c:8866 commands/tablecmds.c:9271 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "la relation référencée « %s » n'est pas une table" -#: commands/tablecmds.c:8902 +#: commands/tablecmds.c:8889 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "les contraintes sur les tables permanentes peuvent seulement référencer des tables permanentes" -#: commands/tablecmds.c:8909 +#: commands/tablecmds.c:8896 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "les contraintes sur les tables non tracées peuvent seulement référencer des tables permanentes ou non tracées" -#: commands/tablecmds.c:8915 +#: commands/tablecmds.c:8902 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "" "les constraintes sur des tables temporaires ne peuvent référencer que des\n" "tables temporaires" -#: commands/tablecmds.c:8919 +#: commands/tablecmds.c:8906 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "" "les contraintes sur des tables temporaires doivent référencer les tables\n" "temporaires de cette session" -#: commands/tablecmds.c:8985 commands/tablecmds.c:8991 +#: commands/tablecmds.c:8972 commands/tablecmds.c:8978 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "action %s invalide pour une clé étrangère contenant une colonne générée" -#: commands/tablecmds.c:9007 +#: commands/tablecmds.c:8994 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "nombre de colonnes de référence et référencées pour la clé étrangère en désaccord" -#: commands/tablecmds.c:9114 +#: commands/tablecmds.c:9101 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "la contrainte de clé étrangère « %s » ne peut pas être implémentée" -#: commands/tablecmds.c:9116 +#: commands/tablecmds.c:9103 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Les colonnes clés « %s » et « %s » sont de types incompatibles : %s et %s." -#: commands/tablecmds.c:9479 commands/tablecmds.c:9872 parser/parse_utilcmd.c:794 parser/parse_utilcmd.c:923 +#: commands/tablecmds.c:9466 commands/tablecmds.c:9859 parser/parse_utilcmd.c:796 parser/parse_utilcmd.c:925 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "les clés étrangères ne sont pas supportées par les tables distantes" -#: commands/tablecmds.c:10238 commands/tablecmds.c:10401 commands/tablecmds.c:11276 commands/tablecmds.c:11351 +#: commands/tablecmds.c:10226 commands/tablecmds.c:10504 commands/tablecmds.c:11379 commands/tablecmds.c:11454 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "la contrainte « %s » de la relation « %s » n'existe pas" -#: commands/tablecmds.c:10245 +#: commands/tablecmds.c:10233 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "la contrainte « %s » de la relation « %s » n'est pas une clé étrangère" -#: commands/tablecmds.c:10409 +#: commands/tablecmds.c:10271 +#, c-format +msgid "cannot alter constraint \"%s\" on relation \"%s\"" +msgstr "ne peut pas modifier la contrainte « %s » de la relation « %s »" + +#: commands/tablecmds.c:10274 +#, c-format +msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." +msgstr "La contrainte « %s » est dérivée de la contrainte « %s » de la relation « %s »" + +#: commands/tablecmds.c:10276 +#, c-format +msgid "You may alter the constraint it derives from, instead." +msgstr "Vous pouvez modifier la contrainte dont elle dérive à la place." + +#: commands/tablecmds.c:10512 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "la contrainte « %s » de la relation « %s » n'est pas une clé étrangère ou une contrainte de vérification" -#: commands/tablecmds.c:10487 +#: commands/tablecmds.c:10590 #, c-format msgid "constraint must be validated on child tables too" msgstr "la contrainte doit aussi être validées sur les tables enfants" -#: commands/tablecmds.c:10571 +#: commands/tablecmds.c:10674 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "la colonne « %s » référencée dans la contrainte de clé étrangère n'existe pas" -#: commands/tablecmds.c:10576 +#: commands/tablecmds.c:10679 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "ne peut pas avoir plus de %d clés dans une clé étrangère" -#: commands/tablecmds.c:10641 +#: commands/tablecmds.c:10744 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "ne peut pas utiliser une clé primaire déferrable pour la table « %s » référencée" -#: commands/tablecmds.c:10658 +#: commands/tablecmds.c:10761 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "il n'y a pas de clé primaire pour la table « %s » référencée" -#: commands/tablecmds.c:10723 +#: commands/tablecmds.c:10826 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "la liste de colonnes référencées dans la clé étrangère ne doit pas contenir de duplicats" -#: commands/tablecmds.c:10817 +#: commands/tablecmds.c:10920 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "" "ne peut pas utiliser une contrainte unique déferrable pour la table\n" "référencée « %s »" -#: commands/tablecmds.c:10822 +#: commands/tablecmds.c:10925 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "il n'existe aucune contrainte unique correspondant aux clés données pour la table « %s » référencée" -#: commands/tablecmds.c:11232 +#: commands/tablecmds.c:11335 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "ne peut pas supprimer la contrainte héritée « %s » de la relation « %s »" -#: commands/tablecmds.c:11282 +#: commands/tablecmds.c:11385 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "la contrainte « %s » de la relation « %s » n'existe pas, ignore" -#: commands/tablecmds.c:11458 +#: commands/tablecmds.c:11561 #, c-format msgid "cannot alter column type of typed table" msgstr "ne peut pas modifier le type d'une colonne appartenant à une table typée" -#: commands/tablecmds.c:11485 +#: commands/tablecmds.c:11588 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "ne peut pas modifier la colonne héritée « %s »" -#: commands/tablecmds.c:11494 +#: commands/tablecmds.c:11597 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "ne peut pas modifier la colonne « %s » car elle fait partie de la clé de partitionnement de la relation « %s »" -#: commands/tablecmds.c:11544 +#: commands/tablecmds.c:11647 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "le résultat de la clause USING pour la colonne « %s » ne peut pas être converti automatiquement vers le type %s" -#: commands/tablecmds.c:11547 +#: commands/tablecmds.c:11650 #, c-format msgid "You might need to add an explicit cast." msgstr "Vous pouvez avoir besoin d'ajouter une conversion explicite." -#: commands/tablecmds.c:11551 +#: commands/tablecmds.c:11654 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "la colonne « %s » ne peut pas être convertie vers le type %s" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:11554 +#: commands/tablecmds.c:11657 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Vous pouvez avoir besoin de spécifier \"USING %s::%s\"." -#: commands/tablecmds.c:11654 +#: commands/tablecmds.c:11757 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "ne peut pas modifier la colonne héritée « %s » de la relation « %s »" -#: commands/tablecmds.c:11682 +#: commands/tablecmds.c:11785 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "l'expression USING contient une référence de table de ligne complète." -#: commands/tablecmds.c:11693 +#: commands/tablecmds.c:11796 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "le type de colonne héritée « %s » doit aussi être renommée pour les tables filles" -#: commands/tablecmds.c:11818 +#: commands/tablecmds.c:11921 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "ne peut pas modifier la colonne « %s » deux fois" -#: commands/tablecmds.c:11856 +#: commands/tablecmds.c:11959 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "l'expression de génération de la colonne « %s » ne peut pas être convertie vers le type %s automatiquement" -#: commands/tablecmds.c:11861 +#: commands/tablecmds.c:11964 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "" "la valeur par défaut de la colonne « %s » ne peut pas être convertie vers le\n" "type %s automatiquement" -#: commands/tablecmds.c:11939 +#: commands/tablecmds.c:12042 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "ne peut pas modifier le type d'une colonne utilisée dans colonne générée" -#: commands/tablecmds.c:11940 +#: commands/tablecmds.c:12043 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "La colonne « %s » est utilisée par la colonne générée « %s »" -#: commands/tablecmds.c:11961 +#: commands/tablecmds.c:12064 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "ne peut pas modifier le type d'une colonne utilisée dans une vue ou une règle" -#: commands/tablecmds.c:11962 commands/tablecmds.c:11981 commands/tablecmds.c:11999 +#: commands/tablecmds.c:12065 commands/tablecmds.c:12084 commands/tablecmds.c:12102 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s dépend de la colonne « %s »" -#: commands/tablecmds.c:11980 +#: commands/tablecmds.c:12083 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "ne peut pas modifier le type d'une colonne utilisée dans la définition d'un trigger" -#: commands/tablecmds.c:11998 +#: commands/tablecmds.c:12101 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "ne peut pas modifier le type d'une colonne utilisée dans la définition d'une politique" -#: commands/tablecmds.c:13083 commands/tablecmds.c:13095 +#: commands/tablecmds.c:13186 commands/tablecmds.c:13198 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "ne peut pas modifier le propriétaire de l'index « %s »" -#: commands/tablecmds.c:13085 commands/tablecmds.c:13097 +#: commands/tablecmds.c:13188 commands/tablecmds.c:13200 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Modifier à la place le propriétaire de la table concernée par l'index." -#: commands/tablecmds.c:13111 +#: commands/tablecmds.c:13214 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "ne peut pas modifier le propriétaire de la séquence « %s »" -#: commands/tablecmds.c:13125 commands/tablecmds.c:16372 +#: commands/tablecmds.c:13228 commands/tablecmds.c:16535 #, c-format msgid "Use ALTER TYPE instead." msgstr "Utilisez ALTER TYPE à la place." -#: commands/tablecmds.c:13134 +#: commands/tablecmds.c:13237 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une séquence, ni une table distante" -#: commands/tablecmds.c:13473 +#: commands/tablecmds.c:13576 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "ne peut pas avoir de nombreuses sous-commandes SET TABLESPACE" -#: commands/tablecmds.c:13550 +#: commands/tablecmds.c:13653 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni un index, ni une table TOAST" -#: commands/tablecmds.c:13583 commands/view.c:494 +#: commands/tablecmds.c:13686 commands/view.c:494 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION est uniquement accepté pour les vues dont la mise à jour est automatique" -#: commands/tablecmds.c:13835 +#: commands/tablecmds.c:13938 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "seuls les tables, index et vues matérialisées existent dans les tablespaces" -#: commands/tablecmds.c:13847 +#: commands/tablecmds.c:13950 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "ne peut pas déplacer les relations dans ou à partir du tablespace pg_global" -#: commands/tablecmds.c:13939 +#: commands/tablecmds.c:14042 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "annulation car le verrou sur la relation « %s.%s » n'est pas disponible" -#: commands/tablecmds.c:13955 +#: commands/tablecmds.c:14058 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "aucune relation correspondante trouvée dans le tablespace « %s »" -#: commands/tablecmds.c:14071 +#: commands/tablecmds.c:14174 #, c-format msgid "cannot change inheritance of typed table" msgstr "ne peut pas modifier l'héritage d'une table typée" -#: commands/tablecmds.c:14076 commands/tablecmds.c:14572 +#: commands/tablecmds.c:14179 commands/tablecmds.c:14735 #, c-format msgid "cannot change inheritance of a partition" msgstr "ne peut pas modifier l'héritage d'une partition" -#: commands/tablecmds.c:14081 +#: commands/tablecmds.c:14184 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "ne peut pas modifier l'héritage d'une table partitionnée" -#: commands/tablecmds.c:14127 +#: commands/tablecmds.c:14230 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "ne peut pas hériter à partir d'une relation temporaire d'une autre session" -#: commands/tablecmds.c:14140 +#: commands/tablecmds.c:14243 #, c-format msgid "cannot inherit from a partition" msgstr "ne peut pas hériter d'une partition" -#: commands/tablecmds.c:14162 commands/tablecmds.c:17016 +#: commands/tablecmds.c:14265 commands/tablecmds.c:17179 #, c-format msgid "circular inheritance not allowed" msgstr "héritage circulaire interdit" -#: commands/tablecmds.c:14163 commands/tablecmds.c:17017 +#: commands/tablecmds.c:14266 commands/tablecmds.c:17180 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "« %s » est déjà un enfant de « %s »." -#: commands/tablecmds.c:14176 +#: commands/tablecmds.c:14279 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "le trigger « %s » empêche la table « %s » de devenir une fille dans l'héritage" -#: commands/tablecmds.c:14178 +#: commands/tablecmds.c:14281 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "les triggers ROW avec des tables de transition ne sont pas supportés dans les hiérarchies d'héritage." -#: commands/tablecmds.c:14381 +#: commands/tablecmds.c:14484 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "la colonne « %s » de la table enfant doit être marquée comme NOT NULL" -#: commands/tablecmds.c:14408 +#: commands/tablecmds.c:14493 +#, c-format +msgid "column \"%s\" in child table must be a generated column" +msgstr "la colonne « %s » de la table enfant doit être une colonne générée" + +#: commands/tablecmds.c:14543 +#, c-format +msgid "column \"%s\" in child table has a conflicting generation expression" +msgstr "la colonne « %s » de la table enfant a une expression de génération en conflit" + +#: commands/tablecmds.c:14571 #, c-format msgid "child table is missing column \"%s\"" msgstr "la table enfant n'a pas de colonne « %s »" -#: commands/tablecmds.c:14496 +#: commands/tablecmds.c:14659 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "la table fille « %s » a un type différent pour la contrainte de vérification « %s »" -#: commands/tablecmds.c:14504 +#: commands/tablecmds.c:14667 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte non héritée sur la table fille « %s »" -#: commands/tablecmds.c:14515 +#: commands/tablecmds.c:14678 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte NOT VALID sur la table fille « %s »" -#: commands/tablecmds.c:14550 +#: commands/tablecmds.c:14713 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "la table enfant n'a pas de contrainte « %s »" -#: commands/tablecmds.c:14638 -#, fuzzy, c-format -#| msgid "partition \"%s\" would overlap partition \"%s\"" +#: commands/tablecmds.c:14801 +#, c-format msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" -msgstr "la partition « %s » surchargerait la partition « %s »" +msgstr "la partition « %s » déjà en attente de détachement de la table partitionnée « %s.%s »" -#: commands/tablecmds.c:14642 +#: commands/tablecmds.c:14805 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the detach operation." -msgstr "" +msgstr "Utiliser ALTER TABLE ... DETACH PARTITION ... FINALIZE pour terminer l'opération de détachement." -#: commands/tablecmds.c:14667 commands/tablecmds.c:14715 +#: commands/tablecmds.c:14830 commands/tablecmds.c:14878 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "la relation « %s » n'est pas une partition de la relation « %s »" -#: commands/tablecmds.c:14721 +#: commands/tablecmds.c:14884 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "la relation « %s » n'est pas un parent de la relation « %s »" -#: commands/tablecmds.c:14949 +#: commands/tablecmds.c:15112 #, c-format msgid "typed tables cannot inherit" msgstr "les tables avec type ne peuvent pas hériter d'autres tables" -#: commands/tablecmds.c:14979 +#: commands/tablecmds.c:15142 #, c-format msgid "table is missing column \"%s\"" msgstr "la colonne « %s » manque à la table" -#: commands/tablecmds.c:14990 +#: commands/tablecmds.c:15153 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "la table a une colonne « %s » alors que le type impose « %s »" -#: commands/tablecmds.c:14999 +#: commands/tablecmds.c:15162 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "la table « %s » a un type différent pour la colonne « %s »" -#: commands/tablecmds.c:15013 +#: commands/tablecmds.c:15176 #, c-format msgid "table has extra column \"%s\"" msgstr "la table a une colonne supplémentaire « %s »" -#: commands/tablecmds.c:15065 +#: commands/tablecmds.c:15228 #, c-format msgid "\"%s\" is not a typed table" msgstr "« %s » n'est pas une table typée" -#: commands/tablecmds.c:15247 +#: commands/tablecmds.c:15410 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index non unique « %s » comme identité de réplicat" -#: commands/tablecmds.c:15253 +#: commands/tablecmds.c:15416 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index « %s » immédiat comme identité de réplicat" -#: commands/tablecmds.c:15259 +#: commands/tablecmds.c:15422 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "ne peut pas utiliser un index par expression « %s » comme identité de réplicat" -#: commands/tablecmds.c:15265 +#: commands/tablecmds.c:15428 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index partiel « %s » comme identité de réplicat" -#: commands/tablecmds.c:15271 +#: commands/tablecmds.c:15434 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index invalide « %s » comme identité de réplicat" -#: commands/tablecmds.c:15288 +#: commands/tablecmds.c:15451 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "l'index « %s » ne peut pas être utilisé comme identité de réplicat car la colonne %d est une colonne système" -#: commands/tablecmds.c:15295 +#: commands/tablecmds.c:15458 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "l'index « %s » ne peut pas être utilisé comme identité de réplicat car la colonne « %s » peut être NULL" -#: commands/tablecmds.c:15485 commands/tablecmds.c:18483 +#: commands/tablecmds.c:15648 commands/tablecmds.c:18632 #, c-format msgid "column data type %s does not support compression" msgstr "le type de données %s ne supporte pas la compression" -#: commands/tablecmds.c:15546 +#: commands/tablecmds.c:15709 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "ne peut pas modifier le statut de journalisation de la table « %s » parce qu'elle est temporaire" -#: commands/tablecmds.c:15570 +#: commands/tablecmds.c:15733 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "ne peut pas modifier la table « %s » en non journalisée car elle fait partie d'une publication" -#: commands/tablecmds.c:15572 +#: commands/tablecmds.c:15735 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Les relations non journalisées ne peuvent pas être répliquées." -#: commands/tablecmds.c:15617 +#: commands/tablecmds.c:15780 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "n'a pas pu passer la table « %s » en journalisé car elle référence la table non journalisée « %s »" -#: commands/tablecmds.c:15627 +#: commands/tablecmds.c:15790 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "n'a pas pu passer la table « %s » en non journalisé car elle référence la table journalisée « %s »" -#: commands/tablecmds.c:15685 +#: commands/tablecmds.c:15848 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "ne peut pas déplacer une séquence OWNED BY dans un autre schéma" -#: commands/tablecmds.c:15792 +#: commands/tablecmds.c:15955 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "la relation « %s » existe déjà dans le schéma « %s »" -#: commands/tablecmds.c:16355 +#: commands/tablecmds.c:16518 #, c-format msgid "\"%s\" is not a composite type" msgstr "« %s » n'est pas un type composite" -#: commands/tablecmds.c:16387 +#: commands/tablecmds.c:16550 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni une séquence, ni une table distante" -#: commands/tablecmds.c:16422 +#: commands/tablecmds.c:16585 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "stratégie de partitionnement « %s » non reconnue" -#: commands/tablecmds.c:16430 +#: commands/tablecmds.c:16593 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "ne peut pas utiliser la stratégie de partitionnement « list » avec plus d'une colonne" -#: commands/tablecmds.c:16496 +#: commands/tablecmds.c:16659 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "la colonne « %s » nommée dans la clé de partitionnement n'existe pas" -#: commands/tablecmds.c:16504 +#: commands/tablecmds.c:16667 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "ne peut pas utiliser la colonne système « %s » comme clé de partitionnement" -#: commands/tablecmds.c:16515 commands/tablecmds.c:16629 +#: commands/tablecmds.c:16678 commands/tablecmds.c:16792 #, c-format msgid "cannot use generated column in partition key" msgstr "ne peut pas utiliser une colonne générée dans une clé de partitionnement" -#: commands/tablecmds.c:16516 commands/tablecmds.c:16630 commands/trigger.c:635 rewrite/rewriteHandler.c:886 rewrite/rewriteHandler.c:921 +#: commands/tablecmds.c:16679 commands/tablecmds.c:16793 commands/trigger.c:635 rewrite/rewriteHandler.c:884 rewrite/rewriteHandler.c:919 #, c-format msgid "Column \"%s\" is a generated column." msgstr "la colonne « %s » est une colonne générée." -#: commands/tablecmds.c:16592 +#: commands/tablecmds.c:16755 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "" "les fonctions dans une expression de clé de partitionnement doivent être marquées comme\n" "IMMUTABLE" -#: commands/tablecmds.c:16612 +#: commands/tablecmds.c:16775 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "les expressions de la clé de partitionnement ne peuvent pas contenir des références aux colonnes systèmes" -#: commands/tablecmds.c:16642 +#: commands/tablecmds.c:16805 #, c-format msgid "cannot use constant expression as partition key" msgstr "ne peut pas utiliser une expression constante comme clé de partitionnement" -#: commands/tablecmds.c:16663 +#: commands/tablecmds.c:16826 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "n'a pas pu déterminer le collationnement à utiliser pour l'expression de partitionnement" -#: commands/tablecmds.c:16698 +#: commands/tablecmds.c:16861 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "" "Vous devez spécifier une classe d'opérateur hash ou définir une\n" "classe d'opérateur hash par défaut pour le type de données." -#: commands/tablecmds.c:16704 +#: commands/tablecmds.c:16867 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "" "Vous devez spécifier une classe d'opérateur btree ou définir une\n" "classe d'opérateur btree par défaut pour le type de données." -#: commands/tablecmds.c:16956 +#: commands/tablecmds.c:17119 #, c-format msgid "\"%s\" is already a partition" msgstr "« %s » est déjà une partition" -#: commands/tablecmds.c:16962 +#: commands/tablecmds.c:17125 #, c-format msgid "cannot attach a typed table as partition" msgstr "ne peut pas attacher une table typée à une partition" -#: commands/tablecmds.c:16978 +#: commands/tablecmds.c:17141 #, c-format msgid "cannot attach inheritance child as partition" msgstr "ne peut pas ajouter la table en héritage comme une partition" -#: commands/tablecmds.c:16992 +#: commands/tablecmds.c:17155 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "ne peut pas attacher le parent d'héritage comme partition" -#: commands/tablecmds.c:17026 +#: commands/tablecmds.c:17189 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "ne peut pas attacher une relation temporaire comme partition de la relation permanente « %s »" -#: commands/tablecmds.c:17034 +#: commands/tablecmds.c:17197 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "ne peut pas attacher une relation permanente comme partition de la relation temporaire « %s »" -#: commands/tablecmds.c:17042 +#: commands/tablecmds.c:17205 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "ne peut pas attacher comme partition d'une relation temporaire d'une autre session" -#: commands/tablecmds.c:17049 +#: commands/tablecmds.c:17212 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "ne peut pas attacher une relation temporaire d'une autre session comme partition" -#: commands/tablecmds.c:17069 +#: commands/tablecmds.c:17232 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "la table « %s » contient la colonne « %s » introuvable dans le parent « %s »" -#: commands/tablecmds.c:17072 +#: commands/tablecmds.c:17235 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "La nouvelle partition pourrait seulement contenir les colonnes présentes dans le parent." -#: commands/tablecmds.c:17084 +#: commands/tablecmds.c:17247 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "le trigger « %s » empêche la table « %s » de devenir une partition" -#: commands/tablecmds.c:17086 commands/trigger.c:441 +#: commands/tablecmds.c:17249 commands/trigger.c:441 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "les triggers ROW avec des tables de transition ne sont pas supportés sur les partitions" -#: commands/tablecmds.c:17249 +#: commands/tablecmds.c:17412 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "ne peut pas attacher la table distante « %s » comme partition de la table partitionnée « %s »" -#: commands/tablecmds.c:17252 +#: commands/tablecmds.c:17415 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "La table partitionnée « %s » contient des index uniques." -#: commands/tablecmds.c:17572 +#: commands/tablecmds.c:17735 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "ne peut pas détacher les partitions en parallèle quand une partition par défaut existe" -#: commands/tablecmds.c:17681 +#: commands/tablecmds.c:17844 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "la table partitionnée « %s » a été supprimée de manière concurrente" -#: commands/tablecmds.c:17687 +#: commands/tablecmds.c:17850 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "la partition « %s » a été supprimée de façon concurrente" -#: commands/tablecmds.c:18141 commands/tablecmds.c:18161 commands/tablecmds.c:18181 commands/tablecmds.c:18200 commands/tablecmds.c:18242 +#: commands/tablecmds.c:18304 commands/tablecmds.c:18324 commands/tablecmds.c:18344 commands/tablecmds.c:18363 commands/tablecmds.c:18405 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "ne peut pas attacher l'index « %s » comme une partition de l'index « %s »" -#: commands/tablecmds.c:18144 +#: commands/tablecmds.c:18307 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "L'index « %s » est déjà attaché à un autre index." -#: commands/tablecmds.c:18164 +#: commands/tablecmds.c:18327 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "L'index « %s » n'est un index sur aucune des partitions de la table « %s »." -#: commands/tablecmds.c:18184 +#: commands/tablecmds.c:18347 #, c-format msgid "The index definitions do not match." msgstr "La définition de l'index correspond pas." -#: commands/tablecmds.c:18203 +#: commands/tablecmds.c:18366 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "L'index « %s » appartient à une contrainte dans la table « %s » mais aucune contrainte n'existe pour l'index « %s »." -#: commands/tablecmds.c:18245 +#: commands/tablecmds.c:18408 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "Un autre index est déjà attaché pour la partition « %s »." -#: commands/tablecmds.c:18495 +#: commands/tablecmds.c:18644 #, c-format msgid "invalid compression method \"%s\"" msgstr "méthode de compression « %s » invalide" @@ -10682,22 +10638,22 @@ msgstr "le déplacement de la ligne vers une autre partition par un trigger BEFO msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "Avant d'exécuter le trigger « %s », la ligne devait aller dans la partition « %s.%s »." -#: commands/trigger.c:3043 executor/nodeModifyTable.c:1798 executor/nodeModifyTable.c:1880 +#: commands/trigger.c:3043 executor/nodeModifyTable.c:1799 executor/nodeModifyTable.c:1881 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "la ligne à mettre à jour était déjà modifiée par une opération déclenchée par la commande courante" -#: commands/trigger.c:3044 executor/nodeModifyTable.c:1186 executor/nodeModifyTable.c:1260 executor/nodeModifyTable.c:1799 executor/nodeModifyTable.c:1881 +#: commands/trigger.c:3044 executor/nodeModifyTable.c:1187 executor/nodeModifyTable.c:1261 executor/nodeModifyTable.c:1800 executor/nodeModifyTable.c:1882 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Considérez l'utilisation d'un trigger AFTER au lieu d'un trigger BEFORE pour propager les changements sur les autres lignes." -#: commands/trigger.c:3073 executor/nodeLockRows.c:225 executor/nodeLockRows.c:234 executor/nodeModifyTable.c:228 executor/nodeModifyTable.c:1202 executor/nodeModifyTable.c:1816 executor/nodeModifyTable.c:2046 +#: commands/trigger.c:3073 executor/nodeLockRows.c:225 executor/nodeLockRows.c:234 executor/nodeModifyTable.c:228 executor/nodeModifyTable.c:1203 executor/nodeModifyTable.c:1817 executor/nodeModifyTable.c:2047 #, c-format msgid "could not serialize access due to concurrent update" msgstr "n'a pas pu sérialiser un accès à cause d'une mise à jour en parallèle" -#: commands/trigger.c:3081 executor/nodeModifyTable.c:1292 executor/nodeModifyTable.c:1898 executor/nodeModifyTable.c:2070 +#: commands/trigger.c:3081 executor/nodeModifyTable.c:1293 executor/nodeModifyTable.c:1899 executor/nodeModifyTable.c:2071 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "n'a pas pu sérialiser un accès à cause d'une suppression en parallèle" @@ -11022,10 +10978,9 @@ msgid "type analyze function %s must return type %s" msgstr "la fonction analyze du type %s doit renvoyer le type %s" #: commands/typecmds.c:2264 -#, fuzzy, c-format -#| msgid "type input function %s must return type %s" +#, c-format msgid "type subscripting function %s must return type %s" -msgstr "le type d'entrée de la fonction %s doit être %s" +msgstr "la fonction %s d'indiçage de type doit renvoyer le type %s" #: commands/typecmds.c:2274 #, c-format @@ -11069,16 +11024,14 @@ msgid "pg_type array OID value not set when in binary upgrade mode" msgstr "les valeurs d'OID du tableau pgtype ne sont pas positionnées en mode de mise à jour binaire" #: commands/typecmds.c:2460 -#, fuzzy, c-format -#| msgid "pg_type array OID value not set when in binary upgrade mode" +#, c-format msgid "pg_type multirange OID value not set when in binary upgrade mode" -msgstr "les valeurs d'OID du tableau pgtype ne sont pas positionnées en mode de mise à jour binaire" +msgstr "valeur d'OID du multirange de pg_type non positionnée en mode de mise à jour binaire" #: commands/typecmds.c:2493 -#, fuzzy, c-format -#| msgid "pg_type array OID value not set when in binary upgrade mode" +#, c-format msgid "pg_type multirange array OID value not set when in binary upgrade mode" -msgstr "les valeurs d'OID du tableau pgtype ne sont pas positionnées en mode de mise à jour binaire" +msgstr "valeur d'OID du tableau multirange de pg_type non positionnée en mode de mise à jour binaire" #: commands/typecmds.c:2791 #, c-format @@ -11194,7 +11147,7 @@ msgstr "doit être super-utilisateur pour créer des utilisateurs avec l'attribu msgid "permission denied to create role" msgstr "droit refusé pour créer un rôle" -#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15273 gram.y:15318 utils/adt/acl.c:5248 utils/adt/acl.c:5254 +#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15281 gram.y:15326 utils/adt/acl.c:5248 utils/adt/acl.c:5254 #, c-format msgid "role name \"%s\" is reserved" msgstr "le nom du rôle « %s » est réservé" @@ -11407,7 +11360,7 @@ msgstr "l'option DISABLE_PAGE_SKIPPING de la commande VACUUM ne pas être utilis #: commands/vacuum.c:331 #, c-format msgid "PROCESS_TOAST required with VACUUM FULL" -msgstr "" +msgstr "PROCESS_TOAST requis avec VACUUM FULL" #: commands/vacuum.c:572 #, c-format @@ -11514,7 +11467,7 @@ msgstr "" "ignore « %s » --- n'a pas pu exécuter un VACUUM sur les objets autres que\n" "des tables et les tables systèmes" -#: commands/variable.c:165 utils/misc/guc.c:11659 utils/misc/guc.c:11721 +#: commands/variable.c:165 utils/misc/guc.c:11605 utils/misc/guc.c:11667 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Mot clé non reconnu : « %s »." @@ -11709,140 +11662,140 @@ msgstr "le curseur « %s » n'est pas positionné sur une ligne" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "le curseur « %s » n'est pas un parcours modifiable de la table « %s »" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2443 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2451 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "le type de paramètre %d (%s) ne correspond pas à ce qui est préparé dans le plan (%s)" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2455 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2463 #, c-format msgid "no value found for parameter %d" msgstr "aucune valeur trouvée pour le paramètre %d" -#: executor/execExpr.c:612 executor/execExpr.c:619 executor/execExpr.c:625 executor/execExprInterp.c:4011 executor/execExprInterp.c:4028 executor/execExprInterp.c:4129 executor/nodeModifyTable.c:117 executor/nodeModifyTable.c:128 executor/nodeModifyTable.c:145 executor/nodeModifyTable.c:153 +#: executor/execExpr.c:632 executor/execExpr.c:639 executor/execExpr.c:645 executor/execExprInterp.c:4023 executor/execExprInterp.c:4040 executor/execExprInterp.c:4141 executor/nodeModifyTable.c:117 executor/nodeModifyTable.c:128 executor/nodeModifyTable.c:145 executor/nodeModifyTable.c:153 #, c-format msgid "table row type and query-specified row type do not match" msgstr "le type de ligne de la table et celui spécifié par la requête ne correspondent pas" -#: executor/execExpr.c:613 executor/nodeModifyTable.c:118 +#: executor/execExpr.c:633 executor/nodeModifyTable.c:118 #, c-format msgid "Query has too many columns." msgstr "La requête a trop de colonnes." -#: executor/execExpr.c:620 executor/nodeModifyTable.c:146 +#: executor/execExpr.c:640 executor/nodeModifyTable.c:146 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "" "La requête fournit une valeur pour une colonne supprimée à la position\n" "ordinale %d." -#: executor/execExpr.c:626 executor/execExprInterp.c:4029 executor/nodeModifyTable.c:129 +#: executor/execExpr.c:646 executor/execExprInterp.c:4041 executor/nodeModifyTable.c:129 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "La table a le type %s à la position ordinale %d alors que la requête attend %s." -#: executor/execExpr.c:1056 parser/parse_agg.c:827 +#: executor/execExpr.c:1110 parser/parse_agg.c:827 #, c-format msgid "window function calls cannot be nested" msgstr "les appels à la fonction window ne peuvent pas être imbriqués" -#: executor/execExpr.c:1561 +#: executor/execExpr.c:1615 #, c-format msgid "target type is not an array" msgstr "le type cible n'est pas un tableau" -#: executor/execExpr.c:1901 +#: executor/execExpr.c:1955 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "une colonne ROW() a le type %s au lieu du type %s" -#: executor/execExpr.c:2426 executor/execSRF.c:718 parser/parse_func.c:136 parser/parse_func.c:654 parser/parse_func.c:1030 +#: executor/execExpr.c:2480 executor/execSRF.c:718 parser/parse_func.c:136 parser/parse_func.c:654 parser/parse_func.c:1030 #, c-format msgid "cannot pass more than %d argument to a function" msgid_plural "cannot pass more than %d arguments to a function" msgstr[0] "ne peut pas passer plus de %d argument à une fonction" msgstr[1] "ne peut pas passer plus de %d arguments à une fonction" -#: executor/execExpr.c:2812 parser/parse_node.c:277 parser/parse_node.c:327 +#: executor/execExpr.c:2866 parser/parse_node.c:277 parser/parse_node.c:327 #, c-format msgid "cannot subscript type %s because it does not support subscripting" msgstr "ne peut pas indicer le type %s car il ne supporte pas les indices" -#: executor/execExpr.c:2940 executor/execExpr.c:2962 +#: executor/execExpr.c:2994 executor/execExpr.c:3016 #, c-format msgid "type %s does not support subscripted assignment" msgstr "le type %s ne supporte pas l'affectation avec indice" -#: executor/execExprInterp.c:1911 +#: executor/execExprInterp.c:1916 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "l'attribut %d du type %s a été supprimé" -#: executor/execExprInterp.c:1917 +#: executor/execExprInterp.c:1922 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "l'attribut %d de type %s a un mauvais type" -#: executor/execExprInterp.c:1919 executor/execExprInterp.c:3040 executor/execExprInterp.c:3086 +#: executor/execExprInterp.c:1924 executor/execExprInterp.c:3052 executor/execExprInterp.c:3098 #, c-format msgid "Table has type %s, but query expects %s." msgstr "La table a le type %s alors que la requête attend %s." -#: executor/execExprInterp.c:1998 utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1748 utils/cache/typcache.c:1904 utils/cache/typcache.c:2033 utils/fmgr/funcapi.c:458 +#: executor/execExprInterp.c:2003 utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1748 utils/cache/typcache.c:1904 utils/cache/typcache.c:2033 utils/fmgr/funcapi.c:458 #, c-format msgid "type %s is not composite" msgstr "le type %s n'est pas un type composite" -#: executor/execExprInterp.c:2533 +#: executor/execExprInterp.c:2541 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF n'est pas supporté pour ce type de table" -#: executor/execExprInterp.c:2746 +#: executor/execExprInterp.c:2754 #, c-format msgid "cannot merge incompatible arrays" msgstr "ne peut pas fusionner les tableaux incompatibles" -#: executor/execExprInterp.c:2747 +#: executor/execExprInterp.c:2755 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "Le tableau avec le type d'élément %s ne peut pas être inclus dans la construction ARRAY avec le type d'élément %s." -#: executor/execExprInterp.c:2768 utils/adt/arrayfuncs.c:262 utils/adt/arrayfuncs.c:560 utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3374 utils/adt/arrayfuncs.c:5334 utils/adt/arrayfuncs.c:5847 utils/adt/arraysubs.c:150 utils/adt/arraysubs.c:488 +#: executor/execExprInterp.c:2776 utils/adt/arrayfuncs.c:262 utils/adt/arrayfuncs.c:562 utils/adt/arrayfuncs.c:1304 utils/adt/arrayfuncs.c:3374 utils/adt/arrayfuncs.c:5336 utils/adt/arrayfuncs.c:5853 utils/adt/arraysubs.c:150 utils/adt/arraysubs.c:488 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "le nombre de dimensions du tableau (%d) dépasse le maximum autorisé (%d)" -#: executor/execExprInterp.c:2788 executor/execExprInterp.c:2818 +#: executor/execExprInterp.c:2796 executor/execExprInterp.c:2826 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "" "les tableaux multidimensionnels doivent avoir des expressions de tableaux\n" "avec les dimensions correspondantes" -#: executor/execExprInterp.c:3039 executor/execExprInterp.c:3085 +#: executor/execExprInterp.c:3051 executor/execExprInterp.c:3097 #, c-format msgid "attribute %d has wrong type" msgstr "l'attribut %d a un mauvais type" -#: executor/execExprInterp.c:3640 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3652 utils/adt/domains.c:149 #, c-format msgid "domain %s does not allow null values" msgstr "le domaine %s n'autorise pas les valeurs NULL" -#: executor/execExprInterp.c:3655 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3667 utils/adt/domains.c:184 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "la valeur pour le domaine %s viole la contrainte de vérification « %s »" -#: executor/execExprInterp.c:4012 +#: executor/execExprInterp.c:4024 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." msgstr[0] "La ligne de la table contient %d attribut alors que la requête en attend %d." msgstr[1] "La ligne de la table contient %d attributs alors que la requête en attend %d." -#: executor/execExprInterp.c:4130 executor/execSRF.c:977 +#: executor/execExprInterp.c:4142 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "" @@ -11894,32 +11847,32 @@ msgstr "ne peut pas modifier la séquence « %s »" msgid "cannot change TOAST relation \"%s\"" msgstr "ne peut pas modifier la relation TOAST « %s »" -#: executor/execMain.c:1031 rewrite/rewriteHandler.c:3043 rewrite/rewriteHandler.c:3830 +#: executor/execMain.c:1031 rewrite/rewriteHandler.c:3041 rewrite/rewriteHandler.c:3824 #, c-format msgid "cannot insert into view \"%s\"" msgstr "ne peut pas insérer dans la vue « %s »" -#: executor/execMain.c:1033 rewrite/rewriteHandler.c:3046 rewrite/rewriteHandler.c:3833 +#: executor/execMain.c:1033 rewrite/rewriteHandler.c:3044 rewrite/rewriteHandler.c:3827 #, c-format msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." msgstr "Pour activer l'insertion dans la vue, fournissez un trigger INSTEAD OF INSERT ou une règle ON INSERT DO INSTEAD sans condition." -#: executor/execMain.c:1039 rewrite/rewriteHandler.c:3051 rewrite/rewriteHandler.c:3838 +#: executor/execMain.c:1039 rewrite/rewriteHandler.c:3049 rewrite/rewriteHandler.c:3832 #, c-format msgid "cannot update view \"%s\"" msgstr "ne peut pas mettre à jour la vue « %s »" -#: executor/execMain.c:1041 rewrite/rewriteHandler.c:3054 rewrite/rewriteHandler.c:3841 +#: executor/execMain.c:1041 rewrite/rewriteHandler.c:3052 rewrite/rewriteHandler.c:3835 #, c-format msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." msgstr "Pour activer la mise à jour dans la vue, fournissez un trigger INSTEAD OF UPDATE ou une règle ON UPDATE DO INSTEAD sans condition." -#: executor/execMain.c:1047 rewrite/rewriteHandler.c:3059 rewrite/rewriteHandler.c:3846 +#: executor/execMain.c:1047 rewrite/rewriteHandler.c:3057 rewrite/rewriteHandler.c:3840 #, c-format msgid "cannot delete from view \"%s\"" msgstr "ne peut pas supprimer à partir de la vue « %s »" -#: executor/execMain.c:1049 rewrite/rewriteHandler.c:3062 rewrite/rewriteHandler.c:3849 +#: executor/execMain.c:1049 rewrite/rewriteHandler.c:3060 rewrite/rewriteHandler.c:3843 #, c-format msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." msgstr "Pour activer la suppression dans la vue, fournissez un trigger INSTEAD OF DELETE ou une règle ON DELETE DO INSTEAD sans condition." @@ -12064,7 +12017,7 @@ msgstr "mise à jour concurrente, nouvelle tentative" msgid "concurrent delete, retrying" msgstr "suppression concurrente, nouvelle tentative" -#: executor/execReplication.c:269 parser/parse_cte.c:502 parser/parse_oper.c:233 utils/adt/array_userfuncs.c:719 utils/adt/array_userfuncs.c:858 utils/adt/arrayfuncs.c:3652 utils/adt/arrayfuncs.c:4172 utils/adt/arrayfuncs.c:6158 utils/adt/rowtypes.c:1203 +#: executor/execReplication.c:269 parser/parse_cte.c:502 parser/parse_oper.c:233 utils/adt/array_userfuncs.c:720 utils/adt/array_userfuncs.c:859 utils/adt/arrayfuncs.c:3654 utils/adt/arrayfuncs.c:4174 utils/adt/arrayfuncs.c:6166 utils/adt/rowtypes.c:1203 #, c-format msgid "could not identify an equality operator for type %s" msgstr "n'a pas pu identifier un opérateur d'égalité pour le type %s" @@ -12110,10 +12063,9 @@ msgid "rows returned by function are not all of the same row type" msgstr "les lignes renvoyées par la fonction ne sont pas toutes du même type ligne" #: executor/execSRF.c:365 -#, fuzzy, c-format -#| msgid "table-function protocol for materialize mode was not followed" +#, c-format msgid "table-function protocol for value-per-call mode was not followed" -msgstr "le protocole de la fonction table pour le mode matérialisé n'a pas été respecté" +msgstr "le protocole de la fonction table pour le mode valeur-par-appel n'a pas été suivi" #: executor/execSRF.c:373 executor/execSRF.c:667 #, c-format @@ -12303,27 +12255,27 @@ msgstr "FULL JOIN est supporté seulement avec les conditions de jointures MERGE msgid "Query has too few columns." msgstr "La requête n'a pas assez de colonnes." -#: executor/nodeModifyTable.c:1185 executor/nodeModifyTable.c:1259 +#: executor/nodeModifyTable.c:1186 executor/nodeModifyTable.c:1260 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "la ligne à supprimer était déjà modifiée par une opération déclenchée par la commande courante" -#: executor/nodeModifyTable.c:1434 +#: executor/nodeModifyTable.c:1435 #, c-format msgid "invalid ON UPDATE specification" msgstr "spécification ON UPDATE invalide" -#: executor/nodeModifyTable.c:1435 +#: executor/nodeModifyTable.c:1436 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "La ligne résultante apparaîtrait dans une partition différente de la ligne originale." -#: executor/nodeModifyTable.c:2025 +#: executor/nodeModifyTable.c:2026 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "la commande ON CONFLICT DO UPDATE ne peut pas affecter une ligne la deuxième fois" -#: executor/nodeModifyTable.c:2026 +#: executor/nodeModifyTable.c:2027 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "S'assure qu'aucune ligne proposée à l'insertion dans la même commande n'a de valeurs contraintes dupliquées." @@ -12455,10 +12407,9 @@ msgid "SQL expression \"%s\"" msgstr "expression SQL « %s »" #: executor/spi.c:2789 -#, fuzzy, c-format -#| msgid "SQL statement \"%s\"" +#, c-format msgid "PL/pgSQL assignment \"%s\"" -msgstr "instruction SQL « %s »" +msgstr "affectation PL/pgSQL « %s »" #: executor/spi.c:2792 #, c-format @@ -12485,363 +12436,363 @@ msgstr "option « %s » invalide" msgid "Valid options in this context are: %s" msgstr "Les options valides dans ce contexte sont %s" -#: gram.y:1106 +#: gram.y:1107 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "UNENCRYPTED PASSWORD n'est plus supporté" -#: gram.y:1107 +#: gram.y:1108 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "Supprimez UNENCRYPTED pour enregistrer le mot de passe dans sa forme chiffrée à la place." -#: gram.y:1169 +#: gram.y:1170 #, c-format msgid "unrecognized role option \"%s\"" msgstr "option « %s » du rôle non reconnue" -#: gram.y:1416 gram.y:1431 +#: gram.y:1417 gram.y:1432 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTS n'inclut pas les éléments du schéma" -#: gram.y:1577 +#: gram.y:1578 #, c-format msgid "current database cannot be changed" msgstr "la base de données actuelle ne peut pas être changée" -#: gram.y:1701 +#: gram.y:1702 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "l'intervalle de fuseau horaire doit être HOUR ou HOUR TO MINUTE" -#: gram.y:2269 +#: gram.y:2270 #, c-format msgid "column number must be in range from 1 to %d" msgstr "le numéro de colonne doit être dans l'intervalle entre 1 et %d" -#: gram.y:2818 +#: gram.y:2811 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "option de séquence « %s » non supportée ici" -#: gram.y:2847 +#: gram.y:2840 #, c-format msgid "modulus for hash partition provided more than once" msgstr "le modulus pour la partition hash est spécifié plus d'une fois" -#: gram.y:2856 +#: gram.y:2849 #, c-format msgid "remainder for hash partition provided more than once" msgstr "le reste pour la partition hash est spécifié plus d'une fois" -#: gram.y:2863 +#: gram.y:2856 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "spécification de limite de partition hash non reconnue « %s »" -#: gram.y:2871 +#: gram.y:2864 #, c-format msgid "modulus for hash partition must be specified" msgstr "le modulus pour les partition hash doit être spécifié" -#: gram.y:2875 +#: gram.y:2868 #, c-format msgid "remainder for hash partition must be specified" msgstr "le reste pour les partition hash doit être spécifié" -#: gram.y:3076 gram.y:3109 +#: gram.y:3069 gram.y:3102 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUT non autorisé dans PROGRAM" -#: gram.y:3082 +#: gram.y:3075 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "la clause WHERE n'est pas autorisée avec COPY TO" -#: gram.y:3414 gram.y:3421 gram.y:11679 gram.y:11687 +#: gram.y:3407 gram.y:3414 gram.y:11687 gram.y:11695 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "GLOBAL est obsolète dans la création de la table temporaire" -#: gram.y:3670 +#: gram.y:3663 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "pour une colonne générée, GENERATED ALWAYS doit toujours être spécifié" -#: gram.y:3938 utils/adt/ri_triggers.c:2032 +#: gram.y:3931 utils/adt/ri_triggers.c:2032 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL non implémenté" -#: gram.y:4639 +#: gram.y:4632 #, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" msgstr "CREATE EXTENSION ... FROM n'est plus supporté" -#: gram.y:5302 +#: gram.y:5295 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "option « %s » de sécurité de ligne non reconnue" -#: gram.y:5303 +#: gram.y:5296 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "Seules les politiques PERMISSIVE et RESTRICTIVE sont supportées actuellement." -#: gram.y:5385 +#: gram.y:5378 #, c-format msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" msgstr "CREATE OR REPLACE CONSTRAINT TRIGGER n'est pas supporté" -#: gram.y:5422 +#: gram.y:5415 msgid "duplicate trigger events specified" msgstr "événements de trigger dupliqués spécifiés" -#: gram.y:5563 parser/parse_utilcmd.c:3732 parser/parse_utilcmd.c:3758 +#: gram.y:5556 parser/parse_utilcmd.c:3734 parser/parse_utilcmd.c:3760 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "la contrainte déclarée INITIALLY DEFERRED doit être DEFERRABLE" -#: gram.y:5570 +#: gram.y:5563 #, c-format msgid "conflicting constraint properties" msgstr "propriétés de contrainte en conflit" -#: gram.y:5666 +#: gram.y:5659 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION n'est pas encore implémenté" -#: gram.y:6049 +#: gram.y:6042 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK n'est plus nécessaire" -#: gram.y:6050 +#: gram.y:6043 #, c-format msgid "Update your data type." msgstr "Mettez à jour votre type de données." -#: gram.y:7775 +#: gram.y:7768 #, c-format msgid "aggregates cannot have output arguments" msgstr "les agrégats ne peuvent pas avoir d'arguments en sortie" -#: gram.y:8217 utils/adt/regproc.c:709 utils/adt/regproc.c:750 +#: gram.y:8210 utils/adt/regproc.c:709 utils/adt/regproc.c:750 #, c-format msgid "missing argument" msgstr "argument manquant" -#: gram.y:8218 utils/adt/regproc.c:710 utils/adt/regproc.c:751 +#: gram.y:8211 utils/adt/regproc.c:710 utils/adt/regproc.c:751 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Utilisez NONE pour dénoter l'argument manquant d'un opérateur unitaire." -#: gram.y:10157 gram.y:10175 +#: gram.y:10150 gram.y:10168 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION non supporté sur les vues récursives" -#: gram.y:11816 +#: gram.y:11824 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "la syntaxe LIMIT #,# n'est pas supportée" -#: gram.y:11817 +#: gram.y:11825 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Utilisez les clauses séparées LIMIT et OFFSET." -#: gram.y:12155 gram.y:12180 +#: gram.y:12163 gram.y:12188 #, c-format msgid "VALUES in FROM must have an alias" msgstr "VALUES dans FROM doit avoir un alias" -#: gram.y:12156 gram.y:12181 +#: gram.y:12164 gram.y:12189 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "Par exemple, FROM (VALUES ...) [AS] quelquechose." -#: gram.y:12161 gram.y:12186 +#: gram.y:12169 gram.y:12194 #, c-format msgid "subquery in FROM must have an alias" msgstr "la sous-requête du FROM doit avoir un alias" -#: gram.y:12162 gram.y:12187 +#: gram.y:12170 gram.y:12195 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "Par exemple, FROM (SELECT...) [AS] quelquechose." -#: gram.y:12682 +#: gram.y:12690 #, c-format msgid "only one DEFAULT value is allowed" msgstr "seule une valeur DEFAULT est autorisée" -#: gram.y:12691 +#: gram.y:12699 #, c-format msgid "only one PATH value per column is allowed" msgstr "seule une valeur PATH par colonne est autorisée" -#: gram.y:12700 +#: gram.y:12708 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "déclarations NULL/NOT NULL en conflit ou redondantes pour la colonne « %s »" -#: gram.y:12709 +#: gram.y:12717 #, c-format msgid "unrecognized column option \"%s\"" msgstr "option de colonne « %s » non reconnue" -#: gram.y:12963 +#: gram.y:12971 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "la précision du type float doit être d'au moins un bit" -#: gram.y:12972 +#: gram.y:12980 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "la précision du type float doit être inférieur à 54 bits" -#: gram.y:13470 +#: gram.y:13478 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "mauvais nombre de paramètres sur le côté gauche de l'expression OVERLAPS" -#: gram.y:13475 +#: gram.y:13483 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "mauvais nombre de paramètres sur le côté droit de l'expression OVERLAPS" -#: gram.y:13643 +#: gram.y:13651 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "prédicat UNIQUE non implémenté" -#: gram.y:14002 +#: gram.y:14010 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "ne peut pas utiliser des clauses ORDER BY multiples dans WITHIN GROUP" -#: gram.y:14007 +#: gram.y:14015 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "ne peut pas utiliser DISTINCT avec WITHIN GROUP" -#: gram.y:14012 +#: gram.y:14020 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "ne peut pas utiliser VARIADIC avec WITHIN GROUP" -#: gram.y:14536 gram.y:14559 +#: gram.y:14544 gram.y:14567 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "la fin du frame ne peut pas être UNBOUNDED FOLLOWING" -#: gram.y:14541 +#: gram.y:14549 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "la frame commençant après la ligne suivante ne peut pas se terminer avec la ligne actuelle" -#: gram.y:14564 +#: gram.y:14572 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "la fin du frame ne peut pas être UNBOUNDED PRECEDING" -#: gram.y:14570 +#: gram.y:14578 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "la frame commençant à la ligne courante ne peut pas avoir des lignes précédentes" -#: gram.y:14577 +#: gram.y:14585 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "la frame commençant à la ligne suivante ne peut pas avoir des lignes précédentes" -#: gram.y:15209 +#: gram.y:15217 #, c-format msgid "type modifier cannot have parameter name" msgstr "le modificateur de type ne peut pas avoir de nom de paramètre" -#: gram.y:15215 +#: gram.y:15223 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "le modificateur de type ne peut pas avoir de clause ORDER BY" -#: gram.y:15280 gram.y:15287 gram.y:15294 +#: gram.y:15288 gram.y:15295 gram.y:15302 #, c-format msgid "%s cannot be used as a role name here" msgstr "%s ne peut pas être utilisé comme nom de rôle ici" -#: gram.y:15383 gram.y:16815 +#: gram.y:15391 gram.y:16823 #, c-format msgid "WITH TIES cannot be specified without ORDER BY clause" msgstr "WITH TIES ne peut pas être indiqué sans clause ORDER BY" -#: gram.y:16491 gram.y:16680 +#: gram.y:16499 gram.y:16688 msgid "improper use of \"*\"" msgstr "mauvaise utilisation de « * »" -#: gram.y:16643 gram.y:16660 tsearch/spell.c:982 tsearch/spell.c:999 tsearch/spell.c:1016 tsearch/spell.c:1033 tsearch/spell.c:1098 +#: gram.y:16651 gram.y:16668 tsearch/spell.c:982 tsearch/spell.c:999 tsearch/spell.c:1016 tsearch/spell.c:1033 tsearch/spell.c:1098 #, c-format msgid "syntax error" msgstr "erreur de syntaxe" -#: gram.y:16745 +#: gram.y:16753 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "un agrégat par ensemble ordonné avec un argument VARIADIC direct doit avoir un argument VARIADIC agrégé du même type de données" -#: gram.y:16782 +#: gram.y:16790 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "clauses ORDER BY multiples non autorisées" -#: gram.y:16793 +#: gram.y:16801 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "clauses OFFSET multiples non autorisées" -#: gram.y:16802 +#: gram.y:16810 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "clauses LIMIT multiples non autorisées" -#: gram.y:16811 +#: gram.y:16819 #, c-format msgid "multiple limit options not allowed" msgstr "options limite multiples non autorisées" -#: gram.y:16823 +#: gram.y:16831 #, c-format msgid "multiple WITH clauses not allowed" msgstr "clauses WITH multiples non autorisées" -#: gram.y:17015 +#: gram.y:17023 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "les arguments OUT et INOUT ne sont pas autorisés dans des fonctions TABLE" -#: gram.y:17111 +#: gram.y:17119 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "clauses COLLATE multiples non autorisées" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:17149 gram.y:17162 +#: gram.y:17157 gram.y:17170 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "les contraintes %s ne peuvent pas être marquées comme DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:17175 +#: gram.y:17183 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "les contraintes %s ne peuvent pas être marquées comme NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:17188 +#: gram.y:17196 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "les contraintes %s ne peuvent pas être marquées NO INHERIT" @@ -12851,7 +12802,7 @@ msgstr "les contraintes %s ne peuvent pas être marquées NO INHERIT" msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "paramètre de configuration « %s » non reconnu dans le fichier « %s », ligne %d" -#: guc-file.l:351 utils/misc/guc.c:7394 utils/misc/guc.c:7592 utils/misc/guc.c:7686 utils/misc/guc.c:7780 utils/misc/guc.c:7900 utils/misc/guc.c:7999 +#: guc-file.l:351 utils/misc/guc.c:7340 utils/misc/guc.c:7538 utils/misc/guc.c:7632 utils/misc/guc.c:7726 utils/misc/guc.c:7846 utils/misc/guc.c:7945 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "le paramètre « %s » ne peut pas être modifié sans redémarrer le serveur" @@ -12946,10 +12897,9 @@ msgid "invalid input syntax for type %s" msgstr "syntaxe en entrée invalide pour le type %s" #: jsonpath_gram.y:529 -#, fuzzy, c-format -#| msgid "unrecognized flag character \"%c\" in LIKE_REGEX predicate" +#, c-format msgid "unrecognized flag character \"%.*s\" in LIKE_REGEX predicate" -msgstr "caractère d'état « %c » non reconnu dans un prédicat LIKE_REGEX" +msgstr "caractère d'état « %.*s » non reconnu dans un prédicat LIKE_REGEX" #: jsonpath_gram.y:583 #, c-format @@ -13199,20 +13149,19 @@ msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "La connexion correspond à la ligne %d du pg_hba.conf : « %s »" #: libpq/auth.c:371 -#, fuzzy, c-format -#| msgid "Connections and Authentication" +#, c-format msgid "connection was re-authenticated" -msgstr "Connexions et authentification" +msgstr "la connexion a été ré-authentifiée" #: libpq/auth.c:372 #, c-format msgid "previous ID: \"%s\"; new ID: \"%s\"" -msgstr "" +msgstr "ID précédent : « %s » ; nouvel ID : « %s »" #: libpq/auth.c:381 #, c-format msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" -msgstr "" +msgstr "connexion authentifiée : identité=\"%s\" méthode=%s (%s:%d)" #: libpq/auth.c:420 #, c-format @@ -13428,10 +13377,9 @@ msgid "error from underlying PAM layer: %s" msgstr "erreur provenant de la couche PAM : %s" #: libpq/auth.c:2155 -#, fuzzy, c-format -#| msgid "unsupported PAM conversation %d/%s" +#, c-format msgid "unsupported PAM conversation %d/\"%s\"" -msgstr "conversation PAM %d/%s non supportée" +msgstr "conversation PAM %d/\"%s\" non supportée" #: libpq/auth.c:2215 #, c-format @@ -13602,16 +13550,14 @@ msgstr "" "le certificat du client ne contient aucun nom d'utilisateur" #: libpq/auth.c:2940 -#, fuzzy, c-format -#| msgid "certificate authentication failed for user \"%s\"" +#, c-format msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" -msgstr "authentification par le certificat échouée pour l'utilisateur « %s »" +msgstr "authentification par certificat échouée pour l'utilisateur « %s » : incapable de récupérer le DN sujet" #: libpq/auth.c:2963 -#, fuzzy, c-format -#| msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" +#, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" -msgstr "l'authentification par certificat (clientcert=verify-full) a échoué pour l'utilisateur « %s » : incohérence de CN" +msgstr "la validation du certificat (clientcert=verify-full) a échoué pour l'utilisateur « %s » : incohérence de DN" #: libpq/auth.c:2968 #, c-format @@ -13923,16 +13869,14 @@ msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "n'a pas pu charger le fichier de liste de révocation des certificats SSL (« %s ») : %s" #: libpq/be-secure-openssl.c:342 -#, fuzzy, c-format -#| msgid "could not load SSL certificate revocation list file \"%s\": %s" +#, c-format msgid "could not load SSL certificate revocation list directory \"%s\": %s" -msgstr "n'a pas pu charger le fichier de liste de révocation des certificats SSL (« %s ») : %s" +msgstr "n'a pas pu charger le répertoire de liste de révocation des certificats SSL « %s » : %s" #: libpq/be-secure-openssl.c:350 -#, fuzzy, c-format -#| msgid "could not load SSL certificate revocation list file \"%s\": %s" +#, c-format msgid "could not load SSL certificate revocation list file \"%s\" or directory \"%s\": %s" -msgstr "n'a pas pu charger le fichier de liste de révocation des certificats SSL (« %s ») : %s" +msgstr "n'a pas pu charger le fichier de liste de révocation des certificats SSL (« %s ») ou répertoire %s : %s" #: libpq/be-secure-openssl.c:408 #, c-format @@ -13980,10 +13924,9 @@ msgid "SSL certificate's common name contains embedded null" msgstr "le nom commun du certificat SSL contient des NULL" #: libpq/be-secure-openssl.c:629 -#, fuzzy, c-format -#| msgid "SSL certificate's name contains embedded null\n" +#, c-format msgid "SSL certificate's distinguished name contains embedded null" -msgstr "le nom du certificat SSL contient des NULL\n" +msgstr "le nom distingué du certificat SSL contient des NULL" #: libpq/be-secure-openssl.c:712 libpq/be-secure-openssl.c:771 #, c-format @@ -14045,21 +13988,19 @@ msgid "SSL error code %lu" msgstr "erreur SSL de code %lu" #: libpq/be-secure-openssl.c:1383 -#, fuzzy, c-format -#| msgid "failed to generate nonce\n" +#, c-format msgid "failed to create BIO" -msgstr "échec pour la génération de nonce\n" +msgstr "échec pour la création de BIO" #: libpq/be-secure-openssl.c:1393 #, c-format msgid "could not get NID for ASN1_OBJECT object" -msgstr "" +msgstr "n'a pas pu obtenir un NID pour l'objet ASN1_OBJECT" #: libpq/be-secure-openssl.c:1401 -#, fuzzy, c-format -#| msgid "could not create LDAP structure\n" +#, c-format msgid "could not convert NID %d to an ASN1_OBJECT structure" -msgstr "n'a pas pu créer la structure LDAP\n" +msgstr "n'a pas pu convertir le NID %d en une structure ASN1_OBJECT" #: libpq/be-secure.c:209 libpq/be-secure.c:305 #, c-format @@ -14109,10 +14050,9 @@ msgstr "" "« %s » : %m" #: libpq/hba.c:861 -#, fuzzy, c-format -#| msgid "error during file seek: %m" +#, c-format msgid "error enumerating network interfaces: %m" -msgstr "erreur lors de la recherche dans le fichier : %m" +msgstr "erreur lors de l'énumération des interfaces réseau : %m" #. translator: the second %s is a list of auth methods #: libpq/hba.c:888 @@ -14172,10 +14112,9 @@ msgid "hostssl record cannot match because SSL is not supported by this build" msgstr "l'enregistrement hostssl ne peut pas correspondre parce que SSL n'est pas supporté par cette installation" #: libpq/hba.c:1044 -#, fuzzy, c-format -#| msgid "Compile with --with-openssl to use SSL connections." +#, c-format msgid "Compile with --with-ssl to use SSL connections." -msgstr "Compilez avec --with-openssl pour utiliser les connexions SSL." +msgstr "Compilez avec --with-ssl pour utiliser les connexions SSL." #: libpq/hba.c:1056 #, c-format @@ -14580,7 +14519,7 @@ msgstr "n'a pas pu initialiser les droits du fichier « %s » : %m" msgid "could not accept new connection: %m" msgstr "n'a pas pu accepter la nouvelle connexion : %m" -#: libpq/pqcomm.c:766 libpq/pqcomm.c:775 libpq/pqcomm.c:807 libpq/pqcomm.c:817 libpq/pqcomm.c:1630 libpq/pqcomm.c:1675 libpq/pqcomm.c:1715 libpq/pqcomm.c:1759 libpq/pqcomm.c:1798 libpq/pqcomm.c:1837 libpq/pqcomm.c:1873 libpq/pqcomm.c:1912 postmaster/pgstat.c:621 postmaster/pgstat.c:632 +#: libpq/pqcomm.c:766 libpq/pqcomm.c:775 libpq/pqcomm.c:807 libpq/pqcomm.c:817 libpq/pqcomm.c:1630 libpq/pqcomm.c:1675 libpq/pqcomm.c:1715 libpq/pqcomm.c:1759 libpq/pqcomm.c:1798 libpq/pqcomm.c:1837 libpq/pqcomm.c:1873 libpq/pqcomm.c:1912 postmaster/pgstat.c:618 postmaster/pgstat.c:629 #, c-format msgid "%s(%s) failed: %m" msgstr "échec de %s(%s) : %m" @@ -14648,7 +14587,7 @@ msgstr "n'a pas pu interroger la socket : %m" msgid "no data left in message" msgstr "pas de données dans le message" -#: libpq/pqformat.c:517 libpq/pqformat.c:535 libpq/pqformat.c:556 utils/adt/arrayfuncs.c:1492 utils/adt/rowtypes.c:588 +#: libpq/pqformat.c:517 libpq/pqformat.c:535 libpq/pqformat.c:556 utils/adt/arrayfuncs.c:1481 utils/adt/rowtypes.c:588 #, c-format msgid "insufficient data left in message" msgstr "données insuffisantes laissées dans le message" @@ -15081,27 +15020,27 @@ msgstr "n'a pas pu implanter %s" msgid "SQL function \"%s\" during inlining" msgstr "fonction SQL « %s » durant « inlining »" -#: optimizer/util/plancat.c:133 +#: optimizer/util/plancat.c:132 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "ne peut pas accéder à des tables temporaires et non tracées lors de la restauration" -#: optimizer/util/plancat.c:681 +#: optimizer/util/plancat.c:672 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "les spécifications d'inférence d'index unique pour une ligne entière ne sont pas supportées" -#: optimizer/util/plancat.c:698 +#: optimizer/util/plancat.c:689 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "la contrainte de la clause ON CONFLICT n'a pas d'index associé" -#: optimizer/util/plancat.c:748 +#: optimizer/util/plancat.c:739 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "ON CONFLICT DO UPDATE non supporté avec les contraintes d'exclusion" -#: optimizer/util/plancat.c:853 +#: optimizer/util/plancat.c:844 #, c-format msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "il n'existe aucune contrainte unique ou contrainte d'exclusion correspondant à la spécification ON CONFLICT" @@ -15987,53 +15926,25 @@ msgstr "les types d'argument %s et %s ne se correspondent pas" msgid "%s could not convert type %s to %s" msgstr "%s n'a pas pu convertir le type %s en %s" -#: parser/parse_coerce.c:2089 -#, c-format -msgid "arguments declared \"anyelement\" are not all alike" -msgstr "les arguments déclarés « anyelement » ne sont pas tous identiques" - -#: parser/parse_coerce.c:2109 -#, c-format -msgid "arguments declared \"anyarray\" are not all alike" -msgstr "les arguments déclarés « anyarray » ne sont pas tous identiques" - -#: parser/parse_coerce.c:2129 +#: parser/parse_coerce.c:2089 parser/parse_coerce.c:2109 parser/parse_coerce.c:2129 parser/parse_coerce.c:2149 parser/parse_coerce.c:2204 parser/parse_coerce.c:2237 #, c-format -msgid "arguments declared \"anyrange\" are not all alike" -msgstr "les arguments déclarés « anyrange » ne sont pas tous identiques" - -#: parser/parse_coerce.c:2149 -#, fuzzy, c-format -#| msgid "arguments declared \"anyrange\" are not all alike" -msgid "arguments declared \"anymultirange\" are not all alike" -msgstr "les arguments déclarés « anyrange » ne sont pas tous identiques" +msgid "arguments declared \"%s\" are not all alike" +msgstr "les arguments déclarés « %s » ne sont pas tous identiques" #: parser/parse_coerce.c:2183 parser/parse_coerce.c:2297 utils/fmgr/funcapi.c:489 #, c-format msgid "argument declared %s is not an array but type %s" msgstr "l'argument déclaré %s n'est pas un tableau mais est du type %s" -#: parser/parse_coerce.c:2204 -#, c-format -msgid "arguments declared \"anycompatiblerange\" are not all alike" -msgstr "les arguments déclarés « anycompatiblerange » ne sont pas tous identiques" - #: parser/parse_coerce.c:2216 parser/parse_coerce.c:2329 utils/fmgr/funcapi.c:503 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "l'argument déclaré %s n'est pas un type d'intervalle mais est du type %s" -#: parser/parse_coerce.c:2237 -#, fuzzy, c-format -#| msgid "arguments declared \"anycompatiblerange\" are not all alike" -msgid "arguments declared \"anycompatiblemultirange\" are not all alike" -msgstr "les arguments déclarés « anycompatiblerange » ne sont pas tous identiques" - #: parser/parse_coerce.c:2250 parser/parse_coerce.c:2363 utils/fmgr/funcapi.c:521 utils/fmgr/funcapi.c:586 -#, fuzzy, c-format -#| msgid "argument declared %s is not a range type but type %s" +#, c-format msgid "argument declared %s is not a multirange type but type %s" -msgstr "l'argument déclaré %s n'est pas un type d'intervalle mais est du type %s" +msgstr "l'argument déclaré %s n'est pas un type multirange mais est du type %s" #: parser/parse_coerce.c:2288 #, c-format @@ -16191,60 +16102,57 @@ msgstr "Utilisez la clause COLLATE pour configurer le collationnement du terme n #: parser/parse_cte.c:350 #, c-format msgid "WITH query is not recursive" -msgstr "" +msgstr "la requête WITH n'est pas récursive" #: parser/parse_cte.c:381 #, c-format msgid "with a SEARCH or CYCLE clause, the left side of the UNION must be a SELECT" -msgstr "" +msgstr "avec une clause SEARCH ou CYCLE, le côté gauche de l'UNION doit être un SELECT" #: parser/parse_cte.c:386 #, c-format msgid "with a SEARCH or CYCLE clause, the right side of the UNION must be a SELECT" -msgstr "" +msgstr "avec une clause SEARCH ou CYCLE, le côté droit de l'UNION doit être un SELECT" #: parser/parse_cte.c:401 #, c-format msgid "search column \"%s\" not in WITH query column list" -msgstr "" +msgstr "colonne de recherche « %s » non présent dans la liste des colonnes de la requête WITH" #: parser/parse_cte.c:408 -#, fuzzy, c-format -#| msgid "column \"%s\" specified more than once" +#, c-format msgid "search column \"%s\" specified more than once" -msgstr "la colonne « %s » est spécifiée plus d'une fois" +msgstr "la colonne de recherche « %s » est spécifiée plus d'une fois" #: parser/parse_cte.c:417 #, c-format msgid "search sequence column name \"%s\" already used in WITH query column list" -msgstr "" +msgstr "nom de colonne « %s » de la séquence de recherche déjà utilisé dans la liste des colonnes de la requête WITH" #: parser/parse_cte.c:436 -#, fuzzy, c-format -#| msgid "column \"%s\" named in key does not exist" +#, c-format msgid "cycle column \"%s\" not in WITH query column list" -msgstr "la colonne « %s » nommée dans la clé n'existe pas" +msgstr "la colonne cycle « %s » n'est pas dans la liste de colonne de la requête WITH" #: parser/parse_cte.c:443 -#, fuzzy, c-format -#| msgid "column \"%s\" specified more than once" +#, c-format msgid "cycle column \"%s\" specified more than once" -msgstr "la colonne « %s » est spécifiée plus d'une fois" +msgstr "la colonne cycle « %s » est spécifiée plus d'une fois" #: parser/parse_cte.c:452 #, c-format msgid "cycle mark column name \"%s\" already used in WITH query column list" -msgstr "" +msgstr "nom de colonne « %s » de marque du cycle déjà utilisé dans la liste des colonnes de la requête WITH" #: parser/parse_cte.c:464 #, c-format msgid "cycle path column name \"%s\" already used in WITH query column list" -msgstr "" +msgstr "nom de colonne « %s » de chemin du cycle déjà utilisé dans la liste des colonnes de la requête WITH" #: parser/parse_cte.c:472 #, c-format msgid "cycle mark column name and cycle path column name are the same" -msgstr "" +msgstr "le nom de colonne de marque du cycle est identique au nom de colonne de chemin du cycle" #: parser/parse_cte.c:508 #, c-format @@ -16254,12 +16162,12 @@ msgstr "n'a pas pu identifier un opérateur d'inégalité pour le type %s" #: parser/parse_cte.c:520 #, c-format msgid "search sequence column name and cycle mark column name are the same" -msgstr "" +msgstr "le nom de la colonne de séquence de recherche est identique au nom de la colonne de marque du cycle" #: parser/parse_cte.c:527 #, c-format -msgid "search_sequence column name and cycle path column name are the same" -msgstr "" +msgid "search sequence column name and cycle path column name are the same" +msgstr "le nom de la colonne de séquence de recherche est identique au nom de la colonne de chemin du cycle" #: parser/parse_cte.c:611 #, c-format @@ -16600,12 +16508,11 @@ msgid "OVER is not supported for ordered-set aggregate %s" msgstr "OVER n'est pas supporté pour l'agrégat %s à ensemble trié" #: parser/parse_func.c:420 parser/parse_func.c:451 -#, fuzzy, c-format -#| msgid "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." +#, c-format msgid "There is an ordered-set aggregate %s, but it requires %d direct argument, not %d." msgid_plural "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." -msgstr[0] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert au moins %d arguments directs, pas %d." -msgstr[1] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert au moins %d arguments directs, pas %d." +msgstr[0] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert %d argument direct, pas %d." +msgstr[1] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert %d arguments directs, pas %d." #: parser/parse_func.c:478 #, c-format @@ -16613,11 +16520,10 @@ msgid "To use the hypothetical-set aggregate %s, the number of hypothetical dire msgstr "Pour utiliser l'agrégat à ensemble hypothétique %s, le nombre d'arguments directs hypothétiques (ici %d) doit correspondre au nombre de colonnes de tri (ici %d)." #: parser/parse_func.c:492 -#, fuzzy, c-format -#| msgid "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." +#, c-format msgid "There is an ordered-set aggregate %s, but it requires at least %d direct argument." msgid_plural "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." -msgstr[0] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert au moins %d arguments directs." +msgstr[0] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert au moins %d argument direct." msgstr[1] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert au moins %d arguments directs." #: parser/parse_func.c:513 @@ -17121,10 +17027,9 @@ msgstr "" "pas une telle colonne dans le type de données %s" #: parser/parse_target.c:878 -#, fuzzy, c-format -#| msgid "array assignment to \"%s\" requires type %s but expression is of type %s" +#, c-format msgid "subscripted assignment to \"%s\" requires type %s but expression is of type %s" -msgstr "l'affectation d'un tableau avec « %s » requiert le type %s mais l'expression est de type %s" +msgstr "" #: parser/parse_target.c:888 #, c-format @@ -17171,333 +17076,333 @@ msgstr "les modificateurs de type doivent être des constantes ou des identifian msgid "invalid type name \"%s\"" msgstr "nom de type « %s » invalide" -#: parser/parse_utilcmd.c:267 +#: parser/parse_utilcmd.c:266 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "ne peut pas créer une table partitionnée comme la fille d'un héritage" -#: parser/parse_utilcmd.c:578 +#: parser/parse_utilcmd.c:580 #, c-format msgid "array of serial is not implemented" msgstr "le tableau de type serial n'est pas implémenté" -#: parser/parse_utilcmd.c:657 parser/parse_utilcmd.c:669 parser/parse_utilcmd.c:728 +#: parser/parse_utilcmd.c:659 parser/parse_utilcmd.c:671 parser/parse_utilcmd.c:730 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "déclarations NULL/NOT NULL en conflit pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:681 +#: parser/parse_utilcmd.c:683 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "" "plusieurs valeurs par défaut sont spécifiées pour la colonne « %s » de la table\n" "« %s »" -#: parser/parse_utilcmd.c:698 +#: parser/parse_utilcmd.c:700 #, c-format msgid "identity columns are not supported on typed tables" msgstr "les colonnes d'identité uniques ne sont pas supportées sur les tables typées" -#: parser/parse_utilcmd.c:702 +#: parser/parse_utilcmd.c:704 #, c-format msgid "identity columns are not supported on partitions" msgstr "les colonnes d'identité ne sont pas supportées sur les partitions" -#: parser/parse_utilcmd.c:711 +#: parser/parse_utilcmd.c:713 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "plusieurs spécifications d'identité pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:741 +#: parser/parse_utilcmd.c:743 #, c-format msgid "generated columns are not supported on typed tables" msgstr "les colonnes générées ne sont pas supportées sur les tables typées" -#: parser/parse_utilcmd.c:745 +#: parser/parse_utilcmd.c:747 #, c-format msgid "generated columns are not supported on partitions" msgstr "les colonnes générées ne sont pas supportées sur les partitions" -#: parser/parse_utilcmd.c:750 +#: parser/parse_utilcmd.c:752 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "plusieurs expressions de géénration sont spécifiées pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:768 parser/parse_utilcmd.c:883 +#: parser/parse_utilcmd.c:770 parser/parse_utilcmd.c:885 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "les clés primaires ne sont pas supportées par les tables distantes" -#: parser/parse_utilcmd.c:777 parser/parse_utilcmd.c:893 +#: parser/parse_utilcmd.c:779 parser/parse_utilcmd.c:895 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "les contraintes uniques ne sont pas supportées par les tables distantes" -#: parser/parse_utilcmd.c:822 +#: parser/parse_utilcmd.c:824 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "une valeur par défaut et une identité ont été spécifiées pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:830 +#: parser/parse_utilcmd.c:832 #, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" msgstr "une valeur par défaut et une expression de génération ont été spécifiées à la fois pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:838 +#: parser/parse_utilcmd.c:840 #, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" msgstr "une identité et une expression de génération ont été spécifiées à la fois pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:903 +#: parser/parse_utilcmd.c:905 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "les contraintes d'exclusion ne sont pas supportées par les tables distantes" -#: parser/parse_utilcmd.c:909 +#: parser/parse_utilcmd.c:911 #, c-format msgid "exclusion constraints are not supported on partitioned tables" msgstr "les contraintes d'exclusion ne sont pas supportées sur les tables partitionnées" -#: parser/parse_utilcmd.c:974 +#: parser/parse_utilcmd.c:976 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE n'est pas supporté pour la création de tables distantes" -#: parser/parse_utilcmd.c:1751 parser/parse_utilcmd.c:1859 +#: parser/parse_utilcmd.c:1753 parser/parse_utilcmd.c:1861 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "l'index « %s » contient une référence de table de ligne complète" -#: parser/parse_utilcmd.c:2246 +#: parser/parse_utilcmd.c:2248 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "ne peut pas utiliser un index existant dans CREATE TABLE" -#: parser/parse_utilcmd.c:2266 +#: parser/parse_utilcmd.c:2268 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "l'index « %s » est déjà associé à une contrainte" -#: parser/parse_utilcmd.c:2281 +#: parser/parse_utilcmd.c:2283 #, c-format msgid "index \"%s\" is not valid" msgstr "l'index « %s » n'est pas valide" -#: parser/parse_utilcmd.c:2287 +#: parser/parse_utilcmd.c:2289 #, c-format msgid "\"%s\" is not a unique index" msgstr "« %s » n'est pas un index unique" -#: parser/parse_utilcmd.c:2288 parser/parse_utilcmd.c:2295 parser/parse_utilcmd.c:2302 parser/parse_utilcmd.c:2379 +#: parser/parse_utilcmd.c:2290 parser/parse_utilcmd.c:2297 parser/parse_utilcmd.c:2304 parser/parse_utilcmd.c:2381 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "Ne peut pas créer une clé primaire ou une contrainte unique avec cet index." -#: parser/parse_utilcmd.c:2294 +#: parser/parse_utilcmd.c:2296 #, c-format msgid "index \"%s\" contains expressions" msgstr "l'index « %s » contient des expressions" -#: parser/parse_utilcmd.c:2301 +#: parser/parse_utilcmd.c:2303 #, c-format msgid "\"%s\" is a partial index" msgstr "« %s » est un index partiel" -#: parser/parse_utilcmd.c:2313 +#: parser/parse_utilcmd.c:2315 #, c-format msgid "\"%s\" is a deferrable index" msgstr "« %s » est un index déferrable" -#: parser/parse_utilcmd.c:2314 +#: parser/parse_utilcmd.c:2316 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "Ne peut pas créer une contrainte non-déferrable utilisant un index déferrable." -#: parser/parse_utilcmd.c:2378 +#: parser/parse_utilcmd.c:2380 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "l'index « %s », colonne numéro %d, n'a pas de tri par défaut" -#: parser/parse_utilcmd.c:2535 +#: parser/parse_utilcmd.c:2537 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "la colonne « %s » apparaît deux fois dans la contrainte de la clé primaire" -#: parser/parse_utilcmd.c:2541 +#: parser/parse_utilcmd.c:2543 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "la colonne « %s » apparaît deux fois sur une contrainte unique" -#: parser/parse_utilcmd.c:2894 +#: parser/parse_utilcmd.c:2896 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "les expressions et prédicats d'index peuvent seulement faire référence à la table en cours d'indexage" -#: parser/parse_utilcmd.c:2972 +#: parser/parse_utilcmd.c:2974 #, c-format msgid "statistics expressions can refer only to the table being indexed" msgstr "les expressions statistiques peuvent seulement faire référence à la table en cours d'indexage" -#: parser/parse_utilcmd.c:3018 +#: parser/parse_utilcmd.c:3020 #, c-format msgid "rules on materialized views are not supported" msgstr "les règles ne sont pas supportés sur les vues matérialisées" -#: parser/parse_utilcmd.c:3081 +#: parser/parse_utilcmd.c:3083 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "" "la condition WHERE d'une règle ne devrait pas contenir de références à d'autres\n" "relations" -#: parser/parse_utilcmd.c:3155 +#: parser/parse_utilcmd.c:3157 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "les règles avec des conditions WHERE ne peuvent contenir que des actions SELECT, INSERT, UPDATE ou DELETE " -#: parser/parse_utilcmd.c:3173 parser/parse_utilcmd.c:3274 rewrite/rewriteHandler.c:509 rewrite/rewriteManip.c:1018 +#: parser/parse_utilcmd.c:3175 parser/parse_utilcmd.c:3276 rewrite/rewriteHandler.c:508 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "" "les instructions conditionnelles UNION/INTERSECT/EXCEPT ne sont pas\n" "implémentées" -#: parser/parse_utilcmd.c:3191 +#: parser/parse_utilcmd.c:3193 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "la règle ON SELECT ne peut pas utiliser OLD" -#: parser/parse_utilcmd.c:3195 +#: parser/parse_utilcmd.c:3197 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "la règle ON SELECT ne peut pas utiliser NEW" -#: parser/parse_utilcmd.c:3204 +#: parser/parse_utilcmd.c:3206 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "la règle ON INSERT ne peut pas utiliser OLD" -#: parser/parse_utilcmd.c:3210 +#: parser/parse_utilcmd.c:3212 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "la règle ON INSERT ne peut pas utiliser NEW" -#: parser/parse_utilcmd.c:3238 +#: parser/parse_utilcmd.c:3240 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "ne peut référencer OLD dans une requête WITH" -#: parser/parse_utilcmd.c:3245 +#: parser/parse_utilcmd.c:3247 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "ne peut référencer NEW dans une requête WITH" -#: parser/parse_utilcmd.c:3704 +#: parser/parse_utilcmd.c:3706 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "clause DEFERRABLE mal placée" -#: parser/parse_utilcmd.c:3709 parser/parse_utilcmd.c:3724 +#: parser/parse_utilcmd.c:3711 parser/parse_utilcmd.c:3726 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "clauses DEFERRABLE/NOT DEFERRABLE multiples non autorisées" -#: parser/parse_utilcmd.c:3719 +#: parser/parse_utilcmd.c:3721 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "clause NOT DEFERRABLE mal placée" -#: parser/parse_utilcmd.c:3740 +#: parser/parse_utilcmd.c:3742 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "clause INITIALLY DEFERRED mal placée" -#: parser/parse_utilcmd.c:3745 parser/parse_utilcmd.c:3771 +#: parser/parse_utilcmd.c:3747 parser/parse_utilcmd.c:3773 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "clauses INITIALLY IMMEDIATE/DEFERRED multiples non autorisées" -#: parser/parse_utilcmd.c:3766 +#: parser/parse_utilcmd.c:3768 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "clause INITIALLY IMMEDIATE mal placée" -#: parser/parse_utilcmd.c:3957 +#: parser/parse_utilcmd.c:3959 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE spécifie un schéma (%s) différent de celui tout juste créé (%s)" -#: parser/parse_utilcmd.c:3992 +#: parser/parse_utilcmd.c:3994 #, c-format msgid "\"%s\" is not a partitioned table" msgstr "« %s » n'est pas une table partitionnée" -#: parser/parse_utilcmd.c:3999 +#: parser/parse_utilcmd.c:4001 #, c-format msgid "table \"%s\" is not partitioned" msgstr "la table « %s » n'est pas partitionné" -#: parser/parse_utilcmd.c:4006 +#: parser/parse_utilcmd.c:4008 #, c-format msgid "index \"%s\" is not partitioned" msgstr "l'index « %s » n'est pas partitionné" -#: parser/parse_utilcmd.c:4046 +#: parser/parse_utilcmd.c:4048 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "une table partitionnées par hash ne peut pas avoir de partition par défaut" -#: parser/parse_utilcmd.c:4063 +#: parser/parse_utilcmd.c:4065 #, c-format msgid "invalid bound specification for a hash partition" msgstr "spécification de limite invalide pour une partition par hash" -#: parser/parse_utilcmd.c:4069 partitioning/partbounds.c:4698 +#: parser/parse_utilcmd.c:4071 partitioning/partbounds.c:4698 #, c-format msgid "modulus for hash partition must be a positive integer" msgstr "le modulus pour une partition par hash doit être un entier positif" -#: parser/parse_utilcmd.c:4076 partitioning/partbounds.c:4706 +#: parser/parse_utilcmd.c:4078 partitioning/partbounds.c:4706 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "le modulus pour une partition par hash doit être inférieur au modulus" -#: parser/parse_utilcmd.c:4089 +#: parser/parse_utilcmd.c:4091 #, c-format msgid "invalid bound specification for a list partition" msgstr "spécification de limite invalide pour une partition par liste" -#: parser/parse_utilcmd.c:4142 +#: parser/parse_utilcmd.c:4144 #, c-format msgid "invalid bound specification for a range partition" msgstr "spécification de limite invalide pour une partition par intervalle" -#: parser/parse_utilcmd.c:4148 +#: parser/parse_utilcmd.c:4150 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM doit spécifier exactement une valeur par colonne de partitionnement" -#: parser/parse_utilcmd.c:4152 +#: parser/parse_utilcmd.c:4154 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO doit spécifier exactement une valeur par colonne de partitionnement" -#: parser/parse_utilcmd.c:4266 +#: parser/parse_utilcmd.c:4268 #, c-format msgid "cannot specify NULL in range bound" msgstr "ne peut pas spécifier NULL dans la limite de l'intervalle" -#: parser/parse_utilcmd.c:4315 +#: parser/parse_utilcmd.c:4317 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "chaque limite suivant MAXVALUE doit aussi être MAXVALUE" -#: parser/parse_utilcmd.c:4322 +#: parser/parse_utilcmd.c:4324 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "chaque limite suivant MINVALUE doit aussi être MINVALUE" -#: parser/parse_utilcmd.c:4365 +#: parser/parse_utilcmd.c:4367 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "la valeur spécifiée ne peut pas être convertie vers le type %s pour la colonne « %s »" @@ -17545,7 +17450,7 @@ msgstr "la partition « %s » est en conflit avec la partition par défaut exist msgid "every hash partition modulus must be a factor of the next larger modulus" msgstr "chaque modulo de partition hash doit être un facteur du prochain plus gros modulo" -#: partitioning/partbounds.c:2871 +#: partitioning/partbounds.c:2871 partitioning/partbounds.c:2902 #, c-format msgid "The new modulus %d is not a factor of %d, the modulus of existing partition \"%s\"." msgstr "" @@ -17555,11 +17460,6 @@ msgstr "" msgid "The new modulus %d is not divisible by %d, the modulus of existing partition \"%s\"." msgstr "" -#: partitioning/partbounds.c:2902 -#, c-format -msgid "The new modulus %d is not factor of %d, the modulus of existing partition \"%s\"." -msgstr "" - #: partitioning/partbounds.c:3015 #, c-format msgid "empty range bound specified for partition \"%s\"" @@ -17596,10 +17496,9 @@ msgid "number of partitioning columns (%d) does not match number of partition ke msgstr "le nombre de colonnes de partitionnement (%d) ne correspond pas au nombre de clés de partitionnement fourni (%d)" #: partitioning/partbounds.c:4759 -#, fuzzy, c-format -#| msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" +#, c-format msgid "column %d of the partition key has type %s, but supplied value is of type %s" -msgstr "la colonne %d de la clé de partitionnement a pour type « %s », mais la valeur fournie a pour type « %s »" +msgstr "la colonne %d de la clé de partitionnement a pour type %s, mais la valeur fournie est de type %s" #: partitioning/partbounds.c:4791 #, c-format @@ -17771,10 +17670,9 @@ msgid "could not try-lock semaphore: error code %lu" msgstr "n'a pas pu tenter le verrouillage de la sémaphore : code d'erreur %lu" #: port/win32_shmem.c:144 port/win32_shmem.c:155 port/win32_shmem.c:167 port/win32_shmem.c:183 -#, fuzzy, c-format -#| msgid "%s: could not open service \"%s\": error code %lu\n" +#, c-format msgid "could not enable user right \"%s\": error code %lu" -msgstr "%s : n'a pas pu ouvrir le service « %s » : code d'erreur %lu\n" +msgstr "n'a pas pu activer le droit utilisateur « %s » : code d'erreur %lu" #. translator: This is a term from Windows and should be translated to match the Windows localization. #: port/win32_shmem.c:146 port/win32_shmem.c:155 port/win32_shmem.c:167 port/win32_shmem.c:178 port/win32_shmem.c:180 port/win32_shmem.c:183 @@ -17792,10 +17690,9 @@ msgid "could not enable user right \"%s\"" msgstr "n'a pas pu activer le droit utilisateur « %s »" #: port/win32_shmem.c:179 -#, fuzzy, c-format -#| msgid "Assign Lock Pages in Memory user right to the Windows user account which runs PostgreSQL." +#, c-format msgid "Assign user right \"%s\" to the Windows user account which runs PostgreSQL." -msgstr "Assignez le droit d'utilisateur Lock Pages in Memory au compte d'utilisateur Windows qui fait tourner PostgreSQL." +msgstr "Assignez le droit d'utilisateur « %s » au compte d'utilisateur Windows qui fait tourner PostgreSQL." #: port/win32_shmem.c:237 #, c-format @@ -18011,156 +17908,155 @@ msgstr "la commande d'archivage a été terminée par le signal %d : %s" msgid "archive command exited with unrecognized status %d" msgstr "la commande d'archivage a quitté avec le statut non reconnu %d" -#: postmaster/pgstat.c:420 +#: postmaster/pgstat.c:417 #, c-format msgid "could not resolve \"localhost\": %s" msgstr "n'a pas pu résoudre « localhost » : %s" -#: postmaster/pgstat.c:443 +#: postmaster/pgstat.c:440 #, c-format msgid "trying another address for the statistics collector" msgstr "nouvelle tentative avec une autre adresse pour le récupérateur de statistiques" -#: postmaster/pgstat.c:452 +#: postmaster/pgstat.c:449 #, c-format msgid "could not create socket for statistics collector: %m" msgstr "n'a pas pu créer la socket pour le récupérateur de statistiques : %m" -#: postmaster/pgstat.c:464 +#: postmaster/pgstat.c:461 #, c-format msgid "could not bind socket for statistics collector: %m" msgstr "n'a pas pu lier la socket au récupérateur de statistiques : %m" -#: postmaster/pgstat.c:475 +#: postmaster/pgstat.c:472 #, c-format msgid "could not get address of socket for statistics collector: %m" msgstr "n'a pas pu obtenir l'adresse de la socket du récupérateur de statistiques : %m" -#: postmaster/pgstat.c:491 +#: postmaster/pgstat.c:488 #, c-format msgid "could not connect socket for statistics collector: %m" msgstr "n'a pas pu connecter la socket au récupérateur de statistiques : %m" -#: postmaster/pgstat.c:512 +#: postmaster/pgstat.c:509 #, c-format msgid "could not send test message on socket for statistics collector: %m" msgstr "" "n'a pas pu envoyer le message de tests sur la socket du récupérateur de\n" "statistiques : %m" -#: postmaster/pgstat.c:538 +#: postmaster/pgstat.c:535 #, c-format msgid "select() failed in statistics collector: %m" msgstr "échec du select() dans le récupérateur de statistiques : %m" -#: postmaster/pgstat.c:553 +#: postmaster/pgstat.c:550 #, c-format msgid "test message did not get through on socket for statistics collector" msgstr "" "le message de test n'a pas pu arriver sur la socket du récupérateur de\n" "statistiques : %m" -#: postmaster/pgstat.c:568 +#: postmaster/pgstat.c:565 #, c-format msgid "could not receive test message on socket for statistics collector: %m" msgstr "" "n'a pas pu recevoir le message de tests sur la socket du récupérateur de\n" "statistiques : %m" -#: postmaster/pgstat.c:578 +#: postmaster/pgstat.c:575 #, c-format msgid "incorrect test message transmission on socket for statistics collector" msgstr "" "transmission incorrecte du message de tests sur la socket du récupérateur de\n" "statistiques" -#: postmaster/pgstat.c:601 +#: postmaster/pgstat.c:598 #, c-format msgid "could not set statistics collector socket to nonblocking mode: %m" msgstr "" "n'a pas pu initialiser la socket du récupérateur de statistiques dans le mode\n" "non bloquant : %m" -#: postmaster/pgstat.c:645 +#: postmaster/pgstat.c:642 #, c-format msgid "disabling statistics collector for lack of working socket" msgstr "" "désactivation du récupérateur de statistiques à cause du manque de socket\n" "fonctionnel" -#: postmaster/pgstat.c:792 +#: postmaster/pgstat.c:789 #, c-format msgid "could not fork statistics collector: %m" msgstr "" "n'a pas pu lancer le processus fils correspondant au récupérateur de\n" "statistiques : %m" -#: postmaster/pgstat.c:1461 +#: postmaster/pgstat.c:1449 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "cible reset non reconnu : « %s »" -#: postmaster/pgstat.c:1462 -#, fuzzy, c-format -#| msgid "Target must be \"archiver\" or \"bgwriter\"." -msgid "Target must be \"archiver\", \"bgwriter\", \"wal\" or \"prefetch_recovery\"." -msgstr "La cible doit être « archiver » ou « bgwriter »." +#: postmaster/pgstat.c:1450 +#, c-format +msgid "Target must be \"archiver\", \"bgwriter\" or \"wal\"." +msgstr "La cible doit être « archiver », « bgwriter » ou « wal »." -#: postmaster/pgstat.c:3330 +#: postmaster/pgstat.c:3285 #, c-format msgid "could not read statistics message: %m" msgstr "n'a pas pu lire le message des statistiques : %m" -#: postmaster/pgstat.c:3680 postmaster/pgstat.c:3872 +#: postmaster/pgstat.c:3631 postmaster/pgstat.c:3816 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier temporaire des statistiques « %s » : %m" -#: postmaster/pgstat.c:3782 postmaster/pgstat.c:3917 +#: postmaster/pgstat.c:3726 postmaster/pgstat.c:3861 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "n'a pas pu écrire le fichier temporaire des statistiques « %s » : %m" -#: postmaster/pgstat.c:3791 postmaster/pgstat.c:3926 +#: postmaster/pgstat.c:3735 postmaster/pgstat.c:3870 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "n'a pas pu fermer le fichier temporaire des statistiques « %s » : %m" -#: postmaster/pgstat.c:3799 postmaster/pgstat.c:3934 +#: postmaster/pgstat.c:3743 postmaster/pgstat.c:3878 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "" "n'a pas pu renommer le fichier temporaire des statistiques « %s » en\n" "« %s » : %m" -#: postmaster/pgstat.c:4033 postmaster/pgstat.c:4311 postmaster/pgstat.c:4469 +#: postmaster/pgstat.c:3976 postmaster/pgstat.c:4242 postmaster/pgstat.c:4399 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier de statistiques « %s » : %m" -#: postmaster/pgstat.c:4045 postmaster/pgstat.c:4055 postmaster/pgstat.c:4076 postmaster/pgstat.c:4087 postmaster/pgstat.c:4098 postmaster/pgstat.c:4110 postmaster/pgstat.c:4132 postmaster/pgstat.c:4147 postmaster/pgstat.c:4217 postmaster/pgstat.c:4248 postmaster/pgstat.c:4323 postmaster/pgstat.c:4343 postmaster/pgstat.c:4361 postmaster/pgstat.c:4377 postmaster/pgstat.c:4395 postmaster/pgstat.c:4411 postmaster/pgstat.c:4481 postmaster/pgstat.c:4493 postmaster/pgstat.c:4505 postmaster/pgstat.c:4516 postmaster/pgstat.c:4527 postmaster/pgstat.c:4539 postmaster/pgstat.c:4564 postmaster/pgstat.c:4591 postmaster/pgstat.c:4604 +#: postmaster/pgstat.c:3988 postmaster/pgstat.c:3998 postmaster/pgstat.c:4019 postmaster/pgstat.c:4030 postmaster/pgstat.c:4041 postmaster/pgstat.c:4063 postmaster/pgstat.c:4078 postmaster/pgstat.c:4148 postmaster/pgstat.c:4179 postmaster/pgstat.c:4254 postmaster/pgstat.c:4274 postmaster/pgstat.c:4292 postmaster/pgstat.c:4308 postmaster/pgstat.c:4326 postmaster/pgstat.c:4342 postmaster/pgstat.c:4411 postmaster/pgstat.c:4423 postmaster/pgstat.c:4435 postmaster/pgstat.c:4446 postmaster/pgstat.c:4457 postmaster/pgstat.c:4482 postmaster/pgstat.c:4509 postmaster/pgstat.c:4522 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "fichier de statistiques « %s » corrompu" -#: postmaster/pgstat.c:4713 +#: postmaster/pgstat.c:4631 #, c-format msgid "statistics collector's time %s is later than backend local time %s" -msgstr "" +msgstr "l'heure du collecteur de statistiques %s est plus avancé que l'heure locale du processus serveur %s" -#: postmaster/pgstat.c:4743 +#: postmaster/pgstat.c:4654 #, c-format msgid "using stale statistics instead of current ones because stats collector is not responding" msgstr "" "utilise de vieilles statistiques à la place des actuelles car le collecteur de\n" "statistiques ne répond pas" -#: postmaster/pgstat.c:4870 +#: postmaster/pgstat.c:4781 #, c-format msgid "stats_timestamp %s is later than collector's time %s for database %u" -msgstr "" +msgstr "stats_timestamp %s est plus avancé que l'heure du collecteur %s pour la base de données %u" -#: postmaster/pgstat.c:5080 +#: postmaster/pgstat.c:4991 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "" @@ -18283,10 +18179,9 @@ msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Configurez la variable d'environnement LC_ALL avec une locale valide." #: postmaster/postmaster.c:1484 -#, fuzzy, c-format -#| msgid "%s: could not locate my own executable path\n" +#, c-format msgid "%s: could not locate my own executable path" -msgstr "%s : n'a pas pu localiser mon propre exécutable\n" +msgstr "%s : n'a pas pu localiser le chemin de mon propre exécutable" #: postmaster/postmaster.c:1491 #, c-format @@ -18317,7 +18212,7 @@ msgstr "échec de select() dans postmaster : %m" #: postmaster/postmaster.c:1854 #, c-format msgid "issuing SIGKILL to recalcitrant children" -msgstr "" +msgstr "exécution de SIGKILL pour les processus fils récalcitrants" #: postmaster/postmaster.c:1875 #, c-format @@ -18349,7 +18244,7 @@ msgstr "échec lors de l'envoi de la réponse à la négociation GSSAPI : %m" msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "protocole frontal %u.%u non supporté : le serveur supporte de %u.0 à %u.%u" -#: postmaster/postmaster.c:2171 utils/misc/guc.c:7146 utils/misc/guc.c:7182 utils/misc/guc.c:7252 utils/misc/guc.c:8584 utils/misc/guc.c:11540 utils/misc/guc.c:11581 +#: postmaster/postmaster.c:2171 utils/misc/guc.c:7092 utils/misc/guc.c:7128 utils/misc/guc.c:7198 utils/misc/guc.c:8530 utils/misc/guc.c:11486 utils/misc/guc.c:11527 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "valeur invalide pour le paramètre « %s » : « %s »" @@ -18382,10 +18277,9 @@ msgid "the database system is not yet accepting connections" msgstr "le système de bases de données n'accepte pas encore de connexions" #: postmaster/postmaster.c:2307 -#, fuzzy, c-format -#| msgid "consistent recovery state reached at %X/%X" +#, c-format msgid "Consistent recovery state has not been yet reached." -msgstr "état de restauration cohérent atteint à %X/%X" +msgstr "L'état de restauration cohérent n'a pas encore été atteint." #: postmaster/postmaster.c:2311 #, c-format @@ -18596,20 +18490,14 @@ msgid "could not execute server process \"%s\": %m" msgstr "n'a pas pu exécuter le processus serveur « %s » : %m" #: postmaster/postmaster.c:4678 -#, fuzzy, c-format -#| msgid "could not close handle to backend parameter variables: error code %lu\n" +#, c-format msgid "could not create backend parameter file mapping: error code %lu" -msgstr "" -"n'a pas pu fermer le lien vers les variables des paramètres du serveur :\n" -"code d'erreur %lu\n" +msgstr "n'a pas pu créer le lien vers le fichier de paramètres du processus serveur : code d'erreur %lu" #: postmaster/postmaster.c:4687 -#, fuzzy, c-format -#| msgid "could not map view of backend variables: error code %lu\n" +#, c-format msgid "could not map backend parameter memory: error code %lu" -msgstr "" -"n'a pas pu exécuter \"map\" la vue des variables serveurs : code\n" -"d'erreur %lu\n" +msgstr "n'a pas pu mapper la mémoire des paramètres du processus serveur : code d'erreur %lu" #: postmaster/postmaster.c:4714 #, c-format @@ -18622,20 +18510,14 @@ msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "échec de l'appel à CreateProcess() : %m (code d'erreur %lu)" #: postmaster/postmaster.c:4759 -#, fuzzy, c-format -#| msgid "could not unmap view of backend variables: error code %lu\n" +#, c-format msgid "could not unmap view of backend parameter file: error code %lu" msgstr "" -"n'a pas pu exécuter \"unmap\" sur la vue des variables serveurs : code\n" -"d'erreur %lu\n" #: postmaster/postmaster.c:4763 -#, fuzzy, c-format -#| msgid "could not close handle to backend parameter variables: error code %lu\n" +#, c-format msgid "could not close handle to backend parameter file: error code %lu" -msgstr "" -"n'a pas pu fermer le lien vers les variables des paramètres du serveur :\n" -"code d'erreur %lu\n" +msgstr "n'a pas pu fermer le lien vers le fichier de paramètres du processus serveur : code d'erreur %lu" #: postmaster/postmaster.c:4785 #, c-format @@ -18950,10 +18832,9 @@ msgid "could not verify checksum in file \"%s\", block %u: read buffer size %d a msgstr "n'a pas pu vérifier la somme de contrôle dans le fichier « %s », bloc %u : la taille de tampon de lecture %d et la taille de bloc %d diffèrent" #: replication/basebackup.c:1751 -#, fuzzy, c-format -#| msgid "checksum verification failed in file \"%s\", block %d: calculated %X but expected %X" +#, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated %X but expected %X" -msgstr "échec de la vérification de la somme de contrôle dans le fichier « %s », bloc %d : calculé %X, alors que le bloc contient %X" +msgstr "échec de la vérification de la somme de contrôle dans le fichier « %s », bloc %u : calculé %X, mais attendu %X" #: replication/basebackup.c:1758 #, c-format @@ -19139,94 +19020,90 @@ msgstr "le décodage logique requiert une connexion à une base" msgid "logical decoding cannot be used while in recovery" msgstr "le décodage logique ne peut pas être utilisé lors de la restauration" -#: replication/logical/logical.c:350 replication/logical/logical.c:503 +#: replication/logical/logical.c:347 replication/logical/logical.c:499 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "ne peut pas utiliser un slot de réplication physique pour le décodage logique" -#: replication/logical/logical.c:355 replication/logical/logical.c:508 +#: replication/logical/logical.c:352 replication/logical/logical.c:504 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "le slot de réplication « %s » n'a pas été créé dans cette base de données" -#: replication/logical/logical.c:362 +#: replication/logical/logical.c:359 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "ne peut pas créer un slot de réplication logique dans une transaction qui a fait des écritures" -#: replication/logical/logical.c:553 +#: replication/logical/logical.c:549 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "début du décodage logique pour le slot « %s »" -#: replication/logical/logical.c:555 +#: replication/logical/logical.c:551 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "Envoi des transactions validées après %X/%X, lecture des journaux à partir de %X/%X." -#: replication/logical/logical.c:706 +#: replication/logical/logical.c:696 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "slot « %s », plugin de sortie « %s », dans la fonction d'appel %s, associé au LSN %X/%X" -#: replication/logical/logical.c:712 +#: replication/logical/logical.c:702 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "slot « %s », plugin de sortie « %s », dans la fonction d'appel %s" -#: replication/logical/logical.c:878 +#: replication/logical/logical.c:868 #, c-format msgid "logical replication at prepare time requires begin_prepare_cb callback" -msgstr "" +msgstr "la réplication logique lors de la préparation requiert la fonction begin_prepare_cb" -#: replication/logical/logical.c:921 +#: replication/logical/logical.c:911 #, c-format msgid "logical replication at prepare time requires prepare_cb callback" -msgstr "" +msgstr "la réplication logique lors de la préparation requiert la fonction prepare_cb" -#: replication/logical/logical.c:964 +#: replication/logical/logical.c:954 #, c-format msgid "logical replication at prepare time requires commit_prepared_cb callback" -msgstr "" +msgstr "la réplication logique lors de la préparation requiert la fonction commit_prepared_cb" -#: replication/logical/logical.c:1008 +#: replication/logical/logical.c:998 #, c-format msgid "logical replication at prepare time requires rollback_prepared_cb callback" -msgstr "" +msgstr "la réplication logique lors de la préparation requiert la fonction rollback_prepared_cb" -#: replication/logical/logical.c:1230 -#, fuzzy, c-format -#| msgid "logical decoding requires a database connection" +#: replication/logical/logical.c:1220 +#, c-format msgid "logical streaming requires a stream_start_cb callback" -msgstr "le décodage logique requiert une connexion à une base" +msgstr "le flux logique requiert une fonction stream_start_cb" -#: replication/logical/logical.c:1276 -#, fuzzy, c-format -#| msgid "logical decoding requires a database connection" +#: replication/logical/logical.c:1266 +#, c-format msgid "logical streaming requires a stream_stop_cb callback" -msgstr "le décodage logique requiert une connexion à une base" +msgstr "le flux logique requiert une fonction stream_stop_cb" -#: replication/logical/logical.c:1315 -#, fuzzy, c-format -#| msgid "logical decoding requires a database connection" +#: replication/logical/logical.c:1305 +#, c-format msgid "logical streaming requires a stream_abort_cb callback" -msgstr "le décodage logique requiert une connexion à une base" +msgstr "le flux logique requiert une fonction stream_abort_cb" -#: replication/logical/logical.c:1358 +#: replication/logical/logical.c:1348 #, c-format msgid "logical streaming at prepare time requires a stream_prepare_cb callback" -msgstr "" +msgstr "la réplication logique lors de la préparation requiert la fonction stream_prepare_cb" -#: replication/logical/logical.c:1397 +#: replication/logical/logical.c:1387 #, c-format msgid "logical streaming requires a stream_commit_cb callback" -msgstr "" +msgstr "la réplication logique requiert la fonction stream_commit_cb" -#: replication/logical/logical.c:1443 -#, fuzzy, c-format -#| msgid "logical decoding requires a database connection" +#: replication/logical/logical.c:1433 +#, c-format msgid "logical streaming requires a stream_change_cb callback" -msgstr "le décodage logique requiert une connexion à une base" +msgstr "le flux logique requiert une fonction stream_change_cb" #: replication/logical/logicalfuncs.c:104 replication/slotfuncs.c:34 #, c-format @@ -19260,18 +19137,17 @@ msgstr "le tableau ne doit pas contenir de valeurs NULL" msgid "array must have even number of elements" msgstr "le tableau doit avoir un nombre pair d'éléments" -#: replication/logical/logicalfuncs.c:250 +#: replication/logical/logicalfuncs.c:251 #, c-format msgid "can no longer get changes from replication slot \"%s\"" msgstr "ne peut plus obtenir de modifications à partir du slot de réplication « %s »" -#: replication/logical/logicalfuncs.c:252 replication/slotfuncs.c:654 -#, fuzzy, c-format -#| msgid "This slot has never previously reserved WAL, or has been invalidated." +#: replication/logical/logicalfuncs.c:253 replication/slotfuncs.c:650 +#, c-format msgid "This slot has never previously reserved WAL, or it has been invalidated." msgstr "Ce slot n'a jamais réservé de WAL précédemment, ou a été invalidé." -#: replication/logical/logicalfuncs.c:264 +#: replication/logical/logicalfuncs.c:265 #, c-format msgid "logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data" msgstr "le plugin de sortie « %s » pour le décodage logique produit une sortie binaire, mais la fonction « %s » attend des données texte" @@ -19317,10 +19193,9 @@ msgid "could not find free replication state, increase max_replication_slots" msgstr "n'a pas pu trouver d'état de réplication libre, augmentez max_replication_slots" #: replication/logical/origin.c:790 -#, fuzzy, c-format -#| msgid "recovery restart point at %X/%X" +#, c-format msgid "recovered replication state of node %u to %X/%X" -msgstr "la ré-exécution en restauration commence à %X/%X" +msgstr "restauration de l'état de réplication du nœud %u à %X/%X" #: replication/logical/origin.c:800 #, c-format @@ -19365,20 +19240,19 @@ msgstr "Les noms d'origine commençant par « pg_ » sont réservés." #: replication/logical/relation.c:248 #, c-format msgid "\"%s\"" -msgstr "" +msgstr "\"%s\"" #: replication/logical/relation.c:251 #, c-format msgid ", \"%s\"" -msgstr "" +msgstr ", \"%s\"" #: replication/logical/relation.c:257 -#, fuzzy, c-format -#| msgid "logical replication target relation \"%s.%s\" is missing some replicated columns" +#, c-format msgid "logical replication target relation \"%s.%s\" is missing replicated column: %s" msgid_plural "logical replication target relation \"%s.%s\" is missing replicated columns: %s" -msgstr[0] "il manque des colonnes répliquées dans la relation cible « %s.%s » de réplication logique" -msgstr[1] "il manque des colonnes répliquées dans la relation cible « %s.%s » de réplication logique" +msgstr[0] "il manque une colonne répliquée à la relation cible de la réplication logique « %s.%s » : %s" +msgstr[1] "il manque plusieurs colonnes répliquées à la relation cible de la réplication logique « %s.%s » : %s" #: replication/logical/relation.c:337 #, c-format @@ -19390,29 +19264,29 @@ msgstr "la relation cible de la réplication logique « %s.%s » n'existe pas" msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "la relation cible « %s.%s » de réplication logique utilise des colonnes systèmes dans l'index REPLICA IDENTITY" -#: replication/logical/reorderbuffer.c:3762 +#: replication/logical/reorderbuffer.c:3773 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "n'a pas pu écrire dans le fichier pour le XID %u : %m" -#: replication/logical/reorderbuffer.c:4102 replication/logical/reorderbuffer.c:4127 +#: replication/logical/reorderbuffer.c:4116 replication/logical/reorderbuffer.c:4141 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "n'a pas pu lire le fichier « reorderbuffer spill » : %m" -#: replication/logical/reorderbuffer.c:4106 replication/logical/reorderbuffer.c:4131 +#: replication/logical/reorderbuffer.c:4120 replication/logical/reorderbuffer.c:4145 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "" "n'a pas pu lire à partir du fichier « reorderbuffer spill » : a lu seulement %d octets\n" "sur %u" -#: replication/logical/reorderbuffer.c:4379 +#: replication/logical/reorderbuffer.c:4393 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "n'a pas pu supprimer le fichier « %s » pendant la suppression de pg_replslot/%s/xid* : %m" -#: replication/logical/reorderbuffer.c:4869 +#: replication/logical/reorderbuffer.c:4883 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "n'a pas pu lire à partir du fichier « %s » : lu %d octets au lieu de %d octets" @@ -19507,10 +19381,9 @@ msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "n'a pas pu lancer la copie initiale du contenu de la table « %s.%s » : %s" #: replication/logical/tablesync.c:1046 -#, fuzzy, c-format -#| msgid "table copy could not start transaction on publisher" +#, c-format msgid "table copy could not start transaction on publisher: %s" -msgstr "la copie de table n'a pas pu démarrer la transaction sur le publieur" +msgstr "la copie de table n'a pas pu démarrer la transaction sur le publieur : %s" #: replication/logical/tablesync.c:1094 #, c-format @@ -19518,10 +19391,9 @@ msgid "replication origin \"%s\" already exists" msgstr "l'origine de réplication « %s » existe déjà" #: replication/logical/tablesync.c:1106 -#, fuzzy, c-format -#| msgid "table copy could not finish transaction on publisher" +#, c-format msgid "table copy could not finish transaction on publisher: %s" -msgstr "la copie de table n'a pas pu finir la transaction sur le publieur" +msgstr "la copie de table n'a pas pu finir la transaction sur le publieur : %s" #: replication/logical/worker.c:490 #, c-format @@ -19529,10 +19401,9 @@ msgid "processing remote data for replication target relation \"%s.%s\" column \ msgstr "traitement des données distantes pour la relation cible « %s.%s » de réplication logique, colonne « %s », type distant %s, type local %s" #: replication/logical/worker.c:570 replication/logical/worker.c:699 -#, fuzzy, c-format -#| msgid "incorrect binary data format in function argument %d" +#, c-format msgid "incorrect binary data format in logical replication column %d" -msgstr "format des données binaires incorrect dans l'argument de la fonction %d" +msgstr "format des données binaires incorrect dans la colonne de réplication logique %d" #: replication/logical/worker.c:778 #, c-format @@ -19580,10 +19451,9 @@ msgid "logical replication apply worker for subscription \"%s\" will stop becaus msgstr "le processus apply de réplication logique pour la souscription « %s » s'arrêtera car la souscription a été désactivée" #: replication/logical/worker.c:2478 -#, fuzzy, c-format -#| msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" +#, c-format msgid "logical replication apply worker for subscription \"%s\" will restart because of a parameter change" -msgstr "le processus apply de réplication logique pour la souscription « %s » redémarrera car la souscription a été renommée" +msgstr "le processus apply de réplication logique pour la souscription « %s » redémarrera car un paramètre a été modifié" #: replication/logical/worker.c:2641 replication/logical/worker.c:2663 #, c-format @@ -19646,16 +19516,14 @@ msgid "publication_names parameter missing" msgstr "paramètre publication_names manquant" #: replication/pgoutput/pgoutput.c:315 -#, fuzzy, c-format -#| msgid "client sent proto_version=%d but we only support protocol %d or higher" +#, c-format msgid "requested proto_version=%d does not support streaming, need %d or higher" -msgstr "le client a envoyé proto_version=%d mais nous supportons seulement le protocole %d et les protocoles supérieurs" +msgstr "proto_version=%d demandé, mais ne supporte par le flux, nécessite %d ou supérieur" #: replication/pgoutput/pgoutput.c:320 -#, fuzzy, c-format -#| msgid "integer of size %lu not supported by pqPutInt" +#, c-format msgid "streaming requested, but not supported by output plugin" -msgstr "entier de taille %lu non supporté par pqPutInt" +msgstr "flux demandé, mais non supporté par le plugin de sortie" #: replication/slot.c:182 #, c-format @@ -19692,7 +19560,7 @@ msgstr "tous les slots de réplication sont utilisés" msgid "Free one or increase max_replication_slots." msgstr "Libérez un slot ou augmentez max_replication_slots." -#: replication/slot.c:424 replication/slotfuncs.c:765 utils/adt/pgstatfuncs.c:2227 +#: replication/slot.c:424 replication/slotfuncs.c:761 utils/adt/pgstatfuncs.c:2227 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "le slot de réplication « %s » n'existe pas" @@ -19772,52 +19640,52 @@ msgstr "Modifiez wal_level pour valoir replica ou supérieur." msgid "too many replication slots active before shutdown" msgstr "trop de slots de réplication actifs avant l'arrêt" -#: replication/slotfuncs.c:630 +#: replication/slotfuncs.c:626 #, c-format msgid "invalid target WAL LSN" msgstr "WAL LSN cible invalide" -#: replication/slotfuncs.c:652 +#: replication/slotfuncs.c:648 #, c-format msgid "replication slot \"%s\" cannot be advanced" msgstr "le slot de réplication « %s » ne peut pas être avancé" -#: replication/slotfuncs.c:670 +#: replication/slotfuncs.c:666 #, c-format msgid "cannot advance replication slot to %X/%X, minimum is %X/%X" msgstr "impossible d'avancer le slot de réplication vers %X/%X, le minimum est %X/%X" -#: replication/slotfuncs.c:777 +#: replication/slotfuncs.c:773 #, c-format msgid "cannot copy physical replication slot \"%s\" as a logical replication slot" msgstr "ne peut pas copier le slot de réplication physique « %s » en tant que slot de réplication logique" -#: replication/slotfuncs.c:779 +#: replication/slotfuncs.c:775 #, c-format msgid "cannot copy logical replication slot \"%s\" as a physical replication slot" msgstr "ne peut pas copier le slot de réplication logique « %s » en tant que slot de réplication physique" -#: replication/slotfuncs.c:786 +#: replication/slotfuncs.c:782 #, c-format msgid "cannot copy a replication slot that doesn't reserve WAL" msgstr "ne peut pas copier un slot de réplication qui n'a pas auparavant réservé de WAL" -#: replication/slotfuncs.c:863 +#: replication/slotfuncs.c:859 #, c-format msgid "could not copy replication slot \"%s\"" msgstr "n'a pas pu copier le slot de réplication « %s »" -#: replication/slotfuncs.c:865 +#: replication/slotfuncs.c:861 #, c-format msgid "The source replication slot was modified incompatibly during the copy operation." msgstr "Le slot de réplication source a été modifié de manière incompatible durant l'opération de copie." -#: replication/slotfuncs.c:871 +#: replication/slotfuncs.c:867 #, c-format msgid "cannot copy unfinished logical replication slot \"%s\"" msgstr "ne peut pas copier le slot de réplication logique non terminé « %s »" -#: replication/slotfuncs.c:873 +#: replication/slotfuncs.c:869 #, c-format msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "Ré-essayez quand la valeur de confirmed_flush_lsn pour le slot de réplication source est valide." @@ -19955,109 +19823,109 @@ msgstr "n'a pas pu se déplacer au début du fichier « %s » : %m" msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "IDENTIFY_SYSTEM n'a pas été exécuté avant START_REPLICATION" -#: replication/walsender.c:605 +#: replication/walsender.c:608 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "ne peut pas utiliser un slot de réplication logique pour une réplication physique" -#: replication/walsender.c:674 +#: replication/walsender.c:677 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "le point de reprise %X/%X de la timeline %u n'est pas dans l'historique du serveur" -#: replication/walsender.c:677 +#: replication/walsender.c:680 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "L'historique du serveur a changé à partir de la timeline %u à %X/%X." -#: replication/walsender.c:721 +#: replication/walsender.c:724 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "le point de reprise requis %X/%X est devant la position de vidage des WAL de ce serveur %X/%X" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:977 +#: replication/walsender.c:974 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s ne doit pas être appelé depuis une transaction" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:987 +#: replication/walsender.c:984 #, c-format msgid "%s must be called inside a transaction" msgstr "%s doit être appelé au sein d'une transaction" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:993 +#: replication/walsender.c:990 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s doit être appelé dans le niveau d'isolation REPEATABLE READ" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:999 +#: replication/walsender.c:996 #, c-format msgid "%s must be called before any query" msgstr "%s doit être appelé avant toute requête" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1005 +#: replication/walsender.c:1002 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s ne doit pas être appelé depuis une sous-transaction" -#: replication/walsender.c:1147 +#: replication/walsender.c:1145 #, c-format msgid "cannot read from logical replication slot \"%s\"" msgstr "ne peut pas lire à partir du slot de réplication logique « %s »" -#: replication/walsender.c:1149 +#: replication/walsender.c:1147 #, c-format msgid "This slot has been invalidated because it exceeded the maximum reserved size." msgstr "Ce slot a été invalidé parce qu'il dépassait la taille maximale réservée." -#: replication/walsender.c:1159 +#: replication/walsender.c:1157 #, c-format msgid "terminating walsender process after promotion" msgstr "arrêt du processus walreceiver suite promotion" -#: replication/walsender.c:1524 +#: replication/walsender.c:1523 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "ne peut pas exécuter de nouvelles commandes alors que le walsender est en mode d'arrêt" -#: replication/walsender.c:1561 +#: replication/walsender.c:1560 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "ne peut pas exécuter des commandes SQL dans le walsender pour la réplication physique" -#: replication/walsender.c:1584 +#: replication/walsender.c:1583 #, c-format msgid "received replication command: %s" msgstr "commande de réplication reçu : %s" -#: replication/walsender.c:1592 tcop/fastpath.c:202 tcop/postgres.c:1078 tcop/postgres.c:1430 tcop/postgres.c:1691 tcop/postgres.c:2176 tcop/postgres.c:2586 tcop/postgres.c:2665 +#: replication/walsender.c:1591 tcop/fastpath.c:208 tcop/postgres.c:1078 tcop/postgres.c:1430 tcop/postgres.c:1691 tcop/postgres.c:2176 tcop/postgres.c:2586 tcop/postgres.c:2665 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "" "la transaction est annulée, les commandes sont ignorées jusqu'à la fin du bloc\n" "de la transaction" -#: replication/walsender.c:1727 replication/walsender.c:1762 +#: replication/walsender.c:1726 replication/walsender.c:1761 #, c-format msgid "unexpected EOF on standby connection" msgstr "fin de fichier (EOF) inattendue de la connexion du serveur en attente" -#: replication/walsender.c:1750 +#: replication/walsender.c:1749 #, c-format msgid "invalid standby message type \"%c\"" msgstr "type de message « %c » invalide pour le serveur en standby" -#: replication/walsender.c:1839 +#: replication/walsender.c:1838 #, c-format msgid "unexpected message type \"%c\"" msgstr "type de message « %c » inattendu" -#: replication/walsender.c:2252 +#: replication/walsender.c:2251 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "arrêt du processus walreceiver suite à l'expiration du délai de réplication" @@ -20278,196 +20146,196 @@ msgstr "la règle « %s » de la relation « %s » n'existe pas" msgid "renaming an ON SELECT rule is not allowed" msgstr "le renommage d'une règle ON SELECT n'est pas autorisé" -#: rewrite/rewriteHandler.c:552 +#: rewrite/rewriteHandler.c:551 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "Le nom de la requête WITH « %s » apparaît à la fois dans l'action d'une règle et dans la requête en cours de ré-écriture" -#: rewrite/rewriteHandler.c:612 +#: rewrite/rewriteHandler.c:611 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "ne peut pas avoir des listes RETURNING dans plusieurs règles" -#: rewrite/rewriteHandler.c:845 rewrite/rewriteHandler.c:884 +#: rewrite/rewriteHandler.c:843 rewrite/rewriteHandler.c:882 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "ne peut pas insérer une valeur pas par défaut dans la colonne « %s »" -#: rewrite/rewriteHandler.c:847 rewrite/rewriteHandler.c:913 +#: rewrite/rewriteHandler.c:845 rewrite/rewriteHandler.c:911 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "La colonne « %s » est une colonne d'identité définie comme GENERATED ALWAYS." -#: rewrite/rewriteHandler.c:849 +#: rewrite/rewriteHandler.c:847 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Utilisez OVERRIDING SYSTEM VALUE pour surcharger." -#: rewrite/rewriteHandler.c:911 rewrite/rewriteHandler.c:919 +#: rewrite/rewriteHandler.c:909 rewrite/rewriteHandler.c:917 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "la colonne « %s » peut seulement être mise à jour en DEFAULT" -#: rewrite/rewriteHandler.c:1066 rewrite/rewriteHandler.c:1084 +#: rewrite/rewriteHandler.c:1064 rewrite/rewriteHandler.c:1082 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "affectations multiples pour la même colonne « %s »" -#: rewrite/rewriteHandler.c:2086 rewrite/rewriteHandler.c:3904 +#: rewrite/rewriteHandler.c:2084 rewrite/rewriteHandler.c:3898 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "récursion infinie détectée dans les règles de la relation « %s »" -#: rewrite/rewriteHandler.c:2171 +#: rewrite/rewriteHandler.c:2169 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "récursion infinie détectée dans la politique pour la relation « %s »" -#: rewrite/rewriteHandler.c:2491 +#: rewrite/rewriteHandler.c:2489 msgid "Junk view columns are not updatable." msgstr "Les colonnes « junk » des vues ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2496 +#: rewrite/rewriteHandler.c:2494 msgid "View columns that are not columns of their base relation are not updatable." msgstr "Les colonnes des vues qui ne font pas référence à des colonnes de la relation de base ne sont pas automatiquement modifiables." -#: rewrite/rewriteHandler.c:2499 +#: rewrite/rewriteHandler.c:2497 msgid "View columns that refer to system columns are not updatable." msgstr "Les colonnes des vues qui font référence à des colonnes systèmes ne sont pas automatiquement modifiables." -#: rewrite/rewriteHandler.c:2502 +#: rewrite/rewriteHandler.c:2500 msgid "View columns that return whole-row references are not updatable." msgstr "Les colonnes de vue qui font références à des lignes complètes ne sont pas automatiquement modifiables." -#: rewrite/rewriteHandler.c:2563 +#: rewrite/rewriteHandler.c:2561 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Les vues contenant DISTINCT ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2566 +#: rewrite/rewriteHandler.c:2564 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Les vues contenant GROUP BY ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2569 +#: rewrite/rewriteHandler.c:2567 msgid "Views containing HAVING are not automatically updatable." msgstr "Les vues contenant HAVING ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2572 +#: rewrite/rewriteHandler.c:2570 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "Les vues contenant UNION, INTERSECT ou EXCEPT ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2575 +#: rewrite/rewriteHandler.c:2573 msgid "Views containing WITH are not automatically updatable." msgstr "Les vues contenant WITH ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2578 +#: rewrite/rewriteHandler.c:2576 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Les vues contenant LIMIT ou OFFSET ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2590 +#: rewrite/rewriteHandler.c:2588 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Les vues qui renvoient des fonctions d'agrégat ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2593 +#: rewrite/rewriteHandler.c:2591 msgid "Views that return window functions are not automatically updatable." msgstr "Les vues qui renvoient des fonctions de fenêtrage ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2596 +#: rewrite/rewriteHandler.c:2594 msgid "Views that return set-returning functions are not automatically updatable." msgstr "Les vues qui renvoient des fonctions à plusieurs lignes ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2603 rewrite/rewriteHandler.c:2607 rewrite/rewriteHandler.c:2615 +#: rewrite/rewriteHandler.c:2601 rewrite/rewriteHandler.c:2605 rewrite/rewriteHandler.c:2613 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "Les vues qui lisent plusieurs tables ou vues ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2618 +#: rewrite/rewriteHandler.c:2616 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Les vues contenant TABLESAMPLE ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2642 +#: rewrite/rewriteHandler.c:2640 msgid "Views that have no updatable columns are not automatically updatable." msgstr "Les vues qui possèdent des colonnes non modifiables ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:3119 +#: rewrite/rewriteHandler.c:3117 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "ne peut pas insérer dans la colonne « %s » de la vue « %s »" -#: rewrite/rewriteHandler.c:3127 +#: rewrite/rewriteHandler.c:3125 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "ne peut pas mettre à jour la colonne « %s » de la vue « %s »" -#: rewrite/rewriteHandler.c:3605 +#: rewrite/rewriteHandler.c:3603 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "les règles DO INSTEAD NOTHING ne sont pas supportées par les instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3619 +#: rewrite/rewriteHandler.c:3617 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "" "les règles DO INSTEAD conditionnelles ne sont pas supportées par les\n" "instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3623 +#: rewrite/rewriteHandler.c:3621 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "les règles DO ALSO ne sont pas supportées par les instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3628 +#: rewrite/rewriteHandler.c:3626 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "" "les règles DO INSTEAD multi-instructions ne sont pas supportées pour les\n" "instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3832 rewrite/rewriteHandler.c:3840 rewrite/rewriteHandler.c:3848 +#: rewrite/rewriteHandler.c:3826 rewrite/rewriteHandler.c:3834 rewrite/rewriteHandler.c:3842 #, c-format msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "Les vues contenant des règles DO INSTEAD conditionnelles ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:3941 +#: rewrite/rewriteHandler.c:3935 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "ne peut pas exécuter INSERT RETURNING sur la relation « %s »" -#: rewrite/rewriteHandler.c:3943 +#: rewrite/rewriteHandler.c:3937 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "" "Vous avez besoin d'une règle ON INSERT DO INSTEAD sans condition avec une\n" "clause RETURNING." -#: rewrite/rewriteHandler.c:3948 +#: rewrite/rewriteHandler.c:3942 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "ne peut pas exécuter UPDATE RETURNING sur la relation « %s »" -#: rewrite/rewriteHandler.c:3950 +#: rewrite/rewriteHandler.c:3944 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "" "Vous avez besoin d'une règle ON UPDATE DO INSTEAD sans condition avec une\n" "clause RETURNING." -#: rewrite/rewriteHandler.c:3955 +#: rewrite/rewriteHandler.c:3949 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "ne peut pas exécuter DELETE RETURNING sur la relation « %s »" -#: rewrite/rewriteHandler.c:3957 +#: rewrite/rewriteHandler.c:3951 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "" "Vous avez besoin d'une règle ON DELETE DO INSTEAD sans condition avec une\n" "clause RETURNING." -#: rewrite/rewriteHandler.c:3975 +#: rewrite/rewriteHandler.c:3969 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "INSERT avec une clause ON CONFLICT ne peut pas être utilisée avec une table qui a des règles pour INSERT ou UPDATE" -#: rewrite/rewriteHandler.c:4032 +#: rewrite/rewriteHandler.c:4026 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "WITH ne peut pas être utilisé dans une requête réécrite par des règles en plusieurs requêtes" @@ -20968,7 +20836,7 @@ msgstr "doit être un membre du rôle dont la requête est en cours d'annulation #: storage/ipc/signalfuncs.c:164 #, c-format msgid "could not check the existence of the backend with PID %d: %m" -msgstr "" +msgstr "n'a pas pu vérifier l'existence du processus serveur de PID %d : %m" #: storage/ipc/signalfuncs.c:182 #, c-format @@ -21002,16 +20870,14 @@ msgid "rotation not possible because log collection not active" msgstr "rotation impossible car la récupération des journaux applicatifs n'est pas activée" #: storage/ipc/standby.c:305 -#, fuzzy, c-format -#| msgid "process %d still waiting for %s on %s after %ld.%03d ms" +#, c-format msgid "recovery still waiting after %ld.%03d ms: %s" -msgstr "le processus %d est toujours en attente de %s sur %s après %ld.%03d ms" +msgstr "restauration toujours en attente après %ld.%03d ms : %s" #: storage/ipc/standby.c:314 -#, fuzzy, c-format -#| msgid "process %d still waiting for %s on %s after %ld.%03d ms" +#, c-format msgid "recovery finished waiting after %ld.%03d ms: %s" -msgstr "le processus %d est toujours en attente de %s sur %s après %ld.%03d ms" +msgstr "la restauration a fini d'attendre après %ld.%03d ms : %s" #: storage/ipc/standby.c:878 tcop/postgres.c:3307 #, c-format @@ -21403,41 +21269,46 @@ msgstr "n'a pas pu ouvrir le fichier « %s » (bloc cible %u) : le segment préc msgid "could not open file \"%s\" (target block %u): %m" msgstr "n'a pas pu ouvrir le fichier « %s » (bloc cible %u) : %m" -#: tcop/fastpath.c:227 +#: tcop/fastpath.c:148 +#, c-format +msgid "cannot call function %s via fastpath interface" +msgstr "ne peut pas appeler la fonction %s via l'interface fastpath" + +#: tcop/fastpath.c:233 #, c-format msgid "fastpath function call: \"%s\" (OID %u)" msgstr "appel de fonction fastpath : « %s » (OID %u)" -#: tcop/fastpath.c:306 tcop/postgres.c:1298 tcop/postgres.c:1556 tcop/postgres.c:2015 tcop/postgres.c:2252 +#: tcop/fastpath.c:312 tcop/postgres.c:1298 tcop/postgres.c:1556 tcop/postgres.c:2015 tcop/postgres.c:2252 #, c-format msgid "duration: %s ms" msgstr "durée : %s ms" -#: tcop/fastpath.c:310 +#: tcop/fastpath.c:316 #, c-format msgid "duration: %s ms fastpath function call: \"%s\" (OID %u)" msgstr "durée : %s ms, appel de fonction fastpath : « %s » (OID %u)" -#: tcop/fastpath.c:346 +#: tcop/fastpath.c:352 #, c-format msgid "function call message contains %d arguments but function requires %d" msgstr "" "le message d'appel de la fonction contient %d arguments mais la fonction en\n" "requiert %d" -#: tcop/fastpath.c:354 +#: tcop/fastpath.c:360 #, c-format msgid "function call message contains %d argument formats but %d arguments" msgstr "" "le message d'appel de la fonction contient %d formats d'argument mais %d\n" " arguments" -#: tcop/fastpath.c:378 +#: tcop/fastpath.c:384 #, c-format msgid "invalid argument size %d in function call message" msgstr "taille de l'argument %d invalide dans le message d'appel de la fonction" -#: tcop/fastpath.c:441 +#: tcop/fastpath.c:447 #, c-format msgid "incorrect binary data format in function argument %d" msgstr "format des données binaires incorrect dans l'argument de la fonction %d" @@ -21578,10 +21449,9 @@ msgid "unnamed portal parameter $%d" msgstr "paramètre de portail non nommé $%d" #: tcop/postgres.c:2871 -#, fuzzy, c-format -#| msgid "terminating connection due to unexpected postmaster exit" +#, c-format msgid "terminating connection because of unexpected SIGQUIT signal" -msgstr "arrêt des connexions suite à un arrêt inatendu du postmaster" +msgstr "arrêt des connexions suite à un signal SIGQUIT inattendu" #: tcop/postgres.c:2877 #, c-format @@ -21604,10 +21474,9 @@ msgstr "" "données et de relancer votre commande." #: tcop/postgres.c:2889 -#, fuzzy, c-format -#| msgid "terminating connection due to administrator command" +#, c-format msgid "terminating connection due to immediate shutdown command" -msgstr "arrêt des connexions suite à la demande de l'administrateur" +msgstr "arrêt des connexions suite à la commande d'arrêt immédiat" #: tcop/postgres.c:2975 #, c-format @@ -21675,10 +21544,9 @@ msgid "terminating connection due to idle-in-transaction timeout" msgstr "arrêt des connexions suite à l'expiration du délai d'inactivité en transaction" #: tcop/postgres.c:3346 -#, fuzzy, c-format -#| msgid "terminating connection due to idle-in-transaction timeout" +#, c-format msgid "terminating connection due to idle-session timeout" -msgstr "arrêt des connexions suite à l'expiration du délai d'inactivité en transaction" +msgstr "arrêt des connexions suite à l'expiration du délai d'inactivité de la session" #: tcop/postgres.c:3465 #, c-format @@ -22157,12 +22025,12 @@ msgstr "la fonction « %s » n'existe pas" msgid "must be member of role \"%s\"" msgstr "doit être un membre du rôle « %s »" -#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:933 utils/adt/arrayfuncs.c:1554 utils/adt/arrayfuncs.c:3262 utils/adt/arrayfuncs.c:3402 utils/adt/arrayfuncs.c:5937 utils/adt/arrayfuncs.c:6278 utils/adt/arrayutils.c:93 utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 +#: utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:935 utils/adt/arrayfuncs.c:1543 utils/adt/arrayfuncs.c:3262 utils/adt/arrayfuncs.c:3404 utils/adt/arrayfuncs.c:5945 utils/adt/arrayfuncs.c:6286 utils/adt/arrayutils.c:94 utils/adt/arrayutils.c:103 utils/adt/arrayutils.c:110 #, c-format msgid "array size exceeds the maximum allowed (%d)" msgstr "la taille du tableau dépasse le maximum permis (%d)" -#: utils/adt/array_userfuncs.c:80 utils/adt/array_userfuncs.c:466 utils/adt/array_userfuncs.c:546 utils/adt/json.c:645 utils/adt/json.c:740 utils/adt/json.c:778 utils/adt/jsonb.c:1115 utils/adt/jsonb.c:1144 utils/adt/jsonb.c:1538 utils/adt/jsonb.c:1702 utils/adt/jsonb.c:1712 +#: utils/adt/array_userfuncs.c:80 utils/adt/array_userfuncs.c:467 utils/adt/array_userfuncs.c:547 utils/adt/json.c:645 utils/adt/json.c:740 utils/adt/json.c:778 utils/adt/jsonb.c:1115 utils/adt/jsonb.c:1144 utils/adt/jsonb.c:1538 utils/adt/jsonb.c:1702 utils/adt/jsonb.c:1712 #, c-format msgid "could not determine input data type" msgstr "n'a pas pu déterminer le type de données date en entrée" @@ -22172,8 +22040,7 @@ msgstr "n'a pas pu déterminer le type de données date en entrée" msgid "input data type is not an array" msgstr "le type de données en entrée n'est pas un tableau" -#: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 utils/adt/arrayfuncs.c:1357 utils/adt/float.c:1233 utils/adt/float.c:1307 utils/adt/float.c:4052 utils/adt/float.c:4066 utils/adt/int.c:757 utils/adt/int.c:779 utils/adt/int.c:793 utils/adt/int.c:807 utils/adt/int.c:838 utils/adt/int.c:859 utils/adt/int.c:976 utils/adt/int.c:990 utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 utils/adt/int.c:1065 utils/adt/int.c:1096 utils/adt/int.c:1178 utils/adt/int.c:1242 utils/adt/int.c:1310 utils/adt/int.c:1316 utils/adt/int8.c:1299 utils/adt/numeric.c:1776 utils/adt/numeric.c:4207 utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1121 -#: utils/adt/varlena.c:3433 +#: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 utils/adt/float.c:1233 utils/adt/float.c:1307 utils/adt/float.c:4052 utils/adt/float.c:4066 utils/adt/int.c:757 utils/adt/int.c:779 utils/adt/int.c:793 utils/adt/int.c:807 utils/adt/int.c:838 utils/adt/int.c:859 utils/adt/int.c:976 utils/adt/int.c:990 utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 utils/adt/int.c:1065 utils/adt/int.c:1096 utils/adt/int.c:1178 utils/adt/int.c:1242 utils/adt/int.c:1310 utils/adt/int.c:1316 utils/adt/int8.c:1299 utils/adt/numeric.c:1776 utils/adt/numeric.c:4207 utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1121 utils/adt/varlena.c:3433 #, c-format msgid "integer out of range" msgstr "entier en dehors des limites" @@ -22208,17 +22075,17 @@ msgstr "Les tableaux avec des éléments de dimensions différentes ne sont pas msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "Les tableaux de dimensions différentes ne sont pas compatibles pour une concaténation." -#: utils/adt/array_userfuncs.c:662 utils/adt/array_userfuncs.c:814 +#: utils/adt/array_userfuncs.c:663 utils/adt/array_userfuncs.c:815 #, c-format msgid "searching for elements in multidimensional arrays is not supported" msgstr "la recherche d'éléments dans des tableaux multidimensionnels n'est pas supportée" -#: utils/adt/array_userfuncs.c:686 +#: utils/adt/array_userfuncs.c:687 #, c-format msgid "initial position must not be null" msgstr "la position initiale ne doit pas être NULL" -#: utils/adt/arrayfuncs.c:270 utils/adt/arrayfuncs.c:284 utils/adt/arrayfuncs.c:295 utils/adt/arrayfuncs.c:317 utils/adt/arrayfuncs.c:332 utils/adt/arrayfuncs.c:346 utils/adt/arrayfuncs.c:352 utils/adt/arrayfuncs.c:359 utils/adt/arrayfuncs.c:490 utils/adt/arrayfuncs.c:506 utils/adt/arrayfuncs.c:517 utils/adt/arrayfuncs.c:532 utils/adt/arrayfuncs.c:553 utils/adt/arrayfuncs.c:583 utils/adt/arrayfuncs.c:590 utils/adt/arrayfuncs.c:598 utils/adt/arrayfuncs.c:632 utils/adt/arrayfuncs.c:655 utils/adt/arrayfuncs.c:675 utils/adt/arrayfuncs.c:787 utils/adt/arrayfuncs.c:796 utils/adt/arrayfuncs.c:826 utils/adt/arrayfuncs.c:841 utils/adt/arrayfuncs.c:894 +#: utils/adt/arrayfuncs.c:270 utils/adt/arrayfuncs.c:284 utils/adt/arrayfuncs.c:295 utils/adt/arrayfuncs.c:317 utils/adt/arrayfuncs.c:332 utils/adt/arrayfuncs.c:346 utils/adt/arrayfuncs.c:352 utils/adt/arrayfuncs.c:359 utils/adt/arrayfuncs.c:492 utils/adt/arrayfuncs.c:508 utils/adt/arrayfuncs.c:519 utils/adt/arrayfuncs.c:534 utils/adt/arrayfuncs.c:555 utils/adt/arrayfuncs.c:585 utils/adt/arrayfuncs.c:592 utils/adt/arrayfuncs.c:600 utils/adt/arrayfuncs.c:634 utils/adt/arrayfuncs.c:657 utils/adt/arrayfuncs.c:677 utils/adt/arrayfuncs.c:789 utils/adt/arrayfuncs.c:798 utils/adt/arrayfuncs.c:828 utils/adt/arrayfuncs.c:843 utils/adt/arrayfuncs.c:896 #, c-format msgid "malformed array literal: \"%s\"" msgstr "tableau litéral mal formé : « %s »" @@ -22238,7 +22105,7 @@ msgstr "Valeur manquante de la dimension du tableau." msgid "Missing \"%s\" after array dimensions." msgstr "« %s » manquant après les dimensions du tableau." -#: utils/adt/arrayfuncs.c:305 utils/adt/arrayfuncs.c:2910 utils/adt/arrayfuncs.c:2942 utils/adt/arrayfuncs.c:2957 +#: utils/adt/arrayfuncs.c:305 utils/adt/arrayfuncs.c:2909 utils/adt/arrayfuncs.c:2941 utils/adt/arrayfuncs.c:2956 #, c-format msgid "upper bound cannot be less than lower bound" msgstr "la limite supérieure ne peut pas être plus petite que la limite inférieure" @@ -22258,184 +22125,184 @@ msgstr "Le contenu du tableau doit commencer par « { »." msgid "Specified array dimensions do not match array contents." msgstr "Les dimensions spécifiées du tableau ne correspondent pas au contenu du tableau." -#: utils/adt/arrayfuncs.c:491 utils/adt/arrayfuncs.c:518 utils/adt/multirangetypes.c:162 utils/adt/rangetypes.c:2310 utils/adt/rangetypes.c:2318 utils/adt/rowtypes.c:211 utils/adt/rowtypes.c:219 +#: utils/adt/arrayfuncs.c:493 utils/adt/arrayfuncs.c:520 utils/adt/multirangetypes.c:162 utils/adt/rangetypes.c:2310 utils/adt/rangetypes.c:2318 utils/adt/rowtypes.c:211 utils/adt/rowtypes.c:219 #, c-format msgid "Unexpected end of input." msgstr "Fin de l'entrée inattendue." -#: utils/adt/arrayfuncs.c:507 utils/adt/arrayfuncs.c:554 utils/adt/arrayfuncs.c:584 utils/adt/arrayfuncs.c:633 +#: utils/adt/arrayfuncs.c:509 utils/adt/arrayfuncs.c:556 utils/adt/arrayfuncs.c:586 utils/adt/arrayfuncs.c:635 #, c-format msgid "Unexpected \"%c\" character." msgstr "Caractère « %c » inattendu." -#: utils/adt/arrayfuncs.c:533 utils/adt/arrayfuncs.c:656 +#: utils/adt/arrayfuncs.c:535 utils/adt/arrayfuncs.c:658 #, c-format msgid "Unexpected array element." msgstr "Élément de tableau inattendu." -#: utils/adt/arrayfuncs.c:591 +#: utils/adt/arrayfuncs.c:593 #, c-format msgid "Unmatched \"%c\" character." msgstr "Caractère « %c » sans correspondance." -#: utils/adt/arrayfuncs.c:599 utils/adt/jsonfuncs.c:2593 +#: utils/adt/arrayfuncs.c:601 utils/adt/jsonfuncs.c:2593 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "Les tableaux multidimensionnels doivent avoir des sous-tableaux avec les dimensions correspondantes" -#: utils/adt/arrayfuncs.c:676 +#: utils/adt/arrayfuncs.c:678 #, c-format msgid "Junk after closing right brace." msgstr "Problème après la parenthèse droite fermante." -#: utils/adt/arrayfuncs.c:1298 utils/adt/arrayfuncs.c:3370 utils/adt/arrayfuncs.c:5843 +#: utils/adt/arrayfuncs.c:1300 utils/adt/arrayfuncs.c:3370 utils/adt/arrayfuncs.c:5849 #, c-format msgid "invalid number of dimensions: %d" msgstr "nombre de dimensions invalides : %d" -#: utils/adt/arrayfuncs.c:1309 +#: utils/adt/arrayfuncs.c:1311 #, c-format msgid "invalid array flags" msgstr "drapeaux de tableau invalides" -#: utils/adt/arrayfuncs.c:1331 +#: utils/adt/arrayfuncs.c:1333 #, c-format msgid "binary data has array element type %u (%s) instead of expected %u (%s)" msgstr "" -#: utils/adt/arrayfuncs.c:1388 utils/adt/multirangetypes.c:443 utils/adt/rangetypes.c:333 utils/cache/lsyscache.c:2905 +#: utils/adt/arrayfuncs.c:1377 utils/adt/multirangetypes.c:443 utils/adt/rangetypes.c:333 utils/cache/lsyscache.c:2905 #, c-format msgid "no binary input function available for type %s" msgstr "aucune fonction d'entrée binaire disponible pour le type %s" -#: utils/adt/arrayfuncs.c:1528 +#: utils/adt/arrayfuncs.c:1517 #, c-format msgid "improper binary format in array element %d" msgstr "format binaire mal conçu dans l'élément du tableau %d" -#: utils/adt/arrayfuncs.c:1609 utils/adt/multirangetypes.c:448 utils/adt/rangetypes.c:338 utils/cache/lsyscache.c:2938 +#: utils/adt/arrayfuncs.c:1598 utils/adt/multirangetypes.c:448 utils/adt/rangetypes.c:338 utils/cache/lsyscache.c:2938 #, c-format msgid "no binary output function available for type %s" msgstr "aucune fonction de sortie binaire disponible pour le type %s" -#: utils/adt/arrayfuncs.c:2088 +#: utils/adt/arrayfuncs.c:2077 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "les morceaux des tableaux à longueur fixe ne sont pas implémentés" -#: utils/adt/arrayfuncs.c:2266 utils/adt/arrayfuncs.c:2288 utils/adt/arrayfuncs.c:2337 utils/adt/arrayfuncs.c:2573 utils/adt/arrayfuncs.c:2888 utils/adt/arrayfuncs.c:5829 utils/adt/arrayfuncs.c:5855 utils/adt/arrayfuncs.c:5866 utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4427 utils/adt/jsonfuncs.c:4580 utils/adt/jsonfuncs.c:4692 utils/adt/jsonfuncs.c:4741 +#: utils/adt/arrayfuncs.c:2255 utils/adt/arrayfuncs.c:2277 utils/adt/arrayfuncs.c:2326 utils/adt/arrayfuncs.c:2565 utils/adt/arrayfuncs.c:2887 utils/adt/arrayfuncs.c:5835 utils/adt/arrayfuncs.c:5861 utils/adt/arrayfuncs.c:5872 utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4427 utils/adt/jsonfuncs.c:4580 utils/adt/jsonfuncs.c:4692 utils/adt/jsonfuncs.c:4741 #, c-format msgid "wrong number of array subscripts" msgstr "mauvais nombre d'indices du tableau" -#: utils/adt/arrayfuncs.c:2271 utils/adt/arrayfuncs.c:2379 utils/adt/arrayfuncs.c:2640 utils/adt/arrayfuncs.c:2947 +#: utils/adt/arrayfuncs.c:2260 utils/adt/arrayfuncs.c:2368 utils/adt/arrayfuncs.c:2632 utils/adt/arrayfuncs.c:2946 #, c-format msgid "array subscript out of range" msgstr "indice du tableau en dehors de l'intervalle" -#: utils/adt/arrayfuncs.c:2276 +#: utils/adt/arrayfuncs.c:2265 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "ne peut pas affecter une valeur NULL à un élément d'un tableau à longueur fixe" -#: utils/adt/arrayfuncs.c:2835 +#: utils/adt/arrayfuncs.c:2834 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "" "les mises à jour de morceaux des tableaux à longueur fixe ne sont pas\n" "implémentées" -#: utils/adt/arrayfuncs.c:2866 +#: utils/adt/arrayfuncs.c:2865 #, c-format msgid "array slice subscript must provide both boundaries" msgstr "la tranche d'indice de tableau doit fournir les deux limites" -#: utils/adt/arrayfuncs.c:2867 +#: utils/adt/arrayfuncs.c:2866 #, c-format msgid "When assigning to a slice of an empty array value, slice boundaries must be fully specified." msgstr "Les limites de tranches doivent être entièrement spécifiées lors de l'assignation d'une valeur d'un tableau vide à une tranche." -#: utils/adt/arrayfuncs.c:2878 utils/adt/arrayfuncs.c:2973 +#: utils/adt/arrayfuncs.c:2877 utils/adt/arrayfuncs.c:2973 #, c-format msgid "source array too small" msgstr "tableau source trop petit" -#: utils/adt/arrayfuncs.c:3526 +#: utils/adt/arrayfuncs.c:3528 #, c-format msgid "null array element not allowed in this context" msgstr "élément NULL de tableau interdit dans ce contexte" -#: utils/adt/arrayfuncs.c:3628 utils/adt/arrayfuncs.c:3799 utils/adt/arrayfuncs.c:4155 +#: utils/adt/arrayfuncs.c:3630 utils/adt/arrayfuncs.c:3801 utils/adt/arrayfuncs.c:4157 #, c-format msgid "cannot compare arrays of different element types" msgstr "ne peut pas comparer des tableaux ayant des types d'éléments différents" -#: utils/adt/arrayfuncs.c:3977 utils/adt/multirangetypes.c:2670 utils/adt/multirangetypes.c:2742 utils/adt/rangetypes.c:1343 utils/adt/rangetypes.c:1407 utils/adt/rowtypes.c:1858 +#: utils/adt/arrayfuncs.c:3979 utils/adt/multirangetypes.c:2670 utils/adt/multirangetypes.c:2742 utils/adt/rangetypes.c:1343 utils/adt/rangetypes.c:1407 utils/adt/rowtypes.c:1858 #, c-format msgid "could not identify a hash function for type %s" msgstr "n'a pas pu identifier une fonction de hachage pour le type %s" -#: utils/adt/arrayfuncs.c:4070 utils/adt/rowtypes.c:1979 +#: utils/adt/arrayfuncs.c:4072 utils/adt/rowtypes.c:1979 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "n'a pas pu identifier une fonction de hachage étendue pour le type %s" -#: utils/adt/arrayfuncs.c:5247 +#: utils/adt/arrayfuncs.c:5249 #, c-format msgid "data type %s is not an array type" msgstr "le type de données %s n'est pas un type tableau" -#: utils/adt/arrayfuncs.c:5302 +#: utils/adt/arrayfuncs.c:5304 #, c-format msgid "cannot accumulate null arrays" msgstr "ne peut pas accumuler des tableaux NULL" -#: utils/adt/arrayfuncs.c:5330 +#: utils/adt/arrayfuncs.c:5332 #, c-format msgid "cannot accumulate empty arrays" msgstr "ne peut pas concaténer des tableaux vides" -#: utils/adt/arrayfuncs.c:5357 utils/adt/arrayfuncs.c:5363 +#: utils/adt/arrayfuncs.c:5359 utils/adt/arrayfuncs.c:5365 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "ne peut pas accumuler des tableaux de dimensions différentes" -#: utils/adt/arrayfuncs.c:5727 utils/adt/arrayfuncs.c:5767 +#: utils/adt/arrayfuncs.c:5733 utils/adt/arrayfuncs.c:5773 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "la dimension ou la limite basse du tableau ne peut pas être NULL" -#: utils/adt/arrayfuncs.c:5830 utils/adt/arrayfuncs.c:5856 +#: utils/adt/arrayfuncs.c:5836 utils/adt/arrayfuncs.c:5862 #, c-format msgid "Dimension array must be one dimensional." msgstr "Le tableau doit avoir une seule dimension." -#: utils/adt/arrayfuncs.c:5835 utils/adt/arrayfuncs.c:5861 +#: utils/adt/arrayfuncs.c:5841 utils/adt/arrayfuncs.c:5867 #, c-format msgid "dimension values cannot be null" msgstr "les valeurs de dimension ne peuvent pas être NULL" -#: utils/adt/arrayfuncs.c:5867 +#: utils/adt/arrayfuncs.c:5873 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "La limite basse du tableau a une taille différentes des dimensions du tableau." -#: utils/adt/arrayfuncs.c:6143 +#: utils/adt/arrayfuncs.c:6151 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "la suppression d'éléments de tableaux multidimensionnels n'est pas supportée" -#: utils/adt/arrayfuncs.c:6420 +#: utils/adt/arrayfuncs.c:6428 #, c-format msgid "thresholds must be one-dimensional array" msgstr "les limites doivent être un tableau à une dimension" -#: utils/adt/arrayfuncs.c:6425 +#: utils/adt/arrayfuncs.c:6433 #, c-format msgid "thresholds array must not contain NULLs" msgstr "le tableau de limites ne doit pas contenir de valeurs NULL" -#: utils/adt/arrayfuncs.c:6658 +#: utils/adt/arrayfuncs.c:6666 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "le nombre d'éléments à couper doit être compris entre 0 et %d" @@ -22450,17 +22317,22 @@ msgstr "l'indice d'un tableau doit être de type entier" msgid "array subscript in assignment must not be null" msgstr "l'indice du tableau dans l'affectation ne doit pas être NULL" -#: utils/adt/arrayutils.c:209 +#: utils/adt/arrayutils.c:140 +#, c-format +msgid "array lower bound is too large: %d" +msgstr "" + +#: utils/adt/arrayutils.c:240 #, c-format msgid "typmod array must be type cstring[]" msgstr "le tableau typmod doit être de type cstring[]" -#: utils/adt/arrayutils.c:214 +#: utils/adt/arrayutils.c:245 #, c-format msgid "typmod array must be one-dimensional" msgstr "le tableau typmod doit avoir une seule dimension" -#: utils/adt/arrayutils.c:219 +#: utils/adt/arrayutils.c:250 #, c-format msgid "typmod array must not contain nulls" msgstr "le tableau typmod ne doit pas contenir de valeurs NULL" @@ -22584,7 +22456,7 @@ msgstr "déplacement du fuseau horaire en dehors des limites" msgid "\"time with time zone\" units \"%s\" not recognized" msgstr "unités « %s » non reconnues pour le type « time with time zone »" -#: utils/adt/date.c:3095 utils/adt/datetime.c:951 utils/adt/datetime.c:1858 utils/adt/datetime.c:4647 utils/adt/timestamp.c:515 utils/adt/timestamp.c:542 utils/adt/timestamp.c:4255 utils/adt/timestamp.c:5426 utils/adt/timestamp.c:5678 +#: utils/adt/date.c:3095 utils/adt/datetime.c:951 utils/adt/datetime.c:1858 utils/adt/datetime.c:4648 utils/adt/timestamp.c:515 utils/adt/timestamp.c:542 utils/adt/timestamp.c:4255 utils/adt/timestamp.c:5426 utils/adt/timestamp.c:5678 #, c-format msgid "time zone \"%s\" not recognized" msgstr "le fuseau horaire « %s » n'est pas reconnu" @@ -22614,7 +22486,7 @@ msgstr "valeur du champ interval en dehors des limites : « %s »" msgid "time zone displacement out of range: \"%s\"" msgstr "déplacement du fuseau horaire en dehors des limites : « %s »" -#: utils/adt/datetime.c:4649 +#: utils/adt/datetime.c:4650 #, c-format msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "Ce nom du fuseau horaire apparaît dans le fichier de configuration des abréviations de fuseaux horaires « %s »." @@ -23315,16 +23187,14 @@ msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "la taille totale des éléments de l'objet JSON dépasse le maximum de %u octets" #: utils/adt/jsonbsubs.c:70 utils/adt/jsonbsubs.c:152 -#, fuzzy, c-format -#| msgid "this build does not support compression" +#, c-format msgid "jsonb subscript does not support slices" -msgstr "cette construction ne supporte pas la compression" +msgstr "" #: utils/adt/jsonbsubs.c:103 utils/adt/jsonbsubs.c:118 -#, fuzzy, c-format -#| msgid "log format \"%s\" is not supported" +#, c-format msgid "subscript type is not supported" -msgstr "le format de trace « %s » n'est pas supporté" +msgstr "le type subscript n'est pas supporté" #: utils/adt/jsonbsubs.c:104 #, c-format @@ -23337,16 +23207,14 @@ msgid "Jsonb subscript must be coerced to either integer or text" msgstr "" #: utils/adt/jsonbsubs.c:140 -#, fuzzy, c-format -#| msgid "array subscript must have type integer" +#, c-format msgid "jsonb subscript must have text type" -msgstr "l'indice d'un tableau doit être de type entier" +msgstr "l'indice d'un jsonb doit être de type text" #: utils/adt/jsonbsubs.c:208 -#, fuzzy, c-format -#| msgid "array subscript in assignment must not be null" +#, c-format msgid "jsonb subscript in assignment must not be null" -msgstr "l'indice du tableau dans l'affectation ne doit pas être NULL" +msgstr "l'indice d'un jsonb lors d'une affectation ne doit pas être NULL" #: utils/adt/jsonfuncs.c:555 utils/adt/jsonfuncs.c:789 utils/adt/jsonfuncs.c:2471 utils/adt/jsonfuncs.c:2911 utils/adt/jsonfuncs.c:3700 utils/adt/jsonfuncs.c:4030 #, c-format @@ -23508,7 +23376,7 @@ msgstr "ne peut pas remplacer une clé existante" #: utils/adt/jsonfuncs.c:4933 utils/adt/jsonfuncs.c:4964 #, c-format msgid "The path assumes key is a composite object, but it is a scalar value." -msgstr "" +msgstr "Le chemin assume que la clé est un objet composite, alors qu'il s'agit d'une valeur scalaire." #: utils/adt/jsonfuncs.c:5031 #, c-format @@ -23521,10 +23389,9 @@ msgid "path element at position %d is not an integer: \"%s\"" msgstr "l'élément du chemin à la position %d n'est pas un entier : « %s »" #: utils/adt/jsonfuncs.c:5152 -#, fuzzy, c-format -#| msgid "path element at position %d is not an integer: \"%s\"" +#, c-format msgid "path element at position %d is out of range: %d" -msgstr "l'élément du chemin à la position %d n'est pas un entier : « %s »" +msgstr "l'élément du chemin à la position %d est en dehors de l'échelle : %d" #: utils/adt/jsonfuncs.c:5304 #, c-format @@ -23779,11 +23646,11 @@ msgstr "réservé" #: utils/adt/misc.c:478 msgid "can be bare label" -msgstr "" +msgstr "peut être un label brut" #: utils/adt/misc.c:483 msgid "requires AS" -msgstr "" +msgstr "requiert AS" #: utils/adt/misc.c:730 utils/adt/misc.c:744 utils/adt/misc.c:783 utils/adt/misc.c:789 utils/adt/misc.c:795 utils/adt/misc.c:818 #, c-format @@ -23821,10 +23688,9 @@ msgid "The supported log formats are \"stderr\" and \"csvlog\"." msgstr "Les formats de traces supportés sont « stderr » et « csvlog »." #: utils/adt/multirangetypes.c:147 utils/adt/multirangetypes.c:160 utils/adt/multirangetypes.c:189 utils/adt/multirangetypes.c:259 utils/adt/multirangetypes.c:283 -#, fuzzy, c-format -#| msgid "malformed range literal: \"%s\"" +#, c-format msgid "malformed multirange literal: \"%s\"" -msgstr "intervalle litéral mal formé : « %s »" +msgstr "litéral multirange mal formé : « %s »" #: utils/adt/multirangetypes.c:149 #, c-format @@ -23832,16 +23698,14 @@ msgid "Missing left bracket." msgstr "Parenthèse gauche manquante." #: utils/adt/multirangetypes.c:191 -#, fuzzy, c-format -#| msgid "unexpected array start" +#, c-format msgid "Expected range start." -msgstr "début de tableau inattendu" +msgstr "Début d'intervalle attendu." #: utils/adt/multirangetypes.c:261 -#, fuzzy, c-format -#| msgid "unexpected end of line" +#, c-format msgid "Expected comma or end of multirange." -msgstr "fin de ligne inattendue" +msgstr "Virgule ou fin de multirange attendue." #: utils/adt/multirangetypes.c:285 #, c-format @@ -23861,7 +23725,7 @@ msgstr "le type %u ne correspond pas un type constructeur" #: utils/adt/multirangetypes.c:999 #, c-format msgid "multirange values cannot contain NULL members" -msgstr "" +msgstr "les valeurs multirange ne peuvent pas contenir des membres NULL" #: utils/adt/multirangetypes.c:1349 #, c-format @@ -23871,7 +23735,7 @@ msgstr "range_agg doit être appelé avec un intervalle" #: utils/adt/multirangetypes.c:1420 #, c-format msgid "range_intersect_agg must be called with a multirange" -msgstr "" +msgstr "range_intersect_agg doit être appelé avec un multirange" #: utils/adt/network.c:111 #, c-format @@ -24115,84 +23979,99 @@ msgstr "caractère nul interdit" msgid "percentile value %g is not between 0 and 1" msgstr "la valeur centile %g n'est pas entre 0 et 1" -#: utils/adt/pg_locale.c:1233 +#: utils/adt/pg_locale.c:1228 #, c-format msgid "Apply system library package updates." msgstr "Applique les mises à jour du paquet de bibliothèque système." -#: utils/adt/pg_locale.c:1447 +#: utils/adt/pg_locale.c:1442 #, c-format msgid "could not create locale \"%s\": %m" msgstr "n'a pas pu créer la locale « %s » : %m" -#: utils/adt/pg_locale.c:1450 +#: utils/adt/pg_locale.c:1445 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "Le système d'exploitation n'a pas pu trouver des données de locale pour la locale « %s »." -#: utils/adt/pg_locale.c:1550 +#: utils/adt/pg_locale.c:1547 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "" "les collationnements avec des valeurs différents pour le tri et le jeu de\n" "caractères ne sont pas supportés sur cette plateforme" -#: utils/adt/pg_locale.c:1559 +#: utils/adt/pg_locale.c:1556 #, c-format msgid "collation provider LIBC is not supported on this platform" msgstr "le fournisseur du collationnement, LIBC, n'est pas supporté sur cette plateforme" -#: utils/adt/pg_locale.c:1571 +#: utils/adt/pg_locale.c:1568 #, c-format msgid "collations with different collate and ctype values are not supported by ICU" msgstr "les collationnements avec des valeurs différentes pour le tri (collate) et le jeu de caractères (ctype) ne sont pas supportés par ICU" -#: utils/adt/pg_locale.c:1577 utils/adt/pg_locale.c:1629 utils/adt/pg_locale.c:1951 +#: utils/adt/pg_locale.c:1574 utils/adt/pg_locale.c:1661 utils/adt/pg_locale.c:1940 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "n'a pas pu ouvrir le collationneur pour la locale « %s » : %s" -#: utils/adt/pg_locale.c:1591 +#: utils/adt/pg_locale.c:1588 #, c-format msgid "ICU is not supported in this build" msgstr "ICU n'est pas supporté dans cette installation" -#: utils/adt/pg_locale.c:1592 +#: utils/adt/pg_locale.c:1609 +#, c-format +msgid "collation \"%s\" has no actual version, but a version was specified" +msgstr "le collationnement « %s » n'a pas de version réelle mais une version était indiquée" + +#: utils/adt/pg_locale.c:1616 #, c-format -msgid "You need to rebuild PostgreSQL using --with-icu." -msgstr "Vous devez recompiler PostgreSQL en utilisant --with-icu." +msgid "collation \"%s\" has version mismatch" +msgstr "le collationnement « %s » a des versions différentes" -#: utils/adt/pg_locale.c:1660 +#: utils/adt/pg_locale.c:1618 +#, c-format +msgid "The collation in the database was created using version %s, but the operating system provides version %s." +msgstr "Le collationnement dans la base de données a été créé en utilisant la version %s mais le système d'exploitation fournit la version %s." + +#: utils/adt/pg_locale.c:1621 +#, c-format +msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." +msgstr "Reconstruisez tous les objets affectés par ce collationnement, et lancez ALTER COLLATION %s REFRESH VERSION, ou construisez PostgreSQL avec la bonne version de bibliothèque." + +#: utils/adt/pg_locale.c:1692 #, c-format msgid "could not load locale \"%s\"" msgstr "n'a pas pu charger la locale « %s »" -#: utils/adt/pg_locale.c:1685 +#: utils/adt/pg_locale.c:1717 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "n'a pas obtenir la version du collationnement pour la locale « %s » : code d'erreur %lu" -#: utils/adt/pg_locale.c:1766 +#: utils/adt/pg_locale.c:1755 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "encodage « %s » non supporté par ICU" -#: utils/adt/pg_locale.c:1773 +#: utils/adt/pg_locale.c:1762 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "n'a pas pu ouvrir le convertisseur ICU pour l'encodage « %s » : %s" -#: utils/adt/pg_locale.c:1804 utils/adt/pg_locale.c:1813 utils/adt/pg_locale.c:1842 utils/adt/pg_locale.c:1852 +#: utils/adt/pg_locale.c:1793 utils/adt/pg_locale.c:1802 utils/adt/pg_locale.c:1831 utils/adt/pg_locale.c:1841 #, c-format msgid "%s failed: %s" msgstr "échec de %s : %s" -#: utils/adt/pg_locale.c:2124 +#: utils/adt/pg_locale.c:2113 #, c-format msgid "invalid multibyte character for locale" msgstr "caractère multi-octets invalide pour la locale" -#: utils/adt/pg_locale.c:2125 +#: utils/adt/pg_locale.c:2114 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "" @@ -24209,7 +24088,7 @@ msgstr "ne peut pas ajouter NaN à pg_lsn" msgid "cannot subtract NaN from pg_lsn" msgstr "ne peut pas soustraire NaN de pg_lsn" -#: utils/adt/pg_upgrade_support.c:30 +#: utils/adt/pg_upgrade_support.c:29 #, c-format msgid "function can only be called when server is in binary upgrade mode" msgstr "la fonction peut seulement être appelée quand le serveur est en mode de mise à jour binaire" @@ -24252,7 +24131,7 @@ msgstr "le résultat de l'union d'intervalle pourrait ne pas être contigü" #: utils/adt/rangetypes.c:1214 #, c-format msgid "range_intersect_agg must be called with a range" -msgstr "" +msgstr "range_intersect_agg doit être appelé avec un range" #: utils/adt/rangetypes.c:1689 #, c-format @@ -24532,7 +24411,7 @@ msgstr "la précision de TIMESTAMP(%d)%s ne doit pas être négative" msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "la précision de TIMESTAMP(%d)%s est réduite au maximum autorisé, %d" -#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12459 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12391 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp en dehors de limites : « %s »" @@ -24662,42 +24541,42 @@ msgstr "suppress_redundant_updates_trigger : doit être appelé pour chaque lign msgid "gtsvector_in not implemented" msgstr "gtsvector_in n'est pas encore implémenté" -#: utils/adt/tsquery.c:200 +#: utils/adt/tsquery.c:199 #, c-format msgid "distance in phrase operator should not be greater than %d" msgstr "la distance dans l'opérateur de phrase ne devrait pas être plus que %d" -#: utils/adt/tsquery.c:310 utils/adt/tsquery.c:725 utils/adt/tsvector_parser.c:133 +#: utils/adt/tsquery.c:306 utils/adt/tsquery.c:691 utils/adt/tsvector_parser.c:133 #, c-format msgid "syntax error in tsquery: \"%s\"" msgstr "erreur de syntaxe dans tsquery : « %s »" -#: utils/adt/tsquery.c:334 +#: utils/adt/tsquery.c:330 #, c-format msgid "no operand in tsquery: \"%s\"" msgstr "aucun opérande dans tsquery : « %s »" -#: utils/adt/tsquery.c:568 +#: utils/adt/tsquery.c:534 #, c-format msgid "value is too big in tsquery: \"%s\"" msgstr "valeur trop importante dans tsquery : « %s »" -#: utils/adt/tsquery.c:573 +#: utils/adt/tsquery.c:539 #, c-format msgid "operand is too long in tsquery: \"%s\"" msgstr "l'opérande est trop long dans tsquery : « %s »" -#: utils/adt/tsquery.c:601 +#: utils/adt/tsquery.c:567 #, c-format msgid "word is too long in tsquery: \"%s\"" msgstr "le mot est trop long dans tsquery : « %s »" -#: utils/adt/tsquery.c:870 +#: utils/adt/tsquery.c:835 #, c-format msgid "text-search query doesn't contain lexemes: \"%s\"" msgstr "la requête de recherche plein texte ne contient pas de lexemes : « %s »" -#: utils/adt/tsquery.c:881 utils/adt/tsquery_util.c:375 +#: utils/adt/tsquery.c:846 utils/adt/tsquery_util.c:375 #, c-format msgid "tsquery is too large" msgstr "le champ tsquery est trop gros" @@ -25041,11 +24920,6 @@ msgstr "fonctionnalité XML non supportée" msgid "This functionality requires the server to be built with libxml support." msgstr "Cette fonctionnalité nécessite que le serveur dispose du support de libxml." -#: utils/adt/xml.c:224 -#, c-format -msgid "You need to rebuild PostgreSQL using --with-libxml." -msgstr "Vous devez recompiler PostgreSQL en utilisant --with-libxml." - #: utils/adt/xml.c:243 utils/mb/mbutils.c:627 #, c-format msgid "invalid encoding name \"%s\"" @@ -25227,17 +25101,17 @@ msgstr "la classe d'opérateur « %s » de la méthode d'accès %s nécessite la msgid "cached plan must not change result type" msgstr "le plan en cache ne doit pas modifier le type en résultat" -#: utils/cache/relcache.c:6215 +#: utils/cache/relcache.c:6213 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "n'a pas pu créer le fichier d'initialisation relation-cache « %s » : %m" -#: utils/cache/relcache.c:6217 +#: utils/cache/relcache.c:6215 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Continue malgré tout, mais quelque chose s'est mal passé." -#: utils/cache/relcache.c:6539 +#: utils/cache/relcache.c:6537 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier cache « %s » : %m" @@ -25489,10 +25363,9 @@ msgstr "" "déclarant retourner le type %s" #: utils/fmgr/funcapi.c:531 -#, fuzzy, c-format -#| msgid "argument declared %s is not a range type but type %s" +#, c-format msgid "argument declared %s does not contain a range type but type %s" -msgstr "l'argument déclaré %s n'est pas un type d'intervalle mais est du type %s" +msgstr "l'argument déclaré %s ne contient pas un type d'intervalle mais un type %s" #: utils/fmgr/funcapi.c:1833 utils/fmgr/funcapi.c:1865 #, c-format @@ -25548,7 +25421,7 @@ msgstr "le répertoire des données « %s » a des permissions non valides" msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Les droits devraient être u=rwx (0700) ou u=rwx,g=rx (0750)." -#: utils/init/miscinit.c:645 utils/misc/guc.c:7515 +#: utils/init/miscinit.c:645 utils/misc/guc.c:7461 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "" @@ -25656,7 +25529,7 @@ msgstr "" msgid "could not write lock file \"%s\": %m" msgstr "n'a pas pu écrire le fichier verrou « %s » : %m" -#: utils/init/miscinit.c:1357 utils/init/miscinit.c:1499 utils/misc/guc.c:10411 +#: utils/init/miscinit.c:1357 utils/init/miscinit.c:1499 utils/misc/guc.c:10357 #, c-format msgid "could not read from file \"%s\": %m" msgstr "n'a pas pu lire à partir du fichier « %s » : %m" @@ -25929,345 +25802,303 @@ msgstr "" "le caractère dont la séquence d'octets est %s dans l'encodage « %s » n'a pas\n" "d'équivalent dans l'encodage « %s »" -#: utils/misc/guc.c:703 +#: utils/misc/guc.c:701 msgid "Ungrouped" msgstr "Dégroupé" -#: utils/misc/guc.c:705 +#: utils/misc/guc.c:703 msgid "File Locations" msgstr "Emplacement des fichiers" -#: utils/misc/guc.c:707 -msgid "Connections and Authentication" -msgstr "Connexions et authentification" - -#: utils/misc/guc.c:709 +#: utils/misc/guc.c:705 msgid "Connections and Authentication / Connection Settings" msgstr "Connexions et authentification / Paramètrages de connexion" -#: utils/misc/guc.c:711 +#: utils/misc/guc.c:707 msgid "Connections and Authentication / Authentication" msgstr "Connexions et authentification / Authentification" -#: utils/misc/guc.c:713 +#: utils/misc/guc.c:709 msgid "Connections and Authentication / SSL" msgstr "Connexions et authentification / SSL" -#: utils/misc/guc.c:715 -msgid "Resource Usage" -msgstr "Utilisation des ressources" - -#: utils/misc/guc.c:717 +#: utils/misc/guc.c:711 msgid "Resource Usage / Memory" msgstr "Utilisation des ressources / Mémoire" -#: utils/misc/guc.c:719 +#: utils/misc/guc.c:713 msgid "Resource Usage / Disk" msgstr "Utilisation des ressources / Disques" -#: utils/misc/guc.c:721 +#: utils/misc/guc.c:715 msgid "Resource Usage / Kernel Resources" msgstr "Utilisation des ressources / Ressources noyau" -#: utils/misc/guc.c:723 +#: utils/misc/guc.c:717 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Utilisation des ressources / Délai du VACUUM basé sur le coût" -#: utils/misc/guc.c:725 +#: utils/misc/guc.c:719 msgid "Resource Usage / Background Writer" msgstr "Utilisation des ressources / Processus d'écriture en tâche de fond" -#: utils/misc/guc.c:727 +#: utils/misc/guc.c:721 msgid "Resource Usage / Asynchronous Behavior" msgstr "Utilisation des ressources / Comportement asynchrone" -#: utils/misc/guc.c:729 -msgid "Write-Ahead Log" -msgstr "Write-Ahead Log" - -#: utils/misc/guc.c:731 +#: utils/misc/guc.c:723 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead Log / Paramètrages" -#: utils/misc/guc.c:733 +#: utils/misc/guc.c:725 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead Log / Points de vérification (Checkpoints)" -#: utils/misc/guc.c:735 +#: utils/misc/guc.c:727 msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead Log / Archivage" -#: utils/misc/guc.c:737 +#: utils/misc/guc.c:729 msgid "Write-Ahead Log / Archive Recovery" msgstr "Write-Ahead Log / Restauration d'archive" -#: utils/misc/guc.c:739 +#: utils/misc/guc.c:731 msgid "Write-Ahead Log / Recovery Target" msgstr "Write-Ahead Log / Cible de restauration" -#: utils/misc/guc.c:741 -msgid "Replication" -msgstr "Réplication" - -#: utils/misc/guc.c:743 +#: utils/misc/guc.c:733 msgid "Replication / Sending Servers" msgstr "Réplication / Serveurs d'envoi" -#: utils/misc/guc.c:745 +#: utils/misc/guc.c:735 msgid "Replication / Primary Server" msgstr "Réplication / Serveur primaire" -#: utils/misc/guc.c:747 +#: utils/misc/guc.c:737 msgid "Replication / Standby Servers" msgstr "Réplication / Serveurs en attente" -#: utils/misc/guc.c:749 +#: utils/misc/guc.c:739 msgid "Replication / Subscribers" msgstr "Réplication / Abonnés" -#: utils/misc/guc.c:751 -msgid "Query Tuning" -msgstr "Optimisation des requêtes" - -#: utils/misc/guc.c:753 +#: utils/misc/guc.c:741 msgid "Query Tuning / Planner Method Configuration" msgstr "Optimisation des requêtes / Configuration de la méthode du planificateur" -#: utils/misc/guc.c:755 +#: utils/misc/guc.c:743 msgid "Query Tuning / Planner Cost Constants" msgstr "Optimisation des requêtes / Constantes des coûts du planificateur" -#: utils/misc/guc.c:757 +#: utils/misc/guc.c:745 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Optimisation des requêtes / Optimiseur génétique de requêtes" -#: utils/misc/guc.c:759 +#: utils/misc/guc.c:747 msgid "Query Tuning / Other Planner Options" msgstr "Optimisation des requêtes / Autres options du planificateur" -#: utils/misc/guc.c:761 -msgid "Reporting and Logging" -msgstr "Rapports et traces" - -#: utils/misc/guc.c:763 +#: utils/misc/guc.c:749 msgid "Reporting and Logging / Where to Log" msgstr "Rapports et traces / Où tracer" -#: utils/misc/guc.c:765 +#: utils/misc/guc.c:751 msgid "Reporting and Logging / When to Log" msgstr "Rapports et traces / Quand tracer" -#: utils/misc/guc.c:767 +#: utils/misc/guc.c:753 msgid "Reporting and Logging / What to Log" msgstr "Rapports et traces / Que tracer" -#: utils/misc/guc.c:769 -msgid "Process Title" -msgstr "Titre du processus" - -#: utils/misc/guc.c:771 -msgid "Statistics" -msgstr "Statistiques" +#: utils/misc/guc.c:755 +msgid "Reporting and Logging / Process Title" +msgstr "Rapports et traces / Titre du processus" -#: utils/misc/guc.c:773 +#: utils/misc/guc.c:757 msgid "Statistics / Monitoring" msgstr "Statistiques / Surveillance" -#: utils/misc/guc.c:775 +#: utils/misc/guc.c:759 msgid "Statistics / Query and Index Statistics Collector" msgstr "Statistiques / Récupérateur des statistiques sur les requêtes et sur les index" -#: utils/misc/guc.c:777 +#: utils/misc/guc.c:761 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc.c:779 -msgid "Client Connection Defaults" -msgstr "Valeurs par défaut pour les connexions client" - -#: utils/misc/guc.c:781 +#: utils/misc/guc.c:763 msgid "Client Connection Defaults / Statement Behavior" msgstr "Valeurs par défaut pour les connexions client / Comportement des instructions" -#: utils/misc/guc.c:783 +#: utils/misc/guc.c:765 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Valeurs par défaut pour les connexions client / Locale et formattage" -#: utils/misc/guc.c:785 +#: utils/misc/guc.c:767 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Valeurs par défaut pour les connexions des clients / Préchargement des bibliothèques partagées" -#: utils/misc/guc.c:787 +#: utils/misc/guc.c:769 msgid "Client Connection Defaults / Other Defaults" msgstr "Valeurs par défaut pour les connexions client / Autres valeurs par défaut" -#: utils/misc/guc.c:789 +#: utils/misc/guc.c:771 msgid "Lock Management" msgstr "Gestion des verrous" -#: utils/misc/guc.c:791 -msgid "Version and Platform Compatibility" -msgstr "Compatibilité des versions et des plateformes" - -#: utils/misc/guc.c:793 +#: utils/misc/guc.c:773 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Compatibilité des versions et des plateformes / Anciennes versions de PostgreSQL" -#: utils/misc/guc.c:795 +#: utils/misc/guc.c:775 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Compatibilité des versions et des plateformes / Anciennes plateformes et anciens clients" -#: utils/misc/guc.c:797 +#: utils/misc/guc.c:777 msgid "Error Handling" msgstr "Gestion des erreurs" -#: utils/misc/guc.c:799 +#: utils/misc/guc.c:779 msgid "Preset Options" msgstr "Options pré-configurées" -#: utils/misc/guc.c:801 +#: utils/misc/guc.c:781 msgid "Customized Options" msgstr "Options personnalisées" -#: utils/misc/guc.c:803 +#: utils/misc/guc.c:783 msgid "Developer Options" msgstr "Options pour le développeur" -#: utils/misc/guc.c:861 +#: utils/misc/guc.c:841 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Les unités valides pour ce paramètre sont « B », « kB », « MB », « GB » et « TB »." -#: utils/misc/guc.c:898 +#: utils/misc/guc.c:878 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "Les unités valides pour ce paramètre sont «us », « ms », « s », « min », « h » et « d »." -#: utils/misc/guc.c:960 +#: utils/misc/guc.c:940 msgid "Enables the planner's use of sequential-scan plans." msgstr "Active l'utilisation des parcours séquentiels par le planificateur." -#: utils/misc/guc.c:970 +#: utils/misc/guc.c:950 msgid "Enables the planner's use of index-scan plans." msgstr "Active l'utilisation des parcours d'index par le planificateur." -#: utils/misc/guc.c:980 +#: utils/misc/guc.c:960 msgid "Enables the planner's use of index-only-scan plans." msgstr "Active l'utilisation des parcours d'index seul par le planificateur." -#: utils/misc/guc.c:990 +#: utils/misc/guc.c:970 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Active l'utilisation des parcours de bitmap par le planificateur." -#: utils/misc/guc.c:1000 +#: utils/misc/guc.c:980 msgid "Enables the planner's use of TID scan plans." msgstr "Active l'utilisation de plans de parcours TID par le planificateur." -#: utils/misc/guc.c:1010 +#: utils/misc/guc.c:990 msgid "Enables the planner's use of explicit sort steps." msgstr "Active l'utilisation des étapes de tris explicites par le planificateur." -#: utils/misc/guc.c:1020 +#: utils/misc/guc.c:1000 msgid "Enables the planner's use of incremental sort steps." msgstr "Active l'utilisation des étapes de tris incrémentaux par le planificateur." -#: utils/misc/guc.c:1029 +#: utils/misc/guc.c:1009 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Active l'utilisation de plans d'agrégats hâchés par le planificateur." -#: utils/misc/guc.c:1039 +#: utils/misc/guc.c:1019 msgid "Enables the planner's use of materialization." msgstr "Active l'utilisation de la matérialisation par le planificateur." -#: utils/misc/guc.c:1049 -#, fuzzy -#| msgid "Enables the planner's use of parallel hash plans." +#: utils/misc/guc.c:1029 msgid "Enables the planner's use of result caching." -msgstr "Active l'utilisation de plans de jointures hâchées parallèles par le planificateur." +msgstr "Active l'utilisation du cache de résultat par le planificateur." -#: utils/misc/guc.c:1059 +#: utils/misc/guc.c:1039 msgid "Enables the planner's use of nested-loop join plans." msgstr "Active l'utilisation de plans avec des jointures imbriquées par le planificateur." -#: utils/misc/guc.c:1069 +#: utils/misc/guc.c:1049 msgid "Enables the planner's use of merge join plans." msgstr "Active l'utilisation de plans de jointures MERGE par le planificateur." -#: utils/misc/guc.c:1079 +#: utils/misc/guc.c:1059 msgid "Enables the planner's use of hash join plans." msgstr "Active l'utilisation de plans de jointures hâchées par le planificateur." -#: utils/misc/guc.c:1089 +#: utils/misc/guc.c:1069 msgid "Enables the planner's use of gather merge plans." msgstr "Active l'utilisation de plans GATHER MERGE par le planificateur." -#: utils/misc/guc.c:1099 +#: utils/misc/guc.c:1079 msgid "Enables partitionwise join." msgstr "Active l'utilisation de jointures entre partitions." -#: utils/misc/guc.c:1109 +#: utils/misc/guc.c:1089 msgid "Enables partitionwise aggregation and grouping." msgstr "Active les agrégations et regroupements par partition." -#: utils/misc/guc.c:1119 +#: utils/misc/guc.c:1099 msgid "Enables the planner's use of parallel append plans." msgstr "Active l'utilisation de plans Append parallèles par le planificateur." -#: utils/misc/guc.c:1129 +#: utils/misc/guc.c:1109 msgid "Enables the planner's use of parallel hash plans." msgstr "Active l'utilisation de plans de jointures hâchées parallèles par le planificateur." -#: utils/misc/guc.c:1139 -#, fuzzy -#| msgid "Enables plan-time and run-time partition pruning." +#: utils/misc/guc.c:1119 msgid "Enables plan-time and execution-time partition pruning." msgstr "Active l'élagage de partition durant la planification et l'exécution." -#: utils/misc/guc.c:1140 +#: utils/misc/guc.c:1120 msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." msgstr "Autorise le planificateur de requête et l'exécuteur à comparer les limites des partitions avec les conditions des requêtes pour déterminer les partitions à parcourir." -#: utils/misc/guc.c:1151 -#, fuzzy -#| msgid "Enables the planner's use of parallel append plans." +#: utils/misc/guc.c:1131 msgid "Enables the planner's use of async append plans." -msgstr "Active l'utilisation de plans Append parallèles par le planificateur." +msgstr "Active l'utilisation de plans Append asynchrones par le planificateur." -#: utils/misc/guc.c:1161 +#: utils/misc/guc.c:1141 msgid "Enables genetic query optimization." msgstr "Active l'optimisation génétique des requêtes." -#: utils/misc/guc.c:1162 +#: utils/misc/guc.c:1142 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Cet algorithme essaie de faire une planification sans recherche exhaustive." -#: utils/misc/guc.c:1173 +#: utils/misc/guc.c:1153 msgid "Shows whether the current user is a superuser." msgstr "Affiche si l'utilisateur actuel est un super-utilisateur." -#: utils/misc/guc.c:1183 +#: utils/misc/guc.c:1163 msgid "Enables advertising the server via Bonjour." msgstr "Active la publication du serveur via Bonjour." -#: utils/misc/guc.c:1192 +#: utils/misc/guc.c:1172 msgid "Collects transaction commit time." msgstr "Récupère l'horodatage de la validation de la transaction." -#: utils/misc/guc.c:1201 +#: utils/misc/guc.c:1181 msgid "Enables SSL connections." msgstr "Active les connexions SSL." -#: utils/misc/guc.c:1210 +#: utils/misc/guc.c:1190 msgid "Also use ssl_passphrase_command during server reload." msgstr "Utilise également ssl_passphrase_command durant le rechargement du serveur." -#: utils/misc/guc.c:1219 +#: utils/misc/guc.c:1199 msgid "Give priority to server ciphersuite order." msgstr "Donne la priorité à l'ordre des chiffrements du serveur." -#: utils/misc/guc.c:1228 +#: utils/misc/guc.c:1208 msgid "Forces synchronization of updates to disk." msgstr "Force la synchronisation des mises à jour sur le disque." -#: utils/misc/guc.c:1229 +#: utils/misc/guc.c:1209 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "" "Le serveur utilisera l'appel système fsync() à différents endroits pour\n" @@ -26275,19 +26106,19 @@ msgstr "" "nous assure qu'un groupe de bases de données se retrouvera dans un état\n" "cohérent après un arrêt brutal dû au système d'exploitation ou au matériel." -#: utils/misc/guc.c:1240 +#: utils/misc/guc.c:1220 msgid "Continues processing after a checksum failure." msgstr "Continue le traitement après un échec de la somme de contrôle." -#: utils/misc/guc.c:1241 +#: utils/misc/guc.c:1221 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "La détection d'une erreur de somme de contrôle a normalement pour effet de rapporter une erreur, annulant la transaction en cours. Régler ignore_checksum_failure à true permet au système d'ignorer cette erreur (mais rapporte toujours un avertissement), et continue le traitement. Ce comportement pourrait causer un arrêt brutal ou d'autres problèmes sérieux. Cela a un effet seulement si les sommes de contrôle (checksums) sont activés." -#: utils/misc/guc.c:1255 +#: utils/misc/guc.c:1235 msgid "Continues processing past damaged page headers." msgstr "Continue le travail après les en-têtes de page endommagés." -#: utils/misc/guc.c:1256 +#: utils/misc/guc.c:1236 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "" "La détection d'une en-tête de page endommagée cause normalement le rapport\n" @@ -26296,223 +26127,203 @@ msgstr "" "message d'attention et continue à travailler. Ce comportement détruira des\n" "données, notamment toutes les lignes de la page endommagée." -#: utils/misc/guc.c:1269 +#: utils/misc/guc.c:1249 msgid "Continues recovery after an invalid pages failure." msgstr "Continue la restauration après un échec des pages invalides." -#: utils/misc/guc.c:1270 +#: utils/misc/guc.c:1250 msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." msgstr "La détection des enregistrements de journaux de transactions ayant des références à des blocs invalides lors de la restauration a pour effet que PostgreSQL lève une erreur de niveau PANIC, annulant la restauration. Configurer ignore_invalid_pages à true permet au système d'ignorer les références invalides de page dans les enregistrements des journaux de transactions (tout en rapportant toujours un message d'avertissement), et continue la restauration. Ce comportement pourrait causer des arrêts brutaux, des pertes de données, propager ou cacher une corruption, ainsi que d'autres problèmes sérieux. Ce paramètre a un effet seulement lors de la restauration et en mode standby." -#: utils/misc/guc.c:1288 +#: utils/misc/guc.c:1268 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "" "Écrit des pages complètes dans les WAL lors d'une première modification après\n" "un point de vérification." -#: utils/misc/guc.c:1289 +#: utils/misc/guc.c:1269 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "Une page écrite au moment d'un arrêt brutal du système d'exploitation pourrait n'être écrite sur le disque que partiellement. Lors de la récupération, les modifications stockées dans le journal de transaction ne sont pas suffisantes pour terminer la récupération. Cette option écrit les pages lors de la première modification après un checkpoint afin que la récupération complète soit possible." -#: utils/misc/guc.c:1301 -#, fuzzy -#| msgid "cannot execute %s during recovery" -msgid "Prefetch referenced blocks during recovery." -msgstr "ne peut pas exécuté %s lors de la restauration" - -#: utils/misc/guc.c:1302 -msgid "Read ahead of the current replay position to find uncached blocks." -msgstr "" - -#: utils/misc/guc.c:1310 -msgid "Prefetch blocks that have full page images in the WAL." -msgstr "" - -#: utils/misc/guc.c:1311 -msgid "On some systems, there is no benefit to prefetching pages that will be entirely overwritten, but if the logical page size of the filesystem is larger than PostgreSQL's, this can be beneficial. This option has no effect unless recovery_prefetch is enabled." -msgstr "" - -#: utils/misc/guc.c:1323 +#: utils/misc/guc.c:1282 msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification." msgstr "Écrit des pages complètes dans les WAL lors d'une première modification après un point de vérification, y compris pour des modifications non critiques." -#: utils/misc/guc.c:1333 +#: utils/misc/guc.c:1292 msgid "Compresses full-page writes written in WAL file." msgstr "Compresse les blocs complets écrits dans les journaux de transactions." -#: utils/misc/guc.c:1343 +#: utils/misc/guc.c:1302 msgid "Writes zeroes to new WAL files before first use." msgstr "Écrit des zéros dans les nouveaux journaux de transaction avant leur première utilisation." -#: utils/misc/guc.c:1353 +#: utils/misc/guc.c:1312 msgid "Recycles WAL files by renaming them." msgstr "Recycle les journaux de transactions en les renommant." -#: utils/misc/guc.c:1363 +#: utils/misc/guc.c:1322 msgid "Logs each checkpoint." msgstr "Trace tous les points de vérification." -#: utils/misc/guc.c:1372 +#: utils/misc/guc.c:1331 msgid "Logs each successful connection." msgstr "Trace toutes les connexions réussies." -#: utils/misc/guc.c:1381 +#: utils/misc/guc.c:1340 msgid "Logs end of a session, including duration." msgstr "Trace la fin d'une session, avec sa durée." -#: utils/misc/guc.c:1390 +#: utils/misc/guc.c:1349 msgid "Logs each replication command." msgstr "Trace chaque commande de réplication." -#: utils/misc/guc.c:1399 +#: utils/misc/guc.c:1358 msgid "Shows whether the running server has assertion checks enabled." msgstr "Affiche si le serveur en cours d'exécution a les vérifications d'assertion activées." -#: utils/misc/guc.c:1414 +#: utils/misc/guc.c:1373 msgid "Terminate session on any error." msgstr "Termine la session sans erreur." -#: utils/misc/guc.c:1423 +#: utils/misc/guc.c:1382 msgid "Reinitialize server after backend crash." msgstr "Réinitialisation du serveur après un arrêt brutal d'un processus serveur." -#: utils/misc/guc.c:1432 +#: utils/misc/guc.c:1391 msgid "Remove temporary files after backend crash." msgstr "Suppression des fichiers temporaires après un arrêt brutal d'un processus serveur." -#: utils/misc/guc.c:1442 +#: utils/misc/guc.c:1401 msgid "Logs the duration of each completed SQL statement." msgstr "Trace la durée de chaque instruction SQL terminée." -#: utils/misc/guc.c:1451 +#: utils/misc/guc.c:1410 msgid "Logs each query's parse tree." msgstr "Trace l'arbre d'analyse de chaque requête." -#: utils/misc/guc.c:1460 +#: utils/misc/guc.c:1419 msgid "Logs each query's rewritten parse tree." msgstr "Trace l'arbre d'analyse réécrit de chaque requête." -#: utils/misc/guc.c:1469 +#: utils/misc/guc.c:1428 msgid "Logs each query's execution plan." msgstr "Trace le plan d'exécution de chaque requête." -#: utils/misc/guc.c:1478 +#: utils/misc/guc.c:1437 msgid "Indents parse and plan tree displays." msgstr "Indente l'affichage des arbres d'analyse et de planification." -#: utils/misc/guc.c:1487 -#, fuzzy -#| msgid "unterminated quoted identifier" +#: utils/misc/guc.c:1446 msgid "Compute query identifiers." -msgstr "identifiant entre guillemets non terminé" +msgstr "Calcule les identifiants de requête." -#: utils/misc/guc.c:1496 +#: utils/misc/guc.c:1455 msgid "Writes parser performance statistics to the server log." msgstr "" "Écrit les statistiques de performance de l'analyseur dans les journaux applicatifs\n" "du serveur." -#: utils/misc/guc.c:1505 +#: utils/misc/guc.c:1464 msgid "Writes planner performance statistics to the server log." msgstr "" "Écrit les statistiques de performance de planification dans les journaux\n" "applicatifs du serveur." -#: utils/misc/guc.c:1514 +#: utils/misc/guc.c:1473 msgid "Writes executor performance statistics to the server log." msgstr "" "Écrit les statistiques de performance de l'exécuteur dans les journaux applicatifs\n" "du serveur." -#: utils/misc/guc.c:1523 +#: utils/misc/guc.c:1482 msgid "Writes cumulative performance statistics to the server log." msgstr "" "Écrit les statistiques de performance cumulatives dans les journaux applicatifs\n" "du serveur." -#: utils/misc/guc.c:1533 +#: utils/misc/guc.c:1492 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Trace les statistiques d'utilisation des ressources systèmes (mémoire et CPU) sur les différentes opérations B-tree." -#: utils/misc/guc.c:1545 +#: utils/misc/guc.c:1504 msgid "Collects information about executing commands." msgstr "Récupère les statistiques sur les commandes en exécution." -#: utils/misc/guc.c:1546 +#: utils/misc/guc.c:1505 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "" "Active la récupération d'informations sur la commande en cours d'exécution\n" "pour chaque session, avec l'heure de début de l'exécution de la commande." -#: utils/misc/guc.c:1556 +#: utils/misc/guc.c:1515 msgid "Collects statistics on database activity." msgstr "Récupère les statistiques sur l'activité de la base de données." -#: utils/misc/guc.c:1565 +#: utils/misc/guc.c:1524 msgid "Collects timing statistics for database I/O activity." msgstr "Récupère les statistiques d'horodatage sur l'activité en entrées/sorties de la base de données." -#: utils/misc/guc.c:1574 +#: utils/misc/guc.c:1533 msgid "Collects timing statistics for WAL I/O activity." msgstr "Récupère les statistiques d'horodatage sur l'activité en entrées/sorties des journaux de transactions." -#: utils/misc/guc.c:1584 +#: utils/misc/guc.c:1543 msgid "Updates the process title to show the active SQL command." msgstr "" "Met à jour le titre du processus pour indiquer la commande SQL en cours\n" "d'exécution." -#: utils/misc/guc.c:1585 +#: utils/misc/guc.c:1544 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "" "Active la mise à jour du titre du processus chaque fois qu'une nouvelle\n" "commande SQL est reçue par le serveur." -#: utils/misc/guc.c:1598 +#: utils/misc/guc.c:1557 msgid "Starts the autovacuum subprocess." msgstr "Exécute le sous-processus de l'autovacuum." -#: utils/misc/guc.c:1608 +#: utils/misc/guc.c:1567 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Génère une sortie de débogage pour LISTEN et NOTIFY." -#: utils/misc/guc.c:1620 +#: utils/misc/guc.c:1579 msgid "Emits information about lock usage." msgstr "Émet des informations sur l'utilisation des verrous." -#: utils/misc/guc.c:1630 +#: utils/misc/guc.c:1589 msgid "Emits information about user lock usage." msgstr "Émet des informations sur l'utilisation des verrous utilisateurs." -#: utils/misc/guc.c:1640 +#: utils/misc/guc.c:1599 msgid "Emits information about lightweight lock usage." msgstr "Émet des informations sur l'utilisation des verrous légers." -#: utils/misc/guc.c:1650 +#: utils/misc/guc.c:1609 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Trace les informations sur les verrous actuels lorsqu'un délai sur le deadlock est dépassé." -#: utils/misc/guc.c:1662 +#: utils/misc/guc.c:1621 msgid "Logs long lock waits." msgstr "Trace les attentes longues de verrou." -#: utils/misc/guc.c:1671 +#: utils/misc/guc.c:1630 msgid "Logs standby recovery conflict waits." msgstr "" -#: utils/misc/guc.c:1680 +#: utils/misc/guc.c:1639 msgid "Logs the host name in the connection logs." msgstr "Trace le nom d'hôte dans les traces de connexion." -#: utils/misc/guc.c:1681 +#: utils/misc/guc.c:1640 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "Par défaut, une connexion ne trace que l'adresse IP de l'hôte se connectant. Si vous voulez que s'affiche le nom de l'hôte, vous pouvez activer cette option mais, selon la configuration de la résolution de noms de votre hôte, cela peut imposer un coût en performances non négligeable." -#: utils/misc/guc.c:1692 +#: utils/misc/guc.c:1651 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Traite « expr=NULL » comme « expr IS NULL »." -#: utils/misc/guc.c:1693 +#: utils/misc/guc.c:1652 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "" "Une fois activé, les expressions de la forme expr = NULL (ou NULL = expr)\n" @@ -26520,335 +26331,329 @@ msgstr "" "l'expression est évaluée comme étant NULL et false sinon. Le comportement\n" "correct de expr = NULL est de toujours renvoyer NULL (inconnu)." -#: utils/misc/guc.c:1705 +#: utils/misc/guc.c:1664 msgid "Enables per-database user names." msgstr "Active les noms d'utilisateur par base de données." -#: utils/misc/guc.c:1714 +#: utils/misc/guc.c:1673 msgid "Sets the default read-only status of new transactions." msgstr "Initialise le statut de lecture seule par défaut des nouvelles transactions." -#: utils/misc/guc.c:1724 +#: utils/misc/guc.c:1683 msgid "Sets the current transaction's read-only status." msgstr "Affiche le statut de lecture seule de la transaction actuelle." -#: utils/misc/guc.c:1734 +#: utils/misc/guc.c:1693 msgid "Sets the default deferrable status of new transactions." msgstr "Initialise le statut déferrable par défaut des nouvelles transactions." -#: utils/misc/guc.c:1743 +#: utils/misc/guc.c:1702 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "" "S'il faut repousser une transaction sérialisable en lecture seule jusqu'à ce qu'elle\n" "puisse être exécutée sans échecs possibles de sérialisation." -#: utils/misc/guc.c:1753 +#: utils/misc/guc.c:1712 msgid "Enable row security." msgstr "Active la sécurité niveau ligne." -#: utils/misc/guc.c:1754 +#: utils/misc/guc.c:1713 msgid "When enabled, row security will be applied to all users." msgstr "Lorsqu'il est activé, le mode de sécurité niveau ligne sera appliqué à tous les utilisateurs." -#: utils/misc/guc.c:1762 +#: utils/misc/guc.c:1721 msgid "Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE." msgstr "Vérifie les corps de routine lors du CREATE FUNCTION et du CREATE PROCEDURE." -#: utils/misc/guc.c:1771 +#: utils/misc/guc.c:1730 msgid "Enable input of NULL elements in arrays." msgstr "Active la saisie d'éléments NULL dans les tableaux." -#: utils/misc/guc.c:1772 +#: utils/misc/guc.c:1731 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "" "Si activé, un NULL sans guillemets en tant que valeur d'entrée dans un\n" "tableau signifie une valeur NULL ; sinon, il sera pris littéralement." -#: utils/misc/guc.c:1788 +#: utils/misc/guc.c:1747 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OID n'est plus supporté ; ce paramètre ne peut être positionné qu'à false (faux)." -#: utils/misc/guc.c:1798 +#: utils/misc/guc.c:1757 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "" "Lance un sous-processus pour capturer la sortie d'erreurs (stderr) et/ou\n" "csvlogs dans des journaux applicatifs." -#: utils/misc/guc.c:1807 +#: utils/misc/guc.c:1766 msgid "Truncate existing log files of same name during log rotation." msgstr "" "Tronque les journaux applicatifs existants du même nom lors de la rotation\n" "des journaux applicatifs." -#: utils/misc/guc.c:1818 +#: utils/misc/guc.c:1777 msgid "Emit information about resource usage in sorting." msgstr "Émet des informations sur l'utilisation des ressources lors d'un tri." -#: utils/misc/guc.c:1832 +#: utils/misc/guc.c:1791 msgid "Generate debugging output for synchronized scanning." msgstr "Génère une sortie de débogage pour les parcours synchronisés." -#: utils/misc/guc.c:1847 +#: utils/misc/guc.c:1806 msgid "Enable bounded sorting using heap sort." msgstr "Active le tri limité en utilisant le tri de heap." -#: utils/misc/guc.c:1860 +#: utils/misc/guc.c:1819 msgid "Emit WAL-related debugging output." msgstr "Émet une sortie de débogage concernant les journaux de transactions." -#: utils/misc/guc.c:1872 -msgid "Datetimes are integer based." -msgstr "Les types datetime sont basés sur des entiers." +#: utils/misc/guc.c:1831 +msgid "Shows whether datetimes are integer based." +msgstr "Indique si les types datetime sont basés sur des entiers." -#: utils/misc/guc.c:1883 +#: utils/misc/guc.c:1842 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "" "Indique si les noms d'utilisateurs Kerberos et GSSAPI devraient être traités\n" "sans se soucier de la casse." -#: utils/misc/guc.c:1893 +#: utils/misc/guc.c:1852 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Avertie sur les échappements par antislash dans les chaînes ordinaires." -#: utils/misc/guc.c:1903 +#: utils/misc/guc.c:1862 msgid "Causes '...' strings to treat backslashes literally." msgstr "Fait que les chaînes '...' traitent les antislashs littéralement." -#: utils/misc/guc.c:1914 +#: utils/misc/guc.c:1873 msgid "Enable synchronized sequential scans." msgstr "Active l'utilisation des parcours séquentiels synchronisés." -#: utils/misc/guc.c:1924 +#: utils/misc/guc.c:1883 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Définit s'il faut inclure ou exclure la transaction de la cible de restauration." -#: utils/misc/guc.c:1934 +#: utils/misc/guc.c:1893 msgid "Allows connections and queries during recovery." msgstr "Autorise les connexions et les requêtes pendant la restauration." -#: utils/misc/guc.c:1944 +#: utils/misc/guc.c:1903 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Permet l'envoi d'informations d'un serveur en hot standby vers le serveur principal pour éviter les conflits de requêtes." -#: utils/misc/guc.c:1954 +#: utils/misc/guc.c:1913 msgid "Shows whether hot standby is currently active." -msgstr "" +msgstr "Affiche si le hot standby est actuellement actif." -#: utils/misc/guc.c:1965 +#: utils/misc/guc.c:1924 msgid "Allows modifications of the structure of system tables." msgstr "Permet les modifications de la structure des tables systèmes." -#: utils/misc/guc.c:1976 +#: utils/misc/guc.c:1935 msgid "Disables reading from system indexes." msgstr "Désactive la lecture des index système." -#: utils/misc/guc.c:1977 +#: utils/misc/guc.c:1936 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "" "Cela n'empêche pas la mise à jour des index, donc vous pouvez l'utiliser en\n" "toute sécurité. La pire conséquence est la lenteur." -#: utils/misc/guc.c:1988 +#: utils/misc/guc.c:1947 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "" "Active la compatibilité ascendante pour la vérification des droits sur les\n" "Large Objects." -#: utils/misc/guc.c:1989 +#: utils/misc/guc.c:1948 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "" "Ignore la vérification des droits lors de la lecture et de la modification\n" "des Larges Objects, pour la compatibilité avec les versions antérieures à la\n" "9.0." -#: utils/misc/guc.c:1999 +#: utils/misc/guc.c:1958 msgid "When generating SQL fragments, quote all identifiers." msgstr "Lors de la génération des rragments SQL, mettre entre guillemets tous les identifiants." -#: utils/misc/guc.c:2009 +#: utils/misc/guc.c:1968 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Affiche si les sommes de contrôle sont activées sur les données pour cette instance." -#: utils/misc/guc.c:2020 +#: utils/misc/guc.c:1979 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Ajoute un numéro de séquence aux messages syslog pour éviter des suppressions de doublons." -#: utils/misc/guc.c:2030 +#: utils/misc/guc.c:1989 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "Sépare les messages envoyés à syslog par lignes afin de les faire tenir dans 1024 octets." -#: utils/misc/guc.c:2040 +#: utils/misc/guc.c:1999 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Controle si les nœuds Gather et Gather Merge doivent également exécuter des sous-plans." -#: utils/misc/guc.c:2041 -#, fuzzy -#| msgid "Should gather nodes also run subplans, or just gather tuples?" +#: utils/misc/guc.c:2000 msgid "Should gather nodes also run subplans or just gather tuples?" -msgstr "Est-ce que les nœuds Gather devrait également exécuter des sous-plans, ou juste receuiller des lignes ?" +msgstr "Est-ce que les nœuds Gather devraient également exécuter des sous-plans, ou juste recueillir des lignes ?" -#: utils/misc/guc.c:2051 +#: utils/misc/guc.c:2010 msgid "Allow JIT compilation." msgstr "Autorise la compilation JIT." -#: utils/misc/guc.c:2062 -#, fuzzy -#| msgid "Register JIT compiled function with debugger." +#: utils/misc/guc.c:2021 msgid "Register JIT-compiled functions with debugger." -msgstr "Enregister la fonction JIT compilée avec debugueur." +msgstr "Enregistre les fonctions compilées avec JIT avec le debugger." -#: utils/misc/guc.c:2079 +#: utils/misc/guc.c:2038 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "Écrire le bitcode LLVM pour faciliter de débugage JIT." -#: utils/misc/guc.c:2090 +#: utils/misc/guc.c:2049 msgid "Allow JIT compilation of expressions." msgstr "Autorise la compilation JIT des expressions." -#: utils/misc/guc.c:2101 -#, fuzzy -#| msgid "Register JIT compiled function with perf profiler." +#: utils/misc/guc.c:2060 msgid "Register JIT-compiled functions with perf profiler." -msgstr "Enregistrer la fonction compilée JIT avec le profiler perf." +msgstr "Enregistre les fonctions compilées avec JIT avec l'outil de profilage perf." -#: utils/misc/guc.c:2118 +#: utils/misc/guc.c:2077 msgid "Allow JIT compilation of tuple deforming." msgstr "Autorise la compilation JIT de la décomposition des lignes." -#: utils/misc/guc.c:2129 +#: utils/misc/guc.c:2088 msgid "Whether to continue running after a failure to sync data files." msgstr "Soit de continuer à s'exécuter après un échec lors de la synchronisation des fichiers de données." -#: utils/misc/guc.c:2138 +#: utils/misc/guc.c:2097 msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." msgstr "Configure si un wal receiver doit créer un slot de réplication temporaire si aucun slot permanent n'est configuré." -#: utils/misc/guc.c:2156 +#: utils/misc/guc.c:2115 msgid "Forces a switch to the next WAL file if a new file has not been started within N seconds." msgstr "" "Force un changement du journal de transaction si un nouveau fichier n'a pas\n" "été créé depuis N secondes." -#: utils/misc/guc.c:2167 +#: utils/misc/guc.c:2126 msgid "Waits N seconds on connection startup after authentication." msgstr "Attends N secondes après l'authentification." -#: utils/misc/guc.c:2168 utils/misc/guc.c:2766 +#: utils/misc/guc.c:2127 utils/misc/guc.c:2725 msgid "This allows attaching a debugger to the process." msgstr "Ceci permet d'attacher un débogueur au processus." -#: utils/misc/guc.c:2177 +#: utils/misc/guc.c:2136 msgid "Sets the default statistics target." msgstr "Initialise la cible par défaut des statistiques." -#: utils/misc/guc.c:2178 +#: utils/misc/guc.c:2137 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "" "Ceci s'applique aux colonnes de tables qui n'ont pas de cible spécifique\n" "pour la colonne initialisée via ALTER TABLE SET STATISTICS." -#: utils/misc/guc.c:2187 +#: utils/misc/guc.c:2146 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "" "Initialise la taille de la liste FROM en dehors de laquelle les\n" "sous-requêtes ne sont pas rassemblées." -#: utils/misc/guc.c:2189 +#: utils/misc/guc.c:2148 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "" "Le planificateur fusionne les sous-requêtes dans des requêtes supérieures\n" "si la liste FROM résultante n'a pas plus de ce nombre d'éléments." -#: utils/misc/guc.c:2200 +#: utils/misc/guc.c:2159 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "" "Initialise la taille de la liste FROM en dehors de laquelle les contructions\n" "JOIN ne sont pas aplanies." -#: utils/misc/guc.c:2202 +#: utils/misc/guc.c:2161 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "" "La planificateur applanira les constructions JOIN explicites dans des listes\n" "d'éléments FROM lorsqu'une liste d'au plus ce nombre d'éléments en\n" "résulterait." -#: utils/misc/guc.c:2213 +#: utils/misc/guc.c:2172 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Initialise la limite des éléments FROM en dehors de laquelle GEQO est utilisé." -#: utils/misc/guc.c:2223 +#: utils/misc/guc.c:2182 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "" "GEQO : l'effort est utilisé pour initialiser une valeur par défaut pour les\n" "autres paramètres GEQO." -#: utils/misc/guc.c:2233 +#: utils/misc/guc.c:2192 msgid "GEQO: number of individuals in the population." msgstr "GEQO : nombre d'individus dans une population." -#: utils/misc/guc.c:2234 utils/misc/guc.c:2244 +#: utils/misc/guc.c:2193 utils/misc/guc.c:2203 msgid "Zero selects a suitable default value." msgstr "Zéro sélectionne une valeur par défaut convenable." -#: utils/misc/guc.c:2243 +#: utils/misc/guc.c:2202 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO : nombre d'itérations dans l'algorithme." -#: utils/misc/guc.c:2255 +#: utils/misc/guc.c:2214 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Temps d'attente du verrou avant de vérifier les verrous bloqués." -#: utils/misc/guc.c:2266 +#: utils/misc/guc.c:2225 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Définit le délai maximum avant d'annuler les requêtes lorsqu'un serveur « hot standby » traite les données des journaux de transactions archivés" -#: utils/misc/guc.c:2277 +#: utils/misc/guc.c:2236 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "" "Initialise le délai maximum avant d'annuler les requêtes lorsqu'un serveur en\n" "hotstandby traite les données des journaux de transactions envoyés en flux." -#: utils/misc/guc.c:2288 +#: utils/misc/guc.c:2247 msgid "Sets the minimum delay for applying changes during recovery." msgstr "Définit la durée minimale pour appliquer des changements lors de la restauration." -#: utils/misc/guc.c:2299 +#: utils/misc/guc.c:2258 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "Définit l'intervalle maximum entre les rapports du statut du walreceiver au serveur émetteur." -#: utils/misc/guc.c:2310 +#: utils/misc/guc.c:2269 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "Définit la durée maximale d'attente pour réceptionner des donnés du serveur émetteur." -#: utils/misc/guc.c:2321 +#: utils/misc/guc.c:2280 msgid "Sets the maximum number of concurrent connections." msgstr "Nombre maximum de connexions simultanées." -#: utils/misc/guc.c:2332 +#: utils/misc/guc.c:2291 msgid "Sets the number of connection slots reserved for superusers." msgstr "Nombre de connexions réservées aux super-utilisateurs." -#: utils/misc/guc.c:2342 +#: utils/misc/guc.c:2301 msgid "Amount of dynamic shared memory reserved at startup." msgstr "Quantité de mémoire partagée dynamique réservée au démarrage." -#: utils/misc/guc.c:2357 +#: utils/misc/guc.c:2316 msgid "Sets the number of shared memory buffers used by the server." msgstr "Nombre de tampons en mémoire partagée utilisé par le serveur." -#: utils/misc/guc.c:2368 +#: utils/misc/guc.c:2327 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Nombre maximum de tampons en mémoire partagée utilisés par chaque session." -#: utils/misc/guc.c:2379 +#: utils/misc/guc.c:2338 msgid "Sets the TCP port the server listens on." msgstr "Port TCP sur lequel le serveur écoutera." -#: utils/misc/guc.c:2389 +#: utils/misc/guc.c:2348 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Droits d'accès au socket domaine Unix." -#: utils/misc/guc.c:2390 +#: utils/misc/guc.c:2349 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "" "Les sockets de domaine Unix utilise l'ensemble des droits habituels du système\n" @@ -26856,249 +26661,231 @@ msgstr "" "mode numérique de la forme acceptée par les appels système chmod et umask\n" "(pour utiliser le format octal, le nombre doit commencer par un zéro)." -#: utils/misc/guc.c:2404 +#: utils/misc/guc.c:2363 msgid "Sets the file permissions for log files." msgstr "Initialise les droits des fichiers de trace." -#: utils/misc/guc.c:2405 +#: utils/misc/guc.c:2364 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "" "La valeur du paramètre est attendue dans le format numérique du mode accepté\n" "par les appels système chmod et umask (pour utiliser le format octal\n" "personnalisé, le numéro doit commencer par un zéro)." -#: utils/misc/guc.c:2419 -msgid "Mode of the data directory." -msgstr "Mode du répertoire des données du serveur." +#: utils/misc/guc.c:2378 +msgid "Shows the mode of the data directory." +msgstr "Affiche le mode du répertoire des données." -#: utils/misc/guc.c:2420 +#: utils/misc/guc.c:2379 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "" "La valeur du paramètre est une spécification numérique de mode dans la forme acceptée\n" "par les appels système chmod et umask (pour utiliser le format octal\n" "personnalisé, le numéro doit commencer par un 0 (zéro).)" -#: utils/misc/guc.c:2433 +#: utils/misc/guc.c:2392 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Initialise la mémoire maximum utilisée pour les espaces de travail des requêtes." -#: utils/misc/guc.c:2434 +#: utils/misc/guc.c:2393 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "" "Spécifie la mémoire à utiliser par les opérations de tris internes et par\n" "les tables de hachage avant de passer sur des fichiers temporaires sur disque." -#: utils/misc/guc.c:2446 +#: utils/misc/guc.c:2405 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Initialise la mémoire maximum utilisée pour les opérations de maintenance." -#: utils/misc/guc.c:2447 +#: utils/misc/guc.c:2406 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Ceci inclut les opérations comme VACUUM et CREATE INDEX." -#: utils/misc/guc.c:2457 +#: utils/misc/guc.c:2416 msgid "Sets the maximum memory to be used for logical decoding." msgstr "Initialise la mémoire maximum utilisée pour le décodage logique." -#: utils/misc/guc.c:2458 +#: utils/misc/guc.c:2417 msgid "This much memory can be used by each internal reorder buffer before spilling to disk." msgstr "Cette quantité de mémoire peut être utilisée par chaque cache de tri interne avant de passer sur des fichiers temporaires sur disque." -#: utils/misc/guc.c:2474 +#: utils/misc/guc.c:2433 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Initialise la profondeur maximale de la pile, en Ko." -#: utils/misc/guc.c:2485 +#: utils/misc/guc.c:2444 msgid "Limits the total size of all temporary files used by each process." msgstr "Limite la taille totale de tous les fichiers temporaires utilisés par chaque processus." -#: utils/misc/guc.c:2486 +#: utils/misc/guc.c:2445 msgid "-1 means no limit." msgstr "-1 signifie sans limite." -#: utils/misc/guc.c:2496 +#: utils/misc/guc.c:2455 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Coût d'un VACUUM pour une page trouvée dans le cache du tampon." -#: utils/misc/guc.c:2506 +#: utils/misc/guc.c:2465 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Coût d'un VACUUM pour une page introuvable dans le cache du tampon." -#: utils/misc/guc.c:2516 +#: utils/misc/guc.c:2475 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Coût d'un VACUUM pour une page modifiée par VACUUM." -#: utils/misc/guc.c:2526 +#: utils/misc/guc.c:2485 msgid "Vacuum cost amount available before napping." msgstr "Coût du VACUUM disponible avant un repos." -#: utils/misc/guc.c:2536 +#: utils/misc/guc.c:2495 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Coût du VACUUM disponible avant un repos, pour autovacuum." -#: utils/misc/guc.c:2546 +#: utils/misc/guc.c:2505 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "" "Initialise le nombre maximum de fichiers ouverts simultanément pour chaque\n" "processus serveur." -#: utils/misc/guc.c:2559 +#: utils/misc/guc.c:2518 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Initialise le nombre maximum de transactions préparées simultanément." -#: utils/misc/guc.c:2570 +#: utils/misc/guc.c:2529 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Initialise l'OID minimum des tables pour tracer les verrous." -#: utils/misc/guc.c:2571 +#: utils/misc/guc.c:2530 msgid "Is used to avoid output on system tables." msgstr "Est utilisé pour éviter la sortie sur des tables systèmes." -#: utils/misc/guc.c:2580 +#: utils/misc/guc.c:2539 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Configure l'OID de la table avec une trace des verrous sans condition." -#: utils/misc/guc.c:2592 +#: utils/misc/guc.c:2551 msgid "Sets the maximum allowed duration of any statement." msgstr "Initialise la durée maximum permise pour toute instruction." -#: utils/misc/guc.c:2593 utils/misc/guc.c:2604 utils/misc/guc.c:2615 utils/misc/guc.c:2626 +#: utils/misc/guc.c:2552 utils/misc/guc.c:2563 utils/misc/guc.c:2574 utils/misc/guc.c:2585 msgid "A value of 0 turns off the timeout." msgstr "Une valeur de 0 désactive le timeout." -#: utils/misc/guc.c:2603 +#: utils/misc/guc.c:2562 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Initialise la durée maximum permise pour toute attente d'un verrou." -#: utils/misc/guc.c:2614 -#, fuzzy -#| msgid "Sets the maximum allowed duration of any idling transaction." +#: utils/misc/guc.c:2573 msgid "Sets the maximum allowed idle time between queries, when in a transaction." -msgstr "Initialise la durée maximale autorisée pour toute transaction en attente." +msgstr "Configure la durée maximale autorisée d'attente entre deux requêtes dans une transaction." -#: utils/misc/guc.c:2625 -#, fuzzy -#| msgid "Sets the maximum allowed duration of any idling transaction." +#: utils/misc/guc.c:2584 msgid "Sets the maximum allowed idle time between queries, when not in a transaction." -msgstr "Initialise la durée maximale autorisée pour toute transaction en attente." +msgstr "Configure la durée maximale autorisée d'attente entre deux requêtes hors d'une transaction." -#: utils/misc/guc.c:2636 +#: utils/misc/guc.c:2595 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Âge minimum à partir duquel VACUUM devra geler une ligne de table." -#: utils/misc/guc.c:2646 +#: utils/misc/guc.c:2605 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Âge à partir duquel VACUUM devra parcourir une table complète pour geler les lignes." -#: utils/misc/guc.c:2656 +#: utils/misc/guc.c:2615 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Âge minimum à partir duquel VACUUM devra geler un MultiXactId dans une ligne de table." -#: utils/misc/guc.c:2666 +#: utils/misc/guc.c:2625 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "" "Âge Multixact à partir duquel VACUUM devra parcourir une table complète pour geler les\n" "lignes." -#: utils/misc/guc.c:2676 +#: utils/misc/guc.c:2635 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Nombre de transactions à partir duquel les nettoyages VACUUM et HOT doivent être déferrés." -#: utils/misc/guc.c:2685 -#, fuzzy -#| msgid "Age at which VACUUM should scan whole table to freeze tuples." +#: utils/misc/guc.c:2644 msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." -msgstr "Âge à partir duquel VACUUM devra parcourir une table complète pour geler les lignes." +msgstr "" -#: utils/misc/guc.c:2694 -#, fuzzy -#| msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." +#: utils/misc/guc.c:2653 msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "" -"Âge Multixact à partir duquel VACUUM devra parcourir une table complète pour geler les\n" -"lignes." -#: utils/misc/guc.c:2707 +#: utils/misc/guc.c:2666 msgid "Sets the maximum number of locks per transaction." msgstr "Initialise le nombre maximum de verrous par transaction." -#: utils/misc/guc.c:2708 +#: utils/misc/guc.c:2667 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "" "La table des verrous partagés est dimensionnée sur l'idée qu'au plus\n" "max_locks_per_transaction * max_connections objets distincts auront besoin\n" "d'être verrouillés à tout moment." -#: utils/misc/guc.c:2719 +#: utils/misc/guc.c:2678 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Initialise le nombre maximum de verrous prédicats par transaction." -#: utils/misc/guc.c:2720 +#: utils/misc/guc.c:2679 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "" "La table des verrous de prédicat partagés est dimensionnée sur l'idée qu'au plus\n" "max_pred_locks_per_transaction * max_connections objets distincts auront besoin\n" "d'être verrouillés à tout moment." -#: utils/misc/guc.c:2731 +#: utils/misc/guc.c:2690 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "Initialise le nombre maximum de pages et lignes verrouillées avec prédicats par transaction." -#: utils/misc/guc.c:2732 +#: utils/misc/guc.c:2691 msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." msgstr "Si plus que ce nombre de pages et lignes dans la même relation sont verrouillées par une connexion, ces verrous sont remplacés par un verrou de niveau relation." -#: utils/misc/guc.c:2742 +#: utils/misc/guc.c:2701 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Initialise le nombre maximum de lignes verrouillées avec prédicat par transaction." -#: utils/misc/guc.c:2743 +#: utils/misc/guc.c:2702 msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." msgstr "Si plus que ce nombre de lignes sur la même page sont verrouillées par une connexion, ces verrous sont remplacés par un verrou de niveau de page." -#: utils/misc/guc.c:2753 +#: utils/misc/guc.c:2712 msgid "Sets the maximum allowed time to complete client authentication." msgstr "" "Initialise le temps maximum en secondes pour terminer l'authentification du\n" "client." -#: utils/misc/guc.c:2765 +#: utils/misc/guc.c:2724 msgid "Waits N seconds on connection startup before authentication." msgstr "Attends N secondes au lancement de la connexion avant l'authentification." -#: utils/misc/guc.c:2776 -msgid "Maximum buffer size for reading ahead in the WAL during recovery." -msgstr "" - -#: utils/misc/guc.c:2777 -msgid "This controls the maximum distance we can read ahead in the WAL to prefetch referenced blocks." -msgstr "" - -#: utils/misc/guc.c:2787 +#: utils/misc/guc.c:2735 msgid "Sets the size of WAL files held for standby servers." msgstr "Initialise la volumétrie de journaux de transactions conservés pour les serveurs standby." -#: utils/misc/guc.c:2798 +#: utils/misc/guc.c:2746 msgid "Sets the minimum size to shrink the WAL to." msgstr "Initialise la taille minimale à laquelle réduire l'espace des journaux de transaction." -#: utils/misc/guc.c:2810 +#: utils/misc/guc.c:2758 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Initialise la volumétrie de journaux de transaction qui déclenche un checkpoint." -#: utils/misc/guc.c:2822 +#: utils/misc/guc.c:2770 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "" "Initialise le temps maximum entre des points de vérification (checkpoints)\n" "pour les journaux de transactions." -#: utils/misc/guc.c:2833 +#: utils/misc/guc.c:2781 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "" "Active des messages d'avertissement si les segments des points de\n" "vérifications se remplissent plus fréquemment que cette durée." -#: utils/misc/guc.c:2835 +#: utils/misc/guc.c:2783 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "" "Écrit un message dans les journaux applicatifs du serveur si les points de\n" @@ -27106,977 +26893,969 @@ msgstr "" "des points de vérification qui arrivent plus fréquemment que ce nombre de\n" "secondes. Une valeur 0 désactive l'avertissement." -#: utils/misc/guc.c:2847 utils/misc/guc.c:3063 utils/misc/guc.c:3111 +#: utils/misc/guc.c:2795 utils/misc/guc.c:3011 utils/misc/guc.c:3058 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "Nombre de pages après lequel les précédentes écritures seront synchronisées sur disque." -#: utils/misc/guc.c:2858 +#: utils/misc/guc.c:2806 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "" "Initialise le nombre de tampons de pages disque dans la mémoire partagée\n" "pour les journaux de transactions." -#: utils/misc/guc.c:2869 +#: utils/misc/guc.c:2817 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Temps entre les synchronisations des WAL sur disque effectuées par le processus d'écriture des journaux de transaction." -#: utils/misc/guc.c:2880 +#: utils/misc/guc.c:2828 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Quantité de WAL écrits par le processus d'écriture des journaux de transaction devant déclencher une synchronisation sur disque." -#: utils/misc/guc.c:2891 -msgid "Size of new file to fsync instead of writing WAL." -msgstr "Taille d'un nouveau fichier à synchroniser sur disque au lieu d'écrire dans les journaux de transactions." +#: utils/misc/guc.c:2839 +msgid "Minimum size of new file to fsync instead of writing WAL." +msgstr "Taille minimale d'un nouveau fichier à synchroniser sur disque au lieu d'écrire dans les journaux de transactions." -#: utils/misc/guc.c:2902 +#: utils/misc/guc.c:2850 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "" "Initialise le nombre maximum de processus d'envoi des journaux de transactions\n" "exécutés simultanément." -#: utils/misc/guc.c:2913 +#: utils/misc/guc.c:2861 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Initialise le nombre maximum de slots de réplication définis simultanément." -#: utils/misc/guc.c:2923 +#: utils/misc/guc.c:2871 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "Initialise la volumétrie maximale des journaux de transactions pouvant être réservée pour les slots de réplication." -#: utils/misc/guc.c:2924 +#: utils/misc/guc.c:2872 msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." msgstr "Les slots de réplication seront marqués comme échoués, et les segments relâchés pour suppression ou recyclage si autant d'espace est occupé par les journaux sur disque." -#: utils/misc/guc.c:2936 +#: utils/misc/guc.c:2884 msgid "Sets the maximum time to wait for WAL replication." msgstr "Initialise le temps maximum à attendre pour la réplication des WAL." -#: utils/misc/guc.c:2947 +#: utils/misc/guc.c:2895 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "" "Initialise le délai en microsecondes entre l'acceptation de la transaction\n" "et le vidage du journal de transaction sur disque." -#: utils/misc/guc.c:2959 +#: utils/misc/guc.c:2907 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "" "Initialise le nombre minimum de transactions ouvertes simultanément avant le\n" "commit_delay." -#: utils/misc/guc.c:2970 +#: utils/misc/guc.c:2918 msgid "Sets the number of digits displayed for floating-point values." msgstr "Initialise le nombre de chiffres affichés pour les valeurs à virgule flottante." -#: utils/misc/guc.c:2971 +#: utils/misc/guc.c:2919 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." msgstr "Ceci affecte les types de données real, double precision et géométriques. Une valeur zéro ou négative du paramètre est ajoutée au nombre standard de chiffres (FLT_DIG ou DBL_DIG comme approprié). Toute valeur plus grande que zéro sélectionne le mode de sortie précis." -#: utils/misc/guc.c:2983 +#: utils/misc/guc.c:2931 msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." msgstr "Initialise le temps d'exécution minimum au-dessus duquel un échantillon de requêtes est tracé. L'échantillonnage est déterminé par log_statement_sample_rate." -#: utils/misc/guc.c:2986 +#: utils/misc/guc.c:2934 msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "Zéro trace un échantillon de toutes les requêtes. -1 désactive cette fonctionnalité." -#: utils/misc/guc.c:2996 +#: utils/misc/guc.c:2944 msgid "Sets the minimum execution time above which all statements will be logged." msgstr "Initialise le temps d'exécution minimum au-dessus duquel toutes les requêtes seront tracées." -#: utils/misc/guc.c:2998 +#: utils/misc/guc.c:2946 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Zéro affiche toutes les requêtes. -1 désactive cette fonctionnalité." -#: utils/misc/guc.c:3008 +#: utils/misc/guc.c:2956 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "" "Initialise le temps d'exécution minimum au-dessus duquel les actions\n" "autovacuum seront tracées." -#: utils/misc/guc.c:3010 +#: utils/misc/guc.c:2958 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Zéro affiche toutes les requêtes. -1 désactive cette fonctionnalité." -#: utils/misc/guc.c:3020 +#: utils/misc/guc.c:2968 msgid "When logging statements, limit logged parameter values to first N bytes." msgstr "Lors de la trace des requêtes, limite les valeurs des paramètres tracés aux N premiers octets." -#: utils/misc/guc.c:3021 utils/misc/guc.c:3032 +#: utils/misc/guc.c:2969 utils/misc/guc.c:2980 msgid "-1 to print values in full." msgstr "-1 pour afficher les valeurs complètement." -#: utils/misc/guc.c:3031 +#: utils/misc/guc.c:2979 msgid "When reporting an error, limit logged parameter values to first N bytes." msgstr "Lors de la trace d'une erreur, limite les valeurs des paramètres tracés aux N premiers octets." -#: utils/misc/guc.c:3042 +#: utils/misc/guc.c:2990 msgid "Background writer sleep time between rounds." msgstr "Durée d'endormissement du processus d'écriture en tâche de fond (background writer) entre deux cycles." -#: utils/misc/guc.c:3053 +#: utils/misc/guc.c:3001 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Nombre maximum de pages LRU à nettoyer par le processus d'écriture en tâche de fond (background writer)" -#: utils/misc/guc.c:3076 +#: utils/misc/guc.c:3024 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Nombre de requêtes simultanées pouvant être gérées efficacement par le sous-système disque." -#: utils/misc/guc.c:3094 +#: utils/misc/guc.c:3042 msgid "A variant of effective_io_concurrency that is used for maintenance work." msgstr "Une variante de effective_io_concurrency pouvant être utilisée pour les travaux de maintenance." -#: utils/misc/guc.c:3124 +#: utils/misc/guc.c:3071 msgid "Maximum number of concurrent worker processes." msgstr "Nombre maximum de background workers simultanés." -#: utils/misc/guc.c:3136 +#: utils/misc/guc.c:3083 msgid "Maximum number of logical replication worker processes." msgstr "Nombre maximum de processus workers de réplication logique." -#: utils/misc/guc.c:3148 +#: utils/misc/guc.c:3095 msgid "Maximum number of table synchronization workers per subscription." msgstr "Nombre maximum de workers de synchronisation par souscription." -#: utils/misc/guc.c:3158 +#: utils/misc/guc.c:3105 msgid "Automatic log file rotation will occur after N minutes." msgstr "La rotation automatique des journaux applicatifs s'effectuera toutes les N minutes." -#: utils/misc/guc.c:3169 +#: utils/misc/guc.c:3116 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "La rotation automatique des journaux applicatifs s'effectuera après N kilooctets." -#: utils/misc/guc.c:3180 +#: utils/misc/guc.c:3127 msgid "Shows the maximum number of function arguments." msgstr "Affiche le nombre maximum d'arguments de fonction." -#: utils/misc/guc.c:3191 +#: utils/misc/guc.c:3138 msgid "Shows the maximum number of index keys." msgstr "Affiche le nombre maximum de clés d'index." -#: utils/misc/guc.c:3202 +#: utils/misc/guc.c:3149 msgid "Shows the maximum identifier length." msgstr "Affiche la longueur maximum d'un identifiant." -#: utils/misc/guc.c:3213 +#: utils/misc/guc.c:3160 msgid "Shows the size of a disk block." msgstr "Affiche la taille d'un bloc de disque." -#: utils/misc/guc.c:3224 +#: utils/misc/guc.c:3171 msgid "Shows the number of pages per disk file." msgstr "Affiche le nombre de pages par fichier." -#: utils/misc/guc.c:3235 +#: utils/misc/guc.c:3182 msgid "Shows the block size in the write ahead log." msgstr "Affiche la taille du bloc dans les journaux de transactions." -#: utils/misc/guc.c:3246 +#: utils/misc/guc.c:3193 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Initalise le temps à attendre avant de retenter de récupérer un WAL après une tentative infructueuse." -#: utils/misc/guc.c:3258 +#: utils/misc/guc.c:3205 msgid "Shows the size of write ahead log segments." msgstr "Affiche la taille des journaux de transactions." -#: utils/misc/guc.c:3271 +#: utils/misc/guc.c:3218 msgid "Time to sleep between autovacuum runs." msgstr "Durée d'endormissement entre deux exécutions d'autovacuum." -#: utils/misc/guc.c:3281 +#: utils/misc/guc.c:3228 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Nombre minimum de lignes mises à jour ou supprimées avant le VACUUM." -#: utils/misc/guc.c:3290 +#: utils/misc/guc.c:3237 msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." msgstr "Nombre minimum de lignes insérées avant un ANALYZE, ou -1 pour désactiver ce comportement" -#: utils/misc/guc.c:3299 +#: utils/misc/guc.c:3246 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Nombre minimum de lignes insérées, mises à jour ou supprimées avant un ANALYZE." -#: utils/misc/guc.c:3309 +#: utils/misc/guc.c:3256 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Âge à partir duquel l'autovacuum se déclenche sur une table pour empêcher un rebouclage des identifiants de transaction." -#: utils/misc/guc.c:3323 +#: utils/misc/guc.c:3270 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Âge multixact à partir duquel l'autovacuum se déclenche sur une table pour empêcher la réinitialisation du multixact" -#: utils/misc/guc.c:3333 +#: utils/misc/guc.c:3280 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Initialise le nombre maximum de processus autovacuum exécutés simultanément." -#: utils/misc/guc.c:3343 +#: utils/misc/guc.c:3290 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "Initialise le nombre maximum de processus parallèles par opération de maintenance." -#: utils/misc/guc.c:3353 +#: utils/misc/guc.c:3300 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Initialise le nombre maximum de processus parallèles par nœud d'exécution." -#: utils/misc/guc.c:3364 +#: utils/misc/guc.c:3311 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "Configure le nombre maximum de processus parallélisés pouvant être actifs en même temps." -#: utils/misc/guc.c:3375 +#: utils/misc/guc.c:3322 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Initialise la mémoire maximum utilisée par chaque processus autovacuum worker." -#: utils/misc/guc.c:3386 +#: utils/misc/guc.c:3333 msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." msgstr "Temps à partir duquel un snapshot est trop ancien pour lire des pages ayant changées après que le snapshot ait été effectué." -#: utils/misc/guc.c:3387 +#: utils/misc/guc.c:3334 msgid "A value of -1 disables this feature." msgstr "Une valeur de -1 désactive cette fonctionnalité." -#: utils/misc/guc.c:3397 +#: utils/misc/guc.c:3344 msgid "Time between issuing TCP keepalives." msgstr "Secondes entre l'exécution de « TCP keepalives »." -#: utils/misc/guc.c:3398 utils/misc/guc.c:3409 utils/misc/guc.c:3533 +#: utils/misc/guc.c:3345 utils/misc/guc.c:3356 utils/misc/guc.c:3480 msgid "A value of 0 uses the system default." msgstr "Une valeur de 0 utilise la valeur par défaut du système." -#: utils/misc/guc.c:3408 +#: utils/misc/guc.c:3355 msgid "Time between TCP keepalive retransmits." msgstr "Secondes entre les retransmissions de « TCP keepalive »." -#: utils/misc/guc.c:3419 +#: utils/misc/guc.c:3366 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "La renégociation SSL n'est plus supportée; ce paramètre ne peut être positionné qu'à 0." -#: utils/misc/guc.c:3430 +#: utils/misc/guc.c:3377 msgid "Maximum number of TCP keepalive retransmits." msgstr "Nombre maximum de retransmissions de « TCP keepalive »." -#: utils/misc/guc.c:3431 +#: utils/misc/guc.c:3378 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "" "Ceci contrôle le nombre de retransmissions keepalive consécutives qui\n" "peuvent être perdues avant qu'une connexion ne soit considérée morte. Une\n" "valeur de 0 utilise la valeur par défaut du système." -#: utils/misc/guc.c:3442 +#: utils/misc/guc.c:3389 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Configure le nombre maximum de résultats lors d'une recherche par GIN." -#: utils/misc/guc.c:3453 +#: utils/misc/guc.c:3400 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Initialise le sentiment du planificateur sur la taille des caches disques." -#: utils/misc/guc.c:3454 +#: utils/misc/guc.c:3401 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "" "C'est-à-dire, la portion des caches disques (noyau et PostgreSQL) qui sera utilisé pour les\n" "fichiers de données de PostgreSQL. C'est mesuré en pages disque, qui font\n" "normalement 8 Ko chaque." -#: utils/misc/guc.c:3465 +#: utils/misc/guc.c:3412 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Configure la quantité minimale de données de table pour un parcours parallèle." -#: utils/misc/guc.c:3466 +#: utils/misc/guc.c:3413 msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." msgstr "Si le planificateur estime qu'il lira un nombre de blocs de table trop petit pour atteindre cette limite, un parcours parallèle ne sera pas considéré." -#: utils/misc/guc.c:3476 +#: utils/misc/guc.c:3423 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Configure la quantité minimale de données d'index pour un parcours parallèle." -#: utils/misc/guc.c:3477 +#: utils/misc/guc.c:3424 msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." msgstr "Si le planificateur estime qu'il lira un nombre de blocs d'index trop petit pour atteindre cette limite, un parcours parallèle ne sera pas considéré." -#: utils/misc/guc.c:3488 +#: utils/misc/guc.c:3435 msgid "Shows the server version as an integer." msgstr "Affiche la version du serveur sous la forme d'un entier." -#: utils/misc/guc.c:3499 +#: utils/misc/guc.c:3446 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "" "Trace l'utilisation de fichiers temporaires plus gros que ce nombre de\n" "kilooctets." -#: utils/misc/guc.c:3500 +#: utils/misc/guc.c:3447 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "" "Zéro trace toutes les requêtes. La valeur par défaut est -1 (désactivant\n" "cette fonctionnalité)." -#: utils/misc/guc.c:3510 +#: utils/misc/guc.c:3457 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Configure la taille réservée pour pg_stat_activity.query, en octets." -#: utils/misc/guc.c:3521 +#: utils/misc/guc.c:3468 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Configure la taille maximale de la pending list d'un index GIN." -#: utils/misc/guc.c:3532 +#: utils/misc/guc.c:3479 msgid "TCP user timeout." msgstr "Délai d'attente maximal TCP utilisateur." -#: utils/misc/guc.c:3543 +#: utils/misc/guc.c:3490 msgid "The size of huge page that should be requested." -msgstr "" +msgstr "La taille du Huge Page devant être réclamé." -#: utils/misc/guc.c:3554 +#: utils/misc/guc.c:3501 msgid "Aggressively invalidate system caches for debugging purposes." msgstr "" -#: utils/misc/guc.c:3577 -#, fuzzy -#| msgid "Sets the maximum interval between WAL receiver status reports to the sending server." +#: utils/misc/guc.c:3524 msgid "Sets the time interval between checks for disconnection while running queries." -msgstr "Définit l'intervalle maximum entre les rapports du statut du walreceiver au serveur émetteur." +msgstr "Configure l'intervalle de temps entre des vérifications de déconnexion lors de l'exécution de requêtes." -#: utils/misc/guc.c:3597 +#: utils/misc/guc.c:3544 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "" "Initialise l'estimation du planificateur pour le coût d'une page disque\n" "récupérée séquentiellement." -#: utils/misc/guc.c:3608 +#: utils/misc/guc.c:3555 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "" "Initialise l'estimation du plnnificateur pour le coût d'une page disque\n" "récupérée non séquentiellement." -#: utils/misc/guc.c:3619 +#: utils/misc/guc.c:3566 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "" "Initialise l'estimation du planificateur pour le coût d'exécution sur chaque\n" "ligne." -#: utils/misc/guc.c:3630 +#: utils/misc/guc.c:3577 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "" "Initialise l'estimation du planificateur pour le coût de traitement de\n" "chaque ligne indexée lors d'un parcours d'index." -#: utils/misc/guc.c:3641 +#: utils/misc/guc.c:3588 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "" "Initialise l'estimation du planificateur pour le coût de traitement de\n" "chaque opérateur ou appel de fonction." -#: utils/misc/guc.c:3652 -#, fuzzy -#| msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." +#: utils/misc/guc.c:3599 msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to leader backend." -msgstr "Initialise l'estimation du planificateur pour le coût de passage de chaque ligne d'un processus fils vers le processus maître." +msgstr "Configure l'estimation du planificateur pour le coût de passage de chaque ligne d'un processus worker vers son processus leader." -#: utils/misc/guc.c:3663 +#: utils/misc/guc.c:3610 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "Initialise l'estimation du planificateur pour le coût de démarrage des processus d'exécution de requêtes parallèles." -#: utils/misc/guc.c:3675 +#: utils/misc/guc.c:3622 msgid "Perform JIT compilation if query is more expensive." msgstr "Effectuer une compilation JIT si la requête est plus coûteuse." -#: utils/misc/guc.c:3676 +#: utils/misc/guc.c:3623 msgid "-1 disables JIT compilation." msgstr "-1 désactive la compilation JIT." -#: utils/misc/guc.c:3686 +#: utils/misc/guc.c:3633 msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "Optimise les fonctions compilées avec JIT si la requête est plus coûteuse." -#: utils/misc/guc.c:3687 +#: utils/misc/guc.c:3634 msgid "-1 disables optimization." msgstr "-1 désactive l'optimisation." -#: utils/misc/guc.c:3697 +#: utils/misc/guc.c:3644 msgid "Perform JIT inlining if query is more expensive." msgstr "Effectuer un inlining JIT si la requête est plus coûteuse." -#: utils/misc/guc.c:3698 +#: utils/misc/guc.c:3645 msgid "-1 disables inlining." msgstr "-1 désactive l'inlining." -#: utils/misc/guc.c:3708 +#: utils/misc/guc.c:3655 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Initialise l'estimation du planificateur de la fraction des lignes d'un curseur à récupérer." -#: utils/misc/guc.c:3720 +#: utils/misc/guc.c:3667 msgid "GEQO: selective pressure within the population." msgstr "GEQO : pression sélective dans la population." -#: utils/misc/guc.c:3731 +#: utils/misc/guc.c:3678 msgid "GEQO: seed for random path selection." msgstr "GEQO : graine pour la sélection du chemin aléatoire." -#: utils/misc/guc.c:3742 +#: utils/misc/guc.c:3689 msgid "Multiple of work_mem to use for hash tables." msgstr "Multiple de work_mem à utiliser pour les tables de hachage." -#: utils/misc/guc.c:3753 +#: utils/misc/guc.c:3700 msgid "Multiple of the average buffer usage to free per round." msgstr "Multiplede l'utilisation moyenne des tampons à libérer à chaque tour." -#: utils/misc/guc.c:3763 +#: utils/misc/guc.c:3710 msgid "Sets the seed for random-number generation." msgstr "Initialise la clé pour la génération de nombres aléatoires." -#: utils/misc/guc.c:3774 +#: utils/misc/guc.c:3721 msgid "Vacuum cost delay in milliseconds." msgstr "Délai d'un coût de VACUUM en millisecondes." -#: utils/misc/guc.c:3785 +#: utils/misc/guc.c:3732 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Délai d'un coût de VACUUM en millisecondes, pour autovacuum." -#: utils/misc/guc.c:3796 +#: utils/misc/guc.c:3743 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "" "Nombre de lignes modifiées ou supprimées avant d'exécuter un VACUUM\n" "(fraction de reltuples)." -#: utils/misc/guc.c:3806 +#: utils/misc/guc.c:3753 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "Nombre de lignes insérées avant d'effectuer un VACUUM (fraction de reltuples)." -#: utils/misc/guc.c:3816 +#: utils/misc/guc.c:3763 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "" "Nombre de lignes insérées, mises à jour ou supprimées avant d'analyser\n" "une fraction de reltuples." -#: utils/misc/guc.c:3826 +#: utils/misc/guc.c:3773 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "" "Temps passé à vider les tampons lors du point de vérification, en tant que\n" "fraction de l'intervalle du point de vérification." -#: utils/misc/guc.c:3836 +#: utils/misc/guc.c:3783 msgid "Fraction of statements exceeding log_min_duration_sample to be logged." msgstr "Fraction de requêtes dépassant log_min_duration_sample à tracer" -#: utils/misc/guc.c:3837 +#: utils/misc/guc.c:3784 msgid "Use a value between 0.0 (never log) and 1.0 (always log)." msgstr "Utilisez une valeur entre 0,0 (pas de trace) et 1.0 (tracer tout)." -#: utils/misc/guc.c:3846 -msgid "Sets the fraction of transactions to log for new transactions." -msgstr "Définit la fraction des transactions à tracer pour les nouvelles transactions." +#: utils/misc/guc.c:3793 +msgid "Sets the fraction of transactions from which to log all statements." +msgstr "Configure la fraction des transactions pour lesquelles il faut tracer toutes les requêtes" -#: utils/misc/guc.c:3847 -msgid "Logs all statements from a fraction of transactions. Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." -msgstr "Trace tous les ordres d'une fraction des transactions. Utiliser une valeur entre 0.0 (aucune trace) et 1.0 (trace tous les ordres de toutes les transactions)." +#: utils/misc/guc.c:3794 +msgid "Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." +msgstr "Utiliser une valeur entre 0.0 (aucune trace) et 1.0 (trace tous les requêtes de toutes les transactions)." -#: utils/misc/guc.c:3867 +#: utils/misc/guc.c:3813 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "La commande shell qui sera appelée pour archiver un journal de transaction." -#: utils/misc/guc.c:3877 +#: utils/misc/guc.c:3823 msgid "Sets the shell command that will be called to retrieve an archived WAL file." msgstr "Définit la commande shell qui sera appelée pour récupérer un fichier WAL archivé." -#: utils/misc/guc.c:3887 +#: utils/misc/guc.c:3833 msgid "Sets the shell command that will be executed at every restart point." msgstr "Définit la commande shell qui sera appelée à chaque point de reprise (restart point)." -#: utils/misc/guc.c:3897 +#: utils/misc/guc.c:3843 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "Définit la commande shell qui sera appelée une fois à la fin de la restauration." -#: utils/misc/guc.c:3907 +#: utils/misc/guc.c:3853 msgid "Specifies the timeline to recover into." msgstr "Définit la timeline cible de la restauration." -#: utils/misc/guc.c:3917 +#: utils/misc/guc.c:3863 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "Positionner à « immediate » pour arrêter la restauration dès qu'un état consistent est atteint." -#: utils/misc/guc.c:3926 +#: utils/misc/guc.c:3872 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "Définit l'identifiant de transaction jusqu'où la restauration s'effectuera." -#: utils/misc/guc.c:3935 +#: utils/misc/guc.c:3881 msgid "Sets the time stamp up to which recovery will proceed." msgstr "Définit le point dans le temps jusqu'où la restauration s'effectuera." -#: utils/misc/guc.c:3944 +#: utils/misc/guc.c:3890 msgid "Sets the named restore point up to which recovery will proceed." msgstr "Définit le point de restauration nommé jusqu'où la restauration va procéder." -#: utils/misc/guc.c:3953 +#: utils/misc/guc.c:3899 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "Définit le LSN des journaux de transactions jusqu'où la restauration s'effectuera." # trigger_file -#: utils/misc/guc.c:3963 +#: utils/misc/guc.c:3909 msgid "Specifies a file name whose presence ends recovery in the standby." msgstr "Définit un nom de fichier dont la présence termine la restauration du serveur secondaire." -#: utils/misc/guc.c:3973 +#: utils/misc/guc.c:3919 msgid "Sets the connection string to be used to connect to the sending server." msgstr "Définit la chaîne de connexion à utiliser pour se connecter au serveur émetteur." -#: utils/misc/guc.c:3984 +#: utils/misc/guc.c:3930 msgid "Sets the name of the replication slot to use on the sending server." msgstr "Définit le nom du slot de réplication à utiliser sur le serveur émetteur." -#: utils/misc/guc.c:3994 +#: utils/misc/guc.c:3940 msgid "Sets the client's character set encoding." msgstr "Initialise l'encodage du client." -#: utils/misc/guc.c:4005 +#: utils/misc/guc.c:3951 msgid "Controls information prefixed to each log line." msgstr "Contrôle l'information préfixée sur chaque ligne de trace." -#: utils/misc/guc.c:4006 +#: utils/misc/guc.c:3952 msgid "If blank, no prefix is used." msgstr "Si vide, aucun préfixe n'est utilisé." -#: utils/misc/guc.c:4015 +#: utils/misc/guc.c:3961 msgid "Sets the time zone to use in log messages." msgstr "Initialise le fuseau horaire à utiliser pour les journaux applicatifs." -#: utils/misc/guc.c:4025 +#: utils/misc/guc.c:3971 msgid "Sets the display format for date and time values." msgstr "Initialise le format d'affichage des valeurs date et time." -#: utils/misc/guc.c:4026 +#: utils/misc/guc.c:3972 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Contrôle aussi l'interprétation des dates ambiguës en entrée." -#: utils/misc/guc.c:4037 +#: utils/misc/guc.c:3983 msgid "Sets the default table access method for new tables." msgstr "Définit la méthode d'accès par défaut pour les nouvelles tables." -#: utils/misc/guc.c:4048 +#: utils/misc/guc.c:3994 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Initialise le tablespace par défaut pour créer les tables et index." -#: utils/misc/guc.c:4049 +#: utils/misc/guc.c:3995 msgid "An empty string selects the database's default tablespace." msgstr "Une chaîne vide sélectionne le tablespace par défaut de la base de données." -#: utils/misc/guc.c:4059 +#: utils/misc/guc.c:4005 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "" "Initialise le(s) tablespace(s) à utiliser pour les tables temporaires et les\n" "fichiers de tri." -#: utils/misc/guc.c:4070 +#: utils/misc/guc.c:4016 msgid "Sets the path for dynamically loadable modules." msgstr "Initialise le chemin des modules chargeables dynamiquement." -#: utils/misc/guc.c:4071 +#: utils/misc/guc.c:4017 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "" "Si un module chargeable dynamiquement a besoin d'être ouvert et que le nom\n" "spécifié n'a pas une composante répertoire (c'est-à-dire que le nom ne\n" "contient pas un '/'), le système cherche le fichier spécifié sur ce chemin." -#: utils/misc/guc.c:4084 +#: utils/misc/guc.c:4030 msgid "Sets the location of the Kerberos server key file." msgstr "Initalise l'emplacement du fichier de la clé serveur pour Kerberos." -#: utils/misc/guc.c:4095 +#: utils/misc/guc.c:4041 msgid "Sets the Bonjour service name." msgstr "Initialise le nom du service Bonjour." -#: utils/misc/guc.c:4107 +#: utils/misc/guc.c:4053 msgid "Shows the collation order locale." msgstr "Affiche la locale de tri et de groupement." -#: utils/misc/guc.c:4118 +#: utils/misc/guc.c:4064 msgid "Shows the character classification and case conversion locale." msgstr "Affiche la classification des caractères et la locale de conversions." -#: utils/misc/guc.c:4129 +#: utils/misc/guc.c:4075 msgid "Sets the language in which messages are displayed." msgstr "Initialise le langage dans lequel les messages sont affichés." -#: utils/misc/guc.c:4139 +#: utils/misc/guc.c:4085 msgid "Sets the locale for formatting monetary amounts." msgstr "Initialise la locale pour le formattage des montants monétaires." -#: utils/misc/guc.c:4149 +#: utils/misc/guc.c:4095 msgid "Sets the locale for formatting numbers." msgstr "Initialise la locale pour formater les nombres." -#: utils/misc/guc.c:4159 +#: utils/misc/guc.c:4105 msgid "Sets the locale for formatting date and time values." msgstr "Initialise la locale pour formater les valeurs date et time." -#: utils/misc/guc.c:4169 +#: utils/misc/guc.c:4115 msgid "Lists shared libraries to preload into each backend." msgstr "Liste les bibliothèques partagées à précharger dans chaque processus serveur." -#: utils/misc/guc.c:4180 +#: utils/misc/guc.c:4126 msgid "Lists shared libraries to preload into server." msgstr "Liste les bibliothèques partagées à précharger dans le serveur." -#: utils/misc/guc.c:4191 +#: utils/misc/guc.c:4137 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Liste les bibliothèques partagées non privilégiées à précharger dans chaque processus serveur." -#: utils/misc/guc.c:4202 +#: utils/misc/guc.c:4148 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "" "Initialise l'ordre de recherche des schémas pour les noms qui ne précisent\n" "pas le schéma." -#: utils/misc/guc.c:4214 -msgid "Sets the server (database) character set encoding." -msgstr "Initialise le codage des caractères pour le serveur (base de données)." +#: utils/misc/guc.c:4160 +msgid "Shows the server (database) character set encoding." +msgstr "Affiche l'encodage des caractères pour le serveur (base de données)." -#: utils/misc/guc.c:4226 +#: utils/misc/guc.c:4172 msgid "Shows the server version." msgstr "Affiche la version du serveur." -#: utils/misc/guc.c:4238 +#: utils/misc/guc.c:4184 msgid "Sets the current role." msgstr "Initialise le rôle courant." -#: utils/misc/guc.c:4250 +#: utils/misc/guc.c:4196 msgid "Sets the session user name." msgstr "Initialise le nom de l'utilisateur de la session." -#: utils/misc/guc.c:4261 +#: utils/misc/guc.c:4207 msgid "Sets the destination for server log output." msgstr "Initialise la destination des journaux applicatifs du serveur." -#: utils/misc/guc.c:4262 +#: utils/misc/guc.c:4208 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "" "Les valeurs valides sont une combinaison de « stderr », « syslog »,\n" "« csvlog » et « eventlog », suivant la plateforme." -#: utils/misc/guc.c:4273 +#: utils/misc/guc.c:4219 msgid "Sets the destination directory for log files." msgstr "Initialise le répertoire de destination pour les journaux applicatifs." -#: utils/misc/guc.c:4274 +#: utils/misc/guc.c:4220 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Accepte un chemin relatif ou absolu pour le répertoire des données." -#: utils/misc/guc.c:4284 +#: utils/misc/guc.c:4230 msgid "Sets the file name pattern for log files." msgstr "Initialise le modèle de nom de fichiers pour les journaux applicatifs." -#: utils/misc/guc.c:4295 +#: utils/misc/guc.c:4241 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "" "Initialise le nom du programme utilisé pour identifier les messages de\n" "PostgreSQL dans syslog." -#: utils/misc/guc.c:4306 +#: utils/misc/guc.c:4252 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "" "Initialise le nom de l'application, utilisé pour identifier les messages de\n" "PostgreSQL dans eventlog." -#: utils/misc/guc.c:4317 +#: utils/misc/guc.c:4263 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Initialise la zone horaire pour afficher et interpréter les dates/heures." -#: utils/misc/guc.c:4327 +#: utils/misc/guc.c:4273 msgid "Selects a file of time zone abbreviations." msgstr "Sélectionne un fichier contenant les abréviations des fuseaux horaires." -#: utils/misc/guc.c:4337 +#: utils/misc/guc.c:4283 msgid "Sets the owning group of the Unix-domain socket." msgstr "Initialise le groupe d'appartenance du socket domaine Unix." -#: utils/misc/guc.c:4338 +#: utils/misc/guc.c:4284 msgid "The owning user of the socket is always the user that starts the server." msgstr "Le propriétaire du socket est toujours l'utilisateur qui a lancé le serveur." -#: utils/misc/guc.c:4348 +#: utils/misc/guc.c:4294 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Initialise les répertoires où les sockets de domaine Unix seront créés." -#: utils/misc/guc.c:4363 +#: utils/misc/guc.c:4309 msgid "Sets the host name or IP address(es) to listen to." msgstr "Initialise le nom de l'hôte ou l'adresse IP à écouter." -#: utils/misc/guc.c:4378 +#: utils/misc/guc.c:4324 msgid "Sets the server's data directory." msgstr "Initialise le répertoire des données du serveur." -#: utils/misc/guc.c:4389 +#: utils/misc/guc.c:4335 msgid "Sets the server's main configuration file." msgstr "Voir le fichier de configuration principal du serveur." -#: utils/misc/guc.c:4400 +#: utils/misc/guc.c:4346 msgid "Sets the server's \"hba\" configuration file." msgstr "Initialise le fichier de configuration « hba » du serveur." -#: utils/misc/guc.c:4411 +#: utils/misc/guc.c:4357 msgid "Sets the server's \"ident\" configuration file." msgstr "Initialise le fichier de configuration « ident » du serveur." -#: utils/misc/guc.c:4422 +#: utils/misc/guc.c:4368 msgid "Writes the postmaster PID to the specified file." msgstr "Écrit le PID du postmaster PID dans le fichier spécifié." -#: utils/misc/guc.c:4433 -msgid "Name of the SSL library." -msgstr "Nom de la librairie SSL." +#: utils/misc/guc.c:4379 +msgid "Shows the name of the SSL library." +msgstr "Affiche le nom de la bibliothèque SSL." -#: utils/misc/guc.c:4448 +#: utils/misc/guc.c:4394 msgid "Location of the SSL server certificate file." msgstr "Emplacement du fichier du certificat serveur SSL." -#: utils/misc/guc.c:4458 +#: utils/misc/guc.c:4404 msgid "Location of the SSL server private key file." msgstr "Emplacement du fichier de la clé privée SSL du serveur." -#: utils/misc/guc.c:4468 +#: utils/misc/guc.c:4414 msgid "Location of the SSL certificate authority file." msgstr "Emplacement du fichier du certificat autorité SSL." -#: utils/misc/guc.c:4478 +#: utils/misc/guc.c:4424 msgid "Location of the SSL certificate revocation list file." msgstr "Emplacement du fichier de liste de révocation des certificats SSL." -#: utils/misc/guc.c:4488 -#, fuzzy -#| msgid "Location of the SSL certificate revocation list file." +#: utils/misc/guc.c:4434 msgid "Location of the SSL certificate revocation list directory." -msgstr "Emplacement du fichier de liste de révocation des certificats SSL." +msgstr "Emplacement du répertoire de liste de révocation des certificats SSL." -#: utils/misc/guc.c:4498 +#: utils/misc/guc.c:4444 msgid "Writes temporary statistics files to the specified directory." msgstr "Écrit les fichiers statistiques temporaires dans le répertoire indiqué." -#: utils/misc/guc.c:4509 +#: utils/misc/guc.c:4455 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "Nombre de standbys synchrones et liste des noms des synchrones potentiels." -#: utils/misc/guc.c:4520 +#: utils/misc/guc.c:4466 msgid "Sets default text search configuration." msgstr "Initialise la configuration par défaut de la recherche plein texte." -#: utils/misc/guc.c:4530 +#: utils/misc/guc.c:4476 msgid "Sets the list of allowed SSL ciphers." msgstr "Initialise la liste des chiffrements SSL autorisés." -#: utils/misc/guc.c:4545 +#: utils/misc/guc.c:4491 msgid "Sets the curve to use for ECDH." msgstr "Initialise la courbe à utiliser pour ECDH." -#: utils/misc/guc.c:4560 +#: utils/misc/guc.c:4506 msgid "Location of the SSL DH parameters file." msgstr "Emplacement du fichier des paramètres DH SSL." -#: utils/misc/guc.c:4571 +#: utils/misc/guc.c:4517 msgid "Command to obtain passphrases for SSL." msgstr "Commande pour obtenir la phrase de passe pour SSL." -#: utils/misc/guc.c:4582 +#: utils/misc/guc.c:4528 msgid "Sets the application name to be reported in statistics and logs." msgstr "Configure le nom de l'application à indiquer dans les statistiques et les journaux." -#: utils/misc/guc.c:4593 +#: utils/misc/guc.c:4539 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Configure le nom du cluster, qui est inclus dans le titre du processus." -#: utils/misc/guc.c:4604 +#: utils/misc/guc.c:4550 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Configure les gestionnaires de ressource des WAL pour lesquels des vérifications de cohérence sont effectuées." -#: utils/misc/guc.c:4605 +#: utils/misc/guc.c:4551 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "Des images complètes de bloc seront tracées pour tous les blocs de données et vérifiées avec le résultat du rejeu des journaux de transactions." -#: utils/misc/guc.c:4615 +#: utils/misc/guc.c:4561 msgid "JIT provider to use." msgstr "Fournisseur JIT à utiliser." -#: utils/misc/guc.c:4626 +#: utils/misc/guc.c:4572 msgid "Log backtrace for errors in these functions." msgstr "Trace la pile pour les erreurs dans ces fonctions." -#: utils/misc/guc.c:4646 +#: utils/misc/guc.c:4592 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Indique si « \\' » est autorisé dans une constante de chaîne." -#: utils/misc/guc.c:4656 +#: utils/misc/guc.c:4602 msgid "Sets the output format for bytea." msgstr "Initialise le format de sortie pour bytea." -#: utils/misc/guc.c:4666 +#: utils/misc/guc.c:4612 msgid "Sets the message levels that are sent to the client." msgstr "Initialise les niveaux de message envoyés au client." -#: utils/misc/guc.c:4667 utils/misc/guc.c:4743 utils/misc/guc.c:4754 utils/misc/guc.c:4830 +#: utils/misc/guc.c:4613 utils/misc/guc.c:4689 utils/misc/guc.c:4700 utils/misc/guc.c:4776 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "" "Chaque niveau inclut les niveaux qui suivent. Plus loin sera le niveau,\n" "moindre sera le nombre de messages envoyés." -#: utils/misc/guc.c:4677 +#: utils/misc/guc.c:4623 msgid "Enables the planner to use constraints to optimize queries." msgstr "Active l'utilisation des contraintes par le planificateur pour optimiser les requêtes." -#: utils/misc/guc.c:4678 +#: utils/misc/guc.c:4624 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "" "Les parcours de tables seront ignorés si leur contraintes garantissent\n" "qu'aucune ligne ne correspond à la requête." -#: utils/misc/guc.c:4689 +#: utils/misc/guc.c:4635 msgid "Sets the default compression for new columns." msgstr "Définit la compression par défaut pour les nouvelles colonnes." -#: utils/misc/guc.c:4700 +#: utils/misc/guc.c:4646 msgid "Sets the transaction isolation level of each new transaction." msgstr "Initialise le niveau d'isolation des transactions pour chaque nouvelle transaction." -#: utils/misc/guc.c:4710 +#: utils/misc/guc.c:4656 msgid "Sets the current transaction's isolation level." msgstr "Initialise le niveau d'isolation de la transaction courante." -#: utils/misc/guc.c:4721 +#: utils/misc/guc.c:4667 msgid "Sets the display format for interval values." msgstr "Initialise le format d'affichage des valeurs interval." -#: utils/misc/guc.c:4732 +#: utils/misc/guc.c:4678 msgid "Sets the verbosity of logged messages." msgstr "Initialise la verbosité des messages tracés." -#: utils/misc/guc.c:4742 +#: utils/misc/guc.c:4688 msgid "Sets the message levels that are logged." msgstr "Initialise les niveaux de messages tracés." -#: utils/misc/guc.c:4753 +#: utils/misc/guc.c:4699 msgid "Causes all statements generating error at or above this level to be logged." msgstr "" "Génère une trace pour toutes les instructions qui produisent une erreur de\n" "ce niveau ou de niveaux plus importants." -#: utils/misc/guc.c:4764 +#: utils/misc/guc.c:4710 msgid "Sets the type of statements logged." msgstr "Initialise le type d'instructions tracées." -#: utils/misc/guc.c:4774 +#: utils/misc/guc.c:4720 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "" "Initialise le niveau (« facility ») de syslog à utilisé lors de l'activation\n" "de syslog." -#: utils/misc/guc.c:4789 +#: utils/misc/guc.c:4735 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "" "Configure le comportement des sessions pour les triggers et les règles de\n" "ré-écriture." -#: utils/misc/guc.c:4799 +#: utils/misc/guc.c:4745 msgid "Sets the current transaction's synchronization level." msgstr "Initialise le niveau d'isolation de la transaction courante." -#: utils/misc/guc.c:4809 +#: utils/misc/guc.c:4755 msgid "Allows archiving of WAL files using archive_command." msgstr "Autorise l'archivage des journaux de transactions en utilisant archive_command." -#: utils/misc/guc.c:4819 +#: utils/misc/guc.c:4765 msgid "Sets the action to perform upon reaching the recovery target." msgstr "Définit l'action à exécuter à l'arrivée à la cible de la restauration." -#: utils/misc/guc.c:4829 +#: utils/misc/guc.c:4775 msgid "Enables logging of recovery-related debugging information." msgstr "Active les traces sur les informations de débogage relatives à la restauration." -#: utils/misc/guc.c:4845 +#: utils/misc/guc.c:4791 msgid "Collects function-level statistics on database activity." msgstr "Récupère les statistiques niveau fonction sur l'activité de la base de données." -#: utils/misc/guc.c:4855 -#, fuzzy -#| msgid "Set the level of information written to the WAL." +#: utils/misc/guc.c:4801 msgid "Sets the level of information written to the WAL." msgstr "Configure le niveau des informations écrites dans les journaux de transactions." -#: utils/misc/guc.c:4865 +#: utils/misc/guc.c:4811 msgid "Selects the dynamic shared memory implementation used." msgstr "Sélectionne l'implémentation de la mémoire partagée dynamique." -#: utils/misc/guc.c:4875 +#: utils/misc/guc.c:4821 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "Sélectionne l'implémentation de mémoire partagée utilisée pour la principale région de mémoire partagée." -#: utils/misc/guc.c:4885 +#: utils/misc/guc.c:4831 msgid "Selects the method used for forcing WAL updates to disk." msgstr "" "Sélectionne la méthode utilisée pour forcer la mise à jour des journaux de\n" "transactions sur le disque." -#: utils/misc/guc.c:4895 +#: utils/misc/guc.c:4841 msgid "Sets how binary values are to be encoded in XML." msgstr "Configure comment les valeurs binaires seront codées en XML." -#: utils/misc/guc.c:4905 +#: utils/misc/guc.c:4851 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "" "Configure si les données XML dans des opérations d'analyse et de\n" "sérialisation implicite doivent être considérées comme des documents\n" "ou des fragments de contenu." -#: utils/misc/guc.c:4916 +#: utils/misc/guc.c:4862 msgid "Use of huge pages on Linux or Windows." msgstr "Utilisation des HugePages sur Linux ou Windows." -#: utils/misc/guc.c:4926 +#: utils/misc/guc.c:4872 msgid "Forces use of parallel query facilities." msgstr "Force l'utilisation des fonctionnalités de requête parallèle." -#: utils/misc/guc.c:4927 +#: utils/misc/guc.c:4873 msgid "If possible, run query using a parallel worker and with parallel restrictions." msgstr "Si possible, exécute des requêtes utilisant des processus parallèles et avec les restrictions parallèles." -#: utils/misc/guc.c:4937 +#: utils/misc/guc.c:4883 msgid "Chooses the algorithm for encrypting passwords." msgstr "Choisit l'algorithme pour le chiffrement des mots de passe." -#: utils/misc/guc.c:4947 +#: utils/misc/guc.c:4893 msgid "Controls the planner's selection of custom or generic plan." msgstr "Contrôle le choix par le planificateur du plan personnalisé ou du plan générique." -#: utils/misc/guc.c:4948 +#: utils/misc/guc.c:4894 msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." msgstr "Les requêtes préparées peuvent avoir des plans particulier et générique, et le planificateur tentera de choisir le meilleur. Ceci peut être utilisé pour remplacer le comportement par défaut." -#: utils/misc/guc.c:4960 +#: utils/misc/guc.c:4906 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "Définit la version minimale du protocole SSL/TLS à utiliser." -#: utils/misc/guc.c:4972 +#: utils/misc/guc.c:4918 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "Définit la version maximum du protocole SSL/TLS à utiliser." -#: utils/misc/guc.c:4984 +#: utils/misc/guc.c:4930 msgid "Sets the method for synchronizing the data directory before crash recovery." -msgstr "" +msgstr "Configure la méthode de synchronisation du répertoire de données avant la restauration après crash." -#: utils/misc/guc.c:5552 +#: utils/misc/guc.c:5498 #, c-format msgid "invalid configuration parameter name \"%s\"" msgstr "paramètre de configuration « %s » invalide" -#: utils/misc/guc.c:5554 +#: utils/misc/guc.c:5500 #, c-format msgid "Custom parameter names must be of the form \"identifier.identifier\"." -msgstr "" +msgstr "Les noms de paramètres personnalisés doivent être de la forme « identifiant.identifiant »." -#: utils/misc/guc.c:5563 utils/misc/guc.c:9322 +#: utils/misc/guc.c:5509 utils/misc/guc.c:9268 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "paramètre de configuration « %s » non reconnu" -#: utils/misc/guc.c:5856 +#: utils/misc/guc.c:5802 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s : n'a pas pu accéder au répertoire « %s » : %s\n" -#: utils/misc/guc.c:5861 +#: utils/misc/guc.c:5807 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "Lancer initdb ou pg_basebackup pour initialiser un répertoire de données PostgreSQL.\n" -#: utils/misc/guc.c:5881 +#: utils/misc/guc.c:5827 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -28085,12 +27864,12 @@ msgstr "" "%s ne sait pas où trouver le fichier de configuration du serveur.\n" "Vous devez soit spécifier l'option --config-file, soit spécifier l'option -D, soit initialiser la variable d'environnement PGDATA.\n" -#: utils/misc/guc.c:5900 +#: utils/misc/guc.c:5846 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s : n'a pas pu accéder au fichier de configuration « %s » : %s\n" -#: utils/misc/guc.c:5926 +#: utils/misc/guc.c:5872 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -28099,7 +27878,7 @@ msgstr "" "%s ne sait pas où trouver les données du système de bases de données.\n" "Il est configurable avec « data_directory » dans « %s » ou avec l'option -D ou encore avec la variable d'environnement PGDATA.\n" -#: utils/misc/guc.c:5974 +#: utils/misc/guc.c:5920 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -28108,7 +27887,7 @@ msgstr "" "%s ne sait pas où trouver le fichier de configuration « hba ».\n" "Il est configurable avec « hba_file » dans « %s » ou avec l'option -D ou encore avec la variable d'environnement PGDATA.\n" -#: utils/misc/guc.c:5997 +#: utils/misc/guc.c:5943 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -28117,187 +27896,185 @@ msgstr "" "%s ne sait pas où trouver le fichier de configuration « hba ».\n" "Il est configurable avec « ident_file » dans « %s » ou avec l'option -D ou encore avec la variable d'environnement PGDATA.\n" -#: utils/misc/guc.c:6922 +#: utils/misc/guc.c:6868 msgid "Value exceeds integer range." msgstr "La valeur dépasse l'échelle des entiers." -#: utils/misc/guc.c:7158 +#: utils/misc/guc.c:7104 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s est en dehors des limites valides pour le paramètre « %s » (%d .. %d)" -#: utils/misc/guc.c:7194 +#: utils/misc/guc.c:7140 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s est en dehors des limites valides pour le paramètre « %s » (%g .. %g)" -#: utils/misc/guc.c:7354 utils/misc/guc.c:8726 +#: utils/misc/guc.c:7300 utils/misc/guc.c:8672 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "ne peut pas configurer les paramètres lors d'une opération parallèle" -#: utils/misc/guc.c:7371 utils/misc/guc.c:8567 +#: utils/misc/guc.c:7317 utils/misc/guc.c:8513 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "le paramètre « %s » ne peut pas être changé" -#: utils/misc/guc.c:7404 +#: utils/misc/guc.c:7350 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "le paramètre « %s » ne peut pas être modifié maintenant" -#: utils/misc/guc.c:7422 utils/misc/guc.c:7469 utils/misc/guc.c:11367 +#: utils/misc/guc.c:7368 utils/misc/guc.c:7415 utils/misc/guc.c:11313 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "droit refusé pour initialiser le paramètre « %s »" -#: utils/misc/guc.c:7459 +#: utils/misc/guc.c:7405 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "le paramètre « %s » ne peut pas être initialisé après le lancement du serveur" -#: utils/misc/guc.c:7507 +#: utils/misc/guc.c:7453 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "" "ne peut pas configurer le paramètre « %s » à l'intérieur d'une fonction\n" "SECURITY DEFINER" -#: utils/misc/guc.c:8140 utils/misc/guc.c:8187 utils/misc/guc.c:9584 +#: utils/misc/guc.c:8086 utils/misc/guc.c:8133 utils/misc/guc.c:9530 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "doit être super-utilisateur ou membre de pg_read_all_settings pour examiner « %s »" -#: utils/misc/guc.c:8271 +#: utils/misc/guc.c:8217 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s prend un seul argument" -#: utils/misc/guc.c:8519 +#: utils/misc/guc.c:8465 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "doit être super-utilisateur pour exécuter la commande ALTER SYSTEM" -#: utils/misc/guc.c:8600 +#: utils/misc/guc.c:8546 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "la valeur du paramètre pour ALTER SYSTEM ne doit pas contenir de caractère de retour à la ligne" -#: utils/misc/guc.c:8645 +#: utils/misc/guc.c:8591 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "n'a pas pu analyser le contenu du fichier « %s »" -#: utils/misc/guc.c:8802 +#: utils/misc/guc.c:8748 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT n'est pas implémenté" -#: utils/misc/guc.c:8886 +#: utils/misc/guc.c:8832 #, c-format msgid "SET requires parameter name" msgstr "SET requiert le nom du paramètre" -#: utils/misc/guc.c:9019 +#: utils/misc/guc.c:8965 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "tentative de redéfinition du paramètre « %s »" -#: utils/misc/guc.c:10814 +#: utils/misc/guc.c:10760 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "lors de la configuration du paramètre « %s » en « %s »" -#: utils/misc/guc.c:10979 +#: utils/misc/guc.c:10925 #, c-format msgid "parameter \"%s\" could not be set" msgstr "le paramètre « %s » n'a pas pu être configuré" -#: utils/misc/guc.c:11071 +#: utils/misc/guc.c:11017 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "n'a pas pu analyser la configuration du paramètre « %s »" -#: utils/misc/guc.c:11429 utils/misc/guc.c:11463 +#: utils/misc/guc.c:11375 utils/misc/guc.c:11409 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "valeur invalide pour le paramètre « %s » : %d" -#: utils/misc/guc.c:11497 +#: utils/misc/guc.c:11443 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "valeur invalide pour le paramètre « %s » : %g" -#: utils/misc/guc.c:11784 +#: utils/misc/guc.c:11730 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "« temp_buffers » ne peut pas être modifié après que des tables temporaires aient été utilisées dans la session." -#: utils/misc/guc.c:11796 +#: utils/misc/guc.c:11742 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour n'est pas supporté dans cette installation" -#: utils/misc/guc.c:11809 +#: utils/misc/guc.c:11755 #, c-format msgid "SSL is not supported by this build" msgstr "SSL n'est pas supporté dans cette installation" -#: utils/misc/guc.c:11821 +#: utils/misc/guc.c:11767 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Ne peut pas activer le paramètre avec « log_statement_stats » à true." -#: utils/misc/guc.c:11833 +#: utils/misc/guc.c:11779 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "" "Ne peut pas activer « log_statement_stats » lorsque « log_parser_stats »,\n" "« log_planner_stats » ou « log_executor_stats » est true." -#: utils/misc/guc.c:12063 +#: utils/misc/guc.c:12009 #, c-format msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "effective_io_concurrency doit être positionné à 0 sur les plateformes où manque posix_fadvise()" -#: utils/misc/guc.c:12076 +#: utils/misc/guc.c:12022 #, c-format msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "maintenance_io_concurrency doit être positionné à 0 sur les plateformes où manque posix_fadvise()" -#: utils/misc/guc.c:12090 -#, fuzzy, c-format -#| msgid "huge pages not supported on this platform" +#: utils/misc/guc.c:12036 +#, c-format msgid "huge_page_size must be 0 on this platform." -msgstr "Huge Pages non supportées sur cette plateforme" +msgstr "huge_page_size doit valoir 0 sur cette plateforme" -#: utils/misc/guc.c:12104 -#, fuzzy, c-format -#| msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." +#: utils/misc/guc.c:12050 +#, c-format msgid "client_connection_check_interval must be set to 0 on platforms that lack POLLRDHUP." -msgstr "maintenance_io_concurrency doit être positionné à 0 sur les plateformes où manque posix_fadvise()" +msgstr "client_connection_check_interval doit être positionné à 0 sur les plateformes où POLLRDHUP manque" -#: utils/misc/guc.c:12246 +#: utils/misc/guc.c:12178 #, c-format msgid "invalid character" msgstr "caractère invalide" -#: utils/misc/guc.c:12306 +#: utils/misc/guc.c:12238 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline n'est pas un nombre valide ." -#: utils/misc/guc.c:12346 +#: utils/misc/guc.c:12278 #, c-format msgid "multiple recovery targets specified" msgstr "multiples cibles de restauration spécifiées" -#: utils/misc/guc.c:12347 +#: utils/misc/guc.c:12279 #, c-format msgid "At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set." msgstr "Une seule valeur peut être spécifiée, parmi recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid." -#: utils/misc/guc.c:12355 +#: utils/misc/guc.c:12287 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "La seule valeur autorisée est « immediate »." @@ -28574,6 +28351,42 @@ msgstr "une transaction sérialisable en écriture ne peut pas importer un snaps msgid "cannot import a snapshot from a different database" msgstr "ne peut pas importer un snapshot à partir d'une base de données différente" +#~ msgid "there is no contrecord flag at %X/%X reading %X/%X" +#~ msgstr "il n'existe pas de drapeau contrecord à %X/%X en lisant %X/%X" + +#~ msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" +#~ msgstr "longueur %u invalide du contrecord à %X/%X en lisant %X/%X, attendait %u" + +#~ msgid "Connections and Authentication" +#~ msgstr "Connexions et authentification" + +#~ msgid "Resource Usage" +#~ msgstr "Utilisation des ressources" + +#~ msgid "Write-Ahead Log" +#~ msgstr "Write-Ahead Log" + +#~ msgid "Replication" +#~ msgstr "Réplication" + +#~ msgid "Query Tuning" +#~ msgstr "Optimisation des requêtes" + +#~ msgid "Reporting and Logging" +#~ msgstr "Rapports et traces" + +#~ msgid "Process Title" +#~ msgstr "Titre du processus" + +#~ msgid "Statistics" +#~ msgstr "Statistiques" + +#~ msgid "Client Connection Defaults" +#~ msgstr "Valeurs par défaut pour les connexions client" + +#~ msgid "Version and Platform Compatibility" +#~ msgstr "Compatibilité des versions et des plateformes" + #~ msgid "For RAID arrays, this should be approximately the number of drive spindles in the array." #~ msgstr "" #~ "Pour les systèmes RAID, cela devrait être approximativement le nombre de\n" @@ -30663,9 +30476,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "cannot extract array element from a non-array" #~ msgstr "ne peut pas extraire un élément du tableau à partir d'un objet qui n'est pas un tableau" -#~ msgid "cannot call function with null path elements" -#~ msgstr "ne peut pas appeler une fonction avec des éléments chemins NULL" - #~ msgid "cannot call json_object_keys on an array" #~ msgstr "ne peut pas appeler json_object_keys sur un tableau" @@ -31658,18 +31468,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "wrong data type: %u, expected %u" #~ msgstr "mauvais type de données : %u, alors que %u attendu" -#~ msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." -#~ msgstr "Reconstruisez tous les objets affectés par ce collationnement, et lancez ALTER COLLATION %s REFRESH VERSION, ou construisez PostgreSQL avec la bonne version de bibliothèque." - -#~ msgid "The collation in the database was created using version %s, but the operating system provides version %s." -#~ msgstr "Le collationnement dans la base de données a été créé en utilisant la version %s mais le système d'exploitation fournit la version %s." - -#~ msgid "collation \"%s\" has version mismatch" -#~ msgstr "le collationnement « %s » a des versions différentes" - -#~ msgid "collation \"%s\" has no actual version, but a version was specified" -#~ msgstr "le collationnement « %s » n'a pas de version réelle mais une version était indiquée" - #~ msgid "wrong element type" #~ msgstr "mauvais type d'élément" @@ -31878,12 +31676,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "COPY BINARY is not supported to stdout or from stdin" #~ msgstr "COPY BINARY n'est pas supporté vers stdout ou à partir de stdin" -#~ msgid "version has not changed" -#~ msgstr "la version n'a pas changé" - -#~ msgid "changing version from %s to %s" -#~ msgstr "changement de version de %s à %s" - #~ msgid "automatic analyze of table \"%s.%s.%s\" system usage: %s" #~ msgstr "ANALYZE automatique de la table « %s.%s.%s » ; utilisation système : %s" @@ -31904,12 +31696,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "drop auto-cascades to %s" #~ msgstr "DROP cascade automatiquement sur %s" -#~ msgid "invalid contrecord length %u at %X/%X" -#~ msgstr "longueur %u invalide du contrecord à %X/%X" - -#~ msgid "there is no contrecord flag at %X/%X" -#~ msgstr "il n'existe pas de drapeau contrecord à %X/%X" - #~ msgid "backup timeline %u in file \"%s\"" #~ msgstr "timeline de sauvegarde %u dans le fichier « %s »" @@ -31986,3 +31772,24 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "pclose failed: %m" #~ msgstr "échec de pclose : %m" + +#~ msgid "You need to rebuild PostgreSQL using --with-libxml." +#~ msgstr "Vous devez recompiler PostgreSQL en utilisant --with-libxml." + +#~ msgid "You need to rebuild PostgreSQL using --with-icu." +#~ msgstr "Vous devez recompiler PostgreSQL en utilisant --with-icu." + +#~ msgid "arguments declared \"anycompatiblemultirange\" are not all alike" +#~ msgstr "les arguments déclarés « anycompatiblemultirange » ne sont pas tous identiques" + +#~ msgid "arguments declared \"anycompatiblerange\" are not all alike" +#~ msgstr "les arguments déclarés « anycompatiblerange » ne sont pas tous identiques" + +#~ msgid "arguments declared \"anymultirange\" are not all alike" +#~ msgstr "les arguments déclarés « anymultirange » ne sont pas tous identiques" + +#~ msgid "arguments declared \"anyrange\" are not all alike" +#~ msgstr "les arguments déclarés « anyrange » ne sont pas tous identiques" + +#~ msgid "arguments declared \"anyelement\" are not all alike" +#~ msgstr "les arguments déclarés « anyelement » ne sont pas tous identiques" diff --git a/src/bin/initdb/po/es.po b/src/bin/initdb/po/es.po index 2aae35de04905..6229505959cdf 100644 --- a/src/bin/initdb/po/es.po +++ b/src/bin/initdb/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: initdb (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:46+0000\n" +"POT-Creation-Date: 2021-05-14 19:47+0000\n" "PO-Revision-Date: 2020-06-08 15:50-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -20,58 +20,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: BlackCAT 1.0\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "precaución: " -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "no se pudo identificar el directorio actual: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "el binario «%s» no es válido" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "no se pudo leer el binario «%s»" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "no se pudo encontrar un «%s» para ejecutar" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "no se pudo cambiar al directorio «%s»: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "no se pudo leer el enlace simbólico «%s»: %m" -#: ../../common/exec.c:410 -#, c-format -msgid "pclose failed: %m" -msgstr "pclose falló: %m" +#: ../../common/exec.c:409 +#, fuzzy, c-format +#| msgid "%s failed: %m" +msgid "%s() failed: %m" +msgstr "%s falló: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 -#: initdb.c:325 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 +#: initdb.c:328 #, c-format msgid "out of memory" msgstr "memoria agotada" @@ -87,33 +88,33 @@ msgstr "memoria agotada\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" -#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 +#: ../../common/file_utils.c:87 ../../common/file_utils.c:451 #, c-format msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" -#: ../../common/file_utils.c:158 ../../common/pgfnames.c:48 +#: ../../common/file_utils.c:166 ../../common/pgfnames.c:48 #, c-format msgid "could not open directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" -#: ../../common/file_utils.c:192 ../../common/pgfnames.c:69 +#: ../../common/file_utils.c:200 ../../common/pgfnames.c:69 #, c-format msgid "could not read directory \"%s\": %m" msgstr "no se pudo leer el directorio «%s»: %m" -#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 -#: ../../common/file_utils.c:357 +#: ../../common/file_utils.c:232 ../../common/file_utils.c:291 +#: ../../common/file_utils.c:365 #, c-format msgid "could not open file \"%s\": %m" msgstr "no se pudo abrir el archivo «%s»: %m" -#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 +#: ../../common/file_utils.c:303 ../../common/file_utils.c:373 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" -#: ../../common/file_utils.c:375 +#: ../../common/file_utils.c:383 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "no se pudo renombrar el archivo de «%s» a «%s»: %m" @@ -227,82 +228,82 @@ msgstr "no se pudo definir un junction para «%s»: %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "no se pudo obtener junction para «%s»: %s\n" -#: initdb.c:481 initdb.c:1505 +#: initdb.c:461 initdb.c:1493 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "no se pudo abrir archivo «%s» para lectura: %m" -#: initdb.c:536 initdb.c:846 initdb.c:872 +#: initdb.c:505 initdb.c:827 initdb.c:853 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "no se pudo abrir el archivo «%s» para escritura: %m" -#: initdb.c:543 initdb.c:550 initdb.c:852 initdb.c:877 +#: initdb.c:512 initdb.c:519 initdb.c:833 initdb.c:858 #, c-format msgid "could not write file \"%s\": %m" msgstr "no se pudo escribir el archivo «%s»: %m" -#: initdb.c:568 +#: initdb.c:537 #, c-format msgid "could not execute command \"%s\": %m" msgstr "no se pudo ejecutar la orden «%s»: %m" -#: initdb.c:586 +#: initdb.c:555 #, c-format msgid "removing data directory \"%s\"" msgstr "eliminando el directorio de datos «%s»" -#: initdb.c:588 +#: initdb.c:557 #, c-format msgid "failed to remove data directory" msgstr "no se pudo eliminar el directorio de datos" -#: initdb.c:592 +#: initdb.c:561 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "eliminando el contenido del directorio «%s»" -#: initdb.c:595 +#: initdb.c:564 #, c-format msgid "failed to remove contents of data directory" msgstr "no se pudo eliminar el contenido del directorio de datos" -#: initdb.c:600 +#: initdb.c:569 #, c-format msgid "removing WAL directory \"%s\"" msgstr "eliminando el directorio de WAL «%s»" -#: initdb.c:602 +#: initdb.c:571 #, c-format msgid "failed to remove WAL directory" msgstr "no se pudo eliminar el directorio de WAL" -#: initdb.c:606 +#: initdb.c:575 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "eliminando el contenido del directorio de WAL «%s»" -#: initdb.c:608 +#: initdb.c:577 #, c-format msgid "failed to remove contents of WAL directory" msgstr "no se pudo eliminar el contenido del directorio de WAL" -#: initdb.c:615 +#: initdb.c:584 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "directorio de datos «%s» no eliminado a petición del usuario" -#: initdb.c:619 +#: initdb.c:588 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "directorio de WAL «%s» no eliminado a petición del usuario" -#: initdb.c:637 +#: initdb.c:606 #, c-format msgid "cannot be run as root" msgstr "no se puede ejecutar como «root»" -#: initdb.c:639 +#: initdb.c:608 #, c-format msgid "" "Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" @@ -311,17 +312,17 @@ msgstr "" "Por favor conéctese (usando, por ejemplo, «su») con un usuario no privilegiado,\n" "quien ejecutará el proceso servidor.\n" -#: initdb.c:672 +#: initdb.c:641 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "«%s» no es un nombre válido de codificación" -#: initdb.c:805 +#: initdb.c:786 #, c-format msgid "file \"%s\" does not exist" msgstr "el archivo «%s» no existe" -#: initdb.c:807 initdb.c:814 initdb.c:823 +#: initdb.c:788 initdb.c:795 initdb.c:804 #, c-format msgid "" "This might mean you have a corrupted installation or identified\n" @@ -330,124 +331,124 @@ msgstr "" "Esto puede significar que tiene una instalación corrupta o ha\n" "identificado el directorio equivocado con la opción -L.\n" -#: initdb.c:812 +#: initdb.c:793 #, c-format msgid "could not access file \"%s\": %m" msgstr "no se pudo acceder al archivo «%s»: %m" -#: initdb.c:821 +#: initdb.c:802 #, c-format msgid "file \"%s\" is not a regular file" msgstr "el archivo «%s» no es un archivo regular" -#: initdb.c:966 +#: initdb.c:947 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "seleccionando implementación de memoria compartida dinámica ..." -#: initdb.c:975 +#: initdb.c:956 #, c-format msgid "selecting default max_connections ... " msgstr "seleccionando el valor para max_connections ... " -#: initdb.c:1006 +#: initdb.c:987 #, c-format msgid "selecting default shared_buffers ... " msgstr "seleccionando el valor para shared_buffers ... " -#: initdb.c:1040 +#: initdb.c:1021 #, c-format msgid "selecting default time zone ... " msgstr "seleccionando el huso horario por omisión ... " -#: initdb.c:1074 +#: initdb.c:1055 msgid "creating configuration files ... " msgstr "creando archivos de configuración ... " -#: initdb.c:1227 initdb.c:1246 initdb.c:1332 initdb.c:1347 +#: initdb.c:1214 initdb.c:1233 initdb.c:1319 initdb.c:1334 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "no se pudo cambiar los permisos de «%s»: %m" -#: initdb.c:1369 +#: initdb.c:1356 #, c-format msgid "running bootstrap script ... " msgstr "ejecutando script de inicio (bootstrap) ... " -#: initdb.c:1381 +#: initdb.c:1368 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "el archivo de entrada «%s» no pertenece a PostgreSQL %s" -#: initdb.c:1384 +#: initdb.c:1371 #, c-format msgid "Check your installation or specify the correct path using the option -L.\n" msgstr "Verifique su instalación o especifique la ruta correcta usando la opción -L.\n" -#: initdb.c:1482 +#: initdb.c:1470 msgid "Enter new superuser password: " msgstr "Ingrese la nueva contraseña del superusuario: " -#: initdb.c:1483 +#: initdb.c:1471 msgid "Enter it again: " msgstr "Ingrésela nuevamente: " -#: initdb.c:1486 +#: initdb.c:1474 #, c-format msgid "Passwords didn't match.\n" msgstr "Las constraseñas no coinciden.\n" -#: initdb.c:1512 +#: initdb.c:1501 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "no se pudo leer la contraseña desde el archivo «%s»: %m" -#: initdb.c:1515 +#: initdb.c:1504 #, c-format msgid "password file \"%s\" is empty" msgstr "el archivo de contraseña «%s» está vacío" -#: initdb.c:2043 +#: initdb.c:1995 #, c-format msgid "caught signal\n" msgstr "se ha capturado una señal\n" -#: initdb.c:2049 +#: initdb.c:2001 #, c-format msgid "could not write to child process: %s\n" msgstr "no se pudo escribir al proceso hijo: %s\n" -#: initdb.c:2057 +#: initdb.c:2009 #, c-format msgid "ok\n" msgstr "hecho\n" -#: initdb.c:2147 +#: initdb.c:2099 #, c-format msgid "setlocale() failed" msgstr "setlocale() falló" -#: initdb.c:2168 +#: initdb.c:2120 #, c-format msgid "failed to restore old locale \"%s\"" msgstr "no se pudo restaurar la configuración regional anterior «%s»" -#: initdb.c:2177 +#: initdb.c:2129 #, c-format msgid "invalid locale name \"%s\"" msgstr "nombre de configuración regional «%s» no es válido" -#: initdb.c:2188 +#: initdb.c:2140 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" msgstr "configuración regional inválida; revise las variables de entorno LANG y LC_*" -#: initdb.c:2215 +#: initdb.c:2167 #, c-format msgid "encoding mismatch" msgstr "codificaciones no coinciden" -#: initdb.c:2217 +#: initdb.c:2169 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the\n" @@ -462,7 +463,7 @@ msgstr "" "Ejecute %s nuevamente y no especifique una codificación, o bien especifique\n" "una combinación adecuada.\n" -#: initdb.c:2289 +#: initdb.c:2241 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -471,17 +472,17 @@ msgstr "" "%s inicializa un cluster de base de datos PostgreSQL.\n" "\n" -#: initdb.c:2290 +#: initdb.c:2242 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: initdb.c:2291 +#: initdb.c:2243 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPCIÓN]... [DATADIR]\n" -#: initdb.c:2292 +#: initdb.c:2244 #, c-format msgid "" "\n" @@ -490,52 +491,57 @@ msgstr "" "\n" "Opciones:\n" -#: initdb.c:2293 +#: initdb.c:2245 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr "" " -A, --auth=MÉTODO método de autentificación por omisión para\n" " conexiones locales\n" -#: initdb.c:2294 +#: initdb.c:2246 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr "" " --auth-host=MÉTODO método de autentificación por omisión para\n" " conexiones locales TCP/IP\n" -#: initdb.c:2295 +#: initdb.c:2247 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr "" " --auth-local=MÉTODO método de autentificación por omisión para\n" " conexiones de socket local\n" -#: initdb.c:2296 +#: initdb.c:2248 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]DATADIR ubicación para este cluster de bases de datos\n" -#: initdb.c:2297 +#: initdb.c:2249 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=CODIF codificación por omisión para nuevas bases de datos\n" -#: initdb.c:2298 +#: initdb.c:2250 #, c-format msgid " -g, --allow-group-access allow group read/execute on data directory\n" msgstr "" " -g, --allow-group-access dar al grupo permisos de lectura/ejecución sobre\n" " el directorio de datos\n" -#: initdb.c:2299 +#: initdb.c:2251 +#, c-format +msgid " -k, --data-checksums use data page checksums\n" +msgstr " -k, --data-checksums activar sumas de verificación en páginas de datos\n" + +#: initdb.c:2252 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr "" " --locale=LOCALE configuración regional por omisión para \n" " nuevas bases de datos\n" -#: initdb.c:2300 +#: initdb.c:2253 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -549,17 +555,17 @@ msgstr "" " en la categoría respectiva (el valor por omisión\n" " es tomado de variables de ambiente)\n" -#: initdb.c:2304 +#: initdb.c:2257 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale equivalente a --locale=C\n" -#: initdb.c:2305 +#: initdb.c:2258 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=ARCHIVO leer contraseña del nuevo superusuario del archivo\n" -#: initdb.c:2306 +#: initdb.c:2259 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -568,27 +574,27 @@ msgstr "" " -T, --text-search-config=CONF\n" " configuración de búsqueda en texto por omisión\n" -#: initdb.c:2308 +#: initdb.c:2261 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=USUARIO nombre del superusuario del cluster\n" -#: initdb.c:2309 +#: initdb.c:2262 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt pedir una contraseña para el nuevo superusuario\n" -#: initdb.c:2310 +#: initdb.c:2263 #, c-format msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" msgstr " -X, --waldir=WALDIR ubicación del directorio WAL\n" -#: initdb.c:2311 +#: initdb.c:2264 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=TAMAÑO tamaño de los segmentos de WAL, en megabytes\n" -#: initdb.c:2312 +#: initdb.c:2265 #, c-format msgid "" "\n" @@ -597,42 +603,43 @@ msgstr "" "\n" "Opciones menos usadas:\n" -#: initdb.c:2313 +#: initdb.c:2266 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug genera mucha salida de depuración\n" -#: initdb.c:2314 -#, c-format -msgid " -k, --data-checksums use data page checksums\n" -msgstr " -k, --data-checksums activar sumas de verificación en páginas de datos\n" - -#: initdb.c:2315 +#: initdb.c:2267 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L DIRECTORIO donde encontrar los archivos de entrada\n" -#: initdb.c:2316 +#: initdb.c:2268 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, --no-clean no limpiar después de errores\n" -#: initdb.c:2317 +#: initdb.c:2269 #, c-format msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" msgstr " -N, --no-sync no esperar que los cambios se sincronicen a disco\n" -#: initdb.c:2318 +#: initdb.c:2270 +#, fuzzy, c-format +#| msgid " --no-subscriptions do not restore subscriptions\n" +msgid " --no-instructions do not print instructions for next steps\n" +msgstr " --no-subscriptions no restaurar suscripciones\n" + +#: initdb.c:2271 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, --show muestra variables internas\n" -#: initdb.c:2319 +#: initdb.c:2272 #, c-format msgid " -S, --sync-only only sync data directory\n" msgstr " -S, --sync-only sólo sincronizar el directorio de datos\n" -#: initdb.c:2320 +#: initdb.c:2273 #, c-format msgid "" "\n" @@ -641,17 +648,17 @@ msgstr "" "\n" "Otras opciones:\n" -#: initdb.c:2321 +#: initdb.c:2274 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de version y salir\n" -#: initdb.c:2322 +#: initdb.c:2275 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: initdb.c:2323 +#: initdb.c:2276 #, c-format msgid "" "\n" @@ -662,7 +669,7 @@ msgstr "" "Si el directorio de datos no es especificado, se usa la variable de\n" "ambiente PGDATA.\n" -#: initdb.c:2325 +#: initdb.c:2278 #, c-format msgid "" "\n" @@ -671,29 +678,30 @@ msgstr "" "\n" "Reporte errores a <%s>.\n" -#: initdb.c:2326 +#: initdb.c:2279 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: initdb.c:2354 +#: initdb.c:2307 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "método de autentificación «%s» no válido para conexiones «%s»" -#: initdb.c:2370 -#, c-format -msgid "must specify a password for the superuser to enable %s authentication" +#: initdb.c:2323 +#, fuzzy, c-format +#| msgid "must specify a password for the superuser to enable %s authentication" +msgid "must specify a password for the superuser to enable password authentication" msgstr "" "debe especificar una contraseña al superusuario para activar\n" "autentificación %s" -#: initdb.c:2397 +#: initdb.c:2344 #, c-format msgid "no data directory specified" msgstr "no se especificó un directorio de datos" -#: initdb.c:2399 +#: initdb.c:2346 #, c-format msgid "" "You must identify the directory where the data for this database system\n" @@ -703,7 +711,13 @@ msgstr "" "Debe especificar el directorio donde residirán los datos para este clúster.\n" "Hágalo usando la opción -D o la variable de ambiente PGDATA.\n" -#: initdb.c:2434 +#: initdb.c:2364 +#, fuzzy, c-format +#| msgid "could not set printing parameter \"%s\"" +msgid "could not set environment" +msgstr "no se pudo definir parámetro de impresión «%s»" + +#: initdb.c:2384 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -714,7 +728,7 @@ msgstr "" "directorio que «%s».\n" "Verifique su instalación." -#: initdb.c:2439 +#: initdb.c:2389 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -725,17 +739,17 @@ msgstr "" "pero no es de la misma versión que %s.\n" "Verifique su instalación." -#: initdb.c:2458 +#: initdb.c:2408 #, c-format msgid "input file location must be an absolute path" msgstr "la ubicación de archivos de entrada debe ser una ruta absoluta" -#: initdb.c:2475 +#: initdb.c:2425 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "El cluster será inicializado con configuración regional «%s».\n" -#: initdb.c:2478 +#: initdb.c:2428 #, c-format msgid "" "The database cluster will be initialized with locales\n" @@ -754,24 +768,24 @@ msgstr "" " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:2502 +#: initdb.c:2452 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "" "no se pudo encontrar una codificación apropiada para\n" "la configuración regional «%s»" -#: initdb.c:2504 +#: initdb.c:2454 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "Ejecute %s con la opción -E.\n" -#: initdb.c:2505 initdb.c:3127 initdb.c:3148 +#: initdb.c:2455 initdb.c:3089 initdb.c:3110 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Use «%s --help» para obtener mayor información.\n" -#: initdb.c:2518 +#: initdb.c:2468 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -781,12 +795,12 @@ msgstr "" "no puede ser usada como codificación del lado del servidor.\n" "La codificación por omisión será «%s».\n" -#: initdb.c:2523 +#: initdb.c:2473 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "la configuración regional «%s» requiere la codificación no soportada «%s»" -#: initdb.c:2526 +#: initdb.c:2476 #, c-format msgid "" "Encoding \"%s\" is not allowed as a server-side encoding.\n" @@ -796,59 +810,59 @@ msgstr "" "del servidor.\n" "Ejecute %s nuevamente con una selección de configuración regional diferente.\n" -#: initdb.c:2535 +#: initdb.c:2485 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "La codificación por omisión ha sido por lo tanto definida a «%s».\n" -#: initdb.c:2597 +#: initdb.c:2551 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" msgstr "" "no se pudo encontrar una configuración para búsqueda en texto apropiada\n" "para la configuración regional «%s»" -#: initdb.c:2608 +#: initdb.c:2562 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" msgstr "la configuración de búsqueda en texto apropiada para la configuración regional «%s» es desconocida" -#: initdb.c:2613 +#: initdb.c:2567 #, c-format msgid "specified text search configuration \"%s\" might not match locale \"%s\"" msgstr "la configuración de búsqueda en texto «%s» especificada podría no coincidir con la configuración regional «%s»" -#: initdb.c:2618 +#: initdb.c:2572 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "La configuración de búsqueda en texto ha sido definida a «%s».\n" -#: initdb.c:2662 initdb.c:2744 +#: initdb.c:2616 initdb.c:2698 #, c-format msgid "creating directory %s ... " msgstr "creando el directorio %s ... " -#: initdb.c:2668 initdb.c:2750 initdb.c:2815 initdb.c:2877 +#: initdb.c:2622 initdb.c:2704 initdb.c:2769 initdb.c:2831 #, c-format msgid "could not create directory \"%s\": %m" msgstr "no se pudo crear el directorio «%s»: %m" -#: initdb.c:2679 initdb.c:2762 +#: initdb.c:2633 initdb.c:2716 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "corrigiendo permisos en el directorio existente %s ... " -#: initdb.c:2685 initdb.c:2768 +#: initdb.c:2639 initdb.c:2722 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "no se pudo cambiar los permisos del directorio «%s»: %m" -#: initdb.c:2699 initdb.c:2782 +#: initdb.c:2653 initdb.c:2736 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "el directorio «%s» existe pero no está vacío" -#: initdb.c:2704 +#: initdb.c:2658 #, c-format msgid "" "If you want to create a new database system, either remove or empty\n" @@ -859,17 +873,17 @@ msgstr "" "el directorio «%s», o ejecute %s\n" "con un argumento distinto de «%s».\n" -#: initdb.c:2712 initdb.c:2794 initdb.c:3163 +#: initdb.c:2666 initdb.c:2748 initdb.c:3125 #, c-format msgid "could not access directory \"%s\": %m" msgstr "no se pudo acceder al directorio «%s»: %m" -#: initdb.c:2735 +#: initdb.c:2689 #, c-format msgid "WAL directory location must be an absolute path" msgstr "la ubicación del directorio de WAL debe ser una ruta absoluta" -#: initdb.c:2787 +#: initdb.c:2741 #, c-format msgid "" "If you want to store the WAL there, either remove or empty the directory\n" @@ -878,27 +892,27 @@ msgstr "" "Si quiere almacenar el WAL ahí, elimine o vacíe el directorio\n" "«%s».\n" -#: initdb.c:2801 +#: initdb.c:2755 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "no se pudo crear el enlace simbólico «%s»: %m" -#: initdb.c:2806 +#: initdb.c:2760 #, c-format msgid "symlinks are not supported on this platform" msgstr "los enlaces simbólicos no están soportados en esta plataforma" -#: initdb.c:2830 +#: initdb.c:2784 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point.\n" msgstr "Contiene un archivo invisible, quizás por ser un punto de montaje.\n" -#: initdb.c:2833 +#: initdb.c:2787 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point.\n" msgstr "Contiene un directorio lost+found, quizás por ser un punto de montaje.\n" -#: initdb.c:2836 +#: initdb.c:2790 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -907,57 +921,57 @@ msgstr "" "Usar un punto de montaje directamente como directorio de datos no es\n" "recomendado. Cree un subdirectorio bajo el punto de montaje.\n" -#: initdb.c:2862 +#: initdb.c:2816 #, c-format msgid "creating subdirectories ... " msgstr "creando subdirectorios ... " -#: initdb.c:2908 +#: initdb.c:2862 msgid "performing post-bootstrap initialization ... " msgstr "realizando inicialización post-bootstrap ... " -#: initdb.c:3065 +#: initdb.c:3024 #, c-format msgid "Running in debug mode.\n" msgstr "Ejecutando en modo de depuración.\n" -#: initdb.c:3069 +#: initdb.c:3028 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" msgstr "Ejecutando en modo no-clean. Los errores no serán limpiados.\n" -#: initdb.c:3146 +#: initdb.c:3108 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: initdb.c:3167 initdb.c:3256 +#: initdb.c:3129 initdb.c:3218 msgid "syncing data to disk ... " msgstr "sincronizando los datos a disco ... " -#: initdb.c:3176 +#: initdb.c:3138 #, c-format msgid "password prompt and password file cannot be specified together" msgstr "" "la petición de contraseña y el archivo de contraseña no pueden\n" "ser especificados simultáneamente" -#: initdb.c:3201 +#: initdb.c:3163 #, c-format msgid "argument of --wal-segsize must be a number" msgstr "el argumento de --wal-segsize debe ser un número" -#: initdb.c:3206 +#: initdb.c:3168 #, c-format msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024" msgstr "el argumento de --wal-segsize debe ser una potencia de 2 entre 1 y 1024" -#: initdb.c:3223 +#: initdb.c:3185 #, c-format msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" msgstr "nombre de superusuario «%s» no permitido; los nombres de rol no pueden comenzar con «pg_»" -#: initdb.c:3227 +#: initdb.c:3189 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -968,17 +982,17 @@ msgstr "" "Este usuario también debe ser quien ejecute el proceso servidor.\n" "\n" -#: initdb.c:3243 +#: initdb.c:3205 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Las sumas de verificación en páginas de datos han sido activadas.\n" -#: initdb.c:3245 +#: initdb.c:3207 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Las sumas de verificación en páginas de datos han sido desactivadas.\n" -#: initdb.c:3262 +#: initdb.c:3224 #, c-format msgid "" "\n" @@ -990,12 +1004,12 @@ msgstr "" "El directorio de datos podría corromperse si el sistema operativo sufre\n" "una caída.\n" -#: initdb.c:3267 +#: initdb.c:3229 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "activando el método de autentificación «trust» para conexiones locales" -#: initdb.c:3268 +#: initdb.c:3230 #, c-format msgid "" "You can change this by editing pg_hba.conf or using the option -A, or\n" @@ -1005,11 +1019,11 @@ msgstr "" "o --auth-local y --auth-host la próxima vez que ejecute initdb.\n" #. translator: This is a placeholder in a shell command. -#: initdb.c:3293 +#: initdb.c:3260 msgid "logfile" msgstr "archivo_de_registro" -#: initdb.c:3295 +#: initdb.c:3262 #, c-format msgid "" "\n" @@ -1023,3 +1037,6 @@ msgstr "" "\n" " %s\n" "\n" + +#~ msgid "pclose failed: %m" +#~ msgstr "pclose falló: %m" diff --git a/src/bin/pg_amcheck/nls.mk b/src/bin/pg_amcheck/nls.mk index 978eb8f7a9dec..b5dcc4b0ceed5 100644 --- a/src/bin/pg_amcheck/nls.mk +++ b/src/bin/pg_amcheck/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_amcheck/nls.mk CATALOG_NAME = pg_amcheck -AVAIL_LANGUAGES = fr +AVAIL_LANGUAGES = de fr GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \ pg_amcheck.c \ ../../fe_utils/cancel.c \ diff --git a/src/bin/pg_amcheck/po/de.po b/src/bin/pg_amcheck/po/de.po new file mode 100644 index 0000000000000..ce036e3645e0a --- /dev/null +++ b/src/bin/pg_amcheck/po/de.po @@ -0,0 +1,461 @@ +# German message translation file for pg_amcheck +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_amcheck (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_amcheck (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-05-14 01:48+0000\n" +"PO-Revision-Date: 2021-05-14 10:03+0200\n" +"Last-Translator: Peter Eisentraut \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "Fatal: " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "Fehler: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "Warnung: " + +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Abbruchsanforderung gesendet\n" + +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 +msgid "Could not send cancel request: " +msgstr "Konnte Abbruchsanforderung nicht senden: " + +#: ../../fe_utils/connect_utils.c:92 +#, c-format +msgid "could not connect to database %s: out of memory" +msgstr "konnte nicht mit Datenbank %s verbinden: Speicher aufgebraucht" + +#: ../../fe_utils/connect_utils.c:120 +#, c-format +msgid "%s" +msgstr "%s" + +#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 +#: pg_amcheck.c:1645 pg_amcheck.c:2084 +#, c-format +msgid "query failed: %s" +msgstr "Anfrage fehlgeschlagen: %s" + +#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 +#: pg_amcheck.c:597 pg_amcheck.c:1116 pg_amcheck.c:1646 pg_amcheck.c:2085 +#, c-format +msgid "query was: %s" +msgstr "Anfrage war: %s" + +#: pg_amcheck.c:332 +#, c-format +msgid "number of parallel jobs must be at least 1" +msgstr "Anzahl paralleler Jobs muss mindestens 1 sein" + +#: pg_amcheck.c:405 +#, c-format +msgid "invalid argument for option %s" +msgstr "ungültiges Argument für Option %s" + +#: pg_amcheck.c:413 +#, c-format +msgid "invalid start block" +msgstr "ungültiger Startblock" + +#: pg_amcheck.c:418 +#, c-format +msgid "start block out of bounds" +msgstr "Startblock außerhalb des gültigen Bereichs" + +#: pg_amcheck.c:426 +#, c-format +msgid "invalid end block" +msgstr "ungültiger Endblock" + +#: pg_amcheck.c:431 +#, c-format +msgid "end block out of bounds" +msgstr "Endblock außerhalb des gültigen Bereichs" + +#: pg_amcheck.c:455 pg_amcheck.c:481 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" + +#: pg_amcheck.c:463 +#, c-format +msgid "end block precedes start block" +msgstr "Endblock kommt vor dem Startblock" + +#: pg_amcheck.c:479 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" + +#: pg_amcheck.c:500 +#, c-format +msgid "cannot specify a database name with --all" +msgstr "ein Datenbankname kann nicht mit --all angegeben werden" + +#: pg_amcheck.c:509 +#, c-format +msgid "cannot specify both a database name and database patterns" +msgstr "Datenbankname und Datenbankmuster können nicht zusammen angegeben werden" + +#: pg_amcheck.c:539 +#, c-format +msgid "no databases to check" +msgstr "keine zu prüfenden Datenbanken" + +#: pg_amcheck.c:595 +#, c-format +msgid "database \"%s\": %s" +msgstr "Datenbank »%s«: %s" + +#: pg_amcheck.c:606 +#, c-format +msgid "skipping database \"%s\": amcheck is not installed" +msgstr "Datenbank »%s« übersprungen: amcheck nicht installiert" + +#: pg_amcheck.c:614 +#, c-format +msgid "in database \"%s\": using amcheck version \"%s\" in schema \"%s\"" +msgstr "in Datenbank »%s«: verwende amcheck Version »%s« in Schema »%s«" + +#: pg_amcheck.c:676 +#, c-format +msgid "no relations to check" +msgstr "keine zu prüfenden Relationen" + +#: pg_amcheck.c:762 +#, c-format +msgid "checking heap table \"%s\".\"%s\".\"%s\"" +msgstr "prüfe Heap-Tabelle \"%s\".\"%s\".\"%s\"" + +#: pg_amcheck.c:778 +#, c-format +msgid "checking btree index \"%s\".\"%s\".\"%s\"" +msgstr "prüfe B-Tree-Index \"%s\".\"%s\".\"%s\"" + +#: pg_amcheck.c:911 +#, c-format +msgid "error sending command to database \"%s\": %s" +msgstr "Fehler beim Senden von Befehl an Datenbank »%s«: %s" + +#: pg_amcheck.c:914 +#, c-format +msgid "command was: %s" +msgstr "Befehl war: %s" + +#: pg_amcheck.c:1113 +#, c-format +msgid "btree index \"%s\".\"%s\".\"%s\": btree checking function returned unexpected number of rows: %d" +msgstr "" + +#: pg_amcheck.c:1117 +#, c-format +msgid "Are %s's and amcheck's versions compatible?" +msgstr "Sind die Versionen von %s und amcheck kompatibel?" + +#: pg_amcheck.c:1151 +#, c-format +msgid "" +"%s checks objects in a PostgreSQL database for corruption.\n" +"\n" +msgstr "%s prüft Objekte in einer PostgreSQL-Datenbank auf Beschädigung.\n\n" + +#: pg_amcheck.c:1152 +#, c-format +msgid "Usage:\n" +msgstr "Aufruf:\n" + +#: pg_amcheck.c:1153 +#, c-format +msgid " %s [OPTION]... [DBNAME]\n" +msgstr " %s [OPTION]... [DBNAME]\n" + +#: pg_amcheck.c:1154 +#, c-format +msgid "" +"\n" +"Target options:\n" +msgstr "" +"\n" +"Zieloptionen:\n" + +#: pg_amcheck.c:1155 +#, c-format +msgid " -a, --all check all databases\n" +msgstr " -a, --all alle Datenbanken prüfen\n" + +#: pg_amcheck.c:1156 +#, c-format +msgid " -d, --database=PATTERN check matching database(s)\n" +msgstr " -d, --database=MUSTER übereinstimmende Datenbanken prüfen\n" + +#: pg_amcheck.c:1157 +#, c-format +msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" +msgstr " -D, --exclude-database=MUSTER übereinstimmende Datenbanken NICHT prüfen\n" + +#: pg_amcheck.c:1158 +#, c-format +msgid " -i, --index=PATTERN check matching index(es)\n" +msgstr " -i, --index=MUSTER übereinstimmende Indexe prüfen\n" + +#: pg_amcheck.c:1159 +#, c-format +msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" +msgstr " -I, --exclude-index=MUSTER übereinstimmende Indexe NICHT prüfen\n" + +#: pg_amcheck.c:1160 +#, c-format +msgid " -r, --relation=PATTERN check matching relation(s)\n" +msgstr " -r, --relation=MUSTER übereinstimmende Relationen prüfen\n" + +#: pg_amcheck.c:1161 +#, c-format +msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" +msgstr " -R, --exclude-relation=MUSTER übereinstimmende Relationen NICHT prüfen\n" + +#: pg_amcheck.c:1162 +#, c-format +msgid " -s, --schema=PATTERN check matching schema(s)\n" +msgstr " -s, --schema=MUSTER übereinstimmende Schemas prüfen\n" + +#: pg_amcheck.c:1163 +#, c-format +msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" +msgstr " -S, --exclude-schema=MUSTER übereinstimmende Schemas NICHT prüfen\n" + +#: pg_amcheck.c:1164 +#, c-format +msgid " -t, --table=PATTERN check matching table(s)\n" +msgstr " -t, --table=MUSTER übereinstimmende Tabellen prüfen\n" + +#: pg_amcheck.c:1165 +#, c-format +msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" +msgstr " -T, --exclude-table=MUSTER übereinstimmende Tabellen NICHT prüfen\n" + +#: pg_amcheck.c:1166 +#, c-format +msgid " --no-dependent-indexes do NOT expand list of relations to include indexes\n" +msgstr " --no-dependent-indexes Liste der Relationen NICHT um Indexe erweitern\n" + +#: pg_amcheck.c:1167 +#, c-format +msgid " --no-dependent-toast do NOT expand list of relations to include TOAST tables\n" +msgstr " --no-dependent-toast Liste der Relationen NICHT um TOAST-Tabellen erweitern\n" + +#: pg_amcheck.c:1168 +#, c-format +msgid " --no-strict-names do NOT require patterns to match objects\n" +msgstr " --no-strict-names Muster müssen NICHT mit Objekten übereinstimmen\n" + +#: pg_amcheck.c:1169 +#, c-format +msgid "" +"\n" +"Table checking options:\n" +msgstr "" +"\n" +"Optionen für Tabellen:\n" + +#: pg_amcheck.c:1170 +#, c-format +msgid " --exclude-toast-pointers do NOT follow relation TOAST pointers\n" +msgstr " --exclude-toast-pointers TOAST-Zeigern NICHT folgen\n" + +#: pg_amcheck.c:1171 +#, c-format +msgid " --on-error-stop stop checking at end of first corrupt page\n" +msgstr " --on-error-stop Prüfung nach der ersten beschädigten Seite beenden\n" + +#: pg_amcheck.c:1172 +#, c-format +msgid " --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n" +msgstr " --skip=OPTION Blöcke mit »all-frozen« oder »all-visible« NICHT prüfen\n" + +#: pg_amcheck.c:1173 +#, c-format +msgid " --startblock=BLOCK begin checking table(s) at the given block number\n" +msgstr "" + +#: pg_amcheck.c:1174 +#, c-format +msgid " --endblock=BLOCK check table(s) only up to the given block number\n" +msgstr "" + +#: pg_amcheck.c:1175 +#, c-format +msgid "" +"\n" +"B-tree index checking options:\n" +msgstr "" +"\n" +"Optionen für B-Tree-Indexe:\n" + +#: pg_amcheck.c:1176 +#, c-format +msgid " --heapallindexed check all heap tuples are found within indexes\n" +msgstr "" + +#: pg_amcheck.c:1177 +#, c-format +msgid " --parent-check check index parent/child relationships\n" +msgstr "" + +#: pg_amcheck.c:1178 +#, c-format +msgid " --rootdescend search from root page to refind tuples\n" +msgstr "" + +#: pg_amcheck.c:1179 +#, c-format +msgid "" +"\n" +"Connection options:\n" +msgstr "" +"\n" +"Verbindungsoptionen:\n" + +#: pg_amcheck.c:1180 +#, c-format +msgid " -h, --host=HOSTNAME database server host or socket directory\n" +msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n" + +#: pg_amcheck.c:1181 +#, c-format +msgid " -p, --port=PORT database server port\n" +msgstr " -p, --port=PORT Port des Datenbankservers\n" + +#: pg_amcheck.c:1182 +#, c-format +msgid " -U, --username=USERNAME user name to connect as\n" +msgstr " -U, --username=NAME Datenbankbenutzername\n" + +#: pg_amcheck.c:1183 +#, c-format +msgid " -w, --no-password never prompt for password\n" +msgstr " -w, --no-password niemals nach Passwort fragen\n" + +#: pg_amcheck.c:1184 +#, c-format +msgid " -W, --password force password prompt\n" +msgstr " -W, --password Passwortfrage erzwingen\n" + +#: pg_amcheck.c:1185 +#, c-format +msgid " --maintenance-db=DBNAME alternate maintenance database\n" +msgstr " --maintenance-db=DBNAME alternative Wartungsdatenbank\n" + +#: pg_amcheck.c:1186 +#, c-format +msgid "" +"\n" +"Other options:\n" +msgstr "" +"\n" +"Weitere Optionen:\n" + +#: pg_amcheck.c:1187 +#, c-format +msgid " -e, --echo show the commands being sent to the server\n" +msgstr "" +" -e, --echo zeige die Befehle, die an den Server\n" +" gesendet werden\n" + +#: pg_amcheck.c:1188 +#, c-format +msgid " -j, --jobs=NUM use this many concurrent connections to the server\n" +msgstr "" +" -j, --jobs=NUM so viele parallele Verbindungen zum Server\n" +" verwenden\n" + +#: pg_amcheck.c:1189 +#, c-format +msgid " -q, --quiet don't write any messages\n" +msgstr " -q, --quiet unterdrücke alle Mitteilungen\n" + +#: pg_amcheck.c:1190 +#, c-format +msgid " -v, --verbose write a lot of output\n" +msgstr " -v, --verbose erzeuge viele Meldungen\n" + +#: pg_amcheck.c:1191 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" + +#: pg_amcheck.c:1192 +#, c-format +msgid " -P, --progress show progress information\n" +msgstr " -P, --progress Fortschrittsinformationen zeigen\n" + +#: pg_amcheck.c:1193 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" + +#: pg_amcheck.c:1194 +#, c-format +msgid " --install-missing install missing extensions\n" +msgstr " --install-missing fehlende Erweiterungen installieren\n" + +#: pg_amcheck.c:1196 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Berichten Sie Fehler an <%s>.\n" + +#: pg_amcheck.c:1197 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s Homepage: <%s>\n" + +#: pg_amcheck.c:1255 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%) %*s" +msgstr "" + +#: pg_amcheck.c:1266 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%), (%s%-*.*s)" +msgstr "" + +#: pg_amcheck.c:1281 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%)" +msgstr "" + +#: pg_amcheck.c:1550 pg_amcheck.c:1692 +#, c-format +msgid "including database \"%s\"" +msgstr "Datenbank »%s« einbezogen" + +#: pg_amcheck.c:1672 +#, c-format +msgid "internal error: received unexpected database pattern_id %d" +msgstr "" + +#: pg_amcheck.c:2126 +#, c-format +msgid "internal error: received unexpected relation pattern_id %d" +msgstr "" diff --git a/src/bin/pg_archivecleanup/nls.mk b/src/bin/pg_archivecleanup/nls.mk index 20a09c8d78ed0..51a6767d8d946 100644 --- a/src/bin/pg_archivecleanup/nls.mk +++ b/src/bin/pg_archivecleanup/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_archivecleanup/nls.mk CATALOG_NAME = pg_archivecleanup -AVAIL_LANGUAGES = cs de es fr ja ko pl ru sv tr uk vi zh_CN +AVAIL_LANGUAGES = cs de el es fr ja ko pl ru sv tr uk vi zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) pg_archivecleanup.c GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) diff --git a/src/bin/pg_archivecleanup/po/el.po b/src/bin/pg_archivecleanup/po/el.po new file mode 100644 index 0000000000000..e074fd36ac6b4 --- /dev/null +++ b/src/bin/pg_archivecleanup/po/el.po @@ -0,0 +1,178 @@ +# Greek message translation file for pg_archivecleanup +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_archivecleanup (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_archivecleanup (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-04-27 06:19+0000\n" +"PO-Revision-Date: 2021-04-27 10:30+0200\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" +"X-Generator: Poedit 2.4.2\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "κρίσιμο: " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "σφάλμα: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "προειδοποίηση: " + +#: pg_archivecleanup.c:66 +#, c-format +msgid "archive location \"%s\" does not exist" +msgstr "η τοποθεσία της αρχειοθήκης \"%s\" δεν υπάρχει" + +#: pg_archivecleanup.c:152 +#, c-format +msgid "could not remove file \"%s\": %m" +msgstr "δεν ήταν δυνατή η αφαίρεση του αρχείου \"%s\": %m" + +#: pg_archivecleanup.c:160 +#, c-format +msgid "could not read archive location \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση της τοποθεσίας αρχειοθήκης \"%s\": %m" + +#: pg_archivecleanup.c:163 +#, c-format +msgid "could not close archive location \"%s\": %m" +msgstr "δεν ήταν δυνατό το κλείσιμο της τοποθεσίας αρχειοθήκης “%s”: %m" + +#: pg_archivecleanup.c:167 +#, c-format +msgid "could not open archive location \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα της τοποθεσίας αρχειοθήκης “%s”: %m" + +#: pg_archivecleanup.c:240 +#, c-format +msgid "invalid file name argument" +msgstr "μη έγκυρη παράμετρος ονόματος αρχείου" + +#: pg_archivecleanup.c:241 pg_archivecleanup.c:315 pg_archivecleanup.c:336 +#: pg_archivecleanup.c:348 pg_archivecleanup.c:355 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" + +#: pg_archivecleanup.c:254 +#, c-format +msgid "" +"%s removes older WAL files from PostgreSQL archives.\n" +"\n" +msgstr "" +"%s αφαιρεί παλαιότερα αρχεία WAL από αρχειοθήκες PostgreSQL.\n" +"\n" + +#: pg_archivecleanup.c:255 +#, c-format +msgid "Usage:\n" +msgstr "Χρήση:\n" + +#: pg_archivecleanup.c:256 +#, c-format +msgid " %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n" +msgstr " %s [ΕΠΙΛΟΓΗ]… ARCHIVELOCATION OLDESTKEPTWALFILE\n" + +#: pg_archivecleanup.c:257 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Επιλογές:\n" + +#: pg_archivecleanup.c:258 +#, c-format +msgid " -d generate debug output (verbose mode)\n" +msgstr " -d δημιουργία εξόδου αποσφαλμάτωσης (περιφραστική λειτουργία)\n" + +#: pg_archivecleanup.c:259 +#, c-format +msgid " -n dry run, show the names of the files that would be removed\n" +msgstr " -n ξηρή λειτουργία, εμφάνιση των ονομάτων των αρχείων που θα αφαιρεθούν\n" + +#: pg_archivecleanup.c:260 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, —version εμφάνισε πληροφορίες έκδοσης, στη συνέχεια έξοδος\n" + +#: pg_archivecleanup.c:261 +#, c-format +msgid " -x EXT clean up files if they have this extension\n" +msgstr " -x EXT εκκαθάριση αρχείων εάν περιέχουν αυτήν την επέκταση\n" + +#: pg_archivecleanup.c:262 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, στη συνέχεια έξοδος\n" + +#: pg_archivecleanup.c:263 +#, c-format +msgid "" +"\n" +"For use as archive_cleanup_command in postgresql.conf:\n" +" archive_cleanup_command = 'pg_archivecleanup [OPTION]... ARCHIVELOCATION %%r'\n" +"e.g.\n" +" archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %%r'\n" +msgstr "" +"\n" +"Για χρήση ως archive_cleanup_command στο postgresql.conf:\n" +" archive_cleanup_command = 'pg_archivecleanup [ΕΠΙΛΟΓΗ]... ARCHIVELOCATION %%r’\n" +"π.χ.\n" +" archive_cleanup_command = ‘pg_archivecleanup /mnt/διακομιστής/αρχειοθήκη %%r’\n" + +#: pg_archivecleanup.c:268 +#, c-format +msgid "" +"\n" +"Or for use as a standalone archive cleaner:\n" +"e.g.\n" +" pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010.00000020.backup\n" +msgstr "" +"\n" +"Ή για χρήση ως αυτόνομο εκκαθαριστικό αρχειοθήκης:\n" +"π.χ.\n" +" pg_archivecleanup /mnt/server/archiverdir 0000000100000000000000000010.00000020.backup\n" + +#: pg_archivecleanup.c:272 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Υποβάλετε αναφορές σφάλματων σε <%s>.\n" + +#: pg_archivecleanup.c:273 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s αρχική σελίδα: <%s>\n" + +#: pg_archivecleanup.c:335 +#, c-format +msgid "must specify archive location" +msgstr "πρέπει να καθορίσετε τη τοποθεσία αρχειοθήκης" + +#: pg_archivecleanup.c:347 +#, c-format +msgid "must specify oldest kept WAL file" +msgstr "πρέπει να καθορίσετε το παλαιότερο κρατημένο αρχείο WAL" + +#: pg_archivecleanup.c:354 +#, c-format +msgid "too many command-line arguments" +msgstr "πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών" diff --git a/src/bin/pg_basebackup/po/es.po b/src/bin/pg_basebackup/po/es.po index b1f138ad9b359..5cd5b955c4d5a 100644 --- a/src/bin/pg_basebackup/po/es.po +++ b/src/bin/pg_basebackup/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_basebackup (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:45+0000\n" +"POT-Creation-Date: 2021-05-14 19:46+0000\n" "PO-Revision-Date: 2020-09-12 21:50-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -21,17 +21,17 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.3\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "precaución: " @@ -47,35 +47,35 @@ msgstr "memoria agotada\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" -#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 +#: ../../common/file_utils.c:87 ../../common/file_utils.c:451 #: pg_receivewal.c:266 pg_recvlogical.c:340 #, c-format msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" -#: ../../common/file_utils.c:158 pg_receivewal.c:169 +#: ../../common/file_utils.c:166 pg_receivewal.c:169 #, c-format msgid "could not open directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" -#: ../../common/file_utils.c:192 pg_receivewal.c:337 +#: ../../common/file_utils.c:200 pg_receivewal.c:337 #, c-format msgid "could not read directory \"%s\": %m" msgstr "no se pudo leer el directorio «%s»: %m" -#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 -#: ../../common/file_utils.c:357 ../../fe_utils/recovery_gen.c:134 +#: ../../common/file_utils.c:232 ../../common/file_utils.c:291 +#: ../../common/file_utils.c:365 ../../fe_utils/recovery_gen.c:134 #, c-format msgid "could not open file \"%s\": %m" msgstr "no se pudo abrir el archivo «%s»: %m" -#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 +#: ../../common/file_utils.c:303 ../../common/file_utils.c:373 #: pg_recvlogical.c:193 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" -#: ../../common/file_utils.c:375 +#: ../../common/file_utils.c:383 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "no se pudo renombrar el archivo de «%s» a «%s»: %m" @@ -551,7 +551,7 @@ msgid "could not get COPY data stream: %s" msgstr "no se pudo obtener un flujo de datos COPY: %s" #: pg_basebackup.c:981 pg_recvlogical.c:435 pg_recvlogical.c:607 -#: receivelog.c:965 +#: receivelog.c:964 #, c-format msgid "could not read COPY data: %s" msgstr "no fue posible leer datos COPY: %s" @@ -636,8 +636,8 @@ msgstr "SUGERENCIA: use -X none o -X fetch para deshabilitar el flujo de log" msgid "initiating base backup, waiting for checkpoint to complete" msgstr "iniciando el respaldo base, esperando que el checkpoint se complete" -#: pg_basebackup.c:1908 pg_recvlogical.c:262 receivelog.c:481 receivelog.c:530 -#: receivelog.c:569 streamutil.c:297 streamutil.c:370 streamutil.c:422 +#: pg_basebackup.c:1908 pg_recvlogical.c:262 receivelog.c:480 receivelog.c:529 +#: receivelog.c:568 streamutil.c:297 streamutil.c:370 streamutil.c:422 #: streamutil.c:533 streamutil.c:578 #, c-format msgid "could not send replication command \"%s\": %s" @@ -728,7 +728,7 @@ msgstr "no se pudo esperar al proceso hijo: %m" msgid "child %d died, expected %d" msgstr "el hijo %d murió, pero se esperaba al %d" -#: pg_basebackup.c:2120 streamutil.c:92 +#: pg_basebackup.c:2120 streamutil.c:92 streamutil.c:203 #, c-format msgid "%s" msgstr "%s" @@ -790,9 +790,9 @@ msgstr "intervalo de estado «%s» no válido" #: pg_basebackup.c:2445 pg_basebackup.c:2458 pg_basebackup.c:2469 #: pg_basebackup.c:2480 pg_basebackup.c:2488 pg_basebackup.c:2496 -#: pg_basebackup.c:2506 pg_basebackup.c:2519 pg_basebackup.c:2527 -#: pg_basebackup.c:2538 pg_basebackup.c:2548 pg_basebackup.c:2565 -#: pg_basebackup.c:2573 pg_basebackup.c:2581 pg_receivewal.c:605 +#: pg_basebackup.c:2506 pg_basebackup.c:2519 pg_basebackup.c:2528 +#: pg_basebackup.c:2539 pg_basebackup.c:2549 pg_basebackup.c:2567 +#: pg_basebackup.c:2576 pg_basebackup.c:2585 pg_receivewal.c:605 #: pg_receivewal.c:618 pg_receivewal.c:626 pg_receivewal.c:636 #: pg_receivewal.c:644 pg_receivewal.c:655 pg_recvlogical.c:846 #: pg_recvlogical.c:859 pg_recvlogical.c:870 pg_recvlogical.c:878 @@ -838,47 +838,34 @@ msgstr "no se puede usar --no-slot junto con nombre de slot" msgid "%s needs a slot to be specified using --slot" msgstr "la opcón %s necesita que se especifique un slot con --slot" -#: pg_basebackup.c:2526 -#, c-format -msgid "--create-slot and --no-slot are incompatible options" +#: pg_basebackup.c:2526 pg_basebackup.c:2565 pg_basebackup.c:2574 +#: pg_basebackup.c:2583 +#, fuzzy, c-format +#| msgid "--create-slot and --no-slot are incompatible options" +msgid "%s and %s are incompatible options" msgstr "--create-slot y --no-slot son opciones incompatibles" -#: pg_basebackup.c:2537 +#: pg_basebackup.c:2538 #, c-format msgid "WAL directory location can only be specified in plain mode" msgstr "la ubicación del directorio de WAL sólo puede especificarse en modo «plain»" -#: pg_basebackup.c:2547 +#: pg_basebackup.c:2548 #, c-format msgid "WAL directory location must be an absolute path" msgstr "la ubicación del directorio de WAL debe ser una ruta absoluta" -#: pg_basebackup.c:2557 pg_receivewal.c:663 +#: pg_basebackup.c:2558 pg_receivewal.c:663 #, c-format msgid "this build does not support compression" msgstr "esta instalación no soporta compresión" -#: pg_basebackup.c:2564 -#, c-format -msgid "--progress and --no-estimate-size are incompatible options" -msgstr "--progress y --no-estimate-size son opciones incompatibles" - -#: pg_basebackup.c:2572 -#, c-format -msgid "--no-manifest and --manifest-checksums are incompatible options" -msgstr "--no-manifest y --manifest-checksums son opciones incompatibles" - -#: pg_basebackup.c:2580 -#, c-format -msgid "--no-manifest and --manifest-force-encode are incompatible options" -msgstr "--no-manifest y --manifest-force-encode son opciones incompatibles" - -#: pg_basebackup.c:2639 +#: pg_basebackup.c:2643 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "no se pudo crear el enlace simbólico «%s»: %m" -#: pg_basebackup.c:2643 +#: pg_basebackup.c:2647 #, c-format msgid "symlinks are not supported on this platform" msgstr "los enlaces simbólicos no están soportados en esta plataforma" @@ -991,8 +978,9 @@ msgid "could not close directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" #: pg_receivewal.c:272 -#, c-format -msgid "segment file \"%s\" has incorrect size %d, skipping" +#, fuzzy, c-format +#| msgid "segment file \"%s\" has incorrect size %d, skipping" +msgid "segment file \"%s\" has incorrect size %lld, skipping" msgstr "el archivo de segmento «%s» tiene tamaño incorrecto %d, ignorando" #: pg_receivewal.c:290 @@ -1144,7 +1132,7 @@ msgstr " -d, --dbname=BASE base de datos a la cual conectarse\n" msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)" msgstr "confirmando escritura hasta %X/%X, fsync hasta %X/%X (slot %s)" -#: pg_recvlogical.c:157 receivelog.c:343 +#: pg_recvlogical.c:157 receivelog.c:342 #, c-format msgid "could not send feedback packet: %s" msgstr "no se pudo enviar el paquete de retroalimentación: %s" @@ -1164,27 +1152,28 @@ msgstr "flujo iniciado" msgid "could not open log file \"%s\": %m" msgstr "no se pudo abrir el archivo de registro «%s»: %m" -#: pg_recvlogical.c:361 receivelog.c:873 +#: pg_recvlogical.c:361 receivelog.c:872 #, c-format msgid "invalid socket: %s" msgstr "el socket no es válido: %s" -#: pg_recvlogical.c:414 receivelog.c:901 -#, c-format -msgid "select() failed: %m" -msgstr "select() falló: %m" +#: pg_recvlogical.c:414 receivelog.c:900 +#, fuzzy, c-format +#| msgid "%s failed: %m" +msgid "%s() failed: %m" +msgstr "%s falló: %m" -#: pg_recvlogical.c:421 receivelog.c:951 +#: pg_recvlogical.c:421 receivelog.c:950 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "no se pudo recibir datos desde el flujo de WAL: %s" -#: pg_recvlogical.c:463 pg_recvlogical.c:514 receivelog.c:995 receivelog.c:1061 +#: pg_recvlogical.c:463 pg_recvlogical.c:514 receivelog.c:994 receivelog.c:1060 #, c-format msgid "streaming header too small: %d" msgstr "cabecera de flujo demasiado pequeña: %d" -#: pg_recvlogical.c:498 receivelog.c:833 +#: pg_recvlogical.c:498 receivelog.c:832 #, c-format msgid "unrecognized streaming header: \"%c\"" msgstr "cabecera de flujo no reconocida: «%c»" @@ -1194,7 +1183,7 @@ msgstr "cabecera de flujo no reconocida: «%c»" msgid "could not write %u bytes to log file \"%s\": %m" msgstr "no se pudo escribir %u bytes al archivo de registro «%s»: %m" -#: pg_recvlogical.c:618 receivelog.c:629 receivelog.c:666 +#: pg_recvlogical.c:618 receivelog.c:628 receivelog.c:665 #, c-format msgid "unexpected termination of replication stream: %s" msgstr "término inesperado del flujo de replicación: %s" @@ -1259,162 +1248,157 @@ msgstr "ubicación de término %X/%X alcanzado por «keep-alive»" msgid "end position %X/%X reached by WAL record at %X/%X" msgstr "ubicación de término %X/%X alcanzado por registro WAL en %X/%X" -#: receivelog.c:69 +#: receivelog.c:68 #, c-format msgid "could not create archive status file \"%s\": %s" msgstr "no se pudo crear el archivo de estado «%s»: %s" -#: receivelog.c:116 +#: receivelog.c:115 #, c-format msgid "could not get size of write-ahead log file \"%s\": %s" msgstr "no se pudo obtener el tamaño del archivo de WAL «%s»: %s" -#: receivelog.c:126 +#: receivelog.c:125 #, c-format msgid "could not open existing write-ahead log file \"%s\": %s" msgstr "no se pudo abrir el archivo de WAL «%s»: %s" -#: receivelog.c:134 +#: receivelog.c:133 #, c-format msgid "could not fsync existing write-ahead log file \"%s\": %s" msgstr "no se pudo sincronizar (fsync) el archivo de WAL «%s»: %s" -#: receivelog.c:148 +#: receivelog.c:147 #, c-format msgid "write-ahead log file \"%s\" has %d byte, should be 0 or %d" msgid_plural "write-ahead log file \"%s\" has %d bytes, should be 0 or %d" msgstr[0] "el archivo de WAL «%s» mide %d byte, debería ser 0 o %d" msgstr[1] "el archivo de WAL «%s» mide %d bytes, debería ser 0 o %d" -#: receivelog.c:163 +#: receivelog.c:162 #, c-format msgid "could not open write-ahead log file \"%s\": %s" msgstr "no se pudo abrir archivo de WAL «%s»: %s" -#: receivelog.c:189 +#: receivelog.c:188 #, c-format msgid "could not determine seek position in file \"%s\": %s" msgstr "no se pudo determinar la posición (seek) en el archivo «%s»: %s" -#: receivelog.c:203 +#: receivelog.c:202 #, c-format msgid "not renaming \"%s%s\", segment is not complete" msgstr "no se cambiará el nombre a «%s%s», el segmento no está completo" -#: receivelog.c:215 receivelog.c:300 receivelog.c:675 +#: receivelog.c:214 receivelog.c:299 receivelog.c:674 #, c-format msgid "could not close file \"%s\": %s" msgstr "no se pudo cerrar el archivo «%s»: %s" -#: receivelog.c:272 +#: receivelog.c:271 #, c-format msgid "server reported unexpected history file name for timeline %u: %s" msgstr "el servidor reportó un nombre inesperado para el archivo de historia de timeline %u: %s" -#: receivelog.c:280 +#: receivelog.c:279 #, c-format msgid "could not create timeline history file \"%s\": %s" msgstr "no se pudo crear el archivo de historia de timeline «%s»: %s" -#: receivelog.c:287 +#: receivelog.c:286 #, c-format msgid "could not write timeline history file \"%s\": %s" msgstr "no se pudo escribir al archivo de historia de timeline «%s»: %s" -#: receivelog.c:377 +#: receivelog.c:376 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions older than %s" msgstr "versión de servidor %s incompatible; el cliente no soporta flujos de servidores anteriores a la versión %s" -#: receivelog.c:386 +#: receivelog.c:385 #, c-format msgid "incompatible server version %s; client does not support streaming from server versions newer than %s" msgstr "versión de servidor %s incompatible; el cliente no soporta flujos de servidores posteriores a %s" -#: receivelog.c:488 streamutil.c:430 streamutil.c:467 +#: receivelog.c:487 streamutil.c:430 streamutil.c:467 #, c-format msgid "could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields" msgstr "no se pudo identificar al sistema: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d o más campos" -#: receivelog.c:495 +#: receivelog.c:494 #, c-format msgid "system identifier does not match between base backup and streaming connection" msgstr "el identificador de sistema no coincide entre el respaldo base y la conexión de flujo" -#: receivelog.c:501 +#: receivelog.c:500 #, c-format msgid "starting timeline %u is not present in the server" msgstr "el timeline de inicio %u no está presente en el servidor" -#: receivelog.c:542 +#: receivelog.c:541 #, c-format msgid "unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields" msgstr "respuesta inesperada a la orden TIMELINE_HISTORY: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos" -#: receivelog.c:613 +#: receivelog.c:612 #, c-format msgid "server reported unexpected next timeline %u, following timeline %u" msgstr "el servidor reportó un timeline siguiente %u inesperado, a continuación del timeline %u" -#: receivelog.c:619 +#: receivelog.c:618 #, c-format msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X" msgstr "el servidor paró la transmisión del timeline %u en %X/%X, pero reportó que el siguiente timeline %u comienza en %X/%X" -#: receivelog.c:659 +#: receivelog.c:658 #, c-format msgid "replication stream was terminated before stop point" msgstr "el flujo de replicación terminó antes del punto de término" -#: receivelog.c:705 +#: receivelog.c:704 #, c-format msgid "unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields" msgstr "respuesta inesperada después del fin-de-timeline: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos" -#: receivelog.c:714 +#: receivelog.c:713 #, c-format msgid "could not parse next timeline's starting point \"%s\"" msgstr "no se pudo interpretar el punto de inicio del siguiente timeline «%s»" -#: receivelog.c:763 receivelog.c:1015 +#: receivelog.c:762 receivelog.c:1014 #, c-format msgid "could not fsync file \"%s\": %s" msgstr "no se pudo sincronizar (fsync) archivo «%s»: %s" -#: receivelog.c:1078 +#: receivelog.c:1077 #, c-format msgid "received write-ahead log record for offset %u with no file open" msgstr "se recibió un registro de WAL para el desplazamiento %u sin ningún archivo abierto" -#: receivelog.c:1088 +#: receivelog.c:1087 #, c-format msgid "got WAL data offset %08x, expected %08x" msgstr "se obtuvo desplazamiento de datos WAL %08x, se esperaba %08x" -#: receivelog.c:1122 +#: receivelog.c:1121 #, c-format msgid "could not write %u bytes to WAL file \"%s\": %s" msgstr "no se pudo escribir %u bytes al archivo WAL «%s»: %s" -#: receivelog.c:1147 receivelog.c:1187 receivelog.c:1218 +#: receivelog.c:1146 receivelog.c:1186 receivelog.c:1216 #, c-format msgid "could not send copy-end packet: %s" msgstr "no se pudo enviar el paquete copy-end: %s" -#: streamutil.c:160 +#: streamutil.c:162 msgid "Password: " msgstr "Contraseña: " -#: streamutil.c:185 +#: streamutil.c:186 #, c-format msgid "could not connect to server" msgstr "no se pudo conectar al servidor" -#: streamutil.c:202 -#, c-format -msgid "could not connect to server: %s" -msgstr "no se pudo conectar al servidor: %s" - #: streamutil.c:231 #, c-format msgid "could not clear search_path: %s" @@ -1467,7 +1451,7 @@ msgstr "no se pudo create el slot de replicación «%s»: se obtuvieron %d filas msgid "could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields" msgstr "no se pudo eliminar el slot de replicación «%s»: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos" -#: walmethods.c:438 walmethods.c:927 +#: walmethods.c:438 walmethods.c:932 msgid "could not compress data" msgstr "no se pudo comprimir datos" @@ -1487,14 +1471,29 @@ msgstr "error de implementación: los archivos tar no pueden tener abierto más msgid "could not create tar header" msgstr "no se pudo crear la cabecera del archivo tar" -#: walmethods.c:608 walmethods.c:648 walmethods.c:843 walmethods.c:854 +#: walmethods.c:608 walmethods.c:650 walmethods.c:847 walmethods.c:859 msgid "could not change compression parameters" msgstr "no se pudo cambiar los parámetros de compresión" -#: walmethods.c:730 +#: walmethods.c:734 msgid "unlink not supported with compression" msgstr "unlink no soportado con compresión" -#: walmethods.c:952 +#: walmethods.c:957 msgid "could not close compression stream" msgstr "no se pudo cerrar el flujo comprimido" + +#~ msgid "could not connect to server: %s" +#~ msgstr "no se pudo conectar al servidor: %s" + +#~ msgid "select() failed: %m" +#~ msgstr "select() falló: %m" + +#~ msgid "--no-manifest and --manifest-force-encode are incompatible options" +#~ msgstr "--no-manifest y --manifest-force-encode son opciones incompatibles" + +#~ msgid "--no-manifest and --manifest-checksums are incompatible options" +#~ msgstr "--no-manifest y --manifest-checksums son opciones incompatibles" + +#~ msgid "--progress and --no-estimate-size are incompatible options" +#~ msgstr "--progress y --no-estimate-size son opciones incompatibles" diff --git a/src/bin/pg_checksums/nls.mk b/src/bin/pg_checksums/nls.mk index 28a1e8182ad4f..a7a9423a53c4f 100644 --- a/src/bin/pg_checksums/nls.mk +++ b/src/bin/pg_checksums/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_checksums/nls.mk CATALOG_NAME = pg_checksums -AVAIL_LANGUAGES = cs de es fr ja ko ru sv tr uk zh_CN +AVAIL_LANGUAGES = cs de el es fr ja ko ru sv tr uk zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) pg_checksums.c GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) diff --git a/src/bin/pg_checksums/po/el.po b/src/bin/pg_checksums/po/el.po new file mode 100644 index 0000000000000..fa7d7c43b05bb --- /dev/null +++ b/src/bin/pg_checksums/po/el.po @@ -0,0 +1,308 @@ +# Greek message translation file for pg_checksums +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_checksums (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_checksums (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-04-28 04:19+0000\n" +"PO-Revision-Date: 2021-04-28 11:54+0200\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" +"X-Generator: Poedit 2.4.2\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "κρίσιμο: " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "σφάλμα: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "προειδοποίηση: " + +#: pg_checksums.c:75 +#, c-format +msgid "" +"%s enables, disables, or verifies data checksums in a PostgreSQL database cluster.\n" +"\n" +msgstr "" +"%s ενεργοποιεί, απενεργοποιεί ή επαληθεύει τα αθροίσματα ελέγχου δεδομένων σε μία συστάδα βάσεων δεδομένων PostgreSQL.\n" +"\n" + +#: pg_checksums.c:76 +#, c-format +msgid "Usage:\n" +msgstr "Χρήση:\n" + +#: pg_checksums.c:77 +#, c-format +msgid " %s [OPTION]... [DATADIR]\n" +msgstr " %s [ΕΠΙΛΟΓΕΣ]… [DATADIR]\n" + +#: pg_checksums.c:78 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Επιλογές:\n" + +#: pg_checksums.c:79 +#, c-format +msgid " [-D, --pgdata=]DATADIR data directory\n" +msgstr " [-Δ, --pgdata=] Κατάλογος δεδομένων DATADIR\n" + +#: pg_checksums.c:80 +#, c-format +msgid " -c, --check check data checksums (default)\n" +msgstr " -c, —check έλεγξε αθροίσματα ελέγχου δεδομένων (προεπιλογή)\n" + +#: pg_checksums.c:81 +#, c-format +msgid " -d, --disable disable data checksums\n" +msgstr " -d, —disable απενεργοποίησε τα αθροίσματα ελέγχου δεδομένων\n" + +#: pg_checksums.c:82 +#, c-format +msgid " -e, --enable enable data checksums\n" +msgstr " -e, —enable ενεργοποίησε τα αθροίσματα ελέγχου δεδομένων\n" + +#: pg_checksums.c:83 +#, c-format +msgid " -f, --filenode=FILENODE check only relation with specified filenode\n" +msgstr " -f, —filenode=FILENODE έλεγξε μόνο τη σχέση με το καθορισμένο filenode\n" + +#: pg_checksums.c:84 +#, c-format +msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" +msgstr " -N, —no-sync να μην αναμένει την ασφαλή εγγραφή αλλαγών στον δίσκο\n" + +#: pg_checksums.c:85 +#, c-format +msgid " -P, --progress show progress information\n" +msgstr " -P, —progress εμφάνισε πληροφορίες προόδου\n" + +#: pg_checksums.c:86 +#, c-format +msgid " -v, --verbose output verbose messages\n" +msgstr " -v, —verbose περιφραστικά μηνύματα εξόδου\n" + +#: pg_checksums.c:87 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, —version εμφάνισε πληροφορίες έκδοσης, στη συνέχεια έξοδος\n" + +#: pg_checksums.c:88 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, στη συνέχεια έξοδος\n" + +#: pg_checksums.c:89 +#, c-format +msgid "" +"\n" +"If no data directory (DATADIR) is specified, the environment variable PGDATA\n" +"is used.\n" +"\n" +msgstr "" +"\n" +"Εάν δεν έχει καθοριστεί κατάλογος δεδομένων (DATADIR), χρησιμοποιείται η\n" +"μεταβλητή περιβάλλοντος PGDATA.\n" +"\n" + +#: pg_checksums.c:91 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "Υποβάλετε αναφορές σφάλματων σε <%s>.\n" + +#: pg_checksums.c:92 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s αρχική σελίδα: <%s>\n" + +#: pg_checksums.c:161 +#, c-format +msgid "%*s/%s MB (%d%%) computed" +msgstr "%*s/%s MB (%d%%) Υπολογίζεται" + +#: pg_checksums.c:207 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου “%s”: %m" + +#: pg_checksums.c:223 +#, c-format +msgid "could not read block %u in file \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση του μπλοκ %u στο αρχείο \"%s\": %m" + +#: pg_checksums.c:226 +#, c-format +msgid "could not read block %u in file \"%s\": read %d of %d" +msgstr "δεν ήταν δυνατή η ανάγνωση του μπλοκ %u στο αρχείο “%s”: ανάγνωσε %d από %d" + +#: pg_checksums.c:250 +#, c-format +msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" +msgstr "επαλήθευση του αθροίσματος ελέγχου απέτυχε στο αρχείο \"%s\", μπλοκ %u: υπολογισμένο άθροισμα ελέγχου %X αλλά το μπλοκ περιέχει %X" + +#: pg_checksums.c:265 +#, c-format +msgid "seek failed for block %u in file \"%s\": %m" +msgstr "αναζήτηση απέτυχε για μπλοκ %u στο αρχείο \"%s\": %m" + +#: pg_checksums.c:274 +#, c-format +msgid "could not write block %u in file \"%s\": %m" +msgstr "δεν ήταν δυνατή η εγγραφή μπλοκ %u στο αρχείο \"%s\": %m" + +#: pg_checksums.c:277 +#, c-format +msgid "could not write block %u in file \"%s\": wrote %d of %d" +msgstr "δεν ήταν δυνατή η εγγραφή μπλοκ %u στο αρχείο \"%s\": έγραψε %d από %d" + +#: pg_checksums.c:290 +#, c-format +msgid "checksums verified in file \"%s\"" +msgstr "επαληθευμένα αθροίσματα ελέγχου στο αρχείο \"%s\"" + +#: pg_checksums.c:292 +#, c-format +msgid "checksums enabled in file \"%s\"" +msgstr "ενεργοποιημένα αθροίσματα ελέγχου στο αρχείο \"%s\"" + +#: pg_checksums.c:317 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του καταλόγου “%s”: %m" + +#: pg_checksums.c:344 pg_checksums.c:423 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "δεν ήταν δυνατή η εκτέλεση stat στο αρχείο “%s”: %m" + +#: pg_checksums.c:371 +#, c-format +msgid "invalid segment number %d in file name \"%s\"" +msgstr "μη έγκυρος αριθμός τμήματος %d στο αρχείο με όνομα “%s”" + +#: pg_checksums.c:504 +#, c-format +msgid "invalid filenode specification, must be numeric: %s" +msgstr "μη έγκυρη προδιαγραφή filenode, πρέπει να είναι αριθμητική: %s" + +#: pg_checksums.c:522 pg_checksums.c:538 pg_checksums.c:548 pg_checksums.c:557 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" + +#: pg_checksums.c:537 +#, c-format +msgid "no data directory specified" +msgstr "δεν ορίστηκε κατάλογος δεδομένων" + +#: pg_checksums.c:546 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (πρώτη είναι η “%s”)" + +#: pg_checksums.c:556 +#, c-format +msgid "option -f/--filenode can only be used with --check" +msgstr "η επιλογή -f/--filenode μπορεί να χρησιμοποιηθεί μόνο μαζί με την --check" + +#: pg_checksums.c:566 +#, c-format +msgid "pg_control CRC value is incorrect" +msgstr "η τιμή pg_control CRC είναι λανθασμένη" + +#: pg_checksums.c:572 +#, c-format +msgid "cluster is not compatible with this version of pg_checksums" +msgstr "η συστάδα δεν είναι συμβατή με αυτήν την έκδοση pg_checksums" + +#: pg_checksums.c:578 +#, c-format +msgid "database cluster is not compatible" +msgstr "η συστάδα βάσεων δεδομένων δεν είναι συμβατή" + +#: pg_checksums.c:579 +#, c-format +msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u.\n" +msgstr "Η συστάδα βάσεων δεδομένων αρχικοποιήθηκε με μέγεθος μπλοκ %u, αλλά το pg_checksums μεταγλωττίστηκε με μέγεθος μπλοκ %u .\n" + +#: pg_checksums.c:592 +#, c-format +msgid "cluster must be shut down" +msgstr "η συστάδα πρέπει να τερματιστεί" + +#: pg_checksums.c:599 +#, c-format +msgid "data checksums are not enabled in cluster" +msgstr "τα αθροίσματα ελέγχου δεδομένων δεν είναι ενεργοποιημένα στη συστάδα" + +#: pg_checksums.c:606 +#, c-format +msgid "data checksums are already disabled in cluster" +msgstr "τα αθροίσματα ελέγχου δεδομένων είναι ήδη απενεργοποιημένα στη συστάδα" + +#: pg_checksums.c:613 +#, c-format +msgid "data checksums are already enabled in cluster" +msgstr "τα αθροίσματα ελέγχου δεδομένων είναι ήδη ενεργοποιημένα στη συστάδα" + +#: pg_checksums.c:639 +#, c-format +msgid "Checksum operation completed\n" +msgstr "Ολοκληρώθηκε η λειτουργία του αθροίσματος ελέγχου\n" + +#: pg_checksums.c:640 +#, c-format +msgid "Files scanned: %s\n" +msgstr "Αρχεία που σαρώθηκαν: %s\n" + +#: pg_checksums.c:641 +#, c-format +msgid "Blocks scanned: %s\n" +msgstr "Μπλοκ που σαρώθηκαν: %s\n" + +#: pg_checksums.c:644 +#, c-format +msgid "Bad checksums: %s\n" +msgstr "Εσφαλμένα αθροίσματα ελέγχου: %s\n" + +#: pg_checksums.c:645 pg_checksums.c:672 +#, c-format +msgid "Data checksum version: %u\n" +msgstr "Έκδοση αθροισμάτων ελέγχου: %u\n" + +#: pg_checksums.c:664 +#, c-format +msgid "syncing data directory" +msgstr "συγχρονίζεται κατάλογος δεδομένων" + +#: pg_checksums.c:668 +#, c-format +msgid "updating control file" +msgstr "ενημερώνεται αρχείο ελέγχου" + +#: pg_checksums.c:674 +#, c-format +msgid "Checksums enabled in cluster\n" +msgstr "τα αθροίσματα ελέγχου δεδομένων είναι ενεργοποιημένα στη συστάδα\n" + +#: pg_checksums.c:676 +#, c-format +msgid "Checksums disabled in cluster\n" +msgstr "Τα αθροίσματα ελέγχου δεδομένων είναι απενεργοποιημένα στη συστάδα\n" diff --git a/src/bin/pg_checksums/po/es.po b/src/bin/pg_checksums/po/es.po index 71e68a7b8bb1b..58ca132583555 100644 --- a/src/bin/pg_checksums/po/es.po +++ b/src/bin/pg_checksums/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_checksums (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:48+0000\n" +"POT-Creation-Date: 2021-05-14 19:49+0000\n" "PO-Revision-Date: 2020-09-12 10:54-0500\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: pgsql-es-ayuda \n" @@ -19,17 +19,17 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.3\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "precaución: " @@ -155,157 +155,158 @@ msgstr "no se pudo leer el bloque %u del archivo «%s»: %m" msgid "could not read block %u in file \"%s\": read %d of %d" msgstr "no se pudo leer bloque %u en archivo «%s»: leídos %d de %d" -#: pg_checksums.c:243 +#: pg_checksums.c:250 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated checksum %X but block contains %X" msgstr "verificación de checksums falló en archivo «%s», bloque %u: checksum calculado %X pero bloque contiene %X" -#: pg_checksums.c:258 +#: pg_checksums.c:265 #, c-format msgid "seek failed for block %u in file \"%s\": %m" msgstr "posicionamiento (seek) falló para el bloque %u en archivo «%s»: %m" -#: pg_checksums.c:267 +#: pg_checksums.c:274 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "no se pudo escribir el bloque %u en el archivo «%s»: %m" -#: pg_checksums.c:270 +#: pg_checksums.c:277 #, c-format msgid "could not write block %u in file \"%s\": wrote %d of %d" msgstr "no se pudo escribir el bloque %u en el archivo «%s»: se escribieron %d de %d" -#: pg_checksums.c:283 +#: pg_checksums.c:290 #, c-format msgid "checksums verified in file \"%s\"" msgstr "checksums verificados en archivo «%s»" -#: pg_checksums.c:285 +#: pg_checksums.c:292 #, c-format msgid "checksums enabled in file \"%s\"" msgstr "checksums activados en archivo «%s»" -#: pg_checksums.c:310 +#: pg_checksums.c:317 #, c-format msgid "could not open directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" -#: pg_checksums.c:337 pg_checksums.c:416 +#: pg_checksums.c:344 pg_checksums.c:423 #, c-format msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" -#: pg_checksums.c:364 +#: pg_checksums.c:371 #, c-format msgid "invalid segment number %d in file name \"%s\"" msgstr "número de segmento %d no válido en nombre de archivo «%s»" -#: pg_checksums.c:497 +#: pg_checksums.c:504 #, c-format msgid "invalid filenode specification, must be numeric: %s" msgstr "especificación de filenode no válida: deben ser numérica: %s" -#: pg_checksums.c:515 pg_checksums.c:531 pg_checksums.c:541 pg_checksums.c:550 +#: pg_checksums.c:522 pg_checksums.c:538 pg_checksums.c:548 pg_checksums.c:557 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Pruebe «%s --help» para mayor información.\n" -#: pg_checksums.c:530 +#: pg_checksums.c:537 #, c-format msgid "no data directory specified" msgstr "no se especificó el directorio de datos" -#: pg_checksums.c:539 +#: pg_checksums.c:546 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: pg_checksums.c:549 +#: pg_checksums.c:556 #, c-format msgid "option -f/--filenode can only be used with --check" msgstr "la opción -f/--filenode sólo puede usarse con --check" -#: pg_checksums.c:559 +#: pg_checksums.c:566 #, c-format msgid "pg_control CRC value is incorrect" msgstr "el valor de CRC de pg_control es incorrecto" -#: pg_checksums.c:565 +#: pg_checksums.c:572 #, c-format msgid "cluster is not compatible with this version of pg_checksums" msgstr "el clúster no es compatible con esta versión de pg_checksums" -#: pg_checksums.c:571 +#: pg_checksums.c:578 #, c-format msgid "database cluster is not compatible" msgstr "el clúster de bases de datos no es compatible" -#: pg_checksums.c:572 +#: pg_checksums.c:579 #, c-format msgid "The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u.\n" msgstr "El clúster fue inicializado con tamaño de bloque %u, pero pg_checksums fue compilado con tamaño de bloques %u.\n" -#: pg_checksums.c:585 +#: pg_checksums.c:592 #, c-format msgid "cluster must be shut down" msgstr "el clúster debe estar apagado" -#: pg_checksums.c:592 +#: pg_checksums.c:599 #, c-format msgid "data checksums are not enabled in cluster" msgstr "los checksums de datos no están activados en el clúster" -#: pg_checksums.c:599 +#: pg_checksums.c:606 #, c-format msgid "data checksums are already disabled in cluster" msgstr "los checksums de datos ya están desactivados en el clúster" -#: pg_checksums.c:606 +#: pg_checksums.c:613 #, c-format msgid "data checksums are already enabled in cluster" msgstr "los checksums de datos ya están activados en el clúster" -#: pg_checksums.c:632 +#: pg_checksums.c:639 #, c-format msgid "Checksum operation completed\n" msgstr "Operación de checksums completa\n" -#: pg_checksums.c:633 +#: pg_checksums.c:640 #, c-format msgid "Files scanned: %s\n" msgstr "Archivos recorridos: %s\n" -#: pg_checksums.c:634 +#: pg_checksums.c:641 #, c-format msgid "Blocks scanned: %s\n" msgstr "Bloques recorridos: %s\n" -#: pg_checksums.c:637 +#: pg_checksums.c:644 #, c-format msgid "Bad checksums: %s\n" msgstr "Checksums incorrectos: %s\n" -#: pg_checksums.c:638 pg_checksums.c:665 -#, c-format -msgid "Data checksum version: %d\n" +#: pg_checksums.c:645 pg_checksums.c:672 +#, fuzzy, c-format +#| msgid "Data checksum version: %d\n" +msgid "Data checksum version: %u\n" msgstr "Versión de checksums de datos: %d\n" -#: pg_checksums.c:657 +#: pg_checksums.c:664 #, c-format msgid "syncing data directory" msgstr "sincronizando directorio de datos" -#: pg_checksums.c:661 +#: pg_checksums.c:668 #, c-format msgid "updating control file" msgstr "actualizando archivo de control" -#: pg_checksums.c:667 +#: pg_checksums.c:674 #, c-format msgid "Checksums enabled in cluster\n" msgstr "Checksums activos en el clúster\n" -#: pg_checksums.c:669 +#: pg_checksums.c:676 #, c-format msgid "Checksums disabled in cluster\n" msgstr "Checksums inactivos en el clúster\n" diff --git a/src/bin/pg_config/nls.mk b/src/bin/pg_config/nls.mk index ab032ee26ce30..77680fa23c0c2 100644 --- a/src/bin/pg_config/nls.mk +++ b/src/bin/pg_config/nls.mk @@ -1,4 +1,4 @@ # src/bin/pg_config/nls.mk CATALOG_NAME = pg_config -AVAIL_LANGUAGES = cs de es fr he it ja ko nb pl pt_BR ro ru sv ta tr uk vi zh_CN zh_TW +AVAIL_LANGUAGES = cs de el es fr he it ja ko nb pl pt_BR ro ru sv ta tr uk vi zh_CN zh_TW GETTEXT_FILES = pg_config.c ../../common/config_info.c ../../common/exec.c diff --git a/src/bin/pg_config/po/el.po b/src/bin/pg_config/po/el.po new file mode 100644 index 0000000000000..f0ccd82bc7096 --- /dev/null +++ b/src/bin/pg_config/po/el.po @@ -0,0 +1,259 @@ +# Greek message translation file for pg_config +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_config (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_config (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-05-04 10:46+0000\n" +"PO-Revision-Date: 2021-05-04 14:33+0200\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" +"X-Generator: Poedit 2.4.3\n" + +#: ../../common/config_info.c:134 ../../common/config_info.c:142 +#: ../../common/config_info.c:150 ../../common/config_info.c:158 +#: ../../common/config_info.c:166 ../../common/config_info.c:174 +#: ../../common/config_info.c:182 ../../common/config_info.c:190 +msgid "not recorded" +msgstr "δεν έχει καταγραφεί" + +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 +#, c-format +msgid "could not identify current directory: %m" +msgstr "δεν ήταν δυνατή η αναγνώριση του τρέχοντος καταλόγου: %m" + +#: ../../common/exec.c:155 +#, c-format +msgid "invalid binary \"%s\"" +msgstr "μη έγκυρο δυαδικό αρχείο “%s”" + +#: ../../common/exec.c:205 +#, c-format +msgid "could not read binary \"%s\"" +msgstr "δεν ήταν δυνατή η ανάγνωση του δυαδικού αρχείου “%s”" + +#: ../../common/exec.c:213 +#, c-format +msgid "could not find a \"%s\" to execute" +msgstr "δεν βρέθηκε το αρχείο “%s” για να εκτελεστεί" + +#: ../../common/exec.c:269 ../../common/exec.c:308 +#, c-format +msgid "could not change directory to \"%s\": %m" +msgstr "δεν ήταν δυνατή η μετάβαση στον κατάλογο “%s”: %m" + +#: ../../common/exec.c:286 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση του συμβολικού συνδέσμου “%s”: %m" + +#: ../../common/exec.c:409 +#, c-format +msgid "%s() failed: %m" +msgstr "%s () απέτυχε: %m" + +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 +msgid "out of memory" +msgstr "έλλειψη μνήμης" + +#: pg_config.c:74 +#, c-format +msgid "" +"\n" +"%s provides information about the installed version of PostgreSQL.\n" +"\n" +msgstr "" +"\n" +"%s παρέχει πληροφορίες σχετικά με την εγκατεστημένη έκδοση της PostgreSQL.\n" +"\n" + +#: pg_config.c:75 +#, c-format +msgid "Usage:\n" +msgstr "Χρήση:\n" + +#: pg_config.c:76 +#, c-format +msgid "" +" %s [OPTION]...\n" +"\n" +msgstr "" +" %s [ΕΠΙΛΟΓΗ]…\n" +"\n" + +#: pg_config.c:77 +#, c-format +msgid "Options:\n" +msgstr "Επιλογές:\n" + +#: pg_config.c:78 +#, c-format +msgid " --bindir show location of user executables\n" +msgstr " —bindir εμφάνισε τη τοποθεσία των εκτελέσιμων αρχείων του χρήστη\n" + +#: pg_config.c:79 +#, c-format +msgid " --docdir show location of documentation files\n" +msgstr " —docdir εμφάνισε τη τοποθεσία των αρχείων τεκμηρίωσης\n" + +#: pg_config.c:80 +#, c-format +msgid " --htmldir show location of HTML documentation files\n" +msgstr " —htmldir εμφάνισε τη τοποθεσία των αρχείων τεκμηρίωσης HTML\n" + +#: pg_config.c:81 +#, c-format +msgid "" +" --includedir show location of C header files of the client\n" +" interfaces\n" +msgstr "" +" —includedir εμφάνισε τη τοποθεσία των αρχείων κεφαλίδας C\n" +" των διεπαφών πελάτη\n" + +#: pg_config.c:83 +#, c-format +msgid " --pkgincludedir show location of other C header files\n" +msgstr " —pkgincludedir εμφάνισε τη τοποθεσία άλλων αρχείων κεφαλίδας C\n" + +#: pg_config.c:84 +#, c-format +msgid " --includedir-server show location of C header files for the server\n" +msgstr " —includedir-server εμφάνισε τη τοποθεσία των αρχείων κεφαλίδας C για τον διακομιστή\n" + +#: pg_config.c:85 +#, c-format +msgid " --libdir show location of object code libraries\n" +msgstr " —libdir εμφάνισε τη τοποθεσία των βιβλιοθηκών κώδικα αντικειμένων\n" + +#: pg_config.c:86 +#, c-format +msgid " --pkglibdir show location of dynamically loadable modules\n" +msgstr " —pkglibdir εμφάνισε τη τοποθεσία των δυναμικά φορτώσιμων ενοτήτων\n" + +#: pg_config.c:87 +#, c-format +msgid " --localedir show location of locale support files\n" +msgstr " —localedir εμφάνισε τη τοποθεσία των αρχείων υποστήριξης εντοπιότητας\n" + +#: pg_config.c:88 +#, c-format +msgid " --mandir show location of manual pages\n" +msgstr " —mandir εμφάνισε τη τοποθεσία των σελίδων τεκμηρίωσης\n" + +#: pg_config.c:89 +#, c-format +msgid " --sharedir show location of architecture-independent support files\n" +msgstr " —sharedir εμφάνισε τη τοποθεσία των ανεξάρτητων από την αρχιτεκτονική αρχείων υποστήριξης\n" + +#: pg_config.c:90 +#, c-format +msgid " --sysconfdir show location of system-wide configuration files\n" +msgstr " —sysconfdir εμφάνισε την τοποθεσία των αρχείων ρύθμισης παραμέτρων όλου του συστήματος\n" + +#: pg_config.c:91 +#, c-format +msgid " --pgxs show location of extension makefile\n" +msgstr " —pgxs εμφάνισε τη τοποθεσία του makefile επέκτασης\n" + +#: pg_config.c:92 +#, c-format +msgid "" +" --configure show options given to \"configure\" script when\n" +" PostgreSQL was built\n" +msgstr "" +" —configure εμφάνισε τις παραμέτρους που δόθηκαν ώστε να “ρυθμιστεί” το σενάριο\n" +" κατά την κατασκευή της PostgreSQL\n" + +#: pg_config.c:94 +#, c-format +msgid " --cc show CC value used when PostgreSQL was built\n" +msgstr " —cc εμφάνισε την τιμή CC που χρησιμοποιήθηκε κατά την κατασκευή της PostgreSQL\n" + +#: pg_config.c:95 +#, c-format +msgid " --cppflags show CPPFLAGS value used when PostgreSQL was built\n" +msgstr " —cppflags εμφάνισε την τιμή CPPFLAGS που χρησιμοποιήθηκε κατά την κατασκευή της PostgreSQL\n" + +#: pg_config.c:96 +#, c-format +msgid " --cflags show CFLAGS value used when PostgreSQL was built\n" +msgstr "" +" —cflags εμφάνισε την τιμή CFLAGS που χρησιμοποιήθηκε κατά την κατασκευή της PostgreSQL\n" +"\n" + +#: pg_config.c:97 +#, c-format +msgid " --cflags_sl show CFLAGS_SL value used when PostgreSQL was built\n" +msgstr " —cflags_sl εμφάνισε την τιμή CFLAGS_SL που χρησιμοποιήθηκε κατά την κατασκευή της PostgreSQL\n" + +#: pg_config.c:98 +#, c-format +msgid " --ldflags show LDFLAGS value used when PostgreSQL was built\n" +msgstr " —ldflags εμφάνισε την τιμή LDFLAGS που χρησιμοποιήθηκε κατά την κατασκευή της PostgreSQL\n" + +#: pg_config.c:99 +#, c-format +msgid " --ldflags_ex show LDFLAGS_EX value used when PostgreSQL was built\n" +msgstr " —ldflags_ex εμφάνισε την τιμή LDFLAGS_EX που χρησιμοποιήθηκε κατά την κατασκευή της PostgreSQL\n" + +#: pg_config.c:100 +#, c-format +msgid " --ldflags_sl show LDFLAGS_SL value used when PostgreSQL was built\n" +msgstr " —ldflags_sl εμφάνισε την τιμή LDFLAGS_SL που χρησιμοποιήθηκε κατά την κατασκευή της PostgreSQL\n" + +#: pg_config.c:101 +#, c-format +msgid " --libs show LIBS value used when PostgreSQL was built\n" +msgstr " —libs εμφάνισε την τιμή LIBS που χρησιμοποιήθηκε κατά την κατασκευή της PostgreSQL\n" + +#: pg_config.c:102 +#, c-format +msgid " --version show the PostgreSQL version\n" +msgstr " —version εμφάνισε την έκδοση PostgreSQL\n" + +#: pg_config.c:103 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, στη συνέχεια έξοδος\n" + +#: pg_config.c:104 +#, c-format +msgid "" +"\n" +"With no arguments, all known items are shown.\n" +"\n" +msgstr "" +"\n" +"Χωρίς παραμέτρους, εμφανίζονται όλα τα γνωστά στοιχεία.\n" +"\n" + +#: pg_config.c:105 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "Υποβάλετε αναφορές σφάλματων σε <%s>.\n" + +#: pg_config.c:106 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s αρχική σελίδα: <%s>\n" + +#: pg_config.c:112 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" + +#: pg_config.c:154 +#, c-format +msgid "%s: could not find own program executable\n" +msgstr "%s: δεν ήταν δυνατή η εύρεση του ιδίου εκτελέσιμου προγράμματος\n" + +#: pg_config.c:181 +#, c-format +msgid "%s: invalid argument: %s\n" +msgstr "%s: μη έγκυρη παράμετρος: %s\n" diff --git a/src/bin/pg_config/po/es.po b/src/bin/pg_config/po/es.po index 1b40049e27469..ee5876d59c96a 100644 --- a/src/bin/pg_config/po/es.po +++ b/src/bin/pg_config/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_config (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:45+0000\n" +"POT-Creation-Date: 2021-05-14 19:46+0000\n" "PO-Revision-Date: 2020-09-12 22:54-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -26,42 +26,43 @@ msgstr "" msgid "not recorded" msgstr "no registrado" -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "no se pudo identificar el directorio actual: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "el binario «%s» no es válido" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "no se pudo leer el binario «%s»" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "no se pudo encontrar un «%s» para ejecutar" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "no se pudo cambiar al directorio «%s»: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "no se pudo leer el enlace simbólico «%s»: %m" -#: ../../common/exec.c:410 -#, c-format -msgid "pclose failed: %m" -msgstr "pclose falló: %m" +#: ../../common/exec.c:409 +#, fuzzy, c-format +#| msgid "%s failed: %m" +msgid "%s() failed: %m" +msgstr "%s falló: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" msgstr "memoria agotada" @@ -286,3 +287,6 @@ msgstr "%s: no se pudo encontrar el ejecutable propio\n" #, c-format msgid "%s: invalid argument: %s\n" msgstr "%s: el argumento no es válido: %s\n" + +#~ msgid "pclose failed: %m" +#~ msgstr "pclose falló: %m" diff --git a/src/bin/pg_ctl/po/es.po b/src/bin/pg_ctl/po/es.po index a774433a35337..f7b64ebd038ec 100644 --- a/src/bin/pg_ctl/po/es.po +++ b/src/bin/pg_ctl/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_ctl (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:45+0000\n" +"POT-Creation-Date: 2021-05-14 19:46+0000\n" "PO-Revision-Date: 2020-09-12 22:56-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -20,42 +20,43 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.2\n" -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "no se pudo identificar el directorio actual: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "el binario «%s» no es válido" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "no se pudo leer el binario «%s»" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "no se pudo encontrar un «%s» para ejecutar" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "no se pudo cambiar al directorio «%s»: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "no se pudo leer el enlace simbólico «%s»: %m" -#: ../../common/exec.c:410 -#, c-format -msgid "pclose failed: %m" -msgstr "pclose falló: %m" +#: ../../common/exec.c:409 +#, fuzzy, c-format +#| msgid "%s failed: %m" +msgid "%s() failed: %m" +msgstr "%s falló: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" msgstr "memoria agotada" @@ -173,7 +174,7 @@ msgstr "%s: no se pudo leer el archivo «%s»\n" msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: archivo de opciones «%s» debe tener exactamente una línea\n" -#: pg_ctl.c:785 pg_ctl.c:975 pg_ctl.c:1071 +#: pg_ctl.c:785 pg_ctl.c:974 pg_ctl.c:1070 #, c-format msgid "%s: could not send stop signal (PID: %ld): %s\n" msgstr "%s: falló la señal de detención (PID: %ld): %s\n" @@ -210,28 +211,28 @@ msgstr "%s: falló la creación de la base de datos\n" msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: otro servidor puede estar en ejecución; tratando de iniciarlo de todas formas.\n" -#: pg_ctl.c:915 +#: pg_ctl.c:914 msgid "waiting for server to start..." msgstr "esperando que el servidor se inicie..." -#: pg_ctl.c:920 pg_ctl.c:1025 pg_ctl.c:1117 pg_ctl.c:1247 +#: pg_ctl.c:919 pg_ctl.c:1024 pg_ctl.c:1116 pg_ctl.c:1241 msgid " done\n" msgstr " listo\n" -#: pg_ctl.c:921 +#: pg_ctl.c:920 msgid "server started\n" msgstr "servidor iniciado\n" -#: pg_ctl.c:924 pg_ctl.c:930 pg_ctl.c:1252 +#: pg_ctl.c:923 pg_ctl.c:929 pg_ctl.c:1246 msgid " stopped waiting\n" msgstr " abandonando la espera\n" -#: pg_ctl.c:925 +#: pg_ctl.c:924 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: el servidor no inició a tiempo\n" -#: pg_ctl.c:931 +#: pg_ctl.c:930 #, c-format msgid "" "%s: could not start server\n" @@ -240,31 +241,31 @@ msgstr "" "%s: no se pudo iniciar el servidor.\n" "Examine el registro del servidor.\n" -#: pg_ctl.c:939 +#: pg_ctl.c:938 msgid "server starting\n" msgstr "servidor iniciándose\n" -#: pg_ctl.c:960 pg_ctl.c:1047 pg_ctl.c:1138 pg_ctl.c:1177 pg_ctl.c:1276 +#: pg_ctl.c:959 pg_ctl.c:1046 pg_ctl.c:1137 pg_ctl.c:1176 pg_ctl.c:1270 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: el archivo de PID «%s» no existe\n" -#: pg_ctl.c:961 pg_ctl.c:1049 pg_ctl.c:1139 pg_ctl.c:1178 pg_ctl.c:1277 +#: pg_ctl.c:960 pg_ctl.c:1048 pg_ctl.c:1138 pg_ctl.c:1177 pg_ctl.c:1271 msgid "Is server running?\n" msgstr "¿Está el servidor en ejecución?\n" -#: pg_ctl.c:967 +#: pg_ctl.c:966 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" msgstr "" "%s: no se puede detener el servidor;\n" "un servidor en modo mono-usuario está en ejecución (PID: %ld)\n" -#: pg_ctl.c:982 +#: pg_ctl.c:981 msgid "server shutting down\n" msgstr "servidor deteniéndose\n" -#: pg_ctl.c:997 pg_ctl.c:1086 +#: pg_ctl.c:996 pg_ctl.c:1085 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" @@ -274,20 +275,20 @@ msgstr "" "El apagado no se completará hasta que se invoque la función pg_stop_backup().\n" "\n" -#: pg_ctl.c:1001 pg_ctl.c:1090 +#: pg_ctl.c:1000 pg_ctl.c:1089 msgid "waiting for server to shut down..." msgstr "esperando que el servidor se detenga..." -#: pg_ctl.c:1017 pg_ctl.c:1108 +#: pg_ctl.c:1016 pg_ctl.c:1107 msgid " failed\n" msgstr " falló\n" -#: pg_ctl.c:1019 pg_ctl.c:1110 +#: pg_ctl.c:1018 pg_ctl.c:1109 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: el servidor no se detiene\n" -#: pg_ctl.c:1021 pg_ctl.c:1112 +#: pg_ctl.c:1020 pg_ctl.c:1111 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -295,253 +296,253 @@ msgstr "" "SUGERENCIA: La opción «-m fast» desconecta las sesiones inmediatamente\n" "en lugar de esperar que cada sesión finalice por sí misma.\n" -#: pg_ctl.c:1027 pg_ctl.c:1118 +#: pg_ctl.c:1026 pg_ctl.c:1117 msgid "server stopped\n" msgstr "servidor detenido\n" -#: pg_ctl.c:1050 +#: pg_ctl.c:1049 msgid "trying to start server anyway\n" msgstr "intentando iniciae el servidor de todas maneras\n" -#: pg_ctl.c:1059 +#: pg_ctl.c:1058 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" msgstr "" "%s: no se puede reiniciar el servidor;\n" "un servidor en modo mono-usuario está en ejecución (PID: %ld)\n" -#: pg_ctl.c:1062 pg_ctl.c:1148 +#: pg_ctl.c:1061 pg_ctl.c:1147 msgid "Please terminate the single-user server and try again.\n" msgstr "Por favor termine el servidor mono-usuario e intente nuevamente.\n" -#: pg_ctl.c:1122 +#: pg_ctl.c:1121 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" msgstr "%s: el proceso servidor antiguo (PID: %ld) parece no estar\n" -#: pg_ctl.c:1124 +#: pg_ctl.c:1123 msgid "starting server anyway\n" msgstr "iniciando el servidor de todas maneras\n" -#: pg_ctl.c:1145 +#: pg_ctl.c:1144 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" msgstr "" "%s: no se puede recargar el servidor;\n" "un servidor en modo mono-usuario está en ejecución (PID: %ld)\n" -#: pg_ctl.c:1154 +#: pg_ctl.c:1153 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" msgstr "%s: la señal de recarga falló (PID: %ld): %s\n" -#: pg_ctl.c:1159 +#: pg_ctl.c:1158 msgid "server signaled\n" msgstr "se ha enviado una señal al servidor\n" -#: pg_ctl.c:1184 +#: pg_ctl.c:1183 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" msgstr "" "%s: no se puede promover el servidor;\n" "un servidor en modo mono-usuario está en ejecución (PID: %ld)\n" -#: pg_ctl.c:1192 +#: pg_ctl.c:1191 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "" "%s: no se puede promover el servidor;\n" "el servidor no está en modo «standby»\n" -#: pg_ctl.c:1207 +#: pg_ctl.c:1201 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" msgstr "%s: no se pudo crear el archivo de señal de promoción «%s»: %s\n" -#: pg_ctl.c:1213 +#: pg_ctl.c:1207 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" msgstr "%s: no se pudo escribir al archivo de señal de promoción «%s»: %s\n" -#: pg_ctl.c:1221 +#: pg_ctl.c:1215 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" msgstr "%s: no se pudo enviar la señal de promoción (PID: %ld): %s\n" -#: pg_ctl.c:1224 +#: pg_ctl.c:1218 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" msgstr "%s: no se pudo eliminar el archivo de señal de promoción «%s»: %s\n" -#: pg_ctl.c:1234 +#: pg_ctl.c:1228 msgid "waiting for server to promote..." msgstr "esperando que el servidor se promueva..." -#: pg_ctl.c:1248 +#: pg_ctl.c:1242 msgid "server promoted\n" msgstr "servidor promovido\n" -#: pg_ctl.c:1253 +#: pg_ctl.c:1247 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: el servidor no se promovió a tiempo\n" -#: pg_ctl.c:1259 +#: pg_ctl.c:1253 msgid "server promoting\n" msgstr "servidor promoviendo\n" -#: pg_ctl.c:1283 +#: pg_ctl.c:1277 #, c-format msgid "%s: cannot rotate log file; single-user server is running (PID: %ld)\n" msgstr "%s: no se puede rotar el archivo de log; un servidor en modo mono-usuario está en ejecución (PID: %ld)\n" -#: pg_ctl.c:1293 +#: pg_ctl.c:1287 #, c-format msgid "%s: could not create log rotation signal file \"%s\": %s\n" msgstr "%s: no se pudo crear el archivo de señal de rotación de log «%s»: %s\n" -#: pg_ctl.c:1299 +#: pg_ctl.c:1293 #, c-format msgid "%s: could not write log rotation signal file \"%s\": %s\n" msgstr "%s: no se pudo escribir al archivo de señal de rotación de log «%s»: %s\n" -#: pg_ctl.c:1307 +#: pg_ctl.c:1301 #, c-format msgid "%s: could not send log rotation signal (PID: %ld): %s\n" msgstr "%s: no se pudo enviar la señal de rotación de log (PID: %ld): %s\n" -#: pg_ctl.c:1310 +#: pg_ctl.c:1304 #, c-format msgid "%s: could not remove log rotation signal file \"%s\": %s\n" msgstr "%s: no se pudo eliminar el archivo de señal de rotación de log «%s»: %s\n" -#: pg_ctl.c:1315 +#: pg_ctl.c:1309 msgid "server signaled to rotate log file\n" msgstr "se ha enviado una señal de rotación de log al servidor\n" -#: pg_ctl.c:1362 +#: pg_ctl.c:1356 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s: un servidor en modo mono-usuario está en ejecución (PID: %ld)\n" -#: pg_ctl.c:1376 +#: pg_ctl.c:1370 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: el servidor está en ejecución (PID: %ld)\n" -#: pg_ctl.c:1392 +#: pg_ctl.c:1386 #, c-format msgid "%s: no server running\n" msgstr "%s: no hay servidor en ejecución\n" -#: pg_ctl.c:1409 +#: pg_ctl.c:1403 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s: no se pudo enviar la señal %d (PID: %ld): %s\n" -#: pg_ctl.c:1440 +#: pg_ctl.c:1434 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: no se pudo encontrar el ejecutable propio\n" -#: pg_ctl.c:1450 +#: pg_ctl.c:1444 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: no se pudo encontrar el ejecutable postgres\n" -#: pg_ctl.c:1520 pg_ctl.c:1554 +#: pg_ctl.c:1514 pg_ctl.c:1548 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: no se pudo abrir el gestor de servicios\n" -#: pg_ctl.c:1526 +#: pg_ctl.c:1520 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: el servicio «%s» ya está registrado\n" -#: pg_ctl.c:1537 +#: pg_ctl.c:1531 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: no se pudo registrar el servicio «%s»: código de error %lu\n" -#: pg_ctl.c:1560 +#: pg_ctl.c:1554 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: el servicio «%s» no ha sido registrado\n" -#: pg_ctl.c:1567 +#: pg_ctl.c:1561 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: no se pudo abrir el servicio «%s»: código de error %lu\n" -#: pg_ctl.c:1576 +#: pg_ctl.c:1570 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: no se pudo dar de baja el servicio «%s»: código de error %lu\n" -#: pg_ctl.c:1663 +#: pg_ctl.c:1657 msgid "Waiting for server startup...\n" msgstr "Esperando que el servidor se inicie...\n" -#: pg_ctl.c:1666 +#: pg_ctl.c:1660 msgid "Timed out waiting for server startup\n" msgstr "Se agotó el tiempo de espera al inicio del servidor\n" -#: pg_ctl.c:1670 +#: pg_ctl.c:1664 msgid "Server started and accepting connections\n" msgstr "Servidor iniciado y aceptando conexiones\n" -#: pg_ctl.c:1725 +#: pg_ctl.c:1719 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: no se pudo iniciar el servicio «%s»: código de error %lu\n" -#: pg_ctl.c:1795 +#: pg_ctl.c:1789 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" msgstr "%s: ATENCIÓN: no se pueden crear tokens restrigidos en esta plataforma\n" -#: pg_ctl.c:1808 +#: pg_ctl.c:1802 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: no se pudo abrir el token de proceso: código de error %lu\n" -#: pg_ctl.c:1822 +#: pg_ctl.c:1816 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: no se pudo emplazar los SIDs: código de error %lu\n" -#: pg_ctl.c:1849 +#: pg_ctl.c:1843 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: no se pudo crear el token restringido: código de error %lu\n" -#: pg_ctl.c:1880 +#: pg_ctl.c:1874 #, c-format msgid "%s: WARNING: could not locate all job object functions in system API\n" msgstr "%s: ATENCIÓN: no fue posible encontrar todas las funciones de gestión de tareas en la API del sistema\n" -#: pg_ctl.c:1977 +#: pg_ctl.c:1971 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" msgstr "%s: no se pudo obtener LUIDs para privilegios: código de error %lu\n" -#: pg_ctl.c:1985 pg_ctl.c:2000 +#: pg_ctl.c:1979 pg_ctl.c:1994 #, c-format msgid "%s: could not get token information: error code %lu\n" msgstr "%s: no se pudo obtener información de token: código de error %lu\n" -#: pg_ctl.c:1994 +#: pg_ctl.c:1988 #, c-format msgid "%s: out of memory\n" msgstr "%s: memoria agotada\n" -#: pg_ctl.c:2024 +#: pg_ctl.c:2018 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Use «%s --help» para obtener más información.\n" -#: pg_ctl.c:2032 +#: pg_ctl.c:2026 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -551,17 +552,17 @@ msgstr "" "un servidor PostgreSQL.\n" "\n" -#: pg_ctl.c:2033 +#: pg_ctl.c:2027 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_ctl.c:2034 +#: pg_ctl.c:2028 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D DATADIR] [-s] [-o OPCIONES]\n" -#: pg_ctl.c:2035 +#: pg_ctl.c:2029 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -570,12 +571,12 @@ msgstr "" " %s start [-D DATADIR] [-l ARCHIVO] [-W] [-t SEGS] [-s]\n" " [-o OPCIONES] [-p RUTA] [-c]\n" -#: pg_ctl.c:2037 +#: pg_ctl.c:2031 #, c-format msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr " %s stop [-D DATADIR] [-m MODO-DETENCIÓN] [-W] [-t SEGS] [-s]\n" -#: pg_ctl.c:2038 +#: pg_ctl.c:2032 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -584,32 +585,32 @@ msgstr "" " %s restart [-D DATADIR] [-m MODO-DETENCIÓN] [-W] [-t SEGS] [-s]\n" " [-o OPCIONES]\n" -#: pg_ctl.c:2040 +#: pg_ctl.c:2034 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D DATADIR] [-s]\n" -#: pg_ctl.c:2041 +#: pg_ctl.c:2035 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D DATADIR]\n" -#: pg_ctl.c:2042 +#: pg_ctl.c:2036 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D DATADIR] [-W] [-t SEGS] [-s]\n" -#: pg_ctl.c:2043 +#: pg_ctl.c:2037 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D DATADIR] [-s]\n" -#: pg_ctl.c:2044 +#: pg_ctl.c:2038 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill NOMBRE-SEÑAL ID-DE-PROCESO\n" -#: pg_ctl.c:2046 +#: pg_ctl.c:2040 #, c-format msgid "" " %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" @@ -618,12 +619,12 @@ msgstr "" " %s register [-D DATADIR] [-N SERVICIO] [-U USUARIO] [-P PASSWORD]\n" " [-S TIPO-INICIO] [-e ORIGEN] [-W] [-t SEGS] [-o OPCIONES]\n" -#: pg_ctl.c:2048 +#: pg_ctl.c:2042 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N SERVICIO]\n" -#: pg_ctl.c:2051 +#: pg_ctl.c:2045 #, c-format msgid "" "\n" @@ -632,52 +633,52 @@ msgstr "" "\n" "Opciones comunes:\n" -#: pg_ctl.c:2052 +#: pg_ctl.c:2046 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata DATADIR ubicación del área de almacenamiento de datos\n" -#: pg_ctl.c:2054 +#: pg_ctl.c:2048 #, c-format msgid " -e SOURCE event source for logging when running as a service\n" msgstr " -e ORIGEN origen para el log de eventos cuando se ejecuta como servicio\n" -#: pg_ctl.c:2056 +#: pg_ctl.c:2050 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent mostrar sólo errores, no mensajes de información\n" -#: pg_ctl.c:2057 +#: pg_ctl.c:2051 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=SEGS segundos a esperar cuando se use la opción -w\n" -#: pg_ctl.c:2058 +#: pg_ctl.c:2052 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión, luego salir\n" -#: pg_ctl.c:2059 +#: pg_ctl.c:2053 #, c-format msgid " -w, --wait wait until operation completes (default)\n" msgstr " -w, --wait esperar hasta que la operación se haya completado (por omisión)\n" -#: pg_ctl.c:2060 +#: pg_ctl.c:2054 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" msgstr " -W, --no-wait no esperar hasta que la operación se haya completado\n" -#: pg_ctl.c:2061 +#: pg_ctl.c:2055 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda, luego salir\n" -#: pg_ctl.c:2062 +#: pg_ctl.c:2056 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Si la opción -D es omitida, se usa la variable de ambiente PGDATA.\n" -#: pg_ctl.c:2064 +#: pg_ctl.c:2058 #, c-format msgid "" "\n" @@ -686,24 +687,24 @@ msgstr "" "\n" "Opciones para inicio y reinicio:\n" -#: pg_ctl.c:2066 +#: pg_ctl.c:2060 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr "" " -c, --core-files permite que postgres produzca archivos\n" " de volcado (core)\n" -#: pg_ctl.c:2068 +#: pg_ctl.c:2062 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files no aplicable en esta plataforma\n" -#: pg_ctl.c:2070 +#: pg_ctl.c:2064 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l --log=ARCHIVO guardar el registro del servidor en ARCHIVO.\n" -#: pg_ctl.c:2071 +#: pg_ctl.c:2065 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" @@ -712,12 +713,12 @@ msgstr "" " -o, --options=OPCIONES parámetros de línea de órdenes a pasar a postgres\n" " (ejecutable del servidor de PostgreSQL) o initdb\n" -#: pg_ctl.c:2073 +#: pg_ctl.c:2067 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p RUTA-A-POSTGRES normalmente no es necesario\n" -#: pg_ctl.c:2074 +#: pg_ctl.c:2068 #, c-format msgid "" "\n" @@ -726,12 +727,12 @@ msgstr "" "\n" "Opciones para detener o reiniciar:\n" -#: pg_ctl.c:2075 +#: pg_ctl.c:2069 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=MODO puede ser «smart», «fast» o «immediate»\n" -#: pg_ctl.c:2077 +#: pg_ctl.c:2071 #, c-format msgid "" "\n" @@ -740,24 +741,24 @@ msgstr "" "\n" "Modos de detención son:\n" -#: pg_ctl.c:2078 +#: pg_ctl.c:2072 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart salir después que todos los clientes se hayan desconectado\n" -#: pg_ctl.c:2079 +#: pg_ctl.c:2073 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" msgstr " fast salir directamente, con apagado apropiado (por omisión)\n" -#: pg_ctl.c:2080 +#: pg_ctl.c:2074 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr "" " immediate salir sin apagado completo; se ejecutará recuperación\n" " en el próximo inicio\n" -#: pg_ctl.c:2082 +#: pg_ctl.c:2076 #, c-format msgid "" "\n" @@ -766,7 +767,7 @@ msgstr "" "\n" "Nombres de señales permitidos para kill:\n" -#: pg_ctl.c:2086 +#: pg_ctl.c:2080 #, c-format msgid "" "\n" @@ -775,35 +776,35 @@ msgstr "" "\n" "Opciones para registrar y dar de baja:\n" -#: pg_ctl.c:2087 +#: pg_ctl.c:2081 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr "" " -N SERVICIO nombre de servicio con el cual registrar\n" " el servidor PostgreSQL\n" -#: pg_ctl.c:2088 +#: pg_ctl.c:2082 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr "" " -P CONTRASEÑA contraseña de la cuenta con la cual registrar\n" " el servidor PostgreSQL\n" -#: pg_ctl.c:2089 +#: pg_ctl.c:2083 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr "" " -U USUARIO nombre de usuario de la cuenta con la cual\n" " registrar el servidor PostgreSQL\n" -#: pg_ctl.c:2090 +#: pg_ctl.c:2084 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr "" " -S TIPO-INICIO tipo de inicio de servicio con que registrar\n" " el servidor PostgreSQL\n" -#: pg_ctl.c:2092 +#: pg_ctl.c:2086 #, c-format msgid "" "\n" @@ -812,17 +813,17 @@ msgstr "" "\n" "Tipos de inicio del servicio son:\n" -#: pg_ctl.c:2093 +#: pg_ctl.c:2087 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr " auto iniciar automáticamente al inicio del sistema (por omisión)\n" -#: pg_ctl.c:2094 +#: pg_ctl.c:2088 #, c-format msgid " demand start service on demand\n" msgstr " demand iniciar el servicio en demanda\n" -#: pg_ctl.c:2097 +#: pg_ctl.c:2091 #, c-format msgid "" "\n" @@ -831,37 +832,37 @@ msgstr "" "\n" "Reporte errores a <%s>.\n" -#: pg_ctl.c:2098 +#: pg_ctl.c:2092 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: pg_ctl.c:2123 +#: pg_ctl.c:2117 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: modo de apagado «%s» no reconocido\n" -#: pg_ctl.c:2152 +#: pg_ctl.c:2146 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: nombre de señal «%s» no reconocido\n" -#: pg_ctl.c:2169 +#: pg_ctl.c:2163 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: tipo de inicio «%s» no reconocido\n" -#: pg_ctl.c:2224 +#: pg_ctl.c:2218 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: no se pudo determinar el directorio de datos usando la orden «%s»\n" -#: pg_ctl.c:2248 +#: pg_ctl.c:2242 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: el archivo de control parece estar corrupto\n" -#: pg_ctl.c:2316 +#: pg_ctl.c:2310 #, c-format msgid "" "%s: cannot be run as root\n" @@ -872,32 +873,35 @@ msgstr "" "Por favor conéctese (usando, por ejemplo, «su») con un usuario no privilegiado,\n" "quien ejecutará el proceso servidor.\n" -#: pg_ctl.c:2400 +#: pg_ctl.c:2393 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: la opción -S no está soportada en esta plataforma\n" -#: pg_ctl.c:2437 +#: pg_ctl.c:2430 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: demasiados argumentos de línea de órdenes (el primero es «%s»)\n" -#: pg_ctl.c:2463 +#: pg_ctl.c:2456 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: argumentos faltantes para envío de señal\n" -#: pg_ctl.c:2481 +#: pg_ctl.c:2474 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: modo de operación «%s» no reconocido\n" -#: pg_ctl.c:2491 +#: pg_ctl.c:2484 #, c-format msgid "%s: no operation specified\n" msgstr "%s: no se especificó operación\n" -#: pg_ctl.c:2512 +#: pg_ctl.c:2505 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: no se especificó directorio de datos y la variable PGDATA no está definida\n" + +#~ msgid "pclose failed: %m" +#~ msgstr "pclose falló: %m" diff --git a/src/bin/pg_dump/po/de.po b/src/bin/pg_dump/po/de.po index 21298e4e61020..a0fb38612e03f 100644 --- a/src/bin/pg_dump/po/de.po +++ b/src/bin/pg_dump/po/de.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-01 15:18+0000\n" -"PO-Revision-Date: 2021-05-02 09:32+0200\n" +"POT-Creation-Date: 2021-05-14 08:48+0000\n" +"PO-Revision-Date: 2021-05-14 14:38+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -312,17 +312,17 @@ msgstr "lese Subskriptionen" msgid "invalid number of parents %d for table \"%s\"" msgstr "ungültige Anzahl Eltern %d für Tabelle »%s«" -#: common.c:1098 +#: common.c:1100 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "Sanity-Check fehlgeschlagen, Eltern-OID %u von Tabelle »%s« (OID %u) nicht gefunden" -#: common.c:1140 +#: common.c:1142 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "konnte numerisches Array »%s« nicht parsen: zu viele Zahlen" -#: common.c:1155 +#: common.c:1157 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "konnte numerisches Array »%s« nicht parsen: ungültiges Zeichen in Zahl" @@ -580,7 +580,7 @@ msgstr "Wiederherstellung von Large Object mit OID %u" msgid "could not create large object %u: %s" msgstr "konnte Large Object %u nicht erstellen: %s" -#: pg_backup_archiver.c:1321 pg_dump.c:3702 +#: pg_backup_archiver.c:1321 pg_dump.c:3693 #, c-format msgid "could not open large object %u: %s" msgstr "konnte Large Object %u nicht öffnen: %s" @@ -1048,7 +1048,7 @@ msgstr "Fehler in PQputCopyEnd: %s" msgid "COPY failed for table \"%s\": %s" msgstr "COPY fehlgeschlagen für Tabelle »%s«: %s" -#: pg_backup_db.c:525 pg_dump.c:2086 +#: pg_backup_db.c:525 pg_dump.c:2077 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "unerwartete zusätzliche Ergebnisse während COPY von Tabelle »%s«" @@ -1219,7 +1219,7 @@ msgstr "beschädigter Tar-Kopf in %s gefunden (%d erwartet, %d berechnet), Datei msgid "unrecognized section name: \"%s\"" msgstr "unbekannter Abschnittsname: »%s«" -#: pg_backup_utils.c:55 pg_dump.c:628 pg_dump.c:645 pg_dumpall.c:339 +#: pg_backup_utils.c:55 pg_dump.c:623 pg_dump.c:640 pg_dumpall.c:339 #: pg_dumpall.c:349 pg_dumpall.c:358 pg_dumpall.c:367 pg_dumpall.c:375 #: pg_dumpall.c:389 pg_dumpall.c:465 pg_restore.c:284 pg_restore.c:300 #: pg_restore.c:318 @@ -1232,77 +1232,72 @@ msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" msgid "out of on_exit_nicely slots" msgstr "on_exit_nicely-Slots aufgebraucht" -#: pg_dump.c:554 +#: pg_dump.c:549 #, c-format msgid "compression level must be in range 0..9" msgstr "Komprimierungsniveau muss im Bereich 0..9 sein" -#: pg_dump.c:592 +#: pg_dump.c:587 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digits muss im Bereich -15..3 sein" -#: pg_dump.c:615 +#: pg_dump.c:610 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "Zeilen-pro-Insert muss im Bereich %d..%d sein" -#: pg_dump.c:643 pg_dumpall.c:347 pg_restore.c:298 +#: pg_dump.c:638 pg_dumpall.c:347 pg_restore.c:298 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" -#: pg_dump.c:664 pg_restore.c:327 +#: pg_dump.c:659 pg_restore.c:327 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "Optionen -s/--schema-only und -a/--data-only können nicht zusammen verwendet werden" -#: pg_dump.c:669 +#: pg_dump.c:664 #, c-format msgid "options -s/--schema-only and --include-foreign-data cannot be used together" msgstr "Optionen -s/--schema-only und --include-foreign-data können nicht zusammen verwendet werden" -#: pg_dump.c:672 +#: pg_dump.c:667 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" msgstr "Option --include-foreign-data wird nicht mit paralleler Sicherung unterstützt" -#: pg_dump.c:676 pg_restore.c:333 +#: pg_dump.c:671 pg_restore.c:333 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "Optionen -c/--clean und -a/--data-only können nicht zusammen verwendet werden" -#: pg_dump.c:681 pg_dumpall.c:382 pg_restore.c:382 +#: pg_dump.c:676 pg_dumpall.c:382 pg_restore.c:382 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "Option --if-exists benötigt Option -c/--clean" -#: pg_dump.c:688 +#: pg_dump.c:683 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "Option --on-conflict-do-nothing benötigt Option --inserts, --rows-per-insert oder --column-inserts" -#: pg_dump.c:710 +#: pg_dump.c:705 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "Komprimierung ist in dieser Installation nicht verfügbar -- Archiv wird nicht komprimiert" -#: pg_dump.c:731 pg_restore.c:349 +#: pg_dump.c:726 pg_restore.c:349 #, c-format msgid "invalid number of parallel jobs" msgstr "ungültige Anzahl paralleler Jobs" -#: pg_dump.c:735 +#: pg_dump.c:730 #, c-format msgid "parallel backup only supported by the directory format" msgstr "parallele Sicherung wird nur vom Ausgabeformat »Verzeichnis« unterstützt" -#: pg_dump.c:739 -#, c-format -msgid "option --index-collation-versions-unknown only works in binary upgrade mode" -msgstr "Option --index-collation-versions-unknown funktioniert nur im Binary-Upgrade-Modus" - -#: pg_dump.c:794 +#: pg_dump.c:785 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1313,32 +1308,32 @@ msgstr "" "Verwenden Sie --no-synchronized-snapshots, wenn Sie keine synchronisierten\n" "Snapshots benötigen." -#: pg_dump.c:800 +#: pg_dump.c:791 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Exportierte Snapshots werden in dieser Serverversion nicht unterstützt." -#: pg_dump.c:812 +#: pg_dump.c:803 #, c-format msgid "last built-in OID is %u" msgstr "letzte eingebaute OID ist %u" -#: pg_dump.c:821 +#: pg_dump.c:812 #, c-format msgid "no matching schemas were found" msgstr "keine passenden Schemas gefunden" -#: pg_dump.c:835 +#: pg_dump.c:826 #, c-format msgid "no matching tables were found" msgstr "keine passenden Tabellen gefunden" -#: pg_dump.c:857 +#: pg_dump.c:848 #, c-format msgid "no matching extensions were found" msgstr "keine passenden Erweiterungen gefunden" -#: pg_dump.c:1029 +#: pg_dump.c:1020 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1347,17 +1342,17 @@ msgstr "" "%s gibt eine Datenbank als Textdatei oder in anderen Formaten aus.\n" "\n" -#: pg_dump.c:1030 pg_dumpall.c:618 pg_restore.c:462 +#: pg_dump.c:1021 pg_dumpall.c:618 pg_restore.c:462 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: pg_dump.c:1031 +#: pg_dump.c:1022 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [DBNAME]\n" -#: pg_dump.c:1033 pg_dumpall.c:621 pg_restore.c:465 +#: pg_dump.c:1024 pg_dumpall.c:621 pg_restore.c:465 #, c-format msgid "" "\n" @@ -1366,12 +1361,12 @@ msgstr "" "\n" "Allgemeine Optionen:\n" -#: pg_dump.c:1034 +#: pg_dump.c:1025 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=DATEINAME Name der Ausgabedatei oder des -verzeichnisses\n" -#: pg_dump.c:1035 +#: pg_dump.c:1026 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1380,44 +1375,44 @@ msgstr "" " -F, --format=c|d|t|p Ausgabeformat (custom, d=Verzeichnis, tar,\n" " plain text)\n" -#: pg_dump.c:1037 +#: pg_dump.c:1028 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM so viele parallele Jobs zur Sicherung verwenden\n" -#: pg_dump.c:1038 pg_dumpall.c:623 +#: pg_dump.c:1029 pg_dumpall.c:623 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose »Verbose«-Modus\n" -#: pg_dump.c:1039 pg_dumpall.c:624 +#: pg_dump.c:1030 pg_dumpall.c:624 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_dump.c:1040 +#: pg_dump.c:1031 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 Komprimierungsniveau für komprimierte Formate\n" -#: pg_dump.c:1041 pg_dumpall.c:625 +#: pg_dump.c:1032 pg_dumpall.c:625 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr " --lock-wait-timeout=ZEIT Abbruch nach ZEIT Warten auf Tabellensperre\n" -#: pg_dump.c:1042 pg_dumpall.c:652 +#: pg_dump.c:1033 pg_dumpall.c:652 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr "" " --no-sync nicht warten, bis Änderungen sicher auf Festplatte\n" " geschrieben sind\n" -#: pg_dump.c:1043 pg_dumpall.c:626 +#: pg_dump.c:1034 pg_dumpall.c:626 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_dump.c:1045 pg_dumpall.c:627 +#: pg_dump.c:1036 pg_dumpall.c:627 #, c-format msgid "" "\n" @@ -1426,54 +1421,54 @@ msgstr "" "\n" "Optionen die den Inhalt der Ausgabe kontrollieren:\n" -#: pg_dump.c:1046 pg_dumpall.c:628 +#: pg_dump.c:1037 pg_dumpall.c:628 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only nur Daten ausgeben, nicht das Schema\n" -#: pg_dump.c:1047 +#: pg_dump.c:1038 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs Large Objects mit ausgeben\n" -#: pg_dump.c:1048 +#: pg_dump.c:1039 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs Large Objects nicht mit ausgeben\n" -#: pg_dump.c:1049 pg_restore.c:476 +#: pg_dump.c:1040 pg_restore.c:476 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr " -c, --clean Datenbankobjekte vor der Wiedererstellung löschen\n" -#: pg_dump.c:1050 +#: pg_dump.c:1041 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr "" " -C, --create Anweisungen zum Erstellen der Datenbank in\n" " Ausgabe einfügen\n" -#: pg_dump.c:1051 +#: pg_dump.c:1042 #, c-format msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" msgstr " -e, --extension=MUSTER nur die angegebene(n) Erweiterung(en) ausgeben\n" -#: pg_dump.c:1052 pg_dumpall.c:630 +#: pg_dump.c:1043 pg_dumpall.c:630 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=KODIERUNG Daten in Kodierung KODIERUNG ausgeben\n" -#: pg_dump.c:1053 +#: pg_dump.c:1044 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=MUSTER nur das/die angegebene(n) Schema(s) ausgeben\n" -#: pg_dump.c:1054 +#: pg_dump.c:1045 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=MUSTER das/die angegebene(n) Schema(s) NICHT ausgeben\n" -#: pg_dump.c:1055 +#: pg_dump.c:1046 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1482,58 +1477,58 @@ msgstr "" " -O, --no-owner Wiederherstellung der Objekteigentümerschaft im\n" " »plain text«-Format auslassen\n" -#: pg_dump.c:1057 pg_dumpall.c:634 +#: pg_dump.c:1048 pg_dumpall.c:634 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only nur das Schema, nicht die Daten, ausgeben\n" -#: pg_dump.c:1058 +#: pg_dump.c:1049 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr " -S, --superuser=NAME Superusername für »plain text«-Format\n" -#: pg_dump.c:1059 +#: pg_dump.c:1050 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=MUSTER nur die angegebene(n) Tabelle(n) ausgeben\n" -#: pg_dump.c:1060 +#: pg_dump.c:1051 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=MUSTER die angegebene(n) Tabelle(n) NICHT ausgeben\n" -#: pg_dump.c:1061 pg_dumpall.c:637 +#: pg_dump.c:1052 pg_dumpall.c:637 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges Zugriffsprivilegien (grant/revoke) nicht ausgeben\n" -#: pg_dump.c:1062 pg_dumpall.c:638 +#: pg_dump.c:1053 pg_dumpall.c:638 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade wird nur von Upgrade-Programmen verwendet\n" -#: pg_dump.c:1063 pg_dumpall.c:639 +#: pg_dump.c:1054 pg_dumpall.c:639 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr "" " --column-inserts Daten als INSERT-Anweisungen mit Spaltennamen\n" " ausgeben\n" -#: pg_dump.c:1064 pg_dumpall.c:640 +#: pg_dump.c:1055 pg_dumpall.c:640 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr "" " --disable-dollar-quoting Dollar-Quoting abschalten, normales SQL-Quoting\n" " verwenden\n" -#: pg_dump.c:1065 pg_dumpall.c:641 pg_restore.c:493 +#: pg_dump.c:1056 pg_dumpall.c:641 pg_restore.c:493 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr "" " --disable-triggers Trigger während der Datenwiederherstellung\n" " abschalten\n" -#: pg_dump.c:1066 +#: pg_dump.c:1057 #, c-format msgid "" " --enable-row-security enable row security (dump only content user has\n" @@ -1542,22 +1537,22 @@ msgstr "" " --enable-row-security Sicherheit auf Zeilenebene einschalten (nur Daten\n" " ausgeben, auf die der Benutzer Zugriff hat)\n" -#: pg_dump.c:1068 +#: pg_dump.c:1059 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=MUSTER Daten der angegebenen Tabelle(n) NICHT ausgeben\n" -#: pg_dump.c:1069 pg_dumpall.c:643 +#: pg_dump.c:1060 pg_dumpall.c:643 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=ZAHL Einstellung für extra_float_digits\n" -#: pg_dump.c:1070 pg_dumpall.c:644 pg_restore.c:495 +#: pg_dump.c:1061 pg_dumpall.c:644 pg_restore.c:495 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists IF EXISTS verwenden, wenn Objekte gelöscht werden\n" -#: pg_dump.c:1071 +#: pg_dump.c:1062 #, c-format msgid "" " --include-foreign-data=PATTERN\n" @@ -1568,93 +1563,93 @@ msgstr "" " Daten von Fremdtabellen auf Fremdservern, die\n" " mit MUSTER übereinstimmen, mit sichern\n" -#: pg_dump.c:1074 pg_dumpall.c:645 +#: pg_dump.c:1065 pg_dumpall.c:645 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts Daten als INSERT-Anweisungen statt COPY ausgeben\n" -#: pg_dump.c:1075 pg_dumpall.c:646 +#: pg_dump.c:1066 pg_dumpall.c:646 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root Partitionen über die Wurzeltabelle laden\n" -#: pg_dump.c:1076 pg_dumpall.c:647 +#: pg_dump.c:1067 pg_dumpall.c:647 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments Kommentare nicht ausgeben\n" -#: pg_dump.c:1077 pg_dumpall.c:648 +#: pg_dump.c:1068 pg_dumpall.c:648 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications Publikationen nicht ausgeben\n" -#: pg_dump.c:1078 pg_dumpall.c:650 +#: pg_dump.c:1069 pg_dumpall.c:650 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels Security-Label-Zuweisungen nicht ausgeben\n" -#: pg_dump.c:1079 pg_dumpall.c:651 +#: pg_dump.c:1070 pg_dumpall.c:651 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions Subskriptionen nicht ausgeben\n" -#: pg_dump.c:1080 +#: pg_dump.c:1071 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr "" " --no-synchronized-snapshots keine synchronisierten Snapshots in parallelen\n" " Jobs verwenden\n" -#: pg_dump.c:1081 pg_dumpall.c:653 +#: pg_dump.c:1072 pg_dumpall.c:653 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces Tablespace-Zuordnungen nicht ausgeben\n" -#: pg_dump.c:1082 +#: pg_dump.c:1073 #, c-format -msgid " --no-toast-compression do not dump toast compression methods\n" +msgid " --no-toast-compression do not dump TOAST compression methods\n" msgstr " --no-toast-compression TOAST-Komprimierungsmethoden nicht ausgeben\n" -#: pg_dump.c:1083 pg_dumpall.c:654 +#: pg_dump.c:1074 pg_dumpall.c:654 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data Daten in ungeloggten Tabellen nicht ausgeben\n" -#: pg_dump.c:1084 pg_dumpall.c:655 +#: pg_dump.c:1075 pg_dumpall.c:655 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" msgstr " --on-conflict-do-nothing INSERT-Befehle mit ON CONFLICT DO NOTHING ausgeben\n" -#: pg_dump.c:1085 pg_dumpall.c:656 +#: pg_dump.c:1076 pg_dumpall.c:656 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers alle Bezeichner in Anführungszeichen, selbst wenn\n" " kein Schlüsselwort\n" -#: pg_dump.c:1086 pg_dumpall.c:657 +#: pg_dump.c:1077 pg_dumpall.c:657 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=ANZAHL Anzahl Zeilen pro INSERT; impliziert --inserts\n" -#: pg_dump.c:1087 +#: pg_dump.c:1078 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr "" " --section=ABSCHNITT angegebenen Abschnitt ausgeben (pre-data, data\n" " oder post-data)\n" -#: pg_dump.c:1088 +#: pg_dump.c:1079 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr " --serializable-deferrable warten bis der Dump ohne Anomalien laufen kann\n" -#: pg_dump.c:1089 +#: pg_dump.c:1080 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT angegebenen Snapshot für den Dump verwenden\n" -#: pg_dump.c:1090 pg_restore.c:504 +#: pg_dump.c:1081 pg_restore.c:504 #, c-format msgid "" " --strict-names require table and/or schema include patterns to\n" @@ -1663,7 +1658,7 @@ msgstr "" " --strict-names Tabellen- oder Schemamuster müssen auf mindestens\n" " je ein Objekt passen\n" -#: pg_dump.c:1092 pg_dumpall.c:658 pg_restore.c:506 +#: pg_dump.c:1083 pg_dumpall.c:658 pg_restore.c:506 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1675,7 +1670,7 @@ msgstr "" " OWNER Befehle verwenden, um Eigentümerschaft zu\n" " setzen\n" -#: pg_dump.c:1096 pg_dumpall.c:662 pg_restore.c:510 +#: pg_dump.c:1087 pg_dumpall.c:662 pg_restore.c:510 #, c-format msgid "" "\n" @@ -1684,42 +1679,42 @@ msgstr "" "\n" "Verbindungsoptionen:\n" -#: pg_dump.c:1097 +#: pg_dump.c:1088 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=DBNAME auszugebende Datenbank\n" -#: pg_dump.c:1098 pg_dumpall.c:664 pg_restore.c:511 +#: pg_dump.c:1089 pg_dumpall.c:664 pg_restore.c:511 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n" -#: pg_dump.c:1099 pg_dumpall.c:666 pg_restore.c:512 +#: pg_dump.c:1090 pg_dumpall.c:666 pg_restore.c:512 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT Portnummer des Datenbankservers\n" -#: pg_dump.c:1100 pg_dumpall.c:667 pg_restore.c:513 +#: pg_dump.c:1091 pg_dumpall.c:667 pg_restore.c:513 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME Datenbankbenutzername\n" -#: pg_dump.c:1101 pg_dumpall.c:668 pg_restore.c:514 +#: pg_dump.c:1092 pg_dumpall.c:668 pg_restore.c:514 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password niemals nach Passwort fragen\n" -#: pg_dump.c:1102 pg_dumpall.c:669 pg_restore.c:515 +#: pg_dump.c:1093 pg_dumpall.c:669 pg_restore.c:515 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password nach Passwort fragen (sollte automatisch geschehen)\n" -#: pg_dump.c:1103 pg_dumpall.c:670 +#: pg_dump.c:1094 pg_dumpall.c:670 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROLLENNAME vor der Ausgabe SET ROLE ausführen\n" -#: pg_dump.c:1105 +#: pg_dump.c:1096 #, c-format msgid "" "\n" @@ -1732,22 +1727,22 @@ msgstr "" "PGDATABASE verwendet.\n" "\n" -#: pg_dump.c:1107 pg_dumpall.c:674 pg_restore.c:522 +#: pg_dump.c:1098 pg_dumpall.c:674 pg_restore.c:522 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Berichten Sie Fehler an <%s>.\n" -#: pg_dump.c:1108 pg_dumpall.c:675 pg_restore.c:523 +#: pg_dump.c:1099 pg_dumpall.c:675 pg_restore.c:523 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: pg_dump.c:1127 pg_dumpall.c:500 +#: pg_dump.c:1118 pg_dumpall.c:500 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "ungültige Clientkodierung »%s« angegeben" -#: pg_dump.c:1273 +#: pg_dump.c:1264 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server version.\n" @@ -1758,501 +1753,486 @@ msgstr "" "Verwenden Sie --no-synchronized-snapshots, wenn Sie keine synchronisierten\n" "Snapshots benötigen." -#: pg_dump.c:1342 +#: pg_dump.c:1333 #, c-format msgid "invalid output format \"%s\" specified" msgstr "ungültiges Ausgabeformat »%s« angegeben" -#: pg_dump.c:1380 +#: pg_dump.c:1371 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "keine passenden Schemas für Muster »%s« gefunden" -#: pg_dump.c:1427 +#: pg_dump.c:1418 #, c-format msgid "no matching extensions were found for pattern \"%s\"" msgstr "keine passenden Erweiterungen für Muster »%s« gefunden" -#: pg_dump.c:1474 +#: pg_dump.c:1465 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "keine passenden Fremdserver für Muster »%s« gefunden" -#: pg_dump.c:1537 +#: pg_dump.c:1528 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "keine passenden Tabellen für Muster »%s« gefunden" -#: pg_dump.c:1960 +#: pg_dump.c:1951 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "gebe Inhalt der Tabelle »%s.%s« aus" -#: pg_dump.c:2067 +#: pg_dump.c:2058 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Ausgabe des Inhalts der Tabelle »%s« fehlgeschlagen: PQgetCopyData() fehlgeschlagen." -#: pg_dump.c:2068 pg_dump.c:2078 +#: pg_dump.c:2059 pg_dump.c:2069 #, c-format msgid "Error message from server: %s" msgstr "Fehlermeldung vom Server: %s" -#: pg_dump.c:2069 pg_dump.c:2079 +#: pg_dump.c:2060 pg_dump.c:2070 #, c-format msgid "The command was: %s" msgstr "Die Anweisung war: %s" -#: pg_dump.c:2077 +#: pg_dump.c:2068 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Ausgabe des Inhalts der Tabelle »%s« fehlgeschlagen: PQgetResult() fehlgeschlagen." -#: pg_dump.c:2837 +#: pg_dump.c:2828 #, c-format msgid "saving database definition" msgstr "sichere Datenbankdefinition" -#: pg_dump.c:3309 +#: pg_dump.c:3300 #, c-format msgid "saving encoding = %s" msgstr "sichere Kodierung = %s" -#: pg_dump.c:3334 +#: pg_dump.c:3325 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "sichere standard_conforming_strings = %s" -#: pg_dump.c:3373 +#: pg_dump.c:3364 #, c-format msgid "could not parse result of current_schemas()" msgstr "konnte Ergebnis von current_schemas() nicht interpretieren" -#: pg_dump.c:3392 +#: pg_dump.c:3383 #, c-format msgid "saving search_path = %s" msgstr "sichere search_path = %s" -#: pg_dump.c:3445 +#: pg_dump.c:3436 #, c-format msgid "saving default_toast_compression = %s" msgstr "sichere default_toast_compression = %s" -#: pg_dump.c:3484 +#: pg_dump.c:3475 #, c-format msgid "reading large objects" msgstr "lese Large Objects" -#: pg_dump.c:3666 +#: pg_dump.c:3657 #, c-format msgid "saving large objects" msgstr "sichere Large Objects" -#: pg_dump.c:3712 +#: pg_dump.c:3703 #, c-format msgid "error reading large object %u: %s" msgstr "Fehler beim Lesen von Large Object %u: %s" -#: pg_dump.c:3764 +#: pg_dump.c:3755 #, c-format msgid "reading row security enabled for table \"%s.%s\"" msgstr "lese Einstellung von Sicherheit auf Zeilenebene für Tabelle »%s.%s«" -#: pg_dump.c:3795 +#: pg_dump.c:3786 #, c-format msgid "reading policies for table \"%s.%s\"" msgstr "lese Policys von Tabelle »%s.%s«" -#: pg_dump.c:3947 +#: pg_dump.c:3938 #, c-format msgid "unexpected policy command type: %c" msgstr "unerwarteter Policy-Befehlstyp: %c" -#: pg_dump.c:4101 +#: pg_dump.c:4092 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "Eigentümer der Publikation »%s« scheint ungültig zu sein" -#: pg_dump.c:4393 +#: pg_dump.c:4384 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "Subskriptionen werden nicht ausgegeben, weil der aktuelle Benutzer kein Superuser ist" -#: pg_dump.c:4464 +#: pg_dump.c:4455 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "Eigentümer der Subskription »%s« scheint ungültig zu sein" -#: pg_dump.c:4507 +#: pg_dump.c:4498 #, c-format msgid "could not parse subpublications array" msgstr "konnte subpublications-Array nicht interpretieren" -#: pg_dump.c:4865 +#: pg_dump.c:4856 #, c-format msgid "could not find parent extension for %s %s" msgstr "konnte Erweiterung, zu der %s %s gehört, nicht finden" -#: pg_dump.c:4997 +#: pg_dump.c:4988 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "Eigentümer des Schemas »%s« scheint ungültig zu sein" -#: pg_dump.c:5020 +#: pg_dump.c:5011 #, c-format msgid "schema with OID %u does not exist" msgstr "Schema mit OID %u existiert nicht" -#: pg_dump.c:5349 +#: pg_dump.c:5340 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "Eigentümer des Datentypen »%s« scheint ungültig zu sein" -#: pg_dump.c:5433 +#: pg_dump.c:5424 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "Eigentümer des Operatoren »%s« scheint ungültig zu sein" -#: pg_dump.c:5732 +#: pg_dump.c:5723 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "Eigentümer der Operatorklasse »%s« scheint ungültig zu sein" -#: pg_dump.c:5815 +#: pg_dump.c:5806 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "Eigentümer der Operatorfamilie »%s« scheint ungültig zu sein" -#: pg_dump.c:5983 +#: pg_dump.c:5974 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "Eigentümer der Aggregatfunktion »%s« scheint ungültig zu sein" -#: pg_dump.c:6242 +#: pg_dump.c:6233 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "Eigentümer der Funktion »%s« scheint ungültig zu sein" -#: pg_dump.c:7069 +#: pg_dump.c:7060 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "Eigentümer der Tabelle »%s« scheint ungültig zu sein" -#: pg_dump.c:7111 pg_dump.c:17573 +#: pg_dump.c:7102 pg_dump.c:17493 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "Sanity-Check fehlgeschlagen, Elterntabelle mit OID %u von Sequenz mit OID %u nicht gefunden" -#: pg_dump.c:7252 +#: pg_dump.c:7241 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "lese Indexe von Tabelle »%s.%s«" -#: pg_dump.c:7737 +#: pg_dump.c:7655 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "lese Fremdschlüssel-Constraints von Tabelle »%s.%s«" -#: pg_dump.c:8016 +#: pg_dump.c:7934 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "Sanity-Check fehlgeschlagen, Elterntabelle mit OID %u von pg_rewrite-Eintrag mit OID %u nicht gefunden" -#: pg_dump.c:8099 +#: pg_dump.c:8017 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "lese Trigger von Tabelle »%s.%s«" -#: pg_dump.c:8232 +#: pg_dump.c:8150 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "Anfrage ergab NULL als Name der Tabelle auf die sich Fremdschlüssel-Trigger »%s« von Tabelle »%s« bezieht (OID der Tabelle: %u)" -#: pg_dump.c:8782 +#: pg_dump.c:8700 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "finde Spalten und Typen von Tabelle »%s.%s«" -#: pg_dump.c:8906 +#: pg_dump.c:8824 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "ungültige Spaltennummerierung in Tabelle »%s«" -#: pg_dump.c:8945 +#: pg_dump.c:8863 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "finde DEFAULT-Ausdrücke von Tabelle »%s.%s«" -#: pg_dump.c:8967 +#: pg_dump.c:8885 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "ungültiger adnum-Wert %d für Tabelle »%s«" -#: pg_dump.c:9060 +#: pg_dump.c:8978 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "finde Check-Constraints für Tabelle »%s.%s«" -#: pg_dump.c:9109 +#: pg_dump.c:9027 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "%d Check-Constraint für Tabelle %s erwartet, aber %d gefunden" msgstr[1] "%d Check-Constraints für Tabelle %s erwartet, aber %d gefunden" -#: pg_dump.c:9113 +#: pg_dump.c:9031 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Die Systemkataloge sind wahrscheinlich verfälscht.)" -#: pg_dump.c:10698 +#: pg_dump.c:10616 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "typtype des Datentypen »%s« scheint ungültig zu sein" -#: pg_dump.c:12050 +#: pg_dump.c:11968 #, c-format msgid "bogus value in proargmodes array" msgstr "unsinniger Wert in proargmodes-Array" -#: pg_dump.c:12357 +#: pg_dump.c:12275 #, c-format msgid "could not parse proallargtypes array" msgstr "konnte proallargtypes-Array nicht interpretieren" -#: pg_dump.c:12373 +#: pg_dump.c:12291 #, c-format msgid "could not parse proargmodes array" msgstr "konnte proargmodes-Array nicht interpretieren" -#: pg_dump.c:12387 +#: pg_dump.c:12305 #, c-format msgid "could not parse proargnames array" msgstr "konnte proargnames-Array nicht interpretieren" -#: pg_dump.c:12397 +#: pg_dump.c:12315 #, c-format msgid "could not parse proconfig array" msgstr "konnte proconfig-Array nicht interpretieren" -#: pg_dump.c:12477 +#: pg_dump.c:12395 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "ungültiger provolatile-Wert für Funktion »%s«" -#: pg_dump.c:12527 pg_dump.c:14458 +#: pg_dump.c:12445 pg_dump.c:14396 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "ungültiger proparallel-Wert für Funktion »%s«" -#: pg_dump.c:12666 pg_dump.c:12775 pg_dump.c:12782 +#: pg_dump.c:12584 pg_dump.c:12693 pg_dump.c:12700 #, c-format msgid "could not find function definition for function with OID %u" msgstr "konnte Funktionsdefinition für Funktion mit OID %u nicht finden" -#: pg_dump.c:12705 +#: pg_dump.c:12623 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "unsinniger Wert in Feld pg_cast.castfunc oder pg_cast.castmethod" -#: pg_dump.c:12708 +#: pg_dump.c:12626 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "unsinniger Wert in Feld pg_cast.castmethod" -#: pg_dump.c:12801 +#: pg_dump.c:12719 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "unsinnige Transformationsdefinition, mindestens eins von trffromsql und trftosql sollte nicht null sein" -#: pg_dump.c:12818 +#: pg_dump.c:12736 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "unsinniger Wert in Feld pg_transform.trffromsql" -#: pg_dump.c:12839 +#: pg_dump.c:12757 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "unsinniger Wert in Feld pg_transform.trftosql" -#: pg_dump.c:12991 +#: pg_dump.c:12909 #, c-format msgid "postfix operators are not supported anymore (operator \"%s\")" msgstr "Postfix-Operatoren werden nicht mehr unterstützt (Operator »%s«)" -#: pg_dump.c:13161 +#: pg_dump.c:13079 #, c-format msgid "could not find operator with OID %s" msgstr "konnte Operator mit OID %s nicht finden" -#: pg_dump.c:13229 +#: pg_dump.c:13147 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "ungültiger Typ »%c« für Zugriffsmethode »%s«" -#: pg_dump.c:13981 +#: pg_dump.c:13901 #, c-format msgid "unrecognized collation provider: %s" msgstr "unbekannter Sortierfolgen-Provider: %s" -#: pg_dump.c:14377 +#: pg_dump.c:14315 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "unbekannter aggfinalmodify-Wert für Aggregat »%s«" -#: pg_dump.c:14433 +#: pg_dump.c:14371 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "unbekannter aggmfinalmodify-Wert für Aggregat »%s«" -#: pg_dump.c:15155 +#: pg_dump.c:15093 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "unbekannter Objekttyp in den Vorgabeprivilegien: %d" -#: pg_dump.c:15173 +#: pg_dump.c:15111 #, c-format msgid "could not parse default ACL list (%s)" msgstr "konnte Vorgabe-ACL-Liste (%s) nicht interpretieren" -#: pg_dump.c:15258 +#: pg_dump.c:15196 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "konnte initiale GRANT-ACL-Liste (%s) oder initiale REVOKE-ACL-Liste (%s) für Objekt »%s« (%s) nicht interpretieren" -#: pg_dump.c:15266 +#: pg_dump.c:15204 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "konnte GRANT-ACL-Liste (%s) oder REVOKE-ACL-Liste (%s) für Objekt »%s« (%s) nicht interpretieren" -#: pg_dump.c:15781 +#: pg_dump.c:15719 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "Anfrage um die Definition der Sicht »%s« zu ermitteln lieferte keine Daten" -#: pg_dump.c:15784 +#: pg_dump.c:15722 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "Anfrage um die Definition der Sicht »%s« zu ermitteln lieferte mehr als eine Definition" -#: pg_dump.c:15791 +#: pg_dump.c:15729 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "Definition der Sicht »%s« scheint leer zu sein (Länge null)" -#: pg_dump.c:15875 +#: pg_dump.c:15813 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS wird nicht mehr unterstützt (Tabelle »%s«)" -#: pg_dump.c:16742 +#: pg_dump.c:16680 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "ungültige Spaltennummer %d in Tabelle »%s«" -#: pg_dump.c:16820 +#: pg_dump.c:16757 #, c-format msgid "could not parse index statistic columns" msgstr "konnte Indexstatistikspalten nicht interpretieren" -#: pg_dump.c:16822 +#: pg_dump.c:16759 #, c-format msgid "could not parse index statistic values" msgstr "konnte Indexstatistikwerte nicht interpretieren" -#: pg_dump.c:16824 +#: pg_dump.c:16761 #, c-format -msgid "mismatched number of columns and values for index stats" +msgid "mismatched number of columns and values for index statistics" msgstr "Anzahl Spalten und Werte für Indexstatistiken stimmt nicht überein" -#: pg_dump.c:17058 +#: pg_dump.c:16978 #, c-format msgid "missing index for constraint \"%s\"" msgstr "fehlender Index für Constraint »%s«" -#: pg_dump.c:17283 +#: pg_dump.c:17203 #, c-format msgid "unrecognized constraint type: %c" msgstr "unbekannter Constraint-Typ: %c" -#: pg_dump.c:17415 pg_dump.c:17638 +#: pg_dump.c:17335 pg_dump.c:17558 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" msgstr[0] "Anfrage nach Daten der Sequenz %s ergab %d Zeile (erwartete 1)" msgstr[1] "Anfrage nach Daten der Sequenz %s ergab %d Zeilen (erwartete 1)" -#: pg_dump.c:17449 +#: pg_dump.c:17369 #, c-format msgid "unrecognized sequence type: %s" msgstr "unbekannter Sequenztyp: %s" -#: pg_dump.c:17736 +#: pg_dump.c:17656 #, c-format msgid "unexpected tgtype value: %d" msgstr "unerwarteter tgtype-Wert: %d" -#: pg_dump.c:17810 +#: pg_dump.c:17730 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "fehlerhafte Argumentzeichenkette (%s) für Trigger »%s« von Tabelle »%s«" -#: pg_dump.c:18046 +#: pg_dump.c:17966 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "Anfrage nach Regel »%s« der Tabelle »%s« fehlgeschlagen: falsche Anzahl Zeilen zurückgegeben" -#: pg_dump.c:18208 +#: pg_dump.c:18128 #, c-format msgid "could not find referenced extension %u" msgstr "konnte referenzierte Erweiterung %u nicht finden" -#: pg_dump.c:18299 +#: pg_dump.c:18219 #, c-format msgid "could not parse extension configuration array" msgstr "konnte Erweiterungskonfigurations-Array nicht interpretieren" -#: pg_dump.c:18301 +#: pg_dump.c:18221 #, c-format msgid "could not parse extension condition array" msgstr "konnte Erweiterungsbedingungs-Array nicht interpretieren" -#: pg_dump.c:18303 +#: pg_dump.c:18223 #, c-format msgid "mismatched number of configurations and conditions for extension" msgstr "Anzahl Konfigurationen und Bedingungen für Erweiterung stimmt nicht überein" -#: pg_dump.c:18435 +#: pg_dump.c:18355 #, c-format msgid "reading dependency data" msgstr "lese Abhängigkeitsdaten" -#: pg_dump.c:18528 +#: pg_dump.c:18448 #, c-format msgid "no referencing object %u %u" msgstr "kein referenzierendes Objekt %u %u" -#: pg_dump.c:18539 +#: pg_dump.c:18459 #, c-format msgid "no referenced object %u %u" msgstr "kein referenziertes Objekt %u %u" -#: pg_dump.c:18942 -#, c-format -msgid "could not parse index collation name array" -msgstr "konnte Array der Indexsortierfolgennamen nicht interpretieren" - -#: pg_dump.c:18946 -#, c-format -msgid "could not parse index collation version array" -msgstr "konnte Array der Indexsortierfolgenversionen nicht interpretieren" - -#: pg_dump.c:18950 -#, c-format -msgid "mismatched number of collation names and versions for index" -msgstr "Anzahl Sortierfolgennamen und -versionen für Index stimmt nicht überein" - -#: pg_dump.c:18989 +#: pg_dump.c:18833 #, c-format msgid "could not parse reloptions array" msgstr "konnte reloptions-Array nicht interpretieren" diff --git a/src/bin/pg_dump/po/es.po b/src/bin/pg_dump/po/es.po index faf9ecd501c04..36b7a2e4ba436 100644 --- a/src/bin/pg_dump/po/es.po +++ b/src/bin/pg_dump/po/es.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_dump (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:46+0000\n" +"POT-Creation-Date: 2021-05-14 19:48+0000\n" "PO-Revision-Date: 2020-09-14 12:57-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -22,57 +22,58 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Poedit 2.3\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "precaución: " -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "no se pudo identificar el directorio actual: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "el binario «%s» no es válido" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "no se pudo leer el binario «%s»" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "no se pudo encontrar un «%s» para ejecutar" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "no se pudo cambiar al directorio «%s»: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "no se pudo leer el enlace simbólico «%s»: %m" -#: ../../common/exec.c:410 -#, c-format -msgid "pclose failed: %m" -msgstr "pclose falló: %m" +#: ../../common/exec.c:409 parallel.c:1614 +#, fuzzy, c-format +#| msgid "%s failed: %m" +msgid "%s() failed: %m" +msgstr "%s falló: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" msgstr "memoria agotada" @@ -117,212 +118,217 @@ msgstr "el proceso hijo fue terminado por una señal %d: %s" msgid "child process exited with unrecognized status %d" msgstr "el proceso hijo terminó con código no reconocido %d" -#: common.c:121 +#: common.c:124 #, c-format msgid "reading extensions" msgstr "leyendo las extensiones" -#: common.c:125 +#: common.c:128 #, c-format msgid "identifying extension members" msgstr "identificando miembros de extensión" -#: common.c:128 +#: common.c:131 #, c-format msgid "reading schemas" msgstr "leyendo esquemas" -#: common.c:138 +#: common.c:141 #, c-format msgid "reading user-defined tables" msgstr "leyendo las tablas definidas por el usuario" -#: common.c:145 +#: common.c:148 #, c-format msgid "reading user-defined functions" msgstr "leyendo las funciones definidas por el usuario" -#: common.c:150 +#: common.c:153 #, c-format msgid "reading user-defined types" msgstr "leyendo los tipos definidos por el usuario" -#: common.c:155 +#: common.c:158 #, c-format msgid "reading procedural languages" msgstr "leyendo los lenguajes procedurales" -#: common.c:158 +#: common.c:161 #, c-format msgid "reading user-defined aggregate functions" msgstr "leyendo las funciones de agregación definidas por el usuario" -#: common.c:161 +#: common.c:164 #, c-format msgid "reading user-defined operators" msgstr "leyendo los operadores definidos por el usuario" -#: common.c:165 +#: common.c:168 #, c-format msgid "reading user-defined access methods" msgstr "leyendo los métodos de acceso definidos por el usuario" -#: common.c:168 +#: common.c:171 #, c-format msgid "reading user-defined operator classes" msgstr "leyendo las clases de operadores definidos por el usuario" -#: common.c:171 +#: common.c:174 #, c-format msgid "reading user-defined operator families" msgstr "leyendo las familias de operadores definidas por el usuario" -#: common.c:174 +#: common.c:177 #, c-format msgid "reading user-defined text search parsers" msgstr "leyendo los procesadores (parsers) de búsqueda en texto definidos por el usuario" -#: common.c:177 +#: common.c:180 #, c-format msgid "reading user-defined text search templates" msgstr "leyendo las plantillas de búsqueda en texto definidas por el usuario" -#: common.c:180 +#: common.c:183 #, c-format msgid "reading user-defined text search dictionaries" msgstr "leyendo los diccionarios de búsqueda en texto definidos por el usuario" -#: common.c:183 +#: common.c:186 #, c-format msgid "reading user-defined text search configurations" msgstr "leyendo las configuraciones de búsqueda en texto definidas por el usuario" -#: common.c:186 +#: common.c:189 #, c-format msgid "reading user-defined foreign-data wrappers" msgstr "leyendo los conectores de datos externos definidos por el usuario" -#: common.c:189 +#: common.c:192 #, c-format msgid "reading user-defined foreign servers" msgstr "leyendo los servidores foráneos definidas por el usuario" -#: common.c:192 +#: common.c:195 #, c-format msgid "reading default privileges" msgstr "leyendo los privilegios por omisión" -#: common.c:195 +#: common.c:198 #, c-format msgid "reading user-defined collations" msgstr "leyendo los ordenamientos definidos por el usuario" -#: common.c:199 +#: common.c:202 #, c-format msgid "reading user-defined conversions" msgstr "leyendo las conversiones definidas por el usuario" -#: common.c:202 +#: common.c:205 #, c-format msgid "reading type casts" msgstr "leyendo conversiones de tipo" -#: common.c:205 +#: common.c:208 #, c-format msgid "reading transforms" msgstr "leyendo las transformaciones" -#: common.c:208 +#: common.c:211 #, c-format msgid "reading table inheritance information" msgstr "leyendo la información de herencia de las tablas" -#: common.c:211 +#: common.c:214 #, c-format msgid "reading event triggers" msgstr "leyendo los disparadores por eventos" -#: common.c:215 +#: common.c:218 #, c-format msgid "finding extension tables" msgstr "buscando tablas de extensión" -#: common.c:219 +#: common.c:222 #, c-format msgid "finding inheritance relationships" msgstr "buscando relaciones de herencia" -#: common.c:222 +#: common.c:225 #, c-format msgid "reading column info for interesting tables" msgstr "leyendo la información de columnas para las tablas interesantes" -#: common.c:225 +#: common.c:228 #, c-format msgid "flagging inherited columns in subtables" msgstr "marcando las columnas heredadas en las subtablas" -#: common.c:228 +#: common.c:231 #, c-format msgid "reading indexes" msgstr "leyendo los índices" -#: common.c:231 +#: common.c:234 #, c-format msgid "flagging indexes in partitioned tables" msgstr "marcando índices en las tablas particionadas" -#: common.c:234 +#: common.c:237 #, c-format msgid "reading extended statistics" msgstr "leyendo estadísticas extendidas" -#: common.c:237 +#: common.c:240 #, c-format msgid "reading constraints" msgstr "leyendo las restricciones" -#: common.c:240 +#: common.c:243 #, c-format msgid "reading triggers" msgstr "leyendo los disparadores (triggers)" -#: common.c:243 +#: common.c:246 #, c-format msgid "reading rewrite rules" msgstr "leyendo las reglas de reescritura" -#: common.c:246 +#: common.c:249 #, c-format msgid "reading policies" msgstr "leyendo políticas" -#: common.c:249 +#: common.c:252 #, c-format msgid "reading publications" msgstr "leyendo publicaciones" -#: common.c:252 +#: common.c:257 #, c-format msgid "reading publication membership" msgstr "leyendo membresía en publicaciones" -#: common.c:255 +#: common.c:260 #, c-format msgid "reading subscriptions" msgstr "leyendo las suscripciones" -#: common.c:1025 +#: common.c:338 +#, c-format +msgid "invalid number of parents %d for table \"%s\"" +msgstr "número de padres %d para la tabla «%s» no es válido" + +#: common.c:1100 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "falló la revisión de integridad, el OID %u del padre de la tabla «%s» (OID %u) no se encontró" -#: common.c:1067 +#: common.c:1142 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "no se pudo interpretar el arreglo numérico «%s»: demasiados números" -#: common.c:1082 +#: common.c:1157 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "no se pudo interpretar el arreglo numérico «%s»: carácter no válido en número" @@ -363,43 +369,45 @@ msgstr "no se pudo descomprimir datos: %s" msgid "could not close compression library: %s" msgstr "no se pudo cerrar la biblioteca de compresión: %s" -#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:557 pg_backup_tar.c:560 +#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:551 pg_backup_tar.c:554 #, c-format msgid "could not read from input file: %s" msgstr "no se pudo leer el archivo de entrada: %s" -#: compress_io.c:623 pg_backup_custom.c:646 pg_backup_directory.c:552 -#: pg_backup_tar.c:793 pg_backup_tar.c:816 +#: compress_io.c:623 pg_backup_custom.c:643 pg_backup_directory.c:552 +#: pg_backup_tar.c:787 pg_backup_tar.c:810 #, c-format msgid "could not read from input file: end of file" msgstr "no se pudo leer desde el archivo de entrada: fin de archivo" -#: parallel.c:267 -#, c-format -msgid "WSAStartup failed: %d" -msgstr "WSAStartup falló: %d" +#: parallel.c:254 +#, fuzzy, c-format +#| msgid "pgpipe: getsockname() failed: error code %d" +msgid "%s() failed: error code %d" +msgstr "pgpipe: getsockname() falló: código de error %d" -#: parallel.c:978 +#: parallel.c:964 #, c-format msgid "could not create communication channels: %m" msgstr "no se pudo crear los canales de comunicación: %m" -#: parallel.c:1035 +#: parallel.c:1021 #, c-format msgid "could not create worker process: %m" msgstr "no se pudo crear el proceso hijo: %m" -#: parallel.c:1165 -#, c-format -msgid "unrecognized command received from master: \"%s\"" +#: parallel.c:1151 +#, fuzzy, c-format +#| msgid "unrecognized command received from master: \"%s\"" +msgid "unrecognized command received from leader: \"%s\"" msgstr "orden no reconocida recibida del servidor: «%s»" -#: parallel.c:1208 parallel.c:1446 +#: parallel.c:1194 parallel.c:1432 #, c-format msgid "invalid message received from worker: \"%s\"" msgstr "mensaje no válido recibido del proceso hijo: «%s»" -#: parallel.c:1340 +#: parallel.c:1326 #, c-format msgid "" "could not obtain lock on relation \"%s\"\n" @@ -408,562 +416,567 @@ msgstr "" "no se pudo obtener un lock en la relación «%s»\n" "Esto normalmente significa que alguien solicitó un lock ACCESS EXCLUSIVE en la tabla después de que el proceso pg_dump padre había obtenido el lock ACCESS SHARE en la tabla." -#: parallel.c:1429 +#: parallel.c:1415 #, c-format msgid "a worker process died unexpectedly" msgstr "un proceso hijo murió inesperadamente" -#: parallel.c:1551 parallel.c:1669 +#: parallel.c:1537 parallel.c:1655 #, c-format msgid "could not write to the communication channel: %m" msgstr "no se pudo escribir al canal de comunicación: %m" -#: parallel.c:1628 -#, c-format -msgid "select() failed: %m" -msgstr "select() fallida: %m" - -#: parallel.c:1753 +#: parallel.c:1739 #, c-format msgid "pgpipe: could not create socket: error code %d" msgstr "pgpipe: no se pudo crear el socket: código de error %d" -#: parallel.c:1764 +#: parallel.c:1750 #, c-format msgid "pgpipe: could not bind: error code %d" msgstr "pgpipe: no se pudo enlazar: código de error %d" -#: parallel.c:1771 +#: parallel.c:1757 #, c-format msgid "pgpipe: could not listen: error code %d" msgstr "pgpipe: no se pudo escuchar: código de error %d" -#: parallel.c:1778 -#, c-format -msgid "pgpipe: getsockname() failed: error code %d" +#: parallel.c:1764 +#, fuzzy, c-format +#| msgid "pgpipe: getsockname() failed: error code %d" +msgid "pgpipe: %s() failed: error code %d" msgstr "pgpipe: getsockname() falló: código de error %d" -#: parallel.c:1789 +#: parallel.c:1775 #, c-format msgid "pgpipe: could not create second socket: error code %d" msgstr "pgpipe: no se pudo crear el segundo socket: código de error %d" -#: parallel.c:1798 +#: parallel.c:1784 #, c-format msgid "pgpipe: could not connect socket: error code %d" msgstr "pgpipe: no se pudo conectar el socket: código de error %d" -#: parallel.c:1807 +#: parallel.c:1793 #, c-format msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: no se pudo aceptar la conexión: código de error %d" -#: pg_backup_archiver.c:271 pg_backup_archiver.c:1591 +#: pg_backup_archiver.c:278 pg_backup_archiver.c:1577 #, c-format msgid "could not close output file: %m" msgstr "no se pudo cerrar el archivo de salida: %m" -#: pg_backup_archiver.c:315 pg_backup_archiver.c:319 +#: pg_backup_archiver.c:322 pg_backup_archiver.c:326 #, c-format msgid "archive items not in correct section order" msgstr "elementos del archivo no están en el orden correcto de secciones" -#: pg_backup_archiver.c:325 +#: pg_backup_archiver.c:332 #, c-format msgid "unexpected section code %d" msgstr "código de sección %d inesperado" -#: pg_backup_archiver.c:362 +#: pg_backup_archiver.c:369 #, c-format msgid "parallel restore is not supported with this archive file format" msgstr "la restauración en paralelo no está soportada con este formato de archivo" -#: pg_backup_archiver.c:366 +#: pg_backup_archiver.c:373 #, c-format msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump" msgstr "la restauración en paralelo no está soportada con archivos construidos con pg_dump anterior a 8.0" -#: pg_backup_archiver.c:384 +#: pg_backup_archiver.c:391 #, c-format msgid "cannot restore from compressed archive (compression not supported in this installation)" msgstr "no se puede reestablecer desde un archivo comprimido (la compresión no está soportada en esta instalación)" -#: pg_backup_archiver.c:401 +#: pg_backup_archiver.c:408 #, c-format msgid "connecting to database for restore" msgstr "conectando a la base de datos para reestablecimiento" -#: pg_backup_archiver.c:403 +#: pg_backup_archiver.c:410 #, c-format msgid "direct database connections are not supported in pre-1.3 archives" msgstr "las conexiones directas a la base de datos no están soportadas en archivadores pre-1.3" -#: pg_backup_archiver.c:448 +#: pg_backup_archiver.c:453 #, c-format msgid "implied data-only restore" msgstr "asumiendo reestablecimiento de sólo datos" -#: pg_backup_archiver.c:514 +#: pg_backup_archiver.c:519 #, c-format msgid "dropping %s %s" msgstr "eliminando %s %s" -#: pg_backup_archiver.c:609 +#: pg_backup_archiver.c:614 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "no se pudo encontrar dónde insertar IF EXISTS en la sentencia «%s»" -#: pg_backup_archiver.c:765 pg_backup_archiver.c:767 +#: pg_backup_archiver.c:770 pg_backup_archiver.c:772 #, c-format msgid "warning from original dump file: %s" msgstr "precaución desde el archivo original: %s" -#: pg_backup_archiver.c:782 +#: pg_backup_archiver.c:787 #, c-format msgid "creating %s \"%s.%s\"" msgstr "creando %s «%s.%s»" -#: pg_backup_archiver.c:785 +#: pg_backup_archiver.c:790 #, c-format msgid "creating %s \"%s\"" msgstr "creando %s «%s»" -#: pg_backup_archiver.c:842 +#: pg_backup_archiver.c:840 #, c-format msgid "connecting to new database \"%s\"" msgstr "conectando a nueva base de datos «%s»" -#: pg_backup_archiver.c:870 +#: pg_backup_archiver.c:867 #, c-format msgid "processing %s" msgstr "procesando %s" -#: pg_backup_archiver.c:890 +#: pg_backup_archiver.c:887 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "procesando datos de la tabla «%s.%s»" -#: pg_backup_archiver.c:952 +#: pg_backup_archiver.c:949 #, c-format msgid "executing %s %s" msgstr "ejecutando %s %s" -#: pg_backup_archiver.c:991 +#: pg_backup_archiver.c:988 #, c-format msgid "disabling triggers for %s" msgstr "deshabilitando disparadores (triggers) para %s" -#: pg_backup_archiver.c:1017 +#: pg_backup_archiver.c:1014 #, c-format msgid "enabling triggers for %s" msgstr "habilitando disparadores (triggers) para %s" -#: pg_backup_archiver.c:1045 +#: pg_backup_archiver.c:1042 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" msgstr "error interno -- WriteData no puede ser llamada fuera del contexto de una rutina DataDumper" -#: pg_backup_archiver.c:1228 +#: pg_backup_archiver.c:1225 #, c-format msgid "large-object output not supported in chosen format" msgstr "la extracción de objetos grandes no está soportada en el formato seleccionado" -#: pg_backup_archiver.c:1286 +#: pg_backup_archiver.c:1283 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" msgstr[0] "se reestableció %d objeto grande" msgstr[1] "se reestablecieron %d objetos grandes" -#: pg_backup_archiver.c:1307 pg_backup_tar.c:736 +#: pg_backup_archiver.c:1304 pg_backup_tar.c:730 #, c-format msgid "restoring large object with OID %u" msgstr "reestableciendo objeto grande con OID %u" -#: pg_backup_archiver.c:1319 +#: pg_backup_archiver.c:1316 #, c-format msgid "could not create large object %u: %s" msgstr "no se pudo crear el objeto grande %u: %s" -#: pg_backup_archiver.c:1324 pg_dump.c:3544 +#: pg_backup_archiver.c:1321 pg_dump.c:3693 #, c-format msgid "could not open large object %u: %s" msgstr "no se pudo abrir el objeto grande %u: %s" -#: pg_backup_archiver.c:1381 +#: pg_backup_archiver.c:1377 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "no se pudo abrir el archivo TOC «%s»: %m" -#: pg_backup_archiver.c:1421 +#: pg_backup_archiver.c:1405 #, c-format msgid "line ignored: %s" msgstr "línea ignorada: %s" -#: pg_backup_archiver.c:1428 +#: pg_backup_archiver.c:1412 #, c-format msgid "could not find entry for ID %d" msgstr "no se pudo encontrar una entrada para el ID %d" -#: pg_backup_archiver.c:1449 pg_backup_directory.c:222 +#: pg_backup_archiver.c:1435 pg_backup_directory.c:222 #: pg_backup_directory.c:598 #, c-format msgid "could not close TOC file: %m" msgstr "no se pudo cerrar el archivo TOC: %m" -#: pg_backup_archiver.c:1563 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_archiver.c:1549 pg_backup_custom.c:156 pg_backup_directory.c:332 #: pg_backup_directory.c:585 pg_backup_directory.c:648 -#: pg_backup_directory.c:667 pg_dumpall.c:484 +#: pg_backup_directory.c:667 pg_dumpall.c:485 #, c-format msgid "could not open output file \"%s\": %m" msgstr "no se pudo abrir el archivo de salida «%s»: %m" -#: pg_backup_archiver.c:1565 pg_backup_custom.c:162 +#: pg_backup_archiver.c:1551 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "no se pudo abrir el archivo de salida: %m" -#: pg_backup_archiver.c:1658 -#, c-format -msgid "wrote %lu byte of large object data (result = %lu)" -msgid_plural "wrote %lu bytes of large object data (result = %lu)" +#: pg_backup_archiver.c:1644 +#, fuzzy, c-format +#| msgid "wrote %lu byte of large object data (result = %lu)" +#| msgid_plural "wrote %lu bytes of large object data (result = %lu)" +msgid "wrote %zu byte of large object data (result = %d)" +msgid_plural "wrote %zu bytes of large object data (result = %d)" msgstr[0] "se escribió %lu byte de los datos del objeto grande (resultado = %lu)" msgstr[1] "se escribieron %lu bytes de los datos del objeto grande (resultado = %lu)" -#: pg_backup_archiver.c:1663 -#, c-format -msgid "could not write to large object (result: %lu, expected: %lu)" -msgstr "no se pudo escribir al objecto grande (resultado: %lu, esperado: %lu)" +#: pg_backup_archiver.c:1650 +#, fuzzy, c-format +#| msgid "could not create large object %u: %s" +msgid "could not write to large object: %s" +msgstr "no se pudo crear el objeto grande %u: %s" -#: pg_backup_archiver.c:1753 +#: pg_backup_archiver.c:1740 #, c-format msgid "while INITIALIZING:" msgstr "durante INICIALIZACIÓN:" -#: pg_backup_archiver.c:1758 +#: pg_backup_archiver.c:1745 #, c-format msgid "while PROCESSING TOC:" msgstr "durante PROCESAMIENTO DE TABLA DE CONTENIDOS:" -#: pg_backup_archiver.c:1763 +#: pg_backup_archiver.c:1750 #, c-format msgid "while FINALIZING:" msgstr "durante FINALIZACIÓN:" -#: pg_backup_archiver.c:1768 +#: pg_backup_archiver.c:1755 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "en entrada de la tabla de contenidos %d; %u %u %s %s %s" -#: pg_backup_archiver.c:1844 +#: pg_backup_archiver.c:1831 #, c-format msgid "bad dumpId" msgstr "dumpId incorrecto" -#: pg_backup_archiver.c:1865 +#: pg_backup_archiver.c:1852 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "dumpId de tabla incorrecto para elemento TABLE DATA" -#: pg_backup_archiver.c:1957 +#: pg_backup_archiver.c:1944 #, c-format msgid "unexpected data offset flag %d" msgstr "bandera de posición inesperada %d" -#: pg_backup_archiver.c:1970 +#: pg_backup_archiver.c:1957 #, c-format msgid "file offset in dump file is too large" msgstr "el posición en el archivo es demasiado grande" -#: pg_backup_archiver.c:2107 pg_backup_archiver.c:2117 +#: pg_backup_archiver.c:2095 pg_backup_archiver.c:2105 #, c-format msgid "directory name too long: \"%s\"" msgstr "nombre de directorio demasiado largo: «%s»" -#: pg_backup_archiver.c:2125 +#: pg_backup_archiver.c:2113 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" msgstr "el directorio «%s» no parece ser un archivador válido (no existe «toc.dat»)" -#: pg_backup_archiver.c:2133 pg_backup_custom.c:173 pg_backup_custom.c:812 +#: pg_backup_archiver.c:2121 pg_backup_custom.c:173 pg_backup_custom.c:807 #: pg_backup_directory.c:207 pg_backup_directory.c:394 #, c-format msgid "could not open input file \"%s\": %m" msgstr "no se pudo abrir el archivo de entrada «%s»: %m" -#: pg_backup_archiver.c:2140 pg_backup_custom.c:179 +#: pg_backup_archiver.c:2128 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "no se pudo abrir el archivo de entrada: %m" -#: pg_backup_archiver.c:2146 +#: pg_backup_archiver.c:2134 #, c-format msgid "could not read input file: %m" msgstr "no se pudo leer el archivo de entrada: %m" -#: pg_backup_archiver.c:2148 +#: pg_backup_archiver.c:2136 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "el archivo de entrada es demasiado corto (leidos %lu, esperados 5)" -#: pg_backup_archiver.c:2233 +#: pg_backup_archiver.c:2168 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "el archivo de entrada parece ser un volcado de texto. Por favor use psql." -#: pg_backup_archiver.c:2239 +#: pg_backup_archiver.c:2174 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "el archivo de entrada no parece ser un archivador válido (¿demasiado corto?)" -#: pg_backup_archiver.c:2245 +#: pg_backup_archiver.c:2180 #, c-format msgid "input file does not appear to be a valid archive" msgstr "el archivo de entrada no parece ser un archivador válido" -#: pg_backup_archiver.c:2265 +#: pg_backup_archiver.c:2189 #, c-format msgid "could not close input file: %m" msgstr "no se pudo cerrar el archivo de entrada: %m" -#: pg_backup_archiver.c:2379 +#: pg_backup_archiver.c:2306 #, c-format msgid "unrecognized file format \"%d\"" msgstr "formato de archivo no reconocido «%d»" -#: pg_backup_archiver.c:2461 pg_backup_archiver.c:4473 +#: pg_backup_archiver.c:2388 pg_backup_archiver.c:4422 #, c-format msgid "finished item %d %s %s" msgstr "terminó el elemento %d %s %s" -#: pg_backup_archiver.c:2465 pg_backup_archiver.c:4486 +#: pg_backup_archiver.c:2392 pg_backup_archiver.c:4435 #, c-format msgid "worker process failed: exit code %d" msgstr "el proceso hijo falló: código de salida %d" -#: pg_backup_archiver.c:2585 +#: pg_backup_archiver.c:2512 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "la entrada con ID %d está fuera de rango -- tal vez la tabla de contenido está corrupta" -#: pg_backup_archiver.c:2652 +#: pg_backup_archiver.c:2579 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "restaurar tablas WITH OIDS ya no está soportado" -#: pg_backup_archiver.c:2734 +#: pg_backup_archiver.c:2663 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "no se reconoce la codificación: «%s»" -#: pg_backup_archiver.c:2739 +#: pg_backup_archiver.c:2668 #, c-format msgid "invalid ENCODING item: %s" msgstr "elemento ENCODING no válido: %s" -#: pg_backup_archiver.c:2757 +#: pg_backup_archiver.c:2686 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "elemento STDSTRINGS no válido: %s" -#: pg_backup_archiver.c:2782 +#: pg_backup_archiver.c:2717 +#, fuzzy, c-format +#| msgid "invalid STDSTRINGS item: %s" +msgid "invalid TOASTCOMPRESSION item: %s" +msgstr "elemento STDSTRINGS no válido: %s" + +#: pg_backup_archiver.c:2734 #, c-format msgid "schema \"%s\" not found" msgstr "esquema «%s» no encontrado" -#: pg_backup_archiver.c:2789 +#: pg_backup_archiver.c:2741 #, c-format msgid "table \"%s\" not found" msgstr "tabla «%s» no encontrada" -#: pg_backup_archiver.c:2796 +#: pg_backup_archiver.c:2748 #, c-format msgid "index \"%s\" not found" msgstr "índice «%s» no encontrado" -#: pg_backup_archiver.c:2803 +#: pg_backup_archiver.c:2755 #, c-format msgid "function \"%s\" not found" msgstr "función «%s» no encontrada" -#: pg_backup_archiver.c:2810 +#: pg_backup_archiver.c:2762 #, c-format msgid "trigger \"%s\" not found" msgstr "disparador «%s» no encontrado" -#: pg_backup_archiver.c:3202 +#: pg_backup_archiver.c:3160 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "no se pudo establecer el usuario de sesión a «%s»: %s" -#: pg_backup_archiver.c:3341 +#: pg_backup_archiver.c:3292 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "no se pudo definir search_path a «%s»: %s" -#: pg_backup_archiver.c:3403 +#: pg_backup_archiver.c:3354 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "no se pudo definir default_tablespace a %s: %s" -#: pg_backup_archiver.c:3448 +#: pg_backup_archiver.c:3399 #, c-format msgid "could not set default_table_access_method: %s" msgstr "no se pudo definir default_table_access_method: %s" -#: pg_backup_archiver.c:3540 pg_backup_archiver.c:3698 +#: pg_backup_archiver.c:3491 pg_backup_archiver.c:3649 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "no se sabe cómo establecer el dueño para el objeto de tipo «%s»" -#: pg_backup_archiver.c:3802 +#: pg_backup_archiver.c:3753 #, c-format msgid "did not find magic string in file header" msgstr "no se encontró la cadena mágica en el encabezado del archivo" -#: pg_backup_archiver.c:3815 +#: pg_backup_archiver.c:3767 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "versión no soportada (%d.%d) en el encabezado del archivo" -#: pg_backup_archiver.c:3820 +#: pg_backup_archiver.c:3772 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "revisión de integridad en el tamaño del entero (%lu) falló" -#: pg_backup_archiver.c:3824 +#: pg_backup_archiver.c:3776 #, c-format msgid "archive was made on a machine with larger integers, some operations might fail" msgstr "el archivador fue hecho en una máquina con enteros más grandes, algunas operaciones podrían fallar" -#: pg_backup_archiver.c:3834 +#: pg_backup_archiver.c:3786 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "el formato esperado (%d) difiere del formato encontrado en el archivo (%d)" -#: pg_backup_archiver.c:3850 +#: pg_backup_archiver.c:3801 #, c-format msgid "archive is compressed, but this installation does not support compression -- no data will be available" msgstr "el archivador está comprimido, pero esta instalación no soporta compresión -- no habrá datos disponibles" -#: pg_backup_archiver.c:3868 +#: pg_backup_archiver.c:3819 #, c-format msgid "invalid creation date in header" msgstr "la fecha de creación en el encabezado no es válida" -#: pg_backup_archiver.c:3996 +#: pg_backup_archiver.c:3947 #, c-format msgid "processing item %d %s %s" msgstr "procesando el elemento %d %s %s" -#: pg_backup_archiver.c:4075 +#: pg_backup_archiver.c:4026 #, c-format msgid "entering main parallel loop" msgstr "ingresando al bucle paralelo principal" -#: pg_backup_archiver.c:4086 +#: pg_backup_archiver.c:4037 #, c-format msgid "skipping item %d %s %s" msgstr "saltando el elemento %d %s %s" -#: pg_backup_archiver.c:4095 +#: pg_backup_archiver.c:4046 #, c-format msgid "launching item %d %s %s" msgstr "lanzando el elemento %d %s %s" -#: pg_backup_archiver.c:4149 +#: pg_backup_archiver.c:4100 #, c-format msgid "finished main parallel loop" msgstr "terminó el bucle paralelo principal" -#: pg_backup_archiver.c:4187 +#: pg_backup_archiver.c:4136 #, c-format msgid "processing missed item %d %s %s" msgstr "procesando el elemento saltado %d %s %s" -#: pg_backup_archiver.c:4792 +#: pg_backup_archiver.c:4741 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "la tabla «%s» no pudo ser creada, no se recuperarán sus datos" -#: pg_backup_custom.c:378 pg_backup_null.c:147 +#: pg_backup_custom.c:376 pg_backup_null.c:147 #, c-format msgid "invalid OID for large object" msgstr "OID no válido para objeto grande" -#: pg_backup_custom.c:441 pg_backup_custom.c:507 pg_backup_custom.c:632 -#: pg_backup_custom.c:870 pg_backup_tar.c:1086 pg_backup_tar.c:1091 +#: pg_backup_custom.c:439 pg_backup_custom.c:505 pg_backup_custom.c:629 +#: pg_backup_custom.c:865 pg_backup_tar.c:1080 pg_backup_tar.c:1085 #, c-format msgid "error during file seek: %m" msgstr "error durante el posicionamiento (seek) en el archivo: %m" -#: pg_backup_custom.c:480 +#: pg_backup_custom.c:478 #, c-format msgid "data block %d has wrong seek position" msgstr "el bloque de datos %d tiene una posición de búsqueda incorrecta" -#: pg_backup_custom.c:497 +#: pg_backup_custom.c:495 #, c-format msgid "unrecognized data block type (%d) while searching archive" msgstr "tipo de bloque de datos (%d) no conocido al buscar en el archivador" -#: pg_backup_custom.c:519 +#: pg_backup_custom.c:517 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to non-seekable input file" msgstr "no se pudo encontrar el bloque con ID %d en archivo -- posiblemente debido a una petición de restauración fuera de orden, la que no puede ser completada debido a que en el archivo de entrada no es reposicionable (seekable)" -#: pg_backup_custom.c:524 +#: pg_backup_custom.c:522 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive" msgstr "no se pudo encontrar el bloque con ID %d en archivo -- posiblemente el archivo está corrupto" -#: pg_backup_custom.c:531 +#: pg_backup_custom.c:529 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d" msgstr "se encontró un bloque no esperado ID (%d) mientras se leían los datos -- se esperaba %d" -#: pg_backup_custom.c:545 +#: pg_backup_custom.c:543 #, c-format msgid "unrecognized data block type %d while restoring archive" msgstr "se encontró un bloque tipo %d no reconocido al restablecer el archivador" -#: pg_backup_custom.c:648 +#: pg_backup_custom.c:645 #, c-format msgid "could not read from input file: %m" msgstr "no se pudo leer el archivo de entrada: %m" -#: pg_backup_custom.c:751 pg_backup_custom.c:803 pg_backup_custom.c:948 -#: pg_backup_tar.c:1089 +#: pg_backup_custom.c:746 pg_backup_custom.c:798 pg_backup_custom.c:943 +#: pg_backup_tar.c:1083 #, c-format msgid "could not determine seek position in archive file: %m" msgstr "no se pudo determinar la posición (seek) en el archivo del archivador: %m" -#: pg_backup_custom.c:767 pg_backup_custom.c:807 +#: pg_backup_custom.c:762 pg_backup_custom.c:802 #, c-format msgid "could not close archive file: %m" msgstr "no se pudo cerrar el archivo del archivador: %m" -#: pg_backup_custom.c:790 +#: pg_backup_custom.c:785 #, c-format msgid "can only reopen input archives" msgstr "sólo se pueden reabrir archivos de entrada" -#: pg_backup_custom.c:797 +#: pg_backup_custom.c:792 #, c-format msgid "parallel restore from standard input is not supported" msgstr "la restauración en paralelo desde entrada estándar (stdin) no está soportada" -#: pg_backup_custom.c:799 +#: pg_backup_custom.c:794 #, c-format msgid "parallel restore from non-seekable file is not supported" msgstr "la restauración en paralelo desde un archivo no posicionable no está soportada" -#: pg_backup_custom.c:815 +#: pg_backup_custom.c:810 #, c-format msgid "could not set seek position in archive file: %m" msgstr "no se pudo posicionar (seek) en el archivo del archivador: %m" -#: pg_backup_custom.c:894 +#: pg_backup_custom.c:889 #, c-format msgid "compressor active" msgstr "compresor activo" @@ -973,112 +986,92 @@ msgstr "compresor activo" msgid "could not get server_version from libpq" msgstr "no se pudo obtener server_version desde libpq" -#: pg_backup_db.c:53 pg_dumpall.c:1826 +#: pg_backup_db.c:53 pg_dumpall.c:1821 #, c-format msgid "server version: %s; %s version: %s" msgstr "versión del servidor: %s; versión de %s: %s" -#: pg_backup_db.c:55 pg_dumpall.c:1828 +#: pg_backup_db.c:55 pg_dumpall.c:1823 #, c-format msgid "aborting because of server version mismatch" msgstr "abortando debido a que no coincide la versión del servidor" -#: pg_backup_db.c:138 +#: pg_backup_db.c:124 #, c-format -msgid "connecting to database \"%s\" as user \"%s\"" -msgstr "conectandose a la base de datos \"%s\" como el usuario «%s»" +msgid "already connected to a database" +msgstr "ya está conectado a una base de datos" -#: pg_backup_db.c:145 pg_backup_db.c:194 pg_backup_db.c:255 pg_backup_db.c:296 -#: pg_dumpall.c:1651 pg_dumpall.c:1764 +#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1650 pg_dumpall.c:1761 msgid "Password: " msgstr "Contraseña: " -#: pg_backup_db.c:177 -#, c-format -msgid "could not reconnect to database" -msgstr "no se pudo hacer la reconexión a la base de datos" - -#: pg_backup_db.c:182 -#, c-format -msgid "could not reconnect to database: %s" -msgstr "no se pudo hacer la reconexión a la base de datos: %s" - -#: pg_backup_db.c:198 -#, c-format -msgid "connection needs password" -msgstr "la conexión necesita contraseña" - -#: pg_backup_db.c:249 -#, c-format -msgid "already connected to a database" -msgstr "ya está conectado a una base de datos" - -#: pg_backup_db.c:288 +#: pg_backup_db.c:174 #, c-format msgid "could not connect to database" msgstr "no se pudo hacer la conexión a la base de datos" -#: pg_backup_db.c:304 -#, c-format -msgid "connection to database \"%s\" failed: %s" -msgstr "falló la conexión a la base de datos «%s»: %s" +#: pg_backup_db.c:191 +#, fuzzy, c-format +#| msgid "collation failed: %s" +msgid "reconnection failed: %s" +msgstr "el ordenamiento falló: %s" -#: pg_backup_db.c:376 pg_dumpall.c:1684 +#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1681 pg_dumpall.c:1771 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:383 pg_dumpall.c:1889 pg_dumpall.c:1912 +#: pg_backup_db.c:276 pg_dumpall.c:1884 pg_dumpall.c:1907 #, c-format msgid "query failed: %s" msgstr "la consulta falló: %s" -#: pg_backup_db.c:385 pg_dumpall.c:1890 pg_dumpall.c:1913 +#: pg_backup_db.c:278 pg_dumpall.c:1885 pg_dumpall.c:1908 #, c-format msgid "query was: %s" msgstr "la consulta era: %s" -#: pg_backup_db.c:426 +#: pg_backup_db.c:319 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" msgstr[0] "la consulta regresó %d fila en lugar de una: %s" msgstr[1] "la consulta regresó %d filas en lugar de una: %s" -#: pg_backup_db.c:462 +#: pg_backup_db.c:355 #, c-format msgid "%s: %sCommand was: %s" msgstr "%s: %sLa orden era: %s" -#: pg_backup_db.c:518 pg_backup_db.c:592 pg_backup_db.c:599 +#: pg_backup_db.c:411 pg_backup_db.c:485 pg_backup_db.c:492 msgid "could not execute query" msgstr "no se pudo ejecutar la consulta" -#: pg_backup_db.c:571 +#: pg_backup_db.c:464 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "PQputCopyData regresó un error: %s" -#: pg_backup_db.c:620 +#: pg_backup_db.c:513 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "PQputCopyEnd regresó un error: %s" -#: pg_backup_db.c:626 +#: pg_backup_db.c:519 #, c-format msgid "COPY failed for table \"%s\": %s" msgstr "COPY falló para la tabla «%s»: %s" -#: pg_backup_db.c:632 pg_dump.c:1984 +#: pg_backup_db.c:525 pg_dump.c:2077 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "resultados extra inesperados durante el COPY de la tabla «%s»" -#: pg_backup_db.c:644 +#: pg_backup_db.c:537 msgid "could not start database transaction" msgstr "no se pudo iniciar la transacción en la base de datos" -#: pg_backup_db.c:652 +#: pg_backup_db.c:545 msgid "could not commit database transaction" msgstr "no se pudo terminar la transacción a la base de datos" @@ -1158,7 +1151,7 @@ msgstr "no se pudo abrir el archivo de tabla de contenido «%s» para escribir: msgid "could not open TOC file for output: %m" msgstr "no se pudo abrir la tabla de contenido para escribir: %m" -#: pg_backup_tar.c:203 pg_backup_tar.c:358 +#: pg_backup_tar.c:203 pg_backup_tar.c:352 #, c-format msgid "compression is not supported by tar archive format" msgstr "la compresión no está soportada por el formato de salida tar" @@ -1173,64 +1166,64 @@ msgstr "no se pudo abrir el archivo de tabla de contenido «%s» para leer: %m" msgid "could not open TOC file for input: %m" msgstr "no se pudo abrir la tabla de contenido para leer: %m" -#: pg_backup_tar.c:344 +#: pg_backup_tar.c:338 #, c-format msgid "could not find file \"%s\" in archive" msgstr "no se pudo encontrar el archivo «%s» en el archivador" -#: pg_backup_tar.c:410 +#: pg_backup_tar.c:404 #, c-format msgid "could not generate temporary file name: %m" msgstr "no se pudo generar el nombre de archivo temporal: %m" -#: pg_backup_tar.c:421 +#: pg_backup_tar.c:415 #, c-format msgid "could not open temporary file" msgstr "no se pudo abrir archivo temporal" -#: pg_backup_tar.c:448 +#: pg_backup_tar.c:442 #, c-format msgid "could not close tar member" msgstr "no se pudo cerrar miembro del archivo tar" -#: pg_backup_tar.c:691 +#: pg_backup_tar.c:685 #, c-format msgid "unexpected COPY statement syntax: \"%s\"" msgstr "sintaxis de sentencia COPY inesperada: «%s»" -#: pg_backup_tar.c:958 +#: pg_backup_tar.c:952 #, c-format msgid "invalid OID for large object (%u)" msgstr "el OID del objeto grande no es válido (%u)" -#: pg_backup_tar.c:1105 +#: pg_backup_tar.c:1099 #, c-format msgid "could not close temporary file: %m" msgstr "no se pudo abrir archivo temporal: %m" -#: pg_backup_tar.c:1114 +#: pg_backup_tar.c:1108 #, c-format msgid "actual file length (%s) does not match expected (%s)" msgstr "el tamaño real del archivo (%s) no coincide con el esperado (%s)" -#: pg_backup_tar.c:1171 pg_backup_tar.c:1201 +#: pg_backup_tar.c:1165 pg_backup_tar.c:1196 #, c-format msgid "could not find header for file \"%s\" in tar archive" msgstr "no se pudo encontrar el encabezado para el archivo «%s» en el archivo tar" -#: pg_backup_tar.c:1189 +#: pg_backup_tar.c:1183 #, c-format msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file." msgstr "la extracción de datos fuera de orden no está soportada en este formato: se requiere «%s», pero viene antes de «%s» en el archivador." -#: pg_backup_tar.c:1234 +#: pg_backup_tar.c:1230 #, c-format msgid "incomplete tar header found (%lu byte)" msgid_plural "incomplete tar header found (%lu bytes)" msgstr[0] "se encontró un encabezado incompleto (%lu byte)" msgstr[1] "se encontró un encabezado incompleto (%lu bytes)" -#: pg_backup_tar.c:1285 +#: pg_backup_tar.c:1281 #, c-format msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s" msgstr "se encontró un encabezado corrupto en %s (esperado %d, calculado %d) en la posición %s" @@ -1240,9 +1233,9 @@ msgstr "se encontró un encabezado corrupto en %s (esperado %d, calculado %d) en msgid "unrecognized section name: \"%s\"" msgstr "nombre de sección «%s» no reconocido" -#: pg_backup_utils.c:55 pg_dump.c:608 pg_dump.c:625 pg_dumpall.c:338 -#: pg_dumpall.c:348 pg_dumpall.c:357 pg_dumpall.c:366 pg_dumpall.c:374 -#: pg_dumpall.c:388 pg_dumpall.c:464 pg_restore.c:284 pg_restore.c:300 +#: pg_backup_utils.c:55 pg_dump.c:623 pg_dump.c:640 pg_dumpall.c:339 +#: pg_dumpall.c:349 pg_dumpall.c:358 pg_dumpall.c:367 pg_dumpall.c:375 +#: pg_dumpall.c:389 pg_dumpall.c:465 pg_restore.c:284 pg_restore.c:300 #: pg_restore.c:318 #, c-format msgid "Try \"%s --help\" for more information.\n" @@ -1253,72 +1246,72 @@ msgstr "Prueba «%s --help» para más información.\n" msgid "out of on_exit_nicely slots" msgstr "elementos on_exit_nicely agotados" -#: pg_dump.c:534 +#: pg_dump.c:549 #, c-format msgid "compression level must be in range 0..9" msgstr "nivel de compresión debe estar en el rango 0..9" -#: pg_dump.c:572 +#: pg_dump.c:587 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_floats_digits debe estar en el rango -15..3" -#: pg_dump.c:595 +#: pg_dump.c:610 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "rows-per-insert debe estar en el rango %d..%d" -#: pg_dump.c:623 pg_dumpall.c:346 pg_restore.c:298 +#: pg_dump.c:638 pg_dumpall.c:347 pg_restore.c:298 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: pg_dump.c:644 pg_restore.c:327 +#: pg_dump.c:659 pg_restore.c:327 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "las opciones -s/--schema-only y -a/--data-only no pueden usarse juntas" -#: pg_dump.c:649 +#: pg_dump.c:664 #, c-format msgid "options -s/--schema-only and --include-foreign-data cannot be used together" msgstr "las opciones -s/--schema-only y --include-foreign-data no pueden usarse juntas" -#: pg_dump.c:652 +#: pg_dump.c:667 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" msgstr "la opción --include-foreign-data no está soportado con respaldo en paralelo" -#: pg_dump.c:656 pg_restore.c:333 +#: pg_dump.c:671 pg_restore.c:333 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "las opciones -c/--clean y -a/--data-only no pueden usarse juntas" -#: pg_dump.c:661 pg_dumpall.c:381 pg_restore.c:382 +#: pg_dump.c:676 pg_dumpall.c:382 pg_restore.c:382 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "la opción --if-exists requiere la opción -c/--clean" -#: pg_dump.c:668 +#: pg_dump.c:683 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "la opción --on-conflict-do-nothing requiere la opción --inserts, --rows-per-insert o --column-inserts" -#: pg_dump.c:690 +#: pg_dump.c:705 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "la compresión solicitada no está soportada en esta instalación -- el archivador será sin compresión" -#: pg_dump.c:711 pg_restore.c:349 +#: pg_dump.c:726 pg_restore.c:349 #, c-format msgid "invalid number of parallel jobs" msgstr "número no válido de trabajos paralelos" -#: pg_dump.c:715 +#: pg_dump.c:730 #, c-format msgid "parallel backup only supported by the directory format" msgstr "el volcado en paralelo sólo está soportado por el formato «directory»" -#: pg_dump.c:770 +#: pg_dump.c:785 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1328,27 +1321,33 @@ msgstr "" "Los snapshots sincronizados no están soportados por esta versión del servidor.\n" "Ejecute con --no-synchronized-snapshots si no los necesita." -#: pg_dump.c:776 +#: pg_dump.c:791 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Los snapshot exportados no están soportados por esta versión de servidor." -#: pg_dump.c:788 +#: pg_dump.c:803 #, c-format msgid "last built-in OID is %u" msgstr "el último OID interno es %u" -#: pg_dump.c:797 +#: pg_dump.c:812 #, c-format msgid "no matching schemas were found" msgstr "no se encontraron esquemas coincidentes" -#: pg_dump.c:811 +#: pg_dump.c:826 #, c-format msgid "no matching tables were found" msgstr "no se encontraron tablas coincidentes" -#: pg_dump.c:986 +#: pg_dump.c:848 +#, fuzzy, c-format +#| msgid "no matching tables were found" +msgid "no matching extensions were found" +msgstr "no se encontraron tablas coincidentes" + +#: pg_dump.c:1020 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1357,17 +1356,17 @@ msgstr "" "%s extrae una base de datos en formato de texto o en otros formatos.\n" "\n" -#: pg_dump.c:987 pg_dumpall.c:617 pg_restore.c:462 +#: pg_dump.c:1021 pg_dumpall.c:618 pg_restore.c:462 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_dump.c:988 +#: pg_dump.c:1022 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPCIÓN]... [NOMBREDB]\n" -#: pg_dump.c:990 pg_dumpall.c:620 pg_restore.c:465 +#: pg_dump.c:1024 pg_dumpall.c:621 pg_restore.c:465 #, c-format msgid "" "\n" @@ -1376,12 +1375,12 @@ msgstr "" "\n" "Opciones generales:\n" -#: pg_dump.c:991 +#: pg_dump.c:1025 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=ARCHIVO nombre del archivo o directorio de salida\n" -#: pg_dump.c:992 +#: pg_dump.c:1026 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1390,42 +1389,42 @@ msgstr "" " -F, --format=c|d|t|p Formato del archivo de salida (c=personalizado, \n" " d=directorio, t=tar, p=texto (por omisión))\n" -#: pg_dump.c:994 +#: pg_dump.c:1028 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM máximo de procesos paralelos para volcar\n" -#: pg_dump.c:995 pg_dumpall.c:622 +#: pg_dump.c:1029 pg_dumpall.c:623 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose modo verboso\n" -#: pg_dump.c:996 pg_dumpall.c:623 +#: pg_dump.c:1030 pg_dumpall.c:624 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de version y salir\n" -#: pg_dump.c:997 +#: pg_dump.c:1031 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 nivel de compresión para formatos comprimidos\n" -#: pg_dump.c:998 pg_dumpall.c:624 +#: pg_dump.c:1032 pg_dumpall.c:625 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr " --lock-wait-timeout=SEGS espera a lo más SEGS segundos obtener un lock\n" -#: pg_dump.c:999 pg_dumpall.c:651 +#: pg_dump.c:1033 pg_dumpall.c:652 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync no esperar que los cambios se sincronicen a disco\n" -#: pg_dump.c:1000 pg_dumpall.c:625 +#: pg_dump.c:1034 pg_dumpall.c:626 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: pg_dump.c:1002 pg_dumpall.c:626 +#: pg_dump.c:1036 pg_dumpall.c:627 #, c-format msgid "" "\n" @@ -1434,49 +1433,55 @@ msgstr "" "\n" "Opciones que controlan el contenido de la salida:\n" -#: pg_dump.c:1003 pg_dumpall.c:627 +#: pg_dump.c:1037 pg_dumpall.c:628 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only extrae sólo los datos, no el esquema\n" -#: pg_dump.c:1004 +#: pg_dump.c:1038 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs incluye objetos grandes en la extracción\n" -#: pg_dump.c:1005 +#: pg_dump.c:1039 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs excluye objetos grandes en la extracción\n" -#: pg_dump.c:1006 pg_restore.c:476 +#: pg_dump.c:1040 pg_restore.c:476 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr " -c, --clean tira (drop) la base de datos antes de crearla\n" -#: pg_dump.c:1007 +#: pg_dump.c:1041 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr "" " -C, --create incluye órdenes para crear la base de datos\n" " en la extracción\n" -#: pg_dump.c:1008 pg_dumpall.c:629 +#: pg_dump.c:1042 +#, fuzzy, c-format +#| msgid " -t, --table=PATTERN dump the specified table(s) only\n" +msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" +msgstr " -t, --table=PATRÓN extrae sólo la o las tablas nombradas\n" + +#: pg_dump.c:1043 pg_dumpall.c:630 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=CODIF extrae los datos con la codificación CODIF\n" -#: pg_dump.c:1009 +#: pg_dump.c:1044 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=PATRÓN extrae sólo el o los esquemas nombrados\n" -#: pg_dump.c:1010 +#: pg_dump.c:1045 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=PATRÓN NO extrae el o los esquemas nombrados\n" -#: pg_dump.c:1011 +#: pg_dump.c:1046 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1485,58 +1490,58 @@ msgstr "" " -O, --no-owner en formato de sólo texto, no reestablece\n" " los dueños de los objetos\n" -#: pg_dump.c:1013 pg_dumpall.c:633 +#: pg_dump.c:1048 pg_dumpall.c:634 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only extrae sólo el esquema, no los datos\n" -#: pg_dump.c:1014 +#: pg_dump.c:1049 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr " -S, --superuser=NAME superusuario a utilizar en el volcado de texto\n" -#: pg_dump.c:1015 +#: pg_dump.c:1050 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=PATRÓN extrae sólo la o las tablas nombradas\n" -#: pg_dump.c:1016 +#: pg_dump.c:1051 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=PATRÓN NO extrae la o las tablas nombradas\n" -#: pg_dump.c:1017 pg_dumpall.c:636 +#: pg_dump.c:1052 pg_dumpall.c:637 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges no extrae los privilegios (grant/revoke)\n" -#: pg_dump.c:1018 pg_dumpall.c:637 +#: pg_dump.c:1053 pg_dumpall.c:638 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade sólo para uso de utilidades de upgrade\n" -#: pg_dump.c:1019 pg_dumpall.c:638 +#: pg_dump.c:1054 pg_dumpall.c:639 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr "" " --column-inserts extrae los datos usando INSERT con nombres\n" " de columnas\n" -#: pg_dump.c:1020 pg_dumpall.c:639 +#: pg_dump.c:1055 pg_dumpall.c:640 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr "" " --disable-dollar-quoting deshabilita el uso de «delimitadores de dólar»,\n" " usa delimitadores de cadena estándares\n" -#: pg_dump.c:1021 pg_dumpall.c:640 pg_restore.c:493 +#: pg_dump.c:1056 pg_dumpall.c:641 pg_restore.c:493 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr "" " --disable-triggers deshabilita los disparadores (triggers) durante el\n" " restablecimiento de la extracción de sólo-datos\n" -#: pg_dump.c:1022 +#: pg_dump.c:1057 #, c-format msgid "" " --enable-row-security enable row security (dump only content user has\n" @@ -1545,22 +1550,22 @@ msgstr "" " --enable-row-security activa seguridad de filas (volcar sólo el\n" " contenido al que el usuario tiene acceso)\n" -#: pg_dump.c:1024 +#: pg_dump.c:1059 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=PATRÓN NO extrae los datos de la(s) tablas nombradas\n" -#: pg_dump.c:1025 pg_dumpall.c:642 +#: pg_dump.c:1060 pg_dumpall.c:643 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=NUM usa este valor para extra_float_digits\n" -#: pg_dump.c:1026 pg_dumpall.c:643 pg_restore.c:495 +#: pg_dump.c:1061 pg_dumpall.c:644 pg_restore.c:495 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists usa IF EXISTS al eliminar objetos\n" -#: pg_dump.c:1027 +#: pg_dump.c:1062 #, c-format msgid "" " --include-foreign-data=PATTERN\n" @@ -1571,90 +1576,96 @@ msgstr "" " incluye datos de tablas foráneas en servidores\n" " que coinciden con PATRÓN\n" -#: pg_dump.c:1030 pg_dumpall.c:644 +#: pg_dump.c:1065 pg_dumpall.c:645 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts extrae los datos usando INSERT, en vez de COPY\n" -#: pg_dump.c:1031 pg_dumpall.c:645 +#: pg_dump.c:1066 pg_dumpall.c:646 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root cargar particiones a través de tabla raíz\n" -#: pg_dump.c:1032 pg_dumpall.c:646 +#: pg_dump.c:1067 pg_dumpall.c:647 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments no volcar los comentarios\n" -#: pg_dump.c:1033 pg_dumpall.c:647 +#: pg_dump.c:1068 pg_dumpall.c:648 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications no volcar las publicaciones\n" -#: pg_dump.c:1034 pg_dumpall.c:649 +#: pg_dump.c:1069 pg_dumpall.c:650 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels no volcar asignaciones de etiquetas de seguridad\n" -#: pg_dump.c:1035 pg_dumpall.c:650 +#: pg_dump.c:1070 pg_dumpall.c:651 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions no volcar las suscripciones\n" -#: pg_dump.c:1036 +#: pg_dump.c:1071 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr "" " --no-synchronized-snapshots no usar snapshots sincronizados en trabajos\n" " en paralelo\n" -#: pg_dump.c:1037 pg_dumpall.c:652 +#: pg_dump.c:1072 pg_dumpall.c:653 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces no volcar asignaciones de tablespace\n" -#: pg_dump.c:1038 pg_dumpall.c:653 +#: pg_dump.c:1073 +#, fuzzy, c-format +#| msgid " --no-comments do not dump comments\n" +msgid " --no-toast-compression do not dump TOAST compression methods\n" +msgstr " --no-comments no volcar los comentarios\n" + +#: pg_dump.c:1074 pg_dumpall.c:654 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data no volcar datos de tablas unlogged\n" -#: pg_dump.c:1039 pg_dumpall.c:654 +#: pg_dump.c:1075 pg_dumpall.c:655 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" msgstr " --on-conflict-do-nothing agregar ON CONFLICT DO NOTHING a órdenes INSERT\n" -#: pg_dump.c:1040 pg_dumpall.c:655 +#: pg_dump.c:1076 pg_dumpall.c:656 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers entrecomilla todos los identificadores, incluso\n" " si no son palabras clave\n" -#: pg_dump.c:1041 pg_dumpall.c:656 +#: pg_dump.c:1077 pg_dumpall.c:657 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=NUMFILAS número de filas por INSERT; implica --inserts\n" -#: pg_dump.c:1042 +#: pg_dump.c:1078 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr "" " --section=SECCIÓN volcar la sección nombrada (pre-data, data,\n" " post-data)\n" -#: pg_dump.c:1043 +#: pg_dump.c:1079 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr "" " --serializable-deferrable espera hasta que el respaldo pueda completarse\n" " sin anomalías\n" -#: pg_dump.c:1044 +#: pg_dump.c:1080 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT use el snapshot dado para la extracción\n" -#: pg_dump.c:1045 pg_restore.c:504 +#: pg_dump.c:1081 pg_restore.c:504 #, c-format msgid "" " --strict-names require table and/or schema include patterns to\n" @@ -1663,7 +1674,7 @@ msgstr "" " --strict-names requerir al menos una coincidencia para cada patrón\n" " de nombre de tablas y esquemas\n" -#: pg_dump.c:1047 pg_dumpall.c:657 pg_restore.c:506 +#: pg_dump.c:1083 pg_dumpall.c:658 pg_restore.c:506 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1674,7 +1685,7 @@ msgstr "" " usa órdenes SESSION AUTHORIZATION en lugar de\n" " ALTER OWNER para cambiar los dueño de los objetos\n" -#: pg_dump.c:1051 pg_dumpall.c:661 pg_restore.c:510 +#: pg_dump.c:1087 pg_dumpall.c:662 pg_restore.c:510 #, c-format msgid "" "\n" @@ -1683,46 +1694,46 @@ msgstr "" "\n" "Opciones de conexión:\n" -#: pg_dump.c:1052 +#: pg_dump.c:1088 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=NOMBRE nombre de la base de datos que volcar\n" -#: pg_dump.c:1053 pg_dumpall.c:663 pg_restore.c:511 +#: pg_dump.c:1089 pg_dumpall.c:664 pg_restore.c:511 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=ANFITRIÓN anfitrión de la base de datos o\n" " directorio del enchufe (socket)\n" -#: pg_dump.c:1054 pg_dumpall.c:665 pg_restore.c:512 +#: pg_dump.c:1090 pg_dumpall.c:666 pg_restore.c:512 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PUERTO número del puerto de la base de datos\n" -#: pg_dump.c:1055 pg_dumpall.c:666 pg_restore.c:513 +#: pg_dump.c:1091 pg_dumpall.c:667 pg_restore.c:513 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=USUARIO nombre de usuario con el cual conectarse\n" -#: pg_dump.c:1056 pg_dumpall.c:667 pg_restore.c:514 +#: pg_dump.c:1092 pg_dumpall.c:668 pg_restore.c:514 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pedir una contraseña\n" -#: pg_dump.c:1057 pg_dumpall.c:668 pg_restore.c:515 +#: pg_dump.c:1093 pg_dumpall.c:669 pg_restore.c:515 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password fuerza un prompt para la contraseña\n" " (debería ser automático)\n" -#: pg_dump.c:1058 pg_dumpall.c:669 +#: pg_dump.c:1094 pg_dumpall.c:670 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROL ejecuta SET ROLE antes del volcado\n" -#: pg_dump.c:1060 +#: pg_dump.c:1096 #, c-format msgid "" "\n" @@ -1735,22 +1746,22 @@ msgstr "" "de la variable de ambiente PGDATABASE.\n" "\n" -#: pg_dump.c:1062 pg_dumpall.c:673 pg_restore.c:522 +#: pg_dump.c:1098 pg_dumpall.c:674 pg_restore.c:522 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Reporte errores a <%s>.\n" -#: pg_dump.c:1063 pg_dumpall.c:674 pg_restore.c:523 +#: pg_dump.c:1099 pg_dumpall.c:675 pg_restore.c:523 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: pg_dump.c:1082 pg_dumpall.c:499 +#: pg_dump.c:1118 pg_dumpall.c:500 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "la codificación de cliente especificada «%s» no es válida" -#: pg_dump.c:1228 +#: pg_dump.c:1264 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server version.\n" @@ -1760,503 +1771,539 @@ msgstr "" "Los snapshots sincronizados en servidores standby no están soportados por esta versión del servidor.\n" "Ejecute con --no-synchronized-snapshots si no los necesita." -#: pg_dump.c:1297 +#: pg_dump.c:1333 #, c-format msgid "invalid output format \"%s\" specified" msgstr "el formato de salida especificado «%s» no es válido" -#: pg_dump.c:1335 +#: pg_dump.c:1371 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "no se encontraron esquemas coincidentes para el patrón «%s»" -#: pg_dump.c:1382 +#: pg_dump.c:1418 +#, fuzzy, c-format +#| msgid "no matching tables were found for pattern \"%s\"" +msgid "no matching extensions were found for pattern \"%s\"" +msgstr "no se encontraron tablas coincidentes para el patrón «%s»" + +#: pg_dump.c:1465 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "no se encontraron servidores foráneos coincidentes para el patrón «%s»" -#: pg_dump.c:1445 +#: pg_dump.c:1528 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "no se encontraron tablas coincidentes para el patrón «%s»" -#: pg_dump.c:1858 +#: pg_dump.c:1951 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "extrayendo el contenido de la tabla «%s.%s»" -#: pg_dump.c:1965 +#: pg_dump.c:2058 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Falló la extracción del contenido de la tabla «%s»: PQgetCopyData() falló." -#: pg_dump.c:1966 pg_dump.c:1976 +#: pg_dump.c:2059 pg_dump.c:2069 #, c-format msgid "Error message from server: %s" msgstr "Mensaje de error del servidor: %s" -#: pg_dump.c:1967 pg_dump.c:1977 +#: pg_dump.c:2060 pg_dump.c:2070 #, c-format msgid "The command was: %s" msgstr "La orden era: %s" -#: pg_dump.c:1975 +#: pg_dump.c:2068 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Falló la extracción del contenido de la tabla «%s»: PQgetResult() falló." -#: pg_dump.c:2731 +#: pg_dump.c:2828 #, c-format msgid "saving database definition" msgstr "salvando las definiciones de la base de datos" -#: pg_dump.c:3203 +#: pg_dump.c:3300 #, c-format msgid "saving encoding = %s" msgstr "salvando codificaciones = %s" -#: pg_dump.c:3228 +#: pg_dump.c:3325 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "salvando standard_conforming_strings = %s" -#: pg_dump.c:3267 +#: pg_dump.c:3364 #, c-format msgid "could not parse result of current_schemas()" msgstr "no se pudo interpretar la salida de current_schemas()" -#: pg_dump.c:3286 +#: pg_dump.c:3383 #, c-format msgid "saving search_path = %s" msgstr "salvando search_path = %s" -#: pg_dump.c:3326 +#: pg_dump.c:3436 +#, c-format +msgid "saving default_toast_compression = %s" +msgstr "" + +#: pg_dump.c:3475 #, c-format msgid "reading large objects" msgstr "leyendo objetos grandes" -#: pg_dump.c:3508 +#: pg_dump.c:3657 #, c-format msgid "saving large objects" msgstr "salvando objetos grandes" -#: pg_dump.c:3554 +#: pg_dump.c:3703 #, c-format msgid "error reading large object %u: %s" msgstr "error al leer el objeto grande %u: %s" -#: pg_dump.c:3606 +#: pg_dump.c:3755 #, c-format msgid "reading row security enabled for table \"%s.%s\"" msgstr "leyendo si seguridad de filas está activa para la tabla «%s.%s»" -#: pg_dump.c:3637 +#: pg_dump.c:3786 #, c-format msgid "reading policies for table \"%s.%s\"" msgstr "extrayendo las políticas para la tabla «%s.%s»" -#: pg_dump.c:3789 +#: pg_dump.c:3938 #, c-format msgid "unexpected policy command type: %c" msgstr "tipo de orden inesperada en política: %c" -#: pg_dump.c:3940 +#: pg_dump.c:4092 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "el dueño de la publicación «%s» parece no ser válido" -#: pg_dump.c:4085 -#, c-format -msgid "reading publication membership for table \"%s.%s\"" -msgstr "extrayendo la membresía en publicaciones para la tabla «%s.%s»" - -#: pg_dump.c:4228 +#: pg_dump.c:4384 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "no se volcaron las suscripciones porque el usuario actual no es un superusuario" -#: pg_dump.c:4282 +#: pg_dump.c:4455 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "el dueño de la suscripción «%s» parece no ser válido" -#: pg_dump.c:4326 +#: pg_dump.c:4498 #, c-format msgid "could not parse subpublications array" msgstr "no se pudo interpretar el arreglo subpublications" -#: pg_dump.c:4648 +#: pg_dump.c:4856 #, c-format msgid "could not find parent extension for %s %s" msgstr "no se pudo encontrar la extensión padre para %s %s" -#: pg_dump.c:4780 +#: pg_dump.c:4988 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "el dueño del esquema «%s» parece no ser válido" -#: pg_dump.c:4803 +#: pg_dump.c:5011 #, c-format msgid "schema with OID %u does not exist" msgstr "no existe el esquema con OID %u" -#: pg_dump.c:5128 +#: pg_dump.c:5340 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "el dueño del tipo «%s» parece no ser válido" -#: pg_dump.c:5213 +#: pg_dump.c:5424 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "el dueño del operador «%s» parece no ser válido" -#: pg_dump.c:5515 +#: pg_dump.c:5723 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "el dueño de la clase de operadores «%s» parece no ser válido" -#: pg_dump.c:5599 +#: pg_dump.c:5806 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "el dueño de la familia de operadores «%s» parece no ser válido" -#: pg_dump.c:5768 +#: pg_dump.c:5974 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "el dueño de la función de agregación «%s» parece no ser válido" -#: pg_dump.c:6028 +#: pg_dump.c:6233 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "el dueño de la función «%s» parece no ser válido" -#: pg_dump.c:6856 +#: pg_dump.c:7060 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "el dueño de la tabla «%s» parece no ser válido" -#: pg_dump.c:6898 pg_dump.c:17376 +#: pg_dump.c:7102 pg_dump.c:17493 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "falló la revisión de integridad, no se encontró la tabla padre con OID %u de la secuencia con OID %u" -#: pg_dump.c:7040 +#: pg_dump.c:7241 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "extrayendo los índices para la tabla «%s.%s»" -#: pg_dump.c:7455 +#: pg_dump.c:7655 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "extrayendo restricciones de llave foránea para la tabla «%s.%s»" -#: pg_dump.c:7736 +#: pg_dump.c:7934 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "falló la revisión de integridad, no se encontró la tabla padre con OID %u del elemento con OID %u de pg_rewrite" -#: pg_dump.c:7819 +#: pg_dump.c:8017 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "extrayendo los disparadores (triggers) para la tabla «%s.%s»" -#: pg_dump.c:7952 +#: pg_dump.c:8150 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "la consulta produjo un nombre de tabla nulo para la llave foránea del disparador \"%s\" en la tabla «%s» (OID de la tabla: %u)" -#: pg_dump.c:8507 +#: pg_dump.c:8700 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "buscando las columnas y tipos de la tabla «%s.%s»" -#: pg_dump.c:8643 +#: pg_dump.c:8824 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "numeración de columnas no válida en la tabla «%s»" -#: pg_dump.c:8680 +#: pg_dump.c:8863 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "buscando expresiones por omisión de la tabla «%s.%s»" -#: pg_dump.c:8702 +#: pg_dump.c:8885 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "el valor de adnum %d para la tabla «%s» no es válido" -#: pg_dump.c:8767 +#: pg_dump.c:8978 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "buscando restricciones de revisión (check) para la tabla «%s.%s»" -#: pg_dump.c:8816 +#: pg_dump.c:9027 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "se esperaban %d restricciones CHECK en la tabla «%s» pero se encontraron %d" msgstr[1] "se esperaban %d restricciones CHECK en la tabla «%s» pero se encontraron %d" -#: pg_dump.c:8820 +#: pg_dump.c:9031 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Los catálogos del sistema podrían estar corruptos)" -#: pg_dump.c:10406 +#: pg_dump.c:10616 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "el typtype del tipo «%s» parece no ser válido" -#: pg_dump.c:11760 +#: pg_dump.c:11968 #, c-format msgid "bogus value in proargmodes array" msgstr "valor no válido en el arreglo proargmodes" -#: pg_dump.c:12132 +#: pg_dump.c:12275 #, c-format msgid "could not parse proallargtypes array" msgstr "no se pudo interpretar el arreglo proallargtypes" -#: pg_dump.c:12148 +#: pg_dump.c:12291 #, c-format msgid "could not parse proargmodes array" msgstr "no se pudo interpretar el arreglo proargmodes" -#: pg_dump.c:12162 +#: pg_dump.c:12305 #, c-format msgid "could not parse proargnames array" msgstr "no se pudo interpretar el arreglo proargnames" -#: pg_dump.c:12173 +#: pg_dump.c:12315 #, c-format msgid "could not parse proconfig array" msgstr "no se pudo interpretar el arreglo proconfig" -#: pg_dump.c:12253 +#: pg_dump.c:12395 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "el valor del atributo «provolatile» para la función «%s» es desconocido" -#: pg_dump.c:12303 pg_dump.c:14361 +#: pg_dump.c:12445 pg_dump.c:14396 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "el valor del atributo «proparallel» para la función «%s» es desconocido" -#: pg_dump.c:12442 pg_dump.c:12551 pg_dump.c:12558 +#: pg_dump.c:12584 pg_dump.c:12693 pg_dump.c:12700 #, c-format msgid "could not find function definition for function with OID %u" msgstr "no se encontró la definición de la función con OID %u" -#: pg_dump.c:12481 +#: pg_dump.c:12623 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "valor no válido en los campos pg_cast.castfunc o pg_cast.castmethod" -#: pg_dump.c:12484 +#: pg_dump.c:12626 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "valor no válido en el campo pg_cast.castmethod" -#: pg_dump.c:12577 +#: pg_dump.c:12719 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "definición errónea de transformación; al menos uno de trffromsql and trftosql debe ser distinto de cero" -#: pg_dump.c:12594 +#: pg_dump.c:12736 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "valor erróneo en el campo pg_transform.trffromsql" -#: pg_dump.c:12615 +#: pg_dump.c:12757 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "valor erróneo en el campo pg_transform.trftosql" -#: pg_dump.c:12931 +#: pg_dump.c:12909 +#, fuzzy, c-format +#| msgid "nondeterministic collations are not supported for operator class \"%s\"" +msgid "postfix operators are not supported anymore (operator \"%s\")" +msgstr "los ordenamientos no determinísticos no están soportados para la clase de operadores «%s»" + +#: pg_dump.c:13079 #, c-format msgid "could not find operator with OID %s" msgstr "no se pudo encontrar el operador con OID %s" -#: pg_dump.c:12999 +#: pg_dump.c:13147 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "el tipo «%c» para el método de acceso «%s» no es válido" -#: pg_dump.c:13753 +#: pg_dump.c:13901 #, c-format msgid "unrecognized collation provider: %s" msgstr "proveedor de ordenamiento no reconocido: %s" -#: pg_dump.c:14225 -#, c-format -msgid "aggregate function %s could not be dumped correctly for this database version; ignored" -msgstr "la función de agregación «%s» no se pudo extraer correctamente para esta versión de la base de datos; ignorada" - -#: pg_dump.c:14280 +#: pg_dump.c:14315 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "valor de aggfinalmodify no reconocido para la agregación «%s»" -#: pg_dump.c:14336 +#: pg_dump.c:14371 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "valor de aggmfinalmodify no reconocido para la agregación «%s»" -#: pg_dump.c:15058 +#: pg_dump.c:15093 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "tipo de objeto desconocido en privilegios por omisión: %d" -#: pg_dump.c:15076 +#: pg_dump.c:15111 #, c-format msgid "could not parse default ACL list (%s)" msgstr "no se pudo interpretar la lista de ACL (%s)" -#: pg_dump.c:15161 +#: pg_dump.c:15196 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "no se pudo interpretar la lista inicial de GRANT ACL (%s) o la lista inicial de REVOKE ACL (%s) para el objeto «%s» (%s)" -#: pg_dump.c:15169 +#: pg_dump.c:15204 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "no se pudo interpretar la lista de GRANT ACL (%s) o la lista de REVOKE ACL (%s) para el objeto «%s» (%s)" -#: pg_dump.c:15684 +#: pg_dump.c:15719 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "la consulta para obtener la definición de la vista «%s» no regresó datos" -#: pg_dump.c:15687 +#: pg_dump.c:15722 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "la consulta para obtener la definición de la vista «%s» regresó más de una definición" -#: pg_dump.c:15694 +#: pg_dump.c:15729 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "la definición de la vista «%s» parece estar vacía (tamaño cero)" -#: pg_dump.c:15776 +#: pg_dump.c:15813 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS ya no está soportado (tabla «%s»)" -#: pg_dump.c:16256 -#, c-format -msgid "invalid number of parents %d for table \"%s\"" -msgstr "número de padres %d para la tabla «%s» no es válido" - -#: pg_dump.c:16579 +#: pg_dump.c:16680 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "el número de columna %d no es válido para la tabla «%s»" -#: pg_dump.c:16864 +#: pg_dump.c:16757 +#, fuzzy, c-format +#| msgid "could not parse end position \"%s\"" +msgid "could not parse index statistic columns" +msgstr "no se pudo interpretar la posición final «%s»" + +#: pg_dump.c:16759 +#, fuzzy, c-format +#| msgid "could not parse end position \"%s\"" +msgid "could not parse index statistic values" +msgstr "no se pudo interpretar la posición final «%s»" + +#: pg_dump.c:16761 +#, c-format +msgid "mismatched number of columns and values for index statistics" +msgstr "" + +#: pg_dump.c:16978 #, c-format msgid "missing index for constraint \"%s\"" msgstr "falta un índice para restricción «%s»" -#: pg_dump.c:17089 +#: pg_dump.c:17203 #, c-format msgid "unrecognized constraint type: %c" msgstr "tipo de restricción inesperado: %c" -#: pg_dump.c:17221 pg_dump.c:17441 +#: pg_dump.c:17335 pg_dump.c:17558 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" msgstr[0] "la consulta para obtener los datos de la secuencia «%s» regresó %d entrada, pero se esperaba 1" msgstr[1] "la consulta para obtener los datos de la secuencia «%s» regresó %d entradas, pero se esperaba 1" -#: pg_dump.c:17255 +#: pg_dump.c:17369 #, c-format msgid "unrecognized sequence type: %s" msgstr "tipo no reconocido de secuencia: %s" -#: pg_dump.c:17539 +#: pg_dump.c:17656 #, c-format msgid "unexpected tgtype value: %d" msgstr "tgtype no esperado: %d" -#: pg_dump.c:17613 +#: pg_dump.c:17730 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "argumento de cadena (%s) no válido para el disparador (trigger) «%s» en la tabla «%s»" -#: pg_dump.c:17849 +#: pg_dump.c:17966 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "la consulta para obtener la regla «%s» asociada con la tabla «%s» falló: retornó un número incorrecto de renglones" -#: pg_dump.c:18011 +#: pg_dump.c:18128 #, c-format msgid "could not find referenced extension %u" msgstr "no se pudo encontrar la extensión referenciada %u" -#: pg_dump.c:18225 +#: pg_dump.c:18219 +#, fuzzy, c-format +#| msgid "could not parse proconfig array" +msgid "could not parse extension configuration array" +msgstr "no se pudo interpretar el arreglo proconfig" + +#: pg_dump.c:18221 +#, fuzzy, c-format +#| msgid "could not parse reloptions array" +msgid "could not parse extension condition array" +msgstr "no se pudo interpretar el arreglo reloptions" + +#: pg_dump.c:18223 +#, c-format +msgid "mismatched number of configurations and conditions for extension" +msgstr "" + +#: pg_dump.c:18355 #, c-format msgid "reading dependency data" msgstr "obteniendo datos de dependencias" -#: pg_dump.c:18318 +#: pg_dump.c:18448 #, c-format msgid "no referencing object %u %u" msgstr "no existe el objeto referenciante %u %u" -#: pg_dump.c:18329 +#: pg_dump.c:18459 #, c-format msgid "no referenced object %u %u" msgstr "no existe el objeto referenciado %u %u" -#: pg_dump.c:18702 +#: pg_dump.c:18833 #, c-format msgid "could not parse reloptions array" msgstr "no se pudo interpretar el arreglo reloptions" -#: pg_dump_sort.c:360 +#: pg_dump_sort.c:411 #, c-format msgid "invalid dumpId %d" msgstr "dumpId %d no válido" -#: pg_dump_sort.c:366 +#: pg_dump_sort.c:417 #, c-format msgid "invalid dependency %d" msgstr "dependencia %d no válida" -#: pg_dump_sort.c:599 +#: pg_dump_sort.c:650 #, c-format msgid "could not identify dependency loop" msgstr "no se pudo identificar bucle de dependencia" -#: pg_dump_sort.c:1170 +#: pg_dump_sort.c:1221 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" msgstr[0] "hay restricciones de llave foránea circulares en la siguiente tabla:" msgstr[1] "hay restricciones de llave foránea circulares entre las siguientes tablas:" -#: pg_dump_sort.c:1174 pg_dump_sort.c:1194 +#: pg_dump_sort.c:1225 pg_dump_sort.c:1245 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1175 +#: pg_dump_sort.c:1226 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." msgstr "Puede no ser capaz de restaurar el respaldo sin usar --disable-triggers o temporalmente eliminar las restricciones." -#: pg_dump_sort.c:1176 +#: pg_dump_sort.c:1227 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." msgstr "Considere usar un volcado completo en lugar de --data-only para evitar este problema." -#: pg_dump_sort.c:1188 +#: pg_dump_sort.c:1239 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "no se pudo resolver el bucle de dependencias entre los siguientes elementos:" -#: pg_dumpall.c:199 +#: pg_dumpall.c:200 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -2267,7 +2314,7 @@ msgstr "" "mismo directorio que «%s».\n" "Verifique su instalación." -#: pg_dumpall.c:204 +#: pg_dumpall.c:205 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -2278,32 +2325,32 @@ msgstr "" "but no era de la misma versión que %s.\n" "Verifique su instalación." -#: pg_dumpall.c:356 +#: pg_dumpall.c:357 #, c-format msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" msgstr "la opción --exclude-database no puede ser usada junto con -g/--globals-only, -r/--roles-only o -t/--tablespaces-only" -#: pg_dumpall.c:365 +#: pg_dumpall.c:366 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "las opciones -g/--globals-only y -r/--roles-only no pueden usarse juntas" -#: pg_dumpall.c:373 +#: pg_dumpall.c:374 #, c-format msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "las opciones -g/--globals-only y -t/--tablespaces-only no pueden usarse juntas" -#: pg_dumpall.c:387 +#: pg_dumpall.c:388 #, c-format msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "las opciones -r/--roles-only y -t/--tablespaces-only no pueden usarse juntas" -#: pg_dumpall.c:448 pg_dumpall.c:1754 +#: pg_dumpall.c:449 pg_dumpall.c:1751 #, c-format msgid "could not connect to database \"%s\"" msgstr "no se pudo establecer la conexión a la base de datos «%s»" -#: pg_dumpall.c:462 +#: pg_dumpall.c:463 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" @@ -2312,7 +2359,7 @@ msgstr "" "no se pudo establecer la conexión a las bases de datos «postgres» o\n" "«template1». Por favor especifique una base de datos para conectarse." -#: pg_dumpall.c:616 +#: pg_dumpall.c:617 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2322,73 +2369,73 @@ msgstr "" "guión (script) SQL.\n" "\n" -#: pg_dumpall.c:618 +#: pg_dumpall.c:619 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPCIÓN]...\n" -#: pg_dumpall.c:621 +#: pg_dumpall.c:622 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=ARCHIVO nombre del archivo de salida\n" -#: pg_dumpall.c:628 +#: pg_dumpall.c:629 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr " -c, --clean tira (drop) la base de datos antes de crearla\n" -#: pg_dumpall.c:630 +#: pg_dumpall.c:631 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr " -g, --globals-only extrae sólo los objetos globales, no bases de datos\n" -#: pg_dumpall.c:631 pg_restore.c:485 +#: pg_dumpall.c:632 pg_restore.c:485 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner no reestablece los dueños de los objetos\n" -#: pg_dumpall.c:632 +#: pg_dumpall.c:633 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr "" " -r, --roles-only extrae sólo los roles, no bases de datos\n" " ni tablespaces\n" -#: pg_dumpall.c:634 +#: pg_dumpall.c:635 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr "" " -S, --superuser=NAME especifica el nombre del superusuario a usar en\n" " el volcado\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:636 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr "" " -t, --tablespaces-only extrae sólo los tablespaces, no bases de datos\n" " ni roles\n" -#: pg_dumpall.c:641 +#: pg_dumpall.c:642 #, c-format msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" msgstr " --exclude-database=PATRÓN excluir bases de datos cuyos nombres coinciden con el patrón\n" -#: pg_dumpall.c:648 +#: pg_dumpall.c:649 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords no extraer contraseñas para roles\n" -#: pg_dumpall.c:662 +#: pg_dumpall.c:663 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=CONNSTR conectar usando la cadena de conexión\n" -#: pg_dumpall.c:664 +#: pg_dumpall.c:665 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=NOMBRE especifica la base de datos a la cual conectarse\n" -#: pg_dumpall.c:671 +#: pg_dumpall.c:672 #, c-format msgid "" "\n" @@ -2400,57 +2447,52 @@ msgstr "" "Si no se usa -f/--file, el volcado de SQL será escrito a la salida estándar.\n" "\n" -#: pg_dumpall.c:877 +#: pg_dumpall.c:878 #, c-format msgid "role name starting with \"pg_\" skipped (%s)" msgstr "omitido nombre de rol que empieza con «pg_» (%s)" -#: pg_dumpall.c:1278 +#: pg_dumpall.c:1279 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "no se pudo interpretar la lista de control de acceso (%s) del tablespace «%s»" -#: pg_dumpall.c:1495 +#: pg_dumpall.c:1496 #, c-format msgid "excluding database \"%s\"" msgstr "excluyendo base de datos «%s»" -#: pg_dumpall.c:1499 +#: pg_dumpall.c:1500 #, c-format msgid "dumping database \"%s\"" msgstr "extrayendo base de datos «%s»" -#: pg_dumpall.c:1531 +#: pg_dumpall.c:1532 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "pg_dump falló en la base de datos «%s», saliendo" -#: pg_dumpall.c:1540 +#: pg_dumpall.c:1541 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "no se pudo reabrir el archivo de salida «%s»: %m" -#: pg_dumpall.c:1584 +#: pg_dumpall.c:1585 #, c-format msgid "running \"%s\"" msgstr "ejecutando «%s»" -#: pg_dumpall.c:1775 -#, c-format -msgid "could not connect to database \"%s\": %s" -msgstr "no se pudo conectar a la base de datos «%s»: %s" - -#: pg_dumpall.c:1805 +#: pg_dumpall.c:1800 #, c-format msgid "could not get server version" msgstr "no se pudo obtener la versión del servidor" -#: pg_dumpall.c:1811 +#: pg_dumpall.c:1806 #, c-format msgid "could not parse server version \"%s\"" msgstr "no se pudo interpretar la versión del servidor «%s»" -#: pg_dumpall.c:1883 pg_dumpall.c:1906 +#: pg_dumpall.c:1878 pg_dumpall.c:1901 #, c-format msgid "executing %s" msgstr "ejecutando %s" @@ -2706,3 +2748,39 @@ msgstr "" "\n" "Si no se especifica un archivo de entrada, se usa la entrada estándar.\n" "\n" + +#~ msgid "could not connect to database \"%s\": %s" +#~ msgstr "no se pudo conectar a la base de datos «%s»: %s" + +#~ msgid "aggregate function %s could not be dumped correctly for this database version; ignored" +#~ msgstr "la función de agregación «%s» no se pudo extraer correctamente para esta versión de la base de datos; ignorada" + +#~ msgid "reading publication membership for table \"%s.%s\"" +#~ msgstr "extrayendo la membresía en publicaciones para la tabla «%s.%s»" + +#~ msgid "connection to database \"%s\" failed: %s" +#~ msgstr "falló la conexión a la base de datos «%s»: %s" + +#~ msgid "connection needs password" +#~ msgstr "la conexión necesita contraseña" + +#~ msgid "could not reconnect to database: %s" +#~ msgstr "no se pudo hacer la reconexión a la base de datos: %s" + +#~ msgid "could not reconnect to database" +#~ msgstr "no se pudo hacer la reconexión a la base de datos" + +#~ msgid "connecting to database \"%s\" as user \"%s\"" +#~ msgstr "conectandose a la base de datos \"%s\" como el usuario «%s»" + +#~ msgid "could not write to large object (result: %lu, expected: %lu)" +#~ msgstr "no se pudo escribir al objecto grande (resultado: %lu, esperado: %lu)" + +#~ msgid "select() failed: %m" +#~ msgstr "select() fallida: %m" + +#~ msgid "WSAStartup failed: %d" +#~ msgstr "WSAStartup falló: %d" + +#~ msgid "pclose failed: %m" +#~ msgstr "pclose falló: %m" diff --git a/src/bin/pg_rewind/po/de.po b/src/bin/pg_rewind/po/de.po index 708e971f3d670..e3b922f2d9daf 100644 --- a/src/bin/pg_rewind/po/de.po +++ b/src/bin/pg_rewind/po/de.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_rewind (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-06 06:49+0000\n" -"PO-Revision-Date: 2021-05-06 13:01+0200\n" +"POT-Creation-Date: 2021-05-14 08:49+0000\n" +"PO-Revision-Date: 2021-05-14 14:40+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -114,8 +114,8 @@ msgstr "konnte Datei »%s« nicht aus Archiv wiederherstellen" #: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 #: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 -#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:67 parsexlog.c:126 -#: parsexlog.c:186 +#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:77 parsexlog.c:135 +#: parsexlog.c:195 #, c-format msgid "out of memory" msgstr "Speicher aufgebraucht" @@ -205,12 +205,12 @@ msgstr "konnte symbolische Verknüpfung »%s« nicht löschen: %m" msgid "could not open file \"%s\" for reading: %m" msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %m" -#: file_ops.c:341 local_source.c:107 parsexlog.c:351 +#: file_ops.c:341 local_source.c:107 parsexlog.c:346 #, c-format msgid "could not read file \"%s\": %m" msgstr "konnte Datei »%s« nicht lesen: %m" -#: file_ops.c:344 parsexlog.c:353 +#: file_ops.c:344 parsexlog.c:348 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "konnte Datei »%s« nicht lesen: %d von %zu gelesen" @@ -415,32 +415,32 @@ msgstr "unerwartetes EOF beim Lesen der Datei »%s«" msgid "could not close file \"%s\": %m" msgstr "konnte Datei »%s« nicht schließen: %m" -#: parsexlog.c:85 parsexlog.c:138 +#: parsexlog.c:89 parsexlog.c:142 #, c-format msgid "could not read WAL record at %X/%X: %s" msgstr "konnte WAL-Eintrag bei %X/%X nicht lesen: %s" -#: parsexlog.c:89 parsexlog.c:141 +#: parsexlog.c:93 parsexlog.c:145 #, c-format msgid "could not read WAL record at %X/%X" msgstr "konnte WAL-Eintrag bei %X/%X nicht lesen" -#: parsexlog.c:205 +#: parsexlog.c:208 #, c-format msgid "could not find previous WAL record at %X/%X: %s" msgstr "konnte vorangegangenen WAL-Eintrag bei %X/%X nicht finden: %s" -#: parsexlog.c:209 +#: parsexlog.c:212 #, c-format msgid "could not find previous WAL record at %X/%X" msgstr "konnte vorangegangenen WAL-Eintrag bei %X/%X nicht finden" -#: parsexlog.c:341 +#: parsexlog.c:337 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "konnte Positionszeiger in Datei »%s« nicht setzen: %m" -#: parsexlog.c:436 +#: parsexlog.c:429 #, c-format msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmgr: %s, info: %02X" msgstr "WAL-Eintrag modifiziert eine Relation, aber Typ des Eintrags wurde nicht erkannt: lsn: %X/%X, rmgr: %s, info: %02X" @@ -666,8 +666,8 @@ msgstr "Fertig!" #: pg_rewind.c:564 #, c-format -msgid "no action decided for \"%s\"" -msgstr "keine Aktion bestimmt für »%s«" +msgid "no action decided for file \"%s\"" +msgstr "keine Aktion bestimmt für Datei »%s«" #: pg_rewind.c:596 #, c-format @@ -823,137 +823,137 @@ msgstr "ungültige Daten in History-Datei" msgid "Timeline IDs must be less than child timeline's ID." msgstr "Zeitleisten-IDs müssen kleiner als die Zeitleisten-ID des Kindes sein." -#: xlogreader.c:747 +#: xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "ungültiger Datensatz-Offset bei %X/%X" -#: xlogreader.c:756 +#: xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "Contrecord angefordert von %X/%X" -#: xlogreader.c:818 xlogreader.c:1277 +#: xlogreader.c:398 xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "ungültige Datensatzlänge bei %X/%X: %u erwartet, %u erhalten" -#: xlogreader.c:909 +#: xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "Datensatzlänge %u bei %X/%X ist zu lang" -#: xlogreader.c:969 +#: xlogreader.c:453 #, c-format -msgid "there is no contrecord flag at %X/%X reading %X/%X" -msgstr "keine Contrecord-Flag bei %X/%X beim Lesen von %X/%X" +msgid "there is no contrecord flag at %X/%X" +msgstr "keine Contrecord-Flag bei %X/%X" -#: xlogreader.c:984 +#: xlogreader.c:466 #, c-format -msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" -msgstr "ungültige Contrecord-Länge %u bei %X/%X beim Lesen von %X/%X, erwartet wurde %u" +msgid "invalid contrecord length %u (expected %lld) at %X/%X" +msgstr "ungültige Contrecord-Länge %u (erwartet %lld) bei %X/%X" -#: xlogreader.c:1285 +#: xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ungültige Resource-Manager-ID %u bei %X/%X" -#: xlogreader.c:1298 xlogreader.c:1314 +#: xlogreader.c:716 xlogreader.c:732 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "Datensatz mit falschem Prev-Link %X/%X bei %X/%X" -#: xlogreader.c:1350 +#: xlogreader.c:768 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "ungültige Resource-Manager-Datenprüfsumme in Datensatz bei %X/%X" -#: xlogreader.c:1387 +#: xlogreader.c:805 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "ungültige magische Zahl %04X in Logsegment %s, Offset %u" -#: xlogreader.c:1401 xlogreader.c:1442 +#: xlogreader.c:819 xlogreader.c:860 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "ungültige Info-Bits %04X in Logsegment %s, Offset %u" -#: xlogreader.c:1416 +#: xlogreader.c:834 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Datenbanksystemidentifikator in WAL-Datei ist %llu, Datenbanksystemidentifikator in pg_control ist %llu" -#: xlogreader.c:1424 +#: xlogreader.c:842 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: falsche Segmentgröße im Seitenkopf" -#: xlogreader.c:1430 +#: xlogreader.c:848 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: falsche XLOG_BLCKSZ im Seitenkopf" -#: xlogreader.c:1461 +#: xlogreader.c:879 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "unerwartete Pageaddr %X/%X in Logsegment %s, Offset %u" -#: xlogreader.c:1486 +#: xlogreader.c:904 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "Zeitleisten-ID %u außer der Reihe (nach %u) in Logsegment %s, Offset %u" -#: xlogreader.c:1908 +#: xlogreader.c:1249 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u außer der Reihe bei %X/%X" -#: xlogreader.c:1932 +#: xlogreader.c:1271 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA gesetzt, aber keine Daten enthalten bei %X/%X" -#: xlogreader.c:1939 +#: xlogreader.c:1278 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA nicht gesetzt, aber Datenlänge ist %u bei %X/%X" -#: xlogreader.c:1975 +#: xlogreader.c:1314 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE gesetzt, aber Loch Offset %u Länge %u Block-Abbild-Länge %u bei %X/%X" -#: xlogreader.c:1991 +#: xlogreader.c:1330 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE nicht gesetzt, aber Loch Offset %u Länge %u bei %X/%X" -#: xlogreader.c:2006 +#: xlogreader.c:1345 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge %u bei %X/%X" -#: xlogreader.c:2021 +#: xlogreader.c:1360 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "weder BKPIMAGE_HAS_HOLE noch BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge ist %u bei %X/%X" -#: xlogreader.c:2037 +#: xlogreader.c:1376 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL gesetzt, aber keine vorangehende Relation bei %X/%X" -#: xlogreader.c:2049 +#: xlogreader.c:1388 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "ungültige block_id %u bei %X/%X" -#: xlogreader.c:2116 +#: xlogreader.c:1475 #, c-format msgid "record with invalid length at %X/%X" msgstr "Datensatz mit ungültiger Länge bei %X/%X" -#: xlogreader.c:2219 +#: xlogreader.c:1564 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "ungültiges komprimiertes Abbild bei %X/%X, Block %d" diff --git a/src/bin/pg_rewind/po/es.po b/src/bin/pg_rewind/po/es.po index cd6e48980d2ee..7ee4f89f427fa 100644 --- a/src/bin/pg_rewind/po/es.po +++ b/src/bin/pg_rewind/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_rewind (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:47+0000\n" +"POT-Creation-Date: 2021-05-14 19:49+0000\n" "PO-Revision-Date: 2020-10-16 15:59-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -21,17 +21,17 @@ msgstr "" "X-Generator: BlackCAT 1.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "precaución: " @@ -88,14 +88,15 @@ msgid "could not get exit code from subprocess: error code %lu" msgstr "no se pudo obtener el código de salida del subproceso»: código de error %lu" #: ../../fe_utils/archive.c:53 -#, c-format -#| msgid "cannot use restore_command with %%r placeholder" -msgid "could not use restore_command with %%r alias" +#, fuzzy, c-format +#| msgid "could not use restore_command with %%r alias" +msgid "cannot use restore_command with %%r placeholder" msgstr "no se puede usar restore_command con el alias %%r" #: ../../fe_utils/archive.c:74 -#, c-format -msgid "unexpected file size for \"%s\": %lu instead of %lu" +#, fuzzy, c-format +#| msgid "unexpected file size for \"%s\": %lu instead of %lu" +msgid "unexpected file size for \"%s\": %lld instead of %lld" msgstr "el archivo «%s» tiene tamaño inesperado: %lu en lugar de %lu" #: ../../fe_utils/archive.c:85 @@ -103,15 +104,15 @@ msgstr "el archivo «%s» tiene tamaño inesperado: %lu en lugar de %lu" msgid "could not open file \"%s\" restored from archive: %m" msgstr "no se pudo abrir el archivo «%s» restaurado del archivo: %m" -#: ../../fe_utils/archive.c:97 copy_fetch.c:88 filemap.c:208 +#: ../../fe_utils/archive.c:97 file_ops.c:417 #, c-format msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" #: ../../fe_utils/archive.c:112 -#, c-format -#| msgid "restore_command failed: %s" -msgid "restore_command failed due to the signal: %s" +#, fuzzy, c-format +#| msgid "restore_command failed due to the signal: %s" +msgid "restore_command failed: %s" msgstr "restore_command falló debido a la señal: %s" #: ../../fe_utils/archive.c:121 @@ -121,13 +122,13 @@ msgstr "no se pudo recuperar el archivo «%s» del archivo" #: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 #: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 -#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:73 parsexlog.c:125 -#: parsexlog.c:185 +#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:77 parsexlog.c:135 +#: parsexlog.c:195 #, c-format msgid "out of memory" msgstr "memoria agotada" -#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:298 +#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:308 #, c-format msgid "could not open file \"%s\": %m" msgstr "no se pudo abrir el archivo «%s»: %m" @@ -142,317 +143,327 @@ msgstr "no se pudo escribir a archivo «%s»: %m" msgid "could not create file \"%s\": %m" msgstr "no se pudo crear archivo «%s»: %m" -#: copy_fetch.c:59 -#, c-format -msgid "could not open directory \"%s\": %m" -msgstr "no se pudo abrir el directorio «%s»: %m" - -#: copy_fetch.c:117 -#, c-format -msgid "could not read symbolic link \"%s\": %m" -msgstr "no se pudo leer el enlace simbólico «%s»: %m" - -#: copy_fetch.c:120 -#, c-format -msgid "symbolic link \"%s\" target is too long" -msgstr "la ruta «%s» del enlace simbólico es demasiado larga" - -#: copy_fetch.c:135 -#, c-format -msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform" -msgstr "«%s» es un link simbólico, pero los links simbólicos no están soportados en esta plataforma" - -#: copy_fetch.c:142 -#, c-format -msgid "could not read directory \"%s\": %m" -msgstr "no se pudo leer el directorio «%s»: %m" - -#: copy_fetch.c:146 -#, c-format -msgid "could not close directory \"%s\": %m" -msgstr "no se pudo abrir el directorio «%s»: %m" - -#: copy_fetch.c:166 -#, c-format -msgid "could not open source file \"%s\": %m" -msgstr "no se pudo abrir el archivo de origen «%s»: %m" - -#: copy_fetch.c:170 -#, c-format -msgid "could not seek in source file: %m" -msgstr "no se pudo posicionar en archivo de origen: %m" - -#: copy_fetch.c:187 file_ops.c:311 parsexlog.c:336 -#, c-format -msgid "could not read file \"%s\": %m" -msgstr "no se pudo leer el archivo «%s»: %m" - -#: copy_fetch.c:190 -#, c-format -msgid "unexpected EOF while reading file \"%s\"" -msgstr "EOF inesperado mientras se leía el archivo «%s»" - -#: copy_fetch.c:197 -#, c-format -msgid "could not close file \"%s\": %m" -msgstr "no se pudo cerrar el archivo «%s»: %m" - -#: file_ops.c:62 +#: file_ops.c:67 #, c-format msgid "could not open target file \"%s\": %m" msgstr "no se pudo abrir el archivo de destino «%s»: %m" -#: file_ops.c:76 +#: file_ops.c:81 #, c-format msgid "could not close target file \"%s\": %m" msgstr "no se pudo cerrar el archivo de destino «%s»: %m" -#: file_ops.c:96 +#: file_ops.c:101 #, c-format msgid "could not seek in target file \"%s\": %m" msgstr "no se pudo posicionar en archivo de destino «%s»: %m" -#: file_ops.c:112 +#: file_ops.c:117 #, c-format msgid "could not write file \"%s\": %m" msgstr "no se pudo escribir el archivo «%s»: %m" -#: file_ops.c:162 +#: file_ops.c:150 file_ops.c:177 +#, fuzzy, c-format +#| msgid "unrecognized file format \"%d\"" +msgid "undefined file type for \"%s\"" +msgstr "formato de archivo no reconocido «%d»" + +#: file_ops.c:173 #, c-format msgid "invalid action (CREATE) for regular file" msgstr "acción no válida (CREATE) para archivo regular" -#: file_ops.c:185 +#: file_ops.c:200 #, c-format msgid "could not remove file \"%s\": %m" msgstr "no se pudo eliminar el archivo «%s»: %m" -#: file_ops.c:203 +#: file_ops.c:218 #, c-format msgid "could not open file \"%s\" for truncation: %m" msgstr "no se pudo abrir el archivo «%s» para truncarlo: %m" -#: file_ops.c:207 +#: file_ops.c:222 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "no se pudo truncar el archivo «%s» a %u: %m" -#: file_ops.c:223 +#: file_ops.c:238 #, c-format msgid "could not create directory \"%s\": %m" msgstr "no se pudo crear el directorio «%s»: %m" -#: file_ops.c:237 +#: file_ops.c:252 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "no se pudo eliminar el directorio «%s»: %m" -#: file_ops.c:251 +#: file_ops.c:266 #, c-format msgid "could not create symbolic link at \"%s\": %m" msgstr "no se pudo crear el link simbólico en «%s»: %m" -#: file_ops.c:265 +#: file_ops.c:280 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "no se pudo eliminar el enlace simbólico «%s»: %m" -#: file_ops.c:296 file_ops.c:300 +#: file_ops.c:326 file_ops.c:330 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "no se pudo abrir archivo «%s» para lectura: %m" -#: file_ops.c:314 parsexlog.c:338 +#: file_ops.c:341 local_source.c:107 parsexlog.c:346 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "no se pudo leer el archivo «%s»: %m" + +#: file_ops.c:344 parsexlog.c:348 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" -#: filemap.c:200 +#: file_ops.c:388 #, c-format -msgid "data file \"%s\" in source is not a regular file" -msgstr "el archivo de datos «%s» en el origen no es un archivo regular" +msgid "could not open directory \"%s\": %m" +msgstr "no se pudo abrir el directorio «%s»: %m" -#: filemap.c:222 +#: file_ops.c:446 #, c-format -msgid "\"%s\" is not a directory" -msgstr "«%s» no es un directorio" +msgid "could not read symbolic link \"%s\": %m" +msgstr "no se pudo leer el enlace simbólico «%s»: %m" -#: filemap.c:245 +#: file_ops.c:449 #, c-format -msgid "\"%s\" is not a symbolic link" -msgstr "«%s» no es un link simbólico" +msgid "symbolic link \"%s\" target is too long" +msgstr "la ruta «%s» del enlace simbólico es demasiado larga" -#: filemap.c:257 +#: file_ops.c:464 #, c-format -msgid "\"%s\" is not a regular file" -msgstr "«%s» no es un archivo regular" +msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform" +msgstr "«%s» es un link simbólico, pero los links simbólicos no están soportados en esta plataforma" -#: filemap.c:369 +#: file_ops.c:471 #, c-format -msgid "source file list is empty" -msgstr "el listado de archivos de origen está vacío" +msgid "could not read directory \"%s\": %m" +msgstr "no se pudo leer el directorio «%s»: %m" -#: filemap.c:484 +#: file_ops.c:475 #, c-format -msgid "unexpected page modification for directory or symbolic link \"%s\"" -msgstr "modificación de página inesperada para el directorio o link simbólico «%s»" +msgid "could not close directory \"%s\": %m" +msgstr "no se pudo abrir el directorio «%s»: %m" -#: libpq_fetch.c:50 +#: filemap.c:237 #, c-format -msgid "could not connect to server: %s" -msgstr "no se pudo conectar al servidor: %s" +msgid "data file \"%s\" in source is not a regular file" +msgstr "el archivo de datos «%s» en el origen no es un archivo regular" -#: libpq_fetch.c:54 -#, c-format -msgid "connected to server" -msgstr "conectado al servidor" +#: filemap.c:242 filemap.c:275 +#, fuzzy, c-format +#| msgid "duplicate option \"%s\"" +msgid "duplicate source file \"%s\"" +msgstr "nombre de opción «%s» duplicada" + +#: filemap.c:330 +#, fuzzy, c-format +#| msgid "unexpected page modification for directory or symbolic link \"%s\"" +msgid "unexpected page modification for non-regular file \"%s\"" +msgstr "modificación de página inesperada para el directorio o link simbólico «%s»" + +#: filemap.c:680 filemap.c:774 +#, fuzzy, c-format +#| msgid "Token types for parser \"%s\"" +msgid "unknown file type for \"%s\"" +msgstr "Tipos de elemento para el analizador «%s»" -#: libpq_fetch.c:63 +#: filemap.c:707 +#, fuzzy, c-format +#| msgid "table \"%s\" has different type for column \"%s\"" +msgid "file \"%s\" is of different type in source and target" +msgstr "la tabla «%s» tiene un tipo diferente para la columna «%s»" + +#: filemap.c:779 +#, fuzzy, c-format +#| msgid "could not seek to end of file \"%s\": %m" +msgid "could not decide what to do with file \"%s\"" +msgstr "no se pudo posicionar (seek) al fin del archivo «%s»: %m" + +#: libpq_source.c:128 #, c-format msgid "could not clear search_path: %s" msgstr "no se pudo limpiar search_path: %s" -#: libpq_fetch.c:75 -#, c-format -msgid "source server must not be in recovery mode" -msgstr "el servidor de origen no debe estar en modo de recuperación" - -#: libpq_fetch.c:85 +#: libpq_source.c:139 #, c-format msgid "full_page_writes must be enabled in the source server" msgstr "full_page_writes debe estar activado en el servidor de origen" -#: libpq_fetch.c:111 +#: libpq_source.c:150 +#, fuzzy, c-format +#| msgid "could not parse contents of file \"%s\"" +msgid "could not prepare statement to fetch file contents: %s" +msgstr "no se pudo interpretar el contenido del archivo «%s»" + +#: libpq_source.c:169 #, c-format msgid "error running query (%s) on source server: %s" msgstr "error ejecutando consulta (%s) en el servidor de origen: %s" -#: libpq_fetch.c:116 +#: libpq_source.c:174 #, c-format msgid "unexpected result set from query" msgstr "conjunto de resultados inesperados de la consulta" -#: libpq_fetch.c:137 +#: libpq_source.c:196 #, c-format msgid "error running query (%s) in source server: %s" msgstr "error ejecutando consulta (%s) en el servidor de origen: %s" -#: libpq_fetch.c:157 +#: libpq_source.c:217 #, c-format msgid "unrecognized result \"%s\" for current WAL insert location" msgstr "resultado «%s» no reconocido para la ubicación de inserción WAL actual" -#: libpq_fetch.c:207 +#: libpq_source.c:268 #, c-format msgid "could not fetch file list: %s" msgstr "no se pudo obtener el listado de archivos: %s" -#: libpq_fetch.c:212 +#: libpq_source.c:273 #, c-format msgid "unexpected result set while fetching file list" msgstr "conjunto de resultados inesperado mientras se obtenía el listado de archivos" -#: libpq_fetch.c:265 +#: libpq_source.c:435 #, c-format msgid "could not send query: %s" msgstr "no se pudo enviar la consulta: %s" -#: libpq_fetch.c:270 +#: libpq_source.c:438 #, c-format msgid "could not set libpq connection to single row mode" msgstr "no se pudo establecer la coneción libpq a modo «single row»" -#: libpq_fetch.c:290 +#: libpq_source.c:468 #, c-format msgid "unexpected result while fetching remote files: %s" msgstr "resultados inesperados mientras se obtenían archivos remotos: %s" -#: libpq_fetch.c:296 +#: libpq_source.c:473 +#, fuzzy, c-format +#| msgid "received immediate shutdown request" +msgid "received more data chunks than requested" +msgstr "se recibió petición de apagado inmediato" + +#: libpq_source.c:477 #, c-format msgid "unexpected result set size while fetching remote files" msgstr "tamaño del conjunto de resultados inesperado mientras se obtenían archivos remotos" -#: libpq_fetch.c:302 +#: libpq_source.c:483 #, c-format msgid "unexpected data types in result set while fetching remote files: %u %u %u" msgstr "tipos de dato inesperados en el conjunto de resultados mientras se obtenían archivos remotos: %u %u %u" -#: libpq_fetch.c:310 +#: libpq_source.c:491 #, c-format msgid "unexpected result format while fetching remote files" msgstr "formato de resultados inesperado mientras se obtenían archivos remotos" -#: libpq_fetch.c:316 +#: libpq_source.c:497 #, c-format msgid "unexpected null values in result while fetching remote files" msgstr "valores nulos inesperados en el resultado mientras se obtenían archivos remotos" -#: libpq_fetch.c:320 +#: libpq_source.c:501 #, c-format msgid "unexpected result length while fetching remote files" msgstr "largo del resultado inesperado mientras se obtenían los archivos remotos" -#: libpq_fetch.c:381 +#: libpq_source.c:534 +#, c-format +msgid "received data for file \"%s\", when requested for \"%s\"" +msgstr "" + +#: libpq_source.c:538 +#, c-format +msgid "received data at offset %lld of file \"%s\", when requested for offset %lld" +msgstr "" + +#: libpq_source.c:550 +#, fuzzy, c-format +#| msgid "removed orphan archive status file \"%s\"" +msgid "received more than requested for file \"%s\"" +msgstr "eliminando archivo de estado huérfano «%s»" + +#: libpq_source.c:563 +#, fuzzy, c-format +#| msgid "unexpected end of line or lexeme" +msgid "unexpected number of data chunks received" +msgstr "fin de línea o lexema inesperado" + +#: libpq_source.c:606 #, c-format msgid "could not fetch remote file \"%s\": %s" msgstr "no se pudo obtener el archivo remoto «%s»: %s" -#: libpq_fetch.c:386 +#: libpq_source.c:611 #, c-format msgid "unexpected result set while fetching remote file \"%s\"" msgstr "conjunto de resultados inesperado mientras se obtenía el archivo remoto «%s»" -#: libpq_fetch.c:430 +#: local_source.c:86 #, c-format -msgid "could not send COPY data: %s" -msgstr "no se pudo enviar datos COPY: %s" +msgid "could not open source file \"%s\": %m" +msgstr "no se pudo abrir el archivo de origen «%s»: %m" -#: libpq_fetch.c:459 +#: local_source.c:90 #, c-format -msgid "could not send file list: %s" -msgstr "no se pudo enviar el listado de archivos: %s" +msgid "could not seek in source file: %m" +msgstr "no se pudo posicionar en archivo de origen: %m" -#: libpq_fetch.c:501 +#: local_source.c:109 #, c-format -msgid "could not send end-of-COPY: %s" -msgstr "no se pudo enviar fin-de-COPY: %s" +msgid "unexpected EOF while reading file \"%s\"" +msgstr "EOF inesperado mientras se leía el archivo «%s»" -#: libpq_fetch.c:507 +#: local_source.c:116 #, c-format -msgid "unexpected result while sending file list: %s" -msgstr "resultados inesperados mientras se enviaba el listado de archivos: %s" +msgid "could not close file \"%s\": %m" +msgstr "no se pudo cerrar el archivo «%s»: %m" -#: parsexlog.c:85 parsexlog.c:132 +#: parsexlog.c:89 parsexlog.c:142 #, c-format msgid "could not read WAL record at %X/%X: %s" msgstr "no se pudo leer el registro WAL en %X/%X: %s" -#: parsexlog.c:89 parsexlog.c:135 +#: parsexlog.c:93 parsexlog.c:145 #, c-format msgid "could not read WAL record at %X/%X" msgstr "no se pudo leer el registro WAL en %X/%X" -#: parsexlog.c:198 +#: parsexlog.c:208 #, c-format msgid "could not find previous WAL record at %X/%X: %s" msgstr "no se pudo encontrar el registro WAL anterior en %X/%X: %s" -#: parsexlog.c:202 +#: parsexlog.c:212 #, c-format msgid "could not find previous WAL record at %X/%X" msgstr "no se pudo encontrar el registro WAL anterior en %X/%X" -#: parsexlog.c:327 +#: parsexlog.c:337 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "no se pudo posicionar (seek) el archivo «%s»: %m" -#: parsexlog.c:407 +#: parsexlog.c:429 #, c-format msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmgr: %s, info: %02X" msgstr "el registro WAL modifica una relación, pero el tipo de registro no es reconocido lsn: %X/%X, rmgr: %s, info: %02X" -#: pg_rewind.c:78 +#: pg_rewind.c:84 #, c-format msgid "" "%s resynchronizes a PostgreSQL cluster with another copy of the cluster.\n" @@ -461,7 +472,7 @@ msgstr "" "%s resincroniza un cluster PostgreSQL con otra copia del cluster.\n" "\n" -#: pg_rewind.c:79 +#: pg_rewind.c:85 #, c-format msgid "" "Usage:\n" @@ -472,12 +483,12 @@ msgstr "" " %s [OPCION]...\n" "\n" -#: pg_rewind.c:80 +#: pg_rewind.c:86 #, c-format msgid "Options:\n" msgstr "Opciones:\n" -#: pg_rewind.c:81 +#: pg_rewind.c:87 #, c-format msgid "" " -c, --restore-target-wal use restore_command in target configuration to\n" @@ -486,39 +497,39 @@ msgstr "" " -c, --restore-target-wal utilizar restore_command de la configuración\n" " de destino para obtener archivos WAL\n" -#: pg_rewind.c:83 +#: pg_rewind.c:89 #, c-format msgid " -D, --target-pgdata=DIRECTORY existing data directory to modify\n" msgstr " -D, --target-pgdata=DIRECTORIO directorio de datos existente a modificar\n" -#: pg_rewind.c:84 +#: pg_rewind.c:90 #, c-format msgid " --source-pgdata=DIRECTORY source data directory to synchronize with\n" msgstr " --source-pgdata=DIRECTORIO directorio de datos de origen a sincronizar\n" -#: pg_rewind.c:85 +#: pg_rewind.c:91 #, c-format msgid " --source-server=CONNSTR source server to synchronize with\n" msgstr " --source-server=CONN servidor de origen a sincronizar\n" -#: pg_rewind.c:86 +#: pg_rewind.c:92 #, c-format msgid " -n, --dry-run stop before modifying anything\n" msgstr " -n, --dry-run detener antes de modificar nada\n" -#: pg_rewind.c:87 +#: pg_rewind.c:93 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written\n" " safely to disk\n" msgstr " -N, --no-sync no esperar que los cambios se sincronicen a disco\n" -#: pg_rewind.c:89 +#: pg_rewind.c:95 #, c-format msgid " -P, --progress write progress messages\n" msgstr " -P, --progress escribir mensajes de progreso\n" -#: pg_rewind.c:90 +#: pg_rewind.c:96 #, c-format msgid "" " -R, --write-recovery-conf write configuration for replication\n" @@ -527,29 +538,29 @@ msgstr "" " -R, --write-recovery-conf escribe configuración para replicación\n" " (requiere --source-server)\n" -#: pg_rewind.c:92 +#: pg_rewind.c:98 #, c-format msgid " --debug write a lot of debug messages\n" msgstr " --debug escribir muchos mensajes de depuración\n" -#: pg_rewind.c:93 +#: pg_rewind.c:99 #, c-format msgid " --no-ensure-shutdown do not automatically fix unclean shutdown\n" msgstr "" " --no-ensure-shutdown no corregir automáticamente un apagado\n" " no-limpio\n" -#: pg_rewind.c:94 +#: pg_rewind.c:100 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión y salir\n" -#: pg_rewind.c:95 +#: pg_rewind.c:101 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: pg_rewind.c:96 +#: pg_rewind.c:102 #, c-format msgid "" "\n" @@ -558,175 +569,201 @@ msgstr "" "\n" "Reporte errores a <%s>.\n" -#: pg_rewind.c:97 +#: pg_rewind.c:103 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: pg_rewind.c:159 pg_rewind.c:208 pg_rewind.c:215 pg_rewind.c:222 -#: pg_rewind.c:229 pg_rewind.c:237 +#: pg_rewind.c:164 pg_rewind.c:213 pg_rewind.c:220 pg_rewind.c:227 +#: pg_rewind.c:234 pg_rewind.c:242 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Pruebe «%s --help» para mayor información.\n" -#: pg_rewind.c:207 +#: pg_rewind.c:212 #, c-format msgid "no source specified (--source-pgdata or --source-server)" msgstr "no se especificó origen (--source-pgdata o --source-server)" -#: pg_rewind.c:214 +#: pg_rewind.c:219 #, c-format msgid "only one of --source-pgdata or --source-server can be specified" msgstr "sólo uno de --source-pgdata o --source-server puede ser especificado" -#: pg_rewind.c:221 +#: pg_rewind.c:226 #, c-format msgid "no target data directory specified (--target-pgdata)" msgstr "no se especificó directorio de datos de destino (--target-pgdata)" -#: pg_rewind.c:228 +#: pg_rewind.c:233 #, c-format msgid "no source server information (--source-server) specified for --write-recovery-conf" msgstr "no se especificó información de servidor de origen (--source-server) para --write-recovery-conf" -#: pg_rewind.c:235 +#: pg_rewind.c:240 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: pg_rewind.c:250 +#: pg_rewind.c:255 #, c-format msgid "cannot be executed by \"root\"" msgstr "no puede ser ejecutado por «root»" -#: pg_rewind.c:251 +#: pg_rewind.c:256 #, c-format msgid "You must run %s as the PostgreSQL superuser.\n" msgstr "Debe ejecutar %s con el superusuario de PostgreSQL.\n" -#: pg_rewind.c:262 +#: pg_rewind.c:267 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "no se pudo obtener los permisos del directorio «%s»: %m" -#: pg_rewind.c:316 +#: pg_rewind.c:287 +#, c-format +msgid "%s" +msgstr "%s" + +#: pg_rewind.c:290 +#, c-format +msgid "connected to server" +msgstr "conectado al servidor" + +#: pg_rewind.c:337 #, c-format msgid "source and target cluster are on the same timeline" msgstr "el cluster de origen y destino están en el mismo timeline" -#: pg_rewind.c:322 +#: pg_rewind.c:346 #, c-format msgid "servers diverged at WAL location %X/%X on timeline %u" msgstr "servidores divergieron en la posición de WAL %X/%X en el timeline %u" -#: pg_rewind.c:360 +#: pg_rewind.c:394 #, c-format msgid "no rewind required" msgstr "no se requiere rebobinar" -#: pg_rewind.c:369 +#: pg_rewind.c:403 #, c-format msgid "rewinding from last common checkpoint at %X/%X on timeline %u" msgstr "rebobinando desde el último checkpoint común en %X/%X en el timeline %u" -#: pg_rewind.c:378 +#: pg_rewind.c:413 #, c-format msgid "reading source file list" msgstr "leyendo la lista de archivos de origen" -#: pg_rewind.c:381 +#: pg_rewind.c:417 #, c-format msgid "reading target file list" msgstr "leyendo la lista de archivos de destino" -#: pg_rewind.c:392 +#: pg_rewind.c:426 #, c-format msgid "reading WAL in target" msgstr "leyendo WAL en destino" -#: pg_rewind.c:409 +#: pg_rewind.c:447 #, c-format msgid "need to copy %lu MB (total source directory size is %lu MB)" msgstr "se necesitan copiar %lu MB (tamaño total de directorio de origen es %lu MB)" -#: pg_rewind.c:427 -#, c-format -msgid "creating backup label and updating control file" -msgstr "creando etiqueta de respaldo y actualizando archivo de control" - -#: pg_rewind.c:457 +#: pg_rewind.c:465 #, c-format msgid "syncing target data directory" msgstr "sincronizando directorio de datos de destino" -#: pg_rewind.c:464 +#: pg_rewind.c:481 #, c-format msgid "Done!" msgstr "¡Listo!" -#: pg_rewind.c:476 +#: pg_rewind.c:564 +#, fuzzy, c-format +#| msgid "permission denied for database \"%s\"" +msgid "no action decided for file \"%s\"" +msgstr "permiso denegado a la base de datos «%s»" + +#: pg_rewind.c:596 +#, c-format +msgid "source system was modified while pg_rewind was running" +msgstr "" + +#: pg_rewind.c:600 +#, c-format +msgid "creating backup label and updating control file" +msgstr "creando etiqueta de respaldo y actualizando archivo de control" + +#: pg_rewind.c:650 +#, c-format +msgid "source system was in unexpected state at end of rewind" +msgstr "" + +#: pg_rewind.c:681 #, c-format msgid "source and target clusters are from different systems" msgstr "clusters de origen y destino son de sistemas diferentes" -#: pg_rewind.c:484 +#: pg_rewind.c:689 #, c-format msgid "clusters are not compatible with this version of pg_rewind" msgstr "los clusters no son compatibles con esta versión de pg_rewind" -#: pg_rewind.c:494 +#: pg_rewind.c:699 #, c-format msgid "target server needs to use either data checksums or \"wal_log_hints = on\"" msgstr "el servidor de destino necesita tener sumas de verificación de datos o «wal_log_hints» activados" -#: pg_rewind.c:505 +#: pg_rewind.c:710 #, c-format msgid "target server must be shut down cleanly" msgstr "el directorio de destino debe estar apagado limpiamente" -#: pg_rewind.c:515 +#: pg_rewind.c:720 #, c-format msgid "source data directory must be shut down cleanly" msgstr "el directorio de origen debe estar apagado limpiamente" -#: pg_rewind.c:567 +#: pg_rewind.c:772 #, c-format msgid "%*s/%s kB (%d%%) copied" msgstr "%*s/%s kB (%d%%) copiados" -#: pg_rewind.c:630 +#: pg_rewind.c:835 #, c-format msgid "invalid control file" msgstr "archivo de control no válido" -#: pg_rewind.c:714 +#: pg_rewind.c:919 #, c-format msgid "could not find common ancestor of the source and target cluster's timelines" msgstr "no se pudo encontrar un ancestro común en el timeline de los clusters de origen y destino" -#: pg_rewind.c:755 +#: pg_rewind.c:960 #, c-format msgid "backup label buffer too small" msgstr "el búfer del backup label es demasiado pequeño" -#: pg_rewind.c:778 +#: pg_rewind.c:983 #, c-format msgid "unexpected control file CRC" msgstr "CRC de archivo de control inesperado" -#: pg_rewind.c:788 +#: pg_rewind.c:995 #, c-format msgid "unexpected control file size %d, expected %d" msgstr "tamaño del archivo de control %d inesperado, se esperaba %d" -#: pg_rewind.c:797 +#: pg_rewind.c:1004 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "El tamaño del segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el archivo de control especifica %d byte" msgstr[1] "El tamaño del segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el archivo de control especifica %d bytes" -#: pg_rewind.c:854 pg_rewind.c:912 +#: pg_rewind.c:1043 pg_rewind.c:1101 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -737,7 +774,7 @@ msgstr "" "directorio que «%s».\n" "Verifique su instalación." -#: pg_rewind.c:859 pg_rewind.c:917 +#: pg_rewind.c:1048 pg_rewind.c:1106 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -748,22 +785,22 @@ msgstr "" "pero no es de la misma versión que %s.\n" "Verifique su instalación." -#: pg_rewind.c:880 +#: pg_rewind.c:1069 #, c-format msgid "restore_command is not set in the target cluster" msgstr "restore_command no está definido en el clúster de destino" -#: pg_rewind.c:923 +#: pg_rewind.c:1112 #, c-format msgid "executing \"%s\" for target server to complete crash recovery" msgstr "ejecutando «%s» en el servidor de destino para completar la recuperación de caídas" -#: pg_rewind.c:943 +#: pg_rewind.c:1132 #, c-format msgid "postgres single-user mode in target cluster failed" msgstr "el modo «single-user» en el servidor de destino falló" -#: pg_rewind.c:944 +#: pg_rewind.c:1133 #, c-format msgid "Command was: %s" msgstr "La orden era: % s" @@ -823,14 +860,15 @@ msgstr "largo de registro no válido en %X/%X: se esperaba %u, se obtuvo %u" msgid "record length %u at %X/%X too long" msgstr "largo de registro %u en %X/%X demasiado largo" -#: xlogreader.c:454 +#: xlogreader.c:453 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "no hay bandera de contrecord en %X/%X" -#: xlogreader.c:467 -#, c-format -msgid "invalid contrecord length %u at %X/%X" +#: xlogreader.c:466 +#, fuzzy, c-format +#| msgid "invalid contrecord length %u at %X/%X" +msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "largo de contrecord %u no válido en %X/%X" #: xlogreader.c:703 @@ -838,102 +876,132 @@ msgstr "largo de contrecord %u no válido en %X/%X" msgid "invalid resource manager ID %u at %X/%X" msgstr "ID de gestor de recursos %u no válido en %X/%X" -#: xlogreader.c:717 xlogreader.c:734 +#: xlogreader.c:716 xlogreader.c:732 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "registro con prev-link %X/%X incorrecto en %X/%X" -#: xlogreader.c:771 +#: xlogreader.c:768 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "suma de verificación de los datos del gestor de recursos incorrecta en el registro en %X/%X" -#: xlogreader.c:808 +#: xlogreader.c:805 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "número mágico %04X no válido en archivo %s, posición %u" -#: xlogreader.c:822 xlogreader.c:863 +#: xlogreader.c:819 xlogreader.c:860 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "info bits %04X no válidos en archivo %s, posición %u" -#: xlogreader.c:837 +#: xlogreader.c:834 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "archivo WAL es de un sistema de bases de datos distinto: identificador de sistema en archivo WAL es %llu, identificador en pg_control es %llu" -#: xlogreader.c:845 +#: xlogreader.c:842 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: tamaño de segmento incorrecto en cabecera de paǵina" -#: xlogreader.c:851 +#: xlogreader.c:848 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: XLOG_BLCKSZ incorrecto en cabecera de paǵina" -#: xlogreader.c:882 +#: xlogreader.c:879 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "pageaddr %X/%X inesperado en archivo %s, posición %u" -#: xlogreader.c:907 +#: xlogreader.c:904 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "ID de timeline %u fuera de secuencia (después de %u) en archivo %s, posición %u" -#: xlogreader.c:1247 +#: xlogreader.c:1249 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u fuera de orden en %X/%X" -#: xlogreader.c:1270 +#: xlogreader.c:1271 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA está definido, pero no hay datos en %X/%X" -#: xlogreader.c:1277 +#: xlogreader.c:1278 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA no está definido, pero el largo de los datos es %u en %X/%X" -#: xlogreader.c:1313 +#: xlogreader.c:1314 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE está definido, pero posición del agujero es %u largo %u largo de imagen %u en %X/%X" -#: xlogreader.c:1329 +#: xlogreader.c:1330 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE no está definido, pero posición del agujero es %u largo %u en %X/%X" -#: xlogreader.c:1344 +#: xlogreader.c:1345 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%X" -#: xlogreader.c:1359 +#: xlogreader.c:1360 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED está definido, pero largo de imagen de bloque es %u en %X/%X" -#: xlogreader.c:1375 +#: xlogreader.c:1376 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL está definido, pero no hay «rel» anterior en %X/%X " -#: xlogreader.c:1387 +#: xlogreader.c:1388 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "block_id %u no válido en %X/%X" -#: xlogreader.c:1476 +#: xlogreader.c:1475 #, c-format msgid "record with invalid length at %X/%X" msgstr "registro con largo no válido en %X/%X" -#: xlogreader.c:1565 +#: xlogreader.c:1564 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "imagen comprimida no válida en %X/%X, bloque %d" + +#~ msgid "unexpected result while sending file list: %s" +#~ msgstr "resultados inesperados mientras se enviaba el listado de archivos: %s" + +#~ msgid "could not send end-of-COPY: %s" +#~ msgstr "no se pudo enviar fin-de-COPY: %s" + +#~ msgid "could not send file list: %s" +#~ msgstr "no se pudo enviar el listado de archivos: %s" + +#~ msgid "could not send COPY data: %s" +#~ msgstr "no se pudo enviar datos COPY: %s" + +#~ msgid "source server must not be in recovery mode" +#~ msgstr "el servidor de origen no debe estar en modo de recuperación" + +#~ msgid "could not connect to server: %s" +#~ msgstr "no se pudo conectar al servidor: %s" + +#~ msgid "source file list is empty" +#~ msgstr "el listado de archivos de origen está vacío" + +#~ msgid "\"%s\" is not a regular file" +#~ msgstr "«%s» no es un archivo regular" + +#~ msgid "\"%s\" is not a symbolic link" +#~ msgstr "«%s» no es un link simbólico" + +#~ msgid "\"%s\" is not a directory" +#~ msgstr "«%s» no es un directorio" diff --git a/src/bin/pg_rewind/po/fr.po b/src/bin/pg_rewind/po/fr.po index 762900591f92c..6edae52affd2b 100644 --- a/src/bin/pg_rewind/po/fr.po +++ b/src/bin/pg_rewind/po/fr.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: pg_rewind (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-23 08:19+0000\n" -"PO-Revision-Date: 2021-04-23 10:43+0200\n" +"POT-Creation-Date: 2021-05-11 07:49+0000\n" +"PO-Revision-Date: 2021-05-11 10:18+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 2.4.3\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../../../src/common/logging.c:259 @@ -116,8 +116,8 @@ msgstr "n'a pas pu restaurer le fichier « %s » à partir de l'archive" #: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 #: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 -#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:67 parsexlog.c:126 -#: parsexlog.c:186 +#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:77 parsexlog.c:135 +#: parsexlog.c:195 #, c-format msgid "out of memory" msgstr "mémoire épuisée" @@ -207,12 +207,12 @@ msgstr "n'a pas pu supprimer le lien symbolique « %s » : %m" msgid "could not open file \"%s\" for reading: %m" msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %m" -#: file_ops.c:341 local_source.c:107 parsexlog.c:351 +#: file_ops.c:341 local_source.c:107 parsexlog.c:346 #, c-format msgid "could not read file \"%s\": %m" msgstr "n'a pas pu lire le fichier « %s » : %m" -#: file_ops.c:344 parsexlog.c:353 +#: file_ops.c:344 parsexlog.c:348 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %zu" @@ -417,32 +417,32 @@ msgstr "EOF inattendu lors de la lecture du fichier « %s »" msgid "could not close file \"%s\": %m" msgstr "n'a pas pu fermer le fichier « %s » : %m" -#: parsexlog.c:85 parsexlog.c:138 +#: parsexlog.c:89 parsexlog.c:142 #, c-format msgid "could not read WAL record at %X/%X: %s" msgstr "n'a pas pu lire l'enregistrement WAL précédent à %X/%X : %s" -#: parsexlog.c:89 parsexlog.c:141 +#: parsexlog.c:93 parsexlog.c:145 #, c-format msgid "could not read WAL record at %X/%X" msgstr "n'a pas pu lire l'enregistrement WAL précédent à %X/%X" -#: parsexlog.c:205 +#: parsexlog.c:208 #, c-format msgid "could not find previous WAL record at %X/%X: %s" msgstr "n'a pas pu trouver l'enregistrement WAL précédent à %X/%X : %s" -#: parsexlog.c:209 +#: parsexlog.c:212 #, c-format msgid "could not find previous WAL record at %X/%X" msgstr "n'a pas pu trouver l'enregistrement WAL précédent à %X/%X" -#: parsexlog.c:341 +#: parsexlog.c:337 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "n'a pas pu parcourir le fichier « %s » : %m" -#: parsexlog.c:436 +#: parsexlog.c:429 #, c-format msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmgr: %s, info: %02X" msgstr "l'enregistrement WAL modifie une relation mais le type d'enregistrement n'est pas reconnu: lsn : %X/%X, rmgr : %s, info : %02X" @@ -824,382 +824,388 @@ msgstr "" "Les identifiants timeline doivent être plus petits que les enfants des\n" "identifiants timeline." -#: xlogreader.c:747 +#: xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "décalage invalide de l'enregistrement %X/%X" -#: xlogreader.c:756 +#: xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "« contrecord » est requis par %X/%X" -#: xlogreader.c:819 xlogreader.c:1282 +#: xlogreader.c:398 xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "longueur invalide de l'enregistrement à %X/%X : voulait %u, a eu %u" -#: xlogreader.c:910 +#: xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "longueur trop importante de l'enregistrement %u à %X/%X" -#: xlogreader.c:970 +#: xlogreader.c:453 #, c-format -msgid "there is no contrecord flag at %X/%X reading %X/%X" -msgstr "il n'existe pas de drapeau contrecord à %X/%X en lisant %X/%X" +msgid "there is no contrecord flag at %X/%X" +msgstr "il n'existe pas de drapeau contrecord à %X/%X" -#: xlogreader.c:987 +#: xlogreader.c:466 #, c-format -msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" -msgstr "longueur %u invalide du contrecord à %X/%X en lisant %X/%X, attendait %u" +msgid "invalid contrecord length %u (expected %lld) at %X/%X" +msgstr "longueur %u invalide du contrecord (%lld attendu) à %X/%X" -#: xlogreader.c:1290 +#: xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "identifiant du gestionnaire de ressources invalide %u à %X/%X" -#: xlogreader.c:1303 xlogreader.c:1319 +#: xlogreader.c:716 xlogreader.c:732 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "enregistrement avec prev-link %X/%X incorrect à %X/%X" -#: xlogreader.c:1355 +#: xlogreader.c:768 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "" "somme de contrôle des données du gestionnaire de ressources incorrecte à\n" "l'enregistrement %X/%X" -#: xlogreader.c:1392 +#: xlogreader.c:805 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "numéro magique invalide %04X dans le segment %s, décalage %u" -#: xlogreader.c:1406 xlogreader.c:1447 +#: xlogreader.c:819 xlogreader.c:860 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "bits d'information %04X invalides dans le segment %s, décalage %u" -#: xlogreader.c:1421 +#: xlogreader.c:834 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "le fichier WAL provient d'un système différent : l'identifiant système de la base dans le fichier WAL est %llu, alors que l'identifiant système de la base dans pg_control est %llu" -#: xlogreader.c:1429 +#: xlogreader.c:842 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "Le fichier WAL provient d'un système différent : taille invalide du segment dans l'en-tête de page" -#: xlogreader.c:1435 +#: xlogreader.c:848 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "Le fichier WAL provient d'un système différent : XLOG_BLCKSZ invalide dans l'en-tête de page" -#: xlogreader.c:1466 +#: xlogreader.c:879 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "pageaddr %X/%X inattendue dans le journal de transactions %s, segment %u" -#: xlogreader.c:1491 +#: xlogreader.c:904 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "identifiant timeline %u hors de la séquence (après %u) dans le segment %s, décalage %u" -#: xlogreader.c:1913 +#: xlogreader.c:1249 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u désordonné à %X/%X" -#: xlogreader.c:1937 +#: xlogreader.c:1271 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA configuré, mais aucune donnée inclus à %X/%X" -#: xlogreader.c:1944 +#: xlogreader.c:1278 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA non configuré, mais la longueur des données est %u à %X/%X" -#: xlogreader.c:1980 +#: xlogreader.c:1314 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE activé, mais décalage trou %u longueur %u longueur image bloc %u à %X/%X" -#: xlogreader.c:1996 +#: xlogreader.c:1330 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE désactivé, mais décalage trou %u longueur %u à %X/%X" -#: xlogreader.c:2011 +#: xlogreader.c:1345 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X" -#: xlogreader.c:2026 +#: xlogreader.c:1360 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X" -#: xlogreader.c:2042 +#: xlogreader.c:1376 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL configuré, mais pas de relation précédente à %X/%X" -#: xlogreader.c:2054 +#: xlogreader.c:1388 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "block_id %u invalide à %X/%X" -#: xlogreader.c:2121 +#: xlogreader.c:1475 #, c-format msgid "record with invalid length at %X/%X" msgstr "enregistrement de longueur invalide à %X/%X" -#: xlogreader.c:2224 +#: xlogreader.c:1564 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "image compressée invalide à %X/%X, bloc %d" -#~ msgid "\"%s\" is not a directory" -#~ msgstr "« %s » n'est pas un répertoire" +#~ msgid "received data at offset " +#~ msgstr "a reçu des données au décalage " -#~ msgid "\"%s\" is not a symbolic link" -#~ msgstr "« %s » n'est pas un lien symbolique" +#~ msgid "could not connect to server: %s" +#~ msgstr "n'a pas pu se connecter au serveur : %s" -#~ msgid "\"%s\" is not a regular file" -#~ msgstr "« %s » n'est pas un fichier standard" +#~ msgid "" +#~ "The program \"postgres\" is needed by %s but was not found in the\n" +#~ "same directory as \"%s\".\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Le programme « postgres » est nécessaire à %s mais n'a pas été trouvé dans\n" +#~ "le même répertoire que « %s ».\n" +#~ "Vérifiez votre installation." -#~ msgid "source file list is empty" -#~ msgstr "la liste de fichiers sources est vide" +#~ msgid "" +#~ "The program \"postgres\" was found by \"%s\"\n" +#~ "but was not the same version as %s.\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Le programme « postgres » a été trouvé par « %s » mais n'est pas de la même\n" +#~ "version que « %s ».\n" +#~ "Vérifiez votre installation." -#~ msgid "source server must not be in recovery mode" -#~ msgstr "le serveur source ne doit pas être en mode restauration" +#~ msgid "" +#~ "The program \"%s\" is needed by %s but was\n" +#~ "not found in the same directory as \"%s\".\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Le programme « %s » est nécessaire pour %s, mais n'a pas été trouvé\n" +#~ "dans le même répertoire que « %s ».\n" +#~ "Vérifiez votre installation." -#~ msgid "could not send COPY data: %s" -#~ msgstr "n'a pas pu envoyer les données COPY : %s" +#~ msgid "" +#~ "The program \"%s\" was found by \"%s\" but was\n" +#~ "not the same version as %s.\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Le programme « %s » a été trouvé par « %s » mais n'était pas de la même version\n" +#~ "que %s.\n" +#~ "Vérifiez votre installation." -#~ msgid "could not send file list: %s" -#~ msgstr "n'a pas pu envoyer la liste de fichiers : %s" +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Rapporter les bogues à .\n" -#~ msgid "could not send end-of-COPY: %s" -#~ msgstr "n'a pas pu envoyer end-of-COPY : %s" +#~ msgid "WAL file is from different database system: incorrect XLOG_SEG_SIZE in page header" +#~ msgstr "le fichier WAL provient d'un système différent : XLOG_SEG_SIZE invalide dans l'en-tête de page" -#~ msgid "unexpected result while sending file list: %s" -#~ msgstr "résultat inattendu lors de l'envoi de la liste de fichiers : %s" +#~ msgid "Timeline IDs must be less than child timeline's ID.\n" +#~ msgstr "Les identifiants de ligne de temps doivent être inférieurs à l'identifiant de la ligne de temps enfant.\n" -#~ msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -#~ msgstr "%s : ATTENTION : ne peut pas créer les jetons restreints sur cette plateforme\n" +#~ msgid "Timeline IDs must be in increasing sequence.\n" +#~ msgstr "Les identifiants de ligne de temps doivent être dans une séquence croissante.\n" -#~ msgid "%s: could not open process token: error code %lu\n" -#~ msgstr "%s : n'a pas pu ouvrir le jeton du processus : code d'erreur %lu\n" +#~ msgid "invalid data in history file: %s\n" +#~ msgstr "données invalides dans le fichier historique : %s\n" -#~ msgid "%s: could not allocate SIDs: error code %lu\n" -#~ msgstr "%s : n'a pas pu allouer les SID : code d'erreur %lu\n" +#~ msgid "Expected a write-ahead log switchpoint location.\n" +#~ msgstr "Attendait un emplacement de bascule de journal de transactions.\n" -#~ msgid "%s: could not create restricted token: error code %lu\n" -#~ msgstr "%s : n'a pas pu créer le jeton restreint : code d'erreur %lu\n" +#~ msgid "Expected a numeric timeline ID.\n" +#~ msgstr "Attendait un identifiant numérique de ligne de temps.\n" -#~ msgid "%s: could not start process for command \"%s\": error code %lu\n" -#~ msgstr "%s : n'a pas pu démarrer le processus pour la commande « %s » : code d'erreur %lu\n" +#~ msgid "syntax error in history file: %s\n" +#~ msgstr "erreur de syntaxe dans le fichier historique : %s\n" -#~ msgid "%s: could not re-execute with restricted token: error code %lu\n" -#~ msgstr "%s : n'a pas pu ré-exécuter le jeton restreint : code d'erreur %lu\n" +#~ msgid "sync of target directory failed\n" +#~ msgstr "échec de la synchronisation du répertoire cible\n" -#~ msgid "%s: could not get exit code from subprocess: error code %lu\n" -#~ msgstr "%s : n'a pas pu récupérer le code de statut du sous-processus : code d'erreur %lu\n" +#~ msgid "" +#~ "The program \"initdb\" was found by \"%s\"\n" +#~ "but was not the same version as %s.\n" +#~ "Check your installation.\n" +#~ msgstr "" +#~ "Le programme « initdb » a été trouvé par « %s », mais n'est pas de la même version\n" +#~ "que %s.\n" +#~ "Vérifiez votre installation.\n" -#~ msgid "could not open directory \"%s\": %s\n" -#~ msgstr "n'a pas pu ouvrir le répertoire « %s » : %s\n" +#~ msgid "" +#~ "The program \"initdb\" is needed by %s but was\n" +#~ "not found in the same directory as \"%s\".\n" +#~ "Check your installation.\n" +#~ msgstr "" +#~ "Le programme « initdb » est nécessaire pour %s, mais n'a pas été trouvé\n" +#~ "dans le même répertoire que « %s ».\n" +#~ "Vérifiez votre installation.\n" -#~ msgid "could not stat file \"%s\": %s\n" -#~ msgstr "n'a pas pu tester le fichier « %s » : %s\n" +#~ msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte\n" +#~ msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes\n" +#~ msgstr[0] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octet\n" +#~ msgstr[1] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octets\n" -#~ msgid "could not read symbolic link \"%s\": %s\n" -#~ msgstr "n'a pas pu lire le lien symbolique « %s » : %s\n" +#~ msgid "%d: %X/%X - %X/%X\n" +#~ msgstr "%d : %X/%X - %X/%X\n" -#~ msgid "symbolic link \"%s\" target is too long\n" -#~ msgstr "la cible du lien symbolique « %s » est trop long\n" +#~ msgid "Target timeline history:\n" +#~ msgstr "Historique de la ligne de temps cible :\n" -#~ msgid "could not read directory \"%s\": %s\n" -#~ msgstr "n'a pas pu lire le répertoire « %s » : %s\n" +#~ msgid "Source timeline history:\n" +#~ msgstr "Historique de la ligne de temps source :\n" -#~ msgid "could not close directory \"%s\": %s\n" -#~ msgstr "n'a pas pu fermer le répertoire « %s » : %s\n" +#~ msgid "%s: could not read permissions of directory \"%s\": %s\n" +#~ msgstr "%s : n'a pas pu lire les droits sur le répertoire « %s » : %s\n" -#~ msgid "could not read file \"%s\": %s\n" -#~ msgstr "n'a pas pu lire le fichier « %s » : %s\n" +#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" +#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" -#~ msgid "could not close file \"%s\": %s\n" -#~ msgstr "n'a pas pu fermer le fichier « %s » : %s\n" +#~ msgid "could not read from file \"%s\": %s\n" +#~ msgstr "n'a pas pu lire le fichier « %s » : %s\n" -#~ msgid " block %u\n" -#~ msgstr " bloc %u\n" +#~ msgid "could not seek in file \"%s\": %s\n" +#~ msgstr "n'a pas pu chercher dans le fichier « %s » : %s\n" -#~ msgid "could not write file \"%s\": %s\n" -#~ msgstr "n'a pas pu écrire le fichier « %s » : %s\n" +#~ msgid "could not open file \"%s\": %s\n" +#~ msgstr "n'a pas pu ouvrir le fichier « %s » : %s\n" -#~ msgid "could not remove file \"%s\": %s\n" -#~ msgstr "n'a pas pu supprimer le fichier « %s » : %s\n" +#~ msgid "Failure, exiting\n" +#~ msgstr "Échec, sortie\n" -#~ msgid "could not truncate file \"%s\" to %u: %s\n" -#~ msgstr "n'a pas pu tronquer le fichier « %s » à %u : %s\n" +#~ msgid "could not create temporary table: %s" +#~ msgstr "n'a pas pu créer la table temporaire : %s" -#~ msgid "could not create directory \"%s\": %s\n" -#~ msgstr "n'a pas pu créer le répertoire « %s » : %s\n" +#~ msgid "fetched file \"%s\", length %d\n" +#~ msgstr "fichier récupéré « %s », longueur %d\n" -#~ msgid "could not remove directory \"%s\": %s\n" -#~ msgstr "n'a pas pu supprimer le répertoire « %s » : %s\n" +#~ msgid "received null value for chunk for file \"%s\", file has been deleted\n" +#~ msgstr "a reçu une valeur NULL pour une partie du fichier « %s », le fichier a été supprimé\n" -#~ msgid "could not remove symbolic link \"%s\": %s\n" -#~ msgstr "n'a pas pu supprimer le lien symbolique « %s » : %s\n" +#~ msgid "getting file chunks\n" +#~ msgstr "récupération des parties de fichier\n" -#~ msgid "could not open file \"%s\" for reading: %s\n" -#~ msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %s\n" +#~ msgid "could not set up connection context: %s" +#~ msgstr "n'a pas pu initialiser le contexte de connexion : « %s »" -#~ msgid "entry \"%s\" excluded from source file list\n" -#~ msgstr "enregistrement « %s » exclus de la liste des fichiers sources\n" +#~ msgid "%s (%s)\n" +#~ msgstr "%s (%s)\n" #~ msgid "entry \"%s\" excluded from target file list\n" #~ msgstr "enregistrement « %s » exclus de la liste des fichiers cibles\n" -#~ msgid "%s (%s)\n" -#~ msgstr "%s (%s)\n" +#~ msgid "entry \"%s\" excluded from source file list\n" +#~ msgstr "enregistrement « %s » exclus de la liste des fichiers sources\n" -#~ msgid "could not set up connection context: %s" -#~ msgstr "n'a pas pu initialiser le contexte de connexion : « %s »" +#~ msgid "could not open file \"%s\" for reading: %s\n" +#~ msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %s\n" -#~ msgid "getting file chunks\n" -#~ msgstr "récupération des parties de fichier\n" +#~ msgid "could not remove symbolic link \"%s\": %s\n" +#~ msgstr "n'a pas pu supprimer le lien symbolique « %s » : %s\n" -#~ msgid "received null value for chunk for file \"%s\", file has been deleted\n" -#~ msgstr "a reçu une valeur NULL pour une partie du fichier « %s », le fichier a été supprimé\n" +#~ msgid "could not remove directory \"%s\": %s\n" +#~ msgstr "n'a pas pu supprimer le répertoire « %s » : %s\n" -#~ msgid "fetched file \"%s\", length %d\n" -#~ msgstr "fichier récupéré « %s », longueur %d\n" +#~ msgid "could not create directory \"%s\": %s\n" +#~ msgstr "n'a pas pu créer le répertoire « %s » : %s\n" -#~ msgid "could not create temporary table: %s" -#~ msgstr "n'a pas pu créer la table temporaire : %s" +#~ msgid "could not truncate file \"%s\" to %u: %s\n" +#~ msgstr "n'a pas pu tronquer le fichier « %s » à %u : %s\n" -#~ msgid "Failure, exiting\n" -#~ msgstr "Échec, sortie\n" +#~ msgid "could not remove file \"%s\": %s\n" +#~ msgstr "n'a pas pu supprimer le fichier « %s » : %s\n" -#~ msgid "could not open file \"%s\": %s\n" -#~ msgstr "n'a pas pu ouvrir le fichier « %s » : %s\n" +#~ msgid "could not write file \"%s\": %s\n" +#~ msgstr "n'a pas pu écrire le fichier « %s » : %s\n" -#~ msgid "could not seek in file \"%s\": %s\n" -#~ msgstr "n'a pas pu chercher dans le fichier « %s » : %s\n" +#~ msgid " block %u\n" +#~ msgstr " bloc %u\n" -#~ msgid "could not read from file \"%s\": %s\n" +#~ msgid "could not close file \"%s\": %s\n" +#~ msgstr "n'a pas pu fermer le fichier « %s » : %s\n" + +#~ msgid "could not read file \"%s\": %s\n" #~ msgstr "n'a pas pu lire le fichier « %s » : %s\n" -#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" -#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" +#~ msgid "could not close directory \"%s\": %s\n" +#~ msgstr "n'a pas pu fermer le répertoire « %s » : %s\n" -#~ msgid "%s: could not read permissions of directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu lire les droits sur le répertoire « %s » : %s\n" +#~ msgid "could not read directory \"%s\": %s\n" +#~ msgstr "n'a pas pu lire le répertoire « %s » : %s\n" -#~ msgid "Source timeline history:\n" -#~ msgstr "Historique de la ligne de temps source :\n" +#~ msgid "symbolic link \"%s\" target is too long\n" +#~ msgstr "la cible du lien symbolique « %s » est trop long\n" -#~ msgid "Target timeline history:\n" -#~ msgstr "Historique de la ligne de temps cible :\n" +#~ msgid "could not read symbolic link \"%s\": %s\n" +#~ msgstr "n'a pas pu lire le lien symbolique « %s » : %s\n" -#~ msgid "%d: %X/%X - %X/%X\n" -#~ msgstr "%d : %X/%X - %X/%X\n" +#~ msgid "could not stat file \"%s\": %s\n" +#~ msgstr "n'a pas pu tester le fichier « %s » : %s\n" -#~ msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte\n" -#~ msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes\n" -#~ msgstr[0] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octet\n" -#~ msgstr[1] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octets\n" +#~ msgid "could not open directory \"%s\": %s\n" +#~ msgstr "n'a pas pu ouvrir le répertoire « %s » : %s\n" -#~ msgid "" -#~ "The program \"initdb\" is needed by %s but was\n" -#~ "not found in the same directory as \"%s\".\n" -#~ "Check your installation.\n" -#~ msgstr "" -#~ "Le programme « initdb » est nécessaire pour %s, mais n'a pas été trouvé\n" -#~ "dans le même répertoire que « %s ».\n" -#~ "Vérifiez votre installation.\n" +#~ msgid "%s: could not get exit code from subprocess: error code %lu\n" +#~ msgstr "%s : n'a pas pu récupérer le code de statut du sous-processus : code d'erreur %lu\n" -#~ msgid "" -#~ "The program \"initdb\" was found by \"%s\"\n" -#~ "but was not the same version as %s.\n" -#~ "Check your installation.\n" -#~ msgstr "" -#~ "Le programme « initdb » a été trouvé par « %s », mais n'est pas de la même version\n" -#~ "que %s.\n" -#~ "Vérifiez votre installation.\n" +#~ msgid "%s: could not re-execute with restricted token: error code %lu\n" +#~ msgstr "%s : n'a pas pu ré-exécuter le jeton restreint : code d'erreur %lu\n" -#~ msgid "sync of target directory failed\n" -#~ msgstr "échec de la synchronisation du répertoire cible\n" +#~ msgid "%s: could not start process for command \"%s\": error code %lu\n" +#~ msgstr "%s : n'a pas pu démarrer le processus pour la commande « %s » : code d'erreur %lu\n" -#~ msgid "syntax error in history file: %s\n" -#~ msgstr "erreur de syntaxe dans le fichier historique : %s\n" +#~ msgid "%s: could not create restricted token: error code %lu\n" +#~ msgstr "%s : n'a pas pu créer le jeton restreint : code d'erreur %lu\n" -#~ msgid "Expected a numeric timeline ID.\n" -#~ msgstr "Attendait un identifiant numérique de ligne de temps.\n" +#~ msgid "%s: could not allocate SIDs: error code %lu\n" +#~ msgstr "%s : n'a pas pu allouer les SID : code d'erreur %lu\n" -#~ msgid "Expected a write-ahead log switchpoint location.\n" -#~ msgstr "Attendait un emplacement de bascule de journal de transactions.\n" +#~ msgid "%s: could not open process token: error code %lu\n" +#~ msgstr "%s : n'a pas pu ouvrir le jeton du processus : code d'erreur %lu\n" -#~ msgid "invalid data in history file: %s\n" -#~ msgstr "données invalides dans le fichier historique : %s\n" +#~ msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +#~ msgstr "%s : ATTENTION : ne peut pas créer les jetons restreints sur cette plateforme\n" -#~ msgid "Timeline IDs must be in increasing sequence.\n" -#~ msgstr "Les identifiants de ligne de temps doivent être dans une séquence croissante.\n" +#~ msgid "unexpected result while sending file list: %s" +#~ msgstr "résultat inattendu lors de l'envoi de la liste de fichiers : %s" -#~ msgid "Timeline IDs must be less than child timeline's ID.\n" -#~ msgstr "Les identifiants de ligne de temps doivent être inférieurs à l'identifiant de la ligne de temps enfant.\n" +#~ msgid "could not send end-of-COPY: %s" +#~ msgstr "n'a pas pu envoyer end-of-COPY : %s" -#~ msgid "WAL file is from different database system: incorrect XLOG_SEG_SIZE in page header" -#~ msgstr "le fichier WAL provient d'un système différent : XLOG_SEG_SIZE invalide dans l'en-tête de page" +#~ msgid "could not send file list: %s" +#~ msgstr "n'a pas pu envoyer la liste de fichiers : %s" -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Rapporter les bogues à .\n" +#~ msgid "could not send COPY data: %s" +#~ msgstr "n'a pas pu envoyer les données COPY : %s" -#~ msgid "" -#~ "The program \"%s\" was found by \"%s\" but was\n" -#~ "not the same version as %s.\n" -#~ "Check your installation." -#~ msgstr "" -#~ "Le programme « %s » a été trouvé par « %s » mais n'était pas de la même version\n" -#~ "que %s.\n" -#~ "Vérifiez votre installation." +#~ msgid "source server must not be in recovery mode" +#~ msgstr "le serveur source ne doit pas être en mode restauration" -#~ msgid "" -#~ "The program \"%s\" is needed by %s but was\n" -#~ "not found in the same directory as \"%s\".\n" -#~ "Check your installation." -#~ msgstr "" -#~ "Le programme « %s » est nécessaire pour %s, mais n'a pas été trouvé\n" -#~ "dans le même répertoire que « %s ».\n" -#~ "Vérifiez votre installation." +#~ msgid "source file list is empty" +#~ msgstr "la liste de fichiers sources est vide" -#~ msgid "" -#~ "The program \"postgres\" was found by \"%s\"\n" -#~ "but was not the same version as %s.\n" -#~ "Check your installation." -#~ msgstr "" -#~ "Le programme « postgres » a été trouvé par « %s » mais n'est pas de la même\n" -#~ "version que « %s ».\n" -#~ "Vérifiez votre installation." +#~ msgid "\"%s\" is not a regular file" +#~ msgstr "« %s » n'est pas un fichier standard" -#~ msgid "" -#~ "The program \"postgres\" is needed by %s but was not found in the\n" -#~ "same directory as \"%s\".\n" -#~ "Check your installation." -#~ msgstr "" -#~ "Le programme « postgres » est nécessaire à %s mais n'a pas été trouvé dans\n" -#~ "le même répertoire que « %s ».\n" -#~ "Vérifiez votre installation." +#~ msgid "\"%s\" is not a symbolic link" +#~ msgstr "« %s » n'est pas un lien symbolique" -#~ msgid "could not connect to server: %s" -#~ msgstr "n'a pas pu se connecter au serveur : %s" +#~ msgid "\"%s\" is not a directory" +#~ msgstr "« %s » n'est pas un répertoire" -#~ msgid "received data at offset " -#~ msgstr "a reçu des données au décalage " +#~ msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" +#~ msgstr "longueur %u invalide du contrecord à %X/%X en lisant %X/%X, attendait %u" + +#~ msgid "there is no contrecord flag at %X/%X reading %X/%X" +#~ msgstr "il n'existe pas de drapeau contrecord à %X/%X en lisant %X/%X" diff --git a/src/bin/pg_test_fsync/nls.mk b/src/bin/pg_test_fsync/nls.mk index 15b35ddc3e06e..3449f1b7affe9 100644 --- a/src/bin/pg_test_fsync/nls.mk +++ b/src/bin/pg_test_fsync/nls.mk @@ -1,5 +1,5 @@ # src/bin/pg_test_fsync/nls.mk CATALOG_NAME = pg_test_fsync -AVAIL_LANGUAGES = cs de es fr ja ko pl ru sv tr uk vi zh_CN +AVAIL_LANGUAGES = cs de el es fr ja ko pl ru sv tr uk vi zh_CN GETTEXT_FILES = pg_test_fsync.c GETTEXT_TRIGGERS = die diff --git a/src/bin/pg_test_fsync/po/el.po b/src/bin/pg_test_fsync/po/el.po new file mode 100644 index 0000000000000..842e139a0e5a4 --- /dev/null +++ b/src/bin/pg_test_fsync/po/el.po @@ -0,0 +1,175 @@ +# Greek message translation file for pg_test_fsync +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_test_fsync (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_test_fsync (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-05-05 06:49+0000\n" +"PO-Revision-Date: 2021-05-05 10:54+0200\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" +"X-Generator: Poedit 2.4.3\n" + +#. translator: maintain alignment with NA_FORMAT +#: pg_test_fsync.c:31 +#, c-format +msgid "%13.3f ops/sec %6.0f usecs/op\n" +msgstr "%13.3f ops/sec %6.0f usecs/op\n" + +#: pg_test_fsync.c:159 +#, c-format +msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n" +msgstr "Χρήση: %s [-f FILENAME] [-s SECS-PER-TEST]\n" + +#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" + +#: pg_test_fsync.c:216 +#, c-format +msgid "%u second per test\n" +msgid_plural "%u seconds per test\n" +msgstr[0] "%u δευτερόλεπτο ανά τεστ\n" +msgstr[1] "%u δευτερόλεπτα ανά τεστ\n" + +#: pg_test_fsync.c:221 +#, c-format +msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n" +msgstr "O_DIRECT υποστηρίζεται σε αυτήν την πλατφόρμα για open_datasync και open_sync.\n" + +#: pg_test_fsync.c:223 +#, c-format +msgid "Direct I/O is not supported on this platform.\n" +msgstr "Άμεσο I/O δεν υποστηρίζεται σε αυτήν την πλατφόρμα.\n" + +#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339 +#: pg_test_fsync.c:363 pg_test_fsync.c:506 pg_test_fsync.c:518 +#: pg_test_fsync.c:534 pg_test_fsync.c:540 pg_test_fsync.c:562 +msgid "could not open output file" +msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου εξόδου" + +#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323 +#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:410 +#: pg_test_fsync.c:469 pg_test_fsync.c:508 pg_test_fsync.c:536 +#: pg_test_fsync.c:567 +msgid "write failed" +msgstr "απέτυχε η εγγραφή" + +#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374 +#: pg_test_fsync.c:510 pg_test_fsync.c:542 +msgid "fsync failed" +msgstr "fsync απέτυχε" + +#: pg_test_fsync.c:270 +#, c-format +msgid "" +"\n" +"Compare file sync methods using one %dkB write:\n" +msgstr "" +"\n" +"Συγκρίνετε τις μεθόδους συγχρονισμού αρχείων χρησιμοποιώντας μία εγγραφή %dkB:\n" + +#: pg_test_fsync.c:272 +#, c-format +msgid "" +"\n" +"Compare file sync methods using two %dkB writes:\n" +msgstr "" +"\n" +"Συγκρίνετε τις μεθόδους συγχρονισμού αρχείων χρησιμοποιώντας δύο εγγραφές %dkB:\n" + +#: pg_test_fsync.c:273 +#, c-format +msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n" +msgstr "(με wal_sync_method σειρά προτίμησης, εκτός από fdatasync είναι η προεπιλογή σε Linux)\n" + +#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:457 +msgid "n/a*" +msgstr "n/a*" + +#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379 +#: pg_test_fsync.c:416 pg_test_fsync.c:475 +msgid "n/a" +msgstr "n/a" + +#: pg_test_fsync.c:421 +#, c-format +msgid "" +"* This file system and its mount options do not support direct\n" +" I/O, e.g. ext4 in journaled mode.\n" +msgstr "" +"* Αυτό το σύστημα αρχείων και οι επιλογές προσάρτησής του δεν υποστηρίζουν\n" +" άμεσο I/O, π.χ. ext4 σε λειτουργία journal.\n" + +#: pg_test_fsync.c:429 +#, c-format +msgid "" +"\n" +"Compare open_sync with different write sizes:\n" +msgstr "" +"\n" +"Συγκρίνετε open_sync με διαφορετικά μεγέθη εγγραφής:\n" + +#: pg_test_fsync.c:430 +#, c-format +msgid "" +"(This is designed to compare the cost of writing 16kB in different write\n" +"open_sync sizes.)\n" +msgstr "" +"(Αυτό έχει σχεδιαστεί για να συγκρίνει το κόστος της γραφής 16kB σε διαφορετικά\n" +"μεγέθη open_sync.)\n" + +#: pg_test_fsync.c:433 +msgid " 1 * 16kB open_sync write" +msgstr " 1 * 16kB open_sync εγγραφή" + +#: pg_test_fsync.c:434 +msgid " 2 * 8kB open_sync writes" +msgstr " 2 * 8kB open_sync εγγραφές" + +#: pg_test_fsync.c:435 +msgid " 4 * 4kB open_sync writes" +msgstr " 4 * 4kB open_sync εγγραφές" + +#: pg_test_fsync.c:436 +msgid " 8 * 2kB open_sync writes" +msgstr " 8 * 2kB open_sync εγγραφές" + +#: pg_test_fsync.c:437 +msgid "16 * 1kB open_sync writes" +msgstr "16 * 1kB open_sync εγγραφές" + +#: pg_test_fsync.c:491 +#, c-format +msgid "" +"\n" +"Test if fsync on non-write file descriptor is honored:\n" +msgstr "" +"\n" +"Ελέγξτε εάν τηρείται το fsync σε μη-εγγράψιμο περιγραφέα αρχείων:\n" + +#: pg_test_fsync.c:492 +#, c-format +msgid "" +"(If the times are similar, fsync() can sync data written on a different\n" +"descriptor.)\n" +msgstr "" +"(Εάν οι χρόνοι είναι παρόμοιοι, το fsync() μπορεί να συγχρονίσει δεδομένα εγγεγραμμένα\n" +"σε διαφορετικό περιγραφέα.)\n" + +#: pg_test_fsync.c:557 +#, c-format +msgid "" +"\n" +"Non-sync'ed %dkB writes:\n" +msgstr "" +"\n" +"Μη-συγχρονισμένες %dkB εγγραφές:\n" diff --git a/src/bin/pg_test_fsync/po/es.po b/src/bin/pg_test_fsync/po/es.po index 52867707c47bb..bb39df7efacd7 100644 --- a/src/bin/pg_test_fsync/po/es.po +++ b/src/bin/pg_test_fsync/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_test_fsync (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:47+0000\n" +"POT-Creation-Date: 2021-05-14 19:49+0000\n" "PO-Revision-Date: 2019-06-06 17:25-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -21,57 +21,59 @@ msgstr "" "X-Generator: BlackCAT 1.0\n" #. translator: maintain alignment with NA_FORMAT -#: pg_test_fsync.c:30 +#: pg_test_fsync.c:31 #, c-format msgid "%13.3f ops/sec %6.0f usecs/op\n" msgstr "%13.3f ops/seg %6.0f usegs/op\n" -#: pg_test_fsync.c:156 +#: pg_test_fsync.c:159 #, c-format msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n" msgstr "Empleo: %s [-f ARCHIVO] [-s SEG-POR-PRUEBA]\n" -#: pg_test_fsync.c:180 pg_test_fsync.c:191 +#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Pruebe «%s --help» para mayor información.\n" -#: pg_test_fsync.c:196 -#, c-format -msgid "%d second per test\n" -msgid_plural "%d seconds per test\n" +#: pg_test_fsync.c:216 +#, fuzzy, c-format +#| msgid "%d second per test\n" +#| msgid_plural "%d seconds per test\n" +msgid "%u second per test\n" +msgid_plural "%u seconds per test\n" msgstr[0] "%d segundo por prueba\n" msgstr[1] "%d segundos por prueba\n" -#: pg_test_fsync.c:201 +#: pg_test_fsync.c:221 #, c-format msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n" msgstr "O_DIRECT tiene soporte en esta plataforma para open_datasync y open_sync.\n" -#: pg_test_fsync.c:203 +#: pg_test_fsync.c:223 #, c-format msgid "Direct I/O is not supported on this platform.\n" msgstr "Direct I/O no está soportado en esta plataforma.\n" -#: pg_test_fsync.c:228 pg_test_fsync.c:293 pg_test_fsync.c:317 -#: pg_test_fsync.c:340 pg_test_fsync.c:481 pg_test_fsync.c:493 -#: pg_test_fsync.c:509 pg_test_fsync.c:515 pg_test_fsync.c:540 +#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339 +#: pg_test_fsync.c:363 pg_test_fsync.c:507 pg_test_fsync.c:519 +#: pg_test_fsync.c:535 pg_test_fsync.c:541 pg_test_fsync.c:563 msgid "could not open output file" msgstr "no se pudo abrir el archivo de salida" -#: pg_test_fsync.c:232 pg_test_fsync.c:274 pg_test_fsync.c:299 -#: pg_test_fsync.c:323 pg_test_fsync.c:346 pg_test_fsync.c:384 -#: pg_test_fsync.c:442 pg_test_fsync.c:483 pg_test_fsync.c:511 -#: pg_test_fsync.c:542 +#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323 +#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:411 +#: pg_test_fsync.c:470 pg_test_fsync.c:509 pg_test_fsync.c:537 +#: pg_test_fsync.c:568 msgid "write failed" msgstr "escritura falló" -#: pg_test_fsync.c:236 pg_test_fsync.c:325 pg_test_fsync.c:348 -#: pg_test_fsync.c:485 pg_test_fsync.c:517 +#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374 +#: pg_test_fsync.c:511 pg_test_fsync.c:543 msgid "fsync failed" msgstr "fsync falló" -#: pg_test_fsync.c:250 +#: pg_test_fsync.c:270 #, c-format msgid "" "\n" @@ -80,7 +82,7 @@ msgstr "" "\n" "Comparar métodos de sincronización de archivos usando una escritura de %dkB:\n" -#: pg_test_fsync.c:252 +#: pg_test_fsync.c:272 #, c-format msgid "" "\n" @@ -89,26 +91,21 @@ msgstr "" "\n" "Comparar métodos de sincronización de archivos usando dos escrituras de %dkB:\n" -#: pg_test_fsync.c:253 +#: pg_test_fsync.c:273 #, c-format msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n" msgstr "(en orden de preferencia de wal_sync_method, excepto en Linux donde fdatasync es el predeterminado)\n" -#: pg_test_fsync.c:264 pg_test_fsync.c:367 pg_test_fsync.c:433 +#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:458 msgid "n/a*" msgstr "n/a*" -#: pg_test_fsync.c:276 pg_test_fsync.c:302 pg_test_fsync.c:327 -#: pg_test_fsync.c:350 pg_test_fsync.c:386 pg_test_fsync.c:444 -msgid "seek failed" -msgstr "búsqueda falló" - -#: pg_test_fsync.c:282 pg_test_fsync.c:307 pg_test_fsync.c:355 -#: pg_test_fsync.c:392 pg_test_fsync.c:450 +#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379 +#: pg_test_fsync.c:417 pg_test_fsync.c:476 msgid "n/a" msgstr "n/a" -#: pg_test_fsync.c:397 +#: pg_test_fsync.c:422 #, c-format msgid "" "* This file system and its mount options do not support direct\n" @@ -117,7 +114,7 @@ msgstr "" "* Este sistema de archivos con sus opciones de montaje no soportan\n" " Direct I/O, e.g. ext4 en modo journal.\n" -#: pg_test_fsync.c:405 +#: pg_test_fsync.c:430 #, c-format msgid "" "\n" @@ -126,7 +123,7 @@ msgstr "" "\n" "Comparar open_sync con diferentes tamaños de escritura:\n" -#: pg_test_fsync.c:406 +#: pg_test_fsync.c:431 #, c-format msgid "" "(This is designed to compare the cost of writing 16kB in different write\n" @@ -135,27 +132,27 @@ msgstr "" "(Esto está diseñado para comparar el costo de escribir 16kB en diferentes\n" "tamaños de escrituras open_sync.)\n" -#: pg_test_fsync.c:409 +#: pg_test_fsync.c:434 msgid " 1 * 16kB open_sync write" msgstr " 1 * 16kB escritura open_sync" -#: pg_test_fsync.c:410 +#: pg_test_fsync.c:435 msgid " 2 * 8kB open_sync writes" msgstr " 2 * 8kB escrituras open_sync" -#: pg_test_fsync.c:411 +#: pg_test_fsync.c:436 msgid " 4 * 4kB open_sync writes" msgstr " 4 * 4kB escrituras open_sync" -#: pg_test_fsync.c:412 +#: pg_test_fsync.c:437 msgid " 8 * 2kB open_sync writes" msgstr " 8 * 2kB escrituras open_sync" -#: pg_test_fsync.c:413 +#: pg_test_fsync.c:438 msgid "16 * 1kB open_sync writes" msgstr "16 * 1kB escrituras open_sync" -#: pg_test_fsync.c:466 +#: pg_test_fsync.c:492 #, c-format msgid "" "\n" @@ -164,7 +161,7 @@ msgstr "" "\n" "Probar si se respeta fsync en un descriptor de archivo que no es de escritura:\n" -#: pg_test_fsync.c:467 +#: pg_test_fsync.c:493 #, c-format msgid "" "(If the times are similar, fsync() can sync data written on a different\n" @@ -173,7 +170,7 @@ msgstr "" "(Si los tiempos son similares, fsync() puede sincronizar datos escritos\n" "en un descriptor diferente.)\n" -#: pg_test_fsync.c:532 +#: pg_test_fsync.c:558 #, c-format msgid "" "\n" @@ -181,3 +178,6 @@ msgid "" msgstr "" "\n" "Escrituras de %dkB no sincronizadas:\n" + +#~ msgid "seek failed" +#~ msgstr "búsqueda falló" diff --git a/src/bin/pg_test_timing/nls.mk b/src/bin/pg_test_timing/nls.mk index 91dedb15410e7..126f45e2cb42b 100644 --- a/src/bin/pg_test_timing/nls.mk +++ b/src/bin/pg_test_timing/nls.mk @@ -1,4 +1,4 @@ # src/bin/pg_test_timing/nls.mk CATALOG_NAME = pg_test_timing -AVAIL_LANGUAGES = cs de es fr ja ko pl ru sv tr uk vi zh_CN +AVAIL_LANGUAGES = cs de el es fr ja ko pl ru sv tr uk vi zh_CN GETTEXT_FILES = pg_test_timing.c diff --git a/src/bin/pg_test_timing/po/el.po b/src/bin/pg_test_timing/po/el.po new file mode 100644 index 0000000000000..49e5f063de496 --- /dev/null +++ b/src/bin/pg_test_timing/po/el.po @@ -0,0 +1,83 @@ +# Greek message translation file for pg_test_timing +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_test_timing (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_test_timing (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-04-27 06:17+0000\n" +"PO-Revision-Date: 2021-04-28 10:43+0200\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" +"X-Generator: Poedit 2.4.2\n" + +#: pg_test_timing.c:59 +#, c-format +msgid "Usage: %s [-d DURATION]\n" +msgstr "Χρήση: %s [-d DURATION]\n" + +#: pg_test_timing.c:81 +#, c-format +msgid "%s: invalid argument for option %s\n" +msgstr "%s: μη έγκυρη παράμετρος για την επιλογή %s\n" + +#: pg_test_timing.c:83 pg_test_timing.c:97 pg_test_timing.c:109 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" + +#: pg_test_timing.c:90 +#, c-format +msgid "%s: %s must be in range %u..%u\n" +msgstr "%s: %s πρέπει να βρίσκεται εντός εύρους %u..%u\n" + +#: pg_test_timing.c:107 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (πρώτη είναι η “%s”)\n" + +#: pg_test_timing.c:115 +#, c-format +msgid "Testing timing overhead for %u second.\n" +msgid_plural "Testing timing overhead for %u seconds.\n" +msgstr[0] "Έλεγχος επίφορτου χρονισμού για %u δευτερόλεπτο.\n" +msgstr[1] "Έλεγχος επίφορτου χρονισμού για %u δευτερόλεπτα.\n" + +#: pg_test_timing.c:151 +#, c-format +msgid "Detected clock going backwards in time.\n" +msgstr "Εντοπίστηκε ρολόι που πηγαίνει προς τα πίσω στο χρόνο.\n" + +#: pg_test_timing.c:152 +#, c-format +msgid "Time warp: %d ms\n" +msgstr "Χρονική στρέβλωση: %d ms\n" + +#: pg_test_timing.c:175 +#, c-format +msgid "Per loop time including overhead: %0.2f ns\n" +msgstr "Χρόνος ανά βρόχο συμπεριλαμβανομένου επίφορτου: %0.2f ns\n" + +#: pg_test_timing.c:186 +msgid "< us" +msgstr "< us" + +#: pg_test_timing.c:187 +#, no-c-format +msgid "% of total" +msgstr "% of συνολικά" + +#: pg_test_timing.c:188 +msgid "count" +msgstr "count" + +#: pg_test_timing.c:197 +#, c-format +msgid "Histogram of timing durations:\n" +msgstr "Ιστόγραμμα διαρκειών χρονισμού\n" diff --git a/src/bin/pg_upgrade/po/de.po b/src/bin/pg_upgrade/po/de.po index 0f16024b7f967..dda800b88c76a 100644 --- a/src/bin/pg_upgrade/po/de.po +++ b/src/bin/pg_upgrade/po/de.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-29 03:17+0000\n" -"PO-Revision-Date: 2021-04-29 06:56+0200\n" +"POT-Creation-Date: 2021-05-12 17:47+0000\n" +"PO-Revision-Date: 2021-05-13 00:10+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: check.c:69 +#: check.c:70 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -24,7 +24,7 @@ msgstr "" "Führe Konsistenzprüfungen am alten laufenden Server durch\n" "---------------------------------------------------------\n" -#: check.c:75 +#: check.c:76 #, c-format msgid "" "Performing Consistency Checks\n" @@ -33,7 +33,7 @@ msgstr "" "Führe Konsistenzprüfungen durch\n" "-------------------------------\n" -#: check.c:211 +#: check.c:213 #, c-format msgid "" "\n" @@ -42,7 +42,7 @@ msgstr "" "\n" "*Cluster sind kompatibel*\n" -#: check.c:217 +#: check.c:219 #, c-format msgid "" "\n" @@ -54,7 +54,7 @@ msgstr "" "neuen Cluster neu mit initdb initialisieren, bevor fortgesetzt\n" "werden kann.\n" -#: check.c:260 +#: check.c:262 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade.\n" @@ -67,7 +67,7 @@ msgstr "" " %s/vacuumdb %s--all --analyze-in-stages\n" "\n" -#: check.c:266 +#: check.c:268 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -76,7 +76,7 @@ msgstr "" "Mit diesem Skript können die Dateien des alten Clusters gelöscht werden:\n" " %s\n" -#: check.c:271 +#: check.c:273 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -89,77 +89,77 @@ msgstr "" "Datenverzeichnis des neuen Clusters im alten Cluster-Verzeichnis\n" "liegen. Der Inhalt des alten Clusters muss von Hand gelöscht werden.\n" -#: check.c:283 +#: check.c:285 #, c-format msgid "Checking cluster versions" msgstr "Prüfe Cluster-Versionen" -#: check.c:295 +#: check.c:297 #, c-format msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" msgstr "Dieses Programm kann nur Upgrades von PostgreSQL Version 8.4 oder später durchführen.\n" -#: check.c:299 +#: check.c:301 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Dieses Programm kann nur Upgrades auf PostgreSQL Version %s durchführen.\n" -#: check.c:308 +#: check.c:310 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Dieses Programm kann keine Downgrades auf ältere Hauptversionen von PostgreSQL durchführen.\n" -#: check.c:313 +#: check.c:315 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "Die Daten- und Programmverzeichnisse des alten Clusters stammen von verschiedenen Hauptversionen.\n" -#: check.c:316 +#: check.c:318 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "Die Daten- und Programmverzeichnisse des neuen Clusters stammen von verschiedenen Hauptversionen.\n" -#: check.c:333 +#: check.c:335 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Wenn ein laufender alter Server vor Version 9.1 geprüft wird, muss die Portnummer des alten Servers angegeben werden.\n" -#: check.c:337 +#: check.c:339 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Wenn ein laufender Server geprüft wird, müssen die alte und die neue Portnummer verschieden sein.\n" -#: check.c:352 +#: check.c:354 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "Kodierungen für Datenbank »%s« stimmen nicht überein: alt »%s«, neu »%s«\n" -#: check.c:357 +#: check.c:359 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_collate-Werte für Datenbank »%s« stimmen nicht überein: alt »%s«, neu »%s«\n" -#: check.c:360 +#: check.c:362 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_ctype-Werte für Datenbank »%s« stimmen nicht überein: alt »%s«, neu »%s«\n" -#: check.c:433 +#: check.c:435 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "Datenbank »%s« im neuen Cluster ist nicht leer: Relation »%s.%s« gefunden\n" -#: check.c:490 +#: check.c:492 #, c-format msgid "Checking for new cluster tablespace directories" msgstr "Prüfe Tablespace-Verzeichnisse des neuen Clusters" -#: check.c:501 +#: check.c:503 #, c-format msgid "new cluster tablespace directory already exists: \"%s\"\n" msgstr "Tablespace-Verzeichnis für neuen Cluster existiert bereits: »%s«\n" -#: check.c:534 +#: check.c:536 #, c-format msgid "" "\n" @@ -168,7 +168,7 @@ msgstr "" "\n" "WARNUNG: das neue Datenverzeichnis sollte nicht im alten Datenverzeichnis liegen, z.B. %s\n" -#: check.c:558 +#: check.c:560 #, c-format msgid "" "\n" @@ -177,85 +177,84 @@ msgstr "" "\n" "WARNUNG: benutzerdefinierte Tablespace-Pfade sollten nicht im Datenverzeichnis liegen, z.B. %s\n" -#: check.c:568 +#: check.c:570 #, c-format msgid "Creating script to delete old cluster" msgstr "Erzeuge Skript zum Löschen des alten Clusters" -#: check.c:571 check.c:835 check.c:933 check.c:1012 check.c:1122 check.c:1213 -#: check.c:1331 file.c:336 function.c:240 option.c:504 version.c:54 -#: version.c:199 version.c:341 +#: check.c:573 check.c:837 check.c:935 check.c:1014 check.c:1276 file.c:336 +#: function.c:240 option.c:497 version.c:54 version.c:204 version.c:376 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "konnte Datei »%s« nicht öffnen: %s\n" -#: check.c:627 +#: check.c:629 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "konnte Datei »%s« nicht ausführbar machen: %s\n" -#: check.c:647 +#: check.c:649 #, c-format msgid "Checking database user is the install user" msgstr "Prüfe ob der Datenbankbenutzer der Installationsbenutzer ist" -#: check.c:663 +#: check.c:665 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "Datenbankbenutzer »%s« ist nicht der Installationsbenutzer\n" -#: check.c:674 +#: check.c:676 #, c-format msgid "could not determine the number of users\n" msgstr "konnte die Anzahl der Benutzer nicht ermitteln\n" -#: check.c:682 +#: check.c:684 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "Nur der Installationsbenutzer darf im neuen Cluster definiert sein.\n" -#: check.c:702 +#: check.c:704 #, c-format msgid "Checking database connection settings" msgstr "Prüfe Verbindungseinstellungen der Datenbank" -#: check.c:724 +#: check.c:726 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 darf keine Verbindungen erlauben, d.h. ihr pg_database.datallowconn muss falsch sein\n" -#: check.c:734 +#: check.c:736 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Alle Datenbanken außer template0 müssen Verbindungen erlauben, d.h. ihr pg_database.datallowconn muss wahr sein\n" -#: check.c:759 +#: check.c:761 #, c-format msgid "Checking for prepared transactions" msgstr "Prüfe auf vorbereitete Transaktionen" -#: check.c:768 +#: check.c:770 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "Der alte Cluster enthält vorbereitete Transaktionen\n" -#: check.c:770 +#: check.c:772 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "Der neue Cluster enthält vorbereitete Transaktionen\n" -#: check.c:796 +#: check.c:798 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Prüfe auf contrib/isn mit unpassender bigint-Übergabe" -#: check.c:857 check.c:958 check.c:1034 check.c:1145 check.c:1236 check.c:1354 -#: function.c:262 version.c:245 version.c:282 version.c:425 +#: check.c:859 check.c:960 check.c:1036 check.c:1093 check.c:1152 check.c:1181 +#: check.c:1299 function.c:262 version.c:278 version.c:316 version.c:460 #, c-format msgid "fatal\n" msgstr "fatal\n" -#: check.c:858 +#: check.c:860 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -271,18 +270,18 @@ msgstr "" "Datentyp bigint verwenden. Der alte und der neue Cluster übergeben\n" "bigint auf andere Weise und daher kann dieser Cluster gegenwärtig\n" "nicht aktualisiert werden. Sie können Datenbanken im alten Cluster,\n" -"die »contrib/isn« verwenden, manuell dumpen, entfernen, dann das\n" +"die »contrib/isn« verwenden, manuell dumpen, löschen, dann das\n" "Upgrade durchführen und sie dann wiederherstellen. Eine Liste\n" "der problematischen Funktionen ist in der Datei:\n" " %s\n" "\n" -#: check.c:881 +#: check.c:883 #, c-format msgid "Checking for user-defined postfix operators" msgstr "Prüfe auf benutzerdefinierte Postfix-Operatoren" -#: check.c:959 +#: check.c:961 #, c-format msgid "" "Your installation contains user-defined postfix operators, which are not\n" @@ -299,12 +298,12 @@ msgstr "" " %s\n" "\n" -#: check.c:980 +#: check.c:982 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Prüfe auf Tabellen mit WITH OIDS" -#: check.c:1035 +#: check.c:1037 #, c-format msgid "" "Your installation contains tables declared WITH OIDS, which is not\n" @@ -323,74 +322,99 @@ msgstr "" #: check.c:1065 #, c-format +msgid "Checking for system-defined composite types in user tables" +msgstr "Prüfe auf systemdefinierte zusammengesetzte Typen in Benutzertabellen" + +#: check.c:1094 +#, c-format +msgid "" +"Your installation contains system-defined composite type(s) in user tables.\n" +"These type OIDs are not stable across PostgreSQL versions,\n" +"so this cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" +" %s\n" +"\n" +msgstr "" +"Ihre Installation enthält systemdefinierte zusammengesetzte Typen in\n" +"Benutzertabellen. Die OIDs dieser Typen sind nicht über\n" +"PostgreSQL-Versionen stabil und daher kann dieser Cluster gegenwärtig\n" +"nicht aktualisiert werden. Sie können die Problemspalten löschen\n" +"und das Upgrade neu starten. Eine Liste der Problemspalten ist in der\n" +"Datei:\n" +" %s\n" +"\n" + +#: check.c:1122 +#, c-format msgid "Checking for reg* data types in user tables" msgstr "Prüfe auf reg*-Datentypen in Benutzertabellen" -#: check.c:1146 +#: check.c:1153 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" "These data types reference system OIDs that are not preserved by\n" "pg_upgrade, so this cluster cannot currently be upgraded. You can\n" -"remove the problem tables and restart the upgrade. A list of the\n" -"problem columns is in the file:\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" " %s\n" "\n" msgstr "" "Ihre Installation enthält einen der reg*-Datentypen in\n" "Benutzertabellen. Diese Datentypen verweisen auf System-OIDs, die von\n" "pg_upgrade nicht erhalten werden. Daher kann dieser Cluster\n" -"gegenwärtig nicht aktualiert werden. Sie können die Problemtabellen\n" -"entfernen und das Upgrade neu starten. Eine Liste der Problemspalten\n" +"gegenwärtig nicht aktualiert werden. Sie können die Problemspalten\n" +"löschen und das Upgrade neu starten. Eine Liste der Problemspalten\n" "ist in der Datei:\n" " %s\n" "\n" -#: check.c:1171 +#: check.c:1175 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Prüfe auf inkompatiblen Datentyp »jsonb«" -#: check.c:1237 +#: check.c:1182 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" "The internal format of \"jsonb\" changed during 9.4 beta so this\n" -"cluster cannot currently be upgraded. You can remove the problem\n" -"tables and restart the upgrade. A list of the problem columns is\n" -"in the file:\n" +"cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" " %s\n" "\n" msgstr "" "Ihre Installation enthält den Datentyp »jsonb« in\n" "Benutzertabellen. Das interne Format von »jsonb« wurde während 9.4\n" "Beta geändert. Daher kann dieser Cluster gegenwärtig nicht\n" -"aktualisiert werden. Sie können die Problemtabellen entfernen und das\n" +"aktualisiert werden. Sie können die Problemspalten löschen und das\n" "Upgrade neu starten. Eine Liste der Problemspalten ist in der Datei:\n" " %s\n" "\n" -#: check.c:1259 +#: check.c:1204 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Prüfe auf Rollen, die mit »pg_« anfangen" -#: check.c:1269 +#: check.c:1214 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "Der alte Cluster enthält Rollen, die mit »pg_« anfangen\n" -#: check.c:1271 +#: check.c:1216 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "Der neue Cluster enthält Rollen, die mit »pg_« anfangen\n" -#: check.c:1292 +#: check.c:1237 #, c-format msgid "Checking for user-defined encoding conversions" msgstr "Prüfe auf benutzerdefinierte Kodierungsumwandlungen" -#: check.c:1355 +#: check.c:1300 #, c-format msgid "" "Your installation contains user-defined encoding conversions.\n" @@ -411,17 +435,17 @@ msgstr "" " %s\n" "\n" -#: check.c:1382 +#: check.c:1327 #, c-format msgid "failed to get the current locale\n" msgstr "konnte aktuelle Locale nicht ermitteln\n" -#: check.c:1391 +#: check.c:1336 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "konnte System-Locale-Namen für »%s« nicht ermitteln\n" -#: check.c:1397 +#: check.c:1342 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "konnte alte Locale »%s« nicht wiederherstellen\n" @@ -719,7 +743,7 @@ msgstr "Befehl zu lang\n" msgid "%s\n" msgstr "%s\n" -#: exec.c:150 option.c:222 +#: exec.c:150 option.c:217 #, c-format msgid "could not open log file \"%s\": %m\n" msgstr "konnte Logdatei »%s« nicht öffnen: %m\n" @@ -756,7 +780,7 @@ msgstr "" "Prüfen Sie die letzten Zeilen von »%s« für den\n" "wahrscheinlichen Grund für das Scheitern.\n" -#: exec.c:205 option.c:231 +#: exec.c:205 option.c:226 #, c-format msgid "could not write to log file \"%s\": %m\n" msgstr "konnte nicht in Logdatei »%s «schreiben: %m\n" @@ -1051,67 +1075,67 @@ msgstr "Datenbank: %s\n" msgid "relname: %s.%s: reloid: %u reltblspace: %s\n" msgstr "relname: %s.%s: reloid: %u reltblspace: %s\n" -#: option.c:103 +#: option.c:102 #, c-format msgid "%s: cannot be run as root\n" msgstr "%s: kann nicht als root ausgeführt werden\n" -#: option.c:171 +#: option.c:170 #, c-format msgid "invalid old port number\n" msgstr "ungültige alte Portnummer\n" -#: option.c:176 +#: option.c:175 #, c-format msgid "invalid new port number\n" msgstr "ungültige neue Portnummer\n" -#: option.c:212 +#: option.c:207 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" -#: option.c:219 +#: option.c:214 #, c-format msgid "too many command-line arguments (first is \"%s\")\n" msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)\n" -#: option.c:225 +#: option.c:220 #, c-format msgid "Running in verbose mode\n" msgstr "Ausführung im Verbose-Modus\n" -#: option.c:256 +#: option.c:251 msgid "old cluster binaries reside" msgstr "die Programmdateien des alten Clusters liegen" -#: option.c:258 +#: option.c:253 msgid "new cluster binaries reside" msgstr "die Programmdateien des neuen Clusters liegen" -#: option.c:260 +#: option.c:255 msgid "old cluster data resides" msgstr "die Daten das alten Clusters liegen" -#: option.c:262 +#: option.c:257 msgid "new cluster data resides" msgstr "die Daten des neuen Clusters liegen" -#: option.c:264 +#: option.c:259 msgid "sockets will be created" msgstr "die Sockets erzeugt werden sollen" -#: option.c:281 option.c:381 +#: option.c:276 option.c:374 #, c-format msgid "could not determine current directory\n" msgstr "konnte aktuelles Verzeichnis nicht ermitteln\n" -#: option.c:284 +#: option.c:279 #, c-format msgid "cannot run pg_upgrade from inside the new cluster data directory on Windows\n" msgstr "auf Windows kann pg_upgrade nicht von innerhalb des Cluster-Datenverzeichnisses ausgeführt werden\n" -#: option.c:293 +#: option.c:288 #, c-format msgid "" "pg_upgrade upgrades a PostgreSQL cluster to a different major version.\n" @@ -1120,12 +1144,12 @@ msgstr "" "pg_upgrade aktualisiert einen PostgreSQL-Cluster auf eine neue Hauptversion.\n" "\n" -#: option.c:294 +#: option.c:289 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: option.c:295 +#: option.c:290 #, c-format msgid "" " pg_upgrade [OPTION]...\n" @@ -1134,17 +1158,17 @@ msgstr "" " pg_upgrade [OPTION]...\n" "\n" -#: option.c:296 +#: option.c:291 #, c-format msgid "Options:\n" msgstr "Optionen:\n" -#: option.c:297 +#: option.c:292 #, c-format msgid " -b, --old-bindir=BINDIR old cluster executable directory\n" msgstr " -b, --old-bindir=BINVERZ Programmverzeichnis des alten Clusters\n" -#: option.c:298 +#: option.c:293 #, c-format msgid "" " -B, --new-bindir=BINDIR new cluster executable directory (default\n" @@ -1153,97 +1177,87 @@ msgstr "" " -B, --new-bindir=BINVERZ Programmverzeichnis des neuen Clusters\n" " (Standard: gleiches Verzeichnis wie pg_upgrade)\n" -#: option.c:300 +#: option.c:295 #, c-format msgid " -c, --check check clusters only, don't change any data\n" msgstr " -c, --check nur Cluster prüfen, keine Daten ändern\n" -#: option.c:301 +#: option.c:296 #, c-format msgid " -d, --old-datadir=DATADIR old cluster data directory\n" msgstr " -d, --old-datadir=DATENVERZ Datenverzeichnis des alten Clusters\n" -#: option.c:302 +#: option.c:297 #, c-format msgid " -D, --new-datadir=DATADIR new cluster data directory\n" msgstr " -D, --new-datadir=DATENVERZ Datenverzeichnis des neuen Clusters\n" -#: option.c:303 +#: option.c:298 #, c-format msgid " -j, --jobs=NUM number of simultaneous processes or threads to use\n" msgstr " -j, --jobs=NUM Anzahl paralleler Prozesse oder Threads\n" -#: option.c:304 +#: option.c:299 #, c-format msgid " -k, --link link instead of copying files to new cluster\n" msgstr " -k, --link Dateien in den neuen Cluster verknüpfen statt kopieren\n" -#: option.c:305 +#: option.c:300 #, c-format msgid " -o, --old-options=OPTIONS old cluster options to pass to the server\n" msgstr " -o, --old-options=OPTIONEN Serveroptionen für den alten Cluster\n" -#: option.c:306 +#: option.c:301 #, c-format msgid " -O, --new-options=OPTIONS new cluster options to pass to the server\n" msgstr " -O, --new-options=OPTIONEN Serveroptionen für den neuen Cluster\n" -#: option.c:307 +#: option.c:302 #, c-format msgid " -p, --old-port=PORT old cluster port number (default %d)\n" msgstr " -p, --old-port=PORT Portnummer für den alten Cluster (Standard: %d)\n" -#: option.c:308 +#: option.c:303 #, c-format msgid " -P, --new-port=PORT new cluster port number (default %d)\n" msgstr " -P, --new-port=PORT Portnummer für den neuen Cluster (Standard: %d)\n" -#: option.c:309 +#: option.c:304 #, c-format msgid " -r, --retain retain SQL and log files after success\n" msgstr " -r, --retain SQL- und Logdateien bei Erfolg aufheben\n" -#: option.c:310 +#: option.c:305 #, c-format msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" msgstr " -s, --socketdir=VERZ Verzeichnis für Socket (Standard: aktuelles Verz.)\n" -#: option.c:311 +#: option.c:306 #, c-format msgid " -U, --username=NAME cluster superuser (default \"%s\")\n" msgstr " -U, --username=NAME Cluster-Superuser (Standard: »%s«)\n" -#: option.c:312 +#: option.c:307 #, c-format msgid " -v, --verbose enable verbose internal logging\n" msgstr " -v, --verbose »Verbose«-Modus einschalten\n" -#: option.c:313 +#: option.c:308 #, c-format msgid " -V, --version display version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: option.c:314 +#: option.c:309 #, c-format msgid " --clone clone instead of copying files to new cluster\n" msgstr " --clone Dateien in den neuen Cluster klonen statt kopieren\n" -#: option.c:315 -#, c-format -msgid "" -" --index-collation-versions-unknown\n" -" mark text indexes as needing to be rebuilt\n" -msgstr "" -" --index-collation-versions-unknown\n" -" Textindexe markieren, dass sie neu gebaut werden\n" -" müssen\n" - -#: option.c:317 +#: option.c:310 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: option.c:318 +#: option.c:311 #, c-format msgid "" "\n" @@ -1258,7 +1272,7 @@ msgstr "" " den Postmaster für den alten Cluster anhalten\n" " den Postmaster für den neuen Cluster anhalten\n" -#: option.c:323 +#: option.c:316 #, c-format msgid "" "\n" @@ -1275,7 +1289,7 @@ msgstr "" " das »bin«-Verzeichnis der alten Version (-b BINVERZ)\n" " das »bin«-Verzeichnis der neuen Version (-B BINVERZ)\n" -#: option.c:329 +#: option.c:322 #, c-format msgid "" "\n" @@ -1288,7 +1302,7 @@ msgstr "" " pg_upgrade -d alterCluster/data -D neuerCluster/data -b alterCluster/bin -B neuerCluster/bin\n" "oder\n" -#: option.c:334 +#: option.c:327 #, c-format msgid "" " $ export PGDATAOLD=oldCluster/data\n" @@ -1303,7 +1317,7 @@ msgstr "" " $ export PGBINNEW=neuerCluster/bin\n" " $ pg_upgrade\n" -#: option.c:340 +#: option.c:333 #, c-format msgid "" " C:\\> set PGDATAOLD=oldCluster/data\n" @@ -1318,7 +1332,7 @@ msgstr "" " C:\\> set PGBINNEW=neuerCluster/bin\n" " C:\\> pg_upgrade\n" -#: option.c:346 +#: option.c:339 #, c-format msgid "" "\n" @@ -1327,12 +1341,12 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: option.c:347 +#: option.c:340 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: option.c:387 +#: option.c:380 #, c-format msgid "" "You must identify the directory where the %s.\n" @@ -1341,27 +1355,27 @@ msgstr "" "Sie müssen das Verzeichnis angeben, wo %s.\n" "Bitte verwenden Sie die Kommandzeilenoption %s oder die Umgebungsvariable %s.\n" -#: option.c:439 +#: option.c:432 #, c-format msgid "Finding the real data directory for the source cluster" msgstr "Suche das tatsächliche Datenverzeichnis des alten Clusters" -#: option.c:441 +#: option.c:434 #, c-format msgid "Finding the real data directory for the target cluster" msgstr "Suche das tatsächliche Datenverzeichnis des neuen Clusters" -#: option.c:453 +#: option.c:446 #, c-format msgid "could not get data directory using %s: %s\n" msgstr "konnte Datenverzeichnis mit %s nicht ermitteln: %s\n" -#: option.c:512 +#: option.c:505 #, c-format msgid "could not read line %d from file \"%s\": %s\n" msgstr "konnte Zeile %d aus Datei »%s« nicht lesen: %s\n" -#: option.c:529 +#: option.c:522 #, c-format msgid "user-supplied old port number %hu corrected to %hu\n" msgstr "vom Benutzer angegebene Portnummer %hu wurde auf %hu korrigiert\n" @@ -1683,7 +1697,7 @@ msgstr "ok" msgid "Checking for large objects" msgstr "Prüfe auf Large Objects" -#: version.c:77 version.c:384 +#: version.c:77 version.c:419 #, c-format msgid "warning" msgstr "Warnung" @@ -1726,19 +1740,20 @@ msgstr "" "Standardrechte zu setzen.\n" "\n" -#: version.c:239 +#: version.c:272 #, c-format msgid "Checking for incompatible \"line\" data type" msgstr "Prüfe auf inkompatiblen Datentyp »line«" -#: version.c:246 +#: version.c:279 #, c-format msgid "" -"Your installation contains the \"line\" data type in user tables. This\n" -"data type changed its internal and input/output format between your old\n" -"and new clusters so this cluster cannot currently be upgraded. You can\n" -"remove the problem tables and restart the upgrade. A list of the problem\n" -"columns is in the file:\n" +"Your installation contains the \"line\" data type in user tables.\n" +"This data type changed its internal and input/output format\n" +"between your old and new versions so this\n" +"cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" " %s\n" "\n" msgstr "" @@ -1746,22 +1761,23 @@ msgstr "" "interne Format und das Eingabe-/Ausgabeformat dieses Datentyps wurden\n" "zwischen Ihrem alten und neuen Cluster geändert und daher kann dieser\n" "Cluster gegenwärtig nicht aktualisiert werden. Sie können die\n" -"Problemtabellen entfernen und das Upgrade neu starten. Eine Liste der\n" +"Problemspalten löschen und das Upgrade neu starten. Eine Liste der\n" "Problemspalten ist in der Datei:\n" " %s\n" "\n" -#: version.c:276 +#: version.c:310 #, c-format msgid "Checking for invalid \"unknown\" user columns" msgstr "Prüfe auf ungültige Benutzerspalten mit Typ »unknown«" -#: version.c:283 +#: version.c:317 #, c-format msgid "" -"Your installation contains the \"unknown\" data type in user tables. This\n" -"data type is no longer allowed in tables, so this cluster cannot currently\n" -"be upgraded. You can remove the problem tables and restart the upgrade.\n" +"Your installation contains the \"unknown\" data type in user tables.\n" +"This data type is no longer allowed in tables, so this\n" +"cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" "A list of the problem columns is in the file:\n" " %s\n" "\n" @@ -1769,17 +1785,17 @@ msgstr "" "Ihre Installation enthält den Datentyp »unknown« in\n" "Benutzertabellen. Dieser Datentyp ist nicht mehr in Tabellen erlaubt\n" "und daher kann dieser Cluster gegenwärtig nicht aktualisiert\n" -"werden. Sie können die Problemtabellen entfernen und das Upgrade neu\n" +"werden. Sie können die Problemspalten löschen und das Upgrade neu\n" "starten. Eine Liste der Problemspalten ist in der Datei:\n" " %s\n" "\n" -#: version.c:306 +#: version.c:341 #, c-format msgid "Checking for hash indexes" msgstr "Prüfe auf Hash-Indexe" -#: version.c:386 +#: version.c:421 #, c-format msgid "" "\n" @@ -1796,7 +1812,7 @@ msgstr "" "werden Sie Anweisungen zum REINDEX erhalten.\n" "\n" -#: version.c:392 +#: version.c:427 #, c-format msgid "" "\n" @@ -1818,27 +1834,25 @@ msgstr "" "verwendet werden.\n" "\n" -#: version.c:418 +#: version.c:453 #, c-format msgid "Checking for invalid \"sql_identifier\" user columns" msgstr "Prüfe auf ungültige Benutzerspalten mit Typ »sql_identifier«" -#: version.c:426 +#: version.c:461 #, c-format msgid "" -"Your installation contains the \"sql_identifier\" data type in user tables\n" -"and/or indexes. The on-disk format for this data type has changed, so this\n" -"cluster cannot currently be upgraded. You can remove the problem tables or\n" -"change the data type to \"name\" and restart the upgrade.\n" +"Your installation contains the \"sql_identifier\" data type in user tables.\n" +"The on-disk format for this data type has changed, so this\n" +"cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" "A list of the problem columns is in the file:\n" " %s\n" "\n" msgstr "" "Ihre Installation enthält den Datentyp »sql_identifier« in\n" -"Benutzertabellen oder -indexen. Das Speicherformat dieses Datentyps\n" -"wurde geändert und daher kann dieser Cluster gegenwärtig nicht\n" -"aktualisiert werden. Sie können die Problemtabellen entfernen oder den\n" -"Datentyp in »name« ändern und das Upgrade neu starten. Eine Liste der\n" -"Problemspalten ist in der Datei:\n" -" %s\n" +"Benutzertabellen. Das Speicherformat dieses Datentyps wurde geändert\n" +"und daher kann dieser Cluster gegenwärtig nicht aktualisiert\n" +"werden. Sie können die Problemspalten löschen und das Upgrade neu\n" +"starten. Eine Liste der Problemspalten ist in der Datei: %s\n" "\n" diff --git a/src/bin/pg_upgrade/po/es.po b/src/bin/pg_upgrade/po/es.po index d96f366bfa508..95a8c81bf6b74 100644 --- a/src/bin/pg_upgrade/po/es.po +++ b/src/bin/pg_upgrade/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:45+0000\n" +"POT-Creation-Date: 2021-05-14 19:47+0000\n" "PO-Revision-Date: 2020-09-18 18:34-0300\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: check.c:66 +#: check.c:70 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -27,7 +27,7 @@ msgstr "" "Verificando Consistencia en Vivo en el Servidor Antiguo\n" "-------------------------------------------------------\n" -#: check.c:72 +#: check.c:76 #, c-format msgid "" "Performing Consistency Checks\n" @@ -36,7 +36,7 @@ msgstr "" "Verificando Consistencia\n" "------------------------\n" -#: check.c:190 +#: check.c:213 #, c-format msgid "" "\n" @@ -45,7 +45,7 @@ msgstr "" "\n" "*Los clústers son compatibles*\n" -#: check.c:196 +#: check.c:219 #, c-format msgid "" "\n" @@ -56,12 +56,17 @@ msgstr "" "Si pg_upgrade falla a partir de este punto, deberá re-ejecutar initdb\n" "en el clúster nuevo antes de continuar.\n" -#: check.c:232 -#, c-format +#: check.c:262 +#, fuzzy, c-format +#| msgid "" +#| "Optimizer statistics are not transferred by pg_upgrade so,\n" +#| "once you start the new server, consider running:\n" +#| " %s\n" +#| "\n" msgid "" -"Optimizer statistics are not transferred by pg_upgrade so,\n" -"once you start the new server, consider running:\n" -" %s\n" +"Optimizer statistics are not transferred by pg_upgrade.\n" +"Once you start the new server, consider running:\n" +" %s/vacuumdb %s--all --analyze-in-stages\n" "\n" msgstr "" "Las estadísticas para el optimizador no son transferidas por pg_upgrade,\n" @@ -69,21 +74,7 @@ msgstr "" " %s\n" "\n" -#: check.c:237 -#, c-format -msgid "" -"Optimizer statistics and free space information are not transferred\n" -"by pg_upgrade so, once you start the new server, consider running:\n" -" %s\n" -"\n" -msgstr "" -"Las estadísticas para el optimizador y la información de espacio libre\n" -"no son transferidas por pg_upgrade, de manera que una vez que inicie\n" -"el servidor nuevo considere ejecutar:\n" -" %s\n" -"\n" - -#: check.c:244 +#: check.c:268 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -92,7 +83,7 @@ msgstr "" "Ejecutando este script se borrarán los archivos de datos del servidor antiguo:\n" " %s\n" -#: check.c:249 +#: check.c:273 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -105,88 +96,83 @@ msgstr "" "o el directorio de datos del servidor nuevo. El contenido del servidor\n" "antiguo debe ser borrado manualmente.\n" -#: check.c:259 +#: check.c:285 #, c-format msgid "Checking cluster versions" msgstr "Verificando las versiones de los clústers" -#: check.c:271 +#: check.c:297 #, c-format msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" msgstr "Este programa sólo puede actualizar desde PostgreSQL versión 8.4 y posterior.\n" -#: check.c:275 +#: check.c:301 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Este programa sólo puede actualizar a PostgreSQL versión %s.\n" -#: check.c:284 +#: check.c:310 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Este programa no puede usarse para volver a versiones anteriores de PostgreSQL.\n" -#: check.c:289 +#: check.c:315 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "" "El directorio de datos antiguo y el directorio de binarios antiguo son de\n" "versiones diferentes.\n" -#: check.c:292 +#: check.c:318 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "" "El directorio de datos nuevo y el directorio de binarios nuevo son de\n" "versiones diferentes.\n" -#: check.c:309 +#: check.c:335 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Al verificar un servidor antiguo anterior a 9.1, debe especificar el port de éste.\n" -#: check.c:313 +#: check.c:339 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Al verificar servidores en caliente, los números de port antiguo y nuevo deben ser diferentes.\n" -#: check.c:328 +#: check.c:354 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "las codificaciones de la base de datos «%s» no coinciden: antigua «%s», nueva «%s»\n" -#: check.c:333 +#: check.c:359 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "valores lc_collate de la base de datos «%s» no coinciden: antigua «%s», nueva «%s»\n" -#: check.c:336 +#: check.c:362 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "valores lc_ctype de la base de datos «%s» no coinciden: antigua «%s», nueva «%s»\n" -#: check.c:409 +#: check.c:435 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "La base de datos «%s» del clúster nuevo no está vacía: se encontró la relación «%s.%s»\n" -#: check.c:458 -#, c-format -msgid "Creating script to analyze new cluster" -msgstr "Creando un script para analizar el clúster nuevo" - -#: check.c:472 check.c:600 check.c:864 check.c:943 check.c:1053 check.c:1144 -#: file.c:336 function.c:240 option.c:497 version.c:54 version.c:199 -#: version.c:341 -#, c-format -msgid "could not open file \"%s\": %s\n" -msgstr "no se pudo abrir el archivo «%s»: %s\n" +#: check.c:492 +#, fuzzy, c-format +#| msgid "Checking cluster versions" +msgid "Checking for new cluster tablespace directories" +msgstr "Verificando las versiones de los clústers" -#: check.c:527 check.c:656 -#, c-format -msgid "could not add execute permission to file \"%s\": %s\n" -msgstr "no se pudo agregar permisos de ejecución al archivo «%s»: %s\n" +#: check.c:503 +#, fuzzy, c-format +#| msgid "could not stat tablespace directory \"%s\": %s\n" +msgid "new cluster tablespace directory already exists: \"%s\"\n" +msgstr "no se pudo hace stat al directorio de tablespace «%s»: %s\n" -#: check.c:563 +#: check.c:536 #, c-format msgid "" "\n" @@ -196,7 +182,7 @@ msgstr "" "ADVERTENCIA: el directorio de datos nuevo no debería estar dentro del directorio antiguo,\n" "por ej. %s\n" -#: check.c:587 +#: check.c:560 #, c-format msgid "" "\n" @@ -207,73 +193,84 @@ msgstr "" "no deberían estar dentro del directorio de datos,\n" "por ej. %s\n" -#: check.c:597 +#: check.c:570 #, c-format msgid "Creating script to delete old cluster" msgstr "Creando un script para borrar el clúster antiguo" -#: check.c:676 +#: check.c:573 check.c:837 check.c:935 check.c:1014 check.c:1276 file.c:336 +#: function.c:240 option.c:497 version.c:54 version.c:204 version.c:376 +#, c-format +msgid "could not open file \"%s\": %s\n" +msgstr "no se pudo abrir el archivo «%s»: %s\n" + +#: check.c:629 +#, c-format +msgid "could not add execute permission to file \"%s\": %s\n" +msgstr "no se pudo agregar permisos de ejecución al archivo «%s»: %s\n" + +#: check.c:649 #, c-format msgid "Checking database user is the install user" msgstr "Verificando que el usuario de base de datos es el usuario de instalación" -#: check.c:692 +#: check.c:665 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "el usuario de base de datos «%s» no es el usuario de instalación\n" -#: check.c:703 +#: check.c:676 #, c-format msgid "could not determine the number of users\n" msgstr "no se pudo determinar el número de usuarios\n" -#: check.c:711 +#: check.c:684 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "Sólo el usuario de instalación puede estar definido en el nuevo clúster.\n" -#: check.c:731 +#: check.c:704 #, c-format msgid "Checking database connection settings" msgstr "Verificando los parámetros de conexión de bases de datos" -#: check.c:753 +#: check.c:726 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 no debe permitir conexiones, es decir su pg_database.datallowconn debe ser «false»\n" -#: check.c:763 +#: check.c:736 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Todas las bases de datos no-template0 deben permitir conexiones, es decir su pg_database.datallowconn debe ser «true»\n" -#: check.c:788 +#: check.c:761 #, c-format msgid "Checking for prepared transactions" msgstr "Verificando transacciones preparadas" -#: check.c:797 +#: check.c:770 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "El clúster de origen contiene transacciones preparadas\n" -#: check.c:799 +#: check.c:772 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "El clúster de destino contiene transacciones preparadas\n" -#: check.c:825 +#: check.c:798 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Verificando contrib/isn con discordancia en mecanismo de paso de bigint" -#: check.c:886 check.c:965 check.c:1076 check.c:1167 function.c:262 -#: version.c:245 version.c:282 version.c:425 +#: check.c:859 check.c:960 check.c:1036 check.c:1093 check.c:1152 check.c:1181 +#: check.c:1299 function.c:262 version.c:278 version.c:316 version.c:460 #, c-format msgid "fatal\n" msgstr "fatal\n" -#: check.c:887 +#: check.c:860 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -294,12 +291,42 @@ msgstr "" " %s\n" "\n" -#: check.c:911 +#: check.c:883 +#, fuzzy, c-format +#| msgid "reading user-defined operators" +msgid "Checking for user-defined postfix operators" +msgstr "leyendo los operadores definidos por el usuario" + +#: check.c:961 +#, fuzzy, c-format +#| msgid "" +#| "Your installation contains tables declared WITH OIDS, which is not\n" +#| "supported anymore. Consider removing the oid column using\n" +#| " ALTER TABLE ... SET WITHOUT OIDS;\n" +#| "A list of tables with the problem is in the file:\n" +#| " %s\n" +#| "\n" +msgid "" +"Your installation contains user-defined postfix operators, which are not\n" +"supported anymore. Consider dropping the postfix operators and replacing\n" +"them with prefix operators or function calls.\n" +"A list of user-defined postfix operators is in the file:\n" +" %s\n" +"\n" +msgstr "" +"Su instalación contiene tablas declaradas WITH OIDS, que ya no está\n" +"soportado. Considere eliminar la columna oid usando\n" +" ALTER TABLE ... SET WITHOUT OIDS;\n" +"Una lista de tablas con este problema aparece en el archivo:\n" +" %s\n" +"\n" + +#: check.c:982 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Verificando tablas WITH OIDS" -#: check.c:966 +#: check.c:1037 #, c-format msgid "" "Your installation contains tables declared WITH OIDS, which is not\n" @@ -316,19 +343,58 @@ msgstr "" " %s\n" "\n" -#: check.c:996 +#: check.c:1065 +#, fuzzy, c-format +#| msgid "Checking for reg* data types in user tables" +msgid "Checking for system-defined composite types in user tables" +msgstr "Verificando tipos de datos reg* en datos de usuario" + +#: check.c:1094 +#, fuzzy, c-format +#| msgid "" +#| "Your installation contains the \"unknown\" data type in user tables. This\n" +#| "data type is no longer allowed in tables, so this cluster cannot currently\n" +#| "be upgraded. You can remove the problem tables and restart the upgrade.\n" +#| "A list of the problem columns is in the file:\n" +#| " %s\n" +#| "\n" +msgid "" +"Your installation contains system-defined composite type(s) in user tables.\n" +"These type OIDs are not stable across PostgreSQL versions,\n" +"so this cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" +" %s\n" +"\n" +msgstr "" +"Su instalación contiene el tipo «unknown» en tablas de usuario. Este tipo\n" +"ya no es permitido en tablas, por lo que este clúster no puede ser actualizado.\n" +"Puede eliminar las tablas y reiniciar la actualización.\n" +"Un listado de columnas problemáticas está en el archivo:\n" +" %s\n" +"\n" + +#: check.c:1122 #, c-format msgid "Checking for reg* data types in user tables" msgstr "Verificando tipos de datos reg* en datos de usuario" -#: check.c:1077 -#, c-format +#: check.c:1153 +#, fuzzy, c-format +#| msgid "" +#| "Your installation contains one of the reg* data types in user tables.\n" +#| "These data types reference system OIDs that are not preserved by\n" +#| "pg_upgrade, so this cluster cannot currently be upgraded. You can\n" +#| "remove the problem tables and restart the upgrade. A list of the\n" +#| "problem columns is in the file:\n" +#| " %s\n" +#| "\n" msgid "" "Your installation contains one of the reg* data types in user tables.\n" "These data types reference system OIDs that are not preserved by\n" "pg_upgrade, so this cluster cannot currently be upgraded. You can\n" -"remove the problem tables and restart the upgrade. A list of the\n" -"problem columns is in the file:\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" " %s\n" "\n" msgstr "" @@ -340,19 +406,27 @@ msgstr "" " %s\n" "\n" -#: check.c:1102 +#: check.c:1175 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Verificando datos de usuario en tipo «jsonb» incompatible" -#: check.c:1168 -#, c-format +#: check.c:1182 +#, fuzzy, c-format +#| msgid "" +#| "Your installation contains the \"jsonb\" data type in user tables.\n" +#| "The internal format of \"jsonb\" changed during 9.4 beta so this\n" +#| "cluster cannot currently be upgraded. You can remove the problem\n" +#| "tables and restart the upgrade. A list of the problem columns is\n" +#| "in the file:\n" +#| " %s\n" +#| "\n" msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" "The internal format of \"jsonb\" changed during 9.4 beta so this\n" -"cluster cannot currently be upgraded. You can remove the problem\n" -"tables and restart the upgrade. A list of the problem columns is\n" -"in the file:\n" +"cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" " %s\n" "\n" msgstr "" @@ -364,32 +438,65 @@ msgstr "" " %s\n" "\n" -#: check.c:1190 +#: check.c:1204 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Verificando roles que empiecen con «pg_»" -#: check.c:1200 +#: check.c:1214 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "El clúster de origen contiene roles que empiezan con «pg_»\n" -#: check.c:1202 +#: check.c:1216 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "El clúster de destino contiene roles que empiezan con «pg_»\n" -#: check.c:1228 +#: check.c:1237 +#, fuzzy, c-format +#| msgid "reading user-defined conversions" +msgid "Checking for user-defined encoding conversions" +msgstr "leyendo las conversiones definidas por el usuario" + +#: check.c:1300 +#, fuzzy, c-format +#| msgid "" +#| "Your installation contains the \"jsonb\" data type in user tables.\n" +#| "The internal format of \"jsonb\" changed during 9.4 beta so this\n" +#| "cluster cannot currently be upgraded. You can remove the problem\n" +#| "tables and restart the upgrade. A list of the problem columns is\n" +#| "in the file:\n" +#| " %s\n" +#| "\n" +msgid "" +"Your installation contains user-defined encoding conversions.\n" +"The conversion function parameters changed in PostgreSQL version 14\n" +"so this cluster cannot currently be upgraded. You can remove the\n" +"encoding conversions in the old cluster and restart the upgrade.\n" +"A list of user-defined encoding conversions is in the file:\n" +" %s\n" +"\n" +msgstr "" +"Su instalación contiene el tipo «jsonb» en tablas de usuario. Este tipo\n" +"El formato interno de «jsonb» cambió durante 9.4 beta, por lo que este clúster\n" +"no puede ser actualizado.\n" +"Puede eliminar las tablas y reiniciar la actualización.\n" +"Un listado de columnas problemáticas está en el archivo:\n" +" %s\n" +"\n" + +#: check.c:1327 #, c-format msgid "failed to get the current locale\n" msgstr "no se pudo obtener el «locale» actual\n" -#: check.c:1237 +#: check.c:1336 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "no se pudo obtener el nombre del «locale» para «%s»\n" -#: check.c:1243 +#: check.c:1342 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "no se pudo restaurar el locale antiguo «%s»\n" @@ -434,8 +541,8 @@ msgstr "Al clúster de origen le falta información de estado:\n" msgid "The target cluster lacks cluster state information:\n" msgstr "Al cluster de destino le falta información de estado:\n" -#: controldata.c:208 dump.c:49 pg_upgrade.c:339 pg_upgrade.c:375 -#: relfilenode.c:247 util.c:79 +#: controldata.c:208 dump.c:49 pg_upgrade.c:335 pg_upgrade.c:371 +#: relfilenode.c:243 server.c:33 util.c:79 #, c-format msgid "%s" msgstr "%s" @@ -456,112 +563,112 @@ msgstr "%d: problema en pg_resetwal\n" msgid "%d: controldata retrieval problem\n" msgstr "%d: problema de extracción de controldata\n" -#: controldata.c:546 +#: controldata.c:560 #, c-format msgid "The source cluster lacks some required control information:\n" msgstr "Al clúster de origen le falta información de control requerida:\n" -#: controldata.c:549 +#: controldata.c:563 #, c-format msgid "The target cluster lacks some required control information:\n" msgstr "Al clúster de destino le falta información de control requerida:\n" -#: controldata.c:552 +#: controldata.c:566 #, c-format msgid " checkpoint next XID\n" msgstr " siguiente XID del último checkpoint\n" -#: controldata.c:555 +#: controldata.c:569 #, c-format msgid " latest checkpoint next OID\n" msgstr " siguiente OID del último checkpoint\n" -#: controldata.c:558 +#: controldata.c:572 #, c-format msgid " latest checkpoint next MultiXactId\n" msgstr " siguiente MultiXactId del último checkpoint\n" -#: controldata.c:562 +#: controldata.c:576 #, c-format msgid " latest checkpoint oldest MultiXactId\n" msgstr " MultiXactId más antiguo del último checkpoint\n" -#: controldata.c:565 +#: controldata.c:579 #, c-format msgid " latest checkpoint next MultiXactOffset\n" msgstr " siguiente MultiXactOffset del siguiente checkpoint\n" -#: controldata.c:568 +#: controldata.c:582 #, c-format msgid " first WAL segment after reset\n" msgstr " primer segmento de WAL después del reinicio\n" -#: controldata.c:571 +#: controldata.c:585 #, c-format msgid " float8 argument passing method\n" msgstr " método de paso de argumentos float8\n" -#: controldata.c:574 +#: controldata.c:588 #, c-format msgid " maximum alignment\n" msgstr " alineamiento máximo\n" -#: controldata.c:577 +#: controldata.c:591 #, c-format msgid " block size\n" msgstr " tamaño de bloques\n" -#: controldata.c:580 +#: controldata.c:594 #, c-format msgid " large relation segment size\n" msgstr " tamaño de segmento de relación grande\n" -#: controldata.c:583 +#: controldata.c:597 #, c-format msgid " WAL block size\n" msgstr " tamaño de bloque de WAL\n" -#: controldata.c:586 +#: controldata.c:600 #, c-format msgid " WAL segment size\n" msgstr " tamaño de segmento de WAL\n" -#: controldata.c:589 +#: controldata.c:603 #, c-format msgid " maximum identifier length\n" msgstr " máximo largo de identificadores\n" -#: controldata.c:592 +#: controldata.c:606 #, c-format msgid " maximum number of indexed columns\n" msgstr " máximo número de columnas indexadas\n" -#: controldata.c:595 +#: controldata.c:609 #, c-format msgid " maximum TOAST chunk size\n" msgstr " tamaño máximo de trozos TOAST\n" -#: controldata.c:599 +#: controldata.c:613 #, c-format msgid " large-object chunk size\n" msgstr " tamaño de trozos de objetos grandes\n" -#: controldata.c:602 +#: controldata.c:616 #, c-format msgid " dates/times are integers?\n" msgstr " fechas/horas son enteros?\n" -#: controldata.c:606 +#: controldata.c:620 #, c-format msgid " data checksum version\n" msgstr " versión del checksum de datos\n" -#: controldata.c:608 +#: controldata.c:622 #, c-format msgid "Cannot continue without required control information, terminating\n" msgstr "No se puede continuar sin la información de control requerida. Terminando\n" -#: controldata.c:623 +#: controldata.c:637 #, c-format msgid "" "old and new pg_controldata alignments are invalid or do not match\n" @@ -570,77 +677,77 @@ msgstr "" "Alineamientos de pg_controldata antiguo y nuevo no son válidos o no coinciden\n" "Seguramente un clúster es 32-bit y el otro es 64-bit\n" -#: controldata.c:627 +#: controldata.c:641 #, c-format msgid "old and new pg_controldata block sizes are invalid or do not match\n" msgstr "Los tamaños de bloque antiguo y nuevo no son válidos o no coinciden\n" -#: controldata.c:630 +#: controldata.c:644 #, c-format msgid "old and new pg_controldata maximum relation segment sizes are invalid or do not match\n" msgstr "El tamaño máximo de segmento de relación antiguo y nuevo no son válidos o no coinciden\n" -#: controldata.c:633 +#: controldata.c:647 #, c-format msgid "old and new pg_controldata WAL block sizes are invalid or do not match\n" msgstr "El tamaño de bloques de WAL antiguo y nuevo no son válidos o no coinciden\n" -#: controldata.c:636 +#: controldata.c:650 #, c-format msgid "old and new pg_controldata WAL segment sizes are invalid or do not match\n" msgstr "El tamaño de segmentos de WAL antiguo y nuevo no son válidos o no coinciden\n" -#: controldata.c:639 +#: controldata.c:653 #, c-format msgid "old and new pg_controldata maximum identifier lengths are invalid or do not match\n" msgstr "Los máximos largos de identificador antiguo y nuevo no son válidos o no coinciden\n" -#: controldata.c:642 +#: controldata.c:656 #, c-format msgid "old and new pg_controldata maximum indexed columns are invalid or do not match\n" msgstr "La cantidad máxima de columnas indexadas antigua y nueva no son válidos o no coinciden\n" -#: controldata.c:645 +#: controldata.c:659 #, c-format msgid "old and new pg_controldata maximum TOAST chunk sizes are invalid or do not match\n" msgstr "Los máximos de trozos TOAST antiguo y nuevo no son válidos o no coinciden\n" -#: controldata.c:650 +#: controldata.c:664 #, c-format msgid "old and new pg_controldata large-object chunk sizes are invalid or do not match\n" msgstr "Los tamaños de trozos de objetos grandes antiguo y nuevo no son válidos o no coinciden\n" -#: controldata.c:653 +#: controldata.c:667 #, c-format msgid "old and new pg_controldata date/time storage types do not match\n" msgstr "Los tipos de almacenamiento de fecha/hora antiguo y nuevo no coinciden\n" -#: controldata.c:666 +#: controldata.c:680 #, c-format msgid "old cluster does not use data checksums but the new one does\n" msgstr "El clúster antiguo no usa checksums de datos pero el nuevo sí\n" -#: controldata.c:669 +#: controldata.c:683 #, c-format msgid "old cluster uses data checksums but the new one does not\n" msgstr "El clúster antiguo usa checksums de datos pero el nuevo no\n" -#: controldata.c:671 +#: controldata.c:685 #, c-format msgid "old and new cluster pg_controldata checksum versions do not match\n" msgstr "Las versiones de checksum de datos antigua y nueva no coinciden\n" -#: controldata.c:682 +#: controldata.c:696 #, c-format msgid "Adding \".old\" suffix to old global/pg_control" msgstr "Agregando el sufijo «.old» a global/pg_control" -#: controldata.c:687 +#: controldata.c:701 #, c-format msgid "Unable to rename %s to %s.\n" msgstr "No se pudo renombrar %s a %s.\n" -#: controldata.c:690 +#: controldata.c:704 #, c-format msgid "" "\n" @@ -667,32 +774,32 @@ msgstr "Creando el volcado de objetos globales" msgid "Creating dump of database schemas\n" msgstr "Creando el volcado de esquemas de bases de datos\n" -#: exec.c:44 +#: exec.c:45 #, c-format msgid "could not get pg_ctl version data using %s: %s\n" msgstr "no se pudo obtener datos de versión de pg_ctl usando %s: %s\n" -#: exec.c:50 +#: exec.c:51 #, c-format msgid "could not get pg_ctl version output from %s\n" msgstr "no se pudo obtener la salida de versión de pg_ctl de %s\n" -#: exec.c:104 exec.c:108 +#: exec.c:105 exec.c:109 #, c-format msgid "command too long\n" msgstr "orden demasiado larga\n" -#: exec.c:110 util.c:37 util.c:225 +#: exec.c:111 util.c:37 util.c:225 #, c-format msgid "%s\n" msgstr "%s\n" -#: exec.c:149 option.c:217 +#: exec.c:150 option.c:217 #, c-format msgid "could not open log file \"%s\": %m\n" msgstr "no se pudo abrir el archivo de registro «%s»: %m\n" -#: exec.c:178 +#: exec.c:179 #, c-format msgid "" "\n" @@ -701,12 +808,12 @@ msgstr "" "\n" "*falló*" -#: exec.c:181 +#: exec.c:182 #, c-format msgid "There were problems executing \"%s\"\n" msgstr "Hubo problemas ejecutando «%s»\n" -#: exec.c:184 +#: exec.c:185 #, c-format msgid "" "Consult the last few lines of \"%s\" or \"%s\" for\n" @@ -715,7 +822,7 @@ msgstr "" "Consulte las últimas línea de «%s» o «%s» para\n" "saber la causa probable de la falla.\n" -#: exec.c:189 +#: exec.c:190 #, c-format msgid "" "Consult the last few lines of \"%s\" for\n" @@ -724,46 +831,53 @@ msgstr "" "Consulte las últimas líneas de «%s» para saber\n" "la causa probable de la falla.\n" -#: exec.c:204 option.c:226 +#: exec.c:205 option.c:226 #, c-format msgid "could not write to log file \"%s\": %m\n" msgstr "no se pudo escribir al archivo de log «%s»\n" -#: exec.c:230 +#: exec.c:231 #, c-format msgid "could not open file \"%s\" for reading: %s\n" msgstr "no se pudo abrir el archivo «%s» para lectura: %s\n" -#: exec.c:257 +#: exec.c:258 #, c-format msgid "You must have read and write access in the current directory.\n" msgstr "Debe tener privilegios de lectura y escritura en el directorio actual.\n" -#: exec.c:310 exec.c:372 exec.c:436 +#: exec.c:311 exec.c:377 #, c-format msgid "check for \"%s\" failed: %s\n" msgstr "la comprobación de «%s» falló: %s\n" -#: exec.c:313 exec.c:375 +#: exec.c:314 exec.c:380 #, c-format msgid "\"%s\" is not a directory\n" msgstr "«%s» no es un directorio\n" -#: exec.c:439 +#: exec.c:430 #, c-format msgid "check for \"%s\" failed: not a regular file\n" msgstr "La comprobación de «%s» falló: no es un archivo regular\n" -#: exec.c:451 -#, c-format -msgid "check for \"%s\" failed: cannot read file (permission denied)\n" -msgstr "La comprobación de «%s» falló: no se puede leer el archivo (permiso denegado)\n" - -#: exec.c:459 +#: exec.c:433 #, c-format msgid "check for \"%s\" failed: cannot execute (permission denied)\n" msgstr "La comprobación de «%s» falló: no se puede ejecutar (permiso denegado)\n" +#: exec.c:439 +#, fuzzy, c-format +#| msgid "check for \"%s\" failed: cannot execute (permission denied)\n" +msgid "check for \"%s\" failed: cannot execute\n" +msgstr "La comprobación de «%s» falló: no se puede ejecutar (permiso denegado)\n" + +#: exec.c:449 +#, fuzzy, c-format +#| msgid "check for \"%s\" failed: cannot execute (permission denied)\n" +msgid "check for \"%s\" failed: incorrect version: found \"%s\", expected \"%s\"\n" +msgstr "La comprobación de «%s» falló: no se puede ejecutar (permiso denegado)\n" + #: file.c:43 file.c:61 #, c-format msgid "error while cloning relation \"%s.%s\" (\"%s\" to \"%s\"): %s\n" @@ -1334,9 +1448,10 @@ msgid "could not create worker thread: %s\n" msgstr "no se pudo crear el thread: %s\n" #: parallel.c:300 -#, c-format -msgid "waitpid() failed: %s\n" -msgstr "waitpid() fallida: %s\n" +#, fuzzy, c-format +#| msgid "%s failed: %s" +msgid "%s() failed: %s\n" +msgstr "%s falló: %s" #: parallel.c:304 #, c-format @@ -1348,12 +1463,12 @@ msgstr "el proceso hijo terminó anormalmente: estado %d\n" msgid "child worker exited abnormally: %s\n" msgstr "el thread terminó anormalmente: %s\n" -#: pg_upgrade.c:108 +#: pg_upgrade.c:107 #, c-format msgid "could not read permissions of directory \"%s\": %s\n" msgstr "no se pudo obtener los permisos del directorio «%s»: %s\n" -#: pg_upgrade.c:123 +#: pg_upgrade.c:122 #, c-format msgid "" "\n" @@ -1364,17 +1479,17 @@ msgstr "" "Llevando a cabo el Upgrade\n" "--------------------------\n" -#: pg_upgrade.c:166 +#: pg_upgrade.c:165 #, c-format msgid "Setting next OID for new cluster" msgstr "Seteando siguiente OID para el nuevo clúster" -#: pg_upgrade.c:173 +#: pg_upgrade.c:172 #, c-format msgid "Sync data directory to disk" msgstr "Sincronizando directorio de datos a disco" -#: pg_upgrade.c:185 +#: pg_upgrade.c:183 #, c-format msgid "" "\n" @@ -1385,12 +1500,12 @@ msgstr "" "Actualización Completa\n" "----------------------\n" -#: pg_upgrade.c:220 +#: pg_upgrade.c:216 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: no se pudo encontrar el ejecutable propio\n" -#: pg_upgrade.c:246 +#: pg_upgrade.c:242 #, c-format msgid "" "There seems to be a postmaster servicing the old cluster.\n" @@ -1399,7 +1514,7 @@ msgstr "" "Parece haber un postmaster sirviendo el clúster antiguo.\n" "Por favor detenga ese postmaster e inténtelo nuevamente.\n" -#: pg_upgrade.c:259 +#: pg_upgrade.c:255 #, c-format msgid "" "There seems to be a postmaster servicing the new cluster.\n" @@ -1408,67 +1523,67 @@ msgstr "" "Parece haber un postmaster sirviendo el clúster nuevo.\n" "Por favor detenga ese postmaster e inténtelo nuevamente.\n" -#: pg_upgrade.c:273 +#: pg_upgrade.c:269 #, c-format msgid "Analyzing all rows in the new cluster" msgstr "Analizando todas las filas en el clúster nuevo" -#: pg_upgrade.c:286 +#: pg_upgrade.c:282 #, c-format msgid "Freezing all rows in the new cluster" msgstr "Congelando todas las filas en el nuevo clúster" -#: pg_upgrade.c:306 +#: pg_upgrade.c:302 #, c-format msgid "Restoring global objects in the new cluster" msgstr "Restaurando objetos globales en el nuevo clúster" -#: pg_upgrade.c:321 +#: pg_upgrade.c:317 #, c-format msgid "Restoring database schemas in the new cluster\n" msgstr "Restaurando esquemas de bases de datos en el clúster nuevo\n" -#: pg_upgrade.c:425 +#: pg_upgrade.c:421 #, c-format msgid "Deleting files from new %s" msgstr "Eliminando archivos del nuevo %s" -#: pg_upgrade.c:429 +#: pg_upgrade.c:425 #, c-format msgid "could not delete directory \"%s\"\n" msgstr "no se pudo eliminar directorio «%s»\n" -#: pg_upgrade.c:448 +#: pg_upgrade.c:444 #, c-format msgid "Copying old %s to new server" msgstr "Copiando el %s antiguo al nuevo servidor" -#: pg_upgrade.c:475 +#: pg_upgrade.c:471 #, c-format msgid "Setting next transaction ID and epoch for new cluster" msgstr "Seteando el ID de transacción y «época» siguientes en el nuevo clúster" -#: pg_upgrade.c:505 +#: pg_upgrade.c:501 #, c-format msgid "Setting next multixact ID and offset for new cluster" msgstr "Seteando el multixact ID y offset siguientes en el nuevo clúster" -#: pg_upgrade.c:529 +#: pg_upgrade.c:525 #, c-format msgid "Setting oldest multixact ID in new cluster" msgstr "Seteando el multixact ID más antiguo en el nuevo clúster" -#: pg_upgrade.c:549 +#: pg_upgrade.c:545 #, c-format msgid "Resetting WAL archives" msgstr "Reseteando los archivos de WAL" -#: pg_upgrade.c:592 +#: pg_upgrade.c:588 #, c-format msgid "Setting frozenxid and minmxid counters in new cluster" msgstr "Seteando contadores frozenxid y minmxid en el clúster nuevo" -#: pg_upgrade.c:594 +#: pg_upgrade.c:590 #, c-format msgid "Setting minmxid counter in new cluster" msgstr "Seteando contador minmxid en el clúster nuevo" @@ -1493,47 +1608,42 @@ msgstr "Enlazando archivos de relaciones de usuario\n" msgid "old database \"%s\" not found in the new cluster\n" msgstr "la base de datos «%s» no se encontró en el clúster nuevo\n" -#: relfilenode.c:234 +#: relfilenode.c:230 #, c-format msgid "error while checking for file existence \"%s.%s\" (\"%s\" to \"%s\"): %s\n" msgstr "error mientras se comprobaba la existencia del archivo «%s.%s» («%s» a «%s»); %s\n" -#: relfilenode.c:252 +#: relfilenode.c:248 #, c-format msgid "rewriting \"%s\" to \"%s\"\n" msgstr "reescribiendo «%s» a «%s»\n" -#: relfilenode.c:260 +#: relfilenode.c:256 #, c-format msgid "cloning \"%s\" to \"%s\"\n" msgstr "clonando «%s» a «%s»\n" -#: relfilenode.c:265 +#: relfilenode.c:261 #, c-format msgid "copying \"%s\" to \"%s\"\n" msgstr "copiando «%s» a «%s»\n" -#: relfilenode.c:270 +#: relfilenode.c:266 #, c-format msgid "linking \"%s\" to \"%s\"\n" msgstr "enlazando «%s» a «%s»\n" -#: server.c:33 -#, c-format -msgid "connection to database failed: %s" -msgstr "falló la conexión a la base de datos: %s" - -#: server.c:39 server.c:141 util.c:135 util.c:165 +#: server.c:38 server.c:142 util.c:135 util.c:165 #, c-format msgid "Failure, exiting\n" msgstr "Falló, saliendo\n" -#: server.c:131 +#: server.c:132 #, c-format msgid "executing: %s\n" msgstr "ejecutando: %s\n" -#: server.c:137 +#: server.c:138 #, c-format msgid "" "SQL command failed\n" @@ -1544,24 +1654,23 @@ msgstr "" "%s\n" "%s" -#: server.c:167 +#: server.c:168 #, c-format msgid "could not open version file \"%s\": %m\n" msgstr "no se pudo abrir el archivo de versión «%s»: %m\n" -#: server.c:171 +#: server.c:172 #, c-format msgid "could not parse version file \"%s\"\n" msgstr "no se pudo interpretar el archivo de versión «%s»\n" -#: server.c:297 -#, c-format +#: server.c:298 +#, fuzzy, c-format +#| msgid "%s" msgid "" "\n" -"connection to database failed: %s" -msgstr "" -"\n" -"falló la conexión a la base de datos: %s" +"%s" +msgstr "%s" #: server.c:302 #, c-format @@ -1645,7 +1754,7 @@ msgstr "éxito" msgid "Checking for large objects" msgstr "Buscando objetos grandes" -#: version.c:77 version.c:384 +#: version.c:77 version.c:419 #, c-format msgid "warning" msgstr "atención" @@ -1686,19 +1795,28 @@ msgstr "" "cuando se ejecute en psql con el superusuario de la base de datos\n" "establecerá los privilegios por omisión.\n" -#: version.c:239 +#: version.c:272 #, c-format msgid "Checking for incompatible \"line\" data type" msgstr "Verificando datos de usuario de tipo «line» incompatible" -#: version.c:246 -#, c-format +#: version.c:279 +#, fuzzy, c-format +#| msgid "" +#| "Your installation contains the \"line\" data type in user tables. This\n" +#| "data type changed its internal and input/output format between your old\n" +#| "and new clusters so this cluster cannot currently be upgraded. You can\n" +#| "remove the problem tables and restart the upgrade. A list of the problem\n" +#| "columns is in the file:\n" +#| " %s\n" +#| "\n" msgid "" -"Your installation contains the \"line\" data type in user tables. This\n" -"data type changed its internal and input/output format between your old\n" -"and new clusters so this cluster cannot currently be upgraded. You can\n" -"remove the problem tables and restart the upgrade. A list of the problem\n" -"columns is in the file:\n" +"Your installation contains the \"line\" data type in user tables.\n" +"This data type changed its internal and input/output format\n" +"between your old and new versions so this\n" +"cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" " %s\n" "\n" msgstr "" @@ -1711,17 +1829,25 @@ msgstr "" " %s\n" "\n" -#: version.c:276 +#: version.c:310 #, c-format msgid "Checking for invalid \"unknown\" user columns" msgstr "Verificando columnas de usuario del tipo no válido «unknown»" -#: version.c:283 -#, c-format +#: version.c:317 +#, fuzzy, c-format +#| msgid "" +#| "Your installation contains the \"unknown\" data type in user tables. This\n" +#| "data type is no longer allowed in tables, so this cluster cannot currently\n" +#| "be upgraded. You can remove the problem tables and restart the upgrade.\n" +#| "A list of the problem columns is in the file:\n" +#| " %s\n" +#| "\n" msgid "" -"Your installation contains the \"unknown\" data type in user tables. This\n" -"data type is no longer allowed in tables, so this cluster cannot currently\n" -"be upgraded. You can remove the problem tables and restart the upgrade.\n" +"Your installation contains the \"unknown\" data type in user tables.\n" +"This data type is no longer allowed in tables, so this\n" +"cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" "A list of the problem columns is in the file:\n" " %s\n" "\n" @@ -1733,12 +1859,12 @@ msgstr "" " %s\n" "\n" -#: version.c:306 +#: version.c:341 #, c-format msgid "Checking for hash indexes" msgstr "Verificando índices hash" -#: version.c:386 +#: version.c:421 #, c-format msgid "" "\n" @@ -1755,7 +1881,7 @@ msgstr "" "instrucciones de REINDEX.\n" "\n" -#: version.c:392 +#: version.c:427 #, c-format msgid "" "\n" @@ -1776,18 +1902,26 @@ msgstr "" "los índices no válidos; hasta entonces, ninguno de esos índices será usado.\n" "\n" -#: version.c:418 +#: version.c:453 #, c-format msgid "Checking for invalid \"sql_identifier\" user columns" msgstr "Verificando columnas de usuario del tipo «sql_identifier»" -#: version.c:426 -#, c-format +#: version.c:461 +#, fuzzy, c-format +#| msgid "" +#| "Your installation contains the \"sql_identifier\" data type in user tables\n" +#| "and/or indexes. The on-disk format for this data type has changed, so this\n" +#| "cluster cannot currently be upgraded. You can remove the problem tables or\n" +#| "change the data type to \"name\" and restart the upgrade.\n" +#| "A list of the problem columns is in the file:\n" +#| " %s\n" +#| "\n" msgid "" -"Your installation contains the \"sql_identifier\" data type in user tables\n" -"and/or indexes. The on-disk format for this data type has changed, so this\n" -"cluster cannot currently be upgraded. You can remove the problem tables or\n" -"change the data type to \"name\" and restart the upgrade.\n" +"Your installation contains the \"sql_identifier\" data type in user tables.\n" +"The on-disk format for this data type has changed, so this\n" +"cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" "A list of the problem columns is in the file:\n" " %s\n" "\n" @@ -1800,3 +1934,34 @@ msgstr "" "Un listado de columnas problemáticas está en el archivo:\n" " %s\n" "\n" + +#~ msgid "" +#~ "\n" +#~ "connection to database failed: %s" +#~ msgstr "" +#~ "\n" +#~ "falló la conexión a la base de datos: %s" + +#~ msgid "connection to database failed: %s" +#~ msgstr "falló la conexión a la base de datos: %s" + +#~ msgid "waitpid() failed: %s\n" +#~ msgstr "waitpid() fallida: %s\n" + +#~ msgid "check for \"%s\" failed: cannot read file (permission denied)\n" +#~ msgstr "La comprobación de «%s» falló: no se puede leer el archivo (permiso denegado)\n" + +#~ msgid "Creating script to analyze new cluster" +#~ msgstr "Creando un script para analizar el clúster nuevo" + +#~ msgid "" +#~ "Optimizer statistics and free space information are not transferred\n" +#~ "by pg_upgrade so, once you start the new server, consider running:\n" +#~ " %s\n" +#~ "\n" +#~ msgstr "" +#~ "Las estadísticas para el optimizador y la información de espacio libre\n" +#~ "no son transferidas por pg_upgrade, de manera que una vez que inicie\n" +#~ "el servidor nuevo considere ejecutar:\n" +#~ " %s\n" +#~ "\n" diff --git a/src/bin/pg_upgrade/po/fr.po b/src/bin/pg_upgrade/po/fr.po index 4487104347566..54d8b76333e03 100644 --- a/src/bin/pg_upgrade/po/fr.po +++ b/src/bin/pg_upgrade/po/fr.po @@ -7,17 +7,17 @@ msgid "" msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-26 06:47+0000\n" -"PO-Revision-Date: 2021-04-26 11:37+0200\n" +"POT-Creation-Date: 2021-05-11 07:47+0000\n" +"PO-Revision-Date: 2021-05-11 10:39+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 2.4.3\n" -#: check.c:69 +#: check.c:70 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -26,7 +26,7 @@ msgstr "" "Exécution de tests de cohérence sur l'ancien serveur\n" "----------------------------------------------------\n" -#: check.c:75 +#: check.c:76 #, c-format msgid "" "Performing Consistency Checks\n" @@ -35,7 +35,7 @@ msgstr "" "Exécution de tests de cohérence\n" "-------------------------------\n" -#: check.c:211 +#: check.c:213 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "*Les instances sont compatibles*\n" -#: check.c:217 +#: check.c:219 #, c-format msgid "" "\n" @@ -55,7 +55,7 @@ msgstr "" "Si pg_upgrade échoue après cela, vous devez ré-exécuter initdb\n" "sur la nouvelle instance avant de continuer.\n" -#: check.c:260 +#: check.c:262 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade.\n" @@ -68,7 +68,7 @@ msgstr "" " %s/vacuumdb %s--all --analyze-in-stages\n" "\n" -#: check.c:266 +#: check.c:268 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -78,7 +78,7 @@ msgstr "" "instance :\n" " %s\n" -#: check.c:271 +#: check.c:273 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -92,77 +92,77 @@ msgstr "" "de l'ancienne instance. Le contenu de l'ancienne instance doit être supprimé\n" "manuellement.\n" -#: check.c:283 +#: check.c:285 #, c-format msgid "Checking cluster versions" msgstr "Vérification des versions des instances" -#: check.c:295 +#: check.c:297 #, c-format msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" msgstr "Cet outil peut seulement mettre à jour les versions 8.4 et ultérieures de PostgreSQL.\n" -#: check.c:299 +#: check.c:301 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Cet outil peut seulement mettre à jour vers la version %s de PostgreSQL.\n" -#: check.c:308 +#: check.c:310 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Cet outil ne peut pas être utilisé pour mettre à jour vers des versions majeures plus anciennes de PostgreSQL.\n" -#: check.c:313 +#: check.c:315 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "Les répertoires des données de l'ancienne instance et des binaires sont de versions majeures différentes.\n" -#: check.c:316 +#: check.c:318 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "Les répertoires des données de la nouvelle instance et des binaires sont de versions majeures différentes.\n" -#: check.c:333 +#: check.c:335 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Lors de la vérification d'un serveur antérieur à la 9.1, vous devez spécifier le numéro de port de l'ancien serveur.\n" -#: check.c:337 +#: check.c:339 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Lors de la vérification d'un serveur en production, l'ancien numéro de port doit être différent du nouveau.\n" -#: check.c:352 +#: check.c:354 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "les encodages de la base de données « %s » ne correspondent pas : ancien « %s », nouveau « %s »\n" -#: check.c:357 +#: check.c:359 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "les valeurs de lc_collate de la base de données « %s » ne correspondent pas : ancien « %s », nouveau « %s »\n" -#: check.c:360 +#: check.c:362 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "les valeurs de lc_ctype de la base de données « %s » ne correspondent pas : ancien « %s », nouveau « %s »\n" -#: check.c:433 +#: check.c:435 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "La nouvelle instance « %s » n'est pas vide : relation « %s.%s » trouvée\n" -#: check.c:490 +#: check.c:492 #, c-format msgid "Checking for new cluster tablespace directories" msgstr "Vérification des répertoires de tablespace de la nouvelle instance" -#: check.c:501 +#: check.c:503 #, c-format msgid "new cluster tablespace directory already exists: \"%s\"\n" msgstr "le répertoire du tablespace de la nouvelle instance existe déjà : « %s »\n" -#: check.c:534 +#: check.c:536 #, c-format msgid "" "\n" @@ -171,7 +171,7 @@ msgstr "" "\n" "AVERTISSEMENT : le nouveau répertoire de données ne doit pas être à l'intérieur de l'ancien répertoire de données, %s\n" -#: check.c:558 +#: check.c:560 #, c-format msgid "" "\n" @@ -180,85 +180,84 @@ msgstr "" "\n" "AVERTISSEMENT : les emplacements de tablespaces utilisateurs ne doivent pas être à l'intérieur du répertoire de données, %s\n" -#: check.c:568 +#: check.c:570 #, c-format msgid "Creating script to delete old cluster" msgstr "Création du script pour supprimer l'ancienne instance" -#: check.c:571 check.c:835 check.c:933 check.c:1012 check.c:1122 check.c:1213 -#: check.c:1331 file.c:336 function.c:240 option.c:504 version.c:54 -#: version.c:199 version.c:341 +#: check.c:573 check.c:837 check.c:935 check.c:1014 check.c:1276 file.c:336 +#: function.c:240 option.c:497 version.c:54 version.c:204 version.c:376 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "n'a pas pu ouvrir le fichier « %s » : %s\n" -#: check.c:627 +#: check.c:629 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "n'a pas pu ajouter les droits d'exécution pour le fichier « %s » : %s\n" -#: check.c:647 +#: check.c:649 #, c-format msgid "Checking database user is the install user" msgstr "Vérification que l'utilisateur de la base de données est l'utilisateur d'installation" -#: check.c:663 +#: check.c:665 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "l'utilisateur de la base de données « %s » n'est pas l'utilisateur d'installation\n" -#: check.c:674 +#: check.c:676 #, c-format msgid "could not determine the number of users\n" msgstr "n'a pas pu déterminer le nombre d'utilisateurs\n" -#: check.c:682 +#: check.c:684 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "Seul l'utilisateur d'installation peut être défini dans la nouvelle instance.\n" -#: check.c:702 +#: check.c:704 #, c-format msgid "Checking database connection settings" msgstr "Vérification des paramètres de connexion de la base de données" -#: check.c:724 +#: check.c:726 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 ne doit pas autoriser les connexions, ie pg_database.datallowconn doit valoir false\n" -#: check.c:734 +#: check.c:736 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Toutes les bases de données, autre que template0, doivent autoriser les connexions, ie pg_database.datallowconn doit valoir true\n" -#: check.c:759 +#: check.c:761 #, c-format msgid "Checking for prepared transactions" msgstr "Vérification des transactions préparées" -#: check.c:768 +#: check.c:770 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "L'instance source contient des transactions préparées\n" -#: check.c:770 +#: check.c:772 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "L'instance cible contient des transactions préparées\n" -#: check.c:796 +#: check.c:798 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Vérification de contrib/isn avec une différence sur le passage des bigint" -#: check.c:857 check.c:958 check.c:1034 check.c:1145 check.c:1236 check.c:1354 -#: function.c:262 version.c:245 version.c:282 version.c:425 +#: check.c:859 check.c:960 check.c:1036 check.c:1093 check.c:1152 check.c:1181 +#: check.c:1299 function.c:262 version.c:278 version.c:316 version.c:460 #, c-format msgid "fatal\n" msgstr "fatal\n" -#: check.c:858 +#: check.c:860 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -281,12 +280,12 @@ msgstr "" " %s\n" "\n" -#: check.c:881 +#: check.c:883 #, c-format msgid "Checking for user-defined postfix operators" msgstr "Vérification des opérateurs postfixes définis par les utilisateurs" -#: check.c:959 +#: check.c:961 #, c-format msgid "" "Your installation contains user-defined postfix operators, which are not\n" @@ -302,12 +301,12 @@ msgstr "" "Une liste des opérateurs postfixes définis par les utilisateurs se trouve dans le fichier :\n" " %s\n" -#: check.c:980 +#: check.c:982 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Vérification des tables WITH OIDS" -#: check.c:1035 +#: check.c:1037 #, c-format msgid "" "Your installation contains tables declared WITH OIDS, which is not\n" @@ -325,74 +324,98 @@ msgstr "" #: check.c:1065 #, c-format +msgid "Checking for system-defined composite types in user tables" +msgstr "Vérification des types composites définis par le système dans les tables utilisateurs" + +#: check.c:1094 +#, c-format +msgid "" +"Your installation contains system-defined composite type(s) in user tables.\n" +"These type OIDs are not stable across PostgreSQL versions,\n" +"so this cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" +" %s\n" +"\n" +msgstr "" +"Votre installation contient des types composites définis par le système dans vos tables\n" +"utilisateurs. Les OID de ces types ne sont pas stables entre différentes versions majeures\n" +"de PostgreSQL, donc cette instance ne peut pas être mise à jour actuellement. Vous pouvez\n" +"supprimer les colonnes problématiques, puis relancer la mise à jour. Vous trouverez\n" +"une liste des colonnes problématiques dans le fichier :\n" +" %s\n" +"\n" + +#: check.c:1122 +#, c-format msgid "Checking for reg* data types in user tables" msgstr "Vérification des types de données reg* dans les tables utilisateurs" -#: check.c:1146 +#: check.c:1153 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" "These data types reference system OIDs that are not preserved by\n" "pg_upgrade, so this cluster cannot currently be upgraded. You can\n" -"remove the problem tables and restart the upgrade. A list of the\n" -"problem columns is in the file:\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" " %s\n" "\n" msgstr "" -"Votre installation contient un des types de données reg* dans les tables\n" +"Votre installation contient un des types de données reg* dans vos tables\n" "utilisateurs. Ces types de données référencent des OID système qui ne sont\n" "pas préservés par pg_upgrade, donc cette instance ne peut pas être mise à\n" -"jour actuellement. Vous pouvez supprimer les tables problématiques et relancer\n" +"jour actuellement. Vous pouvez supprimer les colonnes problématiques et relancer\n" "la mise à jour. Une liste des colonnes problématiques est disponible dans le\n" "fichier :\n" " %s\n" "\n" -#: check.c:1171 +#: check.c:1175 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Vérification des types de données « jsonb » incompatibles" -#: check.c:1237 +#: check.c:1182 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" "The internal format of \"jsonb\" changed during 9.4 beta so this\n" -"cluster cannot currently be upgraded. You can remove the problem\n" -"tables and restart the upgrade. A list of the problem columns is\n" -"in the file:\n" +"cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" " %s\n" "\n" msgstr "" -"Votre installation contient un type de données jsonb dans les tables utilisateurs.\n" -"Le format interne de jsonb a changé lors du développement de la version 9.4 beta, donc\n" +"Votre installation contient un type de données « jsonb » dans vos tables utilisateurs.\n" +"Le format interne de « jsonb » a changé lors du développement de la version 9.4 beta, donc\n" "cette instance ne peut pas être mise à jour actuellement. Vous pouvez supprimer les\n" -"tables problématiques et relancer la mise à jour. Une liste des colonnes problématiques\n" +"colonnes problématiques et relancer la mise à jour. Une liste des colonnes problématiques\n" "est disponible dans le fichier :\n" " %s\n" "\n" -#: check.c:1259 +#: check.c:1204 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Vérification des rôles commençant avec « pg_ »" -#: check.c:1269 +#: check.c:1214 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "L'instance source contient des rôles commençant avec « pg_ »\n" -#: check.c:1271 +#: check.c:1216 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "L'instance cible contient des rôles commençant avec « pg_ »\n" -#: check.c:1292 +#: check.c:1237 #, c-format msgid "Checking for user-defined encoding conversions" msgstr "Vérification des conversions d'encodage définies par les utilisateurs" -#: check.c:1355 +#: check.c:1300 #, c-format msgid "" "Your installation contains user-defined encoding conversions.\n" @@ -411,17 +434,17 @@ msgstr "" " %s\n" "\n" -#: check.c:1382 +#: check.c:1327 #, c-format msgid "failed to get the current locale\n" msgstr "a échoué pour obtenir la locale courante\n" -#: check.c:1391 +#: check.c:1336 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "a échoué pour obtenir le nom de la locale système « %s »\n" -#: check.c:1397 +#: check.c:1342 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "a échoué pour restaurer l'ancienne locale « %s »\n" @@ -720,7 +743,7 @@ msgstr "commande trop longue\n" msgid "%s\n" msgstr "%s\n" -#: exec.c:150 option.c:222 +#: exec.c:150 option.c:217 #, c-format msgid "could not open log file \"%s\": %m\n" msgstr "n'a pas pu ouvrir le fichier de traces « %s » : %m\n" @@ -753,7 +776,7 @@ msgid "" "the probable cause of the failure.\n" msgstr "Consultez les dernières lignes de « %s » pour trouver la cause probable de l'échec.\n" -#: exec.c:205 option.c:231 +#: exec.c:205 option.c:226 #, c-format msgid "could not write to log file \"%s\": %m\n" msgstr "n'a pas pu écrire dans le fichier de traces « %s »\n" @@ -1050,79 +1073,79 @@ msgstr "Base de données : %s\n" msgid "relname: %s.%s: reloid: %u reltblspace: %s\n" msgstr "relname : %s.%s : reloid : %u reltblspace : %s\n" -#: option.c:103 +#: option.c:102 #, c-format msgid "%s: cannot be run as root\n" msgstr "%s : ne peut pas être exécuté en tant que root\n" -#: option.c:171 +#: option.c:170 #, c-format msgid "invalid old port number\n" msgstr "ancien numéro de port invalide\n" -#: option.c:176 +#: option.c:175 #, c-format msgid "invalid new port number\n" msgstr "nouveau numéro de port invalide\n" -#: option.c:212 +#: option.c:207 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayez « %s --help » pour plus d'informations.\n" -#: option.c:219 +#: option.c:214 #, c-format msgid "too many command-line arguments (first is \"%s\")\n" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)\n" -#: option.c:225 +#: option.c:220 #, c-format msgid "Running in verbose mode\n" msgstr "Exécution en mode verbeux\n" -#: option.c:256 +#: option.c:251 msgid "old cluster binaries reside" msgstr "les binaires de l'ancienne instance résident" -#: option.c:258 +#: option.c:253 msgid "new cluster binaries reside" msgstr "les binaires de la nouvelle instance résident" -#: option.c:260 +#: option.c:255 msgid "old cluster data resides" msgstr "les données de l'ancienne instance résident" -#: option.c:262 +#: option.c:257 msgid "new cluster data resides" msgstr "les données de la nouvelle instance résident" -#: option.c:264 +#: option.c:259 msgid "sockets will be created" msgstr "les sockets seront créés" -#: option.c:281 option.c:381 +#: option.c:276 option.c:374 #, c-format msgid "could not determine current directory\n" msgstr "n'a pas pu déterminer le répertoire courant\n" -#: option.c:284 +#: option.c:279 #, c-format msgid "cannot run pg_upgrade from inside the new cluster data directory on Windows\n" msgstr "ne peut pas exécuter pg_upgrade depuis le répertoire de données de la nouvelle instance sur Windows\n" -#: option.c:293 +#: option.c:288 #, c-format msgid "" "pg_upgrade upgrades a PostgreSQL cluster to a different major version.\n" "\n" msgstr "pg_upgrade met à jour une instance PostgreSQL vers une version majeure différente.\n" -#: option.c:294 +#: option.c:289 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: option.c:295 +#: option.c:290 #, c-format msgid "" " pg_upgrade [OPTION]...\n" @@ -1131,17 +1154,17 @@ msgstr "" " pg_upgrade [OPTION]...\n" "\n" -#: option.c:296 +#: option.c:291 #, c-format msgid "Options:\n" msgstr "Options :\n" -#: option.c:297 +#: option.c:292 #, c-format msgid " -b, --old-bindir=BINDIR old cluster executable directory\n" msgstr " -b, --old-bindir=DIRBIN répertoire des exécutables de l'ancienne instance\n" -#: option.c:298 +#: option.c:293 #, c-format msgid "" " -B, --new-bindir=BINDIR new cluster executable directory (default\n" @@ -1151,96 +1174,87 @@ msgstr "" " le même répertoire que pg_upgrade)\n" "\n" -#: option.c:300 +#: option.c:295 #, c-format msgid " -c, --check check clusters only, don't change any data\n" msgstr " -c, --check vérifie seulement les instances, pas de modifications\n" -#: option.c:301 +#: option.c:296 #, c-format msgid " -d, --old-datadir=DATADIR old cluster data directory\n" msgstr " -d, --old-datadir=DIRDONNEES répertoire des données de l'ancienne instance\n" -#: option.c:302 +#: option.c:297 #, c-format msgid " -D, --new-datadir=DATADIR new cluster data directory\n" msgstr " -D, --new-datadir=DIRDONNEES répertoire des données de la nouvelle instance\n" -#: option.c:303 +#: option.c:298 #, c-format msgid " -j, --jobs=NUM number of simultaneous processes or threads to use\n" msgstr " -j, --jobs=NUM nombre de processus ou threads simultanés à utiliser\n" -#: option.c:304 +#: option.c:299 #, c-format msgid " -k, --link link instead of copying files to new cluster\n" msgstr " -k, --link lie les fichiers au lieu de les copier vers la nouvelle instance\n" -#: option.c:305 +#: option.c:300 #, c-format msgid " -o, --old-options=OPTIONS old cluster options to pass to the server\n" msgstr " -o, --old-options=OPTIONS options à passer au serveur de l'ancienne instance\n" -#: option.c:306 +#: option.c:301 #, c-format msgid " -O, --new-options=OPTIONS new cluster options to pass to the server\n" msgstr " -O, --new-options=OPTIONS options à passer au serveur de la nouvelle instance\n" -#: option.c:307 +#: option.c:302 #, c-format msgid " -p, --old-port=PORT old cluster port number (default %d)\n" msgstr " -p, --old-port=PORT numéro de port de l'ancienne instance (par défaut %d)\n" -#: option.c:308 +#: option.c:303 #, c-format msgid " -P, --new-port=PORT new cluster port number (default %d)\n" msgstr " -P, --new-port=PORT numéro de port de la nouvelle instance (par défaut %d)\n" -#: option.c:309 +#: option.c:304 #, c-format msgid " -r, --retain retain SQL and log files after success\n" msgstr " -r, --retain conserve les fichiers SQL et de traces en cas de succès\n" -#: option.c:310 +#: option.c:305 #, c-format msgid " -s, --socketdir=DIR socket directory to use (default current dir.)\n" msgstr " -s, --socketdir=DIR répertoire de la socket à utiliser (par défaut le répertoire courant)\n" -#: option.c:311 +#: option.c:306 #, c-format msgid " -U, --username=NAME cluster superuser (default \"%s\")\n" msgstr " -U, --username=NOM superutilisateur de l'instance (par défaut « %s »)\n" -#: option.c:312 +#: option.c:307 #, c-format msgid " -v, --verbose enable verbose internal logging\n" msgstr " -v, --verbose active des traces internes verbeuses\n" -#: option.c:313 +#: option.c:308 #, c-format msgid " -V, --version display version information, then exit\n" msgstr " -V, --version affiche la version, puis quitte\n" -#: option.c:314 +#: option.c:309 #, c-format msgid " --clone clone instead of copying files to new cluster\n" msgstr " --clone clone au lieu de copier les fichiers vers la nouvelle instance\n" -#: option.c:315 -#, c-format -msgid "" -" --index-collation-versions-unknown\n" -" mark text indexes as needing to be rebuilt\n" -msgstr "" -" --index-collation-versions-unknown\n" -" marque les index de colonnes de type text comme nécessitant une reconstruction\n" - -#: option.c:317 +#: option.c:310 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide, puis quitte\n" -#: option.c:318 +#: option.c:311 #, c-format msgid "" "\n" @@ -1256,7 +1270,7 @@ msgstr "" " arrêter le postmaster de la nouvelle instance\n" "\n" -#: option.c:323 +#: option.c:316 #, c-format msgid "" "\n" @@ -1273,7 +1287,7 @@ msgstr "" " le répertoire « bin » pour l'ancienne version (-b DIRBIN)\n" " le répertoire « bin » pour la nouvelle version (-B DIRBIN)\n" -#: option.c:329 +#: option.c:322 #, c-format msgid "" "\n" @@ -1286,7 +1300,7 @@ msgstr "" " pg_upgrade -d oldCluster/data -D newCluster/data -b oldCluster/bin -B newCluster/bin\n" "ou\n" -#: option.c:334 +#: option.c:327 #, c-format msgid "" " $ export PGDATAOLD=oldCluster/data\n" @@ -1301,7 +1315,7 @@ msgstr "" " $ export PGBINNEW=newCluster/bin\n" " $ pg_upgrade\n" -#: option.c:340 +#: option.c:333 #, c-format msgid "" " C:\\> set PGDATAOLD=oldCluster/data\n" @@ -1316,7 +1330,7 @@ msgstr "" " C:\\> set PGBINNEW=newCluster/bin\n" " C:\\> pg_upgrade\n" -#: option.c:346 +#: option.c:339 #, c-format msgid "" "\n" @@ -1325,12 +1339,12 @@ msgstr "" "\n" "Rapporter les bogues à <%s>.\n" -#: option.c:347 +#: option.c:340 #, c-format msgid "%s home page: <%s>\n" msgstr "page d'accueil %s : <%s>\n" -#: option.c:387 +#: option.c:380 #, c-format msgid "" "You must identify the directory where the %s.\n" @@ -1339,27 +1353,27 @@ msgstr "" "Vous devez identifier le répertoire où le %s.\n" "Merci d'utiliser l'option en ligne de commande %s ou la variable d'environnement %s.\n" -#: option.c:439 +#: option.c:432 #, c-format msgid "Finding the real data directory for the source cluster" msgstr "Recherche du vrai répertoire des données pour l'instance source" -#: option.c:441 +#: option.c:434 #, c-format msgid "Finding the real data directory for the target cluster" msgstr "Recherche du vrai répertoire des données pour l'instance cible" -#: option.c:453 +#: option.c:446 #, c-format msgid "could not get data directory using %s: %s\n" msgstr "n'a pas pu obtenir le répertoire des données en utilisant %s : %s\n" -#: option.c:512 +#: option.c:505 #, c-format msgid "could not read line %d from file \"%s\": %s\n" msgstr "n'a pas pu lire la ligne %d du fichier « %s » : %s\n" -#: option.c:529 +#: option.c:522 #, c-format msgid "user-supplied old port number %hu corrected to %hu\n" msgstr "ancien numéro de port %hu fourni par l'utilisateur corrigé en %hu\n" @@ -1679,7 +1693,7 @@ msgstr "ok" msgid "Checking for large objects" msgstr "Vérification des Large Objects" -#: version.c:77 version.c:384 +#: version.c:77 version.c:419 #, c-format msgid "warning" msgstr "attention" @@ -1720,59 +1734,61 @@ msgstr "" "défaut.\n" "\n" -#: version.c:239 +#: version.c:272 #, c-format msgid "Checking for incompatible \"line\" data type" msgstr "Vérification des types de données line incompatibles" -#: version.c:246 +#: version.c:279 #, c-format msgid "" -"Your installation contains the \"line\" data type in user tables. This\n" -"data type changed its internal and input/output format between your old\n" -"and new clusters so this cluster cannot currently be upgraded. You can\n" -"remove the problem tables and restart the upgrade. A list of the problem\n" -"columns is in the file:\n" +"Your installation contains the \"line\" data type in user tables.\n" +"This data type changed its internal and input/output format\n" +"between your old and new versions so this\n" +"cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" " %s\n" "\n" msgstr "" "Votre installation contient le type de données « line » dans vos tables utilisateurs.\n" -"Ce type de données a changé de format interne et en entrée/sortie entre votre ancienne\n" -"instance et votre nouvelle instance, donc cette instance ne peut pas être mise à jour\n" -"actuellement. Vous pouvez supprimer les tables problématiques et relancer la mise à jour.\n" -"Vous trouverez une liste des colonnes problématiques dans le fichier :\n" +"Ce type de données a changé de format interne et en entrée/sortie entre vos ancienne\n" +"et nouvelle versions, donc cette instance ne peut pas être mise à jour\n" +"actuellement. Vous pouvez supprimer les colonnes problématiques et relancer la mise à jour.\n" +"Une liste des colonnes problématiques se trouve dans le fichier :\n" " %s\n" "\n" -#: version.c:276 +#: version.c:310 #, c-format msgid "Checking for invalid \"unknown\" user columns" msgstr "Vérification des colonnes utilisateurs « unknown » invalides" -#: version.c:283 +#: version.c:317 #, c-format msgid "" -"Your installation contains the \"unknown\" data type in user tables. This\n" -"data type is no longer allowed in tables, so this cluster cannot currently\n" -"be upgraded. You can remove the problem tables and restart the upgrade.\n" +"Your installation contains the \"unknown\" data type in user tables.\n" +"This data type is no longer allowed in tables, so this\n" +"cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" "A list of the problem columns is in the file:\n" " %s\n" "\n" msgstr "" -"Votre installation contient le type de données « unknown » dans les tables\n" +"Votre installation contient le type de données « unknown » dans vos tables\n" "utilisateurs. Ce type de données n'est plus autorisé dans les tables, donc\n" "cette instance ne peut pas être mise à jour pour l'instant. Vous pouvez\n" -"supprimer les tables problématiques et relancer la mise à jour. Vous trouverez\n" +"supprimer les colonnes problématiques, puis relancer la mise à jour. Vous trouverez\n" "une liste des colonnes problématiques dans le fichier :\n" " %s\n" "\n" -#: version.c:306 +#: version.c:341 #, c-format msgid "Checking for hash indexes" msgstr "Vérification des index hash" -#: version.c:386 +#: version.c:421 #, c-format msgid "" "\n" @@ -1789,7 +1805,7 @@ msgstr "" "REINDEX vous seront données.\n" "\n" -#: version.c:392 +#: version.c:427 #, c-format msgid "" "\n" @@ -1810,73 +1826,63 @@ msgstr "" "index invalides. Avant cela, aucun de ces index ne sera utilisé.\n" "\n" -#: version.c:418 +#: version.c:453 #, c-format msgid "Checking for invalid \"sql_identifier\" user columns" msgstr "Vérification des colonnes utilisateurs « sql_identifier » invalides" -#: version.c:426 +#: version.c:461 #, c-format msgid "" -"Your installation contains the \"sql_identifier\" data type in user tables\n" -"and/or indexes. The on-disk format for this data type has changed, so this\n" -"cluster cannot currently be upgraded. You can remove the problem tables or\n" -"change the data type to \"name\" and restart the upgrade.\n" +"Your installation contains the \"sql_identifier\" data type in user tables.\n" +"The on-disk format for this data type has changed, so this\n" +"cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" "A list of the problem columns is in the file:\n" " %s\n" "\n" msgstr "" "Votre installation contient le type de données « sql_identifier » dans les tables\n" -"utilisateurs et/ou index. Le format sur disque pour ce type de données a changé,\n" -"donc cet instance ne peut pas être mise à jour actuellement. Vous pouvez supprimer\n" -"les tables problématiques ou modifier le tupe de données pour « name »,\n" -"puis relancer la mise à jour.\n" +"utilisateurs. Le format sur disque pour ce type de données a changé,\n" +"donc cette instance ne peut pas être mise à jour actuellement. Vous pouvez supprimer\n" +"les colonnes problématiques, puis relancer la mise à jour.\n" "\n" -"Une liste des colonnes problématiques se trouvent dans le fichier :\n" +"Une liste des colonnes problématiques se trouve dans le fichier :\n" " %s\n" "\n" -#~ msgid "Creating script to analyze new cluster" -#~ msgstr "Création d'un script pour analyser la nouvelle instance" - -#~ msgid "check for \"%s\" failed: cannot read file (permission denied)\n" -#~ msgstr "échec de la vérification de « %s » : ne peut pas lire le fichier (droit refusé)\n" - -#~ msgid "connection to database failed: %s" -#~ msgstr "échec de la connexion à la base de données : %s" +#~ msgid "waitpid() failed: %s\n" +#~ msgstr "échec de waitpid() : %s\n" #~ msgid "" +#~ "Optimizer statistics and free space information are not transferred\n" +#~ "by pg_upgrade so, once you start the new server, consider running:\n" +#~ " %s\n" #~ "\n" -#~ "connection to database failed: %s" #~ msgstr "" +#~ "Les statistiques de l'optimiseur et les informations sur l'espace libre\n" +#~ "ne sont pas transférées par pg_upgrade, donc une fois le nouveau\n" +#~ "serveur démarré, pensez à exécuter :\n" +#~ " %s\n" #~ "\n" -#~ "échec de la connexion à la base de données : %s" -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Rapporter les bogues à .\n" +#~ msgid "cannot write to log file %s\n" +#~ msgstr "ne peut pas écrire dans le fichier de traces %s\n" -#~ msgid "could not parse PG_VERSION file from %s\n" -#~ msgstr "n'a pas pu analyser le fichier PG_VERSION à partir de %s\n" +#~ msgid "cannot find current directory\n" +#~ msgstr "ne peut pas trouver le répertoire courant\n" -#~ msgid "------------------------------------------------\n" -#~ msgstr "------------------------------------------------\n" +#~ msgid "Cannot open file %s: %m\n" +#~ msgstr "Ne peut pas ouvrir le fichier %s : %m\n" -#~ msgid "-----------------------------\n" -#~ msgstr "-----------------------------\n" +#~ msgid "Cannot read line %d from %s: %m\n" +#~ msgstr "Ne peut pas lire la ligne %d à partir de %s : %m\n" -#~ msgid "" -#~ "This utility can only upgrade to PostgreSQL version 9.0 after 2010-01-11\n" -#~ "because of backend API changes made during development.\n" -#~ msgstr "" -#~ "Cet outil peut seulement mettre à jour à partir de la version 9.0 de PostgreSQL (après le 11 janvier 2010)\n" -#~ "à cause de changements dans l'API du moteur fait lors du développement.\n" +#~ msgid "----------------\n" +#~ msgstr "----------------\n" -#~ msgid "%s is not a directory\n" -#~ msgstr "%s n'est pas un répertoire\n" +#~ msgid "------------------\n" +#~ msgstr "------------------\n" #~ msgid "" #~ "could not load library \"%s\":\n" @@ -1885,35 +1891,51 @@ msgstr "" #~ "n'a pas pu charger la biblothèque « %s »:\n" #~ "%s\n" -#~ msgid "------------------\n" -#~ msgstr "------------------\n" +#~ msgid "%s is not a directory\n" +#~ msgstr "%s n'est pas un répertoire\n" -#~ msgid "----------------\n" -#~ msgstr "----------------\n" +#~ msgid "" +#~ "This utility can only upgrade to PostgreSQL version 9.0 after 2010-01-11\n" +#~ "because of backend API changes made during development.\n" +#~ msgstr "" +#~ "Cet outil peut seulement mettre à jour à partir de la version 9.0 de PostgreSQL (après le 11 janvier 2010)\n" +#~ "à cause de changements dans l'API du moteur fait lors du développement.\n" -#~ msgid "Cannot read line %d from %s: %m\n" -#~ msgstr "Ne peut pas lire la ligne %d à partir de %s : %m\n" +#~ msgid "-----------------------------\n" +#~ msgstr "-----------------------------\n" -#~ msgid "Cannot open file %s: %m\n" -#~ msgstr "Ne peut pas ouvrir le fichier %s : %m\n" +#~ msgid "------------------------------------------------\n" +#~ msgstr "------------------------------------------------\n" -#~ msgid "cannot find current directory\n" -#~ msgstr "ne peut pas trouver le répertoire courant\n" +#~ msgid "could not parse PG_VERSION file from %s\n" +#~ msgstr "n'a pas pu analyser le fichier PG_VERSION à partir de %s\n" -#~ msgid "cannot write to log file %s\n" -#~ msgstr "ne peut pas écrire dans le fichier de traces %s\n" +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Rapporter les bogues à .\n" #~ msgid "" -#~ "Optimizer statistics and free space information are not transferred\n" -#~ "by pg_upgrade so, once you start the new server, consider running:\n" -#~ " %s\n" #~ "\n" +#~ "connection to database failed: %s" #~ msgstr "" -#~ "Les statistiques de l'optimiseur et les informations sur l'espace libre\n" -#~ "ne sont pas transférées par pg_upgrade, donc une fois le nouveau\n" -#~ "serveur démarré, pensez à exécuter :\n" -#~ " %s\n" #~ "\n" +#~ "échec de la connexion à la base de données : %s" -#~ msgid "waitpid() failed: %s\n" -#~ msgstr "échec de waitpid() : %s\n" +#~ msgid "connection to database failed: %s" +#~ msgstr "échec de la connexion à la base de données : %s" + +#~ msgid "check for \"%s\" failed: cannot read file (permission denied)\n" +#~ msgstr "échec de la vérification de « %s » : ne peut pas lire le fichier (droit refusé)\n" + +#~ msgid "Creating script to analyze new cluster" +#~ msgstr "Création d'un script pour analyser la nouvelle instance" + +#~ msgid "" +#~ " --index-collation-versions-unknown\n" +#~ " mark text indexes as needing to be rebuilt\n" +#~ msgstr "" +#~ " --index-collation-versions-unknown\n" +#~ " marque les index de colonnes de type text comme nécessitant une reconstruction\n" diff --git a/src/bin/pg_verifybackup/po/es.po b/src/bin/pg_verifybackup/po/es.po index cc1a40033d639..98ba8d9e61bda 100644 --- a/src/bin/pg_verifybackup/po/es.po +++ b/src/bin/pg_verifybackup/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_verifybackup (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:44+0000\n" +"POT-Creation-Date: 2021-05-14 19:45+0000\n" "PO-Revision-Date: 2020-10-16 16:01-0300\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: PgSQL-es-ayuda \n" @@ -18,17 +18,17 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.3\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "precaución: " @@ -44,82 +44,82 @@ msgstr "memoria agotada\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" -#: ../../common/jsonapi.c:1064 +#: ../../common/jsonapi.c:1066 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "La secuencia de escape «%s» no es válida." -#: ../../common/jsonapi.c:1067 +#: ../../common/jsonapi.c:1069 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Los caracteres con valor 0x%02x deben ser escapados." -#: ../../common/jsonapi.c:1070 +#: ../../common/jsonapi.c:1072 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Se esperaba el fin de la entrada, se encontró «%s»." -#: ../../common/jsonapi.c:1073 +#: ../../common/jsonapi.c:1075 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Se esperaba un elemento de array o «]», se encontró «%s»." -#: ../../common/jsonapi.c:1076 +#: ../../common/jsonapi.c:1078 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "Se esperaba «,» o «]», se encontró «%s»." -#: ../../common/jsonapi.c:1079 +#: ../../common/jsonapi.c:1081 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "Se esperaba «:», se encontró «%s»." -#: ../../common/jsonapi.c:1082 +#: ../../common/jsonapi.c:1084 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "Se esperaba un valor JSON, se encontró «%s»." -#: ../../common/jsonapi.c:1085 +#: ../../common/jsonapi.c:1087 msgid "The input string ended unexpectedly." msgstr "La cadena de entrada terminó inesperadamente." -#: ../../common/jsonapi.c:1087 +#: ../../common/jsonapi.c:1089 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Se esperaba una cadena o «}», se encontró «%s»." -#: ../../common/jsonapi.c:1090 +#: ../../common/jsonapi.c:1092 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "Se esperaba «,» o «}», se encontró «%s»." -#: ../../common/jsonapi.c:1093 +#: ../../common/jsonapi.c:1095 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Se esperaba una cadena, se encontró «%s»." -#: ../../common/jsonapi.c:1096 +#: ../../common/jsonapi.c:1098 #, c-format msgid "Token \"%s\" is invalid." msgstr "El elemento «%s» no es válido." -#: ../../common/jsonapi.c:1099 +#: ../../common/jsonapi.c:1101 msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 no puede ser convertido a text." -#: ../../common/jsonapi.c:1101 +#: ../../common/jsonapi.c:1103 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "«\\u» debe ser seguido por cuatro dígitos hexadecimales." -#: ../../common/jsonapi.c:1104 +#: ../../common/jsonapi.c:1106 msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." msgstr "Los valores de escape Unicode no se pueden utilizar para valores de código superiores a 007F cuando la codificación no es UTF8." -#: ../../common/jsonapi.c:1106 +#: ../../common/jsonapi.c:1108 msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Un «high-surrogate» Unicode no puede venir después de un «high-surrogate»." -#: ../../common/jsonapi.c:1108 +#: ../../common/jsonapi.c:1110 msgid "Unicode low surrogate must follow a high surrogate." msgstr "Un «low-surrogate» Unicode debe seguir a un «high-surrogate»." @@ -148,8 +148,9 @@ msgid "expected version indicator" msgstr "se esperaba indicador de versión" #: parse_manifest.c:328 -#| msgid "unrecognized top-level field" -msgid "unknown toplevel field" +#, fuzzy +#| msgid "unknown toplevel field" +msgid "unrecognized top-level field" msgstr "campo de nivel superior no reconocido" #: parse_manifest.c:347 @@ -157,8 +158,9 @@ msgid "unexpected file field" msgstr "campo de archivo inesperado" #: parse_manifest.c:361 -#| msgid "unexpected WAL range field" -msgid "unexpected wal range field" +#, fuzzy +#| msgid "unexpected wal range field" +msgid "unexpected WAL range field" msgstr "campo de rango de wal inesperado" #: parse_manifest.c:367 @@ -174,13 +176,15 @@ msgid "unexpected scalar" msgstr "escalar inesperado" #: parse_manifest.c:472 -#| msgid "missing path name" -msgid "missing pathname" +#, fuzzy +#| msgid "missing pathname" +msgid "missing path name" msgstr "ruta de archivo faltante" #: parse_manifest.c:475 -#| msgid "both path name and encoded path name" -msgid "both pathname and encoded pathname" +#, fuzzy +#| msgid "both pathname and encoded pathname" +msgid "both path name and encoded path name" msgstr "hay ambos ruta de archivo (pathname) y ruta codificada (encoded pathname)" #: parse_manifest.c:477 @@ -192,8 +196,9 @@ msgid "checksum without algorithm" msgstr "suma de comprobación sin algoritmo" #: parse_manifest.c:494 -#| msgid "could not decode file name" -msgid "unable to decode filename" +#, fuzzy +#| msgid "unable to decode filename" +msgid "could not decode file name" msgstr "no se pudo decodificar el nombre del archivo" #: parse_manifest.c:504 @@ -227,13 +232,15 @@ msgid "timeline is not an integer" msgstr "el timeline no es un número entero" #: parse_manifest.c:585 -#| msgid "could not parse start LSN" -msgid "unable to parse start LSN" +#, fuzzy +#| msgid "unable to parse start LSN" +msgid "could not parse start LSN" msgstr "no se pudo interpretar el LSN de inicio" #: parse_manifest.c:588 -#| msgid "could not parse end LSN" -msgid "unable to parse end LSN" +#, fuzzy +#| msgid "unable to parse end LSN" +msgid "could not parse end LSN" msgstr "no se pudo interpretar el LSN de término" #: parse_manifest.c:649 @@ -244,22 +251,45 @@ msgstr "esperado al menos 2 líneas" msgid "last line not newline-terminated" msgstr "última línea no termina en nueva línea" +#: parse_manifest.c:657 +#, c-format +msgid "out of memory" +msgstr "memoria agotada" + +#: parse_manifest.c:659 +#, fuzzy, c-format +#| msgid "could not initialize globals" +msgid "could not initialize checksum of manifest" +msgstr "no se pudo inicializar las globales" + #: parse_manifest.c:661 +#, fuzzy, c-format +#| msgid "could not parse backup manifest: %s" +msgid "could not update checksum of manifest" +msgstr "no se pudo analizar el manifiesto de la copia de seguridad: %s" + +#: parse_manifest.c:664 +#, fuzzy, c-format +#| msgid "could not parse backup manifest: %s" +msgid "could not finalize checksum of manifest" +msgstr "no se pudo analizar el manifiesto de la copia de seguridad: %s" + +#: parse_manifest.c:668 #, c-format msgid "manifest has no checksum" msgstr "el manifiesto no tiene suma de comprobación" -#: parse_manifest.c:665 +#: parse_manifest.c:672 #, c-format msgid "invalid manifest checksum: \"%s\"" msgstr "suma de comprobación de manifiesto no válida: \"%s\"" -#: parse_manifest.c:669 +#: parse_manifest.c:676 #, c-format msgid "manifest checksum mismatch" msgstr "discordancia en la suma de comprobación del manifiesto" -#: parse_manifest.c:683 +#: parse_manifest.c:691 #, c-format msgid "could not parse backup manifest: %s" msgstr "no se pudo analizar el manifiesto de la copia de seguridad: %s" @@ -316,20 +346,21 @@ msgstr "no se pudo abrir el archivo «%s»: %m" msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" -#: pg_verifybackup.c:411 pg_verifybackup.c:738 +#: pg_verifybackup.c:411 pg_verifybackup.c:752 #, c-format msgid "could not read file \"%s\": %m" msgstr "no se pudo leer el archivo «%s»: %m" #: pg_verifybackup.c:414 -#, c-format -msgid "could not read file \"%s\": read %d of %zu" +#, fuzzy, c-format +#| msgid "could not read file \"%s\": read %d of %zu" +msgid "could not read file \"%s\": read %d of %lld" msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" #: pg_verifybackup.c:474 -#, c-format -#| msgid "duplicate path name in backup manifest: \"%s\"" -msgid "duplicate pathname in backup manifest: \"%s\"" +#, fuzzy, c-format +#| msgid "duplicate pathname in backup manifest: \"%s\"" +msgid "duplicate path name in backup manifest: \"%s\"" msgstr "nombre de ruta duplicado en el manifiesto de la copia de seguridad: \"%s\"" #: pg_verifybackup.c:537 pg_verifybackup.c:544 @@ -358,8 +389,9 @@ msgid "\"%s\" is present on disk but not in the manifest" msgstr "\"%s\" está presente en el disco pero no en el manifiesto" #: pg_verifybackup.c:641 -#, c-format -msgid "\"%s\" has size %zu on disk but size %zu in the manifest" +#, fuzzy, c-format +#| msgid "\"%s\" has size %zu on disk but size %zu in the manifest" +msgid "\"%s\" has size %lld on disk but size %zu in the manifest" msgstr "\"%s\" tiene un tamaño %zu en el disco pero un tamaño %zu en el manifiesto" #: pg_verifybackup.c:668 @@ -367,32 +399,50 @@ msgstr "\"%s\" tiene un tamaño %zu en el disco pero un tamaño %zu en el manifi msgid "\"%s\" is present in the manifest but not on disk" msgstr "\"%s\" está presente en el manifiesto pero no en el disco" -#: pg_verifybackup.c:744 +#: pg_verifybackup.c:731 +#, fuzzy, c-format +#| msgid "could not parse contents of file \"%s\"" +msgid "could not initialize checksum of file \"%s\"" +msgstr "no se pudo interpretar el contenido del archivo «%s»" + +#: pg_verifybackup.c:743 +#, fuzzy, c-format +#| msgid "could not parse contents of file \"%s\"" +msgid "could not update checksum of file \"%s\"" +msgstr "no se pudo interpretar el contenido del archivo «%s»" + +#: pg_verifybackup.c:758 #, c-format msgid "could not close file \"%s\": %m" msgstr "no se pudo cerrar el archivo «%s»: %m" -#: pg_verifybackup.c:763 +#: pg_verifybackup.c:777 #, c-format msgid "file \"%s\" should contain %zu bytes, but read %zu bytes" msgstr "el archivo \"%s\" debe contener %zu bytes, pero se leyeron %zu bytes" -#: pg_verifybackup.c:774 +#: pg_verifybackup.c:787 +#, fuzzy, c-format +#| msgid "could not parse contents of file \"%s\"" +msgid "could not finalize checksum of file \"%s\"" +msgstr "no se pudo interpretar el contenido del archivo «%s»" + +#: pg_verifybackup.c:795 #, c-format msgid "file \"%s\" has checksum of length %d, but expected %d" msgstr "el archivo \"%s\" tiene una suma de comprobación de longitud %d, pero se esperaba %d" -#: pg_verifybackup.c:778 +#: pg_verifybackup.c:799 #, c-format msgid "checksum mismatch for file \"%s\"" msgstr "no coincide la suma de comprobación para el archivo \"%s\"" -#: pg_verifybackup.c:804 +#: pg_verifybackup.c:823 #, c-format msgid "WAL parsing failed for timeline %u" msgstr "Error al analizar el WAL para el timeline %u" -#: pg_verifybackup.c:890 +#: pg_verifybackup.c:909 #, c-format msgid "" "%s verifies a backup against the backup manifest.\n" @@ -401,7 +451,7 @@ msgstr "" "%s verifica una copia de seguridad con el fichero de manifiesto de la copia de seguridad.\n" "\n" -#: pg_verifybackup.c:891 +#: pg_verifybackup.c:910 #, c-format msgid "" "Usage:\n" @@ -412,57 +462,57 @@ msgstr "" " %s [OPCIÓN]... BACKUPDIR\n" "\n" -#: pg_verifybackup.c:892 +#: pg_verifybackup.c:911 #, c-format msgid "Options:\n" msgstr "Opciones:\n" -#: pg_verifybackup.c:893 +#: pg_verifybackup.c:912 #, c-format msgid " -e, --exit-on-error exit immediately on error\n" msgstr " -e, --exit-on-error salir inmediatamente en caso de error\n" -#: pg_verifybackup.c:894 +#: pg_verifybackup.c:913 #, c-format msgid " -i, --ignore=RELATIVE_PATH ignore indicated path\n" msgstr " -i, --ignore=RELATIVE_PATH ignorar la ruta indicada\n" -#: pg_verifybackup.c:895 +#: pg_verifybackup.c:914 #, c-format msgid " -m, --manifest-path=PATH use specified path for manifest\n" msgstr " -m, --manifest-path=PATH usar la ruta especificada para el manifiesto\n" -#: pg_verifybackup.c:896 +#: pg_verifybackup.c:915 #, c-format msgid " -n, --no-parse-wal do not try to parse WAL files\n" msgstr " -n, --no-parse-wal no intentar analizar archivos WAL\n" -#: pg_verifybackup.c:897 +#: pg_verifybackup.c:916 #, c-format msgid " -q, --quiet do not print any output, except for errors\n" msgstr " -q, --quiet no escribir ningún mensaje, excepto errores\n" -#: pg_verifybackup.c:898 +#: pg_verifybackup.c:917 #, c-format msgid " -s, --skip-checksums skip checksum verification\n" msgstr " -s, --skip-checksums omitir la verificación de la suma de comprobación\n" -#: pg_verifybackup.c:899 +#: pg_verifybackup.c:918 #, c-format msgid " -w, --wal-directory=PATH use specified path for WAL files\n" msgstr " -w, --wal-directory=PATH utilizar la ruta especificada para los archivos WAL\n" -#: pg_verifybackup.c:900 +#: pg_verifybackup.c:919 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar la información de la versión, luego salir\n" -#: pg_verifybackup.c:901 +#: pg_verifybackup.c:920 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help muestra esta ayuda, luego salir\n" -#: pg_verifybackup.c:902 +#: pg_verifybackup.c:921 #, c-format msgid "" "\n" @@ -471,7 +521,7 @@ msgstr "" "\n" "Reporte errores a <%s>.\n" -#: pg_verifybackup.c:903 +#: pg_verifybackup.c:922 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" diff --git a/src/bin/psql/po/es.po b/src/bin/psql/po/es.po index e4ac33b6a8e6f..59c3ffe42a972 100644 --- a/src/bin/psql/po/es.po +++ b/src/bin/psql/po/es.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: psql (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:44+0000\n" +"POT-Creation-Date: 2021-05-14 19:45+0000\n" "PO-Revision-Date: 2020-09-14 13:02-0300\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -22,58 +22,60 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Poedit 2.3\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "precaución: " -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "no se pudo identificar el directorio actual: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "el binario «%s» no es válido" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "no se pudo leer el binario «%s»" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "no se pudo encontrar un «%s» para ejecutar" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "no se pudo cambiar al directorio «%s»: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "no se pudo leer el enlace simbólico «%s»: %m" -#: ../../common/exec.c:410 -#, c-format -msgid "pclose failed: %m" -msgstr "pclose falló: %m" +#: ../../common/exec.c:409 +#, fuzzy, c-format +#| msgid "%s failed: %m" +msgid "%s() failed: %m" +msgstr "%s falló: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 -#: command.c:1255 input.c:227 mainloop.c:81 mainloop.c:402 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 +#: command.c:1315 command.c:3246 command.c:3295 command.c:3412 input.c:227 +#: mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" msgstr "memoria agotada" @@ -94,7 +96,7 @@ msgstr "no se puede duplicar un puntero nulo (error interno)\n" msgid "could not look up effective user ID %ld: %s" msgstr "no se pudo buscar el ID de usuario efectivo %ld: %s" -#: ../../common/username.c:45 command.c:559 +#: ../../common/username.c:45 command.c:565 msgid "user does not exist" msgstr "el usuario no existe" @@ -137,306 +139,306 @@ msgstr "el proceso hijo terminó con código no reconocido %d" msgid "Cancel request sent\n" msgstr "Petición de cancelación enviada\n" -#: ../../fe_utils/cancel.c:165 +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 msgid "Could not send cancel request: " msgstr "No se pudo enviar la petición de cancelación: %s" -#: ../../fe_utils/cancel.c:210 -#, c-format -msgid "Could not send cancel request: %s" -msgstr "No se pudo enviar el paquete de cancelación: %s" - -#: ../../fe_utils/print.c:350 +#: ../../fe_utils/print.c:336 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu fila)" msgstr[1] "(%lu filas)" -#: ../../fe_utils/print.c:3055 +#: ../../fe_utils/print.c:3039 #, c-format msgid "Interrupted\n" msgstr "Interrumpido\n" -#: ../../fe_utils/print.c:3119 +#: ../../fe_utils/print.c:3103 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "No se puede agregar un encabezado al contenido de la tabla: la cantidad de columnas de %d ha sido excedida.\n" -#: ../../fe_utils/print.c:3159 +#: ../../fe_utils/print.c:3143 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "No se puede agregar una celda al contenido de la tabla: la cantidad de celdas de %d ha sido excedida.\n" -#: ../../fe_utils/print.c:3414 +#: ../../fe_utils/print.c:3401 #, c-format msgid "invalid output format (internal error): %d" msgstr "formato de salida no válido (error interno): %d" -#: ../../fe_utils/psqlscan.l:694 +#: ../../fe_utils/psqlscan.l:697 #, c-format msgid "skipping recursive expansion of variable \"%s\"" msgstr "saltando expansión recursiva de la variable «%s»" -#: command.c:224 +#: command.c:230 #, c-format msgid "invalid command \\%s" msgstr "orden \\%s no válida" -#: command.c:226 +#: command.c:232 #, c-format msgid "Try \\? for help." msgstr "Digite \\? para obtener ayuda." -#: command.c:244 +#: command.c:250 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: argumento extra «%s» ignorado" -#: command.c:296 +#: command.c:302 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "orden \\%s ignorada: use \\endif o Ctrl-C para salir del bloque \\if actual" -#: command.c:557 +#: command.c:563 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "no se pudo obtener directorio home para el usuario de ID %ld: %s" -#: command.c:575 +#: command.c:581 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: no se pudo cambiar directorio a «%s»: %m" -#: command.c:600 +#: command.c:606 #, c-format msgid "You are currently not connected to a database.\n" msgstr "No está conectado a una base de datos.\n" -#: command.c:613 +#: command.c:616 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Está conectado a la base de datos «%s» como el usuario «%s» en la dirección «%s» port «%s».\n" -#: command.c:616 +#: command.c:619 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Está conectado a la base de datos «%s» como el usuario «%s» a través del socket en «%s» port «%s».\n" -#: command.c:622 +#: command.c:625 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Está conectado a la base de datos «%s» como el usuario «%s» en el servidor «%s» (dirección «%s») port «%s».\n" -#: command.c:625 +#: command.c:628 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Está conectado a la base de datos «%s» como el usuario «%s» en el servidor «%s» port «%s».\n" -#: command.c:965 command.c:1061 command.c:2550 +#: command.c:1012 command.c:1121 command.c:2602 #, c-format msgid "no query buffer" msgstr "no hay búfer de consulta" -#: command.c:998 command.c:5061 +#: command.c:1045 command.c:5304 #, c-format msgid "invalid line number: %s" msgstr "número de línea no válido: %s" -#: command.c:1052 +#: command.c:1112 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "El servidor (versión %s) no soporta la edición del código fuente de funciones." -#: command.c:1055 +#: command.c:1115 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "El servidor (versión %s) no soporta la edición de vistas." -#: command.c:1137 +#: command.c:1197 msgid "No changes" msgstr "Sin cambios" -#: command.c:1216 +#: command.c:1276 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "%s: nombre de codificación no válido o procedimiento de conversión no encontrado" -#: command.c:1251 command.c:1992 command.c:3253 command.c:5163 common.c:174 -#: common.c:223 common.c:388 common.c:1237 common.c:1265 common.c:1373 -#: common.c:1480 common.c:1518 copy.c:488 copy.c:707 help.c:62 large_obj.c:157 -#: large_obj.c:192 large_obj.c:254 +#: command.c:1311 command.c:2052 command.c:3242 command.c:3434 command.c:5406 +#: common.c:174 common.c:223 common.c:392 common.c:1248 common.c:1276 +#: common.c:1385 common.c:1492 common.c:1530 copy.c:488 copy.c:709 help.c:62 +#: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:298 #, c-format msgid "%s" msgstr "%s" -#: command.c:1258 +#: command.c:1318 msgid "There is no previous error." msgstr "No hay error anterior." -#: command.c:1371 +#: command.c:1431 #, c-format msgid "\\%s: missing right parenthesis" msgstr "\\%s: falta el paréntesis derecho" -#: command.c:1548 command.c:1853 command.c:1867 command.c:1884 command.c:2044 -#: command.c:2281 command.c:2517 command.c:2557 +#: command.c:1608 command.c:1913 command.c:1927 command.c:1944 command.c:2106 +#: command.c:2342 command.c:2569 command.c:2609 #, c-format msgid "\\%s: missing required argument" msgstr "\\%s: falta argumento requerido" -#: command.c:1679 +#: command.c:1739 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif: no puede ocurrir después de \\else" -#: command.c:1684 +#: command.c:1744 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif: no hay un \\if coincidente" -#: command.c:1748 +#: command.c:1808 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else: no puede ocurrir después de \\else" -#: command.c:1753 +#: command.c:1813 #, c-format msgid "\\else: no matching \\if" msgstr "\\else: no hay un \\if coincidente" -#: command.c:1793 +#: command.c:1853 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif: no hay un \\if coincidente" -#: command.c:1948 +#: command.c:2008 msgid "Query buffer is empty." msgstr "El búfer de consulta está vacío." -#: command.c:1970 +#: command.c:2030 msgid "Enter new password: " msgstr "Ingrese la nueva contraseña: " -#: command.c:1971 +#: command.c:2031 msgid "Enter it again: " msgstr "Ingrésela nuevamente: " -#: command.c:1975 +#: command.c:2035 #, c-format msgid "Passwords didn't match." msgstr "Las constraseñas no coinciden." -#: command.c:2074 +#: command.c:2135 #, c-format msgid "\\%s: could not read value for variable" msgstr "%s: no se pudo leer el valor para la variable" -#: command.c:2177 +#: command.c:2238 msgid "Query buffer reset (cleared)." msgstr "El búfer de consulta ha sido reiniciado (limpiado)." -#: command.c:2199 +#: command.c:2260 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Se escribió la historia en el archivo «%s».\n" -#: command.c:2286 +#: command.c:2347 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s: el nombre de variable de ambiente no debe contener «=»" -#: command.c:2347 +#: command.c:2399 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "El servidor (versión %s) no soporta el despliegue del código fuente de funciones." -#: command.c:2350 +#: command.c:2402 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "El servidor (versión %s) no soporta el despliegue de definiciones de vistas." -#: command.c:2357 +#: command.c:2409 #, c-format msgid "function name is required" msgstr "el nombre de la función es requerido" -#: command.c:2359 +#: command.c:2411 #, c-format msgid "view name is required" msgstr "el nombre de la vista es requerido" -#: command.c:2489 +#: command.c:2541 msgid "Timing is on." msgstr "El despliegue de duración está activado." -#: command.c:2491 +#: command.c:2543 msgid "Timing is off." msgstr "El despliegue de duración está desactivado." -#: command.c:2576 command.c:2604 command.c:3661 command.c:3664 command.c:3667 -#: command.c:3673 command.c:3675 command.c:3683 command.c:3693 command.c:3702 -#: command.c:3716 command.c:3733 command.c:3791 common.c:70 copy.c:331 +#: command.c:2628 command.c:2656 command.c:3873 command.c:3876 command.c:3879 +#: command.c:3885 command.c:3887 command.c:3913 command.c:3923 command.c:3935 +#: command.c:3949 command.c:3976 command.c:4034 common.c:70 copy.c:331 #: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s: %m" -#: command.c:2988 startup.c:236 startup.c:287 +#: command.c:3047 startup.c:237 startup.c:287 msgid "Password: " msgstr "Contraseña: " -#: command.c:2993 startup.c:284 +#: command.c:3052 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "Contraseña para usuario %s: " -#: command.c:3064 +#: command.c:3104 #, c-format -msgid "All connection parameters must be supplied because no database connection exists" -msgstr "Debe proveer todos los parámetros de conexión porque no existe conexión a una base de datos" +msgid "Do not give user, host, or port separately when using a connection string" +msgstr "" -#: command.c:3257 +#: command.c:3139 +#, c-format +msgid "No database connection exists to re-use parameters from" +msgstr "" + +#: command.c:3440 #, c-format msgid "Previous connection kept" msgstr "Se ha mantenido la conexión anterior" -#: command.c:3261 +#: command.c:3446 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:3310 +#: command.c:3502 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Ahora está conectado a la base de datos «%s» como el usuario «%s» en la dirección «%s» port «%s».\n" -#: command.c:3313 +#: command.c:3505 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Ahora está conectado a la base de datos «%s» como el usuario «%s» a través del socket en «%s» port «%s».\n" -#: command.c:3319 +#: command.c:3511 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Ahora está conectado a la base de datos «%s» como el usuario «%s» en el servidor «%s» (dirección «%s») port «%s».\n" -#: command.c:3322 +#: command.c:3514 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Ahora está conectado a la base de datos «%s» como el usuario «%s» en el servidor «%s» port «%s».\n" -#: command.c:3327 +#: command.c:3519 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Ahora está conectado a la base de datos «%s» con el usuario «%s».\n" -#: command.c:3360 +#: command.c:3559 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, servidor %s)\n" -#: command.c:3368 +#: command.c:3567 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" @@ -445,29 +447,29 @@ msgstr "" "ADVERTENCIA: %s versión mayor %s, servidor versión mayor %s.\n" " Algunas características de psql podrían no funcionar.\n" -#: command.c:3407 +#: command.c:3606 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "Conexión SSL (protocolo: %s, cifrado: %s, bits: %s, compresión: %s)\n" -#: command.c:3408 command.c:3409 command.c:3410 +#: command.c:3607 command.c:3608 command.c:3609 msgid "unknown" msgstr "desconocido" -#: command.c:3411 help.c:45 +#: command.c:3610 help.c:45 msgid "off" msgstr "desactivado" -#: command.c:3411 help.c:45 +#: command.c:3610 help.c:45 msgid "on" msgstr "activado" -#: command.c:3425 +#: command.c:3624 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "Conexión Cifrada GSSAPI\n" -#: command.c:3445 +#: command.c:3644 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -480,259 +482,259 @@ msgstr "" " Vea la página de referencia de psql «Notes for Windows users»\n" " para obtener más detalles.\n" -#: command.c:3549 +#: command.c:3749 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number" msgstr "la variable de ambiente PSQL_EDITOR_LINENUMBER_SWITCH debe estar definida para poder especificar un número de línea" -#: command.c:3578 +#: command.c:3778 #, c-format msgid "could not start editor \"%s\"" msgstr "no se pudo iniciar el editor «%s»" -#: command.c:3580 +#: command.c:3780 #, c-format msgid "could not start /bin/sh" msgstr "no se pudo iniciar /bin/sh" -#: command.c:3618 +#: command.c:3830 #, c-format msgid "could not locate temporary directory: %s" msgstr "no se pudo ubicar el directorio temporal: %s" -#: command.c:3645 +#: command.c:3857 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "no se pudo abrir archivo temporal «%s»: %m" -#: command.c:3950 +#: command.c:4193 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: abreviación ambigua «%s» coincide tanto con «%s» como con «%s»" -#: command.c:3970 +#: command.c:4213 #, c-format msgid "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" msgstr "\\pset: formatos permitidos son aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" -#: command.c:3989 +#: command.c:4232 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: estilos de línea permitidos son ascii, old-ascii, unicode" -#: command.c:4004 +#: command.c:4247 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: estilos de línea Unicode de borde permitidos son single, double" -#: command.c:4019 +#: command.c:4262 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: estilos de línea Unicode de columna permitidos son single, double" -#: command.c:4034 +#: command.c:4277 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: estilos de línea Unicode de encabezado permitidos son single, double" -#: command.c:4077 +#: command.c:4320 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsep debe ser un carácter de un solo byte" -#: command.c:4082 +#: command.c:4325 #, c-format msgid "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage return" msgstr "\\pset: csv_fieldset ni puede ser una comilla doble, un salto de línea, o un retorno de carro" -#: command.c:4219 command.c:4407 +#: command.c:4462 command.c:4650 #, c-format msgid "\\pset: unknown option: %s" msgstr "\\pset: opción desconocida: %s" -#: command.c:4239 +#: command.c:4482 #, c-format msgid "Border style is %d.\n" msgstr "El estilo de borde es %d.\n" -#: command.c:4245 +#: command.c:4488 #, c-format msgid "Target width is unset.\n" msgstr "El ancho no está definido.\n" -#: command.c:4247 +#: command.c:4490 #, c-format msgid "Target width is %d.\n" msgstr "El ancho es %d.\n" -#: command.c:4254 +#: command.c:4497 #, c-format msgid "Expanded display is on.\n" msgstr "Se ha activado el despliegue expandido.\n" -#: command.c:4256 +#: command.c:4499 #, c-format msgid "Expanded display is used automatically.\n" msgstr "El despliegue expandido se usa automáticamente.\n" -#: command.c:4258 +#: command.c:4501 #, c-format msgid "Expanded display is off.\n" msgstr "Se ha desactivado el despliegue expandido.\n" -#: command.c:4264 +#: command.c:4507 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "El separador de campos para CSV es «%s».\n" -#: command.c:4272 command.c:4280 +#: command.c:4515 command.c:4523 #, c-format msgid "Field separator is zero byte.\n" msgstr "El separador de campos es el byte cero.\n" -#: command.c:4274 +#: command.c:4517 #, c-format msgid "Field separator is \"%s\".\n" msgstr "El separador de campos es «%s».\n" -#: command.c:4287 +#: command.c:4530 #, c-format msgid "Default footer is on.\n" msgstr "El pie por omisión está activo.\n" -#: command.c:4289 +#: command.c:4532 #, c-format msgid "Default footer is off.\n" msgstr "El pie de página por omisión está desactivado.\n" -#: command.c:4295 +#: command.c:4538 #, c-format msgid "Output format is %s.\n" msgstr "El formato de salida es %s.\n" -#: command.c:4301 +#: command.c:4544 #, c-format msgid "Line style is %s.\n" msgstr "El estilo de línea es %s.\n" -#: command.c:4308 +#: command.c:4551 #, c-format msgid "Null display is \"%s\".\n" msgstr "Despliegue de nulos es «%s».\n" -#: command.c:4316 +#: command.c:4559 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "La salida numérica ajustada localmente está habilitada.\n" -#: command.c:4318 +#: command.c:4561 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "La salida numérica ajustada localmente está deshabilitada.\n" -#: command.c:4325 +#: command.c:4568 #, c-format msgid "Pager is used for long output.\n" msgstr "El paginador se usará para salida larga.\n" -#: command.c:4327 +#: command.c:4570 #, c-format msgid "Pager is always used.\n" msgstr "El paginador se usará siempre.\n" -#: command.c:4329 +#: command.c:4572 #, c-format msgid "Pager usage is off.\n" msgstr "El paginador no se usará.\n" -#: command.c:4335 +#: command.c:4578 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" msgstr[0] "El paginador no se usará para menos de %d línea.\n" msgstr[1] "El paginador no se usará para menos de %d líneas.\n" -#: command.c:4345 command.c:4355 +#: command.c:4588 command.c:4598 #, c-format msgid "Record separator is zero byte.\n" msgstr "El separador de filas es el byte cero.\n" -#: command.c:4347 +#: command.c:4590 #, c-format msgid "Record separator is .\n" msgstr "El separador de filas es .\n" -#: command.c:4349 +#: command.c:4592 #, c-format msgid "Record separator is \"%s\".\n" msgstr "El separador de filas es «%s».\n" -#: command.c:4362 +#: command.c:4605 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Los atributos de tabla son «%s».\n" -#: command.c:4365 +#: command.c:4608 #, c-format msgid "Table attributes unset.\n" msgstr "Los atributos de tabla han sido indefinidos.\n" -#: command.c:4372 +#: command.c:4615 #, c-format msgid "Title is \"%s\".\n" msgstr "El título es «%s».\n" -#: command.c:4374 +#: command.c:4617 #, c-format msgid "Title is unset.\n" msgstr "El título ha sido indefinido.\n" -#: command.c:4381 +#: command.c:4624 #, c-format msgid "Tuples only is on.\n" msgstr "Mostrar sólo filas está activado.\n" -#: command.c:4383 +#: command.c:4626 #, c-format msgid "Tuples only is off.\n" msgstr "Mostrar sólo filas está desactivado.\n" -#: command.c:4389 +#: command.c:4632 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "El estilo Unicode de borde es «%s».\n" -#: command.c:4395 +#: command.c:4638 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "El estilo de línea Unicode de columna es «%s».\n" -#: command.c:4401 +#: command.c:4644 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "El estilo de línea Unicode de encabezado es «%s».\n" -#: command.c:4634 +#: command.c:4877 #, c-format msgid "\\!: failed" msgstr "\\!: falló" -#: command.c:4659 common.c:648 +#: command.c:4902 common.c:652 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch no puede ser usado con una consulta vacía" -#: command.c:4700 +#: command.c:4943 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (cada %gs)\n" -#: command.c:4703 +#: command.c:4946 #, c-format msgid "%s (every %gs)\n" msgstr "%s (cada %gs)\n" -#: command.c:4757 command.c:4764 common.c:548 common.c:555 common.c:1220 +#: command.c:5000 command.c:5007 common.c:552 common.c:559 common.c:1231 #, c-format msgid "" "********* QUERY **********\n" @@ -745,12 +747,12 @@ msgstr "" "**************************\n" "\n" -#: command.c:4956 +#: command.c:5199 #, c-format msgid "\"%s.%s\" is not a view" msgstr "«%s.%s» no es una vista" -#: command.c:4972 +#: command.c:5215 #, c-format msgid "could not parse reloptions array" msgstr "no se pudo interpretar el array reloptions" @@ -780,77 +782,87 @@ msgstr "La conexión al servidor se ha perdido. Intentando reiniciar: " msgid "Failed.\n" msgstr "Falló.\n" -#: common.c:326 +#: common.c:330 #, c-format msgid "Succeeded.\n" msgstr "Con éxito.\n" -#: common.c:378 common.c:938 common.c:1155 +#: common.c:382 common.c:949 common.c:1166 #, c-format msgid "unexpected PQresultStatus: %d" msgstr "PQresultStatus no esperado: %d" -#: common.c:487 +#: common.c:491 #, c-format msgid "Time: %.3f ms\n" msgstr "Duración: %.3f ms\n" -#: common.c:502 +#: common.c:506 #, c-format msgid "Time: %.3f ms (%02d:%06.3f)\n" msgstr "Duración: %.3f ms (%02d:%06.3f)\n" -#: common.c:511 +#: common.c:515 #, c-format msgid "Time: %.3f ms (%02d:%02d:%06.3f)\n" msgstr "Duración: %.3f ms (%02d:%02d:%06.3f)\n" -#: common.c:518 +#: common.c:522 #, c-format msgid "Time: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" msgstr "Duración: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" -#: common.c:542 common.c:600 common.c:1191 +#: common.c:546 common.c:604 common.c:1202 #, c-format msgid "You are currently not connected to a database." msgstr "No está conectado a una base de datos." -#: common.c:655 +#: common.c:659 #, c-format msgid "\\watch cannot be used with COPY" msgstr "no se puede usar \\watch con COPY" -#: common.c:660 +#: common.c:664 #, c-format msgid "unexpected result status for \\watch" msgstr "estado de resultado inesperado de \\watch" -#: common.c:690 +#: common.c:694 #, c-format msgid "Asynchronous notification \"%s\" with payload \"%s\" received from server process with PID %d.\n" msgstr "Notificación asíncrona «%s» con carga «%s» recibida del proceso de servidor con PID %d.\n" -#: common.c:693 +#: common.c:697 #, c-format msgid "Asynchronous notification \"%s\" received from server process with PID %d.\n" msgstr "Notificación asíncrona «%s» recibida del proceso de servidor con PID %d.\n" -#: common.c:726 common.c:743 +#: common.c:730 common.c:747 #, c-format msgid "could not print result table: %m" msgstr "no se pudo mostrar la tabla de resultados: %m" -#: common.c:764 +#: common.c:768 #, c-format msgid "no rows returned for \\gset" msgstr "\\gset no retornó renglón alguno" -#: common.c:769 +#: common.c:773 #, c-format msgid "more than one row returned for \\gset" msgstr "\\gset retornó más de un renglón" -#: common.c:1200 +#: common.c:791 +#, fuzzy, c-format +#| msgid "" +#| "List of specially treated variables\n" +#| "\n" +msgid "attempt to \\gset into specially treated variable \"%s\" ignored" +msgstr "" +"Lista de variables con tratamiento especial\n" +"\n" + +#: common.c:1211 #, c-format msgid "" "***(Single step mode: verify command)*******************************************\n" @@ -861,33 +873,33 @@ msgstr "" "%s\n" "***(presione enter para continuar, o x y enter para cancelar)*******************\n" -#: common.c:1255 +#: common.c:1266 #, c-format msgid "The server (version %s) does not support savepoints for ON_ERROR_ROLLBACK." msgstr "El servidor (versión %s) no soporta savepoints para ON_ERROR_ROLLBACK." -#: common.c:1318 +#: common.c:1329 #, c-format msgid "STATEMENT: %s" msgstr "SENTENCIA: %s" -#: common.c:1361 +#: common.c:1373 #, c-format msgid "unexpected transaction status (%d)" msgstr "estado de transacción inesperado (%d)" -#: common.c:1502 describe.c:2001 +#: common.c:1514 describe.c:2179 msgid "Column" msgstr "Columna" -#: common.c:1503 describe.c:177 describe.c:393 describe.c:411 describe.c:456 -#: describe.c:473 describe.c:962 describe.c:1126 describe.c:1711 -#: describe.c:1735 describe.c:2002 describe.c:3729 describe.c:3939 -#: describe.c:4172 describe.c:5378 +#: common.c:1515 describe.c:178 describe.c:396 describe.c:414 describe.c:459 +#: describe.c:476 describe.c:1128 describe.c:1292 describe.c:1878 +#: describe.c:1902 describe.c:2180 describe.c:4048 describe.c:4271 +#: describe.c:4496 describe.c:5794 msgid "Type" msgstr "Tipo" -#: common.c:1552 +#: common.c:1564 #, c-format msgid "The command has no result, or the result has no columns.\n" msgstr "La orden no tiene resultado, o el resultado no tiene columnas.\n" @@ -954,11 +966,11 @@ msgstr "" "Ingrese los datos a ser copiados seguidos de un fin de línea.\n" "Termine con un backslash y un punto, o una señal EOF." -#: copy.c:669 +#: copy.c:671 msgid "aborted because of read failure" msgstr "se abortó por un error de lectura" -#: copy.c:703 +#: copy.c:705 msgid "trying to exit copy mode" msgstr "tratando de salir del modo copy" @@ -1007,1113 +1019,1157 @@ msgstr "\\crosstabview: nombre de columna «%s» ambiguo" msgid "\\crosstabview: column name not found: \"%s\"" msgstr "\\crosstabview: nombre de columna «%s» no encontrado" -#: describe.c:75 describe.c:373 describe.c:678 describe.c:810 describe.c:954 -#: describe.c:1115 describe.c:1187 describe.c:3718 describe.c:3926 -#: describe.c:4170 describe.c:4261 describe.c:4528 describe.c:4688 -#: describe.c:4929 describe.c:5004 describe.c:5015 describe.c:5077 -#: describe.c:5502 describe.c:5585 +#: describe.c:76 describe.c:376 describe.c:728 describe.c:924 describe.c:1120 +#: describe.c:1281 describe.c:1353 describe.c:4036 describe.c:4258 +#: describe.c:4494 describe.c:4585 describe.c:4731 describe.c:4944 +#: describe.c:5104 describe.c:5345 describe.c:5420 describe.c:5431 +#: describe.c:5493 describe.c:5918 describe.c:6001 msgid "Schema" msgstr "Esquema" -#: describe.c:76 describe.c:174 describe.c:242 describe.c:250 describe.c:374 -#: describe.c:679 describe.c:811 describe.c:872 describe.c:955 describe.c:1188 -#: describe.c:3719 describe.c:3927 describe.c:4093 describe.c:4171 -#: describe.c:4262 describe.c:4341 describe.c:4529 describe.c:4613 -#: describe.c:4689 describe.c:4930 describe.c:5005 describe.c:5016 -#: describe.c:5078 describe.c:5275 describe.c:5359 describe.c:5583 -#: describe.c:5755 describe.c:5995 +#: describe.c:77 describe.c:175 describe.c:243 describe.c:251 describe.c:377 +#: describe.c:729 describe.c:925 describe.c:1038 describe.c:1121 +#: describe.c:1354 describe.c:4037 describe.c:4259 describe.c:4417 +#: describe.c:4495 describe.c:4586 describe.c:4665 describe.c:4732 +#: describe.c:4945 describe.c:5029 describe.c:5105 describe.c:5346 +#: describe.c:5421 describe.c:5432 describe.c:5494 describe.c:5691 +#: describe.c:5775 describe.c:5999 describe.c:6171 describe.c:6411 msgid "Name" msgstr "Nombre" -#: describe.c:77 describe.c:386 describe.c:404 describe.c:450 describe.c:467 +#: describe.c:78 describe.c:389 describe.c:407 describe.c:453 describe.c:470 msgid "Result data type" msgstr "Tipo de dato de salida" -#: describe.c:85 describe.c:98 describe.c:102 describe.c:387 describe.c:405 -#: describe.c:451 describe.c:468 +#: describe.c:86 describe.c:99 describe.c:103 describe.c:390 describe.c:408 +#: describe.c:454 describe.c:471 msgid "Argument data types" msgstr "Tipos de datos de argumentos" -#: describe.c:110 describe.c:117 describe.c:185 describe.c:273 describe.c:513 -#: describe.c:727 describe.c:826 describe.c:897 describe.c:1190 describe.c:2020 -#: describe.c:3506 describe.c:3779 describe.c:3973 describe.c:4124 -#: describe.c:4198 describe.c:4271 describe.c:4354 describe.c:4437 -#: describe.c:4556 describe.c:4622 describe.c:4690 describe.c:4831 -#: describe.c:4873 describe.c:4946 describe.c:5008 describe.c:5017 -#: describe.c:5079 describe.c:5301 describe.c:5381 describe.c:5516 -#: describe.c:5586 large_obj.c:290 large_obj.c:300 +#: describe.c:111 describe.c:118 describe.c:186 describe.c:274 describe.c:523 +#: describe.c:777 describe.c:940 describe.c:1063 describe.c:1356 +#: describe.c:2200 describe.c:3823 describe.c:4108 describe.c:4305 +#: describe.c:4448 describe.c:4522 describe.c:4595 describe.c:4678 +#: describe.c:4853 describe.c:4972 describe.c:5038 describe.c:5106 +#: describe.c:5247 describe.c:5289 describe.c:5362 describe.c:5424 +#: describe.c:5433 describe.c:5495 describe.c:5717 describe.c:5797 +#: describe.c:5932 describe.c:6002 large_obj.c:290 large_obj.c:300 msgid "Description" msgstr "Descripción" -#: describe.c:135 +#: describe.c:136 msgid "List of aggregate functions" msgstr "Listado de funciones de agregación" -#: describe.c:160 +#: describe.c:161 #, c-format msgid "The server (version %s) does not support access methods." msgstr "El servidor (versión %s) no soporta métodos de acceso." -#: describe.c:175 +#: describe.c:176 msgid "Index" msgstr "Indice" -#: describe.c:176 describe.c:3737 describe.c:3952 describe.c:5503 +#: describe.c:177 describe.c:4056 describe.c:4284 describe.c:5919 msgid "Table" msgstr "Tabla" -#: describe.c:184 describe.c:5280 +#: describe.c:185 describe.c:5696 msgid "Handler" msgstr "Manejador" -#: describe.c:203 +#: describe.c:204 msgid "List of access methods" msgstr "Lista de métodos de acceso" -#: describe.c:229 +#: describe.c:230 #, c-format msgid "The server (version %s) does not support tablespaces." msgstr "El servidor (versión %s) no soporta tablespaces." -#: describe.c:243 describe.c:251 describe.c:501 describe.c:717 describe.c:873 -#: describe.c:1114 describe.c:3730 describe.c:3928 describe.c:4097 -#: describe.c:4343 describe.c:4614 describe.c:5276 describe.c:5360 -#: describe.c:5756 describe.c:5893 describe.c:5996 describe.c:6111 -#: describe.c:6190 large_obj.c:289 +#: describe.c:244 describe.c:252 describe.c:504 describe.c:767 describe.c:1039 +#: describe.c:1280 describe.c:4049 describe.c:4260 describe.c:4421 +#: describe.c:4667 describe.c:5030 describe.c:5692 describe.c:5776 +#: describe.c:6172 describe.c:6309 describe.c:6412 describe.c:6535 +#: describe.c:6613 large_obj.c:289 msgid "Owner" msgstr "Dueño" -#: describe.c:244 describe.c:252 +#: describe.c:245 describe.c:253 msgid "Location" msgstr "Ubicación" -#: describe.c:263 describe.c:3323 +#: describe.c:264 describe.c:3639 msgid "Options" msgstr "Opciones" -#: describe.c:268 describe.c:690 describe.c:889 describe.c:3771 describe.c:3775 +#: describe.c:269 describe.c:740 describe.c:1055 describe.c:4100 +#: describe.c:4104 msgid "Size" msgstr "Tamaño" -#: describe.c:290 +#: describe.c:291 msgid "List of tablespaces" msgstr "Listado de tablespaces" -#: describe.c:333 +#: describe.c:336 #, c-format msgid "\\df only takes [anptwS+] as options" msgstr "\\df sólo acepta las opciones [antpwS+]" -#: describe.c:341 describe.c:352 +#: describe.c:344 describe.c:355 #, c-format msgid "\\df does not take a \"%c\" option with server version %s" msgstr "\\df no acepta la opción «%c» en un servidor versión %s" #. translator: "agg" is short for "aggregate" -#: describe.c:389 describe.c:407 describe.c:453 describe.c:470 +#: describe.c:392 describe.c:410 describe.c:456 describe.c:473 msgid "agg" msgstr "agg" -#: describe.c:390 describe.c:408 +#: describe.c:393 describe.c:411 msgid "window" msgstr "ventana" -#: describe.c:391 +#: describe.c:394 msgid "proc" msgstr "proc" -#: describe.c:392 describe.c:410 describe.c:455 describe.c:472 +#: describe.c:395 describe.c:413 describe.c:458 describe.c:475 msgid "func" msgstr "func" -#: describe.c:409 describe.c:454 describe.c:471 describe.c:1324 +#: describe.c:412 describe.c:457 describe.c:474 describe.c:1490 msgid "trigger" msgstr "disparador" -#: describe.c:483 +#: describe.c:486 msgid "immutable" msgstr "inmutable" -#: describe.c:484 +#: describe.c:487 msgid "stable" msgstr "estable" -#: describe.c:485 +#: describe.c:488 msgid "volatile" msgstr "volátil" -#: describe.c:486 +#: describe.c:489 msgid "Volatility" msgstr "Volatilidad" -#: describe.c:494 +#: describe.c:497 msgid "restricted" msgstr "restringida" -#: describe.c:495 +#: describe.c:498 msgid "safe" msgstr "segura" -#: describe.c:496 +#: describe.c:499 msgid "unsafe" msgstr "insegura" -#: describe.c:497 +#: describe.c:500 msgid "Parallel" msgstr "Paralelismo" -#: describe.c:502 +#: describe.c:505 msgid "definer" msgstr "definidor" -#: describe.c:503 +#: describe.c:506 msgid "invoker" msgstr "invocador" -#: describe.c:504 +#: describe.c:507 msgid "Security" msgstr "Seguridad" -#: describe.c:511 +#: describe.c:512 msgid "Language" msgstr "Lenguaje" -#: describe.c:512 +#: describe.c:516 describe.c:520 msgid "Source code" msgstr "Código fuente" -#: describe.c:641 +#: describe.c:691 msgid "List of functions" msgstr "Listado de funciones" -#: describe.c:689 +#: describe.c:739 msgid "Internal name" msgstr "Nombre interno" -#: describe.c:711 +#: describe.c:761 msgid "Elements" msgstr "Elementos" -#: describe.c:768 +#: describe.c:822 msgid "List of data types" msgstr "Listado de tipos de dato" -#: describe.c:812 +#: describe.c:926 msgid "Left arg type" msgstr "Tipo arg izq" -#: describe.c:813 +#: describe.c:927 msgid "Right arg type" msgstr "Tipo arg der" -#: describe.c:814 +#: describe.c:928 msgid "Result type" msgstr "Tipo resultado" -#: describe.c:819 describe.c:4349 describe.c:4414 describe.c:4420 -#: describe.c:4830 describe.c:6362 describe.c:6366 +#: describe.c:933 describe.c:4673 describe.c:4830 describe.c:4836 +#: describe.c:5246 describe.c:6784 describe.c:6788 msgid "Function" msgstr "Función" -#: describe.c:844 +#: describe.c:1010 msgid "List of operators" msgstr "Listado de operadores" -#: describe.c:874 +#: describe.c:1040 msgid "Encoding" msgstr "Codificación" -#: describe.c:879 describe.c:4530 +#: describe.c:1045 describe.c:4946 msgid "Collate" msgstr "Collate" -#: describe.c:880 describe.c:4531 +#: describe.c:1046 describe.c:4947 msgid "Ctype" msgstr "Ctype" -#: describe.c:893 +#: describe.c:1059 msgid "Tablespace" msgstr "Tablespace" -#: describe.c:915 +#: describe.c:1081 msgid "List of databases" msgstr "Listado de base de datos" -#: describe.c:956 describe.c:1117 describe.c:3720 +#: describe.c:1122 describe.c:1283 describe.c:4038 msgid "table" msgstr "tabla" -#: describe.c:957 describe.c:3721 +#: describe.c:1123 describe.c:4039 msgid "view" msgstr "vista" -#: describe.c:958 describe.c:3722 +#: describe.c:1124 describe.c:4040 msgid "materialized view" msgstr "vistas materializadas" -#: describe.c:959 describe.c:1119 describe.c:3724 +#: describe.c:1125 describe.c:1285 describe.c:4042 msgid "sequence" msgstr "secuencia" -#: describe.c:960 describe.c:3726 +#: describe.c:1126 describe.c:4045 msgid "foreign table" msgstr "tabla foránea" -#: describe.c:961 describe.c:3727 describe.c:3937 +#: describe.c:1127 describe.c:4046 describe.c:4269 msgid "partitioned table" msgstr "tabla particionada" -#: describe.c:973 +#: describe.c:1139 msgid "Column privileges" msgstr "Privilegios de acceso a columnas" -#: describe.c:1004 describe.c:1038 +#: describe.c:1170 describe.c:1204 msgid "Policies" msgstr "Políticas" -#: describe.c:1070 describe.c:6052 describe.c:6056 +#: describe.c:1236 describe.c:6476 describe.c:6480 msgid "Access privileges" msgstr "Privilegios" -#: describe.c:1101 +#: describe.c:1267 #, c-format msgid "The server (version %s) does not support altering default privileges." msgstr "El servidor (versión %s) no soporta la alteración de privilegios por omisión." -#: describe.c:1121 +#: describe.c:1287 msgid "function" msgstr "función" -#: describe.c:1123 +#: describe.c:1289 msgid "type" msgstr "tipo" -#: describe.c:1125 +#: describe.c:1291 msgid "schema" msgstr "esquema" -#: describe.c:1149 +#: describe.c:1315 msgid "Default access privileges" msgstr "Privilegios de acceso por omisión" -#: describe.c:1189 +#: describe.c:1355 msgid "Object" msgstr "Objeto" -#: describe.c:1203 +#: describe.c:1369 msgid "table constraint" msgstr "restricción de tabla" -#: describe.c:1225 +#: describe.c:1391 msgid "domain constraint" msgstr "restricción de dominio" -#: describe.c:1253 +#: describe.c:1419 msgid "operator class" msgstr "clase de operadores" -#: describe.c:1282 +#: describe.c:1448 msgid "operator family" msgstr "familia de operadores" -#: describe.c:1304 +#: describe.c:1470 msgid "rule" msgstr "regla" -#: describe.c:1346 +#: describe.c:1512 msgid "Object descriptions" msgstr "Descripciones de objetos" -#: describe.c:1402 describe.c:3843 +#: describe.c:1568 describe.c:4175 #, c-format msgid "Did not find any relation named \"%s\"." msgstr "No se encontró relación llamada «%s»." -#: describe.c:1405 describe.c:3846 +#: describe.c:1571 describe.c:4178 #, c-format msgid "Did not find any relations." msgstr "No se encontró ninguna relación." -#: describe.c:1660 +#: describe.c:1827 #, c-format msgid "Did not find any relation with OID %s." msgstr "No se encontró relación con OID %s." -#: describe.c:1712 describe.c:1736 +#: describe.c:1879 describe.c:1903 msgid "Start" msgstr "Inicio" -#: describe.c:1713 describe.c:1737 +#: describe.c:1880 describe.c:1904 msgid "Minimum" msgstr "Mínimo" -#: describe.c:1714 describe.c:1738 +#: describe.c:1881 describe.c:1905 msgid "Maximum" msgstr "Máximo" -#: describe.c:1715 describe.c:1739 +#: describe.c:1882 describe.c:1906 msgid "Increment" msgstr "Incremento" -#: describe.c:1716 describe.c:1740 describe.c:1871 describe.c:4265 -#: describe.c:4431 describe.c:4545 describe.c:4550 describe.c:6099 +#: describe.c:1883 describe.c:1907 describe.c:2038 describe.c:4589 +#: describe.c:4847 describe.c:4961 describe.c:4966 describe.c:6523 msgid "yes" msgstr "sí" -#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4265 -#: describe.c:4428 describe.c:4545 describe.c:6100 +#: describe.c:1884 describe.c:1908 describe.c:2039 describe.c:4589 +#: describe.c:4844 describe.c:4961 describe.c:6524 msgid "no" msgstr "no" -#: describe.c:1718 describe.c:1742 +#: describe.c:1885 describe.c:1909 msgid "Cycles?" msgstr "¿Cicla?" -#: describe.c:1719 describe.c:1743 +#: describe.c:1886 describe.c:1910 msgid "Cache" msgstr "Cache" -#: describe.c:1786 +#: describe.c:1953 #, c-format msgid "Owned by: %s" msgstr "Asociada a: %s" -#: describe.c:1790 +#: describe.c:1957 #, c-format msgid "Sequence for identity column: %s" msgstr "Secuencia para columna identidad: %s" -#: describe.c:1797 +#: describe.c:1964 #, c-format msgid "Sequence \"%s.%s\"" msgstr "Secuencia «%s.%s»" -#: describe.c:1933 +#: describe.c:2111 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "Tabla unlogged «%s.%s»" -#: describe.c:1936 +#: describe.c:2114 #, c-format msgid "Table \"%s.%s\"" msgstr "Tabla «%s.%s»" -#: describe.c:1940 +#: describe.c:2118 #, c-format msgid "View \"%s.%s\"" msgstr "Vista «%s.%s»" -#: describe.c:1945 +#: describe.c:2123 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "Vista materializada unlogged «%s.%s»" -#: describe.c:1948 +#: describe.c:2126 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "Vista materializada \"%s.%s\"" -#: describe.c:1953 +#: describe.c:2131 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "Índice unlogged «%s.%s»" -#: describe.c:1956 +#: describe.c:2134 #, c-format msgid "Index \"%s.%s\"" msgstr "Índice «%s.%s»" -#: describe.c:1961 +#: describe.c:2139 #, c-format msgid "Unlogged partitioned index \"%s.%s\"" msgstr "Índice particionado unlogged «%s.%s»" -#: describe.c:1964 +#: describe.c:2142 #, c-format msgid "Partitioned index \"%s.%s\"" msgstr "Índice particionado «%s.%s»" -#: describe.c:1969 +#: describe.c:2147 #, c-format msgid "Special relation \"%s.%s\"" msgstr "Relación especial «%s.%s»" -#: describe.c:1973 +#: describe.c:2151 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "Tabla TOAST «%s.%s»" -#: describe.c:1977 +#: describe.c:2155 #, c-format msgid "Composite type \"%s.%s\"" msgstr "Tipo compuesto «%s.%s»" -#: describe.c:1981 +#: describe.c:2159 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "Tabla foránea «%s.%s»" -#: describe.c:1986 +#: describe.c:2164 #, c-format msgid "Unlogged partitioned table \"%s.%s\"" msgstr "Tabla unlogged particionada «%s.%s»" -#: describe.c:1989 +#: describe.c:2167 #, c-format msgid "Partitioned table \"%s.%s\"" msgstr "Tabla particionada «%s.%s»" -#: describe.c:2005 describe.c:4178 +#: describe.c:2183 describe.c:4502 msgid "Collation" msgstr "Ordenamiento" -#: describe.c:2006 describe.c:4185 +#: describe.c:2184 describe.c:4509 msgid "Nullable" msgstr "Nulable" -#: describe.c:2007 describe.c:4186 +#: describe.c:2185 describe.c:4510 msgid "Default" msgstr "Por omisión" -#: describe.c:2010 +#: describe.c:2188 msgid "Key?" msgstr "¿Llave?" -#: describe.c:2012 +#: describe.c:2190 describe.c:4739 describe.c:4750 msgid "Definition" msgstr "Definición" -#: describe.c:2014 describe.c:5296 describe.c:5380 describe.c:5451 -#: describe.c:5515 +#: describe.c:2192 describe.c:5712 describe.c:5796 describe.c:5867 +#: describe.c:5931 msgid "FDW options" msgstr "Opciones de FDW" -#: describe.c:2016 +#: describe.c:2194 msgid "Storage" msgstr "Almacenamiento" -#: describe.c:2018 +#: describe.c:2196 +#, fuzzy +#| msgid "expression" +msgid "Compression" +msgstr "expresión" + +#: describe.c:2198 msgid "Stats target" msgstr "Estadísticas" -#: describe.c:2131 -#, c-format -msgid "Partition of: %s %s" +#: describe.c:2334 +#, fuzzy, c-format +#| msgid "Partition of: %s %s" +msgid "Partition of: %s %s%s" msgstr "Partición de: %s %s" -#: describe.c:2143 +#: describe.c:2347 msgid "No partition constraint" msgstr "Sin restricción de partición" -#: describe.c:2145 +#: describe.c:2349 #, c-format msgid "Partition constraint: %s" msgstr "Restricción de partición: %s" -#: describe.c:2169 +#: describe.c:2373 #, c-format msgid "Partition key: %s" msgstr "Llave de partición: %s" -#: describe.c:2195 +#: describe.c:2399 #, c-format msgid "Owning table: \"%s.%s\"" msgstr "Tabla dueña: «%s.%s»" -#: describe.c:2266 +#: describe.c:2470 msgid "primary key, " msgstr "llave primaria, " -#: describe.c:2268 +#: describe.c:2472 msgid "unique, " msgstr "único, " -#: describe.c:2274 +#: describe.c:2478 #, c-format msgid "for table \"%s.%s\"" msgstr "de tabla «%s.%s»" -#: describe.c:2278 +#: describe.c:2482 #, c-format msgid ", predicate (%s)" msgstr ", predicado (%s)" -#: describe.c:2281 +#: describe.c:2485 msgid ", clustered" msgstr ", clustered" -#: describe.c:2284 +#: describe.c:2488 msgid ", invalid" msgstr ", no válido" -#: describe.c:2287 +#: describe.c:2491 msgid ", deferrable" msgstr ", postergable" -#: describe.c:2290 +#: describe.c:2494 msgid ", initially deferred" msgstr ", inicialmente postergada" -#: describe.c:2293 +#: describe.c:2497 msgid ", replica identity" msgstr ", identidad de replicación" -#: describe.c:2360 +#: describe.c:2564 msgid "Indexes:" msgstr "Índices:" -#: describe.c:2444 +#: describe.c:2648 msgid "Check constraints:" msgstr "Restricciones CHECK:" -#: describe.c:2512 +#: describe.c:2716 msgid "Foreign-key constraints:" msgstr "Restricciones de llave foránea:" -#: describe.c:2575 +#: describe.c:2779 msgid "Referenced by:" msgstr "Referenciada por:" -#: describe.c:2625 +#: describe.c:2829 msgid "Policies:" msgstr "Políticas:" -#: describe.c:2628 +#: describe.c:2832 msgid "Policies (forced row security enabled):" msgstr "Políticas (seguridad de registros forzada):" -#: describe.c:2631 +#: describe.c:2835 msgid "Policies (row security enabled): (none)" msgstr "Políticas (seguridad de filas activa): (ninguna)" -#: describe.c:2634 +#: describe.c:2838 msgid "Policies (forced row security enabled): (none)" msgstr "Políticas (seguridad de filas forzada): (ninguna)" -#: describe.c:2637 +#: describe.c:2841 msgid "Policies (row security disabled):" msgstr "Políticas (seguridad de filas inactiva):" -#: describe.c:2705 +#: describe.c:2902 describe.c:3006 msgid "Statistics objects:" msgstr "Objetos de estadísticas:" -#: describe.c:2819 describe.c:2923 +#: describe.c:3120 describe.c:3224 msgid "Rules:" msgstr "Reglas:" -#: describe.c:2822 +#: describe.c:3123 msgid "Disabled rules:" msgstr "Reglas deshabilitadas:" -#: describe.c:2825 +#: describe.c:3126 msgid "Rules firing always:" msgstr "Reglas que se activan siempre:" -#: describe.c:2828 +#: describe.c:3129 msgid "Rules firing on replica only:" msgstr "Reglas que se activan sólo en las réplicas:" -#: describe.c:2868 +#: describe.c:3169 msgid "Publications:" msgstr "Publicaciones:" -#: describe.c:2906 +#: describe.c:3207 msgid "View definition:" msgstr "Definición de vista:" -#: describe.c:3053 +#: describe.c:3354 msgid "Triggers:" msgstr "Triggers:" -#: describe.c:3057 +#: describe.c:3358 msgid "Disabled user triggers:" msgstr "Disparadores de usuario deshabilitados:" -#: describe.c:3059 +#: describe.c:3360 msgid "Disabled triggers:" msgstr "Disparadores deshabilitados:" -#: describe.c:3062 +#: describe.c:3363 msgid "Disabled internal triggers:" msgstr "Disparadores internos deshabilitados:" -#: describe.c:3065 +#: describe.c:3366 msgid "Triggers firing always:" msgstr "Disparadores que siempre se ejecutan:" -#: describe.c:3068 +#: describe.c:3369 msgid "Triggers firing on replica only:" msgstr "Disparadores que se ejecutan sólo en las réplicas:" -#: describe.c:3140 +#: describe.c:3441 #, c-format msgid "Server: %s" msgstr "Servidor: %s" -#: describe.c:3148 +#: describe.c:3449 #, c-format msgid "FDW options: (%s)" msgstr "Opciones de FDW: (%s)" -#: describe.c:3169 +#: describe.c:3470 msgid "Inherits" msgstr "Hereda" -#: describe.c:3229 +#: describe.c:3543 #, c-format msgid "Number of partitions: %d" msgstr "Número de particiones: %d" -#: describe.c:3238 +#: describe.c:3552 #, c-format msgid "Number of partitions: %d (Use \\d+ to list them.)" msgstr "Número de particiones: %d (Use \\d+ para listarlas.)" -#: describe.c:3240 +#: describe.c:3554 #, c-format msgid "Number of child tables: %d (Use \\d+ to list them.)" msgstr "Número de tablas hijas: %d (Use \\d+ para listarlas.)" -#: describe.c:3247 +#: describe.c:3561 msgid "Child tables" msgstr "Tablas hijas" -#: describe.c:3247 +#: describe.c:3561 msgid "Partitions" msgstr "Particiones" -#: describe.c:3276 +#: describe.c:3592 #, c-format msgid "Typed table of type: %s" msgstr "Tabla tipada de tipo: %s" -#: describe.c:3292 +#: describe.c:3608 msgid "Replica Identity" msgstr "Identidad de replicación" -#: describe.c:3305 +#: describe.c:3621 msgid "Has OIDs: yes" msgstr "Tiene OIDs: sí" -#: describe.c:3314 +#: describe.c:3630 #, c-format msgid "Access method: %s" msgstr "Método de acceso: %s" -#: describe.c:3394 +#: describe.c:3710 #, c-format msgid "Tablespace: \"%s\"" msgstr "Tablespace: «%s»" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:3406 +#: describe.c:3722 #, c-format msgid ", tablespace \"%s\"" msgstr ", tablespace «%s»" -#: describe.c:3499 +#: describe.c:3815 msgid "List of roles" msgstr "Lista de roles" -#: describe.c:3501 +#: describe.c:3817 msgid "Role name" msgstr "Nombre de rol" -#: describe.c:3502 +#: describe.c:3818 msgid "Attributes" msgstr "Atributos" -#: describe.c:3503 +#: describe.c:3820 msgid "Member of" msgstr "Miembro de" -#: describe.c:3514 +#: describe.c:3831 msgid "Superuser" msgstr "Superusuario" -#: describe.c:3517 +#: describe.c:3834 msgid "No inheritance" msgstr "Sin herencia" -#: describe.c:3520 +#: describe.c:3837 msgid "Create role" msgstr "Crear rol" -#: describe.c:3523 +#: describe.c:3840 msgid "Create DB" msgstr "Crear BD" -#: describe.c:3526 +#: describe.c:3843 msgid "Cannot login" msgstr "No puede conectarse" -#: describe.c:3530 +#: describe.c:3847 msgid "Replication" msgstr "Replicación" -#: describe.c:3534 +#: describe.c:3851 msgid "Bypass RLS" msgstr "Ignora RLS" -#: describe.c:3543 +#: describe.c:3860 msgid "No connections" msgstr "Ninguna conexión" -#: describe.c:3545 +#: describe.c:3862 #, c-format msgid "%d connection" msgid_plural "%d connections" msgstr[0] "%d conexión" msgstr[1] "%d conexiones" -#: describe.c:3555 +#: describe.c:3872 msgid "Password valid until " msgstr "Constraseña válida hasta " -#: describe.c:3605 +#: describe.c:3922 #, c-format msgid "The server (version %s) does not support per-database role settings." msgstr "El servidor (versión %s) no soporta parámetros por base de datos y rol." -#: describe.c:3618 +#: describe.c:3935 msgid "Role" msgstr "Nombre de rol" -#: describe.c:3619 +#: describe.c:3936 msgid "Database" msgstr "Base de Datos" -#: describe.c:3620 +#: describe.c:3937 msgid "Settings" msgstr "Parámetros" -#: describe.c:3641 +#: describe.c:3958 #, c-format msgid "Did not find any settings for role \"%s\" and database \"%s\"." msgstr "No se encontró ningún parámetro para el rol «%s» y la base de datos «%s»." -#: describe.c:3644 +#: describe.c:3961 #, c-format msgid "Did not find any settings for role \"%s\"." msgstr "No se encontró ningún parámetro para el rol «%s»." -#: describe.c:3647 +#: describe.c:3964 #, c-format msgid "Did not find any settings." msgstr "No se encontró ningún parámetro." -#: describe.c:3652 +#: describe.c:3969 msgid "List of settings" msgstr "Listado de parámetros" -#: describe.c:3723 +#: describe.c:4041 msgid "index" msgstr "índice" -#: describe.c:3725 +#: describe.c:4043 msgid "special" msgstr "especial" -#: describe.c:3728 describe.c:3938 +#: describe.c:4044 +#, fuzzy +#| msgid "TOAST table \"%s.%s\"" +msgid "TOAST table" +msgstr "Tabla TOAST «%s.%s»" + +#: describe.c:4047 describe.c:4270 msgid "partitioned index" msgstr "índice particionado" -#: describe.c:3752 +#: describe.c:4071 msgid "permanent" msgstr "permanente" -#: describe.c:3753 +#: describe.c:4072 msgid "temporary" msgstr "temporal" -#: describe.c:3754 +#: describe.c:4073 msgid "unlogged" msgstr "unlogged" -#: describe.c:3755 +#: describe.c:4074 msgid "Persistence" msgstr "Persistencia" -#: describe.c:3851 +#: describe.c:4091 +#, fuzzy +#| msgid "Access method: %s" +msgid "Access method" +msgstr "Método de acceso: %s" + +#: describe.c:4183 msgid "List of relations" msgstr "Listado de relaciones" -#: describe.c:3899 +#: describe.c:4231 #, c-format msgid "The server (version %s) does not support declarative table partitioning." msgstr "El servidor (versión %s) no soporta particionamiento declarativo de tablas." -#: describe.c:3910 +#: describe.c:4242 msgid "List of partitioned indexes" msgstr "Listado de índices particionados" -#: describe.c:3912 +#: describe.c:4244 msgid "List of partitioned tables" msgstr "Listado de tablas particionadas" -#: describe.c:3916 +#: describe.c:4248 msgid "List of partitioned relations" msgstr "Listado de relaciones particionadas" -#: describe.c:3947 +#: describe.c:4279 msgid "Parent name" msgstr "Nombre del padre" -#: describe.c:3960 +#: describe.c:4292 msgid "Leaf partition size" msgstr "Tamaño de particiones hoja" -#: describe.c:3963 describe.c:3969 +#: describe.c:4295 describe.c:4301 msgid "Total size" msgstr "Tamaño total" -#: describe.c:4101 +#: describe.c:4425 msgid "Trusted" msgstr "Confiable" -#: describe.c:4109 +#: describe.c:4433 msgid "Internal language" msgstr "Lenguaje interno" -#: describe.c:4110 +#: describe.c:4434 msgid "Call handler" msgstr "Manejador de llamada" -#: describe.c:4111 describe.c:5283 +#: describe.c:4435 describe.c:5699 msgid "Validator" msgstr "Validador" -#: describe.c:4114 +#: describe.c:4438 msgid "Inline handler" msgstr "Manejador en línea" -#: describe.c:4142 +#: describe.c:4466 msgid "List of languages" msgstr "Lista de lenguajes" -#: describe.c:4187 +#: describe.c:4511 msgid "Check" msgstr "Check" -#: describe.c:4229 +#: describe.c:4553 msgid "List of domains" msgstr "Listado de dominios" -#: describe.c:4263 +#: describe.c:4587 msgid "Source" msgstr "Fuente" -#: describe.c:4264 +#: describe.c:4588 msgid "Destination" msgstr "Destino" -#: describe.c:4266 describe.c:6101 +#: describe.c:4590 describe.c:6525 msgid "Default?" msgstr "Por omisión?" -#: describe.c:4303 +#: describe.c:4627 msgid "List of conversions" msgstr "Listado de conversiones" -#: describe.c:4342 +#: describe.c:4666 msgid "Event" msgstr "Evento" -#: describe.c:4344 +#: describe.c:4668 msgid "enabled" msgstr "activo" -#: describe.c:4345 +#: describe.c:4669 msgid "replica" msgstr "réplica" -#: describe.c:4346 +#: describe.c:4670 msgid "always" msgstr "siempre" -#: describe.c:4347 +#: describe.c:4671 msgid "disabled" msgstr "inactivo" -#: describe.c:4348 describe.c:5997 +#: describe.c:4672 describe.c:6413 msgid "Enabled" msgstr "Activo" -#: describe.c:4350 +#: describe.c:4674 msgid "Tags" msgstr "Etiquetas" -#: describe.c:4369 +#: describe.c:4693 msgid "List of event triggers" msgstr "Listado de disparadores por eventos" -#: describe.c:4398 +#: describe.c:4720 +#, fuzzy, c-format +#| msgid "The server (version %s) does not support extensions." +msgid "The server (version %s) does not support extended statistics." +msgstr "El servidor (versión %s) no soporta extensiones." + +#: describe.c:4757 +msgid "Ndistinct" +msgstr "" + +#: describe.c:4758 +msgid "Dependencies" +msgstr "" + +#: describe.c:4768 +msgid "MCV" +msgstr "" + +#: describe.c:4787 +#, fuzzy +#| msgid "define extended statistics" +msgid "List of extended statistics" +msgstr "define estadísticas extendidas" + +#: describe.c:4814 msgid "Source type" msgstr "Tipo fuente" -#: describe.c:4399 +#: describe.c:4815 msgid "Target type" msgstr "Tipo destino" -#: describe.c:4430 +#: describe.c:4846 msgid "in assignment" msgstr "en asignación" -#: describe.c:4432 +#: describe.c:4848 msgid "Implicit?" msgstr "Implícito?" -#: describe.c:4487 +#: describe.c:4903 msgid "List of casts" msgstr "Listado de conversiones de tipo (casts)" -#: describe.c:4515 +#: describe.c:4931 #, c-format msgid "The server (version %s) does not support collations." msgstr "El servidor (versión %s) no soporta «collations»." -#: describe.c:4536 describe.c:4540 +#: describe.c:4952 describe.c:4956 msgid "Provider" msgstr "Proveedor" -#: describe.c:4546 describe.c:4551 +#: describe.c:4962 describe.c:4967 msgid "Deterministic?" msgstr "¿Determinístico?" -#: describe.c:4586 +#: describe.c:5002 msgid "List of collations" msgstr "Listado de ordenamientos" -#: describe.c:4645 +#: describe.c:5061 msgid "List of schemas" msgstr "Listado de esquemas" -#: describe.c:4670 describe.c:4917 describe.c:4988 describe.c:5059 +#: describe.c:5086 describe.c:5333 describe.c:5404 describe.c:5475 #, c-format msgid "The server (version %s) does not support full text search." msgstr "El servidor (versión %s) no soporta búsqueda en texto." -#: describe.c:4705 +#: describe.c:5121 msgid "List of text search parsers" msgstr "Listado de analizadores de búsqueda en texto" -#: describe.c:4750 +#: describe.c:5166 #, c-format msgid "Did not find any text search parser named \"%s\"." msgstr "No se encontró ningún analizador de búsqueda en texto llamado «%s»." -#: describe.c:4753 +#: describe.c:5169 #, c-format msgid "Did not find any text search parsers." msgstr "No se encontró ningún analizador de búsqueda en texto." -#: describe.c:4828 +#: describe.c:5244 msgid "Start parse" msgstr "Inicio de parse" -#: describe.c:4829 +#: describe.c:5245 msgid "Method" msgstr "Método" -#: describe.c:4833 +#: describe.c:5249 msgid "Get next token" msgstr "Obtener siguiente elemento" -#: describe.c:4835 +#: describe.c:5251 msgid "End parse" msgstr "Fin de parse" -#: describe.c:4837 +#: describe.c:5253 msgid "Get headline" msgstr "Obtener encabezado" -#: describe.c:4839 +#: describe.c:5255 msgid "Get token types" msgstr "Obtener tipos de elemento" -#: describe.c:4850 +#: describe.c:5266 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "Analizador de búsqueda en texto «%s.%s»" -#: describe.c:4853 +#: describe.c:5269 #, c-format msgid "Text search parser \"%s\"" msgstr "Analizador de búsqueda en texto «%s»" -#: describe.c:4872 +#: describe.c:5288 msgid "Token name" msgstr "Nombre de elemento" -#: describe.c:4883 +#: describe.c:5299 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "Tipos de elemento para el analizador «%s.%s»" -#: describe.c:4886 +#: describe.c:5302 #, c-format msgid "Token types for parser \"%s\"" msgstr "Tipos de elemento para el analizador «%s»" -#: describe.c:4940 +#: describe.c:5356 msgid "Template" msgstr "Plantilla" -#: describe.c:4941 +#: describe.c:5357 msgid "Init options" msgstr "Opciones de inicialización" -#: describe.c:4963 +#: describe.c:5379 msgid "List of text search dictionaries" msgstr "Listado de diccionarios de búsqueda en texto" -#: describe.c:5006 +#: describe.c:5422 msgid "Init" msgstr "Inicializador" -#: describe.c:5007 +#: describe.c:5423 msgid "Lexize" msgstr "Fn. análisis léx." -#: describe.c:5034 +#: describe.c:5450 msgid "List of text search templates" msgstr "Listado de plantillas de búsqueda en texto" -#: describe.c:5094 +#: describe.c:5510 msgid "List of text search configurations" msgstr "Listado de configuraciones de búsqueda en texto" -#: describe.c:5140 +#: describe.c:5556 #, c-format msgid "Did not find any text search configuration named \"%s\"." msgstr "No se encontró una configuración de búsqueda en texto llamada «%s»." -#: describe.c:5143 +#: describe.c:5559 #, c-format msgid "Did not find any text search configurations." msgstr "No se encontró una configuración de búsqueda en texto." -#: describe.c:5209 +#: describe.c:5625 msgid "Token" msgstr "Elemento" -#: describe.c:5210 +#: describe.c:5626 msgid "Dictionaries" msgstr "Diccionarios" -#: describe.c:5221 +#: describe.c:5637 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "Configuración de búsqueda en texto «%s.%s»" -#: describe.c:5224 +#: describe.c:5640 #, c-format msgid "Text search configuration \"%s\"" msgstr "Configuración de búsqueda en texto «%s»" -#: describe.c:5228 +#: describe.c:5644 #, c-format msgid "" "\n" @@ -2122,7 +2178,7 @@ msgstr "" "\n" "Analizador: «%s.%s»" -#: describe.c:5231 +#: describe.c:5647 #, c-format msgid "" "\n" @@ -2131,232 +2187,240 @@ msgstr "" "\n" "Analizador: «%s»" -#: describe.c:5265 +#: describe.c:5681 #, c-format msgid "The server (version %s) does not support foreign-data wrappers." msgstr "El servidor (versión %s) no soporta conectores de datos externos." -#: describe.c:5323 +#: describe.c:5739 msgid "List of foreign-data wrappers" msgstr "Listado de conectores de datos externos" -#: describe.c:5348 +#: describe.c:5764 #, c-format msgid "The server (version %s) does not support foreign servers." msgstr "El servidor (versión %s) no soporta servidores foráneos." -#: describe.c:5361 +#: describe.c:5777 msgid "Foreign-data wrapper" msgstr "Conectores de datos externos" -#: describe.c:5379 describe.c:5584 +#: describe.c:5795 describe.c:6000 msgid "Version" msgstr "Versión" -#: describe.c:5405 +#: describe.c:5821 msgid "List of foreign servers" msgstr "Listado de servidores foráneos" -#: describe.c:5430 +#: describe.c:5846 #, c-format msgid "The server (version %s) does not support user mappings." msgstr "El servidor (versión %s) no soporta mapeos de usuario." -#: describe.c:5440 describe.c:5504 +#: describe.c:5856 describe.c:5920 msgid "Server" msgstr "Servidor" -#: describe.c:5441 +#: describe.c:5857 msgid "User name" msgstr "Nombre de usuario" -#: describe.c:5466 +#: describe.c:5882 msgid "List of user mappings" msgstr "Listado de mapeos de usuario" -#: describe.c:5491 +#: describe.c:5907 #, c-format msgid "The server (version %s) does not support foreign tables." msgstr "El servidor (versión %s) no soporta tablas foráneas." -#: describe.c:5544 +#: describe.c:5960 msgid "List of foreign tables" msgstr "Listado de tablas foráneas" -#: describe.c:5569 describe.c:5626 +#: describe.c:5985 describe.c:6042 #, c-format msgid "The server (version %s) does not support extensions." msgstr "El servidor (versión %s) no soporta extensiones." -#: describe.c:5601 +#: describe.c:6017 msgid "List of installed extensions" msgstr "Listado de extensiones instaladas" -#: describe.c:5654 +#: describe.c:6070 #, c-format msgid "Did not find any extension named \"%s\"." msgstr "No se encontró extensión llamada «%s»." -#: describe.c:5657 +#: describe.c:6073 #, c-format msgid "Did not find any extensions." msgstr "No se encontró ninguna extensión." -#: describe.c:5701 +#: describe.c:6117 msgid "Object description" msgstr "Descripción de objeto" -#: describe.c:5711 +#: describe.c:6127 #, c-format msgid "Objects in extension \"%s\"" msgstr "Objetos en extensión «%s»" -#: describe.c:5740 describe.c:5816 +#: describe.c:6156 describe.c:6232 #, c-format msgid "The server (version %s) does not support publications." msgstr "El servidor (versión %s) no soporta publicaciones." -#: describe.c:5757 describe.c:5894 +#: describe.c:6173 describe.c:6310 msgid "All tables" msgstr "Todas las tablas" -#: describe.c:5758 describe.c:5895 +#: describe.c:6174 describe.c:6311 msgid "Inserts" msgstr "Inserts" -#: describe.c:5759 describe.c:5896 +#: describe.c:6175 describe.c:6312 msgid "Updates" msgstr "Updates" -#: describe.c:5760 describe.c:5897 +#: describe.c:6176 describe.c:6313 msgid "Deletes" msgstr "Deletes" -#: describe.c:5764 describe.c:5899 +#: describe.c:6180 describe.c:6315 msgid "Truncates" msgstr "Truncates" -#: describe.c:5768 describe.c:5901 +#: describe.c:6184 describe.c:6317 msgid "Via root" msgstr "Via root" -#: describe.c:5785 +#: describe.c:6201 msgid "List of publications" msgstr "Listado de publicaciones" -#: describe.c:5858 +#: describe.c:6274 #, c-format msgid "Did not find any publication named \"%s\"." msgstr "No se encontró publicación llamada «%s»." -#: describe.c:5861 +#: describe.c:6277 #, c-format msgid "Did not find any publications." msgstr "No se encontró ninguna publicación." -#: describe.c:5890 +#: describe.c:6306 #, c-format msgid "Publication %s" msgstr "Publicación %s" -#: describe.c:5938 +#: describe.c:6354 msgid "Tables:" msgstr "Tablas:" -#: describe.c:5982 +#: describe.c:6398 #, c-format msgid "The server (version %s) does not support subscriptions." msgstr "El servidor (versión %s) no soporta suscripciones." -#: describe.c:5998 +#: describe.c:6414 msgid "Publication" msgstr "Publicación" -#: describe.c:6005 +#: describe.c:6423 +msgid "Binary" +msgstr "" + +#: describe.c:6424 +msgid "Streaming" +msgstr "" + +#: describe.c:6429 msgid "Synchronous commit" msgstr "Commit síncrono" -#: describe.c:6006 +#: describe.c:6430 msgid "Conninfo" msgstr "Conninfo" -#: describe.c:6028 +#: describe.c:6452 msgid "List of subscriptions" msgstr "Listado de suscripciones" -#: describe.c:6095 describe.c:6184 describe.c:6270 describe.c:6353 +#: describe.c:6519 describe.c:6607 describe.c:6692 describe.c:6775 msgid "AM" msgstr "AM" -#: describe.c:6096 +#: describe.c:6520 msgid "Input type" msgstr "Tipo de entrada" -#: describe.c:6097 +#: describe.c:6521 msgid "Storage type" msgstr "Tipo de almacenamiento" -#: describe.c:6098 +#: describe.c:6522 msgid "Operator class" msgstr "Clase de operador" -#: describe.c:6110 describe.c:6185 describe.c:6271 describe.c:6354 +#: describe.c:6534 describe.c:6608 describe.c:6693 describe.c:6776 msgid "Operator family" msgstr "Familia de operadores" -#: describe.c:6143 +#: describe.c:6566 msgid "List of operator classes" msgstr "Listado de clases de operador" -#: describe.c:6186 +#: describe.c:6609 msgid "Applicable types" msgstr "Tipos aplicables" -#: describe.c:6225 +#: describe.c:6647 msgid "List of operator families" msgstr "Listado de familias de operadores" -#: describe.c:6272 +#: describe.c:6694 msgid "Operator" msgstr "Operador" -#: describe.c:6273 +#: describe.c:6695 msgid "Strategy" msgstr "Estrategia" -#: describe.c:6274 +#: describe.c:6696 msgid "ordering" msgstr "ordenamiento" -#: describe.c:6275 +#: describe.c:6697 msgid "search" msgstr "búsqueda" -#: describe.c:6276 +#: describe.c:6698 msgid "Purpose" msgstr "Propósito" -#: describe.c:6281 +#: describe.c:6703 msgid "Sort opfamily" msgstr "familia de ops de ordenamiento" -#: describe.c:6312 +#: describe.c:6734 msgid "List of operators of operator families" msgstr "Lista de operadores de familias de operadores" -#: describe.c:6355 +#: describe.c:6777 msgid "Registered left type" msgstr "Tipo de dato izquierdo registrado" -#: describe.c:6356 +#: describe.c:6778 msgid "Registered right type" msgstr "Tipo de dato derecho registrado" -#: describe.c:6357 +#: describe.c:6779 msgid "Number" msgstr "Número" -#: describe.c:6393 +#: describe.c:6815 msgid "List of support functions of operator families" msgstr "Listado de funciones de la familia de operadores %s" @@ -2369,7 +2433,7 @@ msgstr "" "psql es el terminal interactivo de PostgreSQL.\n" "\n" -#: help.c:74 help.c:355 help.c:431 help.c:474 +#: help.c:74 help.c:355 help.c:433 help.c:476 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" @@ -2621,26 +2685,26 @@ msgstr "socket local" msgid " -p, --port=PORT database server port (default: \"%s\")\n" msgstr " -p, --port=PUERTO puerto del servidor (por omisión: «%s»)\n" -#: help.c:140 +#: help.c:137 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" msgstr "" " -U, --username=NOMBRE\n" " nombre de usuario (por omisión: «%s»)\n" -#: help.c:141 +#: help.c:138 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pedir contraseña\n" -#: help.c:142 +#: help.c:139 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password forzar petición de contraseña\n" " (debería ser automático)\n" -#: help.c:144 +#: help.c:141 #, c-format msgid "" "\n" @@ -2655,37 +2719,37 @@ msgstr "" "en la documentación de PostgreSQL.\n" "\n" -#: help.c:147 +#: help.c:144 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Reporte de errores a <%s>.\n" -#: help.c:148 +#: help.c:145 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: help.c:174 +#: help.c:171 #, c-format msgid "General\n" msgstr "General\n" -#: help.c:175 +#: help.c:172 #, c-format msgid " \\copyright show PostgreSQL usage and distribution terms\n" msgstr " \\copyright mostrar términos de uso y distribución de PostgreSQL\n" -#: help.c:176 +#: help.c:173 #, c-format msgid " \\crosstabview [COLUMNS] execute query and display results in crosstab\n" msgstr " \\crosstabview [COLUMNAS] ejecutar la consulta y desplegar en «crosstab»\n" -#: help.c:177 +#: help.c:174 #, c-format msgid " \\errverbose show most recent error message at maximum verbosity\n" msgstr " \\errverbose mostrar error más reciente en máxima verbosidad\n" -#: help.c:178 +#: help.c:175 #, c-format msgid "" " \\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);\n" @@ -2694,401 +2758,413 @@ msgstr "" " \\g [(OPTIONS)] [FILE] ejecuta la consulta (y envía el resultado a un fichero o |pipe);\n" " \\g sin argumentos es equivalente a un punto y coma\n" -#: help.c:180 +#: help.c:177 #, c-format msgid " \\gdesc describe result of query, without executing it\n" msgstr " \\gdesc describir resultado de la consulta, sin ejecutarla\n" -#: help.c:181 +#: help.c:178 #, c-format msgid " \\gexec execute query, then execute each value in its result\n" msgstr " \\gexec ejecutar la consulta, luego ejecuta cada valor del resultado\n" -#: help.c:182 +#: help.c:179 #, c-format msgid " \\gset [PREFIX] execute query and store results in psql variables\n" msgstr "" " \\gset [PREFIJO] ejecutar la consulta y almacenar los resultados en variables\n" " de psql\n" -#: help.c:183 +#: help.c:180 #, c-format msgid " \\gx [(OPTIONS)] [FILE] as \\g, but forces expanded output mode\n" msgstr " \\ gx [(OPTIONS)] [FILE] como \\g, pero fuerza el modo de salida expandido\n" -#: help.c:184 +#: help.c:181 #, c-format msgid " \\q quit psql\n" msgstr " \\q salir de psql\n" -#: help.c:185 +#: help.c:182 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEGS] ejecutar consulta cada SEGS segundos\n" -#: help.c:188 +#: help.c:185 #, c-format msgid "Help\n" msgstr "Ayuda\n" -#: help.c:190 +#: help.c:187 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [commands] desplegar ayuda sobre las órdenes backslash\n" -#: help.c:191 +#: help.c:188 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr " \\? options desplegar ayuda sobre opciones de línea de órdenes\n" -#: help.c:192 +#: help.c:189 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? variables desplegar ayuda sobre variables especiales\n" -#: help.c:193 +#: help.c:190 #, c-format msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" msgstr "" " \\h [NOMBRE] mostrar ayuda de sintaxis de órdenes SQL;\n" " use «*» para todas las órdenes\n" -#: help.c:196 +#: help.c:193 #, c-format msgid "Query Buffer\n" msgstr "Búfer de consulta\n" -#: help.c:197 +#: help.c:194 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr "" " \\e [ARCHIVO] [LÍNEA]\n" " editar el búfer de consulta (o archivo) con editor externo\n" -#: help.c:198 +#: help.c:195 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr "" " \\ef [NOMBRE-FUNCIÓN [LÍNEA]]\n" " editar una función con editor externo\n" -#: help.c:199 +#: help.c:196 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr "" " \\ev [NOMBRE-VISTA [LÍNEA]]\n" " editar definición de una vista con editor externo\n" -#: help.c:200 +#: help.c:197 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p mostrar el contenido del búfer de consulta\n" -#: help.c:201 +#: help.c:198 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r reiniciar (limpiar) el búfer de consulta\n" -#: help.c:203 +#: help.c:200 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [ARCHIVO] mostrar historial de órdenes o guardarlo en archivo\n" -#: help.c:205 +#: help.c:202 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w ARCHIVO escribir búfer de consulta a archivo\n" -#: help.c:208 +#: help.c:205 #, c-format msgid "Input/Output\n" msgstr "Entrada/Salida\n" -#: help.c:209 +#: help.c:206 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr " \\copy ... ejecutar orden SQL COPY con flujo de datos al cliente\n" -#: help.c:210 +#: help.c:207 #, c-format msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" msgstr " \\echo [-n] [STRING] escribe la cadena en la salida estándar (-n no genera el salto de línea final)\n" -#: help.c:211 +#: help.c:208 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i ARCHIVO ejecutar órdenes desde archivo\n" -#: help.c:212 +#: help.c:209 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr " \\ir ARCHIVO como \\i, pero relativo a la ubicación del script actual\n" -#: help.c:213 +#: help.c:210 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [ARCHIVO] enviar resultados de consultas a archivo u |orden\n" -#: help.c:214 +#: help.c:211 #, c-format msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" msgstr " \\qecho [-n] [STRING] escribe la cadena hacia flujo de salida \\o (-n no genera el salto de línea final)\n" -#: help.c:215 +#: help.c:212 #, c-format msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" msgstr " \\warn [-n] [STRING] escribe la cadena a la salida de error estándar (-n no genera el salto de línea final)\n" -#: help.c:218 +#: help.c:215 #, c-format msgid "Conditional\n" msgstr "Condicional\n" -#: help.c:219 +#: help.c:216 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if EXPRESIÓN inicia bloque condicional\n" -#: help.c:220 +#: help.c:217 #, c-format msgid " \\elif EXPR alternative within current conditional block\n" msgstr " \\elif EXPR alternativa dentro del bloque condicional actual\n" -#: help.c:221 +#: help.c:218 #, c-format msgid " \\else final alternative within current conditional block\n" msgstr " \\else alternativa final dentro del bloque condicional actual\n" -#: help.c:222 +#: help.c:219 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif termina el bloque condicional\n" -#: help.c:225 +#: help.c:222 #, c-format msgid "Informational\n" msgstr "Informativo\n" -#: help.c:226 +#: help.c:223 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (opciones: S = desplegar objectos de sistema, + = agregar más detalle)\n" -#: help.c:227 +#: help.c:224 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] listar tablas, vistas y secuencias\n" -#: help.c:228 +#: help.c:225 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] NOMBRE describir tabla, índice, secuencia o vista\n" -#: help.c:229 +#: help.c:226 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [PATRÓN] listar funciones de agregación\n" -#: help.c:230 +#: help.c:227 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [PATRÓN] listar métodos de acceso\n" -#: help.c:231 +#: help.c:228 #, c-format msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" msgstr " \\do[S] [PATRÓN] listar las clases de operadores\n" -#: help.c:232 +#: help.c:229 #, c-format msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" msgstr " \\do[S] [PATRÓN] listar las familias de operadores\n" -#: help.c:233 +#: help.c:230 #, c-format msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" msgstr " \\do[S] [PATRÓN] listar los operadores de la familia de operadores\n" -#: help.c:234 +#: help.c:231 #, c-format msgid " \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" msgstr " \\dAp [AMPTRN [OPFPTRN]] enumera las funciones de la familia de operadores\n" -#: help.c:235 +#: help.c:232 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [PATRÓN] listar tablespaces\n" -#: help.c:236 +#: help.c:233 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [PATRÓN] listar conversiones\n" -#: help.c:237 +#: help.c:234 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [PATRÓN] listar conversiones de tipo (casts)\n" -#: help.c:238 +#: help.c:235 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr " \\dd[S] [PATRÓN] listar comentarios de objetos que no aparecen en otra parte\n" -#: help.c:239 +#: help.c:236 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [PATRÓN] listar dominios\n" -#: help.c:240 +#: help.c:237 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [PATRÓN] listar privilegios por omisión\n" -#: help.c:241 +#: help.c:238 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [PATRÓN] listar tablas foráneas\n" -#: help.c:242 +#: help.c:239 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [PATRÓN] listar tablas foráneas\n" -#: help.c:243 +#: help.c:240 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [PATRÓN] listar servidores foráneos\n" -#: help.c:244 +#: help.c:241 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [PATRÓN] listar mapeos de usuario\n" -#: help.c:245 +#: help.c:242 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [PATRÓN] listar conectores de datos externos\n" -#: help.c:246 -#, c-format -msgid " \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] functions\n" +#: help.c:243 +#, fuzzy, c-format +#| msgid " \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] functions\n" +msgid "" +" \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" +" list [only agg/normal/procedure/trigger/window] functions\n" msgstr " \\df[anptw][S+] [PATRÓN] listar funciones [sólo ag./normal/proc./trigger/ventana]\n" -#: help.c:247 +#: help.c:245 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [PATRÓN] listar configuraciones de búsqueda en texto\n" -#: help.c:248 +#: help.c:246 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [PATRÓN] listar diccionarios de búsqueda en texto\n" -#: help.c:249 +#: help.c:247 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [PATRÓN] listar analizadores (parsers) de búsq. en texto\n" -#: help.c:250 +#: help.c:248 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [PATRÓN] listar plantillas de búsqueda en texto\n" -#: help.c:251 +#: help.c:249 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [PATRÓN] listar roles\n" -#: help.c:252 +#: help.c:250 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [PATRÓN] listar índices\n" -#: help.c:253 +#: help.c:251 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl listar objetos grandes, lo mismo que \\lo_list\n" -#: help.c:254 +#: help.c:252 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [PATRÓN] listar lenguajes procedurales\n" -#: help.c:255 +#: help.c:253 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [PATRÓN] listar vistas materializadas\n" -#: help.c:256 +#: help.c:254 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [PATRÓN] listar esquemas\n" -#: help.c:257 -#, c-format -msgid " \\do[S] [PATTERN] list operators\n" +#: help.c:255 +#, fuzzy, c-format +#| msgid " \\do[S] [PATTERN] list operators\n" +msgid "" +" \\do[S] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" +" list operators\n" msgstr " \\do[S] [PATRÓN] listar operadores\n" -#: help.c:258 +#: help.c:257 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S] [PATRÓN] listar ordenamientos (collations)\n" -#: help.c:259 +#: help.c:258 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr " \\dp [PATRÓN] listar privilegios de acceso a tablas, vistas y secuencias\n" -#: help.c:260 +#: help.c:259 #, c-format msgid " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n" msgstr " \\dP[tin+] [PATRÓN] listar relaciones particionadas (sólo tablas/índices) [n=anidadas]\n" -#: help.c:261 +#: help.c:260 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [PAT1 [PAT2]] listar parámetros de rol por base de datos\n" -#: help.c:262 +#: help.c:261 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[+] [PATRÓN] listar publicaciones de replicación\n" -#: help.c:263 +#: help.c:262 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [PATRÓN] listar suscripciones de replicación\n" -#: help.c:264 +#: help.c:263 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [PATRÓN] listar secuencias\n" -#: help.c:265 +#: help.c:264 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [PATRÓN] listar tablas\n" -#: help.c:266 +#: help.c:265 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [PATRÓN] listar tipos de dato\n" -#: help.c:267 +#: help.c:266 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [PATRÓN] listar roles\n" -#: help.c:268 +#: help.c:267 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [PATRÓN] listar vistas\n" -#: help.c:269 +#: help.c:268 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [PATRÓN] listar extensiones\n" +#: help.c:269 +#, fuzzy, c-format +#| msgid " \\dy [PATTERN] list event triggers\n" +msgid " \\dX [PATTERN] list extended statistics\n" +msgstr " \\dy [PATRÓN] listar disparadores por eventos\n" + #: help.c:270 #, c-format msgid " \\dy [PATTERN] list event triggers\n" @@ -3381,6 +3457,18 @@ msgstr "" " (por omisión: 0=sin límite)\n" #: help.c:377 +#, fuzzy, c-format +#| msgid "" +#| " HIDE_TABLEAM\n" +#| " if set, table access methods are not displayed\n" +msgid "" +" HIDE_TOAST_COMPRESSION\n" +" if set, compression methods are not displayed\n" +msgstr "" +" HIDE_TABLEAM\n" +" ocultar métodos de acceso de tabla\n" + +#: help.c:379 #, c-format msgid "" " HIDE_TABLEAM\n" @@ -3389,7 +3477,7 @@ msgstr "" " HIDE_TABLEAM\n" " ocultar métodos de acceso de tabla\n" -#: help.c:379 +#: help.c:381 #, c-format msgid "" " HISTCONTROL\n" @@ -3398,28 +3486,28 @@ msgstr "" " HISTCONTROL controla la lista de historia de órdenes\n" " [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:381 +#: help.c:383 #, c-format msgid "" " HISTFILE\n" " file name used to store the command history\n" msgstr " HISTFILE nombre de archivo para almacenar historia de órdenes\n" -#: help.c:383 +#: help.c:385 #, c-format msgid "" " HISTSIZE\n" " maximum number of commands to store in the command history\n" msgstr " HISTSIZE número de órdenes a guardar en la historia de órdenes\n" -#: help.c:385 +#: help.c:387 #, c-format msgid "" " HOST\n" " the currently connected database server host\n" msgstr " HOST el servidor actualmente conectado\n" -#: help.c:387 +#: help.c:389 #, c-format msgid "" " IGNOREEOF\n" @@ -3428,14 +3516,14 @@ msgstr "" " IGNOREEOF si no está definida, enviar un EOF a sesión interactiva\n" " termina la aplicación\n" -#: help.c:389 +#: help.c:391 #, c-format msgid "" " LASTOID\n" " value of the last affected OID\n" msgstr " LASTOID el valor del último OID afectado\n" -#: help.c:391 +#: help.c:393 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" @@ -3447,7 +3535,7 @@ msgstr "" " mensaje y SQLSTATE del último error, o cadena vacía y\n" " «00000» si no hubo\n" -#: help.c:394 +#: help.c:396 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" @@ -3456,28 +3544,28 @@ msgstr "" " ON_ERROR_ROLLBACK si está definido, un error no aborta la transacción\n" " (usa «savepoints» implícitos)\n" -#: help.c:396 +#: help.c:398 #, c-format msgid "" " ON_ERROR_STOP\n" " stop batch execution after error\n" msgstr " ON_ERROR_STOP detiene ejecución por lotes al ocurrir un error\n" -#: help.c:398 +#: help.c:400 #, c-format msgid "" " PORT\n" " server port of the current connection\n" msgstr " PORT puerto del servidor de la conexión actual\n" -#: help.c:400 +#: help.c:402 #, c-format msgid "" " PROMPT1\n" " specifies the standard psql prompt\n" msgstr " PROMPT1 especifica el prompt estándar de psql\n" -#: help.c:402 +#: help.c:404 #, c-format msgid "" " PROMPT2\n" @@ -3486,21 +3574,21 @@ msgstr "" " PROMPT2 especifica el prompt usado cuando una sentencia continúa\n" " de una línea anterior\n" -#: help.c:404 +#: help.c:406 #, c-format msgid "" " PROMPT3\n" " specifies the prompt used during COPY ... FROM STDIN\n" msgstr " PROMPT3 especifica el prompt usado durante COPY ... FROM STDIN\n" -#: help.c:406 +#: help.c:408 #, c-format msgid "" " QUIET\n" " run quietly (same as -q option)\n" msgstr " QUIET ejecuta silenciosamente (igual que -q)\n" -#: help.c:408 +#: help.c:410 #, c-format msgid "" " ROW_COUNT\n" @@ -3509,7 +3597,7 @@ msgstr "" " ROW_COUNT número de tuplas retornadas o afectadas por última\n" " consulta, o 0\n" -#: help.c:410 +#: help.c:412 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3520,7 +3608,7 @@ msgstr "" " SERVER_VERSION_NUM\n" " versión del servidor (cadena corta o numérica)\n" -#: help.c:413 +#: help.c:415 #, c-format msgid "" " SHOW_CONTEXT\n" @@ -3529,35 +3617,35 @@ msgstr "" " SHOW_CONTEXT controla el despliegue de campos de contexto de mensaje\n" " [never, errors, always]\n" -#: help.c:415 +#: help.c:417 #, c-format msgid "" " SINGLELINE\n" " if set, end of line terminates SQL commands (same as -S option)\n" msgstr " SINGLELINE fin de línea termina modo de órdenes SQL (igual que -S)\n" -#: help.c:417 +#: help.c:419 #, c-format msgid "" " SINGLESTEP\n" " single-step mode (same as -s option)\n" msgstr " SINGLESTEP modo paso a paso (igual que -s)\n" -#: help.c:419 +#: help.c:421 #, c-format msgid "" " SQLSTATE\n" " SQLSTATE of last query, or \"00000\" if no error\n" msgstr " SQLSTATE SQLSTATE de la última consulta, o «00000» si no hubo error\n" -#: help.c:421 +#: help.c:423 #, c-format msgid "" " USER\n" " the currently connected database user\n" msgstr " USER el usuario actualmente conectado\n" -#: help.c:423 +#: help.c:425 #, c-format msgid "" " VERBOSITY\n" @@ -3566,7 +3654,7 @@ msgstr "" " VERBOSITY controla la verbosidad de errores [default, verbose,\n" " terse, sqlstate]\n" -#: help.c:425 +#: help.c:427 #, c-format msgid "" " VERSION\n" @@ -3579,7 +3667,7 @@ msgstr "" " VERSION_NUM\n" " versión de psql (cadena verbosa, corta o numérica)\n" -#: help.c:430 +#: help.c:432 #, c-format msgid "" "\n" @@ -3588,7 +3676,7 @@ msgstr "" "\n" "Parámetros de despliegue:\n" -#: help.c:432 +#: help.c:434 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3599,28 +3687,28 @@ msgstr "" " o \\pset NOMBRE [VALOR] dentro de psql\n" "\n" -#: help.c:434 +#: help.c:436 #, c-format msgid "" " border\n" " border style (number)\n" msgstr " border estilo de borde (número)\n" -#: help.c:436 +#: help.c:438 #, c-format msgid "" " columns\n" " target width for the wrapped format\n" msgstr " columns define el ancho para formato «wrapped»\n" -#: help.c:438 +#: help.c:440 #, c-format msgid "" " expanded (or x)\n" " expanded output [on, off, auto]\n" msgstr " expanded (o x) salida expandida [on, off, auto]\n" -#: help.c:440 +#: help.c:442 #, c-format msgid "" " fieldsep\n" @@ -3629,42 +3717,42 @@ msgstr "" " fieldsep separador de campos para formato «unaligned»\n" " (por omisión: «%s»)\n" -#: help.c:443 +#: help.c:445 #, c-format msgid "" " fieldsep_zero\n" " set field separator for unaligned output to a zero byte\n" msgstr " fieldsep_zero separador de campos en «unaligned» es byte cero\n" -#: help.c:445 +#: help.c:447 #, c-format msgid "" " footer\n" " enable or disable display of the table footer [on, off]\n" msgstr " footer activa o desactiva el pie de tabla [on, off]\n" -#: help.c:447 +#: help.c:449 #, c-format msgid "" " format\n" " set output format [unaligned, aligned, wrapped, html, asciidoc, ...]\n" msgstr " format define el formato de salida [unaligned, aligned, wrapped, html, asciidoc, ...]\n" -#: help.c:449 +#: help.c:451 #, c-format msgid "" " linestyle\n" " set the border line drawing style [ascii, old-ascii, unicode]\n" msgstr " linestyle define el estilo de dibujo de líneas [ascii, old-ascii, unicode]\n" -#: help.c:451 +#: help.c:453 #, c-format msgid "" " null\n" " set the string to be printed in place of a null value\n" msgstr " null define la cadena a imprimirse para valores null\n" -#: help.c:453 +#: help.c:455 #, c-format msgid "" " numericlocale\n" @@ -3673,21 +3761,21 @@ msgstr "" " numericlocale activa despliegue de carácter específico del lenguaje para\n" " separar grupos de dígitos\n" -#: help.c:455 +#: help.c:457 #, c-format msgid "" " pager\n" " control when an external pager is used [yes, no, always]\n" msgstr " pager controla cuándo se usará un paginador externo [yes, no, always]\n" -#: help.c:457 +#: help.c:459 #, c-format msgid "" " recordsep\n" " record (line) separator for unaligned output\n" msgstr " recordsep separador de registros (líneas) para formato «unaligned»\n" -#: help.c:459 +#: help.c:461 #, c-format msgid "" " recordsep_zero\n" @@ -3695,7 +3783,7 @@ msgid "" msgstr " recordsep_zero separador de registros en «unaligned» es byte cero\n" # XXX WTF does this mean? -#: help.c:461 +#: help.c:463 #, c-format msgid "" " tableattr (or T)\n" @@ -3706,21 +3794,21 @@ msgstr "" " o ancho proporcional de columnas alineadas a la izquierda\n" " en formato «latex-longtable»\n" -#: help.c:464 +#: help.c:466 #, c-format msgid "" " title\n" " set the table title for subsequently printed tables\n" msgstr " title define el título de tablas\n" -#: help.c:466 +#: help.c:468 #, c-format msgid "" " tuples_only\n" " if set, only actual table data is shown\n" msgstr " tuples_only si está definido, sólo los datos de la tabla se muestran\n" -#: help.c:468 +#: help.c:470 #, c-format msgid "" " unicode_border_linestyle\n" @@ -3733,7 +3821,7 @@ msgstr "" " unicode_header_linestyle\n" " define el estilo de líneas Unicode [single, double]\n" -#: help.c:473 +#: help.c:475 #, c-format msgid "" "\n" @@ -3742,7 +3830,7 @@ msgstr "" "\n" "Variables de ambiente:\n" -#: help.c:477 +#: help.c:479 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -3752,7 +3840,7 @@ msgstr "" " NOMBRE=VALOR [NOMBRE=VALOR] psql ...\n" " o \\setenv NOMBRE [VALOR] dentro de psql\n" -#: help.c:479 +#: help.c:481 #, c-format msgid "" " set NAME=VALUE\n" @@ -3764,63 +3852,63 @@ msgstr "" " psql ...\n" " o \\setenv NOMBRE [VALOR] dentro de psql\n" -#: help.c:482 +#: help.c:484 #, c-format msgid "" " COLUMNS\n" " number of columns for wrapped format\n" msgstr " COLUMNS número de columnas para formato «wrapped»\n" -#: help.c:484 +#: help.c:486 #, c-format msgid "" " PGAPPNAME\n" " same as the application_name connection parameter\n" msgstr " PGAPPNAME igual que el parámetro de conexión application_name\n" -#: help.c:486 +#: help.c:488 #, c-format msgid "" " PGDATABASE\n" " same as the dbname connection parameter\n" msgstr " PGDATABASE igual que el parámetro de conexión dbname\n" -#: help.c:488 +#: help.c:490 #, c-format msgid "" " PGHOST\n" " same as the host connection parameter\n" msgstr " PGHOST igual que el parámetro de conexión host\n" -#: help.c:490 +#: help.c:492 #, c-format msgid "" " PGPASSWORD\n" " connection password (not recommended)\n" msgstr " PGPASSWORD contraseña de la conexión (no recomendado)\n" -#: help.c:492 +#: help.c:494 #, c-format msgid "" " PGPASSFILE\n" " password file name\n" msgstr " PGPASSFILE nombre de archivo de contraseñas\n" -#: help.c:494 +#: help.c:496 #, c-format msgid "" " PGPORT\n" " same as the port connection parameter\n" msgstr " PGPORT igual que el parámetro de conexión port\n" -#: help.c:496 +#: help.c:498 #, c-format msgid "" " PGUSER\n" " same as the user connection parameter\n" msgstr " PGUSER igual que el parámetro de conexión user\n" -#: help.c:498 +#: help.c:500 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" @@ -3829,7 +3917,7 @@ msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" " editor usado por órdenes \\e, \\ef, y \\ev\n" -#: help.c:500 +#: help.c:502 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" @@ -3838,46 +3926,46 @@ msgstr "" " PSQL_EDITOR_LINENUMBER_ARGS\n" " cómo especificar número de línea al invocar al editor\n" -#: help.c:502 +#: help.c:504 #, c-format msgid "" " PSQL_HISTORY\n" " alternative location for the command history file\n" msgstr " PSQL_HISTORY ubicación alternativa del archivo de historia de órdenes\n" -#: help.c:504 +#: help.c:506 #, c-format msgid "" " PSQL_PAGER, PAGER\n" " name of external pager program\n" msgstr " PSQL_PAGER, PAGER nombre de programa paginador externo\n" -#: help.c:506 +#: help.c:508 #, c-format msgid "" " PSQLRC\n" " alternative location for the user's .psqlrc file\n" msgstr " PSQLRC ubicación alternativa para el archivo .psqlrc del usuario\n" -#: help.c:508 +#: help.c:510 #, c-format msgid "" " SHELL\n" " shell used by the \\! command\n" msgstr " SHELL intérprete usado por la orden \\!\n" -#: help.c:510 +#: help.c:512 #, c-format msgid "" " TMPDIR\n" " directory for temporary files\n" msgstr " TMPDIR directorio para archivos temporales\n" -#: help.c:554 +#: help.c:557 msgid "Available help:\n" msgstr "Ayuda disponible:\n" -#: help.c:642 +#: help.c:652 #, c-format msgid "" "Command: %s\n" @@ -3896,7 +3984,7 @@ msgstr "" "URL: %s\n" "\n" -#: help.c:661 +#: help.c:675 #, c-format msgid "" "No help available for \"%s\".\n" @@ -4029,191 +4117,193 @@ msgstr "%s: memoria agotada" #: sql_help.c:267 sql_help.c:316 sql_help.c:318 sql_help.c:320 sql_help.c:322 #: sql_help.c:391 sql_help.c:396 sql_help.c:398 sql_help.c:440 sql_help.c:442 #: sql_help.c:445 sql_help.c:447 sql_help.c:515 sql_help.c:520 sql_help.c:525 -#: sql_help.c:530 sql_help.c:535 sql_help.c:588 sql_help.c:590 sql_help.c:592 -#: sql_help.c:594 sql_help.c:596 sql_help.c:599 sql_help.c:601 sql_help.c:604 -#: sql_help.c:615 sql_help.c:617 sql_help.c:658 sql_help.c:660 sql_help.c:662 -#: sql_help.c:665 sql_help.c:667 sql_help.c:669 sql_help.c:702 sql_help.c:706 -#: sql_help.c:710 sql_help.c:729 sql_help.c:732 sql_help.c:735 sql_help.c:764 -#: sql_help.c:776 sql_help.c:784 sql_help.c:787 sql_help.c:790 sql_help.c:805 -#: sql_help.c:808 sql_help.c:837 sql_help.c:842 sql_help.c:847 sql_help.c:852 -#: sql_help.c:857 sql_help.c:879 sql_help.c:881 sql_help.c:883 sql_help.c:885 -#: sql_help.c:888 sql_help.c:890 sql_help.c:931 sql_help.c:975 sql_help.c:980 -#: sql_help.c:985 sql_help.c:990 sql_help.c:995 sql_help.c:1014 sql_help.c:1025 -#: sql_help.c:1027 sql_help.c:1046 sql_help.c:1056 sql_help.c:1058 -#: sql_help.c:1060 sql_help.c:1072 sql_help.c:1076 sql_help.c:1078 -#: sql_help.c:1090 sql_help.c:1092 sql_help.c:1094 sql_help.c:1096 -#: sql_help.c:1112 sql_help.c:1114 sql_help.c:1118 sql_help.c:1121 -#: sql_help.c:1122 sql_help.c:1123 sql_help.c:1126 sql_help.c:1128 -#: sql_help.c:1262 sql_help.c:1264 sql_help.c:1267 sql_help.c:1270 -#: sql_help.c:1272 sql_help.c:1274 sql_help.c:1277 sql_help.c:1280 -#: sql_help.c:1391 sql_help.c:1393 sql_help.c:1395 sql_help.c:1398 -#: sql_help.c:1419 sql_help.c:1422 sql_help.c:1425 sql_help.c:1428 -#: sql_help.c:1432 sql_help.c:1434 sql_help.c:1436 sql_help.c:1438 -#: sql_help.c:1452 sql_help.c:1455 sql_help.c:1457 sql_help.c:1459 -#: sql_help.c:1469 sql_help.c:1471 sql_help.c:1481 sql_help.c:1483 -#: sql_help.c:1493 sql_help.c:1496 sql_help.c:1519 sql_help.c:1521 -#: sql_help.c:1523 sql_help.c:1525 sql_help.c:1528 sql_help.c:1530 -#: sql_help.c:1533 sql_help.c:1536 sql_help.c:1586 sql_help.c:1629 -#: sql_help.c:1632 sql_help.c:1634 sql_help.c:1636 sql_help.c:1639 -#: sql_help.c:1641 sql_help.c:1643 sql_help.c:1646 sql_help.c:1696 -#: sql_help.c:1712 sql_help.c:1933 sql_help.c:2002 sql_help.c:2021 -#: sql_help.c:2034 sql_help.c:2091 sql_help.c:2098 sql_help.c:2108 -#: sql_help.c:2129 sql_help.c:2155 sql_help.c:2173 sql_help.c:2200 -#: sql_help.c:2295 sql_help.c:2340 sql_help.c:2364 sql_help.c:2387 -#: sql_help.c:2391 sql_help.c:2425 sql_help.c:2445 sql_help.c:2467 -#: sql_help.c:2481 sql_help.c:2501 sql_help.c:2524 sql_help.c:2554 -#: sql_help.c:2579 sql_help.c:2625 sql_help.c:2903 sql_help.c:2916 -#: sql_help.c:2933 sql_help.c:2949 sql_help.c:2989 sql_help.c:3041 -#: sql_help.c:3045 sql_help.c:3047 sql_help.c:3053 sql_help.c:3071 -#: sql_help.c:3098 sql_help.c:3133 sql_help.c:3145 sql_help.c:3154 -#: sql_help.c:3198 sql_help.c:3212 sql_help.c:3240 sql_help.c:3248 -#: sql_help.c:3260 sql_help.c:3270 sql_help.c:3278 sql_help.c:3286 -#: sql_help.c:3294 sql_help.c:3302 sql_help.c:3311 sql_help.c:3322 -#: sql_help.c:3330 sql_help.c:3338 sql_help.c:3346 sql_help.c:3354 -#: sql_help.c:3364 sql_help.c:3373 sql_help.c:3382 sql_help.c:3390 -#: sql_help.c:3400 sql_help.c:3411 sql_help.c:3419 sql_help.c:3428 -#: sql_help.c:3439 sql_help.c:3448 sql_help.c:3456 sql_help.c:3464 -#: sql_help.c:3472 sql_help.c:3480 sql_help.c:3488 sql_help.c:3496 -#: sql_help.c:3504 sql_help.c:3512 sql_help.c:3520 sql_help.c:3528 -#: sql_help.c:3545 sql_help.c:3554 sql_help.c:3562 sql_help.c:3579 -#: sql_help.c:3594 sql_help.c:3869 sql_help.c:3920 sql_help.c:3949 -#: sql_help.c:3962 sql_help.c:4407 sql_help.c:4455 sql_help.c:4596 +#: sql_help.c:530 sql_help.c:535 sql_help.c:589 sql_help.c:591 sql_help.c:593 +#: sql_help.c:595 sql_help.c:597 sql_help.c:600 sql_help.c:602 sql_help.c:605 +#: sql_help.c:616 sql_help.c:618 sql_help.c:660 sql_help.c:662 sql_help.c:664 +#: sql_help.c:667 sql_help.c:669 sql_help.c:671 sql_help.c:706 sql_help.c:710 +#: sql_help.c:714 sql_help.c:733 sql_help.c:736 sql_help.c:739 sql_help.c:768 +#: sql_help.c:780 sql_help.c:788 sql_help.c:791 sql_help.c:794 sql_help.c:809 +#: sql_help.c:812 sql_help.c:841 sql_help.c:846 sql_help.c:851 sql_help.c:856 +#: sql_help.c:861 sql_help.c:883 sql_help.c:885 sql_help.c:887 sql_help.c:889 +#: sql_help.c:892 sql_help.c:894 sql_help.c:936 sql_help.c:980 sql_help.c:985 +#: sql_help.c:990 sql_help.c:995 sql_help.c:1000 sql_help.c:1019 +#: sql_help.c:1030 sql_help.c:1032 sql_help.c:1051 sql_help.c:1061 +#: sql_help.c:1063 sql_help.c:1065 sql_help.c:1077 sql_help.c:1081 +#: sql_help.c:1083 sql_help.c:1095 sql_help.c:1097 sql_help.c:1099 +#: sql_help.c:1101 sql_help.c:1119 sql_help.c:1121 sql_help.c:1125 +#: sql_help.c:1129 sql_help.c:1133 sql_help.c:1136 sql_help.c:1137 +#: sql_help.c:1138 sql_help.c:1141 sql_help.c:1143 sql_help.c:1279 +#: sql_help.c:1281 sql_help.c:1284 sql_help.c:1287 sql_help.c:1289 +#: sql_help.c:1291 sql_help.c:1294 sql_help.c:1297 sql_help.c:1411 +#: sql_help.c:1413 sql_help.c:1415 sql_help.c:1418 sql_help.c:1439 +#: sql_help.c:1442 sql_help.c:1445 sql_help.c:1448 sql_help.c:1452 +#: sql_help.c:1454 sql_help.c:1456 sql_help.c:1458 sql_help.c:1472 +#: sql_help.c:1475 sql_help.c:1477 sql_help.c:1479 sql_help.c:1489 +#: sql_help.c:1491 sql_help.c:1501 sql_help.c:1503 sql_help.c:1513 +#: sql_help.c:1516 sql_help.c:1539 sql_help.c:1541 sql_help.c:1543 +#: sql_help.c:1545 sql_help.c:1548 sql_help.c:1550 sql_help.c:1553 +#: sql_help.c:1556 sql_help.c:1607 sql_help.c:1650 sql_help.c:1653 +#: sql_help.c:1655 sql_help.c:1657 sql_help.c:1660 sql_help.c:1662 +#: sql_help.c:1664 sql_help.c:1667 sql_help.c:1717 sql_help.c:1733 +#: sql_help.c:1964 sql_help.c:2033 sql_help.c:2052 sql_help.c:2065 +#: sql_help.c:2122 sql_help.c:2129 sql_help.c:2139 sql_help.c:2160 +#: sql_help.c:2186 sql_help.c:2204 sql_help.c:2231 sql_help.c:2327 +#: sql_help.c:2373 sql_help.c:2397 sql_help.c:2420 sql_help.c:2424 +#: sql_help.c:2458 sql_help.c:2478 sql_help.c:2500 sql_help.c:2514 +#: sql_help.c:2535 sql_help.c:2559 sql_help.c:2589 sql_help.c:2614 +#: sql_help.c:2661 sql_help.c:2949 sql_help.c:2962 sql_help.c:2979 +#: sql_help.c:2995 sql_help.c:3035 sql_help.c:3089 sql_help.c:3093 +#: sql_help.c:3095 sql_help.c:3102 sql_help.c:3121 sql_help.c:3148 +#: sql_help.c:3183 sql_help.c:3195 sql_help.c:3204 sql_help.c:3248 +#: sql_help.c:3262 sql_help.c:3290 sql_help.c:3298 sql_help.c:3310 +#: sql_help.c:3320 sql_help.c:3328 sql_help.c:3336 sql_help.c:3344 +#: sql_help.c:3352 sql_help.c:3361 sql_help.c:3372 sql_help.c:3380 +#: sql_help.c:3388 sql_help.c:3396 sql_help.c:3404 sql_help.c:3414 +#: sql_help.c:3423 sql_help.c:3432 sql_help.c:3440 sql_help.c:3450 +#: sql_help.c:3461 sql_help.c:3469 sql_help.c:3478 sql_help.c:3489 +#: sql_help.c:3498 sql_help.c:3506 sql_help.c:3514 sql_help.c:3522 +#: sql_help.c:3530 sql_help.c:3538 sql_help.c:3546 sql_help.c:3554 +#: sql_help.c:3562 sql_help.c:3570 sql_help.c:3578 sql_help.c:3595 +#: sql_help.c:3604 sql_help.c:3612 sql_help.c:3629 sql_help.c:3644 +#: sql_help.c:3946 sql_help.c:3997 sql_help.c:4026 sql_help.c:4041 +#: sql_help.c:4526 sql_help.c:4574 sql_help.c:4725 msgid "name" msgstr "nombre" -#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1783 -#: sql_help.c:3213 sql_help.c:4193 +#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1814 +#: sql_help.c:3263 sql_help.c:4302 msgid "aggregate_signature" msgstr "signatura_func_agregación" #: sql_help.c:37 sql_help.c:67 sql_help.c:82 sql_help.c:118 sql_help.c:250 -#: sql_help.c:268 sql_help.c:399 sql_help.c:446 sql_help.c:524 sql_help.c:571 -#: sql_help.c:589 sql_help.c:616 sql_help.c:666 sql_help.c:731 sql_help.c:786 -#: sql_help.c:807 sql_help.c:846 sql_help.c:891 sql_help.c:932 sql_help.c:984 -#: sql_help.c:1016 sql_help.c:1026 sql_help.c:1059 sql_help.c:1079 -#: sql_help.c:1093 sql_help.c:1129 sql_help.c:1271 sql_help.c:1392 -#: sql_help.c:1435 sql_help.c:1456 sql_help.c:1470 sql_help.c:1482 -#: sql_help.c:1495 sql_help.c:1522 sql_help.c:1587 sql_help.c:1640 +#: sql_help.c:268 sql_help.c:399 sql_help.c:446 sql_help.c:524 sql_help.c:572 +#: sql_help.c:590 sql_help.c:617 sql_help.c:668 sql_help.c:735 sql_help.c:790 +#: sql_help.c:811 sql_help.c:850 sql_help.c:895 sql_help.c:937 sql_help.c:989 +#: sql_help.c:1021 sql_help.c:1031 sql_help.c:1064 sql_help.c:1084 +#: sql_help.c:1098 sql_help.c:1144 sql_help.c:1288 sql_help.c:1412 +#: sql_help.c:1455 sql_help.c:1476 sql_help.c:1490 sql_help.c:1502 +#: sql_help.c:1515 sql_help.c:1542 sql_help.c:1608 sql_help.c:1661 msgid "new_name" msgstr "nuevo_nombre" #: sql_help.c:40 sql_help.c:69 sql_help.c:84 sql_help.c:120 sql_help.c:248 -#: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:618 -#: sql_help.c:627 sql_help.c:685 sql_help.c:705 sql_help.c:734 sql_help.c:789 -#: sql_help.c:851 sql_help.c:889 sql_help.c:989 sql_help.c:1028 sql_help.c:1057 -#: sql_help.c:1077 sql_help.c:1091 sql_help.c:1127 sql_help.c:1332 -#: sql_help.c:1394 sql_help.c:1437 sql_help.c:1458 sql_help.c:1520 -#: sql_help.c:1635 sql_help.c:2889 +#: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:619 +#: sql_help.c:628 sql_help.c:689 sql_help.c:709 sql_help.c:738 sql_help.c:793 +#: sql_help.c:855 sql_help.c:893 sql_help.c:994 sql_help.c:1033 sql_help.c:1062 +#: sql_help.c:1082 sql_help.c:1096 sql_help.c:1142 sql_help.c:1351 +#: sql_help.c:1414 sql_help.c:1457 sql_help.c:1478 sql_help.c:1540 +#: sql_help.c:1656 sql_help.c:2935 msgid "new_owner" msgstr "nuevo_dueño" #: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:252 sql_help.c:319 -#: sql_help.c:448 sql_help.c:534 sql_help.c:668 sql_help.c:709 sql_help.c:737 -#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1095 -#: sql_help.c:1273 sql_help.c:1439 sql_help.c:1460 sql_help.c:1472 -#: sql_help.c:1484 sql_help.c:1524 sql_help.c:1642 +#: sql_help.c:448 sql_help.c:534 sql_help.c:670 sql_help.c:713 sql_help.c:741 +#: sql_help.c:796 sql_help.c:860 sql_help.c:999 sql_help.c:1066 sql_help.c:1100 +#: sql_help.c:1290 sql_help.c:1459 sql_help.c:1480 sql_help.c:1492 +#: sql_help.c:1504 sql_help.c:1544 sql_help.c:1663 msgid "new_schema" msgstr "nuevo_esquema" -#: sql_help.c:44 sql_help.c:1847 sql_help.c:3214 sql_help.c:4222 +#: sql_help.c:44 sql_help.c:1878 sql_help.c:3264 sql_help.c:4331 msgid "where aggregate_signature is:" msgstr "donde signatura_func_agregación es:" #: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:337 sql_help.c:350 #: sql_help.c:354 sql_help.c:370 sql_help.c:373 sql_help.c:376 sql_help.c:516 -#: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:838 -#: sql_help.c:843 sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:976 -#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1801 -#: sql_help.c:1818 sql_help.c:1824 sql_help.c:1848 sql_help.c:1851 -#: sql_help.c:1854 sql_help.c:2003 sql_help.c:2022 sql_help.c:2025 -#: sql_help.c:2296 sql_help.c:2502 sql_help.c:3215 sql_help.c:3218 -#: sql_help.c:3221 sql_help.c:3312 sql_help.c:3401 sql_help.c:3429 -#: sql_help.c:3753 sql_help.c:4101 sql_help.c:4199 sql_help.c:4206 -#: sql_help.c:4212 sql_help.c:4223 sql_help.c:4226 sql_help.c:4229 +#: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:842 +#: sql_help.c:847 sql_help.c:852 sql_help.c:857 sql_help.c:862 sql_help.c:981 +#: sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1001 sql_help.c:1832 +#: sql_help.c:1849 sql_help.c:1855 sql_help.c:1879 sql_help.c:1882 +#: sql_help.c:1885 sql_help.c:2034 sql_help.c:2053 sql_help.c:2056 +#: sql_help.c:2328 sql_help.c:2536 sql_help.c:3265 sql_help.c:3268 +#: sql_help.c:3271 sql_help.c:3362 sql_help.c:3451 sql_help.c:3479 +#: sql_help.c:3824 sql_help.c:4204 sql_help.c:4308 sql_help.c:4315 +#: sql_help.c:4321 sql_help.c:4332 sql_help.c:4335 sql_help.c:4338 msgid "argmode" msgstr "modo_arg" #: sql_help.c:46 sql_help.c:49 sql_help.c:52 sql_help.c:338 sql_help.c:351 #: sql_help.c:355 sql_help.c:371 sql_help.c:374 sql_help.c:377 sql_help.c:517 -#: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:839 -#: sql_help.c:844 sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:977 -#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1802 -#: sql_help.c:1819 sql_help.c:1825 sql_help.c:1849 sql_help.c:1852 -#: sql_help.c:1855 sql_help.c:2004 sql_help.c:2023 sql_help.c:2026 -#: sql_help.c:2297 sql_help.c:2503 sql_help.c:3216 sql_help.c:3219 -#: sql_help.c:3222 sql_help.c:3313 sql_help.c:3402 sql_help.c:3430 -#: sql_help.c:4200 sql_help.c:4207 sql_help.c:4213 sql_help.c:4224 -#: sql_help.c:4227 sql_help.c:4230 +#: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:843 +#: sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:863 sql_help.c:982 +#: sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1002 sql_help.c:1833 +#: sql_help.c:1850 sql_help.c:1856 sql_help.c:1880 sql_help.c:1883 +#: sql_help.c:1886 sql_help.c:2035 sql_help.c:2054 sql_help.c:2057 +#: sql_help.c:2329 sql_help.c:2537 sql_help.c:3266 sql_help.c:3269 +#: sql_help.c:3272 sql_help.c:3363 sql_help.c:3452 sql_help.c:3480 +#: sql_help.c:4309 sql_help.c:4316 sql_help.c:4322 sql_help.c:4333 +#: sql_help.c:4336 sql_help.c:4339 msgid "argname" msgstr "nombre_arg" #: sql_help.c:47 sql_help.c:50 sql_help.c:53 sql_help.c:339 sql_help.c:352 #: sql_help.c:356 sql_help.c:372 sql_help.c:375 sql_help.c:378 sql_help.c:518 -#: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:840 -#: sql_help.c:845 sql_help.c:850 sql_help.c:855 sql_help.c:860 sql_help.c:978 -#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1803 -#: sql_help.c:1820 sql_help.c:1826 sql_help.c:1850 sql_help.c:1853 -#: sql_help.c:1856 sql_help.c:2298 sql_help.c:2504 sql_help.c:3217 -#: sql_help.c:3220 sql_help.c:3223 sql_help.c:3314 sql_help.c:3403 -#: sql_help.c:3431 sql_help.c:4201 sql_help.c:4208 sql_help.c:4214 -#: sql_help.c:4225 sql_help.c:4228 sql_help.c:4231 +#: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:844 +#: sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:864 sql_help.c:983 +#: sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1003 sql_help.c:1834 +#: sql_help.c:1851 sql_help.c:1857 sql_help.c:1881 sql_help.c:1884 +#: sql_help.c:1887 sql_help.c:2330 sql_help.c:2538 sql_help.c:3267 +#: sql_help.c:3270 sql_help.c:3273 sql_help.c:3364 sql_help.c:3453 +#: sql_help.c:3481 sql_help.c:4310 sql_help.c:4317 sql_help.c:4323 +#: sql_help.c:4334 sql_help.c:4337 sql_help.c:4340 msgid "argtype" msgstr "tipo_arg" -#: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:926 -#: sql_help.c:1074 sql_help.c:1453 sql_help.c:1581 sql_help.c:1613 -#: sql_help.c:1665 sql_help.c:1904 sql_help.c:1911 sql_help.c:2203 -#: sql_help.c:2245 sql_help.c:2252 sql_help.c:2261 sql_help.c:2341 -#: sql_help.c:2555 sql_help.c:2647 sql_help.c:2918 sql_help.c:3099 -#: sql_help.c:3121 sql_help.c:3261 sql_help.c:3616 sql_help.c:3788 -#: sql_help.c:3961 sql_help.c:4658 +#: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:931 +#: sql_help.c:1079 sql_help.c:1473 sql_help.c:1602 sql_help.c:1634 +#: sql_help.c:1686 sql_help.c:1749 sql_help.c:1935 sql_help.c:1942 +#: sql_help.c:2234 sql_help.c:2276 sql_help.c:2283 sql_help.c:2292 +#: sql_help.c:2374 sql_help.c:2590 sql_help.c:2683 sql_help.c:2964 +#: sql_help.c:3149 sql_help.c:3171 sql_help.c:3311 sql_help.c:3666 +#: sql_help.c:3865 sql_help.c:4040 sql_help.c:4788 msgid "option" msgstr "opción" -#: sql_help.c:113 sql_help.c:927 sql_help.c:1582 sql_help.c:2342 -#: sql_help.c:2556 sql_help.c:3100 sql_help.c:3262 +#: sql_help.c:113 sql_help.c:932 sql_help.c:1603 sql_help.c:2375 +#: sql_help.c:2591 sql_help.c:3150 sql_help.c:3312 msgid "where option can be:" msgstr "donde opción puede ser:" -#: sql_help.c:114 sql_help.c:2137 +#: sql_help.c:114 sql_help.c:2168 msgid "allowconn" msgstr "allowconn" -#: sql_help.c:115 sql_help.c:928 sql_help.c:1583 sql_help.c:2138 -#: sql_help.c:2343 sql_help.c:2557 sql_help.c:3101 +#: sql_help.c:115 sql_help.c:933 sql_help.c:1604 sql_help.c:2169 +#: sql_help.c:2376 sql_help.c:2592 sql_help.c:3151 msgid "connlimit" msgstr "límite_conexiones" -#: sql_help.c:116 sql_help.c:2139 +#: sql_help.c:116 sql_help.c:2170 msgid "istemplate" msgstr "esplantilla" -#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1276 sql_help.c:1325 +#: sql_help.c:122 sql_help.c:607 sql_help.c:673 sql_help.c:1293 sql_help.c:1344 +#: sql_help.c:4044 msgid "new_tablespace" msgstr "nuevo_tablespace" #: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:544 sql_help.c:546 -#: sql_help.c:547 sql_help.c:863 sql_help.c:865 sql_help.c:866 sql_help.c:935 -#: sql_help.c:939 sql_help.c:942 sql_help.c:1003 sql_help.c:1005 -#: sql_help.c:1006 sql_help.c:1140 sql_help.c:1143 sql_help.c:1590 -#: sql_help.c:1594 sql_help.c:1597 sql_help.c:2308 sql_help.c:2508 -#: sql_help.c:3980 sql_help.c:4396 +#: sql_help.c:547 sql_help.c:867 sql_help.c:869 sql_help.c:870 sql_help.c:940 +#: sql_help.c:944 sql_help.c:947 sql_help.c:1008 sql_help.c:1010 +#: sql_help.c:1011 sql_help.c:1155 sql_help.c:1158 sql_help.c:1611 +#: sql_help.c:1615 sql_help.c:1618 sql_help.c:2340 sql_help.c:2542 +#: sql_help.c:4062 sql_help.c:4515 msgid "configuration_parameter" msgstr "parámetro_de_configuración" #: sql_help.c:125 sql_help.c:395 sql_help.c:466 sql_help.c:472 sql_help.c:484 -#: sql_help.c:545 sql_help.c:598 sql_help.c:677 sql_help.c:683 sql_help.c:864 -#: sql_help.c:887 sql_help.c:936 sql_help.c:1004 sql_help.c:1075 -#: sql_help.c:1117 sql_help.c:1120 sql_help.c:1125 sql_help.c:1141 -#: sql_help.c:1142 sql_help.c:1307 sql_help.c:1327 sql_help.c:1375 -#: sql_help.c:1397 sql_help.c:1454 sql_help.c:1538 sql_help.c:1591 -#: sql_help.c:1614 sql_help.c:2204 sql_help.c:2246 sql_help.c:2253 -#: sql_help.c:2262 sql_help.c:2309 sql_help.c:2310 sql_help.c:2372 -#: sql_help.c:2375 sql_help.c:2409 sql_help.c:2509 sql_help.c:2510 -#: sql_help.c:2527 sql_help.c:2648 sql_help.c:2678 sql_help.c:2783 -#: sql_help.c:2796 sql_help.c:2810 sql_help.c:2851 sql_help.c:2875 -#: sql_help.c:2892 sql_help.c:2919 sql_help.c:3122 sql_help.c:3789 -#: sql_help.c:4397 sql_help.c:4398 +#: sql_help.c:545 sql_help.c:599 sql_help.c:679 sql_help.c:687 sql_help.c:868 +#: sql_help.c:891 sql_help.c:941 sql_help.c:1009 sql_help.c:1080 +#: sql_help.c:1124 sql_help.c:1128 sql_help.c:1132 sql_help.c:1135 +#: sql_help.c:1140 sql_help.c:1156 sql_help.c:1157 sql_help.c:1324 +#: sql_help.c:1346 sql_help.c:1395 sql_help.c:1417 sql_help.c:1474 +#: sql_help.c:1558 sql_help.c:1612 sql_help.c:1635 sql_help.c:2235 +#: sql_help.c:2277 sql_help.c:2284 sql_help.c:2293 sql_help.c:2341 +#: sql_help.c:2342 sql_help.c:2405 sql_help.c:2408 sql_help.c:2442 +#: sql_help.c:2543 sql_help.c:2544 sql_help.c:2562 sql_help.c:2684 +#: sql_help.c:2723 sql_help.c:2829 sql_help.c:2842 sql_help.c:2856 +#: sql_help.c:2897 sql_help.c:2921 sql_help.c:2938 sql_help.c:2965 +#: sql_help.c:3172 sql_help.c:3866 sql_help.c:4516 sql_help.c:4517 msgid "value" msgstr "valor" @@ -4221,9 +4311,9 @@ msgstr "valor" msgid "target_role" msgstr "rol_destino" -#: sql_help.c:198 sql_help.c:2188 sql_help.c:2603 sql_help.c:2608 -#: sql_help.c:3735 sql_help.c:3742 sql_help.c:3756 sql_help.c:3762 -#: sql_help.c:4083 sql_help.c:4090 sql_help.c:4104 sql_help.c:4110 +#: sql_help.c:198 sql_help.c:2219 sql_help.c:2639 sql_help.c:2644 +#: sql_help.c:3799 sql_help.c:3808 sql_help.c:3827 sql_help.c:3836 +#: sql_help.c:4179 sql_help.c:4188 sql_help.c:4207 sql_help.c:4216 msgid "schema_name" msgstr "nombre_de_esquema" @@ -4237,30 +4327,31 @@ msgstr "donde grant_o_revoke_abreviado es uno de:" #: sql_help.c:201 sql_help.c:202 sql_help.c:203 sql_help.c:204 sql_help.c:205 #: sql_help.c:206 sql_help.c:207 sql_help.c:208 sql_help.c:209 sql_help.c:210 -#: sql_help.c:569 sql_help.c:605 sql_help.c:670 sql_help.c:810 sql_help.c:946 -#: sql_help.c:1275 sql_help.c:1601 sql_help.c:2346 sql_help.c:2347 -#: sql_help.c:2348 sql_help.c:2349 sql_help.c:2350 sql_help.c:2483 -#: sql_help.c:2560 sql_help.c:2561 sql_help.c:2562 sql_help.c:2563 -#: sql_help.c:2564 sql_help.c:3104 sql_help.c:3105 sql_help.c:3106 -#: sql_help.c:3107 sql_help.c:3108 sql_help.c:3768 sql_help.c:3772 -#: sql_help.c:4116 sql_help.c:4120 sql_help.c:4417 +#: sql_help.c:570 sql_help.c:606 sql_help.c:672 sql_help.c:814 sql_help.c:951 +#: sql_help.c:1292 sql_help.c:1622 sql_help.c:2379 sql_help.c:2380 +#: sql_help.c:2381 sql_help.c:2382 sql_help.c:2383 sql_help.c:2516 +#: sql_help.c:2595 sql_help.c:2596 sql_help.c:2597 sql_help.c:2598 +#: sql_help.c:2599 sql_help.c:3154 sql_help.c:3155 sql_help.c:3156 +#: sql_help.c:3157 sql_help.c:3158 sql_help.c:3845 sql_help.c:3849 +#: sql_help.c:4225 sql_help.c:4229 sql_help.c:4536 msgid "role_name" msgstr "nombre_de_rol" -#: sql_help.c:236 sql_help.c:459 sql_help.c:1291 sql_help.c:1293 -#: sql_help.c:1342 sql_help.c:1354 sql_help.c:1379 sql_help.c:1631 -#: sql_help.c:2158 sql_help.c:2162 sql_help.c:2265 sql_help.c:2270 -#: sql_help.c:2368 sql_help.c:2778 sql_help.c:2791 sql_help.c:2805 -#: sql_help.c:2814 sql_help.c:2826 sql_help.c:2855 sql_help.c:3820 -#: sql_help.c:3835 sql_help.c:3837 sql_help.c:4282 sql_help.c:4283 -#: sql_help.c:4292 sql_help.c:4333 sql_help.c:4334 sql_help.c:4335 -#: sql_help.c:4336 sql_help.c:4337 sql_help.c:4338 sql_help.c:4371 -#: sql_help.c:4372 sql_help.c:4377 sql_help.c:4382 sql_help.c:4521 -#: sql_help.c:4522 sql_help.c:4531 sql_help.c:4572 sql_help.c:4573 -#: sql_help.c:4574 sql_help.c:4575 sql_help.c:4576 sql_help.c:4577 -#: sql_help.c:4624 sql_help.c:4626 sql_help.c:4685 sql_help.c:4741 -#: sql_help.c:4742 sql_help.c:4751 sql_help.c:4792 sql_help.c:4793 -#: sql_help.c:4794 sql_help.c:4795 sql_help.c:4796 sql_help.c:4797 +#: sql_help.c:236 sql_help.c:459 sql_help.c:1308 sql_help.c:1310 +#: sql_help.c:1361 sql_help.c:1374 sql_help.c:1399 sql_help.c:1652 +#: sql_help.c:2189 sql_help.c:2193 sql_help.c:2296 sql_help.c:2301 +#: sql_help.c:2401 sql_help.c:2700 sql_help.c:2705 sql_help.c:2707 +#: sql_help.c:2824 sql_help.c:2837 sql_help.c:2851 sql_help.c:2860 +#: sql_help.c:2872 sql_help.c:2901 sql_help.c:3897 sql_help.c:3912 +#: sql_help.c:3914 sql_help.c:4393 sql_help.c:4394 sql_help.c:4403 +#: sql_help.c:4445 sql_help.c:4446 sql_help.c:4447 sql_help.c:4448 +#: sql_help.c:4449 sql_help.c:4450 sql_help.c:4490 sql_help.c:4491 +#: sql_help.c:4496 sql_help.c:4501 sql_help.c:4642 sql_help.c:4643 +#: sql_help.c:4652 sql_help.c:4694 sql_help.c:4695 sql_help.c:4696 +#: sql_help.c:4697 sql_help.c:4698 sql_help.c:4699 sql_help.c:4753 +#: sql_help.c:4755 sql_help.c:4816 sql_help.c:4874 sql_help.c:4875 +#: sql_help.c:4884 sql_help.c:4926 sql_help.c:4927 sql_help.c:4928 +#: sql_help.c:4929 sql_help.c:4930 sql_help.c:4931 msgid "expression" msgstr "expresión" @@ -4269,18 +4360,18 @@ msgid "domain_constraint" msgstr "restricción_de_dominio" #: sql_help.c:241 sql_help.c:243 sql_help.c:246 sql_help.c:474 sql_help.c:475 -#: sql_help.c:1268 sql_help.c:1313 sql_help.c:1314 sql_help.c:1315 -#: sql_help.c:1341 sql_help.c:1353 sql_help.c:1370 sql_help.c:1789 -#: sql_help.c:1791 sql_help.c:2161 sql_help.c:2264 sql_help.c:2269 -#: sql_help.c:2813 sql_help.c:2825 sql_help.c:3832 +#: sql_help.c:1285 sql_help.c:1332 sql_help.c:1333 sql_help.c:1334 +#: sql_help.c:1360 sql_help.c:1373 sql_help.c:1390 sql_help.c:1820 +#: sql_help.c:1822 sql_help.c:2192 sql_help.c:2295 sql_help.c:2300 +#: sql_help.c:2859 sql_help.c:2871 sql_help.c:3909 msgid "constraint_name" msgstr "nombre_restricción" -#: sql_help.c:244 sql_help.c:1269 +#: sql_help.c:244 sql_help.c:1286 msgid "new_constraint_name" msgstr "nuevo_nombre_restricción" -#: sql_help.c:317 sql_help.c:1073 +#: sql_help.c:317 sql_help.c:1078 msgid "new_version" msgstr "nueva_versión" @@ -4296,82 +4387,82 @@ msgstr "dondo objeto_miembro es:" #: sql_help.c:334 sql_help.c:335 sql_help.c:340 sql_help.c:344 sql_help.c:346 #: sql_help.c:348 sql_help.c:357 sql_help.c:358 sql_help.c:359 sql_help.c:360 #: sql_help.c:361 sql_help.c:362 sql_help.c:363 sql_help.c:364 sql_help.c:367 -#: sql_help.c:368 sql_help.c:1781 sql_help.c:1786 sql_help.c:1793 -#: sql_help.c:1794 sql_help.c:1795 sql_help.c:1796 sql_help.c:1797 -#: sql_help.c:1798 sql_help.c:1799 sql_help.c:1804 sql_help.c:1806 -#: sql_help.c:1810 sql_help.c:1812 sql_help.c:1816 sql_help.c:1821 -#: sql_help.c:1822 sql_help.c:1829 sql_help.c:1830 sql_help.c:1831 -#: sql_help.c:1832 sql_help.c:1833 sql_help.c:1834 sql_help.c:1835 -#: sql_help.c:1836 sql_help.c:1837 sql_help.c:1838 sql_help.c:1839 -#: sql_help.c:1844 sql_help.c:1845 sql_help.c:4189 sql_help.c:4194 -#: sql_help.c:4195 sql_help.c:4196 sql_help.c:4197 sql_help.c:4203 -#: sql_help.c:4204 sql_help.c:4209 sql_help.c:4210 sql_help.c:4215 -#: sql_help.c:4216 sql_help.c:4217 sql_help.c:4218 sql_help.c:4219 -#: sql_help.c:4220 +#: sql_help.c:368 sql_help.c:1812 sql_help.c:1817 sql_help.c:1824 +#: sql_help.c:1825 sql_help.c:1826 sql_help.c:1827 sql_help.c:1828 +#: sql_help.c:1829 sql_help.c:1830 sql_help.c:1835 sql_help.c:1837 +#: sql_help.c:1841 sql_help.c:1843 sql_help.c:1847 sql_help.c:1852 +#: sql_help.c:1853 sql_help.c:1860 sql_help.c:1861 sql_help.c:1862 +#: sql_help.c:1863 sql_help.c:1864 sql_help.c:1865 sql_help.c:1866 +#: sql_help.c:1867 sql_help.c:1868 sql_help.c:1869 sql_help.c:1870 +#: sql_help.c:1875 sql_help.c:1876 sql_help.c:4298 sql_help.c:4303 +#: sql_help.c:4304 sql_help.c:4305 sql_help.c:4306 sql_help.c:4312 +#: sql_help.c:4313 sql_help.c:4318 sql_help.c:4319 sql_help.c:4324 +#: sql_help.c:4325 sql_help.c:4326 sql_help.c:4327 sql_help.c:4328 +#: sql_help.c:4329 msgid "object_name" msgstr "nombre_de_objeto" -#: sql_help.c:326 sql_help.c:1782 sql_help.c:4192 +#: sql_help.c:326 sql_help.c:1813 sql_help.c:4301 msgid "aggregate_name" msgstr "nombre_función_agregación" -#: sql_help.c:328 sql_help.c:1784 sql_help.c:2068 sql_help.c:2072 -#: sql_help.c:2074 sql_help.c:3231 +#: sql_help.c:328 sql_help.c:1815 sql_help.c:2099 sql_help.c:2103 +#: sql_help.c:2105 sql_help.c:3281 msgid "source_type" msgstr "tipo_fuente" -#: sql_help.c:329 sql_help.c:1785 sql_help.c:2069 sql_help.c:2073 -#: sql_help.c:2075 sql_help.c:3232 +#: sql_help.c:329 sql_help.c:1816 sql_help.c:2100 sql_help.c:2104 +#: sql_help.c:2106 sql_help.c:3282 msgid "target_type" msgstr "tipo_destino" -#: sql_help.c:336 sql_help.c:774 sql_help.c:1800 sql_help.c:2070 -#: sql_help.c:2111 sql_help.c:2176 sql_help.c:2426 sql_help.c:2457 -#: sql_help.c:2995 sql_help.c:4100 sql_help.c:4198 sql_help.c:4311 -#: sql_help.c:4315 sql_help.c:4319 sql_help.c:4322 sql_help.c:4550 -#: sql_help.c:4554 sql_help.c:4558 sql_help.c:4561 sql_help.c:4770 -#: sql_help.c:4774 sql_help.c:4778 sql_help.c:4781 +#: sql_help.c:336 sql_help.c:778 sql_help.c:1831 sql_help.c:2101 +#: sql_help.c:2142 sql_help.c:2207 sql_help.c:2459 sql_help.c:2490 +#: sql_help.c:3041 sql_help.c:4203 sql_help.c:4307 sql_help.c:4422 +#: sql_help.c:4426 sql_help.c:4430 sql_help.c:4433 sql_help.c:4671 +#: sql_help.c:4675 sql_help.c:4679 sql_help.c:4682 sql_help.c:4903 +#: sql_help.c:4907 sql_help.c:4911 sql_help.c:4914 msgid "function_name" msgstr "nombre_de_función" -#: sql_help.c:341 sql_help.c:767 sql_help.c:1807 sql_help.c:2450 +#: sql_help.c:341 sql_help.c:771 sql_help.c:1838 sql_help.c:2483 msgid "operator_name" msgstr "nombre_operador" -#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1808 -#: sql_help.c:2427 sql_help.c:3355 +#: sql_help.c:342 sql_help.c:707 sql_help.c:711 sql_help.c:715 sql_help.c:1839 +#: sql_help.c:2460 sql_help.c:3405 msgid "left_type" msgstr "tipo_izq" -#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1809 -#: sql_help.c:2428 sql_help.c:3356 +#: sql_help.c:343 sql_help.c:708 sql_help.c:712 sql_help.c:716 sql_help.c:1840 +#: sql_help.c:2461 sql_help.c:3406 msgid "right_type" msgstr "tipo_der" -#: sql_help.c:345 sql_help.c:347 sql_help.c:730 sql_help.c:733 sql_help.c:736 -#: sql_help.c:765 sql_help.c:777 sql_help.c:785 sql_help.c:788 sql_help.c:791 -#: sql_help.c:1359 sql_help.c:1811 sql_help.c:1813 sql_help.c:2447 -#: sql_help.c:2468 sql_help.c:2831 sql_help.c:3365 sql_help.c:3374 +#: sql_help.c:345 sql_help.c:347 sql_help.c:734 sql_help.c:737 sql_help.c:740 +#: sql_help.c:769 sql_help.c:781 sql_help.c:789 sql_help.c:792 sql_help.c:795 +#: sql_help.c:1379 sql_help.c:1842 sql_help.c:1844 sql_help.c:2480 +#: sql_help.c:2501 sql_help.c:2877 sql_help.c:3415 sql_help.c:3424 msgid "index_method" msgstr "método_de_índice" -#: sql_help.c:349 sql_help.c:1817 sql_help.c:4205 +#: sql_help.c:349 sql_help.c:1848 sql_help.c:4314 msgid "procedure_name" msgstr "nombre_de_procedimiento" -#: sql_help.c:353 sql_help.c:1823 sql_help.c:3752 sql_help.c:4211 +#: sql_help.c:353 sql_help.c:1854 sql_help.c:3823 sql_help.c:4320 msgid "routine_name" msgstr "nombre_de_rutina" -#: sql_help.c:365 sql_help.c:1331 sql_help.c:1840 sql_help.c:2304 -#: sql_help.c:2507 sql_help.c:2786 sql_help.c:2962 sql_help.c:3536 -#: sql_help.c:3766 sql_help.c:4114 +#: sql_help.c:365 sql_help.c:1350 sql_help.c:1871 sql_help.c:2336 +#: sql_help.c:2541 sql_help.c:2832 sql_help.c:3008 sql_help.c:3586 +#: sql_help.c:3842 sql_help.c:4222 msgid "type_name" msgstr "nombre_de_tipo" -#: sql_help.c:366 sql_help.c:1841 sql_help.c:2303 sql_help.c:2506 -#: sql_help.c:2963 sql_help.c:3189 sql_help.c:3537 sql_help.c:3758 -#: sql_help.c:4106 +#: sql_help.c:366 sql_help.c:1872 sql_help.c:2335 sql_help.c:2540 +#: sql_help.c:3009 sql_help.c:3239 sql_help.c:3587 sql_help.c:3830 +#: sql_help.c:4210 msgid "lang_name" msgstr "nombre_lenguaje" @@ -4379,1906 +4470,1970 @@ msgstr "nombre_lenguaje" msgid "and aggregate_signature is:" msgstr "y signatura_func_agregación es:" -#: sql_help.c:392 sql_help.c:1935 sql_help.c:2201 +#: sql_help.c:392 sql_help.c:1966 sql_help.c:2232 msgid "handler_function" msgstr "función_manejadora" -#: sql_help.c:393 sql_help.c:2202 +#: sql_help.c:393 sql_help.c:2233 msgid "validator_function" msgstr "función_validadora" -#: sql_help.c:441 sql_help.c:519 sql_help.c:659 sql_help.c:841 sql_help.c:979 -#: sql_help.c:1263 sql_help.c:1529 +#: sql_help.c:441 sql_help.c:519 sql_help.c:661 sql_help.c:845 sql_help.c:984 +#: sql_help.c:1280 sql_help.c:1549 msgid "action" msgstr "acción" #: sql_help.c:443 sql_help.c:450 sql_help.c:454 sql_help.c:455 sql_help.c:458 #: sql_help.c:460 sql_help.c:461 sql_help.c:462 sql_help.c:464 sql_help.c:467 -#: sql_help.c:469 sql_help.c:470 sql_help.c:663 sql_help.c:673 sql_help.c:675 -#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1265 -#: sql_help.c:1283 sql_help.c:1287 sql_help.c:1288 sql_help.c:1292 -#: sql_help.c:1294 sql_help.c:1295 sql_help.c:1296 sql_help.c:1297 -#: sql_help.c:1299 sql_help.c:1302 sql_help.c:1303 sql_help.c:1305 -#: sql_help.c:1308 sql_help.c:1310 sql_help.c:1355 sql_help.c:1357 -#: sql_help.c:1364 sql_help.c:1373 sql_help.c:1378 sql_help.c:1630 -#: sql_help.c:1633 sql_help.c:1637 sql_help.c:1673 sql_help.c:1788 -#: sql_help.c:1901 sql_help.c:1907 sql_help.c:1920 sql_help.c:1921 -#: sql_help.c:1922 sql_help.c:2243 sql_help.c:2256 sql_help.c:2301 -#: sql_help.c:2367 sql_help.c:2373 sql_help.c:2406 sql_help.c:2633 -#: sql_help.c:2661 sql_help.c:2662 sql_help.c:2769 sql_help.c:2777 -#: sql_help.c:2787 sql_help.c:2790 sql_help.c:2800 sql_help.c:2804 -#: sql_help.c:2827 sql_help.c:2829 sql_help.c:2836 sql_help.c:2849 -#: sql_help.c:2854 sql_help.c:2872 sql_help.c:2998 sql_help.c:3134 -#: sql_help.c:3737 sql_help.c:3738 sql_help.c:3819 sql_help.c:3834 -#: sql_help.c:3836 sql_help.c:3838 sql_help.c:4085 sql_help.c:4086 -#: sql_help.c:4191 sql_help.c:4342 sql_help.c:4581 sql_help.c:4623 -#: sql_help.c:4625 sql_help.c:4627 sql_help.c:4673 sql_help.c:4801 +#: sql_help.c:469 sql_help.c:470 sql_help.c:665 sql_help.c:675 sql_help.c:677 +#: sql_help.c:680 sql_help.c:682 sql_help.c:683 sql_help.c:1060 sql_help.c:1282 +#: sql_help.c:1300 sql_help.c:1304 sql_help.c:1305 sql_help.c:1309 +#: sql_help.c:1311 sql_help.c:1312 sql_help.c:1313 sql_help.c:1314 +#: sql_help.c:1316 sql_help.c:1319 sql_help.c:1320 sql_help.c:1322 +#: sql_help.c:1325 sql_help.c:1327 sql_help.c:1328 sql_help.c:1375 +#: sql_help.c:1377 sql_help.c:1384 sql_help.c:1393 sql_help.c:1398 +#: sql_help.c:1651 sql_help.c:1654 sql_help.c:1658 sql_help.c:1694 +#: sql_help.c:1819 sql_help.c:1932 sql_help.c:1938 sql_help.c:1951 +#: sql_help.c:1952 sql_help.c:1953 sql_help.c:2274 sql_help.c:2287 +#: sql_help.c:2333 sql_help.c:2400 sql_help.c:2406 sql_help.c:2439 +#: sql_help.c:2669 sql_help.c:2704 sql_help.c:2706 sql_help.c:2814 +#: sql_help.c:2823 sql_help.c:2833 sql_help.c:2836 sql_help.c:2846 +#: sql_help.c:2850 sql_help.c:2873 sql_help.c:2875 sql_help.c:2882 +#: sql_help.c:2895 sql_help.c:2900 sql_help.c:2918 sql_help.c:3044 +#: sql_help.c:3184 sql_help.c:3802 sql_help.c:3803 sql_help.c:3896 +#: sql_help.c:3911 sql_help.c:3913 sql_help.c:3915 sql_help.c:4182 +#: sql_help.c:4183 sql_help.c:4300 sql_help.c:4454 sql_help.c:4460 +#: sql_help.c:4462 sql_help.c:4703 sql_help.c:4709 sql_help.c:4711 +#: sql_help.c:4752 sql_help.c:4754 sql_help.c:4756 sql_help.c:4804 +#: sql_help.c:4935 sql_help.c:4941 sql_help.c:4943 msgid "column_name" msgstr "nombre_de_columna" -#: sql_help.c:444 sql_help.c:664 sql_help.c:1266 sql_help.c:1638 +#: sql_help.c:444 sql_help.c:666 sql_help.c:1283 sql_help.c:1659 msgid "new_column_name" msgstr "nuevo_nombre_de_columna" -#: sql_help.c:449 sql_help.c:540 sql_help.c:672 sql_help.c:862 sql_help.c:1000 -#: sql_help.c:1282 sql_help.c:1539 +#: sql_help.c:449 sql_help.c:540 sql_help.c:674 sql_help.c:866 sql_help.c:1005 +#: sql_help.c:1299 sql_help.c:1559 msgid "where action is one of:" msgstr "donde acción es una de:" -#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1284 -#: sql_help.c:1289 sql_help.c:1541 sql_help.c:1545 sql_help.c:2156 -#: sql_help.c:2244 sql_help.c:2446 sql_help.c:2626 sql_help.c:2770 -#: sql_help.c:3043 sql_help.c:3921 +#: sql_help.c:451 sql_help.c:456 sql_help.c:1052 sql_help.c:1301 +#: sql_help.c:1306 sql_help.c:1561 sql_help.c:1565 sql_help.c:2187 +#: sql_help.c:2275 sql_help.c:2479 sql_help.c:2662 sql_help.c:2815 +#: sql_help.c:3091 sql_help.c:3998 msgid "data_type" msgstr "tipo_de_dato" -#: sql_help.c:452 sql_help.c:457 sql_help.c:1285 sql_help.c:1290 -#: sql_help.c:1542 sql_help.c:1546 sql_help.c:2157 sql_help.c:2247 -#: sql_help.c:2369 sql_help.c:2771 sql_help.c:2779 sql_help.c:2792 -#: sql_help.c:2806 sql_help.c:3044 sql_help.c:3050 sql_help.c:3829 +#: sql_help.c:452 sql_help.c:457 sql_help.c:1302 sql_help.c:1307 +#: sql_help.c:1562 sql_help.c:1566 sql_help.c:2188 sql_help.c:2278 +#: sql_help.c:2402 sql_help.c:2816 sql_help.c:2825 sql_help.c:2838 +#: sql_help.c:2852 sql_help.c:3092 sql_help.c:3098 sql_help.c:3906 msgid "collation" msgstr "ordenamiento" -#: sql_help.c:453 sql_help.c:1286 sql_help.c:2248 sql_help.c:2257 -#: sql_help.c:2772 sql_help.c:2788 sql_help.c:2801 +#: sql_help.c:453 sql_help.c:1303 sql_help.c:2279 sql_help.c:2288 +#: sql_help.c:2818 sql_help.c:2834 sql_help.c:2847 msgid "column_constraint" msgstr "restricción_de_columna" -#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1304 sql_help.c:4670 +#: sql_help.c:463 sql_help.c:604 sql_help.c:676 sql_help.c:1321 sql_help.c:4801 msgid "integer" msgstr "entero" -#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1306 -#: sql_help.c:1309 +#: sql_help.c:465 sql_help.c:468 sql_help.c:678 sql_help.c:681 sql_help.c:1323 +#: sql_help.c:1326 msgid "attribute_option" msgstr "opción_de_atributo" -#: sql_help.c:473 sql_help.c:1311 sql_help.c:2249 sql_help.c:2258 -#: sql_help.c:2773 sql_help.c:2789 sql_help.c:2802 +#: sql_help.c:473 sql_help.c:1330 sql_help.c:2280 sql_help.c:2289 +#: sql_help.c:2819 sql_help.c:2835 sql_help.c:2848 msgid "table_constraint" msgstr "restricción_de_tabla" -#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1316 -#: sql_help.c:1317 sql_help.c:1318 sql_help.c:1319 sql_help.c:1842 +#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1335 +#: sql_help.c:1336 sql_help.c:1337 sql_help.c:1338 sql_help.c:1873 msgid "trigger_name" msgstr "nombre_disparador" -#: sql_help.c:480 sql_help.c:481 sql_help.c:1329 sql_help.c:1330 -#: sql_help.c:2250 sql_help.c:2255 sql_help.c:2776 sql_help.c:2799 +#: sql_help.c:480 sql_help.c:481 sql_help.c:1348 sql_help.c:1349 +#: sql_help.c:2281 sql_help.c:2286 sql_help.c:2822 sql_help.c:2845 msgid "parent_table" msgstr "tabla_padre" -#: sql_help.c:539 sql_help.c:595 sql_help.c:661 sql_help.c:861 sql_help.c:999 -#: sql_help.c:1498 sql_help.c:2187 +#: sql_help.c:539 sql_help.c:596 sql_help.c:663 sql_help.c:865 sql_help.c:1004 +#: sql_help.c:1518 sql_help.c:2218 msgid "extension_name" msgstr "nombre_de_extensión" -#: sql_help.c:541 sql_help.c:1001 sql_help.c:2305 +#: sql_help.c:541 sql_help.c:1006 sql_help.c:2337 msgid "execution_cost" msgstr "costo_de_ejecución" -#: sql_help.c:542 sql_help.c:1002 sql_help.c:2306 +#: sql_help.c:542 sql_help.c:1007 sql_help.c:2338 msgid "result_rows" msgstr "núm_de_filas" -#: sql_help.c:543 sql_help.c:2307 +#: sql_help.c:543 sql_help.c:2339 msgid "support_function" msgstr "función_de_soporte" -#: sql_help.c:564 sql_help.c:566 sql_help.c:925 sql_help.c:933 sql_help.c:937 -#: sql_help.c:940 sql_help.c:943 sql_help.c:1580 sql_help.c:1588 -#: sql_help.c:1592 sql_help.c:1595 sql_help.c:1598 sql_help.c:2604 -#: sql_help.c:2606 sql_help.c:2609 sql_help.c:2610 sql_help.c:3736 -#: sql_help.c:3740 sql_help.c:3743 sql_help.c:3745 sql_help.c:3747 -#: sql_help.c:3749 sql_help.c:3751 sql_help.c:3757 sql_help.c:3759 -#: sql_help.c:3761 sql_help.c:3763 sql_help.c:3765 sql_help.c:3767 -#: sql_help.c:3769 sql_help.c:3770 sql_help.c:4084 sql_help.c:4088 -#: sql_help.c:4091 sql_help.c:4093 sql_help.c:4095 sql_help.c:4097 -#: sql_help.c:4099 sql_help.c:4105 sql_help.c:4107 sql_help.c:4109 -#: sql_help.c:4111 sql_help.c:4113 sql_help.c:4115 sql_help.c:4117 -#: sql_help.c:4118 +#: sql_help.c:565 sql_help.c:567 sql_help.c:930 sql_help.c:938 sql_help.c:942 +#: sql_help.c:945 sql_help.c:948 sql_help.c:1601 sql_help.c:1609 +#: sql_help.c:1613 sql_help.c:1616 sql_help.c:1619 sql_help.c:2640 +#: sql_help.c:2642 sql_help.c:2645 sql_help.c:2646 sql_help.c:3800 +#: sql_help.c:3801 sql_help.c:3805 sql_help.c:3806 sql_help.c:3809 +#: sql_help.c:3810 sql_help.c:3812 sql_help.c:3813 sql_help.c:3815 +#: sql_help.c:3816 sql_help.c:3818 sql_help.c:3819 sql_help.c:3821 +#: sql_help.c:3822 sql_help.c:3828 sql_help.c:3829 sql_help.c:3831 +#: sql_help.c:3832 sql_help.c:3834 sql_help.c:3835 sql_help.c:3837 +#: sql_help.c:3838 sql_help.c:3840 sql_help.c:3841 sql_help.c:3843 +#: sql_help.c:3844 sql_help.c:3846 sql_help.c:3847 sql_help.c:4180 +#: sql_help.c:4181 sql_help.c:4185 sql_help.c:4186 sql_help.c:4189 +#: sql_help.c:4190 sql_help.c:4192 sql_help.c:4193 sql_help.c:4195 +#: sql_help.c:4196 sql_help.c:4198 sql_help.c:4199 sql_help.c:4201 +#: sql_help.c:4202 sql_help.c:4208 sql_help.c:4209 sql_help.c:4211 +#: sql_help.c:4212 sql_help.c:4214 sql_help.c:4215 sql_help.c:4217 +#: sql_help.c:4218 sql_help.c:4220 sql_help.c:4221 sql_help.c:4223 +#: sql_help.c:4224 sql_help.c:4226 sql_help.c:4227 msgid "role_specification" msgstr "especificación_de_rol" -#: sql_help.c:565 sql_help.c:567 sql_help.c:1611 sql_help.c:2130 -#: sql_help.c:2612 sql_help.c:3119 sql_help.c:3570 sql_help.c:4427 +#: sql_help.c:566 sql_help.c:568 sql_help.c:1632 sql_help.c:2161 +#: sql_help.c:2648 sql_help.c:3169 sql_help.c:3620 sql_help.c:4546 msgid "user_name" msgstr "nombre_de_usuario" -#: sql_help.c:568 sql_help.c:945 sql_help.c:1600 sql_help.c:2611 -#: sql_help.c:3771 sql_help.c:4119 +#: sql_help.c:569 sql_help.c:950 sql_help.c:1621 sql_help.c:2647 +#: sql_help.c:3848 sql_help.c:4228 msgid "where role_specification can be:" msgstr "donde especificación_de_rol puede ser:" -#: sql_help.c:570 +#: sql_help.c:571 msgid "group_name" msgstr "nombre_de_grupo" -#: sql_help.c:591 sql_help.c:1376 sql_help.c:2136 sql_help.c:2376 -#: sql_help.c:2410 sql_help.c:2784 sql_help.c:2797 sql_help.c:2811 -#: sql_help.c:2852 sql_help.c:2876 sql_help.c:2888 sql_help.c:3764 -#: sql_help.c:4112 +#: sql_help.c:592 sql_help.c:1396 sql_help.c:2167 sql_help.c:2409 +#: sql_help.c:2443 sql_help.c:2830 sql_help.c:2843 sql_help.c:2857 +#: sql_help.c:2898 sql_help.c:2922 sql_help.c:2934 sql_help.c:3839 +#: sql_help.c:4219 msgid "tablespace_name" msgstr "nombre_de_tablespace" -#: sql_help.c:593 sql_help.c:681 sql_help.c:1324 sql_help.c:1333 -#: sql_help.c:1371 sql_help.c:1722 +#: sql_help.c:594 sql_help.c:685 sql_help.c:1343 sql_help.c:1352 +#: sql_help.c:1391 sql_help.c:1748 sql_help.c:1751 msgid "index_name" msgstr "nombre_índice" -#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1326 -#: sql_help.c:1328 sql_help.c:1374 sql_help.c:2374 sql_help.c:2408 -#: sql_help.c:2782 sql_help.c:2795 sql_help.c:2809 sql_help.c:2850 -#: sql_help.c:2874 +#: sql_help.c:598 sql_help.c:601 sql_help.c:686 sql_help.c:688 sql_help.c:1345 +#: sql_help.c:1347 sql_help.c:1394 sql_help.c:2407 sql_help.c:2441 +#: sql_help.c:2828 sql_help.c:2841 sql_help.c:2855 sql_help.c:2896 +#: sql_help.c:2920 msgid "storage_parameter" msgstr "parámetro_de_almacenamiento" -#: sql_help.c:602 +#: sql_help.c:603 msgid "column_number" msgstr "número_de_columna" -#: sql_help.c:626 sql_help.c:1805 sql_help.c:4202 +#: sql_help.c:627 sql_help.c:1836 sql_help.c:4311 msgid "large_object_oid" msgstr "oid_de_objeto_grande" -#: sql_help.c:713 sql_help.c:2431 +#: sql_help.c:684 sql_help.c:1329 sql_help.c:1367 sql_help.c:2817 +#, fuzzy +#| msgid "sampling_method" +msgid "compression_method" +msgstr "método_de_sampleo" + +#: sql_help.c:717 sql_help.c:2464 msgid "res_proc" msgstr "proc_res" -#: sql_help.c:714 sql_help.c:2432 +#: sql_help.c:718 sql_help.c:2465 msgid "join_proc" msgstr "proc_join" -#: sql_help.c:766 sql_help.c:778 sql_help.c:2449 +#: sql_help.c:770 sql_help.c:782 sql_help.c:2482 msgid "strategy_number" msgstr "número_de_estrategia" -#: sql_help.c:768 sql_help.c:769 sql_help.c:772 sql_help.c:773 sql_help.c:779 -#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2451 sql_help.c:2452 -#: sql_help.c:2455 sql_help.c:2456 +#: sql_help.c:772 sql_help.c:773 sql_help.c:776 sql_help.c:777 sql_help.c:783 +#: sql_help.c:784 sql_help.c:786 sql_help.c:787 sql_help.c:2484 sql_help.c:2485 +#: sql_help.c:2488 sql_help.c:2489 msgid "op_type" msgstr "tipo_op" -#: sql_help.c:770 sql_help.c:2453 +#: sql_help.c:774 sql_help.c:2486 msgid "sort_family_name" msgstr "nombre_familia_ordenamiento" -#: sql_help.c:771 sql_help.c:781 sql_help.c:2454 +#: sql_help.c:775 sql_help.c:785 sql_help.c:2487 msgid "support_number" msgstr "número_de_soporte" -#: sql_help.c:775 sql_help.c:2071 sql_help.c:2458 sql_help.c:2965 -#: sql_help.c:2967 +#: sql_help.c:779 sql_help.c:2102 sql_help.c:2491 sql_help.c:3011 +#: sql_help.c:3013 msgid "argument_type" msgstr "tipo_argumento" -#: sql_help.c:806 sql_help.c:809 sql_help.c:880 sql_help.c:882 sql_help.c:884 -#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1494 sql_help.c:1497 -#: sql_help.c:1672 sql_help.c:1721 sql_help.c:1790 sql_help.c:1815 -#: sql_help.c:1828 sql_help.c:1843 sql_help.c:1900 sql_help.c:1906 -#: sql_help.c:2242 sql_help.c:2254 sql_help.c:2365 sql_help.c:2405 -#: sql_help.c:2482 sql_help.c:2525 sql_help.c:2581 sql_help.c:2632 -#: sql_help.c:2663 sql_help.c:2768 sql_help.c:2785 sql_help.c:2798 -#: sql_help.c:2871 sql_help.c:2991 sql_help.c:3168 sql_help.c:3391 -#: sql_help.c:3440 sql_help.c:3546 sql_help.c:3734 sql_help.c:3739 -#: sql_help.c:3785 sql_help.c:3817 sql_help.c:4082 sql_help.c:4087 -#: sql_help.c:4190 sql_help.c:4297 sql_help.c:4299 sql_help.c:4348 -#: sql_help.c:4387 sql_help.c:4536 sql_help.c:4538 sql_help.c:4587 -#: sql_help.c:4621 sql_help.c:4672 sql_help.c:4756 sql_help.c:4758 -#: sql_help.c:4807 +#: sql_help.c:810 sql_help.c:813 sql_help.c:884 sql_help.c:886 sql_help.c:888 +#: sql_help.c:1020 sql_help.c:1059 sql_help.c:1514 sql_help.c:1517 +#: sql_help.c:1693 sql_help.c:1747 sql_help.c:1750 sql_help.c:1821 +#: sql_help.c:1846 sql_help.c:1859 sql_help.c:1874 sql_help.c:1931 +#: sql_help.c:1937 sql_help.c:2273 sql_help.c:2285 sql_help.c:2398 +#: sql_help.c:2438 sql_help.c:2515 sql_help.c:2560 sql_help.c:2616 +#: sql_help.c:2668 sql_help.c:2701 sql_help.c:2708 sql_help.c:2813 +#: sql_help.c:2831 sql_help.c:2844 sql_help.c:2917 sql_help.c:3037 +#: sql_help.c:3218 sql_help.c:3441 sql_help.c:3490 sql_help.c:3596 +#: sql_help.c:3798 sql_help.c:3804 sql_help.c:3862 sql_help.c:3894 +#: sql_help.c:4178 sql_help.c:4184 sql_help.c:4299 sql_help.c:4408 +#: sql_help.c:4410 sql_help.c:4467 sql_help.c:4506 sql_help.c:4657 +#: sql_help.c:4659 sql_help.c:4716 sql_help.c:4750 sql_help.c:4803 +#: sql_help.c:4889 sql_help.c:4891 sql_help.c:4948 msgid "table_name" msgstr "nombre_de_tabla" -#: sql_help.c:811 sql_help.c:2484 +#: sql_help.c:815 sql_help.c:2517 msgid "using_expression" msgstr "expresión_using" -#: sql_help.c:812 sql_help.c:2485 +#: sql_help.c:816 sql_help.c:2518 msgid "check_expression" msgstr "expresión_check" -#: sql_help.c:886 sql_help.c:2526 +#: sql_help.c:890 sql_help.c:2561 msgid "publication_parameter" msgstr "parámetro_de_publicación" -#: sql_help.c:929 sql_help.c:1584 sql_help.c:2344 sql_help.c:2558 -#: sql_help.c:3102 +#: sql_help.c:934 sql_help.c:1605 sql_help.c:2377 sql_help.c:2593 +#: sql_help.c:3152 msgid "password" msgstr "contraseña" -#: sql_help.c:930 sql_help.c:1585 sql_help.c:2345 sql_help.c:2559 -#: sql_help.c:3103 +#: sql_help.c:935 sql_help.c:1606 sql_help.c:2378 sql_help.c:2594 +#: sql_help.c:3153 msgid "timestamp" msgstr "fecha_hora" -#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1589 -#: sql_help.c:1593 sql_help.c:1596 sql_help.c:1599 sql_help.c:3744 -#: sql_help.c:4092 +#: sql_help.c:939 sql_help.c:943 sql_help.c:946 sql_help.c:949 sql_help.c:1610 +#: sql_help.c:1614 sql_help.c:1617 sql_help.c:1620 sql_help.c:3811 +#: sql_help.c:4191 msgid "database_name" msgstr "nombre_de_base_de_datos" -#: sql_help.c:1048 sql_help.c:2627 +#: sql_help.c:1053 sql_help.c:2663 msgid "increment" msgstr "incremento" -#: sql_help.c:1049 sql_help.c:2628 +#: sql_help.c:1054 sql_help.c:2664 msgid "minvalue" msgstr "valormin" -#: sql_help.c:1050 sql_help.c:2629 +#: sql_help.c:1055 sql_help.c:2665 msgid "maxvalue" msgstr "valormax" -#: sql_help.c:1051 sql_help.c:2630 sql_help.c:4295 sql_help.c:4385 -#: sql_help.c:4534 sql_help.c:4689 sql_help.c:4754 +#: sql_help.c:1056 sql_help.c:2666 sql_help.c:4406 sql_help.c:4504 +#: sql_help.c:4655 sql_help.c:4820 sql_help.c:4887 msgid "start" msgstr "inicio" -#: sql_help.c:1052 sql_help.c:1301 +#: sql_help.c:1057 sql_help.c:1318 msgid "restart" msgstr "reinicio" -#: sql_help.c:1053 sql_help.c:2631 +#: sql_help.c:1058 sql_help.c:2667 msgid "cache" msgstr "cache" -#: sql_help.c:1097 +#: sql_help.c:1102 msgid "new_target" msgstr "nuevo_valor" -#: sql_help.c:1113 sql_help.c:2675 +#: sql_help.c:1120 sql_help.c:2720 msgid "conninfo" msgstr "conninfo" -#: sql_help.c:1115 sql_help.c:2676 +#: sql_help.c:1122 sql_help.c:1126 sql_help.c:1130 sql_help.c:2721 msgid "publication_name" msgstr "nombre_de_publicación" -#: sql_help.c:1116 +#: sql_help.c:1123 sql_help.c:1127 sql_help.c:1131 msgid "set_publication_option" msgstr "opción_de_conjunto_de_publicación" -#: sql_help.c:1119 +#: sql_help.c:1134 msgid "refresh_option" msgstr "opción_refresh" -#: sql_help.c:1124 sql_help.c:2677 +#: sql_help.c:1139 sql_help.c:2722 msgid "subscription_parameter" msgstr "parámetro_de_suscripción" -#: sql_help.c:1278 sql_help.c:1281 +#: sql_help.c:1295 sql_help.c:1298 msgid "partition_name" msgstr "nombre_de_partición" -#: sql_help.c:1279 sql_help.c:2259 sql_help.c:2803 +#: sql_help.c:1296 sql_help.c:2290 sql_help.c:2849 msgid "partition_bound_spec" msgstr "borde_de_partición" -#: sql_help.c:1298 sql_help.c:1345 sql_help.c:2817 +#: sql_help.c:1315 sql_help.c:1364 sql_help.c:2863 msgid "sequence_options" msgstr "opciones_de_secuencia" -#: sql_help.c:1300 +#: sql_help.c:1317 msgid "sequence_option" msgstr "opción_de_secuencia" -#: sql_help.c:1312 +#: sql_help.c:1331 msgid "table_constraint_using_index" msgstr "restricción_de_tabla_con_índice" -#: sql_help.c:1320 sql_help.c:1321 sql_help.c:1322 sql_help.c:1323 +#: sql_help.c:1339 sql_help.c:1340 sql_help.c:1341 sql_help.c:1342 msgid "rewrite_rule_name" msgstr "nombre_regla_de_reescritura" -#: sql_help.c:1334 sql_help.c:2842 +#: sql_help.c:1353 sql_help.c:2888 msgid "and partition_bound_spec is:" msgstr "y borde_de_partición es:" -#: sql_help.c:1335 sql_help.c:1336 sql_help.c:1337 sql_help.c:2843 -#: sql_help.c:2844 sql_help.c:2845 +#: sql_help.c:1354 sql_help.c:1355 sql_help.c:1356 sql_help.c:2889 +#: sql_help.c:2890 sql_help.c:2891 msgid "partition_bound_expr" msgstr "expresión_de_borde_de_partición" -#: sql_help.c:1338 sql_help.c:1339 sql_help.c:2846 sql_help.c:2847 +#: sql_help.c:1357 sql_help.c:1358 sql_help.c:2892 sql_help.c:2893 msgid "numeric_literal" msgstr "literal_numérico" -#: sql_help.c:1340 +#: sql_help.c:1359 msgid "and column_constraint is:" msgstr "donde restricción_de_columna es:" -#: sql_help.c:1343 sql_help.c:2266 sql_help.c:2299 sql_help.c:2505 -#: sql_help.c:2815 +#: sql_help.c:1362 sql_help.c:2297 sql_help.c:2331 sql_help.c:2539 +#: sql_help.c:2861 msgid "default_expr" msgstr "expr_por_omisión" -#: sql_help.c:1344 sql_help.c:2267 sql_help.c:2816 +#: sql_help.c:1363 sql_help.c:2298 sql_help.c:2862 msgid "generation_expr" msgstr "expr_de_generación" -#: sql_help.c:1346 sql_help.c:1347 sql_help.c:1356 sql_help.c:1358 -#: sql_help.c:1362 sql_help.c:2818 sql_help.c:2819 sql_help.c:2828 -#: sql_help.c:2830 sql_help.c:2834 +#: sql_help.c:1365 sql_help.c:1366 sql_help.c:1376 sql_help.c:1378 +#: sql_help.c:1382 sql_help.c:2864 sql_help.c:2865 sql_help.c:2874 +#: sql_help.c:2876 sql_help.c:2880 msgid "index_parameters" msgstr "parámetros_de_índice" -#: sql_help.c:1348 sql_help.c:1365 sql_help.c:2820 sql_help.c:2837 +#: sql_help.c:1368 sql_help.c:1385 sql_help.c:2866 sql_help.c:2883 msgid "reftable" msgstr "tabla_ref" -#: sql_help.c:1349 sql_help.c:1366 sql_help.c:2821 sql_help.c:2838 +#: sql_help.c:1369 sql_help.c:1386 sql_help.c:2867 sql_help.c:2884 msgid "refcolumn" msgstr "columna_ref" -#: sql_help.c:1350 sql_help.c:1351 sql_help.c:1367 sql_help.c:1368 -#: sql_help.c:2822 sql_help.c:2823 sql_help.c:2839 sql_help.c:2840 +#: sql_help.c:1370 sql_help.c:1371 sql_help.c:1387 sql_help.c:1388 +#: sql_help.c:2868 sql_help.c:2869 sql_help.c:2885 sql_help.c:2886 msgid "referential_action" msgstr "acción_referencial" -#: sql_help.c:1352 sql_help.c:2268 sql_help.c:2824 +#: sql_help.c:1372 sql_help.c:2299 sql_help.c:2870 msgid "and table_constraint is:" msgstr "y restricción_de_tabla es:" -#: sql_help.c:1360 sql_help.c:2832 +#: sql_help.c:1380 sql_help.c:2878 msgid "exclude_element" msgstr "elemento_de_exclusión" -#: sql_help.c:1361 sql_help.c:2833 sql_help.c:4293 sql_help.c:4383 -#: sql_help.c:4532 sql_help.c:4687 sql_help.c:4752 +#: sql_help.c:1381 sql_help.c:2879 sql_help.c:4404 sql_help.c:4502 +#: sql_help.c:4653 sql_help.c:4818 sql_help.c:4885 msgid "operator" msgstr "operador" -#: sql_help.c:1363 sql_help.c:2377 sql_help.c:2835 +#: sql_help.c:1383 sql_help.c:2410 sql_help.c:2881 msgid "predicate" msgstr "predicado" -#: sql_help.c:1369 +#: sql_help.c:1389 msgid "and table_constraint_using_index is:" msgstr "y restricción_de_tabla_con_índice es:" -#: sql_help.c:1372 sql_help.c:2848 +#: sql_help.c:1392 sql_help.c:2894 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "parámetros_de_índice en UNIQUE, PRIMARY KEY y EXCLUDE son:" -#: sql_help.c:1377 sql_help.c:2853 +#: sql_help.c:1397 sql_help.c:2899 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "elemento_de_exclusión en una restricción EXCLUDE es:" -#: sql_help.c:1380 sql_help.c:2370 sql_help.c:2780 sql_help.c:2793 -#: sql_help.c:2807 sql_help.c:2856 sql_help.c:3830 +#: sql_help.c:1400 sql_help.c:2403 sql_help.c:2826 sql_help.c:2839 +#: sql_help.c:2853 sql_help.c:2902 sql_help.c:3907 msgid "opclass" msgstr "clase_de_ops" -#: sql_help.c:1396 sql_help.c:1399 sql_help.c:2891 +#: sql_help.c:1416 sql_help.c:1419 sql_help.c:2937 msgid "tablespace_option" msgstr "opción_de_tablespace" -#: sql_help.c:1420 sql_help.c:1423 sql_help.c:1429 sql_help.c:1433 +#: sql_help.c:1440 sql_help.c:1443 sql_help.c:1449 sql_help.c:1453 msgid "token_type" msgstr "tipo_de_token" -#: sql_help.c:1421 sql_help.c:1424 +#: sql_help.c:1441 sql_help.c:1444 msgid "dictionary_name" msgstr "nombre_diccionario" -#: sql_help.c:1426 sql_help.c:1430 +#: sql_help.c:1446 sql_help.c:1450 msgid "old_dictionary" msgstr "diccionario_antiguo" -#: sql_help.c:1427 sql_help.c:1431 +#: sql_help.c:1447 sql_help.c:1451 msgid "new_dictionary" msgstr "diccionario_nuevo" -#: sql_help.c:1526 sql_help.c:1540 sql_help.c:1543 sql_help.c:1544 -#: sql_help.c:3042 +#: sql_help.c:1546 sql_help.c:1560 sql_help.c:1563 sql_help.c:1564 +#: sql_help.c:3090 msgid "attribute_name" msgstr "nombre_atributo" -#: sql_help.c:1527 +#: sql_help.c:1547 msgid "new_attribute_name" msgstr "nuevo_nombre_atributo" -#: sql_help.c:1531 sql_help.c:1535 +#: sql_help.c:1551 sql_help.c:1555 msgid "new_enum_value" msgstr "nuevo_valor_enum" -#: sql_help.c:1532 +#: sql_help.c:1552 msgid "neighbor_enum_value" msgstr "valor_enum_vecino" -#: sql_help.c:1534 +#: sql_help.c:1554 msgid "existing_enum_value" msgstr "valor_enum_existente" -#: sql_help.c:1537 +#: sql_help.c:1557 msgid "property" msgstr "propiedad" -#: sql_help.c:1612 sql_help.c:2251 sql_help.c:2260 sql_help.c:2643 -#: sql_help.c:3120 sql_help.c:3571 sql_help.c:3750 sql_help.c:3786 -#: sql_help.c:4098 +#: sql_help.c:1633 sql_help.c:2282 sql_help.c:2291 sql_help.c:2679 +#: sql_help.c:3170 sql_help.c:3621 sql_help.c:3820 sql_help.c:3863 +#: sql_help.c:4200 msgid "server_name" msgstr "nombre_de_servidor" -#: sql_help.c:1644 sql_help.c:1647 sql_help.c:3135 +#: sql_help.c:1665 sql_help.c:1668 sql_help.c:3185 msgid "view_option_name" msgstr "nombre_opción_de_vista" -#: sql_help.c:1645 sql_help.c:3136 +#: sql_help.c:1666 sql_help.c:3186 msgid "view_option_value" msgstr "valor_opción_de_vista" -#: sql_help.c:1666 sql_help.c:1667 sql_help.c:4659 sql_help.c:4660 +#: sql_help.c:1687 sql_help.c:1688 sql_help.c:4789 sql_help.c:4790 msgid "table_and_columns" msgstr "tabla_y_columnas" -#: sql_help.c:1668 sql_help.c:1912 sql_help.c:3619 sql_help.c:3963 -#: sql_help.c:4661 +#: sql_help.c:1689 sql_help.c:1752 sql_help.c:1943 sql_help.c:3669 +#: sql_help.c:4042 sql_help.c:4791 msgid "where option can be one of:" msgstr "donde opción puede ser una de:" -#: sql_help.c:1669 sql_help.c:1670 sql_help.c:1914 sql_help.c:1917 -#: sql_help.c:2096 sql_help.c:3620 sql_help.c:3621 sql_help.c:3622 -#: sql_help.c:3623 sql_help.c:3624 sql_help.c:3625 sql_help.c:3626 -#: sql_help.c:3627 sql_help.c:4662 sql_help.c:4663 sql_help.c:4664 -#: sql_help.c:4665 sql_help.c:4666 sql_help.c:4667 sql_help.c:4668 -#: sql_help.c:4669 +#: sql_help.c:1690 sql_help.c:1691 sql_help.c:1753 sql_help.c:1945 +#: sql_help.c:1948 sql_help.c:2127 sql_help.c:3670 sql_help.c:3671 +#: sql_help.c:3672 sql_help.c:3673 sql_help.c:3674 sql_help.c:3675 +#: sql_help.c:3676 sql_help.c:3677 sql_help.c:4043 sql_help.c:4045 +#: sql_help.c:4792 sql_help.c:4793 sql_help.c:4794 sql_help.c:4795 +#: sql_help.c:4796 sql_help.c:4797 sql_help.c:4798 sql_help.c:4799 +#: sql_help.c:4800 msgid "boolean" msgstr "booleano" -#: sql_help.c:1671 sql_help.c:4671 +#: sql_help.c:1692 sql_help.c:4802 msgid "and table_and_columns is:" msgstr "y tabla_y_columnas es:" -#: sql_help.c:1687 sql_help.c:4443 sql_help.c:4445 sql_help.c:4469 +#: sql_help.c:1708 sql_help.c:4562 sql_help.c:4564 sql_help.c:4588 msgid "transaction_mode" msgstr "modo_de_transacción" -#: sql_help.c:1688 sql_help.c:4446 sql_help.c:4470 +#: sql_help.c:1709 sql_help.c:4565 sql_help.c:4589 msgid "where transaction_mode is one of:" msgstr "donde modo_de_transacción es uno de:" -#: sql_help.c:1697 sql_help.c:4303 sql_help.c:4312 sql_help.c:4316 -#: sql_help.c:4320 sql_help.c:4323 sql_help.c:4542 sql_help.c:4551 -#: sql_help.c:4555 sql_help.c:4559 sql_help.c:4562 sql_help.c:4762 -#: sql_help.c:4771 sql_help.c:4775 sql_help.c:4779 sql_help.c:4782 +#: sql_help.c:1718 sql_help.c:4414 sql_help.c:4423 sql_help.c:4427 +#: sql_help.c:4431 sql_help.c:4434 sql_help.c:4663 sql_help.c:4672 +#: sql_help.c:4676 sql_help.c:4680 sql_help.c:4683 sql_help.c:4895 +#: sql_help.c:4904 sql_help.c:4908 sql_help.c:4912 sql_help.c:4915 msgid "argument" msgstr "argumento" -#: sql_help.c:1787 +#: sql_help.c:1818 msgid "relation_name" msgstr "nombre_relación" -#: sql_help.c:1792 sql_help.c:3746 sql_help.c:4094 +#: sql_help.c:1823 sql_help.c:3814 sql_help.c:4194 msgid "domain_name" msgstr "nombre_de_dominio" -#: sql_help.c:1814 +#: sql_help.c:1845 msgid "policy_name" msgstr "nombre_de_política" -#: sql_help.c:1827 +#: sql_help.c:1858 msgid "rule_name" msgstr "nombre_regla" -#: sql_help.c:1846 +#: sql_help.c:1877 msgid "text" msgstr "texto" -#: sql_help.c:1871 sql_help.c:3930 sql_help.c:4135 +#: sql_help.c:1902 sql_help.c:4007 sql_help.c:4244 msgid "transaction_id" msgstr "id_de_transacción" -#: sql_help.c:1902 sql_help.c:1909 sql_help.c:3856 +#: sql_help.c:1933 sql_help.c:1940 sql_help.c:3933 msgid "filename" msgstr "nombre_de_archivo" -#: sql_help.c:1903 sql_help.c:1910 sql_help.c:2583 sql_help.c:2584 -#: sql_help.c:2585 +#: sql_help.c:1934 sql_help.c:1941 sql_help.c:2618 sql_help.c:2619 +#: sql_help.c:2620 msgid "command" msgstr "orden" -#: sql_help.c:1905 sql_help.c:2582 sql_help.c:2994 sql_help.c:3171 -#: sql_help.c:3840 sql_help.c:4286 sql_help.c:4288 sql_help.c:4376 -#: sql_help.c:4378 sql_help.c:4525 sql_help.c:4527 sql_help.c:4630 -#: sql_help.c:4745 sql_help.c:4747 +#: sql_help.c:1936 sql_help.c:2617 sql_help.c:3040 sql_help.c:3221 +#: sql_help.c:3917 sql_help.c:4397 sql_help.c:4399 sql_help.c:4495 +#: sql_help.c:4497 sql_help.c:4646 sql_help.c:4648 sql_help.c:4759 +#: sql_help.c:4878 sql_help.c:4880 msgid "condition" msgstr "condición" -#: sql_help.c:1908 sql_help.c:2411 sql_help.c:2877 sql_help.c:3137 -#: sql_help.c:3155 sql_help.c:3821 +#: sql_help.c:1939 sql_help.c:2444 sql_help.c:2923 sql_help.c:3187 +#: sql_help.c:3205 sql_help.c:3898 msgid "query" msgstr "consulta" -#: sql_help.c:1913 +#: sql_help.c:1944 msgid "format_name" msgstr "nombre_de_formato" -#: sql_help.c:1915 +#: sql_help.c:1946 msgid "delimiter_character" msgstr "carácter_delimitador" -#: sql_help.c:1916 +#: sql_help.c:1947 msgid "null_string" msgstr "cadena_null" -#: sql_help.c:1918 +#: sql_help.c:1949 msgid "quote_character" msgstr "carácter_de_comilla" -#: sql_help.c:1919 +#: sql_help.c:1950 msgid "escape_character" msgstr "carácter_de_escape" -#: sql_help.c:1923 +#: sql_help.c:1954 msgid "encoding_name" msgstr "nombre_codificación" -#: sql_help.c:1934 +#: sql_help.c:1965 msgid "access_method_type" msgstr "tipo_de_método_de_acceso" -#: sql_help.c:2005 sql_help.c:2024 sql_help.c:2027 +#: sql_help.c:2036 sql_help.c:2055 sql_help.c:2058 msgid "arg_data_type" msgstr "tipo_de_dato_arg" -#: sql_help.c:2006 sql_help.c:2028 sql_help.c:2036 +#: sql_help.c:2037 sql_help.c:2059 sql_help.c:2067 msgid "sfunc" msgstr "func_transición" -#: sql_help.c:2007 sql_help.c:2029 sql_help.c:2037 +#: sql_help.c:2038 sql_help.c:2060 sql_help.c:2068 msgid "state_data_type" msgstr "tipo_de_dato_de_estado" -#: sql_help.c:2008 sql_help.c:2030 sql_help.c:2038 +#: sql_help.c:2039 sql_help.c:2061 sql_help.c:2069 msgid "state_data_size" msgstr "tamaño_de_dato_de_estado" -#: sql_help.c:2009 sql_help.c:2031 sql_help.c:2039 +#: sql_help.c:2040 sql_help.c:2062 sql_help.c:2070 msgid "ffunc" msgstr "func_final" -#: sql_help.c:2010 sql_help.c:2040 +#: sql_help.c:2041 sql_help.c:2071 msgid "combinefunc" msgstr "func_combinación" -#: sql_help.c:2011 sql_help.c:2041 +#: sql_help.c:2042 sql_help.c:2072 msgid "serialfunc" msgstr "func_serial" -#: sql_help.c:2012 sql_help.c:2042 +#: sql_help.c:2043 sql_help.c:2073 msgid "deserialfunc" msgstr "func_deserial" -#: sql_help.c:2013 sql_help.c:2032 sql_help.c:2043 +#: sql_help.c:2044 sql_help.c:2063 sql_help.c:2074 msgid "initial_condition" msgstr "condición_inicial" -#: sql_help.c:2014 sql_help.c:2044 +#: sql_help.c:2045 sql_help.c:2075 msgid "msfunc" msgstr "func_transición_m" -#: sql_help.c:2015 sql_help.c:2045 +#: sql_help.c:2046 sql_help.c:2076 msgid "minvfunc" msgstr "func_inv_m" -#: sql_help.c:2016 sql_help.c:2046 +#: sql_help.c:2047 sql_help.c:2077 msgid "mstate_data_type" msgstr "tipo_de_dato_de_estado_m" -#: sql_help.c:2017 sql_help.c:2047 +#: sql_help.c:2048 sql_help.c:2078 msgid "mstate_data_size" msgstr "tamaño_de_dato_de_estado_m" -#: sql_help.c:2018 sql_help.c:2048 +#: sql_help.c:2049 sql_help.c:2079 msgid "mffunc" msgstr "func_final_m" -#: sql_help.c:2019 sql_help.c:2049 +#: sql_help.c:2050 sql_help.c:2080 msgid "minitial_condition" msgstr "condición_inicial_m" -#: sql_help.c:2020 sql_help.c:2050 +#: sql_help.c:2051 sql_help.c:2081 msgid "sort_operator" msgstr "operador_de_ordenamiento" -#: sql_help.c:2033 +#: sql_help.c:2064 msgid "or the old syntax" msgstr "o la sintaxis antigua" -#: sql_help.c:2035 +#: sql_help.c:2066 msgid "base_type" msgstr "tipo_base" -#: sql_help.c:2092 sql_help.c:2133 +#: sql_help.c:2123 sql_help.c:2164 msgid "locale" msgstr "configuración regional" -#: sql_help.c:2093 sql_help.c:2134 +#: sql_help.c:2124 sql_help.c:2165 msgid "lc_collate" msgstr "lc_collate" -#: sql_help.c:2094 sql_help.c:2135 +#: sql_help.c:2125 sql_help.c:2166 msgid "lc_ctype" msgstr "lc_ctype" -#: sql_help.c:2095 sql_help.c:4188 +#: sql_help.c:2126 sql_help.c:4297 msgid "provider" msgstr "proveedor" -#: sql_help.c:2097 sql_help.c:2189 +#: sql_help.c:2128 sql_help.c:2220 msgid "version" msgstr "versión" -#: sql_help.c:2099 +#: sql_help.c:2130 msgid "existing_collation" msgstr "ordenamiento_existente" -#: sql_help.c:2109 +#: sql_help.c:2140 msgid "source_encoding" msgstr "codificación_origen" -#: sql_help.c:2110 +#: sql_help.c:2141 msgid "dest_encoding" msgstr "codificación_destino" -#: sql_help.c:2131 sql_help.c:2917 +#: sql_help.c:2162 sql_help.c:2963 msgid "template" msgstr "plantilla" -#: sql_help.c:2132 +#: sql_help.c:2163 msgid "encoding" msgstr "codificación" -#: sql_help.c:2159 +#: sql_help.c:2190 msgid "constraint" msgstr "restricción" -#: sql_help.c:2160 +#: sql_help.c:2191 msgid "where constraint is:" msgstr "donde restricción es:" -#: sql_help.c:2174 sql_help.c:2580 sql_help.c:2990 +#: sql_help.c:2205 sql_help.c:2615 sql_help.c:3036 msgid "event" msgstr "evento" -#: sql_help.c:2175 +#: sql_help.c:2206 msgid "filter_variable" msgstr "variable_de_filtrado" -#: sql_help.c:2263 sql_help.c:2812 +#: sql_help.c:2294 sql_help.c:2858 msgid "where column_constraint is:" msgstr "donde restricción_de_columna es:" -#: sql_help.c:2300 +#: sql_help.c:2332 msgid "rettype" msgstr "tipo_ret" -#: sql_help.c:2302 +#: sql_help.c:2334 msgid "column_type" msgstr "tipo_columna" -#: sql_help.c:2311 sql_help.c:2511 +#: sql_help.c:2343 sql_help.c:2545 msgid "definition" msgstr "definición" -#: sql_help.c:2312 sql_help.c:2512 +#: sql_help.c:2344 sql_help.c:2546 msgid "obj_file" msgstr "archivo_obj" -#: sql_help.c:2313 sql_help.c:2513 +#: sql_help.c:2345 sql_help.c:2547 msgid "link_symbol" msgstr "símbolo_enlace" -#: sql_help.c:2351 sql_help.c:2565 sql_help.c:3109 +#: sql_help.c:2346 sql_help.c:2548 +msgid "sql_body" +msgstr "" + +#: sql_help.c:2384 sql_help.c:2600 sql_help.c:3159 msgid "uid" msgstr "uid" -#: sql_help.c:2366 sql_help.c:2407 sql_help.c:2781 sql_help.c:2794 -#: sql_help.c:2808 sql_help.c:2873 +#: sql_help.c:2399 sql_help.c:2440 sql_help.c:2827 sql_help.c:2840 +#: sql_help.c:2854 sql_help.c:2919 msgid "method" msgstr "método" -#: sql_help.c:2371 +#: sql_help.c:2404 msgid "opclass_parameter" msgstr "parámetro_opclass" -#: sql_help.c:2388 +#: sql_help.c:2421 msgid "call_handler" msgstr "manejador_de_llamada" -#: sql_help.c:2389 +#: sql_help.c:2422 msgid "inline_handler" msgstr "manejador_en_línea" -#: sql_help.c:2390 +#: sql_help.c:2423 msgid "valfunction" msgstr "función_val" -#: sql_help.c:2429 +#: sql_help.c:2462 msgid "com_op" msgstr "op_conm" -#: sql_help.c:2430 +#: sql_help.c:2463 msgid "neg_op" msgstr "op_neg" -#: sql_help.c:2448 +#: sql_help.c:2481 msgid "family_name" msgstr "nombre_familia" -#: sql_help.c:2459 +#: sql_help.c:2492 msgid "storage_type" msgstr "tipo_almacenamiento" -#: sql_help.c:2586 sql_help.c:2997 +#: sql_help.c:2621 sql_help.c:3043 msgid "where event can be one of:" msgstr "donde evento puede ser una de:" -#: sql_help.c:2605 sql_help.c:2607 +#: sql_help.c:2641 sql_help.c:2643 msgid "schema_element" msgstr "elemento_de_esquema" -#: sql_help.c:2644 +#: sql_help.c:2680 msgid "server_type" msgstr "tipo_de_servidor" -#: sql_help.c:2645 +#: sql_help.c:2681 msgid "server_version" msgstr "versión_de_servidor" -#: sql_help.c:2646 sql_help.c:3748 sql_help.c:4096 +#: sql_help.c:2682 sql_help.c:3817 sql_help.c:4197 msgid "fdw_name" msgstr "nombre_fdw" -#: sql_help.c:2659 +#: sql_help.c:2699 sql_help.c:2702 msgid "statistics_name" msgstr "nombre_de_estadística" -#: sql_help.c:2660 +#: sql_help.c:2703 msgid "statistics_kind" msgstr "tipo_de_estadística" -#: sql_help.c:2674 +#: sql_help.c:2719 msgid "subscription_name" msgstr "nombre_de_suscripción" -#: sql_help.c:2774 +#: sql_help.c:2820 msgid "source_table" msgstr "tabla_origen" -#: sql_help.c:2775 +#: sql_help.c:2821 msgid "like_option" msgstr "opción_de_like" -#: sql_help.c:2841 +#: sql_help.c:2887 msgid "and like_option is:" msgstr "y opción_de_like es:" -#: sql_help.c:2890 +#: sql_help.c:2936 msgid "directory" msgstr "directorio" -#: sql_help.c:2904 +#: sql_help.c:2950 msgid "parser_name" msgstr "nombre_de_parser" -#: sql_help.c:2905 +#: sql_help.c:2951 msgid "source_config" msgstr "config_origen" -#: sql_help.c:2934 +#: sql_help.c:2980 msgid "start_function" msgstr "función_inicio" -#: sql_help.c:2935 +#: sql_help.c:2981 msgid "gettoken_function" msgstr "función_gettoken" -#: sql_help.c:2936 +#: sql_help.c:2982 msgid "end_function" msgstr "función_fin" -#: sql_help.c:2937 +#: sql_help.c:2983 msgid "lextypes_function" msgstr "función_lextypes" -#: sql_help.c:2938 +#: sql_help.c:2984 msgid "headline_function" msgstr "función_headline" -#: sql_help.c:2950 +#: sql_help.c:2996 msgid "init_function" msgstr "función_init" -#: sql_help.c:2951 +#: sql_help.c:2997 msgid "lexize_function" msgstr "función_lexize" -#: sql_help.c:2964 +#: sql_help.c:3010 msgid "from_sql_function_name" msgstr "nombre_de_función_from" -#: sql_help.c:2966 +#: sql_help.c:3012 msgid "to_sql_function_name" msgstr "nombre_de_función_to" -#: sql_help.c:2992 +#: sql_help.c:3038 msgid "referenced_table_name" msgstr "nombre_tabla_referenciada" -#: sql_help.c:2993 +#: sql_help.c:3039 msgid "transition_relation_name" msgstr "nombre_de_relación_de_transición" -#: sql_help.c:2996 +#: sql_help.c:3042 msgid "arguments" msgstr "argumentos" -#: sql_help.c:3046 sql_help.c:4221 +#: sql_help.c:3094 sql_help.c:4330 msgid "label" msgstr "etiqueta" -#: sql_help.c:3048 +#: sql_help.c:3096 msgid "subtype" msgstr "subtipo" -#: sql_help.c:3049 +#: sql_help.c:3097 msgid "subtype_operator_class" msgstr "clase_de_operador_del_subtipo" -#: sql_help.c:3051 +#: sql_help.c:3099 msgid "canonical_function" msgstr "función_canónica" -#: sql_help.c:3052 +#: sql_help.c:3100 msgid "subtype_diff_function" msgstr "función_diff_del_subtipo" -#: sql_help.c:3054 +#: sql_help.c:3101 +#, fuzzy +#| msgid "storage_type" +msgid "multirange_type_name" +msgstr "tipo_almacenamiento" + +#: sql_help.c:3103 msgid "input_function" msgstr "función_entrada" -#: sql_help.c:3055 +#: sql_help.c:3104 msgid "output_function" msgstr "función_salida" -#: sql_help.c:3056 +#: sql_help.c:3105 msgid "receive_function" msgstr "función_receive" -#: sql_help.c:3057 +#: sql_help.c:3106 msgid "send_function" msgstr "función_send" -#: sql_help.c:3058 +#: sql_help.c:3107 msgid "type_modifier_input_function" msgstr "función_entrada_del_modificador_de_tipo" -#: sql_help.c:3059 +#: sql_help.c:3108 msgid "type_modifier_output_function" msgstr "función_salida_del_modificador_de_tipo" -#: sql_help.c:3060 +#: sql_help.c:3109 msgid "analyze_function" msgstr "función_analyze" -#: sql_help.c:3061 +#: sql_help.c:3110 +#, fuzzy +#| msgid "support_function" +msgid "subscript_function" +msgstr "función_de_soporte" + +#: sql_help.c:3111 msgid "internallength" msgstr "largo_interno" -#: sql_help.c:3062 +#: sql_help.c:3112 msgid "alignment" msgstr "alineamiento" -#: sql_help.c:3063 +#: sql_help.c:3113 msgid "storage" msgstr "almacenamiento" -#: sql_help.c:3064 +#: sql_help.c:3114 msgid "like_type" msgstr "como_tipo" -#: sql_help.c:3065 +#: sql_help.c:3115 msgid "category" msgstr "categoría" -#: sql_help.c:3066 +#: sql_help.c:3116 msgid "preferred" msgstr "preferido" -#: sql_help.c:3067 +#: sql_help.c:3117 msgid "default" msgstr "valor_por_omisión" -#: sql_help.c:3068 +#: sql_help.c:3118 msgid "element" msgstr "elemento" -#: sql_help.c:3069 +#: sql_help.c:3119 msgid "delimiter" msgstr "delimitador" -#: sql_help.c:3070 +#: sql_help.c:3120 msgid "collatable" msgstr "ordenable" -#: sql_help.c:3167 sql_help.c:3816 sql_help.c:4281 sql_help.c:4370 -#: sql_help.c:4520 sql_help.c:4620 sql_help.c:4740 +#: sql_help.c:3217 sql_help.c:3893 sql_help.c:4392 sql_help.c:4489 +#: sql_help.c:4641 sql_help.c:4749 sql_help.c:4873 msgid "with_query" msgstr "consulta_with" -#: sql_help.c:3169 sql_help.c:3818 sql_help.c:4300 sql_help.c:4306 -#: sql_help.c:4309 sql_help.c:4313 sql_help.c:4317 sql_help.c:4325 -#: sql_help.c:4539 sql_help.c:4545 sql_help.c:4548 sql_help.c:4552 -#: sql_help.c:4556 sql_help.c:4564 sql_help.c:4622 sql_help.c:4759 -#: sql_help.c:4765 sql_help.c:4768 sql_help.c:4772 sql_help.c:4776 -#: sql_help.c:4784 +#: sql_help.c:3219 sql_help.c:3895 sql_help.c:4411 sql_help.c:4417 +#: sql_help.c:4420 sql_help.c:4424 sql_help.c:4428 sql_help.c:4436 +#: sql_help.c:4660 sql_help.c:4666 sql_help.c:4669 sql_help.c:4673 +#: sql_help.c:4677 sql_help.c:4685 sql_help.c:4751 sql_help.c:4892 +#: sql_help.c:4898 sql_help.c:4901 sql_help.c:4905 sql_help.c:4909 +#: sql_help.c:4917 msgid "alias" msgstr "alias" -#: sql_help.c:3170 sql_help.c:4285 sql_help.c:4327 sql_help.c:4329 -#: sql_help.c:4375 sql_help.c:4524 sql_help.c:4566 sql_help.c:4568 -#: sql_help.c:4629 sql_help.c:4744 sql_help.c:4786 sql_help.c:4788 +#: sql_help.c:3220 sql_help.c:4396 sql_help.c:4438 sql_help.c:4440 +#: sql_help.c:4494 sql_help.c:4645 sql_help.c:4687 sql_help.c:4689 +#: sql_help.c:4758 sql_help.c:4877 sql_help.c:4919 sql_help.c:4921 msgid "from_item" msgstr "item_de_from" -#: sql_help.c:3172 sql_help.c:3653 sql_help.c:3897 sql_help.c:4631 +#: sql_help.c:3222 sql_help.c:3703 sql_help.c:3974 sql_help.c:4760 msgid "cursor_name" msgstr "nombre_de_cursor" -#: sql_help.c:3173 sql_help.c:3824 sql_help.c:4632 +#: sql_help.c:3223 sql_help.c:3901 sql_help.c:4761 msgid "output_expression" msgstr "expresión_de_salida" -#: sql_help.c:3174 sql_help.c:3825 sql_help.c:4284 sql_help.c:4373 -#: sql_help.c:4523 sql_help.c:4633 sql_help.c:4743 +#: sql_help.c:3224 sql_help.c:3902 sql_help.c:4395 sql_help.c:4492 +#: sql_help.c:4644 sql_help.c:4762 sql_help.c:4876 msgid "output_name" msgstr "nombre_de_salida" -#: sql_help.c:3190 +#: sql_help.c:3240 msgid "code" msgstr "código" -#: sql_help.c:3595 +#: sql_help.c:3645 msgid "parameter" msgstr "parámetro" -#: sql_help.c:3617 sql_help.c:3618 sql_help.c:3922 +#: sql_help.c:3667 sql_help.c:3668 sql_help.c:3999 msgid "statement" msgstr "sentencia" -#: sql_help.c:3652 sql_help.c:3896 +#: sql_help.c:3702 sql_help.c:3973 msgid "direction" msgstr "dirección" -#: sql_help.c:3654 sql_help.c:3898 +#: sql_help.c:3704 sql_help.c:3975 msgid "where direction can be empty or one of:" msgstr "donde dirección puede ser vacío o uno de:" -#: sql_help.c:3655 sql_help.c:3656 sql_help.c:3657 sql_help.c:3658 -#: sql_help.c:3659 sql_help.c:3899 sql_help.c:3900 sql_help.c:3901 -#: sql_help.c:3902 sql_help.c:3903 sql_help.c:4294 sql_help.c:4296 -#: sql_help.c:4384 sql_help.c:4386 sql_help.c:4533 sql_help.c:4535 -#: sql_help.c:4688 sql_help.c:4690 sql_help.c:4753 sql_help.c:4755 +#: sql_help.c:3705 sql_help.c:3706 sql_help.c:3707 sql_help.c:3708 +#: sql_help.c:3709 sql_help.c:3976 sql_help.c:3977 sql_help.c:3978 +#: sql_help.c:3979 sql_help.c:3980 sql_help.c:4405 sql_help.c:4407 +#: sql_help.c:4503 sql_help.c:4505 sql_help.c:4654 sql_help.c:4656 +#: sql_help.c:4819 sql_help.c:4821 sql_help.c:4886 sql_help.c:4888 msgid "count" msgstr "cantidad" -#: sql_help.c:3741 sql_help.c:4089 +#: sql_help.c:3807 sql_help.c:4187 msgid "sequence_name" msgstr "nombre_secuencia" -#: sql_help.c:3754 sql_help.c:4102 +#: sql_help.c:3825 sql_help.c:4205 msgid "arg_name" msgstr "nombre_arg" -#: sql_help.c:3755 sql_help.c:4103 +#: sql_help.c:3826 sql_help.c:4206 msgid "arg_type" msgstr "tipo_arg" -#: sql_help.c:3760 sql_help.c:4108 +#: sql_help.c:3833 sql_help.c:4213 msgid "loid" msgstr "loid" -#: sql_help.c:3784 +#: sql_help.c:3861 msgid "remote_schema" msgstr "schema_remoto" -#: sql_help.c:3787 +#: sql_help.c:3864 msgid "local_schema" msgstr "schema_local" -#: sql_help.c:3822 +#: sql_help.c:3899 msgid "conflict_target" msgstr "destino_de_conflict" -#: sql_help.c:3823 +#: sql_help.c:3900 msgid "conflict_action" msgstr "acción_de_conflict" -#: sql_help.c:3826 +#: sql_help.c:3903 msgid "where conflict_target can be one of:" msgstr "donde destino_de_conflict puede ser uno de:" -#: sql_help.c:3827 +#: sql_help.c:3904 msgid "index_column_name" msgstr "nombre_de_columna_de_índice" -#: sql_help.c:3828 +#: sql_help.c:3905 msgid "index_expression" msgstr "expresión_de_índice" -#: sql_help.c:3831 +#: sql_help.c:3908 msgid "index_predicate" msgstr "predicado_de_índice" -#: sql_help.c:3833 +#: sql_help.c:3910 msgid "and conflict_action is one of:" msgstr "donde acción_de_conflict es una de:" -#: sql_help.c:3839 sql_help.c:4628 +#: sql_help.c:3916 sql_help.c:4757 msgid "sub-SELECT" msgstr "sub-SELECT" -#: sql_help.c:3848 sql_help.c:3911 sql_help.c:4604 +#: sql_help.c:3925 sql_help.c:3988 sql_help.c:4733 msgid "channel" msgstr "canal" -#: sql_help.c:3870 +#: sql_help.c:3947 msgid "lockmode" msgstr "modo_bloqueo" -#: sql_help.c:3871 +#: sql_help.c:3948 msgid "where lockmode is one of:" msgstr "donde modo_bloqueo es uno de:" -#: sql_help.c:3912 +#: sql_help.c:3989 msgid "payload" msgstr "carga" -#: sql_help.c:3939 +#: sql_help.c:4016 msgid "old_role" msgstr "rol_antiguo" -#: sql_help.c:3940 +#: sql_help.c:4017 msgid "new_role" msgstr "rol_nuevo" -#: sql_help.c:3971 sql_help.c:4143 sql_help.c:4151 +#: sql_help.c:4053 sql_help.c:4252 sql_help.c:4260 msgid "savepoint_name" msgstr "nombre_de_savepoint" -#: sql_help.c:4287 sql_help.c:4339 sql_help.c:4526 sql_help.c:4578 -#: sql_help.c:4746 sql_help.c:4798 +#: sql_help.c:4398 sql_help.c:4451 sql_help.c:4647 sql_help.c:4700 +#: sql_help.c:4879 sql_help.c:4932 msgid "grouping_element" msgstr "elemento_agrupante" -#: sql_help.c:4289 sql_help.c:4379 sql_help.c:4528 sql_help.c:4748 +#: sql_help.c:4400 sql_help.c:4498 sql_help.c:4649 sql_help.c:4881 msgid "window_name" msgstr "nombre_de_ventana" -#: sql_help.c:4290 sql_help.c:4380 sql_help.c:4529 sql_help.c:4749 +#: sql_help.c:4401 sql_help.c:4499 sql_help.c:4650 sql_help.c:4882 msgid "window_definition" msgstr "definición_de_ventana" -#: sql_help.c:4291 sql_help.c:4305 sql_help.c:4343 sql_help.c:4381 -#: sql_help.c:4530 sql_help.c:4544 sql_help.c:4582 sql_help.c:4750 -#: sql_help.c:4764 sql_help.c:4802 +#: sql_help.c:4402 sql_help.c:4416 sql_help.c:4455 sql_help.c:4500 +#: sql_help.c:4651 sql_help.c:4665 sql_help.c:4704 sql_help.c:4883 +#: sql_help.c:4897 sql_help.c:4936 msgid "select" msgstr "select" -#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4757 +#: sql_help.c:4409 sql_help.c:4658 sql_help.c:4890 msgid "where from_item can be one of:" msgstr "donde item_de_from puede ser uno de:" -#: sql_help.c:4301 sql_help.c:4307 sql_help.c:4310 sql_help.c:4314 -#: sql_help.c:4326 sql_help.c:4540 sql_help.c:4546 sql_help.c:4549 -#: sql_help.c:4553 sql_help.c:4565 sql_help.c:4760 sql_help.c:4766 -#: sql_help.c:4769 sql_help.c:4773 sql_help.c:4785 +#: sql_help.c:4412 sql_help.c:4418 sql_help.c:4421 sql_help.c:4425 +#: sql_help.c:4437 sql_help.c:4661 sql_help.c:4667 sql_help.c:4670 +#: sql_help.c:4674 sql_help.c:4686 sql_help.c:4893 sql_help.c:4899 +#: sql_help.c:4902 sql_help.c:4906 sql_help.c:4918 msgid "column_alias" msgstr "alias_de_columna" -#: sql_help.c:4302 sql_help.c:4541 sql_help.c:4761 +#: sql_help.c:4413 sql_help.c:4662 sql_help.c:4894 msgid "sampling_method" msgstr "método_de_sampleo" -#: sql_help.c:4304 sql_help.c:4543 sql_help.c:4763 +#: sql_help.c:4415 sql_help.c:4664 sql_help.c:4896 msgid "seed" msgstr "semilla" -#: sql_help.c:4308 sql_help.c:4341 sql_help.c:4547 sql_help.c:4580 -#: sql_help.c:4767 sql_help.c:4800 +#: sql_help.c:4419 sql_help.c:4453 sql_help.c:4668 sql_help.c:4702 +#: sql_help.c:4900 sql_help.c:4934 msgid "with_query_name" msgstr "nombre_consulta_with" -#: sql_help.c:4318 sql_help.c:4321 sql_help.c:4324 sql_help.c:4557 -#: sql_help.c:4560 sql_help.c:4563 sql_help.c:4777 sql_help.c:4780 -#: sql_help.c:4783 +#: sql_help.c:4429 sql_help.c:4432 sql_help.c:4435 sql_help.c:4678 +#: sql_help.c:4681 sql_help.c:4684 sql_help.c:4910 sql_help.c:4913 +#: sql_help.c:4916 msgid "column_definition" msgstr "definición_de_columna" -#: sql_help.c:4328 sql_help.c:4567 sql_help.c:4787 +#: sql_help.c:4439 sql_help.c:4688 sql_help.c:4920 msgid "join_type" msgstr "tipo_de_join" -#: sql_help.c:4330 sql_help.c:4569 sql_help.c:4789 +#: sql_help.c:4441 sql_help.c:4690 sql_help.c:4922 msgid "join_condition" msgstr "condición_de_join" -#: sql_help.c:4331 sql_help.c:4570 sql_help.c:4790 +#: sql_help.c:4442 sql_help.c:4691 sql_help.c:4923 msgid "join_column" msgstr "columna_de_join" -#: sql_help.c:4332 sql_help.c:4571 sql_help.c:4791 +#: sql_help.c:4443 sql_help.c:4692 sql_help.c:4924 +#, fuzzy +#| msgid "column_alias" +msgid "join_using_alias" +msgstr "alias_de_columna" + +#: sql_help.c:4444 sql_help.c:4693 sql_help.c:4925 msgid "and grouping_element can be one of:" msgstr "donde elemento_agrupante puede ser una de:" -#: sql_help.c:4340 sql_help.c:4579 sql_help.c:4799 +#: sql_help.c:4452 sql_help.c:4701 sql_help.c:4933 msgid "and with_query is:" msgstr "y consulta_with es:" -#: sql_help.c:4344 sql_help.c:4583 sql_help.c:4803 +#: sql_help.c:4456 sql_help.c:4705 sql_help.c:4937 msgid "values" msgstr "valores" -#: sql_help.c:4345 sql_help.c:4584 sql_help.c:4804 +#: sql_help.c:4457 sql_help.c:4706 sql_help.c:4938 msgid "insert" msgstr "insert" -#: sql_help.c:4346 sql_help.c:4585 sql_help.c:4805 +#: sql_help.c:4458 sql_help.c:4707 sql_help.c:4939 msgid "update" msgstr "update" -#: sql_help.c:4347 sql_help.c:4586 sql_help.c:4806 +#: sql_help.c:4459 sql_help.c:4708 sql_help.c:4940 msgid "delete" msgstr "delete" -#: sql_help.c:4374 +#: sql_help.c:4461 sql_help.c:4710 sql_help.c:4942 +#, fuzzy +#| msgid "schema_name" +msgid "search_seq_col_name" +msgstr "nombre_de_esquema" + +#: sql_help.c:4463 sql_help.c:4712 sql_help.c:4944 +#, fuzzy +#| msgid "schema_name" +msgid "cycle_mark_col_name" +msgstr "nombre_de_esquema" + +#: sql_help.c:4464 sql_help.c:4713 sql_help.c:4945 +#, fuzzy +#| msgid "new_enum_value" +msgid "cycle_mark_value" +msgstr "nuevo_valor_enum" + +#: sql_help.c:4465 sql_help.c:4714 sql_help.c:4946 +msgid "cycle_mark_default" +msgstr "" + +#: sql_help.c:4466 sql_help.c:4715 sql_help.c:4947 +msgid "cycle_path_col_name" +msgstr "" + +#: sql_help.c:4493 msgid "new_table" msgstr "nueva_tabla" -#: sql_help.c:4399 +#: sql_help.c:4518 msgid "timezone" msgstr "huso_horario" -#: sql_help.c:4444 +#: sql_help.c:4563 msgid "snapshot_id" msgstr "id_de_snapshot" -#: sql_help.c:4686 +#: sql_help.c:4817 msgid "sort_expression" msgstr "expresión_orden" -#: sql_help.c:4813 sql_help.c:5791 +#: sql_help.c:4954 sql_help.c:5932 msgid "abort the current transaction" msgstr "aborta la transacción en curso" -#: sql_help.c:4819 +#: sql_help.c:4960 msgid "change the definition of an aggregate function" msgstr "cambia la definición de una función de agregación" -#: sql_help.c:4825 +#: sql_help.c:4966 msgid "change the definition of a collation" msgstr "cambia la definición de un ordenamiento" -#: sql_help.c:4831 +#: sql_help.c:4972 msgid "change the definition of a conversion" msgstr "cambia la definición de una conversión" -#: sql_help.c:4837 +#: sql_help.c:4978 msgid "change a database" msgstr "cambia una base de datos" -#: sql_help.c:4843 +#: sql_help.c:4984 msgid "define default access privileges" msgstr "define privilegios de acceso por omisión" -#: sql_help.c:4849 +#: sql_help.c:4990 msgid "change the definition of a domain" msgstr "cambia la definición de un dominio" -#: sql_help.c:4855 +#: sql_help.c:4996 msgid "change the definition of an event trigger" msgstr "cambia la definición de un disparador por evento" -#: sql_help.c:4861 +#: sql_help.c:5002 msgid "change the definition of an extension" msgstr "cambia la definición de una extensión" -#: sql_help.c:4867 +#: sql_help.c:5008 msgid "change the definition of a foreign-data wrapper" msgstr "cambia la definición de un conector de datos externos" -#: sql_help.c:4873 +#: sql_help.c:5014 msgid "change the definition of a foreign table" msgstr "cambia la definición de una tabla foránea" -#: sql_help.c:4879 +#: sql_help.c:5020 msgid "change the definition of a function" msgstr "cambia la definición de una función" -#: sql_help.c:4885 +#: sql_help.c:5026 msgid "change role name or membership" msgstr "cambiar nombre del rol o membresía" -#: sql_help.c:4891 +#: sql_help.c:5032 msgid "change the definition of an index" msgstr "cambia la definición de un índice" -#: sql_help.c:4897 +#: sql_help.c:5038 msgid "change the definition of a procedural language" msgstr "cambia la definición de un lenguaje procedural" -#: sql_help.c:4903 +#: sql_help.c:5044 msgid "change the definition of a large object" msgstr "cambia la definición de un objeto grande" -#: sql_help.c:4909 +#: sql_help.c:5050 msgid "change the definition of a materialized view" msgstr "cambia la definición de una vista materializada" -#: sql_help.c:4915 +#: sql_help.c:5056 msgid "change the definition of an operator" msgstr "cambia la definición de un operador" -#: sql_help.c:4921 +#: sql_help.c:5062 msgid "change the definition of an operator class" msgstr "cambia la definición de una clase de operadores" -#: sql_help.c:4927 +#: sql_help.c:5068 msgid "change the definition of an operator family" msgstr "cambia la definición de una familia de operadores" -#: sql_help.c:4933 -msgid "change the definition of a row level security policy" +#: sql_help.c:5074 +#, fuzzy +#| msgid "change the definition of a row level security policy" +msgid "change the definition of a row-level security policy" msgstr "cambia la definición de una política de seguridad de registros" -#: sql_help.c:4939 +#: sql_help.c:5080 msgid "change the definition of a procedure" msgstr "cambia la definición de un procedimiento" -#: sql_help.c:4945 +#: sql_help.c:5086 msgid "change the definition of a publication" msgstr "cambia la definición de una publicación" -#: sql_help.c:4951 sql_help.c:5053 +#: sql_help.c:5092 sql_help.c:5194 msgid "change a database role" msgstr "cambia un rol de la base de datos" -#: sql_help.c:4957 +#: sql_help.c:5098 msgid "change the definition of a routine" msgstr "cambia la definición de una rutina" -#: sql_help.c:4963 +#: sql_help.c:5104 msgid "change the definition of a rule" msgstr "cambia la definición de una regla" -#: sql_help.c:4969 +#: sql_help.c:5110 msgid "change the definition of a schema" msgstr "cambia la definición de un esquema" -#: sql_help.c:4975 +#: sql_help.c:5116 msgid "change the definition of a sequence generator" msgstr "cambia la definición de un generador secuencial" -#: sql_help.c:4981 +#: sql_help.c:5122 msgid "change the definition of a foreign server" msgstr "cambia la definición de un servidor foráneo" -#: sql_help.c:4987 +#: sql_help.c:5128 msgid "change the definition of an extended statistics object" msgstr "cambia la definición de un objeto de estadísticas extendidas" -#: sql_help.c:4993 +#: sql_help.c:5134 msgid "change the definition of a subscription" msgstr "cambia la definición de una suscripción" -#: sql_help.c:4999 +#: sql_help.c:5140 msgid "change a server configuration parameter" msgstr "cambia un parámetro de configuración del servidor" -#: sql_help.c:5005 +#: sql_help.c:5146 msgid "change the definition of a table" msgstr "cambia la definición de una tabla" -#: sql_help.c:5011 +#: sql_help.c:5152 msgid "change the definition of a tablespace" msgstr "cambia la definición de un tablespace" -#: sql_help.c:5017 +#: sql_help.c:5158 msgid "change the definition of a text search configuration" msgstr "cambia la definición de una configuración de búsqueda en texto" -#: sql_help.c:5023 +#: sql_help.c:5164 msgid "change the definition of a text search dictionary" msgstr "cambia la definición de un diccionario de búsqueda en texto" -#: sql_help.c:5029 +#: sql_help.c:5170 msgid "change the definition of a text search parser" msgstr "cambia la definición de un analizador de búsqueda en texto" -#: sql_help.c:5035 +#: sql_help.c:5176 msgid "change the definition of a text search template" msgstr "cambia la definición de una plantilla de búsqueda en texto" -#: sql_help.c:5041 +#: sql_help.c:5182 msgid "change the definition of a trigger" msgstr "cambia la definición de un disparador" -#: sql_help.c:5047 +#: sql_help.c:5188 msgid "change the definition of a type" msgstr "cambia la definición de un tipo" -#: sql_help.c:5059 +#: sql_help.c:5200 msgid "change the definition of a user mapping" msgstr "cambia la definición de un mapeo de usuario" -#: sql_help.c:5065 +#: sql_help.c:5206 msgid "change the definition of a view" msgstr "cambia la definición de una vista" -#: sql_help.c:5071 +#: sql_help.c:5212 msgid "collect statistics about a database" msgstr "recolecta estadísticas sobre una base de datos" -#: sql_help.c:5077 sql_help.c:5869 +#: sql_help.c:5218 sql_help.c:6010 msgid "start a transaction block" msgstr "inicia un bloque de transacción" -#: sql_help.c:5083 +#: sql_help.c:5224 msgid "invoke a procedure" msgstr "invocar un procedimiento" -#: sql_help.c:5089 +#: sql_help.c:5230 msgid "force a write-ahead log checkpoint" msgstr "fuerza un checkpoint de wal" -#: sql_help.c:5095 +#: sql_help.c:5236 msgid "close a cursor" msgstr "cierra un cursor" -#: sql_help.c:5101 +#: sql_help.c:5242 msgid "cluster a table according to an index" msgstr "reordena una tabla siguiendo un índice" -#: sql_help.c:5107 +#: sql_help.c:5248 msgid "define or change the comment of an object" msgstr "define o cambia un comentario sobre un objeto" -#: sql_help.c:5113 sql_help.c:5671 +#: sql_help.c:5254 sql_help.c:5812 msgid "commit the current transaction" msgstr "compromete la transacción en curso" -#: sql_help.c:5119 +#: sql_help.c:5260 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "confirma una transacción que fue preparada para two-phase commit" -#: sql_help.c:5125 +#: sql_help.c:5266 msgid "copy data between a file and a table" msgstr "copia datos entre un archivo y una tabla" -#: sql_help.c:5131 +#: sql_help.c:5272 msgid "define a new access method" msgstr "define un nuevo método de acceso" -#: sql_help.c:5137 +#: sql_help.c:5278 msgid "define a new aggregate function" msgstr "define una nueva función de agregación" -#: sql_help.c:5143 +#: sql_help.c:5284 msgid "define a new cast" msgstr "define una nueva conversión de tipo" -#: sql_help.c:5149 +#: sql_help.c:5290 msgid "define a new collation" msgstr "define un nuevo ordenamiento" -#: sql_help.c:5155 +#: sql_help.c:5296 msgid "define a new encoding conversion" msgstr "define una nueva conversión de codificación" -#: sql_help.c:5161 +#: sql_help.c:5302 msgid "create a new database" msgstr "crea una nueva base de datos" -#: sql_help.c:5167 +#: sql_help.c:5308 msgid "define a new domain" msgstr "define un nuevo dominio" -#: sql_help.c:5173 +#: sql_help.c:5314 msgid "define a new event trigger" msgstr "define un nuevo disparador por evento" -#: sql_help.c:5179 +#: sql_help.c:5320 msgid "install an extension" msgstr "instala una extensión" -#: sql_help.c:5185 +#: sql_help.c:5326 msgid "define a new foreign-data wrapper" msgstr "define un nuevo conector de datos externos" -#: sql_help.c:5191 +#: sql_help.c:5332 msgid "define a new foreign table" msgstr "define una nueva tabla foránea" -#: sql_help.c:5197 +#: sql_help.c:5338 msgid "define a new function" msgstr "define una nueva función" -#: sql_help.c:5203 sql_help.c:5263 sql_help.c:5365 +#: sql_help.c:5344 sql_help.c:5404 sql_help.c:5506 msgid "define a new database role" msgstr "define un nuevo rol de la base de datos" -#: sql_help.c:5209 +#: sql_help.c:5350 msgid "define a new index" msgstr "define un nuevo índice" -#: sql_help.c:5215 +#: sql_help.c:5356 msgid "define a new procedural language" msgstr "define un nuevo lenguaje procedural" -#: sql_help.c:5221 +#: sql_help.c:5362 msgid "define a new materialized view" msgstr "define una nueva vista materializada" -#: sql_help.c:5227 +#: sql_help.c:5368 msgid "define a new operator" msgstr "define un nuevo operador" -#: sql_help.c:5233 +#: sql_help.c:5374 msgid "define a new operator class" msgstr "define una nueva clase de operadores" -#: sql_help.c:5239 +#: sql_help.c:5380 msgid "define a new operator family" msgstr "define una nueva familia de operadores" -#: sql_help.c:5245 -msgid "define a new row level security policy for a table" +#: sql_help.c:5386 +#, fuzzy +#| msgid "define a new row level security policy for a table" +msgid "define a new row-level security policy for a table" msgstr "define una nueva política de seguridad de registros para una tabla" -#: sql_help.c:5251 +#: sql_help.c:5392 msgid "define a new procedure" msgstr "define un nuevo procedimiento" -#: sql_help.c:5257 +#: sql_help.c:5398 msgid "define a new publication" msgstr "define una nueva publicación" -#: sql_help.c:5269 +#: sql_help.c:5410 msgid "define a new rewrite rule" msgstr "define una nueva regla de reescritura" -#: sql_help.c:5275 +#: sql_help.c:5416 msgid "define a new schema" msgstr "define un nuevo schema" -#: sql_help.c:5281 +#: sql_help.c:5422 msgid "define a new sequence generator" msgstr "define un nuevo generador secuencial" -#: sql_help.c:5287 +#: sql_help.c:5428 msgid "define a new foreign server" msgstr "define un nuevo servidor foráneo" -#: sql_help.c:5293 +#: sql_help.c:5434 msgid "define extended statistics" msgstr "define estadísticas extendidas" -#: sql_help.c:5299 +#: sql_help.c:5440 msgid "define a new subscription" msgstr "define una nueva suscripción" -#: sql_help.c:5305 +#: sql_help.c:5446 msgid "define a new table" msgstr "define una nueva tabla" -#: sql_help.c:5311 sql_help.c:5827 +#: sql_help.c:5452 sql_help.c:5968 msgid "define a new table from the results of a query" msgstr "crea una nueva tabla usando los resultados de una consulta" -#: sql_help.c:5317 +#: sql_help.c:5458 msgid "define a new tablespace" msgstr "define un nuevo tablespace" -#: sql_help.c:5323 +#: sql_help.c:5464 msgid "define a new text search configuration" msgstr "define una nueva configuración de búsqueda en texto" -#: sql_help.c:5329 +#: sql_help.c:5470 msgid "define a new text search dictionary" msgstr "define un nuevo diccionario de búsqueda en texto" -#: sql_help.c:5335 +#: sql_help.c:5476 msgid "define a new text search parser" msgstr "define un nuevo analizador de búsqueda en texto" -#: sql_help.c:5341 +#: sql_help.c:5482 msgid "define a new text search template" msgstr "define una nueva plantilla de búsqueda en texto" -#: sql_help.c:5347 +#: sql_help.c:5488 msgid "define a new transform" msgstr "define una nueva transformación" -#: sql_help.c:5353 +#: sql_help.c:5494 msgid "define a new trigger" msgstr "define un nuevo disparador" -#: sql_help.c:5359 +#: sql_help.c:5500 msgid "define a new data type" msgstr "define un nuevo tipo de datos" -#: sql_help.c:5371 +#: sql_help.c:5512 msgid "define a new mapping of a user to a foreign server" msgstr "define un nuevo mapa de usuario a servidor foráneo" -#: sql_help.c:5377 +#: sql_help.c:5518 msgid "define a new view" msgstr "define una nueva vista" -#: sql_help.c:5383 +#: sql_help.c:5524 msgid "deallocate a prepared statement" msgstr "elimina una sentencia preparada" -#: sql_help.c:5389 +#: sql_help.c:5530 msgid "define a cursor" msgstr "define un nuevo cursor" -#: sql_help.c:5395 +#: sql_help.c:5536 msgid "delete rows of a table" msgstr "elimina filas de una tabla" -#: sql_help.c:5401 +#: sql_help.c:5542 msgid "discard session state" msgstr "descartar datos de la sesión" -#: sql_help.c:5407 +#: sql_help.c:5548 msgid "execute an anonymous code block" msgstr "ejecutar un bloque anónimo de código" -#: sql_help.c:5413 +#: sql_help.c:5554 msgid "remove an access method" msgstr "elimina un método de acceso" -#: sql_help.c:5419 +#: sql_help.c:5560 msgid "remove an aggregate function" msgstr "elimina una función de agregación" -#: sql_help.c:5425 +#: sql_help.c:5566 msgid "remove a cast" msgstr "elimina una conversión de tipo" -#: sql_help.c:5431 +#: sql_help.c:5572 msgid "remove a collation" msgstr "elimina un ordenamiento" -#: sql_help.c:5437 +#: sql_help.c:5578 msgid "remove a conversion" msgstr "elimina una conversión de codificación" -#: sql_help.c:5443 +#: sql_help.c:5584 msgid "remove a database" msgstr "elimina una base de datos" -#: sql_help.c:5449 +#: sql_help.c:5590 msgid "remove a domain" msgstr "elimina un dominio" -#: sql_help.c:5455 +#: sql_help.c:5596 msgid "remove an event trigger" msgstr "elimina un disparador por evento" -#: sql_help.c:5461 +#: sql_help.c:5602 msgid "remove an extension" msgstr "elimina una extensión" -#: sql_help.c:5467 +#: sql_help.c:5608 msgid "remove a foreign-data wrapper" msgstr "elimina un conector de datos externos" -#: sql_help.c:5473 +#: sql_help.c:5614 msgid "remove a foreign table" msgstr "elimina una tabla foránea" -#: sql_help.c:5479 +#: sql_help.c:5620 msgid "remove a function" msgstr "elimina una función" -#: sql_help.c:5485 sql_help.c:5551 sql_help.c:5653 +#: sql_help.c:5626 sql_help.c:5692 sql_help.c:5794 msgid "remove a database role" msgstr "elimina un rol de base de datos" -#: sql_help.c:5491 +#: sql_help.c:5632 msgid "remove an index" msgstr "elimina un índice" -#: sql_help.c:5497 +#: sql_help.c:5638 msgid "remove a procedural language" msgstr "elimina un lenguaje procedural" -#: sql_help.c:5503 +#: sql_help.c:5644 msgid "remove a materialized view" msgstr "elimina una vista materializada" -#: sql_help.c:5509 +#: sql_help.c:5650 msgid "remove an operator" msgstr "elimina un operador" -#: sql_help.c:5515 +#: sql_help.c:5656 msgid "remove an operator class" msgstr "elimina una clase de operadores" -#: sql_help.c:5521 +#: sql_help.c:5662 msgid "remove an operator family" msgstr "elimina una familia de operadores" -#: sql_help.c:5527 +#: sql_help.c:5668 msgid "remove database objects owned by a database role" msgstr "elimina objetos de propiedad de un rol de la base de datos" -#: sql_help.c:5533 -msgid "remove a row level security policy from a table" +#: sql_help.c:5674 +#, fuzzy +#| msgid "remove a row level security policy from a table" +msgid "remove a row-level security policy from a table" msgstr "elimina una política de seguridad de registros de una tabla" -#: sql_help.c:5539 +#: sql_help.c:5680 msgid "remove a procedure" msgstr "elimina un procedimiento" -#: sql_help.c:5545 +#: sql_help.c:5686 msgid "remove a publication" msgstr "elimina una publicación" -#: sql_help.c:5557 +#: sql_help.c:5698 msgid "remove a routine" msgstr "elimina una rutina" -#: sql_help.c:5563 +#: sql_help.c:5704 msgid "remove a rewrite rule" msgstr "elimina una regla de reescritura" -#: sql_help.c:5569 +#: sql_help.c:5710 msgid "remove a schema" msgstr "elimina un schema" -#: sql_help.c:5575 +#: sql_help.c:5716 msgid "remove a sequence" msgstr "elimina un generador secuencial" -#: sql_help.c:5581 +#: sql_help.c:5722 msgid "remove a foreign server descriptor" msgstr "elimina un descriptor de servidor foráneo" -#: sql_help.c:5587 +#: sql_help.c:5728 msgid "remove extended statistics" msgstr "elimina estadísticas extendidas" -#: sql_help.c:5593 +#: sql_help.c:5734 msgid "remove a subscription" msgstr "elimina una suscripción" -#: sql_help.c:5599 +#: sql_help.c:5740 msgid "remove a table" msgstr "elimina una tabla" -#: sql_help.c:5605 +#: sql_help.c:5746 msgid "remove a tablespace" msgstr "elimina un tablespace" -#: sql_help.c:5611 +#: sql_help.c:5752 msgid "remove a text search configuration" msgstr "elimina una configuración de búsqueda en texto" -#: sql_help.c:5617 +#: sql_help.c:5758 msgid "remove a text search dictionary" msgstr "elimina un diccionario de búsqueda en texto" -#: sql_help.c:5623 +#: sql_help.c:5764 msgid "remove a text search parser" msgstr "elimina un analizador de búsqueda en texto" -#: sql_help.c:5629 +#: sql_help.c:5770 msgid "remove a text search template" msgstr "elimina una plantilla de búsqueda en texto" -#: sql_help.c:5635 +#: sql_help.c:5776 msgid "remove a transform" msgstr "elimina una transformación" -#: sql_help.c:5641 +#: sql_help.c:5782 msgid "remove a trigger" msgstr "elimina un disparador" -#: sql_help.c:5647 +#: sql_help.c:5788 msgid "remove a data type" msgstr "elimina un tipo de datos" -#: sql_help.c:5659 +#: sql_help.c:5800 msgid "remove a user mapping for a foreign server" msgstr "elimina un mapeo de usuario para un servidor remoto" -#: sql_help.c:5665 +#: sql_help.c:5806 msgid "remove a view" msgstr "elimina una vista" -#: sql_help.c:5677 +#: sql_help.c:5818 msgid "execute a prepared statement" msgstr "ejecuta una sentencia preparada" -#: sql_help.c:5683 +#: sql_help.c:5824 msgid "show the execution plan of a statement" msgstr "muestra el plan de ejecución de una sentencia" -#: sql_help.c:5689 +#: sql_help.c:5830 msgid "retrieve rows from a query using a cursor" msgstr "recupera filas de una consulta usando un cursor" -#: sql_help.c:5695 +#: sql_help.c:5836 msgid "define access privileges" msgstr "define privilegios de acceso" -#: sql_help.c:5701 +#: sql_help.c:5842 msgid "import table definitions from a foreign server" msgstr "importa definiciones de tablas desde un servidor foráneo" -#: sql_help.c:5707 +#: sql_help.c:5848 msgid "create new rows in a table" msgstr "crea nuevas filas en una tabla" -#: sql_help.c:5713 +#: sql_help.c:5854 msgid "listen for a notification" msgstr "escucha notificaciones" -#: sql_help.c:5719 +#: sql_help.c:5860 msgid "load a shared library file" msgstr "carga un archivo de biblioteca compartida" -#: sql_help.c:5725 +#: sql_help.c:5866 msgid "lock a table" msgstr "bloquea una tabla" -#: sql_help.c:5731 +#: sql_help.c:5872 msgid "position a cursor" msgstr "reposiciona un cursor" -#: sql_help.c:5737 +#: sql_help.c:5878 msgid "generate a notification" msgstr "genera una notificación" -#: sql_help.c:5743 +#: sql_help.c:5884 msgid "prepare a statement for execution" msgstr "prepara una sentencia para ejecución" -#: sql_help.c:5749 +#: sql_help.c:5890 msgid "prepare the current transaction for two-phase commit" msgstr "prepara la transacción actual para two-phase commit" -#: sql_help.c:5755 +#: sql_help.c:5896 msgid "change the ownership of database objects owned by a database role" msgstr "cambia de dueño a los objetos de propiedad de un rol de la base de datos" -#: sql_help.c:5761 +#: sql_help.c:5902 msgid "replace the contents of a materialized view" msgstr "reemplaza los contenidos de una vista materializada" -#: sql_help.c:5767 +#: sql_help.c:5908 msgid "rebuild indexes" msgstr "reconstruye índices" -#: sql_help.c:5773 +#: sql_help.c:5914 msgid "destroy a previously defined savepoint" msgstr "destruye un savepoint previamente definido" -#: sql_help.c:5779 +#: sql_help.c:5920 msgid "restore the value of a run-time parameter to the default value" msgstr "restaura el valor de un parámetro de configuración al valor inicial" -#: sql_help.c:5785 +#: sql_help.c:5926 msgid "remove access privileges" msgstr "revoca privilegios de acceso" -#: sql_help.c:5797 +#: sql_help.c:5938 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "cancela una transacción que fue previamente preparada para two-phase commit" -#: sql_help.c:5803 +#: sql_help.c:5944 msgid "roll back to a savepoint" msgstr "descartar hacia un savepoint" -#: sql_help.c:5809 +#: sql_help.c:5950 msgid "define a new savepoint within the current transaction" msgstr "define un nuevo savepoint en la transacción en curso" -#: sql_help.c:5815 +#: sql_help.c:5956 msgid "define or change a security label applied to an object" msgstr "define o cambia una etiqueta de seguridad sobre un objeto" -#: sql_help.c:5821 sql_help.c:5875 sql_help.c:5911 +#: sql_help.c:5962 sql_help.c:6016 sql_help.c:6052 msgid "retrieve rows from a table or view" msgstr "recupera filas desde una tabla o vista" -#: sql_help.c:5833 +#: sql_help.c:5974 msgid "change a run-time parameter" msgstr "cambia un parámetro de configuración" -#: sql_help.c:5839 +#: sql_help.c:5980 msgid "set constraint check timing for the current transaction" msgstr "define el modo de verificación de las restricciones de la transacción en curso" -#: sql_help.c:5845 +#: sql_help.c:5986 msgid "set the current user identifier of the current session" msgstr "define el identificador de usuario actual de la sesión actual" -#: sql_help.c:5851 +#: sql_help.c:5992 msgid "set the session user identifier and the current user identifier of the current session" msgstr "" "define el identificador del usuario de sesión y el identificador\n" "del usuario actual de la sesión en curso" -#: sql_help.c:5857 +#: sql_help.c:5998 msgid "set the characteristics of the current transaction" msgstr "define las características de la transacción en curso" -#: sql_help.c:5863 +#: sql_help.c:6004 msgid "show the value of a run-time parameter" msgstr "muestra el valor de un parámetro de configuración" -#: sql_help.c:5881 +#: sql_help.c:6022 msgid "empty a table or set of tables" msgstr "vacía una tabla o conjunto de tablas" -#: sql_help.c:5887 +#: sql_help.c:6028 msgid "stop listening for a notification" msgstr "deja de escuchar una notificación" -#: sql_help.c:5893 +#: sql_help.c:6034 msgid "update rows of a table" msgstr "actualiza filas de una tabla" -#: sql_help.c:5899 +#: sql_help.c:6040 msgid "garbage-collect and optionally analyze a database" msgstr "recolecta basura y opcionalmente estadísticas sobre una base de datos" -#: sql_help.c:5905 +#: sql_help.c:6046 msgid "compute a set of rows" msgstr "calcula un conjunto de registros" -#: startup.c:212 +#: startup.c:213 #, c-format msgid "-1 can only be used in non-interactive mode" msgstr "-1 sólo puede ser usado en modo no interactivo" -#: startup.c:299 -#, c-format -msgid "could not connect to server: %s" -msgstr "no se pudo conectar al servidor: %s" - -#: startup.c:327 +#: startup.c:326 #, c-format msgid "could not open log file \"%s\": %m" msgstr "no se pudo abrir el archivo de registro «%s»: %m" -#: startup.c:439 +#: startup.c:438 #, c-format msgid "" "Type \"help\" for help.\n" @@ -6287,27 +6442,27 @@ msgstr "" "Digite «help» para obtener ayuda.\n" "\n" -#: startup.c:589 +#: startup.c:591 #, c-format msgid "could not set printing parameter \"%s\"" msgstr "no se pudo definir parámetro de impresión «%s»" -#: startup.c:697 +#: startup.c:699 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Use «%s --help» para obtener más información.\n" -#: startup.c:714 +#: startup.c:716 #, c-format msgid "extra command-line argument \"%s\" ignored" msgstr "se ignoró argumento extra «%s» en línea de órdenes" -#: startup.c:763 +#: startup.c:765 #, c-format msgid "could not find own program executable" msgstr "no se pudo encontrar el ejecutable propio" -#: tab-complete.c:4640 +#: tab-complete.c:4896 #, c-format msgid "" "tab completion query failed: %s\n" @@ -6333,7 +6488,7 @@ msgstr "valor «%s» no válido para «%s»: se esperaba número entero" msgid "invalid variable name: \"%s\"" msgstr "nombre de variable no válido: «%s»" -#: variables.c:393 +#: variables.c:419 #, c-format msgid "" "unrecognized value \"%s\" for \"%s\"\n" @@ -6341,3 +6496,15 @@ msgid "" msgstr "" "valor «%s» no reconocido para «%s»\n" "Los valores disponibles son: %s." + +#~ msgid "could not connect to server: %s" +#~ msgstr "no se pudo conectar al servidor: %s" + +#~ msgid "All connection parameters must be supplied because no database connection exists" +#~ msgstr "Debe proveer todos los parámetros de conexión porque no existe conexión a una base de datos" + +#~ msgid "Could not send cancel request: %s" +#~ msgstr "No se pudo enviar el paquete de cancelación: %s" + +#~ msgid "pclose failed: %m" +#~ msgstr "pclose falló: %m" diff --git a/src/bin/scripts/po/es.po b/src/bin/scripts/po/es.po index 151b9b5d4149d..335561c9342db 100644 --- a/src/bin/scripts/po/es.po +++ b/src/bin/scripts/po/es.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: pgscripts (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:46+0000\n" +"POT-Creation-Date: 2021-05-14 19:48+0000\n" "PO-Revision-Date: 2020-10-16 16:01-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -23,17 +23,17 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.0.2\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "fatal: " -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "error: " -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "precaución: " @@ -67,82 +67,112 @@ msgstr "fallo en la búsqueda de nombre de usuario: código de error %lu" msgid "Cancel request sent\n" msgstr "Petición de cancelación enviada\n" -#: ../../fe_utils/cancel.c:165 +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 msgid "Could not send cancel request: " msgstr "No se pudo enviar el paquete de cancelación: " -#: ../../fe_utils/cancel.c:210 +#: ../../fe_utils/connect_utils.c:49 ../../fe_utils/connect_utils.c:107 +msgid "Password: " +msgstr "Contraseña: " + +#: ../../fe_utils/connect_utils.c:92 #, c-format -msgid "Could not send cancel request: %s" -msgstr "No se pudo enviar el paquete de cancelación: %s" +msgid "could not connect to database %s: out of memory" +msgstr "no se pudo conectar a la base de datos %s: memoria agotada" -#: ../../fe_utils/print.c:350 +#: ../../fe_utils/connect_utils.c:120 pg_isready.c:145 +#, c-format +msgid "%s" +msgstr "%s" + +#: ../../fe_utils/parallel_slot.c:302 +#, fuzzy, c-format +#| msgid "too many jobs for this platform -- try %d" +msgid "too many jobs for this platform" +msgstr "demasiados procesos para esta plataforma -- intente con %d" + +#: ../../fe_utils/parallel_slot.c:522 +#, c-format +msgid "processing of database \"%s\" failed: %s" +msgstr "falló el procesamiento de la base de datos «%s»: %s" + +#: ../../fe_utils/print.c:336 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu fila)" msgstr[1] "(%lu filas)" -#: ../../fe_utils/print.c:3055 +#: ../../fe_utils/print.c:3039 #, c-format msgid "Interrupted\n" msgstr "Interrumpido\n" -#: ../../fe_utils/print.c:3119 +#: ../../fe_utils/print.c:3103 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "No se puede agregar un encabezado al contenido de la tabla: la cantidad de columnas de %d ha sido excedida.\n" -#: ../../fe_utils/print.c:3159 +#: ../../fe_utils/print.c:3143 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "No se puede agregar una celda al contenido de la tabla: la cantidad de celdas de %d ha sido excedida.\n" -#: ../../fe_utils/print.c:3414 +#: ../../fe_utils/print.c:3401 #, c-format msgid "invalid output format (internal error): %d" msgstr "formato de salida no válido (error interno): %d" -#: clusterdb.c:114 clusterdb.c:133 createdb.c:121 createdb.c:140 -#: createuser.c:171 createuser.c:186 dropdb.c:101 dropdb.c:110 dropdb.c:118 -#: dropuser.c:92 dropuser.c:107 dropuser.c:122 pg_isready.c:95 pg_isready.c:109 -#: reindexdb.c:168 reindexdb.c:187 vacuumdb.c:227 vacuumdb.c:246 +#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 +#, c-format +msgid "query failed: %s" +msgstr "la consulta falló: %s" + +#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 +#, c-format +msgid "query was: %s" +msgstr "la consulta era: %s" + +#: clusterdb.c:112 clusterdb.c:131 createdb.c:123 createdb.c:142 +#: createuser.c:172 createuser.c:187 dropdb.c:103 dropdb.c:112 dropdb.c:120 +#: dropuser.c:94 dropuser.c:109 dropuser.c:122 pg_isready.c:96 pg_isready.c:110 +#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:245 vacuumdb.c:264 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Use «%s --help» para mayor información.\n" -#: clusterdb.c:131 createdb.c:138 createuser.c:184 dropdb.c:116 dropuser.c:105 -#: pg_isready.c:107 reindexdb.c:185 vacuumdb.c:244 +#: clusterdb.c:129 createdb.c:140 createuser.c:185 dropdb.c:118 dropuser.c:107 +#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:262 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: clusterdb.c:143 +#: clusterdb.c:148 #, c-format msgid "cannot cluster all databases and a specific one at the same time" msgstr "no se pueden reordenar todas las bases de datos y una de ellas en particular simultáneamente" -#: clusterdb.c:149 +#: clusterdb.c:154 #, c-format msgid "cannot cluster specific table(s) in all databases" msgstr "no es posible reordenar tablas específicas en todas las bases de datos" -#: clusterdb.c:217 +#: clusterdb.c:220 #, c-format msgid "clustering of table \"%s\" in database \"%s\" failed: %s" msgstr "falló el reordenamiento de la tabla «%s» en la base de datos «%s»: %s" -#: clusterdb.c:220 +#: clusterdb.c:223 #, c-format msgid "clustering of database \"%s\" failed: %s" msgstr "falló el reordenamiento de la base de datos «%s»: %s" -#: clusterdb.c:253 +#: clusterdb.c:251 #, c-format msgid "%s: clustering database \"%s\"\n" msgstr "%s: reordenando la base de datos «%s»\n" -#: clusterdb.c:274 +#: clusterdb.c:267 #, c-format msgid "" "%s clusters all previously clustered tables in a database.\n" @@ -152,19 +182,19 @@ msgstr "" "en una base de datos.\n" "\n" -#: clusterdb.c:275 createdb.c:259 createuser.c:347 dropdb.c:164 dropuser.c:163 -#: pg_isready.c:224 reindexdb.c:753 vacuumdb.c:921 +#: clusterdb.c:268 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169 +#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:988 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: clusterdb.c:276 reindexdb.c:754 vacuumdb.c:922 +#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:989 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPCIÓN]... [BASE-DE-DATOS]\n" -#: clusterdb.c:277 createdb.c:261 createuser.c:349 dropdb.c:166 dropuser.c:165 -#: pg_isready.c:227 reindexdb.c:755 vacuumdb.c:923 +#: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171 +#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:990 #, c-format msgid "" "\n" @@ -173,48 +203,48 @@ msgstr "" "\n" "Opciones:\n" -#: clusterdb.c:278 +#: clusterdb.c:271 #, c-format msgid " -a, --all cluster all databases\n" msgstr " -a, --all reordenar todas las bases de datos\n" -#: clusterdb.c:279 +#: clusterdb.c:272 #, c-format msgid " -d, --dbname=DBNAME database to cluster\n" msgstr " -d, --dbname=BASE base de datos a reordenar\n" -#: clusterdb.c:280 createuser.c:353 dropdb.c:167 dropuser.c:166 reindexdb.c:759 +#: clusterdb.c:273 createuser.c:357 dropdb.c:174 dropuser.c:172 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo mostrar las órdenes a medida que se ejecutan\n" -#: clusterdb.c:281 reindexdb.c:762 +#: clusterdb.c:274 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet no escribir ningún mensaje\n" -#: clusterdb.c:282 +#: clusterdb.c:275 #, c-format msgid " -t, --table=TABLE cluster specific table(s) only\n" msgstr " -t, --table=TABLA reordenar sólo esta(s) tabla(s)\n" -#: clusterdb.c:283 reindexdb.c:766 +#: clusterdb.c:276 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose desplegar varios mensajes informativos\n" -#: clusterdb.c:284 createuser.c:365 dropdb.c:170 dropuser.c:169 reindexdb.c:767 +#: clusterdb.c:277 createuser.c:369 dropdb.c:177 dropuser.c:175 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión y salir\n" -#: clusterdb.c:285 createuser.c:370 dropdb.c:172 dropuser.c:171 reindexdb.c:768 +#: clusterdb.c:278 createuser.c:374 dropdb.c:179 dropuser.c:177 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: clusterdb.c:286 createdb.c:272 createuser.c:371 dropdb.c:173 dropuser.c:172 -#: pg_isready.c:233 reindexdb.c:769 vacuumdb.c:944 +#: clusterdb.c:279 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178 +#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1014 #, c-format msgid "" "\n" @@ -223,41 +253,37 @@ msgstr "" "\n" "Opciones de conexión:\n" -#: clusterdb.c:287 createuser.c:372 dropdb.c:174 dropuser.c:173 reindexdb.c:770 -#: vacuumdb.c:945 +#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1015 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=ANFITRIÓN nombre del servidor o directorio del socket\n" -#: clusterdb.c:288 createuser.c:373 dropdb.c:175 dropuser.c:174 reindexdb.c:771 -#: vacuumdb.c:946 +#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1016 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PUERTO puerto del servidor\n" -#: clusterdb.c:289 dropdb.c:176 reindexdb.c:772 vacuumdb.c:947 +#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1017 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USUARIO nombre de usuario para la conexión\n" -#: clusterdb.c:290 createuser.c:375 dropdb.c:177 dropuser.c:176 reindexdb.c:773 -#: vacuumdb.c:948 +#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1018 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pedir contraseña\n" -#: clusterdb.c:291 createuser.c:376 dropdb.c:178 dropuser.c:177 reindexdb.c:774 -#: vacuumdb.c:949 +#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1019 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password forzar la petición de contraseña\n" -#: clusterdb.c:292 dropdb.c:179 reindexdb.c:775 vacuumdb.c:950 +#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1020 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=BASE base de datos de mantención alternativa\n" -#: clusterdb.c:293 +#: clusterdb.c:286 #, c-format msgid "" "\n" @@ -266,8 +292,8 @@ msgstr "" "\n" "Lea la descripción de la orden CLUSTER de SQL para obtener mayores detalles.\n" -#: clusterdb.c:294 createdb.c:280 createuser.c:377 dropdb.c:180 dropuser.c:178 -#: pg_isready.c:238 reindexdb.c:777 vacuumdb.c:952 +#: clusterdb.c:287 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184 +#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1022 #, c-format msgid "" "\n" @@ -276,42 +302,13 @@ msgstr "" "\n" "Reporte errores a <%s>.\n" -#: clusterdb.c:295 createdb.c:281 createuser.c:378 dropdb.c:181 dropuser.c:179 -#: pg_isready.c:239 reindexdb.c:778 vacuumdb.c:953 +#: clusterdb.c:288 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185 +#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1023 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: common.c:79 common.c:125 -msgid "Password: " -msgstr "Contraseña: " - -#: common.c:112 -#, c-format -msgid "could not connect to database %s: out of memory" -msgstr "no se pudo conectar a la base de datos %s: memoria agotada" - -#: common.c:139 -#, c-format -msgid "could not connect to database %s: %s" -msgstr "no se pudo conectar a la base de datos %s: %s" - -#: common.c:214 common.c:239 -#, c-format -msgid "query failed: %s" -msgstr "la consulta falló: %s" - -#: common.c:215 common.c:240 -#, c-format -msgid "query was: %s" -msgstr "la consulta era: %s" - -#: common.c:312 -#, c-format -msgid "processing of database \"%s\" failed: %s" -msgstr "falló el procesamiento de la base de datos «%s»: %s" - -#: common.c:406 +#: common.c:107 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" @@ -319,53 +316,53 @@ msgstr[0] "la consulta retornó %d fila en lugar de una: %s" msgstr[1] "la consulta retornó %d filas en lugar de una: %s" #. translator: abbreviation for "yes" -#: common.c:430 +#: common.c:131 msgid "y" msgstr "s" #. translator: abbreviation for "no" -#: common.c:432 +#: common.c:133 msgid "n" msgstr "n" #. translator: This is a question followed by the translated options for #. "yes" and "no". -#: common.c:442 +#: common.c:143 #, c-format msgid "%s (%s/%s) " msgstr "%s (%s/%s) " -#: common.c:456 +#: common.c:164 #, c-format msgid "Please answer \"%s\" or \"%s\".\n" msgstr "Por favor conteste «%s» o «%s».\n" -#: createdb.c:148 +#: createdb.c:150 #, c-format msgid "only one of --locale and --lc-ctype can be specified" msgstr "sólo uno de --locale y --lc-ctype puede ser especificado" -#: createdb.c:153 +#: createdb.c:155 #, c-format msgid "only one of --locale and --lc-collate can be specified" msgstr "sólo uno de --locale y --lc-collate puede ser especificado" -#: createdb.c:164 +#: createdb.c:166 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "«%s» no es un nombre válido de codificación" -#: createdb.c:221 +#: createdb.c:229 #, c-format msgid "database creation failed: %s" msgstr "falló la creación de la base de datos: %s" -#: createdb.c:240 +#: createdb.c:248 #, c-format msgid "comment creation failed (database was created): %s" msgstr "falló la creación del comentario (la base de datos fue creada): %s" -#: createdb.c:258 +#: createdb.c:266 #, c-format msgid "" "%s creates a PostgreSQL database.\n" @@ -374,92 +371,92 @@ msgstr "" "%s crea una base de datos PostgreSQL.\n" "\n" -#: createdb.c:260 +#: createdb.c:268 #, c-format msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n" msgstr " %s [OPCIÓN]... [NOMBRE] [DESCRIPCIÓN]\n" -#: createdb.c:262 +#: createdb.c:270 #, c-format msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n" msgstr " -D, --tablespace=TBLSPC tablespace por omisión de la base de datos\n" -#: createdb.c:263 +#: createdb.c:271 reindexdb.c:798 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo mostrar las órdenes enviadas al servidor\n" -#: createdb.c:264 +#: createdb.c:272 #, c-format msgid " -E, --encoding=ENCODING encoding for the database\n" msgstr " -E, --encoding=CODIF codificación para la base de datos\n" -#: createdb.c:265 +#: createdb.c:273 #, c-format msgid " -l, --locale=LOCALE locale settings for the database\n" msgstr " -l, --locale=LOCALE configuración regional para la base de datos\n" -#: createdb.c:266 +#: createdb.c:274 #, c-format msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n" msgstr " --lc-collate=LOCALE configuración LC_COLLATE para la base de datos\n" -#: createdb.c:267 +#: createdb.c:275 #, c-format msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n" msgstr " --lc-ctype=LOCALE configuración LC_CTYPE para la base de datos\n" -#: createdb.c:268 +#: createdb.c:276 #, c-format msgid " -O, --owner=OWNER database user to own the new database\n" msgstr " -O, --owner=DUEÑO usuario que será dueño de la base de datos\n" -#: createdb.c:269 +#: createdb.c:277 #, c-format msgid " -T, --template=TEMPLATE template database to copy\n" msgstr " -T, --template=PATRÓN base de datos patrón a copiar\n" -#: createdb.c:270 +#: createdb.c:278 reindexdb.c:807 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión y salir\n" -#: createdb.c:271 +#: createdb.c:279 reindexdb.c:808 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: createdb.c:273 +#: createdb.c:281 reindexdb.c:810 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=ANFITRIÓN nombre del servidor o directorio del socket\n" -#: createdb.c:274 +#: createdb.c:282 reindexdb.c:811 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PUERTO puerto del servidor\n" -#: createdb.c:275 +#: createdb.c:283 reindexdb.c:812 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USUARIO nombre de usuario para la conexión\n" -#: createdb.c:276 +#: createdb.c:284 reindexdb.c:813 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pedir contraseña\n" -#: createdb.c:277 +#: createdb.c:285 reindexdb.c:814 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password forzar la petición de contraseña\n" -#: createdb.c:278 +#: createdb.c:286 reindexdb.c:815 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=BASE base de datos de mantención alternativa\n" -#: createdb.c:279 +#: createdb.c:287 #, c-format msgid "" "\n" @@ -469,51 +466,51 @@ msgstr "" "Si no se especifica, se creará una base de datos con el mismo nombre que\n" "el usuario actual.\n" -#: createuser.c:150 +#: createuser.c:151 #, c-format msgid "invalid value for --connection-limit: %s" msgstr "valor para --connection-limit no válido: %s" -#: createuser.c:194 +#: createuser.c:195 msgid "Enter name of role to add: " msgstr "Ingrese el nombre del rol a agregar: " -#: createuser.c:211 +#: createuser.c:210 msgid "Enter password for new role: " msgstr "Ingrese la contraseña para el nuevo rol: " -#: createuser.c:213 +#: createuser.c:211 msgid "Enter it again: " msgstr "Ingrésela nuevamente: " -#: createuser.c:216 +#: createuser.c:214 #, c-format msgid "Passwords didn't match.\n" msgstr "Las contraseñas no coinciden.\n" -#: createuser.c:224 +#: createuser.c:222 msgid "Shall the new role be a superuser?" msgstr "¿Será el nuevo rol un superusuario?" -#: createuser.c:239 +#: createuser.c:237 msgid "Shall the new role be allowed to create databases?" msgstr "¿Debe permitírsele al rol la creación de bases de datos?" -#: createuser.c:247 +#: createuser.c:245 msgid "Shall the new role be allowed to create more new roles?" msgstr "¿Debe permitírsele al rol la creación de otros roles?" -#: createuser.c:277 +#: createuser.c:281 #, c-format msgid "password encryption failed: %s" msgstr "el cifrado de la contraseña falló: %s" -#: createuser.c:332 +#: createuser.c:336 #, c-format msgid "creation of new role failed: %s" msgstr "falló la creación del nuevo rol: %s" -#: createuser.c:346 +#: createuser.c:350 #, c-format msgid "" "%s creates a new PostgreSQL role.\n" @@ -522,34 +519,34 @@ msgstr "" "%s crea un nuevo rol de PostgreSQL.\n" "\n" -#: createuser.c:348 dropuser.c:164 +#: createuser.c:352 dropuser.c:170 #, c-format msgid " %s [OPTION]... [ROLENAME]\n" msgstr " %s [OPCIÓN]... [ROL]\n" -#: createuser.c:350 +#: createuser.c:354 #, c-format msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n" msgstr "" " -c, --connection-limit=N límite de conexiones para el rol\n" " (predeterminado: sin límite)\n" -#: createuser.c:351 +#: createuser.c:355 #, c-format msgid " -d, --createdb role can create new databases\n" msgstr " -d, --createdb el rol podrá crear bases de datos\n" -#: createuser.c:352 +#: createuser.c:356 #, c-format msgid " -D, --no-createdb role cannot create databases (default)\n" msgstr " -D, --no-createdb el rol no podrá crear bases de datos (predeterm.)\n" -#: createuser.c:354 +#: createuser.c:358 #, c-format msgid " -g, --role=ROLE new role will be a member of this role\n" msgstr " -g, --role=ROL el nuevo rol será un miembro de este rol\n" -#: createuser.c:355 +#: createuser.c:359 #, c-format msgid "" " -i, --inherit role inherits privileges of roles it is a\n" @@ -558,47 +555,47 @@ msgstr "" " -i, --inherit el rol heredará los privilegios de los roles de\n" " los cuales es miembro (predeterminado)\n" -#: createuser.c:357 +#: createuser.c:361 #, c-format msgid " -I, --no-inherit role does not inherit privileges\n" msgstr " -I, --no-inherit rol no heredará privilegios\n" -#: createuser.c:358 +#: createuser.c:362 #, c-format msgid " -l, --login role can login (default)\n" msgstr " -l, --login el rol podrá conectarse (predeterminado)\n" -#: createuser.c:359 +#: createuser.c:363 #, c-format msgid " -L, --no-login role cannot login\n" msgstr " -L, --no-login el rol no podrá conectarse\n" -#: createuser.c:360 +#: createuser.c:364 #, c-format msgid " -P, --pwprompt assign a password to new role\n" msgstr " -P, --pwprompt asignar una contraseña al nuevo rol\n" -#: createuser.c:361 +#: createuser.c:365 #, c-format msgid " -r, --createrole role can create new roles\n" msgstr " -r, --createrole el rol podrá crear otros roles\n" -#: createuser.c:362 +#: createuser.c:366 #, c-format msgid " -R, --no-createrole role cannot create roles (default)\n" msgstr " -R, --no-createrole el rol no podrá crear otros roles (predeterminado)\n" -#: createuser.c:363 +#: createuser.c:367 #, c-format msgid " -s, --superuser role will be superuser\n" msgstr " -s, --superuser el rol será un superusuario\n" -#: createuser.c:364 +#: createuser.c:368 #, c-format msgid " -S, --no-superuser role will not be superuser (default)\n" msgstr " -S, --no-superuser el rol no será un superusuario (predeterminado)\n" -#: createuser.c:366 +#: createuser.c:370 #, c-format msgid "" " --interactive prompt for missing role name and attributes rather\n" @@ -607,43 +604,43 @@ msgstr "" " --interactive preguntar los nombres y atributos de rol faltantes\n" " en lugar de asumir los valores por omisión\n" -#: createuser.c:368 +#: createuser.c:372 #, c-format msgid " --replication role can initiate replication\n" msgstr " --replication el rol podrá iniciar replicación\n" -#: createuser.c:369 +#: createuser.c:373 #, c-format msgid " --no-replication role cannot initiate replication\n" msgstr " --no-replication el rol no podrá iniciar replicación\n" -#: createuser.c:374 +#: createuser.c:378 #, c-format msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n" msgstr "" " -U, --username=NOMBRE nombre de usuario con el cual conectarse\n" " (no el usuario a crear)\n" -#: dropdb.c:109 +#: dropdb.c:111 #, c-format msgid "missing required argument database name" msgstr "falta el nombre de base de datos requerido" -#: dropdb.c:124 +#: dropdb.c:126 #, c-format msgid "Database \"%s\" will be permanently removed.\n" msgstr "La base de datos «%s» será eliminada permanentemente.\n" -#: dropdb.c:125 dropuser.c:130 +#: dropdb.c:127 dropuser.c:130 msgid "Are you sure?" msgstr "¿Está seguro?" -#: dropdb.c:149 +#: dropdb.c:156 #, c-format msgid "database removal failed: %s" msgstr "falló la eliminación de la base de datos: %s" -#: dropdb.c:163 +#: dropdb.c:170 #, c-format msgid "" "%s removes a PostgreSQL database.\n" @@ -652,27 +649,27 @@ msgstr "" "%s elimina una base de datos de PostgreSQL.\n" "\n" -#: dropdb.c:165 +#: dropdb.c:172 #, c-format msgid " %s [OPTION]... DBNAME\n" msgstr " %s [OPCIÓN]... BASE-DE-DATOS\n" -#: dropdb.c:168 +#: dropdb.c:175 #, c-format msgid " -f, --force try to terminate other connections before dropping\n" msgstr " -f, --force intentar cancelar otras conexiones antes de borrar\n" -#: dropdb.c:169 +#: dropdb.c:176 #, c-format msgid " -i, --interactive prompt before deleting anything\n" msgstr " -i, --interactive preguntar antes de eliminar\n" -#: dropdb.c:171 +#: dropdb.c:178 #, c-format msgid " --if-exists don't report error if database doesn't exist\n" msgstr " --if-exists no reportar error si la base de datos no existe\n" -#: dropuser.c:115 +#: dropuser.c:117 msgid "Enter name of role to drop: " msgstr "Ingrese el nombre del rol a eliminar: " @@ -686,12 +683,12 @@ msgstr "falta el nombre de rol requerido" msgid "Role \"%s\" will be permanently removed.\n" msgstr "El rol «%s» será eliminado permanentemente.\n" -#: dropuser.c:147 +#: dropuser.c:153 #, c-format msgid "removal of role \"%s\" failed: %s" msgstr "falló la eliminación del rol «%s»: %s" -#: dropuser.c:162 +#: dropuser.c:168 #, c-format msgid "" "%s removes a PostgreSQL role.\n" @@ -700,7 +697,7 @@ msgstr "" "%s elimina un rol de PostgreSQL.\n" "\n" -#: dropuser.c:167 +#: dropuser.c:173 #, c-format msgid "" " -i, --interactive prompt before deleting anything, and prompt for\n" @@ -709,54 +706,49 @@ msgstr "" " -i, --interactive preguntar antes de eliminar cualquier cosa, y\n" " preguntar el nombre de rol si no se especifica\n" -#: dropuser.c:170 +#: dropuser.c:176 #, c-format msgid " --if-exists don't report error if user doesn't exist\n" msgstr " --if-exists no reportar error si el usuario no existe\n" -#: dropuser.c:175 +#: dropuser.c:181 #, c-format msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n" msgstr "" " -U, --username=USUARIO nombre del usuario con el cual conectarse\n" " (no el usuario a eliminar)\n" -#: pg_isready.c:144 -#, c-format -msgid "%s" -msgstr "%s" - -#: pg_isready.c:152 +#: pg_isready.c:153 #, c-format msgid "could not fetch default options" msgstr "no se pudo extraer las opciones por omisión" -#: pg_isready.c:201 +#: pg_isready.c:202 #, c-format msgid "accepting connections\n" msgstr "aceptando conexiones\n" -#: pg_isready.c:204 +#: pg_isready.c:205 #, c-format msgid "rejecting connections\n" msgstr "rechazando conexiones\n" -#: pg_isready.c:207 +#: pg_isready.c:208 #, c-format msgid "no response\n" msgstr "sin respuesta\n" -#: pg_isready.c:210 +#: pg_isready.c:211 #, c-format msgid "no attempt\n" msgstr "sin intentos\n" -#: pg_isready.c:213 +#: pg_isready.c:214 #, c-format msgid "unknown\n" msgstr "desconocido\n" -#: pg_isready.c:223 +#: pg_isready.c:224 #, c-format msgid "" "%s issues a connection check to a PostgreSQL database.\n" @@ -765,150 +757,150 @@ msgstr "" "%s emite una prueba de conexión a una base de datos PostgreSQL.\n" "\n" -#: pg_isready.c:225 +#: pg_isready.c:226 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPCIÓN]...\n" -#: pg_isready.c:228 +#: pg_isready.c:229 #, c-format msgid " -d, --dbname=DBNAME database name\n" msgstr " -d, --dbname=DBNAME nombre de la base de datos\n" -#: pg_isready.c:229 +#: pg_isready.c:230 #, c-format msgid " -q, --quiet run quietly\n" msgstr " -q, --quiet ejecutar de forma silenciosa\n" -#: pg_isready.c:230 +#: pg_isready.c:231 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión y salir\n" -#: pg_isready.c:231 +#: pg_isready.c:232 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: pg_isready.c:234 +#: pg_isready.c:235 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=ANFITRIÓN nombre del servidor o directorio del socket\n" -#: pg_isready.c:235 +#: pg_isready.c:236 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PUERTO puerto del servidor\n" -#: pg_isready.c:236 +#: pg_isready.c:237 #, c-format msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n" msgstr "" " -t, --timeout=SEGUNDOS segundos a esperar al intentar conectarse\n" " 0 lo deshabilita (por omisión: %s)\n" -#: pg_isready.c:237 +#: pg_isready.c:238 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USUARIO nombre de usuario para la conexión\n" -#: reindexdb.c:154 vacuumdb.c:186 +#: reindexdb.c:157 vacuumdb.c:195 #, c-format msgid "number of parallel jobs must be at least 1" msgstr "número de trabajos en paralelo debe ser al menos 1" -#: reindexdb.c:197 +#: reindexdb.c:210 #, c-format msgid "cannot reindex all databases and a specific one at the same time" msgstr "no se pueden reindexar todas las bases de datos y una de ellas en particular simultáneamente" -#: reindexdb.c:202 +#: reindexdb.c:215 #, c-format msgid "cannot reindex all databases and system catalogs at the same time" msgstr "no se pueden reindexar todas las bases de datos y los catálogos del sistema simultáneamente" -#: reindexdb.c:207 +#: reindexdb.c:220 #, c-format msgid "cannot reindex specific schema(s) in all databases" msgstr "no es posible reindexar esquemas específicos en todas las bases de datos" -#: reindexdb.c:212 +#: reindexdb.c:225 #, c-format msgid "cannot reindex specific table(s) in all databases" msgstr "no es posible reindexar tablas específicas en todas las bases de datos" -#: reindexdb.c:217 +#: reindexdb.c:230 #, c-format msgid "cannot reindex specific index(es) in all databases" msgstr "no es posible reindexar índices específicos en todas las bases de datos" -#: reindexdb.c:229 +#: reindexdb.c:243 #, c-format msgid "cannot reindex specific schema(s) and system catalogs at the same time" msgstr "no es posible reindexar esquemas específicos y los catálogos del sistema simultáneamente" -#: reindexdb.c:234 +#: reindexdb.c:248 #, c-format msgid "cannot reindex specific table(s) and system catalogs at the same time" msgstr "no es posible reindexar tablas específicas y los catálogos del sistema simultáneamente" -#: reindexdb.c:239 +#: reindexdb.c:253 #, c-format msgid "cannot reindex specific index(es) and system catalogs at the same time" msgstr "no es posible reindexar índices específicos y los catálogos del sistema simultáneamente" -#: reindexdb.c:245 +#: reindexdb.c:259 #, c-format msgid "cannot use multiple jobs to reindex system catalogs" msgstr "no se pueden usar múltiples procesos para reindexar índices de sistema" -#: reindexdb.c:272 +#: reindexdb.c:288 #, c-format msgid "cannot use multiple jobs to reindex indexes" msgstr "no se pueden usar múltiples procesos para reindexar índices" -#: reindexdb.c:337 vacuumdb.c:410 vacuumdb.c:418 vacuumdb.c:425 vacuumdb.c:432 -#: vacuumdb.c:439 +#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:451 vacuumdb.c:459 vacuumdb.c:467 +#: vacuumdb.c:475 vacuumdb.c:483 vacuumdb.c:490 vacuumdb.c:497 vacuumdb.c:504 #, c-format msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s" msgstr "no se puede usar la opción «%s» cuando con versiones más antiguas que PostgreSQL %s" -#: reindexdb.c:377 +#: reindexdb.c:401 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "no se puede reindexar un catálogo de sistema concurrentemente, omitiéndolos todos" -#: reindexdb.c:558 +#: reindexdb.c:605 #, c-format msgid "reindexing of database \"%s\" failed: %s" msgstr "falló la reindexación de la base de datos «%s»: %s" -#: reindexdb.c:562 +#: reindexdb.c:609 #, c-format msgid "reindexing of index \"%s\" in database \"%s\" failed: %s" msgstr "falló la reindexación del índice «%s» en la base de datos «%s»: %s" -#: reindexdb.c:566 +#: reindexdb.c:613 #, c-format msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s" msgstr "falló la reindexación del esquema «%s» en la base de datos «%s»: %s" -#: reindexdb.c:570 +#: reindexdb.c:617 #, c-format msgid "reindexing of system catalogs in database \"%s\" failed: %s" msgstr "falló la reindexación de los catálogos de sistema en la base de datos «%s»: %s" -#: reindexdb.c:574 +#: reindexdb.c:621 #, c-format msgid "reindexing of table \"%s\" in database \"%s\" failed: %s" msgstr "falló la reindexación de la tabla «%s» en la base de datos «%s»: %s" -#: reindexdb.c:731 +#: reindexdb.c:774 #, c-format msgid "%s: reindexing database \"%s\"\n" msgstr "%s: reindexando la base de datos «%s»\n" -#: reindexdb.c:752 +#: reindexdb.c:791 #, c-format msgid "" "%s reindexes a PostgreSQL database.\n" @@ -917,47 +909,73 @@ msgstr "" "%s reindexa una base de datos PostgreSQL.\n" "\n" -#: reindexdb.c:756 -#, c-format -msgid " -a, --all reindex all databases\n" +#: reindexdb.c:795 +#, fuzzy, c-format +#| msgid " -a, --all reindex all databases\n" +msgid " -a, --all reindex all databases\n" msgstr " -a, --all reindexar todas las bases de datos\n" -#: reindexdb.c:757 -#, c-format -msgid " --concurrently reindex concurrently\n" +#: reindexdb.c:796 +#, fuzzy, c-format +#| msgid " --concurrently reindex concurrently\n" +msgid " --concurrently reindex concurrently\n" msgstr " --concurrently reindexar en modo concurrente\n" -#: reindexdb.c:758 -#, c-format -msgid " -d, --dbname=DBNAME database to reindex\n" +#: reindexdb.c:797 +#, fuzzy, c-format +#| msgid " -d, --dbname=DBNAME database to reindex\n" +msgid " -d, --dbname=DBNAME database to reindex\n" msgstr " -d, --dbname=DBNAME base de datos a reindexar\n" -#: reindexdb.c:760 -#, c-format -msgid " -i, --index=INDEX recreate specific index(es) only\n" +#: reindexdb.c:799 +#, fuzzy, c-format +#| msgid " -i, --index=INDEX recreate specific index(es) only\n" +msgid " -i, --index=INDEX recreate specific index(es) only\n" msgstr " -i, --index=INDEX recrear sólo este o estos índice(s)\n" -#: reindexdb.c:761 -#, c-format -msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n" +#: reindexdb.c:800 +#, fuzzy, c-format +#| msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n" +msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n" msgstr " -j, --jobs=NUM usar esta cantidad de conexiones concurrentes\n" -#: reindexdb.c:763 -#, c-format -msgid " -s, --system reindex system catalogs\n" +#: reindexdb.c:801 +#, fuzzy, c-format +#| msgid " -q, --quiet don't write any messages\n" +msgid " -q, --quiet don't write any messages\n" +msgstr " -q, --quiet no desplegar mensajes\n" + +#: reindexdb.c:802 +#, fuzzy, c-format +#| msgid " -s, --system reindex system catalogs\n" +msgid " -s, --system reindex system catalogs\n" msgstr " -s, --system reindexa los catálogos del sistema\n" -#: reindexdb.c:764 -#, c-format -msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" +#: reindexdb.c:803 +#, fuzzy, c-format +#| msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" +msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" msgstr " -S, --schema=ESQUEMA reindexar sólo este o estos esquemas\n" -#: reindexdb.c:765 -#, c-format -msgid " -t, --table=TABLE reindex specific table(s) only\n" +#: reindexdb.c:804 +#, fuzzy, c-format +#| msgid " -t, --table=TABLE reindex specific table(s) only\n" +msgid " -t, --table=TABLE reindex specific table(s) only\n" msgstr " -t, --table=TABLE reindexar sólo esta(s) tabla(s)\n" -#: reindexdb.c:776 +#: reindexdb.c:805 +#, fuzzy, c-format +#| msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n" +msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n" +msgstr " -D, --tablespace=TBLSPC tablespace por omisión de la base de datos\n" + +#: reindexdb.c:806 +#, fuzzy, c-format +#| msgid " -v, --verbose write a lot of output\n" +msgid " -v, --verbose write a lot of output\n" +msgstr " -v, --verbose desplegar varios mensajes informativos\n" + +#: reindexdb.c:816 #, c-format msgid "" "\n" @@ -966,80 +984,76 @@ msgstr "" "\n" "Lea la descripción de la orden REINDEX de SQL para obtener mayores detalles.\n" -#: scripts_parallel.c:234 -#, c-format -msgid "too many jobs for this platform -- try %d" -msgstr "demasiados procesos para esta plataforma -- intente con %d" - -#: vacuumdb.c:194 +#: vacuumdb.c:203 #, c-format msgid "parallel vacuum degree must be a non-negative integer" msgstr "el grado de vacuum paralelo debe ser un entero no negativo" -#: vacuumdb.c:214 +#: vacuumdb.c:223 #, c-format msgid "minimum transaction ID age must be at least 1" msgstr "edad mínima del ID de transacción debe ser al menos 1" -#: vacuumdb.c:222 +#: vacuumdb.c:231 #, c-format msgid "minimum multixact ID age must be at least 1" msgstr "edad mínima del ID de multixact debe ser al menos 1" -#: vacuumdb.c:254 vacuumdb.c:260 vacuumdb.c:266 vacuumdb.c:278 +#: vacuumdb.c:272 vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 +#: vacuumdb.c:302 vacuumdb.c:314 #, c-format msgid "cannot use the \"%s\" option when performing only analyze" msgstr "no se puede usar la opción «%s» cuando se está sólo actualizando estadísticas" -#: vacuumdb.c:284 -#, c-format -#| msgid "cannot use the \"%s\" option when performing full vacuum" -msgid "cannot use the \"%s\" option when performing full" +#: vacuumdb.c:320 +#, fuzzy, c-format +#| msgid "cannot use the \"%s\" option when performing full" +msgid "cannot use the \"%s\" option when performing full vacuum" msgstr "no se puede usar la opción «%s» cuando se está ejecutando vacuum full" -#: vacuumdb.c:300 +#: vacuumdb.c:343 #, c-format msgid "cannot vacuum all databases and a specific one at the same time" msgstr "no se pueden limpiar todas las bases de datos y una de ellas en particular simultáneamente" -#: vacuumdb.c:305 +#: vacuumdb.c:348 #, c-format msgid "cannot vacuum specific table(s) in all databases" msgstr "no es posible limpiar tablas específicas en todas las bases de datos" -#: vacuumdb.c:396 +#: vacuumdb.c:438 msgid "Generating minimal optimizer statistics (1 target)" msgstr "Generando estadísticas mínimas para el optimizador (tamaño = 1)" -#: vacuumdb.c:397 +#: vacuumdb.c:439 msgid "Generating medium optimizer statistics (10 targets)" msgstr "Generando estadísticas medias para el optimizador (tamaño = 10)" -#: vacuumdb.c:398 +#: vacuumdb.c:440 msgid "Generating default (full) optimizer statistics" msgstr "Generando estadísticas predeterminadas (completas) para el optimizador" -#: vacuumdb.c:447 +#: vacuumdb.c:512 #, c-format msgid "%s: processing database \"%s\": %s\n" msgstr "%s: procesando la base de datos «%s»: %s\n" -#: vacuumdb.c:450 +#: vacuumdb.c:515 #, c-format msgid "%s: vacuuming database \"%s\"\n" msgstr "%s: limpiando la base de datos «%s»\n" -#: vacuumdb.c:909 +#: vacuumdb.c:976 #, c-format msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s" msgstr "falló la limpieza de la tabla «%s» en la base de datos «%s»: %s" -#: vacuumdb.c:912 +#: vacuumdb.c:979 #, c-format msgid "vacuuming of database \"%s\" failed: %s" msgstr "falló la limpieza de la base de datos «%s»: %s" -#: vacuumdb.c:920 +#: vacuumdb.c:987 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -1048,96 +1062,112 @@ msgstr "" "%s limpia (VACUUM) y analiza una base de datos PostgreSQL.\n" "\n" -#: vacuumdb.c:924 +#: vacuumdb.c:991 #, c-format msgid " -a, --all vacuum all databases\n" msgstr " -a, --all limpia todas las bases de datos\n" -#: vacuumdb.c:925 +#: vacuumdb.c:992 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=BASE base de datos a limpiar\n" -#: vacuumdb.c:926 +#: vacuumdb.c:993 #, c-format msgid " --disable-page-skipping disable all page-skipping behavior\n" msgstr " --disable-page-skipping desactiva todo comportamiento de saltar páginas\n" -#: vacuumdb.c:927 +#: vacuumdb.c:994 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo mostrar las órdenes enviadas al servidor\n" -#: vacuumdb.c:928 +#: vacuumdb.c:995 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full usar «vacuum full»\n" -#: vacuumdb.c:929 +#: vacuumdb.c:996 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr " -F, --freeze usar «vacuum freeze»\n" -#: vacuumdb.c:930 +#: vacuumdb.c:997 #, c-format msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n" msgstr " -j, --jobs=NUM usar esta cantidad de conexiones concurrentes\n" -#: vacuumdb.c:931 +#: vacuumdb.c:998 #, c-format msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n" msgstr " --min-mxid-age=EDAD_MXID edad de multixact ID mínima de tablas a limpiar\n" -#: vacuumdb.c:932 +#: vacuumdb.c:999 #, c-format msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n" msgstr " --min-xid-age=EDAD_XID edad de ID de transacción mínima de tablas a limpiar\n" -#: vacuumdb.c:933 +#: vacuumdb.c:1000 +#, c-format +msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n" +msgstr "" + +#: vacuumdb.c:1001 +#, c-format +msgid " --no-process-toast skip the TOAST table associated with the table to vacuum\n" +msgstr "" + +#: vacuumdb.c:1002 +#, fuzzy, c-format +#| msgid " -C, --create create the target database\n" +msgid " --no-truncate don't truncate empty pages at the end of the table\n" +msgstr " -C, --create crea la base de datos de destino\n" + +#: vacuumdb.c:1003 #, c-format msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n" msgstr " -P, --parallel=GRADO_PARALELISMO use esta cantidad de procesos para vacuum, si están disponibles\n" -#: vacuumdb.c:934 +#: vacuumdb.c:1004 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet no desplegar mensajes\n" -#: vacuumdb.c:935 +#: vacuumdb.c:1005 #, c-format msgid " --skip-locked skip relations that cannot be immediately locked\n" msgstr " --skip-locked ignorar relaciones que no pueden bloquearse inmediatamente\n" -#: vacuumdb.c:936 +#: vacuumdb.c:1006 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr "" " -t, --table='TABLA[(COLUMNAS)]'\n" " limpiar sólo esta(s) tabla(s)\n" -#: vacuumdb.c:937 +#: vacuumdb.c:1007 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose desplegar varios mensajes informativos\n" -#: vacuumdb.c:938 +#: vacuumdb.c:1008 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión y salir\n" -#: vacuumdb.c:939 +#: vacuumdb.c:1009 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze actualizar las estadísticas del optimizador\n" -#: vacuumdb.c:940 +#: vacuumdb.c:1010 #, c-format msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n" msgstr "" " -Z, --analyze-only sólo actualizar las estadísticas del optimizador;\n" " no hacer vacuum\n" -#: vacuumdb.c:941 +#: vacuumdb.c:1011 #, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in multiple\n" @@ -1147,12 +1177,12 @@ msgstr "" " en múltiples etapas para resultados más rápidos;\n" " no hacer vacuum\n" -#: vacuumdb.c:943 +#: vacuumdb.c:1013 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: vacuumdb.c:951 +#: vacuumdb.c:1021 #, c-format msgid "" "\n" @@ -1160,3 +1190,9 @@ msgid "" msgstr "" "\n" "Lea la descripción de la orden VACUUM de SQL para obtener mayores detalles.\n" + +#~ msgid "could not connect to database %s: %s" +#~ msgstr "no se pudo conectar a la base de datos %s: %s" + +#~ msgid "Could not send cancel request: %s" +#~ msgstr "No se pudo enviar el paquete de cancelación: %s" diff --git a/src/interfaces/ecpg/preproc/po/de.po b/src/interfaces/ecpg/preproc/po/de.po index 89f2daa978df0..dc7d32bb35758 100644 --- a/src/interfaces/ecpg/preproc/po/de.po +++ b/src/interfaces/ecpg/preproc/po/de.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-04 12:39+0000\n" -"PO-Revision-Date: 2021-05-04 15:48+0200\n" +"POT-Creation-Date: 2021-05-14 08:39+0000\n" +"PO-Revision-Date: 2021-05-14 14:37+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -220,12 +220,12 @@ msgstr "Ende der Suchliste\n" msgid "%s: no input files specified\n" msgstr "%s: keine Eingabedateien angegeben\n" -#: ecpg.c:476 +#: ecpg.c:477 #, c-format msgid "cursor \"%s\" has been declared but not opened" msgstr "Cursor »%s« wurde deklariert aber nicht geöffnet" -#: ecpg.c:489 preproc.y:130 +#: ecpg.c:490 preproc.y:130 #, c-format msgid "could not remove output file \"%s\"\n" msgstr "konnte Ausgabedatei »%s« nicht entfernen\n" @@ -374,195 +374,195 @@ msgstr "Initialisierungswert nicht erlaubt in Typdefinition" msgid "type name \"string\" is reserved in Informix mode" msgstr "Typname »string« ist im Informix-Modus reserviert" -#: preproc.y:552 preproc.y:17675 +#: preproc.y:552 preproc.y:17682 #, c-format msgid "type \"%s\" is already defined" msgstr "Typ »%s« ist bereits definiert" -#: preproc.y:577 preproc.y:18318 preproc.y:18643 variable.c:621 +#: preproc.y:577 preproc.y:18325 preproc.y:18650 variable.c:621 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "mehrdimensionale Arrays für einfache Datentypen werden nicht unterstützt" -#: preproc.y:1749 +#: preproc.y:1752 #, c-format msgid "AT option not allowed in CLOSE DATABASE statement" msgstr "AT-Option ist nicht erlaubt im Befehl CLOSE DATABASE" -#: preproc.y:1997 +#: preproc.y:2000 #, c-format msgid "AT option not allowed in CONNECT statement" msgstr "AT-Option ist nicht erlaubt im Befehl CONNECT" -#: preproc.y:2035 +#: preproc.y:2038 #, c-format msgid "AT option not allowed in DISCONNECT statement" msgstr "AT-Option ist nicht erlaubt im Befehl DISCONNECT" -#: preproc.y:2090 +#: preproc.y:2093 #, c-format msgid "AT option not allowed in SET CONNECTION statement" msgstr "AT-Option ist nicht erlaubt im Befehl SET CONNECTION" -#: preproc.y:2112 +#: preproc.y:2115 #, c-format msgid "AT option not allowed in TYPE statement" msgstr "AT-Option ist nicht erlaubt im TYPE-Befehl" -#: preproc.y:2121 +#: preproc.y:2124 #, c-format msgid "AT option not allowed in VAR statement" msgstr "AT-Option ist nicht erlaubt im VAR-Befehl" -#: preproc.y:2128 +#: preproc.y:2131 #, c-format msgid "AT option not allowed in WHENEVER statement" msgstr "AT-Option ist nicht erlaubt im WHENEVER-Befehl" -#: preproc.y:2205 preproc.y:2377 preproc.y:2382 preproc.y:2505 preproc.y:4129 -#: preproc.y:4793 preproc.y:5326 preproc.y:5664 preproc.y:5964 preproc.y:7532 -#: preproc.y:9100 preproc.y:9105 preproc.y:11925 +#: preproc.y:2208 preproc.y:2380 preproc.y:2385 preproc.y:2508 preproc.y:4128 +#: preproc.y:4792 preproc.y:5325 preproc.y:5663 preproc.y:5963 preproc.y:7531 +#: preproc.y:9099 preproc.y:9104 preproc.y:11932 #, c-format msgid "unsupported feature will be passed to server" msgstr "nicht mehr unterstütztes Feature wird an Server weitergereicht werden" -#: preproc.y:2763 +#: preproc.y:2766 #, c-format msgid "SHOW ALL is not implemented" msgstr "SHOW ALL ist nicht implementiert" -#: preproc.y:3462 +#: preproc.y:3461 #, c-format msgid "COPY FROM STDIN is not implemented" msgstr "COPY FROM STDIN ist nicht implementiert" -#: preproc.y:10024 preproc.y:17250 +#: preproc.y:10031 preproc.y:17257 #, c-format msgid "\"database\" cannot be used as cursor name in INFORMIX mode" msgstr "»database« kann im INFORMIX-Modus nicht als Cursorname verwendet werden" -#: preproc.y:10031 preproc.y:17260 +#: preproc.y:10038 preproc.y:17267 #, c-format msgid "using variable \"%s\" in different declare statements is not supported" msgstr "Verwendung der Variable »%s« in verschiedenen DECLARE-Anweisungen wird nicht unterstützt" -#: preproc.y:10033 preproc.y:17262 +#: preproc.y:10040 preproc.y:17269 #, c-format msgid "cursor \"%s\" is already defined" msgstr "Cursor »%s« ist bereits definiert" -#: preproc.y:10507 +#: preproc.y:10514 #, c-format msgid "no longer supported LIMIT #,# syntax passed to server" msgstr "nicht mehr unterstützte Syntax LIMIT x,y wird an Server weitergereicht" -#: preproc.y:10840 preproc.y:10847 +#: preproc.y:10847 preproc.y:10854 #, c-format msgid "subquery in FROM must have an alias" msgstr "Unteranfrage in FROM muss Aliasnamen erhalten" -#: preproc.y:16942 preproc.y:16949 +#: preproc.y:16949 preproc.y:16956 #, c-format msgid "CREATE TABLE AS cannot specify INTO" msgstr "CREATE TABLE AS kann INTO nicht verwenden" -#: preproc.y:16985 +#: preproc.y:16992 #, c-format msgid "expected \"@\", found \"%s\"" msgstr "»@« erwartet, »%s« gefunden" -#: preproc.y:16997 +#: preproc.y:17004 #, c-format msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" msgstr "er werden nur die Protokolle »tcp« und »unix« und der Datenbanktyp »postgresql« unterstützt" -#: preproc.y:17000 +#: preproc.y:17007 #, c-format msgid "expected \"://\", found \"%s\"" msgstr "»://« erwartet, »%s« gefunden" -#: preproc.y:17005 +#: preproc.y:17012 #, c-format msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" msgstr "Unix-Domain-Sockets funktionieren nur mit »localhost«, aber nicht mit »%s«" -#: preproc.y:17031 +#: preproc.y:17038 #, c-format msgid "expected \"postgresql\", found \"%s\"" msgstr "»postgresql« erwartet, »%s« gefunden" -#: preproc.y:17034 +#: preproc.y:17041 #, c-format msgid "invalid connection type: %s" msgstr "ungültiger Verbindungstyp: %s" -#: preproc.y:17043 +#: preproc.y:17050 #, c-format msgid "expected \"@\" or \"://\", found \"%s\"" msgstr "»@« oder »://« erwartet, »%s« gefunden" -#: preproc.y:17118 preproc.y:17136 +#: preproc.y:17125 preproc.y:17143 #, c-format msgid "invalid data type" msgstr "ungültiger Datentyp" -#: preproc.y:17147 preproc.y:17164 +#: preproc.y:17154 preproc.y:17171 #, c-format msgid "incomplete statement" msgstr "unvollständige Anweisung" -#: preproc.y:17150 preproc.y:17167 +#: preproc.y:17157 preproc.y:17174 #, c-format msgid "unrecognized token \"%s\"" msgstr "nicht erkanntes Token »%s«" -#: preproc.y:17212 +#: preproc.y:17219 #, c-format -msgid "declared name %s is already defined" -msgstr "deklarierter Name %s ist bereits definiert" +msgid "name \"%s\" is already declared" +msgstr "Name »%s« ist bereits deklariert" -#: preproc.y:17478 +#: preproc.y:17485 #, c-format msgid "only data types numeric and decimal have precision/scale argument" msgstr "nur die Datentypen NUMERIC und DECIMAL haben Argumente für Präzision und Skala" -#: preproc.y:17490 +#: preproc.y:17497 #, c-format msgid "interval specification not allowed here" msgstr "Intervallangabe hier nicht erlaubt" -#: preproc.y:17650 preproc.y:17702 +#: preproc.y:17657 preproc.y:17709 #, c-format msgid "too many levels in nested structure/union definition" msgstr "zu viele Ebenen in verschachtelter Definition von Struktur/Union" -#: preproc.y:17825 +#: preproc.y:17832 #, c-format msgid "pointers to varchar are not implemented" msgstr "Zeiger auf varchar sind nicht implementiert" -#: preproc.y:18012 preproc.y:18037 +#: preproc.y:18019 preproc.y:18044 #, c-format msgid "using unsupported DESCRIBE statement" msgstr "nicht unterstützter DESCRIBE-Befehl wird verwendet" -#: preproc.y:18284 +#: preproc.y:18291 #, c-format msgid "initializer not allowed in EXEC SQL VAR command" msgstr "Initialisierungswert nicht erlaubt in Befehl EXEC SQL VAR" -#: preproc.y:18601 +#: preproc.y:18608 #, c-format msgid "arrays of indicators are not allowed on input" msgstr "Array aus Indikatoren bei der Eingabe nicht erlaubt" -#: preproc.y:18788 +#: preproc.y:18795 #, c-format msgid "operator not allowed in variable definition" msgstr "Operator nicht erlaubt in Variablendefinition" #. translator: %s is typically the translation of "syntax error" -#: preproc.y:18829 +#: preproc.y:18836 #, c-format msgid "%s at or near \"%s\"" msgstr "%s bei »%s«" diff --git a/src/interfaces/ecpg/preproc/po/es.po b/src/interfaces/ecpg/preproc/po/es.po index 0107bfc1f00f2..7f89bee56ebf3 100644 --- a/src/interfaces/ecpg/preproc/po/es.po +++ b/src/interfaces/ecpg/preproc/po/es.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: ecpg (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:39+0000\n" +"POT-Creation-Date: 2021-05-14 19:39+0000\n" "PO-Revision-Date: 2020-06-08 13:04-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -58,7 +58,7 @@ msgstr "elemento del descriptor «%s» no está implementado" msgid "descriptor item \"%s\" cannot be set" msgstr "no se puede establecer el elemento del descriptor «%s»" -#: ecpg.c:35 +#: ecpg.c:36 #, c-format msgid "" "%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" @@ -67,7 +67,7 @@ msgstr "" "%s es el preprocesador de SQL incrustado para programas en C de PostgreSQL.\n" "\n" -#: ecpg.c:37 +#: ecpg.c:38 #, c-format msgid "" "Usage:\n" @@ -78,12 +78,12 @@ msgstr "" " %s [OPCIÓN]... ARCHIVO...\n" "\n" -#: ecpg.c:40 +#: ecpg.c:41 #, c-format msgid "Options:\n" msgstr "Opciones:\n" -#: ecpg.c:41 +#: ecpg.c:42 #, c-format msgid "" " -c automatically generate C code from embedded SQL code;\n" @@ -92,7 +92,7 @@ msgstr "" " -c genera automáticamente código en C desde código SQL\n" " incrustado; esto afecta EXEC SQL TYPE\n" -#: ecpg.c:43 +#: ecpg.c:44 #, c-format msgid "" " -C MODE set compatibility mode; MODE can be one of\n" @@ -101,37 +101,37 @@ msgstr "" " -C MODO establece el modo de compatibilidad;\n" " MODO puede ser \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" -#: ecpg.c:46 +#: ecpg.c:47 #, c-format msgid " -d generate parser debug output\n" msgstr " -d genera salida depurada del analizador\n" -#: ecpg.c:48 +#: ecpg.c:49 #, c-format msgid " -D SYMBOL define SYMBOL\n" msgstr " -D SYMBOL define SYMBOL\n" -#: ecpg.c:49 +#: ecpg.c:50 #, c-format msgid " -h parse a header file, this option includes option \"-c\"\n" msgstr " -h analiza un archivo de cabecera; esto incluye «-c»\n" -#: ecpg.c:50 +#: ecpg.c:51 #, c-format msgid " -i parse system include files as well\n" msgstr " -i analiza además los archivos de inclusión de sistema\n" -#: ecpg.c:51 +#: ecpg.c:52 #, c-format msgid " -I DIRECTORY search DIRECTORY for include files\n" msgstr " -I DIRECTORIO busca los archivos de inclusión en DIRECTORIO\n" -#: ecpg.c:52 +#: ecpg.c:53 #, c-format msgid " -o OUTFILE write result to OUTFILE\n" msgstr " -o ARCHIVO escribe la salida en ARCHIVO\n" -#: ecpg.c:53 +#: ecpg.c:54 #, c-format msgid "" " -r OPTION specify run-time behavior; OPTION can be:\n" @@ -141,27 +141,27 @@ msgstr "" " OPCIÓN puede ser: «no_indicator», «prepare»,\n" " «questionmarks»\n" -#: ecpg.c:55 +#: ecpg.c:56 #, c-format msgid " --regression run in regression testing mode\n" msgstr " --regression ejecuta en modo de prueba de regresión\n" -#: ecpg.c:56 +#: ecpg.c:57 #, c-format msgid " -t turn on autocommit of transactions\n" msgstr " -t activa el compromiso (commit) automático de transacciones\n" -#: ecpg.c:57 +#: ecpg.c:58 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version muestra información de la versión, luego sale\n" -#: ecpg.c:58 +#: ecpg.c:59 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help muestra esta ayuda, luego sale\n" -#: ecpg.c:59 +#: ecpg.c:60 #, c-format msgid "" "\n" @@ -172,7 +172,7 @@ msgstr "" "Si no se especifica un archivo de salida, el nombre se forma agregando .c al\n" "archivo de entrada, luego de quitar .pgc si está presente.\n" -#: ecpg.c:61 +#: ecpg.c:62 #, c-format msgid "" "\n" @@ -181,57 +181,57 @@ msgstr "" "\n" "Reporte errores a <%s>.\n" -#: ecpg.c:62 +#: ecpg.c:63 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: ecpg.c:140 +#: ecpg.c:141 #, c-format msgid "%s: could not locate my own executable path\n" msgstr "%s: no se pudo localizar la ruta de mi propio ejecutable\n" -#: ecpg.c:175 ecpg.c:332 ecpg.c:343 +#: ecpg.c:176 ecpg.c:333 ecpg.c:344 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: no se pudo abrir el archivo «%s»: %s\n" -#: ecpg.c:218 ecpg.c:231 ecpg.c:247 ecpg.c:273 +#: ecpg.c:219 ecpg.c:232 ecpg.c:248 ecpg.c:274 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Utilice «%s --help» para obtener mayor información.\n" -#: ecpg.c:242 +#: ecpg.c:243 #, c-format msgid "%s: parser debug support (-d) not available\n" msgstr "%s: la depuración del analizador (parser, -d) no está disponible)\n" -#: ecpg.c:261 +#: ecpg.c:262 #, c-format msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" msgstr "%s, el preprocesador de C incrustado de PostgreSQL, versión %s\n" -#: ecpg.c:263 +#: ecpg.c:264 #, c-format msgid "EXEC SQL INCLUDE ... search starts here:\n" msgstr "EXEC SQL INCLUDE ... la búsqueda comienza aquí:\n" -#: ecpg.c:266 +#: ecpg.c:267 #, c-format msgid "end of search list\n" msgstr "fin de la lista de búsqueda\n" -#: ecpg.c:272 +#: ecpg.c:273 #, c-format msgid "%s: no input files specified\n" msgstr "%s: no se especificaron archivos de entrada\n" -#: ecpg.c:466 +#: ecpg.c:477 #, c-format msgid "cursor \"%s\" has been declared but not opened" msgstr "el cursor «%s» fue declarado pero no abierto" -#: ecpg.c:479 preproc.y:128 +#: ecpg.c:490 preproc.y:130 #, c-format msgid "could not remove output file \"%s\"\n" msgstr "no se pudo eliminar el archivo de salida «%s»\n" @@ -256,92 +256,98 @@ msgstr "una cadena hexadecimal está inconclusa" msgid "invalid bit string literal" msgstr "cadena de bits no válida" -#: pgc.l:623 +#: pgc.l:607 +#, fuzzy, c-format +#| msgid "invalid bit string literal" +msgid "invalid hex string literal" +msgstr "cadena de bits no válida" + +#: pgc.l:625 #, c-format msgid "unhandled previous state in xqs\n" msgstr "estado previo no manejado en xqs\n" -#: pgc.l:652 pgc.l:754 +#: pgc.l:651 pgc.l:760 #, c-format msgid "unterminated quoted string" msgstr "una cadena en comillas está inconclusa" -#: pgc.l:703 +#: pgc.l:702 #, c-format msgid "unterminated dollar-quoted string" msgstr "una cadena separada por $ está inconclusa" -#: pgc.l:721 pgc.l:734 +#: pgc.l:720 pgc.l:740 #, c-format msgid "zero-length delimited identifier" msgstr "identificador delimitado de longitud cero" -#: pgc.l:745 +#: pgc.l:751 #, c-format msgid "unterminated quoted identifier" msgstr "un identificador en comillas está inconcluso" -#: pgc.l:1076 +#: pgc.l:1082 #, c-format msgid "nested /* ... */ comments" msgstr "comentarios /* ... */ anidados" -#: pgc.l:1169 +#: pgc.l:1175 #, c-format msgid "missing identifier in EXEC SQL UNDEF command" msgstr "falta un identificador en la orden EXEC SQL UNDEF" -#: pgc.l:1187 pgc.l:1200 pgc.l:1216 pgc.l:1229 +#: pgc.l:1193 pgc.l:1206 pgc.l:1222 pgc.l:1235 #, c-format msgid "too many nested EXEC SQL IFDEF conditions" msgstr "demasiadas condiciones EXEC SQL IFDEF anidadas" -#: pgc.l:1245 pgc.l:1256 pgc.l:1271 pgc.l:1293 +#: pgc.l:1251 pgc.l:1262 pgc.l:1277 pgc.l:1299 #, c-format msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" msgstr "falta el «EXEC SQL IFDEF» / «EXEC SQL IFNDEF»" -#: pgc.l:1247 pgc.l:1258 pgc.l:1439 +#: pgc.l:1253 pgc.l:1264 pgc.l:1445 #, c-format msgid "missing \"EXEC SQL ENDIF;\"" msgstr "falta el «EXEC SQL ENDIF;»" -#: pgc.l:1273 pgc.l:1295 +#: pgc.l:1279 pgc.l:1301 #, c-format msgid "more than one EXEC SQL ELSE" msgstr "hay más de un EXEC SQL ELSE" -#: pgc.l:1318 pgc.l:1332 +#: pgc.l:1324 pgc.l:1338 #, c-format msgid "unmatched EXEC SQL ENDIF" msgstr "EXEC SQL ENDIF sin coincidencia" -#: pgc.l:1387 +#: pgc.l:1393 #, c-format msgid "missing identifier in EXEC SQL IFDEF command" msgstr "identificador faltante en la orden EXEC SQL IFDEF" -#: pgc.l:1396 +#: pgc.l:1402 #, c-format msgid "missing identifier in EXEC SQL DEFINE command" msgstr "identificador faltante en la orden EXEC SQL DEFINE" -#: pgc.l:1429 +#: pgc.l:1435 #, c-format msgid "syntax error in EXEC SQL INCLUDE command" msgstr "error de sintaxis en orden EXEC SQL INCLUDE" -#: pgc.l:1479 +#: pgc.l:1485 #, c-format msgid "internal error: unreachable state; please report this to <%s>" msgstr "error interno: estado no esperado; por favor reporte a <%s>" -#: pgc.l:1631 +#: pgc.l:1637 #, c-format msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" msgstr "Error: ruta de inclusión «%s/%s» es demasiada larga en la línea %d, omitiendo\n" -#: pgc.l:1654 +#: pgc.l:1660 #, c-format msgid "could not open include file \"%s\" on line %d" msgstr "no se pudo abrir el archivo a incluir «%s» en la línea %d" @@ -350,210 +356,222 @@ msgstr "no se pudo abrir el archivo a incluir «%s» en la línea %d" msgid "syntax error" msgstr "error de sintaxis" -#: preproc.y:82 +#: preproc.y:84 #, c-format msgid "WARNING: " msgstr "ATENCIÓN: " -#: preproc.y:85 +#: preproc.y:87 #, c-format msgid "ERROR: " msgstr "ERROR: " -#: preproc.y:512 +#: preproc.y:514 #, c-format msgid "cursor \"%s\" does not exist" msgstr "no existe el cursor «%s»" -#: preproc.y:541 +#: preproc.y:543 #, c-format msgid "initializer not allowed in type definition" msgstr "inicializador no permitido en definición de tipo" -#: preproc.y:543 +#: preproc.y:545 #, c-format msgid "type name \"string\" is reserved in Informix mode" msgstr "el nombre de tipo «string» está reservado en modo Informix" -#: preproc.y:550 preproc.y:15960 +#: preproc.y:552 preproc.y:17682 #, c-format msgid "type \"%s\" is already defined" msgstr "el tipo «%s» ya está definido" -#: preproc.y:575 preproc.y:16603 preproc.y:16928 variable.c:621 +#: preproc.y:577 preproc.y:18325 preproc.y:18650 variable.c:621 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "los arrays multidimensionales para tipos de datos simples no están soportados" -#: preproc.y:1704 +#: preproc.y:1752 #, c-format msgid "AT option not allowed in CLOSE DATABASE statement" msgstr "la opción AT no está permitida en la sentencia CLOSE DATABASE" -#: preproc.y:1952 +#: preproc.y:2000 #, c-format msgid "AT option not allowed in CONNECT statement" msgstr "la opción AT no está permitida en la sentencia CONNECT" -#: preproc.y:1986 +#: preproc.y:2038 #, c-format msgid "AT option not allowed in DISCONNECT statement" msgstr "la opción AT no está permitida en la sentencia DISCONNECT" -#: preproc.y:2041 +#: preproc.y:2093 #, c-format msgid "AT option not allowed in SET CONNECTION statement" msgstr "la opción AT no está permitida en la sentencia SET CONNECTION" -#: preproc.y:2063 +#: preproc.y:2115 #, c-format msgid "AT option not allowed in TYPE statement" msgstr "la opción AT no está permitida en la sentencia TYPE" -#: preproc.y:2072 +#: preproc.y:2124 #, c-format msgid "AT option not allowed in VAR statement" msgstr "la opción AT no está permitida en la sentencia VAR" -#: preproc.y:2079 +#: preproc.y:2131 #, c-format msgid "AT option not allowed in WHENEVER statement" msgstr "la opción AT no está permitida en la sentencia WHENEVER" -#: preproc.y:2156 preproc.y:2328 preproc.y:2333 preproc.y:2456 preproc.y:4034 -#: preproc.y:4682 preproc.y:5624 preproc.y:5924 preproc.y:7542 preproc.y:9081 -#: preproc.y:9086 preproc.y:11921 +#: preproc.y:2208 preproc.y:2380 preproc.y:2385 preproc.y:2508 preproc.y:4128 +#: preproc.y:4792 preproc.y:5325 preproc.y:5663 preproc.y:5963 preproc.y:7531 +#: preproc.y:9099 preproc.y:9104 preproc.y:11932 #, c-format msgid "unsupported feature will be passed to server" msgstr "característica no soportada será pasada al servidor" -#: preproc.y:2714 +#: preproc.y:2766 #, c-format msgid "SHOW ALL is not implemented" msgstr "SHOW ALL no está implementado" -#: preproc.y:3382 +#: preproc.y:3461 #, c-format msgid "COPY FROM STDIN is not implemented" msgstr "COPY FROM STDIN no está implementado" -#: preproc.y:10060 preproc.y:15545 +#: preproc.y:10031 preproc.y:17257 +#, fuzzy, c-format +#| msgid "%s cannot be used as a role name here" +msgid "\"database\" cannot be used as cursor name in INFORMIX mode" +msgstr "%s no puede ser usado como nombre de rol aquí" + +#: preproc.y:10038 preproc.y:17267 #, c-format msgid "using variable \"%s\" in different declare statements is not supported" msgstr "el uso de la variable «%s» en diferentes sentencias declare no está soportado" -#: preproc.y:10062 preproc.y:15547 +#: preproc.y:10040 preproc.y:17269 #, c-format msgid "cursor \"%s\" is already defined" msgstr "el cursor «%s» ya está definido" -#: preproc.y:10502 +#: preproc.y:10514 #, c-format msgid "no longer supported LIMIT #,# syntax passed to server" msgstr "la sintaxis LIMIT #,# que ya no está soportada ha sido pasada al servidor" -#: preproc.y:10835 preproc.y:10842 +#: preproc.y:10847 preproc.y:10854 #, c-format msgid "subquery in FROM must have an alias" msgstr "las subconsultas en FROM deben tener un alias" -#: preproc.y:15268 preproc.y:15275 +#: preproc.y:16949 preproc.y:16956 #, c-format msgid "CREATE TABLE AS cannot specify INTO" msgstr "CREATE TABLE AS no puede especificar INTO" -#: preproc.y:15311 +#: preproc.y:16992 #, c-format msgid "expected \"@\", found \"%s\"" msgstr "se esperaba «@», se encontró «%s»" -#: preproc.y:15323 +#: preproc.y:17004 #, c-format msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" msgstr "sólo los protocolos «tcp» y «unix» y tipo de bases de datos «postgresql» están soportados" -#: preproc.y:15326 +#: preproc.y:17007 #, c-format msgid "expected \"://\", found \"%s\"" msgstr "se esperaba «://», se encontró «%s»" -#: preproc.y:15331 +#: preproc.y:17012 #, c-format msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" msgstr "los sockets de dominio unix sólo trabajan en «localhost» pero no en «%s»" -#: preproc.y:15357 +#: preproc.y:17038 #, c-format msgid "expected \"postgresql\", found \"%s\"" msgstr "se esperaba «postgresql», se encontró «%s»" -#: preproc.y:15360 +#: preproc.y:17041 #, c-format msgid "invalid connection type: %s" msgstr "tipo de conexión no válido: %s" -#: preproc.y:15369 +#: preproc.y:17050 #, c-format msgid "expected \"@\" or \"://\", found \"%s\"" msgstr "se esperaba «@» o «://», se encontró «%s»" -#: preproc.y:15444 preproc.y:15462 +#: preproc.y:17125 preproc.y:17143 #, c-format msgid "invalid data type" msgstr "tipo de dato no válido" -#: preproc.y:15473 preproc.y:15490 +#: preproc.y:17154 preproc.y:17171 #, c-format msgid "incomplete statement" msgstr "sentencia incompleta" -#: preproc.y:15476 preproc.y:15493 +#: preproc.y:17157 preproc.y:17174 #, c-format msgid "unrecognized token \"%s\"" msgstr "elemento «%s» no reconocido" -#: preproc.y:15763 +#: preproc.y:17219 +#, fuzzy, c-format +#| msgid "type \"%s\" is already defined" +msgid "name \"%s\" is already declared" +msgstr "el tipo «%s» ya está definido" + +#: preproc.y:17485 #, c-format msgid "only data types numeric and decimal have precision/scale argument" msgstr "sólo los tipos de dato numeric y decimal tienen argumento de precisión/escala" -#: preproc.y:15775 +#: preproc.y:17497 #, c-format msgid "interval specification not allowed here" msgstr "la especificación de intervalo no está permitida aquí" -#: preproc.y:15935 preproc.y:15987 +#: preproc.y:17657 preproc.y:17709 #, c-format msgid "too many levels in nested structure/union definition" msgstr "demasiados niveles en la definición anidada de estructura/unión" -#: preproc.y:16110 +#: preproc.y:17832 #, c-format msgid "pointers to varchar are not implemented" msgstr "los punteros a varchar no están implementados" -#: preproc.y:16297 preproc.y:16322 +#: preproc.y:18019 preproc.y:18044 #, c-format msgid "using unsupported DESCRIBE statement" msgstr "utilizando sentencia DESCRIBE no soportada" -#: preproc.y:16569 +#: preproc.y:18291 #, c-format msgid "initializer not allowed in EXEC SQL VAR command" msgstr "inicializador no permitido en la orden EXEC SQL VAR" -#: preproc.y:16886 +#: preproc.y:18608 #, c-format msgid "arrays of indicators are not allowed on input" msgstr "no se permiten los arrays de indicadores en la entrada" -#: preproc.y:17073 +#: preproc.y:18795 #, c-format msgid "operator not allowed in variable definition" msgstr "operador no permitido en definición de variable" #. translator: %s is typically the translation of "syntax error" -#: preproc.y:17114 +#: preproc.y:18836 #, c-format msgid "%s at or near \"%s\"" msgstr "%s en o cerca de «%s»" diff --git a/src/interfaces/libpq/po/es.po b/src/interfaces/libpq/po/es.po index 9f462920a04b2..becb90181ac13 100644 --- a/src/interfaces/libpq/po/es.po +++ b/src/interfaces/libpq/po/es.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: libpq (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:39+0000\n" +"POT-Creation-Date: 2021-05-14 19:39+0000\n" "PO-Revision-Date: 2020-09-12 22:47-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -22,86 +22,98 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.3\n" -#: fe-auth-scram.c:212 +#: fe-auth-scram.c:213 msgid "malformed SCRAM message (empty message)\n" msgstr "mensaje SCRAM mal formado (mensaje vacío)\n" -#: fe-auth-scram.c:218 +#: fe-auth-scram.c:219 msgid "malformed SCRAM message (length mismatch)\n" msgstr "mensaje SCRAM mal formado (longitud no coincide)\n" -#: fe-auth-scram.c:265 +#: fe-auth-scram.c:263 +#, fuzzy +#| msgid "could not get server version" +msgid "could not verify server signature\n" +msgstr "no se pudo obtener la versión del servidor" + +#: fe-auth-scram.c:270 msgid "incorrect server signature\n" msgstr "signatura de servidor incorrecta\n" -#: fe-auth-scram.c:274 +#: fe-auth-scram.c:279 msgid "invalid SCRAM exchange state\n" msgstr "estado de intercambio SCRAM no es válido\n" -#: fe-auth-scram.c:296 +#: fe-auth-scram.c:306 #, c-format msgid "malformed SCRAM message (attribute \"%c\" expected)\n" msgstr "mensaje SCRAM mal formado (se esperaba atributo «%c»)\n" -#: fe-auth-scram.c:305 +#: fe-auth-scram.c:315 #, c-format msgid "malformed SCRAM message (expected character \"=\" for attribute \"%c\")\n" msgstr "mensaje SCRAM mal formado (se esperaba el carácter «=» para el atributo «%c»)\n" -#: fe-auth-scram.c:346 +#: fe-auth-scram.c:356 msgid "could not generate nonce\n" msgstr "no se pude generar nonce\n" -#: fe-auth-scram.c:356 fe-auth-scram.c:431 fe-auth-scram.c:579 -#: fe-auth-scram.c:600 fe-auth-scram.c:626 fe-auth-scram.c:641 -#: fe-auth-scram.c:691 fe-auth-scram.c:725 fe-auth.c:289 fe-auth.c:359 -#: fe-auth.c:394 fe-auth.c:611 fe-auth.c:770 fe-auth.c:1129 fe-auth.c:1277 -#: fe-connect.c:892 fe-connect.c:1419 fe-connect.c:1595 fe-connect.c:2200 -#: fe-connect.c:2223 fe-connect.c:2952 fe-connect.c:4598 fe-connect.c:4854 -#: fe-connect.c:4973 fe-connect.c:5226 fe-connect.c:5306 fe-connect.c:5405 -#: fe-connect.c:5661 fe-connect.c:5690 fe-connect.c:5762 fe-connect.c:5786 -#: fe-connect.c:5804 fe-connect.c:5905 fe-connect.c:5914 fe-connect.c:6270 -#: fe-connect.c:6420 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 -#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1207 fe-protocol3.c:995 -#: fe-protocol3.c:1699 fe-secure-common.c:110 fe-secure-gssapi.c:504 -#: fe-secure-openssl.c:440 fe-secure-openssl.c:1091 +#: fe-auth-scram.c:366 fe-auth-scram.c:441 fe-auth-scram.c:595 +#: fe-auth-scram.c:616 fe-auth-scram.c:642 fe-auth-scram.c:657 +#: fe-auth-scram.c:707 fe-auth-scram.c:746 fe-auth.c:290 fe-auth.c:362 +#: fe-auth.c:398 fe-auth.c:615 fe-auth.c:774 fe-auth.c:1132 fe-auth.c:1282 +#: fe-connect.c:912 fe-connect.c:1456 fe-connect.c:1625 fe-connect.c:2977 +#: fe-connect.c:4658 fe-connect.c:4919 fe-connect.c:5038 fe-connect.c:5282 +#: fe-connect.c:5364 fe-connect.c:5463 fe-connect.c:5719 fe-connect.c:5748 +#: fe-connect.c:5820 fe-connect.c:5844 fe-connect.c:5862 fe-connect.c:5963 +#: fe-connect.c:5972 fe-connect.c:6330 fe-connect.c:6480 fe-exec.c:1209 +#: fe-exec.c:2993 fe-exec.c:3145 fe-exec.c:3918 fe-exec.c:4083 +#: fe-gssapi-common.c:110 fe-lobj.c:881 fe-protocol3.c:1016 fe-protocol3.c:1724 +#: fe-secure-common.c:110 fe-secure-gssapi.c:504 fe-secure-openssl.c:440 +#: fe-secure-openssl.c:1129 msgid "out of memory\n" msgstr "memoria agotada\n" -#: fe-auth-scram.c:364 +#: fe-auth-scram.c:374 msgid "could not encode nonce\n" msgstr "no se pude generar nonce\n" #: fe-auth-scram.c:563 +#, fuzzy +#| msgid "could not encode client proof\n" +msgid "could not calculate client proof\n" +msgstr "no se pudo codificar la prueba del cliente\n" + +#: fe-auth-scram.c:579 msgid "could not encode client proof\n" msgstr "no se pudo codificar la prueba del cliente\n" -#: fe-auth-scram.c:618 +#: fe-auth-scram.c:634 msgid "invalid SCRAM response (nonce mismatch)\n" msgstr "respuesta SCRAM no es válida (nonce no coincide)\n" -#: fe-auth-scram.c:651 +#: fe-auth-scram.c:667 msgid "malformed SCRAM message (invalid salt)\n" msgstr "mensaje SCRAM mal formado (sal no válida)\n" -#: fe-auth-scram.c:665 +#: fe-auth-scram.c:681 msgid "malformed SCRAM message (invalid iteration count)\n" msgstr "mensaje SCRAM mal formado (el conteo de iteración no es válido)\n" -#: fe-auth-scram.c:671 +#: fe-auth-scram.c:687 msgid "malformed SCRAM message (garbage at end of server-first-message)\n" msgstr "mensaje SCRAM mal formado (se encontró basura al final de server-first-message)\n" -#: fe-auth-scram.c:702 +#: fe-auth-scram.c:723 #, c-format msgid "error received from server in SCRAM exchange: %s\n" msgstr "se recibió un error desde el servidor durante el intercambio SCRAM: %s\n" -#: fe-auth-scram.c:718 +#: fe-auth-scram.c:739 msgid "malformed SCRAM message (garbage at end of server-final-message)\n" msgstr "mensaje SCRAM mal formado (se encontró basura al final de server-final-message)\n" -#: fe-auth-scram.c:737 +#: fe-auth-scram.c:758 msgid "malformed SCRAM message (invalid server signature)\n" msgstr "mensaje SCRAM mal formado (la signatura del servidor no es válida)\n" @@ -114,7 +126,7 @@ msgstr "memoria agotada creando el búfer GSSAPI (%d)\n" msgid "GSSAPI continuation error" msgstr "error en continuación de GSSAPI" -#: fe-auth.c:158 fe-auth.c:388 fe-gssapi-common.c:98 fe-secure-common.c:98 +#: fe-auth.c:158 fe-auth.c:391 fe-gssapi-common.c:97 fe-secure-common.c:98 msgid "host name must be specified\n" msgstr "el nombre de servidor debe ser especificado\n" @@ -131,48 +143,48 @@ msgstr "memoria agotada creando el búfer SSPI (%d)\n" msgid "SSPI continuation error" msgstr "error en continuación de SSPI" -#: fe-auth.c:349 +#: fe-auth.c:351 msgid "duplicate SSPI authentication request\n" msgstr "petición de autentificación SSPI duplicada\n" -#: fe-auth.c:374 +#: fe-auth.c:377 msgid "could not acquire SSPI credentials" msgstr "no se pudo obtener las credenciales SSPI" -#: fe-auth.c:429 +#: fe-auth.c:433 msgid "channel binding required, but SSL not in use\n" msgstr "se requiere enlazado de canal (channel binding), pero no se está usando SSL\n" -#: fe-auth.c:436 +#: fe-auth.c:440 msgid "duplicate SASL authentication request\n" msgstr "petición de autentificación SASL duplicada\n" -#: fe-auth.c:492 +#: fe-auth.c:496 msgid "channel binding is required, but client does not support it\n" msgstr "se requiere enlazado de canal (channel binding), pero no está soportado en el cliente\n" -#: fe-auth.c:509 +#: fe-auth.c:513 msgid "server offered SCRAM-SHA-256-PLUS authentication over a non-SSL connection\n" msgstr "el servidor ofreció autenticación SCRAM-SHA-256-PLUS sobre una conexión no-SSL\n" -#: fe-auth.c:521 +#: fe-auth.c:525 msgid "none of the server's SASL authentication mechanisms are supported\n" msgstr "ningún método de autentificación SASL del servidor está soportado\n" -#: fe-auth.c:529 +#: fe-auth.c:533 msgid "channel binding is required, but server did not offer an authentication method that supports channel binding\n" msgstr "se requiere enlazado de canal (channel binding), pero el servidor no ofrece un método de autenticación que lo soporte\n" -#: fe-auth.c:635 +#: fe-auth.c:639 #, c-format msgid "out of memory allocating SASL buffer (%d)\n" msgstr "memoria agotada creando el búfer SASL (%d)\n" -#: fe-auth.c:660 +#: fe-auth.c:664 msgid "AuthenticationSASLFinal received from server, but SASL authentication was not completed\n" msgstr "Se recibió AuthenticationSASLFinal desde el servidor, pero la autentificación SASL no se completó\n" -#: fe-auth.c:737 +#: fe-auth.c:741 msgid "SCM_CRED authentication method not supported\n" msgstr "el método de autentificación SCM_CRED no está soportado\n" @@ -184,684 +196,659 @@ msgstr "se requiere enlazado de canal (channel binding), pero el servidor autent msgid "channel binding required but not supported by server's authentication request\n" msgstr "se requiere enlazado de canal (channel binding), pero no es compatible con la solicitud de autenticación del servidor\n" -#: fe-auth.c:875 +#: fe-auth.c:877 msgid "Kerberos 4 authentication not supported\n" msgstr "el método de autentificación Kerberos 4 no está soportado\n" -#: fe-auth.c:880 +#: fe-auth.c:882 msgid "Kerberos 5 authentication not supported\n" msgstr "el método de autentificación Kerberos 5 no está soportado\n" -#: fe-auth.c:951 +#: fe-auth.c:953 msgid "GSSAPI authentication not supported\n" msgstr "el método de autentificación GSSAPI no está soportado\n" -#: fe-auth.c:983 +#: fe-auth.c:985 msgid "SSPI authentication not supported\n" msgstr "el método de autentificación SSPI no está soportado\n" -#: fe-auth.c:991 +#: fe-auth.c:993 msgid "Crypt authentication not supported\n" msgstr "el método de autentificación Crypt no está soportado\n" -#: fe-auth.c:1057 +#: fe-auth.c:1060 #, c-format msgid "authentication method %u not supported\n" msgstr "el método de autentificación %u no está soportado\n" -#: fe-auth.c:1104 +#: fe-auth.c:1107 #, c-format msgid "user name lookup failure: error code %lu\n" msgstr "fallo en la búsqueda del nombre de usuario: código de error %lu\n" -#: fe-auth.c:1114 fe-connect.c:2834 +#: fe-auth.c:1117 fe-connect.c:2852 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "no se pudo buscar el usuario local de ID %d: %s\n" -#: fe-auth.c:1119 fe-connect.c:2839 +#: fe-auth.c:1122 fe-connect.c:2857 #, c-format msgid "local user with ID %d does not exist\n" msgstr "no existe un usuario local con ID %d\n" -#: fe-auth.c:1221 +#: fe-auth.c:1226 msgid "unexpected shape of result set returned for SHOW\n" msgstr "SHOW retornó un conjunto de resultados con estructura inesperada\n" -#: fe-auth.c:1230 +#: fe-auth.c:1235 msgid "password_encryption value too long\n" msgstr "el valor para password_encryption es demasiado largo\n" -#: fe-auth.c:1270 +#: fe-auth.c:1275 #, c-format msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "algoritmo para cifrado de contraseña «%s» desconocido\n" -#: fe-connect.c:1075 +#: fe-connect.c:1095 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "no se pudo emparejar %d nombres de host a %d direcciones de host\n" -#: fe-connect.c:1156 +#: fe-connect.c:1176 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "no se pudo emparejar %d números de puertos a %d hosts\n" -#: fe-connect.c:1249 -#, c-format -msgid "invalid channel_binding value: \"%s\"\n" -msgstr "valor cidr no válido: «%s»\n" - -#: fe-connect.c:1275 -#, c-format -msgid "invalid sslmode value: \"%s\"\n" +#: fe-connect.c:1269 fe-connect.c:1295 fe-connect.c:1337 fe-connect.c:1346 +#: fe-connect.c:1379 fe-connect.c:1423 +#, fuzzy, c-format +#| msgid "invalid sslmode value: \"%s\"\n" +msgid "invalid %s value: \"%s\"\n" msgstr "valor sslmode no válido: «%s»\n" -#: fe-connect.c:1296 +#: fe-connect.c:1316 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "el valor sslmode «%s» no es válido cuando no se ha compilado con soporte SSL\n" -#: fe-connect.c:1317 -#, c-format -msgid "invalid ssl_min_protocol_version value: \"%s\"\n" -msgstr "valor sslmode no válido: «%s»\n" - -#: fe-connect.c:1325 -#, c-format -msgid "invalid ssl_max_protocol_version value: \"%s\"\n" -msgstr "valor sslmode no válido: «%s»\n" - -#: fe-connect.c:1342 +#: fe-connect.c:1364 msgid "invalid SSL protocol version range\n" msgstr "rango de protocolo SSL no válido \n" -#: fe-connect.c:1357 -#, c-format -msgid "invalid gssencmode value: \"%s\"\n" -msgstr "valor gssencmode no válido: «%s»\n" - -#: fe-connect.c:1366 +#: fe-connect.c:1389 #, c-format msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" msgstr "el valor gssencmode «%s» no es válido cuando no se ha compilado con soporte GSSAPI\n" -#: fe-connect.c:1401 -#, c-format -msgid "invalid target_session_attrs value: \"%s\"\n" -msgstr "valor para target_session_attrs no válido: «%s»\n" - -#: fe-connect.c:1619 +#: fe-connect.c:1649 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "no se pudo establecer el socket en modo TCP sin retardo: %s\n" -#: fe-connect.c:1680 -#, c-format -msgid "" -"could not connect to server: %s\n" -"\tIs the server running locally and accepting\n" -"\tconnections on Unix domain socket \"%s\"?\n" +#: fe-connect.c:1711 +#, fuzzy, c-format +#| msgid "connection to database \"%s\" failed: %s" +msgid "connection to server on socket \"%s\" failed: " +msgstr "falló la conexión a la base de datos «%s»: %s" + +#: fe-connect.c:1738 +#, fuzzy, c-format +#| msgid "connection to database \"%s\" failed: %s" +msgid "connection to server at \"%s\" (%s), port %s failed: " +msgstr "falló la conexión a la base de datos «%s»: %s" + +#: fe-connect.c:1743 +#, fuzzy, c-format +#| msgid "connection to database \"%s\" failed: %s" +msgid "connection to server at \"%s\", port %s failed: " +msgstr "falló la conexión a la base de datos «%s»: %s" + +#: fe-connect.c:1768 +#, fuzzy +#| msgid "" +#| "could not connect to server: %s\n" +#| "\tIs the server running locally and accepting\n" +#| "\tconnections on Unix domain socket \"%s\"?\n" +msgid "\tIs the server running locally and accepting connections on that socket?\n" msgstr "" "no se pudo conectar con el servidor: %s\n" "\t¿Está el servidor en ejecución localmente y aceptando\n" "\tconexiones en el socket de dominio Unix «%s»?\n" -#: fe-connect.c:1717 -#, c-format -msgid "" -"could not connect to server: %s\n" -"\tIs the server running on host \"%s\" (%s) and accepting\n" -"\tTCP/IP connections on port %s?\n" -msgstr "" -"no se pudo conectar con el servidor: %s\n" -"\t¿Está el servidor en ejecución en el servidor «%s» (%s) y aceptando\n" -"\tconexiones TCP/IP en el puerto %s?\n" - -#: fe-connect.c:1725 -#, c-format -msgid "" -"could not connect to server: %s\n" -"\tIs the server running on host \"%s\" and accepting\n" -"\tTCP/IP connections on port %s?\n" +#: fe-connect.c:1772 +#, fuzzy +#| msgid "" +#| "could not connect to server: %s\n" +#| "\tIs the server running on host \"%s\" and accepting\n" +#| "\tTCP/IP connections on port %s?\n" +msgid "\tIs the server running on that host and accepting TCP/IP connections?\n" msgstr "" "no se pudo conectar con el servidor: %s\n" "\t¿Está el servidor en ejecución en el servidor «%s» y aceptando\n" "\tconexiones TCP/IP en el puerto %s?\n" -#: fe-connect.c:1795 +#: fe-connect.c:1836 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "valor entero «%s» no válido para la opción de conexión «%s»\n" -#: fe-connect.c:1825 fe-connect.c:1859 fe-connect.c:1894 fe-connect.c:1981 -#: fe-connect.c:2623 -#, c-format -msgid "setsockopt(%s) failed: %s\n" -msgstr "setsockopt(%s) falló: %s\n" +#: fe-connect.c:1866 fe-connect.c:1901 fe-connect.c:1937 fe-connect.c:2026 +#: fe-connect.c:2640 +#, fuzzy, c-format +#| msgid "%s failed: %s" +msgid "%s(%s) failed: %s\n" +msgstr "%s falló: %s" -#: fe-connect.c:1947 -#, c-format -msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" -msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" +#: fe-connect.c:1991 +#, fuzzy, c-format +#| msgid "pgpipe: getsockname() failed: error code %d" +msgid "%s(%s) failed: error code %d\n" +msgstr "pgpipe: getsockname() falló: código de error %d" -#: fe-connect.c:2313 +#: fe-connect.c:2306 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "el estado de conexión no es válido, probablemente por corrupción de memoria\n" -#: fe-connect.c:2379 +#: fe-connect.c:2385 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "número de puerto no válido: «%s»\n" -#: fe-connect.c:2395 +#: fe-connect.c:2401 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "no se pudo traducir el nombre «%s» a una dirección: %s\n" -#: fe-connect.c:2408 +#: fe-connect.c:2414 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "no se pudo interpretar la dirección de red «%s»: %s\n" -#: fe-connect.c:2421 +#: fe-connect.c:2427 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "la ruta del socket de dominio Unix «%s» es demasiado larga (máximo %d bytes)\n" -#: fe-connect.c:2436 +#: fe-connect.c:2442 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "no se pudo traducir la ruta del socket Unix «%s» a una dirección: %s\n" -#: fe-connect.c:2560 +#: fe-connect.c:2568 #, c-format msgid "could not create socket: %s\n" msgstr "no se pudo crear el socket: %s\n" -#: fe-connect.c:2582 +#: fe-connect.c:2599 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "no se pudo establecer el socket en modo no bloqueante: %s\n" -#: fe-connect.c:2592 +#: fe-connect.c:2609 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "no se pudo poner el socket en modo close-on-exec: %s\n" -#: fe-connect.c:2610 +#: fe-connect.c:2627 msgid "keepalives parameter must be an integer\n" msgstr "el parámetro de keepalives debe ser un entero\n" -#: fe-connect.c:2750 +#: fe-connect.c:2768 #, c-format msgid "could not get socket error status: %s\n" msgstr "no se pudo determinar el estado de error del socket: %s\n" -#: fe-connect.c:2778 +#: fe-connect.c:2796 #, c-format msgid "could not get client address from socket: %s\n" msgstr "no se pudo obtener la dirección del cliente desde el socket: %s\n" -#: fe-connect.c:2820 +#: fe-connect.c:2838 msgid "requirepeer parameter is not supported on this platform\n" msgstr "el parámetro requirepeer no está soportado en esta plataforma\n" -#: fe-connect.c:2823 +#: fe-connect.c:2841 #, c-format msgid "could not get peer credentials: %s\n" msgstr "no se pudo obtener credenciales de la contraparte: %s\n" -#: fe-connect.c:2847 +#: fe-connect.c:2865 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer especifica «%s», pero el nombre de usuario de la contraparte es «%s»\n" -#: fe-connect.c:2887 +#: fe-connect.c:2905 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "no se pudo enviar el paquete de negociación GSSAPI: %s\n" -#: fe-connect.c:2899 +#: fe-connect.c:2917 msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" msgstr "cifrado GSSAPI requerido, pero fue imposible (posiblemente no hay cache de credenciales, no hay soporte de servidor, o se está usando un socket local)\n" -#: fe-connect.c:2926 +#: fe-connect.c:2959 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "no se pudo enviar el paquete de negociación SSL: %s\n" -#: fe-connect.c:2965 +#: fe-connect.c:2990 #, c-format msgid "could not send startup packet: %s\n" msgstr "no se pudo enviar el paquete de inicio: %s\n" -#: fe-connect.c:3035 +#: fe-connect.c:3066 msgid "server does not support SSL, but SSL was required\n" msgstr "el servidor no soporta SSL, pero SSL es requerida\n" -#: fe-connect.c:3061 +#: fe-connect.c:3093 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "se ha recibido una respuesta no válida en la negociación SSL: %c\n" -#: fe-connect.c:3151 +#: fe-connect.c:3182 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "el servidor no soporta cifrado GSSAPI, pero es requerida\n" -#: fe-connect.c:3162 +#: fe-connect.c:3194 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "se ha recibido una respuesta no válida en la negociación GSSAPI: %c\n" -#: fe-connect.c:3229 fe-connect.c:3260 +#: fe-connect.c:3260 fe-connect.c:3285 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "se esperaba una petición de autentificación desde el servidor, pero se ha recibido %c\n" -#: fe-connect.c:3502 +#: fe-connect.c:3492 msgid "unexpected message from server during startup\n" msgstr "se ha recibido un mensaje inesperado del servidor durante el inicio\n" -#: fe-connect.c:3707 -#, c-format -msgid "could not make a writable connection to server \"%s:%s\"\n" -msgstr "no se pudo establecer una conexión de escritura al servidor: «%s:%s»\n" +#: fe-connect.c:3584 +msgid "session is read-only\n" +msgstr "" -#: fe-connect.c:3753 -#, c-format -msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" -msgstr "la prueba «SHOW transaction_read_only» falló en el servidor «%s:%s»\n" +#: fe-connect.c:3587 +msgid "session is not read-only\n" +msgstr "" + +#: fe-connect.c:3641 +#, fuzzy +#| msgid "entering standby mode" +msgid "server is in hot standby mode\n" +msgstr "entrando al modo standby" + +#: fe-connect.c:3644 +#, fuzzy +#| msgid "%s: cannot promote server; server is not in standby mode\n" +msgid "server is not in hot standby mode\n" +msgstr "" +"%s: no se puede promover el servidor;\n" +"el servidor no está en modo «standby»\n" -#: fe-connect.c:3768 +#: fe-connect.c:3755 fe-connect.c:3807 +#, fuzzy, c-format +#| msgid " failed\n" +msgid "\"%s\" failed\n" +msgstr " falló\n" + +#: fe-connect.c:3821 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "estado de conexión no válido %d, probablemente por corrupción de memoria\n" -#: fe-connect.c:4204 fe-connect.c:4264 +#: fe-connect.c:4267 fe-connect.c:4327 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc «%s» falló durante el evento PGEVT_CONNRESET\n" -#: fe-connect.c:4611 +#: fe-connect.c:4671 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "URL LDAP no válida «%s»: el esquema debe ser ldap://\n" -#: fe-connect.c:4626 +#: fe-connect.c:4686 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "URL LDAP no válida «%s»: distinguished name faltante\n" -#: fe-connect.c:4638 fe-connect.c:4693 +#: fe-connect.c:4698 fe-connect.c:4756 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "URL LDAP no válida «%s»: debe tener exactamente un atributo\n" -#: fe-connect.c:4649 fe-connect.c:4708 +#: fe-connect.c:4710 fe-connect.c:4772 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "URL LDAP no válida «%s»: debe tener ámbito de búsqueda (base/one/sub)\n" -#: fe-connect.c:4660 +#: fe-connect.c:4722 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "URL LDAP no válida «%s»: no tiene filtro\n" -#: fe-connect.c:4681 +#: fe-connect.c:4744 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "URL LDAP no válida «%s»: número de puerto no válido\n" -#: fe-connect.c:4717 +#: fe-connect.c:4782 msgid "could not create LDAP structure\n" msgstr "no se pudo crear estructura LDAP\n" -#: fe-connect.c:4793 +#: fe-connect.c:4858 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "búsqueda en servidor LDAP falló: %s\n" -#: fe-connect.c:4804 +#: fe-connect.c:4869 msgid "more than one entry found on LDAP lookup\n" msgstr "se encontro más de una entrada en búsqueda LDAP\n" -#: fe-connect.c:4805 fe-connect.c:4817 +#: fe-connect.c:4870 fe-connect.c:4882 msgid "no entry found on LDAP lookup\n" msgstr "no se encontró ninguna entrada en búsqueda LDAP\n" -#: fe-connect.c:4828 fe-connect.c:4841 +#: fe-connect.c:4893 fe-connect.c:4906 msgid "attribute has no values on LDAP lookup\n" msgstr "la búsqueda LDAP entregó atributo sin valores\n" -#: fe-connect.c:4893 fe-connect.c:4912 fe-connect.c:5444 +#: fe-connect.c:4958 fe-connect.c:4977 fe-connect.c:5502 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "falta «=» después de «%s» en la cadena de información de la conexión\n" -#: fe-connect.c:4985 fe-connect.c:5629 fe-connect.c:6403 +#: fe-connect.c:5050 fe-connect.c:5687 fe-connect.c:6463 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "opción de conexión no válida «%s»\n" -#: fe-connect.c:5001 fe-connect.c:5493 +#: fe-connect.c:5066 fe-connect.c:5551 msgid "unterminated quoted string in connection info string\n" msgstr "cadena de caracteres entre comillas sin terminar en la cadena de información de conexión\n" -#: fe-connect.c:5084 +#: fe-connect.c:5147 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "la definición de servicio «%s» no fue encontrada\n" -#: fe-connect.c:5107 +#: fe-connect.c:5173 #, c-format msgid "service file \"%s\" not found\n" msgstr "el archivo de servicio «%s» no fue encontrado\n" -#: fe-connect.c:5122 -#, c-format -msgid "line %d too long in service file \"%s\"\n" -msgstr "la línea %d es demasiado larga en archivo de servicio «%s»\n" - -#: fe-connect.c:5194 fe-connect.c:5238 +#: fe-connect.c:5250 fe-connect.c:5294 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "error de sintaxis en archivo de servicio «%s», línea %d\n" -#: fe-connect.c:5205 +#: fe-connect.c:5261 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "especificaciones de servicio anidadas no soportadas en archivo de servicio «%s», línea %d\n" -#: fe-connect.c:5925 +#: fe-connect.c:5983 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "URI no válida propagada a rutina interna de procesamiento: «%s»\n" -#: fe-connect.c:6002 +#: fe-connect.c:6060 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "se encontró el fin de la cadena mientras se buscaba el «]» correspondiente en dirección IPv6 en URI: «%s»\n" -#: fe-connect.c:6009 +#: fe-connect.c:6067 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "la dirección IPv6 no puede ser vacía en la URI: «%s»\n" -#: fe-connect.c:6024 +#: fe-connect.c:6082 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "carácter «%c» inesperado en la posición %d en URI (se esperaba «:» o «/»): «%s»\n" -#: fe-connect.c:6153 +#: fe-connect.c:6212 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "separador llave/valor «=» extra en parámetro de la URI: «%s»\n" -#: fe-connect.c:6173 +#: fe-connect.c:6232 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "separador llave/valor «=» faltante en parámetro de la URI: «%s»\n" -#: fe-connect.c:6224 +#: fe-connect.c:6284 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "parámetro de URI no válido: «%s»\n" -#: fe-connect.c:6298 +#: fe-connect.c:6358 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "elemento escapado con %% no válido: «%s»\n" -#: fe-connect.c:6308 +#: fe-connect.c:6368 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "valor no permitido %%00 en valor escapado con %%: «%s»\n" -#: fe-connect.c:6671 +#: fe-connect.c:6738 msgid "connection pointer is NULL\n" msgstr "el puntero de conexión es NULL\n" -#: fe-connect.c:6967 +#: fe-connect.c:7018 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "ADVERTENCIA: El archivo de claves «%s» no es un archivo plano\n" -#: fe-connect.c:6976 +#: fe-connect.c:7027 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "ADVERTENCIA: El archivo de claves «%s» tiene permiso de lectura para el grupo u otros; los permisos deberían ser u=rw (0600) o menos\n" -#: fe-connect.c:7084 +#: fe-connect.c:7135 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "contraseña obtenida desde el archivo «%s»\n" -#: fe-exec.c:444 fe-exec.c:2821 +#: fe-exec.c:449 fe-exec.c:3219 #, c-format msgid "row number %d is out of range 0..%d" msgstr "el número de fila %d está fuera del rango 0..%d" -#: fe-exec.c:505 fe-protocol2.c:497 fe-protocol2.c:532 fe-protocol2.c:1050 -#: fe-protocol3.c:206 fe-protocol3.c:233 fe-protocol3.c:250 fe-protocol3.c:330 -#: fe-protocol3.c:723 fe-protocol3.c:954 +#: fe-exec.c:510 fe-protocol3.c:219 fe-protocol3.c:244 fe-protocol3.c:273 +#: fe-protocol3.c:291 fe-protocol3.c:371 fe-protocol3.c:743 fe-protocol3.c:975 msgid "out of memory" msgstr "memoria agotada" -#: fe-exec.c:506 fe-protocol2.c:1396 fe-protocol3.c:1907 +#: fe-exec.c:511 fe-protocol3.c:1932 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:815 +#: fe-exec.c:778 msgid "write to server failed\n" msgstr "falló escritura al servidor\n" -#: fe-exec.c:896 +#: fe-exec.c:850 msgid "NOTICE" msgstr "AVISO" -#: fe-exec.c:954 +#: fe-exec.c:908 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresult no puede soportar un número de tuplas mayor que INT_MAX" -#: fe-exec.c:966 +#: fe-exec.c:920 msgid "size_t overflow" msgstr "desbordamiento de size_t" -#: fe-exec.c:1243 fe-exec.c:1301 fe-exec.c:1347 +#: fe-exec.c:1302 fe-exec.c:1403 fe-exec.c:1451 msgid "command string is a null pointer\n" msgstr "la cadena de orden es un puntero nulo\n" -#: fe-exec.c:1307 fe-exec.c:1353 fe-exec.c:1448 +#: fe-exec.c:1409 fe-exec.c:1457 fe-exec.c:1554 msgid "number of parameters must be between 0 and 65535\n" msgstr "el número de parámetros debe estar entre 0 y 65535\n" -#: fe-exec.c:1341 fe-exec.c:1442 +#: fe-exec.c:1445 fe-exec.c:1548 msgid "statement name is a null pointer\n" msgstr "el nombre de sentencia es un puntero nulo\n" -#: fe-exec.c:1361 fe-exec.c:1524 fe-exec.c:2233 fe-exec.c:2435 -msgid "function requires at least protocol version 3.0\n" -msgstr "la función requiere protocolo 3.0 o superior\n" - -#: fe-exec.c:1479 +#: fe-exec.c:1589 msgid "no connection to the server\n" msgstr "no hay conexión con el servidor\n" -#: fe-exec.c:1486 +#: fe-exec.c:1598 msgid "another command is already in progress\n" msgstr "hay otra orden en ejecución\n" -#: fe-exec.c:1600 +#: fe-exec.c:1627 +msgid "cannot queue commands during COPY\n" +msgstr "" + +#: fe-exec.c:1745 msgid "length must be given for binary parameter\n" msgstr "el largo debe ser especificado para un parámetro binario\n" -#: fe-exec.c:1863 +#: fe-exec.c:2066 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "asyncStatus no esperado: %d\n" -#: fe-exec.c:1883 +#: fe-exec.c:2086 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEventProc «%s» falló durante el evento PGEVT_RESULTCREATE\n" -#: fe-exec.c:2043 +#: fe-exec.c:2234 +#, fuzzy +#| msgid "set-returning functions are not allowed in partition bound" +msgid "synchronous command execution functions are not allowed in pipeline mode\n" +msgstr "no se permiten funciones que retornan conjuntos en bordes de partición" + +#: fe-exec.c:2256 msgid "COPY terminated by new PQexec" msgstr "COPY terminado por un nuevo PQexec" -#: fe-exec.c:2051 -msgid "COPY IN state must be terminated first\n" -msgstr "el estado COPY IN debe ser terminado primero\n" - -#: fe-exec.c:2071 -msgid "COPY OUT state must be terminated first\n" -msgstr "el estado COPY OUT debe ser terminado primero\n" - -#: fe-exec.c:2079 +#: fe-exec.c:2273 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec no está permitido durante COPY BOTH\n" -#: fe-exec.c:2325 fe-exec.c:2392 fe-exec.c:2482 fe-protocol2.c:1353 -#: fe-protocol3.c:1838 +#: fe-exec.c:2502 fe-exec.c:2558 fe-exec.c:2627 fe-protocol3.c:1863 msgid "no COPY in progress\n" msgstr "no hay COPY alguno en ejecución\n" -#: fe-exec.c:2672 +#: fe-exec.c:2804 +msgid "PQfn not allowed in pipeline mode\n" +msgstr "" + +#: fe-exec.c:2812 msgid "connection in wrong state\n" msgstr "la conexión está en un estado incorrecto\n" -#: fe-exec.c:2703 +#: fe-exec.c:2856 +#, fuzzy +#| msgid "cannot determine OID of function lo_tell\n" +msgid "cannot enter pipeline mode, connection not idle\n" +msgstr "no se puede determinar el OID de la función lo_tell\n" + +#: fe-exec.c:2890 fe-exec.c:2907 +msgid "cannot exit pipeline mode with uncollected results\n" +msgstr "" + +#: fe-exec.c:2895 +msgid "cannot exit pipeline mode while busy\n" +msgstr "" + +#: fe-exec.c:3037 +msgid "cannot send pipeline when not in pipeline mode\n" +msgstr "" + +#: fe-exec.c:3108 msgid "invalid ExecStatusType code" msgstr "el código de ExecStatusType no es válido" -#: fe-exec.c:2730 +#: fe-exec.c:3135 msgid "PGresult is not an error result\n" msgstr "PGresult no es un resultado de error\n" -#: fe-exec.c:2805 fe-exec.c:2828 +#: fe-exec.c:3203 fe-exec.c:3226 #, c-format msgid "column number %d is out of range 0..%d" msgstr "el número de columna %d está fuera del rango 0..%d" -#: fe-exec.c:2843 +#: fe-exec.c:3241 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "el número de parámetro %d está fuera del rango 0..%d" -#: fe-exec.c:3153 +#: fe-exec.c:3551 #, c-format msgid "could not interpret result from server: %s" msgstr "no se pudo interpretar el resultado del servidor: %s" -#: fe-exec.c:3392 fe-exec.c:3476 +#: fe-exec.c:3811 fe-exec.c:3900 msgid "incomplete multibyte character\n" msgstr "carácter multibyte incompleto\n" -#: fe-gssapi-common.c:124 +#: fe-gssapi-common.c:123 msgid "GSSAPI name import error" msgstr "error de importación de nombre de GSSAPI" -#: fe-lobj.c:154 -msgid "cannot determine OID of function lo_truncate\n" -msgstr "no se puede determinar el OID de la función lo_truncate\n" +#: fe-lobj.c:145 fe-lobj.c:210 fe-lobj.c:403 fe-lobj.c:494 fe-lobj.c:568 +#: fe-lobj.c:969 fe-lobj.c:977 fe-lobj.c:985 fe-lobj.c:993 fe-lobj.c:1001 +#: fe-lobj.c:1009 fe-lobj.c:1017 fe-lobj.c:1025 +#, fuzzy, c-format +#| msgid "cannot determine OID of function lo_close\n" +msgid "cannot determine OID of function %s\n" +msgstr "no se puede determinar el OID de la función lo_close\n" -#: fe-lobj.c:170 +#: fe-lobj.c:162 msgid "argument of lo_truncate exceeds integer range\n" msgstr "el argumento de lo_truncate excede el rango de enteros\n" -#: fe-lobj.c:221 -msgid "cannot determine OID of function lo_truncate64\n" -msgstr "no se puede determinar el OID de la función lo_truncate64\n" - -#: fe-lobj.c:279 +#: fe-lobj.c:266 msgid "argument of lo_read exceeds integer range\n" msgstr "el argumento de lo_read excede el rango de enteros\n" -#: fe-lobj.c:334 +#: fe-lobj.c:318 msgid "argument of lo_write exceeds integer range\n" msgstr "el argumento de lo_write excede el rango de enteros\n" -#: fe-lobj.c:425 -msgid "cannot determine OID of function lo_lseek64\n" -msgstr "no se puede determinar el OID de la función lo_lseek64\n" - -#: fe-lobj.c:521 -msgid "cannot determine OID of function lo_create\n" -msgstr "no se puede determinar el OID de la función lo_create\n" - -#: fe-lobj.c:600 -msgid "cannot determine OID of function lo_tell64\n" -msgstr "no se puede determinar el OID de la función lo_tell64\n" - -#: fe-lobj.c:706 fe-lobj.c:815 +#: fe-lobj.c:678 fe-lobj.c:789 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "no se pudo abrir el archivo «%s»: %s\n" -#: fe-lobj.c:761 +#: fe-lobj.c:734 #, c-format msgid "could not read from file \"%s\": %s\n" msgstr "no se pudo leer el archivo «%s»: %s\n" -#: fe-lobj.c:835 fe-lobj.c:859 +#: fe-lobj.c:810 fe-lobj.c:834 #, c-format msgid "could not write to file \"%s\": %s\n" msgstr "no se pudo escribir a archivo «%s»: %s\n" -#: fe-lobj.c:946 +#: fe-lobj.c:920 msgid "query to initialize large object functions did not return data\n" msgstr "la consulta para inicializar las funciones de objetos grandes no devuelve datos\n" -#: fe-lobj.c:995 -msgid "cannot determine OID of function lo_open\n" -msgstr "no se puede determinar el OID de la función lo_open\n" - -#: fe-lobj.c:1002 -msgid "cannot determine OID of function lo_close\n" -msgstr "no se puede determinar el OID de la función lo_close\n" - -#: fe-lobj.c:1009 -msgid "cannot determine OID of function lo_creat\n" -msgstr "no se puede determinar el OID de la función lo_creat\n" - -#: fe-lobj.c:1016 -msgid "cannot determine OID of function lo_unlink\n" -msgstr "no se puede determinar el OID de la función lo_unlink\n" - -#: fe-lobj.c:1023 -msgid "cannot determine OID of function lo_lseek\n" -msgstr "no se puede determinar el OID de la función lo_lseek\n" - -#: fe-lobj.c:1030 -msgid "cannot determine OID of function lo_tell\n" -msgstr "no se puede determinar el OID de la función lo_tell\n" - -#: fe-lobj.c:1037 -msgid "cannot determine OID of function loread\n" -msgstr "no se puede determinar el OID de la función loread\n" - -#: fe-lobj.c:1044 -msgid "cannot determine OID of function lowrite\n" -msgstr "no se puede determinar el OID de la función lowrite\n" - -#: fe-misc.c:289 +#: fe-misc.c:242 #, c-format msgid "integer of size %lu not supported by pqGetInt" msgstr "el entero de tamaño %lu no está soportado por pqGetInt" -#: fe-misc.c:325 +#: fe-misc.c:275 #, c-format msgid "integer of size %lu not supported by pqPutInt" msgstr "el entero de tamaño %lu no está soportado por pqPutInt" -#: fe-misc.c:636 fe-misc.c:869 +#: fe-misc.c:576 fe-misc.c:822 msgid "connection not open\n" msgstr "la conexión no está abierta\n" -#: fe-misc.c:805 fe-secure-openssl.c:209 fe-secure-openssl.c:316 -#: fe-secure.c:267 fe-secure.c:383 +#: fe-misc.c:755 fe-secure-openssl.c:209 fe-secure-openssl.c:316 +#: fe-secure.c:260 fe-secure.c:373 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -871,184 +858,149 @@ msgstr "" "\tProbablemente se debe a que el servidor terminó de manera anormal\n" "\tantes o durante el procesamiento de la petición.\n" -#: fe-misc.c:1063 +#: fe-misc.c:1015 msgid "timeout expired\n" msgstr "tiempo de espera agotado\n" -#: fe-misc.c:1108 +#: fe-misc.c:1060 msgid "invalid socket\n" msgstr "socket no válido\n" -#: fe-misc.c:1131 -#, c-format -msgid "select() failed: %s\n" -msgstr "select() fallida: %s\n" - -#: fe-protocol2.c:87 -#, c-format -msgid "invalid setenv state %c, probably indicative of memory corruption\n" -msgstr "el estado de setenv %c no es válido, probablemente por corrupción de memoria\n" +#: fe-misc.c:1083 +#, fuzzy, c-format +#| msgid "%s failed: %s" +msgid "%s() failed: %s\n" +msgstr "%s falló: %s" -#: fe-protocol2.c:384 -#, c-format -msgid "invalid state %c, probably indicative of memory corruption\n" -msgstr "el estado %c no es válido, probablemente por corrupción de memoria\n" - -#: fe-protocol2.c:473 fe-protocol3.c:183 +#: fe-protocol3.c:196 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "un mensaje de tipo 0x%02x llegó del servidor estando inactivo" -#: fe-protocol2.c:523 -#, c-format -msgid "unexpected character %c following empty query response (\"I\" message)" -msgstr "carácter %c no esperado, siguiendo una respuesta de consulta vacía (mensaje «I»)" - -#: fe-protocol2.c:589 -#, c-format -msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" -msgstr "el servidor envió datos (mensaje «D») sin precederlos con una descripción de fila (mensaje «T»)" - -#: fe-protocol2.c:607 -#, c-format -msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" -msgstr "el servidor envió datos binarios (mensaje «B») sin precederlos con una description de fila (mensaje «T»)" +#: fe-protocol3.c:403 +msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" +msgstr "el servidor envió datos (mensaje «D») sin precederlos con una descripción de fila (mensaje «T»)\n" -#: fe-protocol2.c:626 fe-protocol3.c:408 +#: fe-protocol3.c:446 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "se ha recibido una respuesta inesperada del servidor; el primer carácter recibido fue «%c»\n" -#: fe-protocol2.c:755 fe-protocol2.c:930 fe-protocol3.c:622 fe-protocol3.c:849 -msgid "out of memory for query result" -msgstr "no hay suficiente memoria para el resultado de la consulta" - -#: fe-protocol2.c:1408 -#, c-format -msgid "lost synchronization with server, resetting connection" -msgstr "se perdió la sincronía con el servidor, reseteando la conexión" - -#: fe-protocol2.c:1530 fe-protocol2.c:1562 fe-protocol3.c:2095 -#, c-format -msgid "protocol error: id=0x%x\n" -msgstr "error de protocolo: id=0x%x\n" - -#: fe-protocol3.c:365 -msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" -msgstr "el servidor envió datos (mensaje «D») sin precederlos con una descripción de fila (mensaje «T»)\n" - -#: fe-protocol3.c:429 +#: fe-protocol3.c:471 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "el contenido del mensaje no concuerda con el largo, en el mensaje tipo «%c»\n" -#: fe-protocol3.c:449 +#: fe-protocol3.c:491 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "se perdió la sincronía con el servidor: se recibió un mensaje de tipo «%c», largo %d\n" -#: fe-protocol3.c:500 fe-protocol3.c:540 +#: fe-protocol3.c:543 fe-protocol3.c:583 msgid "insufficient data in \"T\" message" msgstr "datos insuficientes en el mensaje «T»" -#: fe-protocol3.c:573 -msgid "extraneous data in \"T\" message" -msgstr "datos ininteligibles en mensaje «T»" +#: fe-protocol3.c:654 fe-protocol3.c:860 +msgid "out of memory for query result" +msgstr "no hay suficiente memoria para el resultado de la consulta" -#: fe-protocol3.c:686 -msgid "extraneous data in \"t\" message" -msgstr "datos ininteligibles en mensaje «t»" +#: fe-protocol3.c:723 +#, fuzzy +#| msgid "insufficient data in \"T\" message" +msgid "insufficient data in \"t\" message" +msgstr "datos insuficientes en el mensaje «T»" -#: fe-protocol3.c:757 fe-protocol3.c:789 fe-protocol3.c:807 +#: fe-protocol3.c:782 fe-protocol3.c:814 fe-protocol3.c:832 msgid "insufficient data in \"D\" message" msgstr "datos insuficientes en el mensaje «D»" -#: fe-protocol3.c:763 +#: fe-protocol3.c:788 msgid "unexpected field count in \"D\" message" msgstr "cantidad de campos inesperada en mensaje «D»" -#: fe-protocol3.c:816 -msgid "extraneous data in \"D\" message" -msgstr "datos ininteligibles en mensaje «D»" - -#: fe-protocol3.c:1008 +#: fe-protocol3.c:1029 msgid "no error message available\n" msgstr "no hay mensaje de error disponible\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1056 fe-protocol3.c:1075 +#: fe-protocol3.c:1077 fe-protocol3.c:1096 #, c-format msgid " at character %s" msgstr " en el carácter %s" -#: fe-protocol3.c:1088 +#: fe-protocol3.c:1109 #, c-format msgid "DETAIL: %s\n" msgstr "DETALLE: %s\n" -#: fe-protocol3.c:1091 +#: fe-protocol3.c:1112 #, c-format msgid "HINT: %s\n" msgstr "SUGERENCIA: %s\n" -#: fe-protocol3.c:1094 +#: fe-protocol3.c:1115 #, c-format msgid "QUERY: %s\n" msgstr "CONSULTA: %s\n" -#: fe-protocol3.c:1101 +#: fe-protocol3.c:1122 #, c-format msgid "CONTEXT: %s\n" msgstr "CONTEXTO: %s\n" -#: fe-protocol3.c:1110 +#: fe-protocol3.c:1131 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "NOMBRE DE ESQUEMA: %s\n" -#: fe-protocol3.c:1114 +#: fe-protocol3.c:1135 #, c-format msgid "TABLE NAME: %s\n" msgstr "NOMBRE DE TABLA: %s\n" -#: fe-protocol3.c:1118 +#: fe-protocol3.c:1139 #, c-format msgid "COLUMN NAME: %s\n" msgstr "NOMBRE DE COLUMNA: %s\n" -#: fe-protocol3.c:1122 +#: fe-protocol3.c:1143 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "NOMBRE TIPO DE DATO: %s\n" -#: fe-protocol3.c:1126 +#: fe-protocol3.c:1147 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "NOMBRE DE RESTRICCIÓN: %s\n" -#: fe-protocol3.c:1138 +#: fe-protocol3.c:1159 msgid "LOCATION: " msgstr "UBICACIÓN: " -#: fe-protocol3.c:1140 +#: fe-protocol3.c:1161 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1163 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1337 +#: fe-protocol3.c:1358 #, c-format msgid "LINE %d: " msgstr "LÍNEA %d: " -#: fe-protocol3.c:1732 +#: fe-protocol3.c:1757 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: no se está haciendo COPY OUT de texto\n" +#: fe-protocol3.c:2123 +#, c-format +msgid "protocol error: id=0x%x\n" +msgstr "error de protocolo: id=0x%x\n" + #: fe-secure-common.c:124 msgid "SSL certificate's name contains embedded null\n" msgstr "el elemento de nombre en el certificado SSL contiene un carácter null\n" @@ -1096,24 +1048,24 @@ msgstr "mensaje GSSAPI entrante no usó confidencialidad\n" msgid "could not initiate GSSAPI security context" msgstr "no se pudo iniciar un contexto de seguridad GSSAPI" -#: fe-secure-gssapi.c:673 +#: fe-secure-gssapi.c:670 msgid "GSSAPI size check error" msgstr "error de verificación de tamaño GSSAPI" -#: fe-secure-gssapi.c:684 +#: fe-secure-gssapi.c:681 msgid "GSSAPI context establishment error" msgstr "error de establecimiento de contexto de GSSAPI" -#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1291 +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1329 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "ERROR en llamada SSL: %s\n" -#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1295 +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1333 msgid "SSL SYSCALL error: EOF detected\n" msgstr "ERROR en llamada SSL: detectado fin de archivo\n" -#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1304 +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1342 #, c-format msgid "SSL error: %s\n" msgstr "error de SSL: %s\n" @@ -1122,7 +1074,7 @@ msgstr "error de SSL: %s\n" msgid "SSL connection has been closed unexpectedly\n" msgstr "la conexión SSL se ha cerrado inesperadamente\n" -#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1354 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1392 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "código de error SSL no reconocido: %d\n" @@ -1144,37 +1096,37 @@ msgstr "no se pudo generar hash de certificado de la contraparte\n" msgid "SSL certificate's name entry is missing\n" msgstr "falta el elemento de nombre en el certificado SSL\n" -#: fe-secure-openssl.c:815 +#: fe-secure-openssl.c:822 #, c-format msgid "could not create SSL context: %s\n" msgstr "no se pudo crear un contexto SSL: %s\n" -#: fe-secure-openssl.c:854 +#: fe-secure-openssl.c:861 #, c-format msgid "invalid value \"%s\" for minimum SSL protocol version\n" msgstr "valor entero «%s» no válido para la versión mínima del protocolo SSL\n" -#: fe-secure-openssl.c:865 +#: fe-secure-openssl.c:872 #, c-format msgid "could not set minimum SSL protocol version: %s\n" msgstr "no se pudo definir la versión mínima de protocolo SSL: %s\n" -#: fe-secure-openssl.c:883 +#: fe-secure-openssl.c:890 #, c-format msgid "invalid value \"%s\" for maximum SSL protocol version\n" msgstr "valor entero «%s» no válido para la versión máxima del protocolo SSL\n" -#: fe-secure-openssl.c:894 +#: fe-secure-openssl.c:901 #, c-format msgid "could not set maximum SSL protocol version: %s\n" msgstr "no se pudo definir la versión máxima de protocolo SSL: %s\n" -#: fe-secure-openssl.c:930 +#: fe-secure-openssl.c:937 #, c-format msgid "could not read root certificate file \"%s\": %s\n" msgstr "no se pudo leer la lista de certificado raíz «%s»: %s\n" -#: fe-secure-openssl.c:974 +#: fe-secure-openssl.c:990 msgid "" "could not get home directory to locate root certificate file\n" "Either provide the file or change sslmode to disable server certificate verification.\n" @@ -1182,7 +1134,7 @@ msgstr "" "no se pudo obtener el directorio «home» para ubicar el archivo del certificado raíz\n" "Debe ya sea entregar este archivo, o bien cambiar sslmode para deshabilitar la verificación de certificados del servidor.\n" -#: fe-secure-openssl.c:978 +#: fe-secure-openssl.c:994 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -1191,92 +1143,98 @@ msgstr "" "el archivo de certificado raíz «%s» no existe\n" "Debe ya sea entregar este archivo, o bien cambiar sslmode para deshabilitar la verificación de certificados del servidor.\n" -#: fe-secure-openssl.c:1009 +#: fe-secure-openssl.c:1025 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "no se pudo abrir el archivo de certificado «%s»: %s\n" -#: fe-secure-openssl.c:1028 +#: fe-secure-openssl.c:1044 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "no se pudo leer el archivo de certificado «%s»: %s\n" -#: fe-secure-openssl.c:1053 +#: fe-secure-openssl.c:1069 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "no se pudo establecer conexión SSL: %s\n" -#: fe-secure-openssl.c:1107 +#: fe-secure-openssl.c:1099 +#, fuzzy, c-format +#| msgid "could not send SSL negotiation packet: %s\n" +msgid "could not set SSL Server Name Indication (SNI): %s\n" +msgstr "no se pudo enviar el paquete de negociación SSL: %s\n" + +#: fe-secure-openssl.c:1145 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "no se pudo cargar el motor SSL «%s»: %s\n" -#: fe-secure-openssl.c:1119 +#: fe-secure-openssl.c:1157 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "no se pudo inicializar el motor SSL «%s»: %s\n" -#: fe-secure-openssl.c:1135 +#: fe-secure-openssl.c:1173 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "no se pudo leer el archivo de la llave privada SSL «%s» desde el motor «%s»: %s\n" -#: fe-secure-openssl.c:1149 +#: fe-secure-openssl.c:1187 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "no se pudo leer la llave privada SSL «%s» desde el motor «%s»: %s\n" -#: fe-secure-openssl.c:1186 +#: fe-secure-openssl.c:1224 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "el certificado está presente, pero no la llave privada «%s»\n" -#: fe-secure-openssl.c:1194 +#: fe-secure-openssl.c:1232 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "el archivo de la llave privada «%s» tiene permiso de lectura para el grupo u otros; los permisos deberían ser u=rw (0600) o menos\n" -#: fe-secure-openssl.c:1219 +#: fe-secure-openssl.c:1257 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "no se pudo cargar el archivo de la llave privada «%s»: %s\n" -#: fe-secure-openssl.c:1237 +#: fe-secure-openssl.c:1275 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "el certificado no coincide con la llave privada «%s»: %s\n" -#: fe-secure-openssl.c:1337 +#: fe-secure-openssl.c:1375 #, c-format msgid "This may indicate that the server does not support any SSL protocol version between %s and %s.\n" msgstr "Esto puede indicar que el servidor no soporta ninguna versión del protocolo SSL entre %s and %s.\n" -#: fe-secure-openssl.c:1373 +#: fe-secure-openssl.c:1411 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "el certificado no pudo ser obtenido: %s\n" -#: fe-secure-openssl.c:1462 +#: fe-secure-openssl.c:1517 #, c-format msgid "no SSL error reported" msgstr "código de error SSL no reportado" -#: fe-secure-openssl.c:1471 +#: fe-secure-openssl.c:1526 #, c-format msgid "SSL error code %lu" msgstr "código de error SSL %lu" -#: fe-secure-openssl.c:1718 +#: fe-secure-openssl.c:1773 #, c-format msgid "WARNING: sslpassword truncated\n" msgstr "ADVERTENCIA: sslpassword truncada\n" -#: fe-secure.c:275 +#: fe-secure.c:267 #, c-format msgid "could not receive data from server: %s\n" msgstr "no se pudo recibir datos del servidor: %s\n" -#: fe-secure.c:390 +#: fe-secure.c:380 #, c-format msgid "could not send data to server: %s\n" msgstr "no se pudo enviar datos al servidor: %s\n" @@ -1285,3 +1243,114 @@ msgstr "no se pudo enviar datos al servidor: %s\n" #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "código de error de socket no reconocido: 0x%08X/%d" + +#~ msgid "extraneous data in \"D\" message" +#~ msgstr "datos ininteligibles en mensaje «D»" + +#~ msgid "extraneous data in \"t\" message" +#~ msgstr "datos ininteligibles en mensaje «t»" + +#~ msgid "extraneous data in \"T\" message" +#~ msgstr "datos ininteligibles en mensaje «T»" + +#~ msgid "lost synchronization with server, resetting connection" +#~ msgstr "se perdió la sincronía con el servidor, reseteando la conexión" + +#~ msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" +#~ msgstr "el servidor envió datos binarios (mensaje «B») sin precederlos con una description de fila (mensaje «T»)" + +#~ msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" +#~ msgstr "el servidor envió datos (mensaje «D») sin precederlos con una descripción de fila (mensaje «T»)" + +#~ msgid "unexpected character %c following empty query response (\"I\" message)" +#~ msgstr "carácter %c no esperado, siguiendo una respuesta de consulta vacía (mensaje «I»)" + +#~ msgid "invalid state %c, probably indicative of memory corruption\n" +#~ msgstr "el estado %c no es válido, probablemente por corrupción de memoria\n" + +#~ msgid "invalid setenv state %c, probably indicative of memory corruption\n" +#~ msgstr "el estado de setenv %c no es válido, probablemente por corrupción de memoria\n" + +#~ msgid "select() failed: %s\n" +#~ msgstr "select() fallida: %s\n" + +#~ msgid "cannot determine OID of function lowrite\n" +#~ msgstr "no se puede determinar el OID de la función lowrite\n" + +#~ msgid "cannot determine OID of function loread\n" +#~ msgstr "no se puede determinar el OID de la función loread\n" + +#~ msgid "cannot determine OID of function lo_lseek\n" +#~ msgstr "no se puede determinar el OID de la función lo_lseek\n" + +#~ msgid "cannot determine OID of function lo_unlink\n" +#~ msgstr "no se puede determinar el OID de la función lo_unlink\n" + +#~ msgid "cannot determine OID of function lo_creat\n" +#~ msgstr "no se puede determinar el OID de la función lo_creat\n" + +#~ msgid "cannot determine OID of function lo_open\n" +#~ msgstr "no se puede determinar el OID de la función lo_open\n" + +#~ msgid "cannot determine OID of function lo_tell64\n" +#~ msgstr "no se puede determinar el OID de la función lo_tell64\n" + +#~ msgid "cannot determine OID of function lo_create\n" +#~ msgstr "no se puede determinar el OID de la función lo_create\n" + +#~ msgid "cannot determine OID of function lo_lseek64\n" +#~ msgstr "no se puede determinar el OID de la función lo_lseek64\n" + +#~ msgid "cannot determine OID of function lo_truncate64\n" +#~ msgstr "no se puede determinar el OID de la función lo_truncate64\n" + +#~ msgid "cannot determine OID of function lo_truncate\n" +#~ msgstr "no se puede determinar el OID de la función lo_truncate\n" + +#~ msgid "COPY OUT state must be terminated first\n" +#~ msgstr "el estado COPY OUT debe ser terminado primero\n" + +#~ msgid "COPY IN state must be terminated first\n" +#~ msgstr "el estado COPY IN debe ser terminado primero\n" + +#~ msgid "function requires at least protocol version 3.0\n" +#~ msgstr "la función requiere protocolo 3.0 o superior\n" + +#~ msgid "line %d too long in service file \"%s\"\n" +#~ msgstr "la línea %d es demasiado larga en archivo de servicio «%s»\n" + +#~ msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" +#~ msgstr "la prueba «SHOW transaction_read_only» falló en el servidor «%s:%s»\n" + +#~ msgid "could not make a writable connection to server \"%s:%s\"\n" +#~ msgstr "no se pudo establecer una conexión de escritura al servidor: «%s:%s»\n" + +#~ msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" +#~ msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" + +#~ msgid "setsockopt(%s) failed: %s\n" +#~ msgstr "setsockopt(%s) falló: %s\n" + +#~ msgid "" +#~ "could not connect to server: %s\n" +#~ "\tIs the server running on host \"%s\" (%s) and accepting\n" +#~ "\tTCP/IP connections on port %s?\n" +#~ msgstr "" +#~ "no se pudo conectar con el servidor: %s\n" +#~ "\t¿Está el servidor en ejecución en el servidor «%s» (%s) y aceptando\n" +#~ "\tconexiones TCP/IP en el puerto %s?\n" + +#~ msgid "invalid target_session_attrs value: \"%s\"\n" +#~ msgstr "valor para target_session_attrs no válido: «%s»\n" + +#~ msgid "invalid gssencmode value: \"%s\"\n" +#~ msgstr "valor gssencmode no válido: «%s»\n" + +#~ msgid "invalid ssl_max_protocol_version value: \"%s\"\n" +#~ msgstr "valor sslmode no válido: «%s»\n" + +#~ msgid "invalid ssl_min_protocol_version value: \"%s\"\n" +#~ msgstr "valor sslmode no válido: «%s»\n" + +#~ msgid "invalid channel_binding value: \"%s\"\n" +#~ msgstr "valor cidr no válido: «%s»\n" diff --git a/src/interfaces/libpq/po/fr.po b/src/interfaces/libpq/po/fr.po index 36c653db56ae2..76e321ae95339 100644 --- a/src/interfaces/libpq/po/fr.po +++ b/src/interfaces/libpq/po/fr.po @@ -9,15 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-26 06:39+0000\n" -"PO-Revision-Date: 2021-04-26 11:37+0200\n" +"POT-Creation-Date: 2021-05-11 07:39+0000\n" +"PO-Revision-Date: 2021-05-11 10:17+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: PostgreSQLfr \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 2.4.3\n" #: fe-auth-scram.c:213 msgid "malformed SCRAM message (empty message)\n" @@ -57,11 +57,11 @@ msgstr "n'a pas pu générer le nonce\n" #: fe-auth-scram.c:616 fe-auth-scram.c:642 fe-auth-scram.c:657 #: fe-auth-scram.c:707 fe-auth-scram.c:746 fe-auth.c:290 fe-auth.c:362 #: fe-auth.c:398 fe-auth.c:615 fe-auth.c:774 fe-auth.c:1132 fe-auth.c:1282 -#: fe-connect.c:912 fe-connect.c:1456 fe-connect.c:1625 fe-connect.c:2976 -#: fe-connect.c:4655 fe-connect.c:4916 fe-connect.c:5035 fe-connect.c:5279 -#: fe-connect.c:5361 fe-connect.c:5460 fe-connect.c:5716 fe-connect.c:5745 -#: fe-connect.c:5817 fe-connect.c:5841 fe-connect.c:5859 fe-connect.c:5960 -#: fe-connect.c:5969 fe-connect.c:6327 fe-connect.c:6477 fe-exec.c:1209 +#: fe-connect.c:912 fe-connect.c:1456 fe-connect.c:1625 fe-connect.c:2977 +#: fe-connect.c:4658 fe-connect.c:4919 fe-connect.c:5038 fe-connect.c:5282 +#: fe-connect.c:5364 fe-connect.c:5463 fe-connect.c:5719 fe-connect.c:5748 +#: fe-connect.c:5820 fe-connect.c:5844 fe-connect.c:5862 fe-connect.c:5963 +#: fe-connect.c:5972 fe-connect.c:6330 fe-connect.c:6480 fe-exec.c:1209 #: fe-exec.c:2993 fe-exec.c:3145 fe-exec.c:3918 fe-exec.c:4083 #: fe-gssapi-common.c:110 fe-lobj.c:881 fe-protocol3.c:1016 fe-protocol3.c:1724 #: fe-secure-common.c:110 fe-secure-gssapi.c:504 fe-secure-openssl.c:440 @@ -221,12 +221,12 @@ msgstr "méthode d'authentification %u non supportée\n" msgid "user name lookup failure: error code %lu\n" msgstr "échec de la recherche du nom d'utilisateur : code erreur %lu\n" -#: fe-auth.c:1117 fe-connect.c:2851 +#: fe-auth.c:1117 fe-connect.c:2852 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "n'a pas pu rechercher l'identifiant de l'utilisateur local %d : %s\n" -#: fe-auth.c:1122 fe-connect.c:2856 +#: fe-auth.c:1122 fe-connect.c:2857 #, c-format msgid "local user with ID %d does not exist\n" msgstr "l'utilisateur local dont l'identifiant est %d n'existe pas\n" @@ -307,319 +307,316 @@ msgstr "\tLe serveur est-il actif sur cet hôte et accepte-t-il les connexions ? msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "valeur entière « %s » invalide pour l'option de connexion « %s »\n" -#: fe-connect.c:1866 fe-connect.c:1901 fe-connect.c:1937 fe-connect.c:2025 -#: fe-connect.c:2639 +#: fe-connect.c:1866 fe-connect.c:1901 fe-connect.c:1937 fe-connect.c:2026 +#: fe-connect.c:2640 #, c-format msgid "%s(%s) failed: %s\n" msgstr "échec de %s(%s) : %s\n" #: fe-connect.c:1991 #, c-format -msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %d\n" -msgstr "échec de WSAIoctl(SIO_KEEPALIVE_VALS) : %d\n" +msgid "%s(%s) failed: error code %d\n" +msgstr "échec de %s(%s) : code d'erreur %d\n" -#: fe-connect.c:2305 +#: fe-connect.c:2306 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "état de connexion invalide, indique probablement une corruption de mémoire\n" -#: fe-connect.c:2384 +#: fe-connect.c:2385 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "numéro de port invalide : « %s »\n" -#: fe-connect.c:2400 +#: fe-connect.c:2401 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "n'a pas pu traduire le nom d'hôte « %s » en adresse : %s\n" -#: fe-connect.c:2413 +#: fe-connect.c:2414 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "n'a pas pu analyser l'adresse réseau « %s » : %s\n" -#: fe-connect.c:2426 +#: fe-connect.c:2427 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Le chemin du socket de domaine Unix, « %s », est trop (maximum %d octets)\n" -#: fe-connect.c:2441 +#: fe-connect.c:2442 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "" "n'a pas pu traduire le chemin de la socket du domaine Unix « %s » en adresse :\n" "%s\n" -#: fe-connect.c:2567 +#: fe-connect.c:2568 #, c-format msgid "could not create socket: %s\n" msgstr "n'a pas pu créer la socket : %s\n" -#: fe-connect.c:2598 +#: fe-connect.c:2599 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "n'a pas pu activer le mode non-bloquant pour la socket : %s\n" -#: fe-connect.c:2608 +#: fe-connect.c:2609 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "n'a pas pu paramétrer la socket en mode close-on-exec : %s\n" -#: fe-connect.c:2626 +#: fe-connect.c:2627 msgid "keepalives parameter must be an integer\n" msgstr "le paramètre keepalives doit être un entier\n" -#: fe-connect.c:2767 +#: fe-connect.c:2768 #, c-format msgid "could not get socket error status: %s\n" msgstr "n'a pas pu déterminer le statut d'erreur de la socket : %s\n" -#: fe-connect.c:2795 +#: fe-connect.c:2796 #, c-format msgid "could not get client address from socket: %s\n" msgstr "n'a pas pu obtenir l'adresse du client depuis la socket : %s\n" -#: fe-connect.c:2837 +#: fe-connect.c:2838 msgid "requirepeer parameter is not supported on this platform\n" msgstr "le paramètre requirepeer n'est pas supporté sur cette plateforme\n" -#: fe-connect.c:2840 +#: fe-connect.c:2841 #, c-format msgid "could not get peer credentials: %s\n" msgstr "n'a pas pu obtenir l'authentification de l'autre : %s\n" -#: fe-connect.c:2864 +#: fe-connect.c:2865 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer indique « %s » mais le nom de l'utilisateur réel est « %s »\n" -#: fe-connect.c:2904 +#: fe-connect.c:2905 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "n'a pas pu transmettre le paquet de négociation GSSAPI : %s\n" -#: fe-connect.c:2916 +#: fe-connect.c:2917 msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" msgstr "le chiffrage avec GSSAPI était requis, mais impossible (potentiellement pas de cache, de support serveur ou de socket local)\n" -#: fe-connect.c:2958 +#: fe-connect.c:2959 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "n'a pas pu transmettre le paquet de négociation SSL : %s\n" -#: fe-connect.c:2989 +#: fe-connect.c:2990 #, c-format msgid "could not send startup packet: %s\n" msgstr "n'a pas pu transmettre le paquet de démarrage : %s\n" -#: fe-connect.c:3065 +#: fe-connect.c:3066 msgid "server does not support SSL, but SSL was required\n" msgstr "le serveur ne supporte pas SSL alors que SSL était réclamé\n" -#: fe-connect.c:3092 +#: fe-connect.c:3093 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "a reçu une réponse invalide à la négociation SSL : %c\n" -#: fe-connect.c:3181 +#: fe-connect.c:3182 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "le serveur ne supporte pas le chiffrage GSSAPI alors qu'il était réclamé\n" -#: fe-connect.c:3193 +#: fe-connect.c:3194 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "a reçu une réponse invalide à la négociation GSSAPI : %c\n" -#: fe-connect.c:3259 fe-connect.c:3284 +#: fe-connect.c:3260 fe-connect.c:3285 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "" "attendait une requête d'authentification en provenance du serveur, mais a\n" " reçu %c\n" -#: fe-connect.c:3491 +#: fe-connect.c:3492 msgid "unexpected message from server during startup\n" msgstr "message inattendu du serveur lors du démarrage\n" -#: fe-connect.c:3583 +#: fe-connect.c:3584 msgid "session is read-only\n" msgstr "la session est en lecture seule\n" -#: fe-connect.c:3586 +#: fe-connect.c:3587 msgid "session is not read-only\n" msgstr "la session n'est pas en lecture seule\n" -#: fe-connect.c:3640 +#: fe-connect.c:3641 msgid "server is in hot standby mode\n" msgstr "le serveur est dans le mode hot standby\n" -#: fe-connect.c:3643 +#: fe-connect.c:3644 msgid "server is not in hot standby mode\n" msgstr "le serveur n'est pas dans le mode hot standby\n" -#: fe-connect.c:3754 -msgid "\"SHOW transaction_read_only\" failed\n" -msgstr "\"SHOW transaction_read_only\" a échoué\n" - -#: fe-connect.c:3805 -msgid "\"SELECT pg_is_in_recovery()\" failed\n" -msgstr "\"SELECT pg_is_in_recovery()\" a échoué\n" +#: fe-connect.c:3755 fe-connect.c:3807 +#, c-format +msgid "\"%s\" failed\n" +msgstr "échec de « %s »\n" -#: fe-connect.c:3818 +#: fe-connect.c:3821 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "" "état de connexion invalide (%d), indiquant probablement une corruption de\n" " mémoire\n" -#: fe-connect.c:4264 fe-connect.c:4324 +#: fe-connect.c:4267 fe-connect.c:4327 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "échec de PGEventProc « %s » lors de l'événement PGEVT_CONNRESET\n" -#: fe-connect.c:4668 +#: fe-connect.c:4671 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "URL LDAP « %s » invalide : le schéma doit être ldap://\n" -#: fe-connect.c:4683 +#: fe-connect.c:4686 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "URL LDAP « %s » invalide : le « distinguished name » manque\n" -#: fe-connect.c:4695 fe-connect.c:4753 +#: fe-connect.c:4698 fe-connect.c:4756 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "URL LDAP « %s » invalide : doit avoir exactement un attribut\n" -#: fe-connect.c:4707 fe-connect.c:4769 +#: fe-connect.c:4710 fe-connect.c:4772 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "URL LDAP « %s » invalide : doit avoir une échelle de recherche (base/un/sous)\n" -#: fe-connect.c:4719 +#: fe-connect.c:4722 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "URL LDAP « %s » invalide : aucun filtre\n" -#: fe-connect.c:4741 +#: fe-connect.c:4744 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "URL LDAP « %s » invalide : numéro de port invalide\n" -#: fe-connect.c:4779 +#: fe-connect.c:4782 msgid "could not create LDAP structure\n" msgstr "n'a pas pu créer la structure LDAP\n" -#: fe-connect.c:4855 +#: fe-connect.c:4858 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "échec de la recherche sur le serveur LDAP : %s\n" -#: fe-connect.c:4866 +#: fe-connect.c:4869 msgid "more than one entry found on LDAP lookup\n" msgstr "plusieurs entrées trouvées pendant la recherche LDAP\n" -#: fe-connect.c:4867 fe-connect.c:4879 +#: fe-connect.c:4870 fe-connect.c:4882 msgid "no entry found on LDAP lookup\n" msgstr "aucune entrée trouvée pendant la recherche LDAP\n" -#: fe-connect.c:4890 fe-connect.c:4903 +#: fe-connect.c:4893 fe-connect.c:4906 msgid "attribute has no values on LDAP lookup\n" msgstr "l'attribut n'a pas de valeur après la recherche LDAP\n" -#: fe-connect.c:4955 fe-connect.c:4974 fe-connect.c:5499 +#: fe-connect.c:4958 fe-connect.c:4977 fe-connect.c:5502 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "« = » manquant après « %s » dans la chaîne des paramètres de connexion\n" -#: fe-connect.c:5047 fe-connect.c:5684 fe-connect.c:6460 +#: fe-connect.c:5050 fe-connect.c:5687 fe-connect.c:6463 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "option de connexion « %s » invalide\n" -#: fe-connect.c:5063 fe-connect.c:5548 +#: fe-connect.c:5066 fe-connect.c:5551 msgid "unterminated quoted string in connection info string\n" msgstr "guillemets non refermés dans la chaîne des paramètres de connexion\n" -#: fe-connect.c:5144 +#: fe-connect.c:5147 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "définition du service « %s » introuvable\n" -#: fe-connect.c:5170 +#: fe-connect.c:5173 #, c-format msgid "service file \"%s\" not found\n" msgstr "fichier de service « %s » introuvable\n" -#: fe-connect.c:5247 fe-connect.c:5291 +#: fe-connect.c:5250 fe-connect.c:5294 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "erreur de syntaxe dans le fichier service « %s », ligne %d\n" -#: fe-connect.c:5258 +#: fe-connect.c:5261 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "spécifications imbriquées de service non supportées dans le fichier service « %s », ligne %d\n" -#: fe-connect.c:5980 +#: fe-connect.c:5983 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "URI invalide propagée à la routine d'analyse interne : « %s »\n" -#: fe-connect.c:6057 +#: fe-connect.c:6060 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "" "fin de chaîne atteinte lors de la recherche du « ] » correspondant dans\n" "l'adresse IPv6 de l'hôte indiquée dans l'URI : « %s »\n" -#: fe-connect.c:6064 +#: fe-connect.c:6067 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "l'adresse IPv6 de l'hôte ne peut pas être vide dans l'URI : « %s »\n" -#: fe-connect.c:6079 +#: fe-connect.c:6082 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "" "caractère « %c » inattendu à la position %d de l'URI (caractère « : » ou\n" "« / » attendu) : « %s »\n" -#: fe-connect.c:6209 +#: fe-connect.c:6212 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "séparateur « = » de clé/valeur en trop dans le paramètre de requête URI : « %s »\n" -#: fe-connect.c:6229 +#: fe-connect.c:6232 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "séparateur « = » de clé/valeur manquant dans le paramètre de requête URI : « %s »\n" -#: fe-connect.c:6281 +#: fe-connect.c:6284 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "paramètre de la requête URI invalide : « %s »\n" -#: fe-connect.c:6355 +#: fe-connect.c:6358 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "jeton encodé en pourcentage invalide : « %s »\n" -#: fe-connect.c:6365 +#: fe-connect.c:6368 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "valeur %%00 interdite dans la valeur codée en pourcentage : « %s »\n" -#: fe-connect.c:6735 +#: fe-connect.c:6738 msgid "connection pointer is NULL\n" msgstr "le pointeur de connexion est NULL\n" -#: fe-connect.c:7015 +#: fe-connect.c:7018 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "ATTENTION : le fichier de mots de passe « %s » n'est pas un fichier texte\n" -#: fe-connect.c:7024 +#: fe-connect.c:7027 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "" @@ -627,7 +624,7 @@ msgstr "" "lecture pour le groupe ou universel ; les droits devraient être u=rw (0600)\n" "ou inférieur\n" -#: fe-connect.c:7132 +#: fe-connect.c:7135 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "mot de passe récupéré dans le fichier « %s »\n" @@ -1230,193 +1227,202 @@ msgstr "n'a pas pu transmettre les données au serveur : %s\n" msgid "unrecognized socket error: 0x%08X/%d" msgstr "erreur de socket non reconnue : 0x%08X/%d" -#~ msgid "invalid channel_binding value: \"%s\"\n" -#~ msgstr "valeur de channel_binding invalide : « %s »\n" +#~ msgid "setsockopt(%s) failed: %s\n" +#~ msgstr "setsockopt(%s) a échoué : %s\n" -#~ msgid "invalid ssl_min_protocol_version value: \"%s\"\n" -#~ msgstr "valeur ssl_min_protocol_version invalide : « %s »\n" +#~ msgid "select() failed: %s\n" +#~ msgstr "échec de select() : %s\n" -#~ msgid "invalid ssl_max_protocol_version value: \"%s\"\n" -#~ msgstr "valeur ssl_max_protocol_version invalide : « %s »\n" +#~ msgid "extraneous data in \"T\" message" +#~ msgstr "données supplémentaires dans le message « T »" -#~ msgid "invalid gssencmode value: \"%s\"\n" -#~ msgstr "valeur gssencmode invalide : « %s »\n" +#~ msgid "extraneous data in \"t\" message" +#~ msgstr "données supplémentaires dans le message « t »" -#~ msgid "invalid target_session_attrs value: \"%s\"\n" -#~ msgstr "valeur target_session_attrs invalide : « %s »\n" +#~ msgid "extraneous data in \"D\" message" +#~ msgstr "données supplémentaires dans le message « D »" -#~ msgid "" -#~ "could not connect to server: %s\n" -#~ "\tIs the server running on host \"%s\" (%s) and accepting\n" -#~ "\tTCP/IP connections on port %s?\n" +#~ msgid "no GSSAPI support; cannot require GSSAPI\n" +#~ msgstr "pas de support de GSSAPI : ne peut pas nécessiter GSSAPI\n" + +#~ msgid "failed to generate nonce\n" +#~ msgstr "échec pour la génération de nonce\n" + +#~ msgid "socket not open\n" +#~ msgstr "socket non ouvert\n" + +#~ msgid "could not set socket to blocking mode: %s\n" +#~ msgstr "n'a pas pu activer le mode bloquant pour la socket : %s\n" + +#~ msgid "Kerberos 5 authentication rejected: %*s\n" +#~ msgstr "authentification Kerberos 5 rejetée : %*s\n" + +#~ msgid "could not restore nonblocking mode on socket: %s\n" +#~ msgstr "n'a pas pu rétablir le mode non-bloquant pour la socket : %s\n" + +#~ msgid "could not get home directory to locate client certificate files\n" #~ msgstr "" -#~ "n'a pas pu se connecter au serveur : %s\n" -#~ "\tLe serveur est-il actif sur l'hôte « %s » (%s)\n" -#~ "\tet accepte-t-il les connexionsTCP/IP sur le port %s ?\n" +#~ "n'a pas pu récupérer le répertoire personnel pour trouver les certificats\n" +#~ "du client\n" -#~ msgid "could not make a writable connection to server \"%s:%s\"\n" -#~ msgstr "n'a pas pu réaliser une connexion en écriture au serveur « %s » : %s\n" +#~ msgid "verified SSL connections are only supported when connecting to a host name\n" +#~ msgstr "" +#~ "les connexions SSL vérifiées ne sont supportées que lors de la connexion\n" +#~ "à un alias hôte\n" -#~ msgid "line %d too long in service file \"%s\"\n" -#~ msgstr "ligne %d trop longue dans le fichier service « %s »\n" +#~ msgid "could not open private key file \"%s\": %s\n" +#~ msgstr "n'a pas pu ouvrir le fichier de clé privée « %s » : %s\n" -#~ msgid "function requires at least protocol version 3.0\n" -#~ msgstr "la fonction nécessite au minimum le protocole 3.0\n" +#~ msgid "private key file \"%s\" changed during execution\n" +#~ msgstr "la clé privée « %s » a été modifiée durant l'exécution\n" -#~ msgid "COPY IN state must be terminated first\n" -#~ msgstr "l'état COPY IN doit d'abord être terminé\n" +#~ msgid "could not read private key file \"%s\": %s\n" +#~ msgstr "n'a pas pu lire la clé privée « %s » : %s\n" -#~ msgid "COPY OUT state must be terminated first\n" -#~ msgstr "l'état COPY OUT doit d'abord être terminé\n" +#~ msgid "invalid appname state %d, probably indicative of memory corruption\n" +#~ msgstr "état appname %d invalide, indiquant probablement une corruption de la mémoire\n" -#~ msgid "cannot determine OID of function lo_truncate\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_truncate\n" +#~ msgid "unrecognized return value from row processor" +#~ msgstr "valeur de retour du traitement de la ligne non reconnue" -#~ msgid "cannot determine OID of function lo_truncate64\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_truncate64\n" +#~ msgid "could not acquire mutex: %s\n" +#~ msgstr "n'a pas pu acquérir le mutex : %s\n" -#~ msgid "cannot determine OID of function lo_lseek64\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_lseek64\n" +#~ msgid "setsockopt(SO_KEEPALIVE) failed: %s\n" +#~ msgstr "setsockopt(SO_KEEPALIVE) a échoué : %s\n" -#~ msgid "cannot determine OID of function lo_create\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_create\n" +#~ msgid "setsockopt(TCP_KEEPINTVL) failed: %s\n" +#~ msgstr "setsockopt(TCP_KEEPINTVL) a échoué : %s\n" -#~ msgid "cannot determine OID of function lo_tell64\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_tell64\n" +#~ msgid "setsockopt(TCP_KEEPALIVE) failed: %s\n" +#~ msgstr "setsockopt(TCP_KEEPALIVE) a échoué : %s\n" -#~ msgid "cannot determine OID of function lo_open\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_open\n" +#~ msgid "setsockopt(TCP_KEEPIDLE) failed: %s\n" +#~ msgstr "setsockopt(TCP_KEEPIDLE) a échoué : %s\n" -#~ msgid "cannot determine OID of function lo_creat\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_creat\n" +#~ msgid "could not get home directory to locate service definition file" +#~ msgstr "" +#~ "n'a pas pu obtenir le répertoire personnel pour trouver le certificat de\n" +#~ "définition du service" -#~ msgid "cannot determine OID of function lo_unlink\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_unlink\n" +#~ msgid "could not get home directory to locate password file\n" +#~ msgstr "" +#~ "n'a pas pu obtenir le répertoire personnel pour trouver le fichier de\n" +#~ "mot de passe\n" -#~ msgid "cannot determine OID of function lo_lseek\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_lseek\n" +#~ msgid "SSL library does not support CRL certificates (file \"%s\")\n" +#~ msgstr "la bibliothèque SSL ne supporte pas les certificats CRL (fichier « %s »)\n" -#~ msgid "cannot determine OID of function loread\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction loread\n" +#~ msgid "could not set maximum version of SSL protocol: %s\n" +#~ msgstr "n'a pas pu mettre en place la version maximale du protocole SSL : %s\n" -#~ msgid "cannot determine OID of function lowrite\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lowrite\n" +#~ msgid "could not set minimum version of SSL protocol: %s\n" +#~ msgstr "n'a pas pu mettre en place la version minimale du protocole SSL : %s\n" -#~ msgid "invalid setenv state %c, probably indicative of memory corruption\n" -#~ msgstr "état setenv %c invalide, indiquant probablement une corruption de la mémoire\n" +#~ msgid "WARNING: line %d too long in password file \"%s\"\n" +#~ msgstr "ATTENTION : ligne %d trop longue dans le fichier de mots de passe « %s »\n" -#~ msgid "invalid state %c, probably indicative of memory corruption\n" -#~ msgstr "état %c invalide, indiquant probablement une corruption de la mémoire\n" +#~ msgid "lost synchronization with server, resetting connection" +#~ msgstr "synchronisation perdue avec le serveur, réinitialisation de la connexion" -#~ msgid "unexpected character %c following empty query response (\"I\" message)" +#~ msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" #~ msgstr "" -#~ "caractère %c inattendu à la suite d'une réponse de requête vide (message\n" -#~ "« I »)" +#~ "le serveur a envoyé des données binaires (message « B ») sans description\n" +#~ "préalable de la ligne (message « T »)" #~ msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" #~ msgstr "" #~ "le serveur a envoyé des données (message « D ») sans description préalable\n" #~ "de la ligne (message « T »)" -#~ msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" +#~ msgid "unexpected character %c following empty query response (\"I\" message)" #~ msgstr "" -#~ "le serveur a envoyé des données binaires (message « B ») sans description\n" -#~ "préalable de la ligne (message « T »)" +#~ "caractère %c inattendu à la suite d'une réponse de requête vide (message\n" +#~ "« I »)" -#~ msgid "lost synchronization with server, resetting connection" -#~ msgstr "synchronisation perdue avec le serveur, réinitialisation de la connexion" +#~ msgid "invalid state %c, probably indicative of memory corruption\n" +#~ msgstr "état %c invalide, indiquant probablement une corruption de la mémoire\n" -#~ msgid "WARNING: line %d too long in password file \"%s\"\n" -#~ msgstr "ATTENTION : ligne %d trop longue dans le fichier de mots de passe « %s »\n" +#~ msgid "invalid setenv state %c, probably indicative of memory corruption\n" +#~ msgstr "état setenv %c invalide, indiquant probablement une corruption de la mémoire\n" -#~ msgid "could not set minimum version of SSL protocol: %s\n" -#~ msgstr "n'a pas pu mettre en place la version minimale du protocole SSL : %s\n" +#~ msgid "cannot determine OID of function lowrite\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lowrite\n" -#~ msgid "could not set maximum version of SSL protocol: %s\n" -#~ msgstr "n'a pas pu mettre en place la version maximale du protocole SSL : %s\n" +#~ msgid "cannot determine OID of function loread\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction loread\n" -#~ msgid "SSL library does not support CRL certificates (file \"%s\")\n" -#~ msgstr "la bibliothèque SSL ne supporte pas les certificats CRL (fichier « %s »)\n" +#~ msgid "cannot determine OID of function lo_lseek\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_lseek\n" -#~ msgid "could not get home directory to locate password file\n" -#~ msgstr "" -#~ "n'a pas pu obtenir le répertoire personnel pour trouver le fichier de\n" -#~ "mot de passe\n" +#~ msgid "cannot determine OID of function lo_unlink\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_unlink\n" -#~ msgid "could not get home directory to locate service definition file" -#~ msgstr "" -#~ "n'a pas pu obtenir le répertoire personnel pour trouver le certificat de\n" -#~ "définition du service" +#~ msgid "cannot determine OID of function lo_creat\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_creat\n" -#~ msgid "setsockopt(TCP_KEEPIDLE) failed: %s\n" -#~ msgstr "setsockopt(TCP_KEEPIDLE) a échoué : %s\n" +#~ msgid "cannot determine OID of function lo_open\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_open\n" -#~ msgid "setsockopt(TCP_KEEPALIVE) failed: %s\n" -#~ msgstr "setsockopt(TCP_KEEPALIVE) a échoué : %s\n" +#~ msgid "cannot determine OID of function lo_tell64\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_tell64\n" -#~ msgid "setsockopt(TCP_KEEPINTVL) failed: %s\n" -#~ msgstr "setsockopt(TCP_KEEPINTVL) a échoué : %s\n" +#~ msgid "cannot determine OID of function lo_create\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_create\n" -#~ msgid "setsockopt(SO_KEEPALIVE) failed: %s\n" -#~ msgstr "setsockopt(SO_KEEPALIVE) a échoué : %s\n" +#~ msgid "cannot determine OID of function lo_lseek64\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_lseek64\n" -#~ msgid "could not acquire mutex: %s\n" -#~ msgstr "n'a pas pu acquérir le mutex : %s\n" +#~ msgid "cannot determine OID of function lo_truncate64\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_truncate64\n" -#~ msgid "unrecognized return value from row processor" -#~ msgstr "valeur de retour du traitement de la ligne non reconnue" +#~ msgid "cannot determine OID of function lo_truncate\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_truncate\n" -#~ msgid "invalid appname state %d, probably indicative of memory corruption\n" -#~ msgstr "état appname %d invalide, indiquant probablement une corruption de la mémoire\n" +#~ msgid "COPY OUT state must be terminated first\n" +#~ msgstr "l'état COPY OUT doit d'abord être terminé\n" -#~ msgid "could not read private key file \"%s\": %s\n" -#~ msgstr "n'a pas pu lire la clé privée « %s » : %s\n" +#~ msgid "COPY IN state must be terminated first\n" +#~ msgstr "l'état COPY IN doit d'abord être terminé\n" -#~ msgid "private key file \"%s\" changed during execution\n" -#~ msgstr "la clé privée « %s » a été modifiée durant l'exécution\n" +#~ msgid "function requires at least protocol version 3.0\n" +#~ msgstr "la fonction nécessite au minimum le protocole 3.0\n" -#~ msgid "could not open private key file \"%s\": %s\n" -#~ msgstr "n'a pas pu ouvrir le fichier de clé privée « %s » : %s\n" +#~ msgid "line %d too long in service file \"%s\"\n" +#~ msgstr "ligne %d trop longue dans le fichier service « %s »\n" -#~ msgid "verified SSL connections are only supported when connecting to a host name\n" -#~ msgstr "" -#~ "les connexions SSL vérifiées ne sont supportées que lors de la connexion\n" -#~ "à un alias hôte\n" +#~ msgid "could not make a writable connection to server \"%s:%s\"\n" +#~ msgstr "n'a pas pu réaliser une connexion en écriture au serveur « %s » : %s\n" -#~ msgid "could not get home directory to locate client certificate files\n" +#~ msgid "" +#~ "could not connect to server: %s\n" +#~ "\tIs the server running on host \"%s\" (%s) and accepting\n" +#~ "\tTCP/IP connections on port %s?\n" #~ msgstr "" -#~ "n'a pas pu récupérer le répertoire personnel pour trouver les certificats\n" -#~ "du client\n" - -#~ msgid "could not restore nonblocking mode on socket: %s\n" -#~ msgstr "n'a pas pu rétablir le mode non-bloquant pour la socket : %s\n" - -#~ msgid "Kerberos 5 authentication rejected: %*s\n" -#~ msgstr "authentification Kerberos 5 rejetée : %*s\n" - -#~ msgid "could not set socket to blocking mode: %s\n" -#~ msgstr "n'a pas pu activer le mode bloquant pour la socket : %s\n" +#~ "n'a pas pu se connecter au serveur : %s\n" +#~ "\tLe serveur est-il actif sur l'hôte « %s » (%s)\n" +#~ "\tet accepte-t-il les connexionsTCP/IP sur le port %s ?\n" -#~ msgid "socket not open\n" -#~ msgstr "socket non ouvert\n" +#~ msgid "invalid target_session_attrs value: \"%s\"\n" +#~ msgstr "valeur target_session_attrs invalide : « %s »\n" -#~ msgid "failed to generate nonce\n" -#~ msgstr "échec pour la génération de nonce\n" +#~ msgid "invalid gssencmode value: \"%s\"\n" +#~ msgstr "valeur gssencmode invalide : « %s »\n" -#~ msgid "no GSSAPI support; cannot require GSSAPI\n" -#~ msgstr "pas de support de GSSAPI : ne peut pas nécessiter GSSAPI\n" +#~ msgid "invalid ssl_max_protocol_version value: \"%s\"\n" +#~ msgstr "valeur ssl_max_protocol_version invalide : « %s »\n" -#~ msgid "extraneous data in \"D\" message" -#~ msgstr "données supplémentaires dans le message « D »" +#~ msgid "invalid ssl_min_protocol_version value: \"%s\"\n" +#~ msgstr "valeur ssl_min_protocol_version invalide : « %s »\n" -#~ msgid "extraneous data in \"t\" message" -#~ msgstr "données supplémentaires dans le message « t »" +#~ msgid "invalid channel_binding value: \"%s\"\n" +#~ msgstr "valeur de channel_binding invalide : « %s »\n" -#~ msgid "extraneous data in \"T\" message" -#~ msgstr "données supplémentaires dans le message « T »" +#~ msgid "\"SELECT pg_is_in_recovery()\" failed\n" +#~ msgstr "\"SELECT pg_is_in_recovery()\" a échoué\n" -#~ msgid "select() failed: %s\n" -#~ msgstr "échec de select() : %s\n" +#~ msgid "\"SHOW transaction_read_only\" failed\n" +#~ msgstr "\"SHOW transaction_read_only\" a échoué\n" -#~ msgid "setsockopt(%s) failed: %s\n" -#~ msgstr "setsockopt(%s) a échoué : %s\n" +#~ msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %d\n" +#~ msgstr "échec de WSAIoctl(SIO_KEEPALIVE_VALS) : %d\n" diff --git a/src/pl/plpgsql/src/po/es.po b/src/pl/plpgsql/src/po/es.po index 90f217ec669ec..0b4299da85c78 100644 --- a/src/pl/plpgsql/src/po/es.po +++ b/src/pl/plpgsql/src/po/es.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: plpgsql (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-09-13 10:39+0000\n" +"POT-Creation-Date: 2021-05-14 19:39+0000\n" "PO-Revision-Date: 2020-09-18 18:36-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -23,110 +23,116 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Poedit 1.8.7\n" -#: pl_comp.c:436 pl_handler.c:471 +#: pl_comp.c:438 pl_handler.c:496 #, c-format msgid "PL/pgSQL functions cannot accept type %s" msgstr "las funciones PL/pgSQL no pueden aceptar el tipo %s" -#: pl_comp.c:526 +#: pl_comp.c:531 #, c-format msgid "could not determine actual return type for polymorphic function \"%s\"" msgstr "no se pudo determinar el verdadero tipo de resultado para la función polimórfica «%s»" -#: pl_comp.c:556 +#: pl_comp.c:561 #, c-format msgid "trigger functions can only be called as triggers" msgstr "las funciones de disparador sólo pueden ser invocadas como disparadores" -#: pl_comp.c:560 pl_handler.c:455 +#: pl_comp.c:565 pl_handler.c:480 #, c-format msgid "PL/pgSQL functions cannot return type %s" msgstr "las funciones PL/pgSQL no pueden retornar el tipo %s" -#: pl_comp.c:600 +#: pl_comp.c:605 #, c-format msgid "trigger functions cannot have declared arguments" msgstr "las funciones de disparador no pueden tener argumentos declarados" -#: pl_comp.c:601 +#: pl_comp.c:606 #, c-format msgid "The arguments of the trigger can be accessed through TG_NARGS and TG_ARGV instead." msgstr "Los argumentos del disparador pueden accederse usando TG_NARGS y TG_ARGV." -#: pl_comp.c:734 +#: pl_comp.c:739 #, c-format msgid "event trigger functions cannot have declared arguments" msgstr "las funciones de disparador por eventos no pueden tener argumentos declarados" -#: pl_comp.c:997 +#: pl_comp.c:1003 #, c-format msgid "compilation of PL/pgSQL function \"%s\" near line %d" msgstr "compilación de la función PL/pgSQL «%s» cerca de la línea %d" -#: pl_comp.c:1020 +#: pl_comp.c:1026 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "el nombre de parámetro «%s» fue usado más de una vez" -#: pl_comp.c:1132 +#: pl_comp.c:1138 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "la referencia a la columna «%s» es ambigua" -#: pl_comp.c:1134 +#: pl_comp.c:1140 #, c-format msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Podría referirse tanto a una variable PL/pgSQL como a una columna de una tabla." -#: pl_comp.c:1317 pl_exec.c:5169 pl_exec.c:5534 pl_exec.c:5621 pl_exec.c:5712 -#: pl_exec.c:6700 +#: pl_comp.c:1323 pl_exec.c:5235 pl_exec.c:5408 pl_exec.c:5495 pl_exec.c:5586 +#: pl_exec.c:6566 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "el registro «%s» no tiene un campo «%s»" -#: pl_comp.c:1793 +#: pl_comp.c:1817 #, c-format msgid "relation \"%s\" does not exist" msgstr "no existe la relación «%s»" -#: pl_comp.c:1891 +#: pl_comp.c:1824 pl_comp.c:1866 +#, fuzzy, c-format +#| msgid "\"%s\" is not a composite type" +msgid "relation \"%s\" does not have a composite type" +msgstr "«%s» no es un tipo compuesto" + +#: pl_comp.c:1932 #, c-format msgid "variable \"%s\" has pseudo-type %s" msgstr "la variable «%s» tiene pseudotipo %s" -#: pl_comp.c:2080 +#: pl_comp.c:2121 #, c-format msgid "type \"%s\" is only a shell" msgstr "el tipo «%s» está inconcluso" -#: pl_comp.c:2162 pl_exec.c:7001 +#: pl_comp.c:2203 pl_exec.c:6867 #, c-format msgid "type %s is not composite" msgstr "el tipo %s no es compuesto" -#: pl_comp.c:2210 pl_comp.c:2263 +#: pl_comp.c:2251 pl_comp.c:2304 #, c-format msgid "unrecognized exception condition \"%s\"" msgstr "no se reconoce la condición de excepción «%s»" -#: pl_comp.c:2484 +#: pl_comp.c:2525 #, c-format msgid "could not determine actual argument type for polymorphic function \"%s\"" msgstr "no se pudo determinar el verdadero tipo de argumento para la función polimórfica «%s»" -#: pl_exec.c:498 pl_exec.c:935 pl_exec.c:1173 +#: pl_exec.c:501 pl_exec.c:935 pl_exec.c:1170 msgid "during initialization of execution state" msgstr "durante la inicialización del estado de ejecución" -#: pl_exec.c:504 +#: pl_exec.c:507 msgid "while storing call arguments into local variables" msgstr "mientras se almacenaban los argumentos de invocación en variables locales" -#: pl_exec.c:592 pl_exec.c:1008 +#: pl_exec.c:595 pl_exec.c:1008 msgid "during function entry" msgstr "durante el ingreso a la función" -#: pl_exec.c:617 +#: pl_exec.c:618 #, c-format msgid "control reached end of function without RETURN" msgstr "la ejecución alcanzó el fin de la función sin encontrar RETURN" @@ -135,37 +141,37 @@ msgstr "la ejecución alcanzó el fin de la función sin encontrar RETURN" msgid "while casting return value to function's return type" msgstr "mientras se hacía la conversión del valor de retorno al tipo de retorno de la función" -#: pl_exec.c:637 pl_exec.c:3604 +#: pl_exec.c:637 pl_exec.c:3670 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "se llamó una función que retorna un conjunto en un contexto que no puede aceptarlo" -#: pl_exec.c:763 pl_exec.c:1037 pl_exec.c:1198 +#: pl_exec.c:763 pl_exec.c:1034 pl_exec.c:1192 msgid "during function exit" msgstr "durante la salida de la función" -#: pl_exec.c:818 pl_exec.c:882 pl_exec.c:3449 +#: pl_exec.c:818 pl_exec.c:882 pl_exec.c:3468 msgid "returned record type does not match expected record type" msgstr "el tipo de registro retornado no coincide con el tipo de registro esperado" -#: pl_exec.c:1033 pl_exec.c:1194 +#: pl_exec.c:1031 pl_exec.c:1189 #, c-format msgid "control reached end of trigger procedure without RETURN" msgstr "la ejecución alcanzó el fin del procedimiento disparador sin encontrar RETURN" -#: pl_exec.c:1042 +#: pl_exec.c:1039 #, c-format msgid "trigger procedure cannot return a set" msgstr "los procedimientos disparadores no pueden retornar conjuntos" -#: pl_exec.c:1081 pl_exec.c:1109 +#: pl_exec.c:1078 pl_exec.c:1106 msgid "returned row structure does not match the structure of the triggering table" msgstr "la estructura de fila retornada no coincide con la estructura de la tabla que generó el evento de disparador" #. translator: last %s is a phrase such as "during statement block #. local variable initialization" #. -#: pl_exec.c:1244 +#: pl_exec.c:1238 #, c-format msgid "PL/pgSQL function %s line %d %s" msgstr "función PL/pgSQL %s en la línea %d %s" @@ -173,341 +179,326 @@ msgstr "función PL/pgSQL %s en la línea %d %s" #. translator: last %s is a phrase such as "while storing call #. arguments into local variables" #. -#: pl_exec.c:1255 +#: pl_exec.c:1249 #, c-format msgid "PL/pgSQL function %s %s" msgstr "función PL/pgSQL %s %s" #. translator: last %s is a plpgsql statement type name -#: pl_exec.c:1263 +#: pl_exec.c:1257 #, c-format msgid "PL/pgSQL function %s line %d at %s" msgstr "función PL/pgSQL %s en la línea %d en %s" -#: pl_exec.c:1269 +#: pl_exec.c:1263 #, c-format msgid "PL/pgSQL function %s" msgstr "función PL/pgSQL %s" -#: pl_exec.c:1607 +#: pl_exec.c:1634 msgid "during statement block local variable initialization" msgstr "durante inicialización de variables locales en el bloque de sentencias" -#: pl_exec.c:1705 +#: pl_exec.c:1732 msgid "during statement block entry" msgstr "durante la entrada al bloque de sentencias" -#: pl_exec.c:1737 +#: pl_exec.c:1764 msgid "during statement block exit" msgstr "durante la salida del bloque de sentencias" -#: pl_exec.c:1775 +#: pl_exec.c:1802 msgid "during exception cleanup" msgstr "durante la finalización por excepción" -#: pl_exec.c:2271 +#: pl_exec.c:2369 #, c-format msgid "procedure parameter \"%s\" is an output parameter but corresponding argument is not writable" msgstr "el parámetro de procedimiento «%s» es un parámetro de salida pero el argumento correspondiente no es escribible" -#: pl_exec.c:2276 +#: pl_exec.c:2374 #, c-format msgid "procedure parameter %d is an output parameter but corresponding argument is not writable" msgstr "el parámetro de procedimiento %d es un parámetro de salida pero el argumento correspondiente no es escribible" -#: pl_exec.c:2388 +#: pl_exec.c:2407 #, c-format msgid "GET STACKED DIAGNOSTICS cannot be used outside an exception handler" msgstr "GET STACKED DIAGNOSTICS no puede ser usado fuera de un manejador de excepción" -#: pl_exec.c:2588 +#: pl_exec.c:2607 #, c-format msgid "case not found" msgstr "caso no encontrado" -#: pl_exec.c:2589 +#: pl_exec.c:2608 #, c-format msgid "CASE statement is missing ELSE part." msgstr "A la sentencia CASE le falta la parte ELSE." -#: pl_exec.c:2682 +#: pl_exec.c:2701 #, c-format msgid "lower bound of FOR loop cannot be null" msgstr "el límite inferior de un ciclo FOR no puede ser null" -#: pl_exec.c:2698 +#: pl_exec.c:2717 #, c-format msgid "upper bound of FOR loop cannot be null" msgstr "el límite superior de un ciclo FOR no puede ser null" -#: pl_exec.c:2716 +#: pl_exec.c:2735 #, c-format msgid "BY value of FOR loop cannot be null" msgstr "el valor BY de un ciclo FOR no puede ser null" -#: pl_exec.c:2722 +#: pl_exec.c:2741 #, c-format msgid "BY value of FOR loop must be greater than zero" msgstr "el valor BY de un ciclo FOR debe ser mayor que cero" -#: pl_exec.c:2856 pl_exec.c:4583 +#: pl_exec.c:2875 pl_exec.c:4640 #, c-format msgid "cursor \"%s\" already in use" msgstr "el cursor «%s» ya está en uso" -#: pl_exec.c:2879 pl_exec.c:4648 +#: pl_exec.c:2898 pl_exec.c:4705 #, c-format msgid "arguments given for cursor without arguments" msgstr "se dieron argumentos a un cursor sin argumentos" -#: pl_exec.c:2898 pl_exec.c:4667 +#: pl_exec.c:2917 pl_exec.c:4724 #, c-format msgid "arguments required for cursor" msgstr "se requieren argumentos para el cursor" -#: pl_exec.c:2985 +#: pl_exec.c:3004 #, c-format msgid "FOREACH expression must not be null" msgstr "la expresión FOREACH no debe ser nula" -#: pl_exec.c:3000 +#: pl_exec.c:3019 #, c-format msgid "FOREACH expression must yield an array, not type %s" msgstr "una expresión FOREACH debe retornar un array, no tipo %s" -#: pl_exec.c:3017 +#: pl_exec.c:3036 #, c-format msgid "slice dimension (%d) is out of the valid range 0..%d" msgstr "la dimensión del slice (%d) está fuera de rango 0..%d" -#: pl_exec.c:3044 +#: pl_exec.c:3063 #, c-format msgid "FOREACH ... SLICE loop variable must be of an array type" msgstr "las variables de bucles FOREACH ... SLICE deben ser de un tipo array" -#: pl_exec.c:3048 +#: pl_exec.c:3067 #, c-format msgid "FOREACH loop variable must not be of an array type" msgstr "la variable de bucle FOREACH no debe ser de tipo array" -#: pl_exec.c:3210 pl_exec.c:3267 pl_exec.c:3442 +#: pl_exec.c:3229 pl_exec.c:3286 pl_exec.c:3461 #, c-format msgid "cannot return non-composite value from function returning composite type" msgstr "no se puede retornar un valor no-compuesto desde una función que retorne tipos compuestos" -#: pl_exec.c:3306 pl_gram.y:3309 +#: pl_exec.c:3325 pl_gram.y:3344 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "no se puede usar RETURN NEXT en una función que no es SETOF" -#: pl_exec.c:3347 pl_exec.c:3479 +#: pl_exec.c:3366 pl_exec.c:3498 #, c-format msgid "wrong result type supplied in RETURN NEXT" msgstr "se pasó un tipo incorrecto de resultado a RETURN NEXT" -#: pl_exec.c:3385 pl_exec.c:3406 +#: pl_exec.c:3404 pl_exec.c:3425 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "se pasó un tipo de registro incorrecto a RETURN NEXT" -#: pl_exec.c:3498 +#: pl_exec.c:3517 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "RETURN NEXT debe tener un parámetro" -#: pl_exec.c:3524 pl_gram.y:3373 +#: pl_exec.c:3545 pl_gram.y:3408 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "no se puede usar RETURN QUERY en una función que no ha sido declarada SETOF" -#: pl_exec.c:3548 +#: pl_exec.c:3563 msgid "structure of query does not match function result type" msgstr "la estructura de la consulta no coincide con el tipo del resultado de la función" -#: pl_exec.c:3632 pl_exec.c:3770 +#: pl_exec.c:3596 pl_exec.c:5792 +#, c-format +msgid "query \"%s\" is not a SELECT" +msgstr "la consulta «%s» no es una orden SELECT" + +#: pl_exec.c:3618 pl_exec.c:4418 pl_exec.c:8603 +#, c-format +msgid "query string argument of EXECUTE is null" +msgstr "el argumento de consulta a ejecutar en EXECUTE es null" + +#: pl_exec.c:3698 pl_exec.c:3836 #, c-format msgid "RAISE option already specified: %s" msgstr "la opción de RAISE ya se especificó: %s" -#: pl_exec.c:3666 +#: pl_exec.c:3732 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "RAISE sin parámetros no puede ser usado fuera de un manejador de excepción" -#: pl_exec.c:3760 +#: pl_exec.c:3826 #, c-format msgid "RAISE statement option cannot be null" msgstr "la opción de sentencia en RAISE no puede ser null" -#: pl_exec.c:3830 +#: pl_exec.c:3896 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3885 +#: pl_exec.c:3951 #, c-format msgid "assertion failed" msgstr "aseveración falló" -#: pl_exec.c:4232 pl_exec.c:4422 +#: pl_exec.c:4291 pl_exec.c:4479 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "no se puede ejecutar COPY desde/a un cliente en PL/pgSQL" -#: pl_exec.c:4238 +#: pl_exec.c:4297 #, c-format msgid "unsupported transaction command in PL/pgSQL" msgstr "orden de transacción no soportada en PL/pgSQL" -#: pl_exec.c:4261 pl_exec.c:4451 +#: pl_exec.c:4320 pl_exec.c:4508 #, c-format msgid "INTO used with a command that cannot return data" msgstr "INTO es utilizado con una orden que no puede retornar datos" -#: pl_exec.c:4284 pl_exec.c:4474 +#: pl_exec.c:4343 pl_exec.c:4531 #, c-format msgid "query returned no rows" msgstr "la consulta no regresó filas" -#: pl_exec.c:4306 pl_exec.c:4493 +#: pl_exec.c:4365 pl_exec.c:4550 #, c-format msgid "query returned more than one row" msgstr "la consulta regresó más de una fila" -#: pl_exec.c:4308 +#: pl_exec.c:4367 #, c-format msgid "Make sure the query returns a single row, or use LIMIT 1." msgstr "Asegúrese que la consulta retorne una única fila, o use LIMIT 1." -#: pl_exec.c:4324 +#: pl_exec.c:4383 #, c-format msgid "query has no destination for result data" msgstr "la consulta no tiene un destino para los datos de resultado" -#: pl_exec.c:4325 +#: pl_exec.c:4384 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." msgstr "Si quiere descartar los resultados de un SELECT, utilice PERFORM." -#: pl_exec.c:4358 pl_exec.c:8680 -#, c-format -msgid "query string argument of EXECUTE is null" -msgstr "el argumento de consulta a ejecutar en EXECUTE es null" - -#: pl_exec.c:4414 +#: pl_exec.c:4471 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "no está implementado EXECUTE de un SELECT ... INTO" -#: pl_exec.c:4415 +#: pl_exec.c:4472 #, c-format msgid "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS instead." msgstr "Puede desear usar EXECUTE ... INTO o EXECUTE CREATE TABLE ... AS en su lugar." -#: pl_exec.c:4428 +#: pl_exec.c:4485 #, c-format msgid "EXECUTE of transaction commands is not implemented" msgstr "no está implementado EXECUTE de órdenes de transacción" -#: pl_exec.c:4729 pl_exec.c:4817 +#: pl_exec.c:4786 pl_exec.c:4874 #, c-format msgid "cursor variable \"%s\" is null" msgstr "variable cursor «%s» es null" -#: pl_exec.c:4740 pl_exec.c:4828 +#: pl_exec.c:4797 pl_exec.c:4885 #, c-format msgid "cursor \"%s\" does not exist" msgstr "no existe el cursor «%s»" -#: pl_exec.c:4753 +#: pl_exec.c:4810 #, c-format msgid "relative or absolute cursor position is null" msgstr "la posición relativa o absoluta del cursor es null" -#: pl_exec.c:5019 pl_exec.c:5114 +#: pl_exec.c:5085 pl_exec.c:5180 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "no puede asignarse un valor null a la variable «%s» que fue declarada NOT NULL" -#: pl_exec.c:5095 +#: pl_exec.c:5161 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "no se puede asignar un valor no compuesto a una variable de tipo row" -#: pl_exec.c:5127 +#: pl_exec.c:5193 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "no se puede asignar un valor no compuesto a una variable de tipo record" -#: pl_exec.c:5178 +#: pl_exec.c:5244 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "no se puede asignar a la columna de sistema «%s»" -#: pl_exec.c:5242 -#, c-format -msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" -msgstr "el número de dimensiones del array (%d) excede el máximo permitido (%d)" - -#: pl_exec.c:5274 -#, c-format -msgid "subscripted object is not an array" -msgstr "el objeto al que se le puso un subíndice no es un array" - -#: pl_exec.c:5312 -#, c-format -msgid "array subscript in assignment must not be null" -msgstr "subíndice de array en asignación no puede ser null" - -#: pl_exec.c:5819 +#: pl_exec.c:5693 #, c-format msgid "query \"%s\" did not return data" msgstr "la consulta «%s» no retornó datos" -#: pl_exec.c:5827 +#: pl_exec.c:5701 #, c-format msgid "query \"%s\" returned %d column" msgid_plural "query \"%s\" returned %d columns" msgstr[0] "la consulta «%s» retornó %d columna" msgstr[1] "la consulta «%s» retornó %d columnas" -#: pl_exec.c:5855 +#: pl_exec.c:5729 #, c-format msgid "query \"%s\" returned more than one row" msgstr "la consulta «%s» retornó más de una fila" -#: pl_exec.c:5918 -#, c-format -msgid "query \"%s\" is not a SELECT" -msgstr "la consulta «%s» no es una orden SELECT" - -#: pl_exec.c:6714 pl_exec.c:6754 pl_exec.c:6794 +#: pl_exec.c:6580 pl_exec.c:6620 pl_exec.c:6660 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "el tipo del parámetro %d (%s) no coincide aquel con que fue preparado el plan (%s)" -#: pl_exec.c:7205 pl_exec.c:7239 pl_exec.c:7313 pl_exec.c:7339 +#: pl_exec.c:7071 pl_exec.c:7105 pl_exec.c:7179 pl_exec.c:7205 #, c-format msgid "number of source and target fields in assignment does not match" msgstr "no coincide el número de campos de origen y destino en la asignación" #. translator: %s represents a name of an extra check -#: pl_exec.c:7207 pl_exec.c:7241 pl_exec.c:7315 pl_exec.c:7341 +#: pl_exec.c:7073 pl_exec.c:7107 pl_exec.c:7181 pl_exec.c:7207 #, c-format msgid "%s check of %s is active." msgstr "El chequeo %s de %s está activo." -#: pl_exec.c:7211 pl_exec.c:7245 pl_exec.c:7319 pl_exec.c:7345 +#: pl_exec.c:7077 pl_exec.c:7111 pl_exec.c:7185 pl_exec.c:7211 #, c-format msgid "Make sure the query returns the exact list of columns." msgstr "Asegúrese que la consulta retorna la lista exacta de columnas." -#: pl_exec.c:7732 +#: pl_exec.c:7598 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "el registro «%s» no ha sido asignado aún" -#: pl_exec.c:7733 +#: pl_exec.c:7599 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "La estructura de fila de un registro aún no asignado no está determinado." @@ -544,280 +535,280 @@ msgstr "sentencia SQL" msgid "FOR over EXECUTE statement" msgstr "bucle FOR en torno a una sentencia EXECUTE" -#: pl_gram.y:489 +#: pl_gram.y:487 #, c-format msgid "block label must be placed before DECLARE, not after" msgstr "etiqueta de bloque debe estar antes de DECLARE, no después" -#: pl_gram.y:509 +#: pl_gram.y:507 #, c-format msgid "collations are not supported by type %s" msgstr "los ordenamientos (collation) no están soportados por el tipo %s" -#: pl_gram.y:528 +#: pl_gram.y:526 #, c-format msgid "variable \"%s\" must have a default value, since it's declared NOT NULL" msgstr "la variable «%s» debe tener valor por omisión, puesto que está declarado NOT NULL" -#: pl_gram.y:675 pl_gram.y:690 pl_gram.y:716 +#: pl_gram.y:674 pl_gram.y:689 pl_gram.y:715 #, c-format msgid "variable \"%s\" does not exist" msgstr "no existe la variable «%s»" -#: pl_gram.y:734 pl_gram.y:762 +#: pl_gram.y:733 pl_gram.y:761 msgid "duplicate declaration" msgstr "declaración duplicada" -#: pl_gram.y:745 pl_gram.y:773 +#: pl_gram.y:744 pl_gram.y:772 #, c-format msgid "variable \"%s\" shadows a previously defined variable" msgstr "la variable «%s» oculta una variable definida anteriormente" -#: pl_gram.y:993 +#: pl_gram.y:1046 #, c-format msgid "diagnostics item %s is not allowed in GET STACKED DIAGNOSTICS" msgstr "elemento de diagnóstico %s no se permite en GET STACKED DIAGNOSTICS" -#: pl_gram.y:1011 +#: pl_gram.y:1064 #, c-format msgid "diagnostics item %s is not allowed in GET CURRENT DIAGNOSTICS" msgstr "elemento de diagnóstico %s no se permite en GET STACKED DIAGNOSTICS" -#: pl_gram.y:1106 +#: pl_gram.y:1159 msgid "unrecognized GET DIAGNOSTICS item" msgstr "elemento de GET DIAGNOSTICS no reconocido" -#: pl_gram.y:1116 pl_gram.y:3553 +#: pl_gram.y:1175 pl_gram.y:3583 #, c-format msgid "\"%s\" is not a scalar variable" msgstr "«%s» no es una variable escalar" -#: pl_gram.y:1370 pl_gram.y:1567 +#: pl_gram.y:1405 pl_gram.y:1599 #, c-format msgid "loop variable of loop over rows must be a record variable or list of scalar variables" msgstr "la variable de bucle de un bucle sobre filas debe ser una variable de tipo record o una lista de variables escalares" -#: pl_gram.y:1405 +#: pl_gram.y:1440 #, c-format msgid "cursor FOR loop must have only one target variable" msgstr "un bucle FOR de un cursor debe tener sólo una variable de destino" -#: pl_gram.y:1412 +#: pl_gram.y:1447 #, c-format msgid "cursor FOR loop must use a bound cursor variable" msgstr "un bucle FOR en torno a un cursor debe usar un cursor enlazado (bound)" -#: pl_gram.y:1499 +#: pl_gram.y:1538 #, c-format msgid "integer FOR loop must have only one target variable" msgstr "un bucle FOR de un número entero debe tener sólo una variable de destino" -#: pl_gram.y:1537 +#: pl_gram.y:1572 #, c-format msgid "cannot specify REVERSE in query FOR loop" msgstr "no se puede especificar REVERSE en un bucle FOR de una consulta" -#: pl_gram.y:1670 +#: pl_gram.y:1702 #, c-format msgid "loop variable of FOREACH must be a known variable or list of variables" msgstr "la variable de bucle de FOREACH debe ser una variable conocida o una lista de variables conocidas" -#: pl_gram.y:1712 +#: pl_gram.y:1744 #, c-format msgid "there is no label \"%s\" attached to any block or loop enclosing this statement" msgstr "ningún bloque o bucle que contenga esta sentencia tiene una etiqueta «%s»" -#: pl_gram.y:1720 +#: pl_gram.y:1752 #, c-format msgid "block label \"%s\" cannot be used in CONTINUE" msgstr "la etiqueta de bloque «%s» no puede usarse en CONTINUE" -#: pl_gram.y:1735 +#: pl_gram.y:1767 #, c-format msgid "EXIT cannot be used outside a loop, unless it has a label" msgstr "EXIT no puede usarse fuera de un bucle, a menos que tenga una etiqueta" -#: pl_gram.y:1736 +#: pl_gram.y:1768 #, c-format msgid "CONTINUE cannot be used outside a loop" msgstr "CONTINUE no puede usarse fuera de un bucle" -#: pl_gram.y:1760 pl_gram.y:1798 pl_gram.y:1846 pl_gram.y:2998 pl_gram.y:3083 -#: pl_gram.y:3194 pl_gram.y:3957 +#: pl_gram.y:1792 pl_gram.y:1830 pl_gram.y:1878 pl_gram.y:3032 pl_gram.y:3118 +#: pl_gram.y:3229 pl_gram.y:3982 msgid "unexpected end of function definition" msgstr "fin inesperado de la definición de la función" -#: pl_gram.y:1866 pl_gram.y:1890 pl_gram.y:1906 pl_gram.y:1912 pl_gram.y:2031 -#: pl_gram.y:2039 pl_gram.y:2053 pl_gram.y:2148 pl_gram.y:2399 pl_gram.y:2493 -#: pl_gram.y:2652 pl_gram.y:3799 pl_gram.y:3860 pl_gram.y:3938 +#: pl_gram.y:1898 pl_gram.y:1922 pl_gram.y:1938 pl_gram.y:1944 pl_gram.y:2065 +#: pl_gram.y:2073 pl_gram.y:2087 pl_gram.y:2182 pl_gram.y:2434 pl_gram.y:2524 +#: pl_gram.y:2683 pl_gram.y:3825 pl_gram.y:3886 pl_gram.y:3963 msgid "syntax error" msgstr "error de sintaxis" -#: pl_gram.y:1894 pl_gram.y:1896 pl_gram.y:2403 pl_gram.y:2405 +#: pl_gram.y:1926 pl_gram.y:1928 pl_gram.y:2438 pl_gram.y:2440 msgid "invalid SQLSTATE code" msgstr "código SQLSTATE no válido" -#: pl_gram.y:2096 +#: pl_gram.y:2130 msgid "syntax error, expected \"FOR\"" msgstr "error de sintaxis, se esperaba «FOR»" -#: pl_gram.y:2157 +#: pl_gram.y:2191 #, c-format msgid "FETCH statement cannot return multiple rows" msgstr "la sentencia FETCH no puede retornar múltiples filas" -#: pl_gram.y:2281 +#: pl_gram.y:2316 #, c-format msgid "cursor variable must be a simple variable" msgstr "variable de cursor debe ser una variable simple" -#: pl_gram.y:2287 +#: pl_gram.y:2322 #, c-format msgid "variable \"%s\" must be of type cursor or refcursor" msgstr "la variable «%s» debe ser de tipo cursor o refcursor" -#: pl_gram.y:2623 pl_gram.y:2634 +#: pl_gram.y:2654 pl_gram.y:2665 #, c-format msgid "\"%s\" is not a known variable" msgstr "«%s» no es una variable conocida" -#: pl_gram.y:2738 pl_gram.y:2748 pl_gram.y:2903 +#: pl_gram.y:2771 pl_gram.y:2781 pl_gram.y:2937 msgid "mismatched parentheses" msgstr "no coinciden los paréntesis" -#: pl_gram.y:2752 +#: pl_gram.y:2785 #, c-format msgid "missing \"%s\" at end of SQL expression" msgstr "falta «%s» al final de la expresión SQL" -#: pl_gram.y:2758 +#: pl_gram.y:2791 #, c-format msgid "missing \"%s\" at end of SQL statement" msgstr "falta «%s» al final de la sentencia SQL" -#: pl_gram.y:2775 +#: pl_gram.y:2808 msgid "missing expression" msgstr "expresión faltante" -#: pl_gram.y:2777 +#: pl_gram.y:2810 msgid "missing SQL statement" msgstr "sentencia SQL faltante" -#: pl_gram.y:2905 +#: pl_gram.y:2939 msgid "incomplete data type declaration" msgstr "declaración de tipo de dato incompleta" -#: pl_gram.y:2928 +#: pl_gram.y:2962 msgid "missing data type declaration" msgstr "declaración de tipo de dato faltante" -#: pl_gram.y:3006 +#: pl_gram.y:3040 msgid "INTO specified more than once" msgstr "INTO fue especificado más de una vez" -#: pl_gram.y:3175 +#: pl_gram.y:3210 msgid "expected FROM or IN" msgstr "se espera FROM o IN" -#: pl_gram.y:3236 +#: pl_gram.y:3271 #, c-format msgid "RETURN cannot have a parameter in function returning set" msgstr "RETURN no puede tener un parámetro en una función que retorna un conjunto" -#: pl_gram.y:3237 +#: pl_gram.y:3272 #, c-format msgid "Use RETURN NEXT or RETURN QUERY." msgstr "Use RETURN NEXT o RETURN QUERY." -#: pl_gram.y:3247 +#: pl_gram.y:3282 #, c-format msgid "RETURN cannot have a parameter in a procedure" msgstr "RETURN no puede tener un parámetro un procedimiento" -#: pl_gram.y:3252 +#: pl_gram.y:3287 #, c-format msgid "RETURN cannot have a parameter in function returning void" msgstr "RETURN no puede tener parámetro en una función que retorna void" -#: pl_gram.y:3261 +#: pl_gram.y:3296 #, c-format msgid "RETURN cannot have a parameter in function with OUT parameters" msgstr "RETURN no puede tener parámetros en una función con parámetros OUT" -#: pl_gram.y:3324 +#: pl_gram.y:3359 #, c-format msgid "RETURN NEXT cannot have a parameter in function with OUT parameters" msgstr "RETURN NEXT no puede tener parámetros en una función con parámetros OUT" -#: pl_gram.y:3432 +#: pl_gram.y:3467 #, c-format msgid "variable \"%s\" is declared CONSTANT" msgstr "la variable «%s» esta declarada como CONSTANT" -#: pl_gram.y:3495 +#: pl_gram.y:3525 #, c-format msgid "record variable cannot be part of multiple-item INTO list" msgstr "una variable de tipo record no puede ser parte de una lista INTO de múltiples elementos" -#: pl_gram.y:3541 +#: pl_gram.y:3571 #, c-format msgid "too many INTO variables specified" msgstr "se especificaron demasiadas variables INTO" -#: pl_gram.y:3752 +#: pl_gram.y:3779 #, c-format msgid "end label \"%s\" specified for unlabeled block" msgstr "etiqueta de término «%s» especificada para un bloque sin etiqueta" -#: pl_gram.y:3759 +#: pl_gram.y:3786 #, c-format msgid "end label \"%s\" differs from block's label \"%s\"" msgstr "etiqueta de término «%s» difiere de la etiqueta de bloque «%s»" -#: pl_gram.y:3794 +#: pl_gram.y:3820 #, c-format msgid "cursor \"%s\" has no arguments" msgstr "el cursor «%s» no tiene argumentos" -#: pl_gram.y:3808 +#: pl_gram.y:3834 #, c-format msgid "cursor \"%s\" has arguments" msgstr "el cursor «%s» tiene argumentos" -#: pl_gram.y:3850 +#: pl_gram.y:3876 #, c-format msgid "cursor \"%s\" has no argument named \"%s\"" msgstr "el cursor «%s» no tiene un argumento llamado «%s»" -#: pl_gram.y:3870 +#: pl_gram.y:3896 #, c-format msgid "value for parameter \"%s\" of cursor \"%s\" specified more than once" msgstr "el valor para el parámetro «%s» del cursor «%s» fue especificado más de una vez" -#: pl_gram.y:3895 +#: pl_gram.y:3921 #, c-format msgid "not enough arguments for cursor \"%s\"" msgstr "no hay suficientes argumentos para el cursor «%s»" -#: pl_gram.y:3902 +#: pl_gram.y:3928 #, c-format msgid "too many arguments for cursor \"%s\"" msgstr "demasiados argumentos para el cursor «%s»" -#: pl_gram.y:3989 +#: pl_gram.y:4014 msgid "unrecognized RAISE statement option" msgstr "no se reconoce la opción de sentencia RAISE" -#: pl_gram.y:3993 +#: pl_gram.y:4018 msgid "syntax error, expected \"=\"" msgstr "error de sintaxis, se esperaba «=»" -#: pl_gram.y:4034 +#: pl_gram.y:4059 #, c-format msgid "too many parameters specified for RAISE" msgstr "se especificaron demasiados parámetros a RAISE" -#: pl_gram.y:4038 +#: pl_gram.y:4063 #, c-format msgid "too few parameters specified for RAISE" msgstr "se especificaron muy pocos parámetros a RAISE" @@ -853,3 +844,12 @@ msgstr "%s al final de la entrada" #, c-format msgid "%s at or near \"%s\"" msgstr "%s en o cerca de «%s»" + +#~ msgid "array subscript in assignment must not be null" +#~ msgstr "subíndice de array en asignación no puede ser null" + +#~ msgid "subscripted object is not an array" +#~ msgstr "el objeto al que se le puso un subíndice no es un array" + +#~ msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" +#~ msgstr "el número de dimensiones del array (%d) excede el máximo permitido (%d)" diff --git a/src/pl/tcl/nls.mk b/src/pl/tcl/nls.mk index 730dc8ceecddd..fe6e84a3a4268 100644 --- a/src/pl/tcl/nls.mk +++ b/src/pl/tcl/nls.mk @@ -1,6 +1,6 @@ # src/pl/tcl/nls.mk CATALOG_NAME = pltcl -AVAIL_LANGUAGES = cs de es fr it ja ko pl pt_BR ro ru sv tr uk vi zh_CN zh_TW +AVAIL_LANGUAGES = cs de el es fr it ja ko pl pt_BR ro ru sv tr uk vi zh_CN zh_TW GETTEXT_FILES = pltcl.c GETTEXT_TRIGGERS = $(BACKEND_COMMON_GETTEXT_TRIGGERS) GETTEXT_FLAGS = $(BACKEND_COMMON_GETTEXT_FLAGS) diff --git a/src/pl/tcl/po/el.po b/src/pl/tcl/po/el.po new file mode 100644 index 0000000000000..5437cb49f46c9 --- /dev/null +++ b/src/pl/tcl/po/el.po @@ -0,0 +1,110 @@ +# Greek message translation file for pltcl +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pltcl (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: pltcl (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-04-29 07:38+0000\n" +"PO-Revision-Date: 2021-05-04 13:48+0200\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" +"X-Generator: Poedit 2.4.3\n" + +#: pltcl.c:463 +msgid "PL/Tcl function to call once when pltcl is first used." +msgstr "Συνάρτηση PL/Tcl για να καλέσει μία μόνο φορά όταν χρησιμοποιείται pltcl για πρώτη φορά." + +#: pltcl.c:470 +msgid "PL/TclU function to call once when pltclu is first used." +msgstr "Συνάρτηση PL/Tcl για να καλέσει μία μόνο φορά όταν χρησιμοποιείται pltclu για πρώτη φορά ." + +#: pltcl.c:634 +#, c-format +msgid "function \"%s\" is in the wrong language" +msgstr "η συνάρτηση \"%s\" βρίσκεται σε λάθος γλώσσα" + +#: pltcl.c:645 +#, c-format +msgid "function \"%s\" must not be SECURITY DEFINER" +msgstr "η συνάρτηση \"%s\" δεν πρέπει να είναι SECURITY DEFINER" + +#. translator: %s is "pltcl.start_proc" or "pltclu.start_proc" +#: pltcl.c:679 +#, c-format +msgid "processing %s parameter" +msgstr "επεξεργάζεται παράμετρο %s" + +#: pltcl.c:833 +#, c-format +msgid "set-valued function called in context that cannot accept a set" +msgstr "set-valued συνάρτηση καλείται σε περιεχόμενο που δεν μπορεί να δεχτεί ένα σύνολο" + +#: pltcl.c:1006 +#, c-format +msgid "function returning record called in context that cannot accept type record" +msgstr "συνάρτηση που επιστρέφει εγγραφή καλείται σε περιεχόμενο που δεν δύναται να αποδεχτεί τύπο εγγραφής" + +#: pltcl.c:1290 +#, c-format +msgid "could not split return value from trigger: %s" +msgstr "δεν ήταν δυνατός ο διαχωρισμός επιστρεφόμενης τιμής από έναυσμα: %s" + +#: pltcl.c:1371 pltcl.c:1801 +#, c-format +msgid "%s" +msgstr "%s" + +#: pltcl.c:1372 +#, c-format +msgid "" +"%s\n" +"in PL/Tcl function \"%s\"" +msgstr "" +"%s\n" +"στη συνάρτηση PL/Tcl «%s»" + +#: pltcl.c:1536 +#, c-format +msgid "trigger functions can only be called as triggers" +msgstr "συναρτήσεις εναυσμάτων μπορούν να κληθούν μόνο ως εναύσματα" + +#: pltcl.c:1540 +#, c-format +msgid "PL/Tcl functions cannot return type %s" +msgstr "συναρτήσεις PL/Tcl δεν είναι δυνατό να επιστρέψουν τύπο %s" + +#: pltcl.c:1579 +#, c-format +msgid "PL/Tcl functions cannot accept type %s" +msgstr "συναρτήσεις PL/Tcl δεν είναι δυνατό να δεχτούν τύπο %s" + +#: pltcl.c:1693 +#, c-format +msgid "could not create internal procedure \"%s\": %s" +msgstr "δεν ήταν δυνατή η δημιουργία εσωτερικής διαδικασίας \"%s\": %s" + +#: pltcl.c:3197 +#, c-format +msgid "column name/value list must have even number of elements" +msgstr "λίστα ονόματος/τιμής στήλης πρέπει να έχει άρτιο αριθμό στοιχείων" + +#: pltcl.c:3215 +#, c-format +msgid "column name/value list contains nonexistent column name \"%s\"" +msgstr "λίστα ονόματος/τιμής στήλης περιέχει ανύπαρκτο όνομα στήλης \"%s\"" + +#: pltcl.c:3222 +#, c-format +msgid "cannot set system attribute \"%s\"" +msgstr "δεν είναι δυνατός ο ορισμός του χαρακτηριστικού συστήματος \"%s\"" + +#: pltcl.c:3228 +#, c-format +msgid "cannot set generated column \"%s\"" +msgstr "δεν είναι δυνατός ο ορισμός δημιουργημένης στήλης \"%s\"" From fe2fb9ebcae8445fdb3915ecf8402a3a887effc2 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 17 May 2021 14:05:05 -0400 Subject: [PATCH 321/671] doc: PG 14 relnotes adjustments from Fujii Masao --- doc/src/sgml/release-14.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 2f5f4e91ed461..0bd49460e0281 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -1141,7 +1141,7 @@ Author: Fujii Masao --> -Add function pg_backend_memory_contexts() to output the memory contexts of arbitrary backends (Atsushi Torikoshi) +Add function pg_log_backend_memory_contexts() to output the memory contexts of arbitrary backends (Atsushi Torikoshi) @@ -1222,7 +1222,7 @@ Author: Fujii Masao --> -Add lock wait time to pg_locks (Atsushi Torikoshi) +Add lock wait start time to pg_locks (Atsushi Torikoshi) From cff8436f19e1c0c278f1ee96d450507fbd43f9ef Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Mon, 17 May 2021 21:54:36 +0200 Subject: [PATCH 322/671] Remove obsolete reference to winflex download We used to distribute a binary version of flex for windows on our download site, but it hasn't been working for many years. The "old documentation" referenced was also for versions that have been EOL for many years. So, remove it. Discussion: https://postgr.es/m/CABUevEwXLJpVpab62f7AFXNWQ5=U0kvErCLq4VEsikidLyzSQg@mail.gmail.com --- doc/src/sgml/install-windows.sgml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgml index 92087dba6870e..db53ee85a877a 100644 --- a/doc/src/sgml/install-windows.sgml +++ b/doc/src/sgml/install-windows.sgml @@ -255,15 +255,6 @@ $ENV{MSBFLAGS}="/m"; - - - The obsolete winflex binaries distributed in the - downloads section of the PostgreSQL web site - and referenced in older documentation will fail with flex: fatal - internal error, exec failed on 64-bit Windows hosts. Use Flex from - MSYS instead. - - From e4f9737fac77a5cb03a84d1f4038d300ffd28afd Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 17 May 2021 16:11:18 -0400 Subject: [PATCH 323/671] Stamp 14beta1. --- configure | 18 +++++++++--------- configure.ac | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/configure b/configure index 70f45552643d7..e9b98f442fe3e 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for PostgreSQL 14devel. +# Generated by GNU Autoconf 2.69 for PostgreSQL 14beta1. # # Report bugs to . # @@ -582,8 +582,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='PostgreSQL' PACKAGE_TARNAME='postgresql' -PACKAGE_VERSION='14devel' -PACKAGE_STRING='PostgreSQL 14devel' +PACKAGE_VERSION='14beta1' +PACKAGE_STRING='PostgreSQL 14beta1' PACKAGE_BUGREPORT='pgsql-bugs@lists.postgresql.org' PACKAGE_URL='https://www.postgresql.org/' @@ -1443,7 +1443,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures PostgreSQL 14devel to adapt to many kinds of systems. +\`configure' configures PostgreSQL 14beta1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1508,7 +1508,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of PostgreSQL 14devel:";; + short | recursive ) echo "Configuration of PostgreSQL 14beta1:";; esac cat <<\_ACEOF @@ -1679,7 +1679,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -PostgreSQL configure 14devel +PostgreSQL configure 14beta1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2432,7 +2432,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by PostgreSQL $as_me 14devel, which was +It was created by PostgreSQL $as_me 14beta1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -20073,7 +20073,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by PostgreSQL $as_me 14devel, which was +This file was extended by PostgreSQL $as_me 14beta1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -20144,7 +20144,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -PostgreSQL config.status 14devel +PostgreSQL config.status 14beta1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index ba67c95bcc2b8..3b42d8bdc9c05 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl Read the Autoconf manual for details. dnl m4_pattern_forbid(^PGAC_)dnl to catch undefined macros -AC_INIT([PostgreSQL], [14devel], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/]) +AC_INIT([PostgreSQL], [14beta1], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/]) m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.69], [], [m4_fatal([Autoconf version 2.69 is required. Untested combinations of 'autoconf' and PostgreSQL versions are not From 2ded19fa3a4dafbae80245710fa371d5163bdad4 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Tue, 18 May 2021 09:54:56 +1200 Subject: [PATCH 324/671] Fix typo and outdated information in README.barrier README.barrier didn't seem to get the memo when atomics were added. Fix that. Author: Tatsuo Ishii, David Rowley Discussion: https://postgr.es/m/20210516.211133.2159010194908437625.t-ishii%40sraoss.co.jp Backpatch-through: 9.6, oldest supported release --- src/backend/storage/lmgr/README.barrier | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/backend/storage/lmgr/README.barrier b/src/backend/storage/lmgr/README.barrier index e73d6799abcaa..f78e5ac8f6f4d 100644 --- a/src/backend/storage/lmgr/README.barrier +++ b/src/backend/storage/lmgr/README.barrier @@ -103,7 +103,7 @@ performed before the barrier, and vice-versa. Although this code will work, it is needlessly inefficient. On systems with strong memory ordering (such as x86), the CPU never reorders loads with other -loads, nor stores with other stores. It can, however, allow a load to +loads, nor stores with other stores. It can, however, allow a load to be performed before a subsequent store. To avoid emitting unnecessary memory instructions, we provide two additional primitives: pg_read_barrier(), and pg_write_barrier(). When a memory barrier is being used to separate two @@ -155,18 +155,16 @@ Although this may compile down to a single machine-language instruction, the CPU will execute that instruction by reading the current value of foo, adding one to it, and then storing the result back to the original address. If two CPUs try to do this simultaneously, both may do their reads before -either one does their writes. Eventually we might be able to use an atomic -fetch-and-add instruction for this specific case on architectures that support -it, but we can't rely on that being available everywhere, and we currently -have no support for it at all. Use a lock. +either one does their writes. Such a case could be made safe by using an +atomic variable and an atomic add. See port/atomics.h. 2. Eight-byte loads and stores aren't necessarily atomic. We assume in various places in the source code that an aligned four-byte load or store is atomic, and that other processes therefore won't see a half-set value. Sadly, the same can't be said for eight-byte value: on some platforms, an aligned eight-byte load or store will generate two four-byte operations. If -you need an atomic eight-byte read or write, you must make it atomic with a -lock. +you need an atomic eight-byte read or write, you must either serialize access +with a lock or use an atomic variable. 3. No ordering guarantees. While memory barriers ensure that any given process performs loads and stores to shared memory in order, they don't From 2e7c17837064297f25c427d58154dce8d4287302 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 18 May 2021 15:17:44 -0400 Subject: [PATCH 325/671] doc: add PG 14 rel item about vacuum_cleanup_index_scale_factor --- doc/src/sgml/release-14.sgml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 0bd49460e0281..d048e74754c8a 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -342,6 +342,23 @@ Force custom server variable names to match the pattern used for unquoted SQL id + + + + +Remove server variable vacuum_cleanup_index_scale_factor (Peter Geoghegan) + + + +This setting was disabled in PostgreSQL version 13.3. + + + -Prevent the containment operators (<@ and @>) for contrib/intarray from using GiST indexes (Tom Lane) +Prevent the containment operators (<@ and @>) for from using GiST indexes (Tom Lane) @@ -75,7 +75,8 @@ Author: Tom Lane --> -Remove deprecated containment operators @ and ~ for built-in geometric data types and contrib modules cube, hstore, intarray, and seg (Justin Pryzby) +Remove deprecated containment operators @ and ~ for built-in geometric data types and contrib modules , , +, and (Justin Pryzby) @@ -90,7 +91,7 @@ Author: Alexander Korotkov --> -Fix to_tsquery() and websearch_to_tsquery() to properly parse query text containing discarded tokens (Alexander Korotkov) +Fix to_tsquery() and websearch_to_tsquery() to properly parse query text containing discarded tokens (Alexander Korotkov) @@ -106,7 +107,7 @@ Author: Alexander Korotkov --> -Fix websearch_to_tsquery() to properly parse multiple adjacent discarded tokens in quotes (Alexander Korotkov) +Fix websearch_to_tsquery() to properly parse multiple adjacent discarded tokens in quotes (Alexander Korotkov) @@ -124,11 +125,11 @@ Author: Peter Eisentraut --> -Change the default of the password_encryption server parameter to scram-sha-256 (Peter Eisentraut) +Change the default of the server parameter to scram-sha-256 (Peter Eisentraut) -Previously it was md5. All new passwords will be stored as SHA256 unless this server variable is changed or the password is specified in md5 format. +Previously it was md5. All new passwords will be stored as SHA256 unless this server variable is changed or the password is specified in md5 format. Also, the legacy (and undocumented) boolean-like values which were previously synonyms for md5 are no longer accepted. @@ -140,12 +141,12 @@ Author: Bruce Momjian --> -Overhaul the specification of clientcert in pg_hba.conf (Kyotaro Horiguchi) +Overhaul the specification of clientcert in pg_hba.conf (Kyotaro Horiguchi) -Values 1/0/no-verify are no longer supported; only the strings verify-ca and verify-full can be used. Also, disallow verify-ca if cert authentication is enabled since cert requires verify-full -checking. +Values 1/0/no-verify are no longer supported; only the strings verify-ca and verify-full can be used. Also, disallow verify-ca if cert +authentication is enabled since cert requires verify-full checking. @@ -158,11 +159,11 @@ Author: Michael Paquier --> -Remove support for SSL compression (Daniel Gustafsson, Michael Paquier) +Remove support for SSL compression (Daniel Gustafsson, Michael Paquier) -This was already disabled by default in previous Postgres releases, and most modern OpenSSL and TLS versions no longer support it. +This was already disabled by default in previous Postgres releases, and most modern OpenSSL and TLS versions no longer support it. @@ -173,7 +174,7 @@ Author: Heikki Linnakangas --> -Remove server and libpq support for the version 2 wire protocol (Heikki Linnakangas) +Remove server and support for the version 2 wire protocol (Heikki Linnakangas) @@ -188,11 +189,11 @@ Author: Peter Eisentraut --> -Change EXTRACT to return the NUMERIC data type (Peter Eisentraut) +Change EXTRACT to return the NUMERIC data type (Peter Eisentraut) -EXTRACT(date) now throws an error for units that are not part of the date data type. +EXTRACT(date) now throws an error for units that are not part of the date data type. @@ -203,11 +204,11 @@ Author: Tom Lane --> -Fix handling of infinite window function ranges (Tom Lane) +Fix handling of infinite window function ranges (Tom Lane) -Previously window frame clauses like 'inf' PRECEDING AND 'inf' FOLLOWING returned incorrect results. +Previously window frame clauses like 'inf' PRECEDING AND 'inf' FOLLOWING returned incorrect results. @@ -218,7 +219,7 @@ Author: Peter Eisentraut --> -Prevent tablefunc's function normal_rand() from accepting negative values (Ashutosh Bapat) +Prevent 's function normal_rand() from accepting negative values (Ashutosh Bapat) @@ -233,11 +234,11 @@ Author: Tom Lane --> -Change var_samp() and stddev_samp() with numeric parameters to return NULL for a single NaN value (Tom Lane) +Change var_samp() and stddev_samp() with numeric parameters to return NULL for a single NaN value (Tom Lane) -Previously NaN was returned. +Previously NaN was returned. @@ -248,11 +249,11 @@ Author: Tom Lane --> -Remove factorial operators ! and !! (Mark Dilger) +Remove factorial operators ! and !! (Mark Dilger) -The factorial() function is still supported. Also remove function numeric_fac(). +The factorial() function is still supported. Also remove function numeric_fac(). @@ -263,7 +264,7 @@ Author: Peter Eisentraut --> -Disallow factorial() of negative numbers (Peter Eisentraut) +Disallow factorial() of negative numbers (Peter Eisentraut) @@ -278,11 +279,11 @@ Author: Tom Lane --> -Remove support for postfix (right-unary) operators (Mark Dilger) +Remove support for postfix (right-unary) operators (Mark Dilger) -pg_dump and pg_upgrade will warn if postfix operators are being dumped. +pg_dump and pg_upgrade will warn if postfix operators are being dumped. @@ -293,11 +294,11 @@ Author: Tom Lane --> -Allow \D and \W shorthands to match newlines in newline-sensitive mode (Tom Lane) +Allow \D and \W shorthands to match newlines in regular expression newline-sensitive mode (Tom Lane) -Previously they did not match; [^[:digit:]] or [^[:word:]] can be used to get the old behavior. +Previously they did not match; [^[:digit:]] or [^[:word:]] can be used to get the old behavior. @@ -312,7 +313,7 @@ Improve handling of regular expression back-references (Tom Lane) -For example, disregard ^ in its expansion in \1 in "(^\d+).*\1". +For example, disregard ^ in its expansion in \1 in (^\d+).*\1. @@ -323,7 +324,7 @@ Author: Tom Lane --> -Disallow \w as range start/end in character classes (Tom Lane) +Disallow \w as range start/end in character classes (Tom Lane) @@ -338,7 +339,7 @@ Author: Tom Lane --> -Force custom server variable names to match the pattern used for unquoted SQL identifiers (Tom Lane) +Force custom server variable names to match the pattern used for unquoted SQL identifiers (Tom Lane) @@ -351,11 +352,11 @@ Author: Peter Geoghegan --> -Remove server variable vacuum_cleanup_index_scale_factor (Peter Geoghegan) +Remove server variable vacuum_cleanup_index_scale_factor (Peter Geoghegan) -This setting was disabled in PostgreSQL version 13.3. +This setting was disabled in PostgreSQL version 13.3. @@ -366,7 +367,7 @@ Author: Joe Conway --> -Return false for has_column_privilege() checks on non-existent or dropped columns when using attribute numbers (Joe Conway) +Return false for has_column_privilege() checks on non-existent or dropped columns when using attribute numbers (Joe Conway) @@ -383,11 +384,11 @@ Author: Tom Lane --> -Pass doubled quote marks in ecpg SQL command strings literally (Tom Lane) +Pass doubled quote marks in SQL command strings literally (Tom Lane) -Previously 'abc''def' was passed to the server as 'abc'def', and "abc""def" was passed as "abc"def". +Previously 'abc''def' was passed to the server as 'abc'def', and "abc""def" was passed as "abc"def". @@ -398,7 +399,7 @@ Author: Peter Eisentraut --> -Disallow single-quoting of the language name in the CREATE/DROP LANGUAGE command (Peter Eisentraut) +Disallow single-quoting of the language name in the CREATE/DROP LANGUAGE command (Peter Eisentraut) @@ -409,7 +410,7 @@ Author: Thomas Munro --> -Remove contrib program pg_standby (Justin Pryzby) +Remove contrib program pg_standby (Justin Pryzby) @@ -420,7 +421,7 @@ Author: Tom Lane --> -Remove composite types for sequences or toast tables (Tom Lane) +Remove composite types for sequences or toast tables (Tom Lane) @@ -431,11 +432,11 @@ Author: Tom Lane --> -Remove operator_precedence_warning setting (Tom Lane) +Remove operator_precedence_warning setting (Tom Lane) -This was needed for warning applications about PostgreSQL 9.5 changes. +This was needed for warning applications about PostgreSQL 9.5 changes. @@ -464,7 +465,7 @@ Author: Stephen Frost --> -Add predefined roles pg_read_all_data and pg_write_all_data (Stephen Frost) +Add predefined roles pg_read_all_data and pg_write_all_data (Stephen Frost) @@ -483,7 +484,7 @@ Add a predefined role to match the database owner (Noah Misch) -It is called pg_database_owner; this is useful in template databases. +It is called pg_database_owner; this is useful in template databases. @@ -498,7 +499,7 @@ Remove temporary files after backend crashes (Euler Taveira) -These files were previously retained for debugging purposes; deletion can be disabled with remove_temp_files_after_crash. +These files were previously retained for debugging purposes; deletion can be disabled with remove_temp_files_after_crash. @@ -513,7 +514,7 @@ Add long-running queries to be canceled if the client disconnects (Sergey Cherka -The server variable client_connection_check_interval allows supporting operating systems, e.g., Linux, to automatically cancel queries by disconnected clients. +The server variable client_connection_check_interval allows supporting operating systems, e.g., Linux, to automatically cancel queries by disconnected clients. @@ -524,11 +525,11 @@ Author: Magnus Hagander --> -Add function pg_wait_for_backend_termination() that waits for session exit (Bharath Rupireddy) +Add function pg_wait_for_backend_termination() that waits for session exit (Bharath Rupireddy) -Also add a similar optional wait parameter to pg_terminate_backend(). +Also add a similar optional wait parameter to pg_terminate_backend(). @@ -554,7 +555,7 @@ Author: Peter Eisentraut --> -Add Set Server Name Indication (SNI) for SSL connection packets (Peter Eisentraut) +Add Set Server Name Indication (SNI) for SSL connection packets (Peter Eisentraut) @@ -587,11 +588,11 @@ Author: Peter Geoghegan --> -Allow VACUUM to eagerly add newly deleted btree pages to the free space map (Peter Geoghegan) +Allow VACUUM to eagerly add newly deleted btree pages to the free space map (Peter Geoghegan) -Previously VACUUM could only place preexisting deleted pages in the free space map. +Previously VACUUM could only place preexisting deleted pages in the free space map. @@ -624,7 +625,7 @@ Author: Peter Geoghegan --> -Reduce the default value of vacuum_cost_page_miss (Peter Geoghegan) +Reduce the default value of vacuum_cost_page_miss (Peter Geoghegan) @@ -639,11 +640,11 @@ Author: Michael Paquier --> -Add ability to skip vacuuming of TOAST tables (Nathan Bossart) +Add ability to skip vacuuming of TOAST tables (Nathan Bossart) -VACUUM now has a PROCESS_TOAST which can be set to false to disable TOAST processing, and vacuumdb has a --no-process-toast option. +VACUUM now has a PROCESS_TOAST which can be set to false to disable TOAST processing, and vacuumdb has a option. @@ -654,7 +655,7 @@ Author: Tomas Vondra --> -Have COPY FREEZE appropriately update page visibility bits (Anastasia Lubennikova, Pavan Deolasee, Jeff Janes) +Have COPY FREEZE appropriately update page visibility bits (Anastasia Lubennikova, Pavan Deolasee, Jeff Janes) @@ -669,7 +670,7 @@ Cause vacuum operations to be aggressive if the table is near xid or multixact w -This is controlled by vacuum_failsafe_age and vacuum_multixact_failsafe_age. +This is controlled by vacuum_failsafe_age and vacuum_multixact_failsafe_age. @@ -752,7 +753,7 @@ Allow partitions to be detached in a non-blocking manner (Álvaro Herrera) -The syntax is ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY, and FINALIZE. +The syntax is ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY, and FINALIZE. @@ -804,7 +805,7 @@ Author: Tomas Vondra --> -Allow BRIN indexes to record multiple min/max values per range (Tomas Vondra) +Allow BRIN indexes to record multiple min/max values per range (Tomas Vondra) @@ -819,7 +820,7 @@ Author: Tomas Vondra --> -Allow BRIN indexes to use bloom filters (Tomas Vondra) +Allow BRIN indexes to use bloom filters (Tomas Vondra) @@ -849,7 +850,7 @@ Author: Tom Lane --> -Allow SP-GiST to use INCLUDE'd columns (Pavel Borisov) +Allow SP-GiST to use INCLUDE'd columns (Pavel Borisov) @@ -869,7 +870,7 @@ Author: David Rowley --> -Allow hash lookup of IN clause with many constants (James Coleman, David Rowley) +Allow hash lookup of IN clause with many constants (James Coleman, David Rowley) @@ -888,7 +889,7 @@ Author: Dean Rasheed --> -Increase the number of places extended statistics can be used for OR clause estimation (Tomas Vondra, Dean Rasheed) +Increase the number of places extended statistics can be used for OR clause estimation (Tomas Vondra, Dean Rasheed) @@ -903,8 +904,8 @@ Allow extended statistics on expressions (Tomas Vondra) -This allows statistics on a group of expressions and columns, rather than only columns like previously. System view pg_stats_ext_exprs reports such statistics. -ALTER TABLE ... ALTER COLUMN ... TYPE RESETS STASTISTICS? +This allows statistics on a group of expressions and columns, rather than only columns like previously. System view pg_stats_ext_exprs reports such statistics. +ALTER TABLE ... ALTER COLUMN ... TYPE RESETS STASTISTICS? @@ -930,11 +931,11 @@ Author: Michael Paquier --> -Fix EXPLAIN CREATE TABLE AS and EXPLAIN CREATE MATERIALIZED VIEW to honor IF NOT EXISTS (Bharath Rupireddy) +Fix EXPLAIN CREATE TABLE AS and EXPLAIN CREATE MATERIALIZED VIEW to honor IF NOT EXISTS (Bharath Rupireddy) -Previously, if the object already exists, EXPLAIN would fail. +Previously, if the object already exists, EXPLAIN would fail. @@ -964,7 +965,7 @@ Author: Andres Freund --> -Improve the speed of computing MVCC visibility snapshots on systems with many CPUs and high session counts (Andres Freund) +Improve the speed of computing MVCC visibility snapshots on systems with many CPUs and high session counts (Andres Freund) @@ -1024,7 +1025,7 @@ Allow a query referencing multiple foreign tables to perform foreign table scans -The postgres_fdw supports these type of scans if "async_capable" is set. +The postgres_fdw supports these type of scans if async_capable is set. @@ -1039,7 +1040,7 @@ Allow analyze to do page prefetching (Stephen Frost) -This is controlled by maintenance_io_concurrency. +This is controlled by maintenance_io_concurrency. @@ -1087,7 +1088,7 @@ Dramatically improve Unicode normalization (John Naylor) -This speeds normalize() and IS NORMALIZED. +This speeds normalize() and IS NORMALIZED. @@ -1098,11 +1099,11 @@ Author: Robert Haas --> -Add ability to use LZ4 compression on TOAST data (Dilip Kumar) +Add ability to use LZ4 compression on TOAST data (Dilip Kumar) -This can be set at the column level, or set as a default via server setting default_toast_compression. The server must be compiled with --with-lz4 to support this feature; the default is still pglz. +This can be set at the column level, or set as a default via server setting default_toast_compression. The server must be compiled with to support this feature; the default is still pglz. @@ -1130,7 +1131,7 @@ Author: Alvaro Herrera --> -If server variable compute_query_id is enabled, display the query id in pg_stat_activity, EXPLAIN VERBOSE, csvlog, and optionally in log_line_prefix (Julien Rouhaud) +If server variable compute_query_id is enabled, display the query id in pg_stat_activity, EXPLAIN VERBOSE, csvlog, and optionally in log_line_prefix (Julien Rouhaud) @@ -1147,7 +1148,7 @@ Author: Fujii Masao --> -Add system view pg_backend_memory_contexts to report session memory usage (Atsushi Torikoshi, Fujii Masao) +Add system view pg_backend_memory_contexts to report session memory usage (Atsushi Torikoshi, Fujii Masao) @@ -1158,7 +1159,7 @@ Author: Fujii Masao --> -Add function pg_log_backend_memory_contexts() to output the memory contexts of arbitrary backends (Atsushi Torikoshi) +Add function pg_log_backend_memory_contexts() to output the memory contexts of arbitrary backends (Atsushi Torikoshi) @@ -1173,7 +1174,7 @@ Improve logging of auto-vacuum and auto-analyze (Stephen Frost, Jakub Wartak) -This reports I/O timings for auto-vacuum and auto-analyze if track_io_timing is enabled. Also, report buffer read and dirty rates for auto-analyze. +This reports I/O timings for auto-vacuum and auto-analyze if track_io_timing is enabled. Also, report buffer read and dirty rates for auto-analyze. @@ -1184,7 +1185,7 @@ Author: Michael Paquier --> -Add information about the original user name supplied by the client to the output of log_connections (Jacob Champion) +Add information about the original user name supplied by the client to the output of log_connections (Jacob Champion) @@ -1206,7 +1207,7 @@ Author: Michael Paquier --> -Add view pg_stat_progress_copy to report COPY progress (Josef Šimánek, Matthias van de Meent) +Add view pg_stat_progress_copy to report COPY progress (Josef Šimánek, Matthias van de Meent) @@ -1217,7 +1218,7 @@ Author: Magnus Hagander --> -Add session statistics to the pg_stat_database system view (Laurenz Albe) +Add session statistics to the pg_stat_database system view (Laurenz Albe) @@ -1228,7 +1229,7 @@ Author: Fujii Masao --> -Add columns to pg_prepared_statements to report generic and custom plan counts (Atsushi Torikoshi, Kyotaro Horiguchi) +Add columns to pg_prepared_statements to report generic and custom plan counts (Atsushi Torikoshi, Kyotaro Horiguchi) @@ -1239,7 +1240,7 @@ Author: Fujii Masao --> -Add lock wait start time to pg_locks (Atsushi Torikoshi) +Add lock wait start time to pg_locks (Atsushi Torikoshi) @@ -1254,7 +1255,7 @@ Author: Fujii Masao --> -Add system view pg_stat_wal which reports WAL activity (Masahiro Ikeda) +Add system view pg_stat_wal which reports WAL activity (Masahiro Ikeda) @@ -1271,11 +1272,11 @@ Author: Amit Kapila --> -Add system view pg_stat_replication_slots to report replication slot activity (Sawada Masahiko, Amit Kapila, Vignesh C) +Add system view pg_stat_replication_slots to report replication slot activity (Sawada Masahiko, Amit Kapila, Vignesh C) -Function pg_stat_reset_replication_slot() resets slot statistics. +Function pg_stat_reset_replication_slot() resets slot statistics. @@ -1286,11 +1287,11 @@ Author: Tom Lane --> -Improve pg_stat_activity reporting of walsender processes (Tom Lane) +Improve pg_stat_activity reporting of walsender processes (Tom Lane) -Previously only SQL commands were reported. +Previously only SQL commands were reported. @@ -1301,7 +1302,7 @@ Author: Fujii Masao --> -Make the archiver process visible in pg_stat_activity (Kyotaro Horiguchi) +Make the archiver process visible in pg_stat_activity (Kyotaro Horiguchi) @@ -1312,7 +1313,7 @@ Author: Fujii Masao --> -Add wait event WalReceiverExit to report WAL receiver exit wait time (Fujii Masao) +Add wait event WalReceiverExit to report WAL receiver exit wait time (Fujii Masao) @@ -1323,7 +1324,7 @@ Author: Peter Eisentraut --> -Implement information schema view routine_column_usage to track columns referenced by function and procedure default expressions (Peter Eisentraut) +Implement information schema view routine_column_usage to track columns referenced by function and procedure default expressions (Peter Eisentraut) @@ -1343,11 +1344,11 @@ Author: Andrew Dunstan --> -Allow the certificate's distinguished name (DN) to be matched for client certificate authentication (Andrew Dunstan) +Allow the certificate's distinguished name (DN) to be matched for client certificate authentication (Andrew Dunstan) -The new pg_hba.conf keyword "clientname=DN" allows comparison with certificate attributes beyond the CN and can be combined with ident maps. +The new pg_hba.conf keyword clientname=DN allows comparison with certificate attributes beyond the CN and can be combined with ident maps. @@ -1358,7 +1359,7 @@ Author: Tom Lane --> -Allow pg_hba.conf and pg_ident.conf records to span multiple lines (Fabien Coelho) +Allow pg_hba.conf and pg_ident.conf records to span multiple lines (Fabien Coelho) @@ -1373,11 +1374,11 @@ Author: Peter Eisentraut --> -Allow the specification of a certificate revocation list (CRL) directory (Kyotaro Horiguchi) +Allow the specification of a certificate revocation list (CRL) directory (Kyotaro Horiguchi) -This is controlled by server variable ssl_crl_dir and libpq connection option sslcrldir. Previously only CRL files could be specified. +This is controlled by server variable ssl_crl_dir and libpq connection option sslcrldir. Previously only CRL files could be specified. @@ -1408,11 +1409,11 @@ Author: Tom Lane --> -Add server setting idle_session_timeout to close idle sessions (Li Japin) +Add server setting idle_session_timeout to close idle sessions (Li Japin) -This is similar to idle_in_transaction_session_timeout. +This is similar to idle_in_transaction_session_timeout. @@ -1423,7 +1424,7 @@ Author: Stephen Frost --> -Change checkpoint_completion_target default to 0.9 (Stephen Frost) +Change checkpoint_completion_target default to 0.9 (Stephen Frost) @@ -1438,7 +1439,7 @@ Author: Michael Paquier --> -Add %P to log_line_prefix to report the parallel group leader (Justin Pryzby) +Add %P to log_line_prefix to report the parallel group leader (Justin Pryzby) @@ -1449,7 +1450,7 @@ Author: Michael Paquier --> -Allow unix_socket_directories to specify paths as individual, comma-separated quoted strings (Ian Lawrence Barwick) +Allow unix_socket_directories to specify paths as individual, comma-separated quoted strings (Ian Lawrence Barwick) @@ -1468,7 +1469,7 @@ Allow startup allocation of dynamic shared memory (Thomas Munro) -This is controlled by min_dynamic_shared_memory. This allows more use of huge pages. +This is controlled by min_dynamic_shared_memory. This allows more use of huge pages. @@ -1479,7 +1480,7 @@ Author: Thomas Munro --> -Add setting huge_page_size to control the size of huge pages used on Linux (Odin Ugedal) +Add setting huge_page_size to control the size of huge pages used on Linux (Odin Ugedal) @@ -1501,7 +1502,7 @@ Author: Heikki Linnakangas --> -Allow standby servers to be rewound via pg_rewind (Heikki Linnakangas) +Allow standby servers to be rewound via pg_rewind (Heikki Linnakangas) @@ -1512,11 +1513,11 @@ Author: Fujii Masao --> -Allow restore_command setting to be changed during a server reload (Sergei Kornilov) +Allow restore_command setting to be changed during a server reload (Sergei Kornilov) -You can also set restore_command to an empty string and reload to force recovery to only read from the pg_wal directory. +You can also set restore_command to an empty string and reload to force recovery to only read from the pg_wal directory. @@ -1529,7 +1530,7 @@ Author: Fujii Masao --> -Add server variable log_recovery_conflict_waits to report long recovery conflict wait times (Bertrand Drouvot, Masahiko Sawada) +Add server variable log_recovery_conflict_waits to report long recovery conflict wait times (Bertrand Drouvot, Masahiko Sawada) @@ -1555,11 +1556,11 @@ Author: Robert Haas --> -Add function pg_get_wal_replay_pause_state() to report the recovery state (Dilip Kumar) +Add function pg_get_wal_replay_pause_state() to report the recovery state (Dilip Kumar) -It gives more detailed information than pg_is_wal_replay_paused(), which still exists. +It gives more detailed information than pg_is_wal_replay_paused(), which still exists. @@ -1570,7 +1571,7 @@ Author: Tom Lane --> -Add new server-side variable in_hot_standby (Haribabu Kommi, Greg Nancarrow, Tom Lane) +Add new server-side variable in_hot_standby (Haribabu Kommi, Greg Nancarrow, Tom Lane) @@ -1597,7 +1598,7 @@ Allow file system sync at the start of crash recovery on Linux (Thomas Munro) By default, Postgres opens and fsyncs every data file at the start of crash recovery. -This new setting, recovery_init_sync_method=syncfs, instead syncs each filesystem used by the database cluster. +This new setting, recovery_init_sync_method=syncfs, instead syncs each filesystem used by the database cluster. This allows for faster recovery on systems with many database files. @@ -1609,7 +1610,7 @@ Author: Michael Paquier --> -Add function pg_xact_commit_timestamp_origin() to return the commit timestamp and replication origin of the specified transaction (Movead Li) +Add function pg_xact_commit_timestamp_origin() to return the commit timestamp and replication origin of the specified transaction (Movead Li) @@ -1620,7 +1621,7 @@ Author: Michael Paquier --> -Add the replication origin to the record returned by pg_last_committed_xact() (Movead Li) +Add the replication origin to the record returned by pg_last_committed_xact() (Movead Li) @@ -1679,7 +1680,7 @@ Allow logical replication to stream long in-progress transactions to subscribers -Previously transactions that exceeded logical_decoding_work_mem were written to disk until the transaction completed. +Previously transactions that exceeded logical_decoding_work_mem were written to disk until the transaction completed. @@ -1690,11 +1691,11 @@ Author: Amit Kapila --> -Enhance the logical replication API to allow streaming large in-progress transactions (Tomas Vondra, Dilip Kumar, Amit Kapila) +Enhance the logical replication API to allow streaming large in-progress transactions (Tomas Vondra, Dilip Kumar, Amit Kapila) -The output functions begin with "stream". test_decoding also supports these. +The output functions begin with stream. test_decoding also supports these. @@ -1716,7 +1717,7 @@ Author: Amit Kapila --> -Immediately WAL-log subtransaction and top-level XID association (Tomas Vondra, Dilip Kumar, Amit Kapila) +Immediately WAL-log subtransaction and top-level XID association (Tomas Vondra, Dilip Kumar, Amit Kapila) @@ -1739,7 +1740,7 @@ Enhance logical decoding APIs to handle two-phase commits (Ajin Cherian, Amit Ka -This is controlled via pg_create_logical_replication_slot(). +This is controlled via pg_create_logical_replication_slot(). @@ -1750,11 +1751,11 @@ Author: Amit Kapila --> -Generate WAL invalidations message during command completion when using logical replication (Dilip Kumar, Tomas Vondra, Amit Kapila) +Generate WAL invalidations message during command completion when using logical replication (Dilip Kumar, Tomas Vondra, Amit Kapila) -When logical replication is disabled, WAL invalidation messages are generated at transaction completion. This allows logical streaming of in-progress transactions. +When logical replication is disabled, WAL invalidation messages are generated at transaction completion. This allows logical streaming of in-progress transactions. @@ -1769,7 +1770,7 @@ Allow logical decoding to more efficiently process cache invalidation messages ( -This allows Logical decoding to work efficiently in presence of a large amount of DDL. +This allows Logical decoding to work efficiently in presence of a large amount of DDL. @@ -1816,7 +1817,7 @@ Allow logical decoding to be filtered by xid (Markus Wanner) - SELECT, INSERT + <command>SELECT</command>, <command>INSERT</command> @@ -1827,7 +1828,7 @@ Author: Tom Lane --> -Reduce the number of keywords that can't be used as column labels without "AS" (Mark Dilger) +Reduce the number of keywords that can't be used as column labels without AS (Mark Dilger) @@ -1838,15 +1839,15 @@ There are now 90% fewer restricted keywords. -Allow an alias to be specified for JOIN's USING clause (Peter Eisentraut) +Allow an alias to be specified for JOIN's USING clause (Peter Eisentraut) -The alias is created by using AS after the USING clause and represents an alias for the USING columns. +The alias is created by using AS after the USING clause and represents an alias for the USING columns. @@ -1857,22 +1858,22 @@ Author: Tomas Vondra --> -Allow DISTINCT to be added to GROUP BY to remove duplicate GROUPING SET combinations (Vik Fearing) +Allow DISTINCT to be added to GROUP BY to remove duplicate GROUPING SET combinations (Vik Fearing) -For example, GROUP BY CUBE (a,b), CUBE (b,c) will generate duplicate grouping combinations without DISTINCT. +For example, GROUP BY CUBE (a,b), CUBE (b,c) will generate duplicate grouping combinations without DISTINCT. -Properly handle DEFAULT values for columns in multi-column inserts (Dean Rasheed) +Properly handle DEFAULT values for columns in multi-column inserts (Dean Rasheed) @@ -1889,7 +1890,7 @@ Author: Peter Eisentraut --> -Add SQL-standard SEARCH and CYCLE clauses for common table expressions (Peter Eisentraut) +Add SQL-standard SEARCH and CYCLE clauses for common table expressions (Peter Eisentraut) @@ -1904,7 +1905,7 @@ Author: Tom Lane --> -Allow the WHERE clause of ON CONFLICT to be table-qualified (Tom Lane) +Allow the WHERE clause of ON CONFLICT to be table-qualified (Tom Lane) @@ -1928,7 +1929,7 @@ Author: Thomas Munro --> -Allow REFRESH MATERIALIZED VIEW to use parallelism (Bharath Rupireddy) +Allow REFRESH MATERIALIZED VIEW to use parallelism (Bharath Rupireddy) @@ -1939,11 +1940,11 @@ Author: Michael Paquier --> -Allow REINDEX to change the tablespace of the new index (Alexey Kondratov, Michael Paquier, Justin Pryzby) +Allow REINDEX to change the tablespace of the new index (Alexey Kondratov, Michael Paquier, Justin Pryzby) -This is done by specifying a TABLESPACE clause. +This is done by specifying a TABLESPACE clause. @@ -1954,7 +1955,7 @@ Author: Michael Paquier --> -Allow REINDEX to process all child tables or indexes of a partitioned relation (Justin Pryzby, Michael Paquier) +Allow REINDEX to process all child tables or indexes of a partitioned relation (Justin Pryzby, Michael Paquier) @@ -1965,7 +1966,7 @@ Author: Tom Lane --> -Improve the performance of COPY FROM in binary mode (Bharath Rupireddy, Amit Langote) +Improve the performance of COPY FROM in binary mode (Bharath Rupireddy, Amit Langote) @@ -1976,11 +1977,11 @@ Author: Tom Lane --> -Preserve SQL standard syntax in view definitions, if possible (Tom Lane) +Preserve SQL standard syntax in view definitions, if possible (Tom Lane) -Previously non-function call SQL standard syntax, e.g. EXTRACT, were converted to non-SQL standard function calls. +Previously non-function call SQL standard syntax, e.g. EXTRACT, were converted to non-SQL standard function calls. @@ -1991,7 +1992,7 @@ Author: Peter Eisentraut --> -Add the SQL-standard clause GRANTED BY to GRANT and REVOKE (Peter Eisentraut) +Add the SQL-standard clause GRANTED BY to GRANT and REVOKE (Peter Eisentraut) @@ -2002,7 +2003,7 @@ Author: Tom Lane --> -Add OR REPLACE for CREATE TRIGGER (Takamichi Osumi) +Add OR REPLACE for CREATE TRIGGER (Takamichi Osumi) @@ -2021,7 +2022,7 @@ Allow control over whether foreign servers keep connections open after transacti -This is controlled by keep_connections and defaults to on. +This is controlled by keep_connections and defaults to on. @@ -2032,11 +2033,11 @@ Author: Fujii Masao --> -Allow TRUNCATE to operate on foreign tables (Kazutaka Onishi, Kohei KaiGai) +Allow TRUNCATE to operate on foreign tables (Kazutaka Onishi, Kohei KaiGai) -The postgres_fdw module also now supports this. +The postgres_fdw module also now supports this. @@ -2051,7 +2052,7 @@ Allow publications to be more easily added and removed (Japin Li) -The new syntax is ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION. This avoids having to specify all publications to add/remove entries. +The new syntax is ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION. This avoids having to specify all publications to add/remove entries. @@ -2068,7 +2069,7 @@ Add primary keys, unique constraints, and foreign keys to system catalogs (Peter -This helps GUI tools analyze the system tables. +This helps GUI tools analyze the system tables. @@ -2079,7 +2080,7 @@ Author: Peter Eisentraut --> -Allow CURRENT_ROLE every place CURRENT_USER is accepted (Peter Eisentraut) +Allow CURRENT_ROLE every place CURRENT_USER is accepted (Peter Eisentraut) @@ -2119,11 +2120,11 @@ Author: Alexander Korotkov --> -Allow subscripting of JSONB (Dmitry Dolgov) +Allow subscripting of JSONB (Dmitry Dolgov) -JSONB subscripting can be used to extract and assign to portions of JSONB documents. +JSONB subscripting can be used to extract and assign to portions of JSONB documents. @@ -2188,7 +2189,7 @@ Allow tsearch data files to have unlimited line lengths (Tom Lane) -The previous limit was 4k bytes. Also remove function t_readline(). +The previous limit was 4k bytes. Also remove function t_readline(). @@ -2199,7 +2200,7 @@ Author: Tom Lane --> -Add support for infinity and -infinity values to the numeric data type (Tom Lane) +Add support for infinity and -infinity values to the numeric data type (Tom Lane) @@ -2255,7 +2256,7 @@ Author: Fujii Masao --> -Add operators to add and subtract LSN and numeric (byte) values (Fujii Masao) +Add operators to add and subtract LSN and numeric (byte) values (Fujii Masao) @@ -2266,7 +2267,7 @@ Author: Tom Lane --> -Allow binary data transfer to be more forgiving of array and record OID mismatches (Tom Lane) +Allow binary data transfer to be more forgiving of array and record OID mismatches (Tom Lane) @@ -2297,7 +2298,7 @@ Author: Peter Eisentraut --> -Allow SQL-language functions and procedures to use SQL-standard function bodies (Peter Eisentraut) +Allow SQL-language functions and procedures to use SQL-standard function bodies (Peter Eisentraut) @@ -2314,7 +2315,7 @@ Author: Peter Eisentraut --> -Allow procedures to have OUT parameters (Peter Eisentraut) +Allow procedures to have OUT parameters (Peter Eisentraut) @@ -2329,7 +2330,7 @@ Allow some array functions to operate on a mix of compatible data types (Tom Lan -The functions are array_append() array_prepend(), array_cat(), array_position(), array_positions(), array_remove(), array_replace(), and width_bucket(). Previously only identical data types could be used. +The functions are array_append() array_prepend(), array_cat(), array_position(), array_positions(), array_remove(), array_replace(), and width_bucket(). Previously only identical data types could be used. @@ -2340,7 +2341,7 @@ Author: Tom Lane --> -Add SQL-standard trim_array() function (Vik Fearing) +Add SQL-standard trim_array() function (Vik Fearing) @@ -2355,7 +2356,7 @@ Author: Tom Lane --> -Add bytea equivalents of ltrim() and rtrim() (Joel Jacobson) +Add bytea equivalents of ltrim() and rtrim() (Joel Jacobson) @@ -2366,7 +2367,7 @@ Author: Tom Lane --> -Support negative indexes in split_part() (Nikhil Benesch) +Support negative indexes in split_part() (Nikhil Benesch) @@ -2381,11 +2382,11 @@ Author: Tom Lane --> -A string_to_table() function to split a string on delimiters (Pavel Stehule) +A string_to_table() function to split a string on delimiters (Pavel Stehule) -This is similar to the regexp_split_to_table() function. +This is similar to the regexp_split_to_table() function. @@ -2396,7 +2397,7 @@ Author: Peter Eisentraut --> -Add unistr() function to allow Unicode characters to be specified as backslash-hex escapes in strings (Pavel Stehule) +Add unistr() function to allow Unicode characters to be specified as backslash-hex escapes in strings (Pavel Stehule) @@ -2411,7 +2412,7 @@ Author: Peter Eisentraut --> -Add bit_xor XOR aggregate function (Alexey Bashtanov) +Add bit_xor() XOR aggregate function (Alexey Bashtanov) @@ -2422,7 +2423,7 @@ Author: Peter Eisentraut --> -Add function bit_count() to return the number of bits set in a bit or byte string (David Fetter) +Add function bit_count() to return the number of bits set in a bit or byte string (David Fetter) @@ -2435,11 +2436,11 @@ Author: Peter Eisentraut --> -Add date_bin function (John Naylor) +Add date_bin() function (John Naylor) -The function date_bin "bins" the input timestamp into a specified interval aligned with a specified origin. +The function date_bin() "bins" the input timestamp into a specified interval aligned with a specified origin. @@ -2450,11 +2451,11 @@ Author: Tom Lane --> -Allow make_timestamp/make_timestamptz to accept negative years (Peter Eisentraut) +Allow make_timestamp()/make_timestamptz() to accept negative years (Peter Eisentraut) -They are interpreted as BC years. +They are interpreted as BC years. @@ -2465,11 +2466,11 @@ Author: Peter Eisentraut --> -Add newer regular expression substring() syntax (Peter Eisentraut) +Add newer regular expression substring() syntax (Peter Eisentraut) -The new syntax is SUBSTRING(text SIMILAR pattern ESCAPE escapechar). The previous standard syntax was SUBSTRING(text FROM pattern FOR escapechar), and is still supported by Postgres. +The new syntax is SUBSTRING(text SIMILAR pattern ESCAPE escapechar). The previous standard syntax was SUBSTRING(text FROM pattern FOR escapechar), and is still supported by Postgres. @@ -2502,7 +2503,7 @@ Author: Tom Lane --> -Allow more flexible data types for default values of lead() and lag() window functions (Vik Fearing) +Allow more flexible data types for default values of lead() and lag() window functions (Vik Fearing) @@ -2517,7 +2518,7 @@ Author: Tom Lane --> -Cause exp() and power() for negative-infinity exponents to return zero (Tom Lane) +Cause exp() and power() for negative-infinity exponents to return zero (Tom Lane) @@ -2547,7 +2548,7 @@ Author: Tom Lane --> -Mark pg_stat_get_subscription() as returning a set (Tom Lane) +Mark pg_stat_get_subscription() as returning a set (Tom Lane) @@ -2562,7 +2563,7 @@ Author: Tom Lane --> -Prevent inet_server_addr() and inet_server_port() from being run by parallel workers (Masahiko Sawada) +Prevent inet_server_addr() and inet_server_port() from being run by parallel workers (Masahiko Sawada) @@ -2573,7 +2574,7 @@ Author: Michael Paquier --> -Change pg_describe_object(), pg_identify_object(), and pg_identify_object_as_address() to always report helpful error messages for non-existent objects (Michael Paquier) +Change pg_describe_object(), pg_identify_object(), and pg_identify_object_as_address() to always report helpful error messages for non-existent objects (Michael Paquier) @@ -2608,7 +2609,7 @@ Author: Tom Lane --> -Allow plpgsql's RETURN QUERY to execute its query using parallelism (Tom Lane) +Allow plpgsql's RETURN QUERY to execute its query using parallelism (Tom Lane) @@ -2656,11 +2657,11 @@ Author: Tom Lane --> -Enhance libpq's target_session_attrs parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane) +Enhance libpq's parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane) -New options are "read-only", "primary", "standby", and "prefer-standby". +New options are read-only, primary, standby, and prefer-standby. @@ -2671,7 +2672,7 @@ Author: Alvaro Herrera --> -Improve the output format of libpq's PQtrace() (Aya Iwata, Álvaro Herrera) +Improve the output format of libpq's PQtrace() (Aya Iwata, Álvaro Herrera) @@ -2697,11 +2698,11 @@ Author: Michael Meskes --> -Allow an ECPG SQL identifier to be linked to a specific connection (Hayato Kuroda) +Allow an ECPG SQL identifier to be linked to a specific connection (Hayato Kuroda) -This is done via DECLARE ... STATEMENT. +This is done via DECLARE ... STATEMENT. @@ -2725,7 +2726,7 @@ Allow reindexdb to change the tablespace of the new index (Michael Paquier) -This is done by specifying --tablespace. +This is done by specifying . @@ -2740,7 +2741,7 @@ Allow vacuumdb to skip index cleanup and truncation (Nathan Bossart) -The options are --no-index-cleanup and --no-truncate. +The options are and . @@ -2751,11 +2752,11 @@ Author: Michael Paquier --> -Allow pg_dump to dump only certain extensions (Guillaume Lelarge) +Allow pg_dump to dump only certain extensions (Guillaume Lelarge) -This is controlled by option --extension. +This is controlled by option . @@ -2766,7 +2767,7 @@ Author: Dean Rasheed --> -Add pgbench permute() function to randomly shuffle values (Fabien Coelho, Hironobu Suzuki, Dean Rasheed) +Add pgbench permute() function to randomly shuffle values (Fabien Coelho, Hironobu Suzuki, Dean Rasheed) @@ -2777,11 +2778,11 @@ Author: Tom Lane --> -Allow multiple verbose option specifications (-v) to increase the logging verbosity (Tom Lane) +Allow multiple verbose option specifications () to increase the logging verbosity (Tom Lane) -This is now supported by pg_dump, pg_dumpall, and pg_restore. +This is now supported by pg_dump, pg_dumpall, and pg_restore. @@ -2799,7 +2800,7 @@ Author: Tom Lane --> -Allow psql's \df and \do commands to specify function and operator argument types (Greg Sabino Mullane, Tom Lane) +Allow psql's \df and \do commands to specify function and operator argument types (Greg Sabino Mullane, Tom Lane) @@ -2814,7 +2815,7 @@ Author: Michael Paquier --> -Add an access method column to psql's \d[i|m|t]+ output (Georgios Kokolatos) +Add an access method column to psql's \d[i|m|t]+ output (Georgios Kokolatos) @@ -2825,7 +2826,7 @@ Author: Tom Lane --> -Allow psql's \dt and \di to show TOAST tables and their indexes (Justin Pryzby) +Allow psql's \dt and \di to show TOAST tables and their indexes (Justin Pryzby) @@ -2836,7 +2837,7 @@ Author: Tomas Vondra --> -Add psql command \dX to list extended statistics objects (Tatsuro Yamada) +Add psql command \dX to list extended statistics objects (Tatsuro Yamada) @@ -2847,7 +2848,7 @@ Author: Tom Lane --> -Fix psql's \dT to understand array syntax and backend grammar aliases, like "int" for "integer" (Greg Sabino Mullane, Tom Lane) +Fix psql's \dT to understand array syntax and backend grammar aliases, like "int" for "integer" (Greg Sabino Mullane, Tom Lane) @@ -2858,7 +2859,7 @@ Author: Tom Lane --> -When editing the previous query or a file with psql's \e, or using \ef and \ev, ignore the contents if the editor exits without saving (Laurenz Albe) +When editing the previous query or a file with psql's \e, or using \ef and \ev, ignore the contents if the editor exits without saving (Laurenz Albe) @@ -2873,7 +2874,7 @@ Author: Tom Lane --> -Improve psql's handling of \connect with -reuse-previous (Tom Lane) +Improve psql's handling of \connect with (Tom Lane) @@ -2944,7 +2945,7 @@ Author: Robert Haas --> -Add command-line utility pg_amcheck to simplify running contrib/amcheck operations on many relations (Mark Dilger) +Add command-line utility pg_amcheck to simplify running contrib/amcheck operations on many relations (Mark Dilger) @@ -2955,7 +2956,7 @@ Author: Magnus Hagander --> -Add --no-instructions option to initdb (Magnus Hagander) +Add option to initdb (Magnus Hagander) @@ -2970,7 +2971,7 @@ Author: Magnus Hagander --> -Stop pg_upgrade from creating analyze_new_cluster script (Michael Paquier) +Stop pg_upgrade from creating analyze_new_cluster script (Michael Paquier) @@ -2985,7 +2986,7 @@ Author: Magnus Hagander --> -Remove support for the postmaster -o option (Magnus Hagander) +Remove support for the postmaster option (Magnus Hagander) @@ -3020,11 +3021,11 @@ Author: Peter Eisentraut --> -Add documentation for the factorial() function (Peter Eisentraut) +Add documentation for the factorial() function (Peter Eisentraut) -With the removal of the ! operator in this release, factorial() is the only built-in way to compute a factorial. +With the removal of the ! operator in this release, factorial() is the only built-in way to compute a factorial. @@ -3044,11 +3045,11 @@ Author: Michael Paquier --> -Add configure option --with-ssl={openssl} to behave like --with-openssl (Daniel Gustafsson, Michael Paquier) +Add configure option --with-ssl={openssl} to behave like (Daniel Gustafsson, Michael Paquier) -The option --with-openssl is kept for compatibility. +The option is kept for compatibility. @@ -3074,7 +3075,7 @@ Author: Peter Eisentraut --> -Add debug_invalidate_system_caches_always to control cache overwriting (Craig Ringer) +Add debug_invalidate_system_caches_always to control cache overwriting (Craig Ringer) @@ -3115,7 +3116,7 @@ Author: Andres Freund --> -Add support for LLVM 12 (Andres Freund) +Add support for LLVM version 12 (Andres Freund) @@ -3132,11 +3133,11 @@ Author: Michael Paquier --> -Change SHA1, SHA2, and MD5 hash computations to use the OpenSSL EVP API (Michael Paquier) +Change SHA1, SHA2, and MD5 hash computations to use the OpenSSL EVP API (Michael Paquier) -This is more modern and supports FIPS mode. +This is more modern and supports FIPS mode. @@ -3158,7 +3159,7 @@ Author: Heikki Linnakangas --> -Add direct conversion routines between EUC_TW and Big5 (Heikki Linnakangas) +Add direct conversion routines between EUC_TW and Big5 (Heikki Linnakangas) @@ -3180,7 +3181,7 @@ Author: Tom Lane --> -Add "amadjustmembers" to the index access method API (Tom Lane) +Add "amadjustmembers" to the index access method API (Tom Lane) @@ -3204,11 +3205,11 @@ Author: Bruce Momjian --> -Move query hash computation from pg_stat_statements to the core server (Julien Rouhaud) +Move query hash computation from pg_stat_statements to the core server (Julien Rouhaud) -The new server variable compute_query_id's default of 'auto' will automatically enable query id computation when this extension is loaded. +The new server variable compute_query_id's default of 'auto' will automatically enable query id computation when this extension is loaded. @@ -3219,7 +3220,7 @@ Author: Magnus Hagander --> -Allow pg_stat_statements to track top and nested statements independently (Julien Rohaud) +Allow pg_stat_statements to track top and nested statements independently (Julien Rohaud) @@ -3236,7 +3237,7 @@ Author: Fujii Masao --> -Add row counts for utility commands to pg_stat_statements (Fujii Masao, Katsuragi Yuta, Seino Yuki) +Add row counts for utility commands to pg_stat_statements> (Fujii Masao, Katsuragi Yuta, Seino Yuki) @@ -3249,7 +3250,7 @@ Author: Fujii Masao --> -Add pg_stat_statements_info system view to show pg_stat_statements activity (Katsuragi Yuta, Yuki Seino, Naoki Nakamichi) +Add pg_stat_statements_info system view to show pg_stat_statements activity (Katsuragi Yuta, Yuki Seino, Naoki Nakamichi) @@ -3271,11 +3272,11 @@ Author: Alexander Korotkov --> -Allow GiST/GIN pg_trgm indexes to do equality lookups (Julien Rouhaud) +Allow GiST/GIN pg_trgm indexes to do equality lookups (Julien Rouhaud) -This is similar to LIKE except no wildcards are honored. +This is similar to LIKE except no wildcards are honored. @@ -3297,7 +3298,7 @@ Author: Robert Haas --> -Add contrib module pg_surgery which allows changes to row visibility (Ashutosh Sharma) +Add contrib module pg_surgery which allows changes to row visibility (Ashutosh Sharma) @@ -3312,7 +3313,7 @@ Author: Robert Haas --> -Add contrib module old_snapshot to report the XID/time mapping used by an active old_snapshot_threshold (Robert Haas) +Add contrib module old_snapshot to report the XID/time mapping used by an active old_snapshot_threshold (Robert Haas) @@ -3362,7 +3363,7 @@ Author: Peter Eisentraut --> -Allow pgstattuple_approx() to report on TOAST tables (Peter Eisentraut) +Allow pgstattuple_approx() to report on TOAST tables (Peter Eisentraut) @@ -3373,7 +3374,7 @@ Author: Alexander Korotkov --> -Mark btree_gist functions as parallel safe (Steven Winfield) +Mark btree_gist functions as parallel safe (Steven Winfield) @@ -3393,7 +3394,7 @@ Author: Tomas Vondra --> -Allow postgres_fdw to INSERT rows in bulk (Takayuki Tsunakawa, Tomas Vondra, Amit Langote) +Allow postgres_fdw to INSERT rows in bulk (Takayuki Tsunakawa, Tomas Vondra, Amit Langote) @@ -3404,7 +3405,7 @@ Author: Fujii Masao --> -Allow postgres_fdw to import table partitions if specified by IMPORT FOREIGN SCHEMA ... LIMIT TO (Matthias van de Meent) +Allow postgres_fdw to import table partitions if specified by IMPORT FOREIGN SCHEMA ... LIMIT TO (Matthias van de Meent) @@ -3419,7 +3420,7 @@ Author: Fujii Masao --> -Add postgres_fdw function postgres_fdw_get_connections to report open foreign server connections (Bharath Rupireddy) +Add postgres_fdw function postgres_fdw_get_connections to report open foreign server connections (Bharath Rupireddy) @@ -3430,7 +3431,7 @@ Author: Fujii Masao --> -Add postgres_fdw functions to discard cached connections (Bharath Rupireddy) +Add postgres_fdw functions to discard cached connections (Bharath Rupireddy) @@ -3443,7 +3444,7 @@ Author: Fujii Masao --> -Allow postgres_fdw to reestablish foreign server connections if necessary (Bharath Rupireddy) +Allow postgres_fdw to reestablish foreign server connections if necessary (Bharath Rupireddy) From 0a442a408b40d2c6710de7e5397cb2e769d8c630 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Wed, 19 May 2021 08:54:46 +0530 Subject: [PATCH 329/671] Fix 020_messages.pl test. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We were not waiting for a publisher to catch up with the subscriber after creating a subscription. Now, it can happen that apply worker starts replication even after we have disabled the subscription in the test. This will make the test expect that there is no active slot whereas there exists one. Fix this symptom by allowing the publisher to wait for catching up with the subscription. It is not a good idea to ensure if the slot is still active by checking for walsender existence as we release the slot after we clean up the walsender related memory. Fix that by checking the slot status in pg_replication_slots. Also, it is better to avoid repeated enabling/disabling of the subscription. Finally, we make autovacuum off for this test to avoid any empty transaction appearing in the test while consuming changes. Reported-by: as per buildfarm Author: Vignesh C Reviewed-by: Amit Kapila, Michael Paquier Discussion: https://postgr.es/m/CAA4eK1+uW1UGDHDz-HWMHMen76mKP7NJebOTZN4uwbyMjaYVww@mail.gmail.com --- src/test/subscription/t/020_messages.pl | 31 +++++++------------------ 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/src/test/subscription/t/020_messages.pl b/src/test/subscription/t/020_messages.pl index 0940d0f45f287..52bd92df1dd6f 100644 --- a/src/test/subscription/t/020_messages.pl +++ b/src/test/subscription/t/020_messages.pl @@ -11,6 +11,8 @@ # Create publisher node my $node_publisher = get_new_node('publisher'); $node_publisher->init(allows_streaming => 'logical'); +$node_publisher->append_conf('postgresql.conf', + 'autovacuum = off'); $node_publisher->start; # Create subscriber node @@ -35,12 +37,14 @@ "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub" ); +$node_publisher->wait_for_catchup('tap_sub'); + # Ensure a transactional logical decoding message shows up on the slot $node_subscriber->safe_psql('postgres', "ALTER SUBSCRIPTION tap_sub DISABLE"); -# wait for the replication connection to drop from the publisher +# wait for the replication slot to become inactive in the publisher $node_publisher->poll_query_until('postgres', - 'SELECT COUNT(*) FROM pg_catalog.pg_stat_replication', 0); + "SELECT COUNT(*) FROM pg_catalog.pg_replication_slots WHERE slot_name = 'tap_sub' AND active='f'", 1); $node_publisher->safe_psql('postgres', "SELECT pg_logical_emit_message(true, 'pgoutput', 'a transactional message')" @@ -77,7 +81,7 @@ $result = $node_publisher->safe_psql( 'postgres', qq( SELECT get_byte(data, 0) - FROM pg_logical_slot_peek_binary_changes('tap_sub', NULL, NULL, + FROM pg_logical_slot_get_binary_changes('tap_sub', NULL, NULL, 'proto_version', '1', 'publication_names', 'tap_pub') )); @@ -88,16 +92,6 @@ 'option messages defaults to false so message (M) is not available on slot' ); -$node_subscriber->safe_psql('postgres', "ALTER SUBSCRIPTION tap_sub ENABLE"); -$node_publisher->wait_for_catchup('tap_sub'); - -# ensure a non-transactional logical decoding message shows up on the slot -$node_subscriber->safe_psql('postgres', "ALTER SUBSCRIPTION tap_sub DISABLE"); - -# wait for the replication connection to drop from the publisher -$node_publisher->poll_query_until('postgres', - 'SELECT COUNT(*) FROM pg_catalog.pg_stat_replication', 0); - $node_publisher->safe_psql('postgres', "INSERT INTO tab_test VALUES (1)"); my $message_lsn = $node_publisher->safe_psql('postgres', @@ -109,7 +103,7 @@ $result = $node_publisher->safe_psql( 'postgres', qq( SELECT get_byte(data, 0), get_byte(data, 1) - FROM pg_logical_slot_peek_binary_changes('tap_sub', NULL, NULL, + FROM pg_logical_slot_get_binary_changes('tap_sub', NULL, NULL, 'proto_version', '1', 'publication_names', 'tap_pub', 'messages', 'true') @@ -118,15 +112,6 @@ is($result, qq(77|0), 'non-transactional message on slot is M'); -$node_subscriber->safe_psql('postgres', "ALTER SUBSCRIPTION tap_sub ENABLE"); -$node_publisher->wait_for_catchup('tap_sub'); - -$node_subscriber->safe_psql('postgres', "ALTER SUBSCRIPTION tap_sub DISABLE"); - -# wait for the replication connection to drop from the publisher -$node_publisher->poll_query_until('postgres', - 'SELECT COUNT(*) FROM pg_catalog.pg_stat_replication', 0); - # Ensure a non-transactional logical decoding message shows up on the slot when # it is emitted within an aborted transaction. The message won't emit until # something advances the LSN, hence, we intentionally forces the server to From 167bd4804995afd654bd97ca9486acbece24377e Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 19 May 2021 13:48:19 +0900 Subject: [PATCH 330/671] Make standby promotion reset the recovery pause state to 'not paused'. If a promotion is triggered while recovery is paused, the paused state ends and promotion continues. But previously in that case pg_get_wal_replay_pause_state() returned 'paused' wrongly while a promotion was ongoing. This commit changes a standby promotion so that it marks the recovery pause state as 'not paused' when it's triggered, to fix the issue. Author: Fujii Masao Reviewed-by: Dilip Kumar, Kyotaro Horiguchi Discussion: https://postgr.es/m/f706876c-4894-0ba5-6f4d-79803eeea21b@oss.nttdata.com --- src/backend/access/transam/xlog.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 8d163f190f378..441a9124cd598 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -12825,6 +12825,14 @@ SetPromoteIsTriggered(void) XLogCtl->SharedPromoteIsTriggered = true; SpinLockRelease(&XLogCtl->info_lck); + /* + * Mark the recovery pause state as 'not paused' because the paused state + * ends and promotion continues if a promotion is triggered while recovery + * is paused. Otherwise pg_get_wal_replay_pause_state() can mistakenly + * return 'paused' while a promotion is ongoing. + */ + SetRecoveryPause(false); + LocalPromoteIsTriggered = true; } From 0f516d039d8023163e82fa51104052306068dd69 Mon Sep 17 00:00:00 2001 From: Dean Rasheed Date: Wed, 19 May 2021 12:50:58 +0100 Subject: [PATCH 331/671] Fix pgbench permute tests. One of the tests for the pgbench permute() function added by 6b258e3d68 fails on some 32-bit platforms, due to variations in the floating point computations in getrand(). The remaining tests give sufficient coverage, so just remove the failing test. Reported by Christoph Berg. Analysis by Thomas Munro and Tom Lane. Based on patch by Fabien Coelho. Discussion: https://postgr.es/m/YKQnUoYV63GRJBDD@msg.df7cb.de --- src/bin/pgbench/t/001_pgbench_with_server.pl | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index 2eaf9ab4c29c5..9cc5270e02c91 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -496,8 +496,6 @@ sub pgbench qr{command=109.: boolean true\b}, qr{command=110.: boolean true\b}, qr{command=111.: boolean true\b}, - qr{command=112.: int 9223372036854775797\b}, - qr{command=113.: boolean true\b}, ], 'pgbench expressions', { @@ -643,15 +641,6 @@ sub pgbench \set t debug(permute(:v, 1) = 0) \set t debug(permute(0, 2, 5432) = 0 and permute(1, 2, 5432) = 1 and \ permute(0, 2, 5435) = 1 and permute(1, 2, 5435) = 0) --- 63 bits tests -\set size debug(:max - 10) -\set t debug(permute(:size-1, :size, 5432) = 5301702756001087507 and \ - permute(:size-2, :size, 5432) = 8968485976055840695 and \ - permute(:size-3, :size, 5432) = 6708495591295582115 and \ - permute(:size-4, :size, 5432) = 2801794404574855121 and \ - permute(:size-5, :size, 5432) = 1489011409218895840 and \ - permute(:size-6, :size, 5432) = 2267749475878240183 and \ - permute(:size-7, :size, 5432) = 1300324176838786780) } }); From 1e7d53bd019e9d86ef1013308715622a2e400d3b Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 19 May 2021 11:01:28 -0400 Subject: [PATCH 332/671] doc: add xreflabel for libpq chapter, needed for PG 14 relnotes --- doc/src/sgml/libpq.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 875950b83c0e2..4b1294f404fde 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -1,6 +1,6 @@ - + <application>libpq</application> — C Library From 4f7d1c30966cc02fd5eba2f0d51d1f53be07d457 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 19 May 2021 11:22:21 -0400 Subject: [PATCH 333/671] doc: revert 1e7d53bd01 so libpq chapter number is accessable Fix PG 14 relnotes to use instead of . This was discussed in commit message 59fa7eb603. --- doc/src/sgml/libpq.sgml | 2 +- doc/src/sgml/release-14.sgml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 4b1294f404fde..875950b83c0e2 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -1,6 +1,6 @@ - + <application>libpq</application> — C Library diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 91fe17055d6cd..3dc3c69031b80 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -174,7 +174,7 @@ Author: Heikki Linnakangas --> -Remove server and support for the version 2 wire protocol (Heikki Linnakangas) +Remove server and libpq support for the version 2 wire protocol (Heikki Linnakangas) From 413c1ef98e0c9c708c4a9a13a838a55b65b16a80 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 19 May 2021 14:04:01 -0400 Subject: [PATCH 334/671] Avoid creating testtablespace directories where not wanted. Recently we refactored things so that pg_regress makes the "testtablespace" subdirectory used by the core regression tests, instead of doing that in the makefiles. That had the undesirable side effect of making such a subdirectory in every directory that has "input" or "output" test files. Since these subdirectories remain empty, git doesn't complain about them, but nonetheless they're clutter. To fix, invent an explicit --make-testtablespace-dir switch, so that pg_regress only makes the subdirectory when explicitly told to. Discussion: https://postgr.es/m/2854388.1621284789@sss.pgh.pa.us --- src/test/regress/GNUmakefile | 3 +- src/test/regress/pg_regress.c | 53 ++++++++++++++++++++++++----------- src/tools/msvc/vcregress.pl | 2 ++ 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/test/regress/GNUmakefile b/src/test/regress/GNUmakefile index 5dc4bbcb001ee..fe6e0c98aa2e0 100644 --- a/src/test/regress/GNUmakefile +++ b/src/test/regress/GNUmakefile @@ -119,7 +119,8 @@ submake-contrib-spi: | submake-libpgport submake-generated-headers ## Run tests ## -REGRESS_OPTS = --dlpath=. --max-concurrent-tests=20 $(EXTRA_REGRESS_OPTS) +REGRESS_OPTS = --dlpath=. --max-concurrent-tests=20 --make-testtablespace-dir \ + $(EXTRA_REGRESS_OPTS) check: all $(pg_regress_check) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(EXTRA_TESTS) diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c index b7d80bd9bb3d2..e04d365258d9e 100644 --- a/src/test/regress/pg_regress.c +++ b/src/test/regress/pg_regress.c @@ -504,25 +504,9 @@ convert_sourcefiles_in(const char *source_subdir, const char *dest_dir, const ch if (!directory_exists(outdir_sub)) make_directory(outdir_sub); + /* We might need to replace @testtablespace@ */ snprintf(testtablespace, MAXPGPATH, "%s/testtablespace", outputdir); - /* - * Clean out the test tablespace dir, or create it if it doesn't exist. On - * Windows, doing this cleanup here makes possible to run the regression - * tests as a Windows administrative user account with the restricted - * token obtained when starting pg_regress. - */ - if (directory_exists(testtablespace)) - { - if (!rmtree(testtablespace, true)) - { - fprintf(stderr, _("\n%s: could not remove test tablespace \"%s\"\n"), - progname, testtablespace); - exit(2); - } - } - make_directory(testtablespace); - /* finally loop on each file and do the replacement */ for (name = names; *name; name++) { @@ -601,6 +585,32 @@ convert_sourcefiles(void) convert_sourcefiles_in("output", outputdir, "expected", "out"); } +/* + * Clean out the test tablespace dir, or create it if it doesn't exist. + * + * On Windows, doing this cleanup here makes it possible to run the + * regression tests under a Windows administrative user account with the + * restricted token obtained when starting pg_regress. + */ +static void +prepare_testtablespace_dir(void) +{ + char testtablespace[MAXPGPATH]; + + snprintf(testtablespace, MAXPGPATH, "%s/testtablespace", outputdir); + + if (directory_exists(testtablespace)) + { + if (!rmtree(testtablespace, true)) + { + fprintf(stderr, _("\n%s: could not remove test tablespace \"%s\"\n"), + progname, testtablespace); + exit(2); + } + } + make_directory(testtablespace); +} + /* * Scan resultmap file to find which platform-specific expected files to use. * @@ -2058,6 +2068,7 @@ help(void) printf(_(" --launcher=CMD use CMD as launcher of psql\n")); printf(_(" --load-extension=EXT load the named extension before running the\n")); printf(_(" tests; can appear multiple times\n")); + printf(_(" --make-testtablespace-dir create testtablespace directory\n")); printf(_(" --max-connections=N maximum number of concurrent connections\n")); printf(_(" (default is 0, meaning unlimited)\n")); printf(_(" --max-concurrent-tests=N maximum number of concurrent tests in schedule\n")); @@ -2116,10 +2127,12 @@ regression_main(int argc, char *argv[], {"load-extension", required_argument, NULL, 22}, {"config-auth", required_argument, NULL, 24}, {"max-concurrent-tests", required_argument, NULL, 25}, + {"make-testtablespace-dir", no_argument, NULL, 26}, {NULL, 0, NULL, 0} }; bool use_unix_sockets; + bool make_testtablespace_dir = false; _stringlist *sl; int c; int i; @@ -2245,6 +2258,9 @@ regression_main(int argc, char *argv[], case 25: max_concurrent_tests = atoi(optarg); break; + case 26: + make_testtablespace_dir = true; + break; default: /* getopt_long already emitted a complaint */ fprintf(stderr, _("\nTry \"%s -h\" for more information.\n"), @@ -2297,6 +2313,9 @@ regression_main(int argc, char *argv[], unlimit_core_size(); #endif + if (make_testtablespace_dir) + prepare_testtablespace_dir(); + if (temp_instance) { FILE *pg_conf; diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index 1852c341091ef..35e8f67f01390 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -118,6 +118,7 @@ sub installcheck_internal "--bindir=../../../$Config/psql", "--schedule=${schedule}_schedule", "--max-concurrent-tests=20", + "--make-testtablespace-dir", "--encoding=SQL_ASCII", "--no-locale"); push(@args, $maxconn) if $maxconn; @@ -152,6 +153,7 @@ sub check "--bindir=", "--schedule=${schedule}_schedule", "--max-concurrent-tests=20", + "--make-testtablespace-dir", "--encoding=SQL_ASCII", "--no-locale", "--temp-instance=./tmp_check"); From 8bdd6f563aa2456de602e78991e6a9f61b8ec86d Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Thu, 20 May 2021 08:03:15 -0400 Subject: [PATCH 335/671] Use a more portable way to get the version string in PostgresNode Older versions of perl on Windows don't like the list form of pipe open, and perlcritic doesn't like the string form of open, so we avoid both with a simpler formulation using qx{}. Per complaint from Amit Kapila. --- src/test/perl/PostgresNode.pm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index f7088667a4ab9..c09a735dae99b 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -1248,10 +1248,8 @@ sub _set_pg_version local %ENV = $self->_get_env(); # We only want the version field - open my $fh, "-|", $pg_config, "--version" - or BAIL_OUT("$pg_config failed: $!"); - my $version_line = <$fh>; - close $fh or die; + my $version_line = qx{$pg_config --version}; + BAIL_OUT("$pg_config failed: $!") if $?; $self->{_pg_version} = PostgresVersion->new($version_line); From 6d59a218c38adf5b993200a804713df4982a0c75 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 20 May 2021 13:03:08 -0400 Subject: [PATCH 336/671] Clean up cpluspluscheck violation. "typename" is a C++ keyword, so pg_upgrade.h fails to compile in C++. Fortunately, there seems no likely reason for somebody to need to do that. Nonetheless, it's project policy that all .h files should pass cpluspluscheck, so rename the argument to fix that. Oversight in 57c081de0; back-patch as that was. (The policy requiring pg_upgrade.h to pass cpluspluscheck only goes back to v12, but it seems best to keep this code looking the same in all branches.) --- src/bin/pg_upgrade/pg_upgrade.h | 2 +- src/bin/pg_upgrade/version.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bin/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h index a5f71c5294ff3..f7eb2349e66d3 100644 --- a/src/bin/pg_upgrade/pg_upgrade.h +++ b/src/bin/pg_upgrade/pg_upgrade.h @@ -443,7 +443,7 @@ bool check_for_data_types_usage(ClusterInfo *cluster, const char *base_query, const char *output_path); bool check_for_data_type_usage(ClusterInfo *cluster, - const char *typename, + const char *type_name, const char *output_path); void new_9_0_populate_pg_largeobject_metadata(ClusterInfo *cluster, bool check_mode); diff --git a/src/bin/pg_upgrade/version.c b/src/bin/pg_upgrade/version.c index b531bda3e5c0b..a3c193316d0f6 100644 --- a/src/bin/pg_upgrade/version.c +++ b/src/bin/pg_upgrade/version.c @@ -233,20 +233,20 @@ check_for_data_types_usage(ClusterInfo *cluster, * * If so, write a report to the given file name, and return true. * - * typename should be a fully qualified type name. This is just a + * type_name should be a fully qualified type name. This is just a * trivial wrapper around check_for_data_types_usage() to convert a * type name into a base query. */ bool check_for_data_type_usage(ClusterInfo *cluster, - const char *typename, + const char *type_name, const char *output_path) { bool found; char *base_query; base_query = psprintf("SELECT '%s'::pg_catalog.regtype AS oid", - typename); + type_name); found = check_for_data_types_usage(cluster, base_query, output_path); From bdbb2ce7d51e93ca2ec68e25e2fafb271b34e72d Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Thu, 20 May 2021 15:11:17 -0400 Subject: [PATCH 337/671] Install PostgresVersion.pm A lamentable oversight on my part meant that when PostgresVersion.pm was added in commit 4c4eaf3d19 provision to install it was not added to the Makefile, so it was not installed along with the other perl modules. --- src/test/perl/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/perl/Makefile b/src/test/perl/Makefile index ee5e5dd72c053..3d3a95b52fd39 100644 --- a/src/test/perl/Makefile +++ b/src/test/perl/Makefile @@ -23,11 +23,13 @@ install: all installdirs $(INSTALL_DATA) $(srcdir)/SimpleTee.pm '$(DESTDIR)$(pgxsdir)/$(subdir)/SimpleTee.pm' $(INSTALL_DATA) $(srcdir)/RecursiveCopy.pm '$(DESTDIR)$(pgxsdir)/$(subdir)/RecursiveCopy.pm' $(INSTALL_DATA) $(srcdir)/PostgresNode.pm '$(DESTDIR)$(pgxsdir)/$(subdir)/PostgresNode.pm' + $(INSTALL_DATA) $(srcdir)/PostgresVersion.pm '$(DESTDIR)$(pgxsdir)/$(subdir)/PostgresVersion.pm' uninstall: rm -f '$(DESTDIR)$(pgxsdir)/$(subdir)/TestLib.pm' rm -f '$(DESTDIR)$(pgxsdir)/$(subdir)/SimpleTee.pm' rm -f '$(DESTDIR)$(pgxsdir)/$(subdir)/RecursiveCopy.pm' rm -f '$(DESTDIR)$(pgxsdir)/$(subdir)/PostgresNode.pm' + rm -f '$(DESTDIR)$(pgxsdir)/$(subdir)/PostgresVersion.pm' endif From 4f586fe244a296d7c781de3f06c54755f2ae222b Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 20 May 2021 15:50:46 -0400 Subject: [PATCH 338/671] doc: change PG 14 relnotes as suggested by Justin Pryzby --- doc/src/sgml/release-14.sgml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 3dc3c69031b80..c23e4a45891d6 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -339,7 +339,7 @@ Author: Tom Lane --> -Force custom server variable names to match the pattern used for unquoted SQL identifiers (Tom Lane) +Require custom server variable names to match the pattern used for unquoted SQL identifiers (Tom Lane) @@ -356,7 +356,7 @@ Remove server variable vacuum_cleanup_index_scale_factor (Pet -This setting was disabled in PostgreSQL version 13.3. +This setting was ignored starting in PostgreSQL version 13.3. @@ -510,11 +510,11 @@ Author: Thomas Munro --> -Add long-running queries to be canceled if the client disconnects (Sergey Cherkashin, Thomas Munro) +Allow long-running queries to be canceled if the client disconnects (Sergey Cherkashin, Thomas Munro) -The server variable client_connection_check_interval allows supporting operating systems, e.g., Linux, to automatically cancel queries by disconnected clients. +The server variable client_connection_check_interval allows some supported operating systems to automatically cancel queries by disconnected clients. @@ -559,7 +559,7 @@ Add Set Server Name Indication (SNI) for SSL -This can be disabled by turning client option "sslsni" off. +This can be disabled by turning off client option "sslsni". @@ -1439,7 +1439,7 @@ Author: Michael Paquier --> -Add %P to log_line_prefix to report the parallel group leader (Justin Pryzby) +Allow %P in log_line_prefix to report the parallel group leader (Justin Pryzby) From f21fadafaf0fb5ea4c9622d915972651273d62ce Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 20 May 2021 18:32:37 -0400 Subject: [PATCH 339/671] Avoid detoasting failure after COMMIT inside a plpgsql FOR loop. exec_for_query() normally tries to prefetch a few rows at a time from the query being iterated over, so as to reduce executor entry/exit overhead. Unfortunately this is unsafe if we have COMMIT or ROLLBACK within the loop, because there might be TOAST references in the data that we prefetched but haven't yet examined. Immediately after the COMMIT/ROLLBACK, we have no snapshots in the session, meaning that VACUUM is at liberty to remove recently-deleted TOAST rows. This was originally reported as a case triggering the "no known snapshots" error in init_toast_snapshot(), but even if you miss hitting that, you can get "missing toast chunk", as illustrated by the added isolation test case. To fix, just disable prefetching in non-atomic contexts. Maybe there will be performance complaints prompting us to work harder later, but it's not clear at the moment that this really costs much, and I doubt we'd want to back-patch any complicated fix. In passing, adjust that error message in init_toast_snapshot() to be a little clearer about the likely cause of the problem. Patch by me, based on earlier investigation by Konstantin Knizhnik. Per bug #15990 from Andreas Wicht. Back-patch to v11 where intra-procedure COMMIT was added. Discussion: https://postgr.es/m/15990-eee2ac466b11293d@postgresql.org --- src/backend/access/common/toast_internals.c | 15 ++++++- src/pl/plpgsql/src/pl_exec.c | 11 +++++ src/test/isolation/expected/plpgsql-toast.out | 43 +++++++++++++++++++ src/test/isolation/specs/plpgsql-toast.spec | 20 +++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) diff --git a/src/backend/access/common/toast_internals.c b/src/backend/access/common/toast_internals.c index c036319a0b8f9..8d2a9964c3f57 100644 --- a/src/backend/access/common/toast_internals.c +++ b/src/backend/access/common/toast_internals.c @@ -638,8 +638,21 @@ init_toast_snapshot(Snapshot toast_snapshot) { Snapshot snapshot = GetOldestSnapshot(); + /* + * GetOldestSnapshot returns NULL if the session has no active snapshots. + * We can get that if, for example, a procedure fetches a toasted value + * into a local variable, commits, and then tries to detoast the value. + * Such coding is unsafe, because once we commit there is nothing to + * prevent the toast data from being deleted. Detoasting *must* happen in + * the same transaction that originally fetched the toast pointer. Hence, + * rather than trying to band-aid over the problem, throw an error. (This + * is not very much protection, because in many scenarios the procedure + * would have already created a new transaction snapshot, preventing us + * from detecting the problem. But it's better than nothing, and for sure + * we shouldn't expend code on masking the problem more.) + */ if (snapshot == NULL) - elog(ERROR, "no known snapshots"); + elog(ERROR, "cannot fetch toast data without an active snapshot"); InitToastSnapshot(*toast_snapshot, snapshot->lsn, snapshot->whenTaken); } diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index b4c70aaa7fa5d..27d6ea75517d2 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -5826,6 +5826,17 @@ exec_for_query(PLpgSQL_execstate *estate, PLpgSQL_stmt_forq *stmt, */ PinPortal(portal); + /* + * In a non-atomic context, we dare not prefetch, even if it would + * otherwise be safe. Aside from any semantic hazards that that might + * create, if we prefetch toasted data and then the user commits the + * transaction, the toast references could turn into dangling pointers. + * (Rows we haven't yet fetched from the cursor are safe, because the + * PersistHoldablePortal mechanism handles this scenario.) + */ + if (!estate->atomic) + prefetch_ok = false; + /* * Fetch the initial tuple(s). If prefetching is allowed then we grab a * few more rows to avoid multiple trips through executor startup diff --git a/src/test/isolation/expected/plpgsql-toast.out b/src/test/isolation/expected/plpgsql-toast.out index fc557da5e7772..4f216b94b6228 100644 --- a/src/test/isolation/expected/plpgsql-toast.out +++ b/src/test/isolation/expected/plpgsql-toast.out @@ -192,3 +192,46 @@ pg_advisory_unlock t s1: NOTICE: length(r) = 6002 step assign5: <... completed> + +starting permutation: lock assign6 vacuum unlock +pg_advisory_unlock_all + + +pg_advisory_unlock_all + + +step lock: + SELECT pg_advisory_lock(1); + +pg_advisory_lock + + +step assign6: +do $$ + declare + r record; + begin + insert into test1 values (2, repeat('bar', 3000)); + insert into test1 values (3, repeat('baz', 4000)); + for r in select test1.b from test1 loop + delete from test1; + commit; + perform pg_advisory_lock(1); + raise notice 'length(r) = %', length(r::text); + end loop; + end; +$$; + +step vacuum: + VACUUM test1; + +step unlock: + SELECT pg_advisory_unlock(1); + +pg_advisory_unlock + +t +s1: NOTICE: length(r) = 6002 +s1: NOTICE: length(r) = 9002 +s1: NOTICE: length(r) = 12002 +step assign6: <... completed> diff --git a/src/test/isolation/specs/plpgsql-toast.spec b/src/test/isolation/specs/plpgsql-toast.spec index fe7090addbbce..d360f8fccbf9f 100644 --- a/src/test/isolation/specs/plpgsql-toast.spec +++ b/src/test/isolation/specs/plpgsql-toast.spec @@ -112,6 +112,25 @@ do $$ $$; } +# FOR loop must not hold any fetched-but-not-detoasted values across commit +step "assign6" +{ +do $$ + declare + r record; + begin + insert into test1 values (2, repeat('bar', 3000)); + insert into test1 values (3, repeat('baz', 4000)); + for r in select test1.b from test1 loop + delete from test1; + commit; + perform pg_advisory_lock(1); + raise notice 'length(r) = %', length(r::text); + end loop; + end; +$$; +} + session "s2" setup { @@ -135,3 +154,4 @@ permutation "lock" "assign2" "vacuum" "unlock" permutation "lock" "assign3" "vacuum" "unlock" permutation "lock" "assign4" "vacuum" "unlock" permutation "lock" "assign5" "vacuum" "unlock" +permutation "lock" "assign6" "vacuum" "unlock" From 6d0eb38557155855539cd007f04736dc3b2ba16f Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Fri, 21 May 2021 07:54:27 +0530 Subject: [PATCH 340/671] Fix deadlock for multiple replicating truncates of the same table. While applying the truncate change, the logical apply worker acquires RowExclusiveLock on the relation being truncated. This allowed truncate on the relation at a time by two apply workers which lead to a deadlock. The reason was that one of the workers after updating the pg_class tuple tries to acquire SHARE lock on the relation and started to wait for the second worker which has acquired RowExclusiveLock on the relation. And when the second worker tries to update the pg_class tuple, it starts to wait for the first worker which leads to a deadlock. Fix it by acquiring AccessExclusiveLock on the relation before applying the truncate change as we do for normal truncate operation. Author: Peter Smith, test case by Haiying Tang Reviewed-by: Dilip Kumar, Amit Kapila Backpatch-through: 11 Discussion: https://postgr.es/m/CAHut+PsNm43p0jM+idTvWwiGZPcP0hGrHMPK9TOAkc+a4UpUqw@mail.gmail.com --- src/backend/replication/logical/worker.c | 9 ++-- src/test/subscription/t/010_truncate.pl | 57 +++++++++++++++++++++++- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 1432554d5a718..60bf7f7ee9c3a 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -1818,6 +1818,7 @@ apply_handle_truncate(StringInfo s) List *relids = NIL; List *relids_logged = NIL; ListCell *lc; + LOCKMODE lockmode = AccessExclusiveLock; if (handle_streamed_transaction(LOGICAL_REP_MSG_TRUNCATE, s)) return; @@ -1831,14 +1832,14 @@ apply_handle_truncate(StringInfo s) LogicalRepRelId relid = lfirst_oid(lc); LogicalRepRelMapEntry *rel; - rel = logicalrep_rel_open(relid, RowExclusiveLock); + rel = logicalrep_rel_open(relid, lockmode); if (!should_apply_changes_for_rel(rel)) { /* * The relation can't become interesting in the middle of the * transaction so it's safe to unlock it. */ - logicalrep_rel_close(rel, RowExclusiveLock); + logicalrep_rel_close(rel, lockmode); continue; } @@ -1856,7 +1857,7 @@ apply_handle_truncate(StringInfo s) { ListCell *child; List *children = find_all_inheritors(rel->localreloid, - RowExclusiveLock, + lockmode, NULL); foreach(child, children) @@ -1876,7 +1877,7 @@ apply_handle_truncate(StringInfo s) */ if (RELATION_IS_OTHER_TEMP(childrel)) { - table_close(childrel, RowExclusiveLock); + table_close(childrel, lockmode); continue; } diff --git a/src/test/subscription/t/010_truncate.pl b/src/test/subscription/t/010_truncate.pl index 2d49f2537b807..065f5b0a3c6a8 100644 --- a/src/test/subscription/t/010_truncate.pl +++ b/src/test/subscription/t/010_truncate.pl @@ -6,7 +6,7 @@ use warnings; use PostgresNode; use TestLib; -use Test::More tests => 11; +use Test::More tests => 14; # setup @@ -16,6 +16,8 @@ my $node_subscriber = get_new_node('subscriber'); $node_subscriber->init(allows_streaming => 'logical'); +$node_subscriber->append_conf('postgresql.conf', + qq(max_logical_replication_workers = 6)); $node_subscriber->start; my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres'; @@ -187,3 +189,56 @@ "SELECT count(*), min(a), max(a) FROM tab1"); is($result, qq(0||), 'truncate replicated in synchronous logical replication'); + +$node_publisher->safe_psql('postgres', + "ALTER SYSTEM RESET synchronous_standby_names"); +$node_publisher->safe_psql('postgres', "SELECT pg_reload_conf()"); + +# test that truncate works for logical replication when there are multiple +# subscriptions for a single table + +$node_publisher->safe_psql('postgres', + "CREATE TABLE tab5 (a int)"); + +$node_subscriber->safe_psql('postgres', + "CREATE TABLE tab5 (a int)"); + +$node_publisher->safe_psql('postgres', + "CREATE PUBLICATION pub5 FOR TABLE tab5"); +$node_subscriber->safe_psql('postgres', + "CREATE SUBSCRIPTION sub5_1 CONNECTION '$publisher_connstr' PUBLICATION pub5" +); +$node_subscriber->safe_psql('postgres', + "CREATE SUBSCRIPTION sub5_2 CONNECTION '$publisher_connstr' PUBLICATION pub5" +); + +# wait for initial data sync +$node_subscriber->poll_query_until('postgres', $synced_query) + or die "Timed out while waiting for subscriber to synchronize data"; + +# insert data to truncate + +$node_publisher->safe_psql('postgres', + "INSERT INTO tab5 VALUES (1), (2), (3)"); + +$node_publisher->wait_for_catchup('sub5_1'); +$node_publisher->wait_for_catchup('sub5_2'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*), min(a), max(a) FROM tab5"); +is($result, qq(6|1|3), 'insert replicated for multiple subscriptions'); + +$node_publisher->safe_psql('postgres', "TRUNCATE tab5"); + +$node_publisher->wait_for_catchup('sub5_1'); +$node_publisher->wait_for_catchup('sub5_2'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*), min(a), max(a) FROM tab5"); +is($result, qq(0||), + 'truncate replicated for multiple subscriptions'); + +# check deadlocks +$result = $node_subscriber->safe_psql('postgres', + "SELECT deadlocks FROM pg_stat_database WHERE datname='postgres'"); +is($result, qq(0), 'no deadlocks detected'); From 124966c1a35b950210e12048e64533963960febd Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 21 May 2021 17:10:09 +0200 Subject: [PATCH 341/671] Put some psql documentation pieces back into alphabetical order --- doc/src/sgml/ref/psql-ref.sgml | 16 ++++++++-------- src/bin/psql/help.c | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 3b9ec5e0a3972..dd36830a2dc7a 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -3873,23 +3873,23 @@ bar - HIDE_TOAST_COMPRESSION + HIDE_TABLEAM - If this variable is set to true, column - compression method details are not displayed. This is mainly - useful for regression tests. + If this variable is set to true, a table's access + method details are not displayed. This is mainly useful for + regression tests. - HIDE_TABLEAM + HIDE_TOAST_COMPRESSION - If this variable is set to true, a table's access - method details are not displayed. This is mainly useful for - regression tests. + If this variable is set to true, column + compression method details are not displayed. This is mainly + useful for regression tests. diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index 97fc680f1f70b..ba657789353c5 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -374,10 +374,10 @@ helpVariables(unsigned short int pager) " true if last query failed, else false\n")); fprintf(output, _(" FETCH_COUNT\n" " the number of result rows to fetch and display at a time (0 = unlimited)\n")); - fprintf(output, _(" HIDE_TOAST_COMPRESSION\n" - " if set, compression methods are not displayed\n")); fprintf(output, _(" HIDE_TABLEAM\n" " if set, table access methods are not displayed\n")); + fprintf(output, _(" HIDE_TOAST_COMPRESSION\n" + " if set, compression methods are not displayed\n")); fprintf(output, _(" HISTCONTROL\n" " controls command history [ignorespace, ignoredups, ignoreboth]\n")); fprintf(output, _(" HISTFILE\n" @@ -489,10 +489,10 @@ helpVariables(unsigned short int pager) " same as the dbname connection parameter\n")); fprintf(output, _(" PGHOST\n" " same as the host connection parameter\n")); - fprintf(output, _(" PGPASSWORD\n" - " connection password (not recommended)\n")); fprintf(output, _(" PGPASSFILE\n" " password file name\n")); + fprintf(output, _(" PGPASSWORD\n" + " connection password (not recommended)\n")); fprintf(output, _(" PGPORT\n" " same as the port connection parameter\n")); fprintf(output, _(" PGUSER\n" From 84f5c2908dad81e8622b0406beea580e40bb03ac Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 21 May 2021 14:03:53 -0400 Subject: [PATCH 342/671] Restore the portal-level snapshot after procedure COMMIT/ROLLBACK. COMMIT/ROLLBACK necessarily destroys all snapshots within the session. The original implementation of intra-procedure transactions just cavalierly did that, ignoring the fact that this left us executing in a rather different environment than normal. In particular, it turns out that handling of toasted datums depends rather critically on there being an outer ActiveSnapshot: otherwise, when SPI or the core executor pop whatever snapshot they used and return, it's unsafe to dereference any toasted datums that may appear in the query result. It's possible to demonstrate "no known snapshots" and "missing chunk number N for toast value" errors as a result of this oversight. Historically this outer snapshot has been held by the Portal code, and that seems like a good plan to preserve. So add infrastructure to pquery.c to allow re-establishing the Portal-owned snapshot if it's not there anymore, and add enough bookkeeping support that we can tell whether it is or not. We can't, however, just re-establish the Portal snapshot as part of COMMIT/ROLLBACK. As in normal transaction start, acquiring the first snapshot should wait until after SET and LOCK commands. Hence, teach spi.c about doing this at the right time. (Note that this patch doesn't fix the problem for any PLs that try to run intra-procedure transactions without using SPI to execute SQL commands.) This makes SPI's no_snapshots parameter rather a misnomer, so in HEAD, rename that to allow_nonatomic. replication/logical/worker.c also needs some fixes, because it wasn't careful to hold a snapshot open around AFTER trigger execution. That code doesn't use a Portal, which I suspect someday we're gonna have to fix. But for now, just rearrange the order of operations. This includes back-patching the recent addition of finish_estate() to centralize the cleanup logic there. This also back-patches commit 2ecfeda3e into v13, to improve the test coverage for worker.c (it was that test that exposed that worker.c's snapshot management is wrong). Per bug #15990 from Andreas Wicht. Back-patch to v11 where intra-procedure COMMIT was added. Discussion: https://postgr.es/m/15990-eee2ac466b11293d@postgresql.org --- doc/src/sgml/spi.sgml | 12 +- src/backend/commands/functioncmds.c | 15 ++ src/backend/executor/spi.c | 82 +++++++---- src/backend/replication/logical/worker.c | 23 ++- src/backend/tcop/pquery.c | 135 ++++++++++++++---- src/backend/utils/mmgr/portalmem.c | 56 ++++++++ src/include/executor/spi.h | 2 +- src/include/tcop/pquery.h | 6 + src/include/utils/portal.h | 9 ++ src/pl/plpgsql/src/pl_exec.c | 31 +--- src/test/isolation/expected/plpgsql-toast.out | 27 ++++ src/test/isolation/specs/plpgsql-toast.spec | 21 +++ 12 files changed, 312 insertions(+), 107 deletions(-) diff --git a/doc/src/sgml/spi.sgml b/doc/src/sgml/spi.sgml index 6543eaa03435b..d6ff492ba9973 100644 --- a/doc/src/sgml/spi.sgml +++ b/doc/src/sgml/spi.sgml @@ -730,11 +730,11 @@ int SPI_execute_extended(const char *command, - bool no_snapshots + bool allow_nonatomic - true prevents SPI from managing snapshots for - execution of the query; use with extreme caution + true allows non-atomic execution of CALL and DO + statements @@ -1860,11 +1860,11 @@ int SPI_execute_plan_extended(SPIPlanPtr plan, - bool no_snapshots + bool allow_nonatomic - true prevents SPI from managing snapshots for - execution of the query; use with extreme caution + true allows non-atomic execution of CALL and DO + statements diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index 954828721740f..4c12aa33dfc00 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -64,6 +64,7 @@ #include "parser/parse_func.h" #include "parser/parse_type.h" #include "pgstat.h" +#include "tcop/pquery.h" #include "tcop/utility.h" #include "utils/acl.h" #include "utils/builtins.h" @@ -2319,6 +2320,20 @@ ExecuteCallStmt(CallStmt *stmt, ParamListInfo params, bool atomic, DestReceiver if (fcinfo->isnull) elog(ERROR, "procedure returned null record"); + /* + * Ensure there's an active snapshot whilst we execute whatever's + * involved here. Note that this is *not* sufficient to make the + * world safe for TOAST pointers to be included in the returned data: + * the referenced data could have gone away while we didn't hold a + * snapshot. Hence, it's incumbent on PLs that can do COMMIT/ROLLBACK + * to not return TOAST pointers, unless those pointers were fetched + * after the last COMMIT/ROLLBACK in the procedure. + * + * XXX that is a really nasty, hard-to-test requirement. Is there a + * way to remove it? + */ + EnsurePortalSnapshotExists(); + td = DatumGetHeapTupleHeader(retval); tupType = HeapTupleHeaderGetTypeId(td); tupTypmod = HeapTupleHeaderGetTypMod(td); diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c index 00aa78ea53993..b8bd05e894215 100644 --- a/src/backend/executor/spi.c +++ b/src/backend/executor/spi.c @@ -66,7 +66,7 @@ static void _SPI_prepare_oneshot_plan(const char *src, SPIPlanPtr plan); static int _SPI_execute_plan(SPIPlanPtr plan, ParamListInfo paramLI, Snapshot snapshot, Snapshot crosscheck_snapshot, - bool read_only, bool no_snapshots, + bool read_only, bool allow_nonatomic, bool fire_triggers, uint64 tcount, DestReceiver *caller_dest, ResourceOwner plan_owner); @@ -260,12 +260,8 @@ _SPI_commit(bool chain) /* Start the actual commit */ _SPI_current->internal_xact = true; - /* - * Before committing, pop all active snapshots to avoid error about - * "snapshot %p still active". - */ - while (ActiveSnapshotSet()) - PopActiveSnapshot(); + /* Release snapshots associated with portals */ + ForgetPortalSnapshots(); if (chain) SaveTransactionCharacteristics(); @@ -322,6 +318,9 @@ _SPI_rollback(bool chain) /* Start the actual rollback */ _SPI_current->internal_xact = true; + /* Release snapshots associated with portals */ + ForgetPortalSnapshots(); + if (chain) SaveTransactionCharacteristics(); @@ -567,7 +566,7 @@ SPI_execute_extended(const char *src, res = _SPI_execute_plan(&plan, options->params, InvalidSnapshot, InvalidSnapshot, - options->read_only, options->no_snapshots, + options->read_only, options->allow_nonatomic, true, options->tcount, options->dest, options->owner); @@ -627,7 +626,7 @@ SPI_execute_plan_extended(SPIPlanPtr plan, res = _SPI_execute_plan(plan, options->params, InvalidSnapshot, InvalidSnapshot, - options->read_only, options->no_snapshots, + options->read_only, options->allow_nonatomic, true, options->tcount, options->dest, options->owner); @@ -2264,7 +2263,7 @@ _SPI_prepare_oneshot_plan(const char *src, SPIPlanPtr plan) * behavior of taking a new snapshot for each query. * crosscheck_snapshot: for RI use, all others pass InvalidSnapshot * read_only: true for read-only execution (no CommandCounterIncrement) - * no_snapshots: true to skip snapshot management + * allow_nonatomic: true to allow nonatomic CALL/DO execution * fire_triggers: true to fire AFTER triggers at end of query (normal case); * false means any AFTER triggers are postponed to end of outer query * tcount: execution tuple-count limit, or 0 for none @@ -2275,7 +2274,7 @@ _SPI_prepare_oneshot_plan(const char *src, SPIPlanPtr plan) static int _SPI_execute_plan(SPIPlanPtr plan, ParamListInfo paramLI, Snapshot snapshot, Snapshot crosscheck_snapshot, - bool read_only, bool no_snapshots, + bool read_only, bool allow_nonatomic, bool fire_triggers, uint64 tcount, DestReceiver *caller_dest, ResourceOwner plan_owner) { @@ -2318,11 +2317,12 @@ _SPI_execute_plan(SPIPlanPtr plan, ParamListInfo paramLI, * In the first two cases, we can just push the snap onto the stack once * for the whole plan list. * - * But if no_snapshots is true, then don't manage snapshots at all here. - * The caller must then take care of that. + * Note that snapshot != InvalidSnapshot implies an atomic execution + * context. */ - if (snapshot != InvalidSnapshot && !no_snapshots) + if (snapshot != InvalidSnapshot) { + Assert(!allow_nonatomic); if (read_only) { PushActiveSnapshot(snapshot); @@ -2408,15 +2408,39 @@ _SPI_execute_plan(SPIPlanPtr plan, ParamListInfo paramLI, stmt_list = cplan->stmt_list; /* - * In the default non-read-only case, get a new snapshot, replacing - * any that we pushed in a previous cycle. + * If we weren't given a specific snapshot to use, and the statement + * list requires a snapshot, set that up. */ - if (snapshot == InvalidSnapshot && !read_only && !no_snapshots) + if (snapshot == InvalidSnapshot && + (list_length(stmt_list) > 1 || + (list_length(stmt_list) == 1 && + PlannedStmtRequiresSnapshot(linitial_node(PlannedStmt, + stmt_list))))) { - if (pushed_active_snap) - PopActiveSnapshot(); - PushActiveSnapshot(GetTransactionSnapshot()); - pushed_active_snap = true; + /* + * First, ensure there's a Portal-level snapshot. This back-fills + * the snapshot stack in case the previous operation was a COMMIT + * or ROLLBACK inside a procedure or DO block. (We can't put back + * the Portal snapshot any sooner, or we'd break cases like doing + * SET or LOCK just after COMMIT.) It's enough to check once per + * statement list, since COMMIT/ROLLBACK/CALL/DO can't appear + * within a multi-statement list. + */ + EnsurePortalSnapshotExists(); + + /* + * In the default non-read-only case, get a new per-statement-list + * snapshot, replacing any that we pushed in a previous cycle. + * Skip it when doing non-atomic execution, though (we rely + * entirely on the Portal snapshot in that case). + */ + if (!read_only && !allow_nonatomic) + { + if (pushed_active_snap) + PopActiveSnapshot(); + PushActiveSnapshot(GetTransactionSnapshot()); + pushed_active_snap = true; + } } foreach(lc2, stmt_list) @@ -2434,6 +2458,7 @@ _SPI_execute_plan(SPIPlanPtr plan, ParamListInfo paramLI, _SPI_current->processed = 0; _SPI_current->tuptable = NULL; + /* Check for unsupported cases. */ if (stmt->utilityStmt) { if (IsA(stmt->utilityStmt, CopyStmt)) @@ -2462,9 +2487,10 @@ _SPI_execute_plan(SPIPlanPtr plan, ParamListInfo paramLI, /* * If not read-only mode, advance the command counter before each - * command and update the snapshot. + * command and update the snapshot. (But skip it if the snapshot + * isn't under our control.) */ - if (!read_only && !no_snapshots) + if (!read_only && pushed_active_snap) { CommandCounterIncrement(); UpdateActiveSnapshotCommandId(); @@ -2507,13 +2533,11 @@ _SPI_execute_plan(SPIPlanPtr plan, ParamListInfo paramLI, QueryCompletion qc; /* - * If the SPI context is atomic, or we are asked to manage - * snapshots, then we are in an atomic execution context. - * Conversely, to propagate a nonatomic execution context, the - * caller must be in a nonatomic SPI context and manage - * snapshots itself. + * If the SPI context is atomic, or we were not told to allow + * nonatomic operations, tell ProcessUtility this is an atomic + * execution context. */ - if (_SPI_current->atomic || !no_snapshots) + if (_SPI_current->atomic || !allow_nonatomic) context = PROCESS_UTILITY_QUERY; else context = PROCESS_UTILITY_QUERY_NONATOMIC; diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 60bf7f7ee9c3a..452e5f3df7fd5 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -349,6 +349,13 @@ create_estate_for_relation(LogicalRepRelMapEntry *rel, EState *estate; RangeTblEntry *rte; + /* + * Input functions may need an active snapshot, as may AFTER triggers + * invoked during finish_estate. For safety, ensure an active snapshot + * exists throughout all our usage of the executor. + */ + PushActiveSnapshot(GetTransactionSnapshot()); + estate = CreateExecutorState(); rte = makeNode(RangeTblEntry); @@ -400,6 +407,7 @@ finish_estate(EState *estate) /* Cleanup. */ ExecResetTupleTable(estate->es_tupleTable, false); FreeExecutorState(estate); + PopActiveSnapshot(); } /* @@ -1212,9 +1220,6 @@ apply_handle_insert(StringInfo s) RelationGetDescr(rel->localrel), &TTSOpsVirtual); - /* Input functions may need an active snapshot, so get one */ - PushActiveSnapshot(GetTransactionSnapshot()); - /* Process and store remote tuple in the slot */ oldctx = MemoryContextSwitchTo(GetPerTupleMemoryContext(estate)); slot_store_data(remoteslot, rel, &newtup); @@ -1229,8 +1234,6 @@ apply_handle_insert(StringInfo s) apply_handle_insert_internal(resultRelInfo, estate, remoteslot); - PopActiveSnapshot(); - finish_estate(estate); logicalrep_rel_close(rel, NoLock); @@ -1358,8 +1361,6 @@ apply_handle_update(StringInfo s) /* Also populate extraUpdatedCols, in case we have generated columns */ fill_extraUpdatedCols(target_rte, rel->localrel); - PushActiveSnapshot(GetTransactionSnapshot()); - /* Build the search tuple. */ oldctx = MemoryContextSwitchTo(GetPerTupleMemoryContext(estate)); slot_store_data(remoteslot, rel, @@ -1374,8 +1375,6 @@ apply_handle_update(StringInfo s) apply_handle_update_internal(resultRelInfo, estate, remoteslot, &newtup, rel); - PopActiveSnapshot(); - finish_estate(estate); logicalrep_rel_close(rel, NoLock); @@ -1482,8 +1481,6 @@ apply_handle_delete(StringInfo s) RelationGetDescr(rel->localrel), &TTSOpsVirtual); - PushActiveSnapshot(GetTransactionSnapshot()); - /* Build the search tuple. */ oldctx = MemoryContextSwitchTo(GetPerTupleMemoryContext(estate)); slot_store_data(remoteslot, rel, &oldtup); @@ -1497,8 +1494,6 @@ apply_handle_delete(StringInfo s) apply_handle_delete_internal(resultRelInfo, estate, remoteslot, &rel->remoterel); - PopActiveSnapshot(); - finish_estate(estate); logicalrep_rel_close(rel, NoLock); @@ -1818,7 +1813,7 @@ apply_handle_truncate(StringInfo s) List *relids = NIL; List *relids_logged = NIL; ListCell *lc; - LOCKMODE lockmode = AccessExclusiveLock; + LOCKMODE lockmode = AccessExclusiveLock; if (handle_streamed_transaction(LOGICAL_REP_MSG_TRUNCATE, s)) return; diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c index 44f5fe8fc9d34..f7f08e6c05f8b 100644 --- a/src/backend/tcop/pquery.c +++ b/src/backend/tcop/pquery.c @@ -476,6 +476,13 @@ PortalStart(Portal portal, ParamListInfo params, else PushActiveSnapshot(GetTransactionSnapshot()); + /* + * We could remember the snapshot in portal->portalSnapshot, + * but presently there seems no need to, as this code path + * cannot be used for non-atomic execution. Hence there can't + * be any commit/abort that might destroy the snapshot. + */ + /* * Create QueryDesc in portal's context; for the moment, set * the destination to DestNone. @@ -1116,45 +1123,26 @@ PortalRunUtility(Portal portal, PlannedStmt *pstmt, bool isTopLevel, bool setHoldSnapshot, DestReceiver *dest, QueryCompletion *qc) { - Node *utilityStmt = pstmt->utilityStmt; - Snapshot snapshot; - /* - * Set snapshot if utility stmt needs one. Most reliable way to do this - * seems to be to enumerate those that do not need one; this is a short - * list. Transaction control, LOCK, and SET must *not* set a snapshot - * since they need to be executable at the start of a transaction-snapshot - * mode transaction without freezing a snapshot. By extension we allow - * SHOW not to set a snapshot. The other stmts listed are just efficiency - * hacks. Beware of listing anything that can modify the database --- if, - * say, it has to update an index with expressions that invoke - * user-defined functions, then it had better have a snapshot. + * Set snapshot if utility stmt needs one. */ - if (!(IsA(utilityStmt, TransactionStmt) || - IsA(utilityStmt, LockStmt) || - IsA(utilityStmt, VariableSetStmt) || - IsA(utilityStmt, VariableShowStmt) || - IsA(utilityStmt, ConstraintsSetStmt) || - /* efficiency hacks from here down */ - IsA(utilityStmt, FetchStmt) || - IsA(utilityStmt, ListenStmt) || - IsA(utilityStmt, NotifyStmt) || - IsA(utilityStmt, UnlistenStmt) || - IsA(utilityStmt, CheckPointStmt))) + if (PlannedStmtRequiresSnapshot(pstmt)) { - snapshot = GetTransactionSnapshot(); + Snapshot snapshot = GetTransactionSnapshot(); + /* If told to, register the snapshot we're using and save in portal */ if (setHoldSnapshot) { snapshot = RegisterSnapshot(snapshot); portal->holdSnapshot = snapshot; } + /* In any case, make the snapshot active and remember it in portal */ PushActiveSnapshot(snapshot); /* PushActiveSnapshot might have copied the snapshot */ - snapshot = GetActiveSnapshot(); + portal->portalSnapshot = GetActiveSnapshot(); } else - snapshot = NULL; + portal->portalSnapshot = NULL; ProcessUtility(pstmt, portal->sourceText, @@ -1168,13 +1156,17 @@ PortalRunUtility(Portal portal, PlannedStmt *pstmt, MemoryContextSwitchTo(portal->portalContext); /* - * Some utility commands may pop the ActiveSnapshot stack from under us, - * so be careful to only pop the stack if our snapshot is still at the - * top. + * Some utility commands (e.g., VACUUM) pop the ActiveSnapshot stack from + * under us, so don't complain if it's now empty. Otherwise, our snapshot + * should be the top one; pop it. Note that this could be a different + * snapshot from the one we made above; see EnsurePortalSnapshotExists. */ - if (snapshot != NULL && ActiveSnapshotSet() && - snapshot == GetActiveSnapshot()) + if (portal->portalSnapshot != NULL && ActiveSnapshotSet()) + { + Assert(portal->portalSnapshot == GetActiveSnapshot()); PopActiveSnapshot(); + } + portal->portalSnapshot = NULL; } /* @@ -1256,6 +1248,12 @@ PortalRunMulti(Portal portal, * from what holdSnapshot has.) */ PushCopiedSnapshot(snapshot); + + /* + * As for PORTAL_ONE_SELECT portals, it does not seem + * necessary to maintain portal->portalSnapshot here. + */ + active_snapshot_set = true; } else @@ -1692,3 +1690,78 @@ DoPortalRewind(Portal portal) portal->atEnd = false; portal->portalPos = 0; } + +/* + * PlannedStmtRequiresSnapshot - what it says on the tin + */ +bool +PlannedStmtRequiresSnapshot(PlannedStmt *pstmt) +{ + Node *utilityStmt = pstmt->utilityStmt; + + /* If it's not a utility statement, it definitely needs a snapshot */ + if (utilityStmt == NULL) + return true; + + /* + * Most utility statements need a snapshot, and the default presumption + * about new ones should be that they do too. Hence, enumerate those that + * do not need one. + * + * Transaction control, LOCK, and SET must *not* set a snapshot, since + * they need to be executable at the start of a transaction-snapshot-mode + * transaction without freezing a snapshot. By extension we allow SHOW + * not to set a snapshot. The other stmts listed are just efficiency + * hacks. Beware of listing anything that can modify the database --- if, + * say, it has to update an index with expressions that invoke + * user-defined functions, then it had better have a snapshot. + */ + if (IsA(utilityStmt, TransactionStmt) || + IsA(utilityStmt, LockStmt) || + IsA(utilityStmt, VariableSetStmt) || + IsA(utilityStmt, VariableShowStmt) || + IsA(utilityStmt, ConstraintsSetStmt) || + /* efficiency hacks from here down */ + IsA(utilityStmt, FetchStmt) || + IsA(utilityStmt, ListenStmt) || + IsA(utilityStmt, NotifyStmt) || + IsA(utilityStmt, UnlistenStmt) || + IsA(utilityStmt, CheckPointStmt)) + return false; + + return true; +} + +/* + * EnsurePortalSnapshotExists - recreate Portal-level snapshot, if needed + * + * Generally, we will have an active snapshot whenever we are executing + * inside a Portal, unless the Portal's query is one of the utility + * statements exempted from that rule (see PlannedStmtRequiresSnapshot). + * However, procedures and DO blocks can commit or abort the transaction, + * and thereby destroy all snapshots. This function can be called to + * re-establish the Portal-level snapshot when none exists. + */ +void +EnsurePortalSnapshotExists(void) +{ + Portal portal; + + /* + * Nothing to do if a snapshot is set. (We take it on faith that the + * outermost active snapshot belongs to some Portal; or if there is no + * Portal, it's somebody else's responsibility to manage things.) + */ + if (ActiveSnapshotSet()) + return; + + /* Otherwise, we'd better have an active Portal */ + portal = ActivePortal; + Assert(portal != NULL); + Assert(portal->portalSnapshot == NULL); + + /* Create a new snapshot and make it active */ + PushActiveSnapshot(GetTransactionSnapshot()); + /* PushActiveSnapshot might have copied the snapshot */ + portal->portalSnapshot = GetActiveSnapshot(); +} diff --git a/src/backend/utils/mmgr/portalmem.c b/src/backend/utils/mmgr/portalmem.c index 66e3181815687..5c30e141f52cf 100644 --- a/src/backend/utils/mmgr/portalmem.c +++ b/src/backend/utils/mmgr/portalmem.c @@ -502,6 +502,9 @@ PortalDrop(Portal portal, bool isTopCommit) portal->cleanup = NULL; } + /* There shouldn't be an active snapshot anymore, except after error */ + Assert(portal->portalSnapshot == NULL || !isTopCommit); + /* * Remove portal from hash table. Because we do this here, we will not * come back to try to remove the portal again if there's any error in the @@ -709,6 +712,8 @@ PreCommit_Portals(bool isPrepare) portal->holdSnapshot = NULL; } portal->resowner = NULL; + /* Clear portalSnapshot too, for cleanliness */ + portal->portalSnapshot = NULL; continue; } @@ -1278,3 +1283,54 @@ HoldPinnedPortals(void) } } } + +/* + * Drop the outer active snapshots for all portals, so that no snapshots + * remain active. + * + * Like HoldPinnedPortals, this must be called when initiating a COMMIT or + * ROLLBACK inside a procedure. This has to be separate from that since it + * should not be run until we're done with steps that are likely to fail. + * + * It's tempting to fold this into PreCommit_Portals, but to do so, we'd + * need to clean up snapshot management in VACUUM and perhaps other places. + */ +void +ForgetPortalSnapshots(void) +{ + HASH_SEQ_STATUS status; + PortalHashEnt *hentry; + int numPortalSnaps = 0; + int numActiveSnaps = 0; + + /* First, scan PortalHashTable and clear portalSnapshot fields */ + hash_seq_init(&status, PortalHashTable); + + while ((hentry = (PortalHashEnt *) hash_seq_search(&status)) != NULL) + { + Portal portal = hentry->portal; + + if (portal->portalSnapshot != NULL) + { + portal->portalSnapshot = NULL; + numPortalSnaps++; + } + /* portal->holdSnapshot will be cleaned up in PreCommit_Portals */ + } + + /* + * Now, pop all the active snapshots, which should be just those that were + * portal snapshots. Ideally we'd drive this directly off the portal + * scan, but there's no good way to visit the portals in the correct + * order. So just cross-check after the fact. + */ + while (ActiveSnapshotSet()) + { + PopActiveSnapshot(); + numActiveSnaps++; + } + + if (numPortalSnaps != numActiveSnaps) + elog(ERROR, "portal snapshots (%d) did not account for all active snapshots (%d)", + numPortalSnaps, numActiveSnaps); +} diff --git a/src/include/executor/spi.h b/src/include/executor/spi.h index 6455d100f5034..74e2e9405f754 100644 --- a/src/include/executor/spi.h +++ b/src/include/executor/spi.h @@ -47,7 +47,7 @@ typedef struct SPIExecuteOptions { ParamListInfo params; bool read_only; - bool no_snapshots; + bool allow_nonatomic; uint64 tcount; DestReceiver *dest; ResourceOwner owner; diff --git a/src/include/tcop/pquery.h b/src/include/tcop/pquery.h index ed2c4d374b010..2318f04ff06fb 100644 --- a/src/include/tcop/pquery.h +++ b/src/include/tcop/pquery.h @@ -17,6 +17,8 @@ #include "nodes/parsenodes.h" #include "utils/portal.h" +struct PlannedStmt; /* avoid including plannodes.h here */ + extern PGDLLIMPORT Portal ActivePortal; @@ -42,4 +44,8 @@ extern uint64 PortalRunFetch(Portal portal, long count, DestReceiver *dest); +extern bool PlannedStmtRequiresSnapshot(struct PlannedStmt *pstmt); + +extern void EnsurePortalSnapshotExists(void); + #endif /* PQUERY_H */ diff --git a/src/include/utils/portal.h b/src/include/utils/portal.h index 3c17b039cc9ba..2e5bbdd0ec488 100644 --- a/src/include/utils/portal.h +++ b/src/include/utils/portal.h @@ -160,6 +160,14 @@ typedef struct PortalData /* and these are the format codes to use for the columns: */ int16 *formats; /* a format code for each column */ + /* + * Outermost ActiveSnapshot for execution of the portal's queries. For + * all but a few utility commands, we require such a snapshot to exist. + * This ensures that TOAST references in query results can be detoasted, + * and helps to reduce thrashing of the process's exposed xmin. + */ + Snapshot portalSnapshot; /* active snapshot, or NULL if none */ + /* * Where we store tuples for a held cursor or a PORTAL_ONE_RETURNING or * PORTAL_UTIL_SELECT query. (A cursor held past the end of its @@ -237,5 +245,6 @@ extern void PortalCreateHoldStore(Portal portal); extern void PortalHashTableDeleteAll(void); extern bool ThereAreNoReadyPortals(void); extern void HoldPinnedPortals(void); +extern void ForgetPortalSnapshots(void); #endif /* PORTAL_H */ diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 27d6ea75517d2..4e705c162ac0b 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -2159,7 +2159,6 @@ exec_stmt_call(PLpgSQL_execstate *estate, PLpgSQL_stmt_call *stmt) PLpgSQL_expr *expr = stmt->expr; LocalTransactionId before_lxid; LocalTransactionId after_lxid; - bool pushed_active_snap = false; ParamListInfo paramLI; SPIExecuteOptions options; int rc; @@ -2189,27 +2188,17 @@ exec_stmt_call(PLpgSQL_execstate *estate, PLpgSQL_stmt_call *stmt) before_lxid = MyProc->lxid; - /* - * The procedure call could end transactions, which would upset the - * snapshot management in SPI_execute*, so handle snapshots here instead. - * Set a snapshot only for non-read-only procedures, similar to SPI - * behavior. - */ - if (!estate->readonly_func) - { - PushActiveSnapshot(GetTransactionSnapshot()); - pushed_active_snap = true; - } - /* * If we have a procedure-lifespan resowner, use that to hold the refcount * for the plan. This avoids refcount leakage complaints if the called * procedure ends the current transaction. + * + * Also, tell SPI to allow non-atomic execution. */ memset(&options, 0, sizeof(options)); options.params = paramLI; options.read_only = estate->readonly_func; - options.no_snapshots = true; /* disable SPI's snapshot management */ + options.allow_nonatomic = true; options.owner = estate->procedure_resowner; rc = SPI_execute_plan_extended(expr->plan, &options); @@ -2220,17 +2209,7 @@ exec_stmt_call(PLpgSQL_execstate *estate, PLpgSQL_stmt_call *stmt) after_lxid = MyProc->lxid; - if (before_lxid == after_lxid) - { - /* - * If we are still in the same transaction after the call, pop the - * snapshot that we might have pushed. (If it's a new transaction, - * then all the snapshots are gone already.) - */ - if (pushed_active_snap) - PopActiveSnapshot(); - } - else + if (before_lxid != after_lxid) { /* * If we are in a new transaction after the call, we need to build new @@ -4954,6 +4933,7 @@ exec_stmt_rollback(PLpgSQL_execstate *estate, PLpgSQL_stmt_rollback *stmt) * * We just parse and execute the statement normally, but we have to do it * without setting a snapshot, for things like SET TRANSACTION. + * XXX spi.c now handles this correctly, so we no longer need a special case. */ static int exec_stmt_set(PLpgSQL_execstate *estate, PLpgSQL_stmt_set *stmt) @@ -4967,7 +4947,6 @@ exec_stmt_set(PLpgSQL_execstate *estate, PLpgSQL_stmt_set *stmt) memset(&options, 0, sizeof(options)); options.read_only = estate->readonly_func; - options.no_snapshots = true; /* disable SPI's snapshot management */ rc = SPI_execute_plan_extended(expr->plan, &options); diff --git a/src/test/isolation/expected/plpgsql-toast.out b/src/test/isolation/expected/plpgsql-toast.out index 4f216b94b6228..213bddad4fde1 100644 --- a/src/test/isolation/expected/plpgsql-toast.out +++ b/src/test/isolation/expected/plpgsql-toast.out @@ -235,3 +235,30 @@ s1: NOTICE: length(r) = 6002 s1: NOTICE: length(r) = 9002 s1: NOTICE: length(r) = 12002 step assign6: <... completed> + +starting permutation: fetch-after-commit +pg_advisory_unlock_all + + +pg_advisory_unlock_all + + +s1: NOTICE: length(t) = 6000 +s1: NOTICE: length(t) = 9000 +s1: NOTICE: length(t) = 12000 +step fetch-after-commit: +do $$ + declare + r record; + t text; + begin + insert into test1 values (2, repeat('bar', 3000)); + insert into test1 values (3, repeat('baz', 4000)); + for r in select test1.a from test1 loop + commit; + select b into t from test1 where a = r.a; + raise notice 'length(t) = %', length(t); + end loop; + end; +$$; + diff --git a/src/test/isolation/specs/plpgsql-toast.spec b/src/test/isolation/specs/plpgsql-toast.spec index d360f8fccbf9f..fb40588d4f01e 100644 --- a/src/test/isolation/specs/plpgsql-toast.spec +++ b/src/test/isolation/specs/plpgsql-toast.spec @@ -131,6 +131,26 @@ do $$ $$; } +# Check that the results of a query can be detoasted just after committing +# (there's no interaction with VACUUM here) +step "fetch-after-commit" +{ +do $$ + declare + r record; + t text; + begin + insert into test1 values (2, repeat('bar', 3000)); + insert into test1 values (3, repeat('baz', 4000)); + for r in select test1.a from test1 loop + commit; + select b into t from test1 where a = r.a; + raise notice 'length(t) = %', length(t); + end loop; + end; +$$; +} + session "s2" setup { @@ -155,3 +175,4 @@ permutation "lock" "assign3" "vacuum" "unlock" permutation "lock" "assign4" "vacuum" "unlock" permutation "lock" "assign5" "vacuum" "unlock" permutation "lock" "assign6" "vacuum" "unlock" +permutation "fetch-after-commit" From 2b0ee126bbf01cbfd657bd53c94f9284ba903ca2 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 21 May 2021 15:02:06 -0400 Subject: [PATCH 343/671] Fix usage of "tableoid" in GENERATED expressions. We consider this supported (though I've got my doubts that it's a good idea, because tableoid is not immutable). However, several code paths failed to fill the field in soon enough, causing such a GENERATED expression to see zero or the wrong value. This occurred when ALTER TABLE adds a new GENERATED column to a table with existing rows, and during regular INSERT or UPDATE on a foreign table with GENERATED columns. Noted during investigation of a report from Vitaly Ustinov. Back-patch to v12 where GENERATED came in. Discussion: https://postgr.es/m/CAM_DEiWR2DPT6U4xb-Ehigozzd3n3G37ZB1+867zbsEVtYoJww@mail.gmail.com --- src/backend/commands/tablecmds.c | 13 ++++++++----- src/backend/executor/nodeModifyTable.c | 24 ++++++++++++++++++------ src/test/regress/expected/generated.out | 13 ++++++++----- src/test/regress/sql/generated.sql | 5 ++++- 4 files changed, 38 insertions(+), 17 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index ebc62034d26e9..85dcc330638aa 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -5761,6 +5761,14 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode) foreach(lc, dropped_attrs) newslot->tts_isnull[lfirst_int(lc)] = true; + /* + * Constraints and GENERATED expressions might reference the + * tableoid column, so fill tts_tableOid with the desired + * value. (We must do this each time, because it gets + * overwritten with newrel's OID during storing.) + */ + newslot->tts_tableOid = RelationGetRelid(oldrel); + /* * Process supplied expressions to replace selected columns. * @@ -5804,11 +5812,6 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode) &newslot->tts_isnull[ex->attnum - 1]); } - /* - * Constraints might reference the tableoid column, so - * initialize t_tableOid before evaluating them. - */ - newslot->tts_tableOid = RelationGetRelid(oldrel); insertslot = newslot; } else diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 0816027f7f7c7..379b05631050c 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -658,6 +658,12 @@ ExecInsert(ModifyTableState *mtstate, } else if (resultRelInfo->ri_FdwRoutine) { + /* + * GENERATED expressions might reference the tableoid column, so + * (re-)initialize tts_tableOid before evaluating them. + */ + slot->tts_tableOid = RelationGetRelid(resultRelInfo->ri_RelationDesc); + /* * Compute stored generated columns */ @@ -729,7 +735,7 @@ ExecInsert(ModifyTableState *mtstate, /* * AFTER ROW Triggers or RETURNING expressions might reference the * tableoid column, so (re-)initialize tts_tableOid before evaluating - * them. + * them. (This covers the case where the FDW replaced the slot.) */ slot->tts_tableOid = RelationGetRelid(resultRelInfo->ri_RelationDesc); } @@ -738,8 +744,8 @@ ExecInsert(ModifyTableState *mtstate, WCOKind wco_kind; /* - * Constraints might reference the tableoid column, so (re-)initialize - * tts_tableOid before evaluating them. + * Constraints and GENERATED expressions might reference the tableoid + * column, so (re-)initialize tts_tableOid before evaluating them. */ slot->tts_tableOid = RelationGetRelid(resultRelationDesc); @@ -1629,6 +1635,12 @@ ExecUpdate(ModifyTableState *mtstate, } else if (resultRelInfo->ri_FdwRoutine) { + /* + * GENERATED expressions might reference the tableoid column, so + * (re-)initialize tts_tableOid before evaluating them. + */ + slot->tts_tableOid = RelationGetRelid(resultRelInfo->ri_RelationDesc); + /* * Compute stored generated columns */ @@ -1651,7 +1663,7 @@ ExecUpdate(ModifyTableState *mtstate, /* * AFTER ROW Triggers or RETURNING expressions might reference the * tableoid column, so (re-)initialize tts_tableOid before evaluating - * them. + * them. (This covers the case where the FDW replaced the slot.) */ slot->tts_tableOid = RelationGetRelid(resultRelationDesc); } @@ -1662,8 +1674,8 @@ ExecUpdate(ModifyTableState *mtstate, bool update_indexes; /* - * Constraints might reference the tableoid column, so (re-)initialize - * tts_tableOid before evaluating them. + * Constraints and GENERATED expressions might reference the tableoid + * column, so (re-)initialize tts_tableOid before evaluating them. */ slot->tts_tableOid = RelationGetRelid(resultRelationDesc); diff --git a/src/test/regress/expected/generated.out b/src/test/regress/expected/generated.out index 675773f0c1f28..71542e95d5f0a 100644 --- a/src/test/regress/expected/generated.out +++ b/src/test/regress/expected/generated.out @@ -64,6 +64,7 @@ ERROR: both identity and generation expression specified for column "b" of tabl LINE 1: ...t PRIMARY KEY, b int GENERATED ALWAYS AS identity GENERATED ... ^ -- reference to system column not allowed in generated column +-- (except tableoid, which we test below) CREATE TABLE gtest_err_6a (a int PRIMARY KEY, b bool GENERATED ALWAYS AS (xmin <> 37) STORED); ERROR: cannot use system column "xmin" in column generation expression LINE 1: ...a (a int PRIMARY KEY, b bool GENERATED ALWAYS AS (xmin <> 37... @@ -455,14 +456,16 @@ DROP TYPE double_int; -- using tableoid is allowed CREATE TABLE gtest_tableoid ( a int PRIMARY KEY, - b bool GENERATED ALWAYS AS (tableoid <> 0) STORED + b bool GENERATED ALWAYS AS (tableoid = 'gtest_tableoid'::regclass) STORED ); INSERT INTO gtest_tableoid VALUES (1), (2); +ALTER TABLE gtest_tableoid ADD COLUMN + c regclass GENERATED ALWAYS AS (tableoid) STORED; SELECT * FROM gtest_tableoid; - a | b ----+--- - 1 | t - 2 | t + a | b | c +---+---+---------------- + 1 | t | gtest_tableoid + 2 | t | gtest_tableoid (2 rows) -- drop column behavior diff --git a/src/test/regress/sql/generated.sql b/src/test/regress/sql/generated.sql index 63251c443a968..914197608b749 100644 --- a/src/test/regress/sql/generated.sql +++ b/src/test/regress/sql/generated.sql @@ -29,6 +29,7 @@ CREATE TABLE gtest_err_5a (a int PRIMARY KEY, b int DEFAULT 5 GENERATED ALWAYS A CREATE TABLE gtest_err_5b (a int PRIMARY KEY, b int GENERATED ALWAYS AS identity GENERATED ALWAYS AS (a * 2) STORED); -- reference to system column not allowed in generated column +-- (except tableoid, which we test below) CREATE TABLE gtest_err_6a (a int PRIMARY KEY, b bool GENERATED ALWAYS AS (xmin <> 37) STORED); -- various prohibited constructs @@ -218,9 +219,11 @@ DROP TYPE double_int; -- using tableoid is allowed CREATE TABLE gtest_tableoid ( a int PRIMARY KEY, - b bool GENERATED ALWAYS AS (tableoid <> 0) STORED + b bool GENERATED ALWAYS AS (tableoid = 'gtest_tableoid'::regclass) STORED ); INSERT INTO gtest_tableoid VALUES (1), (2); +ALTER TABLE gtest_tableoid ADD COLUMN + c regclass GENERATED ALWAYS AS (tableoid) STORED; SELECT * FROM gtest_tableoid; -- drop column behavior From 4b10074453d182b5fc11a5667bab2ef8532ff3a6 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 21 May 2021 15:12:08 -0400 Subject: [PATCH 344/671] Disallow whole-row variables in GENERATED expressions. This was previously allowed, but I think that was just an oversight. It's a clear violation of the rule that a generated column cannot depend on itself or other generated columns. Moreover, because the code was relying on the assumption that no such cross-references exist, it was pretty easy to crash ALTER TABLE and perhaps other places. Even if you managed not to crash, you got quite unstable, implementation-dependent results. Per report from Vitaly Ustinov. Back-patch to v12 where GENERATED came in. Discussion: https://postgr.es/m/CAM_DEiWR2DPT6U4xb-Ehigozzd3n3G37ZB1+867zbsEVtYoJww@mail.gmail.com --- src/backend/catalog/heap.c | 15 +++++++++++++-- src/test/regress/expected/generated.out | 7 +++++++ src/test/regress/sql/generated.sql | 3 +++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 431e62e389726..ba3e1ecf459bd 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -3020,15 +3020,26 @@ check_nested_generated_walker(Node *node, void *context) AttrNumber attnum; relid = rt_fetch(var->varno, pstate->p_rtable)->relid; + if (!OidIsValid(relid)) + return false; /* XXX shouldn't we raise an error? */ + attnum = var->varattno; - if (OidIsValid(relid) && AttributeNumberIsValid(attnum) && get_attgenerated(relid, attnum)) + if (attnum > 0 && get_attgenerated(relid, attnum)) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), errmsg("cannot use generated column \"%s\" in column generation expression", get_attname(relid, attnum, false)), errdetail("A generated column cannot reference another generated column."), parser_errposition(pstate, var->location))); + /* A whole-row Var is necessarily self-referential, so forbid it */ + if (attnum == 0) + ereport(ERROR, + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("cannot use whole-row variable in column generation expression"), + errdetail("This would cause the generated column to depend on its own value."), + parser_errposition(pstate, var->location))); + /* System columns were already checked in the parser */ return false; } diff --git a/src/test/regress/expected/generated.out b/src/test/regress/expected/generated.out index 71542e95d5f0a..c2e5676196b1a 100644 --- a/src/test/regress/expected/generated.out +++ b/src/test/regress/expected/generated.out @@ -46,6 +46,13 @@ ERROR: cannot use generated column "b" in column generation expression LINE 1: ...AYS AS (a * 2) STORED, c int GENERATED ALWAYS AS (b * 3) STO... ^ DETAIL: A generated column cannot reference another generated column. +-- a whole-row var is a self-reference on steroids, so disallow that too +CREATE TABLE gtest_err_2c (a int PRIMARY KEY, + b int GENERATED ALWAYS AS (num_nulls(gtest_err_2c)) STORED); +ERROR: cannot use whole-row variable in column generation expression +LINE 2: b int GENERATED ALWAYS AS (num_nulls(gtest_err_2c)) STOR... + ^ +DETAIL: This would cause the generated column to depend on its own value. -- invalid reference CREATE TABLE gtest_err_3 (a int PRIMARY KEY, b int GENERATED ALWAYS AS (c * 2) STORED); ERROR: column "c" does not exist diff --git a/src/test/regress/sql/generated.sql b/src/test/regress/sql/generated.sql index 914197608b749..b7eb072671e3c 100644 --- a/src/test/regress/sql/generated.sql +++ b/src/test/regress/sql/generated.sql @@ -17,6 +17,9 @@ CREATE TABLE gtest_err_1 (a int PRIMARY KEY, b int GENERATED ALWAYS AS (a * 2) S -- references to other generated columns, including self-references CREATE TABLE gtest_err_2a (a int PRIMARY KEY, b int GENERATED ALWAYS AS (b * 2) STORED); CREATE TABLE gtest_err_2b (a int PRIMARY KEY, b int GENERATED ALWAYS AS (a * 2) STORED, c int GENERATED ALWAYS AS (b * 3) STORED); +-- a whole-row var is a self-reference on steroids, so disallow that too +CREATE TABLE gtest_err_2c (a int PRIMARY KEY, + b int GENERATED ALWAYS AS (num_nulls(gtest_err_2c)) STORED); -- invalid reference CREATE TABLE gtest_err_3 (a int PRIMARY KEY, b int GENERATED ALWAYS AS (c * 2) STORED); From 55370f8db96c8416940ad0b05be7a00a9f059a9f Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 21 May 2021 16:16:56 -0400 Subject: [PATCH 345/671] doc: more XML markup for PG 14 release notes --- doc/src/sgml/release-14.sgml | 265 ++++++++++++++++++----------------- 1 file changed, 134 insertions(+), 131 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index c23e4a45891d6..b1d19cf95b50f 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -91,7 +91,7 @@ Author: Alexander Korotkov --> -Fix to_tsquery() and websearch_to_tsquery() to properly parse query text containing discarded tokens (Alexander Korotkov) +Fix to_tsquery() and websearch_to_tsquery() to properly parse query text containing discarded tokens (Alexander Korotkov) @@ -107,7 +107,7 @@ Author: Alexander Korotkov --> -Fix websearch_to_tsquery() to properly parse multiple adjacent discarded tokens in quotes (Alexander Korotkov) +Fix websearch_to_tsquery() to properly parse multiple adjacent discarded tokens in quotes (Alexander Korotkov) @@ -141,7 +141,7 @@ Author: Bruce Momjian --> -Overhaul the specification of clientcert in pg_hba.conf (Kyotaro Horiguchi) +Overhaul the specification of clientcert in pg_hba.conf (Kyotaro Horiguchi) @@ -159,7 +159,7 @@ Author: Michael Paquier --> -Remove support for SSL compression (Daniel Gustafsson, Michael Paquier) +Remove support for SSL compression (Daniel Gustafsson, Michael Paquier) @@ -189,7 +189,7 @@ Author: Peter Eisentraut --> -Change EXTRACT to return the NUMERIC data type (Peter Eisentraut) +Change EXTRACT to return the NUMERIC data type (Peter Eisentraut) @@ -234,7 +234,7 @@ Author: Tom Lane --> -Change var_samp() and stddev_samp() with numeric parameters to return NULL for a single NaN value (Tom Lane) +Change var_samp() and stddev_samp() with numeric parameters to return NULL for a single NaN value (Tom Lane) @@ -253,7 +253,7 @@ Remove factorial operators ! and !! (Mark -The factorial() function is still supported. Also remove function numeric_fac(). +The factorial() function is still supported. Also remove function numeric_fac(). @@ -367,7 +367,7 @@ Author: Joe Conway --> -Return false for has_column_privilege() checks on non-existent or dropped columns when using attribute numbers (Joe Conway) +Return false for has_column_privilege() checks on non-existent or dropped columns when using attribute numbers (Joe Conway) @@ -399,7 +399,7 @@ Author: Peter Eisentraut --> -Disallow single-quoting of the language name in the CREATE/DROP LANGUAGE command (Peter Eisentraut) +Disallow single-quoting of the language name in the CREATE/DROP LANGUAGE command (Peter Eisentraut) @@ -465,7 +465,7 @@ Author: Stephen Frost --> -Add predefined roles pg_read_all_data and pg_write_all_data (Stephen Frost) +Add predefined roles pg_read_all_data and pg_write_all_data (Stephen Frost) @@ -484,7 +484,7 @@ Add a predefined role to match the database owner (Noah Misch) -It is called pg_database_owner; this is useful in template databases. +It is called pg_database_owner; this is useful in template databases. @@ -499,7 +499,7 @@ Remove temporary files after backend crashes (Euler Taveira) -These files were previously retained for debugging purposes; deletion can be disabled with remove_temp_files_after_crash. +These files were previously retained for debugging purposes; deletion can be disabled with . @@ -514,7 +514,7 @@ Allow long-running queries to be canceled if the client disconnects (Sergey Cher -The server variable client_connection_check_interval allows some supported operating systems to automatically cancel queries by disconnected clients. +The server variable allows some supported operating systems to automatically cancel queries by disconnected clients. @@ -525,11 +525,11 @@ Author: Magnus Hagander --> -Add function pg_wait_for_backend_termination() that waits for session exit (Bharath Rupireddy) +Add function pg_wait_for_backend_termination() that waits for session exit (Bharath Rupireddy) -Also add a similar optional wait parameter to pg_terminate_backend(). +Also add a similar optional wait parameter to pg_terminate_backend() @@ -544,7 +544,7 @@ Allow wide tuples to be always added to almost-empty heap pages (John Naylor, Fl -Previously tuples whose insertion would have exceeded the page's fill factor were instead added to new pages. +Previously tuples whose insertion would have exceeded the page's fill factor were instead added to new pages. @@ -559,14 +559,14 @@ Add Set Server Name Indication (SNI) for SSL -This can be disabled by turning off client option "sslsni". +This can be disabled by turning off client option sslsni. - Vacuuming + <link linkend="routine-vacuuming">Vacuuming</link> @@ -588,11 +588,11 @@ Author: Peter Geoghegan --> -Allow VACUUM to eagerly add newly deleted btree pages to the free space map (Peter Geoghegan) +Allow vacuum to eagerly add newly deleted btree pages to the free space map (Peter Geoghegan) -Previously VACUUM could only place preexisting deleted pages in the free space map. +Previously vacuum could only place preexisting deleted pages in the free space map. @@ -625,7 +625,7 @@ Author: Peter Geoghegan --> -Reduce the default value of vacuum_cost_page_miss (Peter Geoghegan) +Reduce the default value of from 10 milliseconds to 2 (Peter Geoghegan) @@ -644,7 +644,8 @@ Add ability to skip vacuuming of TOAST tables (Nathan Bossart -VACUUM now has a PROCESS_TOAST which can be set to false to disable TOAST processing, and vacuumdb has a option. +VACUUM now has a PROCESS_TOAST which can be set to false to disable TOAST processing, and +vacuumdb has a option. @@ -655,7 +656,7 @@ Author: Tomas Vondra --> -Have COPY FREEZE appropriately update page visibility bits (Anastasia Lubennikova, Pavan Deolasee, Jeff Janes) +Have COPY FREEZE appropriately update page visibility bits (Anastasia Lubennikova, Pavan Deolasee, Jeff Janes) @@ -670,7 +671,7 @@ Cause vacuum operations to be aggressive if the table is near xid or multixact w -This is controlled by vacuum_failsafe_age and vacuum_multixact_failsafe_age. +This is controlled by and . @@ -696,7 +697,7 @@ Author: Alvaro Herrera --> -Autovacuum now analyzes partitioned tables (Yuzuko Hosoya, Álvaro Herrera) +Autovacuum now analyzes partitioned tables (Yuzuko Hosoya, Álvaro Herrera) @@ -711,7 +712,7 @@ Author: Michael Paquier --> -Add per-index information to autovacuum logging output (Masahiko Sawada) +Add per-index information to autovacuum logging output (Masahiko Sawada) @@ -749,7 +750,7 @@ Author: Alvaro Herrera --> -Allow partitions to be detached in a non-blocking manner (Álvaro Herrera) +Allow partitions to be detached in a non-blocking manner (Álvaro Herrera) @@ -790,7 +791,7 @@ Author: Peter Geoghegan --> -Allow btree index additions to remove expired index entries to prevent page splits (Peter Geoghegan) +Allow btree index additions to remove expired index entries to prevent page splits (Peter Geoghegan) @@ -805,7 +806,7 @@ Author: Tomas Vondra --> -Allow BRIN indexes to record multiple min/max values per range (Tomas Vondra) +Allow BRIN indexes to record multiple min/max values per range (Tomas Vondra) @@ -835,7 +836,7 @@ Author: Heikki Linnakangas --> -Allow some GiST indexes to be built by presorting the data (Andrey Borodin) +Allow some GiST indexes to be built by presorting the data (Andrey Borodin) @@ -850,7 +851,7 @@ Author: Tom Lane --> -Allow SP-GiST to use INCLUDE'd columns (Pavel Borisov) +Allow SP-GiST to use INCLUDE'd columns (Pavel Borisov) @@ -889,7 +890,7 @@ Author: Dean Rasheed --> -Increase the number of places extended statistics can be used for OR clause estimation (Tomas Vondra, Dean Rasheed) +Increase the number of places extended statistics can be used for OR clause estimation (Tomas Vondra, Dean Rasheed) @@ -904,8 +905,8 @@ Allow extended statistics on expressions (Tomas Vondra) -This allows statistics on a group of expressions and columns, rather than only columns like previously. System view pg_stats_ext_exprs reports such statistics. -ALTER TABLE ... ALTER COLUMN ... TYPE RESETS STASTISTICS? +This allows statistics on a group of expressions and columns, rather than only columns like previously. System view pg_stats_ext_exprs +reports such statistics. ALTER TABLE ... ALTER COLUMN ... TYPE RESETS STASTISTICS? @@ -916,11 +917,11 @@ Author: David Rowley --> -Allow efficient heap scanning of a range of tids (Edmund Horner, David Rowley) +Allow efficient heap scanning of a range of TIDs (Edmund Horner, David Rowley) -Previously a sequential scan was required for non-equality tid specifications. +Previously a sequential scan was required for non-equality TID specifications. @@ -931,7 +932,7 @@ Author: Michael Paquier --> -Fix EXPLAIN CREATE TABLE AS and EXPLAIN CREATE MATERIALIZED VIEW to honor IF NOT EXISTS (Bharath Rupireddy) +Fix EXPLAIN CREATE TABLE AS and EXPLAIN CREATE MATERIALIZED VIEW to honor IF NOT EXISTS (Bharath Rupireddy) @@ -965,7 +966,7 @@ Author: Andres Freund --> -Improve the speed of computing MVCC visibility snapshots on systems with many CPUs and high session counts (Andres Freund) +Improve the speed of computing MVCC visibility snapshots on systems with many CPUs and high session counts (Andres Freund) @@ -995,7 +996,7 @@ Author: David Rowley --> -Allow window functions to perform incremental sorts (David Rowley) +Allow window functions to perform incremental sorts (David Rowley) @@ -1010,7 +1011,7 @@ Improve the I/O performance of parallel sequential scans (Thomas Munro, David Ro -This was done by allocating blocks in groups to parallel workers. +This was done by allocating blocks in groups to parallel workers. @@ -1021,11 +1022,11 @@ Author: Etsuro Fujita --> -Allow a query referencing multiple foreign tables to perform foreign table scans in parallel (Robert Haas, Kyotaro Horiguchi, Thomas Munro, Etsuro Fujita) +Allow a query referencing multiple foreign tables to perform foreign table scans in parallel (Robert Haas, Kyotaro Horiguchi, Thomas Munro, Etsuro Fujita) -The postgres_fdw supports these type of scans if async_capable is set. +The postgres_fdw supports these type of scans if async_capable is set. @@ -1036,11 +1037,11 @@ Author: Stephen Frost --> -Allow analyze to do page prefetching (Stephen Frost) +Allow analyze to do page prefetching (Stephen Frost) -This is controlled by maintenance_io_concurrency. +This is controlled by . @@ -1071,7 +1072,7 @@ Author: Tom Lane --> -Improve the performance of regular expression comparisons (Tom Lane) +Improve the performance of regular expression comparisons (Tom Lane) @@ -1088,7 +1089,7 @@ Dramatically improve Unicode normalization (John Naylor) -This speeds normalize() and IS NORMALIZED. +This speeds normalize() and IS NORMALIZED. @@ -1099,11 +1100,11 @@ Author: Robert Haas --> -Add ability to use LZ4 compression on TOAST data (Dilip Kumar) +Add ability to use LZ4 compression on TOAST data (Dilip Kumar) -This can be set at the column level, or set as a default via server setting default_toast_compression. The server must be compiled with to support this feature; the default is still pglz. +This can be set at the column level, or set as a default via server setting . The server must be compiled with to support this feature; the default is still pglz. @@ -1131,7 +1132,9 @@ Author: Alvaro Herrera --> -If server variable compute_query_id is enabled, display the query id in pg_stat_activity, EXPLAIN VERBOSE, csvlog, and optionally in log_line_prefix (Julien Rouhaud) +If server variable is enabled, display the query id in pg_stat_activity, +EXPLAIN VERBOSE, csvlog, and optionally in +(Julien Rouhaud) @@ -1148,7 +1151,7 @@ Author: Fujii Masao --> -Add system view pg_backend_memory_contexts to report session memory usage (Atsushi Torikoshi, Fujii Masao) +Add system view pg_backend_memory_contexts to report session memory usage (Atsushi Torikoshi, Fujii Masao) @@ -1159,7 +1162,7 @@ Author: Fujii Masao --> -Add function pg_log_backend_memory_contexts() to output the memory contexts of arbitrary backends (Atsushi Torikoshi) +Add function pg_log_backend_memory_contexts() to output the memory contexts of arbitrary backends (Atsushi Torikoshi) @@ -1170,11 +1173,11 @@ Author: Stephen Frost --> -Improve logging of auto-vacuum and auto-analyze (Stephen Frost, Jakub Wartak) +Improve logging of auto-vacuum and auto-analyze (Stephen Frost, Jakub Wartak) -This reports I/O timings for auto-vacuum and auto-analyze if track_io_timing is enabled. Also, report buffer read and dirty rates for auto-analyze. +This reports I/O timings for auto-vacuum and auto-analyze if is enabled. Also, report buffer read and dirty rates for auto-analyze. @@ -1185,7 +1188,7 @@ Author: Michael Paquier --> -Add information about the original user name supplied by the client to the output of log_connections (Jacob Champion) +Add information about the original user name supplied by the client to the output of (Jacob Champion) @@ -1207,7 +1210,7 @@ Author: Michael Paquier --> -Add view pg_stat_progress_copy to report COPY progress (Josef Šimánek, Matthias van de Meent) +Add view pg_stat_progress_copy to report COPY progress (Josef Šimánek, Matthias van de Meent) @@ -1218,7 +1221,7 @@ Author: Magnus Hagander --> -Add session statistics to the pg_stat_database system view (Laurenz Albe) +Add session statistics to the pg_stat_database system view (Laurenz Albe) @@ -1229,7 +1232,7 @@ Author: Fujii Masao --> -Add columns to pg_prepared_statements to report generic and custom plan counts (Atsushi Torikoshi, Kyotaro Horiguchi) +Add columns to pg_prepared_statements to report generic and custom plan counts (Atsushi Torikoshi, Kyotaro Horiguchi) @@ -1240,7 +1243,7 @@ Author: Fujii Masao --> -Add lock wait start time to pg_locks (Atsushi Torikoshi) +Add lock wait start time to pg_locks (Atsushi Torikoshi) @@ -1255,7 +1258,7 @@ Author: Fujii Masao --> -Add system view pg_stat_wal which reports WAL activity (Masahiro Ikeda) +Add system view pg_stat_wal which reports WAL activity (Masahiro Ikeda) @@ -1272,11 +1275,11 @@ Author: Amit Kapila --> -Add system view pg_stat_replication_slots to report replication slot activity (Sawada Masahiko, Amit Kapila, Vignesh C) +Add system view pg_stat_replication_slots to report replication slot activity (Sawada Masahiko, Amit Kapila, Vignesh C) -Function pg_stat_reset_replication_slot() resets slot statistics. +Function pg_stat_reset_replication_slot() resets slot statistics. @@ -1287,7 +1290,7 @@ Author: Tom Lane --> -Improve pg_stat_activity reporting of walsender processes (Tom Lane) +Improve pg_stat_activity reporting of walsender processes (Tom Lane) @@ -1313,7 +1316,7 @@ Author: Fujii Masao --> -Add wait event WalReceiverExit to report WAL receiver exit wait time (Fujii Masao) +Add wait event WalReceiverExit to report WAL receiver exit wait time (Fujii Masao) @@ -1324,7 +1327,7 @@ Author: Peter Eisentraut --> -Implement information schema view routine_column_usage to track columns referenced by function and procedure default expressions (Peter Eisentraut) +Implement information schema view routine_column_usage to track columns referenced by function and procedure default expressions (Peter Eisentraut) @@ -1348,7 +1351,7 @@ Allow the certificate's distinguished name (DN) to be matched -The new pg_hba.conf keyword clientname=DN allows comparison with certificate attributes beyond the CN and can be combined with ident maps. +The new pg_hba.conf keyword clientname=DN allows comparison with certificate attributes beyond the CN and can be combined with ident maps. @@ -1359,7 +1362,7 @@ Author: Tom Lane --> -Allow pg_hba.conf and pg_ident.conf records to span multiple lines (Fabien Coelho) +Allow pg_hba.conf and pg_ident.conf records to span multiple lines (Fabien Coelho) @@ -1378,7 +1381,7 @@ Allow the specification of a certificate revocation list (CRL -This is controlled by server variable ssl_crl_dir and libpq connection option sslcrldir. Previously only CRL files could be specified. +This is controlled by server variable and libpq connection option sslcrldir. Previously only CRL files could be specified. @@ -1409,11 +1412,11 @@ Author: Tom Lane --> -Add server setting idle_session_timeout to close idle sessions (Li Japin) +Add server setting to close idle sessions (Li Japin) -This is similar to idle_in_transaction_session_timeout. +This is similar to . @@ -1424,7 +1427,7 @@ Author: Stephen Frost --> -Change checkpoint_completion_target default to 0.9 (Stephen Frost) +Change default to 0.9 (Stephen Frost) @@ -1439,7 +1442,7 @@ Author: Michael Paquier --> -Allow %P in log_line_prefix to report the parallel group leader (Justin Pryzby) +Allow %P in to report the parallel group leader (Justin Pryzby) @@ -1450,7 +1453,7 @@ Author: Michael Paquier --> -Allow unix_socket_directories to specify paths as individual, comma-separated quoted strings (Ian Lawrence Barwick) +Allow to specify paths as individual, comma-separated quoted strings (Ian Lawrence Barwick) @@ -1469,7 +1472,7 @@ Allow startup allocation of dynamic shared memory (Thomas Munro) -This is controlled by min_dynamic_shared_memory. This allows more use of huge pages. +This is controlled by . This allows more use of huge pages. @@ -1480,7 +1483,7 @@ Author: Thomas Munro --> -Add setting huge_page_size to control the size of huge pages used on Linux (Odin Ugedal) +Add setting to control the size of huge pages used on Linux (Odin Ugedal) @@ -1502,7 +1505,7 @@ Author: Heikki Linnakangas --> -Allow standby servers to be rewound via pg_rewind (Heikki Linnakangas) +Allow standby servers to be rewound via pg_rewind (Heikki Linnakangas) @@ -1513,11 +1516,11 @@ Author: Fujii Masao --> -Allow restore_command setting to be changed during a server reload (Sergei Kornilov) +Allow setting to be changed during a server reload (Sergei Kornilov) -You can also set restore_command to an empty string and reload to force recovery to only read from the pg_wal directory. +You can also set restore_command to an empty string and reload to force recovery to only read from the pg_wal directory. @@ -1530,7 +1533,7 @@ Author: Fujii Masao --> -Add server variable log_recovery_conflict_waits to report long recovery conflict wait times (Bertrand Drouvot, Masahiko Sawada) +Add server variable to report long recovery conflict wait times (Bertrand Drouvot, Masahiko Sawada) @@ -1556,11 +1559,11 @@ Author: Robert Haas --> -Add function pg_get_wal_replay_pause_state() to report the recovery state (Dilip Kumar) +Add function pg_get_wal_replay_pause_state() to report the recovery state (Dilip Kumar) -It gives more detailed information than pg_is_wal_replay_paused(), which still exists. +It gives more detailed information than pg_is_wal_replay_paused(), which still exists. @@ -1571,7 +1574,7 @@ Author: Tom Lane --> -Add new server-side variable in_hot_standby (Haribabu Kommi, Greg Nancarrow, Tom Lane) +Add new server-side variable (Haribabu Kommi, Greg Nancarrow, Tom Lane) @@ -1598,7 +1601,7 @@ Allow file system sync at the start of crash recovery on Linux (Thomas Munro) By default, Postgres opens and fsyncs every data file at the start of crash recovery. -This new setting, recovery_init_sync_method=syncfs, instead syncs each filesystem used by the database cluster. +This new setting, =syncfs, instead syncs each filesystem used by the database cluster. This allows for faster recovery on systems with many database files. @@ -1610,7 +1613,7 @@ Author: Michael Paquier --> -Add function pg_xact_commit_timestamp_origin() to return the commit timestamp and replication origin of the specified transaction (Movead Li) +Add function pg_xact_commit_timestamp_origin() to return the commit timestamp and replication origin of the specified transaction (Movead Li) @@ -1621,7 +1624,7 @@ Author: Michael Paquier --> -Add the replication origin to the record returned by pg_last_committed_xact() (Movead Li) +Add the replication origin to the record returned by pg_last_committed_xact() (Movead Li) @@ -1632,7 +1635,7 @@ Author: Michael Paquier --> -Allow replication origin functions to be controlled using standard function permission controls (Martín Marqués) +Allow replication origin functions to be controlled using standard function permission controls (Martín Marqués) @@ -1659,7 +1662,7 @@ GENERAL ENOUGH? - Logical Replication + <link linkend="logical-replication">Logical Replication</link> @@ -1680,7 +1683,7 @@ Allow logical replication to stream long in-progress transactions to subscribers -Previously transactions that exceeded logical_decoding_work_mem were written to disk until the transaction completed. +Previously transactions that exceeded were written to disk until the transaction completed. @@ -1695,7 +1698,7 @@ Enhance the logical replication API to allow streaming large -The output functions begin with stream. test_decoding also supports these. +The output functions begin with stream. test_decoding also supports these. @@ -1740,7 +1743,7 @@ Enhance logical decoding APIs to handle two-phase commits (Ajin Cherian, Amit Ka -This is controlled via pg_create_logical_replication_slot(). +This is controlled via pg_create_logical_replication_slot(). @@ -1770,7 +1773,7 @@ Allow logical decoding to more efficiently process cache invalidation messages ( -This allows Logical decoding to work efficiently in presence of a large amount of DDL. +This allows logical decoding to work efficiently in presence of a large amount of DDL. @@ -1817,7 +1820,7 @@ Allow logical decoding to be filtered by xid (Markus Wanner) - <command>SELECT</command>, <command>INSERT</command> + <link linkend="sql-select"><command>SELECT</command></link>, <link linkend="sql-insert"><command>INSERT</command></link> @@ -1890,7 +1893,7 @@ Author: Peter Eisentraut --> -Add SQL-standard SEARCH and CYCLE clauses for common table expressions (Peter Eisentraut) +Add SQL-standard SEARCH and CYCLE clauses for common table expressions (Peter Eisentraut) @@ -1929,7 +1932,7 @@ Author: Thomas Munro --> -Allow REFRESH MATERIALIZED VIEW to use parallelism (Bharath Rupireddy) +Allow REFRESH MATERIALIZED VIEW to use parallelism (Bharath Rupireddy) @@ -1940,7 +1943,7 @@ Author: Michael Paquier --> -Allow REINDEX to change the tablespace of the new index (Alexey Kondratov, Michael Paquier, Justin Pryzby) +Allow REINDEX to change the tablespace of the new index (Alexey Kondratov, Michael Paquier, Justin Pryzby) @@ -1966,7 +1969,7 @@ Author: Tom Lane --> -Improve the performance of COPY FROM in binary mode (Bharath Rupireddy, Amit Langote) +Improve the performance of COPY FROM in binary mode (Bharath Rupireddy, Amit Langote) @@ -1977,11 +1980,11 @@ Author: Tom Lane --> -Preserve SQL standard syntax in view definitions, if possible (Tom Lane) +Preserve SQL standard syntax in view definitions, if possible (Tom Lane) -Previously non-function call SQL standard syntax, e.g. EXTRACT, were converted to non-SQL standard function calls. +Previously non-function call SQL standard syntax, e.g. EXTRACT, were converted to non-SQL standard function calls. @@ -1992,7 +1995,7 @@ Author: Peter Eisentraut --> -Add the SQL-standard clause GRANTED BY to GRANT and REVOKE (Peter Eisentraut) +Add the SQL-standard clause GRANTED BY to GRANT and REVOKE (Peter Eisentraut) @@ -2003,7 +2006,7 @@ Author: Tom Lane --> -Add OR REPLACE for CREATE TRIGGER (Takamichi Osumi) +Add OR REPLACE for CREATE TRIGGER (Takamichi Osumi) @@ -2011,21 +2014,6 @@ This allows pre-existing triggers to be conditionally replaced. - - - - -Allow control over whether foreign servers keep connections open after transaction completion (Bharath Rupireddy) - - - -This is controlled by keep_connections and defaults to on. - - - -Allow TRUNCATE to operate on foreign tables (Kazutaka Onishi, Kohei KaiGai) +Allow TRUNCATE to operate on foreign tables (Kazutaka Onishi, Kohei KaiGai) -The postgres_fdw module also now supports this. +The postgres_fdw module also now supports this. @@ -2052,7 +2040,7 @@ Allow publications to be more easily added and removed (Japin Li) -The new syntax is ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION. This avoids having to specify all publications to add/remove entries. +The new syntax is ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION. This avoids having to specify all publications to add/remove entries. @@ -2065,7 +2053,7 @@ Author: Tom Lane --> -Add primary keys, unique constraints, and foreign keys to system catalogs (Peter Eisentraut) +Add primary keys, unique constraints, and foreign keys to system catalogs (Peter Eisentraut) @@ -2080,7 +2068,7 @@ Author: Peter Eisentraut --> -Allow CURRENT_ROLE every place CURRENT_USER is accepted (Peter Eisentraut) +Allow CURRENT_ROLE every place CURRENT_USER is accepted (Peter Eisentraut) @@ -2100,7 +2088,7 @@ Author: Tom Lane --> -Allow extensions and built-in data types to implement subscripting (Dmitry Dolgov) +Allow extensions and built-in data types to implement subscripting (Dmitry Dolgov) @@ -2120,7 +2108,7 @@ Author: Alexander Korotkov --> -Allow subscripting of JSONB (Dmitry Dolgov) +Allow subscripting of JSONB (Dmitry Dolgov) @@ -2139,7 +2127,7 @@ Author: Alexander Korotkov --> -Add support for multirange data types (Paul Jungwirth, Alexander Korotkov) +Add support for multirange data types (Paul Jungwirth, Alexander Korotkov) @@ -2155,7 +2143,7 @@ Author: Tom Lane --> -Add point operators <<| and |>> to be strictly above/below geometry (Emre Hasegeli) +Add point operators <<| and |>> to be strictly above/below geometry (Emre Hasegeli) @@ -2174,7 +2162,7 @@ Author: Peter Eisentraut --> -Add support for the stemming of languages Armenian, Basque, Catalan, Hindi, Serbian, and Yiddish (Peter Eisentraut) +Add support for the stemming of languages Armenian, Basque, Catalan, Hindi, Serbian, and Yiddish (Peter Eisentraut) @@ -2185,7 +2173,7 @@ Author: Tom Lane --> -Allow tsearch data files to have unlimited line lengths (Tom Lane) +Allow tsearch data files to have unlimited line lengths (Tom Lane) @@ -2200,7 +2188,7 @@ Author: Tom Lane --> -Add support for infinity and -infinity values to the numeric data type (Tom Lane) +Add support for infinity and -infinity values to the numeric data type (Tom Lane) @@ -2226,7 +2214,7 @@ Author: Tom Lane --> -Have non-zero float values divided by infinity return zero (Kyotaro Horiguchi) +Have non-zero float values divided by infinity return zero (Kyotaro Horiguchi) @@ -2256,7 +2244,7 @@ Author: Fujii Masao --> -Add operators to add and subtract LSN and numeric (byte) values (Fujii Masao) +Add operators to add and subtract LSN and numeric (byte) values (Fujii Masao) @@ -2267,7 +2255,7 @@ Author: Tom Lane --> -Allow binary data transfer to be more forgiving of array and record OID mismatches (Tom Lane) +Allow binary data transfer to be more forgiving of array and record OID mismatches (Tom Lane) @@ -3427,11 +3415,15 @@ Add postgres_fdw function postgres_fdw_get_connection -Add postgres_fdw functions to discard cached connections (Bharath Rupireddy) +Allow control over whether foreign servers keep connections open after transaction completion (Bharath Rupireddy) + + + +This is controlled by keep_connections and defaults to on. @@ -3450,6 +3442,17 @@ Allow postgres_fdw to reestablish foreign server conn Previously foreign server restarts could cause foreign table access errors. + + + + + + +Add postgres_fdw functions to discard cached connections (Bharath Rupireddy) + From 0cdaa05b40e9f28e5d6d58ccd06fe19f3cd920c9 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 21 May 2021 20:51:53 -0400 Subject: [PATCH 346/671] doc: complete adding XML markup to PG 14 relnotes --- doc/src/sgml/release-14.sgml | 245 ++++++++++++++++++----------------- 1 file changed, 129 insertions(+), 116 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index b1d19cf95b50f..3de5d053dfac1 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -2286,7 +2286,7 @@ Author: Peter Eisentraut --> -Allow SQL-language functions and procedures to use SQL-standard function bodies (Peter Eisentraut) +Allow SQL-language functions and procedures to use SQL-standard function bodies (Peter Eisentraut) @@ -2303,7 +2303,7 @@ Author: Peter Eisentraut --> -Allow procedures to have OUT parameters (Peter Eisentraut) +Allow procedures to have OUT parameters (Peter Eisentraut) @@ -2318,7 +2318,9 @@ Allow some array functions to operate on a mix of compatible data types (Tom Lan -The functions are array_append() array_prepend(), array_cat(), array_position(), array_positions(), array_remove(), array_replace(), and width_bucket(). Previously only identical data types could be used. +The functions are array_append(), array_prepend(), array_cat(), array_position(), +array_positions(), array_remove(), array_replace(), and +width_bucket(). Previously only identical data types could be used. @@ -2329,7 +2331,7 @@ Author: Tom Lane --> -Add SQL-standard trim_array() function (Vik Fearing) +Add SQL-standard trim_array() function (Vik Fearing) @@ -2344,7 +2346,7 @@ Author: Tom Lane --> -Add bytea equivalents of ltrim() and rtrim() (Joel Jacobson) +Add bytea equivalents of ltrim() and rtrim() (Joel Jacobson) @@ -2355,7 +2357,7 @@ Author: Tom Lane --> -Support negative indexes in split_part() (Nikhil Benesch) +Support negative indexes in split_part() (Nikhil Benesch) @@ -2370,11 +2372,11 @@ Author: Tom Lane --> -A string_to_table() function to split a string on delimiters (Pavel Stehule) +Add string_to_table() function to split a string on delimiters (Pavel Stehule) -This is similar to the regexp_split_to_table() function. +This is similar to the regexp_split_to_table() function. @@ -2385,7 +2387,7 @@ Author: Peter Eisentraut --> -Add unistr() function to allow Unicode characters to be specified as backslash-hex escapes in strings (Pavel Stehule) +Add unistr() function to allow Unicode characters to be specified as backslash-hex escapes in strings (Pavel Stehule) @@ -2400,7 +2402,7 @@ Author: Peter Eisentraut --> -Add bit_xor() XOR aggregate function (Alexey Bashtanov) +Add bit_xor() XOR aggregate function (Alexey Bashtanov) @@ -2411,7 +2413,7 @@ Author: Peter Eisentraut --> -Add function bit_count() to return the number of bits set in a bit or byte string (David Fetter) +Add function bit_count() to return the number of bits set in a bit or byte string (David Fetter) @@ -2424,7 +2426,7 @@ Author: Peter Eisentraut --> -Add date_bin() function (John Naylor) +Add date_bin() function (John Naylor) @@ -2439,7 +2441,7 @@ Author: Tom Lane --> -Allow make_timestamp()/make_timestamptz() to accept negative years (Peter Eisentraut) +Allow make_timestamp()/make_timestamptz() to accept negative years (Peter Eisentraut) @@ -2454,7 +2456,7 @@ Author: Peter Eisentraut --> -Add newer regular expression substring() syntax (Peter Eisentraut) +Add newer regular expression substring() syntax (Peter Eisentraut) @@ -2469,7 +2471,7 @@ Author: Tom Lane --> -Allow complemented character class escapes \D, \S, and \W within regex brackets (Tom Lane) +Allow complemented character class escapes \D, \S, and \W within regex brackets (Tom Lane) @@ -2480,7 +2482,7 @@ Author: Tom Lane --> -Add [[:word:]] as a character class to match \w (Tom Lane) +Add [[:word:]] as a character class to match \w (Tom Lane) @@ -2491,7 +2493,7 @@ Author: Tom Lane --> -Allow more flexible data types for default values of lead() and lag() window functions (Vik Fearing) +Allow more flexible data types for default values of lead() and lag() window functions (Vik Fearing) @@ -2506,7 +2508,7 @@ Author: Tom Lane --> -Cause exp() and power() for negative-infinity exponents to return zero (Tom Lane) +Cause exp() and power() for negative-infinity exponents to return zero (Tom Lane) @@ -2540,7 +2542,7 @@ Mark pg_stat_get_subscription() as returning a set (Tom Lan -While it worked in previous releases, it didn't report proper optimizer statistics and couldn't be used in the target list. +While it worked in previous releases, it didn't report proper optimizer statistics and couldn't be used in the target list. FUNCTION NOT DOCUMENTED. @@ -2551,7 +2553,7 @@ Author: Tom Lane --> -Prevent inet_server_addr() and inet_server_port() from being run by parallel workers (Masahiko Sawada) +Prevent inet_server_addr() and inet_server_port() from being run by parallel workers (Masahiko Sawada) @@ -2562,7 +2564,8 @@ Author: Michael Paquier --> -Change pg_describe_object(), pg_identify_object(), and pg_identify_object_as_address() to always report helpful error messages for non-existent objects (Michael Paquier) +Change pg_describe_object(), pg_identify_object(), and +pg_identify_object_as_address() to always report helpful error messages for non-existent objects (Michael Paquier) @@ -2582,7 +2585,7 @@ Author: Tom Lane --> -Improve PL/pgSQL's expression and assignment parsing (Tom Lane) +Improve PL/pgSQL's expression and assignment parsing (Tom Lane) @@ -2597,7 +2600,7 @@ Author: Tom Lane --> -Allow plpgsql's RETURN QUERY to execute its query using parallelism (Tom Lane) +Allow plpgsql's RETURN QUERY to execute its query using parallelism (Tom Lane) @@ -2608,7 +2611,7 @@ Author: Tom Lane --> -Improve performance of repeated CALLs within plpgsql procedures (Pavel Stehule, Tom Lane) +Improve performance of repeated CALLs within plpgsql procedures (Pavel Stehule, Tom Lane) @@ -2628,7 +2631,7 @@ Author: Alvaro Herrera --> -Add pipeline mode to libpq (Craig Ringer, Matthieu Garrigues, Álvaro Herrera) +Add pipeline mode to libpq (Craig Ringer, Matthieu Garrigues, Álvaro Herrera) @@ -2645,7 +2648,7 @@ Author: Tom Lane --> -Enhance libpq's parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane) +Enhance libpq's parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane) @@ -2660,7 +2663,7 @@ Author: Alvaro Herrera --> -Improve the output format of libpq's PQtrace() (Aya Iwata, Álvaro Herrera) +Improve the output format of libpq's PQtrace() (Aya Iwata, Álvaro Herrera) @@ -2671,7 +2674,7 @@ Author: Tom Lane --> -Allow libpq service files to have unlimited line lengths (Daniel Gustafsson) +Allow the libpq service file to have unlimited line lengths (Daniel Gustafsson) @@ -2690,7 +2693,7 @@ Allow an ECPG SQL identifier to be linked to a specific conne -This is done via DECLARE ... STATEMENT. +This is done via DECLARE ... STATEMENT. @@ -2710,7 +2713,7 @@ Author: Michael Paquier --> -Allow reindexdb to change the tablespace of the new index (Michael Paquier) +Allow reindexdb to change the tablespace of the new index (Michael Paquier) @@ -2725,7 +2728,7 @@ Author: Michael Paquier --> -Allow vacuumdb to skip index cleanup and truncation (Nathan Bossart) +Allow vacuumdb to skip index cleanup and truncation (Nathan Bossart) @@ -2740,7 +2743,7 @@ Author: Michael Paquier --> -Allow pg_dump to dump only certain extensions (Guillaume Lelarge) +Allow pg_dump to dump only certain extensions (Guillaume Lelarge) @@ -2755,7 +2758,7 @@ Author: Dean Rasheed --> -Add pgbench permute() function to randomly shuffle values (Fabien Coelho, Hironobu Suzuki, Dean Rasheed) +Add pgbench permute() function to randomly shuffle values (Fabien Coelho, Hironobu Suzuki, Dean Rasheed) @@ -2770,7 +2773,8 @@ Allow multiple verbose option specifications () to increase t -This is now supported by pg_dump, pg_dumpall, and pg_restore. +This is now supported by pg_dump, pg_dumpall, +and pg_restore. @@ -2933,7 +2937,7 @@ Author: Robert Haas --> -Add command-line utility pg_amcheck to simplify running contrib/amcheck operations on many relations (Mark Dilger) +Add command-line utility pg_amcheck to simplify running contrib/amcheck operations on many relations (Mark Dilger) @@ -2944,7 +2948,7 @@ Author: Magnus Hagander --> -Add option to initdb (Magnus Hagander) +Add option to initdb (Magnus Hagander) @@ -2959,11 +2963,11 @@ Author: Magnus Hagander --> -Stop pg_upgrade from creating analyze_new_cluster script (Michael Paquier) +Stop pg_upgrade from creating analyze_new_cluster script (Michael Paquier) -Instead, give comparable vacuumdb instructions. +Instead, give comparable vacuumdb instructions. @@ -2974,7 +2978,7 @@ Author: Magnus Hagander --> -Remove support for the postmaster option (Magnus Hagander) +Remove support for the postmaster option (Magnus Hagander) @@ -2998,7 +3002,7 @@ Author: Stephen Frost --> -Rename Default Roles to Predefined Roles (Bruce Momjian, Stephen Frost) +Rename "Default Roles" to "Predefined Roles" (Bruce Momjian, Stephen Frost) @@ -3009,7 +3013,7 @@ Author: Peter Eisentraut --> -Add documentation for the factorial() function (Peter Eisentraut) +Add documentation for the factorial() function (Peter Eisentraut) @@ -3033,7 +3037,7 @@ Author: Michael Paquier --> -Add configure option --with-ssl={openssl} to behave like (Daniel Gustafsson, Michael Paquier) +Add configure option --with-ssl={openssl} to behave like (Daniel Gustafsson, Michael Paquier) @@ -3048,11 +3052,11 @@ Author: Peter Eisentraut --> -Add support for abstract Unix-domain sockets (Peter Eisentraut) +Add support for abstract Unix-domain sockets (Peter Eisentraut) -This is currently supported on Linux and Windows. +This is currently supported on Linux and Windows. @@ -3063,7 +3067,7 @@ Author: Peter Eisentraut --> -Add debug_invalidate_system_caches_always to control cache overwriting (Craig Ringer) +Add to control cache overwriting (Craig Ringer) @@ -3082,7 +3086,7 @@ Author: Peter Geoghegan --> -Various improvements in valgrind detection (Álvaro Herrera, Peter Geoghegan) +Various improvements in valgrind detection (Álvaro Herrera, Peter Geoghegan) @@ -3121,7 +3125,7 @@ Author: Michael Paquier --> -Change SHA1, SHA2, and MD5 hash computations to use the OpenSSL EVP API (Michael Paquier) +Change SHA1, SHA2, and MD5 hash computations to use the OpenSSL EVP API (Michael Paquier) @@ -3147,7 +3151,7 @@ Author: Heikki Linnakangas --> -Add direct conversion routines between EUC_TW and Big5 (Heikki Linnakangas) +Add direct conversion routines between EUC_TW and Big5 (Heikki Linnakangas) @@ -3158,7 +3162,7 @@ Author: Thomas Munro --> -Add collation versions for FreeBSD (Thomas Munro) +Add collation versions for FreeBSD (Thomas Munro) @@ -3169,7 +3173,7 @@ Author: Tom Lane --> -Add "amadjustmembers" to the index access method API (Tom Lane) +Add amadjustmembers to the index access method API (Tom Lane) @@ -3188,188 +3192,197 @@ REMOVE? -Move query hash computation from pg_stat_statements to the core server (Julien Rouhaud) - - - -The new server variable compute_query_id's default of 'auto' will automatically enable query id computation when this extension is loaded. +Allow subscripting of hstore values (Tom Lane, Dmitry Dolgov) -Allow pg_stat_statements to track top and nested statements independently (Julien Rohaud) +Allow GiST/GIN pg_trgm indexes to do equality lookups (Julien Rouhaud) -Previously, when tracking all statements, identical top and nested statements were tracked together. - - - - - - - -Add row counts for utility commands to pg_stat_statements> (Fujii Masao, Katsuragi Yuta, Seino Yuki) +This is similar to LIKE except no wildcards are honored. -Add pg_stat_statements_info system view to show pg_stat_statements activity (Katsuragi Yuta, Yuki Seino, Naoki Nakamichi) +Allow the cube data type to be transferred in binary mode (KaiGai Kohei) -Allow subscripting of hstore values (Tom Lane, Dmitry Dolgov) +Allow pgstattuple_approx() to report on TOAST tables (Peter Eisentraut) -Allow GiST/GIN pg_trgm indexes to do equality lookups (Julien Rouhaud) +Add contrib module pg_surgery which allows changes to row visibility (Ashutosh Sharma) -This is similar to LIKE except no wildcards are honored. +This is useful for correcting database corruption. -Allow the cube data type to be transferred in binary mode (KaiGai Kohei) +Add contrib module old_snapshot to report the XID/time mapping used by an active (Robert Haas) -Add contrib module pg_surgery which allows changes to row visibility (Ashutosh Sharma) +Allow amcheck to also check heap pages (Mark Dilger) -This is useful for correcting database corruption. +Previously it only checked B-Tree index pages. -Add contrib module old_snapshot to report the XID/time mapping used by an active old_snapshot_threshold (Robert Haas) +Allow pageinspect to inspect GiST indexes (Andrey Borodin, Heikki Linnakangas) -Allow amcheck to also check heap pages (Mark Dilger) +Change pageinspect block numbers to be bigints (Peter Eisentraut) + + + + -Previously it only checked B-Tree index pages. +Mark btree_gist functions as parallel safe (Steven Winfield) + + + + <link linkend="pgstatstatements">pg_stat_statements</link> + + + -Allow pageinspect to inspect GiST indexes (Andrey Borodin, Heikki Linnakangas) +Move query hash computation from pg_stat_statements to the core server (Julien Rouhaud) + + + +The new server variable 's default of auto will automatically enable query id computation when this extension is loaded. -Change pageinspect block numbers to be bigints (Peter Eisentraut) +Allow pg_stat_statements to track top and nested statements independently (Julien Rohaud) + + + +Previously, when tracking all statements, identical top and nested statements were tracked together. -Allow pgstattuple_approx() to report on TOAST tables (Peter Eisentraut) +Add row counts for utility commands to pg_stat_statements> (Fujii Masao, Katsuragi Yuta, Seino Yuki) -Mark btree_gist functions as parallel safe (Steven Winfield) +Add pg_stat_statements_info system view to show pg_stat_statements activity (Katsuragi Yuta, Yuki Seino, Naoki Nakamichi) + + - postgres_fdw + <link linkend="postgres-fdw"><application>postgres_fdw</application></link> @@ -3393,7 +3406,7 @@ Author: Fujii Masao --> -Allow postgres_fdw to import table partitions if specified by IMPORT FOREIGN SCHEMA ... LIMIT TO (Matthias van de Meent) +Allow postgres_fdw to import table partitions if specified by IMPORT FOREIGN SCHEMA ... LIMIT TO (Matthias van de Meent) @@ -3408,7 +3421,7 @@ Author: Fujii Masao --> -Add postgres_fdw function postgres_fdw_get_connections to report open foreign server connections (Bharath Rupireddy) +Add postgres_fdw function postgres_fdw_get_connections() to report open foreign server connections (Bharath Rupireddy) From 9e215378d7fbb7d4615be917917c52f246cc6c61 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Sat, 22 May 2021 16:22:27 +1200 Subject: [PATCH 347/671] Fix planner's use of Result Cache with unique joins When the planner considered using a Result Cache node to cache results from the inner side of a Nested Loop Join, it failed to consider that the inner path's parameterization may not be the entire join condition. If the join was marked as inner_unique then we may accidentally put the cache in singlerow mode. This meant that entries would be marked as complete after caching the first row. That was wrong as if only part of the join condition was parameterized then the uniqueness of the unique join was not guaranteed at the Result Cache's level. The uniqueness is only guaranteed after Nested Loop applies the join filter. If subsequent rows were found, this would lead to: ERROR: cache entry already complete This could have been fixed by only putting the cache in singlerow mode if the entire join condition was parameterized. However, Nested Loop will only read its inner side so far as the first matching row when the join is unique, so that might mean we never get an opportunity to mark cache entries as complete. Since non-complete cache entries are useless for subsequent lookups, we just don't bother considering a Result Cache path in this case. In passing, remove the XXX comment that claimed the above ERROR might be better suited to be an Assert. After there being an actual case which triggered it, it seems better to keep it an ERROR. Reported-by: David Christensen Discussion: https://postgr.es/m/CAOxo6X+dy-V58iEPFgst8ahPKEU+38NZzUuc+a7wDBZd4TrHMQ@mail.gmail.com --- src/backend/executor/nodeResultCache.c | 2 +- src/backend/optimizer/path/joinpath.c | 31 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/backend/executor/nodeResultCache.c b/src/backend/executor/nodeResultCache.c index 919238d1ff195..471900346f119 100644 --- a/src/backend/executor/nodeResultCache.c +++ b/src/backend/executor/nodeResultCache.c @@ -760,7 +760,7 @@ ExecResultCache(PlanState *pstate) /* * Validate if the planner properly set the singlerow flag. It * should only set that if each cache entry can, at most, - * return 1 row. XXX maybe this should be an Assert? + * return 1 row. */ if (unlikely(entry->complete)) elog(ERROR, "cache entry already complete"); diff --git a/src/backend/optimizer/path/joinpath.c b/src/backend/optimizer/path/joinpath.c index 4c30c6556409d..d9d48827a9ab8 100644 --- a/src/backend/optimizer/path/joinpath.c +++ b/src/backend/optimizer/path/joinpath.c @@ -503,6 +503,37 @@ get_resultcache_path(PlannerInfo *root, RelOptInfo *innerrel, jointype == JOIN_ANTI)) return NULL; + /* + * Result Cache normally marks cache entries as complete when it runs out + * of tuples to read from its subplan. However, with unique joins, Nested + * Loop will skip to the next outer tuple after finding the first matching + * inner tuple. This means that we may not read the inner side of the + * join to completion which leaves no opportunity to mark the cache entry + * as complete. To work around that, when the join is unique we + * automatically mark cache entries as complete after fetching the first + * tuple. This works when the entire join condition is parameterized. + * Otherwise, when the parameterization is only a subset of the join + * condition, we can't be sure which part of it causes the join to be + * unique. This means there are no guarantees that only 1 tuple will be + * read. We cannot mark the cache entry as complete after reading the + * first tuple without that guarantee. This means the scope of Result + * Cache's usefulness is limited to only outer rows that have no join + * partner as this is the only case where Nested Loop would exhaust the + * inner scan of a unique join. Since the scope is limited to that, we + * just don't bother making a result cache path in this case. + * + * Lateral vars needn't be considered here as they're not considered when + * determining if the join is unique. + * + * XXX this could be enabled if the remaining join quals were made part of + * the inner scan's filter instead of the join filter. Maybe it's worth + * considering doing that? + */ + if (extra->inner_unique && + list_length(inner_path->param_info->ppi_clauses) < + list_length(extra->restrictlist)) + return NULL; + /* * We can't use a result cache if there are volatile functions in the * inner rel's target list or restrict list. A cache hit could reduce the From 30168be8f75b95183abccf48f0da7a64a0cfbd9f Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 22 May 2021 10:25:36 -0400 Subject: [PATCH 348/671] Remove plpgsql's special-case code paths for SET/RESET. In the wake of 84f5c2908, it's no longer necessary for plpgsql to handle SET/RESET specially. The point of that was just to avoid taking a new transaction snapshot prematurely, which the regular code path through _SPI_execute_plan() now does just fine (in fact better, since it now does the right thing for LOCK too). Hence, rip out a few lines of code, going back to the old way of treating SET/RESET as a generic SQL command. This essentially reverts all but the test cases from b981275b6. Discussion: https://postgr.es/m/15990-eee2ac466b11293d@postgresql.org --- .../src/expected/plpgsql_transaction.out | 2 +- src/pl/plpgsql/src/pl_exec.c | 37 ------------------- src/pl/plpgsql/src/pl_funcs.c | 23 ------------ src/pl/plpgsql/src/pl_gram.y | 36 +----------------- src/pl/plpgsql/src/pl_unreserved_kwlist.h | 2 - src/pl/plpgsql/src/plpgsql.h | 14 +------ 6 files changed, 3 insertions(+), 111 deletions(-) diff --git a/src/pl/plpgsql/src/expected/plpgsql_transaction.out b/src/pl/plpgsql/src/expected/plpgsql_transaction.out index e205a1e00227c..8fceb88c9bb14 100644 --- a/src/pl/plpgsql/src/expected/plpgsql_transaction.out +++ b/src/pl/plpgsql/src/expected/plpgsql_transaction.out @@ -497,7 +497,7 @@ END; $$; ERROR: SET TRANSACTION ISOLATION LEVEL must be called before any query CONTEXT: SQL statement "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ" -PL/pgSQL function inline_code_block line 3 at SET +PL/pgSQL function inline_code_block line 3 at SQL statement DO LANGUAGE plpgsql $$ BEGIN SAVEPOINT foo; diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 4e705c162ac0b..78b593d12c7ce 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -317,8 +317,6 @@ static int exec_stmt_commit(PLpgSQL_execstate *estate, PLpgSQL_stmt_commit *stmt); static int exec_stmt_rollback(PLpgSQL_execstate *estate, PLpgSQL_stmt_rollback *stmt); -static int exec_stmt_set(PLpgSQL_execstate *estate, - PLpgSQL_stmt_set *stmt); static void plpgsql_estate_setup(PLpgSQL_execstate *estate, PLpgSQL_function *func, @@ -2088,10 +2086,6 @@ exec_stmts(PLpgSQL_execstate *estate, List *stmts) rc = exec_stmt_rollback(estate, (PLpgSQL_stmt_rollback *) stmt); break; - case PLPGSQL_STMT_SET: - rc = exec_stmt_set(estate, (PLpgSQL_stmt_set *) stmt); - break; - default: /* point err_stmt to parent, since this one seems corrupt */ estate->err_stmt = save_estmt; @@ -4926,37 +4920,6 @@ exec_stmt_rollback(PLpgSQL_execstate *estate, PLpgSQL_stmt_rollback *stmt) return PLPGSQL_RC_OK; } -/* - * exec_stmt_set - * - * Execute SET/RESET statement. - * - * We just parse and execute the statement normally, but we have to do it - * without setting a snapshot, for things like SET TRANSACTION. - * XXX spi.c now handles this correctly, so we no longer need a special case. - */ -static int -exec_stmt_set(PLpgSQL_execstate *estate, PLpgSQL_stmt_set *stmt) -{ - PLpgSQL_expr *expr = stmt->expr; - SPIExecuteOptions options; - int rc; - - if (expr->plan == NULL) - exec_prepare_plan(estate, expr, 0); - - memset(&options, 0, sizeof(options)); - options.read_only = estate->readonly_func; - - rc = SPI_execute_plan_extended(expr->plan, &options); - - if (rc != SPI_OK_UTILITY) - elog(ERROR, "SPI_execute_plan_extended failed executing query \"%s\": %s", - expr->query, SPI_result_code_string(rc)); - - return PLPGSQL_RC_OK; -} - /* ---------- * exec_assign_expr Put an expression's result into a variable. * ---------- diff --git a/src/pl/plpgsql/src/pl_funcs.c b/src/pl/plpgsql/src/pl_funcs.c index 919b968826c04..e0863acb3d1f3 100644 --- a/src/pl/plpgsql/src/pl_funcs.c +++ b/src/pl/plpgsql/src/pl_funcs.c @@ -288,8 +288,6 @@ plpgsql_stmt_typename(PLpgSQL_stmt *stmt) return "COMMIT"; case PLPGSQL_STMT_ROLLBACK: return "ROLLBACK"; - case PLPGSQL_STMT_SET: - return "SET"; } return "unknown"; @@ -370,7 +368,6 @@ static void free_perform(PLpgSQL_stmt_perform *stmt); static void free_call(PLpgSQL_stmt_call *stmt); static void free_commit(PLpgSQL_stmt_commit *stmt); static void free_rollback(PLpgSQL_stmt_rollback *stmt); -static void free_set(PLpgSQL_stmt_set *stmt); static void free_expr(PLpgSQL_expr *expr); @@ -460,9 +457,6 @@ free_stmt(PLpgSQL_stmt *stmt) case PLPGSQL_STMT_ROLLBACK: free_rollback((PLpgSQL_stmt_rollback *) stmt); break; - case PLPGSQL_STMT_SET: - free_set((PLpgSQL_stmt_set *) stmt); - break; default: elog(ERROR, "unrecognized cmd_type: %d", stmt->cmd_type); break; @@ -626,12 +620,6 @@ free_rollback(PLpgSQL_stmt_rollback *stmt) { } -static void -free_set(PLpgSQL_stmt_set *stmt) -{ - free_expr(stmt->expr); -} - static void free_exit(PLpgSQL_stmt_exit *stmt) { @@ -825,7 +813,6 @@ static void dump_perform(PLpgSQL_stmt_perform *stmt); static void dump_call(PLpgSQL_stmt_call *stmt); static void dump_commit(PLpgSQL_stmt_commit *stmt); static void dump_rollback(PLpgSQL_stmt_rollback *stmt); -static void dump_set(PLpgSQL_stmt_set *stmt); static void dump_expr(PLpgSQL_expr *expr); @@ -925,9 +912,6 @@ dump_stmt(PLpgSQL_stmt *stmt) case PLPGSQL_STMT_ROLLBACK: dump_rollback((PLpgSQL_stmt_rollback *) stmt); break; - case PLPGSQL_STMT_SET: - dump_set((PLpgSQL_stmt_set *) stmt); - break; default: elog(ERROR, "unrecognized cmd_type: %d", stmt->cmd_type); break; @@ -1329,13 +1313,6 @@ dump_rollback(PLpgSQL_stmt_rollback *stmt) printf("ROLLBACK\n"); } -static void -dump_set(PLpgSQL_stmt_set *stmt) -{ - dump_ind(); - printf("%s\n", stmt->expr->query); -} - static void dump_exit(PLpgSQL_stmt_exit *stmt) { diff --git a/src/pl/plpgsql/src/pl_gram.y b/src/pl/plpgsql/src/pl_gram.y index 34e0520719fea..3fcca43b904ec 100644 --- a/src/pl/plpgsql/src/pl_gram.y +++ b/src/pl/plpgsql/src/pl_gram.y @@ -197,7 +197,7 @@ static void check_raise_parameters(PLpgSQL_stmt_raise *stmt); %type stmt_return stmt_raise stmt_assert stmt_execsql %type stmt_dynexecute stmt_for stmt_perform stmt_call stmt_getdiag %type stmt_open stmt_fetch stmt_move stmt_close stmt_null -%type stmt_commit stmt_rollback stmt_set +%type stmt_commit stmt_rollback %type stmt_case stmt_foreach_a %type proc_exceptions @@ -328,7 +328,6 @@ static void check_raise_parameters(PLpgSQL_stmt_raise *stmt); %token K_QUERY %token K_RAISE %token K_RELATIVE -%token K_RESET %token K_RETURN %token K_RETURNED_SQLSTATE %token K_REVERSE @@ -338,7 +337,6 @@ static void check_raise_parameters(PLpgSQL_stmt_raise *stmt); %token K_SCHEMA %token K_SCHEMA_NAME %token K_SCROLL -%token K_SET %token K_SLICE %token K_SQLSTATE %token K_STACKED @@ -899,8 +897,6 @@ proc_stmt : pl_block ';' { $$ = $1; } | stmt_rollback { $$ = $1; } - | stmt_set - { $$ = $1; } ; stmt_perform : K_PERFORM @@ -2273,34 +2269,6 @@ opt_transaction_chain: | /* EMPTY */ { $$ = false; } ; -stmt_set : K_SET - { - PLpgSQL_stmt_set *new; - - new = palloc0(sizeof(PLpgSQL_stmt_set)); - new->cmd_type = PLPGSQL_STMT_SET; - new->lineno = plpgsql_location_to_lineno(@1); - new->stmtid = ++plpgsql_curr_compile->nstatements; - plpgsql_push_back_token(K_SET); - new->expr = read_sql_stmt(); - - $$ = (PLpgSQL_stmt *)new; - } - | K_RESET - { - PLpgSQL_stmt_set *new; - - new = palloc0(sizeof(PLpgSQL_stmt_set)); - new->cmd_type = PLPGSQL_STMT_SET; - new->lineno = plpgsql_location_to_lineno(@1); - new->stmtid = ++plpgsql_curr_compile->nstatements; - plpgsql_push_back_token(K_RESET); - new->expr = read_sql_stmt(); - - $$ = (PLpgSQL_stmt *)new; - } - ; - cursor_variable : T_DATUM { @@ -2588,7 +2556,6 @@ unreserved_keyword : | K_QUERY | K_RAISE | K_RELATIVE - | K_RESET | K_RETURN | K_RETURNED_SQLSTATE | K_REVERSE @@ -2598,7 +2565,6 @@ unreserved_keyword : | K_SCHEMA | K_SCHEMA_NAME | K_SCROLL - | K_SET | K_SLICE | K_SQLSTATE | K_STACKED diff --git a/src/pl/plpgsql/src/pl_unreserved_kwlist.h b/src/pl/plpgsql/src/pl_unreserved_kwlist.h index 44c8b68bfbc4b..fcb34f7c7fbca 100644 --- a/src/pl/plpgsql/src/pl_unreserved_kwlist.h +++ b/src/pl/plpgsql/src/pl_unreserved_kwlist.h @@ -89,7 +89,6 @@ PG_KEYWORD("prior", K_PRIOR) PG_KEYWORD("query", K_QUERY) PG_KEYWORD("raise", K_RAISE) PG_KEYWORD("relative", K_RELATIVE) -PG_KEYWORD("reset", K_RESET) PG_KEYWORD("return", K_RETURN) PG_KEYWORD("returned_sqlstate", K_RETURNED_SQLSTATE) PG_KEYWORD("reverse", K_REVERSE) @@ -99,7 +98,6 @@ PG_KEYWORD("rowtype", K_ROWTYPE) PG_KEYWORD("schema", K_SCHEMA) PG_KEYWORD("schema_name", K_SCHEMA_NAME) PG_KEYWORD("scroll", K_SCROLL) -PG_KEYWORD("set", K_SET) PG_KEYWORD("slice", K_SLICE) PG_KEYWORD("sqlstate", K_SQLSTATE) PG_KEYWORD("stacked", K_STACKED) diff --git a/src/pl/plpgsql/src/plpgsql.h b/src/pl/plpgsql/src/plpgsql.h index d5010862a5035..fcbfcd678b161 100644 --- a/src/pl/plpgsql/src/plpgsql.h +++ b/src/pl/plpgsql/src/plpgsql.h @@ -127,8 +127,7 @@ typedef enum PLpgSQL_stmt_type PLPGSQL_STMT_PERFORM, PLPGSQL_STMT_CALL, PLPGSQL_STMT_COMMIT, - PLPGSQL_STMT_ROLLBACK, - PLPGSQL_STMT_SET + PLPGSQL_STMT_ROLLBACK } PLpgSQL_stmt_type; /* @@ -566,17 +565,6 @@ typedef struct PLpgSQL_stmt_rollback bool chain; } PLpgSQL_stmt_rollback; -/* - * SET statement - */ -typedef struct PLpgSQL_stmt_set -{ - PLpgSQL_stmt_type cmd_type; - int lineno; - unsigned int stmtid; - PLpgSQL_expr *expr; -} PLpgSQL_stmt_set; - /* * GET DIAGNOSTICS item */ From 8dcae7f0a3d6aba1afad1599ab18d259c417b4ee Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sat, 22 May 2021 19:24:23 -0400 Subject: [PATCH 349/671] Update PG 14 relnotes for vacuum_cost_page_miss Reported-by: Peter Geoghegan Discussion: https://postgr.es/m/CAH2-WzmgSnDX9WVoxRZxuKeCy2MzLO9Dmo4+go0RzNW0VBdhmw@mail.gmail.com --- doc/src/sgml/release-14.sgml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 3de5d053dfac1..58646b4804bf4 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -625,11 +625,7 @@ Author: Peter Geoghegan --> -Reduce the default value of from 10 milliseconds to 2 (Peter Geoghegan) - - - -This new default better reflects current hardware capabilities. +Reduce the default value of to better reflects current hardware capabilities (Peter Geoghegan) From 7ce7d07e1c5fb33ee56bda235ae3d53f162f3bc0 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sat, 22 May 2021 20:17:58 -0400 Subject: [PATCH 350/671] doc: PG 14 relnotes, adjust pg_{read|write}_all_data entry Reported-by: Stephen Frost Discussion: https://postgr.es/m/20210522232945.GO20766@tamriel.snowman.net --- doc/src/sgml/release-14.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 58646b4804bf4..372abff0ac37b 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -469,7 +469,7 @@ Add predefined roles pg_read_all_da -These non-login roles give read-only/write-only access to all objects. +These non-login roles can be used to give read or write permission to all tables, views, and sequences. From b39630fd41f25b414d0ea9b30804f4105f2a0aff Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 22 May 2021 21:24:48 -0400 Subject: [PATCH 351/671] Fix access to no-longer-open relcache entry in logical-rep worker. If we redirected a replicated tuple operation into a partition child table, and then tried to fire AFTER triggers for that event, the relation cache entry for the child table was already closed. This has no visible ill effects as long as the entry is still there and still valid, but an unluckily-timed cache flush could result in a crash or other misbehavior. To fix, postpone the ExecCleanupTupleRouting call (which is what closes the child table) until after we've fired triggers. This requires a bit of refactoring so that the cleanup function can have access to the necessary state. In HEAD, I took the opportunity to simplify some of worker.c's function APIs based on use of the new ApplyExecutionData struct. However, it doesn't seem safe/practical to back-patch that aspect, at least not without a lot of analysis of possible interactions with a04daa97a. In passing, add an Assert to afterTriggerInvokeEvents to catch such cases. This seems worthwhile because we've grown a number of fairly unstructured ways of calling AfterTriggerEndQuery. Back-patch to v13, where worker.c grew the ability to deal with partitioned target tables. Discussion: https://postgr.es/m/3382681.1621381328@sss.pgh.pa.us --- src/backend/commands/trigger.c | 2 + src/backend/replication/logical/worker.c | 205 ++++++++++++++--------- 2 files changed, 129 insertions(+), 78 deletions(-) diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index ef34421f1ca93..07c73f39de84a 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -4219,6 +4219,8 @@ afterTriggerInvokeEvents(AfterTriggerEventList *events, { rInfo = ExecGetTriggerResultRel(estate, evtshared->ats_relid); rel = rInfo->ri_RelationDesc; + /* Catch calls with insufficient relcache refcounting */ + Assert(!RelationHasReferenceCountZero(rel)); trigdesc = rInfo->ri_TrigDesc; finfo = rInfo->ri_TrigFunctions; instr = rInfo->ri_TrigInstrument; diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 452e5f3df7fd5..6ba447ea97498 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -136,6 +136,18 @@ typedef struct SlotErrCallbackArg int remote_attnum; } SlotErrCallbackArg; +typedef struct ApplyExecutionData +{ + EState *estate; /* executor state, used to track resources */ + + LogicalRepRelMapEntry *targetRel; /* replication target rel */ + ResultRelInfo *targetRelInfo; /* ResultRelInfo for same */ + + /* These fields are used when the target relation is partitioned: */ + ModifyTableState *mtstate; /* dummy ModifyTable state */ + PartitionTupleRouting *proute; /* partition routing info */ +} ApplyExecutionData; + /* * Stream xid hash entry. Whenever we see a new xid we create this entry in the * xidhash and along with it create the streaming file and store the fileset handle. @@ -226,24 +238,23 @@ static void apply_dispatch(StringInfo s); static void apply_handle_commit_internal(StringInfo s, LogicalRepCommitData *commit_data); -static void apply_handle_insert_internal(ResultRelInfo *relinfo, - EState *estate, TupleTableSlot *remoteslot); -static void apply_handle_update_internal(ResultRelInfo *relinfo, - EState *estate, TupleTableSlot *remoteslot, - LogicalRepTupleData *newtup, - LogicalRepRelMapEntry *relmapentry); -static void apply_handle_delete_internal(ResultRelInfo *relinfo, EState *estate, +static void apply_handle_insert_internal(ApplyExecutionData *edata, + ResultRelInfo *relinfo, + TupleTableSlot *remoteslot); +static void apply_handle_update_internal(ApplyExecutionData *edata, + ResultRelInfo *relinfo, TupleTableSlot *remoteslot, - LogicalRepRelation *remoterel); + LogicalRepTupleData *newtup); +static void apply_handle_delete_internal(ApplyExecutionData *edata, + ResultRelInfo *relinfo, + TupleTableSlot *remoteslot); static bool FindReplTupleInLocalRel(EState *estate, Relation localrel, LogicalRepRelation *remoterel, TupleTableSlot *remoteslot, TupleTableSlot **localslot); -static void apply_handle_tuple_routing(ResultRelInfo *relinfo, - EState *estate, +static void apply_handle_tuple_routing(ApplyExecutionData *edata, TupleTableSlot *remoteslot, LogicalRepTupleData *newtup, - LogicalRepRelMapEntry *relmapentry, CmdType operation); /* @@ -336,27 +347,29 @@ handle_streamed_transaction(LogicalRepMsgType action, StringInfo s) /* * Executor state preparation for evaluation of constraint expressions, - * indexes and triggers. + * indexes and triggers for the specified relation. * - * resultRelInfo is a ResultRelInfo for the relation to be passed to the - * executor routines. The caller must open and close any indexes to be - * updated independently of the relation registered here. + * Note that the caller must open and close any indexes to be updated. */ -static EState * -create_estate_for_relation(LogicalRepRelMapEntry *rel, - ResultRelInfo **resultRelInfo) +static ApplyExecutionData * +create_edata_for_relation(LogicalRepRelMapEntry *rel) { + ApplyExecutionData *edata; EState *estate; RangeTblEntry *rte; + ResultRelInfo *resultRelInfo; /* * Input functions may need an active snapshot, as may AFTER triggers - * invoked during finish_estate. For safety, ensure an active snapshot + * invoked during finish_edata. For safety, ensure an active snapshot * exists throughout all our usage of the executor. */ PushActiveSnapshot(GetTransactionSnapshot()); - estate = CreateExecutorState(); + edata = (ApplyExecutionData *) palloc0(sizeof(ApplyExecutionData)); + edata->targetRel = rel; + + edata->estate = estate = CreateExecutorState(); rte = makeNode(RangeTblEntry); rte->rtekind = RTE_RELATION; @@ -365,48 +378,62 @@ create_estate_for_relation(LogicalRepRelMapEntry *rel, rte->rellockmode = AccessShareLock; ExecInitRangeTable(estate, list_make1(rte)); - *resultRelInfo = makeNode(ResultRelInfo); + edata->targetRelInfo = resultRelInfo = makeNode(ResultRelInfo); /* * Use Relation opened by logicalrep_rel_open() instead of opening it * again. */ - InitResultRelInfo(*resultRelInfo, rel->localrel, 1, NULL, 0); + InitResultRelInfo(resultRelInfo, rel->localrel, 1, NULL, 0); /* * We put the ResultRelInfo in the es_opened_result_relations list, even * though we don't populate the es_result_relations array. That's a bit * bogus, but it's enough to make ExecGetTriggerResultRel() find them. - * Also, because we did not open the Relation ourselves here, there is no - * need to worry about closing it. * * ExecOpenIndices() is not called here either, each execution path doing * an apply operation being responsible for that. */ estate->es_opened_result_relations = - lappend(estate->es_opened_result_relations, *resultRelInfo); + lappend(estate->es_opened_result_relations, resultRelInfo); estate->es_output_cid = GetCurrentCommandId(true); /* Prepare to catch AFTER triggers. */ AfterTriggerBeginQuery(); - return estate; + /* other fields of edata remain NULL for now */ + + return edata; } /* * Finish any operations related to the executor state created by - * create_estate_for_relation(). + * create_edata_for_relation(). */ static void -finish_estate(EState *estate) +finish_edata(ApplyExecutionData *edata) { + EState *estate = edata->estate; + /* Handle any queued AFTER triggers. */ AfterTriggerEndQuery(estate); - /* Cleanup. */ + /* Shut down tuple routing, if any was done. */ + if (edata->proute) + ExecCleanupTupleRouting(edata->mtstate, edata->proute); + + /* + * Cleanup. It might seem that we should call ExecCloseResultRelations() + * here, but we intentionally don't. It would close the rel we added to + * es_opened_result_relations above, which is wrong because we took no + * corresponding refcount. We rely on ExecCleanupTupleRouting() to close + * any other relations opened during execution. + */ ExecResetTupleTable(estate->es_tupleTable, false); FreeExecutorState(estate); + pfree(edata); + PopActiveSnapshot(); } @@ -1189,10 +1216,10 @@ GetRelationIdentityOrPK(Relation rel) static void apply_handle_insert(StringInfo s) { - ResultRelInfo *resultRelInfo; LogicalRepRelMapEntry *rel; LogicalRepTupleData newtup; LogicalRepRelId relid; + ApplyExecutionData *edata; EState *estate; TupleTableSlot *remoteslot; MemoryContext oldctx; @@ -1215,7 +1242,8 @@ apply_handle_insert(StringInfo s) } /* Initialize the executor state. */ - estate = create_estate_for_relation(rel, &resultRelInfo); + edata = create_edata_for_relation(rel); + estate = edata->estate; remoteslot = ExecInitExtraTupleSlot(estate, RelationGetDescr(rel->localrel), &TTSOpsVirtual); @@ -1228,24 +1256,32 @@ apply_handle_insert(StringInfo s) /* For a partitioned table, insert the tuple into a partition. */ if (rel->localrel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) - apply_handle_tuple_routing(resultRelInfo, estate, - remoteslot, NULL, rel, CMD_INSERT); + apply_handle_tuple_routing(edata, + remoteslot, NULL, CMD_INSERT); else - apply_handle_insert_internal(resultRelInfo, estate, + apply_handle_insert_internal(edata, edata->targetRelInfo, remoteslot); - finish_estate(estate); + finish_edata(edata); logicalrep_rel_close(rel, NoLock); CommandCounterIncrement(); } -/* Workhorse for apply_handle_insert() */ +/* + * Workhorse for apply_handle_insert() + * relinfo is for the relation we're actually inserting into + * (could be a child partition of edata->targetRelInfo) + */ static void -apply_handle_insert_internal(ResultRelInfo *relinfo, - EState *estate, TupleTableSlot *remoteslot) +apply_handle_insert_internal(ApplyExecutionData *edata, + ResultRelInfo *relinfo, + TupleTableSlot *remoteslot) { + EState *estate = edata->estate; + + /* We must open indexes here. */ ExecOpenIndices(relinfo, false); /* Do the insert. */ @@ -1296,9 +1332,9 @@ check_relation_updatable(LogicalRepRelMapEntry *rel) static void apply_handle_update(StringInfo s) { - ResultRelInfo *resultRelInfo; LogicalRepRelMapEntry *rel; LogicalRepRelId relid; + ApplyExecutionData *edata; EState *estate; LogicalRepTupleData oldtup; LogicalRepTupleData newtup; @@ -1329,7 +1365,8 @@ apply_handle_update(StringInfo s) check_relation_updatable(rel); /* Initialize the executor state. */ - estate = create_estate_for_relation(rel, &resultRelInfo); + edata = create_edata_for_relation(rel); + estate = edata->estate; remoteslot = ExecInitExtraTupleSlot(estate, RelationGetDescr(rel->localrel), &TTSOpsVirtual); @@ -1369,26 +1406,32 @@ apply_handle_update(StringInfo s) /* For a partitioned table, apply update to correct partition. */ if (rel->localrel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) - apply_handle_tuple_routing(resultRelInfo, estate, - remoteslot, &newtup, rel, CMD_UPDATE); + apply_handle_tuple_routing(edata, + remoteslot, &newtup, CMD_UPDATE); else - apply_handle_update_internal(resultRelInfo, estate, - remoteslot, &newtup, rel); + apply_handle_update_internal(edata, edata->targetRelInfo, + remoteslot, &newtup); - finish_estate(estate); + finish_edata(edata); logicalrep_rel_close(rel, NoLock); CommandCounterIncrement(); } -/* Workhorse for apply_handle_update() */ +/* + * Workhorse for apply_handle_update() + * relinfo is for the relation we're actually updating in + * (could be a child partition of edata->targetRelInfo) + */ static void -apply_handle_update_internal(ResultRelInfo *relinfo, - EState *estate, TupleTableSlot *remoteslot, - LogicalRepTupleData *newtup, - LogicalRepRelMapEntry *relmapentry) +apply_handle_update_internal(ApplyExecutionData *edata, + ResultRelInfo *relinfo, + TupleTableSlot *remoteslot, + LogicalRepTupleData *newtup) { + EState *estate = edata->estate; + LogicalRepRelMapEntry *relmapentry = edata->targetRel; Relation localrel = relinfo->ri_RelationDesc; EPQState epqstate; TupleTableSlot *localslot; @@ -1447,10 +1490,10 @@ apply_handle_update_internal(ResultRelInfo *relinfo, static void apply_handle_delete(StringInfo s) { - ResultRelInfo *resultRelInfo; LogicalRepRelMapEntry *rel; LogicalRepTupleData oldtup; LogicalRepRelId relid; + ApplyExecutionData *edata; EState *estate; TupleTableSlot *remoteslot; MemoryContext oldctx; @@ -1476,7 +1519,8 @@ apply_handle_delete(StringInfo s) check_relation_updatable(rel); /* Initialize the executor state. */ - estate = create_estate_for_relation(rel, &resultRelInfo); + edata = create_edata_for_relation(rel); + estate = edata->estate; remoteslot = ExecInitExtraTupleSlot(estate, RelationGetDescr(rel->localrel), &TTSOpsVirtual); @@ -1488,26 +1532,32 @@ apply_handle_delete(StringInfo s) /* For a partitioned table, apply delete to correct partition. */ if (rel->localrel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) - apply_handle_tuple_routing(resultRelInfo, estate, - remoteslot, NULL, rel, CMD_DELETE); + apply_handle_tuple_routing(edata, + remoteslot, NULL, CMD_DELETE); else - apply_handle_delete_internal(resultRelInfo, estate, - remoteslot, &rel->remoterel); + apply_handle_delete_internal(edata, edata->targetRelInfo, + remoteslot); - finish_estate(estate); + finish_edata(edata); logicalrep_rel_close(rel, NoLock); CommandCounterIncrement(); } -/* Workhorse for apply_handle_delete() */ +/* + * Workhorse for apply_handle_delete() + * relinfo is for the relation we're actually deleting from + * (could be a child partition of edata->targetRelInfo) + */ static void -apply_handle_delete_internal(ResultRelInfo *relinfo, EState *estate, - TupleTableSlot *remoteslot, - LogicalRepRelation *remoterel) +apply_handle_delete_internal(ApplyExecutionData *edata, + ResultRelInfo *relinfo, + TupleTableSlot *remoteslot) { + EState *estate = edata->estate; Relation localrel = relinfo->ri_RelationDesc; + LogicalRepRelation *remoterel = &edata->targetRel->remoterel; EPQState epqstate; TupleTableSlot *localslot; bool found; @@ -1577,16 +1627,17 @@ FindReplTupleInLocalRel(EState *estate, Relation localrel, * This handles insert, update, delete on a partitioned table. */ static void -apply_handle_tuple_routing(ResultRelInfo *relinfo, - EState *estate, +apply_handle_tuple_routing(ApplyExecutionData *edata, TupleTableSlot *remoteslot, LogicalRepTupleData *newtup, - LogicalRepRelMapEntry *relmapentry, CmdType operation) { + EState *estate = edata->estate; + LogicalRepRelMapEntry *relmapentry = edata->targetRel; + ResultRelInfo *relinfo = edata->targetRelInfo; Relation parentrel = relinfo->ri_RelationDesc; - ModifyTableState *mtstate = NULL; - PartitionTupleRouting *proute = NULL; + ModifyTableState *mtstate; + PartitionTupleRouting *proute; ResultRelInfo *partrelinfo; Relation partrel; TupleTableSlot *remoteslot_part; @@ -1594,12 +1645,14 @@ apply_handle_tuple_routing(ResultRelInfo *relinfo, MemoryContext oldctx; /* ModifyTableState is needed for ExecFindPartition(). */ - mtstate = makeNode(ModifyTableState); + edata->mtstate = mtstate = makeNode(ModifyTableState); mtstate->ps.plan = NULL; mtstate->ps.state = estate; mtstate->operation = operation; mtstate->resultRelInfo = relinfo; - proute = ExecSetupPartitionTupleRouting(estate, parentrel); + + /* ... as is PartitionTupleRouting. */ + edata->proute = proute = ExecSetupPartitionTupleRouting(estate, parentrel); /* * Find the partition to which the "search tuple" belongs. @@ -1633,14 +1686,13 @@ apply_handle_tuple_routing(ResultRelInfo *relinfo, switch (operation) { case CMD_INSERT: - apply_handle_insert_internal(partrelinfo, estate, + apply_handle_insert_internal(edata, partrelinfo, remoteslot_part); break; case CMD_DELETE: - apply_handle_delete_internal(partrelinfo, estate, - remoteslot_part, - &relmapentry->remoterel); + apply_handle_delete_internal(edata, partrelinfo, + remoteslot_part); break; case CMD_UPDATE: @@ -1752,9 +1804,8 @@ apply_handle_tuple_routing(ResultRelInfo *relinfo, Assert(partrelinfo_new != partrelinfo); /* DELETE old tuple found in the old partition. */ - apply_handle_delete_internal(partrelinfo, estate, - localslot, - &relmapentry->remoterel); + apply_handle_delete_internal(edata, partrelinfo, + localslot); /* INSERT new tuple into the new partition. */ @@ -1782,7 +1833,7 @@ apply_handle_tuple_routing(ResultRelInfo *relinfo, slot_getallattrs(remoteslot); } MemoryContextSwitchTo(oldctx); - apply_handle_insert_internal(partrelinfo_new, estate, + apply_handle_insert_internal(edata, partrelinfo_new, remoteslot_part); } } @@ -1792,8 +1843,6 @@ apply_handle_tuple_routing(ResultRelInfo *relinfo, elog(ERROR, "unrecognized CmdType: %d", (int) operation); break; } - - ExecCleanupTupleRouting(mtstate, proute); } /* From 8f73ed6b659464274eb9cc8358588b569960d0be Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sat, 22 May 2021 22:25:05 -0400 Subject: [PATCH 352/671] doc: word-wrap and indent PG 14 relnotes --- doc/src/sgml/release-14.sgml | 3649 +++++++++++++++++++--------------- 1 file changed, 2094 insertions(+), 1555 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 372abff0ac37b..08cb0676805e6 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -51,22 +51,25 @@ - + - -Prevent the containment operators (<@ and @>) for from using GiST indexes (Tom Lane) - + + Prevent the containment operators (<@ and @>) for from using GiST indexes (Tom Lane) + - -Previously a full GiST index scan was required, so just avoid that and scan the heap, which is faster. Indexes created for this purpose should be removed. - - + + Previously a full GiST index scan was required, so just avoid + that and scan the heap, which is faster. Indexes created for this + purpose should be removed. + + - + - -Remove deprecated containment operators @ and ~ for built-in geometric data types and contrib modules , , -, and (Justin Pryzby) - + + Remove deprecated containment operators @ and ~ for built-in + geometric data types and + contrib modules , , + , and (Justin Pryzby) + - -The more consistent <@ and @> have been recommended for many years. - - + + The more consistent <@ and @> have been recommended for + many years. + + - + - -Fix to_tsquery() and websearch_to_tsquery() to properly parse query text containing discarded tokens (Alexander Korotkov) - + + Fix to_tsquery() + and websearch_to_tsquery() to properly parse + query text containing discarded tokens (Alexander Korotkov) + - -Certain discarded tokens, like underscore, caused the output of these functions to produce incorrect tsquery output, e.g., both websearch_to_tsquery('"pg_class pg"') and to_tsquery('pg_class <-> -pg') used to output '( pg & class ) <-> pg', but now both output 'pg <-> class <-> pg'. - - + + Certain discarded tokens, like underscore, caused the output of + these functions to produce incorrect tsquery output, e.g., both + websearch_to_tsquery('"pg_class pg"') and to_tsquery('pg_class + <-> pg') used to output '( pg & class ) <-> pg', + but now both output 'pg <-> class <-> pg'. + + - + - -Fix websearch_to_tsquery() to properly parse multiple adjacent discarded tokens in quotes (Alexander Korotkov) - + + Fix websearch_to_tsquery() + to properly parse multiple adjacent discarded tokens in quotes + (Alexander Korotkov) + - -Previously, quoted text that contained multiple adjacent discarded tokens were treated as multiple tokens, causing incorrect tsquery output, e.g., websearch_to_tsquery('"aaa: bbb"') used to output -'aaa <2> bbb', but now outputs 'aaa <-> bbb'. - - + + Previously, quoted text that contained multiple adjacent discarded + tokens were treated as multiple tokens, causing incorrect tsquery + output, e.g., websearch_to_tsquery('"aaa: bbb"') used to output + 'aaa <2> bbb', but now outputs 'aaa <-> bbb'. + + - + - -Change the default of the server parameter to scram-sha-256 (Peter Eisentraut) - + + Change the default of the + server parameter to scram-sha-256 (Peter + Eisentraut) + - -Previously it was md5. All new passwords will be stored as SHA256 unless this server variable is changed or the password is specified in md5 format. -Also, the legacy (and undocumented) boolean-like values which were previously synonyms for md5 are no longer accepted. - - + + Previously it was md5. All new passwords will + be stored as SHA256 unless this server variable is changed or + the password is specified in md5 format. Also, the legacy (and + undocumented) boolean-like values which were previously synonyms + for md5 are no longer accepted. + + - + - -Overhaul the specification of clientcert in pg_hba.conf (Kyotaro Horiguchi) - + + Overhaul the specification of clientcert in pg_hba.conf + (Kyotaro Horiguchi) + - -Values 1/0/no-verify are no longer supported; only the strings verify-ca and verify-full can be used. Also, disallow verify-ca if cert -authentication is enabled since cert requires verify-full checking. - - + + Values + 1/0/no-verify + are no longer supported; only the strings + verify-ca and verify-full + can be used. Also, disallow verify-ca if cert + authentication is enabled since cert requires + verify-full checking. + + - + - -Remove support for SSL compression (Daniel Gustafsson, Michael Paquier) - + + Remove support for SSL + compression (Daniel Gustafsson, Michael Paquier) + - -This was already disabled by default in previous Postgres releases, and most modern OpenSSL and TLS versions no longer support it. - - + + This was already disabled by default in previous Postgres releases, + and most modern OpenSSL and TLS versions no + longer support it. + + - + - -Remove server and libpq support for the version 2 wire protocol (Heikki Linnakangas) - + + Remove server and libpq support + for the version 2 wire protocol + (Heikki Linnakangas) + - -This was last used as the default in Postgres 7.2 (year 2002). - - + + This was last used as the default in Postgres 7.2 (year 2002). + + - + - -Change EXTRACT to return the NUMERIC data type (Peter Eisentraut) - + + Change EXTRACT + to return the NUMERIC data type (Peter Eisentraut) + - -EXTRACT(date) now throws an error for units that are not part of the date data type. - - + + EXTRACT(date) now throws an error for units + that are not part of the date data type. + + - + - -Fix handling of infinite window function ranges (Tom Lane) - + + Fix handling of infinite window function ranges + (Tom Lane) + - -Previously window frame clauses like 'inf' PRECEDING AND 'inf' FOLLOWING returned incorrect results. - - + + Previously window frame clauses like 'inf' PRECEDING AND + 'inf' FOLLOWING returned incorrect results. + + - + - -Prevent 's function normal_rand() from accepting negative values (Ashutosh Bapat) - + + Prevent 's function + normal_rand() from accepting negative values + (Ashutosh Bapat) + - -Negative values produced undesirable results. - - + + Negative values produced undesirable results. + + - + - -Change var_samp() and stddev_samp() with numeric parameters to return NULL for a single NaN value (Tom Lane) - + + Change var_samp() + and stddev_samp() with numeric parameters to + return NULL for a single NaN value (Tom Lane) + - -Previously NaN was returned. - - + + Previously NaN was returned. + + - + - -Remove factorial operators ! and !! (Mark Dilger) - + + Remove factorial operators ! and + !! (Mark Dilger) + - -The factorial() function is still supported. Also remove function numeric_fac(). - - + + The factorial() + function is still supported. Also remove function + numeric_fac(). + + - + - -Disallow factorial() of negative numbers (Peter Eisentraut) - + + Disallow factorial() of negative numbers + (Peter Eisentraut) + - -Previously such cases returned 1. - - + + Previously such cases returned 1. + + - + - -Remove support for postfix (right-unary) operators (Mark Dilger) - + + Remove support for postfix + (right-unary) operators (Mark Dilger) + - -pg_dump and pg_upgrade will warn if postfix operators are being dumped. - - + + pg_dump and + pg_upgrade will warn if postfix operators + are being dumped. + + - + - -Allow \D and \W shorthands to match newlines in regular expression newline-sensitive mode (Tom Lane) - + + Allow \D and \W shorthands to + match newlines in regular + expression newline-sensitive mode (Tom Lane) + - -Previously they did not match; [^[:digit:]] or [^[:word:]] can be used to get the old behavior. - - + + Previously they did not match; [^[:digit:]] or + [^[:word:]] can be used to get the old behavior. + + - + - -Improve handling of regular expression back-references (Tom Lane) - + + Improve handling of regular expression back-references (Tom Lane) + - -For example, disregard ^ in its expansion in \1 in (^\d+).*\1. - - + + For example, disregard ^ in its expansion in + \1 in (^\d+).*\1. + + - + - -Disallow \w as range start/end in character classes (Tom Lane) - + + Disallow \w as range start/end in character + classes (Tom Lane) + - -This previously was allowed but produced incorrect results. - - + + This previously was allowed but produced incorrect results. + + - + - -Require custom server variable names to match the pattern used for unquoted SQL identifiers (Tom Lane) - - + + Require custom server + variable names to match the pattern used for unquoted + SQL identifiers (Tom Lane) + + - + - -Remove server variable vacuum_cleanup_index_scale_factor (Peter Geoghegan) - + + Remove server variable + vacuum_cleanup_index_scale_factor (Peter Geoghegan) + - -This setting was ignored starting in PostgreSQL version 13.3. - - + + This setting was ignored starting in + PostgreSQL version 13.3. + + - + - -Return false for has_column_privilege() checks on non-existent or dropped columns when using attribute numbers (Joe Conway) - + + Return false for has_column_privilege() + checks on non-existent or dropped columns when using attribute + numbers (Joe Conway) + - -Previously such attribute numbers returned an invalid column error. - - + + Previously such attribute numbers returned an invalid column error. + + - + - -Pass doubled quote marks in SQL command strings literally (Tom Lane) - + + Pass doubled quote marks in + SQL command strings literally (Tom Lane) + - -Previously 'abc''def' was passed to the server as 'abc'def', and "abc""def" was passed as "abc"def". - - + + Previously 'abc''def' was passed to the server + as 'abc'def', and "abc""def" + was passed as "abc"def". + + - + - -Disallow single-quoting of the language name in the CREATE/DROP LANGUAGE command (Peter Eisentraut) - - + + Disallow single-quoting of the language name in the + CREATE/DROP + LANGUAGE command (Peter Eisentraut) + + - + - -Remove contrib program pg_standby (Justin Pryzby) - - + + Remove contrib program pg_standby + (Justin Pryzby) + + - + - -Remove composite types for sequences or toast tables (Tom Lane) - - + + Remove composite + types for sequences or toast tables (Tom Lane) + + - + - -Remove operator_precedence_warning setting (Tom Lane) - + + Remove operator_precedence_warning setting + (Tom Lane) + - -This was needed for warning applications about PostgreSQL 9.5 changes. - - + + This was needed for warning applications about + PostgreSQL 9.5 changes. + + @@ -448,269 +523,310 @@ This was needed for warning applications about PostgreSQLChanges - Below you will find a detailed account of the changes between + Below you will find a detailed account of the changes between PostgreSQL 14 and the previous major - release. + release. Server - + - + - -Add predefined roles pg_read_all_data and pg_write_all_data (Stephen Frost) - + + Add predefined roles pg_read_all_data + and pg_write_all_data (Stephen Frost) + - -These non-login roles can be used to give read or write permission to all tables, views, and sequences. - - + + These non-login roles can be used to give read or write permission + to all tables, views, and sequences. + + - + - -Add a predefined role to match the database owner (Noah Misch) - + + Add a predefined role to match the database owner (Noah Misch) + - -It is called pg_database_owner; this is useful in template databases. - - + + It is called pg_database_owner; + this is useful in template databases. + + - + - -Remove temporary files after backend crashes (Euler Taveira) - + + Remove temporary files after backend crashes (Euler Taveira) + - -These files were previously retained for debugging purposes; deletion can be disabled with . - - + + These files were previously retained for debugging + purposes; deletion can be disabled with . + + - + - -Allow long-running queries to be canceled if the client disconnects (Sergey Cherkashin, Thomas Munro) - + + Allow long-running queries to be canceled if the client disconnects + (Sergey Cherkashin, Thomas Munro) + - -The server variable allows some supported operating systems to automatically cancel queries by disconnected clients. - - + + The server variable allows some + supported operating systems to automatically cancel queries by + disconnected clients. + + - + - -Add function pg_wait_for_backend_termination() that waits for session exit (Bharath Rupireddy) - + + Add function pg_wait_for_backend_termination() + that waits for session exit (Bharath Rupireddy) + - -Also add a similar optional wait parameter to pg_terminate_backend() - - + + Also add a similar optional wait parameter to pg_terminate_backend() + + - + - -Allow wide tuples to be always added to almost-empty heap pages (John Naylor, Floris van Nee) - + + Allow wide tuples to be always added to almost-empty heap pages + (John Naylor, Floris van Nee) + - -Previously tuples whose insertion would have exceeded the page's fill factor were instead added to new pages. - - + + Previously tuples whose insertion would have exceeded the page's + fill factor were instead + added to new pages. + + - + - -Add Set Server Name Indication (SNI) for SSL connection packets (Peter Eisentraut) - + + Add Set Server Name Indication (SNI) for + SSL connection packets (Peter Eisentraut) + - -This can be disabled by turning off client option sslsni. - - + + This can be disabled by turning off client option sslsni. + + - + <link linkend="routine-vacuuming">Vacuuming</link> - + - -Allow vacuum to skip index vacuuming when the number of removable index entries is insignificant (Masahiko Sawada, Peter Geoghegan) - - + + Allow vacuum to skip index vacuuming when the number of removable + index entries is insignificant (Masahiko Sawada, Peter Geoghegan) + + - + - -Allow vacuum to eagerly add newly deleted btree pages to the free space map (Peter Geoghegan) - + + Allow vacuum to eagerly add newly deleted btree pages to the free + space map (Peter Geoghegan) + - -Previously vacuum could only place preexisting deleted pages in the free space map. - - + + Previously vacuum could only place preexisting deleted pages in + the free space map. + + - + - -Allow vacuum to deallocate space reserved by trailing unused heap line pointers (Matthias van de Meent, Peter Geoghegan) - - + + Allow vacuum to deallocate space reserved by trailing unused heap + line pointers (Matthias van de Meent, Peter Geoghegan) + + - + - -Speed up vacuuming of databases with many relations (Tatsuhito Kasahara) - - + + Speed up vacuuming of databases with many relations (Tatsuhito + Kasahara) + + - + - -Reduce the default value of to better reflects current hardware capabilities (Peter Geoghegan) - - + + Reduce the default value of to better reflects current + hardware capabilities (Peter Geoghegan) + + - + - -Add ability to skip vacuuming of TOAST tables (Nathan Bossart) - + + Add ability to skip vacuuming of TOAST tables + (Nathan Bossart) + - -VACUUM now has a PROCESS_TOAST which can be set to false to disable TOAST processing, and -vacuumdb has a option. - - + + VACUUM + now has a PROCESS_TOAST which can be set to + false to disable TOAST processing, and vacuumdb + has a option. + + - + - -Have COPY FREEZE appropriately update page visibility bits (Anastasia Lubennikova, Pavan Deolasee, Jeff Janes) - - + + Have COPY FREEZE + appropriately update page visibility bits (Anastasia Lubennikova, + Pavan Deolasee, Jeff Janes) + + - + - -Cause vacuum operations to be aggressive if the table is near xid or multixact wraparound (Masahiko Sawada, Peter Geoghegan) - + + Cause vacuum operations to be aggressive if the table is near + xid or multixact wraparound (Masahiko Sawada, Peter Geoghegan) + - -This is controlled by and . - - + + This is controlled by + and . + + - + - -Increase warning time and hard limit before transaction id and multi-transaction wraparound (Noah Misch) - + + Increase warning time and hard limit before transaction id and + multi-transaction wraparound (Noah Misch) + - -This should reduce the possibility of failures that occur without having issued warnings about wraparound. - - + + This should reduce the possibility of failures that occur without + having issued warnings about wraparound. + + - + - -Autovacuum now analyzes partitioned tables (Yuzuko Hosoya, Álvaro Herrera) - + + Autovacuum now analyzes + partitioned tables (Yuzuko Hosoya, Álvaro Herrera) + - -Insert, update, and delete tuple counts from partitions are now propagated to their parent tables so autovacuum knows when to process them. - - + + Insert, update, and delete tuple counts from partitions are now + propagated to their parent tables so autovacuum knows when to + process them. + + - + - -Add per-index information to autovacuum logging output (Masahiko Sawada) - - + + Add per-index information to autovacuum logging + output (Masahiko Sawada) + + @@ -720,7 +836,7 @@ Add per-index information to aut - + - -Improve the performance of updates/deletes on partitioned tables when only a few partitions are affected (Amit Langote, Tom Lane) - + + Improve the performance of updates/deletes on partitioned tables + when only a few partitions are affected (Amit Langote, Tom Lane) + - -This also allows updates/deletes on partitioned tables to use execution-time partition pruning. - - + + This also allows updates/deletes on partitioned tables to use + execution-time partition pruning. + + - + - -Allow partitions to be detached in a non-blocking manner (Álvaro Herrera) - + + Allow partitions to be detached in a non-blocking manner + (Álvaro Herrera) + - -The syntax is ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY, and FINALIZE. - - + + The syntax is ALTER TABLE ... DETACH PARTITION + ... CONCURRENTLY, and FINALIZE. + + - + - -Allow the arbitrary collations of partition boundary values (Tom Lane) - + + Allow the arbitrary collations of partition boundary values + (Tom Lane) + - -Previously it had to match the collation of the partition key. - - + + Previously it had to match the collation of the partition key. + + @@ -778,7 +900,7 @@ Previously it had to match the collation of the partition key. - + - -Allow btree index additions to remove expired index entries to prevent page splits (Peter Geoghegan) - + + Allow btree index additions to remove expired index entries + to prevent page splits (Peter Geoghegan) + - -This is particularly helpful for reducing index bloat on tables whose indexed columns are frequently updated. - - + + This is particularly helpful for reducing index bloat on tables + whose indexed columns are frequently updated. + + - + - -Allow BRIN indexes to record multiple min/max values per range (Tomas Vondra) - + + Allow BRIN indexes + to record multiple min/max values per range (Tomas Vondra) + - -This is useful if there are groups of values in each page range. - - + + This is useful if there are groups of values in each page range. + + - + - -Allow BRIN indexes to use bloom filters (Tomas Vondra) - + + Allow BRIN indexes to use bloom filters + (Tomas Vondra) + - -This allows bloom indexes to be used effectively with data that is not physically localized in the heap. - - + + This allows bloom indexes to be used effectively with data that + is not physically localized in the heap. + + - + - -Allow some GiST indexes to be built by presorting the data (Andrey Borodin) - + + Allow some GiST indexes to be built + by presorting the data (Andrey Borodin) + - -Presorting happens automatically and allows for faster index creation and smaller indexes. - - + + Presorting happens automatically and allows for faster index + creation and smaller indexes. + + - + - -Allow SP-GiST to use INCLUDE'd columns (Pavel Borisov) - - + + Allow SP-GiST to use + INCLUDE'd columns (Pavel Borisov) + + @@ -860,22 +991,24 @@ Allow SP-GiST to use INCLUDE'd - + - -Allow hash lookup of IN clause with many constants (James Coleman, David Rowley) - + + Allow hash lookup of IN clause with many + constants (James Coleman, David Rowley) + - -Previously the only option was to sequentially scan the list of constants. - - + + Previously the only option was to sequentially scan the list + of constants. + + - + - -Increase the number of places extended statistics can be used for OR clause estimation (Tomas Vondra, Dean Rasheed) - - + + Increase the number of places extended statistics can + be used for OR clause estimation (Tomas Vondra, + Dean Rasheed) + + - + - -Allow extended statistics on expressions (Tomas Vondra) - + + Allow extended statistics on expressions (Tomas Vondra) + - -This allows statistics on a group of expressions and columns, rather than only columns like previously. System view pg_stats_ext_exprs -reports such statistics. ALTER TABLE ... ALTER COLUMN ... TYPE RESETS STASTISTICS? - - + + This allows statistics on a group of expressions and columns, + rather than only columns like previously. System view pg_stats_ext_exprs + reports such statistics. ALTER TABLE ... ALTER COLUMN + ... TYPE RESETS STASTISTICS? + + - + - -Allow efficient heap scanning of a range of TIDs (Edmund Horner, David Rowley) - + + Allow efficient heap scanning of a range of TIDs (Edmund + Horner, David Rowley) + - -Previously a sequential scan was required for non-equality TID specifications. - - + + Previously a sequential scan was required for non-equality + TID specifications. + + - + - -Fix EXPLAIN CREATE TABLE AS and EXPLAIN CREATE MATERIALIZED VIEW to honor IF NOT EXISTS (Bharath Rupireddy) - + + Fix EXPLAIN CREATE TABLE + AS and EXPLAIN CREATE MATERIALIZED + VIEW to honor IF NOT EXISTS + (Bharath Rupireddy) + - -Previously, if the object already exists, EXPLAIN would fail. - - + + Previously, if the object already exists, + EXPLAIN would fail. + + @@ -945,7 +1092,7 @@ Previously, if the object already exists, EXPLAIN would fail. - + - -Improve the speed of computing MVCC visibility snapshots on systems with many CPUs and high session counts (Andres Freund) - + + Improve the speed of computing MVCC visibility snapshots on systems with many + CPUs and high session counts (Andres Freund) + - -This also improves performance when there are many idle sessions. - - + + This also improves performance when there are many idle sessions. + + - + - -Add executor method to cache results from the inner-side of nested loop joins (David Rowley) - + + Add executor method to cache results from the inner-side of nested + loop joins (David Rowley) + - -This is useful if only a small percentage of rows is checked on the inner side. - - + + This is useful if only a small percentage of rows is checked on + the inner side. + + - + - -Allow window functions to perform incremental sorts (David Rowley) - - + + Allow window functions + to perform incremental sorts (David Rowley) + + - + - -Improve the I/O performance of parallel sequential scans (Thomas Munro, David Rowley) - + + Improve the I/O performance of parallel sequential scans (Thomas + Munro, David Rowley) + - -This was done by allocating blocks in groups to parallel workers. - - + + This was done by allocating blocks in groups to parallel workers. + + - + - -Allow a query referencing multiple foreign tables to perform foreign table scans in parallel (Robert Haas, Kyotaro Horiguchi, Thomas Munro, Etsuro Fujita) - + + Allow a query referencing multiple foreign tables to perform + foreign table scans in parallel (Robert Haas, Kyotaro Horiguchi, + Thomas Munro, Etsuro Fujita) + - -The postgres_fdw supports these type of scans if async_capable is set. - - + + The postgres_fdw + supports these type of scans if async_capable + is set. + + - + - -Allow analyze to do page prefetching (Stephen Frost) - + + Allow analyze to do + page prefetching (Stephen Frost) + - -This is controlled by . - - + + This is controlled by . + + - + - -Improve the performance of regular expression comparisons (Tom Lane) - - + + Improve the performance of regular expression + comparisons (Tom Lane) + + - + - -Dramatically improve Unicode normalization (John Naylor) - + + Dramatically improve Unicode normalization (John Naylor) + - -This speeds normalize() and IS NORMALIZED. - - + + This speeds normalize() + and IS NORMALIZED. + + - + - -Add ability to use LZ4 compression on TOAST data (Dilip Kumar) - + + Add ability to use LZ4 + compression on TOAST data (Dilip Kumar) + - -This can be set at the column level, or set as a default via server setting . The server must be compiled with to support this feature; the default is still pglz. - - + + This can be set at the column level, or set as a default via server + setting . + The server must be compiled with + to support this feature; the default is still pglz. + + @@ -1113,7 +1284,7 @@ This can be set at the column level, or set as a default via server setting - + - -If server variable is enabled, display the query id in pg_stat_activity, -EXPLAIN VERBOSE, csvlog, and optionally in -(Julien Rouhaud) - + + If server variable + is enabled, display the query id in pg_stat_activity, + EXPLAIN + VERBOSE, csvlog, and optionally in + (Julien Rouhaud) + - -A query id computed by an extension will also be displayed. - - + + A query id computed by an extension will also be displayed. + + - + - -Add system view pg_backend_memory_contexts to report session memory usage (Atsushi Torikoshi, Fujii Masao) - - + + Add system view pg_backend_memory_contexts + to report session memory usage (Atsushi Torikoshi, Fujii Masao) + + - + - -Add function pg_log_backend_memory_contexts() to output the memory contexts of arbitrary backends (Atsushi Torikoshi) - - + + Add function pg_log_backend_memory_contexts() + to output the memory contexts of arbitrary backends (Atsushi + Torikoshi) + + - + - -Improve logging of auto-vacuum and auto-analyze (Stephen Frost, Jakub Wartak) - + + Improve logging of auto-vacuum + and auto-analyze (Stephen Frost, Jakub Wartak) + - -This reports I/O timings for auto-vacuum and auto-analyze if is enabled. Also, report buffer read and dirty rates for auto-analyze. - - + + This reports I/O timings for auto-vacuum and auto-analyze if is enabled. Also, report buffer + read and dirty rates for auto-analyze. + + - + - -Add information about the original user name supplied by the client to the output of (Jacob Champion) - - + + Add information about the original user name supplied by the + client to the output of + (Jacob Champion) + + @@ -1197,7 +1382,7 @@ Add information about the original user name supplied by the client to the outpu - + - -Add view pg_stat_progress_copy to report COPY progress (Josef Šimánek, Matthias van de Meent) - - + + Add view pg_stat_progress_copy + to report COPY progress (Josef Šimánek, + Matthias van de Meent) + + - + - -Add session statistics to the pg_stat_database system view (Laurenz Albe) - - + + Add session statistics to the pg_stat_database + system view (Laurenz Albe) + + - + - -Add columns to pg_prepared_statements to report generic and custom plan counts (Atsushi Torikoshi, Kyotaro Horiguchi) - - + + Add columns to pg_prepared_statements + to report generic and custom plan counts (Atsushi Torikoshi, + Kyotaro Horiguchi) + + - + - -Add lock wait start time to pg_locks (Atsushi Torikoshi) - - + + Add lock wait start time to pg_locks + (Atsushi Torikoshi) + + - + - -Add system view pg_stat_wal which reports WAL activity (Masahiro Ikeda) - - + + Add system view pg_stat_wal + which reports WAL activity (Masahiro Ikeda) + + - + - -Add system view pg_stat_replication_slots to report replication slot activity (Sawada Masahiko, Amit Kapila, Vignesh C) - + + Add system view pg_stat_replication_slots + to report replication slot activity (Sawada Masahiko, Amit Kapila, + Vignesh C) + - -Function pg_stat_reset_replication_slot() resets slot statistics. - - + + Function pg_stat_reset_replication_slot() + resets slot statistics. + + - + - -Improve pg_stat_activity reporting of walsender processes (Tom Lane) - + + Improve pg_stat_activity + reporting of walsender processes (Tom Lane) + - -Previously only SQL commands were reported. - - + + Previously only SQL commands were reported. + + - + - -Make the archiver process visible in pg_stat_activity (Kyotaro Horiguchi) - - + + Make the archiver process visible in + pg_stat_activity (Kyotaro Horiguchi) + + - + - -Add wait event WalReceiverExit to report WAL receiver exit wait time (Fujii Masao) - - + + Add wait event WalReceiverExit + to report WAL receiver exit wait time (Fujii + Masao) + + - + - -Implement information schema view routine_column_usage to track columns referenced by function and procedure default expressions (Peter Eisentraut) - - + + Implement information schema view routine_column_usage + to track columns referenced by function and procedure default + expressions (Peter Eisentraut) + + @@ -1336,61 +1547,73 @@ Implement information schema view pg_hba.conf keyword clientname=DN allows comparison with certificate attributes beyond the CN and can be combined with ident maps. - - + + The new pg_hba.conf + keyword clientname=DN allows comparison with + certificate attributes beyond the CN and can + be combined with ident maps. + + - + - -Allow pg_hba.conf and pg_ident.conf records to span multiple lines (Fabien Coelho) - + + Allow pg_hba.conf and pg_ident.conf + records to span multiple lines (Fabien Coelho) + - -A backslash at the end of a line allows record contents to be continued on the next line. - - + + A backslash at the end of a line allows record contents to be + continued on the next line. + + - + - -Allow the specification of a certificate revocation list (CRL) directory (Kyotaro Horiguchi) - + + Allow the specification of a certificate revocation list + (CRL) directory (Kyotaro Horiguchi) + - -This is controlled by server variable and libpq connection option sslcrldir. Previously only CRL files could be specified. - - + + This is controlled by server variable and libpq connection option sslcrldir. + Previously only CRL files could be specified. + + - + - -Allow passwords of an arbitrary length (Tom Lane, Nathan Bossart) - - + + Allow passwords of an arbitrary length (Tom Lane, Nathan Bossart) + + @@ -1401,87 +1624,96 @@ Allow passwords of an arbitrary length (Tom Lane, Nathan Bossart) - + - -Add server setting to close idle sessions (Li Japin) - + + Add server setting + to close idle sessions (Li Japin) + - -This is similar to . - - + + This is similar to . + + - + - -Change default to 0.9 (Stephen Frost) - + + Change default + to 0.9 (Stephen Frost) + - -The previous default was 0.5. - - + + The previous default was 0.5. + + - + - -Allow %P in to report the parallel group leader (Justin Pryzby) - - + + Allow %P in to report the + parallel group leader (Justin Pryzby) + + - + - -Allow to specify paths as individual, comma-separated quoted strings (Ian Lawrence Barwick) - + + Allow to specify + paths as individual, comma-separated quoted strings (Ian Lawrence + Barwick) + - -Previously all the paths had to be in a single quoted string. - - + + Previously all the paths had to be in a single quoted string. + + - + - -Allow startup allocation of dynamic shared memory (Thomas Munro) - + + Allow startup allocation of dynamic shared memory (Thomas Munro) + - -This is controlled by . This allows more use of huge pages. - - + + This is controlled by . This allows more + use of huge pages. + + - + - -Add setting to control the size of huge pages used on Linux (Odin Ugedal) - - + + Add setting to control the + size of huge pages used on Linux (Odin Ugedal) + + @@ -1494,33 +1726,39 @@ Add setting to control the size of huge pag - + - -Allow standby servers to be rewound via pg_rewind (Heikki Linnakangas) - - + + Allow standby servers to be rewound via pg_rewind + (Heikki Linnakangas) + + - + - -Allow setting to be changed during a server reload (Sergei Kornilov) - + + Allow setting to be changed + during a server reload (Sergei Kornilov) + - -You can also set restore_command to an empty string and reload to force recovery to only read from the pg_wal directory. - - + + You can also set restore_command to an empty + string and reload to force recovery to only read from the pg_wal + directory. + + - + - -Add server variable to report long recovery conflict wait times (Bertrand Drouvot, Masahiko Sawada) - - + + Add server variable to report long recovery + conflict wait times (Bertrand Drouvot, Masahiko Sawada) + + - + - -Pause recovery if the primary changes its parameters in a way that prevents replay on the hot standby (Peter Eisentraut) - + + Pause recovery if the primary changes its parameters in a way that + prevents replay on the hot standby (Peter Eisentraut) + - -Previously the standby would shut down immediately. - - + + Previously the standby would shut down immediately. + + - + - -Add function pg_get_wal_replay_pause_state() to report the recovery state (Dilip Kumar) - + + Add function pg_get_wal_replay_pause_state() + to report the recovery state (Dilip Kumar) + - -It gives more detailed information than pg_is_wal_replay_paused(), which still exists. - - + + It gives more detailed information than pg_is_wal_replay_paused(), + which still exists. + + - + - -Add new server-side variable (Haribabu Kommi, Greg Nancarrow, Tom Lane) - - + + Add new server-side variable + (Haribabu Kommi, Greg Nancarrow, Tom Lane) + + - + - -Speed truncation of small tables during recovery on clusters with a large number of shared buffers (Kirk Jamison) - - + + Speed truncation of small tables during recovery on clusters with + a large number of shared buffers (Kirk Jamison) + + - + - -Allow file system sync at the start of crash recovery on Linux (Thomas Munro) - + + Allow file system sync at the start of crash recovery on Linux + (Thomas Munro) + - -By default, Postgres opens and fsyncs every data file at the start of crash recovery. -This new setting, =syncfs, instead syncs each filesystem used by the database cluster. -This allows for faster recovery on systems with many database files. - - + + By default, Postgres opens and fsyncs every data file + at the start of crash recovery. This new setting, =syncfs, + instead syncs each filesystem used by the database cluster. + This allows for faster recovery on systems with many database files. + + - + - -Add function pg_xact_commit_timestamp_origin() to return the commit timestamp and replication origin of the specified transaction (Movead Li) - - + + Add function pg_xact_commit_timestamp_origin() + to return the commit timestamp and replication origin of the + specified transaction (Movead Li) + + - + - -Add the replication origin to the record returned by pg_last_committed_xact() (Movead Li) - - + + Add the replication origin to the record returned by pg_last_committed_xact() + (Movead Li) + + - + - -Allow replication origin functions to be controlled using standard function permission controls (Martín Marqués) - + + Allow replication origin + functions to be controlled using standard function permission + controls (Martín Marqués) + - -Previously these functions could only be executed by super-users, and this is still the default. - - + + Previously these functions could only be executed by super-users, + and this is still the default. + + - + - -Improve signal handling reliability (Fujii Masao) - + + Improve signal handling reliability (Fujii Masao) + - -GENERAL ENOUGH? - - + + GENERAL ENOUGH? + + @@ -1662,7 +1920,7 @@ GENERAL ENOUGH? - + - -Allow logical replication to stream long in-progress transactions to subscribers (Tomas Vondra, Dilip Kumar, Amit Kapila, Ajin Cherian, Nikhil Sontakke, Stas Kelvich) - + + Allow logical replication to stream long in-progress transactions + to subscribers (Tomas Vondra, Dilip Kumar, Amit Kapila, Ajin + Cherian, Nikhil Sontakke, Stas Kelvich) + - -Previously transactions that exceeded were written to disk until the transaction completed. - - + + Previously transactions that exceeded were written to disk + until the transaction completed. + + - + - -Enhance the logical replication API to allow streaming large in-progress transactions (Tomas Vondra, Dilip Kumar, Amit Kapila) - + + Enhance the logical replication API to allow + streaming large in-progress transactions (Tomas Vondra, Dilip + Kumar, Amit Kapila) + - -The output functions begin with stream. test_decoding also supports these. - - + + The output functions begin with stream. + test_decoding also supports these. + + - + - -Allow multiple transactions during table sync in logical replication (Peter Smith, Amit Kapila, and Takamichi Osumi) - - + + Allow multiple transactions during table sync in logical + replication (Peter Smith, Amit Kapila, and Takamichi Osumi) + + - + - -Immediately WAL-log subtransaction and top-level XID association (Tomas Vondra, Dilip Kumar, Amit Kapila) - + + Immediately WAL-log subtransaction and top-level + XID association (Tomas Vondra, Dilip Kumar, Amit + Kapila) + - -This is useful for logical decoding. - - + + This is useful for logical decoding. + + - + - -Enhance logical decoding APIs to handle two-phase commits (Ajin Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich) - + + Enhance logical decoding APIs to handle two-phase commits (Ajin + Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich) + - -This is controlled via pg_create_logical_replication_slot(). - - + + This is controlled via pg_create_logical_replication_slot(). + + - + - -Generate WAL invalidations message during command completion when using logical replication (Dilip Kumar, Tomas Vondra, Amit Kapila) - + + Generate WAL invalidations message during + command completion when using logical replication (Dilip Kumar, + Tomas Vondra, Amit Kapila) + - -When logical replication is disabled, WAL invalidation messages are generated at transaction completion. This allows logical streaming of in-progress transactions. - - + + When logical replication is disabled, WAL + invalidation messages are generated at transaction completion. + This allows logical streaming of in-progress transactions. + + - + - -Allow logical decoding to more efficiently process cache invalidation messages (Dilip Kumar) - + + Allow logical decoding to more efficiently process cache + invalidation messages (Dilip Kumar) + - -This allows logical decoding to work efficiently in presence of a large amount of DDL. - - + + This allows logical decoding + to work efficiently in presence of a large amount of + DDL. + + - + - -Allow control over whether logical decoding messages are sent to the replication stream (David Pirotte, Euler Taveira) - - + + Allow control over whether logical decoding messages are sent to + the replication stream (David Pirotte, Euler Taveira) + + - + - -Allow logical replication subscriptions to use binary transfer mode (Dave Cramer) - + + Allow logical replication subscriptions to use binary transfer mode + (Dave Cramer) + - -This is faster than text mode, but slightly less robust. - - + + This is faster than text mode, but slightly less robust. + + - + - -Allow logical decoding to be filtered by xid (Markus Wanner) - - + + Allow logical decoding to be filtered by xid (Markus Wanner) + + @@ -1820,67 +2100,76 @@ Allow logical decoding to be filtered by xid (Markus Wanner) - + - -Reduce the number of keywords that can't be used as column labels without AS (Mark Dilger) - + + Reduce the number of keywords that can't be used as column labels + without AS (Mark Dilger) + - -There are now 90% fewer restricted keywords. - - + + There are now 90% fewer restricted keywords. + + - + - -Allow an alias to be specified for JOIN's USING clause (Peter Eisentraut) - + + Allow an alias to be specified for JOIN's + USING clause (Peter Eisentraut) + - -The alias is created by using AS after the USING clause and represents an alias for the USING columns. - - + + The alias is created by using AS after the + USING clause and represents an alias for the + USING columns. + + - + - -Allow DISTINCT to be added to GROUP BY to remove duplicate GROUPING SET combinations (Vik Fearing) - + + Allow DISTINCT to be added to GROUP + BY to remove duplicate GROUPING SET + combinations (Vik Fearing) + - -For example, GROUP BY CUBE (a,b), CUBE (b,c) will generate duplicate grouping combinations without DISTINCT. - - + + For example, GROUP BY CUBE (a,b), CUBE (b,c) + will generate duplicate grouping combinations without + DISTINCT. + + - + - -Properly handle DEFAULT values for columns in multi-column inserts (Dean Rasheed) - + + Properly handle DEFAULT values for columns in + multi-column inserts (Dean Rasheed) + - -This used to throw an error. - - + + This used to throw an error. + + - + - -Add SQL-standard SEARCH and CYCLE clauses for common table expressions (Peter Eisentraut) - + + Add SQL-standard SEARCH + and CYCLE clauses for common table expressions (Peter + Eisentraut) + - -This could be accomplished previously using existing syntax. - - + + This could be accomplished previously using existing syntax. + + - + - -Allow the WHERE clause of ON CONFLICT to be table-qualified (Tom Lane) - + + Allow the WHERE clause of ON + CONFLICT to be table-qualified (Tom Lane) + - -Only the target table can be referenced. - - + + Only the target table can be referenced. + + @@ -1921,126 +2214,152 @@ Only the target table can be referenced. - + - -Allow REFRESH MATERIALIZED VIEW to use parallelism (Bharath Rupireddy) - - + + Allow REFRESH + MATERIALIZED VIEW to use parallelism (Bharath + Rupireddy) + + - + - -Allow REINDEX to change the tablespace of the new index (Alexey Kondratov, Michael Paquier, Justin Pryzby) - + + Allow REINDEX + to change the tablespace of the new index (Alexey Kondratov, + Michael Paquier, Justin Pryzby) + - -This is done by specifying a TABLESPACE clause. - - + + This is done by specifying a TABLESPACE clause. + + - + - -Allow REINDEX to process all child tables or indexes of a partitioned relation (Justin Pryzby, Michael Paquier) - - + + Allow REINDEX to process all child tables or + indexes of a partitioned relation (Justin Pryzby, Michael Paquier) + + - + - -Improve the performance of COPY FROM in binary mode (Bharath Rupireddy, Amit Langote) - - + + Improve the performance of COPY + FROM in binary mode (Bharath Rupireddy, Amit + Langote) + + - + - -Preserve SQL standard syntax in view definitions, if possible (Tom Lane) - + + Preserve SQL standard syntax in view definitions, if possible + (Tom Lane) + - -Previously non-function call SQL standard syntax, e.g. EXTRACT, were converted to non-SQL standard function calls. - - + + Previously non-function call + SQL standard syntax, e.g. EXTRACT, + were converted to non-SQL standard function + calls. + + - + - -Add the SQL-standard clause GRANTED BY to GRANT and REVOKE (Peter Eisentraut) - - + + Add the SQL-standard + clause GRANTED BY to GRANT and REVOKE (Peter + Eisentraut) + + - + - -Add OR REPLACE for CREATE TRIGGER (Takamichi Osumi) - + + Add OR REPLACE for CREATE TRIGGER + (Takamichi Osumi) + - -This allows pre-existing triggers to be conditionally replaced. - - + + This allows pre-existing triggers to be conditionally replaced. + + - + - -Allow TRUNCATE to operate on foreign tables (Kazutaka Onishi, Kohei KaiGai) - + + Allow TRUNCATE to + operate on foreign tables (Kazutaka Onishi, Kohei KaiGai) + - -The postgres_fdw module also now supports this. - - + + The postgres_fdw + module also now supports this. + + - + - -Allow publications to be more easily added and removed (Japin Li) - + + Allow publications to be more easily added and removed (Japin Li) + - -The new syntax is ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION. This avoids having to specify all publications to add/remove entries. - - + + The new syntax is ALTER SUBSCRIPTION + ... ADD/DROP PUBLICATION. This avoids having to + specify all publications to add/remove entries. + + - + - -Add primary keys, unique constraints, and foreign keys to system catalogs (Peter Eisentraut) - + + Add primary keys, unique constraints, and foreign keys to system catalogs (Peter Eisentraut) + - -This helps GUI tools analyze the system tables. - - + + This helps GUI tools analyze the system tables. + + - + - -Allow CURRENT_ROLE every place CURRENT_USER is accepted (Peter Eisentraut) - - + + Allow CURRENT_ROLE + every place CURRENT_USER is accepted (Peter + Eisentraut) + + @@ -2077,23 +2400,26 @@ Allow CURRENT_ROLE ever - + - -Allow extensions and built-in data types to implement subscripting (Dmitry Dolgov) - + + Allow extensions and built-in data types to implement subscripting (Dmitry Dolgov) + - -Previously subscript handling was hard-coded into the server, so that subscripting could only be applied to array types. This change allows subscript notation to be used to extract or -assign portions of a value of any type for which the concept makes sense. - - + + Previously subscript handling was hard-coded into the server, so + that subscripting could only be applied to array types. This change + allows subscript notation to be used to extract or assign portions + of a value of any type for which the concept makes sense. + + - + - -Allow subscripting of JSONB (Dmitry Dolgov) - + + Allow subscripting of JSONB (Dmitry Dolgov) + - -JSONB subscripting can be used to extract and assign to portions of JSONB documents. - - + + JSONB subscripting can be used to extract and assign + to portions of JSONB documents. + + - + - -Add support for multirange data types (Paul Jungwirth, Alexander Korotkov) - + + Add support for multirange data + types (Paul Jungwirth, Alexander Korotkov) + - -These are like range data types, but they allow the specification of multiple, ordered, non-overlapping ranges. -All existing range types now also support multirange versions. - - + + These are like range data types, but they allow the specification + of multiple, ordered, non-overlapping ranges. All existing range + types now also support multirange versions. + + - + - -Add point operators <<| and |>> to be strictly above/below geometry (Emre Hasegeli) - + + Add point operators + <<| and |>> to be strictly above/below geometry + (Emre Hasegeli) + - -Previously >^ and <^ were marked as performing this test, but non-point geometric operators used these operators for non-strict comparisons, leading to confusion. The old operators still exist but will be eventually removed. ACCURATE? - - + + Previously >^ and <^ were marked as performing this test, but + non-point geometric operators used these operators for non-strict + comparisons, leading to confusion. The old operators still exist + but will be eventually removed. ACCURATE? + + - + - -Add support for the stemming of languages Armenian, Basque, Catalan, Hindi, Serbian, and Yiddish (Peter Eisentraut) - - + + Add support for the stemming of + languages Armenian, Basque, Catalan, Hindi, Serbian, and Yiddish + (Peter Eisentraut) + + - + - -Allow tsearch data files to have unlimited line lengths (Tom Lane) - + + Allow tsearch data + files to have unlimited line lengths (Tom Lane) + - -The previous limit was 4k bytes. Also remove function t_readline(). - - + + The previous limit was 4k bytes. Also remove function + t_readline(). + + - + - -Add support for infinity and -infinity values to the numeric data type (Tom Lane) - + + Add support for infinity and -infinity values + to the numeric data type + (Tom Lane) + - -Floating point data types already supported these. - - + + Floating point data types already supported these. + + - + - -Improve the accuracy of floating point computations involving infinity (Tom Lane) - - + + Improve the accuracy of floating point computations involving + infinity (Tom Lane) + + - + - -Have non-zero float values divided by infinity return zero (Kyotaro Horiguchi) - + + Have non-zero float values + divided by infinity return zero (Kyotaro Horiguchi) + - -Previously such operations produced underflow errors. - - + + Previously such operations produced underflow errors. + + - + - -Cause floating-point division of NaN by zero to return NaN (Tom Lane) - + + Cause floating-point division of NaN by zero to return NaN + (Tom Lane) + - -Previously this returned an error. Division with Numerics always returned NaN. - - + + Previously this returned an error. Division with Numerics always + returned NaN. + + - + - -Add operators to add and subtract LSN and numeric (byte) values (Fujii Masao) - - + + Add operators to add and subtract LSN and numeric + (byte) values (Fujii Masao) + + - + - -Allow binary data transfer to be more forgiving of array and record OID mismatches (Tom Lane) - - + + Allow binary data + transfer to be more forgiving of array and record + OID mismatches (Tom Lane) + + - + - -Create composite array types for most system relations (Wenjing Zeng) - - + + Create composite array types for most system relations (Wenjing + Zeng) + + @@ -2275,22 +2626,26 @@ Create composite array types for most system relations (Wenjing Zeng) - + - -Allow SQL-language functions and procedures to use SQL-standard function bodies (Peter Eisentraut) - + + Allow SQL-language functions and procedures to use + SQL-standard function bodies (Peter Eisentraut) + - -Previously only single-quoted or $$-quoted function bodies were supported. - - + + Previously only single-quoted or $$-quoted function bodies were + supported. + + - + - -Allow procedures to have OUT parameters (Peter Eisentraut) - - + + Allow procedures to have + OUT parameters (Peter Eisentraut) + + - + - -Allow some array functions to operate on a mix of compatible data types (Tom Lane) - + + Allow some array functions to operate on a mix of compatible data + types (Tom Lane) + - -The functions are array_append(), array_prepend(), array_cat(), array_position(), -array_positions(), array_remove(), array_replace(), and -width_bucket(). Previously only identical data types could be used. - - + + The functions are array_append(), + array_prepend(), + array_cat(), + array_position(), + array_positions(), + array_remove(), + array_replace(), and width_bucket(). + Previously only identical data types could be used. + + - + - -Add SQL-standard trim_array() function (Vik Fearing) - + + Add SQL-standard trim_array() + function (Vik Fearing) + - -This can already be done with array slices. - - + + This can already be done with array slices. + + - + - -Add bytea equivalents of ltrim() and rtrim() (Joel Jacobson) - - + + Add bytea equivalents of ltrim() + and rtrim() (Joel Jacobson) + + - + - -Support negative indexes in split_part() (Nikhil Benesch) - + + Support negative indexes in split_part() + (Nikhil Benesch) + - -Negative values start from the last field and count backward. - - + + Negative values start from the last field and count backward. + + - + - -Add string_to_table() function to split a string on delimiters (Pavel Stehule) - + + Add string_to_table() + function to split a string on delimiters (Pavel Stehule) + - -This is similar to the regexp_split_to_table() function. - - + + This is similar to the regexp_split_to_table() + function. + + - + - -Add unistr() function to allow Unicode characters to be specified as backslash-hex escapes in strings (Pavel Stehule) - + + Add unistr() + function to allow Unicode characters to be specified as + backslash-hex escapes in strings (Pavel Stehule) + - -This is similar to how Unicode can be specified in literal string. - - + + This is similar to how Unicode can be specified in literal string. + + - + - -Add bit_xor() XOR aggregate function (Alexey Bashtanov) - - + + Add bit_xor() + XOR aggregate function (Alexey Bashtanov) + + - + - -Add function bit_count() to return the number of bits set in a bit or byte string (David Fetter) - - + + Add function bit_count() + to return the number of bits set in a bit or byte string (David + Fetter) + + - + - -Add date_bin() function (John Naylor) - + + Add date_bin() + function (John Naylor) + - -The function date_bin() "bins" the input timestamp into a specified interval aligned with a specified origin. - - + + The function date_bin() "bins" the input + timestamp into a specified interval aligned with a specified origin. + + - + - -Allow make_timestamp()/make_timestamptz() to accept negative years (Peter Eisentraut) - + + Allow make_timestamp()/make_timestamptz() + to accept negative years (Peter Eisentraut) + - -They are interpreted as BC years. - - + + They are interpreted as BC years. + + - + - -Add newer regular expression substring() syntax (Peter Eisentraut) - + + Add newer regular expression substring() + syntax (Peter Eisentraut) + - -The new syntax is SUBSTRING(text SIMILAR pattern ESCAPE escapechar). The previous standard syntax was SUBSTRING(text FROM pattern FOR escapechar), and is still supported by Postgres. - - + + The new syntax is SUBSTRING(text SIMILAR pattern ESCAPE + escapechar). The previous standard syntax was + SUBSTRING(text FROM pattern FOR escapechar), + and is still supported by Postgres. + + - + - -Allow complemented character class escapes \D, \S, and \W within regex brackets (Tom Lane) - - + + Allow complemented character class escapes \D, \S, + and \W within regex brackets (Tom Lane) + + - + - -Add [[:word:]] as a character class to match \w (Tom Lane) - - + + Add [[:word:]] + as a character class to match \w (Tom Lane) + + - + - -Allow more flexible data types for default values of lead() and lag() window functions (Vik Fearing) - - + + Allow more flexible data types for default values of lead() + and lag() window functions (Vik Fearing) + + - + - -Cause exp() and power() for negative-infinity exponents to return zero (Tom Lane) - + + Cause exp() and + power() for negative-infinity exponents to + return zero (Tom Lane) + - -Previously they often returned underflow errors. - - + + Previously they often returned underflow errors. + + - + - -Mark built-in type coercion functions as leakproof where possible (Tom Lane) - + + Mark built-in type coercion functions as leakproof where possible + (Tom Lane) + - -This allows more use of functions that require type conversion in security-sensitive situations. - - + + This allows more use of functions that require type conversion in + security-sensitive situations. + + - + - -Mark pg_stat_get_subscription() as returning a set (Tom Lane) - + + Mark pg_stat_get_subscription() as returning + a set (Tom Lane) + - -While it worked in previous releases, it didn't report proper optimizer statistics and couldn't be used in the target list. FUNCTION NOT DOCUMENTED. - - + + While it worked in previous releases, it didn't report proper + optimizer statistics and couldn't be used in the target list. + FUNCTION NOT DOCUMENTED. + + - + - -Prevent inet_server_addr() and inet_server_port() from being run by parallel workers (Masahiko Sawada) - - + + Prevent inet_server_addr() + and inet_server_port() from being run by + parallel workers (Masahiko Sawada) + + - + - -Change pg_describe_object(), pg_identify_object(), and -pg_identify_object_as_address() to always report helpful error messages for non-existent objects (Michael Paquier) - - + + Change pg_describe_object(), + pg_identify_object(), and + pg_identify_object_as_address() to always report + helpful error messages for non-existent objects (Michael Paquier) + + @@ -2574,42 +2986,50 @@ Change pg_describe_object()< - + - -Improve PL/pgSQL's expression and assignment parsing (Tom Lane) - + + Improve PL/pgSQL's expression and assignment parsing + (Tom Lane) + - -This adds nested record and array slicing support. - - + + This adds nested record and array slicing support. + + - + - -Allow plpgsql's RETURN QUERY to execute its query using parallelism (Tom Lane) - - + + Allow plpgsql's RETURN + QUERY to execute its query using parallelism + (Tom Lane) + + - + - -Improve performance of repeated CALLs within plpgsql procedures (Pavel Stehule, Tom Lane) - - + + Improve performance of repeated CALLs within plpgsql + procedures (Pavel Stehule, Tom Lane) + + @@ -2620,22 +3040,24 @@ Improve performance of repeated CALL - + - -Add pipeline mode to libpq (Craig Ringer, Matthieu Garrigues, Álvaro Herrera) - + + Add pipeline mode + to libpq (Craig Ringer, Matthieu Garrigues, Álvaro Herrera) + - -This allows multiple queries to be sent and only wait for completion when a specific synchronization message is sent. - - + + This allows multiple queries to be sent and only wait for completion + when a specific synchronization message is sent. + + - + - -Enhance libpq's parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane) - + + Enhance libpq's + parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C, + Tom Lane) + - -New options are read-only, primary, standby, and prefer-standby. - - + + New options are read-only, + primary, standby, and + prefer-standby. + + - + - -Improve the output format of libpq's PQtrace() (Aya Iwata, Álvaro Herrera) - - + + Improve the output format of libpq's PQtrace() + (Aya Iwata, Álvaro Herrera) + + - + - -Allow the libpq service file to have unlimited line lengths (Daniel Gustafsson) - + + Allow the libpq service file + to have unlimited line lengths (Daniel Gustafsson) + - -The previous limit was 255 bytes. - - + + The previous limit was 255 bytes. + + - + - -Allow an ECPG SQL identifier to be linked to a specific connection (Hayato Kuroda) - + + Allow an ECPG SQL identifier to be linked to + a specific connection (Hayato Kuroda) + - -This is done via DECLARE ... STATEMENT. - - + + This is done via DECLARE + ... STATEMENT. + + @@ -2702,175 +3135,201 @@ This is done via DECLARE ... - + - -Allow reindexdb to change the tablespace of the new index (Michael Paquier) - + + Allow reindexdb + to change the tablespace of the new index (Michael Paquier) + - -This is done by specifying . - - + + This is done by specifying . + + - + - -Allow vacuumdb to skip index cleanup and truncation (Nathan Bossart) - + + Allow vacuumdb + to skip index cleanup and truncation (Nathan Bossart) + - -The options are and . - - + + The options are and + . + + - + - -Allow pg_dump to dump only certain extensions (Guillaume Lelarge) - + + Allow pg_dump + to dump only certain extensions (Guillaume Lelarge) + - -This is controlled by option . - - + + This is controlled by option . + + - + - -Add pgbench permute() function to randomly shuffle values (Fabien Coelho, Hironobu Suzuki, Dean Rasheed) - - + + Add pgbench + permute() function to randomly shuffle values + (Fabien Coelho, Hironobu Suzuki, Dean Rasheed) + + - + - -Allow multiple verbose option specifications () to increase the logging verbosity (Tom Lane) - + + Allow multiple verbose option specifications () + to increase the logging verbosity (Tom Lane) + - -This is now supported by pg_dump, pg_dumpall, -and pg_restore. - - + + This is now supported by pg_dump, + pg_dumpall, + and pg_restore. + + - <xref linkend="app-psql"/> + <xref linkend="app-psql"/> - + - -Allow psql's \df and \do commands to specify function and operator argument types (Greg Sabino Mullane, Tom Lane) - + + Allow psql's \df and \do commands to + specify function and operator argument types (Greg Sabino Mullane, + Tom Lane) + - -This helps reduce the number of matches for overloaded entries. - - + + This helps reduce the number of matches for overloaded entries. + + - + - -Add an access method column to psql's \d[i|m|t]+ output (Georgios Kokolatos) - - + + Add an access method column to psql's + \d[i|m|t]+ output (Georgios Kokolatos) + + - + - -Allow psql's \dt and \di to show TOAST tables and their indexes (Justin Pryzby) - - + + Allow psql's \dt and \di to show + TOAST tables and their indexes (Justin Pryzby) + + - + - -Add psql command \dX to list extended statistics objects (Tatsuro Yamada) - - + + Add psql command \dX to list extended + statistics objects (Tatsuro Yamada) + + - + - -Fix psql's \dT to understand array syntax and backend grammar aliases, like "int" for "integer" (Greg Sabino Mullane, Tom Lane) - - + + Fix psql's \dT to understand array + syntax and backend grammar aliases, like "int" for "integer" + (Greg Sabino Mullane, Tom Lane) + + - + - -When editing the previous query or a file with psql's \e, or using \ef and \ev, ignore the contents if the editor exits without saving (Laurenz Albe) - + + When editing the previous query or a file with + psql's \e, or using \ef and \ev, ignore + the contents if the editor exits without saving (Laurenz Albe) + - -Previously, such edits would still execute the editor contents. - - + + Previously, such edits would still execute the editor contents. + + - + - -Improve psql's handling of \connect with (Tom Lane) - + + Improve psql's handling of \connect + with (Tom Lane) + - -Specifically, properly reuse the password previously specified, and prompt for a new password if the previous one failed. - - + + Specifically, properly reuse the password previously specified, + and prompt for a new password if the previous one failed. + + - + - -Improve tab completion (Vignesh C, Michael Paquier, Justin Pryzby, Georgios Kokolatos, Julien Rouhaud, ADD NAMES) - - + + Improve tab completion (Vignesh C, Michael Paquier, Justin Pryzby, + Georgios Kokolatos, Julien Rouhaud, ADD NAMES) + + @@ -2926,61 +3386,74 @@ Improve tab completion (Vignesh C, Michael Paquier, Justin Pryzby, Georgios Koko - + - -Add command-line utility pg_amcheck to simplify running contrib/amcheck operations on many relations (Mark Dilger) - - + + Add command-line utility pg_amcheck + to simplify running contrib/amcheck operations on many relations + (Mark Dilger) + + - + - -Add option to initdb (Magnus Hagander) - + + Add option to initdb + (Magnus Hagander) + - -This removes the server start instructions that are normally output. - - + + This removes the server start instructions that are normally output. + + - + - -Stop pg_upgrade from creating analyze_new_cluster script (Michael Paquier) - + + Stop pg_upgrade + from creating analyze_new_cluster script + (Michael Paquier) + - -Instead, give comparable vacuumdb instructions. - - + + Instead, give comparable vacuumdb + instructions. + + - + - -Remove support for the postmaster option (Magnus Hagander) - + + Remove support for the postmaster + option (Magnus Hagander) + - -This option was unnecessary since all passed options could already be specified directly. - - + + This option was unnecessary since all passed options could already + be specified directly. + + @@ -2991,87 +3464,101 @@ This option was unnecessary since all passed options could already be specified - + - -Rename "Default Roles" to "Predefined Roles" (Bruce Momjian, Stephen Frost) - - + + Rename "Default Roles" to "Predefined Roles" (Bruce Momjian, + Stephen Frost) + + - + - -Add documentation for the factorial() function (Peter Eisentraut) - + + Add documentation for the factorial() + function (Peter Eisentraut) + - -With the removal of the ! operator in this release, factorial() is the only built-in way to compute a factorial. - - + + With the removal of the ! operator in this release, + factorial() is the only built-in way to compute + a factorial. + + - + - + - - Source Code + + Source Code - + - + - -Add configure option --with-ssl={openssl} to behave like (Daniel Gustafsson, Michael Paquier) - + + Add configure option --with-ssl={openssl} + to behave like (Daniel Gustafsson, + Michael Paquier) + - -The option is kept for compatibility. - - + + The option is kept for + compatibility. + + - + - -Add support for abstract Unix-domain sockets (Peter Eisentraut) - + + Add support for abstract + Unix-domain sockets (Peter Eisentraut) + - -This is currently supported on Linux and Windows. - - + + This is currently supported on Linux + and Windows. + + - + - -Add to control cache overwriting (Craig Ringer) - + + Add + to control cache overwriting (Craig Ringer) + - -Previously this could only be controlled at compile time and is enabled only in assert builds. - - + + Previously this could only be controlled at compile time and is + enabled only in assert builds. + + - + - -Various improvements in valgrind detection (Álvaro Herrera, Peter Geoghegan) - - + + Various improvements in valgrind + detection (Álvaro Herrera, Peter Geoghegan) + + - + - -Add a test module for the regular expression package (Tom Lane) - - + + Add a test module for the regular expression package (Tom Lane) + + - + - -Add support for LLVM version 12 (Andres Freund) - - + + Add support for LLVM version 12 + (Andres Freund) + + - + - -Change SHA1, SHA2, and MD5 hash computations to use the OpenSSL EVP API (Michael Paquier) - + + Change SHA1, SHA2, and MD5 hash computations to use the + OpenSSL EVP API + (Michael Paquier) + - -This is more modern and supports FIPS mode. - - + + This is more modern and supports FIPS mode. + + - + - -Remove build control over the random library used (Daniel Gustafsson) - - + + Remove build control over the random library used (Daniel + Gustafsson) + + - + - -Add direct conversion routines between EUC_TW and Big5 (Heikki Linnakangas) - - + + Add direct conversion routines between EUC_TW and Big5 (Heikki + Linnakangas) + + - + - -Add collation versions for FreeBSD (Thomas Munro) - - + + Add collation versions for FreeBSD + (Thomas Munro) + + - + - -Add amadjustmembers to the index access method API (Tom Lane) - + + Add amadjustmembers + to the index access method API (Tom Lane) + - -REMOVE? - - + + REMOVE? + + @@ -3186,96 +3682,111 @@ REMOVE? - + - -Allow subscripting of hstore values (Tom Lane, Dmitry Dolgov) - - + + Allow subscripting of hstore values + (Tom Lane, Dmitry Dolgov) + + - + - -Allow GiST/GIN pg_trgm indexes to do equality lookups (Julien Rouhaud) - + + Allow GiST/GIN pg_trgm indexes + to do equality lookups (Julien Rouhaud) + - -This is similar to LIKE except no wildcards are honored. - - + + This is similar to LIKE except no wildcards + are honored. + + - + - -Allow the cube data type to be transferred in binary mode (KaiGai Kohei) - - + + Allow the cube data type + to be transferred in binary mode (KaiGai Kohei) + + - + - -Allow pgstattuple_approx() to report on TOAST tables (Peter Eisentraut) - - + + Allow pgstattuple_approx() to report on + TOAST tables (Peter Eisentraut) + + - + - -Add contrib module pg_surgery which allows changes to row visibility (Ashutosh Sharma) - + + Add contrib module pg_surgery + which allows changes to row visibility (Ashutosh Sharma) + - -This is useful for correcting database corruption. - - + + This is useful for correcting database corruption. + + - + - -Add contrib module old_snapshot to report the XID/time mapping used by an active (Robert Haas) - - + + Add contrib module old_snapshot + to report the XID/time mapping used by an active + (Robert Haas) + + - + - -Allow amcheck to also check heap pages (Mark Dilger) - + + Allow amcheck to + also check heap pages (Mark Dilger) + - -Previously it only checked B-Tree index pages. - - + + Previously it only checked B-Tree index pages. + + - + - -Allow pageinspect to inspect GiST indexes (Andrey Borodin, Heikki Linnakangas) - - + + Allow pageinspect + to inspect GiST indexes (Andrey Borodin, Heikki Linnakangas) + + - + - -Change pageinspect block numbers to be bigints (Peter Eisentraut) - - + + Change pageinspect block numbers + to be bigints + (Peter Eisentraut) + + - + - -Mark btree_gist functions as parallel safe (Steven Winfield) - - + + Mark btree_gist + functions as parallel safe (Steven Winfield) + + - + - - <link linkend="pgstatstatements">pg_stat_statements</link> + + <link linkend="pgstatstatements">pg_stat_statements</link> - + - + - -Move query hash computation from pg_stat_statements to the core server (Julien Rouhaud) - + + Move query hash computation from + pg_stat_statements to the core server + (Julien Rouhaud) + - -The new server variable 's default of auto will automatically enable query id computation when this extension is loaded. - - + + The new server variable 's + default of auto will automatically enable query + id computation when this extension is loaded. + + - + - -Allow pg_stat_statements to track top and nested statements independently (Julien Rohaud) - + + Allow pg_stat_statements to track top + and nested statements independently (Julien Rohaud) + - -Previously, when tracking all statements, identical top and nested statements were tracked together. - - + + Previously, when tracking all statements, identical top and nested + statements were tracked together. + + - + - -Add row counts for utility commands to pg_stat_statements> (Fujii Masao, Katsuragi Yuta, Seino Yuki) - - + + Add row counts for utility commands to + pg_stat_statements> (Fujii Masao, Katsuragi + Yuta, Seino Yuki) + + - + - -Add pg_stat_statements_info system view to show pg_stat_statements activity (Katsuragi Yuta, Yuki Seino, Naoki Nakamichi) - - + + Add pg_stat_statements_info system view + to show pg_stat_statements activity + (Katsuragi Yuta, Yuki Seino, Naoki Nakamichi) + + @@ -3382,7 +3909,7 @@ Add pg_stat_statements_info system view to show - + - -Allow postgres_fdw to INSERT rows in bulk (Takayuki Tsunakawa, Tomas Vondra, Amit Langote) - - + + Allow postgres_fdw to + INSERT rows in bulk (Takayuki Tsunakawa, Tomas + Vondra, Amit Langote) + + - + - -Allow postgres_fdw to import table partitions if specified by IMPORT FOREIGN SCHEMA ... LIMIT TO (Matthias van de Meent) - + + Allow postgres_fdw + to import table partitions if specified by IMPORT FOREIGN SCHEMA + ... LIMIT TO (Matthias van de Meent) + - -By default, only the root of partitioned tables is imported. - - + + By default, only the root of partitioned tables is imported. + + - + - -Add postgres_fdw function postgres_fdw_get_connections() to report open foreign server connections (Bharath Rupireddy) - - + + Add postgres_fdw function + postgres_fdw_get_connections() to report open + foreign server connections (Bharath Rupireddy) + + - + - -Allow control over whether foreign servers keep connections open after transaction completion (Bharath Rupireddy) - + + Allow control over whether foreign servers keep connections open + after transaction completion (Bharath Rupireddy) + - -This is controlled by keep_connections and defaults to on. - - + + This is controlled by keep_connections and + defaults to on. + + - + - -Allow postgres_fdw to reestablish foreign server connections if necessary (Bharath Rupireddy) - + + Allow postgres_fdw to reestablish + foreign server connections if necessary (Bharath Rupireddy) + - -Previously foreign server restarts could cause foreign table access errors. - - + + Previously foreign server restarts could cause foreign table + access errors. + + - + - -Add postgres_fdw functions to discard cached connections (Bharath Rupireddy) - - + + Add postgres_fdw functions to discard + cached connections (Bharath Rupireddy) + + @@ -3476,9 +4015,9 @@ Add postgres_fdw functions to discard cached connecti Acknowledgments - The following individuals (in alphabetical order) have contributed to this - release as patch authors, committers, reviewers, testers, or reporters of - issues. + The following individuals (in alphabetical order) have contributed + to this release as patch authors, committers, reviewers, testers, + or reporters of issues. From bc2a389efb3b52d259cefd53c16cfa00742116f2 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 23 May 2021 10:50:21 -0400 Subject: [PATCH 353/671] Be more verbose when the postmaster unexpectedly quits. Emit a LOG message when the postmaster stops because of a failure in the startup process. There already is a similar message if we exit for that reason during PM_STARTUP phase, so it seems inconsistent that there was none if the startup process fails later on. Also emit a LOG message when the postmaster stops after a crash because restart_after_crash is disabled. This seems potentially helpful in case DBAs (or developers) forget that that's set. Also, it was the only remaining place where the postmaster would do an abnormal exit without any comment as to why. In passing, remove an unreachable call of ExitPostmaster(0). Discussion: https://postgr.es/m/194914.1621641288@sss.pgh.pa.us --- src/backend/postmaster/postmaster.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 53278594722a6..5a050898fec79 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -3973,7 +3973,11 @@ PostmasterStateMachine(void) if (ReachedNormalRunning) CancelBackup(); - /* Normal exit from the postmaster is here */ + /* + * Normal exit from the postmaster is here. We don't need to log + * anything here, since the UnlinkLockFiles proc_exit callback + * will do so, and that should be the last user-visible action. + */ ExitPostmaster(0); } } @@ -3985,9 +3989,21 @@ PostmasterStateMachine(void) * startup process fails, because more than likely it will just fail again * and we will keep trying forever. */ - if (pmState == PM_NO_CHILDREN && - (StartupStatus == STARTUP_CRASHED || !restart_after_crash)) - ExitPostmaster(1); + if (pmState == PM_NO_CHILDREN) + { + if (StartupStatus == STARTUP_CRASHED) + { + ereport(LOG, + (errmsg("shutting down due to startup process failure"))); + ExitPostmaster(1); + } + if (!restart_after_crash) + { + ereport(LOG, + (errmsg("shutting down because restart_after_crash is off"))); + ExitPostmaster(1); + } + } /* * If we need to recover from a crash, wait for all non-syslogger children @@ -5439,8 +5455,7 @@ StartChildProcess(AuxProcType type) MemoryContextDelete(PostmasterContext); PostmasterContext = NULL; - AuxiliaryProcessMain(ac, av); - ExitPostmaster(0); + AuxiliaryProcessMain(ac, av); /* does not return */ } #endif /* EXEC_BACKEND */ From f5024d8d7b04de2f5f4742ab433cc38160354861 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 23 May 2021 12:12:09 -0400 Subject: [PATCH 354/671] Re-order pg_attribute columns to eliminate some padding space. Now that attcompression is just a char, there's a lot of wasted padding space after it. Move it into the group of char-wide columns to save a net of 4 bytes per pg_attribute entry. While we're at it, swap the order of attstorage and attalign to make for a more logical grouping of these columns. Also re-order actions in related code to match the new field ordering. This patch also fixes one outright bug: equalTupleDescs() failed to compare attcompression. That could, for example, cause relcache reload to fail to adopt a new value following a change. Michael Paquier and Tom Lane, per a gripe from Andres Freund. Discussion: https://postgr.es/m/20210517204803.iyk5wwvwgtjcmc5w@alap3.anarazel.de --- doc/src/sgml/catalogs.sgml | 28 ++++++++++++++-------------- src/backend/access/common/tupdesc.c | 16 +++++++++++----- src/backend/access/spgist/spgutils.c | 4 ++-- src/backend/bootstrap/bootstrap.c | 13 +++++++------ src/backend/catalog/genbki.pl | 8 ++++---- src/backend/catalog/heap.c | 19 ++++++++++--------- src/backend/catalog/index.c | 10 ++++++---- src/backend/commands/tablecmds.c | 28 ++++++++++++---------------- src/include/access/spgist_private.h | 2 +- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_attribute.h | 22 +++++++++++----------- 11 files changed, 79 insertions(+), 73 deletions(-) diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 6d06ad22b92b4..8aebc4d12f426 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -1236,6 +1236,15 @@ + + + attalign char + + + A copy of pg_type.typalign of this column's type + + + attstorage char @@ -1249,10 +1258,13 @@ - attalign char + attcompression char - A copy of pg_type.typalign of this column's type + The current compression method of the column. If it is an invalid + compression method ('\0') then column data will not + be compressed. Otherwise, 'p' = pglz compression or + 'l' = LZ4 compression. @@ -1355,18 +1367,6 @@ - - - attcompression char - - - The current compression method of the column. If it is an invalid - compression method ('\0') then column data will not - be compressed. Otherwise, 'p' = pglz compression or - 'l' = LZ4 compression. - - - attacl aclitem[] diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c index ffb275afbee7a..affbc509bdc68 100644 --- a/src/backend/access/common/tupdesc.c +++ b/src/backend/access/common/tupdesc.c @@ -424,7 +424,8 @@ equalTupleDescs(TupleDesc tupdesc1, TupleDesc tupdesc2) * general it seems safer to check them always. * * attcacheoff must NOT be checked since it's possibly not set in both - * copies. + * copies. We also intentionally ignore atthasmissing, since that's + * not very relevant in tupdescs, which lack the attmissingval field. */ if (strcmp(NameStr(attr1->attname), NameStr(attr2->attname)) != 0) return false; @@ -440,9 +441,11 @@ equalTupleDescs(TupleDesc tupdesc1, TupleDesc tupdesc2) return false; if (attr1->attbyval != attr2->attbyval) return false; + if (attr1->attalign != attr2->attalign) + return false; if (attr1->attstorage != attr2->attstorage) return false; - if (attr1->attalign != attr2->attalign) + if (attr1->attcompression != attr2->attcompression) return false; if (attr1->attnotnull != attr2->attnotnull) return false; @@ -460,7 +463,7 @@ equalTupleDescs(TupleDesc tupdesc1, TupleDesc tupdesc2) return false; if (attr1->attcollation != attr2->attcollation) return false; - /* attacl, attoptions and attfdwoptions are not even present... */ + /* variable-length fields are not even present... */ } if (tupdesc1->constr != NULL) @@ -639,12 +642,11 @@ TupleDescInitEntry(TupleDesc desc, att->attbyval = typeForm->typbyval; att->attalign = typeForm->typalign; att->attstorage = typeForm->typstorage; - att->attcollation = typeForm->typcollation; - if (IsStorageCompressible(typeForm->typstorage)) att->attcompression = GetDefaultToastCompression(); else att->attcompression = InvalidCompressionMethod; + att->attcollation = typeForm->typcollation; ReleaseSysCache(tuple); } @@ -709,6 +711,7 @@ TupleDescInitBuiltinEntry(TupleDesc desc, att->attbyval = false; att->attalign = TYPALIGN_INT; att->attstorage = TYPSTORAGE_EXTENDED; + att->attcompression = GetDefaultToastCompression(); att->attcollation = DEFAULT_COLLATION_OID; break; @@ -717,6 +720,7 @@ TupleDescInitBuiltinEntry(TupleDesc desc, att->attbyval = true; att->attalign = TYPALIGN_CHAR; att->attstorage = TYPSTORAGE_PLAIN; + att->attcompression = InvalidCompressionMethod; att->attcollation = InvalidOid; break; @@ -725,6 +729,7 @@ TupleDescInitBuiltinEntry(TupleDesc desc, att->attbyval = true; att->attalign = TYPALIGN_INT; att->attstorage = TYPSTORAGE_PLAIN; + att->attcompression = InvalidCompressionMethod; att->attcollation = InvalidOid; break; @@ -733,6 +738,7 @@ TupleDescInitBuiltinEntry(TupleDesc desc, att->attbyval = FLOAT8PASSBYVAL; att->attalign = TYPALIGN_DOUBLE; att->attstorage = TYPSTORAGE_PLAIN; + att->attcompression = InvalidCompressionMethod; att->attcollation = InvalidOid; break; diff --git a/src/backend/access/spgist/spgutils.c b/src/backend/access/spgist/spgutils.c index 8d99c9b762622..9ff280a2526ba 100644 --- a/src/backend/access/spgist/spgutils.c +++ b/src/backend/access/spgist/spgutils.c @@ -165,8 +165,8 @@ fillTypeDesc(SpGistTypeDesc *desc, Oid type) typtup = (Form_pg_type) GETSTRUCT(tp); desc->attlen = typtup->typlen; desc->attbyval = typtup->typbyval; - desc->attstorage = typtup->typstorage; desc->attalign = typtup->typalign; + desc->attstorage = typtup->typstorage; ReleaseSysCache(tp); } @@ -304,8 +304,8 @@ getSpGistTupleDesc(Relation index, SpGistTypeDesc *keyType) att->attalign = keyType->attalign; att->attstorage = keyType->attstorage; /* We shouldn't need to bother with making these valid: */ - att->attcollation = InvalidOid; att->attcompression = InvalidCompressionMethod; + att->attcollation = InvalidOid; /* In case we changed typlen, we'd better reset following offsets */ for (int i = spgFirstIncludeColumn; i < outTupDesc->natts; i++) TupleDescAttr(outTupDesc, i)->attcacheoff = -1; diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index b1552374884df..62abd008ccf00 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -699,8 +699,8 @@ DefineAttr(char *name, char *type, int attnum, int nullness) attrtypes[attnum]->atttypid = Ap->am_oid; attrtypes[attnum]->attlen = Ap->am_typ.typlen; attrtypes[attnum]->attbyval = Ap->am_typ.typbyval; - attrtypes[attnum]->attstorage = Ap->am_typ.typstorage; attrtypes[attnum]->attalign = Ap->am_typ.typalign; + attrtypes[attnum]->attstorage = Ap->am_typ.typstorage; attrtypes[attnum]->attcollation = Ap->am_typ.typcollation; /* if an array type, assume 1-dimensional attribute */ if (Ap->am_typ.typelem != InvalidOid && Ap->am_typ.typlen < 0) @@ -713,8 +713,8 @@ DefineAttr(char *name, char *type, int attnum, int nullness) attrtypes[attnum]->atttypid = TypInfo[typeoid].oid; attrtypes[attnum]->attlen = TypInfo[typeoid].len; attrtypes[attnum]->attbyval = TypInfo[typeoid].byval; - attrtypes[attnum]->attstorage = TypInfo[typeoid].storage; attrtypes[attnum]->attalign = TypInfo[typeoid].align; + attrtypes[attnum]->attstorage = TypInfo[typeoid].storage; attrtypes[attnum]->attcollation = TypInfo[typeoid].collation; /* if an array type, assume 1-dimensional attribute */ if (TypInfo[typeoid].elem != InvalidOid && @@ -724,6 +724,11 @@ DefineAttr(char *name, char *type, int attnum, int nullness) attrtypes[attnum]->attndims = 0; } + if (IsStorageCompressible(attrtypes[attnum]->attstorage)) + attrtypes[attnum]->attcompression = GetDefaultToastCompression(); + else + attrtypes[attnum]->attcompression = InvalidCompressionMethod; + /* * If a system catalog column is collation-aware, force it to use C * collation, so that its behavior is independent of the database's @@ -737,10 +742,6 @@ DefineAttr(char *name, char *type, int attnum, int nullness) attrtypes[attnum]->attcacheoff = -1; attrtypes[attnum]->atttypmod = -1; attrtypes[attnum]->attislocal = true; - if (IsStorageCompressible(attrtypes[attnum]->attstorage)) - attrtypes[attnum]->attcompression = GetDefaultToastCompression(); - else - attrtypes[attnum]->attcompression = InvalidCompressionMethod; if (nullness == BOOTCOL_NULL_FORCE_NOT_NULL) { diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index 63a907d50d5bc..112b3affdfd75 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -897,8 +897,11 @@ sub morph_row_for_pgattr $row->{atttypid} = $type->{oid}; $row->{attlen} = $type->{typlen}; $row->{attbyval} = $type->{typbyval}; - $row->{attstorage} = $type->{typstorage}; $row->{attalign} = $type->{typalign}; + $row->{attstorage} = $type->{typstorage}; + + $row->{attcompression} = + $type->{typstorage} ne 'p' && $type->{typstorage} ne 'e' ? 'p' : '\0'; # set attndims if it's an array type $row->{attndims} = $type->{typcategory} eq 'A' ? '1' : '0'; @@ -907,9 +910,6 @@ sub morph_row_for_pgattr $row->{attcollation} = $type->{typcollation} ne '0' ? $C_COLLATION_OID : 0; - $row->{attcompression} = - $type->{typstorage} ne 'p' && $type->{typstorage} ne 'e' ? 'p' : '\0'; - if (defined $attr->{forcenotnull}) { $row->{attnotnull} = 't'; diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index ba3e1ecf459bd..3dfe2e8a565e2 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -146,7 +146,8 @@ static Node *cookConstraint(ParseState *pstate, /* * The initializers below do not include trailing variable length fields, * but that's OK - we're never going to reference anything beyond the - * fixed-size portion of the structure anyway. + * fixed-size portion of the structure anyway. Fields that can default + * to zeroes are also not mentioned. */ static const FormData_pg_attribute a1 = { @@ -157,8 +158,8 @@ static const FormData_pg_attribute a1 = { .attcacheoff = -1, .atttypmod = -1, .attbyval = false, - .attstorage = TYPSTORAGE_PLAIN, .attalign = TYPALIGN_SHORT, + .attstorage = TYPSTORAGE_PLAIN, .attnotnull = true, .attislocal = true, }; @@ -171,8 +172,8 @@ static const FormData_pg_attribute a2 = { .attcacheoff = -1, .atttypmod = -1, .attbyval = true, - .attstorage = TYPSTORAGE_PLAIN, .attalign = TYPALIGN_INT, + .attstorage = TYPSTORAGE_PLAIN, .attnotnull = true, .attislocal = true, }; @@ -185,8 +186,8 @@ static const FormData_pg_attribute a3 = { .attcacheoff = -1, .atttypmod = -1, .attbyval = true, - .attstorage = TYPSTORAGE_PLAIN, .attalign = TYPALIGN_INT, + .attstorage = TYPSTORAGE_PLAIN, .attnotnull = true, .attislocal = true, }; @@ -199,8 +200,8 @@ static const FormData_pg_attribute a4 = { .attcacheoff = -1, .atttypmod = -1, .attbyval = true, - .attstorage = TYPSTORAGE_PLAIN, .attalign = TYPALIGN_INT, + .attstorage = TYPSTORAGE_PLAIN, .attnotnull = true, .attislocal = true, }; @@ -213,8 +214,8 @@ static const FormData_pg_attribute a5 = { .attcacheoff = -1, .atttypmod = -1, .attbyval = true, - .attstorage = TYPSTORAGE_PLAIN, .attalign = TYPALIGN_INT, + .attstorage = TYPSTORAGE_PLAIN, .attnotnull = true, .attislocal = true, }; @@ -233,8 +234,8 @@ static const FormData_pg_attribute a6 = { .attcacheoff = -1, .atttypmod = -1, .attbyval = true, - .attstorage = TYPSTORAGE_PLAIN, .attalign = TYPALIGN_INT, + .attstorage = TYPSTORAGE_PLAIN, .attnotnull = true, .attislocal = true, }; @@ -779,8 +780,9 @@ InsertPgAttributeTuples(Relation pg_attribute_rel, slot[slotCount]->tts_values[Anum_pg_attribute_attcacheoff - 1] = Int32GetDatum(-1); slot[slotCount]->tts_values[Anum_pg_attribute_atttypmod - 1] = Int32GetDatum(attrs->atttypmod); slot[slotCount]->tts_values[Anum_pg_attribute_attbyval - 1] = BoolGetDatum(attrs->attbyval); - slot[slotCount]->tts_values[Anum_pg_attribute_attstorage - 1] = CharGetDatum(attrs->attstorage); slot[slotCount]->tts_values[Anum_pg_attribute_attalign - 1] = CharGetDatum(attrs->attalign); + slot[slotCount]->tts_values[Anum_pg_attribute_attstorage - 1] = CharGetDatum(attrs->attstorage); + slot[slotCount]->tts_values[Anum_pg_attribute_attcompression - 1] = CharGetDatum(attrs->attcompression); slot[slotCount]->tts_values[Anum_pg_attribute_attnotnull - 1] = BoolGetDatum(attrs->attnotnull); slot[slotCount]->tts_values[Anum_pg_attribute_atthasdef - 1] = BoolGetDatum(attrs->atthasdef); slot[slotCount]->tts_values[Anum_pg_attribute_atthasmissing - 1] = BoolGetDatum(attrs->atthasmissing); @@ -790,7 +792,6 @@ InsertPgAttributeTuples(Relation pg_attribute_rel, slot[slotCount]->tts_values[Anum_pg_attribute_attislocal - 1] = BoolGetDatum(attrs->attislocal); slot[slotCount]->tts_values[Anum_pg_attribute_attinhcount - 1] = Int32GetDatum(attrs->attinhcount); slot[slotCount]->tts_values[Anum_pg_attribute_attcollation - 1] = ObjectIdGetDatum(attrs->attcollation); - slot[slotCount]->tts_values[Anum_pg_attribute_attcompression - 1] = CharGetDatum(attrs->attcompression); if (attoptions && attoptions[natts] != (Datum) 0) slot[slotCount]->tts_values[Anum_pg_attribute_attoptions - 1] = attoptions[natts]; else diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 0f8cfae4ec9d6..50b7a16bce94a 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -345,8 +345,8 @@ ConstructTupleDescriptor(Relation heapRelation, to->attndims = from->attndims; to->atttypmod = from->atttypmod; to->attbyval = from->attbyval; - to->attstorage = from->attstorage; to->attalign = from->attalign; + to->attstorage = from->attstorage; to->attcompression = from->attcompression; } else @@ -373,16 +373,16 @@ ConstructTupleDescriptor(Relation heapRelation, */ to->atttypid = keyType; to->attlen = typeTup->typlen; + to->atttypmod = exprTypmod(indexkey); to->attbyval = typeTup->typbyval; - to->attstorage = typeTup->typstorage; to->attalign = typeTup->typalign; - to->atttypmod = exprTypmod(indexkey); + to->attstorage = typeTup->typstorage; /* * For expression columns, set attcompression invalid, since * there's no table column from which to copy the value. Whenever * we actually need to compress a value, we'll use whatever the - * current value of default_compression_method is at that point in + * current value of default_toast_compression is at that point in * time. */ to->attcompression = InvalidCompressionMethod; @@ -464,6 +464,8 @@ ConstructTupleDescriptor(Relation heapRelation, to->attbyval = typeTup->typbyval; to->attalign = typeTup->typalign; to->attstorage = typeTup->typstorage; + /* As above, use the default compression method in this case */ + to->attcompression = InvalidCompressionMethod; ReleaseSysCache(tuple); } diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 85dcc330638aa..11e91c4ad33f3 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -2640,8 +2640,8 @@ MergeAttributes(List *schema, List *supers, char relpersistence, def->constraints = NIL; def->location = -1; if (CompressionMethodIsValid(attribute->attcompression)) - def->compression = pstrdup(GetCompressionMethodName( - attribute->attcompression)); + def->compression = + pstrdup(GetCompressionMethodName(attribute->attcompression)); else def->compression = NULL; inhSchema = lappend(inhSchema, def); @@ -6596,12 +6596,19 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, attribute.atttypid = typeOid; attribute.attstattarget = (newattnum > 0) ? -1 : 0; attribute.attlen = tform->typlen; - attribute.atttypmod = typmod; attribute.attnum = newattnum; - attribute.attbyval = tform->typbyval; attribute.attndims = list_length(colDef->typeName->arrayBounds); - attribute.attstorage = tform->typstorage; + attribute.atttypmod = typmod; + attribute.attbyval = tform->typbyval; attribute.attalign = tform->typalign; + attribute.attstorage = tform->typstorage; + /* do not set compression in views etc */ + if (rel->rd_rel->relkind == RELKIND_RELATION || + rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) + attribute.attcompression = GetAttributeCompression(&attribute, + colDef->compression); + else + attribute.attcompression = InvalidCompressionMethod; attribute.attnotnull = colDef->is_not_null; attribute.atthasdef = false; attribute.atthasmissing = false; @@ -6612,17 +6619,6 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, attribute.attinhcount = colDef->inhcount; attribute.attcollation = collOid; - /* - * lookup attribute's compression method and store it in the - * attr->attcompression. - */ - if (rel->rd_rel->relkind == RELKIND_RELATION || - rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) - attribute.attcompression = GetAttributeCompression(&attribute, - colDef->compression); - else - attribute.attcompression = InvalidCompressionMethod; - /* attribute.attacl is handled by InsertPgAttributeTuples() */ ReleaseSysCache(typeTuple); diff --git a/src/include/access/spgist_private.h b/src/include/access/spgist_private.h index ba3da5b5404b0..40d3b71b89e3f 100644 --- a/src/include/access/spgist_private.h +++ b/src/include/access/spgist_private.h @@ -137,8 +137,8 @@ typedef struct SpGistTypeDesc Oid type; int16 attlen; bool attbyval; - char attstorage; char attalign; + char attstorage; } SpGistTypeDesc; typedef struct SpGistState diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index d5385d4c55020..958f12e66a14e 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202105121 +#define CATALOG_VERSION_NO 202105231 #endif diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h index 560f8f00bb37d..1e26016214616 100644 --- a/src/include/catalog/pg_attribute.h +++ b/src/include/catalog/pg_attribute.h @@ -111,6 +111,12 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, */ bool attbyval; + /* + * attalign is a copy of the typalign field from pg_type for this + * attribute. See atttypid comments above. + */ + char attalign; + /*---------- * attstorage tells for VARLENA attributes, what the heap access * methods can do to it if a given tuple doesn't fit into a page. @@ -120,10 +126,10 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, char attstorage; /* - * attalign is a copy of the typalign field from pg_type for this - * attribute. See atttypid comments above. + * Compression method. Must be InvalidCompressionMethod if and only if + * typstorage is 'plain' or 'external'. */ - char attalign; + char attcompression BKI_DEFAULT('\0'); /* This flag represents the "NOT NULL" constraint */ bool attnotnull; @@ -160,12 +166,6 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, /* attribute's collation, if any */ Oid attcollation BKI_LOOKUP_OPT(pg_collation); - /* - * compression method. Must be InvalidCompressionMethod if and only if - * typstorage is 'plain' or 'external'. - */ - char attcompression BKI_DEFAULT('\0'); - #ifdef CATALOG_VARLEN /* variable-length fields start here */ /* NOTE: The following fields are not present in tuple descriptors. */ @@ -190,10 +190,10 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, * ATTRIBUTE_FIXED_PART_SIZE is the size of the fixed-layout, * guaranteed-not-null part of a pg_attribute row. This is in fact as much * of the row as gets copied into tuple descriptors, so don't expect you - * can access fields beyond attcollation except in a real tuple! + * can access the variable-length fields except in a real tuple! */ #define ATTRIBUTE_FIXED_PART_SIZE \ - (offsetof(FormData_pg_attribute,attcompression) + sizeof(char)) + (offsetof(FormData_pg_attribute,attcollation) + sizeof(Oid)) /* ---------------- * Form_pg_attribute corresponds to a pointer to a tuple with From 99c5852e20a0987eca1c38ba0c09329d4076b6a0 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Mon, 24 May 2021 12:37:11 +1200 Subject: [PATCH 355/671] Add missing NULL check when building Result Cache paths Code added in 9e215378d to disable building of Result Cache paths when not all join conditions are part of the parameterization of a unique join failed to first check if the inner path's param_info was set before checking the param_info's ppi_clauses. Add a check for NULL values here and just bail on trying to build the path if param_info is NULL. lateral_vars are not considered when deciding if the join is unique, so we're not missing out on doing the optimization when there are lateral_vars and no param_info. Reported-by: Coverity, via Tom Lane Discussion: https://postgr.es/m/457998.1621779290@sss.pgh.pa.us --- src/backend/optimizer/path/joinpath.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/backend/optimizer/path/joinpath.c b/src/backend/optimizer/path/joinpath.c index d9d48827a9ab8..b67b5177707b9 100644 --- a/src/backend/optimizer/path/joinpath.c +++ b/src/backend/optimizer/path/joinpath.c @@ -530,8 +530,9 @@ get_resultcache_path(PlannerInfo *root, RelOptInfo *innerrel, * considering doing that? */ if (extra->inner_unique && - list_length(inner_path->param_info->ppi_clauses) < - list_length(extra->restrictlist)) + (inner_path->param_info == NULL || + list_length(inner_path->param_info->ppi_clauses) < + list_length(extra->restrictlist))) return NULL; /* From 713a431c781fbfe1a22fae4991836077f0f4c513 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 24 May 2021 18:03:47 -0400 Subject: [PATCH 356/671] Doc: move some catalogs.sgml entries to the right place. pg_statistic_ext_data.stxdexpr was listed under the wrong catalog, as was pg_stats_ext.exprs. Also there was a bogus entry for pg_statistic_ext_data.stxexprs. Apparently a merge failure in commit a4d75c86b. Guillaume Lelarge and Tom Lane Discussion: https://postgr.es/m/CAECtzeUHw+w64eUFVeV_2FJviAw6oZ0wNLkmU843ZH4hAQfiWg@mail.gmail.com --- doc/src/sgml/catalogs.sgml | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 8aebc4d12f426..b26b872a06cf5 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -7518,10 +7518,11 @@ SCRAM-SHA-256$<iteration count>:&l - stxexprs pg_node_tree + stxdexpr pg_statistic[] - A list of any expressions covered by this statistics object. + Per-expression statistics, serialized as an array of + pg_statistic type @@ -7677,16 +7678,6 @@ SCRAM-SHA-256$<iteration count>:&l see . - - - - stxdexpr pg_statistic[] - - - Per-expression statistics, serialized as an array of - pg_statistic type - -
@@ -12751,19 +12742,10 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx (references pg_attribute.attname) - Names of the columns included in the extended statistics object + Name of column described by this row
- - - exprs text[] - - - Expressions included in the extended statistics object - - - inherited bool @@ -13003,10 +12985,19 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx (references pg_attribute.attname) - Names of the columns the extended statistics object is defined on + Names of the columns included in the extended statistics object + + + exprs text[] + + + Expressions included in the extended statistics object + + + kinds char[] From c242baa4a831ac2e7dcaec85feb410aefa3a996e Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Mon, 24 May 2021 17:14:02 -0700 Subject: [PATCH 357/671] Consider triggering VACUUM failsafe during scan. The wraparound failsafe mechanism added by commit 1e55e7d1 handled the one-pass strategy case (i.e. the "table has no indexes" case) by adding a dedicated failsafe check. This made up for the fact that the usual one-pass checks inside lazy_vacuum_all_indexes() cannot ever be reached during a one-pass strategy VACUUM. This approach failed to account for two-pass VACUUMs that opt out of index vacuuming up-front. The INDEX_CLEANUP off case in the only case that works like that. Fix this by performing a failsafe check every 4GB during the first scan of the heap, regardless of the details of the VACUUM. This eliminates the special case, and will make the failsafe trigger more reliably. Author: Peter Geoghegan Reported-By: Andres Freund Reviewed-By: Masahiko Sawada Discussion: https://postgr.es/m/20210424002921.pb3t7h6frupdqnkp@alap3.anarazel.de --- src/backend/access/heap/vacuumlazy.c | 43 ++++++++++++---------------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 9f1f8e340d9a3..fe18af61b3739 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -110,10 +110,9 @@ #define BYPASS_THRESHOLD_PAGES 0.02 /* i.e. 2% of rel_pages */ /* - * When a table is small (i.e. smaller than this), save cycles by avoiding - * repeated failsafe checks + * Perform a failsafe check every 4GB during the heap scan, approximately */ -#define FAILSAFE_MIN_PAGES \ +#define FAILSAFE_EVERY_PAGES \ ((BlockNumber) (((uint64) 4 * 1024 * 1024 * 1024) / BLCKSZ)) /* @@ -890,6 +889,7 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) BlockNumber nblocks, blkno, next_unskippable_block, + next_failsafe_block, next_fsm_block_to_vacuum; PGRUsage ru0; Buffer vmbuffer = InvalidBuffer; @@ -919,6 +919,7 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) nblocks = RelationGetNumberOfBlocks(vacrel->rel); next_unskippable_block = 0; + next_failsafe_block = 0; next_fsm_block_to_vacuum = 0; vacrel->rel_pages = nblocks; vacrel->scanned_pages = 0; @@ -1130,6 +1131,20 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) vacuum_delay_point(); + /* + * Regularly check if wraparound failsafe should trigger. + * + * There is a similar check inside lazy_vacuum_all_indexes(), but + * relfrozenxid might start to look dangerously old before we reach + * that point. This check also provides failsafe coverage for the + * one-pass strategy case. + */ + if (blkno - next_failsafe_block >= FAILSAFE_EVERY_PAGES) + { + lazy_check_wraparound_failsafe(vacrel); + next_failsafe_block = blkno; + } + /* * Consider if we definitely have enough space to process TIDs on page * already. If we are close to overrunning the available space for @@ -1375,17 +1390,12 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) * Periodically perform FSM vacuuming to make newly-freed * space visible on upper FSM pages. Note we have not yet * performed FSM processing for blkno. - * - * Call lazy_check_wraparound_failsafe() here, too, since we - * also don't want to do that too frequently, or too - * infrequently. */ if (blkno - next_fsm_block_to_vacuum >= VACUUM_FSM_EVERY_PAGES) { FreeSpaceMapVacuumRange(vacrel->rel, next_fsm_block_to_vacuum, blkno); next_fsm_block_to_vacuum = blkno; - lazy_check_wraparound_failsafe(vacrel); } /* @@ -2558,7 +2568,6 @@ lazy_check_needs_freeze(Buffer buf, bool *hastup, LVRelState *vacrel) /* * Trigger the failsafe to avoid wraparound failure when vacrel table has a * relfrozenxid and/or relminmxid that is dangerously far in the past. - * * Triggering the failsafe makes the ongoing VACUUM bypass any further index * vacuuming and heap vacuuming. Truncating the heap is also bypassed. * @@ -2567,24 +2576,10 @@ lazy_check_needs_freeze(Buffer buf, bool *hastup, LVRelState *vacrel) * that it started out with. * * Returns true when failsafe has been triggered. - * - * Caller is expected to call here before and after vacuuming each index in - * the case of two-pass VACUUM, or every VACUUM_FSM_EVERY_PAGES blocks in the - * case of no-indexes/one-pass VACUUM. - * - * There is also a precheck before the first pass over the heap begins, which - * is helpful when the failsafe initially triggers during a non-aggressive - * VACUUM -- the automatic aggressive vacuum to prevent wraparound that - * follows can independently trigger the failsafe right away. */ static bool lazy_check_wraparound_failsafe(LVRelState *vacrel) { - /* Avoid calling vacuum_xid_failsafe_check() very frequently */ - if (vacrel->num_index_scans == 0 && - vacrel->rel_pages <= FAILSAFE_MIN_PAGES) - return false; - /* Don't warn more than once per VACUUM */ if (vacrel->do_failsafe) return true; @@ -2600,7 +2595,7 @@ lazy_check_wraparound_failsafe(LVRelState *vacrel) vacrel->do_failsafe = true; ereport(WARNING, - (errmsg("abandoned index vacuuming of table \"%s.%s.%s\" as a failsafe after %d index scans", + (errmsg("bypassing nonessential maintenance of table \"%s.%s.%s\" as a failsafe after %d index scans", get_database_name(MyDatabaseId), vacrel->relnamespace, vacrel->relname, From cba5c70b956810c61b3778f7041f92fbb8065acb Mon Sep 17 00:00:00 2001 From: David Rowley Date: Tue, 25 May 2021 12:50:22 +1200 Subject: [PATCH 358/671] Fix setrefs.c code for Result Cache nodes Result Cache, added in 9eacee2e6 neglected to properly adjust the plan references in setrefs.c. This could lead to the following error during EXPLAIN: ERROR: cannot decompile join alias var in plan tree Fix that. Bug: 17030 Reported-by: Hans Buschmann Discussion: https://postgr.es/m/17030-5844aecae42fe223@postgresql.org --- src/backend/optimizer/plan/setrefs.c | 6 ++++++ src/test/regress/expected/join.out | 26 +++++++++++++------------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 9f40ed77e6464..61ccfd300b370 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -756,6 +756,12 @@ set_plan_refs(PlannerInfo *root, Plan *plan, int rtoffset) { ResultCache *rcplan = (ResultCache *) plan; + /* + * Result Cache does not evaluate its targetlist. It just + * uses the same targetlist from its outer subnode. + */ + set_dummy_tlist_references(plan, rtoffset); + rcplan->param_exprs = fix_scan_list(root, rcplan->param_exprs, rtoffset, NUM_EXEC_TLIST(plan)); diff --git a/src/test/regress/expected/join.out b/src/test/regress/expected/join.out index 86fd3907c538e..fec0325e73e58 100644 --- a/src/test/regress/expected/join.out +++ b/src/test/regress/expected/join.out @@ -4216,8 +4216,8 @@ where t1.f1 = ss.f1; QUERY PLAN -------------------------------------------------- Nested Loop - Output: t1.f1, i8.q1, i8.q2, q1, f1 - Join Filter: (t1.f1 = f1) + Output: t1.f1, i8.q1, i8.q2, (i8.q1), t2.f1 + Join Filter: (t1.f1 = t2.f1) -> Nested Loop Left Join Output: t1.f1, i8.q1, i8.q2 -> Seq Scan on public.text_tbl t1 @@ -4228,7 +4228,7 @@ where t1.f1 = ss.f1; Output: i8.q1, i8.q2 Filter: (i8.q2 = 123) -> Result Cache - Output: q1, f1 + Output: (i8.q1), t2.f1 Cache Key: i8.q1 -> Limit Output: (i8.q1), t2.f1 @@ -4255,13 +4255,13 @@ select * from lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1, lateral (select ss1.* from text_tbl t3 limit 1) as ss2 where t1.f1 = ss2.f1; - QUERY PLAN --------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------- Nested Loop - Output: t1.f1, i8.q1, i8.q2, q1, f1, q1, f1 - Join Filter: (t1.f1 = f1) + Output: t1.f1, i8.q1, i8.q2, (i8.q1), t2.f1, ((i8.q1)), (t2.f1) + Join Filter: (t1.f1 = (t2.f1)) -> Nested Loop - Output: t1.f1, i8.q1, i8.q2, q1, f1 + Output: t1.f1, i8.q1, i8.q2, (i8.q1), t2.f1 -> Nested Loop Left Join Output: t1.f1, i8.q1, i8.q2 -> Seq Scan on public.text_tbl t1 @@ -4272,19 +4272,19 @@ where t1.f1 = ss2.f1; Output: i8.q1, i8.q2 Filter: (i8.q2 = 123) -> Result Cache - Output: q1, f1 + Output: (i8.q1), t2.f1 Cache Key: i8.q1 -> Limit Output: (i8.q1), t2.f1 -> Seq Scan on public.text_tbl t2 Output: i8.q1, t2.f1 -> Result Cache - Output: q1, f1 - Cache Key: q1, f1 + Output: ((i8.q1)), (t2.f1) + Cache Key: (i8.q1), t2.f1 -> Limit - Output: (q1), (f1) + Output: ((i8.q1)), (t2.f1) -> Seq Scan on public.text_tbl t3 - Output: q1, f1 + Output: (i8.q1), t2.f1 (28 rows) select * from From 01e6f1a842f406170e5f717305e4a6cf0e84b3ee Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 25 May 2021 10:10:09 +0900 Subject: [PATCH 359/671] Disallow SSL renegotiation SSL renegotiation is already disabled as of 48d23c72, however this does not prevent the server to comply with a client willing to use renegotiation. In the last couple of years, renegotiation had its set of security issues and flaws (like the recent CVE-2021-3449), and it could be possible to crash the backend with a client attempting renegotiation. This commit takes one extra step by disabling renegotiation in the backend in the same way as SSL compression (f9264d15) or tickets (97d3a0b0). OpenSSL 1.1.0h has added an option named SSL_OP_NO_RENEGOTIATION able to achieve that. In older versions there is an option called SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS that was undocumented, and could be set within the SSL object created when the TLS connection opens, but I have decided not to use it, as it feels trickier to rely on, and it is not official. Note that this option is not usable in OpenSSL < 1.1.0h as the internal contents of the *SSL object are hidden to applications. SSL renegotiation concerns protocols up to TLSv1.2. Per original report from Robert Haas, with a patch based on a suggestion by Andres Freund. Author: Michael Paquier Reviewed-by: Daniel Gustafsson Discussion: https://postgr.es/m/YKZBXx7RhU74FlTE@paquier.xyz Backpatch-through: 9.6 --- src/backend/libpq/be-secure-openssl.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/backend/libpq/be-secure-openssl.c b/src/backend/libpq/be-secure-openssl.c index c4e8113241d39..db9580c20df7c 100644 --- a/src/backend/libpq/be-secure-openssl.c +++ b/src/backend/libpq/be-secure-openssl.c @@ -251,6 +251,16 @@ be_tls_init(bool isServerStart) /* disallow SSL compression */ SSL_CTX_set_options(context, SSL_OP_NO_COMPRESSION); +#ifdef SSL_OP_NO_RENEGOTIATION + + /* + * Disallow SSL renegotiation, option available since 1.1.0h. This + * concerns only TLSv1.2 and older protocol versions, as TLSv1.3 has no + * support for renegotiation. + */ + SSL_CTX_set_options(context, SSL_OP_NO_RENEGOTIATION); +#endif + /* set up ephemeral DH and ECDH keys */ if (!initialize_dh(context, isServerStart)) goto error; From 0734b0e983443882ec509ab4501c30ba9b706f5f Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Tue, 25 May 2021 09:26:53 +0530 Subject: [PATCH 360/671] Improve docs and error messages for parallel vacuum. The error messages, docs, and one of the options were using 'parallel degree' to indicate parallelism used by vacuum command. We normally use 'parallel workers' at other places so change it for parallel vacuum accordingly. Author: Bharath Rupireddy Reviewed-by: Dilip Kumar, Amit Kapila Backpatch-through: 13 Discussion: https://postgr.es/m/CALj2ACWz=PYrrFXVsEKb9J1aiX4raA+UBe02hdRp_zqDkrWUiw@mail.gmail.com --- doc/src/sgml/ref/vacuumdb.sgml | 6 +++--- src/backend/commands/vacuum.c | 2 +- src/bin/scripts/vacuumdb.c | 4 ++-- src/test/regress/expected/vacuum.out | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/src/sgml/ref/vacuumdb.sgml b/doc/src/sgml/ref/vacuumdb.sgml index 843a82e871172..3e7f7ed68fbbb 100644 --- a/doc/src/sgml/ref/vacuumdb.sgml +++ b/doc/src/sgml/ref/vacuumdb.sgml @@ -275,11 +275,11 @@ PostgreSQL documentation
- - + + - Specify the parallel degree of parallel vacuum. + Specify the number of parallel workers for parallel vacuum. This allows the vacuum to leverage multiple CPUs to process indexes. See . diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index d549d0d86fb12..7421d7cfbd363 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -165,7 +165,7 @@ ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel) if (nworkers < 0 || nworkers > MAX_PARALLEL_WORKER_LIMIT) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("parallel vacuum degree must be between 0 and %d", + errmsg("parallel workers for vacuum must be between 0 and %d", MAX_PARALLEL_WORKER_LIMIT), parser_errposition(pstate, opt->location))); diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c index 7901c41f16014..069a861aab79e 100644 --- a/src/bin/scripts/vacuumdb.c +++ b/src/bin/scripts/vacuumdb.c @@ -200,7 +200,7 @@ main(int argc, char *argv[]) vacopts.parallel_workers = atoi(optarg); if (vacopts.parallel_workers < 0) { - pg_log_error("parallel vacuum degree must be a non-negative integer"); + pg_log_error("parallel workers for vacuum must be greater than or equal to zero"); exit(1); } break; @@ -1000,7 +1000,7 @@ help(const char *progname) printf(_(" --no-index-cleanup don't remove index entries that point to dead tuples\n")); printf(_(" --no-process-toast skip the TOAST table associated with the table to vacuum\n")); printf(_(" --no-truncate don't truncate empty pages at the end of the table\n")); - printf(_(" -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n")); + printf(_(" -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n")); printf(_(" -q, --quiet don't write any messages\n")); printf(_(" --skip-locked skip relations that cannot be immediately locked\n")); printf(_(" -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n")); diff --git a/src/test/regress/expected/vacuum.out b/src/test/regress/expected/vacuum.out index 90cea6caa86d3..5e657849aadd5 100644 --- a/src/test/regress/expected/vacuum.out +++ b/src/test/regress/expected/vacuum.out @@ -110,7 +110,7 @@ VACUUM (PARALLEL 2) pvactst; UPDATE pvactst SET i = i WHERE i < 1000; VACUUM (PARALLEL 0) pvactst; -- disable parallel vacuum VACUUM (PARALLEL -1) pvactst; -- error -ERROR: parallel vacuum degree must be between 0 and 1024 +ERROR: parallel workers for vacuum must be between 0 and 1024 LINE 1: VACUUM (PARALLEL -1) pvactst; ^ VACUUM (PARALLEL 2, INDEX_CLEANUP FALSE) pvactst; From 0c6b92d9c6fb74255467573fde54f65139b26603 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Tue, 25 May 2021 10:51:45 +0530 Subject: [PATCH 361/671] Doc: Update logical decoding stats information. Add the information of pg_stat_replication_slots view along with other system catalogs related to logical decoding. Author: Vignesh C Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de --- doc/src/sgml/logicaldecoding.sgml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/src/sgml/logicaldecoding.sgml b/doc/src/sgml/logicaldecoding.sgml index a7ec5c3577678..d2c6e15566257 100644 --- a/doc/src/sgml/logicaldecoding.sgml +++ b/doc/src/sgml/logicaldecoding.sgml @@ -400,7 +400,10 @@ postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NU pg_stat_replication view provide information about the current state of replication slots and streaming replication connections respectively. These views apply to both physical and - logical replication. + logical replication. The + + pg_stat_replication_slots + view provides statistics information about the logical replication slots. From fb0f5f0172edf9f63c8f70ea9c1ec043b61c770e Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 25 May 2021 14:27:18 +0900 Subject: [PATCH 362/671] Fix memory leak when de-toasting compressed values in VACUUM FULL/CLUSTER VACUUM FULL and CLUSTER can be used to enforce the use of the existing compression method of a toastable column if a value currently stored is compressed with a method that does not match the column's defined method. The code in charge of decompressing and recompressing toast values at rewrite left around the detoasted values, causing an accumulation of memory allocated in TopTransactionContext. When processing large relations, this could cause the system to run out of memory. The detoasted values are not needed once their tuple is rewritten, and this commit ensures that the necessary cleanup happens. Issue introduced by bbe0a81d. The comments of the area are reordered a bit while on it. Reported-by: Andres Freund Analyzed-by: Andres Freund Author: Michael Paquier Reviewed-by: Dilip Kumar Discussion: https://postgr.es/m/20210521211929.pcehg6f23icwstdb@alap3.anarazel.de --- src/backend/access/heap/heapam_handler.c | 31 +++++++++++++++++------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index 61d90448161d9..8e6e8d5169806 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -2463,24 +2463,27 @@ reform_and_rewrite_tuple(HeapTuple tuple, TupleDesc newTupDesc = RelationGetDescr(NewHeap); HeapTuple copiedTuple; int i; + bool values_free[MaxTupleAttributeNumber]; + + memset(values_free, 0, newTupDesc->natts * sizeof(bool)); heap_deform_tuple(tuple, oldTupDesc, values, isnull); - /* Be sure to null out any dropped columns */ for (i = 0; i < newTupDesc->natts; i++) { + /* Be sure to null out any dropped columns */ if (TupleDescAttr(newTupDesc, i)->attisdropped) isnull[i] = true; - - /* - * Use this opportunity to force recompression of any data that's - * compressed with some TOAST compression method other than the one - * configured for the column. We don't actually need to perform the - * compression here; we just need to decompress. That will trigger - * recompression later on. - */ else if (!isnull[i] && TupleDescAttr(newTupDesc, i)->attlen == -1) { + /* + * Use this opportunity to force recompression of any data that's + * compressed with some TOAST compression method other than the + * one configured for the column. We don't actually need to + * perform the compression here; we just need to decompress. That + * will trigger recompression later on. + */ + struct varlena *new_value; ToastCompressionId cmid; char cmethod; @@ -2507,7 +2510,10 @@ reform_and_rewrite_tuple(HeapTuple tuple, /* if compression method doesn't match then detoast the value */ if (TupleDescAttr(newTupDesc, i)->attcompression != cmethod) + { values[i] = PointerGetDatum(detoast_attr(new_value)); + values_free[i] = true; + } } } @@ -2516,6 +2522,13 @@ reform_and_rewrite_tuple(HeapTuple tuple, /* The heap rewrite module does the rest */ rewrite_heap_tuple(rwstate, tuple, copiedTuple); + /* Free any value detoasted previously */ + for (i = 0; i < newTupDesc->natts; i++) + { + if (values_free[i]) + pfree(DatumGetPointer(values[i])); + } + heap_freetuple(copiedTuple); } From 8673a37c85fef00dd5b9c04197538142bec10542 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 25 May 2021 11:49:54 +0200 Subject: [PATCH 363/671] postgresql.conf.sample: Make vertical spacing consistent --- src/backend/utils/misc/postgresql.conf.sample | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 6e36e4c2eff6d..9c4c4a9eec313 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -578,6 +578,7 @@ # -1 disables, 0 logs all temp files #log_timezone = 'GMT' + #------------------------------------------------------------------------------ # PROCESS TITLE #------------------------------------------------------------------------------ @@ -726,6 +727,7 @@ #dynamic_library_path = '$libdir' #gin_fuzzy_search_limit = 0 + #------------------------------------------------------------------------------ # LOCK MANAGEMENT #------------------------------------------------------------------------------ From 5e0b1aeb2dfed4f1eb7ac5154c1573885a70db41 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Tue, 25 May 2021 12:53:29 -0400 Subject: [PATCH 364/671] Make detach-partition-concurrently-3 less timing-sensitive This recently added test has shown to be too sensitive to timing when sending a cancel to a session waiting for a lock. We fix this by running a no-op query in the blocked session immediately after the cancel; this avoids the session that sent the cancel sending another query immediately before the cancel has been reported. Idea by Noah Misch. With that fix, we sometimes see that the cancel error report is shown only relative to the step that is cancelled, instead of together with the step that sends the cancel. To increase the probability that both steps are shown togeter, add a 0.1s sleep to the cancel. In normal conditions this appears sufficient to silence most failures, but we'll see that the slower buildfarm members say about it. Reported-by: Takamichi Osumi Discussion: https://postgr.es/m/OSBPR01MB4888C4ABA361C7E81094AC66ED269@OSBPR01MB4888.jpnprd01.prod.outlook.com --- .../detach-partition-concurrently-3.out | 162 ++++++++++-------- .../detach-partition-concurrently-3.spec | 44 +++-- 2 files changed, 115 insertions(+), 91 deletions(-) diff --git a/src/test/isolation/expected/detach-partition-concurrently-3.out b/src/test/isolation/expected/detach-partition-concurrently-3.out index bbb9d151fb7f9..96ee090d531cd 100644 --- a/src/test/isolation/expected/detach-partition-concurrently-3.out +++ b/src/test/isolation/expected/detach-partition-concurrently-3.out @@ -1,6 +1,6 @@ Parsed test spec with 2 sessions -starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1describe s1alter +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1describe s1alter step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -8,12 +8,13 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s1describe: SELECT 'd3_listp' AS root, * FROM pg_partition_tree('d3_listp') UNION ALL SELECT 'd3_listp1', * FROM pg_partition_tree('d3_listp1'); @@ -25,7 +26,7 @@ d3_listp1 d3_listp1 t 0 step s1alter: ALTER TABLE d3_listp1 ALTER a DROP NOT NULL; ERROR: cannot alter partition "d3_listp1" with an incomplete detach -starting permutation: s2snitch s1b s1s s2detach s1cancel s1insert s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1insert s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -33,17 +34,18 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1insert: INSERT INTO d3_listp VALUES (1); ERROR: no partition of relation "d3_listp" found for row step s1c: COMMIT; -starting permutation: s2snitch s1brr s1s s2detach s1cancel s1insert s1c s1spart +starting permutation: s2snitch s1brr s1s s2detach s1cancel s2noop s1insert s1c s1spart step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1s: SELECT * FROM d3_listp; @@ -51,12 +53,13 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1insert: INSERT INTO d3_listp VALUES (1); step s1c: COMMIT; step s1spart: SELECT * FROM d3_listp1; @@ -65,7 +68,7 @@ a 1 1 -starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1insertpart +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1insertpart step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -73,16 +76,17 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s1insertpart: INSERT INTO d3_listp1 VALUES (1); -starting permutation: s2snitch s1b s1s s2detach2 s1cancel s1c s1brr s1insert s1s s1insert s1c +starting permutation: s2snitch s1b s1s s2detach2 s1cancel s2noop s1c s1brr s1insert s1s s1insert s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -90,12 +94,13 @@ a 1 step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach2: <... completed> error in steps s1cancel s2detach2: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1insert: INSERT INTO d3_listp VALUES (1); @@ -107,7 +112,7 @@ a step s1insert: INSERT INTO d3_listp VALUES (1); step s1c: COMMIT; -starting permutation: s2snitch s1b s1s s2detach2 s1cancel s1c s1brr s1s s1insert s1s s1c +starting permutation: s2snitch s1b s1s s2detach2 s1cancel s2noop s1c s1brr s1s s1insert s1s s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -115,12 +120,13 @@ a 1 step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach2: <... completed> error in steps s1cancel s2detach2: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1s: SELECT * FROM d3_listp; @@ -135,7 +141,7 @@ a 1 step s1c: COMMIT; -starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1drop s1list +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1drop s1list step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -143,12 +149,13 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s1drop: DROP TABLE d3_listp; step s1list: SELECT relname FROM pg_catalog.pg_class @@ -156,7 +163,7 @@ step s1list: SELECT relname FROM pg_catalog.pg_class relname -starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1trunc s1spart +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1trunc s1spart step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -164,12 +171,13 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s1trunc: TRUNCATE TABLE d3_listp; step s1spart: SELECT * FROM d3_listp1; @@ -177,7 +185,7 @@ a 1 -starting permutation: s2snitch s1b s1s s2detach s1cancel s2detach2 s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s2detach2 s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -185,17 +193,18 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; ERROR: partition "d3_listp1" already pending detach in partitioned table "public.d3_listp" step s1c: COMMIT; -starting permutation: s2snitch s1b s1s s2detach s1cancel s2detachfinal s1c s2detach2 +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s2detachfinal s1c s2detach2 step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -203,18 +212,19 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; step s1c: COMMIT; step s2detachfinal: <... completed> step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; -starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1droppart s2detach2 +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1droppart s2detach2 step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -222,17 +232,18 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s1droppart: DROP TABLE d3_listp1; step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; -starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s2begin s2drop s1s s2commit +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s2begin s2drop s1s s2commit step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -240,12 +251,13 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s2begin: BEGIN; step s2drop: DROP TABLE d3_listp1; @@ -255,7 +267,7 @@ step s1s: <... completed> a -starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1b s1spart s2detachfinal s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1b s1spart s2detachfinal s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -263,12 +275,13 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s1b: BEGIN; step s1spart: SELECT * FROM d3_listp1; @@ -279,7 +292,7 @@ step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; -starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1b s1s s2detachfinal s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1b s1s s2detachfinal s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -287,12 +300,13 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -301,7 +315,7 @@ a step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; step s1c: COMMIT; -starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1b s1spart s2detachfinal s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1b s1spart s2detachfinal s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -309,12 +323,13 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s1b: BEGIN; step s1spart: SELECT * FROM d3_listp1; @@ -325,7 +340,7 @@ step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; -starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s2begin s2detachfinal s2commit +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s2begin s2detachfinal s2commit step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -333,18 +348,19 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s2begin: BEGIN; step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; step s2commit: COMMIT; -starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s2begin s2detachfinal s1spart s2commit +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s2begin s2detachfinal s1spart s2commit step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -352,12 +368,13 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s2begin: BEGIN; step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; @@ -368,7 +385,7 @@ a 1 -starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s2begin s2detachfinal s1insertpart s2commit +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s2begin s2detachfinal s1insertpart s2commit step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -376,12 +393,13 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; -pg_cancel_backend +step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: COMMIT; step s2begin: BEGIN; step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; diff --git a/src/test/isolation/specs/detach-partition-concurrently-3.spec b/src/test/isolation/specs/detach-partition-concurrently-3.spec index 5a8351fc83ebd..13ad84ac03739 100644 --- a/src/test/isolation/specs/detach-partition-concurrently-3.spec +++ b/src/test/isolation/specs/detach-partition-concurrently-3.spec @@ -1,4 +1,8 @@ # Try various things to happen to a partition with an incomplete detach +# +# Note: Always keep "s2noop" right after "s1cancel" in permutations. This +# reduces the probability of the timing problem that the cancel error report +# is shown together with the next query instead of with the cancel query. setup { @@ -18,7 +22,8 @@ step "s1b" { BEGIN; } step "s1brr" { BEGIN ISOLATION LEVEL REPEATABLE READ; } step "s1s" { SELECT * FROM d3_listp; } step "s1spart" { SELECT * FROM d3_listp1; } -step "s1cancel" { SELECT pg_cancel_backend(pid) FROM d3_pid; } +# Sleep 0.1s after sending cancel, to give s2 time to react +step "s1cancel" { SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; } step "s1c" { COMMIT; } step "s1alter" { ALTER TABLE d3_listp1 ALTER a DROP NOT NULL; } step "s1insert" { INSERT INTO d3_listp VALUES (1); } @@ -36,43 +41,44 @@ step "s2begin" { BEGIN; } step "s2snitch" { INSERT INTO d3_pid SELECT pg_backend_pid(); } step "s2detach" { ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; } step "s2detach2" { ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; } +step "s2noop" { UNLISTEN noop; } step "s2detachfinal" { ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; } step "s2drop" { DROP TABLE d3_listp1; } step "s2commit" { COMMIT; } # Try various things while the partition is in "being detached" state, with # no session waiting. -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s1describe" "s1alter" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1insert" "s1c" -permutation "s2snitch" "s1brr" "s1s" "s2detach" "s1cancel" "s1insert" "s1c" "s1spart" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s1insertpart" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1describe" "s1alter" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1insert" "s1c" +permutation "s2snitch" "s1brr" "s1s" "s2detach" "s1cancel" "s2noop" "s1insert" "s1c" "s1spart" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1insertpart" # Test partition descriptor caching -permutation "s2snitch" "s1b" "s1s" "s2detach2" "s1cancel" "s1c" "s1brr" "s1insert" "s1s" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach2" "s1cancel" "s1c" "s1brr" "s1s" "s1insert" "s1s" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach2" "s1cancel" "s2noop" "s1c" "s1brr" "s1insert" "s1s" "s1insert" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach2" "s1cancel" "s2noop" "s1c" "s1brr" "s1s" "s1insert" "s1s" "s1c" # "drop" here does both tables -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s1drop" "s1list" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1drop" "s1list" # "truncate" only does parent, not partition -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s1trunc" "s1spart" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1trunc" "s1spart" # If a partition pending detach exists, we cannot drop another one -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2detach2" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2detachfinal" "s1c" "s2detach2" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s1droppart" "s2detach2" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s2detach2" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s2detachfinal" "s1c" "s2detach2" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1droppart" "s2detach2" # When a partition with incomplete detach is dropped, we grab lock on parent too. -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s2begin" "s2drop" "s1s" "s2commit" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s2begin" "s2drop" "s1s" "s2commit" # Partially detach, then select and try to complete the detach. Reading # from partition blocks (AEL is required on partition); reading from parent # does not block. -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s1b" "s1spart" "s2detachfinal" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s1b" "s1s" "s2detachfinal" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1b" "s1spart" "s2detachfinal" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1b" "s1s" "s2detachfinal" "s1c" # DETACH FINALIZE in a transaction block. No insert/select on the partition # is allowed concurrently with that. -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s1b" "s1spart" "s2detachfinal" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s2begin" "s2detachfinal" "s2commit" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s2begin" "s2detachfinal" "s1spart" "s2commit" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1c" "s2begin" "s2detachfinal" "s1insertpart" "s2commit" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1b" "s1spart" "s2detachfinal" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s2begin" "s2detachfinal" "s2commit" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s2begin" "s2detachfinal" "s1spart" "s2commit" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s2begin" "s2detachfinal" "s1insertpart" "s2commit" From e30e3fdea873e4e9517c490232ea1d3bcef6c643 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 25 May 2021 12:55:52 -0400 Subject: [PATCH 365/671] Fix use of uninitialized variable in inline_function(). Commit e717a9a18 introduced a code path that bypassed the call of get_expr_result_type, which is not good because we need its rettupdesc result to pass to check_sql_fn_retval. We'd failed to notice right away because the code path in which check_sql_fn_retval uses that argument is fairly hard to reach in this context. It's not impossible though, and in any case inline_function would have no business assuming that check_sql_fn_retval doesn't need that value. To fix, move get_expr_result_type out of the if-block, which in turn requires moving the construction of the dummy FuncExpr out of it. Per report from Ranier Vilela. (I'm bemused by the lack of any compiler complaints...) Discussion: https://postgr.es/m/CAEudQAqBqQpQ3HruWAGU_7WaMJ7tntpk0T8k_dVtNB46DqdBgw@mail.gmail.com --- src/backend/optimizer/util/clauses.c | 44 ++++++++++++++-------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index e117ab976e62b..517712a8f4c5c 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -4317,6 +4317,22 @@ inline_function(Oid funcid, Oid result_type, Oid result_collid, ALLOCSET_DEFAULT_SIZES); oldcxt = MemoryContextSwitchTo(mycxt); + /* + * We need a dummy FuncExpr node containing the already-simplified + * arguments. (In some cases we don't really need it, but building it is + * cheap enough that it's not worth contortions to avoid.) + */ + fexpr = makeNode(FuncExpr); + fexpr->funcid = funcid; + fexpr->funcresulttype = result_type; + fexpr->funcretset = false; + fexpr->funcvariadic = funcvariadic; + fexpr->funcformat = COERCE_EXPLICIT_CALL; /* doesn't matter */ + fexpr->funccollid = result_collid; /* doesn't matter */ + fexpr->inputcollid = input_collid; + fexpr->args = args; + fexpr->location = -1; + /* Fetch the function body */ tmp = SysCacheGetAttr(PROCOID, func_tuple, @@ -4359,32 +4375,11 @@ inline_function(Oid funcid, Oid result_type, Oid result_collid, } else { - /* - * Set up to handle parameters while parsing the function body. We - * need a dummy FuncExpr node containing the already-simplified - * arguments to pass to prepare_sql_fn_parse_info. (In some cases we - * don't really need that, but for simplicity we always build it.) - */ - fexpr = makeNode(FuncExpr); - fexpr->funcid = funcid; - fexpr->funcresulttype = result_type; - fexpr->funcretset = false; - fexpr->funcvariadic = funcvariadic; - fexpr->funcformat = COERCE_EXPLICIT_CALL; /* doesn't matter */ - fexpr->funccollid = result_collid; /* doesn't matter */ - fexpr->inputcollid = input_collid; - fexpr->args = args; - fexpr->location = -1; - + /* Set up to handle parameters while parsing the function body. */ pinfo = prepare_sql_fn_parse_info(func_tuple, (Node *) fexpr, input_collid); - /* fexpr also provides a convenient way to resolve a composite result */ - (void) get_expr_result_type((Node *) fexpr, - NULL, - &rettupdesc); - /* * We just do parsing and parse analysis, not rewriting, because * rewriting will not affect table-free-SELECT-only queries, which is @@ -4434,6 +4429,11 @@ inline_function(Oid funcid, Oid result_type, Oid result_collid, list_length(querytree->targetList) != 1) goto fail; + /* If the function result is composite, resolve it */ + (void) get_expr_result_type((Node *) fexpr, + NULL, + &rettupdesc); + /* * Make sure the function (still) returns what it's declared to. This * will raise an error if wrong, but that's okay since the function would From eb43bdbf5104c183412aac0fccf8e515e60d9212 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Tue, 25 May 2021 19:32:22 -0400 Subject: [PATCH 366/671] Make detach-partition-concurrently-4 less timing sensitive Same as 5e0b1aeb2dfe, for the companion test file. This one seems lower probability (only two failures in a month of runs); I was hardly able to reproduce a failure without a patch, so the fact that I was also unable to reproduce one with it doesn't say anything. We'll have to wait for further buildfarm results to see if we need any further adjustments. Discussion: https://postgr.es/m/20210524090712.GA3771394@rfd.leadboat.com --- .../detach-partition-concurrently-4.out | 90 ++++++++++--------- .../detach-partition-concurrently-4.spec | 29 +++--- 2 files changed, 68 insertions(+), 51 deletions(-) diff --git a/src/test/isolation/expected/detach-partition-concurrently-4.out b/src/test/isolation/expected/detach-partition-concurrently-4.out index 21676753748bf..e5dc40d0769e4 100644 --- a/src/test/isolation/expected/detach-partition-concurrently-4.out +++ b/src/test/isolation/expected/detach-partition-concurrently-4.out @@ -1,6 +1,6 @@ Parsed test spec with 3 sessions -starting permutation: s2snitch s1b s1s s2detach s1cancel s1insert s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1s: select * from d4_primary; @@ -9,12 +9,13 @@ a 1 2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; -pg_cancel_backend +step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; @@ -33,7 +34,7 @@ step s2detach: <... completed> error in steps s1insert s2detach: ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; -starting permutation: s2snitch s1brr s1s s2detach s1cancel s1insert s1c +starting permutation: s2snitch s1brr s1s s2detach s1cancel s2noop s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1brr: begin isolation level repeatable read; step s1s: select * from d4_primary; @@ -42,12 +43,13 @@ a 1 2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; -pg_cancel_backend +step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; @@ -66,17 +68,18 @@ step s2detach: <... completed> error in steps s1insert s2detach: ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; -starting permutation: s2snitch s1b s1declare s2detach s1cancel s1fetchall s1insert s1c +starting permutation: s2snitch s1b s1declare s2detach s1cancel s2noop s1fetchall s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1declare: declare f cursor for select * from d4_primary; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; -pg_cancel_backend +step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1fetchall: fetch all from f; a @@ -101,17 +104,18 @@ step s2detach: <... completed> error in steps s1insert s2detach: ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; -starting permutation: s2snitch s1b s1declare s2detach s1cancel s1svpt s1insert s1rollback s1fetchall s1c +starting permutation: s2snitch s1b s1declare s2detach s1cancel s2noop s1svpt s1insert s1rollback s1fetchall s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1declare: declare f cursor for select * from d4_primary; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; -pg_cancel_backend +step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1svpt: savepoint f; step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" @@ -140,15 +144,16 @@ a step s1c: commit; step s2detach: <... completed> -starting permutation: s2snitch s1b s2detach s1declare s1cancel s1fetchall s1insert s1c +starting permutation: s2snitch s1b s2detach s1declare s1cancel s2noop s1fetchall s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1declare: declare f cursor for select * from d4_primary; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; -pg_cancel_backend +step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; +pg_cancel_backendpg_sleep -t +t +step s2noop: UNLISTEN noop; step s1fetchall: fetch all from f; a @@ -170,15 +175,16 @@ step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; -starting permutation: s2snitch s1b s2detach s1declare s1cancel s1svpt s1insert s1rollback s1fetchall s1c +starting permutation: s2snitch s1b s2detach s1declare s1cancel s2noop s1svpt s1insert s1rollback s1fetchall s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1declare: declare f cursor for select * from d4_primary; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; -pg_cancel_backend +step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; +pg_cancel_backendpg_sleep -t +t +step s2noop: UNLISTEN noop; step s1svpt: savepoint f; step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" @@ -204,7 +210,7 @@ a 2 step s1c: commit; -starting permutation: s2snitch s1brr s1declare2 s1fetchone s2detach s1cancel s1updcur s1c +starting permutation: s2snitch s1brr s1declare2 s1fetchone s2detach s1cancel s2noop s1updcur s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1brr: begin isolation level repeatable read; step s1declare2: declare f cursor for select * from d4_fk where a = 2; @@ -213,12 +219,13 @@ a 2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; -pg_cancel_backend +step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1updcur: update d4_fk set a = 1 where current of f; ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; @@ -265,7 +272,7 @@ ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk step s1c: commit; step s2detach: <... completed> -starting permutation: s2snitch s1b s1s s2detach s3brr s3insert s3commit s1cancel s1c +starting permutation: s2snitch s1b s1s s2detach s3brr s3insert s3commit s1cancel s2noop s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1s: select * from d4_primary; @@ -278,12 +285,13 @@ step s3brr: begin isolation level repeatable read; step s3insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s3commit: commit; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; -pg_cancel_backend +step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s1c: commit; starting permutation: s2snitch s1b s1s s2detach s3brr s3insert s3commit s1c @@ -302,7 +310,7 @@ step s3commit: commit; step s1c: commit; step s2detach: <... completed> -starting permutation: s2snitch s1brr s1s s2detach s1cancel s3vacfreeze s1s s1insert s1c +starting permutation: s2snitch s1brr s1s s2detach s1cancel s2noop s3vacfreeze s1s s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1brr: begin isolation level repeatable read; step s1s: select * from d4_primary; @@ -311,12 +319,13 @@ a 1 2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; -pg_cancel_backend +step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s3vacfreeze: vacuum freeze pg_catalog.pg_inherits; step s1s: select * from d4_primary; a @@ -327,7 +336,7 @@ step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; -starting permutation: s2snitch s1b s1s s2detach s1cancel s3vacfreeze s1s s1insert s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s3vacfreeze s1s s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1s: select * from d4_primary; @@ -336,12 +345,13 @@ a 1 2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; -pg_cancel_backend +step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; +pg_cancel_backendpg_sleep -t +t step s2detach: <... completed> error in steps s1cancel s2detach: ERROR: canceling statement due to user request +step s2noop: UNLISTEN noop; step s3vacfreeze: vacuum freeze pg_catalog.pg_inherits; step s1s: select * from d4_primary; a diff --git a/src/test/isolation/specs/detach-partition-concurrently-4.spec b/src/test/isolation/specs/detach-partition-concurrently-4.spec index 89f5f72c8cfbc..5e4c0018d151b 100644 --- a/src/test/isolation/specs/detach-partition-concurrently-4.spec +++ b/src/test/isolation/specs/detach-partition-concurrently-4.spec @@ -3,6 +3,11 @@ # (The cases where the detaching transaction is cancelled is interesting # because the locking situation is completely different. I didn't verify # that keeping both variants adds any extra coverage.) +# +# Note: Always keep "s2noop" right after "s1cancel" in permutations. This +# reduces the probability of the timing problem that the cancel error report +# is shown together with the next query instead of with the cancel query. + setup { drop table if exists d4_primary, d4_primary1, d4_fk, d4_pid; create table d4_primary (a int primary key) partition by list (a); @@ -19,7 +24,8 @@ session "s1" step "s1b" { begin; } step "s1brr" { begin isolation level repeatable read; } step "s1s" { select * from d4_primary; } -step "s1cancel" { select pg_cancel_backend(pid) from d4_pid; } +# Sleep 0.1s after sending cancel, to give s2 time to react +step "s1cancel" { select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; } step "s1insert" { insert into d4_fk values (1); } step "s1c" { commit; } step "s1declare" { declare f cursor for select * from d4_primary; } @@ -33,6 +39,7 @@ step "s1rollback" { rollback to f; } session "s2" step "s2snitch" { insert into d4_pid select pg_backend_pid(); } step "s2detach" { alter table d4_primary detach partition d4_primary1 concurrently; } +step "s2noop" { UNLISTEN noop; } session "s3" step "s3brr" { begin isolation level repeatable read; } @@ -41,34 +48,34 @@ step "s3commit" { commit; } step "s3vacfreeze" { vacuum freeze pg_catalog.pg_inherits; } # Trying to insert into a partially detached partition is rejected -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s1insert" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1insert" "s1c" permutation "s2snitch" "s1b" "s1s" "s2detach" "s1insert" "s1c" # ... even under REPEATABLE READ mode. -permutation "s2snitch" "s1brr" "s1s" "s2detach" "s1cancel" "s1insert" "s1c" +permutation "s2snitch" "s1brr" "s1s" "s2detach" "s1cancel" "s2noop" "s1insert" "s1c" permutation "s2snitch" "s1brr" "s1s" "s2detach" "s1insert" "s1c" # If you read the referenced table using a cursor, you can see a row that the # RI query does not see. -permutation "s2snitch" "s1b" "s1declare" "s2detach" "s1cancel" "s1fetchall" "s1insert" "s1c" +permutation "s2snitch" "s1b" "s1declare" "s2detach" "s1cancel" "s2noop" "s1fetchall" "s1insert" "s1c" permutation "s2snitch" "s1b" "s1declare" "s2detach" "s1fetchall" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s1declare" "s2detach" "s1cancel" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" +permutation "s2snitch" "s1b" "s1declare" "s2detach" "s1cancel" "s2noop" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" permutation "s2snitch" "s1b" "s1declare" "s2detach" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" -permutation "s2snitch" "s1b" "s2detach" "s1declare" "s1cancel" "s1fetchall" "s1insert" "s1c" +permutation "s2snitch" "s1b" "s2detach" "s1declare" "s1cancel" "s2noop" "s1fetchall" "s1insert" "s1c" permutation "s2snitch" "s1b" "s2detach" "s1declare" "s1fetchall" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s2detach" "s1declare" "s1cancel" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" +permutation "s2snitch" "s1b" "s2detach" "s1declare" "s1cancel" "s2noop" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" permutation "s2snitch" "s1b" "s2detach" "s1declare" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" # Creating the referencing row using a cursor -permutation "s2snitch" "s1brr" "s1declare2" "s1fetchone" "s2detach" "s1cancel" "s1updcur" "s1c" +permutation "s2snitch" "s1brr" "s1declare2" "s1fetchone" "s2detach" "s1cancel" "s2noop" "s1updcur" "s1c" permutation "s2snitch" "s1brr" "s1declare2" "s1fetchone" "s2detach" "s1updcur" "s1c" permutation "s2snitch" "s1brr" "s1declare2" "s1fetchone" "s1updcur" "s2detach" "s1c" # Try reading the table from an independent session. permutation "s2snitch" "s1b" "s1s" "s2detach" "s3insert" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s3brr" "s3insert" "s3commit" "s1cancel" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s3brr" "s3insert" "s3commit" "s1cancel" "s2noop" "s1c" permutation "s2snitch" "s1b" "s1s" "s2detach" "s3brr" "s3insert" "s3commit" "s1c" # Try one where we VACUUM FREEZE pg_inherits (to verify that xmin change is # handled correctly). -permutation "s2snitch" "s1brr" "s1s" "s2detach" "s1cancel" "s3vacfreeze" "s1s" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s3vacfreeze" "s1s" "s1insert" "s1c" +permutation "s2snitch" "s1brr" "s1s" "s2detach" "s1cancel" "s2noop" "s3vacfreeze" "s1s" "s1insert" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s3vacfreeze" "s1s" "s1insert" "s1c" From 190fa5a00a8f9ecee8eef2c8e26136b772b94e19 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 26 May 2021 19:53:03 +0900 Subject: [PATCH 367/671] Fix typo in heapam.c Author: Hou Zhijie Discussion: https://postgr.es/m/OS0PR01MB571612191738540B27A8DE5894249@OS0PR01MB5716.jpnprd01.prod.outlook.com --- src/backend/access/heap/heapam.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 6ac07f2fdac1e..bd60129aeb7af 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -2356,7 +2356,7 @@ heap_prepare_insert(Relation relation, HeapTuple tup, TransactionId xid, } /* - * heap_multi_insert - insert multiple tuple into a heap + * heap_multi_insert - insert multiple tuples into a heap * * This is like heap_insert(), but inserts multiple tuples in one operation. * That's faster than calling heap_insert() in a loop, because when multiple From 6f4bdf81529fdaf6744875b0be99ecb9bfb3b7e0 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Thu, 27 May 2021 07:59:43 +0530 Subject: [PATCH 368/671] Fix assertion during streaming of multi-insert toast changes. While decoding the multi-insert WAL we can't clean the toast untill we get the last insert of that WAL record. Now if we stream the changes before we get the last change, the memory for toast chunks won't be released and we expect the txn to have streamed all changes after streaming. This restriction is mainly to ensure the correctness of streamed transactions and it doesn't seem worth uplifting such a restriction just to allow this case because anyway we will stream the transaction once such an insert is complete. Previously we were using two different flags (one for toast tuples and another for speculative inserts) to indicate partial changes. Now instead we replaced both of them with a single flag to indicate partial changes. Reported-by: Pavan Deolasee Author: Dilip Kumar Reviewed-by: Pavan Deolasee, Amit Kapila Discussion: https://postgr.es/m/CABOikdN-_858zojYN-2tNcHiVTw-nhxPwoQS4quExeweQfG1Ug@mail.gmail.com --- contrib/test_decoding/expected/stream.out | 24 ++++++++++ contrib/test_decoding/sql/stream.sql | 18 ++++++++ .../replication/logical/reorderbuffer.c | 46 ++++++++++--------- src/include/replication/reorderbuffer.h | 27 +++-------- 4 files changed, 73 insertions(+), 42 deletions(-) diff --git a/contrib/test_decoding/expected/stream.out b/contrib/test_decoding/expected/stream.out index e1c3bc838d5e3..0f21dcb8e0e44 100644 --- a/contrib/test_decoding/expected/stream.out +++ b/contrib/test_decoding/expected/stream.out @@ -82,6 +82,30 @@ SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL,NULL, 'incl committing streamed transaction (13 rows) +-- streaming test for toast with multi-insert +\COPY stream_test FROM STDIN +SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL,NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'stream-changes', '1'); + data +------------------------------------------ + opening a streamed block for transaction + streaming change for transaction + streaming change for transaction + streaming change for transaction + streaming change for transaction + streaming change for transaction + streaming change for transaction + streaming change for transaction + streaming change for transaction + streaming change for transaction + streaming change for transaction + streaming change for transaction + closing a streamed block for transaction + opening a streamed block for transaction + streaming change for transaction + closing a streamed block for transaction + committing streamed transaction +(17 rows) + DROP TABLE stream_test; SELECT pg_drop_replication_slot('regression_slot'); pg_drop_replication_slot diff --git a/contrib/test_decoding/sql/stream.sql b/contrib/test_decoding/sql/stream.sql index ce86c816d11f8..4feec62972a5e 100644 --- a/contrib/test_decoding/sql/stream.sql +++ b/contrib/test_decoding/sql/stream.sql @@ -26,5 +26,23 @@ SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'inc INSERT INTO stream_test SELECT repeat('a', 6000) || g.i FROM generate_series(1, 10) g(i); SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL,NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'stream-changes', '1'); +-- streaming test for toast with multi-insert +\COPY stream_test FROM STDIN +toasted-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +toasted-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +toasted-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +toasted-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +toasted-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +toasted-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +toasted-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +toasted-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +toasted-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +toasted-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +toasted-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +toasted-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +\. + +SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL,NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'stream-changes', '1'); + DROP TABLE stream_test; SELECT pg_drop_replication_slot('regression_slot'); diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index b0ab91cc71b18..2d9e1279bb27f 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -705,31 +705,35 @@ ReorderBufferProcessPartialChange(ReorderBuffer *rb, ReorderBufferTXN *txn, toptxn = txn; /* - * Set the toast insert bit whenever we get toast insert to indicate a - * partial change and clear it when we get the insert or update on main - * table (Both update and insert will do the insert in the toast table). + * Indicate a partial change for toast inserts. The change will be + * considered as complete once we get the insert or update on the main + * table and we are sure that the pending toast chunks are not required + * anymore. + * + * If we allow streaming when there are pending toast chunks then such + * chunks won't be released till the insert (multi_insert) is complete and + * we expect the txn to have streamed all changes after streaming. This + * restriction is mainly to ensure the correctness of streamed + * transactions and it doesn't seem worth uplifting such a restriction + * just to allow this case because anyway we will stream the transaction + * once such an insert is complete. */ if (toast_insert) - toptxn->txn_flags |= RBTXN_HAS_TOAST_INSERT; - else if (rbtxn_has_toast_insert(toptxn) && - IsInsertOrUpdate(change->action)) - toptxn->txn_flags &= ~RBTXN_HAS_TOAST_INSERT; + toptxn->txn_flags |= RBTXN_HAS_PARTIAL_CHANGE; + else if (rbtxn_has_partial_change(toptxn) && + IsInsertOrUpdate(change->action) && + change->data.tp.clear_toast_afterwards) + toptxn->txn_flags &= ~RBTXN_HAS_PARTIAL_CHANGE; /* - * Set the spec insert bit whenever we get the speculative insert to - * indicate the partial change and clear the same on speculative confirm. + * Indicate a partial change for speculative inserts. The change will be + * considered as complete once we get the speculative confirm token. */ if (IsSpecInsert(change->action)) - toptxn->txn_flags |= RBTXN_HAS_SPEC_INSERT; - else if (IsSpecConfirm(change->action)) - { - /* - * Speculative confirm change must be preceded by speculative - * insertion. - */ - Assert(rbtxn_has_spec_insert(toptxn)); - toptxn->txn_flags &= ~RBTXN_HAS_SPEC_INSERT; - } + toptxn->txn_flags |= RBTXN_HAS_PARTIAL_CHANGE; + else if (rbtxn_has_partial_change(toptxn) && + IsSpecConfirm(change->action)) + toptxn->txn_flags &= ~RBTXN_HAS_PARTIAL_CHANGE; /* * Stream the transaction if it is serialized before and the changes are @@ -741,7 +745,7 @@ ReorderBufferProcessPartialChange(ReorderBuffer *rb, ReorderBufferTXN *txn, * changes. Delaying such transactions would increase apply lag for them. */ if (ReorderBufferCanStartStreaming(rb) && - !(rbtxn_has_incomplete_tuple(toptxn)) && + !(rbtxn_has_partial_change(toptxn)) && rbtxn_is_serialized(txn)) ReorderBufferStreamTXN(rb, toptxn); } @@ -3399,7 +3403,7 @@ ReorderBufferLargestTopTXN(ReorderBuffer *rb) Assert(txn->base_snapshot != NULL); if ((largest == NULL || txn->total_size > largest_size) && - (txn->total_size > 0) && !(rbtxn_has_incomplete_tuple(txn))) + (txn->total_size > 0) && !(rbtxn_has_partial_change(txn))) { largest = txn; largest_size = txn->total_size; diff --git a/src/include/replication/reorderbuffer.h b/src/include/replication/reorderbuffer.h index 53cdfa5d88f90..0c6e9d1cb924d 100644 --- a/src/include/replication/reorderbuffer.h +++ b/src/include/replication/reorderbuffer.h @@ -172,10 +172,9 @@ typedef struct ReorderBufferChange #define RBTXN_IS_SERIALIZED 0x0004 #define RBTXN_IS_SERIALIZED_CLEAR 0x0008 #define RBTXN_IS_STREAMED 0x0010 -#define RBTXN_HAS_TOAST_INSERT 0x0020 -#define RBTXN_HAS_SPEC_INSERT 0x0040 -#define RBTXN_PREPARE 0x0080 -#define RBTXN_SKIPPED_PREPARE 0x0100 +#define RBTXN_HAS_PARTIAL_CHANGE 0x0020 +#define RBTXN_PREPARE 0x0040 +#define RBTXN_SKIPPED_PREPARE 0x0080 /* Does the transaction have catalog changes? */ #define rbtxn_has_catalog_changes(txn) \ @@ -201,24 +200,10 @@ typedef struct ReorderBufferChange ((txn)->txn_flags & RBTXN_IS_SERIALIZED_CLEAR) != 0 \ ) -/* This transaction's changes has toast insert, without main table insert. */ -#define rbtxn_has_toast_insert(txn) \ +/* Has this transaction contains partial changes? */ +#define rbtxn_has_partial_change(txn) \ ( \ - ((txn)->txn_flags & RBTXN_HAS_TOAST_INSERT) != 0 \ -) -/* - * This transaction's changes has speculative insert, without speculative - * confirm. - */ -#define rbtxn_has_spec_insert(txn) \ -( \ - ((txn)->txn_flags & RBTXN_HAS_SPEC_INSERT) != 0 \ -) - -/* Check whether this transaction has an incomplete change. */ -#define rbtxn_has_incomplete_tuple(txn) \ -( \ - rbtxn_has_toast_insert(txn) || rbtxn_has_spec_insert(txn) \ + ((txn)->txn_flags & RBTXN_HAS_PARTIAL_CHANGE) != 0 \ ) /* From 2941138e60fc711bd221b3264807f36cc079dfbb Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 27 May 2021 14:57:28 +0900 Subject: [PATCH 369/671] doc: Fix description of some GUCs in docs and postgresql.conf.sample The following parameters have been imprecise, or incorrect, about their description (PGC_POSTMASTER or PGC_SIGHUP): - autovacuum_work_mem (docs, as of 9.6~) - huge_page_size (docs, as of 14~) - max_logical_replication_workers (docs, as of 10~) - max_sync_workers_per_subscription (docs, as of 10~) - min_dynamic_shared_memory (docs, as of 14~) - recovery_init_sync_method (postgresql.conf.sample, as of 14~) - remove_temp_files_after_crash (docs, as of 14~) - restart_after_crash (docs, as of 9.6~) - ssl_min_protocol_version (docs, as of 12~) - ssl_max_protocol_version (docs, as of 12~) This commit adjusts the description of all these parameters to be more consistent with the practice used for the others. Revewed-by: Justin Pryzby Discussion: https://postgr.es/m/YK2ltuLpe+FbRXzA@paquier.xyz Backpatch-through: 9.6 --- doc/src/sgml/config.sgml | 38 +++++++++++++++++-- src/backend/utils/misc/postgresql.conf.sample | 1 + 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 7e32b0686c6ae..67a0e997bb263 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -1472,6 +1472,11 @@ include_dir 'conf.d' The default is TLSv1.2, which satisfies industry best practices as of this writing. + + + This parameter can only be set in the postgresql.conf + file or on the server command line. + @@ -1490,6 +1495,11 @@ include_dir 'conf.d' useful for testing or if some component has issues working with a newer protocol. + + + This parameter can only be set in the postgresql.conf + file or on the server command line. + @@ -1703,7 +1713,7 @@ include_dir 'conf.d' . The default is zero (0). When set to 0, the default huge page size on the - system will be used. + system will be used. This parameter can only be set at server start. Some commonly available page sizes on modern 64 bit server architectures include: @@ -1900,6 +1910,9 @@ include_dir 'conf.d' the value of should be used instead. The setting has no effect on the behavior of VACUUM when run in other contexts. + This parameter can only be set in the + postgresql.conf file or on the server command + line. @@ -2029,7 +2042,8 @@ include_dir 'conf.d' the huge_pages setting on operating systems where that is supported, and may be more likely to benefit from larger pages on operating systems where that is managed automatically. - The default value is 0 (none). + The default value is 0 (none). This parameter can + only be set at server start. @@ -4794,7 +4808,8 @@ ANY num_sync ( num_sync ( name) /* column reference */ { char *attname; + HeapTuple atttuple; + Form_pg_attribute attForm; + TypeCacheEntry *type; attname = selem->name; @@ -273,6 +261,7 @@ CreateStatistics(CreateStatsStmt *stmt) { Node *expr = selem->expr; Oid atttype; + TypeCacheEntry *type; Assert(expr != NULL); From 025110663448a8c877f4b591495f2e5d187d8936 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 27 May 2021 20:11:00 +0900 Subject: [PATCH 371/671] Fix MSVC scripts when building with GSSAPI/Kerberos The deliverables of upstream Kerberos on Windows are installed with paths that do not match our MSVC scripts. First, the include folder was named "inc/" in our scripts, but the upstream MSIs use "include/". Second, the build would fail with 64-bit environments as the libraries are named differently. This commit adjusts the MSVC scripts to be compatible with the latest installations of upstream, and I have checked that the compilation was able to work with the 32-bit and 64-bit installations. Special thanks to Kondo Yuta for the help in investigating the situation in hamerkop, which had an incorrect configuration for the GSS compilation. Reported-by: Brian Ye Discussion: https://postgr.es/m/162128202219.27274.12616756784952017465@wrigleys.postgresql.org Backpatch-through: 9.6 --- src/tools/msvc/Solution.pm | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index 3c5fe5dddcbd2..97f012bbb5e4b 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -1023,10 +1023,26 @@ sub AddProject } if ($self->{options}->{gss}) { - $proj->AddIncludeDir($self->{options}->{gss} . '\inc\krb5'); - $proj->AddLibrary($self->{options}->{gss} . '\lib\i386\krb5_32.lib'); - $proj->AddLibrary($self->{options}->{gss} . '\lib\i386\comerr32.lib'); - $proj->AddLibrary($self->{options}->{gss} . '\lib\i386\gssapi32.lib'); + $proj->AddIncludeDir($self->{options}->{gss} . '\include'); + $proj->AddIncludeDir($self->{options}->{gss} . '\include\krb5'); + if ($self->{platform} eq 'Win32') + { + $proj->AddLibrary( + $self->{options}->{gss} . '\lib\i386\krb5_32.lib'); + $proj->AddLibrary( + $self->{options}->{gss} . '\lib\i386\comerr32.lib'); + $proj->AddLibrary( + $self->{options}->{gss} . '\lib\i386\gssapi32.lib'); + } + else + { + $proj->AddLibrary( + $self->{options}->{gss} . '\lib\amd64\krb5_64.lib'); + $proj->AddLibrary( + $self->{options}->{gss} . '\lib\amd64\comerr64.lib'); + $proj->AddLibrary( + $self->{options}->{gss} . '\lib\amd64\gssapi64.lib'); + } } if ($self->{options}->{iconv}) { From 6abc8c2596dbfcb24f9b4d954a1465b8015118c3 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 27 May 2021 13:58:13 +0200 Subject: [PATCH 372/671] Add NO_INSTALL option to pgxs Apply in libpq_pipeline test makefile, so that the test file is not installed into tmp_install. Reviewed-by: Alvaro Herrera Reviewed-by: Tom Lane Discussion: https://www.postgresql.org/message-id/flat/cb9d16a6-760f-cd44-28d6-b091d5fb6ca7%40enterprisedb.com --- doc/src/sgml/extend.sgml | 10 ++++++++++ src/makefiles/pgxs.mk | 13 +++++++++++++ src/test/modules/libpq_pipeline/Makefile | 2 ++ 3 files changed, 25 insertions(+) diff --git a/doc/src/sgml/extend.sgml b/doc/src/sgml/extend.sgml index ec95b4eb01365..dae57375748fa 100644 --- a/doc/src/sgml/extend.sgml +++ b/doc/src/sgml/extend.sgml @@ -1672,6 +1672,16 @@ include $(PGXS) + + NO_INSTALL + + + don't define an install target, useful for test + modules that don't need their build products to be installed + + + + NO_INSTALLCHECK diff --git a/src/makefiles/pgxs.mk b/src/makefiles/pgxs.mk index 271e7eaba8289..0f71fa293d099 100644 --- a/src/makefiles/pgxs.mk +++ b/src/makefiles/pgxs.mk @@ -49,6 +49,8 @@ # TAP_TESTS -- switch to enable TAP tests # ISOLATION -- list of isolation test cases # ISOLATION_OPTS -- additional switches to pass to pg_isolation_regress +# NO_INSTALL -- don't define an install target, useful for test modules +# that don't need their build products to be installed # NO_INSTALLCHECK -- don't define an installcheck target, useful e.g. if # tests require special configuration, or don't use pg_regress # EXTRA_CLEAN -- extra files to remove in 'make clean' @@ -227,6 +229,8 @@ all: all-lib endif # MODULE_big +ifndef NO_INSTALL + install: all installdirs ifneq (,$(EXTENSION)) $(INSTALL_DATA) $(addprefix $(srcdir)/, $(addsuffix .control, $(EXTENSION))) '$(DESTDIR)$(datadir)/extension/' @@ -336,6 +340,15 @@ endif # with_llvm uninstall: uninstall-lib endif # MODULE_big +else # NO_INSTALL + +# Need this so that temp-install builds artifacts not meant for +# installation (Normally, check should depend on all, but we don't do +# that because of parallel make risk (dbf2ec1a1c0).) +install: all + +endif # NO_INSTALL + clean: ifdef MODULES diff --git a/src/test/modules/libpq_pipeline/Makefile b/src/test/modules/libpq_pipeline/Makefile index b798f5fbbc913..c9c5ae1beb54f 100644 --- a/src/test/modules/libpq_pipeline/Makefile +++ b/src/test/modules/libpq_pipeline/Makefile @@ -3,6 +3,8 @@ PROGRAM = libpq_pipeline OBJS = libpq_pipeline.o +NO_INSTALL = 1 + PG_CPPFLAGS = -I$(libpq_srcdir) PG_LIBS_INTERNAL += $(libpq_pgport) From a717e5c771610cf8607f2423ab3ab6b5d30f44ea Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 27 May 2021 16:40:52 +0200 Subject: [PATCH 373/671] Fix vpath build in libpq_pipeline test The path needs to be set to refer to the build directory, not the current directory, because that's actually the source directory at that point. fix for 6abc8c2596dbfcb24f9b4d954a1465b8015118c3 --- src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl index 8fd6cd45e7610..2bc0e6c223683 100644 --- a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl +++ b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl @@ -8,14 +8,13 @@ use PostgresNode; use TestLib; use Test::More; -use Cwd; my $node = get_new_node('main'); $node->init; $node->start; my $numrows = 700; -$ENV{PATH} = "$ENV{PATH}:" . getcwd(); +$ENV{PATH} = "$ENV{TESTDIR}:$ENV{PATH}"; my ($out, $err) = run_command([ 'libpq_pipeline', 'tests' ]); die "oops: $err" unless $err eq ''; From e6241d8e030fbd2746b3ea3f44e728224298f35b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 27 May 2021 13:24:24 -0400 Subject: [PATCH 374/671] Rethink definition of pg_attribute.attcompression. Redefine '\0' (InvalidCompressionMethod) as meaning "if we need to compress, use the current setting of default_toast_compression". This allows '\0' to be a suitable default choice regardless of datatype, greatly simplifying code paths that initialize tupledescs and the like. It seems like a more user-friendly approach as well, because now the default compression choice doesn't migrate into table definitions, meaning that changing default_toast_compression is usually sufficient to flip an installation's behavior; one needn't tediously issue per-column ALTER SET COMPRESSION commands. Along the way, fix a few minor bugs and documentation issues with the per-column-compression feature. Adopt more robust APIs for SetIndexStorageProperties and GetAttributeCompression. Bump catversion because typical contents of attcompression will now be different. We could get away without doing that, but it seems better to ensure v14 installations all agree on this. (We already forced initdb for beta2, anyway.) Discussion: https://postgr.es/m/626613.1621787110@sss.pgh.pa.us --- doc/src/sgml/catalogs.sgml | 12 +- doc/src/sgml/config.sgml | 15 +-- doc/src/sgml/func.sgml | 4 +- doc/src/sgml/ref/alter_table.sgml | 30 ++--- doc/src/sgml/ref/create_table.sgml | 25 ++-- doc/src/sgml/ref/pg_dump.sgml | 4 +- doc/src/sgml/ref/pg_dumpall.sgml | 6 +- doc/src/sgml/storage.sgml | 17 +-- src/backend/access/brin/brin_tuple.c | 5 +- src/backend/access/common/indextuple.c | 13 +- src/backend/access/common/toast_internals.c | 6 +- src/backend/access/common/tupdesc.c | 7 +- src/backend/access/heap/heapam_handler.c | 12 +- src/backend/bootstrap/bootstrap.c | 7 +- src/backend/catalog/genbki.pl | 4 +- src/backend/catalog/heap.c | 2 - src/backend/commands/tablecmds.c | 124 ++++++++------------ src/backend/parser/gram.y | 38 +++--- src/backend/utils/misc/guc.c | 8 +- src/bin/pg_dump/pg_backup.h | 2 - src/bin/pg_dump/pg_backup_archiver.c | 34 +----- src/bin/pg_dump/pg_dump.c | 107 ++++------------- src/bin/psql/describe.c | 10 +- src/include/access/toast_compression.h | 24 +--- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_attribute.h | 8 +- src/test/regress/expected/compression.out | 42 +++---- src/test/regress/expected/compression_1.out | 46 ++++---- src/test/regress/sql/compression.sql | 23 ++-- 29 files changed, 257 insertions(+), 380 deletions(-) diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index b26b872a06cf5..16493209c6387 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -1261,10 +1261,14 @@ attcompression char - The current compression method of the column. If it is an invalid - compression method ('\0') then column data will not - be compressed. Otherwise, 'p' = pglz compression or - 'l' = LZ4 compression. + The current compression method of the column. Typically this is + '\0' to specify use of the current default setting + (see ). Otherwise, + 'p' selects pglz compression, while + 'l' selects LZ4 + compression. However, this field is ignored + whenever attstorage does not allow + compression. diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 67a0e997bb263..3b7da468b7cc2 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -8256,13 +8256,14 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; This variable sets the default TOAST - compression method for columns of newly-created tables. The - CREATE TABLE statement can override this default - by specifying the COMPRESSION column option. - - The supported compression methods are pglz and, - if PostgreSQL was compiled with - --with-lz4, lz4. + compression method for values of compressible columns. + (This can be overridden for individual columns by setting + the COMPRESSION column option in + CREATE TABLE or + ALTER TABLE.) + The supported compression methods are pglz and + (if PostgreSQL was compiled with + ) lz4. The default is pglz. diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 3a21129021ada..08b07f561efa3 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -26253,10 +26253,10 @@ postgres=# SELECT * FROM pg_walfile_name_offset(pg_stop_backup()); pg_column_compression pg_column_compression ( "any" ) - integer + text - Shows the compression algorithm that was used to compress a + Shows the compression algorithm that was used to compress an individual variable-length value. Returns NULL if the value is not compressed. diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index 1431d2649befe..939d3fe273923 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -104,7 +104,6 @@ WITH ( MODULUS numeric_literal, REM GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] | UNIQUE index_parameters | PRIMARY KEY index_parameters | - COMPRESSION compression_method | REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE referential_action ] [ ON UPDATE referential_action ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] @@ -391,24 +390,27 @@ WITH ( MODULUS numeric_literal, REM - This sets the compression method to be used for data inserted into a column. - + This form sets the compression method for a column, determining how + values inserted in future will be compressed (if the storage mode + permits compression at all). This does not cause the table to be rewritten, so existing data may still be compressed with other compression methods. If the table is rewritten with VACUUM FULL or CLUSTER, or restored - with pg_restore, then all tuples are rewritten - with the configured compression methods. - - Also, note that when data is inserted from another relation (for example, - by INSERT ... SELECT), tuples from the source data are - not necessarily detoasted, and any previously compressed data is retained - with its existing compression method, rather than recompressing with the - compression methods of the target columns. - + with pg_restore, then all values are rewritten + with the configured compression method. + However, when data is inserted from another relation (for example, + by INSERT ... SELECT), values from the source table are + not necessarily detoasted, so any previously compressed data may retain + its existing compression method, rather than being recompressed with the + compression method of the target column. The supported compression methods are pglz and lz4. - lz4 is available only if --with-lz4 - was used when building PostgreSQL. + (lz4 is available only if + was used when building PostgreSQL.) In + addition, compression_method + can be default, which selects the default behavior of + consulting the setting + at the time of data insertion to determine the method to use. diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index a8c5e4028af0e..c6d0a35e5066a 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -22,7 +22,7 @@ PostgreSQL documentation CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name ( [ - { column_name data_type [ COLLATE collation ] [ COMPRESSION compression_method ] [ column_constraint [ ... ] ] + { column_name data_type [ COMPRESSION compression_method ] [ COLLATE collation ] [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option ... ] } [, ... ] @@ -293,17 +293,22 @@ WITH ( MODULUS numeric_literal, REM The COMPRESSION clause sets the compression method - for a column. Compression is supported only for variable-width data - types, and is used only for columns whose storage type is main or - extended. (See for information on - column storage types.) Setting this property for a partitioned table + for the column. Compression is supported only for variable-width data + types, and is used only when the column's storage mode + is main or extended. + (See for information on + column storage modes.) Setting this property for a partitioned table has no direct effect, because such tables have no storage of their own, - but the configured value is inherited by newly-created partitions. + but the configured value will be inherited by newly-created partitions. The supported compression methods are pglz and - lz4. lz4 is available only if - --with-lz4 was used when building - PostgreSQL. The default - is pglz. + lz4. (lz4 is available only if + was used when building + PostgreSQL.) In addition, + compression_method + can be default to explicitly specify the default + behavior, which is to consult the + setting at the time of + data insertion to determine the method to use. diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml index 67c2cbbec62e2..5ddadc11f2eee 100644 --- a/doc/src/sgml/ref/pg_dump.sgml +++ b/doc/src/sgml/ref/pg_dump.sgml @@ -975,8 +975,8 @@ PostgreSQL documentation Do not output commands to set TOAST compression methods. - With this option, all objects will be created using whichever - compression method is the default during restore. + With this option, all columns will be restored with the default + compression setting. diff --git a/doc/src/sgml/ref/pg_dumpall.sgml b/doc/src/sgml/ref/pg_dumpall.sgml index 805c47d5c1e56..ddffbf85edbc0 100644 --- a/doc/src/sgml/ref/pg_dumpall.sgml +++ b/doc/src/sgml/ref/pg_dumpall.sgml @@ -464,12 +464,12 @@ PostgreSQL documentation Do not output commands to set TOAST compression methods. - With this option, all objects will be created using whichever - compression method is the default during restore. + With this option, all columns will be restored with the default + compression setting. - + diff --git a/doc/src/sgml/storage.sgml b/doc/src/sgml/storage.sgml index bfccda77afde4..7136bbe7a32fd 100644 --- a/doc/src/sgml/storage.sgml +++ b/doc/src/sgml/storage.sgml @@ -376,6 +376,16 @@ but the varlena header does not tell whether it has occurred — the content of the TOAST pointer tells that, instead. + +The compression technique used for either in-line or out-of-line compressed +data can be selected for each column by setting +the COMPRESSION column option in CREATE +TABLE or ALTER TABLE. The default for columns +with no explicit setting is to consult the + parameter at the time data is +inserted. + + As mentioned, there are multiple types of TOAST pointer datums. The oldest and most common type is a pointer to out-of-line data stored in @@ -392,13 +402,6 @@ useful for avoiding copying and redundant processing of large data values. Further details appear in . - -The compression technique used for either in-line or out-of-line compressed -data can be selected using the COMPRESSION option on a per-column -basis when creating a table. The default for columns with no explicit setting -is taken from the value of . - - Out-of-Line, On-Disk TOAST Storage diff --git a/src/backend/access/brin/brin_tuple.c b/src/backend/access/brin/brin_tuple.c index ee05372f795c4..09e563b1f0828 100644 --- a/src/backend/access/brin/brin_tuple.c +++ b/src/backend/access/brin/brin_tuple.c @@ -232,11 +232,10 @@ brin_form_tuple(BrinDesc *brdesc, BlockNumber blkno, BrinMemTuple *tuple, * same compression method. Otherwise we have to use the * default method. */ - if (att->atttypid == atttype->type_id && - CompressionMethodIsValid(att->attcompression)) + if (att->atttypid == atttype->type_id) compression = att->attcompression; else - compression = GetDefaultToastCompression(); + compression = InvalidCompressionMethod; cvalue = toast_compress_datum(value, compression); diff --git a/src/backend/access/common/indextuple.c b/src/backend/access/common/indextuple.c index 521256041135b..8df882da7a780 100644 --- a/src/backend/access/common/indextuple.c +++ b/src/backend/access/common/indextuple.c @@ -104,18 +104,9 @@ index_form_tuple(TupleDesc tupleDescriptor, att->attstorage == TYPSTORAGE_MAIN)) { Datum cvalue; - char compression = att->attcompression; - /* - * If the compression method is not valid, use the default. We - * don't expect this to happen for regular index columns, which - * inherit the setting from the corresponding table column, but we - * do expect it to happen whenever an expression is indexed. - */ - if (!CompressionMethodIsValid(compression)) - compression = GetDefaultToastCompression(); - - cvalue = toast_compress_datum(untoasted_values[i], compression); + cvalue = toast_compress_datum(untoasted_values[i], + att->attcompression); if (DatumGetPointer(cvalue) != NULL) { diff --git a/src/backend/access/common/toast_internals.c b/src/backend/access/common/toast_internals.c index 8d2a9964c3f57..c7b9ade5742a4 100644 --- a/src/backend/access/common/toast_internals.c +++ b/src/backend/access/common/toast_internals.c @@ -53,10 +53,12 @@ toast_compress_datum(Datum value, char cmethod) Assert(!VARATT_IS_EXTERNAL(DatumGetPointer(value))); Assert(!VARATT_IS_COMPRESSED(DatumGetPointer(value))); - Assert(CompressionMethodIsValid(cmethod)); - valsize = VARSIZE_ANY_EXHDR(DatumGetPointer(value)); + /* If the compression method is not valid, use the current default */ + if (!CompressionMethodIsValid(cmethod)) + cmethod = default_toast_compression; + /* * Call appropriate compression routine for the compression method. */ diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c index affbc509bdc68..4c63bd4dc641f 100644 --- a/src/backend/access/common/tupdesc.c +++ b/src/backend/access/common/tupdesc.c @@ -642,10 +642,7 @@ TupleDescInitEntry(TupleDesc desc, att->attbyval = typeForm->typbyval; att->attalign = typeForm->typalign; att->attstorage = typeForm->typstorage; - if (IsStorageCompressible(typeForm->typstorage)) - att->attcompression = GetDefaultToastCompression(); - else - att->attcompression = InvalidCompressionMethod; + att->attcompression = InvalidCompressionMethod; att->attcollation = typeForm->typcollation; ReleaseSysCache(tuple); @@ -711,7 +708,7 @@ TupleDescInitBuiltinEntry(TupleDesc desc, att->attbyval = false; att->attalign = TYPALIGN_INT; att->attstorage = TYPSTORAGE_EXTENDED; - att->attcompression = GetDefaultToastCompression(); + att->attcompression = InvalidCompressionMethod; att->attcollation = DEFAULT_COLLATION_OID; break; diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index 8e6e8d5169806..e2cd79ec54637 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -2483,10 +2483,10 @@ reform_and_rewrite_tuple(HeapTuple tuple, * perform the compression here; we just need to decompress. That * will trigger recompression later on. */ - struct varlena *new_value; ToastCompressionId cmid; char cmethod; + char targetmethod; new_value = (struct varlena *) DatumGetPointer(values[i]); cmid = toast_get_compression_id(new_value); @@ -2495,7 +2495,7 @@ reform_and_rewrite_tuple(HeapTuple tuple, if (cmid == TOAST_INVALID_COMPRESSION_ID) continue; - /* convert compression id to compression method */ + /* convert existing compression id to compression method */ switch (cmid) { case TOAST_PGLZ_COMPRESSION_ID: @@ -2506,10 +2506,16 @@ reform_and_rewrite_tuple(HeapTuple tuple, break; default: elog(ERROR, "invalid compression method id %d", cmid); + cmethod = '\0'; /* keep compiler quiet */ } + /* figure out what the target method is */ + targetmethod = TupleDescAttr(newTupDesc, i)->attcompression; + if (!CompressionMethodIsValid(targetmethod)) + targetmethod = default_toast_compression; + /* if compression method doesn't match then detoast the value */ - if (TupleDescAttr(newTupDesc, i)->attcompression != cmethod) + if (targetmethod != cmethod) { values[i] = PointerGetDatum(detoast_attr(new_value)); values_free[i] = true; diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index 62abd008ccf00..94ab5ca095483 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -701,6 +701,7 @@ DefineAttr(char *name, char *type, int attnum, int nullness) attrtypes[attnum]->attbyval = Ap->am_typ.typbyval; attrtypes[attnum]->attalign = Ap->am_typ.typalign; attrtypes[attnum]->attstorage = Ap->am_typ.typstorage; + attrtypes[attnum]->attcompression = InvalidCompressionMethod; attrtypes[attnum]->attcollation = Ap->am_typ.typcollation; /* if an array type, assume 1-dimensional attribute */ if (Ap->am_typ.typelem != InvalidOid && Ap->am_typ.typlen < 0) @@ -715,6 +716,7 @@ DefineAttr(char *name, char *type, int attnum, int nullness) attrtypes[attnum]->attbyval = TypInfo[typeoid].byval; attrtypes[attnum]->attalign = TypInfo[typeoid].align; attrtypes[attnum]->attstorage = TypInfo[typeoid].storage; + attrtypes[attnum]->attcompression = InvalidCompressionMethod; attrtypes[attnum]->attcollation = TypInfo[typeoid].collation; /* if an array type, assume 1-dimensional attribute */ if (TypInfo[typeoid].elem != InvalidOid && @@ -724,11 +726,6 @@ DefineAttr(char *name, char *type, int attnum, int nullness) attrtypes[attnum]->attndims = 0; } - if (IsStorageCompressible(attrtypes[attnum]->attstorage)) - attrtypes[attnum]->attcompression = GetDefaultToastCompression(); - else - attrtypes[attnum]->attcompression = InvalidCompressionMethod; - /* * If a system catalog column is collation-aware, force it to use C * collation, so that its behavior is independent of the database's diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index 112b3affdfd75..f893ae4f45328 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -899,9 +899,7 @@ sub morph_row_for_pgattr $row->{attbyval} = $type->{typbyval}; $row->{attalign} = $type->{typalign}; $row->{attstorage} = $type->{typstorage}; - - $row->{attcompression} = - $type->{typstorage} ne 'p' && $type->{typstorage} ne 'e' ? 'p' : '\0'; + $row->{attcompression} = '\0'; # set attndims if it's an array type $row->{attndims} = $type->{typcategory} eq 'A' ? '1' : '0'; diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 3dfe2e8a565e2..afa830d92485a 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -1719,8 +1719,6 @@ RemoveAttributeById(Oid relid, AttrNumber attnum) /* Unset this so no one tries to look up the generation expression */ attStruct->attgenerated = '\0'; - attStruct->attcompression = InvalidCompressionMethod; - /* * Change the column name to something that isn't likely to conflict */ diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 11e91c4ad33f3..028e8ac46b335 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -601,7 +601,7 @@ static void refuseDupeIndexAttach(Relation parentIdx, Relation partIdx, Relation partitionTbl); static List *GetParentedForeignKeyRefs(Relation partition); static void ATDetachCheckNoForeignKeyRefs(Relation partition); -static char GetAttributeCompression(Form_pg_attribute att, char *compression); +static char GetAttributeCompression(Oid atttypid, char *compression); /* ---------------------------------------------------------------- @@ -897,17 +897,9 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId, if (colDef->generated) attr->attgenerated = colDef->generated; - /* - * lookup attribute's compression method and store it in the - * attr->attcompression. - */ - if (relkind == RELKIND_RELATION || - relkind == RELKIND_PARTITIONED_TABLE || - relkind == RELKIND_MATVIEW) - attr->attcompression = - GetAttributeCompression(attr, colDef->compression); - else - attr->attcompression = InvalidCompressionMethod; + if (colDef->compression) + attr->attcompression = GetAttributeCompression(attr->atttypid, + colDef->compression); } /* @@ -6602,13 +6594,8 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, attribute.attbyval = tform->typbyval; attribute.attalign = tform->typalign; attribute.attstorage = tform->typstorage; - /* do not set compression in views etc */ - if (rel->rd_rel->relkind == RELKIND_RELATION || - rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) - attribute.attcompression = GetAttributeCompression(&attribute, - colDef->compression); - else - attribute.attcompression = InvalidCompressionMethod; + attribute.attcompression = GetAttributeCompression(typeOid, + colDef->compression); attribute.attnotnull = colDef->is_not_null; attribute.atthasdef = false; attribute.atthasmissing = false; @@ -7995,23 +7982,24 @@ ATExecSetOptions(Relation rel, const char *colName, Node *options, /* * Helper function for ATExecSetStorage and ATExecSetCompression * - * Set the attcompression and/or attstorage for the respective index attribute - * if the respective input values are valid. + * Set the attstorage and/or attcompression fields for index columns + * associated with the specified table column. */ static void SetIndexStorageProperties(Relation rel, Relation attrelation, - AttrNumber attnum, char newcompression, - char newstorage, LOCKMODE lockmode) + AttrNumber attnum, + bool setstorage, char newstorage, + bool setcompression, char newcompression, + LOCKMODE lockmode) { - HeapTuple tuple; ListCell *lc; - Form_pg_attribute attrtuple; foreach(lc, RelationGetIndexList(rel)) { Oid indexoid = lfirst_oid(lc); Relation indrel; AttrNumber indattnum = 0; + HeapTuple tuple; indrel = index_open(indexoid, lockmode); @@ -8034,14 +8022,14 @@ SetIndexStorageProperties(Relation rel, Relation attrelation, if (HeapTupleIsValid(tuple)) { - attrtuple = (Form_pg_attribute) GETSTRUCT(tuple); + Form_pg_attribute attrtuple = (Form_pg_attribute) GETSTRUCT(tuple); - if (CompressionMethodIsValid(newcompression)) - attrtuple->attcompression = newcompression; - - if (newstorage != '\0') + if (setstorage) attrtuple->attstorage = newstorage; + if (setcompression) + attrtuple->attcompression = newcompression; + CatalogTupleUpdate(attrelation, &tuple->t_self, tuple); InvokeObjectPostAlterHook(RelationRelationId, @@ -8134,8 +8122,9 @@ ATExecSetStorage(Relation rel, const char *colName, Node *newValue, LOCKMODE loc * matching behavior of index.c ConstructTupleDescriptor()). */ SetIndexStorageProperties(rel, attrelation, attnum, - InvalidCompressionMethod, - newstorage, lockmode); + true, newstorage, + false, 0, + lockmode); table_close(attrelation, RowExclusiveLock); @@ -12299,23 +12288,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel, attTup->attbyval = tform->typbyval; attTup->attalign = tform->typalign; attTup->attstorage = tform->typstorage; - - /* Setup attribute compression */ - if (rel->rd_rel->relkind == RELKIND_RELATION || - rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) - { - /* - * No compression for plain/external storage, otherwise, default - * compression method if it is not already set, refer comments atop - * attcompression parameter in pg_attribute.h. - */ - if (!IsStorageCompressible(tform->typstorage)) - attTup->attcompression = InvalidCompressionMethod; - else if (!CompressionMethodIsValid(attTup->attcompression)) - attTup->attcompression = GetDefaultToastCompression(); - } - else - attTup->attcompression = InvalidCompressionMethod; + attTup->attcompression = InvalidCompressionMethod; ReleaseSysCache(typeTuple); @@ -15613,7 +15586,6 @@ ATExecSetCompression(AlteredTableInfo *tab, Form_pg_attribute atttableform; AttrNumber attnum; char *compression; - char typstorage; char cmethod; ObjectAddress address; @@ -15638,17 +15610,11 @@ ATExecSetCompression(AlteredTableInfo *tab, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot alter system column \"%s\"", column))); - typstorage = get_typstorage(atttableform->atttypid); - - /* prevent from setting compression methods for uncompressible type */ - if (!IsStorageCompressible(typstorage)) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("column data type %s does not support compression", - format_type_be(atttableform->atttypid)))); - - /* get the attribute compression method. */ - cmethod = GetAttributeCompression(atttableform, compression); + /* + * Check that column type is compressible, then get the attribute + * compression method code + */ + cmethod = GetAttributeCompression(atttableform->atttypid, compression); /* update pg_attribute entry */ atttableform->attcompression = cmethod; @@ -15662,7 +15628,10 @@ ATExecSetCompression(AlteredTableInfo *tab, * Apply the change to indexes as well (only for simple index columns, * matching behavior of index.c ConstructTupleDescriptor()). */ - SetIndexStorageProperties(rel, attrel, attnum, cmethod, '\0', lockmode); + SetIndexStorageProperties(rel, attrel, attnum, + false, 0, + true, cmethod, + lockmode); heap_freetuple(tuple); @@ -18612,29 +18581,30 @@ ATDetachCheckNoForeignKeyRefs(Relation partition) * resolve column compression specification to compression method. */ static char -GetAttributeCompression(Form_pg_attribute att, char *compression) +GetAttributeCompression(Oid atttypid, char *compression) { - char typstorage = get_typstorage(att->atttypid); char cmethod; + if (compression == NULL || strcmp(compression, "default") == 0) + return InvalidCompressionMethod; + /* - * No compression for plain/external storage, refer comments atop - * attcompression parameter in pg_attribute.h + * To specify a nondefault method, the column data type must be toastable. + * Note this says nothing about whether the column's attstorage setting + * permits compression; we intentionally allow attstorage and + * attcompression to be independent. But with a non-toastable type, + * attstorage could not be set to a value that would permit compression. + * + * We don't actually need to enforce this, since nothing bad would happen + * if attcompression were non-default; it would never be consulted. But + * it seems more user-friendly to complain about a certainly-useless + * attempt to set the property. */ - if (!IsStorageCompressible(typstorage)) - { - if (compression == NULL) - return InvalidCompressionMethod; - + if (!TypeIsToastable(atttypid)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("column data type %s does not support compression", - format_type_be(att->atttypid)))); - } - - /* fallback to default compression if it's not specified */ - if (compression == NULL) - return GetDefaultToastCompression(); + format_type_be(atttypid)))); cmethod = CompressionNameToMethod(compression); if (!CompressionMethodIsValid(cmethod)) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index aaf1a51f685ae..9ee90e3f13a40 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -561,6 +561,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %type TableConstraint TableLikeClause %type TableLikeOptionList TableLikeOption +%type column_compression opt_column_compression %type ColQualList %type ColConstraint ColConstraintElem ConstraintAttr %type key_actions key_delete key_match key_update key_action @@ -609,7 +610,6 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %type hash_partbound %type hash_partbound_elem -%type optColumnCompression /* * Non-keyword token types. These are hard-wired into the "flex" lexer. @@ -2302,6 +2302,15 @@ alter_table_cmd: n->def = (Node *) makeString($6); $$ = (Node *)n; } + /* ALTER TABLE ALTER [COLUMN] SET COMPRESSION */ + | ALTER opt_column ColId SET column_compression + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetCompression; + n->name = $3; + n->def = (Node *) makeString($5); + $$ = (Node *)n; + } /* ALTER TABLE ALTER [COLUMN] ADD GENERATED ... AS IDENTITY ... */ | ALTER opt_column ColId ADD_P GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList { @@ -2346,15 +2355,6 @@ alter_table_cmd: n->missing_ok = true; $$ = (Node *)n; } - /* ALTER TABLE ALTER [COLUMN] SET (COMPRESSION ) */ - | ALTER opt_column ColId SET optColumnCompression - { - AlterTableCmd *n = makeNode(AlterTableCmd); - n->subtype = AT_SetCompression; - n->name = $3; - n->def = (Node *) makeString($5); - $$ = (Node *)n; - } /* ALTER TABLE DROP [COLUMN] IF EXISTS [RESTRICT|CASCADE] */ | DROP opt_column IF_P EXISTS ColId opt_drop_behavior { @@ -3462,7 +3462,7 @@ TypedTableElement: | TableConstraint { $$ = $1; } ; -columnDef: ColId Typename optColumnCompression create_generic_options ColQualList +columnDef: ColId Typename opt_column_compression create_generic_options ColQualList { ColumnDef *n = makeNode(ColumnDef); n->colname = $1; @@ -3522,13 +3522,15 @@ columnOptions: ColId ColQualList } ; -optColumnCompression: - COMPRESSION name - { - $$ = $2; - } - | /*EMPTY*/ { $$ = NULL; } - ; +column_compression: + COMPRESSION ColId { $$ = $2; } + | COMPRESSION DEFAULT { $$ = pstrdup("default"); } + ; + +opt_column_compression: + column_compression { $$ = $1; } + | /*EMPTY*/ { $$ = NULL; } + ; ColQualList: ColQualList ColConstraint { $$ = lappend($1, $2); } diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index ee731044b6395..87bc68870469c 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -4651,13 +4651,13 @@ static struct config_enum ConfigureNamesEnum[] = { {"default_toast_compression", PGC_USERSET, CLIENT_CONN_STATEMENT, - gettext_noop("Sets the default compression for new columns."), - NULL, - GUC_IS_NAME + gettext_noop("Sets the default compression method for compressible values."), + NULL }, &default_toast_compression, TOAST_PGLZ_COMPRESSION, - default_toast_compression_options, NULL, NULL + default_toast_compression_options, + NULL, NULL, NULL }, { diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h index fc054af5ba18c..3c1cd858a8580 100644 --- a/src/bin/pg_dump/pg_backup.h +++ b/src/bin/pg_dump/pg_backup.h @@ -208,8 +208,6 @@ typedef struct Archive /* other important stuff */ char *searchpath; /* search_path to set during restore */ - char *default_toast_compression; /* default TOAST compression to - * set during restore */ char *use_role; /* Issue SET ROLE to this */ /* error handling */ diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 86de26a4bf0ce..6b046e7734d33 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -86,7 +86,6 @@ static void _selectTableAccessMethod(ArchiveHandle *AH, const char *tableam); static void processEncodingEntry(ArchiveHandle *AH, TocEntry *te); static void processStdStringsEntry(ArchiveHandle *AH, TocEntry *te); static void processSearchPathEntry(ArchiveHandle *AH, TocEntry *te); -static void processToastCompressionEntry(ArchiveHandle *AH, TocEntry *te); static int _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH); static RestorePass _tocEntryRestorePass(TocEntry *te); static bool _tocEntryIsACL(TocEntry *te); @@ -2638,8 +2637,6 @@ ReadToc(ArchiveHandle *AH) processStdStringsEntry(AH, te); else if (strcmp(te->desc, "SEARCHPATH") == 0) processSearchPathEntry(AH, te); - else if (strcmp(te->desc, "TOASTCOMPRESSION") == 0) - processToastCompressionEntry(AH, te); } } @@ -2697,29 +2694,6 @@ processSearchPathEntry(ArchiveHandle *AH, TocEntry *te) AH->public.searchpath = pg_strdup(te->defn); } -static void -processToastCompressionEntry(ArchiveHandle *AH, TocEntry *te) -{ - /* te->defn should have the form SET default_toast_compression = 'x'; */ - char *defn = pg_strdup(te->defn); - char *ptr1; - char *ptr2 = NULL; - - ptr1 = strchr(defn, '\''); - if (ptr1) - ptr2 = strchr(++ptr1, '\''); - if (ptr2) - { - *ptr2 = '\0'; - AH->public.default_toast_compression = pg_strdup(ptr1); - } - else - fatal("invalid TOASTCOMPRESSION item: %s", - te->defn); - - free(defn); -} - static void StrictNamesCheck(RestoreOptions *ropt) { @@ -2779,8 +2753,7 @@ _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH) /* These items are treated specially */ if (strcmp(te->desc, "ENCODING") == 0 || strcmp(te->desc, "STDSTRINGS") == 0 || - strcmp(te->desc, "SEARCHPATH") == 0 || - strcmp(te->desc, "TOASTCOMPRESSION") == 0) + strcmp(te->desc, "SEARCHPATH") == 0) return REQ_SPECIAL; /* @@ -3103,11 +3076,6 @@ _doSetFixedOutputState(ArchiveHandle *AH) if (AH->public.searchpath) ahprintf(AH, "%s", AH->public.searchpath); - /* Select the dump-time default_toast_compression */ - if (AH->public.default_toast_compression) - ahprintf(AH, "SET default_toast_compression = '%s';\n", - AH->public.default_toast_compression); - /* Make sure function checking is disabled */ ahprintf(AH, "SET check_function_bodies = false;\n"); diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 339c3937180f9..8f53cc7c3b871 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -276,7 +276,6 @@ static void dumpDatabaseConfig(Archive *AH, PQExpBuffer outbuf, static void dumpEncoding(Archive *AH); static void dumpStdStrings(Archive *AH); static void dumpSearchPath(Archive *AH); -static void dumpToastCompression(Archive *AH); static void binary_upgrade_set_type_oids_by_type_oid(Archive *fout, PQExpBuffer upgrade_buffer, Oid pg_type_oid, @@ -925,13 +924,11 @@ main(int argc, char **argv) */ /* - * First the special entries for ENCODING, STDSTRINGS, SEARCHPATH and - * TOASTCOMPRESSION. + * First the special entries for ENCODING, STDSTRINGS, and SEARCHPATH. */ dumpEncoding(fout); dumpStdStrings(fout); dumpSearchPath(fout); - dumpToastCompression(fout); /* The database items are always next, unless we don't want them at all */ if (dopt.outputCreateDB) @@ -3398,58 +3395,6 @@ dumpSearchPath(Archive *AH) destroyPQExpBuffer(path); } -/* - * dumpToastCompression: save the dump-time default TOAST compression in the - * archive - */ -static void -dumpToastCompression(Archive *AH) -{ - char *toast_compression; - PQExpBuffer qry; - - if (AH->dopt->no_toast_compression) - { - /* we don't intend to dump the info, so no need to fetch it either */ - return; - } - - if (AH->remoteVersion < 140000) - { - /* pre-v14, the only method was pglz */ - toast_compression = pg_strdup("pglz"); - } - else - { - PGresult *res; - - res = ExecuteSqlQueryForSingleRow(AH, "SHOW default_toast_compression"); - toast_compression = pg_strdup(PQgetvalue(res, 0, 0)); - PQclear(res); - } - - qry = createPQExpBuffer(); - appendPQExpBufferStr(qry, "SET default_toast_compression = "); - appendStringLiteralAH(qry, toast_compression, AH); - appendPQExpBufferStr(qry, ";\n"); - - pg_log_info("saving default_toast_compression = %s", toast_compression); - - ArchiveEntry(AH, nilCatalogId, createDumpId(), - ARCHIVE_OPTS(.tag = "TOASTCOMPRESSION", - .description = "TOASTCOMPRESSION", - .section = SECTION_PRE_DATA, - .createStmt = qry->data)); - - /* - * Also save it in AH->default_toast_compression, in case we're doing - * plain text dump. - */ - AH->default_toast_compression = toast_compression; - - destroyPQExpBuffer(qry); -} - /* * getBlobs: @@ -16399,29 +16344,7 @@ dumpTableSchema(Archive *fout, const TableInfo *tbinfo) } /* - * Dump per-column attributes. - */ - if (tbinfo->attoptions[j][0] != '\0') - appendPQExpBuffer(q, "ALTER %sTABLE ONLY %s ALTER COLUMN %s SET (%s);\n", - foreign, qualrelname, - fmtId(tbinfo->attnames[j]), - tbinfo->attoptions[j]); - - /* - * Dump per-column fdw options. - */ - if (tbinfo->relkind == RELKIND_FOREIGN_TABLE && - tbinfo->attfdwoptions[j][0] != '\0') - appendPQExpBuffer(q, - "ALTER FOREIGN TABLE %s ALTER COLUMN %s OPTIONS (\n" - " %s\n" - ");\n", - qualrelname, - fmtId(tbinfo->attnames[j]), - tbinfo->attfdwoptions[j]); - - /* - * Dump per-column compression, if different from default. + * Dump per-column compression, if it's been set. */ if (!dopt->no_toast_compression) { @@ -16440,14 +16363,34 @@ dumpTableSchema(Archive *fout, const TableInfo *tbinfo) break; } - if (cmname != NULL && - (fout->default_toast_compression == NULL || - strcmp(cmname, fout->default_toast_compression) != 0)) + if (cmname != NULL) appendPQExpBuffer(q, "ALTER %sTABLE ONLY %s ALTER COLUMN %s SET COMPRESSION %s;\n", foreign, qualrelname, fmtId(tbinfo->attnames[j]), cmname); } + + /* + * Dump per-column attributes. + */ + if (tbinfo->attoptions[j][0] != '\0') + appendPQExpBuffer(q, "ALTER %sTABLE ONLY %s ALTER COLUMN %s SET (%s);\n", + foreign, qualrelname, + fmtId(tbinfo->attnames[j]), + tbinfo->attoptions[j]); + + /* + * Dump per-column fdw options. + */ + if (tbinfo->relkind == RELKIND_FOREIGN_TABLE && + tbinfo->attfdwoptions[j][0] != '\0') + appendPQExpBuffer(q, + "ALTER FOREIGN TABLE %s ALTER COLUMN %s OPTIONS (\n" + " %s\n" + ");\n", + qualrelname, + fmtId(tbinfo->attnames[j]), + tbinfo->attfdwoptions[j]); } /* end loop over columns */ if (ftoptions) diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 3e39fdb545297..195f8d8cd2d32 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -1636,9 +1636,9 @@ describeOneTableDetails(const char *schemaname, indexdef_col = -1, fdwopts_col = -1, attstorage_col = -1, + attcompression_col = -1, attstattarget_col = -1, - attdescr_col = -1, - attcompression_col = -1; + attdescr_col = -1; int numrows; struct { @@ -2055,7 +2055,7 @@ describeOneTableDetails(const char *schemaname, appendPQExpBufferStr(&buf, ",\n a.attstorage"); attstorage_col = cols++; - /* compression info */ + /* compression info, if relevant to relkind */ if (pset.sversion >= 140000 && !pset.hide_compression && (tableinfo.relkind == RELKIND_RELATION || @@ -2259,7 +2259,7 @@ describeOneTableDetails(const char *schemaname, if (fdwopts_col >= 0) printTableAddCell(&cont, PQgetvalue(res, i, fdwopts_col), false, false); - /* Storage and Description */ + /* Storage mode, if relevant */ if (attstorage_col >= 0) { char *storage = PQgetvalue(res, i, attstorage_col); @@ -2273,7 +2273,7 @@ describeOneTableDetails(const char *schemaname, false, false); } - /* Column compression. */ + /* Column compression, if relevant */ if (attcompression_col >= 0) { char *compression = PQgetvalue(res, i, attcompression_col); diff --git a/src/include/access/toast_compression.h b/src/include/access/toast_compression.h index 9e2c1cbe1a68e..c992ece4c4acc 100644 --- a/src/include/access/toast_compression.h +++ b/src/include/access/toast_compression.h @@ -23,16 +23,16 @@ extern int default_toast_compression; /* - * Built-in compression method-id. The toast compression header will store + * Built-in compression method ID. The toast compression header will store * this in the first 2 bits of the raw length. These built-in compression - * method-id are directly mapped to the built-in compression methods. + * method IDs are directly mapped to the built-in compression methods. * * Don't use these values for anything other than understanding the meaning * of the raw bits from a varlena; in particular, if the goal is to identify * a compression method, use the constants TOAST_PGLZ_COMPRESSION, etc. * below. We might someday support more than 4 compression methods, but * we can never have more than 4 values in this enum, because there are - * only 2 bits available in the places where this is used. + * only 2 bits available in the places where this is stored. */ typedef enum ToastCompressionId { @@ -42,8 +42,9 @@ typedef enum ToastCompressionId } ToastCompressionId; /* - * Built-in compression methods. pg_attribute will store this in the - * attcompression column. + * Built-in compression methods. pg_attribute will store these in the + * attcompression column. In attcompression, InvalidCompressionMethod + * denotes the default behavior. */ #define TOAST_PGLZ_COMPRESSION 'p' #define TOAST_LZ4_COMPRESSION 'l' @@ -51,19 +52,6 @@ typedef enum ToastCompressionId #define CompressionMethodIsValid(cm) ((cm) != InvalidCompressionMethod) -#define IsStorageCompressible(storage) ((storage) != TYPSTORAGE_PLAIN && \ - (storage) != TYPSTORAGE_EXTERNAL) - -/* - * GetDefaultToastCompression -- get the default toast compression method - * - * This exists to hide the use of the default_toast_compression GUC variable. - */ -static inline char -GetDefaultToastCompression(void) -{ - return (char) default_toast_compression; -} /* pglz compression/decompression routines */ extern struct varlena *pglz_compress_datum(const struct varlena *value); diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 958f12e66a14e..9fe49fa2911d6 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202105231 +#define CATALOG_VERSION_NO 202105271 #endif diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h index 1e26016214616..603392fe81b04 100644 --- a/src/include/catalog/pg_attribute.h +++ b/src/include/catalog/pg_attribute.h @@ -126,8 +126,12 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, char attstorage; /* - * Compression method. Must be InvalidCompressionMethod if and only if - * typstorage is 'plain' or 'external'. + * attcompression sets the current compression method of the attribute. + * Typically this is InvalidCompressionMethod ('\0') to specify use of the + * current default setting (see default_toast_compression). Otherwise, + * 'p' selects pglz compression, while 'l' selects LZ4 compression. + * However, this field is ignored whenever attstorage does not allow + * compression. */ char attcompression BKI_DEFAULT('\0'); diff --git a/src/test/regress/expected/compression.out b/src/test/regress/expected/compression.out index 61e97cb33cec3..5c645e46500b7 100644 --- a/src/test/regress/expected/compression.out +++ b/src/test/regress/expected/compression.out @@ -53,7 +53,7 @@ SELECT * INTO cmmove1 FROM cmdata; Table "public.cmmove1" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description --------+------+-----------+----------+---------+----------+-------------+--------------+------------- - f1 | text | | | | extended | pglz | | + f1 | text | | | | extended | | | SELECT pg_column_compression(f1) FROM cmmove1; pg_column_compression @@ -146,7 +146,7 @@ ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE varchar; Table "public.cmdata2" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description --------+-------------------+-----------+----------+---------+----------+-------------+--------------+------------- - f1 | character varying | | | | extended | pglz | | + f1 | character varying | | | | extended | | | ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE int USING f1::integer; \d+ cmdata2 @@ -158,6 +158,7 @@ ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE int USING f1::integer; --changing column storage should not impact the compression method --but the data should not be compressed ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE varchar; +ALTER TABLE cmdata2 ALTER COLUMN f1 SET COMPRESSION pglz; \d+ cmdata2 Table "public.cmdata2" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description @@ -179,12 +180,12 @@ SELECT pg_column_compression(f1) FROM cmdata2; (1 row) -- test compression with materialized view -CREATE MATERIALIZED VIEW mv(x) AS SELECT * FROM cmdata1; -\d+ mv - Materialized view "public.mv" +CREATE MATERIALIZED VIEW compressmv(x) AS SELECT * FROM cmdata1; +\d+ compressmv + Materialized view "public.compressmv" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description --------+------+-----------+----------+---------+----------+-------------+--------------+------------- - x | text | | | | extended | pglz | | + x | text | | | | extended | | | View definition: SELECT cmdata1.f1 AS x FROM cmdata1; @@ -196,7 +197,7 @@ SELECT pg_column_compression(f1) FROM cmdata1; lz4 (2 rows) -SELECT pg_column_compression(x) FROM mv; +SELECT pg_column_compression(x) FROM compressmv; pg_column_compression ----------------------- lz4 @@ -222,7 +223,7 @@ SELECT pg_column_compression(f1) FROM cmpart2; pglz (1 row) --- test compression with inheritence, error +-- test compression with inheritance, error CREATE TABLE cminh() INHERITS(cmdata, cmdata1); NOTICE: merging multiple inherited definitions of column "f1" ERROR: column "f1" has a compression method conflict @@ -239,14 +240,6 @@ SET default_toast_compression = 'I do not exist compression'; ERROR: invalid value for parameter "default_toast_compression": "I do not exist compression" HINT: Available values: pglz, lz4. SET default_toast_compression = 'lz4'; -DROP TABLE cmdata2; -CREATE TABLE cmdata2 (f1 text); -\d+ cmdata2 - Table "public.cmdata2" - Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description ---------+------+-----------+----------+---------+----------+-------------+--------------+------------- - f1 | text | | | | extended | lz4 | | - SET default_toast_compression = 'pglz'; -- test alter compression method ALTER TABLE cmdata ALTER COLUMN f1 SET COMPRESSION lz4; @@ -266,10 +259,17 @@ SELECT pg_column_compression(f1) FROM cmdata; lz4 (2 rows) --- test alter compression method for the materialized view -ALTER MATERIALIZED VIEW mv ALTER COLUMN x SET COMPRESSION lz4; -\d+ mv - Materialized view "public.mv" +ALTER TABLE cmdata2 ALTER COLUMN f1 SET COMPRESSION default; +\d+ cmdata2 + Table "public.cmdata2" + Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description +--------+-------------------+-----------+----------+---------+---------+-------------+--------------+------------- + f1 | character varying | | | | plain | | | + +-- test alter compression method for materialized views +ALTER MATERIALIZED VIEW compressmv ALTER COLUMN x SET COMPRESSION lz4; +\d+ compressmv + Materialized view "public.compressmv" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description --------+------+-----------+----------+---------+----------+-------------+--------------+------------- x | text | | | | extended | lz4 | | @@ -277,7 +277,7 @@ View definition: SELECT cmdata1.f1 AS x FROM cmdata1; --- test alter compression method for the partitioned table +-- test alter compression method for partitioned tables ALTER TABLE cmpart1 ALTER COLUMN f1 SET COMPRESSION pglz; ALTER TABLE cmpart2 ALTER COLUMN f1 SET COMPRESSION lz4; -- new data should be compressed with the current compression method diff --git a/src/test/regress/expected/compression_1.out b/src/test/regress/expected/compression_1.out index d03d6255ae378..aac96037fcf86 100644 --- a/src/test/regress/expected/compression_1.out +++ b/src/test/regress/expected/compression_1.out @@ -50,7 +50,7 @@ SELECT * INTO cmmove1 FROM cmdata; Table "public.cmmove1" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description --------+------+-----------+----------+---------+----------+-------------+--------------+------------- - f1 | text | | | | extended | pglz | | + f1 | text | | | | extended | | | SELECT pg_column_compression(f1) FROM cmmove1; pg_column_compression @@ -144,7 +144,7 @@ ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE varchar; Table "public.cmdata2" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description --------+-------------------+-----------+----------+---------+----------+-------------+--------------+------------- - f1 | character varying | | | | extended | pglz | | + f1 | character varying | | | | extended | | | ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE int USING f1::integer; \d+ cmdata2 @@ -156,6 +156,7 @@ ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE int USING f1::integer; --changing column storage should not impact the compression method --but the data should not be compressed ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE varchar; +ALTER TABLE cmdata2 ALTER COLUMN f1 SET COMPRESSION pglz; \d+ cmdata2 Table "public.cmdata2" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description @@ -177,18 +178,18 @@ SELECT pg_column_compression(f1) FROM cmdata2; (1 row) -- test compression with materialized view -CREATE MATERIALIZED VIEW mv(x) AS SELECT * FROM cmdata1; +CREATE MATERIALIZED VIEW compressmv(x) AS SELECT * FROM cmdata1; ERROR: relation "cmdata1" does not exist -LINE 1: CREATE MATERIALIZED VIEW mv(x) AS SELECT * FROM cmdata1; - ^ -\d+ mv +LINE 1: ...TE MATERIALIZED VIEW compressmv(x) AS SELECT * FROM cmdata1; + ^ +\d+ compressmv SELECT pg_column_compression(f1) FROM cmdata1; ERROR: relation "cmdata1" does not exist LINE 1: SELECT pg_column_compression(f1) FROM cmdata1; ^ -SELECT pg_column_compression(x) FROM mv; -ERROR: relation "mv" does not exist -LINE 1: SELECT pg_column_compression(x) FROM mv; +SELECT pg_column_compression(x) FROM compressmv; +ERROR: relation "compressmv" does not exist +LINE 1: SELECT pg_column_compression(x) FROM compressmv; ^ -- test compression with partition CREATE TABLE cmpart(f1 text COMPRESSION lz4) PARTITION BY HASH(f1); @@ -217,7 +218,7 @@ SELECT pg_column_compression(f1) FROM cmpart2; ----------------------- (0 rows) --- test compression with inheritence, error +-- test compression with inheritance, error CREATE TABLE cminh() INHERITS(cmdata, cmdata1); ERROR: relation "cmdata1" does not exist CREATE TABLE cminh(f1 TEXT COMPRESSION lz4) INHERITS(cmdata); @@ -234,14 +235,6 @@ HINT: Available values: pglz. SET default_toast_compression = 'lz4'; ERROR: invalid value for parameter "default_toast_compression": "lz4" HINT: Available values: pglz. -DROP TABLE cmdata2; -CREATE TABLE cmdata2 (f1 text); -\d+ cmdata2 - Table "public.cmdata2" - Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description ---------+------+-----------+----------+---------+----------+-------------+--------------+------------- - f1 | text | | | | extended | pglz | | - SET default_toast_compression = 'pglz'; -- test alter compression method ALTER TABLE cmdata ALTER COLUMN f1 SET COMPRESSION lz4; @@ -264,11 +257,18 @@ SELECT pg_column_compression(f1) FROM cmdata; pglz (2 rows) --- test alter compression method for the materialized view -ALTER MATERIALIZED VIEW mv ALTER COLUMN x SET COMPRESSION lz4; -ERROR: relation "mv" does not exist -\d+ mv --- test alter compression method for the partitioned table +ALTER TABLE cmdata2 ALTER COLUMN f1 SET COMPRESSION default; +\d+ cmdata2 + Table "public.cmdata2" + Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description +--------+-------------------+-----------+----------+---------+---------+-------------+--------------+------------- + f1 | character varying | | | | plain | | | + +-- test alter compression method for materialized views +ALTER MATERIALIZED VIEW compressmv ALTER COLUMN x SET COMPRESSION lz4; +ERROR: relation "compressmv" does not exist +\d+ compressmv +-- test alter compression method for partitioned tables ALTER TABLE cmpart1 ALTER COLUMN f1 SET COMPRESSION pglz; ERROR: relation "cmpart1" does not exist ALTER TABLE cmpart2 ALTER COLUMN f1 SET COMPRESSION lz4; diff --git a/src/test/regress/sql/compression.sql b/src/test/regress/sql/compression.sql index 76d1776d83298..35557c1f7de11 100644 --- a/src/test/regress/sql/compression.sql +++ b/src/test/regress/sql/compression.sql @@ -69,6 +69,7 @@ ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE int USING f1::integer; --changing column storage should not impact the compression method --but the data should not be compressed ALTER TABLE cmdata2 ALTER COLUMN f1 TYPE varchar; +ALTER TABLE cmdata2 ALTER COLUMN f1 SET COMPRESSION pglz; \d+ cmdata2 ALTER TABLE cmdata2 ALTER COLUMN f1 SET STORAGE plain; \d+ cmdata2 @@ -76,10 +77,10 @@ INSERT INTO cmdata2 VALUES (repeat('123456789', 800)); SELECT pg_column_compression(f1) FROM cmdata2; -- test compression with materialized view -CREATE MATERIALIZED VIEW mv(x) AS SELECT * FROM cmdata1; -\d+ mv +CREATE MATERIALIZED VIEW compressmv(x) AS SELECT * FROM cmdata1; +\d+ compressmv SELECT pg_column_compression(f1) FROM cmdata1; -SELECT pg_column_compression(x) FROM mv; +SELECT pg_column_compression(x) FROM compressmv; -- test compression with partition CREATE TABLE cmpart(f1 text COMPRESSION lz4) PARTITION BY HASH(f1); @@ -92,7 +93,7 @@ INSERT INTO cmpart VALUES (repeat('123456789', 4004)); SELECT pg_column_compression(f1) FROM cmpart1; SELECT pg_column_compression(f1) FROM cmpart2; --- test compression with inheritence, error +-- test compression with inheritance, error CREATE TABLE cminh() INHERITS(cmdata, cmdata1); CREATE TABLE cminh(f1 TEXT COMPRESSION lz4) INHERITS(cmdata); @@ -100,9 +101,6 @@ CREATE TABLE cminh(f1 TEXT COMPRESSION lz4) INHERITS(cmdata); SET default_toast_compression = ''; SET default_toast_compression = 'I do not exist compression'; SET default_toast_compression = 'lz4'; -DROP TABLE cmdata2; -CREATE TABLE cmdata2 (f1 text); -\d+ cmdata2 SET default_toast_compression = 'pglz'; -- test alter compression method @@ -111,11 +109,14 @@ INSERT INTO cmdata VALUES (repeat('123456789', 4004)); \d+ cmdata SELECT pg_column_compression(f1) FROM cmdata; --- test alter compression method for the materialized view -ALTER MATERIALIZED VIEW mv ALTER COLUMN x SET COMPRESSION lz4; -\d+ mv +ALTER TABLE cmdata2 ALTER COLUMN f1 SET COMPRESSION default; +\d+ cmdata2 + +-- test alter compression method for materialized views +ALTER MATERIALIZED VIEW compressmv ALTER COLUMN x SET COMPRESSION lz4; +\d+ compressmv --- test alter compression method for the partitioned table +-- test alter compression method for partitioned tables ALTER TABLE cmpart1 ALTER COLUMN f1 SET COMPRESSION pglz; ALTER TABLE cmpart2 ALTER COLUMN f1 SET COMPRESSION lz4; From a4390abecf0f5152cff864e82b67e5f6c8489698 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 27 May 2021 15:55:08 -0400 Subject: [PATCH 375/671] Reduce the range of OIDs reserved for genbki.pl. Commit ab596105b increased FirstBootstrapObjectId from 12000 to 13000, but we've had some push-back about that. It's worrisome to reduce the daylight between there and FirstNormalObjectId, because the number of OIDs consumed during initdb for collation objects is hard to predict. We can improve the situation by abandoning the assumption that these OIDs must be globally unique. It should be sufficient for them to be unique per-catalog. (Any code that's unhappy about that is broken anyway, since no more than per-catalog uniqueness can be guaranteed once the OID counter wraps around.) With that change, the largest OID assigned during genbki.pl (starting from a base of 10000) is a bit under 11000. This allows reverting FirstBootstrapObjectId to 12000 with reasonable confidence that that will be sufficient for many years to come. We are not, at this time, abandoning the expectation that hand-assigned OIDs (below 10000) are globally unique. Someday that'll likely be necessary, but the need seems years away still. This is late for v14, but it seems worth doing it now so that downstream software doesn't have to deal with the consequences of a change in FirstBootstrapObjectId. In any case, we already bought into forcing an initdb for beta2, so another catversion bump won't hurt. Discussion: https://postgr.es/m/1665197.1622065382@sss.pgh.pa.us --- doc/src/sgml/bki.sgml | 4 ++-- src/backend/catalog/genbki.pl | 33 +++++++++++++++++++++++--------- src/include/access/transam.h | 14 ++++++++------ src/include/catalog/catversion.h | 2 +- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/doc/src/sgml/bki.sgml b/doc/src/sgml/bki.sgml index b33e59d5e42c5..db1b3d5e9a028 100644 --- a/doc/src/sgml/bki.sgml +++ b/doc/src/sgml/bki.sgml @@ -418,11 +418,11 @@ If genbki.pl needs to assign an OID to a catalog entry that does not have a manually-assigned OID, it will use a value in - the range 10000—12999. The server's OID counter is set to 13000 + the range 10000—11999. The server's OID counter is set to 12000 at the start of a bootstrap run. Thus objects created by regular SQL commands during the later phases of bootstrap, such as objects created while running the information_schema.sql script, - receive OIDs of 13000 or above. + receive OIDs of 12000 or above. diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index f893ae4f45328..81363a0710dcd 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -167,15 +167,17 @@ die "found $found duplicate OID(s) in catalog data\n" if $found; -# Oids not specified in the input files are automatically assigned, +# OIDs not specified in the input files are automatically assigned, # starting at FirstGenbkiObjectId, extending up to FirstBootstrapObjectId. +# We allow such OIDs to be assigned independently within each catalog. my $FirstGenbkiObjectId = Catalog::FindDefinedSymbol('access/transam.h', $include_path, 'FirstGenbkiObjectId'); my $FirstBootstrapObjectId = Catalog::FindDefinedSymbol('access/transam.h', $include_path, 'FirstBootstrapObjectId'); -my $GenbkiNextOid = $FirstGenbkiObjectId; +# Hash of next available OID, indexed by catalog name. +my %GenbkiNextOids; # Fetch some special data that we will substitute into the output file. @@ -563,8 +565,7 @@ # Assign oid if oid column exists and no explicit assignment in row if ($attname eq "oid" and not defined $bki_values{$attname}) { - $bki_values{$attname} = $GenbkiNextOid; - $GenbkiNextOid++; + $bki_values{$attname} = assign_next_oid($catname); } # Replace OID synonyms with OIDs per the appropriate lookup rule. @@ -669,11 +670,6 @@ # last command in the BKI file: build the indexes declared above print $bki "build indices\n"; -# check that we didn't overrun available OIDs -die - "genbki OID counter reached $GenbkiNextOid, overrunning FirstBootstrapObjectId\n" - if $GenbkiNextOid > $FirstBootstrapObjectId; - # Now generate system_constraints.sql foreach my $c (@system_constraints) @@ -1079,6 +1075,25 @@ sub form_pg_type_symbol return $name . $arraystr . 'OID'; } +# Assign an unused OID within the specified catalog. +sub assign_next_oid +{ + my $catname = shift; + + # Initialize, if no previous request for this catalog. + $GenbkiNextOids{$catname} = $FirstGenbkiObjectId + if !defined($GenbkiNextOids{$catname}); + + my $result = $GenbkiNextOids{$catname}++; + + # Check that we didn't overrun available OIDs + die + "genbki OID counter for $catname reached $result, overrunning FirstBootstrapObjectId\n" + if $result >= $FirstBootstrapObjectId; + + return $result; +} + sub usage { die < Date: Thu, 27 May 2021 17:09:16 -0700 Subject: [PATCH 376/671] Fix VACUUM VERBOSE's LP_DEAD item pages output. Oversight in commit 5100010e. --- src/backend/access/heap/vacuumlazy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index fe18af61b3739..ad3feb88b3be9 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -2153,7 +2153,7 @@ lazy_vacuum(LVRelState *vacrel, bool onecall) vacrel->do_index_vacuuming = false; ereport(elevel, (errmsg("\"%s\": index scan bypassed: %u pages from table (%.2f%% of total) have %lld dead item identifiers", - vacrel->relname, vacrel->rel_pages, + vacrel->relname, vacrel->lpdead_item_pages, 100.0 * vacrel->lpdead_item_pages / vacrel->rel_pages, (long long) vacrel->lpdead_items))); } From fb424ae85f6b1e32e545f13902d3ba3429be44df Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Fri, 28 May 2021 09:26:30 -0400 Subject: [PATCH 377/671] Report configured port in MSVC built pg_config This is a long standing omission, discovered when trying to write code that relied on it. Backpatch to all live branches. --- src/tools/msvc/Solution.pm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index 97f012bbb5e4b..3ee57c46da58e 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -1198,6 +1198,8 @@ sub GetFakeConfigure $cfg .= ' --with-tcl' if ($self->{options}->{tcl}); $cfg .= ' --with-perl' if ($self->{options}->{perl}); $cfg .= ' --with-python' if ($self->{options}->{python}); + my $port = $self->{options}->{'--with-pgport'}; + $cfg .= " --with-pgport=$port" if defined($port) return $cfg; } From d69fcb9caef1ac1f38241645d4fb9f7e0ce02a70 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Fri, 28 May 2021 09:35:11 -0400 Subject: [PATCH 378/671] fix syntax error --- src/tools/msvc/Solution.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index 3ee57c46da58e..a7b8f720b5586 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -1199,7 +1199,7 @@ sub GetFakeConfigure $cfg .= ' --with-perl' if ($self->{options}->{perl}); $cfg .= ' --with-python' if ($self->{options}->{python}); my $port = $self->{options}->{'--with-pgport'}; - $cfg .= " --with-pgport=$port" if defined($port) + $cfg .= " --with-pgport=$port" if defined($port); return $cfg; } From b1d6538903504904db44679355ac109aeda01737 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Sat, 29 May 2021 14:48:15 +1200 Subject: [PATCH 379/671] Fix race condition when sharing tuple descriptors. Parallel query processes that called BlessTupleDesc() for identical tuple descriptors at the same moment could crash. There was code to handle that rare case, but it dereferenced a bogus DSA pointer. Repair. Back-patch to 11, where commit cc5f8136 added support for sharing tuple descriptors in parallel queries. Reported-by: Eric Thinnes Discussion: https://postgr.es/m/99aaa2eb-e194-bf07-c29a-1a76b4f2bcf9%40gmx.de --- src/backend/utils/cache/typcache.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cache/typcache.c index 35c8cf7b244d9..de96e96c8fdd1 100644 --- a/src/backend/utils/cache/typcache.c +++ b/src/backend/utils/cache/typcache.c @@ -2822,7 +2822,7 @@ find_or_make_matching_shared_tupledesc(TupleDesc tupdesc) Assert(record_table_entry->key.shared); result = (TupleDesc) dsa_get_address(CurrentSession->area, - record_table_entry->key.shared); + record_table_entry->key.u.shared_tupdesc); Assert(result->tdrefcount == -1); return result; From ba356a397de565c014384aa01a945aab7d50928c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 29 May 2021 14:27:37 -0400 Subject: [PATCH 380/671] Doc: improve libpq service-file docs, avoid overspecifying pathnames. Clarify libpq.sgml's description of service file locations and semantics. Avoid use of backtick'ed pg_config calls to describe paths; that doesn't work on Windows, and even on Unix it's an idiom that not all readers may be instantly familiar with. Don't overspecify the locations of include files, instead writing only as much as you'd use in #include directives. The previous text in these places was incorrect for some installations, depending on where "postgresql" is in the install path. Our convention for referencing the user's home directory seems to be "~", so change the one place that spelled it "$HOME". install-windows.sgml follows the platform convention of spelling file paths with "\", so change the one place that used "/". Haiying Tang and Tom Lane Discussion: https://postgr.es/m/162149020918.26174.7150424047314144297@wrigleys.postgresql.org --- doc/src/sgml/config.sgml | 2 +- doc/src/sgml/install-windows.sgml | 2 +- doc/src/sgml/libpq.sgml | 48 +++++++++++++++++++++---------- doc/src/sgml/pgbuffercache.sgml | 2 +- 4 files changed, 36 insertions(+), 18 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 3b7da468b7cc2..d8c0fd3315de8 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -10888,7 +10888,7 @@ LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1) If LLVM has the required functionality, emit the data needed to allow perf to profile functions generated by JIT. - This writes out files to $HOME/.debug/jit/; the + This writes out files to ~/.debug/jit/; the user is responsible for performing cleanup when desired. The default setting is off. This parameter can only be set at server start. diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgml index db53ee85a877a..312edc6f7aa3a 100644 --- a/doc/src/sgml/install-windows.sgml +++ b/doc/src/sgml/install-windows.sgml @@ -102,7 +102,7 @@ The tools for building using Visual C++ or Platform SDK are in the - src/tools/msvc directory. When building, make sure + src\tools\msvc directory. When building, make sure there are no tools from MinGW or Cygwin present in your system PATH. Also, make sure you have all the required Visual C++ tools available in the PATH. In diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 875950b83c0e2..2fc638c376fd6 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -3829,8 +3829,9 @@ Oid PQftype(const PGresult *res, You can query the system table pg_type to obtain the names and properties of the various data types. The OIDs of the built-in data types are defined - in the file include/server/catalog/pg_type_d.h - in the install directory. + in the file catalog/pg_type_d.h + in the PostgreSQL + installation's include directory. @@ -8091,26 +8092,30 @@ myEventProc(PGEventId evtId, void *evtInfo, void *passThrough) The connection service file allows libpq connection parameters to be associated with a single service name. That service name can then be - specified by a libpq connection, and the associated settings will be + specified in a libpq connection string, and the associated settings will be used. This allows connection parameters to be modified without requiring - a recompile of the libpq application. The service name can also be + a recompile of the libpq-using application. The service name can also be specified using the PGSERVICE environment variable. - The connection service file can be a per-user service file - at ~/.pg_service.conf or the location - specified by the environment variable PGSERVICEFILE, - or it can be a system-wide file - at `pg_config --sysconfdir`/pg_service.conf or in the directory - specified by the environment variable - PGSYSCONFDIR. If service definitions with the same - name exist in the user and the system file, the user file takes - precedence. + Service names can be defined in either a per-user service file or a + system-wide file. If the same service name exists in both the user + and the system file, the user file takes precedence. + By default, the per-user service file is located + at ~/.pg_service.conf; this can be overridden by + setting the environment variable PGSERVICEFILE. + The system-wide file is named pg_service.conf. + By default it is sought in the etc directory + of the PostgreSQL installation + (use pg_config --sysconfdir to identify this + directory precisely). Another directory, but not a different file + name, can be specified by setting the environment variable + PGSYSCONFDIR. - The file uses an INI file format where the section + Either service file uses an INI file format where the section name is the service name and the parameters are connection parameters; see for a list. For example: @@ -8121,9 +8126,22 @@ host=somehost port=5433 user=admin - An example file is provided at + An example file is provided in + the PostgreSQL installation at share/pg_service.conf.sample. + + + Connection parameters obtained from a service file are combined with + parameters obtained from other sources. A service file setting + overrides the corresponding environment variable, and in turn can be + overridden by a value given directly in the connection string. + For example, using the above service file, a connection string + service=mydb port=5434 will use + host somehost, port 5434, + user admin, and other parameters as set by + environment variables or built-in defaults. + diff --git a/doc/src/sgml/pgbuffercache.sgml b/doc/src/sgml/pgbuffercache.sgml index bebbc6b732de4..e68d159d30f1f 100644 --- a/doc/src/sgml/pgbuffercache.sgml +++ b/doc/src/sgml/pgbuffercache.sgml @@ -96,7 +96,7 @@ Fork number within the relation; see - include/common/relpath.h + common/relpath.h From 12cc956664f159e97be71e33f15ec5f42e46b24e Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 31 May 2021 11:35:00 +0900 Subject: [PATCH 381/671] Improve some error wording with multirange type parsing Braces were referred in some error messages as only brackets (not curly brackets or curly braces), which can be confusing as other types of brackets could be used. While on it, add one test to check after the case of junk characters detected after a right brace. Author: Kyotaro Horiguchi Discussion: https://postgr.es/m/20210514.153153.1814935914483287479.horikyota.ntt@gmail.com --- src/backend/utils/adt/multirangetypes.c | 4 ++-- src/test/regress/expected/multirangetypes.out | 7 ++++++- src/test/regress/sql/multirangetypes.sql | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/adt/multirangetypes.c b/src/backend/utils/adt/multirangetypes.c index 0b81649779ac3..fbcc27d0726c7 100644 --- a/src/backend/utils/adt/multirangetypes.c +++ b/src/backend/utils/adt/multirangetypes.c @@ -146,7 +146,7 @@ multirange_in(PG_FUNCTION_ARGS) (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("malformed multirange literal: \"%s\"", input_str), - errdetail("Missing left bracket."))); + errdetail("Missing left brace."))); /* consume ranges */ parse_state = MULTIRANGE_BEFORE_RANGE; @@ -282,7 +282,7 @@ multirange_in(PG_FUNCTION_ARGS) (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("malformed multirange literal: \"%s\"", input_str), - errdetail("Junk after right bracket."))); + errdetail("Junk after right brace."))); ret = make_multirange(mltrngtypoid, rangetyp, range_count, ranges); PG_RETURN_MULTIRANGE_P(ret); diff --git a/src/test/regress/expected/multirangetypes.out b/src/test/regress/expected/multirangetypes.out index 04953a5990324..98ac592127b56 100644 --- a/src/test/regress/expected/multirangetypes.out +++ b/src/test/regress/expected/multirangetypes.out @@ -7,12 +7,17 @@ select ''::textmultirange; ERROR: malformed multirange literal: "" LINE 1: select ''::textmultirange; ^ -DETAIL: Missing left bracket. +DETAIL: Missing left brace. select '{,}'::textmultirange; ERROR: malformed multirange literal: "{,}" LINE 1: select '{,}'::textmultirange; ^ DETAIL: Expected range start. +select '{(,)}.'::textmultirange; +ERROR: malformed multirange literal: "{(,)}." +LINE 1: select '{(,)}.'::textmultirange; + ^ +DETAIL: Junk after right brace. select '{[a,c),}'::textmultirange; ERROR: malformed multirange literal: "{[a,c),}" LINE 1: select '{[a,c),}'::textmultirange; diff --git a/src/test/regress/sql/multirangetypes.sql b/src/test/regress/sql/multirangetypes.sql index 692f2416d9b8d..3cbebedcd4a11 100644 --- a/src/test/regress/sql/multirangetypes.sql +++ b/src/test/regress/sql/multirangetypes.sql @@ -7,6 +7,7 @@ -- negative tests; should fail select ''::textmultirange; select '{,}'::textmultirange; +select '{(,)}.'::textmultirange; select '{[a,c),}'::textmultirange; select '{,[a,c)}'::textmultirange; select '{-[a,z)}'::textmultirange; From d03eeab886baa1be73f8fc2938fb842d25a71fe8 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 31 May 2021 00:29:58 -0700 Subject: [PATCH 382/671] Raise a timeout to 180s, in test 010_logical_decoding_timelines.pl. Per buildfarm member hornet. Also, update Pod documentation showing the lower value. Back-patch to v10, where the test first appeared. --- src/test/perl/PostgresNode.pm | 8 ++++---- src/test/recovery/t/010_logical_decoding_timelines.pl | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index c09a735dae99b..46530255e07c3 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -31,9 +31,9 @@ PostgresNode - class representing PostgreSQL server instance # as well as the psql exit code. Pass some extra psql # options. If there's an error from psql raise an exception. my ($stdout, $stderr, $timed_out); - my $cmdret = $node->psql('postgres', 'SELECT pg_sleep(60)', + my $cmdret = $node->psql('postgres', 'SELECT pg_sleep(600)', stdout => \$stdout, stderr => \$stderr, - timeout => 30, timed_out => \$timed_out, + timeout => 180, timed_out => \$timed_out, extra_params => ['--single-transaction'], on_error_die => 1) print "Sleep timed out" if $timed_out; @@ -1613,9 +1613,9 @@ If given, it must be an array reference containing additional parameters to Bpsql('postgres', 'SELECT pg_sleep(60)', + my $cmdret = $node->psql('postgres', 'SELECT pg_sleep(600)', stdout => \$stdout, stderr => \$stderr, - timeout => 30, timed_out => \$timed_out, + timeout => 180, timed_out => \$timed_out, extra_params => ['--single-transaction']) will set $cmdret to undef and $timed_out to a true value. diff --git a/src/test/recovery/t/010_logical_decoding_timelines.pl b/src/test/recovery/t/010_logical_decoding_timelines.pl index 8719c61a02d07..12edbf760e133 100644 --- a/src/test/recovery/t/010_logical_decoding_timelines.pl +++ b/src/test/recovery/t/010_logical_decoding_timelines.pl @@ -158,7 +158,7 @@ ($ret, $stdout, $stderr) = $node_replica->psql( 'postgres', "SELECT data FROM pg_logical_slot_peek_changes('before_basebackup', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');", - timeout => 30); + timeout => 180); is($ret, 0, 'replay from slot before_basebackup succeeds'); my $final_expected_output_bb = q(BEGIN From 6ee41a301e70fc8e4ad383bad22d695f66ccb0ac Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 31 May 2021 12:03:00 -0400 Subject: [PATCH 383/671] Fix mis-planning of repeated application of a projection. create_projection_plan contains a hidden assumption (here made explicit by an Assert) that a projection-capable Path will yield a projection-capable Plan. Unfortunately, that assumption is violated only a few lines away, by create_projection_plan itself. This means that two stacked ProjectionPaths can yield an outcome where we try to jam the upper path's tlist into a non-projection-capable child node, resulting in an invalid plan. There isn't any good reason to have stacked ProjectionPaths; indeed the whole concept is faulty, since the set of Vars/Aggs/etc needed by the upper one wouldn't necessarily be available in the output of the lower one, nor could the lower one create such values if they weren't available from its input. Hence, we can fix this by adjusting create_projection_path to strip any top-level ProjectionPath from the subpath it's given. (This amounts to saying "oh, we changed our minds about what we need to project here".) The test case added here only fails in v13 and HEAD; before that, we don't attempt to shove the Sort into the parallel part of the plan, for reasons that aren't entirely clear to me. However, all the directly-related code looks generally the same as far back as v11, where the hazard was introduced (by d7c19e62a). So I've got no faith that the same type of bug doesn't exist in v11 and v12, given the right test case. Hence, back-patch the code changes, but not the irrelevant test case, into those branches. Per report from Bas Poot. Discussion: https://postgr.es/m/534fca83789c4a378c7de379e9067d4f@politie.nl --- src/backend/optimizer/plan/createplan.c | 1 + src/backend/optimizer/util/pathnode.c | 19 ++++++++++++++- src/test/regress/expected/select_parallel.out | 23 +++++++++++++++++++ src/test/regress/sql/select_parallel.sql | 4 ++++ 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index b02f7809c9662..439e6b6426c8d 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -1976,6 +1976,7 @@ create_projection_plan(PlannerInfo *root, ProjectionPath *best_path, int flags) */ subplan = create_plan_recurse(root, best_path->subpath, CP_IGNORE_TLIST); + Assert(is_projection_capable_plan(subplan)); tlist = build_path_tlist(root, &best_path->path); } else diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index b248b038e0349..9ce5f95e3b137 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -2632,7 +2632,23 @@ create_projection_path(PlannerInfo *root, PathTarget *target) { ProjectionPath *pathnode = makeNode(ProjectionPath); - PathTarget *oldtarget = subpath->pathtarget; + PathTarget *oldtarget; + + /* + * We mustn't put a ProjectionPath directly above another; it's useless + * and will confuse create_projection_plan. Rather than making sure all + * callers handle that, let's implement it here, by stripping off any + * ProjectionPath in what we're given. Given this rule, there won't be + * more than one. + */ + if (IsA(subpath, ProjectionPath)) + { + ProjectionPath *subpp = (ProjectionPath *) subpath; + + Assert(subpp->path.parent == rel); + subpath = subpp->subpath; + Assert(!IsA(subpath, ProjectionPath)); + } pathnode->path.pathtype = T_Result; pathnode->path.parent = rel; @@ -2658,6 +2674,7 @@ create_projection_path(PlannerInfo *root, * Note: in the latter case, create_projection_plan has to recheck our * conclusion; see comments therein. */ + oldtarget = subpath->pathtarget; if (is_projection_capable_path(subpath) || equal(oldtarget->exprs, target->exprs)) { diff --git a/src/test/regress/expected/select_parallel.out b/src/test/regress/expected/select_parallel.out index 05ebcb284a533..4ea1aa7dfd494 100644 --- a/src/test/regress/expected/select_parallel.out +++ b/src/test/regress/expected/select_parallel.out @@ -1126,6 +1126,29 @@ ORDER BY 1, 2, 3; ------------------------------+---------------------------+-------------+-------------- (0 rows) +EXPLAIN (VERBOSE, COSTS OFF) +SELECT generate_series(1, two), array(select generate_series(1, two)) + FROM tenk1 ORDER BY tenthous; + QUERY PLAN +---------------------------------------------------------------------- + ProjectSet + Output: generate_series(1, tenk1.two), (SubPlan 1), tenk1.tenthous + -> Gather Merge + Output: tenk1.two, tenk1.tenthous + Workers Planned: 4 + -> Result + Output: tenk1.two, tenk1.tenthous + -> Sort + Output: tenk1.tenthous, tenk1.two + Sort Key: tenk1.tenthous + -> Parallel Seq Scan on public.tenk1 + Output: tenk1.tenthous, tenk1.two + SubPlan 1 + -> ProjectSet + Output: generate_series(1, tenk1.two) + -> Result +(16 rows) + -- test passing expanded-value representations to workers CREATE FUNCTION make_some_array(int,int) returns int[] as $$declare x int[]; diff --git a/src/test/regress/sql/select_parallel.sql b/src/test/regress/sql/select_parallel.sql index d31e290ec227e..f9247312484ef 100644 --- a/src/test/regress/sql/select_parallel.sql +++ b/src/test/regress/sql/select_parallel.sql @@ -429,6 +429,10 @@ ORDER BY 1; SELECT * FROM information_schema.foreign_data_wrapper_options ORDER BY 1, 2, 3; +EXPLAIN (VERBOSE, COSTS OFF) +SELECT generate_series(1, two), array(select generate_series(1, two)) + FROM tenk1 ORDER BY tenthous; + -- test passing expanded-value representations to workers CREATE FUNCTION make_some_array(int,int) returns int[] as $$declare x int[]; From 7c544ecdad814ccda709cfb6aa7d62840c3a7486 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 31 May 2021 18:32:41 +0200 Subject: [PATCH 384/671] Fix RADIUS error reporting in hba file parsing The RADIUS-related checks in parse_hba_line() did not respect elevel and did not fill in *err_msg. Also, verify_option_list_length() pasted together error messages in an untranslatable way. To fix the latter, remove the function and do the error checking inline. It's a bit more verbose but only minimally longer, and it makes fixing the first two issues straightforward. Reviewed-by: Magnus Hagander Discussion: https://www.postgresql.org/message-id/flat/8381e425-8c23-99b3-15ec-3115001db1b2%40enterprisedb.com --- src/backend/libpq/hba.c | 90 ++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 42 deletions(-) diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index 60767f295722a..3be8778d21668 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -144,8 +144,6 @@ static List *tokenize_inc_file(List *tokens, const char *outer_filename, const char *inc_filename, int elevel, char **err_msg); static bool parse_hba_auth_opt(char *name, char *val, HbaLine *hbaline, int elevel, char **err_msg); -static bool verify_option_list_length(List *options, const char *optionname, - List *comparelist, const char *comparename, int line_num); static ArrayType *gethba_options(HbaLine *hba); static void fill_hba_line(Tuplestorestate *tuple_store, TupleDesc tupdesc, int lineno, HbaLine *hba, const char *err_msg); @@ -1607,21 +1605,23 @@ parse_hba_line(TokenizedLine *tok_line, int elevel) if (list_length(parsedline->radiusservers) < 1) { - ereport(LOG, + ereport(elevel, (errcode(ERRCODE_CONFIG_FILE_ERROR), errmsg("list of RADIUS servers cannot be empty"), errcontext("line %d of configuration file \"%s\"", line_num, HbaFileName))); + *err_msg = "list of RADIUS servers cannot be empty"; return NULL; } if (list_length(parsedline->radiussecrets) < 1) { - ereport(LOG, + ereport(elevel, (errcode(ERRCODE_CONFIG_FILE_ERROR), errmsg("list of RADIUS secrets cannot be empty"), errcontext("line %d of configuration file \"%s\"", line_num, HbaFileName))); + *err_msg = "list of RADIUS secrets cannot be empty"; return NULL; } @@ -1630,24 +1630,53 @@ parse_hba_line(TokenizedLine *tok_line, int elevel) * but that's already checked above), 1 (use the same value * everywhere) or the same as the number of servers. */ - if (!verify_option_list_length(parsedline->radiussecrets, - "RADIUS secrets", - parsedline->radiusservers, - "RADIUS servers", - line_num)) + if (!(list_length(parsedline->radiussecrets) == 1 || + list_length(parsedline->radiussecrets) == list_length(parsedline->radiusservers))) + { + ereport(elevel, + (errcode(ERRCODE_CONFIG_FILE_ERROR), + errmsg("the number of RADIUS secrets (%d) must be 1 or the same as the number of RADIUS servers (%d)", + list_length(parsedline->radiussecrets), + list_length(parsedline->radiusservers)), + errcontext("line %d of configuration file \"%s\"", + line_num, HbaFileName))); + *err_msg = psprintf("the number of RADIUS secrets (%d) must be 1 or the same as the number of RADIUS servers (%d)", + list_length(parsedline->radiussecrets), + list_length(parsedline->radiusservers)); return NULL; - if (!verify_option_list_length(parsedline->radiusports, - "RADIUS ports", - parsedline->radiusservers, - "RADIUS servers", - line_num)) + } + if (!(list_length(parsedline->radiusports) == 0 || + list_length(parsedline->radiusports) == 1 || + list_length(parsedline->radiusports) == list_length(parsedline->radiusservers))) + { + ereport(elevel, + (errcode(ERRCODE_CONFIG_FILE_ERROR), + errmsg("the number of RADIUS ports (%d) must be 1 or the same as the number of RADIUS servers (%d)", + list_length(parsedline->radiusports), + list_length(parsedline->radiusservers)), + errcontext("line %d of configuration file \"%s\"", + line_num, HbaFileName))); + *err_msg = psprintf("the number of RADIUS ports (%d) must be 1 or the same as the number of RADIUS servers (%d)", + list_length(parsedline->radiusports), + list_length(parsedline->radiusservers)); return NULL; - if (!verify_option_list_length(parsedline->radiusidentifiers, - "RADIUS identifiers", - parsedline->radiusservers, - "RADIUS servers", - line_num)) + } + if (!(list_length(parsedline->radiusidentifiers) == 0 || + list_length(parsedline->radiusidentifiers) == 1 || + list_length(parsedline->radiusidentifiers) == list_length(parsedline->radiusservers))) + { + ereport(elevel, + (errcode(ERRCODE_CONFIG_FILE_ERROR), + errmsg("the number of RADIUS identifiers (%d) must be 1 or the same as the number of RADIUS servers (%d)", + list_length(parsedline->radiusidentifiers), + list_length(parsedline->radiusservers)), + errcontext("line %d of configuration file \"%s\"", + line_num, HbaFileName))); + *err_msg = psprintf("the number of RADIUS identifiers (%d) must be 1 or the same as the number of RADIUS servers (%d)", + list_length(parsedline->radiusidentifiers), + list_length(parsedline->radiusservers)); return NULL; + } } /* @@ -1662,29 +1691,6 @@ parse_hba_line(TokenizedLine *tok_line, int elevel) } -static bool -verify_option_list_length(List *options, const char *optionname, - List *comparelist, const char *comparename, - int line_num) -{ - if (list_length(options) == 0 || - list_length(options) == 1 || - list_length(options) == list_length(comparelist)) - return true; - - ereport(LOG, - (errcode(ERRCODE_CONFIG_FILE_ERROR), - errmsg("the number of %s (%d) must be 1 or the same as the number of %s (%d)", - optionname, - list_length(options), - comparename, - list_length(comparelist) - ), - errcontext("line %d of configuration file \"%s\"", - line_num, HbaFileName))); - return false; -} - /* * Parse one name-value pair as an authentication option into the given * HbaLine. Return true if we successfully parse the option, false if we From a40646e30d85e51a76fb620822d4d921b6802157 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Tue, 1 Jun 2021 11:22:22 +1200 Subject: [PATCH 385/671] Fix error handling in replacement pthread_barrier_init(). Commit 44bf3d50 incorrectly used an errno-style interface when supplying missing pthread functionality (i.e. on macOS), but it should check for and return error numbers directly. --- src/port/pthread_barrier_wait.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/port/pthread_barrier_wait.c b/src/port/pthread_barrier_wait.c index 7ca8e2ce0be0c..8282cc5b89d5c 100644 --- a/src/port/pthread_barrier_wait.c +++ b/src/port/pthread_barrier_wait.c @@ -18,19 +18,17 @@ int pthread_barrier_init(pthread_barrier_t *barrier, const void *attr, int count) { + int error; + barrier->sense = false; barrier->count = count; barrier->arrived = 0; - if (pthread_cond_init(&barrier->cond, NULL) < 0) - return -1; - if (pthread_mutex_init(&barrier->mutex, NULL) < 0) + if ((error = pthread_cond_init(&barrier->cond, NULL)) != 0) + return error; + if ((error = pthread_mutex_init(&barrier->mutex, NULL)) != 0) { - int save_errno = errno; - pthread_cond_destroy(&barrier->cond); - errno = save_errno; - - return -1; + return error; } return 0; From eb89cb43a0d0e401e71b8e2345b5f5bc8b2755a1 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Tue, 1 Jun 2021 14:14:02 +0530 Subject: [PATCH 386/671] pgoutput: Fix memory leak due to RelationSyncEntry.map. Release memory allocated when creating the tuple-conversion map and its component TupleDescs when its owning sync entry is invalidated. TupleDescs must also be freed when no map is deemed necessary, to begin with. Reported-by: Andres Freund Author: Amit Langote Reviewed-by: Takamichi Osumi, Amit Kapila Backpatch-through: 13, where it was introduced Discussion: https://postgr.es/m/MEYP282MB166933B1AB02B4FE56E82453B64D9@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM --- src/backend/replication/pgoutput/pgoutput.c | 46 +++++++++++++++++---- src/test/subscription/t/013_partition.pl | 28 ++++++++++++- 2 files changed, 65 insertions(+), 9 deletions(-) diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index f68348dcf4597..fe12d08a946da 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -74,7 +74,8 @@ static void send_relation_and_attrs(Relation relation, TransactionId xid, /* * Entry in the map used to remember which relation schemas we sent. * - * The schema_sent flag determines if the current schema record was already + * The schema_sent flag determines if the current schema record for the + * relation (and for its ancestor if publish_as_relid is set) was already * sent to the subscriber (in which case we don't need to send it again). * * The schema cache on downstream is however updated only at commit time, @@ -92,10 +93,6 @@ typedef struct RelationSyncEntry { Oid relid; /* relation oid */ - /* - * Did we send the schema? If ancestor relid is set, its schema must also - * have been sent for this to be true. - */ bool schema_sent; List *streamed_txns; /* streamed toplevel transactions with this * schema */ @@ -437,10 +434,17 @@ maybe_send_schema(LogicalDecodingContext *ctx, else schema_sent = relentry->schema_sent; + /* Nothing to do if we already sent the schema. */ if (schema_sent) return; - /* If needed, send the ancestor's schema first. */ + /* + * Nope, so send the schema. If the changes will be published using an + * ancestor's schema, not the relation's own, send that ancestor's schema + * before sending relation's own (XXX - maybe sending only the former + * suffices?). This is also a good place to set the map that will be used + * to convert the relation's tuples into the ancestor's format, if needed. + */ if (relentry->publish_as_relid != RelationGetRelid(relation)) { Relation ancestor = RelationIdGetRelation(relentry->publish_as_relid); @@ -450,8 +454,21 @@ maybe_send_schema(LogicalDecodingContext *ctx, /* Map must live as long as the session does. */ oldctx = MemoryContextSwitchTo(CacheMemoryContext); - relentry->map = convert_tuples_by_name(CreateTupleDescCopy(indesc), - CreateTupleDescCopy(outdesc)); + + /* + * Make copies of the TupleDescs that will live as long as the map + * does before putting into the map. + */ + indesc = CreateTupleDescCopy(indesc); + outdesc = CreateTupleDescCopy(outdesc); + relentry->map = convert_tuples_by_name(indesc, outdesc); + if (relentry->map == NULL) + { + /* Map not necessary, so free the TupleDescs too. */ + FreeTupleDesc(indesc); + FreeTupleDesc(outdesc); + } + MemoryContextSwitchTo(oldctx); send_relation_and_attrs(ancestor, xid, ctx); RelationClose(ancestor); @@ -1011,6 +1028,7 @@ get_rel_sync_entry(PGOutputData *data, Oid relid) entry->pubactions.pubinsert = entry->pubactions.pubupdate = entry->pubactions.pubdelete = entry->pubactions.pubtruncate = false; entry->publish_as_relid = InvalidOid; + entry->map = NULL; /* will be set by maybe_send_schema() if needed */ } /* Validate the entry */ @@ -1191,12 +1209,24 @@ rel_sync_cache_relation_cb(Datum arg, Oid relid) /* * Reset schema sent status as the relation definition may have changed. + * Also free any objects that depended on the earlier definition. */ if (entry != NULL) { entry->schema_sent = false; list_free(entry->streamed_txns); entry->streamed_txns = NIL; + if (entry->map) + { + /* + * Must free the TupleDescs contained in the map explicitly, + * because free_conversion_map() doesn't. + */ + FreeTupleDesc(entry->map->indesc); + FreeTupleDesc(entry->map->outdesc); + free_conversion_map(entry->map); + } + entry->map = NULL; } } diff --git a/src/test/subscription/t/013_partition.pl b/src/test/subscription/t/013_partition.pl index 6daf8daa3cc97..9de01017be5dc 100644 --- a/src/test/subscription/t/013_partition.pl +++ b/src/test/subscription/t/013_partition.pl @@ -6,7 +6,7 @@ use warnings; use PostgresNode; use TestLib; -use Test::More tests => 54; +use Test::More tests => 56; # setup @@ -624,3 +624,29 @@ BEGIN $result = $node_subscriber2->safe_psql('postgres', "SELECT a FROM tab3_1"); is($result, qq(), 'truncate of tab3_1 replicated'); + +# check that the map to convert tuples from leaf partition to the root +# table is correctly rebuilt when a new column is added +$node_publisher->safe_psql('postgres', + "ALTER TABLE tab2 DROP b, ADD COLUMN c text DEFAULT 'pub_tab2', ADD b text"); +$node_publisher->safe_psql('postgres', + "INSERT INTO tab2 (a, b) VALUES (1, 'xxx'), (3, 'yyy'), (5, 'zzz')"); +$node_publisher->safe_psql('postgres', + "INSERT INTO tab2 (a, b, c) VALUES (6, 'aaa', 'xxx_c')"); + +$node_publisher->wait_for_catchup('sub_viaroot'); +$node_publisher->wait_for_catchup('sub2'); + +$result = $node_subscriber1->safe_psql('postgres', + "SELECT c, a, b FROM tab2 ORDER BY 1, 2"); +is( $result, qq(pub_tab2|1|xxx +pub_tab2|3|yyy +pub_tab2|5|zzz +xxx_c|6|aaa), 'inserts into tab2 replicated'); + +$result = $node_subscriber2->safe_psql('postgres', + "SELECT c, a, b FROM tab2 ORDER BY 1, 2"); +is( $result, qq(pub_tab2|1|xxx +pub_tab2|3|yyy +pub_tab2|5|zzz +xxx_c|6|aaa), 'inserts into tab2 replicated'); From 1103033aedc10295eb689a4b7158f21ef4c14a11 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 1 Jun 2021 11:12:56 -0400 Subject: [PATCH 387/671] Reject SELECT ... GROUP BY GROUPING SETS (()) FOR UPDATE. This case should be disallowed, just as FOR UPDATE with a plain GROUP BY is disallowed; FOR UPDATE only makes sense when each row of the query result can be identified with a single table row. However, we missed teaching CheckSelectLocking() to check groupingSets as well as groupClause, so that it would allow degenerate grouping sets. That resulted in a bad plan and a null-pointer dereference in the executor. Looking around for other instances of the same bug, the only one I found was in examine_simple_variable(). That'd just lead to silly estimates, but it should be fixed too. Per private report from Yaoguang Chen. Back-patch to all supported branches. --- src/backend/parser/analyze.c | 2 +- src/backend/utils/adt/selfuncs.c | 3 ++- src/test/regress/expected/errors.out | 5 +++++ src/test/regress/sql/errors.sql | 4 ++++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 201b88d1adb1d..9cede29d6a816 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -3019,7 +3019,7 @@ CheckSelectLocking(Query *qry, LockClauseStrength strength) translator: %s is a SQL row locking clause such as FOR UPDATE */ errmsg("%s is not allowed with DISTINCT clause", LCS_asString(strength)))); - if (qry->groupClause != NIL) + if (qry->groupClause != NIL || qry->groupingSets != NIL) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), /*------ diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 37ddda7724012..0c8c05f6c2e8e 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -5497,7 +5497,8 @@ examine_simple_variable(PlannerInfo *root, Var *var, * of learning something even with it. */ if (subquery->setOperations || - subquery->groupClause) + subquery->groupClause || + subquery->groupingSets) return; /* diff --git a/src/test/regress/expected/errors.out b/src/test/regress/expected/errors.out index 1e7b5a7046197..15862d44753e0 100644 --- a/src/test/regress/expected/errors.out +++ b/src/test/regress/expected/errors.out @@ -50,6 +50,11 @@ select distinct on (foobar) * from pg_database; ERROR: column "foobar" does not exist LINE 1: select distinct on (foobar) * from pg_database; ^ +-- grouping with FOR UPDATE +select null from pg_database group by datname for update; +ERROR: FOR UPDATE is not allowed with GROUP BY clause +select null from pg_database group by grouping sets (()) for update; +ERROR: FOR UPDATE is not allowed with GROUP BY clause -- -- DELETE -- missing relation name (this had better not wildcard!) diff --git a/src/test/regress/sql/errors.sql b/src/test/regress/sql/errors.sql index 66a56b28f62b8..a7fcf72dd4509 100644 --- a/src/test/regress/sql/errors.sql +++ b/src/test/regress/sql/errors.sql @@ -37,6 +37,10 @@ select * from pg_database where pg_database.datname = nonesuch; -- bad attribute name in select distinct on select distinct on (foobar) * from pg_database; +-- grouping with FOR UPDATE +select null from pg_database group by datname for update; +select null from pg_database group by grouping sets (()) for update; + -- -- DELETE From 49527a32ca97761d78efef732a4ac76a2fc086b2 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Tue, 1 Jun 2021 18:04:14 -0700 Subject: [PATCH 388/671] Fix missing gettimeofday() declaration. This avoids a warning under MinGW versions having gettimeofday(), per buildfarm member walleye. --- src/interfaces/libpq/fe-trace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c index ed4247be673a4..76a6d1ebe2d5c 100644 --- a/src/interfaces/libpq/fe-trace.c +++ b/src/interfaces/libpq/fe-trace.c @@ -16,13 +16,13 @@ #include #include +#include #include #ifdef WIN32 #include "win32.h" #else #include -#include #endif #include "libpq-fe.h" From 42344ad0ed465ea988d8310d2f413d65329f55a8 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Tue, 1 Jun 2021 18:04:15 -0700 Subject: [PATCH 389/671] Add Windows file version information to libpq_pipeline.exe. --- src/test/modules/libpq_pipeline/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/test/modules/libpq_pipeline/Makefile b/src/test/modules/libpq_pipeline/Makefile index c9c5ae1beb54f..65acc3e997e75 100644 --- a/src/test/modules/libpq_pipeline/Makefile +++ b/src/test/modules/libpq_pipeline/Makefile @@ -1,7 +1,10 @@ # src/test/modules/libpq_pipeline/Makefile +PGFILEDESC = "libpq_pipeline - test program for pipeline execution" +PGAPPICON = win32 + PROGRAM = libpq_pipeline -OBJS = libpq_pipeline.o +OBJS = $(WIN32RES) libpq_pipeline.o NO_INSTALL = 1 From 6bbc5c5e96b08f6b8c7d28d10ed8dfe6c49dca30 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 2 Jun 2021 12:19:39 +0900 Subject: [PATCH 390/671] Add regression test for recovery pause. Previously there was no regression test for recovery pause feature. This commit adds the test that checks - recovery can be paused or resumed expectedly - pg_get_wal_replay_pause_state() reports the correct pause state - the paused state ends and promotion continues if a promotion is triggered while recovery is paused Suggested-by: Michael Paquier Author: Fujii Masao Reviewed-by: Kyotaro Horiguchi, Dilip Kumar Discussion: https://postgr.es/m/YKNirzqM1HYyk5h4@paquier.xyz --- src/test/recovery/t/005_replay_delay.pl | 59 ++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/src/test/recovery/t/005_replay_delay.pl b/src/test/recovery/t/005_replay_delay.pl index 7f177afaedcdc..496fa40fe13f1 100644 --- a/src/test/recovery/t/005_replay_delay.pl +++ b/src/test/recovery/t/005_replay_delay.pl @@ -1,13 +1,13 @@ # Copyright (c) 2021, PostgreSQL Global Development Group -# Checks for recovery_min_apply_delay +# Checks for recovery_min_apply_delay and recovery pause use strict; use warnings; use PostgresNode; use TestLib; -use Test::More tests => 1; +use Test::More tests => 3; # Initialize primary node my $node_primary = get_new_node('primary'); @@ -55,3 +55,58 @@ # the configured apply delay. ok(time() - $primary_insert_time >= $delay, "standby applies WAL only after replication delay"); + + +# Check that recovery can be paused or resumed expectedly. +my $node_standby2 = get_new_node('standby2'); +$node_standby2->init_from_backup($node_primary, $backup_name, + has_streaming => 1); +$node_standby2->start; + +# Recovery is not yet paused. +is($node_standby2->safe_psql('postgres', + "SELECT pg_get_wal_replay_pause_state()"), + 'not paused', 'pg_get_wal_replay_pause_state() reports not paused'); + +# Request to pause recovery and wait until it's actually paused. +$node_standby2->safe_psql('postgres', "SELECT pg_wal_replay_pause()"); +$node_primary->safe_psql('postgres', + "INSERT INTO tab_int VALUES (generate_series(21,30))"); +$node_standby2->poll_query_until('postgres', + "SELECT pg_get_wal_replay_pause_state() = 'paused'") + or die "Timed out while waiting for recovery to be paused"; + +# Even if new WAL records are streamed from the primary, +# recovery in the paused state doesn't replay them. +my $receive_lsn = $node_standby2->safe_psql('postgres', + "SELECT pg_last_wal_receive_lsn()"); +my $replay_lsn = $node_standby2->safe_psql('postgres', + "SELECT pg_last_wal_replay_lsn()"); +$node_primary->safe_psql('postgres', + "INSERT INTO tab_int VALUES (generate_series(31,40))"); +$node_standby2->poll_query_until('postgres', + "SELECT '$receive_lsn'::pg_lsn < pg_last_wal_receive_lsn()") + or die "Timed out while waiting for new WAL to be streamed"; +is($node_standby2->safe_psql('postgres', + "SELECT pg_last_wal_replay_lsn()"), + qq($replay_lsn), 'no WAL is replayed in the paused state'); + +# Request to resume recovery and wait until it's actually resumed. +$node_standby2->safe_psql('postgres', "SELECT pg_wal_replay_resume()"); +$node_standby2->poll_query_until('postgres', + "SELECT pg_get_wal_replay_pause_state() = 'not paused' AND pg_last_wal_replay_lsn() > '$replay_lsn'::pg_lsn") + or die "Timed out while waiting for recovery to be resumed"; + +# Check that the paused state ends and promotion continues if a promotion +# is triggered while recovery is paused. +$node_standby2->safe_psql('postgres', "SELECT pg_wal_replay_pause()"); +$node_primary->safe_psql('postgres', + "INSERT INTO tab_int VALUES (generate_series(41,50))"); +$node_standby2->poll_query_until('postgres', + "SELECT pg_get_wal_replay_pause_state() = 'paused'") + or die "Timed out while waiting for recovery to be paused"; + +$node_standby2->promote; +$node_standby2->poll_query_until('postgres', + "SELECT NOT pg_is_in_recovery()") + or die "Timed out while waiting for promotion to finish"; From df466d30c6caa02e2215595fd83ca70be3199cec Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 2 Jun 2021 12:20:15 +0900 Subject: [PATCH 391/671] Remove unnecessary use of Time::HiRes from 013_crash_restart.pl. The regression test 013_crash_restart.pl included "use Time::HiRes qw(usleep)", but the usleep was not used there. Author: Fujii Masao Reviewed-by: Kyotaro Horiguchi Discussion: https://postgr.es/m/63ad1368-18e2-8900-8443-524bdfb1bef5@oss.nttdata.com --- src/test/recovery/t/013_crash_restart.pl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/recovery/t/013_crash_restart.pl b/src/test/recovery/t/013_crash_restart.pl index 66e43ffbe8d1e..e1c36abe97ae0 100644 --- a/src/test/recovery/t/013_crash_restart.pl +++ b/src/test/recovery/t/013_crash_restart.pl @@ -17,7 +17,6 @@ use TestLib; use Test::More; use Config; -use Time::HiRes qw(usleep); plan tests => 18; From 9e3b3ff2664dd0b349d2a6d6f047128cb3489cf2 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 2 Jun 2021 10:44:16 -0400 Subject: [PATCH 392/671] Teach tab-complete.c about recently-added CREATE TYPE options. Commit c7aba7c14 missed adding SUBSCRIPT here, and commit 6df7a9698 missed adding MULTIRANGE_TYPE_NAME. Haiying Tang and Tom Lane Discussion: https://postgr.es/m/OS0PR01MB6113F9EDA46FA53BAA5445BDFB3D9@OS0PR01MB6113.jpnprd01.prod.outlook.com --- src/bin/psql/tab-complete.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 6598c5369a8f5..109b22acb6ba5 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -2959,7 +2959,7 @@ psql_completion(const char *text, int start, int end) { if (TailMatches("(|*,")) COMPLETE_WITH("INPUT", "OUTPUT", "RECEIVE", "SEND", - "TYPMOD_IN", "TYPMOD_OUT", "ANALYZE", + "TYPMOD_IN", "TYPMOD_OUT", "ANALYZE", "SUBSCRIPT", "INTERNALLENGTH", "PASSEDBYVALUE", "ALIGNMENT", "STORAGE", "LIKE", "CATEGORY", "PREFERRED", "DEFAULT", "ELEMENT", "DELIMITER", @@ -2973,7 +2973,8 @@ psql_completion(const char *text, int start, int end) { if (TailMatches("(|*,")) COMPLETE_WITH("SUBTYPE", "SUBTYPE_OPCLASS", "COLLATION", - "CANONICAL", "SUBTYPE_DIFF"); + "CANONICAL", "SUBTYPE_DIFF", + "MULTIRANGE_TYPE_NAME"); else if (TailMatches("(*|*,", MatchAnyExcept("*="))) COMPLETE_WITH("="); else if (TailMatches("=", MatchAnyExcept("*)"))) From 79c50ca57828e9f8375766b36cce1e2960eebf87 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 2 Jun 2021 11:52:35 -0400 Subject: [PATCH 393/671] Update plannodes.h's comments about PlanRowMark. The reference here to different physical column numbers in inherited UPDATE/DELETE plans is obsolete as of 86dc90056; remove it. Also rework the text about inheritance cases to make it clearer. --- src/include/nodes/plannodes.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h index 57f320a1759ed..aaa3b65d0492f 100644 --- a/src/include/nodes/plannodes.h +++ b/src/include/nodes/plannodes.h @@ -1086,9 +1086,9 @@ typedef enum RowMarkType * When the planner discovers that a relation is the root of an inheritance * tree, it sets isParent true, and adds an additional PlanRowMark to the * list for each child relation (including the target rel itself in its role - * as a child). isParent is also set to true for the partitioned child - * relations, which are not scanned just like the root parent. The child - * entries have rti == child rel's RT index and prti == parent's RT index, + * as a child, if it is not a partitioned table). Any non-leaf partitioned + * child relations will also have entries with isParent = true. The child + * entries have rti == child rel's RT index and prti == top parent's RT index, * and can therefore be recognized as children by the fact that prti != rti. * The parent's allMarkTypes field gets the OR of (1< Date: Wed, 2 Jun 2021 14:38:14 -0400 Subject: [PATCH 394/671] Fix planner's row-mark code for inheritance from a foreign table. Commit 428b260f8 broke planning of cases where row marks are needed (SELECT FOR UPDATE, etc) and one of the query's tables is a foreign table that has regular table(s) as inheritance children. We got the reverse case right, but apparently were thinking that foreign tables couldn't be inheritance parents. Not so; so we need to be able to add a CTID junk column while adding a new child, not only a wholerow junk column. Back-patch to v12 where the faulty code came in. Amit Langote Discussion: https://postgr.es/m/CA+HiwqEmo3FV1LAQ4TVyS2h1WM=kMkZUmbNuZSCnfHvMcUcPeA@mail.gmail.com --- .../postgres_fdw/expected/postgres_fdw.out | 86 +++++++++++++++++++ contrib/postgres_fdw/sql/postgres_fdw.sql | 21 +++++ src/backend/optimizer/util/inherit.c | 21 ++++- 3 files changed, 126 insertions(+), 2 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 7df30010f25e9..f320a7578ddf0 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -7255,6 +7255,92 @@ select * from bar where f1 in (select f1 from foo) for share; 4 | 44 (4 rows) +-- Now check SELECT FOR UPDATE/SHARE with an inherited source table, +-- where the parent is itself a foreign table +create table loct4 (f1 int, f2 int, f3 int); +create foreign table foo2child (f3 int) inherits (foo2) + server loopback options (table_name 'loct4'); +NOTICE: moving and merging column "f3" with inherited definition +DETAIL: User-specified column moved to the position of the inherited column. +explain (verbose, costs off) +select * from bar where f1 in (select f1 from foo2) for share; + QUERY PLAN +-------------------------------------------------------------------------------------- + LockRows + Output: bar.f1, bar.f2, bar.ctid, foo2.*, bar.*, bar.tableoid, foo2.tableoid + -> Hash Join + Output: bar.f1, bar.f2, bar.ctid, foo2.*, bar.*, bar.tableoid, foo2.tableoid + Inner Unique: true + Hash Cond: (bar.f1 = foo2.f1) + -> Append + -> Seq Scan on public.bar bar_1 + Output: bar_1.f1, bar_1.f2, bar_1.ctid, bar_1.*, bar_1.tableoid + -> Foreign Scan on public.bar2 bar_2 + Output: bar_2.f1, bar_2.f2, bar_2.ctid, bar_2.*, bar_2.tableoid + Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct2 FOR SHARE + -> Hash + Output: foo2.*, foo2.f1, foo2.tableoid + -> HashAggregate + Output: foo2.*, foo2.f1, foo2.tableoid + Group Key: foo2.f1 + -> Append + -> Foreign Scan on public.foo2 foo2_1 + Output: foo2_1.*, foo2_1.f1, foo2_1.tableoid + Remote SQL: SELECT f1, f2, f3 FROM public.loct1 + -> Foreign Scan on public.foo2child foo2_2 + Output: foo2_2.*, foo2_2.f1, foo2_2.tableoid + Remote SQL: SELECT f1, f2, f3 FROM public.loct4 +(24 rows) + +select * from bar where f1 in (select f1 from foo2) for share; + f1 | f2 +----+---- + 2 | 22 + 4 | 44 +(2 rows) + +drop foreign table foo2child; +-- And with a local child relation of the foreign table parent +create table foo2child (f3 int) inherits (foo2); +NOTICE: moving and merging column "f3" with inherited definition +DETAIL: User-specified column moved to the position of the inherited column. +explain (verbose, costs off) +select * from bar where f1 in (select f1 from foo2) for share; + QUERY PLAN +------------------------------------------------------------------------------------------------- + LockRows + Output: bar.f1, bar.f2, bar.ctid, foo2.*, bar.*, bar.tableoid, foo2.ctid, foo2.tableoid + -> Hash Join + Output: bar.f1, bar.f2, bar.ctid, foo2.*, bar.*, bar.tableoid, foo2.ctid, foo2.tableoid + Inner Unique: true + Hash Cond: (bar.f1 = foo2.f1) + -> Append + -> Seq Scan on public.bar bar_1 + Output: bar_1.f1, bar_1.f2, bar_1.ctid, bar_1.*, bar_1.tableoid + -> Foreign Scan on public.bar2 bar_2 + Output: bar_2.f1, bar_2.f2, bar_2.ctid, bar_2.*, bar_2.tableoid + Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct2 FOR SHARE + -> Hash + Output: foo2.*, foo2.f1, foo2.ctid, foo2.tableoid + -> HashAggregate + Output: foo2.*, foo2.f1, foo2.ctid, foo2.tableoid + Group Key: foo2.f1 + -> Append + -> Foreign Scan on public.foo2 foo2_1 + Output: foo2_1.*, foo2_1.f1, foo2_1.ctid, foo2_1.tableoid + Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct1 + -> Seq Scan on public.foo2child foo2_2 + Output: foo2_2.*, foo2_2.f1, foo2_2.ctid, foo2_2.tableoid +(23 rows) + +select * from bar where f1 in (select f1 from foo2) for share; + f1 | f2 +----+---- + 2 | 22 + 4 | 44 +(2 rows) + +drop table foo2child; -- Check UPDATE with inherited target and an inherited source table explain (verbose, costs off) update bar set f2 = f2 + 100 where f1 in (select f1 from foo); diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 78379bdea5bc3..17dba77d7ec3e 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -1891,6 +1891,27 @@ explain (verbose, costs off) select * from bar where f1 in (select f1 from foo) for share; select * from bar where f1 in (select f1 from foo) for share; +-- Now check SELECT FOR UPDATE/SHARE with an inherited source table, +-- where the parent is itself a foreign table +create table loct4 (f1 int, f2 int, f3 int); +create foreign table foo2child (f3 int) inherits (foo2) + server loopback options (table_name 'loct4'); + +explain (verbose, costs off) +select * from bar where f1 in (select f1 from foo2) for share; +select * from bar where f1 in (select f1 from foo2) for share; + +drop foreign table foo2child; + +-- And with a local child relation of the foreign table parent +create table foo2child (f3 int) inherits (foo2); + +explain (verbose, costs off) +select * from bar where f1 in (select f1 from foo2) for share; +select * from bar where f1 in (select f1 from foo2) for share; + +drop table foo2child; + -- Check UPDATE with inherited target and an inherited source table explain (verbose, costs off) update bar set f2 = f2 + 100 where f1 in (select f1 from foo); diff --git a/src/backend/optimizer/util/inherit.c b/src/backend/optimizer/util/inherit.c index 13f67ab7449ea..992ef87b9da87 100644 --- a/src/backend/optimizer/util/inherit.c +++ b/src/backend/optimizer/util/inherit.c @@ -232,8 +232,25 @@ expand_inherited_rtentry(PlannerInfo *root, RelOptInfo *rel, char resname[32]; List *newvars = NIL; - /* The old PlanRowMark should already have necessitated adding TID */ - Assert(old_allMarkTypes & ~(1 << ROW_MARK_COPY)); + /* Add TID junk Var if needed, unless we had it already */ + if (new_allMarkTypes & ~(1 << ROW_MARK_COPY) && + !(old_allMarkTypes & ~(1 << ROW_MARK_COPY))) + { + /* Need to fetch TID */ + var = makeVar(oldrc->rti, + SelfItemPointerAttributeNumber, + TIDOID, + -1, + InvalidOid, + 0); + snprintf(resname, sizeof(resname), "ctid%u", oldrc->rowmarkId); + tle = makeTargetEntry((Expr *) var, + list_length(root->processed_tlist) + 1, + pstrdup(resname), + true); + root->processed_tlist = lappend(root->processed_tlist, tle); + newvars = lappend(newvars, var); + } /* Add whole-row junk Var if needed, unless we had it already */ if ((new_allMarkTypes & (1 << ROW_MARK_COPY)) && From 8e03eb92e9ad54e2f1ed8b5a73617601f6262f81 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Thu, 3 Jun 2021 00:06:42 +0200 Subject: [PATCH 395/671] Revert most of 39b66a91bd Reverts most of commit 39b66a91bd, which was found to cause significant regression for REFRESH MATERIALIZED VIEW. This means only rows inserted by heap_multi_insert will benefit from the optimization, implemented in commit 7db0cd2145. Reported-by: Masahiko Sawada Discussion: https://postgr.es/m/CAD21AoA%3D%3Df2VSw3c-Cp_y%3DWLKHMKc1D6s7g3YWsCOvgaYPpJcg%40mail.gmail.com --- src/backend/access/heap/heapam.c | 74 +------------------------------- src/backend/access/heap/hio.c | 22 +++++----- 2 files changed, 12 insertions(+), 84 deletions(-) diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index bd60129aeb7af..2433998f39bdb 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -2063,12 +2063,8 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, TransactionId xid = GetCurrentTransactionId(); HeapTuple heaptup; Buffer buffer; - Page page = NULL; Buffer vmbuffer = InvalidBuffer; - bool starting_with_empty_page; bool all_visible_cleared = false; - bool all_frozen_set = false; - uint8 vmstatus = 0; /* Cheap, simplistic check that the tuple matches the rel's rowtype. */ Assert(HeapTupleHeaderGetNatts(tup->t_data) <= @@ -2085,36 +2081,11 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, /* * Find buffer to insert this tuple into. If the page is all visible, * this will also pin the requisite visibility map page. - * - * Also pin visibility map page if COPY FREEZE inserts tuples into an - * empty page. See all_frozen_set below. */ buffer = RelationGetBufferForTuple(relation, heaptup->t_len, InvalidBuffer, options, bistate, &vmbuffer, NULL); - - /* - * If we're inserting frozen entry into an empty page, set visibility map - * bits and PageAllVisible() hint. - * - * If we're inserting frozen entry into already all_frozen page, preserve - * this state. - */ - if (options & HEAP_INSERT_FROZEN) - { - page = BufferGetPage(buffer); - - starting_with_empty_page = PageGetMaxOffsetNumber(page) == 0; - - if (visibilitymap_pin_ok(BufferGetBlockNumber(buffer), vmbuffer)) - vmstatus = visibilitymap_get_status(relation, - BufferGetBlockNumber(buffer), &vmbuffer); - - if ((starting_with_empty_page || vmstatus & VISIBILITYMAP_ALL_FROZEN)) - all_frozen_set = true; - } - /* * We're about to do the actual insert -- but check for conflict first, to * avoid possibly having to roll back work we've just done. @@ -2138,14 +2109,7 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, RelationPutHeapTuple(relation, buffer, heaptup, (options & HEAP_INSERT_SPECULATIVE) != 0); - /* - * If the page is all visible, need to clear that, unless we're only going - * to add further frozen rows to it. - * - * If we're only adding already frozen rows to a page that was empty or - * marked as all visible, mark it as all-visible. - */ - if (PageIsAllVisible(BufferGetPage(buffer)) && !(options & HEAP_INSERT_FROZEN)) + if (PageIsAllVisible(BufferGetPage(buffer))) { all_visible_cleared = true; PageClearAllVisible(BufferGetPage(buffer)); @@ -2153,13 +2117,6 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, ItemPointerGetBlockNumber(&(heaptup->t_self)), vmbuffer, VISIBILITYMAP_VALID_BITS); } - else if (all_frozen_set) - { - /* We only ever set all_frozen_set after reading the page. */ - Assert(page); - - PageSetAllVisible(page); - } /* * XXX Should we set PageSetPrunable on this page ? @@ -2207,8 +2164,6 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, xlrec.flags = 0; if (all_visible_cleared) xlrec.flags |= XLH_INSERT_ALL_VISIBLE_CLEARED; - if (all_frozen_set) - xlrec.flags = XLH_INSERT_ALL_FROZEN_SET; if (options & HEAP_INSERT_SPECULATIVE) xlrec.flags |= XLH_INSERT_IS_SPECULATIVE; Assert(ItemPointerGetBlockNumber(&heaptup->t_self) == BufferGetBlockNumber(buffer)); @@ -2257,29 +2212,6 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, END_CRIT_SECTION(); - /* - * If we've frozen everything on the page, update the visibilitymap. We're - * already holding pin on the vmbuffer. - * - * No need to update the visibilitymap if it had all_frozen bit set before - * this insertion. - */ - if (all_frozen_set && ((vmstatus & VISIBILITYMAP_ALL_FROZEN) == 0)) - { - Assert(PageIsAllVisible(page)); - Assert(visibilitymap_pin_ok(BufferGetBlockNumber(buffer), vmbuffer)); - - /* - * It's fine to use InvalidTransactionId here - this is only used when - * HEAP_INSERT_FROZEN is specified, which intentionally violates - * visibility rules. - */ - visibilitymap_set(relation, BufferGetBlockNumber(buffer), buffer, - InvalidXLogRecPtr, vmbuffer, - InvalidTransactionId, - VISIBILITYMAP_ALL_VISIBLE | VISIBILITYMAP_ALL_FROZEN); - } - UnlockReleaseBuffer(buffer); if (vmbuffer != InvalidBuffer) ReleaseBuffer(vmbuffer); @@ -8946,10 +8878,6 @@ heap_xlog_insert(XLogReaderState *record) ItemPointerSetBlockNumber(&target_tid, blkno); ItemPointerSetOffsetNumber(&target_tid, xlrec->offnum); - /* check that the mutually exclusive flags are not both set */ - Assert(!((xlrec->flags & XLH_INSERT_ALL_VISIBLE_CLEARED) && - (xlrec->flags & XLH_INSERT_ALL_FROZEN_SET))); - /* * The visibility map may need to be fixed even if the heap page is * already up-to-date. diff --git a/src/backend/access/heap/hio.c b/src/backend/access/heap/hio.c index d34edb4190c8b..c47c7522ca64e 100644 --- a/src/backend/access/heap/hio.c +++ b/src/backend/access/heap/hio.c @@ -407,19 +407,19 @@ RelationGetBufferForTuple(Relation relation, Size len, * target. */ targetBlock = GetPageWithFreeSpace(relation, targetFreeSpace); - } - /* - * If the FSM knows nothing of the rel, try the last page before we give - * up and extend. This avoids one-tuple-per-page syndrome during - * bootstrapping or in a recently-started system. - */ - if (targetBlock == InvalidBlockNumber) - { - BlockNumber nblocks = RelationGetNumberOfBlocks(relation); + /* + * If the FSM knows nothing of the rel, try the last page before we + * give up and extend. This avoids one-tuple-per-page syndrome during + * bootstrapping or in a recently-started system. + */ + if (targetBlock == InvalidBlockNumber) + { + BlockNumber nblocks = RelationGetNumberOfBlocks(relation); - if (nblocks > 0) - targetBlock = nblocks - 1; + if (nblocks > 0) + targetBlock = nblocks - 1; + } } loop: From 2955c2be79b35fa369c83fa3b5f44661cb88afa9 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 2 Jun 2021 18:50:15 -0400 Subject: [PATCH 396/671] Re-allow custom GUC names that have more than two components. Commit 3db826bd5 disallowed this case, but it turns out that some people are depending on it. Since the core grammar has allowed it since 3dc37cd8d, it seems like this code should fall in line. Per bug #17045 from Robert Sosinski. Discussion: https://postgr.es/m/17045-6a4a9f0d1513f72b@postgresql.org --- src/backend/utils/misc/guc.c | 15 ++++++++------- src/test/regress/expected/guc.out | 20 ++++++++++++++++++-- src/test/regress/sql/guc.sql | 5 +++++ 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 87bc68870469c..68b62d523dc95 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -5368,13 +5368,14 @@ add_guc_variable(struct config_generic *var, int elevel) /* * Decide whether a proposed custom variable name is allowed. * - * It must be "identifier.identifier", where the rules for what is an - * identifier agree with scan.l. + * It must be two or more identifiers separated by dots, where the rules + * for what is an identifier agree with scan.l. (If you change this rule, + * adjust the errdetail in find_option().) */ static bool valid_custom_variable_name(const char *name) { - int num_sep = 0; + bool saw_sep = false; bool name_start = true; for (const char *p = name; *p; p++) @@ -5383,7 +5384,7 @@ valid_custom_variable_name(const char *name) { if (name_start) return false; /* empty name component */ - num_sep++; + saw_sep = true; name_start = true; } else if (strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ" @@ -5400,8 +5401,8 @@ valid_custom_variable_name(const char *name) } if (name_start) return false; /* empty name component */ - /* OK if we had exactly one separator */ - return (num_sep == 1); + /* OK if we found at least one separator */ + return saw_sep; } /* @@ -5516,7 +5517,7 @@ find_option(const char *name, bool create_placeholders, bool skip_errors, (errcode(ERRCODE_INVALID_NAME), errmsg("invalid configuration parameter name \"%s\"", name), - errdetail("Custom parameter names must be of the form \"identifier.identifier\"."))); + errdetail("Custom parameter names must be two or more simple identifiers separated by dots."))); return NULL; } } diff --git a/src/test/regress/expected/guc.out b/src/test/regress/expected/guc.out index c55871a972e0b..59da91ff04de6 100644 --- a/src/test/regress/expected/guc.out +++ b/src/test/regress/expected/guc.out @@ -515,6 +515,8 @@ SET no_such_variable TO 42; ERROR: unrecognized configuration parameter "no_such_variable" -- Test "custom" GUCs created on the fly (which aren't really an -- intended feature, but many people use them). +SHOW custom.my_guc; -- error, not known yet +ERROR: unrecognized configuration parameter "custom.my_guc" SET custom.my_guc = 42; SHOW custom.my_guc; custom.my_guc @@ -522,14 +524,28 @@ SHOW custom.my_guc; 42 (1 row) +RESET custom.my_guc; -- this makes it go to empty, not become unknown again +SHOW custom.my_guc; + custom.my_guc +--------------- + +(1 row) + +SET custom.my.qualified.guc = 'foo'; +SHOW custom.my.qualified.guc; + custom.my.qualified.guc +------------------------- + foo +(1 row) + SET custom."bad-guc" = 42; -- disallowed because -c cannot set this name ERROR: invalid configuration parameter name "custom.bad-guc" -DETAIL: Custom parameter names must be of the form "identifier.identifier". +DETAIL: Custom parameter names must be two or more simple identifiers separated by dots. SHOW custom."bad-guc"; ERROR: unrecognized configuration parameter "custom.bad-guc" SET special."weird name" = 'foo'; -- could be allowed, but we choose not to ERROR: invalid configuration parameter name "special.weird name" -DETAIL: Custom parameter names must be of the form "identifier.identifier". +DETAIL: Custom parameter names must be two or more simple identifiers separated by dots. SHOW special."weird name"; ERROR: unrecognized configuration parameter "special.weird name" -- diff --git a/src/test/regress/sql/guc.sql b/src/test/regress/sql/guc.sql index 3650188d9d767..c39c11388d51f 100644 --- a/src/test/regress/sql/guc.sql +++ b/src/test/regress/sql/guc.sql @@ -151,8 +151,13 @@ SET no_such_variable TO 42; -- Test "custom" GUCs created on the fly (which aren't really an -- intended feature, but many people use them). +SHOW custom.my_guc; -- error, not known yet SET custom.my_guc = 42; SHOW custom.my_guc; +RESET custom.my_guc; -- this makes it go to empty, not become unknown again +SHOW custom.my_guc; +SET custom.my.qualified.guc = 'foo'; +SHOW custom.my.qualified.guc; SET custom."bad-guc" = 42; -- disallowed because -c cannot set this name SHOW custom."bad-guc"; SET special."weird name" = 'foo'; -- could be allowed, but we choose not to From 8279f68a1b13d58a0c9869a60081009d8995e4df Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 3 Jun 2021 11:50:56 +0900 Subject: [PATCH 397/671] Ignore more environment variables in TAP tests Various environment variables were not getting reset in the TAP tests, which would cause failures depending on the tests or the environment variables involved. For example, PGSSL{MAX,MIN}PROTOCOLVERSION could cause failures in the SSL tests. Even worse, a junk value of PGCLIENTENCODING makes a server startup fail. The list of variables reset is adjusted in each stable branch depending on what is supported. While on it, simplify a bit the code per a suggestion from Andrew Dunstan, using a list of variables instead of doing single deletions. Reviewed-by: Andrew Dunstan, Daniel Gustafsson Discussion: https://postgr.es/m/YLbjjRpucIeZ78VQ@paquier.xyz Backpatch-through: 9.6 --- src/test/perl/TestLib.pm | 43 ++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index d6c3eb87232f9..47d7f31e94ce4 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -104,17 +104,38 @@ BEGIN delete $ENV{LC_ALL}; $ENV{LC_MESSAGES} = 'C'; - delete $ENV{PGCONNECT_TIMEOUT}; - delete $ENV{PGDATA}; - delete $ENV{PGDATABASE}; - delete $ENV{PGHOSTADDR}; - delete $ENV{PGREQUIRESSL}; - delete $ENV{PGSERVICE}; - delete $ENV{PGSSLMODE}; - delete $ENV{PGUSER}; - delete $ENV{PGPORT}; - delete $ENV{PGHOST}; - delete $ENV{PG_COLOR}; + my @envkeys = qw ( + PGCHANNELBINDING + PGCLIENTENCODING + PGCONNECT_TIMEOUT + PGDATA + PGDATABASE + PGGSSENCMODE + PGGSSLIB + PGHOSTADDR + PGKRBSRVNAME + PGPASSFILE + PGPASSWORD + PGREQUIREPEER + PGREQUIRESSL + PGSERVICE + PGSERVICEFILE + PGSSLCERT + PGSSLCRL + PGSSLCRLDIR + PGSSLKEY + PGSSLMAXPROTOCOLVERSION + PGSSLMINPROTOCOLVERSION + PGSSLMODE + PGSSLROOTCERT + PGSSLSNI + PGTARGETSESSIONATTRS + PGUSER + PGPORT + PGHOST + PG_COLOR + ); + delete @ENV{@envkeys}; $ENV{PGAPPNAME} = basename($0); From f736e188ce70bda34f04c9f381b7c5141dc20dce Mon Sep 17 00:00:00 2001 From: David Rowley Date: Thu, 3 Jun 2021 16:38:03 +1200 Subject: [PATCH 398/671] Standardize usages of appendStringInfo and appendPQExpBuffer Fix a few places that were using appendStringInfo() when they should have been using appendStringInfoString(). Also some cases of appendPQExpBuffer() that would have been better suited to use appendPQExpBufferChar(), and finally, some places that used appendPQExpBuffer() when appendPQExpBufferStr() would have suited better. There are no bugs are being fixed here. The aim is just to make the code use the most optimal function for the job. All the code being changed here is new to PG14. It makes sense to fix these before we branch for PG15. There are a few other places that we could fix, but those cases are older code so fixing those seems less worthwhile as it may cause unnecessary back-patching pain in the future. Author: Hou Zhijie Discussion: https://postgr.es/m/OS0PR01MB5716732158B1C4142C6FE375943D9@OS0PR01MB5716.jpnprd01.prod.outlook.com --- src/backend/access/brin/brin_minmax_multi.c | 2 +- src/backend/access/heap/vacuumlazy.c | 8 ++++---- src/bin/pg_amcheck/pg_amcheck.c | 2 +- src/bin/psql/describe.c | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c index bd14184d76726..c62a3c8ba8c67 100644 --- a/src/backend/access/brin/brin_minmax_multi.c +++ b/src/backend/access/brin/brin_minmax_multi.c @@ -3084,7 +3084,7 @@ brin_minmax_multi_summary_out(PG_FUNCTION_ARGS) a = FunctionCall1(&fmgrinfo, ranges_deserialized->values[idx++]); - appendStringInfo(&str, "%s", DatumGetPointer(a)); + appendStringInfoString(&str, DatumGetPointer(a)); b = cstring_to_text(str.data); diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index ad3feb88b3be9..4b600e951a56a 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -783,18 +783,18 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, msgfmt = _(" %u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n"); if (vacrel->nindexes == 0 || vacrel->num_index_scans == 0) - appendStringInfo(&buf, _("index scan not needed:")); + appendStringInfoString(&buf, _("index scan not needed:")); else - appendStringInfo(&buf, _("index scan needed:")); + appendStringInfoString(&buf, _("index scan needed:")); } else { msgfmt = _(" %u pages from table (%.2f%% of total) have %lld dead item identifiers\n"); if (!vacrel->do_failsafe) - appendStringInfo(&buf, _("index scan bypassed:")); + appendStringInfoString(&buf, _("index scan bypassed:")); else - appendStringInfo(&buf, _("index scan bypassed by failsafe:")); + appendStringInfoString(&buf, _("index scan bypassed by failsafe:")); } orig_rel_pages = vacrel->rel_pages + vacrel->pages_removed; appendStringInfo(&buf, msgfmt, diff --git a/src/bin/pg_amcheck/pg_amcheck.c b/src/bin/pg_amcheck/pg_amcheck.c index 37103e18cbe85..6b97d635c3217 100644 --- a/src/bin/pg_amcheck/pg_amcheck.c +++ b/src/bin/pg_amcheck/pg_amcheck.c @@ -844,7 +844,7 @@ prepare_heap_command(PQExpBuffer sql, RelationInfo *rel, PGconn *conn) if (opts.endblock >= 0) appendPQExpBuffer(sql, ", endblock := " INT64_FORMAT, opts.endblock); - appendPQExpBuffer(sql, ")"); + appendPQExpBufferChar(sql, ')'); } /* diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 195f8d8cd2d32..2abf255798c0d 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -2934,7 +2934,7 @@ describeOneTableDetails(const char *schemaname, if (has_some && !has_all) { - appendPQExpBuffer(&buf, " ("); + appendPQExpBufferStr(&buf, " ("); /* options */ if (has_ndistinct) @@ -2954,7 +2954,7 @@ describeOneTableDetails(const char *schemaname, appendPQExpBuffer(&buf, "%smcv", gotone ? ", " : ""); } - appendPQExpBuffer(&buf, ")"); + appendPQExpBufferChar(&buf, ')'); } appendPQExpBuffer(&buf, " ON %s FROM %s", @@ -3577,7 +3577,7 @@ describeOneTableDetails(const char *schemaname, child_relkind == RELKIND_PARTITIONED_INDEX) appendPQExpBufferStr(&buf, ", PARTITIONED"); if (strcmp(PQgetvalue(result, i, 2), "t") == 0) - appendPQExpBuffer(&buf, " (DETACH PENDING)"); + appendPQExpBufferStr(&buf, " (DETACH PENDING)"); if (i < tuples - 1) appendPQExpBufferChar(&buf, ','); From cb3cffe694b6041c1de47b12b225e05f664c7285 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 3 Jun 2021 06:55:04 +0200 Subject: [PATCH 399/671] doc: Group options in pg_amcheck reference page The previous arrangement was just one big list, and the internal order was not all consistent either. Now arrange the options by group and sort them, the way it's already done in the --help output and one other reference pages. Also fix some ordering in the --help output. --- doc/src/sgml/ref/pg_amcheck.sgml | 451 ++++++++++++++++--------------- src/bin/pg_amcheck/pg_amcheck.c | 4 +- 2 files changed, 239 insertions(+), 216 deletions(-) diff --git a/doc/src/sgml/ref/pg_amcheck.sgml b/doc/src/sgml/ref/pg_amcheck.sgml index d4989c9f23176..04667e9002d08 100644 --- a/doc/src/sgml/ref/pg_amcheck.sgml +++ b/doc/src/sgml/ref/pg_amcheck.sgml @@ -73,7 +73,7 @@ PostgreSQL documentation Options - pg_amcheck accepts the following command-line arguments: + The following command-line options control what is checked: @@ -113,168 +113,170 @@ PostgreSQL documentation - - + + - Echo to stdout all SQL sent to the server. + Check indexes matching the specified + pattern, + unless they are otherwise excluded. + This option can be specified more than once. - - - - - - - End checking at the specified block number. An error will occur if the - table relation being checked has fewer than this number of blocks. - This option does not apply to indexes, and is probably only useful when - checking a single table relation. If both a regular table and a toast - table are checked, this option will apply to both, but higher-numbered - toast blocks may still be accessed while validating toast pointers, - unless that is suppressed using - . + This is similar to the option, except that + it applies only to indexes, not tables. - + + - By default, whenever a toast pointer is encountered in a table, - a lookup is performed to ensure that it references apparently-valid - entries in the toast table. These checks can be quite slow, and this - option can be used to skip them. + Exclude indexes matching the specified + pattern. + This option can be specified more than once. - - - - - - - For each index checked, verify the presence of all heap tuples as index - tuples in the index using 's - option. + This is similar to the option, + except that it applies only to indexes, not tables. - - + + - Show help about pg_amcheck command line - arguments, and exit. + Check relations matching the specified + pattern, + unless they are otherwise excluded. + This option can be specified more than once. + + + Patterns may be unqualified, e.g. myrel*, or they + may be schema-qualified, e.g. myschema*.myrel* or + database-qualified and schema-qualified, e.g. + mydb*.myscheam*.myrel*. A database-qualified + pattern will add matching databases to the list of databases to be + checked. - - + + - Specifies the host name of the machine on which the server is running. - If the value begins with a slash, it is used as the directory for the - Unix domain socket. + Exclude relations matching the specified + pattern. + This option can be specified more than once. + + + As with , the + pattern may be unqualified, schema-qualified, + or database- and schema-qualified. - - + + - Check indexes matching the specified - pattern, - unless they are otherwise excluded. + Check tables and indexes in schemas matching the specified + pattern, unless they are otherwise excluded. This option can be specified more than once. - This is similar to the option, except that - it applies only to indexes, not tables. + To select only tables in schemas matching a particular pattern, + consider using something like + --table=SCHEMAPAT.* --no-dependent-indexes. + To select only indexes, consider using something like + --index=SCHEMAPAT.*. + + + A schema pattern may be database-qualified. For example, you may + write --schema=mydb*.myschema* to select + schemas matching myschema* in databases matching + mydb*. - - + + - Exclude indexes matching the specified + Exclude tables and indexes in schemas matching the specified pattern. This option can be specified more than once. - This is similar to the option, - except that it applies only to indexes, not tables. + As with , the pattern may be + database-qualified. - - + + - Install any missing extensions that are required to check the - database(s). If not yet installed, each extension's objects will be - installed into the given - schema, or if not specified - into schema pg_catalog. + Check tables matching the specified + pattern, + unless they are otherwise excluded. + This option can be specified more than once. - At present, the only required extension is . + This is similar to the option, except that + it applies only to tables, not indexes. - - + + - Use num concurrent connections to the server, - or one per object to be checked, whichever is less. + Exclude tables matching the specified + pattern. + This option can be specified more than once. - The default is to use a single connection. + This is similar to the option, + except that it applies only to tables, not indexes. - + - Specifies a database or - connection string to be - used to discover the list of databases to be checked. If neither - nor any option including a database pattern is - used, no such connection is required and this option does nothing. - Otherwise, any connection string parameters other than - the database name which are included in the value for this option - will also be used when connecting to the databases - being checked. If this option is omitted, the default is - postgres or, if that fails, - template1. + By default, if a table is checked, any btree indexes of that table + will also be checked, even if they are not explicitly selected by + an option such as --index or + --relation. This option suppresses that behavior. - + - By default, if a table is checked, any btree indexes of that table - will also be checked, even if they are not explicitly selected by - an option such as --index or - --relation. This option suppresses that behavior. + By default, if a table is checked, its toast table, if any, will also + be checked, even if it is not explicitly selected by an option + such as --table or --relation. + This option suppresses that behavior. @@ -292,15 +294,21 @@ PostgreSQL documentation + + + + The following command-line options control checking of tables: + + - + - By default, if a table is checked, its toast table, if any, will also - be checked, even if it is not explicitly selected by an option - such as --table or --relation. - This option suppresses that behavior. + By default, whenever a toast pointer is encountered in a table, + a lookup is performed to ensure that it references apparently-valid + entries in the toast table. These checks can be quite slow, and this + option can be used to skip them. @@ -321,91 +329,83 @@ PostgreSQL documentation - + - For each btree index checked, use 's - bt_index_parent_check function, which performs - additional checks of parent/child relationships during index checking. + If all-frozen is given, table corruption checks + will skip over pages in all tables that are marked as all frozen. - The default is to use amcheck's - bt_index_check function, but note that use of the - option implicitly selects - bt_index_parent_check. + If all-visible is given, table corruption checks + will skip over pages in all tables that are marked as all visible. - - - - - - - - Specifies the TCP port or local Unix domain socket file extension on - which the server is listening for connections. + By default, no pages are skipped. This can be specified as + none, but since this is the default, it need not be + mentioned. - - + - Show progress information. Progress information includes the number - of relations for which checking has been completed, and the total - size of those relations. It also includes the total number of relations - that will eventually be checked, and the estimated size of those - relations. + Start checking at the specified block number. An error will occur if + the table relation being checked has fewer than this number of blocks. + This option does not apply to indexes, and is probably only useful + when checking a single table relation. See --endblock + for further caveats. - - + - Print fewer messages, and less detail regarding any server errors. + End checking at the specified block number. An error will occur if the + table relation being checked has fewer than this number of blocks. + This option does not apply to indexes, and is probably only useful when + checking a single table relation. If both a regular table and a toast + table are checked, this option will apply to both, but higher-numbered + toast blocks may still be accessed while validating toast pointers, + unless that is suppressed using + . + + + + The following command-line options control checking of B-tree indexes: + + - - + - Check relations matching the specified - pattern, - unless they are otherwise excluded. - This option can be specified more than once. - - - Patterns may be unqualified, e.g. myrel*, or they - may be schema-qualified, e.g. myschema*.myrel* or - database-qualified and schema-qualified, e.g. - mydb*.myscheam*.myrel*. A database-qualified - pattern will add matching databases to the list of databases to be - checked. + For each index checked, verify the presence of all heap tuples as index + tuples in the index using 's + option. - - + - Exclude relations matching the specified - pattern. - This option can be specified more than once. + For each btree index checked, use 's + bt_index_parent_check function, which performs + additional checks of parent/child relationships during index checking. - As with , the - pattern may be unqualified, schema-qualified, - or database- and schema-qualified. + The default is to use amcheck's + bt_index_check function, but note that use of the + option implicitly selects + bt_index_parent_check. @@ -431,119 +431,148 @@ PostgreSQL documentation + + + + The following command-line options control the connection to the server: + + - - + + - Check tables and indexes in schemas matching the specified - pattern, unless they are otherwise excluded. - This option can be specified more than once. - - - To select only tables in schemas matching a particular pattern, - consider using something like - --table=SCHEMAPAT.* --no-dependent-indexes. - To select only indexes, consider using something like - --index=SCHEMAPAT.*. + Specifies the host name of the machine on which the server is running. + If the value begins with a slash, it is used as the directory for the + Unix domain socket. + + + + + + + - A schema pattern may be database-qualified. For example, you may - write --schema=mydb*.myschema* to select - schemas matching myschema* in databases matching - mydb*. + Specifies the TCP port or local Unix domain socket file extension on + which the server is listening for connections. - - + + - Exclude tables and indexes in schemas matching the specified - pattern. - This option can be specified more than once. + User name to connect as. + + + + + + + - As with , the pattern may be - database-qualified. + Never issue a password prompt. If the server requires password + authentication and a password is not available by other means such as + a .pgpass file, the connection attempt will fail. + This option can be useful in batch jobs and scripts where no user is + present to enter a password. - + + - If all-frozen is given, table corruption checks - will skip over pages in all tables that are marked as all frozen. + Force pg_amcheck to prompt for a password + before connecting to a database. - If all-visible is given, table corruption checks - will skip over pages in all tables that are marked as all visible. + This option is never essential, since + pg_amcheck will automatically prompt for a + password if the server demands password authentication. However, + pg_amcheck will waste a connection attempt + finding out that the server wants a password. In some cases it is + worth typing to avoid the extra connection attempt. + + + + + + - By default, no pages are skipped. This can be specified as - none, but since this is the default, it need not be - mentioned. + Specifies a database or + connection string to be + used to discover the list of databases to be checked. If neither + nor any option including a database pattern is + used, no such connection is required and this option does nothing. + Otherwise, any connection string parameters other than + the database name which are included in the value for this option + will also be used when connecting to the databases + being checked. If this option is omitted, the default is + postgres or, if that fails, + template1. + + + + + Other options are also available: + - + + - Start checking at the specified block number. An error will occur if - the table relation being checked has fewer than this number of blocks. - This option does not apply to indexes, and is probably only useful - when checking a single table relation. See --endblock - for further caveats. + Echo to stdout all SQL sent to the server. - - + + - Check tables matching the specified - pattern, - unless they are otherwise excluded. - This option can be specified more than once. + Use num concurrent connections to the server, + or one per object to be checked, whichever is less. - This is similar to the option, except that - it applies only to tables, not indexes. + The default is to use a single connection. - - + + - Exclude tables matching the specified - pattern. - This option can be specified more than once. - - - This is similar to the option, - except that it applies only to tables, not indexes. + Print fewer messages, and less detail regarding any server errors. - - + + - User name to connect as. + Show progress information. Progress information includes the number + of relations for which checking has been completed, and the total + size of those relations. It also includes the total number of relations + that will eventually be checked, and the estimated size of those + relations. @@ -571,38 +600,32 @@ PostgreSQL documentation - - + + - Never issue a password prompt. If the server requires password - authentication and a password is not available by other means such as - a .pgpass file, the connection attempt will fail. - This option can be useful in batch jobs and scripts where no user is - present to enter a password. + Install any missing extensions that are required to check the + database(s). If not yet installed, each extension's objects will be + installed into the given + schema, or if not specified + into schema pg_catalog. + + + At present, the only required extension is . - - + + - Force pg_amcheck to prompt for a password - before connecting to a database. - - - This option is never essential, since - pg_amcheck will automatically prompt for a - password if the server demands password authentication. However, - pg_amcheck will waste a connection attempt - finding out that the server wants a password. In some cases it is - worth typing to avoid the extra connection attempt. + Show help about pg_amcheck command line + arguments, and exit. -
diff --git a/src/bin/pg_amcheck/pg_amcheck.c b/src/bin/pg_amcheck/pg_amcheck.c index 6b97d635c3217..4bde16fb4bd46 100644 --- a/src/bin/pg_amcheck/pg_amcheck.c +++ b/src/bin/pg_amcheck/pg_amcheck.c @@ -1187,11 +1187,11 @@ help(const char *progname) printf(_(" -e, --echo show the commands being sent to the server\n")); printf(_(" -j, --jobs=NUM use this many concurrent connections to the server\n")); printf(_(" -q, --quiet don't write any messages\n")); + printf(_(" -P, --progress show progress information\n")); printf(_(" -v, --verbose write a lot of output\n")); printf(_(" -V, --version output version information, then exit\n")); - printf(_(" -P, --progress show progress information\n")); - printf(_(" -?, --help show this help, then exit\n")); printf(_(" --install-missing install missing extensions\n")); + printf(_(" -?, --help show this help, then exit\n")); printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT); printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL); From 187682c3217375c9b70417bf3235790f639e8e7e Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 3 Jun 2021 15:28:24 +0900 Subject: [PATCH 400/671] Reduce risks of conflicts in internal queries of REFRESH MATVIEW CONCURRENTLY The internal SQL queries used by REFRESH MATERIALIZED VIEW CONCURRENTLY include some aliases for its diff and temporary relations with rather-generic names: diff, newdata, newdata2 and mv. Depending on the queries used for the materialized view, using CONCURRENTLY could lead to some internal failures if the matview query and those internal aliases conflict. Those names have been chosen in 841c29c8. This commit switches instead to a naming pattern which is less likely going to cause conflicts, based on an idea from Thomas Munro, by appending _$ to those aliases. This is not perfect as those new names could still conflict, but at least it has the advantage to keep the code readable and simple while reducing the likelihood of conflicts to be close to zero. Reported-by: Mathis Rudolf Author: Bharath Rupireddy Reviewed-by: Bernd Helmle, Thomas Munro, Michael Paquier Discussion: https://postgr.es/m/109c267a-10d2-3c53-b60e-720fcf44d9e8@credativ.de Backpatch-through: 9.6 --- src/backend/commands/matview.c | 36 +++++++++++++++++----------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c index 172ec6e982841..25bbd8a5c14de 100644 --- a/src/backend/commands/matview.c +++ b/src/backend/commands/matview.c @@ -629,12 +629,12 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner, */ resetStringInfo(&querybuf); appendStringInfo(&querybuf, - "SELECT newdata FROM %s newdata " - "WHERE newdata IS NOT NULL AND EXISTS " - "(SELECT 1 FROM %s newdata2 WHERE newdata2 IS NOT NULL " - "AND newdata2 OPERATOR(pg_catalog.*=) newdata " - "AND newdata2.ctid OPERATOR(pg_catalog.<>) " - "newdata.ctid)", + "SELECT _$newdata FROM %s _$newdata " + "WHERE _$newdata IS NOT NULL AND EXISTS " + "(SELECT 1 FROM %s _$newdata2 WHERE _$newdata2 IS NOT NULL " + "AND _$newdata2 OPERATOR(pg_catalog.*=) _$newdata " + "AND _$newdata2.ctid OPERATOR(pg_catalog.<>) " + "_$newdata.ctid)", tempname, tempname); if (SPI_execute(querybuf.data, false, 1) != SPI_OK_SELECT) elog(ERROR, "SPI_exec failed: %s", querybuf.data); @@ -662,8 +662,8 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner, resetStringInfo(&querybuf); appendStringInfo(&querybuf, "CREATE TEMP TABLE %s AS " - "SELECT mv.ctid AS tid, newdata " - "FROM %s mv FULL JOIN %s newdata ON (", + "SELECT _$mv.ctid AS tid, _$newdata " + "FROM %s _$mv FULL JOIN %s _$newdata ON (", diffname, matviewname, tempname); /* @@ -756,9 +756,9 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner, if (foundUniqueIndex) appendStringInfoString(&querybuf, " AND "); - leftop = quote_qualified_identifier("newdata", + leftop = quote_qualified_identifier("_$newdata", NameStr(attr->attname)); - rightop = quote_qualified_identifier("mv", + rightop = quote_qualified_identifier("_$mv", NameStr(attr->attname)); generate_operator_clause(&querybuf, @@ -786,8 +786,8 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner, Assert(foundUniqueIndex); appendStringInfoString(&querybuf, - " AND newdata OPERATOR(pg_catalog.*=) mv) " - "WHERE newdata IS NULL OR mv IS NULL " + " AND _$newdata OPERATOR(pg_catalog.*=) _$mv) " + "WHERE _$newdata IS NULL OR _$mv IS NULL " "ORDER BY tid"); /* Create the temporary "diff" table. */ @@ -813,10 +813,10 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner, /* Deletes must come before inserts; do them first. */ resetStringInfo(&querybuf); appendStringInfo(&querybuf, - "DELETE FROM %s mv WHERE ctid OPERATOR(pg_catalog.=) ANY " - "(SELECT diff.tid FROM %s diff " - "WHERE diff.tid IS NOT NULL " - "AND diff.newdata IS NULL)", + "DELETE FROM %s _$mv WHERE ctid OPERATOR(pg_catalog.=) ANY " + "(SELECT _$diff.tid FROM %s _$diff " + "WHERE _$diff.tid IS NOT NULL " + "AND _$diff._$newdata IS NULL)", matviewname, diffname); if (SPI_exec(querybuf.data, 0) != SPI_OK_DELETE) elog(ERROR, "SPI_exec failed: %s", querybuf.data); @@ -824,8 +824,8 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner, /* Inserts go last. */ resetStringInfo(&querybuf); appendStringInfo(&querybuf, - "INSERT INTO %s SELECT (diff.newdata).* " - "FROM %s diff WHERE tid IS NULL", + "INSERT INTO %s SELECT (_$diff._$newdata).* " + "FROM %s _$diff WHERE tid IS NULL", matviewname, diffname); if (SPI_exec(querybuf.data, 0) != SPI_OK_INSERT) elog(ERROR, "SPI_exec failed: %s", querybuf.data); From 3590680b85a8e51ef8df550e5a10dedd0d2dfd88 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 3 Jun 2021 14:54:06 -0400 Subject: [PATCH 401/671] Fix incorrect permissions on pg_subscription. The documented intent is for all columns except subconninfo to be publicly readable. However, this has been overlooked twice. subsynccommit has never been readable since it was introduced, nor has the oid column (which is important for joining). Given the lack of previous complaints, it's not clear that it's worth doing anything about this in the back branches. But there's still time to fix it inexpensively for v14. Per report from Israel Barth (via Euler Taveira). Patch by Euler Taveira, possibly-vain comment updates by me. Discussion: https://postgr.es/m/b8f7c17c-0041-46b6-acfe-2d1f5a985ab4@www.fastmail.com --- src/backend/catalog/system_views.sql | 5 +++-- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_subscription.h | 5 ++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 5c84d758bb617..999d9840683f6 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -1252,7 +1252,8 @@ CREATE VIEW pg_replication_origin_status AS REVOKE ALL ON pg_replication_origin_status FROM public; --- All columns of pg_subscription except subconninfo are readable. +-- All columns of pg_subscription except subconninfo are publicly readable. REVOKE ALL ON pg_subscription FROM public; -GRANT SELECT (subdbid, subname, subowner, subenabled, subbinary, substream, subslotname, subpublications) +GRANT SELECT (oid, subdbid, subname, subowner, subenabled, subbinary, + substream, subslotname, subsynccommit, subpublications) ON pg_subscription TO public; diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 1fa30abb2986d..7b8084e2451e0 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202105272 +#define CATALOG_VERSION_NO 202106031 #endif diff --git a/src/include/catalog/pg_subscription.h b/src/include/catalog/pg_subscription.h index a5d6efdf205b9..0060ebfb4099f 100644 --- a/src/include/catalog/pg_subscription.h +++ b/src/include/catalog/pg_subscription.h @@ -34,7 +34,10 @@ * them to be able to start the workers, so we have to put them in a shared, * nailed catalog. * - * NOTE: When adding a column, also update system_views.sql. + * CAUTION: There is a GRANT in system_views.sql to grant public select + * access on all columns except subconninfo. When you add a new column + * here, be sure to update that (or, if the new column is not to be publicly + * readable, update associated comments and catalogs.sgml instead). */ CATALOG(pg_subscription,6100,SubscriptionRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID(6101,SubscriptionRelation_Rowtype_Id) BKI_SCHEMA_MACRO { From 11e9caff82bc7326e2bc9782937cb03875050cc4 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Thu, 3 Jun 2021 16:08:33 -0400 Subject: [PATCH 402/671] In PostgresNode.pm, don't pass SQL to psql on the command line The Msys shell mangles certain patterns in its command line, so avoid handing arbitrary SQL to psql on the command line and instead use IPC::Run's redirection facility for stdin. This pattern is already mostly whats used, but query_poll_until() was not doing the right thing. Problem discovered on the buildfarm when a new TAP test failed on msys. --- src/test/perl/PostgresNode.pm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index 46530255e07c3..45d16361286e2 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -2127,7 +2127,7 @@ sub poll_query_until my $cmd = [ $self->installed_command('psql'), - '-XAt', '-c', $query, '-d', $self->connstr($dbname) + '-XAt', '-d', $self->connstr($dbname) ]; my ($stdout, $stderr); my $max_attempts = 180 * 10; @@ -2135,7 +2135,8 @@ sub poll_query_until while ($attempts < $max_attempts) { - my $result = IPC::Run::run $cmd, '>', \$stdout, '2>', \$stderr; + my $result = IPC::Run::run $cmd, '<', \$query, + '>', \$stdout, '2>', \$stderr; $stdout =~ s/\r\n/\n/g if $Config{osname} eq 'msys'; chomp($stdout); From 7fc26d11e370afe237631265714221364d7e7910 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Fri, 4 Jun 2021 12:19:50 +1200 Subject: [PATCH 403/671] Adjust locations which have an incorrect copyright year A few patches committed after ca3b37487 mistakenly forgot to make the copyright year 2021. Fix these. Discussion: https://postgr.es/m/CAApHDvqyLmd9P2oBQYJ=DbrV8QwyPRdmXtCTFYPE08h+ip0UJw@mail.gmail.com --- contrib/pageinspect/gistfuncs.c | 2 +- src/backend/access/brin/brin_bloom.c | 2 +- src/backend/access/brin/brin_minmax_multi.c | 2 +- src/backend/rewrite/rewriteSearchCycle.c | 2 +- src/backend/utils/adt/jsonbsubs.c | 2 +- src/common/hex.c | 2 +- src/common/hmac.c | 2 +- src/common/hmac_openssl.c | 2 +- src/common/sha1.c | 2 +- src/common/sha1_int.h | 2 +- src/include/common/hex.h | 2 +- src/include/common/hmac.h | 2 +- src/include/common/sha1.h | 2 +- src/include/port/pg_iovec.h | 2 +- src/include/rewrite/rewriteSearchCycle.h | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/contrib/pageinspect/gistfuncs.c b/contrib/pageinspect/gistfuncs.c index eb9f6303df63f..7c9b9be3efad0 100644 --- a/contrib/pageinspect/gistfuncs.c +++ b/contrib/pageinspect/gistfuncs.c @@ -2,7 +2,7 @@ * gistfuncs.c * Functions to investigate the content of GiST indexes * - * Copyright (c) 2014-2020, PostgreSQL Global Development Group + * Copyright (c) 2014-2021, PostgreSQL Global Development Group * * IDENTIFICATION * contrib/pageinspect/gistfuncs.c diff --git a/src/backend/access/brin/brin_bloom.c b/src/backend/access/brin/brin_bloom.c index 99b2543f767e0..2c8a20aaca648 100644 --- a/src/backend/access/brin/brin_bloom.c +++ b/src/backend/access/brin/brin_bloom.c @@ -2,7 +2,7 @@ * brin_bloom.c * Implementation of Bloom opclass for BRIN * - * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c index c62a3c8ba8c67..96499046d7796 100644 --- a/src/backend/access/brin/brin_minmax_multi.c +++ b/src/backend/access/brin/brin_minmax_multi.c @@ -2,7 +2,7 @@ * brin_minmax_multi.c * Implementation of Multi Min/Max opclass for BRIN * - * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/backend/rewrite/rewriteSearchCycle.c b/src/backend/rewrite/rewriteSearchCycle.c index 2d0ac378a81e9..599fe8e735295 100644 --- a/src/backend/rewrite/rewriteSearchCycle.c +++ b/src/backend/rewrite/rewriteSearchCycle.c @@ -3,7 +3,7 @@ * rewriteSearchCycle.c * Support for rewriting SEARCH and CYCLE clauses. * - * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/src/backend/utils/adt/jsonbsubs.c b/src/backend/utils/adt/jsonbsubs.c index 5868aad0578f0..47a89457dbee1 100644 --- a/src/backend/utils/adt/jsonbsubs.c +++ b/src/backend/utils/adt/jsonbsubs.c @@ -3,7 +3,7 @@ * jsonbsubs.c * Subscripting support functions for jsonb. * - * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * diff --git a/src/common/hex.c b/src/common/hex.c index e4878ba253dc7..3b1bc8fa75303 100644 --- a/src/common/hex.c +++ b/src/common/hex.c @@ -3,7 +3,7 @@ * hex.c * Encoding and decoding routines for hex. * - * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/src/common/hmac.c b/src/common/hmac.c index f1b8555143ab3..1089db6744307 100644 --- a/src/common/hmac.c +++ b/src/common/hmac.c @@ -5,7 +5,7 @@ * * Fallback implementation of HMAC, as specified in RFC 2104. * - * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/src/common/hmac_openssl.c b/src/common/hmac_openssl.c index 5df06839e015f..1acf59476eb3f 100644 --- a/src/common/hmac_openssl.c +++ b/src/common/hmac_openssl.c @@ -5,7 +5,7 @@ * * This should only be used if code is compiled with OpenSSL support. * - * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/src/common/sha1.c b/src/common/sha1.c index f8ed4d6808699..b39173b3a3780 100644 --- a/src/common/sha1.c +++ b/src/common/sha1.c @@ -5,7 +5,7 @@ * * Fallback implementation of SHA1, as specified in RFC 3174. * - * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/src/common/sha1_int.h b/src/common/sha1_int.h index 7f458a6127403..1929a2a655532 100644 --- a/src/common/sha1_int.h +++ b/src/common/sha1_int.h @@ -3,7 +3,7 @@ * sha1_int.h * Internal headers for fallback implementation of SHA1 * - * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/src/include/common/hex.h b/src/include/common/hex.h index 3c3c956bb66cd..150771a14d749 100644 --- a/src/include/common/hex.h +++ b/src/include/common/hex.h @@ -3,7 +3,7 @@ * hex.h * Encoding and decoding routines for hex strings. * - * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/src/include/common/hmac.h b/src/include/common/hmac.h index ea0343a9da7b4..dd012e6690cd1 100644 --- a/src/include/common/hmac.h +++ b/src/include/common/hmac.h @@ -3,7 +3,7 @@ * hmac.h * Generic headers for HMAC * - * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION diff --git a/src/include/common/sha1.h b/src/include/common/sha1.h index b1ee36f8eaf10..a475fadb8cc63 100644 --- a/src/include/common/sha1.h +++ b/src/include/common/sha1.h @@ -3,7 +3,7 @@ * sha1.h * Constants related to SHA1. * - * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/common/sha1.h diff --git a/src/include/port/pg_iovec.h b/src/include/port/pg_iovec.h index 365d605a9b3dc..05d59e99fb639 100644 --- a/src/include/port/pg_iovec.h +++ b/src/include/port/pg_iovec.h @@ -3,7 +3,7 @@ * pg_iovec.h * Header for vectored I/O functions, to use in place of . * - * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/port/pg_iovec.h diff --git a/src/include/rewrite/rewriteSearchCycle.h b/src/include/rewrite/rewriteSearchCycle.h index 257fb7cdab744..6be9541d4863b 100644 --- a/src/include/rewrite/rewriteSearchCycle.h +++ b/src/include/rewrite/rewriteSearchCycle.h @@ -4,7 +4,7 @@ * Support for rewriting SEARCH and CYCLE clauses. * * - * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/rewrite/rewriteSearchCycle.h From 77e9d1b4884262fa09cd8d141c7eadad3affde8b Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 4 Jun 2021 09:33:14 +0900 Subject: [PATCH 404/671] doc: Fix link reference for PGSSLMAXPROTOCOLVERSION The link was pointing to the minimum protocol version. Incorrect as of ff8ca5f. Author: Daniel Gustafsson Discussion: https://postgr.es/m/F893F184-C645-4C21-A2BA-583441B7288F@yesql.se Backpatch-through: 13 --- doc/src/sgml/libpq.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 2fc638c376fd6..11ab8c1c36806 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -7872,7 +7872,7 @@ myEventProc(PGEventId evtId, void *evtInfo, void *passThrough) PGSSLMAXPROTOCOLVERSION PGSSLMAXPROTOCOLVERSION behaves the same as the connection parameter. + linkend="libpq-connect-ssl-max-protocol-version"/> connection parameter. From 1e809db86b160e697a56bf47358f7733475840d3 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 4 Jun 2021 09:46:15 +0900 Subject: [PATCH 405/671] doc: Add description for PGSSLCRLDIR This was missing in the section dedicated to the supported environment variables of libpq. Oversight in f5465fa. Reviewed-by: Daniel Gustafsson, Kyotaro Horiguchi Discussion: https://postgr.es/m/YLhI0mLoRkY3u4Wj@paquier.xyz --- doc/src/sgml/libpq.sgml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 11ab8c1c36806..ca905b80a6dbf 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -7836,6 +7836,16 @@ myEventProc(PGEventId evtId, void *evtInfo, void *passThrough) + + + + PGSSLCRLDIR + + PGSSLCRLDIR behaves the same as the connection parameter. + + + From e4539386decae1c435767a69507cc7cbb11ac3ff Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 3 Jun 2021 21:07:12 -0400 Subject: [PATCH 406/671] Doc: fix bogus intarray index example. The siglen parameter is provided by gist__intbig_ops not gist__int_ops. Simon Norris Discussion: https://postgr.es/m/11BF2AA9-17AE-432A-AFE1-584FB9FB079D@hillcrestgeo.ca --- doc/src/sgml/intarray.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/intarray.sgml b/doc/src/sgml/intarray.sgml index dfe98279c09ca..f930c08eeb789 100644 --- a/doc/src/sgml/intarray.sgml +++ b/doc/src/sgml/intarray.sgml @@ -446,7 +446,7 @@ CREATE TABLE message (mid INT PRIMARY KEY, sections INT[], ...); -- create specialized index with signature length of 32 bytes -CREATE INDEX message_rdtree_idx ON message USING GIST (sections gist__int_ops(siglen=32)); +CREATE INDEX message_rdtree_idx ON message USING GIST (sections gist__intbig_ops (siglen = 32)); -- select messages in section 1 OR 2 - OVERLAP operator SELECT message.mid FROM message WHERE message.sections && '{1,2}'; From 8bdb36aab287f564eac534878bc0e1d873a4e3db Mon Sep 17 00:00:00 2001 From: David Rowley Date: Fri, 4 Jun 2021 22:42:17 +1200 Subject: [PATCH 407/671] Clean up some questionable usages of DatumGet* macros This tidies up some questionable coding which made use of DatumGetPointer() for Datums being passed into functions where the parameter is expected to be a cstring. We saw no compiler warnings with the old code as the Pointer type used in DatumGetPointer() happens to be a char * rather than a void *. However, that's no excuse and we should be using the correct macro for the job. Here we also make use of OutputFunctionCall() rather than using FunctionCall1() directly to call the type's output function. OutputFunctionCall() is the standard way to do this. It casts the returned value to a cstring for us. In passing get rid of a duplicate call to strlen(). Most compilers will likely optimize away the 2nd call, but there may be some that won't. In any case, this just aligns the code to some other nearby code that already does this. Discussion: https://postgr.es/m/CAApHDvq1D=ehZ8hey8Hz67N+_Zth0GHO5wiVCfv1YcGPMXJq0A@mail.gmail.com --- src/backend/access/brin/brin_minmax_multi.c | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c index 96499046d7796..4681954b098cd 100644 --- a/src/backend/access/brin/brin_minmax_multi.c +++ b/src/backend/access/brin/brin_minmax_multi.c @@ -634,7 +634,7 @@ range_serialize(Ranges *range) for (i = 0; i < nvalues; i++) { /* don't forget to include the null terminator ;-) */ - len += strlen(DatumGetPointer(range->values[i])) + 1; + len += strlen(DatumGetCString(range->values[i])) + 1; } } else /* fixed-length types (even by-reference) */ @@ -695,9 +695,9 @@ range_serialize(Ranges *range) } else if (typlen == -2) /* cstring */ { - int tmp = strlen(DatumGetPointer(range->values[i])) + 1; + int tmp = strlen(DatumGetCString(range->values[i])) + 1; - memcpy(ptr, DatumGetPointer(range->values[i]), tmp); + memcpy(ptr, DatumGetCString(range->values[i]), tmp); ptr += tmp; } @@ -780,8 +780,10 @@ range_deserialize(int maxvalues, SerializedRanges *serialized) } else if (typlen == -2) /* cstring */ { - datalen += MAXALIGN(strlen(DatumGetPointer(ptr)) + 1); - ptr += strlen(DatumGetPointer(ptr)) + 1; + Size slen = strlen(DatumGetCString(ptr)) + 1; + + datalen += MAXALIGN(slen); + ptr += slen; } } @@ -830,7 +832,7 @@ range_deserialize(int maxvalues, SerializedRanges *serialized) memcpy(dataptr, ptr, slen); dataptr += MAXALIGN(slen); - ptr += (slen); + ptr += slen; } /* make sure we haven't overflown the buffer end */ @@ -3032,19 +3034,17 @@ brin_minmax_multi_summary_out(PG_FUNCTION_ARGS) idx = 0; for (i = 0; i < ranges_deserialized->nranges; i++) { - Datum a, - b; + char *a, + *b; text *c; StringInfoData str; initStringInfo(&str); - a = FunctionCall1(&fmgrinfo, ranges_deserialized->values[idx++]); - b = FunctionCall1(&fmgrinfo, ranges_deserialized->values[idx++]); + a = OutputFunctionCall(&fmgrinfo, ranges_deserialized->values[idx++]); + b = OutputFunctionCall(&fmgrinfo, ranges_deserialized->values[idx++]); - appendStringInfo(&str, "%s ... %s", - DatumGetPointer(a), - DatumGetPointer(b)); + appendStringInfo(&str, "%s ... %s", a, b); c = cstring_to_text(str.data); @@ -3084,7 +3084,7 @@ brin_minmax_multi_summary_out(PG_FUNCTION_ARGS) a = FunctionCall1(&fmgrinfo, ranges_deserialized->values[idx++]); - appendStringInfoString(&str, DatumGetPointer(a)); + appendStringInfoString(&str, DatumGetCString(a)); b = cstring_to_text(str.data); From 8f3c06c5d56fc0fa414bcf548860ac50a8fe5982 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Fri, 4 Jun 2021 23:39:40 +1200 Subject: [PATCH 408/671] Doc: Fix some spelling mistakes Author: Daniel Gustafsson Discussion: https://postgr.es/m/7838B8EE-CFD6-48D7-AE2D-520D69FD84BD@yesql.se --- doc/src/sgml/postgres-fdw.sgml | 2 +- doc/src/sgml/ref/analyze.sgml | 2 +- doc/src/sgml/ref/pg_amcheck.sgml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/postgres-fdw.sgml b/doc/src/sgml/postgres-fdw.sgml index fb87372bde1a2..65171841c9408 100644 --- a/doc/src/sgml/postgres-fdw.sgml +++ b/doc/src/sgml/postgres-fdw.sgml @@ -386,7 +386,7 @@ OPTIONS (ADD password_required 'false'); postgres_fdw supports asynchronous execution, which runs multiple parts of an Append node concurrently rather than serially to improve performance. - This execution can be controled using the following option: + This execution can be controlled using the following option: diff --git a/doc/src/sgml/ref/analyze.sgml b/doc/src/sgml/ref/analyze.sgml index 0879004b8457a..176c7cb2256b7 100644 --- a/doc/src/sgml/ref/analyze.sgml +++ b/doc/src/sgml/ref/analyze.sgml @@ -255,7 +255,7 @@ ANALYZE [ VERBOSE ] [ table_and_columnsANALYZE will gather statistics for it twice: once on the rows of the parent table only, and a second time on the rows of the parent table with all of its children. This second set of diff --git a/doc/src/sgml/ref/pg_amcheck.sgml b/doc/src/sgml/ref/pg_amcheck.sgml index 04667e9002d08..46d12110b19ff 100644 --- a/doc/src/sgml/ref/pg_amcheck.sgml +++ b/doc/src/sgml/ref/pg_amcheck.sgml @@ -290,7 +290,7 @@ PostgreSQL documentation or --relation matches no objects, it is a fatal error. This option downgrades that error to a warning. If this option is used with --quiet, the warning - will be supressed as well. + will be suppressed as well. From f61db909dfb94f3411f8719916601a11a905b95e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 4 Jun 2021 20:07:08 -0400 Subject: [PATCH 409/671] Fix postgres_fdw failure with whole-row Vars of type RECORD. Commit 86dc90056 expects that FDWs can cope with whole-row Vars for their tables, even if the Vars are marked with vartype RECORDOID. Previously, whole-row Vars generated by the planner had vartype equal to the relevant table's rowtype OID. (The point behind this change is to enable sharing of resjunk columns across inheritance child tables.) It turns out that postgres_fdw fails to cope with this, though through bad fortune none of its test cases exposed that. Things mostly work, but when we try to read back a value of such a Var, the expected rowtype is not available to record_in(). Fortunately, it's not difficult to hack up the tupdesc that controls this process to substitute the foreign table's rowtype for RECORDOID. Thus we can solve the runtime problem while still sharing the resjunk column with other tables. Per report from Alexander Pyhalov. Discussion: https://postgr.es/m/7817fb9ebd6661cdf9b67dec6e129a78@postgrespro.ru --- .../postgres_fdw/expected/postgres_fdw.out | 25 +++++++++ contrib/postgres_fdw/postgres_fdw.c | 55 ++++++++++++++++++- contrib/postgres_fdw/sql/postgres_fdw.sql | 8 +++ 3 files changed, 86 insertions(+), 2 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index f320a7578ddf0..0659656b6bb53 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -5531,6 +5531,31 @@ UPDATE ft2 AS target SET (c2) = ( FROM ft2 AS src WHERE target.c1 = src.c1 ) WHERE c1 > 1100; +-- Test UPDATE involving a join that can be pushed down, +-- but a SET clause that can't be +EXPLAIN (VERBOSE, COSTS OFF) +UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END + FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1100; + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Update on public.ft2 d + Remote SQL: UPDATE "S 1"."T 1" SET c2 = $2 WHERE ctid = $1 + -> Foreign Scan + Output: CASE WHEN (random() >= '0'::double precision) THEN d.c2 ELSE 0 END, d.ctid, d.*, t.* + Relations: (public.ft2 d) INNER JOIN (public.ft2 t) + Remote SQL: SELECT r1.c2, r1.ctid, CASE WHEN (r1.*)::text IS NOT NULL THEN ROW(r1."C 1", r1.c2, r1.c3, r1.c4, r1.c5, r1.c6, r1.c7, r1.c8) END, CASE WHEN (r2.*)::text IS NOT NULL THEN ROW(r2."C 1", r2.c2, r2.c3, r2.c4, r2.c5, r2.c6, r2.c7, r2.c8) END FROM ("S 1"."T 1" r1 INNER JOIN "S 1"."T 1" r2 ON (((r1."C 1" = r2."C 1")) AND ((r1."C 1" > 1100)))) FOR UPDATE OF r1 + -> Nested Loop + Output: d.c2, d.ctid, d.*, t.* + -> Foreign Scan on public.ft2 d + Output: d.c2, d.ctid, d.*, d.c1 + Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8, ctid FROM "S 1"."T 1" WHERE (("C 1" > 1100)) ORDER BY "C 1" ASC NULLS LAST FOR UPDATE + -> Foreign Scan on public.ft2 t + Output: t.*, t.c1 + Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (($1::integer = "C 1")) +(14 rows) + +UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END + FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1100; -- Test UPDATE/DELETE with WHERE or JOIN/ON conditions containing -- user-defined operators/functions ALTER SERVER loopback OPTIONS (DROP extensions); diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index c48a421e88b2f..0843ed9dba2a2 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -1439,6 +1439,57 @@ postgresGetForeignPlan(PlannerInfo *root, outer_plan); } +/* + * Construct a tuple descriptor for the scan tuples handled by a foreign join. + */ +static TupleDesc +get_tupdesc_for_join_scan_tuples(ForeignScanState *node) +{ + ForeignScan *fsplan = (ForeignScan *) node->ss.ps.plan; + EState *estate = node->ss.ps.state; + TupleDesc tupdesc; + + /* + * The core code has already set up a scan tuple slot based on + * fsplan->fdw_scan_tlist, and this slot's tupdesc is mostly good enough, + * but there's one case where it isn't. If we have any whole-row row + * identifier Vars, they may have vartype RECORD, and we need to replace + * that with the associated table's actual composite type. This ensures + * that when we read those ROW() expression values from the remote server, + * we can convert them to a composite type the local server knows. + */ + tupdesc = CreateTupleDescCopy(node->ss.ss_ScanTupleSlot->tts_tupleDescriptor); + for (int i = 0; i < tupdesc->natts; i++) + { + Form_pg_attribute att = TupleDescAttr(tupdesc, i); + Var *var; + RangeTblEntry *rte; + Oid reltype; + + /* Nothing to do if it's not a generic RECORD attribute */ + if (att->atttypid != RECORDOID || att->atttypmod >= 0) + continue; + + /* + * If we can't identify the referenced table, do nothing. This'll + * likely lead to failure later, but perhaps we can muddle through. + */ + var = (Var *) list_nth_node(TargetEntry, fsplan->fdw_scan_tlist, + i)->expr; + if (!IsA(var, Var) || var->varattno != 0) + continue; + rte = list_nth(estate->es_range_table, var->varno - 1); + if (rte->rtekind != RTE_RELATION) + continue; + reltype = get_rel_type_id(rte->relid); + if (!OidIsValid(reltype)) + continue; + att->atttypid = reltype; + /* shouldn't need to change anything else */ + } + return tupdesc; +} + /* * postgresBeginForeignScan * Initiate an executor scan of a foreign PostgreSQL table. @@ -1523,7 +1574,7 @@ postgresBeginForeignScan(ForeignScanState *node, int eflags) else { fsstate->rel = NULL; - fsstate->tupdesc = node->ss.ss_ScanTupleSlot->tts_tupleDescriptor; + fsstate->tupdesc = get_tupdesc_for_join_scan_tuples(node); } fsstate->attinmeta = TupleDescGetAttInMetadata(fsstate->tupdesc); @@ -2631,7 +2682,7 @@ postgresBeginDirectModify(ForeignScanState *node, int eflags) TupleDesc tupdesc; if (fsplan->scan.scanrelid == 0) - tupdesc = node->ss.ss_ScanTupleSlot->tts_tupleDescriptor; + tupdesc = get_tupdesc_for_join_scan_tuples(node); else tupdesc = RelationGetDescr(dmstate->rel); diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 17dba77d7ec3e..79295e996dd6c 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -1255,6 +1255,14 @@ UPDATE ft2 AS target SET (c2) = ( WHERE target.c1 = src.c1 ) WHERE c1 > 1100; +-- Test UPDATE involving a join that can be pushed down, +-- but a SET clause that can't be +EXPLAIN (VERBOSE, COSTS OFF) +UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END + FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1100; +UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END + FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1100; + -- Test UPDATE/DELETE with WHERE or JOIN/ON conditions containing -- user-defined operators/functions ALTER SERVER loopback OPTIONS (DROP extensions); From 4a682d85a1408e48ac529295c329ba2c17a44724 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sat, 5 Jun 2021 07:16:34 +0200 Subject: [PATCH 410/671] Fix subtransaction test for Python 3.10 Starting with Python 3.10, the stacktrace looks differently: - PL/Python function "subtransaction_exit_subtransaction_in_with", line 3, in - s.__exit__(None, None, None) + PL/Python function "subtransaction_exit_subtransaction_in_with", line 2, in + with plpy.subtransaction() as s: Using try/except specifically makes the error look always the same. (See https://github.com/python/cpython/pull/25719 for the discussion of this change in Python.) Author: Honza Horak Discussion: https://www.postgresql.org/message-id/flat/853083.1620749597%40sss.pgh.pa.us RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1959080 --- src/pl/plpython/expected/plpython_subtransaction.out | 11 +++++++---- src/pl/plpython/sql/plpython_subtransaction.sql | 7 +++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/pl/plpython/expected/plpython_subtransaction.out b/src/pl/plpython/expected/plpython_subtransaction.out index 0d0ff2e36d9ec..2a56541917d10 100644 --- a/src/pl/plpython/expected/plpython_subtransaction.out +++ b/src/pl/plpython/expected/plpython_subtransaction.out @@ -171,8 +171,11 @@ with plpy.subtransaction() as s: $$ LANGUAGE plpythonu; CREATE FUNCTION subtransaction_exit_subtransaction_in_with() RETURNS void AS $$ -with plpy.subtransaction() as s: - s.__exit__(None, None, None) +try: + with plpy.subtransaction() as s: + s.__exit__(None, None, None) +except ValueError as e: + raise ValueError(e) $$ LANGUAGE plpythonu; SELECT subtransaction_exit_without_enter(); ERROR: ValueError: this subtransaction has not been entered @@ -224,8 +227,8 @@ PL/Python function "subtransaction_enter_subtransaction_in_with" SELECT subtransaction_exit_subtransaction_in_with(); ERROR: ValueError: this subtransaction has already been exited CONTEXT: Traceback (most recent call last): - PL/Python function "subtransaction_exit_subtransaction_in_with", line 3, in - s.__exit__(None, None, None) + PL/Python function "subtransaction_exit_subtransaction_in_with", line 6, in + raise ValueError(e) PL/Python function "subtransaction_exit_subtransaction_in_with" -- Make sure we don't get a "current transaction is aborted" error SELECT 1 as test; diff --git a/src/pl/plpython/sql/plpython_subtransaction.sql b/src/pl/plpython/sql/plpython_subtransaction.sql index 47bb11f157744..cc4b1ae102b01 100644 --- a/src/pl/plpython/sql/plpython_subtransaction.sql +++ b/src/pl/plpython/sql/plpython_subtransaction.sql @@ -121,8 +121,11 @@ $$ LANGUAGE plpythonu; CREATE FUNCTION subtransaction_exit_subtransaction_in_with() RETURNS void AS $$ -with plpy.subtransaction() as s: - s.__exit__(None, None, None) +try: + with plpy.subtransaction() as s: + s.__exit__(None, None, None) +except ValueError as e: + raise ValueError(e) $$ LANGUAGE plpythonu; SELECT subtransaction_exit_without_enter(); From e6159885b78e9b91b2adc3161c5f827d081f2b13 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sat, 5 Jun 2021 07:57:31 +0200 Subject: [PATCH 411/671] gitattributes: Add new entry to silence whitespace error --- .gitattributes | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitattributes b/.gitattributes index 57ef0daea0e3d..f9868677fa2e3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -13,6 +13,7 @@ README.* conflict-marker-size=32 *.data -whitespace contrib/pgcrypto/sql/pgp-armor.sql whitespace=-blank-at-eol src/backend/catalog/sql_features.txt whitespace=space-before-tab,blank-at-eof,-blank-at-eol +src/backend/utils/Gen_dummy_probes.pl.prolog whitespace=-blank-at-eof # Test output files that contain extra whitespace *.out -whitespace From 01ddd2f7e411ba434473faebf00f5b5af84c0f64 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sat, 5 Jun 2021 09:01:29 +0200 Subject: [PATCH 412/671] doc: Make terminology in glossary consistent Use "reside in" rather than "belong to" for objects in a schema. Previous use was a mix of the two. Author: Alvaro Herrera Discussion: https://www.postgresql.org/message-id/202106021932.idmbjjaqk7ke@alvherre.pgsql --- doc/src/sgml/glossary.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/glossary.sgml b/doc/src/sgml/glossary.sgml index 41f3e5ee86ba6..c8d0440e80f50 100644 --- a/doc/src/sgml/glossary.sgml +++ b/doc/src/sgml/glossary.sgml @@ -1448,7 +1448,7 @@ known as local objects. - Most local objects belong to a specific + Most local objects reside in a specific schema in their containing database, such as relations (all types), @@ -1458,7 +1458,7 @@ are enforced to be unique. - There also exist local objects that do not belong to schemas; some examples are + There also exist local objects that do not reside in schemas; some examples are extensions, data type casts, and foreign data wrappers. From 5c25fd650a774cc4f16ac9c635830d9bc5797f61 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sat, 5 Jun 2021 09:08:40 +0200 Subject: [PATCH 413/671] doc: Simplify COMMENT and SECURITY LABEL documentation Just say that objects that reside in schemas can be schema-qualified. Don't list all possible such objects. The existing lists weren't complete anyway. Discussion: https://www.postgresql.org/message-id/flat/b2ec2234-67fe-d861-5cea-f526cd18c086%40enterprisedb.com --- doc/src/sgml/ref/comment.sgml | 6 ++---- doc/src/sgml/ref/security_label.sgml | 5 ++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/doc/src/sgml/ref/comment.sgml b/doc/src/sgml/ref/comment.sgml index eda91b4e240f5..4f30bb93e2aa3 100644 --- a/doc/src/sgml/ref/comment.sgml +++ b/doc/src/sgml/ref/comment.sgml @@ -129,10 +129,8 @@ COMMENT ON trigger_name - The name of the object to be commented. Names of tables, - aggregates, collations, conversions, domains, foreign tables, functions, - indexes, operators, operator classes, operator families, procedures, routines, sequences, - statistics, text search objects, types, and views can be + The name of the object to be commented. Names of objects that reside in + schemas (tables, functions, etc.) can be schema-qualified. When commenting on a column, relation_name must refer to a table, view, composite type, or foreign table. diff --git a/doc/src/sgml/ref/security_label.sgml b/doc/src/sgml/ref/security_label.sgml index 9b87bcd51961c..407a09720b8ed 100644 --- a/doc/src/sgml/ref/security_label.sgml +++ b/doc/src/sgml/ref/security_label.sgml @@ -99,9 +99,8 @@ SECURITY LABEL [ FOR provider ] ON routine_name - The name of the object to be labeled. Names of tables, - aggregates, domains, foreign tables, functions, procedures, routines, sequences, types, and - views can be schema-qualified. + The name of the object to be labeled. Names of objects that reside in + schemas (tables, functions, etc.) can be schema-qualified. From a2dee328bbe5b1979bbc6a784deb86a336c9cd74 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Sun, 6 Jun 2021 00:08:21 -0700 Subject: [PATCH 414/671] Standardize nodes/*funcs.c cosmetics for ForeignScan.resultRelation. catversion bump due to readfuncs.c field order change. --- src/backend/nodes/copyfuncs.c | 2 +- src/backend/nodes/outfuncs.c | 2 +- src/backend/nodes/readfuncs.c | 2 +- src/include/catalog/catversion.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 90770a89b0b66..f94422c052698 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -775,6 +775,7 @@ _copyForeignScan(const ForeignScan *from) * copy remainder of node */ COPY_SCALAR_FIELD(operation); + COPY_SCALAR_FIELD(resultRelation); COPY_SCALAR_FIELD(fs_server); COPY_NODE_FIELD(fdw_exprs); COPY_NODE_FIELD(fdw_private); @@ -782,7 +783,6 @@ _copyForeignScan(const ForeignScan *from) COPY_NODE_FIELD(fdw_recheck_quals); COPY_BITMAPSET_FIELD(fs_relids); COPY_SCALAR_FIELD(fsSystemCol); - COPY_SCALAR_FIELD(resultRelation); return newnode; } diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 8da8b14f0e56d..0260101ce25e0 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -701,6 +701,7 @@ _outForeignScan(StringInfo str, const ForeignScan *node) _outScanInfo(str, (const Scan *) node); WRITE_ENUM_FIELD(operation, CmdType); + WRITE_UINT_FIELD(resultRelation); WRITE_OID_FIELD(fs_server); WRITE_NODE_FIELD(fdw_exprs); WRITE_NODE_FIELD(fdw_private); @@ -708,7 +709,6 @@ _outForeignScan(StringInfo str, const ForeignScan *node) WRITE_NODE_FIELD(fdw_recheck_quals); WRITE_BITMAPSET_FIELD(fs_relids); WRITE_BOOL_FIELD(fsSystemCol); - WRITE_INT_FIELD(resultRelation); } static void diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 3772ea07dfd6d..f0b34ecface79 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -2073,6 +2073,7 @@ _readForeignScan(void) ReadCommonScan(&local_node->scan); READ_ENUM_FIELD(operation, CmdType); + READ_UINT_FIELD(resultRelation); READ_OID_FIELD(fs_server); READ_NODE_FIELD(fdw_exprs); READ_NODE_FIELD(fdw_private); @@ -2080,7 +2081,6 @@ _readForeignScan(void) READ_NODE_FIELD(fdw_recheck_quals); READ_BITMAPSET_FIELD(fs_relids); READ_BOOL_FIELD(fsSystemCol); - READ_INT_FIELD(resultRelation); READ_DONE(); } diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 7b8084e2451e0..06bf4632dfeff 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202106031 +#define CATALOG_VERSION_NO 202106061 #endif From d57ecebd128cdf2f4844a2ea4d35ff28d7d69be8 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Sun, 6 Jun 2021 20:52:58 +0200 Subject: [PATCH 415/671] Add transformed flag to nodes/*funcs.c for CREATE STATISTICS Commit a4d75c86bf added a new flag, tracking if the statement was processed by transformStatsStmt(), but failed to add this flag to nodes/*funcs.c. Catversion bump, due to adding a flag to copy/equal/out functions. Reported-by: Noah Misch Discussion: https://postgr.es/m/ad7891d2-e90c-b446-9fe2-7419143847d7%40enterprisedb.com --- src/backend/nodes/copyfuncs.c | 1 + src/backend/nodes/equalfuncs.c | 1 + src/backend/nodes/outfuncs.c | 1 + src/include/catalog/catversion.h | 2 +- 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index f94422c052698..621f7ce0687fe 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -3678,6 +3678,7 @@ _copyCreateStatsStmt(const CreateStatsStmt *from) COPY_NODE_FIELD(exprs); COPY_NODE_FIELD(relations); COPY_STRING_FIELD(stxcomment); + COPY_SCALAR_FIELD(transformed); COPY_SCALAR_FIELD(if_not_exists); return newnode; diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index ce76d093dda3f..47546739ed9fe 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -1405,6 +1405,7 @@ _equalCreateStatsStmt(const CreateStatsStmt *a, const CreateStatsStmt *b) COMPARE_NODE_FIELD(exprs); COMPARE_NODE_FIELD(relations); COMPARE_STRING_FIELD(stxcomment); + COMPARE_SCALAR_FIELD(transformed); COMPARE_SCALAR_FIELD(if_not_exists); return true; diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 0260101ce25e0..04696f613ccaf 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -2778,6 +2778,7 @@ _outCreateStatsStmt(StringInfo str, const CreateStatsStmt *node) WRITE_NODE_FIELD(exprs); WRITE_NODE_FIELD(relations); WRITE_STRING_FIELD(stxcomment); + WRITE_BOOL_FIELD(transformed); WRITE_BOOL_FIELD(if_not_exists); } diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 06bf4632dfeff..38fb958a8db14 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202106061 +#define CATALOG_VERSION_NO 202106062 #endif From a65e9f3f1405b786673feec131879843432bf9a6 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 6 Jun 2021 15:46:58 -0400 Subject: [PATCH 416/671] Fix inconsistent equalfuncs.c behavior for FuncCall.funcformat. Other equalfuncs.c checks on CoercionForm fields use COMPARE_COERCIONFORM_FIELD (which makes them no-ops), but commit 40c24bfef neglected to make _equalFuncCall do likewise. Fix that. This is only strictly correct if FuncCall.funcformat has no semantic effect, instead just determining ruleutils.c display formatting. 40c24bfef added a couple of checks in parse analysis that could break that rule; but on closer inspection, they're redundant, so just take them out again. Per report from Noah Misch. Discussion: https://postgr.es/m/20210606063331.GC297923@rfd.leadboat.com --- src/backend/nodes/equalfuncs.c | 2 +- src/backend/parser/parse_clause.c | 1 - src/backend/parser/parse_func.c | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index 47546739ed9fe..3033c1934c3d6 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -2420,7 +2420,7 @@ _equalFuncCall(const FuncCall *a, const FuncCall *b) COMPARE_SCALAR_FIELD(agg_star); COMPARE_SCALAR_FIELD(agg_distinct); COMPARE_SCALAR_FIELD(func_variadic); - COMPARE_SCALAR_FIELD(funcformat); + COMPARE_COERCIONFORM_FIELD(funcformat); COMPARE_LOCATION_FIELD(location); return true; diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index 89d95d3e949b1..71c360bea582f 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -543,7 +543,6 @@ transformRangeFunction(ParseState *pstate, RangeFunction *r) !fc->agg_star && !fc->agg_distinct && !fc->func_variadic && - fc->funcformat == COERCE_EXPLICIT_CALL && coldeflist == NIL) { ListCell *lc; diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c index baac089d68915..fb0ba58ff775f 100644 --- a/src/backend/parser/parse_func.c +++ b/src/backend/parser/parse_func.c @@ -222,7 +222,6 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, agg_order == NIL && agg_filter == NULL && !agg_star && !agg_distinct && over == NULL && !func_variadic && argnames == NIL && - funcformat == COERCE_EXPLICIT_CALL && list_length(funcname) == 1 && (actual_arg_types[0] == RECORDOID || ISCOMPLEX(actual_arg_types[0]))); From f3baaf28a6da588987b94a05a725894805c3eae9 Mon Sep 17 00:00:00 2001 From: Etsuro Fujita Date: Mon, 7 Jun 2021 12:45:00 +0900 Subject: [PATCH 417/671] Fix rescanning of async-aware Append nodes. In cases where run-time pruning isn't required, the synchronous and asynchronous subplans for an async-aware Append node determined using classify_matching_subplans() should be re-used when rescanning the node, but the previous code re-determined them using that function repeatedly each time when rescanning the node, leading to incorrect results in a normal build and an Assert failure in an Assert-enabled build as that function doesn't assume that it's called repeatedly in such cases. Fix the code as mentioned above. My oversight in commit 27e1f1456. While at it, initialize async-related pointers/variables to NULL/zero explicitly in ExecInitAppend() and ExecReScanAppend(), just to be sure. (The variables would have been set to zero before we get to the latter function, but let's do so.) Reviewed-by: Kyotaro Horiguchi Discussion: https://postgr.es/m/CAPmGK16Q4B2_KY%2BJH7rb7wQbw54AUprp7TMekGTd2T1B62yysQ%40mail.gmail.com --- .../postgres_fdw/expected/postgres_fdw.out | 42 +++++++++++++++++++ contrib/postgres_fdw/sql/postgres_fdw.sql | 12 ++++++ src/backend/executor/nodeAppend.c | 27 +++++++++--- 3 files changed, 76 insertions(+), 5 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 0659656b6bb53..7b7c0db16cffc 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -9973,6 +9973,48 @@ SELECT * FROM join_tbl ORDER BY a1; DELETE FROM join_tbl; RESET enable_partitionwise_join; +-- Test rescan of an async Append node with do_exec_prune=false +SET enable_hashjoin TO false; +EXPLAIN (VERBOSE, COSTS OFF) +INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0; + QUERY PLAN +---------------------------------------------------------------------------------------- + Insert on public.join_tbl + -> Nested Loop + Output: t1.a, t1.b, t1.c, t2.a, t2.b, t2.c + Join Filter: ((t1.a = t2.a) AND (t1.b = t2.b)) + -> Foreign Scan on public.async_p1 t1 + Output: t1.a, t1.b, t1.c + Remote SQL: SELECT a, b, c FROM public.base_tbl1 WHERE (((b % 100) = 0)) + -> Append + -> Async Foreign Scan on public.async_p1 t2_1 + Output: t2_1.a, t2_1.b, t2_1.c + Remote SQL: SELECT a, b, c FROM public.base_tbl1 + -> Async Foreign Scan on public.async_p2 t2_2 + Output: t2_2.a, t2_2.b, t2_2.c + Remote SQL: SELECT a, b, c FROM public.base_tbl2 + -> Seq Scan on public.async_p3 t2_3 + Output: t2_3.a, t2_3.b, t2_3.c +(16 rows) + +INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0; +SELECT * FROM join_tbl ORDER BY a1; + a1 | b1 | c1 | a2 | b2 | c2 +------+-----+------+------+-----+------ + 1000 | 0 | 0000 | 1000 | 0 | 0000 + 1100 | 100 | 0100 | 1100 | 100 | 0100 + 1200 | 200 | 0200 | 1200 | 200 | 0200 + 1300 | 300 | 0300 | 1300 | 300 | 0300 + 1400 | 400 | 0400 | 1400 | 400 | 0400 + 1500 | 500 | 0500 | 1500 | 500 | 0500 + 1600 | 600 | 0600 | 1600 | 600 | 0600 + 1700 | 700 | 0700 | 1700 | 700 | 0700 + 1800 | 800 | 0800 | 1800 | 800 | 0800 + 1900 | 900 | 0900 | 1900 | 900 | 0900 +(10 rows) + +DELETE FROM join_tbl; +RESET enable_hashjoin; -- Test interaction of async execution with plan-time partition pruning EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM async_pt WHERE a < 3000; diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 79295e996dd6c..191efbf7c248e 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -3157,6 +3157,18 @@ DELETE FROM join_tbl; RESET enable_partitionwise_join; +-- Test rescan of an async Append node with do_exec_prune=false +SET enable_hashjoin TO false; + +EXPLAIN (VERBOSE, COSTS OFF) +INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0; +INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0; + +SELECT * FROM join_tbl ORDER BY a1; +DELETE FROM join_tbl; + +RESET enable_hashjoin; + -- Test interaction of async execution with plan-time partition pruning EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM async_pt WHERE a < 3000; diff --git a/src/backend/executor/nodeAppend.c b/src/backend/executor/nodeAppend.c index 62335ed4c4744..755c1392f09de 100644 --- a/src/backend/executor/nodeAppend.c +++ b/src/backend/executor/nodeAppend.c @@ -240,10 +240,12 @@ ExecInitAppend(Append *node, EState *estate, int eflags) appendstate->as_asyncplans = asyncplans; appendstate->as_nasyncplans = nasyncplans; appendstate->as_asyncrequests = NULL; - appendstate->as_asyncresults = (TupleTableSlot **) - palloc0(nasyncplans * sizeof(TupleTableSlot *)); + appendstate->as_asyncresults = NULL; + appendstate->as_nasyncresults = 0; + appendstate->as_nasyncremain = 0; appendstate->as_needrequest = NULL; appendstate->as_eventset = NULL; + appendstate->as_valid_asyncplans = NULL; if (nasyncplans > 0) { @@ -265,6 +267,12 @@ ExecInitAppend(Append *node, EState *estate, int eflags) appendstate->as_asyncrequests[i] = areq; } + + appendstate->as_asyncresults = (TupleTableSlot **) + palloc0(nasyncplans * sizeof(TupleTableSlot *)); + + if (appendstate->as_valid_subplans != NULL) + classify_matching_subplans(appendstate); } /* @@ -459,6 +467,8 @@ ExecReScanAppend(AppendState *node) areq->result = NULL; } + node->as_nasyncresults = 0; + node->as_nasyncremain = 0; bms_free(node->as_needrequest); node->as_needrequest = NULL; } @@ -861,15 +871,24 @@ ExecAppendAsyncBegin(AppendState *node) /* Backward scan is not supported by async-aware Appends. */ Assert(ScanDirectionIsForward(node->ps.state->es_direction)); + /* We should never be called when there are no subplans */ + Assert(node->as_nplans > 0); + /* We should never be called when there are no async subplans. */ Assert(node->as_nasyncplans > 0); /* If we've yet to determine the valid subplans then do so now. */ if (node->as_valid_subplans == NULL) + { node->as_valid_subplans = ExecFindMatchingSubPlans(node->as_prune_state); - classify_matching_subplans(node); + classify_matching_subplans(node); + } + + /* Initialize state variables. */ + node->as_syncdone = bms_is_empty(node->as_valid_subplans); + node->as_nasyncremain = bms_num_members(node->as_valid_asyncplans); /* Nothing to do if there are no valid async subplans. */ if (node->as_nasyncremain == 0) @@ -1148,9 +1167,7 @@ classify_matching_subplans(AppendState *node) /* Adjust the valid subplans to contain sync subplans only. */ node->as_valid_subplans = bms_del_members(node->as_valid_subplans, valid_asyncplans); - node->as_syncdone = bms_is_empty(node->as_valid_subplans); /* Save valid async subplans. */ node->as_valid_asyncplans = valid_asyncplans; - node->as_nasyncremain = bms_num_members(valid_asyncplans); } From be57f21650d36449ec34a67b2d9af71126a663b3 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Mon, 7 Jun 2021 09:32:06 +0530 Subject: [PATCH 418/671] Remove two_phase variable from CreateReplicationSlotCmd struct. Commit 19890a064e added the option to enable two_phase commits via pg_create_logical_replication_slot but didn't extend the support of same in replication protocol. However, by mistake, it added the two_phase variable in CreateReplicationSlotCmd which is required only when we extend the replication protocol. Reported-by: Jeff Davis Author: Ajin Cherian Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/64b9f783c6e125f18f88fbc0c0234e34e71d8639.camel@j-davis.com --- src/backend/replication/walsender.c | 2 +- src/include/nodes/replnodes.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index e94069c366a36..109c723f4e1e7 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -954,7 +954,7 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd) */ ReplicationSlotCreate(cmd->slotname, true, cmd->temporary ? RS_TEMPORARY : RS_EPHEMERAL, - cmd->two_phase); + false); } if (cmd->kind == REPLICATION_KIND_LOGICAL) diff --git a/src/include/nodes/replnodes.h b/src/include/nodes/replnodes.h index ebc43a0293deb..faa3a251f26d5 100644 --- a/src/include/nodes/replnodes.h +++ b/src/include/nodes/replnodes.h @@ -56,7 +56,6 @@ typedef struct CreateReplicationSlotCmd ReplicationKind kind; char *plugin; bool temporary; - bool two_phase; List *options; } CreateReplicationSlotCmd; From 68a6d8a87006ba727d9662ec84c7a3d9de402df0 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 7 Jun 2021 18:12:29 +0900 Subject: [PATCH 419/671] Fix portability issue in test indirect_toast When run on a server using default_toast_compression set to LZ4, this test would fail because of a consistency issue with the order of the tuples treated. LZ4 causes one tuple to be stored inline instead of getting externalized. As the goal of this test is to check after data stored externally, stick to pglz as the compression algorithm used, so as all data of this test is stored the way it should. Analyzed-by: Dilip Kumar Discussion: https://postgr.es/m/YLrDWxJgM8WWMoCg@paquier.xyz --- src/test/regress/expected/indirect_toast.out | 7 +++++++ src/test/regress/sql/indirect_toast.sql | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/test/regress/expected/indirect_toast.out b/src/test/regress/expected/indirect_toast.out index b05173c43bd7a..ab1fa5e707ce3 100644 --- a/src/test/regress/expected/indirect_toast.out +++ b/src/test/regress/expected/indirect_toast.out @@ -1,3 +1,9 @@ +-- +-- Tests for external toast datums +-- +-- Other compression algorithms may cause the compressed data to be stored +-- inline. pglz guarantees that the data is externalized, so stick to it. +SET default_toast_compression = 'pglz'; CREATE TABLE indtoasttest(descr text, cnt int DEFAULT 0, f1 text, f2 text); INSERT INTO indtoasttest(descr, f1, f2) VALUES('two-compressed', repeat('1234567890',1000), repeat('1234567890',1000)); INSERT INTO indtoasttest(descr, f1, f2) VALUES('two-toasted', repeat('1234567890',30000), repeat('1234567890',50000)); @@ -149,3 +155,4 @@ SELECT substring(indtoasttest::text, 1, 200) FROM indtoasttest; DROP TABLE indtoasttest; DROP FUNCTION update_using_indirect(); +RESET default_toast_compression; diff --git a/src/test/regress/sql/indirect_toast.sql b/src/test/regress/sql/indirect_toast.sql index efb1eb4e2fb69..9156a44b7d9b3 100644 --- a/src/test/regress/sql/indirect_toast.sql +++ b/src/test/regress/sql/indirect_toast.sql @@ -1,3 +1,11 @@ +-- +-- Tests for external toast datums +-- + +-- Other compression algorithms may cause the compressed data to be stored +-- inline. pglz guarantees that the data is externalized, so stick to it. +SET default_toast_compression = 'pglz'; + CREATE TABLE indtoasttest(descr text, cnt int DEFAULT 0, f1 text, f2 text); INSERT INTO indtoasttest(descr, f1, f2) VALUES('two-compressed', repeat('1234567890',1000), repeat('1234567890',1000)); @@ -59,3 +67,5 @@ SELECT substring(indtoasttest::text, 1, 200) FROM indtoasttest; DROP TABLE indtoasttest; DROP FUNCTION update_using_indirect(); + +RESET default_toast_compression; From 42f94f56bf9559f0a3cf5f3ffde50655834694ee Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 7 Jun 2021 14:15:25 -0400 Subject: [PATCH 420/671] Fix incautious handling of possibly-miscoded strings in client code. An incorrectly-encoded multibyte character near the end of a string could cause various processing loops to run past the string's terminating NUL, with results ranging from no detectable issue to a program crash, depending on what happens to be in the following memory. This isn't an issue in the server, because we take care to verify the encoding of strings before doing any interesting processing on them. However, that lack of care leaked into client-side code which shouldn't assume that anyone has validated the encoding of its input. Although this is certainly a bug worth fixing, the PG security team elected not to regard it as a security issue, primarily because any untrusted text should be sanitized by PQescapeLiteral or the like before being incorporated into a SQL or psql command. (If an app fails to do so, the same technique can be used to cause SQL injection, with probably much more dire consequences than a mere client-program crash.) Those functions were already made proof against this class of problem, cf CVE-2006-2313. To fix, invent PQmblenBounded() which is like PQmblen() except it won't return more than the number of bytes remaining in the string. In HEAD we can make this a new libpq function, as PQmblen() is. It seems imprudent to change libpq's API in stable branches though, so in the back branches define PQmblenBounded as a macro in the files that need it. (Note that just changing PQmblen's behavior would not be a good idea; notably, it would completely break the escaping functions' defense against this exact problem. So we just want a version for those callers that don't have any better way of handling this issue.) Per private report from houjingyi. Back-patch to all supported branches. --- src/bin/psql/common.c | 26 +++++++++++++------------- src/bin/psql/psqlscanslash.l | 2 +- src/bin/psql/stringutils.c | 6 +++--- src/bin/psql/tab-complete.c | 2 +- src/bin/scripts/common.c | 2 +- src/common/jsonapi.c | 6 +++--- src/common/wchar.c | 15 +++++++++++++++ src/fe_utils/print.c | 3 +++ src/fe_utils/string_utils.c | 9 +++------ src/include/mb/pg_wchar.h | 1 + src/interfaces/libpq/exports.txt | 1 + src/interfaces/libpq/fe-misc.c | 19 +++++++++++++++++-- src/interfaces/libpq/fe-print.c | 2 +- src/interfaces/libpq/fe-protocol3.c | 4 ++-- src/interfaces/libpq/libpq-fe.h | 3 +++ 15 files changed, 68 insertions(+), 33 deletions(-) diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index 7a95465111ad1..9a00499510929 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -1846,7 +1846,7 @@ skip_white_space(const char *query) while (*query) { - int mblen = PQmblen(query, pset.encoding); + int mblen = PQmblenBounded(query, pset.encoding); /* * Note: we assume the encoding is a superset of ASCII, so that for @@ -1883,7 +1883,7 @@ skip_white_space(const char *query) query++; break; } - query += PQmblen(query, pset.encoding); + query += PQmblenBounded(query, pset.encoding); } } else if (cnestlevel > 0) @@ -1918,7 +1918,7 @@ command_no_begin(const char *query) */ wordlen = 0; while (isalpha((unsigned char) query[wordlen])) - wordlen += PQmblen(&query[wordlen], pset.encoding); + wordlen += PQmblenBounded(&query[wordlen], pset.encoding); /* * Transaction control commands. These should include every keyword that @@ -1949,7 +1949,7 @@ command_no_begin(const char *query) wordlen = 0; while (isalpha((unsigned char) query[wordlen])) - wordlen += PQmblen(&query[wordlen], pset.encoding); + wordlen += PQmblenBounded(&query[wordlen], pset.encoding); if (wordlen == 11 && pg_strncasecmp(query, "transaction", 11) == 0) return true; @@ -1983,7 +1983,7 @@ command_no_begin(const char *query) wordlen = 0; while (isalpha((unsigned char) query[wordlen])) - wordlen += PQmblen(&query[wordlen], pset.encoding); + wordlen += PQmblenBounded(&query[wordlen], pset.encoding); if (wordlen == 8 && pg_strncasecmp(query, "database", 8) == 0) return true; @@ -1999,7 +1999,7 @@ command_no_begin(const char *query) wordlen = 0; while (isalpha((unsigned char) query[wordlen])) - wordlen += PQmblen(&query[wordlen], pset.encoding); + wordlen += PQmblenBounded(&query[wordlen], pset.encoding); } if (wordlen == 5 && pg_strncasecmp(query, "index", 5) == 0) @@ -2010,7 +2010,7 @@ command_no_begin(const char *query) wordlen = 0; while (isalpha((unsigned char) query[wordlen])) - wordlen += PQmblen(&query[wordlen], pset.encoding); + wordlen += PQmblenBounded(&query[wordlen], pset.encoding); if (wordlen == 12 && pg_strncasecmp(query, "concurrently", 12) == 0) return true; @@ -2027,7 +2027,7 @@ command_no_begin(const char *query) wordlen = 0; while (isalpha((unsigned char) query[wordlen])) - wordlen += PQmblen(&query[wordlen], pset.encoding); + wordlen += PQmblenBounded(&query[wordlen], pset.encoding); /* ALTER SYSTEM isn't allowed in xacts */ if (wordlen == 6 && pg_strncasecmp(query, "system", 6) == 0) @@ -2050,7 +2050,7 @@ command_no_begin(const char *query) wordlen = 0; while (isalpha((unsigned char) query[wordlen])) - wordlen += PQmblen(&query[wordlen], pset.encoding); + wordlen += PQmblenBounded(&query[wordlen], pset.encoding); if (wordlen == 8 && pg_strncasecmp(query, "database", 8) == 0) return true; @@ -2065,7 +2065,7 @@ command_no_begin(const char *query) query = skip_white_space(query); wordlen = 0; while (isalpha((unsigned char) query[wordlen])) - wordlen += PQmblen(&query[wordlen], pset.encoding); + wordlen += PQmblenBounded(&query[wordlen], pset.encoding); /* * REINDEX [ TABLE | INDEX ] CONCURRENTLY are not allowed in @@ -2084,7 +2084,7 @@ command_no_begin(const char *query) wordlen = 0; while (isalpha((unsigned char) query[wordlen])) - wordlen += PQmblen(&query[wordlen], pset.encoding); + wordlen += PQmblenBounded(&query[wordlen], pset.encoding); if (wordlen == 12 && pg_strncasecmp(query, "concurrently", 12) == 0) return true; @@ -2104,7 +2104,7 @@ command_no_begin(const char *query) wordlen = 0; while (isalpha((unsigned char) query[wordlen])) - wordlen += PQmblen(&query[wordlen], pset.encoding); + wordlen += PQmblenBounded(&query[wordlen], pset.encoding); if (wordlen == 3 && pg_strncasecmp(query, "all", 3) == 0) return true; @@ -2140,7 +2140,7 @@ is_select_command(const char *query) */ wordlen = 0; while (isalpha((unsigned char) query[wordlen])) - wordlen += PQmblen(&query[wordlen], pset.encoding); + wordlen += PQmblenBounded(&query[wordlen], pset.encoding); if (wordlen == 6 && pg_strncasecmp(query, "select", 6) == 0) return true; diff --git a/src/bin/psql/psqlscanslash.l b/src/bin/psql/psqlscanslash.l index 4bb18f132f4f4..51aa33e1611ef 100644 --- a/src/bin/psql/psqlscanslash.l +++ b/src/bin/psql/psqlscanslash.l @@ -753,7 +753,7 @@ dequote_downcase_identifier(char *str, bool downcase, int encoding) { if (downcase && !inquotes) *cp = pg_tolower((unsigned char) *cp); - cp += PQmblen(cp, encoding); + cp += PQmblenBounded(cp, encoding); } } } diff --git a/src/bin/psql/stringutils.c b/src/bin/psql/stringutils.c index 0acc53801cb4a..3a141cdc2b393 100644 --- a/src/bin/psql/stringutils.c +++ b/src/bin/psql/stringutils.c @@ -143,7 +143,7 @@ strtokx(const char *s, /* okay, we have a quoted token, now scan for the closer */ char thisquote = *p++; - for (; *p; p += PQmblen(p, encoding)) + for (; *p; p += PQmblenBounded(p, encoding)) { if (*p == escape && p[1] != '\0') p++; /* process escaped anything */ @@ -262,7 +262,7 @@ strip_quotes(char *source, char quote, char escape, int encoding) else if (c == escape && src[1] != '\0') src++; /* process escaped character */ - i = PQmblen(src, encoding); + i = PQmblenBounded(src, encoding); while (i--) *dst++ = *src++; } @@ -324,7 +324,7 @@ quote_if_needed(const char *source, const char *entails_quote, else if (strchr(entails_quote, c)) need_quotes = true; - i = PQmblen(src, encoding); + i = PQmblenBounded(src, encoding); while (i--) *dst++ = *src++; } diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 109b22acb6ba5..32c1bdfdca743 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -4397,7 +4397,7 @@ _complete_from_query(const char *simple_query, while (*pstr) { char_length++; - pstr += PQmblen(pstr, pset.encoding); + pstr += PQmblenBounded(pstr, pset.encoding); } /* Free any prior result */ diff --git a/src/bin/scripts/common.c b/src/bin/scripts/common.c index c86c19eae28b3..79cdc6cf33076 100644 --- a/src/bin/scripts/common.c +++ b/src/bin/scripts/common.c @@ -52,7 +52,7 @@ splitTableColumnsSpec(const char *spec, int encoding, cp++; } else - cp += PQmblen(cp, encoding); + cp += PQmblenBounded(cp, encoding); } *table = pnstrdup(spec, cp - spec); *columns = cp; diff --git a/src/common/jsonapi.c b/src/common/jsonapi.c index 1bf38d7b4295e..d376ab152d48d 100644 --- a/src/common/jsonapi.c +++ b/src/common/jsonapi.c @@ -740,7 +740,7 @@ json_lex_string(JsonLexContext *lex) ch = (ch * 16) + (*s - 'A') + 10; else { - lex->token_terminator = s + pg_encoding_mblen(lex->input_encoding, s); + lex->token_terminator = s + pg_encoding_mblen_bounded(lex->input_encoding, s); return JSON_UNICODE_ESCAPE_FORMAT; } } @@ -846,7 +846,7 @@ json_lex_string(JsonLexContext *lex) default: /* Not a valid string escape, so signal error. */ lex->token_start = s; - lex->token_terminator = s + pg_encoding_mblen(lex->input_encoding, s); + lex->token_terminator = s + pg_encoding_mblen_bounded(lex->input_encoding, s); return JSON_ESCAPING_INVALID; } } @@ -860,7 +860,7 @@ json_lex_string(JsonLexContext *lex) * shown it's not a performance win. */ lex->token_start = s; - lex->token_terminator = s + pg_encoding_mblen(lex->input_encoding, s); + lex->token_terminator = s + pg_encoding_mblen_bounded(lex->input_encoding, s); return JSON_ESCAPING_INVALID; } diff --git a/src/common/wchar.c b/src/common/wchar.c index 6e7d731e020fe..0636b8765ba35 100644 --- a/src/common/wchar.c +++ b/src/common/wchar.c @@ -1911,6 +1911,11 @@ const pg_wchar_tbl pg_wchar_table[] = { /* * Returns the byte length of a multibyte character. + * + * Caution: when dealing with text that is not certainly valid in the + * specified encoding, the result may exceed the actual remaining + * string length. Callers that are not prepared to deal with that + * should use pg_encoding_mblen_bounded() instead. */ int pg_encoding_mblen(int encoding, const char *mbstr) @@ -1920,6 +1925,16 @@ pg_encoding_mblen(int encoding, const char *mbstr) pg_wchar_table[PG_SQL_ASCII].mblen((const unsigned char *) mbstr)); } +/* + * Returns the byte length of a multibyte character; but not more than + * the distance to end of string. + */ +int +pg_encoding_mblen_bounded(int encoding, const char *mbstr) +{ + return strnlen(mbstr, pg_encoding_mblen(encoding, mbstr)); +} + /* * Returns the display length of a multibyte character. */ diff --git a/src/fe_utils/print.c b/src/fe_utils/print.c index 273b1bfe4a49f..d48fcc4a0328d 100644 --- a/src/fe_utils/print.c +++ b/src/fe_utils/print.c @@ -3636,6 +3636,9 @@ strlen_max_width(unsigned char *str, int *target_width, int encoding) curr_width += char_width; str += PQmblen((char *) str, encoding); + + if (str > end) /* Don't overrun invalid string */ + str = end; } *target_width = curr_width; diff --git a/src/fe_utils/string_utils.c b/src/fe_utils/string_utils.c index 5b206c7481d79..3efee4e7eed7f 100644 --- a/src/fe_utils/string_utils.c +++ b/src/fe_utils/string_utils.c @@ -1072,12 +1072,9 @@ patternToSQLRegex(int encoding, PQExpBuffer dbnamebuf, PQExpBuffer schemabuf, appendPQExpBufferChar(curbuf, '\\'); else if (ch == '[' && cp[1] == ']') appendPQExpBufferChar(curbuf, '\\'); - i = PQmblen(cp, encoding); - while (i-- && *cp) - { - appendPQExpBufferChar(curbuf, *cp); - cp++; - } + i = PQmblenBounded(cp, encoding); + while (i--) + appendPQExpBufferChar(curbuf, *cp++); } } appendPQExpBufferStr(curbuf, ")$"); diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h index 0f31e683189d7..d93ccac263338 100644 --- a/src/include/mb/pg_wchar.h +++ b/src/include/mb/pg_wchar.h @@ -574,6 +574,7 @@ extern int pg_valid_server_encoding_id(int encoding); * earlier in this file are also available from libpgcommon. */ extern int pg_encoding_mblen(int encoding, const char *mbstr); +extern int pg_encoding_mblen_bounded(int encoding, const char *mbstr); extern int pg_encoding_dsplen(int encoding, const char *mbstr); extern int pg_encoding_verifymbchar(int encoding, const char *mbstr, int len); extern int pg_encoding_verifymbstr(int encoding, const char *mbstr, int len); diff --git a/src/interfaces/libpq/exports.txt b/src/interfaces/libpq/exports.txt index a00701f2c5fe6..9ef99f6de127b 100644 --- a/src/interfaces/libpq/exports.txt +++ b/src/interfaces/libpq/exports.txt @@ -184,3 +184,4 @@ PQexitPipelineMode 181 PQpipelineSync 182 PQpipelineStatus 183 PQtraceSetFlags 184 +PQmblenBounded 185 diff --git a/src/interfaces/libpq/fe-misc.c b/src/interfaces/libpq/fe-misc.c index b347d7f847937..9a2a97029340f 100644 --- a/src/interfaces/libpq/fe-misc.c +++ b/src/interfaces/libpq/fe-misc.c @@ -1180,8 +1180,13 @@ pqSocketPoll(int sock, int forRead, int forWrite, time_t end_time) */ /* - * returns the byte length of the character beginning at s, using the + * Returns the byte length of the character beginning at s, using the * specified encoding. + * + * Caution: when dealing with text that is not certainly valid in the + * specified encoding, the result may exceed the actual remaining + * string length. Callers that are not prepared to deal with that + * should use PQmblenBounded() instead. */ int PQmblen(const char *s, int encoding) @@ -1190,7 +1195,17 @@ PQmblen(const char *s, int encoding) } /* - * returns the display length of the character beginning at s, using the + * Returns the byte length of the character beginning at s, using the + * specified encoding; but not more than the distance to end of string. + */ +int +PQmblenBounded(const char *s, int encoding) +{ + return strnlen(s, pg_encoding_mblen(encoding, s)); +} + +/* + * Returns the display length of the character beginning at s, using the * specified encoding. */ int diff --git a/src/interfaces/libpq/fe-print.c b/src/interfaces/libpq/fe-print.c index 94219b1825bcb..fc7d84844e104 100644 --- a/src/interfaces/libpq/fe-print.c +++ b/src/interfaces/libpq/fe-print.c @@ -365,7 +365,7 @@ do_field(const PQprintOpt *po, const PGresult *res, /* Detect whether field contains non-numeric data */ char ch = '0'; - for (p = pval; *p; p += PQmblen(p, res->client_encoding)) + for (p = pval; *p; p += PQmblenBounded(p, res->client_encoding)) { ch = *p; if (!((ch >= '0' && ch <= '9') || diff --git a/src/interfaces/libpq/fe-protocol3.c b/src/interfaces/libpq/fe-protocol3.c index b45fb7e70593a..2e8330534873a 100644 --- a/src/interfaces/libpq/fe-protocol3.c +++ b/src/interfaces/libpq/fe-protocol3.c @@ -1296,7 +1296,7 @@ reportErrorPosition(PQExpBuffer msg, const char *query, int loc, int encoding) if (w <= 0) w = 1; scroffset += w; - qoffset += pg_encoding_mblen(encoding, &wquery[qoffset]); + qoffset += PQmblenBounded(&wquery[qoffset], encoding); } else { @@ -1364,7 +1364,7 @@ reportErrorPosition(PQExpBuffer msg, const char *query, int loc, int encoding) * width. */ scroffset = 0; - for (; i < msg->len; i += pg_encoding_mblen(encoding, &msg->data[i])) + for (; i < msg->len; i += PQmblenBounded(&msg->data[i], encoding)) { int w = pg_encoding_dsplen(encoding, &msg->data[i]); diff --git a/src/interfaces/libpq/libpq-fe.h b/src/interfaces/libpq/libpq-fe.h index 227adde5a5e42..845b4c04c9c2f 100644 --- a/src/interfaces/libpq/libpq-fe.h +++ b/src/interfaces/libpq/libpq-fe.h @@ -625,6 +625,9 @@ extern int PQlibVersion(void); /* Determine length of multibyte encoded char at *s */ extern int PQmblen(const char *s, int encoding); +/* Same, but not more than the distance to the end of string s */ +extern int PQmblenBounded(const char *s, int encoding); + /* Determine display length of multibyte encoded char at *s */ extern int PQdsplen(const char *s, int encoding); From d16ebfbff74b30c83a4669a1df318cacfa7e52ca Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 7 Jun 2021 14:52:42 -0400 Subject: [PATCH 421/671] Stabilize contrib/seg regression test. If autovacuum comes along just after we fill table test_seg with some data, it will update the stats to the point where we prefer a plain indexscan over a bitmap scan, breaking the expected output (as well as the point of the test case). To fix, just force a bitmap scan to be chosen here. This has evidently been wrong since commit de1d042f5. It's not clear why we just recently saw any buildfarm failures due to it; but prairiedog has failed twice on this test in the past week. Hence, backpatch to v11 where this test case came in. --- contrib/seg/expected/seg.out | 2 ++ contrib/seg/sql/seg.sql | 2 ++ 2 files changed, 4 insertions(+) diff --git a/contrib/seg/expected/seg.out b/contrib/seg/expected/seg.out index 80b0bca15687e..e617dd7e29965 100644 --- a/contrib/seg/expected/seg.out +++ b/contrib/seg/expected/seg.out @@ -930,6 +930,7 @@ SELECT '1'::seg <@ '-1 .. 1'::seg AS bool; CREATE TABLE test_seg (s seg); \copy test_seg from 'data/test_seg.data' CREATE INDEX test_seg_ix ON test_seg USING gist (s); +SET enable_indexscan = false; EXPLAIN (COSTS OFF) SELECT count(*) FROM test_seg WHERE s @> '11..11.3'; QUERY PLAN @@ -947,6 +948,7 @@ SELECT count(*) FROM test_seg WHERE s @> '11..11.3'; 143 (1 row) +RESET enable_indexscan; SET enable_bitmapscan = false; EXPLAIN (COSTS OFF) SELECT count(*) FROM test_seg WHERE s @> '11..11.3'; diff --git a/contrib/seg/sql/seg.sql b/contrib/seg/sql/seg.sql index 1d7bad7c37640..6fe33e90e4e5a 100644 --- a/contrib/seg/sql/seg.sql +++ b/contrib/seg/sql/seg.sql @@ -217,9 +217,11 @@ CREATE TABLE test_seg (s seg); CREATE INDEX test_seg_ix ON test_seg USING gist (s); +SET enable_indexscan = false; EXPLAIN (COSTS OFF) SELECT count(*) FROM test_seg WHERE s @> '11..11.3'; SELECT count(*) FROM test_seg WHERE s @> '11..11.3'; +RESET enable_indexscan; SET enable_bitmapscan = false; EXPLAIN (COSTS OFF) From 3bb309be7533e153d86390642e8a2d054bbe82c8 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 7 Jun 2021 21:32:53 +0200 Subject: [PATCH 422/671] Add _outTidRangePath() We have outNode() coverage for all path nodes, but this one was missed when it was added. --- src/backend/nodes/outfuncs.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 04696f613ccaf..e32b92e2994d2 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -1859,6 +1859,16 @@ _outTidPath(StringInfo str, const TidPath *node) WRITE_NODE_FIELD(tidquals); } +static void +_outTidRangePath(StringInfo str, const TidRangePath *node) +{ + WRITE_NODE_TYPE("TIDRANGEPATH"); + + _outPathInfo(str, (const Path *) node); + + WRITE_NODE_FIELD(tidrangequals); +} + static void _outSubqueryScanPath(StringInfo str, const SubqueryScanPath *node) { @@ -4166,6 +4176,9 @@ outNode(StringInfo str, const void *obj) case T_TidPath: _outTidPath(str, obj); break; + case T_TidRangePath: + _outTidRangePath(str, obj); + break; case T_SubqueryScanPath: _outSubqueryScanPath(str, obj); break; From 4e47b02834827fa700627290fae02f89a450368c Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 8 Jun 2021 08:53:12 +0900 Subject: [PATCH 423/671] Reorder superuser check in pg_log_backend_memory_contexts() The use of this function is limited to superusers and the code includes a hardcoded check for that. However, the code would look for the PGPROC entry to signal for the memory dump before checking if the user is a superuser or not, which does not make sense if we know that an error will be returned. Note that the code would let one know if a process was a PostgreSQL process or not even for non-authorized users, which is not the case now, but this avoids taking ProcArrayLock that will most likely finish by being unnecessary. Thanks to Julien Rouhaud and Tom Lane for the discussion. Discussion: https://postgr.es/m/YLxw1uVGIAP5uMPl@paquier.xyz --- src/backend/utils/adt/mcxtfuncs.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/backend/utils/adt/mcxtfuncs.c b/src/backend/utils/adt/mcxtfuncs.c index 2984768d19948..0d52613bc32ae 100644 --- a/src/backend/utils/adt/mcxtfuncs.c +++ b/src/backend/utils/adt/mcxtfuncs.c @@ -175,7 +175,15 @@ Datum pg_log_backend_memory_contexts(PG_FUNCTION_ARGS) { int pid = PG_GETARG_INT32(0); - PGPROC *proc = BackendPidGetProc(pid); + PGPROC *proc; + + /* Only allow superusers to log memory contexts. */ + if (!superuser()) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("must be a superuser to log memory contexts"))); + + proc = BackendPidGetProc(pid); /* * BackendPidGetProc returns NULL if the pid isn't valid; but by the time @@ -197,12 +205,6 @@ pg_log_backend_memory_contexts(PG_FUNCTION_ARGS) PG_RETURN_BOOL(false); } - /* Only allow superusers to log memory contexts. */ - if (!superuser()) - ereport(ERROR, - (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("must be a superuser to log memory contexts"))); - if (SendProcSignal(pid, PROCSIG_LOG_MEMORY_CONTEXT, proc->backendId) < 0) { /* Again, just a warning to allow loops */ From eab81953682d5087295afb911c93f36cb1533bd9 Mon Sep 17 00:00:00 2001 From: Etsuro Fujita Date: Tue, 8 Jun 2021 13:45:00 +0900 Subject: [PATCH 424/671] Doc: Further update documentation for asynchronous execution. Add a note about asynchronous execution by postgres_fdw when applied to Append nodes that contain synchronous subplan(s) as well. Follow-up for commit 27e1f1456. Andrey Lepikhov and Etsuro Fujita Discussion: https://postgr.es/m/58fa2aa5-07f5-80b5-59a1-fec8a349fee7%40postgrespro.ru --- doc/src/sgml/postgres-fdw.sgml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/doc/src/sgml/postgres-fdw.sgml b/doc/src/sgml/postgres-fdw.sgml index 65171841c9408..5aced083e9eb0 100644 --- a/doc/src/sgml/postgres-fdw.sgml +++ b/doc/src/sgml/postgres-fdw.sgml @@ -411,6 +411,19 @@ OPTIONS (ADD password_required 'false'); In such a case, it may be more performant to disable this option to eliminate the overhead associated with running queries asynchronously. + + + Asynchronous execution is applied even when an + Append node contains subplan(s) executed + synchronously as well as subplan(s) executed asynchronously. + In such a case, if the asynchronous subplans are ones processed using + postgres_fdw, tuples from the asynchronous + subplans are not returned until after at least one synchronous subplan + returns all tuples, as that subplan is executed while the asynchronous + subplans are waiting for the results of asynchronous queries sent to + foreign servers. + This behavior might change in a future release. + From 37e1cce4ddf0be362e3093cee55493aee41bc423 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 8 Jun 2021 15:37:54 +0200 Subject: [PATCH 425/671] libpq: Fix SNI host handling Fix handling of NULL host name (possibly by using hostaddr). It previously crashed. Also, we should look at connhost, not pghost, to handle multi-host specifications. Also remove an unnecessary SSL_CTX_free(). Reported-by: Jacob Champion Reviewed-by: Michael Paquier Discussion: https://www.postgresql.org/message-id/504c276ab6eee000bb23d571ea9b0ced4250774e.camel@vmware.com --- src/interfaces/libpq/fe-secure-openssl.c | 26 ++++++++++++++---------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/interfaces/libpq/fe-secure-openssl.c b/src/interfaces/libpq/fe-secure-openssl.c index 00d43f3efff1e..67feaedc4e07b 100644 --- a/src/interfaces/libpq/fe-secure-openssl.c +++ b/src/interfaces/libpq/fe-secure-openssl.c @@ -1087,20 +1087,24 @@ initialize_SSL(PGconn *conn) * Per RFC 6066, do not set it if the host is a literal IP address (IPv4 * or IPv6). */ - if (conn->sslsni && conn->sslsni[0] && - !(strspn(conn->pghost, "0123456789.") == strlen(conn->pghost) || - strchr(conn->pghost, ':'))) + if (conn->sslsni && conn->sslsni[0]) { - if (SSL_set_tlsext_host_name(conn->ssl, conn->pghost) != 1) + const char *host = conn->connhost[conn->whichhost].host; + + if (host && host[0] && + !(strspn(host, "0123456789.") == strlen(host) || + strchr(host, ':'))) { - char *err = SSLerrmessage(ERR_get_error()); + if (SSL_set_tlsext_host_name(conn->ssl, host) != 1) + { + char *err = SSLerrmessage(ERR_get_error()); - appendPQExpBuffer(&conn->errorMessage, - libpq_gettext("could not set SSL Server Name Indication (SNI): %s\n"), - err); - SSLerrfree(err); - SSL_CTX_free(SSL_context); - return -1; + appendPQExpBuffer(&conn->errorMessage, + libpq_gettext("could not set SSL Server Name Indication (SNI): %s\n"), + err); + SSLerrfree(err); + return -1; + } } } From bfeede9fa464ab707eb5ac5704742bf78bd7ac9e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 8 Jun 2021 11:59:34 -0400 Subject: [PATCH 426/671] Don't crash on empty statements in SQL-standard function bodies. gram.y should discard NULL pointers (empty statements) when assembling a routine_body_stmt_list, as it does for other sorts of statement lists. Julien Rouhaud and Tom Lane, per report from Noah Misch. Discussion: https://postgr.es/m/20210606044418.GA297923@rfd.leadboat.com --- src/backend/parser/gram.y | 6 +++++- src/test/regress/expected/create_function_3.out | 2 +- src/test/regress/sql/create_function_3.sql | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 9ee90e3f13a40..52a254928f879 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -7990,7 +7990,11 @@ opt_routine_body: routine_body_stmt_list: routine_body_stmt_list routine_body_stmt ';' { - $$ = lappend($1, $2); + /* As in stmtmulti, discard empty statements */ + if ($2 != NULL) + $$ = lappend($1, $2); + else + $$ = $1; } | /*EMPTY*/ { diff --git a/src/test/regress/expected/create_function_3.out b/src/test/regress/expected/create_function_3.out index 5b6bc5eddbe75..5955859bb57b4 100644 --- a/src/test/regress/expected/create_function_3.out +++ b/src/test/regress/expected/create_function_3.out @@ -267,7 +267,7 @@ CREATE FUNCTION functest_S_3() RETURNS boolean RETURN false; CREATE FUNCTION functest_S_3a() RETURNS boolean BEGIN ATOMIC - RETURN false; + ;;RETURN false;; END; CREATE FUNCTION functest_S_10(a text, b date) RETURNS boolean LANGUAGE SQL diff --git a/src/test/regress/sql/create_function_3.sql b/src/test/regress/sql/create_function_3.sql index 4b778999ed7fc..6e8b838ff2d48 100644 --- a/src/test/regress/sql/create_function_3.sql +++ b/src/test/regress/sql/create_function_3.sql @@ -165,7 +165,7 @@ CREATE FUNCTION functest_S_3() RETURNS boolean RETURN false; CREATE FUNCTION functest_S_3a() RETURNS boolean BEGIN ATOMIC - RETURN false; + ;;RETURN false;; END; CREATE FUNCTION functest_S_10(a text, b date) RETURNS boolean From d1f0aa7696917213485c03b076b573497a535076 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Tue, 8 Jun 2021 19:24:27 +0200 Subject: [PATCH 427/671] Fix pg_visibility regression failure with CLOBBER_CACHE_ALWAYS Commit 8e03eb92e9 reverted a bit too much code, reintroducing one of the issues fixed by 39b66a91bd - a page might have been left partially empty after relcache invalidation. Reported-By: Tom Lane Author: Masahiko Sawada Discussion: https://postgr.es/m/822752.1623032114@sss.pgh.pa.us Discussion: https://postgr.es/m/CAD21AoA%3D%3Df2VSw3c-Cp_y%3DWLKHMKc1D6s7g3YWsCOvgaYPpJcg%40mail.gmail.com --- src/backend/access/heap/hio.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/backend/access/heap/hio.c b/src/backend/access/heap/hio.c index c47c7522ca64e..ffc89685bff6f 100644 --- a/src/backend/access/heap/hio.c +++ b/src/backend/access/heap/hio.c @@ -407,19 +407,19 @@ RelationGetBufferForTuple(Relation relation, Size len, * target. */ targetBlock = GetPageWithFreeSpace(relation, targetFreeSpace); + } - /* - * If the FSM knows nothing of the rel, try the last page before we - * give up and extend. This avoids one-tuple-per-page syndrome during - * bootstrapping or in a recently-started system. - */ - if (targetBlock == InvalidBlockNumber) - { - BlockNumber nblocks = RelationGetNumberOfBlocks(relation); + /* + * If the FSM knows nothing of the rel, try the last page before we + * give up and extend. This avoids one-tuple-per-page syndrome during + * bootstrapping or in a recently-started system. + */ + if (targetBlock == InvalidBlockNumber) + { + BlockNumber nblocks = RelationGetNumberOfBlocks(relation); - if (nblocks > 0) - targetBlock = nblocks - 1; - } + if (nblocks > 0) + targetBlock = nblocks - 1; } loop: From cb92703384e2bb3fa0a690e5dbb95ad333c2b44c Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Tue, 8 Jun 2021 20:22:18 +0200 Subject: [PATCH 428/671] Adjust batch size in postgres_fdw to not use too many parameters The FE/BE protocol identifies parameters with an Int16 index, which limits the maximum number of parameters per query to 65535. With batching added to postges_fdw this limit is much easier to hit, as the whole batch is essentially a single query, making this error much easier to hit. The failures are a bit unpredictable, because it also depends on the number of columns in the query. So instead of just failing, this patch tweaks the batch_size to not exceed the maximum number of parameters. Reported-by: Hou Zhijie Reviewed-by: Bharath Rupireddy Discussion: https://postgr.es/m/OS0PR01MB571603973C0AC2874AD6BF2594299%40OS0PR01MB5716.jpnprd01.prod.outlook.com --- .../postgres_fdw/expected/postgres_fdw.out | 11 ++++++++++ contrib/postgres_fdw/postgres_fdw.c | 11 ++++++++-- contrib/postgres_fdw/sql/postgres_fdw.sql | 7 +++++++ doc/src/sgml/postgres-fdw.sgml | 11 ++++++++++ src/interfaces/libpq/fe-exec.c | 21 +++++++++++-------- src/interfaces/libpq/libpq-fe.h | 2 ++ 6 files changed, 52 insertions(+), 11 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 7b7c0db16cffc..1fb26639fcb91 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -9680,6 +9680,17 @@ SELECT COUNT(*) FROM ftable; 34 (1 row) +TRUNCATE batch_table; +DROP FOREIGN TABLE ftable; +-- try if large batches exceed max number of bind parameters +CREATE FOREIGN TABLE ftable ( x int ) SERVER loopback OPTIONS ( table_name 'batch_table', batch_size '100000' ); +INSERT INTO ftable SELECT * FROM generate_series(1, 70000) i; +SELECT COUNT(*) FROM ftable; + count +------- + 70000 +(1 row) + TRUNCATE batch_table; DROP FOREIGN TABLE ftable; -- Disable batch insert diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index 0843ed9dba2a2..fafbab6b024d4 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -2030,7 +2030,7 @@ postgresGetForeignModifyBatchSize(ResultRelInfo *resultRelInfo) Assert(fmstate == NULL || fmstate->aux_fmstate == NULL); /* - * In EXPLAIN without ANALYZE, ri_fdwstate is NULL, so we have to lookup + * In EXPLAIN without ANALYZE, ri_FdwState is NULL, so we have to lookup * the option directly in server/table options. Otherwise just use the * value we determined earlier. */ @@ -2045,7 +2045,14 @@ postgresGetForeignModifyBatchSize(ResultRelInfo *resultRelInfo) resultRelInfo->ri_TrigDesc->trig_insert_after_row)) return 1; - /* Otherwise use the batch size specified for server/table. */ + /* + * Otherwise use the batch size specified for server/table. The number of + * parameters in a batch is limited to 65535 (uint16), so make sure we + * don't exceed this limit by using the maximum batch_size possible. + */ + if (fmstate && fmstate->p_nums > 0) + batch_size = Min(batch_size, PQ_QUERY_PARAM_MAX_LIMIT / fmstate->p_nums); + return batch_size; } diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 191efbf7c248e..8cb2148f1f6aa 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -3026,6 +3026,13 @@ SELECT COUNT(*) FROM ftable; TRUNCATE batch_table; DROP FOREIGN TABLE ftable; +-- try if large batches exceed max number of bind parameters +CREATE FOREIGN TABLE ftable ( x int ) SERVER loopback OPTIONS ( table_name 'batch_table', batch_size '100000' ); +INSERT INTO ftable SELECT * FROM generate_series(1, 70000) i; +SELECT COUNT(*) FROM ftable; +TRUNCATE batch_table; +DROP FOREIGN TABLE ftable; + -- Disable batch insert CREATE FOREIGN TABLE ftable ( x int ) SERVER loopback OPTIONS ( table_name 'batch_table', batch_size '1' ); EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable VALUES (1), (2); diff --git a/doc/src/sgml/postgres-fdw.sgml b/doc/src/sgml/postgres-fdw.sgml index 5aced083e9eb0..d96c3d0f0cd3b 100644 --- a/doc/src/sgml/postgres-fdw.sgml +++ b/doc/src/sgml/postgres-fdw.sgml @@ -372,6 +372,17 @@ OPTIONS (ADD password_required 'false'); overrides an option specified for the server. The default is 1. + + + Note the actual number of rows postgres_fdw inserts at + once depends on the number of columns and the provided + batch_size value. The batch is executed as a single + query, and the libpq protocol (which postgres_fdw + uses to connect to a remote server) limits the number of parameters in a + single query to 65535. When the number of columns * batch_size + exceeds the limit, the batch_size will be adjusted to + avoid an error. + diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 03592bdce9fc9..832d61c544f38 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -1403,10 +1403,11 @@ PQsendQueryParams(PGconn *conn, libpq_gettext("command string is a null pointer\n")); return 0; } - if (nParams < 0 || nParams > 65535) + if (nParams < 0 || nParams > PQ_QUERY_PARAM_MAX_LIMIT) { - appendPQExpBufferStr(&conn->errorMessage, - libpq_gettext("number of parameters must be between 0 and 65535\n")); + appendPQExpBuffer(&conn->errorMessage, + libpq_gettext("number of parameters must be between 0 and %d\n"), + PQ_QUERY_PARAM_MAX_LIMIT); return 0; } @@ -1451,10 +1452,11 @@ PQsendPrepare(PGconn *conn, libpq_gettext("command string is a null pointer\n")); return 0; } - if (nParams < 0 || nParams > 65535) + if (nParams < 0 || nParams > PQ_QUERY_PARAM_MAX_LIMIT) { - appendPQExpBufferStr(&conn->errorMessage, - libpq_gettext("number of parameters must be between 0 and 65535\n")); + appendPQExpBuffer(&conn->errorMessage, + libpq_gettext("number of parameters must be between 0 and %d\n"), + PQ_QUERY_PARAM_MAX_LIMIT); return 0; } @@ -1548,10 +1550,11 @@ PQsendQueryPrepared(PGconn *conn, libpq_gettext("statement name is a null pointer\n")); return 0; } - if (nParams < 0 || nParams > 65535) + if (nParams < 0 || nParams > PQ_QUERY_PARAM_MAX_LIMIT) { - appendPQExpBufferStr(&conn->errorMessage, - libpq_gettext("number of parameters must be between 0 and 65535\n")); + appendPQExpBuffer(&conn->errorMessage, + libpq_gettext("number of parameters must be between 0 and %d\n"), + PQ_QUERY_PARAM_MAX_LIMIT); return 0; } diff --git a/src/interfaces/libpq/libpq-fe.h b/src/interfaces/libpq/libpq-fe.h index 845b4c04c9c2f..ca733a2004835 100644 --- a/src/interfaces/libpq/libpq-fe.h +++ b/src/interfaces/libpq/libpq-fe.h @@ -429,6 +429,8 @@ extern PGresult *PQexecPrepared(PGconn *conn, int resultFormat); /* Interface for multiple-result or asynchronous queries */ +#define PQ_QUERY_PARAM_MAX_LIMIT 65535 + extern int PQsendQuery(PGconn *conn, const char *query); extern int PQsendQueryParams(PGconn *conn, const char *command, From 444302ed56273e4c4006a9be319e60fa12a90346 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 8 Jun 2021 16:47:14 -0400 Subject: [PATCH 429/671] doc: update release note item about the v2 wire protocol Protocol v2 was last used in PG 7.3, not 7.2. Reported-by: Tatsuo Ishii Discussion: https://postgr.es/m/20210608.091329.906837606658882674.t-ishii@sraoss.co.jp --- doc/src/sgml/release-14.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 08cb0676805e6..a2ad120cef415 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -213,7 +213,7 @@ Author: Heikki Linnakangas - This was last used as the default in Postgres 7.2 (year 2002). + This was last used as the default in Postgres 7.3 (year 2002). From ba2c6d6cec000f0aeaeda4d56a23a335f6164860 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 8 Jun 2021 17:50:15 -0400 Subject: [PATCH 430/671] Avoid misbehavior when persisting a non-stable cursor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PersistHoldablePortal has long assumed that it should store the entire output of the query-to-be-persisted, which requires rewinding and re-reading the output. This is problematic if the query is not stable: we might get different row contents, or even a different number of rows, which'd confuse the cursor state mightily. In the case where the cursor is NO SCROLL, this is very easy to solve: just store the remaining query output, without any rewinding, and tweak the portal's cursor state to match. Aside from removing the semantic problem, this could be significantly more efficient than storing the whole output. If the cursor is scrollable, there's not much we can do, but it was already the case that scrolling a volatile query's result was pretty unsafe. We can just document more clearly that getting correct results from that is not guaranteed. There are already prohibitions in place on using SCROLL with FOR UPDATE/SHARE, which is one way for a SELECT query to have non-stable results. We could imagine prohibiting SCROLL when the query contains volatile functions, but that would be expensive to enforce. Moreover, it could break applications that work just fine, if they have functions that are in fact stable but the user neglected to mark them so. So settle for documenting the hazard. While this problem has existed in some guise for a long time, it got a lot worse in v11, which introduced the possibility of persisting plpgsql cursors (perhaps implicit ones) even when they violate the rules for what can be marked WITH HOLD. Hence, I've chosen to back-patch to v11 but not further. Per bug #17050 from Алексей Булгаков. Discussion: https://postgr.es/m/17050-f77aa827dc85247c@postgresql.org --- doc/src/sgml/plpgsql.sgml | 9 ++++ doc/src/sgml/ref/declare.sgml | 8 +-- src/backend/commands/portalcmds.c | 19 +++++-- .../src/expected/plpgsql_transaction.out | 51 +++++++++++++++++++ .../plpgsql/src/sql/plpgsql_transaction.sql | 41 +++++++++++++++ 5 files changed, 122 insertions(+), 6 deletions(-) diff --git a/doc/src/sgml/plpgsql.sgml b/doc/src/sgml/plpgsql.sgml index 52f60c827cb1b..c97344ff927b8 100644 --- a/doc/src/sgml/plpgsql.sgml +++ b/doc/src/sgml/plpgsql.sgml @@ -3142,6 +3142,15 @@ DECLARE is said to be unbound since it is not bound to any particular query. + + + The SCROLL option cannot be used when the cursor's + query uses FOR UPDATE/SHARE. Also, it is + best to use NO SCROLL with a query that involves + volatile functions. The implementation of SCROLL + assumes that re-reading the query's output will give consistent + results, which a volatile function might not do. + diff --git a/doc/src/sgml/ref/declare.sgml b/doc/src/sgml/ref/declare.sgml index aa3d1d1fa1624..bbbd335bd0bf4 100644 --- a/doc/src/sgml/ref/declare.sgml +++ b/doc/src/sgml/ref/declare.sgml @@ -239,12 +239,14 @@ DECLARE name [ BINARY ] [ ASENSITIV - Scrollable and WITH HOLD cursors may give unexpected + Scrollable cursors may give unexpected results if they invoke any volatile functions (see ). When a previously fetched row is re-fetched, the functions might be re-executed, perhaps leading to - results different from the first time. One workaround for such cases - is to declare the cursor WITH HOLD and commit the + results different from the first time. It's best to + specify NO SCROLL for a query involving volatile + functions. If that is not practical, one workaround + is to declare the cursor SCROLL WITH HOLD and commit the transaction before reading any rows from it. This will force the entire output of the cursor to be materialized in temporary storage, so that volatile functions are executed exactly once for each row. diff --git a/src/backend/commands/portalcmds.c b/src/backend/commands/portalcmds.c index 6f2397bd360e6..d34cc39fdea17 100644 --- a/src/backend/commands/portalcmds.c +++ b/src/backend/commands/portalcmds.c @@ -374,10 +374,23 @@ PersistHoldablePortal(Portal portal) PushActiveSnapshot(queryDesc->snapshot); /* - * Rewind the executor: we need to store the entire result set in the - * tuplestore, so that subsequent backward FETCHs can be processed. + * If the portal is marked scrollable, we need to store the entire + * result set in the tuplestore, so that subsequent backward FETCHs + * can be processed. Otherwise, store only the not-yet-fetched rows. + * (The latter is not only more efficient, but avoids semantic + * problems if the query's output isn't stable.) */ - ExecutorRewind(queryDesc); + if (portal->cursorOptions & CURSOR_OPT_SCROLL) + { + ExecutorRewind(queryDesc); + } + else + { + /* We must reset the cursor state as though at start of query */ + portal->atStart = true; + portal->atEnd = false; + portal->portalPos = 0; + } /* * Change the destination to output to the tuplestore. Note we tell diff --git a/src/pl/plpgsql/src/expected/plpgsql_transaction.out b/src/pl/plpgsql/src/expected/plpgsql_transaction.out index 8fceb88c9bb14..76cbdca0c56aa 100644 --- a/src/pl/plpgsql/src/expected/plpgsql_transaction.out +++ b/src/pl/plpgsql/src/expected/plpgsql_transaction.out @@ -335,6 +335,57 @@ SELECT * FROM pg_cursors; ------+-----------+-------------+-----------+---------------+--------------- (0 rows) +-- interaction of FOR UPDATE cursor with subsequent updates (bug #17050) +TRUNCATE test1; +INSERT INTO test1 VALUES (1,'one'), (2,'two'), (3,'three'); +DO LANGUAGE plpgsql $$ +DECLARE + l_cur CURSOR FOR SELECT a FROM test1 ORDER BY 1 FOR UPDATE; +BEGIN + FOR r IN l_cur LOOP + UPDATE test1 SET b = b || ' ' || b WHERE a = r.a; + COMMIT; + END LOOP; +END; +$$; +SELECT * FROM test1; + a | b +---+------------- + 1 | one one + 2 | two two + 3 | three three +(3 rows) + +SELECT * FROM pg_cursors; + name | statement | is_holdable | is_binary | is_scrollable | creation_time +------+-----------+-------------+-----------+---------------+--------------- +(0 rows) + +-- like bug #17050, but with implicit cursor +TRUNCATE test1; +INSERT INTO test1 VALUES (1,'one'), (2,'two'), (3,'three'); +DO LANGUAGE plpgsql $$ +DECLARE r RECORD; +BEGIN + FOR r IN SELECT a FROM test1 FOR UPDATE LOOP + UPDATE test1 SET b = b || ' ' || b WHERE a = r.a; + COMMIT; + END LOOP; +END; +$$; +SELECT * FROM test1; + a | b +---+------------- + 1 | one one + 2 | two two + 3 | three three +(3 rows) + +SELECT * FROM pg_cursors; + name | statement | is_holdable | is_binary | is_scrollable | creation_time +------+-----------+-------------+-----------+---------------+--------------- +(0 rows) + -- commit inside block with exception handler TRUNCATE test1; DO LANGUAGE plpgsql $$ diff --git a/src/pl/plpgsql/src/sql/plpgsql_transaction.sql b/src/pl/plpgsql/src/sql/plpgsql_transaction.sql index 94fd406b7a346..cc26788b9ae7c 100644 --- a/src/pl/plpgsql/src/sql/plpgsql_transaction.sql +++ b/src/pl/plpgsql/src/sql/plpgsql_transaction.sql @@ -273,6 +273,47 @@ SELECT * FROM test2; SELECT * FROM pg_cursors; +-- interaction of FOR UPDATE cursor with subsequent updates (bug #17050) +TRUNCATE test1; + +INSERT INTO test1 VALUES (1,'one'), (2,'two'), (3,'three'); + +DO LANGUAGE plpgsql $$ +DECLARE + l_cur CURSOR FOR SELECT a FROM test1 ORDER BY 1 FOR UPDATE; +BEGIN + FOR r IN l_cur LOOP + UPDATE test1 SET b = b || ' ' || b WHERE a = r.a; + COMMIT; + END LOOP; +END; +$$; + +SELECT * FROM test1; + +SELECT * FROM pg_cursors; + + +-- like bug #17050, but with implicit cursor +TRUNCATE test1; + +INSERT INTO test1 VALUES (1,'one'), (2,'two'), (3,'three'); + +DO LANGUAGE plpgsql $$ +DECLARE r RECORD; +BEGIN + FOR r IN SELECT a FROM test1 FOR UPDATE LOOP + UPDATE test1 SET b = b || ' ' || b WHERE a = r.a; + COMMIT; + END LOOP; +END; +$$; + +SELECT * FROM test1; + +SELECT * FROM pg_cursors; + + -- commit inside block with exception handler TRUNCATE test1; From be90098907475f3cfff7dc6d590641b9c2dae081 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 8 Jun 2021 18:40:06 -0400 Subject: [PATCH 431/671] Force NO SCROLL for plpgsql's implicit cursors. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Further thought about bug #17050 suggests that it's a good idea to use CURSOR_OPT_NO_SCROLL for the implicit cursor opened by a plpgsql FOR-over-query loop. This ensures that, if somebody commits inside the loop, PersistHoldablePortal won't try to rewind and re-read the cursor. While we'd have selected NO_SCROLL anyway if FOR UPDATE/SHARE appears in the query, there are other hazards with volatile functions; and in any case, it's silly to expend effort storing rows that we know for certain won't be needed. (While here, improve the comment in exec_run_select, which was a bit confused about the rationale for when we can use parallel mode. Cursor operations aren't a hazard for nameless portals.) This wasn't an issue until v11, which introduced the possibility of persisting such cursors. Hence, back-patch to v11. Per bug #17050 from Алексей Булгаков. Discussion: https://postgr.es/m/17050-f77aa827dc85247c@postgresql.org --- src/pl/plpgsql/src/pl_exec.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 78b593d12c7ce..207c4424facbf 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -4561,7 +4561,7 @@ exec_stmt_dynfors(PLpgSQL_execstate *estate, PLpgSQL_stmt_dynfors *stmt) int rc; portal = exec_dynquery_with_params(estate, stmt->query, stmt->params, - NULL, 0); + NULL, CURSOR_OPT_NO_SCROLL); /* * Execute the loop @@ -5694,14 +5694,21 @@ exec_run_select(PLpgSQL_execstate *estate, * On the first call for this expression generate the plan. * * If we don't need to return a portal, then we're just going to execute - * the query once, which means it's OK to use a parallel plan, even if the - * number of rows being fetched is limited. If we do need to return a - * portal, the caller might do cursor operations, which parallel query - * can't support. + * the query immediately, which means it's OK to use a parallel plan, even + * if the number of rows being fetched is limited. If we do need to + * return a portal (i.e., this is for a FOR loop), the user's code might + * invoke additional operations inside the FOR loop, making parallel query + * unsafe. In any case, we don't expect any cursor operations to be done, + * so specify NO_SCROLL for efficiency and semantic safety. */ if (expr->plan == NULL) - exec_prepare_plan(estate, expr, - portalP == NULL ? CURSOR_OPT_PARALLEL_OK : 0); + { + int cursorOptions = CURSOR_OPT_NO_SCROLL; + + if (portalP == NULL) + cursorOptions |= CURSOR_OPT_PARALLEL_OK; + exec_prepare_plan(estate, expr, cursorOptions); + } /* * Set up ParamListInfo to pass to executor From 845cad4d51cb12a34ea012dfe58af5ef490384fc Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 9 Jun 2021 16:24:52 +0900 Subject: [PATCH 432/671] Fix inconsistencies in psql --help=commands The set of subcommands supported by \dAp, \do and \dy was described incorrectly in psql's --help. The documentation was already consistent with the code. Reported-by: inoas, from IRC Author: Matthijs van der Vleuten Reviewed-by: Neil Chen Discussion: https://postgr.es/m/6a984e24-2171-4039-9050-92d55e7b23fe@www.fastmail.com Backpatch-through: 9.6 --- src/bin/psql/help.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index ba657789353c5..3c250d11cff9b 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -228,7 +228,7 @@ slashUsage(unsigned short int pager) fprintf(output, _(" \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n")); fprintf(output, _(" \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n")); fprintf(output, _(" \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n")); - fprintf(output, _(" \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n")); + fprintf(output, _(" \\dAp[+] [AMPTRN [OPFPTRN]] list support functions of operator families\n")); fprintf(output, _(" \\db[+] [PATTERN] list tablespaces\n")); fprintf(output, _(" \\dc[S+] [PATTERN] list conversions\n")); fprintf(output, _(" \\dC[+] [PATTERN] list casts\n")); @@ -252,7 +252,7 @@ slashUsage(unsigned short int pager) fprintf(output, _(" \\dL[S+] [PATTERN] list procedural languages\n")); fprintf(output, _(" \\dm[S+] [PATTERN] list materialized views\n")); fprintf(output, _(" \\dn[S+] [PATTERN] list schemas\n")); - fprintf(output, _(" \\do[S] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" + fprintf(output, _(" \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" " list operators\n")); fprintf(output, _(" \\dO[S+] [PATTERN] list collations\n")); fprintf(output, _(" \\dp [PATTERN] list table, view, and sequence access privileges\n")); @@ -267,7 +267,7 @@ slashUsage(unsigned short int pager) fprintf(output, _(" \\dv[S+] [PATTERN] list views\n")); fprintf(output, _(" \\dx[+] [PATTERN] list extensions\n")); fprintf(output, _(" \\dX [PATTERN] list extended statistics\n")); - fprintf(output, _(" \\dy [PATTERN] list event triggers\n")); + fprintf(output, _(" \\dy[+] [PATTERN] list event triggers\n")); fprintf(output, _(" \\l[+] [PATTERN] list databases\n")); fprintf(output, _(" \\sf[+] FUNCNAME show a function's definition\n")); fprintf(output, _(" \\sv[+] VIEWNAME show a view's definition\n")); From caba8f0d43fb679c6f9643456080408a6bc370e8 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Wed, 9 Jun 2021 16:17:00 -0400 Subject: [PATCH 433/671] Fix corner case failure of new standby to follow new primary. This only happens if (1) the new standby has no WAL available locally, (2) the new standby is starting from the old timeline, (3) the promotion happened in the WAL segment from which the new standby is starting, (4) the timeline history file for the new timeline is available from the archive but the WAL files for are not (i.e. this is a race), (5) the WAL files for the new timeline are available via streaming, and (6) recovery_target_timeline='latest'. Commit ee994272ca50f70b53074f0febaec97e28f83c4e introduced this logic and was an improvement over the previous code, but it mishandled this case. If recovery_target_timeline='latest' and restore_command is set, validateRecoveryParameters() can change recoveryTargetTLI to be different from receiveTLI. If streaming is then tried afterward, expectedTLEs gets initialized with the history of the wrong timeline. It's supposed to be a list of entries explaining how to get to the target timeline, but in this case it ends up with a list of entries explaining how to get to the new standby's original timeline, which isn't right. Dilip Kumar and Robert Haas, reviewed by Kyotaro Horiguchi. Discussion: http://postgr.es/m/CAFiTN-sE-jr=LB8jQuxeqikd-Ux+jHiXyh4YDiZMPedgQKup0g@mail.gmail.com --- src/backend/access/transam/xlog.c | 10 +- .../recovery/t/025_stuck_on_old_timeline.pl | 96 +++++++++++++++++++ src/test/recovery/t/cp_history_files | 10 ++ 3 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 src/test/recovery/t/025_stuck_on_old_timeline.pl create mode 100644 src/test/recovery/t/cp_history_files diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 441a9124cd598..17eeff072004c 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -12658,11 +12658,19 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, * pg_wal by now. Use XLOG_FROM_STREAM so that source * info is set correctly and XLogReceiptTime isn't * changed. + * + * NB: We must set readTimeLineHistory based on + * recoveryTargetTLI, not receiveTLI. Normally they'll + * be the same, but if recovery_target_timeline is + * 'latest' and archiving is configured, then it's + * possible that we managed to retrieve one or more + * new timeline history files from the archive, + * updating recoveryTargetTLI. */ if (readFile < 0) { if (!expectedTLEs) - expectedTLEs = readTimeLineHistory(receiveTLI); + expectedTLEs = readTimeLineHistory(recoveryTargetTLI); readFile = XLogFileRead(readSegNo, PANIC, receiveTLI, XLOG_FROM_STREAM, false); diff --git a/src/test/recovery/t/025_stuck_on_old_timeline.pl b/src/test/recovery/t/025_stuck_on_old_timeline.pl new file mode 100644 index 0000000000000..0d96bb3c15be3 --- /dev/null +++ b/src/test/recovery/t/025_stuck_on_old_timeline.pl @@ -0,0 +1,96 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + +# Testing streaming replication where standby is promoted and a new cascading +# standby (without WAL) is connected to the promoted standby. Both archiving +# and streaming are enabled, but only the history file is available from the +# archive, so the WAL files all have to be streamed. Test that the cascading +# standby can follow the new primary (promoted standby). +use strict; +use warnings; +use PostgresNode; +use TestLib; +use FindBin; +use Test::More tests => 1; + +# Initialize primary node +my $node_primary = get_new_node('primary'); + +# Set up an archive command that will copy the history file but not the WAL +# files. No real archive command should behave this way; the point is to +# simulate a race condition where the new cascading standby starts up after +# the timeline history file reaches the archive but before any of the WAL files +# get there. +$node_primary->init(allows_streaming => 1, has_archiving => 1); +my $perlbin = $^X; +$perlbin =~ s{\\}{\\\\}g if ($TestLib::windows_os); +my $archivedir_primary = $node_primary->archive_dir; +$node_primary->append_conf('postgresql.conf', qq( +archive_command = '$perlbin "$FindBin::RealBin/cp_history_files" "%p" "$archivedir_primary/%f"' +)); +$node_primary->start; + +# Take backup from primary +my $backup_name = 'my_backup'; +$node_primary->backup($backup_name); + +# Create streaming standby linking to primary +my $node_standby = get_new_node('standby'); +$node_standby->init_from_backup($node_primary, $backup_name, + allows_streaming => 1, has_streaming => 1, has_archiving => 1); +$node_standby->start; + +# Take backup of standby, use -Xnone so that pg_wal is empty. +$node_standby->backup($backup_name, backup_options => ['-Xnone']); + +# Create cascading standby but don't start it yet. +# Must set up both streaming and archiving. +my $node_cascade = get_new_node('cascade'); +$node_cascade->init_from_backup($node_standby, $backup_name, + has_streaming => 1); +$node_cascade->enable_restoring($node_primary); +$node_cascade->append_conf('postgresql.conf', qq( +recovery_target_timeline='latest' +)); + +# Promote the standby. +$node_standby->promote; + +# Wait for promotion to complete +$node_standby->poll_query_until('postgres', + "SELECT NOT pg_is_in_recovery();") + or die "Timed out while waiting for promotion"; + +# Find next WAL segment to be archived +my $walfile_to_be_archived = $node_standby->safe_psql('postgres', + "SELECT pg_walfile_name(pg_current_wal_lsn());"); + +# Make WAL segment eligible for archival +$node_standby->safe_psql('postgres', 'SELECT pg_switch_wal()'); + +# Wait until the WAL segment has been archived. +# Since the history file gets created on promotion and is archived before any +# WAL segment, this is enough to guarantee that the history file was +# archived. +my $archive_wait_query = + "SELECT '$walfile_to_be_archived' <= last_archived_wal FROM pg_stat_archiver;"; +$node_standby->poll_query_until('postgres', $archive_wait_query) + or die "Timed out while waiting for WAL segment to be archived"; +my $last_archived_wal_file = $walfile_to_be_archived; + +# Start cascade node +$node_cascade->start; + +# Create some content on promoted standby and check its presence on the +# cascading standby. +$node_standby->safe_psql('postgres', "CREATE TABLE tab_int AS SELECT 1 AS a"); + +# Wait for the replication to catch up +$node_standby->wait_for_catchup($node_cascade, 'replay', + $node_standby->lsn('insert')); + +# Check that cascading standby has the new content +my $result = + $node_cascade->safe_psql('postgres', "SELECT count(*) FROM tab_int"); +print "cascade: $result\n"; +is($result, 1, 'check streamed content on cascade standby'); diff --git a/src/test/recovery/t/cp_history_files b/src/test/recovery/t/cp_history_files new file mode 100644 index 0000000000000..cfeea41e5b918 --- /dev/null +++ b/src/test/recovery/t/cp_history_files @@ -0,0 +1,10 @@ +#!/usr/bin/perl + +use File::Copy; +use strict; +use warnings; + +die "wrong number of arguments" if @ARGV != 2; +my ($source, $target) = @ARGV; +exit if $source !~ /history/; +copy($source, $target) or die "couldn't copy $source to $target: $!"; From 55ba5973d9144a552661cf1fa4cbd228a3799212 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Thu, 10 Jun 2021 20:13:44 +1200 Subject: [PATCH 434/671] Fix an asssortment of typos in brin_minmax_multi.c and mcv.c Discussion: https://postgr.es/m/CAApHDvrbyJNOPBws4RUhXghZ7+TBjtdO-rznTsqZECuowNorXg@mail.gmail.com --- src/backend/access/brin/brin_minmax_multi.c | 161 ++++++++++---------- src/backend/statistics/mcv.c | 81 +++++----- 2 files changed, 123 insertions(+), 119 deletions(-) diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c index 4681954b098cd..e3c98c2ffdac5 100644 --- a/src/backend/access/brin/brin_minmax_multi.c +++ b/src/backend/access/brin/brin_minmax_multi.c @@ -21,7 +21,7 @@ * * [1000,2000] and [1000000,1000000] * - * This allow us to still eliminate the page range when the scan keys hit + * This allows us to still eliminate the page range when the scan keys hit * the gap between 2000 and 1000000, making it useful in cases when the * simple minmax opclass gets inefficient. * @@ -39,7 +39,7 @@ * arbitrary threshold and may be changed easily). * * To pick the closest intervals we use the "distance" support procedure, - * which measures space between two ranges (i.e. length of an interval). + * which measures space between two ranges (i.e. the length of an interval). * The computed value may be an approximation - in the worst case we will * merge two ranges that are slightly less optimal at that step, but the * index should still produce correct results. @@ -56,7 +56,7 @@ */ #include "postgres.h" -/* needef for PGSQL_AF_INET */ +/* needed for PGSQL_AF_INET */ #include #include "access/genam.h" @@ -125,7 +125,7 @@ typedef struct MinMaxMultiOptions int valuesPerRange; /* number of values per range */ } MinMaxMultiOptions; -#define MINMAX_MULTI_DEFAULT_VALUES_PER_PAGE 32 +#define MINMAX_MULTI_DEFAULT_VALUES_PER_PAGE 32 #define MinMaxMultiGetValuesPerRange(opts) \ ((opts) && (((MinMaxMultiOptions *) (opts))->valuesPerRange != 0) ? \ @@ -180,7 +180,7 @@ typedef struct Ranges /* * We simply add the values into a large buffer, without any expensive * steps (sorting, deduplication, ...). The buffer is a multiple of the - * target number of values, so the compaction happen less often, + * target number of values, so the compaction happens less often, * amortizing the costs. We keep the actual target and compact to the * requested number of values at the very end, before serializing to * on-disk representation. @@ -456,7 +456,7 @@ AssertCheckExpandedRanges(BrinDesc *bdesc, Oid colloid, AttrNumber attno, } /* - * And the ranges should be ordered and must nor overlap, i.e. upper < + * And the ranges should be ordered and must not overlap, i.e. upper < * lower for boundaries of consecutive ranges. */ for (i = 0; i < nranges - 1; i++) @@ -668,13 +668,12 @@ range_serialize(Ranges *range) Datum tmp; /* - * For values passed by value, we need to copy just the - * significant bytes - we can't use memcpy directly, as that - * assumes little endian behavior. store_att_byval does almost - * what we need, but it requires properly aligned buffer - the - * output buffer does not guarantee that. So we simply use a local - * Datum variable (which guarantees proper alignment), and then - * copy the value from it. + * For byval types, we need to copy just the significant bytes - + * we can't use memcpy directly, as that assumes little-endian + * behavior. store_att_byval does almost what we need, but it + * requires a properly aligned buffer - the output buffer does not + * guarantee that. So we simply use a local Datum variable (which + * guarantees proper alignment), and then copy the value from it. */ store_att_byval(&tmp, range->values[i], typlen); @@ -757,7 +756,7 @@ range_deserialize(int maxvalues, SerializedRanges *serialized) /* * And now deconstruct the values into Datum array. We have to copy the * data because the serialized representation ignores alignment, and we - * don't want to rely it will be kept around anyway. + * don't want to rely on it being kept around anyway. */ ptr = serialized->data; @@ -850,10 +849,10 @@ range_deserialize(int maxvalues, SerializedRanges *serialized) * compare_expanded_ranges * Compare the expanded ranges - first by minimum, then by maximum. * - * We do guarantee that ranges in a single Range object do not overlap, - * so it may seem strange that we don't order just by minimum. But when - * merging two Ranges (which happens in the union function), the ranges - * may in fact overlap. So we do compare both. + * We do guarantee that ranges in a single Ranges object do not overlap, so it + * may seem strange that we don't order just by minimum. But when merging two + * Ranges (which happens in the union function), the ranges may in fact + * overlap. So we do compare both. */ static int compare_expanded_ranges(const void *a, const void *b, void *arg) @@ -1062,9 +1061,9 @@ range_contains_value(BrinDesc *bdesc, Oid colloid, /* * There is no matching range, so let's inspect the sorted values. * - * We do a sequential search for small number of values, and binary search - * once we have more than 16 values. This threshold is somewhat arbitrary, - * as it depends on how expensive the comparison function is. + * We do a sequential search for small numbers of values, and binary + * search once we have more than 16 values. This threshold is somewhat + * arbitrary, as it depends on how expensive the comparison function is. * * XXX If we use the threshold here, maybe we should do the same thing in * has_matching_range? Or maybe we should do the bin search all the time? @@ -1206,7 +1205,7 @@ sort_expanded_ranges(FmgrInfo *cmp, Oid colloid, if (!compare_expanded_ranges(&eranges[i - 1], &eranges[i], (void *) &cxt)) continue; - /* otherwise copy it to n-th place (if not already there) */ + /* otherwise, copy it to n-th place (if not already there) */ if (i != n) memcpy(&eranges[n], &eranges[i], sizeof(ExpandedRange)); @@ -1314,8 +1313,8 @@ compare_distances(const void *a, const void *b) } /* - * Given an array of expanded ranges, compute distance of the gaps between - * the ranges - for ncranges there are (ncranges-1) gaps. + * Given an array of expanded ranges, compute size of the gaps between each + * range. For neranges there are (neranges-1) gaps. * * We simply call the "distance" function to compute the (max-min) for pairs * of consecutive ranges. The function may be fairly expensive, so we do that @@ -1337,8 +1336,8 @@ build_distances(FmgrInfo *distanceFn, Oid colloid, distances = (DistanceValue *) palloc0(sizeof(DistanceValue) * ndistances); /* - * Walk though the ranges once and compute distance between the ranges so - * that we can sort them once. + * Walk through the ranges once and compute the distance between the + * ranges so that we can sort them once. */ for (i = 0; i < ndistances; i++) { @@ -1394,7 +1393,7 @@ build_expanded_ranges(FmgrInfo *cmp, Oid colloid, Ranges *ranges, /* sort and deduplicate the expanded ranges */ neranges = sort_expanded_ranges(cmp, colloid, eranges, neranges); - /* remember how many cranges we built */ + /* remember how many ranges we built */ *nranges = neranges; return eranges; @@ -1430,7 +1429,7 @@ count_values(ExpandedRange *cranges, int ncranges) * * Combines ranges until the number of boundary values drops below the * threshold specified by max_values. This happens by merging enough - * ranges by distance between them. + * ranges by the distance between them. * * Returns the number of result ranges. * @@ -1448,7 +1447,7 @@ count_values(ExpandedRange *cranges, int ncranges) * are of equal (or very similar) length. * * Consider for example points 1, 2, 3, .., 64, which have gaps of the - * same length 1 of course. In that case we tend to pick the first + * same length 1 of course. In that case, we tend to pick the first * gap of that length, which leads to this: * * step 1: [1, 2], 3, 4, 5, .., 64 @@ -1484,7 +1483,7 @@ reduce_expanded_ranges(ExpandedRange *eranges, int neranges, int keep = (max_values / 2 - 1); /* - * Maybe we have sufficiently low number of ranges already? + * Maybe we have a sufficiently low number of ranges already? * * XXX This should happen before we actually do the expensive stuff like * sorting, so maybe this should be just an assert. @@ -1519,7 +1518,7 @@ reduce_expanded_ranges(ExpandedRange *eranges, int neranges, Assert(nvalues <= max_values); } - /* We should have even number of range values. */ + /* We should have an even number of range values. */ Assert(nvalues % 2 == 0); /* @@ -1545,7 +1544,7 @@ reduce_expanded_ranges(ExpandedRange *eranges, int neranges, } /* - * Store the boundary values from ExpandedRanges back into Range (using + * Store the boundary values from ExpandedRanges back into 'ranges' (using * only the minimal number of values needed). */ static void @@ -1618,16 +1617,16 @@ ensure_free_space_in_buffer(BrinDesc *bdesc, Oid colloid, cmpFn = minmax_multi_get_strategy_procinfo(bdesc, attno, attr->atttypid, BTLessStrategyNumber); - /* deduplicate values, if there's unsorted part */ + /* deduplicate values, if there's an unsorted part */ range_deduplicate_values(range); /* - * did we reduce enough free space by just the deduplication? + * Did we reduce enough free space by just the deduplication? * * We don't simply check against range->maxvalues again. The deduplication * might have freed very little space (e.g. just one value), forcing us to - * do deduplication very often. In that case it's better to do compaction - * and reduce more space. + * do deduplication very often. In that case, it's better to do the + * compaction and reduce more space. */ if (2 * range->nranges + range->nvalues <= range->maxvalues * MINMAX_BUFFER_LOAD_FACTOR) return true; @@ -1713,8 +1712,8 @@ range_add_value(BrinDesc *bdesc, Oid colloid, * rule that we never have duplicates with the ranges or sorted values. * * We might also deduplicate and recheck if the value is contained, but - * that seems like an overkill. We'd need to deduplicate anyway, so why - * not do it now. + * that seems like overkill. We'd need to deduplicate anyway, so why not + * do it now. */ modified = ensure_free_space_in_buffer(bdesc, colloid, attno, attr, ranges); @@ -1805,10 +1804,10 @@ compactify_ranges(BrinDesc *bdesc, Ranges *ranges, int max_values) /* * The distanceFn calls (which may internally call e.g. numeric_le) may - * allocate quite a bit of memory, and we must not leak it. Otherwise we'd - * have problems e.g. when building indexes. So we create a local memory - * context and make sure we free the memory before leaving this function - * (not after every call). + * allocate quite a bit of memory, and we must not leak it. Otherwise, + * we'd have problems e.g. when building indexes. So we create a local + * memory context and make sure we free the memory before leaving this + * function (not after every call). */ ctx = AllocSetContextCreate(CurrentMemoryContext, "minmax-multi context", @@ -1865,7 +1864,7 @@ brin_minmax_multi_opcinfo(PG_FUNCTION_ARGS) } /* - * Compute distance between two float4 values (plain subtraction). + * Compute the distance between two float4 values (plain subtraction). */ Datum brin_minmax_multi_distance_float4(PG_FUNCTION_ARGS) @@ -1883,7 +1882,7 @@ brin_minmax_multi_distance_float4(PG_FUNCTION_ARGS) } /* - * Compute distance between two float8 values (plain subtraction). + * Compute the distance between two float8 values (plain subtraction). */ Datum brin_minmax_multi_distance_float8(PG_FUNCTION_ARGS) @@ -1901,7 +1900,7 @@ brin_minmax_multi_distance_float8(PG_FUNCTION_ARGS) } /* - * Compute distance between two int2 values (plain subtraction). + * Compute the distance between two int2 values (plain subtraction). */ Datum brin_minmax_multi_distance_int2(PG_FUNCTION_ARGS) @@ -1919,7 +1918,7 @@ brin_minmax_multi_distance_int2(PG_FUNCTION_ARGS) } /* - * Compute distance between two int4 values (plain subtraction). + * Compute the distance between two int4 values (plain subtraction). */ Datum brin_minmax_multi_distance_int4(PG_FUNCTION_ARGS) @@ -1937,7 +1936,7 @@ brin_minmax_multi_distance_int4(PG_FUNCTION_ARGS) } /* - * Compute distance between two int8 values (plain subtraction). + * Compute the distance between two int8 values (plain subtraction). */ Datum brin_minmax_multi_distance_int8(PG_FUNCTION_ARGS) @@ -1955,8 +1954,8 @@ brin_minmax_multi_distance_int8(PG_FUNCTION_ARGS) } /* - * Compute distance between two tid values (by mapping them to float8 - * and then subtracting them). + * Compute the distance between two tid values (by mapping them to float8 and + * then subtracting them). */ Datum brin_minmax_multi_distance_tid(PG_FUNCTION_ARGS) @@ -1987,7 +1986,7 @@ brin_minmax_multi_distance_tid(PG_FUNCTION_ARGS) } /* - * Computes distance between two numeric values (plain subtraction). + * Compute the distance between two numeric values (plain subtraction). */ Datum brin_minmax_multi_distance_numeric(PG_FUNCTION_ARGS) @@ -2008,7 +2007,7 @@ brin_minmax_multi_distance_numeric(PG_FUNCTION_ARGS) } /* - * Computes approximate distance between two UUID values. + * Compute the approximate distance between two UUID values. * * XXX We do not need a perfectly accurate value, so we approximate the * deltas (which would have to be 128-bit integers) with a 64-bit float. @@ -2046,7 +2045,7 @@ brin_minmax_multi_distance_uuid(PG_FUNCTION_ARGS) } /* - * Compute approximate distance between two dates. + * Compute the approximate distance between two dates. */ Datum brin_minmax_multi_distance_date(PG_FUNCTION_ARGS) @@ -2061,7 +2060,7 @@ brin_minmax_multi_distance_date(PG_FUNCTION_ARGS) } /* - * Computes approximate distance between two time (without tz) values. + * Compute the approximate distance between two time (without tz) values. * * TimeADT is just an int64, so we simply subtract the values directly. */ @@ -2081,7 +2080,7 @@ brin_minmax_multi_distance_time(PG_FUNCTION_ARGS) } /* - * Computes approximate distance between two timetz values. + * Compute the approximate distance between two timetz values. * * Simply subtracts the TimeADT (int64) values embedded in TimeTzADT. */ @@ -2100,6 +2099,9 @@ brin_minmax_multi_distance_timetz(PG_FUNCTION_ARGS) PG_RETURN_FLOAT8(delta); } +/* + * Compute the distance between two timestamp values. + */ Datum brin_minmax_multi_distance_timestamp(PG_FUNCTION_ARGS) { @@ -2119,7 +2121,7 @@ brin_minmax_multi_distance_timestamp(PG_FUNCTION_ARGS) } /* - * Computes distance between two interval values. + * Compute the distance between two interval values. */ Datum brin_minmax_multi_distance_interval(PG_FUNCTION_ARGS) @@ -2177,7 +2179,7 @@ brin_minmax_multi_distance_interval(PG_FUNCTION_ARGS) } /* - * Compute distance between two pg_lsn values. + * Compute the distance between two pg_lsn values. * * LSN is just an int64 encoding position in the stream, so just subtract * those int64 values directly. @@ -2198,7 +2200,7 @@ brin_minmax_multi_distance_pg_lsn(PG_FUNCTION_ARGS) } /* - * Compute distance between two macaddr values. + * Compute the distance between two macaddr values. * * mac addresses are treated as 6 unsigned chars, so do the same thing we * already do for UUID values. @@ -2235,7 +2237,7 @@ brin_minmax_multi_distance_macaddr(PG_FUNCTION_ARGS) } /* - * Compute distance between two macaddr8 values. + * Compute the distance between two macaddr8 values. * * macaddr8 addresses are 8 unsigned chars, so do the same thing we * already do for UUID values. @@ -2278,15 +2280,15 @@ brin_minmax_multi_distance_macaddr8(PG_FUNCTION_ARGS) } /* - * Compute distance between two inet values. + * Compute the distance between two inet values. * - * The distance is defined as difference between 32-bit/128-bit values, + * The distance is defined as the difference between 32-bit/128-bit values, * depending on the IP version. The distance is computed by subtracting * the bytes and normalizing it to [0,1] range for each IP family. * Addresses from different families are considered to be in maximum * distance, which is 1.0. * - * XXX Does this need to consider the mask (bits)? For now it's ignored. + * XXX Does this need to consider the mask (bits)? For now, it's ignored. */ Datum brin_minmax_multi_distance_inet(PG_FUNCTION_ARGS) @@ -2320,7 +2322,8 @@ brin_minmax_multi_distance_inet(PG_FUNCTION_ARGS) * The length is calculated from the mask length, because we sort the * addresses by first address in the range, so A.B.C.D/24 < A.B.C.1 (the * first range starts at A.B.C.0, which is before A.B.C.1). We don't want - * to produce negative delta in this case, so we just cut the extra bytes. + * to produce a negative delta in this case, so we just cut the extra + * bytes. * * XXX Maybe this should be a bit more careful and cut the bits, not just * whole bytes. @@ -2396,11 +2399,11 @@ brin_minmax_multi_get_values(BrinDesc *bdesc, MinMaxMultiOptions *opts) } /* - * Examine the given index tuple (which contains partial status of a certain - * page range) by comparing it to the given value that comes from another heap - * tuple. If the new value is outside the min/max range specified by the - * existing tuple values, update the index tuple and return true. Otherwise, - * return false and do not modify in this case. + * Examine the given index tuple (which contains the partial status of a + * certain page range) by comparing it to the given value that comes from + * another heap tuple. If the new value is outside the min/max range + * specified by the existing tuple values, update the index tuple and return + * true. Otherwise, return false and do not modify in this case. */ Datum brin_minmax_multi_add_value(PG_FUNCTION_ARGS) @@ -2427,13 +2430,13 @@ brin_minmax_multi_add_value(PG_FUNCTION_ARGS) /* * If this is the first non-null value, we need to initialize the range - * list. Otherwise just extract the existing range list from BrinValues. + * list. Otherwise, just extract the existing range list from BrinValues. * * When starting with an empty range, we assume this is a batch mode and * we use a larger buffer. The buffer size is derived from the BRIN range - * size, number of rows per page, with some sensible min/max values. Small - * buffer would be bad for performance, but large buffer might require a - * lot of memory (because of keeping all the values). + * size, number of rows per page, with some sensible min/max values. A + * small buffer would be bad for performance, but a large buffer might + * require a lot of memory (because of keeping all the values). */ if (column->bv_allnulls) { @@ -2624,8 +2627,8 @@ brin_minmax_multi_consistent(PG_FUNCTION_ARGS) break; /* - * haven't managed to eliminate this range, so - * consider it matching + * We haven't managed to eliminate this range, so + * consider it matching. */ matches = true; @@ -2713,9 +2716,7 @@ brin_minmax_multi_consistent(PG_FUNCTION_ARGS) break; } - /* - * have we found a range matching all scan keys? if yes, we're done - */ + /* have we found a range matching all scan keys? if yes, we're done */ if (matching) PG_RETURN_DATUM(BoolGetDatum(true)); } @@ -2769,10 +2770,10 @@ brin_minmax_multi_union(PG_FUNCTION_ARGS) /* * The distanceFn calls (which may internally call e.g. numeric_le) may - * allocate quite a bit of memory, and we must not leak it. Otherwise we'd - * have problems e.g. when building indexes. So we create a local memory - * context and make sure we free the memory before leaving this function - * (not after every call). + * allocate quite a bit of memory, and we must not leak it. Otherwise, + * we'd have problems e.g. when building indexes. So we create a local + * memory context and make sure we free the memory before leaving this + * function (not after every call). */ ctx = AllocSetContextCreate(CurrentMemoryContext, "minmax-multi context", diff --git a/src/backend/statistics/mcv.c b/src/backend/statistics/mcv.c index 9ab3e81a91d77..ef118952c74e9 100644 --- a/src/backend/statistics/mcv.c +++ b/src/backend/statistics/mcv.c @@ -212,10 +212,10 @@ statext_mcv_build(StatsBuildData *data, double totalrows, int stattarget) groups = build_distinct_groups(nitems, items, mss, &ngroups); /* - * Maximum number of MCV items to store, based on the statistics target we - * computed for the statistics object (from target set for the object - * itself, attributes and the system default). In any case, we can't keep - * more groups than we have available. + * The maximum number of MCV items to store, based on the statistics + * target we computed for the statistics object (from the target set for + * the object itself, attributes and the system default). In any case, we + * can't keep more groups than we have available. */ nitems = stattarget; if (nitems > ngroups) @@ -234,7 +234,7 @@ statext_mcv_build(StatsBuildData *data, double totalrows, int stattarget) * to consider unexpectedly uncommon items (again, compared to the base * frequency), and the single-column algorithm does not have to. * - * We simply decide how many items to keep by computing minimum count + * We simply decide how many items to keep by computing the minimum count * using get_mincount_for_mcv_list() and then keep all items that seem to * be more common than that. */ @@ -255,9 +255,9 @@ statext_mcv_build(StatsBuildData *data, double totalrows, int stattarget) } /* - * At this point we know the number of items for the MCV list. There might - * be none (for uniform distribution with many groups), and in that case - * there will be no MCV list. Otherwise construct the MCV list. + * At this point, we know the number of items for the MCV list. There + * might be none (for uniform distribution with many groups), and in that + * case, there will be no MCV list. Otherwise, construct the MCV list. */ if (nitems > 0) { @@ -345,7 +345,7 @@ statext_mcv_build(StatsBuildData *data, double totalrows, int stattarget) /* * build_mss - * build MultiSortSupport for the attributes passed in attrs + * Build a MultiSortSupport for the given StatsBuildData. */ static MultiSortSupport build_mss(StatsBuildData *data) @@ -375,7 +375,7 @@ build_mss(StatsBuildData *data) /* * count_distinct_groups - * count distinct combinations of SortItems in the array + * Count distinct combinations of SortItems in the array. * * The array is assumed to be sorted according to the MultiSortSupport. */ @@ -400,7 +400,8 @@ count_distinct_groups(int numrows, SortItem *items, MultiSortSupport mss) /* * compare_sort_item_count - * comparator for sorting items by count (frequencies) in descending order + * Comparator for sorting items by count (frequencies) in descending + * order. */ static int compare_sort_item_count(const void *a, const void *b) @@ -418,9 +419,10 @@ compare_sort_item_count(const void *a, const void *b) /* * build_distinct_groups - * build an array of SortItems for distinct groups and counts matching items + * Build an array of SortItems for distinct groups and counts matching + * items. * - * The input array is assumed to be sorted + * The 'items' array is assumed to be sorted. */ static SortItem * build_distinct_groups(int numrows, SortItem *items, MultiSortSupport mss, @@ -477,7 +479,7 @@ sort_item_compare(const void *a, const void *b, void *arg) /* * build_column_frequencies - * compute frequencies of values in each column + * Compute frequencies of values in each column. * * This returns an array of SortItems for each attribute the MCV is built * on, with a frequency (number of occurrences) for each value. This is @@ -554,7 +556,7 @@ build_column_frequencies(SortItem *groups, int ngroups, /* * statext_mcv_load - * Load the MCV list for the indicated pg_statistic_ext tuple + * Load the MCV list for the indicated pg_statistic_ext tuple. */ MCVList * statext_mcv_load(Oid mvoid) @@ -598,10 +600,11 @@ statext_mcv_load(Oid mvoid) * | header fields | dimension info | deduplicated values | items | * +---------------+----------------+---------------------+-------+ * - * Where dimension info stores information about type of K-th attribute (e.g. - * typlen, typbyval and length of deduplicated values). Deduplicated values - * store deduplicated values for each attribute. And items store the actual - * MCV list items, with values replaced by indexes into the arrays. + * Where dimension info stores information about the type of the K-th + * attribute (e.g. typlen, typbyval and length of deduplicated values). + * Deduplicated values store deduplicated values for each attribute. And + * items store the actual MCV list items, with values replaced by indexes into + * the arrays. * * When serializing the items, we use uint16 indexes. The number of MCV items * is limited by the statistics target (which is capped to 10k at the moment). @@ -641,10 +644,10 @@ statext_mcv_serialize(MCVList *mcvlist, VacAttrStats **stats) /* * We'll include some rudimentary information about the attribute types * (length, by-val flag), so that we don't have to look them up while - * deserializating the MCV list (we already have the type OID in the - * header). This is safe, because when changing type of the attribute the - * statistics gets dropped automatically. We need to store the info about - * the arrays of deduplicated values anyway. + * deserializing the MCV list (we already have the type OID in the + * header). This is safe because when changing the type of the attribute + * the statistics gets dropped automatically. We need to store the info + * about the arrays of deduplicated values anyway. */ info = (DimensionInfo *) palloc0(sizeof(DimensionInfo) * ndims); @@ -697,8 +700,8 @@ statext_mcv_serialize(MCVList *mcvlist, VacAttrStats **stats) /* * Walk through the array and eliminate duplicate values, but keep the - * ordering (so that we can do bsearch later). We know there's at - * least one item as (counts[dim] != 0), so we can skip the first + * ordering (so that we can do a binary search later). We know there's + * at least one item as (counts[dim] != 0), so we can skip the first * element. */ ndistinct = 1; /* number of distinct values */ @@ -787,10 +790,10 @@ statext_mcv_serialize(MCVList *mcvlist, VacAttrStats **stats) Size len; /* - * For cstring, we do similar thing as for varlena - first we - * store the length as uint32 and then the data. We don't care - * about alignment, which means that during deserialization we - * need to copy the fields and only access the copies. + * cstring is handled similar to varlena - first we store the + * length as uint32 and then the data. We don't care about + * alignment, which means that during deserialization we need + * to copy the fields and only access the copies. */ /* c-strings include terminator, so +1 byte */ @@ -874,13 +877,13 @@ statext_mcv_serialize(MCVList *mcvlist, VacAttrStats **stats) Datum tmp; /* - * For values passed by value, we need to copy just the - * significant bytes - we can't use memcpy directly, as that - * assumes little endian behavior. store_att_byval does - * almost what we need, but it requires properly aligned - * buffer - the output buffer does not guarantee that. So we - * simply use a local Datum variable (which guarantees proper - * alignment), and then copy the value from it. + * For byval types, we need to copy just the significant bytes + * - we can't use memcpy directly, as that assumes + * little-endian behavior. store_att_byval does almost what + * we need, but it requires a properly aligned buffer - the + * output buffer does not guarantee that. So we simply use a + * local Datum variable (which guarantees proper alignment), + * and then copy the value from it. */ store_att_byval(&tmp, value, info[dim].typlen); @@ -1698,7 +1701,7 @@ mcv_get_match_bitmap(PlannerInfo *root, List *clauses, * we can use the collation for the attribute itself, as * stored in varcollid. We do reset the statistics after a * type change (including collation change), so this is OK. - * For expressions we use the collation extracted from the + * For expressions, we use the collation extracted from the * expression itself. */ if (expronleft) @@ -1805,8 +1808,8 @@ mcv_get_match_bitmap(PlannerInfo *root, List *clauses, } /* - * Stop evaluating the array elements once we reach match - * value that can't change - ALL() is the same as + * Stop evaluating the array elements once we reach a + * matching value that can't change - ALL() is the same as * AND-list, ANY() is the same as OR-list. */ if (RESULT_IS_FINAL(match, expr->useOr)) From 4dcb1d087aebc6fc2477ce4458ea82f548e2c1ee Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Thu, 10 Jun 2021 09:08:30 -0400 Subject: [PATCH 435/671] Adjust new test case to set wal_keep_size. Per buildfarm member conchuela and Kyotaro Horiguchi, it's possible for the WAL segment that the cascading standby needs to be removed too quickly. Hopefully this will prevent that. Kyotaro Horiguchi Discussion: http://postgr.es/m/20210610.101240.1270925505780628275.horikyota.ntt@gmail.com --- src/test/recovery/t/025_stuck_on_old_timeline.pl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/recovery/t/025_stuck_on_old_timeline.pl b/src/test/recovery/t/025_stuck_on_old_timeline.pl index 0d96bb3c15be3..25c2dff43730a 100644 --- a/src/test/recovery/t/025_stuck_on_old_timeline.pl +++ b/src/test/recovery/t/025_stuck_on_old_timeline.pl @@ -27,6 +27,7 @@ my $archivedir_primary = $node_primary->archive_dir; $node_primary->append_conf('postgresql.conf', qq( archive_command = '$perlbin "$FindBin::RealBin/cp_history_files" "%p" "$archivedir_primary/%f"' +wal_keep_size=128MB )); $node_primary->start; From b29fa951ec519bdde153465e2caa6c0b7b3bcfc3 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 10 Jun 2021 16:21:48 +0200 Subject: [PATCH 436/671] Add some const decorations One of these functions is new in PostgreSQL 14; might as well start it out right. --- src/backend/replication/logical/origin.c | 6 +++--- src/include/replication/origin.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c index b955f4345895d..cb42fcb34d120 100644 --- a/src/backend/replication/logical/origin.c +++ b/src/backend/replication/logical/origin.c @@ -206,7 +206,7 @@ replorigin_check_prerequisites(bool check_slots, bool recoveryOK) * Returns InvalidOid if the node isn't known yet and missing_ok is true. */ RepOriginId -replorigin_by_name(char *roname, bool missing_ok) +replorigin_by_name(const char *roname, bool missing_ok) { Form_pg_replication_origin ident; Oid roident = InvalidOid; @@ -237,7 +237,7 @@ replorigin_by_name(char *roname, bool missing_ok) * Needs to be called in a transaction. */ RepOriginId -replorigin_create(char *roname) +replorigin_create(const char *roname) { Oid roident; HeapTuple tuple = NULL; @@ -411,7 +411,7 @@ replorigin_drop_guts(Relation rel, RepOriginId roident, bool nowait) * Needs to be called in a transaction. */ void -replorigin_drop_by_name(char *name, bool missing_ok, bool nowait) +replorigin_drop_by_name(const char *name, bool missing_ok, bool nowait) { RepOriginId roident; Relation rel; diff --git a/src/include/replication/origin.h b/src/include/replication/origin.h index d2ed6305fe1e9..cd0b3e194c423 100644 --- a/src/include/replication/origin.h +++ b/src/include/replication/origin.h @@ -38,9 +38,9 @@ extern PGDLLIMPORT XLogRecPtr replorigin_session_origin_lsn; extern PGDLLIMPORT TimestampTz replorigin_session_origin_timestamp; /* API for querying & manipulating replication origins */ -extern RepOriginId replorigin_by_name(char *name, bool missing_ok); -extern RepOriginId replorigin_create(char *name); -extern void replorigin_drop_by_name(char *name, bool missing_ok, bool nowait); +extern RepOriginId replorigin_by_name(const char *name, bool missing_ok); +extern RepOriginId replorigin_create(const char *name); +extern void replorigin_drop_by_name(const char *name, bool missing_ok, bool nowait); extern bool replorigin_by_oid(RepOriginId roident, bool missing_ok, char **roname); From 9bb5eecce645dd72853e3ed262bef7bf11cae566 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 10 Jun 2021 10:45:31 -0400 Subject: [PATCH 437/671] Avoid ECPG test failures in some GSS-capable environments. Buildfarm member hamerkop has been reporting that two cases in connect/test5.pgc show different error messages than the test expects, because since commit ffa2e4670 libpq's connection failure messages are exposing the fact that a GSS-encrypted connection was attempted and failed. That's pretty interesting information in itself, and I certainly don't wish to shoot the messenger, but we need to do something to stabilize the ECPG results. For the second of these two failure cases, we can add the gssencmode=disable option to prevent the discrepancy. However, that solution is problematic for the first failure, because the only unique thing about that case is that it's testing a completely-omitted connection target; there's noplace to add the option without defeating the point of the test case. After some thrashing around with alternative fixes that turned out to have undesirable side-effects, the most workable answer is just to give up and remove that test case. Perhaps we can revert this later, if we figure out why the GSS code is misbehaving in hamerkop's environment. Thanks to Michael Paquier for exploration of alternatives. Discussion: https://postgr.es/m/YLRZH6CWs9N6Pusy@paquier.xyz --- src/interfaces/ecpg/test/connect/test5.pgc | 6 +++--- src/interfaces/ecpg/test/expected/connect-test5.c | 10 +++------- .../ecpg/test/expected/connect-test5.stderr | 12 +----------- 3 files changed, 7 insertions(+), 21 deletions(-) diff --git a/src/interfaces/ecpg/test/connect/test5.pgc b/src/interfaces/ecpg/test/connect/test5.pgc index e712fa87783fb..de291600899e1 100644 --- a/src/interfaces/ecpg/test/connect/test5.pgc +++ b/src/interfaces/ecpg/test/connect/test5.pgc @@ -40,8 +40,8 @@ exec sql end declare section; exec sql connect to 'ecpg2_regression' as main; exec sql disconnect main; - exec sql connect to as main user regress_ecpg_user2/insecure; - exec sql disconnect main; + /* exec sql connect to as main user regress_ecpg_user2/insecure; + exec sql disconnect main; */ exec sql connect to ecpg2_regression as main user regress_ecpg_user1/connectpw; exec sql disconnect main; @@ -61,7 +61,7 @@ exec sql end declare section; exec sql connect to "unix:postgresql://200.46.204.71/ecpg2_regression" as main user regress_ecpg_user1/connectpw; exec sql disconnect main; - exec sql connect to unix:postgresql://localhost/ as main user regress_ecpg_user2 IDENTIFIED BY insecure; + exec sql connect to "unix:postgresql://localhost/?gssencmode=disable" as main user regress_ecpg_user2 IDENTIFIED BY insecure; exec sql disconnect main; /* connect twice */ diff --git a/src/interfaces/ecpg/test/expected/connect-test5.c b/src/interfaces/ecpg/test/expected/connect-test5.c index 6ae5b589dea4f..c1124c627ff3a 100644 --- a/src/interfaces/ecpg/test/expected/connect-test5.c +++ b/src/interfaces/ecpg/test/expected/connect-test5.c @@ -86,12 +86,8 @@ main(void) #line 41 "test5.pgc" - { ECPGconnect(__LINE__, 0, "" , "regress_ecpg_user2" , "insecure" , "main", 0); } -#line 43 "test5.pgc" - - { ECPGdisconnect(__LINE__, "main");} -#line 44 "test5.pgc" - + /* exec sql connect to as main user regress_ecpg_user2/insecure; + exec sql disconnect main; */ { ECPGconnect(__LINE__, 0, "ecpg2_regression" , "regress_ecpg_user1" , "connectpw" , "main", 0); } #line 46 "test5.pgc" @@ -135,7 +131,7 @@ main(void) #line 62 "test5.pgc" - { ECPGconnect(__LINE__, 0, "unix:postgresql://localhost/" , "regress_ecpg_user2" , "insecure" , "main", 0); } + { ECPGconnect(__LINE__, 0, "unix:postgresql://localhost/?gssencmode=disable" , "regress_ecpg_user2" , "insecure" , "main", 0); } #line 64 "test5.pgc" { ECPGdisconnect(__LINE__, "main");} diff --git a/src/interfaces/ecpg/test/expected/connect-test5.stderr b/src/interfaces/ecpg/test/expected/connect-test5.stderr index a15f3443204f0..01a6a0a13b236 100644 --- a/src/interfaces/ecpg/test/expected/connect-test5.stderr +++ b/src/interfaces/ecpg/test/expected/connect-test5.stderr @@ -34,16 +34,6 @@ [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_finish: connection main closed [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGconnect: opening database on port for user regress_ecpg_user2 -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGconnect: connection to server failed: FATAL: database "regress_ecpg_user2" does not exist -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_finish: connection main closed -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: raising sqlcode -402 on line 43: could not connect to database "" on line 43 -[NO_PID]: sqlca: code: -402, state: 08001 -[NO_PID]: raising sqlcode -220 on line 44: connection "main" does not exist on line 44 -[NO_PID]: sqlca: code: -220, state: 08003 [NO_PID]: ECPGconnect: opening database ecpg2_regression on port for user regress_ecpg_user1 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_finish: connection main closed @@ -70,7 +60,7 @@ [NO_PID]: sqlca: code: -402, state: 08001 [NO_PID]: raising sqlcode -220 on line 62: connection "main" does not exist on line 62 [NO_PID]: sqlca: code: -220, state: 08003 -[NO_PID]: ECPGconnect: opening database on port for user regress_ecpg_user2 +[NO_PID]: ECPGconnect: opening database on port with options gssencmode=disable for user regress_ecpg_user2 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ECPGconnect: connection to server failed: FATAL: database "regress_ecpg_user2" does not exist [NO_PID]: sqlca: code: 0, state: 00000 From bb4aed46a5aeb00d2f1d8b8160feed339f4eaf12 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 10 Jun 2021 11:15:13 -0400 Subject: [PATCH 438/671] Shut down EvalPlanQual machinery when LockRows node reaches the end. Previously, we left the EPQ sub-executor alone until ExecEndLockRows. This caused any buffer pins or other resources that it might hold to remain held until ExecutorEnd, which in some code paths means that they are held till the Portal is closed. That can cause user-visible problems, such as blocking VACUUM; and it's unlike the behavior of ordinary table-scanning nodes, which will have released all buffer pins by the time they return an EOF indication. We can make LockRows work more like other plan nodes by calling EvalPlanQualEnd just before returning NULL. We still need to call it in ExecEndLockRows in case the node was not run to completion, but in the normal case the second call does nothing and costs little. Per report from Yura Sokolov. In principle this is a longstanding bug, but in view of the lack of other complaints and the low severity of the consequences, I chose not to back-patch. Discussion: https://postgr.es/m/4aa370cb91ecf2f9885d98b80ad1109c@postgrespro.ru --- src/backend/executor/nodeLockRows.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/backend/executor/nodeLockRows.c b/src/backend/executor/nodeLockRows.c index b2e5c30079e58..7583973f4ae06 100644 --- a/src/backend/executor/nodeLockRows.c +++ b/src/backend/executor/nodeLockRows.c @@ -59,7 +59,11 @@ ExecLockRows(PlanState *pstate) slot = ExecProcNode(outerPlan); if (TupIsNull(slot)) + { + /* Release any resources held by EPQ mechanism before exiting */ + EvalPlanQualEnd(&node->lr_epqstate); return NULL; + } /* We don't need EvalPlanQual unless we get updated tuple version(s) */ epq_needed = false; @@ -381,6 +385,7 @@ ExecInitLockRows(LockRows *node, EState *estate, int eflags) void ExecEndLockRows(LockRowsState *node) { + /* We may have shut down EPQ already, but no harm in another call */ EvalPlanQualEnd(&node->lr_epqstate); ExecEndNode(outerPlanState(node)); } From 3a09d75b4f6cabc8331e228b6988dbfcd9afdfbe Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 10 Jun 2021 12:27:27 -0400 Subject: [PATCH 439/671] Rearrange logrep worker's snapshot handling some more. It turns out that worker.c's code path for TRUNCATE was also careless about establishing a snapshot while executing user-defined code, allowing the checks added by commit 84f5c2908 to fail when a trigger is fired in that context. We could just wrap Push/PopActiveSnapshot around the truncate call, but it seems better to establish a policy of holding a snapshot throughout execution of a replication step. To help with that and possible future requirements, replace the previous ensure_transaction calls with pairs of begin/end_replication_step calls. Per report from Mark Dilger. Back-patch to v11, like the previous changes. Discussion: https://postgr.es/m/B4A3AF82-79ED-4F4C-A4E5-CD2622098972@enterprisedb.com --- src/backend/replication/logical/worker.c | 85 +++++++++++++----------- 1 file changed, 48 insertions(+), 37 deletions(-) diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 6ba447ea97498..98c26002e8375 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -282,30 +282,41 @@ should_apply_changes_for_rel(LogicalRepRelMapEntry *rel) } /* - * Make sure that we started local transaction. + * Begin one step (one INSERT, UPDATE, etc) of a replication transaction. * - * Also switches to ApplyMessageContext as necessary. + * Start a transaction, if this is the first step (else we keep using the + * existing transaction). + * Also provide a global snapshot and ensure we run in ApplyMessageContext. */ -static bool -ensure_transaction(void) +static void +begin_replication_step(void) { - if (IsTransactionState()) - { - SetCurrentStatementStartTimestamp(); - - if (CurrentMemoryContext != ApplyMessageContext) - MemoryContextSwitchTo(ApplyMessageContext); + SetCurrentStatementStartTimestamp(); - return false; + if (!IsTransactionState()) + { + StartTransactionCommand(); + maybe_reread_subscription(); } - SetCurrentStatementStartTimestamp(); - StartTransactionCommand(); - - maybe_reread_subscription(); + PushActiveSnapshot(GetTransactionSnapshot()); MemoryContextSwitchTo(ApplyMessageContext); - return true; +} + +/* + * Finish up one step of a replication transaction. + * Callers of begin_replication_step() must also call this. + * + * We don't close out the transaction here, but we should increment + * the command counter to make the effects of this step visible. + */ +static void +end_replication_step(void) +{ + PopActiveSnapshot(); + + CommandCounterIncrement(); } /* @@ -359,13 +370,6 @@ create_edata_for_relation(LogicalRepRelMapEntry *rel) RangeTblEntry *rte; ResultRelInfo *resultRelInfo; - /* - * Input functions may need an active snapshot, as may AFTER triggers - * invoked during finish_edata. For safety, ensure an active snapshot - * exists throughout all our usage of the executor. - */ - PushActiveSnapshot(GetTransactionSnapshot()); - edata = (ApplyExecutionData *) palloc0(sizeof(ApplyExecutionData)); edata->targetRel = rel; @@ -433,8 +437,6 @@ finish_edata(ApplyExecutionData *edata) ExecResetTupleTable(estate->es_tupleTable, false); FreeExecutorState(estate); pfree(edata); - - PopActiveSnapshot(); } /* @@ -831,7 +833,7 @@ apply_handle_stream_start(StringInfo s) * transaction for handling the buffile, used for serializing the * streaming data and subxact info. */ - ensure_transaction(); + begin_replication_step(); /* notify handle methods we're processing a remote transaction */ in_streamed_transaction = true; @@ -861,6 +863,8 @@ apply_handle_stream_start(StringInfo s) subxact_info_read(MyLogicalRepWorker->subid, stream_xid); pgstat_report_activity(STATE_RUNNING, NULL); + + end_replication_step(); } /* @@ -937,7 +941,7 @@ apply_handle_stream_abort(StringInfo s) StreamXidHash *ent; subidx = -1; - ensure_transaction(); + begin_replication_step(); subxact_info_read(MyLogicalRepWorker->subid, xid); for (i = subxact_data.nsubxacts; i > 0; i--) @@ -958,7 +962,7 @@ apply_handle_stream_abort(StringInfo s) { /* Cleanup the subxact info */ cleanup_subxact_info(); - + end_replication_step(); CommitTransactionCommand(); return; } @@ -986,6 +990,7 @@ apply_handle_stream_abort(StringInfo s) /* write the updated subxact list */ subxact_info_write(MyLogicalRepWorker->subid, xid); + end_replication_step(); CommitTransactionCommand(); } } @@ -1013,7 +1018,8 @@ apply_handle_stream_commit(StringInfo s) elog(DEBUG1, "received commit for streamed transaction %u", xid); - ensure_transaction(); + /* Make sure we have an open transaction */ + begin_replication_step(); /* * Allocate file handle and memory required to process all the messages in @@ -1046,6 +1052,8 @@ apply_handle_stream_commit(StringInfo s) in_remote_transaction = true; pgstat_report_activity(STATE_RUNNING, NULL); + end_replication_step(); + /* * Read the entries one by one and pass them through the same logic as in * apply_dispatch. @@ -1227,7 +1235,7 @@ apply_handle_insert(StringInfo s) if (handle_streamed_transaction(LOGICAL_REP_MSG_INSERT, s)) return; - ensure_transaction(); + begin_replication_step(); relid = logicalrep_read_insert(s, &newtup); rel = logicalrep_rel_open(relid, RowExclusiveLock); @@ -1238,6 +1246,7 @@ apply_handle_insert(StringInfo s) * transaction so it's safe to unlock it. */ logicalrep_rel_close(rel, RowExclusiveLock); + end_replication_step(); return; } @@ -1266,7 +1275,7 @@ apply_handle_insert(StringInfo s) logicalrep_rel_close(rel, NoLock); - CommandCounterIncrement(); + end_replication_step(); } /* @@ -1346,7 +1355,7 @@ apply_handle_update(StringInfo s) if (handle_streamed_transaction(LOGICAL_REP_MSG_UPDATE, s)) return; - ensure_transaction(); + begin_replication_step(); relid = logicalrep_read_update(s, &has_oldtup, &oldtup, &newtup); @@ -1358,6 +1367,7 @@ apply_handle_update(StringInfo s) * transaction so it's safe to unlock it. */ logicalrep_rel_close(rel, RowExclusiveLock); + end_replication_step(); return; } @@ -1416,7 +1426,7 @@ apply_handle_update(StringInfo s) logicalrep_rel_close(rel, NoLock); - CommandCounterIncrement(); + end_replication_step(); } /* @@ -1501,7 +1511,7 @@ apply_handle_delete(StringInfo s) if (handle_streamed_transaction(LOGICAL_REP_MSG_DELETE, s)) return; - ensure_transaction(); + begin_replication_step(); relid = logicalrep_read_delete(s, &oldtup); rel = logicalrep_rel_open(relid, RowExclusiveLock); @@ -1512,6 +1522,7 @@ apply_handle_delete(StringInfo s) * transaction so it's safe to unlock it. */ logicalrep_rel_close(rel, RowExclusiveLock); + end_replication_step(); return; } @@ -1542,7 +1553,7 @@ apply_handle_delete(StringInfo s) logicalrep_rel_close(rel, NoLock); - CommandCounterIncrement(); + end_replication_step(); } /* @@ -1867,7 +1878,7 @@ apply_handle_truncate(StringInfo s) if (handle_streamed_transaction(LOGICAL_REP_MSG_TRUNCATE, s)) return; - ensure_transaction(); + begin_replication_step(); remote_relids = logicalrep_read_truncate(s, &cascade, &restart_seqs); @@ -1958,7 +1969,7 @@ apply_handle_truncate(StringInfo s) table_close(rel, NoLock); } - CommandCounterIncrement(); + end_replication_step(); } From e56bce5d43789cce95d099554ae9593ada92b3b7 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 10 Jun 2021 17:11:36 -0400 Subject: [PATCH 440/671] Reconsider the handling of procedure OUT parameters. Commit 2453ea142 redefined pg_proc.proargtypes to include the types of OUT parameters, for procedures only. While that had some advantages for implementing the SQL-spec behavior of DROP PROCEDURE, it was pretty disastrous from a number of other perspectives. Notably, since the primary key of pg_proc is name + proargtypes, this made it possible to have multiple procedures with identical names + input arguments and differing output argument types. That would make it impossible to call any one of the procedures by writing just NULL (or "?", or any other data-type-free notation) for the output argument(s). The change also seems likely to cause grave confusion for client applications that examine pg_proc and expect the traditional definition of proargtypes. Hence, revert the definition of proargtypes to what it was, and undo a number of complications that had been added to support that. To support the SQL-spec behavior of DROP PROCEDURE, when there are no argmode markers in the command's parameter list, we perform the lookup both ways (that is, matching against both proargtypes and proallargtypes), succeeding if we get just one unique match. In principle this could result in ambiguous-function failures that would not happen when using only one of the two rules. However, overloading of procedure names is thought to be a pretty rare usage, so this shouldn't cause many problems in practice. Postgres-specific code such as pg_dump can defend against any possibility of such failures by being careful to specify argmodes for all procedure arguments. This also fixes a few other bugs in the area of CALL statements with named parameters, and improves the documentation a little. catversion bump forced because the representation of procedures with OUT arguments changes. Discussion: https://postgr.es/m/3742981.1621533210@sss.pgh.pa.us --- doc/src/sgml/catalogs.sgml | 5 +- doc/src/sgml/plpgsql.sgml | 17 +- doc/src/sgml/ref/alter_extension.sgml | 11 +- doc/src/sgml/ref/alter_procedure.sgml | 4 +- doc/src/sgml/ref/call.sgml | 26 ++- doc/src/sgml/ref/comment.sgml | 11 +- doc/src/sgml/ref/drop_procedure.sgml | 92 +++++++- doc/src/sgml/ref/drop_routine.sgml | 42 +++- doc/src/sgml/ref/security_label.sgml | 11 +- doc/src/sgml/xfunc.sgml | 22 +- src/backend/catalog/namespace.c | 68 +++++- src/backend/catalog/pg_aggregate.c | 2 +- src/backend/catalog/pg_proc.c | 6 +- src/backend/commands/functioncmds.c | 137 ++++++------ src/backend/executor/functions.c | 36 +-- src/backend/nodes/copyfuncs.c | 2 + src/backend/nodes/equalfuncs.c | 2 + src/backend/optimizer/util/clauses.c | 89 ++++++-- src/backend/parser/analyze.c | 92 +++++++- src/backend/parser/gram.y | 109 ++++----- src/backend/parser/parse_func.c | 207 ++++++++++++++---- src/backend/parser/parse_oper.c | 4 +- src/backend/utils/adt/regproc.c | 11 +- src/backend/utils/adt/ruleutils.c | 12 +- src/backend/utils/fmgr/funcapi.c | 4 +- src/bin/pg_dump/t/002_pg_dump.pl | 2 +- src/include/catalog/catversion.h | 2 +- src/include/catalog/namespace.h | 2 + src/include/catalog/pg_proc.h | 2 +- src/include/funcapi.h | 3 +- src/include/nodes/parsenodes.h | 37 +++- src/include/optimizer/optimizer.h | 3 +- src/include/parser/parse_func.h | 1 + src/pl/plpgsql/src/expected/plpgsql_call.out | 76 +++++++ src/pl/plpgsql/src/pl_comp.c | 1 - src/pl/plpgsql/src/pl_exec.c | 36 ++- src/pl/plpgsql/src/sql/plpgsql_call.sql | 64 ++++++ src/pl/plpython/expected/plpython_call.out | 4 +- src/pl/plpython/plpy_procedure.c | 4 +- src/pl/plpython/sql/plpython_call.sql | 2 +- src/pl/tcl/expected/pltcl_call.out | 4 +- src/pl/tcl/sql/pltcl_call.sql | 2 +- .../regress/expected/create_procedure.out | 149 ++++++++++--- src/test/regress/sql/create_procedure.sql | 45 +++- 44 files changed, 1069 insertions(+), 392 deletions(-) diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 16493209c6387..f517a7d4aff23 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -5905,9 +5905,8 @@ SCRAM-SHA-256$<iteration count>:&l An array of the data types of the function arguments. This includes only input arguments (including INOUT and - VARIADIC arguments), as well as - OUT parameters of procedures, and thus represents - the call signature of the function or procedure. + VARIADIC arguments), and thus represents + the call signature of the function. diff --git a/doc/src/sgml/plpgsql.sgml b/doc/src/sgml/plpgsql.sgml index c97344ff927b8..a3edde35039b0 100644 --- a/doc/src/sgml/plpgsql.sgml +++ b/doc/src/sgml/plpgsql.sgml @@ -480,7 +480,7 @@ $$ LANGUAGE plpgsql; To call a function with OUT parameters, omit the - output parameter in the function call: + output parameter(s) in the function call: SELECT sales_tax(100.00); @@ -523,16 +523,20 @@ $$ LANGUAGE plpgsql; In a call to a procedure, all the parameters must be specified. For - output parameters, NULL may be specified. + output parameters, NULL may be specified when + calling the procedure from plain SQL: CALL sum_n_product(2, 4, NULL, NULL); sum | prod -----+------ 6 | 8 - Output parameters in procedures become more interesting in nested calls, - where they can be assigned to variables. See for details. + + However, when calling a procedure + from PL/pgSQL, you should instead write a + variable for any output parameter; the variable will receive the result + of the call. See + for details. @@ -2030,6 +2034,9 @@ BEGIN END; $$; + The variable corresponding to an output parameter can be a simple + variable or a field of a composite-type variable. Currently, + it cannot be an element of an array. diff --git a/doc/src/sgml/ref/alter_extension.sgml b/doc/src/sgml/ref/alter_extension.sgml index 38fd60128b783..c819c7bb4e3c4 100644 --- a/doc/src/sgml/ref/alter_extension.sgml +++ b/doc/src/sgml/ref/alter_extension.sgml @@ -212,12 +212,11 @@ ALTER EXTENSION name DROP IN, OUT, INOUT, or VARIADIC. If omitted, the default is IN. - Note that ALTER EXTENSION does not actually pay any - attention to OUT arguments for functions and - aggregates (but not procedures), since only the input arguments are - needed to determine the function's identity. So it is sufficient to - list the IN, INOUT, and - VARIADIC arguments for functions and aggregates. + Note that ALTER EXTENSION does not actually pay + any attention to OUT arguments, since only the input + arguments are needed to determine the function's identity. + So it is sufficient to list the IN, INOUT, + and VARIADIC arguments. diff --git a/doc/src/sgml/ref/alter_procedure.sgml b/doc/src/sgml/ref/alter_procedure.sgml index 9cbe2c7ceafa3..033fda92ee515 100644 --- a/doc/src/sgml/ref/alter_procedure.sgml +++ b/doc/src/sgml/ref/alter_procedure.sgml @@ -96,7 +96,7 @@ ALTER PROCEDURE name [ ( [ [ The data type(s) of the procedure's arguments (optionally schema-qualified), if any. + See for the details of how + the procedure is looked up using the argument data type(s). diff --git a/doc/src/sgml/ref/call.sgml b/doc/src/sgml/ref/call.sgml index abaa81c78b94b..9e83a77b7c9da 100644 --- a/doc/src/sgml/ref/call.sgml +++ b/doc/src/sgml/ref/call.sgml @@ -55,9 +55,24 @@ CALL name ( [ argument - An input argument for the procedure call. - See for the full details on - function and procedure call syntax, including use of named parameters. + An argument expression for the procedure call. + + + + Arguments can include parameter names, using the syntax + name => value. + This works the same as in ordinary function calls; see + for details. + + + + Arguments must be supplied for all procedure parameters that lack + defaults, including OUT parameters. However, + arguments matching OUT parameters are not evaluated, + so it's customary to just write NULL for them. + (Writing something else for an OUT parameter + might cause compatibility problems with + future PostgreSQL versions.) @@ -101,7 +116,10 @@ CALL do_db_maintenance(); Compatibility - CALL conforms to the SQL standard. + CALL conforms to the SQL standard, + except for the handling of output parameters. The standard + says that users should write variables to receive the values + of output parameters. diff --git a/doc/src/sgml/ref/comment.sgml b/doc/src/sgml/ref/comment.sgml index 4f30bb93e2aa3..e07fc47fd3145 100644 --- a/doc/src/sgml/ref/comment.sgml +++ b/doc/src/sgml/ref/comment.sgml @@ -176,12 +176,11 @@ COMMENT ON argument: IN, OUT, INOUT, or VARIADIC. If omitted, the default is IN. - Note that COMMENT does not actually pay any attention - to OUT arguments for functions and aggregates (but - not procedures), since only the input arguments are needed to determine - the function's identity. So it is sufficient to list the - IN, INOUT, and - VARIADIC arguments for functions and aggregates. + Note that COMMENT does not actually pay + any attention to OUT arguments, since only the input + arguments are needed to determine the function's identity. + So it is sufficient to list the IN, INOUT, + and VARIADIC arguments. diff --git a/doc/src/sgml/ref/drop_procedure.sgml b/doc/src/sgml/ref/drop_procedure.sgml index bf2c6ce1aaa1a..4c86062f3430a 100644 --- a/doc/src/sgml/ref/drop_procedure.sgml +++ b/doc/src/sgml/ref/drop_procedure.sgml @@ -30,10 +30,10 @@ DROP PROCEDURE [ IF EXISTS ] name [ Description - DROP PROCEDURE removes the definition of an existing - procedure. To execute this command the user must be the - owner of the procedure. The argument types to the - procedure must be specified, since several different procedures + DROP PROCEDURE removes the definition of one or more + existing procedures. To execute this command the user must be the + owner of the procedure(s). The argument types to the + procedure(s) usually must be specified, since several different procedures can exist with the same name and different argument lists. @@ -56,8 +56,7 @@ DROP PROCEDURE [ IF EXISTS ] name [ name - The name (optionally schema-qualified) of an existing procedure. If no - argument list is specified, the name must be unique in its schema. + The name (optionally schema-qualified) of an existing procedure. @@ -69,7 +68,7 @@ DROP PROCEDURE [ IF EXISTS ] name [ The mode of an argument: IN, OUT, INOUT, or VARIADIC. If omitted, - the default is IN. + the default is IN (but see below). @@ -82,7 +81,7 @@ DROP PROCEDURE [ IF EXISTS ] name [ The name of an argument. Note that DROP PROCEDURE does not actually pay any attention to argument names, since only the argument data - types are needed to determine the procedure's identity. + types are used to determine the procedure's identity. @@ -94,6 +93,7 @@ DROP PROCEDURE [ IF EXISTS ] name [ The data type(s) of the procedure's arguments (optionally schema-qualified), if any. + See below for details. @@ -121,12 +121,81 @@ DROP PROCEDURE [ IF EXISTS ] name [ + + Notes + + + If there is only one procedure of the given name, the argument list + can be omitted. Omit the parentheses too in this case. + + + + In PostgreSQL, it's sufficient to list the + input (including INOUT) arguments, + because no two routines of the same name are allowed to share the same + input-argument list. Moreover, the DROP command + will not actually check that you wrote the types + of OUT arguments correctly; so any arguments that + are explicitly marked OUT are just noise. But + writing them is recommendable for consistency with the + corresponding CREATE command. + + + + For compatibility with the SQL standard, it is also allowed to write + all the argument data types (including those of OUT + arguments) without + any argmode markers. + When this is done, the types of the procedure's OUT + argument(s) will be verified against the command. + This provision creates an ambiguity, in that when the argument list + contains no argmode + markers, it's unclear which rule is intended. + The DROP command will attempt the lookup both ways, + and will throw an error if two different procedures are found. + To avoid the risk of such ambiguity, it's recommendable to + write IN markers explicitly rather than letting them + be defaulted, thus forcing the + traditional PostgreSQL interpretation to be + used. + + + + The lookup rules just explained are also used by other commands that + act on existing procedures, such as ALTER PROCEDURE + and COMMENT ON PROCEDURE. + + + Examples + + If there is only one procedure do_db_maintenance, + this command is sufficient to drop it: + +DROP PROCEDURE do_db_maintenance; + + + + + Given this procedure definition: + +CREATE PROCEDURE do_db_maintenance(IN target_schema text, OUT results text) ... + + any one of these commands would work to drop it: -DROP PROCEDURE do_db_maintenance(); +DROP PROCEDURE do_db_maintenance(IN target_schema text, OUT results text); +DROP PROCEDURE do_db_maintenance(IN text, OUT text); +DROP PROCEDURE do_db_maintenance(IN text); +DROP PROCEDURE do_db_maintenance(text); +DROP PROCEDURE do_db_maintenance(text, text); -- potentially ambiguous + However, the last example would be ambiguous if there is also, say, + +CREATE PROCEDURE do_db_maintenance(IN target_schema text, IN options text) ... + + @@ -140,10 +209,11 @@ DROP PROCEDURE do_db_maintenance(); The standard only allows one procedure to be dropped per command. - The IF EXISTS option + The IF EXISTS option is an extension. - The ability to specify argument modes and names + The ability to specify argument modes and names is an + extension, and the lookup rules differ when modes are given. diff --git a/doc/src/sgml/ref/drop_routine.sgml b/doc/src/sgml/ref/drop_routine.sgml index 6c50eb44a1993..0a0a140ba0f42 100644 --- a/doc/src/sgml/ref/drop_routine.sgml +++ b/doc/src/sgml/ref/drop_routine.sgml @@ -30,15 +30,44 @@ DROP ROUTINE [ IF EXISTS ] name [ ( Description - DROP ROUTINE removes the definition of an existing - routine, which can be an aggregate function, a normal function, or a - procedure. See + DROP ROUTINE removes the definition of one or more + existing routines. The term routine includes + aggregate functions, normal functions, and procedures. See under , , and for the description of the parameters, more examples, and further details. + + Notes + + + The lookup rules used by DROP ROUTINE are + fundamentally the same as for DROP PROCEDURE; in + particular, DROP ROUTINE shares that command's + behavior of considering an argument list that has + no argmode markers to be + possibly using the SQL standard's definition that OUT + arguments are included in the list. (DROP AGGREGATE + and DROP FUNCTION do not do that.) + + + + In some cases where the same name is shared by routines of different + kinds, it is possible for DROP ROUTINE to fail with + an ambiguity error when a more specific command (DROP + FUNCTION, etc.) would work. Specifying the argument type + list more carefully will also resolve such problems. + + + + These lookup rules are also used by other commands that + act on existing routines, such as ALTER ROUTINE + and COMMENT ON ROUTINE. + + + Examples @@ -64,13 +93,14 @@ DROP ROUTINE foo(integer); The standard only allows one routine to be dropped per command. - The IF EXISTS option + The IF EXISTS option is an extension. - The ability to specify argument modes and names + The ability to specify argument modes and names is an + extension, and the lookup rules differ when modes are given. - Aggregate functions are an extension. + User-definable aggregate functions are an extension. diff --git a/doc/src/sgml/ref/security_label.sgml b/doc/src/sgml/ref/security_label.sgml index 407a09720b8ed..20a839ff0c32a 100644 --- a/doc/src/sgml/ref/security_label.sgml +++ b/doc/src/sgml/ref/security_label.sgml @@ -126,12 +126,11 @@ SECURITY LABEL [ FOR provider ] ON argument: IN, OUT, INOUT, or VARIADIC. If omitted, the default is IN. - Note that SECURITY LABEL does not actually pay any - attention to OUT arguments for functions and - aggregates (but not procedures), since only the input arguments are - needed to determine the function's identity. So it is sufficient to - list the IN, INOUT, and - VARIADIC arguments for functions and aggregates. + Note that SECURITY LABEL does not actually + pay any attention to OUT arguments, since only the input + arguments are needed to determine the function's identity. + So it is sufficient to list the IN, INOUT, + and VARIADIC arguments. diff --git a/doc/src/sgml/xfunc.sgml b/doc/src/sgml/xfunc.sgml index 41bcc5b79ddb0..3771401c01dd3 100644 --- a/doc/src/sgml/xfunc.sgml +++ b/doc/src/sgml/xfunc.sgml @@ -765,7 +765,7 @@ DROP FUNCTION sum_n_product (int, int); parameter serves as both an input parameter (part of the calling argument list) and an output parameter (part of the result record type). VARIADIC parameters are input parameters, but are treated - specially as described next. + specially as described below. @@ -779,12 +779,8 @@ DROP FUNCTION sum_n_product (int, int); Output parameters are also supported in procedures, but they work a bit - differently from functions. Notably, output parameters - are included in the signature of a procedure and - must be specified in the procedure call. - - - + differently from functions. In CALL commands, + output parameters must be included in the argument list. For example, the bank account debiting routine from earlier could be written like this: @@ -795,17 +791,21 @@ CREATE PROCEDURE tp1 (accountno integer, debit numeric, OUT new_balance numeric) RETURNING balance; $$ LANGUAGE SQL; - To call this procedure, it is irrelevant what is passed as the argument - of the OUT parameter, so you could pass + To call this procedure, an argument matching the OUT + parameter must be included. It's customary to write NULL: CALL tp1(17, 100.0, NULL); + If you write something else, it must be an expression that is implicitly + coercible to the declared type of the parameter, just as for input + parameters. Note however that such an expression will not be evaluated. - Procedures with output parameters are more useful in PL/pgSQL, where the - output parameters can be assigned to variables. See PL/pgSQL, + instead of writing NULL you must write a variable + that will receive the procedure's output. See for details. diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index 005e029c38265..fd767fc5cfa29 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -206,6 +206,7 @@ static void RemoveTempRelations(Oid tempNamespaceId); static void RemoveTempRelationsCallback(int code, Datum arg); static void NamespaceCallback(Datum arg, int cacheid, uint32 hashvalue); static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames, + bool include_out_arguments, int pronargs, int **argnumbers); @@ -901,6 +902,12 @@ TypeIsVisible(Oid typid) * of additional args (which can be retrieved from the function's * proargdefaults entry). * + * If include_out_arguments is true, then OUT-mode arguments are considered to + * be included in the argument list. Their types are included in the returned + * arrays, and argnumbers are indexes in proallargtypes not proargtypes. + * We also set nominalnargs to be the length of proallargtypes not proargtypes. + * Otherwise OUT-mode arguments are ignored. + * * It is not possible for nvargs and ndargs to both be nonzero in the same * list entry, since default insertion allows matches to functions with more * than nargs arguments while the variadic transformation requires the same @@ -911,7 +918,8 @@ TypeIsVisible(Oid typid) * first any positional arguments, then the named arguments, then defaulted * arguments (if needed and allowed by expand_defaults). The argnumbers[] * array can be used to map this back to the catalog information. - * argnumbers[k] is set to the proargtypes index of the k'th call argument. + * argnumbers[k] is set to the proargtypes or proallargtypes index of the + * k'th call argument. * * We search a single namespace if the function name is qualified, else * all namespaces in the search path. In the multiple-namespace case, @@ -935,13 +943,13 @@ TypeIsVisible(Oid typid) * such an entry it should react as though the call were ambiguous. * * If missing_ok is true, an empty list (NULL) is returned if the name was - * schema- qualified with a schema that does not exist. Likewise if no + * schema-qualified with a schema that does not exist. Likewise if no * candidate is found for other reasons. */ FuncCandidateList FuncnameGetCandidates(List *names, int nargs, List *argnames, bool expand_variadic, bool expand_defaults, - bool missing_ok) + bool include_out_arguments, bool missing_ok) { FuncCandidateList resultList = NULL; bool any_special = false; @@ -978,6 +986,7 @@ FuncnameGetCandidates(List *names, int nargs, List *argnames, { HeapTuple proctup = &catlist->members[i]->tuple; Form_pg_proc procform = (Form_pg_proc) GETSTRUCT(proctup); + Oid *proargtypes = procform->proargtypes.values; int pronargs = procform->pronargs; int effective_nargs; int pathpos = 0; @@ -1012,6 +1021,35 @@ FuncnameGetCandidates(List *names, int nargs, List *argnames, continue; /* proc is not in search path */ } + /* + * If we are asked to match to OUT arguments, then use the + * proallargtypes array (which includes those); otherwise use + * proargtypes (which doesn't). Of course, if proallargtypes is null, + * we always use proargtypes. + */ + if (include_out_arguments) + { + Datum proallargtypes; + bool isNull; + + proallargtypes = SysCacheGetAttr(PROCNAMEARGSNSP, proctup, + Anum_pg_proc_proallargtypes, + &isNull); + if (!isNull) + { + ArrayType *arr = DatumGetArrayTypeP(proallargtypes); + + pronargs = ARR_DIMS(arr)[0]; + if (ARR_NDIM(arr) != 1 || + pronargs < 0 || + ARR_HASNULL(arr) || + ARR_ELEMTYPE(arr) != OIDOID) + elog(ERROR, "proallargtypes is not a 1-D Oid array or it contains nulls"); + Assert(pronargs >= procform->pronargs); + proargtypes = (Oid *) ARR_DATA_PTR(arr); + } + } + if (argnames != NIL) { /* @@ -1047,6 +1085,7 @@ FuncnameGetCandidates(List *names, int nargs, List *argnames, /* Check for argument name match, generate positional mapping */ if (!MatchNamedCall(proctup, nargs, argnames, + include_out_arguments, pronargs, &argnumbers)) continue; @@ -1105,12 +1144,12 @@ FuncnameGetCandidates(List *names, int nargs, List *argnames, effective_nargs * sizeof(Oid)); newResult->pathpos = pathpos; newResult->oid = procform->oid; + newResult->nominalnargs = pronargs; newResult->nargs = effective_nargs; newResult->argnumbers = argnumbers; if (argnumbers) { /* Re-order the argument types into call's logical order */ - Oid *proargtypes = procform->proargtypes.values; int i; for (i = 0; i < pronargs; i++) @@ -1119,8 +1158,7 @@ FuncnameGetCandidates(List *names, int nargs, List *argnames, else { /* Simple positional case, just copy proargtypes as-is */ - memcpy(newResult->args, procform->proargtypes.values, - pronargs * sizeof(Oid)); + memcpy(newResult->args, proargtypes, pronargs * sizeof(Oid)); } if (variadic) { @@ -1293,6 +1331,10 @@ FuncnameGetCandidates(List *names, int nargs, List *argnames, * the function, in positions after the last positional argument, and there * are defaults for all unsupplied arguments. * + * If include_out_arguments is true, we are treating OUT arguments as + * included in the argument list. pronargs is the number of arguments + * we're considering (the length of either proargtypes or proallargtypes). + * * The number of positional arguments is nargs - list_length(argnames). * Note caller has already done basic checks on argument count. * @@ -1303,10 +1345,10 @@ FuncnameGetCandidates(List *names, int nargs, List *argnames, */ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames, + bool include_out_arguments, int pronargs, int **argnumbers) { Form_pg_proc procform = (Form_pg_proc) GETSTRUCT(proctup); - int pronargs = procform->pronargs; int numposargs = nargs - list_length(argnames); int pronallargs; Oid *p_argtypes; @@ -1333,6 +1375,8 @@ MatchNamedCall(HeapTuple proctup, int nargs, List *argnames, &p_argtypes, &p_argnames, &p_argmodes); Assert(p_argnames != NULL); + Assert(include_out_arguments ? (pronargs == pronallargs) : (pronargs <= pronallargs)); + /* initialize state for matching */ *argnumbers = (int *) palloc(pronargs * sizeof(int)); memset(arggiven, false, pronargs * sizeof(bool)); @@ -1355,8 +1399,9 @@ MatchNamedCall(HeapTuple proctup, int nargs, List *argnames, found = false; for (i = 0; i < pronallargs; i++) { - /* consider only input parameters */ - if (p_argmodes && + /* consider only input params, except with include_out_arguments */ + if (!include_out_arguments && + p_argmodes && (p_argmodes[i] != FUNC_PARAM_IN && p_argmodes[i] != FUNC_PARAM_INOUT && p_argmodes[i] != FUNC_PARAM_VARIADIC)) @@ -1371,7 +1416,7 @@ MatchNamedCall(HeapTuple proctup, int nargs, List *argnames, found = true; break; } - /* increase pp only for input parameters */ + /* increase pp only for considered parameters */ pp++; } /* if name isn't in proargnames, fail */ @@ -1448,7 +1493,7 @@ FunctionIsVisible(Oid funcid) visible = false; clist = FuncnameGetCandidates(list_make1(makeString(proname)), - nargs, NIL, false, false, false); + nargs, NIL, false, false, false, false); for (; clist; clist = clist->next) { @@ -1721,6 +1766,7 @@ OpernameGetCandidates(List *names, char oprkind, bool missing_schema_ok) newResult->pathpos = pathpos; newResult->oid = operform->oid; + newResult->nominalnargs = 2; newResult->nargs = 2; newResult->nvargs = 0; newResult->ndargs = 0; diff --git a/src/backend/catalog/pg_aggregate.c b/src/backend/catalog/pg_aggregate.c index 5197076c760c9..1f63d8081b264 100644 --- a/src/backend/catalog/pg_aggregate.c +++ b/src/backend/catalog/pg_aggregate.c @@ -846,7 +846,7 @@ lookup_agg_function(List *fnName, * the function. */ fdresult = func_get_detail(fnName, NIL, NIL, - nargs, input_types, false, false, + nargs, input_types, false, false, false, &fnOid, rettype, &retset, &nvargs, &vatype, &true_oid_array, NULL); diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index 5403110820412..1454d2fb67b02 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -471,12 +471,10 @@ ProcedureCreate(const char *procedureName, if (isnull) proargmodes = PointerGetDatum(NULL); /* just to be sure */ - n_old_arg_names = get_func_input_arg_names(prokind, - proargnames, + n_old_arg_names = get_func_input_arg_names(proargnames, proargmodes, &old_arg_names); - n_new_arg_names = get_func_input_arg_names(prokind, - parameterNames, + n_new_arg_names = get_func_input_arg_names(parameterNames, parameterModes, &new_arg_names); for (j = 0; j < n_old_arg_names; j++) diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index 4c12aa33dfc00..736d04780a753 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -169,16 +169,16 @@ compute_return_type(TypeName *returnType, Oid languageOid, } /* - * Interpret the function parameter list of a CREATE FUNCTION or - * CREATE AGGREGATE statement. + * Interpret the function parameter list of a CREATE FUNCTION, + * CREATE PROCEDURE, or CREATE AGGREGATE statement. * * Input parameters: * parameters: list of FunctionParameter structs * languageOid: OID of function language (InvalidOid if it's CREATE AGGREGATE) - * objtype: needed only to determine error handling and required result type + * objtype: identifies type of object being created * * Results are stored into output parameters. parameterTypes must always - * be created, but the other arrays are set to NULL if not needed. + * be created, but the other arrays/lists can be NULL pointers if not needed. * variadicArgType is set to the variadic array type if there's a VARIADIC * parameter (there can be only one); or to InvalidOid if not. * requiredResultType is set to InvalidOid if there are no OUT parameters, @@ -200,8 +200,8 @@ interpret_function_parameter_list(ParseState *pstate, Oid *requiredResultType) { int parameterCount = list_length(parameters); - Oid *sigArgTypes; - int sigArgCount = 0; + Oid *inTypes; + int inCount = 0; Datum *allTypes; Datum *paramModes; Datum *paramNames; @@ -215,7 +215,7 @@ interpret_function_parameter_list(ParseState *pstate, *variadicArgType = InvalidOid; /* default result */ *requiredResultType = InvalidOid; /* default result */ - sigArgTypes = (Oid *) palloc(parameterCount * sizeof(Oid)); + inTypes = (Oid *) palloc(parameterCount * sizeof(Oid)); allTypes = (Datum *) palloc(parameterCount * sizeof(Datum)); paramModes = (Datum *) palloc(parameterCount * sizeof(Datum)); paramNames = (Datum *) palloc0(parameterCount * sizeof(Datum)); @@ -227,11 +227,16 @@ interpret_function_parameter_list(ParseState *pstate, { FunctionParameter *fp = (FunctionParameter *) lfirst(x); TypeName *t = fp->argType; + FunctionParameterMode fpmode = fp->mode; bool isinput = false; Oid toid; Type typtup; AclResult aclresult; + /* For our purposes here, a defaulted mode spec is identical to IN */ + if (fpmode == FUNC_PARAM_DEFAULT) + fpmode = FUNC_PARAM_IN; + typtup = LookupTypeName(NULL, t, NULL, false); if (typtup) { @@ -288,37 +293,42 @@ interpret_function_parameter_list(ParseState *pstate, } /* handle input parameters */ - if (fp->mode != FUNC_PARAM_OUT && fp->mode != FUNC_PARAM_TABLE) + if (fpmode != FUNC_PARAM_OUT && fpmode != FUNC_PARAM_TABLE) { - isinput = true; - if (parameterTypes_list) - *parameterTypes_list = lappend_oid(*parameterTypes_list, toid); - } - - /* handle signature parameters */ - if (fp->mode == FUNC_PARAM_IN || fp->mode == FUNC_PARAM_INOUT || - (objtype == OBJECT_PROCEDURE && fp->mode == FUNC_PARAM_OUT) || - fp->mode == FUNC_PARAM_VARIADIC) - { - /* other signature parameters can't follow a VARIADIC parameter */ + /* other input parameters can't follow a VARIADIC parameter */ if (varCount > 0) ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), - errmsg("VARIADIC parameter must be the last signature parameter"))); - sigArgTypes[sigArgCount++] = toid; + errmsg("VARIADIC parameter must be the last input parameter"))); + inTypes[inCount++] = toid; + isinput = true; + if (parameterTypes_list) + *parameterTypes_list = lappend_oid(*parameterTypes_list, toid); } /* handle output parameters */ - if (fp->mode != FUNC_PARAM_IN && fp->mode != FUNC_PARAM_VARIADIC) + if (fpmode != FUNC_PARAM_IN && fpmode != FUNC_PARAM_VARIADIC) { if (objtype == OBJECT_PROCEDURE) + { + /* + * We disallow OUT-after-VARIADIC only for procedures. While + * such a case causes no confusion in ordinary function calls, + * it would cause confusion in a CALL statement. + */ + if (varCount > 0) + ereport(ERROR, + (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), + errmsg("VARIADIC parameter must be the last parameter"))); + /* Procedures with output parameters always return RECORD */ *requiredResultType = RECORDOID; + } else if (outCount == 0) /* save first output param's type */ *requiredResultType = toid; outCount++; } - if (fp->mode == FUNC_PARAM_VARIADIC) + if (fpmode == FUNC_PARAM_VARIADIC) { *variadicArgType = toid; varCount++; @@ -341,7 +351,7 @@ interpret_function_parameter_list(ParseState *pstate, allTypes[i] = ObjectIdGetDatum(toid); - paramModes[i] = CharGetDatum(fp->mode); + paramModes[i] = CharGetDatum(fpmode); if (fp->name && fp->name[0]) { @@ -356,19 +366,24 @@ interpret_function_parameter_list(ParseState *pstate, foreach(px, parameters) { FunctionParameter *prevfp = (FunctionParameter *) lfirst(px); + FunctionParameterMode prevfpmode; if (prevfp == fp) break; + /* as above, default mode is IN */ + prevfpmode = prevfp->mode; + if (prevfpmode == FUNC_PARAM_DEFAULT) + prevfpmode = FUNC_PARAM_IN; /* pure in doesn't conflict with pure out */ - if ((fp->mode == FUNC_PARAM_IN || - fp->mode == FUNC_PARAM_VARIADIC) && - (prevfp->mode == FUNC_PARAM_OUT || - prevfp->mode == FUNC_PARAM_TABLE)) + if ((fpmode == FUNC_PARAM_IN || + fpmode == FUNC_PARAM_VARIADIC) && + (prevfpmode == FUNC_PARAM_OUT || + prevfpmode == FUNC_PARAM_TABLE)) continue; - if ((prevfp->mode == FUNC_PARAM_IN || - prevfp->mode == FUNC_PARAM_VARIADIC) && - (fp->mode == FUNC_PARAM_OUT || - fp->mode == FUNC_PARAM_TABLE)) + if ((prevfpmode == FUNC_PARAM_IN || + prevfpmode == FUNC_PARAM_VARIADIC) && + (fpmode == FUNC_PARAM_OUT || + fpmode == FUNC_PARAM_TABLE)) continue; if (prevfp->name && prevfp->name[0] && strcmp(prevfp->name, fp->name) == 0) @@ -432,13 +447,23 @@ interpret_function_parameter_list(ParseState *pstate, ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("input parameters after one with a default value must also have defaults"))); + + /* + * For procedures, we also can't allow OUT parameters after one + * with a default, because the same sort of confusion arises in a + * CALL statement. + */ + if (objtype == OBJECT_PROCEDURE && have_defaults) + ereport(ERROR, + (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), + errmsg("procedure OUT parameters cannot appear after one with a default value"))); } i++; } /* Now construct the proper outputs as needed */ - *parameterTypes = buildoidvector(sigArgTypes, sigArgCount); + *parameterTypes = buildoidvector(inTypes, inCount); if (outCount > 0 || varCount > 0) { @@ -2179,9 +2204,6 @@ ExecuteCallStmt(CallStmt *stmt, ParamListInfo params, bool atomic, DestReceiver int nargs; int i; AclResult aclresult; - Oid *argtypes; - char **argnames; - char *argmodes; FmgrInfo flinfo; CallContext *callcontext; EState *estate; @@ -2224,29 +2246,10 @@ ExecuteCallStmt(CallStmt *stmt, ParamListInfo params, bool atomic, DestReceiver if (((Form_pg_proc) GETSTRUCT(tp))->prosecdef) callcontext->atomic = true; - /* - * Expand named arguments, defaults, etc. We do not want to scribble on - * the passed-in CallStmt parse tree, so first flat-copy fexpr, allowing - * us to replace its args field. (Note that expand_function_arguments - * will not modify any of the passed-in data structure.) - */ - { - FuncExpr *nexpr = makeNode(FuncExpr); - - memcpy(nexpr, fexpr, sizeof(FuncExpr)); - fexpr = nexpr; - } - - fexpr->args = expand_function_arguments(fexpr->args, - fexpr->funcresulttype, - tp); - nargs = list_length(fexpr->args); - - get_func_arg_info(tp, &argtypes, &argnames, &argmodes); - ReleaseSysCache(tp); /* safety check; see ExecInitFunc() */ + nargs = list_length(fexpr->args); if (nargs > FUNC_MAX_ARGS) ereport(ERROR, (errcode(ERRCODE_TOO_MANY_ARGUMENTS), @@ -2273,24 +2276,16 @@ ExecuteCallStmt(CallStmt *stmt, ParamListInfo params, bool atomic, DestReceiver i = 0; foreach(lc, fexpr->args) { - if (argmodes && argmodes[i] == PROARGMODE_OUT) - { - fcinfo->args[i].value = 0; - fcinfo->args[i].isnull = true; - } - else - { - ExprState *exprstate; - Datum val; - bool isnull; + ExprState *exprstate; + Datum val; + bool isnull; - exprstate = ExecPrepareExpr(lfirst(lc), estate); + exprstate = ExecPrepareExpr(lfirst(lc), estate); - val = ExecEvalExprSwitchContext(exprstate, econtext, &isnull); + val = ExecEvalExprSwitchContext(exprstate, econtext, &isnull); - fcinfo->args[i].value = val; - fcinfo->args[i].isnull = isnull; - } + fcinfo->args[i].value = val; + fcinfo->args[i].isnull = isnull; i++; } diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index 39580f7d5776a..32668f85a1dbe 100644 --- a/src/backend/executor/functions.c +++ b/src/backend/executor/functions.c @@ -245,8 +245,7 @@ prepare_sql_fn_parse_info(HeapTuple procedureTuple, if (isNull) proargmodes = PointerGetDatum(NULL); /* just to be sure */ - n_arg_names = get_func_input_arg_names(procedureStruct->prokind, - proargnames, proargmodes, + n_arg_names = get_func_input_arg_names(proargnames, proargmodes, &pinfo->argnames); /* Paranoia: ignore the result if too few array entries */ @@ -1536,7 +1535,7 @@ check_sql_fn_statements(List *queryTreeLists) Query *query = lfirst_node(Query, lc2); /* - * Disallow procedures with output arguments. The current + * Disallow calling procedures with output arguments. The current * implementation would just throw the output values away, unless * the statement is the last one. Per SQL standard, we should * assign the output values by name. By disallowing this here, we @@ -1545,31 +1544,12 @@ check_sql_fn_statements(List *queryTreeLists) if (query->commandType == CMD_UTILITY && IsA(query->utilityStmt, CallStmt)) { - CallStmt *stmt = castNode(CallStmt, query->utilityStmt); - HeapTuple tuple; - int numargs; - Oid *argtypes; - char **argnames; - char *argmodes; - int i; - - tuple = SearchSysCache1(PROCOID, - ObjectIdGetDatum(stmt->funcexpr->funcid)); - if (!HeapTupleIsValid(tuple)) - elog(ERROR, "cache lookup failed for function %u", - stmt->funcexpr->funcid); - numargs = get_func_arg_info(tuple, - &argtypes, &argnames, &argmodes); - ReleaseSysCache(tuple); - - for (i = 0; i < numargs; i++) - { - if (argmodes && (argmodes[i] == PROARGMODE_INOUT || - argmodes[i] == PROARGMODE_OUT)) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("calling procedures with output arguments is not supported in SQL functions"))); - } + CallStmt *stmt = (CallStmt *) query->utilityStmt; + + if (stmt->outargs != NIL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("calling procedures with output arguments is not supported in SQL functions"))); } } } diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 621f7ce0687fe..bd87f2378468a 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -3407,6 +3407,7 @@ _copyObjectWithArgs(const ObjectWithArgs *from) COPY_NODE_FIELD(objname); COPY_NODE_FIELD(objargs); + COPY_NODE_FIELD(objfuncargs); COPY_SCALAR_FIELD(args_unspecified); return newnode; @@ -3478,6 +3479,7 @@ _copyCallStmt(const CallStmt *from) COPY_NODE_FIELD(funccall); COPY_NODE_FIELD(funcexpr); + COPY_NODE_FIELD(outargs); return newnode; } diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index 3033c1934c3d6..dba3e6b31e681 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -1182,6 +1182,7 @@ _equalObjectWithArgs(const ObjectWithArgs *a, const ObjectWithArgs *b) { COMPARE_NODE_FIELD(objname); COMPARE_NODE_FIELD(objargs); + COMPARE_NODE_FIELD(objfuncargs); COMPARE_SCALAR_FIELD(args_unspecified); return true; @@ -1241,6 +1242,7 @@ _equalCallStmt(const CallStmt *a, const CallStmt *b) { COMPARE_NODE_FIELD(funccall); COMPARE_NODE_FIELD(funcexpr); + COMPARE_NODE_FIELD(outargs); return true; } diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 517712a8f4c5c..059fa702549a1 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -124,10 +124,13 @@ static Expr *simplify_function(Oid funcid, Oid result_collid, Oid input_collid, List **args_p, bool funcvariadic, bool process_args, bool allow_non_const, eval_const_expressions_context *context); -static List *reorder_function_arguments(List *args, HeapTuple func_tuple); -static List *add_function_defaults(List *args, HeapTuple func_tuple); +static List *reorder_function_arguments(List *args, int pronargs, + HeapTuple func_tuple); +static List *add_function_defaults(List *args, int pronargs, + HeapTuple func_tuple); static List *fetch_function_defaults(HeapTuple func_tuple); static void recheck_cast_function_args(List *args, Oid result_type, + Oid *proargtypes, int pronargs, HeapTuple func_tuple); static Expr *evaluate_function(Oid funcid, Oid result_type, int32 result_typmod, Oid result_collid, Oid input_collid, List *args, @@ -2326,7 +2329,8 @@ eval_const_expressions_mutator(Node *node, if (!HeapTupleIsValid(func_tuple)) elog(ERROR, "cache lookup failed for function %u", funcid); - args = expand_function_arguments(expr->args, expr->wintype, + args = expand_function_arguments(expr->args, + false, expr->wintype, func_tuple); ReleaseSysCache(func_tuple); @@ -3841,7 +3845,7 @@ simplify_function(Oid funcid, Oid result_type, int32 result_typmod, */ if (process_args) { - args = expand_function_arguments(args, result_type, func_tuple); + args = expand_function_arguments(args, false, result_type, func_tuple); args = (List *) expression_tree_mutator((Node *) args, eval_const_expressions_mutator, (void *) context); @@ -3905,6 +3909,15 @@ simplify_function(Oid funcid, Oid result_type, int32 result_typmod, * expand_function_arguments: convert named-notation args to positional args * and/or insert default args, as needed * + * Returns a possibly-transformed version of the args list. + * + * If include_out_arguments is true, then the args list and the result + * include OUT arguments. + * + * The expected result type of the call must be given, for sanity-checking + * purposes. Also, we ask the caller to provide the function's actual + * pg_proc tuple, not just its OID. + * * If we need to change anything, the input argument list is copied, not * modified. * @@ -3913,12 +3926,46 @@ simplify_function(Oid funcid, Oid result_type, int32 result_typmod, * will fall through very quickly if there's nothing to do. */ List * -expand_function_arguments(List *args, Oid result_type, HeapTuple func_tuple) +expand_function_arguments(List *args, bool include_out_arguments, + Oid result_type, HeapTuple func_tuple) { Form_pg_proc funcform = (Form_pg_proc) GETSTRUCT(func_tuple); + Oid *proargtypes = funcform->proargtypes.values; + int pronargs = funcform->pronargs; bool has_named_args = false; ListCell *lc; + /* + * If we are asked to match to OUT arguments, then use the proallargtypes + * array (which includes those); otherwise use proargtypes (which + * doesn't). Of course, if proallargtypes is null, we always use + * proargtypes. (Fetching proallargtypes is annoyingly expensive + * considering that we may have nothing to do here, but fortunately the + * common case is include_out_arguments == false.) + */ + if (include_out_arguments) + { + Datum proallargtypes; + bool isNull; + + proallargtypes = SysCacheGetAttr(PROCOID, func_tuple, + Anum_pg_proc_proallargtypes, + &isNull); + if (!isNull) + { + ArrayType *arr = DatumGetArrayTypeP(proallargtypes); + + pronargs = ARR_DIMS(arr)[0]; + if (ARR_NDIM(arr) != 1 || + pronargs < 0 || + ARR_HASNULL(arr) || + ARR_ELEMTYPE(arr) != OIDOID) + elog(ERROR, "proallargtypes is not a 1-D Oid array or it contains nulls"); + Assert(pronargs >= funcform->pronargs); + proargtypes = (Oid *) ARR_DATA_PTR(arr); + } + } + /* Do we have any named arguments? */ foreach(lc, args) { @@ -3934,16 +3981,20 @@ expand_function_arguments(List *args, Oid result_type, HeapTuple func_tuple) /* If so, we must apply reorder_function_arguments */ if (has_named_args) { - args = reorder_function_arguments(args, func_tuple); + args = reorder_function_arguments(args, pronargs, func_tuple); /* Recheck argument types and add casts if needed */ - recheck_cast_function_args(args, result_type, func_tuple); + recheck_cast_function_args(args, result_type, + proargtypes, pronargs, + func_tuple); } - else if (list_length(args) < funcform->pronargs) + else if (list_length(args) < pronargs) { /* No named args, but we seem to be short some defaults */ - args = add_function_defaults(args, func_tuple); + args = add_function_defaults(args, pronargs, func_tuple); /* Recheck argument types and add casts if needed */ - recheck_cast_function_args(args, result_type, func_tuple); + recheck_cast_function_args(args, result_type, + proargtypes, pronargs, + func_tuple); } return args; @@ -3956,10 +4007,9 @@ expand_function_arguments(List *args, Oid result_type, HeapTuple func_tuple) * impossible to form a truly valid positional call without that. */ static List * -reorder_function_arguments(List *args, HeapTuple func_tuple) +reorder_function_arguments(List *args, int pronargs, HeapTuple func_tuple) { Form_pg_proc funcform = (Form_pg_proc) GETSTRUCT(func_tuple); - int pronargs = funcform->pronargs; int nargsprovided = list_length(args); Node *argarray[FUNC_MAX_ARGS]; ListCell *lc; @@ -3986,6 +4036,7 @@ reorder_function_arguments(List *args, HeapTuple func_tuple) { NamedArgExpr *na = (NamedArgExpr *) arg; + Assert(na->argnumber >= 0 && na->argnumber < pronargs); Assert(argarray[na->argnumber] == NULL); argarray[na->argnumber] = (Node *) na->arg; } @@ -4026,9 +4077,8 @@ reorder_function_arguments(List *args, HeapTuple func_tuple) * and so we know we just need to add defaults at the end. */ static List * -add_function_defaults(List *args, HeapTuple func_tuple) +add_function_defaults(List *args, int pronargs, HeapTuple func_tuple) { - Form_pg_proc funcform = (Form_pg_proc) GETSTRUCT(func_tuple); int nargsprovided = list_length(args); List *defaults; int ndelete; @@ -4037,7 +4087,7 @@ add_function_defaults(List *args, HeapTuple func_tuple) defaults = fetch_function_defaults(func_tuple); /* Delete any unused defaults from the list */ - ndelete = nargsprovided + list_length(defaults) - funcform->pronargs; + ndelete = nargsprovided + list_length(defaults) - pronargs; if (ndelete < 0) elog(ERROR, "not enough default arguments"); if (ndelete > 0) @@ -4086,7 +4136,9 @@ fetch_function_defaults(HeapTuple func_tuple) * caller should have already copied the list structure. */ static void -recheck_cast_function_args(List *args, Oid result_type, HeapTuple func_tuple) +recheck_cast_function_args(List *args, Oid result_type, + Oid *proargtypes, int pronargs, + HeapTuple func_tuple) { Form_pg_proc funcform = (Form_pg_proc) GETSTRUCT(func_tuple); int nargs; @@ -4102,9 +4154,8 @@ recheck_cast_function_args(List *args, Oid result_type, HeapTuple func_tuple) { actual_arg_types[nargs++] = exprType((Node *) lfirst(lc)); } - Assert(nargs == funcform->pronargs); - memcpy(declared_arg_types, funcform->proargtypes.values, - funcform->pronargs * sizeof(Oid)); + Assert(nargs == pronargs); + memcpy(declared_arg_types, proargtypes, pronargs * sizeof(Oid)); rettype = enforce_generic_type_consistency(actual_arg_types, declared_arg_types, nargs, diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 9cede29d6a816..438b077004d68 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -25,6 +25,7 @@ #include "postgres.h" #include "access/sysattr.h" +#include "catalog/pg_proc.h" #include "catalog/pg_type.h" #include "miscadmin.h" #include "nodes/makefuncs.h" @@ -50,6 +51,7 @@ #include "utils/guc.h" #include "utils/queryjumble.h" #include "utils/rel.h" +#include "utils/syscache.h" /* Hook for plugins to get control at end of parse analysis */ @@ -2933,8 +2935,6 @@ transformCreateTableAsStmt(ParseState *pstate, CreateTableAsStmt *stmt) /* * transform a CallStmt - * - * We need to do parse analysis on the procedure call and its arguments. */ static Query * transformCallStmt(ParseState *pstate, CallStmt *stmt) @@ -2942,8 +2942,17 @@ transformCallStmt(ParseState *pstate, CallStmt *stmt) List *targs; ListCell *lc; Node *node; + FuncExpr *fexpr; + HeapTuple proctup; + Datum proargmodes; + bool isNull; + List *outargs = NIL; Query *result; + /* + * First, do standard parse analysis on the procedure call and its + * arguments, allowing us to identify the called procedure. + */ targs = NIL; foreach(lc, stmt->funccall->args) { @@ -2962,8 +2971,85 @@ transformCallStmt(ParseState *pstate, CallStmt *stmt) assign_expr_collations(pstate, node); - stmt->funcexpr = castNode(FuncExpr, node); + fexpr = castNode(FuncExpr, node); + + proctup = SearchSysCache1(PROCOID, ObjectIdGetDatum(fexpr->funcid)); + if (!HeapTupleIsValid(proctup)) + elog(ERROR, "cache lookup failed for function %u", fexpr->funcid); + + /* + * Expand the argument list to deal with named-argument notation and + * default arguments. For ordinary FuncExprs this'd be done during + * planning, but a CallStmt doesn't go through planning, and there seems + * no good reason not to do it here. + */ + fexpr->args = expand_function_arguments(fexpr->args, + true, + fexpr->funcresulttype, + proctup); + + /* Fetch proargmodes; if it's null, there are no output args */ + proargmodes = SysCacheGetAttr(PROCOID, proctup, + Anum_pg_proc_proargmodes, + &isNull); + if (!isNull) + { + /* + * Split the list into input arguments in fexpr->args and output + * arguments in stmt->outargs. INOUT arguments appear in both lists. + */ + ArrayType *arr; + int numargs; + char *argmodes; + List *inargs; + int i; + + arr = DatumGetArrayTypeP(proargmodes); /* ensure not toasted */ + numargs = list_length(fexpr->args); + if (ARR_NDIM(arr) != 1 || + ARR_DIMS(arr)[0] != numargs || + ARR_HASNULL(arr) || + ARR_ELEMTYPE(arr) != CHAROID) + elog(ERROR, "proargmodes is not a 1-D char array of length %d or it contains nulls", + numargs); + argmodes = (char *) ARR_DATA_PTR(arr); + + inargs = NIL; + i = 0; + foreach(lc, fexpr->args) + { + Node *n = lfirst(lc); + + switch (argmodes[i]) + { + case PROARGMODE_IN: + case PROARGMODE_VARIADIC: + inargs = lappend(inargs, n); + break; + case PROARGMODE_OUT: + outargs = lappend(outargs, n); + break; + case PROARGMODE_INOUT: + inargs = lappend(inargs, n); + outargs = lappend(outargs, copyObject(n)); + break; + default: + /* note we don't support PROARGMODE_TABLE */ + elog(ERROR, "invalid argmode %c for procedure", + argmodes[i]); + break; + } + i++; + } + fexpr->args = inargs; + } + stmt->funcexpr = fexpr; + stmt->outargs = outargs; + + ReleaseSysCache(proctup); + + /* represent the command as a utility Query */ result = makeNode(Query); result->commandType = CMD_UTILITY; result->utilityStmt = (Node *) stmt; diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 52a254928f879..eb241954387b8 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -172,7 +172,7 @@ static RoleSpec *makeRoleSpec(RoleSpecType type, int location); static void check_qualified_name(List *names, core_yyscan_t yyscanner); static List *check_func_name(List *names, core_yyscan_t yyscanner); static List *check_indirection(List *indirection, core_yyscan_t yyscanner); -static List *extractArgTypes(ObjectType objtype, List *parameters); +static List *extractArgTypes(List *parameters); static List *extractAggrArgTypes(List *aggrargs); static List *makeOrderedSetArgs(List *directargs, List *orderedargs, core_yyscan_t yyscanner); @@ -385,8 +385,8 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %type privilege %type privileges privilege_list %type privilege_target -%type function_with_argtypes aggregate_with_argtypes operator_with_argtypes procedure_with_argtypes function_with_argtypes_common -%type function_with_argtypes_list aggregate_with_argtypes_list operator_with_argtypes_list procedure_with_argtypes_list +%type function_with_argtypes aggregate_with_argtypes operator_with_argtypes +%type function_with_argtypes_list aggregate_with_argtypes_list operator_with_argtypes_list %type defacl_privilege_target %type DefACLOption %type DefACLOptionList @@ -4757,7 +4757,7 @@ AlterExtensionContentsStmt: n->object = (Node *) lcons(makeString($9), $7); $$ = (Node *)n; } - | ALTER EXTENSION name add_drop PROCEDURE procedure_with_argtypes + | ALTER EXTENSION name add_drop PROCEDURE function_with_argtypes { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); n->extname = $3; @@ -4766,7 +4766,7 @@ AlterExtensionContentsStmt: n->object = (Node *) $6; $$ = (Node *)n; } - | ALTER EXTENSION name add_drop ROUTINE procedure_with_argtypes + | ALTER EXTENSION name add_drop ROUTINE function_with_argtypes { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); n->extname = $3; @@ -6505,7 +6505,7 @@ CommentStmt: n->comment = $8; $$ = (Node *) n; } - | COMMENT ON PROCEDURE procedure_with_argtypes IS comment_text + | COMMENT ON PROCEDURE function_with_argtypes IS comment_text { CommentStmt *n = makeNode(CommentStmt); n->objtype = OBJECT_PROCEDURE; @@ -6513,7 +6513,7 @@ CommentStmt: n->comment = $6; $$ = (Node *) n; } - | COMMENT ON ROUTINE procedure_with_argtypes IS comment_text + | COMMENT ON ROUTINE function_with_argtypes IS comment_text { CommentStmt *n = makeNode(CommentStmt); n->objtype = OBJECT_ROUTINE; @@ -6659,7 +6659,7 @@ SecLabelStmt: n->label = $9; $$ = (Node *) n; } - | SECURITY LABEL opt_provider ON PROCEDURE procedure_with_argtypes + | SECURITY LABEL opt_provider ON PROCEDURE function_with_argtypes IS security_label { SecLabelStmt *n = makeNode(SecLabelStmt); @@ -7023,7 +7023,7 @@ privilege_target: n->objs = $2; $$ = n; } - | PROCEDURE procedure_with_argtypes_list + | PROCEDURE function_with_argtypes_list { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); n->targtype = ACL_TARGET_OBJECT; @@ -7031,7 +7031,7 @@ privilege_target: n->objs = $2; $$ = n; } - | ROUTINE procedure_with_argtypes_list + | ROUTINE function_with_argtypes_list { PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); n->targtype = ACL_TARGET_OBJECT; @@ -7556,33 +7556,21 @@ function_with_argtypes_list: { $$ = lappend($1, $3); } ; -procedure_with_argtypes_list: - procedure_with_argtypes { $$ = list_make1($1); } - | procedure_with_argtypes_list ',' procedure_with_argtypes - { $$ = lappend($1, $3); } - ; - function_with_argtypes: func_name func_args { ObjectWithArgs *n = makeNode(ObjectWithArgs); n->objname = $1; - n->objargs = extractArgTypes(OBJECT_FUNCTION, $2); + n->objargs = extractArgTypes($2); + n->objfuncargs = $2; $$ = n; } - | function_with_argtypes_common - { - $$ = $1; - } - ; - -function_with_argtypes_common: /* * Because of reduce/reduce conflicts, we can't use func_name * below, but we can write it out the long way, which actually * allows more cases. */ - type_func_name_keyword + | type_func_name_keyword { ObjectWithArgs *n = makeNode(ObjectWithArgs); n->objname = list_make1(makeString(pstrdup($1))); @@ -7606,24 +7594,6 @@ function_with_argtypes_common: } ; -/* - * This is different from function_with_argtypes in the call to - * extractArgTypes(). - */ -procedure_with_argtypes: - func_name func_args - { - ObjectWithArgs *n = makeNode(ObjectWithArgs); - n->objname = $1; - n->objargs = extractArgTypes(OBJECT_PROCEDURE, $2); - $$ = n; - } - | function_with_argtypes_common - { - $$ = $1; - } - ; - /* * func_args_with_defaults is separate because we only want to accept * defaults in CREATE FUNCTION, not in ALTER etc. @@ -7673,7 +7643,7 @@ func_arg: FunctionParameter *n = makeNode(FunctionParameter); n->name = $1; n->argType = $2; - n->mode = FUNC_PARAM_IN; + n->mode = FUNC_PARAM_DEFAULT; n->defexpr = NULL; $$ = n; } @@ -7691,7 +7661,7 @@ func_arg: FunctionParameter *n = makeNode(FunctionParameter); n->name = NULL; n->argType = $1; - n->mode = FUNC_PARAM_IN; + n->mode = FUNC_PARAM_DEFAULT; n->defexpr = NULL; $$ = n; } @@ -7763,7 +7733,8 @@ func_arg_with_default: /* Aggregate args can be most things that function args can be */ aggr_arg: func_arg { - if (!($1->mode == FUNC_PARAM_IN || + if (!($1->mode == FUNC_PARAM_DEFAULT || + $1->mode == FUNC_PARAM_IN || $1->mode == FUNC_PARAM_VARIADIC)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -7832,6 +7803,7 @@ aggregate_with_argtypes: ObjectWithArgs *n = makeNode(ObjectWithArgs); n->objname = $1; n->objargs = extractAggrArgTypes($2); + n->objfuncargs = (List *) linitial($2); $$ = n; } ; @@ -8056,7 +8028,7 @@ AlterFunctionStmt: n->actions = $4; $$ = (Node *) n; } - | ALTER PROCEDURE procedure_with_argtypes alterfunc_opt_list opt_restrict + | ALTER PROCEDURE function_with_argtypes alterfunc_opt_list opt_restrict { AlterFunctionStmt *n = makeNode(AlterFunctionStmt); n->objtype = OBJECT_PROCEDURE; @@ -8064,7 +8036,7 @@ AlterFunctionStmt: n->actions = $4; $$ = (Node *) n; } - | ALTER ROUTINE procedure_with_argtypes alterfunc_opt_list opt_restrict + | ALTER ROUTINE function_with_argtypes alterfunc_opt_list opt_restrict { AlterFunctionStmt *n = makeNode(AlterFunctionStmt); n->objtype = OBJECT_ROUTINE; @@ -8120,7 +8092,7 @@ RemoveFuncStmt: n->concurrent = false; $$ = (Node *)n; } - | DROP PROCEDURE procedure_with_argtypes_list opt_drop_behavior + | DROP PROCEDURE function_with_argtypes_list opt_drop_behavior { DropStmt *n = makeNode(DropStmt); n->removeType = OBJECT_PROCEDURE; @@ -8130,7 +8102,7 @@ RemoveFuncStmt: n->concurrent = false; $$ = (Node *)n; } - | DROP PROCEDURE IF_P EXISTS procedure_with_argtypes_list opt_drop_behavior + | DROP PROCEDURE IF_P EXISTS function_with_argtypes_list opt_drop_behavior { DropStmt *n = makeNode(DropStmt); n->removeType = OBJECT_PROCEDURE; @@ -8140,7 +8112,7 @@ RemoveFuncStmt: n->concurrent = false; $$ = (Node *)n; } - | DROP ROUTINE procedure_with_argtypes_list opt_drop_behavior + | DROP ROUTINE function_with_argtypes_list opt_drop_behavior { DropStmt *n = makeNode(DropStmt); n->removeType = OBJECT_ROUTINE; @@ -8150,7 +8122,7 @@ RemoveFuncStmt: n->concurrent = false; $$ = (Node *)n; } - | DROP ROUTINE IF_P EXISTS procedure_with_argtypes_list opt_drop_behavior + | DROP ROUTINE IF_P EXISTS function_with_argtypes_list opt_drop_behavior { DropStmt *n = makeNode(DropStmt); n->removeType = OBJECT_ROUTINE; @@ -8622,7 +8594,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name n->missing_ok = true; $$ = (Node *)n; } - | ALTER PROCEDURE procedure_with_argtypes RENAME TO name + | ALTER PROCEDURE function_with_argtypes RENAME TO name { RenameStmt *n = makeNode(RenameStmt); n->renameType = OBJECT_PROCEDURE; @@ -8640,7 +8612,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name n->missing_ok = false; $$ = (Node *)n; } - | ALTER ROUTINE procedure_with_argtypes RENAME TO name + | ALTER ROUTINE function_with_argtypes RENAME TO name { RenameStmt *n = makeNode(RenameStmt); n->renameType = OBJECT_ROUTINE; @@ -9051,7 +9023,7 @@ AlterObjectDependsStmt: n->remove = $4; $$ = (Node *)n; } - | ALTER PROCEDURE procedure_with_argtypes opt_no DEPENDS ON EXTENSION name + | ALTER PROCEDURE function_with_argtypes opt_no DEPENDS ON EXTENSION name { AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); n->objectType = OBJECT_PROCEDURE; @@ -9060,7 +9032,7 @@ AlterObjectDependsStmt: n->remove = $4; $$ = (Node *)n; } - | ALTER ROUTINE procedure_with_argtypes opt_no DEPENDS ON EXTENSION name + | ALTER ROUTINE function_with_argtypes opt_no DEPENDS ON EXTENSION name { AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); n->objectType = OBJECT_ROUTINE; @@ -9191,7 +9163,7 @@ AlterObjectSchemaStmt: n->missing_ok = false; $$ = (Node *)n; } - | ALTER PROCEDURE procedure_with_argtypes SET SCHEMA name + | ALTER PROCEDURE function_with_argtypes SET SCHEMA name { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); n->objectType = OBJECT_PROCEDURE; @@ -9200,7 +9172,7 @@ AlterObjectSchemaStmt: n->missing_ok = false; $$ = (Node *)n; } - | ALTER ROUTINE procedure_with_argtypes SET SCHEMA name + | ALTER ROUTINE function_with_argtypes SET SCHEMA name { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); n->objectType = OBJECT_ROUTINE; @@ -9502,7 +9474,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec n->newowner = $9; $$ = (Node *)n; } - | ALTER PROCEDURE procedure_with_argtypes OWNER TO RoleSpec + | ALTER PROCEDURE function_with_argtypes OWNER TO RoleSpec { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); n->objectType = OBJECT_PROCEDURE; @@ -9510,7 +9482,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec n->newowner = $6; $$ = (Node *)n; } - | ALTER ROUTINE procedure_with_argtypes OWNER TO RoleSpec + | ALTER ROUTINE function_with_argtypes OWNER TO RoleSpec { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); n->objectType = OBJECT_ROUTINE; @@ -16698,14 +16670,13 @@ check_indirection(List *indirection, core_yyscan_t yyscanner) } /* extractArgTypes() - * * Given a list of FunctionParameter nodes, extract a list of just the - * argument types (TypeNames) for signature parameters only (e.g., only input - * parameters for functions). This is what is needed to look up an existing - * function, which is what is wanted by the productions that use this call. + * argument types (TypeNames) for input parameters only. This is what + * is needed to look up an existing function, which is what is wanted by + * the productions that use this call. */ static List * -extractArgTypes(ObjectType objtype, List *parameters) +extractArgTypes(List *parameters) { List *result = NIL; ListCell *i; @@ -16714,7 +16685,7 @@ extractArgTypes(ObjectType objtype, List *parameters) { FunctionParameter *p = (FunctionParameter *) lfirst(i); - if ((p->mode != FUNC_PARAM_OUT || objtype == OBJECT_PROCEDURE) && p->mode != FUNC_PARAM_TABLE) + if (p->mode != FUNC_PARAM_OUT && p->mode != FUNC_PARAM_TABLE) result = lappend(result, p->argType); } return result; @@ -16727,7 +16698,7 @@ static List * extractAggrArgTypes(List *aggrargs) { Assert(list_length(aggrargs) == 2); - return extractArgTypes(OBJECT_AGGREGATE, (List *) linitial(aggrargs)); + return extractArgTypes((List *) linitial(aggrargs)); } /* makeOrderedSetArgs() @@ -17023,7 +16994,9 @@ mergeTableFuncParameters(List *func_args, List *columns) { FunctionParameter *p = (FunctionParameter *) lfirst(lc); - if (p->mode != FUNC_PARAM_IN && p->mode != FUNC_PARAM_VARIADIC) + if (p->mode != FUNC_PARAM_DEFAULT && + p->mode != FUNC_PARAM_IN && + p->mode != FUNC_PARAM_VARIADIC) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("OUT and INOUT arguments aren't allowed in TABLE functions"))); diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c index fb0ba58ff775f..3cec8de7da851 100644 --- a/src/backend/parser/parse_func.c +++ b/src/backend/parser/parse_func.c @@ -48,9 +48,10 @@ static void unify_hypothetical_args(ParseState *pstate, static Oid FuncNameAsType(List *funcname); static Node *ParseComplexProjection(ParseState *pstate, const char *funcname, Node *first_arg, int location); -static Oid LookupFuncNameInternal(List *funcname, int nargs, - const Oid *argtypes, - bool missing_ok, FuncLookupError *lookupError); +static Oid LookupFuncNameInternal(ObjectType objtype, List *funcname, + int nargs, const Oid *argtypes, + bool include_out_arguments, bool missing_ok, + FuncLookupError *lookupError); /* @@ -82,7 +83,8 @@ static Oid LookupFuncNameInternal(List *funcname, int nargs, * contain any SRF calls, last_srf can just be pstate->p_last_srf. * * proc_call is true if we are considering a CALL statement, so that the - * name must resolve to a procedure name, not anything else. + * name must resolve to a procedure name, not anything else. This flag + * also specifies that the argument list includes any OUT-mode arguments. */ Node * ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, @@ -263,7 +265,7 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, fdresult = func_get_detail(funcname, fargs, argnames, nargs, actual_arg_types, - !func_variadic, true, + !func_variadic, true, proc_call, &funcid, &rettype, &retset, &nvargs, &vatype, &declared_arg_types, &argdefaults); @@ -1395,6 +1397,7 @@ func_get_detail(List *funcname, Oid *argtypes, bool expand_variadic, bool expand_defaults, + bool include_out_arguments, Oid *funcid, /* return value */ Oid *rettype, /* return value */ bool *retset, /* return value */ @@ -1419,7 +1422,7 @@ func_get_detail(List *funcname, /* Get list of possible candidates from namespace search */ raw_candidates = FuncnameGetCandidates(funcname, nargs, fargnames, expand_variadic, expand_defaults, - false); + include_out_arguments, false); /* * Quickly check if there is an exact match to the input datatypes (there @@ -1667,7 +1670,7 @@ func_get_detail(List *funcname, defargnumbers = bms_add_member(defargnumbers, firstdefarg[i]); newdefaults = NIL; - i = pform->pronargs - pform->pronargdefaults; + i = best_candidate->nominalnargs - pform->pronargdefaults; foreach(lc, defaults) { if (bms_is_member(i, defargnumbers)) @@ -2041,12 +2044,15 @@ func_signature_string(List *funcname, int nargs, * * Possible errors: * FUNCLOOKUP_NOSUCHFUNC: we can't find a function of this name. - * FUNCLOOKUP_AMBIGUOUS: nargs == -1 and more than one function matches. + * FUNCLOOKUP_AMBIGUOUS: more than one function matches. */ static Oid -LookupFuncNameInternal(List *funcname, int nargs, const Oid *argtypes, - bool missing_ok, FuncLookupError *lookupError) +LookupFuncNameInternal(ObjectType objtype, List *funcname, + int nargs, const Oid *argtypes, + bool include_out_arguments, bool missing_ok, + FuncLookupError *lookupError) { + Oid result = InvalidOid; FuncCandidateList clist; /* NULL argtypes allowed for nullary functions only */ @@ -2055,43 +2061,62 @@ LookupFuncNameInternal(List *funcname, int nargs, const Oid *argtypes, /* Always set *lookupError, to forestall uninitialized-variable warnings */ *lookupError = FUNCLOOKUP_NOSUCHFUNC; + /* Get list of candidate objects */ clist = FuncnameGetCandidates(funcname, nargs, NIL, false, false, - missing_ok); + include_out_arguments, missing_ok); - /* - * If no arguments were specified, the name must yield a unique candidate. - */ - if (nargs < 0) + /* Scan list for a match to the arg types (if specified) and the objtype */ + for (; clist != NULL; clist = clist->next) { - if (clist) + /* Check arg type match, if specified */ + if (nargs >= 0) { - /* If there is a second match then it's ambiguous */ - if (clist->next) - { - *lookupError = FUNCLOOKUP_AMBIGUOUS; - return InvalidOid; - } - /* Otherwise return the match */ - return clist->oid; + /* if nargs==0, argtypes can be null; don't pass that to memcmp */ + if (nargs > 0 && + memcmp(argtypes, clist->args, nargs * sizeof(Oid)) != 0) + continue; } - else + + /* Check for duplicates reported by FuncnameGetCandidates */ + if (!OidIsValid(clist->oid)) + { + *lookupError = FUNCLOOKUP_AMBIGUOUS; return InvalidOid; - } + } - /* - * Otherwise, look for a match to the arg types. FuncnameGetCandidates - * has ensured that there's at most one match in the returned list. - */ - while (clist) - { - /* if nargs==0, argtypes can be null; don't pass that to memcmp */ - if (nargs == 0 || - memcmp(argtypes, clist->args, nargs * sizeof(Oid)) == 0) - return clist->oid; - clist = clist->next; + /* Check objtype match, if specified */ + switch (objtype) + { + case OBJECT_FUNCTION: + case OBJECT_AGGREGATE: + /* Ignore procedures */ + if (get_func_prokind(clist->oid) == PROKIND_PROCEDURE) + continue; + break; + case OBJECT_PROCEDURE: + /* Ignore non-procedures */ + if (get_func_prokind(clist->oid) != PROKIND_PROCEDURE) + continue; + break; + case OBJECT_ROUTINE: + /* no restriction */ + break; + default: + Assert(false); + } + + /* Check for multiple matches */ + if (OidIsValid(result)) + { + *lookupError = FUNCLOOKUP_AMBIGUOUS; + return InvalidOid; + } + + /* OK, we have a candidate */ + result = clist->oid; } - return InvalidOid; + return result; } /* @@ -2111,6 +2136,10 @@ LookupFuncNameInternal(List *funcname, int nargs, const Oid *argtypes, * If nargs == -1 and multiple functions are found matching this function name * we will raise an ambiguous-function error, regardless of what missing_ok is * set to. + * + * Only functions will be found; procedures will be ignored even if they + * match the name and argument types. (However, we don't trouble to reject + * aggregates or window functions here.) */ Oid LookupFuncName(List *funcname, int nargs, const Oid *argtypes, bool missing_ok) @@ -2118,7 +2147,9 @@ LookupFuncName(List *funcname, int nargs, const Oid *argtypes, bool missing_ok) Oid funcoid; FuncLookupError lookupError; - funcoid = LookupFuncNameInternal(funcname, nargs, argtypes, missing_ok, + funcoid = LookupFuncNameInternal(OBJECT_FUNCTION, + funcname, nargs, argtypes, + false, missing_ok, &lookupError); if (OidIsValid(funcoid)) @@ -2207,10 +2238,14 @@ LookupFuncWithArgs(ObjectType objtype, ObjectWithArgs *func, bool missing_ok) FUNC_MAX_ARGS))); } + /* + * First, perform a lookup considering only input arguments (traditional + * Postgres rules). + */ i = 0; foreach(args_item, func->objargs) { - TypeName *t = (TypeName *) lfirst(args_item); + TypeName *t = lfirst_node(TypeName, args_item); argoids[i] = LookupTypeNameOid(NULL, t, missing_ok); if (!OidIsValid(argoids[i])) @@ -2224,9 +2259,83 @@ LookupFuncWithArgs(ObjectType objtype, ObjectWithArgs *func, bool missing_ok) */ nargs = func->args_unspecified ? -1 : argcount; - oid = LookupFuncNameInternal(func->objname, nargs, argoids, missing_ok, + /* + * In args_unspecified mode, also tell LookupFuncNameInternal to consider + * the object type, since there seems no reason not to. However, if we + * have an argument list, disable the objtype check, because we'd rather + * complain about "object is of wrong type" than "object doesn't exist". + * (Note that with args, FuncnameGetCandidates will have ensured there's + * only one argtype match, so we're not risking an ambiguity failure via + * this choice.) + */ + oid = LookupFuncNameInternal(func->args_unspecified ? objtype : OBJECT_ROUTINE, + func->objname, nargs, argoids, + false, missing_ok, &lookupError); + /* + * If PROCEDURE or ROUTINE was specified, and we have an argument list + * that contains no parameter mode markers, and we didn't already discover + * that there's ambiguity, perform a lookup considering all arguments. + * (Note: for a zero-argument procedure, or in args_unspecified mode, the + * normal lookup is sufficient; so it's OK to require non-NIL objfuncargs + * to perform this lookup.) + */ + if ((objtype == OBJECT_PROCEDURE || objtype == OBJECT_ROUTINE) && + func->objfuncargs != NIL && + lookupError != FUNCLOOKUP_AMBIGUOUS) + { + bool have_param_mode = false; + + /* + * Check for non-default parameter mode markers. If there are any, + * then the command does not conform to SQL-spec syntax, so we may + * assume that the traditional Postgres lookup method of considering + * only input parameters is sufficient. (Note that because the spec + * doesn't have OUT arguments for functions, we also don't need this + * hack in FUNCTION or AGGREGATE mode.) + */ + foreach(args_item, func->objfuncargs) + { + FunctionParameter *fp = lfirst_node(FunctionParameter, args_item); + + if (fp->mode != FUNC_PARAM_DEFAULT) + { + have_param_mode = true; + break; + } + } + + if (!have_param_mode) + { + Oid poid; + + /* Without mode marks, objargs surely includes all params */ + Assert(list_length(func->objfuncargs) == argcount); + + /* For objtype == OBJECT_PROCEDURE, we can ignore non-procedures */ + poid = LookupFuncNameInternal(objtype, func->objname, + argcount, argoids, + true, missing_ok, + &lookupError); + + /* Combine results, handling ambiguity */ + if (OidIsValid(poid)) + { + if (OidIsValid(oid) && oid != poid) + { + /* oops, we got hits both ways, on different objects */ + oid = InvalidOid; + lookupError = FUNCLOOKUP_AMBIGUOUS; + } + else + oid = poid; + } + else if (lookupError == FUNCLOOKUP_AMBIGUOUS) + oid = InvalidOid; + } + } + if (OidIsValid(oid)) { /* @@ -2235,6 +2344,10 @@ LookupFuncWithArgs(ObjectType objtype, ObjectWithArgs *func, bool missing_ok) * we allow the objtype of FUNCTION to include aggregates and window * functions; but we draw the line if the object is a procedure. That * is a new enough feature that this historical rule does not apply. + * + * (This check is partially redundant with the objtype check in + * LookupFuncNameInternal; but not entirely, since we often don't tell + * LookupFuncNameInternal to apply that check at all.) */ switch (objtype) { @@ -2345,28 +2458,32 @@ LookupFuncWithArgs(ObjectType objtype, ObjectWithArgs *func, bool missing_ok) (errcode(ERRCODE_AMBIGUOUS_FUNCTION), errmsg("function name \"%s\" is not unique", NameListToString(func->objname)), - errhint("Specify the argument list to select the function unambiguously."))); + func->args_unspecified ? + errhint("Specify the argument list to select the function unambiguously.") : 0)); break; case OBJECT_PROCEDURE: ereport(ERROR, (errcode(ERRCODE_AMBIGUOUS_FUNCTION), errmsg("procedure name \"%s\" is not unique", NameListToString(func->objname)), - errhint("Specify the argument list to select the procedure unambiguously."))); + func->args_unspecified ? + errhint("Specify the argument list to select the procedure unambiguously.") : 0)); break; case OBJECT_AGGREGATE: ereport(ERROR, (errcode(ERRCODE_AMBIGUOUS_FUNCTION), errmsg("aggregate name \"%s\" is not unique", NameListToString(func->objname)), - errhint("Specify the argument list to select the aggregate unambiguously."))); + func->args_unspecified ? + errhint("Specify the argument list to select the aggregate unambiguously.") : 0)); break; case OBJECT_ROUTINE: ereport(ERROR, (errcode(ERRCODE_AMBIGUOUS_FUNCTION), errmsg("routine name \"%s\" is not unique", NameListToString(func->objname)), - errhint("Specify the argument list to select the routine unambiguously."))); + func->args_unspecified ? + errhint("Specify the argument list to select the routine unambiguously.") : 0)); break; default: diff --git a/src/backend/parser/parse_oper.c b/src/backend/parser/parse_oper.c index c379d72fcec99..4e4607999036d 100644 --- a/src/backend/parser/parse_oper.c +++ b/src/backend/parser/parse_oper.c @@ -150,8 +150,8 @@ LookupOperWithArgs(ObjectWithArgs *oper, bool noError) rightoid; Assert(list_length(oper->objargs) == 2); - oprleft = linitial(oper->objargs); - oprright = lsecond(oper->objargs); + oprleft = linitial_node(TypeName, oper->objargs); + oprright = lsecond_node(TypeName, oper->objargs); if (oprleft == NULL) leftoid = InvalidOid; diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c index f998fe20763da..e4fb9d31d92a8 100644 --- a/src/backend/utils/adt/regproc.c +++ b/src/backend/utils/adt/regproc.c @@ -93,7 +93,7 @@ regprocin(PG_FUNCTION_ARGS) * pg_proc entries in the current search path. */ names = stringToQualifiedNameList(pro_name_or_oid); - clist = FuncnameGetCandidates(names, -1, NIL, false, false, false); + clist = FuncnameGetCandidates(names, -1, NIL, false, false, false, false); if (clist == NULL) ereport(ERROR, @@ -127,7 +127,7 @@ to_regproc(PG_FUNCTION_ARGS) * entries in the current search path. */ names = stringToQualifiedNameList(pro_name); - clist = FuncnameGetCandidates(names, -1, NIL, false, false, true); + clist = FuncnameGetCandidates(names, -1, NIL, false, false, false, true); if (clist == NULL || clist->next != NULL) PG_RETURN_NULL(); @@ -175,7 +175,7 @@ regprocout(PG_FUNCTION_ARGS) * qualify it. */ clist = FuncnameGetCandidates(list_make1(makeString(proname)), - -1, NIL, false, false, false); + -1, NIL, false, false, false, false); if (clist != NULL && clist->next == NULL && clist->oid == proid) nspname = NULL; @@ -262,7 +262,8 @@ regprocedurein(PG_FUNCTION_ARGS) */ parseNameAndArgTypes(pro_name_or_oid, false, &names, &nargs, argtypes); - clist = FuncnameGetCandidates(names, nargs, NIL, false, false, false); + clist = FuncnameGetCandidates(names, nargs, NIL, false, false, + false, false); for (; clist; clist = clist->next) { @@ -301,7 +302,7 @@ to_regprocedure(PG_FUNCTION_ARGS) */ parseNameAndArgTypes(pro_name, false, &names, &nargs, argtypes); - clist = FuncnameGetCandidates(names, nargs, NIL, false, false, true); + clist = FuncnameGetCandidates(names, nargs, NIL, false, false, false, true); for (; clist; clist = clist->next) { diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 84ad62caea327..3719755a0de67 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -3217,7 +3217,15 @@ print_function_arguments(StringInfo buf, HeapTuple proctup, switch (argmode) { case PROARGMODE_IN: - modename = ""; + + /* + * For procedures, explicitly mark all argument modes, so as + * to avoid ambiguity with the SQL syntax for DROP PROCEDURE. + */ + if (proc->prokind == PROKIND_PROCEDURE) + modename = "IN "; + else + modename = ""; isinput = true; break; case PROARGMODE_INOUT: @@ -11615,7 +11623,7 @@ generate_function_name(Oid funcid, int nargs, List *argnames, Oid *argtypes, if (!force_qualify) p_result = func_get_detail(list_make1(makeString(proname)), NIL, argnames, nargs, argtypes, - !use_variadic, true, + !use_variadic, true, false, &p_funcid, &p_rettype, &p_retset, &p_nvargs, &p_vatype, &p_true_typeids, NULL); diff --git a/src/backend/utils/fmgr/funcapi.c b/src/backend/utils/fmgr/funcapi.c index 717b62907c78e..e94b8037ec032 100644 --- a/src/backend/utils/fmgr/funcapi.c +++ b/src/backend/utils/fmgr/funcapi.c @@ -1409,8 +1409,7 @@ get_func_trftypes(HeapTuple procTup, * are set to NULL. You don't get anything if proargnames is NULL. */ int -get_func_input_arg_names(char prokind, - Datum proargnames, Datum proargmodes, +get_func_input_arg_names(Datum proargnames, Datum proargmodes, char ***arg_names) { ArrayType *arr; @@ -1469,7 +1468,6 @@ get_func_input_arg_names(char prokind, if (argmodes == NULL || argmodes[i] == PROARGMODE_IN || argmodes[i] == PROARGMODE_INOUT || - (argmodes[i] == PROARGMODE_OUT && prokind == PROKIND_PROCEDURE) || argmodes[i] == PROARGMODE_VARIADIC) { char *pname = TextDatumGetCString(argnames[i]); diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index 4bc845e57c399..244507c97c180 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -1898,7 +1898,7 @@ create_sql => 'CREATE PROCEDURE dump_test.ptest1(a int) LANGUAGE SQL AS $$ INSERT INTO dump_test.test_table (col1) VALUES (a) $$;', regexp => qr/^ - \QCREATE PROCEDURE dump_test.ptest1(a integer)\E + \QCREATE PROCEDURE dump_test.ptest1(IN a integer)\E \n\s+\QLANGUAGE sql\E \n\s+AS\ \$\$\Q INSERT INTO dump_test.test_table (col1) VALUES (a) \E\$\$; /xm, diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 38fb958a8db14..d5dada949c334 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202106062 +#define CATALOG_VERSION_NO 202106101 #endif diff --git a/src/include/catalog/namespace.h b/src/include/catalog/namespace.h index aa2774e2d4ec7..b98f28435604a 100644 --- a/src/include/catalog/namespace.h +++ b/src/include/catalog/namespace.h @@ -30,6 +30,7 @@ typedef struct _FuncCandidateList struct _FuncCandidateList *next; int pathpos; /* for internal use of namespace lookup */ Oid oid; /* the function or operator's OID */ + int nominalnargs; /* either pronargs or length(proallargtypes) */ int nargs; /* number of arg types returned */ int nvargs; /* number of args to become variadic array */ int ndargs; /* number of defaulted args */ @@ -99,6 +100,7 @@ extern FuncCandidateList FuncnameGetCandidates(List *names, int nargs, List *argnames, bool expand_variadic, bool expand_defaults, + bool include_out_arguments, bool missing_ok); extern bool FunctionIsVisible(Oid funcid); diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 448d9898cb31f..a65afe7bc4b62 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -91,7 +91,7 @@ CATALOG(pg_proc,1255,ProcedureRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(81,Proce * proargtypes */ - /* parameter types (excludes OUT params of functions) */ + /* parameter types (excludes OUT params) */ oidvector proargtypes BKI_LOOKUP(pg_type) BKI_FORCE_NOT_NULL; #ifdef CATALOG_VARLEN diff --git a/src/include/funcapi.h b/src/include/funcapi.h index 83e6bc2a1fb97..f1304d47e34d6 100644 --- a/src/include/funcapi.h +++ b/src/include/funcapi.h @@ -172,8 +172,7 @@ extern int get_func_arg_info(HeapTuple procTup, Oid **p_argtypes, char ***p_argnames, char **p_argmodes); -extern int get_func_input_arg_names(char prokind, - Datum proargnames, Datum proargmodes, +extern int get_func_input_arg_names(Datum proargnames, Datum proargmodes, char ***arg_names); extern int get_func_trftypes(HeapTuple procTup, Oid **p_trftypes); diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index ef73342019fae..58328c437740e 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -2024,18 +2024,29 @@ typedef struct GrantStmt } GrantStmt; /* - * Note: ObjectWithArgs carries only the types of the input parameters of the - * function. So it is sufficient to identify an existing function, but it - * is not enough info to define a function nor to call it. + * ObjectWithArgs represents a function/procedure/operator name plus parameter + * identification. + * + * objargs includes only the types of the input parameters of the object. + * In some contexts, that will be all we have, and it's enough to look up + * objects according to the traditional Postgres rules (i.e., when only input + * arguments matter). + * + * objfuncargs, if not NIL, carries the full specification of the parameter + * list, including parameter mode annotations. + * + * Some grammar productions can set args_unspecified = true instead of + * providing parameter info. In this case, lookup will succeed only if + * the object name is unique. Note that otherwise, NIL parameter lists + * mean zero arguments. */ typedef struct ObjectWithArgs { NodeTag type; List *objname; /* qualified name of function/operator */ - List *objargs; /* list of Typename nodes */ - bool args_unspecified; /* argument list was omitted, so name must - * be unique (note that objargs == NIL - * means zero args) */ + List *objargs; /* list of Typename nodes (input args only) */ + List *objfuncargs; /* list of FunctionParameter nodes */ + bool args_unspecified; /* argument list was omitted? */ } ObjectWithArgs; /* @@ -2955,7 +2966,9 @@ typedef enum FunctionParameterMode FUNC_PARAM_OUT = 'o', /* output only */ FUNC_PARAM_INOUT = 'b', /* both */ FUNC_PARAM_VARIADIC = 'v', /* variadic (always input) */ - FUNC_PARAM_TABLE = 't' /* table function output column */ + FUNC_PARAM_TABLE = 't', /* table function output column */ + /* this is not used in pg_proc: */ + FUNC_PARAM_DEFAULT = 'd' /* default; effectively same as IN */ } FunctionParameterMode; typedef struct FunctionParameter @@ -2998,13 +3011,19 @@ typedef struct InlineCodeBlock /* ---------------------- * CALL statement + * + * OUT-mode arguments are removed from the transformed funcexpr. The outargs + * list contains copies of the expressions for all output arguments, in the + * order of the procedure's declared arguments. (outargs is never evaluated, + * but is useful to the caller as a reference for what to assign to.) * ---------------------- */ typedef struct CallStmt { NodeTag type; FuncCall *funccall; /* from the parser */ - FuncExpr *funcexpr; /* transformed */ + FuncExpr *funcexpr; /* transformed call, with only input args */ + List *outargs; /* transformed output-argument expressions */ } CallStmt; typedef struct CallContext diff --git a/src/include/optimizer/optimizer.h b/src/include/optimizer/optimizer.h index 68ebb84bf5d47..41b49b26625dd 100644 --- a/src/include/optimizer/optimizer.h +++ b/src/include/optimizer/optimizer.h @@ -153,7 +153,8 @@ extern Node *estimate_expression_value(PlannerInfo *root, Node *node); extern Expr *evaluate_expr(Expr *expr, Oid result_type, int32 result_typmod, Oid result_collation); -extern List *expand_function_arguments(List *args, Oid result_type, +extern List *expand_function_arguments(List *args, bool include_out_arguments, + Oid result_type, struct HeapTupleData *func_tuple); /* in util/predtest.c: */ diff --git a/src/include/parser/parse_func.h b/src/include/parser/parse_func.h index aaf07f8f73d8e..57795a86e4a78 100644 --- a/src/include/parser/parse_func.h +++ b/src/include/parser/parse_func.h @@ -39,6 +39,7 @@ extern FuncDetailCode func_get_detail(List *funcname, List *fargs, List *fargnames, int nargs, Oid *argtypes, bool expand_variadic, bool expand_defaults, + bool include_out_arguments, Oid *funcid, Oid *rettype, bool *retset, int *nvargs, Oid *vatype, Oid **true_typeids, List **argdefaults); diff --git a/src/pl/plpgsql/src/expected/plpgsql_call.out b/src/pl/plpgsql/src/expected/plpgsql_call.out index c804a3ffbfe52..7b156f348938b 100644 --- a/src/pl/plpgsql/src/expected/plpgsql_call.out +++ b/src/pl/plpgsql/src/expected/plpgsql_call.out @@ -100,9 +100,12 @@ DECLARE BEGIN CALL test_proc6(2, x, y); RAISE INFO 'x = %, y = %', x, y; + CALL test_proc6(2, c => y, b => x); + RAISE INFO 'x = %, y = %', x, y; END; $$; INFO: x = 6, y = 8 +INFO: x = 12, y = 16 DO LANGUAGE plpgsql $$ @@ -304,6 +307,79 @@ END $$; NOTICE: a: 10, b: NOTICE: _a: 10, _b: 20 +CREATE PROCEDURE test_proc10(IN a int, OUT b int, IN c int DEFAULT 11) +LANGUAGE plpgsql +AS $$ +BEGIN + RAISE NOTICE 'a: %, b: %, c: %', a, b, c; + b := a - c; +END; +$$; +DO $$ +DECLARE _a int; _b int; _c int; +BEGIN + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, _b, _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, _b, c => _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(a => _a, b => _b, c => _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, c => _c, b => _b); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, _b); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, b => _b); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(b => _b, a => _a); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; +END +$$; +NOTICE: a: 10, b: , c: 7 +NOTICE: _a: 10, _b: 3, _c: 7 +NOTICE: a: 10, b: , c: 7 +NOTICE: _a: 10, _b: 3, _c: 7 +NOTICE: a: 10, b: , c: 7 +NOTICE: _a: 10, _b: 3, _c: 7 +NOTICE: a: 10, b: , c: 7 +NOTICE: _a: 10, _b: 3, _c: 7 +NOTICE: a: 10, b: , c: 11 +NOTICE: _a: 10, _b: -1, _c: 7 +NOTICE: a: 10, b: , c: 11 +NOTICE: _a: 10, _b: -1, _c: 7 +NOTICE: a: 10, b: , c: 11 +NOTICE: _a: 10, _b: -1, _c: 7 +-- OUT + VARIADIC +CREATE PROCEDURE test_proc11(a OUT int, VARIADIC b int[]) +LANGUAGE plpgsql +AS $$ +BEGIN + RAISE NOTICE 'a: %, b: %', a, b; + a := b[1] + b[2]; +END; +$$; +DO $$ +DECLARE _a int; _b int; _c int; +BEGIN + _a := 10; _b := 30; _c := 7; + CALL test_proc11(_a, _b, _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; +END +$$; +NOTICE: a: , b: {30,7} +NOTICE: _a: 37, _b: 30, _c: 7 -- transition variable assignment TRUNCATE test1; CREATE FUNCTION triggerfunc1() RETURNS trigger diff --git a/src/pl/plpgsql/src/pl_comp.c b/src/pl/plpgsql/src/pl_comp.c index ce8d97447d1d3..a68a2077c3679 100644 --- a/src/pl/plpgsql/src/pl_comp.c +++ b/src/pl/plpgsql/src/pl_comp.c @@ -460,7 +460,6 @@ do_compile(FunctionCallInfo fcinfo, /* Remember arguments in appropriate arrays */ if (argmode == PROARGMODE_IN || argmode == PROARGMODE_INOUT || - (argmode == PROARGMODE_OUT && function->fn_prokind == PROKIND_PROCEDURE) || argmode == PROARGMODE_VARIADIC) in_arg_varnos[num_in_args++] = argvariable->dno; if (argmode == PROARGMODE_OUT || diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 207c4424facbf..0ce382e123251 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -2246,18 +2246,17 @@ make_callstmt_target(PLpgSQL_execstate *estate, PLpgSQL_expr *expr) { List *plansources; CachedPlanSource *plansource; - Node *node; + CallStmt *stmt; FuncExpr *funcexpr; HeapTuple func_tuple; - List *funcargs; Oid *argtypes; char **argnames; char *argmodes; + int numargs; MemoryContext oldcontext; PLpgSQL_row *row; int nfields; int i; - ListCell *lc; /* Use eval_mcontext for any cruft accumulated here */ oldcontext = MemoryContextSwitchTo(get_eval_mcontext(estate)); @@ -2271,11 +2270,12 @@ make_callstmt_target(PLpgSQL_execstate *estate, PLpgSQL_expr *expr) plansource = (CachedPlanSource *) linitial(plansources); if (list_length(plansource->query_list) != 1) elog(ERROR, "query for CALL statement is not a CallStmt"); - node = linitial_node(Query, plansource->query_list)->utilityStmt; - if (node == NULL || !IsA(node, CallStmt)) + stmt = (CallStmt *) linitial_node(Query, + plansource->query_list)->utilityStmt; + if (stmt == NULL || !IsA(stmt, CallStmt)) elog(ERROR, "query for CALL statement is not a CallStmt"); - funcexpr = ((CallStmt *) node)->funcexpr; + funcexpr = stmt->funcexpr; func_tuple = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcexpr->funcid)); @@ -2284,16 +2284,10 @@ make_callstmt_target(PLpgSQL_execstate *estate, PLpgSQL_expr *expr) funcexpr->funcid); /* - * Extract function arguments, and expand any named-arg notation + * Get the argument names and modes, so that we can deliver on-point error + * messages when something is wrong. */ - funcargs = expand_function_arguments(funcexpr->args, - funcexpr->funcresulttype, - func_tuple); - - /* - * Get the argument names and modes, too - */ - get_func_arg_info(func_tuple, &argtypes, &argnames, &argmodes); + numargs = get_func_arg_info(func_tuple, &argtypes, &argnames, &argmodes); ReleaseSysCache(func_tuple); @@ -2307,7 +2301,7 @@ make_callstmt_target(PLpgSQL_execstate *estate, PLpgSQL_expr *expr) row->dtype = PLPGSQL_DTYPE_ROW; row->refname = "(unnamed row)"; row->lineno = -1; - row->varnos = (int *) palloc(sizeof(int) * list_length(funcargs)); + row->varnos = (int *) palloc(numargs * sizeof(int)); MemoryContextSwitchTo(get_eval_mcontext(estate)); @@ -2317,15 +2311,14 @@ make_callstmt_target(PLpgSQL_execstate *estate, PLpgSQL_expr *expr) * Datum. */ nfields = 0; - i = 0; - foreach(lc, funcargs) + for (i = 0; i < numargs; i++) { - Node *n = lfirst(lc); - if (argmodes && (argmodes[i] == PROARGMODE_INOUT || argmodes[i] == PROARGMODE_OUT)) { + Node *n = list_nth(stmt->outargs, nfields); + if (IsA(n, Param)) { Param *param = (Param *) n; @@ -2348,9 +2341,10 @@ make_callstmt_target(PLpgSQL_execstate *estate, PLpgSQL_expr *expr) i + 1))); } } - i++; } + Assert(nfields == list_length(stmt->outargs)); + row->nfields = nfields; MemoryContextSwitchTo(oldcontext); diff --git a/src/pl/plpgsql/src/sql/plpgsql_call.sql b/src/pl/plpgsql/src/sql/plpgsql_call.sql index c61a75be9bda7..8108d05060914 100644 --- a/src/pl/plpgsql/src/sql/plpgsql_call.sql +++ b/src/pl/plpgsql/src/sql/plpgsql_call.sql @@ -93,6 +93,8 @@ DECLARE BEGIN CALL test_proc6(2, x, y); RAISE INFO 'x = %, y = %', x, y; + CALL test_proc6(2, c => y, b => x); + RAISE INFO 'x = %, y = %', x, y; END; $$; @@ -281,6 +283,68 @@ BEGIN END $$; +CREATE PROCEDURE test_proc10(IN a int, OUT b int, IN c int DEFAULT 11) +LANGUAGE plpgsql +AS $$ +BEGIN + RAISE NOTICE 'a: %, b: %, c: %', a, b, c; + b := a - c; +END; +$$; + +DO $$ +DECLARE _a int; _b int; _c int; +BEGIN + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, _b, _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, _b, c => _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(a => _a, b => _b, c => _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, c => _c, b => _b); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, _b); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, b => _b); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(b => _b, a => _a); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; +END +$$; + +-- OUT + VARIADIC + +CREATE PROCEDURE test_proc11(a OUT int, VARIADIC b int[]) +LANGUAGE plpgsql +AS $$ +BEGIN + RAISE NOTICE 'a: %, b: %', a, b; + a := b[1] + b[2]; +END; +$$; + +DO $$ +DECLARE _a int; _b int; _c int; +BEGIN + _a := 10; _b := 30; _c := 7; + CALL test_proc11(_a, _b, _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; +END +$$; + -- transition variable assignment diff --git a/src/pl/plpython/expected/plpython_call.out b/src/pl/plpython/expected/plpython_call.out index c3f3c8e95e573..55e1027246a26 100644 --- a/src/pl/plpython/expected/plpython_call.out +++ b/src/pl/plpython/expected/plpython_call.out @@ -56,7 +56,7 @@ CALL test_proc6(2, 3, 4); CREATE PROCEDURE test_proc9(IN a int, OUT b int) LANGUAGE plpythonu AS $$ -plpy.notice("a: %s, b: %s" % (a, b)) +plpy.notice("a: %s" % (a)) return (a * 2,) $$; DO $$ @@ -67,7 +67,7 @@ BEGIN RAISE NOTICE '_a: %, _b: %', _a, _b; END $$; -NOTICE: a: 10, b: None +NOTICE: a: 10 NOTICE: _a: 10, _b: 20 DROP PROCEDURE test_proc1; DROP PROCEDURE test_proc2; diff --git a/src/pl/plpython/plpy_procedure.c b/src/pl/plpython/plpy_procedure.c index b7c0b5cebed0a..494f109b32320 100644 --- a/src/pl/plpython/plpy_procedure.c +++ b/src/pl/plpython/plpy_procedure.c @@ -272,7 +272,7 @@ PLy_procedure_create(HeapTuple procTup, Oid fn_oid, bool is_trigger) /* proc->nargs was initialized to 0 above */ for (i = 0; i < total; i++) { - if ((modes[i] != PROARGMODE_OUT || proc->is_procedure) && + if (modes[i] != PROARGMODE_OUT && modes[i] != PROARGMODE_TABLE) (proc->nargs)++; } @@ -288,7 +288,7 @@ PLy_procedure_create(HeapTuple procTup, Oid fn_oid, bool is_trigger) Form_pg_type argTypeStruct; if (modes && - ((modes[i] == PROARGMODE_OUT && !proc->is_procedure) || + (modes[i] == PROARGMODE_OUT || modes[i] == PROARGMODE_TABLE)) continue; /* skip OUT arguments */ diff --git a/src/pl/plpython/sql/plpython_call.sql b/src/pl/plpython/sql/plpython_call.sql index 46e89b1a9e1c6..b0b3705ae3ca5 100644 --- a/src/pl/plpython/sql/plpython_call.sql +++ b/src/pl/plpython/sql/plpython_call.sql @@ -59,7 +59,7 @@ CALL test_proc6(2, 3, 4); CREATE PROCEDURE test_proc9(IN a int, OUT b int) LANGUAGE plpythonu AS $$ -plpy.notice("a: %s, b: %s" % (a, b)) +plpy.notice("a: %s" % (a)) return (a * 2,) $$; diff --git a/src/pl/tcl/expected/pltcl_call.out b/src/pl/tcl/expected/pltcl_call.out index f0eb356cf23ac..e4498375ec1a0 100644 --- a/src/pl/tcl/expected/pltcl_call.out +++ b/src/pl/tcl/expected/pltcl_call.out @@ -53,7 +53,7 @@ CALL test_proc6(2, 3, 4); CREATE PROCEDURE test_proc9(IN a int, OUT b int) LANGUAGE pltcl AS $$ -elog NOTICE "a: $1, b: $2" +elog NOTICE "a: $1" return [list b [expr {$1 * 2}]] $$; DO $$ @@ -64,7 +64,7 @@ BEGIN RAISE NOTICE '_a: %, _b: %', _a, _b; END $$; -NOTICE: a: 10, b: +NOTICE: a: 10 NOTICE: _a: 10, _b: 20 DROP PROCEDURE test_proc1; DROP PROCEDURE test_proc2; diff --git a/src/pl/tcl/sql/pltcl_call.sql b/src/pl/tcl/sql/pltcl_call.sql index 963277e1fb87b..37efbdefc2315 100644 --- a/src/pl/tcl/sql/pltcl_call.sql +++ b/src/pl/tcl/sql/pltcl_call.sql @@ -57,7 +57,7 @@ CALL test_proc6(2, 3, 4); CREATE PROCEDURE test_proc9(IN a int, OUT b int) LANGUAGE pltcl AS $$ -elog NOTICE "a: $1, b: $2" +elog NOTICE "a: $1" return [list b [expr {$1 * 2}]] $$; diff --git a/src/test/regress/expected/create_procedure.out b/src/test/regress/expected/create_procedure.out index d45575561e423..46c827f9791c6 100644 --- a/src/test/regress/expected/create_procedure.out +++ b/src/test/regress/expected/create_procedure.out @@ -19,17 +19,17 @@ $$; List of functions Schema | Name | Result data type | Argument data types | Type --------+--------+------------------+---------------------+------ - public | ptest1 | | x text | proc + public | ptest1 | | IN x text | proc (1 row) SELECT pg_get_functiondef('ptest1'::regproc); - pg_get_functiondef ---------------------------------------------------- - CREATE OR REPLACE PROCEDURE public.ptest1(x text)+ - LANGUAGE sql + - AS $procedure$ + - INSERT INTO cp_test VALUES (1, x); + - $procedure$ + + pg_get_functiondef +------------------------------------------------------ + CREATE OR REPLACE PROCEDURE public.ptest1(IN x text)+ + LANGUAGE sql + + AS $procedure$ + + INSERT INTO cp_test VALUES (1, x); + + $procedure$ + (1 row) @@ -46,7 +46,7 @@ SELECT pg_get_functiondef('ptest1'::regproc); List of functions Schema | Name | Result data type | Argument data types | Type --------+--------+------------------+---------------------+------ - public | ptest1 | | x text | proc + public | ptest1 | | IN x text | proc (1 row) SELECT ptest1('x'); -- error @@ -75,18 +75,18 @@ END; List of functions Schema | Name | Result data type | Argument data types | Type --------+---------+------------------+---------------------+------ - public | ptest1s | | x text | proc + public | ptest1s | | IN x text | proc (1 row) SELECT pg_get_functiondef('ptest1s'::regproc); - pg_get_functiondef ----------------------------------------------------- - CREATE OR REPLACE PROCEDURE public.ptest1s(x text)+ - LANGUAGE sql + - BEGIN ATOMIC + - INSERT INTO cp_test (a, b) + - VALUES (1, ptest1s.x); + - END + + pg_get_functiondef +------------------------------------------------------- + CREATE OR REPLACE PROCEDURE public.ptest1s(IN x text)+ + LANGUAGE sql + + BEGIN ATOMIC + + INSERT INTO cp_test (a, b) + + VALUES (1, ptest1s.x); + + END + (1 row) @@ -196,16 +196,16 @@ END; List of functions Schema | Name | Result data type | Argument data types | Type --------+--------+------------------+---------------------+------ - public | ptest8 | | x text | proc + public | ptest8 | | IN x text | proc (1 row) SELECT pg_get_functiondef('ptest8'::regproc); - pg_get_functiondef ---------------------------------------------------- - CREATE OR REPLACE PROCEDURE public.ptest8(x text)+ - LANGUAGE sql + - BEGIN ATOMIC + - END + + pg_get_functiondef +------------------------------------------------------ + CREATE OR REPLACE PROCEDURE public.ptest8(IN x text)+ + LANGUAGE sql + + BEGIN ATOMIC + + END + (1 row) @@ -217,12 +217,105 @@ AS $$ INSERT INTO cp_test VALUES (1, 'a'); SELECT 1; $$; +-- standard way to do a call: CALL ptest9(NULL); a --- 1 (1 row) +-- you can write an expression, but it's not evaluated +CALL ptest9(1/0); -- no error + a +--- + 1 +(1 row) + +-- ... and it had better match the type of the parameter +CALL ptest9(1./0.); -- error +ERROR: procedure ptest9(numeric) does not exist +LINE 1: CALL ptest9(1./0.); + ^ +HINT: No procedure matches the given name and argument types. You might need to add explicit type casts. +-- check named-parameter matching +CREATE PROCEDURE ptest10(OUT a int, IN b int, IN c int) +LANGUAGE SQL AS $$ SELECT b - c $$; +CALL ptest10(null, 7, 4); + a +--- + 3 +(1 row) + +CALL ptest10(a => null, b => 8, c => 2); + a +--- + 6 +(1 row) + +CALL ptest10(null, 7, c => 2); + a +--- + 5 +(1 row) + +CALL ptest10(null, c => 4, b => 11); + a +--- + 7 +(1 row) + +CALL ptest10(b => 8, c => 2, a => 0); + a +--- + 6 +(1 row) + +CREATE PROCEDURE ptest11(a OUT int, VARIADIC b int[]) LANGUAGE SQL + AS $$ SELECT b[1] + b[2] $$; +CALL ptest11(null, 11, 12, 13); + a +---- + 23 +(1 row) + +-- check resolution of ambiguous DROP commands +CREATE PROCEDURE ptest10(IN a int, IN b int, IN c int) +LANGUAGE SQL AS $$ SELECT a + b - c $$; +\df ptest10 + List of functions + Schema | Name | Result data type | Argument data types | Type +--------+---------+------------------+-------------------------------------------+------ + public | ptest10 | | IN a integer, IN b integer, IN c integer | proc + public | ptest10 | | OUT a integer, IN b integer, IN c integer | proc +(2 rows) + +drop procedure ptest10; -- fail +ERROR: procedure name "ptest10" is not unique +HINT: Specify the argument list to select the procedure unambiguously. +drop procedure ptest10(int, int, int); -- fail +ERROR: procedure name "ptest10" is not unique +begin; +drop procedure ptest10(out int, int, int); +\df ptest10 + List of functions + Schema | Name | Result data type | Argument data types | Type +--------+---------+------------------+------------------------------------------+------ + public | ptest10 | | IN a integer, IN b integer, IN c integer | proc +(1 row) + +drop procedure ptest10(int, int, int); -- now this would work +rollback; +begin; +drop procedure ptest10(in int, int, int); +\df ptest10 + List of functions + Schema | Name | Result data type | Argument data types | Type +--------+---------+------------------+-------------------------------------------+------ + public | ptest10 | | OUT a integer, IN b integer, IN c integer | proc +(1 row) + +drop procedure ptest10(int, int, int); -- now this would work +rollback; -- various error cases CALL version(); -- error: not a procedure ERROR: version() is not a procedure @@ -242,6 +335,12 @@ CREATE PROCEDURE ptestx() LANGUAGE SQL STRICT AS $$ INSERT INTO cp_test VALUES ( ERROR: invalid attribute in procedure definition LINE 1: CREATE PROCEDURE ptestx() LANGUAGE SQL STRICT AS $$ INSERT I... ^ +CREATE PROCEDURE ptestx(a VARIADIC int[], b OUT int) LANGUAGE SQL + AS $$ SELECT a[1] $$; +ERROR: VARIADIC parameter must be the last parameter +CREATE PROCEDURE ptestx(a int DEFAULT 42, b OUT int) LANGUAGE SQL + AS $$ SELECT a $$; +ERROR: procedure OUT parameters cannot appear after one with a default value ALTER PROCEDURE ptest1(text) STRICT; ERROR: invalid attribute in procedure definition LINE 1: ALTER PROCEDURE ptest1(text) STRICT; diff --git a/src/test/regress/sql/create_procedure.sql b/src/test/regress/sql/create_procedure.sql index 76f781c0b90ef..75cc0fcf2a6ce 100644 --- a/src/test/regress/sql/create_procedure.sql +++ b/src/test/regress/sql/create_procedure.sql @@ -153,8 +153,47 @@ INSERT INTO cp_test VALUES (1, 'a'); SELECT 1; $$; +-- standard way to do a call: CALL ptest9(NULL); - +-- you can write an expression, but it's not evaluated +CALL ptest9(1/0); -- no error +-- ... and it had better match the type of the parameter +CALL ptest9(1./0.); -- error + +-- check named-parameter matching +CREATE PROCEDURE ptest10(OUT a int, IN b int, IN c int) +LANGUAGE SQL AS $$ SELECT b - c $$; + +CALL ptest10(null, 7, 4); +CALL ptest10(a => null, b => 8, c => 2); +CALL ptest10(null, 7, c => 2); +CALL ptest10(null, c => 4, b => 11); +CALL ptest10(b => 8, c => 2, a => 0); + +CREATE PROCEDURE ptest11(a OUT int, VARIADIC b int[]) LANGUAGE SQL + AS $$ SELECT b[1] + b[2] $$; + +CALL ptest11(null, 11, 12, 13); + +-- check resolution of ambiguous DROP commands + +CREATE PROCEDURE ptest10(IN a int, IN b int, IN c int) +LANGUAGE SQL AS $$ SELECT a + b - c $$; + +\df ptest10 + +drop procedure ptest10; -- fail +drop procedure ptest10(int, int, int); -- fail +begin; +drop procedure ptest10(out int, int, int); +\df ptest10 +drop procedure ptest10(int, int, int); -- now this would work +rollback; +begin; +drop procedure ptest10(in int, int, int); +\df ptest10 +drop procedure ptest10(int, int, int); -- now this would work +rollback; -- various error cases @@ -163,6 +202,10 @@ CALL sum(1); -- error: not a procedure CREATE PROCEDURE ptestx() LANGUAGE SQL WINDOW AS $$ INSERT INTO cp_test VALUES (1, 'a') $$; CREATE PROCEDURE ptestx() LANGUAGE SQL STRICT AS $$ INSERT INTO cp_test VALUES (1, 'a') $$; +CREATE PROCEDURE ptestx(a VARIADIC int[], b OUT int) LANGUAGE SQL + AS $$ SELECT a[1] $$; +CREATE PROCEDURE ptestx(a int DEFAULT 42, b OUT int) LANGUAGE SQL + AS $$ SELECT a $$; ALTER PROCEDURE ptest1(text) STRICT; ALTER FUNCTION ptest1(text) VOLATILE; -- error: not a function From 04539e73faaaaa1c06c1407671910dceaffdfcd4 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Fri, 11 Jun 2021 13:38:04 +1200 Subject: [PATCH 441/671] Use the correct article for abbreviations We've accumulated quite a mix of instances of "an SQL" and "a SQL" in the documents. It would be good to be a bit more consistent with these. The most recent version of the SQL standard I looked at seems to prefer "an SQL". That seems like a good lead to follow, so here we change all instances of "a SQL" to become "an SQL". Most instances correctly use "an SQL" already, so it also makes sense to use the dominant variation in order to minimise churn. Additionally, there were some other abbreviations that needed to be adjusted. FSM, SSPI, SRF and a few others. Also fix some pronounceable, abbreviations to use "a" instead of "an". For example, "a SASL" instead of "an SASL". Here I've only adjusted the documents and error messages. Many others still exist in source code comments. Translator hint comments seem to be the biggest culprit. It currently does not seem worth the churn to change these. Discussion: https://postgr.es/m/CAApHDvpML27UqFXnrYO1MJddsKVMQoiZisPvsAGhKE_tsKXquw%40mail.gmail.com --- doc/src/sgml/client-auth.sgml | 2 +- doc/src/sgml/config.sgml | 6 +++--- doc/src/sgml/datatype.sgml | 2 +- doc/src/sgml/dblink.sgml | 10 +++++----- doc/src/sgml/ecpg.sgml | 14 +++++++------- doc/src/sgml/extend.sgml | 2 +- doc/src/sgml/func.sgml | 8 ++++---- doc/src/sgml/high-availability.sgml | 2 +- doc/src/sgml/indexam.sgml | 2 +- doc/src/sgml/libpq.sgml | 4 ++-- doc/src/sgml/ltree.sgml | 2 +- doc/src/sgml/mvcc.sgml | 2 +- doc/src/sgml/pageinspect.sgml | 2 +- doc/src/sgml/pgcrypto.sgml | 2 +- doc/src/sgml/plpgsql.sgml | 14 +++++++------- doc/src/sgml/plpython.sgml | 4 ++-- doc/src/sgml/pltcl.sgml | 6 +++--- doc/src/sgml/protocol.sgml | 6 +++--- doc/src/sgml/ref/alter_opfamily.sgml | 2 +- doc/src/sgml/ref/create_function.sgml | 2 +- doc/src/sgml/ref/create_opclass.sgml | 2 +- doc/src/sgml/ref/create_statistics.sgml | 2 +- doc/src/sgml/ref/create_trigger.sgml | 2 +- doc/src/sgml/ref/pg_dump.sgml | 2 +- doc/src/sgml/ref/pgbench.sgml | 4 ++-- doc/src/sgml/ref/psql-ref.sgml | 6 +++--- doc/src/sgml/tablefunc.sgml | 8 ++++---- doc/src/sgml/tablesample-method.sgml | 2 +- doc/src/sgml/textsearch.sgml | 2 +- doc/src/sgml/trigger.sgml | 2 +- doc/src/sgml/typeconv.sgml | 2 +- doc/src/sgml/xfunc.sgml | 20 ++++++++++---------- src/backend/executor/functions.c | 4 ++-- src/bin/pgbench/pgbench.c | 4 ++-- src/bin/pgbench/t/001_pgbench_with_server.pl | 6 +++--- 35 files changed, 81 insertions(+), 81 deletions(-) diff --git a/doc/src/sgml/client-auth.sgml b/doc/src/sgml/client-auth.sgml index 951af49e9a4d1..02f0489112956 100644 --- a/doc/src/sgml/client-auth.sgml +++ b/doc/src/sgml/client-auth.sgml @@ -1462,7 +1462,7 @@ omicron bryanh guest1 Allows for mapping between system and database user names. See - for details. For a SSPI/Kerberos + for details. For an SSPI/Kerberos principal, such as username@EXAMPLE.COM (or, less commonly, username/hostbased@EXAMPLE.COM), the user name used for mapping is diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index d8c0fd3315de8..aa3e17824094c 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -51,7 +51,7 @@ In general, enclose the value in single quotes, doubling any single quotes within the value. Quotes can usually be omitted if the value is a simple number or identifier, however. - (Values that match a SQL keyword require quoting in some contexts.) + (Values that match an SQL keyword require quoting in some contexts.) @@ -222,7 +222,7 @@ shared_buffers = 128MB PostgreSQL provides three SQL commands to establish configuration defaults. The already-mentioned ALTER SYSTEM command - provides a SQL-accessible means of changing global defaults; it is + provides an SQL-accessible means of changing global defaults; it is functionally equivalent to editing postgresql.conf. In addition, there are two commands that allow setting of defaults on a per-database or per-role basis: @@ -9625,7 +9625,7 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' \'. However, use of \' creates security risks because in some client character set encodings, there are multibyte characters in which the last byte is numerically equivalent to ASCII - \. If client-side code does escaping incorrectly then a + \. If client-side code does escaping incorrectly then an SQL-injection attack is possible. This risk can be prevented by making the server reject queries in which a quote mark appears to be escaped by a backslash. diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index 0e8ef958a93e1..de561cded1e92 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -1538,7 +1538,7 @@ SELECT '\xDEADBEEF'; The reason that single quotes must be doubled, as shown in , is that this - is true for any string literal in a SQL command. The generic + is true for any string literal in an SQL command. The generic string-literal parser consumes the outermost single quotes and reduces any pair of single quotes to one data character. What the bytea input function sees is just one diff --git a/doc/src/sgml/dblink.sgml b/doc/src/sgml/dblink.sgml index bcf623117c4bd..4ab38bcc999b1 100644 --- a/doc/src/sgml/dblink.sgml +++ b/doc/src/sgml/dblink.sgml @@ -1482,14 +1482,14 @@ dblink_get_result(text connname [, bool fail_on_error]) returns setof record Return Value - For an async query (that is, a SQL statement returning rows), + For an async query (that is, an SQL statement returning rows), the function returns the row(s) produced by the query. To use this function, you will need to specify the expected set of columns, as previously discussed for dblink. - For an async command (that is, a SQL statement not returning rows), + For an async command (that is, an SQL statement not returning rows), the function returns a single row with a single text column containing the command's status string. It is still necessary to specify that the result will have a single text column in the calling FROM @@ -1777,7 +1777,7 @@ dblink_build_sql_insert(text relname, dblink_build_sql_insert can be useful in doing selective replication of a local table to a remote database. It selects a row - from the local table based on primary key, and then builds a SQL + from the local table based on primary key, and then builds an SQL INSERT command that will duplicate that row, but with the primary key values replaced by the values in the last argument. (To make an exact copy of the row, just specify the same values for @@ -1909,7 +1909,7 @@ dblink_build_sql_delete(text relname, dblink_build_sql_delete can be useful in doing selective - replication of a local table to a remote database. It builds a SQL + replication of a local table to a remote database. It builds an SQL DELETE command that will delete the row with the given primary key values. @@ -2029,7 +2029,7 @@ dblink_build_sql_update(text relname, dblink_build_sql_update can be useful in doing selective replication of a local table to a remote database. It selects a row - from the local table based on primary key, and then builds a SQL + from the local table based on primary key, and then builds an SQL UPDATE command that will duplicate that row, but with the primary key values replaced by the values in the last argument. (To make an exact copy of the row, just specify the same values for diff --git a/doc/src/sgml/ecpg.sgml b/doc/src/sgml/ecpg.sgml index 86c078e17de23..9d5505cb84992 100644 --- a/doc/src/sgml/ecpg.sgml +++ b/doc/src/sgml/ecpg.sgml @@ -354,13 +354,13 @@ current=testdb1 (should be testdb1) - The third option is to declare a SQL identifier linked to + The third option is to declare an SQL identifier linked to the connection, for example: EXEC SQL AT connection-name DECLARE statement-name STATEMENT; EXEC SQL PREPARE statement-name FROM :dyn-string; - Once you link a SQL identifier to a connection, you execute dynamic SQL + Once you link an SQL identifier to a connection, you execute dynamic SQL without an AT clause. Note that this option behaves like preprocessor directives, therefore the link is enabled only in the file. @@ -1542,7 +1542,7 @@ EXEC SQL END DECLARE SECTION; variables and vice-versa. However, when creating a statement ecpg does not know the types of the columns, so that it cannot check if a C array is input into a corresponding SQL-level array. When processing the - output of a SQL statement, ecpg has the necessary information and thus + output of an SQL statement, ecpg has the necessary information and thus checks if both are arrays. @@ -4348,7 +4348,7 @@ switch (v.sqltype) parameters to a prepared query are: Create a prepared query (prepared statement) - Declare a sqlda_t structure as an input SQLDA. + Declare an sqlda_t structure as an input SQLDA. Allocate memory area (as sqlda_t structure) for the input SQLDA. Set (copy) input values in the allocated memory. Open a cursor with specifying the input SQLDA. @@ -4630,7 +4630,7 @@ main(void) EXEC SQL PREPARE stmt1 FROM :query; EXEC SQL DECLARE cur1 CURSOR FOR stmt1; - /* Create a SQLDA structure for an input parameter */ + /* Create an SQLDA structure for an input parameter */ sqlda2 = (sqlda_t *)malloc(sizeof(sqlda_t) + sizeof(sqlvar_t)); memset(sqlda2, 0, sizeof(sqlda_t) + sizeof(sqlvar_t)); sqlda2->sqln = 2; /* a number of input variables */ @@ -6911,7 +6911,7 @@ EXEC SQL [ AT connection_name ] DEC Description - DECLARE STATEMENT declares a SQL statement identifier. + DECLARE STATEMENT declares an SQL statement identifier. SQL statement identifier can be associated with the connection. When the identifier is used by dynamic SQL statements, the statements are executed using the associated connection. @@ -6945,7 +6945,7 @@ EXEC SQL [ AT connection_name ] DEC statement_name - The name of a SQL statement identifier, either as an SQL identifier or a host variable. + The name of an SQL statement identifier, either as an SQL identifier or a host variable. diff --git a/doc/src/sgml/extend.sgml b/doc/src/sgml/extend.sgml index dae57375748fa..e928894726c8f 100644 --- a/doc/src/sgml/extend.sgml +++ b/doc/src/sgml/extend.sgml @@ -1441,7 +1441,7 @@ include $(PGXS) and include the global PGXS makefile. Here is an example that builds an extension module named isbn_issn, consisting of a shared library containing - some C code, an extension control file, a SQL script, an include file + some C code, an extension control file, an SQL script, an include file (only needed if other modules might need to access the extension functions without going via SQL), and a documentation text file: diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 08b07f561efa3..fbc80c1403db1 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -15196,7 +15196,7 @@ table2-mapping json - Converts a SQL array to a JSON array. The behavior is the same + Converts an SQL array to a JSON array. The behavior is the same as to_json except that line feeds will be added between top-level array elements if the optional boolean parameter is true. @@ -15216,7 +15216,7 @@ table2-mapping json - Converts a SQL composite value to a JSON object. The behavior is the + Converts an SQL composite value to a JSON object. The behavior is the same as to_json except that line feeds will be added between top-level elements if the optional boolean parameter is true. @@ -15629,7 +15629,7 @@ table2-mapping - A JSON null value is converted to a SQL null in all cases. + A JSON null value is converted to an SQL null in all cases. @@ -16152,7 +16152,7 @@ table2-mapping string, number, boolean, and null. (The null result should not be confused - with a SQL NULL; see the examples.) + with an SQL NULL; see the examples.) json_typeof('-123.4') diff --git a/doc/src/sgml/high-availability.sgml b/doc/src/sgml/high-availability.sgml index c072110ba60d0..22af7dbf51b28 100644 --- a/doc/src/sgml/high-availability.sgml +++ b/doc/src/sgml/high-availability.sgml @@ -2194,7 +2194,7 @@ HINT: You can then restart the server after making the necessary configuration Currently, temporary table creation is not allowed during read only transactions, so in some cases existing scripts will not run correctly. This restriction might be relaxed in a later release. This is - both a SQL Standard compliance issue and a technical issue. + both an SQL Standard compliance issue and a technical issue. diff --git a/doc/src/sgml/indexam.sgml b/doc/src/sgml/indexam.sgml index 29fa3b793381b..b2326b72e3cf2 100644 --- a/doc/src/sgml/indexam.sgml +++ b/doc/src/sgml/indexam.sgml @@ -338,7 +338,7 @@ aminsert (Relation indexRelation, If the index AM wishes to cache data across successive index insertions - within a SQL statement, it can allocate space + within an SQL statement, it can allocate space in indexInfo->ii_Context and store a pointer to the data in indexInfo->ii_AmCache (which will be NULL initially). diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index ca905b80a6dbf..9e6e085385466 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -3468,7 +3468,7 @@ char *PQresultErrorField(const PGresult *res, int fieldcode); The text of a failed internally-generated command. This could - be, for example, a SQL query issued by a PL/pgSQL function. + be, for example, an SQL query issued by a PL/pgSQL function. @@ -5468,7 +5468,7 @@ UPDATE mytable SET x = x + 1 WHERE id = 42; - Ordinarily, libpq collects a SQL command's + Ordinarily, libpq collects an SQL command's entire result and returns it to the application as a single PGresult. This can be unworkable for commands that return a large number of rows. For such cases, applications can use diff --git a/doc/src/sgml/ltree.sgml b/doc/src/sgml/ltree.sgml index 06a983c075be4..436be76bfaa41 100644 --- a/doc/src/sgml/ltree.sgml +++ b/doc/src/sgml/ltree.sgml @@ -804,7 +804,7 @@ ltreetest=> SELECT subpath(path,0,2)||'Space'||subpath(path,2) FROM test WHER - We could simplify this by creating a SQL function that inserts a label + We could simplify this by creating an SQL function that inserts a label at a specified position in a path: CREATE FUNCTION ins_label(ltree, int, text) RETURNS ltree diff --git a/doc/src/sgml/mvcc.sgml b/doc/src/sgml/mvcc.sgml index 6cb9c631613d8..d358bbe4a6a07 100644 --- a/doc/src/sgml/mvcc.sgml +++ b/doc/src/sgml/mvcc.sgml @@ -703,7 +703,7 @@ ERROR: could not serialize access due to read/write dependencies among transact transactions might do, or it will not successfully commit. It is important that an environment which uses this technique have a generalized way of handling serialization failures (which always return - with a SQLSTATE value of '40001'), because it will be very hard to + with an SQLSTATE value of '40001'), because it will be very hard to predict exactly which transactions might contribute to the read/write dependencies and need to be rolled back to prevent serialization anomalies. The monitoring of read/write dependencies has a cost, as does diff --git a/doc/src/sgml/pageinspect.sgml b/doc/src/sgml/pageinspect.sgml index 59620faec00f9..24b5e463ed9a3 100644 --- a/doc/src/sgml/pageinspect.sgml +++ b/doc/src/sgml/pageinspect.sgml @@ -136,7 +136,7 @@ test=# SELECT page_checksum(get_raw_page('pg_class', 0), 0); fsm_page_contents shows the internal node structure - of a FSM page. For example: + of an FSM page. For example: test=# SELECT fsm_page_contents(get_raw_page('pg_class', 'fsm', 0)); diff --git a/doc/src/sgml/pgcrypto.sgml b/doc/src/sgml/pgcrypto.sgml index 13770dfc6f66c..c4dce94001b9d 100644 --- a/doc/src/sgml/pgcrypto.sgml +++ b/doc/src/sgml/pgcrypto.sgml @@ -521,7 +521,7 @@ gen_salt(type text [, iter_count integer ]) returns text - An SHA1 hash of the random prefix and data is appended. + A SHA1 hash of the random prefix and data is appended. diff --git a/doc/src/sgml/plpgsql.sgml b/doc/src/sgml/plpgsql.sgml index a3edde35039b0..4cd4bcba802d0 100644 --- a/doc/src/sgml/plpgsql.sgml +++ b/doc/src/sgml/plpgsql.sgml @@ -1099,7 +1099,7 @@ PERFORM query; One might expect that writing SELECT directly would accomplish this result, but at present the only accepted way to do it is - PERFORM. A SQL command that can return rows, + PERFORM. An SQL command that can return rows, such as SELECT, will be rejected as an error unless it has an INTO clause as discussed in the next section. @@ -1128,7 +1128,7 @@ PERFORM create_mv('cs_session_page_requests_mv', my_query); - The result of a SQL command yielding a single row (possibly of multiple + The result of an SQL command yielding a single row (possibly of multiple columns) can be assigned to a record variable, row-type variable, or list of scalar variables. This is done by writing the base SQL command and adding an INTO clause. For example, @@ -1317,7 +1317,7 @@ EXECUTE command-string INT The INTO clause specifies where the results of - a SQL command returning rows should be assigned. If a row variable + an SQL command returning rows should be assigned. If a row variable or variable list is provided, it must exactly match the structure of the command's results; if a record variable is provided, it will configure itself to match the @@ -2659,7 +2659,7 @@ END LOOP label ; The FOREACH loop is much like a FOR loop, - but instead of iterating through the rows returned by a SQL query, + but instead of iterating through the rows returned by an SQL query, it iterates through the elements of an array value. (In general, FOREACH is meant for looping through components of a composite-valued expression; variants for looping @@ -4726,7 +4726,7 @@ INSERT INTO foo (foo) VALUES (foo(foo)); Another way to understand this is that variable substitution can only - insert data values into a SQL command; it cannot dynamically change which + insert data values into an SQL command; it cannot dynamically change which database objects are referenced by the command. (If you want to do that, you must build a command string dynamically, as explained in .) @@ -4748,7 +4748,7 @@ INSERT INTO dest (col) SELECT foo + bar FROM src; By default, PL/pgSQL will report an error if a name - in a SQL statement could refer to either a variable or a table column. + in an SQL statement could refer to either a variable or a table column. You can fix such a problem by renaming the variable or column, or by qualifying the ambiguous reference, or by telling PL/pgSQL which interpretation to prefer. @@ -5384,7 +5384,7 @@ HINT: Make sure the query returns the exact list of columns. - If a name used in a SQL command could be either a column name of a + If a name used in an SQL command could be either a column name of a table used in the command or a reference to a variable of the function, PL/SQL treats it as a column name. By default, PL/pgSQL will throw an error diff --git a/doc/src/sgml/plpython.sgml b/doc/src/sgml/plpython.sgml index c1651000a3d8b..c2540b8ec9d38 100644 --- a/doc/src/sgml/plpython.sgml +++ b/doc/src/sgml/plpython.sgml @@ -577,7 +577,7 @@ AS $$ $$ LANGUAGE plpythonu; - To return a SQL null for any column, insert None at + To return an SQL null for any column, insert None at the corresponding position. @@ -605,7 +605,7 @@ $$ LANGUAGE plpythonu; Any extra dictionary key/value pairs are ignored. Missing keys are treated as errors. - To return a SQL null value for any column, insert + To return an SQL null value for any column, insert None with the corresponding column name as the key. diff --git a/doc/src/sgml/pltcl.sgml b/doc/src/sgml/pltcl.sgml index 032e0b3a6ba82..1759fc44985d6 100644 --- a/doc/src/sgml/pltcl.sgml +++ b/doc/src/sgml/pltcl.sgml @@ -475,7 +475,7 @@ $$ LANGUAGE pltcl; The Tcl script contained in command is - executed within a SQL subtransaction. If the script returns an + executed within an SQL subtransaction. If the script returns an error, that entire subtransaction is rolled back before returning the error out to the surrounding Tcl code. See for more details and an @@ -854,7 +854,7 @@ CREATE EVENT TRIGGER tcl_a_snitch ON ddl_command_start EXECUTE FUNCTION tclsnitc PL/Tcl's elog command. Such errors can be caught within Tcl using the Tcl catch command. If an error is not caught but is allowed to propagate out to the top level of - execution of the PL/Tcl function, it is reported as a SQL error in the + execution of the PL/Tcl function, it is reported as an SQL error in the function's calling query. @@ -867,7 +867,7 @@ CREATE EVENT TRIGGER tcl_a_snitch ON ddl_command_start EXECUTE FUNCTION tclsnitc subtransaction, which is rolled back on error, so that any partially-completed operation is automatically cleaned up.) Again, if an error propagates out to the top level without being caught, - it turns back into a SQL error. + it turns back into an SQL error. diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index 2f4dde3bebd49..bc2a2feb0b951 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -349,7 +349,7 @@ AuthenticationSSPI - The frontend must now initiate a SSPI negotiation. The frontend + The frontend must now initiate an SSPI negotiation. The frontend will send a GSSResponse with the first part of the SSPI data stream in response to this. If further messages are needed, the server will respond with AuthenticationGSSContinue. @@ -1605,7 +1605,7 @@ more details on SCRAM-SHA-256 and SCRAM-SHA-256-PLUS. One or more server-challenge and client-response message will follow. Each server-challenge is sent in an AuthenticationSASLContinue message, followed - by a response from client in an SASLResponse message. The particulars of + by a response from client in a SASLResponse message. The particulars of the messages are mechanism specific. @@ -6226,7 +6226,7 @@ message. Internal query: the text of a failed internally-generated command. - This could be, for example, a SQL query issued by a PL/pgSQL function. + This could be, for example, an SQL query issued by a PL/pgSQL function. diff --git a/doc/src/sgml/ref/alter_opfamily.sgml b/doc/src/sgml/ref/alter_opfamily.sgml index b3b5d61a852e6..b2e5b9b72ec8b 100644 --- a/doc/src/sgml/ref/alter_opfamily.sgml +++ b/doc/src/sgml/ref/alter_opfamily.sgml @@ -269,7 +269,7 @@ ALTER OPERATOR FAMILY name USING name [ DEFAUL - The operators should not be defined by SQL functions. A SQL function + The operators should not be defined by SQL functions. An SQL function is likely to be inlined into the calling query, which will prevent the optimizer from recognizing that the query matches an index. diff --git a/doc/src/sgml/ref/create_statistics.sgml b/doc/src/sgml/ref/create_statistics.sgml index 988f4c573ff5e..9a8c904c0885b 100644 --- a/doc/src/sgml/ref/create_statistics.sgml +++ b/doc/src/sgml/ref/create_statistics.sgml @@ -208,7 +208,7 @@ EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0); Create table t2 with two perfectly correlated columns - (containing identical data), and a MCV list on those columns: + (containing identical data), and an MCV list on those columns: CREATE TABLE t2 ( diff --git a/doc/src/sgml/ref/create_trigger.sgml b/doc/src/sgml/ref/create_trigger.sgml index 561af989a4af5..3f4b5acc7b7ed 100644 --- a/doc/src/sgml/ref/create_trigger.sgml +++ b/doc/src/sgml/ref/create_trigger.sgml @@ -515,7 +515,7 @@ UPDATE OF column_name1 [, column_name2ON UPDATE CASCADE or ON DELETE SET NULL, are treated as part of the SQL command that caused them (note that such actions are never deferred). Relevant triggers on the affected table will - be fired, so that this provides another way in which a SQL command might + be fired, so that this provides another way in which an SQL command might fire triggers not directly matching its type. In simple cases, triggers that request transition relations will see all changes caused in their table by a single original SQL command as a single transition relation. diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml index 5ddadc11f2eee..a6c0788592b06 100644 --- a/doc/src/sgml/ref/pg_dump.sgml +++ b/doc/src/sgml/ref/pg_dump.sgml @@ -1413,7 +1413,7 @@ CREATE DATABASE foo WITH TEMPLATE template0; Examples - To dump a database called mydb into a SQL-script file: + To dump a database called mydb into an SQL-script file: $ pg_dump mydb > db.sql diff --git a/doc/src/sgml/ref/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml index 8eb4f538d5b65..0c60077e1f9b8 100644 --- a/doc/src/sgml/ref/pgbench.sgml +++ b/doc/src/sgml/ref/pgbench.sgml @@ -1012,7 +1012,7 @@ pgbench options d Before PostgreSQL 9.6, SQL commands in script files were terminated by newlines, and so they could not be continued across lines. Now a semicolon is required to separate consecutive - SQL commands (though a SQL command does not need one if it is followed + SQL commands (though an SQL command does not need one if it is followed by a meta command). If you need to create a script file that works with both old and new versions of pgbench, be sure to write each SQL command on a single line ending with a semicolon. @@ -1030,7 +1030,7 @@ pgbench options d . A value specified for these variables using takes precedence over the automatic presets. Once set, a variable's - value can be inserted into a SQL command by writing + value can be inserted into an SQL command by writing :variablename. When running more than one client session, each session has its own set of variables. pgbench supports up to 255 variable uses in one diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index dd36830a2dc7a..a8dfc41e40689 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1044,7 +1044,7 @@ testdb=> For \copy ... from stdin, data rows are read from the same source that issued the command, continuing until \. is read or the stream reaches EOF. This option is useful - for populating tables in-line within a SQL script file. + for populating tables in-line within an SQL script file. For \copy ... to stdout, output is sent to the same place as psql command output, and the COPY count command status is @@ -2243,7 +2243,7 @@ Tue Oct 26 21:40:57 CEST 1999 Sends the current query buffer to the server, then treats - each column of each row of the query's output (if any) as a SQL + each column of each row of the query's output (if any) as an SQL statement to be executed. For example, to create an index on each column of my_table: @@ -3510,7 +3510,7 @@ testdb=> \setenv LESS -imx4F - Normally, psql will dispatch a SQL command to the + Normally, psql will dispatch an SQL command to the server as soon as it reaches the command-ending semicolon, even if more input remains on the current line. Thus for example entering diff --git a/doc/src/sgml/tablefunc.sgml b/doc/src/sgml/tablefunc.sgml index 356e2b0f0021f..808162b89b0b5 100644 --- a/doc/src/sgml/tablefunc.sgml +++ b/doc/src/sgml/tablefunc.sgml @@ -198,13 +198,13 @@ row1 val11 val12 val13 ... row2 val21 val22 val23 ... ... - The crosstab function takes a text parameter that is a SQL + The crosstab function takes a text parameter that is an SQL query producing raw data formatted in the first way, and produces a table formatted in the second way. - The sql parameter is a SQL statement that produces + The sql parameter is an SQL statement that produces the source set of data. This statement must return one row_name column, one category column, and one @@ -459,7 +459,7 @@ crosstab(text source_sql, text category_sql) - source_sql is a SQL statement that produces the + source_sql is an SQL statement that produces the source set of data. This statement must return one row_name column, one category column, and one @@ -493,7 +493,7 @@ SELECT row_name, extra_col, cat, value FROM foo ORDER BY 1; - category_sql is a SQL statement that produces + category_sql is an SQL statement that produces the set of categories. This statement must return only one column. It must produce at least one row, or an error will be generated. Also, it must not produce duplicate values, or an error will be diff --git a/doc/src/sgml/tablesample-method.sgml b/doc/src/sgml/tablesample-method.sgml index 1c9f1bf44bfb7..c821941b71bc5 100644 --- a/doc/src/sgml/tablesample-method.sgml +++ b/doc/src/sgml/tablesample-method.sgml @@ -28,7 +28,7 @@ method_name(internal) RETURNS tsm_handler The name of the function is the same method name appearing in the TABLESAMPLE clause. The internal argument is a dummy (always having value zero) that simply serves to prevent this function from - being called directly from a SQL command. + being called directly from an SQL command. The result of the function must be a palloc'd struct of type TsmRoutine, which contains pointers to support functions for the sampling method. These support functions are plain C functions and diff --git a/doc/src/sgml/textsearch.sgml b/doc/src/sgml/textsearch.sgml index 168d84f06b5e1..20db7b7afe6c3 100644 --- a/doc/src/sgml/textsearch.sgml +++ b/doc/src/sgml/textsearch.sgml @@ -1790,7 +1790,7 @@ SELECT ts_rewrite('a & b'::tsquery, 'a'::tsquery, 'c'::tsquery); This form of ts_rewrite accepts a starting - query and a SQL select command, which + query and an SQL select command, which is given as a text string. The select must yield two columns of tsquery type. For each row of the select result, occurrences of the first column value diff --git a/doc/src/sgml/trigger.sgml b/doc/src/sgml/trigger.sgml index 4a0e74652f7bf..f1a845f756864 100644 --- a/doc/src/sgml/trigger.sgml +++ b/doc/src/sgml/trigger.sgml @@ -411,7 +411,7 @@ trigger will see the effects of data changes for rows previously processed in the same outer command. This requires caution, since the ordering of these - change events is not in general predictable; a SQL command that + change events is not in general predictable; an SQL command that affects multiple rows can visit the rows in any order. diff --git a/doc/src/sgml/typeconv.sgml b/doc/src/sgml/typeconv.sgml index 103e4c5d99d6f..2874874248668 100644 --- a/doc/src/sgml/typeconv.sgml +++ b/doc/src/sgml/typeconv.sgml @@ -1222,7 +1222,7 @@ section consider all of their inputs in one resolution step. The rules given in the preceding sections will result in assignment -of non-unknown data types to all expressions in a SQL query, +of non-unknown data types to all expressions in an SQL query, except for unspecified-type literals that appear as simple output columns of a SELECT command. For example, in diff --git a/doc/src/sgml/xfunc.sgml b/doc/src/sgml/xfunc.sgml index 3771401c01dd3..584d389d4586f 100644 --- a/doc/src/sgml/xfunc.sgml +++ b/doc/src/sgml/xfunc.sgml @@ -194,7 +194,7 @@ must be a SELECT or have a RETURNING clause that returns whatever is specified as the function's return type. Alternatively, if you - want to define a SQL function that performs actions but has no + want to define an SQL function that performs actions but has no useful value to return, you can define it as returning void. For example, this function removes rows with negative salaries from the emp table: @@ -234,8 +234,8 @@ CALL clean_emp(); - The entire body of a SQL function is parsed before any of it is - executed. While a SQL function can contain commands that alter + The entire body of an SQL function is parsed before any of it is + executed. While an SQL function can contain commands that alter the system catalogs (e.g., CREATE TABLE), the effects of such commands will not be visible during parse analysis of later commands in the function. Thus, for example, @@ -243,7 +243,7 @@ CALL clean_emp(); will not work as desired if packaged up into a single SQL function, since foo won't exist yet when the INSERT command is parsed. It's recommended to use PL/pgSQL - instead of a SQL function in this type of situation. + instead of an SQL function in this type of situation. @@ -267,7 +267,7 @@ CALL clean_emp(); - Arguments of a SQL function can be referenced in the function + Arguments of an SQL function can be referenced in the function body using either names or numbers. Examples of both methods appear below. @@ -1473,7 +1473,7 @@ SELECT concat_values('|', 1, 4, 2); - When a SQL function has one or more parameters of collatable data types, + When an SQL function has one or more parameters of collatable data types, a collation is identified for each function call depending on the collations assigned to the actual arguments, as described in . If a collation is successfully identified @@ -1508,7 +1508,7 @@ $$ LANGUAGE SQL; If no common collation can be identified among the actual arguments, - then a SQL function treats its parameters as having their data types' + then an SQL function treats its parameters as having their data types' default collation (which is usually the database's default collation, but could be different for parameters of domain types). @@ -2952,7 +2952,7 @@ HeapTupleGetDatum(HeapTuple tuple) save enough state across calls to remember what it was doing and return the correct next item on each call. In the other method, called Materialize mode, - a SRF fills and returns a tuplestore object containing its + an SRF fills and returns a tuplestore object containing its entire result; then only one call occurs for the whole result, and no inter-call state is needed. @@ -3375,7 +3375,7 @@ CREATE FUNCTION make_array(anyelement) RETURNS anyarray There is a variant of polymorphism that is only available to C-language functions: they can be declared to take parameters of type "any". (Note that this type name must be double-quoted, - since it's also a SQL reserved word.) This works like + since it's also an SQL reserved word.) This works like anyelement except that it does not constrain different "any" arguments to be the same type, nor do they help determine the function's result type. A C-language function can also @@ -3544,7 +3544,7 @@ if (!ptr) It is also possible to attach a planner support - function to a SQL-callable function (called + function to an SQL-callable function (called its target function), and thereby provide knowledge about the target function that is too complex to be represented declaratively. Planner support functions have to be diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index 32668f85a1dbe..e2ea51aafe520 100644 --- a/src/backend/executor/functions.c +++ b/src/backend/executor/functions.c @@ -511,13 +511,13 @@ init_execution_state(List *queryTree_list, ((CopyStmt *) stmt->utilityStmt)->filename == NULL) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot COPY to/from client in a SQL function"))); + errmsg("cannot COPY to/from client in an SQL function"))); if (IsA(stmt->utilityStmt, TransactionStmt)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), /* translator: %s is a SQL statement name */ - errmsg("%s is not allowed in a SQL function", + errmsg("%s is not allowed in an SQL function", CreateCommandName(stmt->utilityStmt)))); } diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index dc84b7b9b7890..d7479925cb35a 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -5149,7 +5149,7 @@ ParseScript(const char *script, const char *desc, int weight) if (index == 0) syntax_error(desc, lineno, NULL, NULL, - "\\gset must follow a SQL command", + "\\gset must follow an SQL command", NULL, -1); cmd = ps.commands[index - 1]; @@ -5157,7 +5157,7 @@ ParseScript(const char *script, const char *desc, int weight) if (cmd->type != SQL_COMMAND || cmd->varprefix != NULL) syntax_error(desc, lineno, NULL, NULL, - "\\gset must follow a SQL command", + "\\gset must follow an SQL command", cmd->first_line, -1); /* get variable prefix */ diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index 9cc5270e02c91..55b3c3f6fdd5a 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -1091,10 +1091,10 @@ sub pgbench 'gset no row', 2, [qr{expected one row, got 0\b}], q{SELECT WHERE FALSE \gset} ], - [ 'gset alone', 1, [qr{gset must follow a SQL command}], q{\gset} ], + [ 'gset alone', 1, [qr{gset must follow an SQL command}], q{\gset} ], [ 'gset no SQL', 1, - [qr{gset must follow a SQL command}], q{\set i +1 + [qr{gset must follow an SQL command}], q{\set i +1 \gset} ], [ @@ -1103,7 +1103,7 @@ sub pgbench ], [ 'gset after gset', 1, - [qr{gset must follow a SQL command}], q{SELECT 1 AS i \gset + [qr{gset must follow an SQL command}], q{SELECT 1 AS i \gset \gset} ], [ From d0e750c0acaf31f60667b1635311bcef5ab38bbe Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Thu, 10 Jun 2021 21:56:13 -0700 Subject: [PATCH 442/671] Rename PQtraceSetFlags() to PQsetTraceFlags(). We have a dozen PQset*() functions. PQresultSetInstanceData() and this were the libpq setter functions having a different word order. Adopt the majority word order. Reviewed by Alvaro Herrera and Robert Haas, though this choice of name was not unanimous. Discussion: https://postgr.es/m/20210605060555.GA216695@rfd.leadboat.com --- doc/src/sgml/libpq.sgml | 6 +++--- src/interfaces/libpq/exports.txt | 2 +- src/interfaces/libpq/fe-trace.c | 2 +- src/interfaces/libpq/libpq-fe.h | 2 +- src/test/modules/libpq_pipeline/libpq_pipeline.c | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 9e6e085385466..6b96f30dccaa9 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -6533,14 +6533,14 @@ void PQtrace(PGconn *conn, FILE *stream); - - PQtraceSetFlagsPQtraceSetFlags + + PQsetTraceFlagsPQtraceSetFlags Controls the tracing behavior of client/server communication. -void PQtraceSetFlags(PGconn *conn, int flags); +void PQsetTraceFlags(PGconn *conn, int flags); diff --git a/src/interfaces/libpq/exports.txt b/src/interfaces/libpq/exports.txt index 9ef99f6de127b..824a03ffbdc88 100644 --- a/src/interfaces/libpq/exports.txt +++ b/src/interfaces/libpq/exports.txt @@ -183,5 +183,5 @@ PQenterPipelineMode 180 PQexitPipelineMode 181 PQpipelineSync 182 PQpipelineStatus 183 -PQtraceSetFlags 184 +PQsetTraceFlags 184 PQmblenBounded 185 diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c index 76a6d1ebe2d5c..8660d27926e8b 100644 --- a/src/interfaces/libpq/fe-trace.c +++ b/src/interfaces/libpq/fe-trace.c @@ -61,7 +61,7 @@ PQuntrace(PGconn *conn) /* Set flags for current tracing session */ void -PQtraceSetFlags(PGconn *conn, int flags) +PQsetTraceFlags(PGconn *conn, int flags) { if (conn == NULL) return; diff --git a/src/interfaces/libpq/libpq-fe.h b/src/interfaces/libpq/libpq-fe.h index ca733a2004835..ec378705ad75f 100644 --- a/src/interfaces/libpq/libpq-fe.h +++ b/src/interfaces/libpq/libpq-fe.h @@ -403,7 +403,7 @@ extern void PQuntrace(PGconn *conn); #define PQTRACE_SUPPRESS_TIMESTAMPS (1<<0) /* redact portions of some messages, for testing frameworks */ #define PQTRACE_REGRESS_MODE (1<<1) -extern void PQtraceSetFlags(PGconn *conn, int flags); +extern void PQsetTraceFlags(PGconn *conn, int flags); /* === in fe-exec.c === */ diff --git a/src/test/modules/libpq_pipeline/libpq_pipeline.c b/src/test/modules/libpq_pipeline/libpq_pipeline.c index e4bba103ed112..71eedb6dbb4b8 100644 --- a/src/test/modules/libpq_pipeline/libpq_pipeline.c +++ b/src/test/modules/libpq_pipeline/libpq_pipeline.c @@ -1326,7 +1326,7 @@ main(int argc, char **argv) setvbuf(trace, NULL, PG_IOLBF, 0); PQtrace(conn, trace); - PQtraceSetFlags(conn, + PQsetTraceFlags(conn, PQTRACE_SUPPRESS_TIMESTAMPS | PQTRACE_REGRESS_MODE); } From 13a1ca160dcfc316c9f4005891a312f5a84c5ca2 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Thu, 10 Jun 2021 21:56:14 -0700 Subject: [PATCH 443/671] Change position of field "transformed" in struct CreateStatsStmt. Resolve the disagreement with nodes/*funcs.c field order in favor of the latter, which is better-aligned with the IndexStmt field order. This field is new in v14. Discussion: https://postgr.es/m/20210611045546.GA573364@rfd.leadboat.com --- src/backend/parser/parse_utilcmd.c | 2 +- src/include/nodes/parsenodes.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index d5b67d48cfcfc..c9708e38f4680 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -1980,8 +1980,8 @@ generateClonedExtStatsStmt(RangeVar *heapRel, Oid heapRelid, stats->exprs = def_names; stats->relations = list_make1(heapRel); stats->stxcomment = NULL; - stats->if_not_exists = false; stats->transformed = true; /* don't need transformStatsStmt again */ + stats->if_not_exists = false; /* Clean up */ ReleaseSysCache(ht_stats); diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 58328c437740e..def9651b341c9 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -2912,8 +2912,8 @@ typedef struct CreateStatsStmt List *exprs; /* expressions to build statistics on */ List *relations; /* rels to build stats on (list of RangeVar) */ char *stxcomment; /* comment to apply to stats, or NULL */ - bool if_not_exists; /* do nothing if stats name already exists */ bool transformed; /* true when transformStatsStmt is finished */ + bool if_not_exists; /* do nothing if stats name already exists */ } CreateStatsStmt; /* From d08237b5b494f96e72220bcef36a14a642969f16 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 11 Jun 2021 15:46:18 +0900 Subject: [PATCH 444/671] Improve psql tab completion for options of subcriptions and publications The list of options provided by the tab completion was outdated for the following commands: - ALTER SUBSCRIPTION - CREATE SUBSCRIPTION - ALTER PUBLICATION - CREATE PUBLICATION Author: Vignesh C Reviewed-by: Bharath Rupireddy Discussion: https://postgr.es/m/CALDaNm18oHDFu6SFCHE=ZbiO153Fx7E-L1MG0YyScbaDV--U+A@mail.gmail.com --- src/bin/psql/tab-complete.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 32c1bdfdca743..bd8e9ea2f8aaa 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1646,7 +1646,7 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH("(", "TABLE"); /* ALTER PUBLICATION SET ( */ else if (HeadMatches("ALTER", "PUBLICATION", MatchAny) && TailMatches("SET", "(")) - COMPLETE_WITH("publish"); + COMPLETE_WITH("publish", "publish_via_partition_root"); /* ALTER SUBSCRIPTION */ else if (Matches("ALTER", "SUBSCRIPTION", MatchAny)) COMPLETE_WITH("CONNECTION", "ENABLE", "DISABLE", "OWNER TO", @@ -1665,7 +1665,7 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH("(", "PUBLICATION"); /* ALTER SUBSCRIPTION SET ( */ else if (HeadMatches("ALTER", "SUBSCRIPTION", MatchAny) && TailMatches("SET", "(")) - COMPLETE_WITH("slot_name", "synchronous_commit"); + COMPLETE_WITH("binary", "slot_name", "streaming", "synchronous_commit"); /* ALTER SUBSCRIPTION SET PUBLICATION */ else if (HeadMatches("ALTER", "SUBSCRIPTION", MatchAny) && TailMatches("SET", "PUBLICATION")) { @@ -2638,7 +2638,7 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL); /* Complete "CREATE PUBLICATION [...] WITH" */ else if (HeadMatches("CREATE", "PUBLICATION") && TailMatches("WITH", "(")) - COMPLETE_WITH("publish"); + COMPLETE_WITH("publish", "publish_via_partition_root"); /* CREATE RULE */ /* Complete "CREATE [ OR REPLACE ] RULE " with "AS ON" */ @@ -2758,8 +2758,9 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH("WITH ("); /* Complete "CREATE SUBSCRIPTION ... WITH ( " */ else if (HeadMatches("CREATE", "SUBSCRIPTION") && TailMatches("WITH", "(")) - COMPLETE_WITH("copy_data", "connect", "create_slot", "enabled", - "slot_name", "synchronous_commit"); + COMPLETE_WITH("binary", "connect", "copy_data", "create_slot", + "enabled", "slot_name", "streaming", + "synchronous_commit"); /* CREATE TRIGGER --- is allowed inside CREATE SCHEMA, so use TailMatches */ From 96540f80f8334a3f0f4a13f0d42e4565d8fa9eb7 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 11 Jun 2021 12:16:14 -0400 Subject: [PATCH 445/671] Fix race condition in invalidating obsolete replication slots MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The code added to mark replication slots invalid in commit c6550776394e had the race condition that a slot can be dropped or advanced concurrently with checkpointer trying to invalidate it. Rewrite the code to close those races. The changes to ReplicationSlotAcquire's API added with c6550776394e are not necessary anymore. To avoid an ABI break in released branches, this commit leaves that unchanged; it'll be changed in a master-only commit separately. Backpatch to 13, where this code first appeared. Reported-by: Andres Freund Author: Andres Freund Author: Álvaro Herrera Discussion: https://postgr.es/m/20210408001037.wfmk6jud36auhfqm@alap3.anarazel.de --- src/backend/replication/slot.c | 221 +++++++++++++++++++++------------ 1 file changed, 144 insertions(+), 77 deletions(-) diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index c88b803e5d0b4..5a0bad97f498b 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -1161,116 +1161,183 @@ ReplicationSlotReserveWal(void) } /* - * Mark any slot that points to an LSN older than the given segment - * as invalid; it requires WAL that's about to be removed. + * Helper for InvalidateObsoleteReplicationSlots -- acquires the given slot + * and mark it invalid, if necessary and possible. * - * NB - this runs as part of checkpoint, so avoid raising errors if possible. + * Returns whether ReplicationSlotControlLock was released in the interim (and + * in that case we're not holding the lock at return, otherwise we are). + * + * This is inherently racy, because we release the LWLock + * for syscalls, so caller must restart if we return true. */ -void -InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno) +static bool +InvalidatePossiblyObsoleteSlot(ReplicationSlot *s, XLogRecPtr oldestLSN) { - XLogRecPtr oldestLSN; - - XLogSegNoOffsetToRecPtr(oldestSegno, 0, wal_segment_size, oldestLSN); + int last_signaled_pid = 0; + bool released_lock = false; -restart: - LWLockAcquire(ReplicationSlotControlLock, LW_SHARED); - for (int i = 0; i < max_replication_slots; i++) + for (;;) { - ReplicationSlot *s = &ReplicationSlotCtl->replication_slots[i]; - XLogRecPtr restart_lsn = InvalidXLogRecPtr; + XLogRecPtr restart_lsn; NameData slotname; - int wspid; - int last_signaled_pid = 0; + int active_pid = 0; + + Assert(LWLockHeldByMeInMode(ReplicationSlotControlLock, LW_SHARED)); if (!s->in_use) - continue; + { + if (released_lock) + LWLockRelease(ReplicationSlotControlLock); + break; + } + /* + * Check if the slot needs to be invalidated. If it needs to be + * invalidated, and is not currently acquired, acquire it and mark it + * as having been invalidated. We do this with the spinlock held to + * avoid race conditions -- for example the restart_lsn could move + * forward, or the slot could be dropped. + */ SpinLockAcquire(&s->mutex); - slotname = s->data.name; + restart_lsn = s->data.restart_lsn; - SpinLockRelease(&s->mutex); + /* + * If the slot is already invalid or is fresh enough, we don't need to + * do anything. + */ if (XLogRecPtrIsInvalid(restart_lsn) || restart_lsn >= oldestLSN) - continue; - LWLockRelease(ReplicationSlotControlLock); - CHECK_FOR_INTERRUPTS(); + { + SpinLockRelease(&s->mutex); + if (released_lock) + LWLockRelease(ReplicationSlotControlLock); + break; + } + + slotname = s->data.name; + active_pid = s->active_pid; + + /* + * If the slot can be acquired, do so and mark it invalidated + * immediately. Otherwise we'll signal the owning process, below, and + * retry. + */ + if (active_pid == 0) + { + MyReplicationSlot = s; + s->active_pid = MyProcPid; + s->data.invalidated_at = restart_lsn; + s->data.restart_lsn = InvalidXLogRecPtr; + } - /* Get ready to sleep on the slot in case it is active */ - ConditionVariablePrepareToSleep(&s->active_cv); + SpinLockRelease(&s->mutex); - for (;;) + if (active_pid != 0) { /* - * Try to mark this slot as used by this process. - * - * Note that ReplicationSlotAcquireInternal(SAB_Inquire) should - * not cancel the prepared condition variable if this slot is - * active in other process. Because in this case we have to wait - * on that CV for the process owning the slot to be terminated, - * later. + * Prepare the sleep on the slot's condition variable before + * releasing the lock, to close a possible race condition if the + * slot is released before the sleep below. */ - wspid = ReplicationSlotAcquireInternal(s, NULL, SAB_Inquire); + ConditionVariablePrepareToSleep(&s->active_cv); - /* - * Exit the loop if we successfully acquired the slot or the slot - * was dropped during waiting for the owning process to be - * terminated. For example, the latter case is likely to happen - * when the slot is temporary because it's automatically dropped - * by the termination of the owning process. - */ - if (wspid <= 0) - break; + LWLockRelease(ReplicationSlotControlLock); + released_lock = true; /* - * Signal to terminate the process that owns the slot. + * Signal to terminate the process that owns the slot, if we + * haven't already signalled it. (Avoidance of repeated + * signalling is the only reason for there to be a loop in this + * routine; otherwise we could rely on caller's restart loop.) * - * There is the race condition where other process may own the - * slot after the process using it was terminated and before this - * process owns it. To handle this case, we signal again if the - * PID of the owning process is changed than the last. - * - * XXX This logic assumes that the same PID is not reused very - * quickly. + * There is the race condition that other process may own the slot + * after its current owner process is terminated and before this + * process owns it. To handle that, we signal only if the PID of + * the owning process has changed from the previous time. (This + * logic assumes that the same PID is not reused very quickly.) */ - if (last_signaled_pid != wspid) + if (last_signaled_pid != active_pid) { ereport(LOG, - (errmsg("terminating process %d because replication slot \"%s\" is too far behind", - wspid, NameStr(slotname)))); - (void) kill(wspid, SIGTERM); - last_signaled_pid = wspid; + (errmsg("terminating process %d to release replication slot \"%s\"", + active_pid, NameStr(slotname)))); + + (void) kill(active_pid, SIGTERM); + last_signaled_pid = active_pid; } - ConditionVariableTimedSleep(&s->active_cv, 10, - WAIT_EVENT_REPLICATION_SLOT_DROP); + /* Wait until the slot is released. */ + ConditionVariableSleep(&s->active_cv, + WAIT_EVENT_REPLICATION_SLOT_DROP); + + /* + * Re-acquire lock and start over; we expect to invalidate the slot + * next time (unless another process acquires the slot in the + * meantime). + */ + LWLockAcquire(ReplicationSlotControlLock, LW_SHARED); + continue; } - ConditionVariableCancelSleep(); + else + { + /* + * We hold the slot now and have already invalidated it; flush it + * to ensure that state persists. + * + * Don't want to hold ReplicationSlotControlLock across file + * system operations, so release it now but be sure to tell caller + * to restart from scratch. + */ + LWLockRelease(ReplicationSlotControlLock); + released_lock = true; - /* - * Do nothing here and start from scratch if the slot has already been - * dropped. - */ - if (wspid == -1) - goto restart; + /* Make sure the invalidated state persists across server restart */ + ReplicationSlotMarkDirty(); + ReplicationSlotSave(); + ReplicationSlotRelease(); - ereport(LOG, - (errmsg("invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size", - NameStr(slotname), - LSN_FORMAT_ARGS(restart_lsn)))); + ereport(LOG, + (errmsg("invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size", + NameStr(slotname), + LSN_FORMAT_ARGS(restart_lsn)))); - SpinLockAcquire(&s->mutex); - s->data.invalidated_at = s->data.restart_lsn; - s->data.restart_lsn = InvalidXLogRecPtr; - SpinLockRelease(&s->mutex); + /* done with this slot for now */ + break; + } + } - /* Make sure the invalidated state persists across server restart */ - ReplicationSlotMarkDirty(); - ReplicationSlotSave(); - ReplicationSlotRelease(); + Assert(released_lock == !LWLockHeldByMe(ReplicationSlotControlLock)); - /* if we did anything, start from scratch */ - goto restart; + return released_lock; +} + +/* + * Mark any slot that points to an LSN older than the given segment + * as invalid; it requires WAL that's about to be removed. + * + * NB - this runs as part of checkpoint, so avoid raising errors if possible. + */ +void +InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno) +{ + XLogRecPtr oldestLSN; + + XLogSegNoOffsetToRecPtr(oldestSegno, 0, wal_segment_size, oldestLSN); + +restart: + LWLockAcquire(ReplicationSlotControlLock, LW_SHARED); + for (int i = 0; i < max_replication_slots; i++) + { + ReplicationSlot *s = &ReplicationSlotCtl->replication_slots[i]; + + if (!s->in_use) + continue; + + if (InvalidatePossiblyObsoleteSlot(s, oldestLSN)) + { + /* if the lock was released, start from scratch */ + goto restart; + } } LWLockRelease(ReplicationSlotControlLock); } From b676ac443b6a83558d4701b2dd9491c0b37e17c4 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Fri, 11 Jun 2021 20:19:48 +0200 Subject: [PATCH 446/671] Optimize creation of slots for FDW bulk inserts Commit b663a41363 introduced bulk inserts for FDW, but the handling of tuple slots turned out to be problematic for two reasons. Firstly, the slots were re-created for each individual batch. Secondly, all slots referenced the same tuple descriptor - with reasonably small batches this is not an issue, but with large batches this triggers O(N^2) behavior in the resource owner code. These two issues work against each other - to reduce the number of times a slot has to be created/dropped, larger batches are needed. However, the larger the batch, the more expensive the resource owner gets. For practical batch sizes (100 - 1000) this would not be a big problem, as the benefits (latency savings) greatly exceed the resource owner costs. But for extremely large batches it might be much worse, possibly even losing with non-batching mode. Fixed by initializing tuple slots only once (and reusing them across batches) and by using a new tuple descriptor copy for each slot. Discussion: https://postgr.es/m/ebbbcc7d-4286-8c28-0272-61b4753af761%40enterprisedb.com --- src/backend/executor/nodeModifyTable.c | 52 ++++++++++++++++++-------- src/include/nodes/execnodes.h | 1 + 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 379b05631050c..88c479c6da33a 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -703,16 +703,31 @@ ExecInsert(ModifyTableState *mtstate, resultRelInfo->ri_BatchSize); } - resultRelInfo->ri_Slots[resultRelInfo->ri_NumSlots] = - MakeSingleTupleTableSlot(slot->tts_tupleDescriptor, - slot->tts_ops); - ExecCopySlot(resultRelInfo->ri_Slots[resultRelInfo->ri_NumSlots], - slot); - resultRelInfo->ri_PlanSlots[resultRelInfo->ri_NumSlots] = - MakeSingleTupleTableSlot(planSlot->tts_tupleDescriptor, - planSlot->tts_ops); - ExecCopySlot(resultRelInfo->ri_PlanSlots[resultRelInfo->ri_NumSlots], - planSlot); + /* + * Initialize the batch slots. We don't know how many slots will be + * needed, so we initialize them as the batch grows, and we keep + * them across batches. To mitigate an inefficiency in how resource + * owner handles objects with many references (as with many slots + * all referencing the same tuple descriptor) we copy the tuple + * descriptor for each slot. + */ + if (resultRelInfo->ri_NumSlots >= resultRelInfo->ri_NumSlotsInitialized) + { + TupleDesc tdesc = CreateTupleDescCopy(slot->tts_tupleDescriptor); + + resultRelInfo->ri_Slots[resultRelInfo->ri_NumSlots] = + MakeSingleTupleTableSlot(tdesc, slot->tts_ops); + ExecCopySlot(resultRelInfo->ri_Slots[resultRelInfo->ri_NumSlots], + slot); + + resultRelInfo->ri_PlanSlots[resultRelInfo->ri_NumSlots] = + MakeSingleTupleTableSlot(tdesc, planSlot->tts_ops); + ExecCopySlot(resultRelInfo->ri_PlanSlots[resultRelInfo->ri_NumSlots], + planSlot); + + /* remember how many batch slots we initialized */ + resultRelInfo->ri_NumSlotsInitialized++; + } resultRelInfo->ri_NumSlots++; @@ -1034,12 +1049,6 @@ ExecBatchInsert(ModifyTableState *mtstate, if (canSetTag && numInserted > 0) estate->es_processed += numInserted; - - for (i = 0; i < numSlots; i++) - { - ExecDropSingleTupleTableSlot(slots[i]); - ExecDropSingleTupleTableSlot(planSlots[i]); - } } /* ---------------------------------------------------------------- @@ -3162,6 +3171,7 @@ ExecEndModifyTable(ModifyTableState *node) */ for (i = 0; i < node->mt_nrels; i++) { + int j; ResultRelInfo *resultRelInfo = node->resultRelInfo + i; if (!resultRelInfo->ri_usesFdwDirectModify && @@ -3169,6 +3179,16 @@ ExecEndModifyTable(ModifyTableState *node) resultRelInfo->ri_FdwRoutine->EndForeignModify != NULL) resultRelInfo->ri_FdwRoutine->EndForeignModify(node->ps.state, resultRelInfo); + + /* + * Cleanup the initialized batch slots. This only matters for FDWs with + * batching, but the other cases will have ri_NumSlotsInitialized == 0. + */ + for (j = 0; j < resultRelInfo->ri_NumSlotsInitialized; j++) + { + ExecDropSingleTupleTableSlot(resultRelInfo->ri_Slots[j]); + ExecDropSingleTupleTableSlot(resultRelInfo->ri_PlanSlots[j]); + } } /* diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 7795a69490505..9a5ca7b3dbf87 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -462,6 +462,7 @@ typedef struct ResultRelInfo /* batch insert stuff */ int ri_NumSlots; /* number of slots in the array */ + int ri_NumSlotsInitialized; /* number of initialized slots */ int ri_BatchSize; /* max slots inserted in a single batch */ TupleTableSlot **ri_Slots; /* input tuples for batch insert */ TupleTableSlot **ri_PlanSlots; From 1632ea43682fcea8836ea245771ae85b9e1bcd38 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 11 Jun 2021 15:48:26 -0400 Subject: [PATCH 447/671] Return ReplicationSlotAcquire API to its original form MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per 96540f80f833; the awkward API introduced by c6550776394e is no longer needed. Author: Andres Freund Reviewed-by: Álvaro Herrera Discussion: https://postgr.es/m/20210408020913.zzprrlvqyvlt5cyy@alap3.anarazel.de --- .../replication/logical/logicalfuncs.c | 2 +- src/backend/replication/slot.c | 53 +++++-------------- src/backend/replication/slotfuncs.c | 2 +- src/backend/replication/walsender.c | 4 +- src/include/replication/slot.h | 10 +--- 5 files changed, 18 insertions(+), 53 deletions(-) diff --git a/src/backend/replication/logical/logicalfuncs.c b/src/backend/replication/logical/logicalfuncs.c index 01d354829b936..1f38c5b33eaff 100644 --- a/src/backend/replication/logical/logicalfuncs.c +++ b/src/backend/replication/logical/logicalfuncs.c @@ -225,7 +225,7 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin else end_of_wal = GetXLogReplayRecPtr(&ThisTimeLineID); - (void) ReplicationSlotAcquire(NameStr(*name), SAB_Error); + ReplicationSlotAcquire(NameStr(*name), true); PG_TRY(); { diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index 5a0bad97f498b..a9a06b9a38a97 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -99,8 +99,6 @@ ReplicationSlot *MyReplicationSlot = NULL; int max_replication_slots = 0; /* the maximum number of replication * slots */ -static int ReplicationSlotAcquireInternal(ReplicationSlot *slot, - const char *name, SlotAcquireBehavior behavior); static void ReplicationSlotDropAcquired(void); static void ReplicationSlotDropPtr(ReplicationSlot *slot); @@ -374,34 +372,16 @@ SearchNamedReplicationSlot(const char *name, bool need_lock) /* * Find a previously created slot and mark it as used by this process. * - * The return value is only useful if behavior is SAB_Inquire, in which - * it's zero if we successfully acquired the slot, -1 if the slot no longer - * exists, or the PID of the owning process otherwise. If behavior is - * SAB_Error, then trying to acquire an owned slot is an error. - * If SAB_Block, we sleep until the slot is released by the owning process. + * An error is raised if nowait is true and the slot is currently in use. If + * nowait is false, we sleep until the slot is released by the owning process. */ -int -ReplicationSlotAcquire(const char *name, SlotAcquireBehavior behavior) -{ - return ReplicationSlotAcquireInternal(NULL, name, behavior); -} - -/* - * Mark the specified slot as used by this process. - * - * Only one of slot and name can be specified. - * If slot == NULL, search for the slot with the given name. - * - * See comments about the return value in ReplicationSlotAcquire(). - */ -static int -ReplicationSlotAcquireInternal(ReplicationSlot *slot, const char *name, - SlotAcquireBehavior behavior) +void +ReplicationSlotAcquire(const char *name, bool nowait) { ReplicationSlot *s; int active_pid; - AssertArg((slot == NULL) ^ (name == NULL)); + AssertArg(name != NULL); retry: Assert(MyReplicationSlot == NULL); @@ -412,17 +392,15 @@ ReplicationSlotAcquireInternal(ReplicationSlot *slot, const char *name, * Search for the slot with the specified name if the slot to acquire is * not given. If the slot is not found, we either return -1 or error out. */ - s = slot ? slot : SearchNamedReplicationSlot(name, false); + s = SearchNamedReplicationSlot(name, false); if (s == NULL || !s->in_use) { LWLockRelease(ReplicationSlotControlLock); - if (behavior == SAB_Inquire) - return -1; ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), errmsg("replication slot \"%s\" does not exist", - name ? name : NameStr(slot->data.name)))); + name))); } /* @@ -436,7 +414,7 @@ ReplicationSlotAcquireInternal(ReplicationSlot *slot, const char *name, * (We may end up not sleeping, but we don't want to do this while * holding the spinlock.) */ - if (behavior == SAB_Block) + if (!nowait) ConditionVariablePrepareToSleep(&s->active_cv); SpinLockAcquire(&s->mutex); @@ -456,13 +434,11 @@ ReplicationSlotAcquireInternal(ReplicationSlot *slot, const char *name, */ if (active_pid != MyProcPid) { - if (behavior == SAB_Error) + if (!nowait) ereport(ERROR, (errcode(ERRCODE_OBJECT_IN_USE), errmsg("replication slot \"%s\" is active for PID %d", NameStr(s->data.name), active_pid))); - else if (behavior == SAB_Inquire) - return active_pid; /* Wait here until we get signaled, and then restart */ ConditionVariableSleep(&s->active_cv, @@ -470,7 +446,7 @@ ReplicationSlotAcquireInternal(ReplicationSlot *slot, const char *name, ConditionVariableCancelSleep(); goto retry; } - else if (behavior == SAB_Block) + else if (!nowait) ConditionVariableCancelSleep(); /* no sleep needed after all */ /* Let everybody know we've modified this slot */ @@ -478,9 +454,6 @@ ReplicationSlotAcquireInternal(ReplicationSlot *slot, const char *name, /* We made this slot active, so it's ours now. */ MyReplicationSlot = s; - - /* success */ - return 0; } /* @@ -588,7 +561,7 @@ ReplicationSlotDrop(const char *name, bool nowait) { Assert(MyReplicationSlot == NULL); - (void) ReplicationSlotAcquire(name, nowait ? SAB_Error : SAB_Block); + ReplicationSlotAcquire(name, nowait); ReplicationSlotDropAcquired(); } @@ -1271,8 +1244,8 @@ InvalidatePossiblyObsoleteSlot(ReplicationSlot *s, XLogRecPtr oldestLSN) WAIT_EVENT_REPLICATION_SLOT_DROP); /* - * Re-acquire lock and start over; we expect to invalidate the slot - * next time (unless another process acquires the slot in the + * Re-acquire lock and start over; we expect to invalidate the + * slot next time (unless another process acquires the slot in the * meantime). */ LWLockAcquire(ReplicationSlotControlLock, LW_SHARED); diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c index e4e6632f82e04..31e74d3832288 100644 --- a/src/backend/replication/slotfuncs.c +++ b/src/backend/replication/slotfuncs.c @@ -639,7 +639,7 @@ pg_replication_slot_advance(PG_FUNCTION_ARGS) moveto = Min(moveto, GetXLogReplayRecPtr(&ThisTimeLineID)); /* Acquire the slot so we "own" it */ - (void) ReplicationSlotAcquire(NameStr(*slotname), SAB_Error); + ReplicationSlotAcquire(NameStr(*slotname), true); /* A slot whose restart_lsn has never been reserved cannot be advanced */ if (XLogRecPtrIsInvalid(MyReplicationSlot->data.restart_lsn)) diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index 109c723f4e1e7..322453635613c 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -601,7 +601,7 @@ StartReplication(StartReplicationCmd *cmd) if (cmd->slotname) { - (void) ReplicationSlotAcquire(cmd->slotname, SAB_Error); + ReplicationSlotAcquire(cmd->slotname, true); if (SlotIsLogical(MyReplicationSlot)) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), @@ -1137,7 +1137,7 @@ StartLogicalReplication(StartReplicationCmd *cmd) Assert(!MyReplicationSlot); - (void) ReplicationSlotAcquire(cmd->slotname, SAB_Error); + ReplicationSlotAcquire(cmd->slotname, true); if (XLogRecPtrIsInvalid(MyReplicationSlot->data.restart_lsn)) ereport(ERROR, diff --git a/src/include/replication/slot.h b/src/include/replication/slot.h index 357068403a11e..2eb7e3a530d43 100644 --- a/src/include/replication/slot.h +++ b/src/include/replication/slot.h @@ -37,14 +37,6 @@ typedef enum ReplicationSlotPersistency RS_TEMPORARY } ReplicationSlotPersistency; -/* For ReplicationSlotAcquire, q.v. */ -typedef enum SlotAcquireBehavior -{ - SAB_Error, - SAB_Block, - SAB_Inquire -} SlotAcquireBehavior; - /* * On-Disk data of a replication slot, preserved across restarts. */ @@ -208,7 +200,7 @@ extern void ReplicationSlotCreate(const char *name, bool db_specific, extern void ReplicationSlotPersist(void); extern void ReplicationSlotDrop(const char *name, bool nowait); -extern int ReplicationSlotAcquire(const char *name, SlotAcquireBehavior behavior); +extern void ReplicationSlotAcquire(const char *name, bool nowait); extern void ReplicationSlotRelease(void); extern void ReplicationSlotCleanup(void); extern void ReplicationSlotSave(void); From 4efcf47053eaf8dd88de2b1a89478df43d37d5c0 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 11 Jun 2021 16:05:50 -0400 Subject: [PATCH 448/671] Add 'Portal Close' message to pipelined PQsendQuery() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commit acb7e4eb6b1c added a new implementation for PQsendQuery so that it works in pipeline mode (by using extended query protocol), but it behaves differently from the 'Q' message (in simple query protocol) used by regular implementation: the new one doesn't close the unnamed portal. Change the new code to have identical behavior to the old. Reported-by: Yura Sokolov Author: Álvaro Herrera Discussion: https://postgr.es/m/202106072107.d4i55hdscxqj@alvherre.pgsql --- src/interfaces/libpq/fe-exec.c | 8 +++++++- .../modules/libpq_pipeline/traces/pipeline_abort.trace | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 832d61c544f38..7bd5b3a7b9da3 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -1329,7 +1329,8 @@ PQsendQueryInternal(PGconn *conn, const char *query, bool newQuery) { /* * In pipeline mode we cannot use the simple protocol, so we send - * Parse, Bind, Describe Portal, Execute. + * Parse, Bind, Describe Portal, Execute, Close Portal (with the + * unnamed portal). */ if (pqPutMsgStart('P', conn) < 0 || pqPuts("", conn) < 0 || @@ -1355,6 +1356,11 @@ PQsendQueryInternal(PGconn *conn, const char *query, bool newQuery) pqPutInt(0, 4, conn) < 0 || pqPutMsgEnd(conn) < 0) goto sendFailed; + if (pqPutMsgStart('C', conn) < 0 || + pqPutc('P', conn) < 0 || + pqPuts("", conn) < 0 || + pqPutMsgEnd(conn) < 0) + goto sendFailed; entry->queryclass = PGQUERY_EXTENDED; entry->query = strdup(query); diff --git a/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace b/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace index 254e48599755e..3fce548b99547 100644 --- a/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace +++ b/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace @@ -38,6 +38,7 @@ F 26 Parse "" "SELECT 1; SELECT 2" 0 F 12 Bind "" "" 0 0 0 F 6 Describe P "" F 9 Execute "" 0 +F 6 Close P "" F 4 Sync B NN ErrorResponse S "ERROR" V "ERROR" C "42601" M "cannot insert multiple commands into a prepared statement" F "SSSS" L "SSSS" R "SSSS" \x00 B 5 ReadyForQuery I @@ -45,6 +46,7 @@ F 54 Parse "" "SELECT 1.0/g FROM generate_series(3, -1, -1) g" 0 F 12 Bind "" "" 0 0 0 F 6 Describe P "" F 9 Execute "" 0 +F 6 Close P "" F 4 Sync B 4 ParseComplete B 4 BindComplete From ab55d742eb7162c22ee60f1e15e07d2a60063c4e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 11 Jun 2021 16:12:36 -0400 Subject: [PATCH 449/671] Fix multiple crasher bugs in partitioned-table replication logic. apply_handle_tuple_routing(), having detected and reported that the tuple it needed to update didn't exist, tried to update that tuple anyway, leading to a null-pointer dereference. logicalrep_partition_open() failed to ensure that the LogicalRepPartMapEntry it built for a partition was fully independent of that for the partition root, leading to trouble if the root entry was later freed or rebuilt. Meanwhile, on the publisher's side, pgoutput_change() sometimes attempted to apply execute_attr_map_tuple() to a NULL tuple. The first of these was reported by Sergey Bernikov in bug #17055; I found the other two while developing some test cases for this sadly under-tested code. Diagnosis and patch for the first issue by Amit Langote; patches for the others by me; new test cases by me. Back-patch to v13 where this logic came in. Discussion: https://postgr.es/m/17055-9ba800ec8522668b@postgresql.org --- src/backend/replication/logical/relation.c | 13 +++- src/backend/replication/logical/worker.c | 48 ++++++++------ src/backend/replication/pgoutput/pgoutput.c | 7 +- src/test/subscription/t/001_rep_changes.pl | 36 ++++++++++- src/test/subscription/t/013_partition.pl | 71 ++++++++++++++++++++- 5 files changed, 146 insertions(+), 29 deletions(-) diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c index e861c0ff8029d..4930f2ca348f9 100644 --- a/src/backend/replication/logical/relation.c +++ b/src/backend/replication/logical/relation.c @@ -620,7 +620,9 @@ logicalrep_partmap_init(void) * logicalrep_partition_open * * Returned entry reuses most of the values of the root table's entry, save - * the attribute map, which can be different for the partition. + * the attribute map, which can be different for the partition. However, + * we must physically copy all the data, in case the root table's entry + * gets freed/rebuilt. * * Note there's no logicalrep_partition_close, because the caller closes the * component relation. @@ -656,7 +658,7 @@ logicalrep_partition_open(LogicalRepRelMapEntry *root, part_entry->partoid = partOid; - /* Remote relation is used as-is from the root entry. */ + /* Remote relation is copied as-is from the root entry. */ entry = &part_entry->relmapentry; entry->remoterel.remoteid = remoterel->remoteid; entry->remoterel.nspname = pstrdup(remoterel->nspname); @@ -699,7 +701,12 @@ logicalrep_partition_open(LogicalRepRelMapEntry *root, } } else - entry->attrmap = attrmap; + { + /* Lacking copy_attmap, do this the hard way. */ + entry->attrmap = make_attrmap(attrmap->maplen); + memcpy(entry->attrmap->attnums, attrmap->attnums, + attrmap->maplen * sizeof(AttrNumber)); + } entry->updatable = root->updatable; diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 98c26002e8375..689a66cc72ddb 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -1477,12 +1477,13 @@ apply_handle_update_internal(ApplyExecutionData *edata, else { /* - * The tuple to be updated could not be found. + * The tuple to be updated could not be found. Do nothing except for + * emitting a log message. * - * TODO what to do here, change the log level to LOG perhaps? + * XXX should this be promoted to ereport(LOG) perhaps? */ elog(DEBUG1, - "logical replication did not find row for update " + "logical replication did not find row to be updated " "in replication target relation \"%s\"", RelationGetRelationName(localrel)); } @@ -1589,9 +1590,14 @@ apply_handle_delete_internal(ApplyExecutionData *edata, } else { - /* The tuple to be deleted could not be found. */ + /* + * The tuple to be deleted could not be found. Do nothing except for + * emitting a log message. + * + * XXX should this be promoted to ereport(LOG) perhaps? + */ elog(DEBUG1, - "logical replication did not find row for delete " + "logical replication did not find row to be deleted " "in replication target relation \"%s\"", RelationGetRelationName(localrel)); } @@ -1728,30 +1734,30 @@ apply_handle_tuple_routing(ApplyExecutionData *edata, found = FindReplTupleInLocalRel(estate, partrel, &part_entry->remoterel, remoteslot_part, &localslot); - - oldctx = MemoryContextSwitchTo(GetPerTupleMemoryContext(estate)); - if (found) - { - /* Apply the update. */ - slot_modify_data(remoteslot_part, localslot, - part_entry, - newtup); - MemoryContextSwitchTo(oldctx); - } - else + if (!found) { /* - * The tuple to be updated could not be found. + * The tuple to be updated could not be found. Do nothing + * except for emitting a log message. * - * TODO what to do here, change the log level to LOG - * perhaps? + * XXX should this be promoted to ereport(LOG) perhaps? */ elog(DEBUG1, - "logical replication did not find row for update " - "in replication target relation \"%s\"", + "logical replication did not find row to be updated " + "in replication target relation's partition \"%s\"", RelationGetRelationName(partrel)); + return; } + /* + * Apply the update to the local tuple, putting the result in + * remoteslot_part. + */ + oldctx = MemoryContextSwitchTo(GetPerTupleMemoryContext(estate)); + slot_modify_data(remoteslot_part, localslot, part_entry, + newtup); + MemoryContextSwitchTo(oldctx); + /* * Does the updated tuple still satisfy the current * partition's constraint? diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index fe12d08a946da..63f108f960f75 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -612,8 +612,11 @@ pgoutput_change(LogicalDecodingContext *ctx, ReorderBufferTXN *txn, /* Convert tuples if needed. */ if (relentry->map) { - oldtuple = execute_attr_map_tuple(oldtuple, relentry->map); - newtuple = execute_attr_map_tuple(newtuple, relentry->map); + if (oldtuple) + oldtuple = execute_attr_map_tuple(oldtuple, + relentry->map); + newtuple = execute_attr_map_tuple(newtuple, + relentry->map); } } diff --git a/src/test/subscription/t/001_rep_changes.pl b/src/test/subscription/t/001_rep_changes.pl index 1f654ee6afc37..b2fdb289dbfa8 100644 --- a/src/test/subscription/t/001_rep_changes.pl +++ b/src/test/subscription/t/001_rep_changes.pl @@ -6,7 +6,7 @@ use warnings; use PostgresNode; use TestLib; -use Test::More tests => 28; +use Test::More tests => 31; # Initialize publisher node my $node_publisher = get_new_node('publisher'); @@ -118,7 +118,7 @@ "INSERT INTO tab_mixed VALUES (2, 'bar', 2.2)"); $node_publisher->safe_psql('postgres', - "INSERT INTO tab_full_pk VALUES (1, 'foo')"); + "INSERT INTO tab_full_pk VALUES (1, 'foo'), (2, 'baz')"); $node_publisher->safe_psql('postgres', "INSERT INTO tab_nothing VALUES (generate_series(1,20))"); @@ -297,6 +297,38 @@ local|2.2|bar|2), 'update works with different column order and subscriber local values'); +$result = $node_subscriber->safe_psql('postgres', + "SELECT * FROM tab_full_pk ORDER BY a"); +is( $result, qq(1|bar +2|baz), + 'update works with REPLICA IDENTITY FULL and a primary key'); + +# Check that subscriber handles cases where update/delete target tuple +# is missing. We have to look for the DEBUG1 log messages about that, +# so temporarily bump up the log verbosity. +$node_subscriber->append_conf('postgresql.conf', "log_min_messages = debug1"); +$node_subscriber->reload; + +$node_subscriber->safe_psql('postgres', "DELETE FROM tab_full_pk"); + +$node_publisher->safe_psql('postgres', + "UPDATE tab_full_pk SET b = 'quux' WHERE a = 1"); +$node_publisher->safe_psql('postgres', "DELETE FROM tab_full_pk WHERE a = 2"); + +$node_publisher->wait_for_catchup('tap_sub'); + +my $logfile = slurp_file($node_subscriber->logfile()); +ok( $logfile =~ + qr/logical replication did not find row to be updated in replication target relation "tab_full_pk"/, + 'update target row is missing'); +ok( $logfile =~ + qr/logical replication did not find row to be deleted in replication target relation "tab_full_pk"/, + 'delete target row is missing'); + +$node_subscriber->append_conf('postgresql.conf', + "log_min_messages = warning"); +$node_subscriber->reload; + # check behavior with toasted values $node_publisher->safe_psql('postgres', diff --git a/src/test/subscription/t/013_partition.pl b/src/test/subscription/t/013_partition.pl index 9de01017be5dc..d0b5a55d18632 100644 --- a/src/test/subscription/t/013_partition.pl +++ b/src/test/subscription/t/013_partition.pl @@ -6,7 +6,7 @@ use warnings; use PostgresNode; use TestLib; -use Test::More tests => 56; +use Test::More tests => 62; # setup @@ -347,6 +347,46 @@ BEGIN $node_subscriber2->safe_psql('postgres', "SELECT a FROM tab1 ORDER BY 1"); is($result, qq(), 'truncate of tab1 replicated'); +# Check that subscriber handles cases where update/delete target tuple +# is missing. We have to look for the DEBUG1 log messages about that, +# so temporarily bump up the log verbosity. +$node_subscriber1->append_conf('postgresql.conf', + "log_min_messages = debug1"); +$node_subscriber1->reload; + +$node_publisher->safe_psql('postgres', + "INSERT INTO tab1 VALUES (1, 'foo'), (4, 'bar'), (10, 'baz')"); + +$node_publisher->wait_for_catchup('sub1'); +$node_publisher->wait_for_catchup('sub2'); + +$node_subscriber1->safe_psql('postgres', "DELETE FROM tab1"); + +$node_publisher->safe_psql('postgres', + "UPDATE tab1 SET b = 'quux' WHERE a = 4"); +$node_publisher->safe_psql('postgres', "DELETE FROM tab1"); + +$node_publisher->wait_for_catchup('sub1'); +$node_publisher->wait_for_catchup('sub2'); + +my $logfile = slurp_file($node_subscriber1->logfile()); +ok( $logfile =~ + qr/logical replication did not find row to be updated in replication target relation's partition "tab1_2_2"/, + 'update target row is missing in tab1_2_2'); +ok( $logfile =~ + qr/logical replication did not find row to be deleted in replication target relation "tab1_1"/, + 'delete target row is missing in tab1_1'); +ok( $logfile =~ + qr/logical replication did not find row to be deleted in replication target relation "tab1_2_2"/, + 'delete target row is missing in tab1_2_2'); +ok( $logfile =~ + qr/logical replication did not find row to be deleted in replication target relation "tab1_def"/, + 'delete target row is missing in tab1_def'); + +$node_subscriber1->append_conf('postgresql.conf', + "log_min_messages = warning"); +$node_subscriber1->reload; + # Tests for replication using root table identity and schema # publisher @@ -650,3 +690,32 @@ BEGIN pub_tab2|3|yyy pub_tab2|5|zzz xxx_c|6|aaa), 'inserts into tab2 replicated'); + +# Check that subscriber handles cases where update/delete target tuple +# is missing. We have to look for the DEBUG1 log messages about that, +# so temporarily bump up the log verbosity. +$node_subscriber1->append_conf('postgresql.conf', + "log_min_messages = debug1"); +$node_subscriber1->reload; + +$node_subscriber1->safe_psql('postgres', "DELETE FROM tab2"); + +$node_publisher->safe_psql('postgres', + "UPDATE tab2 SET b = 'quux' WHERE a = 5"); +$node_publisher->safe_psql('postgres', "DELETE FROM tab2 WHERE a = 1"); + +$node_publisher->wait_for_catchup('sub_viaroot'); +$node_publisher->wait_for_catchup('sub2'); + +$logfile = slurp_file($node_subscriber1->logfile()); +ok( $logfile =~ + qr/logical replication did not find row to be updated in replication target relation's partition "tab2_1"/, + 'update target row is missing in tab2_1'); +ok( $logfile =~ + qr/logical replication did not find row to be deleted in replication target relation "tab2_1"/, + 'delete target row is missing in tab2_1'); + +# No need for this until more tests are added. +# $node_subscriber1->append_conf('postgresql.conf', +# "log_min_messages = warning"); +# $node_subscriber1->reload; From 5cc1cd502879d642da799e1fd12619d83d987369 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 11 Jun 2021 19:07:32 -0400 Subject: [PATCH 450/671] Report sort phase progress in parallel btree build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We were already reporting it, but only after the parallel workers were finished, which is visibly much later than what happens in a serial build. With this change we report it when the leader starts its own sort phase when participating in the build (the normal case). Now this might happen a little later than when the workers start their sorting phases, but a) communicating the actual phase start from workers is likely to be a hassle, and b) the sort phase start is pretty fuzzy anyway, since sorting per se is actually initiated by tuplesort.c internally earlier than tuplesort_performsort() is called. Backpatch to pg12, where the progress reporting code for CREATE INDEX went in. Reported-by: Tomas Vondra Author: Matthias van de Meent Reviewed-by: Greg Nancarrow Reviewed-by: Álvaro Herrera Discussion: https://postgr.es/m/1128176d-1eee-55d4-37ca-e63644422adb --- src/backend/access/nbtree/nbtsort.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c index 2c4d7f6e25a7c..5fa6ea8ad9a09 100644 --- a/src/backend/access/nbtree/nbtsort.c +++ b/src/backend/access/nbtree/nbtsort.c @@ -547,6 +547,7 @@ _bt_leafbuild(BTSpool *btspool, BTSpool *btspool2) } #endif /* BTREE_BUILD_STATS */ + /* Execute the sort */ pgstat_progress_update_param(PROGRESS_CREATEIDX_SUBPHASE, PROGRESS_BTREE_PHASE_PERFORMSORT_1); tuplesort_performsort(btspool->sortstate); @@ -1971,16 +1972,18 @@ _bt_parallel_scan_and_sort(BTSpool *btspool, BTSpool *btspool2, true, progress, _bt_build_callback, (void *) &buildstate, scan); - /* - * Execute this worker's part of the sort. - * - * Unlike leader and serial cases, we cannot avoid calling - * tuplesort_performsort() for spool2 if it ends up containing no dead - * tuples (this is disallowed for workers by tuplesort). - */ + /* Execute this worker's part of the sort */ + if (progress) + pgstat_progress_update_param(PROGRESS_CREATEIDX_SUBPHASE, + PROGRESS_BTREE_PHASE_PERFORMSORT_1); tuplesort_performsort(btspool->sortstate); if (btspool2) + { + if (progress) + pgstat_progress_update_param(PROGRESS_CREATEIDX_SUBPHASE, + PROGRESS_BTREE_PHASE_PERFORMSORT_2); tuplesort_performsort(btspool2->sortstate); + } /* * Done. Record ambuild statistics, and whether we encountered a broken From 0725913982e5e06895a32a9eeea2c59a13978927 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 11 Jun 2021 19:51:35 -0400 Subject: [PATCH 451/671] docs: fix incorrect indenting in PG 14 relnotes --- doc/src/sgml/release-14.sgml | 130 +++++++++++++++++------------------ 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index a2ad120cef415..21659bd184d70 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -170,12 +170,12 @@ Author: Bruce Momjian Values - 1/0/no-verify + 1/0/no-verify are no longer supported; only the strings - verify-ca and verify-full + verify-ca and verify-full can be used. Also, disallow verify-ca if cert authentication is enabled since cert requires - verify-full checking. + verify-full checking. @@ -230,7 +230,7 @@ Author: Peter Eisentraut - EXTRACT(date) now throws an error for units + EXTRACT(date) now throws an error for units that are not part of the date data type. @@ -261,7 +261,7 @@ Author: Peter Eisentraut Prevent 's function - normal_rand() from accepting negative values + normal_rand() from accepting negative values (Ashutosh Bapat) @@ -296,14 +296,14 @@ Author: Tom Lane Remove factorial operators ! and - !! (Mark Dilger) + !! (Mark Dilger) The factorial() function is still supported. Also remove function - numeric_fac(). + numeric_fac(). @@ -335,8 +335,8 @@ Author: Tom Lane - pg_dump and - pg_upgrade will warn if postfix operators + pg_dump and + pg_upgrade will warn if postfix operators are being dumped. @@ -371,7 +371,7 @@ Author: Tom Lane For example, disregard ^ in its expansion in - \1 in (^\d+).*\1. + \1 in (^\d+).*\1. @@ -400,7 +400,7 @@ Author: Tom Lane Require custom server variable names to match the pattern used for unquoted - SQL identifiers (Tom Lane) + SQL identifiers (Tom Lane) @@ -414,12 +414,12 @@ Author: Peter Geoghegan Remove server variable - vacuum_cleanup_index_scale_factor (Peter Geoghegan) + vacuum_cleanup_index_scale_factor (Peter Geoghegan) This setting was ignored starting in - PostgreSQL version 13.3. + PostgreSQL version 13.3. @@ -451,7 +451,7 @@ Author: Tom Lane Pass doubled quote marks in - SQL command strings literally (Tom Lane) + SQL command strings literally (Tom Lane) @@ -469,7 +469,7 @@ Author: Peter Eisentraut Disallow single-quoting of the language name in the - CREATE/DROP + CREATE/DROP LANGUAGE command (Peter Eisentraut) @@ -511,7 +511,7 @@ Author: Tom Lane This was needed for warning applications about - PostgreSQL 9.5 changes. + PostgreSQL 9.5 changes. @@ -523,9 +523,9 @@ Author: Tom Lane Changes - Below you will find a detailed account of the changes between - PostgreSQL 14 and the previous major - release. + Below you will find a detailed account of the changes between + PostgreSQL 14 and the previous major + release. @@ -635,7 +635,7 @@ Author: Noah Misch Previously tuples whose insertion would have exceeded the page's - fill factor were instead + fill factor were instead added to new pages. @@ -648,7 +648,7 @@ Author: Peter Eisentraut Add Set Server Name Indication (SNI) for - SSL connection packets (Peter Eisentraut) + SSL connection packets (Peter Eisentraut) @@ -742,7 +742,7 @@ Author: Michael Paquier - VACUUM + VACUUM now has a PROCESS_TOAST which can be set to false to disable TOAST processing, and vacuumdb @@ -804,7 +804,7 @@ Author: Alvaro Herrera --> - Autovacuum now analyzes + Autovacuum now analyzes partitioned tables (Yuzuko Hosoya, Álvaro Herrera) @@ -978,7 +978,7 @@ Author: Tom Lane Allow SP-GiST to use - INCLUDE'd columns (Pavel Borisov) + INCLUDE'd columns (Pavel Borisov) @@ -1060,7 +1060,7 @@ Author: David Rowley Previously a sequential scan was required for non-equality - TID specifications. + TID specifications. @@ -1302,10 +1302,10 @@ Author: Alvaro Herrera If server variable is enabled, display the query id in pg_stat_activity, - EXPLAIN + EXPLAIN VERBOSE, csvlog, and optionally in - (Julien Rouhaud) + (Julien Rouhaud) @@ -1506,7 +1506,7 @@ Author: Fujii Masao Make the archiver process visible in - pg_stat_activity (Kyotaro Horiguchi) + pg_stat_activity (Kyotaro Horiguchi) @@ -1960,7 +1960,7 @@ Author: Amit Kapila The output functions begin with stream. - test_decoding also supports these. + test_decoding also supports these. @@ -1984,7 +1984,7 @@ Author: Amit Kapila Immediately WAL-log subtransaction and top-level - XID association (Tomas Vondra, Dilip Kumar, Amit + XID association (Tomas Vondra, Dilip Kumar, Amit Kapila) @@ -2047,7 +2047,7 @@ Author: Amit Kapila This allows logical decoding to work efficiently in presence of a large amount of - DDL. + DDL. @@ -2124,13 +2124,13 @@ Author: Peter Eisentraut Allow an alias to be specified for JOIN's - USING clause (Peter Eisentraut) + USING clause (Peter Eisentraut) The alias is created by using AS after the - USING clause and represents an alias for the - USING columns. + USING clause and represents an alias for the + USING columns. @@ -2149,7 +2149,7 @@ Author: Tomas Vondra For example, GROUP BY CUBE (a,b), CUBE (b,c) will generate duplicate grouping combinations without - DISTINCT. + DISTINCT. @@ -2283,7 +2283,7 @@ Author: Tom Lane Previously non-function call - SQL standard syntax, e.g. SQL standard syntax, e.g. EXTRACT, were converted to non-SQL standard function calls. @@ -2435,7 +2435,7 @@ Author: Alexander Korotkov - JSONB subscripting can be used to extract and assign + JSONB subscripting can be used to extract and assign to portions of JSONB documents. @@ -2513,7 +2513,7 @@ Author: Tom Lane The previous limit was 4k bytes. Also remove function - t_readline(). + t_readline(). @@ -2601,7 +2601,7 @@ Author: Tom Lane Allow binary data transfer to be more forgiving of array and record - OID mismatches (Tom Lane) + OID mismatches (Tom Lane) @@ -2636,7 +2636,7 @@ Author: Peter Eisentraut Allow SQL-language functions and procedures to use - SQL-standard function bodies (Peter Eisentraut) + SQL-standard function bodies (Peter Eisentraut) @@ -2655,7 +2655,7 @@ Author: Peter Eisentraut Allow procedures to have - OUT parameters (Peter Eisentraut) + OUT parameters (Peter Eisentraut) @@ -2673,12 +2673,12 @@ Author: Tom Lane The functions are array_append(), - array_prepend(), - array_cat(), - array_position(), - array_positions(), - array_remove(), - array_replace(), and array_prepend(), + array_cat(), + array_position(), + array_positions(), + array_remove(), + array_replace(), and width_bucket(). Previously only identical data types could be used. @@ -2847,7 +2847,7 @@ Author: Peter Eisentraut The new syntax is SUBSTRING(text SIMILAR pattern ESCAPE escapechar). The previous standard syntax was - SUBSTRING(text FROM pattern FOR escapechar), + SUBSTRING(text FROM pattern FOR escapechar), and is still supported by Postgres. @@ -2904,7 +2904,7 @@ Author: Tom Lane Cause exp() and - power() for negative-infinity exponents to + power() for negative-infinity exponents to return zero (Tom Lane) @@ -2971,8 +2971,8 @@ Author: Michael Paquier Change pg_describe_object(), - pg_identify_object(), and - pg_identify_object_as_address() to always report + pg_identify_object(), and + pg_identify_object_as_address() to always report helpful error messages for non-existent objects (Michael Paquier) @@ -3074,8 +3074,8 @@ Author: Tom Lane New options are read-only, - primary, standby, and - prefer-standby. + primary, standby, and + prefer-standby. @@ -3166,7 +3166,7 @@ Author: Michael Paquier The options are and - . + . @@ -3196,7 +3196,7 @@ Author: Dean Rasheed Add pgbench - permute() function to randomly shuffle values + permute() function to randomly shuffle values (Fabien Coelho, Hironobu Suzuki, Dean Rasheed) @@ -3266,7 +3266,7 @@ Author: Tom Lane Allow psql's \dt and \di to show - TOAST tables and their indexes (Justin Pryzby) + TOAST tables and their indexes (Justin Pryzby) @@ -3303,7 +3303,7 @@ Author: Tom Lane When editing the previous query or a file with - psql's \e, or using \ef and \ev, ignore + psql's \e, or using \ef and \ev, ignore the contents if the editor exits without saving (Laurenz Albe) @@ -3446,7 +3446,7 @@ Author: Magnus Hagander Remove support for the postmaster - option (Magnus Hagander) + option (Magnus Hagander) @@ -3491,7 +3491,7 @@ Author: Peter Eisentraut With the removal of the ! operator in this release, - factorial() is the only built-in way to compute + factorial() is the only built-in way to compute a factorial. @@ -3611,7 +3611,7 @@ Author: Michael Paquier Change SHA1, SHA2, and MD5 hash computations to use the - OpenSSL EVP API + OpenSSL EVP API (Michael Paquier) @@ -3734,7 +3734,7 @@ Author: Peter Eisentraut Allow pgstattuple_approx() to report on - TOAST tables (Peter Eisentraut) + TOAST tables (Peter Eisentraut) @@ -3842,7 +3842,7 @@ Author: Bruce Momjian Move query hash computation from - pg_stat_statements to the core server + pg_stat_statements to the core server (Julien Rouhaud) @@ -3880,7 +3880,7 @@ Author: Fujii Masao Add row counts for utility commands to - pg_stat_statements> (Fujii Masao, Katsuragi + pg_stat_statements> (Fujii Masao, Katsuragi Yuta, Seino Yuki) @@ -3919,7 +3919,7 @@ Author: Tomas Vondra Allow postgres_fdw to - INSERT rows in bulk (Takayuki Tsunakawa, Tomas + INSERT rows in bulk (Takayuki Tsunakawa, Tomas Vondra, Amit Langote) @@ -3950,7 +3950,7 @@ Author: Fujii Masao Add postgres_fdw function - postgres_fdw_get_connections() to report open + postgres_fdw_get_connections() to report open foreign server connections (Bharath Rupireddy) From d120e66fac87f768ea2289d2d923d0ee4262ec0f Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 11 Jun 2021 21:01:52 -0400 Subject: [PATCH 452/671] doc: remove extra right angle bracket in PG 14 relnotes Reported-by: Justin Pryzby --- doc/src/sgml/release-14.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 21659bd184d70..058ba7cd4eb17 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -3880,7 +3880,7 @@ Author: Fujii Masao Add row counts for utility commands to - pg_stat_statements> (Fujii Masao, Katsuragi + pg_stat_statements (Fujii Masao, Katsuragi Yuta, Seino Yuki) From d8e950d3ae7b33a2064a4fb39b7829334b0b47bc Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Fri, 11 Jun 2021 21:22:21 -0700 Subject: [PATCH 453/671] Improve and cleanup ProcArrayAdd(), ProcArrayRemove(). 941697c3c1a changed ProcArrayAdd()/Remove() substantially. As reported by zhanyi, I missed that due to the introduction of the PGPROC->pgxactoff ProcArrayRemove() does not need to search for the position in procArray->pgprocnos anymore - that's pgxactoff. Remove the search loop. The removal of the search loop reduces assertion coverage a bit - but we can easily do better than before by adding assertions to other loops over pgprocnos elements. Also do a bit of cleanup, mostly by reducing line lengths by introducing local helper variables and adding newlines. Author: zhanyi Author: Andres Freund Discussion: https://postgr.es/m/tencent_5624AA3B116B3D1C31CA9744@qq.com --- src/backend/storage/ipc/procarray.c | 133 ++++++++++++++++------------ 1 file changed, 78 insertions(+), 55 deletions(-) diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 42a89fc5dc9ff..085bd1e40778e 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -446,6 +446,7 @@ ProcArrayAdd(PGPROC *proc) { ProcArrayStruct *arrayP = procArray; int index; + int movecount; /* See ProcGlobal comment explaining why both locks are held */ LWLockAcquire(ProcArrayLock, LW_EXCLUSIVE); @@ -474,33 +475,48 @@ ProcArrayAdd(PGPROC *proc) */ for (index = 0; index < arrayP->numProcs; index++) { - /* - * If we are the first PGPROC or if we have found our right position - * in the array, break - */ - if ((arrayP->pgprocnos[index] == -1) || (arrayP->pgprocnos[index] > proc->pgprocno)) + int procno PG_USED_FOR_ASSERTS_ONLY = arrayP->pgprocnos[index]; + + Assert(procno >= 0 && procno < (arrayP->maxProcs + NUM_AUXILIARY_PROCS)); + Assert(allProcs[procno].pgxactoff == index); + + /* If we have found our right position in the array, break */ + if (arrayP->pgprocnos[index] > proc->pgprocno) break; } - memmove(&arrayP->pgprocnos[index + 1], &arrayP->pgprocnos[index], - (arrayP->numProcs - index) * sizeof(*arrayP->pgprocnos)); - memmove(&ProcGlobal->xids[index + 1], &ProcGlobal->xids[index], - (arrayP->numProcs - index) * sizeof(*ProcGlobal->xids)); - memmove(&ProcGlobal->subxidStates[index + 1], &ProcGlobal->subxidStates[index], - (arrayP->numProcs - index) * sizeof(*ProcGlobal->subxidStates)); - memmove(&ProcGlobal->statusFlags[index + 1], &ProcGlobal->statusFlags[index], - (arrayP->numProcs - index) * sizeof(*ProcGlobal->statusFlags)); + movecount = arrayP->numProcs - index; + memmove(&arrayP->pgprocnos[index + 1], + &arrayP->pgprocnos[index], + movecount * sizeof(*arrayP->pgprocnos)); + memmove(&ProcGlobal->xids[index + 1], + &ProcGlobal->xids[index], + movecount * sizeof(*ProcGlobal->xids)); + memmove(&ProcGlobal->subxidStates[index + 1], + &ProcGlobal->subxidStates[index], + movecount * sizeof(*ProcGlobal->subxidStates)); + memmove(&ProcGlobal->statusFlags[index + 1], + &ProcGlobal->statusFlags[index], + movecount * sizeof(*ProcGlobal->statusFlags)); arrayP->pgprocnos[index] = proc->pgprocno; + proc->pgxactoff = index; ProcGlobal->xids[index] = proc->xid; ProcGlobal->subxidStates[index] = proc->subxidStatus; ProcGlobal->statusFlags[index] = proc->statusFlags; arrayP->numProcs++; + /* adjust pgxactoff for all following PGPROCs */ + index++; for (; index < arrayP->numProcs; index++) { - allProcs[arrayP->pgprocnos[index]].pgxactoff = index; + int procno = arrayP->pgprocnos[index]; + + Assert(procno >= 0 && procno < (arrayP->maxProcs + NUM_AUXILIARY_PROCS)); + Assert(allProcs[procno].pgxactoff == index - 1); + + allProcs[procno].pgxactoff = index; } /* @@ -525,7 +541,8 @@ void ProcArrayRemove(PGPROC *proc, TransactionId latestXid) { ProcArrayStruct *arrayP = procArray; - int index; + int myoff; + int movecount; #ifdef XIDCACHE_DEBUG /* dump stats at backend shutdown, but not prepared-xact end */ @@ -537,11 +554,14 @@ ProcArrayRemove(PGPROC *proc, TransactionId latestXid) LWLockAcquire(ProcArrayLock, LW_EXCLUSIVE); LWLockAcquire(XidGenLock, LW_EXCLUSIVE); - Assert(ProcGlobal->allProcs[arrayP->pgprocnos[proc->pgxactoff]].pgxactoff == proc->pgxactoff); + myoff = proc->pgxactoff; + + Assert(myoff >= 0 && myoff < arrayP->numProcs); + Assert(ProcGlobal->allProcs[arrayP->pgprocnos[myoff]].pgxactoff == myoff); if (TransactionIdIsValid(latestXid)) { - Assert(TransactionIdIsValid(ProcGlobal->xids[proc->pgxactoff])); + Assert(TransactionIdIsValid(ProcGlobal->xids[myoff])); /* Advance global latestCompletedXid while holding the lock */ MaintainLatestCompletedXid(latestXid); @@ -549,57 +569,60 @@ ProcArrayRemove(PGPROC *proc, TransactionId latestXid) /* Same with xactCompletionCount */ ShmemVariableCache->xactCompletionCount++; - ProcGlobal->xids[proc->pgxactoff] = 0; - ProcGlobal->subxidStates[proc->pgxactoff].overflowed = false; - ProcGlobal->subxidStates[proc->pgxactoff].count = 0; + ProcGlobal->xids[myoff] = InvalidTransactionId; + ProcGlobal->subxidStates[myoff].overflowed = false; + ProcGlobal->subxidStates[myoff].count = 0; } else { /* Shouldn't be trying to remove a live transaction here */ - Assert(!TransactionIdIsValid(ProcGlobal->xids[proc->pgxactoff])); + Assert(!TransactionIdIsValid(ProcGlobal->xids[myoff])); } - Assert(TransactionIdIsValid(ProcGlobal->xids[proc->pgxactoff] == 0)); - Assert(TransactionIdIsValid(ProcGlobal->subxidStates[proc->pgxactoff].count == 0)); - Assert(TransactionIdIsValid(ProcGlobal->subxidStates[proc->pgxactoff].overflowed == false)); - ProcGlobal->statusFlags[proc->pgxactoff] = 0; + Assert(!TransactionIdIsValid(ProcGlobal->xids[myoff])); + Assert(ProcGlobal->subxidStates[myoff].count == 0); + Assert(ProcGlobal->subxidStates[myoff].overflowed == false); + + ProcGlobal->statusFlags[myoff] = 0; + + /* Keep the PGPROC array sorted. See notes above */ + movecount = arrayP->numProcs - myoff - 1; + memmove(&arrayP->pgprocnos[myoff], + &arrayP->pgprocnos[myoff + 1], + movecount * sizeof(*arrayP->pgprocnos)); + memmove(&ProcGlobal->xids[myoff], + &ProcGlobal->xids[myoff + 1], + movecount * sizeof(*ProcGlobal->xids)); + memmove(&ProcGlobal->subxidStates[myoff], + &ProcGlobal->subxidStates[myoff + 1], + movecount * sizeof(*ProcGlobal->subxidStates)); + memmove(&ProcGlobal->statusFlags[myoff], + &ProcGlobal->statusFlags[myoff + 1], + movecount * sizeof(*ProcGlobal->statusFlags)); + + arrayP->pgprocnos[arrayP->numProcs - 1] = -1; /* for debugging */ + arrayP->numProcs--; - for (index = 0; index < arrayP->numProcs; index++) + /* + * Adjust pgxactoff of following procs for removed PGPROC (note that + * numProcs already has been decremented). + */ + for (int index = myoff; index < arrayP->numProcs; index++) { - if (arrayP->pgprocnos[index] == proc->pgprocno) - { - /* Keep the PGPROC array sorted. See notes above */ - memmove(&arrayP->pgprocnos[index], &arrayP->pgprocnos[index + 1], - (arrayP->numProcs - index - 1) * sizeof(*arrayP->pgprocnos)); - memmove(&ProcGlobal->xids[index], &ProcGlobal->xids[index + 1], - (arrayP->numProcs - index - 1) * sizeof(*ProcGlobal->xids)); - memmove(&ProcGlobal->subxidStates[index], &ProcGlobal->subxidStates[index + 1], - (arrayP->numProcs - index - 1) * sizeof(*ProcGlobal->subxidStates)); - memmove(&ProcGlobal->statusFlags[index], &ProcGlobal->statusFlags[index + 1], - (arrayP->numProcs - index - 1) * sizeof(*ProcGlobal->statusFlags)); - - arrayP->pgprocnos[arrayP->numProcs - 1] = -1; /* for debugging */ - arrayP->numProcs--; - - /* adjust for removed PGPROC */ - for (; index < arrayP->numProcs; index++) - allProcs[arrayP->pgprocnos[index]].pgxactoff--; + int procno = arrayP->pgprocnos[index]; - /* - * Release in reversed acquisition order, to reduce frequency of - * having to wait for XidGenLock while holding ProcArrayLock. - */ - LWLockRelease(XidGenLock); - LWLockRelease(ProcArrayLock); - return; - } + Assert(procno >= 0 && procno < (arrayP->maxProcs + NUM_AUXILIARY_PROCS)); + Assert(allProcs[procno].pgxactoff - 1 == index); + + allProcs[procno].pgxactoff = index; } - /* Oops */ + /* + * Release in reversed acquisition order, to reduce frequency of having to + * wait for XidGenLock while holding ProcArrayLock. + */ LWLockRelease(XidGenLock); LWLockRelease(ProcArrayLock); - - elog(LOG, "failed to find proc %p in ProcArray", proc); } From bfd96b7a3dc26a8384d4185d274573fb6a46b033 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sat, 12 Jun 2021 15:29:48 +0900 Subject: [PATCH 454/671] Improve log pattern detection in recently-added TAP tests ab55d74 has introduced some tests with rows found as missing in logical replication subscriptions for partitioned tables, relying on a logic with a lookup of the logs generated, scanning the whole file. This commit makes the logic more precise, by scanning the logs only from the position before the key queries are run to the position where we check for the logs. This will reduce the risk of issues with log patterns overlapping with each other if those tests get more complicated in the future. Per discussion with Tom Lane. Discussion: https://postgr.es/m/YMP+Gx2S8meYYHW4@paquier.xyz Backpatch-through: 13 --- src/test/subscription/t/001_rep_changes.pl | 7 ++++++- src/test/subscription/t/013_partition.pl | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/test/subscription/t/001_rep_changes.pl b/src/test/subscription/t/001_rep_changes.pl index b2fdb289dbfa8..ecfba0af049cc 100644 --- a/src/test/subscription/t/001_rep_changes.pl +++ b/src/test/subscription/t/001_rep_changes.pl @@ -311,13 +311,18 @@ $node_subscriber->safe_psql('postgres', "DELETE FROM tab_full_pk"); +# Note that the current location of the log file is not grabbed immediately +# after reloading the configuration, but after sending one SQL command to +# the node so as we are sure that the reloading has taken effect. +my $log_location = -s $node_subscriber->logfile; + $node_publisher->safe_psql('postgres', "UPDATE tab_full_pk SET b = 'quux' WHERE a = 1"); $node_publisher->safe_psql('postgres', "DELETE FROM tab_full_pk WHERE a = 2"); $node_publisher->wait_for_catchup('tap_sub'); -my $logfile = slurp_file($node_subscriber->logfile()); +my $logfile = slurp_file($node_subscriber->logfile, $log_location); ok( $logfile =~ qr/logical replication did not find row to be updated in replication target relation "tab_full_pk"/, 'update target row is missing'); diff --git a/src/test/subscription/t/013_partition.pl b/src/test/subscription/t/013_partition.pl index d0b5a55d18632..e2e9290b84910 100644 --- a/src/test/subscription/t/013_partition.pl +++ b/src/test/subscription/t/013_partition.pl @@ -362,6 +362,11 @@ BEGIN $node_subscriber1->safe_psql('postgres', "DELETE FROM tab1"); +# Note that the current location of the log file is not grabbed immediately +# after reloading the configuration, but after sending one SQL command to +# the node so as we are sure that the reloading has taken effect. +my $log_location = -s $node_subscriber1->logfile; + $node_publisher->safe_psql('postgres', "UPDATE tab1 SET b = 'quux' WHERE a = 4"); $node_publisher->safe_psql('postgres', "DELETE FROM tab1"); @@ -369,7 +374,7 @@ BEGIN $node_publisher->wait_for_catchup('sub1'); $node_publisher->wait_for_catchup('sub2'); -my $logfile = slurp_file($node_subscriber1->logfile()); +my $logfile = slurp_file($node_subscriber1->logfile(), $log_location); ok( $logfile =~ qr/logical replication did not find row to be updated in replication target relation's partition "tab1_2_2"/, 'update target row is missing in tab1_2_2'); @@ -700,6 +705,11 @@ BEGIN $node_subscriber1->safe_psql('postgres', "DELETE FROM tab2"); +# Note that the current location of the log file is not grabbed immediately +# after reloading the configuration, but after sending one SQL command to +# the node so as we are sure that the reloading has taken effect. +$log_location = -s $node_subscriber1->logfile; + $node_publisher->safe_psql('postgres', "UPDATE tab2 SET b = 'quux' WHERE a = 5"); $node_publisher->safe_psql('postgres', "DELETE FROM tab2 WHERE a = 1"); @@ -707,7 +717,7 @@ BEGIN $node_publisher->wait_for_catchup('sub_viaroot'); $node_publisher->wait_for_catchup('sub2'); -$logfile = slurp_file($node_subscriber1->logfile()); +$logfile = slurp_file($node_subscriber1->logfile(), $log_location); ok( $logfile =~ qr/logical replication did not find row to be updated in replication target relation's partition "tab2_1"/, 'update target row is missing in tab2_1'); From b56b83aa0d6e044cf38d553f7a87f4b84708cac6 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sat, 12 Jun 2021 16:29:11 +0900 Subject: [PATCH 455/671] Simplify some code in getObjectTypeDescription() This routine is designed to never return an empty description or NULL, providing description fallbacks even if missing objects are accepted, but it included a code path where this was considered possible. All the callers of this routine already consider NULL as not possible, so change a bit the code to map with the assumptions of the callers, and add more comments close to the callers of this routine to outline the behavior expected. This code is new as of 2a10fdc, so no backpatch is needed. Discussion: https://postgr.es/m/YMNY6RGPBRCeLmFb@paquier.xyz --- src/backend/catalog/objectaddress.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index d79c3cde7c6ab..9882e549c4e33 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -4278,7 +4278,7 @@ pg_identify_object_as_address(PG_FUNCTION_ARGS) tupdesc = BlessTupleDesc(tupdesc); - /* object type */ + /* object type, which can never be NULL */ values[0] = CStringGetTextDatum(getObjectTypeDescription(&address, true)); nulls[0] = false; @@ -4490,9 +4490,8 @@ getObjectTypeDescription(const ObjectAddress *object, bool missing_ok) */ } - /* an empty string is equivalent to no object found */ - if (buffer.len == 0) - return NULL; + /* the result can never be empty */ + Assert(buffer.len > 0); return buffer.data; } From c3652f976b7696a96a9c5606cc2d613af77e2e63 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Sat, 12 Jun 2021 08:37:16 -0400 Subject: [PATCH 456/671] Fix new recovery test for use under msys Commit caba8f0d43 wasn't quite right for msys, as demonstrated by several buildfarm animals, including jacana and fairywren. We need to use the msys perl in the archive command, but call it in such a way that Windows will understand the path. Furthermore, inside the copy script we need to convert a Windows path to an msys path. --- src/test/recovery/t/025_stuck_on_old_timeline.pl | 14 +++++++++++--- src/test/recovery/t/cp_history_files | 7 +++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/test/recovery/t/025_stuck_on_old_timeline.pl b/src/test/recovery/t/025_stuck_on_old_timeline.pl index 25c2dff43730a..1eb4cae199fe0 100644 --- a/src/test/recovery/t/025_stuck_on_old_timeline.pl +++ b/src/test/recovery/t/025_stuck_on_old_timeline.pl @@ -10,6 +10,8 @@ use warnings; use PostgresNode; use TestLib; + +use File::Basename; use FindBin; use Test::More tests => 1; @@ -23,12 +25,17 @@ # get there. $node_primary->init(allows_streaming => 1, has_archiving => 1); my $perlbin = $^X; -$perlbin =~ s{\\}{\\\\}g if ($TestLib::windows_os); +if ($^O eq 'msys') +{ + $perlbin = TestLib::perl2host(dirname($^X)) . '\\' . basename($^X); +} +$perlbin =~ s!\\!/!g if $TestLib::windows_os; my $archivedir_primary = $node_primary->archive_dir; $node_primary->append_conf('postgresql.conf', qq( -archive_command = '$perlbin "$FindBin::RealBin/cp_history_files" "%p" "$archivedir_primary/%f"' +archive_command = '"$perlbin" "$FindBin::RealBin/cp_history_files" "%p" "$archivedir_primary/%f"' wal_keep_size=128MB )); +local $ENV{PERL_BADLANG}=0; $node_primary->start; # Take backup from primary @@ -74,7 +81,8 @@ # WAL segment, this is enough to guarantee that the history file was # archived. my $archive_wait_query = - "SELECT '$walfile_to_be_archived' <= last_archived_wal FROM pg_stat_archiver;"; + "SELECT coalesce('$walfile_to_be_archived' <= last_archived_wal, false) " . + "FROM pg_stat_archiver"; $node_standby->poll_query_until('postgres', $archive_wait_query) or die "Timed out while waiting for WAL segment to be archived"; my $last_archived_wal_file = $walfile_to_be_archived; diff --git a/src/test/recovery/t/cp_history_files b/src/test/recovery/t/cp_history_files index cfeea41e5b918..66f1b598fea81 100644 --- a/src/test/recovery/t/cp_history_files +++ b/src/test/recovery/t/cp_history_files @@ -7,4 +7,11 @@ use warnings; die "wrong number of arguments" if @ARGV != 2; my ($source, $target) = @ARGV; exit if $source !~ /history/; +if ($^O eq 'msys') +{ + # make a windows path look like an msys path if necessary + $source =~ s!^([A-Za-z]):!'/' . lc($1)!e; + $source =~ s!\\!/!g; +} + copy($source, $target) or die "couldn't copy $source to $target: $!"; From fe6a20ce54cbbb6fcfe9f6675d563af836ae799a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 12 Jun 2021 12:59:15 -0400 Subject: [PATCH 457/671] Don't use Asserts to check for violations of replication protocol. Using an Assert to check the validity of incoming messages is an extremely poor decision. In a debug build, it should not be that easy for a broken or malicious remote client to crash the logrep worker. The consequences could be even worse in non-debug builds, which will fail to make such checks at all, leading to who-knows-what misbehavior. Hence, promote every Assert that could possibly be triggered by wrong or out-of-order replication messages to a full test-and-ereport. To avoid bloating the set of messages the translation team has to cope with, establish a policy that replication protocol violation error reports don't need to be translated. Hence, all the new messages here use errmsg_internal(). A couple of old messages are changed likewise for consistency. Along the way, fix some non-idiomatic or outright wrong uses of hash_search(). Most of these mistakes are new with the "streaming replication" patch (commit 464824323), but a couple go back a long way. Back-patch as appropriate. Discussion: https://postgr.es/m/1719083.1623351052@sss.pgh.pa.us --- .../replication/logical/reorderbuffer.c | 2 +- src/backend/replication/logical/worker.c | 118 +++++++++++++----- 2 files changed, 85 insertions(+), 35 deletions(-) diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 2d9e1279bb27f..f96029f15a45e 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -1703,7 +1703,7 @@ ReorderBufferBuildTupleCidHash(ReorderBuffer *rb, ReorderBufferTXN *txn) ent = (ReorderBufferTupleCidEnt *) hash_search(txn->tuplecid_hash, (void *) &key, - HASH_ENTER | HASH_FIND, + HASH_ENTER, &found); if (!found) { diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 689a66cc72ddb..4b112593c65ee 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -177,7 +177,7 @@ bool in_remote_transaction = false; static XLogRecPtr remote_final_lsn = InvalidXLogRecPtr; /* fields valid only when processing streamed transaction */ -bool in_streamed_transaction = false; +static bool in_streamed_transaction = false; static TransactionId stream_xid = InvalidTransactionId; @@ -345,7 +345,10 @@ handle_streamed_transaction(LogicalRepMsgType action, StringInfo s) */ xid = pq_getmsgint(s, 4); - Assert(TransactionIdIsValid(xid)); + if (!TransactionIdIsValid(xid)) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("invalid transaction ID in streamed replication transaction"))); /* Add the new subxact to the array (unless already there). */ subxact_info_add(xid); @@ -785,7 +788,12 @@ apply_handle_commit(StringInfo s) logicalrep_read_commit(s, &commit_data); - Assert(commit_data.commit_lsn == remote_final_lsn); + if (commit_data.commit_lsn != remote_final_lsn) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("incorrect commit LSN %X/%X in commit message (expected %X/%X)", + LSN_FORMAT_ARGS(commit_data.commit_lsn), + LSN_FORMAT_ARGS(remote_final_lsn)))); apply_handle_commit_internal(s, &commit_data); @@ -812,7 +820,7 @@ apply_handle_origin(StringInfo s) (IsTransactionState() && !am_tablesync_worker()))) ereport(ERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), - errmsg("ORIGIN message sent out of order"))); + errmsg_internal("ORIGIN message sent out of order"))); } /* @@ -824,7 +832,10 @@ apply_handle_stream_start(StringInfo s) bool first_segment; HASHCTL hash_ctl; - Assert(!in_streamed_transaction); + if (in_streamed_transaction) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("duplicate STREAM START message"))); /* * Start a transaction on stream start, this transaction will be committed @@ -841,6 +852,11 @@ apply_handle_stream_start(StringInfo s) /* extract XID of the top-level transaction */ stream_xid = logicalrep_read_stream_start(s, &first_segment); + if (!TransactionIdIsValid(stream_xid)) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("invalid transaction ID in streamed replication transaction"))); + /* * Initialize the xidhash table if we haven't yet. This will be used for * the entire duration of the apply worker so create it in permanent @@ -873,7 +889,10 @@ apply_handle_stream_start(StringInfo s) static void apply_handle_stream_stop(StringInfo s) { - Assert(in_streamed_transaction); + if (!in_streamed_transaction) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("STREAM STOP message without STREAM START"))); /* * Close the file with serialized changes, and serialize information about @@ -905,7 +924,10 @@ apply_handle_stream_abort(StringInfo s) TransactionId xid; TransactionId subxid; - Assert(!in_streamed_transaction); + if (in_streamed_transaction) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("STREAM ABORT message without STREAM STOP"))); logicalrep_read_stream_abort(s, &xid, &subxid); @@ -932,7 +954,6 @@ apply_handle_stream_abort(StringInfo s) * performed rollback to savepoint for one of the earlier * sub-transaction. */ - int64 i; int64 subidx; BufFile *fd; @@ -967,13 +988,15 @@ apply_handle_stream_abort(StringInfo s) return; } - Assert((subidx >= 0) && (subidx < subxact_data.nsubxacts)); - ent = (StreamXidHash *) hash_search(xidhash, (void *) &xid, HASH_FIND, - &found); - Assert(found); + NULL); + if (!ent) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("transaction %u not found in stream XID hash table", + xid))); /* open the changes file */ changes_filename(path, MyLogicalRepWorker->subid, xid); @@ -1006,13 +1029,15 @@ apply_handle_stream_commit(StringInfo s) int nchanges; char path[MAXPGPATH]; char *buffer = NULL; - bool found; LogicalRepCommitData commit_data; StreamXidHash *ent; MemoryContext oldcxt; BufFile *fd; - Assert(!in_streamed_transaction); + if (in_streamed_transaction) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("STREAM COMMIT message without STREAM STOP"))); xid = logicalrep_read_stream_commit(s, &commit_data); @@ -1031,11 +1056,17 @@ apply_handle_stream_commit(StringInfo s) /* open the spool file for the committed transaction */ changes_filename(path, MyLogicalRepWorker->subid, xid); elog(DEBUG1, "replaying changes from file \"%s\"", path); + ent = (StreamXidHash *) hash_search(xidhash, (void *) &xid, HASH_FIND, - &found); - Assert(found); + NULL); + if (!ent) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("transaction %u not found in stream XID hash table", + xid))); + fd = BufFileOpenShared(ent->stream_fileset, path, O_RDONLY); buffer = palloc(BLCKSZ); @@ -1080,7 +1111,9 @@ apply_handle_stream_commit(StringInfo s) errmsg("could not read from streaming transaction's changes file \"%s\": %m", path))); - Assert(len > 0); + if (len <= 0) + elog(ERROR, "incorrect length %d in streaming transaction's changes file \"%s\"", + len, path); /* make sure we have sufficiently large buffer */ buffer = repalloc(buffer, len); @@ -1108,7 +1141,7 @@ apply_handle_stream_commit(StringInfo s) nchanges++; if (nchanges % 1000 == 0) - elog(DEBUG1, "replayed %d changes from file '%s'", + elog(DEBUG1, "replayed %d changes from file \"%s\"", nchanges, path); } @@ -2053,7 +2086,8 @@ apply_dispatch(StringInfo s) ereport(ERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION), - errmsg("invalid logical replication message type \"%c\"", action))); + errmsg_internal("invalid logical replication message type \"%c\"", + action))); } /* @@ -2589,20 +2623,19 @@ static void subxact_info_write(Oid subid, TransactionId xid) { char path[MAXPGPATH]; - bool found; Size len; StreamXidHash *ent; BufFile *fd; Assert(TransactionIdIsValid(xid)); - /* find the xid entry in the xidhash */ + /* Find the xid entry in the xidhash */ ent = (StreamXidHash *) hash_search(xidhash, (void *) &xid, HASH_FIND, - &found); - /* we must found the entry for its top transaction by this time */ - Assert(found); + NULL); + /* By this time we must have created the transaction entry */ + Assert(ent); /* * If there is no subtransaction then nothing to do, but if already have @@ -2667,13 +2700,11 @@ static void subxact_info_read(Oid subid, TransactionId xid) { char path[MAXPGPATH]; - bool found; Size len; BufFile *fd; StreamXidHash *ent; MemoryContext oldctx; - Assert(TransactionIdIsValid(xid)); Assert(!subxact_data.subxacts); Assert(subxact_data.nsubxacts == 0); Assert(subxact_data.nsubxacts_max == 0); @@ -2682,7 +2713,12 @@ subxact_info_read(Oid subid, TransactionId xid) ent = (StreamXidHash *) hash_search(xidhash, (void *) &xid, HASH_FIND, - &found); + NULL); + if (!ent) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("transaction %u not found in stream XID hash table", + xid))); /* * If subxact_fileset is not valid that mean we don't have any subxact @@ -2836,14 +2872,17 @@ stream_cleanup_files(Oid subid, TransactionId xid) { char path[MAXPGPATH]; StreamXidHash *ent; - bool found = false; - /* By this time we must have created the transaction entry */ + /* Find the xid entry in the xidhash */ ent = (StreamXidHash *) hash_search(xidhash, (void *) &xid, HASH_FIND, - &found); - Assert(found); + NULL); + if (!ent) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("transaction %u not found in stream XID hash table", + xid))); /* Delete the change file and release the stream fileset memory */ changes_filename(path, subid, xid); @@ -2893,9 +2932,9 @@ stream_open_file(Oid subid, TransactionId xid, bool first_segment) /* create or find the xid entry in the xidhash */ ent = (StreamXidHash *) hash_search(xidhash, (void *) &xid, - HASH_ENTER | HASH_FIND, + HASH_ENTER, &found); - Assert(first_segment || found); + changes_filename(path, subid, xid); elog(DEBUG1, "opening file \"%s\" for streamed changes", path); @@ -2915,6 +2954,11 @@ stream_open_file(Oid subid, TransactionId xid, bool first_segment) MemoryContext savectx; SharedFileSet *fileset; + if (found) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("incorrect first-segment flag for streamed replication transaction"))); + /* * We need to maintain shared fileset across multiple stream * start/stop calls. So, need to allocate it in a persistent context. @@ -2934,6 +2978,11 @@ stream_open_file(Oid subid, TransactionId xid, bool first_segment) } else { + if (!found) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("incorrect first-segment flag for streamed replication transaction"))); + /* * Open the file and seek to the end of the file because we always * append the changes file. @@ -3140,7 +3189,8 @@ ApplyWorkerMain(Datum main_arg) */ if (!myslotname) ereport(ERROR, - (errmsg("subscription has no replication slot set"))); + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("subscription has no replication slot set"))); /* Setup replication origin tracking. */ StartTransactionCommand(); From 1250aad42520fd5a3db68d6381997b7e1f9bb4aa Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 12 Jun 2021 13:29:24 -0400 Subject: [PATCH 458/671] Ensure pg_filenode_relation(0, 0) returns NULL. Previously, a zero value for the relfilenode resulted in a confusing error message about "unexpected duplicate". This function returns NULL for other invalid relfilenode values, so zero should be treated likewise. It's been like this all along, so back-patch to all supported branches. Justin Pryzby Discussion: https://postgr.es/m/20210612023324.GT16435@telsasoft.com --- src/backend/utils/adt/dbsize.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c index 3c70bb59433ec..9c39e7d3b343a 100644 --- a/src/backend/utils/adt/dbsize.c +++ b/src/backend/utils/adt/dbsize.c @@ -903,7 +903,11 @@ pg_filenode_relation(PG_FUNCTION_ARGS) { Oid reltablespace = PG_GETARG_OID(0); Oid relfilenode = PG_GETARG_OID(1); - Oid heaprel = InvalidOid; + Oid heaprel; + + /* test needed so RelidByRelfilenode doesn't misbehave */ + if (!OidIsValid(relfilenode)) + PG_RETURN_NULL(); heaprel = RelidByRelfilenode(reltablespace, relfilenode); From f452aaf7d4a96cfcecd6c60ccd294ffe7b8ea088 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 12 Jun 2021 15:12:10 -0400 Subject: [PATCH 459/671] Restore robustness of TAP tests that wait for postmaster restart. Several TAP tests use poll_query_until() to wait for the postmaster to restart. They were checking to see if a trivial query (e.g. "SELECT 1") succeeds. However, that's problematic in the wake of commit 11e9caff8, because now that we feed said query to psql via stdin, we risk IPC::Run whining about a SIGPIPE failure if psql quits before reading the query. Hence, we can't use a nonempty query in cases where we need to wait for connection failures to stop happening. Per the precedent of commits c757a3da0 and 6d41dd045, we can pass "undef" as the query in such cases to ensure that IPC::Run has nothing to write. However, then we have to say that the expected output is empty, and this exposes a deficiency in poll_query_until: if psql fails altogether and returns empty stdout, poll_query_until will treat that as a success! That's because, contrary to its documentation, it makes no actual check for psql failure, looking neither at the exit status nor at stderr. To fix that, adjust poll_query_until to insist on empty stderr as well as a stdout match. (I experimented with checking exit status instead, but it seems that psql often does exit(1) in cases that we need to consider successes. That might be something to fix someday, but it would be a non-back-patchable behavior change.) Back-patch to v10. The test cases needing this exist only as far back as v11, but it seems wise to keep poll_query_until's behavior the same in v10, in case we back-patch another such test case in future. (9.6 does not currently need this change, because in that branch poll_query_until can't be told to accept empty stdout as a success case.) Per assorted buildfarm failures, mostly on hoverfly. Discussion: https://postgr.es/m/CAA4eK1+zM6L4QSA1XMvXY_qqWwdUmqkOS1+hWvL8QcYEBGA1Uw@mail.gmail.com --- src/test/perl/PostgresNode.pm | 6 +++--- src/test/recovery/t/013_crash_restart.pl | 10 +++------- src/test/recovery/t/022_crash_temp_files.pl | 4 ++-- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index 45d16361286e2..2027cbf43d72b 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -2140,8 +2140,10 @@ sub poll_query_until $stdout =~ s/\r\n/\n/g if $Config{osname} eq 'msys'; chomp($stdout); + $stderr =~ s/\r\n/\n/g if $Config{osname} eq 'msys'; + chomp($stderr); - if ($stdout eq $expected) + if ($stdout eq $expected && $stderr eq '') { return 1; } @@ -2154,8 +2156,6 @@ sub poll_query_until # The query result didn't change in 180 seconds. Give up. Print the # output from the last attempt, hopefully that's useful for debugging. - $stderr =~ s/\r\n/\n/g if $Config{osname} eq 'msys'; - chomp($stderr); diag qq(poll_query_until timed out executing this query: $query expecting this output: diff --git a/src/test/recovery/t/013_crash_restart.pl b/src/test/recovery/t/013_crash_restart.pl index e1c36abe97ae0..868a50b33d39f 100644 --- a/src/test/recovery/t/013_crash_restart.pl +++ b/src/test/recovery/t/013_crash_restart.pl @@ -136,12 +136,8 @@ $monitor->finish; # Wait till server restarts -is( $node->poll_query_until( - 'postgres', - 'SELECT $$restarted after sigquit$$;', - 'restarted after sigquit'), - "1", - "reconnected after SIGQUIT"); +is($node->poll_query_until('postgres', undef, ''), + "1", "reconnected after SIGQUIT"); # restart psql processes, now that the crash cycle finished @@ -216,7 +212,7 @@ $monitor->finish; # Wait till server restarts -is($node->poll_query_until('postgres', 'SELECT 1', '1'), +is($node->poll_query_until('postgres', undef, ''), "1", "reconnected after SIGKILL"); # Make sure the committed rows survived, in-progress ones not diff --git a/src/test/recovery/t/022_crash_temp_files.pl b/src/test/recovery/t/022_crash_temp_files.pl index b912f4b2323c7..157ddba8cfa3c 100644 --- a/src/test/recovery/t/022_crash_temp_files.pl +++ b/src/test/recovery/t/022_crash_temp_files.pl @@ -139,7 +139,7 @@ BEGIN $killme2->finish; # Wait till server restarts -$node->poll_query_until('postgres', 'SELECT 1', '1'); +$node->poll_query_until('postgres', undef, ''); # Check for temporary files is( $node->safe_psql( @@ -228,7 +228,7 @@ BEGIN $killme2->finish; # Wait till server restarts -$node->poll_query_until('postgres', 'SELECT 1', '1'); +$node->poll_query_until('postgres', undef, ''); # Check for temporary files -- should be there is( $node->safe_psql( From a9e0b3b08fe38d5e31f03ea96859ff5e413d4a38 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sun, 13 Jun 2021 20:07:39 +0900 Subject: [PATCH 460/671] Ignore more environment variables in pg_regress.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is similar to the work done in 8279f68 for TestLib.pm, where environment variables set may cause unwanted failures if using a temporary installation with pg_regress. The list of variables reset is adjusted in each stable branch depending on what is supported. Comments are added to remember that the lists in TestLib.pm and pg_regress.c had better be kept in sync. Reviewed-by: Álvaro Herrera Discussion: https://postgr.es/m/YMNR9GYDn+fHlMta@paquier.xyz Backpatch-through: 9.6 --- src/test/perl/TestLib.pm | 1 + src/test/regress/pg_regress.c | 32 ++++++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index 47d7f31e94ce4..26fbe08d4be82 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -104,6 +104,7 @@ BEGIN delete $ENV{LC_ALL}; $ENV{LC_MESSAGES} = 'C'; + # This list should be kept in sync with pg_regress.c. my @envkeys = qw ( PGCHANNELBINDING PGCLIENTENCODING diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c index e04d365258d9e..05296f7ee1db9 100644 --- a/src/test/regress/pg_regress.c +++ b/src/test/regress/pg_regress.c @@ -819,14 +819,38 @@ initialize_environment(void) * we also use psql's -X switch consistently, so that ~/.psqlrc files * won't mess things up.) Also, set PGPORT to the temp port, and set * PGHOST depending on whether we are using TCP or Unix sockets. + * + * This list should be kept in sync with TestLib.pm. */ + unsetenv("PGCHANNELBINDING"); + /* PGCLIENTENCODING, see above */ + unsetenv("PGCONNECT_TIMEOUT"); + unsetenv("PGDATA"); unsetenv("PGDATABASE"); - unsetenv("PGUSER"); + unsetenv("PGGSSENCMODE"); + unsetenv("PGGSSLIB"); + /* PGHOSTADDR, see below */ + unsetenv("PGKRBSRVNAME"); + unsetenv("PGPASSFILE"); + unsetenv("PGPASSWORD"); + unsetenv("PGREQUIREPEER"); + unsetenv("PGREQUIRESSL"); unsetenv("PGSERVICE"); + unsetenv("PGSERVICEFILE"); + unsetenv("PGSSLCERT"); + unsetenv("PGSSLCRL"); + unsetenv("PGSSLCRLDIR"); + unsetenv("PGSSLKEY"); + unsetenv("PGSSLMAXPROTOCOLVERSION"); + unsetenv("PGSSLMINPROTOCOLVERSION"); unsetenv("PGSSLMODE"); - unsetenv("PGREQUIRESSL"); - unsetenv("PGCONNECT_TIMEOUT"); - unsetenv("PGDATA"); + unsetenv("PGSSLROOTCERT"); + unsetenv("PGSSLSNI"); + unsetenv("PGTARGETSESSIONATTRS"); + unsetenv("PGUSER"); + /* PGPORT, see below */ + /* PGHOST, see below */ + #ifdef HAVE_UNIX_SOCKETS if (hostname != NULL) setenv("PGHOST", hostname, 1); From 9d97c3408319b43718e4b85bc694697db1af32c6 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Sun, 13 Jun 2021 07:10:41 -0400 Subject: [PATCH 461/671] Further tweaks to stuck_on_old_timeline recovery test Translate path slashes on target directory path. This was confusing old branches, but is applied to all branches for the sake of uniformity. Perl is perfectly able to understand paths with forward slashes. Along the way, restore the previous archive_wait query, for the sake of uniformity with other tests, per gripe from Tom Lane. --- src/test/recovery/t/025_stuck_on_old_timeline.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/recovery/t/025_stuck_on_old_timeline.pl b/src/test/recovery/t/025_stuck_on_old_timeline.pl index 1eb4cae199fe0..e4e58cb8ab968 100644 --- a/src/test/recovery/t/025_stuck_on_old_timeline.pl +++ b/src/test/recovery/t/025_stuck_on_old_timeline.pl @@ -31,6 +31,7 @@ } $perlbin =~ s!\\!/!g if $TestLib::windows_os; my $archivedir_primary = $node_primary->archive_dir; +$archivedir_primary =~ s!\\!/!g if $TestLib::windows_os; $node_primary->append_conf('postgresql.conf', qq( archive_command = '"$perlbin" "$FindBin::RealBin/cp_history_files" "%p" "$archivedir_primary/%f"' wal_keep_size=128MB @@ -81,8 +82,7 @@ # WAL segment, this is enough to guarantee that the history file was # archived. my $archive_wait_query = - "SELECT coalesce('$walfile_to_be_archived' <= last_archived_wal, false) " . - "FROM pg_stat_archiver"; + "SELECT '$walfile_to_be_archived' <= last_archived_wal FROM pg_stat_archiver"; $node_standby->poll_query_until('postgres', $archive_wait_query) or die "Timed out while waiting for WAL segment to be archived"; my $last_archived_wal_file = $walfile_to_be_archived; From f807e3410fdfc29ced6590c7c2afa76637e001ad Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 13 Jun 2021 14:32:42 -0400 Subject: [PATCH 462/671] Work around portability issue with newer versions of mktime(). Recent glibc versions have made mktime() fail if tm_isdst is inconsistent with the prevailing timezone; in particular it fails for tm_isdst = 1 when the zone is UTC. (This seems wildly inconsistent with the POSIX-mandated treatment of "incorrect" values for the other fields of struct tm, so if you ask me it's a bug, but I bet they'll say it's intentional.) This has been observed to cause cosmetic problems when pg_restore'ing an archive created in a different timezone. To fix, do mktime() using the field values from the archive, and if that fails try again with tm_isdst = -1. This will give a result that's off by the UTC-offset difference from the original zone, but that was true before, too. It's not terribly critical since we don't do anything with the result except possibly print it. (Someday we should flush this entire bit of logic and record a standard-format timestamp in the archive instead. That's not okay for a back-patched bug fix, though.) Also, guard our only other use of mktime() by having initdb's build_time_t() set tm_isdst = -1 not 0. This case could only have an issue in zones that are DST year-round; but I think some do exist, or could in future. Per report from Wells Oliver. Back-patch to all supported versions, since any of them might need to run with a newer glibc. Discussion: https://postgr.es/m/CAOC+FBWDhDHO7G-i1_n_hjRzCnUeFO+H-Czi1y10mFhRWpBrew@mail.gmail.com --- src/bin/initdb/findtimezone.c | 1 + src/bin/pg_dump/pg_backup_archiver.c | 31 +++++++++++++++++++++++----- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/bin/initdb/findtimezone.c b/src/bin/initdb/findtimezone.c index 8fe1e910f9688..3c2b8d4e298f3 100644 --- a/src/bin/initdb/findtimezone.c +++ b/src/bin/initdb/findtimezone.c @@ -195,6 +195,7 @@ build_time_t(int year, int month, int day) tm.tm_mday = day; tm.tm_mon = month - 1; tm.tm_year = year - 1900; + tm.tm_isdst = -1; return mktime(&tm); } diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 6b046e7734d33..24cc096255817 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -3703,7 +3703,6 @@ ReadHead(ArchiveHandle *AH) vmin, vrev; int fmt; - struct tm crtm; /* * If we haven't already read the header, do so. @@ -3771,6 +3770,8 @@ ReadHead(ArchiveHandle *AH) if (AH->version >= K_VERS_1_4) { + struct tm crtm; + crtm.tm_sec = ReadInt(AH); crtm.tm_min = ReadInt(AH); crtm.tm_hour = ReadInt(AH); @@ -3779,12 +3780,32 @@ ReadHead(ArchiveHandle *AH) crtm.tm_year = ReadInt(AH); crtm.tm_isdst = ReadInt(AH); - AH->archdbname = ReadStr(AH); - + /* + * Newer versions of glibc have mktime() report failure if tm_isdst is + * inconsistent with the prevailing timezone, e.g. tm_isdst = 1 when + * TZ=UTC. This is problematic when restoring an archive under a + * different timezone setting. If we get a failure, try again with + * tm_isdst set to -1 ("don't know"). + * + * XXX with or without this hack, we reconstruct createDate + * incorrectly when the prevailing timezone is different from + * pg_dump's. Next time we bump the archive version, we should flush + * this representation and store a plain seconds-since-the-Epoch + * timestamp instead. + */ AH->createDate = mktime(&crtm); - if (AH->createDate == (time_t) -1) - pg_log_warning("invalid creation date in header"); + { + crtm.tm_isdst = -1; + AH->createDate = mktime(&crtm); + if (AH->createDate == (time_t) -1) + pg_log_warning("invalid creation date in header"); + } + } + + if (AH->version >= K_VERS_1_4) + { + AH->archdbname = ReadStr(AH); } if (AH->version >= K_VERS_1_10) From dbab0c07e5ba1f19a991da2d72972a8fe9a41bda Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 14 Jun 2021 09:25:50 +0900 Subject: [PATCH 463/671] Remove forced toast recompression in VACUUM FULL/CLUSTER MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The extra checks added by the recompression of toast data introduced in bbe0a81 is proving to have a performance impact on VACUUM or CLUSTER even if no recompression is done. This is more noticeable with more toastable columns that contain non-NULL values. Improvements could be done to make those extra checks less expensive, but that's not material for 14 at this stage, and we are not sure either if the code path of VACUUM FULL/CLUSTER is adapted for this job. Per discussion with several people, including Andres Freund, Robert Haas, Álvaro Herrera, Tom Lane and myself. Discussion: https://postgr.es/m/20210527003144.xxqppojoiwurc2iz@alap3.anarazel.de --- doc/src/sgml/ref/alter_table.sgml | 3 +- src/backend/access/heap/heapam_handler.c | 61 +-------------------- src/test/regress/expected/compression.out | 4 +- src/test/regress/expected/compression_1.out | 2 +- src/test/regress/sql/compression.sql | 2 +- 5 files changed, 6 insertions(+), 66 deletions(-) diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index 939d3fe273923..c5e5e84e06bd7 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -394,8 +394,7 @@ WITH ( MODULUS numeric_literal, REM values inserted in future will be compressed (if the storage mode permits compression at all). This does not cause the table to be rewritten, so existing data may still - be compressed with other compression methods. If the table is rewritten with - VACUUM FULL or CLUSTER, or restored + be compressed with other compression methods. If the table is restored with pg_restore, then all values are rewritten with the configured compression method. However, when data is inserted from another relation (for example, diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index e2cd79ec54637..1b8b640012a66 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -19,7 +19,6 @@ */ #include "postgres.h" -#include "access/detoast.h" #include "access/genam.h" #include "access/heapam.h" #include "access/heaptoast.h" @@ -27,7 +26,6 @@ #include "access/rewriteheap.h" #include "access/syncscan.h" #include "access/tableam.h" -#include "access/toast_compression.h" #include "access/tsmapi.h" #include "access/xact.h" #include "catalog/catalog.h" @@ -2463,64 +2461,14 @@ reform_and_rewrite_tuple(HeapTuple tuple, TupleDesc newTupDesc = RelationGetDescr(NewHeap); HeapTuple copiedTuple; int i; - bool values_free[MaxTupleAttributeNumber]; - - memset(values_free, 0, newTupDesc->natts * sizeof(bool)); heap_deform_tuple(tuple, oldTupDesc, values, isnull); + /* Be sure to null out any dropped columns */ for (i = 0; i < newTupDesc->natts; i++) { - /* Be sure to null out any dropped columns */ if (TupleDescAttr(newTupDesc, i)->attisdropped) isnull[i] = true; - else if (!isnull[i] && TupleDescAttr(newTupDesc, i)->attlen == -1) - { - /* - * Use this opportunity to force recompression of any data that's - * compressed with some TOAST compression method other than the - * one configured for the column. We don't actually need to - * perform the compression here; we just need to decompress. That - * will trigger recompression later on. - */ - struct varlena *new_value; - ToastCompressionId cmid; - char cmethod; - char targetmethod; - - new_value = (struct varlena *) DatumGetPointer(values[i]); - cmid = toast_get_compression_id(new_value); - - /* nothing to be done for uncompressed data */ - if (cmid == TOAST_INVALID_COMPRESSION_ID) - continue; - - /* convert existing compression id to compression method */ - switch (cmid) - { - case TOAST_PGLZ_COMPRESSION_ID: - cmethod = TOAST_PGLZ_COMPRESSION; - break; - case TOAST_LZ4_COMPRESSION_ID: - cmethod = TOAST_LZ4_COMPRESSION; - break; - default: - elog(ERROR, "invalid compression method id %d", cmid); - cmethod = '\0'; /* keep compiler quiet */ - } - - /* figure out what the target method is */ - targetmethod = TupleDescAttr(newTupDesc, i)->attcompression; - if (!CompressionMethodIsValid(targetmethod)) - targetmethod = default_toast_compression; - - /* if compression method doesn't match then detoast the value */ - if (targetmethod != cmethod) - { - values[i] = PointerGetDatum(detoast_attr(new_value)); - values_free[i] = true; - } - } } copiedTuple = heap_form_tuple(newTupDesc, values, isnull); @@ -2528,13 +2476,6 @@ reform_and_rewrite_tuple(HeapTuple tuple, /* The heap rewrite module does the rest */ rewrite_heap_tuple(rwstate, tuple, copiedTuple); - /* Free any value detoasted previously */ - for (i = 0; i < newTupDesc->natts; i++) - { - if (values_free[i]) - pfree(DatumGetPointer(values[i])); - } - heap_freetuple(copiedTuple); } diff --git a/src/test/regress/expected/compression.out b/src/test/regress/expected/compression.out index 5c645e46500b7..4c997e2602f03 100644 --- a/src/test/regress/expected/compression.out +++ b/src/test/regress/expected/compression.out @@ -297,7 +297,7 @@ SELECT pg_column_compression(f1) FROM cmpart2; lz4 (2 rows) ---vacuum full to recompress the data +-- VACUUM FULL does not recompress SELECT pg_column_compression(f1) FROM cmdata; pg_column_compression ----------------------- @@ -309,7 +309,7 @@ VACUUM FULL cmdata; SELECT pg_column_compression(f1) FROM cmdata; pg_column_compression ----------------------- - lz4 + pglz lz4 (2 rows) diff --git a/src/test/regress/expected/compression_1.out b/src/test/regress/expected/compression_1.out index aac96037fcf86..15a23924ec719 100644 --- a/src/test/regress/expected/compression_1.out +++ b/src/test/regress/expected/compression_1.out @@ -293,7 +293,7 @@ SELECT pg_column_compression(f1) FROM cmpart2; ----------------------- (0 rows) ---vacuum full to recompress the data +-- VACUUM FULL does not recompress SELECT pg_column_compression(f1) FROM cmdata; pg_column_compression ----------------------- diff --git a/src/test/regress/sql/compression.sql b/src/test/regress/sql/compression.sql index 35557c1f7de11..86332dcc510f0 100644 --- a/src/test/regress/sql/compression.sql +++ b/src/test/regress/sql/compression.sql @@ -126,7 +126,7 @@ INSERT INTO cmpart VALUES (repeat('123456789', 4004)); SELECT pg_column_compression(f1) FROM cmpart1; SELECT pg_column_compression(f1) FROM cmpart2; ---vacuum full to recompress the data +-- VACUUM FULL does not recompress SELECT pg_column_compression(f1) FROM cmdata; VACUUM FULL cmdata; SELECT pg_column_compression(f1) FROM cmdata; From 2d689babe3cb50dcb29f6ed595a61d56e518c0d8 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 14 Jun 2021 14:57:22 +0900 Subject: [PATCH 464/671] Improve handling of dropped objects in pg_event_trigger_ddl_commands() An object found as dropped when digging into the list of objects returned by pg_event_trigger_ddl_commands() could cause a cache lookup error, as the calls grabbing for the object address and the type name would fail if the object was missing. Those lookup errors could be seen with combinations of ALTER TABLE sub-commands involving identity columns. The lookup logic is changed in this code path to get a behavior similar to any other SQL-callable function by ignoring objects that are not found, taking advantage of 2a10fdc. The back-branches are not changed, as they require this commit that is too invasive for stable branches. While on it, add test cases to exercise event triggers with identity columns, and stress more cases with the event ddl_command_end for relations. Author: Sven Klemm, Aleksander Alekseev, Michael Paquier Discussion: https://postgr.es/m/CAMCrgp2R1cEXU53iYKtW6yVEp2_yKUz+z=3-CTrYpPP+xryRtg@mail.gmail.com --- src/backend/commands/event_trigger.c | 15 +++++- src/test/regress/expected/event_trigger.out | 57 +++++++++++++++++++-- src/test/regress/sql/event_trigger.sql | 26 +++++++++- 3 files changed, 91 insertions(+), 7 deletions(-) diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index 5bde507c7526a..9c31c9e76372e 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -1936,8 +1936,19 @@ pg_event_trigger_ddl_commands(PG_FUNCTION_ARGS) else if (cmd->type == SCT_AlterTSConfig) addr = cmd->d.atscfg.address; - type = getObjectTypeDescription(&addr, false); - identity = getObjectIdentity(&addr, false); + /* + * If an object was dropped in the same command we may end + * up in a situation where we generated a message but can + * no longer look for the object information, so skip it + * rather than failing. This can happen for example with + * some subcommand combinations of ALTER TABLE. + */ + identity = getObjectIdentity(&addr, true); + if (identity == NULL) + continue; + + /* The type can never be NULL. */ + type = getObjectTypeDescription(&addr, true); /* * Obtain schema name, if any ("pg_temp" if a temp diff --git a/src/test/regress/expected/event_trigger.out b/src/test/regress/expected/event_trigger.out index 369f3d7d84f38..44d545de257b4 100644 --- a/src/test/regress/expected/event_trigger.out +++ b/src/test/regress/expected/event_trigger.out @@ -366,6 +366,7 @@ SELECT * FROM dropped_objects WHERE type = 'schema'; DROP ROLE regress_evt_user; DROP EVENT TRIGGER regress_event_trigger_drop_objects; DROP EVENT TRIGGER undroppable; +-- Event triggers on relations. CREATE OR REPLACE FUNCTION event_trigger_report_dropped() RETURNS event_trigger LANGUAGE plpgsql @@ -384,41 +385,90 @@ BEGIN END; $$; CREATE EVENT TRIGGER regress_event_trigger_report_dropped ON sql_drop EXECUTE PROCEDURE event_trigger_report_dropped(); +CREATE OR REPLACE FUNCTION event_trigger_report_end() + RETURNS event_trigger + LANGUAGE plpgsql +AS $$ +DECLARE r RECORD; +BEGIN + FOR r IN SELECT * FROM pg_event_trigger_ddl_commands() + LOOP + RAISE NOTICE 'END: command_tag=% type=% identity=%', + r.command_tag, r.object_type, r.object_identity; + END LOOP; +END; $$; +CREATE EVENT TRIGGER regress_event_trigger_report_end ON ddl_command_end + EXECUTE PROCEDURE event_trigger_report_end(); CREATE SCHEMA evttrig - CREATE TABLE one (col_a SERIAL PRIMARY KEY, col_b text DEFAULT 'forty two') + CREATE TABLE one (col_a SERIAL PRIMARY KEY, col_b text DEFAULT 'forty two', col_c SERIAL) CREATE INDEX one_idx ON one (col_b) - CREATE TABLE two (col_c INTEGER CHECK (col_c > 0) REFERENCES one DEFAULT 42); + CREATE TABLE two (col_c INTEGER CHECK (col_c > 0) REFERENCES one DEFAULT 42) + CREATE TABLE id (col_d int NOT NULL GENERATED ALWAYS AS IDENTITY); +NOTICE: END: command_tag=CREATE SCHEMA type=schema identity=evttrig +NOTICE: END: command_tag=CREATE SEQUENCE type=sequence identity=evttrig.one_col_a_seq +NOTICE: END: command_tag=CREATE SEQUENCE type=sequence identity=evttrig.one_col_c_seq +NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.one +NOTICE: END: command_tag=CREATE INDEX type=index identity=evttrig.one_pkey +NOTICE: END: command_tag=ALTER SEQUENCE type=sequence identity=evttrig.one_col_a_seq +NOTICE: END: command_tag=ALTER SEQUENCE type=sequence identity=evttrig.one_col_c_seq +NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.two +NOTICE: END: command_tag=ALTER TABLE type=table identity=evttrig.two +NOTICE: END: command_tag=CREATE SEQUENCE type=sequence identity=evttrig.id_col_d_seq +NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.id +NOTICE: END: command_tag=ALTER SEQUENCE type=sequence identity=evttrig.id_col_d_seq +NOTICE: END: command_tag=CREATE INDEX type=index identity=evttrig.one_idx -- Partitioned tables with a partitioned index CREATE TABLE evttrig.parted ( id int PRIMARY KEY) PARTITION BY RANGE (id); +NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.parted +NOTICE: END: command_tag=CREATE INDEX type=index identity=evttrig.parted_pkey CREATE TABLE evttrig.part_1_10 PARTITION OF evttrig.parted (id) FOR VALUES FROM (1) TO (10); +NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.part_1_10 CREATE TABLE evttrig.part_10_20 PARTITION OF evttrig.parted (id) FOR VALUES FROM (10) TO (20) PARTITION BY RANGE (id); +NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.part_10_20 CREATE TABLE evttrig.part_10_15 PARTITION OF evttrig.part_10_20 (id) FOR VALUES FROM (10) TO (15); +NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.part_10_15 CREATE TABLE evttrig.part_15_20 PARTITION OF evttrig.part_10_20 (id) FOR VALUES FROM (15) TO (20); +NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.part_15_20 ALTER TABLE evttrig.two DROP COLUMN col_c; NOTICE: NORMAL: orig=t normal=f istemp=f type=table column identity=evttrig.two.col_c name={evttrig,two,col_c} args={} NOTICE: NORMAL: orig=f normal=t istemp=f type=table constraint identity=two_col_c_check on evttrig.two name={evttrig,two,two_col_c_check} args={} +NOTICE: END: command_tag=ALTER TABLE type=table identity=evttrig.two ALTER TABLE evttrig.one ALTER COLUMN col_b DROP DEFAULT; NOTICE: NORMAL: orig=t normal=f istemp=f type=default value identity=for evttrig.one.col_b name={evttrig,one,col_b} args={} +NOTICE: END: command_tag=ALTER TABLE type=table identity=evttrig.one ALTER TABLE evttrig.one DROP CONSTRAINT one_pkey; NOTICE: NORMAL: orig=t normal=f istemp=f type=table constraint identity=one_pkey on evttrig.one name={evttrig,one,one_pkey} args={} +NOTICE: END: command_tag=ALTER TABLE type=table identity=evttrig.one +ALTER TABLE evttrig.one DROP COLUMN col_c; +NOTICE: NORMAL: orig=t normal=f istemp=f type=table column identity=evttrig.one.col_c name={evttrig,one,col_c} args={} +NOTICE: NORMAL: orig=f normal=t istemp=f type=default value identity=for evttrig.one.col_c name={evttrig,one,col_c} args={} +NOTICE: END: command_tag=ALTER TABLE type=table identity=evttrig.one +ALTER TABLE evttrig.id ALTER COLUMN col_d SET DATA TYPE bigint; +NOTICE: END: command_tag=ALTER SEQUENCE type=sequence identity=evttrig.id_col_d_seq +NOTICE: END: command_tag=ALTER TABLE type=table identity=evttrig.id +ALTER TABLE evttrig.id ALTER COLUMN col_d DROP IDENTITY, + ALTER COLUMN col_d SET DATA TYPE int; +NOTICE: END: command_tag=ALTER TABLE type=table identity=evttrig.id DROP INDEX evttrig.one_idx; NOTICE: NORMAL: orig=t normal=f istemp=f type=index identity=evttrig.one_idx name={evttrig,one_idx} args={} DROP SCHEMA evttrig CASCADE; -NOTICE: drop cascades to 3 other objects +NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table evttrig.one drop cascades to table evttrig.two +drop cascades to table evttrig.id drop cascades to table evttrig.parted NOTICE: NORMAL: orig=t normal=f istemp=f type=schema identity=evttrig name={evttrig} args={} NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.one name={evttrig,one} args={} NOTICE: NORMAL: orig=f normal=t istemp=f type=sequence identity=evttrig.one_col_a_seq name={evttrig,one_col_a_seq} args={} NOTICE: NORMAL: orig=f normal=t istemp=f type=default value identity=for evttrig.one.col_a name={evttrig,one,col_a} args={} NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.two name={evttrig,two} args={} +NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.id name={evttrig,id} args={} NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.parted name={evttrig,parted} args={} NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.part_1_10 name={evttrig,part_1_10} args={} NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.part_10_20 name={evttrig,part_10_20} args={} @@ -427,6 +477,7 @@ NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.part_15_20 DROP TABLE a_temp_tbl; NOTICE: NORMAL: orig=t normal=f istemp=t type=table identity=pg_temp.a_temp_tbl name={pg_temp,a_temp_tbl} args={} DROP EVENT TRIGGER regress_event_trigger_report_dropped; +DROP EVENT TRIGGER regress_event_trigger_report_end; -- only allowed from within an event trigger function, should fail select pg_event_trigger_table_rewrite_oid(); ERROR: pg_event_trigger_table_rewrite_oid() can only be called in a table_rewrite event trigger function diff --git a/src/test/regress/sql/event_trigger.sql b/src/test/regress/sql/event_trigger.sql index e79c5f0b5dc64..1446cf8cc89fa 100644 --- a/src/test/regress/sql/event_trigger.sql +++ b/src/test/regress/sql/event_trigger.sql @@ -273,6 +273,7 @@ DROP ROLE regress_evt_user; DROP EVENT TRIGGER regress_event_trigger_drop_objects; DROP EVENT TRIGGER undroppable; +-- Event triggers on relations. CREATE OR REPLACE FUNCTION event_trigger_report_dropped() RETURNS event_trigger LANGUAGE plpgsql @@ -291,10 +292,26 @@ BEGIN END; $$; CREATE EVENT TRIGGER regress_event_trigger_report_dropped ON sql_drop EXECUTE PROCEDURE event_trigger_report_dropped(); +CREATE OR REPLACE FUNCTION event_trigger_report_end() + RETURNS event_trigger + LANGUAGE plpgsql +AS $$ +DECLARE r RECORD; +BEGIN + FOR r IN SELECT * FROM pg_event_trigger_ddl_commands() + LOOP + RAISE NOTICE 'END: command_tag=% type=% identity=%', + r.command_tag, r.object_type, r.object_identity; + END LOOP; +END; $$; +CREATE EVENT TRIGGER regress_event_trigger_report_end ON ddl_command_end + EXECUTE PROCEDURE event_trigger_report_end(); + CREATE SCHEMA evttrig - CREATE TABLE one (col_a SERIAL PRIMARY KEY, col_b text DEFAULT 'forty two') + CREATE TABLE one (col_a SERIAL PRIMARY KEY, col_b text DEFAULT 'forty two', col_c SERIAL) CREATE INDEX one_idx ON one (col_b) - CREATE TABLE two (col_c INTEGER CHECK (col_c > 0) REFERENCES one DEFAULT 42); + CREATE TABLE two (col_c INTEGER CHECK (col_c > 0) REFERENCES one DEFAULT 42) + CREATE TABLE id (col_d int NOT NULL GENERATED ALWAYS AS IDENTITY); -- Partitioned tables with a partitioned index CREATE TABLE evttrig.parted ( @@ -312,11 +329,16 @@ CREATE TABLE evttrig.part_15_20 PARTITION OF evttrig.part_10_20 (id) ALTER TABLE evttrig.two DROP COLUMN col_c; ALTER TABLE evttrig.one ALTER COLUMN col_b DROP DEFAULT; ALTER TABLE evttrig.one DROP CONSTRAINT one_pkey; +ALTER TABLE evttrig.one DROP COLUMN col_c; +ALTER TABLE evttrig.id ALTER COLUMN col_d SET DATA TYPE bigint; +ALTER TABLE evttrig.id ALTER COLUMN col_d DROP IDENTITY, + ALTER COLUMN col_d SET DATA TYPE int; DROP INDEX evttrig.one_idx; DROP SCHEMA evttrig CASCADE; DROP TABLE a_temp_tbl; DROP EVENT TRIGGER regress_event_trigger_report_dropped; +DROP EVENT TRIGGER regress_event_trigger_report_end; -- only allowed from within an event trigger function, should fail select pg_event_trigger_table_rewrite_oid(); From 25dfb5a831a1b8a83a8a68453b4bbe38a5ef737e Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 14 Jun 2021 12:49:05 -0400 Subject: [PATCH 465/671] doc: add PG 14 relnote item about array function references User-defined objects that reference some built-in array functions will need to be recreated in PG 14. Reported-by: Justin Pryzby Discussion: https://postgr.es/m/20210608225618.GR16435@telsasoft.com --- doc/src/sgml/release-14.sgml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 058ba7cd4eb17..c2d89412062c7 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -291,6 +291,35 @@ Author: Tom Lane + + + User-defined objects that reference some built-in array functions + along with their argument types must be recreated (Tom Lane) + + + + Specifically, array_append(), + array_prepend(), + array_cat(), + array_position(), + array_positions(), + array_remove(), + array_replace(), or width_bucket() + used to take anyarray arguments but now take + anycompatiblearray. Therefore, user-defined objects + like aggregates and operators that reference old array function + signatures must be dropped before upgrading and recreated once the + upgrade completes. + + + + + From a2559d4093725592a3fd5da8a4c7ac7c883115a0 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 14 Jun 2021 16:03:18 -0400 Subject: [PATCH 466/671] doc: PG 14 relnote updates Reported-by: Justin Pryzby Discussion: https://postgr.es/m/20210612034551.GU16435@telsasoft.com --- doc/src/sgml/release-14.sgml | 235 +++++++++++++++++------------------ 1 file changed, 111 insertions(+), 124 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index c2d89412062c7..395f91176fbab 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -676,7 +676,7 @@ Author: Peter Eisentraut --> - Add Set Server Name Indication (SNI) for + Add Server Name Indication (SNI) for SSL connection packets (Peter Eisentraut) @@ -729,7 +729,7 @@ Author: Peter Geoghegan --> - Allow vacuum to deallocate space reserved by trailing unused heap + Allow vacuum to reclaim space used by unused trailing heap line pointers (Matthias van de Meent, Peter Geoghegan) @@ -771,8 +771,8 @@ Author: Michael Paquier - VACUUM - now has a PROCESS_TOAST which can be set to + VACUUM now + has a PROCESS_TOAST option which can be set to false to disable TOAST processing, and vacuumdb has a option. @@ -799,7 +799,7 @@ Author: Peter Geoghegan --> - Cause vacuum operations to be aggressive if the table is near + Cause vacuum operations to be more aggressive if the table is near xid or multixact wraparound (Masahiko Sawada, Peter Geoghegan) @@ -911,8 +911,7 @@ Author: Tom Lane --> - Allow the arbitrary collations of partition boundary values - (Tom Lane) + Allow arbitrary collations of partition boundary values (Tom Lane) @@ -1107,7 +1106,7 @@ Author: Michael Paquier - Previously, if the object already exists, + Previously, if the object already existed, EXPLAIN would fail. @@ -1504,7 +1503,7 @@ Author: Amit Kapila - Function pg_stat_reset_replication_slot() resets slot statistics. @@ -2050,7 +2049,7 @@ Author: Amit Kapila --> - Generate WAL invalidations message during + Generate WAL invalidation messages during command completion when using logical replication (Dilip Kumar, Tomas Vondra, Amit Kapila) @@ -2260,6 +2259,8 @@ Author: Thomas Munro @@ -2270,6 +2271,9 @@ Author: Michael Paquier This is done by specifying a TABLESPACE clause. + A option was also added to reindexdb + to control this. @@ -2553,9 +2557,9 @@ Author: Tom Lane --> - Add support for infinity and -infinity values - to the numeric data type - (Tom Lane) + Add support for infinity and + -infinity values to the numeric data type (Tom Lane) @@ -3102,7 +3106,7 @@ Author: Tom Lane - New options are read-only, + The new options are read-only, primary, standby, and prefer-standby. @@ -3167,23 +3171,6 @@ Author: Michael Meskes - - - Allow reindexdb - to change the tablespace of the new index (Michael Paquier) - - - - This is done by specifying . - - - - - @@ -3525,69 +3512,69 @@ Author: Peter Eisentraut - + - + - - Source Code + + Source Code - + - + - - Add configure option --with-ssl={openssl} - to behave like (Daniel Gustafsson, - Michael Paquier) - + + Add configure option --with-ssl={openssl} + to behave like (Daniel Gustafsson, + Michael Paquier) + - - The option is kept for - compatibility. - - + + The option is kept for + compatibility. + + - + - - Add support for abstract - Unix-domain sockets (Peter Eisentraut) - + + Add support for abstract + Unix-domain sockets (Peter Eisentraut) + - - This is currently supported on Linux - and Windows. - - + + This is currently supported on Linux + and Windows. + + - + - - Add - to control cache overwriting (Craig Ringer) - + + Add + to control cache overwriting (Craig Ringer) + - - Previously this could only be controlled at compile time and is - enabled only in assert builds. - - + + Previously this could only be controlled at compile time and is + enabled only in assert builds. + + - + - - Various improvements in valgrind - detection (Álvaro Herrera, Peter Geoghegan) - - + + Various improvements in valgrind + detection (Álvaro Herrera, Peter Geoghegan) + + - + - - Add a test module for the regular expression package (Tom Lane) - - + + Add a test module for the regular expression package (Tom Lane) + + - + - - Add support for LLVM version 12 - (Andres Freund) - - + + Add support for LLVM version 12 + (Andres Freund) + + - + - - Change SHA1, SHA2, and MD5 hash computations to use the - OpenSSL EVP API - (Michael Paquier) - + + Change SHA1, SHA2, and MD5 hash computations to use the + OpenSSL EVP API + (Michael Paquier) + - - This is more modern and supports FIPS mode. - - + + This is more modern and supports FIPS mode. + + - + - - Remove build control over the random library used (Daniel - Gustafsson) - - + + Remove build control over the random library used (Daniel + Gustafsson) + + - + - - Add direct conversion routines between EUC_TW and Big5 (Heikki - Linnakangas) - - + + Add direct conversion routines between EUC_TW and Big5 (Heikki + Linnakangas) + + - + - - Add collation versions for FreeBSD - (Thomas Munro) - - + + Add collation versions for FreeBSD + (Thomas Munro) + + - + - - Add amadjustmembers - to the index access method API (Tom Lane) - + + Add amadjustmembers + to the index access method API (Tom Lane) + - - REMOVE? - - + + REMOVE? + + - + From 86b222b09071d3918c5c55b164d22b2236d3f872 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 14 Jun 2021 16:14:04 -0400 Subject: [PATCH 467/671] doc: PG 14 relnotes fixes Items related to logical replication attribution and BRIN indexes Reported-by: Tomas Vondra, John Naylor Discussion: https://postgr.es/m/0db66294-a668-2caa-2b5e-a8db60b30662@enterprisedb.com, CAFBsxsH21KnteYdk33F1oZu2O726NSD6_XBq51Tn0jytsA1AnA@mail.gmail.com --- doc/src/sgml/release-14.sgml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 395f91176fbab..a291f9301729d 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -976,8 +976,8 @@ Author: Tomas Vondra - This allows bloom indexes to be used effectively with data that - is not physically localized in the heap. + This allows BRIN indexes to be used effectively + with data that is not physically localized in the heap. @@ -1962,8 +1962,8 @@ Author: Amit Kapila Allow logical replication to stream long in-progress transactions - to subscribers (Tomas Vondra, Dilip Kumar, Amit Kapila, Ajin - Cherian, Nikhil Sontakke, Stas Kelvich) + to subscribers (Dilip Kumar, Amit Kapila, Ajin + Cherian, Tomas Vondra, Nikhil Sontakke, Stas Kelvich) From 33c509956704e1d918077b51ccd954f2e201a8f5 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Mon, 14 Jun 2021 16:31:12 -0400 Subject: [PATCH 468/671] Fix logic bug in 1632ea43682f MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I overlooked that one condition was logically inverted. The fix is a little bit more involved than simply negating the condition, to make the code easier to read. Fix some outdated comments left by the same commit, while at it. Author: Masahiko Sawada Author: Álvaro Herrera Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/YMRlmB3/lZw8YBH+@paquier.xyz --- src/backend/replication/slot.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index a9a06b9a38a97..8c18b4ed05b56 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -410,9 +410,9 @@ ReplicationSlotAcquire(const char *name, bool nowait) if (IsUnderPostmaster) { /* - * Get ready to sleep on the slot in case it is active if SAB_Block. - * (We may end up not sleeping, but we don't want to do this while - * holding the spinlock.) + * Get ready to sleep on the slot in case it is active. (We may end + * up not sleeping, but we don't want to do this while holding the + * spinlock.) */ if (!nowait) ConditionVariablePrepareToSleep(&s->active_cv); @@ -429,22 +429,24 @@ ReplicationSlotAcquire(const char *name, bool nowait) /* * If we found the slot but it's already active in another process, we - * either error out, return the PID of the owning process, or retry after - * a short wait, as caller specified. + * wait until the owning process signals us that it's been released, or + * error out. */ if (active_pid != MyProcPid) { if (!nowait) - ereport(ERROR, - (errcode(ERRCODE_OBJECT_IN_USE), - errmsg("replication slot \"%s\" is active for PID %d", - NameStr(s->data.name), active_pid))); + { + /* Wait here until we get signaled, and then restart */ + ConditionVariableSleep(&s->active_cv, + WAIT_EVENT_REPLICATION_SLOT_DROP); + ConditionVariableCancelSleep(); + goto retry; + } - /* Wait here until we get signaled, and then restart */ - ConditionVariableSleep(&s->active_cv, - WAIT_EVENT_REPLICATION_SLOT_DROP); - ConditionVariableCancelSleep(); - goto retry; + ereport(ERROR, + (errcode(ERRCODE_OBJECT_IN_USE), + errmsg("replication slot \"%s\" is active for PID %d", + NameStr(s->data.name), active_pid))); } else if (!nowait) ConditionVariableCancelSleep(); /* no sleep needed after all */ From 0aac73e6a2602696d23aa7a9686204965f9093dc Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 14 Jun 2021 17:29:37 -0700 Subject: [PATCH 469/671] Copy-edit text for the pg_terminate_backend() "timeout" parameter. Revert the pg_description entry to its v13 form, since those messages usually remain shorter and don't discuss individual parameters. No catversion bump, since pg_description content does not impair backend compatibility or application compatibility. Justin Pryzby Discussion: https://postgr.es/m/20210612182743.GY16435@telsasoft.com --- doc/src/sgml/func.sgml | 2 +- src/backend/storage/ipc/signalfuncs.c | 14 +++++++------- src/include/catalog/pg_proc.dat | 3 +-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index fbc80c1403db1..b7383bc8aa218 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -24998,7 +24998,7 @@ SELECT collation for ('foo' COLLATE "de_DE"); milliseconds) and greater than zero, the function waits until the process is actually terminated or until the given time has passed. If the process is terminated, the function - returns true. On timeout a warning is emitted and + returns true. On timeout, a warning is emitted and false is returned. diff --git a/src/backend/storage/ipc/signalfuncs.c b/src/backend/storage/ipc/signalfuncs.c index 837699481ca7d..0a111ad6daa98 100644 --- a/src/backend/storage/ipc/signalfuncs.c +++ b/src/backend/storage/ipc/signalfuncs.c @@ -187,12 +187,12 @@ pg_wait_until_termination(int pid, int64 timeout) } /* - * Signal to terminate a backend process. This is allowed if you are a member - * of the role whose process is being terminated. If timeout input argument is - * 0 (which is default), then this function just signals the backend and - * doesn't wait. Otherwise it waits until given the timeout milliseconds or no - * process has the given PID and returns true. On timeout, a warning is emitted - * and false is returned. + * Send a signal to terminate a backend process. This is allowed if you are a + * member of the role whose process is being terminated. If the timeout input + * argument is 0, then this function just signals the backend and returns + * true. If timeout is nonzero, then it waits until no process has the given + * PID; if the process ends within the timeout, true is returned, and if the + * timeout is exceeded, a warning is emitted and false is returned. * * Note that only superusers can signal superuser-owned processes. */ @@ -201,7 +201,7 @@ pg_terminate_backend(PG_FUNCTION_ARGS) { int pid; int r; - int timeout; + int timeout; /* milliseconds */ pid = PG_GETARG_INT32(0); timeout = PG_GETARG_INT64(1); diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index acbcae46070c4..83eea85cf64a5 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -6186,8 +6186,7 @@ { oid => '2171', descr => 'cancel a server process\' current query', proname => 'pg_cancel_backend', provolatile => 'v', prorettype => 'bool', proargtypes => 'int4', prosrc => 'pg_cancel_backend' }, -{ oid => '2096', - descr => 'terminate a backend process and if timeout is specified, wait for its exit or until timeout occurs', +{ oid => '2096', descr => 'terminate a server process', proname => 'pg_terminate_backend', provolatile => 'v', prorettype => 'bool', proargtypes => 'int4 int8', proargnames => '{pid,timeout}', prosrc => 'pg_terminate_backend' }, From 5f1df62a459b51ab3bb625a0ee5e655429254257 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 14 Jun 2021 17:29:37 -0700 Subject: [PATCH 470/671] Remove pg_wait_for_backend_termination(). It was unable to wait on a backend that had already left the procarray. Users tolerant of that limitation can poll pg_stat_activity. Other users can employ the "timeout" argument of pg_terminate_backend(). Reviewed by Bharath Rupireddy. Discussion: https://postgr.es/m/20210605013236.GA208701@rfd.leadboat.com --- doc/src/sgml/func.sgml | 17 ----------- doc/src/sgml/release-14.sgml | 8 +----- src/backend/catalog/system_functions.sql | 5 ---- src/backend/storage/ipc/signalfuncs.c | 36 ------------------------ src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_proc.dat | 4 --- 6 files changed, 2 insertions(+), 70 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index b7383bc8aa218..764c3ad30711a 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -25002,23 +25002,6 @@ SELECT collation for ('foo' COLLATE "de_DE"); false is returned. - - - - - pg_wait_for_backend_termination - - pg_wait_for_backend_termination ( pid integer, timeout bigint DEFAULT 5000 ) - boolean - - - Waits for the backend process with the specified Process ID to - terminate. If the process terminates before - the timeout (in milliseconds) - expires, true is returned. On timeout, a warning - is emitted and false is returned. - - diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index a291f9301729d..53221ab8c10bd 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -640,13 +640,7 @@ Author: Magnus Hagander --> - Add function pg_wait_for_backend_termination() - that waits for session exit (Bharath Rupireddy) - - - - Also add a similar optional wait parameter to pg_terminate_backend() diff --git a/src/backend/catalog/system_functions.sql b/src/backend/catalog/system_functions.sql index a4373b176c621..a416e94d3717a 100644 --- a/src/backend/catalog/system_functions.sql +++ b/src/backend/catalog/system_functions.sql @@ -397,11 +397,6 @@ CREATE OR REPLACE FUNCTION RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_terminate_backend' PARALLEL SAFE; -CREATE OR REPLACE FUNCTION - pg_wait_for_backend_termination(pid integer, timeout int8 DEFAULT 5000) - RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_wait_for_backend_termination' - PARALLEL SAFE; - -- legacy definition for compatibility with 9.3 CREATE OR REPLACE FUNCTION json_populate_record(base anyelement, from_json json, use_json_as_text boolean DEFAULT false) diff --git a/src/backend/storage/ipc/signalfuncs.c b/src/backend/storage/ipc/signalfuncs.c index 0a111ad6daa98..43386c5bb3274 100644 --- a/src/backend/storage/ipc/signalfuncs.c +++ b/src/backend/storage/ipc/signalfuncs.c @@ -230,42 +230,6 @@ pg_terminate_backend(PG_FUNCTION_ARGS) PG_RETURN_BOOL(r == SIGNAL_BACKEND_SUCCESS); } -/* - * Wait for a backend process with the given PID to exit or until the given - * timeout milliseconds occurs. Returns true if the backend has exited. On - * timeout a warning is emitted and false is returned. - * - * We allow any user to call this function, consistent with any user being - * able to view the pid of the process in pg_stat_activity etc. - */ -Datum -pg_wait_for_backend_termination(PG_FUNCTION_ARGS) -{ - int pid; - int64 timeout; - PGPROC *proc = NULL; - - pid = PG_GETARG_INT32(0); - timeout = PG_GETARG_INT64(1); - - if (timeout <= 0) - ereport(ERROR, - (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("\"timeout\" must not be negative or zero"))); - - proc = BackendPidGetProc(pid); - - if (proc == NULL) - { - ereport(WARNING, - (errmsg("PID %d is not a PostgreSQL server process", pid))); - - PG_RETURN_BOOL(false); - } - - PG_RETURN_BOOL(pg_wait_until_termination(pid, timeout)); -} - /* * Signal to reload the database configuration * diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index d5dada949c334..1b23c7c253bcb 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202106101 +#define CATALOG_VERSION_NO 202106151 #endif diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 83eea85cf64a5..fde251fa4f3e1 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -6190,10 +6190,6 @@ proname => 'pg_terminate_backend', provolatile => 'v', prorettype => 'bool', proargtypes => 'int4 int8', proargnames => '{pid,timeout}', prosrc => 'pg_terminate_backend' }, -{ oid => '2137', descr => 'wait for a backend process exit or timeout occurs', - proname => 'pg_wait_for_backend_termination', provolatile => 'v', - prorettype => 'bool', proargtypes => 'int4 int8', - proargnames => '{pid,timeout}', prosrc => 'pg_wait_for_backend_termination' }, { oid => '2172', descr => 'prepare for taking an online backup', proname => 'pg_start_backup', provolatile => 'v', proparallel => 'r', prorettype => 'pg_lsn', proargtypes => 'text bool bool', From ffbe9dec13599fa786ea6567df1c6a3f3ee3c673 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 14 Jun 2021 21:28:21 -0400 Subject: [PATCH 471/671] Remove orphaned expected-result file. This should have been removed in 43e084197, which removed the corresponding spec file. Noted while fooling about with the isolationtester. --- .../expected/insert-conflict-toast_1.out | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 src/test/isolation/expected/insert-conflict-toast_1.out diff --git a/src/test/isolation/expected/insert-conflict-toast_1.out b/src/test/isolation/expected/insert-conflict-toast_1.out deleted file mode 100644 index 18346162b7eb5..0000000000000 --- a/src/test/isolation/expected/insert-conflict-toast_1.out +++ /dev/null @@ -1,15 +0,0 @@ -Parsed test spec with 3 sessions - -starting permutation: s2insert s3insert s1commit -pg_advisory_xact_lock - - -step s2insert: - INSERT INTO ctoast (key, val) VALUES (1, ctoast_large_val()) ON CONFLICT DO NOTHING; - -step s3insert: - INSERT INTO ctoast (key, val) VALUES (1, ctoast_large_val()) ON CONFLICT DO NOTHING; - -step s1commit: COMMIT; -step s3insert: <... completed> -step s2insert: <... completed> From 0a1e80c5c4f094087257fc4284a87e0bc7bca591 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 14 Jun 2021 21:58:26 -0400 Subject: [PATCH 472/671] Update variant expected-result file. This should have been updated in d2d8a229b, but it was overlooked. According to 31a877f18 which added it, this file is meant to show the results you get under default_transaction_isolation = serializable. We've largely lost track of that goal in other isolation tests, but as long as we've got this one, it should be right. Noted while fooling about with the isolationtester. --- src/test/isolation/expected/drop-index-concurrently-1_2.out | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/isolation/expected/drop-index-concurrently-1_2.out b/src/test/isolation/expected/drop-index-concurrently-1_2.out index e540bbe1d7f88..87d07955d041c 100644 --- a/src/test/isolation/expected/drop-index-concurrently-1_2.out +++ b/src/test/isolation/expected/drop-index-concurrently-1_2.out @@ -21,7 +21,7 @@ QUERY PLAN Sort Sort Key: id, data - -> Seq Scan on test_dc + -> Index Scan using test_dc_pkey on test_dc Filter: ((data)::text = '34'::text) step select2: SELECT * FROM test_dc WHERE data=34 ORDER BY id,data; id data From 4daa140a2f50e9a160bc180c3997ee13c7aabf9e Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Tue, 15 Jun 2021 08:28:36 +0530 Subject: [PATCH 473/671] Fix decoding of speculative aborts. During decoding for speculative inserts, we were relying for cleaning toast hash on confirmation records or next change records. But that could lead to multiple problems (a) memory leak if there is neither a confirmation record nor any other record after toast insertion for a speculative insert in the transaction, (b) error and assertion failures if the next operation is not an insert/update on the same table. The fix is to start queuing spec abort change and clean up toast hash and change record during its processing. Currently, we are queuing the spec aborts for both toast and main table even though we perform cleanup while processing the main table's spec abort record. Later, if we have a way to distinguish between the spec abort record of toast and the main table, we can avoid queuing the change for spec aborts of toast tables. Reported-by: Ashutosh Bapat Author: Dilip Kumar Reviewed-by: Amit Kapila Backpatch-through: 9.6, where it was introduced Discussion: https://postgr.es/m/CAExHW5sPKF-Oovx_qZe4p5oM6Dvof7_P+XgsNAViug15Fm99jA@mail.gmail.com --- src/backend/replication/logical/decode.c | 14 +++--- .../replication/logical/reorderbuffer.c | 49 ++++++++++++++----- src/include/replication/reorderbuffer.h | 9 ++-- 3 files changed, 48 insertions(+), 24 deletions(-) diff --git a/src/backend/replication/logical/decode.c b/src/backend/replication/logical/decode.c index 70670169acc25..453efc51e1625 100644 --- a/src/backend/replication/logical/decode.c +++ b/src/backend/replication/logical/decode.c @@ -1040,19 +1040,17 @@ DecodeDelete(LogicalDecodingContext *ctx, XLogRecordBuffer *buf) if (target_node.dbNode != ctx->slot->data.database) return; - /* - * Super deletions are irrelevant for logical decoding, it's driven by the - * confirmation records. - */ - if (xlrec->flags & XLH_DELETE_IS_SUPER) - return; - /* output plugin doesn't look for this origin, no need to queue */ if (FilterByOrigin(ctx, XLogRecGetOrigin(r))) return; change = ReorderBufferGetChange(ctx->reorder); - change->action = REORDER_BUFFER_CHANGE_DELETE; + + if (xlrec->flags & XLH_DELETE_IS_SUPER) + change->action = REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT; + else + change->action = REORDER_BUFFER_CHANGE_DELETE; + change->origin_id = XLogRecGetOrigin(r); memcpy(&change->data.tp.relnode, &target_node, sizeof(RelFileNode)); diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index f96029f15a45e..19e96f3fd94ce 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -443,6 +443,9 @@ ReorderBufferReturnTXN(ReorderBuffer *rb, ReorderBufferTXN *txn) txn->invalidations = NULL; } + /* Reset the toast hash */ + ReorderBufferToastReset(rb, txn); + pfree(txn); } @@ -520,6 +523,7 @@ ReorderBufferReturnChange(ReorderBuffer *rb, ReorderBufferChange *change, } break; case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM: + case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT: case REORDER_BUFFER_CHANGE_INTERNAL_COMMAND_ID: case REORDER_BUFFER_CHANGE_INTERNAL_TUPLECID: break; @@ -2211,8 +2215,8 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn, change_done: /* - * Either speculative insertion was confirmed, or it was - * unsuccessful and the record isn't needed anymore. + * If speculative insertion was confirmed, the record isn't + * needed anymore. */ if (specinsert != NULL) { @@ -2254,6 +2258,32 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn, specinsert = change; break; + case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT: + + /* + * Abort for speculative insertion arrived. So cleanup the + * specinsert tuple and toast hash. + * + * Note that we get the spec abort change for each toast + * entry but we need to perform the cleanup only the first + * time we get it for the main table. + */ + if (specinsert != NULL) + { + /* + * We must clean the toast hash before processing a + * completely new tuple to avoid confusion about the + * previous tuple's toast chunks. + */ + Assert(change->data.tp.clear_toast_afterwards); + ReorderBufferToastReset(rb, txn); + + /* We don't need this record anymore. */ + ReorderBufferReturnChange(rb, specinsert, true); + specinsert = NULL; + } + break; + case REORDER_BUFFER_CHANGE_TRUNCATE: { int i; @@ -2360,16 +2390,8 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn, } } - /* - * There's a speculative insertion remaining, just clean in up, it - * can't have been successful, otherwise we'd gotten a confirmation - * record. - */ - if (specinsert) - { - ReorderBufferReturnChange(rb, specinsert, true); - specinsert = NULL; - } + /* speculative insertion record must be freed by now */ + Assert(!specinsert); /* clean up the iterator */ ReorderBufferIterTXNFinish(rb, iterstate); @@ -3754,6 +3776,7 @@ ReorderBufferSerializeChange(ReorderBuffer *rb, ReorderBufferTXN *txn, break; } case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM: + case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT: case REORDER_BUFFER_CHANGE_INTERNAL_COMMAND_ID: case REORDER_BUFFER_CHANGE_INTERNAL_TUPLECID: /* ReorderBufferChange contains everything important */ @@ -4017,6 +4040,7 @@ ReorderBufferChangeSize(ReorderBufferChange *change) break; } case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM: + case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT: case REORDER_BUFFER_CHANGE_INTERNAL_COMMAND_ID: case REORDER_BUFFER_CHANGE_INTERNAL_TUPLECID: /* ReorderBufferChange contains everything important */ @@ -4315,6 +4339,7 @@ ReorderBufferRestoreChange(ReorderBuffer *rb, ReorderBufferTXN *txn, break; } case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM: + case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT: case REORDER_BUFFER_CHANGE_INTERNAL_COMMAND_ID: case REORDER_BUFFER_CHANGE_INTERNAL_TUPLECID: break; diff --git a/src/include/replication/reorderbuffer.h b/src/include/replication/reorderbuffer.h index 0c6e9d1cb924d..ba257d81b511a 100644 --- a/src/include/replication/reorderbuffer.h +++ b/src/include/replication/reorderbuffer.h @@ -46,10 +46,10 @@ typedef struct ReorderBufferTupleBuf * changes. Users of the decoding facilities will never see changes with * *_INTERNAL_* actions. * - * The INTERNAL_SPEC_INSERT and INTERNAL_SPEC_CONFIRM changes concern - * "speculative insertions", and their confirmation respectively. They're - * used by INSERT .. ON CONFLICT .. UPDATE. Users of logical decoding don't - * have to care about these. + * The INTERNAL_SPEC_INSERT and INTERNAL_SPEC_CONFIRM, and INTERNAL_SPEC_ABORT + * changes concern "speculative insertions", their confirmation, and abort + * respectively. They're used by INSERT .. ON CONFLICT .. UPDATE. Users of + * logical decoding don't have to care about these. */ enum ReorderBufferChangeType { @@ -63,6 +63,7 @@ enum ReorderBufferChangeType REORDER_BUFFER_CHANGE_INTERNAL_TUPLECID, REORDER_BUFFER_CHANGE_INTERNAL_SPEC_INSERT, REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM, + REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT, REORDER_BUFFER_CHANGE_TRUNCATE }; From 29854ee8d1ca4a46adb7e84deb17e6fb18e531cc Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Tue, 15 Jun 2021 15:59:20 +0300 Subject: [PATCH 474/671] Support for unnest(multirange) and cast multirange as an array of ranges It has been spotted that multiranges lack of ability to decompose them into individual ranges. Subscription and proper expanded object representation require substantial work, and it's too late for v14. This commit provides the implementation of unnest(multirange) and cast multirange as an array of ranges, which is quite trivial. unnest(multirange) is defined as a polymorphic procedure. The catalog description of the cast underlying procedure is duplicated for each multirange type because we don't have anyrangearray polymorphic type to use here. Catversion is bumped. Reported-by: Jonathan S. Katz Discussion: https://postgr.es/m/flat/60258efe-bd7e-4886-82e1-196e0cac5433%40postgresql.org Author: Alexander Korotkov Reviewed-by: Justin Pryzby, Jonathan S. Katz, Zhihong Yu --- doc/src/sgml/func.sgml | 23 ++++ doc/src/sgml/rangetypes.sgml | 12 ++ src/backend/commands/typecmds.c | 92 +++++++++++++-- src/backend/utils/adt/multirangetypes.c | 106 ++++++++++++++++++ src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_cast.dat | 20 ++++ src/include/catalog/pg_proc.dat | 23 ++++ src/test/regress/expected/multirangetypes.out | 60 ++++++++++ src/test/regress/expected/opr_sanity.out | 6 + src/test/regress/sql/multirangetypes.sql | 13 +++ src/test/regress/sql/opr_sanity.sql | 6 + 11 files changed, 354 insertions(+), 9 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 764c3ad30711a..a2d810ef40e66 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -19181,6 +19181,29 @@ SELECT NULLIF(value, '(none)') ... {[1,2)} + + + + + unnest + for multirange + + unnest ( anymultirange ) + setof anyrange + + + Expands a multirange into a set of ranges. + The ranges are read out in storage order (ascending). + + + unnest('{[1,2), [3,4)}'::int4multirange) + + + [1,2) + [3,4) + + + diff --git a/doc/src/sgml/rangetypes.sgml b/doc/src/sgml/rangetypes.sgml index 92ea0e83dab7b..9ec5510e23a8c 100644 --- a/doc/src/sgml/rangetypes.sgml +++ b/doc/src/sgml/rangetypes.sgml @@ -266,6 +266,18 @@ SELECT '[4,4)'::int4range; SELECT '{}'::int4multirange; SELECT '{[3,7)}'::int4multirange; SELECT '{[3,7), [8,9)}'::int4multirange; + + + + + A multirange can be cast to an array of ranges of the same type. + + + + Examples: + +SELECT '{[3,7), [8,9)}'::int4multirange::int4range[]; +SELECT '{[1.0,14.0), [20.0,25.0)}'::nummultirange::numrange[]; diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 58ec65c6afc10..9ea0ce17e1223 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -114,7 +114,11 @@ static void makeRangeConstructors(const char *name, Oid namespace, Oid rangeOid, Oid subtype); static void makeMultirangeConstructors(const char *name, Oid namespace, Oid multirangeOid, Oid rangeOid, - Oid rangeArrayOid, Oid *castFuncOid); + Oid rangeArrayOid, + Oid *oneArgContructorOid); +static void makeMultirangeCasts(const char *name, Oid namespace, + Oid multirangeOid, Oid rangeOid, + Oid rangeArrayOid, Oid singleArgContructorOid); static Oid findTypeInputFunction(List *procname, Oid typeOid); static Oid findTypeOutputFunction(List *procname, Oid typeOid); static Oid findTypeReceiveFunction(List *procname, Oid typeOid); @@ -1365,7 +1369,7 @@ DefineRange(CreateRangeStmt *stmt) ListCell *lc; ObjectAddress address; ObjectAddress mltrngaddress PG_USED_FOR_ASSERTS_ONLY; - Oid castFuncOid; + Oid singleArgContructorOid; /* Convert list of names to a name and namespace */ typeNamespace = QualifiedNameGetCreationNamespace(stmt->typeName, @@ -1717,10 +1721,12 @@ DefineRange(CreateRangeStmt *stmt) makeRangeConstructors(typeName, typeNamespace, typoid, rangeSubtype); makeMultirangeConstructors(multirangeTypeName, typeNamespace, multirangeOid, typoid, rangeArrayOid, - &castFuncOid); + &singleArgContructorOid); - /* Create cast from the range type to its multirange type */ - CastCreate(typoid, multirangeOid, castFuncOid, 'e', 'f', DEPENDENCY_INTERNAL); + /* Create casts for this multirange type */ + makeMultirangeCasts(multirangeTypeName, typeNamespace, + multirangeOid, typoid, rangeArrayOid, + singleArgContructorOid); pfree(multirangeTypeName); pfree(multirangeArrayName); @@ -1808,13 +1814,13 @@ makeRangeConstructors(const char *name, Oid namespace, * If we had an anyrangearray polymorphic type we could use it here, * but since each type has its own constructor name there's no need. * - * Sets castFuncOid to the oid of the new constructor that can be used + * Sets oneArgContructorOid to the oid of the new constructor that can be used * to cast from a range to a multirange. */ static void makeMultirangeConstructors(const char *name, Oid namespace, Oid multirangeOid, Oid rangeOid, Oid rangeArrayOid, - Oid *castFuncOid) + Oid *oneArgContructorOid) { ObjectAddress myself, referenced; @@ -1904,7 +1910,7 @@ makeMultirangeConstructors(const char *name, Oid namespace, /* ditto */ recordDependencyOn(&myself, &referenced, DEPENDENCY_INTERNAL); pfree(argtypes); - *castFuncOid = myself.objectId; + *oneArgContructorOid = myself.objectId; /* n-arg constructor - vararg */ argtypes = buildoidvector(&rangeArrayOid, 1); @@ -1949,6 +1955,76 @@ makeMultirangeConstructors(const char *name, Oid namespace, pfree(parameterModes); } +/* + * Create casts for the multirange type. The first cast makes multirange from + * range, and it's based on the single-argument constructor. The second cast + * makes an array of ranges from multirange. + */ +static void +makeMultirangeCasts(const char *name, Oid namespace, + Oid multirangeOid, Oid rangeOid, Oid rangeArrayOid, + Oid singleArgContructorOid) +{ + ObjectAddress myself, + referenced; + oidvector *argtypes; + + /* + * Create cast from range to multirange using the existing single-argument + * constructor procedure. + */ + CastCreate(rangeOid, multirangeOid, singleArgContructorOid, 'e', 'f', + DEPENDENCY_INTERNAL); + + referenced.classId = TypeRelationId; + referenced.objectId = multirangeOid; + referenced.objectSubId = 0; + + /* multirange_to_array() function */ + argtypes = buildoidvector(&multirangeOid, 1); + myself = ProcedureCreate("multirange_to_array", /* name */ + namespace, + false, /* replace */ + false, /* returns set */ + rangeArrayOid, /* return type */ + BOOTSTRAP_SUPERUSERID, /* proowner */ + INTERNALlanguageId, /* language */ + F_FMGR_INTERNAL_VALIDATOR, + "multirange_to_array", /* prosrc */ + NULL, /* probin */ + NULL, /* prosqlbody */ + PROKIND_FUNCTION, + false, /* security_definer */ + false, /* leakproof */ + true, /* isStrict */ + PROVOLATILE_IMMUTABLE, /* volatility */ + PROPARALLEL_SAFE, /* parallel safety */ + argtypes, /* parameterTypes */ + PointerGetDatum(NULL), /* allParameterTypes */ + PointerGetDatum(NULL), /* parameterModes */ + PointerGetDatum(NULL), /* parameterNames */ + NIL, /* parameterDefaults */ + PointerGetDatum(NULL), /* trftypes */ + PointerGetDatum(NULL), /* proconfig */ + InvalidOid, /* prosupport */ + 1.0, /* procost */ + 0.0); /* prorows */ + + /* + * Make the multirange_to_array() function internally-dependent on the + * multirange type so that they go away silently when the type is dropped. + */ + recordDependencyOn(&myself, &referenced, DEPENDENCY_INTERNAL); + pfree(argtypes); + + /* + * Create cast from multirange to the array of ranges using + * multirange_to_array() function. + */ + CastCreate(multirangeOid, rangeArrayOid, myself.objectId, 'e', 'f', + DEPENDENCY_INTERNAL); +} + /* * Find suitable I/O and other support functions for a type. * diff --git a/src/backend/utils/adt/multirangetypes.c b/src/backend/utils/adt/multirangetypes.c index fbcc27d0726c7..fbbda4af36d67 100644 --- a/src/backend/utils/adt/multirangetypes.c +++ b/src/backend/utils/adt/multirangetypes.c @@ -34,6 +34,7 @@ #include "access/tupmacs.h" #include "common/hashfn.h" +#include "funcapi.h" #include "lib/stringinfo.h" #include "libpq/pqformat.h" #include "miscadmin.h" @@ -1068,6 +1069,39 @@ multirange_constructor0(PG_FUNCTION_ARGS) PG_RETURN_MULTIRANGE_P(make_multirange(mltrngtypid, rangetyp, 0, NULL)); } +/* + * Cast multirange to an array of ranges. + */ +Datum +multirange_to_array(PG_FUNCTION_ARGS) +{ + ArrayBuildState *astate = NULL; + MultirangeType *mr = PG_GETARG_MULTIRANGE_P(0); + TypeCacheEntry *typcache; + int i; + + typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr)); + + astate = initArrayResult(typcache->rngtype->type_id, + CurrentMemoryContext, + false); + + for (i = 0; i < mr->rangeCount; i++) + { + RangeType *r; + + r = multirange_get_range(typcache->rngtype, mr, i); + astate = accumArrayResult(astate, + RangeTypePGetDatum(r), + false, + typcache->rngtype->type_id, + CurrentMemoryContext); + } + + PG_RETURN_ARRAYTYPE_P(makeArrayResult(astate, CurrentMemoryContext)); +} + + /* multirange, multirange -> multirange type functions */ @@ -2645,6 +2679,78 @@ range_merge_from_multirange(PG_FUNCTION_ARGS) PG_RETURN_RANGE_P(result); } +/* Turn multirange into a set of ranges */ +Datum +multirange_unnest(PG_FUNCTION_ARGS) +{ + typedef struct + { + MultirangeType *mr; + TypeCacheEntry *typcache; + int index; + } multirange_unnest_fctx; + + FuncCallContext *funcctx; + multirange_unnest_fctx *fctx; + MemoryContext oldcontext; + + /* stuff done only on the first call of the function */ + if (SRF_IS_FIRSTCALL()) + { + MultirangeType *mr; + + /* create a function context for cross-call persistence */ + funcctx = SRF_FIRSTCALL_INIT(); + + /* + * switch to memory context appropriate for multiple function calls + */ + oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); + + /* + * Get the multirange value and detoast if needed. We can't do this + * earlier because if we have to detoast, we want the detoasted copy + * to be in multi_call_memory_ctx, so it will go away when we're done + * and not before. (If no detoast happens, we assume the originally + * passed multirange will stick around till then.) + */ + mr = PG_GETARG_MULTIRANGE_P(0); + + /* allocate memory for user context */ + fctx = (multirange_unnest_fctx *) palloc(sizeof(multirange_unnest_fctx)); + + /* initialize state */ + fctx->mr = mr; + fctx->index = 0; + fctx->typcache = lookup_type_cache(MultirangeTypeGetOid(mr), + TYPECACHE_MULTIRANGE_INFO); + + funcctx->user_fctx = fctx; + MemoryContextSwitchTo(oldcontext); + } + + /* stuff done on every call of the function */ + funcctx = SRF_PERCALL_SETUP(); + fctx = funcctx->user_fctx; + + if (fctx->index < fctx->mr->rangeCount) + { + RangeType *range; + + range = multirange_get_range(fctx->typcache->rngtype, + fctx->mr, + fctx->index); + fctx->index++; + + SRF_RETURN_NEXT(funcctx, RangeTypePGetDatum(range)); + } + else + { + /* do when there is no more left */ + SRF_RETURN_DONE(funcctx); + } +} + /* Hash support */ /* hash a multirange value */ diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 1b23c7c253bcb..7f483936dbcc7 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202106151 +#define CATALOG_VERSION_NO 202106152 #endif diff --git a/src/include/catalog/pg_cast.dat b/src/include/catalog/pg_cast.dat index 67f73cb6fb2b6..d0b37edb60571 100644 --- a/src/include/catalog/pg_cast.dat +++ b/src/include/catalog/pg_cast.dat @@ -548,4 +548,24 @@ { castsource => 'tstzrange', casttarget => 'tstzmultirange', castfunc => 'tstzmultirange(tstzrange)', castcontext => 'e', castmethod => 'f' }, + +# multirange to array +{ castsource => 'int4multirange', casttarget => '_int4range', + castfunc => 'multirange_to_array(int4multirange)', castcontext => 'e', + castmethod => 'f' } +{ castsource => 'int8multirange', casttarget => '_int8range', + castfunc => 'multirange_to_array(int8multirange)', castcontext => 'e', + castmethod => 'f' } +{ castsource => 'nummultirange', casttarget => '_numrange', + castfunc => 'multirange_to_array(nummultirange)', castcontext => 'e', + castmethod => 'f' } +{ castsource => 'datemultirange', casttarget => '_daterange', + castfunc => 'multirange_to_array(datemultirange)', castcontext => 'e', + castmethod => 'f' } +{ castsource => 'tsmultirange', casttarget => '_tsrange', + castfunc => 'multirange_to_array(tsmultirange)', castcontext => 'e', + castmethod => 'f' } +{ castsource => 'tstzmultirange', casttarget => '_tstzrange', + castfunc => 'multirange_to_array(tstzmultirange)', castcontext => 'e', + castmethod => 'f' } ] diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index fde251fa4f3e1..5af721ee3df2b 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -10537,6 +10537,29 @@ proname => 'range_intersect_agg', prokind => 'a', proisstrict => 'f', prorettype => 'anymultirange', proargtypes => 'anymultirange', prosrc => 'aggregate_dummy' }, +{ oid => '1293', descr => 'expand multirange to set of ranges', + proname => 'unnest', prorows => '100', + proretset => 't', prorettype => 'anyrange', proargtypes => 'anymultirange', + prosrc => 'multirange_unnest' }, + +{ oid => '4544', descr => 'convert multirange to array of ranges', + proname => 'multirange_to_array', prorettype => '_int4range', + proargtypes => 'int4multirange', prosrc => 'multirange_to_array' }, +{ oid => '4545', descr => 'convert multirange to array of ranges', + proname => 'multirange_to_array', prorettype => '_int8range', + proargtypes => 'int8multirange', prosrc => 'multirange_to_array' }, +{ oid => '4546', descr => 'convert multirange to array of ranges', + proname => 'multirange_to_array', prorettype => '_numrange', + proargtypes => 'nummultirange', prosrc => 'multirange_to_array' }, +{ oid => '4547', descr => 'convert multirange to array of ranges', + proname => 'multirange_to_array', prorettype => '_daterange', + proargtypes => 'datemultirange', prosrc => 'multirange_to_array' }, +{ oid => '4548', descr => 'convert multirange to array of ranges', + proname => 'multirange_to_array', prorettype => '_tsrange', + proargtypes => 'tsmultirange', prosrc => 'multirange_to_array' }, +{ oid => '4549', descr => 'convert multirange to array of ranges', + proname => 'multirange_to_array', prorettype => '_tstzrange', + proargtypes => 'tstzmultirange', prosrc => 'multirange_to_array' }, # date, time, timestamp constructors { oid => '3846', descr => 'construct date', diff --git a/src/test/regress/expected/multirangetypes.out b/src/test/regress/expected/multirangetypes.out index 98ac592127b56..7ca2d3f30a97d 100644 --- a/src/test/regress/expected/multirangetypes.out +++ b/src/test/regress/expected/multirangetypes.out @@ -322,6 +322,18 @@ select int4range(null, null)::int4multirange; {(,)} (1 row) +select 'empty'::int4range::int4multirange::int4range[]; + int4range +----------- + {} +(1 row) + +select int4multirange(int4range('5', '6'), int4range('1', '2'))::int4range[]; + int4multirange +------------------- + {"[1,2)","[5,6)"} +(1 row) + select 'empty'::textrange::textmultirange; textmultirange ---------------- @@ -346,6 +358,35 @@ select textrange(null, null)::textmultirange; {(,)} (1 row) +select textmultirange(textrange('a', 'b'), textrange('d', 'e'))::textrange[]; + textmultirange +------------------- + {"[a,b)","[d,e)"} +(1 row) + +select 'empty'::textrange::textmultirange::textrange[]; + textrange +----------- + {} +(1 row) + +-- +-- test unnest(multirange) function +-- +select unnest(int4multirange(int4range('5', '6'), int4range('1', '2'))); + unnest +-------- + [1,2) + [5,6) +(2 rows) + +select unnest(textmultirange(textrange('a', 'b'), textrange('d', 'e'))); + unnest +-------- + [a,b) + [d,e) +(2 rows) + -- -- create some test data and test the operators -- @@ -2728,6 +2769,25 @@ LINE 1: select multirange_of_text(textrange2('a','Z')); HINT: No function matches the given name and argument types. You might need to add explicit type casts. select multirange_of_text(textrange1('a','Z')) @> 'b'::text; ERROR: range lower bound must be less than or equal to range upper bound +select multirange_of_text(textrange1('a','b'), textrange1('d','e'))::textrange1[]; + multirange_of_text +-------------------- + {"[a,b)","[d,e)"} +(1 row) + +select multirange_of_text()::textrange1[]; + multirange_of_text +-------------------- + {} +(1 row) + +select unnest(multirange_of_text(textrange1('a','b'), textrange1('d','e'))); + unnest +-------- + [a,b) + [d,e) +(2 rows) + select _textrange1(textrange2('a','z')) @> 'b'::text; ?column? ---------- diff --git a/src/test/regress/expected/opr_sanity.out b/src/test/regress/expected/opr_sanity.out index 562b586d8e048..fbcd19340930b 100644 --- a/src/test/regress/expected/opr_sanity.out +++ b/src/test/regress/expected/opr_sanity.out @@ -151,6 +151,8 @@ WHERE p1.oid != p2.oid AND p2.prosrc NOT LIKE E'range\\_constructor_' AND p1.prosrc NOT LIKE E'multirange\\_constructor_' AND p2.prosrc NOT LIKE E'multirange\\_constructor_' AND + p1.prosrc != 'multirange_to_array' AND + p2.prosrc != 'multirange_to_array' AND (p1.prorettype < p2.prorettype) ORDER BY 1, 2; prorettype | prorettype @@ -171,6 +173,8 @@ WHERE p1.oid != p2.oid AND p2.prosrc NOT LIKE E'range\\_constructor_' AND p1.prosrc NOT LIKE E'multirange\\_constructor_' AND p2.prosrc NOT LIKE E'multirange\\_constructor_' AND + p1.prosrc != 'multirange_to_array' AND + p2.prosrc != 'multirange_to_array' AND (p1.proargtypes[0] < p2.proargtypes[0]) ORDER BY 1, 2; proargtypes | proargtypes @@ -193,6 +197,8 @@ WHERE p1.oid != p2.oid AND p2.prosrc NOT LIKE E'range\\_constructor_' AND p1.prosrc NOT LIKE E'multirange\\_constructor_' AND p2.prosrc NOT LIKE E'multirange\\_constructor_' AND + p1.prosrc != 'multirange_to_array' AND + p2.prosrc != 'multirange_to_array' AND (p1.proargtypes[1] < p2.proargtypes[1]) ORDER BY 1, 2; proargtypes | proargtypes diff --git a/src/test/regress/sql/multirangetypes.sql b/src/test/regress/sql/multirangetypes.sql index 3cbebedcd4a11..d636e8ca344fa 100644 --- a/src/test/regress/sql/multirangetypes.sql +++ b/src/test/regress/sql/multirangetypes.sql @@ -72,10 +72,20 @@ select 'empty'::int4range::int4multirange; select int4range(1, 3)::int4multirange; select int4range(1, null)::int4multirange; select int4range(null, null)::int4multirange; +select 'empty'::int4range::int4multirange::int4range[]; +select int4multirange(int4range('5', '6'), int4range('1', '2'))::int4range[]; select 'empty'::textrange::textmultirange; select textrange('a', 'c')::textmultirange; select textrange('a', null)::textmultirange; select textrange(null, null)::textmultirange; +select textmultirange(textrange('a', 'b'), textrange('d', 'e'))::textrange[]; +select 'empty'::textrange::textmultirange::textrange[]; + +-- +-- test unnest(multirange) function +-- +select unnest(int4multirange(int4range('5', '6'), int4range('1', '2'))); +select unnest(textmultirange(textrange('a', 'b'), textrange('d', 'e'))); -- -- create some test data and test the operators @@ -621,6 +631,9 @@ create type textrange2 as range(subtype=text, multirange_type_name=_textrange1, select multirange_of_text(textrange2('a','Z')); -- should fail select multirange_of_text(textrange1('a','Z')) @> 'b'::text; +select multirange_of_text(textrange1('a','b'), textrange1('d','e'))::textrange1[]; +select multirange_of_text()::textrange1[]; +select unnest(multirange_of_text(textrange1('a','b'), textrange1('d','e'))); select _textrange1(textrange2('a','z')) @> 'b'::text; drop type textrange1; diff --git a/src/test/regress/sql/opr_sanity.sql b/src/test/regress/sql/opr_sanity.sql index 5a9c4796923d6..19497625f9aa4 100644 --- a/src/test/regress/sql/opr_sanity.sql +++ b/src/test/regress/sql/opr_sanity.sql @@ -127,6 +127,8 @@ WHERE p1.oid != p2.oid AND p2.prosrc NOT LIKE E'range\\_constructor_' AND p1.prosrc NOT LIKE E'multirange\\_constructor_' AND p2.prosrc NOT LIKE E'multirange\\_constructor_' AND + p1.prosrc != 'multirange_to_array' AND + p2.prosrc != 'multirange_to_array' AND (p1.prorettype < p2.prorettype) ORDER BY 1, 2; @@ -140,6 +142,8 @@ WHERE p1.oid != p2.oid AND p2.prosrc NOT LIKE E'range\\_constructor_' AND p1.prosrc NOT LIKE E'multirange\\_constructor_' AND p2.prosrc NOT LIKE E'multirange\\_constructor_' AND + p1.prosrc != 'multirange_to_array' AND + p2.prosrc != 'multirange_to_array' AND (p1.proargtypes[0] < p2.proargtypes[0]) ORDER BY 1, 2; @@ -153,6 +157,8 @@ WHERE p1.oid != p2.oid AND p2.prosrc NOT LIKE E'range\\_constructor_' AND p1.prosrc NOT LIKE E'multirange\\_constructor_' AND p2.prosrc NOT LIKE E'multirange\\_constructor_' AND + p1.prosrc != 'multirange_to_array' AND + p2.prosrc != 'multirange_to_array' AND (p1.proargtypes[1] < p2.proargtypes[1]) ORDER BY 1, 2; From ad2da246c69dd5ec55764d4b6066f3b0c0d24ca2 Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Tue, 15 Jun 2021 16:06:32 +0300 Subject: [PATCH 475/671] Add missing type name "multirange" in docs chapter title Discussion: https://postgr.es/m/CAFj8pRDioOxiJgmgw9TqQqZ3CxnJC4P5B2Oospf2eMgAjJuewA%40mail.gmail.com Author: Pavel Stehule, Alexander Korotkov Reviewed-by: Justin Pryzby, Tom Lane --- doc/src/sgml/func.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index a2d810ef40e66..91b7674cbb30b 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -18165,7 +18165,7 @@ SELECT NULLIF(value, '(none)') ... - Range Functions and Operators + Range/Multirange Functions and Operators See for an overview of range types. From 958cfbcf2dd338e3179c2d8a35f48bde020eba60 Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Tue, 15 Jun 2021 08:59:36 -0700 Subject: [PATCH 476/671] Remove unneeded field from VACUUM state. Bugfix commit 5fc89376 effectively made the lock_waiter_detected field from vacuumlazy.c's global state struct into private state owned by lazy_truncate_heap(). Finish this off by replacing the struct field with a local variable. --- src/backend/access/heap/vacuumlazy.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 4b600e951a56a..88db2e2cfcec0 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -351,7 +351,6 @@ typedef struct LVRelState BlockNumber pages_removed; /* pages remove by truncation */ BlockNumber lpdead_item_pages; /* # pages with LP_DEAD items */ BlockNumber nonempty_pages; /* actually, last nonempty page + 1 */ - bool lock_waiter_detected; /* Statistics output by us, for table */ double new_rel_tuples; /* new estimated total # of tuples */ @@ -439,7 +438,8 @@ static IndexBulkDeleteResult *lazy_cleanup_one_index(Relation indrel, static bool should_attempt_truncation(LVRelState *vacrel, VacuumParams *params); static void lazy_truncate_heap(LVRelState *vacrel); -static BlockNumber count_nondeletable_pages(LVRelState *vacrel); +static BlockNumber count_nondeletable_pages(LVRelState *vacrel, + bool *lock_waiter_detected); static long compute_max_dead_tuples(BlockNumber relblocks, bool hasindex); static void lazy_space_alloc(LVRelState *vacrel, int nworkers, BlockNumber relblocks); @@ -929,7 +929,6 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) vacrel->pages_removed = 0; vacrel->lpdead_item_pages = 0; vacrel->nonempty_pages = 0; - vacrel->lock_waiter_detected = false; /* Initialize instrumentation counters */ vacrel->num_index_scans = 0; @@ -3165,6 +3164,7 @@ lazy_truncate_heap(LVRelState *vacrel) { BlockNumber old_rel_pages = vacrel->rel_pages; BlockNumber new_rel_pages; + bool lock_waiter_detected; int lock_retry; /* Report that we are now truncating */ @@ -3187,7 +3187,7 @@ lazy_truncate_heap(LVRelState *vacrel) * (which is quite possible considering we already hold a lower-grade * lock). */ - vacrel->lock_waiter_detected = false; + lock_waiter_detected = false; lock_retry = 0; while (true) { @@ -3207,7 +3207,7 @@ lazy_truncate_heap(LVRelState *vacrel) * We failed to establish the lock in the specified number of * retries. This means we give up truncating. */ - vacrel->lock_waiter_detected = true; + lock_waiter_detected = true; ereport(elevel, (errmsg("\"%s\": stopping truncate due to conflicting lock request", vacrel->relname))); @@ -3242,7 +3242,7 @@ lazy_truncate_heap(LVRelState *vacrel) * other backends could have added tuples to these pages whilst we * were vacuuming. */ - new_rel_pages = count_nondeletable_pages(vacrel); + new_rel_pages = count_nondeletable_pages(vacrel, &lock_waiter_detected); vacrel->blkno = new_rel_pages; if (new_rel_pages >= old_rel_pages) @@ -3281,8 +3281,7 @@ lazy_truncate_heap(LVRelState *vacrel) errdetail_internal("%s", pg_rusage_show(&ru0)))); old_rel_pages = new_rel_pages; - } while (new_rel_pages > vacrel->nonempty_pages && - vacrel->lock_waiter_detected); + } while (new_rel_pages > vacrel->nonempty_pages && lock_waiter_detected); } /* @@ -3291,7 +3290,7 @@ lazy_truncate_heap(LVRelState *vacrel) * Returns number of nondeletable pages (last nonempty page + 1). */ static BlockNumber -count_nondeletable_pages(LVRelState *vacrel) +count_nondeletable_pages(LVRelState *vacrel, bool *lock_waiter_detected) { BlockNumber blkno; BlockNumber prefetchedUntil; @@ -3343,7 +3342,7 @@ count_nondeletable_pages(LVRelState *vacrel) (errmsg("\"%s\": suspending truncate due to conflicting lock request", vacrel->relname))); - vacrel->lock_waiter_detected = true; + *lock_waiter_detected = true; return blkno; } starttime = currenttime; From 817bb0a7d1e02df4643d37304aed8574cf43f629 Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Tue, 15 Jun 2021 21:43:17 +0300 Subject: [PATCH 477/671] Revert 29854ee8d1 due to buildfarm failures Reported-by: Tom Lane Discussion: https://postgr.es/m/CAPpHfdvcnw3x7jdV3r52p4%3D5S4WUxBCzcQKB3JukQHoicv1LSQ%40mail.gmail.com --- doc/src/sgml/func.sgml | 23 ---- doc/src/sgml/rangetypes.sgml | 12 -- src/backend/commands/typecmds.c | 92 ++------------- src/backend/utils/adt/multirangetypes.c | 106 ------------------ src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_cast.dat | 20 ---- src/include/catalog/pg_proc.dat | 23 ---- src/test/regress/expected/multirangetypes.out | 60 ---------- src/test/regress/expected/opr_sanity.out | 6 - src/test/regress/sql/multirangetypes.sql | 13 --- src/test/regress/sql/opr_sanity.sql | 6 - 11 files changed, 9 insertions(+), 354 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 91b7674cbb30b..6388385edc56f 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -19181,29 +19181,6 @@ SELECT NULLIF(value, '(none)') ... {[1,2)} - - - - - unnest - for multirange - - unnest ( anymultirange ) - setof anyrange - - - Expands a multirange into a set of ranges. - The ranges are read out in storage order (ascending). - - - unnest('{[1,2), [3,4)}'::int4multirange) - - - [1,2) - [3,4) - - - diff --git a/doc/src/sgml/rangetypes.sgml b/doc/src/sgml/rangetypes.sgml index 9ec5510e23a8c..92ea0e83dab7b 100644 --- a/doc/src/sgml/rangetypes.sgml +++ b/doc/src/sgml/rangetypes.sgml @@ -266,18 +266,6 @@ SELECT '[4,4)'::int4range; SELECT '{}'::int4multirange; SELECT '{[3,7)}'::int4multirange; SELECT '{[3,7), [8,9)}'::int4multirange; - - - - - A multirange can be cast to an array of ranges of the same type. - - - - Examples: - -SELECT '{[3,7), [8,9)}'::int4multirange::int4range[]; -SELECT '{[1.0,14.0), [20.0,25.0)}'::nummultirange::numrange[]; diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 9ea0ce17e1223..58ec65c6afc10 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -114,11 +114,7 @@ static void makeRangeConstructors(const char *name, Oid namespace, Oid rangeOid, Oid subtype); static void makeMultirangeConstructors(const char *name, Oid namespace, Oid multirangeOid, Oid rangeOid, - Oid rangeArrayOid, - Oid *oneArgContructorOid); -static void makeMultirangeCasts(const char *name, Oid namespace, - Oid multirangeOid, Oid rangeOid, - Oid rangeArrayOid, Oid singleArgContructorOid); + Oid rangeArrayOid, Oid *castFuncOid); static Oid findTypeInputFunction(List *procname, Oid typeOid); static Oid findTypeOutputFunction(List *procname, Oid typeOid); static Oid findTypeReceiveFunction(List *procname, Oid typeOid); @@ -1369,7 +1365,7 @@ DefineRange(CreateRangeStmt *stmt) ListCell *lc; ObjectAddress address; ObjectAddress mltrngaddress PG_USED_FOR_ASSERTS_ONLY; - Oid singleArgContructorOid; + Oid castFuncOid; /* Convert list of names to a name and namespace */ typeNamespace = QualifiedNameGetCreationNamespace(stmt->typeName, @@ -1721,12 +1717,10 @@ DefineRange(CreateRangeStmt *stmt) makeRangeConstructors(typeName, typeNamespace, typoid, rangeSubtype); makeMultirangeConstructors(multirangeTypeName, typeNamespace, multirangeOid, typoid, rangeArrayOid, - &singleArgContructorOid); + &castFuncOid); - /* Create casts for this multirange type */ - makeMultirangeCasts(multirangeTypeName, typeNamespace, - multirangeOid, typoid, rangeArrayOid, - singleArgContructorOid); + /* Create cast from the range type to its multirange type */ + CastCreate(typoid, multirangeOid, castFuncOid, 'e', 'f', DEPENDENCY_INTERNAL); pfree(multirangeTypeName); pfree(multirangeArrayName); @@ -1814,13 +1808,13 @@ makeRangeConstructors(const char *name, Oid namespace, * If we had an anyrangearray polymorphic type we could use it here, * but since each type has its own constructor name there's no need. * - * Sets oneArgContructorOid to the oid of the new constructor that can be used + * Sets castFuncOid to the oid of the new constructor that can be used * to cast from a range to a multirange. */ static void makeMultirangeConstructors(const char *name, Oid namespace, Oid multirangeOid, Oid rangeOid, Oid rangeArrayOid, - Oid *oneArgContructorOid) + Oid *castFuncOid) { ObjectAddress myself, referenced; @@ -1910,7 +1904,7 @@ makeMultirangeConstructors(const char *name, Oid namespace, /* ditto */ recordDependencyOn(&myself, &referenced, DEPENDENCY_INTERNAL); pfree(argtypes); - *oneArgContructorOid = myself.objectId; + *castFuncOid = myself.objectId; /* n-arg constructor - vararg */ argtypes = buildoidvector(&rangeArrayOid, 1); @@ -1955,76 +1949,6 @@ makeMultirangeConstructors(const char *name, Oid namespace, pfree(parameterModes); } -/* - * Create casts for the multirange type. The first cast makes multirange from - * range, and it's based on the single-argument constructor. The second cast - * makes an array of ranges from multirange. - */ -static void -makeMultirangeCasts(const char *name, Oid namespace, - Oid multirangeOid, Oid rangeOid, Oid rangeArrayOid, - Oid singleArgContructorOid) -{ - ObjectAddress myself, - referenced; - oidvector *argtypes; - - /* - * Create cast from range to multirange using the existing single-argument - * constructor procedure. - */ - CastCreate(rangeOid, multirangeOid, singleArgContructorOid, 'e', 'f', - DEPENDENCY_INTERNAL); - - referenced.classId = TypeRelationId; - referenced.objectId = multirangeOid; - referenced.objectSubId = 0; - - /* multirange_to_array() function */ - argtypes = buildoidvector(&multirangeOid, 1); - myself = ProcedureCreate("multirange_to_array", /* name */ - namespace, - false, /* replace */ - false, /* returns set */ - rangeArrayOid, /* return type */ - BOOTSTRAP_SUPERUSERID, /* proowner */ - INTERNALlanguageId, /* language */ - F_FMGR_INTERNAL_VALIDATOR, - "multirange_to_array", /* prosrc */ - NULL, /* probin */ - NULL, /* prosqlbody */ - PROKIND_FUNCTION, - false, /* security_definer */ - false, /* leakproof */ - true, /* isStrict */ - PROVOLATILE_IMMUTABLE, /* volatility */ - PROPARALLEL_SAFE, /* parallel safety */ - argtypes, /* parameterTypes */ - PointerGetDatum(NULL), /* allParameterTypes */ - PointerGetDatum(NULL), /* parameterModes */ - PointerGetDatum(NULL), /* parameterNames */ - NIL, /* parameterDefaults */ - PointerGetDatum(NULL), /* trftypes */ - PointerGetDatum(NULL), /* proconfig */ - InvalidOid, /* prosupport */ - 1.0, /* procost */ - 0.0); /* prorows */ - - /* - * Make the multirange_to_array() function internally-dependent on the - * multirange type so that they go away silently when the type is dropped. - */ - recordDependencyOn(&myself, &referenced, DEPENDENCY_INTERNAL); - pfree(argtypes); - - /* - * Create cast from multirange to the array of ranges using - * multirange_to_array() function. - */ - CastCreate(multirangeOid, rangeArrayOid, myself.objectId, 'e', 'f', - DEPENDENCY_INTERNAL); -} - /* * Find suitable I/O and other support functions for a type. * diff --git a/src/backend/utils/adt/multirangetypes.c b/src/backend/utils/adt/multirangetypes.c index fbbda4af36d67..fbcc27d0726c7 100644 --- a/src/backend/utils/adt/multirangetypes.c +++ b/src/backend/utils/adt/multirangetypes.c @@ -34,7 +34,6 @@ #include "access/tupmacs.h" #include "common/hashfn.h" -#include "funcapi.h" #include "lib/stringinfo.h" #include "libpq/pqformat.h" #include "miscadmin.h" @@ -1069,39 +1068,6 @@ multirange_constructor0(PG_FUNCTION_ARGS) PG_RETURN_MULTIRANGE_P(make_multirange(mltrngtypid, rangetyp, 0, NULL)); } -/* - * Cast multirange to an array of ranges. - */ -Datum -multirange_to_array(PG_FUNCTION_ARGS) -{ - ArrayBuildState *astate = NULL; - MultirangeType *mr = PG_GETARG_MULTIRANGE_P(0); - TypeCacheEntry *typcache; - int i; - - typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr)); - - astate = initArrayResult(typcache->rngtype->type_id, - CurrentMemoryContext, - false); - - for (i = 0; i < mr->rangeCount; i++) - { - RangeType *r; - - r = multirange_get_range(typcache->rngtype, mr, i); - astate = accumArrayResult(astate, - RangeTypePGetDatum(r), - false, - typcache->rngtype->type_id, - CurrentMemoryContext); - } - - PG_RETURN_ARRAYTYPE_P(makeArrayResult(astate, CurrentMemoryContext)); -} - - /* multirange, multirange -> multirange type functions */ @@ -2679,78 +2645,6 @@ range_merge_from_multirange(PG_FUNCTION_ARGS) PG_RETURN_RANGE_P(result); } -/* Turn multirange into a set of ranges */ -Datum -multirange_unnest(PG_FUNCTION_ARGS) -{ - typedef struct - { - MultirangeType *mr; - TypeCacheEntry *typcache; - int index; - } multirange_unnest_fctx; - - FuncCallContext *funcctx; - multirange_unnest_fctx *fctx; - MemoryContext oldcontext; - - /* stuff done only on the first call of the function */ - if (SRF_IS_FIRSTCALL()) - { - MultirangeType *mr; - - /* create a function context for cross-call persistence */ - funcctx = SRF_FIRSTCALL_INIT(); - - /* - * switch to memory context appropriate for multiple function calls - */ - oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); - - /* - * Get the multirange value and detoast if needed. We can't do this - * earlier because if we have to detoast, we want the detoasted copy - * to be in multi_call_memory_ctx, so it will go away when we're done - * and not before. (If no detoast happens, we assume the originally - * passed multirange will stick around till then.) - */ - mr = PG_GETARG_MULTIRANGE_P(0); - - /* allocate memory for user context */ - fctx = (multirange_unnest_fctx *) palloc(sizeof(multirange_unnest_fctx)); - - /* initialize state */ - fctx->mr = mr; - fctx->index = 0; - fctx->typcache = lookup_type_cache(MultirangeTypeGetOid(mr), - TYPECACHE_MULTIRANGE_INFO); - - funcctx->user_fctx = fctx; - MemoryContextSwitchTo(oldcontext); - } - - /* stuff done on every call of the function */ - funcctx = SRF_PERCALL_SETUP(); - fctx = funcctx->user_fctx; - - if (fctx->index < fctx->mr->rangeCount) - { - RangeType *range; - - range = multirange_get_range(fctx->typcache->rngtype, - fctx->mr, - fctx->index); - fctx->index++; - - SRF_RETURN_NEXT(funcctx, RangeTypePGetDatum(range)); - } - else - { - /* do when there is no more left */ - SRF_RETURN_DONE(funcctx); - } -} - /* Hash support */ /* hash a multirange value */ diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 7f483936dbcc7..1b23c7c253bcb 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202106152 +#define CATALOG_VERSION_NO 202106151 #endif diff --git a/src/include/catalog/pg_cast.dat b/src/include/catalog/pg_cast.dat index d0b37edb60571..67f73cb6fb2b6 100644 --- a/src/include/catalog/pg_cast.dat +++ b/src/include/catalog/pg_cast.dat @@ -548,24 +548,4 @@ { castsource => 'tstzrange', casttarget => 'tstzmultirange', castfunc => 'tstzmultirange(tstzrange)', castcontext => 'e', castmethod => 'f' }, - -# multirange to array -{ castsource => 'int4multirange', casttarget => '_int4range', - castfunc => 'multirange_to_array(int4multirange)', castcontext => 'e', - castmethod => 'f' } -{ castsource => 'int8multirange', casttarget => '_int8range', - castfunc => 'multirange_to_array(int8multirange)', castcontext => 'e', - castmethod => 'f' } -{ castsource => 'nummultirange', casttarget => '_numrange', - castfunc => 'multirange_to_array(nummultirange)', castcontext => 'e', - castmethod => 'f' } -{ castsource => 'datemultirange', casttarget => '_daterange', - castfunc => 'multirange_to_array(datemultirange)', castcontext => 'e', - castmethod => 'f' } -{ castsource => 'tsmultirange', casttarget => '_tsrange', - castfunc => 'multirange_to_array(tsmultirange)', castcontext => 'e', - castmethod => 'f' } -{ castsource => 'tstzmultirange', casttarget => '_tstzrange', - castfunc => 'multirange_to_array(tstzmultirange)', castcontext => 'e', - castmethod => 'f' } ] diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 5af721ee3df2b..fde251fa4f3e1 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -10537,29 +10537,6 @@ proname => 'range_intersect_agg', prokind => 'a', proisstrict => 'f', prorettype => 'anymultirange', proargtypes => 'anymultirange', prosrc => 'aggregate_dummy' }, -{ oid => '1293', descr => 'expand multirange to set of ranges', - proname => 'unnest', prorows => '100', - proretset => 't', prorettype => 'anyrange', proargtypes => 'anymultirange', - prosrc => 'multirange_unnest' }, - -{ oid => '4544', descr => 'convert multirange to array of ranges', - proname => 'multirange_to_array', prorettype => '_int4range', - proargtypes => 'int4multirange', prosrc => 'multirange_to_array' }, -{ oid => '4545', descr => 'convert multirange to array of ranges', - proname => 'multirange_to_array', prorettype => '_int8range', - proargtypes => 'int8multirange', prosrc => 'multirange_to_array' }, -{ oid => '4546', descr => 'convert multirange to array of ranges', - proname => 'multirange_to_array', prorettype => '_numrange', - proargtypes => 'nummultirange', prosrc => 'multirange_to_array' }, -{ oid => '4547', descr => 'convert multirange to array of ranges', - proname => 'multirange_to_array', prorettype => '_daterange', - proargtypes => 'datemultirange', prosrc => 'multirange_to_array' }, -{ oid => '4548', descr => 'convert multirange to array of ranges', - proname => 'multirange_to_array', prorettype => '_tsrange', - proargtypes => 'tsmultirange', prosrc => 'multirange_to_array' }, -{ oid => '4549', descr => 'convert multirange to array of ranges', - proname => 'multirange_to_array', prorettype => '_tstzrange', - proargtypes => 'tstzmultirange', prosrc => 'multirange_to_array' }, # date, time, timestamp constructors { oid => '3846', descr => 'construct date', diff --git a/src/test/regress/expected/multirangetypes.out b/src/test/regress/expected/multirangetypes.out index 7ca2d3f30a97d..98ac592127b56 100644 --- a/src/test/regress/expected/multirangetypes.out +++ b/src/test/regress/expected/multirangetypes.out @@ -322,18 +322,6 @@ select int4range(null, null)::int4multirange; {(,)} (1 row) -select 'empty'::int4range::int4multirange::int4range[]; - int4range ------------ - {} -(1 row) - -select int4multirange(int4range('5', '6'), int4range('1', '2'))::int4range[]; - int4multirange -------------------- - {"[1,2)","[5,6)"} -(1 row) - select 'empty'::textrange::textmultirange; textmultirange ---------------- @@ -358,35 +346,6 @@ select textrange(null, null)::textmultirange; {(,)} (1 row) -select textmultirange(textrange('a', 'b'), textrange('d', 'e'))::textrange[]; - textmultirange -------------------- - {"[a,b)","[d,e)"} -(1 row) - -select 'empty'::textrange::textmultirange::textrange[]; - textrange ------------ - {} -(1 row) - --- --- test unnest(multirange) function --- -select unnest(int4multirange(int4range('5', '6'), int4range('1', '2'))); - unnest --------- - [1,2) - [5,6) -(2 rows) - -select unnest(textmultirange(textrange('a', 'b'), textrange('d', 'e'))); - unnest --------- - [a,b) - [d,e) -(2 rows) - -- -- create some test data and test the operators -- @@ -2769,25 +2728,6 @@ LINE 1: select multirange_of_text(textrange2('a','Z')); HINT: No function matches the given name and argument types. You might need to add explicit type casts. select multirange_of_text(textrange1('a','Z')) @> 'b'::text; ERROR: range lower bound must be less than or equal to range upper bound -select multirange_of_text(textrange1('a','b'), textrange1('d','e'))::textrange1[]; - multirange_of_text --------------------- - {"[a,b)","[d,e)"} -(1 row) - -select multirange_of_text()::textrange1[]; - multirange_of_text --------------------- - {} -(1 row) - -select unnest(multirange_of_text(textrange1('a','b'), textrange1('d','e'))); - unnest --------- - [a,b) - [d,e) -(2 rows) - select _textrange1(textrange2('a','z')) @> 'b'::text; ?column? ---------- diff --git a/src/test/regress/expected/opr_sanity.out b/src/test/regress/expected/opr_sanity.out index fbcd19340930b..562b586d8e048 100644 --- a/src/test/regress/expected/opr_sanity.out +++ b/src/test/regress/expected/opr_sanity.out @@ -151,8 +151,6 @@ WHERE p1.oid != p2.oid AND p2.prosrc NOT LIKE E'range\\_constructor_' AND p1.prosrc NOT LIKE E'multirange\\_constructor_' AND p2.prosrc NOT LIKE E'multirange\\_constructor_' AND - p1.prosrc != 'multirange_to_array' AND - p2.prosrc != 'multirange_to_array' AND (p1.prorettype < p2.prorettype) ORDER BY 1, 2; prorettype | prorettype @@ -173,8 +171,6 @@ WHERE p1.oid != p2.oid AND p2.prosrc NOT LIKE E'range\\_constructor_' AND p1.prosrc NOT LIKE E'multirange\\_constructor_' AND p2.prosrc NOT LIKE E'multirange\\_constructor_' AND - p1.prosrc != 'multirange_to_array' AND - p2.prosrc != 'multirange_to_array' AND (p1.proargtypes[0] < p2.proargtypes[0]) ORDER BY 1, 2; proargtypes | proargtypes @@ -197,8 +193,6 @@ WHERE p1.oid != p2.oid AND p2.prosrc NOT LIKE E'range\\_constructor_' AND p1.prosrc NOT LIKE E'multirange\\_constructor_' AND p2.prosrc NOT LIKE E'multirange\\_constructor_' AND - p1.prosrc != 'multirange_to_array' AND - p2.prosrc != 'multirange_to_array' AND (p1.proargtypes[1] < p2.proargtypes[1]) ORDER BY 1, 2; proargtypes | proargtypes diff --git a/src/test/regress/sql/multirangetypes.sql b/src/test/regress/sql/multirangetypes.sql index d636e8ca344fa..3cbebedcd4a11 100644 --- a/src/test/regress/sql/multirangetypes.sql +++ b/src/test/regress/sql/multirangetypes.sql @@ -72,20 +72,10 @@ select 'empty'::int4range::int4multirange; select int4range(1, 3)::int4multirange; select int4range(1, null)::int4multirange; select int4range(null, null)::int4multirange; -select 'empty'::int4range::int4multirange::int4range[]; -select int4multirange(int4range('5', '6'), int4range('1', '2'))::int4range[]; select 'empty'::textrange::textmultirange; select textrange('a', 'c')::textmultirange; select textrange('a', null)::textmultirange; select textrange(null, null)::textmultirange; -select textmultirange(textrange('a', 'b'), textrange('d', 'e'))::textrange[]; -select 'empty'::textrange::textmultirange::textrange[]; - --- --- test unnest(multirange) function --- -select unnest(int4multirange(int4range('5', '6'), int4range('1', '2'))); -select unnest(textmultirange(textrange('a', 'b'), textrange('d', 'e'))); -- -- create some test data and test the operators @@ -631,9 +621,6 @@ create type textrange2 as range(subtype=text, multirange_type_name=_textrange1, select multirange_of_text(textrange2('a','Z')); -- should fail select multirange_of_text(textrange1('a','Z')) @> 'b'::text; -select multirange_of_text(textrange1('a','b'), textrange1('d','e'))::textrange1[]; -select multirange_of_text()::textrange1[]; -select unnest(multirange_of_text(textrange1('a','b'), textrange1('d','e'))); select _textrange1(textrange2('a','z')) @> 'b'::text; drop type textrange1; diff --git a/src/test/regress/sql/opr_sanity.sql b/src/test/regress/sql/opr_sanity.sql index 19497625f9aa4..5a9c4796923d6 100644 --- a/src/test/regress/sql/opr_sanity.sql +++ b/src/test/regress/sql/opr_sanity.sql @@ -127,8 +127,6 @@ WHERE p1.oid != p2.oid AND p2.prosrc NOT LIKE E'range\\_constructor_' AND p1.prosrc NOT LIKE E'multirange\\_constructor_' AND p2.prosrc NOT LIKE E'multirange\\_constructor_' AND - p1.prosrc != 'multirange_to_array' AND - p2.prosrc != 'multirange_to_array' AND (p1.prorettype < p2.prorettype) ORDER BY 1, 2; @@ -142,8 +140,6 @@ WHERE p1.oid != p2.oid AND p2.prosrc NOT LIKE E'range\\_constructor_' AND p1.prosrc NOT LIKE E'multirange\\_constructor_' AND p2.prosrc NOT LIKE E'multirange\\_constructor_' AND - p1.prosrc != 'multirange_to_array' AND - p2.prosrc != 'multirange_to_array' AND (p1.proargtypes[0] < p2.proargtypes[0]) ORDER BY 1, 2; @@ -157,8 +153,6 @@ WHERE p1.oid != p2.oid AND p2.prosrc NOT LIKE E'range\\_constructor_' AND p1.prosrc NOT LIKE E'multirange\\_constructor_' AND p2.prosrc NOT LIKE E'multirange\\_constructor_' AND - p1.prosrc != 'multirange_to_array' AND - p2.prosrc != 'multirange_to_array' AND (p1.proargtypes[1] < p2.proargtypes[1]) ORDER BY 1, 2; From 54a5ed22016940d7ad5060ed62d23473924756a1 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Tue, 15 Jun 2021 15:30:11 -0400 Subject: [PATCH 478/671] Further refinement of stuck_on_old_timeline recovery test TestLib::perl2host can take a file argument as well as a directory argument, so that code becomes substantially simpler. Also add comments on why we're using forward slashes, and why we're setting PERL_BADLANG=0. Discussion: https://postgr.es/m/e9947bcd-20ee-027c-f0fe-01f736b7e345@dunslane.net --- src/test/recovery/t/025_stuck_on_old_timeline.pl | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/test/recovery/t/025_stuck_on_old_timeline.pl b/src/test/recovery/t/025_stuck_on_old_timeline.pl index e4e58cb8ab968..dbaab8e6e6dc7 100644 --- a/src/test/recovery/t/025_stuck_on_old_timeline.pl +++ b/src/test/recovery/t/025_stuck_on_old_timeline.pl @@ -24,11 +24,11 @@ # the timeline history file reaches the archive but before any of the WAL files # get there. $node_primary->init(allows_streaming => 1, has_archiving => 1); -my $perlbin = $^X; -if ($^O eq 'msys') -{ - $perlbin = TestLib::perl2host(dirname($^X)) . '\\' . basename($^X); -} + +# Note: consistent use of forward slashes here avoids any escaping problems +# that arise from use of backslashes. That means we need to double-quote all +# the paths in the archive_command +my $perlbin = TestLib::perl2host($^X); $perlbin =~ s!\\!/!g if $TestLib::windows_os; my $archivedir_primary = $node_primary->archive_dir; $archivedir_primary =~ s!\\!/!g if $TestLib::windows_os; @@ -36,6 +36,8 @@ archive_command = '"$perlbin" "$FindBin::RealBin/cp_history_files" "%p" "$archivedir_primary/%f"' wal_keep_size=128MB )); +# Make sure that Msys perl doesn't complain about difficulty in setting locale +# when called from the archive_command. local $ENV{PERL_BADLANG}=0; $node_primary->start; From f6352a0d4e437ac8bc266f77df22d064592056c9 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 15 Jun 2021 16:09:14 -0400 Subject: [PATCH 479/671] Remove another orphan expected-result file. aborted-keyrevoke_2.out was apparently needed when it was added (in commit 0ac5ad513) to handle the case of serializable transaction mode. However, the output in serializable mode actually matches the regular aborted-keyrevoke.out file, and AFAICT has done so for a long time. There's no need to keep dragging this variant along. --- .../expected/aborted-keyrevoke_2.out | 218 ------------------ 1 file changed, 218 deletions(-) delete mode 100644 src/test/isolation/expected/aborted-keyrevoke_2.out diff --git a/src/test/isolation/expected/aborted-keyrevoke_2.out b/src/test/isolation/expected/aborted-keyrevoke_2.out deleted file mode 100644 index c286964f75b6b..0000000000000 --- a/src/test/isolation/expected/aborted-keyrevoke_2.out +++ /dev/null @@ -1,218 +0,0 @@ -Parsed test spec with 2 sessions - -starting permutation: s1s s1u s1r s1l s1c s2l s2c -step s1s: SAVEPOINT f; -step s1u: UPDATE foo SET key = 2; -step s1r: ROLLBACK TO f; -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1c: COMMIT; -step s2l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s2c: COMMIT; - -starting permutation: s1s s1u s1r s1l s2l s1c s2c -step s1s: SAVEPOINT f; -step s1u: UPDATE foo SET key = 2; -step s1r: ROLLBACK TO f; -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s2l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1c: COMMIT; -step s2c: COMMIT; - -starting permutation: s1s s1u s1r s1l s2l s2c s1c -step s1s: SAVEPOINT f; -step s1u: UPDATE foo SET key = 2; -step s1r: ROLLBACK TO f; -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s2l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s2c: COMMIT; -step s1c: COMMIT; - -starting permutation: s1s s1u s1r s2l s1l s1c s2c -step s1s: SAVEPOINT f; -step s1u: UPDATE foo SET key = 2; -step s1r: ROLLBACK TO f; -step s2l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1c: COMMIT; -step s2c: COMMIT; - -starting permutation: s1s s1u s1r s2l s1l s2c s1c -step s1s: SAVEPOINT f; -step s1u: UPDATE foo SET key = 2; -step s1r: ROLLBACK TO f; -step s2l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s2c: COMMIT; -step s1c: COMMIT; - -starting permutation: s1s s1u s1r s2l s2c s1l s1c -step s1s: SAVEPOINT f; -step s1u: UPDATE foo SET key = 2; -step s1r: ROLLBACK TO f; -step s2l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s2c: COMMIT; -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1c: COMMIT; - -starting permutation: s1s s1u s2l s1r s1l s1c s2c -step s1s: SAVEPOINT f; -step s1u: UPDATE foo SET key = 2; -step s2l: SELECT * FROM foo FOR KEY SHARE; -step s1r: ROLLBACK TO f; -step s2l: <... completed> -key value - -1 1 -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1c: COMMIT; -step s2c: COMMIT; - -starting permutation: s1s s1u s2l s1r s1l s2c s1c -step s1s: SAVEPOINT f; -step s1u: UPDATE foo SET key = 2; -step s2l: SELECT * FROM foo FOR KEY SHARE; -step s1r: ROLLBACK TO f; -step s2l: <... completed> -key value - -1 1 -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s2c: COMMIT; -step s1c: COMMIT; - -starting permutation: s1s s1u s2l s1r s2c s1l s1c -step s1s: SAVEPOINT f; -step s1u: UPDATE foo SET key = 2; -step s2l: SELECT * FROM foo FOR KEY SHARE; -step s1r: ROLLBACK TO f; -step s2l: <... completed> -key value - -1 1 -step s2c: COMMIT; -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1c: COMMIT; - -starting permutation: s1s s2l s1u s2c s1r s1l s1c -step s1s: SAVEPOINT f; -step s2l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1u: UPDATE foo SET key = 2; -step s2c: COMMIT; -step s1u: <... completed> -error in steps s2c s1u: ERROR: could not serialize access due to concurrent update -step s1r: ROLLBACK TO f; -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1c: COMMIT; - -starting permutation: s1s s2l s2c s1u s1r s1l s1c -step s1s: SAVEPOINT f; -step s2l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s2c: COMMIT; -step s1u: UPDATE foo SET key = 2; -step s1r: ROLLBACK TO f; -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1c: COMMIT; - -starting permutation: s2l s1s s1u s2c s1r s1l s1c -step s2l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1s: SAVEPOINT f; -step s1u: UPDATE foo SET key = 2; -step s2c: COMMIT; -step s1u: <... completed> -error in steps s2c s1u: ERROR: could not serialize access due to concurrent update -step s1r: ROLLBACK TO f; -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1c: COMMIT; - -starting permutation: s2l s1s s2c s1u s1r s1l s1c -step s2l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1s: SAVEPOINT f; -step s2c: COMMIT; -step s1u: UPDATE foo SET key = 2; -step s1r: ROLLBACK TO f; -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1c: COMMIT; - -starting permutation: s2l s2c s1s s1u s1r s1l s1c -step s2l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s2c: COMMIT; -step s1s: SAVEPOINT f; -step s1u: UPDATE foo SET key = 2; -step s1r: ROLLBACK TO f; -step s1l: SELECT * FROM foo FOR KEY SHARE; -key value - -1 1 -step s1c: COMMIT; From d3c878499c9d639ff06e0664d06b8c731e30c2fc Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 15 Jun 2021 16:11:45 -0400 Subject: [PATCH 480/671] Update another variant expected-result file. This should have been updated in 533e9c6b0, but it was overlooked. Given the lack of complaints, I won't bother back-patching. --- src/test/isolation/expected/lock-update-delete_1.out | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/isolation/expected/lock-update-delete_1.out b/src/test/isolation/expected/lock-update-delete_1.out index 4203573b9c134..f1c1c7026f47a 100644 --- a/src/test/isolation/expected/lock-update-delete_1.out +++ b/src/test/isolation/expected/lock-update-delete_1.out @@ -150,7 +150,9 @@ pg_advisory_unlock t step s1l: <... completed> -error in steps s2_unlock s1l: ERROR: could not serialize access due to concurrent update +key value + +1 1 starting permutation: s2b s1l s2u s2_blocker1 s2r s2_unlock pg_advisory_lock From d0303bc8d2670d11c9df9220aa08a2c33529e100 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Wed, 16 Jun 2021 12:34:32 +0300 Subject: [PATCH 481/671] Fix outdated comment that talked about seek position of WAL file. Since commit c24dcd0cfd, we have been using pg_pread() to read the WAL file, which doesn't change the seek position (unless we fall back to the implementation in src/port/pread.c). Update comment accordingly. Backpatch-through: 12, where we started to use pg_pread() --- src/backend/access/transam/xlog.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 17eeff072004c..1b3a3d9beab9c 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -809,11 +809,9 @@ static XLogSegNo openLogSegNo = 0; /* * These variables are used similarly to the ones above, but for reading - * the XLOG. Note, however, that readOff generally represents the offset - * of the page just read, not the seek position of the FD itself, which - * will be just past that page. readLen indicates how much of the current - * page has been read into readBuf, and readSource indicates where we got - * the currently open file from. + * the XLOG. readOff is the offset of the page just read, readLen + * indicates how much of it has been read into readBuf, and readSource + * indicates where we got the currently open file from. * Note: we could use Reserve/ReleaseExternalFD to track consumption of * this FD too; but it doesn't currently seem worthwhile, since the XLOG is * not read by general-purpose sessions. From 6b787d9e32005867ee3660d1ea20f447810a403d Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 16 Jun 2021 11:52:05 -0400 Subject: [PATCH 482/671] Improve SQLSTATE reporting in some replication-related code. I started out with the goal of reporting ERRCODE_CONNECTION_FAILURE when walrcv_connect() fails, but as I looked around I realized that whoever wrote this code was of the opinion that errcodes are purely optional. That's not my understanding of our project policy. Hence, make sure that an errcode is provided in each ereport that (a) is ERROR or higher level and (b) isn't arguably an internal logic error. Also fix some very dubious existing errcode assignments. While this is not per policy, it's also largely cosmetic, since few of these cases could get reported to applications. So I don't feel a need to back-patch. Discussion: https://postgr.es/m/2189704.1623512522@sss.pgh.pa.us --- src/backend/commands/subscriptioncmds.c | 29 +++++---- .../libpqwalreceiver/libpqwalreceiver.c | 60 ++++++++++++------- src/backend/replication/logical/tablesync.c | 21 ++++--- src/backend/replication/logical/worker.c | 6 +- src/backend/replication/walreceiver.c | 19 ++++-- 5 files changed, 88 insertions(+), 47 deletions(-) diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index 8aa6de17850af..75e195f286e8c 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -468,7 +468,8 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) wrconn = walrcv_connect(conninfo, true, stmt->subname, &err); if (!wrconn) ereport(ERROR, - (errmsg("could not connect to the publisher: %s", err))); + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not connect to the publisher: %s", err))); PG_TRY(); { @@ -565,7 +566,8 @@ AlterSubscription_refresh(Subscription *sub, bool copy_data) wrconn = walrcv_connect(sub->conninfo, true, sub->name, &err); if (!wrconn) ereport(ERROR, - (errmsg("could not connect to the publisher: %s", err))); + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not connect to the publisher: %s", err))); PG_TRY(); { @@ -820,7 +822,7 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) { if (sub->enabled && !slotname) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("cannot set %s for enabled subscription", "slot_name = NONE"))); @@ -876,7 +878,7 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) if (!sub->slotname && enabled) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("cannot enable subscription that does not have a slot name"))); values[Anum_pg_subscription_subenabled - 1] = @@ -928,7 +930,7 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) { if (!sub->enabled) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions"), errhint("Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)."))); @@ -976,7 +978,7 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) { if (!sub->enabled) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions"), errhint("Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)."))); @@ -997,7 +999,7 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) if (!sub->enabled) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions"))); parse_subscription_options(stmt->options, @@ -1354,7 +1356,8 @@ ReplicationSlotDropAtPubNode(WalReceiverConn *wrconn, char *slotname, bool missi { /* ERROR. */ ereport(ERROR, - (errmsg("could not drop replication slot \"%s\" on publisher: %s", + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not drop replication slot \"%s\" on publisher: %s", slotname, res->err))); } @@ -1505,7 +1508,8 @@ fetch_table_list(WalReceiverConn *wrconn, List *publications) if (res->status != WALRCV_OK_TUPLES) ereport(ERROR, - (errmsg("could not receive list of replicated tables from the publisher: %s", + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not receive list of replicated tables from the publisher: %s", res->err))); /* Process tables. */ @@ -1569,7 +1573,8 @@ ReportSlotConnectionError(List *rstates, Oid subid, char *slotname, char *err) } ereport(ERROR, - (errmsg("could not connect to publisher when attempting to " + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not connect to publisher when attempting to " "drop replication slot \"%s\": %s", slotname, err), /* translator: %s is an SQL ALTER command */ errhint("Use %s to disassociate the subscription from the slot.", @@ -1601,7 +1606,7 @@ check_duplicates_in_publist(List *publist, Datum *datums) if (strcmp(name, pname) == 0) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_DUPLICATE_OBJECT), errmsg("publication name \"%s\" used more than once", pname))); } @@ -1659,7 +1664,7 @@ merge_publications(List *oldpublist, List *newpublist, bool addpub, const char * oldpublist = lappend(oldpublist, makeString(name)); else if (!addpub && !found) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), errmsg("publication \"%s\" is not in subscription \"%s\"", name, subname))); } diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c index 021c1b36f3ecb..6eaa84a0315a2 100644 --- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c +++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c @@ -278,7 +278,8 @@ libpqrcv_get_conninfo(WalReceiverConn *conn) if (conn_opts == NULL) ereport(ERROR, - (errmsg("could not parse connection string: %s", + (errcode(ERRCODE_OUT_OF_MEMORY), + errmsg("could not parse connection string: %s", _("out of memory")))); /* build a clean connection string from pieces */ @@ -350,7 +351,8 @@ libpqrcv_identify_system(WalReceiverConn *conn, TimeLineID *primary_tli) { PQclear(res); ereport(ERROR, - (errmsg("could not receive database system identifier and timeline ID from " + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("could not receive database system identifier and timeline ID from " "the primary server: %s", pchomp(PQerrorMessage(conn->streamConn))))); } @@ -361,7 +363,8 @@ libpqrcv_identify_system(WalReceiverConn *conn, TimeLineID *primary_tli) PQclear(res); ereport(ERROR, - (errmsg("invalid response from primary server"), + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("invalid response from primary server"), errdetail("Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields.", ntuples, nfields, 3, 1))); } @@ -437,13 +440,15 @@ libpqrcv_startstreaming(WalReceiverConn *conn, pubnames_str = stringlist_to_identifierstr(conn->streamConn, pubnames); if (!pubnames_str) ereport(ERROR, - (errmsg("could not start WAL streaming: %s", + (errcode(ERRCODE_OUT_OF_MEMORY), /* likely guess */ + errmsg("could not start WAL streaming: %s", pchomp(PQerrorMessage(conn->streamConn))))); pubnames_literal = PQescapeLiteral(conn->streamConn, pubnames_str, strlen(pubnames_str)); if (!pubnames_literal) ereport(ERROR, - (errmsg("could not start WAL streaming: %s", + (errcode(ERRCODE_OUT_OF_MEMORY), /* likely guess */ + errmsg("could not start WAL streaming: %s", pchomp(PQerrorMessage(conn->streamConn))))); appendStringInfo(&cmd, ", publication_names %s", pubnames_literal); PQfreemem(pubnames_literal); @@ -472,7 +477,8 @@ libpqrcv_startstreaming(WalReceiverConn *conn, { PQclear(res); ereport(ERROR, - (errmsg("could not start WAL streaming: %s", + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("could not start WAL streaming: %s", pchomp(PQerrorMessage(conn->streamConn))))); } PQclear(res); @@ -495,7 +501,8 @@ libpqrcv_endstreaming(WalReceiverConn *conn, TimeLineID *next_tli) if (PQputCopyEnd(conn->streamConn, NULL) <= 0 || PQflush(conn->streamConn)) ereport(ERROR, - (errmsg("could not send end-of-streaming message to primary: %s", + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not send end-of-streaming message to primary: %s", pchomp(PQerrorMessage(conn->streamConn))))); *next_tli = 0; @@ -517,7 +524,8 @@ libpqrcv_endstreaming(WalReceiverConn *conn, TimeLineID *next_tli) */ if (PQnfields(res) < 2 || PQntuples(res) != 1) ereport(ERROR, - (errmsg("unexpected result set after end-of-streaming"))); + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("unexpected result set after end-of-streaming"))); *next_tli = pg_strtoint32(PQgetvalue(res, 0, 0)); PQclear(res); @@ -531,7 +539,8 @@ libpqrcv_endstreaming(WalReceiverConn *conn, TimeLineID *next_tli) /* End the copy */ if (PQendcopy(conn->streamConn)) ereport(ERROR, - (errmsg("error while shutting down streaming COPY: %s", + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("error while shutting down streaming COPY: %s", pchomp(PQerrorMessage(conn->streamConn))))); /* CommandComplete should follow */ @@ -540,7 +549,8 @@ libpqrcv_endstreaming(WalReceiverConn *conn, TimeLineID *next_tli) if (PQresultStatus(res) != PGRES_COMMAND_OK) ereport(ERROR, - (errmsg("error reading result of streaming command: %s", + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("error reading result of streaming command: %s", pchomp(PQerrorMessage(conn->streamConn))))); PQclear(res); @@ -548,7 +558,8 @@ libpqrcv_endstreaming(WalReceiverConn *conn, TimeLineID *next_tli) res = libpqrcv_PQgetResult(conn->streamConn); if (res != NULL) ereport(ERROR, - (errmsg("unexpected result after CommandComplete: %s", + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("unexpected result after CommandComplete: %s", pchomp(PQerrorMessage(conn->streamConn))))); } @@ -574,7 +585,8 @@ libpqrcv_readtimelinehistoryfile(WalReceiverConn *conn, { PQclear(res); ereport(ERROR, - (errmsg("could not receive timeline history file from " + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("could not receive timeline history file from " "the primary server: %s", pchomp(PQerrorMessage(conn->streamConn))))); } @@ -585,7 +597,8 @@ libpqrcv_readtimelinehistoryfile(WalReceiverConn *conn, PQclear(res); ereport(ERROR, - (errmsg("invalid response from primary server"), + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("invalid response from primary server"), errdetail("Expected 1 tuple with 2 fields, got %d tuples with %d fields.", ntuples, nfields))); } @@ -746,7 +759,8 @@ libpqrcv_receive(WalReceiverConn *conn, char **buffer, /* Try consuming some data. */ if (PQconsumeInput(conn->streamConn) == 0) ereport(ERROR, - (errmsg("could not receive data from WAL stream: %s", + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not receive data from WAL stream: %s", pchomp(PQerrorMessage(conn->streamConn))))); /* Now that we've consumed some input, try again */ @@ -782,7 +796,8 @@ libpqrcv_receive(WalReceiverConn *conn, char **buffer, return -1; ereport(ERROR, - (errmsg("unexpected result after CommandComplete: %s", + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("unexpected result after CommandComplete: %s", PQerrorMessage(conn->streamConn)))); } @@ -797,13 +812,15 @@ libpqrcv_receive(WalReceiverConn *conn, char **buffer, { PQclear(res); ereport(ERROR, - (errmsg("could not receive data from WAL stream: %s", + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("could not receive data from WAL stream: %s", pchomp(PQerrorMessage(conn->streamConn))))); } } if (rawlen < -1) ereport(ERROR, - (errmsg("could not receive data from WAL stream: %s", + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("could not receive data from WAL stream: %s", pchomp(PQerrorMessage(conn->streamConn))))); /* Return received messages to caller */ @@ -822,7 +839,8 @@ libpqrcv_send(WalReceiverConn *conn, const char *buffer, int nbytes) if (PQputCopyData(conn->streamConn, buffer, nbytes) <= 0 || PQflush(conn->streamConn)) ereport(ERROR, - (errmsg("could not send data to WAL stream: %s", + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not send data to WAL stream: %s", pchomp(PQerrorMessage(conn->streamConn))))); } @@ -875,7 +893,8 @@ libpqrcv_create_slot(WalReceiverConn *conn, const char *slotname, { PQclear(res); ereport(ERROR, - (errmsg("could not create replication slot \"%s\": %s", + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("could not create replication slot \"%s\": %s", slotname, pchomp(PQerrorMessage(conn->streamConn))))); } @@ -920,7 +939,8 @@ libpqrcv_processTuples(PGresult *pgres, WalRcvExecResult *walres, /* Make sure we got expected number of fields. */ if (nfields != nRetTypes) ereport(ERROR, - (errmsg("invalid query response"), + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("invalid query response"), errdetail("Expected %d fields, got %d fields.", nRetTypes, nfields))); diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c index 67f907cdd968f..cc50eb875b1d1 100644 --- a/src/backend/replication/logical/tablesync.c +++ b/src/backend/replication/logical/tablesync.c @@ -723,13 +723,15 @@ fetch_remote_table_info(char *nspname, char *relname, if (res->status != WALRCV_OK_TUPLES) ereport(ERROR, - (errmsg("could not fetch table info for table \"%s.%s\" from publisher: %s", + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not fetch table info for table \"%s.%s\" from publisher: %s", nspname, relname, res->err))); slot = MakeSingleTupleTableSlot(res->tupledesc, &TTSOpsMinimalTuple); if (!tuplestore_gettupleslot(res->tuplestore, true, false, slot)) ereport(ERROR, - (errmsg("table \"%s.%s\" not found on publisher", + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("table \"%s.%s\" not found on publisher", nspname, relname))); lrel->remoteid = DatumGetObjectId(slot_getattr(slot, 1, &isnull)); @@ -764,7 +766,8 @@ fetch_remote_table_info(char *nspname, char *relname, if (res->status != WALRCV_OK_TUPLES) ereport(ERROR, - (errmsg("could not fetch table info for table \"%s.%s\" from publisher: %s", + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not fetch table info for table \"%s.%s\" from publisher: %s", nspname, relname, res->err))); /* We don't know the number of rows coming, so allocate enough space. */ @@ -851,7 +854,8 @@ copy_table(Relation rel) pfree(cmd.data); if (res->status != WALRCV_OK_COPY_OUT) ereport(ERROR, - (errmsg("could not start initial contents copy for table \"%s.%s\": %s", + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not start initial contents copy for table \"%s.%s\": %s", lrel.nspname, lrel.relname, res->err))); walrcv_clear_result(res); @@ -967,7 +971,8 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) walrcv_connect(MySubscription->conninfo, true, slotname, &err); if (LogRepWorkerWalRcvConn == NULL) ereport(ERROR, - (errmsg("could not connect to the publisher: %s", err))); + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not connect to the publisher: %s", err))); Assert(MyLogicalRepWorker->relstate == SUBREL_STATE_INIT || MyLogicalRepWorker->relstate == SUBREL_STATE_DATASYNC || @@ -1050,7 +1055,8 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) 0, NULL); if (res->status != WALRCV_OK_COMMAND) ereport(ERROR, - (errmsg("table copy could not start transaction on publisher: %s", + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("table copy could not start transaction on publisher: %s", res->err))); walrcv_clear_result(res); @@ -1110,7 +1116,8 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) res = walrcv_exec(LogRepWorkerWalRcvConn, "COMMIT", 0, NULL); if (res->status != WALRCV_OK_COMMAND) ereport(ERROR, - (errmsg("table copy could not finish transaction on publisher: %s", + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("table copy could not finish transaction on publisher: %s", res->err))); walrcv_clear_result(res); diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 4b112593c65ee..bbb659dad063e 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -2388,7 +2388,8 @@ LogicalRepApplyLoop(XLogRecPtr last_received) if (now >= timeout) ereport(ERROR, - (errmsg("terminating logical replication worker due to timeout"))); + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("terminating logical replication worker due to timeout"))); /* Check to see if it's time for a ping. */ if (!ping_sent) @@ -3207,7 +3208,8 @@ ApplyWorkerMain(Datum main_arg) MySubscription->name, &err); if (LogRepWorkerWalRcvConn == NULL) ereport(ERROR, - (errmsg("could not connect to the publisher: %s", err))); + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not connect to the publisher: %s", err))); /* * We don't really use the output identify_system for anything but it diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index b94910bfe9ad5..faeea9f0cc563 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -279,10 +279,13 @@ WalReceiverMain(void) PG_SETMASK(&UnBlockSig); /* Establish the connection to the primary for XLOG streaming */ - wrconn = walrcv_connect(conninfo, false, cluster_name[0] ? cluster_name : "walreceiver", &err); + wrconn = walrcv_connect(conninfo, false, + cluster_name[0] ? cluster_name : "walreceiver", + &err); if (!wrconn) ereport(ERROR, - (errmsg("could not connect to the primary server: %s", err))); + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("could not connect to the primary server: %s", err))); /* * Save user-visible connection string. This clobbers the original @@ -328,7 +331,8 @@ WalReceiverMain(void) if (strcmp(primary_sysid, standby_sysid) != 0) { ereport(ERROR, - (errmsg("database system identifier differs between the primary and standby"), + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("database system identifier differs between the primary and standby"), errdetail("The primary's identifier is %s, the standby's identifier is %s.", primary_sysid, standby_sysid))); } @@ -339,7 +343,8 @@ WalReceiverMain(void) */ if (primaryTLI < startpointTLI) ereport(ERROR, - (errmsg("highest timeline %u of the primary is behind recovery timeline %u", + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("highest timeline %u of the primary is behind recovery timeline %u", primaryTLI, startpointTLI))); /* @@ -425,7 +430,8 @@ WalReceiverMain(void) */ if (!RecoveryInProgress()) ereport(FATAL, - (errmsg("cannot continue WAL streaming, recovery has already ended"))); + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("cannot continue WAL streaming, recovery has already ended"))); /* Process any requests or signals received recently */ ProcessWalRcvInterrupts(); @@ -551,7 +557,8 @@ WalReceiverMain(void) if (now >= timeout) ereport(ERROR, - (errmsg("terminating walreceiver due to timeout"))); + (errcode(ERRCODE_CONNECTION_FAILURE), + errmsg("terminating walreceiver due to timeout"))); /* * We didn't receive anything new, for half of From 99cea49d6525e30bc3768e4ffb95377e7584dea1 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Wed, 16 Jun 2021 22:53:31 +0200 Subject: [PATCH 483/671] Fix copying data into slots with FDW batching Commit b676ac443b optimized handling of tuple slots with bulk inserts into foreign tables, so that the slots are initialized only once and reused for all batches. The data was however copied into the slots only after the initialization, inserting duplicate values when the slot gets reused. Fixed by moving the ExecCopySlot outside the init branch. The existing postgres_fdw tests failed to catch this due to inserting data into foreign tables without unique indexes, and then checking only the number of inserted rows. This adds a new test with both a unique index and a check of inserted values. Reported-by: Alexander Pyhalov Discussion: https://postgr.es/m/7a8cf8d56b3d18e5c0bccd6cd42d04ac%40postgrespro.ru --- .../postgres_fdw/expected/postgres_fdw.out | 82 ++++++++++++++++++- contrib/postgres_fdw/sql/postgres_fdw.sql | 29 ++++++- src/backend/executor/nodeModifyTable.c | 10 ++- 3 files changed, 115 insertions(+), 6 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 1fb26639fcb91..858e5d4a388ce 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -9761,7 +9761,87 @@ SELECT tableoid::regclass, * FROM batch_cp_upd_test; (2 rows) -- Clean up -DROP TABLE batch_table, batch_cp_upd_test CASCADE; +DROP TABLE batch_table, batch_cp_upd_test, batch_table_p0, batch_table_p1 CASCADE; +-- Use partitioning +ALTER SERVER loopback OPTIONS (ADD batch_size '10'); +CREATE TABLE batch_table ( x int, field1 text, field2 text) PARTITION BY HASH (x); +CREATE TABLE batch_table_p0 (LIKE batch_table); +ALTER TABLE batch_table_p0 ADD CONSTRAINT p0_pkey PRIMARY KEY (x); +CREATE FOREIGN TABLE batch_table_p0f + PARTITION OF batch_table + FOR VALUES WITH (MODULUS 2, REMAINDER 0) + SERVER loopback + OPTIONS (table_name 'batch_table_p0'); +CREATE TABLE batch_table_p1 (LIKE batch_table); +ALTER TABLE batch_table_p1 ADD CONSTRAINT p1_pkey PRIMARY KEY (x); +CREATE FOREIGN TABLE batch_table_p1f + PARTITION OF batch_table + FOR VALUES WITH (MODULUS 2, REMAINDER 1) + SERVER loopback + OPTIONS (table_name 'batch_table_p1'); +INSERT INTO batch_table SELECT i, 'test'||i, 'test'|| i FROM generate_series(1, 50) i; +SELECT COUNT(*) FROM batch_table; + count +------- + 50 +(1 row) + +SELECT * FROM batch_table ORDER BY x; + x | field1 | field2 +----+--------+-------- + 1 | test1 | test1 + 2 | test2 | test2 + 3 | test3 | test3 + 4 | test4 | test4 + 5 | test5 | test5 + 6 | test6 | test6 + 7 | test7 | test7 + 8 | test8 | test8 + 9 | test9 | test9 + 10 | test10 | test10 + 11 | test11 | test11 + 12 | test12 | test12 + 13 | test13 | test13 + 14 | test14 | test14 + 15 | test15 | test15 + 16 | test16 | test16 + 17 | test17 | test17 + 18 | test18 | test18 + 19 | test19 | test19 + 20 | test20 | test20 + 21 | test21 | test21 + 22 | test22 | test22 + 23 | test23 | test23 + 24 | test24 | test24 + 25 | test25 | test25 + 26 | test26 | test26 + 27 | test27 | test27 + 28 | test28 | test28 + 29 | test29 | test29 + 30 | test30 | test30 + 31 | test31 | test31 + 32 | test32 | test32 + 33 | test33 | test33 + 34 | test34 | test34 + 35 | test35 | test35 + 36 | test36 | test36 + 37 | test37 | test37 + 38 | test38 | test38 + 39 | test39 | test39 + 40 | test40 | test40 + 41 | test41 | test41 + 42 | test42 | test42 + 43 | test43 | test43 + 44 | test44 | test44 + 45 | test45 | test45 + 46 | test46 | test46 + 47 | test47 | test47 + 48 | test48 | test48 + 49 | test49 | test49 + 50 | test50 | test50 +(50 rows) + +ALTER SERVER loopback OPTIONS (DROP batch_size); -- =================================================================== -- test asynchronous execution -- =================================================================== diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 8cb2148f1f6aa..34a67d716052c 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -3083,7 +3083,34 @@ UPDATE batch_cp_upd_test t SET a = 1 FROM (VALUES (1), (2)) s(a) WHERE t.a = s.a SELECT tableoid::regclass, * FROM batch_cp_upd_test; -- Clean up -DROP TABLE batch_table, batch_cp_upd_test CASCADE; +DROP TABLE batch_table, batch_cp_upd_test, batch_table_p0, batch_table_p1 CASCADE; + +-- Use partitioning +ALTER SERVER loopback OPTIONS (ADD batch_size '10'); + +CREATE TABLE batch_table ( x int, field1 text, field2 text) PARTITION BY HASH (x); + +CREATE TABLE batch_table_p0 (LIKE batch_table); +ALTER TABLE batch_table_p0 ADD CONSTRAINT p0_pkey PRIMARY KEY (x); +CREATE FOREIGN TABLE batch_table_p0f + PARTITION OF batch_table + FOR VALUES WITH (MODULUS 2, REMAINDER 0) + SERVER loopback + OPTIONS (table_name 'batch_table_p0'); + +CREATE TABLE batch_table_p1 (LIKE batch_table); +ALTER TABLE batch_table_p1 ADD CONSTRAINT p1_pkey PRIMARY KEY (x); +CREATE FOREIGN TABLE batch_table_p1f + PARTITION OF batch_table + FOR VALUES WITH (MODULUS 2, REMAINDER 1) + SERVER loopback + OPTIONS (table_name 'batch_table_p1'); + +INSERT INTO batch_table SELECT i, 'test'||i, 'test'|| i FROM generate_series(1, 50) i; +SELECT COUNT(*) FROM batch_table; +SELECT * FROM batch_table ORDER BY x; + +ALTER SERVER loopback OPTIONS (DROP batch_size); -- =================================================================== -- test asynchronous execution diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 88c479c6da33a..143517bc760cc 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -717,18 +717,20 @@ ExecInsert(ModifyTableState *mtstate, resultRelInfo->ri_Slots[resultRelInfo->ri_NumSlots] = MakeSingleTupleTableSlot(tdesc, slot->tts_ops); - ExecCopySlot(resultRelInfo->ri_Slots[resultRelInfo->ri_NumSlots], - slot); resultRelInfo->ri_PlanSlots[resultRelInfo->ri_NumSlots] = MakeSingleTupleTableSlot(tdesc, planSlot->tts_ops); - ExecCopySlot(resultRelInfo->ri_PlanSlots[resultRelInfo->ri_NumSlots], - planSlot); /* remember how many batch slots we initialized */ resultRelInfo->ri_NumSlotsInitialized++; } + ExecCopySlot(resultRelInfo->ri_Slots[resultRelInfo->ri_NumSlots], + slot); + + ExecCopySlot(resultRelInfo->ri_PlanSlots[resultRelInfo->ri_NumSlots], + planSlot); + resultRelInfo->ri_NumSlots++; MemoryContextSwitchTo(oldContext); From 131ea3e908d3c97a2fe1ab25cce5046dd5cb905f Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 16 Jun 2021 19:30:17 -0400 Subject: [PATCH 484/671] Fix plancache refcount leak after error in ExecuteQuery. When stuffing a plan from the plancache into a Portal, one is not supposed to risk throwing an error between GetCachedPlan and PortalDefineQuery; if that happens, the plan refcount incremented by GetCachedPlan will be leaked. I managed to break this rule while refactoring code in 9dbf2b7d7. There is no visible consequence other than some memory leakage, and since nobody is very likely to trigger the relevant error conditions many times in a row, it's not surprising we haven't noticed. Nonetheless, it's a bug, so rearrange the order of operations to remove the hazard. Noted on the way to looking for a better fix for bug #17053. This mistake is pretty old, so back-patch to all supported branches. --- src/backend/commands/prepare.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/backend/commands/prepare.c b/src/backend/commands/prepare.c index f767751c71ae3..65d8ac65b1843 100644 --- a/src/backend/commands/prepare.c +++ b/src/backend/commands/prepare.c @@ -233,6 +233,17 @@ ExecuteQuery(ParseState *pstate, cplan = GetCachedPlan(entry->plansource, paramLI, NULL, NULL); plan_list = cplan->stmt_list; + /* + * DO NOT add any logic that could possibly throw an error between + * GetCachedPlan and PortalDefineQuery, or you'll leak the plan refcount. + */ + PortalDefineQuery(portal, + NULL, + query_string, + entry->plansource->commandTag, + plan_list, + cplan); + /* * For CREATE TABLE ... AS EXECUTE, we must verify that the prepared * statement is one that produces tuples. Currently we insist that it be @@ -276,13 +287,6 @@ ExecuteQuery(ParseState *pstate, count = FETCH_ALL; } - PortalDefineQuery(portal, - NULL, - query_string, - entry->plansource->commandTag, - plan_list, - cplan); - /* * Run the portal as appropriate. */ From 3cb828dbe26087e7754f49f3cfe3ed036d5af439 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Thu, 17 Jun 2021 09:56:05 +0530 Subject: [PATCH 485/671] Document a few caveats in synchronous logical replication. In a synchronous logical setup, locking [user] catalog tables can cause deadlock. This is because logical decoding of transactions can lock catalog tables to access them so exclusively locking those in transactions can lead to deadlock. To avoid this users must refrain from having exclusive locks on catalog tables. Author: Takamichi Osumi Reviewed-by: Vignesh C, Amit Kapila Backpatch-through: 9.6 Discussion: https://www.postgresql.org/message-id/20210222222847.tpnb6eg3yiykzpky%40alap3.anarazel.de --- doc/src/sgml/logicaldecoding.sgml | 100 +++++++++++++++++++++++------- 1 file changed, 78 insertions(+), 22 deletions(-) diff --git a/doc/src/sgml/logicaldecoding.sgml b/doc/src/sgml/logicaldecoding.sgml index d2c6e15566257..1765ea6c87e6e 100644 --- a/doc/src/sgml/logicaldecoding.sgml +++ b/doc/src/sgml/logicaldecoding.sgml @@ -1066,28 +1066,83 @@ OutputPluginWrite(ctx, true); Synchronous Replication Support for Logical Decoding + + Overview - - Logical decoding can be used to build - synchronous - replication solutions with the same user interface as synchronous - replication for streaming - replication. To do this, the streaming replication interface - (see ) must be used to stream out - data. Clients have to send Standby status update (F) - (see ) messages, just like streaming - replication clients do. - - - - A synchronous replica receiving changes via logical decoding will work in - the scope of a single database. Since, in contrast to - that, synchronous_standby_names currently is - server wide, this means this technique will not work properly if more - than one database is actively used. + Logical decoding can be used to build + synchronous + replication solutions with the same user interface as synchronous + replication for streaming + replication. To do this, the streaming replication interface + (see ) must be used to stream out + data. Clients have to send Standby status update (F) + (see ) messages, just like streaming + replication clients do. + + + + + A synchronous replica receiving changes via logical decoding will work in + the scope of a single database. Since, in contrast to + that, synchronous_standby_names currently is + server wide, this means this technique will not work properly if more + than one database is actively used. - + + + + + Caveats + + + In synchronous replication setup, a deadlock can happen, if the transaction + has locked [user] catalog tables exclusively. This is because logical decoding of + transactions can lock catalog tables to access them. To avoid this users + must refrain from taking an exclusive lock on [user] catalog tables. This can + happen in the following ways: + + + + + Issuing an explicit LOCK on pg_class + (or any other catalog table) in a transaction. + + + + + + Perform CLUSTER on pg_class in + a transaction. + + + + + + PREPARE TRANSACTION after LOCK command + on pg_class and allow logical decoding of two-phase + transactions. + + + + + + PREPARE TRANSACTION after CLUSTER + command on pg_trigger and allow logical decoding of + two-phase transactions. This will lead to deadlock only when published table + have a trigger. + + + + + + Executing TRUNCATE on [user] catalog table in a + transaction. + + + + + @@ -1253,9 +1308,10 @@ stream_commit_cb(...); <-- commit of the streamed transaction The logical replication solution that builds distributed two phase commit using this feature can deadlock if the prepared transaction has locked - [user] catalog tables exclusively. They need to inform users to not have - locks on catalog tables (via explicit LOCK command) in - such transactions. + [user] catalog tables exclusively. To avoid this users must refrain from + having locks on catalog tables (e.g. explicit LOCK command) + in such transactions. + (See for the details.) From d24c5658a80c8f5037e9e1948de311d3f3350f12 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Thu, 17 Jun 2021 14:50:42 +0300 Subject: [PATCH 486/671] Tidy up GetMultiXactIdMembers()'s behavior on error One of the error paths left *members uninitialized. That's not a live bug, because most callers don't look at *members when the function returns -1, but let's be tidy. One caller, in heap_lock_tuple(), does "if (members != NULL) pfree(members)", but AFAICS it never passes an invalid 'multi' value so it should not reach that error case. The callers are also a bit inconsistent in their expectations. heap_lock_tuple() pfrees the 'members' array if it's not-NULL, others pfree() it if "nmembers >= 0", and others if "nmembers > 0". That's not a live bug either, because the function should never return 0, but add an Assert for that to make it more clear. I left the callers alone for now. I also moved the line where we set *nmembers. It wasn't wrong before, but I like to do that right next to the 'return' statement, to make it clear that it's always set on return. Also remove one unreachable return statement after ereport(ERROR), for brevity and for consistency with the similar if-block right after it. Author: Greg Nancarrow with the additional changes by me Backpatch-through: 9.6, all supported versions --- src/backend/access/transam/multixact.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index daab546f29684..b643564f16a4e 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -1241,7 +1241,10 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, debug_elog3(DEBUG2, "GetMembers: asked for %u", multi); if (!MultiXactIdIsValid(multi) || from_pgupgrade) + { + *members = NULL; return -1; + } /* See if the MultiXactId is in the local cache */ length = mXactCacheGetById(multi, members); @@ -1292,13 +1295,10 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, LWLockRelease(MultiXactGenLock); if (MultiXactIdPrecedes(multi, oldestMXact)) - { ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg("MultiXactId %u does no longer exist -- apparent wraparound", multi))); - return -1; - } if (!MultiXactIdPrecedes(multi, nextMXact)) ereport(ERROR, @@ -1398,7 +1398,6 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, LWLockRelease(MultiXactOffsetSLRULock); ptr = (MultiXactMember *) palloc(length * sizeof(MultiXactMember)); - *members = ptr; /* Now get the members themselves. */ LWLockAcquire(MultiXactMemberSLRULock, LW_EXCLUSIVE); @@ -1443,6 +1442,9 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, LWLockRelease(MultiXactMemberSLRULock); + /* A multixid with zero members should not happen */ + Assert(truelength > 0); + /* * Copy the result into the local cache. */ @@ -1450,6 +1452,7 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, debug_elog3(DEBUG2, "GetMembers: no cache for %s", mxid_to_string(multi, truelength, ptr)); + *members = ptr; return truelength; } @@ -1550,7 +1553,6 @@ mXactCacheGetById(MultiXactId multi, MultiXactMember **members) size = sizeof(MultiXactMember) * entry->nmembers; ptr = (MultiXactMember *) palloc(size); - *members = ptr; memcpy(ptr, entry->members, size); @@ -1566,6 +1568,7 @@ mXactCacheGetById(MultiXactId multi, MultiXactMember **members) */ dlist_move_head(&MXactCache, iter.cur); + *members = ptr; return entry->nmembers; } } From f80979f659d39e238e95444e6752142799428078 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 18 Jun 2021 14:22:31 +0900 Subject: [PATCH 487/671] doc: Apply markup to OpenSSL more consistently Author: Daniel Gustafsson Discussion: https://postgr.es/m/CE12DD5C-4BB3-4166-BC9A-39779568734C@yesql.se --- doc/src/sgml/config.sgml | 11 ++++++----- doc/src/sgml/libpq.sgml | 3 ++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index aa3e17824094c..eeba2caa43f86 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -1276,7 +1276,8 @@ include_dir 'conf.d' - The directory needs to be prepared with the OpenSSL command + The directory needs to be prepared with the + OpenSSL command openssl rehash or c_rehash. See its documentation for details. @@ -1320,7 +1321,7 @@ include_dir 'conf.d' Specifies a list of SSL cipher suites that are allowed to be used by SSL connections. See the ciphers - manual page in the OpenSSL package for the + manual page in the OpenSSL package for the syntax of this setting and a list of supported values. Only connections using TLS version 1.2 and lower are affected. There is currently no setting that controls the cipher choices used by TLS @@ -1389,9 +1390,9 @@ include_dir 'conf.d' Available cipher suite details will vary across OpenSSL versions. Use the command openssl ciphers -v 'HIGH:MEDIUM:+3DES:!aNULL' to - see actual details for the currently installed OpenSSL - version. Note that this list is filtered at run time based on the - server key type. + see actual details for the currently installed + OpenSSL version. Note that this list is + filtered at run time based on the server key type. diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 6b96f30dccaa9..daf223312470c 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -1765,7 +1765,8 @@ postgresql://%2Fvar%2Flib%2Fpostgresql/dbname - The directory needs to be prepared with the OpenSSL command + The directory needs to be prepared with the + OpenSSL command openssl rehash or c_rehash. See its documentation for details. From 981524d2e3aa3f28d364c472e34f5386be846811 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Fri, 18 Jun 2021 17:57:09 +0900 Subject: [PATCH 488/671] Make archiver process handle barrier events. Commit d75288fb27 made WAL archiver process an auxiliary process. An auxiliary process needs to handle barrier events but the commit forgot to make archiver process do that. Reported-by: Thomas Munro Author: Fujii Masao Reviewed-by: Thomas Munro Discussion: https://postgr.es/m/CA+hUKGLah2w1pWKHonZP_+EQw69=q56AHYwCgEN8GDzsRG_Hgw@mail.gmail.com --- src/backend/postmaster/pgarch.c | 41 ++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/src/backend/postmaster/pgarch.c b/src/backend/postmaster/pgarch.c index dfc7abbc975c3..74a7d7c4d0a99 100644 --- a/src/backend/postmaster/pgarch.c +++ b/src/backend/postmaster/pgarch.c @@ -102,6 +102,7 @@ static bool pgarch_archiveXlog(char *xlog); static bool pgarch_readyXlog(char *xlog); static void pgarch_archiveDone(char *xlog); static void pgarch_die(int code, Datum arg); +static void HandlePgArchInterrupts(void); /* Report shared memory space needed by PgArchShmemInit */ Size @@ -257,12 +258,8 @@ pgarch_MainLoop(void) /* When we get SIGUSR2, we do one more archive cycle, then exit */ time_to_stop = ready_to_stop; - /* Check for config update */ - if (ConfigReloadPending) - { - ConfigReloadPending = false; - ProcessConfigFile(PGC_SIGHUP); - } + /* Check for barrier events and config update */ + HandlePgArchInterrupts(); /* * If we've gotten SIGTERM, we normally just sit and do nothing until @@ -355,15 +352,11 @@ pgarch_ArchiverCopyLoop(void) return; /* - * Check for config update. This is so that we'll adopt a new - * setting for archive_command as soon as possible, even if there - * is a backlog of files to be archived. + * Check for barrier events and config update. This is so that + * we'll adopt a new setting for archive_command as soon as + * possible, even if there is a backlog of files to be archived. */ - if (ConfigReloadPending) - { - ConfigReloadPending = false; - ProcessConfigFile(PGC_SIGHUP); - } + HandlePgArchInterrupts(); /* can't do anything if no command ... */ if (!XLogArchiveCommandSet()) @@ -703,3 +696,23 @@ pgarch_die(int code, Datum arg) { PgArch->pgprocno = INVALID_PGPROCNO; } + +/* + * Interrupt handler for WAL archiver process. + * + * This is called in the loops pgarch_MainLoop and pgarch_ArchiverCopyLoop. + * It checks for barrier events and config update, but not shutdown request + * because how to handle shutdown request is different between those loops. + */ +static void +HandlePgArchInterrupts(void) +{ + if (ProcSignalBarrierPending) + ProcessProcSignalBarrier(); + + if (ConfigReloadPending) + { + ConfigReloadPending = false; + ProcessConfigFile(PGC_SIGHUP); + } +} From 0a4efdc7ebf2584257b166c87e82797eb92815b5 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Fri, 18 Jun 2021 06:51:12 -0400 Subject: [PATCH 489/671] Don't set a fast default for anything but a plain table MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The fast default code added in Release 11 omitted to check that the table a fast default was being added to was a plain table. Thus one could be added to a foreign table, which predicably blows up. Here we perform that check. In addition, on the back branches, since some of these might have escaped into the wild, if we encounter a missing value for an attribute of something other than a plain table we ignore it. Fixes bug #17056 Backpatch to release 11, Reviewed by: Andres Freund, Álvaro Herrera and Tom Lane --- src/backend/catalog/heap.c | 10 +++++++++- src/test/regress/expected/fast_default.out | 19 +++++++++++++++++++ src/test/regress/sql/fast_default.sql | 14 ++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index afa830d92485a..1293dc04caa50 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -2161,6 +2161,13 @@ SetAttrMissing(Oid relid, char *attname, char *value) /* lock the table the attribute belongs to */ tablerel = table_open(relid, AccessExclusiveLock); + /* Don't do anything unless it's a plain table */ + if (tablerel->rd_rel->relkind != RELKIND_RELATION) + { + table_close(tablerel, AccessExclusiveLock); + return; + } + /* Lock the attribute row and get the data */ attrrel = table_open(AttributeRelationId, RowExclusiveLock); atttup = SearchSysCacheAttName(relid, attname); @@ -2287,7 +2294,8 @@ StoreAttrDefault(Relation rel, AttrNumber attnum, valuesAtt[Anum_pg_attribute_atthasdef - 1] = true; replacesAtt[Anum_pg_attribute_atthasdef - 1] = true; - if (add_column_mode && !attgenerated) + if (rel->rd_rel->relkind == RELKIND_RELATION && add_column_mode && + !attgenerated) { expr2 = expression_planner(expr2); estate = CreateExecutorState(); diff --git a/src/test/regress/expected/fast_default.out b/src/test/regress/expected/fast_default.out index 10bc5ff757c21..91f25717b5a5b 100644 --- a/src/test/regress/expected/fast_default.out +++ b/src/test/regress/expected/fast_default.out @@ -797,7 +797,26 @@ SELECT * FROM t WHERE a IS NULL; (1 row) ROLLBACK; +-- verify that a default set on a non-plain table doesn't set a missing +-- value on the attribute +CREATE FOREIGN DATA WRAPPER dummy; +CREATE SERVER s0 FOREIGN DATA WRAPPER dummy; +CREATE FOREIGN TABLE ft1 (c1 integer NOT NULL) SERVER s0; +ALTER FOREIGN TABLE ft1 ADD COLUMN c8 integer DEFAULT 0; +ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE char(10); +SELECT count(*) + FROM pg_attribute + WHERE attrelid = 'ft1'::regclass AND + (attmissingval IS NOT NULL OR atthasmissing); + count +------- + 0 +(1 row) + -- cleanup +DROP FOREIGN TABLE ft1; +DROP SERVER s0; +DROP FOREIGN DATA WRAPPER dummy; DROP TABLE vtype; DROP TABLE vtype2; DROP TABLE follower; diff --git a/src/test/regress/sql/fast_default.sql b/src/test/regress/sql/fast_default.sql index 4589b9e58d170..16a3b7ca51d1a 100644 --- a/src/test/regress/sql/fast_default.sql +++ b/src/test/regress/sql/fast_default.sql @@ -524,8 +524,22 @@ SET LOCAL enable_seqscan = false; SELECT * FROM t WHERE a IS NULL; ROLLBACK; +-- verify that a default set on a non-plain table doesn't set a missing +-- value on the attribute +CREATE FOREIGN DATA WRAPPER dummy; +CREATE SERVER s0 FOREIGN DATA WRAPPER dummy; +CREATE FOREIGN TABLE ft1 (c1 integer NOT NULL) SERVER s0; +ALTER FOREIGN TABLE ft1 ADD COLUMN c8 integer DEFAULT 0; +ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE char(10); +SELECT count(*) + FROM pg_attribute + WHERE attrelid = 'ft1'::regclass AND + (attmissingval IS NOT NULL OR atthasmissing); -- cleanup +DROP FOREIGN TABLE ft1; +DROP SERVER s0; +DROP FOREIGN DATA WRAPPER dummy; DROP TABLE vtype; DROP TABLE vtype2; DROP TABLE follower; From 7c337b6b527b7052e6a751f966d5734c56f668b5 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 18 Jun 2021 11:22:58 -0400 Subject: [PATCH 490/671] Centralize the logic for protective copying of utility statements. In the "simple Query" code path, it's fine for parse analysis or execution of a utility statement to scribble on the statement's node tree, since that'll just be thrown away afterwards. However it's not fine if the node tree is in the plan cache, as then it'd be corrupted for subsequent executions. Up to now we've dealt with that by having individual utility-statement functions apply copyObject() if they were going to modify the tree. But that's prone to errors of omission. Bug #17053 from Charles Samborski shows that CREATE/ALTER DOMAIN didn't get this memo, and can crash if executed repeatedly from plan cache. In the back branches, we'll just apply a narrow band-aid for that, but in HEAD it seems prudent to have a more principled fix that will close off the possibility of other similar bugs in future. Hence, let's hoist the responsibility for doing copyObject up into ProcessUtility from its children, thus ensuring that it happens for all utility statement types. Also, modify ProcessUtility's API so that its callers can tell it whether a copy step is necessary. It turns out that in all cases, the immediate caller knows whether the node tree is transient, so this doesn't involve a huge amount of code thrashing. In this way, while we lose a little bit in the execute-from-cache code path due to sometimes copying node trees that wouldn't be mutated anyway, we gain something in the simple-Query code path by not copying throwaway node trees. Statements that are complex enough to be expensive to copy are almost certainly ones that would have to be copied anyway, so the loss in the cache code path shouldn't be much. (Note that this whole problem applies only to utility statements. Optimizable statements don't have the issue because we long ago made the executor treat Plan trees as read-only. Perhaps someday we will make utility statement execution act likewise, but I'm not holding my breath.) Discussion: https://postgr.es/m/931771.1623893989@sss.pgh.pa.us Discussion: https://postgr.es/m/17053-3ca3f501bbc212b4@postgresql.org --- .../pg_stat_statements/pg_stat_statements.c | 10 +++--- contrib/sepgsql/hooks.c | 5 +-- src/backend/commands/copyto.c | 8 +---- src/backend/commands/createas.c | 8 +---- src/backend/commands/explain.c | 14 +++----- src/backend/commands/extension.c | 1 + src/backend/commands/foreigncmds.c | 3 +- src/backend/commands/policy.c | 8 ++--- src/backend/commands/portalcmds.c | 8 +---- src/backend/commands/prepare.c | 5 +-- src/backend/commands/schemacmds.c | 1 + src/backend/commands/tablecmds.c | 3 +- src/backend/commands/view.c | 5 +-- src/backend/executor/functions.c | 1 + src/backend/executor/spi.c | 1 + src/backend/parser/parse_utilcmd.c | 36 ++----------------- src/backend/tcop/pquery.c | 1 + src/backend/tcop/utility.c | 23 ++++++++++-- src/include/tcop/utility.h | 6 +++- 19 files changed, 56 insertions(+), 91 deletions(-) diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index 09433c8c96c75..07fe0e7cdad2c 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -320,6 +320,7 @@ static void pgss_ExecutorRun(QueryDesc *queryDesc, static void pgss_ExecutorFinish(QueryDesc *queryDesc); static void pgss_ExecutorEnd(QueryDesc *queryDesc); static void pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, + bool readOnlyTree, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, QueryCompletion *qc); @@ -1069,6 +1070,7 @@ pgss_ExecutorEnd(QueryDesc *queryDesc) */ static void pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, + bool readOnlyTree, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, QueryCompletion *qc) @@ -1126,11 +1128,11 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, PG_TRY(); { if (prev_ProcessUtility) - prev_ProcessUtility(pstmt, queryString, + prev_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); else - standard_ProcessUtility(pstmt, queryString, + standard_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); } @@ -1176,11 +1178,11 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, else { if (prev_ProcessUtility) - prev_ProcessUtility(pstmt, queryString, + prev_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); else - standard_ProcessUtility(pstmt, queryString, + standard_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); } diff --git a/contrib/sepgsql/hooks.c b/contrib/sepgsql/hooks.c index 34de6158d6047..19a3ffb7ffae7 100644 --- a/contrib/sepgsql/hooks.c +++ b/contrib/sepgsql/hooks.c @@ -313,6 +313,7 @@ sepgsql_exec_check_perms(List *rangeTabls, bool abort) static void sepgsql_utility_command(PlannedStmt *pstmt, const char *queryString, + bool readOnlyTree, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, @@ -378,11 +379,11 @@ sepgsql_utility_command(PlannedStmt *pstmt, } if (next_ProcessUtility_hook) - (*next_ProcessUtility_hook) (pstmt, queryString, + (*next_ProcessUtility_hook) (pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); else - standard_ProcessUtility(pstmt, queryString, + standard_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); } diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c index 89a4f8f810e5a..b6eacd5baa893 100644 --- a/src/backend/commands/copyto.c +++ b/src/backend/commands/copyto.c @@ -438,14 +438,8 @@ BeginCopyTo(ParseState *pstate, /* * Run parse analysis and rewrite. Note this also acquires sufficient * locks on the source table(s). - * - * Because the parser and planner tend to scribble on their input, we - * make a preliminary copy of the source querytree. This prevents - * problems in the case that the COPY is in a portal or plpgsql - * function and is executed repeatedly. (See also the same hack in - * DECLARE CURSOR and PREPARE.) XXX FIXME someday. */ - rewritten = pg_analyze_and_rewrite(copyObject(raw_query), + rewritten = pg_analyze_and_rewrite(raw_query, pstate->p_sourcetext, NULL, 0, NULL); diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c index dce882012e6ff..09828517153b3 100644 --- a/src/backend/commands/createas.c +++ b/src/backend/commands/createas.c @@ -299,14 +299,8 @@ ExecCreateTableAs(ParseState *pstate, CreateTableAsStmt *stmt, * rewriter. We do not do AcquireRewriteLocks: we assume the query * either came straight from the parser, or suitable locks were * acquired by plancache.c. - * - * Because the rewriter and planner tend to scribble on the input, we - * make a preliminary copy of the source querytree. This prevents - * problems in the case that CTAS is in a portal or plpgsql function - * and is executed repeatedly. (See also the same hack in EXPLAIN and - * PREPARE.) */ - rewritten = QueryRewrite(copyObject(query)); + rewritten = QueryRewrite(query); /* SELECT should never rewrite to more or less than one SELECT query */ if (list_length(rewritten) != 1) diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 9a60865d19111..e81b990092594 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -256,14 +256,8 @@ ExplainQuery(ParseState *pstate, ExplainStmt *stmt, * rewriter. We do not do AcquireRewriteLocks: we assume the query either * came straight from the parser, or suitable locks were acquired by * plancache.c. - * - * Because the rewriter and planner tend to scribble on the input, we make - * a preliminary copy of the source querytree. This prevents problems in - * the case that the EXPLAIN is in a portal or plpgsql function and is - * executed repeatedly. (See also the same hack in DECLARE CURSOR and - * PREPARE.) XXX FIXME someday. */ - rewritten = QueryRewrite(castNode(Query, copyObject(stmt->query))); + rewritten = QueryRewrite(castNode(Query, stmt->query)); /* emit opening boilerplate */ ExplainBeginOutput(es); @@ -427,7 +421,8 @@ ExplainOneQuery(Query *query, int cursorOptions, * "into" is NULL unless we are explaining the contents of a CreateTableAsStmt. * * This is exported because it's called back from prepare.c in the - * EXPLAIN EXECUTE case. + * EXPLAIN EXECUTE case. In that case, we'll be dealing with a statement + * that's in the plan cache, so we have to ensure we don't modify it. */ void ExplainOneUtility(Node *utilityStmt, IntoClause *into, ExplainState *es, @@ -441,8 +436,7 @@ ExplainOneUtility(Node *utilityStmt, IntoClause *into, ExplainState *es, { /* * We have to rewrite the contained SELECT and then pass it back to - * ExplainOneQuery. It's probably not really necessary to copy the - * contained parsetree another time, but let's be safe. + * ExplainOneQuery. Copy to be safe in the EXPLAIN EXECUTE case. */ CreateTableAsStmt *ctas = (CreateTableAsStmt *) utilityStmt; List *rewritten; diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index 008505368c404..41857feda9f5c 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -786,6 +786,7 @@ execute_sql_string(const char *sql) ProcessUtility(stmt, sql, + false, PROCESS_UTILITY_QUERY, NULL, NULL, diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c index eb7103fd3b11f..bc36311d3834f 100644 --- a/src/backend/commands/foreigncmds.c +++ b/src/backend/commands/foreigncmds.c @@ -1570,8 +1570,7 @@ ImportForeignSchema(ImportForeignSchemaStmt *stmt) pstmt->stmt_len = rs->stmt_len; /* Execute statement */ - ProcessUtility(pstmt, - cmd, + ProcessUtility(pstmt, cmd, false, PROCESS_UTILITY_SUBCOMMAND, NULL, NULL, None_Receiver, NULL); diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c index 5cacc088cd877..5d469309ce1d0 100644 --- a/src/backend/commands/policy.c +++ b/src/backend/commands/policy.c @@ -747,12 +747,12 @@ CreatePolicy(CreatePolicyStmt *stmt) addNSItemToQuery(with_check_pstate, nsitem, false, true, true); qual = transformWhereClause(qual_pstate, - copyObject(stmt->qual), + stmt->qual, EXPR_KIND_POLICY, "POLICY"); with_check_qual = transformWhereClause(with_check_pstate, - copyObject(stmt->with_check), + stmt->with_check, EXPR_KIND_POLICY, "POLICY"); @@ -922,7 +922,7 @@ AlterPolicy(AlterPolicyStmt *stmt) addNSItemToQuery(qual_pstate, nsitem, false, true, true); - qual = transformWhereClause(qual_pstate, copyObject(stmt->qual), + qual = transformWhereClause(qual_pstate, stmt->qual, EXPR_KIND_POLICY, "POLICY"); @@ -946,7 +946,7 @@ AlterPolicy(AlterPolicyStmt *stmt) addNSItemToQuery(with_check_pstate, nsitem, false, true, true); with_check_qual = transformWhereClause(with_check_pstate, - copyObject(stmt->with_check), + stmt->with_check, EXPR_KIND_POLICY, "POLICY"); diff --git a/src/backend/commands/portalcmds.c b/src/backend/commands/portalcmds.c index d34cc39fdea17..3ea30bcbc9985 100644 --- a/src/backend/commands/portalcmds.c +++ b/src/backend/commands/portalcmds.c @@ -76,14 +76,8 @@ PerformCursorOpen(ParseState *pstate, DeclareCursorStmt *cstmt, ParamListInfo pa * rewriter. We do not do AcquireRewriteLocks: we assume the query either * came straight from the parser, or suitable locks were acquired by * plancache.c. - * - * Because the rewriter and planner tend to scribble on the input, we make - * a preliminary copy of the source querytree. This prevents problems in - * the case that the DECLARE CURSOR is in a portal or plpgsql function and - * is executed repeatedly. (See also the same hack in EXPLAIN and - * PREPARE.) XXX FIXME someday. */ - rewritten = QueryRewrite((Query *) copyObject(query)); + rewritten = QueryRewrite(query); /* SELECT should never rewrite to more or less than one query */ if (list_length(rewritten) != 1) diff --git a/src/backend/commands/prepare.c b/src/backend/commands/prepare.c index 65d8ac65b1843..5e03c7c5aaacf 100644 --- a/src/backend/commands/prepare.c +++ b/src/backend/commands/prepare.c @@ -78,12 +78,9 @@ PrepareQuery(ParseState *pstate, PrepareStmt *stmt, /* * Need to wrap the contained statement in a RawStmt node to pass it to * parse analysis. - * - * Because parse analysis scribbles on the raw querytree, we must make a - * copy to ensure we don't modify the passed-in tree. FIXME someday. */ rawstmt = makeNode(RawStmt); - rawstmt->stmt = (Node *) copyObject(stmt->query); + rawstmt->stmt = stmt->query; rawstmt->stmt_location = stmt_location; rawstmt->stmt_len = stmt_len; diff --git a/src/backend/commands/schemacmds.c b/src/backend/commands/schemacmds.c index a60eb161e4aae..6c6ab9ee349f0 100644 --- a/src/backend/commands/schemacmds.c +++ b/src/backend/commands/schemacmds.c @@ -191,6 +191,7 @@ CreateSchemaCommand(CreateSchemaStmt *stmt, const char *queryString, /* do this step */ ProcessUtility(wrapper, queryString, + false, PROCESS_UTILITY_SUBCOMMAND, NULL, NULL, diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 028e8ac46b335..4e23c7fce5f49 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -4408,8 +4408,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, * Copy the original subcommand for each table. This avoids conflicts * when different child tables need to make different parse * transformations (for example, the same column may have different column - * numbers in different children). It also ensures that we don't corrupt - * the original parse tree, in case it is saved in plancache. + * numbers in different children). */ cmd = copyObject(cmd); diff --git a/src/backend/commands/view.c b/src/backend/commands/view.c index f2642dba6c982..4df05a0b33d37 100644 --- a/src/backend/commands/view.c +++ b/src/backend/commands/view.c @@ -417,12 +417,9 @@ DefineView(ViewStmt *stmt, const char *queryString, /* * Run parse analysis to convert the raw parse tree to a Query. Note this * also acquires sufficient locks on the source table(s). - * - * Since parse analysis scribbles on its input, copy the raw parse tree; - * this ensures we don't corrupt a prepared statement, for example. */ rawstmt = makeNode(RawStmt); - rawstmt->stmt = (Node *) copyObject(stmt->query); + rawstmt->stmt = stmt->query; rawstmt->stmt_location = stmt_location; rawstmt->stmt_len = stmt_len; diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index e2ea51aafe520..296e54e60a445 100644 --- a/src/backend/executor/functions.c +++ b/src/backend/executor/functions.c @@ -886,6 +886,7 @@ postquel_getnext(execution_state *es, SQLFunctionCachePtr fcache) { ProcessUtility(es->qd->plannedstmt, fcache->src, + false, PROCESS_UTILITY_QUERY, es->qd->params, es->qd->queryEnv, diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c index b8bd05e894215..bf619d3a65a5b 100644 --- a/src/backend/executor/spi.c +++ b/src/backend/executor/spi.c @@ -2545,6 +2545,7 @@ _SPI_execute_plan(SPIPlanPtr plan, ParamListInfo paramLI, InitializeQueryCompletion(&qc); ProcessUtility(stmt, plansource->query_string, + true, /* protect plancache's node tree */ context, paramLI, _SPI_current->queryEnv, diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index c9708e38f4680..81d3e7990c6b7 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -11,10 +11,6 @@ * Hence these functions are now called at the start of execution of their * respective utility commands. * - * NOTE: in general we must avoid scribbling on the passed-in raw parse - * tree, since it might be in a plan cache. The simplest solution is - * a quick copyObject() call before manipulating the query tree. - * * * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California @@ -177,12 +173,6 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString) Oid existing_relid; ParseCallbackState pcbstate; - /* - * We must not scribble on the passed-in CreateStmt, so copy it. (This is - * overkill, but easy.) - */ - stmt = copyObject(stmt); - /* Set up pstate */ pstate = make_parsestate(NULL); pstate->p_sourcetext = queryString; @@ -2824,12 +2814,6 @@ transformIndexStmt(Oid relid, IndexStmt *stmt, const char *queryString) if (stmt->transformed) return stmt; - /* - * We must not scribble on the passed-in IndexStmt, so copy it. (This is - * overkill, but easy.) - */ - stmt = copyObject(stmt); - /* Set up pstate */ pstate = make_parsestate(NULL); pstate->p_sourcetext = queryString; @@ -2925,12 +2909,6 @@ transformStatsStmt(Oid relid, CreateStatsStmt *stmt, const char *queryString) if (stmt->transformed) return stmt; - /* - * We must not scribble on the passed-in CreateStatsStmt, so copy it. - * (This is overkill, but easy.) - */ - stmt = copyObject(stmt); - /* Set up pstate */ pstate = make_parsestate(NULL); pstate->p_sourcetext = queryString; @@ -2993,9 +2971,6 @@ transformStatsStmt(Oid relid, CreateStatsStmt *stmt, const char *queryString) * * actions and whereClause are output parameters that receive the * transformed results. - * - * Note that we must not scribble on the passed-in RuleStmt, so we do - * copyObject() on the actions and WHERE clause. */ void transformRuleStmt(RuleStmt *stmt, const char *queryString, @@ -3070,7 +3045,7 @@ transformRuleStmt(RuleStmt *stmt, const char *queryString, /* take care of the where clause */ *whereClause = transformWhereClause(pstate, - (Node *) copyObject(stmt->whereClause), + stmt->whereClause, EXPR_KIND_WHERE, "WHERE"); /* we have to fix its collations too */ @@ -3142,8 +3117,7 @@ transformRuleStmt(RuleStmt *stmt, const char *queryString, addNSItemToQuery(sub_pstate, newnsitem, false, true, false); /* Transform the rule action statement */ - top_subqry = transformStmt(sub_pstate, - (Node *) copyObject(action)); + top_subqry = transformStmt(sub_pstate, action); /* * We cannot support utility-statement actions (eg NOTIFY) with @@ -3325,12 +3299,6 @@ transformAlterTableStmt(Oid relid, AlterTableStmt *stmt, AlterTableCmd *newcmd; ParseNamespaceItem *nsitem; - /* - * We must not scribble on the passed-in AlterTableStmt, so copy it. (This - * is overkill, but easy.) - */ - stmt = copyObject(stmt); - /* Caller is responsible for locking the relation */ rel = relation_open(relid, NoLock); tupdesc = RelationGetDescr(rel); diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c index f7f08e6c05f8b..ed43920264a1e 100644 --- a/src/backend/tcop/pquery.c +++ b/src/backend/tcop/pquery.c @@ -1146,6 +1146,7 @@ PortalRunUtility(Portal portal, PlannedStmt *pstmt, ProcessUtility(pstmt, portal->sourceText, + (portal->cplan != NULL), /* protect tree if in plancache */ isTopLevel ? PROCESS_UTILITY_TOPLEVEL : PROCESS_UTILITY_QUERY, portal->portalParams, portal->queryEnv, diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 1a8fc16773322..7a2da9dab431f 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -476,6 +476,7 @@ CheckRestrictedOperation(const char *cmdname) * * pstmt: PlannedStmt wrapper for the utility statement * queryString: original source text of command + * readOnlyTree: if true, pstmt's node tree must not be modified * context: identifies source of statement (toplevel client command, * non-toplevel client command, subcommand of a larger utility command) * params: parameters to use during execution @@ -501,6 +502,7 @@ CheckRestrictedOperation(const char *cmdname) void ProcessUtility(PlannedStmt *pstmt, const char *queryString, + bool readOnlyTree, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, @@ -518,11 +520,11 @@ ProcessUtility(PlannedStmt *pstmt, * call standard_ProcessUtility(). */ if (ProcessUtility_hook) - (*ProcessUtility_hook) (pstmt, queryString, + (*ProcessUtility_hook) (pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); else - standard_ProcessUtility(pstmt, queryString, + standard_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); } @@ -541,13 +543,14 @@ ProcessUtility(PlannedStmt *pstmt, void standard_ProcessUtility(PlannedStmt *pstmt, const char *queryString, + bool readOnlyTree, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, QueryCompletion *qc) { - Node *parsetree = pstmt->utilityStmt; + Node *parsetree; bool isTopLevel = (context == PROCESS_UTILITY_TOPLEVEL); bool isAtomicContext = (!(context == PROCESS_UTILITY_TOPLEVEL || context == PROCESS_UTILITY_QUERY_NONATOMIC) || IsTransactionBlock()); ParseState *pstate; @@ -556,6 +559,18 @@ standard_ProcessUtility(PlannedStmt *pstmt, /* This can recurse, so check for excessive recursion */ check_stack_depth(); + /* + * If the given node tree is read-only, make a copy to ensure that parse + * transformations don't damage the original tree. This could be + * refactored to avoid making unnecessary copies in more cases, but it's + * not clear that it's worth a great deal of trouble over. Statements + * that are complex enough to be expensive to copy are exactly the ones + * we'd need to copy, so that only marginal savings seem possible. + */ + if (readOnlyTree) + pstmt = copyObject(pstmt); + parsetree = pstmt->utilityStmt; + /* Prohibit read/write commands in read-only states. */ readonly_flags = ClassifyUtilityCommandAsReadOnly(parsetree); if (readonly_flags != COMMAND_IS_STRICTLY_READ_ONLY && @@ -1211,6 +1226,7 @@ ProcessUtilitySlow(ParseState *pstate, ProcessUtility(wrapper, queryString, + false, PROCESS_UTILITY_SUBCOMMAND, params, NULL, @@ -1918,6 +1934,7 @@ ProcessUtilityForAlterTable(Node *stmt, AlterTableUtilityContext *context) ProcessUtility(wrapper, context->queryString, + false, PROCESS_UTILITY_SUBCOMMAND, context->params, context->queryEnv, diff --git a/src/include/tcop/utility.h b/src/include/tcop/utility.h index 841062b4b35bb..212e9b32806c7 100644 --- a/src/include/tcop/utility.h +++ b/src/include/tcop/utility.h @@ -69,17 +69,21 @@ typedef struct AlterTableUtilityContext /* Hook for plugins to get control in ProcessUtility() */ typedef void (*ProcessUtility_hook_type) (PlannedStmt *pstmt, - const char *queryString, ProcessUtilityContext context, + const char *queryString, + bool readOnlyTree, + ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, QueryCompletion *qc); extern PGDLLIMPORT ProcessUtility_hook_type ProcessUtility_hook; extern void ProcessUtility(PlannedStmt *pstmt, const char *queryString, + bool readOnlyTree, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, QueryCompletion *qc); extern void standard_ProcessUtility(PlannedStmt *pstmt, const char *queryString, + bool readOnlyTree, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, QueryCompletion *qc); From 84bee9610965331d5110971d8de390a5bbe2effc Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 18 Jun 2021 17:05:23 -0400 Subject: [PATCH 491/671] Improve version reporting in pgbench. Commit 547f04e73 caused pgbench to start printing its version number, which seems like a fine idea, but it needs a bit more work: * Print the server version number too, when different. * Print the PG_VERSION string, not some reconstructed approximation. This patch copies psql's well-tested code for the same purpose. Discussion: https://postgr.es/m/1226654.1624036821@sss.pgh.pa.us --- src/bin/pgbench/pgbench.c | 36 +++++++++++++++++++- src/bin/pgbench/t/001_pgbench_with_server.pl | 2 +- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index d7479925cb35a..e61055b6b7b70 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -63,6 +63,7 @@ #include "common/username.h" #include "fe_utils/cancel.h" #include "fe_utils/conditional.h" +#include "fe_utils/string_utils.h" #include "getopt_long.h" #include "libpq-fe.h" #include "pgbench.h" @@ -5493,6 +5494,37 @@ printSimpleStats(const char *prefix, SimpleStats *ss) } } +/* print version banner */ +static void +printVersion(PGconn *con) +{ + int server_ver = PQserverVersion(con); + int client_ver = PG_VERSION_NUM; + + if (server_ver != client_ver) + { + const char *server_version; + char sverbuf[32]; + + /* Try to get full text form, might include "devel" etc */ + server_version = PQparameterStatus(con, "server_version"); + /* Otherwise fall back on server_ver */ + if (!server_version) + { + formatPGVersionNumber(server_ver, true, + sverbuf, sizeof(sverbuf)); + server_version = sverbuf; + } + + printf(_("%s (%s, server %s)\n"), + "pgbench", PG_VERSION, server_version); + } + /* For version match, only print pgbench version */ + else + printf("%s (%s)\n", "pgbench", PG_VERSION); + fflush(stdout); +} + /* print out results */ static void printResults(StatsData *total, @@ -5506,7 +5538,6 @@ printResults(StatsData *total, double bench_duration = PG_TIME_GET_DOUBLE(total_duration); double tps = ntx / bench_duration; - printf("pgbench (PostgreSQL) %d.%d\n", PG_VERSION_NUM / 10000, PG_VERSION_NUM % 100); /* Report test parameters. */ printf("transaction type: %s\n", num_scripts == 1 ? sql_script[0].desc : "multiple scripts"); @@ -6334,6 +6365,9 @@ main(int argc, char **argv) if (con == NULL) exit(1); + /* report pgbench and server versions */ + printVersion(con); + pg_log_debug("pghost: %s pgport: %s nclients: %d %s: %d dbName: %s", PQhost(con), PQport(con), nclients, duration <= 0 ? "nxacts" : "duration", diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index 55b3c3f6fdd5a..923203ea51750 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -100,7 +100,7 @@ sub pgbench 'no such database'); pgbench( - '-S -t 1', 1, [qr{^$}], + '-S -t 1', 1, [], [qr{Perhaps you need to do initialization}], 'run without init'); From d21fca084356946664bfce19d66d2df2bb873cbd Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 18 Jun 2021 18:00:09 -0400 Subject: [PATCH 492/671] Fix misbehavior of DROP OWNED BY with duplicate polroles entries. Ordinarily, a pg_policy.polroles array wouldn't list the same role more than once; but CREATE POLICY does not prevent that. If we perform DROP OWNED BY on a role that is listed more than once, RemoveRoleFromObjectPolicy either suffered an assertion failure or encountered a tuple-updated-by-self error. Rewrite it to cope correctly with duplicate entries, and add a CommandCounterIncrement call to prevent the other problem. Per discussion, there's other cleanup that ought to happen here, but this seems like the minimum essential fix. Per bug #17062 from Alexander Lakhin. It's been broken all along, so back-patch to all supported branches. Discussion: https://postgr.es/m/17062-11f471ae3199ca23@postgresql.org --- src/backend/commands/policy.c | 50 ++++++++++++----------- src/test/regress/expected/rowsecurity.out | 9 ++++ src/test/regress/sql/rowsecurity.sql | 10 +++++ 3 files changed, 46 insertions(+), 23 deletions(-) diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c index 5d469309ce1d0..fc27fd013e51f 100644 --- a/src/backend/commands/policy.c +++ b/src/backend/commands/policy.c @@ -18,6 +18,7 @@ #include "access/relation.h" #include "access/sysattr.h" #include "access/table.h" +#include "access/xact.h" #include "catalog/catalog.h" #include "catalog/dependency.h" #include "catalog/indexing.h" @@ -425,10 +426,9 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id) Oid relid; Relation rel; ArrayType *policy_roles; - int num_roles; Datum roles_datum; bool attr_isnull; - bool noperm = true; + bool keep_policy = true; Assert(classid == PolicyRelationId); @@ -481,31 +481,20 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id) policy_roles = DatumGetArrayTypePCopy(roles_datum); - /* We should be removing exactly one entry from the roles array */ - num_roles = ARR_DIMS(policy_roles)[0] - 1; - - Assert(num_roles >= 0); - /* Must own relation. */ - if (pg_class_ownercheck(relid, GetUserId())) - noperm = false; /* user is allowed to modify this policy */ - else + if (!pg_class_ownercheck(relid, GetUserId())) ereport(WARNING, (errcode(ERRCODE_WARNING_PRIVILEGE_NOT_REVOKED), errmsg("role \"%s\" could not be removed from policy \"%s\" on \"%s\"", GetUserNameFromId(roleid, false), NameStr(((Form_pg_policy) GETSTRUCT(tuple))->polname), RelationGetRelationName(rel)))); - - /* - * If multiple roles exist on this policy, then remove the one we were - * asked to and leave the rest. - */ - if (!noperm && num_roles > 0) + else { int i, j; Oid *roles = (Oid *) ARR_DATA_PTR(policy_roles); + int num_roles = ARR_DIMS(policy_roles)[0]; Datum *role_oids; char *qual_value; Node *qual_expr; @@ -582,16 +571,22 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id) else with_check_qual = NULL; - /* Rebuild the roles array to then update the pg_policy tuple with */ + /* + * Rebuild the roles array, without any mentions of the target role. + * Ordinarily there'd be exactly one, but we must cope with duplicate + * mentions, since CREATE/ALTER POLICY historically have allowed that. + */ role_oids = (Datum *) palloc(num_roles * sizeof(Datum)); - for (i = 0, j = 0; i < ARR_DIMS(policy_roles)[0]; i++) - /* Copy over all of the roles which are not the one being removed */ + for (i = 0, j = 0; i < num_roles; i++) + { if (roles[i] != roleid) role_oids[j++] = ObjectIdGetDatum(roles[i]); + } + num_roles = j; - /* We should have only removed the one role */ - Assert(j == num_roles); - + /* If any roles remain, update the policy entry. */ + if (num_roles > 0) + { /* This is the array for the new tuple */ role_ids = construct_array(role_oids, num_roles, OIDOID, sizeof(Oid), true, TYPALIGN_INT); @@ -646,8 +641,17 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id) heap_freetuple(new_tuple); + /* Make updates visible */ + CommandCounterIncrement(); + /* Invalidate Relation Cache */ CacheInvalidateRelcache(rel); + } + else + { + /* No roles would remain, so drop the policy instead */ + keep_policy = false; + } } /* Clean up. */ @@ -657,7 +661,7 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id) table_close(pg_policy_rel, RowExclusiveLock); - return (noperm || num_roles > 0); + return keep_policy; } /* diff --git a/src/test/regress/expected/rowsecurity.out b/src/test/regress/expected/rowsecurity.out index 367ecace4723e..89397e41f017f 100644 --- a/src/test/regress/expected/rowsecurity.out +++ b/src/test/regress/expected/rowsecurity.out @@ -3886,6 +3886,15 @@ ERROR: policy "p1" for table "dob_t1" does not exist CREATE POLICY p1 ON dob_t1 TO regress_rls_dob_role1,regress_rls_dob_role2 USING (true); DROP OWNED BY regress_rls_dob_role1; DROP POLICY p1 ON dob_t1; -- should succeed +-- same cases with duplicate polroles entries +CREATE POLICY p1 ON dob_t1 TO regress_rls_dob_role1,regress_rls_dob_role1 USING (true); +DROP OWNED BY regress_rls_dob_role1; +DROP POLICY p1 ON dob_t1; -- should fail, already gone +ERROR: policy "p1" for table "dob_t1" does not exist +CREATE POLICY p1 ON dob_t1 TO regress_rls_dob_role1,regress_rls_dob_role1,regress_rls_dob_role2 USING (true); +DROP OWNED BY regress_rls_dob_role1; +DROP POLICY p1 ON dob_t1; -- should succeed +-- partitioned target CREATE POLICY p1 ON dob_t2 TO regress_rls_dob_role1,regress_rls_dob_role2 USING (true); DROP OWNED BY regress_rls_dob_role1; DROP POLICY p1 ON dob_t2; -- should succeed diff --git a/src/test/regress/sql/rowsecurity.sql b/src/test/regress/sql/rowsecurity.sql index 281ae74b9ca7e..44deb42bad5a1 100644 --- a/src/test/regress/sql/rowsecurity.sql +++ b/src/test/regress/sql/rowsecurity.sql @@ -1757,6 +1757,16 @@ CREATE POLICY p1 ON dob_t1 TO regress_rls_dob_role1,regress_rls_dob_role2 USING DROP OWNED BY regress_rls_dob_role1; DROP POLICY p1 ON dob_t1; -- should succeed +-- same cases with duplicate polroles entries +CREATE POLICY p1 ON dob_t1 TO regress_rls_dob_role1,regress_rls_dob_role1 USING (true); +DROP OWNED BY regress_rls_dob_role1; +DROP POLICY p1 ON dob_t1; -- should fail, already gone + +CREATE POLICY p1 ON dob_t1 TO regress_rls_dob_role1,regress_rls_dob_role1,regress_rls_dob_role2 USING (true); +DROP OWNED BY regress_rls_dob_role1; +DROP POLICY p1 ON dob_t1; -- should succeed + +-- partitioned target CREATE POLICY p1 ON dob_t2 TO regress_rls_dob_role1,regress_rls_dob_role2 USING (true); DROP OWNED BY regress_rls_dob_role1; DROP POLICY p1 ON dob_t2; -- should succeed From 09126984a2631db8dd6299f23954e0dede69735f Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 18 Jun 2021 18:42:00 -0400 Subject: [PATCH 493/671] Add test case for obsoleting slot with active walsender MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The code to signal a running walsender when its reserved WAL size grows too large is completely uncovered before this commit; this adds coverage for that case. This test involves sending SIGSTOP to walsender and walreceiver and running a checkpoint while advancing WAL, then sending SIGCONT. There's no precedent for this coding in Perl tests, and my reading of relevant manpages says it's likely to fail on Windows. Because of this, this test is always skipped on that platform. Author: Álvaro Herrera Discussion: https://postgr.es/m/202106102202.mjw4huiix7lo@alvherre.pgsql --- src/test/recovery/t/019_replslot_limit.pl | 85 ++++++++++++++++++++++- 1 file changed, 82 insertions(+), 3 deletions(-) diff --git a/src/test/recovery/t/019_replslot_limit.pl b/src/test/recovery/t/019_replslot_limit.pl index 7094aa0704b20..5e25661e10565 100644 --- a/src/test/recovery/t/019_replslot_limit.pl +++ b/src/test/recovery/t/019_replslot_limit.pl @@ -11,7 +11,7 @@ use PostgresNode; use File::Path qw(rmtree); -use Test::More tests => 14; +use Test::More tests => $TestLib::windows_os ? 14 : 18; use Time::HiRes qw(usleep); $ENV{PGDATABASE} = 'postgres'; @@ -211,8 +211,8 @@ } ok($failed, 'check that replication has been broken'); -$node_primary->stop('immediate'); -$node_standby->stop('immediate'); +$node_primary->stop; +$node_standby->stop; my $node_primary2 = get_new_node('primary2'); $node_primary2->init(allows_streaming => 1); @@ -253,6 +253,85 @@ timeout => '60')); is($result[1], 'finished', 'check if checkpoint command is not blocked'); +$node_primary2->stop; +$node_standby->stop; + +# The next test depends on Perl's `kill`, which apparently is not +# portable to Windows. (It would be nice to use Test::More's `subtest`, +# but that's not in the ancient version we require.) +if ($TestLib::windows_os) +{ + done_testing(); + exit; +} + +# Get a slot terminated while the walsender is active +# We do this by sending SIGSTOP to the walsender. Skip this on Windows. +my $node_primary3 = get_new_node('primary3'); +$node_primary3->init(allows_streaming => 1, extra => ['--wal-segsize=1']); +$node_primary3->append_conf( + 'postgresql.conf', qq( + min_wal_size = 2MB + max_wal_size = 2MB + log_checkpoints = yes + max_slot_wal_keep_size = 1MB + )); +$node_primary3->start; +$node_primary3->safe_psql('postgres', + "SELECT pg_create_physical_replication_slot('rep3')"); +# Take backup +$backup_name = 'my_backup'; +$node_primary3->backup($backup_name); +# Create standby +my $node_standby3 = get_new_node('standby_3'); +$node_standby3->init_from_backup($node_primary3, $backup_name, + has_streaming => 1); +$node_standby3->append_conf('postgresql.conf', "primary_slot_name = 'rep3'"); +$node_standby3->start; +$node_primary3->wait_for_catchup($node_standby3->name, 'replay'); +my $senderpid = $node_primary3->safe_psql('postgres', + "SELECT pid FROM pg_stat_activity WHERE backend_type = 'walsender'"); +like($senderpid, qr/^[0-9]+$/, "have walsender pid $senderpid"); +my $receiverpid = $node_standby3->safe_psql('postgres', + "SELECT pid FROM pg_stat_activity WHERE backend_type = 'walreceiver'"); +like($receiverpid, qr/^[0-9]+$/, "have walreceiver pid $receiverpid"); + +# freeze walsender and walreceiver. Slot will still be active, but walreceiver +# won't get anything anymore. +kill 'STOP', $senderpid, $receiverpid; +$logstart = get_log_size($node_primary3); +advance_wal($node_primary3, 4); +ok(find_in_log($node_primary3, "to release replication slot", $logstart), + "walreceiver termination logged"); + +# Now let the walsender continue; slot should be killed now. +# (Must not let walreceiver run yet; otherwise the standby could start another +# one before the slot can be killed) +kill 'CONT', $senderpid; +$node_primary3->poll_query_until('postgres', + "SELECT wal_status FROM pg_replication_slots WHERE slot_name = 'rep3'", + "lost") + or die "timed out waiting for slot to be lost"; + +my $max_attempts = 180; +while ($max_attempts-- > 0) +{ + if (find_in_log( + $node_primary3, + 'invalidating slot "rep3" because its restart_lsn', $logstart)) + { + ok(1, "slot invalidation logged"); + last; + } + sleep 1; +} + +# Now let the walreceiver continue, so that the node can be stopped cleanly +kill 'CONT', $receiverpid; + +$node_primary3->stop; +$node_standby3->stop; + ##################################### # Advance WAL of $node by $n segments sub advance_wal From 3499df0dee8c4ea51d264a674df5b5e31991319a Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Fri, 18 Jun 2021 20:04:07 -0700 Subject: [PATCH 494/671] Support disabling index bypassing by VACUUM. Generalize the INDEX_CLEANUP VACUUM parameter (and the corresponding reloption): make it into a ternary style boolean parameter. It now exposes a third option, "auto". The "auto" option (which is now the default) enables the "bypass index vacuuming" optimization added by commit 1e55e7d1. "VACUUM (INDEX_CLEANUP TRUE)" is redefined to once again make VACUUM simply do any required index vacuuming, regardless of how few dead tuples are encountered during the first scan of the target heap relation (unless there are exactly zero). This gives users a way of opting out of the "bypass index vacuuming" optimization, if for whatever reason that proves necessary. It is also expected to be used by PostgreSQL developers as a testing option from time to time. "VACUUM (INDEX_CLEANUP FALSE)" does the same thing as it always has: it forcibly disables both index vacuuming and index cleanup. It's not expected to be used much in PostgreSQL 14. The failsafe mechanism added by commit 1e55e7d1 addresses the same problem in a simpler way. INDEX_CLEANUP can now be thought of as a testing and compatibility option. Author: Peter Geoghegan Reviewed-By: Masahiko Sawada Reviewed-By: Justin Pryzby Discussion: https://postgr.es/m/CAH2-WznrBoCST4_Gxh_G9hA8NzGUbeBGnOUC8FcXcrhqsv6OHQ@mail.gmail.com --- doc/src/sgml/ref/create_table.sgml | 23 ++++-- doc/src/sgml/ref/vacuum.sgml | 57 ++++++++++---- doc/src/sgml/ref/vacuumdb.sgml | 15 ++++ src/backend/access/common/reloptions.c | 35 ++++++--- src/backend/access/heap/vacuumlazy.c | 105 +++++++++++++++---------- src/backend/commands/vacuum.c | 75 +++++++++++++----- src/backend/postmaster/autovacuum.c | 10 ++- src/bin/psql/tab-complete.c | 4 +- src/bin/scripts/vacuumdb.c | 65 ++++++++++++--- src/include/commands/vacuum.h | 25 +++--- src/include/utils/rel.h | 10 ++- src/test/regress/expected/vacuum.out | 8 +- src/test/regress/sql/vacuum.sql | 8 +- 13 files changed, 313 insertions(+), 127 deletions(-) diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index c6d0a35e5066a..ab33b7fb0ffc7 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -1473,20 +1473,27 @@ WITH ( MODULUS numeric_literal, REM - vacuum_index_cleanup, toast.vacuum_index_cleanup (boolean) + vacuum_index_cleanup, toast.vacuum_index_cleanup (enum) vacuum_index_cleanup storage parameter - Enables or disables index cleanup when VACUUM is - run on this table. The default value is true. - Disabling index cleanup can speed up VACUUM very - significantly, but may also lead to severely bloated indexes if table - modifications are frequent. The INDEX_CLEANUP - parameter of VACUUM, if specified, overrides - the value of this option. + Forces or disables index cleanup when VACUUM + is run on this table. The default value is + AUTO. With OFF, index + cleanup is disabled, with ON it is enabled, + and with AUTO a decision is made dynamically, + each time VACUUM runs. The dynamic behavior + allows VACUUM to avoid needlessly scanning + indexes to remove very few dead tuples. Forcibly disabling all + index cleanup can speed up VACUUM very + significantly, but may also lead to severely bloated indexes if + table modifications are frequent. The + INDEX_CLEANUP parameter of VACUUM, if + specified, overrides the value of this option. diff --git a/doc/src/sgml/ref/vacuum.sgml b/doc/src/sgml/ref/vacuum.sgml index 5f67c9d18b7b4..3df32b58ee696 100644 --- a/doc/src/sgml/ref/vacuum.sgml +++ b/doc/src/sgml/ref/vacuum.sgml @@ -32,7 +32,7 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ boolean ] DISABLE_PAGE_SKIPPING [ boolean ] SKIP_LOCKED [ boolean ] - INDEX_CLEANUP [ boolean ] + INDEX_CLEANUP { AUTO | ON | OFF } PROCESS_TOAST [ boolean ] TRUNCATE [ boolean ] PARALLEL integer @@ -193,20 +193,45 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ ). However, if index - cleanup is not performed regularly, performance may suffer, because - as the table is modified, indexes will accumulate dead tuples - and the table itself will accumulate dead line pointers that cannot be - removed until index cleanup is completed. This option has no effect - for tables that do not have an index and is ignored if the - FULL option is used. + Normally, VACUUM will skip index vacuuming + when there are very few dead tuples in the table. The cost of + processing all of the table's indexes is expected to greatly + exceed the benefit of removing dead index tuples when this + happens. This option can be used to force + VACUUM to process indexes when there are more + than zero dead tuples. The default is AUTO, + which allows VACUUM to skip index vacuuming + when appropriate. If INDEX_CLEANUP is set to + ON, VACUUM will + conservatively remove all dead tuples from indexes. This may be + useful for backwards compatibility with earlier releases of + PostgreSQL where this was the + standard behavior. + + + INDEX_CLEANUP can also be set to + OFF to force VACUUM to + always skip index vacuuming, even when + there are many dead tuples in the table. This may be useful + when it is necessary to make VACUUM run as + quickly as possible to avoid imminent transaction ID wraparound + (see ). However, the + wraparound failsafe mechanism controlled by will generally trigger + automatically to avoid transaction ID wraparound failure, and + should be preferred. If index cleanup is not performed + regularly, performance may suffer, because as the table is + modified indexes will accumulate dead tuples and the table + itself will accumulate dead line pointers that cannot be removed + until index cleanup is completed. + + + This option has no effect for tables that have no index and is + ignored if the FULL option is used. It also + has no effect on the transaction ID wraparound failsafe + mechanism. When triggered it will skip index vacuuming, even + when INDEX_CLEANUP is set to + ON. @@ -217,7 +242,7 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ index_cleanup != VACOPT_TERNARY_DEFAULT); - Assert(params->truncate != VACOPT_TERNARY_DEFAULT); - /* measure elapsed time iff autovacuum logging requires it */ if (IsAutoVacuumWorkerProcess() && params->log_min_duration >= 0) { @@ -557,14 +557,41 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, vacrel->rel = rel; vac_open_indexes(vacrel->rel, RowExclusiveLock, &vacrel->nindexes, &vacrel->indrels); + vacrel->failsafe_active = false; + vacrel->consider_bypass_optimization = true; + + /* + * The index_cleanup param either disables index vacuuming and cleanup or + * forces it to go ahead when we would otherwise apply the index bypass + * optimization. The default is 'auto', which leaves the final decision + * up to lazy_vacuum(). + * + * The truncate param allows user to avoid attempting relation truncation, + * though it can't force truncation to happen. + */ + Assert(params->index_cleanup != VACOPTVALUE_UNSPECIFIED); + Assert(params->truncate != VACOPTVALUE_UNSPECIFIED && + params->truncate != VACOPTVALUE_AUTO); vacrel->do_index_vacuuming = true; vacrel->do_index_cleanup = true; - vacrel->do_failsafe = false; - if (params->index_cleanup == VACOPT_TERNARY_DISABLED) + vacrel->do_rel_truncate = (params->truncate != VACOPTVALUE_DISABLED); + if (params->index_cleanup == VACOPTVALUE_DISABLED) { + /* Force disable index vacuuming up-front */ vacrel->do_index_vacuuming = false; vacrel->do_index_cleanup = false; } + else if (params->index_cleanup == VACOPTVALUE_ENABLED) + { + /* Force index vacuuming. Note that failsafe can still bypass. */ + vacrel->consider_bypass_optimization = false; + } + else + { + /* Default/auto, make all decisions dynamically */ + Assert(params->index_cleanup == VACOPTVALUE_AUTO); + } + vacrel->bstrategy = bstrategy; vacrel->old_rel_pages = rel->rd_rel->relpages; vacrel->old_live_tuples = rel->rd_rel->reltuples; @@ -632,7 +659,7 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, /* * Optionally truncate the relation. */ - if (should_attempt_truncation(vacrel, params)) + if (should_attempt_truncation(vacrel)) { /* * Update error traceback information. This is the last phase during @@ -791,7 +818,7 @@ heap_vacuum_rel(Relation rel, VacuumParams *params, { msgfmt = _(" %u pages from table (%.2f%% of total) have %lld dead item identifiers\n"); - if (!vacrel->do_failsafe) + if (!vacrel->failsafe_active) appendStringInfoString(&buf, _("index scan bypassed:")); else appendStringInfoString(&buf, _("index scan bypassed by failsafe:")); @@ -893,8 +920,7 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) next_fsm_block_to_vacuum; PGRUsage ru0; Buffer vmbuffer = InvalidBuffer; - bool skipping_blocks, - have_vacuumed_indexes = false; + bool skipping_blocks; StringInfoData buf; const int initprog_index[] = { PROGRESS_VACUUM_PHASE, @@ -1048,7 +1074,7 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) * scanning of last page. */ #define FORCE_CHECK_PAGE() \ - (blkno == nblocks - 1 && should_attempt_truncation(vacrel, params)) + (blkno == nblocks - 1 && should_attempt_truncation(vacrel)) pgstat_progress_update_param(PROGRESS_VACUUM_HEAP_BLKS_SCANNED, blkno); @@ -1166,8 +1192,8 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) } /* Remove the collected garbage tuples from table and indexes */ - lazy_vacuum(vacrel, false); - have_vacuumed_indexes = true; + vacrel->consider_bypass_optimization = false; + lazy_vacuum(vacrel); /* * Vacuum the Free Space Map to make newly-freed space visible on @@ -1579,7 +1605,7 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) /* If any tuples need to be deleted, perform final vacuum cycle */ if (dead_tuples->num_tuples > 0) - lazy_vacuum(vacrel, !have_vacuumed_indexes); + lazy_vacuum(vacrel); /* * Vacuum the remainder of the Free Space Map. We must do this whether or @@ -2064,9 +2090,9 @@ lazy_scan_prune(LVRelState *vacrel, * wraparound. */ static void -lazy_vacuum(LVRelState *vacrel, bool onecall) +lazy_vacuum(LVRelState *vacrel) { - bool do_bypass_optimization; + bool bypass; /* Should not end up here with no indexes */ Assert(vacrel->nindexes > 0); @@ -2099,8 +2125,8 @@ lazy_vacuum(LVRelState *vacrel, bool onecall) * It's far easier to ensure that 99%+ of all UPDATEs against a table use * HOT through careful tuning. */ - do_bypass_optimization = false; - if (onecall && vacrel->rel_pages > 0) + bypass = false; + if (vacrel->consider_bypass_optimization && vacrel->rel_pages > 0) { BlockNumber threshold; @@ -2132,12 +2158,11 @@ lazy_vacuum(LVRelState *vacrel, bool onecall) * expanded to cover more cases then this may need to be reconsidered. */ threshold = (double) vacrel->rel_pages * BYPASS_THRESHOLD_PAGES; - do_bypass_optimization = - (vacrel->lpdead_item_pages < threshold && - vacrel->lpdead_items < MAXDEADTUPLES(32L * 1024L * 1024L)); + bypass = (vacrel->lpdead_item_pages < threshold && + vacrel->lpdead_items < MAXDEADTUPLES(32L * 1024L * 1024L)); } - if (do_bypass_optimization) + if (bypass) { /* * There are almost zero TIDs. Behave as if there were precisely @@ -2177,7 +2202,7 @@ lazy_vacuum(LVRelState *vacrel, bool onecall) * vacuuming or heap vacuuming. This VACUUM operation won't end up * back here again. */ - Assert(vacrel->do_failsafe); + Assert(vacrel->failsafe_active); } /* @@ -2259,7 +2284,7 @@ lazy_vacuum_all_indexes(LVRelState *vacrel) */ Assert(vacrel->num_index_scans > 0 || vacrel->dead_tuples->num_tuples == vacrel->lpdead_items); - Assert(allindexes || vacrel->do_failsafe); + Assert(allindexes || vacrel->failsafe_active); /* * Increase and report the number of index scans. @@ -2580,7 +2605,7 @@ static bool lazy_check_wraparound_failsafe(LVRelState *vacrel) { /* Don't warn more than once per VACUUM */ - if (vacrel->do_failsafe) + if (vacrel->failsafe_active) return true; if (unlikely(vacuum_xid_failsafe_check(vacrel->relfrozenxid, @@ -2589,9 +2614,12 @@ lazy_check_wraparound_failsafe(LVRelState *vacrel) Assert(vacrel->do_index_vacuuming); Assert(vacrel->do_index_cleanup); + vacrel->failsafe_active = true; + + /* Disable index vacuuming, index cleanup, and heap rel truncation */ vacrel->do_index_vacuuming = false; vacrel->do_index_cleanup = false; - vacrel->do_failsafe = true; + vacrel->do_rel_truncate = false; ereport(WARNING, (errmsg("bypassing nonessential maintenance of table \"%s.%s.%s\" as a failsafe after %d index scans", @@ -3136,14 +3164,11 @@ lazy_cleanup_one_index(Relation indrel, IndexBulkDeleteResult *istat, * careful to depend only on fields that lazy_scan_heap updates on-the-fly. */ static bool -should_attempt_truncation(LVRelState *vacrel, VacuumParams *params) +should_attempt_truncation(LVRelState *vacrel) { BlockNumber possibly_freeable; - if (params->truncate == VACOPT_TERNARY_DISABLED) - return false; - - if (vacrel->do_failsafe) + if (!vacrel->do_rel_truncate || vacrel->failsafe_active) return false; possibly_freeable = vacrel->rel_pages - vacrel->nonempty_pages; @@ -3207,7 +3232,6 @@ lazy_truncate_heap(LVRelState *vacrel) * We failed to establish the lock in the specified number of * retries. This means we give up truncating. */ - lock_waiter_detected = true; ereport(elevel, (errmsg("\"%s\": stopping truncate due to conflicting lock request", vacrel->relname))); @@ -3399,9 +3423,8 @@ count_nondeletable_pages(LVRelState *vacrel, bool *lock_waiter_detected) /* * Note: any non-unused item should be taken as a reason to keep - * this page. We formerly thought that DEAD tuples could be - * thrown away, but that's not so, because we'd not have cleaned - * out their index entries. + * this page. Even an LP_DEAD item makes truncation unsafe, since + * we must not have cleaned out its index entries. */ if (ItemIdIsUsed(itemid)) { diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index 7421d7cfbd363..5c4bc15b441b3 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -88,7 +88,7 @@ static void vac_truncate_clog(TransactionId frozenXID, MultiXactId lastSaneMinMulti); static bool vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params); static double compute_parallel_delay(void); -static VacOptTernaryValue get_vacopt_ternary_value(DefElem *def); +static VacOptValue get_vacoptval_from_boolean(DefElem *def); /* * Primary entry point for manual VACUUM and ANALYZE commands @@ -109,9 +109,9 @@ ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel) bool process_toast = true; ListCell *lc; - /* Set default value */ - params.index_cleanup = VACOPT_TERNARY_DEFAULT; - params.truncate = VACOPT_TERNARY_DEFAULT; + /* index_cleanup and truncate values unspecified for now */ + params.index_cleanup = VACOPTVALUE_UNSPECIFIED; + params.truncate = VACOPTVALUE_UNSPECIFIED; /* By default parallel vacuum is enabled */ params.nworkers = 0; @@ -142,11 +142,25 @@ ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel) else if (strcmp(opt->defname, "disable_page_skipping") == 0) disable_page_skipping = defGetBoolean(opt); else if (strcmp(opt->defname, "index_cleanup") == 0) - params.index_cleanup = get_vacopt_ternary_value(opt); + { + /* Interpret no string as the default, which is 'auto' */ + if (!opt->arg) + params.index_cleanup = VACOPTVALUE_AUTO; + else + { + char *sval = defGetString(opt); + + /* Try matching on 'auto' string, or fall back on boolean */ + if (pg_strcasecmp(sval, "auto") == 0) + params.index_cleanup = VACOPTVALUE_AUTO; + else + params.index_cleanup = get_vacoptval_from_boolean(opt); + } + } else if (strcmp(opt->defname, "process_toast") == 0) process_toast = defGetBoolean(opt); else if (strcmp(opt->defname, "truncate") == 0) - params.truncate = get_vacopt_ternary_value(opt); + params.truncate = get_vacoptval_from_boolean(opt); else if (strcmp(opt->defname, "parallel") == 0) { if (opt->arg == NULL) @@ -1938,24 +1952,43 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params) lockrelid = rel->rd_lockInfo.lockRelId; LockRelationIdForSession(&lockrelid, lmode); - /* Set index cleanup option based on reloptions if not yet */ - if (params->index_cleanup == VACOPT_TERNARY_DEFAULT) + /* + * Set index_cleanup option based on index_cleanup reloption if it wasn't + * specified in VACUUM command, or when running in an autovacuum worker + */ + if (params->index_cleanup == VACOPTVALUE_UNSPECIFIED) { - if (rel->rd_options == NULL || - ((StdRdOptions *) rel->rd_options)->vacuum_index_cleanup) - params->index_cleanup = VACOPT_TERNARY_ENABLED; + StdRdOptIndexCleanup vacuum_index_cleanup; + + if (rel->rd_options == NULL) + vacuum_index_cleanup = STDRD_OPTION_VACUUM_INDEX_CLEANUP_AUTO; + else + vacuum_index_cleanup = + ((StdRdOptions *) rel->rd_options)->vacuum_index_cleanup; + + if (vacuum_index_cleanup == STDRD_OPTION_VACUUM_INDEX_CLEANUP_AUTO) + params->index_cleanup = VACOPTVALUE_AUTO; + else if (vacuum_index_cleanup == STDRD_OPTION_VACUUM_INDEX_CLEANUP_ON) + params->index_cleanup = VACOPTVALUE_ENABLED; else - params->index_cleanup = VACOPT_TERNARY_DISABLED; + { + Assert(vacuum_index_cleanup == + STDRD_OPTION_VACUUM_INDEX_CLEANUP_OFF); + params->index_cleanup = VACOPTVALUE_DISABLED; + } } - /* Set truncate option based on reloptions if not yet */ - if (params->truncate == VACOPT_TERNARY_DEFAULT) + /* + * Set truncate option based on truncate reloption if it wasn't specified + * in VACUUM command, or when running in an autovacuum worker + */ + if (params->truncate == VACOPTVALUE_UNSPECIFIED) { if (rel->rd_options == NULL || ((StdRdOptions *) rel->rd_options)->vacuum_truncate) - params->truncate = VACOPT_TERNARY_ENABLED; + params->truncate = VACOPTVALUE_ENABLED; else - params->truncate = VACOPT_TERNARY_DISABLED; + params->truncate = VACOPTVALUE_DISABLED; } /* @@ -2217,11 +2250,11 @@ compute_parallel_delay(void) /* * A wrapper function of defGetBoolean(). * - * This function returns VACOPT_TERNARY_ENABLED and VACOPT_TERNARY_DISABLED - * instead of true and false. + * This function returns VACOPTVALUE_ENABLED and VACOPTVALUE_DISABLED instead + * of true and false. */ -static VacOptTernaryValue -get_vacopt_ternary_value(DefElem *def) +static VacOptValue +get_vacoptval_from_boolean(DefElem *def) { - return defGetBoolean(def) ? VACOPT_TERNARY_ENABLED : VACOPT_TERNARY_DISABLED; + return defGetBoolean(def) ? VACOPTVALUE_ENABLED : VACOPTVALUE_DISABLED; } diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index d516df0ac5c70..912ef9cb54cf2 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -2976,8 +2976,14 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map, tab->at_params.options = (dovacuum ? VACOPT_VACUUM : 0) | (doanalyze ? VACOPT_ANALYZE : 0) | (!wraparound ? VACOPT_SKIP_LOCKED : 0); - tab->at_params.index_cleanup = VACOPT_TERNARY_DEFAULT; - tab->at_params.truncate = VACOPT_TERNARY_DEFAULT; + + /* + * index_cleanup and truncate are unspecified at first in autovacuum. + * They will be filled in with usable values using their reloptions + * (or reloption defaults) later. + */ + tab->at_params.index_cleanup = VACOPTVALUE_UNSPECIFIED; + tab->at_params.truncate = VACOPTVALUE_UNSPECIFIED; /* As of now, we don't support parallel vacuum for autovacuum */ tab->at_params.nworkers = -1; tab->at_params.freeze_min_age = freeze_min_age; diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index bd8e9ea2f8aaa..38af5682f2db4 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -3917,8 +3917,10 @@ psql_completion(const char *text, int start, int end) "DISABLE_PAGE_SKIPPING", "SKIP_LOCKED", "INDEX_CLEANUP", "PROCESS_TOAST", "TRUNCATE", "PARALLEL"); - else if (TailMatches("FULL|FREEZE|ANALYZE|VERBOSE|DISABLE_PAGE_SKIPPING|SKIP_LOCKED|INDEX_CLEANUP|PROCESS_TOAST|TRUNCATE")) + else if (TailMatches("FULL|FREEZE|ANALYZE|VERBOSE|DISABLE_PAGE_SKIPPING|SKIP_LOCKED|PROCESS_TOAST|TRUNCATE")) COMPLETE_WITH("ON", "OFF"); + else if (TailMatches("INDEX_CLEANUP")) + COMPLETE_WITH("AUTO", "ON", "OFF"); } else if (HeadMatches("VACUUM") && TailMatches("(")) /* "VACUUM (" should be caught above, so assume we want columns */ diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c index 069a861aab79e..122e8932f1b55 100644 --- a/src/bin/scripts/vacuumdb.c +++ b/src/bin/scripts/vacuumdb.c @@ -39,7 +39,8 @@ typedef struct vacuumingOptions int min_mxid_age; int parallel_workers; /* >= 0 indicates user specified the * parallel degree, otherwise -1 */ - bool do_index_cleanup; + bool no_index_cleanup; + bool force_index_cleanup; bool do_truncate; bool process_toast; } vacuumingOptions; @@ -99,8 +100,9 @@ main(int argc, char *argv[]) {"min-xid-age", required_argument, NULL, 6}, {"min-mxid-age", required_argument, NULL, 7}, {"no-index-cleanup", no_argument, NULL, 8}, - {"no-truncate", no_argument, NULL, 9}, - {"no-process-toast", no_argument, NULL, 10}, + {"force-index-cleanup", no_argument, NULL, 9}, + {"no-truncate", no_argument, NULL, 10}, + {"no-process-toast", no_argument, NULL, 11}, {NULL, 0, NULL, 0} }; @@ -126,7 +128,8 @@ main(int argc, char *argv[]) /* initialize options */ memset(&vacopts, 0, sizeof(vacopts)); vacopts.parallel_workers = -1; - vacopts.do_index_cleanup = true; + vacopts.no_index_cleanup = false; + vacopts.force_index_cleanup = false; vacopts.do_truncate = true; vacopts.process_toast = true; @@ -233,12 +236,15 @@ main(int argc, char *argv[]) } break; case 8: - vacopts.do_index_cleanup = false; + vacopts.no_index_cleanup = true; break; case 9: - vacopts.do_truncate = false; + vacopts.force_index_cleanup = true; break; case 10: + vacopts.do_truncate = false; + break; + case 11: vacopts.process_toast = false; break; default: @@ -285,12 +291,18 @@ main(int argc, char *argv[]) "disable-page-skipping"); exit(1); } - if (!vacopts.do_index_cleanup) + if (vacopts.no_index_cleanup) { pg_log_error("cannot use the \"%s\" option when performing only analyze", "no-index-cleanup"); exit(1); } + if (vacopts.force_index_cleanup) + { + pg_log_error("cannot use the \"%s\" option when performing only analyze", + "force-index-cleanup"); + exit(1); + } if (!vacopts.do_truncate) { pg_log_error("cannot use the \"%s\" option when performing only analyze", @@ -323,6 +335,14 @@ main(int argc, char *argv[]) } } + /* Prohibit --no-index-cleanup and --force-index-cleanup together */ + if (vacopts.no_index_cleanup && vacopts.force_index_cleanup) + { + pg_log_error("cannot use the \"%s\" option with the \"%s\" option", + "no-index-cleanup", "force-index-cleanup"); + exit(1); + } + /* fill cparams except for dbname, which is set below */ cparams.pghost = host; cparams.pgport = port; @@ -453,7 +473,7 @@ vacuum_one_database(ConnParams *cparams, exit(1); } - if (!vacopts->do_index_cleanup && PQserverVersion(conn) < 120000) + if (vacopts->no_index_cleanup && PQserverVersion(conn) < 120000) { PQfinish(conn); pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s", @@ -461,6 +481,14 @@ vacuum_one_database(ConnParams *cparams, exit(1); } + if (vacopts->force_index_cleanup && PQserverVersion(conn) < 120000) + { + PQfinish(conn); + pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s", + "force-index-cleanup", "12"); + exit(1); + } + if (!vacopts->do_truncate && PQserverVersion(conn) < 120000) { PQfinish(conn); @@ -878,13 +906,29 @@ prepare_vacuum_command(PQExpBuffer sql, int serverVersion, appendPQExpBuffer(sql, "%sDISABLE_PAGE_SKIPPING", sep); sep = comma; } - if (!vacopts->do_index_cleanup) + if (vacopts->no_index_cleanup) { - /* INDEX_CLEANUP is supported since v12 */ + /* "INDEX_CLEANUP FALSE" has been supported since v12 */ Assert(serverVersion >= 120000); + Assert(!vacopts->force_index_cleanup); appendPQExpBuffer(sql, "%sINDEX_CLEANUP FALSE", sep); sep = comma; } + if (vacopts->force_index_cleanup) + { + /* + * "INDEX_CLEANUP TRUE" has been supported since v12. + * + * Though --force-index-cleanup was added to vacuumdb in v14, + * the "INDEX_CLEANUP TRUE" server/VACUUM behavior has never + * changed. No reason not to support --force-index-cleanup on + * v12+. + */ + Assert(serverVersion >= 120000); + Assert(!vacopts->no_index_cleanup); + appendPQExpBuffer(sql, "%sINDEX_CLEANUP TRUE", sep); + sep = comma; + } if (!vacopts->do_truncate) { /* TRUNCATE is supported since v12 */ @@ -998,6 +1042,7 @@ help(const char *progname) printf(_(" --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n")); printf(_(" --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n")); printf(_(" --no-index-cleanup don't remove index entries that point to dead tuples\n")); + printf(_(" --force-index-cleanup always remove index entries that point to dead tuples\n")); printf(_(" --no-process-toast skip the TOAST table associated with the table to vacuum\n")); printf(_(" --no-truncate don't truncate empty pages at the end of the table\n")); printf(_(" -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n")); diff --git a/src/include/commands/vacuum.h b/src/include/commands/vacuum.h index cb27257bb65e7..bf3126aa9bb2a 100644 --- a/src/include/commands/vacuum.h +++ b/src/include/commands/vacuum.h @@ -185,17 +185,20 @@ typedef struct VacAttrStats #define VACOPT_DISABLE_PAGE_SKIPPING 0x80 /* don't skip any pages */ /* - * A ternary value used by vacuum parameters. + * Values used by index_cleanup and truncate params. * - * DEFAULT value is used to determine the value based on other - * configurations, e.g. reloptions. + * VACOPTVALUE_UNSPECIFIED is used as an initial placeholder when VACUUM + * command has no explicit value. When that happens the final usable value + * comes from the corresponding reloption (though the reloption default is + * usually used). */ -typedef enum VacOptTernaryValue +typedef enum VacOptValue { - VACOPT_TERNARY_DEFAULT = 0, - VACOPT_TERNARY_DISABLED, - VACOPT_TERNARY_ENABLED, -} VacOptTernaryValue; + VACOPTVALUE_UNSPECIFIED = 0, + VACOPTVALUE_AUTO, + VACOPTVALUE_DISABLED, + VACOPTVALUE_ENABLED, +} VacOptValue; /* * Parameters customizing behavior of VACUUM and ANALYZE. @@ -216,10 +219,8 @@ typedef struct VacuumParams int log_min_duration; /* minimum execution threshold in ms at * which verbose logs are activated, -1 * to use default */ - VacOptTernaryValue index_cleanup; /* Do index vacuum and cleanup, - * default value depends on reloptions */ - VacOptTernaryValue truncate; /* Truncate empty pages at the end, - * default value depends on reloptions */ + VacOptValue index_cleanup; /* Do index vacuum and cleanup */ + VacOptValue truncate; /* Truncate empty pages at the end */ /* * The number of parallel vacuum workers. 0 by default which means choose diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h index 774ac5b2b193f..77d176a93482c 100644 --- a/src/include/utils/rel.h +++ b/src/include/utils/rel.h @@ -307,6 +307,14 @@ typedef struct AutoVacOpts float8 analyze_scale_factor; } AutoVacOpts; +/* StdRdOptions->vacuum_index_cleanup values */ +typedef enum StdRdOptIndexCleanup +{ + STDRD_OPTION_VACUUM_INDEX_CLEANUP_AUTO = 0, + STDRD_OPTION_VACUUM_INDEX_CLEANUP_OFF, + STDRD_OPTION_VACUUM_INDEX_CLEANUP_ON +} StdRdOptIndexCleanup; + typedef struct StdRdOptions { int32 vl_len_; /* varlena header (do not touch directly!) */ @@ -316,7 +324,7 @@ typedef struct StdRdOptions AutoVacOpts autovacuum; /* autovacuum-related options */ bool user_catalog_table; /* use as an additional catalog relation */ int parallel_workers; /* max number of parallel workers */ - bool vacuum_index_cleanup; /* enables index vacuuming and cleanup */ + StdRdOptIndexCleanup vacuum_index_cleanup; /* controls index vacuuming */ bool vacuum_truncate; /* enables vacuum to truncate a relation */ } StdRdOptions; diff --git a/src/test/regress/expected/vacuum.out b/src/test/regress/expected/vacuum.out index 5e657849aadd5..e5771462d57b4 100644 --- a/src/test/regress/expected/vacuum.out +++ b/src/test/regress/expected/vacuum.out @@ -146,13 +146,15 @@ VACUUM no_index_cleanup; -- Both parent relation and toast are cleaned up. ALTER TABLE no_index_cleanup SET (vacuum_index_cleanup = true); VACUUM no_index_cleanup; +ALTER TABLE no_index_cleanup SET (vacuum_index_cleanup = auto); +VACUUM no_index_cleanup; -- Parameter is set for both the parent table and its toast relation. INSERT INTO no_index_cleanup(i, t) VALUES (generate_series(31,60), repeat('1234567890',269)); DELETE FROM no_index_cleanup WHERE i < 45; -- Only toast index is cleaned up. -ALTER TABLE no_index_cleanup SET (vacuum_index_cleanup = false, - toast.vacuum_index_cleanup = true); +ALTER TABLE no_index_cleanup SET (vacuum_index_cleanup = off, + toast.vacuum_index_cleanup = yes); VACUUM no_index_cleanup; -- Only parent is cleaned up. ALTER TABLE no_index_cleanup SET (vacuum_index_cleanup = true, @@ -160,7 +162,7 @@ ALTER TABLE no_index_cleanup SET (vacuum_index_cleanup = true, VACUUM no_index_cleanup; -- Test some extra relations. VACUUM (INDEX_CLEANUP FALSE) vaccluster; -VACUUM (INDEX_CLEANUP FALSE) vactst; -- index cleanup option is ignored if no indexes +VACUUM (INDEX_CLEANUP AUTO) vactst; -- index cleanup option is ignored if no indexes VACUUM (INDEX_CLEANUP FALSE, FREEZE TRUE) vaccluster; -- TRUNCATE option CREATE TABLE vac_truncate_test(i INT NOT NULL, j text) diff --git a/src/test/regress/sql/vacuum.sql b/src/test/regress/sql/vacuum.sql index 93fd258fc02cf..f220fc28a700a 100644 --- a/src/test/regress/sql/vacuum.sql +++ b/src/test/regress/sql/vacuum.sql @@ -127,13 +127,15 @@ VACUUM no_index_cleanup; -- Both parent relation and toast are cleaned up. ALTER TABLE no_index_cleanup SET (vacuum_index_cleanup = true); VACUUM no_index_cleanup; +ALTER TABLE no_index_cleanup SET (vacuum_index_cleanup = auto); +VACUUM no_index_cleanup; -- Parameter is set for both the parent table and its toast relation. INSERT INTO no_index_cleanup(i, t) VALUES (generate_series(31,60), repeat('1234567890',269)); DELETE FROM no_index_cleanup WHERE i < 45; -- Only toast index is cleaned up. -ALTER TABLE no_index_cleanup SET (vacuum_index_cleanup = false, - toast.vacuum_index_cleanup = true); +ALTER TABLE no_index_cleanup SET (vacuum_index_cleanup = off, + toast.vacuum_index_cleanup = yes); VACUUM no_index_cleanup; -- Only parent is cleaned up. ALTER TABLE no_index_cleanup SET (vacuum_index_cleanup = true, @@ -141,7 +143,7 @@ ALTER TABLE no_index_cleanup SET (vacuum_index_cleanup = true, VACUUM no_index_cleanup; -- Test some extra relations. VACUUM (INDEX_CLEANUP FALSE) vaccluster; -VACUUM (INDEX_CLEANUP FALSE) vactst; -- index cleanup option is ignored if no indexes +VACUUM (INDEX_CLEANUP AUTO) vactst; -- index cleanup option is ignored if no indexes VACUUM (INDEX_CLEANUP FALSE, FREEZE TRUE) vaccluster; -- TRUNCATE option From 2731ce1bd550d08f3fdd7bcb1497af4b95170976 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Sat, 19 Jun 2021 11:30:33 +0530 Subject: [PATCH 495/671] Handle no replica identity index case in RelationGetIdentityKeyBitmap. Commit e7eea52b2d has introduced a new function RelationGetIdentityKeyBitmap which omits to handle the case where there is no replica identity index on a relation. Author: Mark Dilger Reviewed-by: Takamichi Osumi, Amit Kapila Discussion: https://www.postgresql.org/message-id/4C99A862-69C8-431F-960A-81B1151F1B89@enterprisedb.com --- src/backend/utils/cache/relcache.c | 12 +++++++++++- src/test/subscription/t/001_rep_changes.pl | 17 +++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index fd05615e7690c..d55ae016d090a 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -5266,8 +5266,18 @@ RelationGetIdentityKeyBitmap(Relation relation) if (indexoidlist == NIL) return NULL; - /* Add referenced attributes to idindexattrs */ + /* Fall out if there is no replica identity index */ + if (!OidIsValid(relation->rd_replidindex)) + return NULL; + + /* Look up the description for the replica identity index */ indexDesc = RelationIdGetRelation(relation->rd_replidindex); + + if (!RelationIsValid(indexDesc)) + elog(ERROR, "could not open relation with OID %u", + relation->rd_replidindex); + + /* Add referenced attributes to idindexattrs */ for (i = 0; i < indexDesc->rd_index->indnatts; i++) { int attrnum = indexDesc->rd_index->indkey.values[i]; diff --git a/src/test/subscription/t/001_rep_changes.pl b/src/test/subscription/t/001_rep_changes.pl index ecfba0af049cc..ca6cd2c646daf 100644 --- a/src/test/subscription/t/001_rep_changes.pl +++ b/src/test/subscription/t/001_rep_changes.pl @@ -6,7 +6,7 @@ use warnings; use PostgresNode; use TestLib; -use Test::More tests => 31; +use Test::More tests => 32; # Initialize publisher node my $node_publisher = get_new_node('publisher'); @@ -50,6 +50,10 @@ $node_publisher->safe_psql('postgres', "ALTER TABLE tab_nothing REPLICA IDENTITY NOTHING"); +# Replicate the changes without replica identity index +$node_publisher->safe_psql('postgres', "CREATE TABLE tab_no_replidentity_index(c1 int)"); +$node_publisher->safe_psql('postgres', "CREATE INDEX idx_no_replidentity_index ON tab_no_replidentity_index(c1)"); + # Setup structure on subscriber $node_subscriber->safe_psql('postgres', "CREATE TABLE tab_notrep (a int)"); $node_subscriber->safe_psql('postgres', "CREATE TABLE tab_ins (a int)"); @@ -73,13 +77,17 @@ "CREATE TABLE tab_include (a int, b text, CONSTRAINT covering PRIMARY KEY(a) INCLUDE(b))" ); +# replication of the table without replica identity index +$node_subscriber->safe_psql('postgres', "CREATE TABLE tab_no_replidentity_index(c1 int)"); +$node_subscriber->safe_psql('postgres', "CREATE INDEX idx_no_replidentity_index ON tab_no_replidentity_index(c1)"); + # Setup logical replication my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres'; $node_publisher->safe_psql('postgres', "CREATE PUBLICATION tap_pub"); $node_publisher->safe_psql('postgres', "CREATE PUBLICATION tap_pub_ins_only WITH (publish = insert)"); $node_publisher->safe_psql('postgres', - "ALTER PUBLICATION tap_pub ADD TABLE tab_rep, tab_full, tab_full2, tab_mixed, tab_include, tab_nothing, tab_full_pk" + "ALTER PUBLICATION tap_pub ADD TABLE tab_rep, tab_full, tab_full2, tab_mixed, tab_include, tab_nothing, tab_full_pk, tab_no_replidentity_index" ); $node_publisher->safe_psql('postgres', "ALTER PUBLICATION tap_pub_ins_only ADD TABLE tab_ins"); @@ -129,6 +137,8 @@ "DELETE FROM tab_include WHERE a > 20"); $node_publisher->safe_psql('postgres', "UPDATE tab_include SET a = -a"); +$node_publisher->safe_psql('postgres', "INSERT INTO tab_no_replidentity_index VALUES(1)"); + $node_publisher->wait_for_catchup('tap_sub'); $result = $node_subscriber->safe_psql('postgres', @@ -152,6 +162,9 @@ is($result, qq(20|-20|-1), 'check replicated changes with primary key index with included columns'); +is($node_subscriber->safe_psql('postgres', q(SELECT c1 FROM tab_no_replidentity_index)), + 1, "value replicated to subscriber without replica identity index"); + # insert some duplicate rows $node_publisher->safe_psql('postgres', "INSERT INTO tab_full SELECT generate_series(1,10)"); From 6991e774e0304f5ef488cf1ae4fa79578b6ae3d5 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 19 Jun 2021 11:44:39 -0400 Subject: [PATCH 496/671] Provide feature-test macros for libpq features added in v14. We had a request to provide a way to test at compile time for the availability of the new pipeline features. More generally, it seems like a good idea to provide a way to test via #ifdef for all new libpq API features. People have been using the version from pg_config.h for that; but that's more likely to represent the server version than the libpq version, in the increasingly-common scenario where they're different. It's safer if libpq-fe.h itself is the source of truth about what features it offers. Hence, establish a policy that starting in v14 we'll add a suitable feature-is-present macro to libpq-fe.h when we add new API there. (There doesn't seem to be much point in applying this policy retroactively, but it's not too late for v14.) Tom Lane and Alvaro Herrera, per suggestion from Boris Kolpackov. Discussion: https://postgr.es/m/boris.20210617102439@codesynthesis.com --- src/interfaces/libpq/libpq-fe.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/interfaces/libpq/libpq-fe.h b/src/interfaces/libpq/libpq-fe.h index ec378705ad75f..cc6032b15bd95 100644 --- a/src/interfaces/libpq/libpq-fe.h +++ b/src/interfaces/libpq/libpq-fe.h @@ -28,6 +28,15 @@ extern "C" */ #include "postgres_ext.h" +/* + * These symbols may be used in compile-time #ifdef tests for the availability + * of newer libpq features. + */ +/* Indicates presence of PQenterPipelineMode and friends */ +#define LIBPQ_HAS_PIPELINING 1 +/* Indicates presence of PQsetTraceFlags; also new PQtrace output format */ +#define LIBPQ_HAS_TRACE_FLAGS 1 + /* * Option flags for PQcopyResult */ @@ -98,7 +107,7 @@ typedef enum PGRES_COPY_BOTH, /* Copy In/Out data transfer in progress */ PGRES_SINGLE_TUPLE, /* single tuple from larger resultset */ PGRES_PIPELINE_SYNC, /* pipeline synchronization point */ - PGRES_PIPELINE_ABORTED, /* Command didn't run because of an abort + PGRES_PIPELINE_ABORTED /* Command didn't run because of an abort * earlier in a pipeline */ } ExecStatusType; @@ -398,7 +407,7 @@ extern pgthreadlock_t PQregisterThreadLock(pgthreadlock_t newhandler); extern void PQtrace(PGconn *conn, FILE *debug_port); extern void PQuntrace(PGconn *conn); -/* flags controlling trace output */ +/* flags controlling trace output: */ /* omit timestamps from each line */ #define PQTRACE_SUPPRESS_TIMESTAMPS (1<<0) /* redact portions of some messages, for testing frameworks */ From 5843659d091bfb6f2c60e010ea1fd00e55ee6ada Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 20 Jun 2021 11:48:44 -0400 Subject: [PATCH 497/671] Stabilize test case added by commit f61db909d. Buildfarm members ayu and tern have sometimes shown a different plan than expected for this query. I'd been unable to reproduce that before today, but I finally realized what is happening. If there is a concurrent open transaction (probably an autovacuum run in the buildfarm, but this can also be arranged manually), then the index entries for the rows removed by the DELETE a few lines up are not killed promptly, causing a change in the planner's estimate of the extremal value of ft2.c1, which moves the rowcount estimate for "c1 > 1100" by enough to change the join plan from nestloop to hash. To fix, change the query condition to "c1 > 1000", causing the hash plan to be preferred whether or not a concurrent open transaction exists. Since this UPDATE is tailored to be a no-op, nothing else changes. Report: https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=ayu&dt=2021-06-09%2022%3A45%3A48 Report: https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=ayu&dt=2021-06-13%2022%3A38%3A18 Report: https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=tern&dt=2021-06-20%2004%3A55%3A36 --- .../postgres_fdw/expected/postgres_fdw.out | 19 +++++++++++-------- contrib/postgres_fdw/sql/postgres_fdw.sql | 4 ++-- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 858e5d4a388ce..cc1cca30067f1 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -5535,7 +5535,7 @@ UPDATE ft2 AS target SET (c2) = ( -- but a SET clause that can't be EXPLAIN (VERBOSE, COSTS OFF) UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END - FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1100; + FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Update on public.ft2 d @@ -5543,19 +5543,22 @@ UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END -> Foreign Scan Output: CASE WHEN (random() >= '0'::double precision) THEN d.c2 ELSE 0 END, d.ctid, d.*, t.* Relations: (public.ft2 d) INNER JOIN (public.ft2 t) - Remote SQL: SELECT r1.c2, r1.ctid, CASE WHEN (r1.*)::text IS NOT NULL THEN ROW(r1."C 1", r1.c2, r1.c3, r1.c4, r1.c5, r1.c6, r1.c7, r1.c8) END, CASE WHEN (r2.*)::text IS NOT NULL THEN ROW(r2."C 1", r2.c2, r2.c3, r2.c4, r2.c5, r2.c6, r2.c7, r2.c8) END FROM ("S 1"."T 1" r1 INNER JOIN "S 1"."T 1" r2 ON (((r1."C 1" = r2."C 1")) AND ((r1."C 1" > 1100)))) FOR UPDATE OF r1 - -> Nested Loop + Remote SQL: SELECT r1.c2, r1.ctid, CASE WHEN (r1.*)::text IS NOT NULL THEN ROW(r1."C 1", r1.c2, r1.c3, r1.c4, r1.c5, r1.c6, r1.c7, r1.c8) END, CASE WHEN (r2.*)::text IS NOT NULL THEN ROW(r2."C 1", r2.c2, r2.c3, r2.c4, r2.c5, r2.c6, r2.c7, r2.c8) END FROM ("S 1"."T 1" r1 INNER JOIN "S 1"."T 1" r2 ON (((r1."C 1" = r2."C 1")) AND ((r1."C 1" > 1000)))) FOR UPDATE OF r1 + -> Hash Join Output: d.c2, d.ctid, d.*, t.* + Hash Cond: (d.c1 = t.c1) -> Foreign Scan on public.ft2 d Output: d.c2, d.ctid, d.*, d.c1 - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8, ctid FROM "S 1"."T 1" WHERE (("C 1" > 1100)) ORDER BY "C 1" ASC NULLS LAST FOR UPDATE - -> Foreign Scan on public.ft2 t + Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8, ctid FROM "S 1"."T 1" WHERE (("C 1" > 1000)) ORDER BY "C 1" ASC NULLS LAST FOR UPDATE + -> Hash Output: t.*, t.c1 - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (($1::integer = "C 1")) -(14 rows) + -> Foreign Scan on public.ft2 t + Output: t.*, t.c1 + Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" +(17 rows) UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END - FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1100; + FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000; -- Test UPDATE/DELETE with WHERE or JOIN/ON conditions containing -- user-defined operators/functions ALTER SERVER loopback OPTIONS (DROP extensions); diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 34a67d716052c..8983209c74bac 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -1259,9 +1259,9 @@ UPDATE ft2 AS target SET (c2) = ( -- but a SET clause that can't be EXPLAIN (VERBOSE, COSTS OFF) UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END - FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1100; + FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000; UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END - FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1100; + FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000; -- Test UPDATE/DELETE with WHERE or JOIN/ON conditions containing -- user-defined operators/functions From 96795176810b979a2bf1f4563bdcb161679d5b95 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Sun, 20 Jun 2021 12:28:08 -0400 Subject: [PATCH 498/671] Revert "Add test case for obsoleting slot with active walsender" This reverts commit 09126984a263; the test case added there failed once in circumstances that remain mysterious. It seems better to remove the test for now so that 14beta2 doesn't have random failures built in. --- src/test/recovery/t/019_replslot_limit.pl | 85 +---------------------- 1 file changed, 3 insertions(+), 82 deletions(-) diff --git a/src/test/recovery/t/019_replslot_limit.pl b/src/test/recovery/t/019_replslot_limit.pl index 5e25661e10565..7094aa0704b20 100644 --- a/src/test/recovery/t/019_replslot_limit.pl +++ b/src/test/recovery/t/019_replslot_limit.pl @@ -11,7 +11,7 @@ use PostgresNode; use File::Path qw(rmtree); -use Test::More tests => $TestLib::windows_os ? 14 : 18; +use Test::More tests => 14; use Time::HiRes qw(usleep); $ENV{PGDATABASE} = 'postgres'; @@ -211,8 +211,8 @@ } ok($failed, 'check that replication has been broken'); -$node_primary->stop; -$node_standby->stop; +$node_primary->stop('immediate'); +$node_standby->stop('immediate'); my $node_primary2 = get_new_node('primary2'); $node_primary2->init(allows_streaming => 1); @@ -253,85 +253,6 @@ timeout => '60')); is($result[1], 'finished', 'check if checkpoint command is not blocked'); -$node_primary2->stop; -$node_standby->stop; - -# The next test depends on Perl's `kill`, which apparently is not -# portable to Windows. (It would be nice to use Test::More's `subtest`, -# but that's not in the ancient version we require.) -if ($TestLib::windows_os) -{ - done_testing(); - exit; -} - -# Get a slot terminated while the walsender is active -# We do this by sending SIGSTOP to the walsender. Skip this on Windows. -my $node_primary3 = get_new_node('primary3'); -$node_primary3->init(allows_streaming => 1, extra => ['--wal-segsize=1']); -$node_primary3->append_conf( - 'postgresql.conf', qq( - min_wal_size = 2MB - max_wal_size = 2MB - log_checkpoints = yes - max_slot_wal_keep_size = 1MB - )); -$node_primary3->start; -$node_primary3->safe_psql('postgres', - "SELECT pg_create_physical_replication_slot('rep3')"); -# Take backup -$backup_name = 'my_backup'; -$node_primary3->backup($backup_name); -# Create standby -my $node_standby3 = get_new_node('standby_3'); -$node_standby3->init_from_backup($node_primary3, $backup_name, - has_streaming => 1); -$node_standby3->append_conf('postgresql.conf', "primary_slot_name = 'rep3'"); -$node_standby3->start; -$node_primary3->wait_for_catchup($node_standby3->name, 'replay'); -my $senderpid = $node_primary3->safe_psql('postgres', - "SELECT pid FROM pg_stat_activity WHERE backend_type = 'walsender'"); -like($senderpid, qr/^[0-9]+$/, "have walsender pid $senderpid"); -my $receiverpid = $node_standby3->safe_psql('postgres', - "SELECT pid FROM pg_stat_activity WHERE backend_type = 'walreceiver'"); -like($receiverpid, qr/^[0-9]+$/, "have walreceiver pid $receiverpid"); - -# freeze walsender and walreceiver. Slot will still be active, but walreceiver -# won't get anything anymore. -kill 'STOP', $senderpid, $receiverpid; -$logstart = get_log_size($node_primary3); -advance_wal($node_primary3, 4); -ok(find_in_log($node_primary3, "to release replication slot", $logstart), - "walreceiver termination logged"); - -# Now let the walsender continue; slot should be killed now. -# (Must not let walreceiver run yet; otherwise the standby could start another -# one before the slot can be killed) -kill 'CONT', $senderpid; -$node_primary3->poll_query_until('postgres', - "SELECT wal_status FROM pg_replication_slots WHERE slot_name = 'rep3'", - "lost") - or die "timed out waiting for slot to be lost"; - -my $max_attempts = 180; -while ($max_attempts-- > 0) -{ - if (find_in_log( - $node_primary3, - 'invalidating slot "rep3" because its restart_lsn', $logstart)) - { - ok(1, "slot invalidation logged"); - last; - } - sleep 1; -} - -# Now let the walreceiver continue, so that the node can be stopped cleanly -kill 'CONT', $receiverpid; - -$node_primary3->stop; -$node_standby3->stop; - ##################################### # Advance WAL of $node by $n segments sub advance_wal From e8f201ab82be234b2f103234cf9f262f9afeaeba Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Sun, 20 Jun 2021 18:14:00 -0700 Subject: [PATCH 499/671] Remove overzealous VACUUM failsafe assertions. The failsafe can trigger when index processing is already disabled. This can happen when VACUUM's INDEX_CLEANUP parameter is "off" and the failsafe happens to trigger. Remove assertions that assume that index processing is directly tied to the failsafe. Oversight in commit c242baa4, which made it possible for the failsafe to trigger in a two-pass strategy VACUUM that has yet to make its first call to lazy_vacuum_all_indexes(). --- src/backend/access/heap/vacuumlazy.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 7062d2dbd1ae5..44f198398c19d 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -1162,7 +1162,8 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive) * There is a similar check inside lazy_vacuum_all_indexes(), but * relfrozenxid might start to look dangerously old before we reach * that point. This check also provides failsafe coverage for the - * one-pass strategy case. + * one-pass strategy, and the two-pass strategy with the index_cleanup + * param set to 'off'. */ if (blkno - next_failsafe_block >= FAILSAFE_EVERY_PAGES) { @@ -2611,9 +2612,6 @@ lazy_check_wraparound_failsafe(LVRelState *vacrel) if (unlikely(vacuum_xid_failsafe_check(vacrel->relfrozenxid, vacrel->relminmxid))) { - Assert(vacrel->do_index_vacuuming); - Assert(vacrel->do_index_cleanup); - vacrel->failsafe_active = true; /* Disable index vacuuming, index cleanup, and heap rel truncation */ From 90855908b751d40f67352fa0252e0fcdaa7e317b Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sun, 20 Jun 2021 23:53:00 -0400 Subject: [PATCH 500/671] doc: add mention of +4GB windows file handling in PG14 relnotes Reported-by: Masahiko Sawada Discussion: https://postgr.es/m/CAD21AoCTHyouoGv-xt1qNjjvPbGMErLi0AJncByTvr66Nq7j8g@mail.gmail.com --- doc/src/sgml/release-14.sgml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 53221ab8c10bd..28d0e1396b90f 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -3553,6 +3553,25 @@ Author: Peter Eisentraut + + + Allow Windows to properly handle files larger than four gigabytes + (Juan José Santamaría Flecha) + + + + For example this allows COPY, WAL + files, and relation segment files to be larger than four gigabytes. + + + + + From 69a58bfe4ab05567a8fab8bdce7f3095ed06b99c Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 21 Jun 2021 01:09:32 -0400 Subject: [PATCH 501/671] doc: adjust PG 14 relnotes to be current --- doc/src/sgml/release-14.sgml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 28d0e1396b90f..33b7bf7d57044 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -6,7 +6,7 @@ Release date: - 2021-??-?? (AS OF 2021-05-15) + 2021-??-?? (AS OF 2021-06-20) @@ -424,12 +424,14 @@ Author: Tom Lane Require custom server - variable names to match the pattern used for unquoted - SQL identifiers (Tom Lane) + variable names to use only character which are valid for + unquoted SQL identifiers (Tom Lane) @@ -691,12 +693,20 @@ Author: Peter Eisentraut Allow vacuum to skip index vacuuming when the number of removable index entries is insignificant (Masahiko Sawada, Peter Geoghegan) + + + The vacuum parameter INDEX_CLEANUP has a + new default of auto to enable this optimization. + From 97b7134186490b36e01efc9d2feaf7038c666457 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 21 Jun 2021 11:17:49 +0200 Subject: [PATCH 502/671] amcheck: Fix code comments Code comments were claiming that verify_heapam() was checking privileges on the relation it was operating on, but it didn't actually do that. Perhaps earlier versions of the patch did that, but now the access is regulated by privileges on the function. Remove the wrong comments. --- contrib/amcheck/verify_heapam.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c index d8b3fd3d4f98b..a3caee7cdd38c 100644 --- a/contrib/amcheck/verify_heapam.c +++ b/contrib/amcheck/verify_heapam.c @@ -298,7 +298,7 @@ verify_heapam(PG_FUNCTION_ARGS) rsinfo->setDesc = ctx.tupdesc; MemoryContextSwitchTo(old_context); - /* Open relation, check relkind and access method, and check privileges */ + /* Open relation, check relkind and access method */ ctx.rel = relation_open(relid, AccessShareLock); sanity_check_relation(ctx.rel); @@ -524,8 +524,7 @@ verify_heapam(PG_FUNCTION_ARGS) } /* - * Check that a relation's relkind and access method are both supported, - * and that the caller has select privilege on the relation. + * Check that a relation's relkind and access method are both supported. */ static void sanity_check_relation(Relation rel) From 047a259e35b9dde2dad5fd0e5d5d784bb327b848 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 21 Jun 2021 02:48:11 -0700 Subject: [PATCH 503/671] Finish rename of PQtraceSetFlags() to PQsetTraceFlags(). Jie Zhang Discussion: https://postgr.es/m/TYWPR01MB767844835390EDD8DB276D75F90A9@TYWPR01MB7678.jpnprd01.prod.outlook.com --- doc/src/sgml/libpq.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index daf223312470c..441cc0da3a392 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -6535,7 +6535,7 @@ void PQtrace(PGconn *conn, FILE *stream); - PQsetTraceFlagsPQtraceSetFlags + PQsetTraceFlagsPQsetTraceFlags From a7bb0ce58f56ee8907c3f49c52d99f502536c796 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 21 Jun 2021 12:32:14 +0200 Subject: [PATCH 504/671] Translation updates Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git Source-Git-Hash: 70796ae860c444c764bb591c885f22cac1c168ec --- src/backend/po/de.po | 3331 +++++++++--------- src/backend/po/es.po | 3664 +++++++++---------- src/backend/po/fr.po | 4858 +++++++++++++------------- src/bin/initdb/po/el.po | 557 ++- src/bin/initdb/po/es.po | 30 +- src/bin/pg_amcheck/nls.mk | 2 +- src/bin/pg_amcheck/po/el.po | 465 +++ src/bin/pg_amcheck/po/es.po | 463 +++ src/bin/pg_amcheck/po/fr.po | 139 +- src/bin/pg_amcheck/po/zh_CN.po | 460 +++ src/bin/pg_archivecleanup/po/el.po | 7 +- src/bin/pg_basebackup/po/es.po | 23 +- src/bin/pg_checksums/po/el.po | 7 +- src/bin/pg_checksums/po/es.po | 12 +- src/bin/pg_config/po/el.po | 7 +- src/bin/pg_config/po/es.po | 12 +- src/bin/pg_controldata/nls.mk | 2 +- src/bin/pg_controldata/po/el.po | 521 +++ src/bin/pg_ctl/po/el.po | 600 ++-- src/bin/pg_ctl/po/es.po | 12 +- src/bin/pg_dump/po/el.po | 1649 ++++----- src/bin/pg_dump/po/es.po | 100 +- src/bin/pg_dump/po/fr.po | 1396 ++++---- src/bin/pg_rewind/po/es.po | 89 +- src/bin/pg_rewind/po/fr.po | 364 +- src/bin/pg_rewind/po/zh_CN.po | 632 ++-- src/bin/pg_test_fsync/po/el.po | 45 +- src/bin/pg_test_fsync/po/es.po | 14 +- src/bin/pg_test_timing/po/el.po | 7 +- src/bin/pg_test_timing/po/es.po | 56 +- src/bin/pg_test_timing/po/zh_CN.po | 56 +- src/bin/pg_upgrade/po/es.po | 206 +- src/bin/pg_verifybackup/nls.mk | 2 +- src/bin/pg_verifybackup/po/el.po | 503 +++ src/bin/pg_verifybackup/po/es.po | 68 +- src/bin/pg_waldump/nls.mk | 2 +- src/bin/pg_waldump/po/el.po | 308 ++ src/bin/psql/po/el.po | 3857 ++++++++++---------- src/bin/psql/po/es.po | 1643 +++++---- src/bin/psql/po/fr.po | 2175 ++++++------ src/bin/scripts/po/es.po | 95 +- src/bin/scripts/po/fr.po | 181 +- src/interfaces/ecpg/preproc/po/es.po | 21 +- src/interfaces/ecpg/preproc/po/fr.po | 131 +- src/interfaces/libpq/po/el.po | 1155 +++--- src/interfaces/libpq/po/es.po | 367 +- src/interfaces/libpq/po/fr.po | 371 +- src/pl/plperl/nls.mk | 2 +- src/pl/plperl/po/el.po | 221 ++ src/pl/plpgsql/src/po/es.po | 15 +- src/pl/plpython/nls.mk | 2 +- src/pl/plpython/po/el.po | 460 +++ src/pl/tcl/po/el.po | 7 +- 53 files changed, 17017 insertions(+), 14355 deletions(-) create mode 100644 src/bin/pg_amcheck/po/el.po create mode 100644 src/bin/pg_amcheck/po/es.po create mode 100644 src/bin/pg_amcheck/po/zh_CN.po create mode 100644 src/bin/pg_controldata/po/el.po create mode 100644 src/bin/pg_verifybackup/po/el.po create mode 100644 src/bin/pg_waldump/po/el.po create mode 100644 src/pl/plperl/po/el.po create mode 100644 src/pl/plpython/po/el.po diff --git a/src/backend/po/de.po b/src/backend/po/de.po index 99d40a045a033..6b136250cf55c 100644 --- a/src/backend/po/de.po +++ b/src/backend/po/de.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-14 08:40+0000\n" -"PO-Revision-Date: 2021-05-14 15:15+0200\n" +"POT-Creation-Date: 2021-06-05 07:40+0000\n" +"PO-Revision-Date: 2021-06-05 22:31+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -37,9 +37,9 @@ msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %m" #: access/transam/xlog.c:11351 access/transam/xlog.c:11804 #: access/transam/xlog.c:11884 access/transam/xlog.c:11921 #: access/transam/xlog.c:11981 access/transam/xlogfuncs.c:703 -#: access/transam/xlogfuncs.c:722 commands/extension.c:3465 libpq/hba.c:536 +#: access/transam/xlogfuncs.c:722 commands/extension.c:3465 libpq/hba.c:534 #: replication/basebackup.c:2020 replication/logical/origin.c:729 -#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4876 +#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4880 #: replication/logical/snapbuild.c:1733 replication/logical/snapbuild.c:1775 #: replication/logical/snapbuild.c:1802 replication/slot.c:1658 #: replication/slot.c:1699 replication/walsender.c:544 @@ -71,7 +71,7 @@ msgstr "konnte Datei »%s« nicht lesen: %d von %zu gelesen" #: access/transam/xlog.c:5667 access/transam/xlogfuncs.c:728 #: commands/copyfrom.c:1576 commands/copyto.c:328 libpq/be-fsstubs.c:462 #: libpq/be-fsstubs.c:533 replication/logical/origin.c:667 -#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:4934 +#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:4938 #: replication/logical/snapbuild.c:1642 replication/logical/snapbuild.c:1815 #: replication/slot.c:1549 replication/slot.c:1710 replication/walsender.c:559 #: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 @@ -110,9 +110,9 @@ msgstr "" #: access/transam/xlog.c:4762 access/transam/xlogutils.c:803 #: postmaster/syslogger.c:1488 replication/basebackup.c:616 #: replication/basebackup.c:1610 replication/logical/origin.c:719 -#: replication/logical/reorderbuffer.c:3544 -#: replication/logical/reorderbuffer.c:4091 -#: replication/logical/reorderbuffer.c:4856 +#: replication/logical/reorderbuffer.c:3548 +#: replication/logical/reorderbuffer.c:4095 +#: replication/logical/reorderbuffer.c:4860 #: replication/logical/snapbuild.c:1597 replication/logical/snapbuild.c:1704 #: replication/slot.c:1630 replication/walsender.c:517 #: replication/walsender.c:2526 storage/file/copydir.c:161 @@ -120,7 +120,7 @@ msgstr "" #: storage/smgr/md.c:502 utils/cache/relmapper.c:724 #: utils/cache/relmapper.c:836 utils/error/elog.c:1938 #: utils/init/miscinit.c:1346 utils/init/miscinit.c:1480 -#: utils/init/miscinit.c:1557 utils/misc/guc.c:8585 utils/misc/guc.c:8617 +#: utils/init/miscinit.c:1557 utils/misc/guc.c:8604 utils/misc/guc.c:8636 #, c-format msgid "could not open file \"%s\": %m" msgstr "konnte Datei »%s« nicht öffnen: %m" @@ -129,7 +129,7 @@ msgstr "konnte Datei »%s« nicht öffnen: %m" #: access/transam/twophase.c:1653 access/transam/twophase.c:1662 #: access/transam/xlog.c:11095 access/transam/xlog.c:11133 #: access/transam/xlog.c:11546 access/transam/xlogfuncs.c:782 -#: postmaster/postmaster.c:5642 postmaster/syslogger.c:1499 +#: postmaster/postmaster.c:5659 postmaster/syslogger.c:1499 #: postmaster/syslogger.c:1512 utils/cache/relmapper.c:870 #, c-format msgid "could not write file \"%s\": %m" @@ -145,7 +145,7 @@ msgstr "konnte Datei »%s« nicht schreiben: %m" #: access/transam/xlog.c:10627 replication/logical/snapbuild.c:1635 #: replication/slot.c:1535 replication/slot.c:1640 storage/file/fd.c:730 #: storage/file/fd.c:3629 storage/smgr/md.c:950 storage/smgr/md.c:991 -#: storage/sync/sync.c:417 utils/cache/relmapper.c:885 utils/misc/guc.c:8372 +#: storage/sync/sync.c:417 utils/cache/relmapper.c:885 utils/misc/guc.c:8391 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fsyncen: %m" @@ -155,10 +155,10 @@ msgstr "konnte Datei »%s« nicht fsyncen: %m" #: ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 #: ../port/path.c:685 access/transam/twophase.c:1341 access/transam/xlog.c:6633 #: lib/dshash.c:246 libpq/auth.c:1482 libpq/auth.c:1550 libpq/auth.c:2108 -#: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:347 -#: postmaster/bgworker.c:937 postmaster/postmaster.c:2514 -#: postmaster/postmaster.c:4157 postmaster/postmaster.c:4827 -#: postmaster/postmaster.c:5567 postmaster/postmaster.c:5931 +#: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 +#: postmaster/bgworker.c:948 postmaster/postmaster.c:2516 +#: postmaster/postmaster.c:4175 postmaster/postmaster.c:4845 +#: postmaster/postmaster.c:5584 postmaster/postmaster.c:5948 #: replication/libpqwalreceiver/libpqwalreceiver.c:282 #: replication/logical/logical.c:205 replication/walsender.c:591 #: storage/buffer/localbuf.c:442 storage/file/fd.c:882 storage/file/fd.c:1352 @@ -171,8 +171,8 @@ msgstr "konnte Datei »%s« nicht fsyncen: %m" #: utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 #: utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 #: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 -#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5017 -#: utils/misc/guc.c:5033 utils/misc/guc.c:5046 utils/misc/guc.c:8350 +#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5035 +#: utils/misc/guc.c:5051 utils/misc/guc.c:5064 utils/misc/guc.c:8369 #: utils/misc/tzparser.c:467 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:701 #: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:234 #: utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 @@ -253,7 +253,7 @@ msgid "could not stat file \"%s\": %m" msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" #: ../common/file_utils.c:166 ../common/pgfnames.c:48 commands/tablespace.c:730 -#: commands/tablespace.c:740 postmaster/postmaster.c:1513 +#: commands/tablespace.c:740 postmaster/postmaster.c:1515 #: storage/file/fd.c:2724 storage/file/reinit.c:122 utils/adt/misc.c:262 #: utils/misc/tzparser.c:338 #, c-format @@ -274,21 +274,19 @@ msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "konnte Datei »%s« nicht in »%s« umbenennen: %m" #: ../common/hex.c:54 -#, fuzzy, c-format -#| msgid "invalid hexadecimal digit: \"%c\"" +#, c-format msgid "invalid hexadecimal digit" -msgstr "ungültige hexadezimale Ziffer: »%c«" +msgstr "ungültige hexadezimale Ziffer" #: ../common/hex.c:59 -#, fuzzy, c-format -#| msgid "invalid hexadecimal digit: \"%c\"" +#, c-format msgid "invalid hexadecimal digit: \"%.*s\"" -msgstr "ungültige hexadezimale Ziffer: »%c«" +msgstr "ungültige hexadezimale Ziffer: »%.*s«" #: ../common/hex.c:90 #, c-format msgid "overflow of destination buffer in hex encoding" -msgstr "" +msgstr "Zielpufferüberlauf bei Hex-Kodierung" #: ../common/hex.c:136 ../common/hex.c:141 #, c-format @@ -298,7 +296,7 @@ msgstr "ungültige hexadezimale Daten: ungerade Anzahl Ziffern" #: ../common/hex.c:152 #, c-format msgid "overflow of destination buffer in hex decoding" -msgstr "" +msgstr "Zielpufferüberlauf bei Hex-Dekodierung" #: ../common/jsonapi.c:1066 #, c-format @@ -638,7 +636,7 @@ msgid "could not open parent table of index \"%s\"" msgstr "konnte Basistabelle von Index »%s« nicht öffnen" #: access/brin/brin_bloom.c:751 access/brin/brin_bloom.c:793 -#: access/brin/brin_minmax_multi.c:2984 access/brin/brin_minmax_multi.c:3129 +#: access/brin/brin_minmax_multi.c:2986 access/brin/brin_minmax_multi.c:3129 #: statistics/dependencies.c:651 statistics/dependencies.c:704 #: statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 #: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 @@ -647,8 +645,8 @@ msgstr "konnte Basistabelle von Index »%s« nicht öffnen" msgid "cannot accept a value of type %s" msgstr "kann keinen Wert vom Typ %s annehmen" -#: access/brin/brin_minmax_multi.c:2142 access/brin/brin_minmax_multi.c:2149 -#: access/brin/brin_minmax_multi.c:2156 utils/adt/timestamp.c:941 +#: access/brin/brin_minmax_multi.c:2144 access/brin/brin_minmax_multi.c:2151 +#: access/brin/brin_minmax_multi.c:2158 utils/adt/timestamp.c:941 #: utils/adt/timestamp.c:1515 utils/adt/timestamp.c:1982 #: utils/adt/timestamp.c:3059 utils/adt/timestamp.c:3064 #: utils/adt/timestamp.c:3069 utils/adt/timestamp.c:3119 @@ -664,7 +662,8 @@ msgstr "interval-Wert ist außerhalb des gültigen Bereichs" #: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 #: access/brin/brin_pageops.c:843 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1441 access/spgist/spgdoinsert.c:1995 +#: access/gist/gist.c:1441 access/spgist/spgdoinsert.c:2000 +#: access/spgist/spgdoinsert.c:2275 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "Größe %zu der Indexzeile überschreitet Maximum %zu für Index »%s«" @@ -772,7 +771,7 @@ msgstr "Anzahl der Spalten (%d) überschreitet Maximum (%d)" msgid "number of index columns (%d) exceeds limit (%d)" msgstr "Anzahl der Indexspalten (%d) überschreitet Maximum (%d)" -#: access/common/indextuple.c:199 access/spgist/spgutils.c:947 +#: access/common/indextuple.c:190 access/spgist/spgutils.c:947 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "Indexzeile benötigt %zu Bytes, Maximalgröße ist %zu" @@ -806,7 +805,7 @@ msgstr "RESET darf keinen Parameterwert enthalten" msgid "unrecognized parameter namespace \"%s\"" msgstr "unbekannter Parameter-Namensraum »%s«" -#: access/common/reloptions.c:1277 utils/misc/guc.c:12495 +#: access/common/reloptions.c:1277 utils/misc/guc.c:12514 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "Tabellen mit WITH OIDS werden nicht unterstützt" @@ -863,10 +862,9 @@ msgid "unsupported LZ4 compression method" msgstr "Unlink wird bei Komprimierung nicht unterstützt" #: access/common/toast_compression.c:33 -#, fuzzy, c-format -#| msgid "This functionality requires the server to be built with libxml support." +#, c-format msgid "This functionality requires the server to be built with lz4 support." -msgstr "Diese Funktionalität verlangt, dass der Server mit Libxml-Unterstützung gebaut wird." +msgstr "Diese Funktionalität verlangt, dass der Server mit lz4-Unterstützung gebaut wird." #: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1589 #: utils/adt/xml.c:224 @@ -874,7 +872,7 @@ msgstr "Diese Funktionalität verlangt, dass der Server mit Libxml-Unterstützun msgid "You need to rebuild PostgreSQL using %s." msgstr "Sie müssen PostgreSQL mit %s neu bauen." -#: access/common/tupdesc.c:822 parser/parse_clause.c:772 +#: access/common/tupdesc.c:825 parser/parse_clause.c:772 #: parser/parse_relation.c:1838 #, c-format msgid "column \"%s\" cannot be declared SETOF" @@ -1006,9 +1004,9 @@ msgstr "Operatorfamilie »%s« für Zugriffsmethode %s enthält ungültige ORDER msgid "could not determine which collation to use for string hashing" msgstr "konnte die für das Zeichenketten-Hashing zu verwendende Sortierfolge nicht bestimmen" -#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:712 -#: catalog/heap.c:718 commands/createas.c:206 commands/createas.c:509 -#: commands/indexcmds.c:1869 commands/tablecmds.c:16827 commands/view.c:86 +#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:713 +#: catalog/heap.c:719 commands/createas.c:206 commands/createas.c:509 +#: commands/indexcmds.c:1869 commands/tablecmds.c:16795 commands/view.c:86 #: regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 #: utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 #: utils/adt/like_support.c:1003 utils/adt/varchar.c:733 @@ -1022,8 +1020,8 @@ msgstr "Verwenden Sie die COLLATE-Klausel, um die Sortierfolge explizit zu setze msgid "index row size %zu exceeds hash maximum %zu" msgstr "Größe der Indexzeile %zu überschreitet Maximum für Hash-Index %zu" -#: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:1999 -#: access/spgist/spgutils.c:1008 +#: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:2004 +#: access/spgist/spgdoinsert.c:2279 access/spgist/spgutils.c:1008 #, c-format msgid "Values larger than a buffer page cannot be indexed." msgstr "Werte, die größer sind als eine Pufferseite, können nicht indiziert werden." @@ -1063,33 +1061,33 @@ msgstr "in Operatorfamilie »%s« für Zugriffsmethode %s fehlt Support-Funktion msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "in Operatorfamilie »%s« für Zugriffsmethode %s fehlen typübergreifende Operatoren" -#: access/heap/heapam.c:2328 +#: access/heap/heapam.c:2260 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "in einem parallelen Arbeitsprozess können keine Tupel eingefügt werden" -#: access/heap/heapam.c:2799 +#: access/heap/heapam.c:2731 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "während einer parallelen Operation können keine Tupel gelöscht werden" -#: access/heap/heapam.c:2845 +#: access/heap/heapam.c:2777 #, c-format msgid "attempted to delete invisible tuple" msgstr "Versuch ein unsichtbares Tupel zu löschen" -#: access/heap/heapam.c:3277 access/heap/heapam.c:6078 +#: access/heap/heapam.c:3209 access/heap/heapam.c:6010 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "während einer parallelen Operation können keine Tupel aktualisiert werden" -#: access/heap/heapam.c:3410 +#: access/heap/heapam.c:3342 #, c-format msgid "attempted to update invisible tuple" msgstr "Versuch ein unsichtbares Tupel zu aktualisieren" -#: access/heap/heapam.c:4731 access/heap/heapam.c:4769 -#: access/heap/heapam.c:5025 access/heap/heapam_handler.c:454 +#: access/heap/heapam.c:4663 access/heap/heapam.c:4701 +#: access/heap/heapam.c:4957 access/heap/heapam_handler.c:454 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "konnte Sperre für Zeile in Relation »%s« nicht setzen" @@ -1114,8 +1112,8 @@ msgstr "konnte nicht in Datei »%s« schreiben, %d von %d geschrieben: %m" #: access/transam/xlog.c:3328 access/transam/xlog.c:3516 #: access/transam/xlog.c:4714 access/transam/xlog.c:11086 #: access/transam/xlog.c:11124 access/transam/xlog.c:11529 -#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4582 -#: postmaster/postmaster.c:5629 replication/logical/origin.c:587 +#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4600 +#: postmaster/postmaster.c:5646 replication/logical/origin.c:587 #: replication/slot.c:1482 storage/file/copydir.c:167 storage/smgr/md.c:218 #: utils/time/snapmgr.c:1244 #, c-format @@ -1130,14 +1128,14 @@ msgstr "konnte Datei »%s« nicht auf %u kürzen: %m" #: access/heap/rewriteheap.c:1166 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:502 #: access/transam/xlog.c:3400 access/transam/xlog.c:3572 -#: access/transam/xlog.c:4726 postmaster/postmaster.c:4592 -#: postmaster/postmaster.c:4602 replication/logical/origin.c:599 +#: access/transam/xlog.c:4726 postmaster/postmaster.c:4610 +#: postmaster/postmaster.c:4620 replication/logical/origin.c:599 #: replication/logical/origin.c:641 replication/logical/origin.c:660 #: replication/logical/snapbuild.c:1611 replication/slot.c:1517 #: storage/file/buffile.c:506 storage/file/copydir.c:207 #: utils/init/miscinit.c:1421 utils/init/miscinit.c:1432 -#: utils/init/miscinit.c:1440 utils/misc/guc.c:8333 utils/misc/guc.c:8364 -#: utils/misc/guc.c:10273 utils/misc/guc.c:10287 utils/time/snapmgr.c:1249 +#: utils/init/miscinit.c:1440 utils/misc/guc.c:8352 utils/misc/guc.c:8383 +#: utils/misc/guc.c:10292 utils/misc/guc.c:10306 utils/time/snapmgr.c:1249 #: utils/time/snapmgr.c:1256 #, c-format msgid "could not write to file \"%s\": %m" @@ -1145,8 +1143,8 @@ msgstr "konnte nicht in Datei »%s« schreiben: %m" #: access/heap/rewriteheap.c:1256 access/transam/twophase.c:1613 #: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 -#: postmaster/postmaster.c:1094 postmaster/syslogger.c:1465 -#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4358 +#: postmaster/postmaster.c:1096 postmaster/syslogger.c:1465 +#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4362 #: replication/logical/snapbuild.c:1556 replication/logical/snapbuild.c:1972 #: replication/slot.c:1614 storage/file/fd.c:788 storage/file/fd.c:3169 #: storage/file/fd.c:3231 storage/file/reinit.c:250 storage/ipc/dsm.c:315 @@ -1156,101 +1154,101 @@ msgstr "konnte nicht in Datei »%s« schreiben: %m" msgid "could not remove file \"%s\": %m" msgstr "konnte Datei »%s« nicht löschen: %m" -#: access/heap/vacuumlazy.c:746 +#: access/heap/vacuumlazy.c:745 #, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisches aggressives Vacuum um Überlauf zu verhindern in der Tabelle »%s.%s.%s«: Index-Scans: %d\n" -#: access/heap/vacuumlazy.c:748 +#: access/heap/vacuumlazy.c:747 #, c-format msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisches Vacuum um Überlauf zu verhindern in der Tabelle »%s.%s.%s«: Index-Scans: %d\n" -#: access/heap/vacuumlazy.c:753 +#: access/heap/vacuumlazy.c:752 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisches aggressives Vacuum der Tabelle »%s.%s.%s«: Index-Scans: %d\n" -#: access/heap/vacuumlazy.c:755 +#: access/heap/vacuumlazy.c:754 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisches Vacuum der Tabelle »%s.%s.%s«: Index-Scans: %d\n" -#: access/heap/vacuumlazy.c:762 +#: access/heap/vacuumlazy.c:761 #, c-format msgid "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n" msgstr "Seiten: %u entfernt, %u verbleiben, %u übersprungen wegen Pins, %u übersprungen weil eingefroren\n" -#: access/heap/vacuumlazy.c:768 +#: access/heap/vacuumlazy.c:767 #, c-format msgid "tuples: %lld removed, %lld remain, %lld are dead but not yet removable, oldest xmin: %u\n" msgstr "Tupel: %lld entfernt, %lld verbleiben, %lld sind tot aber noch nicht entfernbar, ältestes xmin: %u\n" -#: access/heap/vacuumlazy.c:774 commands/analyze.c:794 +#: access/heap/vacuumlazy.c:773 commands/analyze.c:794 #, c-format msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" msgstr "Puffer-Verwendung: %lld Treffer, %lld Verfehlen, %lld geändert\n" -#: access/heap/vacuumlazy.c:784 +#: access/heap/vacuumlazy.c:783 #, c-format msgid " %u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n" msgstr "" -#: access/heap/vacuumlazy.c:787 +#: access/heap/vacuumlazy.c:786 #, fuzzy #| msgid "index \"%s\" not found" msgid "index scan not needed:" msgstr "Index »%s« nicht gefunden" -#: access/heap/vacuumlazy.c:789 +#: access/heap/vacuumlazy.c:788 #, fuzzy #| msgid "index \"%s\" was reindexed" msgid "index scan needed:" msgstr "Index »%s« wurde neu indiziert" -#: access/heap/vacuumlazy.c:793 +#: access/heap/vacuumlazy.c:792 #, c-format msgid " %u pages from table (%.2f%% of total) have %lld dead item identifiers\n" msgstr "" -#: access/heap/vacuumlazy.c:796 +#: access/heap/vacuumlazy.c:795 msgid "index scan bypassed:" msgstr "" -#: access/heap/vacuumlazy.c:798 +#: access/heap/vacuumlazy.c:797 msgid "index scan bypassed by failsafe:" msgstr "" -#: access/heap/vacuumlazy.c:814 +#: access/heap/vacuumlazy.c:813 #, c-format msgid "index \"%s\": pages: %u in total, %u newly deleted, %u currently deleted, %u reusable\n" msgstr "" -#: access/heap/vacuumlazy.c:821 commands/analyze.c:798 +#: access/heap/vacuumlazy.c:820 commands/analyze.c:798 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "durchschn. Leserate: %.3f MB/s, durchschn. Schreibrate: %.3f MB/s\n" -#: access/heap/vacuumlazy.c:825 commands/analyze.c:802 +#: access/heap/vacuumlazy.c:824 commands/analyze.c:802 msgid "I/O Timings:" msgstr "" -#: access/heap/vacuumlazy.c:827 commands/analyze.c:804 +#: access/heap/vacuumlazy.c:826 commands/analyze.c:804 #, c-format msgid " read=%.3f" msgstr "" -#: access/heap/vacuumlazy.c:830 commands/analyze.c:807 +#: access/heap/vacuumlazy.c:829 commands/analyze.c:807 #, c-format msgid " write=%.3f" msgstr "" -#: access/heap/vacuumlazy.c:834 +#: access/heap/vacuumlazy.c:833 #, c-format msgid "system usage: %s\n" msgstr "Systembenutzung: %s\n" -#: access/heap/vacuumlazy.c:836 +#: access/heap/vacuumlazy.c:835 #, fuzzy, c-format #| msgid "WAL usage: %ld records, %ld full page images, %llu bytes" msgid "WAL usage: %lld records, %lld full page images, %llu bytes" @@ -1266,104 +1264,104 @@ msgstr "aggressives Vacuum von »%s.%s«" msgid "vacuuming \"%s.%s\"" msgstr "Vacuum von »%s.%s«" -#: access/heap/vacuumlazy.c:1617 +#: access/heap/vacuumlazy.c:1627 #, fuzzy, c-format #| msgid "\"%s\": removed %d row versions in %d pages" msgid "\"%s\": removed %lld dead item identifiers in %u pages" msgstr "»%s«: %d Zeilenversionen in %d Seiten entfernt" -#: access/heap/vacuumlazy.c:1623 +#: access/heap/vacuumlazy.c:1633 #, c-format msgid "%lld dead row versions cannot be removed yet, oldest xmin: %u\n" msgstr "%lld tote Zeilenversionen können noch nicht entfernt werden, ältestes xmin: %u\n" -#: access/heap/vacuumlazy.c:1625 +#: access/heap/vacuumlazy.c:1635 #, c-format msgid "%u page removed.\n" msgid_plural "%u pages removed.\n" msgstr[0] "" msgstr[1] "" -#: access/heap/vacuumlazy.c:1629 +#: access/heap/vacuumlazy.c:1639 #, c-format msgid "Skipped %u page due to buffer pins, " msgid_plural "Skipped %u pages due to buffer pins, " msgstr[0] "%u Seite wegen Buffer-Pins übersprungen, " msgstr[1] "%u Seiten wegen Buffer-Pins übersprungen, " -#: access/heap/vacuumlazy.c:1633 +#: access/heap/vacuumlazy.c:1643 #, c-format msgid "%u frozen page.\n" msgid_plural "%u frozen pages.\n" msgstr[0] "%u eingefrorene Seite.\n" msgstr[1] "%u eingefrorene Seiten.\n" -#: access/heap/vacuumlazy.c:1637 commands/indexcmds.c:3986 +#: access/heap/vacuumlazy.c:1647 commands/indexcmds.c:3986 #: commands/indexcmds.c:4005 #, c-format msgid "%s." msgstr "%s." -#: access/heap/vacuumlazy.c:1640 +#: access/heap/vacuumlazy.c:1650 #, c-format msgid "\"%s\": found %lld removable, %lld nonremovable row versions in %u out of %u pages" msgstr "»%s«: %lld entfernbare, %lld nicht entfernbare Zeilenversionen in %u von %u Seiten gefunden" -#: access/heap/vacuumlazy.c:2145 +#: access/heap/vacuumlazy.c:2155 #, c-format msgid "\"%s\": index scan bypassed: %u pages from table (%.2f%% of total) have %lld dead item identifiers" msgstr "" -#: access/heap/vacuumlazy.c:2356 +#: access/heap/vacuumlazy.c:2366 #, fuzzy, c-format #| msgid "\"%s\": removed %d row versions in %d pages" msgid "\"%s\": removed %d dead item identifiers in %u pages" msgstr "»%s«: %d Zeilenversionen in %d Seiten entfernt" -#: access/heap/vacuumlazy.c:2603 +#: access/heap/vacuumlazy.c:2598 #, fuzzy, c-format #| msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" -msgid "abandoned index vacuuming of table \"%s.%s.%s\" as a failsafe after %d index scans" +msgid "bypassing nonessential maintenance of table \"%s.%s.%s\" as a failsafe after %d index scans" msgstr "automatisches Vacuum der Tabelle »%s.%s.%s«: Index-Scans: %d\n" -#: access/heap/vacuumlazy.c:2608 +#: access/heap/vacuumlazy.c:2603 #, fuzzy, c-format #| msgid "oldest xmin is far in the past" msgid "table's relfrozenxid or relminmxid is too far in the past" msgstr "älteste xmin ist weit in der Vergangenheit" -#: access/heap/vacuumlazy.c:2609 +#: access/heap/vacuumlazy.c:2604 #, c-format msgid "" "Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" "You might also need to consider other ways for VACUUM to keep up with the allocation of transaction IDs." msgstr "" -#: access/heap/vacuumlazy.c:2749 +#: access/heap/vacuumlazy.c:2744 #, c-format msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index cleanup (planned: %d)" msgstr[0] "%d parallelen Vacuum-Worker für Index-Cleanup gestartet (geplant: %d)" msgstr[1] "%d parallele Vacuum-Worker für Index-Cleanup gestartet (geplant: %d)" -#: access/heap/vacuumlazy.c:2755 +#: access/heap/vacuumlazy.c:2750 #, c-format msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" msgstr[0] "%d parallelen Vacuum-Worker für Index-Vacuum gestartet (geplant: %d)" msgstr[1] "%d parallele Vacuum-Worker für Index-Vacuum gestartet (geplant: %d)" -#: access/heap/vacuumlazy.c:3044 +#: access/heap/vacuumlazy.c:3039 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "Index »%s« gelesen und %d Zeilenversionen entfernt" -#: access/heap/vacuumlazy.c:3101 +#: access/heap/vacuumlazy.c:3096 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "Index »%s« enthält %.0f Zeilenversionen in %u Seiten" -#: access/heap/vacuumlazy.c:3105 +#: access/heap/vacuumlazy.c:3100 #, fuzzy, c-format #| msgid "" #| "%.0f index row versions were removed.\n" @@ -1379,69 +1377,69 @@ msgstr "" "%u Indexseiten wurden gelöscht, %u sind gegenwärtig wiederverwendbar.\n" "%s." -#: access/heap/vacuumlazy.c:3217 +#: access/heap/vacuumlazy.c:3212 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "»%s«: Truncate wird gestoppt wegen Sperrkonflikt" -#: access/heap/vacuumlazy.c:3283 +#: access/heap/vacuumlazy.c:3278 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "»%s«: von %u auf %u Seiten verkürzt" -#: access/heap/vacuumlazy.c:3348 +#: access/heap/vacuumlazy.c:3343 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "»%s«: Truncate wird ausgesetzt wegen Sperrkonflikt" -#: access/heap/vacuumlazy.c:3494 +#: access/heap/vacuumlazy.c:3489 #, c-format msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" msgstr "Paralleloption für Vacuum von »%s« wird deaktiviert --- Vacuum in temporären Tabellen kann nicht parallel ausgeführt werden" -#: access/heap/vacuumlazy.c:4249 +#: access/heap/vacuumlazy.c:4244 #, fuzzy, c-format #| msgid "while scanning block %u of relation \"%s.%s\"" msgid "while scanning block %u and offset %u of relation \"%s.%s\"" msgstr "beim Scannen von Block %u von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4252 +#: access/heap/vacuumlazy.c:4247 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "beim Scannen von Block %u von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4256 +#: access/heap/vacuumlazy.c:4251 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "beim Scannen von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4264 +#: access/heap/vacuumlazy.c:4259 #, fuzzy, c-format #| msgid "while vacuuming block %u of relation \"%s.%s\"" msgid "while vacuuming block %u and offset %u of relation \"%s.%s\"" msgstr "beim Vacuum von Block %u von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4267 +#: access/heap/vacuumlazy.c:4262 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "beim Vacuum von Block %u von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4271 +#: access/heap/vacuumlazy.c:4266 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "beim Vacuum von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4276 +#: access/heap/vacuumlazy.c:4271 #, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" msgstr "beim Vacuum von Index »%s« von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4281 +#: access/heap/vacuumlazy.c:4276 #, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" msgstr "beim Säubern von Index »%s« von Relation »%s.%s«" -#: access/heap/vacuumlazy.c:4287 +#: access/heap/vacuumlazy.c:4282 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "beim Trunkieren von Relation »%s.%s« auf %u Blöcke" @@ -1457,14 +1455,13 @@ msgid "index access method \"%s\" does not have a handler" msgstr "Indexzugriffsmethode »%s« hat keinen Handler" #: access/index/genam.c:486 -#, fuzzy, c-format -#| msgid "cannot reindex system catalogs concurrently" +#, c-format msgid "transaction aborted during system catalog scan" -msgstr "Systemkataloge können nicht nebenläufig reindiziert werden" +msgstr "Transaktion während eines Systemkatalog-Scans abgebrochen" #: access/index/indexam.c:142 catalog/objectaddress.c:1355 #: commands/indexcmds.c:2670 commands/tablecmds.c:267 commands/tablecmds.c:291 -#: commands/tablecmds.c:16525 commands/tablecmds.c:18227 +#: commands/tablecmds.c:16493 commands/tablecmds.c:18195 #, c-format msgid "\"%s\" is not an index" msgstr "»%s« ist kein Index" @@ -1545,10 +1542,9 @@ msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "innere Tupelgröße %zu überschreitet SP-GiST-Maximum %zu" #: access/spgist/spgvalidate.c:136 -#, fuzzy, c-format -#| msgid "anycompatiblerange type %s does not match anycompatible type %s" +#, c-format msgid "SP-GiST leaf data type %s does not match declared type %s" -msgstr "anycompatiblerange-Typ %s stimmt nicht mit anycompatible-Typ %s überein" +msgstr "SP-GiST-Leaf-Datentyp %s stimmt nicht mit deklariertem Typ %s überein" #: access/spgist/spgvalidate.c:302 #, c-format @@ -1562,8 +1558,8 @@ msgid "\"%s\" is an index" msgstr "»%s« ist ein Index" #: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 -#: access/table/table.c:150 catalog/aclchk.c:1799 commands/tablecmds.c:13226 -#: commands/tablecmds.c:16534 +#: access/table/table.c:150 catalog/aclchk.c:1799 commands/tablecmds.c:13198 +#: commands/tablecmds.c:16502 #, c-format msgid "\"%s\" is a composite type" msgstr "»%s« ist ein zusammengesetzter Typ" @@ -1578,7 +1574,7 @@ msgstr "tid (%u, %u) ist nicht gültig für Relation »%s«" msgid "%s cannot be empty." msgstr "%s kann nicht leer sein." -#: access/table/tableamapi.c:122 utils/misc/guc.c:12419 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12438 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s ist zu lang (maximal %d Zeichen)." @@ -3059,17 +3055,17 @@ msgstr "konnte nicht aus Logsegment %s bei Position %u lesen: %d von %zu gelesen msgid "WAL receiver process shutdown requested" msgstr "Herunterfahren des WAL-Receiver-Prozesses verlangt" -#: access/transam/xlog.c:12845 +#: access/transam/xlog.c:12853 #, c-format msgid "received promote request" msgstr "Anforderung zum Befördern empfangen" -#: access/transam/xlog.c:12858 +#: access/transam/xlog.c:12866 #, c-format msgid "promote trigger file found: %s" msgstr "Promote-Triggerdatei gefunden: %s" -#: access/transam/xlog.c:12866 +#: access/transam/xlog.c:12874 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "konnte »stat« für Promote-Triggerdatei »%s« nicht ausführen: %m" @@ -3131,7 +3127,7 @@ msgstr "Meinten Sie pg_stop_backup('f')?" #: commands/event_trigger.c:1869 commands/extension.c:1944 #: commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:712 #: executor/execExpr.c:2507 executor/execSRF.c:738 executor/functions.c:1058 -#: foreign/foreign.c:520 libpq/hba.c:2712 replication/logical/launcher.c:937 +#: foreign/foreign.c:520 libpq/hba.c:2718 replication/logical/launcher.c:937 #: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 #: replication/slotfuncs.c:255 replication/walsender.c:3291 #: storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 @@ -3140,8 +3136,8 @@ msgstr "Meinten Sie pg_stop_backup('f')?" #: utils/adt/jsonfuncs.c:2342 utils/adt/jsonfuncs.c:3803 #: utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:218 utils/adt/pgstatfuncs.c:477 #: utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 -#: utils/adt/varlena.c:4832 utils/fmgr/funcapi.c:74 utils/misc/guc.c:9974 -#: utils/mmgr/portalmem.c:1136 +#: utils/adt/varlena.c:4832 utils/fmgr/funcapi.c:74 utils/misc/guc.c:9993 +#: utils/mmgr/portalmem.c:1141 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "Funktion mit Mengenergebnis in einem Zusammenhang aufgerufen, der keine Mengenergebnisse verarbeiten kann" @@ -3149,14 +3145,14 @@ msgstr "Funktion mit Mengenergebnis in einem Zusammenhang aufgerufen, der keine #: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 #: commands/event_trigger.c:1873 commands/extension.c:1948 #: commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:716 -#: foreign/foreign.c:525 libpq/hba.c:2716 replication/logical/launcher.c:941 +#: foreign/foreign.c:525 libpq/hba.c:2722 replication/logical/launcher.c:941 #: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 #: replication/slotfuncs.c:259 replication/walsender.c:3295 #: storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:511 #: utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:222 #: utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 -#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4836 utils/misc/guc.c:9978 -#: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 +#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4836 utils/misc/guc.c:9997 +#: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1145 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "Materialisierungsmodus wird benötigt, ist aber in diesem Zusammenhang nicht erlaubt" @@ -3248,16 +3244,14 @@ msgid "record length %u at %X/%X too long" msgstr "Datensatzlänge %u bei %X/%X ist zu lang" #: access/transam/xlogreader.c:453 -#, fuzzy, c-format -#| msgid "there is no contrecord flag at %X/%X reading %X/%X" +#, c-format msgid "there is no contrecord flag at %X/%X" -msgstr "keine Contrecord-Flag bei %X/%X beim Lesen von %X/%X" +msgstr "keine Contrecord-Flag bei %X/%X" #: access/transam/xlogreader.c:466 -#, fuzzy, c-format -#| msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" +#, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" -msgstr "ungültige Contrecord-Länge %u bei %X/%X beim Lesen von %X/%X, erwartet wurde %u" +msgstr "ungültige Contrecord-Länge %u (erwartet %lld) bei %X/%X" #: access/transam/xlogreader.c:703 #, c-format @@ -3369,18 +3363,18 @@ msgstr "ungültiges komprimiertes Abbild bei %X/%X, Block %d" msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X benötigt eine Zweierpotenz zwischen 1 MB und 1 GB" -#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:845 tcop/postgres.c:3848 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3858 #, c-format msgid "--%s requires a value" msgstr "--%s benötigt einen Wert" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:850 tcop/postgres.c:3853 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3863 #, c-format msgid "-c %s requires a value" msgstr "-c %s benötigt einen Wert" -#: bootstrap/bootstrap.c:303 postmaster/postmaster.c:862 -#: postmaster/postmaster.c:875 +#: bootstrap/bootstrap.c:303 postmaster/postmaster.c:864 +#: postmaster/postmaster.c:877 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" @@ -3538,10 +3532,10 @@ msgstr "Large Object %u existiert nicht" #: commands/dbcommands.c:1529 commands/extension.c:1735 #: commands/extension.c:1745 commands/extension.c:1755 #: commands/extension.c:3055 commands/foreigncmds.c:539 -#: commands/foreigncmds.c:548 commands/functioncmds.c:578 -#: commands/functioncmds.c:744 commands/functioncmds.c:753 -#: commands/functioncmds.c:762 commands/functioncmds.c:771 -#: commands/functioncmds.c:2068 commands/functioncmds.c:2076 +#: commands/foreigncmds.c:548 commands/functioncmds.c:579 +#: commands/functioncmds.c:745 commands/functioncmds.c:754 +#: commands/functioncmds.c:763 commands/functioncmds.c:772 +#: commands/functioncmds.c:2069 commands/functioncmds.c:2077 #: commands/publicationcmds.c:90 commands/publicationcmds.c:133 #: commands/sequence.c:1266 commands/sequence.c:1276 commands/sequence.c:1286 #: commands/sequence.c:1296 commands/sequence.c:1306 commands/sequence.c:1316 @@ -3550,7 +3544,7 @@ msgstr "Large Object %u existiert nicht" #: commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 #: commands/subscriptioncmds.c:168 commands/subscriptioncmds.c:179 #: commands/subscriptioncmds.c:193 commands/subscriptioncmds.c:203 -#: commands/subscriptioncmds.c:213 commands/tablecmds.c:7514 +#: commands/subscriptioncmds.c:213 commands/tablecmds.c:7500 #: commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 #: commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 #: commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 @@ -3562,9 +3556,9 @@ msgstr "Large Object %u existiert nicht" #: commands/user.c:614 commands/user.c:622 commands/user.c:630 #: commands/user.c:638 commands/user.c:647 commands/user.c:655 #: commands/user.c:663 parser/parse_utilcmd.c:407 -#: replication/pgoutput/pgoutput.c:192 replication/pgoutput/pgoutput.c:213 -#: replication/pgoutput/pgoutput.c:227 replication/pgoutput/pgoutput.c:237 -#: replication/pgoutput/pgoutput.c:247 replication/walsender.c:882 +#: replication/pgoutput/pgoutput.c:189 replication/pgoutput/pgoutput.c:210 +#: replication/pgoutput/pgoutput.c:224 replication/pgoutput/pgoutput.c:234 +#: replication/pgoutput/pgoutput.c:244 replication/walsender.c:882 #: replication/walsender.c:893 replication/walsender.c:903 #, c-format msgid "conflicting or redundant options" @@ -3582,16 +3576,16 @@ msgstr "Klausel IN SCHEMA kann nicht verwendet werden, wenn GRANT/REVOKE ON SCHE #: catalog/aclchk.c:1544 catalog/catalog.c:553 catalog/objectaddress.c:1522 #: commands/analyze.c:390 commands/copy.c:741 commands/sequence.c:1701 -#: commands/tablecmds.c:6990 commands/tablecmds.c:7133 -#: commands/tablecmds.c:7183 commands/tablecmds.c:7257 -#: commands/tablecmds.c:7327 commands/tablecmds.c:7439 -#: commands/tablecmds.c:7533 commands/tablecmds.c:7592 -#: commands/tablecmds.c:7681 commands/tablecmds.c:7710 -#: commands/tablecmds.c:7865 commands/tablecmds.c:7947 -#: commands/tablecmds.c:8102 commands/tablecmds.c:8219 -#: commands/tablecmds.c:11568 commands/tablecmds.c:11750 -#: commands/tablecmds.c:11910 commands/tablecmds.c:13069 -#: commands/tablecmds.c:15631 commands/trigger.c:924 parser/analyze.c:2413 +#: commands/tablecmds.c:6976 commands/tablecmds.c:7119 +#: commands/tablecmds.c:7169 commands/tablecmds.c:7243 +#: commands/tablecmds.c:7313 commands/tablecmds.c:7425 +#: commands/tablecmds.c:7519 commands/tablecmds.c:7578 +#: commands/tablecmds.c:7667 commands/tablecmds.c:7696 +#: commands/tablecmds.c:7851 commands/tablecmds.c:7933 +#: commands/tablecmds.c:8089 commands/tablecmds.c:8207 +#: commands/tablecmds.c:11556 commands/tablecmds.c:11738 +#: commands/tablecmds.c:11898 commands/tablecmds.c:13041 +#: commands/tablecmds.c:15602 commands/trigger.c:924 parser/analyze.c:2413 #: parser/parse_relation.c:714 parser/parse_target.c:1064 #: parser/parse_type.c:144 parser/parse_utilcmd.c:3453 #: parser/parse_utilcmd.c:3488 parser/parse_utilcmd.c:3530 utils/adt/acl.c:2845 @@ -3601,7 +3595,7 @@ msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "Spalte »%s« von Relation »%s« existiert nicht" #: catalog/aclchk.c:1807 catalog/objectaddress.c:1362 commands/sequence.c:1139 -#: commands/tablecmds.c:249 commands/tablecmds.c:16498 utils/adt/acl.c:2053 +#: commands/tablecmds.c:249 commands/tablecmds.c:16466 utils/adt/acl.c:2053 #: utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 #: utils/adt/acl.c:2175 utils/adt/acl.c:2205 #, c-format @@ -4191,13 +4185,13 @@ msgstr "kann %s nicht löschen, weil andere Objekte davon abhängen" #: catalog/dependency.c:1187 catalog/dependency.c:1188 #: catalog/dependency.c:1194 catalog/dependency.c:1195 #: catalog/dependency.c:1206 catalog/dependency.c:1207 -#: commands/tablecmds.c:1306 commands/tablecmds.c:13687 +#: commands/tablecmds.c:1298 commands/tablecmds.c:13659 #: commands/tablespace.c:481 commands/user.c:1095 commands/view.c:495 #: libpq/auth.c:338 replication/syncrep.c:1043 storage/lmgr/deadlock.c:1152 #: storage/lmgr/proc.c:1433 utils/adt/acl.c:5250 utils/adt/jsonfuncs.c:618 -#: utils/adt/jsonfuncs.c:624 utils/misc/guc.c:7095 utils/misc/guc.c:7131 -#: utils/misc/guc.c:7201 utils/misc/guc.c:11381 utils/misc/guc.c:11415 -#: utils/misc/guc.c:11449 utils/misc/guc.c:11492 utils/misc/guc.c:11534 +#: utils/adt/jsonfuncs.c:624 utils/misc/guc.c:7114 utils/misc/guc.c:7150 +#: utils/misc/guc.c:7220 utils/misc/guc.c:11400 utils/misc/guc.c:11434 +#: utils/misc/guc.c:11468 utils/misc/guc.c:11511 utils/misc/guc.c:11553 #, c-format msgid "%s" msgstr "%s" @@ -4225,66 +4219,66 @@ msgstr[1] "Löschvorgang löscht ebenfalls %d weitere Objekte" msgid "constant of the type %s cannot be used here" msgstr "Konstante vom Typ %s kann hier nicht verwendet werden" -#: catalog/heap.c:331 +#: catalog/heap.c:332 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "keine Berechtigung, um »%s.%s« zu erzeugen" -#: catalog/heap.c:333 +#: catalog/heap.c:334 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Änderungen an Systemkatalogen sind gegenwärtig nicht erlaubt." -#: catalog/heap.c:510 commands/tablecmds.c:2343 commands/tablecmds.c:2980 -#: commands/tablecmds.c:6572 +#: catalog/heap.c:511 commands/tablecmds.c:2335 commands/tablecmds.c:2972 +#: commands/tablecmds.c:6567 #, c-format msgid "tables can have at most %d columns" msgstr "Tabellen können höchstens %d Spalten haben" -#: catalog/heap.c:528 commands/tablecmds.c:6880 +#: catalog/heap.c:529 commands/tablecmds.c:6866 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "Spaltenname »%s« steht im Konflikt mit dem Namen einer Systemspalte" -#: catalog/heap.c:544 +#: catalog/heap.c:545 #, c-format msgid "column name \"%s\" specified more than once" msgstr "Spaltenname »%s« mehrmals angegeben" #. translator: first %s is an integer not a name -#: catalog/heap.c:619 +#: catalog/heap.c:620 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "Partitionierungsschlüsselspalte %s hat Pseudotyp %s" -#: catalog/heap.c:624 +#: catalog/heap.c:625 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "Spalte »%s« hat Pseudotyp %s" -#: catalog/heap.c:655 +#: catalog/heap.c:656 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "zusammengesetzter Typ %s kann nicht Teil von sich selbst werden" #. translator: first %s is an integer not a name -#: catalog/heap.c:710 +#: catalog/heap.c:711 #, c-format msgid "no collation was derived for partition key column %s with collatable type %s" msgstr "für Partitionierungsschlüsselspalte %s mit sortierbarem Typ %s wurde keine Sortierfolge abgeleitet" -#: catalog/heap.c:716 commands/createas.c:203 commands/createas.c:506 +#: catalog/heap.c:717 commands/createas.c:203 commands/createas.c:506 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "für Spalte »%s« mit sortierbarem Typ %s wurde keine Sortierfolge abgeleitet" -#: catalog/heap.c:1198 catalog/index.c:868 commands/createas.c:411 -#: commands/tablecmds.c:3861 +#: catalog/heap.c:1199 catalog/index.c:870 commands/createas.c:411 +#: commands/tablecmds.c:3853 #, c-format msgid "relation \"%s\" already exists" msgstr "Relation »%s« existiert bereits" -#: catalog/heap.c:1214 catalog/pg_type.c:435 catalog/pg_type.c:773 +#: catalog/heap.c:1215 catalog/pg_type.c:435 catalog/pg_type.c:773 #: catalog/pg_type.c:920 commands/typecmds.c:249 commands/typecmds.c:261 #: commands/typecmds.c:757 commands/typecmds.c:1172 commands/typecmds.c:1398 #: commands/typecmds.c:1590 commands/typecmds.c:2563 @@ -4292,105 +4286,115 @@ msgstr "Relation »%s« existiert bereits" msgid "type \"%s\" already exists" msgstr "Typ »%s« existiert bereits" -#: catalog/heap.c:1215 +#: catalog/heap.c:1216 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "Eine Relation hat einen zugehörigen Typ mit dem selben Namen, daher müssen Sie einen Namen wählen, der nicht mit einem bestehenden Typ kollidiert." -#: catalog/heap.c:1244 +#: catalog/heap.c:1245 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "Heap-OID-Wert für pg_class ist im Binary-Upgrade-Modus nicht gesetzt" -#: catalog/heap.c:2451 +#: catalog/heap.c:2450 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "zur partitionierten Tabelle »%s« kann kein NO-INHERIT-Constraint hinzugefügt werden" -#: catalog/heap.c:2723 +#: catalog/heap.c:2722 #, c-format msgid "check constraint \"%s\" already exists" msgstr "Check-Constraint »%s« existiert bereits" -#: catalog/heap.c:2893 catalog/index.c:882 catalog/pg_constraint.c:670 -#: commands/tablecmds.c:8593 +#: catalog/heap.c:2892 catalog/index.c:884 catalog/pg_constraint.c:670 +#: commands/tablecmds.c:8581 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "Constraint »%s« existiert bereits für Relation »%s«" -#: catalog/heap.c:2900 +#: catalog/heap.c:2899 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "Constraint »%s« kollidiert mit nicht vererbtem Constraint für Relation »%s«" -#: catalog/heap.c:2911 +#: catalog/heap.c:2910 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "Constraint »%s« kollidiert mit vererbtem Constraint für Relation »%s«" -#: catalog/heap.c:2921 +#: catalog/heap.c:2920 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "Constraint »%s« kollidiert mit NOT-VALID-Constraint für Relation »%s«" -#: catalog/heap.c:2926 +#: catalog/heap.c:2925 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "Constraint »%s« wird mit geerbter Definition zusammengeführt" -#: catalog/heap.c:3028 +#: catalog/heap.c:3030 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "generierte Spalte »%s« kann nicht im Spaltengenerierungsausdruck verwendet werden" -#: catalog/heap.c:3030 +#: catalog/heap.c:3032 #, c-format msgid "A generated column cannot reference another generated column." msgstr "Eine generierte Spalte kann nicht auf eine andere generierte Spalte verweisen." -#: catalog/heap.c:3082 +#: catalog/heap.c:3038 +#, c-format +msgid "cannot use whole-row variable in column generation expression" +msgstr "Variable mit Verweis auf die ganze Zeile kann nicht im Spaltengenerierungsausdruck verwendet werden" + +#: catalog/heap.c:3039 +#, c-format +msgid "This would cause the generated column to depend on its own value." +msgstr "Dadurch würde die generierte Spalte von ihrem eigenen Wert abhängen." + +#: catalog/heap.c:3092 #, c-format msgid "generation expression is not immutable" msgstr "Generierungsausdruck ist nicht »immutable«" -#: catalog/heap.c:3110 rewrite/rewriteHandler.c:1245 +#: catalog/heap.c:3120 rewrite/rewriteHandler.c:1245 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "Spalte »%s« hat Typ %s, aber der Vorgabeausdruck hat Typ %s" -#: catalog/heap.c:3115 commands/prepare.c:367 parser/analyze.c:2637 +#: catalog/heap.c:3125 commands/prepare.c:367 parser/analyze.c:2637 #: parser/parse_target.c:595 parser/parse_target.c:883 #: parser/parse_target.c:893 rewrite/rewriteHandler.c:1250 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Sie müssen den Ausdruck umschreiben oder eine Typumwandlung vornehmen." -#: catalog/heap.c:3162 +#: catalog/heap.c:3172 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "nur Verweise auf Tabelle »%s« sind im Check-Constraint zugelassen" -#: catalog/heap.c:3460 +#: catalog/heap.c:3470 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "nicht unterstützte Kombination aus ON COMMIT und Fremdschlüssel" -#: catalog/heap.c:3461 +#: catalog/heap.c:3471 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "Tabelle »%s« verweist auf »%s«, aber sie haben nicht die gleiche ON-COMMIT-Einstellung." -#: catalog/heap.c:3466 +#: catalog/heap.c:3476 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "kann eine Tabelle, die in einen Fremdschlüssel-Constraint eingebunden ist, nicht leeren" -#: catalog/heap.c:3467 +#: catalog/heap.c:3477 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "Tabelle »%s« verweist auf »%s«." -#: catalog/heap.c:3469 +#: catalog/heap.c:3479 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Leeren Sie die Tabelle »%s« gleichzeitig oder verwenden Sie TRUNCATE ... CASCADE." @@ -4410,75 +4414,75 @@ msgstr "Primärschlüssel können keine Ausdrücke sein" msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "Primärschlüsselspalte »%s« ist nicht als NOT NULL markiert" -#: catalog/index.c:767 catalog/index.c:1903 +#: catalog/index.c:769 catalog/index.c:1905 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "benutzerdefinierte Indexe für Systemkatalogtabellen werden nicht unterstützt" -#: catalog/index.c:807 +#: catalog/index.c:809 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "nichtdeterministische Sortierfolgen werden von Operatorklasse »%s« nicht unterstützt" -#: catalog/index.c:822 +#: catalog/index.c:824 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "nebenläufige Indexerzeugung für Systemkatalogtabellen wird nicht unterstützt" -#: catalog/index.c:831 catalog/index.c:1282 +#: catalog/index.c:833 catalog/index.c:1284 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "nebenläufige Indexerzeugung für Exclusion-Constraints wird nicht unterstützt" -#: catalog/index.c:840 +#: catalog/index.c:842 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "Cluster-globale Indexe können nicht nach initdb erzeugt werden" -#: catalog/index.c:860 commands/createas.c:417 commands/sequence.c:154 +#: catalog/index.c:862 commands/createas.c:417 commands/sequence.c:154 #: parser/parse_utilcmd.c:211 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "Relation »%s« existiert bereits, wird übersprungen" -#: catalog/index.c:910 +#: catalog/index.c:912 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "Index-OID-Wert für pg_class ist im Binary-Upgrade-Modus nicht gesetzt" -#: catalog/index.c:2189 +#: catalog/index.c:2191 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY muss die erste Aktion in einer Transaktion sein" -#: catalog/index.c:3574 +#: catalog/index.c:3576 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "kann temporäre Tabellen anderer Sitzungen nicht reindizieren" -#: catalog/index.c:3585 commands/indexcmds.c:3426 +#: catalog/index.c:3587 commands/indexcmds.c:3426 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "ungültiger Index einer TOAST-Tabelle kann nicht reindiziert werden" -#: catalog/index.c:3601 commands/indexcmds.c:3306 commands/indexcmds.c:3450 -#: commands/tablecmds.c:3300 +#: catalog/index.c:3603 commands/indexcmds.c:3306 commands/indexcmds.c:3450 +#: commands/tablecmds.c:3292 #, c-format msgid "cannot move system relation \"%s\"" msgstr "Systemrelation »%s« kann nicht verschoben werden" -#: catalog/index.c:3745 +#: catalog/index.c:3747 #, c-format msgid "index \"%s\" was reindexed" msgstr "Index »%s« wurde neu indiziert" -#: catalog/index.c:3876 +#: catalog/index.c:3878 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "ungültiger Index »%s.%s« einer TOAST-Tabelle kann nicht reindizert werden, wird übersprungen" #: catalog/namespace.c:257 catalog/namespace.c:461 catalog/namespace.c:553 -#: commands/trigger.c:5132 +#: commands/trigger.c:5134 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "Verweise auf andere Datenbanken sind nicht implementiert: »%s.%s.%s«" @@ -4561,7 +4565,7 @@ msgstr "Textsuchekonfiguration »%s« existiert nicht" msgid "cross-database references are not implemented: %s" msgstr "Verweise auf andere Datenbanken sind nicht implementiert: %s" -#: catalog/namespace.c:2842 gram.y:15124 gram.y:17082 parser/parse_expr.c:817 +#: catalog/namespace.c:2842 gram.y:15126 gram.y:17084 parser/parse_expr.c:817 #: parser/parse_target.c:1263 #, c-format msgid "improper qualified name (too many dotted names): %s" @@ -4578,7 +4582,7 @@ msgid "cannot move objects into or out of TOAST schema" msgstr "Objekte können nicht in oder aus TOAST-Schemas verschoben werden" #: catalog/namespace.c:3051 commands/schemacmds.c:233 commands/schemacmds.c:313 -#: commands/tablecmds.c:1251 +#: commands/tablecmds.c:1243 #, c-format msgid "schema \"%s\" does not exist" msgstr "Schema »%s« existiert nicht" @@ -4614,33 +4618,33 @@ msgid "cannot create temporary tables during a parallel operation" msgstr "während einer parallelen Operation können keine temporären Tabellen erzeugt werden" #: catalog/namespace.c:4285 commands/tablespace.c:1217 commands/variable.c:64 -#: utils/misc/guc.c:11566 utils/misc/guc.c:11644 +#: utils/misc/guc.c:11585 utils/misc/guc.c:11663 #, c-format msgid "List syntax is invalid." msgstr "Die Listensyntax ist ungültig." #: catalog/objectaddress.c:1370 catalog/pg_publication.c:57 #: commands/policy.c:95 commands/policy.c:375 commands/policy.c:465 -#: commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2153 -#: commands/tablecmds.c:6021 commands/tablecmds.c:11685 +#: commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2145 +#: commands/tablecmds.c:6016 commands/tablecmds.c:11673 #, c-format msgid "\"%s\" is not a table" msgstr "»%s« ist keine Tabelle" #: catalog/objectaddress.c:1377 commands/tablecmds.c:255 -#: commands/tablecmds.c:6051 commands/tablecmds.c:16503 commands/view.c:119 +#: commands/tablecmds.c:6046 commands/tablecmds.c:16471 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "»%s« ist keine Sicht" #: catalog/objectaddress.c:1384 commands/matview.c:175 commands/tablecmds.c:261 -#: commands/tablecmds.c:16508 +#: commands/tablecmds.c:16476 #, c-format msgid "\"%s\" is not a materialized view" msgstr "»%s« ist keine materialisierte Sicht" #: catalog/objectaddress.c:1391 commands/tablecmds.c:279 -#: commands/tablecmds.c:6054 commands/tablecmds.c:16513 +#: commands/tablecmds.c:6049 commands/tablecmds.c:16481 #, c-format msgid "\"%s\" is not a foreign table" msgstr "»%s« ist keine Fremdtabelle" @@ -4660,7 +4664,7 @@ msgstr "Spaltenname muss qualifiziert werden" msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "Vorgabewert für Spalte »%s« von Relation »%s« existiert nicht" -#: catalog/objectaddress.c:1645 commands/functioncmds.c:136 +#: catalog/objectaddress.c:1645 commands/functioncmds.c:137 #: commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 #: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 #: utils/adt/acl.c:4411 @@ -4752,7 +4756,7 @@ msgstr "Länge der Argumentliste muss genau %d sein" msgid "must be owner of large object %u" msgstr "Berechtigung nur für Eigentümer des Large Object %u" -#: catalog/objectaddress.c:2503 commands/functioncmds.c:1555 +#: catalog/objectaddress.c:2503 commands/functioncmds.c:1556 #, c-format msgid "must be owner of type %s or type %s" msgstr "Berechtigung nur für Eigentümer des Typs %s oder des Typs %s" @@ -5189,7 +5193,7 @@ msgstr "»%s« ist eine Hypothetical-Set-Aggregatfunktion." msgid "cannot change number of direct arguments of an aggregate function" msgstr "die Anzahl direkter Argumente einer Aggregatfunktion kann nicht geändert werden" -#: catalog/pg_aggregate.c:858 commands/functioncmds.c:675 +#: catalog/pg_aggregate.c:858 commands/functioncmds.c:676 #: commands/typecmds.c:1992 commands/typecmds.c:2038 commands/typecmds.c:2090 #: commands/typecmds.c:2127 commands/typecmds.c:2161 commands/typecmds.c:2195 #: commands/typecmds.c:2229 commands/typecmds.c:2258 commands/typecmds.c:2345 @@ -5613,7 +5617,7 @@ msgstr "konnte Funktionsinformationen für Funktion »%s« nicht finden" #: catalog/pg_subscription.c:434 #, c-format msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." -msgstr "" +msgstr "Tabellensynchronisierung für Relation »%s« ist im Gang und hat Status »%c«." #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command @@ -5621,7 +5625,7 @@ msgstr "" #: catalog/pg_subscription.c:441 #, c-format msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." -msgstr "" +msgstr "Verwenden Sie %s um die Subskription zu aktivieren, falls noch nicht aktiviert, oder %s um die Subskription zu löschen." #: catalog/pg_type.c:136 catalog/pg_type.c:475 #, c-format @@ -5675,8 +5679,8 @@ msgstr "" msgid "invalid page in block %u of relation %s" msgstr "ungültige Seite in Block %u von Relation %s" -#: catalog/toasting.c:104 commands/indexcmds.c:667 commands/tablecmds.c:6033 -#: commands/tablecmds.c:16368 +#: catalog/toasting.c:104 commands/indexcmds.c:667 commands/tablecmds.c:6028 +#: commands/tablecmds.c:16336 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "»%s« ist keine Tabelle oder materialisierte Sicht" @@ -5761,7 +5765,7 @@ msgstr "Serialisierungsfunktionen dürfen nur angegeben werden, wenn der Überga msgid "must specify both or neither of serialization and deserialization functions" msgstr "Serialisierungs- und Deserialisierungsfunktionen müssen zusammen angegeben werden" -#: commands/aggregatecmds.c:437 commands/functioncmds.c:623 +#: commands/aggregatecmds.c:437 commands/functioncmds.c:624 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "Parameter »parallel« muss SAFE, RESTRICTED oder UNSAFE sein" @@ -5906,10 +5910,9 @@ msgid "automatic analyze of table \"%s.%s.%s\"\n" msgstr "automatisches Analysieren der Tabelle »%s.%s.%s«" #: commands/analyze.c:811 -#, fuzzy, c-format -#| msgid "system usage: %s\n" +#, c-format msgid "system usage: %s" -msgstr "Systembenutzung: %s\n" +msgstr "Systembenutzung: %s" #: commands/analyze.c:1350 #, c-format @@ -5986,7 +5989,7 @@ msgstr "eine partitionierte Tabelle kann nicht geclustert werden" msgid "there is no previously clustered index for table \"%s\"" msgstr "es gibt keinen bereits geclusterten Index für Tabelle »%s«" -#: commands/cluster.c:187 commands/tablecmds.c:13524 commands/tablecmds.c:15392 +#: commands/cluster.c:187 commands/tablecmds.c:13496 commands/tablecmds.c:15364 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "Index »%s« für Tabelle »%s« existiert nicht" @@ -6001,7 +6004,7 @@ msgstr "globaler Katalog kann nicht geclustert werden" msgid "cannot vacuum temporary tables of other sessions" msgstr "temporäre Tabellen anderer Sitzungen können nicht gevacuumt werden" -#: commands/cluster.c:456 commands/tablecmds.c:15402 +#: commands/cluster.c:456 commands/tablecmds.c:15374 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "»%s« ist kein Index für Tabelle »%s«" @@ -6171,10 +6174,9 @@ msgid "encoding conversion function %s must return type %s" msgstr "Kodierungskonversionsfunktion %s muss Typ %s zurückgeben" #: commands/conversioncmds.c:130 -#, fuzzy, c-format -#| msgid "encoding conversion function %s must return type %s" +#, c-format msgid "encoding conversion function %s returned incorrect result for empty input" -msgstr "Kodierungskonversionsfunktion %s muss Typ %s zurückgeben" +msgstr "Kodierungskonversionsfunktion %s hat falsches Ergebnis für leere Eingabe zurückgegeben" #: commands/copy.c:86 #, c-format @@ -6337,15 +6339,15 @@ msgstr "Spalte »%s« ist eine generierte Spalte" msgid "Generated columns cannot be used in COPY." msgstr "Generierte Spalten können nicht in COPY verwendet werden." -#: commands/copy.c:746 commands/indexcmds.c:1754 commands/statscmds.c:250 -#: commands/tablecmds.c:2374 commands/tablecmds.c:3030 -#: commands/tablecmds.c:3523 parser/parse_relation.c:3593 +#: commands/copy.c:746 commands/indexcmds.c:1754 commands/statscmds.c:238 +#: commands/tablecmds.c:2366 commands/tablecmds.c:3022 +#: commands/tablecmds.c:3515 parser/parse_relation.c:3593 #: parser/parse_relation.c:3613 utils/adt/tsvector_op.c:2680 #, c-format msgid "column \"%s\" does not exist" msgstr "Spalte »%s« existiert nicht" -#: commands/copy.c:753 commands/tablecmds.c:2400 commands/trigger.c:933 +#: commands/copy.c:753 commands/tablecmds.c:2392 commands/trigger.c:933 #: parser/parse_target.c:1080 parser/parse_target.c:1091 #, c-format msgid "column \"%s\" specified more than once" @@ -6978,7 +6980,7 @@ msgstr "Argument von %s muss ein Typname sein" msgid "invalid argument for %s: \"%s\"" msgstr "ungültiges Argument für %s: »%s«" -#: commands/dropcmds.c:100 commands/functioncmds.c:1384 +#: commands/dropcmds.c:100 commands/functioncmds.c:1385 #: utils/adt/ruleutils.c:2806 #, c-format msgid "\"%s\" is an aggregate function" @@ -6989,14 +6991,14 @@ msgstr "»%s« ist eine Aggregatfunktion" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Verwenden Sie DROP AGGREGATE, um Aggregatfunktionen zu löschen." -#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3607 -#: commands/tablecmds.c:3765 commands/tablecmds.c:3810 -#: commands/tablecmds.c:15829 tcop/utility.c:1291 +#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3599 +#: commands/tablecmds.c:3757 commands/tablecmds.c:3802 +#: commands/tablecmds.c:15797 tcop/utility.c:1291 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "Relation »%s« existiert nicht, wird übersprungen" -#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1256 +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1248 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "Schema »%s« existiert nicht, wird übersprungen" @@ -7021,7 +7023,7 @@ msgstr "Sortierfolge »%s« existiert nicht, wird übersprungen" msgid "conversion \"%s\" does not exist, skipping" msgstr "Konversion »%s« existiert nicht, wird übersprungen" -#: commands/dropcmds.c:293 commands/statscmds.c:641 +#: commands/dropcmds.c:293 commands/statscmds.c:630 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "Statistikobjekt »%s« existiert nicht, wird übersprungen" @@ -7291,7 +7293,7 @@ msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "Parameter »%s« kann nicht in einer sekundären Erweitungskontrolldatei gesetzt werden" #: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 -#: utils/misc/guc.c:7073 +#: utils/misc/guc.c:7092 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "Parameter »%s« erfordert einen Boole’schen Wert" @@ -7571,355 +7573,353 @@ msgstr "Fremddaten-Wrapper »%s« unterstützt IMPORT FOREIGN SCHEMA nicht" msgid "importing foreign table \"%s\"" msgstr "importiere Fremdtabelle »%s«" -#: commands/functioncmds.c:107 +#: commands/functioncmds.c:108 #, c-format msgid "SQL function cannot return shell type %s" msgstr "SQL-Funktion kann keinen Hüllen-Rückgabetyp %s haben" -#: commands/functioncmds.c:112 +#: commands/functioncmds.c:113 #, c-format msgid "return type %s is only a shell" msgstr "Rückgabetyp %s ist nur eine Hülle" -#: commands/functioncmds.c:142 parser/parse_type.c:354 +#: commands/functioncmds.c:143 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "Typmodifikator kann für Hüllentyp »%s« nicht angegeben werden" -#: commands/functioncmds.c:148 +#: commands/functioncmds.c:149 #, c-format msgid "type \"%s\" is not yet defined" msgstr "Typ »%s« ist noch nicht definiert" -#: commands/functioncmds.c:149 +#: commands/functioncmds.c:150 #, c-format msgid "Creating a shell type definition." msgstr "Hüllentypdefinition wird erzeugt." -#: commands/functioncmds.c:243 +#: commands/functioncmds.c:244 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "SQL-Funktion kann keinen Hüllentyp %s annehmen" -#: commands/functioncmds.c:249 +#: commands/functioncmds.c:250 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "Aggregatfunktion kann keinen Hüllentyp %s annehmen" -#: commands/functioncmds.c:254 +#: commands/functioncmds.c:255 #, c-format msgid "argument type %s is only a shell" msgstr "Argumenttyp %s ist nur eine Hülle" -#: commands/functioncmds.c:264 +#: commands/functioncmds.c:265 #, c-format msgid "type %s does not exist" msgstr "Typ %s existiert nicht" -#: commands/functioncmds.c:278 +#: commands/functioncmds.c:279 #, c-format msgid "aggregates cannot accept set arguments" msgstr "Aggregatfunktionen können keine SETOF-Argumente haben" -#: commands/functioncmds.c:282 +#: commands/functioncmds.c:283 #, c-format msgid "procedures cannot accept set arguments" msgstr "Prozeduren können keine SETOF-Argumente haben" -#: commands/functioncmds.c:286 +#: commands/functioncmds.c:287 #, c-format msgid "functions cannot accept set arguments" msgstr "Funktionen können keine SETOF-Argumente haben" -#: commands/functioncmds.c:306 +#: commands/functioncmds.c:307 #, c-format msgid "VARIADIC parameter must be the last signature parameter" msgstr "VARIADIC-Parameter muss der letzte Signaturparameter sein" -#: commands/functioncmds.c:336 +#: commands/functioncmds.c:337 #, c-format msgid "VARIADIC parameter must be an array" msgstr "VARIADIC-Parameter muss ein Array sein" -#: commands/functioncmds.c:376 +#: commands/functioncmds.c:377 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "Parametername »%s« mehrmals angegeben" -#: commands/functioncmds.c:394 +#: commands/functioncmds.c:395 #, c-format msgid "only input parameters can have default values" msgstr "nur Eingabeparameter können Vorgabewerte haben" -#: commands/functioncmds.c:409 +#: commands/functioncmds.c:410 #, c-format msgid "cannot use table references in parameter default value" msgstr "Tabellenverweise können nicht in Parametervorgabewerten verwendet werden" -#: commands/functioncmds.c:433 +#: commands/functioncmds.c:434 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "Eingabeparameter hinter einem mit Vorgabewert müssen auch einen Vorgabewert haben" -#: commands/functioncmds.c:585 commands/functioncmds.c:776 +#: commands/functioncmds.c:586 commands/functioncmds.c:777 #, c-format msgid "invalid attribute in procedure definition" msgstr "ungültiges Attribut in Prozedurdefinition" -#: commands/functioncmds.c:681 +#: commands/functioncmds.c:682 #, c-format msgid "support function %s must return type %s" msgstr "Unterstützungsfunktion %s muss Rückgabetyp %s haben" -#: commands/functioncmds.c:692 +#: commands/functioncmds.c:693 #, c-format msgid "must be superuser to specify a support function" msgstr "nur Superuser können eine Support-Funktion angeben" -#: commands/functioncmds.c:825 commands/functioncmds.c:1429 +#: commands/functioncmds.c:826 commands/functioncmds.c:1430 #, c-format msgid "COST must be positive" msgstr "COST muss positiv sein" -#: commands/functioncmds.c:833 commands/functioncmds.c:1437 +#: commands/functioncmds.c:834 commands/functioncmds.c:1438 #, c-format msgid "ROWS must be positive" msgstr "ROWS muss positiv sein" -#: commands/functioncmds.c:862 +#: commands/functioncmds.c:863 #, c-format msgid "no function body specified" msgstr "kein Funktionskörper angegeben" -#: commands/functioncmds.c:867 +#: commands/functioncmds.c:868 #, c-format msgid "duplicate function body specified" msgstr "doppelter Funktionskörper angegeben" -#: commands/functioncmds.c:872 +#: commands/functioncmds.c:873 #, c-format msgid "inline SQL function body only valid for language SQL" -msgstr "" +msgstr "Inline-SQL-Funktionskörper ist nur gültig für Sprache SQL" -#: commands/functioncmds.c:914 -#, fuzzy, c-format -#| msgid "event trigger functions cannot have declared arguments" +#: commands/functioncmds.c:915 +#, c-format msgid "SQL function with unquoted function body cannot have polymorphic arguments" -msgstr "Ereignistriggerfunktionen können keine deklarierten Argumente haben" +msgstr "SQL-Funktion mit Funktionsrumpf nicht in Anführungszeichen kann keine polymorphen Argumente haben" -#: commands/functioncmds.c:940 commands/functioncmds.c:959 -#, fuzzy, c-format -#| msgid "%s is not allowed in a SQL function" +#: commands/functioncmds.c:941 commands/functioncmds.c:960 +#, c-format msgid "%s is not yet supported in unquoted SQL function body" -msgstr "%s ist in SQL-Funktionen nicht erlaubt" +msgstr "%s ist in SQL-Funktionen nicht in Anführungszeichen noch nicht erlaubt" -#: commands/functioncmds.c:987 +#: commands/functioncmds.c:988 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "nur ein AS-Element benötigt für Sprache »%s«" -#: commands/functioncmds.c:1092 +#: commands/functioncmds.c:1093 #, c-format msgid "no language specified" msgstr "keine Sprache angegeben" -#: commands/functioncmds.c:1100 commands/functioncmds.c:2102 +#: commands/functioncmds.c:1101 commands/functioncmds.c:2103 #: commands/proclang.c:237 #, c-format msgid "language \"%s\" does not exist" msgstr "Sprache »%s« existiert nicht" -#: commands/functioncmds.c:1102 commands/functioncmds.c:2104 +#: commands/functioncmds.c:1103 commands/functioncmds.c:2105 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "Verwenden Sie CREATE EXTENSION, um die Sprache in die Datenbank zu laden." -#: commands/functioncmds.c:1137 commands/functioncmds.c:1421 +#: commands/functioncmds.c:1138 commands/functioncmds.c:1422 #, c-format msgid "only superuser can define a leakproof function" msgstr "nur Superuser können eine »leakproof«-Funktion definieren" -#: commands/functioncmds.c:1188 +#: commands/functioncmds.c:1189 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "Ergebnistyp der Funktion muss %s sein wegen OUT-Parametern" -#: commands/functioncmds.c:1201 +#: commands/functioncmds.c:1202 #, c-format msgid "function result type must be specified" msgstr "Ergebnistyp der Funktion muss angegeben werden" -#: commands/functioncmds.c:1255 commands/functioncmds.c:1441 +#: commands/functioncmds.c:1256 commands/functioncmds.c:1442 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "ROWS ist nicht anwendbar, wenn die Funktion keine Ergebnismenge zurückgibt" -#: commands/functioncmds.c:1541 +#: commands/functioncmds.c:1542 #, c-format msgid "source data type %s is a pseudo-type" msgstr "Quelldatentyp %s ist ein Pseudotyp" -#: commands/functioncmds.c:1547 +#: commands/functioncmds.c:1548 #, c-format msgid "target data type %s is a pseudo-type" msgstr "Zieldatentyp %s ist ein Pseudotyp" -#: commands/functioncmds.c:1571 +#: commands/functioncmds.c:1572 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "Typumwandlung wird ignoriert werden, weil der Quelldatentyp eine Domäne ist" -#: commands/functioncmds.c:1576 +#: commands/functioncmds.c:1577 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "Typumwandlung wird ignoriert werden, weil der Zieldatentyp eine Domäne ist" -#: commands/functioncmds.c:1601 +#: commands/functioncmds.c:1602 #, c-format msgid "cast function must take one to three arguments" msgstr "Typumwandlungsfunktion muss ein bis drei Argumente haben" -#: commands/functioncmds.c:1605 +#: commands/functioncmds.c:1606 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "Argument der Typumwandlungsfunktion muss mit Quelldatentyp übereinstimmen oder in ihn binär-umwandelbar sein" -#: commands/functioncmds.c:1609 +#: commands/functioncmds.c:1610 #, c-format msgid "second argument of cast function must be type %s" msgstr "zweites Argument der Typumwandlungsfunktion muss Typ %s haben" -#: commands/functioncmds.c:1614 +#: commands/functioncmds.c:1615 #, c-format msgid "third argument of cast function must be type %s" msgstr "drittes Argument der Typumwandlungsfunktion muss Typ %s haben" -#: commands/functioncmds.c:1619 +#: commands/functioncmds.c:1620 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "Rückgabetyp der Typumwandlungsfunktion muss mit Zieldatentyp übereinstimmen oder in ihn binär-umwandelbar sein" -#: commands/functioncmds.c:1630 +#: commands/functioncmds.c:1631 #, c-format msgid "cast function must not be volatile" msgstr "Typumwandlungsfunktion darf nicht VOLATILE sein" -#: commands/functioncmds.c:1635 +#: commands/functioncmds.c:1636 #, c-format msgid "cast function must be a normal function" msgstr "Typumwandlungsfunktion muss eine normale Funktion sein" -#: commands/functioncmds.c:1639 +#: commands/functioncmds.c:1640 #, c-format msgid "cast function must not return a set" msgstr "Typumwandlungsfunktion darf keine Ergebnismenge zurückgeben" -#: commands/functioncmds.c:1665 +#: commands/functioncmds.c:1666 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "nur Superuser können Typumwandlungen mit WITHOUT FUNCTION erzeugen" -#: commands/functioncmds.c:1680 +#: commands/functioncmds.c:1681 #, c-format msgid "source and target data types are not physically compatible" msgstr "Quelldatentyp und Zieldatentyp sind nicht physikalisch kompatibel" -#: commands/functioncmds.c:1695 +#: commands/functioncmds.c:1696 #, c-format msgid "composite data types are not binary-compatible" msgstr "zusammengesetzte Datentypen sind nicht binärkompatibel" -#: commands/functioncmds.c:1701 +#: commands/functioncmds.c:1702 #, c-format msgid "enum data types are not binary-compatible" msgstr "Enum-Datentypen sind nicht binärkompatibel" -#: commands/functioncmds.c:1707 +#: commands/functioncmds.c:1708 #, c-format msgid "array data types are not binary-compatible" msgstr "Array-Datentypen sind nicht binärkompatibel" -#: commands/functioncmds.c:1724 +#: commands/functioncmds.c:1725 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "Domänendatentypen dürfen nicht als binärkompatibel markiert werden" -#: commands/functioncmds.c:1734 +#: commands/functioncmds.c:1735 #, c-format msgid "source data type and target data type are the same" msgstr "Quelldatentyp und Zieldatentyp sind der selbe" -#: commands/functioncmds.c:1767 +#: commands/functioncmds.c:1768 #, c-format msgid "transform function must not be volatile" msgstr "Transformationsfunktion darf nicht VOLATILE sein" -#: commands/functioncmds.c:1771 +#: commands/functioncmds.c:1772 #, c-format msgid "transform function must be a normal function" msgstr "Transformationsfunktion muss eine normale Funktion sein" -#: commands/functioncmds.c:1775 +#: commands/functioncmds.c:1776 #, c-format msgid "transform function must not return a set" msgstr "Transformationsfunktion darf keine Ergebnismenge zurückgeben" -#: commands/functioncmds.c:1779 +#: commands/functioncmds.c:1780 #, c-format msgid "transform function must take one argument" msgstr "Transformationsfunktion muss ein Argument haben" -#: commands/functioncmds.c:1783 +#: commands/functioncmds.c:1784 #, c-format msgid "first argument of transform function must be type %s" msgstr "erstes Argument der Transformationsfunktion muss Typ %s haben" -#: commands/functioncmds.c:1822 +#: commands/functioncmds.c:1823 #, c-format msgid "data type %s is a pseudo-type" msgstr "Datentyp %s ist ein Pseudotyp" -#: commands/functioncmds.c:1828 +#: commands/functioncmds.c:1829 #, c-format msgid "data type %s is a domain" msgstr "Datentyp %s ist eine Domäne" -#: commands/functioncmds.c:1868 +#: commands/functioncmds.c:1869 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "Rückgabetyp der FROM-SQL-Funktion muss %s sein" -#: commands/functioncmds.c:1894 +#: commands/functioncmds.c:1895 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "Rückgabetyp der TO-SQL-Funktion muss der zu transformierende Datentyp sein" -#: commands/functioncmds.c:1923 +#: commands/functioncmds.c:1924 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "Transformation für Typ %s Sprache »%s« existiert bereits" -#: commands/functioncmds.c:2010 +#: commands/functioncmds.c:2011 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "Transformation für Typ %s Sprache »%s« existiert nicht" -#: commands/functioncmds.c:2034 +#: commands/functioncmds.c:2035 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "Funktion %s existiert bereits in Schema »%s«" -#: commands/functioncmds.c:2089 +#: commands/functioncmds.c:2090 #, c-format msgid "no inline code specified" msgstr "kein Inline-Code angegeben" -#: commands/functioncmds.c:2135 +#: commands/functioncmds.c:2136 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "Sprache »%s« unterstützt das Ausführen von Inline-Code nicht" -#: commands/functioncmds.c:2252 +#: commands/functioncmds.c:2253 #, c-format msgid "cannot pass more than %d argument to a procedure" msgid_plural "cannot pass more than %d arguments to a procedure" @@ -7961,7 +7961,7 @@ msgstr "kann keine Indexe für temporäre Tabellen anderer Sitzungen erzeugen" msgid "cannot specify default tablespace for partitioned relations" msgstr "für partitionierte Relationen kann kein Standard-Tablespace angegeben werden" -#: commands/indexcmds.c:777 commands/tablecmds.c:783 commands/tablecmds.c:3307 +#: commands/indexcmds.c:777 commands/tablecmds.c:783 commands/tablecmds.c:3299 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "nur geteilte Relationen können in den Tablespace »pg_global« gelegt werden" @@ -8077,7 +8077,7 @@ msgstr "inkludierte Spalte unterstützt die Optionen NULLS FIRST/LAST nicht" msgid "could not determine which collation to use for index expression" msgstr "konnte die für den Indexausdruck zu verwendende Sortierfolge nicht bestimmen" -#: commands/indexcmds.c:1876 commands/tablecmds.c:16834 commands/typecmds.c:810 +#: commands/indexcmds.c:1876 commands/tablecmds.c:16802 commands/typecmds.c:810 #: parser/parse_expr.c:2680 parser/parse_type.c:566 parser/parse_utilcmd.c:3813 #: utils/adt/misc.c:599 #, c-format @@ -8114,8 +8114,8 @@ msgstr "Zugriffsmethode »%s« unterstützt die Optionen ASC/DESC nicht" msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "Zugriffsmethode »%s« unterstützt die Optionen NULLS FIRST/LAST nicht" -#: commands/indexcmds.c:2031 commands/tablecmds.c:16859 -#: commands/tablecmds.c:16865 commands/typecmds.c:2318 +#: commands/indexcmds.c:2031 commands/tablecmds.c:16827 +#: commands/tablecmds.c:16833 commands/typecmds.c:2318 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "Datentyp %s hat keine Standardoperatorklasse für Zugriffsmethode »%s«" @@ -8208,17 +8208,16 @@ msgid "cannot reindex this type of relation concurrently" msgstr "diese Art Relation kann nicht nebenläufig reindiziert werden" #: commands/indexcmds.c:3501 -#, fuzzy, c-format -#| msgid "cannot move system relation \"%s\"" +#, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" -msgstr "Systemrelation »%s« kann nicht verschoben werden" +msgstr "nicht geteilte Relation kann nicht nach Tablespace »%s« verschoben werden" #: commands/indexcmds.c:3984 commands/indexcmds.c:3996 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "Index »%s.%s« wurde neu indiziert" -#: commands/lockcmds.c:92 commands/tablecmds.c:6024 commands/trigger.c:289 +#: commands/lockcmds.c:92 commands/tablecmds.c:6019 commands/trigger.c:289 #: rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:938 #, c-format msgid "\"%s\" is not a table or view" @@ -8527,10 +8526,10 @@ msgid "operator attribute \"%s\" cannot be changed" msgstr "Operator-Attribut »%s« kann nicht geändert werden" #: commands/policy.c:88 commands/policy.c:381 commands/policy.c:471 -#: commands/statscmds.c:150 commands/tablecmds.c:1569 commands/tablecmds.c:2158 -#: commands/tablecmds.c:3417 commands/tablecmds.c:6003 -#: commands/tablecmds.c:8872 commands/tablecmds.c:16424 -#: commands/tablecmds.c:16459 commands/trigger.c:295 commands/trigger.c:1271 +#: commands/statscmds.c:150 commands/tablecmds.c:1561 commands/tablecmds.c:2150 +#: commands/tablecmds.c:3409 commands/tablecmds.c:5998 +#: commands/tablecmds.c:8860 commands/tablecmds.c:16392 +#: commands/tablecmds.c:16427 commands/trigger.c:295 commands/trigger.c:1271 #: commands/trigger.c:1380 rewrite/rewriteDefine.c:277 #: rewrite/rewriteDefine.c:943 rewrite/rewriteRemove.c:80 #, c-format @@ -8853,8 +8852,8 @@ msgstr "Sequenz muss im selben Schema wie die verknüpfte Tabelle sein" msgid "cannot change ownership of identity sequence" msgstr "kann Eigentümer einer Identitätssequenz nicht ändern" -#: commands/sequence.c:1717 commands/tablecmds.c:13216 -#: commands/tablecmds.c:15849 +#: commands/sequence.c:1717 commands/tablecmds.c:13188 +#: commands/tablecmds.c:15817 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "Sequenz »%s« ist mit Tabelle »%s« verknüpft." @@ -8884,63 +8883,57 @@ msgstr "Statistikobjekt »%s« existiert bereits" msgid "cannot have more than %d columns in statistics" msgstr "Statistiken können nicht mehr als %d Spalten enthalten" -#: commands/statscmds.c:236 -#, c-format -msgid "only simple column references and expressions are allowed in CREATE STATISTICS" -msgstr "in CREATE STATISTICS sind nur einfache Spaltenverweise und Ausdrücke erlaubt" - -#: commands/statscmds.c:258 +#: commands/statscmds.c:246 #, c-format msgid "statistics creation on system columns is not supported" msgstr "Statistikerzeugung für Systemspalten wird nicht unterstützt" -#: commands/statscmds.c:265 +#: commands/statscmds.c:253 #, c-format msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" msgstr "Spalte »%s« kann nicht in Statistiken verwendet werden, weil ihr Typ %s keine Standardoperatorklasse für btree hat" -#: commands/statscmds.c:293 -#, fuzzy, c-format -#| msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" +#: commands/statscmds.c:282 +#, c-format msgid "expression cannot be used in multivariate statistics because its type %s has no default btree operator class" -msgstr "Spalte »%s« kann nicht in Statistiken verwendet werden, weil ihr Typ %s keine Standardoperatorklasse für btree hat" +msgstr "Ausdruck kann nicht in multivariaten Statistiken verwendet werden, weil sein Typ %s keine Standardoperatorklasse für btree hat" -#: commands/statscmds.c:314 +#: commands/statscmds.c:303 #, c-format msgid "when building statistics on a single expression, statistics kinds may not be specified" msgstr "" -#: commands/statscmds.c:343 +#: commands/statscmds.c:332 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "unbekannte Statistikart »%s«" -#: commands/statscmds.c:372 +#: commands/statscmds.c:361 #, c-format msgid "extended statistics require at least 2 columns" msgstr "erweiterte Statistiken benötigen mindestens 2 Spalten" -#: commands/statscmds.c:390 +#: commands/statscmds.c:379 #, c-format msgid "duplicate column name in statistics definition" msgstr "doppelter Spaltenname in Statistikdefinition" -#: commands/statscmds.c:425 +#: commands/statscmds.c:414 #, c-format msgid "duplicate expression in statistics definition" msgstr "doppelter Ausdruck in Statistikdefinition" -#: commands/statscmds.c:606 commands/tablecmds.c:7844 +#: commands/statscmds.c:595 commands/tablecmds.c:7830 #, c-format msgid "statistics target %d is too low" msgstr "Statistikziel %d ist zu niedrig" -#: commands/statscmds.c:614 commands/tablecmds.c:7852 +#: commands/statscmds.c:603 commands/tablecmds.c:7838 #, c-format msgid "lowering statistics target to %d" msgstr "setze Statistikziel auf %d herab" -#: commands/statscmds.c:637 +#: commands/statscmds.c:626 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "Statistikobjekt »%s.%s« existiert nicht, wird übersprungen" @@ -8970,7 +8963,7 @@ msgid "must be superuser to create subscriptions" msgstr "nur Superuser können Subskriptionen erzeugen" #: commands/subscriptioncmds.c:471 commands/subscriptioncmds.c:568 -#: replication/logical/tablesync.c:970 replication/logical/worker.c:3098 +#: replication/logical/tablesync.c:970 replication/logical/worker.c:3143 #, c-format msgid "could not connect to the publisher: %s" msgstr "konnte nicht mit dem Publikationsserver verbinden: %s" @@ -9128,7 +9121,7 @@ msgstr "materialisierte Sicht »%s« existiert nicht, wird übersprungen" msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Verwenden Sie DROP MATERIALIZED VIEW, um eine materialisierte Sicht zu löschen." -#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18270 +#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18238 #: parser/parse_utilcmd.c:2257 #, c-format msgid "index \"%s\" does not exist" @@ -9152,8 +9145,8 @@ msgstr "»%s« ist kein Typ" msgid "Use DROP TYPE to remove a type." msgstr "Verwenden Sie DROP TYPE, um einen Typen zu löschen." -#: commands/tablecmds.c:277 commands/tablecmds.c:13055 -#: commands/tablecmds.c:15548 +#: commands/tablecmds.c:277 commands/tablecmds.c:13027 +#: commands/tablecmds.c:15520 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "Fremdtabelle »%s« existiert nicht" @@ -9177,120 +9170,120 @@ msgstr "ON COMMIT kann nur mit temporären Tabellen verwendet werden" msgid "cannot create temporary table within security-restricted operation" msgstr "kann temporäre Tabelle nicht in einer sicherheitsbeschränkten Operation erzeugen" -#: commands/tablecmds.c:731 commands/tablecmds.c:14339 +#: commands/tablecmds.c:731 commands/tablecmds.c:14311 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "von der Relation »%s« würde mehrmals geerbt werden" -#: commands/tablecmds.c:924 +#: commands/tablecmds.c:916 #, c-format msgid "specifying a table access method is not supported on a partitioned table" msgstr "Angabe einer Tabellenzugriffsmethode wird für partitionierte Tabellen nicht unterstützt" -#: commands/tablecmds.c:1020 +#: commands/tablecmds.c:1012 #, c-format msgid "\"%s\" is not partitioned" msgstr "»%s« ist nicht partitioniert" -#: commands/tablecmds.c:1115 +#: commands/tablecmds.c:1107 #, c-format msgid "cannot partition using more than %d columns" msgstr "Partitionierung kann nicht mehr als %d Spalten verwenden" -#: commands/tablecmds.c:1171 +#: commands/tablecmds.c:1163 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "kann keine Fremdpartition der partitionierten Tabelle »%s« erzeugen" -#: commands/tablecmds.c:1173 +#: commands/tablecmds.c:1165 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "Tabelle »%s« enthält Unique Indexe." -#: commands/tablecmds.c:1336 +#: commands/tablecmds.c:1328 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY unterstützt das Löschen von mehreren Objekten nicht" -#: commands/tablecmds.c:1340 +#: commands/tablecmds.c:1332 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY unterstützt kein CASCADE" -#: commands/tablecmds.c:1441 +#: commands/tablecmds.c:1433 #, c-format msgid "cannot drop partitioned index \"%s\" concurrently" msgstr "kann partitionierten Index »%s« nicht nebenläufig löschen" -#: commands/tablecmds.c:1713 +#: commands/tablecmds.c:1705 #, c-format msgid "cannot truncate only a partitioned table" msgstr "kann nicht nur eine partitionierte Tabelle leeren" -#: commands/tablecmds.c:1714 +#: commands/tablecmds.c:1706 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "Lassen Sie das Schlüsselwort ONLY weg oder wenden Sie TRUNCATE ONLY direkt auf die Partitionen an." -#: commands/tablecmds.c:1787 +#: commands/tablecmds.c:1779 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "Truncate-Vorgang leert ebenfalls Tabelle »%s«" -#: commands/tablecmds.c:2146 +#: commands/tablecmds.c:2138 #, c-format msgid "cannot truncate foreign table \"%s\"" msgstr "kann Fremdtabelle »%s« nicht leeren" -#: commands/tablecmds.c:2195 +#: commands/tablecmds.c:2187 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "kann temporäre Tabellen anderer Sitzungen nicht leeren" -#: commands/tablecmds.c:2457 commands/tablecmds.c:14236 +#: commands/tablecmds.c:2449 commands/tablecmds.c:14208 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "von partitionierter Tabelle »%s« kann nicht geerbt werden" -#: commands/tablecmds.c:2462 +#: commands/tablecmds.c:2454 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "von Partition »%s« kann nicht geerbt werden" -#: commands/tablecmds.c:2470 parser/parse_utilcmd.c:2487 +#: commands/tablecmds.c:2462 parser/parse_utilcmd.c:2487 #: parser/parse_utilcmd.c:2629 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "geerbte Relation »%s« ist keine Tabelle oder Fremdtabelle" -#: commands/tablecmds.c:2482 +#: commands/tablecmds.c:2474 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "eine temporäre Relation kann nicht als Partition der permanenten Relation »%s« erzeugt werden" -#: commands/tablecmds.c:2491 commands/tablecmds.c:14215 +#: commands/tablecmds.c:2483 commands/tablecmds.c:14187 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "von temporärer Relation »%s« kann nicht geerbt werden" -#: commands/tablecmds.c:2501 commands/tablecmds.c:14223 +#: commands/tablecmds.c:2493 commands/tablecmds.c:14195 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "von temporärer Relation einer anderen Sitzung kann nicht geerbt werden" -#: commands/tablecmds.c:2555 +#: commands/tablecmds.c:2547 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "geerbte Definitionen von Spalte »%s« werden zusammengeführt" -#: commands/tablecmds.c:2563 +#: commands/tablecmds.c:2555 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "geerbte Spalte »%s« hat Typkonflikt" -#: commands/tablecmds.c:2565 commands/tablecmds.c:2588 -#: commands/tablecmds.c:2605 commands/tablecmds.c:2861 -#: commands/tablecmds.c:2891 commands/tablecmds.c:2905 +#: commands/tablecmds.c:2557 commands/tablecmds.c:2580 +#: commands/tablecmds.c:2597 commands/tablecmds.c:2853 +#: commands/tablecmds.c:2883 commands/tablecmds.c:2897 #: parser/parse_coerce.c:2090 parser/parse_coerce.c:2110 #: parser/parse_coerce.c:2130 parser/parse_coerce.c:2150 #: parser/parse_coerce.c:2205 parser/parse_coerce.c:2238 @@ -9301,1226 +9294,1224 @@ msgstr "geerbte Spalte »%s« hat Typkonflikt" msgid "%s versus %s" msgstr "%s gegen %s" -#: commands/tablecmds.c:2574 +#: commands/tablecmds.c:2566 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "geerbte Spalte »%s« hat Sortierfolgenkonflikt" -#: commands/tablecmds.c:2576 commands/tablecmds.c:2873 -#: commands/tablecmds.c:6503 +#: commands/tablecmds.c:2568 commands/tablecmds.c:2865 +#: commands/tablecmds.c:6498 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "»%s« gegen »%s«" -#: commands/tablecmds.c:2586 +#: commands/tablecmds.c:2578 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "geerbte Spalte »%s« hat einen Konflikt bei einem Storage-Parameter" -#: commands/tablecmds.c:2603 commands/tablecmds.c:2903 +#: commands/tablecmds.c:2595 commands/tablecmds.c:2895 #, c-format msgid "column \"%s\" has a compression method conflict" msgstr "für Spalte »%s« besteht ein Komprimierungsmethodenkonflikt" -#: commands/tablecmds.c:2618 +#: commands/tablecmds.c:2610 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "geerbte Spalte »%s« hat einen Generierungskonflikt" -#: commands/tablecmds.c:2712 commands/tablecmds.c:2767 -#: commands/tablecmds.c:11784 parser/parse_utilcmd.c:1301 +#: commands/tablecmds.c:2704 commands/tablecmds.c:2759 +#: commands/tablecmds.c:11772 parser/parse_utilcmd.c:1301 #: parser/parse_utilcmd.c:1344 parser/parse_utilcmd.c:1752 #: parser/parse_utilcmd.c:1860 #, c-format msgid "cannot convert whole-row table reference" msgstr "kann Verweis auf ganze Zeile der Tabelle nicht umwandeln" -#: commands/tablecmds.c:2713 parser/parse_utilcmd.c:1302 +#: commands/tablecmds.c:2705 parser/parse_utilcmd.c:1302 #, c-format msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." msgstr "Generierungsausdruck für Spalte »%s« enthält einen Verweis auf die ganze Zeile der Tabelle »%s«." -#: commands/tablecmds.c:2768 parser/parse_utilcmd.c:1345 +#: commands/tablecmds.c:2760 parser/parse_utilcmd.c:1345 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "Constraint »%s« enthält einen Verweis auf die ganze Zeile der Tabelle »%s«." -#: commands/tablecmds.c:2847 +#: commands/tablecmds.c:2839 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "Spalte »%s« wird mit geerbter Definition zusammengeführt" -#: commands/tablecmds.c:2851 +#: commands/tablecmds.c:2843 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "Spalte »%s« wird verschoben und mit geerbter Definition zusammengeführt" -#: commands/tablecmds.c:2852 +#: commands/tablecmds.c:2844 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "Benutzerdefinierte Spalte wurde auf die Position der geerbten Spalte verschoben." -#: commands/tablecmds.c:2859 +#: commands/tablecmds.c:2851 #, c-format msgid "column \"%s\" has a type conflict" msgstr "für Spalte »%s« besteht ein Typkonflikt" -#: commands/tablecmds.c:2871 +#: commands/tablecmds.c:2863 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "für Spalte »%s« besteht ein Sortierfolgenkonflikt" -#: commands/tablecmds.c:2889 +#: commands/tablecmds.c:2881 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "für Spalte »%s« besteht ein Konflikt bei einem Storage-Parameter" -#: commands/tablecmds.c:2930 +#: commands/tablecmds.c:2922 #, c-format msgid "child column \"%s\" specifies generation expression" msgstr "abgeleitete Spalte »%s« gibt einen Generierungsausdruck an" -#: commands/tablecmds.c:2932 +#: commands/tablecmds.c:2924 #, c-format msgid "Omit the generation expression in the definition of the child table column to inherit the generation expression from the parent table." msgstr "Lassen Sie den Generierungsausdruck in der Definition der abgeleiteten Spalte weg, um den Generierungsausdruck der Elterntabelle zu erben." -#: commands/tablecmds.c:2936 +#: commands/tablecmds.c:2928 #, c-format msgid "column \"%s\" inherits from generated column but specifies default" msgstr "Spalte »%s« erbt von einer generierten Spalte aber hat einen Vorgabewert angegeben" -#: commands/tablecmds.c:2941 +#: commands/tablecmds.c:2933 #, c-format msgid "column \"%s\" inherits from generated column but specifies identity" msgstr "Spalte »%s« erbt von einer generierten Spalte aber ist als Identitätsspalte definiert" -#: commands/tablecmds.c:3050 +#: commands/tablecmds.c:3042 #, c-format msgid "column \"%s\" inherits conflicting generation expressions" msgstr "Spalte »%s« erbt widersprüchliche Generierungsausdrücke" -#: commands/tablecmds.c:3055 +#: commands/tablecmds.c:3047 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "Spalte »%s« erbt widersprüchliche Vorgabewerte" -#: commands/tablecmds.c:3057 +#: commands/tablecmds.c:3049 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Um den Konflikt zu lösen, geben Sie einen Vorgabewert ausdrücklich an." -#: commands/tablecmds.c:3103 +#: commands/tablecmds.c:3095 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "Check-Constraint-Name »%s« erscheint mehrmals, aber mit unterschiedlichen Ausdrücken" -#: commands/tablecmds.c:3316 +#: commands/tablecmds.c:3308 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "temporäre Tabellen anderer Sitzungen können nicht verschoben werden" -#: commands/tablecmds.c:3386 +#: commands/tablecmds.c:3378 #, c-format msgid "cannot rename column of typed table" msgstr "Spalte einer getypten Tabelle kann nicht umbenannt werden" -#: commands/tablecmds.c:3405 +#: commands/tablecmds.c:3397 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "»%s« ist weder Tabelle, Sicht, materialisierte Sicht, zusammengesetzter Typ, Index noch Fremdtabelle" -#: commands/tablecmds.c:3499 +#: commands/tablecmds.c:3491 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "vererbte Spalte »%s« muss ebenso in den abgeleiteten Tabellen umbenannt werden" -#: commands/tablecmds.c:3531 +#: commands/tablecmds.c:3523 #, c-format msgid "cannot rename system column \"%s\"" msgstr "Systemspalte »%s« kann nicht umbenannt werden" -#: commands/tablecmds.c:3546 +#: commands/tablecmds.c:3538 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "kann vererbte Spalte »%s« nicht umbenennen" -#: commands/tablecmds.c:3698 +#: commands/tablecmds.c:3690 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "vererbter Constraint »%s« muss ebenso in den abgeleiteten Tabellen umbenannt werden" -#: commands/tablecmds.c:3705 +#: commands/tablecmds.c:3697 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "kann vererbten Constraint »%s« nicht umbenennen" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3938 +#: commands/tablecmds.c:3930 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "%s mit Relation »%s« nicht möglich, weil sie von aktiven Anfragen in dieser Sitzung verwendet wird" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3947 +#: commands/tablecmds.c:3939 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "%s mit Relation »%s« nicht möglich, weil es anstehende Trigger-Ereignisse dafür gibt" -#: commands/tablecmds.c:4411 +#: commands/tablecmds.c:4403 #, c-format msgid "cannot alter partition \"%s\" with an incomplete detach" msgstr "kann Partition »%s« mit einem unvollständigen Detach nicht ändern" -#: commands/tablecmds.c:4413 +#: commands/tablecmds.c:4405 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." msgstr "Verwendet Sie ALTER TABLE ... DETACH PARTITION ... FINALIZE, um die unerledigte Detach-Operation zu vervollständigen." -#: commands/tablecmds.c:4605 commands/tablecmds.c:4620 +#: commands/tablecmds.c:4597 commands/tablecmds.c:4612 #, c-format msgid "cannot change persistence setting twice" msgstr "Persistenzeinstellung kann nicht zweimal geändert werden" -#: commands/tablecmds.c:5363 +#: commands/tablecmds.c:5355 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "Systemrelation »%s« kann nicht neu geschrieben werden" -#: commands/tablecmds.c:5369 +#: commands/tablecmds.c:5361 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "Tabelle »%s«, die als Katalogtabelle verwendet wird, kann nicht neu geschrieben werden" -#: commands/tablecmds.c:5379 +#: commands/tablecmds.c:5371 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "kann temporäre Tabellen anderer Sitzungen nicht neu schreiben" -#: commands/tablecmds.c:5837 +#: commands/tablecmds.c:5832 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "Spalte »%s« von Relation »%s« enthält NULL-Werte" -#: commands/tablecmds.c:5854 +#: commands/tablecmds.c:5849 #, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" msgstr "Check-Constraint »%s« von Relation »%s« wird von irgendeiner Zeile verletzt" -#: commands/tablecmds.c:5873 partitioning/partbounds.c:3282 +#: commands/tablecmds.c:5868 partitioning/partbounds.c:3282 #, c-format msgid "updated partition constraint for default partition \"%s\" would be violated by some row" msgstr "aktualisierter Partitions-Constraint der Standardpartition »%s« würde von irgendeiner Zeile verletzt werden" -#: commands/tablecmds.c:5879 +#: commands/tablecmds.c:5874 #, c-format msgid "partition constraint of relation \"%s\" is violated by some row" msgstr "Partitions-Constraint von Relation »%s« wird von irgendeiner Zeile verletzt" -#: commands/tablecmds.c:6027 commands/trigger.c:1265 commands/trigger.c:1371 +#: commands/tablecmds.c:6022 commands/trigger.c:1265 commands/trigger.c:1371 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "»%s« ist keine Tabelle, Sicht oder Fremdtabelle" -#: commands/tablecmds.c:6030 +#: commands/tablecmds.c:6025 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "»%s« ist weder Tabelle, Sicht, materialisierte Sicht noch Index" -#: commands/tablecmds.c:6036 +#: commands/tablecmds.c:6031 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "»%s« ist weder Tabelle, materialisierte Sicht noch Index" -#: commands/tablecmds.c:6039 +#: commands/tablecmds.c:6034 #, c-format msgid "\"%s\" is not a table, materialized view, or foreign table" msgstr "»%s« ist weder Tabelle, materialisierte Sicht noch Fremdtabelle" -#: commands/tablecmds.c:6042 +#: commands/tablecmds.c:6037 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "»%s« ist keine Tabelle oder Fremdtabelle" -#: commands/tablecmds.c:6045 +#: commands/tablecmds.c:6040 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "»%s« ist weder Tabelle, zusammengesetzter Typ noch Fremdtabelle" -#: commands/tablecmds.c:6048 +#: commands/tablecmds.c:6043 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "»%s« ist weder Tabelle, materialisierte Sicht, Index noch Fremdtabelle" -#: commands/tablecmds.c:6058 +#: commands/tablecmds.c:6053 #, c-format msgid "\"%s\" is of the wrong type" msgstr "»%s« hat den falschen Typ" -#: commands/tablecmds.c:6261 commands/tablecmds.c:6268 +#: commands/tablecmds.c:6256 commands/tablecmds.c:6263 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "kann Typ »%s« nicht ändern, weil Spalte »%s.%s« ihn verwendet" -#: commands/tablecmds.c:6275 +#: commands/tablecmds.c:6270 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "kann Fremdtabelle »%s« nicht ändern, weil Spalte »%s.%s« ihren Zeilentyp verwendet" -#: commands/tablecmds.c:6282 +#: commands/tablecmds.c:6277 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "kann Tabelle »%s« nicht ändern, weil Spalte »%s.%s« ihren Zeilentyp verwendet" -#: commands/tablecmds.c:6338 +#: commands/tablecmds.c:6333 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "kann Typ »%s« nicht ändern, weil er der Typ einer getypten Tabelle ist" -#: commands/tablecmds.c:6340 +#: commands/tablecmds.c:6335 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Verwenden Sie ALTER ... CASCADE, um die getypten Tabellen ebenfalls zu ändern." -#: commands/tablecmds.c:6386 +#: commands/tablecmds.c:6381 #, c-format msgid "type %s is not a composite type" msgstr "Typ %s ist kein zusammengesetzter Typ" -#: commands/tablecmds.c:6413 +#: commands/tablecmds.c:6408 #, c-format msgid "cannot add column to typed table" msgstr "zu einer getypten Tabelle kann keine Spalte hinzugefügt werden" -#: commands/tablecmds.c:6466 +#: commands/tablecmds.c:6461 #, c-format msgid "cannot add column to a partition" msgstr "zu einer Partition kann keine Spalte hinzugefügt werden" -#: commands/tablecmds.c:6495 commands/tablecmds.c:14466 +#: commands/tablecmds.c:6490 commands/tablecmds.c:14438 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "abgeleitete Tabelle »%s« hat unterschiedlichen Typ für Spalte »%s«" -#: commands/tablecmds.c:6501 commands/tablecmds.c:14473 +#: commands/tablecmds.c:6496 commands/tablecmds.c:14445 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "abgeleitete Tabelle »%s« hat unterschiedliche Sortierfolge für Spalte »%s«" -#: commands/tablecmds.c:6515 +#: commands/tablecmds.c:6510 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "Definition von Spalte »%s« für abgeleitete Tabelle »%s« wird zusammengeführt" -#: commands/tablecmds.c:6558 +#: commands/tablecmds.c:6553 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "eine Identitätsspalte kann nicht rekursiv zu einer Tabelle hinzugefügt werden, die abgeleitete Tabellen hat" -#: commands/tablecmds.c:6810 +#: commands/tablecmds.c:6796 #, c-format msgid "column must be added to child tables too" msgstr "Spalte muss ebenso in den abgeleiteten Tabellen hinzugefügt werden" -#: commands/tablecmds.c:6888 +#: commands/tablecmds.c:6874 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "Spalte »%s« von Relation »%s« existiert bereits, wird übersprungen" -#: commands/tablecmds.c:6895 +#: commands/tablecmds.c:6881 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "Spalte »%s« von Relation »%s« existiert bereits" -#: commands/tablecmds.c:6961 commands/tablecmds.c:11422 +#: commands/tablecmds.c:6947 commands/tablecmds.c:11410 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "Constraint kann nicht nur von der partitionierten Tabelle entfernt werden, wenn Partitionen existieren" -#: commands/tablecmds.c:6962 commands/tablecmds.c:7266 -#: commands/tablecmds.c:8287 commands/tablecmds.c:11423 +#: commands/tablecmds.c:6948 commands/tablecmds.c:7252 +#: commands/tablecmds.c:8275 commands/tablecmds.c:11411 #, c-format msgid "Do not specify the ONLY keyword." msgstr "Lassen Sie das Schlüsselwort ONLY weg." -#: commands/tablecmds.c:6999 commands/tablecmds.c:7192 -#: commands/tablecmds.c:7334 commands/tablecmds.c:7448 -#: commands/tablecmds.c:7542 commands/tablecmds.c:7601 -#: commands/tablecmds.c:7719 commands/tablecmds.c:7885 -#: commands/tablecmds.c:7955 commands/tablecmds.c:8110 -#: commands/tablecmds.c:11577 commands/tablecmds.c:13078 -#: commands/tablecmds.c:15640 +#: commands/tablecmds.c:6985 commands/tablecmds.c:7178 +#: commands/tablecmds.c:7320 commands/tablecmds.c:7434 +#: commands/tablecmds.c:7528 commands/tablecmds.c:7587 +#: commands/tablecmds.c:7705 commands/tablecmds.c:7871 +#: commands/tablecmds.c:7941 commands/tablecmds.c:8097 +#: commands/tablecmds.c:11565 commands/tablecmds.c:13050 +#: commands/tablecmds.c:15611 #, c-format msgid "cannot alter system column \"%s\"" msgstr "Systemspalte »%s« kann nicht geändert werden" -#: commands/tablecmds.c:7005 commands/tablecmds.c:7340 +#: commands/tablecmds.c:6991 commands/tablecmds.c:7326 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "Spalte »%s« von Relation »%s« ist eine Identitätsspalte" -#: commands/tablecmds.c:7041 +#: commands/tablecmds.c:7027 #, c-format msgid "column \"%s\" is in a primary key" msgstr "Spalte »%s« ist in einem Primärschlüssel" -#: commands/tablecmds.c:7063 +#: commands/tablecmds.c:7049 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "Spalte »%s« ist in Elterntabelle als NOT NULL markiert" -#: commands/tablecmds.c:7263 commands/tablecmds.c:8770 +#: commands/tablecmds.c:7249 commands/tablecmds.c:8758 #, c-format msgid "constraint must be added to child tables too" msgstr "Constraint muss ebenso in den abgeleiteten Tabellen hinzugefügt werden" -#: commands/tablecmds.c:7264 +#: commands/tablecmds.c:7250 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "Spalte »%s« von Relation »%s« ist nicht bereits NOT NULL." -#: commands/tablecmds.c:7342 +#: commands/tablecmds.c:7328 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Verwenden Sie stattdessen ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY." -#: commands/tablecmds.c:7347 +#: commands/tablecmds.c:7333 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "Spalte »%s« von Relation »%s« ist eine generierte Spalte" -#: commands/tablecmds.c:7350 +#: commands/tablecmds.c:7336 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." msgstr "Verwenden Sie stattdessen ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION." -#: commands/tablecmds.c:7459 +#: commands/tablecmds.c:7445 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "Spalte »%s« von Relation »%s« muss als NOT NULL deklariert werden, bevor Sie Identitätsspalte werden kann" -#: commands/tablecmds.c:7465 +#: commands/tablecmds.c:7451 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "Spalte »%s« von Relation »%s« ist bereits eine Identitätsspalte" -#: commands/tablecmds.c:7471 +#: commands/tablecmds.c:7457 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "Spalte »%s« von Relation »%s« hat bereits einen Vorgabewert" -#: commands/tablecmds.c:7548 commands/tablecmds.c:7609 +#: commands/tablecmds.c:7534 commands/tablecmds.c:7595 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "Spalte »%s« von Relation »%s« ist keine Identitätsspalte" -#: commands/tablecmds.c:7614 +#: commands/tablecmds.c:7600 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "Spalte »%s« von Relation »%s« ist keine Identitätsspalte, wird übersprungen" -#: commands/tablecmds.c:7667 +#: commands/tablecmds.c:7653 #, c-format msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" msgstr "ALTER TABLE / DROP EXPRESSION muss auch auf abgeleitete Tabellen angewendet werden" -#: commands/tablecmds.c:7689 +#: commands/tablecmds.c:7675 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "Generierungsausdruck von vererbter Spalte kann nicht gelöscht werden" -#: commands/tablecmds.c:7727 +#: commands/tablecmds.c:7713 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "Spalte »%s« von Relation »%s« ist keine gespeicherte generierte Spalte" -#: commands/tablecmds.c:7732 +#: commands/tablecmds.c:7718 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "Spalte »%s« von Relation »%s« ist keine gespeicherte generierte Spalte, wird übersprungen" -#: commands/tablecmds.c:7832 +#: commands/tablecmds.c:7818 #, c-format msgid "cannot refer to non-index column by number" msgstr "auf eine Nicht-Index-Spalte kann nicht per Nummer verwiesen werden" -#: commands/tablecmds.c:7875 +#: commands/tablecmds.c:7861 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "Spalte Nummer %d von Relation »%s« existiert nicht" -#: commands/tablecmds.c:7894 +#: commands/tablecmds.c:7880 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "Statistiken von eingeschlossener Spalte »%s« von Index »%s« können nicht geändert werden" -#: commands/tablecmds.c:7899 +#: commands/tablecmds.c:7885 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "kann Statistiken von Spalte »%s« von Index »%s«, welche kein Ausdruck ist, nicht ändern" -#: commands/tablecmds.c:7901 +#: commands/tablecmds.c:7887 #, c-format msgid "Alter statistics on table column instead." msgstr "Ändern Sie stattdessen die Statistiken für die Tabellenspalte." -#: commands/tablecmds.c:8090 +#: commands/tablecmds.c:8077 #, c-format msgid "invalid storage type \"%s\"" msgstr "ungültiger Storage-Typ »%s«" -#: commands/tablecmds.c:8122 +#: commands/tablecmds.c:8109 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "Spaltendatentyp %s kann nur Storage-Typ PLAIN" -#: commands/tablecmds.c:8166 +#: commands/tablecmds.c:8154 #, c-format msgid "cannot drop column from typed table" msgstr "aus einer getypten Tabelle können keine Spalten gelöscht werden" -#: commands/tablecmds.c:8225 +#: commands/tablecmds.c:8213 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "Spalte »%s« von Relation »%s« existiert nicht, wird übersprungen" -#: commands/tablecmds.c:8238 +#: commands/tablecmds.c:8226 #, c-format msgid "cannot drop system column \"%s\"" msgstr "Systemspalte »%s« kann nicht gelöscht werden" -#: commands/tablecmds.c:8248 +#: commands/tablecmds.c:8236 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "geerbte Spalte »%s« kann nicht gelöscht werden" -#: commands/tablecmds.c:8261 +#: commands/tablecmds.c:8249 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "Spalte »%s« kann nicht gelöscht werden, weil sie Teil des Partitionierungsschlüssels von Relation »%s« ist" -#: commands/tablecmds.c:8286 +#: commands/tablecmds.c:8274 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "Spalte kann nicht nur aus der partitionierten Tabelle gelöscht werden, wenn Partitionen existieren" -#: commands/tablecmds.c:8490 +#: commands/tablecmds.c:8478 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX wird für partitionierte Tabellen nicht unterstützt" -#: commands/tablecmds.c:8515 +#: commands/tablecmds.c:8503 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX benennt Index »%s« um in »%s«" -#: commands/tablecmds.c:8850 +#: commands/tablecmds.c:8838 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "ONLY nicht möglich für Fremdschlüssel für partitionierte Tabelle »%s« verweisend auf Relation »%s«" -#: commands/tablecmds.c:8856 +#: commands/tablecmds.c:8844 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "Hinzufügen von Fremdschlüssel mit NOT VALID nicht möglich für partitionierte Tabelle »%s« verweisend auf Relation »%s«" -#: commands/tablecmds.c:8859 +#: commands/tablecmds.c:8847 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Dieses Feature wird für partitionierte Tabellen noch nicht unterstützt." -#: commands/tablecmds.c:8866 commands/tablecmds.c:9271 +#: commands/tablecmds.c:8854 commands/tablecmds.c:9259 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "Relation »%s«, auf die verwiesen wird, ist keine Tabelle" -#: commands/tablecmds.c:8889 +#: commands/tablecmds.c:8877 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "Constraints für permanente Tabellen dürfen nur auf permanente Tabellen verweisen" -#: commands/tablecmds.c:8896 +#: commands/tablecmds.c:8884 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "Constraints für ungeloggte Tabellen dürfen nur auf permanente oder ungeloggte Tabellen verweisen" -#: commands/tablecmds.c:8902 +#: commands/tablecmds.c:8890 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "Constraints für temporäre Tabellen dürfen nur auf temporäre Tabellen verweisen" -#: commands/tablecmds.c:8906 +#: commands/tablecmds.c:8894 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "Constraints für temporäre Tabellen müssen temporäre Tabellen dieser Sitzung beinhalten" -#: commands/tablecmds.c:8972 commands/tablecmds.c:8978 +#: commands/tablecmds.c:8960 commands/tablecmds.c:8966 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "ungültige %s-Aktion für Fremdschlüssel-Constraint, der eine generierte Spalte enthält" -#: commands/tablecmds.c:8994 +#: commands/tablecmds.c:8982 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "Anzahl der Quell- und Zielspalten im Fremdschlüssel stimmt nicht überein" -#: commands/tablecmds.c:9101 +#: commands/tablecmds.c:9089 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "Fremdschlüssel-Constraint »%s« kann nicht implementiert werden" -#: commands/tablecmds.c:9103 +#: commands/tablecmds.c:9091 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Schlüsselspalten »%s« und »%s« haben inkompatible Typen: %s und %s." -#: commands/tablecmds.c:9466 commands/tablecmds.c:9859 +#: commands/tablecmds.c:9454 commands/tablecmds.c:9847 #: parser/parse_utilcmd.c:796 parser/parse_utilcmd.c:925 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "Fremdschlüssel-Constraints auf Fremdtabellen werden nicht unterstützt" -#: commands/tablecmds.c:10226 commands/tablecmds.c:10504 -#: commands/tablecmds.c:11379 commands/tablecmds.c:11454 +#: commands/tablecmds.c:10214 commands/tablecmds.c:10492 +#: commands/tablecmds.c:11367 commands/tablecmds.c:11442 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "Constraint »%s« von Relation »%s« existiert nicht" -#: commands/tablecmds.c:10233 +#: commands/tablecmds.c:10221 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "Constraint »%s« von Relation »%s« ist kein Fremdschlüssel-Constraint" -#: commands/tablecmds.c:10271 +#: commands/tablecmds.c:10259 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "Constraint »%s« von Relation »%s« kann nicht geändert werden" -#: commands/tablecmds.c:10274 +#: commands/tablecmds.c:10262 #, c-format msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "Constraint »%s« ist von Constraint »%s« von Relation »%s« abgeleitet." -#: commands/tablecmds.c:10276 +#: commands/tablecmds.c:10264 #, c-format msgid "You may alter the constraint it derives from, instead." msgstr "Sie können stattdessen den Constraint, von dem er abgeleitet ist, ändern." -#: commands/tablecmds.c:10512 +#: commands/tablecmds.c:10500 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "Constraint »%s« von Relation »%s« ist kein Fremdschlüssel- oder Check-Constraint" -#: commands/tablecmds.c:10590 +#: commands/tablecmds.c:10578 #, c-format msgid "constraint must be validated on child tables too" msgstr "Constraint muss ebenso in den abgeleiteten Tabellen validiert werden" -#: commands/tablecmds.c:10674 +#: commands/tablecmds.c:10662 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "Spalte »%s«, die im Fremdschlüssel verwendet wird, existiert nicht" -#: commands/tablecmds.c:10679 +#: commands/tablecmds.c:10667 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "Fremdschlüssel kann nicht mehr als %d Schlüssel haben" -#: commands/tablecmds.c:10744 +#: commands/tablecmds.c:10732 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "aufschiebbarer Primärschlüssel kann nicht für Tabelle »%s«, auf die verwiesen wird, verwendet werden" -#: commands/tablecmds.c:10761 +#: commands/tablecmds.c:10749 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "in Tabelle »%s«, auf die verwiesen wird, gibt es keinen Primärschlüssel" -#: commands/tablecmds.c:10826 +#: commands/tablecmds.c:10814 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "die Liste der Spalten, auf die ein Fremdschlüssel verweist, darf keine doppelten Einträge enthalten" -#: commands/tablecmds.c:10920 +#: commands/tablecmds.c:10908 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "aufschiebbarer Unique-Constraint kann nicht für Tabelle »%s«, auf die verwiesen wird, verwendet werden" -#: commands/tablecmds.c:10925 +#: commands/tablecmds.c:10913 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "in Tabelle »%s«, auf die verwiesen wird, gibt es keinen Unique-Constraint, der auf die angegebenen Schlüssel passt" -#: commands/tablecmds.c:11335 +#: commands/tablecmds.c:11323 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "geerbter Constraint »%s« von Relation »%s« kann nicht gelöscht werden" -#: commands/tablecmds.c:11385 +#: commands/tablecmds.c:11373 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "Constraint »%s« von Relation »%s« existiert nicht, wird übersprungen" -#: commands/tablecmds.c:11561 +#: commands/tablecmds.c:11549 #, c-format msgid "cannot alter column type of typed table" msgstr "Spaltentyp einer getypten Tabelle kann nicht geändert werden" -#: commands/tablecmds.c:11588 +#: commands/tablecmds.c:11576 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "kann vererbte Spalte »%s« nicht ändern" -#: commands/tablecmds.c:11597 +#: commands/tablecmds.c:11585 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "Spalte »%s« kann nicht geändert werden, weil sie Teil des Partitionierungsschlüssels von Relation »%s« ist" -#: commands/tablecmds.c:11647 +#: commands/tablecmds.c:11635 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "Ergebnis der USING-Klausel für Spalte »%s« kann nicht automatisch in Typ %s umgewandelt werden" -#: commands/tablecmds.c:11650 +#: commands/tablecmds.c:11638 #, c-format msgid "You might need to add an explicit cast." msgstr "Sie müssen möglicherweise eine ausdrückliche Typumwandlung hinzufügen." -#: commands/tablecmds.c:11654 +#: commands/tablecmds.c:11642 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "Spalte »%s« kann nicht automatisch in Typ %s umgewandelt werden" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:11657 +#: commands/tablecmds.c:11645 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Sie müssen möglicherweise »USING %s::%s« angeben." -#: commands/tablecmds.c:11757 +#: commands/tablecmds.c:11745 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "geerbte Spalte »%s« von Relation »%s« kann nicht geändert werden" -#: commands/tablecmds.c:11785 +#: commands/tablecmds.c:11773 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "USING-Ausdruck enthält einen Verweis auf die ganze Zeile der Tabelle." -#: commands/tablecmds.c:11796 +#: commands/tablecmds.c:11784 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "Typ der vererbten Spalte »%s« muss ebenso in den abgeleiteten Tabellen geändert werden" -#: commands/tablecmds.c:11921 +#: commands/tablecmds.c:11909 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "Typ der Spalte »%s« kann nicht zweimal geändert werden" -#: commands/tablecmds.c:11959 +#: commands/tablecmds.c:11947 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "Generierungsausdruck der Spalte »%s« kann nicht automatisch in Typ %s umgewandelt werden" -#: commands/tablecmds.c:11964 +#: commands/tablecmds.c:11952 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "Vorgabewert der Spalte »%s« kann nicht automatisch in Typ %s umgewandelt werden" -#: commands/tablecmds.c:12042 +#: commands/tablecmds.c:12030 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "Typ einer Spalte, die von einer generierten Spalte verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:12043 +#: commands/tablecmds.c:12031 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "Spalte »%s« wird von generierter Spalte »%s« verwendet." -#: commands/tablecmds.c:12064 +#: commands/tablecmds.c:12052 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "Typ einer Spalte, die von einer Sicht oder Regel verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:12065 commands/tablecmds.c:12084 -#: commands/tablecmds.c:12102 +#: commands/tablecmds.c:12053 commands/tablecmds.c:12072 +#: commands/tablecmds.c:12090 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s hängt von Spalte »%s« ab" -#: commands/tablecmds.c:12083 +#: commands/tablecmds.c:12071 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "Typ einer Spalte, die in einer Trigger-Definition verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:12101 +#: commands/tablecmds.c:12089 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "Typ einer Spalte, die in einer Policy-Definition verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:13186 commands/tablecmds.c:13198 +#: commands/tablecmds.c:13158 commands/tablecmds.c:13170 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "kann Eigentümer des Index »%s« nicht ändern" -#: commands/tablecmds.c:13188 commands/tablecmds.c:13200 +#: commands/tablecmds.c:13160 commands/tablecmds.c:13172 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Ändern Sie stattdessen den Eigentümer der Tabelle des Index." -#: commands/tablecmds.c:13214 +#: commands/tablecmds.c:13186 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "kann Eigentümer der Sequenz »%s« nicht ändern" -#: commands/tablecmds.c:13228 commands/tablecmds.c:16535 +#: commands/tablecmds.c:13200 commands/tablecmds.c:16503 #, c-format msgid "Use ALTER TYPE instead." msgstr "Verwenden Sie stattdessen ALTER TYPE." -#: commands/tablecmds.c:13237 +#: commands/tablecmds.c:13209 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "»%s« ist keine Tabelle, Sicht, Sequenz oder Fremdtabelle" -#: commands/tablecmds.c:13576 +#: commands/tablecmds.c:13548 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "mehrere SET TABLESPACE Unterbefehle sind ungültig" -#: commands/tablecmds.c:13653 +#: commands/tablecmds.c:13625 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "»%s« ist weder Tabelle, Sicht, materialisierte Sicht, Index noch TOAST-Tabelle" -#: commands/tablecmds.c:13686 commands/view.c:494 +#: commands/tablecmds.c:13658 commands/view.c:494 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION wird nur für automatisch aktualisierbare Sichten unterstützt" -#: commands/tablecmds.c:13938 +#: commands/tablecmds.c:13910 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "nur Tabellen, Indexe und materialisierte Sichten existieren in Tablespaces" -#: commands/tablecmds.c:13950 +#: commands/tablecmds.c:13922 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "Relationen können nicht in den oder aus dem Tablespace »pg_global« verschoben werden" -#: commands/tablecmds.c:14042 +#: commands/tablecmds.c:14014 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "Abbruch weil Sperre für Relation »%s.%s« nicht verfügbar ist" -#: commands/tablecmds.c:14058 +#: commands/tablecmds.c:14030 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "keine passenden Relationen in Tablespace »%s« gefunden" -#: commands/tablecmds.c:14174 +#: commands/tablecmds.c:14146 #, c-format msgid "cannot change inheritance of typed table" msgstr "Vererbung einer getypten Tabelle kann nicht geändert werden" -#: commands/tablecmds.c:14179 commands/tablecmds.c:14735 +#: commands/tablecmds.c:14151 commands/tablecmds.c:14707 #, c-format msgid "cannot change inheritance of a partition" msgstr "Vererbung einer Partition kann nicht geändert werden" -#: commands/tablecmds.c:14184 +#: commands/tablecmds.c:14156 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "Vererbung einer partitionierten Tabelle kann nicht geändert werden" -#: commands/tablecmds.c:14230 +#: commands/tablecmds.c:14202 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "an temporäre Relation einer anderen Sitzung kann nicht vererbt werden" -#: commands/tablecmds.c:14243 +#: commands/tablecmds.c:14215 #, c-format msgid "cannot inherit from a partition" msgstr "von einer Partition kann nicht geerbt werden" -#: commands/tablecmds.c:14265 commands/tablecmds.c:17179 +#: commands/tablecmds.c:14237 commands/tablecmds.c:17147 #, c-format msgid "circular inheritance not allowed" msgstr "zirkuläre Vererbung ist nicht erlaubt" -#: commands/tablecmds.c:14266 commands/tablecmds.c:17180 +#: commands/tablecmds.c:14238 commands/tablecmds.c:17148 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "»%s« ist schon von »%s« abgeleitet." -#: commands/tablecmds.c:14279 +#: commands/tablecmds.c:14251 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "Trigger »%s« verhindert, dass Tabelle »%s« ein Vererbungskind werden kann" -#: commands/tablecmds.c:14281 +#: commands/tablecmds.c:14253 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "ROW-Trigger mit Übergangstabellen werden in Vererbungshierarchien nicht unterstützt." -#: commands/tablecmds.c:14484 +#: commands/tablecmds.c:14456 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "Spalte »%s« in abgeleiteter Tabelle muss als NOT NULL markiert sein" -#: commands/tablecmds.c:14493 +#: commands/tablecmds.c:14465 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "Spalte »%s« in abgeleiteter Tabelle muss eine generierte Spalte sein" -#: commands/tablecmds.c:14543 +#: commands/tablecmds.c:14515 #, c-format msgid "column \"%s\" in child table has a conflicting generation expression" msgstr "Spalte »%s« in abgeleiteter Tabelle hat einen widersprüchlichen Generierungsausdruck" -#: commands/tablecmds.c:14571 +#: commands/tablecmds.c:14543 #, c-format msgid "child table is missing column \"%s\"" msgstr "Spalte »%s« fehlt in abgeleiteter Tabelle" -#: commands/tablecmds.c:14659 +#: commands/tablecmds.c:14631 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "abgeleitete Tabelle »%s« hat unterschiedliche Definition für Check-Constraint »%s«" -#: commands/tablecmds.c:14667 +#: commands/tablecmds.c:14639 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "Constraint »%s« kollidiert mit nicht vererbtem Constraint für abgeleitete Tabelle »%s«" -#: commands/tablecmds.c:14678 +#: commands/tablecmds.c:14650 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "Constraint »%s« kollidiert mit NOT-VALID-Constraint für abgeleitete Tabelle »%s«" -#: commands/tablecmds.c:14713 +#: commands/tablecmds.c:14685 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "Constraint »%s« fehlt in abgeleiteter Tabelle" -#: commands/tablecmds.c:14801 +#: commands/tablecmds.c:14773 #, fuzzy, c-format #| msgid "Unlogged partitioned table \"%s.%s\"" msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "Ungeloggte partitionierte Tabelle »%s.%s«" -#: commands/tablecmds.c:14805 +#: commands/tablecmds.c:14777 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the detach operation." msgstr "Verwenden Sie ALTER TABLE ... DETACH PARTITION ... FINALIZE, um die Detach-Operation zu vervollständigen." -#: commands/tablecmds.c:14830 commands/tablecmds.c:14878 +#: commands/tablecmds.c:14802 commands/tablecmds.c:14850 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "Relation »%s« ist keine Partition von Relation »%s«" -#: commands/tablecmds.c:14884 +#: commands/tablecmds.c:14856 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "Relation »%s« ist keine Basisrelation von Relation »%s«" -#: commands/tablecmds.c:15112 +#: commands/tablecmds.c:15084 #, c-format msgid "typed tables cannot inherit" msgstr "getypte Tabellen können nicht erben" -#: commands/tablecmds.c:15142 +#: commands/tablecmds.c:15114 #, c-format msgid "table is missing column \"%s\"" msgstr "Spalte »%s« fehlt in Tabelle" -#: commands/tablecmds.c:15153 +#: commands/tablecmds.c:15125 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "Tabelle hat Spalte »%s«, aber Typ benötigt »%s«" -#: commands/tablecmds.c:15162 +#: commands/tablecmds.c:15134 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "Tabelle »%s« hat unterschiedlichen Typ für Spalte »%s«" -#: commands/tablecmds.c:15176 +#: commands/tablecmds.c:15148 #, c-format msgid "table has extra column \"%s\"" msgstr "Tabelle hat zusätzliche Spalte »%s«" -#: commands/tablecmds.c:15228 +#: commands/tablecmds.c:15200 #, c-format msgid "\"%s\" is not a typed table" msgstr "»%s« ist keine getypte Tabelle" -#: commands/tablecmds.c:15410 +#: commands/tablecmds.c:15382 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "nicht eindeutiger Index »%s« kann nicht als Replik-Identität verwendet werden" -#: commands/tablecmds.c:15416 +#: commands/tablecmds.c:15388 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "Index »%s« kann nicht als Replik-Identität verwendet werden, weil er nicht IMMEDIATE ist" -#: commands/tablecmds.c:15422 +#: commands/tablecmds.c:15394 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "Ausdrucksindex »%s« kann nicht als Replik-Identität verwendet werden" -#: commands/tablecmds.c:15428 +#: commands/tablecmds.c:15400 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "partieller Index »%s« kann nicht als Replik-Identität verwendet werden" -#: commands/tablecmds.c:15434 +#: commands/tablecmds.c:15406 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "ungültiger Index »%s« kann nicht als Replik-Identität verwendet werden" -#: commands/tablecmds.c:15451 +#: commands/tablecmds.c:15423 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "Index »%s« kann nicht als Replik-Identität verwendet werden, weil Spalte %d eine Systemspalte ist" -#: commands/tablecmds.c:15458 +#: commands/tablecmds.c:15430 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "Index »%s« kann nicht als Replik-Identität verwendet werden, weil Spalte »%s« NULL-Werte akzeptiert" -#: commands/tablecmds.c:15648 commands/tablecmds.c:18632 -#, c-format -msgid "column data type %s does not support compression" -msgstr "Spaltendatentyp %s unterstützt keine Komprimierung" - -#: commands/tablecmds.c:15709 +#: commands/tablecmds.c:15677 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "kann den geloggten Status der Tabelle »%s« nicht ändern, weil sie temporär ist" -#: commands/tablecmds.c:15733 +#: commands/tablecmds.c:15701 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "kann Tabelle »%s« nicht in ungeloggt ändern, weil sie Teil einer Publikation ist" -#: commands/tablecmds.c:15735 +#: commands/tablecmds.c:15703 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Ungeloggte Relationen können nicht repliziert werden." -#: commands/tablecmds.c:15780 +#: commands/tablecmds.c:15748 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "konnte Tabelle »%s« nicht in geloggt ändern, weil sie auf die ungeloggte Tabelle »%s« verweist" -#: commands/tablecmds.c:15790 +#: commands/tablecmds.c:15758 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "konnte Tabelle »%s« nicht in ungeloggt ändern, weil sie auf die geloggte Tabelle »%s« verweist" -#: commands/tablecmds.c:15848 +#: commands/tablecmds.c:15816 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "einer Tabelle zugeordnete Sequenz kann nicht in ein anderes Schema verschoben werden" -#: commands/tablecmds.c:15955 +#: commands/tablecmds.c:15923 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "Relation »%s« existiert bereits in Schema »%s«" -#: commands/tablecmds.c:16518 +#: commands/tablecmds.c:16486 #, c-format msgid "\"%s\" is not a composite type" msgstr "»%s« ist kein zusammengesetzter Typ" -#: commands/tablecmds.c:16550 +#: commands/tablecmds.c:16518 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "»%s« ist weder Tabelle, Sicht, materialisierte Sicht, Sequenz noch Fremdtabelle" -#: commands/tablecmds.c:16585 +#: commands/tablecmds.c:16553 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "unbekannte Partitionierungsstrategie »%s«" -#: commands/tablecmds.c:16593 +#: commands/tablecmds.c:16561 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "Partitionierungsstrategie »list« kann nicht mit mehr als einer Spalte verwendet werden" -#: commands/tablecmds.c:16659 +#: commands/tablecmds.c:16627 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "Spalte »%s«, die im Partitionierungsschlüssel verwendet wird, existiert nicht" -#: commands/tablecmds.c:16667 +#: commands/tablecmds.c:16635 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "Systemspalte »%s« kann nicht im Partitionierungsschlüssel verwendet werden" -#: commands/tablecmds.c:16678 commands/tablecmds.c:16792 +#: commands/tablecmds.c:16646 commands/tablecmds.c:16760 #, c-format msgid "cannot use generated column in partition key" msgstr "generierte Spalte kann nicht im Partitionierungsschlüssel verwendet werden" -#: commands/tablecmds.c:16679 commands/tablecmds.c:16793 commands/trigger.c:635 +#: commands/tablecmds.c:16647 commands/tablecmds.c:16761 commands/trigger.c:635 #: rewrite/rewriteHandler.c:884 rewrite/rewriteHandler.c:919 #, c-format msgid "Column \"%s\" is a generated column." msgstr "Spalte »%s« ist eine generierte Spalte." -#: commands/tablecmds.c:16755 +#: commands/tablecmds.c:16723 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "Funktionen im Partitionierungsschlüsselausdruck müssen als IMMUTABLE markiert sein" -#: commands/tablecmds.c:16775 +#: commands/tablecmds.c:16743 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "Partitionierungsschlüsselausdruck kann nicht auf Systemspalten verweisen" -#: commands/tablecmds.c:16805 +#: commands/tablecmds.c:16773 #, c-format msgid "cannot use constant expression as partition key" msgstr "Partitionierungsschlüssel kann kein konstanter Ausdruck sein" -#: commands/tablecmds.c:16826 +#: commands/tablecmds.c:16794 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "konnte die für den Partitionierungsausdruck zu verwendende Sortierfolge nicht bestimmen" -#: commands/tablecmds.c:16861 +#: commands/tablecmds.c:16829 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "Sie müssen eine hash-Operatorklasse angeben oder eine hash-Standardoperatorklasse für den Datentyp definieren." -#: commands/tablecmds.c:16867 +#: commands/tablecmds.c:16835 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "Sie müssen eine btree-Operatorklasse angeben oder eine btree-Standardoperatorklasse für den Datentyp definieren." -#: commands/tablecmds.c:17119 +#: commands/tablecmds.c:17087 #, c-format msgid "\"%s\" is already a partition" msgstr "»%s« ist bereits eine Partition" -#: commands/tablecmds.c:17125 +#: commands/tablecmds.c:17093 #, c-format msgid "cannot attach a typed table as partition" msgstr "eine getypte Tabelle kann nicht als Partition angefügt werden" -#: commands/tablecmds.c:17141 +#: commands/tablecmds.c:17109 #, c-format msgid "cannot attach inheritance child as partition" msgstr "ein Vererbungskind kann nicht als Partition angefügt werden" -#: commands/tablecmds.c:17155 +#: commands/tablecmds.c:17123 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "eine Tabelle mit abgeleiteten Tabellen kann nicht als Partition angefügt werden" -#: commands/tablecmds.c:17189 +#: commands/tablecmds.c:17157 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "eine temporäre Relation kann nicht als Partition an permanente Relation »%s« angefügt werden" -#: commands/tablecmds.c:17197 +#: commands/tablecmds.c:17165 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "eine permanente Relation kann nicht als Partition an temporäre Relation »%s« angefügt werden" -#: commands/tablecmds.c:17205 +#: commands/tablecmds.c:17173 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "kann nicht als Partition an temporäre Relation einer anderen Sitzung anfügen" -#: commands/tablecmds.c:17212 +#: commands/tablecmds.c:17180 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "temporäre Relation einer anderen Sitzung kann nicht als Partition angefügt werden" -#: commands/tablecmds.c:17232 +#: commands/tablecmds.c:17200 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "Tabelle »%s« enthält Spalte »%s«, die nicht in der Elterntabelle »%s« gefunden wurde" -#: commands/tablecmds.c:17235 +#: commands/tablecmds.c:17203 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "Die neue Partition darf nur Spalten enthalten, die auch die Elterntabelle hat." -#: commands/tablecmds.c:17247 +#: commands/tablecmds.c:17215 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "Trigger »%s« verhindert, dass Tabelle »%s« eine Partition werden kann" -#: commands/tablecmds.c:17249 commands/trigger.c:441 +#: commands/tablecmds.c:17217 commands/trigger.c:441 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "ROW-Trigger mit Übergangstabellen werden für Partitionen nicht unterstützt" -#: commands/tablecmds.c:17412 +#: commands/tablecmds.c:17380 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "kann Fremdtabelle »%s« nicht als Partition an partitionierte Tabelle »%s« anfügen" -#: commands/tablecmds.c:17415 +#: commands/tablecmds.c:17383 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "Partitionierte Tabelle »%s« enthält Unique-Indexe." -#: commands/tablecmds.c:17735 +#: commands/tablecmds.c:17703 #, fuzzy, c-format #| msgid "a hash-partitioned table may not have a default partition" msgid "cannot detach partitions concurrently when a default partition exists" msgstr "eine hashpartitionierte Tabelle kann keine Standardpartition haben" -#: commands/tablecmds.c:17844 -#, fuzzy, c-format -#| msgid "cannot create index on partitioned table \"%s\" concurrently" +#: commands/tablecmds.c:17812 +#, c-format msgid "partitioned table \"%s\" was removed concurrently" -msgstr "kann Index für partitionierte Tabelle »%s« nicht nebenläufig erzeugen" +msgstr "partitionierte Tabelle »%s« wurde nebenläufig entfernt" -#: commands/tablecmds.c:17850 -#, fuzzy, c-format -#| msgid "cannot drop partitioned index \"%s\" concurrently" +#: commands/tablecmds.c:17818 +#, c-format msgid "partition \"%s\" was removed concurrently" -msgstr "kann partitionierten Index »%s« nicht nebenläufig löschen" +msgstr "Partition »%s« wurde nebenläufig entfernt" -#: commands/tablecmds.c:18304 commands/tablecmds.c:18324 -#: commands/tablecmds.c:18344 commands/tablecmds.c:18363 -#: commands/tablecmds.c:18405 +#: commands/tablecmds.c:18272 commands/tablecmds.c:18292 +#: commands/tablecmds.c:18312 commands/tablecmds.c:18331 +#: commands/tablecmds.c:18373 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "kann Index »%s« nicht als Partition an Index »%s« anfügen" -#: commands/tablecmds.c:18307 +#: commands/tablecmds.c:18275 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "Index »%s« ist bereits an einen anderen Index angefügt." -#: commands/tablecmds.c:18327 +#: commands/tablecmds.c:18295 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "Index »%s« ist kein Index irgendeiner Partition von Tabelle »%s«." -#: commands/tablecmds.c:18347 +#: commands/tablecmds.c:18315 #, c-format msgid "The index definitions do not match." msgstr "Die Indexdefinitionen stimmen nicht überein." -#: commands/tablecmds.c:18366 +#: commands/tablecmds.c:18334 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "Der Index »%s« gehört zu einem Constraint in Tabelle »%s«, aber kein Constraint existiert für Index »%s«." -#: commands/tablecmds.c:18408 +#: commands/tablecmds.c:18376 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "Ein anderer Index ist bereits für Partition »%s« angefügt." -#: commands/tablecmds.c:18644 +#: commands/tablecmds.c:18606 +#, c-format +msgid "column data type %s does not support compression" +msgstr "Spaltendatentyp %s unterstützt keine Komprimierung" + +#: commands/tablecmds.c:18613 #, c-format msgid "invalid compression method \"%s\"" msgstr "ungültige Komprimierungsmethode »%s«" @@ -10883,29 +10874,29 @@ msgstr "Verschieben einer Zeile in eine andere Partition durch einen BEFORE-FOR- msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "Vor der Ausführung von Trigger »%s« gehörte die Zeile in Partition »%s.%s«." -#: commands/trigger.c:3043 executor/nodeModifyTable.c:1799 -#: executor/nodeModifyTable.c:1881 +#: commands/trigger.c:3043 executor/nodeModifyTable.c:1811 +#: executor/nodeModifyTable.c:1893 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "das zu aktualisierende Tupel wurde schon durch eine vom aktuellen Befehl ausgelöste Operation verändert" -#: commands/trigger.c:3044 executor/nodeModifyTable.c:1187 -#: executor/nodeModifyTable.c:1261 executor/nodeModifyTable.c:1800 -#: executor/nodeModifyTable.c:1882 +#: commands/trigger.c:3044 executor/nodeModifyTable.c:1193 +#: executor/nodeModifyTable.c:1267 executor/nodeModifyTable.c:1812 +#: executor/nodeModifyTable.c:1894 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Verwenden Sie einen AFTER-Trigger anstelle eines BEFORE-Triggers, um Änderungen an andere Zeilen zu propagieren." #: commands/trigger.c:3073 executor/nodeLockRows.c:225 #: executor/nodeLockRows.c:234 executor/nodeModifyTable.c:228 -#: executor/nodeModifyTable.c:1203 executor/nodeModifyTable.c:1817 -#: executor/nodeModifyTable.c:2047 +#: executor/nodeModifyTable.c:1209 executor/nodeModifyTable.c:1829 +#: executor/nodeModifyTable.c:2059 #, c-format msgid "could not serialize access due to concurrent update" msgstr "konnte Zugriff nicht serialisieren wegen gleichzeitiger Aktualisierung" -#: commands/trigger.c:3081 executor/nodeModifyTable.c:1293 -#: executor/nodeModifyTable.c:1899 executor/nodeModifyTable.c:2071 +#: commands/trigger.c:3081 executor/nodeModifyTable.c:1299 +#: executor/nodeModifyTable.c:1911 executor/nodeModifyTable.c:2083 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "konnte Zugriff nicht serialisieren wegen gleichzeitigem Löschen" @@ -10915,12 +10906,12 @@ msgstr "konnte Zugriff nicht serialisieren wegen gleichzeitigem Löschen" msgid "cannot fire deferred trigger within security-restricted operation" msgstr "aufgeschobener Trigger kann nicht in einer sicherheitsbeschränkten Operation ausgelöst werden" -#: commands/trigger.c:5183 +#: commands/trigger.c:5185 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "Constraint »%s« ist nicht aufschiebbar" -#: commands/trigger.c:5206 +#: commands/trigger.c:5208 #, c-format msgid "constraint \"%s\" does not exist" msgstr "Constraint »%s« existiert nicht" @@ -11387,8 +11378,8 @@ msgstr "nur Superuser können Benutzer mit »bypassrls« anlegen" msgid "permission denied to create role" msgstr "keine Berechtigung, um Rolle zu erzeugen" -#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15281 -#: gram.y:15326 utils/adt/acl.c:5248 utils/adt/acl.c:5254 +#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15283 +#: gram.y:15328 utils/adt/acl.c:5248 utils/adt/acl.c:5254 #, c-format msgid "role name \"%s\" is reserved" msgstr "Rollenname »%s« ist reserviert" @@ -11576,8 +11567,9 @@ msgid "parallel option requires a value between 0 and %d" msgstr "Option PARALLEL benötigt einen Wert zwischen 0 und %d" #: commands/vacuum.c:168 -#, c-format -msgid "parallel vacuum degree must be between 0 and %d" +#, fuzzy, c-format +#| msgid "parallel vacuum degree must be between 0 and %d" +msgid "parallel workers for vacuum must be between 0 and %d" msgstr "Grad für paralleles Vacuum muss zwischen 0 und %d sein" #: commands/vacuum.c:185 @@ -11699,7 +11691,7 @@ msgstr "Sie haben möglicherweise bereits Daten wegen Transaktionsnummernüberla msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "überspringe »%s« --- kann Nicht-Tabellen oder besondere Systemtabellen nicht vacuumen" -#: commands/variable.c:165 utils/misc/guc.c:11606 utils/misc/guc.c:11668 +#: commands/variable.c:165 utils/misc/guc.c:11625 utils/misc/guc.c:11687 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Unbekanntes Schlüsselwort: »%s«." @@ -12377,7 +12369,7 @@ msgid "%s is not allowed in a SQL function" msgstr "%s ist in SQL-Funktionen nicht erlaubt" #. translator: %s is a SQL statement name -#: executor/functions.c:529 executor/spi.c:1634 executor/spi.c:2460 +#: executor/functions.c:529 executor/spi.c:1633 executor/spi.c:2485 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s ist in als nicht »volatile« markierten Funktionen nicht erlaubt" @@ -12499,27 +12491,27 @@ msgstr "FULL JOIN wird nur für Merge-Verbund-fähige Verbundbedingungen unterst msgid "Query has too few columns." msgstr "Anfrage hat zu wenige Spalten." -#: executor/nodeModifyTable.c:1186 executor/nodeModifyTable.c:1260 +#: executor/nodeModifyTable.c:1192 executor/nodeModifyTable.c:1266 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "das zu löschende Tupel wurde schon durch eine vom aktuellen Befehl ausgelöste Operation verändert" -#: executor/nodeModifyTable.c:1435 +#: executor/nodeModifyTable.c:1441 #, c-format msgid "invalid ON UPDATE specification" msgstr "ungültige ON-UPDATE-Angabe" -#: executor/nodeModifyTable.c:1436 +#: executor/nodeModifyTable.c:1442 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "Das Ergebnistupel würde in einer anderen Partition erscheinen als das ursprüngliche Tupel." -#: executor/nodeModifyTable.c:2026 +#: executor/nodeModifyTable.c:2038 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "Befehl in ON CONFLICT DO UPDATE kann eine Zeile nicht ein zweites Mal ändern" -#: executor/nodeModifyTable.c:2027 +#: executor/nodeModifyTable.c:2039 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "Stellen Sie sicher, dass keine im selben Befehl fürs Einfügen vorgesehene Zeilen doppelte Werte haben, die einen Constraint verletzen würden." @@ -12595,7 +12587,7 @@ msgstr "Frame-Ende-Offset darf nicht negativ sein" msgid "aggregate function %s does not support use as a window function" msgstr "Aggregatfunktion %s unterstützt die Verwendung als Fensterfunktion nicht" -#: executor/spi.c:237 executor/spi.c:306 +#: executor/spi.c:237 executor/spi.c:302 #, c-format msgid "invalid transaction termination" msgstr "ungültige Transaktionsbeendung" @@ -12605,58 +12597,58 @@ msgstr "ungültige Transaktionsbeendung" msgid "cannot commit while a subtransaction is active" msgstr "während eine Subtransaktion aktiv ist kann nicht committet werden" -#: executor/spi.c:312 +#: executor/spi.c:308 #, c-format msgid "cannot roll back while a subtransaction is active" msgstr "während eine Subtransaktion aktiv ist kann nicht zurückgerollt werden" -#: executor/spi.c:381 +#: executor/spi.c:380 #, c-format msgid "transaction left non-empty SPI stack" msgstr "Transaktion ließ nicht-leeren SPI-Stack zurück" -#: executor/spi.c:382 executor/spi.c:444 +#: executor/spi.c:381 executor/spi.c:443 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "Prüfen Sie, ob Aufrufe von »SPI_finish« fehlen." -#: executor/spi.c:443 +#: executor/spi.c:442 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "Subtransaktion ließ nicht-leeren SPI-Stack zurück" -#: executor/spi.c:1496 +#: executor/spi.c:1495 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "Plan mit mehreren Anfragen kann nicht als Cursor geöffnet werden" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1501 +#: executor/spi.c:1500 #, c-format msgid "cannot open %s query as cursor" msgstr "%s kann nicht als Cursor geöffnet werden" -#: executor/spi.c:1608 +#: executor/spi.c:1607 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE wird nicht unterstützt" -#: executor/spi.c:1609 parser/analyze.c:2806 +#: executor/spi.c:1608 parser/analyze.c:2806 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Scrollbare Cursor müssen READ ONLY sein." -#: executor/spi.c:2784 +#: executor/spi.c:2808 #, c-format msgid "SQL expression \"%s\"" msgstr "SQL-Ausdruck »%s«" -#: executor/spi.c:2789 +#: executor/spi.c:2813 #, c-format msgid "PL/pgSQL assignment \"%s\"" msgstr "PL/pgSQL-Zuweisung »%s«" -#: executor/spi.c:2792 +#: executor/spi.c:2816 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL-Anweisung »%s«" @@ -12756,289 +12748,289 @@ msgstr "STDIN/STDOUT sind nicht mit PROGRAM erlaubt" msgid "WHERE clause not allowed with COPY TO" msgstr "mit COPY TO ist keine WHERE-Klausel erlaubt" -#: gram.y:3407 gram.y:3414 gram.y:11687 gram.y:11695 +#: gram.y:3407 gram.y:3414 gram.y:11689 gram.y:11697 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "die Verwendung von GLOBAL beim Erzeugen einer temporären Tabelle ist veraltet" -#: gram.y:3663 +#: gram.y:3665 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "für eine generierte Spalte muss GENERATED ALWAYS angegeben werden" -#: gram.y:3931 utils/adt/ri_triggers.c:2032 +#: gram.y:3933 utils/adt/ri_triggers.c:2032 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL ist noch nicht implementiert" -#: gram.y:4632 +#: gram.y:4634 #, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" msgstr "CREATE EXTENSION ... FROM wird nicht mehr unterstützt" -#: gram.y:5295 +#: gram.y:5297 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "unbekannte Zeilensicherheitsoption »%s«" -#: gram.y:5296 +#: gram.y:5298 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "Aktuell werden nur PERMISSIVE und RESTRICTIVE unterstützt." -#: gram.y:5378 +#: gram.y:5380 #, c-format msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" msgstr "CREATE OR REPLACE CONSTRAINT TRIGGER wird nicht unterstützt" -#: gram.y:5415 +#: gram.y:5417 msgid "duplicate trigger events specified" msgstr "mehrere Trigger-Ereignisse angegeben" -#: gram.y:5556 parser/parse_utilcmd.c:3734 parser/parse_utilcmd.c:3760 +#: gram.y:5558 parser/parse_utilcmd.c:3734 parser/parse_utilcmd.c:3760 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "Constraint, der als INITIALLY DEFERRED deklariert wurde, muss DEFERRABLE sein" -#: gram.y:5563 +#: gram.y:5565 #, c-format msgid "conflicting constraint properties" msgstr "widersprüchliche Constraint-Eigentschaften" -#: gram.y:5659 +#: gram.y:5661 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION ist noch nicht implementiert" -#: gram.y:6042 +#: gram.y:6044 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK wird nicht mehr benötigt" -#: gram.y:6043 +#: gram.y:6045 #, c-format msgid "Update your data type." msgstr "Aktualisieren Sie Ihren Datentyp." -#: gram.y:7768 +#: gram.y:7770 #, c-format msgid "aggregates cannot have output arguments" msgstr "Aggregatfunktionen können keine OUT-Argumente haben" -#: gram.y:8210 utils/adt/regproc.c:709 utils/adt/regproc.c:750 +#: gram.y:8212 utils/adt/regproc.c:709 utils/adt/regproc.c:750 #, c-format msgid "missing argument" msgstr "Argument fehlt" -#: gram.y:8211 utils/adt/regproc.c:710 utils/adt/regproc.c:751 +#: gram.y:8213 utils/adt/regproc.c:710 utils/adt/regproc.c:751 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Verwenden Sie NONE, um das fehlende Argument eines unären Operators anzugeben." -#: gram.y:10150 gram.y:10168 +#: gram.y:10152 gram.y:10170 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION wird für rekursive Sichten nicht unterstützt" -#: gram.y:11824 +#: gram.y:11826 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "Syntax LIMIT x,y wird nicht unterstützt" -#: gram.y:11825 +#: gram.y:11827 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Verwenden Sie die getrennten Klauseln LIMIT und OFFSET." -#: gram.y:12163 gram.y:12188 +#: gram.y:12165 gram.y:12190 #, c-format msgid "VALUES in FROM must have an alias" msgstr "VALUES in FROM muss Aliasnamen erhalten" -#: gram.y:12164 gram.y:12189 +#: gram.y:12166 gram.y:12191 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "Zum Beispiel FROM (VALUES ...) [AS] xyz." -#: gram.y:12169 gram.y:12194 +#: gram.y:12171 gram.y:12196 #, c-format msgid "subquery in FROM must have an alias" msgstr "Unteranfrage in FROM muss Aliasnamen erhalten" -#: gram.y:12170 gram.y:12195 +#: gram.y:12172 gram.y:12197 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "Zum Beispiel FROM (SELECT ...) [AS] xyz." -#: gram.y:12690 +#: gram.y:12692 #, c-format msgid "only one DEFAULT value is allowed" msgstr "nur ein DEFAULT-Wert ist erlaubt" -#: gram.y:12699 +#: gram.y:12701 #, c-format msgid "only one PATH value per column is allowed" msgstr "nur ein PATH-Wert pro Spalte ist erlaubt" -#: gram.y:12708 +#: gram.y:12710 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "widersprüchliche oder überflüssige NULL/NOT NULL-Deklarationen für Spalte »%s«" -#: gram.y:12717 +#: gram.y:12719 #, c-format msgid "unrecognized column option \"%s\"" msgstr "unbekannte Spaltenoption »%s«" -#: gram.y:12971 +#: gram.y:12973 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "Präzision von Typ float muss mindestens 1 Bit sein" -#: gram.y:12980 +#: gram.y:12982 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "Präzision von Typ float muss weniger als 54 Bits sein" -#: gram.y:13478 +#: gram.y:13480 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "falsche Anzahl Parameter auf linker Seite von OVERLAPS-Ausdruck" -#: gram.y:13483 +#: gram.y:13485 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "falsche Anzahl Parameter auf rechter Seite von OVERLAPS-Ausdruck" -#: gram.y:13651 +#: gram.y:13653 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "UNIQUE-Prädikat ist noch nicht implementiert" -#: gram.y:14010 +#: gram.y:14012 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "in WITHIN GROUP können nicht mehrere ORDER-BY-Klauseln verwendet werden" -#: gram.y:14015 +#: gram.y:14017 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "DISTINCT kann nicht mit WITHIN GROUP verwendet werden" -#: gram.y:14020 +#: gram.y:14022 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "VARIADIC kann nicht mit WITHIN GROUP verwendet werden" -#: gram.y:14544 gram.y:14567 +#: gram.y:14546 gram.y:14569 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "Frame-Beginn kann nicht UNBOUNDED FOLLOWING sein" -#: gram.y:14549 +#: gram.y:14551 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "Frame der in der folgenden Zeile beginnt kann nicht in der aktuellen Zeile enden" -#: gram.y:14572 +#: gram.y:14574 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "Frame-Ende kann nicht UNBOUNDED PRECEDING sein" -#: gram.y:14578 +#: gram.y:14580 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "Frame der in der aktuellen Zeile beginnt kann keine vorhergehenden Zeilen haben" -#: gram.y:14585 +#: gram.y:14587 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "Frame der in der folgenden Zeile beginnt kann keine vorhergehenden Zeilen haben" -#: gram.y:15217 +#: gram.y:15219 #, c-format msgid "type modifier cannot have parameter name" msgstr "Typmodifikator kann keinen Parameternamen haben" -#: gram.y:15223 +#: gram.y:15225 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "Typmodifikator kann kein ORDER BY haben" -#: gram.y:15288 gram.y:15295 gram.y:15302 +#: gram.y:15290 gram.y:15297 gram.y:15304 #, c-format msgid "%s cannot be used as a role name here" msgstr "%s kann hier nicht als Rollenname verwendet werden" -#: gram.y:15391 gram.y:16823 +#: gram.y:15393 gram.y:16825 #, c-format msgid "WITH TIES cannot be specified without ORDER BY clause" msgstr "WITH TIES kann nicht ohne ORDER-BY-Klausel angegeben werden" -#: gram.y:16499 gram.y:16688 +#: gram.y:16501 gram.y:16690 msgid "improper use of \"*\"" msgstr "unzulässige Verwendung von »*«" -#: gram.y:16651 gram.y:16668 tsearch/spell.c:982 tsearch/spell.c:999 +#: gram.y:16653 gram.y:16670 tsearch/spell.c:982 tsearch/spell.c:999 #: tsearch/spell.c:1016 tsearch/spell.c:1033 tsearch/spell.c:1098 #, c-format msgid "syntax error" msgstr "Syntaxfehler" -#: gram.y:16753 +#: gram.y:16755 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "eine Ordered-Set-Aggregatfunktion mit einem direkten VARIADIC-Argument muss ein aggregiertes VARIADIC-Argument des selben Datentyps haben" -#: gram.y:16790 +#: gram.y:16792 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "mehrere ORDER-BY-Klauseln sind nicht erlaubt" -#: gram.y:16801 +#: gram.y:16803 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "mehrere OFFSET-Klauseln sind nicht erlaubt" -#: gram.y:16810 +#: gram.y:16812 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "mehrere LIMIT-Klauseln sind nicht erlaubt" -#: gram.y:16819 +#: gram.y:16821 #, c-format msgid "multiple limit options not allowed" msgstr "mehrere Limit-Optionen sind nicht erlaubt" -#: gram.y:16831 +#: gram.y:16833 #, c-format msgid "multiple WITH clauses not allowed" msgstr "mehrere WITH-Klauseln sind nicht erlaubt" -#: gram.y:17023 +#: gram.y:17025 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "OUT- und INOUT-Argumente sind in TABLE-Funktionen nicht erlaubt" -#: gram.y:17119 +#: gram.y:17121 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "mehrere COLLATE-Klauseln sind nicht erlaubt" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:17157 gram.y:17170 +#: gram.y:17159 gram.y:17172 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "%s-Constraints können nicht als DEFERRABLE markiert werden" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:17183 +#: gram.y:17185 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "%s-Constraints können nicht als NOT VALID markiert werden" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:17196 +#: gram.y:17198 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "%s-Constraints können nicht als NO INHERIT markiert werden" @@ -13048,9 +13040,9 @@ msgstr "%s-Constraints können nicht als NO INHERIT markiert werden" msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "unbekannter Konfigurationsparameter »%s« in Datei »%s« Zeile %d" -#: guc-file.l:351 utils/misc/guc.c:7341 utils/misc/guc.c:7539 -#: utils/misc/guc.c:7633 utils/misc/guc.c:7727 utils/misc/guc.c:7847 -#: utils/misc/guc.c:7946 +#: guc-file.l:351 utils/misc/guc.c:7360 utils/misc/guc.c:7558 +#: utils/misc/guc.c:7652 utils/misc/guc.c:7746 utils/misc/guc.c:7866 +#: utils/misc/guc.c:7965 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "Parameter »%s« kann nicht geändert werden, ohne den Server neu zu starten" @@ -13095,7 +13087,7 @@ msgstr "konnte Konfigurationsdatei »%s« nicht öffnen: maximale Verschachtelun msgid "configuration file recursion in \"%s\"" msgstr "Konfigurationsdateirekursion in »%s«" -#: guc-file.l:630 libpq/hba.c:2245 libpq/hba.c:2659 +#: guc-file.l:630 libpq/hba.c:2251 libpq/hba.c:2665 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "konnte Konfigurationsdatei »%s« nicht öffnen: %m" @@ -13504,7 +13496,7 @@ msgstr "ungültige Größe des Passwortpakets" msgid "empty password returned by client" msgstr "Client gab leeres Passwort zurück" -#: libpq/auth.c:887 libpq/hba.c:1368 +#: libpq/auth.c:887 libpq/hba.c:1366 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "MD5-Authentifizierung wird nicht unterstützt, wenn »db_user_namespace« angeschaltet ist" @@ -13818,7 +13810,7 @@ msgstr "RADIUS-Geheimnis nicht angegeben" msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "RADIUS-Authentifizierung unterstützt keine Passwörter länger als %d Zeichen" -#: libpq/auth.c:3197 libpq/hba.c:1998 +#: libpq/auth.c:3197 libpq/hba.c:2004 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "konnte RADIUS-Servername »%s« nicht in Adresse übersetzen: %s" @@ -14090,152 +14082,152 @@ msgstr "konnte SSL-Protokollversionsbereich nicht setzen" msgid "\"%s\" cannot be higher than \"%s\"" msgstr "»%s« kann nicht höher als »%s« sein" -#: libpq/be-secure-openssl.c:265 +#: libpq/be-secure-openssl.c:275 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "konnte Cipher-Liste nicht setzen (keine gültigen Ciphers verfügbar)" -#: libpq/be-secure-openssl.c:285 +#: libpq/be-secure-openssl.c:295 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "konnte Root-Zertifikat-Datei »%s« nicht laden: %s" -#: libpq/be-secure-openssl.c:334 +#: libpq/be-secure-openssl.c:344 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "konnte SSL-Certificate-Revocation-List-Datei »%s« nicht laden: %s" -#: libpq/be-secure-openssl.c:342 +#: libpq/be-secure-openssl.c:352 #, c-format msgid "could not load SSL certificate revocation list directory \"%s\": %s" msgstr "konnte SSL-Certificate-Revocation-List-Verzeichnis »%s« nicht laden: %s" -#: libpq/be-secure-openssl.c:350 +#: libpq/be-secure-openssl.c:360 #, c-format msgid "could not load SSL certificate revocation list file \"%s\" or directory \"%s\": %s" msgstr "konnte SSL-Certificate-Revocation-List-Datei »%s« oder -Verzeichnis »%s« nicht laden: %s" -#: libpq/be-secure-openssl.c:408 +#: libpq/be-secure-openssl.c:418 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "konnte SSL-Verbindung nicht initialisieren: SSL-Kontext nicht eingerichtet" -#: libpq/be-secure-openssl.c:419 +#: libpq/be-secure-openssl.c:429 #, c-format msgid "could not initialize SSL connection: %s" msgstr "konnte SSL-Verbindung nicht initialisieren: %s" -#: libpq/be-secure-openssl.c:427 +#: libpq/be-secure-openssl.c:437 #, c-format msgid "could not set SSL socket: %s" msgstr "konnte SSL-Socket nicht setzen: %s" -#: libpq/be-secure-openssl.c:482 +#: libpq/be-secure-openssl.c:492 #, c-format msgid "could not accept SSL connection: %m" msgstr "konnte SSL-Verbindung nicht annehmen: %m" -#: libpq/be-secure-openssl.c:486 libpq/be-secure-openssl.c:539 +#: libpq/be-secure-openssl.c:496 libpq/be-secure-openssl.c:549 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "konnte SSL-Verbindung nicht annehmen: EOF entdeckt" -#: libpq/be-secure-openssl.c:525 +#: libpq/be-secure-openssl.c:535 #, c-format msgid "could not accept SSL connection: %s" msgstr "konnte SSL-Verbindung nicht annehmen: %s" -#: libpq/be-secure-openssl.c:528 +#: libpq/be-secure-openssl.c:538 #, c-format msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." msgstr "Das zeigt möglicherweise an, dass der Client keine SSL-Protokollversion zwischen %s und %s unterstützt." -#: libpq/be-secure-openssl.c:544 libpq/be-secure-openssl.c:724 -#: libpq/be-secure-openssl.c:788 +#: libpq/be-secure-openssl.c:554 libpq/be-secure-openssl.c:734 +#: libpq/be-secure-openssl.c:798 #, c-format msgid "unrecognized SSL error code: %d" msgstr "unbekannter SSL-Fehlercode: %d" -#: libpq/be-secure-openssl.c:590 +#: libpq/be-secure-openssl.c:600 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "Common-Name im SSL-Zertifikat enthält Null-Byte" -#: libpq/be-secure-openssl.c:630 +#: libpq/be-secure-openssl.c:640 #, c-format msgid "SSL certificate's distinguished name contains embedded null" msgstr "Distinguished Name im SSL-Zertifikat enthält Null-Byte" -#: libpq/be-secure-openssl.c:713 libpq/be-secure-openssl.c:772 +#: libpq/be-secure-openssl.c:723 libpq/be-secure-openssl.c:782 #, c-format msgid "SSL error: %s" msgstr "SSL-Fehler: %s" -#: libpq/be-secure-openssl.c:953 +#: libpq/be-secure-openssl.c:963 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "konnte DH-Parameterdatei »%s« nicht öffnen: %m" -#: libpq/be-secure-openssl.c:965 +#: libpq/be-secure-openssl.c:975 #, c-format msgid "could not load DH parameters file: %s" msgstr "konnte DH-Parameterdatei nicht laden: %s" -#: libpq/be-secure-openssl.c:975 +#: libpq/be-secure-openssl.c:985 #, c-format msgid "invalid DH parameters: %s" msgstr "ungültige DH-Parameter: %s" -#: libpq/be-secure-openssl.c:984 +#: libpq/be-secure-openssl.c:994 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "ungültige DH-Parameter: p ist keine Primzahl" -#: libpq/be-secure-openssl.c:993 +#: libpq/be-secure-openssl.c:1003 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "ungültige DH-Parameter: weder geeigneter Generator noch sichere Primzahl" -#: libpq/be-secure-openssl.c:1154 +#: libpq/be-secure-openssl.c:1164 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: konnte DH-Parameter nicht laden" -#: libpq/be-secure-openssl.c:1162 +#: libpq/be-secure-openssl.c:1172 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: konnte DH-Parameter nicht setzen: %s" -#: libpq/be-secure-openssl.c:1189 +#: libpq/be-secure-openssl.c:1199 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: unbekannter Kurvenname: %s" -#: libpq/be-secure-openssl.c:1198 +#: libpq/be-secure-openssl.c:1208 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: konnte Schlüssel nicht erzeugen" -#: libpq/be-secure-openssl.c:1226 +#: libpq/be-secure-openssl.c:1236 msgid "no SSL error reported" msgstr "kein SSL-Fehler berichtet" -#: libpq/be-secure-openssl.c:1230 +#: libpq/be-secure-openssl.c:1240 #, c-format msgid "SSL error code %lu" msgstr "SSL-Fehlercode %lu" -#: libpq/be-secure-openssl.c:1384 +#: libpq/be-secure-openssl.c:1394 #, c-format msgid "failed to create BIO" msgstr "" -#: libpq/be-secure-openssl.c:1394 +#: libpq/be-secure-openssl.c:1404 #, c-format msgid "could not get NID for ASN1_OBJECT object" msgstr "" -#: libpq/be-secure-openssl.c:1402 +#: libpq/be-secure-openssl.c:1412 #, fuzzy, c-format #| msgid "could not create LDAP structure\n" msgid "could not convert NID %d to an ASN1_OBJECT structure" @@ -14276,372 +14268,382 @@ msgstr "Passwort stimmt nicht überein für Benutzer »%s«." msgid "Password of user \"%s\" is in unrecognized format." msgstr "Passwort von Benutzer »%s« hat unbekanntes Format." -#: libpq/hba.c:243 +#: libpq/hba.c:241 #, c-format msgid "authentication file token too long, skipping: \"%s\"" msgstr "Token in Authentifizierungsdatei zu lang, wird übersprungen: »%s«" -#: libpq/hba.c:415 +#: libpq/hba.c:413 #, c-format msgid "could not open secondary authentication file \"@%s\" as \"%s\": %m" msgstr "konnte sekundäre Authentifizierungsdatei »@%s« nicht als »%s« öffnen: %m" -#: libpq/hba.c:861 +#: libpq/hba.c:859 #, c-format msgid "error enumerating network interfaces: %m" msgstr "Fehler beim Aufzählen der Netzwerkschnittstellen: %m" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:888 +#: libpq/hba.c:886 #, c-format msgid "authentication option \"%s\" is only valid for authentication methods %s" msgstr "Authentifizierungsoption »%s« ist nur gültig für Authentifizierungsmethoden %s" -#: libpq/hba.c:890 libpq/hba.c:910 libpq/hba.c:948 libpq/hba.c:998 -#: libpq/hba.c:1012 libpq/hba.c:1036 libpq/hba.c:1045 libpq/hba.c:1058 -#: libpq/hba.c:1079 libpq/hba.c:1092 libpq/hba.c:1112 libpq/hba.c:1134 -#: libpq/hba.c:1146 libpq/hba.c:1205 libpq/hba.c:1225 libpq/hba.c:1239 -#: libpq/hba.c:1259 libpq/hba.c:1270 libpq/hba.c:1285 libpq/hba.c:1304 -#: libpq/hba.c:1320 libpq/hba.c:1332 libpq/hba.c:1369 libpq/hba.c:1410 -#: libpq/hba.c:1423 libpq/hba.c:1445 libpq/hba.c:1457 libpq/hba.c:1475 -#: libpq/hba.c:1525 libpq/hba.c:1569 libpq/hba.c:1580 libpq/hba.c:1596 -#: libpq/hba.c:1613 libpq/hba.c:1623 libpq/hba.c:1683 libpq/hba.c:1721 -#: libpq/hba.c:1738 libpq/hba.c:1751 libpq/hba.c:1763 libpq/hba.c:1782 -#: libpq/hba.c:1869 libpq/hba.c:1887 libpq/hba.c:1981 libpq/hba.c:2000 -#: libpq/hba.c:2029 libpq/hba.c:2042 libpq/hba.c:2065 libpq/hba.c:2087 -#: libpq/hba.c:2101 tsearch/ts_locale.c:232 +#: libpq/hba.c:888 libpq/hba.c:908 libpq/hba.c:946 libpq/hba.c:996 +#: libpq/hba.c:1010 libpq/hba.c:1034 libpq/hba.c:1043 libpq/hba.c:1056 +#: libpq/hba.c:1077 libpq/hba.c:1090 libpq/hba.c:1110 libpq/hba.c:1132 +#: libpq/hba.c:1144 libpq/hba.c:1203 libpq/hba.c:1223 libpq/hba.c:1237 +#: libpq/hba.c:1257 libpq/hba.c:1268 libpq/hba.c:1283 libpq/hba.c:1302 +#: libpq/hba.c:1318 libpq/hba.c:1330 libpq/hba.c:1367 libpq/hba.c:1408 +#: libpq/hba.c:1421 libpq/hba.c:1443 libpq/hba.c:1455 libpq/hba.c:1473 +#: libpq/hba.c:1523 libpq/hba.c:1567 libpq/hba.c:1578 libpq/hba.c:1594 +#: libpq/hba.c:1611 libpq/hba.c:1622 libpq/hba.c:1641 libpq/hba.c:1657 +#: libpq/hba.c:1673 libpq/hba.c:1727 libpq/hba.c:1744 libpq/hba.c:1757 +#: libpq/hba.c:1769 libpq/hba.c:1788 libpq/hba.c:1875 libpq/hba.c:1893 +#: libpq/hba.c:1987 libpq/hba.c:2006 libpq/hba.c:2035 libpq/hba.c:2048 +#: libpq/hba.c:2071 libpq/hba.c:2093 libpq/hba.c:2107 tsearch/ts_locale.c:232 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "Zeile %d in Konfigurationsdatei »%s«" -#: libpq/hba.c:908 +#: libpq/hba.c:906 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "Authentifizierungsmethode »%s« benötigt Argument »%s«" -#: libpq/hba.c:936 +#: libpq/hba.c:934 #, c-format msgid "missing entry in file \"%s\" at end of line %d" msgstr "fehlender Eintrag in Datei »%s« am Ende von Zeile %d" -#: libpq/hba.c:947 +#: libpq/hba.c:945 #, c-format msgid "multiple values in ident field" msgstr "mehrere Werte in Ident-Feld" -#: libpq/hba.c:996 +#: libpq/hba.c:994 #, c-format msgid "multiple values specified for connection type" msgstr "mehrere Werte angegeben für Verbindungstyp" -#: libpq/hba.c:997 +#: libpq/hba.c:995 #, c-format msgid "Specify exactly one connection type per line." msgstr "Geben Sie genau einen Verbindungstyp pro Zeile an." -#: libpq/hba.c:1011 +#: libpq/hba.c:1009 #, c-format msgid "local connections are not supported by this build" msgstr "lokale Verbindungen werden von dieser Installation nicht unterstützt" -#: libpq/hba.c:1034 +#: libpq/hba.c:1032 #, c-format msgid "hostssl record cannot match because SSL is disabled" msgstr "hostssl-Eintrag kann nicht angewendet werden, weil SSL deaktiviert ist" -#: libpq/hba.c:1035 +#: libpq/hba.c:1033 #, c-format msgid "Set ssl = on in postgresql.conf." msgstr "Setzen Sie ssl = on in postgresql.conf." -#: libpq/hba.c:1043 +#: libpq/hba.c:1041 #, c-format msgid "hostssl record cannot match because SSL is not supported by this build" msgstr "hostssl-Eintrag kann nicht angewendet werden, weil SSL von dieser Installation nicht unterstützt wird" -#: libpq/hba.c:1044 +#: libpq/hba.c:1042 #, c-format msgid "Compile with --with-ssl to use SSL connections." msgstr "Kompilieren Sie mit --with-ssl, um SSL-Verbindungen zu verwenden." -#: libpq/hba.c:1056 +#: libpq/hba.c:1054 #, c-format msgid "hostgssenc record cannot match because GSSAPI is not supported by this build" msgstr "hostgssenc-Eintrag kann nicht angewendet werden, weil GSSAPI von dieser Installation nicht unterstützt wird" -#: libpq/hba.c:1057 +#: libpq/hba.c:1055 #, c-format msgid "Compile with --with-gssapi to use GSSAPI connections." msgstr "Kompilieren Sie mit --with-gssapi, um GSSAPI-Verbindungen zu verwenden." -#: libpq/hba.c:1077 +#: libpq/hba.c:1075 #, c-format msgid "invalid connection type \"%s\"" msgstr "ungültiger Verbindungstyp »%s«" -#: libpq/hba.c:1091 +#: libpq/hba.c:1089 #, c-format msgid "end-of-line before database specification" msgstr "Zeilenende vor Datenbankangabe" -#: libpq/hba.c:1111 +#: libpq/hba.c:1109 #, c-format msgid "end-of-line before role specification" msgstr "Zeilenende vor Rollenangabe" -#: libpq/hba.c:1133 +#: libpq/hba.c:1131 #, c-format msgid "end-of-line before IP address specification" msgstr "Zeilenende vor IP-Adressangabe" -#: libpq/hba.c:1144 +#: libpq/hba.c:1142 #, c-format msgid "multiple values specified for host address" msgstr "mehrere Werte für Hostadresse angegeben" -#: libpq/hba.c:1145 +#: libpq/hba.c:1143 #, c-format msgid "Specify one address range per line." msgstr "Geben Sie einen Adressbereich pro Zeile an." -#: libpq/hba.c:1203 +#: libpq/hba.c:1201 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "ungültige IP-Adresse »%s«: %s" -#: libpq/hba.c:1223 +#: libpq/hba.c:1221 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "Angabe von sowohl Hostname als auch CIDR-Maske ist ungültig: »%s«" -#: libpq/hba.c:1237 +#: libpq/hba.c:1235 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "ungültige CIDR-Maske in Adresse »%s«" -#: libpq/hba.c:1257 +#: libpq/hba.c:1255 #, c-format msgid "end-of-line before netmask specification" msgstr "Zeilenende vor Netzmaskenangabe" -#: libpq/hba.c:1258 +#: libpq/hba.c:1256 #, c-format msgid "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "Geben Sie einen Adressbereich in CIDR-Schreibweise oder eine separate Netzmaske an." -#: libpq/hba.c:1269 +#: libpq/hba.c:1267 #, c-format msgid "multiple values specified for netmask" msgstr "mehrere Werte für Netzmaske angegeben" -#: libpq/hba.c:1283 +#: libpq/hba.c:1281 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "ungültige IP-Maske »%s«: %s" -#: libpq/hba.c:1303 +#: libpq/hba.c:1301 #, c-format msgid "IP address and mask do not match" msgstr "IP-Adresse und -Maske passen nicht zusammen" -#: libpq/hba.c:1319 +#: libpq/hba.c:1317 #, c-format msgid "end-of-line before authentication method" msgstr "Zeilenende vor Authentifizierungsmethode" -#: libpq/hba.c:1330 +#: libpq/hba.c:1328 #, c-format msgid "multiple values specified for authentication type" msgstr "mehrere Werte für Authentifizierungstyp angegeben" -#: libpq/hba.c:1331 +#: libpq/hba.c:1329 #, c-format msgid "Specify exactly one authentication type per line." msgstr "Geben Sie genau einen Authentifizierungstyp pro Zeile an." -#: libpq/hba.c:1408 +#: libpq/hba.c:1406 #, c-format msgid "invalid authentication method \"%s\"" msgstr "ungültige Authentifizierungsmethode »%s«" -#: libpq/hba.c:1421 +#: libpq/hba.c:1419 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "ungültige Authentifizierungsmethode »%s«: von dieser Installation nicht unterstützt" -#: libpq/hba.c:1444 +#: libpq/hba.c:1442 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "gssapi-Authentifizierung wird auf lokalen Sockets nicht unterstützt" -#: libpq/hba.c:1456 +#: libpq/hba.c:1454 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "peer-Authentifizierung wird nur auf lokalen Sockets unterstützt" -#: libpq/hba.c:1474 +#: libpq/hba.c:1472 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "cert-Authentifizierung wird nur auf »hostssl«-Verbindungen unterstützt" -#: libpq/hba.c:1524 +#: libpq/hba.c:1522 #, c-format msgid "authentication option not in name=value format: %s" msgstr "Authentifizierungsoption nicht im Format name=wert: %s" -#: libpq/hba.c:1568 +#: libpq/hba.c:1566 #, c-format msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" msgstr "ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter oder ldapurl kann nicht zusammen mit ldapprefix verwendet werden" -#: libpq/hba.c:1579 +#: libpq/hba.c:1577 #, c-format msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" msgstr "Authentifizierungsmethode »ldap« benötigt Argument »ldapbasedn«, »ldapprefix« oder »ldapsuffix«" -#: libpq/hba.c:1595 +#: libpq/hba.c:1593 #, c-format msgid "cannot use ldapsearchattribute together with ldapsearchfilter" msgstr "ldapsearchattribute kann nicht zusammen mit ldapsearchfilter verwendet werden" -#: libpq/hba.c:1612 +#: libpq/hba.c:1610 #, c-format msgid "list of RADIUS servers cannot be empty" msgstr "List der RADIUS-Server darf nicht leer sein" -#: libpq/hba.c:1622 +#: libpq/hba.c:1621 #, c-format msgid "list of RADIUS secrets cannot be empty" msgstr "Liste der RADIUS-Geheimnisse darf nicht leer sein" -#: libpq/hba.c:1677 +#: libpq/hba.c:1638 #, c-format -msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" -msgstr "die Anzahl %s (%d) muss 1 oder gleich der Anzahl %s (%d) sein" +msgid "the number of RADIUS secrets (%d) must be 1 or the same as the number of RADIUS servers (%d)" +msgstr "die Anzahl der RADIUS-Geheimnisse (%d) muss 1 oder gleich der Anzahl der RADIUS-Server (%d) sein" -#: libpq/hba.c:1711 +#: libpq/hba.c:1654 +#, c-format +msgid "the number of RADIUS ports (%d) must be 1 or the same as the number of RADIUS servers (%d)" +msgstr "die Anzahl der RADIUS-Ports (%d) muss 1 oder gleich der Anzahl der RADIUS-Server (%d) sein" + +#: libpq/hba.c:1670 +#, c-format +msgid "the number of RADIUS identifiers (%d) must be 1 or the same as the number of RADIUS servers (%d)" +msgstr "die Anzahl der RADIUS-Bezeichner (%d) muss 1 oder gleich der Anzahl der RADIUS-Server (%d) sein" + +#: libpq/hba.c:1717 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi und cert" -#: libpq/hba.c:1720 +#: libpq/hba.c:1726 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert kann nur für »hostssl«-Zeilen konfiguriert werden" -#: libpq/hba.c:1737 +#: libpq/hba.c:1743 #, c-format msgid "clientcert only accepts \"verify-full\" when using \"cert\" authentication" msgstr "clientcert akzeptiert »verify-full« nur, wenn »cert«-Authentifizierung verwendet wird" -#: libpq/hba.c:1750 +#: libpq/hba.c:1756 #, c-format msgid "invalid value for clientcert: \"%s\"" msgstr "ungültiger Wert für clientcert: »%s«" -#: libpq/hba.c:1762 +#: libpq/hba.c:1768 #, c-format msgid "clientname can only be configured for \"hostssl\" rows" msgstr "clientname kann nur für »hostssl«-Zeilen konfiguriert werden" -#: libpq/hba.c:1781 +#: libpq/hba.c:1787 #, c-format msgid "invalid value for clientname: \"%s\"" msgstr "ungültiger Wert für clientname: »%s«" -#: libpq/hba.c:1815 +#: libpq/hba.c:1821 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "konnte LDAP-URL »%s« nicht interpretieren: %s" -#: libpq/hba.c:1826 +#: libpq/hba.c:1832 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "nicht unterstütztes LDAP-URL-Schema: %s" -#: libpq/hba.c:1850 +#: libpq/hba.c:1856 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "LDAP-URLs werden auf dieser Plattform nicht unterstützt" -#: libpq/hba.c:1868 +#: libpq/hba.c:1874 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "ungültiger ldapscheme-Wert: »%s«" -#: libpq/hba.c:1886 +#: libpq/hba.c:1892 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "ungültige LDAP-Portnummer: »%s«" -#: libpq/hba.c:1932 libpq/hba.c:1939 +#: libpq/hba.c:1938 libpq/hba.c:1945 msgid "gssapi and sspi" msgstr "gssapi und sspi" -#: libpq/hba.c:1948 libpq/hba.c:1957 +#: libpq/hba.c:1954 libpq/hba.c:1963 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:1979 +#: libpq/hba.c:1985 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "konnte RADIUS-Serverliste »%s« nicht parsen" -#: libpq/hba.c:2027 +#: libpq/hba.c:2033 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "konnte RADIUS-Portliste »%s« nicht parsen" -#: libpq/hba.c:2041 +#: libpq/hba.c:2047 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "ungültige RADIUS-Portnummer: »%s«" -#: libpq/hba.c:2063 +#: libpq/hba.c:2069 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "konnte RADIUS-Geheimnisliste »%s« nicht parsen" -#: libpq/hba.c:2085 +#: libpq/hba.c:2091 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "konnte RADIUS-Bezeichnerliste »%s« nicht parsen" -#: libpq/hba.c:2099 +#: libpq/hba.c:2105 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "unbekannter Authentifizierungsoptionsname: »%s«" -#: libpq/hba.c:2296 +#: libpq/hba.c:2302 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "Konfigurationsdatei »%s« enthält keine Einträge" -#: libpq/hba.c:2814 +#: libpq/hba.c:2820 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "ungültiger regulärer Ausdruck »%s«: %s" -#: libpq/hba.c:2874 +#: libpq/hba.c:2880 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "Suche nach regulärem Ausdruck für »%s« fehlgeschlagen: %s" -#: libpq/hba.c:2893 +#: libpq/hba.c:2899 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "regulärer Ausdruck »%s« hat keine Teilausdrücke wie von der Backreference in »%s« verlangt" -#: libpq/hba.c:2989 +#: libpq/hba.c:2995 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "angegebener Benutzername (%s) und authentifizierter Benutzername (%s) stimmen nicht überein" -#: libpq/hba.c:3009 +#: libpq/hba.c:3015 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "kein passender Eintrag in Usermap »%s« für Benutzer »%s«, authentifiziert als »%s«" -#: libpq/hba.c:3042 +#: libpq/hba.c:3048 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "konnte Usermap-Datei »%s« nicht öffnen: %m" @@ -14772,7 +14774,7 @@ msgstr "es besteht keine Client-Verbindung" msgid "could not receive data from client: %m" msgstr "konnte Daten vom Client nicht empfangen: %m" -#: libpq/pqcomm.c:1161 tcop/postgres.c:4280 +#: libpq/pqcomm.c:1161 tcop/postgres.c:4290 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "Verbindung wird abgebrochen, weil Protokollsynchronisierung verloren wurde" @@ -15335,13 +15337,11 @@ msgid "RETURNING must have at least one column" msgstr "RETURNING muss mindestens eine Spalte haben" #: parser/analyze.c:2571 -#, fuzzy, c-format -#| msgid "query \"%s\" returned %d column" -#| msgid_plural "query \"%s\" returned %d columns" +#, c-format msgid "assignment source returned %d column" msgid_plural "assignment source returned %d columns" -msgstr[0] "Anfrage »%s« hat %d Spalte zurückgegeben" -msgstr[1] "Anfrage »%s« hat %d Spalten zurückgegeben" +msgstr[0] "Quelle der Wertzuweisung hat %d Spalte zurückgegeben" +msgstr[1] "Quelle der Wertzuweisung hat %d Spalten zurückgegeben" #: parser/analyze.c:2632 #, c-format @@ -16200,10 +16200,9 @@ msgstr "mit »anycompatiblenonarray« gepaarter Typ ist ein Array-Typ: %s" #: parser/parse_coerce.c:2607 parser/parse_coerce.c:2658 #: utils/fmgr/funcapi.c:614 -#, fuzzy, c-format -#| msgid "could not find array type for data type %s" +#, c-format msgid "could not find multirange type for data type %s" -msgstr "konnte Arraytyp für Datentyp %s nicht finden" +msgstr "konnte Multirange-Typ für Datentyp %s nicht finden" #: parser/parse_coerce.c:2739 #, fuzzy, c-format @@ -17941,56 +17940,56 @@ msgstr "Schalten Sie die Option »track_counts« ein." #: postmaster/bgworker.c:256 #, c-format msgid "inconsistent background worker state (max_worker_processes=%d, total_slots=%d)" -msgstr "" +msgstr "inkonsistenter Background-Worker-Zustand (max_worker_processes=%d, total_slots=%d)" -#: postmaster/bgworker.c:650 +#: postmaster/bgworker.c:661 #, c-format msgid "background worker \"%s\": must attach to shared memory in order to request a database connection" msgstr "Background-Worker »%s«: muss mit Shared Memory verbinden, um eine Datenbankverbindung anzufordern" -#: postmaster/bgworker.c:659 +#: postmaster/bgworker.c:670 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "Background-Worker »%s«: kann kein Datenbankzugriff anfordern, wenn er nach Postmaster-Start gestartet hat" -#: postmaster/bgworker.c:673 +#: postmaster/bgworker.c:684 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "Background-Worker »%s«: ungültiges Neustart-Intervall" -#: postmaster/bgworker.c:688 +#: postmaster/bgworker.c:699 #, c-format msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "Background-Worker »%s«: parallele Arbeitsprozesse dürfen nicht für Neustart konfiguriert sein" -#: postmaster/bgworker.c:712 tcop/postgres.c:3182 +#: postmaster/bgworker.c:723 tcop/postgres.c:3188 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "Background-Worker »%s« wird abgebrochen aufgrund von Anweisung des Administrators" -#: postmaster/bgworker.c:893 +#: postmaster/bgworker.c:904 #, c-format msgid "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "Background-Worker »%s«: muss in shared_preload_libraries registriert sein" -#: postmaster/bgworker.c:905 +#: postmaster/bgworker.c:916 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "Background-Worker »%s«: nur dynamische Background-Worker können Benachrichtigung verlangen" -#: postmaster/bgworker.c:920 +#: postmaster/bgworker.c:931 #, c-format msgid "too many background workers" msgstr "zu viele Background-Worker" -#: postmaster/bgworker.c:921 +#: postmaster/bgworker.c:932 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." msgstr[0] "Mit den aktuellen Einstellungen können bis zu %d Background-Worker registriert werden." msgstr[1] "Mit den aktuellen Einstellungen können bis zu %d Background-Worker registriert werden." -#: postmaster/bgworker.c:925 +#: postmaster/bgworker.c:936 #, c-format msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Erhöhen Sie eventuell den Konfigurationsparameter »max_worker_processes«." @@ -18053,7 +18052,7 @@ msgstr "Der fehlgeschlagene Archivbefehl war: %s" msgid "archive command was terminated by exception 0x%X" msgstr "Archivbefehl wurde durch Ausnahme 0x%X beendet" -#: postmaster/pgarch.c:552 postmaster/postmaster.c:3722 +#: postmaster/pgarch.c:552 postmaster/postmaster.c:3724 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "Sehen Sie die Beschreibung des Hexadezimalwerts in der C-Include-Datei »ntstatus.h« nach." @@ -18138,211 +18137,211 @@ msgstr "Statistiksammelprozess abgeschaltet wegen nicht funkionierender Socket" msgid "could not fork statistics collector: %m" msgstr "konnte Statistiksammelprozess nicht starten (fork-Fehler): %m" -#: postmaster/pgstat.c:1449 +#: postmaster/pgstat.c:1459 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "unbekanntes Reset-Ziel: »%s«" -#: postmaster/pgstat.c:1450 +#: postmaster/pgstat.c:1460 #, fuzzy, c-format #| msgid "Target must be \"archiver\" or \"bgwriter\"." msgid "Target must be \"archiver\", \"bgwriter\" or \"wal\"." msgstr "Das Reset-Ziel muss »archiver« oder »bgwriter« sein." -#: postmaster/pgstat.c:3285 +#: postmaster/pgstat.c:3298 #, c-format msgid "could not read statistics message: %m" msgstr "konnte Statistiknachricht nicht lesen: %m" -#: postmaster/pgstat.c:3631 postmaster/pgstat.c:3816 +#: postmaster/pgstat.c:3644 postmaster/pgstat.c:3829 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "konnte temporäre Statistikdatei »%s« nicht öffnen: %m" -#: postmaster/pgstat.c:3726 postmaster/pgstat.c:3861 +#: postmaster/pgstat.c:3739 postmaster/pgstat.c:3874 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "konnte temporäre Statistikdatei »%s« nicht schreiben: %m" -#: postmaster/pgstat.c:3735 postmaster/pgstat.c:3870 +#: postmaster/pgstat.c:3748 postmaster/pgstat.c:3883 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "konnte temporäre Statistikdatei »%s« nicht schließen: %m" -#: postmaster/pgstat.c:3743 postmaster/pgstat.c:3878 +#: postmaster/pgstat.c:3756 postmaster/pgstat.c:3891 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "konnte temporäre Statistikdatei »%s« nicht in »%s« umbenennen: %m" -#: postmaster/pgstat.c:3976 postmaster/pgstat.c:4242 postmaster/pgstat.c:4399 +#: postmaster/pgstat.c:3989 postmaster/pgstat.c:4255 postmaster/pgstat.c:4412 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "konnte Statistikdatei »%s« nicht öffnen: %m" -#: postmaster/pgstat.c:3988 postmaster/pgstat.c:3998 postmaster/pgstat.c:4019 -#: postmaster/pgstat.c:4030 postmaster/pgstat.c:4041 postmaster/pgstat.c:4063 -#: postmaster/pgstat.c:4078 postmaster/pgstat.c:4148 postmaster/pgstat.c:4179 -#: postmaster/pgstat.c:4254 postmaster/pgstat.c:4274 postmaster/pgstat.c:4292 -#: postmaster/pgstat.c:4308 postmaster/pgstat.c:4326 postmaster/pgstat.c:4342 -#: postmaster/pgstat.c:4411 postmaster/pgstat.c:4423 postmaster/pgstat.c:4435 -#: postmaster/pgstat.c:4446 postmaster/pgstat.c:4457 postmaster/pgstat.c:4482 -#: postmaster/pgstat.c:4509 postmaster/pgstat.c:4522 +#: postmaster/pgstat.c:4001 postmaster/pgstat.c:4011 postmaster/pgstat.c:4032 +#: postmaster/pgstat.c:4043 postmaster/pgstat.c:4054 postmaster/pgstat.c:4076 +#: postmaster/pgstat.c:4091 postmaster/pgstat.c:4161 postmaster/pgstat.c:4192 +#: postmaster/pgstat.c:4267 postmaster/pgstat.c:4287 postmaster/pgstat.c:4305 +#: postmaster/pgstat.c:4321 postmaster/pgstat.c:4339 postmaster/pgstat.c:4355 +#: postmaster/pgstat.c:4424 postmaster/pgstat.c:4436 postmaster/pgstat.c:4448 +#: postmaster/pgstat.c:4459 postmaster/pgstat.c:4470 postmaster/pgstat.c:4495 +#: postmaster/pgstat.c:4522 postmaster/pgstat.c:4535 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "verfälschte Statistikdatei »%s«" -#: postmaster/pgstat.c:4631 +#: postmaster/pgstat.c:4644 #, c-format msgid "statistics collector's time %s is later than backend local time %s" msgstr "" -#: postmaster/pgstat.c:4654 +#: postmaster/pgstat.c:4667 #, c-format msgid "using stale statistics instead of current ones because stats collector is not responding" msgstr "verwende veraltete Statistiken anstatt aktueller, weil der Statistiksammelprozess nicht antwortet" -#: postmaster/pgstat.c:4781 +#: postmaster/pgstat.c:4794 #, c-format msgid "stats_timestamp %s is later than collector's time %s for database %u" msgstr "" -#: postmaster/pgstat.c:4991 +#: postmaster/pgstat.c:5004 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "Datenbank-Hash-Tabelle beim Aufräumen verfälscht --- Abbruch" -#: postmaster/postmaster.c:743 +#: postmaster/postmaster.c:745 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: ungültiges Argument für Option -f: »%s«\n" -#: postmaster/postmaster.c:822 +#: postmaster/postmaster.c:824 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: ungültiges Argument für Option -t: »%s«\n" -#: postmaster/postmaster.c:873 +#: postmaster/postmaster.c:875 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: ungültiges Argument: »%s«\n" -#: postmaster/postmaster.c:915 +#: postmaster/postmaster.c:917 #, c-format msgid "%s: superuser_reserved_connections (%d) must be less than max_connections (%d)\n" msgstr "%s: superuser_reserved_connections (%d) muss kleiner als max_connections (%d) sein\n" -#: postmaster/postmaster.c:922 +#: postmaster/postmaster.c:924 #, c-format msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" msgstr "WAL-Archivierung kann nicht eingeschaltet werden, wenn wal_level »minimal« ist" -#: postmaster/postmaster.c:925 +#: postmaster/postmaster.c:927 #, c-format msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" msgstr "WAL-Streaming (max_wal_senders > 0) benötigt wal_level »replica« oder »logical«" -#: postmaster/postmaster.c:933 +#: postmaster/postmaster.c:935 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: ungültige datetoken-Tabellen, bitte reparieren\n" -#: postmaster/postmaster.c:1050 +#: postmaster/postmaster.c:1052 #, c-format msgid "could not create I/O completion port for child queue" msgstr "konnte Ein-/Ausgabe-Completion-Port für Child-Queue nicht erzeugen" -#: postmaster/postmaster.c:1115 +#: postmaster/postmaster.c:1117 #, c-format msgid "ending log output to stderr" msgstr "Logausgabe nach stderr endet" -#: postmaster/postmaster.c:1116 +#: postmaster/postmaster.c:1118 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "Die weitere Logausgabe geht an Logziel »%s«." -#: postmaster/postmaster.c:1127 +#: postmaster/postmaster.c:1129 #, c-format msgid "starting %s" msgstr "%s startet" -#: postmaster/postmaster.c:1156 postmaster/postmaster.c:1255 +#: postmaster/postmaster.c:1158 postmaster/postmaster.c:1257 #: utils/init/miscinit.c:1627 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "ungültige Listensyntax für Parameter »%s«" -#: postmaster/postmaster.c:1187 +#: postmaster/postmaster.c:1189 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "konnte Listen-Socket für »%s« nicht erzeugen" -#: postmaster/postmaster.c:1193 +#: postmaster/postmaster.c:1195 #, c-format msgid "could not create any TCP/IP sockets" msgstr "konnte keine TCP/IP-Sockets erstellen" -#: postmaster/postmaster.c:1225 +#: postmaster/postmaster.c:1227 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "DNSServiceRegister() fehlgeschlagen: Fehlercode %ld" -#: postmaster/postmaster.c:1277 +#: postmaster/postmaster.c:1279 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "konnte Unix-Domain-Socket in Verzeichnis »%s« nicht erzeugen" -#: postmaster/postmaster.c:1283 +#: postmaster/postmaster.c:1285 #, c-format msgid "could not create any Unix-domain sockets" msgstr "konnte keine Unix-Domain-Sockets erzeugen" -#: postmaster/postmaster.c:1295 +#: postmaster/postmaster.c:1297 #, c-format msgid "no socket created for listening" msgstr "keine Listen-Socket erzeugt" -#: postmaster/postmaster.c:1326 +#: postmaster/postmaster.c:1328 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: konnte Rechte der externen PID-Datei »%s« nicht ändern: %s\n" -#: postmaster/postmaster.c:1330 +#: postmaster/postmaster.c:1332 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: konnte externe PID-Datei »%s« nicht schreiben: %s\n" -#: postmaster/postmaster.c:1363 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1365 utils/init/postinit.c:216 #, c-format msgid "could not load pg_hba.conf" msgstr "konnte pg_hba.conf nicht laden" -#: postmaster/postmaster.c:1389 +#: postmaster/postmaster.c:1391 #, c-format msgid "postmaster became multithreaded during startup" msgstr "Postmaster ist während des Starts multithreaded geworden" -#: postmaster/postmaster.c:1390 +#: postmaster/postmaster.c:1392 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Setzen Sie die Umgebungsvariable LC_ALL auf eine gültige Locale." -#: postmaster/postmaster.c:1485 +#: postmaster/postmaster.c:1487 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: konnte Pfad des eigenen Programs nicht finden" -#: postmaster/postmaster.c:1492 +#: postmaster/postmaster.c:1494 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: konnte kein passendes Programm »postgres« finden" -#: postmaster/postmaster.c:1515 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1517 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Dies kann auf eine unvollständige PostgreSQL-Installation hindeuten, oder darauf, dass die Datei »%s« von ihrer richtigen Stelle verschoben worden ist." -#: postmaster/postmaster.c:1542 +#: postmaster/postmaster.c:1544 #, c-format msgid "" "%s: could not find the database system\n" @@ -18353,460 +18352,468 @@ msgstr "" "Es wurde im Verzeichnis »%s« erwartet,\n" "aber die Datei »%s« konnte nicht geöffnet werden: %s\n" -#: postmaster/postmaster.c:1719 +#: postmaster/postmaster.c:1721 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() fehlgeschlagen im Postmaster: %m" -#: postmaster/postmaster.c:1855 +#: postmaster/postmaster.c:1857 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "" -#: postmaster/postmaster.c:1876 +#: postmaster/postmaster.c:1878 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "führe sofortiges Herunterfahren durch, weil Sperrdatei im Datenverzeichnis ungültig ist" -#: postmaster/postmaster.c:1979 postmaster/postmaster.c:2007 +#: postmaster/postmaster.c:1981 postmaster/postmaster.c:2009 #, c-format msgid "incomplete startup packet" msgstr "unvollständiges Startpaket" -#: postmaster/postmaster.c:1991 +#: postmaster/postmaster.c:1993 #, c-format msgid "invalid length of startup packet" msgstr "ungültige Länge des Startpakets" -#: postmaster/postmaster.c:2046 +#: postmaster/postmaster.c:2048 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "konnte SSL-Verhandlungsantwort nicht senden: %m" -#: postmaster/postmaster.c:2078 +#: postmaster/postmaster.c:2080 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "konnte GSSAPI-Verhandlungsantwort nicht senden: %m" -#: postmaster/postmaster.c:2108 +#: postmaster/postmaster.c:2110 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "nicht unterstütztes Frontend-Protokoll %u.%u: Server unterstützt %u.0 bis %u.%u" -#: postmaster/postmaster.c:2172 utils/misc/guc.c:7093 utils/misc/guc.c:7129 -#: utils/misc/guc.c:7199 utils/misc/guc.c:8531 utils/misc/guc.c:11487 -#: utils/misc/guc.c:11528 +#: postmaster/postmaster.c:2174 utils/misc/guc.c:7112 utils/misc/guc.c:7148 +#: utils/misc/guc.c:7218 utils/misc/guc.c:8550 utils/misc/guc.c:11506 +#: utils/misc/guc.c:11547 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "ungültiger Wert für Parameter »%s«: »%s«" -#: postmaster/postmaster.c:2175 +#: postmaster/postmaster.c:2177 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Gültige Werte sind: »false«, 0, »true«, 1, »database«." -#: postmaster/postmaster.c:2220 +#: postmaster/postmaster.c:2222 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "ungültiges Layout des Startpakets: Abschluss als letztes Byte erwartet" -#: postmaster/postmaster.c:2237 +#: postmaster/postmaster.c:2239 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "kein PostgreSQL-Benutzername im Startpaket angegeben" -#: postmaster/postmaster.c:2301 +#: postmaster/postmaster.c:2303 #, c-format msgid "the database system is starting up" msgstr "das Datenbanksystem startet" -#: postmaster/postmaster.c:2307 -#, fuzzy, c-format -#| msgid "database system is ready to accept connections" +#: postmaster/postmaster.c:2309 +#, c-format msgid "the database system is not yet accepting connections" -msgstr "Datenbanksystem ist bereit, um Verbindungen anzunehmen" +msgstr "das Datenbanksystem nimmt noch keine Verbindungen an" -#: postmaster/postmaster.c:2308 -#, fuzzy, c-format -#| msgid "consistent recovery state reached at %X/%X" +#: postmaster/postmaster.c:2310 +#, c-format msgid "Consistent recovery state has not been yet reached." -msgstr "konsistenter Wiederherstellungszustand erreicht bei %X/%X" +msgstr "Konsistenter Wiederherstellungszustand wurde noch nicht erreicht." -#: postmaster/postmaster.c:2312 -#, fuzzy, c-format -#| msgid "database system is ready to accept connections" +#: postmaster/postmaster.c:2314 +#, c-format msgid "the database system is not accepting connections" -msgstr "Datenbanksystem ist bereit, um Verbindungen anzunehmen" +msgstr "das Datenbanksystem nimmt keine Verbindungen an" -#: postmaster/postmaster.c:2313 +#: postmaster/postmaster.c:2315 #, c-format msgid "Hot standby mode is disabled." msgstr "Hot-Standby-Modus ist deaktiviert." -#: postmaster/postmaster.c:2318 +#: postmaster/postmaster.c:2320 #, c-format msgid "the database system is shutting down" msgstr "das Datenbanksystem fährt herunter" -#: postmaster/postmaster.c:2323 +#: postmaster/postmaster.c:2325 #, c-format msgid "the database system is in recovery mode" msgstr "das Datenbanksystem ist im Wiederherstellungsmodus" -#: postmaster/postmaster.c:2328 storage/ipc/procarray.c:463 +#: postmaster/postmaster.c:2330 storage/ipc/procarray.c:463 #: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "tut mir leid, schon zu viele Verbindungen" -#: postmaster/postmaster.c:2418 +#: postmaster/postmaster.c:2420 #, c-format msgid "wrong key in cancel request for process %d" msgstr "falscher Schlüssel in Stornierungsanfrage für Prozess %d" -#: postmaster/postmaster.c:2430 +#: postmaster/postmaster.c:2432 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "PID %d in Stornierungsanfrage stimmte mit keinem Prozess überein" -#: postmaster/postmaster.c:2684 +#: postmaster/postmaster.c:2686 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "SIGHUP empfangen, Konfigurationsdateien werden neu geladen" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2710 postmaster/postmaster.c:2714 +#: postmaster/postmaster.c:2712 postmaster/postmaster.c:2716 #, c-format msgid "%s was not reloaded" msgstr "%s wurde nicht neu geladen" -#: postmaster/postmaster.c:2724 +#: postmaster/postmaster.c:2726 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL-Konfiguration wurde nicht neu geladen" -#: postmaster/postmaster.c:2780 +#: postmaster/postmaster.c:2782 #, c-format msgid "received smart shutdown request" msgstr "intelligentes Herunterfahren verlangt" -#: postmaster/postmaster.c:2826 +#: postmaster/postmaster.c:2828 #, c-format msgid "received fast shutdown request" msgstr "schnelles Herunterfahren verlangt" -#: postmaster/postmaster.c:2844 +#: postmaster/postmaster.c:2846 #, c-format msgid "aborting any active transactions" msgstr "etwaige aktive Transaktionen werden abgebrochen" -#: postmaster/postmaster.c:2868 +#: postmaster/postmaster.c:2870 #, c-format msgid "received immediate shutdown request" msgstr "sofortiges Herunterfahren verlangt" -#: postmaster/postmaster.c:2945 +#: postmaster/postmaster.c:2947 #, c-format msgid "shutdown at recovery target" msgstr "Herunterfahren beim Wiederherstellungsziel" -#: postmaster/postmaster.c:2963 postmaster/postmaster.c:2999 +#: postmaster/postmaster.c:2965 postmaster/postmaster.c:3001 msgid "startup process" msgstr "Startprozess" -#: postmaster/postmaster.c:2966 +#: postmaster/postmaster.c:2968 #, c-format msgid "aborting startup due to startup process failure" msgstr "Serverstart abgebrochen wegen Startprozessfehler" -#: postmaster/postmaster.c:3041 +#: postmaster/postmaster.c:3043 #, c-format msgid "database system is ready to accept connections" msgstr "Datenbanksystem ist bereit, um Verbindungen anzunehmen" -#: postmaster/postmaster.c:3062 +#: postmaster/postmaster.c:3064 msgid "background writer process" msgstr "Background-Writer-Prozess" -#: postmaster/postmaster.c:3116 +#: postmaster/postmaster.c:3118 msgid "checkpointer process" msgstr "Checkpointer-Prozess" -#: postmaster/postmaster.c:3132 +#: postmaster/postmaster.c:3134 msgid "WAL writer process" msgstr "WAL-Schreibprozess" -#: postmaster/postmaster.c:3147 +#: postmaster/postmaster.c:3149 msgid "WAL receiver process" msgstr "WAL-Receiver-Prozess" -#: postmaster/postmaster.c:3162 +#: postmaster/postmaster.c:3164 msgid "autovacuum launcher process" msgstr "Autovacuum-Launcher-Prozess" -#: postmaster/postmaster.c:3180 +#: postmaster/postmaster.c:3182 msgid "archiver process" msgstr "Archivierprozess" -#: postmaster/postmaster.c:3195 +#: postmaster/postmaster.c:3197 msgid "statistics collector process" msgstr "Statistiksammelprozess" -#: postmaster/postmaster.c:3209 +#: postmaster/postmaster.c:3211 msgid "system logger process" msgstr "Systemlogger-Prozess" -#: postmaster/postmaster.c:3273 +#: postmaster/postmaster.c:3275 #, c-format msgid "background worker \"%s\"" msgstr "Background-Worker »%s«" -#: postmaster/postmaster.c:3357 postmaster/postmaster.c:3377 -#: postmaster/postmaster.c:3384 postmaster/postmaster.c:3402 +#: postmaster/postmaster.c:3359 postmaster/postmaster.c:3379 +#: postmaster/postmaster.c:3386 postmaster/postmaster.c:3404 msgid "server process" msgstr "Serverprozess" -#: postmaster/postmaster.c:3456 +#: postmaster/postmaster.c:3458 #, c-format msgid "terminating any other active server processes" msgstr "aktive Serverprozesse werden abgebrochen" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3709 +#: postmaster/postmaster.c:3711 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) beendete mit Status %d" -#: postmaster/postmaster.c:3711 postmaster/postmaster.c:3723 -#: postmaster/postmaster.c:3733 postmaster/postmaster.c:3744 +#: postmaster/postmaster.c:3713 postmaster/postmaster.c:3725 +#: postmaster/postmaster.c:3735 postmaster/postmaster.c:3746 #, c-format msgid "Failed process was running: %s" msgstr "Der fehlgeschlagene Prozess führte aus: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3720 +#: postmaster/postmaster.c:3722 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) wurde durch Ausnahme 0x%X beendet" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3730 +#: postmaster/postmaster.c:3732 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) wurde von Signal %d beendet: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3742 +#: postmaster/postmaster.c:3744 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) beendete mit unbekanntem Status %d" -#: postmaster/postmaster.c:3957 +#: postmaster/postmaster.c:3959 #, c-format msgid "abnormal database system shutdown" msgstr "abnormales Herunterfahren des Datenbanksystems" #: postmaster/postmaster.c:3997 +#, fuzzy, c-format +#| msgid "aborting startup due to startup process failure" +msgid "shutting down due to startup process failure" +msgstr "Serverstart abgebrochen wegen Startprozessfehler" + +#: postmaster/postmaster.c:4003 +#, c-format +msgid "shutting down because restart_after_crash is off" +msgstr "" + +#: postmaster/postmaster.c:4015 #, c-format msgid "all server processes terminated; reinitializing" msgstr "alle Serverprozesse beendet; initialisiere neu" -#: postmaster/postmaster.c:4171 postmaster/postmaster.c:5531 -#: postmaster/postmaster.c:5922 +#: postmaster/postmaster.c:4189 postmaster/postmaster.c:5548 +#: postmaster/postmaster.c:5939 #, c-format msgid "could not generate random cancel key" msgstr "konnte zufälligen Stornierungsschlüssel nicht erzeugen" -#: postmaster/postmaster.c:4225 +#: postmaster/postmaster.c:4243 #, c-format msgid "could not fork new process for connection: %m" msgstr "konnte neuen Prozess für Verbindung nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:4267 +#: postmaster/postmaster.c:4285 msgid "could not fork new process for connection: " msgstr "konnte neuen Prozess für Verbindung nicht starten (fork-Fehler): " -#: postmaster/postmaster.c:4373 +#: postmaster/postmaster.c:4391 #, c-format msgid "connection received: host=%s port=%s" msgstr "Verbindung empfangen: Host=%s Port=%s" -#: postmaster/postmaster.c:4378 +#: postmaster/postmaster.c:4396 #, c-format msgid "connection received: host=%s" msgstr "Verbindung empfangen: Host=%s" -#: postmaster/postmaster.c:4621 +#: postmaster/postmaster.c:4639 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "konnte Serverprozess »%s« nicht ausführen: %m" -#: postmaster/postmaster.c:4679 +#: postmaster/postmaster.c:4697 #, fuzzy, c-format #| msgid "could not close handle to backend parameter variables: error code %lu\n" msgid "could not create backend parameter file mapping: error code %lu" msgstr "konnte Handle für Backend-Parametervariablen nicht schließen: Fehlercode %lu\n" -#: postmaster/postmaster.c:4688 +#: postmaster/postmaster.c:4706 #, fuzzy, c-format #| msgid "could not map view of backend variables: error code %lu\n" msgid "could not map backend parameter memory: error code %lu" msgstr "konnte Sicht der Backend-Variablen nicht mappen: Fehlercode %lu\n" -#: postmaster/postmaster.c:4715 +#: postmaster/postmaster.c:4733 #, fuzzy, c-format #| msgid "command too long\n" msgid "subprocess command line too long" msgstr "Befehl zu lang\n" -#: postmaster/postmaster.c:4733 +#: postmaster/postmaster.c:4751 #, fuzzy, c-format #| msgid "pgpipe: getsockname() failed: error code %d" msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "pgpipe: getsockname() fehlgeschlagen: Fehlercode %d" -#: postmaster/postmaster.c:4760 +#: postmaster/postmaster.c:4778 #, fuzzy, c-format #| msgid "could not unmap view of backend variables: error code %lu\n" msgid "could not unmap view of backend parameter file: error code %lu" msgstr "konnte Sicht der Backend-Variablen nicht unmappen: Fehlercode %lu\n" -#: postmaster/postmaster.c:4764 +#: postmaster/postmaster.c:4782 #, fuzzy, c-format #| msgid "could not close handle to backend parameter variables: error code %lu\n" msgid "could not close handle to backend parameter file: error code %lu" msgstr "konnte Handle für Backend-Parametervariablen nicht schließen: Fehlercode %lu\n" -#: postmaster/postmaster.c:4786 +#: postmaster/postmaster.c:4804 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "Aufgabe nach zu vielen Versuchen, Shared Memory zu reservieren" -#: postmaster/postmaster.c:4787 +#: postmaster/postmaster.c:4805 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Dies kann durch ASLR oder Antivirus-Software verursacht werden." -#: postmaster/postmaster.c:4977 +#: postmaster/postmaster.c:4995 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "SSL-Konfiguration konnte im Kindprozess nicht geladen werden" -#: postmaster/postmaster.c:5103 +#: postmaster/postmaster.c:5121 #, c-format msgid "Please report this to <%s>." msgstr "Bitte berichten Sie dies an <%s>." -#: postmaster/postmaster.c:5190 +#: postmaster/postmaster.c:5208 #, c-format msgid "database system is ready to accept read only connections" msgstr "Datenbanksystem ist bereit, um lesende Verbindungen anzunehmen" -#: postmaster/postmaster.c:5455 +#: postmaster/postmaster.c:5472 #, c-format msgid "could not fork startup process: %m" msgstr "konnte Startprozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5459 +#: postmaster/postmaster.c:5476 #, c-format msgid "could not fork archiver process: %m" msgstr "konnte Archivierer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5463 +#: postmaster/postmaster.c:5480 #, c-format msgid "could not fork background writer process: %m" msgstr "konnte Background-Writer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5467 +#: postmaster/postmaster.c:5484 #, c-format msgid "could not fork checkpointer process: %m" msgstr "konnte Checkpointer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5471 +#: postmaster/postmaster.c:5488 #, c-format msgid "could not fork WAL writer process: %m" msgstr "konnte WAL-Writer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5475 +#: postmaster/postmaster.c:5492 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "konnte WAL-Receiver-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5479 +#: postmaster/postmaster.c:5496 #, c-format msgid "could not fork process: %m" msgstr "konnte Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5680 postmaster/postmaster.c:5703 +#: postmaster/postmaster.c:5697 postmaster/postmaster.c:5720 #, c-format msgid "database connection requirement not indicated during registration" msgstr "die Notwendigkeit, Datenbankverbindungen zu erzeugen, wurde bei der Registrierung nicht angezeigt" -#: postmaster/postmaster.c:5687 postmaster/postmaster.c:5710 +#: postmaster/postmaster.c:5704 postmaster/postmaster.c:5727 #, c-format msgid "invalid processing mode in background worker" msgstr "ungültiger Verarbeitungsmodus in Background-Worker" -#: postmaster/postmaster.c:5795 +#: postmaster/postmaster.c:5812 #, c-format msgid "could not fork worker process: %m" msgstr "konnte Worker-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5908 +#: postmaster/postmaster.c:5925 #, c-format msgid "no slot available for new worker process" msgstr "kein Slot für neuen Worker-Prozess verfügbar" -#: postmaster/postmaster.c:6241 +#: postmaster/postmaster.c:6259 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "konnte Socket %d nicht für Verwendung in Backend duplizieren: Fehlercode %d" -#: postmaster/postmaster.c:6273 +#: postmaster/postmaster.c:6291 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "konnte geerbtes Socket nicht erzeugen: Fehlercode %d\n" -#: postmaster/postmaster.c:6302 +#: postmaster/postmaster.c:6320 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "konnte Servervariablendatei »%s« nicht öffnen: %s\n" -#: postmaster/postmaster.c:6309 +#: postmaster/postmaster.c:6327 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "konnte nicht aus Servervariablendatei »%s« lesen: %s\n" -#: postmaster/postmaster.c:6318 +#: postmaster/postmaster.c:6336 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "konnte Datei »%s« nicht löschen: %s\n" -#: postmaster/postmaster.c:6335 +#: postmaster/postmaster.c:6353 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "konnte Sicht der Backend-Variablen nicht mappen: Fehlercode %lu\n" -#: postmaster/postmaster.c:6344 +#: postmaster/postmaster.c:6362 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "konnte Sicht der Backend-Variablen nicht unmappen: Fehlercode %lu\n" -#: postmaster/postmaster.c:6351 +#: postmaster/postmaster.c:6369 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "konnte Handle für Backend-Parametervariablen nicht schließen: Fehlercode %lu\n" -#: postmaster/postmaster.c:6527 +#: postmaster/postmaster.c:6546 #, c-format msgid "could not read exit code for process\n" msgstr "konnte Exitcode des Prozesses nicht lesen\n" -#: postmaster/postmaster.c:6532 +#: postmaster/postmaster.c:6551 #, c-format msgid "could not post child completion status\n" msgstr "konnte Child-Completion-Status nicht versenden\n" @@ -19406,20 +19413,19 @@ msgstr "Replication-Origin-Namen, die mit »pg_« anfangen, sind reserviert." #: replication/logical/relation.c:248 #, c-format msgid "\"%s\"" -msgstr "" +msgstr "»%s«" #: replication/logical/relation.c:251 #, c-format msgid ", \"%s\"" -msgstr "" +msgstr ", »%s«" #: replication/logical/relation.c:257 -#, fuzzy, c-format -#| msgid "logical replication target relation \"%s.%s\" is missing some replicated columns" +#, c-format msgid "logical replication target relation \"%s.%s\" is missing replicated column: %s" msgid_plural "logical replication target relation \"%s.%s\" is missing replicated columns: %s" -msgstr[0] "in Zielrelation für logische Replikation »%s.%s« fehlen replizierte Spalten" -msgstr[1] "in Zielrelation für logische Replikation »%s.%s« fehlen replizierte Spalten" +msgstr[0] "in Zielrelation für logische Replikation »%s.%s« fehlt eine replizierte Spalte: %s" +msgstr[1] "in Zielrelation für logische Replikation »%s.%s« fehlen replizierte Spalten: %s" #: replication/logical/relation.c:337 #, c-format @@ -19431,29 +19437,29 @@ msgstr "Zielrelation für logische Replikation »%s.%s« existiert nicht" msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "Zielrelation für logische Replikation »%s.%s« verwendet Systemspalten in REPLICA-IDENTITY-Index" -#: replication/logical/reorderbuffer.c:3773 +#: replication/logical/reorderbuffer.c:3777 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "konnte nicht in Datendatei für XID %u schreiben: %m" -#: replication/logical/reorderbuffer.c:4116 -#: replication/logical/reorderbuffer.c:4141 +#: replication/logical/reorderbuffer.c:4120 +#: replication/logical/reorderbuffer.c:4145 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "konnte nicht aus Reorder-Buffer-Spill-Datei lesen: %m" -#: replication/logical/reorderbuffer.c:4120 -#: replication/logical/reorderbuffer.c:4145 +#: replication/logical/reorderbuffer.c:4124 +#: replication/logical/reorderbuffer.c:4149 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "konnte nicht aus Reorder-Buffer-Spill-Datei lesen: %d statt %u Bytes gelesen" -#: replication/logical/reorderbuffer.c:4393 +#: replication/logical/reorderbuffer.c:4397 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "konnte Datei »%s« nicht löschen, bei Löschen von pg_replslot/%s/xid*: %m" -#: replication/logical/reorderbuffer.c:4883 +#: replication/logical/reorderbuffer.c:4887 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "konnte nicht aus Datei »%s« lesen: %d statt %d Bytes gelesen" @@ -19563,137 +19569,137 @@ msgstr "Replication-Origin »%s« existiert bereits" msgid "table copy could not finish transaction on publisher: %s" msgstr "beim Kopieren der Tabelle konnte die Transaktion auf dem Publikationsserver nicht beenden werden" -#: replication/logical/worker.c:490 +#: replication/logical/worker.c:525 #, c-format msgid "processing remote data for replication target relation \"%s.%s\" column \"%s\", remote type %s, local type %s" msgstr "Verarbeiten empfangener Daten für Replikationszielrelation »%s.%s« Spalte »%s«, entfernter Typ %s, lokaler Typ %s" -#: replication/logical/worker.c:570 replication/logical/worker.c:699 +#: replication/logical/worker.c:605 replication/logical/worker.c:734 #, fuzzy, c-format #| msgid "incorrect binary data format in function argument %d" msgid "incorrect binary data format in logical replication column %d" msgstr "falsches Binärdatenformat in Funktionsargument %d" -#: replication/logical/worker.c:778 +#: replication/logical/worker.c:813 #, c-format msgid "ORIGIN message sent out of order" msgstr "ORIGIN-Nachricht in falscher Reihenfolge gesendet" -#: replication/logical/worker.c:1037 replication/logical/worker.c:1049 +#: replication/logical/worker.c:1072 replication/logical/worker.c:1084 #, fuzzy, c-format #| msgid "could not read from backend variables file \"%s\": %s\n" msgid "could not read from streaming transaction's changes file \"%s\": %m" msgstr "konnte nicht aus Servervariablendatei »%s« lesen: %s\n" -#: replication/logical/worker.c:1274 +#: replication/logical/worker.c:1313 #, c-format msgid "publisher did not send replica identity column expected by the logical replication target relation \"%s.%s\"" msgstr "Publikationsserver hat nicht die Replikidentitätsspalten gesendet, die von Replikationszielrelation »%s.%s« erwartet wurden" -#: replication/logical/worker.c:1281 +#: replication/logical/worker.c:1320 #, c-format msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "Zielrelation für logische Replikation »%s.%s« hat weder REPLICA-IDENTITY-Index noch Primärschlüssel und die publizierte Relation hat kein REPLICA IDENTITY FULL" -#: replication/logical/worker.c:1994 +#: replication/logical/worker.c:2039 #, c-format msgid "invalid logical replication message type \"%c\"" msgstr "ungültiger Nachrichtentyp für logische Replikation »%c«" -#: replication/logical/worker.c:2145 +#: replication/logical/worker.c:2190 #, c-format msgid "data stream from publisher has ended" msgstr "Datenstrom vom Publikationsserver endete" -#: replication/logical/worker.c:2295 +#: replication/logical/worker.c:2340 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "Arbeitsprozess für logische Replikation wird abgebrochen wegen Zeitüberschreitung" -#: replication/logical/worker.c:2443 +#: replication/logical/worker.c:2488 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was removed" msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird anhalten, weil die Subskription entfernt wurde" -#: replication/logical/worker.c:2457 +#: replication/logical/worker.c:2502 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird anhalten, weil die Subskription deaktiviert wurde" -#: replication/logical/worker.c:2479 +#: replication/logical/worker.c:2524 #, fuzzy, c-format #| msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" msgid "logical replication apply worker for subscription \"%s\" will restart because of a parameter change" msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird neu starten, weil die Subskription umbenannt wurde" -#: replication/logical/worker.c:2642 replication/logical/worker.c:2664 +#: replication/logical/worker.c:2687 replication/logical/worker.c:2709 #, fuzzy, c-format #| msgid "could not read from file \"%s\": %m" msgid "could not read from streaming transaction's subxact file \"%s\": %m" msgstr "konnte nicht aus Datei »%s« lesen: %m" -#: replication/logical/worker.c:3010 +#: replication/logical/worker.c:3055 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "Apply-Worker für logische Replikation für Subskription %u« wird nicht starten, weil die Subskription während des Starts deaktiviert wurde" -#: replication/logical/worker.c:3022 +#: replication/logical/worker.c:3067 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird nicht starten, weil die Subskription während des Starts deaktiviert wurde" -#: replication/logical/worker.c:3040 +#: replication/logical/worker.c:3085 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "Arbeitsprozess für logische Replikation für Tabellensynchronisation für Subskription »%s«, Tabelle »%s« hat gestartet" -#: replication/logical/worker.c:3044 +#: replication/logical/worker.c:3089 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "Apply-Worker für logische Replikation für Subskription »%s« hat gestartet" -#: replication/logical/worker.c:3081 +#: replication/logical/worker.c:3126 #, c-format msgid "subscription has no replication slot set" msgstr "für die Subskription ist kein Replikations-Slot gesetzt" -#: replication/pgoutput/pgoutput.c:198 +#: replication/pgoutput/pgoutput.c:195 #, c-format msgid "invalid proto_version" msgstr "ungültige proto_version" -#: replication/pgoutput/pgoutput.c:203 +#: replication/pgoutput/pgoutput.c:200 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version »%s« ist außerhalb des gültigen Bereichs" -#: replication/pgoutput/pgoutput.c:220 +#: replication/pgoutput/pgoutput.c:217 #, c-format msgid "invalid publication_names syntax" msgstr "ungültige Syntax für publication_names" -#: replication/pgoutput/pgoutput.c:290 +#: replication/pgoutput/pgoutput.c:287 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "Client sendete proto_version=%d, aber wir unterstützen nur Protokoll %d oder niedriger" -#: replication/pgoutput/pgoutput.c:296 +#: replication/pgoutput/pgoutput.c:293 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "Client sendete proto_version=%d, aber wir unterstützen nur Protokoll %d oder höher" -#: replication/pgoutput/pgoutput.c:302 +#: replication/pgoutput/pgoutput.c:299 #, c-format msgid "publication_names parameter missing" msgstr "Parameter »publication_names« fehlt" -#: replication/pgoutput/pgoutput.c:315 +#: replication/pgoutput/pgoutput.c:312 #, fuzzy, c-format #| msgid "client sent proto_version=%d but we only support protocol %d or higher" msgid "requested proto_version=%d does not support streaming, need %d or higher" msgstr "Client sendete proto_version=%d, aber wir unterstützen nur Protokoll %d oder höher" -#: replication/pgoutput/pgoutput.c:320 +#: replication/pgoutput/pgoutput.c:317 #, fuzzy, c-format #| msgid "integer of size %lu not supported by pqPutInt" msgid "streaming requested, but not supported by output plugin" @@ -20995,7 +21001,7 @@ msgstr "muss Mitglied der Rolle sein, deren Anfrage storniert wird, oder Mitglie #: storage/ipc/signalfuncs.c:165 #, c-format msgid "could not check the existence of the backend with PID %d: %m" -msgstr "" +msgstr "konnte die Existenz des Backend mit PID %d nicht prüfen: %m" #: storage/ipc/signalfuncs.c:183 #, fuzzy, c-format @@ -21004,16 +21010,14 @@ msgid "backend with PID %d did not terminate within %lld milliseconds" msgstr "Befördern des Servers wurde nicht innerhalb von %d Sekunden abgeschlossen" #: storage/ipc/signalfuncs.c:212 -#, fuzzy, c-format -#| msgid "LIMIT must not be negative" +#, c-format msgid "\"timeout\" must not be negative" -msgstr "LIMIT darf nicht negativ sein" +msgstr "»timeout« darf nicht negativ sein" #: storage/ipc/signalfuncs.c:254 -#, fuzzy, c-format -#| msgid "\"wait_seconds\" must not be negative or zero" +#, c-format msgid "\"timeout\" must not be negative or zero" -msgstr "»wait_seconds« darf nicht negativ oder null sein" +msgstr "»timeout« darf nicht negativ oder null sein" #: storage/ipc/signalfuncs.c:300 #, c-format @@ -21043,7 +21047,7 @@ msgstr "Prozess %d wartet immer noch auf %s-Sperre auf %s nach %ld,%03d ms" msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "Prozess %d wartet immer noch auf %s-Sperre auf %s nach %ld,%03d ms" -#: storage/ipc/standby.c:878 tcop/postgres.c:3307 +#: storage/ipc/standby.c:878 tcop/postgres.c:3317 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "storniere Anfrage wegen Konflikt mit der Wiederherstellung" @@ -21054,10 +21058,8 @@ msgid "User transaction caused buffer deadlock with recovery." msgstr "Benutzertransaktion hat Verklemmung (Deadlock) mit Wiederherstellung verursacht." #: storage/ipc/standby.c:1421 -#, fuzzy -#| msgid "unknown" msgid "unknown reason" -msgstr "unbekannt" +msgstr "unbekannter Grund" #: storage/ipc/standby.c:1426 msgid "recovery conflict on buffer pin" @@ -21474,7 +21476,7 @@ msgstr "ungültige Argumentgröße %d in Funktionsaufruf-Message" msgid "incorrect binary data format in function argument %d" msgstr "falsches Binärdatenformat in Funktionsargument %d" -#: tcop/postgres.c:446 tcop/postgres.c:4706 +#: tcop/postgres.c:446 tcop/postgres.c:4716 #, c-format msgid "invalid frontend message type %d" msgstr "ungültiger Frontend-Message-Typ %d" @@ -21588,34 +21590,29 @@ msgid "User was connected to a database that must be dropped." msgstr "Benutzer war mit einer Datenbank verbunden, die gelöscht werden muss." #: tcop/postgres.c:2513 -#, fuzzy, c-format -#| msgid "portal \"%s\" with parameters: %s" +#, c-format msgid "portal \"%s\" parameter $%d = %s" -msgstr "Portal »%s« mit Parametern: %s" +msgstr "Portal »%s« Parameter $%d = %s" #: tcop/postgres.c:2516 -#, fuzzy, c-format -#| msgid "portal \"%s\" with parameters: %s" +#, c-format msgid "portal \"%s\" parameter $%d" -msgstr "Portal »%s« mit Parametern: %s" +msgstr "Portal »%s« Parameter $%d" #: tcop/postgres.c:2522 -#, fuzzy, c-format -#| msgid "unnamed portal with parameters: %s" +#, c-format msgid "unnamed portal parameter $%d = %s" -msgstr "unbenanntes Portal mit Parametern: %s" +msgstr "unbenanntes Portal Parameter $%d = %s" #: tcop/postgres.c:2525 -#, fuzzy, c-format -#| msgid "unnamed portal with parameters: %s" +#, c-format msgid "unnamed portal parameter $%d" -msgstr "unbenanntes Portal mit Parametern: %s" +msgstr "unbenanntes Portal Parameter $%d" #: tcop/postgres.c:2871 -#, fuzzy, c-format -#| msgid "terminating connection due to unexpected postmaster exit" +#, c-format msgid "terminating connection because of unexpected SIGQUIT signal" -msgstr "Verbindung wird abgebrochen wegen unerwartetem Ende des Postmasters" +msgstr "Verbindung wird abgebrochen wegen unerwartetem SIGQUIT-Signal" #: tcop/postgres.c:2877 #, c-format @@ -21627,7 +21624,7 @@ msgstr "Verbindung wird abgebrochen wegen Absturz eines anderen Serverprozesses" msgid "The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory." msgstr "Der Postmaster hat diesen Serverprozess angewiesen, die aktuelle Transaktion zurückzurollen und die Sitzung zu beenden, weil ein anderer Serverprozess abnormal beendet wurde und möglicherweise das Shared Memory verfälscht hat." -#: tcop/postgres.c:2882 tcop/postgres.c:3237 +#: tcop/postgres.c:2882 tcop/postgres.c:3243 #, c-format msgid "In a moment you should be able to reconnect to the database and repeat your command." msgstr "In einem Moment sollten Sie wieder mit der Datenbank verbinden und Ihren Befehl wiederholen können." @@ -21648,143 +21645,142 @@ msgstr "Fließkommafehler" msgid "An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero." msgstr "Eine ungültige Fließkommaoperation wurde signalisiert. Das bedeutet wahrscheinlich ein Ergebnis außerhalb des gültigen Bereichs oder eine ungültige Operation, zum Beispiel Division durch null." -#: tcop/postgres.c:3141 +#: tcop/postgres.c:3147 #, c-format msgid "canceling authentication due to timeout" msgstr "storniere Authentifizierung wegen Zeitüberschreitung" -#: tcop/postgres.c:3145 +#: tcop/postgres.c:3151 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "Autovacuum-Prozess wird abgebrochen aufgrund von Anweisung des Administrators" -#: tcop/postgres.c:3149 +#: tcop/postgres.c:3155 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "Arbeitsprozess für logische Replikation wird abgebrochen aufgrund von Anweisung des Administrators" -#: tcop/postgres.c:3166 tcop/postgres.c:3176 tcop/postgres.c:3235 +#: tcop/postgres.c:3172 tcop/postgres.c:3182 tcop/postgres.c:3241 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "Verbindung wird abgebrochen wegen Konflikt mit der Wiederherstellung" -#: tcop/postgres.c:3187 +#: tcop/postgres.c:3193 #, c-format msgid "terminating connection due to administrator command" msgstr "Verbindung wird abgebrochen aufgrund von Anweisung des Administrators" -#: tcop/postgres.c:3218 +#: tcop/postgres.c:3224 #, c-format msgid "connection to client lost" msgstr "Verbindung zum Client wurde verloren" -#: tcop/postgres.c:3284 +#: tcop/postgres.c:3294 #, c-format msgid "canceling statement due to lock timeout" msgstr "storniere Anfrage wegen Zeitüberschreitung einer Sperre" -#: tcop/postgres.c:3291 +#: tcop/postgres.c:3301 #, c-format msgid "canceling statement due to statement timeout" msgstr "storniere Anfrage wegen Zeitüberschreitung der Anfrage" -#: tcop/postgres.c:3298 +#: tcop/postgres.c:3308 #, c-format msgid "canceling autovacuum task" msgstr "storniere Autovacuum-Aufgabe" -#: tcop/postgres.c:3321 +#: tcop/postgres.c:3331 #, c-format msgid "canceling statement due to user request" msgstr "storniere Anfrage wegen Benutzeraufforderung" -#: tcop/postgres.c:3335 +#: tcop/postgres.c:3345 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "Verbindung wird abgebrochen wegen Zeitüberschreitung in inaktiver Transaktion" -#: tcop/postgres.c:3346 -#, fuzzy, c-format -#| msgid "terminating connection due to idle-in-transaction timeout" +#: tcop/postgres.c:3356 +#, c-format msgid "terminating connection due to idle-session timeout" -msgstr "Verbindung wird abgebrochen wegen Zeitüberschreitung in inaktiver Transaktion" +msgstr "Verbindung wird abgebrochen wegen Zeitüberschreitung in inaktiver Sitzung" -#: tcop/postgres.c:3465 +#: tcop/postgres.c:3475 #, c-format msgid "stack depth limit exceeded" msgstr "Grenze für Stacktiefe überschritten" -#: tcop/postgres.c:3466 +#: tcop/postgres.c:3476 #, c-format msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." msgstr "Erhöhen Sie den Konfigurationsparameter »max_stack_depth« (aktuell %dkB), nachdem Sie sichergestellt haben, dass die Stacktiefenbegrenzung Ihrer Plattform ausreichend ist." -#: tcop/postgres.c:3529 +#: tcop/postgres.c:3539 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "»max_stack_depth« darf %ldkB nicht überschreiten." -#: tcop/postgres.c:3531 +#: tcop/postgres.c:3541 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "Erhöhen Sie die Stacktiefenbegrenzung Ihrer Plattform mit »ulimit -s« oder der lokalen Entsprechung." -#: tcop/postgres.c:3887 +#: tcop/postgres.c:3897 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "ungültiges Kommandozeilenargument für Serverprozess: %s" -#: tcop/postgres.c:3888 tcop/postgres.c:3894 +#: tcop/postgres.c:3898 tcop/postgres.c:3904 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Versuchen Sie »%s --help« für weitere Informationen." -#: tcop/postgres.c:3892 +#: tcop/postgres.c:3902 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: ungültiges Kommandozeilenargument: %s" -#: tcop/postgres.c:3955 +#: tcop/postgres.c:3965 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: weder Datenbankname noch Benutzername angegeben" -#: tcop/postgres.c:4608 +#: tcop/postgres.c:4618 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "ungültiger Subtyp %d von CLOSE-Message" -#: tcop/postgres.c:4643 +#: tcop/postgres.c:4653 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "ungültiger Subtyp %d von DESCRIBE-Message" -#: tcop/postgres.c:4727 +#: tcop/postgres.c:4737 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "Fastpath-Funktionsaufrufe werden auf einer Replikationsverbindung nicht unterstützt" -#: tcop/postgres.c:4731 +#: tcop/postgres.c:4741 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "erweitertes Anfrageprotokoll wird nicht auf einer Replikationsverbindung unterstützt" -#: tcop/postgres.c:4908 +#: tcop/postgres.c:4918 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "Verbindungsende: Sitzungszeit: %d:%02d:%02d.%03d Benutzer=%s Datenbank=%s Host=%s%s%s" -#: tcop/pquery.c:629 +#: tcop/pquery.c:636 #, c-format msgid "bind message has %d result formats but query has %d columns" msgstr "Bind-Message hat %d Ergebnisspalten, aber Anfrage hat %d Spalten" -#: tcop/pquery.c:932 +#: tcop/pquery.c:939 #, c-format msgid "cursor can only scan forward" msgstr "Cursor kann nur vorwärts scannen" -#: tcop/pquery.c:933 +#: tcop/pquery.c:940 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "Deklarieren Sie ihn mit der Option SCROLL, um rückwarts scannen zu können." @@ -22356,7 +22352,7 @@ msgstr "ungültige Array-Flags" #: utils/adt/arrayfuncs.c:1333 #, c-format msgid "binary data has array element type %u (%s) instead of expected %u (%s)" -msgstr "" +msgstr "binäre Daten haben Array-Elementtyp %u (%s) statt erwartet %u (%s)" #: utils/adt/arrayfuncs.c:1377 utils/adt/multirangetypes.c:443 #: utils/adt/rangetypes.c:333 utils/cache/lsyscache.c:2905 @@ -22519,7 +22515,7 @@ msgstr "Arrayindex in Zuweisung darf nicht NULL sein" #: utils/adt/arrayutils.c:140 #, c-format msgid "array lower bound is too large: %d" -msgstr "" +msgstr "Array-Untergrenze ist zu groß: %d" #: utils/adt/arrayutils.c:240 #, c-format @@ -22642,16 +22638,14 @@ msgid "date out of range for timestamp" msgstr "Datum ist außerhalb des gültigen Bereichs für Typ »timestamp«" #: utils/adt/date.c:1127 utils/adt/date.c:1210 utils/adt/date.c:1226 -#, fuzzy, c-format -#| msgid "interval units \"%s\" not supported" +#, c-format msgid "date units \"%s\" not supported" -msgstr "»interval«-Einheit »%s« nicht unterstützt" +msgstr "»date«-Einheit »%s« nicht unterstützt" #: utils/adt/date.c:1235 -#, fuzzy, c-format -#| msgid "\"time\" units \"%s\" not recognized" +#, c-format msgid "date units \"%s\" not recognized" -msgstr "»time«-Einheit »%s« nicht erkannt" +msgstr "»date«-Einheit »%s« nicht erkannt" #: utils/adt/date.c:1318 utils/adt/date.c:1364 utils/adt/date.c:1920 #: utils/adt/date.c:1951 utils/adt/date.c:1980 utils/adt/date.c:2844 @@ -24003,7 +23997,7 @@ msgstr "fehlerhafte Bereichskonstante: »%s«" #: utils/adt/multirangetypes.c:149 #, fuzzy, c-format #| msgid "Missing left parenthesis." -msgid "Missing left bracket." +msgid "Missing left brace." msgstr "Linke Klammer fehlt." #: utils/adt/multirangetypes.c:191 @@ -24021,7 +24015,7 @@ msgstr "unerwartetes Ende der Zeile" #: utils/adt/multirangetypes.c:285 #, fuzzy, c-format #| msgid "Junk after closing right brace." -msgid "Junk after right bracket." +msgid "Junk after right brace." msgstr "Müll nach schließender rechter geschweifter Klammer." #: utils/adt/multirangetypes.c:971 @@ -24704,7 +24698,7 @@ msgstr "falsche Anzahl der Spalten: %d, erwartet wurden %d" #: utils/adt/rowtypes.c:574 #, c-format msgid "binary data has type %u (%s) instead of expected %u (%s) in record column %d" -msgstr "" +msgstr "binäre Daten haben Typ %u (%s) statt erwartet %u (%s) in Record-Spalte %d" #: utils/adt/rowtypes.c:641 #, c-format @@ -24738,7 +24732,7 @@ msgstr "Präzision von TIMESTAMP(%d)%s darf nicht negativ sein" msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "Präzision von TIMESTAMP(%d)%s auf erlaubten Höchstwert %d reduziert" -#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12392 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12411 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp ist außerhalb des gültigen Bereichs: »%s«" @@ -25159,10 +25153,9 @@ msgid "index %lld out of valid range, 0..%lld" msgstr "Index %lld ist außerhalb des gültigen Bereichs, 0..%lld" #: utils/adt/varlena.c:4656 -#, fuzzy, c-format -#| msgid "field position must be greater than zero" +#, c-format msgid "field position must not be zero" -msgstr "Feldposition muss größer als null sein" +msgstr "Feldposition darf nicht null sein" #: utils/adt/varlena.c:5697 #, c-format @@ -25741,7 +25734,7 @@ msgstr "Datenverzeichnis »%s« hat ungültige Zugriffsrechte" msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Rechte sollten u=rwx (0700) oder u=rwx,g=rx (0750) sein." -#: utils/init/miscinit.c:645 utils/misc/guc.c:7462 +#: utils/init/miscinit.c:645 utils/misc/guc.c:7481 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "kann Parameter »%s« nicht in einer sicherheitsbeschränkten Operation setzen" @@ -25842,7 +25835,7 @@ msgstr "Die Datei ist anscheinend aus Versehen übrig geblieben, konnte aber nic msgid "could not write lock file \"%s\": %m" msgstr "konnte Sperrdatei »%s« nicht schreiben: %m" -#: utils/init/miscinit.c:1357 utils/init/miscinit.c:1499 utils/misc/guc.c:10358 +#: utils/init/miscinit.c:1357 utils/init/miscinit.c:1499 utils/misc/guc.c:10377 #, c-format msgid "could not read from file \"%s\": %m" msgstr "konnte nicht aus Datei »%s« lesen: %m" @@ -26100,1949 +26093,1949 @@ msgstr "ungültige Byte-Sequenz für Kodierung »%s«: %s" msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "Zeichen mit Byte-Folge %s in Kodierung »%s« hat keine Entsprechung in Kodierung »%s«" -#: utils/misc/guc.c:701 +#: utils/misc/guc.c:718 msgid "Ungrouped" msgstr "Ungruppiert" -#: utils/misc/guc.c:703 +#: utils/misc/guc.c:720 msgid "File Locations" msgstr "Dateipfade" -#: utils/misc/guc.c:705 +#: utils/misc/guc.c:722 msgid "Connections and Authentication / Connection Settings" msgstr "Verbindungen und Authentifizierung / Verbindungseinstellungen" -#: utils/misc/guc.c:707 +#: utils/misc/guc.c:724 msgid "Connections and Authentication / Authentication" msgstr "Verbindungen und Authentifizierung / Authentifizierung" -#: utils/misc/guc.c:709 +#: utils/misc/guc.c:726 msgid "Connections and Authentication / SSL" msgstr "Verbindungen und Authentifizierung / SSL" -#: utils/misc/guc.c:711 +#: utils/misc/guc.c:728 msgid "Resource Usage / Memory" msgstr "Resourcenbenutzung / Speicher" -#: utils/misc/guc.c:713 +#: utils/misc/guc.c:730 msgid "Resource Usage / Disk" msgstr "Resourcenbenutzung / Festplatte" -#: utils/misc/guc.c:715 +#: utils/misc/guc.c:732 msgid "Resource Usage / Kernel Resources" msgstr "Resourcenbenutzung / Kernelresourcen" -#: utils/misc/guc.c:717 +#: utils/misc/guc.c:734 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Resourcenbenutzung / Kostenbasierte Vacuum-Verzögerung" -#: utils/misc/guc.c:719 +#: utils/misc/guc.c:736 msgid "Resource Usage / Background Writer" msgstr "Resourcenbenutzung / Background-Writer" -#: utils/misc/guc.c:721 +#: utils/misc/guc.c:738 msgid "Resource Usage / Asynchronous Behavior" msgstr "Resourcenbenutzung / Asynchrones Verhalten" -#: utils/misc/guc.c:723 +#: utils/misc/guc.c:740 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead-Log / Einstellungen" -#: utils/misc/guc.c:725 +#: utils/misc/guc.c:742 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead-Log / Checkpoints" -#: utils/misc/guc.c:727 +#: utils/misc/guc.c:744 msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead-Log / Archivierung" -#: utils/misc/guc.c:729 +#: utils/misc/guc.c:746 msgid "Write-Ahead Log / Archive Recovery" msgstr "Write-Ahead-Log / Archivwiederherstellung" -#: utils/misc/guc.c:731 +#: utils/misc/guc.c:748 msgid "Write-Ahead Log / Recovery Target" msgstr "Write-Ahead-Log / Wiederherstellungsziele" -#: utils/misc/guc.c:733 +#: utils/misc/guc.c:750 msgid "Replication / Sending Servers" msgstr "Replikation / sendende Server" -#: utils/misc/guc.c:735 +#: utils/misc/guc.c:752 msgid "Replication / Primary Server" msgstr "Replikation / Primärserver" -#: utils/misc/guc.c:737 +#: utils/misc/guc.c:754 msgid "Replication / Standby Servers" msgstr "Replikation / Standby-Server" -#: utils/misc/guc.c:739 +#: utils/misc/guc.c:756 msgid "Replication / Subscribers" msgstr "Replikation / Subskriptionsserver" -#: utils/misc/guc.c:741 +#: utils/misc/guc.c:758 msgid "Query Tuning / Planner Method Configuration" msgstr "Anfragetuning / Planermethoden" -#: utils/misc/guc.c:743 +#: utils/misc/guc.c:760 msgid "Query Tuning / Planner Cost Constants" msgstr "Anfragetuning / Planerkosten" -#: utils/misc/guc.c:745 +#: utils/misc/guc.c:762 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Anfragetuning / Genetischer Anfrageoptimierer" -#: utils/misc/guc.c:747 +#: utils/misc/guc.c:764 msgid "Query Tuning / Other Planner Options" msgstr "Anfragetuning / Andere Planeroptionen" -#: utils/misc/guc.c:749 +#: utils/misc/guc.c:766 msgid "Reporting and Logging / Where to Log" msgstr "Berichte und Logging / Wohin geloggt wird" -#: utils/misc/guc.c:751 +#: utils/misc/guc.c:768 msgid "Reporting and Logging / When to Log" msgstr "Berichte und Logging / Wann geloggt wird" -#: utils/misc/guc.c:753 +#: utils/misc/guc.c:770 msgid "Reporting and Logging / What to Log" msgstr "Berichte und Logging / Was geloggt wird" -#: utils/misc/guc.c:755 +#: utils/misc/guc.c:772 msgid "Reporting and Logging / Process Title" msgstr "Berichte und Logging / Prozesstitel" -#: utils/misc/guc.c:757 +#: utils/misc/guc.c:774 msgid "Statistics / Monitoring" msgstr "Statistiken / Überwachung" -#: utils/misc/guc.c:759 +#: utils/misc/guc.c:776 msgid "Statistics / Query and Index Statistics Collector" msgstr "Statistiken / Statistiksammler für Anfragen und Indexe" -#: utils/misc/guc.c:761 +#: utils/misc/guc.c:778 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc.c:763 +#: utils/misc/guc.c:780 msgid "Client Connection Defaults / Statement Behavior" msgstr "Standardeinstellungen für Clientverbindungen / Anweisungsverhalten" -#: utils/misc/guc.c:765 +#: utils/misc/guc.c:782 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Standardeinstellungen für Clientverbindungen / Locale und Formatierung" -#: utils/misc/guc.c:767 +#: utils/misc/guc.c:784 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Standardeinstellungen für Clientverbindungen / Shared Library Preloading" -#: utils/misc/guc.c:769 +#: utils/misc/guc.c:786 msgid "Client Connection Defaults / Other Defaults" msgstr "Standardeinstellungen für Clientverbindungen / Andere" -#: utils/misc/guc.c:771 +#: utils/misc/guc.c:788 msgid "Lock Management" msgstr "Sperrenverwaltung" -#: utils/misc/guc.c:773 +#: utils/misc/guc.c:790 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Versions- und Plattformkompatibilität / Frühere PostgreSQL-Versionen" -#: utils/misc/guc.c:775 +#: utils/misc/guc.c:792 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Versions- und Plattformkompatibilität / Andere Plattformen und Clients" -#: utils/misc/guc.c:777 +#: utils/misc/guc.c:794 msgid "Error Handling" msgstr "Fehlerbehandlung" -#: utils/misc/guc.c:779 +#: utils/misc/guc.c:796 msgid "Preset Options" msgstr "Voreingestellte Optionen" -#: utils/misc/guc.c:781 +#: utils/misc/guc.c:798 msgid "Customized Options" msgstr "Angepasste Optionen" -#: utils/misc/guc.c:783 +#: utils/misc/guc.c:800 msgid "Developer Options" msgstr "Entwickleroptionen" -#: utils/misc/guc.c:841 +#: utils/misc/guc.c:858 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Gültige Einheiten für diesen Parameter sind »B«, »kB«, »MB«, »GB« und »TB«." -#: utils/misc/guc.c:878 +#: utils/misc/guc.c:895 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "Gültige Einheiten für diesen Parameter sind »us«, »ms«, »s«, »min«, »h« und »d«." -#: utils/misc/guc.c:940 +#: utils/misc/guc.c:957 msgid "Enables the planner's use of sequential-scan plans." msgstr "Ermöglicht sequenzielle Scans in Planer." -#: utils/misc/guc.c:950 +#: utils/misc/guc.c:967 msgid "Enables the planner's use of index-scan plans." msgstr "Ermöglicht Index-Scans im Planer." -#: utils/misc/guc.c:960 +#: utils/misc/guc.c:977 msgid "Enables the planner's use of index-only-scan plans." msgstr "Ermöglicht Index-Only-Scans im Planer." -#: utils/misc/guc.c:970 +#: utils/misc/guc.c:987 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Ermöglicht Bitmap-Scans im Planer." -#: utils/misc/guc.c:980 +#: utils/misc/guc.c:997 msgid "Enables the planner's use of TID scan plans." msgstr "Ermöglicht TID-Scans im Planer." -#: utils/misc/guc.c:990 +#: utils/misc/guc.c:1007 msgid "Enables the planner's use of explicit sort steps." msgstr "Ermöglicht Sortierschritte im Planer." -#: utils/misc/guc.c:1000 +#: utils/misc/guc.c:1017 msgid "Enables the planner's use of incremental sort steps." msgstr "Ermöglicht inkrementelle Sortierschritte im Planer." -#: utils/misc/guc.c:1009 +#: utils/misc/guc.c:1026 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Ermöglicht Hash-Aggregierung im Planer." -#: utils/misc/guc.c:1019 +#: utils/misc/guc.c:1036 msgid "Enables the planner's use of materialization." msgstr "Ermöglicht Materialisierung im Planer." -#: utils/misc/guc.c:1029 +#: utils/misc/guc.c:1046 #, fuzzy #| msgid "Enables the planner's use of parallel hash plans." msgid "Enables the planner's use of result caching." msgstr "Ermöglicht parallele Hash-Pläne im Planer." -#: utils/misc/guc.c:1039 +#: utils/misc/guc.c:1056 msgid "Enables the planner's use of nested-loop join plans." msgstr "Ermöglicht Nested-Loop-Verbunde im Planer." -#: utils/misc/guc.c:1049 +#: utils/misc/guc.c:1066 msgid "Enables the planner's use of merge join plans." msgstr "Ermöglicht Merge-Verbunde im Planer." -#: utils/misc/guc.c:1059 +#: utils/misc/guc.c:1076 msgid "Enables the planner's use of hash join plans." msgstr "Ermöglicht Hash-Verbunde im Planer." -#: utils/misc/guc.c:1069 +#: utils/misc/guc.c:1086 msgid "Enables the planner's use of gather merge plans." msgstr "Ermöglicht Gather-Merge-Pläne im Planer." -#: utils/misc/guc.c:1079 +#: utils/misc/guc.c:1096 msgid "Enables partitionwise join." msgstr "Ermöglicht partitionsweise Verbunde." -#: utils/misc/guc.c:1089 +#: utils/misc/guc.c:1106 msgid "Enables partitionwise aggregation and grouping." msgstr "Ermöglicht partitionsweise Aggregierung und Gruppierung." -#: utils/misc/guc.c:1099 +#: utils/misc/guc.c:1116 msgid "Enables the planner's use of parallel append plans." msgstr "Ermöglicht parallele Append-Pläne im Planer." -#: utils/misc/guc.c:1109 +#: utils/misc/guc.c:1126 msgid "Enables the planner's use of parallel hash plans." msgstr "Ermöglicht parallele Hash-Pläne im Planer." -#: utils/misc/guc.c:1119 +#: utils/misc/guc.c:1136 msgid "Enables plan-time and execution-time partition pruning." msgstr "Ermöglicht Partition-Pruning zur Planzeit und zur Ausführungszeit." -#: utils/misc/guc.c:1120 +#: utils/misc/guc.c:1137 msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." msgstr "Erlaubt es dem Planer und dem Executor, Partitionsbegrenzungen mit Bedingungen in der Anfrage zu vergleichen, um festzustellen, welche Partitionen gelesen werden müssen." -#: utils/misc/guc.c:1131 +#: utils/misc/guc.c:1148 #, fuzzy #| msgid "Enables the planner's use of parallel append plans." msgid "Enables the planner's use of async append plans." msgstr "Ermöglicht parallele Append-Pläne im Planer." -#: utils/misc/guc.c:1141 +#: utils/misc/guc.c:1158 msgid "Enables genetic query optimization." msgstr "Ermöglicht genetische Anfrageoptimierung." -#: utils/misc/guc.c:1142 +#: utils/misc/guc.c:1159 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Dieser Algorithmus versucht das Planen ohne erschöpfende Suche durchzuführen." -#: utils/misc/guc.c:1153 +#: utils/misc/guc.c:1170 msgid "Shows whether the current user is a superuser." msgstr "Zeigt, ob der aktuelle Benutzer ein Superuser ist." -#: utils/misc/guc.c:1163 +#: utils/misc/guc.c:1180 msgid "Enables advertising the server via Bonjour." msgstr "Ermöglicht die Bekanntgabe des Servers mit Bonjour." -#: utils/misc/guc.c:1172 +#: utils/misc/guc.c:1189 msgid "Collects transaction commit time." msgstr "Sammelt Commit-Timestamps von Transaktionen." -#: utils/misc/guc.c:1181 +#: utils/misc/guc.c:1198 msgid "Enables SSL connections." msgstr "Ermöglicht SSL-Verbindungen." -#: utils/misc/guc.c:1190 +#: utils/misc/guc.c:1207 msgid "Also use ssl_passphrase_command during server reload." msgstr "ssl_passphrase_command auch beim Neuladen des Servers verwenden." -#: utils/misc/guc.c:1199 +#: utils/misc/guc.c:1216 msgid "Give priority to server ciphersuite order." msgstr "Der Ciphersuite-Reihenfolge des Servers Vorrang geben." -#: utils/misc/guc.c:1208 +#: utils/misc/guc.c:1225 msgid "Forces synchronization of updates to disk." msgstr "Erzwingt die Synchronisierung von Aktualisierungen auf Festplatte." -#: utils/misc/guc.c:1209 +#: utils/misc/guc.c:1226 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "Der Server verwendet den Systemaufruf fsync() an mehreren Stellen, um sicherzustellen, dass Datenänderungen physikalisch auf die Festplatte geschrieben werden. Das stellt sicher, dass der Datenbankcluster nach einem Betriebssystemabsturz oder Hardwarefehler in einem korrekten Zustand wiederhergestellt werden kann." -#: utils/misc/guc.c:1220 +#: utils/misc/guc.c:1237 msgid "Continues processing after a checksum failure." msgstr "Setzt die Verarbeitung trotz Prüfsummenfehler fort." -#: utils/misc/guc.c:1221 +#: utils/misc/guc.c:1238 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "Wenn eine fehlerhafte Prüfsumme entdeckt wird, gibt PostgreSQL normalerweise ein Fehler aus und bricht die aktuelle Transaktion ab. Wenn »ignore_checksum_failure« an ist, dann wird der Fehler ignoriert (aber trotzdem eine Warnung ausgegeben) und die Verarbeitung geht weiter. Dieses Verhalten kann Abstürze und andere ernsthafte Probleme verursachen. Es hat keine Auswirkungen, wenn Prüfsummen nicht eingeschaltet sind." -#: utils/misc/guc.c:1235 +#: utils/misc/guc.c:1252 msgid "Continues processing past damaged page headers." msgstr "Setzt die Verarbeitung trotz kaputter Seitenköpfe fort." -#: utils/misc/guc.c:1236 +#: utils/misc/guc.c:1253 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "Wenn ein kaputter Seitenkopf entdeckt wird, gibt PostgreSQL normalerweise einen Fehler aus und bricht die aktuelle Transaktion ab. Wenn »zero_damaged_pages« an ist, dann wird eine Warnung ausgegeben, die kaputte Seite mit Nullen gefüllt und die Verarbeitung geht weiter. Dieses Verhalten zerstört Daten, nämlich alle Zeilen in der kaputten Seite." -#: utils/misc/guc.c:1249 +#: utils/misc/guc.c:1266 msgid "Continues recovery after an invalid pages failure." msgstr "Setzt die Wiederherstellung trotz Fehler durch ungültige Seiten fort." -#: utils/misc/guc.c:1250 +#: utils/misc/guc.c:1267 msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." msgstr "Wenn WAL-Einträge mit Verweisen auf ungültige Seiten bei der Wiederherstellung erkannt werden, verursacht das einen PANIC-Fehler, wodurch die Wiederherstellung abgebrochen wird. Wenn »ignore_invalid_pages« an ist, dann werden ungültige Seitenverweise in WAL-Einträgen ignoriert (aber trotzen eine Warnung ausgegeben) und die Wiederherstellung wird fortgesetzt. Dieses Verhalten kann Abstürze und Datenverlust verursachen, Datenverfälschung verbreiten oder verstecken sowie andere ernsthafte Probleme verursachen. Es hat nur Auswirkungen im Wiederherstellungs- oder Standby-Modus." -#: utils/misc/guc.c:1268 +#: utils/misc/guc.c:1285 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "Schreibt volle Seiten in den WAL, sobald sie nach einem Checkpoint geändert werden." -#: utils/misc/guc.c:1269 +#: utils/misc/guc.c:1286 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "Ein Seitenschreibvorgang während eines Betriebssystemabsturzes könnte eventuell nur teilweise geschrieben worden sein. Bei der Wiederherstellung sind die im WAL gespeicherten Zeilenänderungen nicht ausreichend. Diese Option schreibt Seiten, sobald sie nach einem Checkpoint geändert worden sind, damit eine volle Wiederherstellung möglich ist." -#: utils/misc/guc.c:1282 +#: utils/misc/guc.c:1299 msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification." msgstr "Schreibt volle Seiten in den WAL, sobald sie nach einem Checkpoint geändert werden, auch für eine nicht kritische Änderung." -#: utils/misc/guc.c:1292 +#: utils/misc/guc.c:1309 msgid "Compresses full-page writes written in WAL file." msgstr "Komprimiert in WAL-Dateien geschriebene volle Seiten." -#: utils/misc/guc.c:1302 +#: utils/misc/guc.c:1319 msgid "Writes zeroes to new WAL files before first use." msgstr "Schreibt Nullen in neue WAL-Dateien vor der ersten Verwendung." -#: utils/misc/guc.c:1312 +#: utils/misc/guc.c:1329 msgid "Recycles WAL files by renaming them." msgstr "WAL-Dateien werden durch Umbenennen wiederverwendet." -#: utils/misc/guc.c:1322 +#: utils/misc/guc.c:1339 msgid "Logs each checkpoint." msgstr "Schreibt jeden Checkpoint in den Log." -#: utils/misc/guc.c:1331 +#: utils/misc/guc.c:1348 msgid "Logs each successful connection." msgstr "Schreibt jede erfolgreiche Verbindung in den Log." -#: utils/misc/guc.c:1340 +#: utils/misc/guc.c:1357 msgid "Logs end of a session, including duration." msgstr "Schreibt jedes Verbindungsende mit Sitzungszeit in den Log." -#: utils/misc/guc.c:1349 +#: utils/misc/guc.c:1366 msgid "Logs each replication command." msgstr "Schreibt jeden Replikationsbefehl in den Log." -#: utils/misc/guc.c:1358 +#: utils/misc/guc.c:1375 msgid "Shows whether the running server has assertion checks enabled." msgstr "Zeigt, ob der laufende Server Assertion-Prüfungen aktiviert hat." -#: utils/misc/guc.c:1373 +#: utils/misc/guc.c:1390 msgid "Terminate session on any error." msgstr "Sitzung bei jedem Fehler abbrechen." -#: utils/misc/guc.c:1382 +#: utils/misc/guc.c:1399 msgid "Reinitialize server after backend crash." msgstr "Server nach Absturz eines Serverprozesses reinitialisieren." -#: utils/misc/guc.c:1391 +#: utils/misc/guc.c:1408 #, fuzzy #| msgid "Reinitialize server after backend crash." msgid "Remove temporary files after backend crash." msgstr "Server nach Absturz eines Serverprozesses reinitialisieren." -#: utils/misc/guc.c:1401 +#: utils/misc/guc.c:1418 msgid "Logs the duration of each completed SQL statement." msgstr "Loggt die Dauer jeder abgeschlossenen SQL-Anweisung." -#: utils/misc/guc.c:1410 +#: utils/misc/guc.c:1427 msgid "Logs each query's parse tree." msgstr "Scheibt den Parsebaum jeder Anfrage in den Log." -#: utils/misc/guc.c:1419 +#: utils/misc/guc.c:1436 msgid "Logs each query's rewritten parse tree." msgstr "Schreibt den umgeschriebenen Parsebaum jeder Anfrage in den Log." -#: utils/misc/guc.c:1428 +#: utils/misc/guc.c:1445 msgid "Logs each query's execution plan." msgstr "Schreibt den Ausführungsplan jeder Anfrage in den Log." -#: utils/misc/guc.c:1437 +#: utils/misc/guc.c:1454 msgid "Indents parse and plan tree displays." msgstr "Rückt die Anzeige von Parse- und Planbäumen ein." -#: utils/misc/guc.c:1446 -#, fuzzy -#| msgid "unterminated quoted identifier" -msgid "Compute query identifiers." -msgstr "Bezeichner in Anführungszeichen nicht abgeschlossen" - -#: utils/misc/guc.c:1455 +#: utils/misc/guc.c:1463 msgid "Writes parser performance statistics to the server log." msgstr "Schreibt Parser-Leistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1464 +#: utils/misc/guc.c:1472 msgid "Writes planner performance statistics to the server log." msgstr "Schreibt Planer-Leistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1473 +#: utils/misc/guc.c:1481 msgid "Writes executor performance statistics to the server log." msgstr "Schreibt Executor-Leistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1482 +#: utils/misc/guc.c:1490 msgid "Writes cumulative performance statistics to the server log." msgstr "Schreibt Gesamtleistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1492 +#: utils/misc/guc.c:1500 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Loggt Statistiken über Systemressourcen (Speicher und CPU) während diverser B-Baum-Operationen." -#: utils/misc/guc.c:1504 +#: utils/misc/guc.c:1512 msgid "Collects information about executing commands." msgstr "Sammelt Informationen über ausgeführte Befehle." -#: utils/misc/guc.c:1505 +#: utils/misc/guc.c:1513 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "Schaltet die Sammlung von Informationen über den aktuell ausgeführten Befehl jeder Sitzung ein, einschließlich der Zeit, and dem die Befehlsausführung begann." -#: utils/misc/guc.c:1515 +#: utils/misc/guc.c:1523 msgid "Collects statistics on database activity." msgstr "Sammelt Statistiken über Datenbankaktivität." -#: utils/misc/guc.c:1524 +#: utils/misc/guc.c:1532 msgid "Collects timing statistics for database I/O activity." msgstr "Sammelt Zeitmessungsstatistiken über Datenbank-I/O-Aktivität." -#: utils/misc/guc.c:1533 +#: utils/misc/guc.c:1541 #, fuzzy #| msgid "Collects timing statistics for database I/O activity." msgid "Collects timing statistics for WAL I/O activity." msgstr "Sammelt Zeitmessungsstatistiken über Datenbank-I/O-Aktivität." -#: utils/misc/guc.c:1543 +#: utils/misc/guc.c:1551 msgid "Updates the process title to show the active SQL command." msgstr "Der Prozesstitel wird aktualisiert, um den aktuellen SQL-Befehl anzuzeigen." -#: utils/misc/guc.c:1544 +#: utils/misc/guc.c:1552 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "Ermöglicht das Aktualisieren des Prozesstitels bei jedem von Server empfangenen neuen SQL-Befehl." -#: utils/misc/guc.c:1557 +#: utils/misc/guc.c:1565 msgid "Starts the autovacuum subprocess." msgstr "Startet den Autovacuum-Prozess." -#: utils/misc/guc.c:1567 +#: utils/misc/guc.c:1575 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Erzeugt Debug-Ausgabe für LISTEN und NOTIFY." -#: utils/misc/guc.c:1579 +#: utils/misc/guc.c:1587 msgid "Emits information about lock usage." msgstr "Gibt Informationen über Sperrenverwendung aus." -#: utils/misc/guc.c:1589 +#: utils/misc/guc.c:1597 msgid "Emits information about user lock usage." msgstr "Gibt Informationen über Benutzersperrenverwendung aus." -#: utils/misc/guc.c:1599 +#: utils/misc/guc.c:1607 msgid "Emits information about lightweight lock usage." msgstr "Gibt Informationen über die Verwendung von Lightweight Locks aus." -#: utils/misc/guc.c:1609 +#: utils/misc/guc.c:1617 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Gibt Informationen über alle aktuellen Sperren aus, wenn eine Verklemmung auftritt." -#: utils/misc/guc.c:1621 +#: utils/misc/guc.c:1629 msgid "Logs long lock waits." msgstr "Schreibt Meldungen über langes Warten auf Sperren in den Log." -#: utils/misc/guc.c:1630 +#: utils/misc/guc.c:1638 #, fuzzy #| msgid "abort reason: recovery conflict" msgid "Logs standby recovery conflict waits." msgstr "Abbruchgrund: Konflikt bei Wiederherstellung" -#: utils/misc/guc.c:1639 +#: utils/misc/guc.c:1647 msgid "Logs the host name in the connection logs." msgstr "Schreibt den Hostnamen jeder Verbindung in den Log." -#: utils/misc/guc.c:1640 +#: utils/misc/guc.c:1648 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "In der Standardeinstellung zeigen die Verbindungslogs nur die IP-Adresse der Clienthosts. Wenn Sie den Hostnamen auch anzeigen wollen, dann können Sie diese Option anschalten, aber je nachdem, wie Ihr DNS eingerichtet ist, kann das die Leistung nicht unerheblich beeinträchtigen." -#: utils/misc/guc.c:1651 +#: utils/misc/guc.c:1659 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Behandelt »ausdruck=NULL« als »ausdruck IS NULL«." -#: utils/misc/guc.c:1652 +#: utils/misc/guc.c:1660 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "Wenn an, dann werden Ausdrücke der Form ausdruck = NULL (oder NULL = ausdruck) wie ausdruck IS NULL behandelt, das heißt, sie ergeben wahr, wenn das Ergebnis von ausdruck der NULL-Wert ist, und ansonsten falsch. Das korrekte Verhalten von ausdruck = NULL ist immer den NULL-Wert (für unbekannt) zurückzugeben." -#: utils/misc/guc.c:1664 +#: utils/misc/guc.c:1672 msgid "Enables per-database user names." msgstr "Ermöglicht Datenbank-lokale Benutzernamen." -#: utils/misc/guc.c:1673 +#: utils/misc/guc.c:1681 msgid "Sets the default read-only status of new transactions." msgstr "Setzt den Standardwert für die Read-Only-Einstellung einer neuen Transaktion." -#: utils/misc/guc.c:1683 +#: utils/misc/guc.c:1691 msgid "Sets the current transaction's read-only status." msgstr "Setzt die Read-Only-Einstellung der aktuellen Transaktion." -#: utils/misc/guc.c:1693 +#: utils/misc/guc.c:1701 msgid "Sets the default deferrable status of new transactions." msgstr "Setzt den Standardwert für die Deferrable-Einstellung einer neuen Transaktion." -#: utils/misc/guc.c:1702 +#: utils/misc/guc.c:1710 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "Ob eine serialisierbare Read-Only-Transaktion aufgeschoben werden soll, bis sie ohne mögliche Serialisierungsfehler ausgeführt werden kann." -#: utils/misc/guc.c:1712 +#: utils/misc/guc.c:1720 msgid "Enable row security." msgstr "Schaltet Sicherheit auf Zeilenebene ein." -#: utils/misc/guc.c:1713 +#: utils/misc/guc.c:1721 msgid "When enabled, row security will be applied to all users." msgstr "Wenn eingeschaltet, wird Sicherheit auf Zeilenebene auf alle Benutzer angewendet." -#: utils/misc/guc.c:1721 +#: utils/misc/guc.c:1729 msgid "Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE." msgstr "Prüft Funktionskörper bei der Ausführung von CREATE FUNCTION und CREATE PROCEDURE." -#: utils/misc/guc.c:1730 +#: utils/misc/guc.c:1738 msgid "Enable input of NULL elements in arrays." msgstr "Ermöglicht die Eingabe von NULL-Elementen in Arrays." -#: utils/misc/guc.c:1731 +#: utils/misc/guc.c:1739 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "Wenn dies eingeschaltet ist, wird ein nicht gequotetes NULL in einem Array-Eingabewert als NULL-Wert interpretiert, ansonsten als Zeichenkette." -#: utils/misc/guc.c:1747 +#: utils/misc/guc.c:1755 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS wird nicht mehr unterstützt; kann nur auf falsch gesetzt werden." -#: utils/misc/guc.c:1757 +#: utils/misc/guc.c:1765 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "Startet einen Subprozess, um die Stderr-Ausgabe und/oder CSV-Logs in Logdateien auszugeben." -#: utils/misc/guc.c:1766 +#: utils/misc/guc.c:1774 msgid "Truncate existing log files of same name during log rotation." msgstr "Kürzt existierende Logdateien mit dem selben Namen beim Rotieren." -#: utils/misc/guc.c:1777 +#: utils/misc/guc.c:1785 msgid "Emit information about resource usage in sorting." msgstr "Gibt Informationen über die Ressourcenverwendung beim Sortieren aus." -#: utils/misc/guc.c:1791 +#: utils/misc/guc.c:1799 msgid "Generate debugging output for synchronized scanning." msgstr "Erzeugt Debug-Ausgabe für synchronisiertes Scannen." -#: utils/misc/guc.c:1806 +#: utils/misc/guc.c:1814 msgid "Enable bounded sorting using heap sort." msgstr "Ermöglicht Bounded Sorting mittels Heap-Sort." -#: utils/misc/guc.c:1819 +#: utils/misc/guc.c:1827 msgid "Emit WAL-related debugging output." msgstr "Gibt diverse Debug-Meldungen über WAL aus." -#: utils/misc/guc.c:1831 +#: utils/misc/guc.c:1839 #, fuzzy #| msgid "Datetimes are integer based." msgid "Shows whether datetimes are integer based." msgstr "Datum/Zeit verwendet intern ganze Zahlen." -#: utils/misc/guc.c:1842 +#: utils/misc/guc.c:1850 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "Bestimmt, ob Groß-/Kleinschreibung bei Kerberos- und GSSAPI-Benutzernamen ignoriert werden soll." -#: utils/misc/guc.c:1852 +#: utils/misc/guc.c:1860 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Warnt bei Backslash-Escapes in normalen Zeichenkettenkonstanten." -#: utils/misc/guc.c:1862 +#: utils/misc/guc.c:1870 msgid "Causes '...' strings to treat backslashes literally." msgstr "Bewirkt, dass Zeichenketten der Art '...' Backslashes als normales Zeichen behandeln." -#: utils/misc/guc.c:1873 +#: utils/misc/guc.c:1881 msgid "Enable synchronized sequential scans." msgstr "Ermöglicht synchronisierte sequenzielle Scans." -#: utils/misc/guc.c:1883 +#: utils/misc/guc.c:1891 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Setzt ob die Transaktion mit dem Wiederherstellungsziel einbezogen oder ausgeschlossen wird." -#: utils/misc/guc.c:1893 +#: utils/misc/guc.c:1901 msgid "Allows connections and queries during recovery." msgstr "Erlaubt Verbindungen und Anfragen während der Wiederherstellung." -#: utils/misc/guc.c:1903 +#: utils/misc/guc.c:1911 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Erlaubt Rückmeldungen von einem Hot Standby an den Primärserver, um Anfragekonflikte zu vermeiden." -#: utils/misc/guc.c:1913 +#: utils/misc/guc.c:1921 msgid "Shows whether hot standby is currently active." msgstr "Zeigt, ob Hot Standby aktuell aktiv ist." -#: utils/misc/guc.c:1924 +#: utils/misc/guc.c:1932 msgid "Allows modifications of the structure of system tables." msgstr "Erlaubt Änderungen an der Struktur von Systemtabellen." -#: utils/misc/guc.c:1935 +#: utils/misc/guc.c:1943 msgid "Disables reading from system indexes." msgstr "Schaltet das Lesen aus Systemindexen ab." -#: utils/misc/guc.c:1936 +#: utils/misc/guc.c:1944 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "Das Aktualisieren der Indexe wird nicht verhindert, also ist die Verwendung unbedenklich. Schlimmstenfalls wird alles langsamer." -#: utils/misc/guc.c:1947 +#: utils/misc/guc.c:1955 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Schaltet den rückwärtskompatiblen Modus für Privilegienprüfungen bei Large Objects ein." -#: utils/misc/guc.c:1948 +#: utils/misc/guc.c:1956 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "Überspringt Privilegienprüfungen beim Lesen oder Ändern von Large Objects, zur Kompatibilität mit PostgreSQL-Versionen vor 9.0." -#: utils/misc/guc.c:1958 +#: utils/misc/guc.c:1966 msgid "When generating SQL fragments, quote all identifiers." msgstr "Wenn SQL-Fragmente erzeugt werden, alle Bezeichner quoten." -#: utils/misc/guc.c:1968 +#: utils/misc/guc.c:1976 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Zeigt, ob Datenprüfsummen in diesem Cluster angeschaltet sind." -#: utils/misc/guc.c:1979 +#: utils/misc/guc.c:1987 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Syslog-Nachrichten mit Sequenznummern versehen, um Unterdrückung doppelter Nachrichten zu unterbinden." -#: utils/misc/guc.c:1989 +#: utils/misc/guc.c:1997 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "An Syslog gesendete Nachrichten nach Zeilen und in maximal 1024 Bytes aufteilen." -#: utils/misc/guc.c:1999 +#: utils/misc/guc.c:2007 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Kontrolliert, ob Gather und Gather Merge auch Subpläne ausführen." -#: utils/misc/guc.c:2000 +#: utils/misc/guc.c:2008 msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "Sollen Gather-Knoten auch Subpläne ausführen oder nur Tupel sammeln?" -#: utils/misc/guc.c:2010 +#: utils/misc/guc.c:2018 msgid "Allow JIT compilation." msgstr "Erlaubt JIT-Kompilierung." -#: utils/misc/guc.c:2021 +#: utils/misc/guc.c:2029 msgid "Register JIT-compiled functions with debugger." msgstr "JIT-kompilierte Funktionen im Debugger registrieren." -#: utils/misc/guc.c:2038 +#: utils/misc/guc.c:2046 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "LLVM-Bitcode in Dateien schreiben, um Debuggen von JIT zu erleichtern." -#: utils/misc/guc.c:2049 +#: utils/misc/guc.c:2057 msgid "Allow JIT compilation of expressions." msgstr "Erlaubt JIT-Kompilierung von Ausdrücken." -#: utils/misc/guc.c:2060 +#: utils/misc/guc.c:2068 msgid "Register JIT-compiled functions with perf profiler." msgstr "JIT-kompilierte Funktionen im Profiler perf registrieren." -#: utils/misc/guc.c:2077 +#: utils/misc/guc.c:2085 msgid "Allow JIT compilation of tuple deforming." msgstr "Erlaubt JIT-Kompilierung von Tuple-Deforming." -#: utils/misc/guc.c:2088 +#: utils/misc/guc.c:2096 msgid "Whether to continue running after a failure to sync data files." msgstr "Ob nach fehlgeschlagenem Synchronisieren von Datendateien fortgesetzt werden soll." -#: utils/misc/guc.c:2097 +#: utils/misc/guc.c:2105 msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." msgstr "Bestimmt, ob der WAL-Receiver einen temporären Replikations-Slot erzeugen soll, wenn kein permanenter Slot konfiguriert ist." -#: utils/misc/guc.c:2115 +#: utils/misc/guc.c:2123 msgid "Forces a switch to the next WAL file if a new file has not been started within N seconds." msgstr "Erzwingt das Umschalten zur nächsten WAL-Datei, wenn seit N Sekunden keine neue Datei begonnen worden ist." -#: utils/misc/guc.c:2126 +#: utils/misc/guc.c:2134 msgid "Waits N seconds on connection startup after authentication." msgstr "Wartet beim Starten einer Verbindung N Sekunden nach der Authentifizierung." -#: utils/misc/guc.c:2127 utils/misc/guc.c:2725 +#: utils/misc/guc.c:2135 utils/misc/guc.c:2733 msgid "This allows attaching a debugger to the process." msgstr "Das ermöglicht es, einen Debugger in den Prozess einzuhängen." -#: utils/misc/guc.c:2136 +#: utils/misc/guc.c:2144 msgid "Sets the default statistics target." msgstr "Setzt das voreingestellte Statistikziel." -#: utils/misc/guc.c:2137 +#: utils/misc/guc.c:2145 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "Diese Einstellung gilt für Tabellenspalten, für die kein spaltenspezifisches Ziel mit ALTER TABLE SET STATISTICS gesetzt worden ist." -#: utils/misc/guc.c:2146 +#: utils/misc/guc.c:2154 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Setzt die Größe der FROM-Liste, ab der Unteranfragen nicht kollabiert werden." -#: utils/misc/guc.c:2148 +#: utils/misc/guc.c:2156 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "Der Planer bindet Unteranfragen in die übergeordneten Anfragen ein, wenn die daraus resultierende FROM-Liste nicht mehr als so viele Elemente haben würde." -#: utils/misc/guc.c:2159 +#: utils/misc/guc.c:2167 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Setzt die Größe der FROM-Liste, ab der JOIN-Konstrukte nicht aufgelöst werden." -#: utils/misc/guc.c:2161 +#: utils/misc/guc.c:2169 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "Der Planer löst ausdrückliche JOIN-Konstrukte in FROM-Listen auf, wenn die daraus resultierende FROM-Liste nicht mehr als so viele Elemente haben würde." -#: utils/misc/guc.c:2172 +#: utils/misc/guc.c:2180 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Setzt die Anzahl der Elemente in der FROM-Liste, ab der GEQO verwendet wird." -#: utils/misc/guc.c:2182 +#: utils/misc/guc.c:2190 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: wird für die Berechnung der Vorgabewerte anderer GEQO-Parameter verwendet." -#: utils/misc/guc.c:2192 +#: utils/misc/guc.c:2200 msgid "GEQO: number of individuals in the population." msgstr "GEQO: Anzahl der Individien in der Bevölkerung." -#: utils/misc/guc.c:2193 utils/misc/guc.c:2203 +#: utils/misc/guc.c:2201 utils/misc/guc.c:2211 msgid "Zero selects a suitable default value." msgstr "Null wählt einen passenden Vorgabewert." -#: utils/misc/guc.c:2202 +#: utils/misc/guc.c:2210 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: Anzahl der Iterationen im Algorithmus." -#: utils/misc/guc.c:2214 +#: utils/misc/guc.c:2222 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Setzt die Zeit, die gewartet wird, bis auf Verklemmung geprüft wird." -#: utils/misc/guc.c:2225 +#: utils/misc/guc.c:2233 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Setzt die maximale Verzögerung bevor Anfragen storniert werden, wenn ein Hot-Standby-Server archivierte WAL-Daten verarbeitet." -#: utils/misc/guc.c:2236 +#: utils/misc/guc.c:2244 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "Setzt die maximale Verzögerung bevor Anfragen storniert werden, wenn ein Hot-Standby-Server gestreamte WAL-Daten verarbeitet." -#: utils/misc/guc.c:2247 +#: utils/misc/guc.c:2255 msgid "Sets the minimum delay for applying changes during recovery." msgstr "Setzt die minimale Verzögerung für das Einspielen von Änderungen während der Wiederherstellung." -#: utils/misc/guc.c:2258 +#: utils/misc/guc.c:2266 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "Setzt das maximale Intervall zwischen Statusberichten des WAL-Receivers an den sendenden Server." -#: utils/misc/guc.c:2269 +#: utils/misc/guc.c:2277 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "Setzt die maximale Zeit, um auf den Empfang von Daten vom sendenden Server zu warten." -#: utils/misc/guc.c:2280 +#: utils/misc/guc.c:2288 msgid "Sets the maximum number of concurrent connections." msgstr "Setzt die maximale Anzahl gleichzeitiger Verbindungen." -#: utils/misc/guc.c:2291 +#: utils/misc/guc.c:2299 msgid "Sets the number of connection slots reserved for superusers." msgstr "Setzt die Anzahl der für Superuser reservierten Verbindungen." -#: utils/misc/guc.c:2301 +#: utils/misc/guc.c:2309 #, fuzzy #| msgid "could not map dynamic shared memory segment" msgid "Amount of dynamic shared memory reserved at startup." msgstr "konnte dynamisches Shared-Memory-Segment nicht mappen" -#: utils/misc/guc.c:2316 +#: utils/misc/guc.c:2324 msgid "Sets the number of shared memory buffers used by the server." msgstr "Setzt die Anzahl der vom Server verwendeten Shared-Memory-Puffer." -#: utils/misc/guc.c:2327 +#: utils/misc/guc.c:2335 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Setzt die maximale Anzahl der von jeder Sitzung verwendeten temporären Puffer." -#: utils/misc/guc.c:2338 +#: utils/misc/guc.c:2346 msgid "Sets the TCP port the server listens on." msgstr "Setzt den TCP-Port, auf dem der Server auf Verbindungen wartet." -#: utils/misc/guc.c:2348 +#: utils/misc/guc.c:2356 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Setzt die Zugriffsrechte für die Unix-Domain-Socket." -#: utils/misc/guc.c:2349 +#: utils/misc/guc.c:2357 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Unix-Domain-Sockets verwenden die üblichen Zugriffsrechte für Unix-Dateisysteme. Der Wert dieser Option muss ein numerischer Wert in der von den Systemaufrufen chmod und umask verwendeten Form sein. (Um das gebräuchliche Oktalformat zu verwenden, muss die Zahl mit 0 (einer Null) anfangen.)" -#: utils/misc/guc.c:2363 +#: utils/misc/guc.c:2371 msgid "Sets the file permissions for log files." msgstr "Setzt die Dateizugriffsrechte für Logdateien." -#: utils/misc/guc.c:2364 +#: utils/misc/guc.c:2372 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Der Wert dieser Option muss ein numerischer Wert in der von den Systemaufrufen chmod und umask verwendeten Form sein. (Um das gebräuchliche Oktalformat zu verwenden, muss die Zahl mit 0 (einer Null) anfangen.)" -#: utils/misc/guc.c:2378 +#: utils/misc/guc.c:2386 #, fuzzy #| msgid "Mode of the data directory." msgid "Shows the mode of the data directory." msgstr "Zugriffsrechte des Datenverzeichnisses." -#: utils/misc/guc.c:2379 +#: utils/misc/guc.c:2387 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Der Wert dieser Option muss ein numerischer Wert in der von den Systemaufrufen chmod und umask verwendeten Form sein. (Um das gebräuchliche Oktalformat zu verwenden, muss die Zahl mit 0 (einer Null) anfangen.)" -#: utils/misc/guc.c:2392 +#: utils/misc/guc.c:2400 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Setzt die maximale Speichergröße für Anfrage-Arbeitsbereiche." -#: utils/misc/guc.c:2393 +#: utils/misc/guc.c:2401 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "Gibt die Speichermenge an, die für interne Sortiervorgänge und Hashtabellen verwendet werden kann, bevor auf temporäre Dateien umgeschaltet wird." -#: utils/misc/guc.c:2405 +#: utils/misc/guc.c:2413 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Setzt die maximale Speichergröße für Wartungsoperationen." -#: utils/misc/guc.c:2406 +#: utils/misc/guc.c:2414 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Das schließt Operationen wie VACUUM und CREATE INDEX ein." -#: utils/misc/guc.c:2416 +#: utils/misc/guc.c:2424 msgid "Sets the maximum memory to be used for logical decoding." msgstr "Setzt die maximale Speichergröße für logische Dekodierung." -#: utils/misc/guc.c:2417 +#: utils/misc/guc.c:2425 msgid "This much memory can be used by each internal reorder buffer before spilling to disk." msgstr "Gibt die Speichermenge an, die für jeden internen Reorder-Puffer verwendet werden kann, bevor auf Festplatte ausgelagert wird." -#: utils/misc/guc.c:2433 +#: utils/misc/guc.c:2441 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Setzt die maximale Stackgröße, in Kilobytes." -#: utils/misc/guc.c:2444 +#: utils/misc/guc.c:2452 msgid "Limits the total size of all temporary files used by each process." msgstr "Beschränkt die Gesamtgröße aller temporären Dateien, die von einem Prozess verwendet werden." -#: utils/misc/guc.c:2445 +#: utils/misc/guc.c:2453 msgid "-1 means no limit." msgstr "-1 bedeutet keine Grenze." -#: utils/misc/guc.c:2455 +#: utils/misc/guc.c:2463 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Vacuum-Kosten für eine im Puffer-Cache gefundene Seite." -#: utils/misc/guc.c:2465 +#: utils/misc/guc.c:2473 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Vacuum-Kosten für eine nicht im Puffer-Cache gefundene Seite." -#: utils/misc/guc.c:2475 +#: utils/misc/guc.c:2483 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Vacuum-Kosten für eine durch Vacuum schmutzig gemachte Seite." -#: utils/misc/guc.c:2485 +#: utils/misc/guc.c:2493 msgid "Vacuum cost amount available before napping." msgstr "Verfügbare Vacuum-Kosten vor Nickerchen." -#: utils/misc/guc.c:2495 +#: utils/misc/guc.c:2503 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Verfügbare Vacuum-Kosten vor Nickerchen, für Autovacuum." -#: utils/misc/guc.c:2505 +#: utils/misc/guc.c:2513 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "Setzt die maximale Zahl gleichzeitig geöffneter Dateien für jeden Serverprozess." -#: utils/misc/guc.c:2518 +#: utils/misc/guc.c:2526 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Setzt die maximale Anzahl von gleichzeitig vorbereiteten Transaktionen." -#: utils/misc/guc.c:2529 +#: utils/misc/guc.c:2537 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Setzt die minimale Tabellen-OID für das Verfolgen von Sperren." -#: utils/misc/guc.c:2530 +#: utils/misc/guc.c:2538 msgid "Is used to avoid output on system tables." msgstr "Wird verwendet, um Ausgabe für Systemtabellen zu vermeiden." -#: utils/misc/guc.c:2539 +#: utils/misc/guc.c:2547 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Setzt die OID der Tabelle mit bedingungsloser Sperrenverfolgung." -#: utils/misc/guc.c:2551 +#: utils/misc/guc.c:2559 msgid "Sets the maximum allowed duration of any statement." msgstr "Setzt die maximal erlaubte Dauer jeder Anweisung." -#: utils/misc/guc.c:2552 utils/misc/guc.c:2563 utils/misc/guc.c:2574 -#: utils/misc/guc.c:2585 +#: utils/misc/guc.c:2560 utils/misc/guc.c:2571 utils/misc/guc.c:2582 +#: utils/misc/guc.c:2593 msgid "A value of 0 turns off the timeout." msgstr "Der Wert 0 schaltet die Zeitprüfung aus." -#: utils/misc/guc.c:2562 +#: utils/misc/guc.c:2570 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Setzt die maximal erlaubte Dauer, um auf eine Sperre zu warten." -#: utils/misc/guc.c:2573 +#: utils/misc/guc.c:2581 #, fuzzy #| msgid "Sets the maximum allowed duration of any idling transaction." msgid "Sets the maximum allowed idle time between queries, when in a transaction." msgstr "Setzt die maximal erlaubte Dauer einer inaktiven Transaktion." -#: utils/misc/guc.c:2584 +#: utils/misc/guc.c:2592 #, fuzzy #| msgid "Sets the maximum allowed duration of any idling transaction." msgid "Sets the maximum allowed idle time between queries, when not in a transaction." msgstr "Setzt die maximal erlaubte Dauer einer inaktiven Transaktion." -#: utils/misc/guc.c:2595 +#: utils/misc/guc.c:2603 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Mindestalter, bei dem VACUUM eine Tabellenzeile einfrieren soll." -#: utils/misc/guc.c:2605 +#: utils/misc/guc.c:2613 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." -#: utils/misc/guc.c:2615 +#: utils/misc/guc.c:2623 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Mindestalter, bei dem VACUUM eine MultiXactId in einer Tabellenzeile einfrieren soll." -#: utils/misc/guc.c:2625 +#: utils/misc/guc.c:2633 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Multixact-Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." -#: utils/misc/guc.c:2635 +#: utils/misc/guc.c:2643 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Anzahl Transaktionen, um die VACUUM- und HOT-Aufräumen aufgeschoben werden soll." -#: utils/misc/guc.c:2644 +#: utils/misc/guc.c:2652 #, fuzzy #| msgid "Age at which VACUUM should scan whole table to freeze tuples." msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." -#: utils/misc/guc.c:2653 +#: utils/misc/guc.c:2661 #, fuzzy #| msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "Multixact-Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." -#: utils/misc/guc.c:2666 +#: utils/misc/guc.c:2674 msgid "Sets the maximum number of locks per transaction." msgstr "Setzt die maximale Anzahl Sperren pro Transaktion." -#: utils/misc/guc.c:2667 +#: utils/misc/guc.c:2675 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "Die globale Sperrentabelle wird mit der Annahme angelegt, das höchstens max_locks_per_transaction * max_connections verschiedene Objekte gleichzeitig gesperrt werden müssen." -#: utils/misc/guc.c:2678 +#: utils/misc/guc.c:2686 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Setzt die maximale Anzahl Prädikatsperren pro Transaktion." -#: utils/misc/guc.c:2679 +#: utils/misc/guc.c:2687 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "Die globale Prädikatsperrentabelle wird mit der Annahme angelegt, das höchstens max_pred_locks_per_transaction * max_connections verschiedene Objekte gleichzeitig gesperrt werden müssen." -#: utils/misc/guc.c:2690 +#: utils/misc/guc.c:2698 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "Setzt die maximale Anzahl Prädikatsperren für Seiten und Tupel pro Relation." -#: utils/misc/guc.c:2691 +#: utils/misc/guc.c:2699 msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." msgstr "Wenn mehr als diese Gesamtzahl Seiten und Tupel in der selben Relation von einer Verbindung gesperrt sind, werden diese Sperren durch eine Sperre auf Relationsebene ersetzt." -#: utils/misc/guc.c:2701 +#: utils/misc/guc.c:2709 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Setzt die maximale Anzahl Prädikatsperren für Tupel pro Seite." -#: utils/misc/guc.c:2702 +#: utils/misc/guc.c:2710 msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." msgstr "Wenn mehr als diese Anzahl Tupel auf der selben Seite von einer Verbindung gesperrt sind, werden diese Sperren durch eine Sperre auf Seitenebene ersetzt." -#: utils/misc/guc.c:2712 +#: utils/misc/guc.c:2720 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Setzt die maximale Zeit, um die Client-Authentifizierung zu beenden." -#: utils/misc/guc.c:2724 +#: utils/misc/guc.c:2732 msgid "Waits N seconds on connection startup before authentication." msgstr "Wartet beim Starten einer Verbindung N Sekunden vor der Authentifizierung." -#: utils/misc/guc.c:2735 +#: utils/misc/guc.c:2743 msgid "Sets the size of WAL files held for standby servers." msgstr "Setzt die Größe der für Standby-Server vorgehaltenen WAL-Dateien." -#: utils/misc/guc.c:2746 +#: utils/misc/guc.c:2754 msgid "Sets the minimum size to shrink the WAL to." msgstr "Setzt die minimale Größe, auf die der WAL geschrumpft wird." -#: utils/misc/guc.c:2758 +#: utils/misc/guc.c:2766 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Setzt die WAL-Größe, die einen Checkpoint auslöst." -#: utils/misc/guc.c:2770 +#: utils/misc/guc.c:2778 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Setzt die maximale Zeit zwischen automatischen WAL-Checkpoints." -#: utils/misc/guc.c:2781 +#: utils/misc/guc.c:2789 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "Schreibt eine Logmeldung, wenn Checkpoint-Segmente häufiger als dieser Wert gefüllt werden." -#: utils/misc/guc.c:2783 +#: utils/misc/guc.c:2791 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "Schreibe Meldung in den Serverlog, wenn Checkpoints, die durch Füllen der Checkpoint-Segmente ausgelöst werden, häufiger als dieser Wert in Sekunden passieren. Null schaltet die Warnung ab." -#: utils/misc/guc.c:2795 utils/misc/guc.c:3011 utils/misc/guc.c:3058 +#: utils/misc/guc.c:2803 utils/misc/guc.c:3019 utils/misc/guc.c:3066 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "Anzahl der Seiten, nach denen getätigte Schreibvorgänge auf die Festplatte zurückgeschrieben werden." -#: utils/misc/guc.c:2806 +#: utils/misc/guc.c:2814 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Setzt die Anzahl Diskseitenpuffer für WAL im Shared Memory." -#: utils/misc/guc.c:2817 +#: utils/misc/guc.c:2825 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Zeit zwischen WAL-Flush-Operationen im WAL-Writer." -#: utils/misc/guc.c:2828 +#: utils/misc/guc.c:2836 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Ein Flush wird ausgelöst, wenn diese Menge WAL vom WAL-Writer geschrieben worden ist." -#: utils/misc/guc.c:2839 +#: utils/misc/guc.c:2847 #, fuzzy #| msgid "Size of new file to fsync instead of writing WAL." msgid "Minimum size of new file to fsync instead of writing WAL." msgstr "Größe ab der neue Datei gefsynct wird statt WAL zu schreiben." -#: utils/misc/guc.c:2850 +#: utils/misc/guc.c:2858 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "Setzt die maximale Anzahl gleichzeitig laufender WAL-Sender-Prozesse." -#: utils/misc/guc.c:2861 +#: utils/misc/guc.c:2869 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Setzt die maximale Anzahl von gleichzeitig definierten Replikations-Slots." -#: utils/misc/guc.c:2871 +#: utils/misc/guc.c:2879 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "Setzt die maximale WAL-Größe, die von Replikations-Slots reserviert werden kann." -#: utils/misc/guc.c:2872 +#: utils/misc/guc.c:2880 msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." msgstr "Replikations-Slots werden als fehlgeschlagen markiert, und Segmente zum Löschen oder Wiederverwenden freigegeben, wenn so viel Platz von WAL auf der Festplatte belegt wird." -#: utils/misc/guc.c:2884 +#: utils/misc/guc.c:2892 msgid "Sets the maximum time to wait for WAL replication." msgstr "Setzt die maximale Zeit, um auf WAL-Replikation zu warten." -#: utils/misc/guc.c:2895 +#: utils/misc/guc.c:2903 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Setzt die Verzögerung in Millisekunden zwischen Transaktionsabschluss und dem Schreiben von WAL auf die Festplatte." -#: utils/misc/guc.c:2907 +#: utils/misc/guc.c:2915 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "Setzt die minimale Anzahl gleichzeitig offener Transaktionen bevor »commit_delay« angewendet wird." -#: utils/misc/guc.c:2918 +#: utils/misc/guc.c:2926 msgid "Sets the number of digits displayed for floating-point values." msgstr "Setzt die Anzahl ausgegebener Ziffern für Fließkommawerte." -#: utils/misc/guc.c:2919 +#: utils/misc/guc.c:2927 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." msgstr "Diese Einstellung betrifft real, double precision und geometrische Datentypen. Null oder ein negativer Parameterwert wird zur Standardziffernanzahl (FLT_DIG bzw. DBL_DIG) hinzuaddiert. Ein Wert größer als Null wählt präzisen Ausgabemodus." -#: utils/misc/guc.c:2931 +#: utils/misc/guc.c:2939 msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." msgstr "Setzt die minimale Ausführungszeit, über der Stichproben aller Anweisungen geloggt werden. Die Stichproben werden durch log_statement_sample_rate bestimmt." -#: utils/misc/guc.c:2934 +#: utils/misc/guc.c:2942 msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "Null loggt eine Stichprobe aller Anfragen. -1 schaltet dieses Feature aus." -#: utils/misc/guc.c:2944 +#: utils/misc/guc.c:2952 msgid "Sets the minimum execution time above which all statements will be logged." msgstr "Setzt die minimale Ausführungszeit, über der alle Anweisungen geloggt werden." -#: utils/misc/guc.c:2946 +#: utils/misc/guc.c:2954 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Null zeigt alle Anfragen. -1 schaltet dieses Feature aus." -#: utils/misc/guc.c:2956 +#: utils/misc/guc.c:2964 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "Setzt die minimale Ausführungszeit, über der Autovacuum-Aktionen geloggt werden." -#: utils/misc/guc.c:2958 +#: utils/misc/guc.c:2966 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Null gibt alls Aktionen aus. -1 schaltet die Log-Aufzeichnung über Autovacuum aus." -#: utils/misc/guc.c:2968 +#: utils/misc/guc.c:2976 msgid "When logging statements, limit logged parameter values to first N bytes." msgstr "Wenn Anweisungen geloggt werden, die geloggten Parameterwerte auf die ersten N Bytes begrenzen." -#: utils/misc/guc.c:2969 utils/misc/guc.c:2980 +#: utils/misc/guc.c:2977 utils/misc/guc.c:2988 msgid "-1 to print values in full." msgstr "-1 um die Werte vollständig auszugeben." -#: utils/misc/guc.c:2979 +#: utils/misc/guc.c:2987 msgid "When reporting an error, limit logged parameter values to first N bytes." msgstr "Wenn ein Fehler ausgegeben wird, die geloggten Parameterwerte auf die ersten N Bytes begrenzen." -#: utils/misc/guc.c:2990 +#: utils/misc/guc.c:2998 msgid "Background writer sleep time between rounds." msgstr "Schlafzeit zwischen Durchläufen des Background-Writers." -#: utils/misc/guc.c:3001 +#: utils/misc/guc.c:3009 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Maximale Anzahl der vom Background-Writer pro Durchlauf zu flushenden LRU-Seiten." -#: utils/misc/guc.c:3024 +#: utils/misc/guc.c:3032 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Anzahl simultaner Anfragen, die das Festplattensubsystem effizient bearbeiten kann." -#: utils/misc/guc.c:3042 +#: utils/misc/guc.c:3050 msgid "A variant of effective_io_concurrency that is used for maintenance work." msgstr "Eine Variante von effective_io_concurrency, die für Wartungsarbeiten verwendet wird." -#: utils/misc/guc.c:3071 +#: utils/misc/guc.c:3079 msgid "Maximum number of concurrent worker processes." msgstr "Maximale Anzahl gleichzeitiger Worker-Prozesse." -#: utils/misc/guc.c:3083 +#: utils/misc/guc.c:3091 msgid "Maximum number of logical replication worker processes." msgstr "Maximale Anzahl Arbeitsprozesse für logische Replikation." -#: utils/misc/guc.c:3095 +#: utils/misc/guc.c:3103 msgid "Maximum number of table synchronization workers per subscription." msgstr "Maximale Anzahl Arbeitsprozesse für Tabellensynchronisation pro Subskription." -#: utils/misc/guc.c:3105 +#: utils/misc/guc.c:3113 msgid "Automatic log file rotation will occur after N minutes." msgstr "Automatische Rotation der Logdateien geschieht nach N Minuten." -#: utils/misc/guc.c:3116 +#: utils/misc/guc.c:3124 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "Automatische Rotation der Logdateien geschieht nach N Kilobytes." -#: utils/misc/guc.c:3127 +#: utils/misc/guc.c:3135 msgid "Shows the maximum number of function arguments." msgstr "Setzt die maximale Anzahl von Funktionsargumenten." -#: utils/misc/guc.c:3138 +#: utils/misc/guc.c:3146 msgid "Shows the maximum number of index keys." msgstr "Zeigt die maximale Anzahl von Indexschlüsseln." -#: utils/misc/guc.c:3149 +#: utils/misc/guc.c:3157 msgid "Shows the maximum identifier length." msgstr "Zeigt die maximale Länge von Bezeichnern." -#: utils/misc/guc.c:3160 +#: utils/misc/guc.c:3168 msgid "Shows the size of a disk block." msgstr "Zeigt die Größe eines Diskblocks." -#: utils/misc/guc.c:3171 +#: utils/misc/guc.c:3179 msgid "Shows the number of pages per disk file." msgstr "Zeigt die Anzahl Seiten pro Diskdatei." -#: utils/misc/guc.c:3182 +#: utils/misc/guc.c:3190 msgid "Shows the block size in the write ahead log." msgstr "Zeigt die Blockgröße im Write-Ahead-Log." -#: utils/misc/guc.c:3193 +#: utils/misc/guc.c:3201 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Setzt die Zeit, die gewartet wird, bevor nach einem fehlgeschlagenen Versuch neue WAL-Daten angefordert werden." -#: utils/misc/guc.c:3205 +#: utils/misc/guc.c:3213 msgid "Shows the size of write ahead log segments." msgstr "Zeigt die Größe eines Write-Ahead-Log-Segments." -#: utils/misc/guc.c:3218 +#: utils/misc/guc.c:3226 msgid "Time to sleep between autovacuum runs." msgstr "Wartezeit zwischen Autovacuum-Durchläufen." -#: utils/misc/guc.c:3228 +#: utils/misc/guc.c:3236 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Mindestanzahl an geänderten oder gelöschten Tupeln vor einem Vacuum." -#: utils/misc/guc.c:3237 +#: utils/misc/guc.c:3245 msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." msgstr "Mindestanzahl an Einfügeoperationen vor einem Vacuum, oder -1 um auszuschalten." -#: utils/misc/guc.c:3246 +#: utils/misc/guc.c:3254 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Mindestanzahl an Einfüge-, Änderungs- oder Löschoperationen vor einem Analyze." -#: utils/misc/guc.c:3256 +#: utils/misc/guc.c:3264 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Alter, nach dem eine Tabelle automatisch gevacuumt wird, um Transaktionsnummernüberlauf zu verhindern." -#: utils/misc/guc.c:3271 +#: utils/misc/guc.c:3279 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Multixact-Alter, nach dem eine Tabelle automatisch gevacuumt wird, um Transaktionsnummernüberlauf zu verhindern." -#: utils/misc/guc.c:3281 +#: utils/misc/guc.c:3289 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Setzt die maximale Anzahl gleichzeitig laufender Autovacuum-Worker-Prozesse." -#: utils/misc/guc.c:3291 +#: utils/misc/guc.c:3299 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "Setzt die maximale Anzahl paralleler Prozesse pro Wartungsoperation." -#: utils/misc/guc.c:3301 +#: utils/misc/guc.c:3309 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Setzt die maximale Anzahl paralleler Prozesse pro Executor-Knoten." -#: utils/misc/guc.c:3312 +#: utils/misc/guc.c:3320 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "Setzt die maximale Anzahl paralleler Arbeitsprozesse, die gleichzeitig aktiv sein können." -#: utils/misc/guc.c:3323 +#: utils/misc/guc.c:3331 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Setzt die maximale Speichergröße für jeden Autovacuum-Worker-Prozess." -#: utils/misc/guc.c:3334 +#: utils/misc/guc.c:3342 msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." msgstr "Zeit bevor ein Snapshot zu alt ist, um Seiten zu lesen, die geändert wurden, nachdem der Snapshot gemacht wurde." -#: utils/misc/guc.c:3335 +#: utils/misc/guc.c:3343 msgid "A value of -1 disables this feature." msgstr "Der Wert -1 schaltet dieses Feature aus." -#: utils/misc/guc.c:3345 +#: utils/misc/guc.c:3353 msgid "Time between issuing TCP keepalives." msgstr "Zeit zwischen TCP-Keepalive-Sendungen." -#: utils/misc/guc.c:3346 utils/misc/guc.c:3357 utils/misc/guc.c:3481 +#: utils/misc/guc.c:3354 utils/misc/guc.c:3365 utils/misc/guc.c:3489 msgid "A value of 0 uses the system default." msgstr "Der Wert 0 verwendet die Systemvoreinstellung." -#: utils/misc/guc.c:3356 +#: utils/misc/guc.c:3364 msgid "Time between TCP keepalive retransmits." msgstr "Zeit zwischen TCP-Keepalive-Neuübertragungen." -#: utils/misc/guc.c:3367 +#: utils/misc/guc.c:3375 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "SSL-Renegotiation wird nicht mehr unterstützt; kann nur auf 0 gesetzt werden." -#: utils/misc/guc.c:3378 +#: utils/misc/guc.c:3386 msgid "Maximum number of TCP keepalive retransmits." msgstr "Maximale Anzahl an TCP-Keepalive-Neuübertragungen." -#: utils/misc/guc.c:3379 +#: utils/misc/guc.c:3387 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "Dies bestimmt die Anzahl von aufeinanderfolgenden Keepalive-Neuübertragungen, die verloren gehen dürfen, bis die Verbindung als tot betrachtet wird. Der Wert 0 verwendet die Betriebssystemvoreinstellung." -#: utils/misc/guc.c:3390 +#: utils/misc/guc.c:3398 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Setzt die maximal erlaubte Anzahl Ergebnisse für eine genaue Suche mit GIN." -#: utils/misc/guc.c:3401 +#: utils/misc/guc.c:3409 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Setzt die Annahme des Planers über die Gesamtgröße der Daten-Caches." -#: utils/misc/guc.c:3402 +#: utils/misc/guc.c:3410 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "Das heißt, die Gesamtgröße der Caches (Kernel-Cache und Shared Buffers), die für Datendateien von PostgreSQL verwendet wird. Das wird in Diskseiten gemessen, welche normalerweise 8 kB groß sind." -#: utils/misc/guc.c:3413 +#: utils/misc/guc.c:3421 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Setzt die Mindestmenge an Tabellendaten für einen parallelen Scan." -#: utils/misc/guc.c:3414 +#: utils/misc/guc.c:3422 msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." msgstr "Wenn der Planer schätzt, dass zu wenige Tabellenseiten gelesen werden werden um diesen Wert zu erreichen, dann wird kein paralleler Scan in Erwägung gezogen werden." -#: utils/misc/guc.c:3424 +#: utils/misc/guc.c:3432 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Setzt die Mindestmenge an Indexdaten für einen parallelen Scan." -#: utils/misc/guc.c:3425 +#: utils/misc/guc.c:3433 msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." msgstr "Wenn der Planer schätzt, dass zu wenige Indexseiten gelesen werden werden um diesen Wert zu erreichen, dann wird kein paralleler Scan in Erwägung gezogen werden." -#: utils/misc/guc.c:3436 +#: utils/misc/guc.c:3444 msgid "Shows the server version as an integer." msgstr "Zeigt die Serverversion als Zahl." -#: utils/misc/guc.c:3447 +#: utils/misc/guc.c:3455 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "Schreibt Meldungen über die Verwendung von temporären Dateien in den Log, wenn sie größer als diese Anzahl an Kilobytes sind." -#: utils/misc/guc.c:3448 +#: utils/misc/guc.c:3456 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "Null loggt alle Dateien. Die Standardeinstellung ist -1 (wodurch dieses Feature ausgeschaltet wird)." -#: utils/misc/guc.c:3458 +#: utils/misc/guc.c:3466 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Setzt die für pg_stat_activity.query reservierte Größe, in Bytes." -#: utils/misc/guc.c:3469 +#: utils/misc/guc.c:3477 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Setzt die maximale Größe der Pending-Liste eines GIN-Index." -#: utils/misc/guc.c:3480 +#: utils/misc/guc.c:3488 msgid "TCP user timeout." msgstr "TCP-User-Timeout." -#: utils/misc/guc.c:3491 +#: utils/misc/guc.c:3499 msgid "The size of huge page that should be requested." msgstr "" -#: utils/misc/guc.c:3502 +#: utils/misc/guc.c:3510 msgid "Aggressively invalidate system caches for debugging purposes." msgstr "" -#: utils/misc/guc.c:3525 +#: utils/misc/guc.c:3533 #, fuzzy #| msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgid "Sets the time interval between checks for disconnection while running queries." msgstr "Setzt das maximale Intervall zwischen Statusberichten des WAL-Receivers an den sendenden Server." -#: utils/misc/guc.c:3545 +#: utils/misc/guc.c:3553 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "Setzt den vom Planer geschätzten Aufwand, um eine sequenzielle Diskseite zu lesen." -#: utils/misc/guc.c:3556 +#: utils/misc/guc.c:3564 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "Setzt den vom Planer geschätzten Aufwand, um eine nichtsequenzielle Diskseite zu lesen." -#: utils/misc/guc.c:3567 +#: utils/misc/guc.c:3575 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "Setzt den vom Planer geschätzten Aufwand für die Verarbeitung einer Zeile." -#: utils/misc/guc.c:3578 +#: utils/misc/guc.c:3586 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "Setzt den vom Planer geschätzten Aufwand für die Verarbeitung eines Indexeintrags während eines Index-Scans." -#: utils/misc/guc.c:3589 +#: utils/misc/guc.c:3597 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "Setzt den vom Planer geschätzten Aufwand für die Verarbeitung eines Operators oder Funktionsaufrufs." -#: utils/misc/guc.c:3600 +#: utils/misc/guc.c:3608 #, fuzzy #| msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to leader backend." msgstr "Setzt den vom Planer geschätzten Aufwand, um eine Zeile vom Arbeitsprozess and das Master-Backend zu senden." -#: utils/misc/guc.c:3611 +#: utils/misc/guc.c:3619 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "Setzt den vom Planer geschätzten Aufwand für das Starten von Arbeitsprozessen für parallele Anfragen." -#: utils/misc/guc.c:3623 +#: utils/misc/guc.c:3631 msgid "Perform JIT compilation if query is more expensive." msgstr "JIT-Kompilierung durchführen, wenn die Anfrage teurer ist." -#: utils/misc/guc.c:3624 +#: utils/misc/guc.c:3632 msgid "-1 disables JIT compilation." msgstr "-1 schaltet JIT-Kompilierung aus." -#: utils/misc/guc.c:3634 +#: utils/misc/guc.c:3642 msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "JIT-kompilierte Funktionen optimieren, wenn die Anfrage teurer ist." -#: utils/misc/guc.c:3635 +#: utils/misc/guc.c:3643 msgid "-1 disables optimization." msgstr "-1 schaltet Optimierung aus." -#: utils/misc/guc.c:3645 +#: utils/misc/guc.c:3653 msgid "Perform JIT inlining if query is more expensive." msgstr "JIT-Inlining durchführen, wenn die Anfrage teurer ist." -#: utils/misc/guc.c:3646 +#: utils/misc/guc.c:3654 msgid "-1 disables inlining." msgstr "-1 schaltet Inlining aus." -#: utils/misc/guc.c:3656 +#: utils/misc/guc.c:3664 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Setzt den vom Planer geschätzten Anteil der Cursor-Zeilen, die ausgelesen werden werden." -#: utils/misc/guc.c:3668 +#: utils/misc/guc.c:3676 msgid "GEQO: selective pressure within the population." msgstr "GEQO: selektiver Auswahldruck in der Bevölkerung." -#: utils/misc/guc.c:3679 +#: utils/misc/guc.c:3687 msgid "GEQO: seed for random path selection." msgstr "GEQO: Ausgangswert für die zufällige Pfadauswahl." -#: utils/misc/guc.c:3690 +#: utils/misc/guc.c:3698 msgid "Multiple of work_mem to use for hash tables." msgstr "Vielfaches von work_mem zur Verwendung bei Hash-Tabellen." -#: utils/misc/guc.c:3701 +#: utils/misc/guc.c:3709 msgid "Multiple of the average buffer usage to free per round." msgstr "Vielfaches der durchschnittlichen freizugebenden Pufferverwendung pro Runde." -#: utils/misc/guc.c:3711 +#: utils/misc/guc.c:3719 msgid "Sets the seed for random-number generation." msgstr "Setzt den Ausgangswert für die Zufallszahlenerzeugung." -#: utils/misc/guc.c:3722 +#: utils/misc/guc.c:3730 msgid "Vacuum cost delay in milliseconds." msgstr "Vacuum-Kosten-Verzögerung in Millisekunden." -#: utils/misc/guc.c:3733 +#: utils/misc/guc.c:3741 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Vacuum-Kosten-Verzögerung in Millisekunden, für Autovacuum." -#: utils/misc/guc.c:3744 +#: utils/misc/guc.c:3752 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Anzahl geänderter oder gelöschter Tupel vor einem Vacuum, relativ zu reltuples." -#: utils/misc/guc.c:3754 +#: utils/misc/guc.c:3762 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "Anzahl eingefügter Tupel vor einem Vacuum, relativ zu reltuples." -#: utils/misc/guc.c:3764 +#: utils/misc/guc.c:3772 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Anzahl eingefügter, geänderter oder gelöschter Tupel vor einem Analyze, relativ zu reltuples." -#: utils/misc/guc.c:3774 +#: utils/misc/guc.c:3782 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "Zeit, die damit verbracht wird, modifizierte Puffer während eines Checkpoints zurückzuschreiben, als Bruchteil des Checkpoint-Intervalls." -#: utils/misc/guc.c:3784 +#: utils/misc/guc.c:3792 msgid "Fraction of statements exceeding log_min_duration_sample to be logged." msgstr "Anteil der zu loggenden Anweisungen, die log_min_duration_sample überschreiten." -#: utils/misc/guc.c:3785 +#: utils/misc/guc.c:3793 msgid "Use a value between 0.0 (never log) and 1.0 (always log)." msgstr "Verwenden Sie einen Wert zwischen 0.0 (nie loggen) und 1.0 (immer loggen)." -#: utils/misc/guc.c:3794 +#: utils/misc/guc.c:3802 #, fuzzy #| msgid "Sets the fraction of transactions to log for new transactions." msgid "Sets the fraction of transactions from which to log all statements." msgstr "Setzt den Bruchteil zu loggender Transaktionen." -#: utils/misc/guc.c:3795 +#: utils/misc/guc.c:3803 #, fuzzy #| msgid "Logs all statements from a fraction of transactions. Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgid "Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgstr "Loggt alle Anweisungen in einem Bruchteil der Transaktionen. Verwenden Sie einen Wert zwischen 0.0 (nie loggen) und 1.0 (alle Anweisungen für alle Transaktionen loggen)." -#: utils/misc/guc.c:3814 +#: utils/misc/guc.c:3822 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Setzt den Shell-Befehl, der aufgerufen wird, um eine WAL-Datei zu archivieren." -#: utils/misc/guc.c:3824 +#: utils/misc/guc.c:3832 msgid "Sets the shell command that will be called to retrieve an archived WAL file." msgstr "Setzt den Shell-Befehl, der aufgerufen wird, um eine archivierte WAL-Datei zurückzuholen." -#: utils/misc/guc.c:3834 +#: utils/misc/guc.c:3842 msgid "Sets the shell command that will be executed at every restart point." msgstr "Setzt den Shell-Befehl, der bei jedem Restart-Punkt ausgeführt wird." -#: utils/misc/guc.c:3844 +#: utils/misc/guc.c:3852 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "Setzt den Shell-Befehl, der einmal am Ende der Wiederherstellung ausgeführt wird." -#: utils/misc/guc.c:3854 +#: utils/misc/guc.c:3862 msgid "Specifies the timeline to recover into." msgstr "Gibt die Zeitleiste für die Wiederherstellung an." -#: utils/misc/guc.c:3864 +#: utils/misc/guc.c:3872 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "Auf »immediate« setzen, um die Wiederherstellung zu beenden, sobald ein konsistenter Zustand erreicht ist." -#: utils/misc/guc.c:3873 +#: utils/misc/guc.c:3881 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "Setzt die Transaktions-ID, bis zu der die Wiederherstellung voranschreiten wird." -#: utils/misc/guc.c:3882 +#: utils/misc/guc.c:3890 msgid "Sets the time stamp up to which recovery will proceed." msgstr "Setzt den Zeitstempel, bis zu dem die Wiederherstellung voranschreiten wird." -#: utils/misc/guc.c:3891 +#: utils/misc/guc.c:3899 msgid "Sets the named restore point up to which recovery will proceed." msgstr "Setzt den benannten Restore-Punkt, bis zu dem die Wiederherstellung voranschreiten wird." -#: utils/misc/guc.c:3900 +#: utils/misc/guc.c:3908 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "Setzt die LSN der Write-Ahead-Log-Position, bis zu der die Wiederherstellung voranschreiten wird." -#: utils/misc/guc.c:3910 +#: utils/misc/guc.c:3918 msgid "Specifies a file name whose presence ends recovery in the standby." msgstr "Gibt einen Dateinamen an, dessen Präsenz die Wiederherstellung im Standby beendet." -#: utils/misc/guc.c:3920 +#: utils/misc/guc.c:3928 msgid "Sets the connection string to be used to connect to the sending server." msgstr "Setzt die Verbindungszeichenkette zur Verbindung mit dem sendenden Server." -#: utils/misc/guc.c:3931 +#: utils/misc/guc.c:3939 msgid "Sets the name of the replication slot to use on the sending server." msgstr "Setzt den Namen des zu verwendenden Replikations-Slots auf dem sendenden Server." -#: utils/misc/guc.c:3941 +#: utils/misc/guc.c:3949 msgid "Sets the client's character set encoding." msgstr "Setzt die Zeichensatzkodierung des Clients." -#: utils/misc/guc.c:3952 +#: utils/misc/guc.c:3960 msgid "Controls information prefixed to each log line." msgstr "Bestimmt die Informationen, die vor jede Logzeile geschrieben werden." -#: utils/misc/guc.c:3953 +#: utils/misc/guc.c:3961 msgid "If blank, no prefix is used." msgstr "Wenn leer, dann wird kein Präfix verwendet." -#: utils/misc/guc.c:3962 +#: utils/misc/guc.c:3970 msgid "Sets the time zone to use in log messages." msgstr "Setzt die in Logmeldungen verwendete Zeitzone." -#: utils/misc/guc.c:3972 +#: utils/misc/guc.c:3980 msgid "Sets the display format for date and time values." msgstr "Setzt das Ausgabeformat für Datums- und Zeitwerte." -#: utils/misc/guc.c:3973 +#: utils/misc/guc.c:3981 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Kontrolliert auch die Interpretation von zweideutigen Datumseingaben." -#: utils/misc/guc.c:3984 +#: utils/misc/guc.c:3992 msgid "Sets the default table access method for new tables." msgstr "Setzt die Standard-Tabellenzugriffsmethode für neue Tabellen." -#: utils/misc/guc.c:3995 +#: utils/misc/guc.c:4003 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Setzt den Standard-Tablespace für Tabellen und Indexe." -#: utils/misc/guc.c:3996 +#: utils/misc/guc.c:4004 msgid "An empty string selects the database's default tablespace." msgstr "Eine leere Zeichenkette wählt den Standard-Tablespace der Datenbank." -#: utils/misc/guc.c:4006 +#: utils/misc/guc.c:4014 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "Setzt den oder die Tablespaces für temporäre Tabellen und Sortierdateien." -#: utils/misc/guc.c:4017 +#: utils/misc/guc.c:4025 msgid "Sets the path for dynamically loadable modules." msgstr "Setzt den Pfad für ladbare dynamische Bibliotheken." -#: utils/misc/guc.c:4018 +#: utils/misc/guc.c:4026 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "Wenn ein dynamisch ladbares Modul geöffnet werden muss und der angegebene Name keine Verzeichniskomponente hat (das heißt er enthält keinen Schrägstrich), dann sucht das System in diesem Pfad nach der angegebenen Datei." -#: utils/misc/guc.c:4031 +#: utils/misc/guc.c:4039 msgid "Sets the location of the Kerberos server key file." msgstr "Setzt den Ort der Kerberos-Server-Schlüsseldatei." -#: utils/misc/guc.c:4042 +#: utils/misc/guc.c:4050 msgid "Sets the Bonjour service name." msgstr "Setzt den Bonjour-Servicenamen." -#: utils/misc/guc.c:4054 +#: utils/misc/guc.c:4062 msgid "Shows the collation order locale." msgstr "Zeigt die Locale für die Sortierreihenfolge." -#: utils/misc/guc.c:4065 +#: utils/misc/guc.c:4073 msgid "Shows the character classification and case conversion locale." msgstr "Zeigt die Locale für Zeichenklassifizierung und Groß-/Kleinschreibung." -#: utils/misc/guc.c:4076 +#: utils/misc/guc.c:4084 msgid "Sets the language in which messages are displayed." msgstr "Setzt die Sprache, in der Mitteilungen ausgegeben werden." -#: utils/misc/guc.c:4086 +#: utils/misc/guc.c:4094 msgid "Sets the locale for formatting monetary amounts." msgstr "Setzt die Locale für die Formatierung von Geldbeträgen." -#: utils/misc/guc.c:4096 +#: utils/misc/guc.c:4104 msgid "Sets the locale for formatting numbers." msgstr "Setzt die Locale für die Formatierung von Zahlen." -#: utils/misc/guc.c:4106 +#: utils/misc/guc.c:4114 msgid "Sets the locale for formatting date and time values." msgstr "Setzt die Locale für die Formatierung von Datums- und Zeitwerten." -#: utils/misc/guc.c:4116 +#: utils/misc/guc.c:4124 msgid "Lists shared libraries to preload into each backend." msgstr "Listet dynamische Bibliotheken, die vorab in jeden Serverprozess geladen werden." -#: utils/misc/guc.c:4127 +#: utils/misc/guc.c:4135 msgid "Lists shared libraries to preload into server." msgstr "Listet dynamische Bibliotheken, die vorab in den Server geladen werden." -#: utils/misc/guc.c:4138 +#: utils/misc/guc.c:4146 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Listet unprivilegierte dynamische Bibliotheken, die vorab in jeden Serverprozess geladen werden." -#: utils/misc/guc.c:4149 +#: utils/misc/guc.c:4157 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Setzt die Schemasuchreihenfolge für Namen ohne Schemaqualifikation." -#: utils/misc/guc.c:4161 +#: utils/misc/guc.c:4169 #, fuzzy #| msgid "Sets the server (database) character set encoding." msgid "Shows the server (database) character set encoding." msgstr "Setzt die Zeichensatzkodierung des Servers (der Datenbank)." -#: utils/misc/guc.c:4173 +#: utils/misc/guc.c:4181 msgid "Shows the server version." msgstr "Zeigt die Serverversion." -#: utils/misc/guc.c:4185 +#: utils/misc/guc.c:4193 msgid "Sets the current role." msgstr "Setzt die aktuelle Rolle." -#: utils/misc/guc.c:4197 +#: utils/misc/guc.c:4205 msgid "Sets the session user name." msgstr "Setzt den Sitzungsbenutzernamen." -#: utils/misc/guc.c:4208 +#: utils/misc/guc.c:4216 msgid "Sets the destination for server log output." msgstr "Setzt das Ziel für die Serverlogausgabe." -#: utils/misc/guc.c:4209 +#: utils/misc/guc.c:4217 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "Gültige Werte sind Kombinationen von »stderr«, »syslog«, »csvlog« und »eventlog«, je nach Plattform." -#: utils/misc/guc.c:4220 +#: utils/misc/guc.c:4228 msgid "Sets the destination directory for log files." msgstr "Bestimmt das Zielverzeichnis für Logdateien." -#: utils/misc/guc.c:4221 +#: utils/misc/guc.c:4229 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Kann relativ zum Datenverzeichnis oder als absoluter Pfad angegeben werden." -#: utils/misc/guc.c:4231 +#: utils/misc/guc.c:4239 msgid "Sets the file name pattern for log files." msgstr "Bestimmt das Dateinamenmuster für Logdateien." -#: utils/misc/guc.c:4242 +#: utils/misc/guc.c:4250 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Setzt den Programmnamen, mit dem PostgreSQL-Meldungen im Syslog identifiziert werden." -#: utils/misc/guc.c:4253 +#: utils/misc/guc.c:4261 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "Setzt den Programmnamen, mit dem PostgreSQL-Meldungen im Ereignisprotokoll identifiziert werden." -#: utils/misc/guc.c:4264 +#: utils/misc/guc.c:4272 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Setzt die Zeitzone, in der Zeitangaben interpretiert und ausgegeben werden." -#: utils/misc/guc.c:4274 +#: utils/misc/guc.c:4282 msgid "Selects a file of time zone abbreviations." msgstr "Wählt eine Datei mit Zeitzonenabkürzungen." -#: utils/misc/guc.c:4284 +#: utils/misc/guc.c:4292 msgid "Sets the owning group of the Unix-domain socket." msgstr "Setzt die Eigentümergruppe der Unix-Domain-Socket." -#: utils/misc/guc.c:4285 +#: utils/misc/guc.c:4293 msgid "The owning user of the socket is always the user that starts the server." msgstr "Der Eigentümer ist immer der Benutzer, der den Server startet." -#: utils/misc/guc.c:4295 +#: utils/misc/guc.c:4303 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Setzt die Verzeichnisse, in denen Unix-Domain-Sockets erzeugt werden sollen." -#: utils/misc/guc.c:4310 +#: utils/misc/guc.c:4318 msgid "Sets the host name or IP address(es) to listen to." msgstr "Setzt den Hostnamen oder die IP-Adresse(n), auf der auf Verbindungen gewartet wird." -#: utils/misc/guc.c:4325 +#: utils/misc/guc.c:4333 msgid "Sets the server's data directory." msgstr "Setzt das Datenverzeichnis des Servers." -#: utils/misc/guc.c:4336 +#: utils/misc/guc.c:4344 msgid "Sets the server's main configuration file." msgstr "Setzt die Hauptkonfigurationsdatei des Servers." -#: utils/misc/guc.c:4347 +#: utils/misc/guc.c:4355 msgid "Sets the server's \"hba\" configuration file." msgstr "Setzt die »hba«-Konfigurationsdatei des Servers." -#: utils/misc/guc.c:4358 +#: utils/misc/guc.c:4366 msgid "Sets the server's \"ident\" configuration file." msgstr "Setzt die »ident«-Konfigurationsdatei des Servers." -#: utils/misc/guc.c:4369 +#: utils/misc/guc.c:4377 msgid "Writes the postmaster PID to the specified file." msgstr "Schreibt die Postmaster-PID in die angegebene Datei." -#: utils/misc/guc.c:4380 +#: utils/misc/guc.c:4388 #, fuzzy #| msgid "Name of the SSL library." msgid "Shows the name of the SSL library." msgstr "Name der SSL-Bibliothek." -#: utils/misc/guc.c:4395 +#: utils/misc/guc.c:4403 msgid "Location of the SSL server certificate file." msgstr "Ort der SSL-Serverzertifikatsdatei." -#: utils/misc/guc.c:4405 +#: utils/misc/guc.c:4413 msgid "Location of the SSL server private key file." msgstr "Setzt den Ort der Datei mit dem privaten SSL-Server-Schlüssel." -#: utils/misc/guc.c:4415 +#: utils/misc/guc.c:4423 msgid "Location of the SSL certificate authority file." msgstr "Ort der SSL-Certificate-Authority-Datei." -#: utils/misc/guc.c:4425 +#: utils/misc/guc.c:4433 msgid "Location of the SSL certificate revocation list file." msgstr "Ort der SSL-Certificate-Revocation-List-Datei." -#: utils/misc/guc.c:4435 +#: utils/misc/guc.c:4443 #, fuzzy #| msgid "Location of the SSL certificate revocation list file." msgid "Location of the SSL certificate revocation list directory." msgstr "Ort der SSL-Certificate-Revocation-List-Datei." -#: utils/misc/guc.c:4445 +#: utils/misc/guc.c:4453 msgid "Writes temporary statistics files to the specified directory." msgstr "Schreibt temporäre Statistikdateien in das angegebene Verzeichnis." -#: utils/misc/guc.c:4456 +#: utils/misc/guc.c:4464 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "Anzahl synchroner Standbys und Liste der Namen der möglichen synchronen Standbys." -#: utils/misc/guc.c:4467 +#: utils/misc/guc.c:4475 msgid "Sets default text search configuration." msgstr "Setzt die vorgegebene Textsuchekonfiguration." -#: utils/misc/guc.c:4477 +#: utils/misc/guc.c:4485 msgid "Sets the list of allowed SSL ciphers." msgstr "Setzt die Liste der erlaubten SSL-Verschlüsselungsalgorithmen." -#: utils/misc/guc.c:4492 +#: utils/misc/guc.c:4500 msgid "Sets the curve to use for ECDH." msgstr "Setzt die für ECDH zu verwendende Kurve." -#: utils/misc/guc.c:4507 +#: utils/misc/guc.c:4515 msgid "Location of the SSL DH parameters file." msgstr "Setzt den Ort der SSL-DH-Parameter-Datei." -#: utils/misc/guc.c:4518 +#: utils/misc/guc.c:4526 msgid "Command to obtain passphrases for SSL." msgstr "Befehl zum Einlesen von Passphrasen für SSL." -#: utils/misc/guc.c:4529 +#: utils/misc/guc.c:4537 msgid "Sets the application name to be reported in statistics and logs." msgstr "Setzt den Anwendungsnamen, der in Statistiken und Logs verzeichnet wird." -#: utils/misc/guc.c:4540 +#: utils/misc/guc.c:4548 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Setzt den Namen des Clusters, welcher im Prozesstitel angezeigt wird." -#: utils/misc/guc.c:4551 +#: utils/misc/guc.c:4559 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Setzt die WAL-Resource-Manager, für die WAL-Konsistenzprüfungen durchgeführt werden." -#: utils/misc/guc.c:4552 +#: utils/misc/guc.c:4560 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "Volle Seitenabbilder werden für alle Datenblöcke geloggt und gegen die Resultate der WAL-Wiederherstellung geprüft." -#: utils/misc/guc.c:4562 +#: utils/misc/guc.c:4570 msgid "JIT provider to use." msgstr "Zu verwendender JIT-Provider." -#: utils/misc/guc.c:4573 +#: utils/misc/guc.c:4581 msgid "Log backtrace for errors in these functions." msgstr "Backtrace für Fehler in diesen Funktionen loggen." -#: utils/misc/guc.c:4593 +#: utils/misc/guc.c:4601 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Bestimmt, ob »\\'« in Zeichenkettenkonstanten erlaubt ist." -#: utils/misc/guc.c:4603 +#: utils/misc/guc.c:4611 msgid "Sets the output format for bytea." msgstr "Setzt das Ausgabeformat für bytea." -#: utils/misc/guc.c:4613 +#: utils/misc/guc.c:4621 msgid "Sets the message levels that are sent to the client." msgstr "Setzt die Meldungstypen, die an den Client gesendet werden." -#: utils/misc/guc.c:4614 utils/misc/guc.c:4690 utils/misc/guc.c:4701 -#: utils/misc/guc.c:4777 +#: utils/misc/guc.c:4622 utils/misc/guc.c:4708 utils/misc/guc.c:4719 +#: utils/misc/guc.c:4795 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "Jeder Wert schließt alle ihm folgenden Werte mit ein. Je weiter hinten der Wert steht, desto weniger Meldungen werden gesendet werden." -#: utils/misc/guc.c:4624 +#: utils/misc/guc.c:4632 +#, fuzzy +#| msgid "unterminated quoted identifier" +msgid "Compute query identifiers." +msgstr "Bezeichner in Anführungszeichen nicht abgeschlossen" + +#: utils/misc/guc.c:4642 msgid "Enables the planner to use constraints to optimize queries." msgstr "Ermöglicht dem Planer die Verwendung von Constraints, um Anfragen zu optimieren." -#: utils/misc/guc.c:4625 +#: utils/misc/guc.c:4643 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "Tabellen-Scans werden übersprungen, wenn deren Constraints garantieren, dass keine Zeile mit der Abfrage übereinstimmt." -#: utils/misc/guc.c:4636 +#: utils/misc/guc.c:4654 #, fuzzy #| msgid "Sets the default table access method for new tables." -msgid "Sets the default compression for new columns." +msgid "Sets the default compression method for compressible values." msgstr "Setzt die Standard-Tabellenzugriffsmethode für neue Tabellen." -#: utils/misc/guc.c:4647 +#: utils/misc/guc.c:4665 msgid "Sets the transaction isolation level of each new transaction." msgstr "Setzt den Transaktionsisolationsgrad neuer Transaktionen." -#: utils/misc/guc.c:4657 +#: utils/misc/guc.c:4675 msgid "Sets the current transaction's isolation level." msgstr "Zeigt den Isolationsgrad der aktuellen Transaktion." -#: utils/misc/guc.c:4668 +#: utils/misc/guc.c:4686 msgid "Sets the display format for interval values." msgstr "Setzt das Ausgabeformat für Intervallwerte." -#: utils/misc/guc.c:4679 +#: utils/misc/guc.c:4697 msgid "Sets the verbosity of logged messages." msgstr "Setzt den Detailgrad von geloggten Meldungen." -#: utils/misc/guc.c:4689 +#: utils/misc/guc.c:4707 msgid "Sets the message levels that are logged." msgstr "Setzt die Meldungstypen, die geloggt werden." -#: utils/misc/guc.c:4700 +#: utils/misc/guc.c:4718 msgid "Causes all statements generating error at or above this level to be logged." msgstr "Schreibt alle Anweisungen, die einen Fehler auf dieser Stufe oder höher verursachen, in den Log." -#: utils/misc/guc.c:4711 +#: utils/misc/guc.c:4729 msgid "Sets the type of statements logged." msgstr "Setzt die Anweisungsarten, die geloggt werden." -#: utils/misc/guc.c:4721 +#: utils/misc/guc.c:4739 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "Setzt die zu verwendende Syslog-»Facility«, wenn Syslog angeschaltet ist." -#: utils/misc/guc.c:4736 +#: utils/misc/guc.c:4754 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "Setzt das Sitzungsverhalten für Trigger und Regeln." -#: utils/misc/guc.c:4746 +#: utils/misc/guc.c:4764 msgid "Sets the current transaction's synchronization level." msgstr "Setzt den Synchronisationsgrad der aktuellen Transaktion." -#: utils/misc/guc.c:4756 +#: utils/misc/guc.c:4774 msgid "Allows archiving of WAL files using archive_command." msgstr "Erlaubt die Archivierung von WAL-Dateien mittels archive_command." -#: utils/misc/guc.c:4766 +#: utils/misc/guc.c:4784 msgid "Sets the action to perform upon reaching the recovery target." msgstr "Setzt die Aktion, die beim Erreichen des Wiederherstellungsziels durchgeführt wird." -#: utils/misc/guc.c:4776 +#: utils/misc/guc.c:4794 msgid "Enables logging of recovery-related debugging information." msgstr "Ermöglicht das Loggen von Debug-Informationen über die Wiederherstellung." -#: utils/misc/guc.c:4792 +#: utils/misc/guc.c:4810 msgid "Collects function-level statistics on database activity." msgstr "Sammelt Statistiken auf Funktionsebene über Datenbankaktivität." -#: utils/misc/guc.c:4802 +#: utils/misc/guc.c:4820 #, fuzzy #| msgid "Set the level of information written to the WAL." msgid "Sets the level of information written to the WAL." msgstr "Setzt den Umfang der in den WAL geschriebenen Informationen." -#: utils/misc/guc.c:4812 +#: utils/misc/guc.c:4830 msgid "Selects the dynamic shared memory implementation used." msgstr "Wählt die zu verwendende Implementierung von dynamischem Shared Memory." -#: utils/misc/guc.c:4822 +#: utils/misc/guc.c:4840 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "Wählt die Shared-Memory-Implementierung, die für den Haupt-Shared-Memory-Bereich verwendet wird." -#: utils/misc/guc.c:4832 +#: utils/misc/guc.c:4850 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Wählt die Methode, um das Schreiben von WAL-Änderungen auf die Festplatte zu erzwingen." -#: utils/misc/guc.c:4842 +#: utils/misc/guc.c:4860 msgid "Sets how binary values are to be encoded in XML." msgstr "Setzt, wie binäre Werte in XML kodiert werden." -#: utils/misc/guc.c:4852 +#: utils/misc/guc.c:4870 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "Setzt, ob XML-Daten in impliziten Parse- und Serialisierungsoperationen als Dokument oder Fragment betrachtet werden sollen." -#: utils/misc/guc.c:4863 +#: utils/misc/guc.c:4881 msgid "Use of huge pages on Linux or Windows." msgstr "Huge Pages auf Linux oder Windows verwenden." -#: utils/misc/guc.c:4873 +#: utils/misc/guc.c:4891 msgid "Forces use of parallel query facilities." msgstr "Verwendung der Einrichtungen für parallele Anfragen erzwingen." -#: utils/misc/guc.c:4874 +#: utils/misc/guc.c:4892 msgid "If possible, run query using a parallel worker and with parallel restrictions." msgstr "Wenn möglich werden Anfragen in einem parallelen Arbeitsprozess und mit parallelen Beschränkungen ausgeführt." -#: utils/misc/guc.c:4884 +#: utils/misc/guc.c:4902 msgid "Chooses the algorithm for encrypting passwords." msgstr "Wählt den Algorithmus zum Verschlüsseln von Passwörtern." -#: utils/misc/guc.c:4894 +#: utils/misc/guc.c:4912 msgid "Controls the planner's selection of custom or generic plan." msgstr "Kontrolliert, ob der Planer einen maßgeschneiderten oder einen allgemeinen Plan verwendet." -#: utils/misc/guc.c:4895 +#: utils/misc/guc.c:4913 msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." msgstr "Vorbereitete Anweisungen können maßgeschneiderte oder allgemeine Pläne haben und der Planer wird versuchen, den besseren auszuwählen. Diese Einstellung kann das Standardverhalten außer Kraft setzen." -#: utils/misc/guc.c:4907 +#: utils/misc/guc.c:4925 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "Setzt die minimale zu verwendende SSL/TLS-Protokollversion." -#: utils/misc/guc.c:4919 +#: utils/misc/guc.c:4937 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "Setzt die maximale zu verwendende SSL/TLS-Protokollversion." -#: utils/misc/guc.c:4931 +#: utils/misc/guc.c:4949 msgid "Sets the method for synchronizing the data directory before crash recovery." msgstr "" -#: utils/misc/guc.c:5499 +#: utils/misc/guc.c:5518 #, fuzzy, c-format #| msgid "unrecognized configuration parameter \"%s\"" msgid "invalid configuration parameter name \"%s\"" msgstr "unbekannter Konfigurationsparameter »%s«" -#: utils/misc/guc.c:5501 +#: utils/misc/guc.c:5520 #, c-format -msgid "Custom parameter names must be of the form \"identifier.identifier\"." +msgid "Custom parameter names must be two or more simple identifiers separated by dots." msgstr "" -#: utils/misc/guc.c:5510 utils/misc/guc.c:9269 +#: utils/misc/guc.c:5529 utils/misc/guc.c:9288 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "unbekannter Konfigurationsparameter »%s«" -#: utils/misc/guc.c:5803 +#: utils/misc/guc.c:5822 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: konnte nicht auf Verzeichnis »%s« zugreifen: %s\n" -#: utils/misc/guc.c:5808 +#: utils/misc/guc.c:5827 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "Führen Sie initdb oder pg_basebackup aus, um ein PostgreSQL-Datenverzeichnis zu initialisieren.\n" -#: utils/misc/guc.c:5828 +#: utils/misc/guc.c:5847 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -28052,12 +28045,12 @@ msgstr "" "Sie müssen die Kommandozeilenoption --config-file oder -D angegeben oder\n" "die Umgebungsvariable PGDATA setzen.\n" -#: utils/misc/guc.c:5847 +#: utils/misc/guc.c:5866 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s: konnte nicht auf die Serverkonfigurationsdatei »%s« zugreifen: %s\n" -#: utils/misc/guc.c:5873 +#: utils/misc/guc.c:5892 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -28067,7 +28060,7 @@ msgstr "" "zu finden sind. Sie können dies mit »data_directory« in »%s«, mit der\n" "Kommandozeilenoption -D oder der Umgebungsvariable PGDATA angeben.\n" -#: utils/misc/guc.c:5921 +#: utils/misc/guc.c:5940 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -28077,7 +28070,7 @@ msgstr "" "Sie können dies mit »hba_file« in »%s«, mit der\n" "Kommandozeilenoption -D oder der Umgebungsvariable PGDATA angeben.\n" -#: utils/misc/guc.c:5944 +#: utils/misc/guc.c:5963 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -28087,183 +28080,183 @@ msgstr "" "Sie können dies mit »ident_file« in »%s«, mit der\n" "Kommandozeilenoption -D oder der Umgebungsvariable PGDATA angeben.\n" -#: utils/misc/guc.c:6869 +#: utils/misc/guc.c:6888 msgid "Value exceeds integer range." msgstr "Wert überschreitet Bereich für ganze Zahlen." -#: utils/misc/guc.c:7105 +#: utils/misc/guc.c:7124 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s ist außerhalb des gültigen Bereichs für Parameter »%s« (%d ... %d)" -#: utils/misc/guc.c:7141 +#: utils/misc/guc.c:7160 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s ist außerhalb des gültigen Bereichs für Parameter »%s« (%g ... %g)" -#: utils/misc/guc.c:7301 utils/misc/guc.c:8673 +#: utils/misc/guc.c:7320 utils/misc/guc.c:8692 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "während einer parallelen Operation können keine Parameter gesetzt werden" -#: utils/misc/guc.c:7318 utils/misc/guc.c:8514 +#: utils/misc/guc.c:7337 utils/misc/guc.c:8533 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "Parameter »%s« kann nicht geändert werden" -#: utils/misc/guc.c:7351 +#: utils/misc/guc.c:7370 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "Parameter »%s« kann jetzt nicht geändert werden" -#: utils/misc/guc.c:7369 utils/misc/guc.c:7416 utils/misc/guc.c:11314 +#: utils/misc/guc.c:7388 utils/misc/guc.c:7435 utils/misc/guc.c:11333 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "keine Berechtigung, um Parameter »%s« zu setzen" -#: utils/misc/guc.c:7406 +#: utils/misc/guc.c:7425 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "Parameter »%s« kann nach Start der Verbindung nicht geändert werden" -#: utils/misc/guc.c:7454 +#: utils/misc/guc.c:7473 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "Parameter »%s« kann nicht in einer Security-Definer-Funktion gesetzt werden" -#: utils/misc/guc.c:8087 utils/misc/guc.c:8134 utils/misc/guc.c:9531 +#: utils/misc/guc.c:8106 utils/misc/guc.c:8153 utils/misc/guc.c:9550 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "nur Superuser oder Mitglieder von pg_read_all_settings können »%s« ansehen" -#: utils/misc/guc.c:8218 +#: utils/misc/guc.c:8237 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s darf nur ein Argument haben" -#: utils/misc/guc.c:8466 +#: utils/misc/guc.c:8485 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "nur Superuser können den Befehl ALTER SYSTEM ausführen" -#: utils/misc/guc.c:8547 +#: utils/misc/guc.c:8566 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "Parameterwert für ALTER SYSTEM darf keine Newline enthalten" -#: utils/misc/guc.c:8592 +#: utils/misc/guc.c:8611 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "konnte Inhalt der Datei »%s« nicht parsen" -#: utils/misc/guc.c:8749 +#: utils/misc/guc.c:8768 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT ist nicht implementiert" -#: utils/misc/guc.c:8833 +#: utils/misc/guc.c:8852 #, c-format msgid "SET requires parameter name" msgstr "SET benötigt Parameternamen" -#: utils/misc/guc.c:8966 +#: utils/misc/guc.c:8985 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "Versuch, den Parameter »%s« zu redefinieren" -#: utils/misc/guc.c:10761 +#: utils/misc/guc.c:10780 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "beim Setzen von Parameter »%s« auf »%s«" -#: utils/misc/guc.c:10926 +#: utils/misc/guc.c:10945 #, c-format msgid "parameter \"%s\" could not be set" msgstr "Parameter »%s« kann nicht gesetzt werden" -#: utils/misc/guc.c:11018 +#: utils/misc/guc.c:11037 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "konnte Wert von Parameter »%s« nicht lesen" -#: utils/misc/guc.c:11376 utils/misc/guc.c:11410 +#: utils/misc/guc.c:11395 utils/misc/guc.c:11429 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "ungültiger Wert für Parameter »%s«: %d" -#: utils/misc/guc.c:11444 +#: utils/misc/guc.c:11463 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "ungültiger Wert für Parameter »%s«: %g" -#: utils/misc/guc.c:11731 +#: utils/misc/guc.c:11750 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "»temp_buffers« kann nicht geändert werden, nachdem in der Sitzung auf temporäre Tabellen zugriffen wurde." -#: utils/misc/guc.c:11743 +#: utils/misc/guc.c:11762 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour wird von dieser Installation nicht unterstützt" -#: utils/misc/guc.c:11756 +#: utils/misc/guc.c:11775 #, c-format msgid "SSL is not supported by this build" msgstr "SSL wird von dieser Installation nicht unterstützt" -#: utils/misc/guc.c:11768 +#: utils/misc/guc.c:11787 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Kann Parameter nicht einschalten, wenn »log_statement_stats« an ist." -#: utils/misc/guc.c:11780 +#: utils/misc/guc.c:11799 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "Kann »log_statement_stats« nicht einschalten, wenn »log_parser_stats«, »log_planner_stats« oder »log_executor_stats« an ist." -#: utils/misc/guc.c:12010 +#: utils/misc/guc.c:12029 #, c-format msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "effective_io_concurrency muss auf Plattformen ohne posix_fadvise() auf 0 gesetzt sein." -#: utils/misc/guc.c:12023 +#: utils/misc/guc.c:12042 #, c-format msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "maintenance_io_concurrency muss auf Plattformen ohne posix_fadvise() auf 0 gesetzt sein." -#: utils/misc/guc.c:12037 +#: utils/misc/guc.c:12056 #, fuzzy, c-format #| msgid "huge pages not supported on this platform" msgid "huge_page_size must be 0 on this platform." msgstr "Huge Pages werden auf dieser Plattform nicht unterstützt" -#: utils/misc/guc.c:12051 +#: utils/misc/guc.c:12070 #, fuzzy, c-format #| msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgid "client_connection_check_interval must be set to 0 on platforms that lack POLLRDHUP." msgstr "maintenance_io_concurrency muss auf Plattformen ohne posix_fadvise() auf 0 gesetzt sein." -#: utils/misc/guc.c:12179 +#: utils/misc/guc.c:12198 #, c-format msgid "invalid character" msgstr "ungültiges Zeichen" -#: utils/misc/guc.c:12239 +#: utils/misc/guc.c:12258 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline ist keine gültige Zahl." -#: utils/misc/guc.c:12279 +#: utils/misc/guc.c:12298 #, c-format msgid "multiple recovery targets specified" msgstr "mehrere Wiederherstellungsziele angegeben" -#: utils/misc/guc.c:12280 +#: utils/misc/guc.c:12299 #, c-format msgid "At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set." msgstr "Höchstens eins aus recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid darf gesetzt sein." -#: utils/misc/guc.c:12288 +#: utils/misc/guc.c:12307 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "Der einzige erlaubte Wert ist »immediate«." @@ -28417,12 +28410,12 @@ msgstr "gepinntes Portal »%s« kann nicht gelöscht werden" msgid "cannot drop active portal \"%s\"" msgstr "aktives Portal »%s« kann nicht gelöscht werden" -#: utils/mmgr/portalmem.c:731 +#: utils/mmgr/portalmem.c:736 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "PREPARE kann nicht in einer Transaktion ausgeführt werden, die einen Cursor mit WITH HOLD erzeugt hat" -#: utils/mmgr/portalmem.c:1270 +#: utils/mmgr/portalmem.c:1275 #, c-format msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "in einer Cursor-Schleife, die nicht nur liest, können keine Transaktionsbefehle ausgeführt werden" diff --git a/src/backend/po/es.po b/src/backend/po/es.po index 628f08f2670e6..f935c37165ea7 100644 --- a/src/backend/po/es.po +++ b/src/backend/po/es.po @@ -61,8 +61,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL server 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-14 19:40+0000\n" -"PO-Revision-Date: 2021-05-17 14:27+0200\n" +"POT-Creation-Date: 2021-06-11 16:40+0000\n" +"PO-Revision-Date: 2021-06-21 12:29+0200\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -91,12 +91,12 @@ msgstr "no se pudo abrir archivo «%s» para lectura: %m" #: access/transam/xlog.c:11351 access/transam/xlog.c:11804 #: access/transam/xlog.c:11884 access/transam/xlog.c:11921 #: access/transam/xlog.c:11981 access/transam/xlogfuncs.c:703 -#: access/transam/xlogfuncs.c:722 commands/extension.c:3465 libpq/hba.c:536 +#: access/transam/xlogfuncs.c:722 commands/extension.c:3465 libpq/hba.c:534 #: replication/basebackup.c:2020 replication/logical/origin.c:729 -#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4876 +#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4880 #: replication/logical/snapbuild.c:1733 replication/logical/snapbuild.c:1775 -#: replication/logical/snapbuild.c:1802 replication/slot.c:1658 -#: replication/slot.c:1699 replication/walsender.c:544 +#: replication/logical/snapbuild.c:1802 replication/slot.c:1725 +#: replication/slot.c:1766 replication/walsender.c:544 #: storage/file/buffile.c:445 storage/file/copydir.c:195 #: utils/adt/genfile.c:202 utils/adt/misc.c:859 utils/cache/relmapper.c:741 #, c-format @@ -108,7 +108,7 @@ msgstr "no se pudo leer el archivo «%s»: %m" #: replication/basebackup.c:2024 replication/logical/origin.c:734 #: replication/logical/origin.c:773 replication/logical/snapbuild.c:1738 #: replication/logical/snapbuild.c:1780 replication/logical/snapbuild.c:1807 -#: replication/slot.c:1662 replication/slot.c:1703 replication/walsender.c:549 +#: replication/slot.c:1729 replication/slot.c:1770 replication/walsender.c:549 #: utils/cache/relmapper.c:745 #, c-format msgid "could not read file \"%s\": read %d of %zu" @@ -125,9 +125,9 @@ msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" #: access/transam/xlog.c:5667 access/transam/xlogfuncs.c:728 #: commands/copyfrom.c:1576 commands/copyto.c:328 libpq/be-fsstubs.c:462 #: libpq/be-fsstubs.c:533 replication/logical/origin.c:667 -#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:4934 +#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:4938 #: replication/logical/snapbuild.c:1642 replication/logical/snapbuild.c:1815 -#: replication/slot.c:1549 replication/slot.c:1710 replication/walsender.c:559 +#: replication/slot.c:1616 replication/slot.c:1777 replication/walsender.c:559 #: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 #: storage/file/fd.c:3534 storage/file/fd.c:3637 utils/cache/relmapper.c:753 #: utils/cache/relmapper.c:892 @@ -164,17 +164,17 @@ msgstr "" #: access/transam/xlog.c:4762 access/transam/xlogutils.c:803 #: postmaster/syslogger.c:1488 replication/basebackup.c:616 #: replication/basebackup.c:1610 replication/logical/origin.c:719 -#: replication/logical/reorderbuffer.c:3544 -#: replication/logical/reorderbuffer.c:4091 -#: replication/logical/reorderbuffer.c:4856 +#: replication/logical/reorderbuffer.c:3548 +#: replication/logical/reorderbuffer.c:4095 +#: replication/logical/reorderbuffer.c:4860 #: replication/logical/snapbuild.c:1597 replication/logical/snapbuild.c:1704 -#: replication/slot.c:1630 replication/walsender.c:517 +#: replication/slot.c:1697 replication/walsender.c:517 #: replication/walsender.c:2526 storage/file/copydir.c:161 #: storage/file/fd.c:713 storage/file/fd.c:3521 storage/file/fd.c:3608 #: storage/smgr/md.c:502 utils/cache/relmapper.c:724 #: utils/cache/relmapper.c:836 utils/error/elog.c:1938 #: utils/init/miscinit.c:1346 utils/init/miscinit.c:1480 -#: utils/init/miscinit.c:1557 utils/misc/guc.c:8585 utils/misc/guc.c:8617 +#: utils/init/miscinit.c:1557 utils/misc/guc.c:8604 utils/misc/guc.c:8636 #, c-format msgid "could not open file \"%s\": %m" msgstr "no se pudo abrir el archivo «%s»: %m" @@ -183,7 +183,7 @@ msgstr "no se pudo abrir el archivo «%s»: %m" #: access/transam/twophase.c:1653 access/transam/twophase.c:1662 #: access/transam/xlog.c:11095 access/transam/xlog.c:11133 #: access/transam/xlog.c:11546 access/transam/xlogfuncs.c:782 -#: postmaster/postmaster.c:5642 postmaster/syslogger.c:1499 +#: postmaster/postmaster.c:5659 postmaster/syslogger.c:1499 #: postmaster/syslogger.c:1512 utils/cache/relmapper.c:870 #, c-format msgid "could not write file \"%s\": %m" @@ -197,9 +197,9 @@ msgstr "no se pudo escribir el archivo «%s»: %m" #: access/transam/xlog.c:3412 access/transam/xlog.c:3581 #: access/transam/xlog.c:4735 access/transam/xlog.c:10586 #: access/transam/xlog.c:10627 replication/logical/snapbuild.c:1635 -#: replication/slot.c:1535 replication/slot.c:1640 storage/file/fd.c:730 +#: replication/slot.c:1602 replication/slot.c:1707 storage/file/fd.c:730 #: storage/file/fd.c:3629 storage/smgr/md.c:950 storage/smgr/md.c:991 -#: storage/sync/sync.c:417 utils/cache/relmapper.c:885 utils/misc/guc.c:8372 +#: storage/sync/sync.c:417 utils/cache/relmapper.c:885 utils/misc/guc.c:8391 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" @@ -209,10 +209,10 @@ msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" #: ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 #: ../port/path.c:685 access/transam/twophase.c:1341 access/transam/xlog.c:6633 #: lib/dshash.c:246 libpq/auth.c:1482 libpq/auth.c:1550 libpq/auth.c:2108 -#: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:347 -#: postmaster/bgworker.c:937 postmaster/postmaster.c:2514 -#: postmaster/postmaster.c:4157 postmaster/postmaster.c:4827 -#: postmaster/postmaster.c:5567 postmaster/postmaster.c:5931 +#: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 +#: postmaster/bgworker.c:948 postmaster/postmaster.c:2516 +#: postmaster/postmaster.c:4175 postmaster/postmaster.c:4845 +#: postmaster/postmaster.c:5584 postmaster/postmaster.c:5948 #: replication/libpqwalreceiver/libpqwalreceiver.c:282 #: replication/logical/logical.c:205 replication/walsender.c:591 #: storage/buffer/localbuf.c:442 storage/file/fd.c:882 storage/file/fd.c:1352 @@ -225,8 +225,8 @@ msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" #: utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 #: utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 #: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 -#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5017 -#: utils/misc/guc.c:5033 utils/misc/guc.c:5046 utils/misc/guc.c:8350 +#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5035 +#: utils/misc/guc.c:5051 utils/misc/guc.c:5064 utils/misc/guc.c:8369 #: utils/misc/tzparser.c:467 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:701 #: utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:234 #: utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 @@ -308,7 +308,7 @@ msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" #: ../common/file_utils.c:166 ../common/pgfnames.c:48 commands/tablespace.c:730 -#: commands/tablespace.c:740 postmaster/postmaster.c:1513 +#: commands/tablespace.c:740 postmaster/postmaster.c:1515 #: storage/file/fd.c:2724 storage/file/reinit.c:122 utils/adt/misc.c:262 #: utils/misc/tzparser.c:338 #, c-format @@ -322,7 +322,7 @@ msgstr "no se pudo leer el directorio «%s»: %m" #: ../common/file_utils.c:383 access/transam/xlogarchive.c:412 #: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1654 -#: replication/slot.c:668 replication/slot.c:1421 replication/slot.c:1563 +#: replication/slot.c:668 replication/slot.c:1488 replication/slot.c:1630 #: storage/file/fd.c:748 storage/file/fd.c:846 utils/time/snapmgr.c:1265 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" @@ -694,17 +694,17 @@ msgid "could not open parent table of index \"%s\"" msgstr "no se pudo abrir la tabla padre del índice %s" #: access/brin/brin_bloom.c:751 access/brin/brin_bloom.c:793 -#: access/brin/brin_minmax_multi.c:2984 access/brin/brin_minmax_multi.c:3129 +#: access/brin/brin_minmax_multi.c:2987 access/brin/brin_minmax_multi.c:3130 #: statistics/dependencies.c:651 statistics/dependencies.c:704 -#: statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 +#: statistics/mcv.c:1483 statistics/mcv.c:1514 statistics/mvdistinct.c:343 #: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 #: utils/adt/pseudotypes.c:77 utils/adt/pseudotypes.c:252 #, c-format msgid "cannot accept a value of type %s" msgstr "no se puede aceptar un valor de tipo %s" -#: access/brin/brin_minmax_multi.c:2142 access/brin/brin_minmax_multi.c:2149 -#: access/brin/brin_minmax_multi.c:2156 utils/adt/timestamp.c:941 +#: access/brin/brin_minmax_multi.c:2146 access/brin/brin_minmax_multi.c:2153 +#: access/brin/brin_minmax_multi.c:2160 utils/adt/timestamp.c:941 #: utils/adt/timestamp.c:1515 utils/adt/timestamp.c:1982 #: utils/adt/timestamp.c:3059 utils/adt/timestamp.c:3064 #: utils/adt/timestamp.c:3069 utils/adt/timestamp.c:3119 @@ -829,7 +829,7 @@ msgstr "el número de columnas (%d) excede el límite (%d)" msgid "number of index columns (%d) exceeds limit (%d)" msgstr "el número de columnas del índice (%d) excede el límite (%d)" -#: access/common/indextuple.c:199 access/spgist/spgutils.c:947 +#: access/common/indextuple.c:190 access/spgist/spgutils.c:947 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "fila de índice requiere %zu bytes, tamaño máximo es %zu" @@ -863,7 +863,7 @@ msgstr "RESET no debe incluir valores de parámetros" msgid "unrecognized parameter namespace \"%s\"" msgstr "espacio de nombre de parámetro «%s» no reconocido" -#: access/common/reloptions.c:1277 utils/misc/guc.c:12495 +#: access/common/reloptions.c:1277 utils/misc/guc.c:12514 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "las tablas declaradas WITH OIDS no está soportado" @@ -932,7 +932,7 @@ msgstr "Esta funcionalidad requiere que el servidor haya sido construido con sop msgid "You need to rebuild PostgreSQL using %s." msgstr "Necesita reconstruir PostgreSQL usando --with-icu." -#: access/common/tupdesc.c:822 parser/parse_clause.c:772 +#: access/common/tupdesc.c:825 parser/parse_clause.c:771 #: parser/parse_relation.c:1838 #, c-format msgid "column \"%s\" cannot be declared SETOF" @@ -1066,9 +1066,9 @@ msgstr "la familia de operadores «%s» del método de acceso %s contiene una es msgid "could not determine which collation to use for string hashing" msgstr "no se pudo determinar qué ordenamiento usar para el hashing de cadenas" -#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:712 -#: catalog/heap.c:718 commands/createas.c:206 commands/createas.c:509 -#: commands/indexcmds.c:1869 commands/tablecmds.c:16827 commands/view.c:86 +#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:713 +#: catalog/heap.c:719 commands/createas.c:206 commands/createas.c:509 +#: commands/indexcmds.c:1869 commands/tablecmds.c:16795 commands/view.c:86 #: regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 #: utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 #: utils/adt/like_support.c:1003 utils/adt/varchar.c:733 @@ -1123,33 +1123,33 @@ msgstr "la familia de operadores «%s» del método de acceso %s no tiene funci msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "faltan operadores entre tipos en la familia de operadores «%s» del método de acceso %s" -#: access/heap/heapam.c:2328 +#: access/heap/heapam.c:2260 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "no se pueden insertar tuplas en un ayudante paralelo" -#: access/heap/heapam.c:2799 +#: access/heap/heapam.c:2731 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "no se pueden eliminar tuplas durante una operación paralela" -#: access/heap/heapam.c:2845 +#: access/heap/heapam.c:2777 #, c-format msgid "attempted to delete invisible tuple" msgstr "se intentó eliminar una tupla invisible" -#: access/heap/heapam.c:3277 access/heap/heapam.c:6078 +#: access/heap/heapam.c:3209 access/heap/heapam.c:6010 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "no se pueden actualizar tuplas durante una operación paralela" -#: access/heap/heapam.c:3410 +#: access/heap/heapam.c:3342 #, c-format msgid "attempted to update invisible tuple" msgstr "se intentó actualizar una tupla invisible" -#: access/heap/heapam.c:4731 access/heap/heapam.c:4769 -#: access/heap/heapam.c:5025 access/heap/heapam_handler.c:454 +#: access/heap/heapam.c:4663 access/heap/heapam.c:4701 +#: access/heap/heapam.c:4957 access/heap/heapam_handler.c:454 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "no se pudo bloquear un candado en la fila de la relación «%s»" @@ -1174,9 +1174,9 @@ msgstr "no se pudo escribir al archivo «%s», se escribió %d de %d: %m" #: access/transam/xlog.c:3328 access/transam/xlog.c:3516 #: access/transam/xlog.c:4714 access/transam/xlog.c:11086 #: access/transam/xlog.c:11124 access/transam/xlog.c:11529 -#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4582 -#: postmaster/postmaster.c:5629 replication/logical/origin.c:587 -#: replication/slot.c:1482 storage/file/copydir.c:167 storage/smgr/md.c:218 +#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4600 +#: postmaster/postmaster.c:5646 replication/logical/origin.c:587 +#: replication/slot.c:1549 storage/file/copydir.c:167 storage/smgr/md.c:218 #: utils/time/snapmgr.c:1244 #, c-format msgid "could not create file \"%s\": %m" @@ -1190,14 +1190,14 @@ msgstr "no se pudo truncar el archivo «%s» a %u: %m" #: access/heap/rewriteheap.c:1166 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:502 #: access/transam/xlog.c:3400 access/transam/xlog.c:3572 -#: access/transam/xlog.c:4726 postmaster/postmaster.c:4592 -#: postmaster/postmaster.c:4602 replication/logical/origin.c:599 +#: access/transam/xlog.c:4726 postmaster/postmaster.c:4610 +#: postmaster/postmaster.c:4620 replication/logical/origin.c:599 #: replication/logical/origin.c:641 replication/logical/origin.c:660 -#: replication/logical/snapbuild.c:1611 replication/slot.c:1517 +#: replication/logical/snapbuild.c:1611 replication/slot.c:1584 #: storage/file/buffile.c:506 storage/file/copydir.c:207 #: utils/init/miscinit.c:1421 utils/init/miscinit.c:1432 -#: utils/init/miscinit.c:1440 utils/misc/guc.c:8333 utils/misc/guc.c:8364 -#: utils/misc/guc.c:10273 utils/misc/guc.c:10287 utils/time/snapmgr.c:1249 +#: utils/init/miscinit.c:1440 utils/misc/guc.c:8352 utils/misc/guc.c:8383 +#: utils/misc/guc.c:10292 utils/misc/guc.c:10306 utils/time/snapmgr.c:1249 #: utils/time/snapmgr.c:1256 #, c-format msgid "could not write to file \"%s\": %m" @@ -1205,10 +1205,10 @@ msgstr "no se pudo escribir a archivo «%s»: %m" #: access/heap/rewriteheap.c:1256 access/transam/twophase.c:1613 #: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 -#: postmaster/postmaster.c:1094 postmaster/syslogger.c:1465 -#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4358 +#: postmaster/postmaster.c:1096 postmaster/syslogger.c:1465 +#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4362 #: replication/logical/snapbuild.c:1556 replication/logical/snapbuild.c:1972 -#: replication/slot.c:1614 storage/file/fd.c:788 storage/file/fd.c:3169 +#: replication/slot.c:1681 storage/file/fd.c:788 storage/file/fd.c:3169 #: storage/file/fd.c:3231 storage/file/reinit.c:250 storage/ipc/dsm.c:315 #: storage/smgr/md.c:344 storage/smgr/md.c:394 storage/sync/sync.c:231 #: utils/time/snapmgr.c:1589 @@ -1216,102 +1216,102 @@ msgstr "no se pudo escribir a archivo «%s»: %m" msgid "could not remove file \"%s\": %m" msgstr "no se pudo eliminar el archivo «%s»: %m" -#: access/heap/vacuumlazy.c:746 +#: access/heap/vacuumlazy.c:745 #, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum agresivo automático para prevenir wraparound de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:748 +#: access/heap/vacuumlazy.c:747 #, c-format msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum automático para prevenir wraparound de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:753 +#: access/heap/vacuumlazy.c:752 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum agresivo automático de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:755 +#: access/heap/vacuumlazy.c:754 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "vacuum automático de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:762 +#: access/heap/vacuumlazy.c:761 #, c-format msgid "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n" msgstr "páginas: %u eliminadas, %u quedan, %u saltadas debido a «pins», %u congeladas saltadas\n" -#: access/heap/vacuumlazy.c:768 +#: access/heap/vacuumlazy.c:767 #, fuzzy, c-format #| msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable, oldest xmin: %u\n" msgid "tuples: %lld removed, %lld remain, %lld are dead but not yet removable, oldest xmin: %u\n" msgstr "tuplas: %.0f removidas, %.0f permanecen ,%.0f están muertas pero aún no se pueden quitar, el xmin más antiguo: %u\n" -#: access/heap/vacuumlazy.c:774 commands/analyze.c:794 +#: access/heap/vacuumlazy.c:773 commands/analyze.c:794 #, c-format msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" msgstr "uso de búfers: %lld aciertos, %lld fallos, %lld ensuciados\n" -#: access/heap/vacuumlazy.c:784 +#: access/heap/vacuumlazy.c:783 #, c-format msgid " %u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n" msgstr "" -#: access/heap/vacuumlazy.c:787 +#: access/heap/vacuumlazy.c:786 #, fuzzy #| msgid "index \"%s\" not found" msgid "index scan not needed:" msgstr "índice «%s» no encontrado" -#: access/heap/vacuumlazy.c:789 +#: access/heap/vacuumlazy.c:788 #, fuzzy #| msgid "index \"%s\" was reindexed" msgid "index scan needed:" msgstr "el índice «%s» fue reindexado" -#: access/heap/vacuumlazy.c:793 +#: access/heap/vacuumlazy.c:792 #, c-format msgid " %u pages from table (%.2f%% of total) have %lld dead item identifiers\n" msgstr "" -#: access/heap/vacuumlazy.c:796 +#: access/heap/vacuumlazy.c:795 msgid "index scan bypassed:" msgstr "" -#: access/heap/vacuumlazy.c:798 +#: access/heap/vacuumlazy.c:797 msgid "index scan bypassed by failsafe:" msgstr "" -#: access/heap/vacuumlazy.c:814 +#: access/heap/vacuumlazy.c:813 #, c-format msgid "index \"%s\": pages: %u in total, %u newly deleted, %u currently deleted, %u reusable\n" msgstr "" -#: access/heap/vacuumlazy.c:821 commands/analyze.c:798 +#: access/heap/vacuumlazy.c:820 commands/analyze.c:798 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "tasa lectura promedio: %.3f MB/s, tasa escritura promedio: %.3f MB/s\n" -#: access/heap/vacuumlazy.c:825 commands/analyze.c:802 +#: access/heap/vacuumlazy.c:824 commands/analyze.c:802 msgid "I/O Timings:" msgstr "" -#: access/heap/vacuumlazy.c:827 commands/analyze.c:804 +#: access/heap/vacuumlazy.c:826 commands/analyze.c:804 #, c-format msgid " read=%.3f" msgstr "" -#: access/heap/vacuumlazy.c:830 commands/analyze.c:807 +#: access/heap/vacuumlazy.c:829 commands/analyze.c:807 #, c-format msgid " write=%.3f" msgstr "" -#: access/heap/vacuumlazy.c:834 +#: access/heap/vacuumlazy.c:833 #, c-format msgid "system usage: %s\n" msgstr "uso de sistema: %s\n" -#: access/heap/vacuumlazy.c:836 +#: access/heap/vacuumlazy.c:835 #, fuzzy, c-format #| msgid "WAL usage: %ld records, %ld full page images, " msgid "WAL usage: %lld records, %lld full page images, %llu bytes" @@ -1327,106 +1327,106 @@ msgstr "haciendo vacuum agresivamente a «%s.%s»" msgid "vacuuming \"%s.%s\"" msgstr "haciendo vacuum a «%s.%s»" -#: access/heap/vacuumlazy.c:1617 +#: access/heap/vacuumlazy.c:1627 #, fuzzy, c-format #| msgid "\"%s\": removed %d row versions in %d pages" msgid "\"%s\": removed %lld dead item identifiers in %u pages" msgstr "«%s»: se eliminaron %d versiones de filas en %d páginas" -#: access/heap/vacuumlazy.c:1623 +#: access/heap/vacuumlazy.c:1633 #, fuzzy, c-format #| msgid "%.0f dead row versions cannot be removed yet, oldest xmin: %u\n" msgid "%lld dead row versions cannot be removed yet, oldest xmin: %u\n" msgstr "%.0f versiones muertas de filas no pueden ser eliminadas aún, xmin máx antiguo: %u\n" -#: access/heap/vacuumlazy.c:1625 +#: access/heap/vacuumlazy.c:1635 #, c-format msgid "%u page removed.\n" msgid_plural "%u pages removed.\n" msgstr[0] "" msgstr[1] "" -#: access/heap/vacuumlazy.c:1629 +#: access/heap/vacuumlazy.c:1639 #, c-format msgid "Skipped %u page due to buffer pins, " msgid_plural "Skipped %u pages due to buffer pins, " msgstr[0] "Omitiendo %u página debido a «pins» de página, " msgstr[1] "Omitiendo %u páginas debido a «pins» de página, " -#: access/heap/vacuumlazy.c:1633 +#: access/heap/vacuumlazy.c:1643 #, c-format msgid "%u frozen page.\n" msgid_plural "%u frozen pages.\n" msgstr[0] "%u página marcadas «frozen».\n" msgstr[1] "%u páginas marcadas «frozen».\n" -#: access/heap/vacuumlazy.c:1637 commands/indexcmds.c:3986 +#: access/heap/vacuumlazy.c:1647 commands/indexcmds.c:3986 #: commands/indexcmds.c:4005 #, c-format msgid "%s." msgstr "%s." -#: access/heap/vacuumlazy.c:1640 +#: access/heap/vacuumlazy.c:1650 #, fuzzy, c-format #| msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" msgid "\"%s\": found %lld removable, %lld nonremovable row versions in %u out of %u pages" msgstr "«%s»: se encontraron %.0f versiones de filas eliminables y %.0f no eliminables en %u de %u páginas" -#: access/heap/vacuumlazy.c:2145 +#: access/heap/vacuumlazy.c:2155 #, c-format msgid "\"%s\": index scan bypassed: %u pages from table (%.2f%% of total) have %lld dead item identifiers" msgstr "" -#: access/heap/vacuumlazy.c:2356 +#: access/heap/vacuumlazy.c:2366 #, fuzzy, c-format #| msgid "\"%s\": removed %d row versions in %d pages" msgid "\"%s\": removed %d dead item identifiers in %u pages" msgstr "«%s»: se eliminaron %d versiones de filas en %d páginas" -#: access/heap/vacuumlazy.c:2603 +#: access/heap/vacuumlazy.c:2598 #, fuzzy, c-format #| msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" -msgid "abandoned index vacuuming of table \"%s.%s.%s\" as a failsafe after %d index scans" +msgid "bypassing nonessential maintenance of table \"%s.%s.%s\" as a failsafe after %d index scans" msgstr "vacuum automático de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -#: access/heap/vacuumlazy.c:2608 +#: access/heap/vacuumlazy.c:2603 #, fuzzy, c-format #| msgid "oldest xmin is far in the past" msgid "table's relfrozenxid or relminmxid is too far in the past" msgstr "xmin más antiguo es demasiado antiguo" -#: access/heap/vacuumlazy.c:2609 +#: access/heap/vacuumlazy.c:2604 #, c-format msgid "" "Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" "You might also need to consider other ways for VACUUM to keep up with the allocation of transaction IDs." msgstr "" -#: access/heap/vacuumlazy.c:2749 +#: access/heap/vacuumlazy.c:2744 #, c-format msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index cleanup (planned: %d)" msgstr[0] "se lanzó %d proceso asistente para «cleanup» de índices (planeados: %d)" msgstr[1] "se lanzaron %d procesos asistentes para «cleanup» de índices (planeados: %d)" -#: access/heap/vacuumlazy.c:2755 +#: access/heap/vacuumlazy.c:2750 #, c-format msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" msgstr[0] "se lanzó %d proceso asistente para «vacuum» de índices (planeados: %d)" msgstr[1] "se lanzaron %d procesos asistentes para «vacuum» índices (planeados: %d)" -#: access/heap/vacuumlazy.c:3044 +#: access/heap/vacuumlazy.c:3039 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "se recorrió el índice «%s» para eliminar %d versiones de filas" -#: access/heap/vacuumlazy.c:3101 +#: access/heap/vacuumlazy.c:3096 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "el índice «%s» ahora contiene %.0f versiones de filas en %u páginas" -#: access/heap/vacuumlazy.c:3105 +#: access/heap/vacuumlazy.c:3100 #, fuzzy, c-format #| msgid "" #| "%.0f index row versions were removed.\n" @@ -1442,69 +1442,69 @@ msgstr "" "%u páginas de índice han sido eliminadas, %u son reusables.\n" "%s." -#: access/heap/vacuumlazy.c:3217 +#: access/heap/vacuumlazy.c:3212 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "«%s»: suspendiendo el truncado debido a una petición de candado en conflicto" -#: access/heap/vacuumlazy.c:3283 +#: access/heap/vacuumlazy.c:3278 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "«%s»: truncadas %u a %u páginas" -#: access/heap/vacuumlazy.c:3348 +#: access/heap/vacuumlazy.c:3343 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "«%s»: suspendiendo el truncado debido a una petición de candado en conflicto" -#: access/heap/vacuumlazy.c:3494 +#: access/heap/vacuumlazy.c:3489 #, c-format msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" msgstr "desactivando el comportamiento paralelo de vacuum en «%s» --- no se puede hacer vacuum de tablas temporales en paralelo" -#: access/heap/vacuumlazy.c:4249 +#: access/heap/vacuumlazy.c:4244 #, fuzzy, c-format #| msgid "while scanning block %u of relation \"%s.%s\"" msgid "while scanning block %u and offset %u of relation \"%s.%s\"" msgstr "recorriendo el bloque %u de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:4252 +#: access/heap/vacuumlazy.c:4247 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "recorriendo el bloque %u de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:4256 +#: access/heap/vacuumlazy.c:4251 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "recorriendo la relación «%s.%s»" -#: access/heap/vacuumlazy.c:4264 +#: access/heap/vacuumlazy.c:4259 #, fuzzy, c-format #| msgid "while vacuuming block %u of relation \"%s.%s\"" msgid "while vacuuming block %u and offset %u of relation \"%s.%s\"" msgstr "haciendo «vacuum» al bloque %u de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:4267 +#: access/heap/vacuumlazy.c:4262 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "haciendo «vacuum» al bloque %u de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:4271 +#: access/heap/vacuumlazy.c:4266 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "mientras se hacía «vacuum» a la relación «%s.%s»" -#: access/heap/vacuumlazy.c:4276 +#: access/heap/vacuumlazy.c:4271 #, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" msgstr "mientras se hacía «vacuum» al índice «%s» de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:4281 +#: access/heap/vacuumlazy.c:4276 #, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" msgstr "mientras se limpiaba el índice «%s» de la relación «%s.%s»" -#: access/heap/vacuumlazy.c:4287 +#: access/heap/vacuumlazy.c:4282 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "error mientras se truncaba la relación «%s.%s» a %u bloques" @@ -1527,7 +1527,7 @@ msgstr "no se pueden reindexar catálogos de sistema concurrentemente" #: access/index/indexam.c:142 catalog/objectaddress.c:1355 #: commands/indexcmds.c:2670 commands/tablecmds.c:267 commands/tablecmds.c:291 -#: commands/tablecmds.c:16525 commands/tablecmds.c:18227 +#: commands/tablecmds.c:16493 commands/tablecmds.c:18195 #, c-format msgid "\"%s\" is not an index" msgstr "«%s» no es un índice" @@ -1625,8 +1625,8 @@ msgid "\"%s\" is an index" msgstr "«%s» es un índice" #: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 -#: access/table/table.c:150 catalog/aclchk.c:1799 commands/tablecmds.c:13226 -#: commands/tablecmds.c:16534 +#: access/table/table.c:150 catalog/aclchk.c:1799 commands/tablecmds.c:13198 +#: commands/tablecmds.c:16502 #, c-format msgid "\"%s\" is a composite type" msgstr "«%s» es un tipo compuesto" @@ -1641,7 +1641,7 @@ msgstr "el tid (%u, %u) no es válido para la relación «%s»" msgid "%s cannot be empty." msgstr "%s no puede ser vacío." -#: access/table/tableamapi.c:122 utils/misc/guc.c:12419 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12438 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s es demasiado largo (máximo %d caracteres)." @@ -3131,23 +3131,23 @@ msgstr "no se pudo leer del archivo de segmento %s, posición %u: %m" msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "no se pudo leer del archivo de segmento %s, posición %u: leídos %d de %zu" -#: access/transam/xlog.c:12758 +#: access/transam/xlog.c:12766 #, fuzzy, c-format #| msgid "WAL receiver process shutdown requested" msgid "WAL receiver process shutdown requested" msgstr "se recibió una petición de apagado del proceso receptor de wal" -#: access/transam/xlog.c:12845 +#: access/transam/xlog.c:12861 #, c-format msgid "received promote request" msgstr "se recibió petición de promoción" -#: access/transam/xlog.c:12858 +#: access/transam/xlog.c:12874 #, c-format msgid "promote trigger file found: %s" msgstr "se encontró el archivo disparador de promoción: %s" -#: access/transam/xlog.c:12866 +#: access/transam/xlog.c:12882 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "no se pudo hacer stat al archivo disparador de promoción «%s»: %m" @@ -3209,8 +3209,8 @@ msgstr "¿Quiso usar pg_stop_backup('f')?" #: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 #: commands/event_trigger.c:1869 commands/extension.c:1944 #: commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:712 -#: executor/execExpr.c:2507 executor/execSRF.c:738 executor/functions.c:1058 -#: foreign/foreign.c:520 libpq/hba.c:2712 replication/logical/launcher.c:937 +#: executor/execExpr.c:2507 executor/execSRF.c:738 executor/functions.c:1057 +#: foreign/foreign.c:520 libpq/hba.c:2718 replication/logical/launcher.c:937 #: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 #: replication/slotfuncs.c:255 replication/walsender.c:3291 #: storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 @@ -3219,8 +3219,8 @@ msgstr "¿Quiso usar pg_stop_backup('f')?" #: utils/adt/jsonfuncs.c:2342 utils/adt/jsonfuncs.c:3803 #: utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:218 utils/adt/pgstatfuncs.c:477 #: utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 -#: utils/adt/varlena.c:4832 utils/fmgr/funcapi.c:74 utils/misc/guc.c:9974 -#: utils/mmgr/portalmem.c:1136 +#: utils/adt/varlena.c:4832 utils/fmgr/funcapi.c:74 utils/misc/guc.c:9993 +#: utils/mmgr/portalmem.c:1141 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "se llamó una función que retorna un conjunto en un contexto que no puede aceptarlo" @@ -3228,14 +3228,14 @@ msgstr "se llamó una función que retorna un conjunto en un contexto que no pue #: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 #: commands/event_trigger.c:1873 commands/extension.c:1948 #: commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:716 -#: foreign/foreign.c:525 libpq/hba.c:2716 replication/logical/launcher.c:941 +#: foreign/foreign.c:525 libpq/hba.c:2722 replication/logical/launcher.c:941 #: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 #: replication/slotfuncs.c:259 replication/walsender.c:3295 #: storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:511 #: utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:222 #: utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 -#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4836 utils/misc/guc.c:9978 -#: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 +#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4836 utils/misc/guc.c:9997 +#: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1145 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "se requiere un nodo «materialize», pero no está permitido en este contexto" @@ -3449,18 +3449,18 @@ msgstr "imagen comprimida no válida en %X/%X, bloque %d" msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X require un valor potencia de dos entre 1 MB y 1 GB" -#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:845 tcop/postgres.c:3858 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3858 #, c-format msgid "--%s requires a value" msgstr "--%s requiere un valor" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:850 tcop/postgres.c:3863 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3863 #, c-format msgid "-c %s requires a value" msgstr "-c %s requiere un valor" -#: bootstrap/bootstrap.c:303 postmaster/postmaster.c:862 -#: postmaster/postmaster.c:875 +#: bootstrap/bootstrap.c:303 postmaster/postmaster.c:864 +#: postmaster/postmaster.c:877 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Pruebe «%s --help» para mayor información.\n" @@ -3618,10 +3618,10 @@ msgstr "no existe el objeto grande %u" #: commands/dbcommands.c:1529 commands/extension.c:1735 #: commands/extension.c:1745 commands/extension.c:1755 #: commands/extension.c:3055 commands/foreigncmds.c:539 -#: commands/foreigncmds.c:548 commands/functioncmds.c:578 -#: commands/functioncmds.c:744 commands/functioncmds.c:753 -#: commands/functioncmds.c:762 commands/functioncmds.c:771 -#: commands/functioncmds.c:2068 commands/functioncmds.c:2076 +#: commands/foreigncmds.c:548 commands/functioncmds.c:604 +#: commands/functioncmds.c:770 commands/functioncmds.c:779 +#: commands/functioncmds.c:788 commands/functioncmds.c:797 +#: commands/functioncmds.c:2094 commands/functioncmds.c:2102 #: commands/publicationcmds.c:90 commands/publicationcmds.c:133 #: commands/sequence.c:1266 commands/sequence.c:1276 commands/sequence.c:1286 #: commands/sequence.c:1296 commands/sequence.c:1306 commands/sequence.c:1316 @@ -3630,7 +3630,7 @@ msgstr "no existe el objeto grande %u" #: commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 #: commands/subscriptioncmds.c:168 commands/subscriptioncmds.c:179 #: commands/subscriptioncmds.c:193 commands/subscriptioncmds.c:203 -#: commands/subscriptioncmds.c:213 commands/tablecmds.c:7514 +#: commands/subscriptioncmds.c:213 commands/tablecmds.c:7500 #: commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 #: commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 #: commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 @@ -3642,9 +3642,9 @@ msgstr "no existe el objeto grande %u" #: commands/user.c:614 commands/user.c:622 commands/user.c:630 #: commands/user.c:638 commands/user.c:647 commands/user.c:655 #: commands/user.c:663 parser/parse_utilcmd.c:407 -#: replication/pgoutput/pgoutput.c:192 replication/pgoutput/pgoutput.c:213 -#: replication/pgoutput/pgoutput.c:227 replication/pgoutput/pgoutput.c:237 -#: replication/pgoutput/pgoutput.c:247 replication/walsender.c:882 +#: replication/pgoutput/pgoutput.c:189 replication/pgoutput/pgoutput.c:210 +#: replication/pgoutput/pgoutput.c:224 replication/pgoutput/pgoutput.c:234 +#: replication/pgoutput/pgoutput.c:244 replication/walsender.c:882 #: replication/walsender.c:893 replication/walsender.c:903 #, c-format msgid "conflicting or redundant options" @@ -3662,16 +3662,16 @@ msgstr "No puede utilizar la cláusula IN SCHEMA cuando se utiliza GRANT / REVOK #: catalog/aclchk.c:1544 catalog/catalog.c:553 catalog/objectaddress.c:1522 #: commands/analyze.c:390 commands/copy.c:741 commands/sequence.c:1701 -#: commands/tablecmds.c:6990 commands/tablecmds.c:7133 -#: commands/tablecmds.c:7183 commands/tablecmds.c:7257 -#: commands/tablecmds.c:7327 commands/tablecmds.c:7439 -#: commands/tablecmds.c:7533 commands/tablecmds.c:7592 -#: commands/tablecmds.c:7681 commands/tablecmds.c:7710 -#: commands/tablecmds.c:7865 commands/tablecmds.c:7947 -#: commands/tablecmds.c:8102 commands/tablecmds.c:8219 -#: commands/tablecmds.c:11568 commands/tablecmds.c:11750 -#: commands/tablecmds.c:11910 commands/tablecmds.c:13069 -#: commands/tablecmds.c:15631 commands/trigger.c:924 parser/analyze.c:2413 +#: commands/tablecmds.c:6976 commands/tablecmds.c:7119 +#: commands/tablecmds.c:7169 commands/tablecmds.c:7243 +#: commands/tablecmds.c:7313 commands/tablecmds.c:7425 +#: commands/tablecmds.c:7519 commands/tablecmds.c:7578 +#: commands/tablecmds.c:7667 commands/tablecmds.c:7696 +#: commands/tablecmds.c:7851 commands/tablecmds.c:7933 +#: commands/tablecmds.c:8089 commands/tablecmds.c:8207 +#: commands/tablecmds.c:11556 commands/tablecmds.c:11738 +#: commands/tablecmds.c:11898 commands/tablecmds.c:13041 +#: commands/tablecmds.c:15602 commands/trigger.c:924 parser/analyze.c:2415 #: parser/parse_relation.c:714 parser/parse_target.c:1064 #: parser/parse_type.c:144 parser/parse_utilcmd.c:3453 #: parser/parse_utilcmd.c:3488 parser/parse_utilcmd.c:3530 utils/adt/acl.c:2845 @@ -3681,7 +3681,7 @@ msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "no existe la columna «%s» en la relación «%s»" #: catalog/aclchk.c:1807 catalog/objectaddress.c:1362 commands/sequence.c:1139 -#: commands/tablecmds.c:249 commands/tablecmds.c:16498 utils/adt/acl.c:2053 +#: commands/tablecmds.c:249 commands/tablecmds.c:16466 utils/adt/acl.c:2053 #: utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 #: utils/adt/acl.c:2175 utils/adt/acl.c:2205 #, c-format @@ -4271,13 +4271,13 @@ msgstr "no se puede eliminar %s porque otros objetos dependen de él" #: catalog/dependency.c:1187 catalog/dependency.c:1188 #: catalog/dependency.c:1194 catalog/dependency.c:1195 #: catalog/dependency.c:1206 catalog/dependency.c:1207 -#: commands/tablecmds.c:1306 commands/tablecmds.c:13687 +#: commands/tablecmds.c:1298 commands/tablecmds.c:13659 #: commands/tablespace.c:481 commands/user.c:1095 commands/view.c:495 #: libpq/auth.c:338 replication/syncrep.c:1043 storage/lmgr/deadlock.c:1152 #: storage/lmgr/proc.c:1433 utils/adt/acl.c:5250 utils/adt/jsonfuncs.c:618 -#: utils/adt/jsonfuncs.c:624 utils/misc/guc.c:7095 utils/misc/guc.c:7131 -#: utils/misc/guc.c:7201 utils/misc/guc.c:11381 utils/misc/guc.c:11415 -#: utils/misc/guc.c:11449 utils/misc/guc.c:11492 utils/misc/guc.c:11534 +#: utils/adt/jsonfuncs.c:624 utils/misc/guc.c:7114 utils/misc/guc.c:7150 +#: utils/misc/guc.c:7220 utils/misc/guc.c:11400 utils/misc/guc.c:11434 +#: utils/misc/guc.c:11468 utils/misc/guc.c:11511 utils/misc/guc.c:11553 #, c-format msgid "%s" msgstr "%s" @@ -4305,66 +4305,66 @@ msgstr[1] "eliminando además %d objetos más" msgid "constant of the type %s cannot be used here" msgstr "no se puede usar una constante de tipo %s aquí" -#: catalog/heap.c:331 +#: catalog/heap.c:332 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "se ha denegado el permiso para crear «%s.%s»" -#: catalog/heap.c:333 +#: catalog/heap.c:334 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Las modificaciones al catálogo del sistema están actualmente deshabilitadas." -#: catalog/heap.c:510 commands/tablecmds.c:2343 commands/tablecmds.c:2980 -#: commands/tablecmds.c:6572 +#: catalog/heap.c:511 commands/tablecmds.c:2335 commands/tablecmds.c:2972 +#: commands/tablecmds.c:6567 #, c-format msgid "tables can have at most %d columns" msgstr "las tablas pueden tener a lo más %d columnas" -#: catalog/heap.c:528 commands/tablecmds.c:6880 +#: catalog/heap.c:529 commands/tablecmds.c:6866 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "el nombre de columna «%s» colisiona con nombre de una columna de sistema" -#: catalog/heap.c:544 +#: catalog/heap.c:545 #, c-format msgid "column name \"%s\" specified more than once" msgstr "el nombre de columna «%s» fue especificado más de una vez" #. translator: first %s is an integer not a name -#: catalog/heap.c:619 +#: catalog/heap.c:620 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "la columna %s de la llave de partición tiene pseudotipo %s" -#: catalog/heap.c:624 +#: catalog/heap.c:625 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "la columna «%s» tiene pseudotipo %s" -#: catalog/heap.c:655 +#: catalog/heap.c:656 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "un tipo compuesto %s no puede ser hecho miembro de sí mismo" #. translator: first %s is an integer not a name -#: catalog/heap.c:710 +#: catalog/heap.c:711 #, c-format msgid "no collation was derived for partition key column %s with collatable type %s" msgstr "no se derivó ningún ordenamiento (collate) para la columna %s de llave de partición con tipo ordenable %s" -#: catalog/heap.c:716 commands/createas.c:203 commands/createas.c:506 +#: catalog/heap.c:717 commands/createas.c:203 commands/createas.c:506 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "no se derivó ningún ordenamiento (collate) para la columna «%s» con tipo ordenable %s" -#: catalog/heap.c:1198 catalog/index.c:868 commands/createas.c:411 -#: commands/tablecmds.c:3861 +#: catalog/heap.c:1199 catalog/index.c:870 commands/createas.c:411 +#: commands/tablecmds.c:3853 #, c-format msgid "relation \"%s\" already exists" msgstr "la relación «%s» ya existe" -#: catalog/heap.c:1214 catalog/pg_type.c:435 catalog/pg_type.c:773 +#: catalog/heap.c:1215 catalog/pg_type.c:435 catalog/pg_type.c:773 #: catalog/pg_type.c:920 commands/typecmds.c:249 commands/typecmds.c:261 #: commands/typecmds.c:757 commands/typecmds.c:1172 commands/typecmds.c:1398 #: commands/typecmds.c:1590 commands/typecmds.c:2563 @@ -4372,105 +4372,116 @@ msgstr "la relación «%s» ya existe" msgid "type \"%s\" already exists" msgstr "ya existe un tipo «%s»" -#: catalog/heap.c:1215 +#: catalog/heap.c:1216 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "Una relación tiene un tipo asociado del mismo nombre, de modo que debe usar un nombre que no entre en conflicto con un tipo existente." -#: catalog/heap.c:1244 +#: catalog/heap.c:1245 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "el valor de OID de heap de pg_class no se definió en modo de actualización binaria" -#: catalog/heap.c:2451 +#: catalog/heap.c:2450 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "no se puede agregar una restricción NO INHERIT a la tabla particionada «%s»" -#: catalog/heap.c:2723 +#: catalog/heap.c:2722 #, c-format msgid "check constraint \"%s\" already exists" msgstr "la restricción «check» «%s» ya existe" -#: catalog/heap.c:2893 catalog/index.c:882 catalog/pg_constraint.c:670 -#: commands/tablecmds.c:8593 +#: catalog/heap.c:2892 catalog/index.c:884 catalog/pg_constraint.c:670 +#: commands/tablecmds.c:8581 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "la restricción «%s» para la relación «%s» ya existe" -#: catalog/heap.c:2900 +#: catalog/heap.c:2899 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción no heredada de la relación «%s»" -#: catalog/heap.c:2911 +#: catalog/heap.c:2910 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción heredada de la relación «%s»" -#: catalog/heap.c:2921 +#: catalog/heap.c:2920 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción NOT VALID de la relación «%s»" -#: catalog/heap.c:2926 +#: catalog/heap.c:2925 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "mezclando la restricción «%s» con la definición heredada" -#: catalog/heap.c:3028 +#: catalog/heap.c:3030 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "no se puede usar la columna generada «%s» en una expresión de generación de columna" -#: catalog/heap.c:3030 +#: catalog/heap.c:3032 #, c-format msgid "A generated column cannot reference another generated column." msgstr "Una columna generada no puede hacer referencia a otra columna generada." -#: catalog/heap.c:3082 +#: catalog/heap.c:3038 +#, fuzzy, c-format +#| msgid "cannot use subquery in column generation expression" +msgid "cannot use whole-row variable in column generation expression" +msgstr "no se puede usar una subconsulta en una expresión de generación de columna" + +#: catalog/heap.c:3039 +#, c-format +msgid "This would cause the generated column to depend on its own value." +msgstr "" + +#: catalog/heap.c:3092 #, c-format msgid "generation expression is not immutable" msgstr "la expresión de generación no es inmutable" -#: catalog/heap.c:3110 rewrite/rewriteHandler.c:1245 +#: catalog/heap.c:3120 rewrite/rewriteHandler.c:1245 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "la columna «%s» es de tipo %s pero la expresión default es de tipo %s" -#: catalog/heap.c:3115 commands/prepare.c:367 parser/analyze.c:2637 +#: catalog/heap.c:3125 commands/prepare.c:367 parser/analyze.c:2639 #: parser/parse_target.c:595 parser/parse_target.c:883 #: parser/parse_target.c:893 rewrite/rewriteHandler.c:1250 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Necesitará reescribir la expresión o aplicarle una conversión de tipo." -#: catalog/heap.c:3162 +#: catalog/heap.c:3172 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "sólo la tabla «%s» puede ser referenciada en una restricción «check»" -#: catalog/heap.c:3460 +#: catalog/heap.c:3470 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "combinación de ON COMMIT y llaves foráneas no soportada" -#: catalog/heap.c:3461 +#: catalog/heap.c:3471 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "La tabla «%s» se refiere a «%s», pero no tienen la misma expresión para ON COMMIT." -#: catalog/heap.c:3466 +#: catalog/heap.c:3476 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "no se puede truncar una tabla referida en una llave foránea" -#: catalog/heap.c:3467 +#: catalog/heap.c:3477 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "La tabla «%s» hace referencia a «%s»." -#: catalog/heap.c:3469 +#: catalog/heap.c:3479 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Trunque la tabla «%s» al mismo tiempo, o utilice TRUNCATE ... CASCADE." @@ -4490,237 +4501,237 @@ msgstr "las llaves primarias no pueden ser expresiones" msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "columna de llave primaria «%s» no está marcada NOT NULL" -#: catalog/index.c:767 catalog/index.c:1903 +#: catalog/index.c:769 catalog/index.c:1905 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "los usuarios no pueden crear índices en tablas del sistema" -#: catalog/index.c:807 +#: catalog/index.c:809 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "los ordenamientos no determinísticos no están soportados para la clase de operadores «%s»" -#: catalog/index.c:822 +#: catalog/index.c:824 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "no se pueden crear índices de forma concurrente en tablas del sistema" -#: catalog/index.c:831 catalog/index.c:1282 +#: catalog/index.c:833 catalog/index.c:1284 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "no se pueden crear índices para restricciones de exclusión de forma concurrente" -#: catalog/index.c:840 +#: catalog/index.c:842 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "no se pueden crear índices compartidos después de initdb" -#: catalog/index.c:860 commands/createas.c:417 commands/sequence.c:154 +#: catalog/index.c:862 commands/createas.c:417 commands/sequence.c:154 #: parser/parse_utilcmd.c:211 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "la relación «%s» ya existe, omitiendo" -#: catalog/index.c:910 +#: catalog/index.c:912 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "el valor de OID de índice de pg_class no se definió en modo de actualización binaria" -#: catalog/index.c:2189 +#: catalog/index.c:2191 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY debe ser la primera acción en una transacción" -#: catalog/index.c:3574 +#: catalog/index.c:3576 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "no se puede hacer reindex de tablas temporales de otras sesiones" -#: catalog/index.c:3585 commands/indexcmds.c:3426 +#: catalog/index.c:3587 commands/indexcmds.c:3426 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "no es posible reindexar un índice no válido en tabla TOAST" -#: catalog/index.c:3601 commands/indexcmds.c:3306 commands/indexcmds.c:3450 -#: commands/tablecmds.c:3300 +#: catalog/index.c:3603 commands/indexcmds.c:3306 commands/indexcmds.c:3450 +#: commands/tablecmds.c:3292 #, c-format msgid "cannot move system relation \"%s\"" msgstr "no se puede mover la relación de sistema «%s»" -#: catalog/index.c:3745 +#: catalog/index.c:3747 #, c-format msgid "index \"%s\" was reindexed" msgstr "el índice «%s» fue reindexado" -#: catalog/index.c:3876 +#: catalog/index.c:3878 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "no se puede reindexar el índice no válido «%s.%s» en tabla TOAST, omitiendo" -#: catalog/namespace.c:257 catalog/namespace.c:461 catalog/namespace.c:553 -#: commands/trigger.c:5132 +#: catalog/namespace.c:258 catalog/namespace.c:462 catalog/namespace.c:554 +#: commands/trigger.c:5134 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "no están implementadas las referencias entre bases de datos: «%s.%s.%s»" -#: catalog/namespace.c:314 +#: catalog/namespace.c:315 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "las tablas temporales no pueden especificar un nombre de esquema" -#: catalog/namespace.c:395 +#: catalog/namespace.c:396 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "no se pudo bloquear un candado en la relación «%s.%s»" -#: catalog/namespace.c:400 commands/lockcmds.c:143 commands/lockcmds.c:228 +#: catalog/namespace.c:401 commands/lockcmds.c:143 commands/lockcmds.c:228 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "no se pudo bloquear un candado en la relación «%s»" -#: catalog/namespace.c:428 parser/parse_relation.c:1362 +#: catalog/namespace.c:429 parser/parse_relation.c:1362 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "no existe la relación «%s.%s»" -#: catalog/namespace.c:433 parser/parse_relation.c:1375 +#: catalog/namespace.c:434 parser/parse_relation.c:1375 #: parser/parse_relation.c:1383 #, c-format msgid "relation \"%s\" does not exist" msgstr "no existe la relación «%s»" -#: catalog/namespace.c:499 catalog/namespace.c:3029 commands/extension.c:1519 +#: catalog/namespace.c:500 catalog/namespace.c:3075 commands/extension.c:1519 #: commands/extension.c:1525 #, c-format msgid "no schema has been selected to create in" msgstr "no se ha seleccionado ningún esquema dentro del cual crear" -#: catalog/namespace.c:651 catalog/namespace.c:664 +#: catalog/namespace.c:652 catalog/namespace.c:665 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "no se pueden crear relaciones en esquemas temporales de otras sesiones" -#: catalog/namespace.c:655 +#: catalog/namespace.c:656 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "no se pueden crear tablas temporales en esquemas no temporales" -#: catalog/namespace.c:670 +#: catalog/namespace.c:671 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "sólo relaciones temporales pueden ser creadas en los esquemas temporales" -#: catalog/namespace.c:2221 +#: catalog/namespace.c:2267 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "no existe el objeto de estadísticas «%s»" -#: catalog/namespace.c:2344 +#: catalog/namespace.c:2390 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "no existe el analizador de búsqueda en texto «%s»" -#: catalog/namespace.c:2470 +#: catalog/namespace.c:2516 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "no existe el diccionario de búsqueda en texto «%s»" -#: catalog/namespace.c:2597 +#: catalog/namespace.c:2643 #, c-format msgid "text search template \"%s\" does not exist" msgstr "no existe la plantilla de búsqueda en texto «%s»" -#: catalog/namespace.c:2723 commands/tsearchcmds.c:1121 +#: catalog/namespace.c:2769 commands/tsearchcmds.c:1121 #: utils/cache/ts_cache.c:613 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "no existe la configuración de búsqueda en texto «%s»" -#: catalog/namespace.c:2836 parser/parse_expr.c:810 parser/parse_target.c:1256 +#: catalog/namespace.c:2882 parser/parse_expr.c:810 parser/parse_target.c:1256 #, c-format msgid "cross-database references are not implemented: %s" msgstr "no están implementadas las referencias entre bases de datos: %s" -#: catalog/namespace.c:2842 gram.y:15124 gram.y:17082 parser/parse_expr.c:817 +#: catalog/namespace.c:2888 gram.y:15102 gram.y:17061 parser/parse_expr.c:817 #: parser/parse_target.c:1263 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "el nombre no es válido (demasiados puntos): %s" -#: catalog/namespace.c:2972 +#: catalog/namespace.c:3018 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "no se puede mover objetos hacia o desde esquemas temporales" -#: catalog/namespace.c:2978 +#: catalog/namespace.c:3024 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "no se puede mover objetos hacia o desde el esquema TOAST" -#: catalog/namespace.c:3051 commands/schemacmds.c:233 commands/schemacmds.c:313 -#: commands/tablecmds.c:1251 +#: catalog/namespace.c:3097 commands/schemacmds.c:233 commands/schemacmds.c:313 +#: commands/tablecmds.c:1243 #, c-format msgid "schema \"%s\" does not exist" msgstr "no existe el esquema «%s»" -#: catalog/namespace.c:3082 +#: catalog/namespace.c:3128 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "el nombre de relación no es válido (demasiados puntos): %s" -#: catalog/namespace.c:3645 +#: catalog/namespace.c:3691 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "no existe el ordenamiento (collation) «%s» para la codificación «%s»" -#: catalog/namespace.c:3700 +#: catalog/namespace.c:3746 #, c-format msgid "conversion \"%s\" does not exist" msgstr "no existe la conversión «%s»" -#: catalog/namespace.c:3964 +#: catalog/namespace.c:4010 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "se ha denegado el permiso para crear tablas temporales en la base de datos «%s»" -#: catalog/namespace.c:3980 +#: catalog/namespace.c:4026 #, c-format msgid "cannot create temporary tables during recovery" msgstr "no se pueden crear tablas temporales durante la recuperación" -#: catalog/namespace.c:3986 +#: catalog/namespace.c:4032 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "no se pueden crear tablas temporales durante una operación paralela" -#: catalog/namespace.c:4285 commands/tablespace.c:1217 commands/variable.c:64 -#: utils/misc/guc.c:11566 utils/misc/guc.c:11644 +#: catalog/namespace.c:4331 commands/tablespace.c:1217 commands/variable.c:64 +#: utils/misc/guc.c:11585 utils/misc/guc.c:11663 #, c-format msgid "List syntax is invalid." msgstr "La sintaxis de lista no es válida." #: catalog/objectaddress.c:1370 catalog/pg_publication.c:57 #: commands/policy.c:95 commands/policy.c:375 commands/policy.c:465 -#: commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2153 -#: commands/tablecmds.c:6021 commands/tablecmds.c:11685 +#: commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2145 +#: commands/tablecmds.c:6016 commands/tablecmds.c:11673 #, c-format msgid "\"%s\" is not a table" msgstr "«%s» no es una tabla" #: catalog/objectaddress.c:1377 commands/tablecmds.c:255 -#: commands/tablecmds.c:6051 commands/tablecmds.c:16503 commands/view.c:119 +#: commands/tablecmds.c:6046 commands/tablecmds.c:16471 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "«%s» no es una vista" #: catalog/objectaddress.c:1384 commands/matview.c:175 commands/tablecmds.c:261 -#: commands/tablecmds.c:16508 +#: commands/tablecmds.c:16476 #, c-format msgid "\"%s\" is not a materialized view" msgstr "«%s» no es una vista materializada" #: catalog/objectaddress.c:1391 commands/tablecmds.c:279 -#: commands/tablecmds.c:6054 commands/tablecmds.c:16513 +#: commands/tablecmds.c:6049 commands/tablecmds.c:16481 #, c-format msgid "\"%s\" is not a foreign table" msgstr "«%s» no es una tabla foránea" @@ -4740,7 +4751,7 @@ msgstr "el nombre de columna debe ser calificado" msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "no existe el valor por omisión para la columna «%s» de la relación «%s»" -#: catalog/objectaddress.c:1645 commands/functioncmds.c:136 +#: catalog/objectaddress.c:1645 commands/functioncmds.c:137 #: commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 #: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 #: utils/adt/acl.c:4411 @@ -4832,7 +4843,7 @@ msgstr "el largo de la lista de argumentos debe ser exactamente %d" msgid "must be owner of large object %u" msgstr "debe ser dueño del objeto grande %u" -#: catalog/objectaddress.c:2503 commands/functioncmds.c:1555 +#: catalog/objectaddress.c:2503 commands/functioncmds.c:1581 #, c-format msgid "must be owner of type %s or type %s" msgstr "debe ser dueño del tipo %s o el tipo %s" @@ -5269,13 +5280,13 @@ msgstr "«%s» es una agregación de conjunto hipotético." msgid "cannot change number of direct arguments of an aggregate function" msgstr "no se puede cambiar cantidad de argumentos directos de una función de agregación" -#: catalog/pg_aggregate.c:858 commands/functioncmds.c:675 +#: catalog/pg_aggregate.c:858 commands/functioncmds.c:701 #: commands/typecmds.c:1992 commands/typecmds.c:2038 commands/typecmds.c:2090 #: commands/typecmds.c:2127 commands/typecmds.c:2161 commands/typecmds.c:2195 #: commands/typecmds.c:2229 commands/typecmds.c:2258 commands/typecmds.c:2345 -#: commands/typecmds.c:2387 parser/parse_func.c:416 parser/parse_func.c:447 -#: parser/parse_func.c:474 parser/parse_func.c:488 parser/parse_func.c:610 -#: parser/parse_func.c:630 parser/parse_func.c:2143 parser/parse_func.c:2334 +#: commands/typecmds.c:2387 parser/parse_func.c:417 parser/parse_func.c:448 +#: parser/parse_func.c:475 parser/parse_func.c:489 parser/parse_func.c:611 +#: parser/parse_func.c:631 parser/parse_func.c:2173 parser/parse_func.c:2446 #, c-format msgid "function %s does not exist" msgstr "no existe la función %s" @@ -5483,7 +5494,7 @@ msgstr "ya existe un operador %s" msgid "operator cannot be its own negator or sort operator" msgstr "un operador no puede ser su propio negador u operador de ordenamiento" -#: catalog/pg_proc.c:130 parser/parse_func.c:2205 +#: catalog/pg_proc.c:130 parser/parse_func.c:2235 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" @@ -5529,8 +5540,8 @@ msgstr "no se puede cambiar el tipo de retorno de una función existente" #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:419 catalog/pg_proc.c:446 catalog/pg_proc.c:493 -#: catalog/pg_proc.c:519 catalog/pg_proc.c:545 +#: catalog/pg_proc.c:419 catalog/pg_proc.c:446 catalog/pg_proc.c:491 +#: catalog/pg_proc.c:517 catalog/pg_proc.c:543 #, c-format msgid "Use %s %s first." msgstr "Use %s %s primero." @@ -5540,37 +5551,37 @@ msgstr "Use %s %s primero." msgid "Row type defined by OUT parameters is different." msgstr "Tipo de registro definido por parámetros OUT es diferente." -#: catalog/pg_proc.c:490 +#: catalog/pg_proc.c:488 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "no se puede cambiar el nombre del parámetro de entrada «%s»" -#: catalog/pg_proc.c:517 +#: catalog/pg_proc.c:515 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "no se puede eliminar el valor por omisión de funciones existentes" -#: catalog/pg_proc.c:543 +#: catalog/pg_proc.c:541 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "no se puede cambiar el tipo de dato del valor por omisión de un parámetro" -#: catalog/pg_proc.c:753 +#: catalog/pg_proc.c:751 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "no hay ninguna función interna llamada «%s»" -#: catalog/pg_proc.c:851 +#: catalog/pg_proc.c:849 #, c-format msgid "SQL functions cannot return type %s" msgstr "las funciones SQL no pueden retornar el tipo %s" -#: catalog/pg_proc.c:866 +#: catalog/pg_proc.c:864 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "las funciones SQL no pueden tener argumentos de tipo %s" -#: catalog/pg_proc.c:978 executor/functions.c:1458 +#: catalog/pg_proc.c:976 executor/functions.c:1457 #, c-format msgid "SQL function \"%s\"" msgstr "función SQL «%s»" @@ -5757,8 +5768,8 @@ msgstr "" msgid "invalid page in block %u of relation %s" msgstr "la página no es válida en el bloque %u de la relación %s" -#: catalog/toasting.c:104 commands/indexcmds.c:667 commands/tablecmds.c:6033 -#: commands/tablecmds.c:16368 +#: catalog/toasting.c:104 commands/indexcmds.c:667 commands/tablecmds.c:6028 +#: commands/tablecmds.c:16336 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "«%s» no es una tabla o vista materializada" @@ -5843,7 +5854,7 @@ msgstr "las funciones de serialización pueden especificarse sólo cuando el tip msgid "must specify both or neither of serialization and deserialization functions" msgstr "debe especificar ambas o ninguna de las funciones de serialización y deserialización" -#: commands/aggregatecmds.c:437 commands/functioncmds.c:623 +#: commands/aggregatecmds.c:437 commands/functioncmds.c:649 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "el parámetro «parallel» debe ser SAFE, RESTRICTED o UNSAFE" @@ -5951,7 +5962,7 @@ msgstr "no se ha especificado una función manejadora" #: commands/amcmds.c:264 commands/event_trigger.c:183 #: commands/foreigncmds.c:489 commands/proclang.c:80 commands/trigger.c:681 -#: parser/parse_clause.c:941 +#: parser/parse_clause.c:940 #, c-format msgid "function %s must return type %s" msgstr "la función %s debe retornar el tipo %s" @@ -6069,7 +6080,7 @@ msgstr "no se puede hacer «cluster» a una tabla particionada" msgid "there is no previously clustered index for table \"%s\"" msgstr "no hay un índice de ordenamiento definido para la tabla «%s»" -#: commands/cluster.c:187 commands/tablecmds.c:13524 commands/tablecmds.c:15392 +#: commands/cluster.c:187 commands/tablecmds.c:13496 commands/tablecmds.c:15364 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "no existe el índice «%s» en la tabla «%s»" @@ -6084,7 +6095,7 @@ msgstr "no se puede reordenar un catálogo compartido" msgid "cannot vacuum temporary tables of other sessions" msgstr "no se puede hacer vacuum a tablas temporales de otras sesiones" -#: commands/cluster.c:456 commands/tablecmds.c:15402 +#: commands/cluster.c:456 commands/tablecmds.c:15374 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "«%s» no es un índice de la tabla «%s»" @@ -6420,15 +6431,15 @@ msgstr "la columna «%s» es una columna generada" msgid "Generated columns cannot be used in COPY." msgstr "Las columnas generadas no pueden usarse en COPY." -#: commands/copy.c:746 commands/indexcmds.c:1754 commands/statscmds.c:250 -#: commands/tablecmds.c:2374 commands/tablecmds.c:3030 -#: commands/tablecmds.c:3523 parser/parse_relation.c:3593 +#: commands/copy.c:746 commands/indexcmds.c:1754 commands/statscmds.c:238 +#: commands/tablecmds.c:2366 commands/tablecmds.c:3022 +#: commands/tablecmds.c:3515 parser/parse_relation.c:3593 #: parser/parse_relation.c:3613 utils/adt/tsvector_op.c:2680 #, c-format msgid "column \"%s\" does not exist" msgstr "no existe la columna «%s»" -#: commands/copy.c:753 commands/tablecmds.c:2400 commands/trigger.c:933 +#: commands/copy.c:753 commands/tablecmds.c:2392 commands/trigger.c:933 #: parser/parse_target.c:1080 parser/parse_target.c:1091 #, c-format msgid "column \"%s\" specified more than once" @@ -7061,7 +7072,7 @@ msgstr "el argumento de %s debe ser un nombre de tipo" msgid "invalid argument for %s: \"%s\"" msgstr "argumento no válido para %s: «%s»" -#: commands/dropcmds.c:100 commands/functioncmds.c:1384 +#: commands/dropcmds.c:100 commands/functioncmds.c:1410 #: utils/adt/ruleutils.c:2806 #, c-format msgid "\"%s\" is an aggregate function" @@ -7072,14 +7083,14 @@ msgstr "«%s» es una función de agregación" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Use DROP AGGREGATE para eliminar funciones de agregación." -#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3607 -#: commands/tablecmds.c:3765 commands/tablecmds.c:3810 -#: commands/tablecmds.c:15829 tcop/utility.c:1291 +#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3599 +#: commands/tablecmds.c:3757 commands/tablecmds.c:3802 +#: commands/tablecmds.c:15797 tcop/utility.c:1291 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "no existe la relación «%s», omitiendo" -#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1256 +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1248 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "el esquema «%s» no existe, omitiendo" @@ -7104,7 +7115,7 @@ msgstr "no existe el ordenamiento (collation) «%s», omitiendo" msgid "conversion \"%s\" does not exist, skipping" msgstr "no existe la conversión «%s», omitiendo" -#: commands/dropcmds.c:293 commands/statscmds.c:641 +#: commands/dropcmds.c:293 commands/statscmds.c:630 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "no existe el objeto de estadísticas «%s», omitiendo" @@ -7374,7 +7385,7 @@ msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "el parámetro «%s» no se puede cambiar en un archivo control secundario de extensión" #: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 -#: utils/misc/guc.c:7073 +#: utils/misc/guc.c:7092 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "el parámetro «%s» requiere un valor lógico (booleano)" @@ -7655,357 +7666,369 @@ msgstr "el conector de datos externos «%s» no soporta IMPORT FOREIGN SCHEMA" msgid "importing foreign table \"%s\"" msgstr "importando la tabla foránea «%s»" -#: commands/functioncmds.c:107 +#: commands/functioncmds.c:108 #, c-format msgid "SQL function cannot return shell type %s" msgstr "una función SQL no puede retornar el tipo inconcluso %s" -#: commands/functioncmds.c:112 +#: commands/functioncmds.c:113 #, c-format msgid "return type %s is only a shell" msgstr "el tipo de retorno %s está inconcluso" -#: commands/functioncmds.c:142 parser/parse_type.c:354 +#: commands/functioncmds.c:143 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "no se puede especificar un modificador de tipo para el tipo inconcluso «%s»" -#: commands/functioncmds.c:148 +#: commands/functioncmds.c:149 #, c-format msgid "type \"%s\" is not yet defined" msgstr "el tipo «%s» no ha sido definido aún" -#: commands/functioncmds.c:149 +#: commands/functioncmds.c:150 #, c-format msgid "Creating a shell type definition." msgstr "Creando una definición de tipo inconclusa." -#: commands/functioncmds.c:243 +#: commands/functioncmds.c:249 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "las funciones SQL no pueden aceptar el tipo inconcluso %s" -#: commands/functioncmds.c:249 +#: commands/functioncmds.c:255 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "las funciones de agregación no pueden aceptar el tipo inconcluso %s" -#: commands/functioncmds.c:254 +#: commands/functioncmds.c:260 #, c-format msgid "argument type %s is only a shell" msgstr "el tipo de argumento %s está inconcluso" -#: commands/functioncmds.c:264 +#: commands/functioncmds.c:270 #, c-format msgid "type %s does not exist" msgstr "no existe el tipo %s" -#: commands/functioncmds.c:278 +#: commands/functioncmds.c:284 #, c-format msgid "aggregates cannot accept set arguments" msgstr "las funciones de agregación no pueden aceptar argumentos de conjunto" -#: commands/functioncmds.c:282 +#: commands/functioncmds.c:288 #, c-format msgid "procedures cannot accept set arguments" msgstr "los procedimientos no pueden aceptar argumentos de conjunto" -#: commands/functioncmds.c:286 +#: commands/functioncmds.c:292 #, c-format msgid "functions cannot accept set arguments" msgstr "funciones no pueden aceptar argumentos de conjunto" -#: commands/functioncmds.c:306 +#: commands/functioncmds.c:302 #, fuzzy, c-format #| msgid "VARIADIC parameter must be the last input parameter" -msgid "VARIADIC parameter must be the last signature parameter" +msgid "VARIADIC parameter must be the last input parameter" msgstr "el parámetro VARIADIC debe ser el último parámetro de entrada" -#: commands/functioncmds.c:336 +#: commands/functioncmds.c:322 +#, fuzzy, c-format +#| msgid "VARIADIC parameter must be the last input parameter" +msgid "VARIADIC parameter must be the last parameter" +msgstr "el parámetro VARIADIC debe ser el último parámetro de entrada" + +#: commands/functioncmds.c:347 #, c-format msgid "VARIADIC parameter must be an array" msgstr "el parámetro VARIADIC debe ser un array" -#: commands/functioncmds.c:376 +#: commands/functioncmds.c:392 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "nombre de parámetro «%s» usado más de una vez" -#: commands/functioncmds.c:394 +#: commands/functioncmds.c:410 #, c-format msgid "only input parameters can have default values" msgstr "solo los parámetros de entrada pueden tener valores por omisión" -#: commands/functioncmds.c:409 +#: commands/functioncmds.c:425 #, c-format msgid "cannot use table references in parameter default value" msgstr "no se pueden usar referencias a tablas en el valor por omisión de un parámetro" -#: commands/functioncmds.c:433 +#: commands/functioncmds.c:449 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "los parámetros de entrada después de uno que tenga valor por omisión también deben tener valores por omisión" -#: commands/functioncmds.c:585 commands/functioncmds.c:776 +#: commands/functioncmds.c:459 +#, fuzzy, c-format +#| msgid "input parameters after one with a default value must also have defaults" +msgid "procedure OUT parameters cannot appear after one with a default value" +msgstr "los parámetros de entrada después de uno que tenga valor por omisión también deben tener valores por omisión" + +#: commands/functioncmds.c:611 commands/functioncmds.c:802 #, c-format msgid "invalid attribute in procedure definition" msgstr "atributo no válido en definición de procedimiento" -#: commands/functioncmds.c:681 +#: commands/functioncmds.c:707 #, c-format msgid "support function %s must return type %s" msgstr "la función de soporte %s debe retornar el tipo %s" -#: commands/functioncmds.c:692 +#: commands/functioncmds.c:718 #, c-format msgid "must be superuser to specify a support function" msgstr "debe ser superusuario para especificar una función de soporte" -#: commands/functioncmds.c:825 commands/functioncmds.c:1429 +#: commands/functioncmds.c:851 commands/functioncmds.c:1455 #, c-format msgid "COST must be positive" msgstr "COST debe ser positivo" -#: commands/functioncmds.c:833 commands/functioncmds.c:1437 +#: commands/functioncmds.c:859 commands/functioncmds.c:1463 #, c-format msgid "ROWS must be positive" msgstr "ROWS debe ser positivo" -#: commands/functioncmds.c:862 +#: commands/functioncmds.c:888 #, c-format msgid "no function body specified" msgstr "no se ha especificado un cuerpo para la función" -#: commands/functioncmds.c:867 +#: commands/functioncmds.c:893 #, fuzzy, c-format #| msgid "no function body specified" msgid "duplicate function body specified" msgstr "no se ha especificado un cuerpo para la función" -#: commands/functioncmds.c:872 +#: commands/functioncmds.c:898 #, c-format msgid "inline SQL function body only valid for language SQL" msgstr "" -#: commands/functioncmds.c:914 +#: commands/functioncmds.c:940 #, fuzzy, c-format #| msgid "event trigger functions cannot have declared arguments" msgid "SQL function with unquoted function body cannot have polymorphic arguments" msgstr "las funciones de disparador por eventos no pueden tener argumentos declarados" -#: commands/functioncmds.c:940 commands/functioncmds.c:959 +#: commands/functioncmds.c:966 commands/functioncmds.c:985 #, fuzzy, c-format #| msgid "%s is not allowed in a SQL function" msgid "%s is not yet supported in unquoted SQL function body" msgstr "%s no está permitido en una función SQL" -#: commands/functioncmds.c:987 +#: commands/functioncmds.c:1013 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "sólo se requiere un item AS para el lenguaje «%s»" -#: commands/functioncmds.c:1092 +#: commands/functioncmds.c:1118 #, c-format msgid "no language specified" msgstr "no se ha especificado el lenguaje" -#: commands/functioncmds.c:1100 commands/functioncmds.c:2102 +#: commands/functioncmds.c:1126 commands/functioncmds.c:2128 #: commands/proclang.c:237 #, c-format msgid "language \"%s\" does not exist" msgstr "no existe el lenguaje «%s»" -#: commands/functioncmds.c:1102 commands/functioncmds.c:2104 +#: commands/functioncmds.c:1128 commands/functioncmds.c:2130 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "Use CREATE EXTENSION para cargar el lenguaje en la base de datos." -#: commands/functioncmds.c:1137 commands/functioncmds.c:1421 +#: commands/functioncmds.c:1163 commands/functioncmds.c:1447 #, c-format msgid "only superuser can define a leakproof function" msgstr "sólo un superusuario puede definir funciones «leakproof»" -#: commands/functioncmds.c:1188 +#: commands/functioncmds.c:1214 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "tipo de retorno de función debe ser %s debido a los parámetros OUT" -#: commands/functioncmds.c:1201 +#: commands/functioncmds.c:1227 #, c-format msgid "function result type must be specified" msgstr "el tipo de retorno de la función debe ser especificado" -#: commands/functioncmds.c:1255 commands/functioncmds.c:1441 +#: commands/functioncmds.c:1281 commands/functioncmds.c:1467 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "ROWS no es aplicable cuando una función no retorna un conjunto" -#: commands/functioncmds.c:1541 +#: commands/functioncmds.c:1567 #, c-format msgid "source data type %s is a pseudo-type" msgstr "el tipo de origen %s es un pseudotipo" -#: commands/functioncmds.c:1547 +#: commands/functioncmds.c:1573 #, c-format msgid "target data type %s is a pseudo-type" msgstr "el tipo de retorno %s es un pseudotipo" -#: commands/functioncmds.c:1571 +#: commands/functioncmds.c:1597 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "el cast será ignorado porque el tipo de datos de origen es un dominio" -#: commands/functioncmds.c:1576 +#: commands/functioncmds.c:1602 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "el cast será ignorado porque el tipo de datos de destino es un dominio" -#: commands/functioncmds.c:1601 +#: commands/functioncmds.c:1627 #, c-format msgid "cast function must take one to three arguments" msgstr "la función de conversión lleva de uno a tres argumentos" -#: commands/functioncmds.c:1605 +#: commands/functioncmds.c:1631 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "el argumento de la función de conversión debe coincidir o ser binario-convertible con el tipo de origen" -#: commands/functioncmds.c:1609 +#: commands/functioncmds.c:1635 #, c-format msgid "second argument of cast function must be type %s" msgstr "el segundo argumento de la función de conversión debe ser de tipo %s" -#: commands/functioncmds.c:1614 +#: commands/functioncmds.c:1640 #, c-format msgid "third argument of cast function must be type %s" msgstr "el tercer argumento de la función de conversión debe ser de tipo %s" -#: commands/functioncmds.c:1619 +#: commands/functioncmds.c:1645 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "el tipo de salida de la función de conversión debe coincidir o ser binario-convertible con el tipo de retorno" -#: commands/functioncmds.c:1630 +#: commands/functioncmds.c:1656 #, c-format msgid "cast function must not be volatile" msgstr "la función de conversión no debe ser volatile" -#: commands/functioncmds.c:1635 +#: commands/functioncmds.c:1661 #, c-format msgid "cast function must be a normal function" msgstr "la función de conversión debe ser una función normal" -#: commands/functioncmds.c:1639 +#: commands/functioncmds.c:1665 #, c-format msgid "cast function must not return a set" msgstr "la función de conversión no debe retornar un conjunto" -#: commands/functioncmds.c:1665 +#: commands/functioncmds.c:1691 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "debe ser superusuario para crear una conversión sin especificar función" -#: commands/functioncmds.c:1680 +#: commands/functioncmds.c:1706 #, c-format msgid "source and target data types are not physically compatible" msgstr "los tipos de datos de origen y destino no son físicamente compatibles" -#: commands/functioncmds.c:1695 +#: commands/functioncmds.c:1721 #, c-format msgid "composite data types are not binary-compatible" msgstr "los tipos de datos compuestos no son binario-compatibles" -#: commands/functioncmds.c:1701 +#: commands/functioncmds.c:1727 #, c-format msgid "enum data types are not binary-compatible" msgstr "los tipos de datos enum no son binario-compatibles" -#: commands/functioncmds.c:1707 +#: commands/functioncmds.c:1733 #, c-format msgid "array data types are not binary-compatible" msgstr "los tipos de datos de array no son binario-compatibles" -#: commands/functioncmds.c:1724 +#: commands/functioncmds.c:1750 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "los tipos de dato de dominio no deben ser marcados binario-compatibles" -#: commands/functioncmds.c:1734 +#: commands/functioncmds.c:1760 #, c-format msgid "source data type and target data type are the same" msgstr "el tipo de origen y el tipo de retorno son el mismo" -#: commands/functioncmds.c:1767 +#: commands/functioncmds.c:1793 #, c-format msgid "transform function must not be volatile" msgstr "la función de transformación no debe ser volatile" -#: commands/functioncmds.c:1771 +#: commands/functioncmds.c:1797 #, c-format msgid "transform function must be a normal function" msgstr "la función de transformación debe ser una función normal" -#: commands/functioncmds.c:1775 +#: commands/functioncmds.c:1801 #, c-format msgid "transform function must not return a set" msgstr "la función de transformación no debe retornar un conjunto" -#: commands/functioncmds.c:1779 +#: commands/functioncmds.c:1805 #, c-format msgid "transform function must take one argument" msgstr "la función de transformación debe recibir un argumento" -#: commands/functioncmds.c:1783 +#: commands/functioncmds.c:1809 #, c-format msgid "first argument of transform function must be type %s" msgstr "el primer argumento de la función de transformación debe ser de tipo %s" -#: commands/functioncmds.c:1822 +#: commands/functioncmds.c:1848 #, c-format msgid "data type %s is a pseudo-type" msgstr "el tipo de dato %s es un pseudo-tipo" -#: commands/functioncmds.c:1828 +#: commands/functioncmds.c:1854 #, c-format msgid "data type %s is a domain" msgstr "tipo de dato «%s» es un dominio" -#: commands/functioncmds.c:1868 +#: commands/functioncmds.c:1894 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "el tipo de dato de retorno de la función FROM SQL debe ser %s" -#: commands/functioncmds.c:1894 +#: commands/functioncmds.c:1920 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "el tipo de dato de retorno de la función TO SQL debe ser el tipo de dato de la transformación" -#: commands/functioncmds.c:1923 +#: commands/functioncmds.c:1949 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "la transformación para el tipo %s lenguaje «%s» ya existe" -#: commands/functioncmds.c:2010 +#: commands/functioncmds.c:2036 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "la transformación para el tipo %s lenguaje «%s» no existe" -#: commands/functioncmds.c:2034 +#: commands/functioncmds.c:2060 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "ya existe una función llamada %s en el esquema «%s»" -#: commands/functioncmds.c:2089 +#: commands/functioncmds.c:2115 #, c-format msgid "no inline code specified" msgstr "no se ha especificado código" -#: commands/functioncmds.c:2135 +#: commands/functioncmds.c:2161 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "el lenguaje «%s» no soporta ejecución de código en línea" -#: commands/functioncmds.c:2252 +#: commands/functioncmds.c:2256 #, c-format msgid "cannot pass more than %d argument to a procedure" msgid_plural "cannot pass more than %d arguments to a procedure" @@ -8047,7 +8070,7 @@ msgstr "no se pueden crear índices en tablas temporales de otras sesiones" msgid "cannot specify default tablespace for partitioned relations" msgstr "no se puede especificar el tablespace por omisión para las relaciones particionadas" -#: commands/indexcmds.c:777 commands/tablecmds.c:783 commands/tablecmds.c:3307 +#: commands/indexcmds.c:777 commands/tablecmds.c:783 commands/tablecmds.c:3299 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "sólo relaciones compartidas pueden ser puestas en el tablespace pg_global" @@ -8164,7 +8187,7 @@ msgstr "la columna incluida no permite las opciones NULLS FIRST/LAST" msgid "could not determine which collation to use for index expression" msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de índice" -#: commands/indexcmds.c:1876 commands/tablecmds.c:16834 commands/typecmds.c:810 +#: commands/indexcmds.c:1876 commands/tablecmds.c:16802 commands/typecmds.c:810 #: parser/parse_expr.c:2680 parser/parse_type.c:566 parser/parse_utilcmd.c:3813 #: utils/adt/misc.c:599 #, c-format @@ -8201,8 +8224,8 @@ msgstr "el método de acceso «%s» no soporta las opciones ASC/DESC" msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "el método de acceso «%s» no soporta las opciones NULLS FIRST/LAST" -#: commands/indexcmds.c:2031 commands/tablecmds.c:16859 -#: commands/tablecmds.c:16865 commands/typecmds.c:2318 +#: commands/indexcmds.c:2031 commands/tablecmds.c:16827 +#: commands/tablecmds.c:16833 commands/typecmds.c:2318 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "el tipo de dato %s no tiene una clase de operadores por omisión para el método de acceso «%s»" @@ -8309,7 +8332,7 @@ msgstr "no se puede mover la relación de sistema «%s»" msgid "index \"%s.%s\" was reindexed" msgstr "el índice «%s.%s» fue reindexado" -#: commands/lockcmds.c:92 commands/tablecmds.c:6024 commands/trigger.c:289 +#: commands/lockcmds.c:92 commands/tablecmds.c:6019 commands/trigger.c:289 #: rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:938 #, c-format msgid "\"%s\" is not a table or view" @@ -8625,10 +8648,10 @@ msgid "operator attribute \"%s\" cannot be changed" msgstr "el atributo de operador «%s» no puede ser cambiado" #: commands/policy.c:88 commands/policy.c:381 commands/policy.c:471 -#: commands/statscmds.c:150 commands/tablecmds.c:1569 commands/tablecmds.c:2158 -#: commands/tablecmds.c:3417 commands/tablecmds.c:6003 -#: commands/tablecmds.c:8872 commands/tablecmds.c:16424 -#: commands/tablecmds.c:16459 commands/trigger.c:295 commands/trigger.c:1271 +#: commands/statscmds.c:150 commands/tablecmds.c:1561 commands/tablecmds.c:2150 +#: commands/tablecmds.c:3409 commands/tablecmds.c:5998 +#: commands/tablecmds.c:8860 commands/tablecmds.c:16392 +#: commands/tablecmds.c:16427 commands/trigger.c:295 commands/trigger.c:1271 #: commands/trigger.c:1380 rewrite/rewriteDefine.c:277 #: rewrite/rewriteDefine.c:943 rewrite/rewriteRemove.c:80 #, c-format @@ -8953,8 +8976,8 @@ msgstr "la secuencia debe estar en el mismo esquema que la tabla a la que está msgid "cannot change ownership of identity sequence" msgstr "no se puede cambiar el dueño de la secuencia de identidad" -#: commands/sequence.c:1717 commands/tablecmds.c:13216 -#: commands/tablecmds.c:15849 +#: commands/sequence.c:1717 commands/tablecmds.c:13188 +#: commands/tablecmds.c:15817 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "La secuencia «%s» está enlazada a la tabla «%s»." @@ -8984,65 +9007,59 @@ msgstr "el objeto de estadísticas «%s» ya existe" msgid "cannot have more than %d columns in statistics" msgstr "no se puede tener más de %d columnas en estadísticas" -#: commands/statscmds.c:236 -#, fuzzy, c-format -#| msgid "only simple column references are allowed in CREATE STATISTICS" -msgid "only simple column references and expressions are allowed in CREATE STATISTICS" -msgstr "sólo se permiten referencias de columnas simples en CREATE STATISTICS" - -#: commands/statscmds.c:258 +#: commands/statscmds.c:246 #, c-format msgid "statistics creation on system columns is not supported" msgstr "la creación de estadísticas en columnas de sistema no está soportada" -#: commands/statscmds.c:265 +#: commands/statscmds.c:253 #, c-format msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" msgstr "la columna «%s» no puede ser usado en estadísticas porque su tipo %s no tiene una clase de operadores por omisión para btree" -#: commands/statscmds.c:293 +#: commands/statscmds.c:282 #, fuzzy, c-format #| msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" msgid "expression cannot be used in multivariate statistics because its type %s has no default btree operator class" msgstr "la columna «%s» no puede ser usado en estadísticas porque su tipo %s no tiene una clase de operadores por omisión para btree" -#: commands/statscmds.c:314 +#: commands/statscmds.c:303 #, c-format msgid "when building statistics on a single expression, statistics kinds may not be specified" msgstr "" -#: commands/statscmds.c:343 +#: commands/statscmds.c:332 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "tipo de estadísticas «%s» no reconocido" -#: commands/statscmds.c:372 +#: commands/statscmds.c:361 #, c-format msgid "extended statistics require at least 2 columns" msgstr "las estadísticas extendidas requieren al menos 2 columnas" -#: commands/statscmds.c:390 +#: commands/statscmds.c:379 #, c-format msgid "duplicate column name in statistics definition" msgstr "nombre de columna duplicado en definición de estadísticas" -#: commands/statscmds.c:425 +#: commands/statscmds.c:414 #, fuzzy, c-format #| msgid "duplicate column name in statistics definition" msgid "duplicate expression in statistics definition" msgstr "nombre de columna duplicado en definición de estadísticas" -#: commands/statscmds.c:606 commands/tablecmds.c:7844 +#: commands/statscmds.c:595 commands/tablecmds.c:7830 #, c-format msgid "statistics target %d is too low" msgstr "el valor de estadísticas %d es demasiado bajo" -#: commands/statscmds.c:614 commands/tablecmds.c:7852 +#: commands/statscmds.c:603 commands/tablecmds.c:7838 #, c-format msgid "lowering statistics target to %d" msgstr "bajando el valor de estadísticas a %d" -#: commands/statscmds.c:637 +#: commands/statscmds.c:626 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "no existe el objeto de estadísticas «%s.%s», omitiendo" @@ -9072,7 +9089,7 @@ msgid "must be superuser to create subscriptions" msgstr "debe ser superusuario para crear suscripciones" #: commands/subscriptioncmds.c:471 commands/subscriptioncmds.c:568 -#: replication/logical/tablesync.c:970 replication/logical/worker.c:3098 +#: replication/logical/tablesync.c:970 replication/logical/worker.c:3154 #, c-format msgid "could not connect to the publisher: %s" msgstr "no se pudo connectar con el editor (publisher): %s" @@ -9235,7 +9252,7 @@ msgstr "la vista materializada «%s» no existe, omitiendo" msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Use DROP MATERIALIZED VIEW para eliminar una vista materializada." -#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18270 +#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18238 #: parser/parse_utilcmd.c:2257 #, c-format msgid "index \"%s\" does not exist" @@ -9259,8 +9276,8 @@ msgstr "«%s» no es un tipo" msgid "Use DROP TYPE to remove a type." msgstr "Use DROP TYPE para eliminar un tipo." -#: commands/tablecmds.c:277 commands/tablecmds.c:13055 -#: commands/tablecmds.c:15548 +#: commands/tablecmds.c:277 commands/tablecmds.c:13027 +#: commands/tablecmds.c:15520 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "no existe la tabla foránea «%s»" @@ -9284,121 +9301,121 @@ msgstr "ON COMMIT sólo puede ser usado en tablas temporales" msgid "cannot create temporary table within security-restricted operation" msgstr "no se puede crear una tabla temporal dentro una operación restringida por seguridad" -#: commands/tablecmds.c:731 commands/tablecmds.c:14339 +#: commands/tablecmds.c:731 commands/tablecmds.c:14311 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "se heredaría de la relación «%s» más de una vez" -#: commands/tablecmds.c:924 +#: commands/tablecmds.c:916 #, c-format msgid "specifying a table access method is not supported on a partitioned table" msgstr "especificar un método de acceso de tablas no está soportado en tablas particionadas." -#: commands/tablecmds.c:1020 +#: commands/tablecmds.c:1012 #, c-format msgid "\"%s\" is not partitioned" msgstr "«%s» no está particionada" -#: commands/tablecmds.c:1115 +#: commands/tablecmds.c:1107 #, c-format msgid "cannot partition using more than %d columns" msgstr "no se puede particionar usando más de %d columnas" -#: commands/tablecmds.c:1171 +#: commands/tablecmds.c:1163 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "no se puede crear una partición foránea en la tabla particionada «%s»" -#: commands/tablecmds.c:1173 +#: commands/tablecmds.c:1165 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "La tabla «%s» contiene índices que son únicos." -#: commands/tablecmds.c:1336 +#: commands/tablecmds.c:1328 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY no soporta eliminar múltiples objetos" -#: commands/tablecmds.c:1340 +#: commands/tablecmds.c:1332 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY no soporta CASCADE" -#: commands/tablecmds.c:1441 +#: commands/tablecmds.c:1433 #, c-format msgid "cannot drop partitioned index \"%s\" concurrently" msgstr "no se puede eliminar el índice particionado «%s» concurrentemente" -#: commands/tablecmds.c:1713 +#: commands/tablecmds.c:1705 #, c-format msgid "cannot truncate only a partitioned table" msgstr "no se puede truncar ONLY una tabla particionada" -#: commands/tablecmds.c:1714 +#: commands/tablecmds.c:1706 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "No especifique la opción ONLY, o ejecute TRUNCATE ONLY en las particiones directamente." -#: commands/tablecmds.c:1787 +#: commands/tablecmds.c:1779 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "truncando además la tabla «%s»" -#: commands/tablecmds.c:2146 +#: commands/tablecmds.c:2138 #, fuzzy, c-format #| msgid "cannot update foreign table \"%s\"" msgid "cannot truncate foreign table \"%s\"" msgstr "no se puede actualizar la tabla foránea «%s»" -#: commands/tablecmds.c:2195 +#: commands/tablecmds.c:2187 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "no se pueden truncar tablas temporales de otras sesiones" -#: commands/tablecmds.c:2457 commands/tablecmds.c:14236 +#: commands/tablecmds.c:2449 commands/tablecmds.c:14208 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "no se puede heredar de la tabla particionada «%s»" -#: commands/tablecmds.c:2462 +#: commands/tablecmds.c:2454 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "no se puede heredar de la partición «%s»" -#: commands/tablecmds.c:2470 parser/parse_utilcmd.c:2487 +#: commands/tablecmds.c:2462 parser/parse_utilcmd.c:2487 #: parser/parse_utilcmd.c:2629 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "la relación heredada «%s» no es una tabla o tabla foránea" -#: commands/tablecmds.c:2482 +#: commands/tablecmds.c:2474 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "no se puede crear una relación temporal como partición de la relación permanente «%s»" -#: commands/tablecmds.c:2491 commands/tablecmds.c:14215 +#: commands/tablecmds.c:2483 commands/tablecmds.c:14187 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "no se puede heredar de la tabla temporal «%s»" -#: commands/tablecmds.c:2501 commands/tablecmds.c:14223 +#: commands/tablecmds.c:2493 commands/tablecmds.c:14195 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "no se puede heredar de una tabla temporal de otra sesión" -#: commands/tablecmds.c:2555 +#: commands/tablecmds.c:2547 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "mezclando múltiples definiciones heredadas de la columna «%s»" -#: commands/tablecmds.c:2563 +#: commands/tablecmds.c:2555 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "columna heredada «%s» tiene conflicto de tipos" -#: commands/tablecmds.c:2565 commands/tablecmds.c:2588 -#: commands/tablecmds.c:2605 commands/tablecmds.c:2861 -#: commands/tablecmds.c:2891 commands/tablecmds.c:2905 +#: commands/tablecmds.c:2557 commands/tablecmds.c:2580 +#: commands/tablecmds.c:2597 commands/tablecmds.c:2853 +#: commands/tablecmds.c:2883 commands/tablecmds.c:2897 #: parser/parse_coerce.c:2090 parser/parse_coerce.c:2110 #: parser/parse_coerce.c:2130 parser/parse_coerce.c:2150 #: parser/parse_coerce.c:2205 parser/parse_coerce.c:2238 @@ -9409,1235 +9426,1235 @@ msgstr "columna heredada «%s» tiene conflicto de tipos" msgid "%s versus %s" msgstr "%s versus %s" -#: commands/tablecmds.c:2574 +#: commands/tablecmds.c:2566 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "columna heredada «%s» tiene conflicto de ordenamiento (collation)" -#: commands/tablecmds.c:2576 commands/tablecmds.c:2873 -#: commands/tablecmds.c:6503 +#: commands/tablecmds.c:2568 commands/tablecmds.c:2865 +#: commands/tablecmds.c:6498 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "«%s» versus «%s»" -#: commands/tablecmds.c:2586 +#: commands/tablecmds.c:2578 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "columna heredada «%s» tiene conflicto de parámetros de almacenamiento" -#: commands/tablecmds.c:2603 commands/tablecmds.c:2903 +#: commands/tablecmds.c:2595 commands/tablecmds.c:2895 #, fuzzy, c-format #| msgid "column \"%s\" has a collation conflict" msgid "column \"%s\" has a compression method conflict" msgstr "la columna «%s» tiene conflicto de ordenamientos (collation)" -#: commands/tablecmds.c:2618 +#: commands/tablecmds.c:2610 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "columna heredada «%s» tiene conflicto de generación" -#: commands/tablecmds.c:2712 commands/tablecmds.c:2767 -#: commands/tablecmds.c:11784 parser/parse_utilcmd.c:1301 +#: commands/tablecmds.c:2704 commands/tablecmds.c:2759 +#: commands/tablecmds.c:11772 parser/parse_utilcmd.c:1301 #: parser/parse_utilcmd.c:1344 parser/parse_utilcmd.c:1752 #: parser/parse_utilcmd.c:1860 #, c-format msgid "cannot convert whole-row table reference" msgstr "no se puede convertir una referencia a la fila completa (whole-row)" -#: commands/tablecmds.c:2713 parser/parse_utilcmd.c:1302 +#: commands/tablecmds.c:2705 parser/parse_utilcmd.c:1302 #, c-format msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." msgstr "La expresión de generación para la columna «%s» contiene una referencia a la fila completa (whole-row) de la tabla «%s»." -#: commands/tablecmds.c:2768 parser/parse_utilcmd.c:1345 +#: commands/tablecmds.c:2760 parser/parse_utilcmd.c:1345 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "La restricción «%s» contiene una referencia a la fila completa (whole-row) de la tabla «%s»." -#: commands/tablecmds.c:2847 +#: commands/tablecmds.c:2839 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "mezclando la columna «%s» con la definición heredada" -#: commands/tablecmds.c:2851 +#: commands/tablecmds.c:2843 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "moviendo y mezclando la columna «%s» con la definición heredada" -#: commands/tablecmds.c:2852 +#: commands/tablecmds.c:2844 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "La columna especificada por el usuario fue movida a la posición de la columna heredada." -#: commands/tablecmds.c:2859 +#: commands/tablecmds.c:2851 #, c-format msgid "column \"%s\" has a type conflict" msgstr "la columna «%s» tiene conflicto de tipos" -#: commands/tablecmds.c:2871 +#: commands/tablecmds.c:2863 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "la columna «%s» tiene conflicto de ordenamientos (collation)" -#: commands/tablecmds.c:2889 +#: commands/tablecmds.c:2881 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "la columna «%s» tiene conflicto de parámetros de almacenamiento" -#: commands/tablecmds.c:2930 +#: commands/tablecmds.c:2922 #, c-format msgid "child column \"%s\" specifies generation expression" msgstr "la columna hija «%s» especifica una expresión de generación de columna" -#: commands/tablecmds.c:2932 +#: commands/tablecmds.c:2924 #, c-format msgid "Omit the generation expression in the definition of the child table column to inherit the generation expression from the parent table." msgstr "Omita la expresión de generación en la definición de la columna en la tabla hija para heredar la expresión de generación de la tabla padre." -#: commands/tablecmds.c:2936 +#: commands/tablecmds.c:2928 #, c-format msgid "column \"%s\" inherits from generated column but specifies default" msgstr "la columna «%s» hereda de una columna generada pero especifica un valor por omisión" -#: commands/tablecmds.c:2941 +#: commands/tablecmds.c:2933 #, c-format msgid "column \"%s\" inherits from generated column but specifies identity" msgstr "la columna «%s» hereda de una columna generada pero especifica una identidad" -#: commands/tablecmds.c:3050 +#: commands/tablecmds.c:3042 #, c-format msgid "column \"%s\" inherits conflicting generation expressions" msgstr "la columna «%s» hereda expresiones de generación en conflicto" -#: commands/tablecmds.c:3055 +#: commands/tablecmds.c:3047 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "la columna «%s» hereda valores por omisión no coincidentes" -#: commands/tablecmds.c:3057 +#: commands/tablecmds.c:3049 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Para resolver el conflicto, indique explícitamente un valor por omisión." -#: commands/tablecmds.c:3103 +#: commands/tablecmds.c:3095 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "la restricción «check» «%s» aparece más de una vez con diferentes expresiones" -#: commands/tablecmds.c:3316 +#: commands/tablecmds.c:3308 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "no se pueden mover tablas temporales de otras sesiones" -#: commands/tablecmds.c:3386 +#: commands/tablecmds.c:3378 #, c-format msgid "cannot rename column of typed table" msgstr "no se puede cambiar el nombre a una columna de una tabla tipada" -#: commands/tablecmds.c:3405 +#: commands/tablecmds.c:3397 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "«%s» no es una tabla, vista, vista materializada, tipo compuesto, índice o tabla foránea" -#: commands/tablecmds.c:3499 +#: commands/tablecmds.c:3491 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "debe cambiar el nombre a la columna heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:3531 +#: commands/tablecmds.c:3523 #, c-format msgid "cannot rename system column \"%s\"" msgstr "no se puede cambiar el nombre a la columna de sistema «%s»" -#: commands/tablecmds.c:3546 +#: commands/tablecmds.c:3538 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "no se puede cambiar el nombre a la columna heredada «%s»" -#: commands/tablecmds.c:3698 +#: commands/tablecmds.c:3690 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "debe cambiar el nombre a la restricción heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:3705 +#: commands/tablecmds.c:3697 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "no se puede cambiar el nombre a la restricción heredada «%s»" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3938 +#: commands/tablecmds.c:3930 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "no se puede hacer %s en «%s» porque está siendo usada por consultas activas en esta sesión" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3947 +#: commands/tablecmds.c:3939 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "no se puede hacer %s en «%s» porque tiene eventos de disparador pendientes" -#: commands/tablecmds.c:4411 +#: commands/tablecmds.c:4403 #, fuzzy, c-format #| msgid "cannot convert partition \"%s\" to a view" msgid "cannot alter partition \"%s\" with an incomplete detach" msgstr "no se puede convertir la partición «%s» en vista" -#: commands/tablecmds.c:4413 +#: commands/tablecmds.c:4405 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." msgstr "" -#: commands/tablecmds.c:4605 commands/tablecmds.c:4620 +#: commands/tablecmds.c:4597 commands/tablecmds.c:4612 #, c-format msgid "cannot change persistence setting twice" msgstr "no se puede cambiar la opción de persistencia dos veces" -#: commands/tablecmds.c:5363 +#: commands/tablecmds.c:5355 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "no se puede reescribir la relación de sistema «%s»" -#: commands/tablecmds.c:5369 +#: commands/tablecmds.c:5361 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "no se puede reescribir la tabla «%s» que es usada como tabla de catálogo" -#: commands/tablecmds.c:5379 +#: commands/tablecmds.c:5371 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "no se puede reescribir tablas temporales de otras sesiones" -#: commands/tablecmds.c:5837 +#: commands/tablecmds.c:5832 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "la columna «%s» de la relación «%s» contiene valores null" -#: commands/tablecmds.c:5854 +#: commands/tablecmds.c:5849 #, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" msgstr "la restricción check «%s» de la relación «%s» es violada por alguna fila" -#: commands/tablecmds.c:5873 partitioning/partbounds.c:3282 +#: commands/tablecmds.c:5868 partitioning/partbounds.c:3282 #, c-format msgid "updated partition constraint for default partition \"%s\" would be violated by some row" msgstr "la restricción de partición actualizada para la partición default «%s» sería violada por alguna fila" -#: commands/tablecmds.c:5879 +#: commands/tablecmds.c:5874 #, c-format msgid "partition constraint of relation \"%s\" is violated by some row" msgstr "la restricción de partición de la relación «%s» es violada por alguna fila" -#: commands/tablecmds.c:6027 commands/trigger.c:1265 commands/trigger.c:1371 +#: commands/tablecmds.c:6022 commands/trigger.c:1265 commands/trigger.c:1371 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "«%s» no es una tabla, vista o tabla foránea" -#: commands/tablecmds.c:6030 +#: commands/tablecmds.c:6025 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "«%s» no es una tabla, vista, vista materializada, o índice" -#: commands/tablecmds.c:6036 +#: commands/tablecmds.c:6031 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "«%s» no es una tabla, vista materializada, o índice" -#: commands/tablecmds.c:6039 +#: commands/tablecmds.c:6034 #, c-format msgid "\"%s\" is not a table, materialized view, or foreign table" msgstr "«%s» no es una tabla, vista materializada o tabla foránea" -#: commands/tablecmds.c:6042 +#: commands/tablecmds.c:6037 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "«%s» no es una tabla o tabla foránea" -#: commands/tablecmds.c:6045 +#: commands/tablecmds.c:6040 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "«%s» no es una tabla, tipo compuesto, o tabla foránea" -#: commands/tablecmds.c:6048 +#: commands/tablecmds.c:6043 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "«%s» no es una tabla, vista materializada, índice o tabla foránea" -#: commands/tablecmds.c:6058 +#: commands/tablecmds.c:6053 #, c-format msgid "\"%s\" is of the wrong type" msgstr "«%s» es tipo equivocado" -#: commands/tablecmds.c:6261 commands/tablecmds.c:6268 +#: commands/tablecmds.c:6256 commands/tablecmds.c:6263 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "no se puede alterar el tipo «%s» porque la columna «%s.%s» lo usa" -#: commands/tablecmds.c:6275 +#: commands/tablecmds.c:6270 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "no se puede alterar la tabla foránea «%s» porque la columna «%s.%s» usa su tipo de registro" -#: commands/tablecmds.c:6282 +#: commands/tablecmds.c:6277 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "no se puede alterar la tabla «%s» porque la columna «%s.%s» usa su tipo de registro" -#: commands/tablecmds.c:6338 +#: commands/tablecmds.c:6333 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "no se puede cambiar el tipo «%s» porque es el tipo de una tabla tipada" -#: commands/tablecmds.c:6340 +#: commands/tablecmds.c:6335 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Use ALTER ... CASCADE para eliminar además las tablas tipadas." -#: commands/tablecmds.c:6386 +#: commands/tablecmds.c:6381 #, c-format msgid "type %s is not a composite type" msgstr "el tipo %s no es un tipo compuesto" -#: commands/tablecmds.c:6413 +#: commands/tablecmds.c:6408 #, c-format msgid "cannot add column to typed table" msgstr "no se puede agregar una columna a una tabla tipada" -#: commands/tablecmds.c:6466 +#: commands/tablecmds.c:6461 #, c-format msgid "cannot add column to a partition" msgstr "no se puede agregar una columna a una partición" -#: commands/tablecmds.c:6495 commands/tablecmds.c:14466 +#: commands/tablecmds.c:6490 commands/tablecmds.c:14438 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "la tabla hija «%s» tiene un tipo diferente para la columna «%s»" -#: commands/tablecmds.c:6501 commands/tablecmds.c:14473 +#: commands/tablecmds.c:6496 commands/tablecmds.c:14445 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "la tabla hija «%s» tiene un ordenamiento (collation) diferente para la columna «%s»" -#: commands/tablecmds.c:6515 +#: commands/tablecmds.c:6510 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "mezclando la definición de la columna «%s» en la tabla hija «%s»" -#: commands/tablecmds.c:6558 +#: commands/tablecmds.c:6553 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "no se puede agregar una columna de identidad recursivamente a una tabla que tiene tablas hijas" -#: commands/tablecmds.c:6810 +#: commands/tablecmds.c:6796 #, c-format msgid "column must be added to child tables too" msgstr "la columna debe ser agregada a las tablas hijas también" -#: commands/tablecmds.c:6888 +#: commands/tablecmds.c:6874 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "la columna «%s» de la relación «%s» ya existe, omitiendo" -#: commands/tablecmds.c:6895 +#: commands/tablecmds.c:6881 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "ya existe la columna «%s» en la relación «%s»" -#: commands/tablecmds.c:6961 commands/tablecmds.c:11422 +#: commands/tablecmds.c:6947 commands/tablecmds.c:11410 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "no se pueden eliminar restricciones sólo de la tabla particionada cuando existen particiones" -#: commands/tablecmds.c:6962 commands/tablecmds.c:7266 -#: commands/tablecmds.c:8287 commands/tablecmds.c:11423 +#: commands/tablecmds.c:6948 commands/tablecmds.c:7252 +#: commands/tablecmds.c:8275 commands/tablecmds.c:11411 #, c-format msgid "Do not specify the ONLY keyword." msgstr "No especifique la opción ONLY." -#: commands/tablecmds.c:6999 commands/tablecmds.c:7192 -#: commands/tablecmds.c:7334 commands/tablecmds.c:7448 -#: commands/tablecmds.c:7542 commands/tablecmds.c:7601 -#: commands/tablecmds.c:7719 commands/tablecmds.c:7885 -#: commands/tablecmds.c:7955 commands/tablecmds.c:8110 -#: commands/tablecmds.c:11577 commands/tablecmds.c:13078 -#: commands/tablecmds.c:15640 +#: commands/tablecmds.c:6985 commands/tablecmds.c:7178 +#: commands/tablecmds.c:7320 commands/tablecmds.c:7434 +#: commands/tablecmds.c:7528 commands/tablecmds.c:7587 +#: commands/tablecmds.c:7705 commands/tablecmds.c:7871 +#: commands/tablecmds.c:7941 commands/tablecmds.c:8097 +#: commands/tablecmds.c:11565 commands/tablecmds.c:13050 +#: commands/tablecmds.c:15611 #, c-format msgid "cannot alter system column \"%s\"" msgstr "no se puede alterar columna de sistema «%s»" -#: commands/tablecmds.c:7005 commands/tablecmds.c:7340 +#: commands/tablecmds.c:6991 commands/tablecmds.c:7326 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "la columna «%s» en la relación «%s» es una columna de identidad" -#: commands/tablecmds.c:7041 +#: commands/tablecmds.c:7027 #, c-format msgid "column \"%s\" is in a primary key" msgstr "la columna «%s» está en la llave primaria" -#: commands/tablecmds.c:7063 +#: commands/tablecmds.c:7049 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "columna «%s» está marcada NOT NULL en la tabla padre" -#: commands/tablecmds.c:7263 commands/tablecmds.c:8770 +#: commands/tablecmds.c:7249 commands/tablecmds.c:8758 #, c-format msgid "constraint must be added to child tables too" msgstr "la restricción debe ser agregada a las tablas hijas también" -#: commands/tablecmds.c:7264 +#: commands/tablecmds.c:7250 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "La columna «%s» de la relación «%s» no está previamente marcada NOT NULL." -#: commands/tablecmds.c:7342 +#: commands/tablecmds.c:7328 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY en su lugar." -#: commands/tablecmds.c:7347 +#: commands/tablecmds.c:7333 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "la columna «%s» en la relación «%s» es una columna generada" -#: commands/tablecmds.c:7350 +#: commands/tablecmds.c:7336 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." msgstr "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION en su lugar." -#: commands/tablecmds.c:7459 +#: commands/tablecmds.c:7445 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "la columna «%s» en la relación «%s» debe ser declarada NOT NULL antes de que una identidad pueda agregarse" -#: commands/tablecmds.c:7465 +#: commands/tablecmds.c:7451 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "la columna «%s» en la relación «%s» ya es una columna de identidad" -#: commands/tablecmds.c:7471 +#: commands/tablecmds.c:7457 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "la columna «%s» en la relación «%s» ya tiene un valor por omisión" -#: commands/tablecmds.c:7548 commands/tablecmds.c:7609 +#: commands/tablecmds.c:7534 commands/tablecmds.c:7595 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "la columna «%s» en la relación «%s» no es una columna identidad" -#: commands/tablecmds.c:7614 +#: commands/tablecmds.c:7600 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "la columna «%s» de la relación «%s» no es una columna identidad, omitiendo" -#: commands/tablecmds.c:7667 +#: commands/tablecmds.c:7653 #, fuzzy, c-format #| msgid "column must be added to child tables too" msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" msgstr "la columna debe ser agregada a las tablas hijas también" -#: commands/tablecmds.c:7689 +#: commands/tablecmds.c:7675 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "no se puede eliminar la expresión de generación de una columna heredada" -#: commands/tablecmds.c:7727 +#: commands/tablecmds.c:7713 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "la columna «%s» en la relación «%s» no es una columna generada almacenada" -#: commands/tablecmds.c:7732 +#: commands/tablecmds.c:7718 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "la columna «%s» de la relación «%s» no es una columna generada almacenada, omitiendo" -#: commands/tablecmds.c:7832 +#: commands/tablecmds.c:7818 #, c-format msgid "cannot refer to non-index column by number" msgstr "no se puede referir a columnas que no son de índice por número" -#: commands/tablecmds.c:7875 +#: commands/tablecmds.c:7861 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "no existe la columna número %d en la relación «%s»" -#: commands/tablecmds.c:7894 +#: commands/tablecmds.c:7880 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "no se puede alterar estadísticas en la columna incluida «%s» del índice «%s»" -#: commands/tablecmds.c:7899 +#: commands/tablecmds.c:7885 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "no se puede alterar estadísticas en la columna no-de-expresión «%s» del índice «%s»" -#: commands/tablecmds.c:7901 +#: commands/tablecmds.c:7887 #, c-format msgid "Alter statistics on table column instead." msgstr "Altere las estadísticas en la columna de la tabla en su lugar." -#: commands/tablecmds.c:8090 +#: commands/tablecmds.c:8077 #, c-format msgid "invalid storage type \"%s\"" msgstr "tipo de almacenamiento no válido «%s»" -#: commands/tablecmds.c:8122 +#: commands/tablecmds.c:8109 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "el tipo de datos %s de la columna sólo puede tener almacenamiento PLAIN" -#: commands/tablecmds.c:8166 +#: commands/tablecmds.c:8154 #, c-format msgid "cannot drop column from typed table" msgstr "no se pueden eliminar columnas de una tabla tipada" -#: commands/tablecmds.c:8225 +#: commands/tablecmds.c:8213 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "no existe la columna «%s» en la relación «%s», omitiendo" -#: commands/tablecmds.c:8238 +#: commands/tablecmds.c:8226 #, c-format msgid "cannot drop system column \"%s\"" msgstr "no se puede eliminar la columna de sistema «%s»" -#: commands/tablecmds.c:8248 +#: commands/tablecmds.c:8236 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "no se puede eliminar la columna heredada «%s»" -#: commands/tablecmds.c:8261 +#: commands/tablecmds.c:8249 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "no se puede eliminar la columna «%s» porque es parte de la llave de partición de la relación «%s»" -#: commands/tablecmds.c:8286 +#: commands/tablecmds.c:8274 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "no se pueden eliminar columnas sólo de una tabla particionada cuando existe particiones" -#: commands/tablecmds.c:8490 +#: commands/tablecmds.c:8478 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX no está soportado en tablas particionadas" -#: commands/tablecmds.c:8515 +#: commands/tablecmds.c:8503 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX renombrará el índice «%s» a «%s»" -#: commands/tablecmds.c:8850 +#: commands/tablecmds.c:8838 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "no se puede usar ONLY para una llave foránea en la tabla particionada «%s» haciendo referencia a la relación «%s»" -#: commands/tablecmds.c:8856 +#: commands/tablecmds.c:8844 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "no se puede agregar una llave foránea NOT VALID a la tabla particionada «%s» haciendo referencia a la relación «%s»" -#: commands/tablecmds.c:8859 +#: commands/tablecmds.c:8847 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Esta característica no está aún soportada en tablas particionadas." -#: commands/tablecmds.c:8866 commands/tablecmds.c:9271 +#: commands/tablecmds.c:8854 commands/tablecmds.c:9259 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "la relación referida «%s» no es una tabla" -#: commands/tablecmds.c:8889 +#: commands/tablecmds.c:8877 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "las restricciones en tablas permanentes sólo pueden hacer referencia a tablas permanentes" -#: commands/tablecmds.c:8896 +#: commands/tablecmds.c:8884 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "las restricciones en tablas «unlogged» sólo pueden hacer referencia a tablas permanentes o «unlogged»" -#: commands/tablecmds.c:8902 +#: commands/tablecmds.c:8890 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "las restricciones en tablas temporales sólo pueden hacer referencia a tablas temporales" -#: commands/tablecmds.c:8906 +#: commands/tablecmds.c:8894 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "las restricciones en tablas temporales sólo pueden hacer referencia a tablas temporales de esta sesión" -#: commands/tablecmds.c:8972 commands/tablecmds.c:8978 +#: commands/tablecmds.c:8960 commands/tablecmds.c:8966 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "acción %s no válida para restricción de llave foránea que contiene columnas generadas" -#: commands/tablecmds.c:8994 +#: commands/tablecmds.c:8982 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "el número de columnas referidas en la llave foránea no coincide con el número de columnas de referencia" -#: commands/tablecmds.c:9101 +#: commands/tablecmds.c:9089 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "la restricción de llave foránea «%s» no puede ser implementada" -#: commands/tablecmds.c:9103 +#: commands/tablecmds.c:9091 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Las columnas llave «%s» y «%s» son de tipos incompatibles: %s y %s" -#: commands/tablecmds.c:9466 commands/tablecmds.c:9859 +#: commands/tablecmds.c:9454 commands/tablecmds.c:9847 #: parser/parse_utilcmd.c:796 parser/parse_utilcmd.c:925 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "las restricciones de llave foránea no están soportadas en tablas foráneas" -#: commands/tablecmds.c:10226 commands/tablecmds.c:10504 -#: commands/tablecmds.c:11379 commands/tablecmds.c:11454 +#: commands/tablecmds.c:10214 commands/tablecmds.c:10492 +#: commands/tablecmds.c:11367 commands/tablecmds.c:11442 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "no existe la restricción «%s» en la relación «%s»" -#: commands/tablecmds.c:10233 +#: commands/tablecmds.c:10221 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "la restricción «%s» de la relación «%s» no es una restriccion de llave foránea" -#: commands/tablecmds.c:10271 +#: commands/tablecmds.c:10259 #, fuzzy, c-format #| msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "no se puede eliminar la restricción «%s» heredada de la relación «%s»" -#: commands/tablecmds.c:10274 +#: commands/tablecmds.c:10262 #, fuzzy, c-format #| msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "la restricción «%s» está en conflicto con la restricción heredada de la relación «%s»" -#: commands/tablecmds.c:10276 +#: commands/tablecmds.c:10264 #, c-format msgid "You may alter the constraint it derives from, instead." msgstr "" -#: commands/tablecmds.c:10512 +#: commands/tablecmds.c:10500 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "la restricción «%s» de la relación «%s» no es una llave foránea o restricción «check»" -#: commands/tablecmds.c:10590 +#: commands/tablecmds.c:10578 #, c-format msgid "constraint must be validated on child tables too" msgstr "la restricción debe ser validada en las tablas hijas también" -#: commands/tablecmds.c:10674 +#: commands/tablecmds.c:10662 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "no existe la columna «%s» referida en la llave foránea" -#: commands/tablecmds.c:10679 +#: commands/tablecmds.c:10667 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "no se puede tener más de %d columnas en una llave foránea" -#: commands/tablecmds.c:10744 +#: commands/tablecmds.c:10732 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "no se puede usar una llave primaria postergable para la tabla referenciada «%s»" -#: commands/tablecmds.c:10761 +#: commands/tablecmds.c:10749 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "no hay llave primaria para la tabla referida «%s»" -#: commands/tablecmds.c:10826 +#: commands/tablecmds.c:10814 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "la lista de columnas referidas en una llave foránea no debe contener duplicados" -#: commands/tablecmds.c:10920 +#: commands/tablecmds.c:10908 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "no se puede usar una restricción unique postergable para la tabla referenciada «%s»" -#: commands/tablecmds.c:10925 +#: commands/tablecmds.c:10913 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "no hay restricción unique que coincida con las columnas dadas en la tabla referida «%s»" -#: commands/tablecmds.c:11335 +#: commands/tablecmds.c:11323 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "no se puede eliminar la restricción «%s» heredada de la relación «%s»" -#: commands/tablecmds.c:11385 +#: commands/tablecmds.c:11373 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "no existe la restricción «%s» en la relación «%s», omitiendo" -#: commands/tablecmds.c:11561 +#: commands/tablecmds.c:11549 #, c-format msgid "cannot alter column type of typed table" msgstr "no se puede cambiar el tipo de una columna de una tabla tipada" -#: commands/tablecmds.c:11588 +#: commands/tablecmds.c:11576 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "no se puede alterar la columna heredada «%s»" -#: commands/tablecmds.c:11597 +#: commands/tablecmds.c:11585 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "no se puede alterar la columna «%s» porque es parte de la llave de partición de la relación «%s»" -#: commands/tablecmds.c:11647 +#: commands/tablecmds.c:11635 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "el resultado de la cláusula USING para la columna «%s» no puede ser convertido automáticamente al tipo %s" -#: commands/tablecmds.c:11650 +#: commands/tablecmds.c:11638 #, c-format msgid "You might need to add an explicit cast." msgstr "Puede ser necesario agregar un cast explícito." -#: commands/tablecmds.c:11654 +#: commands/tablecmds.c:11642 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "la columna «%s» no puede convertirse automáticamente al tipo %s" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:11657 +#: commands/tablecmds.c:11645 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Puede ser necesario especificar «USING %s::%s»." -#: commands/tablecmds.c:11757 +#: commands/tablecmds.c:11745 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "no se puede alterar la columna heredada «%s» de la relación «%s»" -#: commands/tablecmds.c:11785 +#: commands/tablecmds.c:11773 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "La expresión USING contiene una referencia a la fila completa (whole-row)." -#: commands/tablecmds.c:11796 +#: commands/tablecmds.c:11784 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "debe cambiar el tipo a la columna heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:11921 +#: commands/tablecmds.c:11909 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "no se puede alterar el tipo de la columna «%s» dos veces" -#: commands/tablecmds.c:11959 +#: commands/tablecmds.c:11947 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "la expresión de generación para la columna «%s» no puede ser convertido automáticamente al tipo %s" -#: commands/tablecmds.c:11964 +#: commands/tablecmds.c:11952 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "el valor por omisión para la columna «%s» no puede ser convertido automáticamente al tipo %s" -#: commands/tablecmds.c:12042 +#: commands/tablecmds.c:12030 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "no se puede alterar el tipo de una columna usada por una columna generada" -#: commands/tablecmds.c:12043 +#: commands/tablecmds.c:12031 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "La columna «%s» es usada por la columna generada «%s»." -#: commands/tablecmds.c:12064 +#: commands/tablecmds.c:12052 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "no se puede alterar el tipo de una columna usada en una regla o vista" -#: commands/tablecmds.c:12065 commands/tablecmds.c:12084 -#: commands/tablecmds.c:12102 +#: commands/tablecmds.c:12053 commands/tablecmds.c:12072 +#: commands/tablecmds.c:12090 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s depende de la columna «%s»" -#: commands/tablecmds.c:12083 +#: commands/tablecmds.c:12071 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "no se puede alterar el tipo de una columna usada en una definición de trigger" -#: commands/tablecmds.c:12101 +#: commands/tablecmds.c:12089 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "no se puede alterar el tipo de una columna usada en una definición de política" -#: commands/tablecmds.c:13186 commands/tablecmds.c:13198 +#: commands/tablecmds.c:13158 commands/tablecmds.c:13170 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "no se puede cambiar el dueño del índice «%s»" -#: commands/tablecmds.c:13188 commands/tablecmds.c:13200 +#: commands/tablecmds.c:13160 commands/tablecmds.c:13172 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Considere cambiar el dueño de la tabla en vez de cambiar el dueño del índice." -#: commands/tablecmds.c:13214 +#: commands/tablecmds.c:13186 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "no se puede cambiar el dueño de la secuencia «%s»" -#: commands/tablecmds.c:13228 commands/tablecmds.c:16535 +#: commands/tablecmds.c:13200 commands/tablecmds.c:16503 #, c-format msgid "Use ALTER TYPE instead." msgstr "Considere usar ALTER TYPE." -#: commands/tablecmds.c:13237 +#: commands/tablecmds.c:13209 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "«%s» no es una tabla, vista, secuencia o tabla foránea" -#: commands/tablecmds.c:13576 +#: commands/tablecmds.c:13548 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "no se pueden tener múltiples subórdenes SET TABLESPACE" -#: commands/tablecmds.c:13653 +#: commands/tablecmds.c:13625 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "«%s» no es una tabla, vista, tabla materializada, índice o tabla TOAST" -#: commands/tablecmds.c:13686 commands/view.c:494 +#: commands/tablecmds.c:13658 commands/view.c:494 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION sólo puede usarse en vistas automáticamente actualizables" -#: commands/tablecmds.c:13938 +#: commands/tablecmds.c:13910 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "solamente tablas, índices y vistas materializadas existen en tablespaces" -#: commands/tablecmds.c:13950 +#: commands/tablecmds.c:13922 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "no se puede mover objetos hacia o desde el tablespace pg_global" -#: commands/tablecmds.c:14042 +#: commands/tablecmds.c:14014 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "cancelando porque el lock en la relación «%s.%s» no está disponible" -#: commands/tablecmds.c:14058 +#: commands/tablecmds.c:14030 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "no se encontraron relaciones coincidentes en el tablespace «%s»" -#: commands/tablecmds.c:14174 +#: commands/tablecmds.c:14146 #, c-format msgid "cannot change inheritance of typed table" msgstr "no se puede cambiar la herencia de una tabla tipada" -#: commands/tablecmds.c:14179 commands/tablecmds.c:14735 +#: commands/tablecmds.c:14151 commands/tablecmds.c:14707 #, c-format msgid "cannot change inheritance of a partition" msgstr "no puede cambiar la herencia de una partición" -#: commands/tablecmds.c:14184 +#: commands/tablecmds.c:14156 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "no se puede cambiar la herencia de una tabla particionada" -#: commands/tablecmds.c:14230 +#: commands/tablecmds.c:14202 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "no se puede agregar herencia a tablas temporales de otra sesión" -#: commands/tablecmds.c:14243 +#: commands/tablecmds.c:14215 #, c-format msgid "cannot inherit from a partition" msgstr "no se puede heredar de una partición" -#: commands/tablecmds.c:14265 commands/tablecmds.c:17179 +#: commands/tablecmds.c:14237 commands/tablecmds.c:17147 #, c-format msgid "circular inheritance not allowed" msgstr "la herencia circular no está permitida" -#: commands/tablecmds.c:14266 commands/tablecmds.c:17180 +#: commands/tablecmds.c:14238 commands/tablecmds.c:17148 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "«%s» ya es un hijo de «%s»." -#: commands/tablecmds.c:14279 +#: commands/tablecmds.c:14251 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "el trigger «%s» impide a la tabla «%s» convertirse en hija de herencia" -#: commands/tablecmds.c:14281 +#: commands/tablecmds.c:14253 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "Los triggers ROW con tablas de transición no están permitidos en jerarquías de herencia." -#: commands/tablecmds.c:14484 +#: commands/tablecmds.c:14456 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "columna «%s» en tabla hija debe marcarse como NOT NULL" -#: commands/tablecmds.c:14493 +#: commands/tablecmds.c:14465 #, fuzzy, c-format #| msgid "column \"%s\" in child table must be marked NOT NULL" msgid "column \"%s\" in child table must be a generated column" msgstr "columna «%s» en tabla hija debe marcarse como NOT NULL" -#: commands/tablecmds.c:14543 +#: commands/tablecmds.c:14515 #, fuzzy, c-format #| msgid "column \"%s\" inherits conflicting generation expressions" msgid "column \"%s\" in child table has a conflicting generation expression" msgstr "la columna «%s» hereda expresiones de generación en conflicto" -#: commands/tablecmds.c:14571 +#: commands/tablecmds.c:14543 #, c-format msgid "child table is missing column \"%s\"" msgstr "tabla hija no tiene la columna «%s»" -#: commands/tablecmds.c:14659 +#: commands/tablecmds.c:14631 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "la tabla hija «%s» tiene una definición diferente para la restricción «check» «%s»" -#: commands/tablecmds.c:14667 +#: commands/tablecmds.c:14639 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción no heredada en la tabla hija «%s»" -#: commands/tablecmds.c:14678 +#: commands/tablecmds.c:14650 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "la restricción «%s» está en conflicto con la restricción NOT VALID en la tabla hija «%s»" -#: commands/tablecmds.c:14713 +#: commands/tablecmds.c:14685 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "tabla hija no tiene la restricción «%s»" -#: commands/tablecmds.c:14801 +#: commands/tablecmds.c:14773 #, fuzzy, c-format #| msgid "partition \"%s\" would overlap partition \"%s\"" msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "la partición «%s» traslaparía con la partición «%s»" -#: commands/tablecmds.c:14805 +#: commands/tablecmds.c:14777 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the detach operation." msgstr "" -#: commands/tablecmds.c:14830 commands/tablecmds.c:14878 +#: commands/tablecmds.c:14802 commands/tablecmds.c:14850 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "relación «%s» no es una partición de la relación «%s»" -#: commands/tablecmds.c:14884 +#: commands/tablecmds.c:14856 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "relación «%s» no es un padre de la relación «%s»" -#: commands/tablecmds.c:15112 +#: commands/tablecmds.c:15084 #, c-format msgid "typed tables cannot inherit" msgstr "las tablas tipadas no pueden heredar" -#: commands/tablecmds.c:15142 +#: commands/tablecmds.c:15114 #, c-format msgid "table is missing column \"%s\"" msgstr "la tabla no tiene la columna «%s»" -#: commands/tablecmds.c:15153 +#: commands/tablecmds.c:15125 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "la tabla tiene columna «%s» en la posición en que el tipo requiere «%s»." -#: commands/tablecmds.c:15162 +#: commands/tablecmds.c:15134 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "la tabla «%s» tiene un tipo diferente para la columna «%s»" -#: commands/tablecmds.c:15176 +#: commands/tablecmds.c:15148 #, c-format msgid "table has extra column \"%s\"" msgstr "tabla tiene la columna extra «%s»" -#: commands/tablecmds.c:15228 +#: commands/tablecmds.c:15200 #, c-format msgid "\"%s\" is not a typed table" msgstr "«%s» no es una tabla tipada" -#: commands/tablecmds.c:15410 +#: commands/tablecmds.c:15382 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "no se puede usar el índice no-único «%s» como identidad de réplica" -#: commands/tablecmds.c:15416 +#: commands/tablecmds.c:15388 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "no puede usar el índice no-inmediato «%s» como identidad de réplica" -#: commands/tablecmds.c:15422 +#: commands/tablecmds.c:15394 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "no se puede usar el índice funcional «%s» como identidad de réplica" -#: commands/tablecmds.c:15428 +#: commands/tablecmds.c:15400 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "no se puede usar el índice parcial «%s» como identidad de réplica" -#: commands/tablecmds.c:15434 +#: commands/tablecmds.c:15406 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "no se puede usar el índice no válido «%s» como identidad de réplica" -#: commands/tablecmds.c:15451 +#: commands/tablecmds.c:15423 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "el índice «%s» no puede usarse como identidad de réplica porque la column %d es una columna de sistema" -#: commands/tablecmds.c:15458 +#: commands/tablecmds.c:15430 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "el índice «%s» no puede usarse como identidad de réplica porque la column «%s» acepta valores nulos" -#: commands/tablecmds.c:15648 commands/tablecmds.c:18632 -#, fuzzy, c-format -#| msgid "this build does not support compression" -msgid "column data type %s does not support compression" -msgstr "esta instalación no soporta compresión" - -#: commands/tablecmds.c:15709 +#: commands/tablecmds.c:15677 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "no se puede cambiar el estado «logged» de la tabla «%s» porque es temporal" -#: commands/tablecmds.c:15733 +#: commands/tablecmds.c:15701 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "no se pudo cambiar la tabla «%s» a «unlogged» porque es parte de una publicación" -#: commands/tablecmds.c:15735 +#: commands/tablecmds.c:15703 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Las tablas «unlogged» no pueden replicarse." -#: commands/tablecmds.c:15780 +#: commands/tablecmds.c:15748 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "no se pudo cambiar la tabla «%s» a «logged» porque hace referencia a la tabla «unlogged» «%s»" -#: commands/tablecmds.c:15790 +#: commands/tablecmds.c:15758 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "no se pudo cambiar la tabla «%s» a «unlogged» porque hace referencia a la tabla «logged» «%s»" -#: commands/tablecmds.c:15848 +#: commands/tablecmds.c:15816 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "no se puede mover una secuencia enlazada a una tabla hacia otro esquema" -#: commands/tablecmds.c:15955 +#: commands/tablecmds.c:15923 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "ya existe una relación llamada «%s» en el esquema «%s»" -#: commands/tablecmds.c:16518 +#: commands/tablecmds.c:16486 #, c-format msgid "\"%s\" is not a composite type" msgstr "«%s» no es un tipo compuesto" -#: commands/tablecmds.c:16550 +#: commands/tablecmds.c:16518 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "«%s» no es una tabla, vista, vista materializada, secuencia o tabla foránea" -#: commands/tablecmds.c:16585 +#: commands/tablecmds.c:16553 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "estrategia de particionamiento «%s» no reconocida" -#: commands/tablecmds.c:16593 +#: commands/tablecmds.c:16561 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "no se puede usar la estrategia de particionamiento «list» con más de una columna" -#: commands/tablecmds.c:16659 +#: commands/tablecmds.c:16627 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "la columna «%s» nombrada en llave de particionamiento no existe" -#: commands/tablecmds.c:16667 +#: commands/tablecmds.c:16635 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "no se puede usar la columna de sistema «%s» en llave de particionamiento" -#: commands/tablecmds.c:16678 commands/tablecmds.c:16792 +#: commands/tablecmds.c:16646 commands/tablecmds.c:16760 #, c-format msgid "cannot use generated column in partition key" msgstr "no se puede usar una columna generada en llave de particionamiento" -#: commands/tablecmds.c:16679 commands/tablecmds.c:16793 commands/trigger.c:635 +#: commands/tablecmds.c:16647 commands/tablecmds.c:16761 commands/trigger.c:635 #: rewrite/rewriteHandler.c:884 rewrite/rewriteHandler.c:919 #, c-format msgid "Column \"%s\" is a generated column." msgstr "La columna «%s» es una columna generada." -#: commands/tablecmds.c:16755 +#: commands/tablecmds.c:16723 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "las funciones utilizadas en expresiones de la llave de particionamiento deben estar marcadas IMMUTABLE" -#: commands/tablecmds.c:16775 +#: commands/tablecmds.c:16743 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "las expresiones en la llave de particionamiento no pueden contener referencias a columnas de sistema" -#: commands/tablecmds.c:16805 +#: commands/tablecmds.c:16773 #, c-format msgid "cannot use constant expression as partition key" msgstr "no se pueden usar expresiones constantes como llave de particionamiento" -#: commands/tablecmds.c:16826 +#: commands/tablecmds.c:16794 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de particionamiento" -#: commands/tablecmds.c:16861 +#: commands/tablecmds.c:16829 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "Debe especificar una clase de operadores hash, o definir una clase de operadores por omisión para hash para el tipo de datos." -#: commands/tablecmds.c:16867 +#: commands/tablecmds.c:16835 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "Debe especificar una clase de operadores btree, o definir una clase de operadores por omisión para btree para el tipo de datos." -#: commands/tablecmds.c:17119 +#: commands/tablecmds.c:17087 #, c-format msgid "\"%s\" is already a partition" msgstr "«%s» ya es una partición" -#: commands/tablecmds.c:17125 +#: commands/tablecmds.c:17093 #, c-format msgid "cannot attach a typed table as partition" msgstr "no puede adjuntar tabla tipada como partición" -#: commands/tablecmds.c:17141 +#: commands/tablecmds.c:17109 #, c-format msgid "cannot attach inheritance child as partition" msgstr "no puede adjuntar hija de herencia como partición" -#: commands/tablecmds.c:17155 +#: commands/tablecmds.c:17123 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "no puede adjuntar ancestro de herencia como partición" -#: commands/tablecmds.c:17189 +#: commands/tablecmds.c:17157 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "no se puede adjuntar una relación temporal como partición de la relación permanente «%s»" -#: commands/tablecmds.c:17197 +#: commands/tablecmds.c:17165 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "no se puede adjuntar una relación permanente como partición de la relación temporal «%s»" -#: commands/tablecmds.c:17205 +#: commands/tablecmds.c:17173 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "no se puede adjuntar como partición de una relación temporal de otra sesión" -#: commands/tablecmds.c:17212 +#: commands/tablecmds.c:17180 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "no se adjuntar una relación temporal de otra sesión como partición" -#: commands/tablecmds.c:17232 +#: commands/tablecmds.c:17200 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "la tabla «%s» contiene la columna «%s» no encontrada en el padre «%s»" -#: commands/tablecmds.c:17235 +#: commands/tablecmds.c:17203 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "La nueva partición sólo puede contener las columnas presentes en el padre." -#: commands/tablecmds.c:17247 +#: commands/tablecmds.c:17215 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "el trigger «%s» impide a la tabla «%s» devenir partición" -#: commands/tablecmds.c:17249 commands/trigger.c:441 +#: commands/tablecmds.c:17217 commands/trigger.c:441 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "los triggers ROW con tablas de transición no están soportados en particiones" -#: commands/tablecmds.c:17412 +#: commands/tablecmds.c:17380 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "no se puede adjuntar la tabla foránea «%s» como partición de la tabla particionada «%s»" -#: commands/tablecmds.c:17415 +#: commands/tablecmds.c:17383 #, fuzzy, c-format #| msgid "Table \"%s\" contains unique indexes." msgid "Partitioned table \"%s\" contains unique indexes." msgstr "La tabla «%s» contiene índices únicos." -#: commands/tablecmds.c:17735 +#: commands/tablecmds.c:17703 #, fuzzy, c-format #| msgid "a hash-partitioned table may not have a default partition" msgid "cannot detach partitions concurrently when a default partition exists" msgstr "una tabla particionada por hash no puede tener una partición default" -#: commands/tablecmds.c:17844 +#: commands/tablecmds.c:17812 #, fuzzy, c-format #| msgid "cannot create index on partitioned table \"%s\" concurrently" msgid "partitioned table \"%s\" was removed concurrently" msgstr "no se puede crear un índice en la tabla particionada «%s» concurrentemente" -#: commands/tablecmds.c:17850 +#: commands/tablecmds.c:17818 #, fuzzy, c-format #| msgid "cannot drop partitioned index \"%s\" concurrently" msgid "partition \"%s\" was removed concurrently" msgstr "no se puede eliminar el índice particionado «%s» concurrentemente" -#: commands/tablecmds.c:18304 commands/tablecmds.c:18324 -#: commands/tablecmds.c:18344 commands/tablecmds.c:18363 -#: commands/tablecmds.c:18405 +#: commands/tablecmds.c:18272 commands/tablecmds.c:18292 +#: commands/tablecmds.c:18312 commands/tablecmds.c:18331 +#: commands/tablecmds.c:18373 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "no se puede adjuntar el índice «%s» como partición del índice «%s»" -#: commands/tablecmds.c:18307 +#: commands/tablecmds.c:18275 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "El índice «%s» ya está adjunto a otro índice." -#: commands/tablecmds.c:18327 +#: commands/tablecmds.c:18295 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "El índice «%s» no es un índice en una partición de la tabla «%s»." -#: commands/tablecmds.c:18347 +#: commands/tablecmds.c:18315 #, c-format msgid "The index definitions do not match." msgstr "Las definiciones de los índices no coinciden." -#: commands/tablecmds.c:18366 +#: commands/tablecmds.c:18334 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "El índice «%s» pertenece a una restricción en la tabla «%s», pero no existe una restricción para el índice «%s»." -#: commands/tablecmds.c:18408 +#: commands/tablecmds.c:18376 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "Otro índice ya está adjunto para la partición «%s»." -#: commands/tablecmds.c:18644 +#: commands/tablecmds.c:18606 +#, fuzzy, c-format +#| msgid "this build does not support compression" +msgid "column data type %s does not support compression" +msgstr "esta instalación no soporta compresión" + +#: commands/tablecmds.c:18613 #, fuzzy, c-format #| msgid "invalid compression level \"%s\"" msgid "invalid compression method \"%s\"" @@ -10645,7 +10662,7 @@ msgstr "valor de compresión «%s» no válido" #: commands/tablespace.c:162 commands/tablespace.c:179 #: commands/tablespace.c:190 commands/tablespace.c:198 -#: commands/tablespace.c:650 replication/slot.c:1409 storage/file/copydir.c:47 +#: commands/tablespace.c:650 replication/slot.c:1476 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "no se pudo crear el directorio «%s»: %m" @@ -11004,29 +11021,29 @@ msgstr "mover registros a otra partición durante un trigger BEFORE FOR EACH ROW msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "Antes de ejecutar el trigger «%s», la fila iba a estar en la partición «%s.%s»." -#: commands/trigger.c:3043 executor/nodeModifyTable.c:1799 -#: executor/nodeModifyTable.c:1881 +#: commands/trigger.c:3043 executor/nodeModifyTable.c:1811 +#: executor/nodeModifyTable.c:1893 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "el registro a ser actualizado ya fue modificado por una operación disparada por la orden actual" -#: commands/trigger.c:3044 executor/nodeModifyTable.c:1187 -#: executor/nodeModifyTable.c:1261 executor/nodeModifyTable.c:1800 -#: executor/nodeModifyTable.c:1882 +#: commands/trigger.c:3044 executor/nodeModifyTable.c:1193 +#: executor/nodeModifyTable.c:1267 executor/nodeModifyTable.c:1812 +#: executor/nodeModifyTable.c:1894 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Considere usar un disparador AFTER en lugar de un disparador BEFORE para propagar cambios a otros registros." -#: commands/trigger.c:3073 executor/nodeLockRows.c:225 -#: executor/nodeLockRows.c:234 executor/nodeModifyTable.c:228 -#: executor/nodeModifyTable.c:1203 executor/nodeModifyTable.c:1817 -#: executor/nodeModifyTable.c:2047 +#: commands/trigger.c:3073 executor/nodeLockRows.c:229 +#: executor/nodeLockRows.c:238 executor/nodeModifyTable.c:228 +#: executor/nodeModifyTable.c:1209 executor/nodeModifyTable.c:1829 +#: executor/nodeModifyTable.c:2059 #, c-format msgid "could not serialize access due to concurrent update" msgstr "no se pudo serializar el acceso debido a un update concurrente" -#: commands/trigger.c:3081 executor/nodeModifyTable.c:1293 -#: executor/nodeModifyTable.c:1899 executor/nodeModifyTable.c:2071 +#: commands/trigger.c:3081 executor/nodeModifyTable.c:1299 +#: executor/nodeModifyTable.c:1911 executor/nodeModifyTable.c:2083 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "no se pudo serializar el acceso debido a un delete concurrente" @@ -11037,12 +11054,12 @@ msgstr "no se pudo serializar el acceso debido a un delete concurrente" msgid "cannot fire deferred trigger within security-restricted operation" msgstr "no se puede crear una tabla temporal dentro una operación restringida por seguridad" -#: commands/trigger.c:5183 +#: commands/trigger.c:5185 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "la restricción «%s» no es postergable" -#: commands/trigger.c:5206 +#: commands/trigger.c:5208 #, c-format msgid "constraint \"%s\" does not exist" msgstr "no existe la restricción «%s»" @@ -11512,8 +11529,8 @@ msgstr "debe ser superusuario para crear superusuarios" msgid "permission denied to create role" msgstr "se ha denegado el permiso para crear el rol" -#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15281 -#: gram.y:15326 utils/adt/acl.c:5248 utils/adt/acl.c:5254 +#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15259 +#: gram.y:15304 utils/adt/acl.c:5248 utils/adt/acl.c:5254 #, c-format msgid "role name \"%s\" is reserved" msgstr "el nombre de rol «%s» está reservado" @@ -11701,8 +11718,9 @@ msgid "parallel option requires a value between 0 and %d" msgstr "la opción parallel requiere un valor entre 0 y %d" #: commands/vacuum.c:168 -#, c-format -msgid "parallel vacuum degree must be between 0 and %d" +#, fuzzy, c-format +#| msgid "parallel vacuum degree must be between 0 and %d" +msgid "parallel workers for vacuum must be between 0 and %d" msgstr "el grado de paralelismo de vacuum debe estar entre 0 y %d" #: commands/vacuum.c:185 @@ -11824,7 +11842,7 @@ msgstr "Puede haber sufrido ya problemas de pérdida de datos por reciclaje del msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "omitiendo «%s»: no se puede aplicar VACUUM a objetos que no son tablas o a tablas especiales de sistema" -#: commands/variable.c:165 utils/misc/guc.c:11606 utils/misc/guc.c:11668 +#: commands/variable.c:165 utils/misc/guc.c:11625 utils/misc/guc.c:11687 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Palabra clave no reconocida: «%s»." @@ -12061,8 +12079,8 @@ msgstr "el tipo de destino no es un array" msgid "ROW() column has type %s instead of type %s" msgstr "la columna de ROW() es de tipo %s en lugar de ser de tipo %s" -#: executor/execExpr.c:2480 executor/execSRF.c:718 parser/parse_func.c:136 -#: parser/parse_func.c:654 parser/parse_func.c:1030 +#: executor/execExpr.c:2480 executor/execSRF.c:718 parser/parse_func.c:138 +#: parser/parse_func.c:655 parser/parse_func.c:1031 #, c-format msgid "cannot pass more than %d argument to a function" msgid_plural "cannot pass more than %d arguments to a function" @@ -12303,7 +12321,7 @@ msgid "cannot lock rows in materialized view \"%s\"" msgstr "no se puede bloquear registros en la vista materializada «%s»" #: executor/execMain.c:1173 executor/execMain.c:2555 -#: executor/nodeLockRows.c:132 +#: executor/nodeLockRows.c:136 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "no se puede bloquear registros en la tabla foránea «%s»" @@ -12493,76 +12511,78 @@ msgstr "Use la orden REFRESH MATERIALIZED VIEW." msgid "could not determine actual type of argument declared %s" msgstr "no se pudo determinar el tipo de argumento declarado %s" -#: executor/functions.c:515 -#, c-format -msgid "cannot COPY to/from client in a SQL function" +#: executor/functions.c:514 +#, fuzzy, c-format +#| msgid "cannot COPY to/from client in a SQL function" +msgid "cannot COPY to/from client in an SQL function" msgstr "no se puede ejecutar COPY desde/a un cliente en una función SQL" #. translator: %s is a SQL statement name -#: executor/functions.c:521 -#, c-format -msgid "%s is not allowed in a SQL function" +#: executor/functions.c:520 +#, fuzzy, c-format +#| msgid "%s is not allowed in a SQL function" +msgid "%s is not allowed in an SQL function" msgstr "%s no está permitido en una función SQL" #. translator: %s is a SQL statement name -#: executor/functions.c:529 executor/spi.c:1634 executor/spi.c:2460 +#: executor/functions.c:528 executor/spi.c:1633 executor/spi.c:2485 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s no está permitido en una función no-«volatile»" -#: executor/functions.c:1442 +#: executor/functions.c:1441 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "función SQL «%s» en la sentencia %d" -#: executor/functions.c:1468 +#: executor/functions.c:1467 #, c-format msgid "SQL function \"%s\" during startup" msgstr "función SQL «%s» durante el inicio" -#: executor/functions.c:1571 +#: executor/functions.c:1552 #, c-format msgid "calling procedures with output arguments is not supported in SQL functions" msgstr "no está permitido invocar procedimientos con arguments de salida en funciones SQL" -#: executor/functions.c:1705 executor/functions.c:1743 -#: executor/functions.c:1757 executor/functions.c:1847 -#: executor/functions.c:1880 executor/functions.c:1894 +#: executor/functions.c:1685 executor/functions.c:1723 +#: executor/functions.c:1737 executor/functions.c:1827 +#: executor/functions.c:1860 executor/functions.c:1874 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "el tipo de retorno de función declarada para retornar %s no concuerda" -#: executor/functions.c:1707 +#: executor/functions.c:1687 #, c-format msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." msgstr "La sentencia final de la función debe ser un SELECT o INSERT/UPDATE/DELETE RETURNING." -#: executor/functions.c:1745 +#: executor/functions.c:1725 #, c-format msgid "Final statement must return exactly one column." msgstr "La sentencia final debe retornar exactamente una columna." -#: executor/functions.c:1759 +#: executor/functions.c:1739 #, c-format msgid "Actual return type is %s." msgstr "El verdadero tipo de retorno es %s." -#: executor/functions.c:1849 +#: executor/functions.c:1829 #, c-format msgid "Final statement returns too many columns." msgstr "La sentencia final retorna demasiadas columnas." -#: executor/functions.c:1882 +#: executor/functions.c:1862 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "La sentencia final retorna %s en lugar de %s en la columna %d." -#: executor/functions.c:1896 +#: executor/functions.c:1876 #, c-format msgid "Final statement returns too few columns." msgstr "La sentencia final retorna muy pocas columnas." -#: executor/functions.c:1924 +#: executor/functions.c:1904 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "el tipo de retorno %s no es soportado en funciones SQL" @@ -12627,27 +12647,27 @@ msgstr "FULL JOIN sólo está soportado con condiciones que se pueden usar con m msgid "Query has too few columns." msgstr "La consulta tiene muy pocas columnas." -#: executor/nodeModifyTable.c:1186 executor/nodeModifyTable.c:1260 +#: executor/nodeModifyTable.c:1192 executor/nodeModifyTable.c:1266 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "el registro a ser eliminado ya fue modificado por una operación disparada por la orden actual" -#: executor/nodeModifyTable.c:1435 +#: executor/nodeModifyTable.c:1441 #, c-format msgid "invalid ON UPDATE specification" msgstr "especificación ON UPDATE no válida" -#: executor/nodeModifyTable.c:1436 +#: executor/nodeModifyTable.c:1442 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "La tupla de resultado aparecería en una partición diferente que la tupla original." -#: executor/nodeModifyTable.c:2026 +#: executor/nodeModifyTable.c:2038 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "la orden ON CONFLICT DO UPDATE no puede afectar el registro una segunda vez" -#: executor/nodeModifyTable.c:2027 +#: executor/nodeModifyTable.c:2039 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "Asegúrese de que ningún registro propuesto para inserción dentro de la misma orden tenga valores duplicados restringidos." @@ -12723,7 +12743,7 @@ msgstr "la posición final del marco no debe ser negativa" msgid "aggregate function %s does not support use as a window function" msgstr "la función de agregación %s no permite ser usada como función ventana" -#: executor/spi.c:237 executor/spi.c:306 +#: executor/spi.c:237 executor/spi.c:302 #, c-format msgid "invalid transaction termination" msgstr "terminación de transacción no válida" @@ -12733,60 +12753,60 @@ msgstr "terminación de transacción no válida" msgid "cannot commit while a subtransaction is active" msgstr "no se puede comprometer mientras hay una subtransacción activa" -#: executor/spi.c:312 +#: executor/spi.c:308 #, c-format msgid "cannot roll back while a subtransaction is active" msgstr "no se puede hacer rollback mientras hay una subtransacción activa" -#: executor/spi.c:381 +#: executor/spi.c:380 #, c-format msgid "transaction left non-empty SPI stack" msgstr "transacción dejó un stack SPI no vacío" -#: executor/spi.c:382 executor/spi.c:444 +#: executor/spi.c:381 executor/spi.c:443 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "Revise llamadas a «SPI_finish» faltantes." -#: executor/spi.c:443 +#: executor/spi.c:442 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "subtransacción dejó un stack SPI no vacío" -#: executor/spi.c:1496 +#: executor/spi.c:1495 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "no se puede abrir plan de varias consultas como cursor" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1501 +#: executor/spi.c:1500 #, c-format msgid "cannot open %s query as cursor" msgstr "no se puede abrir consulta %s como cursor" -#: executor/spi.c:1608 +#: executor/spi.c:1607 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE no está soportado" -#: executor/spi.c:1609 parser/analyze.c:2806 +#: executor/spi.c:1608 parser/analyze.c:2808 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Los cursores declarados SCROLL deben ser READ ONLY." -#: executor/spi.c:2784 +#: executor/spi.c:2808 #, fuzzy, c-format #| msgid "SQL function \"%s\"" msgid "SQL expression \"%s\"" msgstr "función SQL «%s»" -#: executor/spi.c:2789 +#: executor/spi.c:2813 #, fuzzy, c-format #| msgid "SQL statement \"%s\"" msgid "PL/pgSQL assignment \"%s\"" msgstr "sentencia SQL: «%s»" -#: executor/spi.c:2792 +#: executor/spi.c:2816 #, c-format msgid "SQL statement \"%s\"" msgstr "sentencia SQL: «%s»" @@ -12886,291 +12906,291 @@ msgstr "STDIN/STDOUT no están permitidos con PROGRAM" msgid "WHERE clause not allowed with COPY TO" msgstr "la cláusula WHERE no está permitida con COPY TO" -#: gram.y:3407 gram.y:3414 gram.y:11687 gram.y:11695 +#: gram.y:3407 gram.y:3414 gram.y:11665 gram.y:11673 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "GLOBAL está obsoleto para la creación de tablas temporales" -#: gram.y:3663 +#: gram.y:3665 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "para una columna generada, GENERATED ALWAYS debe ser especificado" -#: gram.y:3931 utils/adt/ri_triggers.c:2032 +#: gram.y:3933 utils/adt/ri_triggers.c:2032 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL no está implementada" -#: gram.y:4632 +#: gram.y:4634 #, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" msgstr "CREATE EXTENSION ... FROM ya no está soportado" -#: gram.y:5295 +#: gram.y:5297 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "opción de seguridad de registro «%s» no reconocida" -#: gram.y:5296 +#: gram.y:5298 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "sólo se admiten actualmente políticas PERMISSIVE o RESTRICTIVE." -#: gram.y:5378 +#: gram.y:5380 #, fuzzy, c-format #| msgid "nested CREATE EXTENSION is not supported" msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" msgstr "los CREATE EXTENSION anidados no están soportados" -#: gram.y:5415 +#: gram.y:5417 msgid "duplicate trigger events specified" msgstr "se han especificado eventos de disparador duplicados" -#: gram.y:5556 parser/parse_utilcmd.c:3734 parser/parse_utilcmd.c:3760 +#: gram.y:5558 parser/parse_utilcmd.c:3734 parser/parse_utilcmd.c:3760 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "una restricción declarada INITIALLY DEFERRED debe ser DEFERRABLE" -#: gram.y:5563 +#: gram.y:5565 #, c-format msgid "conflicting constraint properties" msgstr "propiedades de restricción contradictorias" -#: gram.y:5659 +#: gram.y:5661 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION no está implementado" -#: gram.y:6042 +#: gram.y:6044 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK ya no es requerido" -#: gram.y:6043 +#: gram.y:6045 #, c-format msgid "Update your data type." msgstr "Actualice su tipo de datos." -#: gram.y:7768 +#: gram.y:7741 #, c-format msgid "aggregates cannot have output arguments" msgstr "las funciones de agregación no pueden tener argumentos de salida" -#: gram.y:8210 utils/adt/regproc.c:709 utils/adt/regproc.c:750 +#: gram.y:8188 utils/adt/regproc.c:710 utils/adt/regproc.c:751 #, c-format msgid "missing argument" msgstr "falta un argumento" -#: gram.y:8211 utils/adt/regproc.c:710 utils/adt/regproc.c:751 +#: gram.y:8189 utils/adt/regproc.c:711 utils/adt/regproc.c:752 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Use NONE para denotar el argumento faltante de un operador unario." -#: gram.y:10150 gram.y:10168 +#: gram.y:10128 gram.y:10146 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION no está soportado con vistas recursivas" -#: gram.y:11824 +#: gram.y:11802 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "la sintaxis LIMIT #,# no está soportada" -#: gram.y:11825 +#: gram.y:11803 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Use cláusulas LIMIT y OFFSET separadas." -#: gram.y:12163 gram.y:12188 +#: gram.y:12141 gram.y:12166 #, c-format msgid "VALUES in FROM must have an alias" msgstr "VALUES en FROM debe tener un alias" -#: gram.y:12164 gram.y:12189 +#: gram.y:12142 gram.y:12167 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "Por ejemplo, FROM (VALUES ...) [AS] foo." -#: gram.y:12169 gram.y:12194 +#: gram.y:12147 gram.y:12172 #, c-format msgid "subquery in FROM must have an alias" msgstr "las subconsultas en FROM deben tener un alias" -#: gram.y:12170 gram.y:12195 +#: gram.y:12148 gram.y:12173 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "Por ejemplo, FROM (SELECT ...) [AS] foo." -#: gram.y:12690 +#: gram.y:12668 #, c-format msgid "only one DEFAULT value is allowed" msgstr "Sólo se permite un valor DEFAULT" -#: gram.y:12699 +#: gram.y:12677 #, c-format msgid "only one PATH value per column is allowed" msgstr "sólo se permite un valor de PATH por columna" -#: gram.y:12708 +#: gram.y:12686 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "declaraciones NULL/NOT NULL en conflicto o redundantes para la columna «%s»" -#: gram.y:12717 +#: gram.y:12695 #, c-format msgid "unrecognized column option \"%s\"" msgstr "opción de columna «%s» no reconocida" -#: gram.y:12971 +#: gram.y:12949 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "la precisión para el tipo float debe ser al menos 1 bit" -#: gram.y:12980 +#: gram.y:12958 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "la precisión para el tipo float debe ser menor de 54 bits" -#: gram.y:13478 +#: gram.y:13456 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "el número de parámetros es incorrecto al lado izquierdo de la expresión OVERLAPS" -#: gram.y:13483 +#: gram.y:13461 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "el número de parámetros es incorrecto al lado derecho de la expresión OVERLAPS" -#: gram.y:13651 +#: gram.y:13629 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "el predicado UNIQUE no está implementado" -#: gram.y:14010 +#: gram.y:13988 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "no se permiten múltiples cláusulas ORDER BY con WITHIN GROUP" -#: gram.y:14015 +#: gram.y:13993 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "no se permite DISTINCT con WITHIN GROUP" -#: gram.y:14020 +#: gram.y:13998 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "no se permite VARIADIC con WITHIN GROUP" -#: gram.y:14544 gram.y:14567 +#: gram.y:14522 gram.y:14545 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "el inicio de «frame» no puede ser UNBOUNDED FOLLOWING" -#: gram.y:14549 +#: gram.y:14527 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "el «frame» que se inicia desde la siguiente fila no puede terminar en la fila actual" -#: gram.y:14572 +#: gram.y:14550 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "el fin de «frame» no puede ser UNBOUNDED PRECEDING" -#: gram.y:14578 +#: gram.y:14556 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "el «frame» que se inicia desde la fila actual no puede tener filas precedentes" -#: gram.y:14585 +#: gram.y:14563 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "el «frame» que se inicia desde la fila siguiente no puede tener filas precedentes" -#: gram.y:15217 +#: gram.y:15195 #, c-format msgid "type modifier cannot have parameter name" msgstr "el modificador de tipo no puede tener nombre de parámetro" -#: gram.y:15223 +#: gram.y:15201 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "el modificador de tipo no puede tener ORDER BY" -#: gram.y:15288 gram.y:15295 gram.y:15302 +#: gram.y:15266 gram.y:15273 gram.y:15280 #, c-format msgid "%s cannot be used as a role name here" msgstr "%s no puede ser usado como nombre de rol aquí" -#: gram.y:15391 gram.y:16823 +#: gram.y:15369 gram.y:16800 #, fuzzy, c-format #| msgid "WITH TIES cannot be specified without ORDER BY clause" msgid "WITH TIES cannot be specified without ORDER BY clause" msgstr "la opción WITH TIES no puede ser especificada sin una cláusula ORDER BY" -#: gram.y:16499 gram.y:16688 +#: gram.y:16477 gram.y:16666 msgid "improper use of \"*\"" msgstr "uso impropio de «*»" -#: gram.y:16651 gram.y:16668 tsearch/spell.c:982 tsearch/spell.c:999 +#: gram.y:16629 gram.y:16646 tsearch/spell.c:982 tsearch/spell.c:999 #: tsearch/spell.c:1016 tsearch/spell.c:1033 tsearch/spell.c:1098 #, c-format msgid "syntax error" msgstr "error de sintaxis" -#: gram.y:16753 +#: gram.y:16730 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "una agregación de conjunto-ordenado con un argumento directo VARIADIC debe tener al menos un argumento agregado VARIADIC del mismo tipo de datos" -#: gram.y:16790 +#: gram.y:16767 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "no se permiten múltiples cláusulas ORDER BY" -#: gram.y:16801 +#: gram.y:16778 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "no se permiten múltiples cláusulas OFFSET" -#: gram.y:16810 +#: gram.y:16787 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "no se permiten múltiples cláusulas LIMIT" -#: gram.y:16819 +#: gram.y:16796 #, c-format msgid "multiple limit options not allowed" msgstr "no se permiten múltiples opciones limit" -#: gram.y:16831 +#: gram.y:16808 #, c-format msgid "multiple WITH clauses not allowed" msgstr "no se permiten múltiples cláusulas WITH" -#: gram.y:17023 +#: gram.y:17002 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "los argumentos OUT e INOUT no están permitidos en funciones TABLE" -#: gram.y:17119 +#: gram.y:17098 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "no se permiten múltiples cláusulas COLLATE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:17157 gram.y:17170 +#: gram.y:17136 gram.y:17149 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "las restricciones %s no pueden ser marcadas DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:17183 +#: gram.y:17162 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "las restricciones %s no pueden ser marcadas NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:17196 +#: gram.y:17175 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "las restricciones %s no pueden ser marcadas NO INHERIT" @@ -13181,9 +13201,9 @@ msgstr "las restricciones %s no pueden ser marcadas NO INHERIT" msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "parámetro de configuración «%s» no reconocido en el archivo «%s» línea %u" -#: guc-file.l:351 utils/misc/guc.c:7341 utils/misc/guc.c:7539 -#: utils/misc/guc.c:7633 utils/misc/guc.c:7727 utils/misc/guc.c:7847 -#: utils/misc/guc.c:7946 +#: guc-file.l:351 utils/misc/guc.c:7360 utils/misc/guc.c:7558 +#: utils/misc/guc.c:7652 utils/misc/guc.c:7746 utils/misc/guc.c:7866 +#: utils/misc/guc.c:7965 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "el parámetro «%s» no se puede cambiar sin reiniciar el servidor" @@ -13228,7 +13248,7 @@ msgstr "no se pudo abrir el archivo de configuración «%s»: nivel de anidamien msgid "configuration file recursion in \"%s\"" msgstr "recursión de archivos de configuración en «%s»" -#: guc-file.l:630 libpq/hba.c:2245 libpq/hba.c:2659 +#: guc-file.l:630 libpq/hba.c:2251 libpq/hba.c:2665 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "no se pudo abrir el archivo de configuración «%s»: %m" @@ -13642,7 +13662,7 @@ msgstr "el tamaño del paquete de contraseña no es válido" msgid "empty password returned by client" msgstr "el cliente retornó una contraseña vacía" -#: libpq/auth.c:887 libpq/hba.c:1368 +#: libpq/auth.c:887 libpq/hba.c:1366 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "la autentificación MD5 no está soportada cuando «db_user_namespace» está activo" @@ -13958,7 +13978,7 @@ msgstr "secreto RADIUS no especificado" msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "la autentificación RADIUS no soporta contraseñas más largas de %d caracteres" -#: libpq/auth.c:3197 libpq/hba.c:1998 +#: libpq/auth.c:3197 libpq/hba.c:2004 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "no se pudo traducir el nombre de servidor RADIUS «%s» a dirección: %s" @@ -14230,155 +14250,155 @@ msgstr "no se pudo definir el rango de versión de protocolo SSL" msgid "\"%s\" cannot be higher than \"%s\"" msgstr "«%s» no puede ser más alto que «%s»" -#: libpq/be-secure-openssl.c:265 +#: libpq/be-secure-openssl.c:275 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "no se pudo establecer la lista de cifrado (no hay cifradores disponibles)" -#: libpq/be-secure-openssl.c:285 +#: libpq/be-secure-openssl.c:295 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "no se pudo cargar el archivo del certificado raíz «%s»: %s" -#: libpq/be-secure-openssl.c:334 +#: libpq/be-secure-openssl.c:344 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "no se pudo cargar el archivo de lista de revocación de certificados SSL «%s»: %s" -#: libpq/be-secure-openssl.c:342 +#: libpq/be-secure-openssl.c:352 #, fuzzy, c-format #| msgid "could not load SSL certificate revocation list file \"%s\": %s" msgid "could not load SSL certificate revocation list directory \"%s\": %s" msgstr "no se pudo cargar el archivo de lista de revocación de certificados SSL «%s»: %s" -#: libpq/be-secure-openssl.c:350 +#: libpq/be-secure-openssl.c:360 #, fuzzy, c-format #| msgid "could not load SSL certificate revocation list file \"%s\": %s" msgid "could not load SSL certificate revocation list file \"%s\" or directory \"%s\": %s" msgstr "no se pudo cargar el archivo de lista de revocación de certificados SSL «%s»: %s" -#: libpq/be-secure-openssl.c:408 +#: libpq/be-secure-openssl.c:418 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "no se pudo inicializar la conexión SSL: el contexto SSL no está instalado" -#: libpq/be-secure-openssl.c:419 +#: libpq/be-secure-openssl.c:429 #, c-format msgid "could not initialize SSL connection: %s" msgstr "no se pudo inicializar la conexión SSL: %s" -#: libpq/be-secure-openssl.c:427 +#: libpq/be-secure-openssl.c:437 #, c-format msgid "could not set SSL socket: %s" msgstr "no se definir un socket SSL: %s" -#: libpq/be-secure-openssl.c:482 +#: libpq/be-secure-openssl.c:492 #, c-format msgid "could not accept SSL connection: %m" msgstr "no se pudo aceptar una conexión SSL: %m" -#: libpq/be-secure-openssl.c:486 libpq/be-secure-openssl.c:539 +#: libpq/be-secure-openssl.c:496 libpq/be-secure-openssl.c:549 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "no se pudo aceptar una conexión SSL: se detectó EOF" -#: libpq/be-secure-openssl.c:525 +#: libpq/be-secure-openssl.c:535 #, c-format msgid "could not accept SSL connection: %s" msgstr "no se pudo aceptar una conexión SSL: %s" -#: libpq/be-secure-openssl.c:528 +#: libpq/be-secure-openssl.c:538 #, c-format msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." msgstr "Esto puede indicar que el cliente no soporta ninguna versión del protocolo SSL entre %s and %s." -#: libpq/be-secure-openssl.c:544 libpq/be-secure-openssl.c:724 -#: libpq/be-secure-openssl.c:788 +#: libpq/be-secure-openssl.c:554 libpq/be-secure-openssl.c:734 +#: libpq/be-secure-openssl.c:798 #, c-format msgid "unrecognized SSL error code: %d" msgstr "código de error SSL no reconocido: %d" -#: libpq/be-secure-openssl.c:590 +#: libpq/be-secure-openssl.c:600 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "el «common name» del certificado SSL contiene un carácter null" -#: libpq/be-secure-openssl.c:630 +#: libpq/be-secure-openssl.c:640 #, fuzzy, c-format #| msgid "SSL certificate's name contains embedded null\n" msgid "SSL certificate's distinguished name contains embedded null" msgstr "el elemento de nombre en el certificado SSL contiene un carácter null\n" -#: libpq/be-secure-openssl.c:713 libpq/be-secure-openssl.c:772 +#: libpq/be-secure-openssl.c:723 libpq/be-secure-openssl.c:782 #, c-format msgid "SSL error: %s" msgstr "error de SSL: %s" -#: libpq/be-secure-openssl.c:953 +#: libpq/be-secure-openssl.c:963 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "no se pudo abrir el archivo de parámetros DH «%s»: %m" -#: libpq/be-secure-openssl.c:965 +#: libpq/be-secure-openssl.c:975 #, c-format msgid "could not load DH parameters file: %s" msgstr "no se pudo cargar el archivo de parámetros DH: %s" -#: libpq/be-secure-openssl.c:975 +#: libpq/be-secure-openssl.c:985 #, c-format msgid "invalid DH parameters: %s" msgstr "parámetros DH no válidos: %s" -#: libpq/be-secure-openssl.c:984 +#: libpq/be-secure-openssl.c:994 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "parámetros DH no válidos: p no es primo" -#: libpq/be-secure-openssl.c:993 +#: libpq/be-secure-openssl.c:1003 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "parámetros DH no válidos: no hay generador apropiado o primo seguro" -#: libpq/be-secure-openssl.c:1154 +#: libpq/be-secure-openssl.c:1164 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: no se pudo cargar los parámetros DH" -#: libpq/be-secure-openssl.c:1162 +#: libpq/be-secure-openssl.c:1172 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: no se pudo definir los parámetros DH: %s" -#: libpq/be-secure-openssl.c:1189 +#: libpq/be-secure-openssl.c:1199 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: nombre de curva no reconocida: %s" -#: libpq/be-secure-openssl.c:1198 +#: libpq/be-secure-openssl.c:1208 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: no se pudo crear la llave" -#: libpq/be-secure-openssl.c:1226 +#: libpq/be-secure-openssl.c:1236 msgid "no SSL error reported" msgstr "código de error SSL no reportado" -#: libpq/be-secure-openssl.c:1230 +#: libpq/be-secure-openssl.c:1240 #, c-format msgid "SSL error code %lu" msgstr "código de error SSL %lu" -#: libpq/be-secure-openssl.c:1384 +#: libpq/be-secure-openssl.c:1394 #, c-format msgid "failed to create BIO" msgstr "" -#: libpq/be-secure-openssl.c:1394 +#: libpq/be-secure-openssl.c:1404 #, c-format msgid "could not get NID for ASN1_OBJECT object" msgstr "" -#: libpq/be-secure-openssl.c:1402 +#: libpq/be-secure-openssl.c:1412 #, fuzzy, c-format #| msgid "could not create LDAP structure\n" msgid "could not convert NID %d to an ASN1_OBJECT structure" @@ -14419,377 +14439,390 @@ msgstr "La contraseña no coincide para el usuario «%s»." msgid "Password of user \"%s\" is in unrecognized format." msgstr "La contraseña del usuario \"%s\" está en un formato no reconocido." -#: libpq/hba.c:243 +#: libpq/hba.c:241 #, c-format msgid "authentication file token too long, skipping: \"%s\"" msgstr "una palabra en el archivo de autentificación es demasiado larga, omitiendo: «%s»" -#: libpq/hba.c:415 +#: libpq/hba.c:413 #, c-format msgid "could not open secondary authentication file \"@%s\" as \"%s\": %m" msgstr "no se pudo abrir el archivo secundario de autentificación «@%s» como «%s»: %m" -#: libpq/hba.c:861 +#: libpq/hba.c:859 #, fuzzy, c-format #| msgid "error during file seek: %m" msgid "error enumerating network interfaces: %m" msgstr "error durante el posicionamiento (seek) en el archivo: %m" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:888 +#: libpq/hba.c:886 #, c-format msgid "authentication option \"%s\" is only valid for authentication methods %s" msgstr "la opción de autentificación «%s» sólo es válida para los métodos de autentificación %s" -#: libpq/hba.c:890 libpq/hba.c:910 libpq/hba.c:948 libpq/hba.c:998 -#: libpq/hba.c:1012 libpq/hba.c:1036 libpq/hba.c:1045 libpq/hba.c:1058 -#: libpq/hba.c:1079 libpq/hba.c:1092 libpq/hba.c:1112 libpq/hba.c:1134 -#: libpq/hba.c:1146 libpq/hba.c:1205 libpq/hba.c:1225 libpq/hba.c:1239 -#: libpq/hba.c:1259 libpq/hba.c:1270 libpq/hba.c:1285 libpq/hba.c:1304 -#: libpq/hba.c:1320 libpq/hba.c:1332 libpq/hba.c:1369 libpq/hba.c:1410 -#: libpq/hba.c:1423 libpq/hba.c:1445 libpq/hba.c:1457 libpq/hba.c:1475 -#: libpq/hba.c:1525 libpq/hba.c:1569 libpq/hba.c:1580 libpq/hba.c:1596 -#: libpq/hba.c:1613 libpq/hba.c:1623 libpq/hba.c:1683 libpq/hba.c:1721 -#: libpq/hba.c:1738 libpq/hba.c:1751 libpq/hba.c:1763 libpq/hba.c:1782 -#: libpq/hba.c:1869 libpq/hba.c:1887 libpq/hba.c:1981 libpq/hba.c:2000 -#: libpq/hba.c:2029 libpq/hba.c:2042 libpq/hba.c:2065 libpq/hba.c:2087 -#: libpq/hba.c:2101 tsearch/ts_locale.c:232 +#: libpq/hba.c:888 libpq/hba.c:908 libpq/hba.c:946 libpq/hba.c:996 +#: libpq/hba.c:1010 libpq/hba.c:1034 libpq/hba.c:1043 libpq/hba.c:1056 +#: libpq/hba.c:1077 libpq/hba.c:1090 libpq/hba.c:1110 libpq/hba.c:1132 +#: libpq/hba.c:1144 libpq/hba.c:1203 libpq/hba.c:1223 libpq/hba.c:1237 +#: libpq/hba.c:1257 libpq/hba.c:1268 libpq/hba.c:1283 libpq/hba.c:1302 +#: libpq/hba.c:1318 libpq/hba.c:1330 libpq/hba.c:1367 libpq/hba.c:1408 +#: libpq/hba.c:1421 libpq/hba.c:1443 libpq/hba.c:1455 libpq/hba.c:1473 +#: libpq/hba.c:1523 libpq/hba.c:1567 libpq/hba.c:1578 libpq/hba.c:1594 +#: libpq/hba.c:1611 libpq/hba.c:1622 libpq/hba.c:1641 libpq/hba.c:1657 +#: libpq/hba.c:1673 libpq/hba.c:1727 libpq/hba.c:1744 libpq/hba.c:1757 +#: libpq/hba.c:1769 libpq/hba.c:1788 libpq/hba.c:1875 libpq/hba.c:1893 +#: libpq/hba.c:1987 libpq/hba.c:2006 libpq/hba.c:2035 libpq/hba.c:2048 +#: libpq/hba.c:2071 libpq/hba.c:2093 libpq/hba.c:2107 tsearch/ts_locale.c:232 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "línea %d del archivo de configuración «%s»" -#: libpq/hba.c:908 +#: libpq/hba.c:906 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "el método de autentificación «%s» requiere que el argumento «%s» esté definido" -#: libpq/hba.c:936 +#: libpq/hba.c:934 #, c-format msgid "missing entry in file \"%s\" at end of line %d" msgstr "falta una entrada en el archivo «%s» al final de la línea %d" -#: libpq/hba.c:947 +#: libpq/hba.c:945 #, c-format msgid "multiple values in ident field" msgstr "múltiples valores en campo «ident»" -#: libpq/hba.c:996 +#: libpq/hba.c:994 #, c-format msgid "multiple values specified for connection type" msgstr "múltiples valores especificados para tipo de conexión" -#: libpq/hba.c:997 +#: libpq/hba.c:995 #, c-format msgid "Specify exactly one connection type per line." msgstr "Especifique exactamente un tipo de conexión por línea." -#: libpq/hba.c:1011 +#: libpq/hba.c:1009 #, c-format msgid "local connections are not supported by this build" msgstr "las conexiones locales no están soportadas en este servidor" -#: libpq/hba.c:1034 +#: libpq/hba.c:1032 #, c-format msgid "hostssl record cannot match because SSL is disabled" msgstr "el registro hostssl no puede coincidir porque SSL está deshabilitado" -#: libpq/hba.c:1035 +#: libpq/hba.c:1033 #, c-format msgid "Set ssl = on in postgresql.conf." msgstr "Defina «ssl = on» en postgresql.conf." -#: libpq/hba.c:1043 +#: libpq/hba.c:1041 #, c-format msgid "hostssl record cannot match because SSL is not supported by this build" msgstr "el registro hostssl no puede coincidir porque SSL no está soportado en esta instalación" -#: libpq/hba.c:1044 +#: libpq/hba.c:1042 #, fuzzy, c-format #| msgid "Compile with --with-openssl to use SSL connections." msgid "Compile with --with-ssl to use SSL connections." msgstr "Compile con --with-openssl para usar conexiones SSL." -#: libpq/hba.c:1056 +#: libpq/hba.c:1054 #, c-format msgid "hostgssenc record cannot match because GSSAPI is not supported by this build" msgstr "el registro hostgssenc no puede coincidir porque GSSAPI no está soportado en esta instalación" -#: libpq/hba.c:1057 +#: libpq/hba.c:1055 #, c-format msgid "Compile with --with-gssapi to use GSSAPI connections." msgstr "Compile con --with-gssapi para usar conexiones GSSAPI." -#: libpq/hba.c:1077 +#: libpq/hba.c:1075 #, c-format msgid "invalid connection type \"%s\"" msgstr "tipo de conexión «%s» no válido" -#: libpq/hba.c:1091 +#: libpq/hba.c:1089 #, c-format msgid "end-of-line before database specification" msgstr "fin de línea antes de especificación de base de datos" -#: libpq/hba.c:1111 +#: libpq/hba.c:1109 #, c-format msgid "end-of-line before role specification" msgstr "fin de línea antes de especificación de rol" -#: libpq/hba.c:1133 +#: libpq/hba.c:1131 #, c-format msgid "end-of-line before IP address specification" msgstr "fin de línea antes de especificación de dirección IP" -#: libpq/hba.c:1144 +#: libpq/hba.c:1142 #, c-format msgid "multiple values specified for host address" msgstr "múltiples valores especificados para la dirección de anfitrión" -#: libpq/hba.c:1145 +#: libpq/hba.c:1143 #, c-format msgid "Specify one address range per line." msgstr "Especifique un rango de direcciones por línea." -#: libpq/hba.c:1203 +#: libpq/hba.c:1201 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "dirección IP «%s» no válida: %s" -#: libpq/hba.c:1223 +#: libpq/hba.c:1221 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "especificar tanto el nombre de host como la máscara CIDR no es válido: «%s»" -#: libpq/hba.c:1237 +#: libpq/hba.c:1235 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "máscara CIDR no válida en dirección «%s»" -#: libpq/hba.c:1257 +#: libpq/hba.c:1255 #, c-format msgid "end-of-line before netmask specification" msgstr "fin de línea antes de especificación de máscara de red" -#: libpq/hba.c:1258 +#: libpq/hba.c:1256 #, c-format msgid "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "Especifique un rango de direcciones en notación CIDR, o provea una netmask separadamente." -#: libpq/hba.c:1269 +#: libpq/hba.c:1267 #, c-format msgid "multiple values specified for netmask" msgstr "múltiples valores especificados para la máscara de red" -#: libpq/hba.c:1283 +#: libpq/hba.c:1281 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "máscara IP «%s» no válida: %s" -#: libpq/hba.c:1303 +#: libpq/hba.c:1301 #, c-format msgid "IP address and mask do not match" msgstr "La dirección y máscara IP no coinciden" -#: libpq/hba.c:1319 +#: libpq/hba.c:1317 #, c-format msgid "end-of-line before authentication method" msgstr "fin de línea antes de especificación de método de autentificación" -#: libpq/hba.c:1330 +#: libpq/hba.c:1328 #, c-format msgid "multiple values specified for authentication type" msgstr "múltiples valores especificados para el tipo de autentificación" -#: libpq/hba.c:1331 +#: libpq/hba.c:1329 #, c-format msgid "Specify exactly one authentication type per line." msgstr "Especifique exactamente un tipo de autentificación por línea." -#: libpq/hba.c:1408 +#: libpq/hba.c:1406 #, c-format msgid "invalid authentication method \"%s\"" msgstr "método de autentificación «%s» no válido" -#: libpq/hba.c:1421 +#: libpq/hba.c:1419 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "método de autentificación «%s» no válido: este servidor no lo soporta" -#: libpq/hba.c:1444 +#: libpq/hba.c:1442 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "la autentificación gssapi no está soportada en conexiones locales" -#: libpq/hba.c:1456 +#: libpq/hba.c:1454 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "la autentificación peer sólo está soportada en conexiones locales" -#: libpq/hba.c:1474 +#: libpq/hba.c:1472 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "la autentificación cert sólo está soportada en conexiones hostssl" -#: libpq/hba.c:1524 +#: libpq/hba.c:1522 #, c-format msgid "authentication option not in name=value format: %s" msgstr "opción de autentificación en formato nombre=valor: %s" -#: libpq/hba.c:1568 +#: libpq/hba.c:1566 #, c-format msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" msgstr "no se puede usar ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter o ldapurl junto con ldapprefix" -#: libpq/hba.c:1579 +#: libpq/hba.c:1577 #, c-format msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" msgstr "el método de autentificación «ldap» requiere que los argumento «ldapbasedn», «ldapprefix» o «ldapsuffix» estén definidos" -#: libpq/hba.c:1595 +#: libpq/hba.c:1593 #, c-format msgid "cannot use ldapsearchattribute together with ldapsearchfilter" msgstr "no se puede usar ldapsearchattribute junto con ldapsearchfilter" -#: libpq/hba.c:1612 +#: libpq/hba.c:1610 #, c-format msgid "list of RADIUS servers cannot be empty" msgstr "la lista de servidores RADIUS no puede ser vacía" -#: libpq/hba.c:1622 +#: libpq/hba.c:1621 #, c-format msgid "list of RADIUS secrets cannot be empty" msgstr "la lista de secretos RADIUS no puede ser vacía" -#: libpq/hba.c:1677 -#, c-format -msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" +#: libpq/hba.c:1638 +#, fuzzy, c-format +#| msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" +msgid "the number of RADIUS secrets (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "el número de %s (%d) debe ser 1 o igual al número de %s (%d)" -#: libpq/hba.c:1711 +#: libpq/hba.c:1654 +#, fuzzy, c-format +#| msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" +msgid "the number of RADIUS ports (%d) must be 1 or the same as the number of RADIUS servers (%d)" +msgstr "el número de %s (%d) debe ser 1 o igual al número de %s (%d)" + +#: libpq/hba.c:1670 +#, fuzzy, c-format +#| msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" +msgid "the number of RADIUS identifiers (%d) must be 1 or the same as the number of RADIUS servers (%d)" +msgstr "el número de %s (%d) debe ser 1 o igual al número de %s (%d)" + +#: libpq/hba.c:1717 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi y cert" -#: libpq/hba.c:1720 +#: libpq/hba.c:1726 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert sólo puede ser configurado en líneas «hostssl»" -#: libpq/hba.c:1737 +#: libpq/hba.c:1743 #, fuzzy, c-format #| msgid "clientcert can not be set to \"no-verify\" when using \"cert\" authentication" msgid "clientcert only accepts \"verify-full\" when using \"cert\" authentication" msgstr "clientcert no puede establecerse a «no-verify» cuando se emplea autentificación «cert»" -#: libpq/hba.c:1750 +#: libpq/hba.c:1756 #, c-format msgid "invalid value for clientcert: \"%s\"" msgstr "valor no válido para el parámetro clientcert: «%s»" -#: libpq/hba.c:1762 +#: libpq/hba.c:1768 #, fuzzy, c-format #| msgid "clientcert can only be configured for \"hostssl\" rows" msgid "clientname can only be configured for \"hostssl\" rows" msgstr "clientcert sólo puede ser configurado en líneas «hostssl»" -#: libpq/hba.c:1781 +#: libpq/hba.c:1787 #, fuzzy, c-format #| msgid "invalid value for clientcert: \"%s\"" msgid "invalid value for clientname: \"%s\"" msgstr "valor no válido para el parámetro clientcert: «%s»" -#: libpq/hba.c:1815 +#: libpq/hba.c:1821 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "no se pudo interpretar la URL LDAP «%s»: %s" -#: libpq/hba.c:1826 +#: libpq/hba.c:1832 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "esquema de URL LDAP no soportado: %s" -#: libpq/hba.c:1850 +#: libpq/hba.c:1856 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "las URLs LDAP no está soportado en esta plataforma" -#: libpq/hba.c:1868 +#: libpq/hba.c:1874 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "valor ldapscheme no válido: «%s»" -#: libpq/hba.c:1886 +#: libpq/hba.c:1892 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "número de puerto LDAP no válido: «%s»" -#: libpq/hba.c:1932 libpq/hba.c:1939 +#: libpq/hba.c:1938 libpq/hba.c:1945 msgid "gssapi and sspi" msgstr "gssapi y sspi" -#: libpq/hba.c:1948 libpq/hba.c:1957 +#: libpq/hba.c:1954 libpq/hba.c:1963 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:1979 +#: libpq/hba.c:1985 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "no se pudo interpretar la lista de servidores RADIUS «%s»" -#: libpq/hba.c:2027 +#: libpq/hba.c:2033 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "no se pudo interpretar la lista de port RADIUS «%s»" -#: libpq/hba.c:2041 +#: libpq/hba.c:2047 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "número de puerto RADIUS no válido: «%s»" -#: libpq/hba.c:2063 +#: libpq/hba.c:2069 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "no se pudo interpretar la lista de secretos RADIUS «%s»" -#: libpq/hba.c:2085 +#: libpq/hba.c:2091 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "no se pudo interpretar la lista de identificadoes RADIUS «%s»" -#: libpq/hba.c:2099 +#: libpq/hba.c:2105 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "nombre de opción de autentificación desconocido: «%s»" -#: libpq/hba.c:2296 +#: libpq/hba.c:2302 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "el archivo de configuración «%s» no contiene líneas" -#: libpq/hba.c:2814 +#: libpq/hba.c:2820 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "la expresión regular «%s» no es válida: %s" -#: libpq/hba.c:2874 +#: libpq/hba.c:2880 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "la coincidencia de expresión regular para «%s» falló: %s" -#: libpq/hba.c:2893 +#: libpq/hba.c:2899 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "la expresión regular «%s» no tiene subexpresiones según lo requiere la referencia hacia atrás en «%s»" -#: libpq/hba.c:2989 +#: libpq/hba.c:2995 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "el nombre de usuario entregado (%s) y el nombre de usuario autentificado (%s) no coinciden" -#: libpq/hba.c:3009 +#: libpq/hba.c:3015 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "no hay coincidencia en el mapa «%s» para el usuario «%s» autentificado como «%s»" -#: libpq/hba.c:3042 +#: libpq/hba.c:3048 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "no se pudo abrir el archivo de mapa de usuarios «%s»: %m" @@ -15303,7 +15336,7 @@ msgstr "«%s» no es un tipo compuesto" #: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2472 #: parser/parse_coerce.c:2584 parser/parse_coerce.c:2630 -#: parser/parse_expr.c:2021 parser/parse_func.c:709 parser/parse_oper.c:883 +#: parser/parse_expr.c:2021 parser/parse_func.c:710 parser/parse_oper.c:883 #: utils/fmgr/funcapi.c:558 #, c-format msgid "could not find array type for data type %s" @@ -15333,8 +15366,8 @@ msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s no puede ser aplicado al lado nulable de un outer join" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1315 parser/analyze.c:1675 parser/analyze.c:1919 -#: parser/analyze.c:3013 +#: optimizer/plan/planner.c:1315 parser/analyze.c:1677 parser/analyze.c:1921 +#: parser/analyze.c:3099 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s no está permitido con UNION/INTERSECT/EXCEPT" @@ -15396,7 +15429,7 @@ msgstr "Todos los tipos de dato de las columnas deben ser tipos de los que se pu msgid "could not implement %s" msgstr "no se pudo implementar %s" -#: optimizer/util/clauses.c:4670 +#: optimizer/util/clauses.c:4721 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "función SQL «%s», durante expansión en línea" @@ -15426,73 +15459,73 @@ msgstr "ON CONFLICT DO UPDATE no está soportado con restricciones de exclusión msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "no hay restricción única o de exclusión que coincida con la especificación ON CONFLICT" -#: parser/analyze.c:735 parser/analyze.c:1449 +#: parser/analyze.c:737 parser/analyze.c:1451 #, c-format msgid "VALUES lists must all be the same length" msgstr "las listas VALUES deben ser todas de la misma longitud" -#: parser/analyze.c:936 +#: parser/analyze.c:938 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT tiene más expresiones que columnas de destino" -#: parser/analyze.c:954 +#: parser/analyze.c:956 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERT tiene más columnas de destino que expresiones" -#: parser/analyze.c:958 +#: parser/analyze.c:960 #, c-format msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "La fuente de inserción es una expresión de fila que contiene la misma cantidad de columnas que esperaba el INSERT. ¿Usó accidentalmente paréntesis extra?" -#: parser/analyze.c:1257 parser/analyze.c:1648 +#: parser/analyze.c:1259 parser/analyze.c:1650 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO no está permitido aquí" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1578 parser/analyze.c:3192 +#: parser/analyze.c:1580 parser/analyze.c:3278 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s no puede ser aplicado a VALUES" -#: parser/analyze.c:1814 +#: parser/analyze.c:1816 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "cláusula UNION/INTERSECT/EXCEPT ORDER BY no válida" -#: parser/analyze.c:1815 +#: parser/analyze.c:1817 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "Sólo nombres de columna del resultado pueden usarse, no expresiones o funciones." -#: parser/analyze.c:1816 +#: parser/analyze.c:1818 #, c-format msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." msgstr "Agregue la función o expresión a todos los SELECT, o mueva el UNION dentro de una cláusula FROM." -#: parser/analyze.c:1909 +#: parser/analyze.c:1911 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "sólo se permite INTO en el primer SELECT de UNION/INTERSECT/EXCEPT" -#: parser/analyze.c:1981 +#: parser/analyze.c:1983 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "una sentencia miembro de UNION/INSERT/EXCEPT no puede referirse a otras relaciones del mismo nivel de la consulta" -#: parser/analyze.c:2068 +#: parser/analyze.c:2070 #, c-format msgid "each %s query must have the same number of columns" msgstr "cada consulta %s debe tener el mismo número de columnas" -#: parser/analyze.c:2468 +#: parser/analyze.c:2470 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNING debe tener al menos una columna" -#: parser/analyze.c:2571 +#: parser/analyze.c:2573 #, fuzzy, c-format #| msgid "query \"%s\" returned %d column" #| msgid_plural "query \"%s\" returned %d columns" @@ -15501,147 +15534,147 @@ msgid_plural "assignment source returned %d columns" msgstr[0] "la consulta «%s» retornó %d columna" msgstr[1] "la consulta «%s» retornó %d columnas" -#: parser/analyze.c:2632 +#: parser/analyze.c:2634 #, fuzzy, c-format #| msgid "subfield \"%s\" is of type %s but expression is of type %s" msgid "variable \"%s\" is of type %s but expression is of type %s" msgstr "el subcampo «%s» es de tipo %s pero la expresión es de tipo %s" #. translator: %s is a SQL keyword -#: parser/analyze.c:2756 parser/analyze.c:2764 +#: parser/analyze.c:2758 parser/analyze.c:2766 #, fuzzy, c-format #| msgid "cannot specify both SCROLL and NO SCROLL" msgid "cannot specify both %s and %s" msgstr "no se puede especificar SCROLL y NO SCROLL" -#: parser/analyze.c:2784 +#: parser/analyze.c:2786 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR no debe contener sentencias que modifiquen datos en WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2792 +#: parser/analyze.c:2794 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s no está soportado" -#: parser/analyze.c:2795 +#: parser/analyze.c:2797 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "Los cursores declarados HOLD deben ser READ ONLY." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2803 +#: parser/analyze.c:2805 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s no está soportado" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2814 +#: parser/analyze.c:2816 #, fuzzy, c-format #| msgid "DECLARE INSENSITIVE CURSOR ... %s is not supported" msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s no está soportado" -#: parser/analyze.c:2817 +#: parser/analyze.c:2819 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Los cursores insensitivos deben ser READ ONLY." -#: parser/analyze.c:2883 +#: parser/analyze.c:2885 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "las vistas materializadas no deben usar sentencias que modifiquen datos en WITH" -#: parser/analyze.c:2893 +#: parser/analyze.c:2895 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "las vistas materializadas no deben usar tablas temporales o vistas" -#: parser/analyze.c:2903 +#: parser/analyze.c:2905 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "las vistas materializadas no pueden definirse usando parámetros enlazados" -#: parser/analyze.c:2915 +#: parser/analyze.c:2917 #, c-format msgid "materialized views cannot be unlogged" msgstr "las vistas materializadas no pueden ser «unlogged»" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3020 +#: parser/analyze.c:3106 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s no está permitido con cláusulas DISTINCT" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3027 +#: parser/analyze.c:3113 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s no está permitido con cláusulas GROUP BY" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3034 +#: parser/analyze.c:3120 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s no está permitido con cláusulas HAVING" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3041 +#: parser/analyze.c:3127 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s no está permitido con funciones de agregación" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3048 +#: parser/analyze.c:3134 #, c-format msgid "%s is not allowed with window functions" msgstr "%s no está permitido con funciones de ventana deslizante" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3055 +#: parser/analyze.c:3141 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "%s no está permitido con funciones que retornan conjuntos en la lista de resultados" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3134 +#: parser/analyze.c:3220 #, c-format msgid "%s must specify unqualified relation names" msgstr "%s debe especificar nombres de relaciones sin calificar" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3165 +#: parser/analyze.c:3251 #, c-format msgid "%s cannot be applied to a join" msgstr "%s no puede ser aplicado a un join" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3174 +#: parser/analyze.c:3260 #, c-format msgid "%s cannot be applied to a function" msgstr "%s no puede ser aplicado a una función" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3183 +#: parser/analyze.c:3269 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s no puede ser aplicado a una función de tabla" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3201 +#: parser/analyze.c:3287 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s no puede ser aplicado a una consulta WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3210 +#: parser/analyze.c:3296 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%s no puede ser aplicado a un «tuplestore» con nombre" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3230 +#: parser/analyze.c:3316 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "la relación «%s» en la cláusula %s no fue encontrada en la cláusula FROM" @@ -15826,7 +15859,7 @@ msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "no se permiten las operaciones «grouping» en condiciones WHERE de COPY FROM" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:578 parser/parse_clause.c:1847 +#: parser/parse_agg.c:578 parser/parse_clause.c:1846 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "no se permiten funciones de agregación en %s" @@ -15848,7 +15881,7 @@ msgid "aggregate function calls cannot contain set-returning function calls" msgstr "las llamadas a funciones de agregación no pueden contener llamadas a funciones que retornan conjuntos" #: parser/parse_agg.c:769 parser/parse_expr.c:1673 parser/parse_expr.c:2146 -#: parser/parse_func.c:882 +#: parser/parse_func.c:883 #, c-format msgid "You might be able to move the set-returning function into a LATERAL FROM item." msgstr "Puede intentar mover la funci[on que retorna conjuntos a un elemento LATERAL FROM." @@ -15929,12 +15962,12 @@ msgid "window functions are not allowed in column generation expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones de generación de columna" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:971 parser/parse_clause.c:1856 +#: parser/parse_agg.c:971 parser/parse_clause.c:1855 #, c-format msgid "window functions are not allowed in %s" msgstr "no se permiten funciones de ventana deslizante en %s" -#: parser/parse_agg.c:1005 parser/parse_clause.c:2690 +#: parser/parse_agg.c:1005 parser/parse_clause.c:2689 #, c-format msgid "window \"%s\" does not exist" msgstr "la ventana «%s» no existe" @@ -15974,274 +16007,274 @@ msgstr "los argumentos de GROUPING deben ser expresiones agrupantes del nivel de msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "relación «%s» no puede ser destino de una sentencia modificadora" -#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2438 +#: parser/parse_clause.c:570 parser/parse_clause.c:598 parser/parse_func.c:2554 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "las funciones que retornan conjuntos deben aparecer en el nivel más externo del FROM" -#: parser/parse_clause.c:611 +#: parser/parse_clause.c:610 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "no se permiten múltiples definiciones de columnas para la misma función" -#: parser/parse_clause.c:644 +#: parser/parse_clause.c:643 #, c-format msgid "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "ROWS FROM() con varias funciones no puede tener una lista de definición de columnas" -#: parser/parse_clause.c:645 +#: parser/parse_clause.c:644 #, c-format msgid "Put a separate column definition list for each function inside ROWS FROM()." msgstr "Ponga una lista de columnas separada para cada función dentro de ROWS FROM()." -#: parser/parse_clause.c:651 +#: parser/parse_clause.c:650 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "UNNEST() con varios argumentos no puede tener una lista de definición de columnas" -#: parser/parse_clause.c:652 +#: parser/parse_clause.c:651 #, c-format msgid "Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one." msgstr "Use llamadas a UNNEST() separadas dentro de ROWS FROM() y adjunte una lista de columnas a cada una." -#: parser/parse_clause.c:659 +#: parser/parse_clause.c:658 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY no puede usarse con una lista de definición de columnas" -#: parser/parse_clause.c:660 +#: parser/parse_clause.c:659 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "Ponga una lista de columnas dentro de ROWS FROM()." -#: parser/parse_clause.c:760 +#: parser/parse_clause.c:759 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "sólo se permite una columna FOR ORDINALITY" -#: parser/parse_clause.c:821 +#: parser/parse_clause.c:820 #, c-format msgid "column name \"%s\" is not unique" msgstr "el nombre de columna «%s» no es único" -#: parser/parse_clause.c:863 +#: parser/parse_clause.c:862 #, c-format msgid "namespace name \"%s\" is not unique" msgstr "el espacio de nombres «%s» no es único" -#: parser/parse_clause.c:873 +#: parser/parse_clause.c:872 #, c-format msgid "only one default namespace is allowed" msgstr "sólo se permite un espacio de nombres predeterminado" -#: parser/parse_clause.c:933 +#: parser/parse_clause.c:932 #, c-format msgid "tablesample method %s does not exist" msgstr "no existe el método de tablesample «%s»" -#: parser/parse_clause.c:955 +#: parser/parse_clause.c:954 #, c-format msgid "tablesample method %s requires %d argument, not %d" msgid_plural "tablesample method %s requires %d arguments, not %d" msgstr[0] "el método de tablesample «%s» requiere %d argumento, no %d" msgstr[1] "el método de tablesample «%s» requiere %d argumentos, no %d" -#: parser/parse_clause.c:989 +#: parser/parse_clause.c:988 #, c-format msgid "tablesample method %s does not support REPEATABLE" msgstr "el método de tablesample «%s» no soporta la opción REPEATABLE" -#: parser/parse_clause.c:1135 +#: parser/parse_clause.c:1134 #, c-format msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "la cláusula TABLESAMPLE sólo puede aplicarse a tablas y vistas materializadas" -#: parser/parse_clause.c:1325 +#: parser/parse_clause.c:1324 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "la columna «%s» aparece más de una vez en la cláusula USING" -#: parser/parse_clause.c:1340 +#: parser/parse_clause.c:1339 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "la columna común «%s» aparece más de una vez en la tabla izquierda" -#: parser/parse_clause.c:1349 +#: parser/parse_clause.c:1348 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "la columna «%s» especificada en la cláusula USING no existe en la tabla izquierda" -#: parser/parse_clause.c:1364 +#: parser/parse_clause.c:1363 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "la columna común «%s» aparece más de una vez en la tabla derecha" -#: parser/parse_clause.c:1373 +#: parser/parse_clause.c:1372 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "la columna «%s» especificada en la cláusula USING no existe en la tabla derecha" -#: parser/parse_clause.c:1452 +#: parser/parse_clause.c:1451 #, c-format msgid "column alias list for \"%s\" has too many entries" msgstr "la lista de alias de columnas para «%s» tiene demasiadas entradas" -#: parser/parse_clause.c:1792 +#: parser/parse_clause.c:1791 #, fuzzy, c-format #| msgid "row count cannot be NULL in FETCH FIRST ... WITH TIES clause" msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" msgstr "la cantidad de registros no puede ser nula en la cláusula FETCH FIRST ... WITH TIES" #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1817 +#: parser/parse_clause.c:1816 #, c-format msgid "argument of %s must not contain variables" msgstr "el argumento de %s no puede contener variables" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1982 +#: parser/parse_clause.c:1981 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "%s «%s» es ambiguo" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2011 +#: parser/parse_clause.c:2010 #, c-format msgid "non-integer constant in %s" msgstr "constante no entera en %s" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2033 +#: parser/parse_clause.c:2032 #, c-format msgid "%s position %d is not in select list" msgstr "la posición %2$d de %1$s no está en la lista de resultados" -#: parser/parse_clause.c:2472 +#: parser/parse_clause.c:2471 #, c-format msgid "CUBE is limited to 12 elements" msgstr "CUBE está limitado a 12 elementos" -#: parser/parse_clause.c:2678 +#: parser/parse_clause.c:2677 #, c-format msgid "window \"%s\" is already defined" msgstr "la ventana «%s» ya está definida" -#: parser/parse_clause.c:2739 +#: parser/parse_clause.c:2738 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "no se puede pasar a llevar la cláusula PARTITION BY de la ventana «%s»" -#: parser/parse_clause.c:2751 +#: parser/parse_clause.c:2750 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "no se puede pasar a llevar la cláusula ORDER BY de la ventana «%s»" -#: parser/parse_clause.c:2781 parser/parse_clause.c:2787 +#: parser/parse_clause.c:2780 parser/parse_clause.c:2786 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "no se puede copiar la ventana «%s» porque tiene una cláusula «frame»" -#: parser/parse_clause.c:2789 +#: parser/parse_clause.c:2788 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Omita el uso de paréntesis en esta cláusula OVER." -#: parser/parse_clause.c:2809 +#: parser/parse_clause.c:2808 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" msgstr "RANGE con desplazamiento PRECEDING/FOLLOWING requiere exactamente una columna ORDER BY" -#: parser/parse_clause.c:2832 +#: parser/parse_clause.c:2831 #, c-format msgid "GROUPS mode requires an ORDER BY clause" msgstr "el modo GROUPS requiere una cláusula ORDER BY" -#: parser/parse_clause.c:2902 +#: parser/parse_clause.c:2901 #, c-format msgid "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list" msgstr "en una agregación con DISTINCT, las expresiones en ORDER BY deben aparecer en la lista de argumentos" -#: parser/parse_clause.c:2903 +#: parser/parse_clause.c:2902 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "para SELECT DISTINCT, las expresiones en ORDER BY deben aparecer en la lista de resultados" -#: parser/parse_clause.c:2935 +#: parser/parse_clause.c:2934 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "una función de agregación con DISTINCT debe tener al menos un argumento" -#: parser/parse_clause.c:2936 +#: parser/parse_clause.c:2935 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCT debe tener al menos una columna" -#: parser/parse_clause.c:3002 parser/parse_clause.c:3034 +#: parser/parse_clause.c:3001 parser/parse_clause.c:3033 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "las expresiones de SELECT DISTINCT ON deben coincidir con las expresiones iniciales de ORDER BY" -#: parser/parse_clause.c:3112 +#: parser/parse_clause.c:3111 #, c-format msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "ASC/DESC no están permitidos en cláusulas ON CONFLICT" -#: parser/parse_clause.c:3118 +#: parser/parse_clause.c:3117 #, c-format msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "NULLS FIRST/LAST no están permitidos en cláusulas ON CONFLICT" -#: parser/parse_clause.c:3197 +#: parser/parse_clause.c:3196 #, c-format msgid "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "ON CONFLICT DO UPDATE requiere una especificación de inferencia o nombre de restricción" -#: parser/parse_clause.c:3198 +#: parser/parse_clause.c:3197 #, c-format msgid "For example, ON CONFLICT (column_name)." msgstr "Por ejemplo, ON CONFLICT (nombre_de_columna)." -#: parser/parse_clause.c:3209 +#: parser/parse_clause.c:3208 #, c-format msgid "ON CONFLICT is not supported with system catalog tables" msgstr "ON CONFLICT no está soportado con tablas que son catálogos de sistema" -#: parser/parse_clause.c:3217 +#: parser/parse_clause.c:3216 #, c-format msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" msgstr "ON CONFLICT no está soportado en la tabla «%s» usada como catálogo de sistema" -#: parser/parse_clause.c:3347 +#: parser/parse_clause.c:3346 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "el operador «%s» no es un operador válido de ordenamiento" -#: parser/parse_clause.c:3349 +#: parser/parse_clause.c:3348 #, c-format msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "Los operadores de ordenamiento deben ser miembros «<» o «>» de una familia de operadores btree." -#: parser/parse_clause.c:3660 +#: parser/parse_clause.c:3659 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" msgstr "RANGE con desplazamiento PRECEDING/FOLLOWING no está soportado para la columna de tipo %s" -#: parser/parse_clause.c:3666 +#: parser/parse_clause.c:3665 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s" msgstr "RANGE con desplazamiento PRECEDING/FOLLOWING no está soportado para la columna de tipo %s y tipo de desplazamiento %s" -#: parser/parse_clause.c:3669 +#: parser/parse_clause.c:3668 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "Convierta el valor de desplazamiento a un tipo apropiado." -#: parser/parse_clause.c:3674 +#: parser/parse_clause.c:3673 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s" msgstr "RANGE con desplazamiento PRECEDING/FOLLOWING tiene múltiples interpretaciones para la columna de tipo %s y tipo de desplazamiento %s" -#: parser/parse_clause.c:3677 +#: parser/parse_clause.c:3676 #, c-format msgid "Cast the offset value to the exact intended type." msgstr "Convierta el valor de desplazamiento al tipo deseado exacto." @@ -16666,7 +16699,7 @@ msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() ex msgstr "el origen para un UPDATE de varias columnas debe ser una expresión sub-SELECT o ROW ()" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1671 parser/parse_expr.c:2144 parser/parse_func.c:2560 +#: parser/parse_expr.c:1671 parser/parse_expr.c:2144 parser/parse_func.c:2676 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "no se permiten funciones que retornan conjuntos en %s" @@ -16815,77 +16848,77 @@ msgstr "Hay múltiples candidatos igualmente plausibles." msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROM requiere que el operador = retorne boolean" -#: parser/parse_func.c:192 +#: parser/parse_func.c:194 #, c-format msgid "argument name \"%s\" used more than once" msgstr "nombre de argumento «%s» especificado más de una vez" -#: parser/parse_func.c:203 +#: parser/parse_func.c:205 #, c-format msgid "positional argument cannot follow named argument" msgstr "un argumento posicional no puede seguir a un argumento con nombre" -#: parser/parse_func.c:286 parser/parse_func.c:2257 +#: parser/parse_func.c:287 parser/parse_func.c:2369 #, c-format msgid "%s is not a procedure" msgstr "%s no es un procedimiento" -#: parser/parse_func.c:290 +#: parser/parse_func.c:291 #, c-format msgid "To call a function, use SELECT." msgstr "Para invocar a una función, use SELECT." -#: parser/parse_func.c:296 +#: parser/parse_func.c:297 #, c-format msgid "%s is a procedure" msgstr "%s es un procedimiento" -#: parser/parse_func.c:300 +#: parser/parse_func.c:301 #, c-format msgid "To call a procedure, use CALL." msgstr "Para invocar a un procedimiento, use CALL." -#: parser/parse_func.c:314 +#: parser/parse_func.c:315 #, c-format msgid "%s(*) specified, but %s is not an aggregate function" msgstr "se especificó %s(*), pero %s no es una función de agregación" -#: parser/parse_func.c:321 +#: parser/parse_func.c:322 #, c-format msgid "DISTINCT specified, but %s is not an aggregate function" msgstr "se especificó DISTINCT, pero %s no es una función de agregación" -#: parser/parse_func.c:327 +#: parser/parse_func.c:328 #, c-format msgid "WITHIN GROUP specified, but %s is not an aggregate function" msgstr "se especificó WITHIN GROUP, pero %s no es una función de agregación" -#: parser/parse_func.c:333 +#: parser/parse_func.c:334 #, c-format msgid "ORDER BY specified, but %s is not an aggregate function" msgstr "se especificó ORDER BY, pero %s no es una función de agregación" -#: parser/parse_func.c:339 +#: parser/parse_func.c:340 #, c-format msgid "FILTER specified, but %s is not an aggregate function" msgstr "se especificó FILTER, pero %s no es una función de agregación" -#: parser/parse_func.c:345 +#: parser/parse_func.c:346 #, c-format msgid "OVER specified, but %s is not a window function nor an aggregate function" msgstr "se especificó OVER, pero %s no es una función de ventana deslizante ni una función de agregación" -#: parser/parse_func.c:383 +#: parser/parse_func.c:384 #, c-format msgid "WITHIN GROUP is required for ordered-set aggregate %s" msgstr "WITHIN GROUP es obligatorio para la función de agregación de conjuntos ordenados %s" -#: parser/parse_func.c:389 +#: parser/parse_func.c:390 #, c-format msgid "OVER is not supported for ordered-set aggregate %s" msgstr "OVER no está soportado para la función de agregación de conjuntos ordenados %s" -#: parser/parse_func.c:420 parser/parse_func.c:451 +#: parser/parse_func.c:421 parser/parse_func.c:452 #, fuzzy, c-format #| msgid "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." msgid "There is an ordered-set aggregate %s, but it requires %d direct argument, not %d." @@ -16893,12 +16926,12 @@ msgid_plural "There is an ordered-set aggregate %s, but it requires %d direct ar msgstr[0] "Hay una función de agregación de conjuntos ordenados %s, pero requiere %d argumentos directos, no %d." msgstr[1] "Hay una función de agregación de conjuntos ordenados %s, pero requiere %d argumentos directos, no %d." -#: parser/parse_func.c:478 +#: parser/parse_func.c:479 #, c-format msgid "To use the hypothetical-set aggregate %s, the number of hypothetical direct arguments (here %d) must match the number of ordering columns (here %d)." msgstr "Para usar la función de agregación de conjunto hipotética %s, el número de argumentos hipotéticos directos (acá %d) debe coincidir con el número de columnas del ordenamiento (acá %d)." -#: parser/parse_func.c:492 +#: parser/parse_func.c:493 #, fuzzy, c-format #| msgid "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." msgid "There is an ordered-set aggregate %s, but it requires at least %d direct argument." @@ -16906,251 +16939,251 @@ msgid_plural "There is an ordered-set aggregate %s, but it requires at least %d msgstr[0] "Hay una función de agregación de conjuntos ordenados %s, pero requiere al menos %d argumentos directos" msgstr[1] "Hay una función de agregación de conjuntos ordenados %s, pero requiere al menos %d argumentos directos" -#: parser/parse_func.c:513 +#: parser/parse_func.c:514 #, c-format msgid "%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP" msgstr "%s no es una función de agregación de conjunto ordenado, por lo que no puede tener WITHIN GROUP" -#: parser/parse_func.c:526 +#: parser/parse_func.c:527 #, c-format msgid "window function %s requires an OVER clause" msgstr "la función de ventana deslizante %s requiere una cláusula OVER" -#: parser/parse_func.c:533 +#: parser/parse_func.c:534 #, c-format msgid "window function %s cannot have WITHIN GROUP" msgstr "la función de ventana deslizante %s no puede tener WITHIN GROUP" -#: parser/parse_func.c:562 +#: parser/parse_func.c:563 #, c-format msgid "procedure %s is not unique" msgstr "la procedimiento %s no es único" -#: parser/parse_func.c:565 +#: parser/parse_func.c:566 #, c-format msgid "Could not choose a best candidate procedure. You might need to add explicit type casts." msgstr "No se pudo escoger el procedimiento más adecuado. Puede ser necesario agregar conversiones explícitas de tipos." -#: parser/parse_func.c:571 +#: parser/parse_func.c:572 #, c-format msgid "function %s is not unique" msgstr "la función %s no es única" -#: parser/parse_func.c:574 +#: parser/parse_func.c:575 #, c-format msgid "Could not choose a best candidate function. You might need to add explicit type casts." msgstr "No se pudo escoger la función más adecuada. Puede ser necesario agregar conversiones explícitas de tipos." -#: parser/parse_func.c:613 +#: parser/parse_func.c:614 #, c-format msgid "No aggregate function matches the given name and argument types. Perhaps you misplaced ORDER BY; ORDER BY must appear after all regular arguments of the aggregate." msgstr "Ninguna función coincide en el nombre y tipos de argumentos. Quizás puso ORDER BY en una mala posición; ORDER BY debe aparecer después de todos los argumentos normales de la función de agregación." -#: parser/parse_func.c:621 parser/parse_func.c:2300 +#: parser/parse_func.c:622 parser/parse_func.c:2412 #, c-format msgid "procedure %s does not exist" msgstr "no existe el procedimiento «%s»" -#: parser/parse_func.c:624 +#: parser/parse_func.c:625 #, c-format msgid "No procedure matches the given name and argument types. You might need to add explicit type casts." msgstr "Ningún procedimiento coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos." -#: parser/parse_func.c:633 +#: parser/parse_func.c:634 #, c-format msgid "No function matches the given name and argument types. You might need to add explicit type casts." msgstr "Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos." -#: parser/parse_func.c:735 +#: parser/parse_func.c:736 #, c-format msgid "VARIADIC argument must be an array" msgstr "el parámetro VARIADIC debe ser un array" -#: parser/parse_func.c:789 parser/parse_func.c:853 +#: parser/parse_func.c:790 parser/parse_func.c:854 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "%s(*) debe ser usado para invocar una función de agregación sin parámetros" -#: parser/parse_func.c:796 +#: parser/parse_func.c:797 #, c-format msgid "aggregates cannot return sets" msgstr "las funciones de agregación no pueden retornar conjuntos" -#: parser/parse_func.c:811 +#: parser/parse_func.c:812 #, c-format msgid "aggregates cannot use named arguments" msgstr "las funciones de agregación no pueden usar argumentos con nombre" -#: parser/parse_func.c:843 +#: parser/parse_func.c:844 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "DISTINCT no está implementado para funciones de ventana deslizante" -#: parser/parse_func.c:863 +#: parser/parse_func.c:864 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "el ORDER BY de funciones de agregación no está implementado para funciones de ventana deslizante" -#: parser/parse_func.c:872 +#: parser/parse_func.c:873 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "FILTER no está implementado para funciones de ventana deslizante" -#: parser/parse_func.c:881 +#: parser/parse_func.c:882 #, c-format msgid "window function calls cannot contain set-returning function calls" msgstr "las llamadas a funciones de ventana no pueden contener llamadas a funciones que retornan conjuntos" -#: parser/parse_func.c:889 +#: parser/parse_func.c:890 #, c-format msgid "window functions cannot return sets" msgstr "las funciones de ventana deslizante no pueden retornar conjuntos" -#: parser/parse_func.c:2138 parser/parse_func.c:2329 +#: parser/parse_func.c:2168 parser/parse_func.c:2441 #, c-format msgid "could not find a function named \"%s\"" msgstr "no se pudo encontrar una función llamada «%s»" -#: parser/parse_func.c:2152 parser/parse_func.c:2347 +#: parser/parse_func.c:2182 parser/parse_func.c:2459 #, c-format msgid "function name \"%s\" is not unique" msgstr "el nombre de función «%s» no es único" -#: parser/parse_func.c:2154 parser/parse_func.c:2349 +#: parser/parse_func.c:2184 parser/parse_func.c:2462 #, c-format msgid "Specify the argument list to select the function unambiguously." msgstr "Especifique la lista de argumentos para seleccionar la función sin ambigüedad." -#: parser/parse_func.c:2198 +#: parser/parse_func.c:2228 #, c-format msgid "procedures cannot have more than %d argument" msgid_plural "procedures cannot have more than %d arguments" msgstr[0] "los procedimientos no pueden tener más de %d argumento" msgstr[1] "los procedimientos no pueden tener más de %d argumentos" -#: parser/parse_func.c:2247 +#: parser/parse_func.c:2359 #, c-format msgid "%s is not a function" msgstr "«%s» no es una función" -#: parser/parse_func.c:2267 +#: parser/parse_func.c:2379 #, c-format msgid "function %s is not an aggregate" msgstr "la función %s no es una función de agregación" -#: parser/parse_func.c:2295 +#: parser/parse_func.c:2407 #, c-format msgid "could not find a procedure named \"%s\"" msgstr "no se pudo encontrar un procedimiento llamado «%s»" -#: parser/parse_func.c:2309 +#: parser/parse_func.c:2421 #, c-format msgid "could not find an aggregate named \"%s\"" msgstr "no se pudo encontrar una función de agregación llamada «%s»" -#: parser/parse_func.c:2314 +#: parser/parse_func.c:2426 #, c-format msgid "aggregate %s(*) does not exist" msgstr "no existe la función de agregación %s(*)" -#: parser/parse_func.c:2319 +#: parser/parse_func.c:2431 #, c-format msgid "aggregate %s does not exist" msgstr "no existe la función de agregación %s" -#: parser/parse_func.c:2354 +#: parser/parse_func.c:2467 #, c-format msgid "procedure name \"%s\" is not unique" msgstr "el nombre de procedimiento «%s» no es única" -#: parser/parse_func.c:2356 +#: parser/parse_func.c:2470 #, c-format msgid "Specify the argument list to select the procedure unambiguously." msgstr "Especifique la lista de argumentos para seleccionar el procedimiento sin ambigüedad." -#: parser/parse_func.c:2361 +#: parser/parse_func.c:2475 #, c-format msgid "aggregate name \"%s\" is not unique" msgstr "el atributo de la función de agregación «%s» no es único" -#: parser/parse_func.c:2363 +#: parser/parse_func.c:2478 #, c-format msgid "Specify the argument list to select the aggregate unambiguously." msgstr "Especifique la lista de argumentos para seleccionar la función de agregación sin ambigüedad." -#: parser/parse_func.c:2368 +#: parser/parse_func.c:2483 #, c-format msgid "routine name \"%s\" is not unique" msgstr "el nombre de rutina «%s» no es único" -#: parser/parse_func.c:2370 +#: parser/parse_func.c:2486 #, c-format msgid "Specify the argument list to select the routine unambiguously." msgstr "Especifique la lista de argumentos para seleccionar la rutina sin ambigüedad." -#: parser/parse_func.c:2425 +#: parser/parse_func.c:2541 msgid "set-returning functions are not allowed in JOIN conditions" msgstr "no se permiten funciones que retornan conjuntos en condiciones JOIN" -#: parser/parse_func.c:2446 +#: parser/parse_func.c:2562 msgid "set-returning functions are not allowed in policy expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de política" -#: parser/parse_func.c:2462 +#: parser/parse_func.c:2578 msgid "set-returning functions are not allowed in window definitions" msgstr "no se permiten funciones que retornan conjuntos definiciones de ventana deslizante" -#: parser/parse_func.c:2500 +#: parser/parse_func.c:2616 msgid "set-returning functions are not allowed in check constraints" msgstr "no se permiten funciones de que retornan conjuntos en restricciones «check»" -#: parser/parse_func.c:2504 +#: parser/parse_func.c:2620 msgid "set-returning functions are not allowed in DEFAULT expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones DEFAULT" -#: parser/parse_func.c:2507 +#: parser/parse_func.c:2623 msgid "set-returning functions are not allowed in index expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de índice" -#: parser/parse_func.c:2510 +#: parser/parse_func.c:2626 msgid "set-returning functions are not allowed in index predicates" msgstr "no se permiten funciones que retornan conjuntos en predicados de índice" -#: parser/parse_func.c:2513 +#: parser/parse_func.c:2629 #, fuzzy #| msgid "set-returning functions are not allowed in policy expressions" msgid "set-returning functions are not allowed in statistics expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de política" -#: parser/parse_func.c:2516 +#: parser/parse_func.c:2632 msgid "set-returning functions are not allowed in transform expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de transformación" -#: parser/parse_func.c:2519 +#: parser/parse_func.c:2635 msgid "set-returning functions are not allowed in EXECUTE parameters" msgstr "no se permiten funciones que retornan conjuntos en parámetros a EXECUTE" -#: parser/parse_func.c:2522 +#: parser/parse_func.c:2638 msgid "set-returning functions are not allowed in trigger WHEN conditions" msgstr "no se permiten funciones que retornan conjuntos en condiciones WHEN de un disparador" -#: parser/parse_func.c:2525 +#: parser/parse_func.c:2641 msgid "set-returning functions are not allowed in partition bound" msgstr "no se permiten funciones que retornan conjuntos en bordes de partición" -#: parser/parse_func.c:2528 +#: parser/parse_func.c:2644 msgid "set-returning functions are not allowed in partition key expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de llave de particionamiento" -#: parser/parse_func.c:2531 +#: parser/parse_func.c:2647 msgid "set-returning functions are not allowed in CALL arguments" msgstr "no se permiten funciones que retornan conjuntos en argumentos de CALL" -#: parser/parse_func.c:2534 +#: parser/parse_func.c:2650 msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" msgstr "no se permiten funciones que retornan conjuntos en las condiciones WHERE de COPY FROM" -#: parser/parse_func.c:2537 +#: parser/parse_func.c:2653 msgid "set-returning functions are not allowed in column generation expressions" msgstr "no se permiten funciones que retornan conjuntos en expresiones de generación de columna" @@ -17165,8 +17198,8 @@ msgstr "las listas de resultados pueden tener a lo más %d entradas" msgid "postfix operators are not supported" msgstr "el formato de log «%s» no está soportado" -#: parser/parse_oper.c:130 parser/parse_oper.c:649 utils/adt/regproc.c:538 -#: utils/adt/regproc.c:722 +#: parser/parse_oper.c:130 parser/parse_oper.c:649 utils/adt/regproc.c:539 +#: utils/adt/regproc.c:723 #, c-format msgid "operator does not exist: %s" msgstr "el operador no existe: %s" @@ -18130,47 +18163,47 @@ msgstr "Active la opción «track_counts»." msgid "inconsistent background worker state (max_worker_processes=%d, total_slots=%d)" msgstr "" -#: postmaster/bgworker.c:650 +#: postmaster/bgworker.c:661 #, c-format msgid "background worker \"%s\": must attach to shared memory in order to request a database connection" msgstr "proceso ayudante «%s»: debe acoplarse a memoria compartida para poder solicitar una conexión a base de datos" -#: postmaster/bgworker.c:659 +#: postmaster/bgworker.c:670 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "proceso ayudante «%s»: no se puede solicitar una conexión a base de datos si está iniciando en el momento de inicio de postmaster" -#: postmaster/bgworker.c:673 +#: postmaster/bgworker.c:684 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "proceso ayudante «%s»: intervalo de reinicio no válido" -#: postmaster/bgworker.c:688 +#: postmaster/bgworker.c:699 #, c-format msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "proceso ayudante «%s»: los ayudantes paralelos no pueden ser configurados «restart»" -#: postmaster/bgworker.c:712 tcop/postgres.c:3188 +#: postmaster/bgworker.c:723 tcop/postgres.c:3188 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "terminando el proceso ayudante «%s» debido a una orden del administrador" -#: postmaster/bgworker.c:893 +#: postmaster/bgworker.c:904 #, c-format msgid "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "proceso ayudante «%s»: debe ser registrado en shared_preload_libraries" -#: postmaster/bgworker.c:905 +#: postmaster/bgworker.c:916 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "proceso ayudante «%s»: sólo los ayudantes dinámicos pueden pedir notificaciones" -#: postmaster/bgworker.c:920 +#: postmaster/bgworker.c:931 #, c-format msgid "too many background workers" msgstr "demasiados procesos ayudantes" -#: postmaster/bgworker.c:921 +#: postmaster/bgworker.c:932 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." @@ -18178,7 +18211,7 @@ msgstr[0] "Hasta %d proceso ayudante puede registrarse con la configuración act msgstr[1] "Hasta %d procesos ayudantes pueden registrarse con la configuración actual." # FIXME a %s would be nice here -#: postmaster/bgworker.c:925 +#: postmaster/bgworker.c:936 #, c-format msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Considere incrementar el parámetro de configuración «max_worker_processes»." @@ -18242,7 +18275,7 @@ msgstr "La orden fallida era: «%s»" msgid "archive command was terminated by exception 0x%X" msgstr "la orden de archivado fue terminada por una excepción 0x%X" -#: postmaster/pgarch.c:552 postmaster/postmaster.c:3722 +#: postmaster/pgarch.c:552 postmaster/postmaster.c:3724 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "Vea el archivo «ntstatus.h» para una descripción del valor hexadecimal." @@ -18327,213 +18360,213 @@ msgstr "desactivando el recolector de estadísticas por falla del socket" msgid "could not fork statistics collector: %m" msgstr "no se pudo crear el proceso para el recolector de estadísticas: %m" -#: postmaster/pgstat.c:1449 +#: postmaster/pgstat.c:1459 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "destino de reset no reconocido: «%s»" -#: postmaster/pgstat.c:1450 +#: postmaster/pgstat.c:1460 #, fuzzy, c-format #| msgid "Target must be \"archiver\" or \"bgwriter\"." msgid "Target must be \"archiver\", \"bgwriter\" or \"wal\"." msgstr "El destino debe ser «archiver» o «bgwriter»." -#: postmaster/pgstat.c:3285 +#: postmaster/pgstat.c:3298 #, c-format msgid "could not read statistics message: %m" msgstr "no se pudo leer un mensaje de estadísticas: %m" -#: postmaster/pgstat.c:3631 postmaster/pgstat.c:3816 +#: postmaster/pgstat.c:3644 postmaster/pgstat.c:3829 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "no se pudo abrir el archivo temporal de estadísticas «%s»: %m" -#: postmaster/pgstat.c:3726 postmaster/pgstat.c:3861 +#: postmaster/pgstat.c:3739 postmaster/pgstat.c:3874 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "no se pudo escribir el archivo temporal de estadísticas «%s»: %m" -#: postmaster/pgstat.c:3735 postmaster/pgstat.c:3870 +#: postmaster/pgstat.c:3748 postmaster/pgstat.c:3883 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "no se pudo cerrar el archivo temporal de estadísticas «%s»: %m" -#: postmaster/pgstat.c:3743 postmaster/pgstat.c:3878 +#: postmaster/pgstat.c:3756 postmaster/pgstat.c:3891 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "no se pudo cambiar el nombre al archivo temporal de estadísticas de «%s» a «%s»: %m" -#: postmaster/pgstat.c:3976 postmaster/pgstat.c:4242 postmaster/pgstat.c:4399 +#: postmaster/pgstat.c:3989 postmaster/pgstat.c:4255 postmaster/pgstat.c:4412 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "no se pudo abrir el archivo de estadísticas «%s»: %m" -#: postmaster/pgstat.c:3988 postmaster/pgstat.c:3998 postmaster/pgstat.c:4019 -#: postmaster/pgstat.c:4030 postmaster/pgstat.c:4041 postmaster/pgstat.c:4063 -#: postmaster/pgstat.c:4078 postmaster/pgstat.c:4148 postmaster/pgstat.c:4179 -#: postmaster/pgstat.c:4254 postmaster/pgstat.c:4274 postmaster/pgstat.c:4292 -#: postmaster/pgstat.c:4308 postmaster/pgstat.c:4326 postmaster/pgstat.c:4342 -#: postmaster/pgstat.c:4411 postmaster/pgstat.c:4423 postmaster/pgstat.c:4435 -#: postmaster/pgstat.c:4446 postmaster/pgstat.c:4457 postmaster/pgstat.c:4482 -#: postmaster/pgstat.c:4509 postmaster/pgstat.c:4522 +#: postmaster/pgstat.c:4001 postmaster/pgstat.c:4011 postmaster/pgstat.c:4032 +#: postmaster/pgstat.c:4043 postmaster/pgstat.c:4054 postmaster/pgstat.c:4076 +#: postmaster/pgstat.c:4091 postmaster/pgstat.c:4161 postmaster/pgstat.c:4192 +#: postmaster/pgstat.c:4267 postmaster/pgstat.c:4287 postmaster/pgstat.c:4305 +#: postmaster/pgstat.c:4321 postmaster/pgstat.c:4339 postmaster/pgstat.c:4355 +#: postmaster/pgstat.c:4424 postmaster/pgstat.c:4436 postmaster/pgstat.c:4448 +#: postmaster/pgstat.c:4459 postmaster/pgstat.c:4470 postmaster/pgstat.c:4495 +#: postmaster/pgstat.c:4522 postmaster/pgstat.c:4535 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "el archivo de estadísticas «%s» está corrupto" -#: postmaster/pgstat.c:4631 +#: postmaster/pgstat.c:4644 #, c-format msgid "statistics collector's time %s is later than backend local time %s" msgstr "" -#: postmaster/pgstat.c:4654 +#: postmaster/pgstat.c:4667 #, c-format msgid "using stale statistics instead of current ones because stats collector is not responding" msgstr "usando estadísticas añejas en vez de actualizadas porque el recolector de estadísticas no está respondiendo" -#: postmaster/pgstat.c:4781 +#: postmaster/pgstat.c:4794 #, c-format msgid "stats_timestamp %s is later than collector's time %s for database %u" msgstr "" -#: postmaster/pgstat.c:4991 +#: postmaster/pgstat.c:5004 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "el hash de bases de datos se corrompió durante la finalización; abortando" -#: postmaster/postmaster.c:743 +#: postmaster/postmaster.c:745 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: argumento no válido para la opción -f: «%s»\n" -#: postmaster/postmaster.c:822 +#: postmaster/postmaster.c:824 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: argumento no válido para la opción -t: «%s»\n" -#: postmaster/postmaster.c:873 +#: postmaster/postmaster.c:875 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: argumento no válido: «%s»\n" -#: postmaster/postmaster.c:915 +#: postmaster/postmaster.c:917 #, c-format msgid "%s: superuser_reserved_connections (%d) must be less than max_connections (%d)\n" msgstr "%s: superuser_reserved_connections (%d) debe ser menor que max_connections (%d)\n" -#: postmaster/postmaster.c:922 +#: postmaster/postmaster.c:924 #, c-format msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" msgstr "el archivador de WAL no puede activarse cuando wal_level es «minimal»" -#: postmaster/postmaster.c:925 +#: postmaster/postmaster.c:927 #, c-format msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" msgstr "el flujo de WAL (max_wal_senders > 0) requiere wal_level «replica» o «logical»" -#: postmaster/postmaster.c:933 +#: postmaster/postmaster.c:935 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: las tablas de palabras clave de fecha no son válidas, arréglelas\n" -#: postmaster/postmaster.c:1050 +#: postmaster/postmaster.c:1052 #, c-format msgid "could not create I/O completion port for child queue" msgstr "no se pudo crear el port E/S de reporte de completitud para la cola de procesos hijos" -#: postmaster/postmaster.c:1115 +#: postmaster/postmaster.c:1117 #, c-format msgid "ending log output to stderr" msgstr "terminando la salida de registro a stderr" -#: postmaster/postmaster.c:1116 +#: postmaster/postmaster.c:1118 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "La salida futura del registro será enviada al destino de log «%s»." -#: postmaster/postmaster.c:1127 +#: postmaster/postmaster.c:1129 #, c-format msgid "starting %s" msgstr "iniciando %s" -#: postmaster/postmaster.c:1156 postmaster/postmaster.c:1255 +#: postmaster/postmaster.c:1158 postmaster/postmaster.c:1257 #: utils/init/miscinit.c:1627 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "la sintaxis de lista no es válida para el parámetro «%s»" -#: postmaster/postmaster.c:1187 +#: postmaster/postmaster.c:1189 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "no se pudo crear el socket de escucha para «%s»" -#: postmaster/postmaster.c:1193 +#: postmaster/postmaster.c:1195 #, c-format msgid "could not create any TCP/IP sockets" msgstr "no se pudo crear ningún socket TCP/IP" -#: postmaster/postmaster.c:1225 +#: postmaster/postmaster.c:1227 #, fuzzy, c-format #| msgid "pgpipe: getsockname() failed: error code %d" msgid "DNSServiceRegister() failed: error code %ld" msgstr "pgpipe: getsockname() falló: código de error %d" -#: postmaster/postmaster.c:1277 +#: postmaster/postmaster.c:1279 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "no se pudo crear el socket de dominio Unix en el directorio «%s»" -#: postmaster/postmaster.c:1283 +#: postmaster/postmaster.c:1285 #, c-format msgid "could not create any Unix-domain sockets" msgstr "no se pudo crear ningún socket de dominio Unix" -#: postmaster/postmaster.c:1295 +#: postmaster/postmaster.c:1297 #, c-format msgid "no socket created for listening" msgstr "no se creó el socket de atención" -#: postmaster/postmaster.c:1326 +#: postmaster/postmaster.c:1328 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: no se pudo cambiar los permisos del archivo de PID externo «%s»: %s\n" -#: postmaster/postmaster.c:1330 +#: postmaster/postmaster.c:1332 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: no pudo escribir en el archivo externo de PID «%s»: %s\n" -#: postmaster/postmaster.c:1363 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1365 utils/init/postinit.c:216 #, c-format msgid "could not load pg_hba.conf" msgstr "no se pudo cargar pg_hba.conf" -#: postmaster/postmaster.c:1389 +#: postmaster/postmaster.c:1391 #, c-format msgid "postmaster became multithreaded during startup" msgstr "postmaster se volvió multi-hilo durante la partida" -#: postmaster/postmaster.c:1390 +#: postmaster/postmaster.c:1392 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Defina la variable de ambiente LC_ALL a un valor válido." -#: postmaster/postmaster.c:1485 +#: postmaster/postmaster.c:1487 #, fuzzy, c-format #| msgid "%s: could not locate my own executable path\n" msgid "%s: could not locate my own executable path" msgstr "%s: no se pudo localizar la ruta de mi propio ejecutable\n" -#: postmaster/postmaster.c:1492 +#: postmaster/postmaster.c:1494 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: no se pudo localizar el ejecutable postgres correspondiente" -#: postmaster/postmaster.c:1515 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1517 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Esto puede indicar una instalación de PostgreSQL incompleta, o que el archivo «%s» ha sido movido de la ubicación adecuada." -#: postmaster/postmaster.c:1542 +#: postmaster/postmaster.c:1544 #, c-format msgid "" "%s: could not find the database system\n" @@ -18544,461 +18577,472 @@ msgstr "" "Se esperaba encontrar en el directorio PGDATA «%s»,\n" "pero no se pudo abrir el archivo «%s»: %s\n" -#: postmaster/postmaster.c:1719 +#: postmaster/postmaster.c:1721 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() falló en postmaster: %m" -#: postmaster/postmaster.c:1855 +#: postmaster/postmaster.c:1857 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "" -#: postmaster/postmaster.c:1876 +#: postmaster/postmaster.c:1878 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "ejecutando un apagado inmediato porque el archivo de bloqueo del directorio de datos no es válido" -#: postmaster/postmaster.c:1979 postmaster/postmaster.c:2007 +#: postmaster/postmaster.c:1981 postmaster/postmaster.c:2009 #, c-format msgid "incomplete startup packet" msgstr "el paquete de inicio está incompleto" -#: postmaster/postmaster.c:1991 +#: postmaster/postmaster.c:1993 #, c-format msgid "invalid length of startup packet" msgstr "el de paquete de inicio tiene largo incorrecto" -#: postmaster/postmaster.c:2046 +#: postmaster/postmaster.c:2048 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "no se pudo enviar la respuesta de negociación SSL: %m" -#: postmaster/postmaster.c:2078 +#: postmaster/postmaster.c:2080 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "no se pudo enviar la respuesta de negociación GSSAPI: %m" -#: postmaster/postmaster.c:2108 +#: postmaster/postmaster.c:2110 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "el protocolo %u.%u no está soportado: servidor soporta %u.0 hasta %u.%u" -#: postmaster/postmaster.c:2172 utils/misc/guc.c:7093 utils/misc/guc.c:7129 -#: utils/misc/guc.c:7199 utils/misc/guc.c:8531 utils/misc/guc.c:11487 -#: utils/misc/guc.c:11528 +#: postmaster/postmaster.c:2174 utils/misc/guc.c:7112 utils/misc/guc.c:7148 +#: utils/misc/guc.c:7218 utils/misc/guc.c:8550 utils/misc/guc.c:11506 +#: utils/misc/guc.c:11547 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "valor no válido para el parámetro «%s»: «%s»" -#: postmaster/postmaster.c:2175 +#: postmaster/postmaster.c:2177 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Los valores válidos son: «false», 0, «true», 1, «database»." -#: postmaster/postmaster.c:2220 +#: postmaster/postmaster.c:2222 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "el paquete de inicio no es válido: se esperaba un terminador en el último byte" -#: postmaster/postmaster.c:2237 +#: postmaster/postmaster.c:2239 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "no se especifica un nombre de usuario en el paquete de inicio" -#: postmaster/postmaster.c:2301 +#: postmaster/postmaster.c:2303 #, c-format msgid "the database system is starting up" msgstr "el sistema de base de datos está iniciándose" -#: postmaster/postmaster.c:2307 +#: postmaster/postmaster.c:2309 #, fuzzy, c-format #| msgid "database system is ready to accept connections" msgid "the database system is not yet accepting connections" msgstr "el sistema de bases de datos está listo para aceptar conexiones" -#: postmaster/postmaster.c:2308 +#: postmaster/postmaster.c:2310 #, fuzzy, c-format #| msgid "consistent recovery state reached at %X/%X" msgid "Consistent recovery state has not been yet reached." msgstr "el estado de recuperación consistente fue alcanzado en %X/%X" -#: postmaster/postmaster.c:2312 +#: postmaster/postmaster.c:2314 #, fuzzy, c-format #| msgid "database system is ready to accept connections" msgid "the database system is not accepting connections" msgstr "el sistema de bases de datos está listo para aceptar conexiones" -#: postmaster/postmaster.c:2313 +#: postmaster/postmaster.c:2315 #, c-format msgid "Hot standby mode is disabled." msgstr "" -#: postmaster/postmaster.c:2318 +#: postmaster/postmaster.c:2320 #, c-format msgid "the database system is shutting down" msgstr "el sistema de base de datos está apagándose" -#: postmaster/postmaster.c:2323 +#: postmaster/postmaster.c:2325 #, c-format msgid "the database system is in recovery mode" msgstr "el sistema de base de datos está en modo de recuperación" -#: postmaster/postmaster.c:2328 storage/ipc/procarray.c:463 +#: postmaster/postmaster.c:2330 storage/ipc/procarray.c:463 #: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "lo siento, ya tenemos demasiados clientes" -#: postmaster/postmaster.c:2418 +#: postmaster/postmaster.c:2420 #, c-format msgid "wrong key in cancel request for process %d" msgstr "llave incorrecta en la petición de cancelación para el proceso %d" -#: postmaster/postmaster.c:2430 +#: postmaster/postmaster.c:2432 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "el PID %d en la petición de cancelación no coincidió con ningún proceso" -#: postmaster/postmaster.c:2684 +#: postmaster/postmaster.c:2686 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "se recibió SIGHUP, volviendo a cargar archivos de configuración" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2710 postmaster/postmaster.c:2714 +#: postmaster/postmaster.c:2712 postmaster/postmaster.c:2716 #, c-format msgid "%s was not reloaded" msgstr "%s no fue vuelto a cargar" -#: postmaster/postmaster.c:2724 +#: postmaster/postmaster.c:2726 #, c-format msgid "SSL configuration was not reloaded" msgstr "la configuración SSL no fue vuelta a cargar" -#: postmaster/postmaster.c:2780 +#: postmaster/postmaster.c:2782 #, c-format msgid "received smart shutdown request" msgstr "se recibió petición de apagado inteligente" -#: postmaster/postmaster.c:2826 +#: postmaster/postmaster.c:2828 #, c-format msgid "received fast shutdown request" msgstr "se recibió petición de apagado rápido" -#: postmaster/postmaster.c:2844 +#: postmaster/postmaster.c:2846 #, c-format msgid "aborting any active transactions" msgstr "abortando transacciones activas" -#: postmaster/postmaster.c:2868 +#: postmaster/postmaster.c:2870 #, c-format msgid "received immediate shutdown request" msgstr "se recibió petición de apagado inmediato" -#: postmaster/postmaster.c:2945 +#: postmaster/postmaster.c:2947 #, c-format msgid "shutdown at recovery target" msgstr "apagándose al alcanzar el destino de recuperación" -#: postmaster/postmaster.c:2963 postmaster/postmaster.c:2999 +#: postmaster/postmaster.c:2965 postmaster/postmaster.c:3001 msgid "startup process" msgstr "proceso de inicio" -#: postmaster/postmaster.c:2966 +#: postmaster/postmaster.c:2968 #, c-format msgid "aborting startup due to startup process failure" msgstr "abortando el inicio debido a una falla en el procesamiento de inicio" -#: postmaster/postmaster.c:3041 +#: postmaster/postmaster.c:3043 #, c-format msgid "database system is ready to accept connections" msgstr "el sistema de bases de datos está listo para aceptar conexiones" -#: postmaster/postmaster.c:3062 +#: postmaster/postmaster.c:3064 msgid "background writer process" msgstr "proceso background writer" -#: postmaster/postmaster.c:3116 +#: postmaster/postmaster.c:3118 msgid "checkpointer process" msgstr "proceso checkpointer" -#: postmaster/postmaster.c:3132 +#: postmaster/postmaster.c:3134 msgid "WAL writer process" msgstr "proceso escritor de WAL" -#: postmaster/postmaster.c:3147 +#: postmaster/postmaster.c:3149 msgid "WAL receiver process" msgstr "proceso receptor de WAL" -#: postmaster/postmaster.c:3162 +#: postmaster/postmaster.c:3164 msgid "autovacuum launcher process" msgstr "proceso lanzador de autovacuum" -#: postmaster/postmaster.c:3180 +#: postmaster/postmaster.c:3182 msgid "archiver process" msgstr "proceso de archivado" -#: postmaster/postmaster.c:3195 +#: postmaster/postmaster.c:3197 msgid "statistics collector process" msgstr "recolector de estadísticas" -#: postmaster/postmaster.c:3209 +#: postmaster/postmaster.c:3211 msgid "system logger process" msgstr "proceso de log" -#: postmaster/postmaster.c:3273 +#: postmaster/postmaster.c:3275 #, c-format msgid "background worker \"%s\"" msgstr "proceso ayudante «%s»" -#: postmaster/postmaster.c:3357 postmaster/postmaster.c:3377 -#: postmaster/postmaster.c:3384 postmaster/postmaster.c:3402 +#: postmaster/postmaster.c:3359 postmaster/postmaster.c:3379 +#: postmaster/postmaster.c:3386 postmaster/postmaster.c:3404 msgid "server process" msgstr "proceso de servidor" -#: postmaster/postmaster.c:3456 +#: postmaster/postmaster.c:3458 #, c-format msgid "terminating any other active server processes" msgstr "terminando todos los otros procesos de servidor activos" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3709 +#: postmaster/postmaster.c:3711 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) terminó con código de salida %d" -#: postmaster/postmaster.c:3711 postmaster/postmaster.c:3723 -#: postmaster/postmaster.c:3733 postmaster/postmaster.c:3744 +#: postmaster/postmaster.c:3713 postmaster/postmaster.c:3725 +#: postmaster/postmaster.c:3735 postmaster/postmaster.c:3746 #, c-format msgid "Failed process was running: %s" msgstr "El proceso que falló estaba ejecutando: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3720 +#: postmaster/postmaster.c:3722 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) fue terminado por una excepción 0x%X" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3730 +#: postmaster/postmaster.c:3732 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) fue terminado por una señal %d: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3742 +#: postmaster/postmaster.c:3744 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) terminó con código %d no reconocido" -#: postmaster/postmaster.c:3957 +#: postmaster/postmaster.c:3959 #, c-format msgid "abnormal database system shutdown" msgstr "apagado anormal del sistema de bases de datos" #: postmaster/postmaster.c:3997 +#, fuzzy, c-format +#| msgid "aborting startup due to startup process failure" +msgid "shutting down due to startup process failure" +msgstr "abortando el inicio debido a una falla en el procesamiento de inicio" + +#: postmaster/postmaster.c:4003 +#, c-format +msgid "shutting down because restart_after_crash is off" +msgstr "" + +#: postmaster/postmaster.c:4015 #, c-format msgid "all server processes terminated; reinitializing" msgstr "todos los procesos fueron terminados; reinicializando" -#: postmaster/postmaster.c:4171 postmaster/postmaster.c:5531 -#: postmaster/postmaster.c:5922 +#: postmaster/postmaster.c:4189 postmaster/postmaster.c:5548 +#: postmaster/postmaster.c:5939 #, c-format msgid "could not generate random cancel key" msgstr "no se pudo generar una llave de cancelación aleatoria" -#: postmaster/postmaster.c:4225 +#: postmaster/postmaster.c:4243 #, c-format msgid "could not fork new process for connection: %m" msgstr "no se pudo lanzar el nuevo proceso para la conexión: %m" -#: postmaster/postmaster.c:4267 +#: postmaster/postmaster.c:4285 msgid "could not fork new process for connection: " msgstr "no se pudo lanzar el nuevo proceso para la conexión: " -#: postmaster/postmaster.c:4373 +#: postmaster/postmaster.c:4391 #, c-format msgid "connection received: host=%s port=%s" msgstr "conexión recibida: host=%s port=%s" -#: postmaster/postmaster.c:4378 +#: postmaster/postmaster.c:4396 #, c-format msgid "connection received: host=%s" msgstr "conexión recibida: host=%s" -#: postmaster/postmaster.c:4621 +#: postmaster/postmaster.c:4639 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "no se pudo lanzar el proceso servidor «%s»: %m" -#: postmaster/postmaster.c:4679 +#: postmaster/postmaster.c:4697 #, fuzzy, c-format #| msgid "could not close handle to backend parameter variables: error code %lu\n" msgid "could not create backend parameter file mapping: error code %lu" msgstr "no se pudo cerrar el archivo de variables de servidor: código de error %lu\n" -#: postmaster/postmaster.c:4688 +#: postmaster/postmaster.c:4706 #, fuzzy, c-format #| msgid "could not map view of backend variables: error code %lu\n" msgid "could not map backend parameter memory: error code %lu" msgstr "no se pudo mapear la vista del archivo de variables: código de error %lu\n" -#: postmaster/postmaster.c:4715 +#: postmaster/postmaster.c:4733 #, fuzzy, c-format #| msgid "command too long\n" msgid "subprocess command line too long" msgstr "orden demasiado larga\n" -#: postmaster/postmaster.c:4733 +#: postmaster/postmaster.c:4751 #, fuzzy, c-format #| msgid "pgpipe: getsockname() failed: error code %d" msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "pgpipe: getsockname() falló: código de error %d" -#: postmaster/postmaster.c:4760 +#: postmaster/postmaster.c:4778 #, fuzzy, c-format #| msgid "could not unmap view of backend variables: error code %lu\n" msgid "could not unmap view of backend parameter file: error code %lu" msgstr "no se pudo desmapear la vista del archivo de variables: código de error %lu\n" -#: postmaster/postmaster.c:4764 +#: postmaster/postmaster.c:4782 #, fuzzy, c-format #| msgid "could not close handle to backend parameter variables: error code %lu\n" msgid "could not close handle to backend parameter file: error code %lu" msgstr "no se pudo cerrar el archivo de variables de servidor: código de error %lu\n" -#: postmaster/postmaster.c:4786 +#: postmaster/postmaster.c:4804 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "renunciar después de demasiados intentos de reservar memoria compartida" -#: postmaster/postmaster.c:4787 +#: postmaster/postmaster.c:4805 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Esto podría deberse a ASLR o un software antivirus." -#: postmaster/postmaster.c:4977 +#: postmaster/postmaster.c:4995 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "No se pudo cargar la configuración SSL en proceso secundario" -#: postmaster/postmaster.c:5103 +#: postmaster/postmaster.c:5121 #, c-format msgid "Please report this to <%s>." msgstr "Por favor reporte esto a <%s>." -#: postmaster/postmaster.c:5190 +#: postmaster/postmaster.c:5208 #, c-format msgid "database system is ready to accept read only connections" msgstr "el sistema de bases de datos está listo para aceptar conexiones de sólo lectura" -#: postmaster/postmaster.c:5455 +#: postmaster/postmaster.c:5472 #, c-format msgid "could not fork startup process: %m" msgstr "no se pudo lanzar el proceso de inicio: %m" -#: postmaster/postmaster.c:5459 +#: postmaster/postmaster.c:5476 #, fuzzy, c-format #| msgid "could not fork WAL receiver process: %m" msgid "could not fork archiver process: %m" msgstr "no se pudo lanzar el proceso receptor de WAL: %m" -#: postmaster/postmaster.c:5463 +#: postmaster/postmaster.c:5480 #, c-format msgid "could not fork background writer process: %m" msgstr "no se pudo lanzar el background writer: %m" -#: postmaster/postmaster.c:5467 +#: postmaster/postmaster.c:5484 #, c-format msgid "could not fork checkpointer process: %m" msgstr "no se pudo lanzar el checkpointer: %m" -#: postmaster/postmaster.c:5471 +#: postmaster/postmaster.c:5488 #, c-format msgid "could not fork WAL writer process: %m" msgstr "no se pudo lanzar el proceso escritor de WAL: %m" -#: postmaster/postmaster.c:5475 +#: postmaster/postmaster.c:5492 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "no se pudo lanzar el proceso receptor de WAL: %m" -#: postmaster/postmaster.c:5479 +#: postmaster/postmaster.c:5496 #, c-format msgid "could not fork process: %m" msgstr "no se pudo lanzar el proceso: %m" -#: postmaster/postmaster.c:5680 postmaster/postmaster.c:5703 +#: postmaster/postmaster.c:5697 postmaster/postmaster.c:5720 #, c-format msgid "database connection requirement not indicated during registration" msgstr "el requerimiento de conexión a base de datos no fue indicado durante el registro" -#: postmaster/postmaster.c:5687 postmaster/postmaster.c:5710 +#: postmaster/postmaster.c:5704 postmaster/postmaster.c:5727 #, c-format msgid "invalid processing mode in background worker" msgstr "modo de procesamiento no válido en proceso ayudante" -#: postmaster/postmaster.c:5795 +#: postmaster/postmaster.c:5812 #, c-format msgid "could not fork worker process: %m" msgstr "no se pudo lanzar el proceso ayudante: %m" -#: postmaster/postmaster.c:5908 +#: postmaster/postmaster.c:5925 #, c-format msgid "no slot available for new worker process" msgstr "no hay slot disponible para un nuevo proceso ayudante" -#: postmaster/postmaster.c:6241 +#: postmaster/postmaster.c:6259 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "no se pudo duplicar el socket %d para su empleo en el backend: código de error %d" -#: postmaster/postmaster.c:6273 +#: postmaster/postmaster.c:6291 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "no se pudo crear el socket heradado: código de error %d\n" -#: postmaster/postmaster.c:6302 +#: postmaster/postmaster.c:6320 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "no se pudo abrir el archivo de variables de servidor «%s»: %s\n" -#: postmaster/postmaster.c:6309 +#: postmaster/postmaster.c:6327 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "no se pudo leer el archivo de variables de servidor «%s»: %s\n" -#: postmaster/postmaster.c:6318 +#: postmaster/postmaster.c:6336 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "no se pudo eliminar el archivo «%s»: %s\n" -#: postmaster/postmaster.c:6335 +#: postmaster/postmaster.c:6353 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "no se pudo mapear la vista del archivo de variables: código de error %lu\n" -#: postmaster/postmaster.c:6344 +#: postmaster/postmaster.c:6362 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "no se pudo desmapear la vista del archivo de variables: código de error %lu\n" -#: postmaster/postmaster.c:6351 +#: postmaster/postmaster.c:6369 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "no se pudo cerrar el archivo de variables de servidor: código de error %lu\n" -#: postmaster/postmaster.c:6527 +#: postmaster/postmaster.c:6546 #, c-format msgid "could not read exit code for process\n" msgstr "no se pudo leer el código de salida del proceso\n" -#: postmaster/postmaster.c:6532 +#: postmaster/postmaster.c:6551 #, c-format msgid "could not post child completion status\n" msgstr "no se pudo publicar el estado de completitud del proceso hijo\n" @@ -19577,7 +19621,7 @@ msgid "could not find free replication state slot for replication origin with OI msgstr "no se pudo encontrar un slot libre para el estado del origen de replicación con OID %u" #: replication/logical/origin.c:941 replication/logical/origin.c:1128 -#: replication/slot.c:1798 +#: replication/slot.c:1865 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Aumente max_replication_slots y reintente." @@ -19631,30 +19675,30 @@ msgstr "la relación destino de replicación lógica «%s.%s» no existe" msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "la relación de destino de replicación lógica «%s.%s» usa columnas de sistemas en el índice REPLICA IDENTITY" -#: replication/logical/reorderbuffer.c:3773 +#: replication/logical/reorderbuffer.c:3777 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "no se pudo escribir al archivo de datos para el XID %u: %m" -#: replication/logical/reorderbuffer.c:4116 -#: replication/logical/reorderbuffer.c:4141 +#: replication/logical/reorderbuffer.c:4120 +#: replication/logical/reorderbuffer.c:4145 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "no se pudo leer desde el archivo de desborde de reorderbuffer: %m" -#: replication/logical/reorderbuffer.c:4120 -#: replication/logical/reorderbuffer.c:4145 +#: replication/logical/reorderbuffer.c:4124 +#: replication/logical/reorderbuffer.c:4149 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "no se pudo leer desde el archivo de desborde de reorderbuffer: se leyeron sólo %d en ve de %u bytes" -#: replication/logical/reorderbuffer.c:4393 +#: replication/logical/reorderbuffer.c:4397 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "no se pudo borrar el archivo «%s» durante la eliminación de pg_replslot/%s/xid*: %m" # FIXME almost duplicated again!? -#: replication/logical/reorderbuffer.c:4883 +#: replication/logical/reorderbuffer.c:4887 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "no se pudo leer del archivo «%s»: se leyeron %d en lugar de %d bytes" @@ -19767,137 +19811,137 @@ msgstr "el slot de replicación «%s» ya existe" msgid "table copy could not finish transaction on publisher: %s" msgstr "la copia de tabla no pudo terminar la transacción en el editor (publisher)" -#: replication/logical/worker.c:490 +#: replication/logical/worker.c:527 #, c-format msgid "processing remote data for replication target relation \"%s.%s\" column \"%s\", remote type %s, local type %s" msgstr "Procesamiento de datos remotos para la relación de destino de replicación \"%s.%s\" columna \"%s\", tipo remoto %s, tipo local %s" -#: replication/logical/worker.c:570 replication/logical/worker.c:699 +#: replication/logical/worker.c:607 replication/logical/worker.c:736 #, fuzzy, c-format #| msgid "incorrect binary data format in function argument %d" msgid "incorrect binary data format in logical replication column %d" msgstr "el formato de datos binarios es incorrecto en argumento %d a función" -#: replication/logical/worker.c:778 +#: replication/logical/worker.c:815 #, c-format msgid "ORIGIN message sent out of order" msgstr "mensaje ORIGIN enviado fuera de orden" -#: replication/logical/worker.c:1037 replication/logical/worker.c:1049 +#: replication/logical/worker.c:1080 replication/logical/worker.c:1092 #, fuzzy, c-format #| msgid "could not read from backend variables file \"%s\": %s\n" msgid "could not read from streaming transaction's changes file \"%s\": %m" msgstr "no se pudo leer el archivo de variables de servidor «%s»: %s\n" -#: replication/logical/worker.c:1274 +#: replication/logical/worker.c:1322 #, c-format msgid "publisher did not send replica identity column expected by the logical replication target relation \"%s.%s\"" msgstr "el editor (publisher) no envía la columna identidad de réplica esperada por la relación de destino de replicación lógica «%s.%s»" -#: replication/logical/worker.c:1281 +#: replication/logical/worker.c:1329 #, c-format msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "la relación destino de replicación lógica «%s.%s» no tiene índice REPLICA IDENTITY ni PRIMARY KEY y la relación publicada no tiene REPLICA IDENTITY FULL" -#: replication/logical/worker.c:1994 +#: replication/logical/worker.c:2050 #, c-format msgid "invalid logical replication message type \"%c\"" msgstr "tipo de mensaje de replicación lógica «%c» no válido" -#: replication/logical/worker.c:2145 +#: replication/logical/worker.c:2201 #, c-format msgid "data stream from publisher has ended" msgstr "el flujo de datos del publisher ha terminado" -#: replication/logical/worker.c:2295 +#: replication/logical/worker.c:2351 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "terminando el proceso de replicación lógica debido a que se agotó el tiempo de espera" -#: replication/logical/worker.c:2443 +#: replication/logical/worker.c:2499 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was removed" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se detendrá porque la suscripción fue eliminada" -#: replication/logical/worker.c:2457 +#: replication/logical/worker.c:2513 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se detendrá porque la suscripción fue inhabilitada" -#: replication/logical/worker.c:2479 +#: replication/logical/worker.c:2535 #, fuzzy, c-format #| msgid "logical replication apply worker for subscription \"%s\" will restart because subscription was renamed" msgid "logical replication apply worker for subscription \"%s\" will restart because of a parameter change" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» se reiniciará porque a la suscripción se le cambió el nombre" -#: replication/logical/worker.c:2642 replication/logical/worker.c:2664 +#: replication/logical/worker.c:2698 replication/logical/worker.c:2720 #, fuzzy, c-format #| msgid "could not read from file \"%s\": %m" msgid "could not read from streaming transaction's subxact file \"%s\": %m" msgstr "no se pudo leer el archivo «%s»: %m" -#: replication/logical/worker.c:3010 +#: replication/logical/worker.c:3066 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "el ayudante «apply» de replicación lógica para la suscripción %u no se iniciará porque la suscripción fue eliminada durante el inicio" -#: replication/logical/worker.c:3022 +#: replication/logical/worker.c:3078 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» no se iniciará porque la suscripción fue inhabilitada durante el inicio" -#: replication/logical/worker.c:3040 +#: replication/logical/worker.c:3096 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "el ayudante de sincronización de tabla de replicación lógica para la suscripción «%s», tabla «%s» ha iniciado" -#: replication/logical/worker.c:3044 +#: replication/logical/worker.c:3100 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» ha iniciado" -#: replication/logical/worker.c:3081 +#: replication/logical/worker.c:3137 #, c-format msgid "subscription has no replication slot set" msgstr "la suscripción no tiene un slot de replicación establecido" -#: replication/pgoutput/pgoutput.c:198 +#: replication/pgoutput/pgoutput.c:195 #, c-format msgid "invalid proto_version" msgstr "proto_version no válido" -#: replication/pgoutput/pgoutput.c:203 +#: replication/pgoutput/pgoutput.c:200 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version «%s» fuera de rango" -#: replication/pgoutput/pgoutput.c:220 +#: replication/pgoutput/pgoutput.c:217 #, c-format msgid "invalid publication_names syntax" msgstr "sintaxis de publication_names no válida" -#: replication/pgoutput/pgoutput.c:290 +#: replication/pgoutput/pgoutput.c:287 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "el cliente envió proto_version=%d pero sólo soportamos el protocolo %d o inferior" -#: replication/pgoutput/pgoutput.c:296 +#: replication/pgoutput/pgoutput.c:293 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "el cliente envió proto_version=%d pero sólo soportamos el protocolo %d o superior" -#: replication/pgoutput/pgoutput.c:302 +#: replication/pgoutput/pgoutput.c:299 #, c-format msgid "publication_names parameter missing" msgstr "parámetro publication_names faltante" -#: replication/pgoutput/pgoutput.c:315 +#: replication/pgoutput/pgoutput.c:312 #, fuzzy, c-format #| msgid "client sent proto_version=%d but we only support protocol %d or higher" msgid "requested proto_version=%d does not support streaming, need %d or higher" msgstr "el cliente envió proto_version=%d pero sólo soportamos el protocolo %d o superior" -#: replication/pgoutput/pgoutput.c:320 +#: replication/pgoutput/pgoutput.c:317 #, fuzzy, c-format #| msgid "integer of size %lu not supported by pqPutInt" msgid "streaming requested, but not supported by output plugin" @@ -19949,7 +19993,7 @@ msgstr "no existe el slot de replicación «%s»" msgid "replication slot \"%s\" is active for PID %d" msgstr "el slot de replicación «%s» está activo para el PID %d" -#: replication/slot.c:701 replication/slot.c:1350 replication/slot.c:1733 +#: replication/slot.c:701 replication/slot.c:1417 replication/slot.c:1800 #, c-format msgid "could not remove directory \"%s\"" msgstr "no se pudo eliminar el directorio «%s»" @@ -19965,61 +20009,61 @@ msgstr "los slots de replicación sólo pueden usarse si max_replication_slots > msgid "replication slots can only be used if wal_level >= replica" msgstr "los slots de replicación sólo pueden usarse si wal_level >= replica" -#: replication/slot.c:1239 +#: replication/slot.c:1262 #, fuzzy, c-format #| msgid "terminating walsender process due to replication timeout" -msgid "terminating process %d because replication slot \"%s\" is too far behind" +msgid "terminating process %d to release replication slot \"%s\"" msgstr "terminando el proceso walsender debido a que se agotó el tiempo de espera de replicación" -#: replication/slot.c:1258 +#: replication/slot.c:1300 #, c-format msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" msgstr "invalidando el slot «%s» porque su restart_lsn %X/%X excede max_slot_wal_keep_size" -#: replication/slot.c:1671 +#: replication/slot.c:1738 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "el archivo de slot de replicación «%s» tiene número mágico erróneo: %u en lugar de %u" -#: replication/slot.c:1678 +#: replication/slot.c:1745 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "el archivo de slot de replicación «%s» tiene versión no soportada %u" -#: replication/slot.c:1685 +#: replication/slot.c:1752 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "el archivo de slot de replicación «%s» tiene largo corrupto %u" -#: replication/slot.c:1721 +#: replication/slot.c:1788 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "suma de verificación no coincidenete en archivo de slot de replicación «%s»: es %u, debería ser %u" # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/slot.c:1755 +#: replication/slot.c:1822 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "existe el slot de replicación lógica «%s», pero wal_level < logical" -#: replication/slot.c:1757 +#: replication/slot.c:1824 #, c-format msgid "Change wal_level to be logical or higher." msgstr "Cambie wal_level a logical o superior." # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/slot.c:1761 +#: replication/slot.c:1828 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "existe el slot de replicación lógica «%s», pero wal_level < logical" # <> hello vim -#: replication/slot.c:1763 +#: replication/slot.c:1830 #, c-format msgid "Change wal_level to be replica or higher." msgstr "Cambie wal_level a replica o superior." -#: replication/slot.c:1797 +#: replication/slot.c:1864 #, c-format msgid "too many replication slots active before shutdown" msgstr "demasiados slots de replicacion activos antes del apagado" @@ -20862,7 +20906,7 @@ msgstr "el objeto de estadísticas «%s.%s» no pudo ser calculado para la relac msgid "relation \"pg_statistic\" does not have a composite type" msgstr "«%s» no es un tipo compuesto" -#: statistics/mcv.c:1368 utils/adt/jsonfuncs.c:1941 +#: statistics/mcv.c:1371 utils/adt/jsonfuncs.c:1941 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "se llamó una función que retorna un registro en un contexto que no puede aceptarlo" @@ -21190,13 +21234,13 @@ msgid "requested shared memory size overflows size_t" msgstr "la petición de tamaño de memoria compartida desborda size_t" #: storage/ipc/signalfuncs.c:68 storage/ipc/signalfuncs.c:261 -#: utils/adt/mcxtfuncs.c:196 +#: utils/adt/mcxtfuncs.c:204 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "PID %d no es un proceso servidor de PostgreSQL" #: storage/ipc/signalfuncs.c:99 storage/lmgr/proc.c:1454 -#: utils/adt/mcxtfuncs.c:210 +#: utils/adt/mcxtfuncs.c:212 #, c-format msgid "could not send signal to process %d: %m" msgstr "no se pudo enviar la señal al proceso %d: %m" @@ -21995,17 +22039,17 @@ msgstr "el protocolo extendido de consultas no está soportado en conexiones de msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "desconexión: duración de sesión: %d:%02d:%02d.%03d usuario=%s base=%s host=%s%s%s" -#: tcop/pquery.c:629 +#: tcop/pquery.c:636 #, c-format msgid "bind message has %d result formats but query has %d columns" msgstr "el mensaje de enlace (bind) tiene %d formatos de resultado pero la consulta tiene %d columnas" -#: tcop/pquery.c:932 +#: tcop/pquery.c:939 #, c-format msgid "cursor can only scan forward" msgstr "el cursor sólo se puede desplazar hacia adelante" -#: tcop/pquery.c:933 +#: tcop/pquery.c:940 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "Declárelo con SCROLL para permitirle desplazar hacia atrás." @@ -22391,7 +22435,7 @@ msgstr "aclremove ya no está soportado" msgid "unrecognized privilege type: \"%s\"" msgstr "tipo de privilegio no reconocido: «%s»" -#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:276 +#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:277 #, c-format msgid "function \"%s\" does not exist" msgstr "no existe la función «%s»" @@ -23585,7 +23629,7 @@ msgstr "OID fuera de rango" msgid "key value must be scalar, not array, composite, or json" msgstr "el valor de llave debe ser escalar, no array, composite o json" -#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:1994 +#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:1992 #, c-format msgid "could not determine data type for argument %d" msgstr "no se pudo determinar el tipo de dato para el argumento %d" @@ -24150,7 +24194,7 @@ msgstr "datos macaddr8 fuera de rango para convertir a macaddr" msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." msgstr "Sólo las direcciones que tienen FF y FF como valores en el cuarto y quinto bytes desde la izquierda, por ejemplo xx:xx:xx:ff:fe:xx:xx:xx se pueden convertir de macaddr8 a macaddr." -#: utils/adt/mcxtfuncs.c:204 +#: utils/adt/mcxtfuncs.c:184 #, fuzzy, c-format #| msgid "must be superuser to alter a type" msgid "must be a superuser to log memory contexts" @@ -24237,7 +24281,7 @@ msgstr "literal de rango mal formado: «%s»" #: utils/adt/multirangetypes.c:149 #, fuzzy, c-format #| msgid "Missing left parenthesis." -msgid "Missing left bracket." +msgid "Missing left brace." msgstr "Falta paréntesis izquierdo." #: utils/adt/multirangetypes.c:191 @@ -24255,7 +24299,7 @@ msgstr "fin de línea inesperado" #: utils/adt/multirangetypes.c:285 #, fuzzy, c-format #| msgid "Junk after closing right brace." -msgid "Junk after right bracket." +msgid "Junk after right brace." msgstr "Basura después de la llave derecha de cierre." #: utils/adt/multirangetypes.c:971 @@ -24781,45 +24825,45 @@ msgstr "demasiadas coincidencias de la expresión regular" msgid "more than one function named \"%s\"" msgstr "existe más de una función llamada «%s»" -#: utils/adt/regproc.c:542 +#: utils/adt/regproc.c:543 #, c-format msgid "more than one operator named %s" msgstr "existe más de un operador llamado %s" -#: utils/adt/regproc.c:714 utils/adt/regproc.c:755 utils/adt/regproc.c:2054 -#: utils/adt/ruleutils.c:9642 utils/adt/ruleutils.c:9811 +#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 +#: utils/adt/ruleutils.c:9650 utils/adt/ruleutils.c:9819 #, c-format msgid "too many arguments" msgstr "demasiados argumentos" -#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 +#: utils/adt/regproc.c:716 utils/adt/regproc.c:757 #, c-format msgid "Provide two argument types for operator." msgstr "Provea dos tipos de argumento para un operador." -#: utils/adt/regproc.c:1638 utils/adt/regproc.c:1662 utils/adt/regproc.c:1763 -#: utils/adt/regproc.c:1787 utils/adt/regproc.c:1889 utils/adt/regproc.c:1894 +#: utils/adt/regproc.c:1639 utils/adt/regproc.c:1663 utils/adt/regproc.c:1764 +#: utils/adt/regproc.c:1788 utils/adt/regproc.c:1890 utils/adt/regproc.c:1895 #: utils/adt/varlena.c:3709 utils/adt/varlena.c:3714 #, c-format msgid "invalid name syntax" msgstr "la sintaxis de nombre no es válida" -#: utils/adt/regproc.c:1952 +#: utils/adt/regproc.c:1953 #, c-format msgid "expected a left parenthesis" msgstr "se esperaba un paréntesis izquierdo" -#: utils/adt/regproc.c:1968 +#: utils/adt/regproc.c:1969 #, c-format msgid "expected a right parenthesis" msgstr "se esperaba un paréntesis derecho" -#: utils/adt/regproc.c:1987 +#: utils/adt/regproc.c:1988 #, c-format msgid "expected a type name" msgstr "se esperaba un nombre de tipo" -#: utils/adt/regproc.c:2019 +#: utils/adt/regproc.c:2020 #, c-format msgid "improper type name" msgstr "el nombre de tipo no es válido" @@ -24958,7 +25002,7 @@ msgstr "no se pueden comparar los tipos de columnas disímiles %s y %s en la col msgid "cannot compare record types with different numbers of columns" msgstr "no se pueden comparar registros con cantidad distinta de columnas" -#: utils/adt/ruleutils.c:5069 +#: utils/adt/ruleutils.c:5077 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "la regla «%s» tiene el tipo de evento no soportado %d" @@ -24973,7 +25017,7 @@ msgstr "la precisión de TIMESTAMP(%d)%s no debe ser negativa" msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "la precisión de TIMESTAMP(%d)%s fue reducida al máximo permitido, %d" -#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12392 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12411 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp fuera de rango: «%s»" @@ -25931,17 +25975,17 @@ msgstr "no se pudo determinar el tipo verdadero de resultado para la función « msgid "argument declared %s does not contain a range type but type %s" msgstr "el argumento declarado %s no es un tipo de rango sino tipo %s" -#: utils/fmgr/funcapi.c:1833 utils/fmgr/funcapi.c:1865 +#: utils/fmgr/funcapi.c:1831 utils/fmgr/funcapi.c:1863 #, c-format msgid "number of aliases does not match number of columns" msgstr "el número de aliases no coincide con el número de columnas" -#: utils/fmgr/funcapi.c:1859 +#: utils/fmgr/funcapi.c:1857 #, c-format msgid "no column alias was provided" msgstr "no se entregó alias de columna" -#: utils/fmgr/funcapi.c:1883 +#: utils/fmgr/funcapi.c:1881 #, c-format msgid "could not determine row description for function returning record" msgstr "no se pudo encontrar descripción de registro de función que retorna record" @@ -25981,7 +26025,7 @@ msgstr "el directorio de datos «%s» tiene permisos no válidos" msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Los permisos deberían ser u=rwx (0700) o u=rwx,g=rx (0750)." -#: utils/init/miscinit.c:645 utils/misc/guc.c:7462 +#: utils/init/miscinit.c:645 utils/misc/guc.c:7481 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "no se puede definir el parámetro «%s» dentro de una operación restringida por seguridad" @@ -26082,7 +26126,7 @@ msgstr "El archivo parece accidentalmente abandonado, pero no pudo ser eliminado msgid "could not write lock file \"%s\": %m" msgstr "no se pudo escribir el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:1357 utils/init/miscinit.c:1499 utils/misc/guc.c:10358 +#: utils/init/miscinit.c:1357 utils/init/miscinit.c:1499 utils/misc/guc.c:10377 #, c-format msgid "could not read from file \"%s\": %m" msgstr "no se pudo leer el archivo «%s»: %m" @@ -26345,1995 +26389,1995 @@ msgstr "secuencia de bytes no válida para codificación «%s»: %s" msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "carácter con secuencia de bytes %s en codificación «%s» no tiene equivalente en la codificación «%s»" -#: utils/misc/guc.c:701 +#: utils/misc/guc.c:718 msgid "Ungrouped" msgstr "Sin Grupo" -#: utils/misc/guc.c:703 +#: utils/misc/guc.c:720 msgid "File Locations" msgstr "Ubicaciones de Archivos" -#: utils/misc/guc.c:705 +#: utils/misc/guc.c:722 msgid "Connections and Authentication / Connection Settings" msgstr "Conexiones y Autentificación / Parámetros de Conexión" -#: utils/misc/guc.c:707 +#: utils/misc/guc.c:724 msgid "Connections and Authentication / Authentication" msgstr "Conexiones y Autentificación / Autentificación" -#: utils/misc/guc.c:709 +#: utils/misc/guc.c:726 msgid "Connections and Authentication / SSL" msgstr "Conexiones y Autentificación / SSL" -#: utils/misc/guc.c:711 +#: utils/misc/guc.c:728 msgid "Resource Usage / Memory" msgstr "Uso de Recursos / Memoria" -#: utils/misc/guc.c:713 +#: utils/misc/guc.c:730 msgid "Resource Usage / Disk" msgstr "Uso de Recursos / Disco" -#: utils/misc/guc.c:715 +#: utils/misc/guc.c:732 msgid "Resource Usage / Kernel Resources" msgstr "Uso de Recursos / Recursos del Kernel" -#: utils/misc/guc.c:717 +#: utils/misc/guc.c:734 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Uso de Recursos / Retardo de Vacuum por Costos" -#: utils/misc/guc.c:719 +#: utils/misc/guc.c:736 msgid "Resource Usage / Background Writer" msgstr "Uso de Recursos / Escritor en Segundo Plano" -#: utils/misc/guc.c:721 +#: utils/misc/guc.c:738 msgid "Resource Usage / Asynchronous Behavior" msgstr "Uso de Recursos / Comportamiento Asíncrono" -#: utils/misc/guc.c:723 +#: utils/misc/guc.c:740 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead Log / Configuraciones" -#: utils/misc/guc.c:725 +#: utils/misc/guc.c:742 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead Log / Puntos de Control (Checkpoints)" -#: utils/misc/guc.c:727 +#: utils/misc/guc.c:744 msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead Log / Archivado" -#: utils/misc/guc.c:729 +#: utils/misc/guc.c:746 msgid "Write-Ahead Log / Archive Recovery" msgstr "Write-Ahead Log / Recuperación desde Archivo" -#: utils/misc/guc.c:731 +#: utils/misc/guc.c:748 msgid "Write-Ahead Log / Recovery Target" msgstr "Write-Ahead Log / Destino de Recuperación" -#: utils/misc/guc.c:733 +#: utils/misc/guc.c:750 msgid "Replication / Sending Servers" msgstr "Replicación / Servidores de Envío" -#: utils/misc/guc.c:735 +#: utils/misc/guc.c:752 #, fuzzy #| msgid "Replication / Master Server" msgid "Replication / Primary Server" msgstr "Replicación / Servidor Maestro" -#: utils/misc/guc.c:737 +#: utils/misc/guc.c:754 msgid "Replication / Standby Servers" msgstr "Replicación / Servidores Standby" -#: utils/misc/guc.c:739 +#: utils/misc/guc.c:756 msgid "Replication / Subscribers" msgstr "Replicación / Suscriptores" -#: utils/misc/guc.c:741 +#: utils/misc/guc.c:758 msgid "Query Tuning / Planner Method Configuration" msgstr "Afinamiento de Consultas / Configuración de Métodos del Planner" -#: utils/misc/guc.c:743 +#: utils/misc/guc.c:760 msgid "Query Tuning / Planner Cost Constants" msgstr "Afinamiento de Consultas / Constantes de Costo del Planner" -#: utils/misc/guc.c:745 +#: utils/misc/guc.c:762 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Afinamiento de Consultas / Optimizador Genético de Consultas" -#: utils/misc/guc.c:747 +#: utils/misc/guc.c:764 msgid "Query Tuning / Other Planner Options" msgstr "Afinamiento de Consultas / Otras Opciones del Planner" -#: utils/misc/guc.c:749 +#: utils/misc/guc.c:766 msgid "Reporting and Logging / Where to Log" msgstr "Reporte y Registro / Cuándo Registrar" -#: utils/misc/guc.c:751 +#: utils/misc/guc.c:768 msgid "Reporting and Logging / When to Log" msgstr "Reporte y Registro / Cuándo Registrar" -#: utils/misc/guc.c:753 +#: utils/misc/guc.c:770 msgid "Reporting and Logging / What to Log" msgstr "Reporte y Registro / Qué Registrar" -#: utils/misc/guc.c:755 +#: utils/misc/guc.c:772 #, fuzzy #| msgid "Reporting and Logging / Where to Log" msgid "Reporting and Logging / Process Title" msgstr "Reporte y Registro / Cuándo Registrar" -#: utils/misc/guc.c:757 +#: utils/misc/guc.c:774 msgid "Statistics / Monitoring" msgstr "Estadísticas / Monitoreo" -#: utils/misc/guc.c:759 +#: utils/misc/guc.c:776 msgid "Statistics / Query and Index Statistics Collector" msgstr "Estadísticas / Recolector de Estadísticas de Consultas e Índices" -#: utils/misc/guc.c:761 +#: utils/misc/guc.c:778 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc.c:763 +#: utils/misc/guc.c:780 msgid "Client Connection Defaults / Statement Behavior" msgstr "Valores por Omisión de Conexiones / Comportamiento de Sentencias" -#: utils/misc/guc.c:765 +#: utils/misc/guc.c:782 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Valores por Omisión de Conexiones / Configuraciones Regionales y Formateo" -#: utils/misc/guc.c:767 +#: utils/misc/guc.c:784 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Valores por Omisión de Conexiones / Precargado de Bibliotecas Compartidas" -#: utils/misc/guc.c:769 +#: utils/misc/guc.c:786 msgid "Client Connection Defaults / Other Defaults" msgstr "Valores por Omisión de Conexiones / Otros Valores" -#: utils/misc/guc.c:771 +#: utils/misc/guc.c:788 msgid "Lock Management" msgstr "Manejo de Bloqueos" -#: utils/misc/guc.c:773 +#: utils/misc/guc.c:790 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Compatibilidad de Versión y Plataforma / Versiones Anteriores de PostgreSQL" -#: utils/misc/guc.c:775 +#: utils/misc/guc.c:792 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Compatibilidad de Versión y Plataforma / Otras Plataformas y Clientes" -#: utils/misc/guc.c:777 +#: utils/misc/guc.c:794 msgid "Error Handling" msgstr "Gestión de Errores" -#: utils/misc/guc.c:779 +#: utils/misc/guc.c:796 msgid "Preset Options" msgstr "Opciones Predefinidas" -#: utils/misc/guc.c:781 +#: utils/misc/guc.c:798 msgid "Customized Options" msgstr "Opciones Personalizadas" -#: utils/misc/guc.c:783 +#: utils/misc/guc.c:800 msgid "Developer Options" msgstr "Opciones de Desarrollador" -#: utils/misc/guc.c:841 +#: utils/misc/guc.c:858 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Unidades válidas para este parámetro son «B», «kB», «MB», «GB» y «TB»." -#: utils/misc/guc.c:878 +#: utils/misc/guc.c:895 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "Unidades válidas son para este parámetro son «us», «ms», «s», «min», «h» y «d»." -#: utils/misc/guc.c:940 +#: utils/misc/guc.c:957 msgid "Enables the planner's use of sequential-scan plans." msgstr "Permitir el uso de planes de recorrido secuencial." -#: utils/misc/guc.c:950 +#: utils/misc/guc.c:967 msgid "Enables the planner's use of index-scan plans." msgstr "Permitir el uso de planes de recorrido de índice." -#: utils/misc/guc.c:960 +#: utils/misc/guc.c:977 msgid "Enables the planner's use of index-only-scan plans." msgstr "Permitir el uso de planes de recorrido de sólo-índice." -#: utils/misc/guc.c:970 +#: utils/misc/guc.c:987 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Permitir el uso de planes de recorrido de índice por mapas de bits." -#: utils/misc/guc.c:980 +#: utils/misc/guc.c:997 msgid "Enables the planner's use of TID scan plans." msgstr "Permitir el uso de planes de recorrido por TID." -#: utils/misc/guc.c:990 +#: utils/misc/guc.c:1007 msgid "Enables the planner's use of explicit sort steps." msgstr "Permitir el uso de pasos explícitos de ordenamiento." -#: utils/misc/guc.c:1000 +#: utils/misc/guc.c:1017 #, fuzzy #| msgid "Enables the planner's use of explicit sort steps." msgid "Enables the planner's use of incremental sort steps." msgstr "Permitir el uso de pasos explícitos de ordenamiento." -#: utils/misc/guc.c:1009 +#: utils/misc/guc.c:1026 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Permitir el uso de planes de agregación a través de hash." -#: utils/misc/guc.c:1019 +#: utils/misc/guc.c:1036 msgid "Enables the planner's use of materialization." msgstr "Permitir el uso de materialización de planes." -#: utils/misc/guc.c:1029 +#: utils/misc/guc.c:1046 #, fuzzy #| msgid "Enables the planner's use of parallel hash plans." msgid "Enables the planner's use of result caching." msgstr "Permitir el uso de planes «hash join» paralelos." -#: utils/misc/guc.c:1039 +#: utils/misc/guc.c:1056 msgid "Enables the planner's use of nested-loop join plans." msgstr "Permitir el uso de planes «nested-loop join»." -#: utils/misc/guc.c:1049 +#: utils/misc/guc.c:1066 msgid "Enables the planner's use of merge join plans." msgstr "Permitir el uso de planes «merge join»." -#: utils/misc/guc.c:1059 +#: utils/misc/guc.c:1076 msgid "Enables the planner's use of hash join plans." msgstr "Permitir el uso de planes «hash join»." -#: utils/misc/guc.c:1069 +#: utils/misc/guc.c:1086 msgid "Enables the planner's use of gather merge plans." msgstr "Permitir el uso de planes «gather merge»." -#: utils/misc/guc.c:1079 +#: utils/misc/guc.c:1096 msgid "Enables partitionwise join." msgstr "Permitir el uso de joins por particiones." -#: utils/misc/guc.c:1089 +#: utils/misc/guc.c:1106 msgid "Enables partitionwise aggregation and grouping." msgstr "Permitir el uso de agregación y agrupamiento por particiones." -#: utils/misc/guc.c:1099 +#: utils/misc/guc.c:1116 msgid "Enables the planner's use of parallel append plans." msgstr "Permitir el uso de planes «append» paralelos." -#: utils/misc/guc.c:1109 +#: utils/misc/guc.c:1126 msgid "Enables the planner's use of parallel hash plans." msgstr "Permitir el uso de planes «hash join» paralelos." -#: utils/misc/guc.c:1119 +#: utils/misc/guc.c:1136 #, fuzzy #| msgid "Enables plan-time and run-time partition pruning." msgid "Enables plan-time and execution-time partition pruning." msgstr "Permitir el uso de poda de particiones en tiempo de plan y ejecución." -#: utils/misc/guc.c:1120 +#: utils/misc/guc.c:1137 msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." msgstr "Permite al optimizador de consultas y al ejecutor a comparar bordes de particiones a condiciones en las consultas para determinar qué particiones deben recorrerse." -#: utils/misc/guc.c:1131 +#: utils/misc/guc.c:1148 #, fuzzy #| msgid "Enables the planner's use of parallel append plans." msgid "Enables the planner's use of async append plans." msgstr "Permitir el uso de planes «append» paralelos." -#: utils/misc/guc.c:1141 +#: utils/misc/guc.c:1158 msgid "Enables genetic query optimization." msgstr "Permitir el uso del optimizador genético de consultas." -#: utils/misc/guc.c:1142 +#: utils/misc/guc.c:1159 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Este algoritmo intenta planear las consultas sin hacer búsqueda exhaustiva." -#: utils/misc/guc.c:1153 +#: utils/misc/guc.c:1170 msgid "Shows whether the current user is a superuser." msgstr "Indica si el usuario actual es superusuario." -#: utils/misc/guc.c:1163 +#: utils/misc/guc.c:1180 msgid "Enables advertising the server via Bonjour." msgstr "Permitir la publicación del servidor vía Bonjour." -#: utils/misc/guc.c:1172 +#: utils/misc/guc.c:1189 msgid "Collects transaction commit time." msgstr "Recolectar tiempo de compromiso de transacciones." -#: utils/misc/guc.c:1181 +#: utils/misc/guc.c:1198 msgid "Enables SSL connections." msgstr "Permitir conexiones SSL." -#: utils/misc/guc.c:1190 +#: utils/misc/guc.c:1207 msgid "Also use ssl_passphrase_command during server reload." msgstr "También usar ssl_passphrase_command durante la recarga del servidor." -#: utils/misc/guc.c:1199 +#: utils/misc/guc.c:1216 msgid "Give priority to server ciphersuite order." msgstr "Da prioridad al orden de algoritmos de cifrado especificado por el servidor." -#: utils/misc/guc.c:1208 +#: utils/misc/guc.c:1225 msgid "Forces synchronization of updates to disk." msgstr "Forzar la sincronización de escrituras a disco." -#: utils/misc/guc.c:1209 +#: utils/misc/guc.c:1226 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "El servidor usará la llamada a sistema fsync() en varios lugares para asegurarse que las actualizaciones son escritas físicamente a disco. Esto asegura que las bases de datos se recuperarán a un estado consistente después de una caída de hardware o sistema operativo." -#: utils/misc/guc.c:1220 +#: utils/misc/guc.c:1237 msgid "Continues processing after a checksum failure." msgstr "Continuar procesando después de una falla de suma de verificación." -#: utils/misc/guc.c:1221 +#: utils/misc/guc.c:1238 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "La detección de una suma de verificación que no coincide normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo ignore_checksum_failure a true hace que el sistema ignore la falla (pero aún así reporta un mensaje de warning), y continúe el procesamiento. Este comportamiento podría causar caídas del sistema u otros problemas serios. Sólo tiene efecto si las sumas de verificación están activadas." -#: utils/misc/guc.c:1235 +#: utils/misc/guc.c:1252 msgid "Continues processing past damaged page headers." msgstr "Continuar procesando después de detectar encabezados de página dañados." -#: utils/misc/guc.c:1236 +#: utils/misc/guc.c:1253 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "La detección de un encabezado de página dañado normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo zero_damaged_pages a true hace que el sistema reporte un mensaje de warning, escriba ceros en toda la página, y continúe el procesamiento. Este comportamiento destruirá datos; en particular, todas las tuplas en la página dañada." -#: utils/misc/guc.c:1249 +#: utils/misc/guc.c:1266 #, fuzzy #| msgid "Continues processing after a checksum failure." msgid "Continues recovery after an invalid pages failure." msgstr "Continuar procesando después de una falla de suma de verificación." -#: utils/misc/guc.c:1250 +#: utils/misc/guc.c:1267 #, fuzzy #| msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." msgstr "La detección de una suma de verificación que no coincide normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo ignore_checksum_failure a true hace que el sistema ignore la falla (pero aún así reporta un mensaje de warning), y continúe el procesamiento. Este comportamiento podría causar caídas del sistema u otros problemas serios. Sólo tiene efecto si las sumas de verificación están activadas." -#: utils/misc/guc.c:1268 +#: utils/misc/guc.c:1285 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "Escribe páginas completas a WAL cuando son modificadas después de un punto de control." -#: utils/misc/guc.c:1269 +#: utils/misc/guc.c:1286 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "Una escritura de página que está siendo procesada durante una caída del sistema operativo puede ser completada sólo parcialmente. Durante la recuperación, los cambios de registros (tuplas) almacenados en WAL no son suficientes para la recuperación. Esta opción activa la escritura de las páginas a WAL cuando son modificadas por primera vez después de un punto de control, de manera que una recuperación total es posible." -#: utils/misc/guc.c:1282 +#: utils/misc/guc.c:1299 #, fuzzy #| msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications." msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification." msgstr "Escribir páginas completas a WAL cuando son modificadas después de un punto de control, incluso para modificaciones no críticas." -#: utils/misc/guc.c:1292 +#: utils/misc/guc.c:1309 msgid "Compresses full-page writes written in WAL file." msgstr "Comprimir las imágenes de páginas completas al escribirlas a WAL." -#: utils/misc/guc.c:1302 +#: utils/misc/guc.c:1319 msgid "Writes zeroes to new WAL files before first use." msgstr "Escribir ceros a nuevos archivos WAL antes del primer uso." -#: utils/misc/guc.c:1312 +#: utils/misc/guc.c:1329 msgid "Recycles WAL files by renaming them." msgstr "Reciclar archivos de WAL cambiándoles de nombre." -#: utils/misc/guc.c:1322 +#: utils/misc/guc.c:1339 msgid "Logs each checkpoint." msgstr "Registrar cada punto de control." -#: utils/misc/guc.c:1331 +#: utils/misc/guc.c:1348 msgid "Logs each successful connection." msgstr "Registrar cada conexión exitosa." -#: utils/misc/guc.c:1340 +#: utils/misc/guc.c:1357 msgid "Logs end of a session, including duration." msgstr "Registrar el fin de una sesión, incluyendo su duración." -#: utils/misc/guc.c:1349 +#: utils/misc/guc.c:1366 msgid "Logs each replication command." msgstr "Registrar cada orden de replicación." -#: utils/misc/guc.c:1358 +#: utils/misc/guc.c:1375 msgid "Shows whether the running server has assertion checks enabled." msgstr "Indica si el servidor actual tiene activas las aseveraciones (asserts) activas." -#: utils/misc/guc.c:1373 +#: utils/misc/guc.c:1390 msgid "Terminate session on any error." msgstr "Terminar sesión ante cualquier error." -#: utils/misc/guc.c:1382 +#: utils/misc/guc.c:1399 msgid "Reinitialize server after backend crash." msgstr "Reinicializar el servidor después de una caída de un proceso servidor." -#: utils/misc/guc.c:1391 +#: utils/misc/guc.c:1408 #, fuzzy #| msgid "Reinitialize server after backend crash." msgid "Remove temporary files after backend crash." msgstr "Reinicializar el servidor después de una caída de un proceso servidor." -#: utils/misc/guc.c:1401 +#: utils/misc/guc.c:1418 msgid "Logs the duration of each completed SQL statement." msgstr "Registrar la duración de cada sentencia SQL ejecutada." -#: utils/misc/guc.c:1410 +#: utils/misc/guc.c:1427 msgid "Logs each query's parse tree." msgstr "Registrar cada arbol analizado de consulta " -#: utils/misc/guc.c:1419 +#: utils/misc/guc.c:1436 msgid "Logs each query's rewritten parse tree." msgstr "Registrar cada reescritura del arból analizado de consulta" -#: utils/misc/guc.c:1428 +#: utils/misc/guc.c:1445 msgid "Logs each query's execution plan." msgstr "Registrar el plan de ejecución de cada consulta." -#: utils/misc/guc.c:1437 +#: utils/misc/guc.c:1454 msgid "Indents parse and plan tree displays." msgstr "Indentar los árboles de parse y plan." -#: utils/misc/guc.c:1446 -#, fuzzy -#| msgid "unterminated quoted identifier" -msgid "Compute query identifiers." -msgstr "un identificador entre comillas está inconcluso" - -#: utils/misc/guc.c:1455 +#: utils/misc/guc.c:1463 msgid "Writes parser performance statistics to the server log." msgstr "Escribir estadísticas de parser al registro del servidor." -#: utils/misc/guc.c:1464 +#: utils/misc/guc.c:1472 msgid "Writes planner performance statistics to the server log." msgstr "Escribir estadísticas de planner al registro del servidor." -#: utils/misc/guc.c:1473 +#: utils/misc/guc.c:1481 msgid "Writes executor performance statistics to the server log." msgstr "Escribir estadísticas del executor al registro del servidor." -#: utils/misc/guc.c:1482 +#: utils/misc/guc.c:1490 msgid "Writes cumulative performance statistics to the server log." msgstr "Escribir estadísticas acumulativas al registro del servidor." -#: utils/misc/guc.c:1492 +#: utils/misc/guc.c:1500 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Registrar uso de recursos de sistema (memoria y CPU) en varias operaciones B-tree." -#: utils/misc/guc.c:1504 +#: utils/misc/guc.c:1512 msgid "Collects information about executing commands." msgstr "Recolectar estadísticas sobre órdenes en ejecución." -#: utils/misc/guc.c:1505 +#: utils/misc/guc.c:1513 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "Activa la recolección de información sobre la orden actualmente en ejecución en cada sesión, junto con el momento en el cual esa orden comenzó la ejecución." -#: utils/misc/guc.c:1515 +#: utils/misc/guc.c:1523 msgid "Collects statistics on database activity." msgstr "Recolectar estadísticas de actividad de la base de datos." -#: utils/misc/guc.c:1524 +#: utils/misc/guc.c:1532 msgid "Collects timing statistics for database I/O activity." msgstr "Recolectar estadísticas de tiempos en las operaciones de I/O de la base de datos." -#: utils/misc/guc.c:1533 +#: utils/misc/guc.c:1541 #, fuzzy #| msgid "Collects timing statistics for database I/O activity." msgid "Collects timing statistics for WAL I/O activity." msgstr "Recolectar estadísticas de tiempos en las operaciones de I/O de la base de datos." -#: utils/misc/guc.c:1543 +#: utils/misc/guc.c:1551 msgid "Updates the process title to show the active SQL command." msgstr "Actualiza el título del proceso para mostrar la orden SQL activo." -#: utils/misc/guc.c:1544 +#: utils/misc/guc.c:1552 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "Habilita que se actualice el título del proceso cada vez que una orden SQL es recibido por el servidor." -#: utils/misc/guc.c:1557 +#: utils/misc/guc.c:1565 msgid "Starts the autovacuum subprocess." msgstr "Iniciar el subproceso de autovacuum." -#: utils/misc/guc.c:1567 +#: utils/misc/guc.c:1575 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Generar salida de depuración para LISTEN y NOTIFY." -#: utils/misc/guc.c:1579 +#: utils/misc/guc.c:1587 msgid "Emits information about lock usage." msgstr "Emitir información acerca del uso de locks." -#: utils/misc/guc.c:1589 +#: utils/misc/guc.c:1597 msgid "Emits information about user lock usage." msgstr "Emitir información acerca del uso de locks de usuario." -#: utils/misc/guc.c:1599 +#: utils/misc/guc.c:1607 msgid "Emits information about lightweight lock usage." msgstr "Emitir información acerca del uso de «lightweight locks»." -#: utils/misc/guc.c:1609 +#: utils/misc/guc.c:1617 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Volcar información acerca de los locks existentes cuando se agota el tiempo de deadlock." -#: utils/misc/guc.c:1621 +#: utils/misc/guc.c:1629 msgid "Logs long lock waits." msgstr "Registrar esperas largas de bloqueos." -#: utils/misc/guc.c:1630 +#: utils/misc/guc.c:1638 #, fuzzy #| msgid "abort reason: recovery conflict" msgid "Logs standby recovery conflict waits." msgstr "razón para abortar: conflicto en la recuperación" -#: utils/misc/guc.c:1639 +#: utils/misc/guc.c:1647 msgid "Logs the host name in the connection logs." msgstr "Registrar el nombre del host en la conexión." -#: utils/misc/guc.c:1640 +#: utils/misc/guc.c:1648 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "Por omisión, los registros de conexión sólo muestran la dirección IP del host que establece la conexión. Si desea que se despliegue el nombre del host puede activar esta opción, pero dependiendo de su configuración de resolución de nombres esto puede imponer una penalización de rendimiento no despreciable." -#: utils/misc/guc.c:1651 +#: utils/misc/guc.c:1659 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Tratar expr=NULL como expr IS NULL." -#: utils/misc/guc.c:1652 +#: utils/misc/guc.c:1660 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "Cuando está activado, expresiones de la forma expr = NULL (o NULL = expr) son tratadas como expr IS NULL, esto es, retornarán verdadero si expr es evaluada al valor nulo, y falso en caso contrario. El comportamiento correcto de expr = NULL es retornar siempre null (desconocido)." -#: utils/misc/guc.c:1664 +#: utils/misc/guc.c:1672 msgid "Enables per-database user names." msgstr "Activar el uso de nombre de usuario locales a cada base de datos." -#: utils/misc/guc.c:1673 +#: utils/misc/guc.c:1681 msgid "Sets the default read-only status of new transactions." msgstr "Estado por omisión de sólo lectura de nuevas transacciones." -#: utils/misc/guc.c:1683 +#: utils/misc/guc.c:1691 msgid "Sets the current transaction's read-only status." msgstr "Activa el estado de sólo lectura de la transacción en curso." -#: utils/misc/guc.c:1693 +#: utils/misc/guc.c:1701 msgid "Sets the default deferrable status of new transactions." msgstr "Estado por omisión de postergable de nuevas transacciones." -#: utils/misc/guc.c:1702 +#: utils/misc/guc.c:1710 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "Si está activo, las transacciones serializables de sólo lectura serán pausadas hasta que puedan ejecutarse sin posibles fallas de serialización." -#: utils/misc/guc.c:1712 +#: utils/misc/guc.c:1720 msgid "Enable row security." msgstr "Activar seguridad de registros." -#: utils/misc/guc.c:1713 +#: utils/misc/guc.c:1721 msgid "When enabled, row security will be applied to all users." msgstr "Cuando está activada, la seguridad de registros se aplicará a todos los usuarios." -#: utils/misc/guc.c:1721 +#: utils/misc/guc.c:1729 #, fuzzy #| msgid "Check function bodies during CREATE FUNCTION." msgid "Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE." msgstr "Verificar definición de funciones durante CREATE FUNCTION." -#: utils/misc/guc.c:1730 +#: utils/misc/guc.c:1738 msgid "Enable input of NULL elements in arrays." msgstr "Habilita el ingreso de elementos nulos en arrays." -#: utils/misc/guc.c:1731 +#: utils/misc/guc.c:1739 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "Cuando está activo, un valor NULL sin comillas en la entrada de un array significa un valor nulo; en caso contrario es tomado literalmente." -#: utils/misc/guc.c:1747 +#: utils/misc/guc.c:1755 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS ya no está soportado; esto sólo puede ser false." -#: utils/misc/guc.c:1757 +#: utils/misc/guc.c:1765 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "Lanzar un subproceso para capturar stderr y/o logs CSV en archivos de log." -#: utils/misc/guc.c:1766 +#: utils/misc/guc.c:1774 msgid "Truncate existing log files of same name during log rotation." msgstr "Truncar archivos de log del mismo nombre durante la rotación." -#: utils/misc/guc.c:1777 +#: utils/misc/guc.c:1785 msgid "Emit information about resource usage in sorting." msgstr "Emitir información acerca de uso de recursos durante los ordenamientos." -#: utils/misc/guc.c:1791 +#: utils/misc/guc.c:1799 msgid "Generate debugging output for synchronized scanning." msgstr "Generar salida de depuración para recorrido sincronizado." -#: utils/misc/guc.c:1806 +#: utils/misc/guc.c:1814 msgid "Enable bounded sorting using heap sort." msgstr "Activar ordenamiento acotado usando «heap sort»." -#: utils/misc/guc.c:1819 +#: utils/misc/guc.c:1827 msgid "Emit WAL-related debugging output." msgstr "Activar salida de depuración de WAL." -#: utils/misc/guc.c:1831 +#: utils/misc/guc.c:1839 #, fuzzy #| msgid "Datetimes are integer based." msgid "Shows whether datetimes are integer based." msgstr "Las fechas y horas se basan en tipos enteros." -#: utils/misc/guc.c:1842 +#: utils/misc/guc.c:1850 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "Define que los nombres de usuario Kerberos y GSSAPI deberían ser tratados sin distinción de mayúsculas." -#: utils/misc/guc.c:1852 +#: utils/misc/guc.c:1860 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Avisa acerca de escapes de backslash en literales de cadena corrientes." -#: utils/misc/guc.c:1862 +#: utils/misc/guc.c:1870 msgid "Causes '...' strings to treat backslashes literally." msgstr "Provoca que las cadenas '...' traten las barras inclinadas inversas (\\) en forma literal." -#: utils/misc/guc.c:1873 +#: utils/misc/guc.c:1881 msgid "Enable synchronized sequential scans." msgstr "Permitir la sincronización de recorridos secuenciales." -#: utils/misc/guc.c:1883 +#: utils/misc/guc.c:1891 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Define si incluir o excluir la transacción con el destino de recuperación." -#: utils/misc/guc.c:1893 +#: utils/misc/guc.c:1901 msgid "Allows connections and queries during recovery." msgstr "Permite conexiones y consultas durante la recuperación." -#: utils/misc/guc.c:1903 +#: utils/misc/guc.c:1911 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Permite retroalimentación desde un hot standby hacia el primario que evitará conflictos en consultas." -#: utils/misc/guc.c:1913 +#: utils/misc/guc.c:1921 msgid "Shows whether hot standby is currently active." msgstr "" -#: utils/misc/guc.c:1924 +#: utils/misc/guc.c:1932 msgid "Allows modifications of the structure of system tables." msgstr "Permite modificaciones de la estructura de las tablas del sistema." -#: utils/misc/guc.c:1935 +#: utils/misc/guc.c:1943 msgid "Disables reading from system indexes." msgstr "Deshabilita lectura de índices del sistema." -#: utils/misc/guc.c:1936 +#: utils/misc/guc.c:1944 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "No evita la actualización de índices, así que es seguro. Lo peor que puede ocurrir es lentitud del sistema." -#: utils/misc/guc.c:1947 +#: utils/misc/guc.c:1955 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Activa el modo de compatibilidad con versiones anteriores de las comprobaciones de privilegios de objetos grandes." -#: utils/misc/guc.c:1948 +#: utils/misc/guc.c:1956 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "Omite las comprobaciones de privilegios cuando se leen o modifican los objetos grandes, para compatibilidad con versiones de PostgreSQL anteriores a 9.0." -#: utils/misc/guc.c:1958 +#: utils/misc/guc.c:1966 msgid "When generating SQL fragments, quote all identifiers." msgstr "Al generar fragmentos SQL, entrecomillar todos los identificadores." -#: utils/misc/guc.c:1968 +#: utils/misc/guc.c:1976 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Indica si las sumas de verificación están activas en este cluster." -#: utils/misc/guc.c:1979 +#: utils/misc/guc.c:1987 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Agregar número de secuencia a mensajes syslog para evitar supresión de duplicados." -#: utils/misc/guc.c:1989 +#: utils/misc/guc.c:1997 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "Dividir mensajes enviados a syslog en líneas y que quepan en 1024 bytes." -#: utils/misc/guc.c:1999 +#: utils/misc/guc.c:2007 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Controla si los Gather y Gather Merge también ejecutan subplanes." -#: utils/misc/guc.c:2000 +#: utils/misc/guc.c:2008 #, fuzzy #| msgid "Should gather nodes also run subplans, or just gather tuples?" msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "¿Deben los nodos de recolección ejecutar subplanes, o sólo recolectar tuplas?" -#: utils/misc/guc.c:2010 +#: utils/misc/guc.c:2018 msgid "Allow JIT compilation." msgstr "Permitir compilación JIT." -#: utils/misc/guc.c:2021 +#: utils/misc/guc.c:2029 #, fuzzy #| msgid "Register JIT compiled function with debugger." msgid "Register JIT-compiled functions with debugger." msgstr "Registra la función JIT compilada con el depurador." -#: utils/misc/guc.c:2038 +#: utils/misc/guc.c:2046 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "Escribe el bitcode LLVM para facilitar depuración de JIT." -#: utils/misc/guc.c:2049 +#: utils/misc/guc.c:2057 msgid "Allow JIT compilation of expressions." msgstr "Permitir compilación JIT de expresiones." -#: utils/misc/guc.c:2060 +#: utils/misc/guc.c:2068 #, fuzzy #| msgid "Register JIT compiled function with perf profiler." msgid "Register JIT-compiled functions with perf profiler." msgstr "Registrar funciones JIT-compiladas con el analizador «perf»." -#: utils/misc/guc.c:2077 +#: utils/misc/guc.c:2085 msgid "Allow JIT compilation of tuple deforming." msgstr "Permitir compilación JIT de deformación de tuplas." -#: utils/misc/guc.c:2088 +#: utils/misc/guc.c:2096 msgid "Whether to continue running after a failure to sync data files." msgstr "Si continuar ejecutando después de una falla al sincronizar archivos de datos." -#: utils/misc/guc.c:2097 +#: utils/misc/guc.c:2105 msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." msgstr "Definir si un receptor de WAL debe crear un slot de replicación temporal en caso de no haber configurado un slot permanente." -#: utils/misc/guc.c:2115 +#: utils/misc/guc.c:2123 msgid "Forces a switch to the next WAL file if a new file has not been started within N seconds." msgstr "Fuerza a que utilizar el siguiente archivo de WAL si no se ha comenzado un nuevo archivo de WAL dentro de N segundos." -#: utils/misc/guc.c:2126 +#: utils/misc/guc.c:2134 msgid "Waits N seconds on connection startup after authentication." msgstr "Espera N segundos al inicio de la conexión después de la autentificación." -#: utils/misc/guc.c:2127 utils/misc/guc.c:2725 +#: utils/misc/guc.c:2135 utils/misc/guc.c:2733 msgid "This allows attaching a debugger to the process." msgstr "Esto permite adjuntar un depurador al proceso." -#: utils/misc/guc.c:2136 +#: utils/misc/guc.c:2144 msgid "Sets the default statistics target." msgstr "Definir el valor por omisión de toma de estadísticas." -#: utils/misc/guc.c:2137 +#: utils/misc/guc.c:2145 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "Esto se aplica a columnas de tablas que no tienen un valor definido a través de ALTER TABLE SET STATISTICS." -#: utils/misc/guc.c:2146 +#: utils/misc/guc.c:2154 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Tamaño de lista de FROM a partir del cual subconsultas no serán colapsadas." -#: utils/misc/guc.c:2148 +#: utils/misc/guc.c:2156 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "El planner mezclará subconsultas en consultas de nivel superior si la lista FROM resultante es menor que esta cantidad de ítems." -#: utils/misc/guc.c:2159 +#: utils/misc/guc.c:2167 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Tamaño de lista de FROM a partir del cual constructos JOIN no serán aplanados." -#: utils/misc/guc.c:2161 +#: utils/misc/guc.c:2169 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "El planner aplanará constructos JOIN explícitos en listas de ítems FROM siempre que la lista resultante no tenga más que esta cantidad de ítems." -#: utils/misc/guc.c:2172 +#: utils/misc/guc.c:2180 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Umbral de ítems en FROM a partir del cual se usará GEQO." -#: utils/misc/guc.c:2182 +#: utils/misc/guc.c:2190 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: effort se usa para determinar los valores por defecto para otros parámetros." -#: utils/misc/guc.c:2192 +#: utils/misc/guc.c:2200 msgid "GEQO: number of individuals in the population." msgstr "GEQO: número de individuos en una población." -#: utils/misc/guc.c:2193 utils/misc/guc.c:2203 +#: utils/misc/guc.c:2201 utils/misc/guc.c:2211 msgid "Zero selects a suitable default value." msgstr "Cero selecciona un valor por omisión razonable." -#: utils/misc/guc.c:2202 +#: utils/misc/guc.c:2210 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: número de iteraciones del algoritmo." -#: utils/misc/guc.c:2214 +#: utils/misc/guc.c:2222 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Define el tiempo a esperar un lock antes de buscar un deadlock." -#: utils/misc/guc.c:2225 +#: utils/misc/guc.c:2233 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Define el máximo retardo antes de cancelar consultas cuando un servidor hot standby está procesando datos de WAL archivado." -#: utils/misc/guc.c:2236 +#: utils/misc/guc.c:2244 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "Define el máximo retardo antes de cancelar consultas cuando un servidor hot standby está procesando datos de WAL en flujo." -#: utils/misc/guc.c:2247 +#: utils/misc/guc.c:2255 msgid "Sets the minimum delay for applying changes during recovery." msgstr "Define el retraso mínimo para aplicar cambios durante la recuperación." -#: utils/misc/guc.c:2258 +#: utils/misc/guc.c:2266 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "Define el intervalo máximo entre reportes de estado que el receptor de WAL envía al servidor origen." -#: utils/misc/guc.c:2269 +#: utils/misc/guc.c:2277 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "Define el máximo tiempo de espera para recibir datos desde el servidor origen." -#: utils/misc/guc.c:2280 +#: utils/misc/guc.c:2288 msgid "Sets the maximum number of concurrent connections." msgstr "Número máximo de conexiones concurrentes." -#: utils/misc/guc.c:2291 +#: utils/misc/guc.c:2299 msgid "Sets the number of connection slots reserved for superusers." msgstr "Número de conexiones reservadas para superusuarios." -#: utils/misc/guc.c:2301 +#: utils/misc/guc.c:2309 #, fuzzy #| msgid "could not map dynamic shared memory segment" msgid "Amount of dynamic shared memory reserved at startup." msgstr "no se pudo mapear el segmento de memoria compartida dinámica" -#: utils/misc/guc.c:2316 +#: utils/misc/guc.c:2324 msgid "Sets the number of shared memory buffers used by the server." msgstr "Número de búfers de memoria compartida usados por el servidor." -#: utils/misc/guc.c:2327 +#: utils/misc/guc.c:2335 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Número de búfers de memoria temporal usados por cada sesión." -#: utils/misc/guc.c:2338 +#: utils/misc/guc.c:2346 msgid "Sets the TCP port the server listens on." msgstr "Puerto TCP en el cual escuchará el servidor." -#: utils/misc/guc.c:2348 +#: utils/misc/guc.c:2356 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Privilegios de acceso al socket Unix." -#: utils/misc/guc.c:2349 +#: utils/misc/guc.c:2357 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Los sockets de dominio Unix usan la funcionalidad de permisos de archivos estándar de Unix. Se espera que el valor de esta opción sea una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. Para usar el modo octal acostumbrado, comience el número con un 0 (cero)." -#: utils/misc/guc.c:2363 +#: utils/misc/guc.c:2371 msgid "Sets the file permissions for log files." msgstr "Define los privilegios para los archivos del registro del servidor." -#: utils/misc/guc.c:2364 +#: utils/misc/guc.c:2372 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Se espera que el valor de esta opción sea una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. Para usar el modo octal acostumbrado, comience el número con un 0 (cero)." -#: utils/misc/guc.c:2378 +#: utils/misc/guc.c:2386 #, fuzzy #| msgid "Mode of the data directory." msgid "Shows the mode of the data directory." msgstr "Modo del directorio de datos." -#: utils/misc/guc.c:2379 +#: utils/misc/guc.c:2387 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "El valor del parámetro es una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. (Para usar el modo octal acostumbrado, comience el número con un 0 (cero).)" -#: utils/misc/guc.c:2392 +#: utils/misc/guc.c:2400 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Establece el límite de memoria que se usará para espacios de trabajo de consultas." -#: utils/misc/guc.c:2393 +#: utils/misc/guc.c:2401 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "Esta es la cantidad máxima de memoria que se usará para operaciones internas de ordenamiento y tablas de hashing, antes de comenzar a usar archivos temporales en disco." -#: utils/misc/guc.c:2405 +#: utils/misc/guc.c:2413 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Establece el límite de memoria que se usará para operaciones de mantención." -#: utils/misc/guc.c:2406 +#: utils/misc/guc.c:2414 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Esto incluye operaciones como VACUUM y CREATE INDEX." -#: utils/misc/guc.c:2416 +#: utils/misc/guc.c:2424 #, fuzzy #| msgid "Sets the maximum memory to be used for maintenance operations." msgid "Sets the maximum memory to be used for logical decoding." msgstr "Establece el límite de memoria que se usará para operaciones de mantención." -#: utils/misc/guc.c:2417 +#: utils/misc/guc.c:2425 #, fuzzy #| msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgid "This much memory can be used by each internal reorder buffer before spilling to disk." msgstr "Esta es la cantidad máxima de memoria que se usará para operaciones internas de ordenamiento y tablas de hashing, antes de comenzar a usar archivos temporales en disco." -#: utils/misc/guc.c:2433 +#: utils/misc/guc.c:2441 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Establece el tamaño máximo del stack, en kilobytes." -#: utils/misc/guc.c:2444 +#: utils/misc/guc.c:2452 msgid "Limits the total size of all temporary files used by each process." msgstr "Limita el tamaño total de todos los archivos temporales usados en cada proceso." -#: utils/misc/guc.c:2445 +#: utils/misc/guc.c:2453 msgid "-1 means no limit." msgstr "-1 significa sin límite." -#: utils/misc/guc.c:2455 +#: utils/misc/guc.c:2463 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Costo de Vacuum de una página encontrada en el buffer." -#: utils/misc/guc.c:2465 +#: utils/misc/guc.c:2473 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Costo de Vacuum de una página no encontrada en el cache." -#: utils/misc/guc.c:2475 +#: utils/misc/guc.c:2483 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Costo de Vacuum de una página ensuciada por vacuum." -#: utils/misc/guc.c:2485 +#: utils/misc/guc.c:2493 msgid "Vacuum cost amount available before napping." msgstr "Costo de Vacuum disponible antes de descansar." -#: utils/misc/guc.c:2495 +#: utils/misc/guc.c:2503 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Costo de Vacuum disponible antes de descansar, para autovacuum." -#: utils/misc/guc.c:2505 +#: utils/misc/guc.c:2513 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "Define la cantidad máxima de archivos abiertos por cada subproceso." -#: utils/misc/guc.c:2518 +#: utils/misc/guc.c:2526 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Define la cantidad máxima de transacciones preparadas simultáneas." -#: utils/misc/guc.c:2529 +#: utils/misc/guc.c:2537 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Define el OID mínimo para hacer seguimiento de locks." -#: utils/misc/guc.c:2530 +#: utils/misc/guc.c:2538 msgid "Is used to avoid output on system tables." msgstr "Se usa para evitar salida excesiva por tablas de sistema." -#: utils/misc/guc.c:2539 +#: utils/misc/guc.c:2547 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Define el OID de una tabla con trazado incondicional de locks." -#: utils/misc/guc.c:2551 +#: utils/misc/guc.c:2559 msgid "Sets the maximum allowed duration of any statement." msgstr "Define la duración máxima permitida de sentencias." -#: utils/misc/guc.c:2552 utils/misc/guc.c:2563 utils/misc/guc.c:2574 -#: utils/misc/guc.c:2585 +#: utils/misc/guc.c:2560 utils/misc/guc.c:2571 utils/misc/guc.c:2582 +#: utils/misc/guc.c:2593 msgid "A value of 0 turns off the timeout." msgstr "Un valor de 0 desactiva el máximo." -#: utils/misc/guc.c:2562 +#: utils/misc/guc.c:2570 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Define la duración máxima permitida de cualquier espera por un lock." -#: utils/misc/guc.c:2573 +#: utils/misc/guc.c:2581 #, fuzzy #| msgid "Sets the maximum allowed duration of any idling transaction." msgid "Sets the maximum allowed idle time between queries, when in a transaction." msgstr "Define la duración máxima permitida de transacciones inactivas." -#: utils/misc/guc.c:2584 +#: utils/misc/guc.c:2592 #, fuzzy #| msgid "Sets the maximum allowed duration of any idling transaction." msgid "Sets the maximum allowed idle time between queries, when not in a transaction." msgstr "Define la duración máxima permitida de transacciones inactivas." -#: utils/misc/guc.c:2595 +#: utils/misc/guc.c:2603 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Mínima edad a la cual VACUUM debería congelar (freeze) una fila de una tabla." -#: utils/misc/guc.c:2605 +#: utils/misc/guc.c:2613 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Edad a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." -#: utils/misc/guc.c:2615 +#: utils/misc/guc.c:2623 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Mínima edad a la cual VACUUM debería congelar (freeze) el multixact en una fila." -#: utils/misc/guc.c:2625 +#: utils/misc/guc.c:2633 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Edad de multixact a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." -#: utils/misc/guc.c:2635 +#: utils/misc/guc.c:2643 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Número de transacciones por las cuales VACUUM y la limpieza HOT deberían postergarse." -#: utils/misc/guc.c:2644 +#: utils/misc/guc.c:2652 #, fuzzy #| msgid "Age at which VACUUM should scan whole table to freeze tuples." msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "Edad a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." -#: utils/misc/guc.c:2653 +#: utils/misc/guc.c:2661 #, fuzzy #| msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "Edad de multixact a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." -#: utils/misc/guc.c:2666 +#: utils/misc/guc.c:2674 msgid "Sets the maximum number of locks per transaction." msgstr "Cantidad máxima de candados (locks) por transacción." -#: utils/misc/guc.c:2667 +#: utils/misc/guc.c:2675 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "El tamaño de la tabla compartida de candados se calcula usando la suposición de que a lo más max_locks_per_transaction * max_connections objetos necesitarán ser bloqueados simultáneamente." -#: utils/misc/guc.c:2678 +#: utils/misc/guc.c:2686 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Cantidad máxima de candados (locks) de predicado por transacción." -#: utils/misc/guc.c:2679 +#: utils/misc/guc.c:2687 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "El tamaño de la tabla compartida de candados se calcula usando la suposición de que a lo más max_pred_locks_per_transaction * max_connections objetos necesitarán ser bloqueados simultáneamente." -#: utils/misc/guc.c:2690 +#: utils/misc/guc.c:2698 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "Cantidad máxima de páginas y tuplas bloqueadas por predicado." -#: utils/misc/guc.c:2691 +#: utils/misc/guc.c:2699 msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." msgstr "Si más que este total de páginas y tuplas en la misma relación están bloqueadas por una conexión, esos locks son reemplazados por un lock a nivel de relación." -#: utils/misc/guc.c:2701 +#: utils/misc/guc.c:2709 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Cantidad máxima de locks de predicado por página." -#: utils/misc/guc.c:2702 +#: utils/misc/guc.c:2710 msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." msgstr "Si más que este número de tuplas de la misma página están bloqueadas por una conexión, esos locks son reemplazados por un lock a nivel de página." -#: utils/misc/guc.c:2712 +#: utils/misc/guc.c:2720 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Define el tiempo máximo para completar proceso de autentificación." -#: utils/misc/guc.c:2724 +#: utils/misc/guc.c:2732 msgid "Waits N seconds on connection startup before authentication." msgstr "Espera N segundos al inicio de la conexión antes de la autentificación." -#: utils/misc/guc.c:2735 +#: utils/misc/guc.c:2743 #, fuzzy #| msgid "Shows the size of write ahead log segments." msgid "Sets the size of WAL files held for standby servers." msgstr "Muestra el tamaño de los segmentos de WAL." -#: utils/misc/guc.c:2746 +#: utils/misc/guc.c:2754 msgid "Sets the minimum size to shrink the WAL to." msgstr "Define el tamaño mínimo al cual reducir el WAL." -#: utils/misc/guc.c:2758 +#: utils/misc/guc.c:2766 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Define el tamaño de WAL que desencadena un checkpoint." -#: utils/misc/guc.c:2770 +#: utils/misc/guc.c:2778 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Define el tiempo máximo entre puntos de control de WAL automáticos." -#: utils/misc/guc.c:2781 +#: utils/misc/guc.c:2789 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "Registrar si el llenado de segmentos de WAL es más frecuente que esto." -#: utils/misc/guc.c:2783 +#: utils/misc/guc.c:2791 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "Envía un mensaje a los registros del servidor si los punto de control causados por el llenado de archivos de segmento sucede con más frecuencia que este número de segundos. Un valor de 0 (cero) desactiva la opción." -#: utils/misc/guc.c:2795 utils/misc/guc.c:3011 utils/misc/guc.c:3058 +#: utils/misc/guc.c:2803 utils/misc/guc.c:3019 utils/misc/guc.c:3066 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "Número de páginas después del cual las escrituras previamente ejecutadas se sincronizan a disco." -#: utils/misc/guc.c:2806 +#: utils/misc/guc.c:2814 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Búfers en memoria compartida para páginas de WAL." -#: utils/misc/guc.c:2817 +#: utils/misc/guc.c:2825 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Tiempo entre sincronizaciones de WAL ejecutadas por el proceso escritor de WAL." -#: utils/misc/guc.c:2828 +#: utils/misc/guc.c:2836 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Cantidad de WAL escrito por el proceso escritor de WAL que desencadena una sincronización (flush)." -#: utils/misc/guc.c:2839 +#: utils/misc/guc.c:2847 #, fuzzy #| msgid "Size of new file to fsync instead of writing WAL." msgid "Minimum size of new file to fsync instead of writing WAL." msgstr "Tamaño del nuevo archivo para hacer fsync en lugar de escribir WAL." -#: utils/misc/guc.c:2850 +#: utils/misc/guc.c:2858 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "Define la cantidad máxima de procesos «WAL sender» simultáneos." -#: utils/misc/guc.c:2861 +#: utils/misc/guc.c:2869 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Define la cantidad máxima de slots de replicación definidos simultáneamente." -#: utils/misc/guc.c:2871 +#: utils/misc/guc.c:2879 #, fuzzy #| msgid "Sets the maximum number of simultaneously defined replication slots." msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "Define la cantidad máxima de slots de replicación definidos simultáneamente." -#: utils/misc/guc.c:2872 +#: utils/misc/guc.c:2880 msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." msgstr "Los slots de replicación serán invalidados, y los segmentos de WAL eliminados o reciclados, si se usa esta cantidad de espacio de disco en WAL." -#: utils/misc/guc.c:2884 +#: utils/misc/guc.c:2892 msgid "Sets the maximum time to wait for WAL replication." msgstr "Define el tiempo máximo a esperar la replicación de WAL." -#: utils/misc/guc.c:2895 +#: utils/misc/guc.c:2903 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Retardo en microsegundos entre completar una transacción y escribir WAL a disco." -#: utils/misc/guc.c:2907 +#: utils/misc/guc.c:2915 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "Mínimo de transacciones concurrentes para esperar commit_delay." -#: utils/misc/guc.c:2918 +#: utils/misc/guc.c:2926 msgid "Sets the number of digits displayed for floating-point values." msgstr "Ajustar el número de dígitos mostrados para valores de coma flotante." -#: utils/misc/guc.c:2919 +#: utils/misc/guc.c:2927 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." msgstr "Esto afecta los tipos real, de doble precisión, y geométricos. Un valor del parámetro cero o negativo se agrega a la cantidad estándar de dígitos (FLT_DIG o DBL_DIG, según sea apropiado). Cualquier valor mayor que cero selecciona el modo de salida preciso." -#: utils/misc/guc.c:2931 +#: utils/misc/guc.c:2939 #, fuzzy #| msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." msgstr "Tiempo mínimo de ejecución a partir del cual se registran las acciones de autovacuum." -#: utils/misc/guc.c:2934 +#: utils/misc/guc.c:2942 #, fuzzy #| msgid "Zero prints all queries. -1 turns this feature off." msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "Cero imprime todas las consultas. -1 desactiva esta funcionalidad." -#: utils/misc/guc.c:2944 +#: utils/misc/guc.c:2952 #, fuzzy #| msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgid "Sets the minimum execution time above which all statements will be logged." msgstr "Tiempo mínimo de ejecución a partir del cual se registran las acciones de autovacuum." -#: utils/misc/guc.c:2946 +#: utils/misc/guc.c:2954 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Cero imprime todas las consultas. -1 desactiva esta funcionalidad." -#: utils/misc/guc.c:2956 +#: utils/misc/guc.c:2964 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "Tiempo mínimo de ejecución a partir del cual se registran las acciones de autovacuum." -#: utils/misc/guc.c:2958 +#: utils/misc/guc.c:2966 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Cero registra todas las acciones. -1 desactiva el registro de autovacuum." -#: utils/misc/guc.c:2968 +#: utils/misc/guc.c:2976 msgid "When logging statements, limit logged parameter values to first N bytes." msgstr "Cuando se registren sentencias, limitar los valores de parámetros registrados a los primeros N bytes." -#: utils/misc/guc.c:2969 utils/misc/guc.c:2980 +#: utils/misc/guc.c:2977 utils/misc/guc.c:2988 msgid "-1 to print values in full." msgstr "-1 para mostrar los valores completos." -#: utils/misc/guc.c:2979 +#: utils/misc/guc.c:2987 msgid "When reporting an error, limit logged parameter values to first N bytes." msgstr "Cuando se reporta un error, limitar los valores de parámetros registrados a los primeros N bytes." -#: utils/misc/guc.c:2990 +#: utils/misc/guc.c:2998 msgid "Background writer sleep time between rounds." msgstr "Tiempo de descanso entre rondas del background writer" -#: utils/misc/guc.c:3001 +#: utils/misc/guc.c:3009 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Número máximo de páginas LRU a escribir en cada ronda del background writer" -#: utils/misc/guc.c:3024 +#: utils/misc/guc.c:3032 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Cantidad máxima de peticiones simultáneas que pueden ser manejadas eficientemente por el sistema de disco." -#: utils/misc/guc.c:3042 +#: utils/misc/guc.c:3050 msgid "A variant of effective_io_concurrency that is used for maintenance work." msgstr "Una variante de effective_io_concurrency que se usa para tareas de mantención." -#: utils/misc/guc.c:3071 +#: utils/misc/guc.c:3079 msgid "Maximum number of concurrent worker processes." msgstr "Número máximo de procesos ayudantes concurrentes." -#: utils/misc/guc.c:3083 +#: utils/misc/guc.c:3091 msgid "Maximum number of logical replication worker processes." msgstr "Número máximo de procesos ayudantes de replicación lógica." -#: utils/misc/guc.c:3095 +#: utils/misc/guc.c:3103 msgid "Maximum number of table synchronization workers per subscription." msgstr "Número máximo de procesos ayudantes de sincronización por suscripción." -#: utils/misc/guc.c:3105 +#: utils/misc/guc.c:3113 msgid "Automatic log file rotation will occur after N minutes." msgstr "La rotación automática de archivos de log se efectuará después de N minutos." -#: utils/misc/guc.c:3116 +#: utils/misc/guc.c:3124 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "La rotación automática de archivos de log se efectuará después de N kilobytes." -#: utils/misc/guc.c:3127 +#: utils/misc/guc.c:3135 msgid "Shows the maximum number of function arguments." msgstr "Muestra la cantidad máxima de argumentos de funciones." -#: utils/misc/guc.c:3138 +#: utils/misc/guc.c:3146 msgid "Shows the maximum number of index keys." msgstr "Muestra la cantidad máxima de claves de índices." -#: utils/misc/guc.c:3149 +#: utils/misc/guc.c:3157 msgid "Shows the maximum identifier length." msgstr "Muestra el largo máximo de identificadores." -#: utils/misc/guc.c:3160 +#: utils/misc/guc.c:3168 msgid "Shows the size of a disk block." msgstr "Muestra el tamaño de un bloque de disco." -#: utils/misc/guc.c:3171 +#: utils/misc/guc.c:3179 msgid "Shows the number of pages per disk file." msgstr "Muestra el número de páginas por archivo en disco." -#: utils/misc/guc.c:3182 +#: utils/misc/guc.c:3190 msgid "Shows the block size in the write ahead log." msgstr "Muestra el tamaño de bloque en el write-ahead log." -#: utils/misc/guc.c:3193 +#: utils/misc/guc.c:3201 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Define el tiempo a esperar antes de reintentar obtener WAL después de un intento fallido." -#: utils/misc/guc.c:3205 +#: utils/misc/guc.c:3213 msgid "Shows the size of write ahead log segments." msgstr "Muestra el tamaño de los segmentos de WAL." -#: utils/misc/guc.c:3218 +#: utils/misc/guc.c:3226 msgid "Time to sleep between autovacuum runs." msgstr "Tiempo de descanso entre ejecuciones de autovacuum." -#: utils/misc/guc.c:3228 +#: utils/misc/guc.c:3236 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Número mínimo de updates o deletes antes de ejecutar vacuum." -#: utils/misc/guc.c:3237 +#: utils/misc/guc.c:3245 #, fuzzy #| msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." msgstr "Número mínimo de inserciones, actualizaciones y eliminaciones de tuplas antes de ejecutar analyze." -#: utils/misc/guc.c:3246 +#: utils/misc/guc.c:3254 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Número mínimo de inserciones, actualizaciones y eliminaciones de tuplas antes de ejecutar analyze." -#: utils/misc/guc.c:3256 +#: utils/misc/guc.c:3264 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Edad a la cual aplicar VACUUM automáticamente a una tabla para prevenir problemas por reciclaje de ID de transacción." -#: utils/misc/guc.c:3271 +#: utils/misc/guc.c:3279 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Edad de multixact a la cual aplicar VACUUM automáticamente a una tabla para prevenir problemas por reciclaje de ID de multixacts." -#: utils/misc/guc.c:3281 +#: utils/misc/guc.c:3289 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Define la cantidad máxima de procesos «autovacuum worker» simultáneos." -#: utils/misc/guc.c:3291 +#: utils/misc/guc.c:3299 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "Cantidad máxima de procesos ayudantes paralelos por operación de mantención." -#: utils/misc/guc.c:3301 +#: utils/misc/guc.c:3309 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Cantidad máxima de locks de predicado por nodo de ejecución." -#: utils/misc/guc.c:3312 +#: utils/misc/guc.c:3320 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "Define la cantidad máxima de procesos ayudantes que pueden estar activos en un momento dado." -#: utils/misc/guc.c:3323 +#: utils/misc/guc.c:3331 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Establece el límite de memoria que cada proceso «autovacuum worker» usará." -#: utils/misc/guc.c:3334 +#: utils/misc/guc.c:3342 msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." msgstr "Tiempo antes de que un snapshot sea demasiado antiguo para leer páginas después de que el snapshot fue tomado." -#: utils/misc/guc.c:3335 +#: utils/misc/guc.c:3343 msgid "A value of -1 disables this feature." msgstr "El valor -1 desactiva esta característica." -#: utils/misc/guc.c:3345 +#: utils/misc/guc.c:3353 msgid "Time between issuing TCP keepalives." msgstr "Tiempo entre cada emisión de TCP keepalive." -#: utils/misc/guc.c:3346 utils/misc/guc.c:3357 utils/misc/guc.c:3481 +#: utils/misc/guc.c:3354 utils/misc/guc.c:3365 utils/misc/guc.c:3489 msgid "A value of 0 uses the system default." msgstr "Un valor 0 usa el valor por omisión del sistema." -#: utils/misc/guc.c:3356 +#: utils/misc/guc.c:3364 msgid "Time between TCP keepalive retransmits." msgstr "Tiempo entre retransmisiones TCP keepalive." -#: utils/misc/guc.c:3367 +#: utils/misc/guc.c:3375 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "La renegociación SSL ya no está soportada; esto sólo puede ser 0." -#: utils/misc/guc.c:3378 +#: utils/misc/guc.c:3386 msgid "Maximum number of TCP keepalive retransmits." msgstr "Cantidad máxima de retransmisiones TCP keepalive." -#: utils/misc/guc.c:3379 +#: utils/misc/guc.c:3387 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "Esto controla el número de retransmisiones consecutivas de keepalive que pueden ser perdidas antes que la conexión sea considerada muerta. Un valor 0 usa el valor por omisión del sistema." -#: utils/misc/guc.c:3390 +#: utils/misc/guc.c:3398 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Define el máximo de resultados permitidos por búsquedas exactas con GIN." -#: utils/misc/guc.c:3401 +#: utils/misc/guc.c:3409 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Define la suposición del optimizador sobre el tamaño total de los caches de datos." -#: utils/misc/guc.c:3402 +#: utils/misc/guc.c:3410 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "Esto es, el tamaño total de caches (cache del kernel y búfers compartidos) usados por archivos de datos de PostgreSQL. Esto se mide en páginas de disco, que normalmente son de 8 kB cada una." -#: utils/misc/guc.c:3413 +#: utils/misc/guc.c:3421 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Define la cantidad mínima de datos en una tabla para un recorrido paralelo." -#: utils/misc/guc.c:3414 +#: utils/misc/guc.c:3422 msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." msgstr "Si el planificador estima que leerá un número de páginas de tabla demasiado pequeñas para alcanzar este límite, no se considerará una búsqueda paralela." -#: utils/misc/guc.c:3424 +#: utils/misc/guc.c:3432 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Define la cantidad mínima de datos en un índice para un recorrido paralelo." -#: utils/misc/guc.c:3425 +#: utils/misc/guc.c:3433 msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." msgstr "Si el planificador estima que leerá un número de páginas de índice demasiado pequeñas para alcanzar este límite, no se considerará una búsqueda paralela." -#: utils/misc/guc.c:3436 +#: utils/misc/guc.c:3444 msgid "Shows the server version as an integer." msgstr "Muestra la versión del servidor como un número entero." -#: utils/misc/guc.c:3447 +#: utils/misc/guc.c:3455 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "Registra el uso de archivos temporales que crezcan más allá de este número de kilobytes." -#: utils/misc/guc.c:3448 +#: utils/misc/guc.c:3456 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "Cero registra todos los archivos. El valor por omisión es -1 (lo cual desactiva el registro)." -#: utils/misc/guc.c:3458 +#: utils/misc/guc.c:3466 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Tamaño reservado para pg_stat_activity.query, en bytes." -#: utils/misc/guc.c:3469 +#: utils/misc/guc.c:3477 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Define el tamaño máximo de la lista de pendientes de un índice GIN." -#: utils/misc/guc.c:3480 +#: utils/misc/guc.c:3488 msgid "TCP user timeout." msgstr "Tiempo de expiración de TCP." -#: utils/misc/guc.c:3491 +#: utils/misc/guc.c:3499 msgid "The size of huge page that should be requested." msgstr "" -#: utils/misc/guc.c:3502 +#: utils/misc/guc.c:3510 msgid "Aggressively invalidate system caches for debugging purposes." msgstr "" -#: utils/misc/guc.c:3525 +#: utils/misc/guc.c:3533 #, fuzzy #| msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgid "Sets the time interval between checks for disconnection while running queries." msgstr "Define el intervalo máximo entre reportes de estado que el receptor de WAL envía al servidor origen." -#: utils/misc/guc.c:3545 +#: utils/misc/guc.c:3553 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "Estimación del costo de una página leída secuencialmente." -#: utils/misc/guc.c:3556 +#: utils/misc/guc.c:3564 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "Estimación del costo de una página leída no secuencialmente." -#: utils/misc/guc.c:3567 +#: utils/misc/guc.c:3575 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "Estimación del costo de procesar cada tupla (fila)." -#: utils/misc/guc.c:3578 +#: utils/misc/guc.c:3586 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "Estimación del costo de procesar cada fila de índice durante un recorrido de índice." -#: utils/misc/guc.c:3589 +#: utils/misc/guc.c:3597 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "Estimación del costo de procesar cada operador o llamada a función." -#: utils/misc/guc.c:3600 +#: utils/misc/guc.c:3608 #, fuzzy #| msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend." msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to leader backend." msgstr "Estimación del costo de pasar cada tupla (fila) desde un proceso ayudante al proceso servidor principal." -#: utils/misc/guc.c:3611 +#: utils/misc/guc.c:3619 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "Estimación del costo de lanzar procesos ayudantes para consultas en paralelo." -#: utils/misc/guc.c:3623 +#: utils/misc/guc.c:3631 msgid "Perform JIT compilation if query is more expensive." msgstr "Ejecutar compilación JIT si la consulta es más cara." -#: utils/misc/guc.c:3624 +#: utils/misc/guc.c:3632 msgid "-1 disables JIT compilation." msgstr "-1 inhabilita compilación JIT." -#: utils/misc/guc.c:3634 +#: utils/misc/guc.c:3642 #, fuzzy #| msgid "Optimize JITed functions if query is more expensive." msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "Optimizar funciones JIT-compiladas si la consulta es más cara." -#: utils/misc/guc.c:3635 +#: utils/misc/guc.c:3643 msgid "-1 disables optimization." msgstr "-1 inhabilita la optimización." -#: utils/misc/guc.c:3645 +#: utils/misc/guc.c:3653 msgid "Perform JIT inlining if query is more expensive." msgstr "Ejecutar «inlining» JIT si la consulta es más cara." -#: utils/misc/guc.c:3646 +#: utils/misc/guc.c:3654 msgid "-1 disables inlining." msgstr "-1 inhabilita el «inlining»." -#: utils/misc/guc.c:3656 +#: utils/misc/guc.c:3664 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Estimación de la fracción de filas de un cursor que serán extraídas." -#: utils/misc/guc.c:3668 +#: utils/misc/guc.c:3676 msgid "GEQO: selective pressure within the population." msgstr "GEQO: presión selectiva dentro de la población." -#: utils/misc/guc.c:3679 +#: utils/misc/guc.c:3687 msgid "GEQO: seed for random path selection." msgstr "GEQO: semilla para la selección aleatoria de caminos." -#: utils/misc/guc.c:3690 +#: utils/misc/guc.c:3698 msgid "Multiple of work_mem to use for hash tables." msgstr "Múltiplo de work_mem para el uso de tablas de hash." -#: utils/misc/guc.c:3701 +#: utils/misc/guc.c:3709 msgid "Multiple of the average buffer usage to free per round." msgstr "Múltiplo del uso promedio de búfers que liberar en cada ronda." -#: utils/misc/guc.c:3711 +#: utils/misc/guc.c:3719 msgid "Sets the seed for random-number generation." msgstr "Semilla para la generación de números aleatorios." -#: utils/misc/guc.c:3722 +#: utils/misc/guc.c:3730 msgid "Vacuum cost delay in milliseconds." msgstr "Tiempo de descanso de vacuum en milisegundos." -#: utils/misc/guc.c:3733 +#: utils/misc/guc.c:3741 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Tiempo de descanso de vacuum en milisegundos, para autovacuum." -#: utils/misc/guc.c:3744 +#: utils/misc/guc.c:3752 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Número de updates o deletes de tuplas antes de ejecutar un vacuum, como fracción de reltuples." -#: utils/misc/guc.c:3754 +#: utils/misc/guc.c:3762 #, fuzzy #| msgid "Number of tuple inserts prior to index cleanup as a fraction of reltuples." msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "Número de inserts de tuplas antes de ejecutar una limpieza de índice, como fracción de reltuples." -#: utils/misc/guc.c:3764 +#: utils/misc/guc.c:3772 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Número mínimo de inserciones, actualizaciones y eliminaciones de tuplas antes de ejecutar analyze, como fracción de reltuples." -#: utils/misc/guc.c:3774 +#: utils/misc/guc.c:3782 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "Tiempo utilizado en escribir páginas «sucias» durante los puntos de control, medido como fracción del intervalo del punto de control." -#: utils/misc/guc.c:3784 +#: utils/misc/guc.c:3792 msgid "Fraction of statements exceeding log_min_duration_sample to be logged." msgstr "Fracción de sentencias que duren más de log_min_duration_sample a ser registradas." -#: utils/misc/guc.c:3785 +#: utils/misc/guc.c:3793 msgid "Use a value between 0.0 (never log) and 1.0 (always log)." msgstr "Use un valor entre 0.0 (no registrar nunca) y 1.0 (registrar siempre)." -#: utils/misc/guc.c:3794 +#: utils/misc/guc.c:3802 #, fuzzy #| msgid "Set the fraction of transactions to log for new transactions." msgid "Sets the fraction of transactions from which to log all statements." msgstr "Define la fracción de transacciones que registrar en el log, para nuevas transacciones." -#: utils/misc/guc.c:3795 +#: utils/misc/guc.c:3803 #, fuzzy #| msgid "Logs all statements from a fraction of transactions. Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgid "Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgstr "Registra todas las sentencias de una fracción de transacciones. Use un valor entre 0.0 (nunca registrar) y 1.0 (registrar todas las sentencias de todas las transacciones)." -#: utils/misc/guc.c:3814 +#: utils/misc/guc.c:3822 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Orden de shell que se invocará para archivar un archivo WAL." -#: utils/misc/guc.c:3824 +#: utils/misc/guc.c:3832 #, fuzzy #| msgid "Sets the shell command that will be called to archive a WAL file." msgid "Sets the shell command that will be called to retrieve an archived WAL file." msgstr "Orden de shell que se invocará para archivar un archivo WAL." -#: utils/misc/guc.c:3834 +#: utils/misc/guc.c:3842 msgid "Sets the shell command that will be executed at every restart point." msgstr "Orden de shell que se invocará en cada «restart point»." -#: utils/misc/guc.c:3844 +#: utils/misc/guc.c:3852 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "Orden de shell que se invocará una vez al terminar la recuperación." -#: utils/misc/guc.c:3854 +#: utils/misc/guc.c:3862 msgid "Specifies the timeline to recover into." msgstr "Especifica la línea de tiempo a la cual recuperar." -#: utils/misc/guc.c:3864 +#: utils/misc/guc.c:3872 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "Defina a «immediate» para terminar la recuperación en cuando se alcance el estado consistente." -#: utils/misc/guc.c:3873 +#: utils/misc/guc.c:3881 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "Define el ID de transacción hasta el cual se ejecutará la recuperación." -#: utils/misc/guc.c:3882 +#: utils/misc/guc.c:3890 msgid "Sets the time stamp up to which recovery will proceed." msgstr "Define la marca de tiempo hasta la cual se ejecutará la recuperación." -#: utils/misc/guc.c:3891 +#: utils/misc/guc.c:3899 msgid "Sets the named restore point up to which recovery will proceed." msgstr "Define el nombre del punto de restauración hasta el cual se ejecutará la recuperación." -#: utils/misc/guc.c:3900 +#: utils/misc/guc.c:3908 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "Define el LSN de la ubicación de WAL hasta la cual se ejecutará la recuperación." -#: utils/misc/guc.c:3910 +#: utils/misc/guc.c:3918 msgid "Specifies a file name whose presence ends recovery in the standby." msgstr "Especifica un nombre de archivo cuya presencia termina la recuperación en el standby." -#: utils/misc/guc.c:3920 +#: utils/misc/guc.c:3928 msgid "Sets the connection string to be used to connect to the sending server." msgstr "Define la cadena de conexión que se usará para conectarse al servidor de origen." -#: utils/misc/guc.c:3931 +#: utils/misc/guc.c:3939 msgid "Sets the name of the replication slot to use on the sending server." msgstr "Define el nombre del slot de replicación a utilizar en el servidor de origen." -#: utils/misc/guc.c:3941 +#: utils/misc/guc.c:3949 msgid "Sets the client's character set encoding." msgstr "Codificación del juego de caracteres del cliente." -#: utils/misc/guc.c:3952 +#: utils/misc/guc.c:3960 msgid "Controls information prefixed to each log line." msgstr "Controla el prefijo que antecede cada línea registrada." -#: utils/misc/guc.c:3953 +#: utils/misc/guc.c:3961 msgid "If blank, no prefix is used." msgstr "si está en blanco, no se usa prefijo." -#: utils/misc/guc.c:3962 +#: utils/misc/guc.c:3970 msgid "Sets the time zone to use in log messages." msgstr "Define el huso horario usando en los mensajes registrados." -#: utils/misc/guc.c:3972 +#: utils/misc/guc.c:3980 msgid "Sets the display format for date and time values." msgstr "Formato de salida para valores de horas y fechas." -#: utils/misc/guc.c:3973 +#: utils/misc/guc.c:3981 msgid "Also controls interpretation of ambiguous date inputs." msgstr "También controla la interpretación de entradas ambiguas de fechas" -#: utils/misc/guc.c:3984 +#: utils/misc/guc.c:3992 msgid "Sets the default table access method for new tables." msgstr "Define el método de acceso a tablas por omisión para nuevas tablas." -#: utils/misc/guc.c:3995 +#: utils/misc/guc.c:4003 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Define el tablespace en el cual crear tablas e índices." -#: utils/misc/guc.c:3996 +#: utils/misc/guc.c:4004 msgid "An empty string selects the database's default tablespace." msgstr "Una cadena vacía especifica el tablespace por omisión de la base de datos." -#: utils/misc/guc.c:4006 +#: utils/misc/guc.c:4014 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "Define el/los tablespace/s en el cual crear tablas temporales y archivos de ordenamiento." -#: utils/misc/guc.c:4017 +#: utils/misc/guc.c:4025 msgid "Sets the path for dynamically loadable modules." msgstr "Ruta para módulos dinámicos." -#: utils/misc/guc.c:4018 +#: utils/misc/guc.c:4026 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "Si se necesita abrir un módulo dinámico y el nombre especificado no tiene un componente de directorio (es decir, no contiene un slash), el sistema buscará el archivo especificado en esta ruta." -#: utils/misc/guc.c:4031 +#: utils/misc/guc.c:4039 msgid "Sets the location of the Kerberos server key file." msgstr "Ubicación del archivo de llave del servidor Kerberos." -#: utils/misc/guc.c:4042 +#: utils/misc/guc.c:4050 msgid "Sets the Bonjour service name." msgstr "Nombre del servicio Bonjour." -#: utils/misc/guc.c:4054 +#: utils/misc/guc.c:4062 msgid "Shows the collation order locale." msgstr "Configuración regional de ordenamiento de cadenas (collation)." -#: utils/misc/guc.c:4065 +#: utils/misc/guc.c:4073 msgid "Shows the character classification and case conversion locale." msgstr "Configuración regional de clasificación de caracteres y conversión de mayúsculas." -#: utils/misc/guc.c:4076 +#: utils/misc/guc.c:4084 msgid "Sets the language in which messages are displayed." msgstr "Idioma en el que se despliegan los mensajes." -#: utils/misc/guc.c:4086 +#: utils/misc/guc.c:4094 msgid "Sets the locale for formatting monetary amounts." msgstr "Configuración regional para formatos de moneda." -#: utils/misc/guc.c:4096 +#: utils/misc/guc.c:4104 msgid "Sets the locale for formatting numbers." msgstr "Configuración regional para formatos de números." -#: utils/misc/guc.c:4106 +#: utils/misc/guc.c:4114 msgid "Sets the locale for formatting date and time values." msgstr "Configuración regional para formatos de horas y fechas." -#: utils/misc/guc.c:4116 +#: utils/misc/guc.c:4124 msgid "Lists shared libraries to preload into each backend." msgstr "Bibliotecas compartidas a precargar en cada proceso." -#: utils/misc/guc.c:4127 +#: utils/misc/guc.c:4135 msgid "Lists shared libraries to preload into server." msgstr "Bibliotecas compartidas a precargar en el servidor." -#: utils/misc/guc.c:4138 +#: utils/misc/guc.c:4146 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Bibliotecas compartidas no privilegiadas a precargar en cada proceso." -#: utils/misc/guc.c:4149 +#: utils/misc/guc.c:4157 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Orden de búsqueda en schemas para nombres que no especifican schema." -#: utils/misc/guc.c:4161 +#: utils/misc/guc.c:4169 #, fuzzy #| msgid "Sets the server (database) character set encoding." msgid "Shows the server (database) character set encoding." msgstr "Codificación de caracteres del servidor (bases de datos)." -#: utils/misc/guc.c:4173 +#: utils/misc/guc.c:4181 msgid "Shows the server version." msgstr "Versión del servidor." -#: utils/misc/guc.c:4185 +#: utils/misc/guc.c:4193 msgid "Sets the current role." msgstr "Define el rol actual." -#: utils/misc/guc.c:4197 +#: utils/misc/guc.c:4205 msgid "Sets the session user name." msgstr "Define el nombre del usuario de sesión." -#: utils/misc/guc.c:4208 +#: utils/misc/guc.c:4216 msgid "Sets the destination for server log output." msgstr "Define el destino de la salida del registro del servidor." -#: utils/misc/guc.c:4209 +#: utils/misc/guc.c:4217 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "Los valores aceptables son combinaciones de «stderr», «syslog», «csvlog» y «eventlog», dependiendo de la plataforma." -#: utils/misc/guc.c:4220 +#: utils/misc/guc.c:4228 msgid "Sets the destination directory for log files." msgstr "Define el directorio de destino de los archivos del registro del servidor." -#: utils/misc/guc.c:4221 +#: utils/misc/guc.c:4229 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Puede ser una ruta relativa al directorio de datos o una ruta absoluta." -#: utils/misc/guc.c:4231 +#: utils/misc/guc.c:4239 msgid "Sets the file name pattern for log files." msgstr "Define el patrón para los nombres de archivo del registro del servidor." -#: utils/misc/guc.c:4242 +#: utils/misc/guc.c:4250 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Nombre de programa para identificar PostgreSQL en mensajes de syslog." -#: utils/misc/guc.c:4253 +#: utils/misc/guc.c:4261 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "Nombre de programa para identificar PostgreSQL en mensajes del log de eventos." -#: utils/misc/guc.c:4264 +#: utils/misc/guc.c:4272 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Huso horario para desplegar e interpretar valores de tiempo." -#: utils/misc/guc.c:4274 +#: utils/misc/guc.c:4282 msgid "Selects a file of time zone abbreviations." msgstr "Selecciona un archivo de abreviaciones de huso horario." -#: utils/misc/guc.c:4284 +#: utils/misc/guc.c:4292 msgid "Sets the owning group of the Unix-domain socket." msgstr "Grupo dueño del socket de dominio Unix." -#: utils/misc/guc.c:4285 +#: utils/misc/guc.c:4293 msgid "The owning user of the socket is always the user that starts the server." msgstr "El usuario dueño del socket siempre es el usuario que inicia el servidor." -#: utils/misc/guc.c:4295 +#: utils/misc/guc.c:4303 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Directorios donde se crearán los sockets de dominio Unix." -#: utils/misc/guc.c:4310 +#: utils/misc/guc.c:4318 msgid "Sets the host name or IP address(es) to listen to." msgstr "Define el nombre de anfitrión o dirección IP en la cual escuchar." -#: utils/misc/guc.c:4325 +#: utils/misc/guc.c:4333 msgid "Sets the server's data directory." msgstr "Define la ubicación del directorio de datos." -#: utils/misc/guc.c:4336 +#: utils/misc/guc.c:4344 msgid "Sets the server's main configuration file." msgstr "Define la ubicación del archivo principal de configuración del servidor." -#: utils/misc/guc.c:4347 +#: utils/misc/guc.c:4355 msgid "Sets the server's \"hba\" configuration file." msgstr "Define la ubicación del archivo de configuración «hba» del servidor." -#: utils/misc/guc.c:4358 +#: utils/misc/guc.c:4366 msgid "Sets the server's \"ident\" configuration file." msgstr "Define la ubicación del archivo de configuración «ident» del servidor." -#: utils/misc/guc.c:4369 +#: utils/misc/guc.c:4377 msgid "Writes the postmaster PID to the specified file." msgstr "Registra el PID de postmaster en el archivo especificado." -#: utils/misc/guc.c:4380 +#: utils/misc/guc.c:4388 #, fuzzy #| msgid "Name of the SSL library." msgid "Shows the name of the SSL library." msgstr "Nombre de la biblioteca SSL." -#: utils/misc/guc.c:4395 +#: utils/misc/guc.c:4403 msgid "Location of the SSL server certificate file." msgstr "Ubicación del archivo de certificado SSL del servidor." -#: utils/misc/guc.c:4405 +#: utils/misc/guc.c:4413 msgid "Location of the SSL server private key file." msgstr "Ubicación del archivo de la llave SSL privada del servidor." -#: utils/misc/guc.c:4415 +#: utils/misc/guc.c:4423 msgid "Location of the SSL certificate authority file." msgstr "Ubicación del archivo de autoridad certificadora SSL." -#: utils/misc/guc.c:4425 +#: utils/misc/guc.c:4433 msgid "Location of the SSL certificate revocation list file." msgstr "Ubicación del archivo de lista de revocación de certificados SSL" -#: utils/misc/guc.c:4435 +#: utils/misc/guc.c:4443 #, fuzzy #| msgid "Location of the SSL certificate revocation list file." msgid "Location of the SSL certificate revocation list directory." msgstr "Ubicación del archivo de lista de revocación de certificados SSL" -#: utils/misc/guc.c:4445 +#: utils/misc/guc.c:4453 msgid "Writes temporary statistics files to the specified directory." msgstr "Escribe los archivos temporales de estadísticas al directorio especificado." -#: utils/misc/guc.c:4456 +#: utils/misc/guc.c:4464 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "Número de standbys sincrónicos y lista de nombres de los potenciales sincrónicos." -#: utils/misc/guc.c:4467 +#: utils/misc/guc.c:4475 msgid "Sets default text search configuration." msgstr "Define la configuración de búsqueda en texto por omisión." -#: utils/misc/guc.c:4477 +#: utils/misc/guc.c:4485 msgid "Sets the list of allowed SSL ciphers." msgstr "Define la lista de cifrados SSL permitidos." -#: utils/misc/guc.c:4492 +#: utils/misc/guc.c:4500 msgid "Sets the curve to use for ECDH." msgstr "Define la curva a usar para ECDH." -#: utils/misc/guc.c:4507 +#: utils/misc/guc.c:4515 msgid "Location of the SSL DH parameters file." msgstr "Ubicación del archivo de parámetros DH para SSL." -#: utils/misc/guc.c:4518 +#: utils/misc/guc.c:4526 msgid "Command to obtain passphrases for SSL." msgstr "Orden para obtener frases clave para SSL." -#: utils/misc/guc.c:4529 +#: utils/misc/guc.c:4537 msgid "Sets the application name to be reported in statistics and logs." msgstr "Define el nombre de aplicación a reportarse en estadísticas y logs." -#: utils/misc/guc.c:4540 +#: utils/misc/guc.c:4548 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Define el nombre del clúster, el cual se incluye en el título de proceso." -#: utils/misc/guc.c:4551 +#: utils/misc/guc.c:4559 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Define los gestores de recursos WAL para los cuales hacer verificaciones de consistencia WAL." -#: utils/misc/guc.c:4552 +#: utils/misc/guc.c:4560 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "Se registrarán imágenes de página completa para todos los bloques de datos, y comparados con los resultados de la aplicación de WAL." -#: utils/misc/guc.c:4562 +#: utils/misc/guc.c:4570 msgid "JIT provider to use." msgstr "Proveedor JIT a usar." -#: utils/misc/guc.c:4573 +#: utils/misc/guc.c:4581 #, fuzzy #| msgid "Logs the host name in the connection logs." msgid "Log backtrace for errors in these functions." msgstr "Registrar el nombre del host en la conexión." -#: utils/misc/guc.c:4593 +#: utils/misc/guc.c:4601 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Define si «\\'» está permitido en literales de cadena." -#: utils/misc/guc.c:4603 +#: utils/misc/guc.c:4611 msgid "Sets the output format for bytea." msgstr "Formato de salida para bytea." -#: utils/misc/guc.c:4613 +#: utils/misc/guc.c:4621 msgid "Sets the message levels that are sent to the client." msgstr "Nivel de mensajes enviados al cliente." -#: utils/misc/guc.c:4614 utils/misc/guc.c:4690 utils/misc/guc.c:4701 -#: utils/misc/guc.c:4777 +#: utils/misc/guc.c:4622 utils/misc/guc.c:4708 utils/misc/guc.c:4719 +#: utils/misc/guc.c:4795 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "Cada nivel incluye todos los niveles que lo siguen. Mientras más posterior el nivel, menos mensajes se enviarán." -#: utils/misc/guc.c:4624 +#: utils/misc/guc.c:4632 +#, fuzzy +#| msgid "unterminated quoted identifier" +msgid "Compute query identifiers." +msgstr "un identificador entre comillas está inconcluso" + +#: utils/misc/guc.c:4642 msgid "Enables the planner to use constraints to optimize queries." msgstr "Permitir el uso de restricciones para limitar los accesos a tablas." -#: utils/misc/guc.c:4625 +#: utils/misc/guc.c:4643 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "Las tablas no serán recorridas si sus restricciones garantizan que ninguna fila coincidirá con la consulta." -#: utils/misc/guc.c:4636 +#: utils/misc/guc.c:4654 #, fuzzy #| msgid "Sets the default table access method for new tables." -msgid "Sets the default compression for new columns." +msgid "Sets the default compression method for compressible values." msgstr "Define el método de acceso a tablas por omisión para nuevas tablas." -#: utils/misc/guc.c:4647 +#: utils/misc/guc.c:4665 msgid "Sets the transaction isolation level of each new transaction." msgstr "Nivel de aislación (isolation level) de transacciones nuevas." -#: utils/misc/guc.c:4657 +#: utils/misc/guc.c:4675 msgid "Sets the current transaction's isolation level." msgstr "Define el nivel de aislación de la transacción en curso." -#: utils/misc/guc.c:4668 +#: utils/misc/guc.c:4686 msgid "Sets the display format for interval values." msgstr "Formato de salida para valores de intervalos." -#: utils/misc/guc.c:4679 +#: utils/misc/guc.c:4697 msgid "Sets the verbosity of logged messages." msgstr "Verbosidad de los mensajes registrados." -#: utils/misc/guc.c:4689 +#: utils/misc/guc.c:4707 msgid "Sets the message levels that are logged." msgstr "Nivel de mensajes registrados." -#: utils/misc/guc.c:4700 +#: utils/misc/guc.c:4718 msgid "Causes all statements generating error at or above this level to be logged." msgstr "Registrar sentencias que generan error de nivel superior o igual a éste." -#: utils/misc/guc.c:4711 +#: utils/misc/guc.c:4729 msgid "Sets the type of statements logged." msgstr "Define el tipo de sentencias que se registran." -#: utils/misc/guc.c:4721 +#: utils/misc/guc.c:4739 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "«Facility» de syslog que se usará cuando syslog esté habilitado." -#: utils/misc/guc.c:4736 +#: utils/misc/guc.c:4754 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "Define el comportamiento de la sesión con respecto a disparadores y reglas de reescritura." -#: utils/misc/guc.c:4746 +#: utils/misc/guc.c:4764 msgid "Sets the current transaction's synchronization level." msgstr "Define el nivel de sincronización de la transacción en curso." -#: utils/misc/guc.c:4756 +#: utils/misc/guc.c:4774 msgid "Allows archiving of WAL files using archive_command." msgstr "Permite el archivado de WAL usando archive_command." -#: utils/misc/guc.c:4766 +#: utils/misc/guc.c:4784 msgid "Sets the action to perform upon reaching the recovery target." msgstr "Acción a ejecutar al alcanzar el destino de recuperación." -#: utils/misc/guc.c:4776 +#: utils/misc/guc.c:4794 msgid "Enables logging of recovery-related debugging information." msgstr "Recolectar información de depuración relacionada con la recuperación." -#: utils/misc/guc.c:4792 +#: utils/misc/guc.c:4810 msgid "Collects function-level statistics on database activity." msgstr "Recolectar estadísticas de actividad de funciones en la base de datos." -#: utils/misc/guc.c:4802 +#: utils/misc/guc.c:4820 #, fuzzy #| msgid "Set the level of information written to the WAL." msgid "Sets the level of information written to the WAL." msgstr "Nivel de información escrita a WAL." -#: utils/misc/guc.c:4812 +#: utils/misc/guc.c:4830 msgid "Selects the dynamic shared memory implementation used." msgstr "Escoge la implementación de memoria compartida dinámica que se usará." -#: utils/misc/guc.c:4822 +#: utils/misc/guc.c:4840 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "Escoge la implementación de memoria compartida dinámica que se usará para la región principal de memoria compartida." -#: utils/misc/guc.c:4832 +#: utils/misc/guc.c:4850 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Selecciona el método usado para forzar escritura de WAL a disco." -#: utils/misc/guc.c:4842 +#: utils/misc/guc.c:4860 msgid "Sets how binary values are to be encoded in XML." msgstr "Define cómo se codificarán los valores binarios en XML." -#: utils/misc/guc.c:4852 +#: utils/misc/guc.c:4870 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "Define si los datos XML implícitos en operaciones de análisis y serialización serán considerados documentos o fragmentos de contenido." -#: utils/misc/guc.c:4863 +#: utils/misc/guc.c:4881 msgid "Use of huge pages on Linux or Windows." msgstr "Usar páginas grandes (huge) en Linux o Windows." -#: utils/misc/guc.c:4873 +#: utils/misc/guc.c:4891 msgid "Forces use of parallel query facilities." msgstr "Obliga al uso de la funcionalidad de consultas paralelas." -#: utils/misc/guc.c:4874 +#: utils/misc/guc.c:4892 msgid "If possible, run query using a parallel worker and with parallel restrictions." msgstr "Si es posible, ejecuta cada consulta en un ayudante paralelo y con restricciones de paralelismo." -#: utils/misc/guc.c:4884 +#: utils/misc/guc.c:4902 msgid "Chooses the algorithm for encrypting passwords." msgstr "Escoge el algoritmo para cifrar contraseñas." -#: utils/misc/guc.c:4894 +#: utils/misc/guc.c:4912 msgid "Controls the planner's selection of custom or generic plan." msgstr "Controla la selección del optimizador de planes genéricos o «custom»." -#: utils/misc/guc.c:4895 +#: utils/misc/guc.c:4913 msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." msgstr "Las sentencias preparadas pueden tener planes genéricos y «custom», y el optimizador intentará escoger cuál es mejor. Esto puede usarse para controlar manualmente el comportamiento." -#: utils/misc/guc.c:4907 +#: utils/misc/guc.c:4925 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "Define la versión mínima del protocolo SSL/TLS a usar." -#: utils/misc/guc.c:4919 +#: utils/misc/guc.c:4937 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "Define la versión máxima del protocolo SSL/TLS a usar." -#: utils/misc/guc.c:4931 +#: utils/misc/guc.c:4949 msgid "Sets the method for synchronizing the data directory before crash recovery." msgstr "" -#: utils/misc/guc.c:5499 +#: utils/misc/guc.c:5518 #, fuzzy, c-format #| msgid "unrecognized configuration parameter \"%s\"" msgid "invalid configuration parameter name \"%s\"" msgstr "parámetro de configuración «%s» no reconocido" -#: utils/misc/guc.c:5501 +#: utils/misc/guc.c:5520 #, c-format -msgid "Custom parameter names must be of the form \"identifier.identifier\"." +msgid "Custom parameter names must be two or more simple identifiers separated by dots." msgstr "" -#: utils/misc/guc.c:5510 utils/misc/guc.c:9269 +#: utils/misc/guc.c:5529 utils/misc/guc.c:9288 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "parámetro de configuración «%s» no reconocido" -#: utils/misc/guc.c:5803 +#: utils/misc/guc.c:5822 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: no se pudo acceder al directorio «%s»: %s\n" -#: utils/misc/guc.c:5808 +#: utils/misc/guc.c:5827 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "Ejecute initdb o pg_basebackup para inicializar un directorio de datos de PostgreSQL.\n" -#: utils/misc/guc.c:5828 +#: utils/misc/guc.c:5847 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -28342,12 +28386,12 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración del servidor.\n" "Debe especificar la opción --config-file o -D o definir la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:5847 +#: utils/misc/guc.c:5866 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s: no se pudo acceder al archivo de configuración «%s»: %s\n" -#: utils/misc/guc.c:5873 +#: utils/misc/guc.c:5892 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -28356,7 +28400,7 @@ msgstr "" "%s no sabe dónde encontrar los archivos de sistema de la base de datos.\n" "Esto puede especificarse como «data_directory» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:5921 +#: utils/misc/guc.c:5940 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -28365,7 +28409,7 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración «hba».\n" "Esto puede especificarse como «hba_file» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:5944 +#: utils/misc/guc.c:5963 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -28374,186 +28418,186 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración «ident».\n" "Esto puede especificarse como «ident_file» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:6869 +#: utils/misc/guc.c:6888 msgid "Value exceeds integer range." msgstr "El valor excede el rango para enteros." -#: utils/misc/guc.c:7105 +#: utils/misc/guc.c:7124 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s está fuera del rango aceptable para el parámetro «%s» (%d .. %d)" -#: utils/misc/guc.c:7141 +#: utils/misc/guc.c:7160 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s está fuera del rango aceptable para el parámetro «%s» (%g .. %g)" -#: utils/misc/guc.c:7301 utils/misc/guc.c:8673 +#: utils/misc/guc.c:7320 utils/misc/guc.c:8692 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "no se puede definir parámetros durante una operación paralela" -#: utils/misc/guc.c:7318 utils/misc/guc.c:8514 +#: utils/misc/guc.c:7337 utils/misc/guc.c:8533 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "no se puede cambiar el parámetro «%s»" -#: utils/misc/guc.c:7351 +#: utils/misc/guc.c:7370 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "el parámetro «%s» no se puede cambiar en este momento" -#: utils/misc/guc.c:7369 utils/misc/guc.c:7416 utils/misc/guc.c:11314 +#: utils/misc/guc.c:7388 utils/misc/guc.c:7435 utils/misc/guc.c:11333 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "se ha denegado el permiso para cambiar la opción «%s»" -#: utils/misc/guc.c:7406 +#: utils/misc/guc.c:7425 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "el parámetro «%s» no se puede cambiar después de efectuar la conexión" -#: utils/misc/guc.c:7454 +#: utils/misc/guc.c:7473 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "no se puede definir el parámetro «%s» dentro una función security-definer" -#: utils/misc/guc.c:8087 utils/misc/guc.c:8134 utils/misc/guc.c:9531 +#: utils/misc/guc.c:8106 utils/misc/guc.c:8153 utils/misc/guc.c:9550 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "debe ser superusuario o miembro del rol pg_read_all settings para examinar «%s»" -#: utils/misc/guc.c:8218 +#: utils/misc/guc.c:8237 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s lleva sólo un argumento" -#: utils/misc/guc.c:8466 +#: utils/misc/guc.c:8485 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "debe ser superusuario para ejecutar la orden ALTER SYSTEM" -#: utils/misc/guc.c:8547 +#: utils/misc/guc.c:8566 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "los valores de parámetros para ALTER SYSTEM no deben contener saltos de línea" -#: utils/misc/guc.c:8592 +#: utils/misc/guc.c:8611 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "no se pudo interpretar el contenido del archivo «%s»" -#: utils/misc/guc.c:8749 +#: utils/misc/guc.c:8768 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT no está implementado" -#: utils/misc/guc.c:8833 +#: utils/misc/guc.c:8852 #, c-format msgid "SET requires parameter name" msgstr "SET requiere el nombre de un parámetro" -#: utils/misc/guc.c:8966 +#: utils/misc/guc.c:8985 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "intento de cambiar la opción «%s»" -#: utils/misc/guc.c:10761 +#: utils/misc/guc.c:10780 #, fuzzy, c-format #| msgid "parameter \"%s\" changed to \"%s\"" msgid "while setting parameter \"%s\" to \"%s\"" msgstr "el parámetro «%s» fue cambiado a «%s»" -#: utils/misc/guc.c:10926 +#: utils/misc/guc.c:10945 #, c-format msgid "parameter \"%s\" could not be set" msgstr "no se pudo cambiar el parámetro «%s»" -#: utils/misc/guc.c:11018 +#: utils/misc/guc.c:11037 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "no se pudo interpretar el valor de para el parámetro «%s»" -#: utils/misc/guc.c:11376 utils/misc/guc.c:11410 +#: utils/misc/guc.c:11395 utils/misc/guc.c:11429 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "valor no válido para el parámetro «%s»: %d" -#: utils/misc/guc.c:11444 +#: utils/misc/guc.c:11463 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "valor no válido para el parámetro «%s»: %g" -#: utils/misc/guc.c:11731 +#: utils/misc/guc.c:11750 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "«temp_buffers» no puede ser cambiado después de que cualquier tabla temporal haya sido accedida en la sesión." -#: utils/misc/guc.c:11743 +#: utils/misc/guc.c:11762 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour no está soportado en este servidor" -#: utils/misc/guc.c:11756 +#: utils/misc/guc.c:11775 #, c-format msgid "SSL is not supported by this build" msgstr "SSL no está soportado en este servidor" -#: utils/misc/guc.c:11768 +#: utils/misc/guc.c:11787 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "No se puede activar el parámetro cuando «log_statement_stats» está activo." -#: utils/misc/guc.c:11780 +#: utils/misc/guc.c:11799 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "No se puede activar «log_statement_stats» cuando «log_parser_stats», «log_planner_stats» o «log_executor_stats» están activos." -#: utils/misc/guc.c:12010 +#: utils/misc/guc.c:12029 #, c-format msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "effective_io_concurrency debe ser 0 en plataformas que no tienen posix_fadvise()." -#: utils/misc/guc.c:12023 +#: utils/misc/guc.c:12042 #, fuzzy, c-format #| msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "effective_io_concurrency debe ser 0 en plataformas que no tienen posix_fadvise()." -#: utils/misc/guc.c:12037 +#: utils/misc/guc.c:12056 #, fuzzy, c-format #| msgid "huge pages not supported on this platform" msgid "huge_page_size must be 0 on this platform." msgstr "las huge pages no están soportados en esta plataforma" -#: utils/misc/guc.c:12051 +#: utils/misc/guc.c:12070 #, fuzzy, c-format #| msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgid "client_connection_check_interval must be set to 0 on platforms that lack POLLRDHUP." msgstr "effective_io_concurrency debe ser 0 en plataformas que no tienen posix_fadvise()." -#: utils/misc/guc.c:12179 +#: utils/misc/guc.c:12198 #, fuzzy, c-format #| msgid "Invalid character value." msgid "invalid character" msgstr "Valor de carácter no válido." -#: utils/misc/guc.c:12239 +#: utils/misc/guc.c:12258 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline no es un número válido." -#: utils/misc/guc.c:12279 +#: utils/misc/guc.c:12298 #, c-format msgid "multiple recovery targets specified" msgstr "múltiples valores de destino de recuperación especificados" -#: utils/misc/guc.c:12280 +#: utils/misc/guc.c:12299 #, c-format msgid "At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set." msgstr "A lo más uno de recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid puede estar definido." -#: utils/misc/guc.c:12288 +#: utils/misc/guc.c:12307 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "El único valor permitido es «immediate»." @@ -28707,12 +28751,12 @@ msgstr "no se puede eliminar el portal «pinned» «%s»" msgid "cannot drop active portal \"%s\"" msgstr "no se puede eliminar el portal activo «%s»" -#: utils/mmgr/portalmem.c:731 +#: utils/mmgr/portalmem.c:736 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "no se puede hacer PREPARE de una transacción que ha creado un cursor WITH HOLD" -#: utils/mmgr/portalmem.c:1270 +#: utils/mmgr/portalmem.c:1275 #, c-format msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "no se pueden ejecutar órdenes de transacción dentro de un bucle de cursor que no es de sólo lectura" diff --git a/src/backend/po/fr.po b/src/backend/po/fr.po index e08201b0b3134..0d953bc4571c2 100644 --- a/src/backend/po/fr.po +++ b/src/backend/po/fr.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-12 06:10+0000\n" -"PO-Revision-Date: 2021-05-17 14:26+0200\n" +"POT-Creation-Date: 2021-06-19 16:10+0000\n" +"PO-Revision-Date: 2021-06-21 12:29+0200\n" "Last-Translator: Christophe Courtois \n" "Language-Team: French \n" "Language: fr\n" @@ -23,24 +23,24 @@ msgstr "" msgid "not recorded" msgstr "non enregistré" -#: ../common/controldata_utils.c:68 ../common/controldata_utils.c:73 commands/copyfrom.c:1516 commands/extension.c:3455 utils/adt/genfile.c:128 +#: ../common/controldata_utils.c:68 ../common/controldata_utils.c:73 commands/copyfrom.c:1516 commands/extension.c:3456 utils/adt/genfile.c:128 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %m" -#: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1271 access/transam/xlog.c:3547 access/transam/xlog.c:4772 access/transam/xlog.c:11336 access/transam/xlog.c:11349 access/transam/xlog.c:11802 access/transam/xlog.c:11882 access/transam/xlog.c:11919 access/transam/xlog.c:11979 access/transam/xlogfuncs.c:703 access/transam/xlogfuncs.c:722 commands/extension.c:3465 libpq/hba.c:536 replication/basebackup.c:2020 replication/logical/origin.c:729 replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4876 replication/logical/snapbuild.c:1733 -#: replication/logical/snapbuild.c:1775 replication/logical/snapbuild.c:1802 replication/slot.c:1658 replication/slot.c:1699 replication/walsender.c:544 storage/file/buffile.c:445 storage/file/copydir.c:195 utils/adt/genfile.c:203 utils/adt/misc.c:859 utils/cache/relmapper.c:741 +#: ../common/controldata_utils.c:86 ../common/controldata_utils.c:89 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1271 access/transam/xlog.c:3545 access/transam/xlog.c:4770 access/transam/xlog.c:11336 access/transam/xlog.c:11349 access/transam/xlog.c:11802 access/transam/xlog.c:11882 access/transam/xlog.c:11919 access/transam/xlog.c:11979 access/transam/xlogfuncs.c:703 access/transam/xlogfuncs.c:722 commands/extension.c:3466 libpq/hba.c:534 replication/basebackup.c:2020 replication/logical/origin.c:729 replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4905 replication/logical/snapbuild.c:1733 +#: replication/logical/snapbuild.c:1775 replication/logical/snapbuild.c:1802 replication/slot.c:1700 replication/slot.c:1741 replication/walsender.c:544 storage/file/buffile.c:445 storage/file/copydir.c:195 utils/adt/genfile.c:202 utils/adt/misc.c:859 utils/cache/relmapper.c:741 #, c-format msgid "could not read file \"%s\": %m" msgstr "n'a pas pu lire le fichier « %s » : %m" -#: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 access/transam/xlog.c:3552 access/transam/xlog.c:4777 replication/basebackup.c:2024 replication/logical/origin.c:734 replication/logical/origin.c:773 replication/logical/snapbuild.c:1738 replication/logical/snapbuild.c:1780 replication/logical/snapbuild.c:1807 replication/slot.c:1662 replication/slot.c:1703 replication/walsender.c:549 utils/cache/relmapper.c:745 +#: ../common/controldata_utils.c:97 ../common/controldata_utils.c:101 access/transam/xlog.c:3550 access/transam/xlog.c:4775 replication/basebackup.c:2024 replication/logical/origin.c:734 replication/logical/origin.c:773 replication/logical/snapbuild.c:1738 replication/logical/snapbuild.c:1780 replication/logical/snapbuild.c:1807 replication/slot.c:1704 replication/slot.c:1745 replication/walsender.c:549 utils/cache/relmapper.c:745 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %zu" -#: ../common/controldata_utils.c:112 ../common/controldata_utils.c:117 ../common/controldata_utils.c:256 ../common/controldata_utils.c:259 access/heap/rewriteheap.c:1185 access/heap/rewriteheap.c:1288 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:516 access/transam/twophase.c:1283 access/transam/twophase.c:1680 access/transam/xlog.c:3419 access/transam/xlog.c:3587 access/transam/xlog.c:3592 access/transam/xlog.c:3920 access/transam/xlog.c:4742 access/transam/xlog.c:5667 access/transam/xlogfuncs.c:728 commands/copyfrom.c:1576 commands/copyto.c:328 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 replication/logical/origin.c:667 -#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:4934 replication/logical/snapbuild.c:1642 replication/logical/snapbuild.c:1815 replication/slot.c:1549 replication/slot.c:1710 replication/walsender.c:559 storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 storage/file/fd.c:3534 storage/file/fd.c:3637 utils/cache/relmapper.c:753 utils/cache/relmapper.c:892 +#: ../common/controldata_utils.c:112 ../common/controldata_utils.c:117 ../common/controldata_utils.c:256 ../common/controldata_utils.c:259 access/heap/rewriteheap.c:1185 access/heap/rewriteheap.c:1288 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:516 access/transam/twophase.c:1283 access/transam/twophase.c:1680 access/transam/xlog.c:3417 access/transam/xlog.c:3585 access/transam/xlog.c:3590 access/transam/xlog.c:3918 access/transam/xlog.c:4740 access/transam/xlog.c:5665 access/transam/xlogfuncs.c:728 commands/copyfrom.c:1576 commands/copyto.c:328 libpq/be-fsstubs.c:462 libpq/be-fsstubs.c:533 replication/logical/origin.c:667 +#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:4963 replication/logical/snapbuild.c:1642 replication/logical/snapbuild.c:1815 replication/slot.c:1591 replication/slot.c:1752 replication/walsender.c:559 storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 storage/file/fd.c:3534 storage/file/fd.c:3637 utils/cache/relmapper.c:753 utils/cache/relmapper.c:892 #, c-format msgid "could not close file \"%s\": %m" msgstr "n'a pas pu fermer le fichier « %s » : %m" @@ -63,26 +63,26 @@ msgstr "" "résultats ci-dessous sont incorrects, et l'installation de PostgreSQL\n" "est incompatible avec ce répertoire des données." -#: ../common/controldata_utils.c:197 ../common/controldata_utils.c:203 ../common/file_utils.c:232 ../common/file_utils.c:291 ../common/file_utils.c:365 access/heap/rewriteheap.c:1271 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1227 access/transam/xlog.c:3305 access/transam/xlog.c:3461 access/transam/xlog.c:3502 access/transam/xlog.c:3700 access/transam/xlog.c:3785 access/transam/xlog.c:3888 access/transam/xlog.c:4762 access/transam/xlogutils.c:803 postmaster/syslogger.c:1487 replication/basebackup.c:616 replication/basebackup.c:1610 replication/logical/origin.c:719 replication/logical/reorderbuffer.c:3544 -#: replication/logical/reorderbuffer.c:4091 replication/logical/reorderbuffer.c:4856 replication/logical/snapbuild.c:1597 replication/logical/snapbuild.c:1704 replication/slot.c:1630 replication/walsender.c:517 replication/walsender.c:2526 storage/file/copydir.c:161 storage/file/fd.c:713 storage/file/fd.c:3521 storage/file/fd.c:3608 storage/smgr/md.c:502 utils/cache/relmapper.c:724 utils/cache/relmapper.c:836 utils/error/elog.c:1938 utils/init/miscinit.c:1346 utils/init/miscinit.c:1480 utils/init/miscinit.c:1557 utils/misc/guc.c:8584 utils/misc/guc.c:8616 +#: ../common/controldata_utils.c:197 ../common/controldata_utils.c:203 ../common/file_utils.c:232 ../common/file_utils.c:291 ../common/file_utils.c:365 access/heap/rewriteheap.c:1271 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1227 access/transam/xlog.c:3303 access/transam/xlog.c:3459 access/transam/xlog.c:3500 access/transam/xlog.c:3698 access/transam/xlog.c:3783 access/transam/xlog.c:3886 access/transam/xlog.c:4760 access/transam/xlogutils.c:803 postmaster/syslogger.c:1488 replication/basebackup.c:616 replication/basebackup.c:1610 replication/logical/origin.c:719 replication/logical/reorderbuffer.c:3570 +#: replication/logical/reorderbuffer.c:4119 replication/logical/reorderbuffer.c:4885 replication/logical/snapbuild.c:1597 replication/logical/snapbuild.c:1704 replication/slot.c:1672 replication/walsender.c:517 replication/walsender.c:2526 storage/file/copydir.c:161 storage/file/fd.c:713 storage/file/fd.c:3521 storage/file/fd.c:3608 storage/smgr/md.c:502 utils/cache/relmapper.c:724 utils/cache/relmapper.c:836 utils/error/elog.c:1938 utils/init/miscinit.c:1346 utils/init/miscinit.c:1480 utils/init/miscinit.c:1557 utils/misc/guc.c:8604 utils/misc/guc.c:8636 #, c-format msgid "could not open file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier « %s » : %m" -#: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 access/transam/twophase.c:1653 access/transam/twophase.c:1662 access/transam/xlog.c:11093 access/transam/xlog.c:11131 access/transam/xlog.c:11544 access/transam/xlogfuncs.c:782 postmaster/postmaster.c:5641 postmaster/syslogger.c:1498 postmaster/syslogger.c:1511 utils/cache/relmapper.c:870 +#: ../common/controldata_utils.c:221 ../common/controldata_utils.c:224 access/transam/twophase.c:1653 access/transam/twophase.c:1662 access/transam/xlog.c:11093 access/transam/xlog.c:11131 access/transam/xlog.c:11544 access/transam/xlogfuncs.c:782 postmaster/postmaster.c:5659 postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 utils/cache/relmapper.c:870 #, c-format msgid "could not write file \"%s\": %m" msgstr "impossible d'écrire le fichier « %s » : %m" -#: ../common/controldata_utils.c:239 ../common/controldata_utils.c:245 ../common/file_utils.c:303 ../common/file_utils.c:373 access/heap/rewriteheap.c:967 access/heap/rewriteheap.c:1179 access/heap/rewriteheap.c:1282 access/transam/timeline.c:432 access/transam/timeline.c:510 access/transam/twophase.c:1674 access/transam/xlog.c:3412 access/transam/xlog.c:3581 access/transam/xlog.c:4735 access/transam/xlog.c:10584 access/transam/xlog.c:10625 replication/logical/snapbuild.c:1635 replication/slot.c:1535 replication/slot.c:1640 storage/file/fd.c:730 storage/file/fd.c:3629 storage/smgr/md.c:950 storage/smgr/md.c:991 storage/sync/sync.c:417 utils/cache/relmapper.c:885 -#: utils/misc/guc.c:8371 +#: ../common/controldata_utils.c:239 ../common/controldata_utils.c:245 ../common/file_utils.c:303 ../common/file_utils.c:373 access/heap/rewriteheap.c:967 access/heap/rewriteheap.c:1179 access/heap/rewriteheap.c:1282 access/transam/timeline.c:432 access/transam/timeline.c:510 access/transam/twophase.c:1674 access/transam/xlog.c:3410 access/transam/xlog.c:3579 access/transam/xlog.c:4733 access/transam/xlog.c:10584 access/transam/xlog.c:10625 replication/logical/snapbuild.c:1635 replication/slot.c:1577 replication/slot.c:1682 storage/file/fd.c:730 storage/file/fd.c:3629 storage/smgr/md.c:950 storage/smgr/md.c:991 storage/sync/sync.c:417 utils/cache/relmapper.c:885 +#: utils/misc/guc.c:8391 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m" -#: ../common/cryptohash_openssl.c:104 ../common/exec.c:522 ../common/exec.c:567 ../common/exec.c:659 ../common/hmac_openssl.c:103 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1341 access/transam/xlog.c:6629 lib/dshash.c:246 libpq/auth.c:1483 libpq/auth.c:1551 libpq/auth.c:2109 libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:347 postmaster/bgworker.c:937 postmaster/postmaster.c:2513 postmaster/postmaster.c:4156 postmaster/postmaster.c:4826 postmaster/postmaster.c:5566 postmaster/postmaster.c:5930 replication/libpqwalreceiver/libpqwalreceiver.c:282 replication/logical/logical.c:205 -#: replication/walsender.c:591 storage/buffer/localbuf.c:442 storage/file/fd.c:882 storage/file/fd.c:1352 storage/file/fd.c:1513 storage/file/fd.c:2321 storage/ipc/procarray.c:1388 storage/ipc/procarray.c:2182 storage/ipc/procarray.c:2189 storage/ipc/procarray.c:2678 storage/ipc/procarray.c:3302 utils/adt/cryptohashfuncs.c:46 utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 utils/adt/pg_locale.c:450 utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 utils/mb/mbutils.c:814 -#: utils/mb/mbutils.c:841 utils/misc/guc.c:5016 utils/misc/guc.c:5032 utils/misc/guc.c:5045 utils/misc/guc.c:8349 utils/misc/tzparser.c:467 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:701 utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:234 utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1082 utils/mmgr/mcxt.c:1113 utils/mmgr/mcxt.c:1149 utils/mmgr/mcxt.c:1201 utils/mmgr/mcxt.c:1236 utils/mmgr/mcxt.c:1271 utils/mmgr/slab.c:236 +#: ../common/cryptohash_openssl.c:104 ../common/exec.c:522 ../common/exec.c:567 ../common/exec.c:659 ../common/hmac_openssl.c:103 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1341 access/transam/xlog.c:6631 lib/dshash.c:246 libpq/auth.c:1482 libpq/auth.c:1550 libpq/auth.c:2108 libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 postmaster/bgworker.c:948 postmaster/postmaster.c:2516 postmaster/postmaster.c:4175 postmaster/postmaster.c:4845 postmaster/postmaster.c:5584 postmaster/postmaster.c:5948 replication/libpqwalreceiver/libpqwalreceiver.c:283 replication/logical/logical.c:205 +#: replication/walsender.c:591 storage/buffer/localbuf.c:442 storage/file/fd.c:882 storage/file/fd.c:1352 storage/file/fd.c:1513 storage/file/fd.c:2321 storage/ipc/procarray.c:1411 storage/ipc/procarray.c:2205 storage/ipc/procarray.c:2212 storage/ipc/procarray.c:2701 storage/ipc/procarray.c:3325 utils/adt/cryptohashfuncs.c:46 utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 utils/adt/pg_locale.c:450 utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 utils/mb/mbutils.c:814 +#: utils/mb/mbutils.c:841 utils/misc/guc.c:5035 utils/misc/guc.c:5051 utils/misc/guc.c:5064 utils/misc/guc.c:8369 utils/misc/tzparser.c:467 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:701 utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/generation.c:234 utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1082 utils/mmgr/mcxt.c:1113 utils/mmgr/mcxt.c:1149 utils/mmgr/mcxt.c:1201 utils/mmgr/mcxt.c:1236 utils/mmgr/mcxt.c:1271 utils/mmgr/slab.c:236 #, c-format msgid "out of memory" msgstr "mémoire épuisée" @@ -132,13 +132,13 @@ msgstr "mémoire épuisée\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" -#: ../common/file_utils.c:87 ../common/file_utils.c:451 ../common/file_utils.c:455 access/transam/twophase.c:1239 access/transam/xlog.c:11069 access/transam/xlog.c:11107 access/transam/xlog.c:11324 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:227 commands/copyfrom.c:1526 commands/copyto.c:734 commands/extension.c:3444 commands/tablespace.c:807 commands/tablespace.c:898 guc-file.l:1060 replication/basebackup.c:439 replication/basebackup.c:622 replication/basebackup.c:698 replication/logical/snapbuild.c:1514 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1863 storage/file/fd.c:1949 storage/file/fd.c:3149 storage/file/fd.c:3353 -#: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:419 utils/adt/genfile.c:645 +#: ../common/file_utils.c:87 ../common/file_utils.c:451 ../common/file_utils.c:455 access/transam/twophase.c:1239 access/transam/xlog.c:11069 access/transam/xlog.c:11107 access/transam/xlog.c:11324 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:227 commands/copyfrom.c:1526 commands/copyto.c:728 commands/extension.c:3445 commands/tablespace.c:807 commands/tablespace.c:898 guc-file.l:1060 replication/basebackup.c:439 replication/basebackup.c:622 replication/basebackup.c:698 replication/logical/snapbuild.c:1514 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1863 storage/file/fd.c:1949 storage/file/fd.c:3149 storage/file/fd.c:3353 +#: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:418 utils/adt/genfile.c:644 #, c-format msgid "could not stat file \"%s\": %m" msgstr "n'a pas pu tester le fichier « %s » : %m" -#: ../common/file_utils.c:166 ../common/pgfnames.c:48 commands/tablespace.c:730 commands/tablespace.c:740 postmaster/postmaster.c:1512 storage/file/fd.c:2724 storage/file/reinit.c:122 utils/adt/misc.c:262 utils/misc/tzparser.c:338 +#: ../common/file_utils.c:166 ../common/pgfnames.c:48 commands/tablespace.c:730 commands/tablespace.c:740 postmaster/postmaster.c:1515 storage/file/fd.c:2724 storage/file/reinit.c:122 utils/adt/misc.c:262 utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" @@ -148,7 +148,7 @@ msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" msgid "could not read directory \"%s\": %m" msgstr "n'a pas pu lire le répertoire « %s » : %m" -#: ../common/file_utils.c:383 access/transam/xlogarchive.c:412 postmaster/syslogger.c:1522 replication/logical/snapbuild.c:1654 replication/slot.c:668 replication/slot.c:1421 replication/slot.c:1563 storage/file/fd.c:748 storage/file/fd.c:846 utils/time/snapmgr.c:1265 +#: ../common/file_utils.c:383 access/transam/xlogarchive.c:412 postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1654 replication/slot.c:643 replication/slot.c:1463 replication/slot.c:1605 storage/file/fd.c:748 storage/file/fd.c:846 utils/time/snapmgr.c:1265 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "n'a pas pu renommer le fichier « %s » en « %s » : %m" @@ -290,7 +290,7 @@ msgstr "nom du fork invalide" msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Les noms de fork valides sont « main », « fsm », « vm » et « init »." -#: ../common/restricted_token.c:64 libpq/auth.c:1513 libpq/auth.c:2545 +#: ../common/restricted_token.c:64 libpq/auth.c:1512 libpq/auth.c:2544 #, c-format msgid "could not load library \"%s\": error code %lu" msgstr "n'a pas pu charger la bibliothèque « %s » : code d'erreur %lu" @@ -363,7 +363,7 @@ msgstr "" msgid "could not look up effective user ID %ld: %s" msgstr "n'a pas pu trouver l'identifiant réel %ld de l'utilisateur : %s" -#: ../common/username.c:45 libpq/auth.c:2045 +#: ../common/username.c:45 libpq/auth.c:2044 msgid "user does not exist" msgstr "l'utilisateur n'existe pas" @@ -514,27 +514,27 @@ msgstr "« %s » n'est pas un index BRIN" msgid "could not open parent table of index \"%s\"" msgstr "n'a pas pu ouvrir la table parent de l'index « %s »" -#: access/brin/brin_bloom.c:751 access/brin/brin_bloom.c:793 access/brin/brin_minmax_multi.c:2984 access/brin/brin_minmax_multi.c:3129 statistics/dependencies.c:651 statistics/dependencies.c:704 statistics/mcv.c:1480 statistics/mcv.c:1511 statistics/mvdistinct.c:343 statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 utils/adt/pseudotypes.c:77 utils/adt/pseudotypes.c:252 +#: access/brin/brin_bloom.c:751 access/brin/brin_bloom.c:793 access/brin/brin_minmax_multi.c:2987 access/brin/brin_minmax_multi.c:3130 statistics/dependencies.c:651 statistics/dependencies.c:704 statistics/mcv.c:1483 statistics/mcv.c:1514 statistics/mvdistinct.c:343 statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 utils/adt/pseudotypes.c:77 utils/adt/pseudotypes.c:252 #, c-format msgid "cannot accept a value of type %s" msgstr "ne peut pas accepter une valeur de type %s" -#: access/brin/brin_minmax_multi.c:2141 access/brin/brin_minmax_multi.c:2148 access/brin/brin_minmax_multi.c:2155 utils/adt/timestamp.c:941 utils/adt/timestamp.c:1515 utils/adt/timestamp.c:1982 utils/adt/timestamp.c:3059 utils/adt/timestamp.c:3064 utils/adt/timestamp.c:3069 utils/adt/timestamp.c:3119 utils/adt/timestamp.c:3126 utils/adt/timestamp.c:3133 utils/adt/timestamp.c:3153 utils/adt/timestamp.c:3160 utils/adt/timestamp.c:3167 utils/adt/timestamp.c:3197 utils/adt/timestamp.c:3205 utils/adt/timestamp.c:3249 utils/adt/timestamp.c:3676 utils/adt/timestamp.c:3801 utils/adt/timestamp.c:4349 +#: access/brin/brin_minmax_multi.c:2146 access/brin/brin_minmax_multi.c:2153 access/brin/brin_minmax_multi.c:2160 utils/adt/timestamp.c:941 utils/adt/timestamp.c:1515 utils/adt/timestamp.c:1982 utils/adt/timestamp.c:3059 utils/adt/timestamp.c:3064 utils/adt/timestamp.c:3069 utils/adt/timestamp.c:3119 utils/adt/timestamp.c:3126 utils/adt/timestamp.c:3133 utils/adt/timestamp.c:3153 utils/adt/timestamp.c:3160 utils/adt/timestamp.c:3167 utils/adt/timestamp.c:3197 utils/adt/timestamp.c:3205 utils/adt/timestamp.c:3249 utils/adt/timestamp.c:3676 utils/adt/timestamp.c:3801 utils/adt/timestamp.c:4349 #, c-format msgid "interval out of range" msgstr "intervalle en dehors des limites" -#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 access/brin/brin_pageops.c:843 access/gin/ginentrypage.c:110 access/gist/gist.c:1441 access/spgist/spgdoinsert.c:1995 +#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 access/brin/brin_pageops.c:843 access/gin/ginentrypage.c:110 access/gist/gist.c:1441 access/spgist/spgdoinsert.c:2000 access/spgist/spgdoinsert.c:2275 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "la taille de la ligne index, %zu, dépasse le maximum, %zu, pour l'index « %s »" -#: access/brin/brin_revmap.c:392 access/brin/brin_revmap.c:398 +#: access/brin/brin_revmap.c:393 access/brin/brin_revmap.c:399 #, c-format msgid "corrupted BRIN index: inconsistent range map" msgstr "index BRIN corrompu : carte d'intervalle incohérente" -#: access/brin/brin_revmap.c:601 +#: access/brin/brin_revmap.c:602 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" msgstr "type de page 0x%04X dans l'index BRIN « %s », bloc %u" @@ -633,7 +633,7 @@ msgstr "le nombre de colonnes (%d) dépasse la limite (%d)" msgid "number of index columns (%d) exceeds limit (%d)" msgstr "le nombre de colonnes indexées (%d) dépasse la limite (%d)" -#: access/common/indextuple.c:199 access/spgist/spgutils.c:947 +#: access/common/indextuple.c:190 access/spgist/spgutils.c:947 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "la ligne index requiert %zu octets, la taille maximum est %zu" @@ -643,75 +643,75 @@ msgstr "la ligne index requiert %zu octets, la taille maximum est %zu" msgid "unsupported format code: %d" msgstr "code de format non supporté : %d" -#: access/common/reloptions.c:506 +#: access/common/reloptions.c:512 access/common/reloptions.c:523 msgid "Valid values are \"on\", \"off\", and \"auto\"." msgstr "Les valeurs valides sont entre « on », « off » et « auto »." -#: access/common/reloptions.c:517 +#: access/common/reloptions.c:534 msgid "Valid values are \"local\" and \"cascaded\"." msgstr "Les valeurs valides sont entre « local » et « cascaded »." -#: access/common/reloptions.c:665 +#: access/common/reloptions.c:682 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "limite dépassée des types de paramètres de la relation définie par l'utilisateur" -#: access/common/reloptions.c:1208 +#: access/common/reloptions.c:1225 #, c-format msgid "RESET must not include values for parameters" msgstr "RESET ne doit pas inclure de valeurs pour les paramètres" -#: access/common/reloptions.c:1240 +#: access/common/reloptions.c:1257 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "espace de nom du paramètre « %s » non reconnu" -#: access/common/reloptions.c:1277 utils/misc/guc.c:12494 +#: access/common/reloptions.c:1294 utils/misc/guc.c:12514 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "les tables avec WITH OIDS ne sont pas supportées" -#: access/common/reloptions.c:1447 +#: access/common/reloptions.c:1464 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "paramètre « %s » non reconnu" -#: access/common/reloptions.c:1559 +#: access/common/reloptions.c:1576 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "le paramètre « %s » est spécifié plus d'une fois" -#: access/common/reloptions.c:1575 +#: access/common/reloptions.c:1592 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "valeur invalide pour l'option booléenne « %s » : %s" -#: access/common/reloptions.c:1587 +#: access/common/reloptions.c:1604 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "valeur invalide pour l'option de type integer « %s » : %s" -#: access/common/reloptions.c:1593 access/common/reloptions.c:1613 +#: access/common/reloptions.c:1610 access/common/reloptions.c:1630 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "valeur %s en dehors des limites pour l'option « %s »" -#: access/common/reloptions.c:1595 +#: access/common/reloptions.c:1612 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Les valeurs valides sont entre « %d » et « %d »." -#: access/common/reloptions.c:1607 +#: access/common/reloptions.c:1624 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "valeur invalide pour l'option de type float « %s » : %s" -#: access/common/reloptions.c:1615 +#: access/common/reloptions.c:1632 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Les valeurs valides sont entre « %f » et « %f »." -#: access/common/reloptions.c:1637 +#: access/common/reloptions.c:1654 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "valeur invalide pour l'option enum « %s » : %s" @@ -731,7 +731,7 @@ msgstr "Cette fonctionnalité nécessite que le serveur dispose du support de lz msgid "You need to rebuild PostgreSQL using %s." msgstr "Vous devez recompiler PostgreSQL en utilisant %s." -#: access/common/tupdesc.c:822 parser/parse_clause.c:772 parser/parse_relation.c:1838 +#: access/common/tupdesc.c:825 parser/parse_clause.c:771 parser/parse_relation.c:1838 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "la colonne « %s » ne peut pas être déclarée SETOF" @@ -864,7 +864,7 @@ msgstr "" msgid "could not determine which collation to use for string hashing" msgstr "n'a pas pu déterminer le collationnement à utiliser pour le hachage de chaîne" -#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:712 catalog/heap.c:718 commands/createas.c:206 commands/createas.c:509 commands/indexcmds.c:1869 commands/tablecmds.c:16827 commands/view.c:86 regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 utils/adt/like_support.c:1003 utils/adt/varchar.c:733 utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1524 +#: access/hash/hashfunc.c:256 access/hash/hashfunc.c:312 catalog/heap.c:713 catalog/heap.c:719 commands/createas.c:206 commands/createas.c:503 commands/indexcmds.c:1869 commands/tablecmds.c:16794 commands/view.c:86 regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 utils/adt/like_support.c:1003 utils/adt/varchar.c:733 utils/adt/varchar.c:994 utils/adt/varchar.c:1054 utils/adt/varlena.c:1524 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Utilisez la clause COLLARE pour configurer explicitement le collationnement." @@ -874,7 +874,7 @@ msgstr "Utilisez la clause COLLARE pour configurer explicitement le collationnem msgid "index row size %zu exceeds hash maximum %zu" msgstr "la taille de la ligne index, %zu, dépasse le hachage maximum, %zu" -#: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:1999 access/spgist/spgutils.c:1008 +#: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:2004 access/spgist/spgdoinsert.c:2279 access/spgist/spgutils.c:1008 #, c-format msgid "Values larger than a buffer page cannot be indexed." msgstr "Les valeurs plus larges qu'une page de tampon ne peuvent pas être indexées." @@ -892,7 +892,7 @@ msgstr "en dehors des pages surchargées dans l'index haché « %s »" #: access/hash/hashsearch.c:315 #, c-format msgid "hash indexes do not support whole-index scans" -msgstr "les index hâchés ne supportent pas les parcours complets d'index" +msgstr "les index hachés ne supportent pas les parcours complets d'index" #: access/hash/hashutil.c:263 #, c-format @@ -916,40 +916,40 @@ msgstr "" msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "il manque un opérateur inter-type pour la famille d'opérateur « %s » de la méthode d'accès %s" -#: access/heap/heapam.c:2328 +#: access/heap/heapam.c:2260 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "ne peut pas insérer de lignes dans un processus parallèle" -#: access/heap/heapam.c:2799 +#: access/heap/heapam.c:2731 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "ne peut pas supprimer les lignes lors d'une opération parallèle" -#: access/heap/heapam.c:2845 +#: access/heap/heapam.c:2777 #, c-format msgid "attempted to delete invisible tuple" msgstr "tentative de supprimer une ligne invisible" -#: access/heap/heapam.c:3274 access/heap/heapam.c:6075 +#: access/heap/heapam.c:3209 access/heap/heapam.c:6010 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "ne peut pas mettre à jour les lignes lors d'une opération parallèle" -#: access/heap/heapam.c:3407 +#: access/heap/heapam.c:3342 #, c-format msgid "attempted to update invisible tuple" msgstr "tentative de mettre à jour une ligne invisible" -#: access/heap/heapam.c:4728 access/heap/heapam.c:4766 access/heap/heapam.c:5022 access/heap/heapam_handler.c:454 +#: access/heap/heapam.c:4663 access/heap/heapam.c:4701 access/heap/heapam.c:4957 access/heap/heapam_handler.c:452 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "n'a pas pu obtenir un verrou sur la relation « %s »" -#: access/heap/heapam_handler.c:403 +#: access/heap/heapam_handler.c:401 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update" -msgstr "la ligne à verrouillée était déjà déplacée dans une autre partition du fait d'une mise à jour concurrente" +msgstr "la ligne à verrouiller était déjà déplacée dans une autre partition du fait d'une mise à jour concurrente" #: access/heap/hio.c:360 access/heap/rewriteheap.c:665 #, c-format @@ -961,7 +961,7 @@ msgstr "la ligne est trop grande : taille %zu, taille maximale %zu" msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "n'a pas pu écrire le fichier « %s », a écrit %d de %d : %m" -#: access/heap/rewriteheap.c:1020 access/heap/rewriteheap.c:1138 access/transam/timeline.c:329 access/transam/timeline.c:485 access/transam/xlog.c:3328 access/transam/xlog.c:3516 access/transam/xlog.c:4714 access/transam/xlog.c:11084 access/transam/xlog.c:11122 access/transam/xlog.c:11527 access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4581 postmaster/postmaster.c:5628 replication/logical/origin.c:587 replication/slot.c:1482 storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1244 +#: access/heap/rewriteheap.c:1020 access/heap/rewriteheap.c:1138 access/transam/timeline.c:329 access/transam/timeline.c:485 access/transam/xlog.c:3326 access/transam/xlog.c:3514 access/transam/xlog.c:4712 access/transam/xlog.c:11084 access/transam/xlog.c:11122 access/transam/xlog.c:11527 access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4600 postmaster/postmaster.c:5646 replication/logical/origin.c:587 replication/slot.c:1524 storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1244 #, c-format msgid "could not create file \"%s\": %m" msgstr "n'a pas pu créer le fichier « %s » : %m" @@ -971,184 +971,184 @@ msgstr "n'a pas pu créer le fichier « %s » : %m" msgid "could not truncate file \"%s\" to %u: %m" msgstr "n'a pas pu tronquer le fichier « %s » en %u : %m" -#: access/heap/rewriteheap.c:1166 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:502 access/transam/xlog.c:3400 access/transam/xlog.c:3572 access/transam/xlog.c:4726 postmaster/postmaster.c:4591 postmaster/postmaster.c:4601 replication/logical/origin.c:599 replication/logical/origin.c:641 replication/logical/origin.c:660 replication/logical/snapbuild.c:1611 replication/slot.c:1517 storage/file/buffile.c:506 storage/file/copydir.c:207 utils/init/miscinit.c:1421 utils/init/miscinit.c:1432 utils/init/miscinit.c:1440 utils/misc/guc.c:8332 utils/misc/guc.c:8363 utils/misc/guc.c:10272 utils/misc/guc.c:10286 utils/time/snapmgr.c:1249 +#: access/heap/rewriteheap.c:1166 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:502 access/transam/xlog.c:3398 access/transam/xlog.c:3570 access/transam/xlog.c:4724 postmaster/postmaster.c:4610 postmaster/postmaster.c:4620 replication/logical/origin.c:599 replication/logical/origin.c:641 replication/logical/origin.c:660 replication/logical/snapbuild.c:1611 replication/slot.c:1559 storage/file/buffile.c:506 storage/file/copydir.c:207 utils/init/miscinit.c:1421 utils/init/miscinit.c:1432 utils/init/miscinit.c:1440 utils/misc/guc.c:8352 utils/misc/guc.c:8383 utils/misc/guc.c:10292 utils/misc/guc.c:10306 utils/time/snapmgr.c:1249 #: utils/time/snapmgr.c:1256 #, c-format msgid "could not write to file \"%s\": %m" msgstr "n'a pas pu écrire dans le fichier « %s » : %m" -#: access/heap/rewriteheap.c:1256 access/transam/twophase.c:1613 access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 postmaster/postmaster.c:1093 postmaster/syslogger.c:1464 replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4358 replication/logical/snapbuild.c:1556 replication/logical/snapbuild.c:1972 replication/slot.c:1614 storage/file/fd.c:788 storage/file/fd.c:3169 storage/file/fd.c:3231 storage/file/reinit.c:250 storage/ipc/dsm.c:315 storage/smgr/md.c:344 storage/smgr/md.c:394 storage/sync/sync.c:231 utils/time/snapmgr.c:1589 +#: access/heap/rewriteheap.c:1256 access/transam/twophase.c:1613 access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 postmaster/postmaster.c:1096 postmaster/syslogger.c:1465 replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4387 replication/logical/snapbuild.c:1556 replication/logical/snapbuild.c:1972 replication/slot.c:1656 storage/file/fd.c:788 storage/file/fd.c:3169 storage/file/fd.c:3231 storage/file/reinit.c:250 storage/ipc/dsm.c:315 storage/smgr/md.c:344 storage/smgr/md.c:394 storage/sync/sync.c:231 utils/time/snapmgr.c:1589 #, c-format msgid "could not remove file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier « %s » : %m" -#: access/heap/vacuumlazy.c:746 +#: access/heap/vacuumlazy.c:772 #, c-format msgid "automatic aggressive vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "VACUUM automatique agressif pour éviter un rebouclage des identifiants de transaction dans la table « %s.%s.%s » : %d parcours d'index\n" -#: access/heap/vacuumlazy.c:748 +#: access/heap/vacuumlazy.c:774 #, c-format msgid "automatic vacuum to prevent wraparound of table \"%s.%s.%s\": index scans: %d\n" msgstr "VACUUM automatique pour éviter un rebouclage des identifiants de transaction dans la table « %s.%s.%s » : parcours d'index : %d\n" -#: access/heap/vacuumlazy.c:753 +#: access/heap/vacuumlazy.c:779 #, c-format msgid "automatic aggressive vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "VACUUM automatique agressif de la table « %s.%s.%s » : %d parcours d'index\n" -#: access/heap/vacuumlazy.c:755 +#: access/heap/vacuumlazy.c:781 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "VACUUM automatique de la table « %s.%s.%s » : %d parcours d'index\n" -#: access/heap/vacuumlazy.c:762 +#: access/heap/vacuumlazy.c:788 #, c-format msgid "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n" msgstr "pages : %u supprimées, %u restants, %u ignorées à cause de verrous; %u ignorées car gelées\n" -#: access/heap/vacuumlazy.c:768 +#: access/heap/vacuumlazy.c:794 #, c-format msgid "tuples: %lld removed, %lld remain, %lld are dead but not yet removable, oldest xmin: %u\n" msgstr "lignes : %lld supprimées, %lld restantes, %lld sont mortes mais pas encore supprimables, plus ancien xmin : %u\n" -#: access/heap/vacuumlazy.c:774 commands/analyze.c:795 +#: access/heap/vacuumlazy.c:800 commands/analyze.c:794 #, c-format msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" msgstr "utilisation du cache : %lld récupérés, %lld ratés, %lld modifiés\n" -#: access/heap/vacuumlazy.c:782 +#: access/heap/vacuumlazy.c:810 #, c-format msgid " %u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n" msgstr "" -#: access/heap/vacuumlazy.c:785 +#: access/heap/vacuumlazy.c:813 msgid "index scan not needed:" msgstr "parcours d'index non nécessaire :" -#: access/heap/vacuumlazy.c:787 +#: access/heap/vacuumlazy.c:815 msgid "index scan needed:" msgstr "parcours d'index nécessaire :" -#: access/heap/vacuumlazy.c:791 +#: access/heap/vacuumlazy.c:819 #, c-format msgid " %u pages from table (%.2f%% of total) have %lld dead item identifiers\n" msgstr "" -#: access/heap/vacuumlazy.c:794 +#: access/heap/vacuumlazy.c:822 msgid "index scan bypassed:" msgstr "" -#: access/heap/vacuumlazy.c:796 +#: access/heap/vacuumlazy.c:824 msgid "index scan bypassed by failsafe:" msgstr "" -#: access/heap/vacuumlazy.c:811 +#: access/heap/vacuumlazy.c:840 #, c-format msgid "index \"%s\": pages: %u in total, %u newly deleted, %u currently deleted, %u reusable\n" msgstr "index \"%s\": blocs : %u au total, %u nouvellement supprimés, %u actuellement supprimés, %u réutilisables\n" -#: access/heap/vacuumlazy.c:818 commands/analyze.c:799 +#: access/heap/vacuumlazy.c:847 commands/analyze.c:798 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "vitesse moyenne de lecture : %.3f Mo/s, vitesse moyenne d'écriture : %.3f Mo/s\n" -#: access/heap/vacuumlazy.c:822 commands/analyze.c:803 +#: access/heap/vacuumlazy.c:851 commands/analyze.c:802 msgid "I/O Timings:" msgstr "Chronométrages I/O :" -#: access/heap/vacuumlazy.c:824 commands/analyze.c:805 +#: access/heap/vacuumlazy.c:853 commands/analyze.c:804 #, c-format msgid " read=%.3f" msgstr " lu=%.3f" -#: access/heap/vacuumlazy.c:827 commands/analyze.c:808 +#: access/heap/vacuumlazy.c:856 commands/analyze.c:807 #, c-format msgid " write=%.3f" msgstr " écrit=%.3f" -#: access/heap/vacuumlazy.c:831 +#: access/heap/vacuumlazy.c:860 #, c-format msgid "system usage: %s\n" msgstr "utilisation du système : %s\n" -#: access/heap/vacuumlazy.c:833 +#: access/heap/vacuumlazy.c:862 #, c-format msgid "WAL usage: %lld records, %lld full page images, %llu bytes" msgstr "utilisation des WAL : %lld enregistrements, %lld images complètes de blocs, %llu octets" -#: access/heap/vacuumlazy.c:908 +#: access/heap/vacuumlazy.c:937 #, c-format msgid "aggressively vacuuming \"%s.%s\"" msgstr "exécution d'un VACUUM agressif sur « %s.%s »" -#: access/heap/vacuumlazy.c:913 commands/cluster.c:898 +#: access/heap/vacuumlazy.c:942 commands/cluster.c:898 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "exécution du VACUUM sur « %s.%s »" -#: access/heap/vacuumlazy.c:1614 +#: access/heap/vacuumlazy.c:1652 #, c-format msgid "\"%s\": removed %lld dead item identifiers in %u pages" msgstr "« %s »: %lld versions de ligne supprimées dans %u blocs" -#: access/heap/vacuumlazy.c:1620 +#: access/heap/vacuumlazy.c:1658 #, c-format msgid "%lld dead row versions cannot be removed yet, oldest xmin: %u\n" msgstr "%lld versions de lignes mortes ne peuvent pas encore être supprimées, plus ancien xmin : %u\n" -#: access/heap/vacuumlazy.c:1622 +#: access/heap/vacuumlazy.c:1660 #, c-format msgid "%u page removed.\n" msgid_plural "%u pages removed.\n" msgstr[0] "%u bloc supprimé.\n" msgstr[1] "%u blocs supprimés.\n" -#: access/heap/vacuumlazy.c:1626 +#: access/heap/vacuumlazy.c:1664 #, c-format msgid "Skipped %u page due to buffer pins, " msgid_plural "Skipped %u pages due to buffer pins, " msgstr[0] "Ignore %u page à cause des verrous de blocs, " msgstr[1] "Ignore %u pages à cause des verrous de blocs, " -#: access/heap/vacuumlazy.c:1630 +#: access/heap/vacuumlazy.c:1668 #, c-format msgid "%u frozen page.\n" msgid_plural "%u frozen pages.\n" msgstr[0] "%u page gelée.\n" msgstr[1] "%u pages gelées.\n" -#: access/heap/vacuumlazy.c:1634 commands/indexcmds.c:3986 commands/indexcmds.c:4005 +#: access/heap/vacuumlazy.c:1672 commands/indexcmds.c:3986 commands/indexcmds.c:4005 #, c-format msgid "%s." msgstr "%s." -#: access/heap/vacuumlazy.c:1637 +#: access/heap/vacuumlazy.c:1675 #, c-format msgid "\"%s\": found %lld removable, %lld nonremovable row versions in %u out of %u pages" msgstr "« %s » : trouvé %lld versions de ligne supprimables, %lld non supprimables, dans %u blocs sur %u" -#: access/heap/vacuumlazy.c:2142 +#: access/heap/vacuumlazy.c:2179 #, c-format msgid "\"%s\": index scan bypassed: %u pages from table (%.2f%% of total) have %lld dead item identifiers" msgstr "" -#: access/heap/vacuumlazy.c:2353 +#: access/heap/vacuumlazy.c:2390 #, c-format msgid "\"%s\": removed %d dead item identifiers in %u pages" msgstr "« %s »: %d versions de lignes mortes supprimées dans %u blocs" -#: access/heap/vacuumlazy.c:2600 +#: access/heap/vacuumlazy.c:2625 #, c-format -msgid "abandoned index vacuuming of table \"%s.%s.%s\" as a failsafe after %d index scans" +msgid "bypassing nonessential maintenance of table \"%s.%s.%s\" as a failsafe after %d index scans" msgstr "" -#: access/heap/vacuumlazy.c:2605 +#: access/heap/vacuumlazy.c:2630 #, c-format msgid "table's relfrozenxid or relminmxid is too far in the past" msgstr "le relfrozenxid ou le relminmxid de la table est loin dans le passé" -#: access/heap/vacuumlazy.c:2606 +#: access/heap/vacuumlazy.c:2631 #, c-format msgid "" "Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" @@ -1157,31 +1157,31 @@ msgstr "" "Réfléchissez à augmenter la valeur du paramètre de configuration « maintenance_work_mem » ou « autovacuum_work_mem ».\n" "Vous pouvez aussi réfléchir à d'autres façons d'exécuter un VACUUM pour tenir sur l'allocation des identifiants de transaction." -#: access/heap/vacuumlazy.c:2746 +#: access/heap/vacuumlazy.c:2771 #, c-format msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index cleanup (planned: %d)" msgstr[0] "a lancé %d worker parallélisé pour le nettoyage d'index du VACUUM (planifié : %d)" msgstr[1] "a lancé %d workers parallélisés pour le nettoyage d'index du VACUUM (planifié : %d)" -#: access/heap/vacuumlazy.c:2752 +#: access/heap/vacuumlazy.c:2777 #, c-format msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" msgstr[0] "a lancé %d worker parallélisé pour le vacuum d'index (planifié : %d)" msgstr[1] "a lancé %d workers parallélisés pour le vacuum d'index (planifié : %d)" -#: access/heap/vacuumlazy.c:3041 +#: access/heap/vacuumlazy.c:3066 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "a parcouru l'index « %s » pour supprimer %d versions de lignes" -#: access/heap/vacuumlazy.c:3098 +#: access/heap/vacuumlazy.c:3123 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "l'index « %s » contient maintenant %.0f versions de ligne dans %u pages" -#: access/heap/vacuumlazy.c:3102 +#: access/heap/vacuumlazy.c:3127 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -1194,67 +1194,67 @@ msgstr "" "%u blocs d'index sont actuellement supprimés, dont %u sont actuellement réutilisables.\n" "%s." -#: access/heap/vacuumlazy.c:3214 +#: access/heap/vacuumlazy.c:3236 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "« %s » : arrêt du TRUNCATE à cause d'un conflit dans la demande de verrou" -#: access/heap/vacuumlazy.c:3280 +#: access/heap/vacuumlazy.c:3302 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "« %s » : %u pages tronqués en %u" -#: access/heap/vacuumlazy.c:3345 +#: access/heap/vacuumlazy.c:3366 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "« %s » : mis en suspens du TRUNCATE à cause d'un conflit dans la demande de verrou" -#: access/heap/vacuumlazy.c:3491 +#: access/heap/vacuumlazy.c:3511 #, c-format msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" msgstr "désactivation de l'option de parallélisation du VACUUM sur « %s » --- ne peut pas exécuter un VACUUM parallélisé sur des tables temporaires" -#: access/heap/vacuumlazy.c:4246 +#: access/heap/vacuumlazy.c:4266 #, c-format msgid "while scanning block %u and offset %u of relation \"%s.%s\"" msgstr "lors du parcours du bloc %u et du décalage %u de la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4249 +#: access/heap/vacuumlazy.c:4269 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "lors du parcours du bloc %u de la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4253 +#: access/heap/vacuumlazy.c:4273 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "lors du parcours de la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4261 +#: access/heap/vacuumlazy.c:4281 #, c-format msgid "while vacuuming block %u and offset %u of relation \"%s.%s\"" msgstr "lors du traitement par VACUUM du bloc %u et du décalage %u de la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4264 +#: access/heap/vacuumlazy.c:4284 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "lors du VACUUM du bloc %u de la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4268 +#: access/heap/vacuumlazy.c:4288 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "lors du vacuum de la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4273 +#: access/heap/vacuumlazy.c:4293 #, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" msgstr "lors du nettoyage de l'index « %s » dans la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4278 +#: access/heap/vacuumlazy.c:4298 #, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" msgstr "lors du nettoyage de l'index « %s » dans la relation « %s.%s »" -#: access/heap/vacuumlazy.c:4284 +#: access/heap/vacuumlazy.c:4304 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "lors du tronquage de la relation « %s.%s » à %u blocs" @@ -1274,7 +1274,7 @@ msgstr "la méthode d'accès « %s » n'a pas de handler" msgid "transaction aborted during system catalog scan" msgstr "transaction annulée lors du parcours du catalogue système" -#: access/index/indexam.c:142 catalog/objectaddress.c:1354 commands/indexcmds.c:2670 commands/tablecmds.c:267 commands/tablecmds.c:291 commands/tablecmds.c:16525 commands/tablecmds.c:18227 +#: access/index/indexam.c:142 catalog/objectaddress.c:1355 commands/indexcmds.c:2670 commands/tablecmds.c:267 commands/tablecmds.c:291 commands/tablecmds.c:16492 commands/tablecmds.c:18194 #, c-format msgid "\"%s\" is not an index" msgstr "« %s » n'est pas un index" @@ -1299,7 +1299,7 @@ msgstr "La clé « %s » existe déjà." msgid "This may be because of a non-immutable index expression." msgstr "Ceci peut être dû à une expression d'index immutable." -#: access/nbtree/nbtpage.c:159 access/nbtree/nbtpage.c:608 parser/parse_utilcmd.c:2329 +#: access/nbtree/nbtpage.c:159 access/nbtree/nbtpage.c:608 parser/parse_utilcmd.c:2319 #, c-format msgid "index \"%s\" is not a btree" msgstr "l'index « %s » n'est pas un btree" @@ -1374,7 +1374,7 @@ msgstr "" msgid "\"%s\" is an index" msgstr "« %s » est un index" -#: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 access/table/table.c:150 catalog/aclchk.c:1799 commands/tablecmds.c:13226 commands/tablecmds.c:16534 +#: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 access/table/table.c:150 catalog/aclchk.c:1799 commands/tablecmds.c:13197 commands/tablecmds.c:16501 #, c-format msgid "\"%s\" is a composite type" msgstr "« %s » est un type composite" @@ -1389,7 +1389,7 @@ msgstr "le tid (%u, %u) n'est pas valide pour la relation « %s »" msgid "%s cannot be empty." msgstr "%s ne peut pas être vide." -#: access/table/tableamapi.c:122 utils/misc/guc.c:12418 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12438 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s est trop long (%d caractères maximum)." @@ -1450,14 +1450,14 @@ msgstr "" "la base de données n'accepte pas de commandes qui génèrent de nouveaux MultiXactId pour éviter des pertes de données à cause de la réinitialisation de l'identifiant de transaction dans\n" "la base de données d'OID %u" -#: access/transam/multixact.c:1049 access/transam/multixact.c:2330 +#: access/transam/multixact.c:1049 access/transam/multixact.c:2333 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "database \"%s\" must be vacuumed before %u more MultiXactIds are used" msgstr[0] "un VACUUM doit être exécuté sur la base de données « %s » dans un maximum de %u MultiXactId" msgstr[1] "un VACUUM doit être exécuté sur la base de données « %s » dans un maximum de %u MultiXactId" -#: access/transam/multixact.c:1058 access/transam/multixact.c:2339 +#: access/transam/multixact.c:1058 access/transam/multixact.c:2342 #, c-format msgid "database with OID %u must be vacuumed before %u more MultiXactId is used" msgid_plural "database with OID %u must be vacuumed before %u more MultiXactIds are used" @@ -1493,7 +1493,7 @@ msgstr[1] "un VACUUM doit être exécuté sur la base de données d'OID %u avant msgid "Execute a database-wide VACUUM in that database with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "Exécute un VACUUM sur la base dans cette base avec une configuration réduite pour vacuum_multixact_freeze_min_age et vacuum_multixact_freeze_table_age." -#: access/transam/multixact.c:1298 +#: access/transam/multixact.c:1300 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "le MultiXactId %u n'existe plus : wraparound apparent" @@ -1503,7 +1503,7 @@ msgstr "le MultiXactId %u n'existe plus : wraparound apparent" msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "le MultiXactId %u n'a pas encore été créé : wraparound apparent" -#: access/transam/multixact.c:2335 access/transam/multixact.c:2344 access/transam/varsup.c:151 access/transam/varsup.c:158 access/transam/varsup.c:466 access/transam/varsup.c:473 +#: access/transam/multixact.c:2338 access/transam/multixact.c:2347 access/transam/varsup.c:151 access/transam/varsup.c:158 access/transam/varsup.c:466 access/transam/varsup.c:473 #, c-format msgid "" "To avoid a database shutdown, execute a database-wide VACUUM in that database.\n" @@ -1513,27 +1513,27 @@ msgstr "" "base. Vous pourriez avoir besoin d'enregistrer ou d'annuler les slots de réplication\n" "trop anciens." -#: access/transam/multixact.c:2618 +#: access/transam/multixact.c:2621 #, c-format msgid "MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk" msgstr "Les protections sur la réutilisation d'un membre MultiXact sont désactivées car le plus ancien MultiXact géré par un checkpoint, %u, n'existe pas sur disque" -#: access/transam/multixact.c:2640 +#: access/transam/multixact.c:2643 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "Les protections sur la réutilisation d'un membre MultiXact sont maintenant activées" -#: access/transam/multixact.c:3027 +#: access/transam/multixact.c:3030 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "plus ancien MultiXact introuvable %u, plus récent MultiXact %u, ignore le troncage" -#: access/transam/multixact.c:3045 +#: access/transam/multixact.c:3048 #, c-format msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" msgstr "ne peut pas tronquer jusqu'au MutiXact %u car il n'existe pas sur disque, ignore le troncage" -#: access/transam/multixact.c:3359 +#: access/transam/multixact.c:3362 #, c-format msgid "invalid MultiXactId: %u" msgstr "MultiXactId invalide : %u" @@ -1770,7 +1770,7 @@ msgstr "taille invalide stockée dans le fichier « %s »" msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "la somme de contrôle CRC calculée ne correspond par à la valeur enregistrée dans le fichier « %s »" -#: access/transam/twophase.c:1342 access/transam/xlog.c:6630 +#: access/transam/twophase.c:1342 access/transam/xlog.c:6632 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Échec lors de l'allocation d'un processeur de lecture de journaux de transactions." @@ -1981,74 +1981,74 @@ msgstr "ne peut pas valider de sous-transactions pendant une opération parallè msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "ne peut pas avoir plus de 2^32-1 sous-transactions dans une transaction" -#: access/transam/xlog.c:1825 +#: access/transam/xlog.c:1823 #, c-format msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" msgstr "" -#: access/transam/xlog.c:2586 +#: access/transam/xlog.c:2584 #, c-format msgid "could not write to log file %s at offset %u, length %zu: %m" msgstr "n'a pas pu écrire le fichier de transactions %s au décalage %u, longueur %zu : %m" -#: access/transam/xlog.c:3988 access/transam/xlogutils.c:798 replication/walsender.c:2520 +#: access/transam/xlog.c:3986 access/transam/xlogutils.c:798 replication/walsender.c:2520 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "le segment demandé du journal de transaction, %s, a déjà été supprimé" -#: access/transam/xlog.c:4263 +#: access/transam/xlog.c:4261 #, c-format msgid "could not rename file \"%s\": %m" msgstr "n'a pas pu renommer le fichier « %s » : %m" -#: access/transam/xlog.c:4305 access/transam/xlog.c:4315 +#: access/transam/xlog.c:4303 access/transam/xlog.c:4313 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "le répertoire « %s » requis pour les journaux de transactions n'existe pas" -#: access/transam/xlog.c:4321 +#: access/transam/xlog.c:4319 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "création du répertoire manquant pour les journaux de transactions « %s »" -#: access/transam/xlog.c:4324 +#: access/transam/xlog.c:4322 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "n'a pas pu créer le répertoire « %s » manquant : %m" -#: access/transam/xlog.c:4427 +#: access/transam/xlog.c:4425 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "identifiant timeline %u inattendu dans le journal de transactions %s, décalage %u" -#: access/transam/xlog.c:4565 +#: access/transam/xlog.c:4563 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "la nouvelle timeline %u n'est pas une enfant de la timeline %u du système" -#: access/transam/xlog.c:4579 +#: access/transam/xlog.c:4577 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "" "la nouvelle timeline %u a été créée à partir de la timeline de la base de données système %u\n" "avant le point de restauration courant %X/%X" -#: access/transam/xlog.c:4598 +#: access/transam/xlog.c:4596 #, c-format msgid "new target timeline is %u" msgstr "la nouvelle timeline cible est %u" -#: access/transam/xlog.c:4634 +#: access/transam/xlog.c:4632 #, c-format msgid "could not generate secret authorization token" msgstr "n'a pas pu générer le jeton secret d'autorisation" -#: access/transam/xlog.c:4793 access/transam/xlog.c:4802 access/transam/xlog.c:4826 access/transam/xlog.c:4833 access/transam/xlog.c:4840 access/transam/xlog.c:4845 access/transam/xlog.c:4852 access/transam/xlog.c:4859 access/transam/xlog.c:4866 access/transam/xlog.c:4873 access/transam/xlog.c:4880 access/transam/xlog.c:4887 access/transam/xlog.c:4896 access/transam/xlog.c:4903 utils/init/miscinit.c:1578 +#: access/transam/xlog.c:4791 access/transam/xlog.c:4800 access/transam/xlog.c:4824 access/transam/xlog.c:4831 access/transam/xlog.c:4838 access/transam/xlog.c:4843 access/transam/xlog.c:4850 access/transam/xlog.c:4857 access/transam/xlog.c:4864 access/transam/xlog.c:4871 access/transam/xlog.c:4878 access/transam/xlog.c:4885 access/transam/xlog.c:4894 access/transam/xlog.c:4901 utils/init/miscinit.c:1578 #, c-format msgid "database files are incompatible with server" msgstr "les fichiers de la base de données sont incompatibles avec le serveur" -#: access/transam/xlog.c:4794 +#: access/transam/xlog.c:4792 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), but the server was compiled with PG_CONTROL_VERSION %d (0x%08x)." msgstr "" @@ -2056,149 +2056,149 @@ msgstr "" "%d (0x%08x) alors que le serveur a été compilé avec un PG_CONTROL_VERSION à\n" "%d (0x%08x)." -#: access/transam/xlog.c:4798 +#: access/transam/xlog.c:4796 #, c-format msgid "This could be a problem of mismatched byte ordering. It looks like you need to initdb." msgstr "" "Ceci peut être un problème d'incohérence dans l'ordre des octets.\n" "Il se peut que vous ayez besoin d'initdb." -#: access/transam/xlog.c:4803 +#: access/transam/xlog.c:4801 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d, but the server was compiled with PG_CONTROL_VERSION %d." msgstr "" "Le cluster de base de données a été initialisé avec un PG_CONTROL_VERSION à\n" "%d alors que le serveur a été compilé avec un PG_CONTROL_VERSION à %d." -#: access/transam/xlog.c:4806 access/transam/xlog.c:4830 access/transam/xlog.c:4837 access/transam/xlog.c:4842 +#: access/transam/xlog.c:4804 access/transam/xlog.c:4828 access/transam/xlog.c:4835 access/transam/xlog.c:4840 #, c-format msgid "It looks like you need to initdb." msgstr "Il semble que vous avez besoin d'initdb." -#: access/transam/xlog.c:4817 +#: access/transam/xlog.c:4815 #, c-format msgid "incorrect checksum in control file" msgstr "somme de contrôle incorrecte dans le fichier de contrôle" -#: access/transam/xlog.c:4827 +#: access/transam/xlog.c:4825 #, c-format msgid "The database cluster was initialized with CATALOG_VERSION_NO %d, but the server was compiled with CATALOG_VERSION_NO %d." msgstr "" "Le cluster de base de données a été initialisé avec un CATALOG_VERSION_NO à\n" "%d alors que le serveur a été compilé avec un CATALOG_VERSION_NO à %d." -#: access/transam/xlog.c:4834 +#: access/transam/xlog.c:4832 #, c-format msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." msgstr "" "Le cluster de bases de données a été initialisé avec un MAXALIGN à %d alors\n" "que le serveur a été compilé avec un MAXALIGN à %d." -#: access/transam/xlog.c:4841 +#: access/transam/xlog.c:4839 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "" "Le cluster de bases de données semble utiliser un format différent pour les\n" "nombres à virgule flottante de celui de l'exécutable serveur." -#: access/transam/xlog.c:4846 +#: access/transam/xlog.c:4844 #, c-format msgid "The database cluster was initialized with BLCKSZ %d, but the server was compiled with BLCKSZ %d." msgstr "" "Le cluster de base de données a été initialisé avec un BLCKSZ à %d alors que\n" "le serveur a été compilé avec un BLCKSZ à %d." -#: access/transam/xlog.c:4849 access/transam/xlog.c:4856 access/transam/xlog.c:4863 access/transam/xlog.c:4870 access/transam/xlog.c:4877 access/transam/xlog.c:4884 access/transam/xlog.c:4891 access/transam/xlog.c:4899 access/transam/xlog.c:4906 +#: access/transam/xlog.c:4847 access/transam/xlog.c:4854 access/transam/xlog.c:4861 access/transam/xlog.c:4868 access/transam/xlog.c:4875 access/transam/xlog.c:4882 access/transam/xlog.c:4889 access/transam/xlog.c:4897 access/transam/xlog.c:4904 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Il semble que vous avez besoin de recompiler ou de relancer initdb." -#: access/transam/xlog.c:4853 +#: access/transam/xlog.c:4851 #, c-format msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." msgstr "" "Le cluster de bases de données a été initialisé avec un RELSEG_SIZE à %d\n" "alors que le serveur a été compilé avec un RELSEG_SIZE à %d." -#: access/transam/xlog.c:4860 +#: access/transam/xlog.c:4858 #, c-format msgid "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was compiled with XLOG_BLCKSZ %d." msgstr "" "Le cluster de base de données a été initialisé avec un XLOG_BLCKSZ à %d\n" "alors que le serveur a été compilé avec un XLOG_BLCKSZ à %d." -#: access/transam/xlog.c:4867 +#: access/transam/xlog.c:4865 #, c-format msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." msgstr "" "Le cluster de bases de données a été initialisé avec un NAMEDATALEN à %d\n" "alors que le serveur a été compilé avec un NAMEDATALEN à %d." -#: access/transam/xlog.c:4874 +#: access/transam/xlog.c:4872 #, c-format msgid "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server was compiled with INDEX_MAX_KEYS %d." msgstr "" "Le groupe de bases de données a été initialisé avec un INDEX_MAX_KEYS à %d\n" "alors que le serveur a été compilé avec un INDEX_MAX_KEYS à %d." -#: access/transam/xlog.c:4881 +#: access/transam/xlog.c:4879 #, c-format msgid "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the server was compiled with TOAST_MAX_CHUNK_SIZE %d." msgstr "" "Le cluster de bases de données a été initialisé avec un TOAST_MAX_CHUNK_SIZE\n" "à %d alors que le serveur a été compilé avec un TOAST_MAX_CHUNK_SIZE à %d." -#: access/transam/xlog.c:4888 +#: access/transam/xlog.c:4886 #, c-format msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." msgstr "" "Le cluster de base de données a été initialisé avec un LOBLKSIZE à %d alors que\n" "le serveur a été compilé avec un LOBLKSIZE à %d." -#: access/transam/xlog.c:4897 +#: access/transam/xlog.c:4895 #, c-format msgid "The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL." msgstr "" "Le cluster de base de données a été initialisé sans USE_FLOAT8_BYVAL\n" "alors que le serveur a été compilé avec USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4904 +#: access/transam/xlog.c:4902 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "" "Le cluster de base de données a été initialisé avec USE_FLOAT8_BYVAL\n" "alors que le serveur a été compilé sans USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4913 +#: access/transam/xlog.c:4911 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octet" msgstr[1] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octets" -#: access/transam/xlog.c:4925 +#: access/transam/xlog.c:4923 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "« min_wal_size » doit être au moins le double de « wal_segment_size »" -#: access/transam/xlog.c:4929 +#: access/transam/xlog.c:4927 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "« max_wal_size » doit être au moins le double de « wal_segment_size »" -#: access/transam/xlog.c:5363 +#: access/transam/xlog.c:5361 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "n'a pas pu écrire le « bootstrap » du journal des transactions : %m" -#: access/transam/xlog.c:5371 +#: access/transam/xlog.c:5369 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "" "n'a pas pu synchroniser sur disque (fsync) le « bootstrap » du journal des\n" "transactions : %m" -#: access/transam/xlog.c:5377 +#: access/transam/xlog.c:5375 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "n'a pas pu fermer le « bootstrap » du journal des transactions : %m" @@ -2206,255 +2206,255 @@ msgstr "n'a pas pu fermer le « bootstrap » du journal des transactions : %m" # /* # * Check for old recovery API file: recovery.conf # */ -#: access/transam/xlog.c:5438 +#: access/transam/xlog.c:5436 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "utiliser le fichier de commande de la restauration « %s » n'est plus supporté" -#: access/transam/xlog.c:5503 +#: access/transam/xlog.c:5501 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "le mode de restauration n'est pas supporté pour les serveurs mono-utilisateur" -#: access/transam/xlog.c:5520 +#: access/transam/xlog.c:5518 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "ni primary_conninfo ni restore_command n'est spécifié" -#: access/transam/xlog.c:5521 +#: access/transam/xlog.c:5519 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "" "Le serveur de la base de données va régulièrement interroger le sous-répertoire\n" "pg_wal pour vérifier les fichiers placés ici." -#: access/transam/xlog.c:5529 +#: access/transam/xlog.c:5527 #, c-format msgid "must specify restore_command when standby mode is not enabled" -msgstr "doit spécifier une restore_command quand standby_mode n'est pas activé" +msgstr "doit spécifier une restore_command quand le mode standby n'est pas activé" -#: access/transam/xlog.c:5567 +#: access/transam/xlog.c:5565 #, c-format msgid "recovery target timeline %u does not exist" msgstr "le timeline cible, %u, de la restauration n'existe pas" -#: access/transam/xlog.c:5689 +#: access/transam/xlog.c:5687 #, c-format msgid "archive recovery complete" msgstr "restauration de l'archive terminée" -#: access/transam/xlog.c:5755 access/transam/xlog.c:6026 +#: access/transam/xlog.c:5753 access/transam/xlog.c:6024 #, c-format msgid "recovery stopping after reaching consistency" msgstr "arrêt de la restauration après avoir atteint le point de cohérence" -#: access/transam/xlog.c:5776 +#: access/transam/xlog.c:5774 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "arrêt de la restauration avant l'emplacement WAL (LSN) « %X/%X »" -#: access/transam/xlog.c:5861 +#: access/transam/xlog.c:5859 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "arrêt de la restauration avant validation de la transaction %u, %s" -#: access/transam/xlog.c:5868 +#: access/transam/xlog.c:5866 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "arrêt de la restauration avant annulation de la transaction %u, %s" -#: access/transam/xlog.c:5921 +#: access/transam/xlog.c:5919 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "restauration en arrêt au point de restauration « %s », heure %s" -#: access/transam/xlog.c:5939 +#: access/transam/xlog.c:5937 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "arrêt de la restauration après l'emplacement WAL (LSN) « %X/%X »" -#: access/transam/xlog.c:6006 +#: access/transam/xlog.c:6004 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "arrêt de la restauration après validation de la transaction %u, %s" -#: access/transam/xlog.c:6014 +#: access/transam/xlog.c:6012 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "arrêt de la restauration après annulation de la transaction %u, %s" -#: access/transam/xlog.c:6059 +#: access/transam/xlog.c:6057 #, c-format msgid "pausing at the end of recovery" msgstr "pause à la fin de la restauration" -#: access/transam/xlog.c:6060 +#: access/transam/xlog.c:6058 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Exécuter pg_wal_replay_resume() pour promouvoir." -#: access/transam/xlog.c:6063 access/transam/xlog.c:6336 +#: access/transam/xlog.c:6061 access/transam/xlog.c:6334 #, c-format msgid "recovery has paused" msgstr "restauration en pause" -#: access/transam/xlog.c:6064 +#: access/transam/xlog.c:6062 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Exécuter pg_wal_replay_resume() pour continuer." -#: access/transam/xlog.c:6327 +#: access/transam/xlog.c:6325 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "le hot standby n'est pas possible à cause d'un paramétrage insuffisant" -#: access/transam/xlog.c:6328 access/transam/xlog.c:6351 access/transam/xlog.c:6381 +#: access/transam/xlog.c:6326 access/transam/xlog.c:6353 access/transam/xlog.c:6383 #, c-format msgid "%s = %d is a lower setting than on the primary server, where its value was %d." -msgstr "%s = %d est un paramètrage plus bas que celui du serveur primaire, où sa valeur était %d." +msgstr "%s = %d est un paramétrage plus bas que celui du serveur primaire, où sa valeur était %d." -#: access/transam/xlog.c:6337 +#: access/transam/xlog.c:6335 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "Si la restauration sort de la pause, le serveur sera arrêté." -#: access/transam/xlog.c:6338 +#: access/transam/xlog.c:6336 #, c-format msgid "You can then restart the server after making the necessary configuration changes." msgstr "Vous pouvez alors redémarrer le serveur après avoir réaliser les modifications nécessaires sur la configuration." -#: access/transam/xlog.c:6349 +#: access/transam/xlog.c:6347 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "la promotion n'est pas possible à cause d'une configuration insuffisante des paramètres" -#: access/transam/xlog.c:6355 +#: access/transam/xlog.c:6357 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "Redémarre le serveur après avoir effectuer les changements nécessaires de configuration." -#: access/transam/xlog.c:6379 +#: access/transam/xlog.c:6381 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "restauration annulée à cause d'un paramétrage insuffisant" -#: access/transam/xlog.c:6385 +#: access/transam/xlog.c:6387 #, c-format msgid "You can restart the server after making the necessary configuration changes." msgstr "Vous pouvez redémarrer le serveur après avoir réalisé les modifications nécessaires sur la configuration." -#: access/transam/xlog.c:6407 +#: access/transam/xlog.c:6409 #, c-format msgid "WAL was generated with wal_level=minimal, cannot continue recovering" msgstr "le journal de transactions a été généré avec le paramètre wal_level=minimal, ne peut pas continuer la restauration" -#: access/transam/xlog.c:6408 +#: access/transam/xlog.c:6410 #, c-format msgid "This happens if you temporarily set wal_level=minimal on the server." msgstr "Ceci peut arriver si vous configurez temporairement wal_level à minimal sur le serveur." -#: access/transam/xlog.c:6409 +#: access/transam/xlog.c:6411 #, c-format msgid "Use a backup taken after setting wal_level to higher than minimal." msgstr "Utilisez la sauvegarde prise lors que la configuration de wal_level était au-dessus du niveau minimal." -#: access/transam/xlog.c:6478 +#: access/transam/xlog.c:6480 #, c-format msgid "control file contains invalid checkpoint location" msgstr "le fichier de contrôle contient un emplacement de checkpoint invalide" -#: access/transam/xlog.c:6489 +#: access/transam/xlog.c:6491 #, c-format msgid "database system was shut down at %s" msgstr "le système de bases de données a été arrêté à %s" -#: access/transam/xlog.c:6495 +#: access/transam/xlog.c:6497 #, c-format msgid "database system was shut down in recovery at %s" msgstr "le système de bases de données a été arrêté pendant la restauration à %s" -#: access/transam/xlog.c:6501 +#: access/transam/xlog.c:6503 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "le système de bases de données a été interrompu ; dernier lancement connu à %s" -#: access/transam/xlog.c:6507 +#: access/transam/xlog.c:6509 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "le système de bases de données a été interrompu lors d'une restauration à %s" -#: access/transam/xlog.c:6509 +#: access/transam/xlog.c:6511 #, c-format msgid "This probably means that some data is corrupted and you will have to use the last backup for recovery." msgstr "" "Ceci signifie probablement que des données ont été corrompues et que vous\n" "devrez utiliser la dernière sauvegarde pour la restauration." -#: access/transam/xlog.c:6515 +#: access/transam/xlog.c:6517 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "" "le système de bases de données a été interrompu lors d'une récupération à %s\n" "(moment de la journalisation)" -#: access/transam/xlog.c:6517 +#: access/transam/xlog.c:6519 #, c-format msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." msgstr "" "Si c'est arrivé plus d'une fois, des données ont pu être corrompues et vous\n" "pourriez avoir besoin de choisir une cible de récupération antérieure." -#: access/transam/xlog.c:6523 +#: access/transam/xlog.c:6525 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "le système de bases de données a été interrompu ; dernier lancement connu à %s" -#: access/transam/xlog.c:6529 +#: access/transam/xlog.c:6531 #, c-format msgid "control file contains invalid database cluster state" msgstr "le fichier de contrôle contient un état invalide de l'instance" -#: access/transam/xlog.c:6586 +#: access/transam/xlog.c:6588 #, c-format msgid "entering standby mode" msgstr "entre en mode standby" -#: access/transam/xlog.c:6589 +#: access/transam/xlog.c:6591 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "début de la restauration de l'archive au XID %u" -#: access/transam/xlog.c:6593 +#: access/transam/xlog.c:6595 #, c-format msgid "starting point-in-time recovery to %s" msgstr "début de la restauration de l'archive à %s" -#: access/transam/xlog.c:6597 +#: access/transam/xlog.c:6599 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "début de la restauration PITR à « %s »" -#: access/transam/xlog.c:6601 +#: access/transam/xlog.c:6603 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "début de la restauration PITR à l'emplacement WAL (LSN) « %X/%X »" -#: access/transam/xlog.c:6605 +#: access/transam/xlog.c:6607 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "début de la restauration de l'archive jusqu'au point de cohérence le plus proche" -#: access/transam/xlog.c:6608 +#: access/transam/xlog.c:6610 #, c-format msgid "starting archive recovery" msgstr "début de la restauration de l'archive" -#: access/transam/xlog.c:6682 +#: access/transam/xlog.c:6684 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "n'a pas pu localiser l'enregistrement redo référencé par le point de vérification" -#: access/transam/xlog.c:6683 access/transam/xlog.c:6693 +#: access/transam/xlog.c:6685 access/transam/xlog.c:6695 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2465,91 +2465,91 @@ msgstr "" "Si vous ne restaurez pas depuis une sauvegarde, essayez de supprimer « %s/backup_label ».\n" "Attention : supprimer « %s/backup_label » lors d'une restauration de sauvegarde entraînera la corruption de l'instance." -#: access/transam/xlog.c:6692 +#: access/transam/xlog.c:6694 #, c-format msgid "could not locate required checkpoint record" msgstr "n'a pas pu localiser l'enregistrement d'un point de vérification requis" -#: access/transam/xlog.c:6721 commands/tablespace.c:666 +#: access/transam/xlog.c:6723 commands/tablespace.c:666 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "n'a pas pu créer le lien symbolique « %s » : %m" -#: access/transam/xlog.c:6753 access/transam/xlog.c:6759 +#: access/transam/xlog.c:6755 access/transam/xlog.c:6761 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ignore le fichier « %s » car le fichier « %s » n'existe pas" -#: access/transam/xlog.c:6755 access/transam/xlog.c:12058 +#: access/transam/xlog.c:6757 access/transam/xlog.c:12058 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Le fichier « %s » a été renommé en « %s »." -#: access/transam/xlog.c:6761 +#: access/transam/xlog.c:6763 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "N'a pas pu renommer le fichier « %s » en « %s » : %m." -#: access/transam/xlog.c:6812 +#: access/transam/xlog.c:6814 #, c-format msgid "could not locate a valid checkpoint record" msgstr "n'a pas pu localiser un enregistrement d'un point de vérification valide" -#: access/transam/xlog.c:6850 +#: access/transam/xlog.c:6852 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "la timeline requise %u n'est pas un fils de l'historique de ce serveur" -#: access/transam/xlog.c:6852 +#: access/transam/xlog.c:6854 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "Le dernier checkpoint est à %X/%X sur la timeline %u, mais dans l'historique de la timeline demandée, le serveur est sorti de cette timeline à %X/%X." -#: access/transam/xlog.c:6866 +#: access/transam/xlog.c:6868 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "la timeline requise, %u, ne contient pas le point de restauration minimum (%X/%X) sur la timeline %u" -#: access/transam/xlog.c:6896 +#: access/transam/xlog.c:6898 #, c-format msgid "invalid next transaction ID" msgstr "prochain ID de transaction invalide" -#: access/transam/xlog.c:6997 +#: access/transam/xlog.c:6998 #, c-format msgid "invalid redo in checkpoint record" msgstr "ré-exécution invalide dans l'enregistrement du point de vérification" -#: access/transam/xlog.c:7008 +#: access/transam/xlog.c:7009 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "enregistrement de ré-exécution invalide dans le point de vérification d'arrêt" -#: access/transam/xlog.c:7042 +#: access/transam/xlog.c:7043 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "" "le système de bases de données n'a pas été arrêté proprement ; restauration\n" "automatique en cours" -#: access/transam/xlog.c:7046 +#: access/transam/xlog.c:7047 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "la restauration après crash commence par la timeline %u et a la timeline %u en cible" -#: access/transam/xlog.c:7093 +#: access/transam/xlog.c:7094 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label contient des données incohérentes avec le fichier de contrôle" -#: access/transam/xlog.c:7094 +#: access/transam/xlog.c:7095 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "" "Ceci signifie que la sauvegarde a été corrompue et que vous devrez utiliser\n" "la dernière sauvegarde pour la restauration." -#: access/transam/xlog.c:7320 +#: access/transam/xlog.c:7321 #, c-format msgid "redo starts at %X/%X" msgstr "la ré-exécution commence à %X/%X" @@ -2802,7 +2802,7 @@ msgstr "Cela signifie que la sauvegarde en cours de réalisation sur le secondai #: access/transam/xlog.c:10974 replication/basebackup.c:1433 utils/adt/misc.c:345 #, c-format msgid "symbolic link \"%s\" target is too long" -msgstr "la cible du lien symbolique « %s » est trop long" +msgstr "la cible du lien symbolique « %s » est trop longue" #: access/transam/xlog.c:11024 commands/tablespace.c:402 commands/tablespace.c:578 replication/basebackup.c:1448 utils/adt/misc.c:353 #, c-format @@ -2924,22 +2924,22 @@ msgstr "n'a pas pu lire le journal de transactions %s, décalage %u : %m" msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "n'a pas pu lire à partir du segment %s du journal de transactions, décalage %u: lu %d sur %zu" -#: access/transam/xlog.c:12755 +#: access/transam/xlog.c:12764 #, c-format msgid "WAL receiver process shutdown requested" msgstr "le processus wal receiver a reçu une demande d'arrêt" -#: access/transam/xlog.c:12842 +#: access/transam/xlog.c:12859 #, c-format msgid "received promote request" msgstr "a reçu une demande de promotion" -#: access/transam/xlog.c:12855 +#: access/transam/xlog.c:12872 #, c-format msgid "promote trigger file found: %s" msgstr "fichier trigger de promotion trouvé : %s" -#: access/transam/xlog.c:12863 +#: access/transam/xlog.c:12880 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "n'a pas pu récupérer les propriétés du fichier trigger pour la promotion « %s » : %m" @@ -2997,16 +2997,16 @@ msgstr "une sauvegarde non exclusive est en cours" msgid "Did you mean to use pg_stop_backup('f')?" msgstr "Souhaitiez-vous utiliser pg_stop_backup('f') ?" -#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 commands/event_trigger.c:1869 commands/extension.c:1944 commands/extension.c:2052 commands/extension.c:2337 commands/prepare.c:712 executor/execExpr.c:2507 executor/execSRF.c:738 executor/functions.c:1058 foreign/foreign.c:520 libpq/hba.c:2712 replication/logical/launcher.c:943 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 replication/slotfuncs.c:255 replication/walsender.c:3291 storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:508 utils/adt/genfile.c:591 utils/adt/jsonfuncs.c:1933 utils/adt/jsonfuncs.c:2045 utils/adt/jsonfuncs.c:2233 utils/adt/jsonfuncs.c:2342 -#: utils/adt/jsonfuncs.c:3803 utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:218 utils/adt/pgstatfuncs.c:477 utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 utils/adt/varlena.c:4832 utils/fmgr/funcapi.c:74 utils/misc/guc.c:9973 utils/mmgr/portalmem.c:1136 +#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 commands/event_trigger.c:1869 commands/extension.c:1945 commands/extension.c:2053 commands/extension.c:2338 commands/prepare.c:713 executor/execExpr.c:2507 executor/execSRF.c:738 executor/functions.c:1058 foreign/foreign.c:520 libpq/hba.c:2718 replication/logical/launcher.c:937 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 replication/slotfuncs.c:255 replication/walsender.c:3291 storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1933 utils/adt/jsonfuncs.c:2045 utils/adt/jsonfuncs.c:2233 utils/adt/jsonfuncs.c:2342 +#: utils/adt/jsonfuncs.c:3803 utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:218 utils/adt/pgstatfuncs.c:477 utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 utils/adt/varlena.c:4832 utils/fmgr/funcapi.c:74 utils/misc/guc.c:9993 utils/mmgr/portalmem.c:1141 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "" -"la fonction avec set-value a été appelé dans un contexte qui n'accepte pas\n" +"la fonction avec set-value a été appelée dans un contexte qui n'accepte pas\n" "un ensemble" -#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 commands/event_trigger.c:1873 commands/extension.c:1948 commands/extension.c:2056 commands/extension.c:2341 commands/prepare.c:716 foreign/foreign.c:525 libpq/hba.c:2716 replication/logical/launcher.c:947 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 replication/slotfuncs.c:259 replication/walsender.c:3295 storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:512 utils/adt/genfile.c:595 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:222 utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4836 utils/misc/guc.c:9977 -#: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1140 +#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 commands/event_trigger.c:1873 commands/extension.c:1949 commands/extension.c:2057 commands/extension.c:2342 commands/prepare.c:717 foreign/foreign.c:525 libpq/hba.c:2722 replication/logical/launcher.c:941 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 replication/slotfuncs.c:259 replication/walsender.c:3295 storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:511 utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:222 utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4836 utils/misc/guc.c:9997 +#: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1145 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "mode matérialisé requis mais interdit dans ce contexte" @@ -3063,7 +3063,7 @@ msgstr "%s ne peut pas être exécuté une fois la promotion en cours d'exécuti msgid "\"wait_seconds\" must not be negative or zero" msgstr "« wait_seconds » ne doit pas être négatif ou nul" -#: access/transam/xlogfuncs.c:789 storage/ipc/signalfuncs.c:280 +#: access/transam/xlogfuncs.c:789 storage/ipc/signalfuncs.c:245 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "n'a pas pu envoyer le signal au postmaster : %m" @@ -3217,17 +3217,17 @@ msgstr "image compressée invalide à %X/%X, bloc %d" msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X nécessite une puissance de deux entre 1 MB et 1 GB" -#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:844 tcop/postgres.c:3848 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3858 #, c-format msgid "--%s requires a value" msgstr "--%s requiert une valeur" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:849 tcop/postgres.c:3853 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3863 #, c-format msgid "-c %s requires a value" msgstr "-c %s requiert une valeur" -#: bootstrap/bootstrap.c:303 postmaster/postmaster.c:861 postmaster/postmaster.c:874 +#: bootstrap/bootstrap.c:303 postmaster/postmaster.c:864 postmaster/postmaster.c:877 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayez « %s --help » pour plus d'informations.\n" @@ -3275,12 +3275,12 @@ msgstr "aucun droit n'a pu être révoqué pour « %s »" #: catalog/aclchk.c:342 #, c-format msgid "not all privileges could be revoked for column \"%s\" of relation \"%s\"" -msgstr "certains droits n'ont pu être révoqué pour la colonne « %s » de la relation « %s »" +msgstr "certains droits n'ont pu être révoqués pour la colonne « %s » de la relation « %s »" #: catalog/aclchk.c:347 #, c-format msgid "not all privileges could be revoked for \"%s\"" -msgstr "certains droits n'ont pu être révoqué pour « %s »" +msgstr "certains droits n'ont pu être révoqués pour « %s »" #: catalog/aclchk.c:379 #, c-format @@ -3362,15 +3362,15 @@ msgstr "type de droit %s invalide pour le serveur distant" msgid "column privileges are only valid for relations" msgstr "les droits sur la colonne sont seulement valides pour les relations" -#: catalog/aclchk.c:697 catalog/aclchk.c:4164 catalog/aclchk.c:4985 catalog/objectaddress.c:1059 catalog/pg_largeobject.c:116 storage/large_object/inv_api.c:285 +#: catalog/aclchk.c:697 catalog/aclchk.c:4164 catalog/aclchk.c:4985 catalog/objectaddress.c:1060 catalog/pg_largeobject.c:116 storage/large_object/inv_api.c:285 #, c-format msgid "large object %u does not exist" msgstr "le « Large Object » %u n'existe pas" #: catalog/aclchk.c:926 catalog/aclchk.c:935 commands/collationcmds.c:119 commands/copy.c:362 commands/copy.c:382 commands/copy.c:392 commands/copy.c:401 commands/copy.c:410 commands/copy.c:420 commands/copy.c:429 commands/copy.c:438 commands/copy.c:456 commands/copy.c:472 commands/copy.c:492 commands/copy.c:509 commands/dbcommands.c:157 commands/dbcommands.c:166 commands/dbcommands.c:175 commands/dbcommands.c:184 commands/dbcommands.c:193 commands/dbcommands.c:202 commands/dbcommands.c:211 commands/dbcommands.c:220 commands/dbcommands.c:229 commands/dbcommands.c:238 commands/dbcommands.c:260 commands/dbcommands.c:1502 commands/dbcommands.c:1511 commands/dbcommands.c:1520 -#: commands/dbcommands.c:1529 commands/extension.c:1735 commands/extension.c:1745 commands/extension.c:1755 commands/extension.c:3055 commands/foreigncmds.c:539 commands/foreigncmds.c:548 commands/functioncmds.c:578 commands/functioncmds.c:744 commands/functioncmds.c:753 commands/functioncmds.c:762 commands/functioncmds.c:771 commands/functioncmds.c:2068 commands/functioncmds.c:2076 commands/publicationcmds.c:90 commands/publicationcmds.c:133 commands/sequence.c:1266 commands/sequence.c:1276 commands/sequence.c:1286 commands/sequence.c:1296 commands/sequence.c:1306 commands/sequence.c:1316 commands/sequence.c:1326 commands/sequence.c:1336 commands/sequence.c:1346 -#: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 commands/subscriptioncmds.c:168 commands/subscriptioncmds.c:179 commands/subscriptioncmds.c:193 commands/subscriptioncmds.c:203 commands/subscriptioncmds.c:213 commands/tablecmds.c:7514 commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 commands/user.c:156 commands/user.c:165 commands/user.c:174 commands/user.c:183 commands/user.c:192 commands/user.c:201 commands/user.c:210 commands/user.c:219 -#: commands/user.c:228 commands/user.c:237 commands/user.c:246 commands/user.c:582 commands/user.c:590 commands/user.c:598 commands/user.c:606 commands/user.c:614 commands/user.c:622 commands/user.c:630 commands/user.c:638 commands/user.c:647 commands/user.c:655 commands/user.c:663 parser/parse_utilcmd.c:407 replication/pgoutput/pgoutput.c:192 replication/pgoutput/pgoutput.c:213 replication/pgoutput/pgoutput.c:227 replication/pgoutput/pgoutput.c:237 replication/pgoutput/pgoutput.c:247 replication/walsender.c:882 replication/walsender.c:893 replication/walsender.c:903 +#: commands/dbcommands.c:1529 commands/extension.c:1736 commands/extension.c:1746 commands/extension.c:1756 commands/extension.c:3056 commands/foreigncmds.c:539 commands/foreigncmds.c:548 commands/functioncmds.c:604 commands/functioncmds.c:770 commands/functioncmds.c:779 commands/functioncmds.c:788 commands/functioncmds.c:797 commands/functioncmds.c:2094 commands/functioncmds.c:2102 commands/publicationcmds.c:90 commands/publicationcmds.c:133 commands/sequence.c:1266 commands/sequence.c:1276 commands/sequence.c:1286 commands/sequence.c:1296 commands/sequence.c:1306 commands/sequence.c:1316 commands/sequence.c:1326 commands/sequence.c:1336 commands/sequence.c:1346 +#: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 commands/subscriptioncmds.c:168 commands/subscriptioncmds.c:179 commands/subscriptioncmds.c:193 commands/subscriptioncmds.c:203 commands/subscriptioncmds.c:213 commands/tablecmds.c:7499 commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 commands/user.c:156 commands/user.c:165 commands/user.c:174 commands/user.c:183 commands/user.c:192 commands/user.c:201 commands/user.c:210 commands/user.c:219 +#: commands/user.c:228 commands/user.c:237 commands/user.c:246 commands/user.c:582 commands/user.c:590 commands/user.c:598 commands/user.c:606 commands/user.c:614 commands/user.c:622 commands/user.c:630 commands/user.c:638 commands/user.c:647 commands/user.c:655 commands/user.c:663 parser/parse_utilcmd.c:397 replication/pgoutput/pgoutput.c:189 replication/pgoutput/pgoutput.c:210 replication/pgoutput/pgoutput.c:224 replication/pgoutput/pgoutput.c:234 replication/pgoutput/pgoutput.c:244 replication/walsender.c:882 replication/walsender.c:893 replication/walsender.c:903 #, c-format msgid "conflicting or redundant options" msgstr "options en conflit ou redondantes" @@ -3385,13 +3385,13 @@ msgstr "les droits par défaut ne peuvent pas être configurés pour les colonne msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "ne peut pas utiliser la clause IN SCHEMA lors de l'utilisation de GRANT/REVOKE ON SCHEMAS" -#: catalog/aclchk.c:1544 catalog/catalog.c:553 catalog/objectaddress.c:1521 commands/analyze.c:390 commands/copy.c:741 commands/sequence.c:1701 commands/tablecmds.c:6990 commands/tablecmds.c:7133 commands/tablecmds.c:7183 commands/tablecmds.c:7257 commands/tablecmds.c:7327 commands/tablecmds.c:7439 commands/tablecmds.c:7533 commands/tablecmds.c:7592 commands/tablecmds.c:7681 commands/tablecmds.c:7710 commands/tablecmds.c:7865 commands/tablecmds.c:7947 commands/tablecmds.c:8102 commands/tablecmds.c:8219 commands/tablecmds.c:11568 commands/tablecmds.c:11750 commands/tablecmds.c:11910 commands/tablecmds.c:13069 commands/tablecmds.c:15631 commands/trigger.c:924 parser/analyze.c:2413 -#: parser/parse_relation.c:714 parser/parse_target.c:1064 parser/parse_type.c:144 parser/parse_utilcmd.c:3453 parser/parse_utilcmd.c:3488 parser/parse_utilcmd.c:3530 utils/adt/acl.c:2845 utils/adt/ruleutils.c:2708 +#: catalog/aclchk.c:1544 catalog/catalog.c:553 catalog/objectaddress.c:1522 commands/analyze.c:390 commands/copy.c:741 commands/sequence.c:1701 commands/tablecmds.c:6975 commands/tablecmds.c:7118 commands/tablecmds.c:7168 commands/tablecmds.c:7242 commands/tablecmds.c:7312 commands/tablecmds.c:7424 commands/tablecmds.c:7518 commands/tablecmds.c:7577 commands/tablecmds.c:7666 commands/tablecmds.c:7695 commands/tablecmds.c:7850 commands/tablecmds.c:7932 commands/tablecmds.c:8088 commands/tablecmds.c:8206 commands/tablecmds.c:11555 commands/tablecmds.c:11737 commands/tablecmds.c:11897 commands/tablecmds.c:13040 commands/tablecmds.c:15601 commands/trigger.c:924 parser/analyze.c:2415 +#: parser/parse_relation.c:714 parser/parse_target.c:1064 parser/parse_type.c:144 parser/parse_utilcmd.c:3421 parser/parse_utilcmd.c:3456 parser/parse_utilcmd.c:3498 utils/adt/acl.c:2845 utils/adt/ruleutils.c:2708 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "la colonne « %s » de la relation « %s » n'existe pas" -#: catalog/aclchk.c:1807 catalog/objectaddress.c:1361 commands/sequence.c:1139 commands/tablecmds.c:249 commands/tablecmds.c:16498 utils/adt/acl.c:2053 utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 utils/adt/acl.c:2175 utils/adt/acl.c:2205 +#: catalog/aclchk.c:1807 catalog/objectaddress.c:1362 commands/sequence.c:1139 commands/tablecmds.c:249 commands/tablecmds.c:16465 utils/adt/acl.c:2053 utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 utils/adt/acl.c:2175 utils/adt/acl.c:2205 #, c-format msgid "\"%s\" is not a sequence" msgstr "« %s » n'est pas une séquence" @@ -3436,7 +3436,7 @@ msgstr "ne peut pas configurer les droits des types tableau" msgid "Set the privileges of the element type instead." msgstr "Configurez les droits du type élément à la place." -#: catalog/aclchk.c:3147 catalog/objectaddress.c:1655 +#: catalog/aclchk.c:3147 catalog/objectaddress.c:1656 #, c-format msgid "\"%s\" is not a domain" msgstr "« %s » n'est pas un domaine" @@ -3806,7 +3806,7 @@ msgstr "le langage d'OID %u n'existe pas" msgid "schema with OID %u does not exist" msgstr "le schéma d'OID %u n'existe pas" -#: catalog/aclchk.c:4313 catalog/aclchk.c:5039 utils/adt/genfile.c:689 +#: catalog/aclchk.c:4313 catalog/aclchk.c:5039 utils/adt/genfile.c:688 #, c-format msgid "tablespace with OID %u does not exist" msgstr "le tablespace d'OID %u n'existe pas" @@ -3876,7 +3876,7 @@ msgstr "l'extension d'OID %u n'existe pas" msgid "publication with OID %u does not exist" msgstr "la publication d'OID %u n'existe pas" -#: catalog/aclchk.c:5400 commands/subscriptioncmds.c:1459 +#: catalog/aclchk.c:5400 commands/subscriptioncmds.c:1462 #, c-format msgid "subscription with OID %u does not exist" msgstr "la souscription d'OID %u n'existe pas" @@ -3911,7 +3911,7 @@ msgstr "doit être un super-utilisateur pour appeller pg_nextoid()" msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() ne peut être utilisé que pour les catalogues système" -#: catalog/catalog.c:545 parser/parse_utilcmd.c:2276 +#: catalog/catalog.c:545 parser/parse_utilcmd.c:2266 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "l'index « %s » n'appartient pas à la table « %s »" @@ -3971,7 +3971,7 @@ msgstr[1] "" msgid "cannot drop %s because other objects depend on it" msgstr "n'a pas pu supprimer %s car d'autres objets en dépendent" -#: catalog/dependency.c:1187 catalog/dependency.c:1188 catalog/dependency.c:1194 catalog/dependency.c:1195 catalog/dependency.c:1206 catalog/dependency.c:1207 commands/tablecmds.c:1306 commands/tablecmds.c:13687 commands/tablespace.c:481 commands/user.c:1095 commands/view.c:495 libpq/auth.c:338 replication/syncrep.c:1044 storage/lmgr/deadlock.c:1152 storage/lmgr/proc.c:1433 utils/adt/acl.c:5250 utils/adt/jsonfuncs.c:618 utils/adt/jsonfuncs.c:624 utils/misc/guc.c:7094 utils/misc/guc.c:7130 utils/misc/guc.c:7200 utils/misc/guc.c:11380 utils/misc/guc.c:11414 utils/misc/guc.c:11448 utils/misc/guc.c:11491 utils/misc/guc.c:11533 +#: catalog/dependency.c:1187 catalog/dependency.c:1188 catalog/dependency.c:1194 catalog/dependency.c:1195 catalog/dependency.c:1206 catalog/dependency.c:1207 commands/tablecmds.c:1298 commands/tablecmds.c:13658 commands/tablespace.c:481 commands/user.c:1095 commands/view.c:492 libpq/auth.c:338 replication/syncrep.c:1043 storage/lmgr/deadlock.c:1152 storage/lmgr/proc.c:1433 utils/adt/acl.c:5250 utils/adt/jsonfuncs.c:618 utils/adt/jsonfuncs.c:624 utils/misc/guc.c:7114 utils/misc/guc.c:7150 utils/misc/guc.c:7220 utils/misc/guc.c:11400 utils/misc/guc.c:11434 utils/misc/guc.c:11468 utils/misc/guc.c:11511 utils/misc/guc.c:11553 #, c-format msgid "%s" msgstr "%s" @@ -3999,171 +3999,181 @@ msgstr[1] "DROP cascade sur %d autres objets" msgid "constant of the type %s cannot be used here" msgstr "la constante de type %s ne peut pas être utilisée ici" -#: catalog/heap.c:331 +#: catalog/heap.c:332 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "droit refusé pour créer « %s.%s »" -#: catalog/heap.c:333 +#: catalog/heap.c:334 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Les modifications du catalogue système sont actuellement interdites." -#: catalog/heap.c:510 commands/tablecmds.c:2343 commands/tablecmds.c:2980 commands/tablecmds.c:6572 +#: catalog/heap.c:511 commands/tablecmds.c:2335 commands/tablecmds.c:2972 commands/tablecmds.c:6566 #, c-format msgid "tables can have at most %d columns" msgstr "les tables peuvent avoir au plus %d colonnes" -#: catalog/heap.c:528 commands/tablecmds.c:6880 +#: catalog/heap.c:529 commands/tablecmds.c:6865 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "le nom de la colonne « %s » entre en conflit avec le nom d'une colonne système" -#: catalog/heap.c:544 +#: catalog/heap.c:545 #, c-format msgid "column name \"%s\" specified more than once" msgstr "colonne « %s » spécifiée plus d'une fois" #. translator: first %s is an integer not a name -#: catalog/heap.c:619 +#: catalog/heap.c:620 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "la colonne de clé de partitionnement %s a le pseudo type %s" -#: catalog/heap.c:624 +#: catalog/heap.c:625 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "la colonne « %s » a le pseudo type %s" -#: catalog/heap.c:655 +#: catalog/heap.c:656 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "le type composite %s ne peut pas être membre de lui-même" #. translator: first %s is an integer not a name -#: catalog/heap.c:710 +#: catalog/heap.c:711 #, c-format msgid "no collation was derived for partition key column %s with collatable type %s" msgstr "aucun collationnement n'a été dérivé pour la colonne « %s » sur la clé de partitionnement et de type collationnable %s" -#: catalog/heap.c:716 commands/createas.c:203 commands/createas.c:506 +#: catalog/heap.c:717 commands/createas.c:203 commands/createas.c:500 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "aucun collationnement n'a été dérivé pour la colonne « %s » de type collationnable %s" -#: catalog/heap.c:1198 catalog/index.c:868 commands/createas.c:411 commands/tablecmds.c:3861 +#: catalog/heap.c:1199 catalog/index.c:870 commands/createas.c:405 commands/tablecmds.c:3853 #, c-format msgid "relation \"%s\" already exists" msgstr "la relation « %s » existe déjà" -#: catalog/heap.c:1214 catalog/pg_type.c:435 catalog/pg_type.c:773 catalog/pg_type.c:920 commands/typecmds.c:249 commands/typecmds.c:261 commands/typecmds.c:757 commands/typecmds.c:1172 commands/typecmds.c:1398 commands/typecmds.c:1590 commands/typecmds.c:2563 +#: catalog/heap.c:1215 catalog/pg_type.c:435 catalog/pg_type.c:773 catalog/pg_type.c:920 commands/typecmds.c:249 commands/typecmds.c:261 commands/typecmds.c:757 commands/typecmds.c:1172 commands/typecmds.c:1398 commands/typecmds.c:1590 commands/typecmds.c:2563 #, c-format msgid "type \"%s\" already exists" msgstr "le type « %s » existe déjà" -#: catalog/heap.c:1215 +#: catalog/heap.c:1216 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "Une relation a un type associé du même nom, donc vous devez utiliser un nom qui n'entre pas en conflit avec un type existant." -#: catalog/heap.c:1244 +#: catalog/heap.c:1245 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "OID du heap de pg_class non configuré en mode de mise à jour binaire" -#: catalog/heap.c:2451 +#: catalog/heap.c:2458 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "ne peut pas ajouter une contrainte NO INHERIT pour la table partitionnée « %s »" -#: catalog/heap.c:2723 +#: catalog/heap.c:2730 #, c-format msgid "check constraint \"%s\" already exists" msgstr "la contrainte de vérification « %s » existe déjà" -#: catalog/heap.c:2893 catalog/index.c:882 catalog/pg_constraint.c:670 commands/tablecmds.c:8593 +#: catalog/heap.c:2900 catalog/index.c:884 catalog/pg_constraint.c:670 commands/tablecmds.c:8580 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "la contrainte « %s » de la relation « %s » existe déjà" -#: catalog/heap.c:2900 +#: catalog/heap.c:2907 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "la contrainte « %s » entre en conflit avec la constrainte non héritée sur la relation « %s »" -#: catalog/heap.c:2911 +#: catalog/heap.c:2918 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte héritée sur la relation « %s »" -#: catalog/heap.c:2921 +#: catalog/heap.c:2928 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte NOT VALID sur la relation « %s »" -#: catalog/heap.c:2926 +#: catalog/heap.c:2933 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "assemblage de la contrainte « %s » avec une définition héritée" -#: catalog/heap.c:3028 +#: catalog/heap.c:3038 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "ne peut pas utiliser la colonne générée « %s » dans une expression de génération de colonne" -#: catalog/heap.c:3030 +#: catalog/heap.c:3040 #, c-format msgid "A generated column cannot reference another generated column." msgstr "Une colonne générée ne peut référencer une autre colonne générée." -#: catalog/heap.c:3082 +#: catalog/heap.c:3046 +#, c-format +msgid "cannot use whole-row variable in column generation expression" +msgstr "ne peut pas utiliser une variable de ligne dans l'expression de génération d'une colonne" + +#: catalog/heap.c:3047 +#, c-format +msgid "This would cause the generated column to depend on its own value." +msgstr "" + +#: catalog/heap.c:3100 #, c-format msgid "generation expression is not immutable" msgstr "l'expression de génération n'est pas immuable" -#: catalog/heap.c:3110 rewrite/rewriteHandler.c:1245 +#: catalog/heap.c:3128 rewrite/rewriteHandler.c:1245 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "la colonne « %s » est de type %s alors que l'expression par défaut est de type %s" -#: catalog/heap.c:3115 commands/prepare.c:367 parser/analyze.c:2637 parser/parse_target.c:595 parser/parse_target.c:883 parser/parse_target.c:893 rewrite/rewriteHandler.c:1250 +#: catalog/heap.c:3133 commands/prepare.c:368 parser/analyze.c:2639 parser/parse_target.c:595 parser/parse_target.c:883 parser/parse_target.c:893 rewrite/rewriteHandler.c:1250 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Vous devez réécrire l'expression ou lui appliquer une transformation de type." -#: catalog/heap.c:3162 +#: catalog/heap.c:3180 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "seule la table « %s » peut être référencée dans la contrainte de vérification" -#: catalog/heap.c:3460 +#: catalog/heap.c:3478 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "combinaison ON COMMIT et clé étrangère non supportée" -#: catalog/heap.c:3461 +#: catalog/heap.c:3479 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "" "La table « %s » référence « %s » mais elles n'ont pas la même valeur pour le\n" "paramètre ON COMMIT." -#: catalog/heap.c:3466 +#: catalog/heap.c:3484 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "ne peut pas tronquer une table référencée dans une contrainte de clé étrangère" -#: catalog/heap.c:3467 +#: catalog/heap.c:3485 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "La table « %s » référence « %s »." -#: catalog/heap.c:3469 +#: catalog/heap.c:3487 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Tronquez la table « %s » en même temps, ou utilisez TRUNCATE ... CASCADE." -#: catalog/index.c:221 parser/parse_utilcmd.c:2182 +#: catalog/index.c:221 parser/parse_utilcmd.c:2172 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "les clés primaires multiples ne sont pas autorisées pour la table « %s »" @@ -4178,417 +4188,417 @@ msgstr "les clés primaires ne peuvent pas être des expressions" msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "la colonne de clé primaire « %s » n'est pas marquée NOT NULL" -#: catalog/index.c:767 catalog/index.c:1903 +#: catalog/index.c:769 catalog/index.c:1905 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "les index définis par l'utilisateur sur les tables du catalogue système ne sont pas supportés" -#: catalog/index.c:807 +#: catalog/index.c:809 #, c-format msgid "nondeterministic collations are not supported for operator class \"%s\"" msgstr "les collationnements non-déterministes ne sont pas supportés pour la classe d'opérateurs « %s »" -#: catalog/index.c:822 +#: catalog/index.c:824 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "" "la création en parallèle d'un index sur les tables du catalogue système\n" "n'est pas supportée" -#: catalog/index.c:831 catalog/index.c:1282 +#: catalog/index.c:833 catalog/index.c:1284 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "la création de manière concurrente d'un index pour les contraintes d'exclusion n'est pas supportée" -#: catalog/index.c:840 +#: catalog/index.c:842 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "les index partagés ne peuvent pas être créés après initdb" -#: catalog/index.c:860 commands/createas.c:417 commands/sequence.c:154 parser/parse_utilcmd.c:211 +#: catalog/index.c:862 commands/createas.c:411 commands/sequence.c:154 parser/parse_utilcmd.c:201 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "la relation « %s » existe déjà, poursuite du traitement" -#: catalog/index.c:910 +#: catalog/index.c:912 #, c-format msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "OID de l'index de pg_class non configuré en mode de mise à jour binaire" -#: catalog/index.c:2189 +#: catalog/index.c:2191 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY doit être la première action dans une transaction" -#: catalog/index.c:3574 +#: catalog/index.c:3576 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "ne peut pas ré-indexer les tables temporaires des autres sessions" -#: catalog/index.c:3585 commands/indexcmds.c:3426 +#: catalog/index.c:3587 commands/indexcmds.c:3426 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "ne peut pas réindexer un index invalide sur une table TOAST" -#: catalog/index.c:3601 commands/indexcmds.c:3306 commands/indexcmds.c:3450 commands/tablecmds.c:3300 +#: catalog/index.c:3603 commands/indexcmds.c:3306 commands/indexcmds.c:3450 commands/tablecmds.c:3292 #, c-format msgid "cannot move system relation \"%s\"" msgstr "ne peut pas déplacer la colonne système « %s »" -#: catalog/index.c:3746 +#: catalog/index.c:3747 #, c-format msgid "index \"%s\" was reindexed" msgstr "l'index « %s » a été réindexée" -#: catalog/index.c:3877 +#: catalog/index.c:3878 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "ne peut pas réindexer l'index invalide « %s.%s » sur une table TOAST, ignoré" -#: catalog/namespace.c:257 catalog/namespace.c:461 catalog/namespace.c:553 commands/trigger.c:5132 +#: catalog/namespace.c:258 catalog/namespace.c:462 catalog/namespace.c:554 commands/trigger.c:5134 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "les références entre bases de données ne sont pas implémentées : « %s.%s.%s »" -#: catalog/namespace.c:314 +#: catalog/namespace.c:315 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "les tables temporaires ne peuvent pas spécifier un nom de schéma" -#: catalog/namespace.c:395 +#: catalog/namespace.c:396 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "n'a pas pu obtenir un verrou sur la relation « %s.%s »" -#: catalog/namespace.c:400 commands/lockcmds.c:143 commands/lockcmds.c:228 +#: catalog/namespace.c:401 commands/lockcmds.c:143 commands/lockcmds.c:228 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "n'a pas pu obtenir un verrou sur la relation « %s »" -#: catalog/namespace.c:428 parser/parse_relation.c:1362 +#: catalog/namespace.c:429 parser/parse_relation.c:1362 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "la relation « %s.%s » n'existe pas" -#: catalog/namespace.c:433 parser/parse_relation.c:1375 parser/parse_relation.c:1383 +#: catalog/namespace.c:434 parser/parse_relation.c:1375 parser/parse_relation.c:1383 #, c-format msgid "relation \"%s\" does not exist" msgstr "la relation « %s » n'existe pas" -#: catalog/namespace.c:499 catalog/namespace.c:3029 commands/extension.c:1519 commands/extension.c:1525 +#: catalog/namespace.c:500 catalog/namespace.c:3075 commands/extension.c:1520 commands/extension.c:1526 #, c-format msgid "no schema has been selected to create in" msgstr "aucun schéma n'a été sélectionné pour cette création" -#: catalog/namespace.c:651 catalog/namespace.c:664 +#: catalog/namespace.c:652 catalog/namespace.c:665 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "ne peut pas créer les relations dans les schémas temporaires d'autres sessions" -#: catalog/namespace.c:655 +#: catalog/namespace.c:656 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "ne peut pas créer une relation temporaire dans un schéma non temporaire" -#: catalog/namespace.c:670 +#: catalog/namespace.c:671 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "seules les relations temporaires peuvent être créées dans des schémas temporaires" -#: catalog/namespace.c:2221 +#: catalog/namespace.c:2267 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "l'objet statistique « %s » n'existe pas" -#: catalog/namespace.c:2344 +#: catalog/namespace.c:2390 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "l'analyseur de recherche plein texte « %s » n'existe pas" -#: catalog/namespace.c:2470 +#: catalog/namespace.c:2516 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "le dictionnaire de recherche plein texte « %s » n'existe pas" -#: catalog/namespace.c:2597 +#: catalog/namespace.c:2643 #, c-format msgid "text search template \"%s\" does not exist" msgstr "le modèle de recherche plein texte « %s » n'existe pas" -#: catalog/namespace.c:2723 commands/tsearchcmds.c:1121 utils/cache/ts_cache.c:613 +#: catalog/namespace.c:2769 commands/tsearchcmds.c:1121 utils/cache/ts_cache.c:613 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "la configuration de recherche plein texte « %s » n'existe pas" -#: catalog/namespace.c:2836 parser/parse_expr.c:810 parser/parse_target.c:1256 +#: catalog/namespace.c:2882 parser/parse_expr.c:810 parser/parse_target.c:1256 #, c-format msgid "cross-database references are not implemented: %s" msgstr "les références entre bases de données ne sont pas implémentées : %s" -#: catalog/namespace.c:2842 gram.y:15124 gram.y:17082 parser/parse_expr.c:817 parser/parse_target.c:1263 +#: catalog/namespace.c:2888 gram.y:15102 gram.y:17061 parser/parse_expr.c:817 parser/parse_target.c:1263 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "mauvaise qualification du nom (trop de points entre les noms) : %s" -#: catalog/namespace.c:2972 +#: catalog/namespace.c:3018 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "ne peut pas déplacer les objets dans ou à partir des schémas temporaires" -#: catalog/namespace.c:2978 +#: catalog/namespace.c:3024 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "ne peut pas déplacer les objets dans ou à partir des schémas TOAST" -#: catalog/namespace.c:3051 commands/schemacmds.c:233 commands/schemacmds.c:313 commands/tablecmds.c:1251 +#: catalog/namespace.c:3097 commands/schemacmds.c:234 commands/schemacmds.c:314 commands/tablecmds.c:1243 #, c-format msgid "schema \"%s\" does not exist" msgstr "le schéma « %s » n'existe pas" -#: catalog/namespace.c:3082 +#: catalog/namespace.c:3128 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "nom de relation incorrecte (trop de points entre les noms) : %s" -#: catalog/namespace.c:3645 +#: catalog/namespace.c:3691 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "le collationnement « %s » pour l'encodage « %s » n'existe pas" -#: catalog/namespace.c:3700 +#: catalog/namespace.c:3746 #, c-format msgid "conversion \"%s\" does not exist" msgstr "la conversion « %s » n'existe pas" -#: catalog/namespace.c:3964 +#: catalog/namespace.c:4010 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "droit refusé pour la création de tables temporaires dans la base de données « %s »" -#: catalog/namespace.c:3980 +#: catalog/namespace.c:4026 #, c-format msgid "cannot create temporary tables during recovery" msgstr "ne peut pas créer des tables temporaires lors de la restauration" -#: catalog/namespace.c:3986 +#: catalog/namespace.c:4032 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "ne peut pas créer de tables temporaires pendant une opération parallèle" -#: catalog/namespace.c:4285 commands/tablespace.c:1217 commands/variable.c:64 utils/misc/guc.c:11565 utils/misc/guc.c:11643 +#: catalog/namespace.c:4331 commands/tablespace.c:1217 commands/variable.c:64 utils/misc/guc.c:11585 utils/misc/guc.c:11663 #, c-format msgid "List syntax is invalid." msgstr "La syntaxe de la liste est invalide." -#: catalog/objectaddress.c:1369 catalog/pg_publication.c:57 commands/policy.c:95 commands/policy.c:375 commands/policy.c:465 commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2153 commands/tablecmds.c:6021 commands/tablecmds.c:11685 +#: catalog/objectaddress.c:1370 catalog/pg_publication.c:57 commands/policy.c:96 commands/policy.c:376 commands/policy.c:465 commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2145 commands/tablecmds.c:6015 commands/tablecmds.c:11672 #, c-format msgid "\"%s\" is not a table" msgstr "« %s » n'est pas une table" -#: catalog/objectaddress.c:1376 commands/tablecmds.c:255 commands/tablecmds.c:6051 commands/tablecmds.c:16503 commands/view.c:119 +#: catalog/objectaddress.c:1377 commands/tablecmds.c:255 commands/tablecmds.c:6045 commands/tablecmds.c:16470 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "« %s » n'est pas une vue" -#: catalog/objectaddress.c:1383 commands/matview.c:175 commands/tablecmds.c:261 commands/tablecmds.c:16508 +#: catalog/objectaddress.c:1384 commands/matview.c:175 commands/tablecmds.c:261 commands/tablecmds.c:16475 #, c-format msgid "\"%s\" is not a materialized view" msgstr "« %s » n'est pas une vue matérialisée" -#: catalog/objectaddress.c:1390 commands/tablecmds.c:279 commands/tablecmds.c:6054 commands/tablecmds.c:16513 +#: catalog/objectaddress.c:1391 commands/tablecmds.c:279 commands/tablecmds.c:6048 commands/tablecmds.c:16480 #, c-format msgid "\"%s\" is not a foreign table" msgstr "« %s » n'est pas une table distante" -#: catalog/objectaddress.c:1431 +#: catalog/objectaddress.c:1432 #, c-format msgid "must specify relation and object name" msgstr "doit indiquer les noms de relation et d'objet" -#: catalog/objectaddress.c:1507 catalog/objectaddress.c:1560 +#: catalog/objectaddress.c:1508 catalog/objectaddress.c:1561 #, c-format msgid "column name must be qualified" msgstr "le nom de la colonne doit être qualifié" -#: catalog/objectaddress.c:1607 +#: catalog/objectaddress.c:1608 #, c-format msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "la valeur par défaut de la colonne « %s » de la relation « %s » n'existe pas" -#: catalog/objectaddress.c:1644 commands/functioncmds.c:136 commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 utils/adt/acl.c:4411 +#: catalog/objectaddress.c:1645 commands/functioncmds.c:137 commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 utils/adt/acl.c:4411 #, c-format msgid "type \"%s\" does not exist" msgstr "le type « %s » n'existe pas" -#: catalog/objectaddress.c:1763 +#: catalog/objectaddress.c:1764 #, c-format msgid "operator %d (%s, %s) of %s does not exist" msgstr "l'opérateur %d (%s, %s) de %s n'existe pas" -#: catalog/objectaddress.c:1794 +#: catalog/objectaddress.c:1795 #, c-format msgid "function %d (%s, %s) of %s does not exist" msgstr "la fonction %d (%s, %s) de %s n'existe pas" -#: catalog/objectaddress.c:1845 catalog/objectaddress.c:1871 +#: catalog/objectaddress.c:1846 catalog/objectaddress.c:1872 #, c-format msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "la correspondance pour l'utilisateur « %s » sur le serveur « %s » n'existe pas" -#: catalog/objectaddress.c:1860 commands/foreigncmds.c:430 commands/foreigncmds.c:988 commands/foreigncmds.c:1347 foreign/foreign.c:723 +#: catalog/objectaddress.c:1861 commands/foreigncmds.c:430 commands/foreigncmds.c:988 commands/foreigncmds.c:1347 foreign/foreign.c:723 #, c-format msgid "server \"%s\" does not exist" msgstr "le serveur « %s » n'existe pas" -#: catalog/objectaddress.c:1927 +#: catalog/objectaddress.c:1928 #, c-format msgid "publication relation \"%s\" in publication \"%s\" does not exist" msgstr "la relation de publication « %s » dans la publication « %s » n'existe pas" -#: catalog/objectaddress.c:1989 +#: catalog/objectaddress.c:1990 #, c-format msgid "unrecognized default ACL object type \"%c\"" msgstr "type d'objet de droits par défaut non reconnu « %c »" -#: catalog/objectaddress.c:1990 +#: catalog/objectaddress.c:1991 #, c-format msgid "Valid object types are \"%c\", \"%c\", \"%c\", \"%c\", \"%c\"." msgstr "Les types d'objet valides sont « %c », « %c », « %c », « %c », « %c »." -#: catalog/objectaddress.c:2041 +#: catalog/objectaddress.c:2042 #, c-format msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "le droit par défaut pour l'utilisateur « %s » dans le schéma « %s » de %s n'existe pas" -#: catalog/objectaddress.c:2046 +#: catalog/objectaddress.c:2047 #, c-format msgid "default ACL for user \"%s\" on %s does not exist" msgstr "le droit par défaut pour l'utilisateur « %s » sur %s n'existe pas" -#: catalog/objectaddress.c:2073 catalog/objectaddress.c:2131 catalog/objectaddress.c:2188 +#: catalog/objectaddress.c:2074 catalog/objectaddress.c:2132 catalog/objectaddress.c:2189 #, c-format msgid "name or argument lists may not contain nulls" msgstr "le nom ou les listes d'arguments ne peuvent pas contenir de valeurs NULL" -#: catalog/objectaddress.c:2107 +#: catalog/objectaddress.c:2108 #, c-format msgid "unsupported object type \"%s\"" msgstr "type d'objet « %s » non supporté" -#: catalog/objectaddress.c:2127 catalog/objectaddress.c:2145 catalog/objectaddress.c:2286 +#: catalog/objectaddress.c:2128 catalog/objectaddress.c:2146 catalog/objectaddress.c:2287 #, c-format msgid "name list length must be exactly %d" msgstr "la liste de nom doit être exactement de longueur %d" -#: catalog/objectaddress.c:2149 +#: catalog/objectaddress.c:2150 #, c-format msgid "large object OID may not be null" msgstr "l'OID du Large Object peut ne pas être NULL" -#: catalog/objectaddress.c:2158 catalog/objectaddress.c:2221 catalog/objectaddress.c:2228 +#: catalog/objectaddress.c:2159 catalog/objectaddress.c:2222 catalog/objectaddress.c:2229 #, c-format msgid "name list length must be at least %d" msgstr "la longueur de la liste de nom doit au moins être %d" -#: catalog/objectaddress.c:2214 catalog/objectaddress.c:2235 +#: catalog/objectaddress.c:2215 catalog/objectaddress.c:2236 #, c-format msgid "argument list length must be exactly %d" msgstr "la longueur de la liste d'arguments doit être %d exactement" -#: catalog/objectaddress.c:2487 libpq/be-fsstubs.c:321 +#: catalog/objectaddress.c:2488 libpq/be-fsstubs.c:321 #, c-format msgid "must be owner of large object %u" msgstr "doit être le propriétaire du Large Object %u" -#: catalog/objectaddress.c:2502 commands/functioncmds.c:1555 +#: catalog/objectaddress.c:2503 commands/functioncmds.c:1581 #, c-format msgid "must be owner of type %s or type %s" msgstr "doit être le propriétaire du type %s ou du type %s" -#: catalog/objectaddress.c:2552 catalog/objectaddress.c:2569 +#: catalog/objectaddress.c:2553 catalog/objectaddress.c:2570 #, c-format msgid "must be superuser" msgstr "doit être super-utilisateur" -#: catalog/objectaddress.c:2559 +#: catalog/objectaddress.c:2560 #, c-format msgid "must have CREATEROLE privilege" msgstr "doit avoir l'attribut CREATEROLE" -#: catalog/objectaddress.c:2638 +#: catalog/objectaddress.c:2639 #, c-format msgid "unrecognized object type \"%s\"" msgstr "type d'objet non reconnu « %s »" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2880 +#: catalog/objectaddress.c:2882 #, c-format msgid "column %s of %s" msgstr "colonne %s de %s" -#: catalog/objectaddress.c:2894 +#: catalog/objectaddress.c:2897 #, c-format msgid "function %s" msgstr "fonction %s" -#: catalog/objectaddress.c:2906 +#: catalog/objectaddress.c:2910 #, c-format msgid "type %s" msgstr "type %s" -#: catalog/objectaddress.c:2943 +#: catalog/objectaddress.c:2947 #, c-format msgid "cast from %s to %s" msgstr "conversion de %s en %s" -#: catalog/objectaddress.c:2976 +#: catalog/objectaddress.c:2980 #, c-format msgid "collation %s" msgstr "collationnement %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3007 +#: catalog/objectaddress.c:3011 #, c-format msgid "constraint %s on %s" msgstr "contrainte %s sur %s" -#: catalog/objectaddress.c:3013 +#: catalog/objectaddress.c:3017 #, c-format msgid "constraint %s" msgstr "contrainte %s" -#: catalog/objectaddress.c:3045 +#: catalog/objectaddress.c:3049 #, c-format msgid "conversion %s" msgstr "conversion %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3091 +#: catalog/objectaddress.c:3095 #, c-format msgid "default value for %s" msgstr "valeur par défaut pour %s" -#: catalog/objectaddress.c:3105 +#: catalog/objectaddress.c:3109 #, c-format msgid "language %s" msgstr "langage %s" -#: catalog/objectaddress.c:3113 +#: catalog/objectaddress.c:3117 #, c-format msgid "large object %u" msgstr "« Large Object » %u" -#: catalog/objectaddress.c:3126 +#: catalog/objectaddress.c:3130 #, c-format msgid "operator %s" msgstr "opérateur %s" -#: catalog/objectaddress.c:3163 +#: catalog/objectaddress.c:3167 #, c-format msgid "operator class %s for access method %s" msgstr "classe d'opérateur %s pour la méthode d'accès %s" -#: catalog/objectaddress.c:3191 +#: catalog/objectaddress.c:3195 #, c-format msgid "access method %s" msgstr "méthode d'accès %s" @@ -4597,7 +4607,7 @@ msgstr "méthode d'accès %s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3240 +#: catalog/objectaddress.c:3244 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "opérateur %d (%s, %s) de %s : %s" @@ -4606,221 +4616,221 @@ msgstr "opérateur %d (%s, %s) de %s : %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3297 +#: catalog/objectaddress.c:3301 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "fonction %d (%s, %s) de %s : %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3349 +#: catalog/objectaddress.c:3353 #, c-format msgid "rule %s on %s" msgstr "règle %s sur %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3395 +#: catalog/objectaddress.c:3399 #, c-format msgid "trigger %s on %s" msgstr "trigger %s sur %s" -#: catalog/objectaddress.c:3415 +#: catalog/objectaddress.c:3419 #, c-format msgid "schema %s" msgstr "schéma %s" -#: catalog/objectaddress.c:3443 +#: catalog/objectaddress.c:3447 #, c-format msgid "statistics object %s" msgstr "objet statistique %s" -#: catalog/objectaddress.c:3474 +#: catalog/objectaddress.c:3478 #, c-format msgid "text search parser %s" msgstr "analyseur %s de la recherche plein texte" -#: catalog/objectaddress.c:3505 +#: catalog/objectaddress.c:3509 #, c-format msgid "text search dictionary %s" msgstr "dictionnaire %s de la recherche plein texte" -#: catalog/objectaddress.c:3536 +#: catalog/objectaddress.c:3540 #, c-format msgid "text search template %s" msgstr "modèle %s de la recherche plein texte" -#: catalog/objectaddress.c:3567 +#: catalog/objectaddress.c:3571 #, c-format msgid "text search configuration %s" msgstr "configuration %s de recherche plein texte" -#: catalog/objectaddress.c:3580 +#: catalog/objectaddress.c:3584 #, c-format msgid "role %s" msgstr "rôle %s" -#: catalog/objectaddress.c:3596 +#: catalog/objectaddress.c:3600 #, c-format msgid "database %s" msgstr "base de données %s" -#: catalog/objectaddress.c:3612 +#: catalog/objectaddress.c:3616 #, c-format msgid "tablespace %s" msgstr "tablespace %s" -#: catalog/objectaddress.c:3623 +#: catalog/objectaddress.c:3627 #, c-format msgid "foreign-data wrapper %s" msgstr "wrapper de données distantes %s" -#: catalog/objectaddress.c:3633 +#: catalog/objectaddress.c:3637 #, c-format msgid "server %s" msgstr "serveur %s" -#: catalog/objectaddress.c:3666 +#: catalog/objectaddress.c:3670 #, c-format msgid "user mapping for %s on server %s" msgstr "correspondance utilisateur pour %s sur le serveur %s" -#: catalog/objectaddress.c:3718 +#: catalog/objectaddress.c:3722 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "droits par défaut pour les nouvelles relations appartenant au rôle %s dans le schéma %s" -#: catalog/objectaddress.c:3722 +#: catalog/objectaddress.c:3726 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "droits par défaut pour les nouvelles relations appartenant au rôle %s" -#: catalog/objectaddress.c:3728 +#: catalog/objectaddress.c:3732 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "droits par défaut pour les nouvelles séquences appartenant au rôle %s dans le schéma %s" -#: catalog/objectaddress.c:3732 +#: catalog/objectaddress.c:3736 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "droits par défaut pour les nouvelles séquences appartenant au rôle %s" -#: catalog/objectaddress.c:3738 +#: catalog/objectaddress.c:3742 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "droits par défaut pour les nouvelles fonctions appartenant au rôle %s dans le schéma %s" -#: catalog/objectaddress.c:3742 +#: catalog/objectaddress.c:3746 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "droits par défaut pour les nouvelles fonctions appartenant au rôle %s" -#: catalog/objectaddress.c:3748 +#: catalog/objectaddress.c:3752 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "droits par défaut pour les nouveaux types appartenant au rôle %s dans le schéma %s" -#: catalog/objectaddress.c:3752 +#: catalog/objectaddress.c:3756 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "droits par défaut pour les nouveaux types appartenant au rôle %s" -#: catalog/objectaddress.c:3758 +#: catalog/objectaddress.c:3762 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "droits par défaut pour les nouveaux schémas appartenant au rôle %s" -#: catalog/objectaddress.c:3765 +#: catalog/objectaddress.c:3769 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "droits par défaut appartenant au rôle %s dans le schéma %s" -#: catalog/objectaddress.c:3769 +#: catalog/objectaddress.c:3773 #, c-format msgid "default privileges belonging to role %s" msgstr "droits par défaut appartenant au rôle %s" -#: catalog/objectaddress.c:3791 +#: catalog/objectaddress.c:3795 #, c-format msgid "extension %s" msgstr "extension %s" -#: catalog/objectaddress.c:3808 +#: catalog/objectaddress.c:3812 #, c-format msgid "event trigger %s" msgstr "trigger sur événement %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3852 +#: catalog/objectaddress.c:3856 #, c-format msgid "policy %s on %s" msgstr "politique %s sur %s" -#: catalog/objectaddress.c:3865 +#: catalog/objectaddress.c:3870 #, c-format msgid "publication %s" msgstr "publication %s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3893 +#: catalog/objectaddress.c:3898 #, c-format msgid "publication of %s in publication %s" msgstr "publication de %s dans la publication %s" -#: catalog/objectaddress.c:3905 +#: catalog/objectaddress.c:3911 #, c-format msgid "subscription %s" msgstr "souscription %s" -#: catalog/objectaddress.c:3926 +#: catalog/objectaddress.c:3932 #, c-format msgid "transform for %s language %s" msgstr "transformation pour %s langage %s" -#: catalog/objectaddress.c:3997 +#: catalog/objectaddress.c:4003 #, c-format msgid "table %s" msgstr "table %s" -#: catalog/objectaddress.c:4002 +#: catalog/objectaddress.c:4008 #, c-format msgid "index %s" msgstr "index %s" -#: catalog/objectaddress.c:4006 +#: catalog/objectaddress.c:4012 #, c-format msgid "sequence %s" msgstr "séquence %s" -#: catalog/objectaddress.c:4010 +#: catalog/objectaddress.c:4016 #, c-format msgid "toast table %s" msgstr "table TOAST %s" -#: catalog/objectaddress.c:4014 +#: catalog/objectaddress.c:4020 #, c-format msgid "view %s" msgstr "vue %s" -#: catalog/objectaddress.c:4018 +#: catalog/objectaddress.c:4024 #, c-format msgid "materialized view %s" msgstr "vue matérialisée %s" -#: catalog/objectaddress.c:4022 +#: catalog/objectaddress.c:4028 #, c-format msgid "composite type %s" msgstr "type composite %s" -#: catalog/objectaddress.c:4026 +#: catalog/objectaddress.c:4032 #, c-format msgid "foreign table %s" msgstr "table distante %s" -#: catalog/objectaddress.c:4031 +#: catalog/objectaddress.c:4037 #, c-format msgid "relation %s" msgstr "relation %s" -#: catalog/objectaddress.c:4072 +#: catalog/objectaddress.c:4078 #, c-format msgid "operator family %s for access method %s" msgstr "famille d'opérateur %s pour la méthode d'accès %s" @@ -4880,7 +4890,7 @@ msgstr "la fonction finale avec des arguments supplémentaires ne doit pas être msgid "return type of combine function %s is not %s" msgstr "le type de retour de la fonction de d'unification %s n'est pas %s" -#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:4127 +#: catalog/pg_aggregate.c:439 executor/nodeAgg.c:4128 #, c-format msgid "combine function with transition type %s must not be declared STRICT" msgstr "la fonction d'unification avec le type de transaction %s ne doit pas être déclaré STRICT" @@ -4940,7 +4950,7 @@ msgstr "« %s » est un agrégat d'ensemble hypothétique." msgid "cannot change number of direct arguments of an aggregate function" msgstr "ne peut pas changer le nombre d'arguments directs d'une fonction d'agrégation" -#: catalog/pg_aggregate.c:858 commands/functioncmds.c:675 commands/typecmds.c:1992 commands/typecmds.c:2038 commands/typecmds.c:2090 commands/typecmds.c:2127 commands/typecmds.c:2161 commands/typecmds.c:2195 commands/typecmds.c:2229 commands/typecmds.c:2258 commands/typecmds.c:2345 commands/typecmds.c:2387 parser/parse_func.c:416 parser/parse_func.c:447 parser/parse_func.c:474 parser/parse_func.c:488 parser/parse_func.c:610 parser/parse_func.c:630 parser/parse_func.c:2143 parser/parse_func.c:2334 +#: catalog/pg_aggregate.c:858 commands/functioncmds.c:701 commands/typecmds.c:1992 commands/typecmds.c:2038 commands/typecmds.c:2090 commands/typecmds.c:2127 commands/typecmds.c:2161 commands/typecmds.c:2195 commands/typecmds.c:2229 commands/typecmds.c:2258 commands/typecmds.c:2345 commands/typecmds.c:2387 parser/parse_func.c:417 parser/parse_func.c:448 parser/parse_func.c:475 parser/parse_func.c:489 parser/parse_func.c:611 parser/parse_func.c:631 parser/parse_func.c:2173 parser/parse_func.c:2446 #, c-format msgid "function %s does not exist" msgstr "la fonction %s n'existe pas" @@ -5010,7 +5020,7 @@ msgstr "la conversion « %s » existe déjà" msgid "default conversion for %s to %s already exists" msgstr "la conversion par défaut de %s vers %s existe déjà" -#: catalog/pg_depend.c:204 commands/extension.c:3343 +#: catalog/pg_depend.c:204 commands/extension.c:3344 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s est déjà un membre de l'extension « %s »" @@ -5080,7 +5090,7 @@ msgstr "ne peut pas terminer le détachement de la partition « %s »" msgid "There's no pending concurrent detach." msgstr "Il n'y a pas de détachement en attente." -#: catalog/pg_namespace.c:64 commands/schemacmds.c:242 +#: catalog/pg_namespace.c:64 commands/schemacmds.c:243 #, c-format msgid "schema \"%s\" already exists" msgstr "le schéma « %s » existe déjà" @@ -5145,7 +5155,7 @@ msgstr "l'opérateur %s existe déjà" msgid "operator cannot be its own negator or sort operator" msgstr "l'opérateur ne peut pas être son propre opérateur de négation ou de tri" -#: catalog/pg_proc.c:130 parser/parse_func.c:2205 +#: catalog/pg_proc.c:130 parser/parse_func.c:2235 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" @@ -5191,7 +5201,7 @@ msgstr "ne peut pas modifier le type de retour d'une fonction existante" #. AGGREGATE #. #. translator: first %s is DROP FUNCTION or DROP PROCEDURE -#: catalog/pg_proc.c:419 catalog/pg_proc.c:446 catalog/pg_proc.c:493 catalog/pg_proc.c:519 catalog/pg_proc.c:545 +#: catalog/pg_proc.c:419 catalog/pg_proc.c:446 catalog/pg_proc.c:491 catalog/pg_proc.c:517 catalog/pg_proc.c:543 #, c-format msgid "Use %s %s first." msgstr "Utilisez tout d'abord %s %s." @@ -5201,41 +5211,41 @@ msgstr "Utilisez tout d'abord %s %s." msgid "Row type defined by OUT parameters is different." msgstr "Le type de ligne défini par les paramètres OUT est différent." -#: catalog/pg_proc.c:490 +#: catalog/pg_proc.c:488 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "ne peut pas modifier le nom du paramètre en entrée « %s »" -#: catalog/pg_proc.c:517 +#: catalog/pg_proc.c:515 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "" "ne peut pas supprimer les valeurs par défaut des paramètres de la\n" "fonction existante" -#: catalog/pg_proc.c:543 +#: catalog/pg_proc.c:541 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "" "ne peut pas modifier le type de données d'un paramètre avec une valeur\n" "par défaut" -#: catalog/pg_proc.c:753 +#: catalog/pg_proc.c:751 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "il n'existe pas de fonction intégrée nommée « %s »" -#: catalog/pg_proc.c:851 +#: catalog/pg_proc.c:849 #, c-format msgid "SQL functions cannot return type %s" msgstr "les fonctions SQL ne peuvent pas renvoyer un type %s" -#: catalog/pg_proc.c:866 +#: catalog/pg_proc.c:864 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "les fonctions SQL ne peuvent avoir d'arguments du type %s" -#: catalog/pg_proc.c:978 executor/functions.c:1458 +#: catalog/pg_proc.c:976 executor/functions.c:1458 #, c-format msgid "SQL function \"%s\"" msgstr "Fonction SQL « %s »" @@ -5345,7 +5355,7 @@ msgstr "" "ne peut pas réaffecter les objets appartenant à %s car ils sont nécessaires au\n" "système de bases de données" -#: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:775 commands/subscriptioncmds.c:1085 commands/subscriptioncmds.c:1427 +#: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:777 commands/subscriptioncmds.c:1087 commands/subscriptioncmds.c:1430 #, c-format msgid "subscription \"%s\" does not exist" msgstr "la souscription « %s » n'existe pas" @@ -5363,7 +5373,7 @@ msgstr "La synchronization de la table « %s » est en cours et est dans l'état #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:440 +#: catalog/pg_subscription.c:441 #, c-format msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." msgstr "Utiliser %s pour activer la souscription si elle n'est pas déjà activée ou utiliser %s pour supprimer la souscription." @@ -5418,7 +5428,7 @@ msgstr "Vous pouvez modifier manuellement un nom de type multirange en utilisant msgid "invalid page in block %u of relation %s" msgstr "page invalide dans le bloc %u de la relation %s" -#: catalog/toasting.c:104 commands/indexcmds.c:667 commands/tablecmds.c:6033 commands/tablecmds.c:16368 +#: catalog/toasting.c:104 commands/indexcmds.c:667 commands/tablecmds.c:6027 commands/tablecmds.c:16335 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "« %s » n'est ni une table ni une vue matérialisée" @@ -5503,7 +5513,7 @@ msgstr "les fonctions de sérialisation ne peuvent être spécifiées que quand msgid "must specify both or neither of serialization and deserialization functions" msgstr "doit spécifier soit toutes soit aucunes des fonctions de sérialisation et désérialisation" -#: commands/aggregatecmds.c:437 commands/functioncmds.c:623 +#: commands/aggregatecmds.c:437 commands/functioncmds.c:649 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "le paramètre « parallel » doit être SAFE, RESTRICTED ou UNSAFE" @@ -5608,7 +5618,7 @@ msgstr "la méthode d'accès « %s » n'existe pas" msgid "handler function is not specified" msgstr "la fonction handler n'est pas spécifiée" -#: commands/amcmds.c:264 commands/event_trigger.c:183 commands/foreigncmds.c:489 commands/proclang.c:80 commands/trigger.c:681 parser/parse_clause.c:941 +#: commands/amcmds.c:264 commands/event_trigger.c:183 commands/foreigncmds.c:489 commands/proclang.c:80 commands/trigger.c:681 parser/parse_clause.c:940 #, c-format msgid "function %s must return type %s" msgstr "la fonction %s doit renvoyer le type %s" @@ -5642,27 +5652,27 @@ msgstr "analyse « %s.%s »" msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "la colonne « %s » de la relation « %s » apparait plus d'une fois" -#: commands/analyze.c:791 +#: commands/analyze.c:790 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"\n" msgstr "ANALYZE automatique de la table « %s.%s.%s »\n" -#: commands/analyze.c:812 +#: commands/analyze.c:811 #, c-format msgid "system usage: %s" msgstr "utilisation du système : %s" -#: commands/analyze.c:1351 +#: commands/analyze.c:1350 #, c-format msgid "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead rows; %d rows in sample, %.0f estimated total rows" msgstr "« %s » : %d pages parcourues parmi %u, contenant %.0f lignes à conserver et %.0f lignes à supprimer ; %d lignes dans l'échantillon, %.0f lignes totales estimées" -#: commands/analyze.c:1431 +#: commands/analyze.c:1430 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" msgstr "ignore l'analyse de l'arbre d'héritage « %s.%s » --- cet arbre d'héritage ne contient pas de tables enfants" -#: commands/analyze.c:1529 +#: commands/analyze.c:1528 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "ignore l'analyse de l'arbre d'héritage « %s.%s » --- cet arbre d'héritage ne contient pas de tables enfants analysables" @@ -5714,7 +5724,7 @@ msgstr "" #: commands/cluster.c:119 #, c-format msgid "unrecognized CLUSTER option \"%s\"" -msgstr "option de CLUSTER « %s » non reconnu" +msgstr "option de CLUSTER « %s » non reconnue" #: commands/cluster.c:147 commands/cluster.c:386 #, c-format @@ -5731,7 +5741,7 @@ msgstr "ne peut pas exécuter CLUSTER sur une table partitionnée" msgid "there is no previously clustered index for table \"%s\"" msgstr "il n'y a pas d'index CLUSTER précédent pour la table « %s »" -#: commands/cluster.c:187 commands/tablecmds.c:13524 commands/tablecmds.c:15392 +#: commands/cluster.c:187 commands/tablecmds.c:13495 commands/tablecmds.c:15363 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "l'index « %s » pour la table « %s » n'existe pas" @@ -5746,7 +5756,7 @@ msgstr "ne peut pas exécuter CLUSTER sur un catalogue partagé" msgid "cannot vacuum temporary tables of other sessions" msgstr "ne peut pas exécuter VACUUM sur les tables temporaires des autres sessions" -#: commands/cluster.c:456 commands/tablecmds.c:15402 +#: commands/cluster.c:456 commands/tablecmds.c:15373 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "« %s » n'est pas un index de la table « %s »" @@ -5857,7 +5867,7 @@ msgstr "n'a pas pu convertir le nom de locale « %s » en balise de langage : %s msgid "must be superuser to import system collations" msgstr "doit être super-utilisateur pour importer les collationnements systèmes" -#: commands/collationcmds.c:540 commands/copyfrom.c:1500 commands/copyto.c:688 libpq/be-secure-common.c:81 +#: commands/collationcmds.c:540 commands/copyfrom.c:1500 commands/copyto.c:682 libpq/be-secure-common.c:81 #, c-format msgid "could not execute command \"%s\": %m" msgstr "n'a pas pu exécuter la commande « %s » : %m" @@ -5872,7 +5882,7 @@ msgstr "aucune locale système utilisable n'a été trouvée" msgid "database \"%s\" does not exist" msgstr "la base de données « %s » n'existe pas" -#: commands/comment.c:101 commands/seclabel.c:191 parser/parse_utilcmd.c:989 +#: commands/comment.c:101 commands/seclabel.c:191 parser/parse_utilcmd.c:979 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni un type composite, ni une table distante" @@ -5965,7 +5975,7 @@ msgstr "l'argument de l'option « %s » doit être un nom d'encodage valide" #: commands/copy.c:522 commands/dbcommands.c:253 commands/dbcommands.c:1536 #, c-format msgid "option \"%s\" not recognized" -msgstr "option « %s » non reconnu" +msgstr "option « %s » non reconnue" #: commands/copy.c:534 #, c-format @@ -6077,12 +6087,12 @@ msgstr "la colonne « %s » est une colonne générée" msgid "Generated columns cannot be used in COPY." msgstr "Les colonnes générées ne peuvent pas être utilisées dans COPY." -#: commands/copy.c:746 commands/indexcmds.c:1754 commands/statscmds.c:250 commands/tablecmds.c:2374 commands/tablecmds.c:3030 commands/tablecmds.c:3523 parser/parse_relation.c:3593 parser/parse_relation.c:3613 utils/adt/tsvector_op.c:2680 +#: commands/copy.c:746 commands/indexcmds.c:1754 commands/statscmds.c:238 commands/tablecmds.c:2366 commands/tablecmds.c:3022 commands/tablecmds.c:3515 parser/parse_relation.c:3593 parser/parse_relation.c:3613 utils/adt/tsvector_op.c:2680 #, c-format msgid "column \"%s\" does not exist" msgstr "la colonne « %s » n'existe pas" -#: commands/copy.c:753 commands/tablecmds.c:2400 commands/trigger.c:933 parser/parse_target.c:1080 parser/parse_target.c:1091 +#: commands/copy.c:753 commands/tablecmds.c:2392 commands/trigger.c:933 parser/parse_target.c:1080 parser/parse_target.c:1091 #, c-format msgid "column \"%s\" specified more than once" msgstr "la colonne « %s » est spécifiée plus d'une fois" @@ -6152,12 +6162,12 @@ msgstr "n'a pas pu exécuter un COPY FREEZE à cause d'une activité transaction msgid "cannot perform COPY FREEZE because the table was not created or truncated in the current subtransaction" msgstr "n'a pas pu exécuter un COPY FREEZE parce que la table n'a pas été créée ou tronquée dans la transaction en cours" -#: commands/copyfrom.c:1264 commands/copyto.c:618 +#: commands/copyfrom.c:1264 commands/copyto.c:612 #, c-format msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" msgstr "la colonne « %s » FORCE_NOT_NULL n'est pas référencée par COPY" -#: commands/copyfrom.c:1287 commands/copyto.c:641 +#: commands/copyfrom.c:1287 commands/copyto.c:635 #, c-format msgid "FORCE_NULL column \"%s\" not referenced by COPY" msgstr "la colonne « %s » FORCE_NULL n'est pas référencée par COPY" @@ -6167,7 +6177,7 @@ msgstr "la colonne « %s » FORCE_NULL n'est pas référencée par COPY" msgid "COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \\copy." msgstr "COPY TO indique au serveur PostgreSQL de lire un fichier. Vous pourriez vouloir utiliser la fonctionnalité \\copy de psql pour lire en local." -#: commands/copyfrom.c:1532 commands/copyto.c:740 +#: commands/copyfrom.c:1532 commands/copyto.c:734 #, c-format msgid "\"%s\" is a directory" msgstr "« %s » est un répertoire" @@ -6369,67 +6379,67 @@ msgstr "ne peut pas copier à partir de la table partitionnée « %s »" msgid "cannot copy from non-table relation \"%s\"" msgstr "ne peut pas copier depuis la relation « %s », qui n'est pas une table" -#: commands/copyto.c:457 +#: commands/copyto.c:451 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for COPY" msgstr "les règles DO INSTEAD NOTHING ne sont pas supportées pour COPY" -#: commands/copyto.c:471 +#: commands/copyto.c:465 #, c-format msgid "conditional DO INSTEAD rules are not supported for COPY" msgstr "les règles DO INSTEAD conditionnelles ne sont pas supportées par l'instruction COPY" -#: commands/copyto.c:475 +#: commands/copyto.c:469 #, c-format msgid "DO ALSO rules are not supported for the COPY" msgstr "les règles DO ALSO ne sont pas supportées pour COPY" -#: commands/copyto.c:480 +#: commands/copyto.c:474 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for COPY" msgstr "les règles DO INSTEAD multi-instructions ne sont pas supportées par l'instruction COPY" -#: commands/copyto.c:490 +#: commands/copyto.c:484 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) n'est pas supporté" -#: commands/copyto.c:507 +#: commands/copyto.c:501 #, c-format msgid "COPY query must have a RETURNING clause" msgstr "La requête COPY doit avoir une clause RETURNING" -#: commands/copyto.c:536 +#: commands/copyto.c:530 #, c-format msgid "relation referenced by COPY statement has changed" msgstr "la relation référencée par l'instruction COPY a changé" -#: commands/copyto.c:595 +#: commands/copyto.c:589 #, c-format msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" msgstr "la colonne « %s » FORCE_QUOTE n'est pas référencée par COPY" -#: commands/copyto.c:705 +#: commands/copyto.c:699 #, c-format msgid "relative path not allowed for COPY to file" msgstr "un chemin relatif n'est pas autorisé à utiliser COPY vers un fichier" -#: commands/copyto.c:724 +#: commands/copyto.c:718 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "n'a pas pu ouvrir le fichier « %s » en écriture : %m" -#: commands/copyto.c:727 +#: commands/copyto.c:721 #, c-format msgid "COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \\copy." msgstr "COPY TO indique au serveur PostgreSQL d'écrire un fichier. Vous pourriez vouloir utiliser la fonctionnalité \\copy de psql pour écrire en local." -#: commands/createas.c:215 commands/createas.c:517 +#: commands/createas.c:215 commands/createas.c:511 #, c-format msgid "too many column names were specified" msgstr "trop de noms de colonnes ont été spécifiés" -#: commands/createas.c:540 +#: commands/createas.c:534 #, c-format msgid "policies not yet implemented for this command" msgstr "politiques non encore implémentées pour cette commande" @@ -6685,7 +6695,7 @@ msgid_plural "There are %d other sessions using the database." msgstr[0] "%d autre session utilise la base de données." msgstr[1] "%d autres sessions utilisent la base de données." -#: commands/dbcommands.c:2094 storage/ipc/procarray.c:3726 +#: commands/dbcommands.c:2094 storage/ipc/procarray.c:3749 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." @@ -6727,7 +6737,7 @@ msgstr "l'argument de %s doit être un nom de type" msgid "invalid argument for %s: \"%s\"" msgstr "argument invalide pour %s : « %s »" -#: commands/dropcmds.c:100 commands/functioncmds.c:1384 utils/adt/ruleutils.c:2806 +#: commands/dropcmds.c:100 commands/functioncmds.c:1410 utils/adt/ruleutils.c:2806 #, c-format msgid "\"%s\" is an aggregate function" msgstr "« %s » est une fonction d'agrégat" @@ -6737,12 +6747,12 @@ msgstr "« %s » est une fonction d'agrégat" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Utiliser DROP AGGREGATE pour supprimer les fonctions d'agrégat." -#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3607 commands/tablecmds.c:3765 commands/tablecmds.c:3810 commands/tablecmds.c:15829 tcop/utility.c:1291 +#: commands/dropcmds.c:158 commands/sequence.c:447 commands/tablecmds.c:3599 commands/tablecmds.c:3757 commands/tablecmds.c:3802 commands/tablecmds.c:15796 tcop/utility.c:1307 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "la relation « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1256 +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1248 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "le schéma « %s » n'existe pas, poursuite du traitement" @@ -6767,7 +6777,7 @@ msgstr "le collationnement « %s » n'existe pas, poursuite du traitement" msgid "conversion \"%s\" does not exist, skipping" msgstr "la conversion « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:293 commands/statscmds.c:641 +#: commands/dropcmds.c:293 commands/statscmds.c:630 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "l'objet statistique « %s » n'existe pas, poursuite du traitement" @@ -6906,18 +6916,18 @@ msgstr "nom d'événement non reconnu : « %s »" #: commands/event_trigger.c:153 #, c-format msgid "unrecognized filter variable \"%s\"" -msgstr "variable « %s » du filtre non reconnu" +msgstr "variable « %s » du filtre non reconnue" #: commands/event_trigger.c:207 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" -msgstr "valeur de filtre « %s » non reconnu pour la variable de filtre « %s »" +msgstr "valeur de filtre « %s » non reconnue pour la variable de filtre « %s »" #. translator: %s represents an SQL statement name #: commands/event_trigger.c:213 commands/event_trigger.c:235 #, c-format msgid "event triggers are not supported for %s" -msgstr "les triggers sur événemenr ne sont pas supportés pour %s" +msgstr "les triggers sur événement ne sont pas supportés pour %s" #: commands/event_trigger.c:248 #, c-format @@ -6962,7 +6972,7 @@ msgstr "valeur non reconnue pour l'option « %s » d'EXPLAIN : « %s »" #: commands/explain.c:225 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" -msgstr "option d'EXPLAIN « %s » non reconnu" +msgstr "option d'EXPLAIN « %s » non reconnue" #: commands/explain.c:233 #, c-format @@ -6974,7 +6984,7 @@ msgstr "l'option WAL d'EXPLAIN nécessite ANALYZE" msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "l'option TIMING d'EXPLAIN nécessite ANALYZE" -#: commands/extension.c:173 commands/extension.c:3013 +#: commands/extension.c:173 commands/extension.c:3014 #, c-format msgid "extension \"%s\" does not exist" msgstr "l'extension « %s » n'existe pas" @@ -7043,7 +7053,7 @@ msgstr "" "le paramètre « %s » ne peut pas être configuré dans un fichier de contrôle\n" "secondaire de l'extension" -#: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 utils/misc/guc.c:7072 +#: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 utils/misc/guc.c:7092 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "le paramètre « %s » requiert une valeur booléenne" @@ -7075,156 +7085,156 @@ msgstr "" "les instructions de contrôle des transactions ne sont pas autorisées dans un\n" "script d'extension" -#: commands/extension.c:861 +#: commands/extension.c:862 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "droit refusé pour créer l'extension « %s »" -#: commands/extension.c:864 +#: commands/extension.c:865 #, c-format msgid "Must have CREATE privilege on current database to create this extension." msgstr "Doit avoir le droit CREATE sur la base actuelle pour créer cette extension." -#: commands/extension.c:865 +#: commands/extension.c:866 #, c-format msgid "Must be superuser to create this extension." msgstr "Doit être super-utilisateur pour créer cette extension." -#: commands/extension.c:869 +#: commands/extension.c:870 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "droit refusé pour mettre à jour l'extension « %s »" -#: commands/extension.c:872 +#: commands/extension.c:873 #, c-format msgid "Must have CREATE privilege on current database to update this extension." msgstr "Doit avoir le droit CREATE sur la base actuelle pour mettre à jour cette extension." -#: commands/extension.c:873 +#: commands/extension.c:874 #, c-format msgid "Must be superuser to update this extension." msgstr "Doit être super-utilisateur pour mettre à jour cette extension." -#: commands/extension.c:1200 +#: commands/extension.c:1201 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "l'extension « %s » n'a pas de chemin de mise à jour pour aller de la version « %s » à la version « %s »" -#: commands/extension.c:1408 commands/extension.c:3074 +#: commands/extension.c:1409 commands/extension.c:3075 #, c-format msgid "version to install must be specified" msgstr "la version à installer doit être précisée" -#: commands/extension.c:1445 +#: commands/extension.c:1446 #, c-format msgid "extension \"%s\" has no installation script nor update path for version \"%s\"" msgstr "l'extension « %s » n'a pas de script d'installation ou de chemin de mise à jour pour la version « %s »" -#: commands/extension.c:1479 +#: commands/extension.c:1480 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "l'extension « %s » doit être installée dans le schéma « %s »" -#: commands/extension.c:1639 +#: commands/extension.c:1640 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "dépendance cyclique détectée entre les extensions « %s » et « %s »" -#: commands/extension.c:1644 +#: commands/extension.c:1645 #, c-format msgid "installing required extension \"%s\"" msgstr "installation de l'extension requise « %s »" -#: commands/extension.c:1667 +#: commands/extension.c:1668 #, c-format msgid "required extension \"%s\" is not installed" msgstr "l'extension « %s » requise n'est pas installée" -#: commands/extension.c:1670 +#: commands/extension.c:1671 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "Utilisez CREATE EXTENSION ... CASCADE pour installer également les extensions requises." -#: commands/extension.c:1705 +#: commands/extension.c:1706 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "l'extension « %s » existe déjà, poursuite du traitement" -#: commands/extension.c:1712 +#: commands/extension.c:1713 #, c-format msgid "extension \"%s\" already exists" msgstr "l'extension « %s » existe déjà" -#: commands/extension.c:1723 +#: commands/extension.c:1724 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "le CREATE EXTENSION imbriqué n'est pas supporté" -#: commands/extension.c:1896 +#: commands/extension.c:1897 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "ne peut pas supprimer l'extension « %s » car il est en cours de modification" -#: commands/extension.c:2457 +#: commands/extension.c:2458 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "%s ne peut être appelé qu'à partir d'un script SQL exécuté par CREATE EXTENSION" -#: commands/extension.c:2469 +#: commands/extension.c:2470 #, c-format msgid "OID %u does not refer to a table" msgstr "l'OID %u ne fait pas référence à une table" -#: commands/extension.c:2474 +#: commands/extension.c:2475 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "la table « %s » n'est pas un membre de l'extension en cours de création" -#: commands/extension.c:2828 +#: commands/extension.c:2829 #, c-format msgid "cannot move extension \"%s\" into schema \"%s\" because the extension contains the schema" msgstr "" "ne peut pas déplacer l'extension « %s » dans le schéma « %s » car l'extension\n" "contient le schéma" -#: commands/extension.c:2869 commands/extension.c:2932 +#: commands/extension.c:2870 commands/extension.c:2933 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "l'extension « %s » ne supporte pas SET SCHEMA" -#: commands/extension.c:2934 +#: commands/extension.c:2935 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "%s n'est pas dans le schéma de l'extension « %s »" -#: commands/extension.c:2993 +#: commands/extension.c:2994 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "un ALTER EXTENSION imbriqué n'est pas supporté" -#: commands/extension.c:3085 +#: commands/extension.c:3086 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "la version « %s » de l'extension « %s » est déjà installée" -#: commands/extension.c:3297 +#: commands/extension.c:3298 #, c-format msgid "cannot add an object of this type to an extension" msgstr "ne peut pas ajouter un objet de ce type à une extension" -#: commands/extension.c:3355 +#: commands/extension.c:3356 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "" "ne peut pas ajouter le schéma « %s » à l'extension « %s » car le schéma\n" "contient l'extension" -#: commands/extension.c:3383 +#: commands/extension.c:3384 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s n'est pas un membre de l'extension « %s »" -#: commands/extension.c:3449 +#: commands/extension.c:3450 #, c-format msgid "file \"%s\" is too large" msgstr "le fichier « %s » est trop gros" @@ -7330,361 +7340,371 @@ msgstr "le wrapper de données distantes « %s » n'a pas de gestionnaire" msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "le wrapper de données distantes « %s » ne supporte pas IMPORT FOREIGN SCHEMA" -#: commands/foreigncmds.c:1607 +#: commands/foreigncmds.c:1606 #, c-format msgid "importing foreign table \"%s\"" msgstr "import de la table distante « %s »" -#: commands/functioncmds.c:107 +#: commands/functioncmds.c:108 #, c-format msgid "SQL function cannot return shell type %s" msgstr "la fonction SQL ne peut pas retourner le type shell %s" -#: commands/functioncmds.c:112 +#: commands/functioncmds.c:113 #, c-format msgid "return type %s is only a shell" msgstr "le type de retour %s est seulement un shell" -#: commands/functioncmds.c:142 parser/parse_type.c:354 +#: commands/functioncmds.c:143 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "le modificateur de type ne peut pas être précisé pour le type shell « %s »" -#: commands/functioncmds.c:148 +#: commands/functioncmds.c:149 #, c-format msgid "type \"%s\" is not yet defined" msgstr "le type « %s » n'est pas encore défini" -#: commands/functioncmds.c:149 +#: commands/functioncmds.c:150 #, c-format msgid "Creating a shell type definition." msgstr "Création d'une définition d'un type shell." -#: commands/functioncmds.c:243 +#: commands/functioncmds.c:249 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "la fonction SQL ne peut pas accepter le type shell %s" -#: commands/functioncmds.c:249 +#: commands/functioncmds.c:255 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "l'agrégat ne peut pas accepter le type shell %s" -#: commands/functioncmds.c:254 +#: commands/functioncmds.c:260 #, c-format msgid "argument type %s is only a shell" msgstr "le type d'argument %s n'est qu'une enveloppe" -#: commands/functioncmds.c:264 +#: commands/functioncmds.c:270 #, c-format msgid "type %s does not exist" msgstr "le type %s n'existe pas" -#: commands/functioncmds.c:278 +#: commands/functioncmds.c:284 #, c-format msgid "aggregates cannot accept set arguments" msgstr "les agrégats ne peuvent pas utiliser des ensembles comme arguments" -#: commands/functioncmds.c:282 +#: commands/functioncmds.c:288 #, c-format msgid "procedures cannot accept set arguments" msgstr "les procédures ne peuvent pas utiliser des arguments d'ensemble" -#: commands/functioncmds.c:286 +#: commands/functioncmds.c:292 #, c-format msgid "functions cannot accept set arguments" msgstr "les fonctions ne peuvent pas accepter des arguments d'ensemble" -#: commands/functioncmds.c:306 +#: commands/functioncmds.c:302 #, c-format -msgid "VARIADIC parameter must be the last signature parameter" +msgid "VARIADIC parameter must be the last input parameter" msgstr "le paramètre VARIADIC doit être le dernier paramètre en entrée" -#: commands/functioncmds.c:336 +#: commands/functioncmds.c:322 +#, c-format +msgid "VARIADIC parameter must be the last parameter" +msgstr "le paramètre VARIADIC doit être le dernier paramètre" + +#: commands/functioncmds.c:347 #, c-format msgid "VARIADIC parameter must be an array" msgstr "le paramètre VARIADIC doit être un tableau" -#: commands/functioncmds.c:376 +#: commands/functioncmds.c:392 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "le nom du paramètre « %s » est utilisé plus d'une fois" -#: commands/functioncmds.c:394 +#: commands/functioncmds.c:410 #, c-format msgid "only input parameters can have default values" msgstr "seuls les paramètres en entrée peuvent avoir des valeurs par défaut" -#: commands/functioncmds.c:409 +#: commands/functioncmds.c:425 #, c-format msgid "cannot use table references in parameter default value" msgstr "" "ne peut pas utiliser les références de tables dans la valeur par défaut des\n" "paramètres" -#: commands/functioncmds.c:433 +#: commands/functioncmds.c:449 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "les paramètres en entrée suivant un paramètre avec valeur par défaut doivent aussi avoir des valeurs par défaut" -#: commands/functioncmds.c:585 commands/functioncmds.c:776 +#: commands/functioncmds.c:459 +#, c-format +msgid "procedure OUT parameters cannot appear after one with a default value" +msgstr "les paramètres OUT d'une procédure ne peuvent pas apparaître après un paramètre ayant une valeur par défaut" + +#: commands/functioncmds.c:611 commands/functioncmds.c:802 #, c-format msgid "invalid attribute in procedure definition" msgstr "attribute invalide dans la définition de la procédure" -#: commands/functioncmds.c:681 +#: commands/functioncmds.c:707 #, c-format msgid "support function %s must return type %s" msgstr "la fonction de support %s doit renvoyer le type %s" -#: commands/functioncmds.c:692 +#: commands/functioncmds.c:718 #, c-format msgid "must be superuser to specify a support function" msgstr "doit être super-utilisateur pour spécifier une fonction de support" -#: commands/functioncmds.c:825 commands/functioncmds.c:1429 +#: commands/functioncmds.c:851 commands/functioncmds.c:1455 #, c-format msgid "COST must be positive" msgstr "COST doit être positif" -#: commands/functioncmds.c:833 commands/functioncmds.c:1437 +#: commands/functioncmds.c:859 commands/functioncmds.c:1463 #, c-format msgid "ROWS must be positive" msgstr "ROWS doit être positif" -#: commands/functioncmds.c:862 +#: commands/functioncmds.c:888 #, c-format msgid "no function body specified" msgstr "aucun corps de fonction spécifié" -#: commands/functioncmds.c:867 +#: commands/functioncmds.c:893 #, c-format msgid "duplicate function body specified" msgstr "corps de fonction dupliqué spécifié" -#: commands/functioncmds.c:872 +#: commands/functioncmds.c:898 #, c-format msgid "inline SQL function body only valid for language SQL" msgstr "" -#: commands/functioncmds.c:914 +#: commands/functioncmds.c:940 #, c-format msgid "SQL function with unquoted function body cannot have polymorphic arguments" msgstr "la fonction SQL avec un corps de fonction sans guillemets ne peuvent pas avoir des arguments polymorphiques" -#: commands/functioncmds.c:940 commands/functioncmds.c:959 +#: commands/functioncmds.c:966 commands/functioncmds.c:985 #, c-format msgid "%s is not yet supported in unquoted SQL function body" msgstr "%s n'est pas encore accepté dans une corps de fonction SQL sans guillemets" -#: commands/functioncmds.c:987 +#: commands/functioncmds.c:1013 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "seul un élément AS est nécessaire pour le langage « %s »" -#: commands/functioncmds.c:1092 +#: commands/functioncmds.c:1118 #, c-format msgid "no language specified" msgstr "aucun langage spécifié" -#: commands/functioncmds.c:1100 commands/functioncmds.c:2102 commands/proclang.c:237 +#: commands/functioncmds.c:1126 commands/functioncmds.c:2128 commands/proclang.c:237 #, c-format msgid "language \"%s\" does not exist" msgstr "le langage « %s » n'existe pas" -#: commands/functioncmds.c:1102 commands/functioncmds.c:2104 +#: commands/functioncmds.c:1128 commands/functioncmds.c:2130 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "Utiliser CREATE EXTENSION pour charger le langage dans la base de données." -#: commands/functioncmds.c:1137 commands/functioncmds.c:1421 +#: commands/functioncmds.c:1163 commands/functioncmds.c:1447 #, c-format msgid "only superuser can define a leakproof function" msgstr "seul un superutilisateur peut définir une fonction leakproof" -#: commands/functioncmds.c:1188 +#: commands/functioncmds.c:1214 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "le type de résultat de la fonction doit être %s à cause des paramètres OUT" -#: commands/functioncmds.c:1201 +#: commands/functioncmds.c:1227 #, c-format msgid "function result type must be specified" msgstr "le type de résultat de la fonction doit être spécifié" -#: commands/functioncmds.c:1255 commands/functioncmds.c:1441 +#: commands/functioncmds.c:1281 commands/functioncmds.c:1467 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "ROWS n'est pas applicable quand la fonction ne renvoie pas un ensemble" -#: commands/functioncmds.c:1541 +#: commands/functioncmds.c:1567 #, c-format msgid "source data type %s is a pseudo-type" msgstr "le type de données source %s est un pseudo-type" -#: commands/functioncmds.c:1547 +#: commands/functioncmds.c:1573 #, c-format msgid "target data type %s is a pseudo-type" msgstr "le type de données cible %s est un pseudo-type" -#: commands/functioncmds.c:1571 +#: commands/functioncmds.c:1597 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "la conversion sera ignorée car le type de données source est un domaine" -#: commands/functioncmds.c:1576 +#: commands/functioncmds.c:1602 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "la conversion sera ignorée car le type de données cible est un domaine" -#: commands/functioncmds.c:1601 +#: commands/functioncmds.c:1627 #, c-format msgid "cast function must take one to three arguments" msgstr "la fonction de conversion doit prendre de un à trois arguments" -#: commands/functioncmds.c:1605 +#: commands/functioncmds.c:1631 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "l'argument de la fonction de conversion doit correspondre ou être binary-coercible à partir du type de la donnée source" -#: commands/functioncmds.c:1609 +#: commands/functioncmds.c:1635 #, c-format msgid "second argument of cast function must be type %s" msgstr "le second argument de la fonction de conversion doit être de type %s" -#: commands/functioncmds.c:1614 +#: commands/functioncmds.c:1640 #, c-format msgid "third argument of cast function must be type %s" msgstr "le troisième argument de la fonction de conversion doit être de type %s" -#: commands/functioncmds.c:1619 +#: commands/functioncmds.c:1645 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "" "le type de donnée en retour de la fonction de conversion doit correspondre\n" "ou être coercible binairement au type de données cible" -#: commands/functioncmds.c:1630 +#: commands/functioncmds.c:1656 #, c-format msgid "cast function must not be volatile" msgstr "la fonction de conversion ne doit pas être volatile" -#: commands/functioncmds.c:1635 +#: commands/functioncmds.c:1661 #, c-format msgid "cast function must be a normal function" msgstr "la fonction de conversion doit être une fonction normale" -#: commands/functioncmds.c:1639 +#: commands/functioncmds.c:1665 #, c-format msgid "cast function must not return a set" msgstr "la fonction de conversion ne doit pas renvoyer un ensemble" -#: commands/functioncmds.c:1665 +#: commands/functioncmds.c:1691 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "doit être super-utilisateur pour créer une fonction de conversion SANS FONCTION" -#: commands/functioncmds.c:1680 +#: commands/functioncmds.c:1706 #, c-format msgid "source and target data types are not physically compatible" msgstr "les types de données source et cible ne sont pas physiquement compatibles" -#: commands/functioncmds.c:1695 +#: commands/functioncmds.c:1721 #, c-format msgid "composite data types are not binary-compatible" msgstr "les types de données composites ne sont pas compatibles binairement" -#: commands/functioncmds.c:1701 +#: commands/functioncmds.c:1727 #, c-format msgid "enum data types are not binary-compatible" msgstr "les types de données enum ne sont pas compatibles binairement" -#: commands/functioncmds.c:1707 +#: commands/functioncmds.c:1733 #, c-format msgid "array data types are not binary-compatible" msgstr "les types de données tableau ne sont pas compatibles binairement" -#: commands/functioncmds.c:1724 +#: commands/functioncmds.c:1750 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "les types de données domaines ne sont pas compatibles binairement" -#: commands/functioncmds.c:1734 +#: commands/functioncmds.c:1760 #, c-format msgid "source data type and target data type are the same" msgstr "les types de données source et cible sont identiques" -#: commands/functioncmds.c:1767 +#: commands/functioncmds.c:1793 #, c-format msgid "transform function must not be volatile" msgstr "la fonction de transformation ne doit pas être volatile" -#: commands/functioncmds.c:1771 +#: commands/functioncmds.c:1797 #, c-format msgid "transform function must be a normal function" msgstr "la fonction de transformation doit être une fonction normale" -#: commands/functioncmds.c:1775 +#: commands/functioncmds.c:1801 #, c-format msgid "transform function must not return a set" msgstr "la fonction de transformation ne doit pas renvoyer un ensemble" -#: commands/functioncmds.c:1779 +#: commands/functioncmds.c:1805 #, c-format msgid "transform function must take one argument" msgstr "la fonction de transformation doit prendre de un argument" -#: commands/functioncmds.c:1783 +#: commands/functioncmds.c:1809 #, c-format msgid "first argument of transform function must be type %s" msgstr "le premier argument de la fonction de transformation doit être de type %s" -#: commands/functioncmds.c:1822 +#: commands/functioncmds.c:1848 #, c-format msgid "data type %s is a pseudo-type" msgstr "le type de données %s est un pseudo-type" -#: commands/functioncmds.c:1828 +#: commands/functioncmds.c:1854 #, c-format msgid "data type %s is a domain" msgstr "le type de données %s est un domaine" -#: commands/functioncmds.c:1868 +#: commands/functioncmds.c:1894 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "le type de donnée en retour de la fonction FROM SQL doit être %s" -#: commands/functioncmds.c:1894 +#: commands/functioncmds.c:1920 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "le type de donnée en retour de la fonction TO SQL doit être du type de données de la transformation" -#: commands/functioncmds.c:1923 +#: commands/functioncmds.c:1949 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "la transformation pour le type %s et le langage « %s » existe déjà" -#: commands/functioncmds.c:2010 +#: commands/functioncmds.c:2036 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "la transformation pour le type %s et le langage « %s » n'existe pas" -#: commands/functioncmds.c:2034 +#: commands/functioncmds.c:2060 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "la fonction %s existe déjà dans le schéma « %s »" -#: commands/functioncmds.c:2089 +#: commands/functioncmds.c:2115 #, c-format msgid "no inline code specified" msgstr "aucun code en ligne spécifié" -#: commands/functioncmds.c:2135 +#: commands/functioncmds.c:2161 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "le langage « %s » ne supporte pas l'exécution de code en ligne" -#: commands/functioncmds.c:2252 +#: commands/functioncmds.c:2256 #, c-format msgid "cannot pass more than %d argument to a procedure" msgid_plural "cannot pass more than %d arguments to a procedure" @@ -7726,7 +7746,7 @@ msgstr "ne peut pas créer les index sur les tables temporaires des autres sessi msgid "cannot specify default tablespace for partitioned relations" msgstr "ne peut pas spécifier un tablespace par défaut pour les relations partitionnées" -#: commands/indexcmds.c:777 commands/tablecmds.c:783 commands/tablecmds.c:3307 +#: commands/indexcmds.c:777 commands/tablecmds.c:783 commands/tablecmds.c:3299 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "seules les relations partagées peuvent être placées dans le tablespace pg_global" @@ -7764,7 +7784,7 @@ msgstr "ne peut pas faire correspondre la clé de partitionnement à un index ut #: commands/indexcmds.c:979 #, c-format msgid "unsupported %s constraint with partition key definition" -msgstr "contrainte %s non supporée avec la définition de clé de partitionnement" +msgstr "contrainte %s non supportée avec la définition de clé de partitionnement" #: commands/indexcmds.c:981 #, c-format @@ -7786,27 +7806,27 @@ msgstr "la contrainte %s sur la table « %s » ne contient pas la colonne « %s msgid "index creation on system columns is not supported" msgstr "la création d'un index sur les tables du catalogue système n'est pas supportée" -#: commands/indexcmds.c:1231 tcop/utility.c:1477 +#: commands/indexcmds.c:1231 tcop/utility.c:1493 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "ne peut pas créer un index unique sur la table partitionnée « %s »" -#: commands/indexcmds.c:1233 tcop/utility.c:1479 +#: commands/indexcmds.c:1233 tcop/utility.c:1495 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." -msgstr "La table « %s » contient des partitionso qui ne sont pas des tables distantes." +msgstr "La table « %s » contient des partitions qui ne sont pas des tables distantes." #: commands/indexcmds.c:1683 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "les fonctions dans un prédicat d'index doivent être marquées comme IMMUTABLE" -#: commands/indexcmds.c:1749 parser/parse_utilcmd.c:2525 parser/parse_utilcmd.c:2660 +#: commands/indexcmds.c:1749 parser/parse_utilcmd.c:2515 parser/parse_utilcmd.c:2650 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "la colonne « %s » nommée dans la clé n'existe pas" -#: commands/indexcmds.c:1773 parser/parse_utilcmd.c:1824 +#: commands/indexcmds.c:1773 parser/parse_utilcmd.c:1814 #, c-format msgid "expressions are not supported in included columns" msgstr "les expressions ne sont pas supportées dans les colonnes incluses" @@ -7843,7 +7863,7 @@ msgstr "une colonne incluse ne supporte pas d'options NULLS FIRST/LAST" msgid "could not determine which collation to use for index expression" msgstr "n'a pas pu déterminer le collationnement à utiliser pour l'expression d'index" -#: commands/indexcmds.c:1876 commands/tablecmds.c:16834 commands/typecmds.c:810 parser/parse_expr.c:2680 parser/parse_type.c:566 parser/parse_utilcmd.c:3813 utils/adt/misc.c:599 +#: commands/indexcmds.c:1876 commands/tablecmds.c:16801 commands/typecmds.c:810 parser/parse_expr.c:2680 parser/parse_type.c:566 parser/parse_utilcmd.c:3781 utils/adt/misc.c:599 #, c-format msgid "collations are not supported by type %s" msgstr "les collationnements ne sont pas supportés par le type %s" @@ -7880,7 +7900,7 @@ msgstr "la méthode d'accès « %s » ne supporte pas les options ASC/DESC" msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "la méthode d'accès « %s » ne supporte pas les options NULLS FIRST/LAST" -#: commands/indexcmds.c:2031 commands/tablecmds.c:16859 commands/tablecmds.c:16865 commands/typecmds.c:2318 +#: commands/indexcmds.c:2031 commands/tablecmds.c:16826 commands/tablecmds.c:16832 commands/typecmds.c:2318 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "" @@ -7914,7 +7934,7 @@ msgstr "" #: commands/indexcmds.c:2502 #, c-format msgid "unrecognized REINDEX option \"%s\"" -msgstr "option de REINDEX « %s » non reconnu" +msgstr "option de REINDEX « %s » non reconnue" #: commands/indexcmds.c:2726 #, c-format @@ -7986,7 +8006,7 @@ msgstr "ne peut pas déplacer la relation non partagée dans le tablespace « %s msgid "index \"%s.%s\" was reindexed" msgstr "l'index « %s.%s » a été réindexé" -#: commands/lockcmds.c:92 commands/tablecmds.c:6024 commands/trigger.c:289 rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:938 +#: commands/lockcmds.c:92 commands/tablecmds.c:6018 commands/trigger.c:289 rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:938 #, c-format msgid "\"%s\" is not a table or view" msgstr "« %s » n'est ni une table ni une vue" @@ -8183,22 +8203,22 @@ msgstr "les fonctions d'égalité d'image btree ne doivent pas être inter-types #: commands/opclasscmds.c:1333 #, c-format msgid "hash function 1 must have one argument" -msgstr "la fonctions de hashage 1 doit avoir un argument" +msgstr "la fonction de hachage 1 doit avoir un argument" #: commands/opclasscmds.c:1337 #, c-format msgid "hash function 1 must return integer" -msgstr "la fonctions de hashage 1 doit retourner un integer" +msgstr "la fonction de hachage 1 doit retourner un integer" #: commands/opclasscmds.c:1344 #, c-format msgid "hash function 2 must have two arguments" -msgstr "la fonctions de hashage 1 doit avoir deux argument" +msgstr "la fonction de hachage 1 doit avoir deux arguments" #: commands/opclasscmds.c:1348 #, c-format msgid "hash function 2 must return bigint" -msgstr "la fonctions de hashage 2 doit retourner un bigint" +msgstr "la fonction de hachage 2 doit retourner un bigint" #: commands/opclasscmds.c:1373 #, c-format @@ -8303,52 +8323,52 @@ msgstr "" msgid "operator attribute \"%s\" cannot be changed" msgstr "l'attribut « %s » de l'opérateur ne peut pas être changé" -#: commands/policy.c:88 commands/policy.c:381 commands/policy.c:471 commands/statscmds.c:150 commands/tablecmds.c:1569 commands/tablecmds.c:2158 commands/tablecmds.c:3417 commands/tablecmds.c:6003 commands/tablecmds.c:8872 commands/tablecmds.c:16424 commands/tablecmds.c:16459 commands/trigger.c:295 commands/trigger.c:1271 commands/trigger.c:1380 rewrite/rewriteDefine.c:277 rewrite/rewriteDefine.c:943 rewrite/rewriteRemove.c:80 +#: commands/policy.c:89 commands/policy.c:382 commands/policy.c:471 commands/statscmds.c:150 commands/tablecmds.c:1561 commands/tablecmds.c:2150 commands/tablecmds.c:3409 commands/tablecmds.c:5997 commands/tablecmds.c:8859 commands/tablecmds.c:16391 commands/tablecmds.c:16426 commands/trigger.c:295 commands/trigger.c:1271 commands/trigger.c:1380 rewrite/rewriteDefine.c:277 rewrite/rewriteDefine.c:943 rewrite/rewriteRemove.c:80 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "droit refusé : « %s » est un catalogue système" -#: commands/policy.c:171 +#: commands/policy.c:172 #, c-format msgid "ignoring specified roles other than PUBLIC" msgstr "ingore les rôles spécifiés autre que PUBLIC" -#: commands/policy.c:172 +#: commands/policy.c:173 #, c-format msgid "All roles are members of the PUBLIC role." msgstr "Tous les rôles sont membres du rôle PUBLIC." -#: commands/policy.c:495 +#: commands/policy.c:488 #, c-format msgid "role \"%s\" could not be removed from policy \"%s\" on \"%s\"" msgstr "le rôle « %s » n'a pas pu être supprimé de la politique « %s » sur « %s »" -#: commands/policy.c:704 +#: commands/policy.c:708 #, c-format msgid "WITH CHECK cannot be applied to SELECT or DELETE" msgstr "WITH CHECK ne peut pas être appliqué à SELECT et DELETE" -#: commands/policy.c:713 commands/policy.c:1018 +#: commands/policy.c:717 commands/policy.c:1022 #, c-format msgid "only WITH CHECK expression allowed for INSERT" msgstr "seule une expression WITH CHECK est autorisée pour INSERT" -#: commands/policy.c:788 commands/policy.c:1241 +#: commands/policy.c:792 commands/policy.c:1245 #, c-format msgid "policy \"%s\" for table \"%s\" already exists" msgstr "la politique « %s » pour la table « %s » existe déjà" -#: commands/policy.c:990 commands/policy.c:1269 commands/policy.c:1340 +#: commands/policy.c:994 commands/policy.c:1273 commands/policy.c:1344 #, c-format msgid "policy \"%s\" for table \"%s\" does not exist" msgstr "la politique « %s » pour la table « %s » n'existe pas" -#: commands/policy.c:1008 +#: commands/policy.c:1012 #, c-format msgid "only USING expression allowed for SELECT, DELETE" msgstr "seule une expression USING est autorisée pour SELECT, DELETE" -#: commands/portalcmds.c:60 commands/portalcmds.c:187 commands/portalcmds.c:238 +#: commands/portalcmds.c:60 commands/portalcmds.c:181 commands/portalcmds.c:232 #, c-format msgid "invalid cursor name: must not be empty" msgstr "nom de curseur invalide : il ne doit pas être vide" @@ -8358,7 +8378,7 @@ msgstr "nom de curseur invalide : il ne doit pas être vide" msgid "cannot create a cursor WITH HOLD within security-restricted operation" msgstr "ne peut pas créer un curseur WITH HOLD à l'intérieur d'une opération restreinte pour sécurité" -#: commands/portalcmds.c:195 commands/portalcmds.c:248 executor/execCurrent.c:70 utils/adt/xml.c:2594 utils/adt/xml.c:2764 +#: commands/portalcmds.c:189 commands/portalcmds.c:242 executor/execCurrent.c:70 utils/adt/xml.c:2594 utils/adt/xml.c:2764 #, c-format msgid "cursor \"%s\" does not exist" msgstr "le curseur « %s » n'existe pas" @@ -8368,44 +8388,44 @@ msgstr "le curseur « %s » n'existe pas" msgid "invalid statement name: must not be empty" msgstr "nom de l'instruction invalide : ne doit pas être vide" -#: commands/prepare.c:134 parser/parse_param.c:313 tcop/postgres.c:1473 +#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1473 #, c-format msgid "could not determine data type of parameter $%d" msgstr "n'a pas pu déterminer le type de données du paramètre $%d" -#: commands/prepare.c:152 +#: commands/prepare.c:149 #, c-format msgid "utility statements cannot be prepared" msgstr "les instructions utilitaires ne peuvent pas être préparées" -#: commands/prepare.c:256 commands/prepare.c:261 +#: commands/prepare.c:264 commands/prepare.c:269 #, c-format msgid "prepared statement is not a SELECT" msgstr "l'instruction préparée n'est pas un SELECT" -#: commands/prepare.c:328 +#: commands/prepare.c:329 #, c-format msgid "wrong number of parameters for prepared statement \"%s\"" msgstr "mauvais nombre de paramètres pour l'instruction préparée « %s »" -#: commands/prepare.c:330 +#: commands/prepare.c:331 #, c-format msgid "Expected %d parameters but got %d." msgstr "%d paramètres attendus mais %d reçus." -#: commands/prepare.c:363 +#: commands/prepare.c:364 #, c-format msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "" "le paramètre $%d de type %s ne peut être utilisé dans la coercion à cause du\n" "type %s attendu" -#: commands/prepare.c:447 +#: commands/prepare.c:448 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "l'instruction préparée « %s » existe déjà" -#: commands/prepare.c:486 +#: commands/prepare.c:487 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "l'instruction préparée « %s » n'existe pas" @@ -8470,12 +8490,12 @@ msgstr "droit refusé pour modifier le propriétaire de la publication « %s »" msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "Le propriétaire d'une publication FOR ALL TABLES doit être un super-utilisateur." -#: commands/schemacmds.c:105 commands/schemacmds.c:258 +#: commands/schemacmds.c:105 commands/schemacmds.c:259 #, c-format msgid "unacceptable schema name \"%s\"" msgstr "nom de schéma « %s » inacceptable" -#: commands/schemacmds.c:106 commands/schemacmds.c:259 +#: commands/schemacmds.c:106 commands/schemacmds.c:260 #, c-format msgid "The prefix \"pg_\" is reserved for system schemas." msgstr "Le préfixe « pg_ » est réservé pour les schémas système." @@ -8627,12 +8647,12 @@ msgstr "la séquence doit être dans le même schéma que la table avec laquelle msgid "cannot change ownership of identity sequence" msgstr "ne peut pas modifier le propriétaire de la séquence d'identité" -#: commands/sequence.c:1717 commands/tablecmds.c:13216 commands/tablecmds.c:15849 +#: commands/sequence.c:1717 commands/tablecmds.c:13187 commands/tablecmds.c:15816 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "La séquence « %s » est liée à la table « %s »." -#: commands/statscmds.c:111 commands/statscmds.c:120 tcop/utility.c:1827 +#: commands/statscmds.c:111 commands/statscmds.c:120 tcop/utility.c:1843 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "seule une relation seule est acceptée dans CREATE STATISTICS" @@ -8657,62 +8677,57 @@ msgstr "l'objet statistique « %s » existe déjà" msgid "cannot have more than %d columns in statistics" msgstr "ne peut pas avoir plus de %d colonnes dans des statistiques" -#: commands/statscmds.c:236 -#, c-format -msgid "only simple column references and expressions are allowed in CREATE STATISTICS" -msgstr "seules des références et expressions à une seule colonne sont acceptées dans CREATE STATISTICS" - -#: commands/statscmds.c:258 +#: commands/statscmds.c:246 #, c-format msgid "statistics creation on system columns is not supported" msgstr "la création de statistiques sur les colonnes systèmes n'est pas supportée" -#: commands/statscmds.c:265 +#: commands/statscmds.c:253 #, c-format msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" -msgstr "la colonne « %s » ne peut pas être utilisé dans des statistiques parce que son type %s n'a pas de classe d'opérateur btree par défaut" +msgstr "la colonne « %s » ne peut pas être utilisée dans des statistiques parce que son type %s n'a pas de classe d'opérateur btree par défaut" -#: commands/statscmds.c:293 +#: commands/statscmds.c:282 #, c-format msgid "expression cannot be used in multivariate statistics because its type %s has no default btree operator class" -msgstr "l'expression ne peut pas être utilisé dans des statistiques multivariates parce que son type %s n'a pas de classe d'opérateur btree par défaut" +msgstr "l'expression ne peut pas être utilisée dans des statistiques multivariates parce que son type %s n'a pas de classe d'opérateur btree par défaut" -#: commands/statscmds.c:314 +#: commands/statscmds.c:303 #, c-format msgid "when building statistics on a single expression, statistics kinds may not be specified" msgstr "" -#: commands/statscmds.c:343 +#: commands/statscmds.c:332 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "type de statistique « %s » non reconnu" -#: commands/statscmds.c:372 +#: commands/statscmds.c:361 #, c-format msgid "extended statistics require at least 2 columns" msgstr "les statistiques étendues requièrent au moins 2 colonnes" -#: commands/statscmds.c:390 +#: commands/statscmds.c:379 #, c-format msgid "duplicate column name in statistics definition" msgstr "nom de colonne dupliqué dans la définition des statistiques" -#: commands/statscmds.c:425 +#: commands/statscmds.c:414 #, c-format msgid "duplicate expression in statistics definition" msgstr "expression dupliquée dans la définition des statistiques" -#: commands/statscmds.c:606 commands/tablecmds.c:7844 +#: commands/statscmds.c:595 commands/tablecmds.c:7829 #, c-format msgid "statistics target %d is too low" msgstr "la cible statistique %d est trop basse" -#: commands/statscmds.c:614 commands/tablecmds.c:7852 +#: commands/statscmds.c:603 commands/tablecmds.c:7837 #, c-format msgid "lowering statistics target to %d" msgstr "abaissement de la cible statistique à %d" -#: commands/statscmds.c:637 +#: commands/statscmds.c:626 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "l'objet statistique « %s.%s » n'existe pas, poursuite du traitement" @@ -8739,104 +8754,104 @@ msgstr "la souscription avec %s doit aussi configurer %s" msgid "must be superuser to create subscriptions" msgstr "doit être super-utilisateur pour créer des souscriptions" -#: commands/subscriptioncmds.c:471 commands/subscriptioncmds.c:568 replication/logical/tablesync.c:963 replication/logical/worker.c:3097 +#: commands/subscriptioncmds.c:472 commands/subscriptioncmds.c:570 replication/logical/tablesync.c:975 replication/logical/worker.c:3212 #, c-format msgid "could not connect to the publisher: %s" msgstr "n'a pas pu se connecter au publieur : %s" -#: commands/subscriptioncmds.c:513 +#: commands/subscriptioncmds.c:514 #, c-format msgid "created replication slot \"%s\" on publisher" msgstr "création du slot de réplication « %s » sur le publieur" #. translator: %s is an SQL ALTER statement -#: commands/subscriptioncmds.c:526 +#: commands/subscriptioncmds.c:527 #, c-format msgid "tables were not subscribed, you will have to run %s to subscribe the tables" msgstr "les tables n'étaient pas souscrites, vous devrez exécuter %s pour souscrire aux tables" -#: commands/subscriptioncmds.c:824 +#: commands/subscriptioncmds.c:826 #, c-format msgid "cannot set %s for enabled subscription" msgstr "ne peut définir %s pour une souscription active" -#: commands/subscriptioncmds.c:880 +#: commands/subscriptioncmds.c:882 #, c-format msgid "cannot enable subscription that does not have a slot name" msgstr "ne peut pas activer une souscription qui n'a pas de nom de slot" -#: commands/subscriptioncmds.c:932 commands/subscriptioncmds.c:980 +#: commands/subscriptioncmds.c:934 commands/subscriptioncmds.c:982 #, c-format msgid "ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION avec rafraîchissement n'est pas autorisé pour les souscriptions désactivées" -#: commands/subscriptioncmds.c:933 commands/subscriptioncmds.c:981 +#: commands/subscriptioncmds.c:935 commands/subscriptioncmds.c:983 #, c-format msgid "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgstr "Utilisez ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." -#: commands/subscriptioncmds.c:1001 +#: commands/subscriptioncmds.c:1003 #, c-format msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH n'est pas autorisé pour les souscriptions désactivées" -#: commands/subscriptioncmds.c:1089 +#: commands/subscriptioncmds.c:1091 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "la souscription « %s » n'existe pas, poursuite du traitement" -#: commands/subscriptioncmds.c:1341 +#: commands/subscriptioncmds.c:1343 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "slot de réplication « %s » supprimé sur le publieur" -#: commands/subscriptioncmds.c:1350 commands/subscriptioncmds.c:1357 +#: commands/subscriptioncmds.c:1352 commands/subscriptioncmds.c:1360 #, c-format msgid "could not drop replication slot \"%s\" on publisher: %s" msgstr "n'a pas pu supprimer le slot de réplication « %s » sur le publieur : %s" -#: commands/subscriptioncmds.c:1391 +#: commands/subscriptioncmds.c:1394 #, c-format msgid "permission denied to change owner of subscription \"%s\"" msgstr "droit refusé pour modifier le propriétaire de la souscription « %s »" -#: commands/subscriptioncmds.c:1393 +#: commands/subscriptioncmds.c:1396 #, c-format msgid "The owner of a subscription must be a superuser." msgstr "Le propriétaire d'une souscription doit être un super-utilisateur." -#: commands/subscriptioncmds.c:1508 +#: commands/subscriptioncmds.c:1512 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "n'a pas pu recevoir la liste des tables répliquées à partir du publieur : %s" -#: commands/subscriptioncmds.c:1572 +#: commands/subscriptioncmds.c:1577 #, c-format msgid "could not connect to publisher when attempting to drop replication slot \"%s\": %s" msgstr "n'a pas pu se connecter au publieur lors de la tentative de suppression du slot de réplication « %s » : %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1575 +#: commands/subscriptioncmds.c:1580 #, c-format msgid "Use %s to disassociate the subscription from the slot." msgstr "Utilisez %s pour dissocier la souscription du slot." -#: commands/subscriptioncmds.c:1605 +#: commands/subscriptioncmds.c:1610 #, c-format msgid "publication name \"%s\" used more than once" msgstr "nom de publication « %s » utilisé plus d'une fois" -#: commands/subscriptioncmds.c:1649 +#: commands/subscriptioncmds.c:1654 #, c-format msgid "publication \"%s\" is already in subscription \"%s\"" msgstr "la publication « %s » est déjà dans la souscription « %s »" -#: commands/subscriptioncmds.c:1663 +#: commands/subscriptioncmds.c:1668 #, c-format msgid "publication \"%s\" is not in subscription \"%s\"" msgstr "la publication « %s » n'est pas dans la souscription « %s »" -#: commands/subscriptioncmds.c:1674 +#: commands/subscriptioncmds.c:1679 #, c-format msgid "subscription must contain at least one publication" msgstr "la souscription doit contenir au moins une publication" @@ -8897,7 +8912,7 @@ msgstr "la vue matérialisée « %s » n'existe pas, poursuite du traitement" msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Utilisez DROP MATERIALIZED VIEW pour supprimer une vue matérialisée." -#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18270 parser/parse_utilcmd.c:2257 +#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18237 parser/parse_utilcmd.c:2247 #, c-format msgid "index \"%s\" does not exist" msgstr "l'index « %s » n'existe pas" @@ -8920,7 +8935,7 @@ msgstr "« %s » n'est pas un type" msgid "Use DROP TYPE to remove a type." msgstr "Utilisez DROP TYPE pour supprimer un type." -#: commands/tablecmds.c:277 commands/tablecmds.c:13055 commands/tablecmds.c:15548 +#: commands/tablecmds.c:277 commands/tablecmds.c:13026 commands/tablecmds.c:15519 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "la table distante « %s » n'existe pas" @@ -8946,275 +8961,275 @@ msgstr "" "ne peut pas créer une table temporaire à l'intérieur d'une fonction\n" "restreinte pour sécurité" -#: commands/tablecmds.c:731 commands/tablecmds.c:14339 +#: commands/tablecmds.c:731 commands/tablecmds.c:14310 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "la relation « %s » serait héritée plus d'une fois" -#: commands/tablecmds.c:924 +#: commands/tablecmds.c:916 #, c-format msgid "specifying a table access method is not supported on a partitioned table" msgstr "spécifier une méthode d'accès à la table n'est pas supporté sur une partitionnée" -#: commands/tablecmds.c:1020 +#: commands/tablecmds.c:1012 #, c-format msgid "\"%s\" is not partitioned" msgstr "« %s » n'est pas partitionné" -#: commands/tablecmds.c:1115 +#: commands/tablecmds.c:1107 #, c-format msgid "cannot partition using more than %d columns" msgstr "ne peut pas partitionner en utilisant plus de %d colonnes" -#: commands/tablecmds.c:1171 +#: commands/tablecmds.c:1163 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "ne peut pas créer une partition distante sur la table partitionnée « %s »" -#: commands/tablecmds.c:1173 +#: commands/tablecmds.c:1165 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "La table « %s » contient des index qui sont uniques." -#: commands/tablecmds.c:1336 +#: commands/tablecmds.c:1328 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY ne permet pas de supprimer plusieurs objets" -#: commands/tablecmds.c:1340 +#: commands/tablecmds.c:1332 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY ne permet pas la CASCADE" -#: commands/tablecmds.c:1441 +#: commands/tablecmds.c:1433 #, c-format msgid "cannot drop partitioned index \"%s\" concurrently" msgstr "ne peut pas supprimer l'index partitionné « %s » de manière concurrente" -#: commands/tablecmds.c:1713 +#: commands/tablecmds.c:1705 #, c-format msgid "cannot truncate only a partitioned table" msgstr "ne peut pas seulement tronquer une table partitionnée" -#: commands/tablecmds.c:1714 +#: commands/tablecmds.c:1706 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "Ne spécifiez pas le mot clé ONLY ou utilisez TRUNCATE ONLY directement sur les partitions." -#: commands/tablecmds.c:1787 +#: commands/tablecmds.c:1779 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "TRUNCATE cascade sur la table « %s »" -#: commands/tablecmds.c:2146 +#: commands/tablecmds.c:2138 #, c-format msgid "cannot truncate foreign table \"%s\"" msgstr "ne peut pas tronquer la table distante « %s »" -#: commands/tablecmds.c:2195 +#: commands/tablecmds.c:2187 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "ne peut pas tronquer les tables temporaires des autres sessions" -#: commands/tablecmds.c:2457 commands/tablecmds.c:14236 +#: commands/tablecmds.c:2449 commands/tablecmds.c:14207 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "ne peut pas hériter de la table partitionnée « %s »" -#: commands/tablecmds.c:2462 +#: commands/tablecmds.c:2454 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "ne peut pas hériter de la partition « %s »" -#: commands/tablecmds.c:2470 parser/parse_utilcmd.c:2487 parser/parse_utilcmd.c:2629 +#: commands/tablecmds.c:2462 parser/parse_utilcmd.c:2477 parser/parse_utilcmd.c:2619 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "la relation héritée « %s » n'est ni une table ni une table distante" -#: commands/tablecmds.c:2482 +#: commands/tablecmds.c:2474 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "ne peut pas créer une relation temporaire comme partition de la relation permanente « %s »" -#: commands/tablecmds.c:2491 commands/tablecmds.c:14215 +#: commands/tablecmds.c:2483 commands/tablecmds.c:14186 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "ine peut pas hériter à partir d'une relation temporaire « %s »" -#: commands/tablecmds.c:2501 commands/tablecmds.c:14223 +#: commands/tablecmds.c:2493 commands/tablecmds.c:14194 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "ne peut pas hériter de la table temporaire d'une autre session" -#: commands/tablecmds.c:2555 +#: commands/tablecmds.c:2547 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "assemblage de plusieurs définitions d'héritage pour la colonne « %s »" -#: commands/tablecmds.c:2563 +#: commands/tablecmds.c:2555 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "la colonne héritée « %s » a un conflit de type" -#: commands/tablecmds.c:2565 commands/tablecmds.c:2588 commands/tablecmds.c:2605 commands/tablecmds.c:2861 commands/tablecmds.c:2891 commands/tablecmds.c:2905 parser/parse_coerce.c:2090 parser/parse_coerce.c:2110 parser/parse_coerce.c:2130 parser/parse_coerce.c:2150 parser/parse_coerce.c:2205 parser/parse_coerce.c:2238 parser/parse_coerce.c:2316 parser/parse_coerce.c:2348 parser/parse_coerce.c:2382 parser/parse_coerce.c:2402 parser/parse_param.c:227 +#: commands/tablecmds.c:2557 commands/tablecmds.c:2580 commands/tablecmds.c:2597 commands/tablecmds.c:2853 commands/tablecmds.c:2883 commands/tablecmds.c:2897 parser/parse_coerce.c:2090 parser/parse_coerce.c:2110 parser/parse_coerce.c:2130 parser/parse_coerce.c:2150 parser/parse_coerce.c:2205 parser/parse_coerce.c:2238 parser/parse_coerce.c:2316 parser/parse_coerce.c:2348 parser/parse_coerce.c:2382 parser/parse_coerce.c:2402 parser/parse_param.c:227 #, c-format msgid "%s versus %s" msgstr "%s versus %s" -#: commands/tablecmds.c:2574 +#: commands/tablecmds.c:2566 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "la colonne héritée « %s » a un conflit sur le collationnement" -#: commands/tablecmds.c:2576 commands/tablecmds.c:2873 commands/tablecmds.c:6503 +#: commands/tablecmds.c:2568 commands/tablecmds.c:2865 commands/tablecmds.c:6497 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "« %s » versus « %s »" -#: commands/tablecmds.c:2586 +#: commands/tablecmds.c:2578 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "la colonne héritée « %s » a un conflit de paramètre de stockage" -#: commands/tablecmds.c:2603 commands/tablecmds.c:2903 +#: commands/tablecmds.c:2595 commands/tablecmds.c:2895 #, c-format msgid "column \"%s\" has a compression method conflict" msgstr "la colonne « %s » a un conflit sur la méthode de compression" -#: commands/tablecmds.c:2618 +#: commands/tablecmds.c:2610 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "la colonne héritée « %s » a un conflit de génération" -#: commands/tablecmds.c:2712 commands/tablecmds.c:2767 commands/tablecmds.c:11784 parser/parse_utilcmd.c:1301 parser/parse_utilcmd.c:1344 parser/parse_utilcmd.c:1752 parser/parse_utilcmd.c:1860 +#: commands/tablecmds.c:2704 commands/tablecmds.c:2759 commands/tablecmds.c:11771 parser/parse_utilcmd.c:1291 parser/parse_utilcmd.c:1334 parser/parse_utilcmd.c:1742 parser/parse_utilcmd.c:1850 #, c-format msgid "cannot convert whole-row table reference" msgstr "ne peut pas convertir une référence de ligne complète de table" -#: commands/tablecmds.c:2713 parser/parse_utilcmd.c:1302 +#: commands/tablecmds.c:2705 parser/parse_utilcmd.c:1292 #, c-format msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." msgstr "L'expression de génération de la colonne « %s » contient une référence de ligne complète vers la table « %s »." -#: commands/tablecmds.c:2768 parser/parse_utilcmd.c:1345 +#: commands/tablecmds.c:2760 parser/parse_utilcmd.c:1335 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "La constrainte « %s » contient une référence de ligne complète vers la table « %s »." -#: commands/tablecmds.c:2847 +#: commands/tablecmds.c:2839 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "assemblage de la colonne « %s » avec une définition héritée" -#: commands/tablecmds.c:2851 +#: commands/tablecmds.c:2843 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "déplacement et assemblage de la colonne « %s » avec une définition héritée" -#: commands/tablecmds.c:2852 +#: commands/tablecmds.c:2844 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "Colonne utilisateur déplacée à la position de la colonne héritée." -#: commands/tablecmds.c:2859 +#: commands/tablecmds.c:2851 #, c-format msgid "column \"%s\" has a type conflict" msgstr "la colonne « %s » a un conflit de type" -#: commands/tablecmds.c:2871 +#: commands/tablecmds.c:2863 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "la colonne « %s » a un conflit sur le collationnement" -#: commands/tablecmds.c:2889 +#: commands/tablecmds.c:2881 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "la colonne « %s » a un conflit de paramètre de stockage" -#: commands/tablecmds.c:2930 +#: commands/tablecmds.c:2922 #, c-format msgid "child column \"%s\" specifies generation expression" msgstr "la colonne enfant « %s » précise une expression de génération" -#: commands/tablecmds.c:2932 +#: commands/tablecmds.c:2924 #, c-format msgid "Omit the generation expression in the definition of the child table column to inherit the generation expression from the parent table." msgstr "Omettre l'expression de génération dans la définition de la colonne de la table fille pour hériter de l'expression de génération de la table parent." -#: commands/tablecmds.c:2936 +#: commands/tablecmds.c:2928 #, c-format msgid "column \"%s\" inherits from generated column but specifies default" msgstr "la colonne « %s » hérite d'une colonne générée mais indique une valeur par défaut" -#: commands/tablecmds.c:2941 +#: commands/tablecmds.c:2933 #, c-format msgid "column \"%s\" inherits from generated column but specifies identity" msgstr "la colonne « %s » hérite d'une colonne générée mais précise une identité" -#: commands/tablecmds.c:3050 +#: commands/tablecmds.c:3042 #, c-format msgid "column \"%s\" inherits conflicting generation expressions" msgstr "la colonne « %s » hérite d'expressions de génération en conflit" -#: commands/tablecmds.c:3055 +#: commands/tablecmds.c:3047 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "la colonne « %s » hérite de valeurs par défaut conflictuelles" -#: commands/tablecmds.c:3057 +#: commands/tablecmds.c:3049 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Pour résoudre le conflit, spécifiez explicitement une valeur par défaut." -#: commands/tablecmds.c:3103 +#: commands/tablecmds.c:3095 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "" "le nom de la contrainte de vérification, « %s », apparaît plusieurs fois\n" "mais avec des expressions différentes" -#: commands/tablecmds.c:3316 +#: commands/tablecmds.c:3308 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "ne peut pas déplacer les tables temporaires d'autres sessions" -#: commands/tablecmds.c:3386 +#: commands/tablecmds.c:3378 #, c-format msgid "cannot rename column of typed table" msgstr "ne peut pas renommer une colonne d'une table typée" -#: commands/tablecmds.c:3405 +#: commands/tablecmds.c:3397 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni un type composite, ni un index, ni une table distante" -#: commands/tablecmds.c:3499 +#: commands/tablecmds.c:3491 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "la colonne héritée « %s » doit aussi être renommée pour les tables filles" -#: commands/tablecmds.c:3531 +#: commands/tablecmds.c:3523 #, c-format msgid "cannot rename system column \"%s\"" msgstr "ne peut pas renommer la colonne système « %s »" -#: commands/tablecmds.c:3546 +#: commands/tablecmds.c:3538 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "ne peut pas renommer la colonne héritée « %s »" -#: commands/tablecmds.c:3698 +#: commands/tablecmds.c:3690 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "la contrainte héritée « %s » doit aussi être renommée pour les tables enfants" -#: commands/tablecmds.c:3705 +#: commands/tablecmds.c:3697 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "ne peut pas renommer la colonne héritée « %s »" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3938 +#: commands/tablecmds.c:3930 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "" @@ -9222,1071 +9237,1071 @@ msgstr "" "des requêtes actives dans cette session" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3947 +#: commands/tablecmds.c:3939 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "ne peut pas exécuter %s « %s » car il reste des événements sur les triggers" -#: commands/tablecmds.c:4411 +#: commands/tablecmds.c:4403 #, c-format msgid "cannot alter partition \"%s\" with an incomplete detach" msgstr "ne peut pas modifier la partition « %s » avec un détachement incomplet" -#: commands/tablecmds.c:4413 +#: commands/tablecmds.c:4405 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." msgstr "Utiliser ALTER TABLE ... DETACH PARTITION ... FINALIZE pour terminer l'opération de détachement en attente." -#: commands/tablecmds.c:4605 commands/tablecmds.c:4620 +#: commands/tablecmds.c:4596 commands/tablecmds.c:4611 #, c-format msgid "cannot change persistence setting twice" msgstr "ne peut pas modifier la configuration de la persistence deux fois" -#: commands/tablecmds.c:5363 +#: commands/tablecmds.c:5354 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "ne peut pas ré-écrire la relation système « %s »" -#: commands/tablecmds.c:5369 +#: commands/tablecmds.c:5360 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "ne peut pas réécrire la table « %s » utilisée comme une table catalogue" -#: commands/tablecmds.c:5379 +#: commands/tablecmds.c:5370 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "ne peut pas ré-écrire les tables temporaires des autres sessions" -#: commands/tablecmds.c:5837 +#: commands/tablecmds.c:5831 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "la colonne « %s » de la table « %s » contient des valeurs NULL" -#: commands/tablecmds.c:5854 +#: commands/tablecmds.c:5848 #, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" msgstr "la contrainte de vérification « %s » de la relation « %s » est violée par une ligne" -#: commands/tablecmds.c:5873 partitioning/partbounds.c:3279 +#: commands/tablecmds.c:5867 partitioning/partbounds.c:3282 #, c-format msgid "updated partition constraint for default partition \"%s\" would be violated by some row" msgstr "la contrainte de partition mise à jour pour la partition par défaut « %s » serait transgressée par des lignes" -#: commands/tablecmds.c:5879 +#: commands/tablecmds.c:5873 #, c-format msgid "partition constraint of relation \"%s\" is violated by some row" msgstr "la contrainte de partition de la relation « %s » est violée par une ligne" -#: commands/tablecmds.c:6027 commands/trigger.c:1265 commands/trigger.c:1371 +#: commands/tablecmds.c:6021 commands/trigger.c:1265 commands/trigger.c:1371 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une table distante" -#: commands/tablecmds.c:6030 +#: commands/tablecmds.c:6024 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni une séquence, ni une table distante" -#: commands/tablecmds.c:6036 +#: commands/tablecmds.c:6030 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "« %s » n'est ni une table, ni une vue matérialisée, ni un index" -#: commands/tablecmds.c:6039 +#: commands/tablecmds.c:6033 #, c-format msgid "\"%s\" is not a table, materialized view, or foreign table" msgstr "« %s » n'est ni une table, ni une vue matérialisée, ni une table distante" -#: commands/tablecmds.c:6042 +#: commands/tablecmds.c:6036 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "« %s » n'est ni une table ni une table distante" -#: commands/tablecmds.c:6045 +#: commands/tablecmds.c:6039 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "« %s » n'est ni une table, ni un type composite, ni une table distante" -#: commands/tablecmds.c:6048 +#: commands/tablecmds.c:6042 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "« %s » n'est ni une table, ni une vue matérialisée, ni un index, ni une table distante" -#: commands/tablecmds.c:6058 +#: commands/tablecmds.c:6052 #, c-format msgid "\"%s\" is of the wrong type" msgstr "« %s » est du mauvais type" -#: commands/tablecmds.c:6261 commands/tablecmds.c:6268 +#: commands/tablecmds.c:6255 commands/tablecmds.c:6262 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "ne peux pas modifier le type « %s » car la colonne « %s.%s » l'utilise" -#: commands/tablecmds.c:6275 +#: commands/tablecmds.c:6269 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "" "ne peut pas modifier la table distante « %s » car la colonne « %s.%s » utilise\n" "son type de ligne" -#: commands/tablecmds.c:6282 +#: commands/tablecmds.c:6276 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "" "ne peut pas modifier la table « %s » car la colonne « %s.%s » utilise\n" "son type de ligne" -#: commands/tablecmds.c:6338 +#: commands/tablecmds.c:6332 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "ne peut pas modifier le type « %s » car il s'agit du type d'une table de type" -#: commands/tablecmds.c:6340 +#: commands/tablecmds.c:6334 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Utilisez ALTER ... CASCADE pour modifier aussi les tables de type." -#: commands/tablecmds.c:6386 +#: commands/tablecmds.c:6380 #, c-format msgid "type %s is not a composite type" msgstr "le type %s n'est pas un type composite" -#: commands/tablecmds.c:6413 +#: commands/tablecmds.c:6407 #, c-format msgid "cannot add column to typed table" msgstr "ne peut pas ajouter une colonne à une table typée" -#: commands/tablecmds.c:6466 +#: commands/tablecmds.c:6460 #, c-format msgid "cannot add column to a partition" msgstr "ne peut pas ajouter une colonne à une partition" -#: commands/tablecmds.c:6495 commands/tablecmds.c:14466 +#: commands/tablecmds.c:6489 commands/tablecmds.c:14437 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "la table fille « %s » a un type différent pour la colonne « %s »" -#: commands/tablecmds.c:6501 commands/tablecmds.c:14473 +#: commands/tablecmds.c:6495 commands/tablecmds.c:14444 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "la table fille « %s » a un collationnement différent pour la colonne « %s »" -#: commands/tablecmds.c:6515 +#: commands/tablecmds.c:6509 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "assemblage de la définition de la colonne « %s » pour le fils « %s »" -#: commands/tablecmds.c:6558 +#: commands/tablecmds.c:6552 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "ne peut pas ajouter récursivement la colonne identité à une table qui a des tables filles" -#: commands/tablecmds.c:6810 +#: commands/tablecmds.c:6795 #, c-format msgid "column must be added to child tables too" msgstr "la colonne doit aussi être ajoutée aux tables filles" -#: commands/tablecmds.c:6888 +#: commands/tablecmds.c:6873 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "la colonne « %s » de la relation « %s » existe déjà, poursuite du traitement" -#: commands/tablecmds.c:6895 +#: commands/tablecmds.c:6880 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "la colonne « %s » de la relation « %s » existe déjà" -#: commands/tablecmds.c:6961 commands/tablecmds.c:11422 +#: commands/tablecmds.c:6946 commands/tablecmds.c:11409 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "ne peut pas supprimer une contrainte uniquement d'une table partitionnée quand des partitions existent" -#: commands/tablecmds.c:6962 commands/tablecmds.c:7266 commands/tablecmds.c:8287 commands/tablecmds.c:11423 +#: commands/tablecmds.c:6947 commands/tablecmds.c:7251 commands/tablecmds.c:8274 commands/tablecmds.c:11410 #, c-format msgid "Do not specify the ONLY keyword." msgstr "Ne spécifiez pas le mot clé ONLY." -#: commands/tablecmds.c:6999 commands/tablecmds.c:7192 commands/tablecmds.c:7334 commands/tablecmds.c:7448 commands/tablecmds.c:7542 commands/tablecmds.c:7601 commands/tablecmds.c:7719 commands/tablecmds.c:7885 commands/tablecmds.c:7955 commands/tablecmds.c:8110 commands/tablecmds.c:11577 commands/tablecmds.c:13078 commands/tablecmds.c:15640 +#: commands/tablecmds.c:6984 commands/tablecmds.c:7177 commands/tablecmds.c:7319 commands/tablecmds.c:7433 commands/tablecmds.c:7527 commands/tablecmds.c:7586 commands/tablecmds.c:7704 commands/tablecmds.c:7870 commands/tablecmds.c:7940 commands/tablecmds.c:8096 commands/tablecmds.c:11564 commands/tablecmds.c:13049 commands/tablecmds.c:15610 #, c-format msgid "cannot alter system column \"%s\"" msgstr "n'a pas pu modifier la colonne système « %s »" -#: commands/tablecmds.c:7005 commands/tablecmds.c:7340 +#: commands/tablecmds.c:6990 commands/tablecmds.c:7325 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne d'identité" -#: commands/tablecmds.c:7041 +#: commands/tablecmds.c:7026 #, c-format msgid "column \"%s\" is in a primary key" msgstr "la colonne « %s » est dans une clé primaire" -#: commands/tablecmds.c:7063 +#: commands/tablecmds.c:7048 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "la colonne « %s » est marquée NOT NULL dans la table parent" -#: commands/tablecmds.c:7263 commands/tablecmds.c:8770 +#: commands/tablecmds.c:7248 commands/tablecmds.c:8757 #, c-format msgid "constraint must be added to child tables too" msgstr "la contrainte doit aussi être ajoutée aux tables filles" -#: commands/tablecmds.c:7264 +#: commands/tablecmds.c:7249 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "la colonne « %s » de la relation « %s » n'est pas déjà NOT NULL." -#: commands/tablecmds.c:7342 +#: commands/tablecmds.c:7327 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Utilisez à la place ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY." -#: commands/tablecmds.c:7347 +#: commands/tablecmds.c:7332 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "la colonne « %s » de la relation « %s » est une colonne générée" -#: commands/tablecmds.c:7350 +#: commands/tablecmds.c:7335 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." msgstr "Utilisez à la place ALTER TABLE ... ALTER COLUMN ... DROP EXTENSION." -#: commands/tablecmds.c:7459 +#: commands/tablecmds.c:7444 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "la colonne « %s » de la relation « %s » doit être déclarée NOT NULL avant que la colonne identité puisse être ajoutée" -#: commands/tablecmds.c:7465 +#: commands/tablecmds.c:7450 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "la colonne « %s » de la relation « %s » est déjà une colonne d'identité" -#: commands/tablecmds.c:7471 +#: commands/tablecmds.c:7456 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "la colonne « %s » de la relation « %s » a déjà une valeur par défaut" -#: commands/tablecmds.c:7548 commands/tablecmds.c:7609 +#: commands/tablecmds.c:7533 commands/tablecmds.c:7594 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne d'identité" -#: commands/tablecmds.c:7614 +#: commands/tablecmds.c:7599 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne d'identité, poursuite du traitement" -#: commands/tablecmds.c:7667 +#: commands/tablecmds.c:7652 #, c-format msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" msgstr "ALTER TABLE / DROP EXPRESSION doit aussi être appliqué aux tables filles" -#: commands/tablecmds.c:7689 +#: commands/tablecmds.c:7674 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "ne peut pas supprimer l'expression de génération à partir d'une colonne héritée" -#: commands/tablecmds.c:7727 +#: commands/tablecmds.c:7712 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne générée stockée" -#: commands/tablecmds.c:7732 +#: commands/tablecmds.c:7717 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne générée stockée, ignoré" -#: commands/tablecmds.c:7832 +#: commands/tablecmds.c:7817 #, c-format msgid "cannot refer to non-index column by number" msgstr "impossible de référence une colonne non liée à une table par un nombre" -#: commands/tablecmds.c:7875 +#: commands/tablecmds.c:7860 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "la colonne numéro %d de la relation « %s » n'existe pas" -#: commands/tablecmds.c:7894 +#: commands/tablecmds.c:7879 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "ne peut modifier les statistiques sur la colonne incluse « %s » de l'index « %s »" -#: commands/tablecmds.c:7899 +#: commands/tablecmds.c:7884 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "ne peut modifier les statistiques sur la colonne « %s » de l'index « %s », qui n'est pas une expression" -#: commands/tablecmds.c:7901 +#: commands/tablecmds.c:7886 #, c-format msgid "Alter statistics on table column instead." msgstr "Modifie les statistiques sur la colonne de la table à la place." -#: commands/tablecmds.c:8090 +#: commands/tablecmds.c:8076 #, c-format msgid "invalid storage type \"%s\"" msgstr "type de stockage « %s » invalide" -#: commands/tablecmds.c:8122 +#: commands/tablecmds.c:8108 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "le type de données %s de la colonne peut seulement avoir un stockage PLAIN" -#: commands/tablecmds.c:8166 +#: commands/tablecmds.c:8153 #, c-format msgid "cannot drop column from typed table" msgstr "ne peut pas supprimer une colonne à une table typée" -#: commands/tablecmds.c:8225 +#: commands/tablecmds.c:8212 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "la colonne « %s » de la relation « %s » n'existe pas, ignore" -#: commands/tablecmds.c:8238 +#: commands/tablecmds.c:8225 #, c-format msgid "cannot drop system column \"%s\"" msgstr "ne peut pas supprimer la colonne système « %s »" -#: commands/tablecmds.c:8248 +#: commands/tablecmds.c:8235 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "ne peut pas supprimer la colonne héritée « %s »" -#: commands/tablecmds.c:8261 +#: commands/tablecmds.c:8248 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "ne peut supprimer la colonne « %s » car elle fait partie de la clé de partitionnement de la relation « %s »" -#: commands/tablecmds.c:8286 +#: commands/tablecmds.c:8273 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "ne peut pas supprimer une colonne sur une seule partition quand plusieurs partitions existent" -#: commands/tablecmds.c:8490 +#: commands/tablecmds.c:8477 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX n'est pas supporté sur les tables partitionnées" -#: commands/tablecmds.c:8515 +#: commands/tablecmds.c:8502 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX renommera l'index « %s » en « %s »" -#: commands/tablecmds.c:8850 +#: commands/tablecmds.c:8837 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "ne peut pas utiliser ONLY pour une clé étrangère sur la table partitionnée « %s » référençant la relation « %s »" -#: commands/tablecmds.c:8856 +#: commands/tablecmds.c:8843 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "ne peut pas ajouter de clé étrangère NOT VALID sur la table partitionnée « %s » référençant la relation « %s »" -#: commands/tablecmds.c:8859 +#: commands/tablecmds.c:8846 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Cette fonctionnalité n'est pas encore implémentée sur les tables partitionnées." -#: commands/tablecmds.c:8866 commands/tablecmds.c:9271 +#: commands/tablecmds.c:8853 commands/tablecmds.c:9258 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "la relation référencée « %s » n'est pas une table" -#: commands/tablecmds.c:8889 +#: commands/tablecmds.c:8876 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "les contraintes sur les tables permanentes peuvent seulement référencer des tables permanentes" -#: commands/tablecmds.c:8896 +#: commands/tablecmds.c:8883 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "les contraintes sur les tables non tracées peuvent seulement référencer des tables permanentes ou non tracées" -#: commands/tablecmds.c:8902 +#: commands/tablecmds.c:8889 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "" -"les constraintes sur des tables temporaires ne peuvent référencer que des\n" +"les contraintes sur des tables temporaires ne peuvent référencer que des\n" "tables temporaires" -#: commands/tablecmds.c:8906 +#: commands/tablecmds.c:8893 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "" "les contraintes sur des tables temporaires doivent référencer les tables\n" "temporaires de cette session" -#: commands/tablecmds.c:8972 commands/tablecmds.c:8978 +#: commands/tablecmds.c:8959 commands/tablecmds.c:8965 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "action %s invalide pour une clé étrangère contenant une colonne générée" -#: commands/tablecmds.c:8994 +#: commands/tablecmds.c:8981 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "nombre de colonnes de référence et référencées pour la clé étrangère en désaccord" -#: commands/tablecmds.c:9101 +#: commands/tablecmds.c:9088 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "la contrainte de clé étrangère « %s » ne peut pas être implémentée" -#: commands/tablecmds.c:9103 +#: commands/tablecmds.c:9090 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Les colonnes clés « %s » et « %s » sont de types incompatibles : %s et %s." -#: commands/tablecmds.c:9466 commands/tablecmds.c:9859 parser/parse_utilcmd.c:796 parser/parse_utilcmd.c:925 +#: commands/tablecmds.c:9453 commands/tablecmds.c:9846 parser/parse_utilcmd.c:786 parser/parse_utilcmd.c:915 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "les clés étrangères ne sont pas supportées par les tables distantes" -#: commands/tablecmds.c:10226 commands/tablecmds.c:10504 commands/tablecmds.c:11379 commands/tablecmds.c:11454 +#: commands/tablecmds.c:10213 commands/tablecmds.c:10491 commands/tablecmds.c:11366 commands/tablecmds.c:11441 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "la contrainte « %s » de la relation « %s » n'existe pas" -#: commands/tablecmds.c:10233 +#: commands/tablecmds.c:10220 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "la contrainte « %s » de la relation « %s » n'est pas une clé étrangère" -#: commands/tablecmds.c:10271 +#: commands/tablecmds.c:10258 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "ne peut pas modifier la contrainte « %s » de la relation « %s »" -#: commands/tablecmds.c:10274 +#: commands/tablecmds.c:10261 #, c-format msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "La contrainte « %s » est dérivée de la contrainte « %s » de la relation « %s »" -#: commands/tablecmds.c:10276 +#: commands/tablecmds.c:10263 #, c-format msgid "You may alter the constraint it derives from, instead." msgstr "Vous pouvez modifier la contrainte dont elle dérive à la place." -#: commands/tablecmds.c:10512 +#: commands/tablecmds.c:10499 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "la contrainte « %s » de la relation « %s » n'est pas une clé étrangère ou une contrainte de vérification" -#: commands/tablecmds.c:10590 +#: commands/tablecmds.c:10577 #, c-format msgid "constraint must be validated on child tables too" -msgstr "la contrainte doit aussi être validées sur les tables enfants" +msgstr "la contrainte doit aussi être validée sur les tables enfants" -#: commands/tablecmds.c:10674 +#: commands/tablecmds.c:10661 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "la colonne « %s » référencée dans la contrainte de clé étrangère n'existe pas" -#: commands/tablecmds.c:10679 +#: commands/tablecmds.c:10666 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "ne peut pas avoir plus de %d clés dans une clé étrangère" -#: commands/tablecmds.c:10744 +#: commands/tablecmds.c:10731 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "ne peut pas utiliser une clé primaire déferrable pour la table « %s » référencée" -#: commands/tablecmds.c:10761 +#: commands/tablecmds.c:10748 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "il n'y a pas de clé primaire pour la table « %s » référencée" -#: commands/tablecmds.c:10826 +#: commands/tablecmds.c:10813 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "la liste de colonnes référencées dans la clé étrangère ne doit pas contenir de duplicats" -#: commands/tablecmds.c:10920 +#: commands/tablecmds.c:10907 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "" "ne peut pas utiliser une contrainte unique déferrable pour la table\n" "référencée « %s »" -#: commands/tablecmds.c:10925 +#: commands/tablecmds.c:10912 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "il n'existe aucune contrainte unique correspondant aux clés données pour la table « %s » référencée" -#: commands/tablecmds.c:11335 +#: commands/tablecmds.c:11322 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "ne peut pas supprimer la contrainte héritée « %s » de la relation « %s »" -#: commands/tablecmds.c:11385 +#: commands/tablecmds.c:11372 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "la contrainte « %s » de la relation « %s » n'existe pas, ignore" -#: commands/tablecmds.c:11561 +#: commands/tablecmds.c:11548 #, c-format msgid "cannot alter column type of typed table" msgstr "ne peut pas modifier le type d'une colonne appartenant à une table typée" -#: commands/tablecmds.c:11588 +#: commands/tablecmds.c:11575 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "ne peut pas modifier la colonne héritée « %s »" -#: commands/tablecmds.c:11597 +#: commands/tablecmds.c:11584 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "ne peut pas modifier la colonne « %s » car elle fait partie de la clé de partitionnement de la relation « %s »" -#: commands/tablecmds.c:11647 +#: commands/tablecmds.c:11634 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "le résultat de la clause USING pour la colonne « %s » ne peut pas être converti automatiquement vers le type %s" -#: commands/tablecmds.c:11650 +#: commands/tablecmds.c:11637 #, c-format msgid "You might need to add an explicit cast." msgstr "Vous pouvez avoir besoin d'ajouter une conversion explicite." -#: commands/tablecmds.c:11654 +#: commands/tablecmds.c:11641 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "la colonne « %s » ne peut pas être convertie vers le type %s" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:11657 +#: commands/tablecmds.c:11644 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Vous pouvez avoir besoin de spécifier \"USING %s::%s\"." -#: commands/tablecmds.c:11757 +#: commands/tablecmds.c:11744 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "ne peut pas modifier la colonne héritée « %s » de la relation « %s »" -#: commands/tablecmds.c:11785 +#: commands/tablecmds.c:11772 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "l'expression USING contient une référence de table de ligne complète." -#: commands/tablecmds.c:11796 +#: commands/tablecmds.c:11783 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "le type de colonne héritée « %s » doit aussi être renommée pour les tables filles" -#: commands/tablecmds.c:11921 +#: commands/tablecmds.c:11908 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "ne peut pas modifier la colonne « %s » deux fois" -#: commands/tablecmds.c:11959 +#: commands/tablecmds.c:11946 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "l'expression de génération de la colonne « %s » ne peut pas être convertie vers le type %s automatiquement" -#: commands/tablecmds.c:11964 +#: commands/tablecmds.c:11951 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "" "la valeur par défaut de la colonne « %s » ne peut pas être convertie vers le\n" "type %s automatiquement" -#: commands/tablecmds.c:12042 +#: commands/tablecmds.c:12029 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "ne peut pas modifier le type d'une colonne utilisée dans colonne générée" -#: commands/tablecmds.c:12043 +#: commands/tablecmds.c:12030 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "La colonne « %s » est utilisée par la colonne générée « %s »" -#: commands/tablecmds.c:12064 +#: commands/tablecmds.c:12051 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "ne peut pas modifier le type d'une colonne utilisée dans une vue ou une règle" -#: commands/tablecmds.c:12065 commands/tablecmds.c:12084 commands/tablecmds.c:12102 +#: commands/tablecmds.c:12052 commands/tablecmds.c:12071 commands/tablecmds.c:12089 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s dépend de la colonne « %s »" -#: commands/tablecmds.c:12083 +#: commands/tablecmds.c:12070 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "ne peut pas modifier le type d'une colonne utilisée dans la définition d'un trigger" -#: commands/tablecmds.c:12101 +#: commands/tablecmds.c:12088 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "ne peut pas modifier le type d'une colonne utilisée dans la définition d'une politique" -#: commands/tablecmds.c:13186 commands/tablecmds.c:13198 +#: commands/tablecmds.c:13157 commands/tablecmds.c:13169 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "ne peut pas modifier le propriétaire de l'index « %s »" -#: commands/tablecmds.c:13188 commands/tablecmds.c:13200 +#: commands/tablecmds.c:13159 commands/tablecmds.c:13171 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Modifier à la place le propriétaire de la table concernée par l'index." -#: commands/tablecmds.c:13214 +#: commands/tablecmds.c:13185 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "ne peut pas modifier le propriétaire de la séquence « %s »" -#: commands/tablecmds.c:13228 commands/tablecmds.c:16535 +#: commands/tablecmds.c:13199 commands/tablecmds.c:16502 #, c-format msgid "Use ALTER TYPE instead." msgstr "Utilisez ALTER TYPE à la place." -#: commands/tablecmds.c:13237 +#: commands/tablecmds.c:13208 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une séquence, ni une table distante" -#: commands/tablecmds.c:13576 +#: commands/tablecmds.c:13547 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "ne peut pas avoir de nombreuses sous-commandes SET TABLESPACE" -#: commands/tablecmds.c:13653 +#: commands/tablecmds.c:13624 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni un index, ni une table TOAST" -#: commands/tablecmds.c:13686 commands/view.c:494 +#: commands/tablecmds.c:13657 commands/view.c:491 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION est uniquement accepté pour les vues dont la mise à jour est automatique" -#: commands/tablecmds.c:13938 +#: commands/tablecmds.c:13909 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "seuls les tables, index et vues matérialisées existent dans les tablespaces" -#: commands/tablecmds.c:13950 +#: commands/tablecmds.c:13921 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "ne peut pas déplacer les relations dans ou à partir du tablespace pg_global" -#: commands/tablecmds.c:14042 +#: commands/tablecmds.c:14013 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "annulation car le verrou sur la relation « %s.%s » n'est pas disponible" -#: commands/tablecmds.c:14058 +#: commands/tablecmds.c:14029 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "aucune relation correspondante trouvée dans le tablespace « %s »" -#: commands/tablecmds.c:14174 +#: commands/tablecmds.c:14145 #, c-format msgid "cannot change inheritance of typed table" msgstr "ne peut pas modifier l'héritage d'une table typée" -#: commands/tablecmds.c:14179 commands/tablecmds.c:14735 +#: commands/tablecmds.c:14150 commands/tablecmds.c:14706 #, c-format msgid "cannot change inheritance of a partition" msgstr "ne peut pas modifier l'héritage d'une partition" -#: commands/tablecmds.c:14184 +#: commands/tablecmds.c:14155 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "ne peut pas modifier l'héritage d'une table partitionnée" -#: commands/tablecmds.c:14230 +#: commands/tablecmds.c:14201 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "ne peut pas hériter à partir d'une relation temporaire d'une autre session" -#: commands/tablecmds.c:14243 +#: commands/tablecmds.c:14214 #, c-format msgid "cannot inherit from a partition" msgstr "ne peut pas hériter d'une partition" -#: commands/tablecmds.c:14265 commands/tablecmds.c:17179 +#: commands/tablecmds.c:14236 commands/tablecmds.c:17146 #, c-format msgid "circular inheritance not allowed" msgstr "héritage circulaire interdit" -#: commands/tablecmds.c:14266 commands/tablecmds.c:17180 +#: commands/tablecmds.c:14237 commands/tablecmds.c:17147 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "« %s » est déjà un enfant de « %s »." -#: commands/tablecmds.c:14279 +#: commands/tablecmds.c:14250 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "le trigger « %s » empêche la table « %s » de devenir une fille dans l'héritage" -#: commands/tablecmds.c:14281 +#: commands/tablecmds.c:14252 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "les triggers ROW avec des tables de transition ne sont pas supportés dans les hiérarchies d'héritage." -#: commands/tablecmds.c:14484 +#: commands/tablecmds.c:14455 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "la colonne « %s » de la table enfant doit être marquée comme NOT NULL" -#: commands/tablecmds.c:14493 +#: commands/tablecmds.c:14464 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "la colonne « %s » de la table enfant doit être une colonne générée" -#: commands/tablecmds.c:14543 +#: commands/tablecmds.c:14514 #, c-format msgid "column \"%s\" in child table has a conflicting generation expression" msgstr "la colonne « %s » de la table enfant a une expression de génération en conflit" -#: commands/tablecmds.c:14571 +#: commands/tablecmds.c:14542 #, c-format msgid "child table is missing column \"%s\"" msgstr "la table enfant n'a pas de colonne « %s »" -#: commands/tablecmds.c:14659 +#: commands/tablecmds.c:14630 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "la table fille « %s » a un type différent pour la contrainte de vérification « %s »" -#: commands/tablecmds.c:14667 +#: commands/tablecmds.c:14638 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte non héritée sur la table fille « %s »" -#: commands/tablecmds.c:14678 +#: commands/tablecmds.c:14649 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte NOT VALID sur la table fille « %s »" -#: commands/tablecmds.c:14713 +#: commands/tablecmds.c:14684 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "la table enfant n'a pas de contrainte « %s »" -#: commands/tablecmds.c:14801 +#: commands/tablecmds.c:14772 #, c-format msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "la partition « %s » déjà en attente de détachement de la table partitionnée « %s.%s »" -#: commands/tablecmds.c:14805 +#: commands/tablecmds.c:14776 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the detach operation." msgstr "Utiliser ALTER TABLE ... DETACH PARTITION ... FINALIZE pour terminer l'opération de détachement." -#: commands/tablecmds.c:14830 commands/tablecmds.c:14878 +#: commands/tablecmds.c:14801 commands/tablecmds.c:14849 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "la relation « %s » n'est pas une partition de la relation « %s »" -#: commands/tablecmds.c:14884 +#: commands/tablecmds.c:14855 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "la relation « %s » n'est pas un parent de la relation « %s »" -#: commands/tablecmds.c:15112 +#: commands/tablecmds.c:15083 #, c-format msgid "typed tables cannot inherit" msgstr "les tables avec type ne peuvent pas hériter d'autres tables" -#: commands/tablecmds.c:15142 +#: commands/tablecmds.c:15113 #, c-format msgid "table is missing column \"%s\"" msgstr "la colonne « %s » manque à la table" -#: commands/tablecmds.c:15153 +#: commands/tablecmds.c:15124 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "la table a une colonne « %s » alors que le type impose « %s »" -#: commands/tablecmds.c:15162 +#: commands/tablecmds.c:15133 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "la table « %s » a un type différent pour la colonne « %s »" -#: commands/tablecmds.c:15176 +#: commands/tablecmds.c:15147 #, c-format msgid "table has extra column \"%s\"" msgstr "la table a une colonne supplémentaire « %s »" -#: commands/tablecmds.c:15228 +#: commands/tablecmds.c:15199 #, c-format msgid "\"%s\" is not a typed table" msgstr "« %s » n'est pas une table typée" -#: commands/tablecmds.c:15410 +#: commands/tablecmds.c:15381 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index non unique « %s » comme identité de réplicat" -#: commands/tablecmds.c:15416 +#: commands/tablecmds.c:15387 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index « %s » immédiat comme identité de réplicat" -#: commands/tablecmds.c:15422 +#: commands/tablecmds.c:15393 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "ne peut pas utiliser un index par expression « %s » comme identité de réplicat" -#: commands/tablecmds.c:15428 +#: commands/tablecmds.c:15399 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index partiel « %s » comme identité de réplicat" -#: commands/tablecmds.c:15434 +#: commands/tablecmds.c:15405 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index invalide « %s » comme identité de réplicat" -#: commands/tablecmds.c:15451 +#: commands/tablecmds.c:15422 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "l'index « %s » ne peut pas être utilisé comme identité de réplicat car la colonne %d est une colonne système" -#: commands/tablecmds.c:15458 +#: commands/tablecmds.c:15429 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "l'index « %s » ne peut pas être utilisé comme identité de réplicat car la colonne « %s » peut être NULL" -#: commands/tablecmds.c:15648 commands/tablecmds.c:18632 -#, c-format -msgid "column data type %s does not support compression" -msgstr "le type de données %s ne supporte pas la compression" - -#: commands/tablecmds.c:15709 +#: commands/tablecmds.c:15676 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "ne peut pas modifier le statut de journalisation de la table « %s » parce qu'elle est temporaire" -#: commands/tablecmds.c:15733 +#: commands/tablecmds.c:15700 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "ne peut pas modifier la table « %s » en non journalisée car elle fait partie d'une publication" -#: commands/tablecmds.c:15735 +#: commands/tablecmds.c:15702 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Les relations non journalisées ne peuvent pas être répliquées." -#: commands/tablecmds.c:15780 +#: commands/tablecmds.c:15747 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "n'a pas pu passer la table « %s » en journalisé car elle référence la table non journalisée « %s »" -#: commands/tablecmds.c:15790 +#: commands/tablecmds.c:15757 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "n'a pas pu passer la table « %s » en non journalisé car elle référence la table journalisée « %s »" -#: commands/tablecmds.c:15848 +#: commands/tablecmds.c:15815 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "ne peut pas déplacer une séquence OWNED BY dans un autre schéma" -#: commands/tablecmds.c:15955 +#: commands/tablecmds.c:15922 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "la relation « %s » existe déjà dans le schéma « %s »" -#: commands/tablecmds.c:16518 +#: commands/tablecmds.c:16485 #, c-format msgid "\"%s\" is not a composite type" msgstr "« %s » n'est pas un type composite" -#: commands/tablecmds.c:16550 +#: commands/tablecmds.c:16517 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni une séquence, ni une table distante" -#: commands/tablecmds.c:16585 +#: commands/tablecmds.c:16552 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "stratégie de partitionnement « %s » non reconnue" -#: commands/tablecmds.c:16593 +#: commands/tablecmds.c:16560 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "ne peut pas utiliser la stratégie de partitionnement « list » avec plus d'une colonne" -#: commands/tablecmds.c:16659 +#: commands/tablecmds.c:16626 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "la colonne « %s » nommée dans la clé de partitionnement n'existe pas" -#: commands/tablecmds.c:16667 +#: commands/tablecmds.c:16634 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "ne peut pas utiliser la colonne système « %s » comme clé de partitionnement" -#: commands/tablecmds.c:16678 commands/tablecmds.c:16792 +#: commands/tablecmds.c:16645 commands/tablecmds.c:16759 #, c-format msgid "cannot use generated column in partition key" msgstr "ne peut pas utiliser une colonne générée dans une clé de partitionnement" -#: commands/tablecmds.c:16679 commands/tablecmds.c:16793 commands/trigger.c:635 rewrite/rewriteHandler.c:884 rewrite/rewriteHandler.c:919 +#: commands/tablecmds.c:16646 commands/tablecmds.c:16760 commands/trigger.c:635 rewrite/rewriteHandler.c:884 rewrite/rewriteHandler.c:919 #, c-format msgid "Column \"%s\" is a generated column." msgstr "la colonne « %s » est une colonne générée." -#: commands/tablecmds.c:16755 +#: commands/tablecmds.c:16722 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "" "les fonctions dans une expression de clé de partitionnement doivent être marquées comme\n" "IMMUTABLE" -#: commands/tablecmds.c:16775 +#: commands/tablecmds.c:16742 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "les expressions de la clé de partitionnement ne peuvent pas contenir des références aux colonnes systèmes" -#: commands/tablecmds.c:16805 +#: commands/tablecmds.c:16772 #, c-format msgid "cannot use constant expression as partition key" msgstr "ne peut pas utiliser une expression constante comme clé de partitionnement" -#: commands/tablecmds.c:16826 +#: commands/tablecmds.c:16793 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "n'a pas pu déterminer le collationnement à utiliser pour l'expression de partitionnement" -#: commands/tablecmds.c:16861 +#: commands/tablecmds.c:16828 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "" "Vous devez spécifier une classe d'opérateur hash ou définir une\n" "classe d'opérateur hash par défaut pour le type de données." -#: commands/tablecmds.c:16867 +#: commands/tablecmds.c:16834 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "" "Vous devez spécifier une classe d'opérateur btree ou définir une\n" "classe d'opérateur btree par défaut pour le type de données." -#: commands/tablecmds.c:17119 +#: commands/tablecmds.c:17086 #, c-format msgid "\"%s\" is already a partition" msgstr "« %s » est déjà une partition" -#: commands/tablecmds.c:17125 +#: commands/tablecmds.c:17092 #, c-format msgid "cannot attach a typed table as partition" msgstr "ne peut pas attacher une table typée à une partition" -#: commands/tablecmds.c:17141 +#: commands/tablecmds.c:17108 #, c-format msgid "cannot attach inheritance child as partition" msgstr "ne peut pas ajouter la table en héritage comme une partition" -#: commands/tablecmds.c:17155 +#: commands/tablecmds.c:17122 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "ne peut pas attacher le parent d'héritage comme partition" -#: commands/tablecmds.c:17189 +#: commands/tablecmds.c:17156 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "ne peut pas attacher une relation temporaire comme partition de la relation permanente « %s »" -#: commands/tablecmds.c:17197 +#: commands/tablecmds.c:17164 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "ne peut pas attacher une relation permanente comme partition de la relation temporaire « %s »" -#: commands/tablecmds.c:17205 +#: commands/tablecmds.c:17172 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "ne peut pas attacher comme partition d'une relation temporaire d'une autre session" -#: commands/tablecmds.c:17212 +#: commands/tablecmds.c:17179 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "ne peut pas attacher une relation temporaire d'une autre session comme partition" -#: commands/tablecmds.c:17232 +#: commands/tablecmds.c:17199 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "la table « %s » contient la colonne « %s » introuvable dans le parent « %s »" -#: commands/tablecmds.c:17235 +#: commands/tablecmds.c:17202 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "La nouvelle partition pourrait seulement contenir les colonnes présentes dans le parent." -#: commands/tablecmds.c:17247 +#: commands/tablecmds.c:17214 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "le trigger « %s » empêche la table « %s » de devenir une partition" -#: commands/tablecmds.c:17249 commands/trigger.c:441 +#: commands/tablecmds.c:17216 commands/trigger.c:441 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "les triggers ROW avec des tables de transition ne sont pas supportés sur les partitions" -#: commands/tablecmds.c:17412 +#: commands/tablecmds.c:17379 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "ne peut pas attacher la table distante « %s » comme partition de la table partitionnée « %s »" -#: commands/tablecmds.c:17415 +#: commands/tablecmds.c:17382 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "La table partitionnée « %s » contient des index uniques." -#: commands/tablecmds.c:17735 +#: commands/tablecmds.c:17702 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "ne peut pas détacher les partitions en parallèle quand une partition par défaut existe" -#: commands/tablecmds.c:17844 +#: commands/tablecmds.c:17811 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "la table partitionnée « %s » a été supprimée de manière concurrente" -#: commands/tablecmds.c:17850 +#: commands/tablecmds.c:17817 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "la partition « %s » a été supprimée de façon concurrente" -#: commands/tablecmds.c:18304 commands/tablecmds.c:18324 commands/tablecmds.c:18344 commands/tablecmds.c:18363 commands/tablecmds.c:18405 +#: commands/tablecmds.c:18271 commands/tablecmds.c:18291 commands/tablecmds.c:18311 commands/tablecmds.c:18330 commands/tablecmds.c:18372 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "ne peut pas attacher l'index « %s » comme une partition de l'index « %s »" -#: commands/tablecmds.c:18307 +#: commands/tablecmds.c:18274 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "L'index « %s » est déjà attaché à un autre index." -#: commands/tablecmds.c:18327 +#: commands/tablecmds.c:18294 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "L'index « %s » n'est un index sur aucune des partitions de la table « %s »." -#: commands/tablecmds.c:18347 +#: commands/tablecmds.c:18314 #, c-format msgid "The index definitions do not match." msgstr "La définition de l'index correspond pas." -#: commands/tablecmds.c:18366 +#: commands/tablecmds.c:18333 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "L'index « %s » appartient à une contrainte dans la table « %s » mais aucune contrainte n'existe pour l'index « %s »." -#: commands/tablecmds.c:18408 +#: commands/tablecmds.c:18375 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "Un autre index est déjà attaché pour la partition « %s »." -#: commands/tablecmds.c:18644 +#: commands/tablecmds.c:18605 +#, c-format +msgid "column data type %s does not support compression" +msgstr "le type de données %s ne supporte pas la compression" + +#: commands/tablecmds.c:18612 #, c-format msgid "invalid compression method \"%s\"" msgstr "méthode de compression « %s » invalide" -#: commands/tablespace.c:162 commands/tablespace.c:179 commands/tablespace.c:190 commands/tablespace.c:198 commands/tablespace.c:650 replication/slot.c:1409 storage/file/copydir.c:47 +#: commands/tablespace.c:162 commands/tablespace.c:179 commands/tablespace.c:190 commands/tablespace.c:198 commands/tablespace.c:650 replication/slot.c:1451 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "n'a pas pu créer le répertoire « %s » : %m" @@ -10638,22 +10653,22 @@ msgstr "le déplacement de la ligne vers une autre partition par un trigger BEFO msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "Avant d'exécuter le trigger « %s », la ligne devait aller dans la partition « %s.%s »." -#: commands/trigger.c:3043 executor/nodeModifyTable.c:1799 executor/nodeModifyTable.c:1881 +#: commands/trigger.c:3043 executor/nodeModifyTable.c:1822 executor/nodeModifyTable.c:1904 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "la ligne à mettre à jour était déjà modifiée par une opération déclenchée par la commande courante" -#: commands/trigger.c:3044 executor/nodeModifyTable.c:1187 executor/nodeModifyTable.c:1261 executor/nodeModifyTable.c:1800 executor/nodeModifyTable.c:1882 +#: commands/trigger.c:3044 executor/nodeModifyTable.c:1204 executor/nodeModifyTable.c:1278 executor/nodeModifyTable.c:1823 executor/nodeModifyTable.c:1905 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Considérez l'utilisation d'un trigger AFTER au lieu d'un trigger BEFORE pour propager les changements sur les autres lignes." -#: commands/trigger.c:3073 executor/nodeLockRows.c:225 executor/nodeLockRows.c:234 executor/nodeModifyTable.c:228 executor/nodeModifyTable.c:1203 executor/nodeModifyTable.c:1817 executor/nodeModifyTable.c:2047 +#: commands/trigger.c:3073 executor/nodeLockRows.c:229 executor/nodeLockRows.c:238 executor/nodeModifyTable.c:228 executor/nodeModifyTable.c:1220 executor/nodeModifyTable.c:1840 executor/nodeModifyTable.c:2070 #, c-format msgid "could not serialize access due to concurrent update" msgstr "n'a pas pu sérialiser un accès à cause d'une mise à jour en parallèle" -#: commands/trigger.c:3081 executor/nodeModifyTable.c:1293 executor/nodeModifyTable.c:1899 executor/nodeModifyTable.c:2071 +#: commands/trigger.c:3081 executor/nodeModifyTable.c:1310 executor/nodeModifyTable.c:1922 executor/nodeModifyTable.c:2094 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "n'a pas pu sérialiser un accès à cause d'une suppression en parallèle" @@ -10663,12 +10678,12 @@ msgstr "n'a pas pu sérialiser un accès à cause d'une suppression en parallèl msgid "cannot fire deferred trigger within security-restricted operation" msgstr "ne peut pas déclencher un trigger déferré à l'intérieur d'une opération restreinte pour sécurité" -#: commands/trigger.c:5183 +#: commands/trigger.c:5185 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "la contrainte « %s » n'est pas DEFERRABLE" -#: commands/trigger.c:5206 +#: commands/trigger.c:5208 #, c-format msgid "constraint \"%s\" does not exist" msgstr "la contrainte « %s » n'existe pas" @@ -11147,7 +11162,7 @@ msgstr "doit être super-utilisateur pour créer des utilisateurs avec l'attribu msgid "permission denied to create role" msgstr "droit refusé pour créer un rôle" -#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15281 gram.y:15326 utils/adt/acl.c:5248 utils/adt/acl.c:5254 +#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15259 gram.y:15304 utils/adt/acl.c:5248 utils/adt/acl.c:5254 #, c-format msgid "role name \"%s\" is reserved" msgstr "le nom du rôle « %s » est réservé" @@ -11322,110 +11337,110 @@ msgstr "le rôle « %s » n'est pas un membre du rôle « %s »" msgid "unrecognized ANALYZE option \"%s\"" msgstr "option d'ANALYZE « %s » non reconnue" -#: commands/vacuum.c:156 +#: commands/vacuum.c:170 #, c-format msgid "parallel option requires a value between 0 and %d" msgstr "l'option parallel nécessite une valeur comprise entre 0 et %d" -#: commands/vacuum.c:168 +#: commands/vacuum.c:182 #, c-format -msgid "parallel vacuum degree must be between 0 and %d" -msgstr "le degré de parallélisation du VACUUM doit être entre 0 et %d" +msgid "parallel workers for vacuum must be between 0 and %d" +msgstr "le nombre de processus workers parallélisés pour le VACUUM doit être entre 0 et %d" -#: commands/vacuum.c:185 +#: commands/vacuum.c:199 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "option « %s » de la commande VACUUM non reconnue" -#: commands/vacuum.c:208 +#: commands/vacuum.c:222 #, c-format msgid "VACUUM FULL cannot be performed in parallel" msgstr "Un VACUUM FULL ne peut être exécuté de façon parallélisé" -#: commands/vacuum.c:224 +#: commands/vacuum.c:238 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "l'option ANALYZE doit être spécifiée quand une liste de colonne est fournie" -#: commands/vacuum.c:314 +#: commands/vacuum.c:328 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s ne peut pas être exécuté dans un VACUUM ou un ANALYZE" -#: commands/vacuum.c:324 +#: commands/vacuum.c:338 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "l'option DISABLE_PAGE_SKIPPING de la commande VACUUM ne pas être utilisée en même temps que l'option FULL" -#: commands/vacuum.c:331 +#: commands/vacuum.c:345 #, c-format msgid "PROCESS_TOAST required with VACUUM FULL" msgstr "PROCESS_TOAST requis avec VACUUM FULL" -#: commands/vacuum.c:572 +#: commands/vacuum.c:586 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "ignore « %s » --- seul le super-utilisateur peut exécuter un VACUUM" -#: commands/vacuum.c:576 +#: commands/vacuum.c:590 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "" "ignore « %s » --- seul le super-utilisateur ou le propriétaire de la base de données\n" "peuvent exécuter un VACUUM" -#: commands/vacuum.c:580 +#: commands/vacuum.c:594 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "" "ignore « %s » --- seul le propriétaire de la table ou de la base de données\n" "peut exécuter un VACUUM" -#: commands/vacuum.c:595 +#: commands/vacuum.c:609 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "ignore « %s » --- seul le super-utilisateur peut l'analyser" -#: commands/vacuum.c:599 +#: commands/vacuum.c:613 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "" "ignore « %s » --- seul le super-utilisateur ou le propriétaire de la base de\n" "données peut l'analyser" -#: commands/vacuum.c:603 +#: commands/vacuum.c:617 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "" "ignore « %s » --- seul le propriétaire de la table ou de la base de données\n" "peut l'analyser" -#: commands/vacuum.c:682 commands/vacuum.c:778 +#: commands/vacuum.c:696 commands/vacuum.c:792 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "ignore le vacuum de « %s » --- verrou non disponible" -#: commands/vacuum.c:687 +#: commands/vacuum.c:701 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "ignore le vacuum de « %s » --- la relation n'existe plus" -#: commands/vacuum.c:703 commands/vacuum.c:783 +#: commands/vacuum.c:717 commands/vacuum.c:797 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "ignore l'analyse de « %s » --- verrou non disponible" -#: commands/vacuum.c:708 +#: commands/vacuum.c:722 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "ignore l'analyse de « %s » --- la relation n'existe plus" -#: commands/vacuum.c:1026 +#: commands/vacuum.c:1040 #, c-format msgid "oldest xmin is far in the past" msgstr "le plus ancien xmin est loin dans le passé" -#: commands/vacuum.c:1027 +#: commands/vacuum.c:1041 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -11434,40 +11449,40 @@ msgstr "" "Fermer les transactions dès que possible pour éviter des problèmes de rebouclage d'identifiants de transaction.\n" "Vous pouvez avoir besoin de valider ou d'annuler les anciennes transactions préparées, ou de supprimer les slots de réplication trop anciens." -#: commands/vacuum.c:1068 +#: commands/vacuum.c:1082 #, c-format msgid "oldest multixact is far in the past" msgstr "le plus ancien multixact est loin dans le passé" -#: commands/vacuum.c:1069 +#: commands/vacuum.c:1083 #, c-format msgid "Close open transactions with multixacts soon to avoid wraparound problems." msgstr "" "Fermez les transactions ouvertes avec multixacts rapidement pour éviter des problèmes de\n" "réinitialisation." -#: commands/vacuum.c:1726 +#: commands/vacuum.c:1740 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "" "certaines bases de données n'ont pas eu droit à l'opération de maintenance\n" "VACUUM depuis plus de 2 milliards de transactions" -#: commands/vacuum.c:1727 +#: commands/vacuum.c:1741 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "" "Vous pouvez avoir déjà souffert de pertes de données suite à une\n" "réinitialisation de l'identifiant des transactions." -#: commands/vacuum.c:1891 +#: commands/vacuum.c:1905 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "" "ignore « %s » --- n'a pas pu exécuter un VACUUM sur les objets autres que\n" "des tables et les tables systèmes" -#: commands/variable.c:165 utils/misc/guc.c:11605 utils/misc/guc.c:11667 +#: commands/variable.c:165 utils/misc/guc.c:11625 utils/misc/guc.c:11687 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Mot clé non reconnu : « %s »." @@ -11607,27 +11622,27 @@ msgstr "À la place, utilisez ALTER VIEW ... RENAME COLUMN ... pour modifier le msgid "cannot change data type of view column \"%s\" from %s to %s" msgstr "ne peut pas modifier le type de données de la colonne « %s » de la vue de %s à %s" -#: commands/view.c:441 +#: commands/view.c:438 #, c-format msgid "views must not contain SELECT INTO" msgstr "les vues ne peuvent pas contenir SELECT INTO" -#: commands/view.c:453 +#: commands/view.c:450 #, c-format msgid "views must not contain data-modifying statements in WITH" msgstr "les vues ne peuvent pas contenir d'instructions de modifications de données avec WITH" -#: commands/view.c:523 +#: commands/view.c:520 #, c-format msgid "CREATE VIEW specifies more column names than columns" msgstr "CREATE VIEW spécifie plus de noms de colonnes que de colonnes" -#: commands/view.c:531 +#: commands/view.c:528 #, c-format msgid "views cannot be unlogged because they do not have storage" msgstr "les vues ne peuvent pas être non tracées car elles n'ont pas de stockage" -#: commands/view.c:545 +#: commands/view.c:542 #, c-format msgid "view \"%s\" will be a temporary view" msgstr "la vue « %s » sera une vue temporaire" @@ -11709,7 +11724,7 @@ msgstr "le type cible n'est pas un tableau" msgid "ROW() column has type %s instead of type %s" msgstr "une colonne ROW() a le type %s au lieu du type %s" -#: executor/execExpr.c:2480 executor/execSRF.c:718 parser/parse_func.c:136 parser/parse_func.c:654 parser/parse_func.c:1030 +#: executor/execExpr.c:2480 executor/execSRF.c:718 parser/parse_func.c:138 parser/parse_func.c:655 parser/parse_func.c:1031 #, c-format msgid "cannot pass more than %d argument to a function" msgid_plural "cannot pass more than %d arguments to a function" @@ -11937,7 +11952,7 @@ msgstr "ne peut pas verrouiller les lignes dans la vue « %s »" msgid "cannot lock rows in materialized view \"%s\"" msgstr "ne peut pas verrouiller les lignes dans la vue matérialisée « %s »" -#: executor/execMain.c:1173 executor/execMain.c:2555 executor/nodeLockRows.c:132 +#: executor/execMain.c:1173 executor/execMain.c:2555 executor/nodeLockRows.c:136 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "ne peut pas verrouiller la table distante « %s »" @@ -12121,19 +12136,19 @@ msgstr "Utilisez la commande REFRESH MATERIALIZED VIEW." msgid "could not determine actual type of argument declared %s" msgstr "n'a pas pu déterminer le type actuel de l'argument déclaré %s" -#: executor/functions.c:515 +#: executor/functions.c:514 #, c-format -msgid "cannot COPY to/from client in a SQL function" +msgid "cannot COPY to/from client in an SQL function" msgstr "ne peut pas utiliser COPY TO/FROM dans une fonction SQL" #. translator: %s is a SQL statement name -#: executor/functions.c:521 +#: executor/functions.c:520 #, c-format -msgid "%s is not allowed in a SQL function" +msgid "%s is not allowed in an SQL function" msgstr "%s n'est pas autorisé dans une fonction SQL" #. translator: %s is a SQL statement name -#: executor/functions.c:529 executor/spi.c:1634 executor/spi.c:2460 +#: executor/functions.c:528 executor/spi.c:1633 executor/spi.c:2485 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s n'est pas autorisé dans une fonction non volatile" @@ -12148,64 +12163,64 @@ msgstr "fonction SQL « %s », instruction %d" msgid "SQL function \"%s\" during startup" msgstr "fonction SQL « %s » lors du lancement" -#: executor/functions.c:1571 +#: executor/functions.c:1553 #, c-format msgid "calling procedures with output arguments is not supported in SQL functions" msgstr "l'appel à des procédures avec des arguments en sortie n'est pas supporté dans les fonctions SQL" -#: executor/functions.c:1705 executor/functions.c:1743 executor/functions.c:1757 executor/functions.c:1847 executor/functions.c:1880 executor/functions.c:1894 +#: executor/functions.c:1686 executor/functions.c:1724 executor/functions.c:1738 executor/functions.c:1828 executor/functions.c:1861 executor/functions.c:1875 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "le type de retour ne correspond pas à la fonction déclarant renvoyer %s" -#: executor/functions.c:1707 +#: executor/functions.c:1688 #, c-format msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." msgstr "" "L'instruction finale de la fonction doit être un SELECT ou un\n" "INSERT/UPDATE/DELETE RETURNING." -#: executor/functions.c:1745 +#: executor/functions.c:1726 #, c-format msgid "Final statement must return exactly one column." msgstr "L'instruction finale doit renvoyer exactement une colonne." -#: executor/functions.c:1759 +#: executor/functions.c:1740 #, c-format msgid "Actual return type is %s." msgstr "Le code de retour réel est %s." -#: executor/functions.c:1849 +#: executor/functions.c:1830 #, c-format msgid "Final statement returns too many columns." msgstr "L'instruction finale renvoie beaucoup trop de colonnes." -#: executor/functions.c:1882 +#: executor/functions.c:1863 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "L'instruction finale renvoie %s au lieu de %s pour la colonne %d." -#: executor/functions.c:1896 +#: executor/functions.c:1877 #, c-format msgid "Final statement returns too few columns." msgstr "L'instruction finale renvoie trop peu de colonnes." -#: executor/functions.c:1924 +#: executor/functions.c:1905 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "le type de retour %s n'est pas supporté pour les fonctions SQL" -#: executor/nodeAgg.c:3082 executor/nodeAgg.c:3091 executor/nodeAgg.c:3103 +#: executor/nodeAgg.c:3083 executor/nodeAgg.c:3092 executor/nodeAgg.c:3104 #, c-format msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" msgstr "fin de fichier inattendu pour la cassette %d : attendait %zu octets, a lu %zu octets" -#: executor/nodeAgg.c:3976 parser/parse_agg.c:666 parser/parse_agg.c:696 +#: executor/nodeAgg.c:3977 parser/parse_agg.c:666 parser/parse_agg.c:696 #, c-format msgid "aggregate function calls cannot be nested" msgstr "les appels à la fonction d'agrégat ne peuvent pas être imbriqués" -#: executor/nodeAgg.c:4184 executor/nodeWindowAgg.c:2836 +#: executor/nodeAgg.c:4185 executor/nodeWindowAgg.c:2836 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "l'agrégat %u a besoin d'avoir des types compatibles en entrée et en transition" @@ -12228,7 +12243,7 @@ msgstr "n'a pas pu lire le fichier temporaire pour la jointure de hachage : a lu #: executor/nodeIndexonlyscan.c:242 #, c-format msgid "lossy distance functions are not supported in index-only scans" -msgstr "les fonctions de distance à perte ne sont pas supportés dans les parcours d'index seul" +msgstr "les fonctions de distance à perte ne sont pas supportées dans les parcours d'index seul" #: executor/nodeLimit.c:374 #, c-format @@ -12255,27 +12270,27 @@ msgstr "FULL JOIN est supporté seulement avec les conditions de jointures MERGE msgid "Query has too few columns." msgstr "La requête n'a pas assez de colonnes." -#: executor/nodeModifyTable.c:1186 executor/nodeModifyTable.c:1260 +#: executor/nodeModifyTable.c:1203 executor/nodeModifyTable.c:1277 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "la ligne à supprimer était déjà modifiée par une opération déclenchée par la commande courante" -#: executor/nodeModifyTable.c:1435 +#: executor/nodeModifyTable.c:1452 #, c-format msgid "invalid ON UPDATE specification" msgstr "spécification ON UPDATE invalide" -#: executor/nodeModifyTable.c:1436 +#: executor/nodeModifyTable.c:1453 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "La ligne résultante apparaîtrait dans une partition différente de la ligne originale." -#: executor/nodeModifyTable.c:2026 +#: executor/nodeModifyTable.c:2049 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "la commande ON CONFLICT DO UPDATE ne peut pas affecter une ligne la deuxième fois" -#: executor/nodeModifyTable.c:2027 +#: executor/nodeModifyTable.c:2050 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "S'assure qu'aucune ligne proposée à l'insertion dans la même commande n'a de valeurs contraintes dupliquées." @@ -12350,7 +12365,7 @@ msgstr "l'offset de fin de frame ne doit pas être négatif" msgid "aggregate function %s does not support use as a window function" msgstr "la fonction d'agrégat %s ne supporte pas l'utilisation en tant que fonction de fenêtrage" -#: executor/spi.c:237 executor/spi.c:306 +#: executor/spi.c:237 executor/spi.c:302 #, c-format msgid "invalid transaction termination" msgstr "arrêt de transaction invalide" @@ -12360,58 +12375,58 @@ msgstr "arrêt de transaction invalide" msgid "cannot commit while a subtransaction is active" msgstr "ne peut pas valider la transaction pendant qu'une sous-transaction est active" -#: executor/spi.c:312 +#: executor/spi.c:308 #, c-format msgid "cannot roll back while a subtransaction is active" msgstr "ne peut pas annuler la transaction pendant qu'une sous-transaction est active" -#: executor/spi.c:381 +#: executor/spi.c:380 #, c-format msgid "transaction left non-empty SPI stack" msgstr "transaction gauche non vide dans la pile SPI" -#: executor/spi.c:382 executor/spi.c:444 +#: executor/spi.c:381 executor/spi.c:443 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "Vérifiez les appels manquants à « SPI_finish »." -#: executor/spi.c:443 +#: executor/spi.c:442 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "sous-transaction gauche non vide dans la pile SPI" -#: executor/spi.c:1496 +#: executor/spi.c:1495 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "ne peut pas ouvrir le plan à plusieurs requêtes comme curseur" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1501 +#: executor/spi.c:1500 #, c-format msgid "cannot open %s query as cursor" msgstr "ne peut pas ouvrir la requête %s comme curseur" -#: executor/spi.c:1608 +#: executor/spi.c:1607 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE n'est pas supporté" -#: executor/spi.c:1609 parser/analyze.c:2806 +#: executor/spi.c:1608 parser/analyze.c:2808 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Les curseurs déplaçables doivent être en lecture seule (READ ONLY)." -#: executor/spi.c:2784 +#: executor/spi.c:2809 #, c-format msgid "SQL expression \"%s\"" msgstr "expression SQL « %s »" -#: executor/spi.c:2789 +#: executor/spi.c:2814 #, c-format msgid "PL/pgSQL assignment \"%s\"" msgstr "affectation PL/pgSQL « %s »" -#: executor/spi.c:2792 +#: executor/spi.c:2817 #, c-format msgid "SQL statement \"%s\"" msgstr "instruction SQL « %s »" @@ -12511,288 +12526,288 @@ msgstr "STDIN/STDOUT non autorisé dans PROGRAM" msgid "WHERE clause not allowed with COPY TO" msgstr "la clause WHERE n'est pas autorisée avec COPY TO" -#: gram.y:3407 gram.y:3414 gram.y:11687 gram.y:11695 +#: gram.y:3407 gram.y:3414 gram.y:11665 gram.y:11673 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "GLOBAL est obsolète dans la création de la table temporaire" -#: gram.y:3663 +#: gram.y:3665 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "pour une colonne générée, GENERATED ALWAYS doit toujours être spécifié" -#: gram.y:3931 utils/adt/ri_triggers.c:2032 +#: gram.y:3933 utils/adt/ri_triggers.c:2032 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL non implémenté" -#: gram.y:4632 +#: gram.y:4634 #, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" msgstr "CREATE EXTENSION ... FROM n'est plus supporté" -#: gram.y:5295 +#: gram.y:5297 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "option « %s » de sécurité de ligne non reconnue" -#: gram.y:5296 +#: gram.y:5298 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "Seules les politiques PERMISSIVE et RESTRICTIVE sont supportées actuellement." -#: gram.y:5378 +#: gram.y:5380 #, c-format msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" msgstr "CREATE OR REPLACE CONSTRAINT TRIGGER n'est pas supporté" -#: gram.y:5415 +#: gram.y:5417 msgid "duplicate trigger events specified" msgstr "événements de trigger dupliqués spécifiés" -#: gram.y:5556 parser/parse_utilcmd.c:3734 parser/parse_utilcmd.c:3760 +#: gram.y:5558 parser/parse_utilcmd.c:3702 parser/parse_utilcmd.c:3728 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "la contrainte déclarée INITIALLY DEFERRED doit être DEFERRABLE" -#: gram.y:5563 +#: gram.y:5565 #, c-format msgid "conflicting constraint properties" msgstr "propriétés de contrainte en conflit" -#: gram.y:5659 +#: gram.y:5661 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION n'est pas encore implémenté" -#: gram.y:6042 +#: gram.y:6044 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK n'est plus nécessaire" -#: gram.y:6043 +#: gram.y:6045 #, c-format msgid "Update your data type." msgstr "Mettez à jour votre type de données." -#: gram.y:7768 +#: gram.y:7741 #, c-format msgid "aggregates cannot have output arguments" msgstr "les agrégats ne peuvent pas avoir d'arguments en sortie" -#: gram.y:8210 utils/adt/regproc.c:709 utils/adt/regproc.c:750 +#: gram.y:8188 utils/adt/regproc.c:710 utils/adt/regproc.c:751 #, c-format msgid "missing argument" msgstr "argument manquant" -#: gram.y:8211 utils/adt/regproc.c:710 utils/adt/regproc.c:751 +#: gram.y:8189 utils/adt/regproc.c:711 utils/adt/regproc.c:752 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Utilisez NONE pour dénoter l'argument manquant d'un opérateur unitaire." -#: gram.y:10150 gram.y:10168 +#: gram.y:10128 gram.y:10146 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION non supporté sur les vues récursives" -#: gram.y:11824 +#: gram.y:11802 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "la syntaxe LIMIT #,# n'est pas supportée" -#: gram.y:11825 +#: gram.y:11803 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Utilisez les clauses séparées LIMIT et OFFSET." -#: gram.y:12163 gram.y:12188 +#: gram.y:12141 gram.y:12166 #, c-format msgid "VALUES in FROM must have an alias" msgstr "VALUES dans FROM doit avoir un alias" -#: gram.y:12164 gram.y:12189 +#: gram.y:12142 gram.y:12167 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "Par exemple, FROM (VALUES ...) [AS] quelquechose." -#: gram.y:12169 gram.y:12194 +#: gram.y:12147 gram.y:12172 #, c-format msgid "subquery in FROM must have an alias" msgstr "la sous-requête du FROM doit avoir un alias" -#: gram.y:12170 gram.y:12195 +#: gram.y:12148 gram.y:12173 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "Par exemple, FROM (SELECT...) [AS] quelquechose." -#: gram.y:12690 +#: gram.y:12668 #, c-format msgid "only one DEFAULT value is allowed" msgstr "seule une valeur DEFAULT est autorisée" -#: gram.y:12699 +#: gram.y:12677 #, c-format msgid "only one PATH value per column is allowed" msgstr "seule une valeur PATH par colonne est autorisée" -#: gram.y:12708 +#: gram.y:12686 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "déclarations NULL/NOT NULL en conflit ou redondantes pour la colonne « %s »" -#: gram.y:12717 +#: gram.y:12695 #, c-format msgid "unrecognized column option \"%s\"" msgstr "option de colonne « %s » non reconnue" -#: gram.y:12971 +#: gram.y:12949 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "la précision du type float doit être d'au moins un bit" -#: gram.y:12980 +#: gram.y:12958 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "la précision du type float doit être inférieur à 54 bits" -#: gram.y:13478 +#: gram.y:13456 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "mauvais nombre de paramètres sur le côté gauche de l'expression OVERLAPS" -#: gram.y:13483 +#: gram.y:13461 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "mauvais nombre de paramètres sur le côté droit de l'expression OVERLAPS" -#: gram.y:13651 +#: gram.y:13629 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "prédicat UNIQUE non implémenté" -#: gram.y:14010 +#: gram.y:13988 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "ne peut pas utiliser des clauses ORDER BY multiples dans WITHIN GROUP" -#: gram.y:14015 +#: gram.y:13993 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "ne peut pas utiliser DISTINCT avec WITHIN GROUP" -#: gram.y:14020 +#: gram.y:13998 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "ne peut pas utiliser VARIADIC avec WITHIN GROUP" -#: gram.y:14544 gram.y:14567 +#: gram.y:14522 gram.y:14545 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "la fin du frame ne peut pas être UNBOUNDED FOLLOWING" -#: gram.y:14549 +#: gram.y:14527 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "la frame commençant après la ligne suivante ne peut pas se terminer avec la ligne actuelle" -#: gram.y:14572 +#: gram.y:14550 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "la fin du frame ne peut pas être UNBOUNDED PRECEDING" -#: gram.y:14578 +#: gram.y:14556 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "la frame commençant à la ligne courante ne peut pas avoir des lignes précédentes" -#: gram.y:14585 +#: gram.y:14563 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "la frame commençant à la ligne suivante ne peut pas avoir des lignes précédentes" -#: gram.y:15217 +#: gram.y:15195 #, c-format msgid "type modifier cannot have parameter name" msgstr "le modificateur de type ne peut pas avoir de nom de paramètre" -#: gram.y:15223 +#: gram.y:15201 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "le modificateur de type ne peut pas avoir de clause ORDER BY" -#: gram.y:15288 gram.y:15295 gram.y:15302 +#: gram.y:15266 gram.y:15273 gram.y:15280 #, c-format msgid "%s cannot be used as a role name here" msgstr "%s ne peut pas être utilisé comme nom de rôle ici" -#: gram.y:15391 gram.y:16823 +#: gram.y:15369 gram.y:16800 #, c-format msgid "WITH TIES cannot be specified without ORDER BY clause" msgstr "WITH TIES ne peut pas être indiqué sans clause ORDER BY" -#: gram.y:16499 gram.y:16688 +#: gram.y:16477 gram.y:16666 msgid "improper use of \"*\"" msgstr "mauvaise utilisation de « * »" -#: gram.y:16651 gram.y:16668 tsearch/spell.c:982 tsearch/spell.c:999 tsearch/spell.c:1016 tsearch/spell.c:1033 tsearch/spell.c:1098 +#: gram.y:16629 gram.y:16646 tsearch/spell.c:982 tsearch/spell.c:999 tsearch/spell.c:1016 tsearch/spell.c:1033 tsearch/spell.c:1098 #, c-format msgid "syntax error" msgstr "erreur de syntaxe" -#: gram.y:16753 +#: gram.y:16730 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "un agrégat par ensemble ordonné avec un argument VARIADIC direct doit avoir un argument VARIADIC agrégé du même type de données" -#: gram.y:16790 +#: gram.y:16767 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "clauses ORDER BY multiples non autorisées" -#: gram.y:16801 +#: gram.y:16778 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "clauses OFFSET multiples non autorisées" -#: gram.y:16810 +#: gram.y:16787 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "clauses LIMIT multiples non autorisées" -#: gram.y:16819 +#: gram.y:16796 #, c-format msgid "multiple limit options not allowed" msgstr "options limite multiples non autorisées" -#: gram.y:16831 +#: gram.y:16808 #, c-format msgid "multiple WITH clauses not allowed" msgstr "clauses WITH multiples non autorisées" -#: gram.y:17023 +#: gram.y:17002 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "les arguments OUT et INOUT ne sont pas autorisés dans des fonctions TABLE" -#: gram.y:17119 +#: gram.y:17098 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "clauses COLLATE multiples non autorisées" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:17157 gram.y:17170 +#: gram.y:17136 gram.y:17149 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "les contraintes %s ne peuvent pas être marquées comme DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:17183 +#: gram.y:17162 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "les contraintes %s ne peuvent pas être marquées comme NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:17196 +#: gram.y:17175 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "les contraintes %s ne peuvent pas être marquées NO INHERIT" @@ -12802,7 +12817,7 @@ msgstr "les contraintes %s ne peuvent pas être marquées NO INHERIT" msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "paramètre de configuration « %s » non reconnu dans le fichier « %s », ligne %d" -#: guc-file.l:351 utils/misc/guc.c:7340 utils/misc/guc.c:7538 utils/misc/guc.c:7632 utils/misc/guc.c:7726 utils/misc/guc.c:7846 utils/misc/guc.c:7945 +#: guc-file.l:351 utils/misc/guc.c:7360 utils/misc/guc.c:7558 utils/misc/guc.c:7652 utils/misc/guc.c:7746 utils/misc/guc.c:7866 utils/misc/guc.c:7965 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "le paramètre « %s » ne peut pas être modifié sans redémarrer le serveur" @@ -12851,7 +12866,7 @@ msgstr "" msgid "configuration file recursion in \"%s\"" msgstr "le fichier de configuration « %s » contient une récursion" -#: guc-file.l:630 libpq/hba.c:2245 libpq/hba.c:2659 +#: guc-file.l:630 libpq/hba.c:2251 libpq/hba.c:2665 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier de configuration « %s » : %m" @@ -13244,417 +13259,417 @@ msgstr "" "aucune entrée dans pg_hba.conf pour l'hôte « %s », utilisateur « %s »,\n" "base de données « %s », %s" -#: libpq/auth.c:722 +#: libpq/auth.c:721 #, c-format msgid "expected password response, got message type %d" msgstr "en attente du mot de passe, a reçu un type de message %d" -#: libpq/auth.c:743 +#: libpq/auth.c:742 #, c-format msgid "invalid password packet size" msgstr "taille du paquet du mot de passe invalide" -#: libpq/auth.c:761 +#: libpq/auth.c:760 #, c-format msgid "empty password returned by client" msgstr "mot de passe vide renvoyé par le client" -#: libpq/auth.c:888 libpq/hba.c:1368 +#: libpq/auth.c:887 libpq/hba.c:1366 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "l'authentification MD5 n'est pas supportée quand « db_user_namespace » est activé" -#: libpq/auth.c:894 +#: libpq/auth.c:893 #, c-format msgid "could not generate random MD5 salt" msgstr "n'a pas pu générer le sel MD5 aléatoire" -#: libpq/auth.c:960 +#: libpq/auth.c:959 #, c-format msgid "expected SASL response, got message type %d" msgstr "attendait une réponse SASL, a reçu le type de message %d" -#: libpq/auth.c:1089 libpq/be-secure-gssapi.c:535 +#: libpq/auth.c:1088 libpq/be-secure-gssapi.c:535 #, c-format msgid "could not set environment: %m" msgstr "n'a pas pu configurer l'environnement : %m" -#: libpq/auth.c:1125 +#: libpq/auth.c:1124 #, c-format msgid "expected GSS response, got message type %d" msgstr "en attente d'une réponse GSS, a reçu un message de type %d" -#: libpq/auth.c:1185 +#: libpq/auth.c:1184 msgid "accepting GSS security context failed" msgstr "échec de l'acceptation du contexte de sécurité GSS" -#: libpq/auth.c:1225 +#: libpq/auth.c:1224 msgid "retrieving GSS user name failed" msgstr "échec lors de la récupération du nom de l'utilisateur avec GSS" -#: libpq/auth.c:1366 +#: libpq/auth.c:1365 msgid "could not acquire SSPI credentials" msgstr "n'a pas pu obtenir les pièces d'identité SSPI" -#: libpq/auth.c:1391 +#: libpq/auth.c:1390 #, c-format msgid "expected SSPI response, got message type %d" msgstr "en attente d'une réponse SSPI, a reçu un message de type %d" -#: libpq/auth.c:1469 +#: libpq/auth.c:1468 msgid "could not accept SSPI security context" msgstr "n'a pas pu accepter le contexte de sécurité SSPI" -#: libpq/auth.c:1531 +#: libpq/auth.c:1530 msgid "could not get token from SSPI security context" msgstr "n'a pas pu obtenir le jeton du contexte de sécurité SSPI" -#: libpq/auth.c:1670 libpq/auth.c:1689 +#: libpq/auth.c:1669 libpq/auth.c:1688 #, c-format msgid "could not translate name" msgstr "n'a pas pu traduit le nom" -#: libpq/auth.c:1702 +#: libpq/auth.c:1701 #, c-format msgid "realm name too long" msgstr "nom du royaume trop long" -#: libpq/auth.c:1717 +#: libpq/auth.c:1716 #, c-format msgid "translated account name too long" msgstr "traduction du nom de compte trop longue" -#: libpq/auth.c:1898 +#: libpq/auth.c:1897 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "n'a pas pu créer le socket pour la connexion Ident : %m" -#: libpq/auth.c:1913 +#: libpq/auth.c:1912 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "n'a pas pu se lier à l'adresse locale « %s » : %m" -#: libpq/auth.c:1925 +#: libpq/auth.c:1924 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "n'a pas pu se connecter au serveur Ident à l'adresse « %s », port %s : %m" -#: libpq/auth.c:1947 +#: libpq/auth.c:1946 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "n'a pas pu envoyer la requête au serveur Ident à l'adresse « %s », port %s : %m" -#: libpq/auth.c:1964 +#: libpq/auth.c:1963 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "" "n'a pas pu recevoir la réponse du serveur Ident à l'adresse « %s », port %s :\n" "%m" -#: libpq/auth.c:1974 +#: libpq/auth.c:1973 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "réponse mal formatée du serveur Ident : « %s »" -#: libpq/auth.c:2027 +#: libpq/auth.c:2026 #, c-format msgid "peer authentication is not supported on this platform" msgstr "la méthode d'authentification «peer n'est pas supportée sur cette plateforme" -#: libpq/auth.c:2031 +#: libpq/auth.c:2030 #, c-format msgid "could not get peer credentials: %m" msgstr "n'a pas pu obtenir l'authentification de l'autre : %m" -#: libpq/auth.c:2043 +#: libpq/auth.c:2042 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "n'a pas pu rechercher l'identifiant %ld de l'utilisateur local : %s" -#: libpq/auth.c:2144 +#: libpq/auth.c:2143 #, c-format msgid "error from underlying PAM layer: %s" msgstr "erreur provenant de la couche PAM : %s" -#: libpq/auth.c:2155 +#: libpq/auth.c:2154 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "conversation PAM %d/\"%s\" non supportée" -#: libpq/auth.c:2215 +#: libpq/auth.c:2214 #, c-format msgid "could not create PAM authenticator: %s" msgstr "n'a pas pu créer l'authenticateur PAM : %s" -#: libpq/auth.c:2226 +#: libpq/auth.c:2225 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) a échoué : %s" -#: libpq/auth.c:2258 +#: libpq/auth.c:2257 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST) a échoué : %s" -#: libpq/auth.c:2270 +#: libpq/auth.c:2269 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) a échoué : %s" -#: libpq/auth.c:2283 +#: libpq/auth.c:2282 #, c-format msgid "pam_authenticate failed: %s" msgstr "pam_authenticate a échoué : %s" -#: libpq/auth.c:2296 +#: libpq/auth.c:2295 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt a échoué : %s" -#: libpq/auth.c:2307 +#: libpq/auth.c:2306 #, c-format msgid "could not release PAM authenticator: %s" msgstr "n'a pas pu fermer l'authenticateur PAM : %s" -#: libpq/auth.c:2387 +#: libpq/auth.c:2386 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "n'a pas pu initialiser LDAP : code d'erreur %d" -#: libpq/auth.c:2424 +#: libpq/auth.c:2423 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "n'a pas pu extraire le nom de domaine depuis ldapbasedn" -#: libpq/auth.c:2432 +#: libpq/auth.c:2431 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "l'authentification LDAP n'a pu trouver les enregistrement DNS SRV pour « %s »" -#: libpq/auth.c:2434 +#: libpq/auth.c:2433 #, c-format msgid "Set an LDAP server name explicitly." msgstr "Définit un nom de serveur LDAP explicitement." -#: libpq/auth.c:2486 +#: libpq/auth.c:2485 #, c-format msgid "could not initialize LDAP: %s" msgstr "n'a pas pu initialiser LDAP : %s" -#: libpq/auth.c:2496 +#: libpq/auth.c:2495 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "ldaps non supporté avec cette bibliothèque LDAP" -#: libpq/auth.c:2504 +#: libpq/auth.c:2503 #, c-format msgid "could not initialize LDAP: %m" msgstr "n'a pas pu initialiser LDAP : %m" -#: libpq/auth.c:2514 +#: libpq/auth.c:2513 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "n'a pas pu initialiser la version du protocole LDAP : %s" -#: libpq/auth.c:2554 +#: libpq/auth.c:2553 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "n'a pas pu charger la fonction _ldap_start_tls_sA de wldap32.dll" -#: libpq/auth.c:2555 +#: libpq/auth.c:2554 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "LDAP via SSL n'est pas supporté sur cette plateforme." -#: libpq/auth.c:2571 +#: libpq/auth.c:2570 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "n'a pas pu démarrer la session TLS LDAP : %s" -#: libpq/auth.c:2642 +#: libpq/auth.c:2641 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "serveur LDAP non précisé, et il n'y a pas de ldapbasedn" -#: libpq/auth.c:2649 +#: libpq/auth.c:2648 #, c-format msgid "LDAP server not specified" msgstr "serveur LDAP non précisé" -#: libpq/auth.c:2711 +#: libpq/auth.c:2710 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "caractère invalide dans le nom de l'utilisateur pour l'authentification LDAP" -#: libpq/auth.c:2728 +#: libpq/auth.c:2727 #, c-format msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" msgstr "n'a pas pu réaliser le lien LDAP initiale pour ldapbinddn « %s » sur le serveur « %s » : %s" -#: libpq/auth.c:2757 +#: libpq/auth.c:2756 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "n'a pas pu rechercher dans LDAP pour filtrer « %s » sur le serveur « %s » : %s" -#: libpq/auth.c:2771 +#: libpq/auth.c:2770 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "l'utilisateur LDAP « %s » n'existe pas" -#: libpq/auth.c:2772 +#: libpq/auth.c:2771 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "la recherche LDAP pour le filtre « %s » sur le serveur « %s » n'a renvoyé aucun enregistrement." -#: libpq/auth.c:2776 +#: libpq/auth.c:2775 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "l'utilisateur LDAP « %s » n'est pas unique" -#: libpq/auth.c:2777 +#: libpq/auth.c:2776 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." msgstr[0] "la recherche LDAP pour le filtre « %s » sur le serveur « %s » a renvoyé %d enregistrement." msgstr[1] "la recherche LDAP pour le filtre « %s » sur le serveur « %s » a renvoyé %d enregistrements." -#: libpq/auth.c:2797 +#: libpq/auth.c:2796 #, c-format msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "" "n'a pas pu obtenir le dn pour la première entrée correspondante « %s » sur\n" "le serveur « %s » : %s" -#: libpq/auth.c:2818 +#: libpq/auth.c:2817 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\"" msgstr "" "n'a pas pu exécuter le unbind après la recherche de l'utilisateur « %s »\n" "sur le serveur « %s »" -#: libpq/auth.c:2849 +#: libpq/auth.c:2848 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "échec de connexion LDAP pour l'utilisateur « %s » sur le serveur « %s » : %s" -#: libpq/auth.c:2881 +#: libpq/auth.c:2880 #, c-format msgid "LDAP diagnostics: %s" msgstr "diagnostique LDAP: %s" -#: libpq/auth.c:2919 +#: libpq/auth.c:2918 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "" "l'authentification par le certificat a échoué pour l'utilisateur « %s » :\n" "le certificat du client ne contient aucun nom d'utilisateur" -#: libpq/auth.c:2940 +#: libpq/auth.c:2939 #, c-format msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" msgstr "authentification par certificat échouée pour l'utilisateur « %s » : incapable de récupérer le DN sujet" -#: libpq/auth.c:2963 +#: libpq/auth.c:2962 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" msgstr "la validation du certificat (clientcert=verify-full) a échoué pour l'utilisateur « %s » : incohérence de DN" -#: libpq/auth.c:2968 +#: libpq/auth.c:2967 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" msgstr "l'authentification par certificat (clientcert=verify-full) a échoué pour l'utilisateur « %s » : incohérence de CN" -#: libpq/auth.c:3070 +#: libpq/auth.c:3069 #, c-format msgid "RADIUS server not specified" msgstr "serveur RADIUS non précisé" -#: libpq/auth.c:3077 +#: libpq/auth.c:3076 #, c-format msgid "RADIUS secret not specified" msgstr "secret RADIUS non précisé" -#: libpq/auth.c:3091 +#: libpq/auth.c:3090 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "l'authentification RADIUS ne supporte pas les mots de passe de plus de %d caractères" -#: libpq/auth.c:3198 libpq/hba.c:1998 +#: libpq/auth.c:3197 libpq/hba.c:2004 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "n'a pas pu traduire le nom du serveur RADIUS « %s » en une adresse : %s" -#: libpq/auth.c:3212 +#: libpq/auth.c:3211 #, c-format msgid "could not generate random encryption vector" msgstr "n'a pas pu générer le vecteur de chiffrement aléatoire" -#: libpq/auth.c:3246 +#: libpq/auth.c:3245 #, c-format msgid "could not perform MD5 encryption of password" msgstr "n'a pas pu réaliser le chiffrement MD5 du mot de passe" -#: libpq/auth.c:3272 +#: libpq/auth.c:3271 #, c-format msgid "could not create RADIUS socket: %m" msgstr "n'a pas pu créer le socket RADIUS : %m" -#: libpq/auth.c:3294 +#: libpq/auth.c:3293 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "n'a pas pu se lier à la socket RADIUS : %m" -#: libpq/auth.c:3304 +#: libpq/auth.c:3303 #, c-format msgid "could not send RADIUS packet: %m" msgstr "n'a pas pu transmettre le paquet RADIUS : %m" -#: libpq/auth.c:3337 libpq/auth.c:3363 +#: libpq/auth.c:3336 libpq/auth.c:3362 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "dépassement du délai pour la réponse du RADIUS à partir de %s" -#: libpq/auth.c:3356 +#: libpq/auth.c:3355 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "n'a pas pu vérifier le statut sur la socket RADIUS : %m" -#: libpq/auth.c:3386 +#: libpq/auth.c:3385 #, c-format msgid "could not read RADIUS response: %m" msgstr "n'a pas pu lire la réponse RADIUS : %m" -#: libpq/auth.c:3399 libpq/auth.c:3403 +#: libpq/auth.c:3398 libpq/auth.c:3402 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "la réponse RADIUS de %s a été envoyée à partir d'un mauvais port : %d" -#: libpq/auth.c:3412 +#: libpq/auth.c:3411 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "réponse RADIUS de %s trop courte : %d" -#: libpq/auth.c:3419 +#: libpq/auth.c:3418 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "la réponse RADIUS de %s a une longueur corrompue : %d (longueur réelle %d)" -#: libpq/auth.c:3427 +#: libpq/auth.c:3426 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "la réponse RADIUS de %s correspond à une demande différente : %d (devrait être %d)" -#: libpq/auth.c:3452 +#: libpq/auth.c:3451 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "n'a pas pu réaliser le chiffrement MD5 du paquet reçu" -#: libpq/auth.c:3461 +#: libpq/auth.c:3460 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "la réponse RADIUS de %s a une signature MD5 invalide" -#: libpq/auth.c:3479 +#: libpq/auth.c:3478 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "la réponse RADIUS de %s a un code invalide (%d) pour l'utilisateur « %s »" @@ -13709,7 +13724,7 @@ msgstr "n'a pas pu écrire le fichier serveur « %s » : %m" msgid "large object read request is too large" msgstr "la demande de lecture du Large Object est trop grande" -#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:268 utils/adt/genfile.c:307 utils/adt/genfile.c:343 +#: libpq/be-fsstubs.c:802 utils/adt/genfile.c:267 utils/adt/genfile.c:306 utils/adt/genfile.c:342 #, c-format msgid "requested length cannot be negative" msgstr "la longueur demandée ne peut pas être négative" @@ -13853,151 +13868,151 @@ msgstr "n'a pas pu configurer l'intervalle de versions pour le protocole SSL" msgid "\"%s\" cannot be higher than \"%s\"" msgstr "« %s » ne peut pas être supérieur à « %s »" -#: libpq/be-secure-openssl.c:265 +#: libpq/be-secure-openssl.c:275 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "n'a pas pu configurer la liste des algorithmes de chiffrement (pas d'algorithmes valides disponibles)" -#: libpq/be-secure-openssl.c:285 +#: libpq/be-secure-openssl.c:295 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "n'a pas pu charger le fichier du certificat racine « %s » : %s" -#: libpq/be-secure-openssl.c:334 +#: libpq/be-secure-openssl.c:344 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "n'a pas pu charger le fichier de liste de révocation des certificats SSL (« %s ») : %s" -#: libpq/be-secure-openssl.c:342 +#: libpq/be-secure-openssl.c:352 #, c-format msgid "could not load SSL certificate revocation list directory \"%s\": %s" msgstr "n'a pas pu charger le répertoire de liste de révocation des certificats SSL « %s » : %s" -#: libpq/be-secure-openssl.c:350 +#: libpq/be-secure-openssl.c:360 #, c-format msgid "could not load SSL certificate revocation list file \"%s\" or directory \"%s\": %s" msgstr "n'a pas pu charger le fichier de liste de révocation des certificats SSL (« %s ») ou répertoire %s : %s" -#: libpq/be-secure-openssl.c:408 +#: libpq/be-secure-openssl.c:418 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "n'a pas pu initialiser la connexion SSL : contexte SSL non configuré" -#: libpq/be-secure-openssl.c:419 +#: libpq/be-secure-openssl.c:429 #, c-format msgid "could not initialize SSL connection: %s" msgstr "n'a pas pu initialiser la connexion SSL : %s" -#: libpq/be-secure-openssl.c:427 +#: libpq/be-secure-openssl.c:437 #, c-format msgid "could not set SSL socket: %s" msgstr "n'a pas pu créer le socket SSL : %s" -#: libpq/be-secure-openssl.c:482 +#: libpq/be-secure-openssl.c:492 #, c-format msgid "could not accept SSL connection: %m" msgstr "n'a pas pu accepter la connexion SSL : %m" -#: libpq/be-secure-openssl.c:486 libpq/be-secure-openssl.c:539 +#: libpq/be-secure-openssl.c:496 libpq/be-secure-openssl.c:549 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "n'a pas pu accepter la connexion SSL : fin de fichier détecté" -#: libpq/be-secure-openssl.c:525 +#: libpq/be-secure-openssl.c:535 #, c-format msgid "could not accept SSL connection: %s" msgstr "n'a pas pu accepter la connexion SSL : %s" -#: libpq/be-secure-openssl.c:528 +#: libpq/be-secure-openssl.c:538 #, c-format msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." msgstr "Ceci pourrait indiquer que le client ne supporte pas la version du protocole SSL entre %s et %s." -#: libpq/be-secure-openssl.c:544 libpq/be-secure-openssl.c:723 libpq/be-secure-openssl.c:787 +#: libpq/be-secure-openssl.c:554 libpq/be-secure-openssl.c:734 libpq/be-secure-openssl.c:798 #, c-format msgid "unrecognized SSL error code: %d" msgstr "code d'erreur SSL inconnu : %d" -#: libpq/be-secure-openssl.c:590 +#: libpq/be-secure-openssl.c:600 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "le nom commun du certificat SSL contient des NULL" -#: libpq/be-secure-openssl.c:629 +#: libpq/be-secure-openssl.c:640 #, c-format msgid "SSL certificate's distinguished name contains embedded null" msgstr "le nom distingué du certificat SSL contient des NULL" -#: libpq/be-secure-openssl.c:712 libpq/be-secure-openssl.c:771 +#: libpq/be-secure-openssl.c:723 libpq/be-secure-openssl.c:782 #, c-format msgid "SSL error: %s" msgstr "erreur SSL : %s" -#: libpq/be-secure-openssl.c:952 +#: libpq/be-secure-openssl.c:963 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier de paramètres DH « %s » : %m" -#: libpq/be-secure-openssl.c:964 +#: libpq/be-secure-openssl.c:975 #, c-format msgid "could not load DH parameters file: %s" msgstr "n'a pas pu charger le fichier de paramètres DH : %s" -#: libpq/be-secure-openssl.c:974 +#: libpq/be-secure-openssl.c:985 #, c-format msgid "invalid DH parameters: %s" msgstr "paramètres DH invalides : %s" -#: libpq/be-secure-openssl.c:983 +#: libpq/be-secure-openssl.c:994 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "paramètres DH invalides : p n'est pas premier" -#: libpq/be-secure-openssl.c:992 +#: libpq/be-secure-openssl.c:1003 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "paramètres DH invalides : pas de générateur convenable ou de premier sûr" -#: libpq/be-secure-openssl.c:1153 +#: libpq/be-secure-openssl.c:1164 #, c-format msgid "DH: could not load DH parameters" msgstr "DH : n'a pas pu charger les paramètres DH" -#: libpq/be-secure-openssl.c:1161 +#: libpq/be-secure-openssl.c:1172 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH : n'a pas pu configurer les paramètres DH : %s" -#: libpq/be-secure-openssl.c:1188 +#: libpq/be-secure-openssl.c:1199 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH : nome de courbe non reconnu : %s" -#: libpq/be-secure-openssl.c:1197 +#: libpq/be-secure-openssl.c:1208 #, c-format msgid "ECDH: could not create key" msgstr "ECDH : n'a pas pu créer la clé" -#: libpq/be-secure-openssl.c:1225 +#: libpq/be-secure-openssl.c:1236 msgid "no SSL error reported" msgstr "aucune erreur SSL reportée" -#: libpq/be-secure-openssl.c:1229 +#: libpq/be-secure-openssl.c:1240 #, c-format msgid "SSL error code %lu" msgstr "erreur SSL de code %lu" -#: libpq/be-secure-openssl.c:1383 +#: libpq/be-secure-openssl.c:1394 #, c-format msgid "failed to create BIO" msgstr "échec pour la création de BIO" -#: libpq/be-secure-openssl.c:1393 +#: libpq/be-secure-openssl.c:1404 #, c-format msgid "could not get NID for ASN1_OBJECT object" msgstr "n'a pas pu obtenir un NID pour l'objet ASN1_OBJECT" -#: libpq/be-secure-openssl.c:1401 +#: libpq/be-secure-openssl.c:1412 #, c-format msgid "could not convert NID %d to an ASN1_OBJECT structure" msgstr "n'a pas pu convertir le NID %d en une structure ASN1_OBJECT" @@ -14037,375 +14052,388 @@ msgstr "Le mot de passe ne correspond pas pour l'utilisateur %s." msgid "Password of user \"%s\" is in unrecognized format." msgstr "Le mot de passe de l'utilisateur « %s » est dans un format non reconnu." -#: libpq/hba.c:243 +#: libpq/hba.c:241 #, c-format msgid "authentication file token too long, skipping: \"%s\"" msgstr "jeton du fichier d'authentification trop long, ignore : « %s »" -#: libpq/hba.c:415 +#: libpq/hba.c:413 #, c-format msgid "could not open secondary authentication file \"@%s\" as \"%s\": %m" msgstr "" "n'a pas pu ouvrir le fichier d'authentification secondaire « @%s » comme\n" "« %s » : %m" -#: libpq/hba.c:861 +#: libpq/hba.c:859 #, c-format msgid "error enumerating network interfaces: %m" msgstr "erreur lors de l'énumération des interfaces réseau : %m" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:888 +#: libpq/hba.c:886 #, c-format msgid "authentication option \"%s\" is only valid for authentication methods %s" msgstr "l'option d'authentification « %s » n'est valide que pour les méthodes d'authentification « %s »" -#: libpq/hba.c:890 libpq/hba.c:910 libpq/hba.c:948 libpq/hba.c:998 libpq/hba.c:1012 libpq/hba.c:1036 libpq/hba.c:1045 libpq/hba.c:1058 libpq/hba.c:1079 libpq/hba.c:1092 libpq/hba.c:1112 libpq/hba.c:1134 libpq/hba.c:1146 libpq/hba.c:1205 libpq/hba.c:1225 libpq/hba.c:1239 libpq/hba.c:1259 libpq/hba.c:1270 libpq/hba.c:1285 libpq/hba.c:1304 libpq/hba.c:1320 libpq/hba.c:1332 libpq/hba.c:1369 libpq/hba.c:1410 libpq/hba.c:1423 libpq/hba.c:1445 libpq/hba.c:1457 libpq/hba.c:1475 libpq/hba.c:1525 libpq/hba.c:1569 libpq/hba.c:1580 libpq/hba.c:1596 libpq/hba.c:1613 libpq/hba.c:1623 libpq/hba.c:1683 libpq/hba.c:1721 libpq/hba.c:1738 libpq/hba.c:1751 libpq/hba.c:1763 libpq/hba.c:1782 -#: libpq/hba.c:1869 libpq/hba.c:1887 libpq/hba.c:1981 libpq/hba.c:2000 libpq/hba.c:2029 libpq/hba.c:2042 libpq/hba.c:2065 libpq/hba.c:2087 libpq/hba.c:2101 tsearch/ts_locale.c:232 +#: libpq/hba.c:888 libpq/hba.c:908 libpq/hba.c:946 libpq/hba.c:996 libpq/hba.c:1010 libpq/hba.c:1034 libpq/hba.c:1043 libpq/hba.c:1056 libpq/hba.c:1077 libpq/hba.c:1090 libpq/hba.c:1110 libpq/hba.c:1132 libpq/hba.c:1144 libpq/hba.c:1203 libpq/hba.c:1223 libpq/hba.c:1237 libpq/hba.c:1257 libpq/hba.c:1268 libpq/hba.c:1283 libpq/hba.c:1302 libpq/hba.c:1318 libpq/hba.c:1330 libpq/hba.c:1367 libpq/hba.c:1408 libpq/hba.c:1421 libpq/hba.c:1443 libpq/hba.c:1455 libpq/hba.c:1473 libpq/hba.c:1523 libpq/hba.c:1567 libpq/hba.c:1578 libpq/hba.c:1594 libpq/hba.c:1611 libpq/hba.c:1622 libpq/hba.c:1641 libpq/hba.c:1657 libpq/hba.c:1673 libpq/hba.c:1727 libpq/hba.c:1744 libpq/hba.c:1757 +#: libpq/hba.c:1769 libpq/hba.c:1788 libpq/hba.c:1875 libpq/hba.c:1893 libpq/hba.c:1987 libpq/hba.c:2006 libpq/hba.c:2035 libpq/hba.c:2048 libpq/hba.c:2071 libpq/hba.c:2093 libpq/hba.c:2107 tsearch/ts_locale.c:232 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "ligne %d du fichier de configuration « %s »" -#: libpq/hba.c:908 +#: libpq/hba.c:906 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "la méthode d'authentification « %s » requiert un argument « %s » pour être mise en place" -#: libpq/hba.c:936 +#: libpq/hba.c:934 #, c-format msgid "missing entry in file \"%s\" at end of line %d" msgstr "entrée manquante dans le fichier « %s » à la fin de la ligne %d" -#: libpq/hba.c:947 +#: libpq/hba.c:945 #, c-format msgid "multiple values in ident field" msgstr "plusieurs valeurs dans le champ ident" -#: libpq/hba.c:996 +#: libpq/hba.c:994 #, c-format msgid "multiple values specified for connection type" msgstr "plusieurs valeurs indiquées pour le type de connexion" -#: libpq/hba.c:997 +#: libpq/hba.c:995 #, c-format msgid "Specify exactly one connection type per line." msgstr "Indiquez uniquement un type de connexion par ligne." -#: libpq/hba.c:1011 +#: libpq/hba.c:1009 #, c-format msgid "local connections are not supported by this build" msgstr "les connexions locales ne sont pas supportées dans cette installation" -#: libpq/hba.c:1034 +#: libpq/hba.c:1032 #, c-format msgid "hostssl record cannot match because SSL is disabled" msgstr "l'enregistrement hostssl ne peut pas correspondre car SSL est désactivé" -#: libpq/hba.c:1035 +#: libpq/hba.c:1033 #, c-format msgid "Set ssl = on in postgresql.conf." msgstr "Configurez ssl = on dans le postgresql.conf." -#: libpq/hba.c:1043 +#: libpq/hba.c:1041 #, c-format msgid "hostssl record cannot match because SSL is not supported by this build" msgstr "l'enregistrement hostssl ne peut pas correspondre parce que SSL n'est pas supporté par cette installation" -#: libpq/hba.c:1044 +#: libpq/hba.c:1042 #, c-format msgid "Compile with --with-ssl to use SSL connections." msgstr "Compilez avec --with-ssl pour utiliser les connexions SSL." -#: libpq/hba.c:1056 +#: libpq/hba.c:1054 #, c-format msgid "hostgssenc record cannot match because GSSAPI is not supported by this build" msgstr "l'enregistrement hostgssenc ne peut pas correspondre parce que GSSAPI n'est pas supporté par cette installation" -#: libpq/hba.c:1057 +#: libpq/hba.c:1055 #, c-format msgid "Compile with --with-gssapi to use GSSAPI connections." msgstr "Compilez avec --with-gssapi pour utiliser les connexions GSSAPI." -#: libpq/hba.c:1077 +#: libpq/hba.c:1075 #, c-format msgid "invalid connection type \"%s\"" msgstr "type de connexion « %s » invalide" -#: libpq/hba.c:1091 +#: libpq/hba.c:1089 #, c-format msgid "end-of-line before database specification" msgstr "fin de ligne avant la spécification de la base de données" -#: libpq/hba.c:1111 +#: libpq/hba.c:1109 #, c-format msgid "end-of-line before role specification" msgstr "fin de ligne avant la spécification du rôle" -#: libpq/hba.c:1133 +#: libpq/hba.c:1131 #, c-format msgid "end-of-line before IP address specification" msgstr "fin de ligne avant la spécification de l'adresse IP" -#: libpq/hba.c:1144 +#: libpq/hba.c:1142 #, c-format msgid "multiple values specified for host address" msgstr "plusieurs valeurs indiquées pour l'adresse hôte" -#: libpq/hba.c:1145 +#: libpq/hba.c:1143 #, c-format msgid "Specify one address range per line." msgstr "Indiquez un sous-réseau par ligne." -#: libpq/hba.c:1203 +#: libpq/hba.c:1201 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "adresse IP « %s » invalide : %s" -#: libpq/hba.c:1223 +#: libpq/hba.c:1221 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "spécifier le nom d'hôte et le masque CIDR n'est pas valide : « %s »" -#: libpq/hba.c:1237 +#: libpq/hba.c:1235 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "masque CIDR invalide dans l'adresse « %s »" -#: libpq/hba.c:1257 +#: libpq/hba.c:1255 #, c-format msgid "end-of-line before netmask specification" msgstr "fin de ligne avant la spécification du masque réseau" -#: libpq/hba.c:1258 +#: libpq/hba.c:1256 #, c-format msgid "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "Indiquez un sous-réseau en notation CIDR ou donnez un masque réseau séparé." -#: libpq/hba.c:1269 +#: libpq/hba.c:1267 #, c-format msgid "multiple values specified for netmask" msgstr "plusieurs valeurs indiquées pour le masque réseau" -#: libpq/hba.c:1283 +#: libpq/hba.c:1281 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "masque IP « %s » invalide : %s" -#: libpq/hba.c:1303 +#: libpq/hba.c:1301 #, c-format msgid "IP address and mask do not match" msgstr "l'adresse IP et le masque ne correspondent pas" -#: libpq/hba.c:1319 +#: libpq/hba.c:1317 #, c-format msgid "end-of-line before authentication method" msgstr "fin de ligne avant la méthode d'authentification" -#: libpq/hba.c:1330 +#: libpq/hba.c:1328 #, c-format msgid "multiple values specified for authentication type" msgstr "plusieurs valeurs indiquées pour le type d'authentification" -#: libpq/hba.c:1331 +#: libpq/hba.c:1329 #, c-format msgid "Specify exactly one authentication type per line." msgstr "Indiquez uniquement un type d'authentification par ligne." -#: libpq/hba.c:1408 +#: libpq/hba.c:1406 #, c-format msgid "invalid authentication method \"%s\"" msgstr "méthode d'authentification « %s » invalide" -#: libpq/hba.c:1421 +#: libpq/hba.c:1419 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "" "méthode d'authentification « %s » invalide : non supportée sur cette\n" "installation" -#: libpq/hba.c:1444 +#: libpq/hba.c:1442 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "" "l'authentification gssapi n'est pas supportée sur les connexions locales par\n" "socket" -#: libpq/hba.c:1456 +#: libpq/hba.c:1454 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "" "l'authentification peer est seulement supportée sur les connexions locales par\n" "socket" -#: libpq/hba.c:1474 +#: libpq/hba.c:1472 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "l'authentification cert est seulement supportée sur les connexions hostssl" -#: libpq/hba.c:1524 +#: libpq/hba.c:1522 #, c-format msgid "authentication option not in name=value format: %s" msgstr "l'option d'authentification n'est pas dans le format nom=valeur : %s" -#: libpq/hba.c:1568 +#: libpq/hba.c:1566 #, c-format msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchfilter, or ldapurl together with ldapprefix" msgstr "ne peut pas utiliser ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, ldapsearchattribute ou ldapurl avec ldapprefix" -#: libpq/hba.c:1579 +#: libpq/hba.c:1577 #, c-format msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" msgstr "la méthode d'authentification « ldap » requiert un argument « ldapbasedn », « ldapprefix » ou « ldapsuffix » pour être mise en place" -#: libpq/hba.c:1595 +#: libpq/hba.c:1593 #, c-format msgid "cannot use ldapsearchattribute together with ldapsearchfilter" msgstr "ne peut pas utiliser ldapsearchattribute avec ldapsearchfilter" -#: libpq/hba.c:1612 +#: libpq/hba.c:1610 #, c-format msgid "list of RADIUS servers cannot be empty" msgstr "la liste de serveurs RADIUS ne peut pas être vide" -#: libpq/hba.c:1622 +#: libpq/hba.c:1621 #, c-format msgid "list of RADIUS secrets cannot be empty" msgstr "la liste des secrets RADIUS ne peut pas être vide" -#: libpq/hba.c:1677 -#, c-format -msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" +#: libpq/hba.c:1638 +#, fuzzy, c-format +#| msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" +msgid "the number of RADIUS secrets (%d) must be 1 or the same as the number of RADIUS servers (%d)" +msgstr "le nombre de %s (%d) doit valoir 1 ou être identique au nombre de %s (%d)" + +#: libpq/hba.c:1654 +#, fuzzy, c-format +#| msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" +msgid "the number of RADIUS ports (%d) must be 1 or the same as the number of RADIUS servers (%d)" +msgstr "le nombre de %s (%d) doit valoir 1 ou être identique au nombre de %s (%d)" + +#: libpq/hba.c:1670 +#, fuzzy, c-format +#| msgid "the number of %s (%d) must be 1 or the same as the number of %s (%d)" +msgid "the number of RADIUS identifiers (%d) must be 1 or the same as the number of RADIUS servers (%d)" msgstr "le nombre de %s (%d) doit valoir 1 ou être identique au nombre de %s (%d)" -#: libpq/hba.c:1711 +#: libpq/hba.c:1717 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi et cert" -#: libpq/hba.c:1720 +#: libpq/hba.c:1726 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert ne peut être configuré que pour les lignes « hostssl »" -#: libpq/hba.c:1737 +#: libpq/hba.c:1743 #, c-format msgid "clientcert only accepts \"verify-full\" when using \"cert\" authentication" msgstr "clientcert accepte seulement « verify-full » lors de l'utilisation de l'authentification « cert »" -#: libpq/hba.c:1750 +#: libpq/hba.c:1756 #, c-format msgid "invalid value for clientcert: \"%s\"" msgstr "valeur invalide pour clientcert : « %s »" -#: libpq/hba.c:1762 +#: libpq/hba.c:1768 #, c-format msgid "clientname can only be configured for \"hostssl\" rows" msgstr "clientname peut seulement être configuré pour les lignes « hostssl »" -#: libpq/hba.c:1781 +#: libpq/hba.c:1787 #, c-format msgid "invalid value for clientname: \"%s\"" msgstr "valeur invalide pour clientname : « %s »" -#: libpq/hba.c:1815 +#: libpq/hba.c:1821 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "n'a pas pu analyser l'URL LDAP « %s » : %s" -#: libpq/hba.c:1826 +#: libpq/hba.c:1832 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "méthode URL LDAP non supporté : %s" -#: libpq/hba.c:1850 +#: libpq/hba.c:1856 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "URLs LDAP non supportées sur cette plateforme" -#: libpq/hba.c:1868 +#: libpq/hba.c:1874 #, c-format msgid "invalid ldapscheme value: \"%s\"" msgstr "valeur ldapscheme invalide : « %s »" -#: libpq/hba.c:1886 +#: libpq/hba.c:1892 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "numéro de port LDAP invalide : « %s »" -#: libpq/hba.c:1932 libpq/hba.c:1939 +#: libpq/hba.c:1938 libpq/hba.c:1945 msgid "gssapi and sspi" msgstr "gssapi et sspi" -#: libpq/hba.c:1948 libpq/hba.c:1957 +#: libpq/hba.c:1954 libpq/hba.c:1963 msgid "sspi" msgstr "sspi" -#: libpq/hba.c:1979 +#: libpq/hba.c:1985 #, c-format msgid "could not parse RADIUS server list \"%s\"" msgstr "n'a pas pu analyser la liste de serveurs RADIUS « %s »" -#: libpq/hba.c:2027 +#: libpq/hba.c:2033 #, c-format msgid "could not parse RADIUS port list \"%s\"" msgstr "n'a pas pu analyser la liste de ports RADIUS « %s »" -#: libpq/hba.c:2041 +#: libpq/hba.c:2047 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "numéro de port RADIUS invalide : « %s »" -#: libpq/hba.c:2063 +#: libpq/hba.c:2069 #, c-format msgid "could not parse RADIUS secret list \"%s\"" msgstr "n'a pas pu analyser la liste de secrets RADIUS « %s »" -#: libpq/hba.c:2085 +#: libpq/hba.c:2091 #, c-format msgid "could not parse RADIUS identifiers list \"%s\"" msgstr "n'a pas pu analyser la liste des identifieurs RADIUS « %s »" -#: libpq/hba.c:2099 +#: libpq/hba.c:2105 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "nom d'option de l'authentification inconnu : « %s »" -#: libpq/hba.c:2296 +#: libpq/hba.c:2302 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "le fichier de configuration « %s » ne contient aucun enregistrement" -#: libpq/hba.c:2814 +#: libpq/hba.c:2820 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "expression rationnelle invalide « %s » : %s" -#: libpq/hba.c:2874 +#: libpq/hba.c:2880 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "la correspondance de l'expression rationnelle pour « %s » a échoué : %s" -#: libpq/hba.c:2893 +#: libpq/hba.c:2899 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "" "l'expression rationnelle « %s » n'a pas de sous-expressions comme celle\n" "demandée par la référence dans « %s »" -#: libpq/hba.c:2989 +#: libpq/hba.c:2995 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "" "le nom d'utilisateur (%s) et le nom d'utilisateur authentifié (%s) fournis ne\n" "correspondent pas" -#: libpq/hba.c:3009 +#: libpq/hba.c:3015 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "" "pas de correspondance dans la usermap « %s » pour l'utilisateur « %s »\n" "authentifié en tant que « %s »" -#: libpq/hba.c:3042 +#: libpq/hba.c:3048 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier usermap « %s » : %m" @@ -14534,7 +14562,7 @@ msgstr "il n'y a pas de connexion client" msgid "could not receive data from client: %m" msgstr "n'a pas pu recevoir les données du client : %m" -#: libpq/pqcomm.c:1161 tcop/postgres.c:4280 +#: libpq/pqcomm.c:1161 tcop/postgres.c:4290 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "arrêt de la connexion à cause d'une perte de synchronisation du protocole" @@ -14921,7 +14949,7 @@ msgstr "ExtensibleNodeMethods \"%s\" n'a pas été enregistré" msgid "relation \"%s\" does not have a composite type" msgstr "la relation « %s » n'a pas un type composite" -#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2472 parser/parse_coerce.c:2584 parser/parse_coerce.c:2630 parser/parse_expr.c:2021 parser/parse_func.c:709 parser/parse_oper.c:883 utils/fmgr/funcapi.c:558 +#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2472 parser/parse_coerce.c:2584 parser/parse_coerce.c:2630 parser/parse_expr.c:2021 parser/parse_func.c:710 parser/parse_oper.c:883 utils/fmgr/funcapi.c:558 #, c-format msgid "could not find array type for data type %s" msgstr "n'a pas pu trouver de type tableau pour le type de données %s" @@ -14950,7 +14978,7 @@ msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s ne peut être appliqué sur le côté possiblement NULL d'une jointure externe" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1315 parser/analyze.c:1675 parser/analyze.c:1919 parser/analyze.c:3013 +#: optimizer/plan/planner.c:1315 parser/analyze.c:1677 parser/analyze.c:1921 parser/analyze.c:3099 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s n'est pas autorisé avec UNION/INTERSECT/EXCEPT" @@ -15015,7 +15043,7 @@ msgstr "Tous les types de données des colonnes doivent être hachables." msgid "could not implement %s" msgstr "n'a pas pu implanter %s" -#: optimizer/util/clauses.c:4670 +#: optimizer/util/clauses.c:4721 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "fonction SQL « %s » durant « inlining »" @@ -15045,22 +15073,22 @@ msgstr "ON CONFLICT DO UPDATE non supporté avec les contraintes d'exclusion" msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "il n'existe aucune contrainte unique ou contrainte d'exclusion correspondant à la spécification ON CONFLICT" -#: parser/analyze.c:735 parser/analyze.c:1449 +#: parser/analyze.c:737 parser/analyze.c:1451 #, c-format msgid "VALUES lists must all be the same length" msgstr "les listes VALUES doivent être toutes de la même longueur" -#: parser/analyze.c:936 +#: parser/analyze.c:938 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT a plus d'expressions que les colonnes cibles" -#: parser/analyze.c:954 +#: parser/analyze.c:956 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERT a plus de colonnes cibles que d'expressions" -#: parser/analyze.c:958 +#: parser/analyze.c:960 #, c-format msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "" @@ -15068,201 +15096,201 @@ msgstr "" "de colonnes que celui attendu par INSERT. Auriez-vous utilisé des parenthèses\n" "supplémentaires ?" -#: parser/analyze.c:1257 parser/analyze.c:1648 +#: parser/analyze.c:1259 parser/analyze.c:1650 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO n'est pas autorisé ici" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1578 parser/analyze.c:3192 +#: parser/analyze.c:1580 parser/analyze.c:3278 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s ne peut pas être appliqué à VALUES" -#: parser/analyze.c:1814 +#: parser/analyze.c:1816 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "clause UNION/INTERSECT/EXCEPT ORDER BY invalide" -#: parser/analyze.c:1815 +#: parser/analyze.c:1817 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "" "Seuls les noms de colonnes résultats peuvent être utilisés, pas les\n" "expressions et les fonctions." -#: parser/analyze.c:1816 +#: parser/analyze.c:1818 #, c-format msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." msgstr "Ajouter l'expression/fonction à chaque SELECT, ou déplacer l'UNION dans une clause FROM." -#: parser/analyze.c:1909 +#: parser/analyze.c:1911 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTO est autorisé uniquement sur le premier SELECT d'un UNION/INTERSECT/EXCEPT" -#: parser/analyze.c:1981 +#: parser/analyze.c:1983 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "" "L'instruction membre UNION/INTERSECT/EXCEPT ne peut pas faire référence à\n" "d'autres relations que celles de la requête de même niveau" -#: parser/analyze.c:2068 +#: parser/analyze.c:2070 #, c-format msgid "each %s query must have the same number of columns" msgstr "chaque requête %s doit avoir le même nombre de colonnes" -#: parser/analyze.c:2468 +#: parser/analyze.c:2470 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNING doit avoir au moins une colonne" -#: parser/analyze.c:2571 +#: parser/analyze.c:2573 #, c-format msgid "assignment source returned %d column" msgid_plural "assignment source returned %d columns" msgstr[0] "la source d'affectation a renvoyé %d colonne" msgstr[1] "la source d'affectation a renvoyé %d colonnes" -#: parser/analyze.c:2632 +#: parser/analyze.c:2634 #, c-format msgid "variable \"%s\" is of type %s but expression is of type %s" msgstr "la variable « %s » est de type %s mais l'expression est de type %s" #. translator: %s is a SQL keyword -#: parser/analyze.c:2756 parser/analyze.c:2764 +#: parser/analyze.c:2758 parser/analyze.c:2766 #, c-format msgid "cannot specify both %s and %s" msgstr "ne peut pas spécifier à la fois %s et %s" -#: parser/analyze.c:2784 +#: parser/analyze.c:2786 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR ne doit pas contenir des instructions de modification de données dans WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2792 +#: parser/analyze.c:2794 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s n'est pas supporté" -#: parser/analyze.c:2795 +#: parser/analyze.c:2797 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "Les curseurs détenables doivent être en lecture seule (READ ONLY)." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2803 +#: parser/analyze.c:2805 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s n'est pas supporté" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2814 +#: parser/analyze.c:2816 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s n'est pas valide" -#: parser/analyze.c:2817 +#: parser/analyze.c:2819 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Les curseurs insensibles doivent être en lecture seule (READ ONLY)." -#: parser/analyze.c:2883 +#: parser/analyze.c:2885 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "les vues matérialisées ne peuvent pas contenir d'instructions de modifications de données avec WITH" -#: parser/analyze.c:2893 +#: parser/analyze.c:2895 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "les vues matérialisées ne doivent pas utiliser de tables temporaires ou de vues" -#: parser/analyze.c:2903 +#: parser/analyze.c:2905 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "les vues matérialisées ne peuvent pas être définies en utilisant des paramètres liés" -#: parser/analyze.c:2915 +#: parser/analyze.c:2917 #, c-format msgid "materialized views cannot be unlogged" msgstr "les vues matérialisées ne peuvent pas être non journalisées (UNLOGGED)" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3020 +#: parser/analyze.c:3106 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s n'est pas autorisé avec la clause DISTINCT" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3027 +#: parser/analyze.c:3113 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s n'est pas autorisé avec la clause GROUP BY" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3034 +#: parser/analyze.c:3120 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s n'est pas autorisé avec la clause HAVING" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3041 +#: parser/analyze.c:3127 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s n'est pas autorisé avec les fonctions d'agrégat" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3048 +#: parser/analyze.c:3134 #, c-format msgid "%s is not allowed with window functions" msgstr "%s n'est pas autorisé avec les fonctions de fenêtrage" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3055 +#: parser/analyze.c:3141 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "%s n'est pas autorisé avec les fonctions renvoyant plusieurs lignes dans la liste cible" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3134 +#: parser/analyze.c:3220 #, c-format msgid "%s must specify unqualified relation names" msgstr "%s doit indiquer les noms de relation non qualifiés" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3165 +#: parser/analyze.c:3251 #, c-format msgid "%s cannot be applied to a join" msgstr "%s ne peut pas être appliqué à une jointure" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3174 +#: parser/analyze.c:3260 #, c-format msgid "%s cannot be applied to a function" msgstr "%s ne peut pas être appliqué à une fonction" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3183 +#: parser/analyze.c:3269 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s ne peut pas être appliqué à une fonction de table" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3201 +#: parser/analyze.c:3287 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s ne peut pas être appliqué à une requête WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3210 +#: parser/analyze.c:3296 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%s ne peut pas être appliqué à une tuplestore nommé" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3230 +#: parser/analyze.c:3316 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "relation « %s » dans une clause %s introuvable dans la clause FROM" @@ -15443,7 +15471,7 @@ msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "les fonctions de regroupement ne sont pas autorisées dans les conditions WHERE d'un COPY FROM" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:578 parser/parse_clause.c:1847 +#: parser/parse_agg.c:578 parser/parse_clause.c:1846 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "les fonctions d'agrégat ne sont pas autorisées dans %s" @@ -15464,7 +15492,7 @@ msgstr "un aggrégat de niveau externe ne peut pas contenir de variable de nivea msgid "aggregate function calls cannot contain set-returning function calls" msgstr "les appels à la fonction d'agrégat ne peuvent pas contenir des appels à des fonctions retournant des ensembles" -#: parser/parse_agg.c:769 parser/parse_expr.c:1673 parser/parse_expr.c:2146 parser/parse_func.c:882 +#: parser/parse_agg.c:769 parser/parse_expr.c:1673 parser/parse_expr.c:2146 parser/parse_func.c:883 #, c-format msgid "You might be able to move the set-returning function into a LATERAL FROM item." msgstr "Vous devriez être capable de déplacer la fonction SETOF dans un élément LATERAL FROM." @@ -15543,12 +15571,12 @@ msgid "window functions are not allowed in column generation expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisées dans les expressions de génération de colonne" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:971 parser/parse_clause.c:1856 +#: parser/parse_agg.c:971 parser/parse_clause.c:1855 #, c-format msgid "window functions are not allowed in %s" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans %s" -#: parser/parse_agg.c:1005 parser/parse_clause.c:2690 +#: parser/parse_agg.c:1005 parser/parse_clause.c:2689 #, c-format msgid "window \"%s\" does not exist" msgstr "le window « %s » n'existe pas" @@ -15590,287 +15618,287 @@ msgstr "les arguments de la clause GROUPING doivent être des expressions de reg msgid "relation \"%s\" cannot be the target of a modifying statement" msgstr "la relation « %s » ne peut pas être la cible d'une instruction modifiée" -#: parser/parse_clause.c:571 parser/parse_clause.c:599 parser/parse_func.c:2438 +#: parser/parse_clause.c:570 parser/parse_clause.c:598 parser/parse_func.c:2554 #, c-format msgid "set-returning functions must appear at top level of FROM" msgstr "les fonctions renvoyant des ensembles doivent apparaître au niveau haut d'un FROM" -#: parser/parse_clause.c:611 +#: parser/parse_clause.c:610 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "plusieurs listes de définition de colonnes ne sont pas autorisées pour la même fonction" -#: parser/parse_clause.c:644 +#: parser/parse_clause.c:643 #, c-format msgid "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "ROWS FROM() avec plusieurs fonctions ne peut pas avoir une liste de définitions de colonnes" -#: parser/parse_clause.c:645 +#: parser/parse_clause.c:644 #, c-format msgid "Put a separate column definition list for each function inside ROWS FROM()." msgstr "Placer une liste de définitions de colonnes séparée pour chaque fonction à l'intérieur de ROWS FROM()." -#: parser/parse_clause.c:651 +#: parser/parse_clause.c:650 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "UNNEST() avec plusieurs arguments ne peut pas avoir de liste de définition de colonnes" -#: parser/parse_clause.c:652 +#: parser/parse_clause.c:651 #, c-format msgid "Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one." msgstr "Utiliser des appels séparés UNNEST() à l'intérieur de ROWS FROM(), et attacher une liste de définition des colonnes pour chaque." -#: parser/parse_clause.c:659 +#: parser/parse_clause.c:658 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY ne peut pas être utilisé avec une liste de définitions de colonnes" -#: parser/parse_clause.c:660 +#: parser/parse_clause.c:659 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "Placez la liste de définitions des colonnes dans ROWS FROM()." -#: parser/parse_clause.c:760 +#: parser/parse_clause.c:759 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "seule une colonne FOR ORDINALITY est autorisée" -#: parser/parse_clause.c:821 +#: parser/parse_clause.c:820 #, c-format msgid "column name \"%s\" is not unique" msgstr "le nom de colonne « %s » n'est pas unique" -#: parser/parse_clause.c:863 +#: parser/parse_clause.c:862 #, c-format msgid "namespace name \"%s\" is not unique" msgstr "l'espace de nom « %s » n'est pas unique" -#: parser/parse_clause.c:873 +#: parser/parse_clause.c:872 #, c-format msgid "only one default namespace is allowed" msgstr "seul un espace de nom par défaut est autorisé" -#: parser/parse_clause.c:933 +#: parser/parse_clause.c:932 #, c-format msgid "tablesample method %s does not exist" msgstr "la méthode d'échantillonage %s n'existe pas" -#: parser/parse_clause.c:955 +#: parser/parse_clause.c:954 #, c-format msgid "tablesample method %s requires %d argument, not %d" msgid_plural "tablesample method %s requires %d arguments, not %d" msgstr[0] "la méthode d'échantillonage %s requiert %d argument, et non pas %d" msgstr[1] "la méthode d'échantillonage %s requiert %d arguments, et non pas %d" -#: parser/parse_clause.c:989 +#: parser/parse_clause.c:988 #, c-format msgid "tablesample method %s does not support REPEATABLE" msgstr "la méthode d'échantillonage %s ne supporte pas REPEATABLE" -#: parser/parse_clause.c:1135 +#: parser/parse_clause.c:1134 #, c-format msgid "TABLESAMPLE clause can only be applied to tables and materialized views" msgstr "la clause TABLESAMPLE n'est applicable qu'aux tables et vues matérialisées" -#: parser/parse_clause.c:1325 +#: parser/parse_clause.c:1324 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "le nom de la colonne « %s » apparaît plus d'une fois dans la clause USING" -#: parser/parse_clause.c:1340 +#: parser/parse_clause.c:1339 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "" "le nom commun de la colonne « %s » apparaît plus d'une fois dans la table de\n" "gauche" -#: parser/parse_clause.c:1349 +#: parser/parse_clause.c:1348 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "" "la colonne « %s » spécifiée dans la clause USING n'existe pas dans la table\n" "de gauche" -#: parser/parse_clause.c:1364 +#: parser/parse_clause.c:1363 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "" "le nom commun de la colonne « %s » apparaît plus d'une fois dans la table de\n" " droite" -#: parser/parse_clause.c:1373 +#: parser/parse_clause.c:1372 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "" "la colonne « %s » spécifiée dans la clause USING n'existe pas dans la table\n" "de droite" -#: parser/parse_clause.c:1452 +#: parser/parse_clause.c:1451 #, c-format msgid "column alias list for \"%s\" has too many entries" msgstr "la liste d'alias de colonnes pour « %s » a beaucoup trop d'entrées" -#: parser/parse_clause.c:1792 +#: parser/parse_clause.c:1791 #, c-format msgid "row count cannot be null in FETCH FIRST ... WITH TIES clause" msgstr "un nombre de lignes ne peut pas être NULL dans une clause FETCH FIRST ... WITH TIES" #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1817 +#: parser/parse_clause.c:1816 #, c-format msgid "argument of %s must not contain variables" msgstr "l'argument de « %s » ne doit pas contenir de variables" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1982 +#: parser/parse_clause.c:1981 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "%s « %s » est ambigu" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2011 +#: parser/parse_clause.c:2010 #, c-format msgid "non-integer constant in %s" msgstr "constante non entière dans %s" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:2033 +#: parser/parse_clause.c:2032 #, c-format msgid "%s position %d is not in select list" msgstr "%s, à la position %d, n'est pas dans la liste SELECT" -#: parser/parse_clause.c:2472 +#: parser/parse_clause.c:2471 #, c-format msgid "CUBE is limited to 12 elements" msgstr "CUBE est limité à 12 éléments" -#: parser/parse_clause.c:2678 +#: parser/parse_clause.c:2677 #, c-format msgid "window \"%s\" is already defined" msgstr "le window « %s » est déjà définie" -#: parser/parse_clause.c:2739 +#: parser/parse_clause.c:2738 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "n'a pas pu surcharger la clause PARTITION BY de window « %s »" -#: parser/parse_clause.c:2751 +#: parser/parse_clause.c:2750 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "n'a pas pu surcharger la clause ORDER BY de window « %s »" -#: parser/parse_clause.c:2781 parser/parse_clause.c:2787 +#: parser/parse_clause.c:2780 parser/parse_clause.c:2786 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "ne peut pas copier la fenêtre « %s » car il dispose d'une clause de portée" -#: parser/parse_clause.c:2789 +#: parser/parse_clause.c:2788 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Omettre les parenthèses dans cette clause OVER." -#: parser/parse_clause.c:2809 +#: parser/parse_clause.c:2808 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column" msgstr "RANGE avec offset PRECEDING/FOLLOWING nécessite exactement une colonne ORDER BY" -#: parser/parse_clause.c:2832 +#: parser/parse_clause.c:2831 #, c-format msgid "GROUPS mode requires an ORDER BY clause" msgstr "le mode GROUPS nécessite une clause ORDER BY" -#: parser/parse_clause.c:2902 +#: parser/parse_clause.c:2901 #, c-format msgid "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list" msgstr "" "dans un agrégat avec DISTINCT, les expressions ORDER BY doivent apparaître\n" "dans la liste d'argument" -#: parser/parse_clause.c:2903 +#: parser/parse_clause.c:2902 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "" "pour SELECT DISTINCT, ORDER BY, les expressions doivent apparaître dans la\n" "liste SELECT" -#: parser/parse_clause.c:2935 +#: parser/parse_clause.c:2934 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "un agrégat avec DISTINCT doit avoir au moins un argument" -#: parser/parse_clause.c:2936 +#: parser/parse_clause.c:2935 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCT doit avoir au moins une colonne" -#: parser/parse_clause.c:3002 parser/parse_clause.c:3034 +#: parser/parse_clause.c:3001 parser/parse_clause.c:3033 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "les expressions SELECT DISTINCT ON doivent correspondre aux expressions ORDER BY initiales" -#: parser/parse_clause.c:3112 +#: parser/parse_clause.c:3111 #, c-format msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "ASC/DESC n'est pas autorisé avec la clause ON CONFLICT" -#: parser/parse_clause.c:3118 +#: parser/parse_clause.c:3117 #, c-format msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "NULLS FIRST/LAST n'est pas autorisé avec la clause ON CONFLICT" -#: parser/parse_clause.c:3197 +#: parser/parse_clause.c:3196 #, c-format msgid "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "ON CONFLICT DO UPDATE requiert une spécification d'inférence ou un nom de contrainte" -#: parser/parse_clause.c:3198 +#: parser/parse_clause.c:3197 #, c-format msgid "For example, ON CONFLICT (column_name)." msgstr "Par exemple, ON CONFLICT (nom_colonne)" -#: parser/parse_clause.c:3209 +#: parser/parse_clause.c:3208 #, c-format msgid "ON CONFLICT is not supported with system catalog tables" msgstr "ON CONFLICT n'est pas supporté avec les catalogues systèmes" -#: parser/parse_clause.c:3217 +#: parser/parse_clause.c:3216 #, c-format msgid "ON CONFLICT is not supported on table \"%s\" used as a catalog table" msgstr "ON CONFLICT n'est pas supporté sur la table « %s » utilisée comme une table catalogue" -#: parser/parse_clause.c:3347 +#: parser/parse_clause.c:3346 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "l'opérateur %s n'est pas un opérateur de tri valide" -#: parser/parse_clause.c:3349 +#: parser/parse_clause.c:3348 #, c-format msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "" "Les opérateurs de tri doivent être les membres « < » ou « > » des familles\n" "d'opérateurs btree." -#: parser/parse_clause.c:3660 +#: parser/parse_clause.c:3659 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s" msgstr "RANGE avec offset PRECEDING/FOLLOWING n'est pas supporté pour le type de collone %s" -#: parser/parse_clause.c:3666 +#: parser/parse_clause.c:3665 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s" msgstr "RANGE avec offset PRECEDING/FOLLOWING n'est pas supporté pour le type de colonne %s et le type d'ossfet %s" -#: parser/parse_clause.c:3669 +#: parser/parse_clause.c:3668 #, c-format msgid "Cast the offset value to an appropriate type." msgstr "Transtypez la valeur d'offset vers un type approprié." -#: parser/parse_clause.c:3674 +#: parser/parse_clause.c:3673 #, c-format msgid "RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s" msgstr "RANGE avec offset PRECEDING/FOLLOWING a de multiples interprétations pour le type de colonne %s et le type d'offset %s" -#: parser/parse_clause.c:3677 +#: parser/parse_clause.c:3676 #, c-format msgid "Cast the offset value to the exact intended type." msgstr "Transtypez la valeur d'offset vers exactement le type attendu." @@ -16286,7 +16314,7 @@ msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() ex msgstr "la source d'un élément UPDATE multi-colonnes doit être un sous-SELECT ou une expression ROW()" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1671 parser/parse_expr.c:2144 parser/parse_func.c:2560 +#: parser/parse_expr.c:1671 parser/parse_expr.c:2144 parser/parse_func.c:2676 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "les fonctions renvoyant un ensemble ne sont pas autorisés dans %s" @@ -16437,135 +16465,135 @@ msgstr "Il existe de nombreus candidats également plausibles." msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROM requiert l'opérateur = pour comparer des booléens" -#: parser/parse_func.c:192 +#: parser/parse_func.c:194 #, c-format msgid "argument name \"%s\" used more than once" msgstr "nom « %s » de l'argument spécifié plus d'une fois" -#: parser/parse_func.c:203 +#: parser/parse_func.c:205 #, c-format msgid "positional argument cannot follow named argument" msgstr "l'argument positionné ne doit pas suivre l'argument nommé" -#: parser/parse_func.c:286 parser/parse_func.c:2257 +#: parser/parse_func.c:287 parser/parse_func.c:2369 #, c-format msgid "%s is not a procedure" msgstr "%s n'est pas une procédure" -#: parser/parse_func.c:290 +#: parser/parse_func.c:291 #, c-format msgid "To call a function, use SELECT." msgstr "Pour appeler une fonction, utilisez SELECT." -#: parser/parse_func.c:296 +#: parser/parse_func.c:297 #, c-format msgid "%s is a procedure" msgstr "%s est une procédure" -#: parser/parse_func.c:300 +#: parser/parse_func.c:301 #, c-format msgid "To call a procedure, use CALL." msgstr "Pour appeler une procédure, utilisez CALL." -#: parser/parse_func.c:314 +#: parser/parse_func.c:315 #, c-format msgid "%s(*) specified, but %s is not an aggregate function" msgstr "%s(*) spécifié, mais %s n'est pas une fonction d'agrégat" -#: parser/parse_func.c:321 +#: parser/parse_func.c:322 #, c-format msgid "DISTINCT specified, but %s is not an aggregate function" msgstr "DISTINCT spécifié mais %s n'est pas une fonction d'agrégat" -#: parser/parse_func.c:327 +#: parser/parse_func.c:328 #, c-format msgid "WITHIN GROUP specified, but %s is not an aggregate function" msgstr "WITHIN GROUP spécifié, mais %s n'est pas une fonction d'agrégat" -#: parser/parse_func.c:333 +#: parser/parse_func.c:334 #, c-format msgid "ORDER BY specified, but %s is not an aggregate function" msgstr "ORDER BY spécifié, mais %s n'est pas une fonction d'agrégat" -#: parser/parse_func.c:339 +#: parser/parse_func.c:340 #, c-format msgid "FILTER specified, but %s is not an aggregate function" msgstr "FILTER spécifié mais %s n'est pas une fonction d'agrégat" -#: parser/parse_func.c:345 +#: parser/parse_func.c:346 #, c-format msgid "OVER specified, but %s is not a window function nor an aggregate function" msgstr "OVER spécifié, mais %s n'est pas une fonction window ou une fonction d'agrégat" -#: parser/parse_func.c:383 +#: parser/parse_func.c:384 #, c-format msgid "WITHIN GROUP is required for ordered-set aggregate %s" msgstr "WITHIN GROUP est requis pour l'agrégat à ensemble ordonné %s" -#: parser/parse_func.c:389 +#: parser/parse_func.c:390 #, c-format msgid "OVER is not supported for ordered-set aggregate %s" msgstr "OVER n'est pas supporté pour l'agrégat %s à ensemble trié" -#: parser/parse_func.c:420 parser/parse_func.c:451 +#: parser/parse_func.c:421 parser/parse_func.c:452 #, c-format msgid "There is an ordered-set aggregate %s, but it requires %d direct argument, not %d." msgid_plural "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." msgstr[0] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert %d argument direct, pas %d." msgstr[1] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert %d arguments directs, pas %d." -#: parser/parse_func.c:478 +#: parser/parse_func.c:479 #, c-format msgid "To use the hypothetical-set aggregate %s, the number of hypothetical direct arguments (here %d) must match the number of ordering columns (here %d)." msgstr "Pour utiliser l'agrégat à ensemble hypothétique %s, le nombre d'arguments directs hypothétiques (ici %d) doit correspondre au nombre de colonnes de tri (ici %d)." -#: parser/parse_func.c:492 +#: parser/parse_func.c:493 #, c-format msgid "There is an ordered-set aggregate %s, but it requires at least %d direct argument." msgid_plural "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." msgstr[0] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert au moins %d argument direct." msgstr[1] "Il existe un agrégat par ensemble trié nommé %s, mais il requiert au moins %d arguments directs." -#: parser/parse_func.c:513 +#: parser/parse_func.c:514 #, c-format msgid "%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP" msgstr "%s n'est pas un agrégat par ensemble trié, donc il ne peut pas avoir WITHIN GROUP" -#: parser/parse_func.c:526 +#: parser/parse_func.c:527 #, c-format msgid "window function %s requires an OVER clause" msgstr "la fonction de fenêtrage %s nécessite une clause OVER" -#: parser/parse_func.c:533 +#: parser/parse_func.c:534 #, c-format msgid "window function %s cannot have WITHIN GROUP" msgstr "la fonction de fenêtrage %s ne peut avoir WITHIN GROUP" -#: parser/parse_func.c:562 +#: parser/parse_func.c:563 #, c-format msgid "procedure %s is not unique" msgstr "la procédure %s n'est pas unique" -#: parser/parse_func.c:565 +#: parser/parse_func.c:566 #, c-format msgid "Could not choose a best candidate procedure. You might need to add explicit type casts." msgstr "" "N'a pas pu choisir un meilleur candidat pour la procédure. Vous pourriez avoir besoin\n" "d'ajouter une conversion de type explicite." -#: parser/parse_func.c:571 +#: parser/parse_func.c:572 #, c-format msgid "function %s is not unique" msgstr "la fonction %s n'est pas unique" -#: parser/parse_func.c:574 +#: parser/parse_func.c:575 #, c-format msgid "Could not choose a best candidate function. You might need to add explicit type casts." msgstr "" "N'a pas pu choisir un meilleur candidat dans les fonctions. Vous pourriez\n" "avoir besoin d'ajouter des conversions explicites de type." -#: parser/parse_func.c:613 +#: parser/parse_func.c:614 #, c-format msgid "No aggregate function matches the given name and argument types. Perhaps you misplaced ORDER BY; ORDER BY must appear after all regular arguments of the aggregate." msgstr "" @@ -16573,215 +16601,215 @@ msgstr "" "Peut-être avez-vous mal placé la clause ORDER BY.\n" "Cette dernière doit apparaître après tous les arguments standards de l'agrégat." -#: parser/parse_func.c:621 parser/parse_func.c:2300 +#: parser/parse_func.c:622 parser/parse_func.c:2412 #, c-format msgid "procedure %s does not exist" msgstr "la procédure %s n'existe pas" -#: parser/parse_func.c:624 +#: parser/parse_func.c:625 #, c-format msgid "No procedure matches the given name and argument types. You might need to add explicit type casts." msgstr "" "Aucune procédure ne correspond au nom donné et aux types d'arguments.\n" "Vous pourriez avoir besoin d'ajouter des conversions de type explicites." -#: parser/parse_func.c:633 +#: parser/parse_func.c:634 #, c-format msgid "No function matches the given name and argument types. You might need to add explicit type casts." msgstr "" "Aucune fonction ne correspond au nom donné et aux types d'arguments.\n" "Vous devez ajouter des conversions explicites de type." -#: parser/parse_func.c:735 +#: parser/parse_func.c:736 #, c-format msgid "VARIADIC argument must be an array" msgstr "l'argument VARIADIC doit être un tableau" -#: parser/parse_func.c:789 parser/parse_func.c:853 +#: parser/parse_func.c:790 parser/parse_func.c:854 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "%s(*) doit être utilisé pour appeler une fonction d'agrégat sans paramètre" -#: parser/parse_func.c:796 +#: parser/parse_func.c:797 #, c-format msgid "aggregates cannot return sets" msgstr "les agrégats ne peuvent pas renvoyer des ensembles" -#: parser/parse_func.c:811 +#: parser/parse_func.c:812 #, c-format msgid "aggregates cannot use named arguments" msgstr "les agrégats ne peuvent pas utiliser des arguments nommés" -#: parser/parse_func.c:843 +#: parser/parse_func.c:844 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "DISTINCT n'est pas implémenté pour des fonctions window" -#: parser/parse_func.c:863 +#: parser/parse_func.c:864 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "l'agrégat ORDER BY n'est pas implémenté pour les fonctions de fenêtrage" -#: parser/parse_func.c:872 +#: parser/parse_func.c:873 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "FILTER n'est pas implémenté pour des fonctions de fenêtrage non agrégats" -#: parser/parse_func.c:881 +#: parser/parse_func.c:882 #, c-format msgid "window function calls cannot contain set-returning function calls" msgstr "" "les appels à la fonction de fenêtrage ne peuvent pas contenir des appels à des\n" "fonctions renvoyant des ensembles de lignes" -#: parser/parse_func.c:889 +#: parser/parse_func.c:890 #, c-format msgid "window functions cannot return sets" msgstr "les fonctions window ne peuvent pas renvoyer des ensembles" -#: parser/parse_func.c:2138 parser/parse_func.c:2329 +#: parser/parse_func.c:2168 parser/parse_func.c:2441 #, c-format msgid "could not find a function named \"%s\"" msgstr "n'a pas pu trouver une fonction nommée « %s »" -#: parser/parse_func.c:2152 parser/parse_func.c:2347 +#: parser/parse_func.c:2182 parser/parse_func.c:2459 #, c-format msgid "function name \"%s\" is not unique" msgstr "le nom de la fonction « %s » n'est pas unique" -#: parser/parse_func.c:2154 parser/parse_func.c:2349 +#: parser/parse_func.c:2184 parser/parse_func.c:2462 #, c-format msgid "Specify the argument list to select the function unambiguously." msgstr "Indiquez la liste d'arguments pour sélectionner la fonction sans ambiguïté." -#: parser/parse_func.c:2198 +#: parser/parse_func.c:2228 #, c-format msgid "procedures cannot have more than %d argument" msgid_plural "procedures cannot have more than %d arguments" msgstr[0] "les procédures ne peuvent avoir plus de %d argument" msgstr[1] "les procédures ne peuvent avoir plus de %d arguments" -#: parser/parse_func.c:2247 +#: parser/parse_func.c:2359 #, c-format msgid "%s is not a function" msgstr "%s n'est pas une fonction" -#: parser/parse_func.c:2267 +#: parser/parse_func.c:2379 #, c-format msgid "function %s is not an aggregate" msgstr "la fonction %s n'est pas un agrégat" -#: parser/parse_func.c:2295 +#: parser/parse_func.c:2407 #, c-format msgid "could not find a procedure named \"%s\"" msgstr "n'a pas pu trouver une procédure nommée « %s »" -#: parser/parse_func.c:2309 +#: parser/parse_func.c:2421 #, c-format msgid "could not find an aggregate named \"%s\"" msgstr "n'a pas pu trouver un aggrégat nommé « %s »" -#: parser/parse_func.c:2314 +#: parser/parse_func.c:2426 #, c-format msgid "aggregate %s(*) does not exist" msgstr "l'agrégat %s(*) n'existe pas" -#: parser/parse_func.c:2319 +#: parser/parse_func.c:2431 #, c-format msgid "aggregate %s does not exist" msgstr "l'agrégat %s n'existe pas" -#: parser/parse_func.c:2354 +#: parser/parse_func.c:2467 #, c-format msgid "procedure name \"%s\" is not unique" msgstr "le nom de la procédure « %s » n'est pas unique" -#: parser/parse_func.c:2356 +#: parser/parse_func.c:2470 #, c-format msgid "Specify the argument list to select the procedure unambiguously." msgstr "Définit la liste d'arguments pour sélectionner la procédure sans ambiguïté." -#: parser/parse_func.c:2361 +#: parser/parse_func.c:2475 #, c-format msgid "aggregate name \"%s\" is not unique" msgstr "le nom d'agrégat « %s » n'est pas unique" -#: parser/parse_func.c:2363 +#: parser/parse_func.c:2478 #, c-format msgid "Specify the argument list to select the aggregate unambiguously." msgstr "Définit la liste d'arguments pour sélectionner l'agrégat sans ambiguïté." -#: parser/parse_func.c:2368 +#: parser/parse_func.c:2483 #, c-format msgid "routine name \"%s\" is not unique" msgstr "le nom de la routine « %s » n'est pas unique" -#: parser/parse_func.c:2370 +#: parser/parse_func.c:2486 #, c-format msgid "Specify the argument list to select the routine unambiguously." msgstr "Définit la liste d'arguments pour sélectionner la routine sans ambiguïté." -#: parser/parse_func.c:2425 +#: parser/parse_func.c:2541 msgid "set-returning functions are not allowed in JOIN conditions" msgstr "les fonctions renvoyant un ensemble de lignes ne sont pas autorisées dans les conditions JOIN" -#: parser/parse_func.c:2446 +#: parser/parse_func.c:2562 msgid "set-returning functions are not allowed in policy expressions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les expressions de politique" -#: parser/parse_func.c:2462 +#: parser/parse_func.c:2578 msgid "set-returning functions are not allowed in window definitions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les définitions de fenêtres" -#: parser/parse_func.c:2500 +#: parser/parse_func.c:2616 msgid "set-returning functions are not allowed in check constraints" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les contraintes CHECK" -#: parser/parse_func.c:2504 +#: parser/parse_func.c:2620 msgid "set-returning functions are not allowed in DEFAULT expressions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les expressions par défaut" -#: parser/parse_func.c:2507 +#: parser/parse_func.c:2623 msgid "set-returning functions are not allowed in index expressions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les expressions d'index" -#: parser/parse_func.c:2510 +#: parser/parse_func.c:2626 msgid "set-returning functions are not allowed in index predicates" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les prédicats d'index" -#: parser/parse_func.c:2513 +#: parser/parse_func.c:2629 msgid "set-returning functions are not allowed in statistics expressions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les expressions statistiques" -#: parser/parse_func.c:2516 +#: parser/parse_func.c:2632 msgid "set-returning functions are not allowed in transform expressions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les expressions de transformation" -#: parser/parse_func.c:2519 +#: parser/parse_func.c:2635 msgid "set-returning functions are not allowed in EXECUTE parameters" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les paramètres d'EXECUTE" -#: parser/parse_func.c:2522 +#: parser/parse_func.c:2638 msgid "set-returning functions are not allowed in trigger WHEN conditions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les conditions WHEN des triggers" -#: parser/parse_func.c:2525 +#: parser/parse_func.c:2641 msgid "set-returning functions are not allowed in partition bound" msgstr "les fonctions renvoyant un ensemble de lignes ne sont pas autorisées dans les limites de partition" -#: parser/parse_func.c:2528 +#: parser/parse_func.c:2644 msgid "set-returning functions are not allowed in partition key expressions" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les expressions de clé de partitionnement" -#: parser/parse_func.c:2531 +#: parser/parse_func.c:2647 msgid "set-returning functions are not allowed in CALL arguments" msgstr "les fonctions renvoyant plusieurs lignes ne sont pas autorisées dans les arguments de CALL" -#: parser/parse_func.c:2534 +#: parser/parse_func.c:2650 msgid "set-returning functions are not allowed in COPY FROM WHERE conditions" msgstr "les fonctions renvoyant un ensemble de lignes ne sont pas autorisées dans les conditions WHERE d'un COPY FROM" -#: parser/parse_func.c:2537 +#: parser/parse_func.c:2653 msgid "set-returning functions are not allowed in column generation expressions" msgstr "les fonctions renvoyant un ensemble de lignes ne sont pas autorisées dans les expressions de génération de colonne" @@ -16795,7 +16823,7 @@ msgstr "les listes cibles peuvent avoir au plus %d colonnes" msgid "postfix operators are not supported" msgstr "les opérateurs postfixes ne sont pas supportés" -#: parser/parse_oper.c:130 parser/parse_oper.c:649 utils/adt/regproc.c:538 utils/adt/regproc.c:722 +#: parser/parse_oper.c:130 parser/parse_oper.c:649 utils/adt/regproc.c:539 utils/adt/regproc.c:723 #, c-format msgid "operator does not exist: %s" msgstr "l'opérateur n'existe pas : %s" @@ -17076,333 +17104,333 @@ msgstr "les modificateurs de type doivent être des constantes ou des identifian msgid "invalid type name \"%s\"" msgstr "nom de type « %s » invalide" -#: parser/parse_utilcmd.c:266 +#: parser/parse_utilcmd.c:256 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "ne peut pas créer une table partitionnée comme la fille d'un héritage" -#: parser/parse_utilcmd.c:580 +#: parser/parse_utilcmd.c:570 #, c-format msgid "array of serial is not implemented" msgstr "le tableau de type serial n'est pas implémenté" -#: parser/parse_utilcmd.c:659 parser/parse_utilcmd.c:671 parser/parse_utilcmd.c:730 +#: parser/parse_utilcmd.c:649 parser/parse_utilcmd.c:661 parser/parse_utilcmd.c:720 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "déclarations NULL/NOT NULL en conflit pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:683 +#: parser/parse_utilcmd.c:673 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "" "plusieurs valeurs par défaut sont spécifiées pour la colonne « %s » de la table\n" "« %s »" -#: parser/parse_utilcmd.c:700 +#: parser/parse_utilcmd.c:690 #, c-format msgid "identity columns are not supported on typed tables" msgstr "les colonnes d'identité uniques ne sont pas supportées sur les tables typées" -#: parser/parse_utilcmd.c:704 +#: parser/parse_utilcmd.c:694 #, c-format msgid "identity columns are not supported on partitions" msgstr "les colonnes d'identité ne sont pas supportées sur les partitions" -#: parser/parse_utilcmd.c:713 +#: parser/parse_utilcmd.c:703 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "plusieurs spécifications d'identité pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:743 +#: parser/parse_utilcmd.c:733 #, c-format msgid "generated columns are not supported on typed tables" msgstr "les colonnes générées ne sont pas supportées sur les tables typées" -#: parser/parse_utilcmd.c:747 +#: parser/parse_utilcmd.c:737 #, c-format msgid "generated columns are not supported on partitions" msgstr "les colonnes générées ne sont pas supportées sur les partitions" -#: parser/parse_utilcmd.c:752 +#: parser/parse_utilcmd.c:742 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "plusieurs expressions de géénration sont spécifiées pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:770 parser/parse_utilcmd.c:885 +#: parser/parse_utilcmd.c:760 parser/parse_utilcmd.c:875 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "les clés primaires ne sont pas supportées par les tables distantes" -#: parser/parse_utilcmd.c:779 parser/parse_utilcmd.c:895 +#: parser/parse_utilcmd.c:769 parser/parse_utilcmd.c:885 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "les contraintes uniques ne sont pas supportées par les tables distantes" -#: parser/parse_utilcmd.c:824 +#: parser/parse_utilcmd.c:814 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "une valeur par défaut et une identité ont été spécifiées pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:832 +#: parser/parse_utilcmd.c:822 #, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" msgstr "une valeur par défaut et une expression de génération ont été spécifiées à la fois pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:840 +#: parser/parse_utilcmd.c:830 #, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" msgstr "une identité et une expression de génération ont été spécifiées à la fois pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:905 +#: parser/parse_utilcmd.c:895 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "les contraintes d'exclusion ne sont pas supportées par les tables distantes" -#: parser/parse_utilcmd.c:911 +#: parser/parse_utilcmd.c:901 #, c-format msgid "exclusion constraints are not supported on partitioned tables" msgstr "les contraintes d'exclusion ne sont pas supportées sur les tables partitionnées" -#: parser/parse_utilcmd.c:976 +#: parser/parse_utilcmd.c:966 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE n'est pas supporté pour la création de tables distantes" -#: parser/parse_utilcmd.c:1753 parser/parse_utilcmd.c:1861 +#: parser/parse_utilcmd.c:1743 parser/parse_utilcmd.c:1851 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "l'index « %s » contient une référence de table de ligne complète" -#: parser/parse_utilcmd.c:2248 +#: parser/parse_utilcmd.c:2238 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "ne peut pas utiliser un index existant dans CREATE TABLE" -#: parser/parse_utilcmd.c:2268 +#: parser/parse_utilcmd.c:2258 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "l'index « %s » est déjà associé à une contrainte" -#: parser/parse_utilcmd.c:2283 +#: parser/parse_utilcmd.c:2273 #, c-format msgid "index \"%s\" is not valid" msgstr "l'index « %s » n'est pas valide" -#: parser/parse_utilcmd.c:2289 +#: parser/parse_utilcmd.c:2279 #, c-format msgid "\"%s\" is not a unique index" msgstr "« %s » n'est pas un index unique" -#: parser/parse_utilcmd.c:2290 parser/parse_utilcmd.c:2297 parser/parse_utilcmd.c:2304 parser/parse_utilcmd.c:2381 +#: parser/parse_utilcmd.c:2280 parser/parse_utilcmd.c:2287 parser/parse_utilcmd.c:2294 parser/parse_utilcmd.c:2371 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "Ne peut pas créer une clé primaire ou une contrainte unique avec cet index." -#: parser/parse_utilcmd.c:2296 +#: parser/parse_utilcmd.c:2286 #, c-format msgid "index \"%s\" contains expressions" msgstr "l'index « %s » contient des expressions" -#: parser/parse_utilcmd.c:2303 +#: parser/parse_utilcmd.c:2293 #, c-format msgid "\"%s\" is a partial index" msgstr "« %s » est un index partiel" -#: parser/parse_utilcmd.c:2315 +#: parser/parse_utilcmd.c:2305 #, c-format msgid "\"%s\" is a deferrable index" msgstr "« %s » est un index déferrable" -#: parser/parse_utilcmd.c:2316 +#: parser/parse_utilcmd.c:2306 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "Ne peut pas créer une contrainte non-déferrable utilisant un index déferrable." -#: parser/parse_utilcmd.c:2380 +#: parser/parse_utilcmd.c:2370 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "l'index « %s », colonne numéro %d, n'a pas de tri par défaut" -#: parser/parse_utilcmd.c:2537 +#: parser/parse_utilcmd.c:2527 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "la colonne « %s » apparaît deux fois dans la contrainte de la clé primaire" -#: parser/parse_utilcmd.c:2543 +#: parser/parse_utilcmd.c:2533 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "la colonne « %s » apparaît deux fois sur une contrainte unique" -#: parser/parse_utilcmd.c:2896 +#: parser/parse_utilcmd.c:2880 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "les expressions et prédicats d'index peuvent seulement faire référence à la table en cours d'indexage" -#: parser/parse_utilcmd.c:2974 +#: parser/parse_utilcmd.c:2952 #, c-format msgid "statistics expressions can refer only to the table being indexed" msgstr "les expressions statistiques peuvent seulement faire référence à la table en cours d'indexage" -#: parser/parse_utilcmd.c:3020 +#: parser/parse_utilcmd.c:2995 #, c-format msgid "rules on materialized views are not supported" msgstr "les règles ne sont pas supportés sur les vues matérialisées" -#: parser/parse_utilcmd.c:3083 +#: parser/parse_utilcmd.c:3058 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "" "la condition WHERE d'une règle ne devrait pas contenir de références à d'autres\n" "relations" -#: parser/parse_utilcmd.c:3157 +#: parser/parse_utilcmd.c:3131 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "les règles avec des conditions WHERE ne peuvent contenir que des actions SELECT, INSERT, UPDATE ou DELETE " -#: parser/parse_utilcmd.c:3175 parser/parse_utilcmd.c:3276 rewrite/rewriteHandler.c:508 rewrite/rewriteManip.c:1018 +#: parser/parse_utilcmd.c:3149 parser/parse_utilcmd.c:3250 rewrite/rewriteHandler.c:508 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "" "les instructions conditionnelles UNION/INTERSECT/EXCEPT ne sont pas\n" "implémentées" -#: parser/parse_utilcmd.c:3193 +#: parser/parse_utilcmd.c:3167 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "la règle ON SELECT ne peut pas utiliser OLD" -#: parser/parse_utilcmd.c:3197 +#: parser/parse_utilcmd.c:3171 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "la règle ON SELECT ne peut pas utiliser NEW" -#: parser/parse_utilcmd.c:3206 +#: parser/parse_utilcmd.c:3180 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "la règle ON INSERT ne peut pas utiliser OLD" -#: parser/parse_utilcmd.c:3212 +#: parser/parse_utilcmd.c:3186 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "la règle ON INSERT ne peut pas utiliser NEW" -#: parser/parse_utilcmd.c:3240 +#: parser/parse_utilcmd.c:3214 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "ne peut référencer OLD dans une requête WITH" -#: parser/parse_utilcmd.c:3247 +#: parser/parse_utilcmd.c:3221 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "ne peut référencer NEW dans une requête WITH" -#: parser/parse_utilcmd.c:3706 +#: parser/parse_utilcmd.c:3674 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "clause DEFERRABLE mal placée" -#: parser/parse_utilcmd.c:3711 parser/parse_utilcmd.c:3726 +#: parser/parse_utilcmd.c:3679 parser/parse_utilcmd.c:3694 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "clauses DEFERRABLE/NOT DEFERRABLE multiples non autorisées" -#: parser/parse_utilcmd.c:3721 +#: parser/parse_utilcmd.c:3689 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "clause NOT DEFERRABLE mal placée" -#: parser/parse_utilcmd.c:3742 +#: parser/parse_utilcmd.c:3710 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "clause INITIALLY DEFERRED mal placée" -#: parser/parse_utilcmd.c:3747 parser/parse_utilcmd.c:3773 +#: parser/parse_utilcmd.c:3715 parser/parse_utilcmd.c:3741 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "clauses INITIALLY IMMEDIATE/DEFERRED multiples non autorisées" -#: parser/parse_utilcmd.c:3768 +#: parser/parse_utilcmd.c:3736 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "clause INITIALLY IMMEDIATE mal placée" -#: parser/parse_utilcmd.c:3959 +#: parser/parse_utilcmd.c:3927 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE spécifie un schéma (%s) différent de celui tout juste créé (%s)" -#: parser/parse_utilcmd.c:3994 +#: parser/parse_utilcmd.c:3962 #, c-format msgid "\"%s\" is not a partitioned table" msgstr "« %s » n'est pas une table partitionnée" -#: parser/parse_utilcmd.c:4001 +#: parser/parse_utilcmd.c:3969 #, c-format msgid "table \"%s\" is not partitioned" msgstr "la table « %s » n'est pas partitionné" -#: parser/parse_utilcmd.c:4008 +#: parser/parse_utilcmd.c:3976 #, c-format msgid "index \"%s\" is not partitioned" msgstr "l'index « %s » n'est pas partitionné" -#: parser/parse_utilcmd.c:4048 +#: parser/parse_utilcmd.c:4016 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "une table partitionnées par hash ne peut pas avoir de partition par défaut" -#: parser/parse_utilcmd.c:4065 +#: parser/parse_utilcmd.c:4033 #, c-format msgid "invalid bound specification for a hash partition" msgstr "spécification de limite invalide pour une partition par hash" -#: parser/parse_utilcmd.c:4071 partitioning/partbounds.c:4698 +#: parser/parse_utilcmd.c:4039 partitioning/partbounds.c:4701 #, c-format msgid "modulus for hash partition must be a positive integer" msgstr "le modulus pour une partition par hash doit être un entier positif" -#: parser/parse_utilcmd.c:4078 partitioning/partbounds.c:4706 +#: parser/parse_utilcmd.c:4046 partitioning/partbounds.c:4709 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "le modulus pour une partition par hash doit être inférieur au modulus" -#: parser/parse_utilcmd.c:4091 +#: parser/parse_utilcmd.c:4059 #, c-format msgid "invalid bound specification for a list partition" msgstr "spécification de limite invalide pour une partition par liste" -#: parser/parse_utilcmd.c:4144 +#: parser/parse_utilcmd.c:4112 #, c-format msgid "invalid bound specification for a range partition" msgstr "spécification de limite invalide pour une partition par intervalle" -#: parser/parse_utilcmd.c:4150 +#: parser/parse_utilcmd.c:4118 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM doit spécifier exactement une valeur par colonne de partitionnement" -#: parser/parse_utilcmd.c:4154 +#: parser/parse_utilcmd.c:4122 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO doit spécifier exactement une valeur par colonne de partitionnement" -#: parser/parse_utilcmd.c:4268 +#: parser/parse_utilcmd.c:4236 #, c-format msgid "cannot specify NULL in range bound" msgstr "ne peut pas spécifier NULL dans la limite de l'intervalle" -#: parser/parse_utilcmd.c:4317 +#: parser/parse_utilcmd.c:4285 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "chaque limite suivant MAXVALUE doit aussi être MAXVALUE" -#: parser/parse_utilcmd.c:4324 +#: parser/parse_utilcmd.c:4292 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "chaque limite suivant MINVALUE doit aussi être MINVALUE" -#: parser/parse_utilcmd.c:4367 +#: parser/parse_utilcmd.c:4335 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "la valeur spécifiée ne peut pas être convertie vers le type %s pour la colonne « %s »" @@ -17445,62 +17473,62 @@ msgstr "l'identifiant « %s » sera tronqué en « %.*s »" msgid "partition \"%s\" conflicts with existing default partition \"%s\"" msgstr "la partition « %s » est en conflit avec la partition par défaut existante « %s »" -#: partitioning/partbounds.c:2870 partitioning/partbounds.c:2885 partitioning/partbounds.c:2901 +#: partitioning/partbounds.c:2870 partitioning/partbounds.c:2888 partitioning/partbounds.c:2904 #, c-format msgid "every hash partition modulus must be a factor of the next larger modulus" msgstr "chaque modulo de partition hash doit être un facteur du prochain plus gros modulo" -#: partitioning/partbounds.c:2871 partitioning/partbounds.c:2902 +#: partitioning/partbounds.c:2871 partitioning/partbounds.c:2905 #, c-format msgid "The new modulus %d is not a factor of %d, the modulus of existing partition \"%s\"." msgstr "" -#: partitioning/partbounds.c:2886 +#: partitioning/partbounds.c:2889 #, c-format msgid "The new modulus %d is not divisible by %d, the modulus of existing partition \"%s\"." msgstr "" -#: partitioning/partbounds.c:3015 +#: partitioning/partbounds.c:3018 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "limite d'intervalle vide indiquée pour la partition « %s »" -#: partitioning/partbounds.c:3017 +#: partitioning/partbounds.c:3020 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "La limite inférieure spécifiée %s est supérieure ou égale à la limite supérieure %s." -#: partitioning/partbounds.c:3129 +#: partitioning/partbounds.c:3132 #, c-format msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "la partition « %s » surchargerait la partition « %s »" -#: partitioning/partbounds.c:3246 +#: partitioning/partbounds.c:3249 #, c-format msgid "skipped scanning foreign table \"%s\" which is a partition of default partition \"%s\"" msgstr "parcours ignoré pour la table distante « %s » qui n'est pas une partition ou partition par défaut « %s »" -#: partitioning/partbounds.c:4702 +#: partitioning/partbounds.c:4705 #, c-format msgid "remainder for hash partition must be a non-negative integer" msgstr "le reste pour une partition hash doit être un entier non négatif" -#: partitioning/partbounds.c:4726 +#: partitioning/partbounds.c:4729 #, c-format msgid "\"%s\" is not a hash partitioned table" msgstr "« %s » n'est pas une table partitionnée par hash" -#: partitioning/partbounds.c:4737 partitioning/partbounds.c:4854 +#: partitioning/partbounds.c:4740 partitioning/partbounds.c:4857 #, c-format msgid "number of partitioning columns (%d) does not match number of partition keys provided (%d)" msgstr "le nombre de colonnes de partitionnement (%d) ne correspond pas au nombre de clés de partitionnement fourni (%d)" -#: partitioning/partbounds.c:4759 +#: partitioning/partbounds.c:4762 #, c-format msgid "column %d of the partition key has type %s, but supplied value is of type %s" msgstr "la colonne %d de la clé de partitionnement a pour type %s, mais la valeur fournie est de type %s" -#: partitioning/partbounds.c:4791 +#: partitioning/partbounds.c:4794 #, c-format msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" msgstr "la colonne %d de la clé de partitionnement a pour type « %s », mais la valeur fournie a pour type « %s »" @@ -17669,64 +17697,66 @@ msgstr "n'a pas pu déverrouiller la sémaphore : code d'erreur %lu" msgid "could not try-lock semaphore: error code %lu" msgstr "n'a pas pu tenter le verrouillage de la sémaphore : code d'erreur %lu" -#: port/win32_shmem.c:144 port/win32_shmem.c:155 port/win32_shmem.c:167 port/win32_shmem.c:183 +#: port/win32_shmem.c:144 port/win32_shmem.c:159 port/win32_shmem.c:171 port/win32_shmem.c:187 #, c-format msgid "could not enable user right \"%s\": error code %lu" msgstr "n'a pas pu activer le droit utilisateur « %s » : code d'erreur %lu" -#. translator: This is a term from Windows and should be translated to match the Windows localization. -#: port/win32_shmem.c:146 port/win32_shmem.c:155 port/win32_shmem.c:167 port/win32_shmem.c:178 port/win32_shmem.c:180 port/win32_shmem.c:183 +#. translator: This is a term from Windows and should be translated to +#. match the Windows localization. +#. +#: port/win32_shmem.c:150 port/win32_shmem.c:159 port/win32_shmem.c:171 port/win32_shmem.c:182 port/win32_shmem.c:184 port/win32_shmem.c:187 msgid "Lock pages in memory" msgstr "Verrouillage des pages en mémoire" -#: port/win32_shmem.c:148 port/win32_shmem.c:156 port/win32_shmem.c:168 port/win32_shmem.c:184 +#: port/win32_shmem.c:152 port/win32_shmem.c:160 port/win32_shmem.c:172 port/win32_shmem.c:188 #, c-format msgid "Failed system call was %s." msgstr "L'appel système qui a échoué était %s." -#: port/win32_shmem.c:178 +#: port/win32_shmem.c:182 #, c-format msgid "could not enable user right \"%s\"" msgstr "n'a pas pu activer le droit utilisateur « %s »" -#: port/win32_shmem.c:179 +#: port/win32_shmem.c:183 #, c-format msgid "Assign user right \"%s\" to the Windows user account which runs PostgreSQL." msgstr "Assignez le droit d'utilisateur « %s » au compte d'utilisateur Windows qui fait tourner PostgreSQL." -#: port/win32_shmem.c:237 +#: port/win32_shmem.c:241 #, c-format msgid "the processor does not support large pages" msgstr "le processeur ne supporte pas les Large Pages" -#: port/win32_shmem.c:306 port/win32_shmem.c:342 port/win32_shmem.c:360 +#: port/win32_shmem.c:310 port/win32_shmem.c:346 port/win32_shmem.c:364 #, c-format msgid "could not create shared memory segment: error code %lu" msgstr "n'a pas pu créer le segment de mémoire partagée : code d'erreur %lu" -#: port/win32_shmem.c:307 +#: port/win32_shmem.c:311 #, c-format msgid "Failed system call was CreateFileMapping(size=%zu, name=%s)." msgstr "L'appel système qui a échoué était CreateFileMapping(taille=%zu, nom=%s)." -#: port/win32_shmem.c:332 +#: port/win32_shmem.c:336 #, c-format msgid "pre-existing shared memory block is still in use" msgstr "le bloc de mémoire partagé pré-existant est toujours en cours d'utilisation" -#: port/win32_shmem.c:333 +#: port/win32_shmem.c:337 #, c-format msgid "Check if there are any old server processes still running, and terminate them." msgstr "" "Vérifier s'il n'y a pas de vieux processus serveur en cours d'exécution. Si c'est le\n" "cas, fermez-les." -#: port/win32_shmem.c:343 +#: port/win32_shmem.c:347 #, c-format msgid "Failed system call was DuplicateHandle." msgstr "L'appel système qui a échoué était DuplicateHandle." -#: port/win32_shmem.c:361 +#: port/win32_shmem.c:365 #, c-format msgid "Failed system call was MapViewOfFileEx." msgstr "L'appel système qui a échoué était MapViewOfFileEx." @@ -17761,12 +17791,12 @@ msgstr "ANALYZE automatique de la table « %s.%s.%s »" msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "traitement de l'enregistrement de travail pour la relation « %s.%s.%s »" -#: postmaster/autovacuum.c:3432 +#: postmaster/autovacuum.c:3438 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "autovacuum non démarré à cause d'une mauvaise configuration" -#: postmaster/autovacuum.c:3433 +#: postmaster/autovacuum.c:3439 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Activez l'option « track_counts »." @@ -17776,54 +17806,54 @@ msgstr "Activez l'option « track_counts »." msgid "inconsistent background worker state (max_worker_processes=%d, total_slots=%d)" msgstr "" -#: postmaster/bgworker.c:650 +#: postmaster/bgworker.c:661 #, c-format msgid "background worker \"%s\": must attach to shared memory in order to request a database connection" msgstr "processus en tâche de fond « %s » : doit se lier à la mémoire partagée pour pouvoir demander une connexion à une base" -#: postmaster/bgworker.c:659 +#: postmaster/bgworker.c:670 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "processus en tâche de fond « %s » : ne peut pas réclamer un accès à la base s'il démarre au lancement du postmaster" -#: postmaster/bgworker.c:673 +#: postmaster/bgworker.c:684 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "processus en tâche de fond « %s »: intervalle de redémarrage invalide" -#: postmaster/bgworker.c:688 +#: postmaster/bgworker.c:699 #, c-format msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "processus en tâche de fond « %s »: les processus parallélisés ne sont peut-être pas être configurés pour redémarrer" -#: postmaster/bgworker.c:712 tcop/postgres.c:3182 +#: postmaster/bgworker.c:723 tcop/postgres.c:3188 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "arrêt du processus en tâche de fond « %s » suite à la demande de l'administrateur" -#: postmaster/bgworker.c:893 +#: postmaster/bgworker.c:904 #, c-format msgid "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "processus en tâche de fond « %s » : doit être listé dans shared_preload_libraries" -#: postmaster/bgworker.c:905 +#: postmaster/bgworker.c:916 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "processus en tâche de fond « %s » : seuls les processus en tâche de fond dynamiques peuvent demander des notifications" -#: postmaster/bgworker.c:920 +#: postmaster/bgworker.c:931 #, c-format msgid "too many background workers" msgstr "trop de processus en tâche de fond" -#: postmaster/bgworker.c:921 +#: postmaster/bgworker.c:932 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." msgstr[0] "Un maximum de %d processus en tâche de fond peut être enregistré avec la configuration actuelle." msgstr[1] "Un maximum de %d processus en tâche de fond peuvent être enregistrés avec la configuration actuelle." -#: postmaster/bgworker.c:925 +#: postmaster/bgworker.c:936 #, c-format msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Considérez l'augmentation du paramètre « max_worker_processes »." @@ -17856,54 +17886,54 @@ msgstr "" "Consultez les messages récents du serveur dans les journaux applicatifs pour\n" "plus de détails." -#: postmaster/pgarch.c:372 +#: postmaster/pgarch.c:365 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "archive_mode activé, cependant archive_command n'est pas configuré" -#: postmaster/pgarch.c:394 +#: postmaster/pgarch.c:387 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "supprimé le fichier de statut d'archivage orphelin « %s »" -#: postmaster/pgarch.c:404 +#: postmaster/pgarch.c:397 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" msgstr "la suppression du fichier de statut d'archive orphelin « %s » a échoué trop de fois, une nouvelle tentative aura lieu plus tard" -#: postmaster/pgarch.c:440 +#: postmaster/pgarch.c:433 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "l'archivage du journal de transactions « %s » a échoué trop de fois, nouvelle tentative repoussée" -#: postmaster/pgarch.c:541 +#: postmaster/pgarch.c:534 #, c-format msgid "archive command failed with exit code %d" msgstr "échec de la commande d'archivage avec un code de retour %d" -#: postmaster/pgarch.c:543 postmaster/pgarch.c:553 postmaster/pgarch.c:559 postmaster/pgarch.c:568 +#: postmaster/pgarch.c:536 postmaster/pgarch.c:546 postmaster/pgarch.c:552 postmaster/pgarch.c:561 #, c-format msgid "The failed archive command was: %s" msgstr "La commande d'archivage qui a échoué était : %s" -#: postmaster/pgarch.c:550 +#: postmaster/pgarch.c:543 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "la commande d'archivage a été terminée par l'exception 0x%X" -#: postmaster/pgarch.c:552 postmaster/postmaster.c:3721 +#: postmaster/pgarch.c:545 postmaster/postmaster.c:3724 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "" "Voir le fichier d'en-tête C « ntstatus.h » pour une description de la valeur\n" "hexadécimale." -#: postmaster/pgarch.c:557 +#: postmaster/pgarch.c:550 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "la commande d'archivage a été terminée par le signal %d : %s" -#: postmaster/pgarch.c:566 +#: postmaster/pgarch.c:559 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "la commande d'archivage a quitté avec le statut non reconnu %d" @@ -17992,208 +18022,208 @@ msgstr "" "n'a pas pu lancer le processus fils correspondant au récupérateur de\n" "statistiques : %m" -#: postmaster/pgstat.c:1449 +#: postmaster/pgstat.c:1459 #, c-format msgid "unrecognized reset target: \"%s\"" msgstr "cible reset non reconnu : « %s »" -#: postmaster/pgstat.c:1450 +#: postmaster/pgstat.c:1460 #, c-format msgid "Target must be \"archiver\", \"bgwriter\" or \"wal\"." msgstr "La cible doit être « archiver », « bgwriter » ou « wal »." -#: postmaster/pgstat.c:3285 +#: postmaster/pgstat.c:3298 #, c-format msgid "could not read statistics message: %m" msgstr "n'a pas pu lire le message des statistiques : %m" -#: postmaster/pgstat.c:3631 postmaster/pgstat.c:3816 +#: postmaster/pgstat.c:3644 postmaster/pgstat.c:3829 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier temporaire des statistiques « %s » : %m" -#: postmaster/pgstat.c:3726 postmaster/pgstat.c:3861 +#: postmaster/pgstat.c:3739 postmaster/pgstat.c:3874 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "n'a pas pu écrire le fichier temporaire des statistiques « %s » : %m" -#: postmaster/pgstat.c:3735 postmaster/pgstat.c:3870 +#: postmaster/pgstat.c:3748 postmaster/pgstat.c:3883 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "n'a pas pu fermer le fichier temporaire des statistiques « %s » : %m" -#: postmaster/pgstat.c:3743 postmaster/pgstat.c:3878 +#: postmaster/pgstat.c:3756 postmaster/pgstat.c:3891 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "" "n'a pas pu renommer le fichier temporaire des statistiques « %s » en\n" "« %s » : %m" -#: postmaster/pgstat.c:3976 postmaster/pgstat.c:4242 postmaster/pgstat.c:4399 +#: postmaster/pgstat.c:3989 postmaster/pgstat.c:4255 postmaster/pgstat.c:4412 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier de statistiques « %s » : %m" -#: postmaster/pgstat.c:3988 postmaster/pgstat.c:3998 postmaster/pgstat.c:4019 postmaster/pgstat.c:4030 postmaster/pgstat.c:4041 postmaster/pgstat.c:4063 postmaster/pgstat.c:4078 postmaster/pgstat.c:4148 postmaster/pgstat.c:4179 postmaster/pgstat.c:4254 postmaster/pgstat.c:4274 postmaster/pgstat.c:4292 postmaster/pgstat.c:4308 postmaster/pgstat.c:4326 postmaster/pgstat.c:4342 postmaster/pgstat.c:4411 postmaster/pgstat.c:4423 postmaster/pgstat.c:4435 postmaster/pgstat.c:4446 postmaster/pgstat.c:4457 postmaster/pgstat.c:4482 postmaster/pgstat.c:4509 postmaster/pgstat.c:4522 +#: postmaster/pgstat.c:4001 postmaster/pgstat.c:4011 postmaster/pgstat.c:4032 postmaster/pgstat.c:4043 postmaster/pgstat.c:4054 postmaster/pgstat.c:4076 postmaster/pgstat.c:4091 postmaster/pgstat.c:4161 postmaster/pgstat.c:4192 postmaster/pgstat.c:4267 postmaster/pgstat.c:4287 postmaster/pgstat.c:4305 postmaster/pgstat.c:4321 postmaster/pgstat.c:4339 postmaster/pgstat.c:4355 postmaster/pgstat.c:4424 postmaster/pgstat.c:4436 postmaster/pgstat.c:4448 postmaster/pgstat.c:4459 postmaster/pgstat.c:4470 postmaster/pgstat.c:4495 postmaster/pgstat.c:4522 postmaster/pgstat.c:4535 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "fichier de statistiques « %s » corrompu" -#: postmaster/pgstat.c:4631 +#: postmaster/pgstat.c:4644 #, c-format msgid "statistics collector's time %s is later than backend local time %s" msgstr "l'heure du collecteur de statistiques %s est plus avancé que l'heure locale du processus serveur %s" -#: postmaster/pgstat.c:4654 +#: postmaster/pgstat.c:4667 #, c-format msgid "using stale statistics instead of current ones because stats collector is not responding" msgstr "" "utilise de vieilles statistiques à la place des actuelles car le collecteur de\n" "statistiques ne répond pas" -#: postmaster/pgstat.c:4781 +#: postmaster/pgstat.c:4794 #, c-format msgid "stats_timestamp %s is later than collector's time %s for database %u" msgstr "stats_timestamp %s est plus avancé que l'heure du collecteur %s pour la base de données %u" -#: postmaster/pgstat.c:4991 +#: postmaster/pgstat.c:5004 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "" "corruption de la table hachée de la base de données lors du lancement\n" "--- annulation" -#: postmaster/postmaster.c:742 +#: postmaster/postmaster.c:745 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s : argument invalide pour l'option -f : « %s »\n" -#: postmaster/postmaster.c:821 +#: postmaster/postmaster.c:824 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s : argument invalide pour l'option -t : « %s »\n" -#: postmaster/postmaster.c:872 +#: postmaster/postmaster.c:875 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s : argument invalide : « %s »\n" -#: postmaster/postmaster.c:914 +#: postmaster/postmaster.c:917 #, c-format msgid "%s: superuser_reserved_connections (%d) must be less than max_connections (%d)\n" msgstr "%s : superuser_reserved_connections (%d) doit être inférieur à max_connections (%d)\n" -#: postmaster/postmaster.c:921 +#: postmaster/postmaster.c:924 #, c-format msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" msgstr "L'archivage des journaux de transactions ne peut pas être activé quand wal_level vaut « minimal »" -#: postmaster/postmaster.c:924 +#: postmaster/postmaster.c:927 #, c-format msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"replica\" or \"logical\"" msgstr "l'envoi d'un flux de transactions (max_wal_senders > 0) nécessite que le paramètre wal_level à « replica » ou « logical »" -#: postmaster/postmaster.c:932 +#: postmaster/postmaster.c:935 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s : tables datetoken invalide, merci de corriger\n" -#: postmaster/postmaster.c:1049 +#: postmaster/postmaster.c:1052 #, c-format msgid "could not create I/O completion port for child queue" msgstr "n'a pas pu créer un port de terminaison I/O pour la queue" -#: postmaster/postmaster.c:1114 +#: postmaster/postmaster.c:1117 #, c-format msgid "ending log output to stderr" msgstr "arrêt des traces sur stderr" -#: postmaster/postmaster.c:1115 +#: postmaster/postmaster.c:1118 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "Les traces suivantes iront sur « %s »." -#: postmaster/postmaster.c:1126 +#: postmaster/postmaster.c:1129 #, c-format msgid "starting %s" msgstr "démarrage de %s" -#: postmaster/postmaster.c:1155 postmaster/postmaster.c:1254 utils/init/miscinit.c:1627 +#: postmaster/postmaster.c:1158 postmaster/postmaster.c:1257 utils/init/miscinit.c:1627 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "syntaxe de liste invalide pour le paramètre « %s »" -#: postmaster/postmaster.c:1186 +#: postmaster/postmaster.c:1189 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "n'a pas pu créer le socket d'écoute pour « %s »" -#: postmaster/postmaster.c:1192 +#: postmaster/postmaster.c:1195 #, c-format msgid "could not create any TCP/IP sockets" msgstr "n'a pas pu créer de socket TCP/IP" -#: postmaster/postmaster.c:1224 +#: postmaster/postmaster.c:1227 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "échec de DNSServiceRegister() : code d'erreur %ld" -#: postmaster/postmaster.c:1276 +#: postmaster/postmaster.c:1279 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "n'a pas pu créer la socket de domaine Unix dans le répertoire « %s »" -#: postmaster/postmaster.c:1282 +#: postmaster/postmaster.c:1285 #, c-format msgid "could not create any Unix-domain sockets" msgstr "n'a pas pu créer les sockets de domaine Unix" -#: postmaster/postmaster.c:1294 +#: postmaster/postmaster.c:1297 #, c-format msgid "no socket created for listening" msgstr "pas de socket créé pour l'écoute" -#: postmaster/postmaster.c:1325 +#: postmaster/postmaster.c:1328 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s : n'a pas pu modifier les droits du fichier PID externe « %s » : %s\n" -#: postmaster/postmaster.c:1329 +#: postmaster/postmaster.c:1332 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s : n'a pas pu écrire le fichier PID externe « %s » : %s\n" -#: postmaster/postmaster.c:1362 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1365 utils/init/postinit.c:216 #, c-format msgid "could not load pg_hba.conf" msgstr "n'a pas pu charger pg_hba.conf" -#: postmaster/postmaster.c:1388 +#: postmaster/postmaster.c:1391 #, c-format msgid "postmaster became multithreaded during startup" msgstr "le postmaster est devenu multithreadé lors du démarrage" -#: postmaster/postmaster.c:1389 +#: postmaster/postmaster.c:1392 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Configurez la variable d'environnement LC_ALL avec une locale valide." -#: postmaster/postmaster.c:1484 +#: postmaster/postmaster.c:1487 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s : n'a pas pu localiser le chemin de mon propre exécutable" -#: postmaster/postmaster.c:1491 +#: postmaster/postmaster.c:1494 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s : n'a pas pu localiser l'exécutable postgres correspondant" -#: postmaster/postmaster.c:1514 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1517 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Ceci peut indiquer une installation PostgreSQL incomplète, ou que le fichier « %s » a été déplacé." -#: postmaster/postmaster.c:1541 +#: postmaster/postmaster.c:1544 #, c-format msgid "" "%s: could not find the database system\n" @@ -18204,509 +18234,519 @@ msgstr "" "S'attendait à le trouver dans le répertoire « %s »,\n" "mais n'a pas réussi à ouvrir le fichier « %s »: %s\n" -#: postmaster/postmaster.c:1718 +#: postmaster/postmaster.c:1721 #, c-format msgid "select() failed in postmaster: %m" msgstr "échec de select() dans postmaster : %m" -#: postmaster/postmaster.c:1854 +#: postmaster/postmaster.c:1857 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "exécution de SIGKILL pour les processus fils récalcitrants" -#: postmaster/postmaster.c:1875 +#: postmaster/postmaster.c:1878 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "forçage d'un arrêt immédiat car le fichier de verrou du répertoire de données est invalide" -#: postmaster/postmaster.c:1978 postmaster/postmaster.c:2006 +#: postmaster/postmaster.c:1981 postmaster/postmaster.c:2009 #, c-format msgid "incomplete startup packet" msgstr "paquet de démarrage incomplet" -#: postmaster/postmaster.c:1990 +#: postmaster/postmaster.c:1993 #, c-format msgid "invalid length of startup packet" msgstr "longueur invalide du paquet de démarrage" -#: postmaster/postmaster.c:2045 +#: postmaster/postmaster.c:2048 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "échec lors de l'envoi de la réponse de négotiation SSL : %m" -#: postmaster/postmaster.c:2077 +#: postmaster/postmaster.c:2080 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "échec lors de l'envoi de la réponse à la négociation GSSAPI : %m" -#: postmaster/postmaster.c:2107 +#: postmaster/postmaster.c:2110 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "protocole frontal %u.%u non supporté : le serveur supporte de %u.0 à %u.%u" -#: postmaster/postmaster.c:2171 utils/misc/guc.c:7092 utils/misc/guc.c:7128 utils/misc/guc.c:7198 utils/misc/guc.c:8530 utils/misc/guc.c:11486 utils/misc/guc.c:11527 +#: postmaster/postmaster.c:2174 utils/misc/guc.c:7112 utils/misc/guc.c:7148 utils/misc/guc.c:7218 utils/misc/guc.c:8550 utils/misc/guc.c:11506 utils/misc/guc.c:11547 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "valeur invalide pour le paramètre « %s » : « %s »" -#: postmaster/postmaster.c:2174 +#: postmaster/postmaster.c:2177 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Les valeurs valides sont : « false », « 0 », « true », « 1 », « database »." -#: postmaster/postmaster.c:2219 +#: postmaster/postmaster.c:2222 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "" "configuration invalide du paquet de démarrage : terminaison attendue comme\n" "dernier octet" -#: postmaster/postmaster.c:2236 +#: postmaster/postmaster.c:2239 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "aucun nom d'utilisateur PostgreSQL n'a été spécifié dans le paquet de démarrage" -#: postmaster/postmaster.c:2300 +#: postmaster/postmaster.c:2303 #, c-format msgid "the database system is starting up" msgstr "le système de bases de données se lance" -#: postmaster/postmaster.c:2306 +#: postmaster/postmaster.c:2309 #, c-format msgid "the database system is not yet accepting connections" msgstr "le système de bases de données n'accepte pas encore de connexions" -#: postmaster/postmaster.c:2307 +#: postmaster/postmaster.c:2310 #, c-format msgid "Consistent recovery state has not been yet reached." msgstr "L'état de restauration cohérent n'a pas encore été atteint." -#: postmaster/postmaster.c:2311 +#: postmaster/postmaster.c:2314 #, c-format msgid "the database system is not accepting connections" msgstr "le système de bases de données n'accepte pas de connexions" -#: postmaster/postmaster.c:2312 +#: postmaster/postmaster.c:2315 #, c-format msgid "Hot standby mode is disabled." msgstr "Le mode Hot Standby est désactivé" -#: postmaster/postmaster.c:2317 +#: postmaster/postmaster.c:2320 #, c-format msgid "the database system is shutting down" msgstr "le système de base de données s'arrête" -#: postmaster/postmaster.c:2322 +#: postmaster/postmaster.c:2325 #, c-format msgid "the database system is in recovery mode" msgstr "le système de bases de données est en cours de restauration" -#: postmaster/postmaster.c:2327 storage/ipc/procarray.c:463 storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 +#: postmaster/postmaster.c:2330 storage/ipc/procarray.c:464 storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "désolé, trop de clients sont déjà connectés" -#: postmaster/postmaster.c:2417 +#: postmaster/postmaster.c:2420 #, c-format msgid "wrong key in cancel request for process %d" msgstr "mauvaise clé dans la demande d'annulation pour le processus %d" -#: postmaster/postmaster.c:2429 +#: postmaster/postmaster.c:2432 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "le PID %d dans la demande d'annulation ne correspond à aucun processus" -#: postmaster/postmaster.c:2683 +#: postmaster/postmaster.c:2686 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "a reçu SIGHUP, rechargement des fichiers de configuration" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2709 postmaster/postmaster.c:2713 +#: postmaster/postmaster.c:2712 postmaster/postmaster.c:2716 #, c-format msgid "%s was not reloaded" msgstr "%s n'a pas été rechargé" -#: postmaster/postmaster.c:2723 +#: postmaster/postmaster.c:2726 #, c-format msgid "SSL configuration was not reloaded" msgstr "la configuration SSL n'a pas été rechargée" -#: postmaster/postmaster.c:2779 +#: postmaster/postmaster.c:2782 #, c-format msgid "received smart shutdown request" msgstr "a reçu une demande d'arrêt intelligent" -#: postmaster/postmaster.c:2825 +#: postmaster/postmaster.c:2828 #, c-format msgid "received fast shutdown request" msgstr "a reçu une demande d'arrêt rapide" -#: postmaster/postmaster.c:2843 +#: postmaster/postmaster.c:2846 #, c-format msgid "aborting any active transactions" msgstr "annulation des transactions actives" -#: postmaster/postmaster.c:2867 +#: postmaster/postmaster.c:2870 #, c-format msgid "received immediate shutdown request" msgstr "a reçu une demande d'arrêt immédiat" -#: postmaster/postmaster.c:2944 +#: postmaster/postmaster.c:2947 #, c-format msgid "shutdown at recovery target" msgstr "arrêt sur la cible de restauration" -#: postmaster/postmaster.c:2962 postmaster/postmaster.c:2998 +#: postmaster/postmaster.c:2965 postmaster/postmaster.c:3001 msgid "startup process" msgstr "processus de lancement" -#: postmaster/postmaster.c:2965 +#: postmaster/postmaster.c:2968 #, c-format msgid "aborting startup due to startup process failure" msgstr "annulation du démarrage à cause d'un échec dans le processus de lancement" -#: postmaster/postmaster.c:3040 +#: postmaster/postmaster.c:3043 #, c-format msgid "database system is ready to accept connections" msgstr "le système de bases de données est prêt pour accepter les connexions" -#: postmaster/postmaster.c:3061 +#: postmaster/postmaster.c:3064 msgid "background writer process" msgstr "processus d'écriture en tâche de fond" -#: postmaster/postmaster.c:3115 +#: postmaster/postmaster.c:3118 msgid "checkpointer process" msgstr "processus checkpointer" -#: postmaster/postmaster.c:3131 +#: postmaster/postmaster.c:3134 msgid "WAL writer process" msgstr "processus d'écriture des journaux de transaction" -#: postmaster/postmaster.c:3146 +#: postmaster/postmaster.c:3149 msgid "WAL receiver process" msgstr "processus de réception des journaux de transaction" -#: postmaster/postmaster.c:3161 +#: postmaster/postmaster.c:3164 msgid "autovacuum launcher process" msgstr "processus de lancement de l'autovacuum" -#: postmaster/postmaster.c:3179 +#: postmaster/postmaster.c:3182 msgid "archiver process" msgstr "processus d'archivage" -#: postmaster/postmaster.c:3194 +#: postmaster/postmaster.c:3197 msgid "statistics collector process" msgstr "processus de récupération des statistiques" -#: postmaster/postmaster.c:3208 +#: postmaster/postmaster.c:3211 msgid "system logger process" msgstr "processus des journaux applicatifs" -#: postmaster/postmaster.c:3272 +#: postmaster/postmaster.c:3275 #, c-format msgid "background worker \"%s\"" msgstr "processus en tâche de fond « %s »" -#: postmaster/postmaster.c:3356 postmaster/postmaster.c:3376 postmaster/postmaster.c:3383 postmaster/postmaster.c:3401 +#: postmaster/postmaster.c:3359 postmaster/postmaster.c:3379 postmaster/postmaster.c:3386 postmaster/postmaster.c:3404 msgid "server process" msgstr "processus serveur" -#: postmaster/postmaster.c:3455 +#: postmaster/postmaster.c:3458 #, c-format msgid "terminating any other active server processes" msgstr "arrêt des autres processus serveur actifs" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3708 +#: postmaster/postmaster.c:3711 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) a quitté avec le code de sortie %d" -#: postmaster/postmaster.c:3710 postmaster/postmaster.c:3722 postmaster/postmaster.c:3732 postmaster/postmaster.c:3743 +#: postmaster/postmaster.c:3713 postmaster/postmaster.c:3725 postmaster/postmaster.c:3735 postmaster/postmaster.c:3746 #, c-format msgid "Failed process was running: %s" msgstr "Le processus qui a échoué exécutait : %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3719 +#: postmaster/postmaster.c:3722 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) a été arrêté par l'exception 0x%X" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3729 +#: postmaster/postmaster.c:3732 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) a été arrêté par le signal %d : %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3741 +#: postmaster/postmaster.c:3744 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) a quitté avec le statut inattendu %d" -#: postmaster/postmaster.c:3956 +#: postmaster/postmaster.c:3959 #, c-format msgid "abnormal database system shutdown" msgstr "le système de base de données a été arrêté anormalement" -#: postmaster/postmaster.c:3996 +#: postmaster/postmaster.c:3997 +#, c-format +msgid "shutting down due to startup process failure" +msgstr "arrêt à cause d'un échec du processus startup" + +#: postmaster/postmaster.c:4003 +#, c-format +msgid "shutting down because restart_after_crash is off" +msgstr "" + +#: postmaster/postmaster.c:4015 #, c-format msgid "all server processes terminated; reinitializing" msgstr "tous les processus serveur sont arrêtés ; réinitialisation" -#: postmaster/postmaster.c:4170 postmaster/postmaster.c:5530 postmaster/postmaster.c:5921 +#: postmaster/postmaster.c:4189 postmaster/postmaster.c:5548 postmaster/postmaster.c:5939 #, c-format msgid "could not generate random cancel key" msgstr "n'a pas pu générer la clé d'annulation aléatoire" -#: postmaster/postmaster.c:4224 +#: postmaster/postmaster.c:4243 #, c-format msgid "could not fork new process for connection: %m" msgstr "n'a pas pu lancer le nouveau processus fils pour la connexion : %m" -#: postmaster/postmaster.c:4266 +#: postmaster/postmaster.c:4285 msgid "could not fork new process for connection: " msgstr "n'a pas pu lancer le nouveau processus fils pour la connexion : " -#: postmaster/postmaster.c:4372 +#: postmaster/postmaster.c:4391 #, c-format msgid "connection received: host=%s port=%s" msgstr "connexion reçue : hôte=%s port=%s" -#: postmaster/postmaster.c:4377 +#: postmaster/postmaster.c:4396 #, c-format msgid "connection received: host=%s" msgstr "connexion reçue : hôte=%s" -#: postmaster/postmaster.c:4620 +#: postmaster/postmaster.c:4639 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "n'a pas pu exécuter le processus serveur « %s » : %m" -#: postmaster/postmaster.c:4678 +#: postmaster/postmaster.c:4697 #, c-format msgid "could not create backend parameter file mapping: error code %lu" msgstr "n'a pas pu créer le lien vers le fichier de paramètres du processus serveur : code d'erreur %lu" -#: postmaster/postmaster.c:4687 +#: postmaster/postmaster.c:4706 #, c-format msgid "could not map backend parameter memory: error code %lu" msgstr "n'a pas pu mapper la mémoire des paramètres du processus serveur : code d'erreur %lu" -#: postmaster/postmaster.c:4714 +#: postmaster/postmaster.c:4733 #, c-format msgid "subprocess command line too long" msgstr "ligne de commande du sous-processus trop longue" -#: postmaster/postmaster.c:4732 +#: postmaster/postmaster.c:4751 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "échec de l'appel à CreateProcess() : %m (code d'erreur %lu)" -#: postmaster/postmaster.c:4759 +#: postmaster/postmaster.c:4778 #, c-format msgid "could not unmap view of backend parameter file: error code %lu" msgstr "" -#: postmaster/postmaster.c:4763 +#: postmaster/postmaster.c:4782 #, c-format msgid "could not close handle to backend parameter file: error code %lu" msgstr "n'a pas pu fermer le lien vers le fichier de paramètres du processus serveur : code d'erreur %lu" -#: postmaster/postmaster.c:4785 +#: postmaster/postmaster.c:4804 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "abandon après trop de tentatives pour réserver la mémoire partagée" -#: postmaster/postmaster.c:4786 +#: postmaster/postmaster.c:4805 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Ceci pourrait être causé par un logiciel ASLR ou un antivirus." -#: postmaster/postmaster.c:4976 +#: postmaster/postmaster.c:4995 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "la configuration SSL n'a pas pu être chargée dans le processus fils" -#: postmaster/postmaster.c:5102 +#: postmaster/postmaster.c:5121 #, c-format msgid "Please report this to <%s>." msgstr "Merci de signaler ceci à <%s>." -#: postmaster/postmaster.c:5189 +#: postmaster/postmaster.c:5208 #, c-format msgid "database system is ready to accept read only connections" msgstr "le système de bases de données est prêt pour accepter les connexions en lecture seule" -#: postmaster/postmaster.c:5454 +#: postmaster/postmaster.c:5472 #, c-format msgid "could not fork startup process: %m" msgstr "n'a pas pu lancer le processus fils de démarrage : %m" -#: postmaster/postmaster.c:5458 +#: postmaster/postmaster.c:5476 #, c-format msgid "could not fork archiver process: %m" msgstr "n'a pas pu créer un processus fils d'archivage des journaux de transactions : %m" -#: postmaster/postmaster.c:5462 +#: postmaster/postmaster.c:5480 #, c-format msgid "could not fork background writer process: %m" msgstr "" "n'a pas pu créer un processus fils du processus d'écriture en tâche de\n" "fond : %m" -#: postmaster/postmaster.c:5466 +#: postmaster/postmaster.c:5484 #, c-format msgid "could not fork checkpointer process: %m" msgstr "n'a pas pu créer le processus checkpointer : %m" -#: postmaster/postmaster.c:5470 +#: postmaster/postmaster.c:5488 #, c-format msgid "could not fork WAL writer process: %m" msgstr "" "n'a pas pu créer un processus fils du processus d'écriture des journaux de\n" "transaction : %m" -#: postmaster/postmaster.c:5474 +#: postmaster/postmaster.c:5492 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "" "n'a pas pu créer un processus fils de réception des journaux de\n" "transactions : %m" -#: postmaster/postmaster.c:5478 +#: postmaster/postmaster.c:5496 #, c-format msgid "could not fork process: %m" msgstr "n'a pas pu lancer le processus fils : %m" -#: postmaster/postmaster.c:5679 postmaster/postmaster.c:5702 +#: postmaster/postmaster.c:5697 postmaster/postmaster.c:5720 #, c-format msgid "database connection requirement not indicated during registration" msgstr "pré-requis de la connexion à la base non indiqué lors de l'enregistrement" -#: postmaster/postmaster.c:5686 postmaster/postmaster.c:5709 +#: postmaster/postmaster.c:5704 postmaster/postmaster.c:5727 #, c-format msgid "invalid processing mode in background worker" msgstr "mode de traitement invalide dans le processus en tâche de fond" -#: postmaster/postmaster.c:5794 +#: postmaster/postmaster.c:5812 #, c-format msgid "could not fork worker process: %m" msgstr "n'a pas pu créer un processus fils du processus en tâche de fond : %m" -#: postmaster/postmaster.c:5907 +#: postmaster/postmaster.c:5925 #, c-format msgid "no slot available for new worker process" msgstr "aucun slot disponible pour le nouveau processus worker" -#: postmaster/postmaster.c:6240 +#: postmaster/postmaster.c:6259 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "n'a pas pu dupliquer la socket %d pour le serveur : code d'erreur %d" -#: postmaster/postmaster.c:6272 +#: postmaster/postmaster.c:6291 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "n'a pas pu créer la socket héritée : code d'erreur %d\n" -#: postmaster/postmaster.c:6301 +#: postmaster/postmaster.c:6320 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "n'a pas pu ouvrir le fichier des variables moteurs « %s » : %s\n" -#: postmaster/postmaster.c:6308 +#: postmaster/postmaster.c:6327 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "n'a pas pu lire le fichier de configuration serveur « %s » : %s\n" -#: postmaster/postmaster.c:6317 +#: postmaster/postmaster.c:6336 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "n'a pas pu supprimer le fichier « %s » : %s\n" -#: postmaster/postmaster.c:6334 +#: postmaster/postmaster.c:6353 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "" "n'a pas pu exécuter \"map\" la vue des variables serveurs : code\n" "d'erreur %lu\n" -#: postmaster/postmaster.c:6343 +#: postmaster/postmaster.c:6362 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "" "n'a pas pu exécuter \"unmap\" sur la vue des variables serveurs : code\n" "d'erreur %lu\n" -#: postmaster/postmaster.c:6350 +#: postmaster/postmaster.c:6369 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "" "n'a pas pu fermer le lien vers les variables des paramètres du serveur :\n" "code d'erreur %lu\n" -#: postmaster/postmaster.c:6526 +#: postmaster/postmaster.c:6546 #, c-format msgid "could not read exit code for process\n" msgstr "n'a pas pu lire le code de sortie du processus\n" -#: postmaster/postmaster.c:6531 +#: postmaster/postmaster.c:6551 #, c-format msgid "could not post child completion status\n" msgstr "n'a pas pu poster le statut de fin de l'enfant\n" -#: postmaster/syslogger.c:473 postmaster/syslogger.c:1152 +#: postmaster/syslogger.c:474 postmaster/syslogger.c:1153 #, c-format msgid "could not read from logger pipe: %m" msgstr "n'a pas pu lire à partir du tube des journaux applicatifs : %m" -#: postmaster/syslogger.c:570 postmaster/syslogger.c:584 +#: postmaster/syslogger.c:571 postmaster/syslogger.c:585 #, c-format msgid "could not create pipe for syslog: %m" msgstr "n'a pas pu créer un tube pour syslog : %m" -#: postmaster/syslogger.c:635 +#: postmaster/syslogger.c:636 #, c-format msgid "could not fork system logger: %m" msgstr "n'a pas pu lancer le processus des journaux applicatifs : %m" -#: postmaster/syslogger.c:671 +#: postmaster/syslogger.c:672 #, c-format msgid "redirecting log output to logging collector process" msgstr "redirection des traces vers le processus de récupération des traces" -#: postmaster/syslogger.c:672 +#: postmaster/syslogger.c:673 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "Les prochaines traces apparaîtront dans le répertoire « %s »." -#: postmaster/syslogger.c:680 +#: postmaster/syslogger.c:681 #, c-format msgid "could not redirect stdout: %m" msgstr "n'a pas pu rediriger la sortie (stdout) : %m" -#: postmaster/syslogger.c:685 postmaster/syslogger.c:702 +#: postmaster/syslogger.c:686 postmaster/syslogger.c:703 #, c-format msgid "could not redirect stderr: %m" msgstr "n'a pas pu rediriger la sortie des erreurs (stderr) : %m" -#: postmaster/syslogger.c:1107 +#: postmaster/syslogger.c:1108 #, c-format msgid "could not write to log file: %s\n" msgstr "n'a pas pu écrire dans le journal applicatif : %s\n" -#: postmaster/syslogger.c:1224 +#: postmaster/syslogger.c:1225 #, c-format msgid "could not open log file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier applicatif « %s » : %m" -#: postmaster/syslogger.c:1286 postmaster/syslogger.c:1336 +#: postmaster/syslogger.c:1287 postmaster/syslogger.c:1337 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "désactivation de la rotation automatique (utilisez SIGHUP pour la réactiver)" @@ -18856,7 +18896,7 @@ msgstr "nom du fichier trop long pour le format tar : « %s »" #: replication/basebackup.c:1857 #, c-format msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" -msgstr "cible du lien symbolique trop long pour le format tar : nom de fichier « %s », cible « %s »" +msgstr "cible du lien symbolique trop longue pour le format tar : nom de fichier « %s », cible « %s »" #: replication/libpqwalreceiver/libpqwalreceiver.c:227 #, c-format @@ -18868,139 +18908,139 @@ msgstr "n'a pas pu effacer le search_path : %s" msgid "invalid connection string syntax: %s" msgstr "syntaxe de la chaîne de connexion invalide : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:281 +#: replication/libpqwalreceiver/libpqwalreceiver.c:282 #, c-format msgid "could not parse connection string: %s" msgstr "n'a pas pu analyser la chaîne de connexion : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:353 +#: replication/libpqwalreceiver/libpqwalreceiver.c:355 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "" "n'a pas pu recevoir l'identifiant du système de bases de données et\n" "l'identifiant de la timeline à partir du serveur principal : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:364 replication/libpqwalreceiver/libpqwalreceiver.c:588 +#: replication/libpqwalreceiver/libpqwalreceiver.c:367 replication/libpqwalreceiver/libpqwalreceiver.c:601 #, c-format msgid "invalid response from primary server" msgstr "réponse invalide du serveur principal" -#: replication/libpqwalreceiver/libpqwalreceiver.c:365 +#: replication/libpqwalreceiver/libpqwalreceiver.c:368 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "" "N'a pas pu identifier le système : a récupéré %d lignes et %d champs,\n" "attendait %d lignes et %d champs (ou plus)." -#: replication/libpqwalreceiver/libpqwalreceiver.c:440 replication/libpqwalreceiver/libpqwalreceiver.c:446 replication/libpqwalreceiver/libpqwalreceiver.c:475 +#: replication/libpqwalreceiver/libpqwalreceiver.c:444 replication/libpqwalreceiver/libpqwalreceiver.c:451 replication/libpqwalreceiver/libpqwalreceiver.c:481 #, c-format msgid "could not start WAL streaming: %s" msgstr "n'a pas pu démarrer l'envoi des WAL : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:498 +#: replication/libpqwalreceiver/libpqwalreceiver.c:505 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "n'a pas pu transmettre le message de fin d'envoi de flux au primaire : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:520 +#: replication/libpqwalreceiver/libpqwalreceiver.c:528 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "ensemble de résultats inattendu après la fin du flux de réplication" -#: replication/libpqwalreceiver/libpqwalreceiver.c:534 +#: replication/libpqwalreceiver/libpqwalreceiver.c:543 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "erreur lors de l'arrêt de la copie en flux : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:543 +#: replication/libpqwalreceiver/libpqwalreceiver.c:553 #, c-format msgid "error reading result of streaming command: %s" msgstr "erreur lors de la lecture de la commande de flux : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:551 replication/libpqwalreceiver/libpqwalreceiver.c:785 +#: replication/libpqwalreceiver/libpqwalreceiver.c:562 replication/libpqwalreceiver/libpqwalreceiver.c:800 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "résultat inattendu après CommandComplete : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:577 +#: replication/libpqwalreceiver/libpqwalreceiver.c:589 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "n'a pas pu recevoir le fichier historique à partir du serveur principal : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:589 +#: replication/libpqwalreceiver/libpqwalreceiver.c:602 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Attendait 1 ligne avec 2 champs, a obtenu %d lignes avec %d champs." -#: replication/libpqwalreceiver/libpqwalreceiver.c:749 replication/libpqwalreceiver/libpqwalreceiver.c:800 replication/libpqwalreceiver/libpqwalreceiver.c:806 +#: replication/libpqwalreceiver/libpqwalreceiver.c:763 replication/libpqwalreceiver/libpqwalreceiver.c:816 replication/libpqwalreceiver/libpqwalreceiver.c:823 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "n'a pas pu recevoir des données du flux de WAL : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:825 +#: replication/libpqwalreceiver/libpqwalreceiver.c:843 #, c-format msgid "could not send data to WAL stream: %s" msgstr "n'a pas pu transmettre les données au flux WAL : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:878 +#: replication/libpqwalreceiver/libpqwalreceiver.c:897 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "n'a pas pu créer le slot de réplication « %s » : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:923 +#: replication/libpqwalreceiver/libpqwalreceiver.c:943 #, c-format msgid "invalid query response" msgstr "réponse à la requête invalide" -#: replication/libpqwalreceiver/libpqwalreceiver.c:924 +#: replication/libpqwalreceiver/libpqwalreceiver.c:944 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Attendait %d champs, a obtenu %d champs." -#: replication/libpqwalreceiver/libpqwalreceiver.c:994 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1014 #, c-format msgid "the query interface requires a database connection" msgstr "l'interface de la requête requiert une connexion à une base" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1025 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1045 msgid "empty query" msgstr "requête vide" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1031 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1051 msgid "unexpected pipeline mode" msgstr "mode pipeline inattendu" -#: replication/logical/launcher.c:292 +#: replication/logical/launcher.c:286 #, c-format msgid "cannot start logical replication workers when max_replication_slots = 0" msgstr "ne peut pas démarrer les processus worker de la réplication logique quand max_replication_slots = 0" -#: replication/logical/launcher.c:372 +#: replication/logical/launcher.c:366 #, c-format msgid "out of logical replication worker slots" msgstr "plus de slots de processus worker pour la réplication logique" -#: replication/logical/launcher.c:373 +#: replication/logical/launcher.c:367 #, c-format msgid "You might need to increase max_logical_replication_workers." msgstr "Vous pourriez avoir besoin d'augmenter max_logical_replication_workers." -#: replication/logical/launcher.c:428 +#: replication/logical/launcher.c:422 #, c-format msgid "out of background worker slots" msgstr "plus de slots de processus en tâche de fond" -#: replication/logical/launcher.c:429 +#: replication/logical/launcher.c:423 #, c-format msgid "You might need to increase max_worker_processes." msgstr "Vous pourriez avoir besoin d'augmenter max_worker_processes." -#: replication/logical/launcher.c:583 +#: replication/logical/launcher.c:577 #, c-format msgid "logical replication worker slot %d is empty, cannot attach" msgstr "le slot %d du processus de réplication logique est vide, ne peut pas s'y attacher" -#: replication/logical/launcher.c:592 +#: replication/logical/launcher.c:586 #, c-format msgid "logical replication worker slot %d is already used by another worker, cannot attach" msgstr "le slot %d du processus de réplication logique est déjà utilisé par un autre processus, ne peut pas s'attacher" @@ -19212,7 +19252,7 @@ msgstr "l'origine de réplication d'OID %d est déjà active pour le PID %d" msgid "could not find free replication state slot for replication origin with OID %u" msgstr "n'a pas pu trouver de slot d'état de réplication libre pour l'origine de réplication d'OID %u" -#: replication/logical/origin.c:941 replication/logical/origin.c:1128 replication/slot.c:1798 +#: replication/logical/origin.c:941 replication/logical/origin.c:1128 replication/slot.c:1840 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Augmentez max_replication_slots et recommencez." @@ -19264,29 +19304,29 @@ msgstr "la relation cible de la réplication logique « %s.%s » n'existe pas" msgid "logical replication target relation \"%s.%s\" uses system columns in REPLICA IDENTITY index" msgstr "la relation cible « %s.%s » de réplication logique utilise des colonnes systèmes dans l'index REPLICA IDENTITY" -#: replication/logical/reorderbuffer.c:3773 +#: replication/logical/reorderbuffer.c:3800 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "n'a pas pu écrire dans le fichier pour le XID %u : %m" -#: replication/logical/reorderbuffer.c:4116 replication/logical/reorderbuffer.c:4141 +#: replication/logical/reorderbuffer.c:4144 replication/logical/reorderbuffer.c:4169 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "n'a pas pu lire le fichier « reorderbuffer spill » : %m" -#: replication/logical/reorderbuffer.c:4120 replication/logical/reorderbuffer.c:4145 +#: replication/logical/reorderbuffer.c:4148 replication/logical/reorderbuffer.c:4173 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "" "n'a pas pu lire à partir du fichier « reorderbuffer spill » : a lu seulement %d octets\n" "sur %u" -#: replication/logical/reorderbuffer.c:4393 +#: replication/logical/reorderbuffer.c:4422 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "n'a pas pu supprimer le fichier « %s » pendant la suppression de pg_replslot/%s/xid* : %m" -#: replication/logical/reorderbuffer.c:4883 +#: replication/logical/reorderbuffer.c:4912 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "n'a pas pu lire à partir du fichier « %s » : lu %d octets au lieu de %d octets" @@ -19365,277 +19405,267 @@ msgstr "n'a pas pu analyser le mode du fichier « %s »" msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "le worker de synchronisation de table en réplication logique pour la souscription « %s », table « %s », a terminé" -#: replication/logical/tablesync.c:722 replication/logical/tablesync.c:761 +#: replication/logical/tablesync.c:727 replication/logical/tablesync.c:770 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "n'a pas pu récupérer l'information sur la table « %s.%s » à partir du publieur : %s" -#: replication/logical/tablesync.c:728 +#: replication/logical/tablesync.c:734 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "table « %s.%s » non trouvée sur le publieur" -#: replication/logical/tablesync.c:848 +#: replication/logical/tablesync.c:858 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "n'a pas pu lancer la copie initiale du contenu de la table « %s.%s » : %s" -#: replication/logical/tablesync.c:1046 +#: replication/logical/tablesync.c:1059 #, c-format msgid "table copy could not start transaction on publisher: %s" msgstr "la copie de table n'a pas pu démarrer la transaction sur le publieur : %s" -#: replication/logical/tablesync.c:1094 +#: replication/logical/tablesync.c:1107 #, c-format msgid "replication origin \"%s\" already exists" msgstr "l'origine de réplication « %s » existe déjà" -#: replication/logical/tablesync.c:1106 +#: replication/logical/tablesync.c:1120 #, c-format msgid "table copy could not finish transaction on publisher: %s" msgstr "la copie de table n'a pas pu finir la transaction sur le publieur : %s" -#: replication/logical/worker.c:490 +#: replication/logical/worker.c:530 #, c-format msgid "processing remote data for replication target relation \"%s.%s\" column \"%s\", remote type %s, local type %s" msgstr "traitement des données distantes pour la relation cible « %s.%s » de réplication logique, colonne « %s », type distant %s, type local %s" -#: replication/logical/worker.c:570 replication/logical/worker.c:699 +#: replication/logical/worker.c:610 replication/logical/worker.c:739 #, c-format msgid "incorrect binary data format in logical replication column %d" msgstr "format des données binaires incorrect dans la colonne de réplication logique %d" -#: replication/logical/worker.c:778 -#, c-format -msgid "ORIGIN message sent out of order" -msgstr "message ORIGIN en désordre" - -#: replication/logical/worker.c:1037 replication/logical/worker.c:1049 +#: replication/logical/worker.c:1111 replication/logical/worker.c:1125 #, c-format msgid "could not read from streaming transaction's changes file \"%s\": %m" msgstr "n'a pas pu lire à partir du fichier de changements de transaction en flux « %s » : %m" -#: replication/logical/worker.c:1274 +#: replication/logical/worker.c:1355 #, c-format msgid "publisher did not send replica identity column expected by the logical replication target relation \"%s.%s\"" msgstr "le publieur n'a pas envoyé la colonne d'identité du réplicat attendue par la relation cible « %s.%s » de la réplication logique" -#: replication/logical/worker.c:1281 +#: replication/logical/worker.c:1362 #, c-format msgid "logical replication target relation \"%s.%s\" has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL" msgstr "la relation cible « %s.%s » de réplication logique n'a ni un index REPLICA IDENTITY ni une clé primaire, et la relation publiée n'a pas REPLICA IDENTITY FULL" -#: replication/logical/worker.c:1994 -#, c-format -msgid "invalid logical replication message type \"%c\"" -msgstr "type de message « %c » de la réplication logique invalide" - -#: replication/logical/worker.c:2145 +#: replication/logical/worker.c:2241 #, c-format msgid "data stream from publisher has ended" msgstr "le flux de données provenant du publieur s'est terminé" -#: replication/logical/worker.c:2295 +#: replication/logical/worker.c:2392 #, c-format msgid "terminating logical replication worker due to timeout" msgstr "arrêt du processus worker de la réplication logique suite à l'expiration du délai de réplication" -#: replication/logical/worker.c:2442 +#: replication/logical/worker.c:2540 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was removed" msgstr "le processus apply de réplication logique pour la souscription « %s » s'arrêtera car la souscription a été supprimée" -#: replication/logical/worker.c:2456 +#: replication/logical/worker.c:2554 #, c-format msgid "logical replication apply worker for subscription \"%s\" will stop because the subscription was disabled" msgstr "le processus apply de réplication logique pour la souscription « %s » s'arrêtera car la souscription a été désactivée" -#: replication/logical/worker.c:2478 +#: replication/logical/worker.c:2576 #, c-format msgid "logical replication apply worker for subscription \"%s\" will restart because of a parameter change" msgstr "le processus apply de réplication logique pour la souscription « %s » redémarrera car un paramètre a été modifié" -#: replication/logical/worker.c:2641 replication/logical/worker.c:2663 +#: replication/logical/worker.c:2741 replication/logical/worker.c:2763 #, c-format msgid "could not read from streaming transaction's subxact file \"%s\": %m" msgstr "n'a pas pu lire à partir du fichier subxact de transaction en flux « %s » : %m" -#: replication/logical/worker.c:3009 +#: replication/logical/worker.c:3122 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "le processus apply de réplication logique pour la souscription %u ne démarrera pas car la souscription a été désactivée au démarrage" -#: replication/logical/worker.c:3021 +#: replication/logical/worker.c:3134 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "le processus apply de réplication logique pour la souscription « %s » ne démarrera pas car la souscription a été désactivée au démarrage" -#: replication/logical/worker.c:3039 +#: replication/logical/worker.c:3152 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "le processus de synchronisation des tables en réplication logique pour la souscription « %s », table « %s » a démarré" -#: replication/logical/worker.c:3043 +#: replication/logical/worker.c:3156 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "le processus apply de réplication logique pour la souscription « %s » a démarré" -#: replication/logical/worker.c:3080 +#: replication/logical/worker.c:3194 #, c-format msgid "subscription has no replication slot set" msgstr "la souscription n'a aucun ensemble de slot de réplication" -#: replication/pgoutput/pgoutput.c:198 +#: replication/pgoutput/pgoutput.c:195 #, c-format msgid "invalid proto_version" msgstr "proto_version invalide" -#: replication/pgoutput/pgoutput.c:203 +#: replication/pgoutput/pgoutput.c:200 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version « %s » en dehors des limites" -#: replication/pgoutput/pgoutput.c:220 +#: replication/pgoutput/pgoutput.c:217 #, c-format msgid "invalid publication_names syntax" msgstr "syntaxe publication_names invalide" -#: replication/pgoutput/pgoutput.c:290 +#: replication/pgoutput/pgoutput.c:287 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "le client a envoyé proto_version=%d mais nous supportons seulement le protocole %d et les protocoles antérieurs" -#: replication/pgoutput/pgoutput.c:296 +#: replication/pgoutput/pgoutput.c:293 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "le client a envoyé proto_version=%d mais nous supportons seulement le protocole %d et les protocoles supérieurs" -#: replication/pgoutput/pgoutput.c:302 +#: replication/pgoutput/pgoutput.c:299 #, c-format msgid "publication_names parameter missing" msgstr "paramètre publication_names manquant" -#: replication/pgoutput/pgoutput.c:315 +#: replication/pgoutput/pgoutput.c:312 #, c-format msgid "requested proto_version=%d does not support streaming, need %d or higher" msgstr "proto_version=%d demandé, mais ne supporte par le flux, nécessite %d ou supérieur" -#: replication/pgoutput/pgoutput.c:320 +#: replication/pgoutput/pgoutput.c:317 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "flux demandé, mais non supporté par le plugin de sortie" -#: replication/slot.c:182 +#: replication/slot.c:180 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "le nom du slot de réplication « %s » est trop court" -#: replication/slot.c:191 +#: replication/slot.c:189 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "le nom du slot de réplication « %s » est trop long" -#: replication/slot.c:204 +#: replication/slot.c:202 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "le nom du slot de réplication « %s » contient un caractère invalide" -#: replication/slot.c:206 +#: replication/slot.c:204 #, c-format msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "Les noms des slots de réplication peuvent seulement contenir des lettres, des nombres et des tirets bas." -#: replication/slot.c:260 +#: replication/slot.c:258 #, c-format msgid "replication slot \"%s\" already exists" msgstr "le slot de réplication « %s » existe déjà" -#: replication/slot.c:270 +#: replication/slot.c:268 #, c-format msgid "all replication slots are in use" msgstr "tous les slots de réplication sont utilisés" -#: replication/slot.c:271 +#: replication/slot.c:269 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Libérez un slot ou augmentez max_replication_slots." -#: replication/slot.c:424 replication/slotfuncs.c:761 utils/adt/pgstatfuncs.c:2227 +#: replication/slot.c:402 replication/slotfuncs.c:761 utils/adt/pgstatfuncs.c:2227 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "le slot de réplication « %s » n'existe pas" -#: replication/slot.c:462 replication/slot.c:1043 +#: replication/slot.c:448 replication/slot.c:1018 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "le slot de réplication « %s » est actif pour le PID %d" -#: replication/slot.c:701 replication/slot.c:1350 replication/slot.c:1733 +#: replication/slot.c:676 replication/slot.c:1392 replication/slot.c:1775 #, c-format msgid "could not remove directory \"%s\"" msgstr "n'a pas pu supprimer le répertoire « %s »" -#: replication/slot.c:1078 +#: replication/slot.c:1053 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "les slots de réplications peuvent seulement être utilisés si max_replication_slots > 0" -#: replication/slot.c:1083 +#: replication/slot.c:1058 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "les slots de réplication peuvent seulement être utilisés si wal_level >= replica" -#: replication/slot.c:1239 +#: replication/slot.c:1237 #, c-format -msgid "terminating process %d because replication slot \"%s\" is too far behind" -msgstr "arrêt du processus %d parce que le slot de réplication « %s » est trop en retard" +msgid "terminating process %d to release replication slot \"%s\"" +msgstr "arrêt du processus %d pour relâcher le slot de réplication « %s »" -#: replication/slot.c:1258 +#: replication/slot.c:1275 #, c-format msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" msgstr "invalidation du slot « %s » parce que son restart_lsn %X/%X dépasse max_slot_wal_keep_size" -#: replication/slot.c:1671 +#: replication/slot.c:1713 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "le fichier « %s » du slot de réplication a le nombre magique %u au lieu de %u" -#: replication/slot.c:1678 +#: replication/slot.c:1720 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "le fichier « %s » du slot de réplication a une version %u non supportée" -#: replication/slot.c:1685 +#: replication/slot.c:1727 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "le slot de réplication « %s » a une taille %u corrompue" -#: replication/slot.c:1721 +#: replication/slot.c:1763 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "différence de somme de contrôle pour le fichier de slot de réplication « %s » : est %u, devrait être %u" -#: replication/slot.c:1755 +#: replication/slot.c:1797 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "le slot de réplication logique « %s » existe mais, wal_level < logical" -#: replication/slot.c:1757 +#: replication/slot.c:1799 #, c-format msgid "Change wal_level to be logical or higher." msgstr "Modifiez wal_level pour valoir logical ou supérieur." -#: replication/slot.c:1761 +#: replication/slot.c:1803 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "le slot de réplication physique « %s » existe mais, wal_level < replica" -#: replication/slot.c:1763 +#: replication/slot.c:1805 #, c-format msgid "Change wal_level to be replica or higher." msgstr "Modifiez wal_level pour valoir replica ou supérieur." -#: replication/slot.c:1797 +#: replication/slot.c:1839 #, c-format msgid "too many replication slots active before shutdown" msgstr "trop de slots de réplication actifs avant l'arrêt" @@ -19690,41 +19720,41 @@ msgstr "ne peut pas copier le slot de réplication logique non terminé « %s » msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "Ré-essayez quand la valeur de confirmed_flush_lsn pour le slot de réplication source est valide." -#: replication/syncrep.c:269 +#: replication/syncrep.c:268 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "" "annulation de l'attente pour la réplication synchrone et arrêt des connexions\n" "suite à la demande de l'administrateur" -#: replication/syncrep.c:270 replication/syncrep.c:287 +#: replication/syncrep.c:269 replication/syncrep.c:286 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "" "La transaction a déjà enregistré les données localement, mais il se peut que\n" "cela n'ait pas été répliqué sur le serveur en standby." -#: replication/syncrep.c:286 +#: replication/syncrep.c:285 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "annulation de l'attente pour la réplication synchrone à la demande de l'utilisateur" -#: replication/syncrep.c:495 +#: replication/syncrep.c:494 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "le serveur « %s » en standby est maintenant un serveur standby synchrone de priorité %u" -#: replication/syncrep.c:499 +#: replication/syncrep.c:498 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "le serveur standby « %s » est maintenant un candidat dans le quorum des standbys synchrones" -#: replication/syncrep.c:1046 +#: replication/syncrep.c:1045 #, c-format msgid "synchronous_standby_names parser failed" msgstr "l'analyseur du paramètre synchronous_standby_names a échoué" -#: replication/syncrep.c:1052 +#: replication/syncrep.c:1051 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "le nombre de standbys synchrones (%d) doit être supérieur à zéro" @@ -19734,76 +19764,76 @@ msgstr "le nombre de standbys synchrones (%d) doit être supérieur à zéro" msgid "terminating walreceiver process due to administrator command" msgstr "arrêt du processus walreceiver suite à la demande de l'administrateur" -#: replication/walreceiver.c:285 +#: replication/walreceiver.c:288 #, c-format msgid "could not connect to the primary server: %s" msgstr "n'a pas pu se connecter au serveur principal : %s" -#: replication/walreceiver.c:331 +#: replication/walreceiver.c:335 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "" "l'identifiant du système de bases de données diffère entre le serveur principal\n" "et le serveur en attente" -#: replication/walreceiver.c:332 +#: replication/walreceiver.c:336 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "" "L'identifiant du serveur principal est %s, l'identifiant du serveur en attente\n" "est %s." -#: replication/walreceiver.c:342 +#: replication/walreceiver.c:347 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "la plus grande timeline %u du serveur principal est derrière la timeline de restauration %u" -#: replication/walreceiver.c:396 +#: replication/walreceiver.c:401 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "démarré le flux des journaux depuis le principal à %X/%X sur la timeline %u" -#: replication/walreceiver.c:400 +#: replication/walreceiver.c:405 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "recommence le flux WAL à %X/%X sur la timeline %u" -#: replication/walreceiver.c:428 +#: replication/walreceiver.c:434 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "ne peut pas continuer le flux de journaux de transactions, la récupération est déjà terminée" -#: replication/walreceiver.c:465 +#: replication/walreceiver.c:471 #, c-format msgid "replication terminated by primary server" msgstr "réplication terminée par le serveur primaire" -#: replication/walreceiver.c:466 +#: replication/walreceiver.c:472 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "Fin du WAL atteint sur la timeline %u à %X/%X." -#: replication/walreceiver.c:554 +#: replication/walreceiver.c:561 #, c-format msgid "terminating walreceiver due to timeout" msgstr "arrêt du processus walreceiver suite à l'expiration du délai de réplication" -#: replication/walreceiver.c:592 +#: replication/walreceiver.c:599 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "le serveur principal ne contient plus de WAL sur la timeline %u demandée" -#: replication/walreceiver.c:608 replication/walreceiver.c:903 +#: replication/walreceiver.c:615 replication/walreceiver.c:910 #, c-format msgid "could not close log segment %s: %m" msgstr "n'a pas pu fermer le journal de transactions %s : %m" -#: replication/walreceiver.c:727 +#: replication/walreceiver.c:734 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "récupération du fichier historique pour la timeline %u à partir du serveur principal" -#: replication/walreceiver.c:950 +#: replication/walreceiver.c:957 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "n'a pas pu écrire le journal de transactions %s au décalage %u, longueur %lu : %m" @@ -20497,7 +20527,7 @@ msgstr "l'objet de statistiques « %s.%s » n'a pas pu être calculé pour la re msgid "relation \"pg_statistic\" does not have a composite type" msgstr "la relation « pg_statistic » n'a pas un type composite" -#: statistics/mcv.c:1368 utils/adt/jsonfuncs.c:1941 +#: statistics/mcv.c:1371 utils/adt/jsonfuncs.c:1941 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "" @@ -20536,7 +20566,7 @@ msgstr "n'a pas pu écrire le bloc %u de %s" #: storage/buffer/bufmgr.c:4526 #, c-format msgid "Multiple failures --- write error might be permanent." -msgstr "Échecs multiples --- l'erreur d'écriture pourrait être permanent." +msgstr "Échecs multiples --- l'erreur d'écriture pourrait être permanente." #: storage/buffer/bufmgr.c:4547 storage/buffer/bufmgr.c:4566 #, c-format @@ -20606,7 +20636,7 @@ msgstr "échec de getrlimit : %m" #: storage/file/fd.c:1019 #, c-format msgid "insufficient file descriptors available to start server process" -msgstr "nombre de descripteurs de fichier insuffisants pour lancer le processus serveur" +msgstr "nombre de descripteurs de fichier insuffisant pour lancer le processus serveur" #: storage/file/fd.c:1020 #, c-format @@ -20758,17 +20788,17 @@ msgstr "n'a pas pu fermer le segment de mémoire partagée « %s » : %m" msgid "could not duplicate handle for \"%s\": %m" msgstr "n'a pas pu dupliquer le lien pour « %s » : %m" -#: storage/ipc/procarray.c:3724 +#: storage/ipc/procarray.c:3747 #, c-format msgid "database \"%s\" is being used by prepared transactions" msgstr "la base de données « %s » est utilisée par des transactions préparées." -#: storage/ipc/procarray.c:3756 storage/ipc/signalfuncs.c:218 +#: storage/ipc/procarray.c:3779 storage/ipc/signalfuncs.c:219 #, c-format msgid "must be a superuser to terminate superuser process" msgstr "doit être super-utilisateur pour terminer le processus d'un super-utilisateur" -#: storage/ipc/procarray.c:3763 storage/ipc/signalfuncs.c:223 +#: storage/ipc/procarray.c:3786 storage/ipc/signalfuncs.c:224 #, c-format msgid "must be a member of the role whose process is being terminated or member of pg_signal_backend" msgstr "doit être un membre du rôle dont le processus est en cours d'arrêt ou membre de pg_signal_backend" @@ -20776,7 +20806,7 @@ msgstr "doit être un membre du rôle dont le processus est en cours d'arrêt ou #: storage/ipc/shm_mq.c:368 #, c-format msgid "cannot send a message of size %zu via shared memory queue" -msgstr "ne peut pas pu envoyer un message de taille %zu via la queue en mémoire partagée" +msgstr "ne peut pas envoyer un message de taille %zu via la queue en mémoire partagée" #: storage/ipc/shm_mq.c:694 #, c-format @@ -20813,12 +20843,12 @@ msgstr "pas assez de mémoire partagée pour la structure de données « %s » ( msgid "requested shared memory size overflows size_t" msgstr "la taille de la mémoire partagée demandée dépasse size_t" -#: storage/ipc/signalfuncs.c:68 storage/ipc/signalfuncs.c:260 utils/adt/mcxtfuncs.c:196 +#: storage/ipc/signalfuncs.c:68 utils/adt/mcxtfuncs.c:204 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "le PID %d n'est pas un processus du serveur PostgreSQL" -#: storage/ipc/signalfuncs.c:99 storage/lmgr/proc.c:1454 utils/adt/mcxtfuncs.c:210 +#: storage/ipc/signalfuncs.c:99 storage/lmgr/proc.c:1454 utils/adt/mcxtfuncs.c:212 #, c-format msgid "could not send signal to process %d: %m" msgstr "n'a pas pu envoyer le signal au processus %d : %m" @@ -20833,38 +20863,33 @@ msgstr "doit être super-utilisateur pour annuler la requête d'un super-utilisa msgid "must be a member of the role whose query is being canceled or member of pg_signal_backend" msgstr "doit être un membre du rôle dont la requête est en cours d'annulation ou membre de pg_signal_backend" -#: storage/ipc/signalfuncs.c:164 +#: storage/ipc/signalfuncs.c:165 #, c-format msgid "could not check the existence of the backend with PID %d: %m" msgstr "n'a pas pu vérifier l'existence du processus serveur de PID %d : %m" -#: storage/ipc/signalfuncs.c:182 +#: storage/ipc/signalfuncs.c:183 #, c-format msgid "backend with PID %d did not terminate within %lld milliseconds" msgstr "le processus serveur de PID %d ne s'est pas terminé dans les %lld secondes" -#: storage/ipc/signalfuncs.c:211 +#: storage/ipc/signalfuncs.c:212 #, c-format msgid "\"timeout\" must not be negative" msgstr "« timeout » ne doit pas être négatif" -#: storage/ipc/signalfuncs.c:253 -#, c-format -msgid "\"timeout\" must not be negative or zero" -msgstr "« timeout » ne doit pas être négatif ou nul" - -#: storage/ipc/signalfuncs.c:299 +#: storage/ipc/signalfuncs.c:264 #, c-format msgid "must be superuser to rotate log files with adminpack 1.0" msgstr "doit être super-utilisateur pour exécuter la rotation des journaux applicatifs avec adminpack 1.0" #. translator: %s is a SQL function name -#: storage/ipc/signalfuncs.c:301 utils/adt/genfile.c:256 +#: storage/ipc/signalfuncs.c:266 utils/adt/genfile.c:255 #, c-format msgid "Consider using %s, which is part of core, instead." msgstr "Considérer l'utilisation de %s, qui fait partie de l'installation par défaut, à la place." -#: storage/ipc/signalfuncs.c:307 storage/ipc/signalfuncs.c:327 +#: storage/ipc/signalfuncs.c:272 storage/ipc/signalfuncs.c:292 #, c-format msgid "rotation not possible because log collection not active" msgstr "rotation impossible car la récupération des journaux applicatifs n'est pas activée" @@ -20879,7 +20904,7 @@ msgstr "restauration toujours en attente après %ld.%03d ms : %s" msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "la restauration a fini d'attendre après %ld.%03d ms : %s" -#: storage/ipc/standby.c:878 tcop/postgres.c:3307 +#: storage/ipc/standby.c:878 tcop/postgres.c:3317 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "annulation de la requête à cause d'un conflit avec la restauration" @@ -20930,7 +20955,7 @@ msgstr "drapeaux invalides pour l'ouverture d'un « Large Object » : %d" #: storage/large_object/inv_api.c:462 #, c-format msgid "invalid whence setting: %d" -msgstr "paramètrage de « whence » invalide : %d" +msgstr "paramétrage de « whence » invalide : %d" #: storage/large_object/inv_api.c:634 #, c-format @@ -21173,7 +21198,7 @@ msgstr "le processus %d est toujours en attente de %s sur %s après %ld.%03d ms" msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "le processus %d a acquis %s sur %s après %ld.%03d ms" -#: storage/lmgr/proc.c:1598 +#: storage/lmgr/proc.c:1599 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "le processus %d a échoué pour l'acquisition de %s sur %s après %ld.%03d ms" @@ -21196,7 +21221,7 @@ msgstr "pointeur de ligne corrompu : %u" #: storage/page/bufpage.c:795 storage/page/bufpage.c:1259 #, c-format msgid "corrupted item lengths: total %u, available space %u" -msgstr "longueurs d'élément corrompus : total %u, espace disponible %u" +msgstr "longueurs d'élément corrompues : total %u, espace disponible %u" #: storage/page/bufpage.c:1085 storage/page/bufpage.c:1226 storage/page/bufpage.c:1323 storage/page/bufpage.c:1435 #, c-format @@ -21313,7 +21338,7 @@ msgstr "taille de l'argument %d invalide dans le message d'appel de la fonction" msgid "incorrect binary data format in function argument %d" msgstr "format des données binaires incorrect dans l'argument de la fonction %d" -#: tcop/postgres.c:446 tcop/postgres.c:4706 +#: tcop/postgres.c:446 tcop/postgres.c:4716 #, c-format msgid "invalid frontend message type %d" msgstr "type %d du message de l'interface invalide" @@ -21426,7 +21451,7 @@ msgstr "" #: tcop/postgres.c:2474 #, c-format msgid "User was connected to a database that must be dropped." -msgstr "L'utilisateur était connecté à une base de donnée qui doit être supprimé." +msgstr "L'utilisateur était connecté à une base de donnée qui doit être supprimée." #: tcop/postgres.c:2513 #, c-format @@ -21466,7 +21491,7 @@ msgstr "" "courante et de quitter car un autre processus serveur a quitté anormalement\n" "et qu'il existe probablement de la mémoire partagée corrompue." -#: tcop/postgres.c:2882 tcop/postgres.c:3237 +#: tcop/postgres.c:2882 tcop/postgres.c:3243 #, c-format msgid "In a moment you should be able to reconnect to the database and repeat your command." msgstr "" @@ -21481,79 +21506,79 @@ msgstr "arrêt des connexions suite à la commande d'arrêt immédiat" #: tcop/postgres.c:2975 #, c-format msgid "floating-point exception" -msgstr "exception dû à une virgule flottante" +msgstr "exception due à une virgule flottante" #: tcop/postgres.c:2976 #, c-format msgid "An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero." msgstr "Une opération invalide sur les virgules flottantes a été signalée. Ceci signifie probablement un résultat en dehors de l'échelle ou une opération invalide telle qu'une division par zéro." -#: tcop/postgres.c:3141 +#: tcop/postgres.c:3147 #, c-format msgid "canceling authentication due to timeout" msgstr "annulation de l'authentification à cause du délai écoulé" -#: tcop/postgres.c:3145 +#: tcop/postgres.c:3151 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "arrêt du processus autovacuum suite à la demande de l'administrateur" -#: tcop/postgres.c:3149 +#: tcop/postgres.c:3155 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "arrêt des processus workers de réplication logique suite à la demande de l'administrateur" -#: tcop/postgres.c:3166 tcop/postgres.c:3176 tcop/postgres.c:3235 +#: tcop/postgres.c:3172 tcop/postgres.c:3182 tcop/postgres.c:3241 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "arrêt de la connexion à cause d'un conflit avec la restauration" -#: tcop/postgres.c:3187 +#: tcop/postgres.c:3193 #, c-format msgid "terminating connection due to administrator command" msgstr "arrêt des connexions suite à la demande de l'administrateur" -#: tcop/postgres.c:3218 +#: tcop/postgres.c:3224 #, c-format msgid "connection to client lost" msgstr "connexion au client perdue" -#: tcop/postgres.c:3284 +#: tcop/postgres.c:3294 #, c-format msgid "canceling statement due to lock timeout" msgstr "annulation de la requête à cause du délai écoulé pour l'obtention des verrous" -#: tcop/postgres.c:3291 +#: tcop/postgres.c:3301 #, c-format msgid "canceling statement due to statement timeout" msgstr "annulation de la requête à cause du délai écoulé pour l'exécution de l'instruction" -#: tcop/postgres.c:3298 +#: tcop/postgres.c:3308 #, c-format msgid "canceling autovacuum task" msgstr "annulation de la tâche d'autovacuum" -#: tcop/postgres.c:3321 +#: tcop/postgres.c:3331 #, c-format msgid "canceling statement due to user request" msgstr "annulation de la requête à la demande de l'utilisateur" -#: tcop/postgres.c:3335 +#: tcop/postgres.c:3345 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "arrêt des connexions suite à l'expiration du délai d'inactivité en transaction" -#: tcop/postgres.c:3346 +#: tcop/postgres.c:3356 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "arrêt des connexions suite à l'expiration du délai d'inactivité de la session" -#: tcop/postgres.c:3465 +#: tcop/postgres.c:3475 #, c-format msgid "stack depth limit exceeded" msgstr "dépassement de limite (en profondeur) de la pile" -#: tcop/postgres.c:3466 +#: tcop/postgres.c:3476 #, c-format msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." msgstr "" @@ -21561,76 +21586,76 @@ msgstr "" "être assuré que la limite de profondeur de la pile de la plateforme est\n" "adéquate." -#: tcop/postgres.c:3529 +#: tcop/postgres.c:3539 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "« max_stack_depth » ne doit pas dépasser %ld ko." -#: tcop/postgres.c:3531 +#: tcop/postgres.c:3541 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "" "Augmenter la limite de profondeur de la pile sur votre plateforme via\n" "« ulimit -s » ou l'équivalent local." -#: tcop/postgres.c:3887 +#: tcop/postgres.c:3897 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "argument invalide en ligne de commande pour le processus serveur : %s" -#: tcop/postgres.c:3888 tcop/postgres.c:3894 +#: tcop/postgres.c:3898 tcop/postgres.c:3904 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Essayez « %s --help » pour plus d'informations." -#: tcop/postgres.c:3892 +#: tcop/postgres.c:3902 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s : argument invalide en ligne de commande : %s" -#: tcop/postgres.c:3955 +#: tcop/postgres.c:3965 #, c-format msgid "%s: no database nor user name specified" msgstr "%s : ni base de données ni utilisateur spécifié" -#: tcop/postgres.c:4608 +#: tcop/postgres.c:4618 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "sous-type %d du message CLOSE invalide" -#: tcop/postgres.c:4643 +#: tcop/postgres.c:4653 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "sous-type %d du message DESCRIBE invalide" -#: tcop/postgres.c:4727 +#: tcop/postgres.c:4737 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "appels à la fonction fastpath non supportés dans une connexion de réplication" -#: tcop/postgres.c:4731 +#: tcop/postgres.c:4741 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "protocole étendu de requêtes non supporté dans une connexion de réplication" -#: tcop/postgres.c:4908 +#: tcop/postgres.c:4918 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "" "déconnexion : durée de la session : %d:%02d:%02d.%03d\n" "utilisateur=%s base=%s hôte=%s%s%s" -#: tcop/pquery.c:629 +#: tcop/pquery.c:636 #, c-format msgid "bind message has %d result formats but query has %d columns" msgstr "le message bind a %d formats de résultat mais la requête a %d colonnes" -#: tcop/pquery.c:932 +#: tcop/pquery.c:939 #, c-format msgid "cursor can only scan forward" msgstr "le curseur peut seulement parcourir en avant" -#: tcop/pquery.c:933 +#: tcop/pquery.c:940 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "Déclarez-le avec l'option SCROLL pour activer le parcours inverse." @@ -21661,7 +21686,7 @@ msgstr "" "ne peut pas exécuter %s à l'intérieur d'une fonction restreinte\n" "pour sécurité" -#: tcop/utility.c:913 +#: tcop/utility.c:928 #, c-format msgid "must be superuser to do CHECKPOINT" msgstr "doit être super-utilisateur pour exécuter un point de vérification (CHECKPOINT)" @@ -21739,7 +21764,7 @@ msgstr "fin de ligne inattendue" #: tsearch/dict_thesaurus.c:292 #, c-format msgid "too many lexemes in thesaurus entry" -msgstr "trop de lexèmes dans l'entre du thésaurus" +msgstr "trop de lexèmes dans l'entrée du thésaurus" #: tsearch/dict_thesaurus.c:416 #, c-format @@ -21833,7 +21858,7 @@ msgstr "n'a pas pu ouvrir le fichier affixe « %s » : %m" #: tsearch/spell.c:1296 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" -msgstr "le dictionnaire Ispell supporte seulement les valeurs de drapeau « default », « long »et « num »" +msgstr "le dictionnaire Ispell supporte seulement les valeurs de drapeau « default », « long » et « num »" #: tsearch/spell.c:1340 #, c-format @@ -22015,7 +22040,7 @@ msgstr "aclremove n'est plus supporté" msgid "unrecognized privilege type: \"%s\"" msgstr "type de droit non reconnu : « %s »" -#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:276 +#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:277 #, c-format msgid "function \"%s\" does not exist" msgstr "la fonction « %s » n'existe pas" @@ -22098,7 +22123,7 @@ msgstr "« [ » doit introduire des dimensions explicites de tableau." #: utils/adt/arrayfuncs.c:285 #, c-format msgid "Missing array dimension value." -msgstr "Valeur manquante de la dimension du tableau." +msgstr "Valeur manquante de la dimension du tableau." #: utils/adt/arrayfuncs.c:296 utils/adt/arrayfuncs.c:333 #, c-format @@ -22158,7 +22183,7 @@ msgstr "Problème après la parenthèse droite fermante." #: utils/adt/arrayfuncs.c:1300 utils/adt/arrayfuncs.c:3370 utils/adt/arrayfuncs.c:5849 #, c-format msgid "invalid number of dimensions: %d" -msgstr "nombre de dimensions invalides : %d" +msgstr "nombre de dimensions invalide : %d" #: utils/adt/arrayfuncs.c:1311 #, c-format @@ -22474,7 +22499,7 @@ msgstr "valeur du champ date/time en dehors des limites : « %s »" #: utils/adt/datetime.c:3784 #, c-format msgid "Perhaps you need a different \"datestyle\" setting." -msgstr "Peut-être avez-vous besoin d'un paramètrage « datestyle » différent." +msgstr "Peut-être avez-vous besoin d'un paramétrage « datestyle » différent." #: utils/adt/datetime.c:3789 #, c-format @@ -22945,12 +22970,12 @@ msgstr "longueur demandée trop importante" msgid "could not seek in file \"%s\": %m" msgstr "n'a pas pu parcourir le fichier « %s » : %m" -#: utils/adt/genfile.c:177 +#: utils/adt/genfile.c:176 #, c-format msgid "file length too large" msgstr "longueur du fichier trop importante" -#: utils/adt/genfile.c:254 +#: utils/adt/genfile.c:253 #, c-format msgid "must be superuser to read files with adminpack 1.0" msgstr "doit être super-utilisateur pour lire des fichiers avec adminpack 1.0" @@ -23065,7 +23090,7 @@ msgstr "OID en dehors des limites" msgid "key value must be scalar, not array, composite, or json" msgstr "la valeur clé doit être scalaire, et non pas un tableau ou une valeur composite ou un json" -#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:1994 +#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:1992 #, c-format msgid "could not determine data type for argument %d" msgstr "n'a pas pu déterminer le type de données pour l'argument %d" @@ -23436,7 +23461,7 @@ msgstr "l'argument « vars » n'est pas un objet" #: utils/adt/jsonpath_exec.c:557 #, c-format msgid "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." -msgstr "Les paramètres jsonpath doivent être encodés en paires clé-valeur d'objets « vars»" +msgstr "Les paramètres jsonpath doivent être encodés en paires clé-valeur d'objets « vars »" #: utils/adt/jsonpath_exec.c:674 #, c-format @@ -23613,7 +23638,7 @@ msgstr "donnée macaddr8 hors de l'échelle pour être convertie en macaddr" msgid "Only addresses that have FF and FE as values in the 4th and 5th bytes from the left, for example xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted from macaddr8 to macaddr." msgstr "Seules les adresses qui ont FF ou FE comme valeurs dans les 4è et 5è octets à partir de la gauche, par exemple xx:xx:xx:ff:fe:xx:xx:xx, , sont éligibles à être converties de macaddr8 à macaddr." -#: utils/adt/mcxtfuncs.c:204 +#: utils/adt/mcxtfuncs.c:184 #, c-format msgid "must be a superuser to log memory contexts" msgstr "doit être super-utilisateur pour tracer les contextes mémoires" @@ -23694,7 +23719,7 @@ msgstr "litéral multirange mal formé : « %s »" #: utils/adt/multirangetypes.c:149 #, c-format -msgid "Missing left bracket." +msgid "Missing left brace." msgstr "Parenthèse gauche manquante." #: utils/adt/multirangetypes.c:191 @@ -23708,8 +23733,9 @@ msgid "Expected comma or end of multirange." msgstr "Virgule ou fin de multirange attendue." #: utils/adt/multirangetypes.c:285 -#, c-format -msgid "Junk after right bracket." +#, fuzzy, c-format +#| msgid "Junk after right bracket." +msgid "Junk after right brace." msgstr "Problème après la parenthèse droite." #: utils/adt/multirangetypes.c:971 @@ -24216,42 +24242,42 @@ msgstr "trop de correspondances pour l'expression rationnelle" msgid "more than one function named \"%s\"" msgstr "il existe plus d'une fonction nommée « %s »" -#: utils/adt/regproc.c:542 +#: utils/adt/regproc.c:543 #, c-format msgid "more than one operator named %s" msgstr "il existe plus d'un opérateur nommé%s" -#: utils/adt/regproc.c:714 utils/adt/regproc.c:755 utils/adt/regproc.c:2054 utils/adt/ruleutils.c:9641 utils/adt/ruleutils.c:9810 +#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 utils/adt/ruleutils.c:9650 utils/adt/ruleutils.c:9819 #, c-format msgid "too many arguments" msgstr "trop d'arguments" -#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 +#: utils/adt/regproc.c:716 utils/adt/regproc.c:757 #, c-format msgid "Provide two argument types for operator." msgstr "Fournit deux types d'argument pour l'opérateur." -#: utils/adt/regproc.c:1638 utils/adt/regproc.c:1662 utils/adt/regproc.c:1763 utils/adt/regproc.c:1787 utils/adt/regproc.c:1889 utils/adt/regproc.c:1894 utils/adt/varlena.c:3709 utils/adt/varlena.c:3714 +#: utils/adt/regproc.c:1639 utils/adt/regproc.c:1663 utils/adt/regproc.c:1764 utils/adt/regproc.c:1788 utils/adt/regproc.c:1890 utils/adt/regproc.c:1895 utils/adt/varlena.c:3709 utils/adt/varlena.c:3714 #, c-format msgid "invalid name syntax" msgstr "syntaxe du nom invalide" -#: utils/adt/regproc.c:1952 +#: utils/adt/regproc.c:1953 #, c-format msgid "expected a left parenthesis" msgstr "attendait une parenthèse gauche" -#: utils/adt/regproc.c:1968 +#: utils/adt/regproc.c:1969 #, c-format msgid "expected a right parenthesis" msgstr "attendait une parenthèse droite" -#: utils/adt/regproc.c:1987 +#: utils/adt/regproc.c:1988 #, c-format msgid "expected a type name" msgstr "attendait un nom de type" -#: utils/adt/regproc.c:2019 +#: utils/adt/regproc.c:2020 #, c-format msgid "improper type name" msgstr "nom du type invalide" @@ -24396,7 +24422,7 @@ msgstr "" "ne peut pas comparer les types d'enregistrement avec des numéros différents\n" "des colonnes" -#: utils/adt/ruleutils.c:5068 +#: utils/adt/ruleutils.c:5077 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "la règle « %s » a un type d'événement %d non supporté" @@ -24411,7 +24437,7 @@ msgstr "la précision de TIMESTAMP(%d)%s ne doit pas être négative" msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "la précision de TIMESTAMP(%d)%s est réduite au maximum autorisé, %d" -#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12391 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12411 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp en dehors de limites : « %s »" @@ -24504,7 +24530,7 @@ msgstr "les unités « %s » ne sont pas reconnues pour le type « timestamp wit #: utils/adt/timestamp.c:4336 #, c-format msgid "interval units \"%s\" not supported because months usually have fractional weeks" -msgstr "unités d'intervalle « %s » non supporté car les mois ont généralement des semaines fractionnaires" +msgstr "unités d'intervalle « %s » non supportées car les mois ont généralement des semaines fractionnaires" #: utils/adt/timestamp.c:4342 utils/adt/timestamp.c:5261 #, c-format @@ -24591,7 +24617,7 @@ msgstr "" #: utils/adt/tsquery_op.c:124 #, c-format msgid "distance in phrase operator should be non-negative and less than %d" -msgstr "la distance dans l'opérateur de phrase devrait pas positif et inférieur à %d" +msgstr "la distance dans l'opérateur de phrase devrait être non négative et inférieure à %d" #: utils/adt/tsquery_rewrite.c:321 #, c-format @@ -25101,17 +25127,17 @@ msgstr "la classe d'opérateur « %s » de la méthode d'accès %s nécessite la msgid "cached plan must not change result type" msgstr "le plan en cache ne doit pas modifier le type en résultat" -#: utils/cache/relcache.c:6213 +#: utils/cache/relcache.c:6223 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "n'a pas pu créer le fichier d'initialisation relation-cache « %s » : %m" -#: utils/cache/relcache.c:6215 +#: utils/cache/relcache.c:6225 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Continue malgré tout, mais quelque chose s'est mal passé." -#: utils/cache/relcache.c:6537 +#: utils/cache/relcache.c:6547 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier cache « %s » : %m" @@ -25367,17 +25393,17 @@ msgstr "" msgid "argument declared %s does not contain a range type but type %s" msgstr "l'argument déclaré %s ne contient pas un type d'intervalle mais un type %s" -#: utils/fmgr/funcapi.c:1833 utils/fmgr/funcapi.c:1865 +#: utils/fmgr/funcapi.c:1831 utils/fmgr/funcapi.c:1863 #, c-format msgid "number of aliases does not match number of columns" msgstr "le nombre d'alias ne correspond pas au nombre de colonnes" -#: utils/fmgr/funcapi.c:1859 +#: utils/fmgr/funcapi.c:1857 #, c-format msgid "no column alias was provided" msgstr "aucun alias de colonne n'a été fourni" -#: utils/fmgr/funcapi.c:1883 +#: utils/fmgr/funcapi.c:1881 #, c-format msgid "could not determine row description for function returning record" msgstr "" @@ -25421,7 +25447,7 @@ msgstr "le répertoire des données « %s » a des permissions non valides" msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Les droits devraient être u=rwx (0700) ou u=rwx,g=rx (0750)." -#: utils/init/miscinit.c:645 utils/misc/guc.c:7461 +#: utils/init/miscinit.c:645 utils/misc/guc.c:7481 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "" @@ -25529,7 +25555,7 @@ msgstr "" msgid "could not write lock file \"%s\": %m" msgstr "n'a pas pu écrire le fichier verrou « %s » : %m" -#: utils/init/miscinit.c:1357 utils/init/miscinit.c:1499 utils/misc/guc.c:10357 +#: utils/init/miscinit.c:1357 utils/init/miscinit.c:1499 utils/misc/guc.c:10377 #, c-format msgid "could not read from file \"%s\": %m" msgstr "n'a pas pu lire à partir du fichier « %s » : %m" @@ -25802,303 +25828,303 @@ msgstr "" "le caractère dont la séquence d'octets est %s dans l'encodage « %s » n'a pas\n" "d'équivalent dans l'encodage « %s »" -#: utils/misc/guc.c:701 +#: utils/misc/guc.c:718 msgid "Ungrouped" msgstr "Dégroupé" -#: utils/misc/guc.c:703 +#: utils/misc/guc.c:720 msgid "File Locations" msgstr "Emplacement des fichiers" -#: utils/misc/guc.c:705 +#: utils/misc/guc.c:722 msgid "Connections and Authentication / Connection Settings" -msgstr "Connexions et authentification / Paramètrages de connexion" +msgstr "Connexions et authentification / Paramétrages de connexion" -#: utils/misc/guc.c:707 +#: utils/misc/guc.c:724 msgid "Connections and Authentication / Authentication" msgstr "Connexions et authentification / Authentification" -#: utils/misc/guc.c:709 +#: utils/misc/guc.c:726 msgid "Connections and Authentication / SSL" msgstr "Connexions et authentification / SSL" -#: utils/misc/guc.c:711 +#: utils/misc/guc.c:728 msgid "Resource Usage / Memory" msgstr "Utilisation des ressources / Mémoire" -#: utils/misc/guc.c:713 +#: utils/misc/guc.c:730 msgid "Resource Usage / Disk" msgstr "Utilisation des ressources / Disques" -#: utils/misc/guc.c:715 +#: utils/misc/guc.c:732 msgid "Resource Usage / Kernel Resources" msgstr "Utilisation des ressources / Ressources noyau" -#: utils/misc/guc.c:717 +#: utils/misc/guc.c:734 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Utilisation des ressources / Délai du VACUUM basé sur le coût" -#: utils/misc/guc.c:719 +#: utils/misc/guc.c:736 msgid "Resource Usage / Background Writer" msgstr "Utilisation des ressources / Processus d'écriture en tâche de fond" -#: utils/misc/guc.c:721 +#: utils/misc/guc.c:738 msgid "Resource Usage / Asynchronous Behavior" msgstr "Utilisation des ressources / Comportement asynchrone" -#: utils/misc/guc.c:723 +#: utils/misc/guc.c:740 msgid "Write-Ahead Log / Settings" -msgstr "Write-Ahead Log / Paramètrages" +msgstr "Write-Ahead Log / Paramétrages" -#: utils/misc/guc.c:725 +#: utils/misc/guc.c:742 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead Log / Points de vérification (Checkpoints)" -#: utils/misc/guc.c:727 +#: utils/misc/guc.c:744 msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead Log / Archivage" -#: utils/misc/guc.c:729 +#: utils/misc/guc.c:746 msgid "Write-Ahead Log / Archive Recovery" msgstr "Write-Ahead Log / Restauration d'archive" -#: utils/misc/guc.c:731 +#: utils/misc/guc.c:748 msgid "Write-Ahead Log / Recovery Target" msgstr "Write-Ahead Log / Cible de restauration" -#: utils/misc/guc.c:733 +#: utils/misc/guc.c:750 msgid "Replication / Sending Servers" msgstr "Réplication / Serveurs d'envoi" -#: utils/misc/guc.c:735 +#: utils/misc/guc.c:752 msgid "Replication / Primary Server" msgstr "Réplication / Serveur primaire" -#: utils/misc/guc.c:737 +#: utils/misc/guc.c:754 msgid "Replication / Standby Servers" msgstr "Réplication / Serveurs en attente" -#: utils/misc/guc.c:739 +#: utils/misc/guc.c:756 msgid "Replication / Subscribers" msgstr "Réplication / Abonnés" -#: utils/misc/guc.c:741 +#: utils/misc/guc.c:758 msgid "Query Tuning / Planner Method Configuration" msgstr "Optimisation des requêtes / Configuration de la méthode du planificateur" -#: utils/misc/guc.c:743 +#: utils/misc/guc.c:760 msgid "Query Tuning / Planner Cost Constants" msgstr "Optimisation des requêtes / Constantes des coûts du planificateur" -#: utils/misc/guc.c:745 +#: utils/misc/guc.c:762 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Optimisation des requêtes / Optimiseur génétique de requêtes" -#: utils/misc/guc.c:747 +#: utils/misc/guc.c:764 msgid "Query Tuning / Other Planner Options" msgstr "Optimisation des requêtes / Autres options du planificateur" -#: utils/misc/guc.c:749 +#: utils/misc/guc.c:766 msgid "Reporting and Logging / Where to Log" msgstr "Rapports et traces / Où tracer" -#: utils/misc/guc.c:751 +#: utils/misc/guc.c:768 msgid "Reporting and Logging / When to Log" msgstr "Rapports et traces / Quand tracer" -#: utils/misc/guc.c:753 +#: utils/misc/guc.c:770 msgid "Reporting and Logging / What to Log" msgstr "Rapports et traces / Que tracer" -#: utils/misc/guc.c:755 +#: utils/misc/guc.c:772 msgid "Reporting and Logging / Process Title" msgstr "Rapports et traces / Titre du processus" -#: utils/misc/guc.c:757 +#: utils/misc/guc.c:774 msgid "Statistics / Monitoring" msgstr "Statistiques / Surveillance" -#: utils/misc/guc.c:759 +#: utils/misc/guc.c:776 msgid "Statistics / Query and Index Statistics Collector" msgstr "Statistiques / Récupérateur des statistiques sur les requêtes et sur les index" -#: utils/misc/guc.c:761 +#: utils/misc/guc.c:778 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc.c:763 +#: utils/misc/guc.c:780 msgid "Client Connection Defaults / Statement Behavior" msgstr "Valeurs par défaut pour les connexions client / Comportement des instructions" -#: utils/misc/guc.c:765 +#: utils/misc/guc.c:782 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Valeurs par défaut pour les connexions client / Locale et formattage" -#: utils/misc/guc.c:767 +#: utils/misc/guc.c:784 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Valeurs par défaut pour les connexions des clients / Préchargement des bibliothèques partagées" -#: utils/misc/guc.c:769 +#: utils/misc/guc.c:786 msgid "Client Connection Defaults / Other Defaults" msgstr "Valeurs par défaut pour les connexions client / Autres valeurs par défaut" -#: utils/misc/guc.c:771 +#: utils/misc/guc.c:788 msgid "Lock Management" msgstr "Gestion des verrous" -#: utils/misc/guc.c:773 +#: utils/misc/guc.c:790 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Compatibilité des versions et des plateformes / Anciennes versions de PostgreSQL" -#: utils/misc/guc.c:775 +#: utils/misc/guc.c:792 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Compatibilité des versions et des plateformes / Anciennes plateformes et anciens clients" -#: utils/misc/guc.c:777 +#: utils/misc/guc.c:794 msgid "Error Handling" msgstr "Gestion des erreurs" -#: utils/misc/guc.c:779 +#: utils/misc/guc.c:796 msgid "Preset Options" msgstr "Options pré-configurées" -#: utils/misc/guc.c:781 +#: utils/misc/guc.c:798 msgid "Customized Options" msgstr "Options personnalisées" -#: utils/misc/guc.c:783 +#: utils/misc/guc.c:800 msgid "Developer Options" msgstr "Options pour le développeur" -#: utils/misc/guc.c:841 +#: utils/misc/guc.c:858 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Les unités valides pour ce paramètre sont « B », « kB », « MB », « GB » et « TB »." -#: utils/misc/guc.c:878 +#: utils/misc/guc.c:895 msgid "Valid units for this parameter are \"us\", \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "Les unités valides pour ce paramètre sont «us », « ms », « s », « min », « h » et « d »." -#: utils/misc/guc.c:940 +#: utils/misc/guc.c:957 msgid "Enables the planner's use of sequential-scan plans." msgstr "Active l'utilisation des parcours séquentiels par le planificateur." -#: utils/misc/guc.c:950 +#: utils/misc/guc.c:967 msgid "Enables the planner's use of index-scan plans." msgstr "Active l'utilisation des parcours d'index par le planificateur." -#: utils/misc/guc.c:960 +#: utils/misc/guc.c:977 msgid "Enables the planner's use of index-only-scan plans." msgstr "Active l'utilisation des parcours d'index seul par le planificateur." -#: utils/misc/guc.c:970 +#: utils/misc/guc.c:987 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Active l'utilisation des parcours de bitmap par le planificateur." -#: utils/misc/guc.c:980 +#: utils/misc/guc.c:997 msgid "Enables the planner's use of TID scan plans." msgstr "Active l'utilisation de plans de parcours TID par le planificateur." -#: utils/misc/guc.c:990 +#: utils/misc/guc.c:1007 msgid "Enables the planner's use of explicit sort steps." msgstr "Active l'utilisation des étapes de tris explicites par le planificateur." -#: utils/misc/guc.c:1000 +#: utils/misc/guc.c:1017 msgid "Enables the planner's use of incremental sort steps." msgstr "Active l'utilisation des étapes de tris incrémentaux par le planificateur." -#: utils/misc/guc.c:1009 +#: utils/misc/guc.c:1026 msgid "Enables the planner's use of hashed aggregation plans." -msgstr "Active l'utilisation de plans d'agrégats hâchés par le planificateur." +msgstr "Active l'utilisation de plans d'agrégats hachés par le planificateur." -#: utils/misc/guc.c:1019 +#: utils/misc/guc.c:1036 msgid "Enables the planner's use of materialization." msgstr "Active l'utilisation de la matérialisation par le planificateur." -#: utils/misc/guc.c:1029 +#: utils/misc/guc.c:1046 msgid "Enables the planner's use of result caching." msgstr "Active l'utilisation du cache de résultat par le planificateur." -#: utils/misc/guc.c:1039 +#: utils/misc/guc.c:1056 msgid "Enables the planner's use of nested-loop join plans." msgstr "Active l'utilisation de plans avec des jointures imbriquées par le planificateur." -#: utils/misc/guc.c:1049 +#: utils/misc/guc.c:1066 msgid "Enables the planner's use of merge join plans." msgstr "Active l'utilisation de plans de jointures MERGE par le planificateur." -#: utils/misc/guc.c:1059 +#: utils/misc/guc.c:1076 msgid "Enables the planner's use of hash join plans." -msgstr "Active l'utilisation de plans de jointures hâchées par le planificateur." +msgstr "Active l'utilisation de plans de jointures hachées par le planificateur." -#: utils/misc/guc.c:1069 +#: utils/misc/guc.c:1086 msgid "Enables the planner's use of gather merge plans." msgstr "Active l'utilisation de plans GATHER MERGE par le planificateur." -#: utils/misc/guc.c:1079 +#: utils/misc/guc.c:1096 msgid "Enables partitionwise join." msgstr "Active l'utilisation de jointures entre partitions." -#: utils/misc/guc.c:1089 +#: utils/misc/guc.c:1106 msgid "Enables partitionwise aggregation and grouping." msgstr "Active les agrégations et regroupements par partition." -#: utils/misc/guc.c:1099 +#: utils/misc/guc.c:1116 msgid "Enables the planner's use of parallel append plans." msgstr "Active l'utilisation de plans Append parallèles par le planificateur." -#: utils/misc/guc.c:1109 +#: utils/misc/guc.c:1126 msgid "Enables the planner's use of parallel hash plans." -msgstr "Active l'utilisation de plans de jointures hâchées parallèles par le planificateur." +msgstr "Active l'utilisation de plans de jointures hachées parallèles par le planificateur." -#: utils/misc/guc.c:1119 +#: utils/misc/guc.c:1136 msgid "Enables plan-time and execution-time partition pruning." msgstr "Active l'élagage de partition durant la planification et l'exécution." -#: utils/misc/guc.c:1120 +#: utils/misc/guc.c:1137 msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." msgstr "Autorise le planificateur de requête et l'exécuteur à comparer les limites des partitions avec les conditions des requêtes pour déterminer les partitions à parcourir." -#: utils/misc/guc.c:1131 +#: utils/misc/guc.c:1148 msgid "Enables the planner's use of async append plans." msgstr "Active l'utilisation de plans Append asynchrones par le planificateur." -#: utils/misc/guc.c:1141 +#: utils/misc/guc.c:1158 msgid "Enables genetic query optimization." msgstr "Active l'optimisation génétique des requêtes." -#: utils/misc/guc.c:1142 +#: utils/misc/guc.c:1159 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Cet algorithme essaie de faire une planification sans recherche exhaustive." -#: utils/misc/guc.c:1153 +#: utils/misc/guc.c:1170 msgid "Shows whether the current user is a superuser." msgstr "Affiche si l'utilisateur actuel est un super-utilisateur." -#: utils/misc/guc.c:1163 +#: utils/misc/guc.c:1180 msgid "Enables advertising the server via Bonjour." msgstr "Active la publication du serveur via Bonjour." -#: utils/misc/guc.c:1172 +#: utils/misc/guc.c:1189 msgid "Collects transaction commit time." msgstr "Récupère l'horodatage de la validation de la transaction." -#: utils/misc/guc.c:1181 +#: utils/misc/guc.c:1198 msgid "Enables SSL connections." msgstr "Active les connexions SSL." -#: utils/misc/guc.c:1190 +#: utils/misc/guc.c:1207 msgid "Also use ssl_passphrase_command during server reload." msgstr "Utilise également ssl_passphrase_command durant le rechargement du serveur." -#: utils/misc/guc.c:1199 +#: utils/misc/guc.c:1216 msgid "Give priority to server ciphersuite order." msgstr "Donne la priorité à l'ordre des chiffrements du serveur." -#: utils/misc/guc.c:1208 +#: utils/misc/guc.c:1225 msgid "Forces synchronization of updates to disk." msgstr "Force la synchronisation des mises à jour sur le disque." -#: utils/misc/guc.c:1209 +#: utils/misc/guc.c:1226 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "" "Le serveur utilisera l'appel système fsync() à différents endroits pour\n" @@ -26106,19 +26132,19 @@ msgstr "" "nous assure qu'un groupe de bases de données se retrouvera dans un état\n" "cohérent après un arrêt brutal dû au système d'exploitation ou au matériel." -#: utils/misc/guc.c:1220 +#: utils/misc/guc.c:1237 msgid "Continues processing after a checksum failure." msgstr "Continue le traitement après un échec de la somme de contrôle." -#: utils/misc/guc.c:1221 +#: utils/misc/guc.c:1238 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "La détection d'une erreur de somme de contrôle a normalement pour effet de rapporter une erreur, annulant la transaction en cours. Régler ignore_checksum_failure à true permet au système d'ignorer cette erreur (mais rapporte toujours un avertissement), et continue le traitement. Ce comportement pourrait causer un arrêt brutal ou d'autres problèmes sérieux. Cela a un effet seulement si les sommes de contrôle (checksums) sont activés." -#: utils/misc/guc.c:1235 +#: utils/misc/guc.c:1252 msgid "Continues processing past damaged page headers." msgstr "Continue le travail après les en-têtes de page endommagés." -#: utils/misc/guc.c:1236 +#: utils/misc/guc.c:1253 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "" "La détection d'une en-tête de page endommagée cause normalement le rapport\n" @@ -26127,203 +26153,199 @@ msgstr "" "message d'attention et continue à travailler. Ce comportement détruira des\n" "données, notamment toutes les lignes de la page endommagée." -#: utils/misc/guc.c:1249 +#: utils/misc/guc.c:1266 msgid "Continues recovery after an invalid pages failure." msgstr "Continue la restauration après un échec des pages invalides." -#: utils/misc/guc.c:1250 +#: utils/misc/guc.c:1267 msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." msgstr "La détection des enregistrements de journaux de transactions ayant des références à des blocs invalides lors de la restauration a pour effet que PostgreSQL lève une erreur de niveau PANIC, annulant la restauration. Configurer ignore_invalid_pages à true permet au système d'ignorer les références invalides de page dans les enregistrements des journaux de transactions (tout en rapportant toujours un message d'avertissement), et continue la restauration. Ce comportement pourrait causer des arrêts brutaux, des pertes de données, propager ou cacher une corruption, ainsi que d'autres problèmes sérieux. Ce paramètre a un effet seulement lors de la restauration et en mode standby." -#: utils/misc/guc.c:1268 +#: utils/misc/guc.c:1285 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "" "Écrit des pages complètes dans les WAL lors d'une première modification après\n" "un point de vérification." -#: utils/misc/guc.c:1269 +#: utils/misc/guc.c:1286 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "Une page écrite au moment d'un arrêt brutal du système d'exploitation pourrait n'être écrite sur le disque que partiellement. Lors de la récupération, les modifications stockées dans le journal de transaction ne sont pas suffisantes pour terminer la récupération. Cette option écrit les pages lors de la première modification après un checkpoint afin que la récupération complète soit possible." -#: utils/misc/guc.c:1282 +#: utils/misc/guc.c:1299 msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification." msgstr "Écrit des pages complètes dans les WAL lors d'une première modification après un point de vérification, y compris pour des modifications non critiques." -#: utils/misc/guc.c:1292 +#: utils/misc/guc.c:1309 msgid "Compresses full-page writes written in WAL file." msgstr "Compresse les blocs complets écrits dans les journaux de transactions." -#: utils/misc/guc.c:1302 +#: utils/misc/guc.c:1319 msgid "Writes zeroes to new WAL files before first use." msgstr "Écrit des zéros dans les nouveaux journaux de transaction avant leur première utilisation." -#: utils/misc/guc.c:1312 +#: utils/misc/guc.c:1329 msgid "Recycles WAL files by renaming them." msgstr "Recycle les journaux de transactions en les renommant." -#: utils/misc/guc.c:1322 +#: utils/misc/guc.c:1339 msgid "Logs each checkpoint." msgstr "Trace tous les points de vérification." -#: utils/misc/guc.c:1331 +#: utils/misc/guc.c:1348 msgid "Logs each successful connection." msgstr "Trace toutes les connexions réussies." -#: utils/misc/guc.c:1340 +#: utils/misc/guc.c:1357 msgid "Logs end of a session, including duration." msgstr "Trace la fin d'une session, avec sa durée." -#: utils/misc/guc.c:1349 +#: utils/misc/guc.c:1366 msgid "Logs each replication command." msgstr "Trace chaque commande de réplication." -#: utils/misc/guc.c:1358 +#: utils/misc/guc.c:1375 msgid "Shows whether the running server has assertion checks enabled." msgstr "Affiche si le serveur en cours d'exécution a les vérifications d'assertion activées." -#: utils/misc/guc.c:1373 +#: utils/misc/guc.c:1390 msgid "Terminate session on any error." msgstr "Termine la session sans erreur." -#: utils/misc/guc.c:1382 +#: utils/misc/guc.c:1399 msgid "Reinitialize server after backend crash." msgstr "Réinitialisation du serveur après un arrêt brutal d'un processus serveur." -#: utils/misc/guc.c:1391 +#: utils/misc/guc.c:1408 msgid "Remove temporary files after backend crash." msgstr "Suppression des fichiers temporaires après un arrêt brutal d'un processus serveur." -#: utils/misc/guc.c:1401 +#: utils/misc/guc.c:1418 msgid "Logs the duration of each completed SQL statement." msgstr "Trace la durée de chaque instruction SQL terminée." -#: utils/misc/guc.c:1410 +#: utils/misc/guc.c:1427 msgid "Logs each query's parse tree." msgstr "Trace l'arbre d'analyse de chaque requête." -#: utils/misc/guc.c:1419 +#: utils/misc/guc.c:1436 msgid "Logs each query's rewritten parse tree." msgstr "Trace l'arbre d'analyse réécrit de chaque requête." -#: utils/misc/guc.c:1428 +#: utils/misc/guc.c:1445 msgid "Logs each query's execution plan." msgstr "Trace le plan d'exécution de chaque requête." -#: utils/misc/guc.c:1437 +#: utils/misc/guc.c:1454 msgid "Indents parse and plan tree displays." msgstr "Indente l'affichage des arbres d'analyse et de planification." -#: utils/misc/guc.c:1446 -msgid "Compute query identifiers." -msgstr "Calcule les identifiants de requête." - -#: utils/misc/guc.c:1455 +#: utils/misc/guc.c:1463 msgid "Writes parser performance statistics to the server log." msgstr "" "Écrit les statistiques de performance de l'analyseur dans les journaux applicatifs\n" "du serveur." -#: utils/misc/guc.c:1464 +#: utils/misc/guc.c:1472 msgid "Writes planner performance statistics to the server log." msgstr "" "Écrit les statistiques de performance de planification dans les journaux\n" "applicatifs du serveur." -#: utils/misc/guc.c:1473 +#: utils/misc/guc.c:1481 msgid "Writes executor performance statistics to the server log." msgstr "" "Écrit les statistiques de performance de l'exécuteur dans les journaux applicatifs\n" "du serveur." -#: utils/misc/guc.c:1482 +#: utils/misc/guc.c:1490 msgid "Writes cumulative performance statistics to the server log." msgstr "" "Écrit les statistiques de performance cumulatives dans les journaux applicatifs\n" "du serveur." -#: utils/misc/guc.c:1492 +#: utils/misc/guc.c:1500 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Trace les statistiques d'utilisation des ressources systèmes (mémoire et CPU) sur les différentes opérations B-tree." -#: utils/misc/guc.c:1504 +#: utils/misc/guc.c:1512 msgid "Collects information about executing commands." msgstr "Récupère les statistiques sur les commandes en exécution." -#: utils/misc/guc.c:1505 +#: utils/misc/guc.c:1513 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "" "Active la récupération d'informations sur la commande en cours d'exécution\n" "pour chaque session, avec l'heure de début de l'exécution de la commande." -#: utils/misc/guc.c:1515 +#: utils/misc/guc.c:1523 msgid "Collects statistics on database activity." msgstr "Récupère les statistiques sur l'activité de la base de données." -#: utils/misc/guc.c:1524 +#: utils/misc/guc.c:1532 msgid "Collects timing statistics for database I/O activity." msgstr "Récupère les statistiques d'horodatage sur l'activité en entrées/sorties de la base de données." -#: utils/misc/guc.c:1533 +#: utils/misc/guc.c:1541 msgid "Collects timing statistics for WAL I/O activity." msgstr "Récupère les statistiques d'horodatage sur l'activité en entrées/sorties des journaux de transactions." -#: utils/misc/guc.c:1543 +#: utils/misc/guc.c:1551 msgid "Updates the process title to show the active SQL command." msgstr "" "Met à jour le titre du processus pour indiquer la commande SQL en cours\n" "d'exécution." -#: utils/misc/guc.c:1544 +#: utils/misc/guc.c:1552 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "" "Active la mise à jour du titre du processus chaque fois qu'une nouvelle\n" "commande SQL est reçue par le serveur." -#: utils/misc/guc.c:1557 +#: utils/misc/guc.c:1565 msgid "Starts the autovacuum subprocess." msgstr "Exécute le sous-processus de l'autovacuum." -#: utils/misc/guc.c:1567 +#: utils/misc/guc.c:1575 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Génère une sortie de débogage pour LISTEN et NOTIFY." -#: utils/misc/guc.c:1579 +#: utils/misc/guc.c:1587 msgid "Emits information about lock usage." msgstr "Émet des informations sur l'utilisation des verrous." -#: utils/misc/guc.c:1589 +#: utils/misc/guc.c:1597 msgid "Emits information about user lock usage." msgstr "Émet des informations sur l'utilisation des verrous utilisateurs." -#: utils/misc/guc.c:1599 +#: utils/misc/guc.c:1607 msgid "Emits information about lightweight lock usage." msgstr "Émet des informations sur l'utilisation des verrous légers." -#: utils/misc/guc.c:1609 +#: utils/misc/guc.c:1617 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Trace les informations sur les verrous actuels lorsqu'un délai sur le deadlock est dépassé." -#: utils/misc/guc.c:1621 +#: utils/misc/guc.c:1629 msgid "Logs long lock waits." msgstr "Trace les attentes longues de verrou." -#: utils/misc/guc.c:1630 +#: utils/misc/guc.c:1638 msgid "Logs standby recovery conflict waits." msgstr "" -#: utils/misc/guc.c:1639 +#: utils/misc/guc.c:1647 msgid "Logs the host name in the connection logs." msgstr "Trace le nom d'hôte dans les traces de connexion." -#: utils/misc/guc.c:1640 +#: utils/misc/guc.c:1648 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "Par défaut, une connexion ne trace que l'adresse IP de l'hôte se connectant. Si vous voulez que s'affiche le nom de l'hôte, vous pouvez activer cette option mais, selon la configuration de la résolution de noms de votre hôte, cela peut imposer un coût en performances non négligeable." -#: utils/misc/guc.c:1651 +#: utils/misc/guc.c:1659 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Traite « expr=NULL » comme « expr IS NULL »." -#: utils/misc/guc.c:1652 +#: utils/misc/guc.c:1660 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "" "Une fois activé, les expressions de la forme expr = NULL (ou NULL = expr)\n" @@ -26331,329 +26353,329 @@ msgstr "" "l'expression est évaluée comme étant NULL et false sinon. Le comportement\n" "correct de expr = NULL est de toujours renvoyer NULL (inconnu)." -#: utils/misc/guc.c:1664 +#: utils/misc/guc.c:1672 msgid "Enables per-database user names." msgstr "Active les noms d'utilisateur par base de données." -#: utils/misc/guc.c:1673 +#: utils/misc/guc.c:1681 msgid "Sets the default read-only status of new transactions." msgstr "Initialise le statut de lecture seule par défaut des nouvelles transactions." -#: utils/misc/guc.c:1683 +#: utils/misc/guc.c:1691 msgid "Sets the current transaction's read-only status." msgstr "Affiche le statut de lecture seule de la transaction actuelle." -#: utils/misc/guc.c:1693 +#: utils/misc/guc.c:1701 msgid "Sets the default deferrable status of new transactions." msgstr "Initialise le statut déferrable par défaut des nouvelles transactions." -#: utils/misc/guc.c:1702 +#: utils/misc/guc.c:1710 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "" "S'il faut repousser une transaction sérialisable en lecture seule jusqu'à ce qu'elle\n" "puisse être exécutée sans échecs possibles de sérialisation." -#: utils/misc/guc.c:1712 +#: utils/misc/guc.c:1720 msgid "Enable row security." msgstr "Active la sécurité niveau ligne." -#: utils/misc/guc.c:1713 +#: utils/misc/guc.c:1721 msgid "When enabled, row security will be applied to all users." msgstr "Lorsqu'il est activé, le mode de sécurité niveau ligne sera appliqué à tous les utilisateurs." -#: utils/misc/guc.c:1721 +#: utils/misc/guc.c:1729 msgid "Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE." msgstr "Vérifie les corps de routine lors du CREATE FUNCTION et du CREATE PROCEDURE." -#: utils/misc/guc.c:1730 +#: utils/misc/guc.c:1738 msgid "Enable input of NULL elements in arrays." msgstr "Active la saisie d'éléments NULL dans les tableaux." -#: utils/misc/guc.c:1731 +#: utils/misc/guc.c:1739 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "" "Si activé, un NULL sans guillemets en tant que valeur d'entrée dans un\n" "tableau signifie une valeur NULL ; sinon, il sera pris littéralement." -#: utils/misc/guc.c:1747 +#: utils/misc/guc.c:1755 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OID n'est plus supporté ; ce paramètre ne peut être positionné qu'à false (faux)." -#: utils/misc/guc.c:1757 +#: utils/misc/guc.c:1765 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "" "Lance un sous-processus pour capturer la sortie d'erreurs (stderr) et/ou\n" "csvlogs dans des journaux applicatifs." -#: utils/misc/guc.c:1766 +#: utils/misc/guc.c:1774 msgid "Truncate existing log files of same name during log rotation." msgstr "" "Tronque les journaux applicatifs existants du même nom lors de la rotation\n" "des journaux applicatifs." -#: utils/misc/guc.c:1777 +#: utils/misc/guc.c:1785 msgid "Emit information about resource usage in sorting." msgstr "Émet des informations sur l'utilisation des ressources lors d'un tri." -#: utils/misc/guc.c:1791 +#: utils/misc/guc.c:1799 msgid "Generate debugging output for synchronized scanning." msgstr "Génère une sortie de débogage pour les parcours synchronisés." -#: utils/misc/guc.c:1806 +#: utils/misc/guc.c:1814 msgid "Enable bounded sorting using heap sort." msgstr "Active le tri limité en utilisant le tri de heap." -#: utils/misc/guc.c:1819 +#: utils/misc/guc.c:1827 msgid "Emit WAL-related debugging output." msgstr "Émet une sortie de débogage concernant les journaux de transactions." -#: utils/misc/guc.c:1831 +#: utils/misc/guc.c:1839 msgid "Shows whether datetimes are integer based." msgstr "Indique si les types datetime sont basés sur des entiers." -#: utils/misc/guc.c:1842 +#: utils/misc/guc.c:1850 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "" "Indique si les noms d'utilisateurs Kerberos et GSSAPI devraient être traités\n" "sans se soucier de la casse." -#: utils/misc/guc.c:1852 +#: utils/misc/guc.c:1860 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Avertie sur les échappements par antislash dans les chaînes ordinaires." -#: utils/misc/guc.c:1862 +#: utils/misc/guc.c:1870 msgid "Causes '...' strings to treat backslashes literally." msgstr "Fait que les chaînes '...' traitent les antislashs littéralement." -#: utils/misc/guc.c:1873 +#: utils/misc/guc.c:1881 msgid "Enable synchronized sequential scans." msgstr "Active l'utilisation des parcours séquentiels synchronisés." -#: utils/misc/guc.c:1883 +#: utils/misc/guc.c:1891 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Définit s'il faut inclure ou exclure la transaction de la cible de restauration." -#: utils/misc/guc.c:1893 +#: utils/misc/guc.c:1901 msgid "Allows connections and queries during recovery." msgstr "Autorise les connexions et les requêtes pendant la restauration." -#: utils/misc/guc.c:1903 +#: utils/misc/guc.c:1911 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Permet l'envoi d'informations d'un serveur en hot standby vers le serveur principal pour éviter les conflits de requêtes." -#: utils/misc/guc.c:1913 +#: utils/misc/guc.c:1921 msgid "Shows whether hot standby is currently active." msgstr "Affiche si le hot standby est actuellement actif." -#: utils/misc/guc.c:1924 +#: utils/misc/guc.c:1932 msgid "Allows modifications of the structure of system tables." msgstr "Permet les modifications de la structure des tables systèmes." -#: utils/misc/guc.c:1935 +#: utils/misc/guc.c:1943 msgid "Disables reading from system indexes." msgstr "Désactive la lecture des index système." -#: utils/misc/guc.c:1936 +#: utils/misc/guc.c:1944 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "" "Cela n'empêche pas la mise à jour des index, donc vous pouvez l'utiliser en\n" "toute sécurité. La pire conséquence est la lenteur." -#: utils/misc/guc.c:1947 +#: utils/misc/guc.c:1955 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "" "Active la compatibilité ascendante pour la vérification des droits sur les\n" "Large Objects." -#: utils/misc/guc.c:1948 +#: utils/misc/guc.c:1956 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "" "Ignore la vérification des droits lors de la lecture et de la modification\n" "des Larges Objects, pour la compatibilité avec les versions antérieures à la\n" "9.0." -#: utils/misc/guc.c:1958 +#: utils/misc/guc.c:1966 msgid "When generating SQL fragments, quote all identifiers." msgstr "Lors de la génération des rragments SQL, mettre entre guillemets tous les identifiants." -#: utils/misc/guc.c:1968 +#: utils/misc/guc.c:1976 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Affiche si les sommes de contrôle sont activées sur les données pour cette instance." -#: utils/misc/guc.c:1979 +#: utils/misc/guc.c:1987 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Ajoute un numéro de séquence aux messages syslog pour éviter des suppressions de doublons." -#: utils/misc/guc.c:1989 +#: utils/misc/guc.c:1997 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "Sépare les messages envoyés à syslog par lignes afin de les faire tenir dans 1024 octets." -#: utils/misc/guc.c:1999 +#: utils/misc/guc.c:2007 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Controle si les nœuds Gather et Gather Merge doivent également exécuter des sous-plans." -#: utils/misc/guc.c:2000 +#: utils/misc/guc.c:2008 msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "Est-ce que les nœuds Gather devraient également exécuter des sous-plans, ou juste recueillir des lignes ?" -#: utils/misc/guc.c:2010 +#: utils/misc/guc.c:2018 msgid "Allow JIT compilation." msgstr "Autorise la compilation JIT." -#: utils/misc/guc.c:2021 +#: utils/misc/guc.c:2029 msgid "Register JIT-compiled functions with debugger." msgstr "Enregistre les fonctions compilées avec JIT avec le debugger." -#: utils/misc/guc.c:2038 +#: utils/misc/guc.c:2046 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "Écrire le bitcode LLVM pour faciliter de débugage JIT." -#: utils/misc/guc.c:2049 +#: utils/misc/guc.c:2057 msgid "Allow JIT compilation of expressions." msgstr "Autorise la compilation JIT des expressions." -#: utils/misc/guc.c:2060 +#: utils/misc/guc.c:2068 msgid "Register JIT-compiled functions with perf profiler." msgstr "Enregistre les fonctions compilées avec JIT avec l'outil de profilage perf." -#: utils/misc/guc.c:2077 +#: utils/misc/guc.c:2085 msgid "Allow JIT compilation of tuple deforming." msgstr "Autorise la compilation JIT de la décomposition des lignes." -#: utils/misc/guc.c:2088 +#: utils/misc/guc.c:2096 msgid "Whether to continue running after a failure to sync data files." msgstr "Soit de continuer à s'exécuter après un échec lors de la synchronisation des fichiers de données." -#: utils/misc/guc.c:2097 +#: utils/misc/guc.c:2105 msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." msgstr "Configure si un wal receiver doit créer un slot de réplication temporaire si aucun slot permanent n'est configuré." -#: utils/misc/guc.c:2115 +#: utils/misc/guc.c:2123 msgid "Forces a switch to the next WAL file if a new file has not been started within N seconds." msgstr "" "Force un changement du journal de transaction si un nouveau fichier n'a pas\n" "été créé depuis N secondes." -#: utils/misc/guc.c:2126 +#: utils/misc/guc.c:2134 msgid "Waits N seconds on connection startup after authentication." msgstr "Attends N secondes après l'authentification." -#: utils/misc/guc.c:2127 utils/misc/guc.c:2725 +#: utils/misc/guc.c:2135 utils/misc/guc.c:2733 msgid "This allows attaching a debugger to the process." msgstr "Ceci permet d'attacher un débogueur au processus." -#: utils/misc/guc.c:2136 +#: utils/misc/guc.c:2144 msgid "Sets the default statistics target." msgstr "Initialise la cible par défaut des statistiques." -#: utils/misc/guc.c:2137 +#: utils/misc/guc.c:2145 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "" "Ceci s'applique aux colonnes de tables qui n'ont pas de cible spécifique\n" "pour la colonne initialisée via ALTER TABLE SET STATISTICS." -#: utils/misc/guc.c:2146 +#: utils/misc/guc.c:2154 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "" "Initialise la taille de la liste FROM en dehors de laquelle les\n" "sous-requêtes ne sont pas rassemblées." -#: utils/misc/guc.c:2148 +#: utils/misc/guc.c:2156 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "" "Le planificateur fusionne les sous-requêtes dans des requêtes supérieures\n" "si la liste FROM résultante n'a pas plus de ce nombre d'éléments." -#: utils/misc/guc.c:2159 +#: utils/misc/guc.c:2167 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "" "Initialise la taille de la liste FROM en dehors de laquelle les contructions\n" "JOIN ne sont pas aplanies." -#: utils/misc/guc.c:2161 +#: utils/misc/guc.c:2169 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "" "La planificateur applanira les constructions JOIN explicites dans des listes\n" "d'éléments FROM lorsqu'une liste d'au plus ce nombre d'éléments en\n" "résulterait." -#: utils/misc/guc.c:2172 +#: utils/misc/guc.c:2180 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Initialise la limite des éléments FROM en dehors de laquelle GEQO est utilisé." -#: utils/misc/guc.c:2182 +#: utils/misc/guc.c:2190 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "" "GEQO : l'effort est utilisé pour initialiser une valeur par défaut pour les\n" "autres paramètres GEQO." -#: utils/misc/guc.c:2192 +#: utils/misc/guc.c:2200 msgid "GEQO: number of individuals in the population." msgstr "GEQO : nombre d'individus dans une population." -#: utils/misc/guc.c:2193 utils/misc/guc.c:2203 +#: utils/misc/guc.c:2201 utils/misc/guc.c:2211 msgid "Zero selects a suitable default value." msgstr "Zéro sélectionne une valeur par défaut convenable." -#: utils/misc/guc.c:2202 +#: utils/misc/guc.c:2210 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO : nombre d'itérations dans l'algorithme." -#: utils/misc/guc.c:2214 +#: utils/misc/guc.c:2222 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Temps d'attente du verrou avant de vérifier les verrous bloqués." -#: utils/misc/guc.c:2225 +#: utils/misc/guc.c:2233 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Définit le délai maximum avant d'annuler les requêtes lorsqu'un serveur « hot standby » traite les données des journaux de transactions archivés" -#: utils/misc/guc.c:2236 +#: utils/misc/guc.c:2244 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "" "Initialise le délai maximum avant d'annuler les requêtes lorsqu'un serveur en\n" "hotstandby traite les données des journaux de transactions envoyés en flux." -#: utils/misc/guc.c:2247 +#: utils/misc/guc.c:2255 msgid "Sets the minimum delay for applying changes during recovery." msgstr "Définit la durée minimale pour appliquer des changements lors de la restauration." -#: utils/misc/guc.c:2258 +#: utils/misc/guc.c:2266 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "Définit l'intervalle maximum entre les rapports du statut du walreceiver au serveur émetteur." -#: utils/misc/guc.c:2269 +#: utils/misc/guc.c:2277 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "Définit la durée maximale d'attente pour réceptionner des donnés du serveur émetteur." -#: utils/misc/guc.c:2280 +#: utils/misc/guc.c:2288 msgid "Sets the maximum number of concurrent connections." msgstr "Nombre maximum de connexions simultanées." -#: utils/misc/guc.c:2291 +#: utils/misc/guc.c:2299 msgid "Sets the number of connection slots reserved for superusers." msgstr "Nombre de connexions réservées aux super-utilisateurs." -#: utils/misc/guc.c:2301 +#: utils/misc/guc.c:2309 msgid "Amount of dynamic shared memory reserved at startup." msgstr "Quantité de mémoire partagée dynamique réservée au démarrage." -#: utils/misc/guc.c:2316 +#: utils/misc/guc.c:2324 msgid "Sets the number of shared memory buffers used by the server." msgstr "Nombre de tampons en mémoire partagée utilisé par le serveur." -#: utils/misc/guc.c:2327 +#: utils/misc/guc.c:2335 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Nombre maximum de tampons en mémoire partagée utilisés par chaque session." -#: utils/misc/guc.c:2338 +#: utils/misc/guc.c:2346 msgid "Sets the TCP port the server listens on." msgstr "Port TCP sur lequel le serveur écoutera." -#: utils/misc/guc.c:2348 +#: utils/misc/guc.c:2356 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Droits d'accès au socket domaine Unix." -#: utils/misc/guc.c:2349 +#: utils/misc/guc.c:2357 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "" "Les sockets de domaine Unix utilise l'ensemble des droits habituels du système\n" @@ -26661,231 +26683,231 @@ msgstr "" "mode numérique de la forme acceptée par les appels système chmod et umask\n" "(pour utiliser le format octal, le nombre doit commencer par un zéro)." -#: utils/misc/guc.c:2363 +#: utils/misc/guc.c:2371 msgid "Sets the file permissions for log files." msgstr "Initialise les droits des fichiers de trace." -#: utils/misc/guc.c:2364 +#: utils/misc/guc.c:2372 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "" "La valeur du paramètre est attendue dans le format numérique du mode accepté\n" "par les appels système chmod et umask (pour utiliser le format octal\n" "personnalisé, le numéro doit commencer par un zéro)." -#: utils/misc/guc.c:2378 +#: utils/misc/guc.c:2386 msgid "Shows the mode of the data directory." msgstr "Affiche le mode du répertoire des données." -#: utils/misc/guc.c:2379 +#: utils/misc/guc.c:2387 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "" "La valeur du paramètre est une spécification numérique de mode dans la forme acceptée\n" "par les appels système chmod et umask (pour utiliser le format octal\n" "personnalisé, le numéro doit commencer par un 0 (zéro).)" -#: utils/misc/guc.c:2392 +#: utils/misc/guc.c:2400 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Initialise la mémoire maximum utilisée pour les espaces de travail des requêtes." -#: utils/misc/guc.c:2393 +#: utils/misc/guc.c:2401 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "" "Spécifie la mémoire à utiliser par les opérations de tris internes et par\n" "les tables de hachage avant de passer sur des fichiers temporaires sur disque." -#: utils/misc/guc.c:2405 +#: utils/misc/guc.c:2413 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Initialise la mémoire maximum utilisée pour les opérations de maintenance." -#: utils/misc/guc.c:2406 +#: utils/misc/guc.c:2414 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Ceci inclut les opérations comme VACUUM et CREATE INDEX." -#: utils/misc/guc.c:2416 +#: utils/misc/guc.c:2424 msgid "Sets the maximum memory to be used for logical decoding." msgstr "Initialise la mémoire maximum utilisée pour le décodage logique." -#: utils/misc/guc.c:2417 +#: utils/misc/guc.c:2425 msgid "This much memory can be used by each internal reorder buffer before spilling to disk." msgstr "Cette quantité de mémoire peut être utilisée par chaque cache de tri interne avant de passer sur des fichiers temporaires sur disque." -#: utils/misc/guc.c:2433 +#: utils/misc/guc.c:2441 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Initialise la profondeur maximale de la pile, en Ko." -#: utils/misc/guc.c:2444 +#: utils/misc/guc.c:2452 msgid "Limits the total size of all temporary files used by each process." msgstr "Limite la taille totale de tous les fichiers temporaires utilisés par chaque processus." -#: utils/misc/guc.c:2445 +#: utils/misc/guc.c:2453 msgid "-1 means no limit." msgstr "-1 signifie sans limite." -#: utils/misc/guc.c:2455 +#: utils/misc/guc.c:2463 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Coût d'un VACUUM pour une page trouvée dans le cache du tampon." -#: utils/misc/guc.c:2465 +#: utils/misc/guc.c:2473 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Coût d'un VACUUM pour une page introuvable dans le cache du tampon." -#: utils/misc/guc.c:2475 +#: utils/misc/guc.c:2483 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Coût d'un VACUUM pour une page modifiée par VACUUM." -#: utils/misc/guc.c:2485 +#: utils/misc/guc.c:2493 msgid "Vacuum cost amount available before napping." msgstr "Coût du VACUUM disponible avant un repos." -#: utils/misc/guc.c:2495 +#: utils/misc/guc.c:2503 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Coût du VACUUM disponible avant un repos, pour autovacuum." -#: utils/misc/guc.c:2505 +#: utils/misc/guc.c:2513 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "" "Initialise le nombre maximum de fichiers ouverts simultanément pour chaque\n" "processus serveur." -#: utils/misc/guc.c:2518 +#: utils/misc/guc.c:2526 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Initialise le nombre maximum de transactions préparées simultanément." -#: utils/misc/guc.c:2529 +#: utils/misc/guc.c:2537 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Initialise l'OID minimum des tables pour tracer les verrous." -#: utils/misc/guc.c:2530 +#: utils/misc/guc.c:2538 msgid "Is used to avoid output on system tables." msgstr "Est utilisé pour éviter la sortie sur des tables systèmes." -#: utils/misc/guc.c:2539 +#: utils/misc/guc.c:2547 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Configure l'OID de la table avec une trace des verrous sans condition." -#: utils/misc/guc.c:2551 +#: utils/misc/guc.c:2559 msgid "Sets the maximum allowed duration of any statement." msgstr "Initialise la durée maximum permise pour toute instruction." -#: utils/misc/guc.c:2552 utils/misc/guc.c:2563 utils/misc/guc.c:2574 utils/misc/guc.c:2585 +#: utils/misc/guc.c:2560 utils/misc/guc.c:2571 utils/misc/guc.c:2582 utils/misc/guc.c:2593 msgid "A value of 0 turns off the timeout." msgstr "Une valeur de 0 désactive le timeout." -#: utils/misc/guc.c:2562 +#: utils/misc/guc.c:2570 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Initialise la durée maximum permise pour toute attente d'un verrou." -#: utils/misc/guc.c:2573 +#: utils/misc/guc.c:2581 msgid "Sets the maximum allowed idle time between queries, when in a transaction." msgstr "Configure la durée maximale autorisée d'attente entre deux requêtes dans une transaction." -#: utils/misc/guc.c:2584 +#: utils/misc/guc.c:2592 msgid "Sets the maximum allowed idle time between queries, when not in a transaction." msgstr "Configure la durée maximale autorisée d'attente entre deux requêtes hors d'une transaction." -#: utils/misc/guc.c:2595 +#: utils/misc/guc.c:2603 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Âge minimum à partir duquel VACUUM devra geler une ligne de table." -#: utils/misc/guc.c:2605 +#: utils/misc/guc.c:2613 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Âge à partir duquel VACUUM devra parcourir une table complète pour geler les lignes." -#: utils/misc/guc.c:2615 +#: utils/misc/guc.c:2623 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Âge minimum à partir duquel VACUUM devra geler un MultiXactId dans une ligne de table." -#: utils/misc/guc.c:2625 +#: utils/misc/guc.c:2633 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "" "Âge Multixact à partir duquel VACUUM devra parcourir une table complète pour geler les\n" "lignes." -#: utils/misc/guc.c:2635 +#: utils/misc/guc.c:2643 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Nombre de transactions à partir duquel les nettoyages VACUUM et HOT doivent être déferrés." -#: utils/misc/guc.c:2644 +#: utils/misc/guc.c:2652 msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "" -#: utils/misc/guc.c:2653 +#: utils/misc/guc.c:2661 msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "" -#: utils/misc/guc.c:2666 +#: utils/misc/guc.c:2674 msgid "Sets the maximum number of locks per transaction." msgstr "Initialise le nombre maximum de verrous par transaction." -#: utils/misc/guc.c:2667 +#: utils/misc/guc.c:2675 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "" "La table des verrous partagés est dimensionnée sur l'idée qu'au plus\n" "max_locks_per_transaction * max_connections objets distincts auront besoin\n" "d'être verrouillés à tout moment." -#: utils/misc/guc.c:2678 +#: utils/misc/guc.c:2686 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Initialise le nombre maximum de verrous prédicats par transaction." -#: utils/misc/guc.c:2679 +#: utils/misc/guc.c:2687 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "" "La table des verrous de prédicat partagés est dimensionnée sur l'idée qu'au plus\n" "max_pred_locks_per_transaction * max_connections objets distincts auront besoin\n" "d'être verrouillés à tout moment." -#: utils/misc/guc.c:2690 +#: utils/misc/guc.c:2698 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "Initialise le nombre maximum de pages et lignes verrouillées avec prédicats par transaction." -#: utils/misc/guc.c:2691 +#: utils/misc/guc.c:2699 msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." msgstr "Si plus que ce nombre de pages et lignes dans la même relation sont verrouillées par une connexion, ces verrous sont remplacés par un verrou de niveau relation." -#: utils/misc/guc.c:2701 +#: utils/misc/guc.c:2709 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Initialise le nombre maximum de lignes verrouillées avec prédicat par transaction." -#: utils/misc/guc.c:2702 +#: utils/misc/guc.c:2710 msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." msgstr "Si plus que ce nombre de lignes sur la même page sont verrouillées par une connexion, ces verrous sont remplacés par un verrou de niveau de page." -#: utils/misc/guc.c:2712 +#: utils/misc/guc.c:2720 msgid "Sets the maximum allowed time to complete client authentication." msgstr "" "Initialise le temps maximum en secondes pour terminer l'authentification du\n" "client." -#: utils/misc/guc.c:2724 +#: utils/misc/guc.c:2732 msgid "Waits N seconds on connection startup before authentication." msgstr "Attends N secondes au lancement de la connexion avant l'authentification." -#: utils/misc/guc.c:2735 +#: utils/misc/guc.c:2743 msgid "Sets the size of WAL files held for standby servers." msgstr "Initialise la volumétrie de journaux de transactions conservés pour les serveurs standby." -#: utils/misc/guc.c:2746 +#: utils/misc/guc.c:2754 msgid "Sets the minimum size to shrink the WAL to." msgstr "Initialise la taille minimale à laquelle réduire l'espace des journaux de transaction." -#: utils/misc/guc.c:2758 +#: utils/misc/guc.c:2766 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Initialise la volumétrie de journaux de transaction qui déclenche un checkpoint." -#: utils/misc/guc.c:2770 +#: utils/misc/guc.c:2778 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "" "Initialise le temps maximum entre des points de vérification (checkpoints)\n" "pour les journaux de transactions." -#: utils/misc/guc.c:2781 +#: utils/misc/guc.c:2789 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "" "Active des messages d'avertissement si les segments des points de\n" "vérifications se remplissent plus fréquemment que cette durée." -#: utils/misc/guc.c:2783 +#: utils/misc/guc.c:2791 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "" "Écrit un message dans les journaux applicatifs du serveur si les points de\n" @@ -26893,969 +26915,973 @@ msgstr "" "des points de vérification qui arrivent plus fréquemment que ce nombre de\n" "secondes. Une valeur 0 désactive l'avertissement." -#: utils/misc/guc.c:2795 utils/misc/guc.c:3011 utils/misc/guc.c:3058 +#: utils/misc/guc.c:2803 utils/misc/guc.c:3019 utils/misc/guc.c:3066 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "Nombre de pages après lequel les précédentes écritures seront synchronisées sur disque." -#: utils/misc/guc.c:2806 +#: utils/misc/guc.c:2814 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "" "Initialise le nombre de tampons de pages disque dans la mémoire partagée\n" "pour les journaux de transactions." -#: utils/misc/guc.c:2817 +#: utils/misc/guc.c:2825 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Temps entre les synchronisations des WAL sur disque effectuées par le processus d'écriture des journaux de transaction." -#: utils/misc/guc.c:2828 +#: utils/misc/guc.c:2836 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Quantité de WAL écrits par le processus d'écriture des journaux de transaction devant déclencher une synchronisation sur disque." -#: utils/misc/guc.c:2839 +#: utils/misc/guc.c:2847 msgid "Minimum size of new file to fsync instead of writing WAL." msgstr "Taille minimale d'un nouveau fichier à synchroniser sur disque au lieu d'écrire dans les journaux de transactions." -#: utils/misc/guc.c:2850 +#: utils/misc/guc.c:2858 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "" "Initialise le nombre maximum de processus d'envoi des journaux de transactions\n" "exécutés simultanément." -#: utils/misc/guc.c:2861 +#: utils/misc/guc.c:2869 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Initialise le nombre maximum de slots de réplication définis simultanément." -#: utils/misc/guc.c:2871 +#: utils/misc/guc.c:2879 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "Initialise la volumétrie maximale des journaux de transactions pouvant être réservée pour les slots de réplication." -#: utils/misc/guc.c:2872 +#: utils/misc/guc.c:2880 msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." msgstr "Les slots de réplication seront marqués comme échoués, et les segments relâchés pour suppression ou recyclage si autant d'espace est occupé par les journaux sur disque." -#: utils/misc/guc.c:2884 +#: utils/misc/guc.c:2892 msgid "Sets the maximum time to wait for WAL replication." msgstr "Initialise le temps maximum à attendre pour la réplication des WAL." -#: utils/misc/guc.c:2895 +#: utils/misc/guc.c:2903 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "" "Initialise le délai en microsecondes entre l'acceptation de la transaction\n" "et le vidage du journal de transaction sur disque." -#: utils/misc/guc.c:2907 +#: utils/misc/guc.c:2915 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "" "Initialise le nombre minimum de transactions ouvertes simultanément avant le\n" "commit_delay." -#: utils/misc/guc.c:2918 +#: utils/misc/guc.c:2926 msgid "Sets the number of digits displayed for floating-point values." msgstr "Initialise le nombre de chiffres affichés pour les valeurs à virgule flottante." -#: utils/misc/guc.c:2919 +#: utils/misc/guc.c:2927 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." msgstr "Ceci affecte les types de données real, double precision et géométriques. Une valeur zéro ou négative du paramètre est ajoutée au nombre standard de chiffres (FLT_DIG ou DBL_DIG comme approprié). Toute valeur plus grande que zéro sélectionne le mode de sortie précis." -#: utils/misc/guc.c:2931 +#: utils/misc/guc.c:2939 msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." msgstr "Initialise le temps d'exécution minimum au-dessus duquel un échantillon de requêtes est tracé. L'échantillonnage est déterminé par log_statement_sample_rate." -#: utils/misc/guc.c:2934 +#: utils/misc/guc.c:2942 msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "Zéro trace un échantillon de toutes les requêtes. -1 désactive cette fonctionnalité." -#: utils/misc/guc.c:2944 +#: utils/misc/guc.c:2952 msgid "Sets the minimum execution time above which all statements will be logged." msgstr "Initialise le temps d'exécution minimum au-dessus duquel toutes les requêtes seront tracées." -#: utils/misc/guc.c:2946 +#: utils/misc/guc.c:2954 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Zéro affiche toutes les requêtes. -1 désactive cette fonctionnalité." -#: utils/misc/guc.c:2956 +#: utils/misc/guc.c:2964 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "" "Initialise le temps d'exécution minimum au-dessus duquel les actions\n" "autovacuum seront tracées." -#: utils/misc/guc.c:2958 +#: utils/misc/guc.c:2966 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Zéro affiche toutes les requêtes. -1 désactive cette fonctionnalité." -#: utils/misc/guc.c:2968 +#: utils/misc/guc.c:2976 msgid "When logging statements, limit logged parameter values to first N bytes." msgstr "Lors de la trace des requêtes, limite les valeurs des paramètres tracés aux N premiers octets." -#: utils/misc/guc.c:2969 utils/misc/guc.c:2980 +#: utils/misc/guc.c:2977 utils/misc/guc.c:2988 msgid "-1 to print values in full." msgstr "-1 pour afficher les valeurs complètement." -#: utils/misc/guc.c:2979 +#: utils/misc/guc.c:2987 msgid "When reporting an error, limit logged parameter values to first N bytes." msgstr "Lors de la trace d'une erreur, limite les valeurs des paramètres tracés aux N premiers octets." -#: utils/misc/guc.c:2990 +#: utils/misc/guc.c:2998 msgid "Background writer sleep time between rounds." msgstr "Durée d'endormissement du processus d'écriture en tâche de fond (background writer) entre deux cycles." -#: utils/misc/guc.c:3001 +#: utils/misc/guc.c:3009 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Nombre maximum de pages LRU à nettoyer par le processus d'écriture en tâche de fond (background writer)" -#: utils/misc/guc.c:3024 +#: utils/misc/guc.c:3032 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Nombre de requêtes simultanées pouvant être gérées efficacement par le sous-système disque." -#: utils/misc/guc.c:3042 +#: utils/misc/guc.c:3050 msgid "A variant of effective_io_concurrency that is used for maintenance work." msgstr "Une variante de effective_io_concurrency pouvant être utilisée pour les travaux de maintenance." -#: utils/misc/guc.c:3071 +#: utils/misc/guc.c:3079 msgid "Maximum number of concurrent worker processes." msgstr "Nombre maximum de background workers simultanés." -#: utils/misc/guc.c:3083 +#: utils/misc/guc.c:3091 msgid "Maximum number of logical replication worker processes." msgstr "Nombre maximum de processus workers de réplication logique." -#: utils/misc/guc.c:3095 +#: utils/misc/guc.c:3103 msgid "Maximum number of table synchronization workers per subscription." msgstr "Nombre maximum de workers de synchronisation par souscription." -#: utils/misc/guc.c:3105 +#: utils/misc/guc.c:3113 msgid "Automatic log file rotation will occur after N minutes." msgstr "La rotation automatique des journaux applicatifs s'effectuera toutes les N minutes." -#: utils/misc/guc.c:3116 +#: utils/misc/guc.c:3124 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "La rotation automatique des journaux applicatifs s'effectuera après N kilooctets." -#: utils/misc/guc.c:3127 +#: utils/misc/guc.c:3135 msgid "Shows the maximum number of function arguments." msgstr "Affiche le nombre maximum d'arguments de fonction." -#: utils/misc/guc.c:3138 +#: utils/misc/guc.c:3146 msgid "Shows the maximum number of index keys." msgstr "Affiche le nombre maximum de clés d'index." -#: utils/misc/guc.c:3149 +#: utils/misc/guc.c:3157 msgid "Shows the maximum identifier length." msgstr "Affiche la longueur maximum d'un identifiant." -#: utils/misc/guc.c:3160 +#: utils/misc/guc.c:3168 msgid "Shows the size of a disk block." msgstr "Affiche la taille d'un bloc de disque." -#: utils/misc/guc.c:3171 +#: utils/misc/guc.c:3179 msgid "Shows the number of pages per disk file." msgstr "Affiche le nombre de pages par fichier." -#: utils/misc/guc.c:3182 +#: utils/misc/guc.c:3190 msgid "Shows the block size in the write ahead log." msgstr "Affiche la taille du bloc dans les journaux de transactions." -#: utils/misc/guc.c:3193 +#: utils/misc/guc.c:3201 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Initalise le temps à attendre avant de retenter de récupérer un WAL après une tentative infructueuse." -#: utils/misc/guc.c:3205 +#: utils/misc/guc.c:3213 msgid "Shows the size of write ahead log segments." msgstr "Affiche la taille des journaux de transactions." -#: utils/misc/guc.c:3218 +#: utils/misc/guc.c:3226 msgid "Time to sleep between autovacuum runs." msgstr "Durée d'endormissement entre deux exécutions d'autovacuum." -#: utils/misc/guc.c:3228 +#: utils/misc/guc.c:3236 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Nombre minimum de lignes mises à jour ou supprimées avant le VACUUM." -#: utils/misc/guc.c:3237 +#: utils/misc/guc.c:3245 msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." msgstr "Nombre minimum de lignes insérées avant un ANALYZE, ou -1 pour désactiver ce comportement" -#: utils/misc/guc.c:3246 +#: utils/misc/guc.c:3254 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Nombre minimum de lignes insérées, mises à jour ou supprimées avant un ANALYZE." -#: utils/misc/guc.c:3256 +#: utils/misc/guc.c:3264 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Âge à partir duquel l'autovacuum se déclenche sur une table pour empêcher un rebouclage des identifiants de transaction." -#: utils/misc/guc.c:3270 +#: utils/misc/guc.c:3279 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Âge multixact à partir duquel l'autovacuum se déclenche sur une table pour empêcher la réinitialisation du multixact" -#: utils/misc/guc.c:3280 +#: utils/misc/guc.c:3289 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Initialise le nombre maximum de processus autovacuum exécutés simultanément." -#: utils/misc/guc.c:3290 +#: utils/misc/guc.c:3299 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "Initialise le nombre maximum de processus parallèles par opération de maintenance." -#: utils/misc/guc.c:3300 +#: utils/misc/guc.c:3309 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Initialise le nombre maximum de processus parallèles par nœud d'exécution." -#: utils/misc/guc.c:3311 +#: utils/misc/guc.c:3320 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "Configure le nombre maximum de processus parallélisés pouvant être actifs en même temps." -#: utils/misc/guc.c:3322 +#: utils/misc/guc.c:3331 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Initialise la mémoire maximum utilisée par chaque processus autovacuum worker." -#: utils/misc/guc.c:3333 +#: utils/misc/guc.c:3342 msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." msgstr "Temps à partir duquel un snapshot est trop ancien pour lire des pages ayant changées après que le snapshot ait été effectué." -#: utils/misc/guc.c:3334 +#: utils/misc/guc.c:3343 msgid "A value of -1 disables this feature." msgstr "Une valeur de -1 désactive cette fonctionnalité." -#: utils/misc/guc.c:3344 +#: utils/misc/guc.c:3353 msgid "Time between issuing TCP keepalives." msgstr "Secondes entre l'exécution de « TCP keepalives »." -#: utils/misc/guc.c:3345 utils/misc/guc.c:3356 utils/misc/guc.c:3480 +#: utils/misc/guc.c:3354 utils/misc/guc.c:3365 utils/misc/guc.c:3489 msgid "A value of 0 uses the system default." msgstr "Une valeur de 0 utilise la valeur par défaut du système." -#: utils/misc/guc.c:3355 +#: utils/misc/guc.c:3364 msgid "Time between TCP keepalive retransmits." msgstr "Secondes entre les retransmissions de « TCP keepalive »." -#: utils/misc/guc.c:3366 +#: utils/misc/guc.c:3375 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "La renégociation SSL n'est plus supportée; ce paramètre ne peut être positionné qu'à 0." -#: utils/misc/guc.c:3377 +#: utils/misc/guc.c:3386 msgid "Maximum number of TCP keepalive retransmits." msgstr "Nombre maximum de retransmissions de « TCP keepalive »." -#: utils/misc/guc.c:3378 +#: utils/misc/guc.c:3387 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "" "Ceci contrôle le nombre de retransmissions keepalive consécutives qui\n" "peuvent être perdues avant qu'une connexion ne soit considérée morte. Une\n" "valeur de 0 utilise la valeur par défaut du système." -#: utils/misc/guc.c:3389 +#: utils/misc/guc.c:3398 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Configure le nombre maximum de résultats lors d'une recherche par GIN." -#: utils/misc/guc.c:3400 +#: utils/misc/guc.c:3409 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Initialise le sentiment du planificateur sur la taille des caches disques." -#: utils/misc/guc.c:3401 +#: utils/misc/guc.c:3410 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "" "C'est-à-dire, la portion des caches disques (noyau et PostgreSQL) qui sera utilisé pour les\n" "fichiers de données de PostgreSQL. C'est mesuré en pages disque, qui font\n" "normalement 8 Ko chaque." -#: utils/misc/guc.c:3412 +#: utils/misc/guc.c:3421 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Configure la quantité minimale de données de table pour un parcours parallèle." -#: utils/misc/guc.c:3413 +#: utils/misc/guc.c:3422 msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." msgstr "Si le planificateur estime qu'il lira un nombre de blocs de table trop petit pour atteindre cette limite, un parcours parallèle ne sera pas considéré." -#: utils/misc/guc.c:3423 +#: utils/misc/guc.c:3432 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Configure la quantité minimale de données d'index pour un parcours parallèle." -#: utils/misc/guc.c:3424 +#: utils/misc/guc.c:3433 msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." msgstr "Si le planificateur estime qu'il lira un nombre de blocs d'index trop petit pour atteindre cette limite, un parcours parallèle ne sera pas considéré." -#: utils/misc/guc.c:3435 +#: utils/misc/guc.c:3444 msgid "Shows the server version as an integer." msgstr "Affiche la version du serveur sous la forme d'un entier." -#: utils/misc/guc.c:3446 +#: utils/misc/guc.c:3455 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "" "Trace l'utilisation de fichiers temporaires plus gros que ce nombre de\n" "kilooctets." -#: utils/misc/guc.c:3447 +#: utils/misc/guc.c:3456 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "" "Zéro trace toutes les requêtes. La valeur par défaut est -1 (désactivant\n" "cette fonctionnalité)." -#: utils/misc/guc.c:3457 +#: utils/misc/guc.c:3466 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Configure la taille réservée pour pg_stat_activity.query, en octets." -#: utils/misc/guc.c:3468 +#: utils/misc/guc.c:3477 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Configure la taille maximale de la pending list d'un index GIN." -#: utils/misc/guc.c:3479 +#: utils/misc/guc.c:3488 msgid "TCP user timeout." msgstr "Délai d'attente maximal TCP utilisateur." -#: utils/misc/guc.c:3490 +#: utils/misc/guc.c:3499 msgid "The size of huge page that should be requested." msgstr "La taille du Huge Page devant être réclamé." -#: utils/misc/guc.c:3501 +#: utils/misc/guc.c:3510 msgid "Aggressively invalidate system caches for debugging purposes." msgstr "" -#: utils/misc/guc.c:3524 +#: utils/misc/guc.c:3533 msgid "Sets the time interval between checks for disconnection while running queries." msgstr "Configure l'intervalle de temps entre des vérifications de déconnexion lors de l'exécution de requêtes." -#: utils/misc/guc.c:3544 +#: utils/misc/guc.c:3553 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "" "Initialise l'estimation du planificateur pour le coût d'une page disque\n" "récupérée séquentiellement." -#: utils/misc/guc.c:3555 +#: utils/misc/guc.c:3564 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "" "Initialise l'estimation du plnnificateur pour le coût d'une page disque\n" "récupérée non séquentiellement." -#: utils/misc/guc.c:3566 +#: utils/misc/guc.c:3575 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "" "Initialise l'estimation du planificateur pour le coût d'exécution sur chaque\n" "ligne." -#: utils/misc/guc.c:3577 +#: utils/misc/guc.c:3586 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "" "Initialise l'estimation du planificateur pour le coût de traitement de\n" "chaque ligne indexée lors d'un parcours d'index." -#: utils/misc/guc.c:3588 +#: utils/misc/guc.c:3597 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "" "Initialise l'estimation du planificateur pour le coût de traitement de\n" "chaque opérateur ou appel de fonction." -#: utils/misc/guc.c:3599 +#: utils/misc/guc.c:3608 msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to leader backend." msgstr "Configure l'estimation du planificateur pour le coût de passage de chaque ligne d'un processus worker vers son processus leader." -#: utils/misc/guc.c:3610 +#: utils/misc/guc.c:3619 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "Initialise l'estimation du planificateur pour le coût de démarrage des processus d'exécution de requêtes parallèles." -#: utils/misc/guc.c:3622 +#: utils/misc/guc.c:3631 msgid "Perform JIT compilation if query is more expensive." msgstr "Effectuer une compilation JIT si la requête est plus coûteuse." -#: utils/misc/guc.c:3623 +#: utils/misc/guc.c:3632 msgid "-1 disables JIT compilation." msgstr "-1 désactive la compilation JIT." -#: utils/misc/guc.c:3633 +#: utils/misc/guc.c:3642 msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "Optimise les fonctions compilées avec JIT si la requête est plus coûteuse." -#: utils/misc/guc.c:3634 +#: utils/misc/guc.c:3643 msgid "-1 disables optimization." msgstr "-1 désactive l'optimisation." -#: utils/misc/guc.c:3644 +#: utils/misc/guc.c:3653 msgid "Perform JIT inlining if query is more expensive." msgstr "Effectuer un inlining JIT si la requête est plus coûteuse." -#: utils/misc/guc.c:3645 +#: utils/misc/guc.c:3654 msgid "-1 disables inlining." msgstr "-1 désactive l'inlining." -#: utils/misc/guc.c:3655 +#: utils/misc/guc.c:3664 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Initialise l'estimation du planificateur de la fraction des lignes d'un curseur à récupérer." -#: utils/misc/guc.c:3667 +#: utils/misc/guc.c:3676 msgid "GEQO: selective pressure within the population." msgstr "GEQO : pression sélective dans la population." -#: utils/misc/guc.c:3678 +#: utils/misc/guc.c:3687 msgid "GEQO: seed for random path selection." msgstr "GEQO : graine pour la sélection du chemin aléatoire." -#: utils/misc/guc.c:3689 +#: utils/misc/guc.c:3698 msgid "Multiple of work_mem to use for hash tables." msgstr "Multiple de work_mem à utiliser pour les tables de hachage." -#: utils/misc/guc.c:3700 +#: utils/misc/guc.c:3709 msgid "Multiple of the average buffer usage to free per round." msgstr "Multiplede l'utilisation moyenne des tampons à libérer à chaque tour." -#: utils/misc/guc.c:3710 +#: utils/misc/guc.c:3719 msgid "Sets the seed for random-number generation." msgstr "Initialise la clé pour la génération de nombres aléatoires." -#: utils/misc/guc.c:3721 +#: utils/misc/guc.c:3730 msgid "Vacuum cost delay in milliseconds." msgstr "Délai d'un coût de VACUUM en millisecondes." -#: utils/misc/guc.c:3732 +#: utils/misc/guc.c:3741 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Délai d'un coût de VACUUM en millisecondes, pour autovacuum." -#: utils/misc/guc.c:3743 +#: utils/misc/guc.c:3752 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "" "Nombre de lignes modifiées ou supprimées avant d'exécuter un VACUUM\n" "(fraction de reltuples)." -#: utils/misc/guc.c:3753 +#: utils/misc/guc.c:3762 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "Nombre de lignes insérées avant d'effectuer un VACUUM (fraction de reltuples)." -#: utils/misc/guc.c:3763 +#: utils/misc/guc.c:3772 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "" "Nombre de lignes insérées, mises à jour ou supprimées avant d'analyser\n" "une fraction de reltuples." -#: utils/misc/guc.c:3773 +#: utils/misc/guc.c:3782 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "" "Temps passé à vider les tampons lors du point de vérification, en tant que\n" "fraction de l'intervalle du point de vérification." -#: utils/misc/guc.c:3783 +#: utils/misc/guc.c:3792 msgid "Fraction of statements exceeding log_min_duration_sample to be logged." msgstr "Fraction de requêtes dépassant log_min_duration_sample à tracer" -#: utils/misc/guc.c:3784 +#: utils/misc/guc.c:3793 msgid "Use a value between 0.0 (never log) and 1.0 (always log)." msgstr "Utilisez une valeur entre 0,0 (pas de trace) et 1.0 (tracer tout)." -#: utils/misc/guc.c:3793 +#: utils/misc/guc.c:3802 msgid "Sets the fraction of transactions from which to log all statements." msgstr "Configure la fraction des transactions pour lesquelles il faut tracer toutes les requêtes" -#: utils/misc/guc.c:3794 +#: utils/misc/guc.c:3803 msgid "Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgstr "Utiliser une valeur entre 0.0 (aucune trace) et 1.0 (trace tous les requêtes de toutes les transactions)." -#: utils/misc/guc.c:3813 +#: utils/misc/guc.c:3822 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "La commande shell qui sera appelée pour archiver un journal de transaction." -#: utils/misc/guc.c:3823 +#: utils/misc/guc.c:3832 msgid "Sets the shell command that will be called to retrieve an archived WAL file." msgstr "Définit la commande shell qui sera appelée pour récupérer un fichier WAL archivé." -#: utils/misc/guc.c:3833 +#: utils/misc/guc.c:3842 msgid "Sets the shell command that will be executed at every restart point." msgstr "Définit la commande shell qui sera appelée à chaque point de reprise (restart point)." -#: utils/misc/guc.c:3843 +#: utils/misc/guc.c:3852 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "Définit la commande shell qui sera appelée une fois à la fin de la restauration." -#: utils/misc/guc.c:3853 +#: utils/misc/guc.c:3862 msgid "Specifies the timeline to recover into." msgstr "Définit la timeline cible de la restauration." -#: utils/misc/guc.c:3863 +#: utils/misc/guc.c:3872 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "Positionner à « immediate » pour arrêter la restauration dès qu'un état consistent est atteint." -#: utils/misc/guc.c:3872 +#: utils/misc/guc.c:3881 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "Définit l'identifiant de transaction jusqu'où la restauration s'effectuera." -#: utils/misc/guc.c:3881 +#: utils/misc/guc.c:3890 msgid "Sets the time stamp up to which recovery will proceed." msgstr "Définit le point dans le temps jusqu'où la restauration s'effectuera." -#: utils/misc/guc.c:3890 +#: utils/misc/guc.c:3899 msgid "Sets the named restore point up to which recovery will proceed." msgstr "Définit le point de restauration nommé jusqu'où la restauration va procéder." -#: utils/misc/guc.c:3899 +#: utils/misc/guc.c:3908 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "Définit le LSN des journaux de transactions jusqu'où la restauration s'effectuera." # trigger_file -#: utils/misc/guc.c:3909 +#: utils/misc/guc.c:3918 msgid "Specifies a file name whose presence ends recovery in the standby." msgstr "Définit un nom de fichier dont la présence termine la restauration du serveur secondaire." -#: utils/misc/guc.c:3919 +#: utils/misc/guc.c:3928 msgid "Sets the connection string to be used to connect to the sending server." msgstr "Définit la chaîne de connexion à utiliser pour se connecter au serveur émetteur." -#: utils/misc/guc.c:3930 +#: utils/misc/guc.c:3939 msgid "Sets the name of the replication slot to use on the sending server." msgstr "Définit le nom du slot de réplication à utiliser sur le serveur émetteur." -#: utils/misc/guc.c:3940 +#: utils/misc/guc.c:3949 msgid "Sets the client's character set encoding." msgstr "Initialise l'encodage du client." -#: utils/misc/guc.c:3951 +#: utils/misc/guc.c:3960 msgid "Controls information prefixed to each log line." msgstr "Contrôle l'information préfixée sur chaque ligne de trace." -#: utils/misc/guc.c:3952 +#: utils/misc/guc.c:3961 msgid "If blank, no prefix is used." msgstr "Si vide, aucun préfixe n'est utilisé." -#: utils/misc/guc.c:3961 +#: utils/misc/guc.c:3970 msgid "Sets the time zone to use in log messages." msgstr "Initialise le fuseau horaire à utiliser pour les journaux applicatifs." -#: utils/misc/guc.c:3971 +#: utils/misc/guc.c:3980 msgid "Sets the display format for date and time values." msgstr "Initialise le format d'affichage des valeurs date et time." -#: utils/misc/guc.c:3972 +#: utils/misc/guc.c:3981 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Contrôle aussi l'interprétation des dates ambiguës en entrée." -#: utils/misc/guc.c:3983 +#: utils/misc/guc.c:3992 msgid "Sets the default table access method for new tables." msgstr "Définit la méthode d'accès par défaut pour les nouvelles tables." -#: utils/misc/guc.c:3994 +#: utils/misc/guc.c:4003 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Initialise le tablespace par défaut pour créer les tables et index." -#: utils/misc/guc.c:3995 +#: utils/misc/guc.c:4004 msgid "An empty string selects the database's default tablespace." msgstr "Une chaîne vide sélectionne le tablespace par défaut de la base de données." -#: utils/misc/guc.c:4005 +#: utils/misc/guc.c:4014 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "" "Initialise le(s) tablespace(s) à utiliser pour les tables temporaires et les\n" "fichiers de tri." -#: utils/misc/guc.c:4016 +#: utils/misc/guc.c:4025 msgid "Sets the path for dynamically loadable modules." msgstr "Initialise le chemin des modules chargeables dynamiquement." -#: utils/misc/guc.c:4017 +#: utils/misc/guc.c:4026 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "" "Si un module chargeable dynamiquement a besoin d'être ouvert et que le nom\n" "spécifié n'a pas une composante répertoire (c'est-à-dire que le nom ne\n" "contient pas un '/'), le système cherche le fichier spécifié sur ce chemin." -#: utils/misc/guc.c:4030 +#: utils/misc/guc.c:4039 msgid "Sets the location of the Kerberos server key file." msgstr "Initalise l'emplacement du fichier de la clé serveur pour Kerberos." -#: utils/misc/guc.c:4041 +#: utils/misc/guc.c:4050 msgid "Sets the Bonjour service name." msgstr "Initialise le nom du service Bonjour." -#: utils/misc/guc.c:4053 +#: utils/misc/guc.c:4062 msgid "Shows the collation order locale." msgstr "Affiche la locale de tri et de groupement." -#: utils/misc/guc.c:4064 +#: utils/misc/guc.c:4073 msgid "Shows the character classification and case conversion locale." msgstr "Affiche la classification des caractères et la locale de conversions." -#: utils/misc/guc.c:4075 +#: utils/misc/guc.c:4084 msgid "Sets the language in which messages are displayed." msgstr "Initialise le langage dans lequel les messages sont affichés." -#: utils/misc/guc.c:4085 +#: utils/misc/guc.c:4094 msgid "Sets the locale for formatting monetary amounts." msgstr "Initialise la locale pour le formattage des montants monétaires." -#: utils/misc/guc.c:4095 +#: utils/misc/guc.c:4104 msgid "Sets the locale for formatting numbers." msgstr "Initialise la locale pour formater les nombres." -#: utils/misc/guc.c:4105 +#: utils/misc/guc.c:4114 msgid "Sets the locale for formatting date and time values." msgstr "Initialise la locale pour formater les valeurs date et time." -#: utils/misc/guc.c:4115 +#: utils/misc/guc.c:4124 msgid "Lists shared libraries to preload into each backend." msgstr "Liste les bibliothèques partagées à précharger dans chaque processus serveur." -#: utils/misc/guc.c:4126 +#: utils/misc/guc.c:4135 msgid "Lists shared libraries to preload into server." msgstr "Liste les bibliothèques partagées à précharger dans le serveur." -#: utils/misc/guc.c:4137 +#: utils/misc/guc.c:4146 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Liste les bibliothèques partagées non privilégiées à précharger dans chaque processus serveur." -#: utils/misc/guc.c:4148 +#: utils/misc/guc.c:4157 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "" "Initialise l'ordre de recherche des schémas pour les noms qui ne précisent\n" "pas le schéma." -#: utils/misc/guc.c:4160 +#: utils/misc/guc.c:4169 msgid "Shows the server (database) character set encoding." msgstr "Affiche l'encodage des caractères pour le serveur (base de données)." -#: utils/misc/guc.c:4172 +#: utils/misc/guc.c:4181 msgid "Shows the server version." msgstr "Affiche la version du serveur." -#: utils/misc/guc.c:4184 +#: utils/misc/guc.c:4193 msgid "Sets the current role." msgstr "Initialise le rôle courant." -#: utils/misc/guc.c:4196 +#: utils/misc/guc.c:4205 msgid "Sets the session user name." msgstr "Initialise le nom de l'utilisateur de la session." -#: utils/misc/guc.c:4207 +#: utils/misc/guc.c:4216 msgid "Sets the destination for server log output." msgstr "Initialise la destination des journaux applicatifs du serveur." -#: utils/misc/guc.c:4208 +#: utils/misc/guc.c:4217 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "" "Les valeurs valides sont une combinaison de « stderr », « syslog »,\n" "« csvlog » et « eventlog », suivant la plateforme." -#: utils/misc/guc.c:4219 +#: utils/misc/guc.c:4228 msgid "Sets the destination directory for log files." msgstr "Initialise le répertoire de destination pour les journaux applicatifs." -#: utils/misc/guc.c:4220 +#: utils/misc/guc.c:4229 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Accepte un chemin relatif ou absolu pour le répertoire des données." -#: utils/misc/guc.c:4230 +#: utils/misc/guc.c:4239 msgid "Sets the file name pattern for log files." msgstr "Initialise le modèle de nom de fichiers pour les journaux applicatifs." -#: utils/misc/guc.c:4241 +#: utils/misc/guc.c:4250 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "" "Initialise le nom du programme utilisé pour identifier les messages de\n" "PostgreSQL dans syslog." -#: utils/misc/guc.c:4252 +#: utils/misc/guc.c:4261 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "" "Initialise le nom de l'application, utilisé pour identifier les messages de\n" "PostgreSQL dans eventlog." -#: utils/misc/guc.c:4263 +#: utils/misc/guc.c:4272 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Initialise la zone horaire pour afficher et interpréter les dates/heures." -#: utils/misc/guc.c:4273 +#: utils/misc/guc.c:4282 msgid "Selects a file of time zone abbreviations." msgstr "Sélectionne un fichier contenant les abréviations des fuseaux horaires." -#: utils/misc/guc.c:4283 +#: utils/misc/guc.c:4292 msgid "Sets the owning group of the Unix-domain socket." msgstr "Initialise le groupe d'appartenance du socket domaine Unix." -#: utils/misc/guc.c:4284 +#: utils/misc/guc.c:4293 msgid "The owning user of the socket is always the user that starts the server." msgstr "Le propriétaire du socket est toujours l'utilisateur qui a lancé le serveur." -#: utils/misc/guc.c:4294 +#: utils/misc/guc.c:4303 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Initialise les répertoires où les sockets de domaine Unix seront créés." -#: utils/misc/guc.c:4309 +#: utils/misc/guc.c:4318 msgid "Sets the host name or IP address(es) to listen to." msgstr "Initialise le nom de l'hôte ou l'adresse IP à écouter." -#: utils/misc/guc.c:4324 +#: utils/misc/guc.c:4333 msgid "Sets the server's data directory." msgstr "Initialise le répertoire des données du serveur." -#: utils/misc/guc.c:4335 +#: utils/misc/guc.c:4344 msgid "Sets the server's main configuration file." msgstr "Voir le fichier de configuration principal du serveur." -#: utils/misc/guc.c:4346 +#: utils/misc/guc.c:4355 msgid "Sets the server's \"hba\" configuration file." msgstr "Initialise le fichier de configuration « hba » du serveur." -#: utils/misc/guc.c:4357 +#: utils/misc/guc.c:4366 msgid "Sets the server's \"ident\" configuration file." msgstr "Initialise le fichier de configuration « ident » du serveur." -#: utils/misc/guc.c:4368 +#: utils/misc/guc.c:4377 msgid "Writes the postmaster PID to the specified file." msgstr "Écrit le PID du postmaster PID dans le fichier spécifié." -#: utils/misc/guc.c:4379 +#: utils/misc/guc.c:4388 msgid "Shows the name of the SSL library." msgstr "Affiche le nom de la bibliothèque SSL." -#: utils/misc/guc.c:4394 +#: utils/misc/guc.c:4403 msgid "Location of the SSL server certificate file." msgstr "Emplacement du fichier du certificat serveur SSL." -#: utils/misc/guc.c:4404 +#: utils/misc/guc.c:4413 msgid "Location of the SSL server private key file." msgstr "Emplacement du fichier de la clé privée SSL du serveur." -#: utils/misc/guc.c:4414 +#: utils/misc/guc.c:4423 msgid "Location of the SSL certificate authority file." msgstr "Emplacement du fichier du certificat autorité SSL." -#: utils/misc/guc.c:4424 +#: utils/misc/guc.c:4433 msgid "Location of the SSL certificate revocation list file." msgstr "Emplacement du fichier de liste de révocation des certificats SSL." -#: utils/misc/guc.c:4434 +#: utils/misc/guc.c:4443 msgid "Location of the SSL certificate revocation list directory." msgstr "Emplacement du répertoire de liste de révocation des certificats SSL." -#: utils/misc/guc.c:4444 +#: utils/misc/guc.c:4453 msgid "Writes temporary statistics files to the specified directory." msgstr "Écrit les fichiers statistiques temporaires dans le répertoire indiqué." -#: utils/misc/guc.c:4455 +#: utils/misc/guc.c:4464 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "Nombre de standbys synchrones et liste des noms des synchrones potentiels." -#: utils/misc/guc.c:4466 +#: utils/misc/guc.c:4475 msgid "Sets default text search configuration." msgstr "Initialise la configuration par défaut de la recherche plein texte." -#: utils/misc/guc.c:4476 +#: utils/misc/guc.c:4485 msgid "Sets the list of allowed SSL ciphers." msgstr "Initialise la liste des chiffrements SSL autorisés." -#: utils/misc/guc.c:4491 +#: utils/misc/guc.c:4500 msgid "Sets the curve to use for ECDH." msgstr "Initialise la courbe à utiliser pour ECDH." -#: utils/misc/guc.c:4506 +#: utils/misc/guc.c:4515 msgid "Location of the SSL DH parameters file." msgstr "Emplacement du fichier des paramètres DH SSL." -#: utils/misc/guc.c:4517 +#: utils/misc/guc.c:4526 msgid "Command to obtain passphrases for SSL." msgstr "Commande pour obtenir la phrase de passe pour SSL." -#: utils/misc/guc.c:4528 +#: utils/misc/guc.c:4537 msgid "Sets the application name to be reported in statistics and logs." msgstr "Configure le nom de l'application à indiquer dans les statistiques et les journaux." -#: utils/misc/guc.c:4539 +#: utils/misc/guc.c:4548 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Configure le nom du cluster, qui est inclus dans le titre du processus." -#: utils/misc/guc.c:4550 +#: utils/misc/guc.c:4559 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Configure les gestionnaires de ressource des WAL pour lesquels des vérifications de cohérence sont effectuées." -#: utils/misc/guc.c:4551 +#: utils/misc/guc.c:4560 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "Des images complètes de bloc seront tracées pour tous les blocs de données et vérifiées avec le résultat du rejeu des journaux de transactions." -#: utils/misc/guc.c:4561 +#: utils/misc/guc.c:4570 msgid "JIT provider to use." msgstr "Fournisseur JIT à utiliser." -#: utils/misc/guc.c:4572 +#: utils/misc/guc.c:4581 msgid "Log backtrace for errors in these functions." msgstr "Trace la pile pour les erreurs dans ces fonctions." -#: utils/misc/guc.c:4592 +#: utils/misc/guc.c:4601 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Indique si « \\' » est autorisé dans une constante de chaîne." -#: utils/misc/guc.c:4602 +#: utils/misc/guc.c:4611 msgid "Sets the output format for bytea." msgstr "Initialise le format de sortie pour bytea." -#: utils/misc/guc.c:4612 +#: utils/misc/guc.c:4621 msgid "Sets the message levels that are sent to the client." msgstr "Initialise les niveaux de message envoyés au client." -#: utils/misc/guc.c:4613 utils/misc/guc.c:4689 utils/misc/guc.c:4700 utils/misc/guc.c:4776 +#: utils/misc/guc.c:4622 utils/misc/guc.c:4708 utils/misc/guc.c:4719 utils/misc/guc.c:4795 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "" "Chaque niveau inclut les niveaux qui suivent. Plus loin sera le niveau,\n" "moindre sera le nombre de messages envoyés." -#: utils/misc/guc.c:4623 +#: utils/misc/guc.c:4632 +msgid "Compute query identifiers." +msgstr "Calcule les identifiants de requête." + +#: utils/misc/guc.c:4642 msgid "Enables the planner to use constraints to optimize queries." msgstr "Active l'utilisation des contraintes par le planificateur pour optimiser les requêtes." -#: utils/misc/guc.c:4624 +#: utils/misc/guc.c:4643 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "" "Les parcours de tables seront ignorés si leur contraintes garantissent\n" "qu'aucune ligne ne correspond à la requête." -#: utils/misc/guc.c:4635 -msgid "Sets the default compression for new columns." -msgstr "Définit la compression par défaut pour les nouvelles colonnes." +#: utils/misc/guc.c:4654 +msgid "Sets the default compression method for compressible values." +msgstr "Définit la méthode de compression par défaut pour les valeurs compressibles." -#: utils/misc/guc.c:4646 +#: utils/misc/guc.c:4665 msgid "Sets the transaction isolation level of each new transaction." msgstr "Initialise le niveau d'isolation des transactions pour chaque nouvelle transaction." -#: utils/misc/guc.c:4656 +#: utils/misc/guc.c:4675 msgid "Sets the current transaction's isolation level." msgstr "Initialise le niveau d'isolation de la transaction courante." -#: utils/misc/guc.c:4667 +#: utils/misc/guc.c:4686 msgid "Sets the display format for interval values." msgstr "Initialise le format d'affichage des valeurs interval." -#: utils/misc/guc.c:4678 +#: utils/misc/guc.c:4697 msgid "Sets the verbosity of logged messages." msgstr "Initialise la verbosité des messages tracés." -#: utils/misc/guc.c:4688 +#: utils/misc/guc.c:4707 msgid "Sets the message levels that are logged." msgstr "Initialise les niveaux de messages tracés." -#: utils/misc/guc.c:4699 +#: utils/misc/guc.c:4718 msgid "Causes all statements generating error at or above this level to be logged." msgstr "" "Génère une trace pour toutes les instructions qui produisent une erreur de\n" "ce niveau ou de niveaux plus importants." -#: utils/misc/guc.c:4710 +#: utils/misc/guc.c:4729 msgid "Sets the type of statements logged." msgstr "Initialise le type d'instructions tracées." -#: utils/misc/guc.c:4720 +#: utils/misc/guc.c:4739 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "" -"Initialise le niveau (« facility ») de syslog à utilisé lors de l'activation\n" +"Initialise le niveau (« facility ») de syslog à utiliser lors de l'activation\n" "de syslog." -#: utils/misc/guc.c:4735 +#: utils/misc/guc.c:4754 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "" "Configure le comportement des sessions pour les triggers et les règles de\n" "ré-écriture." -#: utils/misc/guc.c:4745 +#: utils/misc/guc.c:4764 msgid "Sets the current transaction's synchronization level." msgstr "Initialise le niveau d'isolation de la transaction courante." -#: utils/misc/guc.c:4755 +#: utils/misc/guc.c:4774 msgid "Allows archiving of WAL files using archive_command." msgstr "Autorise l'archivage des journaux de transactions en utilisant archive_command." -#: utils/misc/guc.c:4765 +#: utils/misc/guc.c:4784 msgid "Sets the action to perform upon reaching the recovery target." msgstr "Définit l'action à exécuter à l'arrivée à la cible de la restauration." -#: utils/misc/guc.c:4775 +#: utils/misc/guc.c:4794 msgid "Enables logging of recovery-related debugging information." msgstr "Active les traces sur les informations de débogage relatives à la restauration." -#: utils/misc/guc.c:4791 +#: utils/misc/guc.c:4810 msgid "Collects function-level statistics on database activity." msgstr "Récupère les statistiques niveau fonction sur l'activité de la base de données." -#: utils/misc/guc.c:4801 +#: utils/misc/guc.c:4820 msgid "Sets the level of information written to the WAL." msgstr "Configure le niveau des informations écrites dans les journaux de transactions." -#: utils/misc/guc.c:4811 +#: utils/misc/guc.c:4830 msgid "Selects the dynamic shared memory implementation used." msgstr "Sélectionne l'implémentation de la mémoire partagée dynamique." -#: utils/misc/guc.c:4821 +#: utils/misc/guc.c:4840 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "Sélectionne l'implémentation de mémoire partagée utilisée pour la principale région de mémoire partagée." -#: utils/misc/guc.c:4831 +#: utils/misc/guc.c:4850 msgid "Selects the method used for forcing WAL updates to disk." msgstr "" "Sélectionne la méthode utilisée pour forcer la mise à jour des journaux de\n" "transactions sur le disque." -#: utils/misc/guc.c:4841 +#: utils/misc/guc.c:4860 msgid "Sets how binary values are to be encoded in XML." msgstr "Configure comment les valeurs binaires seront codées en XML." -#: utils/misc/guc.c:4851 +#: utils/misc/guc.c:4870 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "" "Configure si les données XML dans des opérations d'analyse et de\n" "sérialisation implicite doivent être considérées comme des documents\n" "ou des fragments de contenu." -#: utils/misc/guc.c:4862 +#: utils/misc/guc.c:4881 msgid "Use of huge pages on Linux or Windows." msgstr "Utilisation des HugePages sur Linux ou Windows." -#: utils/misc/guc.c:4872 +#: utils/misc/guc.c:4891 msgid "Forces use of parallel query facilities." msgstr "Force l'utilisation des fonctionnalités de requête parallèle." -#: utils/misc/guc.c:4873 +#: utils/misc/guc.c:4892 msgid "If possible, run query using a parallel worker and with parallel restrictions." msgstr "Si possible, exécute des requêtes utilisant des processus parallèles et avec les restrictions parallèles." -#: utils/misc/guc.c:4883 +#: utils/misc/guc.c:4902 msgid "Chooses the algorithm for encrypting passwords." msgstr "Choisit l'algorithme pour le chiffrement des mots de passe." -#: utils/misc/guc.c:4893 +#: utils/misc/guc.c:4912 msgid "Controls the planner's selection of custom or generic plan." msgstr "Contrôle le choix par le planificateur du plan personnalisé ou du plan générique." -#: utils/misc/guc.c:4894 +#: utils/misc/guc.c:4913 msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." msgstr "Les requêtes préparées peuvent avoir des plans particulier et générique, et le planificateur tentera de choisir le meilleur. Ceci peut être utilisé pour remplacer le comportement par défaut." -#: utils/misc/guc.c:4906 +#: utils/misc/guc.c:4925 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "Définit la version minimale du protocole SSL/TLS à utiliser." -#: utils/misc/guc.c:4918 +#: utils/misc/guc.c:4937 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "Définit la version maximum du protocole SSL/TLS à utiliser." -#: utils/misc/guc.c:4930 +#: utils/misc/guc.c:4949 msgid "Sets the method for synchronizing the data directory before crash recovery." msgstr "Configure la méthode de synchronisation du répertoire de données avant la restauration après crash." -#: utils/misc/guc.c:5498 +#: utils/misc/guc.c:5518 #, c-format msgid "invalid configuration parameter name \"%s\"" msgstr "paramètre de configuration « %s » invalide" -#: utils/misc/guc.c:5500 +#: utils/misc/guc.c:5520 #, c-format -msgid "Custom parameter names must be of the form \"identifier.identifier\"." -msgstr "Les noms de paramètres personnalisés doivent être de la forme « identifiant.identifiant »." +msgid "Custom parameter names must be two or more simple identifiers separated by dots." +msgstr "Les noms de paramètres personnalisés doivent avoir deux ou plusieurs identifiants simples séparés par des points." -#: utils/misc/guc.c:5509 utils/misc/guc.c:9268 +#: utils/misc/guc.c:5529 utils/misc/guc.c:9288 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "paramètre de configuration « %s » non reconnu" -#: utils/misc/guc.c:5802 +#: utils/misc/guc.c:5822 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s : n'a pas pu accéder au répertoire « %s » : %s\n" -#: utils/misc/guc.c:5807 +#: utils/misc/guc.c:5827 #, c-format msgid "Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n" msgstr "Lancer initdb ou pg_basebackup pour initialiser un répertoire de données PostgreSQL.\n" -#: utils/misc/guc.c:5827 +#: utils/misc/guc.c:5847 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -27864,12 +27890,12 @@ msgstr "" "%s ne sait pas où trouver le fichier de configuration du serveur.\n" "Vous devez soit spécifier l'option --config-file, soit spécifier l'option -D, soit initialiser la variable d'environnement PGDATA.\n" -#: utils/misc/guc.c:5846 +#: utils/misc/guc.c:5866 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s : n'a pas pu accéder au fichier de configuration « %s » : %s\n" -#: utils/misc/guc.c:5872 +#: utils/misc/guc.c:5892 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -27878,7 +27904,7 @@ msgstr "" "%s ne sait pas où trouver les données du système de bases de données.\n" "Il est configurable avec « data_directory » dans « %s » ou avec l'option -D ou encore avec la variable d'environnement PGDATA.\n" -#: utils/misc/guc.c:5920 +#: utils/misc/guc.c:5940 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -27887,7 +27913,7 @@ msgstr "" "%s ne sait pas où trouver le fichier de configuration « hba ».\n" "Il est configurable avec « hba_file » dans « %s » ou avec l'option -D ou encore avec la variable d'environnement PGDATA.\n" -#: utils/misc/guc.c:5943 +#: utils/misc/guc.c:5963 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -27896,185 +27922,185 @@ msgstr "" "%s ne sait pas où trouver le fichier de configuration « hba ».\n" "Il est configurable avec « ident_file » dans « %s » ou avec l'option -D ou encore avec la variable d'environnement PGDATA.\n" -#: utils/misc/guc.c:6868 +#: utils/misc/guc.c:6888 msgid "Value exceeds integer range." msgstr "La valeur dépasse l'échelle des entiers." -#: utils/misc/guc.c:7104 +#: utils/misc/guc.c:7124 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s est en dehors des limites valides pour le paramètre « %s » (%d .. %d)" -#: utils/misc/guc.c:7140 +#: utils/misc/guc.c:7160 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s est en dehors des limites valides pour le paramètre « %s » (%g .. %g)" -#: utils/misc/guc.c:7300 utils/misc/guc.c:8672 +#: utils/misc/guc.c:7320 utils/misc/guc.c:8692 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "ne peut pas configurer les paramètres lors d'une opération parallèle" -#: utils/misc/guc.c:7317 utils/misc/guc.c:8513 +#: utils/misc/guc.c:7337 utils/misc/guc.c:8533 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "le paramètre « %s » ne peut pas être changé" -#: utils/misc/guc.c:7350 +#: utils/misc/guc.c:7370 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "le paramètre « %s » ne peut pas être modifié maintenant" -#: utils/misc/guc.c:7368 utils/misc/guc.c:7415 utils/misc/guc.c:11313 +#: utils/misc/guc.c:7388 utils/misc/guc.c:7435 utils/misc/guc.c:11333 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "droit refusé pour initialiser le paramètre « %s »" -#: utils/misc/guc.c:7405 +#: utils/misc/guc.c:7425 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "le paramètre « %s » ne peut pas être initialisé après le lancement du serveur" -#: utils/misc/guc.c:7453 +#: utils/misc/guc.c:7473 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "" "ne peut pas configurer le paramètre « %s » à l'intérieur d'une fonction\n" "SECURITY DEFINER" -#: utils/misc/guc.c:8086 utils/misc/guc.c:8133 utils/misc/guc.c:9530 +#: utils/misc/guc.c:8106 utils/misc/guc.c:8153 utils/misc/guc.c:9550 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "doit être super-utilisateur ou membre de pg_read_all_settings pour examiner « %s »" -#: utils/misc/guc.c:8217 +#: utils/misc/guc.c:8237 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s prend un seul argument" -#: utils/misc/guc.c:8465 +#: utils/misc/guc.c:8485 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "doit être super-utilisateur pour exécuter la commande ALTER SYSTEM" -#: utils/misc/guc.c:8546 +#: utils/misc/guc.c:8566 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "la valeur du paramètre pour ALTER SYSTEM ne doit pas contenir de caractère de retour à la ligne" -#: utils/misc/guc.c:8591 +#: utils/misc/guc.c:8611 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "n'a pas pu analyser le contenu du fichier « %s »" -#: utils/misc/guc.c:8748 +#: utils/misc/guc.c:8768 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT n'est pas implémenté" -#: utils/misc/guc.c:8832 +#: utils/misc/guc.c:8852 #, c-format msgid "SET requires parameter name" msgstr "SET requiert le nom du paramètre" -#: utils/misc/guc.c:8965 +#: utils/misc/guc.c:8985 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "tentative de redéfinition du paramètre « %s »" -#: utils/misc/guc.c:10760 +#: utils/misc/guc.c:10780 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "lors de la configuration du paramètre « %s » en « %s »" -#: utils/misc/guc.c:10925 +#: utils/misc/guc.c:10945 #, c-format msgid "parameter \"%s\" could not be set" msgstr "le paramètre « %s » n'a pas pu être configuré" -#: utils/misc/guc.c:11017 +#: utils/misc/guc.c:11037 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "n'a pas pu analyser la configuration du paramètre « %s »" -#: utils/misc/guc.c:11375 utils/misc/guc.c:11409 +#: utils/misc/guc.c:11395 utils/misc/guc.c:11429 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "valeur invalide pour le paramètre « %s » : %d" -#: utils/misc/guc.c:11443 +#: utils/misc/guc.c:11463 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "valeur invalide pour le paramètre « %s » : %g" -#: utils/misc/guc.c:11730 +#: utils/misc/guc.c:11750 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "« temp_buffers » ne peut pas être modifié après que des tables temporaires aient été utilisées dans la session." -#: utils/misc/guc.c:11742 +#: utils/misc/guc.c:11762 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour n'est pas supporté dans cette installation" -#: utils/misc/guc.c:11755 +#: utils/misc/guc.c:11775 #, c-format msgid "SSL is not supported by this build" msgstr "SSL n'est pas supporté dans cette installation" -#: utils/misc/guc.c:11767 +#: utils/misc/guc.c:11787 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Ne peut pas activer le paramètre avec « log_statement_stats » à true." -#: utils/misc/guc.c:11779 +#: utils/misc/guc.c:11799 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "" "Ne peut pas activer « log_statement_stats » lorsque « log_parser_stats »,\n" "« log_planner_stats » ou « log_executor_stats » est true." -#: utils/misc/guc.c:12009 +#: utils/misc/guc.c:12029 #, c-format msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "effective_io_concurrency doit être positionné à 0 sur les plateformes où manque posix_fadvise()" -#: utils/misc/guc.c:12022 +#: utils/misc/guc.c:12042 #, c-format msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "maintenance_io_concurrency doit être positionné à 0 sur les plateformes où manque posix_fadvise()" -#: utils/misc/guc.c:12036 +#: utils/misc/guc.c:12056 #, c-format msgid "huge_page_size must be 0 on this platform." msgstr "huge_page_size doit valoir 0 sur cette plateforme" -#: utils/misc/guc.c:12050 +#: utils/misc/guc.c:12070 #, c-format msgid "client_connection_check_interval must be set to 0 on platforms that lack POLLRDHUP." msgstr "client_connection_check_interval doit être positionné à 0 sur les plateformes où POLLRDHUP manque" -#: utils/misc/guc.c:12178 +#: utils/misc/guc.c:12198 #, c-format msgid "invalid character" msgstr "caractère invalide" -#: utils/misc/guc.c:12238 +#: utils/misc/guc.c:12258 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline n'est pas un nombre valide ." -#: utils/misc/guc.c:12278 +#: utils/misc/guc.c:12298 #, c-format msgid "multiple recovery targets specified" msgstr "multiples cibles de restauration spécifiées" -#: utils/misc/guc.c:12279 +#: utils/misc/guc.c:12299 #, c-format msgid "At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set." msgstr "Une seule valeur peut être spécifiée, parmi recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid." -#: utils/misc/guc.c:12287 +#: utils/misc/guc.c:12307 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "La seule valeur autorisée est « immediate »." @@ -28236,12 +28262,12 @@ msgstr "ne peut pas supprimer le portail épinglé « %s »" msgid "cannot drop active portal \"%s\"" msgstr "ne peut pas supprimer le portail actif « %s »" -#: utils/mmgr/portalmem.c:731 +#: utils/mmgr/portalmem.c:736 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "ne peut pas préparer une transaction qui a créé un curseur WITH HOLD" -#: utils/mmgr/portalmem.c:1270 +#: utils/mmgr/portalmem.c:1275 #, c-format msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "ne peut pas effectuer de commandes de transaction dans une boucle de curseur qui n'est pas en lecture seule" @@ -28351,6 +28377,15 @@ msgstr "une transaction sérialisable en écriture ne peut pas importer un snaps msgid "cannot import a snapshot from a different database" msgstr "ne peut pas importer un snapshot à partir d'une base de données différente" +#~ msgid "only simple column references and expressions are allowed in CREATE STATISTICS" +#~ msgstr "seules des références et expressions à une seule colonne sont acceptées dans CREATE STATISTICS" + +#~ msgid "ORIGIN message sent out of order" +#~ msgstr "message ORIGIN en désordre" + +#~ msgid "invalid logical replication message type \"%c\"" +#~ msgstr "type de message « %c » de la réplication logique invalide" + #~ msgid "there is no contrecord flag at %X/%X reading %X/%X" #~ msgstr "il n'existe pas de drapeau contrecord à %X/%X en lisant %X/%X" @@ -31793,3 +31828,6 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #~ msgid "arguments declared \"anyelement\" are not all alike" #~ msgstr "les arguments déclarés « anyelement » ne sont pas tous identiques" + +#~ msgid "\"timeout\" must not be negative or zero" +#~ msgstr "« timeout » ne doit pas être négatif ou nul" diff --git a/src/bin/initdb/po/el.po b/src/bin/initdb/po/el.po index 0848f993efff2..c5c41a8ff35d9 100644 --- a/src/bin/initdb/po/el.po +++ b/src/bin/initdb/po/el.po @@ -1,74 +1,75 @@ # Greek message translation file for initdb # Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the initdb (PostgreSQL) package. +# Georgios Kokolatos , 2021 # msgid "" msgstr "" "Project-Id-Version: initdb (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-02-22 02:16+0000\n" +"POT-Creation-Date: 2021-05-25 05:47+0000\n" "PO-Revision-Date: 2021-02-25 11:14+0100\n" +"Last-Translator: Georgios Kokolatos \n" "Language-Team: \n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.4.2\n" -"Last-Translator: Georgios Kokolatos \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Language: el\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "κρίσιμο:" -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "σφάλμα:" -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "προειδοποίηση:" -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "δεν ήταν δυνατή η αναγνώριση του τρέχοντος καταλόγου: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "μη έγκυρο δυαδικό αρχείο “%s”" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "δεν ήταν δυνατή η ανάγνωση του δυαδικού αρχείου “%s”" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "δεν βρέθηκε το αρχείο “%s” για να εκτελεστεί" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "δεν ήταν δυνατή η μετάβαση στον κατάλογο “%s”: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "δεν ήταν δυνατή η ανάγνωση του συμβολικού συνδέσμου “%s”: %m" -#: ../../common/exec.c:410 +#: ../../common/exec.c:409 #, c-format -msgid "pclose failed: %m" -msgstr "απέτυχε η εντολή pclose: %m" +msgid "%s() failed: %m" +msgstr "%s () απέτυχε: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 -#: initdb.c:325 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 +#: initdb.c:328 #, c-format msgid "out of memory" msgstr "έλλειψη μνήμης" @@ -84,33 +85,33 @@ msgstr "έλλειψη μνήμης\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "δεν ήταν δυνατή η αντιγραφή δείκτη null (εσωτερικό σφάλμα)\n" -#: ../../common/file_utils.c:79 ../../common/file_utils.c:181 +#: ../../common/file_utils.c:87 ../../common/file_utils.c:451 #, c-format msgid "could not stat file \"%s\": %m" msgstr "δεν ήταν δυνατή η εκτέλεση stat στο αρχείο “%s”: %m" -#: ../../common/file_utils.c:158 ../../common/pgfnames.c:48 +#: ../../common/file_utils.c:166 ../../common/pgfnames.c:48 #, c-format msgid "could not open directory \"%s\": %m" msgstr "δεν ήταν δυνατό το άνοιγμα του καταλόγου “%s”: %m" -#: ../../common/file_utils.c:192 ../../common/pgfnames.c:69 +#: ../../common/file_utils.c:200 ../../common/pgfnames.c:69 #, c-format msgid "could not read directory \"%s\": %m" msgstr "δεν ήταν δυνατή η ανάγνωση του καταλόγου “%s”: %m" -#: ../../common/file_utils.c:224 ../../common/file_utils.c:283 -#: ../../common/file_utils.c:357 +#: ../../common/file_utils.c:232 ../../common/file_utils.c:291 +#: ../../common/file_utils.c:365 #, c-format msgid "could not open file \"%s\": %m" msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου “%s”: %m" -#: ../../common/file_utils.c:295 ../../common/file_utils.c:365 +#: ../../common/file_utils.c:303 ../../common/file_utils.c:373 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "δεν ήταν δυνατή η εκτέλεση της εντολής fsync στο αρχείο “%s”: %m" -#: ../../common/file_utils.c:375 +#: ../../common/file_utils.c:383 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "δεν ήταν δυνατή η μετονομασία του αρχείου “%s” σε “%s”: %m" @@ -128,15 +129,12 @@ msgstr "δεν ήταν δυνατή η φόρτωση της βιβλιοθήκ #: ../../common/restricted_token.c:73 #, c-format msgid "cannot create restricted tokens on this platform: error code %lu" -msgstr "" -"δεν ήταν δυνατή η δημιουργία διακριτικών περιορισμού στην παρούσα " -"πλατφόρμα: κωδικός σφάλματος %lu" +msgstr "δεν ήταν δυνατή η δημιουργία διακριτικών περιορισμού στην παρούσα πλατφόρμα: κωδικός σφάλματος %lu" #: ../../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" -msgstr "" -"δεν ήταν δυνατό το άνοιγμα διακριτικού διεργασίας: κωδικός σφάλματος %lu" +msgstr "δεν ήταν δυνατό το άνοιγμα διακριτικού διεργασίας: κωδικός σφάλματος %lu" #: ../../common/restricted_token.c:97 #, c-format @@ -146,29 +144,22 @@ msgstr "δεν ήταν δυνατή η εκχώρηση SID: κωδικός σ #: ../../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" -msgstr "" -"δεν ήταν δυνατή η δημιουργία διακριτικού διεργασίας: κωδικός σφάλματος %lu" +msgstr "δεν ήταν δυνατή η δημιουργία διακριτικού διεργασίας: κωδικός σφάλματος %lu" #: ../../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" -msgstr "" -"δεν ήταν δυνατή η εκκίνηση διεργασίας για την εντολή “%s”: κωδικός " -"σφάλματος %lu" +msgstr "δεν ήταν δυνατή η εκκίνηση διεργασίας για την εντολή “%s”: κωδικός σφάλματος %lu" #: ../../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" -msgstr "" -"δεν ήταν δυνατή η επανεκκίνηση με διακριτικό περιορισμού: κωδικός σφάλματος " -"%lu" +msgstr "δεν ήταν δυνατή η επανεκκίνηση με διακριτικό περιορισμού: κωδικός σφάλματος %lu" #: ../../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" -msgstr "" -"δεν ήταν δυνατή η απόκτηση κωδικού εξόδου από την υποδιεργασία: κωδικός " -"σφάλματος %lu" +msgstr "δεν ήταν δυνατή η απόκτηση κωδικού εξόδου από την υποδιεργασία: κωδικός σφάλματος %lu" #: ../../common/rmtree.c:79 #, c-format @@ -234,102 +225,101 @@ msgstr "δεν ήταν δυνατός ο ορισμός διασταύρωση msgid "could not get junction for \"%s\": %s\n" msgstr "δεν ήταν δυνατή η απόκτηση διασταύρωσης για “%s”: %s\n" -#: initdb.c:481 initdb.c:1505 +#: initdb.c:461 initdb.c:1493 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου “%s” για ανάγνωση: %m" -#: initdb.c:536 initdb.c:846 initdb.c:872 +#: initdb.c:505 initdb.c:827 initdb.c:853 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου “%s” για εγγραφή: %m" -#: initdb.c:543 initdb.c:550 initdb.c:852 initdb.c:877 +#: initdb.c:512 initdb.c:519 initdb.c:833 initdb.c:858 #, c-format msgid "could not write file \"%s\": %m" msgstr "δεν ήταν δυνατή η εγγραφή αρχείου “%s”: %m" -#: initdb.c:568 +#: initdb.c:537 #, c-format msgid "could not execute command \"%s\": %m" msgstr "δεν ήταν δυνατή η εκτέλεση της εντολής “%s”: %m" -#: initdb.c:586 +#: initdb.c:555 #, c-format msgid "removing data directory \"%s\"" msgstr "αφαιρείται ο κατάλογος δεδομένων “%s”" -#: initdb.c:588 +#: initdb.c:557 #, c-format msgid "failed to remove data directory" msgstr "απέτυχε η αφαίρεση καταλόγου δεδομένων" -#: initdb.c:592 +#: initdb.c:561 #, c-format msgid "removing contents of data directory \"%s\"" msgstr "αφαιρούνται περιεχόμενα του καταλόγου δεδομένων “%s”" -#: initdb.c:595 +#: initdb.c:564 #, c-format msgid "failed to remove contents of data directory" msgstr "απέτυχε η αφαίρεση περιεχομένων του καταλόγου δεδομένων" -#: initdb.c:600 +#: initdb.c:569 #, c-format msgid "removing WAL directory \"%s\"" msgstr "αφαίρεση καταλόγου WAL “%s”" -#: initdb.c:602 +#: initdb.c:571 #, c-format msgid "failed to remove WAL directory" msgstr "απέτυχε η αφαίρεση καταλόγου WAL" -#: initdb.c:606 +#: initdb.c:575 #, c-format msgid "removing contents of WAL directory \"%s\"" msgstr "αφαιρούνται τα περιεχόμενα του καταλόγου WAL “%s”" -#: initdb.c:608 +#: initdb.c:577 #, c-format msgid "failed to remove contents of WAL directory" msgstr "απέτυχε η αφαίρεση περιεχόμενων του καταλόγου WAL" -#: initdb.c:615 +#: initdb.c:584 #, c-format msgid "data directory \"%s\" not removed at user's request" msgstr "ο κατάλογος δεδομένων “%s” δεν αφαιρείται κατα απαίτηση του χρήστη" -#: initdb.c:619 +#: initdb.c:588 #, c-format msgid "WAL directory \"%s\" not removed at user's request" msgstr "κατάλογος WAL “%s” δεν αφαιρέθηκε κατά απαίτηση του χρήστη" -#: initdb.c:637 +#: initdb.c:606 #, c-format msgid "cannot be run as root" msgstr "δεν δύναται η εκτέλεση ως υπερχρήστης" -#: initdb.c:639 +#: initdb.c:608 #, c-format msgid "" "Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" "own the server process.\n" msgstr "" -"Παρακαλώ συνδεθείτε (χρησιμοποιώντας, π.χ. την εντολή “su”) ως ο (μη " -"προνομιούχος) χρήστης που θα\n" +"Παρακαλώ συνδεθείτε (χρησιμοποιώντας, π.χ. την εντολή “su”) ως ο (μη προνομιούχος) χρήστης που θα\n" "είναι κάτοχος της διεργασίας του διακομιστή.\n" -#: initdb.c:672 +#: initdb.c:641 #, c-format msgid "\"%s\" is not a valid server encoding name" msgstr "“%s” δεν είναι έγκυρο όνομα κωδικοποίησης διακομιστή" -#: initdb.c:805 +#: initdb.c:786 #, c-format msgid "file \"%s\" does not exist" msgstr "το αρχείο “%s” δεν υπάρχει" -#: initdb.c:807 initdb.c:814 initdb.c:823 +#: initdb.c:788 initdb.c:795 initdb.c:804 #, c-format msgid "" "This might mean you have a corrupted installation or identified\n" @@ -338,129 +328,124 @@ msgstr "" "Αυτό μπορεί να σημαίνει ότι έχετε μια κατεστραμμένη εγκατάσταση ή\n" "ορίσατε λάθος κατάλογο με την επιλογή επίκλησης -L.\n" -#: initdb.c:812 +#: initdb.c:793 #, c-format msgid "could not access file \"%s\": %m" msgstr "δεν ήταν δυνατή η πρόσβαση του αρχείο “%s”: %m" -#: initdb.c:821 +#: initdb.c:802 #, c-format msgid "file \"%s\" is not a regular file" msgstr "το αρχείο “%s” δεν είναι ένα κανονικό αρχείο" -#: initdb.c:966 +#: initdb.c:947 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "επιλογή εφαρμογής δυναμικής κοινόχρηστης μνήμης ... " -#: initdb.c:975 +#: initdb.c:956 #, c-format msgid "selecting default max_connections ... " msgstr "επιλογή προκαθορισμένης τιμής max_connections … " -#: initdb.c:1006 +#: initdb.c:987 #, c-format msgid "selecting default shared_buffers ... " msgstr "επιλογή προκαθορισμένης τιμής shared_buffers … " -#: initdb.c:1040 +#: initdb.c:1021 #, c-format msgid "selecting default time zone ... " msgstr "επιλογή προκαθορισμένης ζώνης ώρας … " -#: initdb.c:1074 +#: initdb.c:1055 msgid "creating configuration files ... " msgstr "δημιουργία αρχείων ρύθμισης … " -#: initdb.c:1227 initdb.c:1246 initdb.c:1332 initdb.c:1347 +#: initdb.c:1214 initdb.c:1233 initdb.c:1319 initdb.c:1334 #, c-format msgid "could not change permissions of \"%s\": %m" msgstr "δεν ήταν δυνατή η αλλαγή δικαιωμάτων του “%s”: %m" -#: initdb.c:1369 +#: initdb.c:1356 #, c-format msgid "running bootstrap script ... " msgstr "εκτέλεση σεναρίου bootstrap … " -#: initdb.c:1381 +#: initdb.c:1368 #, c-format msgid "input file \"%s\" does not belong to PostgreSQL %s" msgstr "το αρχείο εισόδου “%s” δεν ανήκει στην PostgreSQL %s" -#: initdb.c:1384 +#: initdb.c:1371 #, c-format -msgid "" -"Check your installation or specify the correct path using the option -L.\n" -msgstr "" -"Ελέγξτε την εγκατάστασή σας ή καθορίστε τη σωστή διαδρομή χρησιμοποιώντας " -"την επιλογή -L.\n" +msgid "Check your installation or specify the correct path using the option -L.\n" +msgstr "Ελέγξτε την εγκατάστασή σας ή καθορίστε τη σωστή διαδρομή χρησιμοποιώντας την επιλογή -L.\n" -#: initdb.c:1482 +#: initdb.c:1470 msgid "Enter new superuser password: " msgstr "Εισάγετε νέο κωδικό πρόσβασης υπερχρήστη: " -#: initdb.c:1483 +#: initdb.c:1471 msgid "Enter it again: " msgstr "Εισάγετε ξανά: " -#: initdb.c:1486 +#: initdb.c:1474 #, c-format msgid "Passwords didn't match.\n" msgstr "Οι κωδικοί πρόσβασης δεν είναι ίδιοι.\n" -#: initdb.c:1512 +#: initdb.c:1501 #, c-format msgid "could not read password from file \"%s\": %m" msgstr "δεν ήταν δυνατή η ανάγνωση κωδικού πρόσβασης από το αρχείο “%s”: %m" -#: initdb.c:1515 +#: initdb.c:1504 #, c-format msgid "password file \"%s\" is empty" msgstr "αρχείο κωδικών πρόσβασης “%s” είναι άδειο" -#: initdb.c:2043 +#: initdb.c:1995 #, c-format msgid "caught signal\n" msgstr "συνελήφθει σήμα\n" -#: initdb.c:2049 +#: initdb.c:2001 #, c-format msgid "could not write to child process: %s\n" msgstr "δεν ήταν δυνατή η εγγραφή στην απογονική διεργασία: %s\n" -#: initdb.c:2057 +#: initdb.c:2009 #, c-format msgid "ok\n" msgstr "εντάξει\n" -#: initdb.c:2147 +#: initdb.c:2099 #, c-format msgid "setlocale() failed" msgstr "εντολή setlocale() απέτυχε" -#: initdb.c:2168 +#: initdb.c:2120 #, c-format msgid "failed to restore old locale \"%s\"" msgstr "απέτυχε να επαναφέρει την παλαιά εντοπιότητα “%s”" -#: initdb.c:2177 +#: initdb.c:2129 #, c-format msgid "invalid locale name \"%s\"" msgstr "άκυρη ονομασία εντοπιότητας “%s”" -#: initdb.c:2188 +#: initdb.c:2140 #, c-format msgid "invalid locale settings; check LANG and LC_* environment variables" -msgstr "" -"μη έγκυρες ρυθμίσεις εντοπιότητας, ελέγξτε τις μεταβλητές περιβάλλοντος " -"LANG και LC_*" +msgstr "μη έγκυρες ρυθμίσεις εντοπιότητας, ελέγξτε τις μεταβλητές περιβάλλοντος LANG και LC_*" -#: initdb.c:2215 +#: initdb.c:2167 #, c-format msgid "encoding mismatch" msgstr "αναντιστοιχία κωδικοποίησης" -#: initdb.c:2217 +#: initdb.c:2169 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the\n" @@ -470,14 +455,12 @@ msgid "" "or choose a matching combination.\n" msgstr "" "Η κωδικοποίηση που επιλέξατε (%s) και η κωδικοποίηση που\n" -"χρησιμοποιείται από την επιλεγμένη εντοπιότητα (%s) δεν ταιριάζουν. Αυτό " -"θα οδηγούσε σε\n" -"κακή συμπεριφορά σε διάφορες συναρτήσεις επεξεργασίας συμβολοσειρών " -"χαρακτήρων.\n" +"χρησιμοποιείται από την επιλεγμένη εντοπιότητα (%s) δεν ταιριάζουν. Αυτό θα οδηγούσε σε\n" +"κακή συμπεριφορά σε διάφορες συναρτήσεις επεξεργασίας συμβολοσειρών χαρακτήρων.\n" "Επανεκτελέστε %s και είτε μην καθορίσετε ρητά κωδικοποίηση,\n" "ή επιλέξτε έναν ταιριαστό συνδυασμό.\n" -#: initdb.c:2289 +#: initdb.c:2241 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -486,17 +469,17 @@ msgstr "" "%s αρχικοποιεί μία συστάδα PostgreSQL βάσης δεδομένων.\n" "\n" -#: initdb.c:2290 +#: initdb.c:2242 #, c-format msgid "Usage:\n" msgstr "Χρήση:\n" -#: initdb.c:2291 +#: initdb.c:2243 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [ΕΠΙΛΟΓΕΣ]… [DATADIR]\n" -#: initdb.c:2292 +#: initdb.c:2244 #, c-format msgid "" "\n" @@ -505,91 +488,70 @@ msgstr "" "\n" "Επιλογές:\n" -#: initdb.c:2293 +#: initdb.c:2245 #, c-format -msgid "" -" -A, --auth=METHOD default authentication method for local " -"connections\n" -msgstr "" -" -A, —auth=METHOD προκαθορισμένη μέθοδος ταυτοποίησης για τοπικές " -"συνδέσεις\n" +msgid " -A, --auth=METHOD default authentication method for local connections\n" +msgstr " -A, —auth=METHOD προκαθορισμένη μέθοδος ταυτοποίησης για τοπικές συνδέσεις\n" -#: initdb.c:2294 +#: initdb.c:2246 #, c-format -msgid "" -" --auth-host=METHOD default authentication method for local TCP/IP " -"connections\n" -msgstr "" -" —auth-host=METHOD προκαθορισμένη μέθοδος ταυτοποίησης για τοπικές " -"συνδέσεις πρωτοκόλλου TCP/IP\n" +msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" +msgstr " —auth-host=METHOD προκαθορισμένη μέθοδος ταυτοποίησης για τοπικές συνδέσεις πρωτοκόλλου TCP/IP\n" -#: initdb.c:2295 +#: initdb.c:2247 #, c-format -msgid "" -" --auth-local=METHOD default authentication method for local-socket " -"connections\n" -msgstr "" -" —auth-local=METHOD προκαθορισμένη μέθοδος ταυτοποίησης για " -"συνδέσεις τοπικής υποδοχής\n" +msgid " --auth-local=METHOD default authentication method for local-socket connections\n" +msgstr " —auth-local=METHOD προκαθορισμένη μέθοδος ταυτοποίησης για συνδέσεις τοπικής υποδοχής\n" -#: initdb.c:2296 +#: initdb.c:2248 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" -msgstr "" -" [-D, —pgdata=]DATADIR τοποθεσία για αυτή τη συστάδα βάσης δεδομένων\n" +msgstr " [-D, —pgdata=]DATADIR τοποθεσία για αυτή τη συστάδα βάσης δεδομένων\n" -#: initdb.c:2297 +#: initdb.c:2249 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" -msgstr "" -" -E, —encoding=ENCODING όρισε την προκαθορισμένη κωδικοποίηση για " -"καινούριες βάσεις δεδομένων\n" +msgstr " -E, —encoding=ENCODING όρισε την προκαθορισμένη κωδικοποίηση για καινούριες βάσεις δεδομένων\n" -#: initdb.c:2298 +#: initdb.c:2250 #, c-format -msgid "" -" -g, --allow-group-access allow group read/execute on data directory\n" -msgstr "" -" -g, —allow-group-access επέτρεψε εγγραφή/ανάγνωση για την ομάδα στο " -"κατάλογο δεδομένων\n" +msgid " -g, --allow-group-access allow group read/execute on data directory\n" +msgstr " -g, —allow-group-access επέτρεψε εγγραφή/ανάγνωση για την ομάδα στο κατάλογο δεδομένων\n" -#: initdb.c:2299 +#: initdb.c:2251 +#, c-format +msgid " -k, --data-checksums use data page checksums\n" +msgstr " -k, —data-checksums χρησιμοποίησε αθροίσματα ελέγχου σελίδων δεδομένων\n" + +#: initdb.c:2252 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" -msgstr "" -" —locale=LOCALE όρισε την προκαθορισμένη εντοπιότητα για " -"καινούριες βάσεις δεδομένων\n" +msgstr " —locale=LOCALE όρισε την προκαθορισμένη εντοπιότητα για καινούριες βάσεις δεδομένων\n" -#: initdb.c:2300 +#: initdb.c:2253 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" " --lc-monetary=, --lc-numeric=, --lc-time=LOCALE\n" -" set default locale in the respective category " -"for\n" +" set default locale in the respective category for\n" " new databases (default taken from environment)\n" msgstr "" " —lc-collate=, —lc-ctype=, —lc-messages=LOCALE\n" " —lc-monetary=, —lc-numeric=, —lc-time=LOCALE\n" -" όρισε την προκαθορισμένη εντοπιότητα για τις " -"σχετικές κατηγορίες\n" -" καινούριων βάσεων δεδομένων (προκαθορισμένη " -"τιμή διαβάζεται από το περιβάλλον)\n" +" όρισε την προκαθορισμένη εντοπιότητα για τις σχετικές κατηγορίες\n" +" καινούριων βάσεων δεδομένων (προκαθορισμένη τιμή διαβάζεται από το περιβάλλον)\n" -#: initdb.c:2304 +#: initdb.c:2257 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " —no-locale ισοδύναμο με —locale=C\n" -#: initdb.c:2305 +#: initdb.c:2258 #, c-format -msgid "" -" --pwfile=FILE read password for the new superuser from file\n" -msgstr "" -" —pwfile=FILE διάβασε τον κωδικό πρόσβασης για τον νέο " -"υπερχρήστη από το αρχείο\n" +msgid " --pwfile=FILE read password for the new superuser from file\n" +msgstr " —pwfile=FILE διάβασε τον κωδικό πρόσβασης για τον νέο υπερχρήστη από το αρχείο\n" -#: initdb.c:2306 +#: initdb.c:2259 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -598,32 +560,27 @@ msgstr "" " -T, —text-search-config=CFG\n" " προκαθορισμένη ρύθμιση αναζήτησης κειμένου\n" -#: initdb.c:2308 +#: initdb.c:2261 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, —username=NAME όνομα υπερχρήστη βάσης δεδομένων\n" -#: initdb.c:2309 +#: initdb.c:2262 #, c-format -msgid "" -" -W, --pwprompt prompt for a password for the new superuser\n" -msgstr "" -" -W, —pwprompt προτροπή για κωδικό πρόσβασης για τον νέο " -"υπερχρήστη\n" +msgid " -W, --pwprompt prompt for a password for the new superuser\n" +msgstr " -W, —pwprompt προτροπή για κωδικό πρόσβασης για τον νέο υπερχρήστη\n" -#: initdb.c:2310 +#: initdb.c:2263 #, c-format -msgid "" -" -X, --waldir=WALDIR location for the write-ahead log directory\n" -msgstr "" -" -X, —waldir=WALDIR τοποθεσία για τον κατάλογο write-ahead log\n" +msgid " -X, --waldir=WALDIR location for the write-ahead log directory\n" +msgstr " -X, —waldir=WALDIR τοποθεσία για τον κατάλογο write-ahead log\n" -#: initdb.c:2311 +#: initdb.c:2264 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " —wal-segsize=SIZE μέγεθος των τμημάτων WAL, σε megabytes\n" -#: initdb.c:2312 +#: initdb.c:2265 #, c-format msgid "" "\n" @@ -632,49 +589,43 @@ msgstr "" "\n" "Λιγότερο συχνά χρησιμοποιούμενες επιλογές:\n" -#: initdb.c:2313 +#: initdb.c:2266 #, c-format msgid " -d, --debug generate lots of debugging output\n" -msgstr "" -" -d, —debug δημιούργησε πολλές καταγραφές αποσφαλμάτωσης\n" - -#: initdb.c:2314 -#, c-format -msgid " -k, --data-checksums use data page checksums\n" -msgstr "" -" -k, —data-checksums χρησιμοποίησε αθροίσματα ελέγχου σελίδων " -"δεδομένων\n" +msgstr " -d, —debug δημιούργησε πολλές καταγραφές αποσφαλμάτωσης\n" -#: initdb.c:2315 +#: initdb.c:2267 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L DIRECTORY τοποθεσία εύρεσης αρχείων εισόδου\n" -#: initdb.c:2316 +#: initdb.c:2268 #, c-format msgid " -n, --no-clean do not clean up after errors\n" msgstr " -n, —no-clean να μην καθαριστούν σφάλματα\n" -#: initdb.c:2317 +#: initdb.c:2269 #, c-format -msgid "" -" -N, --no-sync do not wait for changes to be written safely to " -"disk\n" -msgstr "" -" -N, —no-sync να μην αναμένει την ασφαλή εγγραφή αλλαγών στον " -"δίσκο\n" +msgid " -N, --no-sync do not wait for changes to be written safely to disk\n" +msgstr " -N, —no-sync να μην αναμένει την ασφαλή εγγραφή αλλαγών στον δίσκο\n" -#: initdb.c:2318 +#: initdb.c:2270 +#, fuzzy, c-format +#| msgid " --no-subscriptions do not restore subscriptions\n" +msgid " --no-instructions do not print instructions for next steps\n" +msgstr " —no-publications να μην επαναφέρεις συνδρομές\n" + +#: initdb.c:2271 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, —show δείξε τις εσωτερικές ρυθμίσεις\n" -#: initdb.c:2319 +#: initdb.c:2272 #, c-format msgid " -S, --sync-only only sync data directory\n" msgstr " -S, —sync-only συγχρόνισε μόνο τον κατάλογο δεδομένων\n" -#: initdb.c:2320 +#: initdb.c:2273 #, c-format msgid "" "\n" @@ -683,18 +634,17 @@ msgstr "" "\n" "Άλλες επιλογές:\n" -#: initdb.c:2321 +#: initdb.c:2274 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, —version δείξε πληροφορίες έκδοσης και έξοδος\n" -#: initdb.c:2322 +#: initdb.c:2275 #, c-format msgid " -?, --help show this help, then exit\n" -msgstr "" -" -?, —help δείξε αυτό το μήνυμα βοήθειας και μετά έξοδος\n" +msgstr " -?, —help δείξε αυτό το μήνυμα βοήθειας και μετά έξοδος\n" -#: initdb.c:2323 +#: initdb.c:2276 #, c-format msgid "" "\n" @@ -705,7 +655,7 @@ msgstr "" "Εάν δεν έχει καθοριστεί ο κατάλογος δεδομένων, χρησιμοποιείται η\n" "μεταβλητή περιβάλλοντος PGDATA.\n" -#: initdb.c:2325 +#: initdb.c:2278 #, c-format msgid "" "\n" @@ -714,42 +664,45 @@ msgstr "" "\n" "Υποβάλετε αναφορές σφάλματων σε <%s>.\n" -#: initdb.c:2326 +#: initdb.c:2279 #, c-format msgid "%s home page: <%s>\n" msgstr "%s αρχική σελίδα: <%s>\n" -#: initdb.c:2354 +#: initdb.c:2307 #, c-format msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "μη έγκυρη μέθοδος ταυτοποίησης “%s” για συνδέσεις “%s”" -#: initdb.c:2370 -#, c-format -msgid "must specify a password for the superuser to enable %s authentication" -msgstr "" -"απαιτείται ο καθορισμός κωδικού πρόσβασης για τον υπερχρήστη για να την " -"ενεργοποίηση του ελέγχου ταυτότητας %s" +#: initdb.c:2323 +#, fuzzy, c-format +#| msgid "must specify a password for the superuser to enable %s authentication" +msgid "must specify a password for the superuser to enable password authentication" +msgstr "απαιτείται ο καθορισμός κωδικού πρόσβασης για τον υπερχρήστη για να την ενεργοποίηση του ελέγχου ταυτότητας %s" -#: initdb.c:2397 +#: initdb.c:2344 #, c-format msgid "no data directory specified" msgstr "δεν ορίστηκε κατάλογος δεδομένων" -#: initdb.c:2399 +#: initdb.c:2346 #, c-format msgid "" "You must identify the directory where the data for this database system\n" "will reside. Do this with either the invocation option -D or the\n" "environment variable PGDATA.\n" msgstr "" -"Πρέπει να προσδιορίσετε τον κατάλογο όπου θα αποθηκεύονται τα δεδομένα για " -"αυτό\n" -"το σύστημα βάσης δεδομένων. Αυτό μπορείτε να το κάνετε είτε με την επιλογή " -"κλήσης -D\n" +"Πρέπει να προσδιορίσετε τον κατάλογο όπου θα αποθηκεύονται τα δεδομένα για αυτό\n" +"το σύστημα βάσης δεδομένων. Αυτό μπορείτε να το κάνετε είτε με την επιλογή κλήσης -D\n" "ή με τη μεταβλητή περιβάλλοντος PGDATA.\n" -#: initdb.c:2434 +#: initdb.c:2364 +#, fuzzy, c-format +#| msgid "could not get server version" +msgid "could not set environment" +msgstr "δεν ήταν δυνατή η απόκτηση έκδοσης διακομιστή" + +#: initdb.c:2384 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -760,7 +713,7 @@ msgstr "" "ίδιος κατάλογος με το \"%s\".\n" "Ελέγξτε την εγκατάστασή σας." -#: initdb.c:2439 +#: initdb.c:2389 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -771,17 +724,17 @@ msgstr "" "αλλά δεν ήταν η ίδια εκδοχή με %s.\n" "Ελέγξτε την εγκατάστασή σας." -#: initdb.c:2458 +#: initdb.c:2408 #, c-format msgid "input file location must be an absolute path" msgstr "η τοποθεσία του αρχείου εισόδου πρέπει να είναι μία πλήρης διαδρομή" -#: initdb.c:2475 +#: initdb.c:2425 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "Η συστάδα βάσης δεδομένων θα αρχικοποιηθεί με εντοπιότητα “%s”.\n" -#: initdb.c:2478 +#: initdb.c:2428 #, c-format msgid "" "The database cluster will be initialized with locales\n" @@ -800,253 +753,223 @@ msgstr "" " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:2502 +#: initdb.c:2452 #, c-format msgid "could not find suitable encoding for locale \"%s\"" msgstr "δεν μπόρεσε να βρεθεί κατάλληλη κωδικοποίηση για την εντοπιότητα “%s”" -#: initdb.c:2504 +#: initdb.c:2454 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "Επανεκτελέστε %s με την επιλογή -E.\n" -#: initdb.c:2505 initdb.c:3127 initdb.c:3148 +#: initdb.c:2455 initdb.c:3089 initdb.c:3110 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" -#: initdb.c:2518 +#: initdb.c:2468 #, c-format msgid "" -"Encoding \"%s\" implied by locale is not allowed as a server-side " -"encoding.\n" +"Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" "The default database encoding will be set to \"%s\" instead.\n" msgstr "" -"Η κωδικοποίηση \"%s\" που υπονοείται από τις τοπικές ρυθμίσεις δεν " -"επιτρέπεται ως κωδικοποίηση από την πλευρά του διακομιστή.\n" +"Η κωδικοποίηση \"%s\" που υπονοείται από τις τοπικές ρυθμίσεις δεν επιτρέπεται ως κωδικοποίηση από την πλευρά του διακομιστή.\n" "Η προεπιλεγμένη κωδικοποίηση βάσης δεδομένων θα οριστεί σε \"%s\".\n" -#: initdb.c:2523 +#: initdb.c:2473 #, c-format msgid "locale \"%s\" requires unsupported encoding \"%s\"" msgstr "εντοπιότητα “%s” προαπαιτεί τη μην υποστηριζόμενη κωδικοποίηση“%s”" -#: initdb.c:2526 +#: initdb.c:2476 #, c-format msgid "" "Encoding \"%s\" is not allowed as a server-side encoding.\n" "Rerun %s with a different locale selection.\n" msgstr "" -"Η κωδικοποίηση \"%s\" δεν επιτρέπεται ως κωδικοποίηση από την πλευρά του " -"διακομιστή.\n" +"Η κωδικοποίηση \"%s\" δεν επιτρέπεται ως κωδικοποίηση από την πλευρά του διακομιστή.\n" "Επανεκτελέστε %s με διαφορετική επιλογή εντοπιότητας.\n" -#: initdb.c:2535 +#: initdb.c:2485 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" -msgstr "" -"Η προεπιλεγμένη κωδικοποίηση βάσης δεδομένων έχει οριστεί ως \"%s\".\n" +msgstr "Η προεπιλεγμένη κωδικοποίηση βάσης δεδομένων έχει οριστεί ως \"%s\".\n" -#: initdb.c:2597 +#: initdb.c:2551 #, c-format msgid "could not find suitable text search configuration for locale \"%s\"" -msgstr "" -"δεν ήταν δυνατή η εύρεση κατάλληλων ρυθμίσεων για την μηχανή αναζήτησης για " -"την εντοπιότητα “%s”" +msgstr "δεν ήταν δυνατή η εύρεση κατάλληλων ρυθμίσεων για την μηχανή αναζήτησης για την εντοπιότητα “%s”" -#: initdb.c:2608 +#: initdb.c:2562 #, c-format msgid "suitable text search configuration for locale \"%s\" is unknown" -msgstr "" -"οι κατάλληλες ρυθμίσεις για την μηχανή αναζήτησης για την εντοπιότητα “%s” " -"δεν είναι γνωστές" +msgstr "οι κατάλληλες ρυθμίσεις για την μηχανή αναζήτησης για την εντοπιότητα “%s” δεν είναι γνωστές" -#: initdb.c:2613 +#: initdb.c:2567 #, c-format -msgid "" -"specified text search configuration \"%s\" might not match locale \"%s\"" -msgstr "" -"η ορισμένη ρύθμιση μηχανής αναζήτησης “%s” μπορεί να μην ταιριάζει με την " -"εντοπιότητα “%s”" +msgid "specified text search configuration \"%s\" might not match locale \"%s\"" +msgstr "η ορισμένη ρύθμιση μηχανής αναζήτησης “%s” μπορεί να μην ταιριάζει με την εντοπιότητα “%s”" -#: initdb.c:2618 +#: initdb.c:2572 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "Η προκαθορισμένη ρύθμιση μηχανής αναζήτησης θα οριστεί ως “%s”.\n" -#: initdb.c:2662 initdb.c:2744 +#: initdb.c:2616 initdb.c:2698 #, c-format msgid "creating directory %s ... " msgstr "δημιουργία καταλόγου %s …" -#: initdb.c:2668 initdb.c:2750 initdb.c:2815 initdb.c:2877 +#: initdb.c:2622 initdb.c:2704 initdb.c:2769 initdb.c:2831 #, c-format msgid "could not create directory \"%s\": %m" msgstr "δεν ήταν δυνατή η δημιουργία του καταλόγου “%s”: %m" -#: initdb.c:2679 initdb.c:2762 +#: initdb.c:2633 initdb.c:2716 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "διορθώνονται τα δικαιώματα του υπάρχοντος καταλόγου %s … " -#: initdb.c:2685 initdb.c:2768 +#: initdb.c:2639 initdb.c:2722 #, c-format msgid "could not change permissions of directory \"%s\": %m" msgstr "δεν ήταν δυνατή η αλλαγή δικαιωμάτων του καταλόγου “%s”: %m" -#: initdb.c:2699 initdb.c:2782 +#: initdb.c:2653 initdb.c:2736 #, c-format msgid "directory \"%s\" exists but is not empty" msgstr "ο κατάλογος “%s” υπάρχει και δεν είναι άδειος" -#: initdb.c:2704 +#: initdb.c:2658 #, c-format msgid "" "If you want to create a new database system, either remove or empty\n" "the directory \"%s\" or run %s\n" "with an argument other than \"%s\".\n" msgstr "" -"Εάν θέλετε να δημιουργήσετε ένα νέο σύστημα βάσης δεδομένων, διαγράψτε ή " -"αδειάστε\n" +"Εάν θέλετε να δημιουργήσετε ένα νέο σύστημα βάσης δεδομένων, διαγράψτε ή αδειάστε\n" "τον κατάλογο \"%s\" ή εκτελέστε %s\n" "με διαφορετική παράμετρο από \"%s\".\n" -#: initdb.c:2712 initdb.c:2794 initdb.c:3163 +#: initdb.c:2666 initdb.c:2748 initdb.c:3125 #, c-format msgid "could not access directory \"%s\": %m" msgstr "δεν ήταν δυνατή η πρόσβαση του καταλόγου “%s”: %m" -#: initdb.c:2735 +#: initdb.c:2689 #, c-format msgid "WAL directory location must be an absolute path" msgstr "η τοποθεσία του καταλόγου WAL πρέπει να είναι μία πλήρης διαδρομή" -#: initdb.c:2787 +#: initdb.c:2741 #, c-format msgid "" "If you want to store the WAL there, either remove or empty the directory\n" "\"%s\".\n" msgstr "" -"Εάν θέλετε να αποθηκεύσετε το WAL εκεί, είτε αφαιρέστε ή αδειάστε τον " -"κατάλογο\n" +"Εάν θέλετε να αποθηκεύσετε το WAL εκεί, είτε αφαιρέστε ή αδειάστε τον κατάλογο\n" "\"%s\".\n" -#: initdb.c:2801 +#: initdb.c:2755 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "δεν ήταν δυνατή η δημιουργία του συμβολικού συνδέσμου “%s”: %m" -#: initdb.c:2806 +#: initdb.c:2760 #, c-format msgid "symlinks are not supported on this platform" msgstr "συμβολικοί σύνδεσμοι δεν υποστηρίζονται στην παρούσα πλατφόρμα" -#: initdb.c:2830 +#: initdb.c:2784 #, c-format -msgid "" -"It contains a dot-prefixed/invisible file, perhaps due to it being a mount " -"point.\n" -msgstr "" -"Περιέχει ένα αρχείο με πρόθεμα κουκκίδας/αόρατο, ίσως λόγω του ότι είναι " -"ένα σημείο προσάρτησης.\n" +msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point.\n" +msgstr "Περιέχει ένα αρχείο με πρόθεμα κουκκίδας/αόρατο, ίσως λόγω του ότι είναι ένα σημείο προσάρτησης.\n" -#: initdb.c:2833 +#: initdb.c:2787 #, c-format -msgid "" -"It contains a lost+found directory, perhaps due to it being a mount point.\n" -msgstr "" -"Περιέχει έναν κατάλογο lost+found, ίσως επειδή είναι ένα σημείο " -"προσάρτησης.\n" +msgid "It contains a lost+found directory, perhaps due to it being a mount point.\n" +msgstr "Περιέχει έναν κατάλογο lost+found, ίσως επειδή είναι ένα σημείο προσάρτησης.\n" -#: initdb.c:2836 +#: initdb.c:2790 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" "Create a subdirectory under the mount point.\n" msgstr "" -"Δεν προτείνεται η άμεση χρήση ενός σημείου προσάρτησης ως καταλόγου " -"δεδομένων.\n" +"Δεν προτείνεται η άμεση χρήση ενός σημείου προσάρτησης ως καταλόγου δεδομένων.\n" "Δημιουργείστε έναν υποκατάλογο υπό του σημείου προσάρτησης.\n" -#: initdb.c:2862 +#: initdb.c:2816 #, c-format msgid "creating subdirectories ... " msgstr "δημιουργία υποκαταλόγων …" -#: initdb.c:2908 +#: initdb.c:2862 msgid "performing post-bootstrap initialization ... " msgstr "πραγματοποίηση σταδίου αρχικοποίησης post-bootstrap … " -#: initdb.c:3065 +#: initdb.c:3024 #, c-format msgid "Running in debug mode.\n" msgstr "Εκτέλεση σε λειτουργία αποσφαλμάτωσης.\n" -#: initdb.c:3069 +#: initdb.c:3028 #, c-format msgid "Running in no-clean mode. Mistakes will not be cleaned up.\n" -msgstr "" -"Εκτέλεση σε λειτουργία μη καθαρισμού. Τα σφάλματα δεν θα καθαριστούν.\n" +msgstr "Εκτέλεση σε λειτουργία μη καθαρισμού. Τα σφάλματα δεν θα καθαριστούν.\n" -#: initdb.c:3146 +#: initdb.c:3108 #, c-format msgid "too many command-line arguments (first is \"%s\")" -msgstr "" -"πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (ο πρώτη είναι η “%s”)" +msgstr "πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (ο πρώτη είναι η “%s”)" -#: initdb.c:3167 initdb.c:3256 +#: initdb.c:3129 initdb.c:3218 msgid "syncing data to disk ... " msgstr "συγχρονίζονται δεδομένα στο δίσκο … " -#: initdb.c:3176 +#: initdb.c:3138 #, c-format msgid "password prompt and password file cannot be specified together" -msgstr "" -"η προτροπή κωδικού εισόδου και το αρχείο κωδικού εισόδου δεν δύναται να " -"οριστούν ταυτόχρονα" +msgstr "η προτροπή κωδικού εισόδου και το αρχείο κωδικού εισόδου δεν δύναται να οριστούν ταυτόχρονα" -#: initdb.c:3201 +#: initdb.c:3163 #, c-format msgid "argument of --wal-segsize must be a number" msgstr "η παράμετρος —wal-segsize πρέπει να είναι αριθμός" -#: initdb.c:3206 +#: initdb.c:3168 #, c-format msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024" -msgstr "" -"η παράμετρος —wal-segsize πρέπει να έχει τιμή δύναμης 2 μεταξύ 1 και 1024" +msgstr "η παράμετρος —wal-segsize πρέπει να έχει τιμή δύναμης 2 μεταξύ 1 και 1024" -#: initdb.c:3223 +#: initdb.c:3185 #, c-format -msgid "" -"superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" -msgstr "" -"το όνομα υπερχρήστη “%s” δεν επιτρέπεται, τα ονόματα ρόλων δεν δύναται να " -"αρχίζουν με “pg_”" +msgid "superuser name \"%s\" is disallowed; role names cannot begin with \"pg_\"" +msgstr "το όνομα υπερχρήστη “%s” δεν επιτρέπεται, τα ονόματα ρόλων δεν δύναται να αρχίζουν με “pg_”" -#: initdb.c:3227 +#: initdb.c:3189 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" "This user must also own the server process.\n" "\n" msgstr "" -"Τα αρχεία που ανήκουν σε αυτό το σύστημα βάσης δεδομένων θα ανήκουν στο " -"χρήστη \"%s\".\n" +"Τα αρχεία που ανήκουν σε αυτό το σύστημα βάσης δεδομένων θα ανήκουν στο χρήστη \"%s\".\n" "Αυτός ο χρήστης πρέπει επίσης να κατέχει τη διαδικασία διακομιστή.\n" "\n" -#: initdb.c:3243 +#: initdb.c:3205 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Τα αθροίσματα ελέγχου σελίδων δεδομένων είναι ενεργοποιημένα.\n" -#: initdb.c:3245 +#: initdb.c:3207 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Τα αθροίσματα ελέγχου των σελίδων δεδομένων είναι απενεργοποιημένα.\n" -#: initdb.c:3262 +#: initdb.c:3224 #, c-format msgid "" "\n" @@ -1055,30 +978,28 @@ msgid "" msgstr "" "\n" "Ο συγχρονισμός με το δίσκο παραλείφθηκε.\n" -"Ο κατάλογος δεδομένων ενδέχεται να αλλοιωθεί εάν καταρρεύσει το " -"λειτουργικού συστήματος.\n" +"Ο κατάλογος δεδομένων ενδέχεται να αλλοιωθεί εάν καταρρεύσει το λειτουργικού συστήματος.\n" -#: initdb.c:3267 +#: initdb.c:3229 #, c-format msgid "enabling \"trust\" authentication for local connections" msgstr "ενεργοποιείται η μέθοδος ταυτοποίησης “trust” για τοπικές συνδέσεις" -#: initdb.c:3268 +#: initdb.c:3230 #, c-format msgid "" "You can change this by editing pg_hba.conf or using the option -A, or\n" "--auth-local and --auth-host, the next time you run initdb.\n" msgstr "" -"Μπορείτε να το αλλάξετε αυτό με την επεξεργασία pg_hba.conf ή " -"χρησιμοποιώντας την επιλογή -A, ή\n" +"Μπορείτε να το αλλάξετε αυτό με την επεξεργασία pg_hba.conf ή χρησιμοποιώντας την επιλογή -A, ή\n" "--auth-τοπικό και --auth-host, την επόμενη φορά που θα εκτελέσετε initdb.\n" #. translator: This is a placeholder in a shell command. -#: initdb.c:3293 +#: initdb.c:3260 msgid "logfile" msgstr "logfile" -#: initdb.c:3295 +#: initdb.c:3262 #, c-format msgid "" "\n" @@ -1088,8 +1009,10 @@ msgid "" "\n" msgstr "" "\n" -"Επιτυχία. Μπορείτε τώρα να εκκινήσετε τον διακομιστή βάσης δεδομένων " -"χρησιμοποιώντας:\n" +"Επιτυχία. Μπορείτε τώρα να εκκινήσετε τον διακομιστή βάσης δεδομένων χρησιμοποιώντας:\n" "\n" " %s\n" "\n" + +#~ msgid "pclose failed: %m" +#~ msgstr "απέτυχε η εντολή pclose: %m" diff --git a/src/bin/initdb/po/es.po b/src/bin/initdb/po/es.po index 6229505959cdf..deb8505a0e432 100644 --- a/src/bin/initdb/po/es.po +++ b/src/bin/initdb/po/es.po @@ -4,21 +4,21 @@ # This file is distributed under the same license as the PostgreSQL package. # # Álvaro Herrera , 2004-2013 -# Carlos Chapi , 2014, 2018 +# Carlos Chapi , 2014-2021 # msgid "" msgstr "" "Project-Id-Version: initdb (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2021-05-14 19:47+0000\n" -"PO-Revision-Date: 2020-06-08 15:50-0400\n" +"PO-Revision-Date: 2021-05-19 22:22-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: BlackCAT 1.0\n" +"X-Generator: Poedit 2.4.2\n" #: ../../../src/common/logging.c:259 #, c-format @@ -66,10 +66,9 @@ msgid "could not read symbolic link \"%s\": %m" msgstr "no se pudo leer el enlace simbólico «%s»: %m" #: ../../common/exec.c:409 -#, fuzzy, c-format -#| msgid "%s failed: %m" +#, c-format msgid "%s() failed: %m" -msgstr "%s falló: %m" +msgstr "%s() falló: %m" #: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 #: initdb.c:328 @@ -344,7 +343,7 @@ msgstr "el archivo «%s» no es un archivo regular" #: initdb.c:947 #, c-format msgid "selecting dynamic shared memory implementation ... " -msgstr "seleccionando implementación de memoria compartida dinámica ..." +msgstr "seleccionando implementación de memoria compartida dinámica ... " #: initdb.c:956 #, c-format @@ -624,10 +623,9 @@ msgid " -N, --no-sync do not wait for changes to be written safely msgstr " -N, --no-sync no esperar que los cambios se sincronicen a disco\n" #: initdb.c:2270 -#, fuzzy, c-format -#| msgid " --no-subscriptions do not restore subscriptions\n" +#, c-format msgid " --no-instructions do not print instructions for next steps\n" -msgstr " --no-subscriptions no restaurar suscripciones\n" +msgstr " --no-instructions no mostrar instrucciones para los siguientes pasos\n" #: initdb.c:2271 #, c-format @@ -689,12 +687,9 @@ msgid "invalid authentication method \"%s\" for \"%s\" connections" msgstr "método de autentificación «%s» no válido para conexiones «%s»" #: initdb.c:2323 -#, fuzzy, c-format -#| msgid "must specify a password for the superuser to enable %s authentication" +#, c-format msgid "must specify a password for the superuser to enable password authentication" -msgstr "" -"debe especificar una contraseña al superusuario para activar\n" -"autentificación %s" +msgstr "debe especificar una contraseña al superusuario para activar autentificación mediante contraseña" #: initdb.c:2344 #, c-format @@ -712,10 +707,9 @@ msgstr "" "Hágalo usando la opción -D o la variable de ambiente PGDATA.\n" #: initdb.c:2364 -#, fuzzy, c-format -#| msgid "could not set printing parameter \"%s\"" +#, c-format msgid "could not set environment" -msgstr "no se pudo definir parámetro de impresión «%s»" +msgstr "no se pudo establecer el ambiente" #: initdb.c:2384 #, c-format diff --git a/src/bin/pg_amcheck/nls.mk b/src/bin/pg_amcheck/nls.mk index b5dcc4b0ceed5..cae6dc86ad950 100644 --- a/src/bin/pg_amcheck/nls.mk +++ b/src/bin/pg_amcheck/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_amcheck/nls.mk CATALOG_NAME = pg_amcheck -AVAIL_LANGUAGES = de fr +AVAIL_LANGUAGES = de el es fr zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \ pg_amcheck.c \ ../../fe_utils/cancel.c \ diff --git a/src/bin/pg_amcheck/po/el.po b/src/bin/pg_amcheck/po/el.po new file mode 100644 index 0000000000000..0df10aaa5c8e4 --- /dev/null +++ b/src/bin/pg_amcheck/po/el.po @@ -0,0 +1,465 @@ +# Greek message translation file for pg_amcheck +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_amcheck (PostgreSQL) package. +# Georgios Kokolatos , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_amcheck (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-05-17 03:48+0000\n" +"PO-Revision-Date: 2021-05-24 10:34+0200\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" +"X-Generator: Poedit 2.4.3\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "κρίσιμο: " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "σφάλμα: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "προειδοποίηση: " + +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Αίτηση ακύρωσης εστάλη\n" + +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 +msgid "Could not send cancel request: " +msgstr "Δεν ήταν δυνατή η αποστολή αίτησης ακύρωσης: " + +#: ../../fe_utils/connect_utils.c:92 +#, c-format +msgid "could not connect to database %s: out of memory" +msgstr "δεν ήταν δυνατή η σύνδεση με τη βάσης δεδομένων %s: έλλειψη μνήμης" + +#: ../../fe_utils/connect_utils.c:120 +#, c-format +msgid "%s" +msgstr "%s" + +#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 +#: pg_amcheck.c:1645 pg_amcheck.c:2084 +#, c-format +msgid "query failed: %s" +msgstr "το ερώτημα απέτυχε: %s" + +#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 +#: pg_amcheck.c:597 pg_amcheck.c:1116 pg_amcheck.c:1646 pg_amcheck.c:2085 +#, c-format +msgid "query was: %s" +msgstr "το ερώτημα ήταν: %s" + +#: pg_amcheck.c:332 +#, c-format +msgid "number of parallel jobs must be at least 1" +msgstr "ο αριθμός παράλληλων εργασιών πρέπει να είναι τουλάχιστον 1" + +#: pg_amcheck.c:405 +#, c-format +msgid "invalid argument for option %s" +msgstr "μη έγκυρη παράμετρος για την επιλογή %s" + +#: pg_amcheck.c:413 +#, c-format +msgid "invalid start block" +msgstr "μη έγκυρο μπλοκ εκκίνησης" + +#: pg_amcheck.c:418 +#, c-format +msgid "start block out of bounds" +msgstr "μπλοκ εκκίνησης εκτός ορίων" + +#: pg_amcheck.c:426 +#, c-format +msgid "invalid end block" +msgstr "μη έγκυρο μπλοκ τερματισμού" + +#: pg_amcheck.c:431 +#, c-format +msgid "end block out of bounds" +msgstr "μπλοκ τερματισμού εκτός ορίων" + +#: pg_amcheck.c:455 pg_amcheck.c:481 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" + +#: pg_amcheck.c:463 +#, c-format +msgid "end block precedes start block" +msgstr "μπλοκ τερματισμού προηγείται του μπλοκ εκκίνησης" + +#: pg_amcheck.c:479 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (ο πρώτη είναι η “%s”)" + +#: pg_amcheck.c:500 +#, c-format +msgid "cannot specify a database name with --all" +msgstr "δεν είναι δυνατό να οριστεί ένα όνομα βάσης δεδομένων μαζί με —all" + +#: pg_amcheck.c:509 +#, c-format +msgid "cannot specify both a database name and database patterns" +msgstr "δεν είναι δυνατός ο καθορισμός τόσο ενός ονόματος βάσης δεδομένων όσο και μοτίβων βάσης δεδομένων" + +#: pg_amcheck.c:539 +#, c-format +msgid "no databases to check" +msgstr "καθόλου βάσεις δεδομένων για έλεγχο" + +#: pg_amcheck.c:595 +#, c-format +msgid "database \"%s\": %s" +msgstr "βάση δεδομένων “%s”: %s" + +#: pg_amcheck.c:606 +#, c-format +msgid "skipping database \"%s\": amcheck is not installed" +msgstr "παρακάμπτει βάση δεδομένων “%s”: το amcheck δεν είναι εγκαταστημένο" + +#: pg_amcheck.c:614 +#, c-format +msgid "in database \"%s\": using amcheck version \"%s\" in schema \"%s\"" +msgstr "στη βάση δεδομένων \"%s\": χρησιμοποιώντας την έκδοση \"%s\" του amcheck στο σχήμα \"%s\"" + +#: pg_amcheck.c:676 +#, c-format +msgid "no relations to check" +msgstr "καθόλου σχέσεις για έλεγχο" + +#: pg_amcheck.c:762 +#, c-format +msgid "checking heap table \"%s\".\"%s\".\"%s\"" +msgstr "ελέγχει τον πίνακα heap “%s”.”%s”.”%s”" + +#: pg_amcheck.c:778 +#, c-format +msgid "checking btree index \"%s\".\"%s\".\"%s\"" +msgstr "ελέγχει το ευρετήριο btree “%s”.”%s”.”%s”" + +#: pg_amcheck.c:911 +#, c-format +msgid "error sending command to database \"%s\": %s" +msgstr "εντολή αποστολής σφάλματος στη βάση δεδομένων \"%s\": %s" + +#: pg_amcheck.c:914 +#, c-format +msgid "command was: %s" +msgstr "η εντολή ήταν: %s" + +#: pg_amcheck.c:1113 +#, c-format +msgid "btree index \"%s\".\"%s\".\"%s\": btree checking function returned unexpected number of rows: %d" +msgstr "ευρετήριο btree \"%s\". %s\".\" %s\": η συνάρτηση ελέγχου btree επέστρεψε απροσδόκητο αριθμό γραμμών: %d" + +#: pg_amcheck.c:1117 +#, c-format +msgid "Are %s's and amcheck's versions compatible?" +msgstr "Είναι συμβατές οι εκδόσεις του %s και του amcheck;" + +#: pg_amcheck.c:1151 +#, c-format +msgid "" +"%s checks objects in a PostgreSQL database for corruption.\n" +"\n" +msgstr "" +"%s ελέγχει αντικείμενα σε μια βάση δεδομένων PostgreSQL για αλλοίωση.\n" +"\n" + +#: pg_amcheck.c:1152 +#, c-format +msgid "Usage:\n" +msgstr "Χρήση:\n" + +#: pg_amcheck.c:1153 +#, c-format +msgid " %s [OPTION]... [DBNAME]\n" +msgstr " %s [OPTION]… [DBNAME]\n" + +#: pg_amcheck.c:1154 +#, c-format +msgid "" +"\n" +"Target options:\n" +msgstr "" +"\n" +"Επιλογές στόχου:\n" + +#: pg_amcheck.c:1155 +#, c-format +msgid " -a, --all check all databases\n" +msgstr " -a, —all έλεγξε όλες τις βάσεις δεδομένων\n" + +#: pg_amcheck.c:1156 +#, c-format +msgid " -d, --database=PATTERN check matching database(s)\n" +msgstr " -d, —database=PATTERN έλεγξε ταιριαστή(-ες) με το μοτίβο βάση(-εις) δεδομένων\n" + +#: pg_amcheck.c:1157 +#, c-format +msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" +msgstr " -D, —exclude-database=PATTERN να ΜΗΝ ελέγξει ταιριαστή(-ες) με το μοτίβο βάση(-εις) δεδομένων\n" + +#: pg_amcheck.c:1158 +#, c-format +msgid " -i, --index=PATTERN check matching index(es)\n" +msgstr " -i, —index=PATTERN έλεγξε ταιριαστό(-ά) με το μοτίβο ευρετήριο(-ά)\n" + +#: pg_amcheck.c:1159 +#, c-format +msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" +msgstr " -I, —exclude-index=PATTERN να ΜΗΝ ελέγξει ταιριαστό(-ά) με το μοτίβο ευρετήριο(-ά)\n" + +#: pg_amcheck.c:1160 +#, c-format +msgid " -r, --relation=PATTERN check matching relation(s)\n" +msgstr " -i, —index=PATTERN έλεγξε ταιριαστή(-ές) με το μοτίβο σχέση(-εις)\n" + +#: pg_amcheck.c:1161 +#, c-format +msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" +msgstr " -R, —exclude-relation=PATTERN να ΜΗΝ ελέγξει ταιριαστή(-ές) με το μοτίβο σχέση(-εις)\n" + +#: pg_amcheck.c:1162 +#, c-format +msgid " -s, --schema=PATTERN check matching schema(s)\n" +msgstr " -s, --schema=PATTERN έλεγξε ταιριαστό(-ά) με το μοτίβο σχήμα(-τα)\n" + +#: pg_amcheck.c:1163 +#, c-format +msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" +msgstr " -S, —exclude-schema=PATTERN να ΜΗΝ ελέγξει ταιριαστό(-ά) με το μοτίβο σχήμα(-τα)\n" + +#: pg_amcheck.c:1164 +#, c-format +msgid " -t, --table=PATTERN check matching table(s)\n" +msgstr " -t, —table=PATTERN έλεγξε ταιριαστό(-ούς) με το μοτίβο πίνακα(-ες)\n" + +#: pg_amcheck.c:1165 +#, c-format +msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" +msgstr " -T, —exclude-table=PATTERN να ΜΗΝ ελέγξει ταιριαστό(-ούς) με το μοτίβο πίνακα(-ες)\n" + +#: pg_amcheck.c:1166 +#, c-format +msgid " --no-dependent-indexes do NOT expand list of relations to include indexes\n" +msgstr " —no-dependent-indexes να ΜΗΝ επεκτείνεις τη λίστα σχέσεων ώστε να συμπεριλάβει ευρετήρια\n" + +#: pg_amcheck.c:1167 +#, c-format +msgid " --no-dependent-toast do NOT expand list of relations to include TOAST tables\n" +msgstr "" +" —no-dependent-toast να ΜΗΝ επεκτείνεις τη λίστα σχέσεων ώστε να συμπεριλάβει πίνακες TOAST\n" +"\n" + +#: pg_amcheck.c:1168 +#, c-format +msgid " --no-strict-names do NOT require patterns to match objects\n" +msgstr " —no-strict-names να ΜΗΝ απαιτήσει μοτίβα για την αντιστοίχιση αντικειμένων\n" + +#: pg_amcheck.c:1169 +#, c-format +msgid "" +"\n" +"Table checking options:\n" +msgstr "" +"\n" +"Επιλογές ελέγχου πίνακα:\n" + +#: pg_amcheck.c:1170 +#, c-format +msgid " --exclude-toast-pointers do NOT follow relation TOAST pointers\n" +msgstr " —exclude-toast-pointers να ΜΗΝ ακολουθήσει τους δείκτες σχέσεων TOAST\n" + +#: pg_amcheck.c:1171 +#, c-format +msgid " --on-error-stop stop checking at end of first corrupt page\n" +msgstr " —on-error-stop διακοπή ελέγχου στο τέλος της πρώτης αλλοιωμένης σελίδας\n" + +#: pg_amcheck.c:1172 +#, c-format +msgid " --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n" +msgstr " —skip=OPTION να ΜΗΝ ελέγξει τα “all-frozen” ή “all-visible” μπλοκ\n" + +#: pg_amcheck.c:1173 +#, c-format +msgid " --startblock=BLOCK begin checking table(s) at the given block number\n" +msgstr " —startblock=BLOCK εκκίνηση του ελέγχου πίνακα(-ων) από τον δοσμένο αριθμό μπλοκ\n" + +#: pg_amcheck.c:1174 +#, c-format +msgid " --endblock=BLOCK check table(s) only up to the given block number\n" +msgstr "" +" —endblock=BLOCK τερματισμός του ελέγχου πίνακα(-ων) από τον δοσμένο αριθμό μπλοκ\n" +"\n" + +#: pg_amcheck.c:1175 +#, c-format +msgid "" +"\n" +"B-tree index checking options:\n" +msgstr "" +"\n" +"Επιλογές ελέγχου ευρετηρίου B-tree:\n" + +#: pg_amcheck.c:1176 +#, c-format +msgid " --heapallindexed check all heap tuples are found within indexes\n" +msgstr " —heapallindexed έλεγξε όλες τις πλειάδες πλείαδες που βρίσκονται στο εύρος ευρετηρίων\n" + +#: pg_amcheck.c:1177 +#, c-format +msgid " --parent-check check index parent/child relationships\n" +msgstr " —parent-check έλεγξε σχέσεις γονέα/απογόνου ευρετηρίου\n" + +#: pg_amcheck.c:1178 +#, c-format +msgid " --rootdescend search from root page to refind tuples\n" +msgstr " —rootdescend αναζήτησε από τη ριζική σελίδα για την επανεύρεση πλειάδων\n" + +#: pg_amcheck.c:1179 +#, c-format +msgid "" +"\n" +"Connection options:\n" +msgstr "" +"\n" +"Επιλογές σύνδεσης:\n" + +#: pg_amcheck.c:1180 +#, c-format +msgid " -h, --host=HOSTNAME database server host or socket directory\n" +msgstr " -h, —host=HOSTNAME διακομιστής βάσης δεδομένων ή κατάλογος υποδοχών\n" + +#: pg_amcheck.c:1181 +#, c-format +msgid " -p, --port=PORT database server port\n" +msgstr " -p, —port=PORT θύρα διακομιστή βάσης δεδομένων\n" + +#: pg_amcheck.c:1182 +#, c-format +msgid " -U, --username=USERNAME user name to connect as\n" +msgstr " -U, —username=USERNAME όνομα χρήστη με το οποίο να συνδεθεί\n" + +#: pg_amcheck.c:1183 +#, c-format +msgid " -w, --no-password never prompt for password\n" +msgstr " -w, —no-password να μην ζητείται ποτέ κωδικός πρόσβασης\n" + +#: pg_amcheck.c:1184 +#, c-format +msgid " -W, --password force password prompt\n" +msgstr " -W, —password αναγκαστική προτροπή κωδικού πρόσβασης\n" + +#: pg_amcheck.c:1185 +#, c-format +msgid " --maintenance-db=DBNAME alternate maintenance database\n" +msgstr " —maintenance-db=DBNAME εναλλακτική βάση δεδομένων συντήρησης\n" + +#: pg_amcheck.c:1186 +#, c-format +msgid "" +"\n" +"Other options:\n" +msgstr "" +"\n" +"Άλλες επιλογές:\n" + +#: pg_amcheck.c:1187 +#, c-format +msgid " -e, --echo show the commands being sent to the server\n" +msgstr " -e, —echo εμφάνισε τις εντολές που αποστέλλονται στο διακομιστή\n" + +#: pg_amcheck.c:1188 +#, c-format +msgid " -j, --jobs=NUM use this many concurrent connections to the server\n" +msgstr " -j, —jobs=NUM χρησιμοποιήσε τόσες πολλές ταυτόχρονες συνδέσεις με το διακομιστή\n" + +#: pg_amcheck.c:1189 +#, c-format +msgid " -q, --quiet don't write any messages\n" +msgstr " -q, —quiet να μην γράψεις κανένα μήνυμα\n" + +#: pg_amcheck.c:1190 +#, c-format +msgid " -v, --verbose write a lot of output\n" +msgstr " -v, —verbose γράψε πολλά μηνύματα εξόδου\n" + +#: pg_amcheck.c:1191 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr ", —version εμφάνισε πληροφορίες έκδοσης, στη συνέχεια έξοδος\n" + +#: pg_amcheck.c:1192 +#, c-format +msgid " -P, --progress show progress information\n" +msgstr " -P, —progress εμφάνισε πληροφορίες προόδου\n" + +#: pg_amcheck.c:1193 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, στη συνέχεια έξοδος\n" + +#: pg_amcheck.c:1194 +#, c-format +msgid " --install-missing install missing extensions\n" +msgstr " —install-missing εγκατάστησε επεκτάσεις που λείπουν\n" + +#: pg_amcheck.c:1196 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Υποβάλετε αναφορές σφάλματων σε <%s>.\n" + +#: pg_amcheck.c:1197 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s αρχική σελίδα: <%s>\n" + +#: pg_amcheck.c:1255 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%) %*s" +msgstr "%*s/%s σχέσεις (%d%%) σελίδες %*s/%s (%d%%) %*s" + +#: pg_amcheck.c:1266 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%), (%s%-*.*s)" +msgstr "%*s/%s σχέσεις (%d%%) σελίδες %*s/%s (%d%%), (%s%-*.*s)" + +#: pg_amcheck.c:1281 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%)" +msgstr "%*s/%s σχέσεις (%d%%) σελίδες %*s/%s (%d%%)" + +#: pg_amcheck.c:1550 pg_amcheck.c:1692 +#, c-format +msgid "including database \"%s\"" +msgstr "συμπεριλαμβανομένης της βάσης δεδομένων \"%s\"" + +#: pg_amcheck.c:1672 +#, c-format +msgid "internal error: received unexpected database pattern_id %d" +msgstr "Εσωτερικό σφάλμα: ελήφθη μη αναμενόμενο pattern_id βάσης δεδομένων %d" + +#: pg_amcheck.c:2126 +#, c-format +msgid "internal error: received unexpected relation pattern_id %d" +msgstr "εσωτερικό σφάλμα: ελήφθη μη αναμενόμενο pattern_id σχέσης %d" diff --git a/src/bin/pg_amcheck/po/es.po b/src/bin/pg_amcheck/po/es.po new file mode 100644 index 0000000000000..2118cc12bf8b0 --- /dev/null +++ b/src/bin/pg_amcheck/po/es.po @@ -0,0 +1,463 @@ +# Spanish translation file for pg_amcheck +# +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_amcheck (PostgreSQL) package. +# +# Carlos Chapi , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_amcheck (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-05-14 19:48+0000\n" +"PO-Revision-Date: 2021-05-19 18:24-0500\n" +"Last-Translator: Carlos Chapi \n" +"Language-Team: PgSQL-es-Ayuda \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "fatal: " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "error: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "precaución: " + +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "Petición de cancelación enviada\n" + +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 +msgid "Could not send cancel request: " +msgstr "No se pudo enviar la petición de cancelación: " + +#: ../../fe_utils/connect_utils.c:92 +#, c-format +msgid "could not connect to database %s: out of memory" +msgstr "no se pudo conectar a la base de datos %s: memoria agotada" + +#: ../../fe_utils/connect_utils.c:120 +#, c-format +msgid "%s" +msgstr "%s" + +#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 +#: pg_amcheck.c:1645 pg_amcheck.c:2084 +#, c-format +msgid "query failed: %s" +msgstr "la consulta falló: %s" + +#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 +#: pg_amcheck.c:597 pg_amcheck.c:1116 pg_amcheck.c:1646 pg_amcheck.c:2085 +#, c-format +msgid "query was: %s" +msgstr "la consulta era: %s" + +#: pg_amcheck.c:332 +#, c-format +msgid "number of parallel jobs must be at least 1" +msgstr "número de trabajos en paralelo debe ser al menos 1" + +#: pg_amcheck.c:405 +#, c-format +msgid "invalid argument for option %s" +msgstr "argumento no válido para la opción %s" + +#: pg_amcheck.c:413 +#, c-format +msgid "invalid start block" +msgstr "bloque de inicio no válido" + +#: pg_amcheck.c:418 +#, c-format +msgid "start block out of bounds" +msgstr "bloque de inicio fuera de rango" + +#: pg_amcheck.c:426 +#, c-format +msgid "invalid end block" +msgstr "bloque final no válido" + +#: pg_amcheck.c:431 +#, c-format +msgid "end block out of bounds" +msgstr "bloque final fuera de rango" + +#: pg_amcheck.c:455 pg_amcheck.c:481 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Pruebe «%s --help» para mayor información.\n" + +#: pg_amcheck.c:463 +#, c-format +msgid "end block precedes start block" +msgstr "bloque final precede al bloque de inicio" + +#: pg_amcheck.c:479 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" + +#: pg_amcheck.c:500 +#, c-format +msgid "cannot specify a database name with --all" +msgstr "no se puede especificar un nombre de base de datos al usar --all" + +#: pg_amcheck.c:509 +#, c-format +msgid "cannot specify both a database name and database patterns" +msgstr "no se puede especificar al mismo tiempo un nombre de base de datos junto con patrones de bases de datos" + +#: pg_amcheck.c:539 +#, c-format +msgid "no databases to check" +msgstr "no hay bases de datos para revisar" + +#: pg_amcheck.c:595 +#, c-format +msgid "database \"%s\": %s" +msgstr "base de datos «%s»: %s" + +#: pg_amcheck.c:606 +#, c-format +msgid "skipping database \"%s\": amcheck is not installed" +msgstr "omitiendo la base de datos «%s»: amcheck no está instalado" + +#: pg_amcheck.c:614 +#, c-format +msgid "in database \"%s\": using amcheck version \"%s\" in schema \"%s\"" +msgstr "en base de datos «%s»: usando amcheck versión «%s» en esquema «%s»" + +#: pg_amcheck.c:676 +#, c-format +msgid "no relations to check" +msgstr "no hay relaciones para revisar" + +#: pg_amcheck.c:762 +#, c-format +msgid "checking heap table \"%s\".\"%s\".\"%s\"" +msgstr "revisando tabla heap «%s».«%s».«%s»" + +#: pg_amcheck.c:778 +#, c-format +msgid "checking btree index \"%s\".\"%s\".\"%s\"" +msgstr "revisando índice btree «%s».«%s».«%s»" + +#: pg_amcheck.c:911 +#, c-format +msgid "error sending command to database \"%s\": %s" +msgstr "error al enviar orden a la base de datos «%s»: %s" + +#: pg_amcheck.c:914 +#, c-format +msgid "command was: %s" +msgstr "la orden era: %s" + +#: pg_amcheck.c:1113 +#, c-format +msgid "btree index \"%s\".\"%s\".\"%s\": btree checking function returned unexpected number of rows: %d" +msgstr "índice btree «%s».«%s».«%s»: la función de comprobación de btree devolvió un número inesperado de registros: %d" + +#: pg_amcheck.c:1117 +#, c-format +msgid "Are %s's and amcheck's versions compatible?" +msgstr "¿Son compatibles la versión de %s con la de amcheck?" + +#: pg_amcheck.c:1151 +#, c-format +msgid "" +"%s checks objects in a PostgreSQL database for corruption.\n" +"\n" +msgstr "" +"%s busca corrupción en objetos de una base de datos PostgreSQL.\n" +"\n" + +#: pg_amcheck.c:1152 +#, c-format +msgid "Usage:\n" +msgstr "Empleo:\n" + +#: pg_amcheck.c:1153 +#, c-format +msgid " %s [OPTION]... [DBNAME]\n" +msgstr " %s [OPCIÓN]... [BASE-DE-DATOS]\n" + +#: pg_amcheck.c:1154 +#, c-format +msgid "" +"\n" +"Target options:\n" +msgstr "" +"\n" +"Opciones de objetivo:\n" + +#: pg_amcheck.c:1155 +#, c-format +msgid " -a, --all check all databases\n" +msgstr " -a, --all revisar todas las bases de datos\n" + +#: pg_amcheck.c:1156 +#, c-format +msgid " -d, --database=PATTERN check matching database(s)\n" +msgstr " -d, --database=PATRÓN revisar la(s) base(s) de datos que coincida(n)\n" + +#: pg_amcheck.c:1157 +#, c-format +msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" +msgstr " -D, --exclude-database=PATRÓN NO revisar la(s) base(s) de datos que coincida(n)\n" + +#: pg_amcheck.c:1158 +#, c-format +msgid " -i, --index=PATTERN check matching index(es)\n" +msgstr " -i, --index=PATRÓN revisar el(los) índice(s) que coincida(n)\n" + +#: pg_amcheck.c:1159 +#, c-format +msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" +msgstr " -I, --exclude-index=PATRÓN NO revisar el(los) índice(s) que coincida(n)\n" + +#: pg_amcheck.c:1160 +#, c-format +msgid " -r, --relation=PATTERN check matching relation(s)\n" +msgstr " -r, --relation=PATRÓN revisar la(s) relación(es) que coincida(n)\n" + +#: pg_amcheck.c:1161 +#, c-format +msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" +msgstr " -R, --exclude-relation=PATRÓN NO revisar la(s) relación(es) que coincida(n)\n" + +#: pg_amcheck.c:1162 +#, c-format +msgid " -s, --schema=PATTERN check matching schema(s)\n" +msgstr " -s, --schema=PATRÓN revisar el(los) esquema(s) que coincida(n)\n" + +#: pg_amcheck.c:1163 +#, c-format +msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" +msgstr " -S, --exclude-schema=PATRÓN NO revisar el(los) esquema(s) que coincida(n)\n" + +#: pg_amcheck.c:1164 +#, c-format +msgid " -t, --table=PATTERN check matching table(s)\n" +msgstr " -t, --table=PATRÓN revisar la(s) tabla(s) que coincida(n)\n" + +#: pg_amcheck.c:1165 +#, c-format +msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" +msgstr " -T, --exclude-table=PATRÓN NO revisar la(s) tabla(s) que coincida(n)\n" + +#: pg_amcheck.c:1166 +#, c-format +msgid " --no-dependent-indexes do NOT expand list of relations to include indexes\n" +msgstr " --no-dependent-indexes NO expandir la lista de relaciones para incluir índices\n" + +#: pg_amcheck.c:1167 +#, c-format +msgid " --no-dependent-toast do NOT expand list of relations to include TOAST tables\n" +msgstr " --no-dependent-toast NO expandir lista de relaciones para incluir tablas TOAST\n" + +#: pg_amcheck.c:1168 +#, c-format +msgid " --no-strict-names do NOT require patterns to match objects\n" +msgstr " --no-strict-names NO requerir que los patrones coincidan con los objetos\n" + +#: pg_amcheck.c:1169 +#, c-format +msgid "" +"\n" +"Table checking options:\n" +msgstr "" +"\n" +"Opciones para revisión de tabla:\n" + +#: pg_amcheck.c:1170 +#, c-format +msgid " --exclude-toast-pointers do NOT follow relation TOAST pointers\n" +msgstr " --exclude-toast-pointers NO seguir punteros TOAST de la relación\n" + +#: pg_amcheck.c:1171 +#, c-format +msgid " --on-error-stop stop checking at end of first corrupt page\n" +msgstr " --on-error-stop detener la revisión al final de la primera página corrupta\n" + +#: pg_amcheck.c:1172 +#, c-format +msgid " --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n" +msgstr " --skip=OPTION NO revisar bloques «all-frozen» u «all-visible»\n" + +#: pg_amcheck.c:1173 +#, c-format +msgid " --startblock=BLOCK begin checking table(s) at the given block number\n" +msgstr " --startblock=BLOQUE empezar la revisión de la(s) tabla(s) en el número de bloque especificado\n" + +#: pg_amcheck.c:1174 +#, c-format +msgid " --endblock=BLOCK check table(s) only up to the given block number\n" +msgstr " --endblock=BLOQUE solo revisar la(s) tabla(s) hasta el número de bloque especificado\n" + +#: pg_amcheck.c:1175 +#, c-format +msgid "" +"\n" +"B-tree index checking options:\n" +msgstr "" +"\n" +"Opciones para revisión de índices B-tree:\n" + +#: pg_amcheck.c:1176 +#, c-format +msgid " --heapallindexed check all heap tuples are found within indexes\n" +msgstr " --heapallindexed revisar que todas las tuplas heap se encuentren en los índices\n" + +#: pg_amcheck.c:1177 +#, c-format +msgid " --parent-check check index parent/child relationships\n" +msgstr " --parent-check revisar relaciones padre/hijo de índice\n" + +#: pg_amcheck.c:1178 +#, c-format +msgid " --rootdescend search from root page to refind tuples\n" +msgstr " --rootdescend buscar desde la página raíz para volver a encontrar tuplas\n" + +#: pg_amcheck.c:1179 +#, c-format +msgid "" +"\n" +"Connection options:\n" +msgstr "" +"\n" +"Opciones de conexión:\n" + +#: pg_amcheck.c:1180 +#, c-format +msgid " -h, --host=HOSTNAME database server host or socket directory\n" +msgstr " -h, --host=ANFITRIÓN nombre del servidor o directorio del socket\n" + +#: pg_amcheck.c:1181 +#, c-format +msgid " -p, --port=PORT database server port\n" +msgstr " -p, --port=PUERTO puerto del servidor de base de datos\n" + +#: pg_amcheck.c:1182 +#, c-format +msgid " -U, --username=USERNAME user name to connect as\n" +msgstr " -U, --username=USUARIO nombre de usuario para la conexión\n" + +#: pg_amcheck.c:1183 +#, c-format +msgid " -w, --no-password never prompt for password\n" +msgstr " -w, --no-password nunca pedir contraseña\n" + +#: pg_amcheck.c:1184 +#, c-format +msgid " -W, --password force password prompt\n" +msgstr " -W, --password forzar la petición de contraseña\n" + +#: pg_amcheck.c:1185 +#, c-format +msgid " --maintenance-db=DBNAME alternate maintenance database\n" +msgstr " --maintenance-db=BASE base de datos de mantención alternativa\n" + +#: pg_amcheck.c:1186 +#, c-format +msgid "" +"\n" +"Other options:\n" +msgstr "" +"\n" +"Otras opciones:\n" + +#: pg_amcheck.c:1187 +#, c-format +msgid " -e, --echo show the commands being sent to the server\n" +msgstr " -e, --echo mostrar las órdenes enviadas al servidor\n" + +#: pg_amcheck.c:1188 +#, c-format +msgid " -j, --jobs=NUM use this many concurrent connections to the server\n" +msgstr " -j, --jobs=NUM usar esta cantidad de conexiones concurrentes hacia el servidor\n" + +#: pg_amcheck.c:1189 +#, c-format +msgid " -q, --quiet don't write any messages\n" +msgstr " -q, --quiet no desplegar mensajes\n" + +#: pg_amcheck.c:1190 +#, c-format +msgid " -v, --verbose write a lot of output\n" +msgstr " -v, --verbose desplegar varios mensajes informativos\n" + +#: pg_amcheck.c:1191 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version mostrar información de versión y salir\n" + +#: pg_amcheck.c:1192 +#, c-format +msgid " -P, --progress show progress information\n" +msgstr " -P, --progress mostrar información de progreso\n" + +#: pg_amcheck.c:1193 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help mostrar esta ayuda y salir\n" + +#: pg_amcheck.c:1194 +#, c-format +msgid " --install-missing install missing extensions\n" +msgstr " --install-missing instalar extensiones faltantes\n" + +#: pg_amcheck.c:1196 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Reporte errores a <%s>.\n" + +#: pg_amcheck.c:1197 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Sitio web de %s: <%s>\n" + +#: pg_amcheck.c:1255 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%) %*s" +msgstr "%*s/%s relaciones (%d%%) %*s/%s páginas (%d%%) %*s" + +#: pg_amcheck.c:1266 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%), (%s%-*.*s)" +msgstr "%*s/%s relaciones (%d%%) %*s/%s páginas (%d%%), (%s%-*.*s)" + +#: pg_amcheck.c:1281 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%)" +msgstr "%*s/%s relaciones (%d%%) %*s/%s páginas (%d%%)" + +#: pg_amcheck.c:1550 pg_amcheck.c:1692 +#, c-format +msgid "including database \"%s\"" +msgstr "incluyendo base de datos «%s»" + +#: pg_amcheck.c:1672 +#, c-format +msgid "internal error: received unexpected database pattern_id %d" +msgstr "error interno: se recibió pattern_id de base de datos inesperado (%d)" + +#: pg_amcheck.c:2126 +#, c-format +msgid "internal error: received unexpected relation pattern_id %d" +msgstr "error interno: se recibió pattern_id de relación inesperado (%d)" diff --git a/src/bin/pg_amcheck/po/fr.po b/src/bin/pg_amcheck/po/fr.po index c26a1dc132aa1..f359e35aa02e7 100644 --- a/src/bin/pg_amcheck/po/fr.po +++ b/src/bin/pg_amcheck/po/fr.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: pg_amcheck (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-26 06:48+0000\n" -"PO-Revision-Date: 2021-04-26 11:37+0200\n" +"POT-Creation-Date: 2021-06-14 06:18+0000\n" +"PO-Revision-Date: 2021-06-14 16:56+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 2.4.3\n" #: ../../../src/common/logging.c:259 #, c-format @@ -69,8 +69,8 @@ msgstr "le nombre maximum de jobs en parallèle doit être au moins de 1" #: pg_amcheck.c:405 #, c-format -msgid "invalid skip option" -msgstr "option skip invalide" +msgid "invalid argument for option %s" +msgstr "argument invalide pour l'option %s" #: pg_amcheck.c:413 #, c-format @@ -169,13 +169,13 @@ msgstr "index btree \"%s\".\"%s\".\"%s\" : la fonction de vérification de btree #: pg_amcheck.c:1117 #, c-format -msgid "are %s's and amcheck's versions compatible?" +msgid "Are %s's and amcheck's versions compatible?" msgstr "est-ce que les versions de %s et d'amcheck sont compatibles ?" #: pg_amcheck.c:1151 #, c-format msgid "" -"%s uses amcheck module to check objects in a PostgreSQL database for corruption.\n" +"%s checks objects in a PostgreSQL database for corruption.\n" "\n" msgstr "" "%s utilise le module amcheck pour vérifier les objets dans une base PostgreSQL pour corruption.\n" @@ -195,137 +195,137 @@ msgstr " %s [OPTION]... [NOMBASE]\n" #, c-format msgid "" "\n" -"Target Options:\n" +"Target options:\n" msgstr "" "\n" "Options de la cible :\n" #: pg_amcheck.c:1155 #, c-format -msgid " -a, --all check all databases\n" +msgid " -a, --all check all databases\n" msgstr " -a, --all vérifie toutes les bases\n" #: pg_amcheck.c:1156 #, c-format -msgid " -d, --database=PATTERN check matching database(s)\n" +msgid " -d, --database=PATTERN check matching database(s)\n" msgstr " -d, --database=MOTIF vérifie les bases correspondantes\n" #: pg_amcheck.c:1157 #, c-format -msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" +msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" msgstr " -D, --exclude-database=MOTIF ne vérifie PAS les bases correspondantes\n" #: pg_amcheck.c:1158 #, c-format -msgid " -i, --index=PATTERN check matching index(es)\n" +msgid " -i, --index=PATTERN check matching index(es)\n" msgstr " -i, --index=MOTIF vérifie les index correspondants\n" #: pg_amcheck.c:1159 #, c-format -msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" +msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" msgstr " -I, --exclude-index=MOTIF ne vérifie PAS les index correspondants\n" #: pg_amcheck.c:1160 #, c-format -msgid " -r, --relation=PATTERN check matching relation(s)\n" +msgid " -r, --relation=PATTERN check matching relation(s)\n" msgstr " -r, --relation=MOTIF vérifie les relations correspondantes\n" #: pg_amcheck.c:1161 #, c-format -msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" -msgstr " -R, --exclude-relation=MOTIF ne vérifie pas les relations correspondantes\n" +msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" +msgstr " -R, --exclude-relation=MOTIF ne vérifie PAS les relations correspondantes\n" #: pg_amcheck.c:1162 #, c-format -msgid " -s, --schema=PATTERN check matching schema(s)\n" +msgid " -s, --schema=PATTERN check matching schema(s)\n" msgstr " -s, --schema=MOTIF vérifie les schémas correspondants\n" #: pg_amcheck.c:1163 #, c-format -msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" +msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" msgstr " -S, --exclude-schema=MOTIF ne vérifie PAS les schémas correspondants\n" #: pg_amcheck.c:1164 #, c-format -msgid " -t, --table=PATTERN check matching table(s)\n" +msgid " -t, --table=PATTERN check matching table(s)\n" msgstr " -t, --table=MOTIF vérifie les tables correspondantes\n" #: pg_amcheck.c:1165 #, c-format -msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" +msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" msgstr " -T, --exclude-table=MOTIF ne vérifie PAS les tables correspondantes\n" #: pg_amcheck.c:1166 #, c-format -msgid " --no-dependent-indexes do NOT expand list of relations to include indexes\n" +msgid " --no-dependent-indexes do NOT expand list of relations to include indexes\n" msgstr " --no-dependent-indexes n'étend PAS la liste des relations pour inclure les index\n" #: pg_amcheck.c:1167 #, c-format -msgid " --no-dependent-toast do NOT expand list of relations to include toast\n" +msgid " --no-dependent-toast do NOT expand list of relations to include TOAST tables\n" msgstr " --no-dependent-toast n'étend PAS la liste des relations pour inclure les TOAST\n" #: pg_amcheck.c:1168 #, c-format -msgid " --no-strict-names do NOT require patterns to match objects\n" +msgid " --no-strict-names do NOT require patterns to match objects\n" msgstr " --no-strict-names ne requiert PAS que les motifs correspondent à des objets\n" #: pg_amcheck.c:1169 #, c-format msgid "" "\n" -"Table Checking Options:\n" +"Table checking options:\n" msgstr "" "\n" "Options de vérification des tables :\n" #: pg_amcheck.c:1170 #, c-format -msgid " --exclude-toast-pointers do NOT follow relation toast pointers\n" +msgid " --exclude-toast-pointers do NOT follow relation TOAST pointers\n" msgstr " --exclude-toast-pointers ne suit PAS les pointeurs de TOAST\n" #: pg_amcheck.c:1171 #, c-format -msgid " --on-error-stop stop checking at end of first corrupt page\n" +msgid " --on-error-stop stop checking at end of first corrupt page\n" msgstr " --on-error-stop arrête la vérification à la fin du premier bloc corrompu\n" #: pg_amcheck.c:1172 #, c-format -msgid " --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n" +msgid " --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n" msgstr " --skip=OPTION ne vérifie PAS les blocs « all-frozen » et « all-visible »\n" #: pg_amcheck.c:1173 #, c-format -msgid " --startblock=BLOCK begin checking table(s) at the given block number\n" +msgid " --startblock=BLOCK begin checking table(s) at the given block number\n" msgstr " --startblock=BLOC commence la vérification des tables au numéro de bloc indiqué\n" #: pg_amcheck.c:1174 #, c-format -msgid " --endblock=BLOCK check table(s) only up to the given block number\n" +msgid " --endblock=BLOCK check table(s) only up to the given block number\n" msgstr " --endblock=BLOC vérifie les tables jusqu'au numéro de bloc indiqué\n" #: pg_amcheck.c:1175 #, c-format msgid "" "\n" -"Btree Index Checking Options:\n" +"B-tree index checking options:\n" msgstr "" "\n" "Options de vérification des index Btree :\n" #: pg_amcheck.c:1176 #, c-format -msgid " --heapallindexed check all heap tuples are found within indexes\n" +msgid " --heapallindexed check all heap tuples are found within indexes\n" msgstr " --heapallindexed vérifie que tous les enregistrements de la table sont référencés dans les index\n" #: pg_amcheck.c:1177 #, c-format -msgid " --parent-check check index parent/child relationships\n" +msgid " --parent-check check index parent/child relationships\n" msgstr " --parent-check vérifie les relations parent/enfants dans les index\n" #: pg_amcheck.c:1178 #, c-format -msgid " --rootdescend search from root page to refind tuples\n" +msgid " --rootdescend search from root page to refind tuples\n" msgstr " --rootdescend recherche à partir de la racine pour trouver les lignes\n" #: pg_amcheck.c:1179 @@ -339,82 +339,82 @@ msgstr "" #: pg_amcheck.c:1180 #, c-format -msgid " -h, --host=HOSTNAME database server host or socket directory\n" +msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME IP/alias du serveur ou répertoire du socket\n" #: pg_amcheck.c:1181 #, c-format -msgid " -p, --port=PORT database server port\n" +msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT port du serveur de bases de données\n" #: pg_amcheck.c:1182 #, c-format -msgid " -U, --username=USERNAME user name to connect as\n" +msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=NOM_UTILSATEUR nom d'utilisateur pour la connexion\n" #: pg_amcheck.c:1183 #, c-format -msgid " -w, --no-password never prompt for password\n" +msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password ne demande jamais un mot de passe\n" #: pg_amcheck.c:1184 #, c-format -msgid " -W, --password force password prompt\n" +msgid " -W, --password force password prompt\n" msgstr " -W, --password force la saisie d'un mot de passe\n" #: pg_amcheck.c:1185 #, c-format -msgid " --maintenance-db=DBNAME alternate maintenance database\n" +msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=NOM_BASE change la base de maintenance\n" #: pg_amcheck.c:1186 #, c-format msgid "" "\n" -"Other Options:\n" +"Other options:\n" msgstr "" "\n" -"Autres options:\n" +"Autres options :\n" #: pg_amcheck.c:1187 #, c-format -msgid " -e, --echo show the commands being sent to the server\n" -msgstr " -e, --echo affiche les commandes envoyées au serveur\n" +msgid " -e, --echo show the commands being sent to the server\n" +msgstr " -e, --echo affiche les commandes envoyées au serveur\n" #: pg_amcheck.c:1188 #, c-format -msgid " -j, --jobs=NUM use this many concurrent connections to the server\n" +msgid " -j, --jobs=NUM use this many concurrent connections to the server\n" msgstr " -j, --jobs=NOMBRE utilise ce nombre de connexions simultanées au serveur\n" #: pg_amcheck.c:1189 #, c-format -msgid " -q, --quiet don't write any messages\n" -msgstr " -q, --quiet n'écrit aucun message\n" +msgid " -q, --quiet don't write any messages\n" +msgstr " -q, --quiet n'écrit aucun message\n" #: pg_amcheck.c:1190 #, c-format -msgid " -v, --verbose write a lot of output\n" -msgstr " -v, --verbose mode verbeux\n" +msgid " -P, --progress show progress information\n" +msgstr " -P, --progress affiche la progression\n" #: pg_amcheck.c:1191 #, c-format -msgid " -V, --version output version information, then exit\n" -msgstr " -V, --version affiche la version, puis quitte\n" +msgid " -v, --verbose write a lot of output\n" +msgstr " -v, --verbose mode verbeux\n" #: pg_amcheck.c:1192 #, c-format -msgid " -P, --progress show progress information\n" -msgstr " -P, --progress affiche la progression\n" +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version affiche la version puis quitte\n" #: pg_amcheck.c:1193 #, c-format -msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help affiche cette aide, puis quitte\n" +msgid " --install-missing install missing extensions\n" +msgstr " --install-missing installe les extensions manquantes\n" #: pg_amcheck.c:1194 #, c-format -msgid " --install-missing install missing extensions\n" -msgstr " --install-missing installe les extensions manquantes\n" +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help affiche cette aide puis quitte\n" #: pg_amcheck.c:1196 #, c-format @@ -447,7 +447,7 @@ msgstr "relations %*s/%s (%d%%) pages %*s/%s (%d%%)" #: pg_amcheck.c:1550 pg_amcheck.c:1692 #, c-format -msgid "including database: \"%s\"" +msgid "including database \"%s\"" msgstr "en incluant la base de données : « %s »" #: pg_amcheck.c:1672 @@ -462,3 +462,28 @@ msgstr "erreur interne : a reçu un pattern_id %d inattendu de la relation" #~ msgid "number of parallel jobs must be at least 1\n" #~ msgstr "le nombre de jobs parallèles doit être au moins de 1\n" + +#~ msgid " -?, --help show this help, then exit\n" +#~ msgstr " -?, --help affiche cette aide, puis quitte\n" + +#~ msgid " -V, --version output version information, then exit\n" +#~ msgstr " -V, --version affiche la version, puis quitte\n" + +#~ msgid " -v, --verbose write a lot of output\n" +#~ msgstr " -v, --verbose mode verbeux\n" + +#~ msgid " -q, --quiet don't write any messages\n" +#~ msgstr " -q, --quiet n'écrit aucun message\n" + +#~ msgid " -e, --echo show the commands being sent to the server\n" +#~ msgstr " -e, --echo affiche les commandes envoyées au serveur\n" + +#~ msgid "" +#~ "\n" +#~ "Other Options:\n" +#~ msgstr "" +#~ "\n" +#~ "Autres options:\n" + +#~ msgid "invalid skip option" +#~ msgstr "option skip invalide" diff --git a/src/bin/pg_amcheck/po/zh_CN.po b/src/bin/pg_amcheck/po/zh_CN.po new file mode 100644 index 0000000000000..8e1cff9f7b75d --- /dev/null +++ b/src/bin/pg_amcheck/po/zh_CN.po @@ -0,0 +1,460 @@ +# LANGUAGE message translation file for pg_amcheck +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_amcheck (PostgreSQL) package. +# Jie Zhang , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_amcheck (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-06-08 23:18+0000\n" +"PO-Revision-Date: 2021-06-09 18:00+0800\n" +"Last-Translator: Jie Zhang \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "致命的:" + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "错误: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "警告: " + +#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206 +msgid "Cancel request sent\n" +msgstr "取消发送的请求\n" + +#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210 +msgid "Could not send cancel request: " +msgstr "无法发送取消请求: " + +#: ../../fe_utils/connect_utils.c:92 +#, c-format +msgid "could not connect to database %s: out of memory" +msgstr "无法连接到数据库 %s:内存不足" + +#: ../../fe_utils/connect_utils.c:120 +#, c-format +msgid "%s" +msgstr "%s" + +#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 +#: pg_amcheck.c:1645 pg_amcheck.c:2084 +#, c-format +msgid "query failed: %s" +msgstr "查询失败: %s" + +#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 +#: pg_amcheck.c:597 pg_amcheck.c:1116 pg_amcheck.c:1646 pg_amcheck.c:2085 +#, c-format +msgid "query was: %s" +msgstr "查询是: %s" + +#: pg_amcheck.c:332 +#, c-format +msgid "number of parallel jobs must be at least 1" +msgstr "并行工作的数量必须至少为1" + +#: pg_amcheck.c:405 +#, c-format +msgid "invalid argument for option %s" +msgstr "选项%s的参数无效" + +#: pg_amcheck.c:413 +#, c-format +msgid "invalid start block" +msgstr "起始块无效" + +#: pg_amcheck.c:418 +#, c-format +msgid "start block out of bounds" +msgstr "起始块超出范围" + +#: pg_amcheck.c:426 +#, c-format +msgid "invalid end block" +msgstr "无效的结束块" + +#: pg_amcheck.c:431 +#, c-format +msgid "end block out of bounds" +msgstr "结束块超出范围" + +#: pg_amcheck.c:455 pg_amcheck.c:481 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "请用 \"%s --help\" 获取更多的信息.\n" + +#: pg_amcheck.c:463 +#, c-format +msgid "end block precedes start block" +msgstr "结束块在开始块之前" + +#: pg_amcheck.c:479 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "命令行参数太多 (第一个是 \"%s\")" + +#: pg_amcheck.c:500 +#, c-format +msgid "cannot specify a database name with --all" +msgstr "无法使用--all指定数据库名称" + +#: pg_amcheck.c:509 +#, c-format +msgid "cannot specify both a database name and database patterns" +msgstr "不能同时指定数据库名称和数据库模式" + +#: pg_amcheck.c:539 +#, c-format +msgid "no databases to check" +msgstr "没有要检查的数据库" + +#: pg_amcheck.c:595 +#, c-format +msgid "database \"%s\": %s" +msgstr "数据库 \"%s\": %s" + +#: pg_amcheck.c:606 +#, c-format +msgid "skipping database \"%s\": amcheck is not installed" +msgstr "正在跳过数据库\"%s\":未安装amcheck" + +#: pg_amcheck.c:614 +#, c-format +msgid "in database \"%s\": using amcheck version \"%s\" in schema \"%s\"" +msgstr "在数据库\"%1$s\"中:在模式\"%3$s\"中使用amcheck版本\"%2$s\"" + +#: pg_amcheck.c:676 +#, c-format +msgid "no relations to check" +msgstr "没有要检查的关系" + +#: pg_amcheck.c:762 +#, c-format +msgid "checking heap table \"%s\".\"%s\".\"%s\"" +msgstr "正在检查堆表\"%s\".\"%s\".\"%s\"" + +#: pg_amcheck.c:778 +#, c-format +msgid "checking btree index \"%s\".\"%s\".\"%s\"" +msgstr "检查btree索引\"%s\".\"%s\".\"%s\"" + +#: pg_amcheck.c:911 +#, c-format +msgid "error sending command to database \"%s\": %s" +msgstr "向数据库\"%s\"发送命令时出错: %s" + +#: pg_amcheck.c:914 +#, c-format +msgid "command was: %s" +msgstr "命令是: %s" + +#: pg_amcheck.c:1113 +#, c-format +msgid "btree index \"%s\".\"%s\".\"%s\": btree checking function returned unexpected number of rows: %d" +msgstr "B树索引\"%s\".\"%s\".\"%s\":B树检查函数返回了意外的行数: %d" + +#: pg_amcheck.c:1117 +#, c-format +msgid "Are %s's and amcheck's versions compatible?" +msgstr "%s和amcheck的版本兼容吗?" + +#: pg_amcheck.c:1151 +#, c-format +msgid "" +"%s checks objects in a PostgreSQL database for corruption.\n" +"\n" +msgstr "" +"%s检查PostgreSQL数据库中的对象是否损坏.\n" +"\n" + +#: pg_amcheck.c:1152 +#, c-format +msgid "Usage:\n" +msgstr "使用方法:\n" + +#: pg_amcheck.c:1153 +#, c-format +msgid " %s [OPTION]... [DBNAME]\n" +msgstr " %s [选项]... [数据库名字]\n" + +#: pg_amcheck.c:1154 +#, c-format +msgid "" +"\n" +"Target options:\n" +msgstr "" +"\n" +"目标选项:\n" + +#: pg_amcheck.c:1155 +#, c-format +msgid " -a, --all check all databases\n" +msgstr " -a, --all 检查所有数据库\n" + +#: pg_amcheck.c:1156 +#, c-format +msgid " -d, --database=PATTERN check matching database(s)\n" +msgstr " -d, --database=PATTERN 检查匹配的数据库\n" + +#: pg_amcheck.c:1157 +#, c-format +msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" +msgstr " -D, --exclude-database=PATTERN 不检查匹配的数据库\n" + +#: pg_amcheck.c:1158 +#, c-format +msgid " -i, --index=PATTERN check matching index(es)\n" +msgstr " -i, --index=PATTERN 检查匹配的索引\n" + +#: pg_amcheck.c:1159 +#, c-format +msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" +msgstr " -I, --exclude-index=PATTERN 不检查匹配的索引\n" + +#: pg_amcheck.c:1160 +#, c-format +msgid " -r, --relation=PATTERN check matching relation(s)\n" +msgstr " -r, --relation=PATTERN 检查匹配的关系\n" + +#: pg_amcheck.c:1161 +#, c-format +msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" +msgstr " -R, --exclude-relation=PATTERN 不检查匹配的关系\n" + +#: pg_amcheck.c:1162 +#, c-format +msgid " -s, --schema=PATTERN check matching schema(s)\n" +msgstr " -s, --schema=PATTERN 检查匹配的模式\n" + +#: pg_amcheck.c:1163 +#, c-format +msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" +msgstr " -S, --exclude-schema=PATTERN 不检查匹配模式\n" + +#: pg_amcheck.c:1164 +#, c-format +msgid " -t, --table=PATTERN check matching table(s)\n" +msgstr " -t, --table=PATTERN 检查匹配的表\n" + +#: pg_amcheck.c:1165 +#, c-format +msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" +msgstr " -T, --exclude-table=PATTERN 不检查匹的配表\n" + +#: pg_amcheck.c:1166 +#, c-format +msgid " --no-dependent-indexes do NOT expand list of relations to include indexes\n" +msgstr " --no-dependent-indexes 不要展开关系列表以包含索引\n" + +#: pg_amcheck.c:1167 +#, c-format +msgid " --no-dependent-toast do NOT expand list of relations to include TOAST tables\n" +msgstr " --no-dependent-toast 不要展开关系列表以包括TOAST表\n" + +#: pg_amcheck.c:1168 +#, c-format +msgid " --no-strict-names do NOT require patterns to match objects\n" +msgstr " --no-strict-names 不需要模式来匹配对象\n" + +#: pg_amcheck.c:1169 +#, c-format +msgid "" +"\n" +"Table checking options:\n" +msgstr "" +"\n" +"表检查选项:\n" + +#: pg_amcheck.c:1170 +#, c-format +msgid " --exclude-toast-pointers do NOT follow relation TOAST pointers\n" +msgstr " --exclude-toast-pointers 不要遵循关系TOAST指示\n" + +#: pg_amcheck.c:1171 +#, c-format +msgid " --on-error-stop stop checking at end of first corrupt page\n" +msgstr " --on-error-stop 在第一个损坏页的末尾停止检查\n" + +#: pg_amcheck.c:1172 +#, c-format +msgid " --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n" +msgstr " --skip=OPTION 不要检查\"all-frozen\"或\"all-visible\"块\n" + +#: pg_amcheck.c:1173 +#, c-format +msgid " --startblock=BLOCK begin checking table(s) at the given block number\n" +msgstr " --startblock=BLOCK 在给定的块编号处开始检查表\n" + +#: pg_amcheck.c:1174 +#, c-format +msgid " --endblock=BLOCK check table(s) only up to the given block number\n" +msgstr " --endblock=BLOCK 检查表仅限于给定的块编号\n" + +#: pg_amcheck.c:1175 +#, c-format +msgid "" +"\n" +"B-tree index checking options:\n" +msgstr "" +"\n" +"B树索引检查选项:\n" + +#: pg_amcheck.c:1176 +#, c-format +msgid " --heapallindexed check all heap tuples are found within indexes\n" +msgstr " --heapallindexed 检查是否在索引中找到所有堆元组\n" + +#: pg_amcheck.c:1177 +#, c-format +msgid " --parent-check check index parent/child relationships\n" +msgstr " --parent-check 检查索引父/子关系\n" + +#: pg_amcheck.c:1178 +#, c-format +msgid " --rootdescend search from root page to refind tuples\n" +msgstr " --rootdescend 从根页搜索到重新填充元组\n" + +#: pg_amcheck.c:1179 +#, c-format +msgid "" +"\n" +"Connection options:\n" +msgstr "" +"\n" +"联接选项:\n" + +#: pg_amcheck.c:1180 +#, c-format +msgid " -h, --host=HOSTNAME database server host or socket directory\n" +msgstr " -h, --host=HOSTNAME 数据库服务器主机或套接字目录\n" + +#: pg_amcheck.c:1181 +#, c-format +msgid " -p, --port=PORT database server port\n" +msgstr " -p, --port=PORT 数据库服务器端口\n" + +#: pg_amcheck.c:1182 +#, c-format +msgid " -U, --username=USERNAME user name to connect as\n" +msgstr " -U, --username=USERNAME 要连接的用户名\n" + +#: pg_amcheck.c:1183 +#, c-format +msgid " -w, --no-password never prompt for password\n" +msgstr " -w, --no-password 从不提示输入密码\n" + +#: pg_amcheck.c:1184 +#, c-format +msgid " -W, --password force password prompt\n" +msgstr " -W, --password 强制密码提示\n" + +#: pg_amcheck.c:1185 +#, c-format +msgid " --maintenance-db=DBNAME alternate maintenance database\n" +msgstr " --maintenance-db=DBNAME 备用维护数据库\n" + +#: pg_amcheck.c:1186 +#, c-format +msgid "" +"\n" +"Other options:\n" +msgstr "" +"\n" +"其它选项:\n" + +#: pg_amcheck.c:1187 +#, c-format +msgid " -e, --echo show the commands being sent to the server\n" +msgstr " -e, --echo 显示发送到服务端的命令\n" + +#: pg_amcheck.c:1188 +#, c-format +msgid " -j, --jobs=NUM use this many concurrent connections to the server\n" +msgstr " -j, --jobs=NUM 使用这么多到服务器的并发连接\n" + +#: pg_amcheck.c:1189 +#, c-format +msgid " -q, --quiet don't write any messages\n" +msgstr " -q, --quiet 不写任何信息\n" + +#: pg_amcheck.c:1190 +#, c-format +msgid " -P, --progress show progress information\n" +msgstr " -P, --progress 显示进度信息\n" + +#: pg_amcheck.c:1191 +#, c-format +msgid " -v, --verbose write a lot of output\n" +msgstr " -v, --verbose 写大量的输出\n" + +#: pg_amcheck.c:1192 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version 输出版本信息, 然后退出\n" + +#: pg_amcheck.c:1193 +#, c-format +msgid " --install-missing install missing extensions\n" +msgstr " --install-missing 安装缺少的扩展\n" + +#: pg_amcheck.c:1194 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help 显示此帮助信息, 然后退出\n" + +#: pg_amcheck.c:1196 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"臭虫报告至<%s>.\n" + +#: pg_amcheck.c:1197 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 主页: <%s>\n" + +#: pg_amcheck.c:1255 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%) %*s" +msgstr "%*s/%s 关系 (%d%%) %*s/%s 页 (%d%%) %*s" + +#: pg_amcheck.c:1266 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%), (%s%-*.*s)" +msgstr "%*s/%s 关系 (%d%%) %*s/%s 页 (%d%%), (%s%-*.*s)" + +#: pg_amcheck.c:1281 +#, c-format +msgid "%*s/%s relations (%d%%) %*s/%s pages (%d%%)" +msgstr "%*s/%s 关系 (%d%%) %*s/%s 页 (%d%%)" + +#: pg_amcheck.c:1550 pg_amcheck.c:1692 +#, c-format +msgid "including database \"%s\"" +msgstr "包含的数据库\"%s\"" + +#: pg_amcheck.c:1672 +#, c-format +msgid "internal error: received unexpected database pattern_id %d" +msgstr "内部错误:收到意外的数据库pattern_id %d" + +#: pg_amcheck.c:2126 +#, c-format +msgid "internal error: received unexpected relation pattern_id %d" +msgstr "内部错误:收到意外的关系pattern_id %d" diff --git a/src/bin/pg_archivecleanup/po/el.po b/src/bin/pg_archivecleanup/po/el.po index e074fd36ac6b4..c400e19e7b5e0 100644 --- a/src/bin/pg_archivecleanup/po/el.po +++ b/src/bin/pg_archivecleanup/po/el.po @@ -1,19 +1,20 @@ # Greek message translation file for pg_archivecleanup # Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the pg_archivecleanup (PostgreSQL) package. +# Georgios Kokolatos , 2021 # msgid "" msgstr "" "Project-Id-Version: pg_archivecleanup (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-27 06:19+0000\n" +"POT-Creation-Date: 2021-05-25 05:48+0000\n" "PO-Revision-Date: 2021-04-27 10:30+0200\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Last-Translator: Georgios Kokolatos \n" -"Language-Team: \n" "X-Generator: Poedit 2.4.2\n" #: ../../../src/common/logging.c:259 diff --git a/src/bin/pg_basebackup/po/es.po b/src/bin/pg_basebackup/po/es.po index 5cd5b955c4d5a..67c472c959927 100644 --- a/src/bin/pg_basebackup/po/es.po +++ b/src/bin/pg_basebackup/po/es.po @@ -4,22 +4,22 @@ # This file is distributed under the same license as the PostgreSQL package. # # Álvaro Herrera , 2011-2014. -# Carlos Chapi , 2017. +# Carlos Chapi , 2017-2021. # msgid "" msgstr "" "Project-Id-Version: pg_basebackup (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2021-05-14 19:46+0000\n" -"PO-Revision-Date: 2020-09-12 21:50-0300\n" -"Last-Translator: Carlos Chapi \n" +"PO-Revision-Date: 2021-05-20 21:24-0500\n" +"Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" #: ../../../src/common/logging.c:259 #, c-format @@ -840,10 +840,9 @@ msgstr "la opcón %s necesita que se especifique un slot con --slot" #: pg_basebackup.c:2526 pg_basebackup.c:2565 pg_basebackup.c:2574 #: pg_basebackup.c:2583 -#, fuzzy, c-format -#| msgid "--create-slot and --no-slot are incompatible options" +#, c-format msgid "%s and %s are incompatible options" -msgstr "--create-slot y --no-slot son opciones incompatibles" +msgstr "%s y %s son opciones incompatibles" #: pg_basebackup.c:2538 #, c-format @@ -978,10 +977,9 @@ msgid "could not close directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" #: pg_receivewal.c:272 -#, fuzzy, c-format -#| msgid "segment file \"%s\" has incorrect size %d, skipping" +#, c-format msgid "segment file \"%s\" has incorrect size %lld, skipping" -msgstr "el archivo de segmento «%s» tiene tamaño incorrecto %d, ignorando" +msgstr "el archivo de segmento «%s» tiene tamaño incorrecto %lld, ignorando" #: pg_receivewal.c:290 #, c-format @@ -1158,10 +1156,9 @@ msgid "invalid socket: %s" msgstr "el socket no es válido: %s" #: pg_recvlogical.c:414 receivelog.c:900 -#, fuzzy, c-format -#| msgid "%s failed: %m" +#, c-format msgid "%s() failed: %m" -msgstr "%s falló: %m" +msgstr "%s() falló: %m" #: pg_recvlogical.c:421 receivelog.c:950 #, c-format diff --git a/src/bin/pg_checksums/po/el.po b/src/bin/pg_checksums/po/el.po index fa7d7c43b05bb..cb72eabcbece3 100644 --- a/src/bin/pg_checksums/po/el.po +++ b/src/bin/pg_checksums/po/el.po @@ -1,19 +1,20 @@ # Greek message translation file for pg_checksums # Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the pg_checksums (PostgreSQL) package. +# Georgios Kokolatos , 2021 # msgid "" msgstr "" "Project-Id-Version: pg_checksums (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-28 04:19+0000\n" +"POT-Creation-Date: 2021-05-25 05:49+0000\n" "PO-Revision-Date: 2021-04-28 11:54+0200\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Last-Translator: Georgios Kokolatos \n" -"Language-Team: \n" "X-Generator: Poedit 2.4.2\n" #: ../../../src/common/logging.c:259 diff --git a/src/bin/pg_checksums/po/es.po b/src/bin/pg_checksums/po/es.po index 58ca132583555..3b7e35c8cd078 100644 --- a/src/bin/pg_checksums/po/es.po +++ b/src/bin/pg_checksums/po/es.po @@ -4,20 +4,21 @@ # # This file is distributed under the same license as the pg_checksums (PostgreSQL) package. # Álvaro Herrera , 2019. +# Carlos Chapi , 2021. # msgid "" msgstr "" "Project-Id-Version: pg_checksums (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2021-05-14 19:49+0000\n" -"PO-Revision-Date: 2020-09-12 10:54-0500\n" -"Last-Translator: Álvaro Herrera \n" +"PO-Revision-Date: 2021-05-20 21:25-0500\n" +"Last-Translator: Carlos Chapi \n" "Language-Team: pgsql-es-ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" #: ../../../src/common/logging.c:259 #, c-format @@ -286,10 +287,9 @@ msgid "Bad checksums: %s\n" msgstr "Checksums incorrectos: %s\n" #: pg_checksums.c:645 pg_checksums.c:672 -#, fuzzy, c-format -#| msgid "Data checksum version: %d\n" +#, c-format msgid "Data checksum version: %u\n" -msgstr "Versión de checksums de datos: %d\n" +msgstr "Versión de checksums de datos: %u\n" #: pg_checksums.c:664 #, c-format diff --git a/src/bin/pg_config/po/el.po b/src/bin/pg_config/po/el.po index f0ccd82bc7096..d17d2b999b77b 100644 --- a/src/bin/pg_config/po/el.po +++ b/src/bin/pg_config/po/el.po @@ -1,19 +1,20 @@ # Greek message translation file for pg_config # Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the pg_config (PostgreSQL) package. +# Georgios Kokolatos , 2021 # msgid "" msgstr "" "Project-Id-Version: pg_config (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-04 10:46+0000\n" +"POT-Creation-Date: 2021-05-25 05:46+0000\n" "PO-Revision-Date: 2021-05-04 14:33+0200\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Last-Translator: Georgios Kokolatos \n" -"Language-Team: \n" "X-Generator: Poedit 2.4.3\n" #: ../../common/config_info.c:134 ../../common/config_info.c:142 diff --git a/src/bin/pg_config/po/es.po b/src/bin/pg_config/po/es.po index ee5876d59c96a..d5aa1cf07d34b 100644 --- a/src/bin/pg_config/po/es.po +++ b/src/bin/pg_config/po/es.po @@ -4,20 +4,21 @@ # This file is distributed under the same license as the PostgreSQL package. # # Alvaro Herrera , 2004-2013 +# Carlos Chapi , 2021 # msgid "" msgstr "" "Project-Id-Version: pg_config (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2021-05-14 19:46+0000\n" -"PO-Revision-Date: 2020-09-12 22:54-0300\n" -"Last-Translator: Carlos Chapi \n" +"PO-Revision-Date: 2021-05-20 23:11-0500\n" +"Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.7\n" +"X-Generator: Poedit 2.4.2\n" #: ../../common/config_info.c:134 ../../common/config_info.c:142 #: ../../common/config_info.c:150 ../../common/config_info.c:158 @@ -57,10 +58,9 @@ msgid "could not read symbolic link \"%s\": %m" msgstr "no se pudo leer el enlace simbólico «%s»: %m" #: ../../common/exec.c:409 -#, fuzzy, c-format -#| msgid "%s failed: %m" +#, c-format msgid "%s() failed: %m" -msgstr "%s falló: %m" +msgstr "%s() falló: %m" #: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" diff --git a/src/bin/pg_controldata/nls.mk b/src/bin/pg_controldata/nls.mk index 8f6b6757b74e2..5c0e33e91a1d6 100644 --- a/src/bin/pg_controldata/nls.mk +++ b/src/bin/pg_controldata/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_controldata/nls.mk CATALOG_NAME = pg_controldata -AVAIL_LANGUAGES = cs de es fr it ja ko pl pt_BR ru sv tr uk vi zh_CN +AVAIL_LANGUAGES = cs de el es fr it ja ko pl pt_BR ru sv tr uk vi zh_CN GETTEXT_FILES = pg_controldata.c ../../common/controldata_utils.c GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) diff --git a/src/bin/pg_controldata/po/el.po b/src/bin/pg_controldata/po/el.po new file mode 100644 index 0000000000000..12bbb0556b49a --- /dev/null +++ b/src/bin/pg_controldata/po/el.po @@ -0,0 +1,521 @@ +# Greek message translation file for pg_controldata +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_controldata (PostgreSQL) package. +# Georgios Kokolatos , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_controldata (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-05-26 00:19+0000\n" +"PO-Revision-Date: 2021-05-31 11:02+0200\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" +"X-Generator: Poedit 2.4.3\n" + +#: ../../common/controldata_utils.c:73 +#, c-format +msgid "could not open file \"%s\" for reading: %m" +msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου “%s” για ανάγνωση: %m" + +#: ../../common/controldata_utils.c:89 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση του αρχείου \"%s\": %m" + +#: ../../common/controldata_utils.c:101 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "δεν ήταν δυνατή η ανάγνωση του αρχείου \"%s\": ανέγνωσε %d από %zu" + +#: ../../common/controldata_utils.c:117 ../../common/controldata_utils.c:259 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "δεν ήταν δυνατό το κλείσιμο του αρχείου “%s”: %m" + +#: ../../common/controldata_utils.c:135 +msgid "byte ordering mismatch" +msgstr "αναντιστοιχία διάταξης byte" + +#: ../../common/controldata_utils.c:137 +#, c-format +msgid "" +"possible byte ordering mismatch\n" +"The byte ordering used to store the pg_control file might not match the one\n" +"used by this program. In that case the results below would be incorrect, and\n" +"the PostgreSQL installation would be incompatible with this data directory." +msgstr "" +"πιθανή αναντιστοιχία διάταξης byte\n" +"Η διάταξη byte που χρησιμοποιείται για την αποθήκευση του αρχείου pg_control " +"ενδέχεται να μην ταιριάζει με αυτήν\n" +"που χρησιμοποιείται από αυτό το πρόγραμμα. Στην περίπτωση αυτή, τα παρακάτω " +"αποτελέσματα θα ήταν εσφαλμένα, και\n" +"η εγκατάσταση PostgreSQL θα ήταν ασύμβατη με αυτόν τον κατάλογο δεδομένων." + +#: ../../common/controldata_utils.c:203 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου “%s”: %m" + +#: ../../common/controldata_utils.c:224 +#, c-format +msgid "could not write file \"%s\": %m" +msgstr "δεν ήταν δυνατή η εγγραφή αρχείου “%s”: %m" + +#: ../../common/controldata_utils.c:245 +#, c-format +msgid "could not fsync file \"%s\": %m" +msgstr "δεν ήταν δυνατή η εκτέλεση της εντολής fsync στο αρχείο “%s”: %m" + +#: pg_controldata.c:35 +#, c-format +msgid "" +"%s displays control information of a PostgreSQL database cluster.\n" +"\n" +msgstr "" +"%s εμφανίζει πληροφορίες ελέγχου μίας συστάδας βάσεων δεδομένων PostgreSQL.\n" +"\n" + +#: pg_controldata.c:36 +#, c-format +msgid "Usage:\n" +msgstr "Χρήση:\n" + +#: pg_controldata.c:37 +#, c-format +msgid " %s [OPTION] [DATADIR]\n" +msgstr " %s [OPTION] [DATADIR]\n" + +#: pg_controldata.c:38 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Επιλογές:\n" + +#: pg_controldata.c:39 +#, c-format +msgid " [-D, --pgdata=]DATADIR data directory\n" +msgstr " [-D, —pgdata=]DATADIR κατάλογος δεδομένων\n" + +#: pg_controldata.c:40 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, —version εμφάνισε πληροφορίες έκδοσης, στη συνέχεια έξοδος\n" + +#: pg_controldata.c:41 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, μετά έξοδος\n" + +#: pg_controldata.c:42 +#, c-format +msgid "" +"\n" +"If no data directory (DATADIR) is specified, the environment variable PGDATA\n" +"is used.\n" +"\n" +msgstr "" +"\n" +"Εάν δεν έχει καθοριστεί κατάλογος δεδομένων (DATADIR), χρησιμοποιείται η\n" +"μεταβλητή περιβάλλοντος PGDATA.\n" +"\n" + +#: pg_controldata.c:44 +#, c-format +msgid "Report bugs to <%s>.\n" +msgstr "Υποβάλετε αναφορές σφάλματων σε <%s>.\n" + +#: pg_controldata.c:45 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s αρχική σελίδα: <%s>\n" + +#: pg_controldata.c:55 +msgid "starting up" +msgstr "εκκίνηση" + +#: pg_controldata.c:57 +msgid "shut down" +msgstr "τερματισμός" + +#: pg_controldata.c:59 +msgid "shut down in recovery" +msgstr "τερματισμός σε αποκατάσταση" + +#: pg_controldata.c:61 +msgid "shutting down" +msgstr "τερματίζει" + +#: pg_controldata.c:63 +msgid "in crash recovery" +msgstr "σε αποκατάσταση από κρασάρισμα" + +#: pg_controldata.c:65 +msgid "in archive recovery" +msgstr "σε αποκατάσταση αρχειοθήκης" + +#: pg_controldata.c:67 +msgid "in production" +msgstr "στην παραγωγή" + +#: pg_controldata.c:69 +msgid "unrecognized status code" +msgstr "μη αναγνωρίσιμος κωδικός κατάστασης" + +#: pg_controldata.c:84 +msgid "unrecognized wal_level" +msgstr "μη αναγνωρίσιμο wal_level" + +#: pg_controldata.c:137 pg_controldata.c:155 pg_controldata.c:163 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" + +#: pg_controldata.c:153 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (ο πρώτη είναι η “%s”)" + +#: pg_controldata.c:162 +#, c-format +msgid "no data directory specified" +msgstr "δεν ορίστηκε κατάλογος δεδομένων" + +#: pg_controldata.c:170 +#, c-format +msgid "" +"WARNING: Calculated CRC checksum does not match value stored in file.\n" +"Either the file is corrupt, or it has a different layout than this program\n" +"is expecting. The results below are untrustworthy.\n" +"\n" +msgstr "" +"ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Το υπολογιζόμενο άθροισμα ελέγχου CRC δεν συμφωνεί με την τιμή που " +"είναι αποθηκευμένη στο αρχείο.\n" +"Είτε το αρχείο είναι αλλοιωμένο είτε έχει διαφορετική διάταξη από αυτή που " +"περιμένει\n" +"αυτό το πρόγραμμα. Τα παρακάτω αποτελέσματα είναι αναξιόπιστα.\n" +"\n" + +#: pg_controldata.c:179 +#, c-format +msgid "WARNING: invalid WAL segment size\n" +msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: μη έγκυρο μέγεθος τμήματος WAL\n" + +#: pg_controldata.c:180 +#, c-format +msgid "" +"The WAL segment size stored in the file, %d byte, is not a power of two\n" +"between 1 MB and 1 GB. The file is corrupt and the results below are\n" +"untrustworthy.\n" +"\n" +msgid_plural "" +"The WAL segment size stored in the file, %d bytes, is not a power of two\n" +"between 1 MB and 1 GB. The file is corrupt and the results below are\n" +"untrustworthy.\n" +"\n" +msgstr[0] "" +"Το μέγεθος τμήματος WAL που είναι αποθηκευμένο στο αρχείο, %d byte, δεν είναι " +"δύναμη\n" +"του δύο μεταξύ 1 MB και 1 GB. Το αρχείο είναι αλλοιωμένο και τα παρακάτω " +"αποτελέσματα\n" +"είναι αναξιόπιστα.\n" +"\n" +msgstr[1] "" +"Το μέγεθος τμήματος WAL που είναι αποθηκευμένο στο αρχείο, %d bytes, δεν είναι " +"δύναμη\n" +"του δύο μεταξύ 1 MB και 1 GB. Το αρχείο είναι αλλοιωμένο και τα παρακάτω " +"αποτελέσματα\n" +"είναι αναξιόπιστα.\n" +"\n" + +#: pg_controldata.c:222 +msgid "???" +msgstr "???" + +#: pg_controldata.c:228 +#, c-format +msgid "pg_control version number: %u\n" +msgstr "" +"pg_control αριθμός έκδοσης: %u\n" +"\n" + +#: pg_controldata.c:230 +#, c-format +msgid "Catalog version number: %u\n" +msgstr "Αριθμός έκδοσης καταλόγου: %u\n" + +#: pg_controldata.c:232 +#, c-format +msgid "Database system identifier: %llu\n" +msgstr "Αναγνωριστικό συστήματος βάσης δεδομένων: %llu\n" + +#: pg_controldata.c:234 +#, c-format +msgid "Database cluster state: %s\n" +msgstr "Κατάσταση συστάδας βάσης δεδομένων: %s\n" + +#: pg_controldata.c:236 +#, c-format +msgid "pg_control last modified: %s\n" +msgstr "πιο πρόσφατη μετατροπή pg_control: %s\n" + +#: pg_controldata.c:238 +#, c-format +msgid "Latest checkpoint location: %X/%X\n" +msgstr "Πιο πρόσφατη τοποθεσία σημείου ελέγχου: %X/%X\n" + +#: pg_controldata.c:240 +#, c-format +msgid "Latest checkpoint's REDO location: %X/%X\n" +msgstr "Πιο πρόσφατη τοποθεσία REDO του σημείου ελέγχου: %X/%X\n" + +#: pg_controldata.c:242 +#, c-format +msgid "Latest checkpoint's REDO WAL file: %s\n" +msgstr "Πιο πρόσφατο αρχείο REDO WAL του σημείου ελέγχου: %s\n" + +#: pg_controldata.c:244 +#, c-format +msgid "Latest checkpoint's TimeLineID: %u\n" +msgstr "Πιο πρόσφατο TimeLineID του σημείου ελέγχου: %u\n" + +#: pg_controldata.c:246 +#, c-format +msgid "Latest checkpoint's PrevTimeLineID: %u\n" +msgstr "Πιο πρόσφατο PrevTimeLineID του σημείου ελέγχου: %u\n" + +#: pg_controldata.c:248 +#, c-format +msgid "Latest checkpoint's full_page_writes: %s\n" +msgstr "Πιο πρόσφατο full_page_writes του σημείου ελέγχου: %s\n" + +#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +msgid "off" +msgstr "κλειστό" + +#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +msgid "on" +msgstr "ανοικτό" + +#: pg_controldata.c:250 +#, c-format +msgid "Latest checkpoint's NextXID: %u:%u\n" +msgstr "Πιο πρόσφατο NextXID του σημείου ελέγχου: %u:%u\n" + +#: pg_controldata.c:253 +#, c-format +msgid "Latest checkpoint's NextOID: %u\n" +msgstr "Πιο πρόσφατο NextOID του σημείου ελέγχου: %u\n" + +#: pg_controldata.c:255 +#, c-format +msgid "Latest checkpoint's NextMultiXactId: %u\n" +msgstr "Πιο πρόσφατο NextMultiXactId του σημείου ελέγχου: %u\n" + +#: pg_controldata.c:257 +#, c-format +msgid "Latest checkpoint's NextMultiOffset: %u\n" +msgstr "Πιο πρόσφατο NextMultiOffset του σημείου ελέγχου: %u\n" + +#: pg_controldata.c:259 +#, c-format +msgid "Latest checkpoint's oldestXID: %u\n" +msgstr "Πιο πρόσφατο oldestXID του σημείου ελέγχου: %u\n" + +#: pg_controldata.c:261 +#, c-format +msgid "Latest checkpoint's oldestXID's DB: %u\n" +msgstr "Πιο πρόσφατο oldestXID’s DB του σημείου ελέγχου: %u\n" + +#: pg_controldata.c:263 +#, c-format +msgid "Latest checkpoint's oldestActiveXID: %u\n" +msgstr "Πιο πρόσφατο oldestActiveXID του σημείου ελέγχου: %u\n" + +#: pg_controldata.c:265 +#, c-format +msgid "Latest checkpoint's oldestMultiXid: %u\n" +msgstr "Πιο πρόσφατο oldestMultiXid του σημείου ελέγχου: %u\n" + +#: pg_controldata.c:267 +#, c-format +msgid "Latest checkpoint's oldestMulti's DB: %u\n" +msgstr "Πιο πρόσφατο oldestMulti’s DB του σημείου ελέγχου: %u\n" + +#: pg_controldata.c:269 +#, c-format +msgid "Latest checkpoint's oldestCommitTsXid:%u\n" +msgstr "Πιο πρόσφατο oldestCommitTsXid του σημείου ελέγχου: %u\n" + +#: pg_controldata.c:271 +#, c-format +msgid "Latest checkpoint's newestCommitTsXid:%u\n" +msgstr "Πιο πρόσφατο newestCommitTsXid του σημείου ελέγχου: %u\n" + +#: pg_controldata.c:273 +#, c-format +msgid "Time of latest checkpoint: %s\n" +msgstr "Ώρα του πιο πρόσφατου σημείου ελέγχου: %s\n" + +#: pg_controldata.c:275 +#, c-format +msgid "Fake LSN counter for unlogged rels: %X/%X\n" +msgstr "Ψεύτικος μετρητής LSN για μη κενές rels: %X/%X\n" + +#: pg_controldata.c:277 +#, c-format +msgid "Minimum recovery ending location: %X/%X\n" +msgstr "Ελάχιστη τοποθεσία τερματισμού ανάκαμψης: %X/%X\n" + +#: pg_controldata.c:279 +#, c-format +msgid "Min recovery ending loc's timeline: %u\n" +msgstr "Χρονογραμμή ελάχιστης τοποθεσίας τερματισμού ανάκαμψης: %u\n" + +#: pg_controldata.c:281 +#, c-format +msgid "Backup start location: %X/%X\n" +msgstr "Τοποθεσία εκκίνησης Backup: %X/%X\n" + +#: pg_controldata.c:283 +#, c-format +msgid "Backup end location: %X/%X\n" +msgstr "Τοποθεσία τερματισμου Backup: %X/%X\n" + +#: pg_controldata.c:285 +#, c-format +msgid "End-of-backup record required: %s\n" +msgstr "Απαιτείται εγγραφή end-of-backup: %s\n" + +#: pg_controldata.c:286 +msgid "no" +msgstr "όχι" + +#: pg_controldata.c:286 +msgid "yes" +msgstr "ναι" + +#: pg_controldata.c:287 +#, c-format +msgid "wal_level setting: %s\n" +msgstr "ρύθμιση wal_level: %s\n" + +#: pg_controldata.c:289 +#, c-format +msgid "wal_log_hints setting: %s\n" +msgstr "ρύθμιση wal_log_hints: %s\n" + +#: pg_controldata.c:291 +#, c-format +msgid "max_connections setting: %d\n" +msgstr "ρύθμιση max_connections: %d\n" + +#: pg_controldata.c:293 +#, c-format +msgid "max_worker_processes setting: %d\n" +msgstr "ρύθμιση max_worker_processes: %d\n" + +#: pg_controldata.c:295 +#, c-format +msgid "max_wal_senders setting: %d\n" +msgstr "ρύθμιση max_wal_senders: %d\n" + +#: pg_controldata.c:297 +#, c-format +msgid "max_prepared_xacts setting: %d\n" +msgstr "ρύθμιση max_prepared_xacts: %d\n" + +#: pg_controldata.c:299 +#, c-format +msgid "max_locks_per_xact setting: %d\n" +msgstr "ρύθμιση max_locks_per_xact: %d\n" + +#: pg_controldata.c:301 +#, c-format +msgid "track_commit_timestamp setting: %s\n" +msgstr "ρύθμιση track_commit_timestamp: %s\n" + +#: pg_controldata.c:303 +#, c-format +msgid "Maximum data alignment: %u\n" +msgstr "Μέγιστη στοίχιση δεδομένων: %u\n" + +#: pg_controldata.c:306 +#, c-format +msgid "Database block size: %u\n" +msgstr "Μέγεθος μπλοκ βάσης δεδομένων: %u\n" + +#: pg_controldata.c:308 +#, c-format +msgid "Blocks per segment of large relation: %u\n" +msgstr "Μπλοκ ανά τμήμα μεγάλης σχέσης: %u\n" + +#: pg_controldata.c:310 +#, c-format +msgid "WAL block size: %u\n" +msgstr "Μέγεθος μπλοκ WAL: %u\n" + +#: pg_controldata.c:312 +#, c-format +msgid "Bytes per WAL segment: %u\n" +msgstr "Bytes ανά τμήμα WAL: %u\n" + +#: pg_controldata.c:314 +#, c-format +msgid "Maximum length of identifiers: %u\n" +msgstr "Μέγιστο μήκος αναγνωριστικών: %u\n" + +#: pg_controldata.c:316 +#, c-format +msgid "Maximum columns in an index: %u\n" +msgstr "Μέγιστες στήλες σε ένα ευρετήριο: %u\n" + +#: pg_controldata.c:318 +#, c-format +msgid "Maximum size of a TOAST chunk: %u\n" +msgstr "Μέγιστο μέγεθος ενός τμήματος TOAST: %u\n" + +#: pg_controldata.c:320 +#, c-format +msgid "Size of a large-object chunk: %u\n" +msgstr "Μέγεθος τμήματος μεγάλου αντικειμένου: %u\n" + +#: pg_controldata.c:323 +#, c-format +msgid "Date/time type storage: %s\n" +msgstr "Τύπος αποθήκευσης ημερομηνίας/ώρας: %s\n" + +#: pg_controldata.c:324 +msgid "64-bit integers" +msgstr "Ακέραιοι 64-bit" + +#: pg_controldata.c:325 +#, c-format +msgid "Float8 argument passing: %s\n" +msgstr "Μεταβλητή Float8 τέθηκε: %s\n" + +#: pg_controldata.c:326 +msgid "by reference" +msgstr "με αναφορά" + +#: pg_controldata.c:326 +msgid "by value" +msgstr "με τιμή" + +#: pg_controldata.c:327 +#, c-format +msgid "Data page checksum version: %u\n" +msgstr "Έκδοση αθροίσματος ελέγχου σελίδας δεδομένων: %u\n" + +#: pg_controldata.c:329 +#, c-format +msgid "Mock authentication nonce: %s\n" +msgstr "Μακέτα (mock) nonce ταυτοποίησης: %s\n" diff --git a/src/bin/pg_ctl/po/el.po b/src/bin/pg_ctl/po/el.po index a6fda2f21928f..b34c73ae7a559 100644 --- a/src/bin/pg_ctl/po/el.po +++ b/src/bin/pg_ctl/po/el.po @@ -1,58 +1,59 @@ # Greek message translation file for pg_ctl # Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the pg_ctl (PostgreSQL) package. +# Georgios Kokolatos , 2021 # msgid "" msgstr "" "Project-Id-Version: pg_ctl (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-03-23 18:45+0000\n" +"POT-Creation-Date: 2021-05-25 05:46+0000\n" "PO-Revision-Date: 2021-03-30 10:28+0200\n" +"Last-Translator: Georgios Kokolatos \n" "Language-Team: \n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.4.2\n" -"Last-Translator: Georgios Kokolatos \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Language: el\n" -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "δεν ήταν δυνατή η αναγνώριση του τρέχοντος καταλόγου: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "μη έγκυρο δυαδικό αρχείο “%s”" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "δεν ήταν δυνατή η ανάγνωση του δυαδικού αρχείου “%s”" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "δεν βρέθηκε το αρχείο “%s” για να εκτελεστεί" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "δεν ήταν δυνατή η μετάβαση στον κατάλογο “%s”: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "δεν ήταν δυνατή η ανάγνωση του συμβολικού συνδέσμου “%s”: %m" -#: ../../common/exec.c:410 +#: ../../common/exec.c:409 #, c-format -msgid "pclose failed: %m" -msgstr "απέτυχε η εντολή pclose: %m" +msgid "%s() failed: %m" +msgstr "%s () απέτυχε: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" msgstr "έλλειψη μνήμης" @@ -101,8 +102,7 @@ msgstr "απόγονος διεργασίας τερμάτισε με μη αν #: ../../port/path.c:654 #, c-format msgid "could not get current working directory: %s\n" -msgstr "" -"δεν ήταν δυνατή η επεξεργασία του τρέχοντος καταλόγου εργασίας: %s\n" +msgstr "δεν ήταν δυνατή η επεξεργασία του τρέχοντος καταλόγου εργασίας: %s\n" #: pg_ctl.c:258 #, c-format @@ -117,8 +117,7 @@ msgstr "%s: δεν ήταν δυνατή η πρόσβαση στον κατάλ #: pg_ctl.c:274 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" -msgstr "" -"%s: ο κατάλογος \"%s\" δεν είναι κατάλογος συστάδας βάσης δεδομένων\n" +msgstr "%s: ο κατάλογος \"%s\" δεν είναι κατάλογος συστάδας βάσης δεδομένων\n" #: pg_ctl.c:287 #, c-format @@ -143,9 +142,7 @@ msgstr "%s: δεν μπόρεσε να εκκινήσει τον διακομι #: pg_ctl.c:478 #, c-format msgid "%s: could not start server due to setsid() failure: %s\n" -msgstr "" -"%s: δεν ήταν δυνατή η εκκίνηση του διακομιστή λόγω αποτυχίας του " -"setsid(): %s\n" +msgstr "%s: δεν ήταν δυνατή η εκκίνηση του διακομιστή λόγω αποτυχίας του setsid(): %s\n" #: pg_ctl.c:548 #, c-format @@ -155,15 +152,12 @@ msgstr "%s: δεν ήταν δυνατό το άνοιγμα του αρχείο #: pg_ctl.c:565 #, c-format msgid "%s: could not start server: error code %lu\n" -msgstr "" -"%s: δεν ήταν δυνατή η εκκίνηση διακομιστή: κωδικός σφάλματος %lu\n" +msgstr "%s: δεν ήταν δυνατή η εκκίνηση διακομιστή: κωδικός σφάλματος %lu\n" #: pg_ctl.c:712 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" -msgstr "" -"%s: δεν είναι δυνατός ο ορισμός ορίου μεγέθους αρχείου πυρήνα· " -"απαγορεύεται από το σκληρό όριο\n" +msgstr "%s: δεν είναι δυνατός ο ορισμός ορίου μεγέθους αρχείου πυρήνα· απαγορεύεται από το σκληρό όριο\n" #: pg_ctl.c:738 #, c-format @@ -175,7 +169,7 @@ msgstr "%s: δεν ήταν δυνατή η ανάγνωση αρχείου “% msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: το αρχείο επιλογής \"%s\" πρέπει να έχει ακριβώς μία γραμμή\n" -#: pg_ctl.c:785 pg_ctl.c:975 pg_ctl.c:1071 +#: pg_ctl.c:785 pg_ctl.c:974 pg_ctl.c:1070 #, c-format msgid "%s: could not send stop signal (PID: %ld): %s\n" msgstr "%s: δεν ήταν δυνατή η αποστολή σήματος διακοπής (PID: %ld): %s\n" @@ -209,34 +203,31 @@ msgstr "%s: αρχικοποίηση του συστήματος βάσης δε #: pg_ctl.c:866 #, c-format -msgid "" -"%s: another server might be running; trying to start server anyway\n" -msgstr "" -"%s: ενδέχεται να εκτελείται ένας άλλος διακομιστής· γίνεται προσπάθεια " -"εκκίνησης του διακομιστή ούτως ή άλλως\n" +msgid "%s: another server might be running; trying to start server anyway\n" +msgstr "%s: ενδέχεται να εκτελείται ένας άλλος διακομιστής· γίνεται προσπάθεια εκκίνησης του διακομιστή ούτως ή άλλως\n" -#: pg_ctl.c:915 +#: pg_ctl.c:914 msgid "waiting for server to start..." msgstr "αναμονή για την εκκίνηση του διακομιστή..." -#: pg_ctl.c:920 pg_ctl.c:1025 pg_ctl.c:1117 pg_ctl.c:1247 +#: pg_ctl.c:919 pg_ctl.c:1024 pg_ctl.c:1116 pg_ctl.c:1241 msgid " done\n" msgstr " ολοκλήρωση\n" -#: pg_ctl.c:921 +#: pg_ctl.c:920 msgid "server started\n" msgstr "ο διακομιστής ξεκίνησε\n" -#: pg_ctl.c:924 pg_ctl.c:930 pg_ctl.c:1252 +#: pg_ctl.c:923 pg_ctl.c:929 pg_ctl.c:1246 msgid " stopped waiting\n" msgstr " διακοπή αναμονής\n" -#: pg_ctl.c:925 +#: pg_ctl.c:924 #, c-format msgid "%s: server did not start in time\n" msgstr "%s: ο διακομιστής δεν ξεκίνησε εγκαίρως\n" -#: pg_ctl.c:931 +#: pg_ctl.c:930 #, c-format msgid "" "%s: could not start server\n" @@ -245,378 +236,317 @@ msgstr "" "%s: δεν ήταν δυνατή η εκκίνηση του διακομιστή\n" "Εξετάστε την έξοδο του αρχείου καταγραφής.\n" -#: pg_ctl.c:939 +#: pg_ctl.c:938 msgid "server starting\n" msgstr "εκκίνηση διακομιστή\n" -#: pg_ctl.c:960 pg_ctl.c:1047 pg_ctl.c:1138 pg_ctl.c:1177 pg_ctl.c:1276 +#: pg_ctl.c:959 pg_ctl.c:1046 pg_ctl.c:1137 pg_ctl.c:1176 pg_ctl.c:1270 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: το αρχείο PID “%s” δεν υπάρχει\n" -#: pg_ctl.c:961 pg_ctl.c:1049 pg_ctl.c:1139 pg_ctl.c:1178 pg_ctl.c:1277 +#: pg_ctl.c:960 pg_ctl.c:1048 pg_ctl.c:1138 pg_ctl.c:1177 pg_ctl.c:1271 msgid "Is server running?\n" msgstr "Εκτελείται ο διακομιστής;\n" -#: pg_ctl.c:967 +#: pg_ctl.c:966 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" -msgstr "" -"%s: δεν είναι δυνατή η διακοπή του διακομιστή· εκτελείται διακομιστής " -"μοναδικού-χρήστη (PID: %ld)\n" +msgstr "%s: δεν είναι δυνατή η διακοπή του διακομιστή· εκτελείται διακομιστής μοναδικού-χρήστη (PID: %ld)\n" -#: pg_ctl.c:982 +#: pg_ctl.c:981 msgid "server shutting down\n" msgstr "τερματισμός λειτουργίας διακομιστή\n" -#: pg_ctl.c:997 pg_ctl.c:1086 +#: pg_ctl.c:996 pg_ctl.c:1085 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" "\n" msgstr "" -"WARNING: Η λειτουργία δημιουργίας αντιγράφων ασφαλείας σε απευθείας " -"σύνδεση είναι ενεργή\n" -"Ο τερματισμός λειτουργίας δεν θα ολοκληρωθεί μέχρι να κληθεί " -"pg_stop_backup().\n" +"WARNING: Η λειτουργία δημιουργίας αντιγράφων ασφαλείας σε απευθείας σύνδεση είναι ενεργή\n" +"Ο τερματισμός λειτουργίας δεν θα ολοκληρωθεί μέχρι να κληθεί pg_stop_backup().\n" "\n" -#: pg_ctl.c:1001 pg_ctl.c:1090 +#: pg_ctl.c:1000 pg_ctl.c:1089 msgid "waiting for server to shut down..." msgstr "αναμονή για τερματισμό λειτουργίας του διακομιστή..." -#: pg_ctl.c:1017 pg_ctl.c:1108 +#: pg_ctl.c:1016 pg_ctl.c:1107 msgid " failed\n" msgstr " απέτυχε.\n" -#: pg_ctl.c:1019 pg_ctl.c:1110 +#: pg_ctl.c:1018 pg_ctl.c:1109 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: ο διακομιστής δεν τερματίζεται\n" -#: pg_ctl.c:1021 pg_ctl.c:1112 +#: pg_ctl.c:1020 pg_ctl.c:1111 msgid "" -"HINT: The \"-m fast\" option immediately disconnects sessions rather " -"than\n" +"HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" msgstr "" "HINT: Η επιλογή \"-m fast\" αποσυνδέει αμέσως τις συνεδρίες αντί\n" "να αναμένει για εκ’ συνεδρίας εκκινούμενη αποσύνδεση.\n" -#: pg_ctl.c:1027 pg_ctl.c:1118 +#: pg_ctl.c:1026 pg_ctl.c:1117 msgid "server stopped\n" msgstr "ο διακομιστής διακόπηκε\n" -#: pg_ctl.c:1050 +#: pg_ctl.c:1049 msgid "trying to start server anyway\n" msgstr "προσπάθεια εκκίνησης του διακομιστή ούτως ή άλλως\n" -#: pg_ctl.c:1059 +#: pg_ctl.c:1058 #, c-format -msgid "" -"%s: cannot restart server; single-user server is running (PID: %ld)\n" -msgstr "" -"%s: δεν είναι δυνατή η επανεκκίνηση του διακομιστή· εκτελείται " -"διακομιστής μοναδικού-χρήστη (PID: %ld)\n" +msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" +msgstr "%s: δεν είναι δυνατή η επανεκκίνηση του διακομιστή· εκτελείται διακομιστής μοναδικού-χρήστη (PID: %ld)\n" -#: pg_ctl.c:1062 pg_ctl.c:1148 +#: pg_ctl.c:1061 pg_ctl.c:1147 msgid "Please terminate the single-user server and try again.\n" msgstr "Τερματίστε το διακομιστή μοναδικού-χρήστη και προσπαθήστε ξανά.\n" -#: pg_ctl.c:1122 +#: pg_ctl.c:1121 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" -msgstr "" -"%s: παλεά διαδικασία διακομιστή (PID: %ld) φαίνεται να έχει χαθεί\n" +msgstr "%s: παλεά διαδικασία διακομιστή (PID: %ld) φαίνεται να έχει χαθεί\n" -#: pg_ctl.c:1124 +#: pg_ctl.c:1123 msgid "starting server anyway\n" msgstr "εκκίνηση του διακομιστή ούτως ή άλλως\n" -#: pg_ctl.c:1145 +#: pg_ctl.c:1144 #, c-format -msgid "" -"%s: cannot reload server; single-user server is running (PID: %ld)\n" -msgstr "" -"%s: δεν είναι δυνατή η επαναφόρτωση του διακομιστή· εκτελείται " -"διακομιστής μοναδικού-χρήστη (PID: %ld)\n" +msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" +msgstr "%s: δεν είναι δυνατή η επαναφόρτωση του διακομιστή· εκτελείται διακομιστής μοναδικού-χρήστη (PID: %ld)\n" -#: pg_ctl.c:1154 +#: pg_ctl.c:1153 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" -msgstr "" -"%s: δεν ήταν δυνατή η αποστολή σήματος επαναφόρτωσης (PID: %ld): %s\n" +msgstr "%s: δεν ήταν δυνατή η αποστολή σήματος επαναφόρτωσης (PID: %ld): %s\n" -#: pg_ctl.c:1159 +#: pg_ctl.c:1158 msgid "server signaled\n" msgstr "στάλθηκε σήμα στον διακομιστή\n" -#: pg_ctl.c:1184 +#: pg_ctl.c:1183 #, c-format -msgid "" -"%s: cannot promote server; single-user server is running (PID: %ld)\n" -msgstr "" -"%s: δεν είναι δυνατή η προβίβαση του διακομιστή· εκτελείται διακομιστής " -"μοναδικού-χρήστη (PID: %ld)\n" +msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" +msgstr "%s: δεν είναι δυνατή η προβίβαση του διακομιστή· εκτελείται διακομιστής μοναδικού-χρήστη (PID: %ld)\n" -#: pg_ctl.c:1192 +#: pg_ctl.c:1191 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" -msgstr "" -"%s: δεν είναι δυνατή η προβίβαση του διακομιστή· ο διακομιστής δεν " -"βρίσκεται σε κατάσταση αναμονής\n" +msgstr "%s: δεν είναι δυνατή η προβίβαση του διακομιστή· ο διακομιστής δεν βρίσκεται σε κατάσταση αναμονής\n" -#: pg_ctl.c:1207 +#: pg_ctl.c:1201 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" -msgstr "" -"%s: δεν ήταν δυνατή η δημιουργία του αρχείου σήματος προβιβασμού \"%s" -"\": %s\n" +msgstr "%s: δεν ήταν δυνατή η δημιουργία του αρχείου σήματος προβιβασμού \"%s\": %s\n" -#: pg_ctl.c:1213 +#: pg_ctl.c:1207 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" -msgstr "" -"%s: δεν ήταν δυνατή η εγγραφή του αρχείου σήματος προβιβασμού \"%s\": " -"%s\n" +msgstr "%s: δεν ήταν δυνατή η εγγραφή του αρχείου σήματος προβιβασμού \"%s\": %s\n" -#: pg_ctl.c:1221 +#: pg_ctl.c:1215 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" -msgstr "" -"%s: δεν ήταν δυνατή η αποστολή σήματος προβιβασμού (PID: %ld): %s\n" +msgstr "%s: δεν ήταν δυνατή η αποστολή σήματος προβιβασμού (PID: %ld): %s\n" -#: pg_ctl.c:1224 +#: pg_ctl.c:1218 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" -msgstr "" -"%s: δεν ήταν δυνατή η κατάργηση του αρχείου σήματος προβιβασμού \"%s\": " -"%s\n" +msgstr "%s: δεν ήταν δυνατή η κατάργηση του αρχείου σήματος προβιβασμού \"%s\": %s\n" -#: pg_ctl.c:1234 +#: pg_ctl.c:1228 msgid "waiting for server to promote..." msgstr "αναμονή για την προβίβαση του διακομιστή..." -#: pg_ctl.c:1248 +#: pg_ctl.c:1242 msgid "server promoted\n" msgstr "ο διακομιστής προβιβάστηκε\n" -#: pg_ctl.c:1253 +#: pg_ctl.c:1247 #, c-format msgid "%s: server did not promote in time\n" msgstr "%s: ο διακομιστής δεν προβιβάστηκε εγκαίρως\n" -#: pg_ctl.c:1259 +#: pg_ctl.c:1253 msgid "server promoting\n" msgstr "προβίβαση διακομιστή\n" -#: pg_ctl.c:1283 +#: pg_ctl.c:1277 #, c-format -msgid "" -"%s: cannot rotate log file; single-user server is running (PID: %ld)\n" -msgstr "" -"%s: δεν είναι δυνατή η περιστροφή του αρχείου καταγραφής· εκτελείται " -"διακομιστής μοναδικού-χρήστη (PID: %ld)\n" +msgid "%s: cannot rotate log file; single-user server is running (PID: %ld)\n" +msgstr "%s: δεν είναι δυνατή η περιστροφή του αρχείου καταγραφής· εκτελείται διακομιστής μοναδικού-χρήστη (PID: %ld)\n" -#: pg_ctl.c:1293 +#: pg_ctl.c:1287 #, c-format msgid "%s: could not create log rotation signal file \"%s\": %s\n" -msgstr "" -"%s: δεν ήταν δυνατή η δημιουργία αρχείου σήματος περιστροφής αρχείου " -"καταγραφής \"%s\": %s\n" +msgstr "%s: δεν ήταν δυνατή η δημιουργία αρχείου σήματος περιστροφής αρχείου καταγραφής \"%s\": %s\n" -#: pg_ctl.c:1299 +#: pg_ctl.c:1293 #, c-format msgid "%s: could not write log rotation signal file \"%s\": %s\n" -msgstr "" -"%s: δεν ήταν δυνατή η εγγραφή του αρχείου σήματος περιστροφής αρχείου " -"καταγραφής \"%s\": %s\n" +msgstr "%s: δεν ήταν δυνατή η εγγραφή του αρχείου σήματος περιστροφής αρχείου καταγραφής \"%s\": %s\n" -#: pg_ctl.c:1307 +#: pg_ctl.c:1301 #, c-format msgid "%s: could not send log rotation signal (PID: %ld): %s\n" -msgstr "" -"%s: δεν ήταν δυνατή η αποστολή σήματος περιστροφής αρχείου καταγραφής " -"(PID: %ld): %s\n" +msgstr "%s: δεν ήταν δυνατή η αποστολή σήματος περιστροφής αρχείου καταγραφής (PID: %ld): %s\n" -#: pg_ctl.c:1310 +#: pg_ctl.c:1304 #, c-format msgid "%s: could not remove log rotation signal file \"%s\": %s\n" -msgstr "" -"%s: δεν ήταν δυνατή η κατάργηση του αρχείου σήματος περιστροφής αρχείου " -"καταγραφής \"%s\": %s\n" +msgstr "%s: δεν ήταν δυνατή η κατάργηση του αρχείου σήματος περιστροφής αρχείου καταγραφής \"%s\": %s\n" -#: pg_ctl.c:1315 +#: pg_ctl.c:1309 msgid "server signaled to rotate log file\n" -msgstr "" -"ο διακομιστής έλαβε σήμα για την περιστροφή του αρχείου καταγραφής\n" +msgstr "ο διακομιστής έλαβε σήμα για την περιστροφή του αρχείου καταγραφής\n" -#: pg_ctl.c:1362 +#: pg_ctl.c:1356 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s: εκτελείται διακομιστής μοναδικού-χρήστη (PID: %ld)\n" -#: pg_ctl.c:1376 +#: pg_ctl.c:1370 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: εκτελείται διακομιστής (PID: %ld)\n" -#: pg_ctl.c:1392 +#: pg_ctl.c:1386 #, c-format msgid "%s: no server running\n" msgstr "%s: δεν εκτελείται κανένας διακομιστής\n" -#: pg_ctl.c:1409 +#: pg_ctl.c:1403 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s: δεν ήταν δυνατή η αποστολή %d σήματος (PID: %ld): %s\n" -#: pg_ctl.c:1440 +#: pg_ctl.c:1434 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: δεν ήταν δυνατή η εύρεση του ιδίου εκτελέσιμου προγράμματος\n" -#: pg_ctl.c:1450 +#: pg_ctl.c:1444 #, c-format msgid "%s: could not find postgres program executable\n" -msgstr "" -"%s: δεν ήταν δυνατή η εύρεση του εκτελέσιμου προγράμματος postgres\n" +msgstr "%s: δεν ήταν δυνατή η εύρεση του εκτελέσιμου προγράμματος postgres\n" -#: pg_ctl.c:1520 pg_ctl.c:1554 +#: pg_ctl.c:1514 pg_ctl.c:1548 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: δεν ήταν δυνατό το άνοιγμα του διαχειριστή υπηρεσιών\n" -#: pg_ctl.c:1526 +#: pg_ctl.c:1520 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: η υπηρεσία \"%s\" έχει ήδη καταχωρηθεί\n" -#: pg_ctl.c:1537 +#: pg_ctl.c:1531 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" -msgstr "" -"%s: δεν ήταν δυνατή η καταχώρηση της υπηρεσίας \"%s\": κωδικός " -"σφάλματος %lu\n" +msgstr "%s: δεν ήταν δυνατή η καταχώρηση της υπηρεσίας \"%s\": κωδικός σφάλματος %lu\n" -#: pg_ctl.c:1560 +#: pg_ctl.c:1554 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: η υπηρεσία \"%s\" δεν έχει καταχωρηθεί\n" -#: pg_ctl.c:1567 +#: pg_ctl.c:1561 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" -msgstr "" -"%s: δεν ήταν δυνατό το άνοιγμα της υπηρεσίας \"%s\": κωδικός σφάλματος " -"%lu\n" +msgstr "%s: δεν ήταν δυνατό το άνοιγμα της υπηρεσίας \"%s\": κωδικός σφάλματος %lu\n" -#: pg_ctl.c:1576 +#: pg_ctl.c:1570 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" -msgstr "" -"%s: δεν ήταν δυνατή η διαγραφή καταχώρησης της υπηρεσίας \"%s\": " -"κωδικός σφάλματος %lu\n" +msgstr "%s: δεν ήταν δυνατή η διαγραφή καταχώρησης της υπηρεσίας \"%s\": κωδικός σφάλματος %lu\n" -#: pg_ctl.c:1663 +#: pg_ctl.c:1657 msgid "Waiting for server startup...\n" msgstr "Αναμονή για εκκίνηση διακομιστή...\n" -#: pg_ctl.c:1666 +#: pg_ctl.c:1660 msgid "Timed out waiting for server startup\n" msgstr "Λήξη χρονικού ορίου αναμονής για εκκίνηση διακομιστή\n" -#: pg_ctl.c:1670 +#: pg_ctl.c:1664 msgid "Server started and accepting connections\n" msgstr "Ο διακομιστής ξεκίνησε και αποδέχτηκε συνδέσεις\n" -#: pg_ctl.c:1725 +#: pg_ctl.c:1719 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" -msgstr "" -"%s: δεν ήταν δυνατή η εκκίνηση της υπηρεσίας \"%s\": κωδικός σφάλματος " -"%lu\n" +msgstr "%s: δεν ήταν δυνατή η εκκίνηση της υπηρεσίας \"%s\": κωδικός σφάλματος %lu\n" -#: pg_ctl.c:1795 +#: pg_ctl.c:1789 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -msgstr "" -"%s: WARNING: δεν είναι δυνατή η δημιουργία περιορισμένων διακριτικών σε " -"αυτήν την πλατφόρμα\n" +msgstr "%s: WARNING: δεν είναι δυνατή η δημιουργία περιορισμένων διακριτικών σε αυτήν την πλατφόρμα\n" -#: pg_ctl.c:1808 +#: pg_ctl.c:1802 #, c-format msgid "%s: could not open process token: error code %lu\n" -msgstr "" -"%s: δεν ήταν δυνατό το άνοιγμα διακριτικού διεργασίας: κωδικός " -"σφάλματος %lu\n" +msgstr "%s: δεν ήταν δυνατό το άνοιγμα διακριτικού διεργασίας: κωδικός σφάλματος %lu\n" -#: pg_ctl.c:1822 +#: pg_ctl.c:1816 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: δεν ήταν δυνατή η εκχώρηση SIDs: κωδικός σφάλματος %lu\n" -#: pg_ctl.c:1849 +#: pg_ctl.c:1843 #, c-format msgid "%s: could not create restricted token: error code %lu\n" -msgstr "" -"%s: δεν ήταν δυνατή η δημιουργία περιορισμένου διακριτικού: κωδικός " -"σφάλματος %lu\n" +msgstr "%s: δεν ήταν δυνατή η δημιουργία περιορισμένου διακριτικού: κωδικός σφάλματος %lu\n" -#: pg_ctl.c:1880 +#: pg_ctl.c:1874 #, c-format -msgid "" -"%s: WARNING: could not locate all job object functions in system API\n" -msgstr "" -"%s: WARNING: δεν ήταν δυνατός ο εντοπισμός όλων των λειτουργιών " -"αντικειμένου εργασίας στο API συστήματος\n" +msgid "%s: WARNING: could not locate all job object functions in system API\n" +msgstr "%s: WARNING: δεν ήταν δυνατός ο εντοπισμός όλων των λειτουργιών αντικειμένου εργασίας στο API συστήματος\n" -#: pg_ctl.c:1977 +#: pg_ctl.c:1971 #, c-format msgid "%s: could not get LUIDs for privileges: error code %lu\n" -msgstr "" -"%s: δεν ήταν δυνατή η ανάκτηση LUIDs για δικαιώματα: κωδικός σφάλματος " -"%lu\n" +msgstr "%s: δεν ήταν δυνατή η ανάκτηση LUIDs για δικαιώματα: κωδικός σφάλματος %lu\n" -#: pg_ctl.c:1985 pg_ctl.c:2000 +#: pg_ctl.c:1979 pg_ctl.c:1994 #, c-format msgid "%s: could not get token information: error code %lu\n" -msgstr "" -"%s: δεν ήταν δυνατή η ανάκτηση πληροφοριών διακριτικού: κωδικός " -"σφάλματος %lu\n" +msgstr "%s: δεν ήταν δυνατή η ανάκτηση πληροφοριών διακριτικού: κωδικός σφάλματος %lu\n" -#: pg_ctl.c:1994 +#: pg_ctl.c:1988 #, c-format msgid "%s: out of memory\n" msgstr "%s: έλλειψη μνήμης\n" -#: pg_ctl.c:2024 +#: pg_ctl.c:2018 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" -#: pg_ctl.c:2032 +#: pg_ctl.c:2026 #, c-format msgid "" -"%s is a utility to initialize, start, stop, or control a PostgreSQL " -"server.\n" +"%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" "\n" msgstr "" -"%s είναι ένα βοηθητικό πρόγραμμα για την αρχικοποίηση, την εκκίνηση, τη " -"διακοπή ή τον έλεγχο ενός διακομιστή PostgreSQL.\n" +"%s είναι ένα βοηθητικό πρόγραμμα για την αρχικοποίηση, την εκκίνηση, τη διακοπή ή τον έλεγχο ενός διακομιστή PostgreSQL.\n" "\n" -#: pg_ctl.c:2033 +#: pg_ctl.c:2027 #, c-format msgid "Usage:\n" msgstr "Χρήση:\n" -#: pg_ctl.c:2034 +#: pg_ctl.c:2028 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" msgstr " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" -#: pg_ctl.c:2035 +#: pg_ctl.c:2029 #, c-format msgid "" " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" @@ -626,15 +556,14 @@ msgstr "" " [-o OPTIONS] [-p PATH] [-c]\n" "\n" -#: pg_ctl.c:2037 +#: pg_ctl.c:2031 #, c-format -msgid "" -" %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" +msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" msgstr "" " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" "\n" -#: pg_ctl.c:2038 +#: pg_ctl.c:2032 #, c-format msgid "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" @@ -643,50 +572,46 @@ msgstr "" " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" " [-o OPTIONS] [-c]\n" -#: pg_ctl.c:2040 +#: pg_ctl.c:2034 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D DATADIR] [-s]\n" -#: pg_ctl.c:2041 +#: pg_ctl.c:2035 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D DATADIR]\n" -#: pg_ctl.c:2042 +#: pg_ctl.c:2036 #, c-format msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" msgstr " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" -#: pg_ctl.c:2043 +#: pg_ctl.c:2037 #, c-format msgid " %s logrotate [-D DATADIR] [-s]\n" msgstr " %s logrotate [-D DATADIR] [-s]\n" -#: pg_ctl.c:2044 +#: pg_ctl.c:2038 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill SIGNALNAME PID\n" -#: pg_ctl.c:2046 +#: pg_ctl.c:2040 #, c-format msgid "" -" %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P " -"PASSWORD]\n" -" [-S START-TYPE] [-e SOURCE] [-W] [-t SECS] [-s] [-o " -"OPTIONS]\n" +" %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" +" [-S START-TYPE] [-e SOURCE] [-W] [-t SECS] [-s] [-o OPTIONS]\n" msgstr "" -" %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P " -"PASSWORD]\n" -" [-S START-TYPE] [-e SOURCE] [-W] [-t SECS] [-s] [-o " -"OPTIONS]\n" +" %s register [-D DATADIR] [-N SERVICENAME] [-U USERNAME] [-P PASSWORD]\n" +" [-S START-TYPE] [-e SOURCE] [-W] [-t SECS] [-s] [-o OPTIONS]\n" -#: pg_ctl.c:2048 +#: pg_ctl.c:2042 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N SERVICENAME]\n" -#: pg_ctl.c:2051 +#: pg_ctl.c:2045 #, c-format msgid "" "\n" @@ -695,75 +620,52 @@ msgstr "" "\n" "Κοινές επιλογές:\n" -#: pg_ctl.c:2052 +#: pg_ctl.c:2046 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" -msgstr "" -" [-D, —pgdata=]DATADIR τοποθεσία για τη περιοχή αποθήκευσης της " -"βάσης δεδομένων\n" +msgstr " [-D, —pgdata=]DATADIR τοποθεσία για τη περιοχή αποθήκευσης της βάσης δεδομένων\n" -#: pg_ctl.c:2054 +#: pg_ctl.c:2048 #, c-format -msgid "" -" -e SOURCE event source for logging when running as a " -"service\n" -msgstr "" -" -e SOURCE πηγή προέλευσης συμβάντων για καταγραφή κατά " -"την εκτέλεση ως υπηρεσία\n" +msgid " -e SOURCE event source for logging when running as a service\n" +msgstr " -e SOURCE πηγή προέλευσης συμβάντων για καταγραφή κατά την εκτέλεση ως υπηρεσία\n" -#: pg_ctl.c:2056 +#: pg_ctl.c:2050 #, c-format -msgid "" -" -s, --silent only print errors, no informational messages\n" -msgstr "" -" -s, —silent εκτύπωση μόνο σφαλμάτων, χωρίς ενημερωτικά " -"μηνύματα\n" +msgid " -s, --silent only print errors, no informational messages\n" +msgstr " -s, —silent εκτύπωση μόνο σφαλμάτων, χωρίς ενημερωτικά μηνύματα\n" -#: pg_ctl.c:2057 +#: pg_ctl.c:2051 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" -msgstr "" -" -t, —timeout=SECS δευτερόλεπτα αναμονής κατά τη χρήση της " -"επιλογής -w\n" +msgstr " -t, —timeout=SECS δευτερόλεπτα αναμονής κατά τη χρήση της επιλογής -w\n" -#: pg_ctl.c:2058 +#: pg_ctl.c:2052 #, c-format msgid " -V, --version output version information, then exit\n" -msgstr "" -" -V, —version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, " -"έξοδος\n" +msgstr " -V, —version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, έξοδος\n" -#: pg_ctl.c:2059 +#: pg_ctl.c:2053 #, c-format -msgid "" -" -w, --wait wait until operation completes (default)\n" -msgstr "" -" -w, —wait περίμενε μέχρι να ολοκληρωθεί η λειτουργία " -"(προεπιλογή)\n" +msgid " -w, --wait wait until operation completes (default)\n" +msgstr " -w, —wait περίμενε μέχρι να ολοκληρωθεί η λειτουργία (προεπιλογή)\n" -#: pg_ctl.c:2060 +#: pg_ctl.c:2054 #, c-format msgid " -W, --no-wait do not wait until operation completes\n" -msgstr "" -" -W, —no-wait να μην περιμένει μέχρι να ολοκληρωθεί η " -"λειτουργία\n" +msgstr " -W, —no-wait να μην περιμένει μέχρι να ολοκληρωθεί η λειτουργία\n" -#: pg_ctl.c:2061 +#: pg_ctl.c:2055 #, c-format msgid " -?, --help show this help, then exit\n" -msgstr "" -" -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, και μετά " -"έξοδος\n" +msgstr " -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, και μετά έξοδος\n" -#: pg_ctl.c:2062 +#: pg_ctl.c:2056 #, c-format -msgid "" -"If the -D option is omitted, the environment variable PGDATA is used.\n" -msgstr "" -"Εάν παραλειφθεί η επιλογή -D, χρησιμοποιείται η μεταβλητή περιβάλλοντος " -"PGDATA.\n" +msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" +msgstr "Εάν παραλειφθεί η επιλογή -D, χρησιμοποιείται η μεταβλητή περιβάλλοντος PGDATA.\n" -#: pg_ctl.c:2064 +#: pg_ctl.c:2058 #, c-format msgid "" "\n" @@ -772,43 +674,36 @@ msgstr "" "\n" "Επιλογές για έναρξη ή επανεκκίνηση:\n" -#: pg_ctl.c:2066 +#: pg_ctl.c:2060 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" -msgstr "" -" -c, —core-files επίτρεψε στην postgres να παράγει αρχεία " -"αποτύπωσης μνήμης\n" +msgstr " -c, —core-files επίτρεψε στην postgres να παράγει αρχεία αποτύπωσης μνήμης\n" -#: pg_ctl.c:2068 +#: pg_ctl.c:2062 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, —core-files ανεφάρμοστο σε αυτήν την πλατφόρμα\n" -#: pg_ctl.c:2070 +#: pg_ctl.c:2064 #, c-format -msgid "" -" -l, --log=FILENAME write (or append) server log to FILENAME\n" -msgstr "" -" -l, --log=FILENAME ενέγραψε (ή προσάρτησε) το αρχείο καταγραφής " -"διακομιστή στο FILENAME\n" +msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" +msgstr " -l, --log=FILENAME ενέγραψε (ή προσάρτησε) το αρχείο καταγραφής διακομιστή στο FILENAME\n" -#: pg_ctl.c:2071 +#: pg_ctl.c:2065 #, c-format msgid "" " -o, --options=OPTIONS command line options to pass to postgres\n" " (PostgreSQL server executable) or initdb\n" msgstr "" -" -o, —options=OPTIONS επιλογές γραμμής εντολών που θα διαβιστούν στη " -"postgres\n" -" (εκτελέσιμο αρχείο διακομιστή PostgreSQL) ή " -"initdb\n" +" -o, —options=OPTIONS επιλογές γραμμής εντολών που θα διαβιστούν στη postgres\n" +" (εκτελέσιμο αρχείο διακομιστή PostgreSQL) ή initdb\n" -#: pg_ctl.c:2073 +#: pg_ctl.c:2067 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p ΤΟ PATH-TO-POSTGRES κανονικά δεν είναι απαραίτητο\n" -#: pg_ctl.c:2074 +#: pg_ctl.c:2068 #, c-format msgid "" "\n" @@ -817,16 +712,12 @@ msgstr "" "\n" "Επιλογές διακοπής ή επανεκκίνησης:\n" -#: pg_ctl.c:2075 +#: pg_ctl.c:2069 #, c-format -msgid "" -" -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate" -"\"\n" -msgstr "" -" -m, —mode=MODE MODE μπορεί να είνα “smart”, “fast”, ή " -"“immediate”\n" +msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" +msgstr " -m, —mode=MODE MODE μπορεί να είνα “smart”, “fast”, ή “immediate”\n" -#: pg_ctl.c:2077 +#: pg_ctl.c:2071 #, c-format msgid "" "\n" @@ -835,27 +726,22 @@ msgstr "" "\n" "Οι λειτουργίες τερματισμού λειτουργίας είναι:\n" -#: pg_ctl.c:2078 +#: pg_ctl.c:2072 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart διάκοψε μετά την αποσύνδεση όλων των πελατών\n" -#: pg_ctl.c:2079 +#: pg_ctl.c:2073 #, c-format msgid " fast quit directly, with proper shutdown (default)\n" -msgstr "" -" fast διάκοψε απευθείας, με σωστό τερματισμό (προεπιλογή)\n" +msgstr " fast διάκοψε απευθείας, με σωστό τερματισμό (προεπιλογή)\n" -#: pg_ctl.c:2080 +#: pg_ctl.c:2074 #, c-format -msgid "" -" immediate quit without complete shutdown; will lead to recovery on " -"restart\n" -msgstr "" -" immediate διάκοψε άμεσα χωρίς πλήρη τερματισμό· Θα οδηγήσει σε " -"αποκατάσταση κατά την επανεκκίνηση\n" +msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" +msgstr " immediate διάκοψε άμεσα χωρίς πλήρη τερματισμό· Θα οδηγήσει σε αποκατάσταση κατά την επανεκκίνηση\n" -#: pg_ctl.c:2082 +#: pg_ctl.c:2076 #, c-format msgid "" "\n" @@ -864,7 +750,7 @@ msgstr "" "\n" "Επιτρεπόμενα ονόματα σημάτων για θανάτωση:\n" -#: pg_ctl.c:2086 +#: pg_ctl.c:2080 #, c-format msgid "" "\n" @@ -873,40 +759,27 @@ msgstr "" "\n" "Επιλογές καταχώρησης και διαγραφής καταχώρησης:\n" -#: pg_ctl.c:2087 +#: pg_ctl.c:2081 #, c-format -msgid "" -" -N SERVICENAME service name with which to register PostgreSQL " -"server\n" -msgstr "" -" -N SERVICENAME όνομα υπηρεσίας με το οποίο θα καταχωρηθεί ο " -"διακομιστής PostgreSQL\n" +msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" +msgstr " -N SERVICENAME όνομα υπηρεσίας με το οποίο θα καταχωρηθεί ο διακομιστής PostgreSQL\n" -#: pg_ctl.c:2088 +#: pg_ctl.c:2082 #, c-format -msgid "" -" -P PASSWORD password of account to register PostgreSQL server\n" -msgstr "" -" -P PASSWORD κωδικός πρόσβασης του λογαριασμού για την καταγραφή " -"του διακομιστή PostgreSQL\n" +msgid " -P PASSWORD password of account to register PostgreSQL server\n" +msgstr " -P PASSWORD κωδικός πρόσβασης του λογαριασμού για την καταγραφή του διακομιστή PostgreSQL\n" -#: pg_ctl.c:2089 +#: pg_ctl.c:2083 #, c-format -msgid "" -" -U USERNAME user name of account to register PostgreSQL server\n" -msgstr "" -" -U USERNAME όνομα χρήστη του λογαριασμού για την καταγραφή του " -"διακομιστή PostgreSQL\n" +msgid " -U USERNAME user name of account to register PostgreSQL server\n" +msgstr " -U USERNAME όνομα χρήστη του λογαριασμού για την καταγραφή του διακομιστή PostgreSQL\n" -#: pg_ctl.c:2090 +#: pg_ctl.c:2084 #, c-format -msgid "" -" -S START-TYPE service start type to register PostgreSQL server\n" -msgstr "" -" -S START-TYPE τύπος έναρξης υπηρεσίας για την καταχώρηση διακομιστή " -"PostgreSQL\n" +msgid " -S START-TYPE service start type to register PostgreSQL server\n" +msgstr " -S START-TYPE τύπος έναρξης υπηρεσίας για την καταχώρηση διακομιστή PostgreSQL\n" -#: pg_ctl.c:2092 +#: pg_ctl.c:2086 #, c-format msgid "" "\n" @@ -915,21 +788,17 @@ msgstr "" "\n" "Οι τύποι έναρξης είναι:\n" -#: pg_ctl.c:2093 +#: pg_ctl.c:2087 #, c-format -msgid "" -" auto start service automatically during system startup " -"(default)\n" -msgstr "" -" auto αυτόματη εκκίνηση της υπηρεσίας κατά την εκκίνηση του " -"συστήματος (προεπιλογή)\n" +msgid " auto start service automatically during system startup (default)\n" +msgstr " auto αυτόματη εκκίνηση της υπηρεσίας κατά την εκκίνηση του συστήματος (προεπιλογή)\n" -#: pg_ctl.c:2094 +#: pg_ctl.c:2088 #, c-format msgid " demand start service on demand\n" msgstr " demand έναρξη υπηρεσίας κατ' απαίτηση\n" -#: pg_ctl.c:2097 +#: pg_ctl.c:2091 #, c-format msgid "" "\n" @@ -938,83 +807,76 @@ msgstr "" "\n" "Υποβάλετε αναφορές σφάλματων σε <%s>.\n" -#: pg_ctl.c:2098 +#: pg_ctl.c:2092 #, c-format msgid "%s home page: <%s>\n" msgstr "%s αρχική σελίδα: <%s>\n" -#: pg_ctl.c:2123 +#: pg_ctl.c:2117 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: μη αναγνωρισμένη λειτουργία τερματισμού λειτουργίας \"%s\"\n" -#: pg_ctl.c:2152 +#: pg_ctl.c:2146 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: μη αναγνωρισμένο όνομα σήματος \"%s\"\n" -#: pg_ctl.c:2169 +#: pg_ctl.c:2163 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: μη αναγνωρίσιμος τύπος έναρξης \"%s\"\n" -#: pg_ctl.c:2224 +#: pg_ctl.c:2218 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" -msgstr "" -"%s: δεν ήταν δυνατός ο προσδιορισμός του καταλόγου δεδομένων με χρήση " -"της εντολής \"%s\"\n" +msgstr "%s: δεν ήταν δυνατός ο προσδιορισμός του καταλόγου δεδομένων με χρήση της εντολής \"%s\"\n" -#: pg_ctl.c:2248 +#: pg_ctl.c:2242 #, c-format msgid "%s: control file appears to be corrupt\n" msgstr "%s: το αρχείο ελέγχου φαίνεται να είναι αλλοιωμένο\n" -#: pg_ctl.c:2316 +#: pg_ctl.c:2310 #, c-format msgid "" "%s: cannot be run as root\n" -"Please log in (using, e.g., \"su\") as the (unprivileged) user that " -"will\n" +"Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" "own the server process.\n" msgstr "" "%s: δεν είναι δυνατή η εκτέλεση ως υπερχρήστης\n" -"Συνδεθείτε (χρησιμοποιώντας, π.χ. \"su\") ως (μη προνομιούχο) χρήστη " -"που θα\n" +"Συνδεθείτε (χρησιμοποιώντας, π.χ. \"su\") ως (μη προνομιούχο) χρήστη που θα\n" "να είναι στην κατοχή της η διαδικασία διακομιστή.\n" -#: pg_ctl.c:2400 +#: pg_ctl.c:2393 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: επιλογή -S δεν υποστηρίζεται σε αυτήν την πλατφόρμα\n" -#: pg_ctl.c:2437 +#: pg_ctl.c:2430 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "" -"%s: πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (πρώτη είναι " -"η “%s”)\n" +msgstr "%s: πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (πρώτη είναι η “%s”)\n" -#: pg_ctl.c:2463 +#: pg_ctl.c:2456 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: λείπουν παράμετροι για τη λειτουργία kill\n" -#: pg_ctl.c:2481 +#: pg_ctl.c:2474 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: μη αναγνωρισμένη λειτουργία \"%s\"\n" -#: pg_ctl.c:2491 +#: pg_ctl.c:2484 #, c-format msgid "%s: no operation specified\n" msgstr "%s: δεν καθορίστηκε καμία λειτουργία\n" -#: pg_ctl.c:2512 +#: pg_ctl.c:2505 #, c-format -msgid "" -"%s: no database directory specified and environment variable PGDATA " -"unset\n" -msgstr "" -"%s: δεν έχει καθοριστεί κατάλογος βάσης δεδομένων και δεν έχει " -"καθοριστεί μεταβλητή περιβάλλοντος PGDATA\n" +msgid "%s: no database directory specified and environment variable PGDATA unset\n" +msgstr "%s: δεν έχει καθοριστεί κατάλογος βάσης δεδομένων και δεν έχει καθοριστεί μεταβλητή περιβάλλοντος PGDATA\n" + +#~ msgid "pclose failed: %m" +#~ msgstr "απέτυχε η εντολή pclose: %m" diff --git a/src/bin/pg_ctl/po/es.po b/src/bin/pg_ctl/po/es.po index f7b64ebd038ec..b3be2080a607d 100644 --- a/src/bin/pg_ctl/po/es.po +++ b/src/bin/pg_ctl/po/es.po @@ -5,20 +5,21 @@ # # Alvaro Herrera , 2004-2013 # Martín Marqués , 2013 +# Carlos Chapi , 2021 # msgid "" msgstr "" "Project-Id-Version: pg_ctl (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2021-05-14 19:46+0000\n" -"PO-Revision-Date: 2020-09-12 22:56-0300\n" -"Last-Translator: Carlos Chapi \n" +"PO-Revision-Date: 2021-05-20 23:12-0500\n" +"Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.2\n" +"X-Generator: Poedit 2.4.2\n" #: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format @@ -51,10 +52,9 @@ msgid "could not read symbolic link \"%s\": %m" msgstr "no se pudo leer el enlace simbólico «%s»: %m" #: ../../common/exec.c:409 -#, fuzzy, c-format -#| msgid "%s failed: %m" +#, c-format msgid "%s() failed: %m" -msgstr "%s falló: %m" +msgstr "%s() falló: %m" #: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" diff --git a/src/bin/pg_dump/po/el.po b/src/bin/pg_dump/po/el.po index c423b85035689..b4cd226dadf2d 100644 --- a/src/bin/pg_dump/po/el.po +++ b/src/bin/pg_dump/po/el.po @@ -1,73 +1,74 @@ # Greek message translation file for pg_dump # Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the pg_dump (PostgreSQL) package. +# Georgios Kokolatos , 2021 # msgid "" msgstr "" "Project-Id-Version: pg_dump (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-03-30 04:16+0000\n" +"POT-Creation-Date: 2021-05-25 05:48+0000\n" "PO-Revision-Date: 2021-04-26 09:13+0200\n" +"Last-Translator: Georgios Kokolatos \n" "Language-Team: \n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.4.2\n" -"Last-Translator: Georgios Kokolatos \n" -"Language: el\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "κρίσιμο:" -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "σφάλμα:" -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "προειδοποίηση:" -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "δεν ήταν δυνατή η αναγνώριση του τρέχοντος καταλόγου: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "μη έγκυρο δυαδικό αρχείο “%s”" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "δεν ήταν δυνατή η ανάγνωση του δυαδικού αρχείου “%s”" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "δεν βρέθηκε το αρχείο “%s” για να εκτελεστεί" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "δεν ήταν δυνατή η μετάβαση στον κατάλογο “%s”: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "δεν ήταν δυνατή η ανάγνωση του συμβολικού συνδέσμου “%s”: %m" -#: ../../common/exec.c:410 +#: ../../common/exec.c:409 parallel.c:1614 #, c-format -msgid "pclose failed: %m" -msgstr "απέτυχε η εντολή pclose: %m" +msgid "%s() failed: %m" +msgstr "%s () απέτυχε: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" msgstr "έλλειψη μνήμης" @@ -150,8 +151,7 @@ msgstr "ανάγνωση δομημένων γλωσσών" #: common.c:161 #, c-format msgid "reading user-defined aggregate functions" -msgstr "" -"ανάγνωση συναρτήσεων συγκεντρωτικών αποτελεσμάτων ορισμένων από το χρήστη" +msgstr "ανάγνωση συναρτήσεων συγκεντρωτικών αποτελεσμάτων ορισμένων από το χρήστη" #: common.c:164 #, c-format @@ -191,8 +191,7 @@ msgstr "ανάγνωση λεξικών αναζήτησης κειμένου ο #: common.c:186 #, c-format msgid "reading user-defined text search configurations" -msgstr "" -"ανάγνωση ρυθμίσεων παραμέτρων αναζήτησης κειμένου ορισμένων από το χρήστη" +msgstr "ανάγνωση ρυθμίσεων παραμέτρων αναζήτησης κειμένου ορισμένων από το χρήστη" #: common.c:189 #, c-format @@ -309,26 +308,25 @@ msgstr "ανάγνωση ιδιοτήτων μελών δημοσίευσεων" msgid "reading subscriptions" msgstr "ανάγνωση συνδρομών" -#: common.c:1058 +#: common.c:338 #, c-format -msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" -msgstr "" -"απέτυχε ο έλεγχος ακεραιότητας, το γονικό OID %u του πίνακα \"%s\" (OID %u) " -"δεν βρέθηκε" +msgid "invalid number of parents %d for table \"%s\"" +msgstr "μη έγκυρος αριθμός γονέων %d για τον πίνακα \"%s\"" #: common.c:1100 #, c-format +msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" +msgstr "απέτυχε ο έλεγχος ακεραιότητας, το γονικό OID %u του πίνακα \"%s\" (OID %u) δεν βρέθηκε" + +#: common.c:1142 +#, c-format msgid "could not parse numeric array \"%s\": too many numbers" -msgstr "" -"δεν ήταν δυνατή η ανάλυση της αριθμητικής συστυχίας \"%s\": πάρα πολλοί " -"αριθμοί" +msgstr "δεν ήταν δυνατή η ανάλυση της αριθμητικής συστυχίας \"%s\": πάρα πολλοί αριθμοί" -#: common.c:1115 +#: common.c:1157 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" -msgstr "" -"δεν ήταν δυνατή η ανάλυση της αριθμητικής συστυχίας \"%s\": μη έγκυρος " -"χαρακτήρας σε αριθμό" +msgstr "δεν ήταν δυνατή η ανάλυση της αριθμητικής συστυχίας \"%s\": μη έγκυρος χαρακτήρας σε αριθμό" #: compress_io.c:111 #, c-format @@ -366,21 +364,22 @@ msgstr "δεν ήταν δυνατή η αποσυμπίεση δεδομένω msgid "could not close compression library: %s" msgstr "δεν ήταν δυνατό το κλείσιμο της βιβλιοθήκης συμπίεσης: %s" -#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:557 pg_backup_tar.c:560 +#: compress_io.c:584 compress_io.c:621 pg_backup_tar.c:551 pg_backup_tar.c:554 #, c-format msgid "could not read from input file: %s" msgstr "δεν ήταν δυνατή η ανάγνωση από το αρχείο εισόδου: %s" -#: compress_io.c:623 pg_backup_custom.c:646 pg_backup_directory.c:552 -#: pg_backup_tar.c:793 pg_backup_tar.c:816 +#: compress_io.c:623 pg_backup_custom.c:643 pg_backup_directory.c:552 +#: pg_backup_tar.c:787 pg_backup_tar.c:810 #, c-format msgid "could not read from input file: end of file" msgstr "δεν ήταν δυνατή η ανάγνωση από το αρχείο εισόδου: τέλος αρχείου" #: parallel.c:254 -#, c-format -msgid "WSAStartup failed: %d" -msgstr "WSAStartup απέτυχε: %d" +#, fuzzy, c-format +#| msgid "pgpipe: getsockname() failed: error code %d" +msgid "%s() failed: error code %d" +msgstr "pgpipe: getsockname() απέτυχε: κωδικός σφάλματος %d" #: parallel.c:964 #, c-format @@ -393,8 +392,9 @@ msgid "could not create worker process: %m" msgstr "δεν ήταν δυνατή η δημιουργία διεργασίας εργάτη: %m" #: parallel.c:1151 -#, c-format -msgid "unrecognized command received from master: \"%s\"" +#, fuzzy, c-format +#| msgid "unrecognized command received from master: \"%s\"" +msgid "unrecognized command received from leader: \"%s\"" msgstr "μη αναγνωρίσιμη εντολή που ελήφθη από τον μάστερ: “%s”" #: parallel.c:1194 parallel.c:1432 @@ -406,14 +406,10 @@ msgstr "άκυρο μήνυμα που ελήφθη από εργάτη: “%s #, c-format msgid "" "could not obtain lock on relation \"%s\"\n" -"This usually means that someone requested an ACCESS EXCLUSIVE lock on the " -"table after the pg_dump parent process had gotten the initial ACCESS SHARE " -"lock on the table." +"This usually means that someone requested an ACCESS EXCLUSIVE lock on the table after the pg_dump parent process had gotten the initial ACCESS SHARE lock on the table." msgstr "" "δεν ήταν δυνατή η απόκτηση κλειδιού για τη σχέση \"%s\"\n" -"Αυτό συνήθως σημαίνει ότι κάποιος ζήτησε ένα κλειδί ACCESS EXCLUSIVE στον " -"πίνακα αφού η γονική διεργασία pg_dump είχε ήδη αποκτήσει το αρχικό κλειδί " -"ACCESS SHARE στον πίνακα." +"Αυτό συνήθως σημαίνει ότι κάποιος ζήτησε ένα κλειδί ACCESS EXCLUSIVE στον πίνακα αφού η γονική διεργασία pg_dump είχε ήδη αποκτήσει το αρχικό κλειδί ACCESS SHARE στον πίνακα." #: parallel.c:1415 #, c-format @@ -425,11 +421,6 @@ msgstr "μία διεργασία εργάτη τερματίστηκε απρό msgid "could not write to the communication channel: %m" msgstr "δεν ήταν δυνατή η εγγραφή στο κανάλι επικοινωνίας: %m" -#: parallel.c:1614 -#, c-format -msgid "select() failed: %m" -msgstr "απέτυχε το select(): %m" - #: parallel.c:1739 #, c-format msgid "pgpipe: could not create socket: error code %d" @@ -446,15 +437,15 @@ msgid "pgpipe: could not listen: error code %d" msgstr "pgpipe: δεν ήταν δυνατή η ακρόαση: κωδικός σφάλματος %d" #: parallel.c:1764 -#, c-format -msgid "pgpipe: getsockname() failed: error code %d" +#, fuzzy, c-format +#| msgid "pgpipe: getsockname() failed: error code %d" +msgid "pgpipe: %s() failed: error code %d" msgstr "pgpipe: getsockname() απέτυχε: κωδικός σφάλματος %d" #: parallel.c:1775 #, c-format msgid "pgpipe: could not create second socket: error code %d" -msgstr "" -"pgpipe: δεν ήταν δυνατή η δημιουργία δεύτερης υποδοχής: κωδικός σφάλματος %d" +msgstr "pgpipe: δεν ήταν δυνατή η δημιουργία δεύτερης υποδοχής: κωδικός σφάλματος %d" #: parallel.c:1784 #, c-format @@ -466,148 +457,134 @@ msgstr "pgpipe: δεν ήταν δυνατή η σύνδεση της υποδο msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: δεν ήταν δυνατή η αποδοχή σύνδεσης: κωδικός σφάλματος %d" -#: pg_backup_archiver.c:277 pg_backup_archiver.c:1587 +#: pg_backup_archiver.c:278 pg_backup_archiver.c:1577 #, c-format msgid "could not close output file: %m" msgstr "δεν ήταν δυνατό το κλείσιμο αρχείου εξόδου: %m" -#: pg_backup_archiver.c:321 pg_backup_archiver.c:325 +#: pg_backup_archiver.c:322 pg_backup_archiver.c:326 #, c-format msgid "archive items not in correct section order" msgstr "αρχειοθέτηση στοιχείων που δεν βρίσκονται σε σωστή σειρά ενότητας" -#: pg_backup_archiver.c:331 +#: pg_backup_archiver.c:332 #, c-format msgid "unexpected section code %d" msgstr "μη αναμενόμενος κώδικας ενότητας %d" -#: pg_backup_archiver.c:368 +#: pg_backup_archiver.c:369 #, c-format msgid "parallel restore is not supported with this archive file format" -msgstr "" -"η παράλληλη επαναφορά δεν υποστηρίζεται από αυτήν τη μορφή αρχείου " -"αρχειοθέτησης" +msgstr "η παράλληλη επαναφορά δεν υποστηρίζεται από αυτήν τη μορφή αρχείου αρχειοθέτησης" -#: pg_backup_archiver.c:372 +#: pg_backup_archiver.c:373 #, c-format msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump" -msgstr "" -"η παράλληλη επαναφορά δεν υποστηρίζεται με αρχεία που έγιναν από pg_dump προ " -"έκδοσης 8.0" +msgstr "η παράλληλη επαναφορά δεν υποστηρίζεται με αρχεία που έγιναν από pg_dump προ έκδοσης 8.0" -#: pg_backup_archiver.c:390 +#: pg_backup_archiver.c:391 #, c-format -msgid "" -"cannot restore from compressed archive (compression not supported in this " -"installation)" -msgstr "" -"δεν είναι δυνατή η επαναφορά από συμπιεσμένη αρχειοθήκη (η συμπίεση δεν " -"υποστηρίζεται σε αυτήν την εγκατάσταση)" +msgid "cannot restore from compressed archive (compression not supported in this installation)" +msgstr "δεν είναι δυνατή η επαναφορά από συμπιεσμένη αρχειοθήκη (η συμπίεση δεν υποστηρίζεται σε αυτήν την εγκατάσταση)" -#: pg_backup_archiver.c:407 +#: pg_backup_archiver.c:408 #, c-format msgid "connecting to database for restore" msgstr "σύνδεση με βάση δεδομένων για επαναφορά" -#: pg_backup_archiver.c:409 +#: pg_backup_archiver.c:410 #, c-format msgid "direct database connections are not supported in pre-1.3 archives" -msgstr "" -"οι απευθείας συνδέσεις βάσεων δεδομένων δεν υποστηρίζονται σε προ-1.3 αρχεία" +msgstr "οι απευθείας συνδέσεις βάσεων δεδομένων δεν υποστηρίζονται σε προ-1.3 αρχεία" -#: pg_backup_archiver.c:452 +#: pg_backup_archiver.c:453 #, c-format msgid "implied data-only restore" msgstr "υποδηλούμενη επαναφορά μόνο δεδομένων" -#: pg_backup_archiver.c:518 +#: pg_backup_archiver.c:519 #, c-format msgid "dropping %s %s" msgstr "εγκαταλείπει %s: %s" -#: pg_backup_archiver.c:613 +#: pg_backup_archiver.c:614 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" -msgstr "" -"δεν ήταν δυνατή η εύρεση του σημείου εισαγωγής IF EXISTS στη δήλωση \"%s\"" +msgstr "δεν ήταν δυνατή η εύρεση του σημείου εισαγωγής IF EXISTS στη δήλωση \"%s\"" -#: pg_backup_archiver.c:769 pg_backup_archiver.c:771 +#: pg_backup_archiver.c:770 pg_backup_archiver.c:772 #, c-format msgid "warning from original dump file: %s" msgstr "προειδοποίηση από το αρχικό αρχείο απόθεσης: %s" -#: pg_backup_archiver.c:786 +#: pg_backup_archiver.c:787 #, c-format msgid "creating %s \"%s.%s\"" msgstr "δημιουργία %s “%s.%s”" -#: pg_backup_archiver.c:789 +#: pg_backup_archiver.c:790 #, c-format msgid "creating %s \"%s\"" msgstr "δημιουργία %s “%s”" -#: pg_backup_archiver.c:839 +#: pg_backup_archiver.c:840 #, c-format msgid "connecting to new database \"%s\"" msgstr "σύνδεση με νέα βάση δεδομένων \"%s\"" -#: pg_backup_archiver.c:866 +#: pg_backup_archiver.c:867 #, c-format msgid "processing %s" msgstr "επεξεργασία %s" -#: pg_backup_archiver.c:886 +#: pg_backup_archiver.c:887 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "επεξεργασία δεδομένων για τον πίνακα “%s.%s”" -#: pg_backup_archiver.c:948 +#: pg_backup_archiver.c:949 #, c-format msgid "executing %s %s" msgstr "εκτέλεση %s %s" -#: pg_backup_archiver.c:987 +#: pg_backup_archiver.c:988 #, c-format msgid "disabling triggers for %s" msgstr "απενεργοποίηση ενεργοποιήσεων για %s" -#: pg_backup_archiver.c:1013 +#: pg_backup_archiver.c:1014 #, c-format msgid "enabling triggers for %s" msgstr "ενεργοποίηση ενεργοποιήσεων για %s" -#: pg_backup_archiver.c:1041 +#: pg_backup_archiver.c:1042 #, c-format -msgid "" -"internal error -- WriteData cannot be called outside the context of a " -"DataDumper routine" -msgstr "" -"εσωτερικό σφάλμα -- Δεν είναι δυνατή η κλήση του WriteData εκτός του " -"περιβάλλοντος μιας ρουτίνας DataDumper" +msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" +msgstr "εσωτερικό σφάλμα -- Δεν είναι δυνατή η κλήση του WriteData εκτός του περιβάλλοντος μιας ρουτίνας DataDumper" -#: pg_backup_archiver.c:1224 +#: pg_backup_archiver.c:1225 #, c-format msgid "large-object output not supported in chosen format" msgstr "η έξοδος μεγάλου αντικειμένου δεν υποστηρίζεται στην επιλεγμένη μορφή" -#: pg_backup_archiver.c:1282 +#: pg_backup_archiver.c:1283 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" msgstr[0] "επανέφερε %d μεγάλο αντικείμενο" msgstr[1] "επανέφερε %d μεγάλα αντικείμενα" -#: pg_backup_archiver.c:1303 pg_backup_tar.c:736 +#: pg_backup_archiver.c:1304 pg_backup_tar.c:730 #, c-format msgid "restoring large object with OID %u" msgstr "επαναφορά μεγάλου αντικειμένου με OID %u" -#: pg_backup_archiver.c:1315 +#: pg_backup_archiver.c:1316 #, c-format msgid "could not create large object %u: %s" msgstr "δεν ήταν δυνατή η δημιουργία μεγάλου αντικειμένου %u: %s" -#: pg_backup_archiver.c:1320 pg_dump.c:3552 +#: pg_backup_archiver.c:1321 pg_dump.c:3693 #, c-format msgid "could not open large object %u: %s" msgstr "δεν ήταν δυνατό το άνοιγμα μεγάλου αντικειμένου %u: %s" @@ -617,423 +594,399 @@ msgstr "δεν ήταν δυνατό το άνοιγμα μεγάλου αντι msgid "could not open TOC file \"%s\": %m" msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου TOC “%s”: %m" -#: pg_backup_archiver.c:1417 +#: pg_backup_archiver.c:1405 #, c-format msgid "line ignored: %s" msgstr "παραβλέπεται γραμμή: %s" -#: pg_backup_archiver.c:1424 +#: pg_backup_archiver.c:1412 #, c-format msgid "could not find entry for ID %d" msgstr "δεν ήταν δυνατή η εύρεση καταχώρησης για ID %d" -#: pg_backup_archiver.c:1445 pg_backup_directory.c:222 +#: pg_backup_archiver.c:1435 pg_backup_directory.c:222 #: pg_backup_directory.c:598 #, c-format msgid "could not close TOC file: %m" msgstr "δεν ήταν δυνατό το κλείσιμο του αρχείου TOC %m" -#: pg_backup_archiver.c:1559 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_archiver.c:1549 pg_backup_custom.c:156 pg_backup_directory.c:332 #: pg_backup_directory.c:585 pg_backup_directory.c:648 -#: pg_backup_directory.c:667 pg_dumpall.c:484 +#: pg_backup_directory.c:667 pg_dumpall.c:489 #, c-format msgid "could not open output file \"%s\": %m" msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου εξόδου “%s”: %m" -#: pg_backup_archiver.c:1561 pg_backup_custom.c:162 +#: pg_backup_archiver.c:1551 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου εξόδου %m" -#: pg_backup_archiver.c:1654 -#, c-format -msgid "wrote %lu byte of large object data (result = %lu)" -msgid_plural "wrote %lu bytes of large object data (result = %lu)" +#: pg_backup_archiver.c:1644 +#, fuzzy, c-format +#| msgid "wrote %lu byte of large object data (result = %lu)" +#| msgid_plural "wrote %lu bytes of large object data (result = %lu)" +msgid "wrote %zu byte of large object data (result = %d)" +msgid_plural "wrote %zu bytes of large object data (result = %d)" msgstr[0] "έγραψε %lu byte δεδομένων μεγάλου αντικειμένου (αποτέλεσμα = %lu)" msgstr[1] "έγραψε %lu bytes δεδομένων μεγάλου αντικειμένου (αποτέλεσμα = %lu)" -#: pg_backup_archiver.c:1659 -#, c-format -msgid "could not write to large object (result: %lu, expected: %lu)" -msgstr "" -"δεν ήταν δυνατή η εγγραφή σε μεγάλο αντικείμενο (αποτέλεσμα: %lu, " -"αναμένεται: %lu)" +#: pg_backup_archiver.c:1650 +#, fuzzy, c-format +#| msgid "could not create large object %u: %s" +msgid "could not write to large object: %s" +msgstr "δεν ήταν δυνατή η δημιουργία μεγάλου αντικειμένου %u: %s" -#: pg_backup_archiver.c:1749 +#: pg_backup_archiver.c:1740 #, c-format msgid "while INITIALIZING:" msgstr "ενόσω INITIALIZING:" -#: pg_backup_archiver.c:1754 +#: pg_backup_archiver.c:1745 #, c-format msgid "while PROCESSING TOC:" msgstr "ενόσω PROCESSING TOC:" -#: pg_backup_archiver.c:1759 +#: pg_backup_archiver.c:1750 #, c-format msgid "while FINALIZING:" msgstr "ενόσω FINALIZING:" -#: pg_backup_archiver.c:1764 +#: pg_backup_archiver.c:1755 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "από καταχώρηση TOC %d; %u %u %s %s %s" -#: pg_backup_archiver.c:1840 +#: pg_backup_archiver.c:1831 #, c-format msgid "bad dumpId" msgstr "εσφαλμένο dumpId" -#: pg_backup_archiver.c:1861 +#: pg_backup_archiver.c:1852 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "εσφαλμένος πίνακας dumpId για στοιχείο TABLE DATA" -#: pg_backup_archiver.c:1953 +#: pg_backup_archiver.c:1944 #, c-format msgid "unexpected data offset flag %d" msgstr "μη αναμενόμενη σημαία όφσετ δεδομένων %d" -#: pg_backup_archiver.c:1966 +#: pg_backup_archiver.c:1957 #, c-format msgid "file offset in dump file is too large" msgstr "το όφσετ αρχείου στο αρχείο απόθεσης είναι πολύ μεγάλο" -#: pg_backup_archiver.c:2103 pg_backup_archiver.c:2113 +#: pg_backup_archiver.c:2095 pg_backup_archiver.c:2105 #, c-format msgid "directory name too long: \"%s\"" msgstr "πολύ μακρύ όνομα καταλόγου: “%s”" -#: pg_backup_archiver.c:2121 +#: pg_backup_archiver.c:2113 #, c-format -msgid "" -"directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not " -"exist)" -msgstr "" -"ο κατάλογος \"%s\" δεν φαίνεται να είναι έγκυρη αρχειοθήκη (το \"toc.dat\" " -"δεν υπάρχει)" +msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" +msgstr "ο κατάλογος \"%s\" δεν φαίνεται να είναι έγκυρη αρχειοθήκη (το \"toc.dat\" δεν υπάρχει)" -#: pg_backup_archiver.c:2129 pg_backup_custom.c:173 pg_backup_custom.c:812 +#: pg_backup_archiver.c:2121 pg_backup_custom.c:173 pg_backup_custom.c:807 #: pg_backup_directory.c:207 pg_backup_directory.c:394 #, c-format msgid "could not open input file \"%s\": %m" msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου εισόδου “%s”: %m" -#: pg_backup_archiver.c:2136 pg_backup_custom.c:179 +#: pg_backup_archiver.c:2128 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου εισόδου %m" -#: pg_backup_archiver.c:2142 +#: pg_backup_archiver.c:2134 #, c-format msgid "could not read input file: %m" msgstr "δεν ήταν δυνατή η ανάγνωση αρχείου εισόδου: %m" -#: pg_backup_archiver.c:2144 +#: pg_backup_archiver.c:2136 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "το αρχείο εισόδου είναι πολύ σύντομο (διάβασε %lu, ανάμενε 5)" -#: pg_backup_archiver.c:2229 +#: pg_backup_archiver.c:2168 #, c-format msgid "input file appears to be a text format dump. Please use psql." -msgstr "" -"το αρχείο εισαγωγής φαίνεται να είναι απόθεση μορφής κειμένου. Παρακαλώ " -"χρησιμοποιήστε το psql." +msgstr "το αρχείο εισαγωγής φαίνεται να είναι απόθεση μορφής κειμένου. Παρακαλώ χρησιμοποιήστε το psql." -#: pg_backup_archiver.c:2235 +#: pg_backup_archiver.c:2174 #, c-format msgid "input file does not appear to be a valid archive (too short?)" -msgstr "" -"το αρχείο εισόδου δεν φαίνεται να είναι έγκυρη αρχειοθήκη (πολύ σύντομο;)" +msgstr "το αρχείο εισόδου δεν φαίνεται να είναι έγκυρη αρχειοθήκη (πολύ σύντομο;)" -#: pg_backup_archiver.c:2241 +#: pg_backup_archiver.c:2180 #, c-format msgid "input file does not appear to be a valid archive" msgstr "το αρχείο εισόδου δεν φαίνεται να είναι έγκυρη αρχειοθήκη" -#: pg_backup_archiver.c:2261 +#: pg_backup_archiver.c:2189 #, c-format msgid "could not close input file: %m" msgstr "δεν ήταν δυνατό το κλείσιμο αρχείου εισόδου: %m" -#: pg_backup_archiver.c:2373 +#: pg_backup_archiver.c:2306 #, c-format msgid "unrecognized file format \"%d\"" msgstr "μη αναγνωρίσιμη μορφή αρχείου \"%d\"" -#: pg_backup_archiver.c:2455 pg_backup_archiver.c:4458 +#: pg_backup_archiver.c:2388 pg_backup_archiver.c:4422 #, c-format msgid "finished item %d %s %s" msgstr "τερματισμός στοιχείου %d %s %s" -#: pg_backup_archiver.c:2459 pg_backup_archiver.c:4471 +#: pg_backup_archiver.c:2392 pg_backup_archiver.c:4435 #, c-format msgid "worker process failed: exit code %d" msgstr "διεργασία εργάτη απέτυχε: κωδικός εξόδου %d" -#: pg_backup_archiver.c:2579 +#: pg_backup_archiver.c:2512 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "καταχώρηση με ID %d εκτός εύρους τιμών — ίσως αλλοιωμένο TOC" -#: pg_backup_archiver.c:2646 +#: pg_backup_archiver.c:2579 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "η επαναφορά πινάκων WITH OIDS δεν υποστηρίζεται πλέον" -#: pg_backup_archiver.c:2728 +#: pg_backup_archiver.c:2663 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "μη αναγνωρίσιμη κωδικοποίηση “%s”" -#: pg_backup_archiver.c:2733 +#: pg_backup_archiver.c:2668 #, c-format msgid "invalid ENCODING item: %s" msgstr "μη έγκυρο στοιχείο ENCODING: %s" -#: pg_backup_archiver.c:2751 +#: pg_backup_archiver.c:2686 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "μη έγκυρο στοιχείο STDSTRINGS: %s" -#: pg_backup_archiver.c:2776 +#: pg_backup_archiver.c:2717 +#, fuzzy, c-format +#| msgid "invalid STDSTRINGS item: %s" +msgid "invalid TOASTCOMPRESSION item: %s" +msgstr "μη έγκυρο στοιχείο STDSTRINGS: %s" + +#: pg_backup_archiver.c:2734 #, c-format msgid "schema \"%s\" not found" msgstr "το σχήμα \"%s\" δεν βρέθηκε" -#: pg_backup_archiver.c:2783 +#: pg_backup_archiver.c:2741 #, c-format msgid "table \"%s\" not found" msgstr "ο πίνακας “%s” δεν βρέθηκε" -#: pg_backup_archiver.c:2790 +#: pg_backup_archiver.c:2748 #, c-format msgid "index \"%s\" not found" msgstr "το ευρετήριο “%s” δεν βρέθηκε" -#: pg_backup_archiver.c:2797 +#: pg_backup_archiver.c:2755 #, c-format msgid "function \"%s\" not found" msgstr "η συνάρτηση “%s” δεν βρέθηκε" -#: pg_backup_archiver.c:2804 +#: pg_backup_archiver.c:2762 #, c-format msgid "trigger \"%s\" not found" msgstr "η ενεργοποίηση \"%s\" δεν βρέθηκε" -#: pg_backup_archiver.c:3196 +#: pg_backup_archiver.c:3160 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "δεν ήταν δυνατός ο ορισμός του χρήστη συνεδρίας σε \"%s\": %s" -#: pg_backup_archiver.c:3328 +#: pg_backup_archiver.c:3292 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "δεν ήταν δυνατός ο ορισμός του search_path σε “%s”: %s" -#: pg_backup_archiver.c:3390 +#: pg_backup_archiver.c:3354 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "δεν ήταν δυνατός ο ορισμός του default_tablespace σε “%s”: %s" -#: pg_backup_archiver.c:3435 +#: pg_backup_archiver.c:3399 #, c-format msgid "could not set default_table_access_method: %s" msgstr "δεν ήταν δυνατός ο ορισμός του default_table_access_method: %s" -#: pg_backup_archiver.c:3527 pg_backup_archiver.c:3685 +#: pg_backup_archiver.c:3491 pg_backup_archiver.c:3649 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "δεν γνωρίζω πώς να οριστεί κάτοχος για τύπο αντικειμένου \"%s\"" -#: pg_backup_archiver.c:3789 +#: pg_backup_archiver.c:3753 #, c-format msgid "did not find magic string in file header" msgstr "δεν βρέθηκε μαγική συμβολοσειρά στην κεφαλίδα αρχείου" -#: pg_backup_archiver.c:3802 +#: pg_backup_archiver.c:3767 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "μη υποστηριζόμενη έκδοση (%d.%d) στην κεφαλίδα αρχείου" -#: pg_backup_archiver.c:3807 +#: pg_backup_archiver.c:3772 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "απέτυχε έλεγχος ακεραιότητας για μέγεθος ακεραίου (%lu)" -#: pg_backup_archiver.c:3811 +#: pg_backup_archiver.c:3776 #, c-format -msgid "" -"archive was made on a machine with larger integers, some operations might " -"fail" -msgstr "" -"το αρχείο δημιουργήθηκε σε έναν υπολογιστή με μεγαλύτερους ακέραιους, " -"ορισμένες λειτουργίες ενδέχεται να αποτύχουν" +msgid "archive was made on a machine with larger integers, some operations might fail" +msgstr "το αρχείο δημιουργήθηκε σε έναν υπολογιστή με μεγαλύτερους ακέραιους, ορισμένες λειτουργίες ενδέχεται να αποτύχουν" -#: pg_backup_archiver.c:3821 +#: pg_backup_archiver.c:3786 #, c-format msgid "expected format (%d) differs from format found in file (%d)" -msgstr "" -"η αναμενόμενη μορφή (%d) διαφέρει από τη μορφή που βρίσκεται στο αρχείο (%d)" +msgstr "η αναμενόμενη μορφή (%d) διαφέρει από τη μορφή που βρίσκεται στο αρχείο (%d)" -#: pg_backup_archiver.c:3837 +#: pg_backup_archiver.c:3801 #, c-format -msgid "" -"archive is compressed, but this installation does not support compression -- " -"no data will be available" -msgstr "" -"το αρχείο είναι συμπιεσμένο, αλλά αυτή η εγκατάσταση δεν υποστηρίζει " -"συμπίεση -- δεν θα υπάρχουν διαθέσιμα δεδομένα" +msgid "archive is compressed, but this installation does not support compression -- no data will be available" +msgstr "το αρχείο είναι συμπιεσμένο, αλλά αυτή η εγκατάσταση δεν υποστηρίζει συμπίεση -- δεν θα υπάρχουν διαθέσιμα δεδομένα" -#: pg_backup_archiver.c:3855 +#: pg_backup_archiver.c:3819 #, c-format msgid "invalid creation date in header" msgstr "μη έγκυρη ημερομηνία δημιουργίας στην κεφαλίδα" -#: pg_backup_archiver.c:3983 +#: pg_backup_archiver.c:3947 #, c-format msgid "processing item %d %s %s" msgstr "επεξεργασία στοιχείου %d %s %s" -#: pg_backup_archiver.c:4062 +#: pg_backup_archiver.c:4026 #, c-format msgid "entering main parallel loop" msgstr "εισέρχεται στο κύριο παράλληλο βρόχο" -#: pg_backup_archiver.c:4073 +#: pg_backup_archiver.c:4037 #, c-format msgid "skipping item %d %s %s" msgstr "παράβλεψη στοιχείου %d %s %s" -#: pg_backup_archiver.c:4082 +#: pg_backup_archiver.c:4046 #, c-format msgid "launching item %d %s %s" msgstr "εκκίνηση στοιχείου %d %s %s" -#: pg_backup_archiver.c:4136 +#: pg_backup_archiver.c:4100 #, c-format msgid "finished main parallel loop" msgstr "εξέρχεται από το κύριο παράλληλο βρόχο" -#: pg_backup_archiver.c:4172 +#: pg_backup_archiver.c:4136 #, c-format msgid "processing missed item %d %s %s" msgstr "επεξεργασία παραβλεπόμενου στοιχείου %d %s %s" -#: pg_backup_archiver.c:4777 +#: pg_backup_archiver.c:4741 #, c-format msgid "table \"%s\" could not be created, will not restore its data" -msgstr "" -"δεν ήταν δυνατή η δημιουργία του πίνακα \"%s\", δεν θα επαναφερθούν τα " -"δεδομένα του" +msgstr "δεν ήταν δυνατή η δημιουργία του πίνακα \"%s\", δεν θα επαναφερθούν τα δεδομένα του" -#: pg_backup_custom.c:378 pg_backup_null.c:147 +#: pg_backup_custom.c:376 pg_backup_null.c:147 #, c-format msgid "invalid OID for large object" msgstr "μη έγκυρο OID για μεγάλο αντικειμένο" -#: pg_backup_custom.c:441 pg_backup_custom.c:507 pg_backup_custom.c:632 -#: pg_backup_custom.c:870 pg_backup_tar.c:1086 pg_backup_tar.c:1091 +#: pg_backup_custom.c:439 pg_backup_custom.c:505 pg_backup_custom.c:629 +#: pg_backup_custom.c:865 pg_backup_tar.c:1080 pg_backup_tar.c:1085 #, c-format msgid "error during file seek: %m" msgstr "σφάλμα κατά τη διάρκεια αναζήτησης σε αρχείο: %m" -#: pg_backup_custom.c:480 +#: pg_backup_custom.c:478 #, c-format msgid "data block %d has wrong seek position" msgstr "%d μπλοκ δεδομένων έχει εσφαλμένη θέση αναζήτησης" -#: pg_backup_custom.c:497 +#: pg_backup_custom.c:495 #, c-format msgid "unrecognized data block type (%d) while searching archive" -msgstr "" -"τύπος μπλοκ δεδομένων (%d) που δεν αναγνωρίζεται κατά την αναζήτηση " -"αρχειοθέτησης" +msgstr "τύπος μπλοκ δεδομένων (%d) που δεν αναγνωρίζεται κατά την αναζήτηση αρχειοθέτησης" -#: pg_backup_custom.c:519 +#: pg_backup_custom.c:517 #, c-format -msgid "" -"could not find block ID %d in archive -- possibly due to out-of-order " -"restore request, which cannot be handled due to non-seekable input file" -msgstr "" -"δεν ήταν δυνατή η εύρεση μπλοκ ID %d στο αρχείο -- πιθανώς λόγω αίτησης " -"επαναφοράς εκτός σειράς, η οποία δεν είναι δυνατό να αντιμετωπιστεί λόγω μη " -"αναζητήσιμου αρχείου εισόδου" +msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to non-seekable input file" +msgstr "δεν ήταν δυνατή η εύρεση μπλοκ ID %d στο αρχείο -- πιθανώς λόγω αίτησης επαναφοράς εκτός σειράς, η οποία δεν είναι δυνατό να αντιμετωπιστεί λόγω μη αναζητήσιμου αρχείου εισόδου" -#: pg_backup_custom.c:524 +#: pg_backup_custom.c:522 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive" -msgstr "" -"δεν ήταν δυνατή η εύρεση μπλοκ ID %d στην αρχειοθήκη -- πιθανώς αλλοιωμένη " -"αρχειοθήκη" +msgstr "δεν ήταν δυνατή η εύρεση μπλοκ ID %d στην αρχειοθήκη -- πιθανώς αλλοιωμένη αρχειοθήκη" -#: pg_backup_custom.c:531 +#: pg_backup_custom.c:529 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d" -msgstr "" -"βρέθηκε μη αναμενόμενο μπλοκ ID (%d) κατά την ανάγνωση δεδομένων -- " -"αναμενόμενο %d" +msgstr "βρέθηκε μη αναμενόμενο μπλοκ ID (%d) κατά την ανάγνωση δεδομένων -- αναμενόμενο %d" -#: pg_backup_custom.c:545 +#: pg_backup_custom.c:543 #, c-format msgid "unrecognized data block type %d while restoring archive" -msgstr "" -"μη αναγνωρίσιμος τύπος μπλοκ δεδομένων %d κατά την επαναφορά της αρχειοθήκης" +msgstr "μη αναγνωρίσιμος τύπος μπλοκ δεδομένων %d κατά την επαναφορά της αρχειοθήκης" -#: pg_backup_custom.c:648 +#: pg_backup_custom.c:645 #, c-format msgid "could not read from input file: %m" msgstr "δεν ήταν δυνατή η ανάγνωση από αρχείο: %m" -#: pg_backup_custom.c:751 pg_backup_custom.c:803 pg_backup_custom.c:948 -#: pg_backup_tar.c:1089 +#: pg_backup_custom.c:746 pg_backup_custom.c:798 pg_backup_custom.c:943 +#: pg_backup_tar.c:1083 #, c-format msgid "could not determine seek position in archive file: %m" -msgstr "" -"δεν ήταν δυνατός ο προσδιορισμός της θέσης αναζήτησης στην αρχειοθήκη: %m" +msgstr "δεν ήταν δυνατός ο προσδιορισμός της θέσης αναζήτησης στην αρχειοθήκη: %m" -#: pg_backup_custom.c:767 pg_backup_custom.c:807 +#: pg_backup_custom.c:762 pg_backup_custom.c:802 #, c-format msgid "could not close archive file: %m" msgstr "δεν ήταν δυνατό το κλείσιμο της αρχειοθήκης: %m" -#: pg_backup_custom.c:790 +#: pg_backup_custom.c:785 #, c-format msgid "can only reopen input archives" msgstr "μπορεί να επα-ανοίξει μόνο αρχειοθήκες εισόδου" -#: pg_backup_custom.c:797 +#: pg_backup_custom.c:792 #, c-format msgid "parallel restore from standard input is not supported" msgstr "η επαναφορά από τυπική είσοδο δεν υποστηρίζεται" -#: pg_backup_custom.c:799 +#: pg_backup_custom.c:794 #, c-format msgid "parallel restore from non-seekable file is not supported" msgstr "η παράλληλη επαναφορά από μη αναζητήσιμο αρχείο δεν υποστηρίζεται" -#: pg_backup_custom.c:815 +#: pg_backup_custom.c:810 #, c-format msgid "could not set seek position in archive file: %m" msgstr "δεν ήταν δυνατή η αναζήτηση θέσης στο αρχείο αρχειοθέτησης: %m" -#: pg_backup_custom.c:894 +#: pg_backup_custom.c:889 #, c-format msgid "compressor active" msgstr "συμπιεστής ενεργός" -#: pg_backup_db.c:41 +#: pg_backup_db.c:42 #, c-format msgid "could not get server_version from libpq" msgstr "δεν ήταν δυνατή η απόκτηση server_version από libpq" -#: pg_backup_db.c:52 pg_dumpall.c:1826 +#: pg_backup_db.c:53 pg_dumpall.c:1826 #, c-format msgid "server version: %s; %s version: %s" msgstr "έκδοση διακομιστή: %s; %s έκδοση: %s" -#: pg_backup_db.c:54 pg_dumpall.c:1828 +#: pg_backup_db.c:55 pg_dumpall.c:1828 #, c-format msgid "aborting because of server version mismatch" msgstr "ματαίωση λόγω ασυμφωνίας έκδοσης διακομιστή" @@ -1043,81 +996,77 @@ msgstr "ματαίωση λόγω ασυμφωνίας έκδοσης διακο msgid "already connected to a database" msgstr "ήδη συνδεδεμένος σε βάση δεδομένων" -#: pg_backup_db.c:133 pg_backup_db.c:185 pg_dumpall.c:1651 pg_dumpall.c:1764 +#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1655 pg_dumpall.c:1766 msgid "Password: " msgstr "Κωδικός πρόσβασης: " -#: pg_backup_db.c:177 +#: pg_backup_db.c:174 #, c-format msgid "could not connect to database" msgstr "δεν ήταν δυνατή η σύνδεση σε βάση δεδομένων" -#: pg_backup_db.c:195 -#, c-format -msgid "reconnection to database \"%s\" failed: %s" +#: pg_backup_db.c:191 +#, fuzzy, c-format +#| msgid "reconnection to database \"%s\" failed: %s" +msgid "reconnection failed: %s" msgstr "επανασύνδεση στη βάση δεδομένων “%s” απέτυχε: %s" -#: pg_backup_db.c:199 -#, c-format -msgid "connection to database \"%s\" failed: %s" -msgstr "σύνδεση στη βάση δεδομένων “%s” απέτυχε: %s" - -#: pg_backup_db.c:272 pg_dumpall.c:1684 +#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1686 pg_dumpall.c:1776 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:279 pg_dumpall.c:1889 pg_dumpall.c:1912 +#: pg_backup_db.c:276 pg_dumpall.c:1889 pg_dumpall.c:1912 #, c-format msgid "query failed: %s" msgstr "το ερώτημα απέτυχε: %s" -#: pg_backup_db.c:281 pg_dumpall.c:1890 pg_dumpall.c:1913 +#: pg_backup_db.c:278 pg_dumpall.c:1890 pg_dumpall.c:1913 #, c-format msgid "query was: %s" msgstr "το ερώτημα ήταν: %s" -#: pg_backup_db.c:322 +#: pg_backup_db.c:319 #, c-format msgid "query returned %d row instead of one: %s" msgid_plural "query returned %d rows instead of one: %s" msgstr[0] "το ερώτημα επέστρεψε %d σειρά αντί μίας: %s" msgstr[1] "το ερώτημα επέστρεψε %d σειρές αντί μίας: %s" -#: pg_backup_db.c:358 +#: pg_backup_db.c:355 #, c-format msgid "%s: %sCommand was: %s" msgstr "%s: %s η εντολή ήταν: %s" -#: pg_backup_db.c:414 pg_backup_db.c:488 pg_backup_db.c:495 +#: pg_backup_db.c:411 pg_backup_db.c:485 pg_backup_db.c:492 msgid "could not execute query" msgstr "δεν ήταν δυνατή η εκτέλεση ερωτήματος" -#: pg_backup_db.c:467 +#: pg_backup_db.c:464 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "επιστράφηκε σφάλμα από PQputCopyData: %s" -#: pg_backup_db.c:516 +#: pg_backup_db.c:513 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "επιστράφηκε σφάλμα από PQputCopyEnd: %s" -#: pg_backup_db.c:522 +#: pg_backup_db.c:519 #, c-format msgid "COPY failed for table \"%s\": %s" msgstr "COPY απέτυχε για πίνακα “%s”: %s" -#: pg_backup_db.c:528 pg_dump.c:1988 +#: pg_backup_db.c:525 pg_dump.c:2077 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "μη αναμενόμενα αποτελέσματα κατά τη διάρκεια COPY του πίνακα “%s”" -#: pg_backup_db.c:540 +#: pg_backup_db.c:537 msgid "could not start database transaction" msgstr "δεν ήταν δυνατή η εκκίνηση συναλλαγής βάσης δεδομένων" -#: pg_backup_db.c:548 +#: pg_backup_db.c:545 msgid "could not commit database transaction" msgstr "δεν ήταν δυνατή η ολοκλήρωση της συναλλαγής βάσης δεδομένων" @@ -1155,9 +1104,7 @@ msgstr "δεν ήταν δυνατό το κλείσιμο του αρχείου #: pg_backup_directory.c:446 #, c-format msgid "could not open large object TOC file \"%s\" for input: %m" -msgstr "" -"δεν ήταν δυνατό το άνοιγμα αρχείου TOC μεγάλου αντικειμένου \"%s\" για " -"είσοδο: %m" +msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου TOC μεγάλου αντικειμένου \"%s\" για είσοδο: %m" #: pg_backup_directory.c:457 #, c-format @@ -1199,7 +1146,7 @@ msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου TOC “% msgid "could not open TOC file for output: %m" msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου TOC για έξοδο: %m" -#: pg_backup_tar.c:203 pg_backup_tar.c:358 +#: pg_backup_tar.c:203 pg_backup_tar.c:352 #, c-format msgid "compression is not supported by tar archive format" msgstr "δεν υποστηρίζεται συμπίεση από τη μορφή αρχειοθέτησης tar" @@ -1214,84 +1161,76 @@ msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου TOC “% msgid "could not open TOC file for input: %m" msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου TOC για είσοδο: %m" -#: pg_backup_tar.c:344 +#: pg_backup_tar.c:338 #, c-format msgid "could not find file \"%s\" in archive" msgstr "δεν ήταν δυνατή η εύρεση του αρχείου \"%s\" στην αρχειοθήκη" -#: pg_backup_tar.c:410 +#: pg_backup_tar.c:404 #, c-format msgid "could not generate temporary file name: %m" msgstr "δεν ήταν δυνατή η δημιουργία ονόματος προσωρινού αρχείου: %m" -#: pg_backup_tar.c:421 +#: pg_backup_tar.c:415 #, c-format msgid "could not open temporary file" msgstr "δεν ήταν δυνατό το άνοιγμα του προσωρινού αρχείου" -#: pg_backup_tar.c:448 +#: pg_backup_tar.c:442 #, c-format msgid "could not close tar member" msgstr "δεν ήταν δυνατό το κλείσιμο μέλους tar" -#: pg_backup_tar.c:691 +#: pg_backup_tar.c:685 #, c-format msgid "unexpected COPY statement syntax: \"%s\"" msgstr "μη αναμενόμενη σύνταξη πρότασης COPY: \"%s\"" -#: pg_backup_tar.c:958 +#: pg_backup_tar.c:952 #, c-format msgid "invalid OID for large object (%u)" msgstr "μη έγκυρο OID για μεγάλο αντικείμενο (%u)" -#: pg_backup_tar.c:1105 +#: pg_backup_tar.c:1099 #, c-format msgid "could not close temporary file: %m" msgstr "δεν ήταν δυνατό το κλείσιμο προσωρινού αρχείου: %m" -#: pg_backup_tar.c:1114 +#: pg_backup_tar.c:1108 #, c-format msgid "actual file length (%s) does not match expected (%s)" msgstr "πραγματικό μήκος αρχείου (%s) δεν συμφωνεί με το αναμενόμενο (%s)" -#: pg_backup_tar.c:1171 pg_backup_tar.c:1201 +#: pg_backup_tar.c:1165 pg_backup_tar.c:1196 #, c-format msgid "could not find header for file \"%s\" in tar archive" msgstr "δεν ήταν δυνατή η εύρεση κεφαλίδας για το αρχείο \"%s\" στο αρχείο tar" -#: pg_backup_tar.c:1189 +#: pg_backup_tar.c:1183 #, c-format -msgid "" -"restoring data out of order is not supported in this archive format: \"%s\" " -"is required, but comes before \"%s\" in the archive file." -msgstr "" -"η επαναφορά δεδομένων εκτός σειράς δεν υποστηρίζεται σε αυτήν τη μορφή " -"αρχειοθέτησης: απαιτείται \"%s\", αλλά προηγείται της \"%s\" στο αρχείο " -"αρχειοθέτησης." +msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file." +msgstr "η επαναφορά δεδομένων εκτός σειράς δεν υποστηρίζεται σε αυτήν τη μορφή αρχειοθέτησης: απαιτείται \"%s\", αλλά προηγείται της \"%s\" στο αρχείο αρχειοθέτησης." -#: pg_backup_tar.c:1234 +#: pg_backup_tar.c:1230 #, c-format msgid "incomplete tar header found (%lu byte)" msgid_plural "incomplete tar header found (%lu bytes)" msgstr[0] "βρέθηκε ατελής κεφαλίδα tar (%lu byte)" msgstr[1] "βρέθηκε ατελής κεφαλίδα tar (%lu bytes)" -#: pg_backup_tar.c:1285 +#: pg_backup_tar.c:1281 #, c-format -msgid "" -"corrupt tar header found in %s (expected %d, computed %d) file position %s" -msgstr "" -"αλλοιωμένη κεφαλίδα tar βρέθηκε σε %s (αναμενόμενη %d, υπολογισμένη %d) θέση " -"αρχείου %s" +msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s" +msgstr "αλλοιωμένη κεφαλίδα tar βρέθηκε σε %s (αναμενόμενη %d, υπολογισμένη %d) θέση αρχείου %s" #: pg_backup_utils.c:54 #, c-format msgid "unrecognized section name: \"%s\"" msgstr "μη αναγνωρισμένο όνομα τμήματος: \"%s\"" -#: pg_backup_utils.c:55 pg_dump.c:607 pg_dump.c:624 pg_dumpall.c:338 -#: pg_dumpall.c:348 pg_dumpall.c:357 pg_dumpall.c:366 pg_dumpall.c:374 -#: pg_dumpall.c:388 pg_dumpall.c:464 pg_restore.c:284 pg_restore.c:300 +#: pg_backup_utils.c:55 pg_dump.c:623 pg_dump.c:640 pg_dumpall.c:341 +#: pg_dumpall.c:351 pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:377 +#: pg_dumpall.c:391 pg_dumpall.c:469 pg_restore.c:284 pg_restore.c:300 #: pg_restore.c:318 #, c-format msgid "Try \"%s --help\" for more information.\n" @@ -1302,123 +1241,109 @@ msgstr "Δοκιμάστε “%s —help” για περισσότερες πλ msgid "out of on_exit_nicely slots" msgstr "έλλειψη υποδοχών on_exit_nicely" -#: pg_dump.c:533 +#: pg_dump.c:549 #, c-format msgid "compression level must be in range 0..9" msgstr "το επίπεδο συμπίεσης πρέπει να βρίσκεται στο εύρος 0..9" -#: pg_dump.c:571 +#: pg_dump.c:587 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digits πρέπει να βρίσκονται στο εύρος -15..3" -#: pg_dump.c:594 +#: pg_dump.c:610 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "rows-per-insert πρέπει να βρίσκονται στο εύρος %d..%d" -#: pg_dump.c:622 pg_dumpall.c:346 pg_restore.c:298 +#: pg_dump.c:638 pg_dumpall.c:349 pg_restore.c:298 #, c-format msgid "too many command-line arguments (first is \"%s\")" -msgstr "" -"πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (η πρώτη είναι η “%s”)" +msgstr "πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (η πρώτη είναι η “%s”)" -#: pg_dump.c:643 pg_restore.c:327 +#: pg_dump.c:659 pg_restore.c:327 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" -msgstr "" -"οι επιλογές -s/—schema-only και -a/--data-only δεν είναι δυνατό να " -"χρησιμοποιηθούν μαζί" +msgstr "οι επιλογές -s/—schema-only και -a/--data-only δεν είναι δυνατό να χρησιμοποιηθούν μαζί" -#: pg_dump.c:648 +#: pg_dump.c:664 #, c-format -msgid "" -"options -s/--schema-only and --include-foreign-data cannot be used together" -msgstr "" -"οι επιλογές -s/—schema-only και —include-foreign-data δεν είναι δυνατό να " -"χρησιμοποιηθούν μαζί" +msgid "options -s/--schema-only and --include-foreign-data cannot be used together" +msgstr "οι επιλογές -s/—schema-only και —include-foreign-data δεν είναι δυνατό να χρησιμοποιηθούν μαζί" -#: pg_dump.c:651 +#: pg_dump.c:667 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" -msgstr "" -"η επιλογή —include-foreign-data δεν υποστηρίζεται με παράλληλη δημιουργία " -"αντιγράφων ασφαλείας" +msgstr "η επιλογή —include-foreign-data δεν υποστηρίζεται με παράλληλη δημιουργία αντιγράφων ασφαλείας" -#: pg_dump.c:655 pg_restore.c:333 +#: pg_dump.c:671 pg_restore.c:333 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" -msgstr "" -"οι επιλογές -c/—clean και -a/—data-only δεν είναι δυνατό να χρησιμοποιηθούν " -"μαζί" +msgstr "οι επιλογές -c/—clean και -a/—data-only δεν είναι δυνατό να χρησιμοποιηθούν μαζί" -#: pg_dump.c:660 pg_dumpall.c:381 pg_restore.c:382 +#: pg_dump.c:676 pg_dumpall.c:384 pg_restore.c:382 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "η επιλογή —if-exists απαιτεί την επιλογή -c/—clean" -#: pg_dump.c:667 +#: pg_dump.c:683 #, c-format -msgid "" -"option --on-conflict-do-nothing requires option --inserts, --rows-per-" -"insert, or --column-inserts" -msgstr "" -"η επιλογή —on-conflict-do-nothing απαιτεί την επιλογή —inserts, —rows-per-" -"insert, ή —column-inserts" +msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" +msgstr "η επιλογή —on-conflict-do-nothing απαιτεί την επιλογή —inserts, —rows-per-insert, ή —column-inserts" -#: pg_dump.c:689 +#: pg_dump.c:705 #, c-format -msgid "" -"requested compression not available in this installation -- archive will be " -"uncompressed" -msgstr "" -"η συμπίεση που ζητήθηκε δεν είναι διαθέσιμη σε αυτήν την εγκατάσταση -- η " -"αρχειοθήκη θα είναι ασυμπίεστη" +msgid "requested compression not available in this installation -- archive will be uncompressed" +msgstr "η συμπίεση που ζητήθηκε δεν είναι διαθέσιμη σε αυτήν την εγκατάσταση -- η αρχειοθήκη θα είναι ασυμπίεστη" -#: pg_dump.c:710 pg_restore.c:349 +#: pg_dump.c:726 pg_restore.c:349 #, c-format msgid "invalid number of parallel jobs" msgstr "μη έγκυρος αριθμός παράλληλων εργασιών" -#: pg_dump.c:714 +#: pg_dump.c:730 #, c-format msgid "parallel backup only supported by the directory format" msgstr "παράλληλο αντίγραφο ασφαλείας υποστηρίζεται μόνο από μορφή καταλόγου" -#: pg_dump.c:769 +#: pg_dump.c:785 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" "Run with --no-synchronized-snapshots instead if you do not need\n" "synchronized snapshots." msgstr "" -"Τα συγχρονισμένα στιγμιότυπα δεν υποστηρίζονται από αυτήν την έκδοση " -"διακομιστή.\n" +"Τα συγχρονισμένα στιγμιότυπα δεν υποστηρίζονται από αυτήν την έκδοση διακομιστή.\n" "Εκτελέστε με —no-synchronized-snapshots, εάν δεν χρειάζεστε\n" "συγχρονισμένα στιγμιότυπα." -#: pg_dump.c:775 +#: pg_dump.c:791 #, c-format msgid "Exported snapshots are not supported by this server version." -msgstr "" -"Τα εξαγόμενα στιγμιότυπα δεν υποστηρίζονται από αυτήν την έκδοση διακομιστή." +msgstr "Τα εξαγόμενα στιγμιότυπα δεν υποστηρίζονται από αυτήν την έκδοση διακομιστή." -#: pg_dump.c:787 +#: pg_dump.c:803 #, c-format msgid "last built-in OID is %u" msgstr "το τελευταίο ενσωματωμένο OID είναι %u" -#: pg_dump.c:796 +#: pg_dump.c:812 #, c-format msgid "no matching schemas were found" msgstr "δεν βρέθηκαν σχήματα που να ταιριάζουν" -#: pg_dump.c:810 +#: pg_dump.c:826 #, c-format msgid "no matching tables were found" msgstr "δεν βρέθηκαν πίνακες που να ταιριάζουν" -#: pg_dump.c:990 +#: pg_dump.c:848 +#, fuzzy, c-format +#| msgid "no matching tables were found" +msgid "no matching extensions were found" +msgstr "δεν βρέθηκαν πίνακες που να ταιριάζουν" + +#: pg_dump.c:1020 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1427,17 +1352,17 @@ msgstr "" "%s αποθέτει μια βάση δεδομένων ως αρχείο κειμένου ή σε άλλες μορφές.\n" "\n" -#: pg_dump.c:991 pg_dumpall.c:617 pg_restore.c:462 +#: pg_dump.c:1021 pg_dumpall.c:622 pg_restore.c:462 #, c-format msgid "Usage:\n" msgstr "Χρήση:\n" -#: pg_dump.c:992 +#: pg_dump.c:1022 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]… [DBNAME]\n" -#: pg_dump.c:994 pg_dumpall.c:620 pg_restore.c:465 +#: pg_dump.c:1024 pg_dumpall.c:625 pg_restore.c:465 #, c-format msgid "" "\n" @@ -1446,72 +1371,56 @@ msgstr "" "\n" "Γενικές επιλογές:\n" -#: pg_dump.c:995 +#: pg_dump.c:1025 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, —file=FILENAME αρχείο εξόδου ή όνομα καταλόγου\n" -#: pg_dump.c:996 +#: pg_dump.c:1026 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" " plain text (default))\n" msgstr "" -" -F, —format=c|d|t|p μορφή αρχείου εξόδου (προσαρμοσμένη, " -"κατάλογος, tar,\n" +" -F, —format=c|d|t|p μορφή αρχείου εξόδου (προσαρμοσμένη, κατάλογος, tar,\n" " απλό κείμενο (προεπιλογή))\n" -#: pg_dump.c:998 +#: pg_dump.c:1028 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" -msgstr "" -" -j, —jobs=NUM χρησιμοποιήστε τόσες πολλές παράλληλες " -"εργασίες για απόθεση\n" +msgstr " -j, —jobs=NUM χρησιμοποιήστε τόσες πολλές παράλληλες εργασίες για απόθεση\n" -#: pg_dump.c:999 pg_dumpall.c:622 +#: pg_dump.c:1029 pg_dumpall.c:627 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, —verbose περιφραστική λειτουργία\n" -#: pg_dump.c:1000 pg_dumpall.c:623 +#: pg_dump.c:1030 pg_dumpall.c:628 #, c-format msgid " -V, --version output version information, then exit\n" -msgstr "" -" -V, —version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, " -"έξοδος\n" +msgstr " -V, —version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, έξοδος\n" -#: pg_dump.c:1001 +#: pg_dump.c:1031 #, c-format -msgid "" -" -Z, --compress=0-9 compression level for compressed formats\n" -msgstr "" -" -Z, —compress=0-9 επίπεδο συμπίεσης για συμπιεσμένες μορφές\n" +msgid " -Z, --compress=0-9 compression level for compressed formats\n" +msgstr " -Z, —compress=0-9 επίπεδο συμπίεσης για συμπιεσμένες μορφές\n" -#: pg_dump.c:1002 pg_dumpall.c:624 +#: pg_dump.c:1032 pg_dumpall.c:629 #, c-format -msgid "" -" --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" -msgstr "" -" —lock-wait-timeout=TIMEOUT αποτυγχάνει μετά την αναμονή TIMEOUT για το " -"κλείδωμα πίνακα\n" +msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" +msgstr " —lock-wait-timeout=TIMEOUT αποτυγχάνει μετά την αναμονή TIMEOUT για το κλείδωμα πίνακα\n" -#: pg_dump.c:1003 pg_dumpall.c:651 +#: pg_dump.c:1033 pg_dumpall.c:656 #, c-format -msgid "" -" --no-sync do not wait for changes to be written safely " -"to disk\n" -msgstr "" -" —no-sync να μην αναμένει την ασφαλή εγγραφή αλλαγών " -"στον δίσκο\n" +msgid " --no-sync do not wait for changes to be written safely to disk\n" +msgstr " —no-sync να μην αναμένει την ασφαλή εγγραφή αλλαγών στον δίσκο\n" -#: pg_dump.c:1004 pg_dumpall.c:625 +#: pg_dump.c:1034 pg_dumpall.c:630 #, c-format msgid " -?, --help show this help, then exit\n" -msgstr "" -" -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, και μετά " -"έξοδος\n" +msgstr " -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, και μετά έξοδος\n" -#: pg_dump.c:1006 pg_dumpall.c:626 +#: pg_dump.c:1036 pg_dumpall.c:631 #, c-format msgid "" "\n" @@ -1520,170 +1429,131 @@ msgstr "" "\n" "Επιλογές που ελέγχουν το περιεχόμενο εξόδου:\n" -#: pg_dump.c:1007 pg_dumpall.c:627 +#: pg_dump.c:1037 pg_dumpall.c:632 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" -msgstr "" -" -a, —data-only αποθέτει μόνο τα δεδομένα, όχι το σχήμα\n" +msgstr " -a, —data-only αποθέτει μόνο τα δεδομένα, όχι το σχήμα\n" -#: pg_dump.c:1008 +#: pg_dump.c:1038 #, c-format msgid " -b, --blobs include large objects in dump\n" -msgstr "" -" -b, —blobs περιέλαβε μεγάλα αντικείμενα στην απόθεση\n" +msgstr " -b, —blobs περιέλαβε μεγάλα αντικείμενα στην απόθεση\n" -#: pg_dump.c:1009 +#: pg_dump.c:1039 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" -msgstr "" -" -B, —no-blobs εξαίρεσε μεγάλα αντικείμενα στην απόθεση\n" +msgstr " -B, —no-blobs εξαίρεσε μεγάλα αντικείμενα στην απόθεση\n" -#: pg_dump.c:1010 pg_restore.c:476 +#: pg_dump.c:1040 pg_restore.c:476 #, c-format -msgid "" -" -c, --clean clean (drop) database objects before " -"recreating\n" -msgstr "" -" -c, —clean καθάρισε (εγκατάληψε) αντικείμενα βάσης " -"δεδομένων πριν από την αναδημιουργία\n" +msgid " -c, --clean clean (drop) database objects before recreating\n" +msgstr " -c, —clean καθάρισε (εγκατάληψε) αντικείμενα βάσης δεδομένων πριν από την αναδημιουργία\n" -#: pg_dump.c:1011 +#: pg_dump.c:1041 #, c-format -msgid "" -" -C, --create include commands to create database in dump\n" -msgstr "" -" -C, —create συμπεριέλαβε εντολές για τη δημιουργία βάσης " -"δεδομένων στην απόθεση\n" +msgid " -C, --create include commands to create database in dump\n" +msgstr " -C, —create συμπεριέλαβε εντολές για τη δημιουργία βάσης δεδομένων στην απόθεση\n" + +#: pg_dump.c:1042 +#, fuzzy, c-format +#| msgid " -t, --table=PATTERN dump the specified table(s) only\n" +msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" +msgstr " -t, —table=PATTERN απόθεση μόνο των καθορισμένων πινάκων\n" -#: pg_dump.c:1012 pg_dumpall.c:629 +#: pg_dump.c:1043 pg_dumpall.c:634 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" -msgstr "" -" -E, —encoding=ENCODING απόθεσε τα δεδομένα στην κωδικοποίηση " -"ENCODING\n" +msgstr " -E, —encoding=ENCODING απόθεσε τα δεδομένα στην κωδικοποίηση ENCODING\n" -#: pg_dump.c:1013 +#: pg_dump.c:1044 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" -msgstr "" -" -n, —schema=PATTERN απόθεση μόνο για τα καθορισμένα σχήματα\n" +msgstr " -n, —schema=PATTERN απόθεση μόνο για τα καθορισμένα σχήματα\n" -#: pg_dump.c:1014 +#: pg_dump.c:1045 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, —exclude-schema=PATTERN να ΜΗΝ αποθέσει τα καθορισμένα σχήματα\n" -#: pg_dump.c:1015 +#: pg_dump.c:1046 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" " plain-text format\n" msgstr "" -" -O, —no-owner παράλειπε την αποκατάσταση της κυριότητας των " -"αντικειμένων στη\n" +" -O, —no-owner παράλειπε την αποκατάσταση της κυριότητας των αντικειμένων στη\n" " μορφή απλού κειμένου\n" -#: pg_dump.c:1017 pg_dumpall.c:633 +#: pg_dump.c:1048 pg_dumpall.c:638 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, —schema-only απόθεση μόνο το σχήμα, χωρίς δεδομένα\n" -#: pg_dump.c:1018 +#: pg_dump.c:1049 #, c-format -msgid "" -" -S, --superuser=NAME superuser user name to use in plain-text " -"format\n" -msgstr "" -" -S, —superuser=NAME όνομα χρήστη υπερ-χρήστη που θα χρησιμοποιηθεί " -"σε μορφή απλού κειμένου\n" +msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" +msgstr " -S, —superuser=NAME όνομα χρήστη υπερ-χρήστη που θα χρησιμοποιηθεί σε μορφή απλού κειμένου\n" -#: pg_dump.c:1019 +#: pg_dump.c:1050 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, —table=PATTERN απόθεση μόνο των καθορισμένων πινάκων\n" -#: pg_dump.c:1020 +#: pg_dump.c:1051 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" -msgstr "" -" -T, —exclude-table=PATTERN να ΜΗΝ αποθέτει τους καθορισμένους πίνακες\n" +msgstr " -T, —exclude-table=PATTERN να ΜΗΝ αποθέτει τους καθορισμένους πίνακες\n" -#: pg_dump.c:1021 pg_dumpall.c:636 +#: pg_dump.c:1052 pg_dumpall.c:641 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" -msgstr "" -" -x, —no-privileges να ΜΗΝ αποθέτει δικαιώματα (εκχώρηση/" -"ανάκληση)\n" +msgstr " -x, —no-privileges να ΜΗΝ αποθέτει δικαιώματα (εκχώρηση/ανάκληση)\n" -#: pg_dump.c:1022 pg_dumpall.c:637 +#: pg_dump.c:1053 pg_dumpall.c:642 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" -msgstr "" -" —binary-upgrade μόνο για χρήση μόνο από βοηθητικά προγράμματα " -"αναβάθμισης\n" +msgstr " —binary-upgrade μόνο για χρήση μόνο από βοηθητικά προγράμματα αναβάθμισης\n" -#: pg_dump.c:1023 pg_dumpall.c:638 +#: pg_dump.c:1054 pg_dumpall.c:643 #, c-format -msgid "" -" --column-inserts dump data as INSERT commands with column " -"names\n" -msgstr "" -" —column-inserts αποθέτει δεδομένα ως εντολές INSERT με ονόματα " -"στηλών\n" +msgid " --column-inserts dump data as INSERT commands with column names\n" +msgstr " —column-inserts αποθέτει δεδομένα ως εντολές INSERT με ονόματα στηλών\n" -#: pg_dump.c:1024 pg_dumpall.c:639 +#: pg_dump.c:1055 pg_dumpall.c:644 #, c-format -msgid "" -" --disable-dollar-quoting disable dollar quoting, use SQL standard " -"quoting\n" -msgstr "" -" —disable-dollar-quoting απενεργοποίησε την παράθεση δολαρίου, χρήση " -"τυποποιημένης παράθεσης SQL\n" +msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" +msgstr " —disable-dollar-quoting απενεργοποίησε την παράθεση δολαρίου, χρήση τυποποιημένης παράθεσης SQL\n" -#: pg_dump.c:1025 pg_dumpall.c:640 pg_restore.c:493 +#: pg_dump.c:1056 pg_dumpall.c:645 pg_restore.c:493 #, c-format -msgid "" -" --disable-triggers disable triggers during data-only restore\n" -msgstr "" -" —disable-triggers απενεργοποίησε τα εναύσματα κατά την επαναφορά " -"δεδομένων-μόνο\n" +msgid " --disable-triggers disable triggers during data-only restore\n" +msgstr " —disable-triggers απενεργοποίησε τα εναύσματα κατά την επαναφορά δεδομένων-μόνο\n" -#: pg_dump.c:1026 +#: pg_dump.c:1057 #, c-format msgid "" -" --enable-row-security enable row security (dump only content user " -"has\n" +" --enable-row-security enable row security (dump only content user has\n" " access to)\n" msgstr "" -" —enable-row-security ενεργοποιήστε την ασφάλεια σειρών (απόθεση " -"μόνο του περιεχομένου που ο χρήστης έχει\n" +" —enable-row-security ενεργοποιήστε την ασφάλεια σειρών (απόθεση μόνο του περιεχομένου που ο χρήστης έχει\n" " πρόσβαση)\n" -#: pg_dump.c:1028 +#: pg_dump.c:1059 #, c-format -msgid "" -" --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" -msgstr "" -" —exclude-table-data=PATTERN να ΜΗΝ αποθέσει δεδομένα για τους " -"καθορισμένους πίνακες\n" +msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" +msgstr " —exclude-table-data=PATTERN να ΜΗΝ αποθέσει δεδομένα για τους καθορισμένους πίνακες\n" -#: pg_dump.c:1029 pg_dumpall.c:642 +#: pg_dump.c:1060 pg_dumpall.c:647 #, c-format -msgid "" -" --extra-float-digits=NUM override default setting for " -"extra_float_digits\n" -msgstr "" -" --extra-float-digits=NUM παράκαμψε την προεπιλεγμένη ρύθμιση για " -"extra_float_digits\n" +msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" +msgstr " --extra-float-digits=NUM παράκαμψε την προεπιλεγμένη ρύθμιση για extra_float_digits\n" -#: pg_dump.c:1030 pg_dumpall.c:643 pg_restore.c:495 +#: pg_dump.c:1061 pg_dumpall.c:648 pg_restore.c:495 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" -msgstr "" -" —if-exists χρησιμοποίησε το IF EXISTS κατά την εγκαταλήψη " -"αντικειμένων\n" +msgstr " —if-exists χρησιμοποίησε το IF EXISTS κατά την εγκαταλήψη αντικειμένων\n" -#: pg_dump.c:1031 +#: pg_dump.c:1062 #, c-format msgid "" " --include-foreign-data=PATTERN\n" @@ -1694,139 +1564,108 @@ msgstr "" " περιέλαβε δεδομένα ξένων πινάκων για\n" " διακομιστές που ταιριάζουν με PATTERN\n" -#: pg_dump.c:1034 pg_dumpall.c:644 +#: pg_dump.c:1065 pg_dumpall.c:649 #, c-format -msgid "" -" --inserts dump data as INSERT commands, rather than " -"COPY\n" -msgstr "" -" —inserts απόθεσε δεδομένα ως εντολές INSERT, αντί για " -"COPY\n" +msgid " --inserts dump data as INSERT commands, rather than COPY\n" +msgstr " —inserts απόθεσε δεδομένα ως εντολές INSERT, αντί για COPY\n" -#: pg_dump.c:1035 pg_dumpall.c:645 +#: pg_dump.c:1066 pg_dumpall.c:650 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" -msgstr "" -" —load-via-partition-root φόρτωσε διαχωρίσματα μέσω του βασικού πίνακα\n" +msgstr " —load-via-partition-root φόρτωσε διαχωρίσματα μέσω του βασικού πίνακα\n" -#: pg_dump.c:1036 pg_dumpall.c:646 +#: pg_dump.c:1067 pg_dumpall.c:651 #, c-format msgid " --no-comments do not dump comments\n" msgstr " —no-comments να μην αποθέσεις σχόλια\n" -#: pg_dump.c:1037 pg_dumpall.c:647 +#: pg_dump.c:1068 pg_dumpall.c:652 #, c-format msgid " --no-publications do not dump publications\n" msgstr " —no-publications να μην αποθέσεις δημοσιεύσεις\n" -#: pg_dump.c:1038 pg_dumpall.c:649 +#: pg_dump.c:1069 pg_dumpall.c:654 #, c-format msgid " --no-security-labels do not dump security label assignments\n" -msgstr "" -" —no-security-labels να μην αποθέσεις αντιστοιχίσεις ετικετών " -"ασφαλείας\n" +msgstr " —no-security-labels να μην αποθέσεις αντιστοιχίσεις ετικετών ασφαλείας\n" -#: pg_dump.c:1039 pg_dumpall.c:650 +#: pg_dump.c:1070 pg_dumpall.c:655 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " —no-publications να μην αποθέσεις συνδρομές\n" -#: pg_dump.c:1040 +#: pg_dump.c:1071 #, c-format -msgid "" -" --no-synchronized-snapshots do not use synchronized snapshots in parallel " -"jobs\n" -msgstr "" -" —no-synchronized-snapshots να μην χρησιμοποιήσει συγχρονισμένα " -"στιγμιότυπα σε παράλληλες εργασίες\n" +msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" +msgstr " —no-synchronized-snapshots να μην χρησιμοποιήσει συγχρονισμένα στιγμιότυπα σε παράλληλες εργασίες\n" -#: pg_dump.c:1041 pg_dumpall.c:652 +#: pg_dump.c:1072 pg_dumpall.c:657 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " —no-tablespaces να μην αποθέσει αναθέσεις πινακοχώρος\n" -#: pg_dump.c:1042 pg_dumpall.c:653 +#: pg_dump.c:1073 pg_dumpall.c:658 +#, fuzzy, c-format +#| msgid " --no-comments do not dump comments\n" +msgid " --no-toast-compression do not dump TOAST compression methods\n" +msgstr " —no-comments να μην αποθέσεις σχόλια\n" + +#: pg_dump.c:1074 pg_dumpall.c:659 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" -msgstr "" -" —no-unlogged-table-data να μην αποθέσει μη δεδομένα μη-καταγραμένου " -"πίνακα\n" +msgstr " —no-unlogged-table-data να μην αποθέσει μη δεδομένα μη-καταγραμένου πίνακα\n" -#: pg_dump.c:1043 pg_dumpall.c:654 +#: pg_dump.c:1075 pg_dumpall.c:660 #, c-format -msgid "" -" --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT " -"commands\n" -msgstr "" -" —on-conflict-do-nothing προσθέστε ON CONFLICT DO NOTHING στις εντολές " -"INSERT\n" +msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" +msgstr " —on-conflict-do-nothing προσθέστε ON CONFLICT DO NOTHING στις εντολές INSERT\n" -#: pg_dump.c:1044 pg_dumpall.c:655 +#: pg_dump.c:1076 pg_dumpall.c:661 #, c-format -msgid "" -" --quote-all-identifiers quote all identifiers, even if not key words\n" -msgstr "" -" —quote-all-identifiers παράθεσε όλα τα αναγνωριστικά, ακόμα και αν " -"δεν είναι λέξεις κλειδιά\n" +msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" +msgstr " —quote-all-identifiers παράθεσε όλα τα αναγνωριστικά, ακόμα και αν δεν είναι λέξεις κλειδιά\n" -#: pg_dump.c:1045 pg_dumpall.c:656 +#: pg_dump.c:1077 pg_dumpall.c:662 #, c-format -msgid "" -" --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" -msgstr "" -" —rows-per-insert=NROWS αριθμός γραμμών ανά INSERT; υπονοεί —inserts\n" +msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" +msgstr " —rows-per-insert=NROWS αριθμός γραμμών ανά INSERT; υπονοεί —inserts\n" -#: pg_dump.c:1046 +#: pg_dump.c:1078 #, c-format -msgid "" -" --section=SECTION dump named section (pre-data, data, or post-" -"data)\n" -msgstr "" -" —section=SECTION απόθεσε ονομασμένες ενότητες (προ-δεδομένα, " -"δεδομένα, ή μετα-δεδομένα)\n" +msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" +msgstr " —section=SECTION απόθεσε ονομασμένες ενότητες (προ-δεδομένα, δεδομένα, ή μετα-δεδομένα)\n" -#: pg_dump.c:1047 +#: pg_dump.c:1079 #, c-format -msgid "" -" --serializable-deferrable wait until the dump can run without " -"anomalies\n" -msgstr "" -" —serializable-deferrable ανάμενε έως ότου η απόθεση να μπορεί να τρέξει " -"χωρίς ανωμαλίες\n" +msgid " --serializable-deferrable wait until the dump can run without anomalies\n" +msgstr " —serializable-deferrable ανάμενε έως ότου η απόθεση να μπορεί να τρέξει χωρίς ανωμαλίες\n" -#: pg_dump.c:1048 +#: pg_dump.c:1080 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" -msgstr "" -" —snapshot=SNAPSHOT χρησιμοποίησε το δοσμένο στιγμιότυπο για την " -"απόθεση\n" +msgstr " —snapshot=SNAPSHOT χρησιμοποίησε το δοσμένο στιγμιότυπο για την απόθεση\n" -#: pg_dump.c:1049 pg_restore.c:504 +#: pg_dump.c:1081 pg_restore.c:504 #, c-format msgid "" -" --strict-names require table and/or schema include patterns " -"to\n" +" --strict-names require table and/or schema include patterns to\n" " match at least one entity each\n" msgstr "" -" —strict-names απαίτησε τα μοτίβα περίληψης πίνακα ή/και " -"σχήματος να\n" -" αντιστοιχήσουν τουλάχιστον μία οντότητα το " -"καθένα\n" +" —strict-names απαίτησε τα μοτίβα περίληψης πίνακα ή/και σχήματος να\n" +" αντιστοιχήσουν τουλάχιστον μία οντότητα το καθένα\n" -#: pg_dump.c:1051 pg_dumpall.c:657 pg_restore.c:506 +#: pg_dump.c:1083 pg_dumpall.c:663 pg_restore.c:506 #, c-format msgid "" " --use-set-session-authorization\n" -" use SET SESSION AUTHORIZATION commands " -"instead of\n" +" use SET SESSION AUTHORIZATION commands instead of\n" " ALTER OWNER commands to set ownership\n" msgstr "" " —use-set-session-authorization\n" -" χρησιμοποιήσε τις εντολές SET SESSION " -"AUTHORIZATION αντί των\n" +" χρησιμοποιήσε τις εντολές SET SESSION AUTHORIZATION αντί των\n" " ALTER OWNER για τον ορισμό ιδιοκτησίας\n" -#: pg_dump.c:1055 pg_dumpall.c:661 pg_restore.c:510 +#: pg_dump.c:1087 pg_dumpall.c:667 pg_restore.c:510 #, c-format msgid "" "\n" @@ -1835,48 +1674,42 @@ msgstr "" "\n" "Επιλογές σύνδεσης:\n" -#: pg_dump.c:1056 +#: pg_dump.c:1088 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, —dbname=DBNAME βάση δεδομένων για απόθεση\n" -#: pg_dump.c:1057 pg_dumpall.c:663 pg_restore.c:511 +#: pg_dump.c:1089 pg_dumpall.c:669 pg_restore.c:511 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" -msgstr "" -" -h, —host=HOSTNAME διακομιστής βάσης δεδομένων ή κατάλογος υποδοχών\n" +msgstr " -h, —host=HOSTNAME διακομιστής βάσης δεδομένων ή κατάλογος υποδοχών\n" -#: pg_dump.c:1058 pg_dumpall.c:665 pg_restore.c:512 +#: pg_dump.c:1090 pg_dumpall.c:671 pg_restore.c:512 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, —port=PORT θύρα διακομιστή βάσης δεδομένων\n" -#: pg_dump.c:1059 pg_dumpall.c:666 pg_restore.c:513 +#: pg_dump.c:1091 pg_dumpall.c:672 pg_restore.c:513 #, c-format msgid " -U, --username=NAME connect as specified database user\n" -msgstr "" -" -U, —username=USERNAME σύνδεση ως ο ορισμένος χρήστης βάσης δεδομένων\n" +msgstr " -U, —username=USERNAME σύνδεση ως ο ορισμένος χρήστης βάσης δεδομένων\n" -#: pg_dump.c:1060 pg_dumpall.c:667 pg_restore.c:514 +#: pg_dump.c:1092 pg_dumpall.c:673 pg_restore.c:514 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, —no-password να μην ζητείται ποτέ κωδικός πρόσβασης\n" -#: pg_dump.c:1061 pg_dumpall.c:668 pg_restore.c:515 +#: pg_dump.c:1093 pg_dumpall.c:674 pg_restore.c:515 #, c-format -msgid "" -" -W, --password force password prompt (should happen " -"automatically)\n" -msgstr "" -" -W, —password αναγκαστική προτροπή κωδικού πρόσβασης (πρέπει να " -"συμβεί αυτόματα)\n" +msgid " -W, --password force password prompt (should happen automatically)\n" +msgstr " -W, —password αναγκαστική προτροπή κωδικού πρόσβασης (πρέπει να συμβεί αυτόματα)\n" -#: pg_dump.c:1062 pg_dumpall.c:669 +#: pg_dump.c:1094 pg_dumpall.c:675 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " —role=ROLENAME κάνε SET ROLE πριν την απόθεση\n" -#: pg_dump.c:1064 +#: pg_dump.c:1096 #, c-format msgid "" "\n" @@ -1889,588 +1722,565 @@ msgstr "" "περιβάλλοντος PGDATABASE .\n" "\n" -#: pg_dump.c:1066 pg_dumpall.c:673 pg_restore.c:522 +#: pg_dump.c:1098 pg_dumpall.c:679 pg_restore.c:522 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Υποβάλετε αναφορές σφάλματων σε <%s>.\n" -#: pg_dump.c:1067 pg_dumpall.c:674 pg_restore.c:523 +#: pg_dump.c:1099 pg_dumpall.c:680 pg_restore.c:523 #, c-format msgid "%s home page: <%s>\n" msgstr "%s αρχική σελίδα: <%s>\n" -#: pg_dump.c:1086 pg_dumpall.c:499 +#: pg_dump.c:1118 pg_dumpall.c:504 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "καθορίστηκε μη έγκυρη κωδικοποίηση προγράμματος-πελάτη \"%s\"" -#: pg_dump.c:1232 +#: pg_dump.c:1264 #, c-format msgid "" -"Synchronized snapshots on standby servers are not supported by this server " -"version.\n" +"Synchronized snapshots on standby servers are not supported by this server version.\n" "Run with --no-synchronized-snapshots instead if you do not need\n" "synchronized snapshots." msgstr "" -"Τα συγχρονισμένα στιγμιότυπα σε διακομιστές αναμονής δεν υποστηρίζονται από " -"αυτήν την έκδοση διακομιστή.\n" +"Τα συγχρονισμένα στιγμιότυπα σε διακομιστές αναμονής δεν υποστηρίζονται από αυτήν την έκδοση διακομιστή.\n" "Εκτελέστε με —no-synchronized-snapshots, εάν δεν χρειάζεστε\n" "συγχρονισμένα στιγμιότυπα." -#: pg_dump.c:1301 +#: pg_dump.c:1333 #, c-format msgid "invalid output format \"%s\" specified" msgstr "ορίστηκε μη έγκυρη μορφή εξόδου “%s”" -#: pg_dump.c:1339 +#: pg_dump.c:1371 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "δεν βρέθηκαν σχήματα που να ταιριάζουν με το μοτίβο \"%s\"" -#: pg_dump.c:1386 +#: pg_dump.c:1418 +#, fuzzy, c-format +#| msgid "no matching tables were found for pattern \"%s\"" +msgid "no matching extensions were found for pattern \"%s\"" +msgstr "δεν βρέθηκαν πίνακες που να ταιριάζουν για το μοτίβο \"%s\"" + +#: pg_dump.c:1465 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "δεν βρέθηκαν ξένοι διακομιστές που να ταιριάζουν με το μοτίβο \"%s\"" -#: pg_dump.c:1449 +#: pg_dump.c:1528 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "δεν βρέθηκαν πίνακες που να ταιριάζουν για το μοτίβο \"%s\"" -#: pg_dump.c:1862 +#: pg_dump.c:1951 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "αποθέτει τα δεδομένα του πίνακα “%s.%s”" -#: pg_dump.c:1969 +#: pg_dump.c:2058 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." -msgstr "" -"Η απόθεση των περιεχομένων του πίνακα \"%s\" απέτυχε: PQgetCopyData() " -"απέτυχε." +msgstr "Η απόθεση των περιεχομένων του πίνακα \"%s\" απέτυχε: PQgetCopyData() απέτυχε." -#: pg_dump.c:1970 pg_dump.c:1980 +#: pg_dump.c:2059 pg_dump.c:2069 #, c-format msgid "Error message from server: %s" msgstr "Μήνυμα σφάλματος από διακομιστή: %s" -#: pg_dump.c:1971 pg_dump.c:1981 +#: pg_dump.c:2060 pg_dump.c:2070 #, c-format msgid "The command was: %s" msgstr "Η εντολή ήταν: %s" -#: pg_dump.c:1979 +#: pg_dump.c:2068 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." -msgstr "" -"Η απόθεση των περιεχομένων του πίνακα \"%s\" απέτυχε: PQgetResult() απέτυχε." +msgstr "Η απόθεση των περιεχομένων του πίνακα \"%s\" απέτυχε: PQgetResult() απέτυχε." -#: pg_dump.c:2739 +#: pg_dump.c:2828 #, c-format msgid "saving database definition" msgstr "αποθήκευση ορισμού βάσης δεδομένων" -#: pg_dump.c:3211 +#: pg_dump.c:3300 #, c-format msgid "saving encoding = %s" msgstr "αποθηκεύει encoding = %s" -#: pg_dump.c:3236 +#: pg_dump.c:3325 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "αποθηκεύει standard_conforming_strings = %s" -#: pg_dump.c:3275 +#: pg_dump.c:3364 #, c-format msgid "could not parse result of current_schemas()" msgstr "δεν ήταν δυνατή η ανάλυση του αποτελέσματος της current_schemas()" -#: pg_dump.c:3294 +#: pg_dump.c:3383 #, c-format msgid "saving search_path = %s" msgstr "αποθηκεύει search_path = %s" -#: pg_dump.c:3334 +#: pg_dump.c:3436 +#, c-format +msgid "saving default_toast_compression = %s" +msgstr "" + +#: pg_dump.c:3475 #, c-format msgid "reading large objects" msgstr "ανάγνωση μεγάλων αντικειμένων" -#: pg_dump.c:3516 +#: pg_dump.c:3657 #, c-format msgid "saving large objects" msgstr "αποθηκεύει μεγάλων αντικειμένων" -#: pg_dump.c:3562 +#: pg_dump.c:3703 #, c-format msgid "error reading large object %u: %s" msgstr "σφάλμα κατά την ανάγνωση %u μεγάλου αντικειμένου: %s" -#: pg_dump.c:3614 +#: pg_dump.c:3755 #, c-format msgid "reading row security enabled for table \"%s.%s\"" msgstr "ανάγνωση ενεργοποιημένης ασφάλειας γραμμής για τον πίνακα \"%s.%s\"" -#: pg_dump.c:3645 +#: pg_dump.c:3786 #, c-format msgid "reading policies for table \"%s.%s\"" msgstr "ανάγνωση πολιτικών για τον πίνακα \"%s.%s\"" -#: pg_dump.c:3797 +#: pg_dump.c:3938 #, c-format msgid "unexpected policy command type: %c" msgstr "μη αναμενόμενος τύπος εντολής πολιτικής: %c" -#: pg_dump.c:3951 +#: pg_dump.c:4092 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "ο κάτοχος της δημοσίευσης \"%s\" φαίνεται να μην είναι έγκυρος" -#: pg_dump.c:4241 +#: pg_dump.c:4384 #, c-format msgid "subscriptions not dumped because current user is not a superuser" -msgstr "" -"οι συνδρομές δεν απορρίπτονται, επειδή ο τρέχων χρήστης δεν είναι υπερχρήστης" +msgstr "οι συνδρομές δεν απορρίπτονται, επειδή ο τρέχων χρήστης δεν είναι υπερχρήστης" -#: pg_dump.c:4295 +#: pg_dump.c:4455 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "ο κάτοχος της συνδρομής \"%s\" φαίνεται να μην είναι έγκυρος" -#: pg_dump.c:4339 +#: pg_dump.c:4498 #, c-format msgid "could not parse subpublications array" msgstr "δεν ήταν δυνατή η ανάλυση της συστυχίας υποδημοσιεύσεων" -#: pg_dump.c:4661 +#: pg_dump.c:4856 #, c-format msgid "could not find parent extension for %s %s" msgstr "δεν ήταν δυνατή η εύρεση γονικής επέκτασης για %s %s" -#: pg_dump.c:4793 +#: pg_dump.c:4988 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "ο κάτοχος του σχήματος \"%s\" φαίνεται να μην είναι έγκυρος" -#: pg_dump.c:4816 +#: pg_dump.c:5011 #, c-format msgid "schema with OID %u does not exist" msgstr "το σχήμα με %u OID δεν υπάρχει" -#: pg_dump.c:5141 +#: pg_dump.c:5340 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "ο κάτοχος του τύπου δεδομένων \"%s\" φαίνεται να μην είναι έγκυρος" -#: pg_dump.c:5226 +#: pg_dump.c:5424 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "ο κάτοχος του χειριστή “%s” φαίνεται να μην είναι έγκυρος" -#: pg_dump.c:5528 +#: pg_dump.c:5723 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "ο κάτοχος της κλάσης χειριστή \"%s\" φαίνεται να μην είναι έγκυρος" -#: pg_dump.c:5612 +#: pg_dump.c:5806 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" -msgstr "" -"ο κάτοχος της οικογένειας χειριστών \"%s\" φαίνεται να μην είναι έγκυρος" +msgstr "ο κάτοχος της οικογένειας χειριστών \"%s\" φαίνεται να μην είναι έγκυρος" -#: pg_dump.c:5781 +#: pg_dump.c:5974 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" -msgstr "" -"ο κάτοχος της συνάρτησης συγκεντρωτικών αποτελεσμάτων \"%s\" φαίνεται να μην " -"είναι έγκυρος" +msgstr "ο κάτοχος της συνάρτησης συγκεντρωτικών αποτελεσμάτων \"%s\" φαίνεται να μην είναι έγκυρος" -#: pg_dump.c:6041 +#: pg_dump.c:6233 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "ο κάτοχος της συνάρτησης \"%s\" φαίνεται να μην είναι έγκυρος" -#: pg_dump.c:6869 +#: pg_dump.c:7060 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "ο κάτοχος του πίνακα \"%s\" φαίνεται να μην είναι έγκυρος" -#: pg_dump.c:6911 pg_dump.c:17426 +#: pg_dump.c:7102 pg_dump.c:17493 #, c-format -msgid "" -"failed sanity check, parent table with OID %u of sequence with OID %u not " -"found" -msgstr "" -"απέτυχε ο έλεγχος ακεραιότητας, ο γονικός πίνακας με OID %u της ακολουθίας " -"με OID %u δεν βρέθηκε" +msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" +msgstr "απέτυχε ο έλεγχος ακεραιότητας, ο γονικός πίνακας με OID %u της ακολουθίας με OID %u δεν βρέθηκε" -#: pg_dump.c:7053 +#: pg_dump.c:7241 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "ανάγνωση ευρετηρίων για τον πίνακα \"%s.%s\"" -#: pg_dump.c:7468 +#: pg_dump.c:7655 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "ανάγνωση περιορισμών ξένου κλειδιού για τον πίνακα \"%s.%s\"" -#: pg_dump.c:7749 +#: pg_dump.c:7934 #, c-format -msgid "" -"failed sanity check, parent table with OID %u of pg_rewrite entry with OID " -"%u not found" -msgstr "" -"απέτυχε ο έλεγχος ακεραιότητας, ο γονικός πίνακας με OID %u της καταχώρησης " -"pg_rewrite με OID %u δεν βρέθηκε" +msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" +msgstr "απέτυχε ο έλεγχος ακεραιότητας, ο γονικός πίνακας με OID %u της καταχώρησης pg_rewrite με OID %u δεν βρέθηκε" -#: pg_dump.c:7832 +#: pg_dump.c:8017 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "ανάγνωση εναυσμάτων για τον πίνακα “%s.%s”" -#: pg_dump.c:7965 +#: pg_dump.c:8150 #, c-format -msgid "" -"query produced null referenced table name for foreign key trigger \"%s\" on " -"table \"%s\" (OID of table: %u)" -msgstr "" -"το ερώτημα παρήγαγε null πίνακα αναφοράς για το έναυσμα ξένου κλειδιού \"%s" -"\" στον πίνακα \"%s\" (OID του πίνακα: %u)" +msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" +msgstr "το ερώτημα παρήγαγε null πίνακα αναφοράς για το έναυσμα ξένου κλειδιού \"%s\" στον πίνακα \"%s\" (OID του πίνακα: %u)" -#: pg_dump.c:8520 +#: pg_dump.c:8700 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "εύρεση των στηλών και των τύπων του πίνακα “%s.%s”" -#: pg_dump.c:8656 +#: pg_dump.c:8824 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "μη έγκυρη αρίθμηση στηλών στον πίνακα \"%s\"" -#: pg_dump.c:8693 +#: pg_dump.c:8863 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "εύρεση προεπιλεγμένων εκφράσεων για τον πίνακα \"%s.%s\"" -#: pg_dump.c:8715 +#: pg_dump.c:8885 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "μη έγκυρη τιμή adnum %d για τον πίνακα \"%s\"" -#: pg_dump.c:8807 +#: pg_dump.c:8978 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "εύρεση περιορισμών ελέγχου για τον πίνακα \"%s.%s\"" -#: pg_dump.c:8856 +#: pg_dump.c:9027 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" -msgstr[0] "" -"αναμενόμενος %d περιορισμός ελέγχου στον πίνακα \"%s\", αλλά βρήκε %d" +msgstr[0] "αναμενόμενος %d περιορισμός ελέγχου στον πίνακα \"%s\", αλλά βρήκε %d" msgstr[1] "αναμενόμενοι %d περιορισμοί ελέγχου στον πίνακα “%s”, αλλά βρήκε %d" -#: pg_dump.c:8860 +#: pg_dump.c:9031 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Οι κατάλογοι συστήματος ενδέχεται να είναι αλλοιωμένοι.)" -#: pg_dump.c:10446 +#: pg_dump.c:10616 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "typtype του τύπου δεδομένων \"%s\" φαίνεται να μην είναι έγκυρο" -#: pg_dump.c:11800 +#: pg_dump.c:11968 #, c-format msgid "bogus value in proargmodes array" msgstr "πλαστή τιμή στη συστυχία proargmodes" -#: pg_dump.c:12172 +#: pg_dump.c:12275 #, c-format msgid "could not parse proallargtypes array" msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας proallargtypes" -#: pg_dump.c:12188 +#: pg_dump.c:12291 #, c-format msgid "could not parse proargmodes array" msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας proargmodes" -#: pg_dump.c:12202 +#: pg_dump.c:12305 #, c-format msgid "could not parse proargnames array" msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας proargnames" -#: pg_dump.c:12213 +#: pg_dump.c:12315 #, c-format msgid "could not parse proconfig array" msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας proconfig" -#: pg_dump.c:12293 +#: pg_dump.c:12395 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "μη αναγνωρίσιμη τιμή provolatile για τη συνάρτηση \"%s\"" -#: pg_dump.c:12343 pg_dump.c:14401 +#: pg_dump.c:12445 pg_dump.c:14396 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "μη αναγνωρίσιμη τιμή proparallel για τη συνάρτηση “%s”" -#: pg_dump.c:12482 pg_dump.c:12591 pg_dump.c:12598 +#: pg_dump.c:12584 pg_dump.c:12693 pg_dump.c:12700 #, c-format msgid "could not find function definition for function with OID %u" -msgstr "" -"δεν ήταν δυνατή η εύρεση ορισμού συνάντησης για την συνάρτηση με OID %u" +msgstr "δεν ήταν δυνατή η εύρεση ορισμού συνάντησης για την συνάρτηση με OID %u" -#: pg_dump.c:12521 +#: pg_dump.c:12623 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "πλαστή τιμή στο πεδίο pg_cast.castfunc ή pg_cast.castmethod" -#: pg_dump.c:12524 +#: pg_dump.c:12626 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "πλαστή τιμή στο πεδίο pg_cast.castmethod" -#: pg_dump.c:12617 +#: pg_dump.c:12719 #, c-format -msgid "" -"bogus transform definition, at least one of trffromsql and trftosql should " -"be nonzero" -msgstr "" -"πλαστός ορισμός μετασχηματισμού, τουλάχιστον μία από trffromsql και trftosql " -"θα πρέπει να είναι μη μηδενική" +msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" +msgstr "πλαστός ορισμός μετασχηματισμού, τουλάχιστον μία από trffromsql και trftosql θα πρέπει να είναι μη μηδενική" -#: pg_dump.c:12634 +#: pg_dump.c:12736 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "πλαστή τιμή στο πεδίο pg_transform.trffromsql" -#: pg_dump.c:12655 +#: pg_dump.c:12757 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "πλαστή τιμή στο πεδίοpg_transform.trftosql" -#: pg_dump.c:12971 +#: pg_dump.c:12909 +#, fuzzy, c-format +#| msgid "WITH OIDS is not supported anymore (table \"%s\")" +msgid "postfix operators are not supported anymore (operator \"%s\")" +msgstr "WITH OIDS δεν υποστηρίζεται πλέον (πίνακας \"%s\")" + +#: pg_dump.c:13079 #, c-format msgid "could not find operator with OID %s" msgstr "δεν ήταν δυνατή η εύρεση χειριστή με OID %s" -#: pg_dump.c:13039 +#: pg_dump.c:13147 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "μη έγκυρος τύπος \"%c\" για την μεθόδο πρόσβασης \"%s\"" -#: pg_dump.c:13793 +#: pg_dump.c:13901 #, c-format msgid "unrecognized collation provider: %s" msgstr "μη αναγνωρίσιμος πάροχος συρραφής: %s" -#: pg_dump.c:14265 -#, c-format -msgid "" -"aggregate function %s could not be dumped correctly for this database " -"version; ignored" -msgstr "" -"δεν ήταν δυνατή η σωστή απόθεση της συνάρτησης συγκεντρωτικών αποτελεσμάτων " -"%s για αυτήν την έκδοση της βάσης δεδομένων· παραβλέπεται" - -#: pg_dump.c:14320 +#: pg_dump.c:14315 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "μη αναγνωρίσιμη τιμή aggfinalmodify για το συγκεντρωτικό \"%s\"" -#: pg_dump.c:14376 +#: pg_dump.c:14371 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "μη αναγνωρίσιμη τιμή aggmfinalmodify για το συγκεντρωτικό “%s”" -#: pg_dump.c:15098 +#: pg_dump.c:15093 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "μη αναγνωρίσιμος τύπος αντικειμένου σε προεπιλεγμένα δικαιώματα: %d" -#: pg_dump.c:15116 +#: pg_dump.c:15111 #, c-format msgid "could not parse default ACL list (%s)" msgstr "δεν ήταν δυνατή η ανάλυση της προεπιλεγμένης λίστας ACL (%s)" -#: pg_dump.c:15201 +#: pg_dump.c:15196 #, c-format -msgid "" -"could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) " -"for object \"%s\" (%s)" -msgstr "" -"δεν ήταν δυνατή η ανάλυση της αρχικής λίστας ACL GRANT (%s) ή της αρχικής " -"λίστας REVOKE ACL (%s) για το αντικείμενο \"%s\" (%s)" +msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" +msgstr "δεν ήταν δυνατή η ανάλυση της αρχικής λίστας ACL GRANT (%s) ή της αρχικής λίστας REVOKE ACL (%s) για το αντικείμενο \"%s\" (%s)" -#: pg_dump.c:15209 +#: pg_dump.c:15204 #, c-format -msgid "" -"could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s" -"\" (%s)" -msgstr "" -"δεν ήταν δυνατή η ανάλυση της λίστας GRANT ACL (%s) ή της λίστας REVOKE ACL " -"(%s) για το αντικείμενο \"%s\" (%s)" +msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" +msgstr "δεν ήταν δυνατή η ανάλυση της λίστας GRANT ACL (%s) ή της λίστας REVOKE ACL (%s) για το αντικείμενο \"%s\" (%s)" -#: pg_dump.c:15724 +#: pg_dump.c:15719 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "το ερώτημα για τη λήψη ορισμού της όψης \"%s\" δεν επέστρεψε δεδομένα" -#: pg_dump.c:15727 +#: pg_dump.c:15722 #, c-format -msgid "" -"query to obtain definition of view \"%s\" returned more than one definition" -msgstr "" -"το ερώτημα για τη λήψη ορισμού της όψης \"%s\" επέστρεψε περισσότερους από " -"έναν ορισμούς" +msgid "query to obtain definition of view \"%s\" returned more than one definition" +msgstr "το ερώτημα για τη λήψη ορισμού της όψης \"%s\" επέστρεψε περισσότερους από έναν ορισμούς" -#: pg_dump.c:15734 +#: pg_dump.c:15729 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "ο ορισμός της όψης \"%s\" φαίνεται να είναι κενός (μηδενικό μήκος)" -#: pg_dump.c:15818 +#: pg_dump.c:15813 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS δεν υποστηρίζεται πλέον (πίνακας \"%s\")" -#: pg_dump.c:16298 -#, c-format -msgid "invalid number of parents %d for table \"%s\"" -msgstr "μη έγκυρος αριθμός γονέων %d για τον πίνακα \"%s\"" - -#: pg_dump.c:16621 +#: pg_dump.c:16680 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "μη έγκυρος αριθμός στήλης %d για τον πίνακα \"%s\"" -#: pg_dump.c:16914 +#: pg_dump.c:16757 +#, fuzzy, c-format +#| msgid "could not parse default ACL list (%s)" +msgid "could not parse index statistic columns" +msgstr "δεν ήταν δυνατή η ανάλυση της προεπιλεγμένης λίστας ACL (%s)" + +#: pg_dump.c:16759 +#, fuzzy, c-format +#| msgid "could not parse default ACL list (%s)" +msgid "could not parse index statistic values" +msgstr "δεν ήταν δυνατή η ανάλυση της προεπιλεγμένης λίστας ACL (%s)" + +#: pg_dump.c:16761 +#, c-format +msgid "mismatched number of columns and values for index statistics" +msgstr "" + +#: pg_dump.c:16978 #, c-format msgid "missing index for constraint \"%s\"" msgstr "λείπει ευρετήριο για τον περιορισμό \"%s\"" -#: pg_dump.c:17139 +#: pg_dump.c:17203 #, c-format msgid "unrecognized constraint type: %c" msgstr "μη αναγνωρίσιμος τύπος περιορισμού: %c" -#: pg_dump.c:17271 pg_dump.c:17491 +#: pg_dump.c:17335 pg_dump.c:17558 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" -msgid_plural "" -"query to get data of sequence \"%s\" returned %d rows (expected 1)" -msgstr[0] "" -"ερώτημα για τη λήψη δεδομένων ακολουθίας \"%s\" επέστρεψε %d γραμμή " -"(αναμένεται 1)" -msgstr[1] "" -"ερώτημα για τη λήψη δεδομένων ακολουθίας “%s” επέστρεψε %d γραμμές " -"(αναμένεται 1)" +msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" +msgstr[0] "ερώτημα για τη λήψη δεδομένων ακολουθίας \"%s\" επέστρεψε %d γραμμή (αναμένεται 1)" +msgstr[1] "ερώτημα για τη λήψη δεδομένων ακολουθίας “%s” επέστρεψε %d γραμμές (αναμένεται 1)" -#: pg_dump.c:17305 +#: pg_dump.c:17369 #, c-format msgid "unrecognized sequence type: %s" msgstr "μη αναγνωρίσιμος τύπος ακολουθίας: %s" -#: pg_dump.c:17589 +#: pg_dump.c:17656 #, c-format msgid "unexpected tgtype value: %d" msgstr "μη αναγνωρίσιμος τύπος tgtype: %d" -#: pg_dump.c:17663 +#: pg_dump.c:17730 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" -msgstr "" -"μη έγκυρη συμβολοσειρά παραμέτρου (%s) για το έναυσμα \"%s\" στον πίνακα \"%s" -"\"" +msgstr "μη έγκυρη συμβολοσειρά παραμέτρου (%s) για το έναυσμα \"%s\" στον πίνακα \"%s\"" -#: pg_dump.c:17899 +#: pg_dump.c:17966 #, c-format -msgid "" -"query to get rule \"%s\" for table \"%s\" failed: wrong number of rows " -"returned" -msgstr "" -"ερώτημα για τη λήψη κανόνα \"%s\" για τον πίνακα \"%s\" απέτυχε: επιστράφηκε " -"εσφαλμένος αριθμός γραμμών" +msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" +msgstr "ερώτημα για τη λήψη κανόνα \"%s\" για τον πίνακα \"%s\" απέτυχε: επιστράφηκε εσφαλμένος αριθμός γραμμών" -#: pg_dump.c:18061 +#: pg_dump.c:18128 #, c-format msgid "could not find referenced extension %u" msgstr "δεν ήταν δυνατή η εύρεση της αναφερόμενης επέκτασης %u" -#: pg_dump.c:18273 +#: pg_dump.c:18219 +#, fuzzy, c-format +#| msgid "could not parse proconfig array" +msgid "could not parse extension configuration array" +msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας proconfig" + +#: pg_dump.c:18221 +#, fuzzy, c-format +#| msgid "could not parse reloptions array" +msgid "could not parse extension condition array" +msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας reloptions" + +#: pg_dump.c:18223 +#, c-format +msgid "mismatched number of configurations and conditions for extension" +msgstr "" + +#: pg_dump.c:18355 #, c-format msgid "reading dependency data" msgstr "ανάγνωση δεδομένων εξάρτησης" -#: pg_dump.c:18366 +#: pg_dump.c:18448 #, c-format msgid "no referencing object %u %u" msgstr "δεν αναφέρεται αντικείμενο %u %u" -#: pg_dump.c:18377 +#: pg_dump.c:18459 #, c-format msgid "no referenced object %u %u" msgstr "μη αναφερόμενο αντικείμενο %u %u" -#: pg_dump.c:18750 +#: pg_dump.c:18833 #, c-format msgid "could not parse reloptions array" msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας reloptions" -#: pg_dump_sort.c:360 +#: pg_dump_sort.c:411 #, c-format msgid "invalid dumpId %d" msgstr "μη έγκυρο dumpId %d" -#: pg_dump_sort.c:366 +#: pg_dump_sort.c:417 #, c-format msgid "invalid dependency %d" msgstr "μη έγκυρη εξάρτηση %d" -#: pg_dump_sort.c:599 +#: pg_dump_sort.c:650 #, c-format msgid "could not identify dependency loop" msgstr "δεν ήταν δυνατός ο προσδιορισμός βρόχου εξάρτησης" -#: pg_dump_sort.c:1170 +#: pg_dump_sort.c:1221 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" msgstr[0] "υπάρχουν κυκλικοί περιορισμοί ξένου κλειδιού σε αυτόν τον πίνακα:" -msgstr[1] "" -"υπάρχουν κυκλικοί περιορισμοί ξένου κλειδιού σε αυτούς τους πίνακες:" +msgstr[1] "υπάρχουν κυκλικοί περιορισμοί ξένου κλειδιού σε αυτούς τους πίνακες:" -#: pg_dump_sort.c:1174 pg_dump_sort.c:1194 +#: pg_dump_sort.c:1225 pg_dump_sort.c:1245 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1175 +#: pg_dump_sort.c:1226 #, c-format -msgid "" -"You might not be able to restore the dump without using --disable-triggers " -"or temporarily dropping the constraints." -msgstr "" -"Ενδέχεται να μην μπορείτε να επαναφέρετε την ένδειξη χωρίς να " -"χρησιμοποιήσετε --disable-triggers ή να εγκαταλήψετε προσωρινά τους " -"περιορισμούς." +msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." +msgstr "Ενδέχεται να μην μπορείτε να επαναφέρετε την ένδειξη χωρίς να χρησιμοποιήσετε --disable-triggers ή να εγκαταλήψετε προσωρινά τους περιορισμούς." -#: pg_dump_sort.c:1176 +#: pg_dump_sort.c:1227 #, c-format -msgid "" -"Consider using a full dump instead of a --data-only dump to avoid this " -"problem." -msgstr "" -"Εξετάστε το ενδεχόμενο να χρησιμοποιήσετε μια πλήρη απόθεση αντί για μια —" -"data-only απόθεση για να αποφύγετε αυτό το πρόβλημα." +msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." +msgstr "Εξετάστε το ενδεχόμενο να χρησιμοποιήσετε μια πλήρη απόθεση αντί για μια —data-only απόθεση για να αποφύγετε αυτό το πρόβλημα." -#: pg_dump_sort.c:1188 +#: pg_dump_sort.c:1239 #, c-format msgid "could not resolve dependency loop among these items:" -msgstr "" -"δεν ήταν δυνατή η επίλυση του βρόχου εξάρτησης μεταξύ αυτών των στοιχείων:" +msgstr "δεν ήταν δυνατή η επίλυση του βρόχου εξάρτησης μεταξύ αυτών των στοιχείων:" -#: pg_dumpall.c:199 +#: pg_dumpall.c:202 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -2481,7 +2291,7 @@ msgstr "" "ίδιος κατάλογος με το \"%s\".\n" "Ελέγξτε την εγκατάστασή σας." -#: pg_dumpall.c:204 +#: pg_dumpall.c:207 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -2492,200 +2302,159 @@ msgstr "" "αλλά δεν ήταν η ίδια εκδοχή με %s.\n" "Ελέγξτε την εγκατάστασή σας." -#: pg_dumpall.c:356 +#: pg_dumpall.c:359 #, c-format -msgid "" -"option --exclude-database cannot be used together with -g/--globals-only, -" -"r/--roles-only, or -t/--tablespaces-only" -msgstr "" -"επιλογή —exclude-database δεν μπορεί να χρησιμοποιηθεί μαζί με -g/—globals-" -"only, -r/—roles-only, ή -t/—tablespaces-only" +msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" +msgstr "επιλογή —exclude-database δεν μπορεί να χρησιμοποιηθεί μαζί με -g/—globals-only, -r/—roles-only, ή -t/—tablespaces-only" -#: pg_dumpall.c:365 +#: pg_dumpall.c:368 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" -msgstr "" -"οι επιλογές -g/—globals-only και -r/—roles-only δεν μπορούν να " -"χρησιμοποιηθούν μαζί" +msgstr "οι επιλογές -g/—globals-only και -r/—roles-only δεν μπορούν να χρησιμοποιηθούν μαζί" -#: pg_dumpall.c:373 +#: pg_dumpall.c:376 #, c-format -msgid "" -"options -g/--globals-only and -t/--tablespaces-only cannot be used together" -msgstr "" -"Οι επιλογές -g/--καθολικές μόνο και -t/--επιτραπέζιοι χώροι δεν μπορούν να " -"χρησιμοποιηθούν μαζί" +msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" +msgstr "Οι επιλογές -g/--καθολικές μόνο και -t/--επιτραπέζιοι χώροι δεν μπορούν να χρησιμοποιηθούν μαζί" -#: pg_dumpall.c:387 +#: pg_dumpall.c:390 #, c-format -msgid "" -"options -r/--roles-only and -t/--tablespaces-only cannot be used together" -msgstr "" -"οι επιλογές -r/—roles-only και -t/—tablespaces-only δεν μπορούν να " -"χρησιμοποιηθούν μαζί" +msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" +msgstr "οι επιλογές -r/—roles-only και -t/—tablespaces-only δεν μπορούν να χρησιμοποιηθούν μαζί" -#: pg_dumpall.c:448 pg_dumpall.c:1754 +#: pg_dumpall.c:453 pg_dumpall.c:1756 #, c-format msgid "could not connect to database \"%s\"" msgstr "δεν ήταν δυνατή η σύνδεση στη βάση δεδομένων “%s”" -#: pg_dumpall.c:462 +#: pg_dumpall.c:467 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" "Please specify an alternative database." msgstr "" -"δεν ήταν δυνατή η σύνδεση με τις βάσεις δεδομένων \"postgres\" ή " -"\"Template1\"\n" +"δεν ήταν δυνατή η σύνδεση με τις βάσεις δεδομένων \"postgres\" ή \"Template1\"\n" "Παρακαλώ καθορίστε μία εναλλακτική βάση δεδομένων." -#: pg_dumpall.c:616 +#: pg_dumpall.c:621 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" "\n" msgstr "" -"%s εξάγει μία συστάδα βάσεων δεδομένων PostgreSQL σε ένα αρχείο σεναρίου " -"SQL.\n" +"%s εξάγει μία συστάδα βάσεων δεδομένων PostgreSQL σε ένα αρχείο σεναρίου SQL.\n" "\n" -#: pg_dumpall.c:618 +#: pg_dumpall.c:623 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [ΕΠΙΛΟΓΗ]…\n" -#: pg_dumpall.c:621 +#: pg_dumpall.c:626 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, —file=FILENAME όνομα αρχείου εξόδου\n" -#: pg_dumpall.c:628 +#: pg_dumpall.c:633 #, c-format -msgid "" -" -c, --clean clean (drop) databases before recreating\n" -msgstr "" -" -c, —clean καθάρισε (εγκατάληψε) βάσεις δεδομένων πριν " -"από την αναδημιουργία\n" +msgid " -c, --clean clean (drop) databases before recreating\n" +msgstr " -c, —clean καθάρισε (εγκατάληψε) βάσεις δεδομένων πριν από την αναδημιουργία\n" -#: pg_dumpall.c:630 +#: pg_dumpall.c:635 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" -msgstr "" -" -g, —globals-only απόθεσε μόνο καθολικά αντικείμενα, όχι βάσεις " -"δεδομένων\n" +msgstr " -g, —globals-only απόθεσε μόνο καθολικά αντικείμενα, όχι βάσεις δεδομένων\n" -#: pg_dumpall.c:631 pg_restore.c:485 +#: pg_dumpall.c:636 pg_restore.c:485 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" -msgstr "" -" -O, —no-owner παράλειψε την αποκατάσταση της κυριότητας " -"αντικειμένων\n" +msgstr " -O, —no-owner παράλειψε την αποκατάσταση της κυριότητας αντικειμένων\n" -#: pg_dumpall.c:632 +#: pg_dumpall.c:637 #, c-format -msgid "" -" -r, --roles-only dump only roles, no databases or tablespaces\n" -msgstr "" -" -r, —roles-only απόθεσε μόνο ρόλους, όχι βάσεις δεδομένων ή " -"πινακοχώρους\n" +msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" +msgstr " -r, —roles-only απόθεσε μόνο ρόλους, όχι βάσεις δεδομένων ή πινακοχώρους\n" -#: pg_dumpall.c:634 +#: pg_dumpall.c:639 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" -msgstr "" -" -S, —superuser=NAME όνομα υπερχρήστη για να χρησιμοποιηθεί στην " -"απόθεση\n" +msgstr " -S, —superuser=NAME όνομα υπερχρήστη για να χρησιμοποιηθεί στην απόθεση\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:640 #, c-format -msgid "" -" -t, --tablespaces-only dump only tablespaces, no databases or roles\n" -msgstr "" -" -t, —tablespaces-only απόθεσε μόνο πινακοχώρους, όχι βάσεις " -"δεδομένων ή ρόλους\n" +msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" +msgstr " -t, —tablespaces-only απόθεσε μόνο πινακοχώρους, όχι βάσεις δεδομένων ή ρόλους\n" -#: pg_dumpall.c:641 +#: pg_dumpall.c:646 #, c-format -msgid "" -" --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" -msgstr "" -" —exclude-database=PATTERN εξαίρεσε βάσεις δεδομένων των οποίων το όνομα " -"ταιριάζει με PATTERN\n" +msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" +msgstr " —exclude-database=PATTERN εξαίρεσε βάσεις δεδομένων των οποίων το όνομα ταιριάζει με PATTERN\n" -#: pg_dumpall.c:648 +#: pg_dumpall.c:653 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" -msgstr "" -" —no-role-passwords να μην αποθέσει κωδικούς πρόσβασης για ρόλους\n" +msgstr " —no-role-passwords να μην αποθέσει κωδικούς πρόσβασης για ρόλους\n" -#: pg_dumpall.c:662 +#: pg_dumpall.c:668 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, —dbname=CONNSTR σύνδεση με χρήση συμβολοσειράς σύνδεσης\n" -#: pg_dumpall.c:664 +#: pg_dumpall.c:670 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr "" " -l, —database=DBNAME εναλλακτική προεπιλεγμένη βάση δεδομένων\n" "\n" -#: pg_dumpall.c:671 +#: pg_dumpall.c:677 #, c-format msgid "" "\n" -"If -f/--file is not used, then the SQL script will be written to the " -"standard\n" +"If -f/--file is not used, then the SQL script will be written to the standard\n" "output.\n" "\n" msgstr "" "\n" -"Εάν δεν χρησιμοποιηθεί -f/—file , τότε η δέσμη ενεργειών SQL θα εγγραφεί στη " -"τυπική\n" +"Εάν δεν χρησιμοποιηθεί -f/—file , τότε η δέσμη ενεργειών SQL θα εγγραφεί στη τυπική\n" "έξοδο.\n" "\n" -#: pg_dumpall.c:877 +#: pg_dumpall.c:883 #, c-format msgid "role name starting with \"pg_\" skipped (%s)" msgstr "όνομα ρόλου που αρχίζει \"pg_\" παραλείπεται (%s)" -#: pg_dumpall.c:1278 +#: pg_dumpall.c:1284 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" -msgstr "" -"δεν ήταν δυνατή η ανάλυση της λίστας ACL (%s) για τον πινακοχώρο \"%s\"" +msgstr "δεν ήταν δυνατή η ανάλυση της λίστας ACL (%s) για τον πινακοχώρο \"%s\"" -#: pg_dumpall.c:1495 +#: pg_dumpall.c:1501 #, c-format msgid "excluding database \"%s\"" msgstr "εξαιρεί τη βάση δεδομένων \"%s\"" -#: pg_dumpall.c:1499 +#: pg_dumpall.c:1505 #, c-format msgid "dumping database \"%s\"" msgstr "αποθέτει τη βάση δεδομένων “%s”" -#: pg_dumpall.c:1531 +#: pg_dumpall.c:1537 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "pg_dump απέτυχε στη βάση δεδομένων \"%s\", εξέρχεται" -#: pg_dumpall.c:1540 +#: pg_dumpall.c:1546 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "δεν ήταν δυνατό το εκ νέου άνοιγμα του αρχείου εξόδου \"%s\": %m" -#: pg_dumpall.c:1584 +#: pg_dumpall.c:1590 #, c-format msgid "running \"%s\"" msgstr "εκτελείται “%s”" -#: pg_dumpall.c:1775 -#, c-format -msgid "could not connect to database \"%s\": %s" -msgstr "δεν ήταν δυνατή η σύνδεση στη βάση δεδομένων “%s”: %s" - #: pg_dumpall.c:1805 #, c-format msgid "could not get server version" @@ -2709,15 +2478,12 @@ msgstr "ένα από τα -d/--dbname και -f/--file πρέπει να καθ #: pg_restore.c:317 #, c-format msgid "options -d/--dbname and -f/--file cannot be used together" -msgstr "" -"οι επιλογές -d/—dbname και -f/—file δεν μπορούν να χρησιμοποιηθούν μαζί" +msgstr "οι επιλογές -d/—dbname και -f/—file δεν μπορούν να χρησιμοποιηθούν μαζί" #: pg_restore.c:343 #, c-format msgid "options -C/--create and -1/--single-transaction cannot be used together" -msgstr "" -"οι επιλογές -C/--create και -1/--single-transaction δεν μπορούν να " -"χρησιμοποιηθούν μαζί" +msgstr "οι επιλογές -C/--create και -1/--single-transaction δεν μπορούν να χρησιμοποιηθούν μαζί" #: pg_restore.c:357 #, c-format @@ -2727,17 +2493,12 @@ msgstr "ο μέγιστος αριθμός παράλληλων εργασιών #: pg_restore.c:366 #, c-format msgid "cannot specify both --single-transaction and multiple jobs" -msgstr "" -"δεν είναι δυνατό να οριστούν —single-transaction και multiple jobs και τα " -"δύο μαζί " +msgstr "δεν είναι δυνατό να οριστούν —single-transaction και multiple jobs και τα δύο μαζί " #: pg_restore.c:408 #, c-format -msgid "" -"unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" -msgstr "" -"μη αναγνωρισμένη μορφή αρχειοθέτησης “%s”· παρακαλώ καθορίστε \"c\", \"d\" ή " -"\"t\"" +msgid "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" +msgstr "μη αναγνωρισμένη μορφή αρχειοθέτησης “%s”· παρακαλώ καθορίστε \"c\", \"d\" ή \"t\"" #: pg_restore.c:448 #, c-format @@ -2750,8 +2511,7 @@ msgid "" "%s restores a PostgreSQL database from an archive created by pg_dump.\n" "\n" msgstr "" -"%s επαναφέρει μια βάση δεδομένων PostgreSQL από μια αρχειοθήκη που " -"δημιουργήθηκε από τη pg_dump.\n" +"%s επαναφέρει μια βάση δεδομένων PostgreSQL από μια αρχειοθήκη που δημιουργήθηκε από τη pg_dump.\n" "\n" #: pg_restore.c:463 @@ -2772,9 +2532,7 @@ msgstr " -f, —file=FILENAME όνομα αρχείου εξόδου (- γ #: pg_restore.c:468 #, c-format msgid " -F, --format=c|d|t backup file format (should be automatic)\n" -msgstr "" -" -F, —format=c|d|t μορφή αρχείου αντιγράφου ασφαλείας (θα πρέπει να " -"είναι αυτόματη)\n" +msgstr " -F, —format=c|d|t μορφή αρχείου αντιγράφου ασφαλείας (θα πρέπει να είναι αυτόματη)\n" #: pg_restore.c:469 #, c-format @@ -2789,16 +2547,12 @@ msgstr " -v, —verbose περιφραστική λειτουργί #: pg_restore.c:471 #, c-format msgid " -V, --version output version information, then exit\n" -msgstr "" -" -V, —version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, " -"έξοδος\n" +msgstr " -V, —version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, έξοδος\n" #: pg_restore.c:472 #, c-format msgid " -?, --help show this help, then exit\n" -msgstr "" -" -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, και μετά " -"έξοδος\n" +msgstr " -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, και μετά έξοδος\n" #: pg_restore.c:474 #, c-format @@ -2812,21 +2566,17 @@ msgstr "" #: pg_restore.c:475 #, c-format msgid " -a, --data-only restore only the data, no schema\n" -msgstr "" -" -a, —data-only επαναφέρε μόνο τα δεδομένα, όχι το σχήμα\n" +msgstr " -a, —data-only επαναφέρε μόνο τα δεδομένα, όχι το σχήμα\n" #: pg_restore.c:477 #, c-format msgid " -C, --create create the target database\n" -msgstr "" -" -C, —create δημιούργησε τη βάσης δεδομένων προορισμού\n" +msgstr " -C, —create δημιούργησε τη βάσης δεδομένων προορισμού\n" #: pg_restore.c:478 #, c-format msgid " -e, --exit-on-error exit on error, default is to continue\n" -msgstr "" -" -e, —exit-on-error να εξέλθει σε σφάλμα, η προεπιλογή είναι να " -"συνεχίσει\n" +msgstr " -e, —exit-on-error να εξέλθει σε σφάλμα, η προεπιλογή είναι να συνεχίσει\n" #: pg_restore.c:479 #, c-format @@ -2836,9 +2586,7 @@ msgstr " -I, —index=NAME επανάφερε το ευρετήρι #: pg_restore.c:480 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" -msgstr "" -" -j, —jobs=NUM χρησιμοποίησε τόσες πολλές παράλληλες εργασίες " -"για την επαναφορά\n" +msgstr " -j, —jobs=NUM χρησιμοποίησε τόσες πολλές παράλληλες εργασίες για την επαναφορά\n" #: pg_restore.c:481 #, c-format @@ -2846,22 +2594,18 @@ msgid "" " -L, --use-list=FILENAME use table of contents from this file for\n" " selecting/ordering output\n" msgstr "" -" -L, —use-list=FILENAME χρησιμοποίησε τον πίνακα περιεχομένων από αυτό " -"το αρχείο για\n" +" -L, —use-list=FILENAME χρησιμοποίησε τον πίνακα περιεχομένων από αυτό το αρχείο για\n" " επιλογή/ταξινόμηση εξόδου\n" #: pg_restore.c:483 #, c-format msgid " -n, --schema=NAME restore only objects in this schema\n" -msgstr "" -" -n, —schema=NAME επανάφερε μόνο αντικείμενα σε αυτό το σχήμα\n" +msgstr " -n, —schema=NAME επανάφερε μόνο αντικείμενα σε αυτό το σχήμα\n" #: pg_restore.c:484 #, c-format msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" -msgstr "" -" -N, —exclude-schema=NAME να μην επαναφέρει αντικείμενα από αυτό το " -"σχήμα\n" +msgstr " -N, —exclude-schema=NAME να μην επαναφέρει αντικείμενα από αυτό το σχήμα\n" #: pg_restore.c:486 #, c-format @@ -2871,25 +2615,17 @@ msgstr "P, —function=NAME(args) επανάφερε την καθορισμ #: pg_restore.c:487 #, c-format msgid " -s, --schema-only restore only the schema, no data\n" -msgstr "" -" -s, —schema-only επανάφερε μόνο το σχήμα, χωρίς δεδομένα\n" +msgstr " -s, —schema-only επανάφερε μόνο το σχήμα, χωρίς δεδομένα\n" #: pg_restore.c:488 #, c-format -msgid "" -" -S, --superuser=NAME superuser user name to use for disabling " -"triggers\n" -msgstr "" -" -S, —superuser=NAME όνομα υπερχρήστη για χρήση κατά την " -"απενεργοποίηση εναυσμάτων\n" +msgid " -S, --superuser=NAME superuser user name to use for disabling triggers\n" +msgstr " -S, —superuser=NAME όνομα υπερχρήστη για χρήση κατά την απενεργοποίηση εναυσμάτων\n" #: pg_restore.c:489 #, c-format -msgid "" -" -t, --table=NAME restore named relation (table, view, etc.)\n" -msgstr "" -" -t, —table=NAME επανάφερε την καθορισμένη σχέση (πίνακας, " -"προβολή κ.λπ.)\n" +msgid " -t, --table=NAME restore named relation (table, view, etc.)\n" +msgstr " -t, —table=NAME επανάφερε την καθορισμένη σχέση (πίνακας, προβολή κ.λπ.)\n" #: pg_restore.c:490 #, c-format @@ -2900,12 +2636,8 @@ msgstr "" #: pg_restore.c:491 #, c-format -msgid "" -" -x, --no-privileges skip restoration of access privileges (grant/" -"revoke)\n" -msgstr "" -" -x, —no-privileges παράλειπε την επαναφορά των δικαιωμάτων " -"πρόσβασης (εκχώρηση/ανάκληση)\n" +msgid " -x, --no-privileges skip restoration of access privileges (grant/revoke)\n" +msgstr " -x, —no-privileges παράλειπε την επαναφορά των δικαιωμάτων πρόσβασης (εκχώρηση/ανάκληση)\n" #: pg_restore.c:492 #, c-format @@ -2925,12 +2657,10 @@ msgstr " —no-comments να μην επαναφέρεις σχ #: pg_restore.c:497 #, c-format msgid "" -" --no-data-for-failed-tables do not restore data of tables that could not " -"be\n" +" --no-data-for-failed-tables do not restore data of tables that could not be\n" " created\n" msgstr "" -" —no-data-for-failed-tables να μην επαναφέρεις δεδομένα πινάκων που δεν " -"ήταν\n" +" —no-data-for-failed-tables να μην επαναφέρεις δεδομένα πινάκων που δεν ήταν\n" " δυνατό να δημιουργήθουν\n" #: pg_restore.c:499 @@ -2951,17 +2681,12 @@ msgstr " —no-publications να μην επαναφέρεις συ #: pg_restore.c:502 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" -msgstr "" -" —no-tablespaces να μην επαναφέρεις αναθέσεις πινακοχώρων\n" +msgstr " —no-tablespaces να μην επαναφέρεις αναθέσεις πινακοχώρων\n" #: pg_restore.c:503 #, c-format -msgid "" -" --section=SECTION restore named section (pre-data, data, or " -"post-data)\n" -msgstr "" -" —section=SECTION επανάφερε ονομασμένες ενότητες (προ-δεδομένα, " -"δεδομένα, ή μετα-δεδομένα)\n" +msgid " --section=SECTION restore named section (pre-data, data, or post-data)\n" +msgstr " —section=SECTION επανάφερε ονομασμένες ενότητες (προ-δεδομένα, δεδομένα, ή μετα-δεδομένα)\n" #: pg_restore.c:516 #, c-format @@ -2972,13 +2697,11 @@ msgstr " —role=ROLENAME κάνε SET ROLE πριν την επανα #, c-format msgid "" "\n" -"The options -I, -n, -N, -P, -t, -T, and --section can be combined and " -"specified\n" +"The options -I, -n, -N, -P, -t, -T, and --section can be combined and specified\n" "multiple times to select multiple objects.\n" msgstr "" "\n" -"Οι επιλογές -I, -n, -N, -P, -t, -T και —section μπορούν να συνδυαστούν και " -"να καθοριστούν\n" +"Οι επιλογές -I, -n, -N, -P, -t, -T και —section μπορούν να συνδυαστούν και να καθοριστούν\n" "πολλές φορές για την επιλογή πολλών αντικειμένων.\n" #: pg_restore.c:521 @@ -2989,6 +2712,26 @@ msgid "" "\n" msgstr "" "\n" -"Εάν δεν παρέχεται όνομα αρχείου εισόδου, τότε χρησιμοποιείται η τυπική " -"είσοδος.\n" +"Εάν δεν παρέχεται όνομα αρχείου εισόδου, τότε χρησιμοποιείται η τυπική είσοδος.\n" "\n" + +#~ msgid "could not connect to database \"%s\": %s" +#~ msgstr "δεν ήταν δυνατή η σύνδεση στη βάση δεδομένων “%s”: %s" + +#~ msgid "aggregate function %s could not be dumped correctly for this database version; ignored" +#~ msgstr "δεν ήταν δυνατή η σωστή απόθεση της συνάρτησης συγκεντρωτικών αποτελεσμάτων %s για αυτήν την έκδοση της βάσης δεδομένων· παραβλέπεται" + +#~ msgid "connection to database \"%s\" failed: %s" +#~ msgstr "σύνδεση στη βάση δεδομένων “%s” απέτυχε: %s" + +#~ msgid "could not write to large object (result: %lu, expected: %lu)" +#~ msgstr "δεν ήταν δυνατή η εγγραφή σε μεγάλο αντικείμενο (αποτέλεσμα: %lu, αναμένεται: %lu)" + +#~ msgid "select() failed: %m" +#~ msgstr "απέτυχε το select(): %m" + +#~ msgid "WSAStartup failed: %d" +#~ msgstr "WSAStartup απέτυχε: %d" + +#~ msgid "pclose failed: %m" +#~ msgstr "απέτυχε η εντολή pclose: %m" diff --git a/src/bin/pg_dump/po/es.po b/src/bin/pg_dump/po/es.po index 36b7a2e4ba436..b7d603e7aa166 100644 --- a/src/bin/pg_dump/po/es.po +++ b/src/bin/pg_dump/po/es.po @@ -5,14 +5,14 @@ # # Manuel Sugawara , 2003. # Alvaro Herrera , 2004-2007, 2009-2013 -# Carlos Chapi , 2014, 2017 +# Carlos Chapi , 2014, 2017, 2021 # msgid "" msgstr "" "Project-Id-Version: pg_dump (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2021-05-14 19:48+0000\n" -"PO-Revision-Date: 2020-09-14 12:57-0300\n" +"PO-Revision-Date: 2021-05-20 23:35-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -20,7 +20,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.2\n" #: ../../../src/common/logging.c:259 #, c-format @@ -68,10 +68,9 @@ msgid "could not read symbolic link \"%s\": %m" msgstr "no se pudo leer el enlace simbólico «%s»: %m" #: ../../common/exec.c:409 parallel.c:1614 -#, fuzzy, c-format -#| msgid "%s failed: %m" +#, c-format msgid "%s() failed: %m" -msgstr "%s falló: %m" +msgstr "%s() falló: %m" #: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 msgid "out of memory" @@ -381,10 +380,9 @@ msgid "could not read from input file: end of file" msgstr "no se pudo leer desde el archivo de entrada: fin de archivo" #: parallel.c:254 -#, fuzzy, c-format -#| msgid "pgpipe: getsockname() failed: error code %d" +#, c-format msgid "%s() failed: error code %d" -msgstr "pgpipe: getsockname() falló: código de error %d" +msgstr "%s() falló: código de error %d" #: parallel.c:964 #, c-format @@ -397,10 +395,9 @@ msgid "could not create worker process: %m" msgstr "no se pudo crear el proceso hijo: %m" #: parallel.c:1151 -#, fuzzy, c-format -#| msgid "unrecognized command received from master: \"%s\"" +#, c-format msgid "unrecognized command received from leader: \"%s\"" -msgstr "orden no reconocida recibida del servidor: «%s»" +msgstr "orden no reconocida recibida del servidor principal: «%s»" #: parallel.c:1194 parallel.c:1432 #, c-format @@ -442,10 +439,9 @@ msgid "pgpipe: could not listen: error code %d" msgstr "pgpipe: no se pudo escuchar: código de error %d" #: parallel.c:1764 -#, fuzzy, c-format -#| msgid "pgpipe: getsockname() failed: error code %d" +#, c-format msgid "pgpipe: %s() failed: error code %d" -msgstr "pgpipe: getsockname() falló: código de error %d" +msgstr "pgpipe: %s() falló: código de error %d" #: parallel.c:1775 #, c-format @@ -628,19 +624,16 @@ msgid "could not open output file: %m" msgstr "no se pudo abrir el archivo de salida: %m" #: pg_backup_archiver.c:1644 -#, fuzzy, c-format -#| msgid "wrote %lu byte of large object data (result = %lu)" -#| msgid_plural "wrote %lu bytes of large object data (result = %lu)" +#, c-format msgid "wrote %zu byte of large object data (result = %d)" msgid_plural "wrote %zu bytes of large object data (result = %d)" -msgstr[0] "se escribió %lu byte de los datos del objeto grande (resultado = %lu)" -msgstr[1] "se escribieron %lu bytes de los datos del objeto grande (resultado = %lu)" +msgstr[0] "se escribió %zu byte de los datos del objeto grande (resultado = %d)" +msgstr[1] "se escribieron %zu bytes de los datos del objeto grande (resultado = %d)" #: pg_backup_archiver.c:1650 -#, fuzzy, c-format -#| msgid "could not create large object %u: %s" +#, c-format msgid "could not write to large object: %s" -msgstr "no se pudo crear el objeto grande %u: %s" +msgstr "no se pudo escribir en objeto grande: %s" #: pg_backup_archiver.c:1740 #, c-format @@ -774,10 +767,9 @@ msgid "invalid STDSTRINGS item: %s" msgstr "elemento STDSTRINGS no válido: %s" #: pg_backup_archiver.c:2717 -#, fuzzy, c-format -#| msgid "invalid STDSTRINGS item: %s" +#, c-format msgid "invalid TOASTCOMPRESSION item: %s" -msgstr "elemento STDSTRINGS no válido: %s" +msgstr "elemento TOASTCOMPRESSION no válido: %s" #: pg_backup_archiver.c:2734 #, c-format @@ -1011,10 +1003,9 @@ msgid "could not connect to database" msgstr "no se pudo hacer la conexión a la base de datos" #: pg_backup_db.c:191 -#, fuzzy, c-format -#| msgid "collation failed: %s" +#, c-format msgid "reconnection failed: %s" -msgstr "el ordenamiento falló: %s" +msgstr "falló la reconexión: %s" #: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1681 pg_dumpall.c:1771 #, c-format @@ -1342,10 +1333,9 @@ msgid "no matching tables were found" msgstr "no se encontraron tablas coincidentes" #: pg_dump.c:848 -#, fuzzy, c-format -#| msgid "no matching tables were found" +#, c-format msgid "no matching extensions were found" -msgstr "no se encontraron tablas coincidentes" +msgstr "no se encontraron extensiones coincidentes" #: pg_dump.c:1020 #, c-format @@ -1461,10 +1451,9 @@ msgstr "" " en la extracción\n" #: pg_dump.c:1042 -#, fuzzy, c-format -#| msgid " -t, --table=PATTERN dump the specified table(s) only\n" +#, c-format msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" -msgstr " -t, --table=PATRÓN extrae sólo la o las tablas nombradas\n" +msgstr " -e, --extension=PATRÓN extrae sólo la o las extensiones nombradas\n" #: pg_dump.c:1043 pg_dumpall.c:630 #, c-format @@ -1619,10 +1608,9 @@ msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces no volcar asignaciones de tablespace\n" #: pg_dump.c:1073 -#, fuzzy, c-format -#| msgid " --no-comments do not dump comments\n" +#, c-format msgid " --no-toast-compression do not dump TOAST compression methods\n" -msgstr " --no-comments no volcar los comentarios\n" +msgstr " --no-toast-compression no volcar métodos de compresión TOAST\n" #: pg_dump.c:1074 pg_dumpall.c:654 #, c-format @@ -1782,10 +1770,9 @@ msgid "no matching schemas were found for pattern \"%s\"" msgstr "no se encontraron esquemas coincidentes para el patrón «%s»" #: pg_dump.c:1418 -#, fuzzy, c-format -#| msgid "no matching tables were found for pattern \"%s\"" +#, c-format msgid "no matching extensions were found for pattern \"%s\"" -msgstr "no se encontraron tablas coincidentes para el patrón «%s»" +msgstr "no se encontraron extensiones coincidentes para el patrón «%s»" #: pg_dump.c:1465 #, c-format @@ -1850,7 +1837,7 @@ msgstr "salvando search_path = %s" #: pg_dump.c:3436 #, c-format msgid "saving default_toast_compression = %s" -msgstr "" +msgstr "salvando default_toast_compression = %s" #: pg_dump.c:3475 #, c-format @@ -2090,10 +2077,9 @@ msgid "bogus value in pg_transform.trftosql field" msgstr "valor erróneo en el campo pg_transform.trftosql" #: pg_dump.c:12909 -#, fuzzy, c-format -#| msgid "nondeterministic collations are not supported for operator class \"%s\"" +#, c-format msgid "postfix operators are not supported anymore (operator \"%s\")" -msgstr "los ordenamientos no determinísticos no están soportados para la clase de operadores «%s»" +msgstr "los operadores postfix ya no están soportados (operador «%s»)" #: pg_dump.c:13079 #, c-format @@ -2166,21 +2152,19 @@ msgid "invalid column number %d for table \"%s\"" msgstr "el número de columna %d no es válido para la tabla «%s»" #: pg_dump.c:16757 -#, fuzzy, c-format -#| msgid "could not parse end position \"%s\"" +#, c-format msgid "could not parse index statistic columns" -msgstr "no se pudo interpretar la posición final «%s»" +msgstr "no se pudieron interpretar columnas de estadísticas de índices" #: pg_dump.c:16759 -#, fuzzy, c-format -#| msgid "could not parse end position \"%s\"" +#, c-format msgid "could not parse index statistic values" -msgstr "no se pudo interpretar la posición final «%s»" +msgstr "no se pudieron interpretar valores de estadísticas de índices" #: pg_dump.c:16761 #, c-format msgid "mismatched number of columns and values for index statistics" -msgstr "" +msgstr "no coincide el número de columnas con el de valores para estadísticas de índices" #: pg_dump.c:16978 #, c-format @@ -2225,21 +2209,19 @@ msgid "could not find referenced extension %u" msgstr "no se pudo encontrar la extensión referenciada %u" #: pg_dump.c:18219 -#, fuzzy, c-format -#| msgid "could not parse proconfig array" +#, c-format msgid "could not parse extension configuration array" -msgstr "no se pudo interpretar el arreglo proconfig" +msgstr "no se pudo interpretar el arreglo de configuración de extensión" #: pg_dump.c:18221 -#, fuzzy, c-format -#| msgid "could not parse reloptions array" +#, c-format msgid "could not parse extension condition array" -msgstr "no se pudo interpretar el arreglo reloptions" +msgstr "no se pudo interpretar el arreglo de condición de extensión" #: pg_dump.c:18223 #, c-format msgid "mismatched number of configurations and conditions for extension" -msgstr "" +msgstr "no coincide el número de configuraciones con el de condiciones para extensión" #: pg_dump.c:18355 #, c-format diff --git a/src/bin/pg_dump/po/fr.po b/src/bin/pg_dump/po/fr.po index 711e7a7bf3088..cb3002ecca3d2 100644 --- a/src/bin/pg_dump/po/fr.po +++ b/src/bin/pg_dump/po/fr.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-26 06:48+0000\n" -"PO-Revision-Date: 2021-04-26 11:39+0200\n" +"POT-Creation-Date: 2021-05-28 00:48+0000\n" +"PO-Revision-Date: 2021-05-28 15:23+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: PostgreSQLfr \n" "Language: fr\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 2.4.3\n" #: ../../../src/common/logging.c:259 #, c-format @@ -315,17 +315,17 @@ msgstr "lecture des souscriptions" msgid "invalid number of parents %d for table \"%s\"" msgstr "nombre de parents invalide (%d) pour la table « %s »" -#: common.c:1098 +#: common.c:1100 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "vérification échouée, OID %u parent de la table « %s » (OID %u) introuvable" -#: common.c:1140 +#: common.c:1142 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "n'a pas pu analyser le tableau numérique « %s » : trop de nombres" -#: common.c:1155 +#: common.c:1157 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "n'a pas pu analyser le tableau numérique « %s » : caractère invalide dans le nombre" @@ -456,435 +456,430 @@ msgstr "pgpipe: n'a pas pu se connecter au socket: code d'erreur %d" msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: n'a pas pu accepter de connexion: code d'erreur %d" -#: pg_backup_archiver.c:278 pg_backup_archiver.c:1577 +#: pg_backup_archiver.c:277 pg_backup_archiver.c:1576 #, c-format msgid "could not close output file: %m" msgstr "n'a pas pu fermer le fichier en sortie : %m" -#: pg_backup_archiver.c:322 pg_backup_archiver.c:326 +#: pg_backup_archiver.c:321 pg_backup_archiver.c:325 #, c-format msgid "archive items not in correct section order" msgstr "les éléments de l'archive ne sont pas dans l'ordre correct de la section" -#: pg_backup_archiver.c:332 +#: pg_backup_archiver.c:331 #, c-format msgid "unexpected section code %d" msgstr "code de section inattendu %d" -#: pg_backup_archiver.c:369 +#: pg_backup_archiver.c:368 #, c-format msgid "parallel restore is not supported with this archive file format" msgstr "la restauration parallélisée n'est pas supportée avec ce format de fichier d'archive" -#: pg_backup_archiver.c:373 +#: pg_backup_archiver.c:372 #, c-format msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump" msgstr "la restauration parallélisée n'est pas supportée avec les archives réalisées par un pg_dump antérieur à la 8.0" -#: pg_backup_archiver.c:391 +#: pg_backup_archiver.c:390 #, c-format msgid "cannot restore from compressed archive (compression not supported in this installation)" msgstr "ne peut pas restaurer à partir de l'archive compressée (compression indisponible dans cette installation)" -#: pg_backup_archiver.c:408 +#: pg_backup_archiver.c:407 #, c-format msgid "connecting to database for restore" msgstr "connexion à la base de données pour la restauration" -#: pg_backup_archiver.c:410 +#: pg_backup_archiver.c:409 #, c-format msgid "direct database connections are not supported in pre-1.3 archives" msgstr "les connexions directes à la base de données ne sont pas supportées dans les archives pre-1.3" -#: pg_backup_archiver.c:453 +#: pg_backup_archiver.c:452 #, c-format msgid "implied data-only restore" msgstr "a impliqué une restauration des données uniquement" -#: pg_backup_archiver.c:519 +#: pg_backup_archiver.c:518 #, c-format msgid "dropping %s %s" msgstr "suppression de %s %s" -#: pg_backup_archiver.c:614 +#: pg_backup_archiver.c:613 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "n'a pas pu trouver où insérer IF EXISTS dans l'instruction « %s »" -#: pg_backup_archiver.c:770 pg_backup_archiver.c:772 +#: pg_backup_archiver.c:769 pg_backup_archiver.c:771 #, c-format msgid "warning from original dump file: %s" msgstr "message d'avertissement du fichier de sauvegarde original : %s" -#: pg_backup_archiver.c:787 +#: pg_backup_archiver.c:786 #, c-format msgid "creating %s \"%s.%s\"" msgstr "création de %s « %s.%s »" -#: pg_backup_archiver.c:790 +#: pg_backup_archiver.c:789 #, c-format msgid "creating %s \"%s\"" msgstr "création de %s « %s »" -#: pg_backup_archiver.c:840 +#: pg_backup_archiver.c:839 #, c-format msgid "connecting to new database \"%s\"" msgstr "connexion à la nouvelle base de données « %s »" -#: pg_backup_archiver.c:867 +#: pg_backup_archiver.c:866 #, c-format msgid "processing %s" msgstr "traitement de %s" -#: pg_backup_archiver.c:887 +#: pg_backup_archiver.c:886 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "traitement des données de la table « %s.%s »" -#: pg_backup_archiver.c:949 +#: pg_backup_archiver.c:948 #, c-format msgid "executing %s %s" msgstr "exécution de %s %s" -#: pg_backup_archiver.c:988 +#: pg_backup_archiver.c:987 #, c-format msgid "disabling triggers for %s" msgstr "désactivation des triggers pour %s" -#: pg_backup_archiver.c:1014 +#: pg_backup_archiver.c:1013 #, c-format msgid "enabling triggers for %s" msgstr "activation des triggers pour %s" -#: pg_backup_archiver.c:1042 +#: pg_backup_archiver.c:1041 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" msgstr "erreur interne -- WriteData ne peut pas être appelé en dehors du contexte de la routine DataDumper" -#: pg_backup_archiver.c:1225 +#: pg_backup_archiver.c:1224 #, c-format msgid "large-object output not supported in chosen format" msgstr "la sauvegarde des « Large Objects » n'est pas supportée dans le format choisi" -#: pg_backup_archiver.c:1283 +#: pg_backup_archiver.c:1282 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" msgstr[0] "restauration de %d « Large Object »" msgstr[1] "restauration de %d « Large Objects »" -#: pg_backup_archiver.c:1304 pg_backup_tar.c:730 +#: pg_backup_archiver.c:1303 pg_backup_tar.c:730 #, c-format msgid "restoring large object with OID %u" msgstr "restauration du « Large Object » d'OID %u" -#: pg_backup_archiver.c:1316 +#: pg_backup_archiver.c:1315 #, c-format msgid "could not create large object %u: %s" msgstr "n'a pas pu créer le « Large Object » %u : %s" -#: pg_backup_archiver.c:1321 pg_dump.c:3702 +#: pg_backup_archiver.c:1320 pg_dump.c:3638 #, c-format msgid "could not open large object %u: %s" msgstr "n'a pas pu ouvrir le « Large Object » %u : %s" -#: pg_backup_archiver.c:1377 +#: pg_backup_archiver.c:1376 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier TOC « %s » : %m" -#: pg_backup_archiver.c:1405 +#: pg_backup_archiver.c:1404 #, c-format msgid "line ignored: %s" msgstr "ligne ignorée : %s" -#: pg_backup_archiver.c:1412 +#: pg_backup_archiver.c:1411 #, c-format msgid "could not find entry for ID %d" msgstr "n'a pas pu trouver l'entrée pour l'ID %d" -#: pg_backup_archiver.c:1435 pg_backup_directory.c:222 +#: pg_backup_archiver.c:1434 pg_backup_directory.c:222 #: pg_backup_directory.c:598 #, c-format msgid "could not close TOC file: %m" msgstr "n'a pas pu fermer le fichier TOC : %m" -#: pg_backup_archiver.c:1549 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_archiver.c:1548 pg_backup_custom.c:156 pg_backup_directory.c:332 #: pg_backup_directory.c:585 pg_backup_directory.c:648 -#: pg_backup_directory.c:667 pg_dumpall.c:485 +#: pg_backup_directory.c:667 pg_dumpall.c:489 #, c-format msgid "could not open output file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier de sauvegarde « %s » : %m" -#: pg_backup_archiver.c:1551 pg_backup_custom.c:162 +#: pg_backup_archiver.c:1550 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "n'a pas pu ouvrir le fichier de sauvegarde : %m" -#: pg_backup_archiver.c:1644 +#: pg_backup_archiver.c:1643 #, c-format msgid "wrote %zu byte of large object data (result = %d)" msgid_plural "wrote %zu bytes of large object data (result = %d)" msgstr[0] "a écrit %zu octet de données d'un « Large Object » (résultat = %d)" msgstr[1] "a écrit %zu octets de données d'un « Large Object » (résultat = %d)" -#: pg_backup_archiver.c:1650 +#: pg_backup_archiver.c:1649 #, c-format msgid "could not write to large object: %s" msgstr "n'a pas pu écrire dans le « Large Object » : %s" -#: pg_backup_archiver.c:1740 +#: pg_backup_archiver.c:1739 #, c-format msgid "while INITIALIZING:" msgstr "pendant l'initialisation (« INITIALIZING ») :" -#: pg_backup_archiver.c:1745 +#: pg_backup_archiver.c:1744 #, c-format msgid "while PROCESSING TOC:" msgstr "pendant le traitement de la TOC (« PROCESSING TOC ») :" -#: pg_backup_archiver.c:1750 +#: pg_backup_archiver.c:1749 #, c-format msgid "while FINALIZING:" msgstr "pendant la finalisation (« FINALIZING ») :" -#: pg_backup_archiver.c:1755 +#: pg_backup_archiver.c:1754 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "de l'entrée TOC %d ; %u %u %s %s %s" -#: pg_backup_archiver.c:1831 +#: pg_backup_archiver.c:1830 #, c-format msgid "bad dumpId" msgstr "mauvais dumpId" -#: pg_backup_archiver.c:1852 +#: pg_backup_archiver.c:1851 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "mauvais dumpId de table pour l'élément TABLE DATA" -#: pg_backup_archiver.c:1944 +#: pg_backup_archiver.c:1943 #, c-format msgid "unexpected data offset flag %d" msgstr "drapeau de décalage de données inattendu %d" -#: pg_backup_archiver.c:1957 +#: pg_backup_archiver.c:1956 #, c-format msgid "file offset in dump file is too large" msgstr "le décalage dans le fichier de sauvegarde est trop important" -#: pg_backup_archiver.c:2095 pg_backup_archiver.c:2105 +#: pg_backup_archiver.c:2094 pg_backup_archiver.c:2104 #, c-format msgid "directory name too long: \"%s\"" msgstr "nom du répertoire trop long : « %s »" -#: pg_backup_archiver.c:2113 +#: pg_backup_archiver.c:2112 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" msgstr "le répertoire « %s » ne semble pas être une archive valide (« toc.dat » n'existe pas)" -#: pg_backup_archiver.c:2121 pg_backup_custom.c:173 pg_backup_custom.c:807 +#: pg_backup_archiver.c:2120 pg_backup_custom.c:173 pg_backup_custom.c:807 #: pg_backup_directory.c:207 pg_backup_directory.c:394 #, c-format msgid "could not open input file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier en entrée « %s » : %m" -#: pg_backup_archiver.c:2128 pg_backup_custom.c:179 +#: pg_backup_archiver.c:2127 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "n'a pas pu ouvrir le fichier en entrée : %m" -#: pg_backup_archiver.c:2134 +#: pg_backup_archiver.c:2133 #, c-format msgid "could not read input file: %m" msgstr "n'a pas pu lire le fichier en entrée : %m" -#: pg_backup_archiver.c:2136 +#: pg_backup_archiver.c:2135 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "le fichier en entrée est trop petit (%lu lus, 5 attendus)" -#: pg_backup_archiver.c:2168 +#: pg_backup_archiver.c:2167 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "Le fichier en entrée semble être une sauvegarde au format texte. Merci d'utiliser psql." -#: pg_backup_archiver.c:2174 +#: pg_backup_archiver.c:2173 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "le fichier en entrée ne semble pas être une archive valide (trop petit ?)" -#: pg_backup_archiver.c:2180 +#: pg_backup_archiver.c:2179 #, c-format msgid "input file does not appear to be a valid archive" msgstr "le fichier en entrée ne semble pas être une archive valide" -#: pg_backup_archiver.c:2189 +#: pg_backup_archiver.c:2188 #, c-format msgid "could not close input file: %m" msgstr "n'a pas pu fermer le fichier en entrée : %m" -#: pg_backup_archiver.c:2306 +#: pg_backup_archiver.c:2305 #, c-format msgid "unrecognized file format \"%d\"" msgstr "format de fichier « %d » non reconnu" -#: pg_backup_archiver.c:2388 pg_backup_archiver.c:4422 +#: pg_backup_archiver.c:2387 pg_backup_archiver.c:4390 #, c-format msgid "finished item %d %s %s" msgstr "élément terminé %d %s %s" -#: pg_backup_archiver.c:2392 pg_backup_archiver.c:4435 +#: pg_backup_archiver.c:2391 pg_backup_archiver.c:4403 #, c-format msgid "worker process failed: exit code %d" msgstr "échec du processus worker : code de sortie %d" -#: pg_backup_archiver.c:2512 +#: pg_backup_archiver.c:2511 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "ID %d de l'entrée en dehors de la plage -- peut-être un TOC corrompu" -#: pg_backup_archiver.c:2579 +#: pg_backup_archiver.c:2578 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "la restauration des tables avec WITH OIDS n'est plus supportée" -#: pg_backup_archiver.c:2663 +#: pg_backup_archiver.c:2660 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "encodage « %s » non reconnu" -#: pg_backup_archiver.c:2668 +#: pg_backup_archiver.c:2665 #, c-format msgid "invalid ENCODING item: %s" msgstr "élément ENCODING invalide : %s" -#: pg_backup_archiver.c:2686 +#: pg_backup_archiver.c:2683 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "élément STDSTRINGS invalide : %s" -#: pg_backup_archiver.c:2717 -#, c-format -msgid "invalid TOASTCOMPRESSION item: %s" -msgstr "élément TOASTCOMPRESSION invalide : %s" - -#: pg_backup_archiver.c:2734 +#: pg_backup_archiver.c:2708 #, c-format msgid "schema \"%s\" not found" msgstr "schéma « %s » non trouvé" -#: pg_backup_archiver.c:2741 +#: pg_backup_archiver.c:2715 #, c-format msgid "table \"%s\" not found" msgstr "table « %s » non trouvée" -#: pg_backup_archiver.c:2748 +#: pg_backup_archiver.c:2722 #, c-format msgid "index \"%s\" not found" msgstr "index « %s » non trouvé" -#: pg_backup_archiver.c:2755 +#: pg_backup_archiver.c:2729 #, c-format msgid "function \"%s\" not found" msgstr "fonction « %s » non trouvée" -#: pg_backup_archiver.c:2762 +#: pg_backup_archiver.c:2736 #, c-format msgid "trigger \"%s\" not found" msgstr "trigger « %s » non trouvé" -#: pg_backup_archiver.c:3160 +#: pg_backup_archiver.c:3128 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "n'a pas pu initialiser la session utilisateur à « %s »: %s" -#: pg_backup_archiver.c:3292 +#: pg_backup_archiver.c:3260 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "n'a pas pu configurer search_path à « %s » : %s" -#: pg_backup_archiver.c:3354 +#: pg_backup_archiver.c:3322 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "n'a pas pu configurer default_tablespace à %s : %s" -#: pg_backup_archiver.c:3399 +#: pg_backup_archiver.c:3367 #, c-format msgid "could not set default_table_access_method: %s" msgstr "n'a pas pu configurer la méthode default_table_access_method à %s" -#: pg_backup_archiver.c:3491 pg_backup_archiver.c:3649 +#: pg_backup_archiver.c:3459 pg_backup_archiver.c:3617 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "ne sait pas comment initialiser le propriétaire du type d'objet « %s »" -#: pg_backup_archiver.c:3753 +#: pg_backup_archiver.c:3721 #, c-format msgid "did not find magic string in file header" msgstr "n'a pas trouver la chaîne magique dans le fichier d'en-tête" -#: pg_backup_archiver.c:3767 +#: pg_backup_archiver.c:3735 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "version non supportée (%d.%d) dans le fichier d'en-tête" -#: pg_backup_archiver.c:3772 +#: pg_backup_archiver.c:3740 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "échec de la vérification sur la taille de l'entier (%lu)" -#: pg_backup_archiver.c:3776 +#: pg_backup_archiver.c:3744 #, c-format msgid "archive was made on a machine with larger integers, some operations might fail" msgstr "l'archive a été créée sur une machine disposant d'entiers plus larges, certaines opérations peuvent échouer" -#: pg_backup_archiver.c:3786 +#: pg_backup_archiver.c:3754 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "le format attendu (%d) diffère du format du fichier (%d)" -#: pg_backup_archiver.c:3801 +#: pg_backup_archiver.c:3769 #, c-format msgid "archive is compressed, but this installation does not support compression -- no data will be available" msgstr "l'archive est compressée mais cette installation ne supporte pas la compression -- aucune donnée ne sera disponible" -#: pg_backup_archiver.c:3819 +#: pg_backup_archiver.c:3787 #, c-format msgid "invalid creation date in header" msgstr "date de création invalide dans l'en-tête" -#: pg_backup_archiver.c:3947 +#: pg_backup_archiver.c:3915 #, c-format msgid "processing item %d %s %s" msgstr "traitement de l'élément %d %s %s" -#: pg_backup_archiver.c:4026 +#: pg_backup_archiver.c:3994 #, c-format msgid "entering main parallel loop" msgstr "entrée dans la boucle parallèle principale" -#: pg_backup_archiver.c:4037 +#: pg_backup_archiver.c:4005 #, c-format msgid "skipping item %d %s %s" msgstr "omission de l'élément %d %s %s" -#: pg_backup_archiver.c:4046 +#: pg_backup_archiver.c:4014 #, c-format msgid "launching item %d %s %s" msgstr "lancement de l'élément %d %s %s" -#: pg_backup_archiver.c:4100 +#: pg_backup_archiver.c:4068 #, c-format msgid "finished main parallel loop" msgstr "fin de la boucle parallèle principale" -#: pg_backup_archiver.c:4136 +#: pg_backup_archiver.c:4104 #, c-format msgid "processing missed item %d %s %s" msgstr "traitement de l'élément manquant %d %s %s" -#: pg_backup_archiver.c:4741 +#: pg_backup_archiver.c:4709 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "la table « %s » n'a pas pu être créée, ses données ne seront pas restaurées" @@ -980,12 +975,12 @@ msgstr "compression activée" msgid "could not get server_version from libpq" msgstr "n'a pas pu obtenir server_version de libpq" -#: pg_backup_db.c:53 pg_dumpall.c:1821 +#: pg_backup_db.c:53 pg_dumpall.c:1826 #, c-format msgid "server version: %s; %s version: %s" msgstr "version du serveur : %s ; %s version : %s" -#: pg_backup_db.c:55 pg_dumpall.c:1823 +#: pg_backup_db.c:55 pg_dumpall.c:1828 #, c-format msgid "aborting because of server version mismatch" msgstr "annulation à cause de la différence des versions" @@ -995,7 +990,7 @@ msgstr "annulation à cause de la différence des versions" msgid "already connected to a database" msgstr "déjà connecté à une base de données" -#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1650 pg_dumpall.c:1761 +#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1655 pg_dumpall.c:1766 msgid "Password: " msgstr "Mot de passe : " @@ -1009,17 +1004,17 @@ msgstr "n'a pas pu se connecter à la base de données" msgid "reconnection failed: %s" msgstr "échec de la reconnexion : %s" -#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1681 pg_dumpall.c:1771 +#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1686 pg_dumpall.c:1776 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:276 pg_dumpall.c:1884 pg_dumpall.c:1907 +#: pg_backup_db.c:276 pg_dumpall.c:1889 pg_dumpall.c:1912 #, c-format msgid "query failed: %s" msgstr "échec de la requête : %s" -#: pg_backup_db.c:278 pg_dumpall.c:1885 pg_dumpall.c:1908 +#: pg_backup_db.c:278 pg_dumpall.c:1890 pg_dumpall.c:1913 #, c-format msgid "query was: %s" msgstr "la requête était : %s" @@ -1055,7 +1050,7 @@ msgstr "erreur renvoyée par PQputCopyEnd : %s" msgid "COPY failed for table \"%s\": %s" msgstr "COPY échoué pour la table « %s » : %s" -#: pg_backup_db.c:525 pg_dump.c:2086 +#: pg_backup_db.c:525 pg_dump.c:2074 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "résultats supplémentaires non attendus durant l'exécution de COPY sur la table « %s »" @@ -1226,9 +1221,9 @@ msgstr "en-tête tar corrompu trouvé dans %s (%d attendu, %d calculé ) à la p msgid "unrecognized section name: \"%s\"" msgstr "nom de section non reconnu : « %s »" -#: pg_backup_utils.c:55 pg_dump.c:628 pg_dump.c:645 pg_dumpall.c:339 -#: pg_dumpall.c:349 pg_dumpall.c:358 pg_dumpall.c:367 pg_dumpall.c:375 -#: pg_dumpall.c:389 pg_dumpall.c:465 pg_restore.c:284 pg_restore.c:300 +#: pg_backup_utils.c:55 pg_dump.c:622 pg_dump.c:639 pg_dumpall.c:341 +#: pg_dumpall.c:351 pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:377 +#: pg_dumpall.c:391 pg_dumpall.c:469 pg_restore.c:284 pg_restore.c:300 #: pg_restore.c:318 #, c-format msgid "Try \"%s --help\" for more information.\n" @@ -1239,77 +1234,72 @@ msgstr "Essayer « %s --help » pour plus d'informations.\n" msgid "out of on_exit_nicely slots" msgstr "plus d'emplacements on_exit_nicely" -#: pg_dump.c:554 +#: pg_dump.c:548 #, c-format msgid "compression level must be in range 0..9" msgstr "le niveau de compression doit être compris entre 0 et 9" -#: pg_dump.c:592 +#: pg_dump.c:586 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digits doit être dans l'intervalle -15 à 3" -#: pg_dump.c:615 +#: pg_dump.c:609 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "le nombre de lignes par insertion doit être compris entre %d et %d" -#: pg_dump.c:643 pg_dumpall.c:347 pg_restore.c:298 +#: pg_dump.c:637 pg_dumpall.c:349 pg_restore.c:298 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" -#: pg_dump.c:664 pg_restore.c:327 +#: pg_dump.c:658 pg_restore.c:327 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "les options « -s/--schema-only » et « -a/--data-only » ne peuvent pas être utilisées ensemble" -#: pg_dump.c:669 +#: pg_dump.c:663 #, c-format msgid "options -s/--schema-only and --include-foreign-data cannot be used together" msgstr "les options « -s/--schema-only » et « --include-foreign-data » ne peuvent pas être utilisées ensemble" -#: pg_dump.c:672 +#: pg_dump.c:666 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" msgstr "l'option --include-foreign-data n'est pas supportée avec une sauvegarde parallélisée" -#: pg_dump.c:676 pg_restore.c:333 +#: pg_dump.c:670 pg_restore.c:333 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "les options « -c/--clean » et « -a/--data-only » ne peuvent pas être utilisées ensemble" -#: pg_dump.c:681 pg_dumpall.c:382 pg_restore.c:382 +#: pg_dump.c:675 pg_dumpall.c:384 pg_restore.c:382 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "l'option --if-exists nécessite l'option -c/--clean" -#: pg_dump.c:688 +#: pg_dump.c:682 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "l'option --on-conflict-do-nothing requiert l'option --inserts, --rows-per-insert, ou --column-inserts" -#: pg_dump.c:710 +#: pg_dump.c:704 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "la compression requise n'est pas disponible avec cette installation -- l'archive ne sera pas compressée" -#: pg_dump.c:731 pg_restore.c:349 +#: pg_dump.c:725 pg_restore.c:349 #, c-format msgid "invalid number of parallel jobs" msgstr "nombre de jobs parallèles invalide" -#: pg_dump.c:735 +#: pg_dump.c:729 #, c-format msgid "parallel backup only supported by the directory format" msgstr "la sauvegarde parallélisée n'est supportée qu'avec le format directory" -#: pg_dump.c:739 -#, c-format -msgid "option --index-collation-versions-unknown only works in binary upgrade mode" -msgstr "l'option --index-collation-versions-unknown fonctionne seulement dans le mode de mise à jour binaire" - -#: pg_dump.c:794 +#: pg_dump.c:784 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1320,32 +1310,32 @@ msgstr "" "Lancez avec --no-synchronized-snapshots à la place si vous n'avez pas besoin\n" "de snapshots synchronisés." -#: pg_dump.c:800 +#: pg_dump.c:790 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Les images exportées de la base ne sont pas supportées par cette version du serveur." -#: pg_dump.c:812 +#: pg_dump.c:802 #, c-format msgid "last built-in OID is %u" msgstr "le dernier OID interne est %u" -#: pg_dump.c:821 +#: pg_dump.c:811 #, c-format msgid "no matching schemas were found" msgstr "aucun schéma correspondant n'a été trouvé" -#: pg_dump.c:835 +#: pg_dump.c:825 #, c-format msgid "no matching tables were found" msgstr "aucune table correspondante n'a été trouvée" -#: pg_dump.c:857 +#: pg_dump.c:847 #, c-format msgid "no matching extensions were found" msgstr "aucune extension correspondante n'a été trouvée" -#: pg_dump.c:1029 +#: pg_dump.c:1017 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1355,17 +1345,17 @@ msgstr "" "formats.\n" "\n" -#: pg_dump.c:1030 pg_dumpall.c:618 pg_restore.c:462 +#: pg_dump.c:1018 pg_dumpall.c:622 pg_restore.c:462 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: pg_dump.c:1031 +#: pg_dump.c:1019 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [NOMBASE]\n" -#: pg_dump.c:1033 pg_dumpall.c:621 pg_restore.c:465 +#: pg_dump.c:1021 pg_dumpall.c:625 pg_restore.c:465 #, c-format msgid "" "\n" @@ -1374,12 +1364,12 @@ msgstr "" "\n" "Options générales :\n" -#: pg_dump.c:1034 +#: pg_dump.c:1022 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=NOMFICHIER nom du fichier ou du répertoire en sortie\n" -#: pg_dump.c:1035 +#: pg_dump.c:1023 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1388,48 +1378,48 @@ msgstr "" " -F, --format=c|d|t|p format du fichier de sortie (personnalisé,\n" " répertoire, tar, texte (par défaut))\n" -#: pg_dump.c:1037 +#: pg_dump.c:1025 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr "" " -j, --jobs=NUMERO utilise ce nombre de jobs en parallèle pour\n" " la sauvegarde\n" -#: pg_dump.c:1038 pg_dumpall.c:623 +#: pg_dump.c:1026 pg_dumpall.c:627 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose mode verbeux\n" -#: pg_dump.c:1039 pg_dumpall.c:624 +#: pg_dump.c:1027 pg_dumpall.c:628 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: pg_dump.c:1040 +#: pg_dump.c:1028 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr "" " -Z, --compress=0-9 niveau de compression pour les formats\n" " compressés\n" -#: pg_dump.c:1041 pg_dumpall.c:625 +#: pg_dump.c:1029 pg_dumpall.c:629 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr "" " --lock-wait-timeout=DÉLAI échec après l'attente du DÉLAI pour un verrou\n" " de table\n" -#: pg_dump.c:1042 pg_dumpall.c:652 +#: pg_dump.c:1030 pg_dumpall.c:656 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync n'attend pas que les modifications soient proprement écrites sur disque\n" -#: pg_dump.c:1043 pg_dumpall.c:626 +#: pg_dump.c:1031 pg_dumpall.c:630 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: pg_dump.c:1045 pg_dumpall.c:627 +#: pg_dump.c:1033 pg_dumpall.c:631 #, c-format msgid "" "\n" @@ -1438,64 +1428,64 @@ msgstr "" "\n" "Options contrôlant le contenu en sortie :\n" -#: pg_dump.c:1046 pg_dumpall.c:628 +#: pg_dump.c:1034 pg_dumpall.c:632 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr "" " -a, --data-only sauvegarde uniquement les données, pas le\n" " schéma\n" -#: pg_dump.c:1047 +#: pg_dump.c:1035 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr "" " -b, --blobs inclut les « Large Objects » dans la\n" " sauvegarde\n" -#: pg_dump.c:1048 +#: pg_dump.c:1036 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr "" " -B, --no-blobs exclut les « Large Objects » dans la\n" " sauvegarde\n" -#: pg_dump.c:1049 pg_restore.c:476 +#: pg_dump.c:1037 pg_restore.c:476 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr "" " -c, --clean nettoie/supprime les objets de la base de\n" " données avant de les créer\n" -#: pg_dump.c:1050 +#: pg_dump.c:1038 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr "" " -C, --create inclut les commandes de création de la base\n" " dans la sauvegarde\n" -#: pg_dump.c:1051 +#: pg_dump.c:1039 #, c-format msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" msgstr " -e, --extension=MOTIF sauvegarde uniquement les extensions indiquées\n" -#: pg_dump.c:1052 pg_dumpall.c:630 +#: pg_dump.c:1040 pg_dumpall.c:634 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr "" " -E, --encoding=ENCODAGE sauvegarde les données dans l'encodage\n" " ENCODAGE\n" -#: pg_dump.c:1053 +#: pg_dump.c:1041 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=MOTIF sauvegarde uniquement les schémas indiqués\n" -#: pg_dump.c:1054 +#: pg_dump.c:1042 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=MOTIF ne sauvegarde pas les schémas indiqués\n" -#: pg_dump.c:1055 +#: pg_dump.c:1043 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1504,50 +1494,50 @@ msgstr "" " -O, --no-owner ne sauvegarde pas les propriétaires des\n" " objets lors de l'utilisation du format texte\n" -#: pg_dump.c:1057 pg_dumpall.c:634 +#: pg_dump.c:1045 pg_dumpall.c:638 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr "" " -s, --schema-only sauvegarde uniquement la structure, pas les\n" " données\n" -#: pg_dump.c:1058 +#: pg_dump.c:1046 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr "" " -S, --superuser=NOM indique le nom du super-utilisateur à\n" " utiliser avec le format texte\n" -#: pg_dump.c:1059 +#: pg_dump.c:1047 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=MOTIF sauvegarde uniquement les tables indiquées\n" -#: pg_dump.c:1060 +#: pg_dump.c:1048 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=MOTIF ne sauvegarde pas les tables indiquées\n" -#: pg_dump.c:1061 pg_dumpall.c:637 +#: pg_dump.c:1049 pg_dumpall.c:641 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges ne sauvegarde pas les droits sur les objets\n" -#: pg_dump.c:1062 pg_dumpall.c:638 +#: pg_dump.c:1050 pg_dumpall.c:642 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr "" " --binary-upgrade à n'utiliser que par les outils de mise à\n" " jour seulement\n" -#: pg_dump.c:1063 pg_dumpall.c:639 +#: pg_dump.c:1051 pg_dumpall.c:643 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr "" " --column-inserts sauvegarde les données avec des commandes\n" " INSERT en précisant les noms des colonnes\n" -#: pg_dump.c:1064 pg_dumpall.c:640 +#: pg_dump.c:1052 pg_dumpall.c:644 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr "" @@ -1555,14 +1545,14 @@ msgstr "" " dollar dans le but de respecter le standard\n" " SQL en matière de guillemets\n" -#: pg_dump.c:1065 pg_dumpall.c:641 pg_restore.c:493 +#: pg_dump.c:1053 pg_dumpall.c:645 pg_restore.c:493 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr "" " --disable-triggers désactive les triggers en mode de restauration\n" " des données seules\n" -#: pg_dump.c:1066 +#: pg_dump.c:1054 #, c-format msgid "" " --enable-row-security enable row security (dump only content user has\n" @@ -1572,22 +1562,22 @@ msgstr "" " sauvegarde uniquement le contenu visible par\\n\n" " cet utilisateur)\n" -#: pg_dump.c:1068 +#: pg_dump.c:1056 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=MOTIF ne sauvegarde pas les tables indiquées\n" -#: pg_dump.c:1069 pg_dumpall.c:643 +#: pg_dump.c:1057 pg_dumpall.c:647 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=NUM surcharge la configuration par défaut de extra_float_digits\n" -#: pg_dump.c:1070 pg_dumpall.c:644 pg_restore.c:495 +#: pg_dump.c:1058 pg_dumpall.c:648 pg_restore.c:495 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists utilise IF EXISTS lors de la suppression des objets\n" -#: pg_dump.c:1071 +#: pg_dump.c:1059 #, c-format msgid "" " --include-foreign-data=PATTERN\n" @@ -1598,101 +1588,101 @@ msgstr "" " inclut les données des tables externes pour les\n" " serveurs distants correspondant au motif MOTIF\n" -#: pg_dump.c:1074 pg_dumpall.c:645 +#: pg_dump.c:1062 pg_dumpall.c:649 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr "" " --inserts sauvegarde les données avec des instructions\n" " INSERT plutôt que COPY\n" -#: pg_dump.c:1075 pg_dumpall.c:646 +#: pg_dump.c:1063 pg_dumpall.c:650 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root charger les partitions via la table racine\n" -#: pg_dump.c:1076 pg_dumpall.c:647 +#: pg_dump.c:1064 pg_dumpall.c:651 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments ne sauvegarde pas les commentaires\n" -#: pg_dump.c:1077 pg_dumpall.c:648 +#: pg_dump.c:1065 pg_dumpall.c:652 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications ne sauvegarde pas les publications\n" -#: pg_dump.c:1078 pg_dumpall.c:650 +#: pg_dump.c:1066 pg_dumpall.c:654 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr "" " --no-security-labels ne sauvegarde pas les affectations de labels de\n" " sécurité\n" -#: pg_dump.c:1079 pg_dumpall.c:651 +#: pg_dump.c:1067 pg_dumpall.c:655 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions ne sauvegarde pas les souscriptions\n" -#: pg_dump.c:1080 +#: pg_dump.c:1068 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr " --no-synchronized-snapshots n'utilise pas de snapshots synchronisés pour les jobs en parallèle\n" -#: pg_dump.c:1081 pg_dumpall.c:653 +#: pg_dump.c:1069 pg_dumpall.c:657 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr "" " --no-tablespaces ne sauvegarde pas les affectations de\n" " tablespaces\n" -#: pg_dump.c:1082 +#: pg_dump.c:1070 pg_dumpall.c:658 #, c-format -msgid " --no-toast-compression do not dump toast compression methods\n" +msgid " --no-toast-compression do not dump TOAST compression methods\n" msgstr " --no-toast-compression ne sauvegarde pas les méthodes de compression de TOAST\n" -#: pg_dump.c:1083 pg_dumpall.c:654 +#: pg_dump.c:1071 pg_dumpall.c:659 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr "" " --no-unlogged-table-data ne sauvegarde pas les données des tables non\n" " journalisées\n" -#: pg_dump.c:1084 pg_dumpall.c:655 +#: pg_dump.c:1072 pg_dumpall.c:660 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" msgstr " --on-conflict-do-nothing ajoute ON CONFLICT DO NOTHING aux commandes INSERT\n" -#: pg_dump.c:1085 pg_dumpall.c:656 +#: pg_dump.c:1073 pg_dumpall.c:661 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers met entre guillemets tous les identifiants\n" " même s'il ne s'agit pas de mots clés\n" -#: pg_dump.c:1086 pg_dumpall.c:657 +#: pg_dump.c:1074 pg_dumpall.c:662 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=NROWS nombre de lignes par INSERT ; implique --inserts\n" -#: pg_dump.c:1087 +#: pg_dump.c:1075 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr "" " --section=SECTION sauvegarde la section indiquée (pre-data, data\n" " ou post-data)\n" -#: pg_dump.c:1088 +#: pg_dump.c:1076 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr "" " --serializable-deferrable attend jusqu'à ce que la sauvegarde puisse\n" " s'exécuter sans anomalies\n" -#: pg_dump.c:1089 +#: pg_dump.c:1077 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT utilise l'image donnée pour la sauvegarde\n" -#: pg_dump.c:1090 pg_restore.c:504 +#: pg_dump.c:1078 pg_restore.c:504 #, c-format msgid "" " --strict-names require table and/or schema include patterns to\n" @@ -1701,7 +1691,7 @@ msgstr "" " --strict-names requiert que le motifs de table et/ou schéma\n" " correspondent à au moins une entité de chaque\n" -#: pg_dump.c:1092 pg_dumpall.c:658 pg_restore.c:506 +#: pg_dump.c:1080 pg_dumpall.c:663 pg_restore.c:506 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1713,7 +1703,7 @@ msgstr "" " au lieu des commandes ALTER OWNER pour\n" " modifier les propriétaires\n" -#: pg_dump.c:1096 pg_dumpall.c:662 pg_restore.c:510 +#: pg_dump.c:1084 pg_dumpall.c:667 pg_restore.c:510 #, c-format msgid "" "\n" @@ -1722,48 +1712,48 @@ msgstr "" "\n" "Options de connexion :\n" -#: pg_dump.c:1097 +#: pg_dump.c:1085 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=NOMBASE base de données à sauvegarder\n" -#: pg_dump.c:1098 pg_dumpall.c:664 pg_restore.c:511 +#: pg_dump.c:1086 pg_dumpall.c:669 pg_restore.c:511 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=NOMHÔTE hôte du serveur de bases de données ou\n" " répertoire des sockets\n" -#: pg_dump.c:1099 pg_dumpall.c:666 pg_restore.c:512 +#: pg_dump.c:1087 pg_dumpall.c:671 pg_restore.c:512 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr "" " -p, --port=PORT numéro de port du serveur de bases de\n" " données\n" -#: pg_dump.c:1100 pg_dumpall.c:667 pg_restore.c:513 +#: pg_dump.c:1088 pg_dumpall.c:672 pg_restore.c:513 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NOM se connecter avec cet utilisateur\n" -#: pg_dump.c:1101 pg_dumpall.c:668 pg_restore.c:514 +#: pg_dump.c:1089 pg_dumpall.c:673 pg_restore.c:514 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password ne demande jamais le mot de passe\n" -#: pg_dump.c:1102 pg_dumpall.c:669 pg_restore.c:515 +#: pg_dump.c:1090 pg_dumpall.c:674 pg_restore.c:515 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password force la demande du mot de passe (par\n" " défaut)\n" -#: pg_dump.c:1103 pg_dumpall.c:670 +#: pg_dump.c:1091 pg_dumpall.c:675 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=NOMROLE exécute SET ROLE avant la sauvegarde\n" -#: pg_dump.c:1105 +#: pg_dump.c:1093 #, c-format msgid "" "\n" @@ -1776,22 +1766,22 @@ msgstr "" "d'environnement PGDATABASE est alors utilisée.\n" "\n" -#: pg_dump.c:1107 pg_dumpall.c:674 pg_restore.c:522 +#: pg_dump.c:1095 pg_dumpall.c:679 pg_restore.c:522 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Rapporter les bogues à <%s>.\n" -#: pg_dump.c:1108 pg_dumpall.c:675 pg_restore.c:523 +#: pg_dump.c:1096 pg_dumpall.c:680 pg_restore.c:523 #, c-format msgid "%s home page: <%s>\n" msgstr "page d'accueil de %s : <%s>\n" -#: pg_dump.c:1127 pg_dumpall.c:500 +#: pg_dump.c:1115 pg_dumpall.c:504 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "encodage client indiqué (« %s ») invalide" -#: pg_dump.c:1273 +#: pg_dump.c:1261 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server version.\n" @@ -1802,501 +1792,481 @@ msgstr "" "Lancez avec --no-synchronized-snapshots à la place si vous n'avez pas besoin\n" "de snapshots synchronisés." -#: pg_dump.c:1342 +#: pg_dump.c:1330 #, c-format msgid "invalid output format \"%s\" specified" msgstr "format de sortie « %s » invalide" -#: pg_dump.c:1380 +#: pg_dump.c:1368 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "aucun schéma correspondant n'a été trouvé avec le motif « %s »" -#: pg_dump.c:1427 +#: pg_dump.c:1415 #, c-format msgid "no matching extensions were found for pattern \"%s\"" msgstr "aucune extension correspondante n'a été trouvée avec le motif « %s »" -#: pg_dump.c:1474 +#: pg_dump.c:1462 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "aucun serveur distant correspondant n'a été trouvé avec le motif « %s »" -#: pg_dump.c:1537 +#: pg_dump.c:1525 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "aucune table correspondante n'a été trouvée avec le motif « %s »" -#: pg_dump.c:1960 +#: pg_dump.c:1948 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "sauvegarde du contenu de la table « %s.%s »" -#: pg_dump.c:2067 +#: pg_dump.c:2055 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Sauvegarde du contenu de la table « %s » échouée : échec de PQgetCopyData()." -#: pg_dump.c:2068 pg_dump.c:2078 +#: pg_dump.c:2056 pg_dump.c:2066 #, c-format msgid "Error message from server: %s" msgstr "Message d'erreur du serveur : %s" -#: pg_dump.c:2069 pg_dump.c:2079 +#: pg_dump.c:2057 pg_dump.c:2067 #, c-format msgid "The command was: %s" msgstr "La commande était : %s" -#: pg_dump.c:2077 +#: pg_dump.c:2065 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Sauvegarde du contenu de la table « %s » échouée : échec de PQgetResult()." -#: pg_dump.c:2837 +#: pg_dump.c:2825 #, c-format msgid "saving database definition" msgstr "sauvegarde de la définition de la base de données" -#: pg_dump.c:3309 +#: pg_dump.c:3297 #, c-format msgid "saving encoding = %s" msgstr "encodage de la sauvegarde = %s" -#: pg_dump.c:3334 +#: pg_dump.c:3322 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "sauvegarde de standard_conforming_strings = %s" -#: pg_dump.c:3373 +#: pg_dump.c:3361 #, c-format msgid "could not parse result of current_schemas()" msgstr "n'a pas pu analyser le résultat de current_schema()" -#: pg_dump.c:3392 +#: pg_dump.c:3380 #, c-format msgid "saving search_path = %s" msgstr "sauvegarde de search_path = %s" -#: pg_dump.c:3445 -#, c-format -msgid "saving default_toast_compression = %s" -msgstr "sauvegarde de default_toast_compression = %s" - -#: pg_dump.c:3484 +#: pg_dump.c:3420 #, c-format msgid "reading large objects" msgstr "lecture des « Large Objects »" -#: pg_dump.c:3666 +#: pg_dump.c:3602 #, c-format msgid "saving large objects" msgstr "sauvegarde des « Large Objects »" -#: pg_dump.c:3712 +#: pg_dump.c:3648 #, c-format msgid "error reading large object %u: %s" msgstr "erreur lors de la lecture du « Large Object » %u : %s" -#: pg_dump.c:3764 +#: pg_dump.c:3700 #, c-format msgid "reading row security enabled for table \"%s.%s\"" msgstr "lecture de l'activation de la sécurité niveau ligne pour la table « %s.%s »" -#: pg_dump.c:3795 +#: pg_dump.c:3731 #, c-format msgid "reading policies for table \"%s.%s\"" msgstr "lecture des politiques pour la table « %s.%s »" -#: pg_dump.c:3947 +#: pg_dump.c:3883 #, c-format msgid "unexpected policy command type: %c" msgstr "type de commande inattendu pour la politique : %c" -#: pg_dump.c:4101 +#: pg_dump.c:4037 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "le propriétaire de la publication « %s » semble être invalide" -#: pg_dump.c:4393 +#: pg_dump.c:4329 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "les souscriptions ne sont pas sauvegardées parce que l'utilisateur courant n'est pas un superutilisateur" -#: pg_dump.c:4464 +#: pg_dump.c:4400 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "le propriétaire de la souscription « %s » semble être invalide" -#: pg_dump.c:4507 +#: pg_dump.c:4443 #, c-format msgid "could not parse subpublications array" msgstr "n'a pas pu analyser le tableau de sous-publications" -#: pg_dump.c:4865 +#: pg_dump.c:4801 #, c-format msgid "could not find parent extension for %s %s" msgstr "n'a pas pu trouver l'extension parent pour %s %s" -#: pg_dump.c:4997 +#: pg_dump.c:4933 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "le propriétaire du schéma « %s » semble être invalide" -#: pg_dump.c:5020 +#: pg_dump.c:4956 #, c-format msgid "schema with OID %u does not exist" msgstr "le schéma d'OID %u n'existe pas" -#: pg_dump.c:5349 +#: pg_dump.c:5285 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "le propriétaire du type de données « %s » semble être invalide" -#: pg_dump.c:5433 +#: pg_dump.c:5369 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "le propriétaire de l'opérateur « %s » semble être invalide" -#: pg_dump.c:5732 +#: pg_dump.c:5668 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "le propriétaire de la classe d'opérateur « %s » semble être invalide" -#: pg_dump.c:5815 +#: pg_dump.c:5751 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "le propriétaire de la famille d'opérateur « %s » semble être invalide" -#: pg_dump.c:5983 +#: pg_dump.c:5919 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "le propriétaire de la fonction d'agrégat « %s » semble être invalide" -#: pg_dump.c:6242 +#: pg_dump.c:6178 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "le propriétaire de la fonction « %s » semble être invalide" -#: pg_dump.c:7069 +#: pg_dump.c:7005 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "le propriétaire de la table « %s » semble être invalide" -#: pg_dump.c:7111 pg_dump.c:17573 +#: pg_dump.c:7047 pg_dump.c:17436 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "vérification échouée, OID %u de la table parent de l'OID %u de la séquence introuvable" -#: pg_dump.c:7252 +#: pg_dump.c:7186 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "lecture des index de la table « %s.%s »" -#: pg_dump.c:7737 +#: pg_dump.c:7600 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "lecture des contraintes de clés étrangères pour la table « %s.%s »" -#: pg_dump.c:8016 +#: pg_dump.c:7879 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "vérification échouée, OID %u de la table parent de l'OID %u de l'entrée de pg_rewrite introuvable" -#: pg_dump.c:8099 +#: pg_dump.c:7962 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "lecture des triggers pour la table « %s.%s »" -#: pg_dump.c:8232 +#: pg_dump.c:8095 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "la requête a produit une réference de nom de table null pour le trigger de la clé étrangère « %s » sur la table « %s » (OID de la table : %u)" -#: pg_dump.c:8782 +#: pg_dump.c:8645 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "recherche des colonnes et types de la table « %s.%s »" -#: pg_dump.c:8906 +#: pg_dump.c:8769 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "numérotation des colonnes invalide pour la table « %s »" -#: pg_dump.c:8945 +#: pg_dump.c:8808 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "recherche des expressions par défaut de la table « %s.%s »" -#: pg_dump.c:8967 +#: pg_dump.c:8830 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "valeur adnum %d invalide pour la table « %s »" -#: pg_dump.c:9060 +#: pg_dump.c:8923 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "recherche des contraintes de vérification pour la table « %s.%s »" -#: pg_dump.c:9109 +#: pg_dump.c:8972 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "%d contrainte de vérification attendue pour la table « %s » mais %d trouvée" msgstr[1] "%d contraintes de vérification attendues pour la table « %s » mais %d trouvée" -#: pg_dump.c:9113 +#: pg_dump.c:8976 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Les catalogues système sont peut-être corrompus.)" -#: pg_dump.c:10698 +#: pg_dump.c:10561 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "la colonne typtype du type de données « %s » semble être invalide" -#: pg_dump.c:12050 +#: pg_dump.c:11913 #, c-format msgid "bogus value in proargmodes array" msgstr "valeur erronée dans le tableau proargmodes" -#: pg_dump.c:12357 +#: pg_dump.c:12220 #, c-format msgid "could not parse proallargtypes array" msgstr "n'a pas pu analyser le tableau proallargtypes" -#: pg_dump.c:12373 +#: pg_dump.c:12236 #, c-format msgid "could not parse proargmodes array" msgstr "n'a pas pu analyser le tableau proargmodes" -#: pg_dump.c:12387 +#: pg_dump.c:12250 #, c-format msgid "could not parse proargnames array" msgstr "n'a pas pu analyser le tableau proargnames" -#: pg_dump.c:12397 +#: pg_dump.c:12260 #, c-format msgid "could not parse proconfig array" msgstr "n'a pas pu analyser le tableau proconfig" -#: pg_dump.c:12477 +#: pg_dump.c:12340 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "valeur provolatile non reconnue pour la fonction « %s »" -#: pg_dump.c:12527 pg_dump.c:14458 +#: pg_dump.c:12390 pg_dump.c:14341 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "valeur proparallel non reconnue pour la fonction « %s »" -#: pg_dump.c:12666 pg_dump.c:12775 pg_dump.c:12782 +#: pg_dump.c:12529 pg_dump.c:12638 pg_dump.c:12645 #, c-format msgid "could not find function definition for function with OID %u" msgstr "n'a pas pu trouver la définition de la fonction d'OID %u" -#: pg_dump.c:12705 +#: pg_dump.c:12568 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "valeur erronée dans le champ pg_cast.castfunc ou pg_cast.castmethod" -#: pg_dump.c:12708 +#: pg_dump.c:12571 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "valeur erronée dans pg_cast.castmethod" -#: pg_dump.c:12801 +#: pg_dump.c:12664 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "définition de transformation invalide, au moins un de trffromsql et trftosql ne doit pas valoir 0" -#: pg_dump.c:12818 +#: pg_dump.c:12681 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "valeur erronée dans pg_transform.trffromsql" -#: pg_dump.c:12839 +#: pg_dump.c:12702 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "valeur erronée dans pg_transform.trftosql" -#: pg_dump.c:12991 +#: pg_dump.c:12854 #, c-format msgid "postfix operators are not supported anymore (operator \"%s\")" msgstr "les opérateurs postfixes ne sont plus supportés (opérateur « %s »)" -#: pg_dump.c:13161 +#: pg_dump.c:13024 #, c-format msgid "could not find operator with OID %s" msgstr "n'a pas pu trouver l'opérateur d'OID %s" -#: pg_dump.c:13229 +#: pg_dump.c:13092 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "type « %c » invalide de la méthode d'accès « %s »" -#: pg_dump.c:13981 +#: pg_dump.c:13846 #, c-format msgid "unrecognized collation provider: %s" msgstr "fournisseur de collationnement non reconnu : %s" -#: pg_dump.c:14377 +#: pg_dump.c:14260 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "valeur non reconnue de aggfinalmodify pour l'agrégat « %s »" -#: pg_dump.c:14433 +#: pg_dump.c:14316 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "valeur non reconnue de aggmfinalmodify pour l'agrégat « %s »" -#: pg_dump.c:15155 +#: pg_dump.c:15038 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "type d'objet inconnu dans les droits par défaut : %d" -#: pg_dump.c:15173 +#: pg_dump.c:15056 #, c-format msgid "could not parse default ACL list (%s)" msgstr "n'a pas pu analyser la liste ACL par défaut (%s)" -#: pg_dump.c:15258 +#: pg_dump.c:15141 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "n'a pas pu analyser la liste ACL GRANT initiale (%s) ou la liste ACL REVOKE initiale (%s) de l'objet « %s » (%s)" -#: pg_dump.c:15266 +#: pg_dump.c:15149 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "n'a pas pu analyser la liste ACL GRANT (%s) ou REVOKE (%s) de l'objet « %s » (%s)" -#: pg_dump.c:15781 +#: pg_dump.c:15664 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "la requête permettant d'obtenir la définition de la vue « %s » n'a renvoyé aucune donnée" -#: pg_dump.c:15784 +#: pg_dump.c:15667 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "la requête permettant d'obtenir la définition de la vue « %s » a renvoyé plusieurs définitions" -#: pg_dump.c:15791 +#: pg_dump.c:15674 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "la définition de la vue « %s » semble être vide (longueur nulle)" -#: pg_dump.c:15875 +#: pg_dump.c:15758 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS n'est plus supporté (table « %s »)" -#: pg_dump.c:16742 +#: pg_dump.c:16623 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "numéro de colonne %d invalide pour la table « %s »" -#: pg_dump.c:16820 +#: pg_dump.c:16700 #, c-format msgid "could not parse index statistic columns" msgstr "n'a pas pu analyser les colonnes statistiques de l'index" -#: pg_dump.c:16822 +#: pg_dump.c:16702 #, c-format msgid "could not parse index statistic values" msgstr "n'a pas pu analyser les valeurs statistiques de l'index" -#: pg_dump.c:16824 +#: pg_dump.c:16704 #, c-format -msgid "mismatched number of columns and values for index stats" +msgid "mismatched number of columns and values for index statistics" msgstr "nombre de colonnes et de valeurs différentes pour les statistiques des index" -#: pg_dump.c:17058 +#: pg_dump.c:16921 #, c-format msgid "missing index for constraint \"%s\"" msgstr "index manquant pour la contrainte « %s »" -#: pg_dump.c:17283 +#: pg_dump.c:17146 #, c-format msgid "unrecognized constraint type: %c" msgstr "type de contrainte inconnu : %c" -#: pg_dump.c:17415 pg_dump.c:17638 +#: pg_dump.c:17278 pg_dump.c:17501 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" msgstr[0] "la requête permettant d'obtenir les données de la séquence « %s » a renvoyé %d ligne (une seule attendue)" msgstr[1] "la requête permettant d'obtenir les données de la séquence « %s » a renvoyé %d ligne (une seule attendue)" -#: pg_dump.c:17449 +#: pg_dump.c:17312 #, c-format msgid "unrecognized sequence type: %s" msgstr "type de séquence non reconnu : « %s »" -#: pg_dump.c:17736 +#: pg_dump.c:17599 #, c-format msgid "unexpected tgtype value: %d" msgstr "valeur tgtype inattendue : %d" -#: pg_dump.c:17810 +#: pg_dump.c:17673 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "chaîne argument invalide (%s) pour le trigger « %s » sur la table « %s »" -#: pg_dump.c:18046 +#: pg_dump.c:17909 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "la requête permettant d'obtenir la règle « %s » associée à la table « %s » a échoué : mauvais nombre de lignes renvoyées" -#: pg_dump.c:18208 +#: pg_dump.c:18071 #, c-format msgid "could not find referenced extension %u" msgstr "n'a pas pu trouver l'extension référencée %u" -#: pg_dump.c:18299 +#: pg_dump.c:18162 #, c-format msgid "could not parse extension configuration array" msgstr "n'a pas pu analyser le tableau de configuration des extensions" -#: pg_dump.c:18301 +#: pg_dump.c:18164 #, c-format msgid "could not parse extension condition array" msgstr "n'a pas pu analyser le tableau de condition de l'extension" -#: pg_dump.c:18303 +#: pg_dump.c:18166 #, c-format msgid "mismatched number of configurations and conditions for extension" msgstr "nombre différent de configurations et de conditions pour l'extension" -#: pg_dump.c:18435 +#: pg_dump.c:18298 #, c-format msgid "reading dependency data" msgstr "lecture des données de dépendance" -#: pg_dump.c:18528 +#: pg_dump.c:18391 #, c-format msgid "no referencing object %u %u" msgstr "pas d'objet référant %u %u" -#: pg_dump.c:18539 +#: pg_dump.c:18402 #, c-format msgid "no referenced object %u %u" msgstr "pas d'objet référencé %u %u" -#: pg_dump.c:18942 -#, c-format -msgid "could not parse index collation name array" -msgstr "n'a pas pu analyser le tableau des noms de collation de l'index" - -#: pg_dump.c:18946 -#, c-format -msgid "could not parse index collation version array" -msgstr "n'a pas pu analyser le tableau des versions de collation de l'index" - -#: pg_dump.c:18950 -#, c-format -msgid "mismatched number of collation names and versions for index" -msgstr "nombre différent de noms et versions de collation pour l'index" - -#: pg_dump.c:18989 +#: pg_dump.c:18776 #, c-format msgid "could not parse reloptions array" msgstr "n'a pas pu analyser le tableau reloptions" @@ -2343,7 +2313,7 @@ msgstr "Considérez l'utilisation d'une sauvegarde complète au lieu d'une sauve msgid "could not resolve dependency loop among these items:" msgstr "n'a pas pu résoudre la boucle de dépendances parmi ces éléments :" -#: pg_dumpall.c:200 +#: pg_dumpall.c:202 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -2354,7 +2324,7 @@ msgstr "" "dans le même répertoire que « %s ».\n" "Vérifiez votre installation." -#: pg_dumpall.c:205 +#: pg_dumpall.c:207 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -2365,32 +2335,32 @@ msgstr "" "mais n'est pas de la même version que %s.\n" "Vérifiez votre installation." -#: pg_dumpall.c:357 +#: pg_dumpall.c:359 #, c-format msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" msgstr "l'option --exclude-database ne peut pas être utilisée avec -g/--globals-only, -r/--roles-only ou -t/--tablespaces-only" -#: pg_dumpall.c:366 +#: pg_dumpall.c:368 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "les options « -g/--globals-only » et « -r/--roles-only » ne peuvent pas être utilisées ensemble" -#: pg_dumpall.c:374 +#: pg_dumpall.c:376 #, c-format msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "les options « -g/--globals-only » et « -t/--tablespaces-only » ne peuvent pas être utilisées ensemble" -#: pg_dumpall.c:388 +#: pg_dumpall.c:390 #, c-format msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "les options « -r/--roles-only » et « -t/--tablespaces-only » ne peuvent pas être utilisées ensemble" -#: pg_dumpall.c:449 pg_dumpall.c:1751 +#: pg_dumpall.c:453 pg_dumpall.c:1756 #, c-format msgid "could not connect to database \"%s\"" msgstr "n'a pas pu se connecter à la base de données « %s »" -#: pg_dumpall.c:463 +#: pg_dumpall.c:467 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" @@ -2399,7 +2369,7 @@ msgstr "" "n'a pas pu se connecter aux bases « postgres » et « template1 ».\n" "Merci de préciser une autre base de données." -#: pg_dumpall.c:617 +#: pg_dumpall.c:621 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2409,79 +2379,79 @@ msgstr "" "commandes SQL.\n" "\n" -#: pg_dumpall.c:619 +#: pg_dumpall.c:623 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" -#: pg_dumpall.c:622 +#: pg_dumpall.c:626 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=NOMFICHIER nom du fichier de sortie\n" -#: pg_dumpall.c:629 +#: pg_dumpall.c:633 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr "" " -c, --clean nettoie (supprime) les bases de données avant de\n" " les créer\n" -#: pg_dumpall.c:631 +#: pg_dumpall.c:635 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr "" " -g, --globals-only sauvegarde uniquement les objets système, pas\n" " le contenu des bases de données\n" -#: pg_dumpall.c:632 pg_restore.c:485 +#: pg_dumpall.c:636 pg_restore.c:485 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr "" " -O, --no-owner omet la restauration des propriétaires des\n" " objets\n" -#: pg_dumpall.c:633 +#: pg_dumpall.c:637 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr "" " -r, --roles-only sauvegarde uniquement les rôles, pas les bases\n" " de données ni les tablespaces\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:639 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr "" " -S, --superuser=NOM indique le nom du super-utilisateur à utiliser\n" " avec le format texte\n" -#: pg_dumpall.c:636 +#: pg_dumpall.c:640 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr "" " -t, --tablespaces-only sauvegarde uniquement les tablespaces, pas les\n" " bases de données ni les rôles\n" -#: pg_dumpall.c:642 +#: pg_dumpall.c:646 #, c-format msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" msgstr " --exclude-database=MOTIF exclut les bases de données dont le nom correspond au motif\n" -#: pg_dumpall.c:649 +#: pg_dumpall.c:653 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords ne sauvegarde pas les mots de passe des rôles\n" -#: pg_dumpall.c:663 +#: pg_dumpall.c:668 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=CHAINE_CONN connexion à l'aide de la chaîne de connexion\n" -#: pg_dumpall.c:665 +#: pg_dumpall.c:670 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=NOM_BASE indique une autre base par défaut\n" -#: pg_dumpall.c:672 +#: pg_dumpall.c:677 #, c-format msgid "" "\n" @@ -2494,52 +2464,52 @@ msgstr "" "standard.\n" "\n" -#: pg_dumpall.c:878 +#: pg_dumpall.c:883 #, c-format msgid "role name starting with \"pg_\" skipped (%s)" msgstr "nom de rôle commençant par « pg_ » ignoré (« %s »)" -#: pg_dumpall.c:1279 +#: pg_dumpall.c:1284 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "n'a pas pu analyser la liste d'ACL (%s) pour le tablespace « %s »" -#: pg_dumpall.c:1496 +#: pg_dumpall.c:1501 #, c-format msgid "excluding database \"%s\"" msgstr "exclusion de la base de données « %s »" -#: pg_dumpall.c:1500 +#: pg_dumpall.c:1505 #, c-format msgid "dumping database \"%s\"" msgstr "sauvegarde de la base de données « %s »" -#: pg_dumpall.c:1532 +#: pg_dumpall.c:1537 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "échec de pg_dump sur la base de données « %s », quitte" -#: pg_dumpall.c:1541 +#: pg_dumpall.c:1546 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "n'a pas pu ré-ouvrir le fichier de sortie « %s » : %m" -#: pg_dumpall.c:1585 +#: pg_dumpall.c:1590 #, c-format msgid "running \"%s\"" msgstr "exécute « %s »" -#: pg_dumpall.c:1800 +#: pg_dumpall.c:1805 #, c-format msgid "could not get server version" msgstr "n'a pas pu obtenir la version du serveur" -#: pg_dumpall.c:1806 +#: pg_dumpall.c:1811 #, c-format msgid "could not parse server version \"%s\"" msgstr "n'a pas pu analyser la version du serveur « %s »" -#: pg_dumpall.c:1878 pg_dumpall.c:1901 +#: pg_dumpall.c:1883 pg_dumpall.c:1906 #, c-format msgid "executing %s" msgstr "exécution %s" @@ -2808,241 +2778,275 @@ msgstr "" "utilisée.\n" "\n" -#~ msgid "could not write to large object (result: %lu, expected: %lu)" -#~ msgstr "n'a pas pu écrire le « Large Object » (résultat : %lu, attendu : %lu)" - -#~ msgid "reconnection to database \"%s\" failed: %s" -#~ msgstr "reconnexion à la base de données « %s » échouée : %s" - -#~ msgid "connection to database \"%s\" failed: %s" -#~ msgstr "la connexion à la base de données « %s » a échoué : %s" +#~ msgid "pclose failed: %m" +#~ msgstr "échec de pclose : %m" -#~ msgid "LOCK TABLE failed for \"%s\": %s" -#~ msgstr "LOCK TABLE échoué pour la table « %s » : %s" +#~ msgid "WSAStartup failed: %d" +#~ msgstr "WSAStartup a échoué : %d" -#~ msgid "reading publication membership for table \"%s.%s\"" -#~ msgstr "lecture des appartenances aux publications pour la table « %s.%s »" +#~ msgid "select() failed: %m" +#~ msgstr "échec de select() : %m" -#~ msgid "aggregate function %s could not be dumped correctly for this database version; ignored" -#~ msgstr "la fonction d'aggrégat %s n'a pas pu être sauvegardée correctement avec cette version de la base de données ; ignorée" +#~ msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive" +#~ msgstr "" +#~ "n'a pas pu trouver l'identifiant de bloc %d dans l'archive --\n" +#~ "il est possible que cela soit dû à une demande de restauration dans un ordre\n" +#~ "différent, qui n'a pas pu être géré à cause d'un manque d'information de\n" +#~ "position dans l'archive" -#~ msgid "could not connect to database \"%s\": %s" -#~ msgstr "n'a pas pu se connecter à la base de données « %s » : %s" +#~ msgid "ftell mismatch with expected position -- ftell used" +#~ msgstr "ftell ne correspond pas à la position attendue -- ftell utilisé" -#~ msgid "connecting to database \"%s\" as user \"%s\"" -#~ msgstr "connexion à la base de données « %s » en tant qu'utilisateur « %s »" +#~ msgid "Report bugs to .\n" +#~ msgstr "Rapporter les bogues à .\n" -#~ msgid "could not reconnect to database" -#~ msgstr "n'a pas pu se reconnecter à la base de données" +#~ msgid "reading extended statistics for table \"%s.%s\"\n" +#~ msgstr "lecture des statistiques étendues pour la table « %s.%s »\n" -#~ msgid "could not reconnect to database: %s" -#~ msgstr "n'a pas pu se reconnecter à la base de données : %s" +#~ msgid "worker is terminating\n" +#~ msgstr "le worker est en cours d'arrêt\n" -#~ msgid "connection needs password" -#~ msgstr "la connexion nécessite un mot de passe" +#~ msgid "could not get relation name for OID %u: %s\n" +#~ msgstr "n'a pas pu obtenir le nom de la relation pour l'OID %u: %s\n" -#~ msgid "internal error -- neither th nor fh specified in _tarReadRaw()" -#~ msgstr "erreur interne -- ni th ni fh ne sont précisés dans _tarReadRaw()" +#~ msgid "unrecognized command on communication channel: %s\n" +#~ msgstr "commande inconnue sur le canal de communucation: %s\n" -#~ msgid "" -#~ "The program \"pg_dump\" is needed by %s but was not found in the\n" -#~ "same directory as \"%s\".\n" -#~ "Check your installation." -#~ msgstr "" -#~ "Le programme « pg_dump » est nécessaire à %s mais n'a pas été trouvé dans le\n" -#~ "même répertoire que « %s ».\n" -#~ "Vérifiez votre installation." +#~ msgid "terminated by user\n" +#~ msgstr "terminé par l'utilisateur\n" -#~ msgid "" -#~ "The program \"pg_dump\" was found by \"%s\"\n" -#~ "but was not the same version as %s.\n" -#~ "Check your installation." -#~ msgstr "" -#~ "Le programme « pg_dump » a été trouvé par « %s »\n" -#~ "mais n'a pas la même version que %s.\n" -#~ "Vérifiez votre installation." +#~ msgid "error in ListenToWorkers(): %s\n" +#~ msgstr "erreur dans ListenToWorkers(): %s\n" -#~ msgid "could not identify current directory: %s" -#~ msgstr "n'a pas pu identifier le répertoire courant : %s" +#~ msgid "archive member too large for tar format\n" +#~ msgstr "membre de l'archive trop volumineux pour le format tar\n" -#~ msgid "could not change directory to \"%s\": %s" -#~ msgstr "n'a pas pu changer le répertoire par « %s » : %s" +#~ msgid "could not open output file \"%s\" for writing\n" +#~ msgstr "n'a pas pu ouvrir le fichier de sauvegarde « %s » en écriture\n" -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "n'a pas pu lire le lien symbolique « %s »" +#~ msgid "could not write to custom output routine\n" +#~ msgstr "n'a pas pu écrire vers la routine de sauvegarde personnalisée\n" -#~ msgid "pclose failed: %s" -#~ msgstr "échec de pclose : %s" +#~ msgid "unexpected end of file\n" +#~ msgstr "fin de fichier inattendu\n" -#~ msgid "child process was terminated by signal %s" -#~ msgstr "le processus fils a été terminé par le signal %s" +#~ msgid "could not write byte: %s\n" +#~ msgstr "n'a pas pu écrire un octet : %s\n" -#~ msgid "child process was terminated by signal %d" -#~ msgstr "le processus fils a été terminé par le signal %d" +#~ msgid "could not write byte\n" +#~ msgstr "n'a pas pu écrire l'octet\n" -#~ msgid "compress_io" -#~ msgstr "compression_io" +#~ msgid "could not write null block at end of tar archive\n" +#~ msgstr "n'a pas pu écrire le bloc nul à la fin de l'archive tar\n" -#~ msgid "parallel archiver" -#~ msgstr "archiveur en parallèle" +#~ msgid "could not output padding at end of tar member\n" +#~ msgstr "n'a pas pu remplir la fin du membre de tar\n" -#~ msgid "select() failed: %s\n" -#~ msgstr "échec de select() : %s\n" +#~ msgid "mismatch in actual vs. predicted file position (%s vs. %s)\n" +#~ msgstr "" +#~ "pas de correspondance entre la position réelle et celle prévue du fichier\n" +#~ "(%s vs. %s)\n" -#~ msgid "archiver" -#~ msgstr "archiveur" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help affiche cette aide puis quitte\n" -#~ msgid "-C and -1 are incompatible options\n" -#~ msgstr "-C et -1 sont des options incompatibles\n" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version affiche la version puis quitte\n" -#~ msgid "attempting to ascertain archive format\n" -#~ msgstr "tentative d'identification du format de l'archive\n" +#~ msgid "*** aborted because of error\n" +#~ msgstr "*** interrompu du fait d'erreurs\n" -#~ msgid "allocating AH for %s, format %d\n" -#~ msgstr "allocation d'AH pour %s, format %d\n" +#~ msgid "missing pg_database entry for database \"%s\"\n" +#~ msgstr "entrée manquante dans pg_database pour la base de données « %s »\n" -#~ msgid "read TOC entry %d (ID %d) for %s %s\n" -#~ msgstr "lecture de l'entrée %d de la TOC (ID %d) pour %s %s\n" +#~ msgid "query returned more than one (%d) pg_database entry for database \"%s\"\n" +#~ msgstr "" +#~ "la requête a renvoyé plusieurs (%d) entrées pg_database pour la base de\n" +#~ "données « %s »\n" -#~ msgid "could not set default_with_oids: %s" -#~ msgstr "n'a pas pu configurer default_with_oids : %s" +#~ msgid "dumpDatabase(): could not find pg_largeobject.relfrozenxid\n" +#~ msgstr "dumpDatabase() : n'a pas pu trouver pg_largeobject.relfrozenxid\n" -#~ msgid "entering restore_toc_entries_prefork\n" -#~ msgstr "entrée dans restore_toc_entries_prefork\n" +#~ msgid "dumpDatabase(): could not find pg_largeobject_metadata.relfrozenxid\n" +#~ msgstr "dumpDatabase() : n'a pas pu trouver pg_largeobject_metadata.relfrozenxid\n" -#~ msgid "entering restore_toc_entries_parallel\n" -#~ msgstr "entrée dans restore_toc_entries_parallel\n" +#~ msgid "query returned %d foreign server entry for foreign table \"%s\"\n" +#~ msgid_plural "query returned %d foreign server entries for foreign table \"%s\"\n" +#~ msgstr[0] "la requête a renvoyé %d entrée de serveur distant pour la table distante « %s »\n" +#~ msgstr[1] "la requête a renvoyé %d entrées de serveurs distants pour la table distante « %s »\n" -#~ msgid "entering restore_toc_entries_postfork\n" -#~ msgstr "entrée dans restore_toc_entries_prefork\n" +#~ msgid "missing pg_database entry for this database\n" +#~ msgstr "entrée pg_database manquante pour cette base de données\n" -#~ msgid "no item ready\n" -#~ msgstr "aucun élément prêt\n" +#~ msgid "found more than one pg_database entry for this database\n" +#~ msgstr "a trouvé plusieurs entrées dans pg_database pour cette base de données\n" -#~ msgid "transferring dependency %d -> %d to %d\n" -#~ msgstr "transfert de la dépendance %d -> %d vers %d\n" +#~ msgid "could not find entry for pg_indexes in pg_class\n" +#~ msgstr "n'a pas pu trouver l'entrée de pg_indexes dans pg_class\n" -#~ msgid "reducing dependencies for %d\n" -#~ msgstr "réduction des dépendances pour %d\n" +#~ msgid "found more than one entry for pg_indexes in pg_class\n" +#~ msgstr "a trouvé plusieurs entrées pour pg_indexes dans la table pg_class\n" -#~ msgid "custom archiver" -#~ msgstr "programme d'archivage personnalisé" +#~ msgid "SQL command failed\n" +#~ msgstr "la commande SQL a échoué\n" -#~ msgid "archiver (db)" -#~ msgstr "programme d'archivage (db)" +#~ msgid "file archiver" +#~ msgstr "programme d'archivage de fichiers" -#~ msgid "failed to reconnect to database\n" -#~ msgstr "la reconnexion à la base de données a échoué\n" +#~ msgid "" +#~ "WARNING:\n" +#~ " This format is for demonstration purposes; it is not intended for\n" +#~ " normal use. Files will be written in the current working directory.\n" +#~ msgstr "" +#~ "ATTENTION :\n" +#~ " Ce format est présent dans un but de démonstration ; il n'est pas prévu\n" +#~ " pour une utilisation normale. Les fichiers seront écrits dans le\n" +#~ " répertoire actuel.\n" -#~ msgid "failed to connect to database\n" -#~ msgstr "n'a pas pu se connecter à la base de données\n" +#~ msgid "could not close data file after reading\n" +#~ msgstr "n'a pas pu fermer le fichier de données après lecture\n" -#~ msgid "query was: %s\n" -#~ msgstr "la requête était : %s\n" +#~ msgid "could not open large object TOC for input: %s\n" +#~ msgstr "n'a pas pu ouvrir la TOC du « Large Object » en entrée : %s\n" -#~ msgid "query returned %d row instead of one: %s\n" -#~ msgid_plural "query returned %d rows instead of one: %s\n" -#~ msgstr[0] "la requête a renvoyé %d ligne au lieu d'une seule : %s\n" -#~ msgstr[1] "la requête a renvoyé %d lignes au lieu d'une seule : %s\n" +#~ msgid "could not open large object TOC for output: %s\n" +#~ msgstr "n'a pas pu ouvrir la TOC du « Large Object » en sortie : %s\n" -#~ msgid "directory archiver" -#~ msgstr "archiveur répertoire" +#~ msgid "could not close large object file\n" +#~ msgstr "n'a pas pu fermer le fichier du « Large Object »\n" -#~ msgid "could not read directory \"%s\": %s\n" -#~ msgstr "n'a pas pu lire le répertoire « %s » : %s\n" +#~ msgid "restoring large object OID %u\n" +#~ msgstr "restauration du « Large Object » d'OID %u\n" -#~ msgid "could not close directory \"%s\": %s\n" -#~ msgstr "n'a pas pu fermer le répertoire « %s » : %s\n" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help affiche cette aide et quitte\n" -#~ msgid "could not create directory \"%s\": %s\n" -#~ msgstr "n'a pas pu créer le répertoire « %s » : %s\n" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version affiche la version et quitte\n" -#~ msgid "tar archiver" -#~ msgstr "archiveur tar" +#~ msgid " -c, --clean clean (drop) database objects before recreating\n" +#~ msgstr "" +#~ " -c, --clean nettoie/supprime les bases de données avant de\n" +#~ " les créer\n" -#~ msgid "moving from position %s to next member at file position %s\n" -#~ msgstr "déplacement de la position %s vers le prochain membre à la position %s du fichier\n" +#~ msgid " -O, --no-owner skip restoration of object ownership\n" +#~ msgstr "" +#~ " -O, --no-owner omettre la restauration des possessions des\n" +#~ " objets\n" -#~ msgid "now at file position %s\n" -#~ msgstr "maintenant en position %s du fichier\n" +#~ msgid " --disable-triggers disable triggers during data-only restore\n" +#~ msgstr "" +#~ " --disable-triggers désactiver les déclencheurs lors de la\n" +#~ " restauration des données seules\n" -#~ msgid "skipping tar member %s\n" -#~ msgstr "omission du membre %s du tar\n" +#~ msgid "" +#~ " --use-set-session-authorization\n" +#~ " use SET SESSION AUTHORIZATION commands instead of\n" +#~ " ALTER OWNER commands to set ownership\n" +#~ msgstr "" +#~ " --use-set-session-authorization\n" +#~ " utilise les commandes SET SESSION AUTHORIZATION\n" +#~ " au lieu des commandes ALTER OWNER pour les\n" +#~ " modifier les propriétaires\n" -#~ msgid "TOC Entry %s at %s (length %s, checksum %d)\n" -#~ msgstr "entrée TOC %s à %s (longueur %s, somme de contrôle %d)\n" +#~ msgid "%s: out of memory\n" +#~ msgstr "%s : mémoire épuisée\n" -#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" -#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" +#~ msgid "cannot reopen stdin\n" +#~ msgstr "ne peut pas rouvrir stdin\n" -#~ msgid "options --inserts/--column-inserts and -o/--oids cannot be used together\n" +#~ msgid "cannot reopen non-seekable file\n" +#~ msgstr "ne peut pas rouvrir le fichier non cherchable\n" + +#~ msgid "%s: invalid -X option -- %s\n" +#~ msgstr "%s : option -X invalide -- %s\n" + +#~ msgid "query returned no rows: %s\n" +#~ msgstr "la requête n'a renvoyé aucune ligne : %s\n" + +#~ msgid "dumping a specific TOC data block out of order is not supported without ID on this input stream (fseek required)\n" #~ msgstr "" -#~ "les options « --inserts/--column-inserts » et « -o/--oids » ne\n" -#~ "peuvent pas être utilisées conjointement\n" +#~ "la sauvegarde d'un bloc de données spécifique du TOC dans le désordre n'est\n" +#~ "pas supporté sans identifiant sur ce flux d'entrée (fseek requis)\n" -#~ msgid "(The INSERT command cannot set OIDs.)\n" -#~ msgstr "(La commande INSERT ne peut pas positionner les OID.)\n" +#~ msgid "dumpBlobs(): could not open large object %u: %s" +#~ msgstr "dumpBlobs() : n'a pas pu ouvrir le « Large Object » %u : %s" -#~ msgid " -o, --oids include OIDs in dump\n" -#~ msgstr " -o, --oids inclut les OID dans la sauvegarde\n" +#~ msgid "saving large object properties\n" +#~ msgstr "sauvegarde des propriétés des « Large Objects »\n" -#~ msgid "Report bugs to .\n" -#~ msgstr "Rapporter les bogues à .\n" +#~ msgid "could not parse ACL (%s) for large object %u" +#~ msgstr "n'a pas pu analyser la liste ACL (%s) du « Large Object » %u" -#~ msgid "schema with OID %u does not exist\n" -#~ msgstr "le schéma d'OID %u n'existe pas\n" +#~ msgid "compression support is disabled in this format\n" +#~ msgstr "le support de la compression est désactivé avec ce format\n" -#~ msgid "unrecognized collation provider: %s\n" -#~ msgstr "fournisseur de collationnement non reconnu : %s\n" +#~ msgid "no label definitions found for enum ID %u\n" +#~ msgstr "aucune définition de label trouvée pour l'ID enum %u\n" -#~ msgid "WARNING: could not parse reloptions array\n" -#~ msgstr "ATTENTION : n'a pas pu analyser le tableau reloptions\n" +#~ msgid "query returned %d rows instead of one: %s\n" +#~ msgstr "la requête a renvoyé %d lignes au lieu d'une seule : %s\n" -#~ msgid "sorter" -#~ msgstr "tri" +#~ msgid "read %lu byte into lookahead buffer\n" +#~ msgid_plural "read %lu bytes into lookahead buffer\n" +#~ msgstr[0] "lecture de %lu octet dans le tampon prévisionnel\n" +#~ msgstr[1] "lecture de %lu octets dans le tampon prévisionnel\n" -#~ msgid "%s: option --if-exists requires option -c/--clean\n" -#~ msgstr "%s : l'option --if-exists nécessite l'option -c/--clean\n" +#~ msgid "requested %d byte, got %d from lookahead and %d from file\n" +#~ msgid_plural "requested %d bytes, got %d from lookahead and %d from file\n" +#~ msgstr[0] "%d octet requis, %d obtenu de « lookahead » et %d du fichier\n" +#~ msgstr[1] "%d octets requis, %d obtenus de « lookahead » et %d du fichier\n" -#~ msgid "%s: could not open the output file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le fichier de sauvegarde « %s » : %s\n" +#~ msgid "invalid COPY statement -- could not find \"from stdin\" in string \"%s\" starting at position %lu\n" +#~ msgstr "" +#~ "instruction COPY invalide -- n'a pas pu trouver « from stdin » dans la\n" +#~ "chaîne « %s » à partir de la position %lu\n" -#~ msgid "%s: invalid client encoding \"%s\" specified\n" -#~ msgstr "%s : encodage client indiqué (« %s ») invalide\n" +#~ msgid "invalid COPY statement -- could not find \"copy\" in string \"%s\"\n" +#~ msgstr "instruction COPY invalide -- n'a pas pu trouver « copy » dans la chaîne « %s »\n" -#~ msgid "%s: could not connect to database \"%s\": %s" -#~ msgstr "%s : n'a pas pu se connecter à la base de données « %s » : %s" +#~ msgid "-C and -c are incompatible options\n" +#~ msgstr "-C et -c sont des options incompatibles\n" -#~ msgid "%s: executing %s\n" -#~ msgstr "%s : exécute %s\n" +#~ msgid "%s: could not parse version \"%s\"\n" +#~ msgstr "%s : n'a pas pu analyser la version « %s »\n" -#~ msgid "%s: query failed: %s" -#~ msgstr "%s : échec de la requête : %s" +#~ msgid "could not parse version string \"%s\"\n" +#~ msgstr "n'a pas pu analyser la chaîne de version « %s »\n" -#~ msgid "%s: query was: %s\n" -#~ msgstr "%s : la requête était : %s\n" +#~ msgid "could not create worker thread: %s\n" +#~ msgstr "n'a pas pu créer le fil de travail: %s\n" -#~ msgid "%s: options -s/--schema-only and -a/--data-only cannot be used together\n" -#~ msgstr "" -#~ "%s : les options « -s/--schema-only » et « -a/--data-only » ne peuvent pas être\n" -#~ "utilisées conjointement\n" +#~ msgid "parallel_restore should not return\n" +#~ msgstr "parallel_restore ne devrait pas retourner\n" -#~ msgid "%s: options -c/--clean and -a/--data-only cannot be used together\n" +#~ msgid "worker process crashed: status %d\n" +#~ msgstr "crash du processus worker : statut %d\n" + +#~ msgid "cannot duplicate null pointer\n" +#~ msgstr "ne peut pas dupliquer un pointeur nul\n" + +#~ msgid "could not change directory to \"%s\"" +#~ msgstr "n'a pas pu accéder au répertoire « %s »" + +#~ msgid "query to get data of sequence \"%s\" returned name \"%s\"\n" #~ msgstr "" -#~ "%s : les options « -c/--clean » et « -a/--data-only » ne peuvent pas être\n" -#~ "utilisées conjointement\n" +#~ "la requête permettant d'obtenir les données de la séquence « %s » a renvoyé\n" +#~ "le nom « %s »\n" -#~ msgid "%s: invalid number of parallel jobs\n" -#~ msgstr "%s : nombre de jobs en parallèle invalide\n" +#~ msgid "server version must be at least 7.3 to use schema selection switches\n" +#~ msgstr "" +#~ "le serveur doit être de version 7.3 ou supérieure pour utiliser les options\n" +#~ "de sélection du schéma\n" -#~ msgid "%s: could not parse ACL list (%s) for database \"%s\"\n" -#~ msgstr "%s : n'a pas pu analyser la liste d'ACL (%s) pour la base de données « %s »\n" +#~ msgid "error during backup\n" +#~ msgstr "erreur lors de la sauvegarde\n" -#~ msgid "setting owner and privileges for %s \"%s.%s\"\n" -#~ msgstr "réglage du propriétaire et des droits pour %s « %s.%s»\n" +#~ msgid "could not find slot of finished worker\n" +#~ msgstr "n'a pas pu trouver l'emplacement du worker qui vient de terminer\n" -#~ msgid "setting owner and privileges for %s \"%s\"\n" -#~ msgstr "réglage du propriétaire et des droits pour %s « %s »\n" +#~ msgid "error processing a parallel work item\n" +#~ msgstr "erreur durant le traitement en parallèle d'un item\n" #~ msgid "" #~ "Synchronized snapshots are not supported on standby servers.\n" @@ -3053,272 +3057,256 @@ msgstr "" #~ "Lancez avec --no-synchronized-snapshots à la place si vous n'avez pas besoin\n" #~ "de snapshots synchronisés.\n" -#~ msgid "error processing a parallel work item\n" -#~ msgstr "erreur durant le traitement en parallèle d'un item\n" +#~ msgid "setting owner and privileges for %s \"%s\"\n" +#~ msgstr "réglage du propriétaire et des droits pour %s « %s »\n" -#~ msgid "could not find slot of finished worker\n" -#~ msgstr "n'a pas pu trouver l'emplacement du worker qui vient de terminer\n" +#~ msgid "setting owner and privileges for %s \"%s.%s\"\n" +#~ msgstr "réglage du propriétaire et des droits pour %s « %s.%s»\n" -#~ msgid "error during backup\n" -#~ msgstr "erreur lors de la sauvegarde\n" +#~ msgid "%s: could not parse ACL list (%s) for database \"%s\"\n" +#~ msgstr "%s : n'a pas pu analyser la liste d'ACL (%s) pour la base de données « %s »\n" -#~ msgid "server version must be at least 7.3 to use schema selection switches\n" +#~ msgid "%s: invalid number of parallel jobs\n" +#~ msgstr "%s : nombre de jobs en parallèle invalide\n" + +#~ msgid "%s: options -c/--clean and -a/--data-only cannot be used together\n" #~ msgstr "" -#~ "le serveur doit être de version 7.3 ou supérieure pour utiliser les options\n" -#~ "de sélection du schéma\n" +#~ "%s : les options « -c/--clean » et « -a/--data-only » ne peuvent pas être\n" +#~ "utilisées conjointement\n" -#~ msgid "query to get data of sequence \"%s\" returned name \"%s\"\n" +#~ msgid "%s: options -s/--schema-only and -a/--data-only cannot be used together\n" #~ msgstr "" -#~ "la requête permettant d'obtenir les données de la séquence « %s » a renvoyé\n" -#~ "le nom « %s »\n" +#~ "%s : les options « -s/--schema-only » et « -a/--data-only » ne peuvent pas être\n" +#~ "utilisées conjointement\n" -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "n'a pas pu accéder au répertoire « %s »" +#~ msgid "%s: query was: %s\n" +#~ msgstr "%s : la requête était : %s\n" -#~ msgid "cannot duplicate null pointer\n" -#~ msgstr "ne peut pas dupliquer un pointeur nul\n" +#~ msgid "%s: query failed: %s" +#~ msgstr "%s : échec de la requête : %s" -#~ msgid "worker process crashed: status %d\n" -#~ msgstr "crash du processus worker : statut %d\n" +#~ msgid "%s: executing %s\n" +#~ msgstr "%s : exécute %s\n" -#~ msgid "parallel_restore should not return\n" -#~ msgstr "parallel_restore ne devrait pas retourner\n" +#~ msgid "%s: could not connect to database \"%s\": %s" +#~ msgstr "%s : n'a pas pu se connecter à la base de données « %s » : %s" -#~ msgid "could not create worker thread: %s\n" -#~ msgstr "n'a pas pu créer le fil de travail: %s\n" +#~ msgid "%s: invalid client encoding \"%s\" specified\n" +#~ msgstr "%s : encodage client indiqué (« %s ») invalide\n" -#~ msgid "could not parse version string \"%s\"\n" -#~ msgstr "n'a pas pu analyser la chaîne de version « %s »\n" +#~ msgid "%s: could not open the output file \"%s\": %s\n" +#~ msgstr "%s : n'a pas pu ouvrir le fichier de sauvegarde « %s » : %s\n" -#~ msgid "%s: could not parse version \"%s\"\n" -#~ msgstr "%s : n'a pas pu analyser la version « %s »\n" +#~ msgid "%s: option --if-exists requires option -c/--clean\n" +#~ msgstr "%s : l'option --if-exists nécessite l'option -c/--clean\n" -#~ msgid "-C and -c are incompatible options\n" -#~ msgstr "-C et -c sont des options incompatibles\n" +#~ msgid "sorter" +#~ msgstr "tri" -#~ msgid "invalid COPY statement -- could not find \"copy\" in string \"%s\"\n" -#~ msgstr "instruction COPY invalide -- n'a pas pu trouver « copy » dans la chaîne « %s »\n" +#~ msgid "WARNING: could not parse reloptions array\n" +#~ msgstr "ATTENTION : n'a pas pu analyser le tableau reloptions\n" -#~ msgid "invalid COPY statement -- could not find \"from stdin\" in string \"%s\" starting at position %lu\n" -#~ msgstr "" -#~ "instruction COPY invalide -- n'a pas pu trouver « from stdin » dans la\n" -#~ "chaîne « %s » à partir de la position %lu\n" +#~ msgid "unrecognized collation provider: %s\n" +#~ msgstr "fournisseur de collationnement non reconnu : %s\n" -#~ msgid "requested %d byte, got %d from lookahead and %d from file\n" -#~ msgid_plural "requested %d bytes, got %d from lookahead and %d from file\n" -#~ msgstr[0] "%d octet requis, %d obtenu de « lookahead » et %d du fichier\n" -#~ msgstr[1] "%d octets requis, %d obtenus de « lookahead » et %d du fichier\n" +#~ msgid "schema with OID %u does not exist\n" +#~ msgstr "le schéma d'OID %u n'existe pas\n" -#~ msgid "read %lu byte into lookahead buffer\n" -#~ msgid_plural "read %lu bytes into lookahead buffer\n" -#~ msgstr[0] "lecture de %lu octet dans le tampon prévisionnel\n" -#~ msgstr[1] "lecture de %lu octets dans le tampon prévisionnel\n" +#~ msgid "Report bugs to .\n" +#~ msgstr "Rapporter les bogues à .\n" -#~ msgid "query returned %d rows instead of one: %s\n" -#~ msgstr "la requête a renvoyé %d lignes au lieu d'une seule : %s\n" +#~ msgid " -o, --oids include OIDs in dump\n" +#~ msgstr " -o, --oids inclut les OID dans la sauvegarde\n" -#~ msgid "no label definitions found for enum ID %u\n" -#~ msgstr "aucune définition de label trouvée pour l'ID enum %u\n" +#~ msgid "(The INSERT command cannot set OIDs.)\n" +#~ msgstr "(La commande INSERT ne peut pas positionner les OID.)\n" -#~ msgid "compression support is disabled in this format\n" -#~ msgstr "le support de la compression est désactivé avec ce format\n" +#~ msgid "options --inserts/--column-inserts and -o/--oids cannot be used together\n" +#~ msgstr "" +#~ "les options « --inserts/--column-inserts » et « -o/--oids » ne\n" +#~ "peuvent pas être utilisées conjointement\n" -#~ msgid "could not parse ACL (%s) for large object %u" -#~ msgstr "n'a pas pu analyser la liste ACL (%s) du « Large Object » %u" +#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" +#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" -#~ msgid "saving large object properties\n" -#~ msgstr "sauvegarde des propriétés des « Large Objects »\n" +#~ msgid "TOC Entry %s at %s (length %s, checksum %d)\n" +#~ msgstr "entrée TOC %s à %s (longueur %s, somme de contrôle %d)\n" -#~ msgid "dumpBlobs(): could not open large object %u: %s" -#~ msgstr "dumpBlobs() : n'a pas pu ouvrir le « Large Object » %u : %s" +#~ msgid "skipping tar member %s\n" +#~ msgstr "omission du membre %s du tar\n" -#~ msgid "dumping a specific TOC data block out of order is not supported without ID on this input stream (fseek required)\n" -#~ msgstr "" -#~ "la sauvegarde d'un bloc de données spécifique du TOC dans le désordre n'est\n" -#~ "pas supporté sans identifiant sur ce flux d'entrée (fseek requis)\n" +#~ msgid "now at file position %s\n" +#~ msgstr "maintenant en position %s du fichier\n" -#~ msgid "query returned no rows: %s\n" -#~ msgstr "la requête n'a renvoyé aucune ligne : %s\n" +#~ msgid "moving from position %s to next member at file position %s\n" +#~ msgstr "déplacement de la position %s vers le prochain membre à la position %s du fichier\n" -#~ msgid "%s: invalid -X option -- %s\n" -#~ msgstr "%s : option -X invalide -- %s\n" +#~ msgid "tar archiver" +#~ msgstr "archiveur tar" -#~ msgid "cannot reopen non-seekable file\n" -#~ msgstr "ne peut pas rouvrir le fichier non cherchable\n" +#~ msgid "could not create directory \"%s\": %s\n" +#~ msgstr "n'a pas pu créer le répertoire « %s » : %s\n" -#~ msgid "cannot reopen stdin\n" -#~ msgstr "ne peut pas rouvrir stdin\n" +#~ msgid "could not close directory \"%s\": %s\n" +#~ msgstr "n'a pas pu fermer le répertoire « %s » : %s\n" -#~ msgid "%s: out of memory\n" -#~ msgstr "%s : mémoire épuisée\n" +#~ msgid "could not read directory \"%s\": %s\n" +#~ msgstr "n'a pas pu lire le répertoire « %s » : %s\n" -#~ msgid "" -#~ " --use-set-session-authorization\n" -#~ " use SET SESSION AUTHORIZATION commands instead of\n" -#~ " ALTER OWNER commands to set ownership\n" -#~ msgstr "" -#~ " --use-set-session-authorization\n" -#~ " utilise les commandes SET SESSION AUTHORIZATION\n" -#~ " au lieu des commandes ALTER OWNER pour les\n" -#~ " modifier les propriétaires\n" +#~ msgid "directory archiver" +#~ msgstr "archiveur répertoire" -#~ msgid " --disable-triggers disable triggers during data-only restore\n" -#~ msgstr "" -#~ " --disable-triggers désactiver les déclencheurs lors de la\n" -#~ " restauration des données seules\n" +#~ msgid "query returned %d row instead of one: %s\n" +#~ msgid_plural "query returned %d rows instead of one: %s\n" +#~ msgstr[0] "la requête a renvoyé %d ligne au lieu d'une seule : %s\n" +#~ msgstr[1] "la requête a renvoyé %d lignes au lieu d'une seule : %s\n" -#~ msgid " -O, --no-owner skip restoration of object ownership\n" -#~ msgstr "" -#~ " -O, --no-owner omettre la restauration des possessions des\n" -#~ " objets\n" +#~ msgid "query was: %s\n" +#~ msgstr "la requête était : %s\n" -#~ msgid " -c, --clean clean (drop) database objects before recreating\n" -#~ msgstr "" -#~ " -c, --clean nettoie/supprime les bases de données avant de\n" -#~ " les créer\n" +#~ msgid "failed to connect to database\n" +#~ msgstr "n'a pas pu se connecter à la base de données\n" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version et quitte\n" +#~ msgid "failed to reconnect to database\n" +#~ msgstr "la reconnexion à la base de données a échoué\n" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide et quitte\n" +#~ msgid "archiver (db)" +#~ msgstr "programme d'archivage (db)" -#~ msgid "restoring large object OID %u\n" -#~ msgstr "restauration du « Large Object » d'OID %u\n" +#~ msgid "custom archiver" +#~ msgstr "programme d'archivage personnalisé" -#~ msgid "could not close large object file\n" -#~ msgstr "n'a pas pu fermer le fichier du « Large Object »\n" +#~ msgid "reducing dependencies for %d\n" +#~ msgstr "réduction des dépendances pour %d\n" -#~ msgid "could not open large object TOC for output: %s\n" -#~ msgstr "n'a pas pu ouvrir la TOC du « Large Object » en sortie : %s\n" +#~ msgid "transferring dependency %d -> %d to %d\n" +#~ msgstr "transfert de la dépendance %d -> %d vers %d\n" -#~ msgid "could not open large object TOC for input: %s\n" -#~ msgstr "n'a pas pu ouvrir la TOC du « Large Object » en entrée : %s\n" +#~ msgid "no item ready\n" +#~ msgstr "aucun élément prêt\n" -#~ msgid "could not close data file after reading\n" -#~ msgstr "n'a pas pu fermer le fichier de données après lecture\n" +#~ msgid "entering restore_toc_entries_postfork\n" +#~ msgstr "entrée dans restore_toc_entries_prefork\n" -#~ msgid "" -#~ "WARNING:\n" -#~ " This format is for demonstration purposes; it is not intended for\n" -#~ " normal use. Files will be written in the current working directory.\n" -#~ msgstr "" -#~ "ATTENTION :\n" -#~ " Ce format est présent dans un but de démonstration ; il n'est pas prévu\n" -#~ " pour une utilisation normale. Les fichiers seront écrits dans le\n" -#~ " répertoire actuel.\n" +#~ msgid "entering restore_toc_entries_parallel\n" +#~ msgstr "entrée dans restore_toc_entries_parallel\n" -#~ msgid "file archiver" -#~ msgstr "programme d'archivage de fichiers" +#~ msgid "entering restore_toc_entries_prefork\n" +#~ msgstr "entrée dans restore_toc_entries_prefork\n" -#~ msgid "SQL command failed\n" -#~ msgstr "la commande SQL a échoué\n" +#~ msgid "could not set default_with_oids: %s" +#~ msgstr "n'a pas pu configurer default_with_oids : %s" -#~ msgid "found more than one entry for pg_indexes in pg_class\n" -#~ msgstr "a trouvé plusieurs entrées pour pg_indexes dans la table pg_class\n" +#~ msgid "read TOC entry %d (ID %d) for %s %s\n" +#~ msgstr "lecture de l'entrée %d de la TOC (ID %d) pour %s %s\n" -#~ msgid "could not find entry for pg_indexes in pg_class\n" -#~ msgstr "n'a pas pu trouver l'entrée de pg_indexes dans pg_class\n" +#~ msgid "allocating AH for %s, format %d\n" +#~ msgstr "allocation d'AH pour %s, format %d\n" -#~ msgid "found more than one pg_database entry for this database\n" -#~ msgstr "a trouvé plusieurs entrées dans pg_database pour cette base de données\n" +#~ msgid "attempting to ascertain archive format\n" +#~ msgstr "tentative d'identification du format de l'archive\n" -#~ msgid "missing pg_database entry for this database\n" -#~ msgstr "entrée pg_database manquante pour cette base de données\n" +#~ msgid "-C and -1 are incompatible options\n" +#~ msgstr "-C et -1 sont des options incompatibles\n" -#~ msgid "query returned %d foreign server entry for foreign table \"%s\"\n" -#~ msgid_plural "query returned %d foreign server entries for foreign table \"%s\"\n" -#~ msgstr[0] "la requête a renvoyé %d entrée de serveur distant pour la table distante « %s »\n" -#~ msgstr[1] "la requête a renvoyé %d entrées de serveurs distants pour la table distante « %s »\n" +#~ msgid "archiver" +#~ msgstr "archiveur" -#~ msgid "dumpDatabase(): could not find pg_largeobject_metadata.relfrozenxid\n" -#~ msgstr "dumpDatabase() : n'a pas pu trouver pg_largeobject_metadata.relfrozenxid\n" +#~ msgid "select() failed: %s\n" +#~ msgstr "échec de select() : %s\n" -#~ msgid "dumpDatabase(): could not find pg_largeobject.relfrozenxid\n" -#~ msgstr "dumpDatabase() : n'a pas pu trouver pg_largeobject.relfrozenxid\n" +#~ msgid "parallel archiver" +#~ msgstr "archiveur en parallèle" -#~ msgid "query returned more than one (%d) pg_database entry for database \"%s\"\n" -#~ msgstr "" -#~ "la requête a renvoyé plusieurs (%d) entrées pg_database pour la base de\n" -#~ "données « %s »\n" +#~ msgid "compress_io" +#~ msgstr "compression_io" -#~ msgid "missing pg_database entry for database \"%s\"\n" -#~ msgstr "entrée manquante dans pg_database pour la base de données « %s »\n" +#~ msgid "child process was terminated by signal %d" +#~ msgstr "le processus fils a été terminé par le signal %d" -#~ msgid "*** aborted because of error\n" -#~ msgstr "*** interrompu du fait d'erreurs\n" +#~ msgid "child process was terminated by signal %s" +#~ msgstr "le processus fils a été terminé par le signal %s" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version puis quitte\n" +#~ msgid "pclose failed: %s" +#~ msgstr "échec de pclose : %s" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide puis quitte\n" +#~ msgid "could not read symbolic link \"%s\"" +#~ msgstr "n'a pas pu lire le lien symbolique « %s »" -#~ msgid "mismatch in actual vs. predicted file position (%s vs. %s)\n" -#~ msgstr "" -#~ "pas de correspondance entre la position réelle et celle prévue du fichier\n" -#~ "(%s vs. %s)\n" +#~ msgid "could not change directory to \"%s\": %s" +#~ msgstr "n'a pas pu changer le répertoire par « %s » : %s" -#~ msgid "could not output padding at end of tar member\n" -#~ msgstr "n'a pas pu remplir la fin du membre de tar\n" +#~ msgid "could not identify current directory: %s" +#~ msgstr "n'a pas pu identifier le répertoire courant : %s" -#~ msgid "could not write null block at end of tar archive\n" -#~ msgstr "n'a pas pu écrire le bloc nul à la fin de l'archive tar\n" +#~ msgid "" +#~ "The program \"pg_dump\" was found by \"%s\"\n" +#~ "but was not the same version as %s.\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Le programme « pg_dump » a été trouvé par « %s »\n" +#~ "mais n'a pas la même version que %s.\n" +#~ "Vérifiez votre installation." -#~ msgid "could not write byte\n" -#~ msgstr "n'a pas pu écrire l'octet\n" +#~ msgid "" +#~ "The program \"pg_dump\" is needed by %s but was not found in the\n" +#~ "same directory as \"%s\".\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Le programme « pg_dump » est nécessaire à %s mais n'a pas été trouvé dans le\n" +#~ "même répertoire que « %s ».\n" +#~ "Vérifiez votre installation." -#~ msgid "could not write byte: %s\n" -#~ msgstr "n'a pas pu écrire un octet : %s\n" +#~ msgid "internal error -- neither th nor fh specified in _tarReadRaw()" +#~ msgstr "erreur interne -- ni th ni fh ne sont précisés dans _tarReadRaw()" -#~ msgid "unexpected end of file\n" -#~ msgstr "fin de fichier inattendu\n" +#~ msgid "connection needs password" +#~ msgstr "la connexion nécessite un mot de passe" -#~ msgid "could not write to custom output routine\n" -#~ msgstr "n'a pas pu écrire vers la routine de sauvegarde personnalisée\n" +#~ msgid "could not reconnect to database: %s" +#~ msgstr "n'a pas pu se reconnecter à la base de données : %s" -#~ msgid "could not open output file \"%s\" for writing\n" -#~ msgstr "n'a pas pu ouvrir le fichier de sauvegarde « %s » en écriture\n" +#~ msgid "could not reconnect to database" +#~ msgstr "n'a pas pu se reconnecter à la base de données" -#~ msgid "archive member too large for tar format\n" -#~ msgstr "membre de l'archive trop volumineux pour le format tar\n" +#~ msgid "connecting to database \"%s\" as user \"%s\"" +#~ msgstr "connexion à la base de données « %s » en tant qu'utilisateur « %s »" -#~ msgid "error in ListenToWorkers(): %s\n" -#~ msgstr "erreur dans ListenToWorkers(): %s\n" +#~ msgid "could not connect to database \"%s\": %s" +#~ msgstr "n'a pas pu se connecter à la base de données « %s » : %s" -#~ msgid "terminated by user\n" -#~ msgstr "terminé par l'utilisateur\n" +#~ msgid "aggregate function %s could not be dumped correctly for this database version; ignored" +#~ msgstr "la fonction d'aggrégat %s n'a pas pu être sauvegardée correctement avec cette version de la base de données ; ignorée" -#~ msgid "unrecognized command on communication channel: %s\n" -#~ msgstr "commande inconnue sur le canal de communucation: %s\n" +#~ msgid "reading publication membership for table \"%s.%s\"" +#~ msgstr "lecture des appartenances aux publications pour la table « %s.%s »" -#~ msgid "could not get relation name for OID %u: %s\n" -#~ msgstr "n'a pas pu obtenir le nom de la relation pour l'OID %u: %s\n" +#~ msgid "LOCK TABLE failed for \"%s\": %s" +#~ msgstr "LOCK TABLE échoué pour la table « %s » : %s" -#~ msgid "worker is terminating\n" -#~ msgstr "le worker est en cours d'arrêt\n" +#~ msgid "connection to database \"%s\" failed: %s" +#~ msgstr "la connexion à la base de données « %s » a échoué : %s" -#~ msgid "reading extended statistics for table \"%s.%s\"\n" -#~ msgstr "lecture des statistiques étendues pour la table « %s.%s »\n" +#~ msgid "reconnection to database \"%s\" failed: %s" +#~ msgstr "reconnexion à la base de données « %s » échouée : %s" -#~ msgid "Report bugs to .\n" -#~ msgstr "Rapporter les bogues à .\n" +#~ msgid "could not write to large object (result: %lu, expected: %lu)" +#~ msgstr "n'a pas pu écrire le « Large Object » (résultat : %lu, attendu : %lu)" -#~ msgid "ftell mismatch with expected position -- ftell used" -#~ msgstr "ftell ne correspond pas à la position attendue -- ftell utilisé" +#~ msgid "mismatched number of collation names and versions for index" +#~ msgstr "nombre différent de noms et versions de collation pour l'index" -#~ msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive" -#~ msgstr "" -#~ "n'a pas pu trouver l'identifiant de bloc %d dans l'archive --\n" -#~ "il est possible que cela soit dû à une demande de restauration dans un ordre\n" -#~ "différent, qui n'a pas pu être géré à cause d'un manque d'information de\n" -#~ "position dans l'archive" +#~ msgid "could not parse index collation version array" +#~ msgstr "n'a pas pu analyser le tableau des versions de collation de l'index" -#~ msgid "select() failed: %m" -#~ msgstr "échec de select() : %m" +#~ msgid "could not parse index collation name array" +#~ msgstr "n'a pas pu analyser le tableau des noms de collation de l'index" -#~ msgid "WSAStartup failed: %d" -#~ msgstr "WSAStartup a échoué : %d" +#~ msgid "saving default_toast_compression = %s" +#~ msgstr "sauvegarde de default_toast_compression = %s" -#~ msgid "pclose failed: %m" -#~ msgstr "échec de pclose : %m" +#~ msgid "option --index-collation-versions-unknown only works in binary upgrade mode" +#~ msgstr "l'option --index-collation-versions-unknown fonctionne seulement dans le mode de mise à jour binaire" + +#~ msgid "invalid TOASTCOMPRESSION item: %s" +#~ msgstr "élément TOASTCOMPRESSION invalide : %s" diff --git a/src/bin/pg_rewind/po/es.po b/src/bin/pg_rewind/po/es.po index 7ee4f89f427fa..fe5a6d5296984 100644 --- a/src/bin/pg_rewind/po/es.po +++ b/src/bin/pg_rewind/po/es.po @@ -4,21 +4,21 @@ # This file is distributed under the same license as the PostgreSQL package. # # Álvaro Herrera , 2015. -# Carlos Chapi , 2017. +# Carlos Chapi , 2017, 2021. # msgid "" msgstr "" "Project-Id-Version: pg_rewind (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2021-05-14 19:49+0000\n" -"PO-Revision-Date: 2020-10-16 15:59-0300\n" +"PO-Revision-Date: 2021-05-21 23:23-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: BlackCAT 1.0\n" +"X-Generator: Poedit 2.4.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../../src/common/logging.c:259 @@ -88,16 +88,14 @@ msgid "could not get exit code from subprocess: error code %lu" msgstr "no se pudo obtener el código de salida del subproceso»: código de error %lu" #: ../../fe_utils/archive.c:53 -#, fuzzy, c-format -#| msgid "could not use restore_command with %%r alias" +#, c-format msgid "cannot use restore_command with %%r placeholder" -msgstr "no se puede usar restore_command con el alias %%r" +msgstr "no se puede usar restore_command con el marcador %%r" #: ../../fe_utils/archive.c:74 -#, fuzzy, c-format -#| msgid "unexpected file size for \"%s\": %lu instead of %lu" +#, c-format msgid "unexpected file size for \"%s\": %lld instead of %lld" -msgstr "el archivo «%s» tiene tamaño inesperado: %lu en lugar de %lu" +msgstr "el archivo «%s» tiene tamaño inesperado: %lld en lugar de %lld" #: ../../fe_utils/archive.c:85 #, c-format @@ -110,10 +108,9 @@ msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" #: ../../fe_utils/archive.c:112 -#, fuzzy, c-format -#| msgid "restore_command failed due to the signal: %s" +#, c-format msgid "restore_command failed: %s" -msgstr "restore_command falló debido a la señal: %s" +msgstr "restore_command falló: %s" #: ../../fe_utils/archive.c:121 #, c-format @@ -164,10 +161,9 @@ msgid "could not write file \"%s\": %m" msgstr "no se pudo escribir el archivo «%s»: %m" #: file_ops.c:150 file_ops.c:177 -#, fuzzy, c-format -#| msgid "unrecognized file format \"%d\"" +#, c-format msgid "undefined file type for \"%s\"" -msgstr "formato de archivo no reconocido «%d»" +msgstr "tipo de archivo no definido para «%s»" #: file_ops.c:173 #, c-format @@ -260,34 +256,29 @@ msgid "data file \"%s\" in source is not a regular file" msgstr "el archivo de datos «%s» en el origen no es un archivo regular" #: filemap.c:242 filemap.c:275 -#, fuzzy, c-format -#| msgid "duplicate option \"%s\"" +#, c-format msgid "duplicate source file \"%s\"" -msgstr "nombre de opción «%s» duplicada" +msgstr "archivo origen duplicado «%s»" #: filemap.c:330 -#, fuzzy, c-format -#| msgid "unexpected page modification for directory or symbolic link \"%s\"" +#, c-format msgid "unexpected page modification for non-regular file \"%s\"" -msgstr "modificación de página inesperada para el directorio o link simbólico «%s»" +msgstr "modificación de página inesperada para el archivo no regular «%s»" #: filemap.c:680 filemap.c:774 -#, fuzzy, c-format -#| msgid "Token types for parser \"%s\"" +#, c-format msgid "unknown file type for \"%s\"" -msgstr "Tipos de elemento para el analizador «%s»" +msgstr "tipo de archivo desconocido para «%s»" #: filemap.c:707 -#, fuzzy, c-format -#| msgid "table \"%s\" has different type for column \"%s\"" +#, c-format msgid "file \"%s\" is of different type in source and target" -msgstr "la tabla «%s» tiene un tipo diferente para la columna «%s»" +msgstr "el archivo «%s» tiene un tipo diferente en el origen y en el destino" #: filemap.c:779 -#, fuzzy, c-format -#| msgid "could not seek to end of file \"%s\": %m" +#, c-format msgid "could not decide what to do with file \"%s\"" -msgstr "no se pudo posicionar (seek) al fin del archivo «%s»: %m" +msgstr "no se pudo decidir qué hacer con el archivo «%s»" #: libpq_source.c:128 #, c-format @@ -300,10 +291,9 @@ msgid "full_page_writes must be enabled in the source server" msgstr "full_page_writes debe estar activado en el servidor de origen" #: libpq_source.c:150 -#, fuzzy, c-format -#| msgid "could not parse contents of file \"%s\"" +#, c-format msgid "could not prepare statement to fetch file contents: %s" -msgstr "no se pudo interpretar el contenido del archivo «%s»" +msgstr "no se pudo preparar sentencia para obtener el contenido del archivo: %s" #: libpq_source.c:169 #, c-format @@ -351,10 +341,9 @@ msgid "unexpected result while fetching remote files: %s" msgstr "resultados inesperados mientras se obtenían archivos remotos: %s" #: libpq_source.c:473 -#, fuzzy, c-format -#| msgid "received immediate shutdown request" +#, c-format msgid "received more data chunks than requested" -msgstr "se recibió petición de apagado inmediato" +msgstr "se recibieron más trozos de datos que los solicitados" #: libpq_source.c:477 #, c-format @@ -384,24 +373,22 @@ msgstr "largo del resultado inesperado mientras se obtenían los archivos remoto #: libpq_source.c:534 #, c-format msgid "received data for file \"%s\", when requested for \"%s\"" -msgstr "" +msgstr "se recibieron datos para el archivo «%s», cuando se solicitó para «%s»" #: libpq_source.c:538 #, c-format msgid "received data at offset %lld of file \"%s\", when requested for offset %lld" -msgstr "" +msgstr "se recibieron datos en la posición %lld del archivo «%s», cuando se solicitó para la posición %lld" #: libpq_source.c:550 -#, fuzzy, c-format -#| msgid "removed orphan archive status file \"%s\"" +#, c-format msgid "received more than requested for file \"%s\"" -msgstr "eliminando archivo de estado huérfano «%s»" +msgstr "se recibió más de lo solicitado para el archivo «%s»" #: libpq_source.c:563 -#, fuzzy, c-format -#| msgid "unexpected end of line or lexeme" +#, c-format msgid "unexpected number of data chunks received" -msgstr "fin de línea o lexema inesperado" +msgstr "se recibió un número inesperado de trozos de datos" #: libpq_source.c:606 #, c-format @@ -681,15 +668,14 @@ msgid "Done!" msgstr "¡Listo!" #: pg_rewind.c:564 -#, fuzzy, c-format -#| msgid "permission denied for database \"%s\"" +#, c-format msgid "no action decided for file \"%s\"" -msgstr "permiso denegado a la base de datos «%s»" +msgstr "no se decidió una acción para el archivo «%s»" #: pg_rewind.c:596 #, c-format msgid "source system was modified while pg_rewind was running" -msgstr "" +msgstr "el sistema origen fue modificado mientras pg_rewind estaba en ejecución" #: pg_rewind.c:600 #, c-format @@ -699,7 +685,7 @@ msgstr "creando etiqueta de respaldo y actualizando archivo de control" #: pg_rewind.c:650 #, c-format msgid "source system was in unexpected state at end of rewind" -msgstr "" +msgstr "el sistema origen estaba en un estado inesperado al final del rebobinado" #: pg_rewind.c:681 #, c-format @@ -866,10 +852,9 @@ msgid "there is no contrecord flag at %X/%X" msgstr "no hay bandera de contrecord en %X/%X" #: xlogreader.c:466 -#, fuzzy, c-format -#| msgid "invalid contrecord length %u at %X/%X" +#, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" -msgstr "largo de contrecord %u no válido en %X/%X" +msgstr "largo de contrecord %u no válido (se esperaba %lld) en %X/%X" #: xlogreader.c:703 #, c-format diff --git a/src/bin/pg_rewind/po/fr.po b/src/bin/pg_rewind/po/fr.po index 6edae52affd2b..492eacca9ccde 100644 --- a/src/bin/pg_rewind/po/fr.po +++ b/src/bin/pg_rewind/po/fr.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_rewind (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-11 07:49+0000\n" -"PO-Revision-Date: 2021-05-11 10:18+0200\n" +"POT-Creation-Date: 2021-05-28 00:49+0000\n" +"PO-Revision-Date: 2021-05-28 15:23+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: \n" "Language: fr\n" @@ -665,8 +665,8 @@ msgstr "Terminé !" #: pg_rewind.c:564 #, c-format -msgid "no action decided for \"%s\"" -msgstr "aucune action décidée pour « %s »" +msgid "no action decided for file \"%s\"" +msgstr "aucune action décidée pour le fichier « %s »" #: pg_rewind.c:596 #, c-format @@ -961,251 +961,251 @@ msgstr "enregistrement de longueur invalide à %X/%X" msgid "invalid compressed image at %X/%X, block %d" msgstr "image compressée invalide à %X/%X, bloc %d" -#~ msgid "received data at offset " -#~ msgstr "a reçu des données au décalage " +#~ msgid "there is no contrecord flag at %X/%X reading %X/%X" +#~ msgstr "il n'existe pas de drapeau contrecord à %X/%X en lisant %X/%X" -#~ msgid "could not connect to server: %s" -#~ msgstr "n'a pas pu se connecter au serveur : %s" +#~ msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" +#~ msgstr "longueur %u invalide du contrecord à %X/%X en lisant %X/%X, attendait %u" -#~ msgid "" -#~ "The program \"postgres\" is needed by %s but was not found in the\n" -#~ "same directory as \"%s\".\n" -#~ "Check your installation." -#~ msgstr "" -#~ "Le programme « postgres » est nécessaire à %s mais n'a pas été trouvé dans\n" -#~ "le même répertoire que « %s ».\n" -#~ "Vérifiez votre installation." +#~ msgid "\"%s\" is not a directory" +#~ msgstr "« %s » n'est pas un répertoire" -#~ msgid "" -#~ "The program \"postgres\" was found by \"%s\"\n" -#~ "but was not the same version as %s.\n" -#~ "Check your installation." -#~ msgstr "" -#~ "Le programme « postgres » a été trouvé par « %s » mais n'est pas de la même\n" -#~ "version que « %s ».\n" -#~ "Vérifiez votre installation." +#~ msgid "\"%s\" is not a symbolic link" +#~ msgstr "« %s » n'est pas un lien symbolique" -#~ msgid "" -#~ "The program \"%s\" is needed by %s but was\n" -#~ "not found in the same directory as \"%s\".\n" -#~ "Check your installation." -#~ msgstr "" -#~ "Le programme « %s » est nécessaire pour %s, mais n'a pas été trouvé\n" -#~ "dans le même répertoire que « %s ».\n" -#~ "Vérifiez votre installation." +#~ msgid "\"%s\" is not a regular file" +#~ msgstr "« %s » n'est pas un fichier standard" -#~ msgid "" -#~ "The program \"%s\" was found by \"%s\" but was\n" -#~ "not the same version as %s.\n" -#~ "Check your installation." -#~ msgstr "" -#~ "Le programme « %s » a été trouvé par « %s » mais n'était pas de la même version\n" -#~ "que %s.\n" -#~ "Vérifiez votre installation." +#~ msgid "source file list is empty" +#~ msgstr "la liste de fichiers sources est vide" -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Rapporter les bogues à .\n" +#~ msgid "source server must not be in recovery mode" +#~ msgstr "le serveur source ne doit pas être en mode restauration" -#~ msgid "WAL file is from different database system: incorrect XLOG_SEG_SIZE in page header" -#~ msgstr "le fichier WAL provient d'un système différent : XLOG_SEG_SIZE invalide dans l'en-tête de page" +#~ msgid "could not send COPY data: %s" +#~ msgstr "n'a pas pu envoyer les données COPY : %s" -#~ msgid "Timeline IDs must be less than child timeline's ID.\n" -#~ msgstr "Les identifiants de ligne de temps doivent être inférieurs à l'identifiant de la ligne de temps enfant.\n" +#~ msgid "could not send file list: %s" +#~ msgstr "n'a pas pu envoyer la liste de fichiers : %s" -#~ msgid "Timeline IDs must be in increasing sequence.\n" -#~ msgstr "Les identifiants de ligne de temps doivent être dans une séquence croissante.\n" +#~ msgid "could not send end-of-COPY: %s" +#~ msgstr "n'a pas pu envoyer end-of-COPY : %s" -#~ msgid "invalid data in history file: %s\n" -#~ msgstr "données invalides dans le fichier historique : %s\n" +#~ msgid "unexpected result while sending file list: %s" +#~ msgstr "résultat inattendu lors de l'envoi de la liste de fichiers : %s" -#~ msgid "Expected a write-ahead log switchpoint location.\n" -#~ msgstr "Attendait un emplacement de bascule de journal de transactions.\n" +#~ msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +#~ msgstr "%s : ATTENTION : ne peut pas créer les jetons restreints sur cette plateforme\n" -#~ msgid "Expected a numeric timeline ID.\n" -#~ msgstr "Attendait un identifiant numérique de ligne de temps.\n" +#~ msgid "%s: could not open process token: error code %lu\n" +#~ msgstr "%s : n'a pas pu ouvrir le jeton du processus : code d'erreur %lu\n" -#~ msgid "syntax error in history file: %s\n" -#~ msgstr "erreur de syntaxe dans le fichier historique : %s\n" +#~ msgid "%s: could not allocate SIDs: error code %lu\n" +#~ msgstr "%s : n'a pas pu allouer les SID : code d'erreur %lu\n" -#~ msgid "sync of target directory failed\n" -#~ msgstr "échec de la synchronisation du répertoire cible\n" +#~ msgid "%s: could not create restricted token: error code %lu\n" +#~ msgstr "%s : n'a pas pu créer le jeton restreint : code d'erreur %lu\n" -#~ msgid "" -#~ "The program \"initdb\" was found by \"%s\"\n" -#~ "but was not the same version as %s.\n" -#~ "Check your installation.\n" -#~ msgstr "" -#~ "Le programme « initdb » a été trouvé par « %s », mais n'est pas de la même version\n" -#~ "que %s.\n" -#~ "Vérifiez votre installation.\n" +#~ msgid "%s: could not start process for command \"%s\": error code %lu\n" +#~ msgstr "%s : n'a pas pu démarrer le processus pour la commande « %s » : code d'erreur %lu\n" -#~ msgid "" -#~ "The program \"initdb\" is needed by %s but was\n" -#~ "not found in the same directory as \"%s\".\n" -#~ "Check your installation.\n" -#~ msgstr "" -#~ "Le programme « initdb » est nécessaire pour %s, mais n'a pas été trouvé\n" -#~ "dans le même répertoire que « %s ».\n" -#~ "Vérifiez votre installation.\n" +#~ msgid "%s: could not re-execute with restricted token: error code %lu\n" +#~ msgstr "%s : n'a pas pu ré-exécuter le jeton restreint : code d'erreur %lu\n" -#~ msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte\n" -#~ msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes\n" -#~ msgstr[0] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octet\n" -#~ msgstr[1] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octets\n" +#~ msgid "%s: could not get exit code from subprocess: error code %lu\n" +#~ msgstr "%s : n'a pas pu récupérer le code de statut du sous-processus : code d'erreur %lu\n" -#~ msgid "%d: %X/%X - %X/%X\n" -#~ msgstr "%d : %X/%X - %X/%X\n" +#~ msgid "could not open directory \"%s\": %s\n" +#~ msgstr "n'a pas pu ouvrir le répertoire « %s » : %s\n" -#~ msgid "Target timeline history:\n" -#~ msgstr "Historique de la ligne de temps cible :\n" +#~ msgid "could not stat file \"%s\": %s\n" +#~ msgstr "n'a pas pu tester le fichier « %s » : %s\n" -#~ msgid "Source timeline history:\n" -#~ msgstr "Historique de la ligne de temps source :\n" +#~ msgid "could not read symbolic link \"%s\": %s\n" +#~ msgstr "n'a pas pu lire le lien symbolique « %s » : %s\n" -#~ msgid "%s: could not read permissions of directory \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu lire les droits sur le répertoire « %s » : %s\n" +#~ msgid "symbolic link \"%s\" target is too long\n" +#~ msgstr "la cible du lien symbolique « %s » est trop long\n" -#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" -#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" +#~ msgid "could not read directory \"%s\": %s\n" +#~ msgstr "n'a pas pu lire le répertoire « %s » : %s\n" -#~ msgid "could not read from file \"%s\": %s\n" -#~ msgstr "n'a pas pu lire le fichier « %s » : %s\n" +#~ msgid "could not close directory \"%s\": %s\n" +#~ msgstr "n'a pas pu fermer le répertoire « %s » : %s\n" -#~ msgid "could not seek in file \"%s\": %s\n" -#~ msgstr "n'a pas pu chercher dans le fichier « %s » : %s\n" +#~ msgid "could not read file \"%s\": %s\n" +#~ msgstr "n'a pas pu lire le fichier « %s » : %s\n" -#~ msgid "could not open file \"%s\": %s\n" -#~ msgstr "n'a pas pu ouvrir le fichier « %s » : %s\n" +#~ msgid "could not close file \"%s\": %s\n" +#~ msgstr "n'a pas pu fermer le fichier « %s » : %s\n" -#~ msgid "Failure, exiting\n" -#~ msgstr "Échec, sortie\n" +#~ msgid " block %u\n" +#~ msgstr " bloc %u\n" -#~ msgid "could not create temporary table: %s" -#~ msgstr "n'a pas pu créer la table temporaire : %s" +#~ msgid "could not write file \"%s\": %s\n" +#~ msgstr "n'a pas pu écrire le fichier « %s » : %s\n" -#~ msgid "fetched file \"%s\", length %d\n" -#~ msgstr "fichier récupéré « %s », longueur %d\n" +#~ msgid "could not remove file \"%s\": %s\n" +#~ msgstr "n'a pas pu supprimer le fichier « %s » : %s\n" -#~ msgid "received null value for chunk for file \"%s\", file has been deleted\n" -#~ msgstr "a reçu une valeur NULL pour une partie du fichier « %s », le fichier a été supprimé\n" +#~ msgid "could not truncate file \"%s\" to %u: %s\n" +#~ msgstr "n'a pas pu tronquer le fichier « %s » à %u : %s\n" -#~ msgid "getting file chunks\n" -#~ msgstr "récupération des parties de fichier\n" +#~ msgid "could not create directory \"%s\": %s\n" +#~ msgstr "n'a pas pu créer le répertoire « %s » : %s\n" -#~ msgid "could not set up connection context: %s" -#~ msgstr "n'a pas pu initialiser le contexte de connexion : « %s »" +#~ msgid "could not remove directory \"%s\": %s\n" +#~ msgstr "n'a pas pu supprimer le répertoire « %s » : %s\n" -#~ msgid "%s (%s)\n" -#~ msgstr "%s (%s)\n" +#~ msgid "could not remove symbolic link \"%s\": %s\n" +#~ msgstr "n'a pas pu supprimer le lien symbolique « %s » : %s\n" -#~ msgid "entry \"%s\" excluded from target file list\n" -#~ msgstr "enregistrement « %s » exclus de la liste des fichiers cibles\n" +#~ msgid "could not open file \"%s\" for reading: %s\n" +#~ msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %s\n" #~ msgid "entry \"%s\" excluded from source file list\n" #~ msgstr "enregistrement « %s » exclus de la liste des fichiers sources\n" -#~ msgid "could not open file \"%s\" for reading: %s\n" -#~ msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %s\n" +#~ msgid "entry \"%s\" excluded from target file list\n" +#~ msgstr "enregistrement « %s » exclus de la liste des fichiers cibles\n" -#~ msgid "could not remove symbolic link \"%s\": %s\n" -#~ msgstr "n'a pas pu supprimer le lien symbolique « %s » : %s\n" +#~ msgid "%s (%s)\n" +#~ msgstr "%s (%s)\n" -#~ msgid "could not remove directory \"%s\": %s\n" -#~ msgstr "n'a pas pu supprimer le répertoire « %s » : %s\n" +#~ msgid "could not set up connection context: %s" +#~ msgstr "n'a pas pu initialiser le contexte de connexion : « %s »" -#~ msgid "could not create directory \"%s\": %s\n" -#~ msgstr "n'a pas pu créer le répertoire « %s » : %s\n" +#~ msgid "getting file chunks\n" +#~ msgstr "récupération des parties de fichier\n" -#~ msgid "could not truncate file \"%s\" to %u: %s\n" -#~ msgstr "n'a pas pu tronquer le fichier « %s » à %u : %s\n" +#~ msgid "received null value for chunk for file \"%s\", file has been deleted\n" +#~ msgstr "a reçu une valeur NULL pour une partie du fichier « %s », le fichier a été supprimé\n" -#~ msgid "could not remove file \"%s\": %s\n" -#~ msgstr "n'a pas pu supprimer le fichier « %s » : %s\n" +#~ msgid "fetched file \"%s\", length %d\n" +#~ msgstr "fichier récupéré « %s », longueur %d\n" -#~ msgid "could not write file \"%s\": %s\n" -#~ msgstr "n'a pas pu écrire le fichier « %s » : %s\n" +#~ msgid "could not create temporary table: %s" +#~ msgstr "n'a pas pu créer la table temporaire : %s" -#~ msgid " block %u\n" -#~ msgstr " bloc %u\n" +#~ msgid "Failure, exiting\n" +#~ msgstr "Échec, sortie\n" -#~ msgid "could not close file \"%s\": %s\n" -#~ msgstr "n'a pas pu fermer le fichier « %s » : %s\n" +#~ msgid "could not open file \"%s\": %s\n" +#~ msgstr "n'a pas pu ouvrir le fichier « %s » : %s\n" -#~ msgid "could not read file \"%s\": %s\n" -#~ msgstr "n'a pas pu lire le fichier « %s » : %s\n" +#~ msgid "could not seek in file \"%s\": %s\n" +#~ msgstr "n'a pas pu chercher dans le fichier « %s » : %s\n" -#~ msgid "could not close directory \"%s\": %s\n" -#~ msgstr "n'a pas pu fermer le répertoire « %s » : %s\n" +#~ msgid "could not read from file \"%s\": %s\n" +#~ msgstr "n'a pas pu lire le fichier « %s » : %s\n" -#~ msgid "could not read directory \"%s\": %s\n" -#~ msgstr "n'a pas pu lire le répertoire « %s » : %s\n" +#~ msgid "%s: too many command-line arguments (first is \"%s\")\n" +#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" -#~ msgid "symbolic link \"%s\" target is too long\n" -#~ msgstr "la cible du lien symbolique « %s » est trop long\n" +#~ msgid "%s: could not read permissions of directory \"%s\": %s\n" +#~ msgstr "%s : n'a pas pu lire les droits sur le répertoire « %s » : %s\n" -#~ msgid "could not read symbolic link \"%s\": %s\n" -#~ msgstr "n'a pas pu lire le lien symbolique « %s » : %s\n" +#~ msgid "Source timeline history:\n" +#~ msgstr "Historique de la ligne de temps source :\n" -#~ msgid "could not stat file \"%s\": %s\n" -#~ msgstr "n'a pas pu tester le fichier « %s » : %s\n" +#~ msgid "Target timeline history:\n" +#~ msgstr "Historique de la ligne de temps cible :\n" -#~ msgid "could not open directory \"%s\": %s\n" -#~ msgstr "n'a pas pu ouvrir le répertoire « %s » : %s\n" +#~ msgid "%d: %X/%X - %X/%X\n" +#~ msgstr "%d : %X/%X - %X/%X\n" -#~ msgid "%s: could not get exit code from subprocess: error code %lu\n" -#~ msgstr "%s : n'a pas pu récupérer le code de statut du sous-processus : code d'erreur %lu\n" +#~ msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte\n" +#~ msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes\n" +#~ msgstr[0] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octet\n" +#~ msgstr[1] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octets\n" -#~ msgid "%s: could not re-execute with restricted token: error code %lu\n" -#~ msgstr "%s : n'a pas pu ré-exécuter le jeton restreint : code d'erreur %lu\n" +#~ msgid "" +#~ "The program \"initdb\" is needed by %s but was\n" +#~ "not found in the same directory as \"%s\".\n" +#~ "Check your installation.\n" +#~ msgstr "" +#~ "Le programme « initdb » est nécessaire pour %s, mais n'a pas été trouvé\n" +#~ "dans le même répertoire que « %s ».\n" +#~ "Vérifiez votre installation.\n" -#~ msgid "%s: could not start process for command \"%s\": error code %lu\n" -#~ msgstr "%s : n'a pas pu démarrer le processus pour la commande « %s » : code d'erreur %lu\n" +#~ msgid "" +#~ "The program \"initdb\" was found by \"%s\"\n" +#~ "but was not the same version as %s.\n" +#~ "Check your installation.\n" +#~ msgstr "" +#~ "Le programme « initdb » a été trouvé par « %s », mais n'est pas de la même version\n" +#~ "que %s.\n" +#~ "Vérifiez votre installation.\n" -#~ msgid "%s: could not create restricted token: error code %lu\n" -#~ msgstr "%s : n'a pas pu créer le jeton restreint : code d'erreur %lu\n" +#~ msgid "sync of target directory failed\n" +#~ msgstr "échec de la synchronisation du répertoire cible\n" -#~ msgid "%s: could not allocate SIDs: error code %lu\n" -#~ msgstr "%s : n'a pas pu allouer les SID : code d'erreur %lu\n" +#~ msgid "syntax error in history file: %s\n" +#~ msgstr "erreur de syntaxe dans le fichier historique : %s\n" -#~ msgid "%s: could not open process token: error code %lu\n" -#~ msgstr "%s : n'a pas pu ouvrir le jeton du processus : code d'erreur %lu\n" +#~ msgid "Expected a numeric timeline ID.\n" +#~ msgstr "Attendait un identifiant numérique de ligne de temps.\n" -#~ msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -#~ msgstr "%s : ATTENTION : ne peut pas créer les jetons restreints sur cette plateforme\n" +#~ msgid "Expected a write-ahead log switchpoint location.\n" +#~ msgstr "Attendait un emplacement de bascule de journal de transactions.\n" -#~ msgid "unexpected result while sending file list: %s" -#~ msgstr "résultat inattendu lors de l'envoi de la liste de fichiers : %s" +#~ msgid "invalid data in history file: %s\n" +#~ msgstr "données invalides dans le fichier historique : %s\n" -#~ msgid "could not send end-of-COPY: %s" -#~ msgstr "n'a pas pu envoyer end-of-COPY : %s" +#~ msgid "Timeline IDs must be in increasing sequence.\n" +#~ msgstr "Les identifiants de ligne de temps doivent être dans une séquence croissante.\n" -#~ msgid "could not send file list: %s" -#~ msgstr "n'a pas pu envoyer la liste de fichiers : %s" +#~ msgid "Timeline IDs must be less than child timeline's ID.\n" +#~ msgstr "Les identifiants de ligne de temps doivent être inférieurs à l'identifiant de la ligne de temps enfant.\n" -#~ msgid "could not send COPY data: %s" -#~ msgstr "n'a pas pu envoyer les données COPY : %s" +#~ msgid "WAL file is from different database system: incorrect XLOG_SEG_SIZE in page header" +#~ msgstr "le fichier WAL provient d'un système différent : XLOG_SEG_SIZE invalide dans l'en-tête de page" -#~ msgid "source server must not be in recovery mode" -#~ msgstr "le serveur source ne doit pas être en mode restauration" +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Rapporter les bogues à .\n" -#~ msgid "source file list is empty" -#~ msgstr "la liste de fichiers sources est vide" +#~ msgid "" +#~ "The program \"%s\" was found by \"%s\" but was\n" +#~ "not the same version as %s.\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Le programme « %s » a été trouvé par « %s » mais n'était pas de la même version\n" +#~ "que %s.\n" +#~ "Vérifiez votre installation." -#~ msgid "\"%s\" is not a regular file" -#~ msgstr "« %s » n'est pas un fichier standard" +#~ msgid "" +#~ "The program \"%s\" is needed by %s but was\n" +#~ "not found in the same directory as \"%s\".\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Le programme « %s » est nécessaire pour %s, mais n'a pas été trouvé\n" +#~ "dans le même répertoire que « %s ».\n" +#~ "Vérifiez votre installation." -#~ msgid "\"%s\" is not a symbolic link" -#~ msgstr "« %s » n'est pas un lien symbolique" +#~ msgid "" +#~ "The program \"postgres\" was found by \"%s\"\n" +#~ "but was not the same version as %s.\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Le programme « postgres » a été trouvé par « %s » mais n'est pas de la même\n" +#~ "version que « %s ».\n" +#~ "Vérifiez votre installation." -#~ msgid "\"%s\" is not a directory" -#~ msgstr "« %s » n'est pas un répertoire" +#~ msgid "" +#~ "The program \"postgres\" is needed by %s but was not found in the\n" +#~ "same directory as \"%s\".\n" +#~ "Check your installation." +#~ msgstr "" +#~ "Le programme « postgres » est nécessaire à %s mais n'a pas été trouvé dans\n" +#~ "le même répertoire que « %s ».\n" +#~ "Vérifiez votre installation." -#~ msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u" -#~ msgstr "longueur %u invalide du contrecord à %X/%X en lisant %X/%X, attendait %u" +#~ msgid "could not connect to server: %s" +#~ msgstr "n'a pas pu se connecter au serveur : %s" -#~ msgid "there is no contrecord flag at %X/%X reading %X/%X" -#~ msgstr "il n'existe pas de drapeau contrecord à %X/%X en lisant %X/%X" +#~ msgid "received data at offset " +#~ msgstr "a reçu des données au décalage " diff --git a/src/bin/pg_rewind/po/zh_CN.po b/src/bin/pg_rewind/po/zh_CN.po index 4918fd4cebd22..65db1ffb03fb5 100644 --- a/src/bin/pg_rewind/po/zh_CN.po +++ b/src/bin/pg_rewind/po/zh_CN.po @@ -5,411 +5,432 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_rewind (PostgreSQL) 12\n" +"Project-Id-Version: pg_rewind (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-05-22 17:56+0800\n" -"PO-Revision-Date: 2019-05-31 18:00+0800\n" -"Last-Translator: Jie Zhang \n" -"Language-Team: Chinese (Simplified) \n" +"POT-Creation-Date: 2021-06-09 21:19+0000\n" +"PO-Revision-Date: 2021-06-09 10:00+0800\n" +"Last-Translator: Jie Zhang \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.7\n" -#: ../../../src/common/logging.c:188 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "致命的: " -#: ../../../src/common/logging.c:195 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "错误: " -#: ../../../src/common/logging.c:202 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "警告: " #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 -#: ../../common/fe_memutils.c:98 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 #, c-format msgid "out of memory\n" msgstr "内存溢出\n" -#: ../../common/fe_memutils.c:92 +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "无法复制空指针 (内部错误)\n" -#: ../../common/restricted_token.c:69 -#, c-format -msgid "cannot create restricted tokens on this platform" -msgstr "无法为该平台创建受限制的令牌" +#: ../../common/restricted_token.c:64 +msgid "could not load library \"%s\": error code %lu" +msgstr "无法加载库 \"%s\": 错误码 %lu" -#: ../../common/restricted_token.c:78 +#: ../../common/restricted_token.c:73 +msgid "cannot create restricted tokens on this platform: error code %lu" +msgstr "无法为该平台创建受限制的令牌:错误码 %lu" + +#: ../../common/restricted_token.c:82 #, c-format msgid "could not open process token: error code %lu" msgstr "无法打开进程令牌 (token): 错误码 %lu" -#: ../../common/restricted_token.c:91 +#: ../../common/restricted_token.c:97 #, c-format msgid "could not allocate SIDs: error code %lu" msgstr "无法分配SID: 错误码 %lu" -#: ../../common/restricted_token.c:110 +#: ../../common/restricted_token.c:119 #, c-format msgid "could not create restricted token: error code %lu" msgstr "无法创建受限令牌: 错误码为 %lu" -#: ../../common/restricted_token.c:131 +#: ../../common/restricted_token.c:140 #, c-format msgid "could not start process for command \"%s\": error code %lu" msgstr "无法为命令 \"%s\"创建进程: 错误码 %lu" -#: ../../common/restricted_token.c:169 +#: ../../common/restricted_token.c:178 #, c-format msgid "could not re-execute with restricted token: error code %lu" msgstr "无法使用受限令牌再次执行: 错误码 %lu" -#: ../../common/restricted_token.c:185 +#: ../../common/restricted_token.c:194 #, c-format msgid "could not get exit code from subprocess: error code %lu" msgstr "无法从子进程得到退出码: 错误码 %lu" -#: copy_fetch.c:59 -#, c-format -msgid "could not open directory \"%s\": %m" -msgstr "无法打开目录 \"%s\": %m" - -#: copy_fetch.c:88 filemap.c:187 filemap.c:348 -#, c-format -msgid "could not stat file \"%s\": %m" -msgstr "无法取文件 \"%s\" 的状态: %m" - -#: copy_fetch.c:117 +#: ../../fe_utils/archive.c:53 #, c-format -msgid "could not read symbolic link \"%s\": %m" -msgstr "无法读取符号链接 \"%s\": %m" +msgid "cannot use restore_command with %%r placeholder" +msgstr "无法对%%r占位符使用restore_command" -#: copy_fetch.c:120 -#, c-format -msgid "symbolic link \"%s\" target is too long" -msgstr "符号链接 \"%s\" 目标超长" +#: ../../fe_utils/archive.c:74 +msgid "unexpected file size for \"%s\": %lld instead of %lld" +msgstr "\"%s\"的意外文件大小:%lld而不是%lld" -#: copy_fetch.c:135 -#, c-format -msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform" -msgstr "\"%s\"是一个符号链接,但是这个平台上不支持平台链接" +#: ../../fe_utils/archive.c:85 +msgid "could not open file \"%s\" restored from archive: %m" +msgstr "无法打开从存档还原的文件\"%s\": %m" -#: copy_fetch.c:142 +#: ../../fe_utils/archive.c:97 file_ops.c:417 #, c-format -msgid "could not read directory \"%s\": %m" -msgstr "无法读取目录 \"%s\": %m" +msgid "could not stat file \"%s\": %m" +msgstr "无法取文件 \"%s\" 的状态: %m" -#: copy_fetch.c:146 -#, c-format -msgid "could not close directory \"%s\": %m" -msgstr "无法关闭目录 \"%s\": %m" +#: ../../fe_utils/archive.c:112 +msgid "restore_command failed: %s" +msgstr "restore_command失败: %s" -#: copy_fetch.c:166 -#, c-format -msgid "could not open source file \"%s\": %m" -msgstr "无法打开源文件\"%s\": %m" +#: ../../fe_utils/archive.c:121 +msgid "could not restore file \"%s\" from archive" +msgstr "无法从存档还原文件\"%s\"" -#: copy_fetch.c:170 +#: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 +#: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 +#: ../../fe_utils/recovery_gen.c:171 parsexlog.c:77 parsexlog.c:135 +#: parsexlog.c:195 #, c-format -msgid "could not seek in source file: %m" -msgstr "无法在源文件中定位(seek):%m" +msgid "out of memory" +msgstr "内存用尽" -#: copy_fetch.c:187 file_ops.c:311 parsexlog.c:315 +#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:308 #, c-format -msgid "could not read file \"%s\": %m" -msgstr "无法读取文件 \"%s\": %m" +msgid "could not open file \"%s\": %m" +msgstr "无法打开文件 \"%s\": %m" -#: copy_fetch.c:190 +#: ../../fe_utils/recovery_gen.c:140 #, c-format -msgid "unexpected EOF while reading file \"%s\"" -msgstr "读取文件\"%s\"时遇到意料之外的EOF" +msgid "could not write to file \"%s\": %m" +msgstr "无法写入文件 \"%s\": %m" -#: copy_fetch.c:197 +#: ../../fe_utils/recovery_gen.c:152 #, c-format -msgid "could not close file \"%s\": %m" -msgstr "无法关闭文件 \"%s\": %m" +msgid "could not create file \"%s\": %m" +msgstr "无法创建文件 \"%s\": %m" -#: file_ops.c:62 +#: file_ops.c:67 #, c-format msgid "could not open target file \"%s\": %m" msgstr "无法打开目标文件\"%s\": %m" -#: file_ops.c:76 +#: file_ops.c:81 #, c-format msgid "could not close target file \"%s\": %m" msgstr "无法关闭目标文件\"%s\": %m" -#: file_ops.c:96 +#: file_ops.c:101 #, c-format msgid "could not seek in target file \"%s\": %m" msgstr "无法在目标文件\"%s\"中定位(seek): %m" -#: file_ops.c:112 +#: file_ops.c:117 #, c-format msgid "could not write file \"%s\": %m" msgstr "无法写入文件 \"%s\": %m" -#: file_ops.c:162 +#: file_ops.c:150 file_ops.c:177 +msgid "undefined file type for \"%s\"" +msgstr "不可识别的文件格式 \"%s\"" + +#: file_ops.c:173 #, c-format msgid "invalid action (CREATE) for regular file" msgstr "对常规文件无效的动作(CREATE)" -#: file_ops.c:185 +#: file_ops.c:200 #, c-format msgid "could not remove file \"%s\": %m" msgstr "无法删除文件 \"%s\": %m" -#: file_ops.c:203 +#: file_ops.c:218 #, c-format msgid "could not open file \"%s\" for truncation: %m" msgstr "无法打开文件\"%s\"用于截断:%m" -#: file_ops.c:207 +#: file_ops.c:222 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "无法将文件\"%s\"截断为%u:%m" -#: file_ops.c:223 +#: file_ops.c:238 #, c-format msgid "could not create directory \"%s\": %m" msgstr "无法创建目录 \"%s\": %m" -#: file_ops.c:237 +#: file_ops.c:252 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "无法删除目录 \"%s\": %m" -#: file_ops.c:251 +#: file_ops.c:266 #, c-format msgid "could not create symbolic link at \"%s\": %m" msgstr "无法在\"%s\"创建符号链接: %m" -#: file_ops.c:265 +#: file_ops.c:280 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "无法删除符号链接 \"%s\": %m" -#: file_ops.c:296 file_ops.c:300 +#: file_ops.c:326 file_ops.c:330 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "为了读取, 无法打开文件 \"%s\": %m" -#: file_ops.c:314 parsexlog.c:317 +#: file_ops.c:341 local_source.c:107 parsexlog.c:346 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "无法读取文件 \"%s\": %m" + +#: file_ops.c:344 parsexlog.c:348 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "无法读取文件\"%1$s\":读取了%3$zu中的%2$d" -#: filemap.c:179 +#: file_ops.c:388 #, c-format -msgid "data file \"%s\" in source is not a regular file" -msgstr "源头的数据文件\"%s\"不是一个常规文件" +msgid "could not open directory \"%s\": %m" +msgstr "无法打开目录 \"%s\": %m" -#: filemap.c:201 +#: file_ops.c:446 #, c-format -msgid "\"%s\" is not a directory" -msgstr "\"%s\"不是一个目录" +msgid "could not read symbolic link \"%s\": %m" +msgstr "无法读取符号链接 \"%s\": %m" -#: filemap.c:224 +#: file_ops.c:449 #, c-format -msgid "\"%s\" is not a symbolic link" -msgstr "\"%s\"不是一个符号链接" +msgid "symbolic link \"%s\" target is too long" +msgstr "符号链接 \"%s\" 目标超长" -#: filemap.c:236 +#: file_ops.c:464 #, c-format -msgid "\"%s\" is not a regular file" -msgstr "\"%s\"不是一个常规文件" +msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform" +msgstr "\"%s\"是一个符号链接,但是这个平台上不支持平台链接" -#: filemap.c:360 +#: file_ops.c:471 #, c-format -msgid "source file list is empty" -msgstr "源文件列表为空" +msgid "could not read directory \"%s\": %m" +msgstr "无法读取目录 \"%s\": %m" -#: filemap.c:475 +#: file_ops.c:475 #, c-format -msgid "unexpected page modification for directory or symbolic link \"%s\"" -msgstr "对目录或符号链接\"%s\"的意料之外的页修改" +msgid "could not close directory \"%s\": %m" +msgstr "无法关闭目录 \"%s\": %m" -#: libpq_fetch.c:51 +#: filemap.c:237 #, c-format -msgid "could not connect to server: %s" -msgstr "无法连接到服务器:%s" +msgid "data file \"%s\" in source is not a regular file" +msgstr "源头的数据文件\"%s\"不是一个常规文件" -#: libpq_fetch.c:55 -#, c-format -msgid "connected to server" -msgstr "已连接服务器" +#: filemap.c:242 filemap.c:275 +msgid "duplicate source file \"%s\"" +msgstr "复制源文件\"%s\"" + +#: filemap.c:330 +msgid "unexpected page modification for non-regular file \"%s\"" +msgstr "非常规文件\"%s\"的意外页面修改" + +#: filemap.c:680 filemap.c:774 +msgid "unknown file type for \"%s\"" +msgstr "\"%s\"的未知文件类型" -#: libpq_fetch.c:59 +#: filemap.c:707 +msgid "file \"%s\" is of different type in source and target" +msgstr "文件 \"%s\"在源和目标中的类型不同" + +#: filemap.c:779 +msgid "could not decide what to do with file \"%s\"" +msgstr "无法决定如何处理文件\"%s\"" + +#: libpq_source.c:128 #, c-format msgid "could not clear search_path: %s" msgstr "无法清除search_path: %s" -#: libpq_fetch.c:71 -#, c-format -msgid "source server must not be in recovery mode" -msgstr "源服务器不能处于恢复模式" - -#: libpq_fetch.c:81 +#: libpq_source.c:139 #, c-format msgid "full_page_writes must be enabled in the source server" msgstr "源服务器中的full_page_writes必须被启用" -#: libpq_fetch.c:93 -#, c-format -msgid "could not set up connection context: %s" -msgstr "无法设置连接上下文: %s" +#: libpq_source.c:150 +msgid "could not prepare statement to fetch file contents: %s" +msgstr "无法准备语句以获取文件内容: %s" -#: libpq_fetch.c:111 -#, c-format -msgid "error running query (%s) in source server: %s" +#: libpq_source.c:169 +msgid "error running query (%s) on source server: %s" msgstr "源服务器中有错误运行的查询(%s):%s" -#: libpq_fetch.c:116 +#: libpq_source.c:174 #, c-format msgid "unexpected result set from query" msgstr "从查询得到意料之外的结果集" -#: libpq_fetch.c:139 +#: libpq_source.c:196 +#, c-format +msgid "error running query (%s) in source server: %s" +msgstr "源服务器中有错误运行的查询(%s):%s" + +#: libpq_source.c:217 #, c-format msgid "unrecognized result \"%s\" for current WAL insert location" msgstr "当前WAL插入位置的未识别结果\"%s\"" -#: libpq_fetch.c:189 +#: libpq_source.c:268 #, c-format msgid "could not fetch file list: %s" msgstr "无法取得文件列表:%s" -#: libpq_fetch.c:194 +#: libpq_source.c:273 #, c-format msgid "unexpected result set while fetching file list" msgstr "在取得文件列表时得到意料之外的结果集" -#: libpq_fetch.c:242 +#: libpq_source.c:435 #, c-format msgid "could not send query: %s" msgstr "无法发送查询:%s" -#: libpq_fetch.c:247 +#: libpq_source.c:438 #, c-format msgid "could not set libpq connection to single row mode" msgstr "无法设置libpq连接为单行模式" -#: libpq_fetch.c:268 +#: libpq_source.c:468 #, c-format msgid "unexpected result while fetching remote files: %s" msgstr "在取得远程文件时得到意料之外的结果:%s" -#: libpq_fetch.c:274 +#: libpq_source.c:473 +msgid "received more data chunks than requested" +msgstr "收到的数据块比请求的多" + +#: libpq_source.c:477 #, c-format msgid "unexpected result set size while fetching remote files" msgstr "在取得远程文件时得到意料之外的结果集大小" -#: libpq_fetch.c:280 +#: libpq_source.c:483 #, c-format msgid "unexpected data types in result set while fetching remote files: %u %u %u" msgstr "在取得远程文件时结果集中有意料之外的数据类型:%u %u %u" -#: libpq_fetch.c:288 +#: libpq_source.c:491 #, c-format msgid "unexpected result format while fetching remote files" msgstr "在取得远程文件时得到意料之外的结果格式" -#: libpq_fetch.c:294 +#: libpq_source.c:497 #, c-format msgid "unexpected null values in result while fetching remote files" msgstr "在取得远程文件时结果中有意料之外的空值" -#: libpq_fetch.c:298 +#: libpq_source.c:501 #, c-format msgid "unexpected result length while fetching remote files" msgstr "在取得远程文件时得到意料之外的结果长度" -#: libpq_fetch.c:364 +#: libpq_source.c:534 #, c-format -msgid "could not fetch remote file \"%s\": %s" -msgstr "无法取得远程文件\"%s\": %s" +msgid "received data for file \"%s\", when requested for \"%s\"" +msgstr "当为文件\"%2$s\"请求时,接收到文件\"%1$s\"的数据" -#: libpq_fetch.c:369 +#: libpq_source.c:538 #, c-format -msgid "unexpected result set while fetching remote file \"%s\"" -msgstr "在取得远程文件\"%s\"时得到意料之外的结果集" +msgid "received data at offset %lld of file \"%s\", when requested for offset %lld" +msgstr "当请求偏移量%3$lld时,在文件\"%2$s\"的偏移量%1$lld处接收到数据" + +#: libpq_source.c:550 +msgid "received more than requested for file \"%s\"" +msgstr "收到的文件\"%s\"比要求的多" + +#: libpq_source.c:563 +msgid "unexpected number of data chunks received" +msgstr "接收到意外的数据块数" -#: libpq_fetch.c:413 +#: libpq_source.c:606 #, c-format -msgid "could not send COPY data: %s" -msgstr "无法发送COPY数据:%s" +msgid "could not fetch remote file \"%s\": %s" +msgstr "无法取得远程文件\"%s\": %s" -#: libpq_fetch.c:439 +#: libpq_source.c:611 #, c-format -msgid "could not create temporary table: %s" -msgstr "无法创建临时表:%s" +msgid "unexpected result set while fetching remote file \"%s\"" +msgstr "在取得远程文件\"%s\"时得到意料之外的结果集" -#: libpq_fetch.c:447 +#: local_source.c:86 #, c-format -msgid "could not send file list: %s" -msgstr "无法发送文件列表:%s" +msgid "could not open source file \"%s\": %m" +msgstr "无法打开源文件\"%s\": %m" -#: libpq_fetch.c:489 +#: local_source.c:90 #, c-format -msgid "could not send end-of-COPY: %s" -msgstr "无法发送COPY结束标记:%s" +msgid "could not seek in source file: %m" +msgstr "无法在源文件中定位(seek):%m" -#: libpq_fetch.c:495 +#: local_source.c:109 #, c-format -msgid "unexpected result while sending file list: %s" -msgstr "在发送文件列表时得到意料之外的结果:%s" +msgid "unexpected EOF while reading file \"%s\"" +msgstr "读取文件\"%s\"时遇到意料之外的EOF" -#: parsexlog.c:74 parsexlog.c:128 parsexlog.c:186 +#: local_source.c:116 #, c-format -msgid "out of memory" -msgstr "内存用尽" +msgid "could not close file \"%s\": %m" +msgstr "无法关闭文件 \"%s\": %m" -#: parsexlog.c:87 parsexlog.c:134 +#: parsexlog.c:89 parsexlog.c:142 #, c-format msgid "could not read WAL record at %X/%X: %s" msgstr "无法读取%X/%X处的WAL记录:%s" -#: parsexlog.c:91 parsexlog.c:137 +#: parsexlog.c:93 parsexlog.c:145 #, c-format msgid "could not read WAL record at %X/%X" msgstr "无法读取%X/%X处的WAL记录" -#: parsexlog.c:198 +#: parsexlog.c:208 #, c-format msgid "could not find previous WAL record at %X/%X: %s" msgstr "无法在%X/%X找到前一个WAL记录:%s" -#: parsexlog.c:202 +#: parsexlog.c:212 #, c-format msgid "could not find previous WAL record at %X/%X" msgstr "无法在%X/%X找到前一个WAL记录" -#: parsexlog.c:293 -#, c-format -msgid "could not open file \"%s\": %m" -msgstr "无法打开文件 \"%s\": %m" - -#: parsexlog.c:306 +#: parsexlog.c:337 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "无法在文件\"%s\"进行查找: %m" -#: parsexlog.c:386 +#: parsexlog.c:429 #, c-format msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmgr: %s, info: %02X" msgstr "WAL记录修改了一个关系,但是记录类型无法识别: lsn: %X/%X, rmgr: %s, info: %02X" -#: pg_rewind.c:72 +#: pg_rewind.c:84 #, c-format msgid "" "%s resynchronizes a PostgreSQL cluster with another copy of the cluster.\n" @@ -418,7 +439,7 @@ msgstr "" "%s用一个PostgreSQL集簇的另一个拷贝重新同步了该集簇。\n" "\n" -#: pg_rewind.c:73 +#: pg_rewind.c:85 #, c-format msgid "" "Usage:\n" @@ -429,32 +450,41 @@ msgstr "" " %s [选项]...\n" "\n" -#: pg_rewind.c:74 +#: pg_rewind.c:86 #, c-format msgid "Options:\n" msgstr "选项:\n" -#: pg_rewind.c:75 +#: pg_rewind.c:87 +#, c-format +msgid "" +" -c, --restore-target-wal use restore_command in target configuration to\n" +" retrieve WAL files from archives\n" +msgstr "" +" -c, --restore-target-wal 在目标配置中使用restore_command\n" +" 从存档中检索WAL文件\n" + +#: pg_rewind.c:89 #, c-format msgid " -D, --target-pgdata=DIRECTORY existing data directory to modify\n" msgstr " -D, --target-pgdata=DIRECTORY 已有的要修改的数据目录\n" -#: pg_rewind.c:76 +#: pg_rewind.c:90 #, c-format msgid " --source-pgdata=DIRECTORY source data directory to synchronize with\n" msgstr " --source-pgdata=DIRECTORY 要与之同步的源数据目录\n" -#: pg_rewind.c:77 +#: pg_rewind.c:91 #, c-format msgid " --source-server=CONNSTR source server to synchronize with\n" msgstr " --source-server=CONNSTR 要与之同步的源服务器\n" -#: pg_rewind.c:78 +#: pg_rewind.c:92 #, c-format msgid " -n, --dry-run stop before modifying anything\n" msgstr " -n, --dry-run 在修改任何东西之前停止\n" -#: pg_rewind.c:79 +#: pg_rewind.c:93 #, c-format msgid "" " -N, --no-sync do not wait for changes to be written\n" @@ -463,359 +493,443 @@ msgstr "" " -N, --no-sync 不用等待变化安全\n" " 写入磁盘\n" -#: pg_rewind.c:81 +#: pg_rewind.c:95 #, c-format msgid " -P, --progress write progress messages\n" msgstr " -P, --progress 写出进度消息\n" -#: pg_rewind.c:82 +#: pg_rewind.c:96 +msgid "" +" -R, --write-recovery-conf write configuration for replication\n" +" (requires --source-server)\n" +msgstr "" +" -R, --write-recovery-conf 为复制写配置文\n" +" (requires --source-server)\n" + +#: pg_rewind.c:98 #, c-format msgid " --debug write a lot of debug messages\n" msgstr " --debug 写出很多调试消息\n" -#: pg_rewind.c:83 +#: pg_rewind.c:99 +#, c-format +msgid " --no-ensure-shutdown do not automatically fix unclean shutdown\n" +msgstr " --no-ensure-shutdown 不要自动修复不干净的关机\n" + +#: pg_rewind.c:100 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 输出版本信息,然后退出\n" -#: pg_rewind.c:84 +#: pg_rewind.c:101 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help 显示本帮助,然后退出\n" -#: pg_rewind.c:85 +#: pg_rewind.c:102 #, c-format msgid "" "\n" -"Report bugs to .\n" +"Report bugs to <%s>.\n" msgstr "" "\n" -"报告错误至 .\n" +"臭虫报告至<%s>.\n" + +#: pg_rewind.c:103 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 主页: <%s>\n" -#: pg_rewind.c:142 pg_rewind.c:178 pg_rewind.c:185 pg_rewind.c:192 -#: pg_rewind.c:200 +#: pg_rewind.c:164 pg_rewind.c:213 pg_rewind.c:220 pg_rewind.c:227 +#: pg_rewind.c:234 pg_rewind.c:242 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "请用 \"%s --help\" 获取更多的信息.\n" -#: pg_rewind.c:177 +#: pg_rewind.c:212 #, c-format msgid "no source specified (--source-pgdata or --source-server)" msgstr "没有指定源 (--source-pgdata 或者 --source-server)" -#: pg_rewind.c:184 +#: pg_rewind.c:219 #, c-format msgid "only one of --source-pgdata or --source-server can be specified" msgstr "只能指定--source-pgdata和--source-server这两个选项之一" -#: pg_rewind.c:191 +#: pg_rewind.c:226 #, c-format msgid "no target data directory specified (--target-pgdata)" msgstr "没有指定目标数据目录 (--target-pgdata)" -#: pg_rewind.c:198 +#: pg_rewind.c:233 +#, c-format +msgid "no source server information (--source-server) specified for --write-recovery-conf" +msgstr "没有为--write-recovery-conf指定源服务器信息(--source-server)" + +#: pg_rewind.c:240 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "命令行参数太多 (第一个是 \"%s\")" -#: pg_rewind.c:213 +#: pg_rewind.c:255 #, c-format msgid "cannot be executed by \"root\"" msgstr "不能由\"root\"执行" -#: pg_rewind.c:214 +#: pg_rewind.c:256 #, c-format msgid "You must run %s as the PostgreSQL superuser.\n" msgstr "您现在作为PostgreSQL超级用户运行%s.\n" -#: pg_rewind.c:225 +#: pg_rewind.c:267 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "没有读取目录 \"%s\" 的权限: %m" -#: pg_rewind.c:256 +#: pg_rewind.c:287 +#, c-format +msgid "%s" +msgstr "%s" + +#: pg_rewind.c:290 +#, c-format +msgid "connected to server" +msgstr "已连接服务器" + +#: pg_rewind.c:337 #, c-format msgid "source and target cluster are on the same timeline" msgstr "源集簇和目标集簇处于同一时间线" -#: pg_rewind.c:262 +#: pg_rewind.c:346 #, c-format msgid "servers diverged at WAL location %X/%X on timeline %u" msgstr "服务器在时间线%3$u上的WAL位置%1$X/%2$X处发生了分歧" -#: pg_rewind.c:299 +#: pg_rewind.c:394 #, c-format msgid "no rewind required" msgstr "不需要倒带(rewind)" -#: pg_rewind.c:306 +#: pg_rewind.c:403 #, c-format msgid "rewinding from last common checkpoint at %X/%X on timeline %u" msgstr "从时间线%3$u上%1$X/%2$X处的最后一个普通检查点倒带" -#: pg_rewind.c:315 +#: pg_rewind.c:413 #, c-format msgid "reading source file list" msgstr "读取源文件列表" -#: pg_rewind.c:318 +#: pg_rewind.c:417 #, c-format msgid "reading target file list" msgstr "读取目标文件列表" -#: pg_rewind.c:329 +#: pg_rewind.c:426 #, c-format msgid "reading WAL in target" msgstr "读取目标中的WAL" -#: pg_rewind.c:346 +#: pg_rewind.c:447 #, c-format msgid "need to copy %lu MB (total source directory size is %lu MB)" msgstr "需要复制 %lu MB(整个源目录的大小是 %lu MB)" -#: pg_rewind.c:365 -#, c-format -msgid "creating backup label and updating control file" -msgstr "正在创建备份标签并且更新控制文件" - -#: pg_rewind.c:394 +#: pg_rewind.c:465 #, c-format msgid "syncing target data directory" msgstr "正在同步目标数据目录" -#: pg_rewind.c:397 +#: pg_rewind.c:481 #, c-format msgid "Done!" msgstr "完成!" -#: pg_rewind.c:409 +#: pg_rewind.c:564 +msgid "no action decided for file \"%s\"" +msgstr "未决定对文件\"%s\"执行任何操作" + +#: pg_rewind.c:596 +#, c-format +msgid "source system was modified while pg_rewind was running" +msgstr "pg_rewind运行时修改了源系统" + +#: pg_rewind.c:600 +#, c-format +msgid "creating backup label and updating control file" +msgstr "正在创建备份标签并且更新控制文件" + +#: pg_rewind.c:650 +#, c-format +msgid "source system was in unexpected state at end of rewind" +msgstr "源系统在rewind结束时处于意外状态" + +#: pg_rewind.c:681 #, c-format msgid "source and target clusters are from different systems" msgstr "源集簇和目标集簇来自不同的系统" -#: pg_rewind.c:417 +#: pg_rewind.c:689 #, c-format msgid "clusters are not compatible with this version of pg_rewind" msgstr "集簇与这个pg_rewind的版本不兼容" -#: pg_rewind.c:427 +#: pg_rewind.c:699 #, c-format msgid "target server needs to use either data checksums or \"wal_log_hints = on\"" msgstr "目标服务器需要使用数据校验和或者让\"wal_log_hints = on\"" -#: pg_rewind.c:438 +#: pg_rewind.c:710 #, c-format msgid "target server must be shut down cleanly" msgstr "目标服务器必须被干净地关闭" -#: pg_rewind.c:448 +#: pg_rewind.c:720 #, c-format msgid "source data directory must be shut down cleanly" msgstr "源数据目录必须被干净地关闭" -#: pg_rewind.c:497 +#: pg_rewind.c:772 #, c-format msgid "%*s/%s kB (%d%%) copied" msgstr "已复制%*s/%s kB (%d%%)" -#: pg_rewind.c:558 -#, c-format -msgid "invalid control file\n" -msgstr "无效的控制文件\n" +#: pg_rewind.c:835 +msgid "invalid control file" +msgstr "无效的控制文件" -#: pg_rewind.c:642 +#: pg_rewind.c:919 #, c-format msgid "could not find common ancestor of the source and target cluster's timelines" msgstr "无法找到源集簇和目标集簇的时间线的共同祖先" -#: pg_rewind.c:683 +#: pg_rewind.c:960 #, c-format msgid "backup label buffer too small" msgstr "备份标签缓冲太小" -#: pg_rewind.c:706 +#: pg_rewind.c:983 #, c-format msgid "unexpected control file CRC" msgstr "意料之外的控制文件CRC" -#: pg_rewind.c:716 +#: pg_rewind.c:995 #, c-format msgid "unexpected control file size %d, expected %d" msgstr "意料之外的控制文件大小%d,应该是%d" -#: pg_rewind.c:725 +#: pg_rewind.c:1004 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "WAL段大小必须是1 MB到1 GB之间的2的幂,但控制文件指定了%d字节" msgstr[1] "WAL段大小必须是1 MB到1 GB之间的2的幂,但控制文件指定了%d字节" -#: timeline.c:76 timeline.c:82 +#: pg_rewind.c:1043 pg_rewind.c:1101 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "" +"%2$s需要程序\"%1$s\"\n" +"但在与\"%3$s\"相同的目录中找不到该程序.\n" +"检查您的安装." + +#: pg_rewind.c:1048 pg_rewind.c:1106 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "" +"程序\"%s\"是由\"%s\"找到的\n" +"但与%s的版本不同.\n" +"检查您的安装." + +#: pg_rewind.c:1069 +msgid "restore_command is not set in the target cluster" +msgstr "目标群集中未设置restore_command" + +#: pg_rewind.c:1112 +#, c-format +msgid "executing \"%s\" for target server to complete crash recovery" +msgstr "对目标服务器执行\"%s\"以完成崩溃恢复" + +#: pg_rewind.c:1132 +#, c-format +msgid "postgres single-user mode in target cluster failed" +msgstr "目标群集中的postgres单用户模式失败" + +#: pg_rewind.c:1133 +msgid "Command was: %s" +msgstr "命令是: %s" + +#: timeline.c:75 timeline.c:81 #, c-format msgid "syntax error in history file: %s" msgstr "历史文件中的语法错误: %s" -#: timeline.c:77 +#: timeline.c:76 #, c-format msgid "Expected a numeric timeline ID." msgstr "期望一个数字 timeline ID." -#: timeline.c:83 +#: timeline.c:82 #, c-format msgid "Expected a write-ahead log switchpoint location." msgstr "期望一个预写日志切换点位置." -#: timeline.c:88 +#: timeline.c:87 #, c-format msgid "invalid data in history file: %s" msgstr "历史文件中的无效数据: %s" -#: timeline.c:89 +#: timeline.c:88 #, c-format msgid "Timeline IDs must be in increasing sequence." msgstr "TimeLine ID 必须为递增序列." -#: timeline.c:109 +#: timeline.c:108 #, c-format msgid "invalid data in history file" msgstr "历史文件中有无效数据" -#: timeline.c:110 +#: timeline.c:109 #, c-format msgid "Timeline IDs must be less than child timeline's ID." msgstr "Timeline ID 必须小于子 timeline 的 ID." -#: xlogreader.c:299 +#: xlogreader.c:349 #, c-format msgid "invalid record offset at %X/%X" msgstr "%X/%X处有无效的记录偏移量" -#: xlogreader.c:307 +#: xlogreader.c:357 #, c-format msgid "contrecord is requested by %X/%X" msgstr "%X/%X请求继续记录(contrecord)" -#: xlogreader.c:348 xlogreader.c:645 +#: xlogreader.c:398 xlogreader.c:695 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "%X/%X处有无效记录长度: 应该是%u, 但实际是%u" -#: xlogreader.c:372 +#: xlogreader.c:422 #, c-format msgid "record length %u at %X/%X too long" msgstr "%2$X/%3$X处有的记录长度%1$u过长" -#: xlogreader.c:404 +#: xlogreader.c:453 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "%X/%X处没有继续记录标志" -#: xlogreader.c:417 -#, c-format -msgid "invalid contrecord length %u at %X/%X" -msgstr "%2$X/%3$X处有无效的继续记录长度%1$u" +#: xlogreader.c:466 +msgid "invalid contrecord length %u (expected %lld) at %X/%X" +msgstr "%3$X/%4$X处有无效的继续记录长度%1$u(应为 %2$lld)" -#: xlogreader.c:653 +#: xlogreader.c:703 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "%2$X/%3$X处有无效的资源管理器 ID %1$u" -#: xlogreader.c:667 xlogreader.c:684 +#: xlogreader.c:716 xlogreader.c:732 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "%3$X/%4$X处的记录有不正确的prev-link %1$X/%2$X" -#: xlogreader.c:721 +#: xlogreader.c:768 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "%X/%X处的记录中有不正确的资源管理器数据校验和" -#: xlogreader.c:758 +#: xlogreader.c:805 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "在日志段%2$s的偏移量%3$u处有无效的magic号%1$04X" -#: xlogreader.c:772 xlogreader.c:823 +#: xlogreader.c:819 xlogreader.c:860 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "在日志段%2$s的偏移量%3$u处有无效的info位%1$04X" -#: xlogreader.c:798 -#, c-format -msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" -msgstr "WAL文件来自于不同的数据库系统:WAL文件数据库系统标识符是%s,pg_control数据库系统标识符是%s" +#: xlogreader.c:834 +msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" +msgstr "WAL文件来自于不同的数据库系统:WAL文件数据库系统标识符是%llu,pg_control数据库系统标识符是%llu" -#: xlogreader.c:805 +#: xlogreader.c:842 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL文件来自于不同的数据库系统:页头部中有不正确的段大小" -#: xlogreader.c:811 +#: xlogreader.c:848 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL文件来自于不同的数据库系统:页头部中有不正确的XLOG_BLCKSZ" -#: xlogreader.c:842 +#: xlogreader.c:879 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "在日志段%3$s的偏移量%4$u处有意料之外的pageaddr %1$X/%2$X" -#: xlogreader.c:867 +#: xlogreader.c:904 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "在日志段%3$s的偏移量%4$u处有失序的时间线 ID %1$u(在%2$u之后)" -#: xlogreader.c:1112 +#: xlogreader.c:1249 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "在%2$X/%3$X处有无序的block_id %1$u" -#: xlogreader.c:1135 +#: xlogreader.c:1271 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA已被设置,但是在%X/%X处没有包括数据" -#: xlogreader.c:1142 +#: xlogreader.c:1278 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA没有被设置,但是在%2$X/%3$X处的数据长度为%1$u" -#: xlogreader.c:1178 +#: xlogreader.c:1314 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE已被设置,但是%4$X/%5$X处记录了洞偏移量为%1$u、长度为%2$u、块映像长度为%3$u" -#: xlogreader.c:1194 +#: xlogreader.c:1330 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE没有被设置,但是%3$X/%4$X处记录了洞偏移量为%1$u、长度为%2$u" -#: xlogreader.c:1209 +#: xlogreader.c:1345 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED已被设置,但是%2$X/%3$X处记录的块映像长度为%1$u" -#: xlogreader.c:1224 +#: xlogreader.c:1360 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE和BKPIMAGE_IS_COMPRESSED都没有被设置,但是%2$X/%3$X处记录的块映像长度为%1$u" -#: xlogreader.c:1240 +#: xlogreader.c:1376 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL已被设置,但是在%X/%X没有前一个关系" -#: xlogreader.c:1252 +#: xlogreader.c:1388 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "%2$X/%3$X处有无效block_id %1$u" -#: xlogreader.c:1341 +#: xlogreader.c:1475 #, c-format msgid "record with invalid length at %X/%X" msgstr "%X/%X处的记录的长度无效" -#: xlogreader.c:1430 +#: xlogreader.c:1564 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "%X/%X处是块%d的无效压缩映像" diff --git a/src/bin/pg_test_fsync/po/el.po b/src/bin/pg_test_fsync/po/el.po index 842e139a0e5a4..8382e61b9079f 100644 --- a/src/bin/pg_test_fsync/po/el.po +++ b/src/bin/pg_test_fsync/po/el.po @@ -1,20 +1,21 @@ # Greek message translation file for pg_test_fsync # Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the pg_test_fsync (PostgreSQL) package. +# Georgios Kokolatos , 2021 # msgid "" msgstr "" "Project-Id-Version: pg_test_fsync (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-05 06:49+0000\n" +"POT-Creation-Date: 2021-05-25 05:49+0000\n" "PO-Revision-Date: 2021-05-05 10:54+0200\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"Last-Translator: Georgios Kokolatos \n" -"Language-Team: \n" "X-Generator: Poedit 2.4.3\n" #. translator: maintain alignment with NA_FORMAT @@ -51,20 +52,20 @@ msgid "Direct I/O is not supported on this platform.\n" msgstr "Άμεσο I/O δεν υποστηρίζεται σε αυτήν την πλατφόρμα.\n" #: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339 -#: pg_test_fsync.c:363 pg_test_fsync.c:506 pg_test_fsync.c:518 -#: pg_test_fsync.c:534 pg_test_fsync.c:540 pg_test_fsync.c:562 +#: pg_test_fsync.c:363 pg_test_fsync.c:507 pg_test_fsync.c:519 +#: pg_test_fsync.c:535 pg_test_fsync.c:541 pg_test_fsync.c:563 msgid "could not open output file" msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου εξόδου" #: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323 -#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:410 -#: pg_test_fsync.c:469 pg_test_fsync.c:508 pg_test_fsync.c:536 -#: pg_test_fsync.c:567 +#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:411 +#: pg_test_fsync.c:470 pg_test_fsync.c:509 pg_test_fsync.c:537 +#: pg_test_fsync.c:568 msgid "write failed" msgstr "απέτυχε η εγγραφή" #: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374 -#: pg_test_fsync.c:510 pg_test_fsync.c:542 +#: pg_test_fsync.c:511 pg_test_fsync.c:543 msgid "fsync failed" msgstr "fsync απέτυχε" @@ -91,16 +92,16 @@ msgstr "" msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n" msgstr "(με wal_sync_method σειρά προτίμησης, εκτός από fdatasync είναι η προεπιλογή σε Linux)\n" -#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:457 +#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:458 msgid "n/a*" msgstr "n/a*" #: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379 -#: pg_test_fsync.c:416 pg_test_fsync.c:475 +#: pg_test_fsync.c:417 pg_test_fsync.c:476 msgid "n/a" msgstr "n/a" -#: pg_test_fsync.c:421 +#: pg_test_fsync.c:422 #, c-format msgid "" "* This file system and its mount options do not support direct\n" @@ -109,7 +110,7 @@ msgstr "" "* Αυτό το σύστημα αρχείων και οι επιλογές προσάρτησής του δεν υποστηρίζουν\n" " άμεσο I/O, π.χ. ext4 σε λειτουργία journal.\n" -#: pg_test_fsync.c:429 +#: pg_test_fsync.c:430 #, c-format msgid "" "\n" @@ -118,7 +119,7 @@ msgstr "" "\n" "Συγκρίνετε open_sync με διαφορετικά μεγέθη εγγραφής:\n" -#: pg_test_fsync.c:430 +#: pg_test_fsync.c:431 #, c-format msgid "" "(This is designed to compare the cost of writing 16kB in different write\n" @@ -127,27 +128,27 @@ msgstr "" "(Αυτό έχει σχεδιαστεί για να συγκρίνει το κόστος της γραφής 16kB σε διαφορετικά\n" "μεγέθη open_sync.)\n" -#: pg_test_fsync.c:433 +#: pg_test_fsync.c:434 msgid " 1 * 16kB open_sync write" msgstr " 1 * 16kB open_sync εγγραφή" -#: pg_test_fsync.c:434 +#: pg_test_fsync.c:435 msgid " 2 * 8kB open_sync writes" msgstr " 2 * 8kB open_sync εγγραφές" -#: pg_test_fsync.c:435 +#: pg_test_fsync.c:436 msgid " 4 * 4kB open_sync writes" msgstr " 4 * 4kB open_sync εγγραφές" -#: pg_test_fsync.c:436 +#: pg_test_fsync.c:437 msgid " 8 * 2kB open_sync writes" msgstr " 8 * 2kB open_sync εγγραφές" -#: pg_test_fsync.c:437 +#: pg_test_fsync.c:438 msgid "16 * 1kB open_sync writes" msgstr "16 * 1kB open_sync εγγραφές" -#: pg_test_fsync.c:491 +#: pg_test_fsync.c:492 #, c-format msgid "" "\n" @@ -156,7 +157,7 @@ msgstr "" "\n" "Ελέγξτε εάν τηρείται το fsync σε μη-εγγράψιμο περιγραφέα αρχείων:\n" -#: pg_test_fsync.c:492 +#: pg_test_fsync.c:493 #, c-format msgid "" "(If the times are similar, fsync() can sync data written on a different\n" @@ -165,7 +166,7 @@ msgstr "" "(Εάν οι χρόνοι είναι παρόμοιοι, το fsync() μπορεί να συγχρονίσει δεδομένα εγγεγραμμένα\n" "σε διαφορετικό περιγραφέα.)\n" -#: pg_test_fsync.c:557 +#: pg_test_fsync.c:558 #, c-format msgid "" "\n" diff --git a/src/bin/pg_test_fsync/po/es.po b/src/bin/pg_test_fsync/po/es.po index bb39df7efacd7..544cc892f7206 100644 --- a/src/bin/pg_test_fsync/po/es.po +++ b/src/bin/pg_test_fsync/po/es.po @@ -3,14 +3,14 @@ # Copyright (c) 2017-2019, PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. # -# Carlos Chapi , 2017. +# Carlos Chapi , 2017, 2021. # msgid "" msgstr "" "Project-Id-Version: pg_test_fsync (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2021-05-14 19:49+0000\n" -"PO-Revision-Date: 2019-06-06 17:25-0400\n" +"PO-Revision-Date: 2021-05-21 23:25-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: BlackCAT 1.0\n" +"X-Generator: Poedit 2.4.3\n" #. translator: maintain alignment with NA_FORMAT #: pg_test_fsync.c:31 @@ -37,13 +37,11 @@ msgid "Try \"%s --help\" for more information.\n" msgstr "Pruebe «%s --help» para mayor información.\n" #: pg_test_fsync.c:216 -#, fuzzy, c-format -#| msgid "%d second per test\n" -#| msgid_plural "%d seconds per test\n" +#, c-format msgid "%u second per test\n" msgid_plural "%u seconds per test\n" -msgstr[0] "%d segundo por prueba\n" -msgstr[1] "%d segundos por prueba\n" +msgstr[0] "%u segundo por prueba\n" +msgstr[1] "%u segundos por prueba\n" #: pg_test_fsync.c:221 #, c-format diff --git a/src/bin/pg_test_timing/po/el.po b/src/bin/pg_test_timing/po/el.po index 49e5f063de496..5375540b1eed9 100644 --- a/src/bin/pg_test_timing/po/el.po +++ b/src/bin/pg_test_timing/po/el.po @@ -1,20 +1,21 @@ # Greek message translation file for pg_test_timing # Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the pg_test_timing (PostgreSQL) package. +# Georgios Kokolatos , 2021 # msgid "" msgstr "" "Project-Id-Version: pg_test_timing (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-27 06:17+0000\n" +"POT-Creation-Date: 2021-05-25 05:47+0000\n" "PO-Revision-Date: 2021-04-28 10:43+0200\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"Last-Translator: Georgios Kokolatos \n" -"Language-Team: \n" "X-Generator: Poedit 2.4.2\n" #: pg_test_timing.c:59 diff --git a/src/bin/pg_test_timing/po/es.po b/src/bin/pg_test_timing/po/es.po index cd68ab1492d0f..3ca19778d1aa9 100644 --- a/src/bin/pg_test_timing/po/es.po +++ b/src/bin/pg_test_timing/po/es.po @@ -3,14 +3,14 @@ # Copyright (c) 2017-2019, PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. # -# Carlos Chapi , 2017. +# Carlos Chapi , 2017-2021. # msgid "" msgstr "" "Project-Id-Version: pg_test_timing (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2020-05-17 02:45+0000\n" -"PO-Revision-Date: 2019-06-06 17:25-0400\n" +"POT-Creation-Date: 2021-05-14 19:47+0000\n" +"PO-Revision-Date: 2021-05-19 22:07-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -18,64 +18,72 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: BlackCAT 1.0\n" +"X-Generator: Poedit 2.4.2\n" -#: pg_test_timing.c:55 +#: pg_test_timing.c:59 #, c-format msgid "Usage: %s [-d DURATION]\n" msgstr "Empleo: %s [-d DURACIÓN]\n" -#: pg_test_timing.c:75 pg_test_timing.c:87 pg_test_timing.c:104 +#: pg_test_timing.c:81 +#, c-format +msgid "%s: invalid argument for option %s\n" +msgstr "%s: argumento no válido para la opción %s\n" + +#: pg_test_timing.c:83 pg_test_timing.c:97 pg_test_timing.c:109 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Pruebe «%s --help» para mayor información.\n" -#: pg_test_timing.c:85 +#: pg_test_timing.c:90 #, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s: demasiados argumentos de línea de órdenes (el primero es «%s»)\n" +msgid "%s: %s must be in range %u..%u\n" +msgstr "%s: %s debe estar en el rango %u..%u\n" -#: pg_test_timing.c:94 +#: pg_test_timing.c:107 #, c-format -msgid "Testing timing overhead for %d second.\n" -msgid_plural "Testing timing overhead for %d seconds.\n" -msgstr[0] "Midiendo sobrecosto de lectura de reloj durante %d segundo.\n" -msgstr[1] "Midiendo sobrecosto de lectura de reloj durante %d segundos.\n" +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: demasiados argumentos de línea de órdenes (el primero es «%s»)\n" -#: pg_test_timing.c:102 +#: pg_test_timing.c:115 #, c-format -msgid "%s: duration must be a positive integer (duration is \"%d\")\n" -msgstr "%s: la duración debe ser un número entero positivo (la duración es \"%d\")\n" +msgid "Testing timing overhead for %u second.\n" +msgid_plural "Testing timing overhead for %u seconds.\n" +msgstr[0] "Midiendo sobrecosto de lectura de reloj durante %u segundo.\n" +msgstr[1] "Midiendo sobrecosto de lectura de reloj durante %u segundos.\n" -#: pg_test_timing.c:140 +#: pg_test_timing.c:151 #, c-format msgid "Detected clock going backwards in time.\n" msgstr "Se detectó que el reloj retrocede en el tiempo.\n" -#: pg_test_timing.c:141 +#: pg_test_timing.c:152 #, c-format msgid "Time warp: %d ms\n" msgstr "Desfase de tiempo: %d ms\n" -#: pg_test_timing.c:164 +#: pg_test_timing.c:175 #, c-format msgid "Per loop time including overhead: %0.2f ns\n" msgstr "Tiempo por lectura incluyendo sobrecosto: %0.2f ns\n" -#: pg_test_timing.c:175 +#: pg_test_timing.c:186 msgid "< us" msgstr "< us" -#: pg_test_timing.c:176 +#: pg_test_timing.c:187 #, no-c-format msgid "% of total" msgstr "% del total" -#: pg_test_timing.c:177 +#: pg_test_timing.c:188 msgid "count" msgstr "cantidad" -#: pg_test_timing.c:186 +#: pg_test_timing.c:197 #, c-format msgid "Histogram of timing durations:\n" msgstr "Histograma de duraciones de lectura de reloj:\n" + +#~ msgid "%s: duration must be a positive integer (duration is \"%d\")\n" +#~ msgstr "%s: la duración debe ser un número entero positivo (la duración es \"%d\")\n" diff --git a/src/bin/pg_test_timing/po/zh_CN.po b/src/bin/pg_test_timing/po/zh_CN.po index 9edb500df90f3..9259fcd7d7f4e 100644 --- a/src/bin/pg_test_timing/po/zh_CN.po +++ b/src/bin/pg_test_timing/po/zh_CN.po @@ -5,74 +5,76 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_test_timing (PostgreSQL) 12\n" +"Project-Id-Version: pg_test_timing (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2019-05-22 17:56+0800\n" -"PO-Revision-Date: 2019-05-31 18:50+0800\n" -"Last-Translator: Jie Zhang \n" -"Language-Team: Chinese (Simplified) \n" +"POT-Creation-Date: 2021-06-09 21:17+0000\n" +"PO-Revision-Date: 2021-06-10 10:50+0800\n" +"Last-Translator: Jie Zhang \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: pg_test_timing.c:55 +#: pg_test_timing.c:59 #, c-format msgid "Usage: %s [-d DURATION]\n" msgstr "用法: %s [-d 持续时间]\n" -#: pg_test_timing.c:75 pg_test_timing.c:87 pg_test_timing.c:104 +#: pg_test_timing.c:81 +msgid "%s: invalid argument for option %s\n" +msgstr "%s: 选项%s的参数无效\n" + +#: pg_test_timing.c:83 pg_test_timing.c:97 pg_test_timing.c:109 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "请用 \"%s --help\" 获取更多的信息.\n" -#: pg_test_timing.c:85 +#: pg_test_timing.c:90 +msgid "%s: %s must be in range %u..%u\n" +msgstr "%s: %s必须位于%u..%u的范围内\n" + +#: pg_test_timing.c:107 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: 命令行参数太多 (第一个是 \"%s\")\n" -#: pg_test_timing.c:94 -#, c-format -msgid "Testing timing overhead for %d second.\n" -msgid_plural "Testing timing overhead for %d seconds.\n" -msgstr[0] "测试%d秒的计时开销.\n" -msgstr[1] "测试%d秒的计时开销.\n" +#: pg_test_timing.c:115 +msgid "Testing timing overhead for %u second.\n" +msgid_plural "Testing timing overhead for %u seconds.\n" +msgstr[0] "测试%u秒的计时开销.\n" +msgstr[1] "测试%u秒的计时开销.\n" -#: pg_test_timing.c:102 -#, c-format -msgid "%s: duration must be a positive integer (duration is \"%d\")\n" -msgstr "%s: 持续时间必须是正整数(持续时间是 \"%d\")\n" - -#: pg_test_timing.c:140 +#: pg_test_timing.c:151 #, c-format msgid "Detected clock going backwards in time.\n" msgstr "检测到时钟时间倒转.\n" -#: pg_test_timing.c:141 +#: pg_test_timing.c:152 #, c-format msgid "Time warp: %d ms\n" msgstr "时间错位: %d 毫秒\n" -#: pg_test_timing.c:164 +#: pg_test_timing.c:175 #, c-format msgid "Per loop time including overhead: %0.2f ns\n" msgstr "每次循环的平均开销: %0.2f 纳秒\n" -#: pg_test_timing.c:175 +#: pg_test_timing.c:186 msgid "< us" msgstr "< 微秒" -#: pg_test_timing.c:176 +#: pg_test_timing.c:187 #, no-c-format msgid "% of total" msgstr "总计的 %" -#: pg_test_timing.c:177 +#: pg_test_timing.c:188 msgid "count" msgstr "计数" -#: pg_test_timing.c:186 +#: pg_test_timing.c:197 #, c-format msgid "Histogram of timing durations:\n" msgstr "持续时间的柱状图:\n" diff --git a/src/bin/pg_upgrade/po/es.po b/src/bin/pg_upgrade/po/es.po index 95a8c81bf6b74..8525e77810f02 100644 --- a/src/bin/pg_upgrade/po/es.po +++ b/src/bin/pg_upgrade/po/es.po @@ -4,19 +4,21 @@ # # This file is distributed under the same license as the PostgreSQL package. # Álvaro Herrera , 2017. +# Carlos Chapi , 2021. # msgid "" msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2021-05-14 19:47+0000\n" -"PO-Revision-Date: 2020-09-18 18:34-0300\n" -"Last-Translator: Álvaro Herrera \n" +"PO-Revision-Date: 2021-05-24 16:35-0500\n" +"Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.3\n" #: check.c:70 #, c-format @@ -57,21 +59,16 @@ msgstr "" "en el clúster nuevo antes de continuar.\n" #: check.c:262 -#, fuzzy, c-format -#| msgid "" -#| "Optimizer statistics are not transferred by pg_upgrade so,\n" -#| "once you start the new server, consider running:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade.\n" "Once you start the new server, consider running:\n" " %s/vacuumdb %s--all --analyze-in-stages\n" "\n" msgstr "" -"Las estadísticas para el optimizador no son transferidas por pg_upgrade,\n" -"de manera que una vez que inicie el servidor nuevo considere ejecutar:\n" -" %s\n" +"Las estadísticas para el optimizador no son transferidas por pg_upgrade.\n" +"Una vez que inicie el servidor nuevo, considere ejecutar:\n" +" %s/vacuumdb %s--all --analyze-in-stages\n" "\n" #: check.c:268 @@ -161,16 +158,14 @@ msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "La base de datos «%s» del clúster nuevo no está vacía: se encontró la relación «%s.%s»\n" #: check.c:492 -#, fuzzy, c-format -#| msgid "Checking cluster versions" +#, c-format msgid "Checking for new cluster tablespace directories" -msgstr "Verificando las versiones de los clústers" +msgstr "Verificando los directorios de tablespaces para el nuevo clúster" #: check.c:503 -#, fuzzy, c-format -#| msgid "could not stat tablespace directory \"%s\": %s\n" +#, c-format msgid "new cluster tablespace directory already exists: \"%s\"\n" -msgstr "no se pudo hace stat al directorio de tablespace «%s»: %s\n" +msgstr "directorio de tablespace para el nuevo clúster ya existe: «%s»\n" #: check.c:536 #, c-format @@ -292,20 +287,12 @@ msgstr "" "\n" #: check.c:883 -#, fuzzy, c-format -#| msgid "reading user-defined operators" +#, c-format msgid "Checking for user-defined postfix operators" -msgstr "leyendo los operadores definidos por el usuario" +msgstr "Verificando operadores postfix definidos por el usuario" #: check.c:961 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains tables declared WITH OIDS, which is not\n" -#| "supported anymore. Consider removing the oid column using\n" -#| " ALTER TABLE ... SET WITHOUT OIDS;\n" -#| "A list of tables with the problem is in the file:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Your installation contains user-defined postfix operators, which are not\n" "supported anymore. Consider dropping the postfix operators and replacing\n" @@ -314,10 +301,10 @@ msgid "" " %s\n" "\n" msgstr "" -"Su instalación contiene tablas declaradas WITH OIDS, que ya no está\n" -"soportado. Considere eliminar la columna oid usando\n" -" ALTER TABLE ... SET WITHOUT OIDS;\n" -"Una lista de tablas con este problema aparece en el archivo:\n" +"Su instalación contiene operadores postfix definidos por el usuario, los\n" +"cuales ya no están soportados. Considere eliminar los operadores postfix\n" +"y reemplazarlos con operadores de prefijo o llamadas a funciones.\n" +"Una lista de operadores postfix definidos por el usuario aparece en el archivo:\n" " %s\n" "\n" @@ -344,20 +331,12 @@ msgstr "" "\n" #: check.c:1065 -#, fuzzy, c-format -#| msgid "Checking for reg* data types in user tables" +#, c-format msgid "Checking for system-defined composite types in user tables" -msgstr "Verificando tipos de datos reg* en datos de usuario" +msgstr "Verificando tipos compuestos definidos por el sistema en tablas de usuario" #: check.c:1094 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains the \"unknown\" data type in user tables. This\n" -#| "data type is no longer allowed in tables, so this cluster cannot currently\n" -#| "be upgraded. You can remove the problem tables and restart the upgrade.\n" -#| "A list of the problem columns is in the file:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Your installation contains system-defined composite type(s) in user tables.\n" "These type OIDs are not stable across PostgreSQL versions,\n" @@ -367,10 +346,11 @@ msgid "" " %s\n" "\n" msgstr "" -"Su instalación contiene el tipo «unknown» en tablas de usuario. Este tipo\n" -"ya no es permitido en tablas, por lo que este clúster no puede ser actualizado.\n" -"Puede eliminar las tablas y reiniciar la actualización.\n" -"Un listado de columnas problemáticas está en el archivo:\n" +"Su instalación contiene uno o varios tipos compuestos definidos por el sistema en\n" +"tablas de usuario. Los OIDs de estos tipos no son estables entre diferentes\n" +"versiones de PostgreSQL, por lo que este clúster no puede ser actualizado.\n" +"Puede eliminar las columnas problemáticas y reiniciar la actualización.\n" +"Un listado de las columnas problemáticas está en el archivo:\n" " %s\n" "\n" @@ -380,15 +360,7 @@ msgid "Checking for reg* data types in user tables" msgstr "Verificando tipos de datos reg* en datos de usuario" #: check.c:1153 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains one of the reg* data types in user tables.\n" -#| "These data types reference system OIDs that are not preserved by\n" -#| "pg_upgrade, so this cluster cannot currently be upgraded. You can\n" -#| "remove the problem tables and restart the upgrade. A list of the\n" -#| "problem columns is in the file:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" "These data types reference system OIDs that are not preserved by\n" @@ -401,8 +373,8 @@ msgstr "" "Su instalación contiene uno de los tipos reg* en tablas de usuario. Estos tipos\n" "de dato hacen referencia a OIDs de sistema que no son preservados por pg_upgrade,\n" "por lo que este clúster no puede ser actualizado.\n" -"Puede eliminar las tablas y reiniciar la actualización.\n" -"Un listado de columnas problemáticas está en el archivo:\n" +"Puede eliminar las columnas problemáticas y reiniciar la actualización.\n" +"Un listado de las columnas problemáticas está en el archivo:\n" " %s\n" "\n" @@ -412,15 +384,7 @@ msgid "Checking for incompatible \"jsonb\" data type" msgstr "Verificando datos de usuario en tipo «jsonb» incompatible" #: check.c:1182 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains the \"jsonb\" data type in user tables.\n" -#| "The internal format of \"jsonb\" changed during 9.4 beta so this\n" -#| "cluster cannot currently be upgraded. You can remove the problem\n" -#| "tables and restart the upgrade. A list of the problem columns is\n" -#| "in the file:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" "The internal format of \"jsonb\" changed during 9.4 beta so this\n" @@ -430,11 +394,11 @@ msgid "" " %s\n" "\n" msgstr "" -"Su instalación contiene el tipo «jsonb» en tablas de usuario. Este tipo\n" -"El formato interno de «jsonb» cambió durante 9.4 beta, por lo que este clúster\n" -"no puede ser actualizado.\n" -"Puede eliminar las tablas y reiniciar la actualización.\n" -"Un listado de columnas problemáticas está en el archivo:\n" +"Su instalación contiene el tipo «jsonb» en tablas de usuario.\n" +"El formato interno de «jsonb» cambió durante 9.4 beta,\n" +"por lo que este clúster no puede ser actualizado.\n" +"Puede eliminar las columnas problemáticas y reiniciar la actualización.\n" +"Un listado de las columnas problemáticas está en el archivo:\n" " %s\n" "\n" @@ -454,21 +418,12 @@ msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "El clúster de destino contiene roles que empiezan con «pg_»\n" #: check.c:1237 -#, fuzzy, c-format -#| msgid "reading user-defined conversions" +#, c-format msgid "Checking for user-defined encoding conversions" -msgstr "leyendo las conversiones definidas por el usuario" +msgstr "Verificando conversiones de codificación definidas por el usuario" #: check.c:1300 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains the \"jsonb\" data type in user tables.\n" -#| "The internal format of \"jsonb\" changed during 9.4 beta so this\n" -#| "cluster cannot currently be upgraded. You can remove the problem\n" -#| "tables and restart the upgrade. A list of the problem columns is\n" -#| "in the file:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Your installation contains user-defined encoding conversions.\n" "The conversion function parameters changed in PostgreSQL version 14\n" @@ -478,11 +433,11 @@ msgid "" " %s\n" "\n" msgstr "" -"Su instalación contiene el tipo «jsonb» en tablas de usuario. Este tipo\n" -"El formato interno de «jsonb» cambió durante 9.4 beta, por lo que este clúster\n" -"no puede ser actualizado.\n" -"Puede eliminar las tablas y reiniciar la actualización.\n" -"Un listado de columnas problemáticas está en el archivo:\n" +"Su instalación contiene conversiones de codificación definidas por el usuario.\n" +"Los parámetros de la función de conversión cambiaron en PostgreSQL 14\n" +"por lo que este clúster no puede ser actualizado. Puede eliminar\n" +"las conversiones de codificación en el clúster antiguo y reiniciar la actualización.\n" +"Un listado de las conversiones de codificación definidas por el usuario está en el archivo:\n" " %s\n" "\n" @@ -867,16 +822,14 @@ msgid "check for \"%s\" failed: cannot execute (permission denied)\n" msgstr "La comprobación de «%s» falló: no se puede ejecutar (permiso denegado)\n" #: exec.c:439 -#, fuzzy, c-format -#| msgid "check for \"%s\" failed: cannot execute (permission denied)\n" +#, c-format msgid "check for \"%s\" failed: cannot execute\n" -msgstr "La comprobación de «%s» falló: no se puede ejecutar (permiso denegado)\n" +msgstr "La comprobación de «%s» falló: no se puede ejecutar\n" #: exec.c:449 -#, fuzzy, c-format -#| msgid "check for \"%s\" failed: cannot execute (permission denied)\n" +#, c-format msgid "check for \"%s\" failed: incorrect version: found \"%s\", expected \"%s\"\n" -msgstr "La comprobación de «%s» falló: no se puede ejecutar (permiso denegado)\n" +msgstr "La comprobación de «%s» falló: versión incorrecta: se encontró «%s», se esperaba «%s»\n" #: file.c:43 file.c:61 #, c-format @@ -1448,10 +1401,9 @@ msgid "could not create worker thread: %s\n" msgstr "no se pudo crear el thread: %s\n" #: parallel.c:300 -#, fuzzy, c-format -#| msgid "%s failed: %s" +#, c-format msgid "%s() failed: %s\n" -msgstr "%s falló: %s" +msgstr "%s() falló: %s\n" #: parallel.c:304 #, c-format @@ -1665,12 +1617,13 @@ msgid "could not parse version file \"%s\"\n" msgstr "no se pudo interpretar el archivo de versión «%s»\n" #: server.c:298 -#, fuzzy, c-format -#| msgid "%s" +#, c-format msgid "" "\n" "%s" -msgstr "%s" +msgstr "" +"\n" +"%s" #: server.c:302 #, c-format @@ -1801,15 +1754,7 @@ msgid "Checking for incompatible \"line\" data type" msgstr "Verificando datos de usuario de tipo «line» incompatible" #: version.c:279 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains the \"line\" data type in user tables. This\n" -#| "data type changed its internal and input/output format between your old\n" -#| "and new clusters so this cluster cannot currently be upgraded. You can\n" -#| "remove the problem tables and restart the upgrade. A list of the problem\n" -#| "columns is in the file:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Your installation contains the \"line\" data type in user tables.\n" "This data type changed its internal and input/output format\n" @@ -1823,7 +1768,7 @@ msgstr "" "Su instalación contiene el tipo de dato «line» en tablas de usuario. Este\n" "tipo de dato cambió su formato interno y de entrada/salida entre las\n" "versiones de sus clústers antiguo y nuevo, por lo que este clúster no puede\n" -"actualmente ser actualizado. Puede eliminar las tablas problemáticas y\n" +"actualmente ser actualizado. Puede eliminar las columnas problemáticas y\n" "reiniciar la actualización. Un listado de las columnas problemáticas está\n" "en el archivo:\n" " %s\n" @@ -1835,14 +1780,7 @@ msgid "Checking for invalid \"unknown\" user columns" msgstr "Verificando columnas de usuario del tipo no válido «unknown»" #: version.c:317 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains the \"unknown\" data type in user tables. This\n" -#| "data type is no longer allowed in tables, so this cluster cannot currently\n" -#| "be upgraded. You can remove the problem tables and restart the upgrade.\n" -#| "A list of the problem columns is in the file:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Your installation contains the \"unknown\" data type in user tables.\n" "This data type is no longer allowed in tables, so this\n" @@ -1852,10 +1790,11 @@ msgid "" " %s\n" "\n" msgstr "" -"Su instalación contiene el tipo «unknown» en tablas de usuario. Este tipo\n" -"ya no es permitido en tablas, por lo que este clúster no puede ser actualizado.\n" -"Puede eliminar las tablas y reiniciar la actualización.\n" -"Un listado de columnas problemáticas está en el archivo:\n" +"Su instalación contiene el tipo «unknown» en tablas de usuario.\n" +"Este tipo ya no es permitido en tablas,\n" +"por lo que este clúster no puede ser actualizado. Puede\n" +"eliminar las columnas problemáticas y reiniciar la actualización.\n" +"Un listado de las columnas problemáticas está en el archivo:\n" " %s\n" "\n" @@ -1908,15 +1847,7 @@ msgid "Checking for invalid \"sql_identifier\" user columns" msgstr "Verificando columnas de usuario del tipo «sql_identifier»" #: version.c:461 -#, fuzzy, c-format -#| msgid "" -#| "Your installation contains the \"sql_identifier\" data type in user tables\n" -#| "and/or indexes. The on-disk format for this data type has changed, so this\n" -#| "cluster cannot currently be upgraded. You can remove the problem tables or\n" -#| "change the data type to \"name\" and restart the upgrade.\n" -#| "A list of the problem columns is in the file:\n" -#| " %s\n" -#| "\n" +#, c-format msgid "" "Your installation contains the \"sql_identifier\" data type in user tables.\n" "The on-disk format for this data type has changed, so this\n" @@ -1926,12 +1857,11 @@ msgid "" " %s\n" "\n" msgstr "" -"Su instalación contiene el tipo «sql_identifier» en tablas de usuario y/o índices.\n" -"Este tipo ya no es permitido en tablas, por lo que este clúster no puede ser\n" -"actualizado.\n" -"Puede eliminar las tablas o cambiar el tipo a «name» y reiniciar la\n" -"actualización.\n" -"Un listado de columnas problemáticas está en el archivo:\n" +"Su instalación contiene el tipo de dato «sql_identifier» en tablas de usuario.\n" +"El formato en disco para este tipo de dato ha cambiado, por lo que\n" +"este clúster no puede ser actualizado.\n" +"Puede eliminar las columnas problemáticas y reiniciar la actualización\n" +"Un listado de las columnas problemáticas está en el archivo:\n" " %s\n" "\n" diff --git a/src/bin/pg_verifybackup/nls.mk b/src/bin/pg_verifybackup/nls.mk index 8dd74d30f07b5..81b96356da6a8 100644 --- a/src/bin/pg_verifybackup/nls.mk +++ b/src/bin/pg_verifybackup/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_verifybackup/nls.mk CATALOG_NAME = pg_verifybackup -AVAIL_LANGUAGES = de es fr ja ko ru sv uk zh_CN +AVAIL_LANGUAGES = de el es fr ja ko ru sv uk zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \ parse_manifest.c \ pg_verifybackup.c \ diff --git a/src/bin/pg_verifybackup/po/el.po b/src/bin/pg_verifybackup/po/el.po new file mode 100644 index 0000000000000..ce869d591d23c --- /dev/null +++ b/src/bin/pg_verifybackup/po/el.po @@ -0,0 +1,503 @@ +# Greek message translation file for pg_verifybackup +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_verifybackup (PostgreSQL) package. +# Georgios Kokolatos , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_verifybackup (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-05-31 23:45+0000\n" +"PO-Revision-Date: 2021-06-04 09:16+0200\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" +"X-Generator: Poedit 2.4.3\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "κρίσιμο: " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "σφάλμα: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "προειδοποίηση: " + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#, c-format +msgid "out of memory\n" +msgstr "έλλειψη μνήμης\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "δεν ήταν δυνατή η αντιγραφή δείκτη null (εσωτερικό σφάλμα)\n" + +#: ../../common/jsonapi.c:1066 +#, c-format +msgid "Escape sequence \"\\%s\" is invalid." +msgstr "Η ακολουθία διαφυγής \"\\%s\" δεν είναι έγκυρη." + +#: ../../common/jsonapi.c:1069 +#, c-format +msgid "Character with value 0x%02x must be escaped." +msgstr "Ο χαρακτήρας με τιμή 0x%02x πρέπει να διαφύγει." + +#: ../../common/jsonapi.c:1072 +#, c-format +msgid "Expected end of input, but found \"%s\"." +msgstr "Ανέμενε τέλος εισόδου, αλλά βρήκε “%s”." + +#: ../../common/jsonapi.c:1075 +#, c-format +msgid "Expected array element or \"]\", but found \"%s\"." +msgstr "Ανέμενε στοιχείο συστυχίας ή \"]\", αλλά βρέθηκε \"%s\"." + +#: ../../common/jsonapi.c:1078 +#, c-format +msgid "Expected \",\" or \"]\", but found \"%s\"." +msgstr "Ανέμενε “,” ή “]”, αλλά βρήκε “%s”." + +#: ../../common/jsonapi.c:1081 +#, c-format +msgid "Expected \":\", but found \"%s\"." +msgstr "Ανέμενε \":\", αλλά βρήκε \"%s\"." + +#: ../../common/jsonapi.c:1084 +#, c-format +msgid "Expected JSON value, but found \"%s\"." +msgstr "Ανέμενε τιμή JSON, αλλά βρήκε \"%s\"." + +#: ../../common/jsonapi.c:1087 +msgid "The input string ended unexpectedly." +msgstr "Η συμβολοσειρά εισόδου τερματίστηκε αναπάντεχα." + +#: ../../common/jsonapi.c:1089 +#, c-format +msgid "Expected string or \"}\", but found \"%s\"." +msgstr "Ανέμενε συμβολοσειρά ή “}”, αλλά βρήκε “%s”." + +#: ../../common/jsonapi.c:1092 +#, c-format +msgid "Expected \",\" or \"}\", but found \"%s\"." +msgstr "Ανέμενε “,” ή “}”, αλλά βρήκε “%s”." + +#: ../../common/jsonapi.c:1095 +#, c-format +msgid "Expected string, but found \"%s\"." +msgstr "Ανέμενε συμβολοσειρά, αλλά βρήκε “%s”." + +#: ../../common/jsonapi.c:1098 +#, c-format +msgid "Token \"%s\" is invalid." +msgstr "Το διακριτικό \"%s\" δεν είναι έγκυρο." + +#: ../../common/jsonapi.c:1101 +msgid "\\u0000 cannot be converted to text." +msgstr "Δεν είναι δυνατή η μετατροπή του \\u0000 σε κείμενο." + +#: ../../common/jsonapi.c:1103 +msgid "\"\\u\" must be followed by four hexadecimal digits." +msgstr "Το \"\\u\" πρέπει να ακολουθείται από τέσσερα δεκαεξαδικά ψηφία." + +#: ../../common/jsonapi.c:1106 +msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." +msgstr "Δεν μπορούν να χρησιμοποιηθούν τιμές διαφυγής Unicode για τιμές σημείου κώδικα άνω του 007F όταν η κωδικοποίηση δεν είναι UTF8." + +#: ../../common/jsonapi.c:1108 +msgid "Unicode high surrogate must not follow a high surrogate." +msgstr "Υψηλό διακριτικό Unicode δεν πρέπει να ακολουθεί υψηλό διακριτικό." + +#: ../../common/jsonapi.c:1110 +msgid "Unicode low surrogate must follow a high surrogate." +msgstr "Χαμηλό διακριτικό Unicode πρέπει να ακολουθεί υψηλό διακριτικό." + +#: parse_manifest.c:152 +msgid "manifest ended unexpectedly" +msgstr "η διακήρυξη έληξε απροσδόκητα" + +#: parse_manifest.c:191 +msgid "unexpected object start" +msgstr "μη αναμενόμενη αρχή αντικειμένου" + +#: parse_manifest.c:224 +msgid "unexpected object end" +msgstr "μη αναμενόμενο τέλος αντικειμένου" + +#: parse_manifest.c:251 +msgid "unexpected array start" +msgstr "μη αναμενόμενη αρχή συστοιχίας" + +#: parse_manifest.c:274 +msgid "unexpected array end" +msgstr "μη αναμενόμενο τέλος συστοιχίας" + +#: parse_manifest.c:299 +msgid "expected version indicator" +msgstr "ανέμενε ένδειξη έκδοσης" + +#: parse_manifest.c:328 +msgid "unrecognized top-level field" +msgstr "μη αναγνωρίσιμο πεδίο ανώτατου επιπέδου" + +#: parse_manifest.c:347 +msgid "unexpected file field" +msgstr "μη αναμενόμενο πεδίο αρχείου" + +#: parse_manifest.c:361 +msgid "unexpected WAL range field" +msgstr "μη αναμενόμενο πεδίο περιοχής WAL" + +#: parse_manifest.c:367 +msgid "unexpected object field" +msgstr "μη αναμενόμενο πεδίο αντικειμένου" + +#: parse_manifest.c:397 +msgid "unexpected manifest version" +msgstr "μη αναμενόμενη έκδοση διακήρυξης" + +#: parse_manifest.c:448 +msgid "unexpected scalar" +msgstr "μη αναμενόμενο scalar" + +#: parse_manifest.c:472 +msgid "missing path name" +msgstr "λείπει όνομα διαδρομής" + +#: parse_manifest.c:475 +msgid "both path name and encoded path name" +msgstr "και όνομα διαδρομής και κωδικοποιημένο όνομα διαδρομής" + +#: parse_manifest.c:477 +msgid "missing size" +msgstr "λείπει το μέγεθος" + +#: parse_manifest.c:480 +msgid "checksum without algorithm" +msgstr "άθροισμα ελέγχου χωρίς αλγόριθμο" + +#: parse_manifest.c:494 +msgid "could not decode file name" +msgstr "δεν ήταν δυνατή η αποκωδικοποίηση του ονόματος αρχείου" + +#: parse_manifest.c:504 +msgid "file size is not an integer" +msgstr "το μέγεθος αρχείου δεν είναι ακέραιος" + +#: parse_manifest.c:510 +#, c-format +msgid "unrecognized checksum algorithm: \"%s\"" +msgstr "μη αναγνωρίσιμος αλγόριθμος αθροίσματος ελέγχου: \"%s\"" + +#: parse_manifest.c:529 +#, c-format +msgid "invalid checksum for file \"%s\": \"%s\"" +msgstr "μη έγκυρο άθροισμα ελέγχου για το αρχείο \"%s\": \"%s\"" + +#: parse_manifest.c:572 +msgid "missing timeline" +msgstr "λείπει η χρονογραμμή" + +#: parse_manifest.c:574 +msgid "missing start LSN" +msgstr "λείπει αρχικό LSN" + +#: parse_manifest.c:576 +msgid "missing end LSN" +msgstr "λείπει τελικό LSN" + +#: parse_manifest.c:582 +msgid "timeline is not an integer" +msgstr "η χρονογραμμή δεν είναι ακέραιος" + +#: parse_manifest.c:585 +msgid "could not parse start LSN" +msgstr "δεν ήταν δυνατή η ανάλυση του αρχικού LSN" + +#: parse_manifest.c:588 +msgid "could not parse end LSN" +msgstr "δεν ήταν δυνατή η ανάλυση του τελικού LSN" + +#: parse_manifest.c:649 +msgid "expected at least 2 lines" +msgstr "αναμένονταν τουλάχιστον 2 γραμμές" + +#: parse_manifest.c:652 +msgid "last line not newline-terminated" +msgstr "η τελευταία γραμμή δεν τερματίστηκε με newline" + +#: parse_manifest.c:657 +#, c-format +msgid "out of memory" +msgstr "έλλειψη μνήμης" + +#: parse_manifest.c:659 +#, c-format +msgid "could not initialize checksum of manifest" +msgstr "δεν ήταν δυνατή η αρχικοποίηση του αθροίσματος ελέγχου της διακήρυξης" + +#: parse_manifest.c:661 +#, c-format +msgid "could not update checksum of manifest" +msgstr "δεν ήταν δυνατή η ενημέρωση του αθροίσματος ελέγχου της διακήρυξης" + +#: parse_manifest.c:664 +#, c-format +msgid "could not finalize checksum of manifest" +msgstr "δεν ήταν δυνατή η ολοκλήρωση του αθροίσματος ελέγχου της διακήρυξης" + +#: parse_manifest.c:668 +#, c-format +msgid "manifest has no checksum" +msgstr "η διακήρυξη δεν έχει άθροισμα ελέγχου" + +#: parse_manifest.c:672 +#, c-format +msgid "invalid manifest checksum: \"%s\"" +msgstr "μη έγκυρο άθροισμα ελέγχου διακήρυξης: \"%s\"" + +#: parse_manifest.c:676 +#, c-format +msgid "manifest checksum mismatch" +msgstr "αναντιστοιχία ελέγχου αθροίσματος διακήρυξης" + +#: parse_manifest.c:691 +#, c-format +msgid "could not parse backup manifest: %s" +msgstr "δεν ήταν δυνατή η ανάλυση του αντιγράφου ασφαλείας της διακήρυξης: %s" + +#: pg_verifybackup.c:255 pg_verifybackup.c:265 pg_verifybackup.c:277 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" + +#: pg_verifybackup.c:264 +#, c-format +msgid "no backup directory specified" +msgstr "δεν ορίστηκε κατάλογος αντιγράφου ασφαλείας" + +#: pg_verifybackup.c:275 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (ο πρώτη είναι η “%s”)" + +#: pg_verifybackup.c:298 +#, c-format +msgid "" +"The program \"%s\" is needed by %s but was not found in the\n" +"same directory as \"%s\".\n" +"Check your installation." +msgstr "" +"Το πρόγραμμα \"%s\" απαιτείται από %s αλλά δεν βρέθηκε στο\n" +"ίδιος κατάλογος με το \"%s\".\n" +"Ελέγξτε την εγκατάστασή σας." + +#: pg_verifybackup.c:303 +#, c-format +msgid "" +"The program \"%s\" was found by \"%s\"\n" +"but was not the same version as %s.\n" +"Check your installation." +msgstr "" +"Το πρόγραμμα \"%s\" βρέθηκε από το \"%s\"\n" +"αλλά δεν ήταν η ίδια εκδοχή με %s.\n" +"Ελέγξτε την εγκατάστασή σας." + +#: pg_verifybackup.c:361 +#, c-format +msgid "backup successfully verified\n" +msgstr "το αντίγραφο ασφαλείας επαληθεύτηκε με επιτυχία\n" + +#: pg_verifybackup.c:387 pg_verifybackup.c:723 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου “%s”: %m" + +#: pg_verifybackup.c:391 +#, c-format +msgid "could not stat file \"%s\": %m" +msgstr "δεν ήταν δυνατή η εκτέλεση stat στο αρχείο “%s”: %m" + +#: pg_verifybackup.c:411 pg_verifybackup.c:752 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση του αρχείου \"%s\": %m" + +#: pg_verifybackup.c:414 +#, c-format +msgid "could not read file \"%s\": read %d of %lld" +msgstr "δεν ήταν δυνατή η ανάγνωση του αρχείου \"%s\": ανέγνωσε %d από %lld" + +#: pg_verifybackup.c:474 +#, c-format +msgid "duplicate path name in backup manifest: \"%s\"" +msgstr "διπλότυπο όνομα διαδρομής στη διακήρυξη αντιγράφου ασφαλείας: \"%s\"" + +#: pg_verifybackup.c:537 pg_verifybackup.c:544 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του καταλόγου “%s”: %m" + +#: pg_verifybackup.c:576 +#, c-format +msgid "could not close directory \"%s\": %m" +msgstr "δεν ήταν δυνατό το κλείσιμο του καταλόγου “%s”: %m" + +#: pg_verifybackup.c:596 +#, c-format +msgid "could not stat file or directory \"%s\": %m" +msgstr "δεν ήταν δυνατή η εκτέλεση stat στο αρχείο ή κατάλογο “%s”: %m" + +#: pg_verifybackup.c:619 +#, c-format +msgid "\"%s\" is not a file or directory" +msgstr "“%s” δεν είναι αρχείο ή κατάλογος" + +#: pg_verifybackup.c:629 +#, c-format +msgid "\"%s\" is present on disk but not in the manifest" +msgstr "\"%s\" βρίσκεται στο δίσκο, αλλά όχι στη διακήρυξη" + +#: pg_verifybackup.c:641 +#, c-format +msgid "\"%s\" has size %lld on disk but size %zu in the manifest" +msgstr "\"%s\" έχει μέγεθος %lld στο δίσκο, αλλά μέγεθος %zu στη διακήρυξη" + +#: pg_verifybackup.c:668 +#, c-format +msgid "\"%s\" is present in the manifest but not on disk" +msgstr "\"%s\" βρίσκεται στη διακήρυξη αλλά όχι στο δίσκο" + +#: pg_verifybackup.c:731 +#, c-format +msgid "could not initialize checksum of file \"%s\"" +msgstr "δεν ήταν δυνατή η αρχικοποίηση του αθροίσματος ελέγχου του αρχείου \"%s\"" + +#: pg_verifybackup.c:743 +#, c-format +msgid "could not update checksum of file \"%s\"" +msgstr "δεν ήταν δυνατή η ενημέρωση αθροίσματος ελέγχου του αρχείου “%s”" + +#: pg_verifybackup.c:758 +#, c-format +msgid "could not close file \"%s\": %m" +msgstr "δεν ήταν δυνατό το κλείσιμο του αρχείου “%s”: %m" + +#: pg_verifybackup.c:777 +#, c-format +msgid "file \"%s\" should contain %zu bytes, but read %zu bytes" +msgstr "το αρχείο \"%s\" έπρεπε να περιέχει %zu bytes, αλλά να αναγνώστηκαν %zu bytes" + +#: pg_verifybackup.c:787 +#, c-format +msgid "could not finalize checksum of file \"%s\"" +msgstr "δεν ήταν δυνατή η ολοκλήρωση του αθροίσματος ελέγχου του αρχείου \"%s\"" + +#: pg_verifybackup.c:795 +#, c-format +msgid "file \"%s\" has checksum of length %d, but expected %d" +msgstr "το αρχείο \"%s\" έχει άθροισμα ελέγχου μήκους %d, αλλά αναμένεται %d" + +#: pg_verifybackup.c:799 +#, c-format +msgid "checksum mismatch for file \"%s\"" +msgstr "αναντιστοιχία αθροίσματος ελέγχου για το αρχείο \"%s\"" + +#: pg_verifybackup.c:823 +#, c-format +msgid "WAL parsing failed for timeline %u" +msgstr "απέτυχε η ανάλυση WAL για την χρονογραμμή %u" + +#: pg_verifybackup.c:909 +#, c-format +msgid "" +"%s verifies a backup against the backup manifest.\n" +"\n" +msgstr "" +"%s επαληθεύει ένα αντίγραφο ασφαλείας έναντι της διακήρυξης αντιγράφων ασφαλείας.\n" +"\n" + +#: pg_verifybackup.c:910 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... BACKUPDIR\n" +"\n" +msgstr "" +"Χρήση:\n" +" %s [ΕΠΙΛΟΓΗ]… BACKUPDIR\n" +"\n" + +#: pg_verifybackup.c:911 +#, c-format +msgid "Options:\n" +msgstr "Επιλογές:\n" + +#: pg_verifybackup.c:912 +#, c-format +msgid " -e, --exit-on-error exit immediately on error\n" +msgstr " -e, —exit-on-error να εξέλθει άμεσα σε σφάλμα\n" + +#: pg_verifybackup.c:913 +#, c-format +msgid " -i, --ignore=RELATIVE_PATH ignore indicated path\n" +msgstr " -i, —ignore=RELATIVE_PATH αγνόησε την υποδεικνυόμενη διαδρομή\n" + +#: pg_verifybackup.c:914 +#, c-format +msgid " -m, --manifest-path=PATH use specified path for manifest\n" +msgstr " -m, —manifest-path=PATH χρησιμοποίησε την καθορισμένη διαδρομή για την διακήρυξη\n" + +#: pg_verifybackup.c:915 +#, c-format +msgid " -n, --no-parse-wal do not try to parse WAL files\n" +msgstr " -n, —no-parse-wal μην δοκιμάσεις να αναλύσεις αρχεία WAL\n" + +#: pg_verifybackup.c:916 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, —quiet να μην εκτυπώσεις καμία έξοδο, εκτός από σφάλματα\n" + +#: pg_verifybackup.c:917 +#, c-format +msgid " -s, --skip-checksums skip checksum verification\n" +msgstr " -s, —skip-checksums παράκαμψε την επαλήθευση αθροισμάτων ελέγχου\n" + +#: pg_verifybackup.c:918 +#, c-format +msgid " -w, --wal-directory=PATH use specified path for WAL files\n" +msgstr " -w, —wal-directory=PATH χρησιμοποίησε την καθορισμένη διαδρομή για αρχεία WAL\n" + +#: pg_verifybackup.c:919 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, —version εμφάνισε πληροφορίες έκδοσης, στη συνέχεια έξοδος\n" + +#: pg_verifybackup.c:920 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, μετά έξοδος\n" + +#: pg_verifybackup.c:921 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Υποβάλετε αναφορές σφάλματων σε <%s>.\n" + +#: pg_verifybackup.c:922 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s αρχική σελίδα: <%s>\n" diff --git a/src/bin/pg_verifybackup/po/es.po b/src/bin/pg_verifybackup/po/es.po index 98ba8d9e61bda..c2c79108a2c40 100644 --- a/src/bin/pg_verifybackup/po/es.po +++ b/src/bin/pg_verifybackup/po/es.po @@ -2,21 +2,22 @@ # Copyright (C) 2020 PostgreSQL Global Development Group # This file is distributed under the same license as the pg_verifybackup (PostgreSQL) package. # Álvaro Herrera , 2020. +# Carlos Chapi , 2021. # msgid "" msgstr "" "Project-Id-Version: pg_verifybackup (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2021-05-14 19:45+0000\n" -"PO-Revision-Date: 2020-10-16 16:01-0300\n" -"Last-Translator: Álvaro Herrera \n" +"PO-Revision-Date: 2021-05-24 16:53-0500\n" +"Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 2.4.3\n" #: ../../../src/common/logging.c:259 #, c-format @@ -148,8 +149,6 @@ msgid "expected version indicator" msgstr "se esperaba indicador de versión" #: parse_manifest.c:328 -#, fuzzy -#| msgid "unknown toplevel field" msgid "unrecognized top-level field" msgstr "campo de nivel superior no reconocido" @@ -158,10 +157,8 @@ msgid "unexpected file field" msgstr "campo de archivo inesperado" #: parse_manifest.c:361 -#, fuzzy -#| msgid "unexpected wal range field" msgid "unexpected WAL range field" -msgstr "campo de rango de wal inesperado" +msgstr "campo de rango de WAL inesperado" #: parse_manifest.c:367 msgid "unexpected object field" @@ -176,16 +173,12 @@ msgid "unexpected scalar" msgstr "escalar inesperado" #: parse_manifest.c:472 -#, fuzzy -#| msgid "missing pathname" msgid "missing path name" msgstr "ruta de archivo faltante" #: parse_manifest.c:475 -#, fuzzy -#| msgid "both pathname and encoded pathname" msgid "both path name and encoded path name" -msgstr "hay ambos ruta de archivo (pathname) y ruta codificada (encoded pathname)" +msgstr "hay ambos ruta de archivo (path name) y ruta codificada (encoded path name)" #: parse_manifest.c:477 msgid "missing size" @@ -196,8 +189,6 @@ msgid "checksum without algorithm" msgstr "suma de comprobación sin algoritmo" #: parse_manifest.c:494 -#, fuzzy -#| msgid "unable to decode filename" msgid "could not decode file name" msgstr "no se pudo decodificar el nombre del archivo" @@ -232,14 +223,10 @@ msgid "timeline is not an integer" msgstr "el timeline no es un número entero" #: parse_manifest.c:585 -#, fuzzy -#| msgid "unable to parse start LSN" msgid "could not parse start LSN" msgstr "no se pudo interpretar el LSN de inicio" #: parse_manifest.c:588 -#, fuzzy -#| msgid "unable to parse end LSN" msgid "could not parse end LSN" msgstr "no se pudo interpretar el LSN de término" @@ -257,22 +244,19 @@ msgid "out of memory" msgstr "memoria agotada" #: parse_manifest.c:659 -#, fuzzy, c-format -#| msgid "could not initialize globals" +#, c-format msgid "could not initialize checksum of manifest" -msgstr "no se pudo inicializar las globales" +msgstr "no se pudo inicializar la suma de verificación del manifiesto" #: parse_manifest.c:661 -#, fuzzy, c-format -#| msgid "could not parse backup manifest: %s" +#, c-format msgid "could not update checksum of manifest" -msgstr "no se pudo analizar el manifiesto de la copia de seguridad: %s" +msgstr "no se pudo actualizar la suma de verificación del manifiesto" #: parse_manifest.c:664 -#, fuzzy, c-format -#| msgid "could not parse backup manifest: %s" +#, c-format msgid "could not finalize checksum of manifest" -msgstr "no se pudo analizar el manifiesto de la copia de seguridad: %s" +msgstr "no se pudo finalizar la suma de verificación del manifiesto" #: parse_manifest.c:668 #, c-format @@ -352,14 +336,12 @@ msgid "could not read file \"%s\": %m" msgstr "no se pudo leer el archivo «%s»: %m" #: pg_verifybackup.c:414 -#, fuzzy, c-format -#| msgid "could not read file \"%s\": read %d of %zu" +#, c-format msgid "could not read file \"%s\": read %d of %lld" -msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" +msgstr "no se pudo leer el archivo «%s»: leídos %d de %lld" #: pg_verifybackup.c:474 -#, fuzzy, c-format -#| msgid "duplicate pathname in backup manifest: \"%s\"" +#, c-format msgid "duplicate path name in backup manifest: \"%s\"" msgstr "nombre de ruta duplicado en el manifiesto de la copia de seguridad: \"%s\"" @@ -389,10 +371,9 @@ msgid "\"%s\" is present on disk but not in the manifest" msgstr "\"%s\" está presente en el disco pero no en el manifiesto" #: pg_verifybackup.c:641 -#, fuzzy, c-format -#| msgid "\"%s\" has size %zu on disk but size %zu in the manifest" +#, c-format msgid "\"%s\" has size %lld on disk but size %zu in the manifest" -msgstr "\"%s\" tiene un tamaño %zu en el disco pero un tamaño %zu en el manifiesto" +msgstr "\"%s\" tiene un tamaño %lld en el disco pero un tamaño %zu en el manifiesto" #: pg_verifybackup.c:668 #, c-format @@ -400,16 +381,14 @@ msgid "\"%s\" is present in the manifest but not on disk" msgstr "\"%s\" está presente en el manifiesto pero no en el disco" #: pg_verifybackup.c:731 -#, fuzzy, c-format -#| msgid "could not parse contents of file \"%s\"" +#, c-format msgid "could not initialize checksum of file \"%s\"" -msgstr "no se pudo interpretar el contenido del archivo «%s»" +msgstr "no se pudo inicializar la suma de verificación para el archivo «%s»" #: pg_verifybackup.c:743 -#, fuzzy, c-format -#| msgid "could not parse contents of file \"%s\"" +#, c-format msgid "could not update checksum of file \"%s\"" -msgstr "no se pudo interpretar el contenido del archivo «%s»" +msgstr "no se pudo actualizar la suma de verificación para el archivo «%s»" #: pg_verifybackup.c:758 #, c-format @@ -422,10 +401,9 @@ msgid "file \"%s\" should contain %zu bytes, but read %zu bytes" msgstr "el archivo \"%s\" debe contener %zu bytes, pero se leyeron %zu bytes" #: pg_verifybackup.c:787 -#, fuzzy, c-format -#| msgid "could not parse contents of file \"%s\"" +#, c-format msgid "could not finalize checksum of file \"%s\"" -msgstr "no se pudo interpretar el contenido del archivo «%s»" +msgstr "no se pudo finalizar la suma de verificación para el archivo «%s»" #: pg_verifybackup.c:795 #, c-format diff --git a/src/bin/pg_waldump/nls.mk b/src/bin/pg_waldump/nls.mk index b46b5d3f8bd25..a3d5e88e4f1a8 100644 --- a/src/bin/pg_waldump/nls.mk +++ b/src/bin/pg_waldump/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_waldump/nls.mk CATALOG_NAME = pg_waldump -AVAIL_LANGUAGES = cs de es fr ja ko ru sv tr uk vi zh_CN +AVAIL_LANGUAGES = cs de el es fr ja ko ru sv tr uk vi zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) pg_waldump.c GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) fatal_error GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) fatal_error:1:c-format diff --git a/src/bin/pg_waldump/po/el.po b/src/bin/pg_waldump/po/el.po new file mode 100644 index 0000000000000..50ef93deae0ca --- /dev/null +++ b/src/bin/pg_waldump/po/el.po @@ -0,0 +1,308 @@ +# Greek message translation file for pg_waldump +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_waldump (PostgreSQL) package. +# Georgios Kokolatos , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_waldump (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-05-12 06:16+0000\n" +"PO-Revision-Date: 2021-05-17 10:40+0200\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" +"X-Generator: Poedit 2.4.3\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "κρίσιμο:" + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "σφάλμα:" + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "προειδοποίηση:" + +#: pg_waldump.c:146 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου “%s”: %m" + +#: pg_waldump.c:202 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" +msgstr[0] "η τιμή του μεγέθους τμήματος WAL πρέπει να ανήκει σε δύναμη του δύο μεταξύ 1 MB και 1 GB, αλλά η κεφαλίδα \"%s\" του αρχείου WAL καθορίζει %d byte" +msgstr[1] "η τιμή του μεγέθους τμήματος WAL πρέπει να ανήκει σε δύναμη του δύο μεταξύ 1 MB και 1 GB, αλλά η κεφαλίδα “%s” του αρχείου WAL καθορίζει %d bytes" + +#: pg_waldump.c:210 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση του αρχείου \"%s\": %m" + +#: pg_waldump.c:213 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "δεν ήταν δυνατή η ανάγνωση του αρχείου \"%s\": ανέγνωσε %d από %zu" + +#: pg_waldump.c:275 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "δεν ήταν δυνατός ο εντοπισμός του αρχείου WAL \"%s\"" + +#: pg_waldump.c:277 +#, c-format +msgid "could not find any WAL file" +msgstr "δεν ήταν δυνατή η εύρεση οποιουδήποτε αρχείου WAL" + +#: pg_waldump.c:318 +#, c-format +msgid "could not find file \"%s\": %m" +msgstr "δεν ήταν δυνατή η εύρεση του αρχείου \"%s\": %m" + +#: pg_waldump.c:367 +#, c-format +msgid "could not read from file %s, offset %u: %m" +msgstr "δεν ήταν δυνατή η ανάγνωση από αρχείο %s, μετατόπιση %u: %m" + +#: pg_waldump.c:371 +#, c-format +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "δεν ήταν δυνατή η ανάγνωση από αρχείο %s, μετατόπιση %u: ανέγνωσε %d από %zu" + +#: pg_waldump.c:724 +#, c-format +msgid "" +"%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" +"\n" +msgstr "" +"%s αποκωδικοποιεί και εμφανίζει αρχεία καταγραφής εμπρόσθιας-εγγραφής PostgreSQL για αποσφαλμάτωση.\n" +"\n" + +#: pg_waldump.c:726 +#, c-format +msgid "Usage:\n" +msgstr "Χρήση:\n" + +#: pg_waldump.c:727 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [ΕΠΙΛΟΓΗ]… [STARTSEG [ENDSEG]]\n" + +#: pg_waldump.c:728 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Επιλογές:\n" + +#: pg_waldump.c:729 +#, c-format +msgid " -b, --bkp-details output detailed information about backup blocks\n" +msgstr " -b, —bkp-details πάραγε λεπτομερείς πληροφορίες σχετικά με τα μπλοκ αντιγράφων ασφαλείας\n" + +#: pg_waldump.c:730 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr " -e, —end=RECPTR σταμάτησε την ανάγνωση στη τοποθεσία WAL RECPTR\n" + +#: pg_waldump.c:731 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr " -f, —follow εξακολούθησε την προσπάθεια μετά την επίτευξη του τέλους του WAL\n" + +#: pg_waldump.c:732 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, —limit=N αριθμός των εγγραφών για εμφάνιση\n" + +#: pg_waldump.c:733 +#, c-format +msgid "" +" -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n" +msgstr "" +" -p, —path=PATH κατάλογος στον οποίο βρίσκονται αρχεία τμήματος καταγραφής ή\n" +" ένα κατάλογο με ./pg_wal που περιέχει τέτοια αρχεία\n" +" (προεπιλογή: τρέχων κατάλογος, ./pg_wal, $PGDATA/pg_wal)\n" + +#: pg_waldump.c:736 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, —quiet να μην εκτυπωθεί καμία έξοδος, εκτός από σφάλματα\n" + +#: pg_waldump.c:737 +#, c-format +msgid "" +" -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" +" use --rmgr=list to list valid resource manager names\n" +msgstr "" +" -r, —rmgr=RMGR εμφάνισε μόνο εγγραφές που δημιουργούνται από τον διαχειριστή πόρων RMGR·\n" +" χρησιμοποίησε --rmgr=list για την παράθεση έγκυρων ονομάτων διαχειριστών πόρων\n" + +#: pg_waldump.c:739 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr " -s, —start=RECPTR άρχισε την ανάγνωση WAL από την τοποθεσία RECPTR\n" + +#: pg_waldump.c:740 +#, c-format +msgid "" +" -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr "" +" -t, —timeline=TLI χρονογραμή από την οποία να αναγνωστούν εγγραφές καταγραφής\n" +" (προεπιλογή: 1 ή η τιμή που χρησιμοποιήθηκε στο STARTSEG)\n" + +#: pg_waldump.c:742 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, —version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, έξοδος\n" + +#: pg_waldump.c:743 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr " -x, —xid=XID εμφάνισε μόνο εγγραφές με ID συναλλαγής XID\n" + +#: pg_waldump.c:744 +#, c-format +msgid "" +" -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr "" +" -z, —stats[=record] εμφάνισε στατιστικά στοιχεία αντί για εγγραφές\n" +" (προαιρετικά, εμφάνισε στατιστικά στοιχεία ανά εγγραφή)\n" + +#: pg_waldump.c:746 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, —help εμφάνισε αυτό το μήνυμα βοήθειας, και μετά έξοδος\n" + +#: pg_waldump.c:747 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Υποβάλετε αναφορές σφάλματων σε <%s>.\n" + +#: pg_waldump.c:748 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s αρχική σελίδα: <%s>\n" + +#: pg_waldump.c:825 +#, c-format +msgid "no arguments specified" +msgstr "δεν καθορίστηκαν παράμετροι" + +#: pg_waldump.c:840 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "δεν ήταν δυνατή η ανάλυση της τελικής τοποθεσίας WAL \"%s\"" + +#: pg_waldump.c:852 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "δεν ήταν δυνατή η ανάλυση του ορίου \"%s\"" + +#: pg_waldump.c:883 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "ο διαχειριστής πόρων \"%s\" δεν υπάρχει" + +#: pg_waldump.c:892 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "δεν ήταν δυνατή η ανάλυση της αρχικής τοποθεσίας WAL “%s”" + +#: pg_waldump.c:902 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "δεν ήταν δυνατή η ανάλυση της χρονογραμμής “%s”" + +#: pg_waldump.c:909 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "δεν ήταν δυνατή η ανάλυση του \"%s\" ως ID συναλλαγής" + +#: pg_waldump.c:924 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "μη αναγνωρισμένη παράμετρος για —stats: %s" + +#: pg_waldump.c:937 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (ο πρώτη είναι η “%s”)" + +#: pg_waldump.c:947 pg_waldump.c:967 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του καταλόγου “%s”: %m" + +#: pg_waldump.c:973 pg_waldump.c:1003 +#, c-format +msgid "could not open file \"%s\"" +msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου \"%s\"" + +#: pg_waldump.c:983 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "τοποθεσία εκκίνησης WAL %X/%X δεν βρίσκεται μέσα στο αρχείο \"%s\"" + +#: pg_waldump.c:1010 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "ENDSEG %s βρίσκεται πριν από STARTSEG %s" + +#: pg_waldump.c:1025 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "η τελική τοποθεσία WAL %X/%X δεν βρίσκεται μέσα στο αρχείο \"%s\"" + +#: pg_waldump.c:1037 +#, c-format +msgid "no start WAL location given" +msgstr "δεν δόθηκε καμία τοποθεσία έναρξης WAL" + +#: pg_waldump.c:1051 +#, c-format +msgid "out of memory" +msgstr "έλλειψη μνήμης" + +#: pg_waldump.c:1057 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "δεν ήταν δυνατή η εύρεση έγκυρης εγγραφής μετά %X/%X" + +#: pg_waldump.c:1067 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "πρώτη εγγραφή βρίσκεται μετά από %X/%X, σε %X/%X, παρακάμπτοντας %u byte\n" +msgstr[1] "πρώτη εγγραφή βρίσκεται μετά από %X/%X, σε %X/%X, παρακάμπτοντας %u bytes\n" + +#: pg_waldump.c:1118 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "σφάλμα στην εγγραφή WAL στο %X/%X: %s" + +#: pg_waldump.c:1127 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" diff --git a/src/bin/psql/po/el.po b/src/bin/psql/po/el.po index 2ed92f6d6bb1b..b2cac84aed492 100644 --- a/src/bin/psql/po/el.po +++ b/src/bin/psql/po/el.po @@ -6,69 +6,69 @@ msgid "" msgstr "" "Project-Id-Version: psql (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-02-25 07:44+0000\n" +"POT-Creation-Date: 2021-05-25 05:45+0000\n" "PO-Revision-Date: 2021-03-11 10:07+0100\n" +"Last-Translator: Georgios Kokolatos \n" "Language-Team: \n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.4.2\n" -"Last-Translator: Georgios Kokolatos \n" -"Language: el\n" -#: ../../../src/common/logging.c:236 +#: ../../../src/common/logging.c:259 #, c-format msgid "fatal: " msgstr "κρίσιμο:" -#: ../../../src/common/logging.c:243 +#: ../../../src/common/logging.c:266 #, c-format msgid "error: " msgstr "σφάλμα:" -#: ../../../src/common/logging.c:250 +#: ../../../src/common/logging.c:273 #, c-format msgid "warning: " msgstr "προειδοποίηση:" -#: ../../common/exec.c:137 ../../common/exec.c:254 ../../common/exec.c:300 +#: ../../common/exec.c:136 ../../common/exec.c:253 ../../common/exec.c:299 #, c-format msgid "could not identify current directory: %m" msgstr "δεν ήταν δυνατή η αναγνώριση του τρέχοντος καταλόγου: %m" -#: ../../common/exec.c:156 +#: ../../common/exec.c:155 #, c-format msgid "invalid binary \"%s\"" msgstr "μη έγκυρο δυαδικό αρχείο “%s”" -#: ../../common/exec.c:206 +#: ../../common/exec.c:205 #, c-format msgid "could not read binary \"%s\"" msgstr "δεν ήταν δυνατή η ανάγνωση του δυαδικού αρχείου “%s”" -#: ../../common/exec.c:214 +#: ../../common/exec.c:213 #, c-format msgid "could not find a \"%s\" to execute" msgstr "δεν βρέθηκε το αρχείο “%s” για να εκτελεστεί" -#: ../../common/exec.c:270 ../../common/exec.c:309 +#: ../../common/exec.c:269 ../../common/exec.c:308 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "δεν ήταν δυνατή η μετάβαση στον κατάλογο “%s”: %m" -#: ../../common/exec.c:287 +#: ../../common/exec.c:286 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "δεν ήταν δυνατή η ανάγνωση του συμβολικού συνδέσμου “%s”: %m" -#: ../../common/exec.c:410 +#: ../../common/exec.c:409 #, c-format -msgid "pclose failed: %m" -msgstr "απέτυχε η εντολή pclose: %m" +msgid "%s() failed: %m" +msgstr "%s () απέτυχε: %m" -#: ../../common/exec.c:539 ../../common/exec.c:584 ../../common/exec.c:676 -#: command.c:1255 command.c:3173 command.c:3222 command.c:3339 input.c:227 +#: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 +#: command.c:1315 command.c:3246 command.c:3295 command.c:3412 input.c:227 #: mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" @@ -90,7 +90,7 @@ msgstr "δεν ήταν δυνατή η αντιγραφή δείκτη null (ε msgid "could not look up effective user ID %ld: %s" msgstr "δεν ήταν δυνατή η αναζήτηση ενεργής ταυτότητας χρήστη %ld: %s" -#: ../../common/username.c:45 command.c:559 +#: ../../common/username.c:45 command.c:565 msgid "user does not exist" msgstr "ο χρήστης δεν υπάρχει" @@ -137,349 +137,304 @@ msgstr "Αίτηση ακύρωσης εστάλη\n" msgid "Could not send cancel request: " msgstr "Δεν ήταν δυνατή η αποστολή αίτησης ακύρωσης" -#: ../../fe_utils/print.c:350 +#: ../../fe_utils/print.c:336 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu σειρά)" msgstr[1] "(%lu σειρές)" -#: ../../fe_utils/print.c:3055 +#: ../../fe_utils/print.c:3039 #, c-format msgid "Interrupted\n" msgstr "Διακόπηκε\n" -#: ../../fe_utils/print.c:3119 +#: ../../fe_utils/print.c:3103 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" -msgstr "" -"Δεν είναι δυνατή η προσθήκη κεφαλίδας σε περιεχόμενο πίνακα: υπέρβαση του " -"πλήθους στηλών %d.\n" +msgstr "Δεν είναι δυνατή η προσθήκη κεφαλίδας σε περιεχόμενο πίνακα: υπέρβαση του πλήθους στηλών %d.\n" -#: ../../fe_utils/print.c:3159 +#: ../../fe_utils/print.c:3143 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" -msgstr "" -"Δεν είναι δυνατή η προσθήκη κελιού σε περιεχόμενο πίνακα: υπέρβαση του " -"συνολικού αριθμού κελιών %d.\n" +msgstr "Δεν είναι δυνατή η προσθήκη κελιού σε περιεχόμενο πίνακα: υπέρβαση του συνολικού αριθμού κελιών %d.\n" -#: ../../fe_utils/print.c:3414 +#: ../../fe_utils/print.c:3401 #, c-format msgid "invalid output format (internal error): %d" msgstr "μη έγκυρη μορφή εξόδου (εσωτερικό σφάλμα): %d" -#: ../../fe_utils/psqlscan.l:694 +#: ../../fe_utils/psqlscan.l:697 #, c-format msgid "skipping recursive expansion of variable \"%s\"" msgstr "Παραλείπεται η αναδρομική επέκταση της μεταβλητής “%s”" -#: command.c:224 +#: command.c:230 #, c-format msgid "invalid command \\%s" msgstr "μη έγκυρη εντολή “%s”" -#: command.c:226 +#: command.c:232 #, c-format msgid "Try \\? for help." msgstr "Δοκιμάστε \\? για βοήθεια." -#: command.c:244 +#: command.c:250 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: επιπλέον παράμετρος “%s” αγνοείται" -#: command.c:296 +#: command.c:302 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" -msgstr "" -"\\%s εντολή αγνοείται, χρησιμοποιείστε \\endif ή Ctrl-C για να εξέλθετε από " -"το παρόν μπλοκ \\if" +msgstr "\\%s εντολή αγνοείται, χρησιμοποιείστε \\endif ή Ctrl-C για να εξέλθετε από το παρόν μπλοκ \\if" -#: command.c:557 +#: command.c:563 #, c-format msgid "could not get home directory for user ID %ld: %s" -msgstr "" -"δεν ήταν δυνατή η ανάλληψη προσωπικού καταλόγου για τον χρήστη με ID %ld: %s" +msgstr "δεν ήταν δυνατή η ανάλληψη προσωπικού καταλόγου για τον χρήστη με ID %ld: %s" -#: command.c:575 +#: command.c:581 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: δεν ήταν δυνατή η μετάβαση στον κατάλογο “%s”: %m" -#: command.c:600 +#: command.c:606 #, c-format msgid "You are currently not connected to a database.\n" msgstr "Αυτή τη στιγμή δεν είστε συνδεδεμένοι σε μία βάση δεδομένων.\n" -#: command.c:613 -#, c-format -msgid "" -"You are connected to database \"%s\" as user \"%s\" on address \"%s\" at " -"port \"%s\".\n" -msgstr "" -"Είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” στην διεύθυνση " -"“%s” στη θύρα “%s”.\n" - #: command.c:616 #, c-format -msgid "" -"You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at " -"port \"%s\".\n" -msgstr "" -"Είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” μέσω του υποδεχέα " -"“%s” στη θύρα “%s”.\n" +msgid "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" +msgstr "Είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” στην διεύθυνση “%s” στη θύρα “%s”.\n" -#: command.c:622 +#: command.c:619 #, c-format -msgid "" -"You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address " -"\"%s\") at port \"%s\".\n" -msgstr "" -"Είστε συνδεδεμένοι στη βάση δεδομένων \"%s\" ως χρήστης \"%s\" στον κεντρικό " -"υπολογιστή \"%s\" (διεύθυνση \"%s\") στη θύρα \"%s\".\n" +msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" +msgstr "Είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” μέσω του υποδεχέα “%s” στη θύρα “%s”.\n" #: command.c:625 #, c-format -msgid "" -"You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port " -"\"%s\".\n" -msgstr "" -"Είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” στον κεντρικό " -"υπολογιστή “%s” στη θύρα “%s”.\n" +msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" +msgstr "Είστε συνδεδεμένοι στη βάση δεδομένων \"%s\" ως χρήστης \"%s\" στον κεντρικό υπολογιστή \"%s\" (διεύθυνση \"%s\") στη θύρα \"%s\".\n" -#: command.c:965 command.c:1061 command.c:2550 +#: command.c:628 +#, c-format +msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" +msgstr "Είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” στον κεντρικό υπολογιστή “%s” στη θύρα “%s”.\n" + +#: command.c:1012 command.c:1121 command.c:2602 #, c-format msgid "no query buffer" msgstr "μη ενδιάμεση μνήμη ερώτησης" -#: command.c:998 command.c:5171 +#: command.c:1045 command.c:5304 #, c-format msgid "invalid line number: %s" msgstr "μη έγκυρος αριθμός γραμμής “%s”" -#: command.c:1052 +#: command.c:1112 #, c-format msgid "The server (version %s) does not support editing function source." -msgstr "" -"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την επεξεργασία πηγών συναρτήσεων." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την επεξεργασία πηγών συναρτήσεων." -#: command.c:1055 +#: command.c:1115 #, c-format msgid "The server (version %s) does not support editing view definitions." -msgstr "" -"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την επεξεργασία ορισμών προβολής." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την επεξεργασία ορισμών προβολής." -#: command.c:1137 +#: command.c:1197 msgid "No changes" msgstr "Καθόλου αλλάγες" -#: command.c:1216 +#: command.c:1276 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" -msgstr "" -"%s: μη έγκυρη ονομασία κωδικοποίησης ή δεν βρέθηκε η διεργασία μετατροπής" +msgstr "%s: μη έγκυρη ονομασία κωδικοποίησης ή δεν βρέθηκε η διεργασία μετατροπής" -#: command.c:1251 command.c:1992 command.c:3169 command.c:3361 command.c:5273 -#: common.c:174 common.c:223 common.c:388 common.c:1244 common.c:1272 -#: common.c:1381 common.c:1488 common.c:1526 copy.c:488 copy.c:707 help.c:62 -#: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:299 +#: command.c:1311 command.c:2052 command.c:3242 command.c:3434 command.c:5406 +#: common.c:174 common.c:223 common.c:392 common.c:1248 common.c:1276 +#: common.c:1385 common.c:1492 common.c:1530 copy.c:488 copy.c:709 help.c:62 +#: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:298 #, c-format msgid "%s" msgstr "%s" -#: command.c:1258 +#: command.c:1318 msgid "There is no previous error." msgstr "Δεν υπάρχει προηγούμενο σφάλμα." -#: command.c:1371 +#: command.c:1431 #, c-format msgid "\\%s: missing right parenthesis" msgstr "\\%s: λείπει δεξιά παρένθεση" -#: command.c:1548 command.c:1853 command.c:1867 command.c:1884 command.c:2044 -#: command.c:2281 command.c:2517 command.c:2557 +#: command.c:1608 command.c:1913 command.c:1927 command.c:1944 command.c:2106 +#: command.c:2342 command.c:2569 command.c:2609 #, c-format msgid "\\%s: missing required argument" msgstr "\\%s: λείπει αναγκαία παράμετρος" -#: command.c:1679 +#: command.c:1739 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif: δεν δύναται να προκύψει μετά \\else" -#: command.c:1684 +#: command.c:1744 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif: δεν υπάρχει αντίστοιχο \\if" -#: command.c:1748 +#: command.c:1808 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else: δεν δύναται να προκύψει μετά \\else" -#: command.c:1753 +#: command.c:1813 #, c-format msgid "\\else: no matching \\if" msgstr "\\else: δεν υπάρχει αντίστοιχο \\if" -#: command.c:1793 +#: command.c:1853 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif: δεν υπάρχει αντίστοιχο \\if" -#: command.c:1948 +#: command.c:2008 msgid "Query buffer is empty." msgstr "Άδεια ενδιάμεση μνήμη ερώτησης." -#: command.c:1970 +#: command.c:2030 msgid "Enter new password: " msgstr "Εισάγετε νέο κωδικό πρόσβασης: " -#: command.c:1971 +#: command.c:2031 msgid "Enter it again: " msgstr "Εισάγετε ξανά: " -#: command.c:1975 +#: command.c:2035 #, c-format msgid "Passwords didn't match." msgstr "Οι κωδικοί πρόσβασης δεν είναι ίδιοι." -#: command.c:2074 +#: command.c:2135 #, c-format msgid "\\%s: could not read value for variable" msgstr "\\%s: δεν ήταν δυνατή η ανάγνωση τιμής για την μεταβλητή" -#: command.c:2177 +#: command.c:2238 msgid "Query buffer reset (cleared)." msgstr "Μηδενισμός ενδιάμεσης μνήμη ερώτησης (καθάρισμα)." -#: command.c:2199 +#: command.c:2260 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "‘Εγραψε την ιστορία στο αρχείο “%s”.\n" -#: command.c:2286 +#: command.c:2347 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" -msgstr "" -"\\%s: η ονομασία μεταβλητή περιβάλλοντος environment δεν δύναται να " -"εμπεριέχει “=“" +msgstr "\\%s: η ονομασία μεταβλητή περιβάλλοντος environment δεν δύναται να εμπεριέχει “=“" -#: command.c:2347 +#: command.c:2399 #, c-format msgid "The server (version %s) does not support showing function source." -msgstr "" -"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την εμφάνιση του κώδικα της " -"συνάρτησης." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την εμφάνιση του κώδικα της συνάρτησης." -#: command.c:2350 +#: command.c:2402 #, c-format msgid "The server (version %s) does not support showing view definitions." -msgstr "" -"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την επεξεργασία ορισμών προβολής." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την επεξεργασία ορισμών προβολής." -#: command.c:2357 +#: command.c:2409 #, c-format msgid "function name is required" msgstr "η ονομασία συνάρτησης είναι αναγκαία" -#: command.c:2359 +#: command.c:2411 #, c-format msgid "view name is required" msgstr "η ονομασία ορισμού είναι αναγκαία" -#: command.c:2489 +#: command.c:2541 msgid "Timing is on." msgstr "Η χρονομέτρηση είναι ενεργή." -#: command.c:2491 +#: command.c:2543 msgid "Timing is off." msgstr "Η χρονομέτρηση είναι ανενεργή." -#: command.c:2576 command.c:2604 command.c:3771 command.c:3774 command.c:3777 -#: command.c:3783 command.c:3785 command.c:3793 command.c:3803 command.c:3812 -#: command.c:3826 command.c:3843 command.c:3901 common.c:70 copy.c:331 +#: command.c:2628 command.c:2656 command.c:3873 command.c:3876 command.c:3879 +#: command.c:3885 command.c:3887 command.c:3913 command.c:3923 command.c:3935 +#: command.c:3949 command.c:3976 command.c:4034 common.c:70 copy.c:331 #: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s: %m" -#: command.c:2988 startup.c:236 startup.c:287 +#: command.c:3047 startup.c:237 startup.c:287 msgid "Password: " msgstr "Κωδικός πρόσβασης: " -#: command.c:2993 startup.c:284 +#: command.c:3052 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "Κωδικός πρόσβασης για τον χρήστη %s: " -#: command.c:3047 +#: command.c:3104 #, c-format -msgid "" -"All connection parameters must be supplied because no database connection " -"exists" +msgid "Do not give user, host, or port separately when using a connection string" +msgstr "" + +#: command.c:3139 +#, c-format +msgid "No database connection exists to re-use parameters from" msgstr "" -"Πρέπει να δωθούν όλες οι παρέμετροι γιατί δεν υπάρχει σύνδεση με τη βάση " -"δεδομένων" -#: command.c:3367 +#: command.c:3440 #, c-format msgid "Previous connection kept" msgstr "Κρατήθηκε η προηγούμενη σύνδεση" -#: command.c:3373 +#: command.c:3446 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:3420 +#: command.c:3502 #, c-format -msgid "" -"You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at " -"port \"%s\".\n" +msgid "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "" -"Τώρα είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” στη " -"διεύθυνση “%s” στη θύρα “%s”.\n" +"Τώρα είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” στη διεύθυνση “%s” στη θύρα “%s”.\n" "=\n" -#: command.c:3423 +#: command.c:3505 #, c-format -msgid "" -"You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" " -"at port \"%s\".\n" -msgstr "" -"Τώρα είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” μέσω του " -"υποδεχέα “%s” στη θύρα “%s”.\n" +msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" +msgstr "Τώρα είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” μέσω του υποδεχέα “%s” στη θύρα “%s”.\n" -#: command.c:3429 +#: command.c:3511 #, c-format -msgid "" -"You are now connected to database \"%s\" as user \"%s\" on host \"%s" -"\" (address \"%s\") at port \"%s\".\n" -msgstr "" -"Τώρα είστε συνδεδεμένοι στη βάση δεδομένων \"%s\" ως χρήστης \"%s\" στον " -"κεντρικό υπολογιστή \"%s\" (διεύθυνση \"%s\") στη θύρα \"%s\".\n" +msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" +msgstr "Τώρα είστε συνδεδεμένοι στη βάση δεδομένων \"%s\" ως χρήστης \"%s\" στον κεντρικό υπολογιστή \"%s\" (διεύθυνση \"%s\") στη θύρα \"%s\".\n" -#: command.c:3432 +#: command.c:3514 #, c-format -msgid "" -"You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at " -"port \"%s\".\n" -msgstr "" -"Τώρα είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” στον " -"κεντρικό υπολογιστή “%s” στη θύρα “%s”.\n" +msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" +msgstr "Τώρα είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s” στον κεντρικό υπολογιστή “%s” στη θύρα “%s”.\n" -#: command.c:3437 +#: command.c:3519 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Τώρα είστε συνδεδεμένοι στη βάση δεδομένων “%s” ως χρήστης “%s”.\n" -#: command.c:3470 +#: command.c:3559 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, διακομιστής %s)\n" -#: command.c:3478 +#: command.c:3567 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" @@ -488,309 +443,294 @@ msgstr "" "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: %s κύρια έκδοση %s, %s κύρια έκδοση διακομιστή.\n" " Ορισμένες δυνατότητες psql ενδέχεται να μην λειτουργούν.\n" -#: command.c:3517 +#: command.c:3606 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "SSL σύνδεση (πρωτόκολλο: %s, cipher: %s, bits: %s, συμπίεση: %s)\n" -#: command.c:3518 command.c:3519 command.c:3520 +#: command.c:3607 command.c:3608 command.c:3609 msgid "unknown" msgstr "άγνωστο" -#: command.c:3521 help.c:45 +#: command.c:3610 help.c:45 msgid "off" msgstr "κλειστό" -#: command.c:3521 help.c:45 +#: command.c:3610 help.c:45 msgid "on" msgstr "ανοικτό" -#: command.c:3535 +#: command.c:3624 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "GSSAPI-κρυπτογραφημένη σύνδεση\n" -#: command.c:3555 +#: command.c:3644 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" " 8-bit characters might not work correctly. See psql reference\n" " page \"Notes for Windows users\" for details.\n" msgstr "" -"ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Ο πηγαίος κώδικας της κονσόλας (%u) διαφέρει από τον πηγαίο " -"κώδικα των Windows(%u)\n" -" Χαρακτήρες 8-bit δύναται να μην λειτουργούν ορθά. Δείτε την αναφορά " -"στη σελίδα\n" +"ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Ο πηγαίος κώδικας της κονσόλας (%u) διαφέρει από τον πηγαίο κώδικα των Windows(%u)\n" +" Χαρακτήρες 8-bit δύναται να μην λειτουργούν ορθά. Δείτε την αναφορά στη σελίδα\n" " psql με τίτλο “Σημειώσεις για χρήστες Windows” για πληροφορίες.\n" -#: command.c:3659 +#: command.c:3749 #, c-format -msgid "" -"environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a " -"line number" -msgstr "" -"η μεταβλητή περιβάλλοντος PSQL_EDITOR_LINENUMBER_ARG πρέπει να έχει οριστεί " -"για να ορίσετε αριθμό σειράς" +msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number" +msgstr "η μεταβλητή περιβάλλοντος PSQL_EDITOR_LINENUMBER_ARG πρέπει να έχει οριστεί για να ορίσετε αριθμό σειράς" -#: command.c:3688 +#: command.c:3778 #, c-format msgid "could not start editor \"%s\"" msgstr "δεν μπόρεσε να εκκινήσει τον editor “%s”" -#: command.c:3690 +#: command.c:3780 #, c-format msgid "could not start /bin/sh" msgstr "δεν μπόρεσε να εκκινήσει το /bin/sh" -#: command.c:3728 +#: command.c:3830 #, c-format msgid "could not locate temporary directory: %s" msgstr "δεν ήταν δυνατός ο εντοπισμός του προσωρινού καταλόγου %s" -#: command.c:3755 +#: command.c:3857 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "δεν ήταν δυνατό το άνοιγμα του προσωρινού αρχείου “%s”: %m" -#: command.c:4060 +#: command.c:4193 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: διφορούμενης συντόμευση “%s” ταιριάζει τόσο “%s” όσο “%s”" -#: command.c:4080 +#: command.c:4213 #, c-format -msgid "" -"\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-" -"longtable, troff-ms, unaligned, wrapped" -msgstr "" -"\\pset: επιτρεπόμενες μορφές είναι aligned, asciidoc, csv, html, latex, " -"latex-longtable, troff-ms, unaligned, wrapped" +msgid "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" +msgstr "\\pset: επιτρεπόμενες μορφές είναι aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" -#: command.c:4099 +#: command.c:4232 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: επιτρεπόμενες μορφές γραμμών είναι ascii, old-ascii, unicode" -#: command.c:4114 +#: command.c:4247 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: επιτρεπόμενες μορφές Unicode border line είναι single, double" -#: command.c:4129 +#: command.c:4262 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: επιτρεπόμενες μορφές Unicode column line είναι single, double" -#: command.c:4144 +#: command.c:4277 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: επιτρεπόμενες μορφές Unicode header line είναι single, double" -#: command.c:4187 +#: command.c:4320 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsep πρέπει να είναι ένας χαρακτήρας ενός-byte" -#: command.c:4192 +#: command.c:4325 #, c-format -msgid "" -"\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage " -"return" -msgstr "" -"\\pset: csv_fieldsep δεν μπορεί να είναι διπλά εισαγωγικά, νέα γραμμή, ή " -"carriage return" +msgid "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage return" +msgstr "\\pset: csv_fieldsep δεν μπορεί να είναι διπλά εισαγωγικά, νέα γραμμή, ή carriage return" -#: command.c:4329 command.c:4517 +#: command.c:4462 command.c:4650 #, c-format msgid "\\pset: unknown option: %s" msgstr "\\pset: άγνωστη επιλογή: %s" -#: command.c:4349 +#: command.c:4482 #, c-format msgid "Border style is %d.\n" msgstr "Border style είναι %d.\n" -#: command.c:4355 +#: command.c:4488 #, c-format msgid "Target width is unset.\n" msgstr "Target width δεν είναι ορισμένο.\n" -#: command.c:4357 +#: command.c:4490 #, c-format msgid "Target width is %d.\n" msgstr "Target width είναι %d.\n" -#: command.c:4364 +#: command.c:4497 #, c-format msgid "Expanded display is on.\n" msgstr "Εκτεταμένη οθόνη είναι ενεργή.\n" -#: command.c:4366 +#: command.c:4499 #, c-format msgid "Expanded display is used automatically.\n" msgstr "Εκτεταμένη οθόνη χρησιμοποιείται αυτόματα.\n" -#: command.c:4368 +#: command.c:4501 #, c-format msgid "Expanded display is off.\n" msgstr "Εκτεταμένη οθόνη είναι ανενεργή.\n" -#: command.c:4374 +#: command.c:4507 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "Διαχωριστής πεδίων CSV είναι ο “%s”.\n" -#: command.c:4382 command.c:4390 +#: command.c:4515 command.c:4523 #, c-format msgid "Field separator is zero byte.\n" msgstr "Διαχωριστής πεδίων είναι το μηδενικό byte\n" -#: command.c:4384 +#: command.c:4517 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Διαχωριστής πεδίων είναι ο “%s”.\n" -#: command.c:4397 +#: command.c:4530 #, c-format msgid "Default footer is on.\n" msgstr "Προκαθορισμένο υποσέλιδο είναι ενεργό.\n" -#: command.c:4399 +#: command.c:4532 #, c-format msgid "Default footer is off.\n" msgstr "Προκαθορισμένο υποσέλιδο είναι ανενεργό.\n" -#: command.c:4405 +#: command.c:4538 #, c-format msgid "Output format is %s.\n" msgstr "Η μορφή εξόδου είναι %s.\n" -#: command.c:4411 +#: command.c:4544 #, c-format msgid "Line style is %s.\n" msgstr "Η μορφή γραμμής είναι %s.\n" -#: command.c:4418 +#: command.c:4551 #, c-format msgid "Null display is \"%s\".\n" msgstr "Εμφάνιση Null είναι “%s”.\n" -#: command.c:4426 +#: command.c:4559 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "Η κατά εντοπιότητα διορθωμένη μορφή αριθμητικής εξόδου είναι ενεργή.\n" -#: command.c:4428 +#: command.c:4561 #, c-format msgid "Locale-adjusted numeric output is off.\n" -msgstr "" -"Η κατά εντοπιότητα διορθωμένη μορφή αριθμητικής εξόδου είναι ανενεργή.\n" +msgstr "Η κατά εντοπιότητα διορθωμένη μορφή αριθμητικής εξόδου είναι ανενεργή.\n" -#: command.c:4435 +#: command.c:4568 #, c-format msgid "Pager is used for long output.\n" msgstr "Χρησιμοποιείται Pager για μεγάλη έξοδο.\n" -#: command.c:4437 +#: command.c:4570 #, c-format msgid "Pager is always used.\n" msgstr "Χρησιμοποιείται Pager συνέχεια.\n" -#: command.c:4439 +#: command.c:4572 #, c-format msgid "Pager usage is off.\n" msgstr "Η χρήση Pager είναι ανενεργή.\n" -#: command.c:4445 +#: command.c:4578 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" msgstr[0] "Ο Pager δεν θα χρησιμοποιηθεί για λιγότερο από %d γραμμή.\n" msgstr[1] "Ο Pager δεν θα χρησιμοποιηθεί για λιγότερες από %d γραμμές.\n" -#: command.c:4455 command.c:4465 +#: command.c:4588 command.c:4598 #, c-format msgid "Record separator is zero byte.\n" msgstr "Διαχωριστής εγγραφών είναι το μηδενικό byte\n" -#: command.c:4457 +#: command.c:4590 #, c-format msgid "Record separator is .\n" msgstr "Διαχωριστής εγγραφών είναι ο .\n" -#: command.c:4459 +#: command.c:4592 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Διαχωριστής εγγραφών είναι ο/η “%s”.\n" -#: command.c:4472 +#: command.c:4605 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Τα χαρακτηριστικά του πίνακα είναι “%s”.\n" -#: command.c:4475 +#: command.c:4608 #, c-format msgid "Table attributes unset.\n" msgstr "Χαρακτηριστικά πίνακα μη ορισμένα.\n" -#: command.c:4482 +#: command.c:4615 #, c-format msgid "Title is \"%s\".\n" msgstr "Ο τίτλος είναι “%s”.\n" -#: command.c:4484 +#: command.c:4617 #, c-format msgid "Title is unset.\n" msgstr "Ο τίτλος δεν είναι ορισμένος.\n" -#: command.c:4491 +#: command.c:4624 #, c-format msgid "Tuples only is on.\n" msgstr "Ενεργή όψη μόνο πλειάδων.\n" -#: command.c:4493 +#: command.c:4626 #, c-format msgid "Tuples only is off.\n" msgstr "Ανενεργή όψη μόνο πλειάδων.\n" -#: command.c:4499 +#: command.c:4632 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "Το στυλ περιγράμματος γραμμής Unicode είναι \"%s\".\n" -#: command.c:4505 +#: command.c:4638 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "Το στυλ περιγράμματος στήλης Unicode είναι “%s”.\n" -#: command.c:4511 +#: command.c:4644 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "Το στυλ περιγράμματος γραμμής κεφαλίδας Unicode είναι “%s”.\n" -#: command.c:4744 +#: command.c:4877 #, c-format msgid "\\!: failed" msgstr "\\!: απέτυχε" -#: command.c:4769 common.c:648 +#: command.c:4902 common.c:652 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch δεν μπορεί να χρησιμοποιηθεί με κενή ερώτηση" -#: command.c:4810 +#: command.c:4943 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (κάθε %gs)\n" -#: command.c:4813 +#: command.c:4946 #, c-format msgid "%s (every %gs)\n" msgstr "" "%s (κάθε %gs)\n" "\n" -#: command.c:4867 command.c:4874 common.c:548 common.c:555 common.c:1227 +#: command.c:5000 command.c:5007 common.c:552 common.c:559 common.c:1231 #, c-format msgid "" "********* QUERY **********\n" @@ -803,12 +743,12 @@ msgstr "" "**************************\n" "\n" -#: command.c:5066 +#: command.c:5199 #, c-format msgid "\"%s.%s\" is not a view" msgstr "“%s.%s” δεν είναι μία όψη" -#: command.c:5082 +#: command.c:5215 #, c-format msgid "could not parse reloptions array" msgstr "δεν ήταν δυνατή η ανάλυση συστυχίας reloptions" @@ -821,9 +761,7 @@ msgstr "δεν είναι δυνατή η διαφυγή χωρίς ενεργή #: common.c:200 #, c-format msgid "shell command argument contains a newline or carriage return: \"%s\"" -msgstr "" -"παράμετρος της εντολής κελύφους περιέχει μια νέα γραμμή ή μια επιστροφή " -"μεταφοράς: \"%s\"" +msgstr "παράμετρος της εντολής κελύφους περιέχει μια νέα γραμμή ή μια επιστροφή μεταφοράς: \"%s\"" #: common.c:304 #, c-format @@ -840,133 +778,119 @@ msgstr "Χάθηκε η σύνδεση στον διακομιστή. Προσπ msgid "Failed.\n" msgstr "Απέτυχε.\n" -#: common.c:326 +#: common.c:330 #, c-format msgid "Succeeded.\n" msgstr "Πέτυχε.\n" -#: common.c:378 common.c:945 common.c:1162 +#: common.c:382 common.c:949 common.c:1166 #, c-format msgid "unexpected PQresultStatus: %d" msgstr "μη αναμενόμενο PQresultStatus: %d" -#: common.c:487 +#: common.c:491 #, c-format msgid "Time: %.3f ms\n" msgstr "Χρόνος: %.3f ms\n" -#: common.c:502 +#: common.c:506 #, c-format msgid "Time: %.3f ms (%02d:%06.3f)\n" msgstr "Χρόνος: %.3f ms (%02d:%06.3f)\n" -#: common.c:511 +#: common.c:515 #, c-format msgid "Time: %.3f ms (%02d:%02d:%06.3f)\n" msgstr "Χρόνος: %.3f ms (%02d:%02d:%06.3f)\n" -#: common.c:518 +#: common.c:522 #, c-format msgid "Time: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" msgstr "Χρόνος: %.3f ms (%.0f d %02d:%02d:%06.3f)\n" -#: common.c:542 common.c:600 common.c:1198 +#: common.c:546 common.c:604 common.c:1202 #, c-format msgid "You are currently not connected to a database." msgstr "Αυτή τη στιγμή δεν είστε συνδεδεμένοι σε μία βάση δεδομένων." -#: common.c:655 +#: common.c:659 #, c-format msgid "\\watch cannot be used with COPY" msgstr "\\watch δεν μπορεί να χρησιμοποιηθεί μαζί με COPY" -#: common.c:660 +#: common.c:664 #, c-format msgid "unexpected result status for \\watch" msgstr "μη αναμενόμενη κατάσταση αποτελέσματος για \\watch" -#: common.c:690 +#: common.c:694 #, c-format -msgid "" -"Asynchronous notification \"%s\" with payload \"%s\" received from server " -"process with PID %d.\n" -msgstr "" -"Ελήφθει ασύγχρονη ειδοποίηση \"%s\" με ωφέλιμο φορτίο \"%s\" από τη " -"διαδικασία διακομιστή με %d PID.\n" +msgid "Asynchronous notification \"%s\" with payload \"%s\" received from server process with PID %d.\n" +msgstr "Ελήφθει ασύγχρονη ειδοποίηση \"%s\" με ωφέλιμο φορτίο \"%s\" από τη διαδικασία διακομιστή με %d PID.\n" -#: common.c:693 +#: common.c:697 #, c-format -msgid "" -"Asynchronous notification \"%s\" received from server process with PID %d.\n" -msgstr "" -"Ελήφθει ασύγχρονη ειδοποίηση “%s” από τη διαδικασία διακομιστή με %d PID.\n" +msgid "Asynchronous notification \"%s\" received from server process with PID %d.\n" +msgstr "Ελήφθει ασύγχρονη ειδοποίηση “%s” από τη διαδικασία διακομιστή με %d PID.\n" -#: common.c:726 common.c:743 +#: common.c:730 common.c:747 #, c-format msgid "could not print result table: %m" msgstr "δεν μπόρεσε να εκτυπώσει τον πίνακα αποτελέσματος: %m" -#: common.c:764 +#: common.c:768 #, c-format msgid "no rows returned for \\gset" msgstr "δεν επιστράφηκαν σειρές για \\gset" -#: common.c:769 +#: common.c:773 #, c-format msgid "more than one row returned for \\gset" msgstr "περισσότερες από μία γραμμές επιστράφηκαν για \\gset" -#: common.c:787 +#: common.c:791 #, c-format msgid "attempt to \\gset into specially treated variable \"%s\" ignored" -msgstr "" -"αγνοείται η προσπάθεια να τεθεί \\gset στην ειδικά διαμορφωμένη μεταβλητή " -"“%s”" +msgstr "αγνοείται η προσπάθεια να τεθεί \\gset στην ειδικά διαμορφωμένη μεταβλητή “%s”" -#: common.c:1207 +#: common.c:1211 #, c-format msgid "" -"***(Single step mode: verify " -"command)*******************************************\n" +"***(Single step mode: verify command)*******************************************\n" "%s\n" -"***(press return to proceed or enter x and return to " -"cancel)********************\n" +"***(press return to proceed or enter x and return to cancel)********************\n" msgstr "" -"***(Λειτουργία μονού βήματος: επιβεβαιώστε την " -"εντολή)*******************************************\n" +"***(Λειτουργία μονού βήματος: επιβεβαιώστε την εντολή)*******************************************\n" "%s\n" -"***(πατήστε return για να συνεχίσετε ή εισάγετε x και return για να " -"ακυρώσετε)********************\n" +"***(πατήστε return για να συνεχίσετε ή εισάγετε x και return για να ακυρώσετε)********************\n" -#: common.c:1262 +#: common.c:1266 #, c-format -msgid "" -"The server (version %s) does not support savepoints for ON_ERROR_ROLLBACK." -msgstr "" -"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει savepoints για ON_ERROR_ROLLBACK." +msgid "The server (version %s) does not support savepoints for ON_ERROR_ROLLBACK." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει savepoints για ON_ERROR_ROLLBACK." -#: common.c:1325 +#: common.c:1329 #, c-format msgid "STATEMENT: %s" msgstr "ΔΗΛΩΣΗ: %s" -#: common.c:1369 +#: common.c:1373 #, c-format msgid "unexpected transaction status (%d)" msgstr "μη αναμενόμενη κατάσταση συναλλαγής: %d" -#: common.c:1510 describe.c:2001 +#: common.c:1514 describe.c:2179 msgid "Column" msgstr "Στήλη" -#: common.c:1511 describe.c:177 describe.c:393 describe.c:411 describe.c:456 -#: describe.c:473 describe.c:962 describe.c:1126 describe.c:1711 -#: describe.c:1735 describe.c:2002 describe.c:3733 describe.c:3943 -#: describe.c:4176 describe.c:5382 +#: common.c:1515 describe.c:178 describe.c:396 describe.c:414 describe.c:459 +#: describe.c:476 describe.c:1128 describe.c:1292 describe.c:1878 +#: describe.c:1902 describe.c:2180 describe.c:4048 describe.c:4271 +#: describe.c:4496 describe.c:5794 msgid "Type" msgstr "Τύπος" -#: common.c:1560 +#: common.c:1564 #, c-format msgid "The command has no result, or the result has no columns.\n" msgstr "Η εντολή δεν έχει αποτέλεσμα, η το αποτέλεσμα δεν έχει στήλες.\n" @@ -1031,14 +955,13 @@ msgid "" "End with a backslash and a period on a line by itself, or an EOF signal." msgstr "" "Εισαγάγετε τα δεδομένα που θα αντιγραφούν ακολουθούμενα από νέα γραμμή.\n" -"Τερματίστε με μια ανάστροφη κάθετο και μια τελεία σε μια ξεχωριστή γραμμή, ή " -"ένα σήμα EOF." +"Τερματίστε με μια ανάστροφη κάθετο και μια τελεία σε μια ξεχωριστή γραμμή, ή ένα σήμα EOF." -#: copy.c:669 +#: copy.c:671 msgid "aborted because of read failure" msgstr "ματαιώθηκε λόγω σφάλματος κατά την ανάγνωση" -#: copy.c:703 +#: copy.c:705 msgid "trying to exit copy mode" msgstr "προσπαθεί να τερματίσει τη λειτουργία αντιγραφής" @@ -1050,25 +973,17 @@ msgstr "\\crosstabview: η δήλωση δεν επέστρεψε σετ απο #: crosstabview.c:129 #, c-format msgid "\\crosstabview: query must return at least three columns" -msgstr "" -"\\crosstabview: η ερώτηση πρέπει να επιστρέψει τουλάχιστον τρεις στήλες" +msgstr "\\crosstabview: η ερώτηση πρέπει να επιστρέψει τουλάχιστον τρεις στήλες" #: crosstabview.c:156 #, c-format -msgid "" -"\\crosstabview: vertical and horizontal headers must be different columns" -msgstr "" -"\\crosstabview: κάθετες και οριζόντιες κεφαλίδες πρέπει να βρίσκονται σε " -"διαφορετικές στήλες" +msgid "\\crosstabview: vertical and horizontal headers must be different columns" +msgstr "\\crosstabview: κάθετες και οριζόντιες κεφαλίδες πρέπει να βρίσκονται σε διαφορετικές στήλες" #: crosstabview.c:172 #, c-format -msgid "" -"\\crosstabview: data column must be specified when query returns more than " -"three columns" -msgstr "" -"\\crosstabview: επιβάλλεται να έχει οριστεί στήλη δεδομένων όταν η ερώτηση " -"επιστρέφει περισσότερες από τρεις στήλες" +msgid "\\crosstabview: data column must be specified when query returns more than three columns" +msgstr "\\crosstabview: επιβάλλεται να έχει οριστεί στήλη δεδομένων όταν η ερώτηση επιστρέφει περισσότερες από τρεις στήλες" #: crosstabview.c:228 #, c-format @@ -1077,12 +992,8 @@ msgstr "\\crosstabview: υπερβλήθηκε ο μέγιστος αριθμό #: crosstabview.c:397 #, c-format -msgid "" -"\\crosstabview: query result contains multiple data values for row \"%s\", " -"column \"%s\"" -msgstr "" -"\\crosstabview: το αποτέλεσμα της ερώτησης περιλαμβάνει πολλαπλές τιμές " -"δεδομένων για την σειρά “%s”, στήλη “%s”" +msgid "\\crosstabview: query result contains multiple data values for row \"%s\", column \"%s\"" +msgstr "\\crosstabview: το αποτέλεσμα της ερώτησης περιλαμβάνει πολλαπλές τιμές δεδομένων για την σειρά “%s”, στήλη “%s”" #: crosstabview.c:645 #, c-format @@ -1099,1123 +1010,1157 @@ msgstr "\\crosstabview: αμφίσημο όνομα στήλης: “%s”" msgid "\\crosstabview: column name not found: \"%s\"" msgstr "\\crosstabview: όνομα στήλης δεν βρέθηκε: “%s”" -#: describe.c:75 describe.c:373 describe.c:678 describe.c:810 describe.c:954 -#: describe.c:1115 describe.c:1187 describe.c:3722 describe.c:3930 -#: describe.c:4174 describe.c:4265 describe.c:4532 describe.c:4692 -#: describe.c:4933 describe.c:5008 describe.c:5019 describe.c:5081 -#: describe.c:5506 describe.c:5589 +#: describe.c:76 describe.c:376 describe.c:728 describe.c:924 describe.c:1120 +#: describe.c:1281 describe.c:1353 describe.c:4036 describe.c:4258 +#: describe.c:4494 describe.c:4585 describe.c:4731 describe.c:4944 +#: describe.c:5104 describe.c:5345 describe.c:5420 describe.c:5431 +#: describe.c:5493 describe.c:5918 describe.c:6001 msgid "Schema" msgstr "Σχήμα" -#: describe.c:76 describe.c:174 describe.c:242 describe.c:250 describe.c:374 -#: describe.c:679 describe.c:811 describe.c:872 describe.c:955 describe.c:1188 -#: describe.c:3723 describe.c:3931 describe.c:4097 describe.c:4175 -#: describe.c:4266 describe.c:4345 describe.c:4533 describe.c:4617 -#: describe.c:4693 describe.c:4934 describe.c:5009 describe.c:5020 -#: describe.c:5082 describe.c:5279 describe.c:5363 describe.c:5587 -#: describe.c:5759 describe.c:5999 +#: describe.c:77 describe.c:175 describe.c:243 describe.c:251 describe.c:377 +#: describe.c:729 describe.c:925 describe.c:1038 describe.c:1121 +#: describe.c:1354 describe.c:4037 describe.c:4259 describe.c:4417 +#: describe.c:4495 describe.c:4586 describe.c:4665 describe.c:4732 +#: describe.c:4945 describe.c:5029 describe.c:5105 describe.c:5346 +#: describe.c:5421 describe.c:5432 describe.c:5494 describe.c:5691 +#: describe.c:5775 describe.c:5999 describe.c:6171 describe.c:6411 msgid "Name" msgstr "Όνομα" -#: describe.c:77 describe.c:386 describe.c:404 describe.c:450 describe.c:467 +#: describe.c:78 describe.c:389 describe.c:407 describe.c:453 describe.c:470 msgid "Result data type" msgstr "Τύπος δεδομένων αποτελεσμάτων" -#: describe.c:85 describe.c:98 describe.c:102 describe.c:387 describe.c:405 -#: describe.c:451 describe.c:468 +#: describe.c:86 describe.c:99 describe.c:103 describe.c:390 describe.c:408 +#: describe.c:454 describe.c:471 msgid "Argument data types" msgstr "Τύπος δεδομένων παραμέτρων" -#: describe.c:110 describe.c:117 describe.c:185 describe.c:273 describe.c:513 -#: describe.c:727 describe.c:826 describe.c:897 describe.c:1190 describe.c:2020 -#: describe.c:3510 describe.c:3783 describe.c:3977 describe.c:4128 -#: describe.c:4202 describe.c:4275 describe.c:4358 describe.c:4441 -#: describe.c:4560 describe.c:4626 describe.c:4694 describe.c:4835 -#: describe.c:4877 describe.c:4950 describe.c:5012 describe.c:5021 -#: describe.c:5083 describe.c:5305 describe.c:5385 describe.c:5520 -#: describe.c:5590 large_obj.c:290 large_obj.c:300 +#: describe.c:111 describe.c:118 describe.c:186 describe.c:274 describe.c:523 +#: describe.c:777 describe.c:940 describe.c:1063 describe.c:1356 +#: describe.c:2200 describe.c:3823 describe.c:4108 describe.c:4305 +#: describe.c:4448 describe.c:4522 describe.c:4595 describe.c:4678 +#: describe.c:4853 describe.c:4972 describe.c:5038 describe.c:5106 +#: describe.c:5247 describe.c:5289 describe.c:5362 describe.c:5424 +#: describe.c:5433 describe.c:5495 describe.c:5717 describe.c:5797 +#: describe.c:5932 describe.c:6002 large_obj.c:290 large_obj.c:300 msgid "Description" msgstr "Περιγραφή" -#: describe.c:135 +#: describe.c:136 msgid "List of aggregate functions" msgstr "Λίστα των συγκεντρωτικών συναρτήσεων" -#: describe.c:160 +#: describe.c:161 #, c-format msgid "The server (version %s) does not support access methods." msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει μεθόδους πρόσβασης." -#: describe.c:175 +#: describe.c:176 msgid "Index" msgstr "Ευρετήριο" -#: describe.c:176 describe.c:3741 describe.c:3956 describe.c:5507 +#: describe.c:177 describe.c:4056 describe.c:4284 describe.c:5919 msgid "Table" msgstr "Πίνακας" -#: describe.c:184 describe.c:5284 +#: describe.c:185 describe.c:5696 msgid "Handler" msgstr "Διαχειριστής" -#: describe.c:203 +#: describe.c:204 msgid "List of access methods" msgstr "Λίστα μεθόδων πρόσβασης" -#: describe.c:229 +#: describe.c:230 #, c-format msgid "The server (version %s) does not support tablespaces." msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει tablespaces." -#: describe.c:243 describe.c:251 describe.c:501 describe.c:717 describe.c:873 -#: describe.c:1114 describe.c:3734 describe.c:3932 describe.c:4101 -#: describe.c:4347 describe.c:4618 describe.c:5280 describe.c:5364 -#: describe.c:5760 describe.c:5897 describe.c:6000 describe.c:6115 -#: describe.c:6194 large_obj.c:289 +#: describe.c:244 describe.c:252 describe.c:504 describe.c:767 describe.c:1039 +#: describe.c:1280 describe.c:4049 describe.c:4260 describe.c:4421 +#: describe.c:4667 describe.c:5030 describe.c:5692 describe.c:5776 +#: describe.c:6172 describe.c:6309 describe.c:6412 describe.c:6535 +#: describe.c:6613 large_obj.c:289 msgid "Owner" msgstr "Ιδιοκτήτης" -#: describe.c:244 describe.c:252 +#: describe.c:245 describe.c:253 msgid "Location" msgstr "Τοποθεσία" -#: describe.c:263 describe.c:3327 +#: describe.c:264 describe.c:3639 msgid "Options" msgstr "Επιλογές" -#: describe.c:268 describe.c:690 describe.c:889 describe.c:3775 describe.c:3779 +#: describe.c:269 describe.c:740 describe.c:1055 describe.c:4100 +#: describe.c:4104 msgid "Size" msgstr "Μέγεθος" -#: describe.c:290 +#: describe.c:291 msgid "List of tablespaces" msgstr "Λίστα tablespaces" -#: describe.c:333 +#: describe.c:336 #, c-format msgid "\\df only takes [anptwS+] as options" msgstr "\\df λαμβάνει μόνο [anptwS+] ως επιλογές" -#: describe.c:341 describe.c:352 +#: describe.c:344 describe.c:355 #, c-format msgid "\\df does not take a \"%c\" option with server version %s" msgstr "\\df δεν λαμβάνει την επιλογή “%c” στην έκδοση διακομιστή %s" #. translator: "agg" is short for "aggregate" -#: describe.c:389 describe.c:407 describe.c:453 describe.c:470 +#: describe.c:392 describe.c:410 describe.c:456 describe.c:473 msgid "agg" msgstr "agg" -#: describe.c:390 describe.c:408 +#: describe.c:393 describe.c:411 msgid "window" msgstr "window" -#: describe.c:391 +#: describe.c:394 msgid "proc" msgstr "proc" -#: describe.c:392 describe.c:410 describe.c:455 describe.c:472 +#: describe.c:395 describe.c:413 describe.c:458 describe.c:475 msgid "func" msgstr "func" -#: describe.c:409 describe.c:454 describe.c:471 describe.c:1324 +#: describe.c:412 describe.c:457 describe.c:474 describe.c:1490 msgid "trigger" msgstr "trigger" -#: describe.c:483 +#: describe.c:486 msgid "immutable" msgstr "immutable" -#: describe.c:484 +#: describe.c:487 msgid "stable" msgstr "stable" -#: describe.c:485 +#: describe.c:488 msgid "volatile" msgstr "volatile" -#: describe.c:486 +#: describe.c:489 msgid "Volatility" msgstr "Προσωρινή" -#: describe.c:494 +#: describe.c:497 msgid "restricted" msgstr "περιορισμένη" -#: describe.c:495 +#: describe.c:498 msgid "safe" msgstr "ασφαλής" -#: describe.c:496 +#: describe.c:499 msgid "unsafe" msgstr "ανασφαλής" -#: describe.c:497 +#: describe.c:500 msgid "Parallel" msgstr "Παράλληλη" -#: describe.c:502 +#: describe.c:505 msgid "definer" msgstr "definer" -#: describe.c:503 +#: describe.c:506 msgid "invoker" msgstr "invoker" -#: describe.c:504 +#: describe.c:507 msgid "Security" msgstr "Ασφάλεια" -#: describe.c:511 +#: describe.c:512 msgid "Language" msgstr "Γλώσσα" -#: describe.c:512 +#: describe.c:516 describe.c:520 msgid "Source code" msgstr "Πηγαίος κώδικας" -#: describe.c:641 +#: describe.c:691 msgid "List of functions" msgstr "Λίστα συναρτήσεων" -#: describe.c:689 +#: describe.c:739 msgid "Internal name" msgstr "Εσωτερική ονομασία" -#: describe.c:711 +#: describe.c:761 msgid "Elements" msgstr "Στοιχεία" -#: describe.c:768 +#: describe.c:822 msgid "List of data types" msgstr "Λίστα τύπων δεδομένων" -#: describe.c:812 +#: describe.c:926 msgid "Left arg type" msgstr "Τύπος αριστερής παραμέτρου" -#: describe.c:813 +#: describe.c:927 msgid "Right arg type" msgstr "Τύπος δεξιάς παραμέτρου" -#: describe.c:814 +#: describe.c:928 msgid "Result type" msgstr "Τύπος αποτελέσματος" -#: describe.c:819 describe.c:4353 describe.c:4418 describe.c:4424 -#: describe.c:4834 describe.c:6366 describe.c:6370 +#: describe.c:933 describe.c:4673 describe.c:4830 describe.c:4836 +#: describe.c:5246 describe.c:6784 describe.c:6788 msgid "Function" msgstr "Συνάρτηση" -#: describe.c:844 +#: describe.c:1010 msgid "List of operators" msgstr "Λίστα operators" -#: describe.c:874 +#: describe.c:1040 msgid "Encoding" msgstr "Κωδικοποίηση" -#: describe.c:879 describe.c:4534 +#: describe.c:1045 describe.c:4946 msgid "Collate" msgstr "Σύνθεση" -#: describe.c:880 describe.c:4535 +#: describe.c:1046 describe.c:4947 msgid "Ctype" msgstr "Ctype" -#: describe.c:893 +#: describe.c:1059 msgid "Tablespace" msgstr "Tablespace" -#: describe.c:915 +#: describe.c:1081 msgid "List of databases" msgstr "Λίστα βάσεων δεδομένων" -#: describe.c:956 describe.c:1117 describe.c:3724 +#: describe.c:1122 describe.c:1283 describe.c:4038 msgid "table" msgstr "πίνακας" -#: describe.c:957 describe.c:3725 +#: describe.c:1123 describe.c:4039 msgid "view" msgstr "όψη" -#: describe.c:958 describe.c:3726 +#: describe.c:1124 describe.c:4040 msgid "materialized view" msgstr "υλοποιημένη όψη" -#: describe.c:959 describe.c:1119 describe.c:3728 +#: describe.c:1125 describe.c:1285 describe.c:4042 msgid "sequence" msgstr "ακολουθία" -#: describe.c:960 describe.c:3730 +#: describe.c:1126 describe.c:4045 msgid "foreign table" msgstr "ξένος πίνακας" -#: describe.c:961 describe.c:3731 describe.c:3941 +#: describe.c:1127 describe.c:4046 describe.c:4269 msgid "partitioned table" msgstr "κατατμημένος πίνακας" -#: describe.c:973 +#: describe.c:1139 msgid "Column privileges" msgstr "Προνόμια στήλης" -#: describe.c:1004 describe.c:1038 +#: describe.c:1170 describe.c:1204 msgid "Policies" msgstr "Πολιτικές" -#: describe.c:1070 describe.c:6056 describe.c:6060 +#: describe.c:1236 describe.c:6476 describe.c:6480 msgid "Access privileges" msgstr "Προνόμια πρόσβασης" -#: describe.c:1101 +#: describe.c:1267 #, c-format msgid "The server (version %s) does not support altering default privileges." -msgstr "" -"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την τροποποίηση προεπιλεγμένων " -"δικαιωμάτων." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την τροποποίηση προεπιλεγμένων δικαιωμάτων." -#: describe.c:1121 +#: describe.c:1287 msgid "function" msgstr "συνάρτηση" -#: describe.c:1123 +#: describe.c:1289 msgid "type" msgstr "τύπος" -#: describe.c:1125 +#: describe.c:1291 msgid "schema" msgstr "σχήμα" -#: describe.c:1149 +#: describe.c:1315 msgid "Default access privileges" msgstr "Προεπιλεγμένες επιλογές δικαιωμάτων" -#: describe.c:1189 +#: describe.c:1355 msgid "Object" msgstr "Ατνικείμενο" -#: describe.c:1203 +#: describe.c:1369 msgid "table constraint" msgstr "περιορισμός πίνακα" -#: describe.c:1225 +#: describe.c:1391 msgid "domain constraint" msgstr "περιορισμός πεδίου" -#: describe.c:1253 +#: describe.c:1419 msgid "operator class" msgstr "κλάση χειριστή" -#: describe.c:1282 +#: describe.c:1448 msgid "operator family" msgstr "οικογένεια χειριστή" -#: describe.c:1304 +#: describe.c:1470 msgid "rule" msgstr "περιγραφή" -#: describe.c:1346 +#: describe.c:1512 msgid "Object descriptions" msgstr "Περιγραφές αντικειμένου" -#: describe.c:1402 describe.c:3847 +#: describe.c:1568 describe.c:4175 #, c-format msgid "Did not find any relation named \"%s\"." msgstr "Δεν βρέθηκε καμία σχέση με όνομα “%s”." -#: describe.c:1405 describe.c:3850 +#: describe.c:1571 describe.c:4178 #, c-format msgid "Did not find any relations." msgstr "Δεν βρέθηκαν καθόλου σχέσεις." -#: describe.c:1660 +#: describe.c:1827 #, c-format msgid "Did not find any relation with OID %s." msgstr "Δεν βρέθηκαν καθόλου σχέσεις με OID %s." -#: describe.c:1712 describe.c:1736 +#: describe.c:1879 describe.c:1903 msgid "Start" msgstr "Εκκίνηση" -#: describe.c:1713 describe.c:1737 +#: describe.c:1880 describe.c:1904 msgid "Minimum" msgstr "Ελάχιστο" -#: describe.c:1714 describe.c:1738 +#: describe.c:1881 describe.c:1905 msgid "Maximum" msgstr "Μέγιστο" -#: describe.c:1715 describe.c:1739 +#: describe.c:1882 describe.c:1906 msgid "Increment" msgstr "Επαύξηση" -#: describe.c:1716 describe.c:1740 describe.c:1871 describe.c:4269 -#: describe.c:4435 describe.c:4549 describe.c:4554 describe.c:6103 +#: describe.c:1883 describe.c:1907 describe.c:2038 describe.c:4589 +#: describe.c:4847 describe.c:4961 describe.c:4966 describe.c:6523 msgid "yes" msgstr "ναι" -#: describe.c:1717 describe.c:1741 describe.c:1872 describe.c:4269 -#: describe.c:4432 describe.c:4549 describe.c:6104 +#: describe.c:1884 describe.c:1908 describe.c:2039 describe.c:4589 +#: describe.c:4844 describe.c:4961 describe.c:6524 msgid "no" msgstr "όχι" -#: describe.c:1718 describe.c:1742 +#: describe.c:1885 describe.c:1909 msgid "Cycles?" msgstr "Κύκλοι;" -#: describe.c:1719 describe.c:1743 +#: describe.c:1886 describe.c:1910 msgid "Cache" msgstr "Προσωρινή μνήμη" -#: describe.c:1786 +#: describe.c:1953 #, c-format msgid "Owned by: %s" msgstr "Ανήκει σε: %s" -#: describe.c:1790 +#: describe.c:1957 #, c-format msgid "Sequence for identity column: %s" msgstr "Ακολουθία για τη στήλη ταυτότητας: %s" -#: describe.c:1797 +#: describe.c:1964 #, c-format msgid "Sequence \"%s.%s\"" msgstr "Ακολουθία “%s.%s”" -#: describe.c:1933 +#: describe.c:2111 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "Ακαταχώρητος πίνακας “%s.%s”" -#: describe.c:1936 +#: describe.c:2114 #, c-format msgid "Table \"%s.%s\"" msgstr "Πίνακας “%s.%s”" -#: describe.c:1940 +#: describe.c:2118 #, c-format msgid "View \"%s.%s\"" msgstr "Όψη “%s.%s”" -#: describe.c:1945 +#: describe.c:2123 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "Ακαταχώρητη υλοποιημένη όψη “%s.%s”" -#: describe.c:1948 +#: describe.c:2126 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "Υλοποιημένη όψη “%s.%s”" -#: describe.c:1953 +#: describe.c:2131 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "Ακαταχώρητο ευρετήριο “%s.%s”" -#: describe.c:1956 +#: describe.c:2134 #, c-format msgid "Index \"%s.%s\"" msgstr "Ευρετήριο “%s.%s”" -#: describe.c:1961 +#: describe.c:2139 #, c-format msgid "Unlogged partitioned index \"%s.%s\"" msgstr "Ακαταχώρητο κατατετμημένο ευρετήριο “%s.%s”" -#: describe.c:1964 +#: describe.c:2142 #, c-format msgid "Partitioned index \"%s.%s\"" msgstr "Κατατετμημένο ευρετήριο “%s.%s”" -#: describe.c:1969 +#: describe.c:2147 #, c-format msgid "Special relation \"%s.%s\"" msgstr "Ειδική σχέση “%s.%s”" -#: describe.c:1973 +#: describe.c:2151 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "TOAST πίνακας “%s.%s”" -#: describe.c:1977 +#: describe.c:2155 #, c-format msgid "Composite type \"%s.%s\"" msgstr "Συνθετικός τύπος “%s.%s”" -#: describe.c:1981 +#: describe.c:2159 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "Ξενικός πίνακας “%s.%s”" -#: describe.c:1986 +#: describe.c:2164 #, c-format msgid "Unlogged partitioned table \"%s.%s\"" msgstr "Ακαταχώρητος κατατετμημένος πίνακας “%s.%s”" -#: describe.c:1989 +#: describe.c:2167 #, c-format msgid "Partitioned table \"%s.%s\"" msgstr "Κατατετμημένος πίνακας “%s.%s”" -#: describe.c:2005 describe.c:4182 +#: describe.c:2183 describe.c:4502 msgid "Collation" msgstr "Σύνθεση" -#: describe.c:2006 describe.c:4189 +#: describe.c:2184 describe.c:4509 msgid "Nullable" msgstr "Nullable" -#: describe.c:2007 describe.c:4190 +#: describe.c:2185 describe.c:4510 msgid "Default" msgstr "Προκαθορισμένο" -#: describe.c:2010 +#: describe.c:2188 msgid "Key?" msgstr "Κλειδί;" -#: describe.c:2012 +#: describe.c:2190 describe.c:4739 describe.c:4750 msgid "Definition" msgstr "Ορισμός" -#: describe.c:2014 describe.c:5300 describe.c:5384 describe.c:5455 -#: describe.c:5519 +#: describe.c:2192 describe.c:5712 describe.c:5796 describe.c:5867 +#: describe.c:5931 msgid "FDW options" msgstr "Επιλογές FDW" -#: describe.c:2016 +#: describe.c:2194 msgid "Storage" msgstr "Αποθήκευση" -#: describe.c:2018 +#: describe.c:2196 +#, fuzzy +#| msgid "expression" +msgid "Compression" +msgstr "expression" + +#: describe.c:2198 msgid "Stats target" msgstr "Στόχος στατιστικών" -#: describe.c:2135 -#, c-format -msgid "Partition of: %s %s" +#: describe.c:2334 +#, fuzzy, c-format +#| msgid "Partition of: %s %s" +msgid "Partition of: %s %s%s" msgstr "Κατάτμηση του: %s %s" -#: describe.c:2147 +#: describe.c:2347 msgid "No partition constraint" msgstr "Κανένας περιορισμός κατάτμησης" -#: describe.c:2149 +#: describe.c:2349 #, c-format msgid "Partition constraint: %s" msgstr "Περιορισμός κατάτμησης: %s" -#: describe.c:2173 +#: describe.c:2373 #, c-format msgid "Partition key: %s" msgstr "Κλειδί κατάτμησης: %s" -#: describe.c:2199 +#: describe.c:2399 #, c-format msgid "Owning table: \"%s.%s\"" msgstr "Ιδιοκτήτης πίνακα “%s.%s”" -#: describe.c:2270 +#: describe.c:2470 msgid "primary key, " msgstr "Κύριο κλειδί, " -#: describe.c:2272 +#: describe.c:2472 msgid "unique, " msgstr "μοναδικό, " -#: describe.c:2278 +#: describe.c:2478 #, c-format msgid "for table \"%s.%s\"" msgstr "για πίνακα “%s.%s”" -#: describe.c:2282 +#: describe.c:2482 #, c-format msgid ", predicate (%s)" msgstr ", πρόβλεψη (%s)" -#: describe.c:2285 +#: describe.c:2485 msgid ", clustered" msgstr ", συσταδοποιημένο" -#: describe.c:2288 +#: describe.c:2488 msgid ", invalid" msgstr ", άκυρο" -#: describe.c:2291 +#: describe.c:2491 msgid ", deferrable" msgstr ", αναβαλλόμενο" -#: describe.c:2294 +#: describe.c:2494 msgid ", initially deferred" msgstr ", αρχικά αναβαλλόμενο" -#: describe.c:2297 +#: describe.c:2497 msgid ", replica identity" msgstr ", ταυτότητα πανομοιόματος" -#: describe.c:2364 +#: describe.c:2564 msgid "Indexes:" msgstr "Ευρετήρια:" -#: describe.c:2448 +#: describe.c:2648 msgid "Check constraints:" msgstr "Περιορισμοί ελέγχου:" -#: describe.c:2516 +#: describe.c:2716 msgid "Foreign-key constraints:" msgstr "Περιορισμοί ξενικών κλειδιών:" -#: describe.c:2579 +#: describe.c:2779 msgid "Referenced by:" msgstr "Αναφέρεται από:" -#: describe.c:2629 +#: describe.c:2829 msgid "Policies:" msgstr "Πολιτικές:" -#: describe.c:2632 +#: describe.c:2832 msgid "Policies (forced row security enabled):" msgstr "Πολιτικές (ενεργοποιημένη επιβολή ασφάλειας γραμμών):" -#: describe.c:2635 +#: describe.c:2835 msgid "Policies (row security enabled): (none)" msgstr "Πολιτικές (ενεργοποιημένη ασφάλεια γραμμών): (καμία)" -#: describe.c:2638 +#: describe.c:2838 msgid "Policies (forced row security enabled): (none)" msgstr "Πολιτικές (ενεργοποιημένη επιβολή ασφάλειας γραμμών): (καμία)" -#: describe.c:2641 +#: describe.c:2841 msgid "Policies (row security disabled):" msgstr "Πολιτικές (απενεργοποιημένη ασφάλεια γραμμών):" -#: describe.c:2709 +#: describe.c:2902 describe.c:3006 msgid "Statistics objects:" msgstr "Αντικείμενα στατιστικών:" -#: describe.c:2823 describe.c:2927 +#: describe.c:3120 describe.c:3224 msgid "Rules:" msgstr "Κανόνες" -#: describe.c:2826 +#: describe.c:3123 msgid "Disabled rules:" msgstr "Απενεργοποιημένοι κανόνες:" -#: describe.c:2829 +#: describe.c:3126 msgid "Rules firing always:" msgstr "Κανόνες πάντα σε χρήση:" -#: describe.c:2832 +#: describe.c:3129 msgid "Rules firing on replica only:" msgstr "Κανόνες σε χρήση μόνο στο ομοίωμα:" -#: describe.c:2872 +#: describe.c:3169 msgid "Publications:" msgstr "Δημοσιεύσεις:" -#: describe.c:2910 +#: describe.c:3207 msgid "View definition:" msgstr "Ορισμός όψης:" -#: describe.c:3057 +#: describe.c:3354 msgid "Triggers:" msgstr "Triggers:" -#: describe.c:3061 +#: describe.c:3358 msgid "Disabled user triggers:" msgstr "Απενεργοποιημένες triggers χρήστη:" -#: describe.c:3063 +#: describe.c:3360 msgid "Disabled triggers:" msgstr "Απενεργοποιημένες triggers:" -#: describe.c:3066 +#: describe.c:3363 msgid "Disabled internal triggers:" msgstr "Απενεργοποιημένες εσωτερικές triggers:" -#: describe.c:3069 +#: describe.c:3366 msgid "Triggers firing always:" msgstr "Triggers πάντα σε χρήση:" -#: describe.c:3072 +#: describe.c:3369 msgid "Triggers firing on replica only:" msgstr "Triggers σε χρήση μόνο στο ομοίωμα:" -#: describe.c:3144 +#: describe.c:3441 #, c-format msgid "Server: %s" msgstr "Διακομιστής: %s" -#: describe.c:3152 +#: describe.c:3449 #, c-format msgid "FDW options: (%s)" msgstr "FDW επιλογές: (%s)" -#: describe.c:3173 +#: describe.c:3470 msgid "Inherits" msgstr "Κληρονομεί" -#: describe.c:3233 +#: describe.c:3543 #, c-format msgid "Number of partitions: %d" msgstr "Αριθμός κατατμήσεων: %d" -#: describe.c:3242 +#: describe.c:3552 #, c-format msgid "Number of partitions: %d (Use \\d+ to list them.)" -msgstr "" -"Αριθμός κατατμήσεων: %d (Χρησιμοποιείστε \\d+ για να τους απαριθμήσετε.)" +msgstr "Αριθμός κατατμήσεων: %d (Χρησιμοποιείστε \\d+ για να τους απαριθμήσετε.)" -#: describe.c:3244 +#: describe.c:3554 #, c-format msgid "Number of child tables: %d (Use \\d+ to list them.)" -msgstr "" -"Αριθμός απογονικών πινάκων: %d (Χρησιμοποιείστε \\d+ για να τους " -"απαριθμήσετε.)" +msgstr "Αριθμός απογονικών πινάκων: %d (Χρησιμοποιείστε \\d+ για να τους απαριθμήσετε.)" -#: describe.c:3251 +#: describe.c:3561 msgid "Child tables" msgstr "Απογονικοί πίνακες" -#: describe.c:3251 +#: describe.c:3561 msgid "Partitions" msgstr "Κατατμήσεις" -#: describe.c:3280 +#: describe.c:3592 #, c-format msgid "Typed table of type: %s" msgstr "Τυποποιημένος πίνακας τύπου: %s" -#: describe.c:3296 +#: describe.c:3608 msgid "Replica Identity" msgstr "Ταυτότητα Ομοιόματος" -#: describe.c:3309 +#: describe.c:3621 msgid "Has OIDs: yes" msgstr "Έχει OIDs: ναι" -#: describe.c:3318 +#: describe.c:3630 #, c-format msgid "Access method: %s" msgstr "Μέθοδος πρόσβασης: %s" -#: describe.c:3398 +#: describe.c:3710 #, c-format msgid "Tablespace: \"%s\"" msgstr "Χώρος πινάκα: “%s”" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:3410 +#: describe.c:3722 #, c-format msgid ", tablespace \"%s\"" msgstr ", χώρος πίνακα “%s”" -#: describe.c:3503 +#: describe.c:3815 msgid "List of roles" msgstr "Λίστα ρόλων" -#: describe.c:3505 +#: describe.c:3817 msgid "Role name" msgstr "Όνομα ρόλου" -#: describe.c:3506 +#: describe.c:3818 msgid "Attributes" msgstr "Χαρακτηριστικά" -#: describe.c:3507 +#: describe.c:3820 msgid "Member of" msgstr "Μέλος του" -#: describe.c:3518 +#: describe.c:3831 msgid "Superuser" msgstr "Υπερχρήστης" -#: describe.c:3521 +#: describe.c:3834 msgid "No inheritance" msgstr "Καμία κληρονιμιά" -#: describe.c:3524 +#: describe.c:3837 msgid "Create role" msgstr "Δημιουργήστε ρόλο" -#: describe.c:3527 +#: describe.c:3840 msgid "Create DB" msgstr "Δημιουργήστε βάση δεδομένων" -#: describe.c:3530 +#: describe.c:3843 msgid "Cannot login" msgstr "Δεν δύναται σύνδεση" -#: describe.c:3534 +#: describe.c:3847 msgid "Replication" msgstr "Αντιγραφή" -#: describe.c:3538 +#: describe.c:3851 msgid "Bypass RLS" msgstr "Παράκαμψη RLS" -#: describe.c:3547 +#: describe.c:3860 msgid "No connections" msgstr "Καθόλου συνδέσεις" -#: describe.c:3549 +#: describe.c:3862 #, c-format msgid "%d connection" msgid_plural "%d connections" msgstr[0] "%d σύνδεση" msgstr[1] "%d συνδέσεις" -#: describe.c:3559 +#: describe.c:3872 msgid "Password valid until " msgstr "Κωδικός πρόσβασης ενεργός μέχρι " -#: describe.c:3609 +#: describe.c:3922 #, c-format msgid "The server (version %s) does not support per-database role settings." -msgstr "" -"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει ρυθμίσεις ρόλων ανά βάση δεδομένων." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει ρυθμίσεις ρόλων ανά βάση δεδομένων." -#: describe.c:3622 +#: describe.c:3935 msgid "Role" msgstr "Ρόλος" -#: describe.c:3623 +#: describe.c:3936 msgid "Database" msgstr "Βάση δεδομένων" -#: describe.c:3624 +#: describe.c:3937 msgid "Settings" msgstr "Ρυθμίσεις" -#: describe.c:3645 +#: describe.c:3958 #, c-format msgid "Did not find any settings for role \"%s\" and database \"%s\"." -msgstr "" -"Δεν βρέθηκαν ρυθμίσεις για το ρόλο \"%s\" και τη βάση δεδομένων \"%s\"." +msgstr "Δεν βρέθηκαν ρυθμίσεις για το ρόλο \"%s\" και τη βάση δεδομένων \"%s\"." -#: describe.c:3648 +#: describe.c:3961 #, c-format msgid "Did not find any settings for role \"%s\"." msgstr "Δεν βρέθηκαν ρυθμίσεις για το ρόλο “%s”." -#: describe.c:3651 +#: describe.c:3964 #, c-format msgid "Did not find any settings." msgstr "Δεν βρέθηκαν ρυθμίσεις." -#: describe.c:3656 +#: describe.c:3969 msgid "List of settings" msgstr "Λίστα ρυθμίσεων" -#: describe.c:3727 +#: describe.c:4041 msgid "index" msgstr "ευρετήριο" -#: describe.c:3729 +#: describe.c:4043 msgid "special" msgstr "ειδικό" -#: describe.c:3732 describe.c:3942 +#: describe.c:4044 +#, fuzzy +#| msgid "TOAST table \"%s.%s\"" +msgid "TOAST table" +msgstr "TOAST πίνακας “%s.%s”" + +#: describe.c:4047 describe.c:4270 msgid "partitioned index" msgstr "κατατετμημένο ευρετήριο" -#: describe.c:3756 +#: describe.c:4071 msgid "permanent" msgstr "μόνιμο" -#: describe.c:3757 +#: describe.c:4072 msgid "temporary" msgstr "προσωρινό" -#: describe.c:3758 +#: describe.c:4073 msgid "unlogged" msgstr "ακαταχώρητο" -#: describe.c:3759 +#: describe.c:4074 msgid "Persistence" msgstr "Διάρκεια" -#: describe.c:3855 +#: describe.c:4091 +#, fuzzy +#| msgid "Access method: %s" +msgid "Access method" +msgstr "Μέθοδος πρόσβασης: %s" + +#: describe.c:4183 msgid "List of relations" msgstr "Λίστα σχέσεων" -#: describe.c:3903 +#: describe.c:4231 #, c-format -msgid "" -"The server (version %s) does not support declarative table partitioning." -msgstr "" -"Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την δηλωτική δημιουργία " -"κατατμήσεων πίνακα." +msgid "The server (version %s) does not support declarative table partitioning." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει την δηλωτική δημιουργία κατατμήσεων πίνακα." -#: describe.c:3914 +#: describe.c:4242 msgid "List of partitioned indexes" msgstr "Λίστα κατατμημένων ευρετηρίων" -#: describe.c:3916 +#: describe.c:4244 msgid "List of partitioned tables" msgstr "Λίστα κατατμημένων πινάκων" -#: describe.c:3920 +#: describe.c:4248 msgid "List of partitioned relations" msgstr "Λίστα κατατμημένων σχέσεων" -#: describe.c:3951 +#: describe.c:4279 msgid "Parent name" msgstr "Γονικό όνομα" -#: describe.c:3964 +#: describe.c:4292 msgid "Leaf partition size" msgstr "Μέγεθος φύλλου κατάτμησης" -#: describe.c:3967 describe.c:3973 +#: describe.c:4295 describe.c:4301 msgid "Total size" msgstr "Συνολικό μέγεθος" -#: describe.c:4105 +#: describe.c:4425 msgid "Trusted" msgstr "Εμπιστευόμενο" -#: describe.c:4113 +#: describe.c:4433 msgid "Internal language" msgstr "Εσωτερική γλώσσα" -#: describe.c:4114 +#: describe.c:4434 msgid "Call handler" msgstr "Πρόγραμμα χειρισμού κλήσεων" -#: describe.c:4115 describe.c:5287 +#: describe.c:4435 describe.c:5699 msgid "Validator" msgstr "Ελεκτής" -#: describe.c:4118 +#: describe.c:4438 msgid "Inline handler" msgstr "Ενσωματωμένος χειριστής" -#: describe.c:4146 +#: describe.c:4466 msgid "List of languages" msgstr "Λίστα γλωσσών" -#: describe.c:4191 +#: describe.c:4511 msgid "Check" msgstr "Έλεγχος" -#: describe.c:4233 +#: describe.c:4553 msgid "List of domains" msgstr "Λίστα πεδίων" -#: describe.c:4267 +#: describe.c:4587 msgid "Source" msgstr "Πηγή" -#: describe.c:4268 +#: describe.c:4588 msgid "Destination" msgstr "Προορισμός" -#: describe.c:4270 describe.c:6105 +#: describe.c:4590 describe.c:6525 msgid "Default?" msgstr "Προεπιλογή;" -#: describe.c:4307 +#: describe.c:4627 msgid "List of conversions" msgstr "Λίστα μετατροπών" -#: describe.c:4346 +#: describe.c:4666 msgid "Event" msgstr "Συμβάν" -#: describe.c:4348 +#: describe.c:4668 msgid "enabled" msgstr "ενεγροποιημένο" -#: describe.c:4349 +#: describe.c:4669 msgid "replica" msgstr "ομοίωμα" -#: describe.c:4350 +#: describe.c:4670 msgid "always" msgstr "πάντα" -#: describe.c:4351 +#: describe.c:4671 msgid "disabled" msgstr "απενεργοποιημένο" -#: describe.c:4352 describe.c:6001 +#: describe.c:4672 describe.c:6413 msgid "Enabled" msgstr "Ενεργοποιημένο" -#: describe.c:4354 +#: describe.c:4674 msgid "Tags" msgstr "Ετικέτες" -#: describe.c:4373 +#: describe.c:4693 msgid "List of event triggers" msgstr "Λίστα ενεργοποιήσεων συμβάντων" -#: describe.c:4402 +#: describe.c:4720 +#, fuzzy, c-format +#| msgid "The server (version %s) does not support extensions." +msgid "The server (version %s) does not support extended statistics." +msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει επεκτάσεις." + +#: describe.c:4757 +msgid "Ndistinct" +msgstr "" + +#: describe.c:4758 +msgid "Dependencies" +msgstr "" + +#: describe.c:4768 +msgid "MCV" +msgstr "" + +#: describe.c:4787 +#, fuzzy +#| msgid "define extended statistics" +msgid "List of extended statistics" +msgstr "ορίστε εκτεταμένα στατιστικά στοιχεία" + +#: describe.c:4814 msgid "Source type" msgstr "Τύπος πηγής" -#: describe.c:4403 +#: describe.c:4815 msgid "Target type" msgstr "Τύπος προοριστμού" -#: describe.c:4434 +#: describe.c:4846 msgid "in assignment" msgstr "σε ανάθεση" -#: describe.c:4436 +#: describe.c:4848 msgid "Implicit?" msgstr "Έμμεσα;" -#: describe.c:4491 +#: describe.c:4903 msgid "List of casts" msgstr "Λίστα casts" -#: describe.c:4519 +#: describe.c:4931 #, c-format msgid "The server (version %s) does not support collations." msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει συρραφές." -#: describe.c:4540 describe.c:4544 +#: describe.c:4952 describe.c:4956 msgid "Provider" msgstr "Πάροχος" -#: describe.c:4550 describe.c:4555 +#: describe.c:4962 describe.c:4967 msgid "Deterministic?" msgstr "Ντετερμινιστικό;" -#: describe.c:4590 +#: describe.c:5002 msgid "List of collations" msgstr "Λίστα συρραφών" -#: describe.c:4649 +#: describe.c:5061 msgid "List of schemas" msgstr "Λίστα σχημάτων" -#: describe.c:4674 describe.c:4921 describe.c:4992 describe.c:5063 +#: describe.c:5086 describe.c:5333 describe.c:5404 describe.c:5475 #, c-format msgid "The server (version %s) does not support full text search." msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει αναζήτηση πλήρους κειμένου." -#: describe.c:4709 +#: describe.c:5121 msgid "List of text search parsers" msgstr "Λίστα αναλυτών αναζήτησης κειμένου" -#: describe.c:4754 +#: describe.c:5166 #, c-format msgid "Did not find any text search parser named \"%s\"." msgstr "Δεν βρήκε ανάλυση αναζήτησης κειμένου με το όνομα \"%s\"." -#: describe.c:4757 +#: describe.c:5169 #, c-format msgid "Did not find any text search parsers." msgstr "Δεν βρήκε ανάλυση αναζήτησης κειμένου." -#: describe.c:4832 +#: describe.c:5244 msgid "Start parse" msgstr "Εκκίνηση ανάλυσης" -#: describe.c:4833 +#: describe.c:5245 msgid "Method" msgstr "Μέθοδος" -#: describe.c:4837 +#: describe.c:5249 msgid "Get next token" msgstr "Λήψη επόμενου ενδεικτικού" -#: describe.c:4839 +#: describe.c:5251 msgid "End parse" msgstr "Τέλος ανάλυσης" -#: describe.c:4841 +#: describe.c:5253 msgid "Get headline" msgstr "Λήψη επικεφαλίδας" -#: describe.c:4843 +#: describe.c:5255 msgid "Get token types" msgstr "Λήψη τύπων ενδεικτικών" -#: describe.c:4854 +#: describe.c:5266 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "Αναλυτής αναζήτης κειμένου “%s.%s”" -#: describe.c:4857 +#: describe.c:5269 #, c-format msgid "Text search parser \"%s\"" msgstr "Αναλυτής αναζήτης κειμένου “%s”" -#: describe.c:4876 +#: describe.c:5288 msgid "Token name" msgstr "Ονομασία ενδεικτικού" -#: describe.c:4887 +#: describe.c:5299 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "Τύποι ενδεικτικών αναλυτή “%s.%s”" -#: describe.c:4890 +#: describe.c:5302 #, c-format msgid "Token types for parser \"%s\"" msgstr "Τύποι ενδεικτικών αναλυτή “%s”" -#: describe.c:4944 +#: describe.c:5356 msgid "Template" msgstr "Πρότυπο" -#: describe.c:4945 +#: describe.c:5357 msgid "Init options" msgstr "Επιλογές εκκίνησης" -#: describe.c:4967 +#: describe.c:5379 msgid "List of text search dictionaries" msgstr "Λίστα λεξικών αναζήτησης κειμένου" -#: describe.c:5010 +#: describe.c:5422 msgid "Init" msgstr "Εκκίνηση" -#: describe.c:5011 +#: describe.c:5423 msgid "Lexize" msgstr "Lexize" -#: describe.c:5038 +#: describe.c:5450 msgid "List of text search templates" msgstr "Λίστα προτύπων αναζήτησης κειμένου" -#: describe.c:5098 +#: describe.c:5510 msgid "List of text search configurations" msgstr "Λίστα ρυθμίσεων αναζήτησης κειμένου" -#: describe.c:5144 +#: describe.c:5556 #, c-format msgid "Did not find any text search configuration named \"%s\"." msgstr "Δεν βρέθηκαν ρυθμίσεις αναζήτησης κειμένου με όνομα “%s”." -#: describe.c:5147 +#: describe.c:5559 #, c-format msgid "Did not find any text search configurations." msgstr "Δεν βρέθηκαν ρυθμίσεις αναζήτησης κειμένου." -#: describe.c:5213 +#: describe.c:5625 msgid "Token" msgstr "Ενδεικτικό" -#: describe.c:5214 +#: describe.c:5626 msgid "Dictionaries" msgstr "Λεξικά" -#: describe.c:5225 +#: describe.c:5637 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "Ρύθμιση αναζήτησης κειμένου “%s.%s”" -#: describe.c:5228 +#: describe.c:5640 #, c-format msgid "Text search configuration \"%s\"" msgstr "Ρύθμιση αναζήτησης κειμένου “%s”" -#: describe.c:5232 +#: describe.c:5644 #, c-format msgid "" "\n" @@ -2224,7 +2169,7 @@ msgstr "" "\n" "Αναλυτής: “%s.%s”" -#: describe.c:5235 +#: describe.c:5647 #, c-format msgid "" "\n" @@ -2233,232 +2178,240 @@ msgstr "" "\n" "Αναλυτής: “%s”" -#: describe.c:5269 +#: describe.c:5681 #, c-format msgid "The server (version %s) does not support foreign-data wrappers." msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει περιτύλιξη ξένων δεδομένων." -#: describe.c:5327 +#: describe.c:5739 msgid "List of foreign-data wrappers" msgstr "Λίστα περιτύλιξης ξένων δεδομένων" -#: describe.c:5352 +#: describe.c:5764 #, c-format msgid "The server (version %s) does not support foreign servers." msgstr "Ο διακομιστής (έκδοση %s) δεν ξενικούς διακομιστές." -#: describe.c:5365 +#: describe.c:5777 msgid "Foreign-data wrapper" msgstr "Περιτύλιξη ξένων δεδομένων" -#: describe.c:5383 describe.c:5588 +#: describe.c:5795 describe.c:6000 msgid "Version" msgstr "Έκδοση" -#: describe.c:5409 +#: describe.c:5821 msgid "List of foreign servers" msgstr "Λίστα ξενικών διακομιστών" -#: describe.c:5434 +#: describe.c:5846 #, c-format msgid "The server (version %s) does not support user mappings." msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει αντιστοιχίσεις χρηστών." -#: describe.c:5444 describe.c:5508 +#: describe.c:5856 describe.c:5920 msgid "Server" msgstr "Διακομιστής" -#: describe.c:5445 +#: describe.c:5857 msgid "User name" msgstr "Όνομα χρήστη" -#: describe.c:5470 +#: describe.c:5882 msgid "List of user mappings" msgstr "Λίστα αντιστοιχιών χρηστών" -#: describe.c:5495 +#: describe.c:5907 #, c-format msgid "The server (version %s) does not support foreign tables." msgstr "Ο διακομιστής (έκδοση %s) δεν ξενικούς πίνακες." -#: describe.c:5548 +#: describe.c:5960 msgid "List of foreign tables" msgstr "Λίστα ξενικών πινάκων" -#: describe.c:5573 describe.c:5630 +#: describe.c:5985 describe.c:6042 #, c-format msgid "The server (version %s) does not support extensions." msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει επεκτάσεις." -#: describe.c:5605 +#: describe.c:6017 msgid "List of installed extensions" msgstr "Λίστα εγκατεστημένων επεκτάσεων" -#: describe.c:5658 +#: describe.c:6070 #, c-format msgid "Did not find any extension named \"%s\"." msgstr "Δεν βρέθηκε καμία επέκταση με το όνομα \"%s\"." -#: describe.c:5661 +#: describe.c:6073 #, c-format msgid "Did not find any extensions." msgstr "Δεν βρέθηκαν επεκτάσεις." -#: describe.c:5705 +#: describe.c:6117 msgid "Object description" msgstr "Περιγραφή αντικειμένου" -#: describe.c:5715 +#: describe.c:6127 #, c-format msgid "Objects in extension \"%s\"" msgstr "Αντικείμενα στην επέκταση \"%s\"" -#: describe.c:5744 describe.c:5820 +#: describe.c:6156 describe.c:6232 #, c-format msgid "The server (version %s) does not support publications." msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει δημοσιεύσεις." -#: describe.c:5761 describe.c:5898 +#: describe.c:6173 describe.c:6310 msgid "All tables" msgstr "Όλοι οι πίνακες" -#: describe.c:5762 describe.c:5899 +#: describe.c:6174 describe.c:6311 msgid "Inserts" msgstr "Εισαγωγές" -#: describe.c:5763 describe.c:5900 +#: describe.c:6175 describe.c:6312 msgid "Updates" msgstr "Ενημερώσεις" -#: describe.c:5764 describe.c:5901 +#: describe.c:6176 describe.c:6313 msgid "Deletes" msgstr "Διαγραφές" -#: describe.c:5768 describe.c:5903 +#: describe.c:6180 describe.c:6315 msgid "Truncates" msgstr "Περικοπές" -#: describe.c:5772 describe.c:5905 +#: describe.c:6184 describe.c:6317 msgid "Via root" msgstr "Διαμέσου υπερχρήστη" -#: describe.c:5789 +#: describe.c:6201 msgid "List of publications" msgstr "Λίστα δημοσιεύσεων" -#: describe.c:5862 +#: describe.c:6274 #, c-format msgid "Did not find any publication named \"%s\"." msgstr "Δεν βρέθηκε καμία δημοσίευση με όνομα \"%s\"." -#: describe.c:5865 +#: describe.c:6277 #, c-format msgid "Did not find any publications." msgstr "Δεν βρέθηκε καμία δημοσίευση." -#: describe.c:5894 +#: describe.c:6306 #, c-format msgid "Publication %s" msgstr "Δημοσίευση %s" -#: describe.c:5942 +#: describe.c:6354 msgid "Tables:" msgstr "Πίνακες:" -#: describe.c:5986 +#: describe.c:6398 #, c-format msgid "The server (version %s) does not support subscriptions." msgstr "Ο διακομιστής (έκδοση %s) δεν υποστηρίζει συνδρομές." -#: describe.c:6002 +#: describe.c:6414 msgid "Publication" msgstr "Δημοσίευση" -#: describe.c:6009 +#: describe.c:6423 +msgid "Binary" +msgstr "" + +#: describe.c:6424 +msgid "Streaming" +msgstr "" + +#: describe.c:6429 msgid "Synchronous commit" msgstr "Σύγχρονη δέσμευση" -#: describe.c:6010 +#: describe.c:6430 msgid "Conninfo" msgstr "Conninfo" -#: describe.c:6032 +#: describe.c:6452 msgid "List of subscriptions" msgstr "Λίστα συνδρομών" -#: describe.c:6099 describe.c:6188 describe.c:6274 describe.c:6357 +#: describe.c:6519 describe.c:6607 describe.c:6692 describe.c:6775 msgid "AM" msgstr "ΑΜ" -#: describe.c:6100 +#: describe.c:6520 msgid "Input type" msgstr "Τύπος εισόδου" -#: describe.c:6101 +#: describe.c:6521 msgid "Storage type" msgstr "Τύπος αποθήκευσης" -#: describe.c:6102 +#: describe.c:6522 msgid "Operator class" msgstr "Κλάση χειριστή" -#: describe.c:6114 describe.c:6189 describe.c:6275 describe.c:6358 +#: describe.c:6534 describe.c:6608 describe.c:6693 describe.c:6776 msgid "Operator family" msgstr "Οικογένεια χειριστή" -#: describe.c:6147 +#: describe.c:6566 msgid "List of operator classes" msgstr "Λίστα οικογένειας κλάσεων" -#: describe.c:6190 +#: describe.c:6609 msgid "Applicable types" msgstr "Εφαρμόσιμοι τύποι" -#: describe.c:6229 +#: describe.c:6647 msgid "List of operator families" msgstr "Λίστα οικογενειών χειριστών" -#: describe.c:6276 +#: describe.c:6694 msgid "Operator" msgstr "Χειριστής" -#: describe.c:6277 +#: describe.c:6695 msgid "Strategy" msgstr "Στρατηγική" -#: describe.c:6278 +#: describe.c:6696 msgid "ordering" msgstr "Διάταξη" -#: describe.c:6279 +#: describe.c:6697 msgid "search" msgstr "αναζήτηση" -#: describe.c:6280 +#: describe.c:6698 msgid "Purpose" msgstr "Στόχος" -#: describe.c:6285 +#: describe.c:6703 msgid "Sort opfamily" msgstr "Διάταξη opfamily" -#: describe.c:6316 +#: describe.c:6734 msgid "List of operators of operator families" msgstr "Λίστα χειριστών των οικογενειών χειριστών" -#: describe.c:6359 +#: describe.c:6777 msgid "Registered left type" msgstr "Καταχωρημένος αριστερός τύπος" -#: describe.c:6360 +#: describe.c:6778 msgid "Registered right type" msgstr "Καταχωρημένος δεξιός τύπος" -#: describe.c:6361 +#: describe.c:6779 msgid "Number" msgstr "Αριθμός" -#: describe.c:6397 +#: describe.c:6815 msgid "List of support functions of operator families" msgstr "Λίστα συναρτήσεων υποστήριξης των οικογενειών χειριστών" @@ -2471,7 +2424,7 @@ msgstr "" "psql είναι το διαδραστικό τερματικό της PostgreSQL.\n" "\n" -#: help.c:74 help.c:355 help.c:431 help.c:474 +#: help.c:74 help.c:355 help.c:433 help.c:476 #, c-format msgid "Usage:\n" msgstr "Χρήση:\n" @@ -2492,34 +2445,23 @@ msgstr "Γενικές επιλογές:\n" #: help.c:82 #, c-format -msgid "" -" -c, --command=COMMAND run only single command (SQL or internal) and " -"exit\n" -msgstr "" -" -c, —command=COMMAND εκτέλεσε μόνο μία μονή εντολή (SQL ή εσωτερική) " -"και, στη συνέχεια, εξέλθετε\n" +msgid " -c, --command=COMMAND run only single command (SQL or internal) and exit\n" +msgstr " -c, —command=COMMAND εκτέλεσε μόνο μία μονή εντολή (SQL ή εσωτερική) και, στη συνέχεια, εξέλθετε\n" #: help.c:83 #, c-format -msgid "" -" -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" -msgstr "" -" -d, —dbname=DBNAME ονομασία βάσης δεδομένων στην οποία θα συνδεθείτε " -"(προεπιλογή: “%s”)\n" +msgid " -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" +msgstr " -d, —dbname=DBNAME ονομασία βάσης δεδομένων στην οποία θα συνδεθείτε (προεπιλογή: “%s”)\n" #: help.c:84 #, c-format msgid " -f, --file=FILENAME execute commands from file, then exit\n" -msgstr "" -" -f, —file=FILENAME εκτέλεσε εντολές από αρχείο και, στη συνέχεια, " -"έξοδος\n" +msgstr " -f, —file=FILENAME εκτέλεσε εντολές από αρχείο και, στη συνέχεια, έξοδος\n" #: help.c:85 #, c-format msgid " -l, --list list available databases, then exit\n" -msgstr "" -" -l, —list απαρίθμησε τις διαθέσιμες βάσεις δεδομένων και, " -"στη συνέχεια, έξοδος\n" +msgstr " -l, —list απαρίθμησε τις διαθέσιμες βάσεις δεδομένων και, στη συνέχεια, έξοδος\n" #: help.c:86 #, c-format @@ -2529,54 +2471,42 @@ msgid "" " (e.g., -v ON_ERROR_STOP=1)\n" msgstr "" " -v, —set=, —variable=NAME=VALUE\n" -" όρισε την μεταβλητή της psql NAME στην τιμή " -"VALUE\n" +" όρισε την μεταβλητή της psql NAME στην τιμή VALUE\n" " (π.χ., -v ON_ERROR_STOP=1)\n" #: help.c:89 #, c-format msgid " -V, --version output version information, then exit\n" -msgstr "" -" -V, —version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, " -"έξοδος\n" +msgstr " -V, —version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, έξοδος\n" #: help.c:90 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" -msgstr "" -" -X, --no-psqlrc να μην διαβαστεί το αρχείο εκκίνησης (~/.psqlrc)\n" +msgstr " -X, --no-psqlrc να μην διαβαστεί το αρχείο εκκίνησης (~/.psqlrc)\n" #: help.c:91 #, c-format msgid "" " -1 (\"one\"), --single-transaction\n" -" execute as a single transaction (if non-" -"interactive)\n" +" execute as a single transaction (if non-interactive)\n" msgstr "" " -1 (“one”), —single-transaction\n" -" εκτέλεσε ως μεμονωμένη συναλλαγή (εάν δεν είναι " -"διαδραστική)\n" +" εκτέλεσε ως μεμονωμένη συναλλαγή (εάν δεν είναι διαδραστική)\n" #: help.c:93 #, c-format msgid " -?, --help[=options] show this help, then exit\n" -msgstr "" -" -?, —help[=options] εμφάνισε αυτής της βοήθειας και, στη συνέχεια, " -"έξοδος\n" +msgstr " -?, —help[=options] εμφάνισε αυτής της βοήθειας και, στη συνέχεια, έξοδος\n" #: help.c:94 #, c-format msgid " --help=commands list backslash commands, then exit\n" -msgstr "" -" —help=commands απαρίθμησε τις εντολές ανάποδης καθέτου και, στη " -"συνέχεια, έξοδος\n" +msgstr " —help=commands απαρίθμησε τις εντολές ανάποδης καθέτου και, στη συνέχεια, έξοδος\n" #: help.c:95 #, c-format msgid " --help=variables list special variables, then exit\n" -msgstr "" -" —help=variables απαρίθμησε τις ειδικές μεταβλητές και, στη " -"συνέχεια, έξοδος\n" +msgstr " —help=variables απαρίθμησε τις ειδικές μεταβλητές και, στη συνέχεια, έξοδος\n" #: help.c:97 #, c-format @@ -2600,61 +2530,42 @@ msgstr " -b, —echo-errors echo όλες τις αποτυχημένε #: help.c:100 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" -msgstr "" -" -e, —echo-queries echo τις εντολές που αποστέλλονται στο διακομιστή\n" +msgstr " -e, —echo-queries echo τις εντολές που αποστέλλονται στο διακομιστή\n" #: help.c:101 #, c-format -msgid "" -" -E, --echo-hidden display queries that internal commands generate\n" -msgstr "" -" -E, —echo-hidden εμφάνισε ερωτήματα που δημιουργούνται από " -"εσωτερικές εντολές\n" +msgid " -E, --echo-hidden display queries that internal commands generate\n" +msgstr " -E, —echo-hidden εμφάνισε ερωτήματα που δημιουργούνται από εσωτερικές εντολές\n" #: help.c:102 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" -msgstr "" -" -L, —log-file=FILENAME στείλε την καταγραφή της συνεδρίας στο αρχείο\n" +msgstr " -L, —log-file=FILENAME στείλε την καταγραφή της συνεδρίας στο αρχείο\n" #: help.c:103 #, c-format -msgid "" -" -n, --no-readline disable enhanced command line editing (readline)\n" -msgstr "" -" -n, —no-readline απενεργοποιήσε την βελτιωμένη επεξεργασία γραμμής " -"εντολών (readline)\n" +msgid " -n, --no-readline disable enhanced command line editing (readline)\n" +msgstr " -n, —no-readline απενεργοποιήσε την βελτιωμένη επεξεργασία γραμμής εντολών (readline)\n" #: help.c:104 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" -msgstr "" -" -o, —output=FILENAME στείλε τα αποτελέσματα ερωτημάτων σε αρχείο (ή |" -"pipe)\n" +msgstr " -o, —output=FILENAME στείλε τα αποτελέσματα ερωτημάτων σε αρχείο (ή |pipe)\n" #: help.c:105 #, c-format -msgid "" -" -q, --quiet run quietly (no messages, only query output)\n" -msgstr "" -" -q, —quiet εκτέλεσε σιωπηλά (καθόλου μηνύματα, μόνο έξοδος " -"ερωτημάτων)\n" +msgid " -q, --quiet run quietly (no messages, only query output)\n" +msgstr " -q, —quiet εκτέλεσε σιωπηλά (καθόλου μηνύματα, μόνο έξοδος ερωτημάτων)\n" #: help.c:106 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" -msgstr "" -" -s, —single-step λειτουργία μονού βήματος (επιβεβαίωσε κάθε " -"ερώτημα)\n" +msgstr " -s, —single-step λειτουργία μονού βήματος (επιβεβαίωσε κάθε ερώτημα)\n" #: help.c:107 #, c-format -msgid "" -" -S, --single-line single-line mode (end of line terminates SQL " -"command)\n" -msgstr "" -" -S, —single-line λειτουργία μονής γραμμής (το τέλος της γραμμής " -"τερματίζει την εντολή SQL)\n" +msgid " -S, --single-line single-line mode (end of line terminates SQL command)\n" +msgstr " -S, —single-line λειτουργία μονής γραμμής (το τέλος της γραμμής τερματίζει την εντολή SQL)\n" #: help.c:109 #, c-format @@ -2668,28 +2579,21 @@ msgstr "" #: help.c:110 #, c-format msgid " -A, --no-align unaligned table output mode\n" -msgstr "" -" -A, —no-align λειτουργία εξόδου πίνακα μη ευθυγραμμισμένη " -"λειτουργία εξόδου πίνακα\n" +msgstr " -A, —no-align λειτουργία εξόδου πίνακα μη ευθυγραμμισμένη λειτουργία εξόδου πίνακα\n" #: help.c:111 #, c-format -msgid "" -" --csv CSV (Comma-Separated Values) table output mode\n" -msgstr "" -" —csv λειτουργία εξόδου πίνακα CSV (τιμές διαχωρισμένες " -"με κόμματα)\n" +msgid " --csv CSV (Comma-Separated Values) table output mode\n" +msgstr " —csv λειτουργία εξόδου πίνακα CSV (τιμές διαχωρισμένες με κόμματα)\n" #: help.c:112 #, c-format msgid "" " -F, --field-separator=STRING\n" -" field separator for unaligned output (default: " -"\"%s\")\n" +" field separator for unaligned output (default: \"%s\")\n" msgstr "" " -F, —field-separator=STRING\n" -" διαχωριστικό πεδίου για μη ευθυγραμμισμένη έξοδο " -"(προεπιλογή: \"%s\")\n" +" διαχωριστικό πεδίου για μη ευθυγραμμισμένη έξοδο (προεπιλογή: \"%s\")\n" #: help.c:115 #, c-format @@ -2698,23 +2602,17 @@ msgstr " -H, —html λειτουργία εξόδου πίνακ #: help.c:116 #, c-format -msgid "" -" -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset " -"command)\n" -msgstr "" -" -P, --pset=VAR[=ARG] όρισε την επιλογή εκτύπωσης VAR σε ARG (δείτε την " -"εντολή \\pset)\n" +msgid " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset command)\n" +msgstr " -P, --pset=VAR[=ARG] όρισε την επιλογή εκτύπωσης VAR σε ARG (δείτε την εντολή \\pset)\n" #: help.c:117 #, c-format msgid "" " -R, --record-separator=STRING\n" -" record separator for unaligned output (default: " -"newline)\n" +" record separator for unaligned output (default: newline)\n" msgstr "" " -R, —record-separator=STRING\n" -" διαχωριστικό εγγραφών για μη ευθυγραμμισμένη " -"έξοδο (προεπιλογή: νέα γραμμή)\n" +" διαχωριστικό εγγραφών για μη ευθυγραμμισμένη έξοδο (προεπιλογή: νέα γραμμή)\n" #: help.c:119 #, c-format @@ -2723,40 +2621,31 @@ msgstr " -t, —tuples-only εκτύπωσε μόνο γραμμές\n" #: help.c:120 #, c-format -msgid "" -" -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, " -"border)\n" -msgstr "" -" -T, —table-attr=TEXT όρισε τα χαρακτηριστικά ετικετών πίνακα HTML (π.χ. " -"πλάτος, περίγραμμα)\n" +msgid " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, border)\n" +msgstr " -T, —table-attr=TEXT όρισε τα χαρακτηριστικά ετικετών πίνακα HTML (π.χ. πλάτος, περίγραμμα)\n" #: help.c:121 #, c-format msgid " -x, --expanded turn on expanded table output\n" -msgstr "" -" -x, —expanded ενεργοποίησε λειτουργία εκτεταμένης εξόδου πίνακα\n" +msgstr " -x, —expanded ενεργοποίησε λειτουργία εκτεταμένης εξόδου πίνακα\n" #: help.c:122 #, c-format msgid "" " -z, --field-separator-zero\n" -" set field separator for unaligned output to zero " -"byte\n" +" set field separator for unaligned output to zero byte\n" msgstr "" " -z, —field-separator-zero\n" -" όρισε το διαχωριστικό πεδίου για μη " -"ευθυγραμμισμένη έξοδο στο μηδενικό byte\n" +" όρισε το διαχωριστικό πεδίου για μη ευθυγραμμισμένη έξοδο στο μηδενικό byte\n" #: help.c:124 #, c-format msgid "" " -0, --record-separator-zero\n" -" set record separator for unaligned output to zero " -"byte\n" +" set record separator for unaligned output to zero byte\n" msgstr "" " -0, —record-separator-zero\n" -" όρισε το διαχωριστικό εγγραφών για μη " -"ευθυγραμμισμένη έξοδο στο μηδενικό byte\n" +" όρισε το διαχωριστικό εγγραφών για μη ευθυγραμμισμένη έξοδο στο μηδενικό byte\n" #: help.c:127 #, c-format @@ -2769,12 +2658,8 @@ msgstr "" #: help.c:130 #, c-format -msgid "" -" -h, --host=HOSTNAME database server host or socket directory " -"(default: \"%s\")\n" -msgstr "" -" -h, —host=HOSTNAME κεντρικός υπολογιστής διακομιστή βάσης δεδομένων ή " -"κατάλογος υποδοχών (προεπιλογή: \"%s\")\n" +msgid " -h, --host=HOSTNAME database server host or socket directory (default: \"%s\")\n" +msgstr " -h, —host=HOSTNAME κεντρικός υπολογιστής διακομιστή βάσης δεδομένων ή κατάλογος υποδοχών (προεπιλογή: \"%s\")\n" #: help.c:131 msgid "local socket" @@ -2783,571 +2668,473 @@ msgstr "τοπική υποδοχή" #: help.c:134 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" -msgstr "" -" -p, —port=PORT θύρα διακομιστή βάσης δεδομένων (προεπιλογή: \"%s" -"\")\n" +msgstr " -p, —port=PORT θύρα διακομιστή βάσης δεδομένων (προεπιλογή: \"%s\")\n" -#: help.c:140 +#: help.c:137 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" -msgstr "" -" -U, —username=USERNAME όνομα χρήστη βάσης δεδομένων (προεπιλογή: \"%s\")\n" +msgstr " -U, —username=USERNAME όνομα χρήστη βάσης δεδομένων (προεπιλογή: \"%s\")\n" -#: help.c:141 +#: help.c:138 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, —no-password να μην ζητείται ποτέ κωδικός πρόσβασης\n" -#: help.c:142 +#: help.c:139 #, c-format -msgid "" -" -W, --password force password prompt (should happen " -"automatically)\n" -msgstr "" -" -W, —password αναγκαστική προτροπή κωδικού πρόσβασης (πρέπει να " -"συμβεί αυτόματα)\n" +msgid " -W, --password force password prompt (should happen automatically)\n" +msgstr " -W, —password αναγκαστική προτροπή κωδικού πρόσβασης (πρέπει να συμβεί αυτόματα)\n" -#: help.c:144 +#: help.c:141 #, c-format msgid "" "\n" -"For more information, type \"\\?\" (for internal commands) or \"\\help" -"\" (for SQL\n" +"For more information, type \"\\?\" (for internal commands) or \"\\help\" (for SQL\n" "commands) from within psql, or consult the psql section in the PostgreSQL\n" "documentation.\n" "\n" msgstr "" "\n" -"Για περισσότερες πληροφορίες, πληκτρολογήστε \"\\?\" (για εσωτερικές " -"εντολές) ή “\\help” (για SQL\n" -"εντολές) μέσα από το psql, ή συμβουλευτείτε την ενότητα psql στην τεκμηρίωση " -"της PostgreSQL\n" +"Για περισσότερες πληροφορίες, πληκτρολογήστε \"\\?\" (για εσωτερικές εντολές) ή “\\help” (για SQL\n" +"εντολές) μέσα από το psql, ή συμβουλευτείτε την ενότητα psql στην τεκμηρίωση της PostgreSQL\n" "\n" -#: help.c:147 +#: help.c:144 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Υποβάλετε αναφορές σφάλματων σε <%s>.\n" -#: help.c:148 +#: help.c:145 #, c-format msgid "%s home page: <%s>\n" msgstr "%s αρχική σελίδα: <%s>\n" -#: help.c:174 +#: help.c:171 #, c-format msgid "General\n" msgstr "Γενικά\n" -#: help.c:175 +#: help.c:172 #, c-format -msgid "" -" \\copyright show PostgreSQL usage and distribution terms\n" -msgstr "" -" \\copyright εμφάνισε τους όρους χρήσης και διανομής της " -"PostgreSQL\n" +msgid " \\copyright show PostgreSQL usage and distribution terms\n" +msgstr " \\copyright εμφάνισε τους όρους χρήσης και διανομής της PostgreSQL\n" -#: help.c:176 +#: help.c:173 #, c-format -msgid "" -" \\crosstabview [COLUMNS] execute query and display results in crosstab\n" -msgstr "" -" \\crosstabview [COLUMNS] εκτέλεσε την ερώτηση και execute query and " -"εμφάνισε τα αποτελέσματα σε μορφή crosstab\n" +msgid " \\crosstabview [COLUMNS] execute query and display results in crosstab\n" +msgstr " \\crosstabview [COLUMNS] εκτέλεσε την ερώτηση και execute query and εμφάνισε τα αποτελέσματα σε μορφή crosstab\n" -#: help.c:177 +#: help.c:174 #, c-format -msgid "" -" \\errverbose show most recent error message at maximum " -"verbosity\n" -msgstr "" -" \\errverbose εμφάνισε το πιο πρόσφατο μήνυμα σφάλματος στη " -"μέγιστη λεπτομέρεια\n" +msgid " \\errverbose show most recent error message at maximum verbosity\n" +msgstr " \\errverbose εμφάνισε το πιο πρόσφατο μήνυμα σφάλματος στη μέγιστη λεπτομέρεια\n" -#: help.c:178 +#: help.c:175 #, c-format msgid "" -" \\g [(OPTIONS)] [FILE] execute query (and send results to file or |" -"pipe);\n" +" \\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);\n" " \\g with no arguments is equivalent to a semicolon\n" msgstr "" -" \\g [(OPTIONS)] [FILE] εκτέλεσε το ερώτημα (και στείλτε αποτελέσματα σε " -"αρχείο ή |pipe).\n" +" \\g [(OPTIONS)] [FILE] εκτέλεσε το ερώτημα (και στείλτε αποτελέσματα σε αρχείο ή |pipe).\n" " \\g χωρίς επιλογές ισοδυναμεί με το ερωματικό\n" -#: help.c:180 +#: help.c:177 #, c-format -msgid "" -" \\gdesc describe result of query, without executing it\n" -msgstr "" -" \\gdesc περίγραψε το αποτέλεσμα του ερωτήματος, χωρίς να " -"εκτελεστεί\n" +msgid " \\gdesc describe result of query, without executing it\n" +msgstr " \\gdesc περίγραψε το αποτέλεσμα του ερωτήματος, χωρίς να εκτελεστεί\n" -#: help.c:181 +#: help.c:178 #, c-format -msgid "" -" \\gexec execute query, then execute each value in its " -"result\n" -msgstr "" -" \\gexec εκτέλεσε το ερώτημα και, στη συνέχεια, εκτέλεσε " -"κάθε τιμή του αποτελέσματός της\n" +msgid " \\gexec execute query, then execute each value in its result\n" +msgstr " \\gexec εκτέλεσε το ερώτημα και, στη συνέχεια, εκτέλεσε κάθε τιμή του αποτελέσματός της\n" -#: help.c:182 +#: help.c:179 #, c-format -msgid "" -" \\gset [PREFIX] execute query and store results in psql variables\n" -msgstr "" -" \\gset [PREFIX] εκτέλεσε το ερώτημα και αποθήκευσε τα αποτελέσματα " -"σε μεταβλητές της psql\n" +msgid " \\gset [PREFIX] execute query and store results in psql variables\n" +msgstr " \\gset [PREFIX] εκτέλεσε το ερώτημα και αποθήκευσε τα αποτελέσματα σε μεταβλητές της psql\n" -#: help.c:183 +#: help.c:180 #, c-format msgid " \\gx [(OPTIONS)] [FILE] as \\g, but forces expanded output mode\n" -msgstr "" -" \\gx [(OPTIONS)] [FILE] όμοια με \\g, αλλά επιβάλλει λειτουργία " -"εκτεταμένης εξόδου\n" +msgstr " \\gx [(OPTIONS)] [FILE] όμοια με \\g, αλλά επιβάλλει λειτουργία εκτεταμένης εξόδου\n" -#: help.c:184 +#: help.c:181 #, c-format msgid " \\q quit psql\n" msgstr " \\q τερμάτισε psql\n" -#: help.c:185 +#: help.c:182 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" -msgstr "" -" \\watch [SEC] εκτέλεση του ερωτήματος κάθε SEC δευτερόλεπτα\n" +msgstr " \\watch [SEC] εκτέλεση του ερωτήματος κάθε SEC δευτερόλεπτα\n" -#: help.c:188 +#: help.c:185 #, c-format msgid "Help\n" msgstr "Βοήθεια\n" -#: help.c:190 +#: help.c:187 #, c-format msgid " \\? [commands] show help on backslash commands\n" -msgstr "" -" \\? [commands] εμφάνισε την βοήθεια για τις εντολές ανάποδης " -"καθέτου\n" +msgstr " \\? [commands] εμφάνισε την βοήθεια για τις εντολές ανάποδης καθέτου\n" -#: help.c:191 +#: help.c:188 #, c-format msgid " \\? options show help on psql command-line options\n" -msgstr "" -" \\? options εμφάνισε την βοήθεια για τις επιλογές εντολών " -"γραμμής της psql\n" +msgstr " \\? options εμφάνισε την βοήθεια για τις επιλογές εντολών γραμμής της psql\n" -#: help.c:192 +#: help.c:189 #, c-format msgid " \\? variables show help on special variables\n" -msgstr "" -" \\? variables εμφάνισε την βοήθεια για τις ειδικές μεταβλητές\n" +msgstr " \\? variables εμφάνισε την βοήθεια για τις ειδικές μεταβλητές\n" -#: help.c:193 +#: help.c:190 #, c-format -msgid "" -" \\h [NAME] help on syntax of SQL commands, * for all " -"commands\n" -msgstr "" -" \\h [NAME] βοήθεια για την σύνταξη των εντολών SQL, * για " -"όλες τις εντολών\n" +msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" +msgstr " \\h [NAME] βοήθεια για την σύνταξη των εντολών SQL, * για όλες τις εντολών\n" -#: help.c:196 +#: help.c:193 #, c-format msgid "Query Buffer\n" msgstr "Ενδιάμεση μνήμη Ερωτήματος\n" -#: help.c:197 +#: help.c:194 #, c-format -msgid "" -" \\e [FILE] [LINE] edit the query buffer (or file) with external " -"editor\n" -msgstr "" -" \\e [FILE] [LINE] επεξεργάσου την ενδιάμεση μνήμη (ή αρχείο) " -"ερωτήματος με εξωτερικό επεξεργαστή κειμένου\n" +msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" +msgstr " \\e [FILE] [LINE] επεξεργάσου την ενδιάμεση μνήμη (ή αρχείο) ερωτήματος με εξωτερικό επεξεργαστή κειμένου\n" -#: help.c:198 +#: help.c:195 #, c-format -msgid "" -" \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" -msgstr "" -" \\ef [FUNCNAME [LINE]] επεξεργάσου τον ορισμό της συνάρτησης με εξωτερικό " -"επεξεργαστή κειμένου\n" +msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" +msgstr " \\ef [FUNCNAME [LINE]] επεξεργάσου τον ορισμό της συνάρτησης με εξωτερικό επεξεργαστή κειμένου\n" -#: help.c:199 +#: help.c:196 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" -msgstr "" -" \\ef [FUNCNAME [LINE]] επεξεργάσου τον ορισμό της όψης με εξωτερικό " -"επεξεργαστή κειμένου\n" +msgstr " \\ef [FUNCNAME [LINE]] επεξεργάσου τον ορισμό της όψης με εξωτερικό επεξεργαστή κειμένου\n" -#: help.c:200 +#: help.c:197 #, c-format msgid " \\p show the contents of the query buffer\n" -msgstr "" -" \\p εμφάνισε τα περιοχόμενα της ενδιάμεσης μνήμης " -"ερωτήματος\n" +msgstr " \\p εμφάνισε τα περιοχόμενα της ενδιάμεσης μνήμης ερωτήματος\n" -#: help.c:201 +#: help.c:198 #, c-format msgid " \\r reset (clear) the query buffer\n" -msgstr "" -" \\r επαναφορά (αρχικοποίηση) της ενδιάμεσης μνήμης " -"ερωτήματος\n" +msgstr " \\r επαναφορά (αρχικοποίηση) της ενδιάμεσης μνήμης ερωτήματος\n" -#: help.c:203 +#: help.c:200 #, c-format msgid " \\s [FILE] display history or save it to file\n" -msgstr "" -" \\s [FILE] εμφάνισε το ιστορικό η αποθήκευσε το σε αρχείο\n" +msgstr " \\s [FILE] εμφάνισε το ιστορικό η αποθήκευσε το σε αρχείο\n" -#: help.c:205 +#: help.c:202 #, c-format msgid " \\w FILE write query buffer to file\n" -msgstr "" -" \\w FILE γράψε την ενδιάμεση μνήμη ερωτήματος σε αρχείο\n" +msgstr " \\w FILE γράψε την ενδιάμεση μνήμη ερωτήματος σε αρχείο\n" -#: help.c:208 +#: help.c:205 #, c-format msgid "Input/Output\n" msgstr "Είσοδος/Έξοδος\n" -#: help.c:209 +#: help.c:206 #, c-format -msgid "" -" \\copy ... perform SQL COPY with data stream to the client " -"host\n" -msgstr "" -" \\copy … εκτέλεσε SQL COPY με ροή δεδομένων σε διακομιστή " -"πελάτη\n" +msgid " \\copy ... perform SQL COPY with data stream to the client host\n" +msgstr " \\copy … εκτέλεσε SQL COPY με ροή δεδομένων σε διακομιστή πελάτη\n" -#: help.c:210 +#: help.c:207 #, c-format -msgid "" -" \\echo [-n] [STRING] write string to standard output (-n for no " -"newline)\n" -msgstr "" -" \\echo [-n] [STRING] γράψε την στοιχειοσειρά στην τυπική έξοδο (-n για " -"παράληψη νέας γραμμής)\n" +msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" +msgstr " \\echo [-n] [STRING] γράψε την στοιχειοσειρά στην τυπική έξοδο (-n για παράληψη νέας γραμμής)\n" -#: help.c:211 +#: help.c:208 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i FILE εκτέλεσε εντολές από αρχείο\n" -#: help.c:212 +#: help.c:209 #, c-format -msgid "" -" \\ir FILE as \\i, but relative to location of current " -"script\n" -msgstr "" -" \\ir FILE όπως \\i, αλλά σε σχέση με την τοποθεσία του " -"τρέχοντος σεναρίου\n" +msgid " \\ir FILE as \\i, but relative to location of current script\n" +msgstr " \\ir FILE όπως \\i, αλλά σε σχέση με την τοποθεσία του τρέχοντος σεναρίου\n" -#: help.c:213 +#: help.c:210 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" -msgstr "" -" \\o [FILE] στείλε όλα τα αποτελέσματα ερωτημάτων σε αρχείο ή |" -"pipe\n" +msgstr " \\o [FILE] στείλε όλα τα αποτελέσματα ερωτημάτων σε αρχείο ή |pipe\n" -#: help.c:214 +#: help.c:211 #, c-format -msgid "" -" \\qecho [-n] [STRING] write string to \\o output stream (-n for no " -"newline)\n" -msgstr "" -" \\qecho [-n] [STRING] γράψε την στοιχειοσειρά στην ροή εξόδου \\o (-n " -"για παράληψη νέας γραμμής)\n" +msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" +msgstr " \\qecho [-n] [STRING] γράψε την στοιχειοσειρά στην ροή εξόδου \\o (-n για παράληψη νέας γραμμής)\n" -#: help.c:215 +#: help.c:212 #, c-format -msgid "" -" \\warn [-n] [STRING] write string to standard error (-n for no " -"newline)\n" -msgstr "" -" \\warn [-n] [STRING] γράψε την στοιχειοσειρά στο τυπικό σφάλμα (-n για " -"παράληψη νέας γραμμής)\n" +msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" +msgstr " \\warn [-n] [STRING] γράψε την στοιχειοσειρά στο τυπικό σφάλμα (-n για παράληψη νέας γραμμής)\n" -#: help.c:218 +#: help.c:215 #, c-format msgid "Conditional\n" msgstr "Υπό συνθήκη\n" -#: help.c:219 +#: help.c:216 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if EXPR έναρξη υπό συνθήκης μπλοκ\n" -#: help.c:220 +#: help.c:217 #, c-format -msgid "" -" \\elif EXPR alternative within current conditional block\n" -msgstr "" -" \\elif EXPR εναλλακτική λύση εντός του τρέχοντος μπλοκ υπό " -"όρους\n" +msgid " \\elif EXPR alternative within current conditional block\n" +msgstr " \\elif EXPR εναλλακτική λύση εντός του τρέχοντος μπλοκ υπό όρους\n" -#: help.c:221 +#: help.c:218 #, c-format -msgid "" -" \\else final alternative within current conditional " -"block\n" -msgstr "" -" \\else τελική εναλλακτική λύση εντός του τρέχοντος μπλοκ " -"υπό όρους\n" +msgid " \\else final alternative within current conditional block\n" +msgstr " \\else τελική εναλλακτική λύση εντός του τρέχοντος μπλοκ υπό όρους\n" -#: help.c:222 +#: help.c:219 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif τερματισμός μπλοκ υπό όρους\n" -#: help.c:225 +#: help.c:222 #, c-format msgid "Informational\n" msgstr "Πληροφοριακά\n" -#: help.c:226 +#: help.c:223 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" -msgstr "" -" (επιλογές: S = εμφάνισε αντικείμενα συστήματος, + = επιπλέον λεπτομέριες)\n" +msgstr " (επιλογές: S = εμφάνισε αντικείμενα συστήματος, + = επιπλέον λεπτομέριες)\n" -#: help.c:227 +#: help.c:224 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] εμφάνισε πίνακες, όψεις και σειρές\n" -#: help.c:228 +#: help.c:225 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] NAME περιέγραψε πίνακα, όψη, σειρά, ή ευρετήριο\n" -#: help.c:229 +#: help.c:226 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [PATTERN] απαρίθμησε συγκεντρωτικά\n" -#: help.c:230 +#: help.c:227 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [PATTERN] απαρίθμησε μεθόδους πρόσβασης\n" -#: help.c:231 +#: help.c:228 #, c-format msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] απαρίθμησε κλάσεις χειριστή\n" -#: help.c:232 +#: help.c:229 #, c-format msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] απαρίθμησε οικογένειες χειριστών\n" -#: help.c:233 +#: help.c:230 #, c-format msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" -msgstr "" -" \\dAo[+] [AMPTRN [OPFPTRN]] απαρίθμησε χειριστές των οικογενειών " -"χειριστών\n" +msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] απαρίθμησε χειριστές των οικογενειών χειριστών\n" -#: help.c:234 +#: help.c:231 #, c-format -msgid "" -" \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" -msgstr "" -" \\dAp [AMPTRN [OPFPTRN]] απαρίθμησε συναρτήσεις των οικογενειών " -"χειριστών\n" +msgid " \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" +msgstr " \\dAp [AMPTRN [OPFPTRN]] απαρίθμησε συναρτήσεις των οικογενειών χειριστών\n" -#: help.c:235 +#: help.c:232 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [PATTERN] απαρίθμησε πινακοχώρους\n" -#: help.c:236 +#: help.c:233 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [PATTERN] απαρίθμησε μετατροπές\n" -#: help.c:237 +#: help.c:234 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [PATTERN] απαρίθμησε casts\n" -#: help.c:238 +#: help.c:235 #, c-format -msgid "" -" \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" -msgstr "" -" \\dd[S] [PATTERN] εμφάνισε περιγραφές αντικειμένων που δεν φαίνονται " -"πουθενά αλλού\n" +msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" +msgstr " \\dd[S] [PATTERN] εμφάνισε περιγραφές αντικειμένων που δεν φαίνονται πουθενά αλλού\n" -#: help.c:239 +#: help.c:236 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [PATTERN] απαρίθμησε πεδία\n" -#: help.c:240 +#: help.c:237 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [PATTERN] απαρίθμησε προεπιλεγμένα προνόμια\n" -#: help.c:241 +#: help.c:238 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [PATTERN] απαρίθμησε ξενικούς πίνακες\n" -#: help.c:242 +#: help.c:239 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [PATTERN] απαρίθμησε ξενικούς πίνακες\n" -#: help.c:243 +#: help.c:240 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [PATTERN] απαρίθμησε ξενικούς διακομιστές\n" -#: help.c:244 +#: help.c:241 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [PATTERN] απαρίθμησε αντιστοιχίες χρηστών\n" -#: help.c:245 +#: help.c:242 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [PATTERN] απαρίθμησε περιτυλίξεις ξένων δεδομένων\n" -#: help.c:246 -#, c-format +#: help.c:243 +#, fuzzy, c-format +#| msgid " \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] functions\n" msgid "" -" \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] " -"functions\n" -msgstr "" -" \\df[anptw][S+] [PATRN] απαρίθμησε συναρτήσεις [μόνο agg/normal/procedures/" -"trigger/window]\n" +" \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" +" list [only agg/normal/procedure/trigger/window] functions\n" +msgstr " \\df[anptw][S+] [PATRN] απαρίθμησε συναρτήσεις [μόνο agg/normal/procedures/trigger/window]\n" -#: help.c:247 +#: help.c:245 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [PATTERN] απαρίθμησε ρυθμίσεις αναζήτησης κειμένου\n" -#: help.c:248 +#: help.c:246 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [PATTERN] απαρίθμησε λεξικά αναζήτησης κειμένου\n" -#: help.c:249 +#: help.c:247 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [PATTERN] απαρίθμησε αναλυτές αναζήτησης κειμένου\n" -#: help.c:250 +#: help.c:248 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [PATTERN] απαρίθμησε πρότυπα αναζήτησης κειμένου\n" -#: help.c:251 +#: help.c:249 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [PATTERN] απαρίθμησε ρόλους\n" -#: help.c:252 +#: help.c:250 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [PATTERN] απαρίθμησε ευρετήρια\n" -#: help.c:253 +#: help.c:251 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" -msgstr "" -" \\dl απαρίθμησε μεγάλα αντικείμενα, όπως \\lo_list\n" +msgstr " \\dl απαρίθμησε μεγάλα αντικείμενα, όπως \\lo_list\n" -#: help.c:254 +#: help.c:252 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [PATTERN] απαρίθμησε διαδικαστικές γλώσσες\n" -#: help.c:255 +#: help.c:253 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [PATTERN] απαρίθμησε υλοποιημένες όψεις\n" -#: help.c:256 +#: help.c:254 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [PATTERN] απαρίθμησε σχήματα\n" -#: help.c:257 -#, c-format -msgid " \\do[S] [PATTERN] list operators\n" +#: help.c:255 +#, fuzzy, c-format +#| msgid " \\do[S] [PATTERN] list operators\n" +msgid "" +" \\do[S] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" +" list operators\n" msgstr " \\do[S] [PATTERN] απαρίθμησε χειριστές\n" -#: help.c:258 +#: help.c:257 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [PATTERN] απαρίθμησε συρραφές\n" -#: help.c:259 +#: help.c:258 #, c-format -msgid "" -" \\dp [PATTERN] list table, view, and sequence access privileges\n" -msgstr "" -" \\dp [PATTERN] απαρίθμησε προνόμια πρόσβασης πίνακα, όψης και " -"σειράς\n" +msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" +msgstr " \\dp [PATTERN] απαρίθμησε προνόμια πρόσβασης πίνακα, όψης και σειράς\n" -#: help.c:260 +#: help.c:259 #, c-format -msgid "" -" \\dP[itn+] [PATTERN] list [only index/table] partitioned relations " -"[n=nested]\n" -msgstr "" -" \\dP[itn+] [PATTERN] απαρίθμησε διαχωρισμένες σχέσεις [μόνο ευρετήριο/" -"πίνακα] [n=nested]\n" +msgid " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n" +msgstr " \\dP[itn+] [PATTERN] απαρίθμησε διαχωρισμένες σχέσεις [μόνο ευρετήριο/πίνακα] [n=nested]\n" -#: help.c:261 +#: help.c:260 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" -msgstr "" -" \\drds [PATRN1 [PATRN2]] απαρίθμησε ρυθμίσεις ρόλου ανά βάση δεδομένων\n" +msgstr " \\drds [PATRN1 [PATRN2]] απαρίθμησε ρυθμίσεις ρόλου ανά βάση δεδομένων\n" -#: help.c:262 +#: help.c:261 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[+] [PATTERN] απαρίθμησε δημοσιεύσεις αναπαραγωγής\n" -#: help.c:263 +#: help.c:262 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [PATTERN] απαρίθμησε συνδρομές αναπαραγωγής\n" -#: help.c:264 +#: help.c:263 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [PATTERN] απαρίθμησε ακολουθίες\n" -#: help.c:265 +#: help.c:264 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [PATTERN] απαρίθμησε πίνακες\n" -#: help.c:266 +#: help.c:265 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [PATTERN] απαρίθμησε τύπους δεδομένων\n" -#: help.c:267 +#: help.c:266 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [PATTERN] απαρίθμησε ρόλους\n" -#: help.c:268 +#: help.c:267 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [PATTERN] απαρίθμησε όψεις\n" -#: help.c:269 +#: help.c:268 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [PATTERN] απαρίθμησε προεκτάσεις\n" +#: help.c:269 +#, fuzzy, c-format +#| msgid " \\dy [PATTERN] list event triggers\n" +msgid " \\dX [PATTERN] list extended statistics\n" +msgstr " \\dy [PATTERN] απαρίθμησε εναύσματα συμβάντων\n" + #: help.c:270 #, c-format msgid " \\dy [PATTERN] list event triggers\n" @@ -3380,11 +3167,8 @@ msgstr "Μορφοποίηση\n" #: help.c:278 #, c-format -msgid "" -" \\a toggle between unaligned and aligned output mode\n" -msgstr "" -" \\a εναλλαγή μεταξύ μη ευθυγραμμισμένης και " -"ευθυγραμμισμένης μορφής εξόδου\n" +msgid " \\a toggle between unaligned and aligned output mode\n" +msgstr " \\a εναλλαγή μεταξύ μη ευθυγραμμισμένης και ευθυγραμμισμένης μορφής εξόδου\n" #: help.c:279 #, c-format @@ -3393,19 +3177,13 @@ msgstr " \\C [STRING] όρισε τίτλο πίνακα, ή ανα #: help.c:280 #, c-format -msgid "" -" \\f [STRING] show or set field separator for unaligned query " -"output\n" -msgstr "" -" \\f [STRING] εμφάνισε ή όρισε τον διαχωριστή πεδίου για μη " -"ευθυγραμμισμένη έξοδο ερωτήματος\n" +msgid " \\f [STRING] show or set field separator for unaligned query output\n" +msgstr " \\f [STRING] εμφάνισε ή όρισε τον διαχωριστή πεδίου για μη ευθυγραμμισμένη έξοδο ερωτήματος\n" #: help.c:281 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" -msgstr "" -" \\H εναλλαγή λειτουργίας εξόδου HTML (επί του παρόντος" -"% s)\n" +msgstr " \\H εναλλαγή λειτουργίας εξόδου HTML (επί του παρόντος% s)\n" #: help.c:283 #, c-format @@ -3429,23 +3207,17 @@ msgstr "" #: help.c:290 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" -msgstr "" -" \\t [on|off] εμφάνισε μόνο γραμμές (επί του παρόντος %s)\n" +msgstr " \\t [on|off] εμφάνισε μόνο γραμμές (επί του παρόντος %s)\n" #: help.c:292 #, c-format -msgid "" -" \\T [STRING] set HTML tag attributes, or unset if none\n" -msgstr "" -"\\T [STRING] ορίστε χαρακτηριστικά ετικέτας πίνακα HTML, ή " -"αναίρεσε εάν δεν υπάρχουν\n" +msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" +msgstr "\\T [STRING] ορίστε χαρακτηριστικά ετικέτας πίνακα HTML, ή αναίρεσε εάν δεν υπάρχουν\n" #: help.c:293 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" -msgstr "" -" \\x [on|off|auto] εναλλαγή τιμής διευρυμένης εξόδου (επί του " -"παρόντος %s)\n" +msgstr " \\x [on|off|auto] εναλλαγή τιμής διευρυμένης εξόδου (επί του παρόντος %s)\n" #: help.c:297 #, c-format @@ -3459,8 +3231,7 @@ msgid "" " connect to new database (currently \"%s\")\n" msgstr "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" -" σύνδεση σε νέα βάση δεδομένων (επί του παρόντος " -"“%s”)\n" +" σύνδεση σε νέα βάση δεδομένων (επί του παρόντος “%s”)\n" #: help.c:303 #, c-format @@ -3469,29 +3240,22 @@ msgid "" " connect to new database (currently no connection)\n" msgstr "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" -" σύνδεση σε νέα βάση δεδομένων (επί του παρόντος " -"καμία σύνδεση)\n" +" σύνδεση σε νέα βάση δεδομένων (επί του παρόντος καμία σύνδεση)\n" #: help.c:305 #, c-format -msgid "" -" \\conninfo display information about current connection\n" -msgstr "" -" \\conninfo εμφάνιση πληροφοριών σχετικά με την παρούσα " -"σύνδεση\n" +msgid " \\conninfo display information about current connection\n" +msgstr " \\conninfo εμφάνιση πληροφοριών σχετικά με την παρούσα σύνδεση\n" #: help.c:306 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" -msgstr "" -" -E, —encoding=ENCODING εμφάνισε ή όρισε την κωδικοποίηση του πελάτη\n" +msgstr " -E, —encoding=ENCODING εμφάνισε ή όρισε την κωδικοποίηση του πελάτη\n" #: help.c:307 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" -msgstr "" -" \\password [USERNAME] άλλαξε με ασφάλεια τον κωδικό πρόσβασης ενός " -"χρήστη\n" +msgstr " \\password [USERNAME] άλλαξε με ασφάλεια τον κωδικό πρόσβασης ενός χρήστη\n" #: help.c:310 #, c-format @@ -3511,18 +3275,12 @@ msgstr " \\setenv NAME [VALUE] όρισε ή αναίρεσε μεταβλη #: help.c:313 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" -msgstr "" -" \\timing [on|off] εναλλαγή χρονισμού των εντολών (επί του παρόντος " -"%s)\n" +msgstr " \\timing [on|off] εναλλαγή χρονισμού των εντολών (επί του παρόντος %s)\n" #: help.c:315 #, c-format -msgid "" -" \\! [COMMAND] execute command in shell or start interactive " -"shell\n" -msgstr "" -" \\! [COMMAND] εκτέλεσε εντολή σε κέλυφος ή ξεκίνησε διαδραστικό " -"κέλυφος\n" +msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" +msgstr " \\! [COMMAND] εκτέλεσε εντολή σε κέλυφος ή ξεκίνησε διαδραστικό κέλυφος\n" #: help.c:318 #, c-format @@ -3532,18 +3290,12 @@ msgstr "Μεταβλητές\n" #: help.c:319 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" -msgstr "" -" \\prompt [TEXT] NAME προέτρεψε τον χρήστη να ορίσει εσωτερική " -"μεταβλητή\n" +msgstr " \\prompt [TEXT] NAME προέτρεψε τον χρήστη να ορίσει εσωτερική μεταβλητή\n" #: help.c:320 #, c-format -msgid "" -" \\set [NAME [VALUE]] set internal variable, or list all if no " -"parameters\n" -msgstr "" -" \\set [NAME [VALUE]] όρισε εσωτερική μεταβλητή, ή απαρίθμησέ τες όλες " -"εάν δεν υπάρχουν παράμετροι\n" +msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" +msgstr " \\set [NAME [VALUE]] όρισε εσωτερική μεταβλητή, ή απαρίθμησέ τες όλες εάν δεν υπάρχουν παράμετροι\n" #: help.c:321 #, c-format @@ -3642,8 +3394,7 @@ msgid "" " if set to \"noexec\", just show them without execution\n" msgstr "" " ECHO_HIDDEN\n" -" εάν έχει οριστεί, εμφανίστε εσωτερικά ερωτήματα που εκτελούνται από " -"εντολές ανάστρωσής τους.\n" +" εάν έχει οριστεί, εμφανίστε εσωτερικά ερωτήματα που εκτελούνται από εντολές ανάστρωσής τους.\n" " εάν οριστεί σε \"noexec\", απλά δείξτε τους χωρίς εκτέλεση\n" #: help.c:371 @@ -3668,12 +3419,10 @@ msgstr "" #, c-format msgid "" " FETCH_COUNT\n" -" the number of result rows to fetch and display at a time (0 = " -"unlimited)\n" +" the number of result rows to fetch and display at a time (0 = unlimited)\n" msgstr "" " FETCH_COUNT\n" -" αριθμός των σειρών αποτελεσμάτων για λήψη και εμφάνιση ανά επανάλληψη (0 " -"= απεριόριστος)\n" +" αριθμός των σειρών αποτελεσμάτων για λήψη και εμφάνιση ανά επανάλληψη (0 = απεριόριστος)\n" #: help.c:377 #, c-format @@ -3685,6 +3434,18 @@ msgstr "" " εάν έχει οριστεί, δεν εμφανίζονται μέθοδοι πρόσβασης πίνακα\n" #: help.c:379 +#, fuzzy, c-format +#| msgid "" +#| " HIDE_TABLEAM\n" +#| " if set, table access methods are not displayed\n" +msgid "" +" HIDE_TOAST_COMPRESSION\n" +" if set, compression methods are not displayed\n" +msgstr "" +" HIDE_TABLEAM\n" +" εάν έχει οριστεί, δεν εμφανίζονται μέθοδοι πρόσβασης πίνακα\n" + +#: help.c:381 #, c-format msgid "" " HISTCONTROL\n" @@ -3693,17 +3454,16 @@ msgstr "" " HISTCONTROL\n" " ελέγχει το ιστορικό εντολών [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:381 +#: help.c:383 #, c-format msgid "" " HISTFILE\n" " file name used to store the command history\n" msgstr "" " HISTFILE\n" -" όνομα αρχείου που χρησιμοποιείται για την αποθήκευση του ιστορικού " -"εντολών\n" +" όνομα αρχείου που χρησιμοποιείται για την αποθήκευση του ιστορικού εντολών\n" -#: help.c:383 +#: help.c:385 #, c-format msgid "" " HISTSIZE\n" @@ -3712,7 +3472,7 @@ msgstr "" " HISTSIZE\n" " μέγιστος αριθμός εντολών που θα αποθηκευτούν στο ιστορικό εντολών\n" -#: help.c:385 +#: help.c:387 #, c-format msgid "" " HOST\n" @@ -3721,17 +3481,16 @@ msgstr "" " HOST\n" " ο συνδεδεμένος κεντρικός υπολογιστής διακομιστή βάσης δεδομένων\n" -#: help.c:387 +#: help.c:389 #, c-format msgid "" " IGNOREEOF\n" " number of EOFs needed to terminate an interactive session\n" msgstr "" " IGNOREEOF\n" -" αριθμός των EOF που απαιτούνται για τον τερματισμό μιας διαδραστικής " -"συνεδρίας\n" +" αριθμός των EOF που απαιτούνται για τον τερματισμό μιας διαδραστικής συνεδρίας\n" -#: help.c:389 +#: help.c:391 #, c-format msgid "" " LASTOID\n" @@ -3740,30 +3499,27 @@ msgstr "" " LASTOID\n" " τιμή του τελευταίου επηρεασμένου OID\n" -#: help.c:391 +#: help.c:393 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" " LAST_ERROR_SQLSTATE\n" -" message and SQLSTATE of last error, or empty string and \"00000\" if " -"none\n" +" message and SQLSTATE of last error, or empty string and \"00000\" if none\n" msgstr "" " LAST_ERROR_MESSAGE\n" " LAST_ERROR_SQLSTATE\n" -" μήνυμα και SQLSTATE του τελευταίου σφάλματος, ή κενή συμβολοσειρά και " -"\"00000\" εάν δεν\n" +" μήνυμα και SQLSTATE του τελευταίου σφάλματος, ή κενή συμβολοσειρά και \"00000\" εάν δεν\n" -#: help.c:394 +#: help.c:396 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" " if set, an error doesn't stop a transaction (uses implicit savepoints)\n" msgstr "" " ON_ERROR_ROLLBACK\n" -" εάν έχει οριστεί, ένα σφάλμα δεν διακόπτει μια συναλλαγή (χρησιμοποιεί " -"έμμεσα σημεία αποθήκευσης)\n" +" εάν έχει οριστεί, ένα σφάλμα δεν διακόπτει μια συναλλαγή (χρησιμοποιεί έμμεσα σημεία αποθήκευσης)\n" -#: help.c:396 +#: help.c:398 #, c-format msgid "" " ON_ERROR_STOP\n" @@ -3772,7 +3528,7 @@ msgstr "" " ON_ERROR_STOP\n" " σταμάτησε την ομαδική εκτέλεση μετά από σφάλμα\n" -#: help.c:398 +#: help.c:400 #, c-format msgid "" " PORT\n" @@ -3781,7 +3537,7 @@ msgstr "" " PORT\n" " θύρα διακομιστή της τρέχουσας σύνδεσης\n" -#: help.c:400 +#: help.c:402 #, c-format msgid "" " PROMPT1\n" @@ -3790,28 +3546,25 @@ msgstr "" " PROMPT1\n" " ορίζει την τυπική προτροπή psql\n" -#: help.c:402 +#: help.c:404 #, c-format msgid "" " PROMPT2\n" -" specifies the prompt used when a statement continues from a previous " -"line\n" +" specifies the prompt used when a statement continues from a previous line\n" msgstr "" " PROMPT2\n" -" καθορίζει την προτροπή που χρησιμοποιείται όταν μια πρόταση συνεχίζεται " -"από προηγούμενη γραμμή\n" +" καθορίζει την προτροπή που χρησιμοποιείται όταν μια πρόταση συνεχίζεται από προηγούμενη γραμμή\n" -#: help.c:404 +#: help.c:406 #, c-format msgid "" " PROMPT3\n" " specifies the prompt used during COPY ... FROM STDIN\n" msgstr "" " PROMPT3\n" -" καθορίζει την προτροπή που χρησιμοποιείται κατά την διάρκεια COPY … FROM " -"STDIN\n" +" καθορίζει την προτροπή που χρησιμοποιείται κατά την διάρκεια COPY … FROM STDIN\n" -#: help.c:406 +#: help.c:408 #, c-format msgid "" " QUIET\n" @@ -3820,17 +3573,16 @@ msgstr "" " QUIET\n" " σιωπηλή εκτέλεση(όμοια με την επιλογή -q)\n" -#: help.c:408 +#: help.c:410 #, c-format msgid "" " ROW_COUNT\n" " number of rows returned or affected by last query, or 0\n" msgstr "" " ROW_COUNT\n" -" αριθμός των επηρεασμένων ή επιστρεφομένων σειρών του τελευταίου " -"ερωτήματος, ή 0\n" +" αριθμός των επηρεασμένων ή επιστρεφομένων σειρών του τελευταίου ερωτήματος, ή 0\n" -#: help.c:410 +#: help.c:412 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3841,27 +3593,25 @@ msgstr "" " SERVER_VERSION_NUM\n" " έκδοση διακομιστή (σε σύντομη συμβολοσειρά ή αριθμητική μορφή)\n" -#: help.c:413 +#: help.c:415 #, c-format msgid "" " SHOW_CONTEXT\n" " controls display of message context fields [never, errors, always]\n" msgstr "" " SHOW_CONTEXT\n" -" ελέγχει την εμφάνιση των πεδίων του περιεχομένου μηνύματος [never, " -"errors, always]\n" +" ελέγχει την εμφάνιση των πεδίων του περιεχομένου μηνύματος [never, errors, always]\n" -#: help.c:415 +#: help.c:417 #, c-format msgid "" " SINGLELINE\n" " if set, end of line terminates SQL commands (same as -S option)\n" msgstr "" " SINGLELINE\n" -" εάν έχει οριστεί, το τέλος γραμμής ολοκληρώνει τα ερωτήματα SQL (όμοια " -"με την επιλογή -S)\n" +" εάν έχει οριστεί, το τέλος γραμμής ολοκληρώνει τα ερωτήματα SQL (όμοια με την επιλογή -S)\n" -#: help.c:417 +#: help.c:419 #, c-format msgid "" " SINGLESTEP\n" @@ -3870,7 +3620,7 @@ msgstr "" " SINGLESTEP\n" " λειτουργία μονού-βήματος(όμοια με την επιλογή -s)\n" -#: help.c:419 +#: help.c:421 #, c-format msgid "" " SQLSTATE\n" @@ -3879,7 +3629,7 @@ msgstr "" " SQLSTATE\n" " SQLSTATE του τελευταίου ερωτήματος, ή “00000” εάν δεν υπήρξαν σφάλματα\n" -#: help.c:421 +#: help.c:423 #, c-format msgid "" " USER\n" @@ -3888,17 +3638,16 @@ msgstr "" " USER\n" " ο τρέχων συνδεδεμένος χρήστης βάσης δεδομένων\n" -#: help.c:423 +#: help.c:425 #, c-format msgid "" " VERBOSITY\n" " controls verbosity of error reports [default, verbose, terse, sqlstate]\n" msgstr "" " VERBOSITY\n" -" ελέγχει την περιφραστικότητα των αναφορών σφαλμάτων [default, verbose, " -"terse, sqlstate]\n" +" ελέγχει την περιφραστικότητα των αναφορών σφαλμάτων [default, verbose, terse, sqlstate]\n" -#: help.c:425 +#: help.c:427 #, c-format msgid "" " VERSION\n" @@ -3909,10 +3658,9 @@ msgstr "" " VERSION\n" " VERSION_NAME\n" " VERSION_NUM\n" -" η έκδοση της psql (σε περιγραφική συμβολοσειρά, σύντομη συμβολοσειρά, ή " -"αριθμητική μορφή)\n" +" η έκδοση της psql (σε περιγραφική συμβολοσειρά, σύντομη συμβολοσειρά, ή αριθμητική μορφή)\n" -#: help.c:430 +#: help.c:432 #, c-format msgid "" "\n" @@ -3921,7 +3669,7 @@ msgstr "" "\n" "Ρυθμίσεις εμφάνισης:\n" -#: help.c:432 +#: help.c:434 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3932,7 +3680,7 @@ msgstr "" " ή \\set NAME VALUE μέσα σε συνεδρία psql\n" "\n" -#: help.c:434 +#: help.c:436 #, c-format msgid "" " border\n" @@ -3941,7 +3689,7 @@ msgstr "" " border\n" " στυλ περιγράμματος (αριθμός)\n" -#: help.c:436 +#: help.c:438 #, c-format msgid "" " columns\n" @@ -3950,7 +3698,7 @@ msgstr "" " columns\n" " πλάτος προορισμού κατά την εμφάνιση αναδιπλωμένης μορφής\n" -#: help.c:438 +#: help.c:440 #, c-format msgid "" " expanded (or x)\n" @@ -3959,37 +3707,34 @@ msgstr "" " expanded (ή x)\n" " διευρυμένη έξοδος [on, off, auto]\n" -#: help.c:440 +#: help.c:442 #, c-format msgid "" " fieldsep\n" " field separator for unaligned output (default \"%s\")\n" msgstr "" " fieldsep\n" -" διαχωριστικό πεδίου σε μορφή μή ευθυγραμισμένης εξόδου (προκαθοριμένο " -"“%s”)\n" +" διαχωριστικό πεδίου σε μορφή μή ευθυγραμισμένης εξόδου (προκαθοριμένο “%s”)\n" -#: help.c:443 +#: help.c:445 #, c-format msgid "" " fieldsep_zero\n" " set field separator for unaligned output to a zero byte\n" msgstr "" " fieldsep_zero\n" -" ορίζει το διαχωριστικό πεδίου για τη μορφή μη ευθυγραμμισμένης εξόδου " -"στο μηδενικό byte\n" +" ορίζει το διαχωριστικό πεδίου για τη μορφή μη ευθυγραμμισμένης εξόδου στο μηδενικό byte\n" -#: help.c:445 +#: help.c:447 #, c-format msgid "" " footer\n" " enable or disable display of the table footer [on, off]\n" msgstr "" " footer\n" -" ενεργοποιεί ή απενεργοποιεί την εμφάνιση του υποσέλιδου σε πίνακα [on, " -"off]\n" +" ενεργοποιεί ή απενεργοποιεί την εμφάνιση του υποσέλιδου σε πίνακα [on, off]\n" -#: help.c:447 +#: help.c:449 #, c-format msgid "" " format\n" @@ -3998,7 +3743,7 @@ msgstr "" " format\n" " ορίζει τη μορφή εξόδου [unaligned, aligned, wrapped, html, asciidoc, …]\n" -#: help.c:449 +#: help.c:451 #, c-format msgid "" " linestyle\n" @@ -4007,7 +3752,7 @@ msgstr "" " linestyle\n" " ορίζει τη μορφή περιγράμματος [ascii, old-ascii, unicode]\n" -#: help.c:451 +#: help.c:453 #, c-format msgid "" " null\n" @@ -4016,18 +3761,16 @@ msgstr "" " null\n" " ορίζει τη συμβολοσειρά που θα εκτυπωθεί στη θέση κενής τιμής\n" -#: help.c:453 +#: help.c:455 #, c-format msgid "" " numericlocale\n" -" enable display of a locale-specific character to separate groups of " -"digits\n" +" enable display of a locale-specific character to separate groups of digits\n" msgstr "" "numericlocale\n" -" ενεργοποίηση εμφάνισης ενός χαρακτήρα εντοπιότητας για το διαχωρισμό " -"ομάδων ψηφίων\n" +" ενεργοποίηση εμφάνισης ενός χαρακτήρα εντοπιότητας για το διαχωρισμό ομάδων ψηφίων\n" -#: help.c:455 +#: help.c:457 #, c-format msgid "" " pager\n" @@ -4036,27 +3779,25 @@ msgstr "" " Pager\n" " ελέγχει πότε χρησιμοποιείται εξωτερικός σελιδοποιητής [yes, no, always]\n" -#: help.c:457 +#: help.c:459 #, c-format msgid "" " recordsep\n" " record (line) separator for unaligned output\n" msgstr "" " recordsep\n" -" διαχωριστικό εγγραφών (σειράς) κατά την έξοδο μη ευθυγραμμισμένης " -"μορφής\n" +" διαχωριστικό εγγραφών (σειράς) κατά την έξοδο μη ευθυγραμμισμένης μορφής\n" -#: help.c:459 +#: help.c:461 #, c-format msgid "" " recordsep_zero\n" " set record separator for unaligned output to a zero byte\n" msgstr "" " recordsep_zero\n" -" ορίζει το διαχωριστικό εγγραφών στο μηδενικό byte κατά την έξοδο μη " -"ευθυγραμμισμένης μορφής\n" +" ορίζει το διαχωριστικό εγγραφών στο μηδενικό byte κατά την έξοδο μη ευθυγραμμισμένης μορφής\n" -#: help.c:461 +#: help.c:463 #, c-format msgid "" " tableattr (or T)\n" @@ -4065,10 +3806,9 @@ msgid "" msgstr "" " tableattr (ή T)\n" " καθορίζει τα χαρακτηριστικά ενός πίνακα tag σε μορφή HTML, ή καθορίζει\n" -" αναλογικό πλάτος στηλών για τύπους δεδομένων με αριστερή στοίχιση σε " -"μορφή latex-longtable\n" +" αναλογικό πλάτος στηλών για τύπους δεδομένων με αριστερή στοίχιση σε μορφή latex-longtable\n" -#: help.c:464 +#: help.c:466 #, c-format msgid "" " title\n" @@ -4077,7 +3817,7 @@ msgstr "" " title\n" " ορίζει τον τίτλο πίνακα για χρήση στους επόμενα εκτυπωμένους πίνακες\n" -#: help.c:466 +#: help.c:468 #, c-format msgid "" " tuples_only\n" @@ -4086,7 +3826,7 @@ msgstr "" " tuples_only\n" " εάν έχει ορισθεί, τότε εμφανίζονται μόνο τα δεδομένα πίνακα\n" -#: help.c:468 +#: help.c:470 #, c-format msgid "" " unicode_border_linestyle\n" @@ -4099,7 +3839,7 @@ msgstr "" " unicode_header_linestyle\n" " ορισμός του στυλ γραμμής Unicode [single, double]\n" -#: help.c:473 +#: help.c:475 #, c-format msgid "" "\n" @@ -4108,7 +3848,7 @@ msgstr "" "\n" "Μεταβλητές περιβάλλοντος:\n" -#: help.c:477 +#: help.c:479 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -4119,7 +3859,7 @@ msgstr "" " ή \\setenv ΟΝΟΜΑ [ΤΙΜΗ] μέσα σε συνεδρία psql\n" "\n" -#: help.c:479 +#: help.c:481 #, c-format msgid "" " set NAME=VALUE\n" @@ -4132,7 +3872,7 @@ msgstr "" " ή \\setenv NAME [VALUE] μέσα σε συνεδρία psql\n" "\n" -#: help.c:482 +#: help.c:484 #, c-format msgid "" " COLUMNS\n" @@ -4141,7 +3881,7 @@ msgstr "" " COLUMNS\n" " αριθμός στηλών για αναδιπλωμένη μορφή\n" -#: help.c:484 +#: help.c:486 #, c-format msgid "" " PGAPPNAME\n" @@ -4150,7 +3890,7 @@ msgstr "" " PGAPPNAME\n" " όμοια με την παράμετρο σύνδεσης application_name\n" -#: help.c:486 +#: help.c:488 #, c-format msgid "" " PGDATABASE\n" @@ -4159,7 +3899,7 @@ msgstr "" " PGDATABASE\n" " όμοια με την παράμετρο σύνδεσης dbname\n" -#: help.c:488 +#: help.c:490 #, c-format msgid "" " PGHOST\n" @@ -4168,15 +3908,6 @@ msgstr "" " PGHOST\n" " όμοια με την παράμετρο της σύνδεσης κεντρικού υπολογιστή\n" -#: help.c:490 -#, c-format -msgid "" -" PGPASSWORD\n" -" connection password (not recommended)\n" -msgstr "" -" PGPASSWORD\n" -" κωδικός πρόσβασης σύνδεσης (δεν συνιστάται)\n" - #: help.c:492 #, c-format msgid "" @@ -4189,13 +3920,22 @@ msgstr "" #: help.c:494 #, c-format msgid "" +" PGPASSWORD\n" +" connection password (not recommended)\n" +msgstr "" +" PGPASSWORD\n" +" κωδικός πρόσβασης σύνδεσης (δεν συνιστάται)\n" + +#: help.c:496 +#, c-format +msgid "" " PGPORT\n" " same as the port connection parameter\n" msgstr "" " PGPORT\n" " όμοια με την παράμετρο σύνδεσης θύρας\n" -#: help.c:496 +#: help.c:498 #, c-format msgid "" " PGUSER\n" @@ -4204,27 +3944,25 @@ msgstr "" " PGUSER\n" " όμοια με την παράμετρο σύνδεσης χρήστη\n" -#: help.c:498 +#: help.c:500 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" " editor used by the \\e, \\ef, and \\ev commands\n" msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" -" πρόγραμμα επεξεργασίας κειμένου που χρησιμοποιείται από τις εντολές \\e, " -"\\ef και \\ev\n" +" πρόγραμμα επεξεργασίας κειμένου που χρησιμοποιείται από τις εντολές \\e, \\ef και \\ev\n" -#: help.c:500 +#: help.c:502 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" " how to specify a line number when invoking the editor\n" msgstr "" " PSQL_EDITOR_LINENUMBER_ARG\n" -" τρόπος καθορισμού αριθμού γραμμής κατά την κλήση του προγράμματος " -"επεξεργασίας κειμένου\n" +" τρόπος καθορισμού αριθμού γραμμής κατά την κλήση του προγράμματος επεξεργασίας κειμένου\n" -#: help.c:502 +#: help.c:504 #, c-format msgid "" " PSQL_HISTORY\n" @@ -4233,7 +3971,7 @@ msgstr "" " PSQL_HISTORY\n" " εναλλακτική τοποθεσία για το αρχείο ιστορικού εντολών\n" -#: help.c:504 +#: help.c:506 #, c-format msgid "" " PSQL_PAGER, PAGER\n" @@ -4242,7 +3980,7 @@ msgstr "" " PSQL_PAGER, PAGER\n" " όνομα του εξωτερικού προγράμματος σελιδοποίησης\n" -#: help.c:506 +#: help.c:508 #, c-format msgid "" " PSQLRC\n" @@ -4251,7 +3989,7 @@ msgstr "" " PSQLRC\n" " εναλλακτική τοποθεσία για το αρχείο .psqlrc του χρήστη\n" -#: help.c:508 +#: help.c:510 #, c-format msgid "" " SHELL\n" @@ -4260,7 +3998,7 @@ msgstr "" " SHELL\n" " shell που χρησιμοποιείται κατά την εντολή \\!\n" -#: help.c:510 +#: help.c:512 #, c-format msgid "" " TMPDIR\n" @@ -4269,11 +4007,11 @@ msgstr "" " TMPDIR\n" " κατάλογος για προσωρινά αρχεία\n" -#: help.c:555 +#: help.c:557 msgid "Available help:\n" msgstr "Διαθέσιμη βοήθεια:\n" -#: help.c:650 +#: help.c:652 #, c-format msgid "" "Command: %s\n" @@ -4292,7 +4030,7 @@ msgstr "" "Διεύθυνση URL: %s\n" "\n" -#: help.c:673 +#: help.c:675 #, c-format msgid "" "No help available for \"%s\".\n" @@ -4355,14 +4093,11 @@ msgid "" "Use the pg_restore command-line client to restore this dump to a database.\n" msgstr "" "Η είσοδος είναι μια απόθεση PostgreSQL προσαρμοσμένης μορφής.\n" -"Χρησιμοποιήστε το πρόγραμμα γραμμής εντολών pg_restore για να επαναφέρετε " -"αυτήν την απόθεση σε μια βάση δεδομένων.\n" +"Χρησιμοποιήστε το πρόγραμμα γραμμής εντολών pg_restore για να επαναφέρετε αυτήν την απόθεση σε μια βάση δεδομένων.\n" #: mainloop.c:298 msgid "Use \\? for help or press control-C to clear the input buffer." -msgstr "" -"Χρησιμοποιείστε \\? για βοήθεια ή πληκτρολογήστε control-C για να αδειάσετε " -"την ενδιάμεση μνήμη εισόδου." +msgstr "Χρησιμοποιείστε \\? για βοήθεια ή πληκτρολογήστε control-C για να αδειάσετε την ενδιάμεση μνήμη εισόδου." #: mainloop.c:300 msgid "Use \\? for help." @@ -4402,9 +4137,7 @@ msgstr "Πληκτρολογείστε control-D για να εξέλθετε." #: mainloop.c:465 mainloop.c:613 #, c-format msgid "query ignored; use \\endif or Ctrl-C to exit current \\if block" -msgstr "" -"το ερώτημα παραβλέφθηκε· χρησιμοποιήστε το \\endif ή το Ctrl-C για να " -"κλείσετε το τρέχον υπό συνθήκη \\if μπλοκ" +msgstr "το ερώτημα παραβλέφθηκε· χρησιμοποιήστε το \\endif ή το Ctrl-C για να κλείσετε το τρέχον υπό συνθήκη \\if μπλοκ" #: mainloop.c:631 #, c-format @@ -4430,191 +4163,193 @@ msgstr "%s: έλλειψη μνήμης" #: sql_help.c:267 sql_help.c:316 sql_help.c:318 sql_help.c:320 sql_help.c:322 #: sql_help.c:391 sql_help.c:396 sql_help.c:398 sql_help.c:440 sql_help.c:442 #: sql_help.c:445 sql_help.c:447 sql_help.c:515 sql_help.c:520 sql_help.c:525 -#: sql_help.c:530 sql_help.c:535 sql_help.c:588 sql_help.c:590 sql_help.c:592 -#: sql_help.c:594 sql_help.c:596 sql_help.c:599 sql_help.c:601 sql_help.c:604 -#: sql_help.c:615 sql_help.c:617 sql_help.c:658 sql_help.c:660 sql_help.c:662 -#: sql_help.c:665 sql_help.c:667 sql_help.c:669 sql_help.c:702 sql_help.c:706 -#: sql_help.c:710 sql_help.c:729 sql_help.c:732 sql_help.c:735 sql_help.c:764 -#: sql_help.c:776 sql_help.c:784 sql_help.c:787 sql_help.c:790 sql_help.c:805 -#: sql_help.c:808 sql_help.c:837 sql_help.c:842 sql_help.c:847 sql_help.c:852 -#: sql_help.c:857 sql_help.c:879 sql_help.c:881 sql_help.c:883 sql_help.c:885 -#: sql_help.c:888 sql_help.c:890 sql_help.c:931 sql_help.c:975 sql_help.c:980 -#: sql_help.c:985 sql_help.c:990 sql_help.c:995 sql_help.c:1014 sql_help.c:1025 -#: sql_help.c:1027 sql_help.c:1046 sql_help.c:1056 sql_help.c:1058 -#: sql_help.c:1060 sql_help.c:1072 sql_help.c:1076 sql_help.c:1078 -#: sql_help.c:1090 sql_help.c:1092 sql_help.c:1094 sql_help.c:1096 -#: sql_help.c:1112 sql_help.c:1114 sql_help.c:1118 sql_help.c:1121 -#: sql_help.c:1122 sql_help.c:1123 sql_help.c:1126 sql_help.c:1128 -#: sql_help.c:1262 sql_help.c:1264 sql_help.c:1267 sql_help.c:1270 -#: sql_help.c:1272 sql_help.c:1274 sql_help.c:1277 sql_help.c:1280 -#: sql_help.c:1391 sql_help.c:1393 sql_help.c:1395 sql_help.c:1398 -#: sql_help.c:1419 sql_help.c:1422 sql_help.c:1425 sql_help.c:1428 -#: sql_help.c:1432 sql_help.c:1434 sql_help.c:1436 sql_help.c:1438 -#: sql_help.c:1452 sql_help.c:1455 sql_help.c:1457 sql_help.c:1459 -#: sql_help.c:1469 sql_help.c:1471 sql_help.c:1481 sql_help.c:1483 -#: sql_help.c:1493 sql_help.c:1496 sql_help.c:1519 sql_help.c:1521 -#: sql_help.c:1523 sql_help.c:1525 sql_help.c:1528 sql_help.c:1530 -#: sql_help.c:1533 sql_help.c:1536 sql_help.c:1586 sql_help.c:1629 -#: sql_help.c:1632 sql_help.c:1634 sql_help.c:1636 sql_help.c:1639 -#: sql_help.c:1641 sql_help.c:1643 sql_help.c:1646 sql_help.c:1696 -#: sql_help.c:1712 sql_help.c:1933 sql_help.c:2002 sql_help.c:2021 -#: sql_help.c:2034 sql_help.c:2091 sql_help.c:2098 sql_help.c:2108 -#: sql_help.c:2129 sql_help.c:2155 sql_help.c:2173 sql_help.c:2200 -#: sql_help.c:2295 sql_help.c:2340 sql_help.c:2364 sql_help.c:2387 -#: sql_help.c:2391 sql_help.c:2425 sql_help.c:2445 sql_help.c:2467 -#: sql_help.c:2481 sql_help.c:2501 sql_help.c:2524 sql_help.c:2554 -#: sql_help.c:2579 sql_help.c:2625 sql_help.c:2903 sql_help.c:2916 -#: sql_help.c:2933 sql_help.c:2949 sql_help.c:2989 sql_help.c:3041 -#: sql_help.c:3045 sql_help.c:3047 sql_help.c:3053 sql_help.c:3071 -#: sql_help.c:3098 sql_help.c:3133 sql_help.c:3145 sql_help.c:3154 -#: sql_help.c:3198 sql_help.c:3212 sql_help.c:3240 sql_help.c:3248 -#: sql_help.c:3260 sql_help.c:3270 sql_help.c:3278 sql_help.c:3286 -#: sql_help.c:3294 sql_help.c:3302 sql_help.c:3311 sql_help.c:3322 -#: sql_help.c:3330 sql_help.c:3338 sql_help.c:3346 sql_help.c:3354 -#: sql_help.c:3364 sql_help.c:3373 sql_help.c:3382 sql_help.c:3390 -#: sql_help.c:3400 sql_help.c:3411 sql_help.c:3419 sql_help.c:3428 -#: sql_help.c:3439 sql_help.c:3448 sql_help.c:3456 sql_help.c:3464 -#: sql_help.c:3472 sql_help.c:3480 sql_help.c:3488 sql_help.c:3496 -#: sql_help.c:3504 sql_help.c:3512 sql_help.c:3520 sql_help.c:3528 -#: sql_help.c:3545 sql_help.c:3554 sql_help.c:3562 sql_help.c:3579 -#: sql_help.c:3594 sql_help.c:3869 sql_help.c:3920 sql_help.c:3949 -#: sql_help.c:3962 sql_help.c:4407 sql_help.c:4455 sql_help.c:4596 +#: sql_help.c:530 sql_help.c:535 sql_help.c:589 sql_help.c:591 sql_help.c:593 +#: sql_help.c:595 sql_help.c:597 sql_help.c:600 sql_help.c:602 sql_help.c:605 +#: sql_help.c:616 sql_help.c:618 sql_help.c:660 sql_help.c:662 sql_help.c:664 +#: sql_help.c:667 sql_help.c:669 sql_help.c:671 sql_help.c:706 sql_help.c:710 +#: sql_help.c:714 sql_help.c:733 sql_help.c:736 sql_help.c:739 sql_help.c:768 +#: sql_help.c:780 sql_help.c:788 sql_help.c:791 sql_help.c:794 sql_help.c:809 +#: sql_help.c:812 sql_help.c:841 sql_help.c:846 sql_help.c:851 sql_help.c:856 +#: sql_help.c:861 sql_help.c:883 sql_help.c:885 sql_help.c:887 sql_help.c:889 +#: sql_help.c:892 sql_help.c:894 sql_help.c:936 sql_help.c:980 sql_help.c:985 +#: sql_help.c:990 sql_help.c:995 sql_help.c:1000 sql_help.c:1019 +#: sql_help.c:1030 sql_help.c:1032 sql_help.c:1051 sql_help.c:1061 +#: sql_help.c:1063 sql_help.c:1065 sql_help.c:1077 sql_help.c:1081 +#: sql_help.c:1083 sql_help.c:1095 sql_help.c:1097 sql_help.c:1099 +#: sql_help.c:1101 sql_help.c:1119 sql_help.c:1121 sql_help.c:1125 +#: sql_help.c:1129 sql_help.c:1133 sql_help.c:1136 sql_help.c:1137 +#: sql_help.c:1138 sql_help.c:1141 sql_help.c:1143 sql_help.c:1279 +#: sql_help.c:1281 sql_help.c:1284 sql_help.c:1287 sql_help.c:1289 +#: sql_help.c:1291 sql_help.c:1294 sql_help.c:1297 sql_help.c:1411 +#: sql_help.c:1413 sql_help.c:1415 sql_help.c:1418 sql_help.c:1439 +#: sql_help.c:1442 sql_help.c:1445 sql_help.c:1448 sql_help.c:1452 +#: sql_help.c:1454 sql_help.c:1456 sql_help.c:1458 sql_help.c:1472 +#: sql_help.c:1475 sql_help.c:1477 sql_help.c:1479 sql_help.c:1489 +#: sql_help.c:1491 sql_help.c:1501 sql_help.c:1503 sql_help.c:1513 +#: sql_help.c:1516 sql_help.c:1539 sql_help.c:1541 sql_help.c:1543 +#: sql_help.c:1545 sql_help.c:1548 sql_help.c:1550 sql_help.c:1553 +#: sql_help.c:1556 sql_help.c:1607 sql_help.c:1650 sql_help.c:1653 +#: sql_help.c:1655 sql_help.c:1657 sql_help.c:1660 sql_help.c:1662 +#: sql_help.c:1664 sql_help.c:1667 sql_help.c:1717 sql_help.c:1733 +#: sql_help.c:1964 sql_help.c:2033 sql_help.c:2052 sql_help.c:2065 +#: sql_help.c:2122 sql_help.c:2129 sql_help.c:2139 sql_help.c:2160 +#: sql_help.c:2186 sql_help.c:2204 sql_help.c:2231 sql_help.c:2327 +#: sql_help.c:2373 sql_help.c:2397 sql_help.c:2420 sql_help.c:2424 +#: sql_help.c:2458 sql_help.c:2478 sql_help.c:2500 sql_help.c:2514 +#: sql_help.c:2535 sql_help.c:2559 sql_help.c:2589 sql_help.c:2614 +#: sql_help.c:2661 sql_help.c:2949 sql_help.c:2962 sql_help.c:2979 +#: sql_help.c:2995 sql_help.c:3035 sql_help.c:3089 sql_help.c:3093 +#: sql_help.c:3095 sql_help.c:3102 sql_help.c:3121 sql_help.c:3148 +#: sql_help.c:3183 sql_help.c:3195 sql_help.c:3204 sql_help.c:3248 +#: sql_help.c:3262 sql_help.c:3290 sql_help.c:3298 sql_help.c:3310 +#: sql_help.c:3320 sql_help.c:3328 sql_help.c:3336 sql_help.c:3344 +#: sql_help.c:3352 sql_help.c:3361 sql_help.c:3372 sql_help.c:3380 +#: sql_help.c:3388 sql_help.c:3396 sql_help.c:3404 sql_help.c:3414 +#: sql_help.c:3423 sql_help.c:3432 sql_help.c:3440 sql_help.c:3450 +#: sql_help.c:3461 sql_help.c:3469 sql_help.c:3478 sql_help.c:3489 +#: sql_help.c:3498 sql_help.c:3506 sql_help.c:3514 sql_help.c:3522 +#: sql_help.c:3530 sql_help.c:3538 sql_help.c:3546 sql_help.c:3554 +#: sql_help.c:3562 sql_help.c:3570 sql_help.c:3578 sql_help.c:3595 +#: sql_help.c:3604 sql_help.c:3612 sql_help.c:3629 sql_help.c:3644 +#: sql_help.c:3946 sql_help.c:3997 sql_help.c:4026 sql_help.c:4041 +#: sql_help.c:4526 sql_help.c:4574 sql_help.c:4725 msgid "name" msgstr "ονομασία" -#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1783 -#: sql_help.c:3213 sql_help.c:4193 +#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1814 +#: sql_help.c:3263 sql_help.c:4302 msgid "aggregate_signature" msgstr "aggregate_signature" #: sql_help.c:37 sql_help.c:67 sql_help.c:82 sql_help.c:118 sql_help.c:250 -#: sql_help.c:268 sql_help.c:399 sql_help.c:446 sql_help.c:524 sql_help.c:571 -#: sql_help.c:589 sql_help.c:616 sql_help.c:666 sql_help.c:731 sql_help.c:786 -#: sql_help.c:807 sql_help.c:846 sql_help.c:891 sql_help.c:932 sql_help.c:984 -#: sql_help.c:1016 sql_help.c:1026 sql_help.c:1059 sql_help.c:1079 -#: sql_help.c:1093 sql_help.c:1129 sql_help.c:1271 sql_help.c:1392 -#: sql_help.c:1435 sql_help.c:1456 sql_help.c:1470 sql_help.c:1482 -#: sql_help.c:1495 sql_help.c:1522 sql_help.c:1587 sql_help.c:1640 +#: sql_help.c:268 sql_help.c:399 sql_help.c:446 sql_help.c:524 sql_help.c:572 +#: sql_help.c:590 sql_help.c:617 sql_help.c:668 sql_help.c:735 sql_help.c:790 +#: sql_help.c:811 sql_help.c:850 sql_help.c:895 sql_help.c:937 sql_help.c:989 +#: sql_help.c:1021 sql_help.c:1031 sql_help.c:1064 sql_help.c:1084 +#: sql_help.c:1098 sql_help.c:1144 sql_help.c:1288 sql_help.c:1412 +#: sql_help.c:1455 sql_help.c:1476 sql_help.c:1490 sql_help.c:1502 +#: sql_help.c:1515 sql_help.c:1542 sql_help.c:1608 sql_help.c:1661 msgid "new_name" msgstr "new_name" #: sql_help.c:40 sql_help.c:69 sql_help.c:84 sql_help.c:120 sql_help.c:248 -#: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:618 -#: sql_help.c:627 sql_help.c:685 sql_help.c:705 sql_help.c:734 sql_help.c:789 -#: sql_help.c:851 sql_help.c:889 sql_help.c:989 sql_help.c:1028 sql_help.c:1057 -#: sql_help.c:1077 sql_help.c:1091 sql_help.c:1127 sql_help.c:1332 -#: sql_help.c:1394 sql_help.c:1437 sql_help.c:1458 sql_help.c:1520 -#: sql_help.c:1635 sql_help.c:2889 +#: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:619 +#: sql_help.c:628 sql_help.c:689 sql_help.c:709 sql_help.c:738 sql_help.c:793 +#: sql_help.c:855 sql_help.c:893 sql_help.c:994 sql_help.c:1033 sql_help.c:1062 +#: sql_help.c:1082 sql_help.c:1096 sql_help.c:1142 sql_help.c:1351 +#: sql_help.c:1414 sql_help.c:1457 sql_help.c:1478 sql_help.c:1540 +#: sql_help.c:1656 sql_help.c:2935 msgid "new_owner" msgstr "new_owner" #: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:252 sql_help.c:319 -#: sql_help.c:448 sql_help.c:534 sql_help.c:668 sql_help.c:709 sql_help.c:737 -#: sql_help.c:792 sql_help.c:856 sql_help.c:994 sql_help.c:1061 sql_help.c:1095 -#: sql_help.c:1273 sql_help.c:1439 sql_help.c:1460 sql_help.c:1472 -#: sql_help.c:1484 sql_help.c:1524 sql_help.c:1642 +#: sql_help.c:448 sql_help.c:534 sql_help.c:670 sql_help.c:713 sql_help.c:741 +#: sql_help.c:796 sql_help.c:860 sql_help.c:999 sql_help.c:1066 sql_help.c:1100 +#: sql_help.c:1290 sql_help.c:1459 sql_help.c:1480 sql_help.c:1492 +#: sql_help.c:1504 sql_help.c:1544 sql_help.c:1663 msgid "new_schema" msgstr "new_schema" -#: sql_help.c:44 sql_help.c:1847 sql_help.c:3214 sql_help.c:4222 +#: sql_help.c:44 sql_help.c:1878 sql_help.c:3264 sql_help.c:4331 msgid "where aggregate_signature is:" msgstr "όπου aggregate_signature είναι:" #: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:337 sql_help.c:350 #: sql_help.c:354 sql_help.c:370 sql_help.c:373 sql_help.c:376 sql_help.c:516 -#: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:838 -#: sql_help.c:843 sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:976 -#: sql_help.c:981 sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1801 -#: sql_help.c:1818 sql_help.c:1824 sql_help.c:1848 sql_help.c:1851 -#: sql_help.c:1854 sql_help.c:2003 sql_help.c:2022 sql_help.c:2025 -#: sql_help.c:2296 sql_help.c:2502 sql_help.c:3215 sql_help.c:3218 -#: sql_help.c:3221 sql_help.c:3312 sql_help.c:3401 sql_help.c:3429 -#: sql_help.c:3753 sql_help.c:4101 sql_help.c:4199 sql_help.c:4206 -#: sql_help.c:4212 sql_help.c:4223 sql_help.c:4226 sql_help.c:4229 +#: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:842 +#: sql_help.c:847 sql_help.c:852 sql_help.c:857 sql_help.c:862 sql_help.c:981 +#: sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1001 sql_help.c:1832 +#: sql_help.c:1849 sql_help.c:1855 sql_help.c:1879 sql_help.c:1882 +#: sql_help.c:1885 sql_help.c:2034 sql_help.c:2053 sql_help.c:2056 +#: sql_help.c:2328 sql_help.c:2536 sql_help.c:3265 sql_help.c:3268 +#: sql_help.c:3271 sql_help.c:3362 sql_help.c:3451 sql_help.c:3479 +#: sql_help.c:3824 sql_help.c:4204 sql_help.c:4308 sql_help.c:4315 +#: sql_help.c:4321 sql_help.c:4332 sql_help.c:4335 sql_help.c:4338 msgid "argmode" msgstr "argmode" #: sql_help.c:46 sql_help.c:49 sql_help.c:52 sql_help.c:338 sql_help.c:351 #: sql_help.c:355 sql_help.c:371 sql_help.c:374 sql_help.c:377 sql_help.c:517 -#: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:839 -#: sql_help.c:844 sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:977 -#: sql_help.c:982 sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1802 -#: sql_help.c:1819 sql_help.c:1825 sql_help.c:1849 sql_help.c:1852 -#: sql_help.c:1855 sql_help.c:2004 sql_help.c:2023 sql_help.c:2026 -#: sql_help.c:2297 sql_help.c:2503 sql_help.c:3216 sql_help.c:3219 -#: sql_help.c:3222 sql_help.c:3313 sql_help.c:3402 sql_help.c:3430 -#: sql_help.c:4200 sql_help.c:4207 sql_help.c:4213 sql_help.c:4224 -#: sql_help.c:4227 sql_help.c:4230 +#: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:843 +#: sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:863 sql_help.c:982 +#: sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1002 sql_help.c:1833 +#: sql_help.c:1850 sql_help.c:1856 sql_help.c:1880 sql_help.c:1883 +#: sql_help.c:1886 sql_help.c:2035 sql_help.c:2054 sql_help.c:2057 +#: sql_help.c:2329 sql_help.c:2537 sql_help.c:3266 sql_help.c:3269 +#: sql_help.c:3272 sql_help.c:3363 sql_help.c:3452 sql_help.c:3480 +#: sql_help.c:4309 sql_help.c:4316 sql_help.c:4322 sql_help.c:4333 +#: sql_help.c:4336 sql_help.c:4339 msgid "argname" msgstr "argname" #: sql_help.c:47 sql_help.c:50 sql_help.c:53 sql_help.c:339 sql_help.c:352 #: sql_help.c:356 sql_help.c:372 sql_help.c:375 sql_help.c:378 sql_help.c:518 -#: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:840 -#: sql_help.c:845 sql_help.c:850 sql_help.c:855 sql_help.c:860 sql_help.c:978 -#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1803 -#: sql_help.c:1820 sql_help.c:1826 sql_help.c:1850 sql_help.c:1853 -#: sql_help.c:1856 sql_help.c:2298 sql_help.c:2504 sql_help.c:3217 -#: sql_help.c:3220 sql_help.c:3223 sql_help.c:3314 sql_help.c:3403 -#: sql_help.c:3431 sql_help.c:4201 sql_help.c:4208 sql_help.c:4214 -#: sql_help.c:4225 sql_help.c:4228 sql_help.c:4231 +#: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:844 +#: sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:864 sql_help.c:983 +#: sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1003 sql_help.c:1834 +#: sql_help.c:1851 sql_help.c:1857 sql_help.c:1881 sql_help.c:1884 +#: sql_help.c:1887 sql_help.c:2330 sql_help.c:2538 sql_help.c:3267 +#: sql_help.c:3270 sql_help.c:3273 sql_help.c:3364 sql_help.c:3453 +#: sql_help.c:3481 sql_help.c:4310 sql_help.c:4317 sql_help.c:4323 +#: sql_help.c:4334 sql_help.c:4337 sql_help.c:4340 msgid "argtype" msgstr "argtype" -#: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:926 -#: sql_help.c:1074 sql_help.c:1453 sql_help.c:1581 sql_help.c:1613 -#: sql_help.c:1665 sql_help.c:1904 sql_help.c:1911 sql_help.c:2203 -#: sql_help.c:2245 sql_help.c:2252 sql_help.c:2261 sql_help.c:2341 -#: sql_help.c:2555 sql_help.c:2647 sql_help.c:2918 sql_help.c:3099 -#: sql_help.c:3121 sql_help.c:3261 sql_help.c:3616 sql_help.c:3788 -#: sql_help.c:3961 sql_help.c:4658 +#: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:931 +#: sql_help.c:1079 sql_help.c:1473 sql_help.c:1602 sql_help.c:1634 +#: sql_help.c:1686 sql_help.c:1749 sql_help.c:1935 sql_help.c:1942 +#: sql_help.c:2234 sql_help.c:2276 sql_help.c:2283 sql_help.c:2292 +#: sql_help.c:2374 sql_help.c:2590 sql_help.c:2683 sql_help.c:2964 +#: sql_help.c:3149 sql_help.c:3171 sql_help.c:3311 sql_help.c:3666 +#: sql_help.c:3865 sql_help.c:4040 sql_help.c:4788 msgid "option" msgstr "επιλογή" -#: sql_help.c:113 sql_help.c:927 sql_help.c:1582 sql_help.c:2342 -#: sql_help.c:2556 sql_help.c:3100 sql_help.c:3262 +#: sql_help.c:113 sql_help.c:932 sql_help.c:1603 sql_help.c:2375 +#: sql_help.c:2591 sql_help.c:3150 sql_help.c:3312 msgid "where option can be:" msgstr "όπου option μπορεί να είναι:" -#: sql_help.c:114 sql_help.c:2137 +#: sql_help.c:114 sql_help.c:2168 msgid "allowconn" msgstr "allowconn" -#: sql_help.c:115 sql_help.c:928 sql_help.c:1583 sql_help.c:2138 -#: sql_help.c:2343 sql_help.c:2557 sql_help.c:3101 +#: sql_help.c:115 sql_help.c:933 sql_help.c:1604 sql_help.c:2169 +#: sql_help.c:2376 sql_help.c:2592 sql_help.c:3151 msgid "connlimit" msgstr "connlimit" -#: sql_help.c:116 sql_help.c:2139 +#: sql_help.c:116 sql_help.c:2170 msgid "istemplate" msgstr "istemplate" -#: sql_help.c:122 sql_help.c:606 sql_help.c:671 sql_help.c:1276 sql_help.c:1325 +#: sql_help.c:122 sql_help.c:607 sql_help.c:673 sql_help.c:1293 sql_help.c:1344 +#: sql_help.c:4044 msgid "new_tablespace" msgstr "new_tablespace" #: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:544 sql_help.c:546 -#: sql_help.c:547 sql_help.c:863 sql_help.c:865 sql_help.c:866 sql_help.c:935 -#: sql_help.c:939 sql_help.c:942 sql_help.c:1003 sql_help.c:1005 -#: sql_help.c:1006 sql_help.c:1140 sql_help.c:1143 sql_help.c:1590 -#: sql_help.c:1594 sql_help.c:1597 sql_help.c:2308 sql_help.c:2508 -#: sql_help.c:3980 sql_help.c:4396 +#: sql_help.c:547 sql_help.c:867 sql_help.c:869 sql_help.c:870 sql_help.c:940 +#: sql_help.c:944 sql_help.c:947 sql_help.c:1008 sql_help.c:1010 +#: sql_help.c:1011 sql_help.c:1155 sql_help.c:1158 sql_help.c:1611 +#: sql_help.c:1615 sql_help.c:1618 sql_help.c:2340 sql_help.c:2542 +#: sql_help.c:4062 sql_help.c:4515 msgid "configuration_parameter" msgstr "configuration_parameter" #: sql_help.c:125 sql_help.c:395 sql_help.c:466 sql_help.c:472 sql_help.c:484 -#: sql_help.c:545 sql_help.c:598 sql_help.c:677 sql_help.c:683 sql_help.c:864 -#: sql_help.c:887 sql_help.c:936 sql_help.c:1004 sql_help.c:1075 -#: sql_help.c:1117 sql_help.c:1120 sql_help.c:1125 sql_help.c:1141 -#: sql_help.c:1142 sql_help.c:1307 sql_help.c:1327 sql_help.c:1375 -#: sql_help.c:1397 sql_help.c:1454 sql_help.c:1538 sql_help.c:1591 -#: sql_help.c:1614 sql_help.c:2204 sql_help.c:2246 sql_help.c:2253 -#: sql_help.c:2262 sql_help.c:2309 sql_help.c:2310 sql_help.c:2372 -#: sql_help.c:2375 sql_help.c:2409 sql_help.c:2509 sql_help.c:2510 -#: sql_help.c:2527 sql_help.c:2648 sql_help.c:2678 sql_help.c:2783 -#: sql_help.c:2796 sql_help.c:2810 sql_help.c:2851 sql_help.c:2875 -#: sql_help.c:2892 sql_help.c:2919 sql_help.c:3122 sql_help.c:3789 -#: sql_help.c:4397 sql_help.c:4398 +#: sql_help.c:545 sql_help.c:599 sql_help.c:679 sql_help.c:687 sql_help.c:868 +#: sql_help.c:891 sql_help.c:941 sql_help.c:1009 sql_help.c:1080 +#: sql_help.c:1124 sql_help.c:1128 sql_help.c:1132 sql_help.c:1135 +#: sql_help.c:1140 sql_help.c:1156 sql_help.c:1157 sql_help.c:1324 +#: sql_help.c:1346 sql_help.c:1395 sql_help.c:1417 sql_help.c:1474 +#: sql_help.c:1558 sql_help.c:1612 sql_help.c:1635 sql_help.c:2235 +#: sql_help.c:2277 sql_help.c:2284 sql_help.c:2293 sql_help.c:2341 +#: sql_help.c:2342 sql_help.c:2405 sql_help.c:2408 sql_help.c:2442 +#: sql_help.c:2543 sql_help.c:2544 sql_help.c:2562 sql_help.c:2684 +#: sql_help.c:2723 sql_help.c:2829 sql_help.c:2842 sql_help.c:2856 +#: sql_help.c:2897 sql_help.c:2921 sql_help.c:2938 sql_help.c:2965 +#: sql_help.c:3172 sql_help.c:3866 sql_help.c:4516 sql_help.c:4517 msgid "value" msgstr "value" @@ -4622,9 +4357,9 @@ msgstr "value" msgid "target_role" msgstr "target_role" -#: sql_help.c:198 sql_help.c:2188 sql_help.c:2603 sql_help.c:2608 -#: sql_help.c:3735 sql_help.c:3742 sql_help.c:3756 sql_help.c:3762 -#: sql_help.c:4083 sql_help.c:4090 sql_help.c:4104 sql_help.c:4110 +#: sql_help.c:198 sql_help.c:2219 sql_help.c:2639 sql_help.c:2644 +#: sql_help.c:3799 sql_help.c:3808 sql_help.c:3827 sql_help.c:3836 +#: sql_help.c:4179 sql_help.c:4188 sql_help.c:4207 sql_help.c:4216 msgid "schema_name" msgstr "schema_name" @@ -4638,30 +4373,31 @@ msgstr "όπου abbreviated_grant_or_revoke είναι ένα από:" #: sql_help.c:201 sql_help.c:202 sql_help.c:203 sql_help.c:204 sql_help.c:205 #: sql_help.c:206 sql_help.c:207 sql_help.c:208 sql_help.c:209 sql_help.c:210 -#: sql_help.c:569 sql_help.c:605 sql_help.c:670 sql_help.c:810 sql_help.c:946 -#: sql_help.c:1275 sql_help.c:1601 sql_help.c:2346 sql_help.c:2347 -#: sql_help.c:2348 sql_help.c:2349 sql_help.c:2350 sql_help.c:2483 -#: sql_help.c:2560 sql_help.c:2561 sql_help.c:2562 sql_help.c:2563 -#: sql_help.c:2564 sql_help.c:3104 sql_help.c:3105 sql_help.c:3106 -#: sql_help.c:3107 sql_help.c:3108 sql_help.c:3768 sql_help.c:3772 -#: sql_help.c:4116 sql_help.c:4120 sql_help.c:4417 +#: sql_help.c:570 sql_help.c:606 sql_help.c:672 sql_help.c:814 sql_help.c:951 +#: sql_help.c:1292 sql_help.c:1622 sql_help.c:2379 sql_help.c:2380 +#: sql_help.c:2381 sql_help.c:2382 sql_help.c:2383 sql_help.c:2516 +#: sql_help.c:2595 sql_help.c:2596 sql_help.c:2597 sql_help.c:2598 +#: sql_help.c:2599 sql_help.c:3154 sql_help.c:3155 sql_help.c:3156 +#: sql_help.c:3157 sql_help.c:3158 sql_help.c:3845 sql_help.c:3849 +#: sql_help.c:4225 sql_help.c:4229 sql_help.c:4536 msgid "role_name" msgstr "role_name" -#: sql_help.c:236 sql_help.c:459 sql_help.c:1291 sql_help.c:1293 -#: sql_help.c:1342 sql_help.c:1354 sql_help.c:1379 sql_help.c:1631 -#: sql_help.c:2158 sql_help.c:2162 sql_help.c:2265 sql_help.c:2270 -#: sql_help.c:2368 sql_help.c:2778 sql_help.c:2791 sql_help.c:2805 -#: sql_help.c:2814 sql_help.c:2826 sql_help.c:2855 sql_help.c:3820 -#: sql_help.c:3835 sql_help.c:3837 sql_help.c:4282 sql_help.c:4283 -#: sql_help.c:4292 sql_help.c:4333 sql_help.c:4334 sql_help.c:4335 -#: sql_help.c:4336 sql_help.c:4337 sql_help.c:4338 sql_help.c:4371 -#: sql_help.c:4372 sql_help.c:4377 sql_help.c:4382 sql_help.c:4521 -#: sql_help.c:4522 sql_help.c:4531 sql_help.c:4572 sql_help.c:4573 -#: sql_help.c:4574 sql_help.c:4575 sql_help.c:4576 sql_help.c:4577 -#: sql_help.c:4624 sql_help.c:4626 sql_help.c:4685 sql_help.c:4741 -#: sql_help.c:4742 sql_help.c:4751 sql_help.c:4792 sql_help.c:4793 -#: sql_help.c:4794 sql_help.c:4795 sql_help.c:4796 sql_help.c:4797 +#: sql_help.c:236 sql_help.c:459 sql_help.c:1308 sql_help.c:1310 +#: sql_help.c:1361 sql_help.c:1374 sql_help.c:1399 sql_help.c:1652 +#: sql_help.c:2189 sql_help.c:2193 sql_help.c:2296 sql_help.c:2301 +#: sql_help.c:2401 sql_help.c:2700 sql_help.c:2705 sql_help.c:2707 +#: sql_help.c:2824 sql_help.c:2837 sql_help.c:2851 sql_help.c:2860 +#: sql_help.c:2872 sql_help.c:2901 sql_help.c:3897 sql_help.c:3912 +#: sql_help.c:3914 sql_help.c:4393 sql_help.c:4394 sql_help.c:4403 +#: sql_help.c:4445 sql_help.c:4446 sql_help.c:4447 sql_help.c:4448 +#: sql_help.c:4449 sql_help.c:4450 sql_help.c:4490 sql_help.c:4491 +#: sql_help.c:4496 sql_help.c:4501 sql_help.c:4642 sql_help.c:4643 +#: sql_help.c:4652 sql_help.c:4694 sql_help.c:4695 sql_help.c:4696 +#: sql_help.c:4697 sql_help.c:4698 sql_help.c:4699 sql_help.c:4753 +#: sql_help.c:4755 sql_help.c:4816 sql_help.c:4874 sql_help.c:4875 +#: sql_help.c:4884 sql_help.c:4926 sql_help.c:4927 sql_help.c:4928 +#: sql_help.c:4929 sql_help.c:4930 sql_help.c:4931 msgid "expression" msgstr "expression" @@ -4670,18 +4406,18 @@ msgid "domain_constraint" msgstr "domain_constraint" #: sql_help.c:241 sql_help.c:243 sql_help.c:246 sql_help.c:474 sql_help.c:475 -#: sql_help.c:1268 sql_help.c:1313 sql_help.c:1314 sql_help.c:1315 -#: sql_help.c:1341 sql_help.c:1353 sql_help.c:1370 sql_help.c:1789 -#: sql_help.c:1791 sql_help.c:2161 sql_help.c:2264 sql_help.c:2269 -#: sql_help.c:2813 sql_help.c:2825 sql_help.c:3832 +#: sql_help.c:1285 sql_help.c:1332 sql_help.c:1333 sql_help.c:1334 +#: sql_help.c:1360 sql_help.c:1373 sql_help.c:1390 sql_help.c:1820 +#: sql_help.c:1822 sql_help.c:2192 sql_help.c:2295 sql_help.c:2300 +#: sql_help.c:2859 sql_help.c:2871 sql_help.c:3909 msgid "constraint_name" msgstr "constraint_name" -#: sql_help.c:244 sql_help.c:1269 +#: sql_help.c:244 sql_help.c:1286 msgid "new_constraint_name" msgstr "new_constraint_name" -#: sql_help.c:317 sql_help.c:1073 +#: sql_help.c:317 sql_help.c:1078 msgid "new_version" msgstr "new_version" @@ -4697,82 +4433,82 @@ msgstr "όπου member_object είναι:" #: sql_help.c:334 sql_help.c:335 sql_help.c:340 sql_help.c:344 sql_help.c:346 #: sql_help.c:348 sql_help.c:357 sql_help.c:358 sql_help.c:359 sql_help.c:360 #: sql_help.c:361 sql_help.c:362 sql_help.c:363 sql_help.c:364 sql_help.c:367 -#: sql_help.c:368 sql_help.c:1781 sql_help.c:1786 sql_help.c:1793 -#: sql_help.c:1794 sql_help.c:1795 sql_help.c:1796 sql_help.c:1797 -#: sql_help.c:1798 sql_help.c:1799 sql_help.c:1804 sql_help.c:1806 -#: sql_help.c:1810 sql_help.c:1812 sql_help.c:1816 sql_help.c:1821 -#: sql_help.c:1822 sql_help.c:1829 sql_help.c:1830 sql_help.c:1831 -#: sql_help.c:1832 sql_help.c:1833 sql_help.c:1834 sql_help.c:1835 -#: sql_help.c:1836 sql_help.c:1837 sql_help.c:1838 sql_help.c:1839 -#: sql_help.c:1844 sql_help.c:1845 sql_help.c:4189 sql_help.c:4194 -#: sql_help.c:4195 sql_help.c:4196 sql_help.c:4197 sql_help.c:4203 -#: sql_help.c:4204 sql_help.c:4209 sql_help.c:4210 sql_help.c:4215 -#: sql_help.c:4216 sql_help.c:4217 sql_help.c:4218 sql_help.c:4219 -#: sql_help.c:4220 +#: sql_help.c:368 sql_help.c:1812 sql_help.c:1817 sql_help.c:1824 +#: sql_help.c:1825 sql_help.c:1826 sql_help.c:1827 sql_help.c:1828 +#: sql_help.c:1829 sql_help.c:1830 sql_help.c:1835 sql_help.c:1837 +#: sql_help.c:1841 sql_help.c:1843 sql_help.c:1847 sql_help.c:1852 +#: sql_help.c:1853 sql_help.c:1860 sql_help.c:1861 sql_help.c:1862 +#: sql_help.c:1863 sql_help.c:1864 sql_help.c:1865 sql_help.c:1866 +#: sql_help.c:1867 sql_help.c:1868 sql_help.c:1869 sql_help.c:1870 +#: sql_help.c:1875 sql_help.c:1876 sql_help.c:4298 sql_help.c:4303 +#: sql_help.c:4304 sql_help.c:4305 sql_help.c:4306 sql_help.c:4312 +#: sql_help.c:4313 sql_help.c:4318 sql_help.c:4319 sql_help.c:4324 +#: sql_help.c:4325 sql_help.c:4326 sql_help.c:4327 sql_help.c:4328 +#: sql_help.c:4329 msgid "object_name" msgstr "object_name" -#: sql_help.c:326 sql_help.c:1782 sql_help.c:4192 +#: sql_help.c:326 sql_help.c:1813 sql_help.c:4301 msgid "aggregate_name" msgstr "aggregate_name" -#: sql_help.c:328 sql_help.c:1784 sql_help.c:2068 sql_help.c:2072 -#: sql_help.c:2074 sql_help.c:3231 +#: sql_help.c:328 sql_help.c:1815 sql_help.c:2099 sql_help.c:2103 +#: sql_help.c:2105 sql_help.c:3281 msgid "source_type" msgstr "source_type" -#: sql_help.c:329 sql_help.c:1785 sql_help.c:2069 sql_help.c:2073 -#: sql_help.c:2075 sql_help.c:3232 +#: sql_help.c:329 sql_help.c:1816 sql_help.c:2100 sql_help.c:2104 +#: sql_help.c:2106 sql_help.c:3282 msgid "target_type" msgstr "source_type" -#: sql_help.c:336 sql_help.c:774 sql_help.c:1800 sql_help.c:2070 -#: sql_help.c:2111 sql_help.c:2176 sql_help.c:2426 sql_help.c:2457 -#: sql_help.c:2995 sql_help.c:4100 sql_help.c:4198 sql_help.c:4311 -#: sql_help.c:4315 sql_help.c:4319 sql_help.c:4322 sql_help.c:4550 -#: sql_help.c:4554 sql_help.c:4558 sql_help.c:4561 sql_help.c:4770 -#: sql_help.c:4774 sql_help.c:4778 sql_help.c:4781 +#: sql_help.c:336 sql_help.c:778 sql_help.c:1831 sql_help.c:2101 +#: sql_help.c:2142 sql_help.c:2207 sql_help.c:2459 sql_help.c:2490 +#: sql_help.c:3041 sql_help.c:4203 sql_help.c:4307 sql_help.c:4422 +#: sql_help.c:4426 sql_help.c:4430 sql_help.c:4433 sql_help.c:4671 +#: sql_help.c:4675 sql_help.c:4679 sql_help.c:4682 sql_help.c:4903 +#: sql_help.c:4907 sql_help.c:4911 sql_help.c:4914 msgid "function_name" msgstr "function_name" -#: sql_help.c:341 sql_help.c:767 sql_help.c:1807 sql_help.c:2450 +#: sql_help.c:341 sql_help.c:771 sql_help.c:1838 sql_help.c:2483 msgid "operator_name" msgstr "operator_name" -#: sql_help.c:342 sql_help.c:703 sql_help.c:707 sql_help.c:711 sql_help.c:1808 -#: sql_help.c:2427 sql_help.c:3355 +#: sql_help.c:342 sql_help.c:707 sql_help.c:711 sql_help.c:715 sql_help.c:1839 +#: sql_help.c:2460 sql_help.c:3405 msgid "left_type" msgstr "source_type" -#: sql_help.c:343 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1809 -#: sql_help.c:2428 sql_help.c:3356 +#: sql_help.c:343 sql_help.c:708 sql_help.c:712 sql_help.c:716 sql_help.c:1840 +#: sql_help.c:2461 sql_help.c:3406 msgid "right_type" msgstr "source_type" -#: sql_help.c:345 sql_help.c:347 sql_help.c:730 sql_help.c:733 sql_help.c:736 -#: sql_help.c:765 sql_help.c:777 sql_help.c:785 sql_help.c:788 sql_help.c:791 -#: sql_help.c:1359 sql_help.c:1811 sql_help.c:1813 sql_help.c:2447 -#: sql_help.c:2468 sql_help.c:2831 sql_help.c:3365 sql_help.c:3374 +#: sql_help.c:345 sql_help.c:347 sql_help.c:734 sql_help.c:737 sql_help.c:740 +#: sql_help.c:769 sql_help.c:781 sql_help.c:789 sql_help.c:792 sql_help.c:795 +#: sql_help.c:1379 sql_help.c:1842 sql_help.c:1844 sql_help.c:2480 +#: sql_help.c:2501 sql_help.c:2877 sql_help.c:3415 sql_help.c:3424 msgid "index_method" msgstr "source_type" -#: sql_help.c:349 sql_help.c:1817 sql_help.c:4205 +#: sql_help.c:349 sql_help.c:1848 sql_help.c:4314 msgid "procedure_name" msgstr "procedure_name" -#: sql_help.c:353 sql_help.c:1823 sql_help.c:3752 sql_help.c:4211 +#: sql_help.c:353 sql_help.c:1854 sql_help.c:3823 sql_help.c:4320 msgid "routine_name" msgstr "routine_name" -#: sql_help.c:365 sql_help.c:1331 sql_help.c:1840 sql_help.c:2304 -#: sql_help.c:2507 sql_help.c:2786 sql_help.c:2962 sql_help.c:3536 -#: sql_help.c:3766 sql_help.c:4114 +#: sql_help.c:365 sql_help.c:1350 sql_help.c:1871 sql_help.c:2336 +#: sql_help.c:2541 sql_help.c:2832 sql_help.c:3008 sql_help.c:3586 +#: sql_help.c:3842 sql_help.c:4222 msgid "type_name" msgstr "type_name" -#: sql_help.c:366 sql_help.c:1841 sql_help.c:2303 sql_help.c:2506 -#: sql_help.c:2963 sql_help.c:3189 sql_help.c:3537 sql_help.c:3758 -#: sql_help.c:4106 +#: sql_help.c:366 sql_help.c:1872 sql_help.c:2335 sql_help.c:2540 +#: sql_help.c:3009 sql_help.c:3239 sql_help.c:3587 sql_help.c:3830 +#: sql_help.c:4210 msgid "lang_name" msgstr "lang_name" @@ -4780,1915 +4516,1968 @@ msgstr "lang_name" msgid "and aggregate_signature is:" msgstr "και aggregate_signature είναι:" -#: sql_help.c:392 sql_help.c:1935 sql_help.c:2201 +#: sql_help.c:392 sql_help.c:1966 sql_help.c:2232 msgid "handler_function" msgstr "handler_function" -#: sql_help.c:393 sql_help.c:2202 +#: sql_help.c:393 sql_help.c:2233 msgid "validator_function" msgstr "validator_function" -#: sql_help.c:441 sql_help.c:519 sql_help.c:659 sql_help.c:841 sql_help.c:979 -#: sql_help.c:1263 sql_help.c:1529 +#: sql_help.c:441 sql_help.c:519 sql_help.c:661 sql_help.c:845 sql_help.c:984 +#: sql_help.c:1280 sql_help.c:1549 msgid "action" msgstr "action" #: sql_help.c:443 sql_help.c:450 sql_help.c:454 sql_help.c:455 sql_help.c:458 #: sql_help.c:460 sql_help.c:461 sql_help.c:462 sql_help.c:464 sql_help.c:467 -#: sql_help.c:469 sql_help.c:470 sql_help.c:663 sql_help.c:673 sql_help.c:675 -#: sql_help.c:678 sql_help.c:680 sql_help.c:1055 sql_help.c:1265 -#: sql_help.c:1283 sql_help.c:1287 sql_help.c:1288 sql_help.c:1292 -#: sql_help.c:1294 sql_help.c:1295 sql_help.c:1296 sql_help.c:1297 -#: sql_help.c:1299 sql_help.c:1302 sql_help.c:1303 sql_help.c:1305 -#: sql_help.c:1308 sql_help.c:1310 sql_help.c:1355 sql_help.c:1357 -#: sql_help.c:1364 sql_help.c:1373 sql_help.c:1378 sql_help.c:1630 -#: sql_help.c:1633 sql_help.c:1637 sql_help.c:1673 sql_help.c:1788 -#: sql_help.c:1901 sql_help.c:1907 sql_help.c:1920 sql_help.c:1921 -#: sql_help.c:1922 sql_help.c:2243 sql_help.c:2256 sql_help.c:2301 -#: sql_help.c:2367 sql_help.c:2373 sql_help.c:2406 sql_help.c:2633 -#: sql_help.c:2661 sql_help.c:2662 sql_help.c:2769 sql_help.c:2777 -#: sql_help.c:2787 sql_help.c:2790 sql_help.c:2800 sql_help.c:2804 -#: sql_help.c:2827 sql_help.c:2829 sql_help.c:2836 sql_help.c:2849 -#: sql_help.c:2854 sql_help.c:2872 sql_help.c:2998 sql_help.c:3134 -#: sql_help.c:3737 sql_help.c:3738 sql_help.c:3819 sql_help.c:3834 -#: sql_help.c:3836 sql_help.c:3838 sql_help.c:4085 sql_help.c:4086 -#: sql_help.c:4191 sql_help.c:4342 sql_help.c:4581 sql_help.c:4623 -#: sql_help.c:4625 sql_help.c:4627 sql_help.c:4673 sql_help.c:4801 +#: sql_help.c:469 sql_help.c:470 sql_help.c:665 sql_help.c:675 sql_help.c:677 +#: sql_help.c:680 sql_help.c:682 sql_help.c:683 sql_help.c:1060 sql_help.c:1282 +#: sql_help.c:1300 sql_help.c:1304 sql_help.c:1305 sql_help.c:1309 +#: sql_help.c:1311 sql_help.c:1312 sql_help.c:1313 sql_help.c:1314 +#: sql_help.c:1316 sql_help.c:1319 sql_help.c:1320 sql_help.c:1322 +#: sql_help.c:1325 sql_help.c:1327 sql_help.c:1328 sql_help.c:1375 +#: sql_help.c:1377 sql_help.c:1384 sql_help.c:1393 sql_help.c:1398 +#: sql_help.c:1651 sql_help.c:1654 sql_help.c:1658 sql_help.c:1694 +#: sql_help.c:1819 sql_help.c:1932 sql_help.c:1938 sql_help.c:1951 +#: sql_help.c:1952 sql_help.c:1953 sql_help.c:2274 sql_help.c:2287 +#: sql_help.c:2333 sql_help.c:2400 sql_help.c:2406 sql_help.c:2439 +#: sql_help.c:2669 sql_help.c:2704 sql_help.c:2706 sql_help.c:2814 +#: sql_help.c:2823 sql_help.c:2833 sql_help.c:2836 sql_help.c:2846 +#: sql_help.c:2850 sql_help.c:2873 sql_help.c:2875 sql_help.c:2882 +#: sql_help.c:2895 sql_help.c:2900 sql_help.c:2918 sql_help.c:3044 +#: sql_help.c:3184 sql_help.c:3802 sql_help.c:3803 sql_help.c:3896 +#: sql_help.c:3911 sql_help.c:3913 sql_help.c:3915 sql_help.c:4182 +#: sql_help.c:4183 sql_help.c:4300 sql_help.c:4454 sql_help.c:4460 +#: sql_help.c:4462 sql_help.c:4703 sql_help.c:4709 sql_help.c:4711 +#: sql_help.c:4752 sql_help.c:4754 sql_help.c:4756 sql_help.c:4804 +#: sql_help.c:4935 sql_help.c:4941 sql_help.c:4943 msgid "column_name" msgstr "column_name" -#: sql_help.c:444 sql_help.c:664 sql_help.c:1266 sql_help.c:1638 +#: sql_help.c:444 sql_help.c:666 sql_help.c:1283 sql_help.c:1659 msgid "new_column_name" msgstr "new_column_name" -#: sql_help.c:449 sql_help.c:540 sql_help.c:672 sql_help.c:862 sql_help.c:1000 -#: sql_help.c:1282 sql_help.c:1539 +#: sql_help.c:449 sql_help.c:540 sql_help.c:674 sql_help.c:866 sql_help.c:1005 +#: sql_help.c:1299 sql_help.c:1559 msgid "where action is one of:" msgstr "όπου action είναι ένα από:" -#: sql_help.c:451 sql_help.c:456 sql_help.c:1047 sql_help.c:1284 -#: sql_help.c:1289 sql_help.c:1541 sql_help.c:1545 sql_help.c:2156 -#: sql_help.c:2244 sql_help.c:2446 sql_help.c:2626 sql_help.c:2770 -#: sql_help.c:3043 sql_help.c:3921 +#: sql_help.c:451 sql_help.c:456 sql_help.c:1052 sql_help.c:1301 +#: sql_help.c:1306 sql_help.c:1561 sql_help.c:1565 sql_help.c:2187 +#: sql_help.c:2275 sql_help.c:2479 sql_help.c:2662 sql_help.c:2815 +#: sql_help.c:3091 sql_help.c:3998 msgid "data_type" msgstr "data_type" -#: sql_help.c:452 sql_help.c:457 sql_help.c:1285 sql_help.c:1290 -#: sql_help.c:1542 sql_help.c:1546 sql_help.c:2157 sql_help.c:2247 -#: sql_help.c:2369 sql_help.c:2771 sql_help.c:2779 sql_help.c:2792 -#: sql_help.c:2806 sql_help.c:3044 sql_help.c:3050 sql_help.c:3829 +#: sql_help.c:452 sql_help.c:457 sql_help.c:1302 sql_help.c:1307 +#: sql_help.c:1562 sql_help.c:1566 sql_help.c:2188 sql_help.c:2278 +#: sql_help.c:2402 sql_help.c:2816 sql_help.c:2825 sql_help.c:2838 +#: sql_help.c:2852 sql_help.c:3092 sql_help.c:3098 sql_help.c:3906 msgid "collation" msgstr "collation" -#: sql_help.c:453 sql_help.c:1286 sql_help.c:2248 sql_help.c:2257 -#: sql_help.c:2772 sql_help.c:2788 sql_help.c:2801 +#: sql_help.c:453 sql_help.c:1303 sql_help.c:2279 sql_help.c:2288 +#: sql_help.c:2818 sql_help.c:2834 sql_help.c:2847 msgid "column_constraint" msgstr "column_constraint" -#: sql_help.c:463 sql_help.c:603 sql_help.c:674 sql_help.c:1304 sql_help.c:4670 +#: sql_help.c:463 sql_help.c:604 sql_help.c:676 sql_help.c:1321 sql_help.c:4801 msgid "integer" msgstr "integer" -#: sql_help.c:465 sql_help.c:468 sql_help.c:676 sql_help.c:679 sql_help.c:1306 -#: sql_help.c:1309 +#: sql_help.c:465 sql_help.c:468 sql_help.c:678 sql_help.c:681 sql_help.c:1323 +#: sql_help.c:1326 msgid "attribute_option" msgstr "attribute_option" -#: sql_help.c:473 sql_help.c:1311 sql_help.c:2249 sql_help.c:2258 -#: sql_help.c:2773 sql_help.c:2789 sql_help.c:2802 +#: sql_help.c:473 sql_help.c:1330 sql_help.c:2280 sql_help.c:2289 +#: sql_help.c:2819 sql_help.c:2835 sql_help.c:2848 msgid "table_constraint" msgstr "table_constraint" -#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1316 -#: sql_help.c:1317 sql_help.c:1318 sql_help.c:1319 sql_help.c:1842 +#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1335 +#: sql_help.c:1336 sql_help.c:1337 sql_help.c:1338 sql_help.c:1873 msgid "trigger_name" msgstr "trigger_name" -#: sql_help.c:480 sql_help.c:481 sql_help.c:1329 sql_help.c:1330 -#: sql_help.c:2250 sql_help.c:2255 sql_help.c:2776 sql_help.c:2799 +#: sql_help.c:480 sql_help.c:481 sql_help.c:1348 sql_help.c:1349 +#: sql_help.c:2281 sql_help.c:2286 sql_help.c:2822 sql_help.c:2845 msgid "parent_table" msgstr "parent_table" -#: sql_help.c:539 sql_help.c:595 sql_help.c:661 sql_help.c:861 sql_help.c:999 -#: sql_help.c:1498 sql_help.c:2187 +#: sql_help.c:539 sql_help.c:596 sql_help.c:663 sql_help.c:865 sql_help.c:1004 +#: sql_help.c:1518 sql_help.c:2218 msgid "extension_name" msgstr "extension_name" -#: sql_help.c:541 sql_help.c:1001 sql_help.c:2305 +#: sql_help.c:541 sql_help.c:1006 sql_help.c:2337 msgid "execution_cost" msgstr "execution_cost" -#: sql_help.c:542 sql_help.c:1002 sql_help.c:2306 +#: sql_help.c:542 sql_help.c:1007 sql_help.c:2338 msgid "result_rows" msgstr "result_rows" -#: sql_help.c:543 sql_help.c:2307 +#: sql_help.c:543 sql_help.c:2339 msgid "support_function" msgstr "support_function" -#: sql_help.c:564 sql_help.c:566 sql_help.c:925 sql_help.c:933 sql_help.c:937 -#: sql_help.c:940 sql_help.c:943 sql_help.c:1580 sql_help.c:1588 -#: sql_help.c:1592 sql_help.c:1595 sql_help.c:1598 sql_help.c:2604 -#: sql_help.c:2606 sql_help.c:2609 sql_help.c:2610 sql_help.c:3736 -#: sql_help.c:3740 sql_help.c:3743 sql_help.c:3745 sql_help.c:3747 -#: sql_help.c:3749 sql_help.c:3751 sql_help.c:3757 sql_help.c:3759 -#: sql_help.c:3761 sql_help.c:3763 sql_help.c:3765 sql_help.c:3767 -#: sql_help.c:3769 sql_help.c:3770 sql_help.c:4084 sql_help.c:4088 -#: sql_help.c:4091 sql_help.c:4093 sql_help.c:4095 sql_help.c:4097 -#: sql_help.c:4099 sql_help.c:4105 sql_help.c:4107 sql_help.c:4109 -#: sql_help.c:4111 sql_help.c:4113 sql_help.c:4115 sql_help.c:4117 -#: sql_help.c:4118 +#: sql_help.c:565 sql_help.c:567 sql_help.c:930 sql_help.c:938 sql_help.c:942 +#: sql_help.c:945 sql_help.c:948 sql_help.c:1601 sql_help.c:1609 +#: sql_help.c:1613 sql_help.c:1616 sql_help.c:1619 sql_help.c:2640 +#: sql_help.c:2642 sql_help.c:2645 sql_help.c:2646 sql_help.c:3800 +#: sql_help.c:3801 sql_help.c:3805 sql_help.c:3806 sql_help.c:3809 +#: sql_help.c:3810 sql_help.c:3812 sql_help.c:3813 sql_help.c:3815 +#: sql_help.c:3816 sql_help.c:3818 sql_help.c:3819 sql_help.c:3821 +#: sql_help.c:3822 sql_help.c:3828 sql_help.c:3829 sql_help.c:3831 +#: sql_help.c:3832 sql_help.c:3834 sql_help.c:3835 sql_help.c:3837 +#: sql_help.c:3838 sql_help.c:3840 sql_help.c:3841 sql_help.c:3843 +#: sql_help.c:3844 sql_help.c:3846 sql_help.c:3847 sql_help.c:4180 +#: sql_help.c:4181 sql_help.c:4185 sql_help.c:4186 sql_help.c:4189 +#: sql_help.c:4190 sql_help.c:4192 sql_help.c:4193 sql_help.c:4195 +#: sql_help.c:4196 sql_help.c:4198 sql_help.c:4199 sql_help.c:4201 +#: sql_help.c:4202 sql_help.c:4208 sql_help.c:4209 sql_help.c:4211 +#: sql_help.c:4212 sql_help.c:4214 sql_help.c:4215 sql_help.c:4217 +#: sql_help.c:4218 sql_help.c:4220 sql_help.c:4221 sql_help.c:4223 +#: sql_help.c:4224 sql_help.c:4226 sql_help.c:4227 msgid "role_specification" msgstr "role_specification" -#: sql_help.c:565 sql_help.c:567 sql_help.c:1611 sql_help.c:2130 -#: sql_help.c:2612 sql_help.c:3119 sql_help.c:3570 sql_help.c:4427 +#: sql_help.c:566 sql_help.c:568 sql_help.c:1632 sql_help.c:2161 +#: sql_help.c:2648 sql_help.c:3169 sql_help.c:3620 sql_help.c:4546 msgid "user_name" msgstr "user_name" -#: sql_help.c:568 sql_help.c:945 sql_help.c:1600 sql_help.c:2611 -#: sql_help.c:3771 sql_help.c:4119 +#: sql_help.c:569 sql_help.c:950 sql_help.c:1621 sql_help.c:2647 +#: sql_help.c:3848 sql_help.c:4228 msgid "where role_specification can be:" msgstr "όπου role_specification μπορεί να είναι:" -#: sql_help.c:570 +#: sql_help.c:571 msgid "group_name" msgstr "group_name" -#: sql_help.c:591 sql_help.c:1376 sql_help.c:2136 sql_help.c:2376 -#: sql_help.c:2410 sql_help.c:2784 sql_help.c:2797 sql_help.c:2811 -#: sql_help.c:2852 sql_help.c:2876 sql_help.c:2888 sql_help.c:3764 -#: sql_help.c:4112 +#: sql_help.c:592 sql_help.c:1396 sql_help.c:2167 sql_help.c:2409 +#: sql_help.c:2443 sql_help.c:2830 sql_help.c:2843 sql_help.c:2857 +#: sql_help.c:2898 sql_help.c:2922 sql_help.c:2934 sql_help.c:3839 +#: sql_help.c:4219 msgid "tablespace_name" msgstr "group_name" -#: sql_help.c:593 sql_help.c:681 sql_help.c:1324 sql_help.c:1333 -#: sql_help.c:1371 sql_help.c:1722 +#: sql_help.c:594 sql_help.c:685 sql_help.c:1343 sql_help.c:1352 +#: sql_help.c:1391 sql_help.c:1748 sql_help.c:1751 msgid "index_name" msgstr "index_name" -#: sql_help.c:597 sql_help.c:600 sql_help.c:682 sql_help.c:684 sql_help.c:1326 -#: sql_help.c:1328 sql_help.c:1374 sql_help.c:2374 sql_help.c:2408 -#: sql_help.c:2782 sql_help.c:2795 sql_help.c:2809 sql_help.c:2850 -#: sql_help.c:2874 +#: sql_help.c:598 sql_help.c:601 sql_help.c:686 sql_help.c:688 sql_help.c:1345 +#: sql_help.c:1347 sql_help.c:1394 sql_help.c:2407 sql_help.c:2441 +#: sql_help.c:2828 sql_help.c:2841 sql_help.c:2855 sql_help.c:2896 +#: sql_help.c:2920 msgid "storage_parameter" msgstr "storage_parameter" -#: sql_help.c:602 +#: sql_help.c:603 msgid "column_number" msgstr "column_number" -#: sql_help.c:626 sql_help.c:1805 sql_help.c:4202 +#: sql_help.c:627 sql_help.c:1836 sql_help.c:4311 msgid "large_object_oid" msgstr "large_object_oid" -#: sql_help.c:713 sql_help.c:2431 +#: sql_help.c:684 sql_help.c:1329 sql_help.c:1367 sql_help.c:2817 +#, fuzzy +#| msgid "sampling_method" +msgid "compression_method" +msgstr "sampling_method" + +#: sql_help.c:717 sql_help.c:2464 msgid "res_proc" msgstr "res_proc" -#: sql_help.c:714 sql_help.c:2432 +#: sql_help.c:718 sql_help.c:2465 msgid "join_proc" msgstr "join_proc" -#: sql_help.c:766 sql_help.c:778 sql_help.c:2449 +#: sql_help.c:770 sql_help.c:782 sql_help.c:2482 msgid "strategy_number" msgstr "strategy_number" -#: sql_help.c:768 sql_help.c:769 sql_help.c:772 sql_help.c:773 sql_help.c:779 -#: sql_help.c:780 sql_help.c:782 sql_help.c:783 sql_help.c:2451 sql_help.c:2452 -#: sql_help.c:2455 sql_help.c:2456 +#: sql_help.c:772 sql_help.c:773 sql_help.c:776 sql_help.c:777 sql_help.c:783 +#: sql_help.c:784 sql_help.c:786 sql_help.c:787 sql_help.c:2484 sql_help.c:2485 +#: sql_help.c:2488 sql_help.c:2489 msgid "op_type" msgstr "op_type" -#: sql_help.c:770 sql_help.c:2453 +#: sql_help.c:774 sql_help.c:2486 msgid "sort_family_name" msgstr "index_name" -#: sql_help.c:771 sql_help.c:781 sql_help.c:2454 +#: sql_help.c:775 sql_help.c:785 sql_help.c:2487 msgid "support_number" msgstr "support_number" -#: sql_help.c:775 sql_help.c:2071 sql_help.c:2458 sql_help.c:2965 -#: sql_help.c:2967 +#: sql_help.c:779 sql_help.c:2102 sql_help.c:2491 sql_help.c:3011 +#: sql_help.c:3013 msgid "argument_type" msgstr "argument_type" -#: sql_help.c:806 sql_help.c:809 sql_help.c:880 sql_help.c:882 sql_help.c:884 -#: sql_help.c:1015 sql_help.c:1054 sql_help.c:1494 sql_help.c:1497 -#: sql_help.c:1672 sql_help.c:1721 sql_help.c:1790 sql_help.c:1815 -#: sql_help.c:1828 sql_help.c:1843 sql_help.c:1900 sql_help.c:1906 -#: sql_help.c:2242 sql_help.c:2254 sql_help.c:2365 sql_help.c:2405 -#: sql_help.c:2482 sql_help.c:2525 sql_help.c:2581 sql_help.c:2632 -#: sql_help.c:2663 sql_help.c:2768 sql_help.c:2785 sql_help.c:2798 -#: sql_help.c:2871 sql_help.c:2991 sql_help.c:3168 sql_help.c:3391 -#: sql_help.c:3440 sql_help.c:3546 sql_help.c:3734 sql_help.c:3739 -#: sql_help.c:3785 sql_help.c:3817 sql_help.c:4082 sql_help.c:4087 -#: sql_help.c:4190 sql_help.c:4297 sql_help.c:4299 sql_help.c:4348 -#: sql_help.c:4387 sql_help.c:4536 sql_help.c:4538 sql_help.c:4587 -#: sql_help.c:4621 sql_help.c:4672 sql_help.c:4756 sql_help.c:4758 -#: sql_help.c:4807 +#: sql_help.c:810 sql_help.c:813 sql_help.c:884 sql_help.c:886 sql_help.c:888 +#: sql_help.c:1020 sql_help.c:1059 sql_help.c:1514 sql_help.c:1517 +#: sql_help.c:1693 sql_help.c:1747 sql_help.c:1750 sql_help.c:1821 +#: sql_help.c:1846 sql_help.c:1859 sql_help.c:1874 sql_help.c:1931 +#: sql_help.c:1937 sql_help.c:2273 sql_help.c:2285 sql_help.c:2398 +#: sql_help.c:2438 sql_help.c:2515 sql_help.c:2560 sql_help.c:2616 +#: sql_help.c:2668 sql_help.c:2701 sql_help.c:2708 sql_help.c:2813 +#: sql_help.c:2831 sql_help.c:2844 sql_help.c:2917 sql_help.c:3037 +#: sql_help.c:3218 sql_help.c:3441 sql_help.c:3490 sql_help.c:3596 +#: sql_help.c:3798 sql_help.c:3804 sql_help.c:3862 sql_help.c:3894 +#: sql_help.c:4178 sql_help.c:4184 sql_help.c:4299 sql_help.c:4408 +#: sql_help.c:4410 sql_help.c:4467 sql_help.c:4506 sql_help.c:4657 +#: sql_help.c:4659 sql_help.c:4716 sql_help.c:4750 sql_help.c:4803 +#: sql_help.c:4889 sql_help.c:4891 sql_help.c:4948 msgid "table_name" msgstr "table_name" -#: sql_help.c:811 sql_help.c:2484 +#: sql_help.c:815 sql_help.c:2517 msgid "using_expression" msgstr "using_expression" -#: sql_help.c:812 sql_help.c:2485 +#: sql_help.c:816 sql_help.c:2518 msgid "check_expression" msgstr "check_expression" -#: sql_help.c:886 sql_help.c:2526 +#: sql_help.c:890 sql_help.c:2561 msgid "publication_parameter" msgstr "publication_parameter" -#: sql_help.c:929 sql_help.c:1584 sql_help.c:2344 sql_help.c:2558 -#: sql_help.c:3102 +#: sql_help.c:934 sql_help.c:1605 sql_help.c:2377 sql_help.c:2593 +#: sql_help.c:3152 msgid "password" msgstr "password" -#: sql_help.c:930 sql_help.c:1585 sql_help.c:2345 sql_help.c:2559 -#: sql_help.c:3103 +#: sql_help.c:935 sql_help.c:1606 sql_help.c:2378 sql_help.c:2594 +#: sql_help.c:3153 msgid "timestamp" msgstr "timestamp" -#: sql_help.c:934 sql_help.c:938 sql_help.c:941 sql_help.c:944 sql_help.c:1589 -#: sql_help.c:1593 sql_help.c:1596 sql_help.c:1599 sql_help.c:3744 -#: sql_help.c:4092 +#: sql_help.c:939 sql_help.c:943 sql_help.c:946 sql_help.c:949 sql_help.c:1610 +#: sql_help.c:1614 sql_help.c:1617 sql_help.c:1620 sql_help.c:3811 +#: sql_help.c:4191 msgid "database_name" msgstr "database_name" -#: sql_help.c:1048 sql_help.c:2627 +#: sql_help.c:1053 sql_help.c:2663 msgid "increment" msgstr "increment" -#: sql_help.c:1049 sql_help.c:2628 +#: sql_help.c:1054 sql_help.c:2664 msgid "minvalue" msgstr "minvalue" -#: sql_help.c:1050 sql_help.c:2629 +#: sql_help.c:1055 sql_help.c:2665 msgid "maxvalue" msgstr "maxvalue" -#: sql_help.c:1051 sql_help.c:2630 sql_help.c:4295 sql_help.c:4385 -#: sql_help.c:4534 sql_help.c:4689 sql_help.c:4754 +#: sql_help.c:1056 sql_help.c:2666 sql_help.c:4406 sql_help.c:4504 +#: sql_help.c:4655 sql_help.c:4820 sql_help.c:4887 msgid "start" msgstr "start" -#: sql_help.c:1052 sql_help.c:1301 +#: sql_help.c:1057 sql_help.c:1318 msgid "restart" msgstr "restart" -#: sql_help.c:1053 sql_help.c:2631 +#: sql_help.c:1058 sql_help.c:2667 msgid "cache" msgstr "cache" -#: sql_help.c:1097 +#: sql_help.c:1102 msgid "new_target" msgstr "new_target" -#: sql_help.c:1113 sql_help.c:2675 +#: sql_help.c:1120 sql_help.c:2720 msgid "conninfo" msgstr "conninfo" -#: sql_help.c:1115 sql_help.c:2676 +#: sql_help.c:1122 sql_help.c:1126 sql_help.c:1130 sql_help.c:2721 msgid "publication_name" msgstr "publication_name" -#: sql_help.c:1116 +#: sql_help.c:1123 sql_help.c:1127 sql_help.c:1131 msgid "set_publication_option" msgstr "set_publication_option" -#: sql_help.c:1119 +#: sql_help.c:1134 msgid "refresh_option" msgstr "refresh_option" -#: sql_help.c:1124 sql_help.c:2677 +#: sql_help.c:1139 sql_help.c:2722 msgid "subscription_parameter" msgstr "subscription_parameter" -#: sql_help.c:1278 sql_help.c:1281 +#: sql_help.c:1295 sql_help.c:1298 msgid "partition_name" msgstr "partition_name" -#: sql_help.c:1279 sql_help.c:2259 sql_help.c:2803 +#: sql_help.c:1296 sql_help.c:2290 sql_help.c:2849 msgid "partition_bound_spec" msgstr "partition_bound_spec" -#: sql_help.c:1298 sql_help.c:1345 sql_help.c:2817 +#: sql_help.c:1315 sql_help.c:1364 sql_help.c:2863 msgid "sequence_options" msgstr "sequence_options" -#: sql_help.c:1300 +#: sql_help.c:1317 msgid "sequence_option" msgstr "sequence_option" -#: sql_help.c:1312 +#: sql_help.c:1331 msgid "table_constraint_using_index" msgstr "table_constraint_using_index" -#: sql_help.c:1320 sql_help.c:1321 sql_help.c:1322 sql_help.c:1323 +#: sql_help.c:1339 sql_help.c:1340 sql_help.c:1341 sql_help.c:1342 msgid "rewrite_rule_name" msgstr "rewrite_rule_name" -#: sql_help.c:1334 sql_help.c:2842 +#: sql_help.c:1353 sql_help.c:2888 msgid "and partition_bound_spec is:" msgstr "και partition_bound_spec είναι:" -#: sql_help.c:1335 sql_help.c:1336 sql_help.c:1337 sql_help.c:2843 -#: sql_help.c:2844 sql_help.c:2845 +#: sql_help.c:1354 sql_help.c:1355 sql_help.c:1356 sql_help.c:2889 +#: sql_help.c:2890 sql_help.c:2891 msgid "partition_bound_expr" msgstr "partition_bound_expr" -#: sql_help.c:1338 sql_help.c:1339 sql_help.c:2846 sql_help.c:2847 +#: sql_help.c:1357 sql_help.c:1358 sql_help.c:2892 sql_help.c:2893 msgid "numeric_literal" msgstr "numeric_literal" -#: sql_help.c:1340 +#: sql_help.c:1359 msgid "and column_constraint is:" msgstr "και column_constraint είναι:" -#: sql_help.c:1343 sql_help.c:2266 sql_help.c:2299 sql_help.c:2505 -#: sql_help.c:2815 +#: sql_help.c:1362 sql_help.c:2297 sql_help.c:2331 sql_help.c:2539 +#: sql_help.c:2861 msgid "default_expr" msgstr "default_expr" -#: sql_help.c:1344 sql_help.c:2267 sql_help.c:2816 +#: sql_help.c:1363 sql_help.c:2298 sql_help.c:2862 msgid "generation_expr" msgstr "generation_expr" -#: sql_help.c:1346 sql_help.c:1347 sql_help.c:1356 sql_help.c:1358 -#: sql_help.c:1362 sql_help.c:2818 sql_help.c:2819 sql_help.c:2828 -#: sql_help.c:2830 sql_help.c:2834 +#: sql_help.c:1365 sql_help.c:1366 sql_help.c:1376 sql_help.c:1378 +#: sql_help.c:1382 sql_help.c:2864 sql_help.c:2865 sql_help.c:2874 +#: sql_help.c:2876 sql_help.c:2880 msgid "index_parameters" msgstr "index_parameters" -#: sql_help.c:1348 sql_help.c:1365 sql_help.c:2820 sql_help.c:2837 +#: sql_help.c:1368 sql_help.c:1385 sql_help.c:2866 sql_help.c:2883 msgid "reftable" msgstr "reftable" -#: sql_help.c:1349 sql_help.c:1366 sql_help.c:2821 sql_help.c:2838 +#: sql_help.c:1369 sql_help.c:1386 sql_help.c:2867 sql_help.c:2884 msgid "refcolumn" msgstr "refcolumn" -#: sql_help.c:1350 sql_help.c:1351 sql_help.c:1367 sql_help.c:1368 -#: sql_help.c:2822 sql_help.c:2823 sql_help.c:2839 sql_help.c:2840 +#: sql_help.c:1370 sql_help.c:1371 sql_help.c:1387 sql_help.c:1388 +#: sql_help.c:2868 sql_help.c:2869 sql_help.c:2885 sql_help.c:2886 msgid "referential_action" msgstr "referential_action" -#: sql_help.c:1352 sql_help.c:2268 sql_help.c:2824 +#: sql_help.c:1372 sql_help.c:2299 sql_help.c:2870 msgid "and table_constraint is:" msgstr "και table_constraint είναι:" -#: sql_help.c:1360 sql_help.c:2832 +#: sql_help.c:1380 sql_help.c:2878 msgid "exclude_element" msgstr "exclude_element" -#: sql_help.c:1361 sql_help.c:2833 sql_help.c:4293 sql_help.c:4383 -#: sql_help.c:4532 sql_help.c:4687 sql_help.c:4752 +#: sql_help.c:1381 sql_help.c:2879 sql_help.c:4404 sql_help.c:4502 +#: sql_help.c:4653 sql_help.c:4818 sql_help.c:4885 msgid "operator" msgstr "operator" -#: sql_help.c:1363 sql_help.c:2377 sql_help.c:2835 +#: sql_help.c:1383 sql_help.c:2410 sql_help.c:2881 msgid "predicate" msgstr "predicate" -#: sql_help.c:1369 +#: sql_help.c:1389 msgid "and table_constraint_using_index is:" msgstr "και table_constraint_using_index είναι:" -#: sql_help.c:1372 sql_help.c:2848 +#: sql_help.c:1392 sql_help.c:2894 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" -msgstr "" -"index_parameters για περιορισμούς UNIQUE, PRIMARY KEY και EXCLUDE είναι:" +msgstr "index_parameters για περιορισμούς UNIQUE, PRIMARY KEY και EXCLUDE είναι:" -#: sql_help.c:1377 sql_help.c:2853 +#: sql_help.c:1397 sql_help.c:2899 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "exclude_element σε έναν περιορισμό τύπου EXCLUDE είναι:" -#: sql_help.c:1380 sql_help.c:2370 sql_help.c:2780 sql_help.c:2793 -#: sql_help.c:2807 sql_help.c:2856 sql_help.c:3830 +#: sql_help.c:1400 sql_help.c:2403 sql_help.c:2826 sql_help.c:2839 +#: sql_help.c:2853 sql_help.c:2902 sql_help.c:3907 msgid "opclass" msgstr "opclass" -#: sql_help.c:1396 sql_help.c:1399 sql_help.c:2891 +#: sql_help.c:1416 sql_help.c:1419 sql_help.c:2937 msgid "tablespace_option" msgstr "tablespace_option" -#: sql_help.c:1420 sql_help.c:1423 sql_help.c:1429 sql_help.c:1433 +#: sql_help.c:1440 sql_help.c:1443 sql_help.c:1449 sql_help.c:1453 msgid "token_type" msgstr "token_type" -#: sql_help.c:1421 sql_help.c:1424 +#: sql_help.c:1441 sql_help.c:1444 msgid "dictionary_name" msgstr "dictionary_name" -#: sql_help.c:1426 sql_help.c:1430 +#: sql_help.c:1446 sql_help.c:1450 msgid "old_dictionary" msgstr "old_dictionary" -#: sql_help.c:1427 sql_help.c:1431 +#: sql_help.c:1447 sql_help.c:1451 msgid "new_dictionary" msgstr "new_dictionary" -#: sql_help.c:1526 sql_help.c:1540 sql_help.c:1543 sql_help.c:1544 -#: sql_help.c:3042 +#: sql_help.c:1546 sql_help.c:1560 sql_help.c:1563 sql_help.c:1564 +#: sql_help.c:3090 msgid "attribute_name" msgstr "attribute_name" -#: sql_help.c:1527 +#: sql_help.c:1547 msgid "new_attribute_name" msgstr "new_attribute_name" -#: sql_help.c:1531 sql_help.c:1535 +#: sql_help.c:1551 sql_help.c:1555 msgid "new_enum_value" msgstr "new_enum_value" -#: sql_help.c:1532 +#: sql_help.c:1552 msgid "neighbor_enum_value" msgstr "neighbor_enum_value" -#: sql_help.c:1534 +#: sql_help.c:1554 msgid "existing_enum_value" msgstr "existing_enum_value" -#: sql_help.c:1537 +#: sql_help.c:1557 msgid "property" msgstr "property" -#: sql_help.c:1612 sql_help.c:2251 sql_help.c:2260 sql_help.c:2643 -#: sql_help.c:3120 sql_help.c:3571 sql_help.c:3750 sql_help.c:3786 -#: sql_help.c:4098 +#: sql_help.c:1633 sql_help.c:2282 sql_help.c:2291 sql_help.c:2679 +#: sql_help.c:3170 sql_help.c:3621 sql_help.c:3820 sql_help.c:3863 +#: sql_help.c:4200 msgid "server_name" msgstr "server_name" -#: sql_help.c:1644 sql_help.c:1647 sql_help.c:3135 +#: sql_help.c:1665 sql_help.c:1668 sql_help.c:3185 msgid "view_option_name" msgstr "view_option_name" -#: sql_help.c:1645 sql_help.c:3136 +#: sql_help.c:1666 sql_help.c:3186 msgid "view_option_value" msgstr "view_option_value" -#: sql_help.c:1666 sql_help.c:1667 sql_help.c:4659 sql_help.c:4660 +#: sql_help.c:1687 sql_help.c:1688 sql_help.c:4789 sql_help.c:4790 msgid "table_and_columns" msgstr "table_and_columns" -#: sql_help.c:1668 sql_help.c:1912 sql_help.c:3619 sql_help.c:3963 -#: sql_help.c:4661 +#: sql_help.c:1689 sql_help.c:1752 sql_help.c:1943 sql_help.c:3669 +#: sql_help.c:4042 sql_help.c:4791 msgid "where option can be one of:" msgstr "όπου option μπορεί να είναι ένα από:" -#: sql_help.c:1669 sql_help.c:1670 sql_help.c:1914 sql_help.c:1917 -#: sql_help.c:2096 sql_help.c:3620 sql_help.c:3621 sql_help.c:3622 -#: sql_help.c:3623 sql_help.c:3624 sql_help.c:3625 sql_help.c:3626 -#: sql_help.c:3627 sql_help.c:4662 sql_help.c:4663 sql_help.c:4664 -#: sql_help.c:4665 sql_help.c:4666 sql_help.c:4667 sql_help.c:4668 -#: sql_help.c:4669 +#: sql_help.c:1690 sql_help.c:1691 sql_help.c:1753 sql_help.c:1945 +#: sql_help.c:1948 sql_help.c:2127 sql_help.c:3670 sql_help.c:3671 +#: sql_help.c:3672 sql_help.c:3673 sql_help.c:3674 sql_help.c:3675 +#: sql_help.c:3676 sql_help.c:3677 sql_help.c:4043 sql_help.c:4045 +#: sql_help.c:4792 sql_help.c:4793 sql_help.c:4794 sql_help.c:4795 +#: sql_help.c:4796 sql_help.c:4797 sql_help.c:4798 sql_help.c:4799 +#: sql_help.c:4800 msgid "boolean" msgstr "boolean" -#: sql_help.c:1671 sql_help.c:4671 +#: sql_help.c:1692 sql_help.c:4802 msgid "and table_and_columns is:" msgstr "και table_and_columns είναι:" -#: sql_help.c:1687 sql_help.c:4443 sql_help.c:4445 sql_help.c:4469 +#: sql_help.c:1708 sql_help.c:4562 sql_help.c:4564 sql_help.c:4588 msgid "transaction_mode" msgstr "transaction_mode" -#: sql_help.c:1688 sql_help.c:4446 sql_help.c:4470 +#: sql_help.c:1709 sql_help.c:4565 sql_help.c:4589 msgid "where transaction_mode is one of:" msgstr "όπου transaction_mode είναι ένα από:" -#: sql_help.c:1697 sql_help.c:4303 sql_help.c:4312 sql_help.c:4316 -#: sql_help.c:4320 sql_help.c:4323 sql_help.c:4542 sql_help.c:4551 -#: sql_help.c:4555 sql_help.c:4559 sql_help.c:4562 sql_help.c:4762 -#: sql_help.c:4771 sql_help.c:4775 sql_help.c:4779 sql_help.c:4782 +#: sql_help.c:1718 sql_help.c:4414 sql_help.c:4423 sql_help.c:4427 +#: sql_help.c:4431 sql_help.c:4434 sql_help.c:4663 sql_help.c:4672 +#: sql_help.c:4676 sql_help.c:4680 sql_help.c:4683 sql_help.c:4895 +#: sql_help.c:4904 sql_help.c:4908 sql_help.c:4912 sql_help.c:4915 msgid "argument" msgstr "argument" -#: sql_help.c:1787 +#: sql_help.c:1818 msgid "relation_name" msgstr "relation_name" -#: sql_help.c:1792 sql_help.c:3746 sql_help.c:4094 +#: sql_help.c:1823 sql_help.c:3814 sql_help.c:4194 msgid "domain_name" msgstr "domain_name" -#: sql_help.c:1814 +#: sql_help.c:1845 msgid "policy_name" msgstr "policy_name" -#: sql_help.c:1827 +#: sql_help.c:1858 msgid "rule_name" msgstr "rule_name" -#: sql_help.c:1846 +#: sql_help.c:1877 msgid "text" msgstr "text" -#: sql_help.c:1871 sql_help.c:3930 sql_help.c:4135 +#: sql_help.c:1902 sql_help.c:4007 sql_help.c:4244 msgid "transaction_id" msgstr "transaction_id" -#: sql_help.c:1902 sql_help.c:1909 sql_help.c:3856 +#: sql_help.c:1933 sql_help.c:1940 sql_help.c:3933 msgid "filename" msgstr "filename" -#: sql_help.c:1903 sql_help.c:1910 sql_help.c:2583 sql_help.c:2584 -#: sql_help.c:2585 +#: sql_help.c:1934 sql_help.c:1941 sql_help.c:2618 sql_help.c:2619 +#: sql_help.c:2620 msgid "command" msgstr "command" -#: sql_help.c:1905 sql_help.c:2582 sql_help.c:2994 sql_help.c:3171 -#: sql_help.c:3840 sql_help.c:4286 sql_help.c:4288 sql_help.c:4376 -#: sql_help.c:4378 sql_help.c:4525 sql_help.c:4527 sql_help.c:4630 -#: sql_help.c:4745 sql_help.c:4747 +#: sql_help.c:1936 sql_help.c:2617 sql_help.c:3040 sql_help.c:3221 +#: sql_help.c:3917 sql_help.c:4397 sql_help.c:4399 sql_help.c:4495 +#: sql_help.c:4497 sql_help.c:4646 sql_help.c:4648 sql_help.c:4759 +#: sql_help.c:4878 sql_help.c:4880 msgid "condition" msgstr "condition" -#: sql_help.c:1908 sql_help.c:2411 sql_help.c:2877 sql_help.c:3137 -#: sql_help.c:3155 sql_help.c:3821 +#: sql_help.c:1939 sql_help.c:2444 sql_help.c:2923 sql_help.c:3187 +#: sql_help.c:3205 sql_help.c:3898 msgid "query" msgstr "query" -#: sql_help.c:1913 +#: sql_help.c:1944 msgid "format_name" msgstr "format_name" -#: sql_help.c:1915 +#: sql_help.c:1946 msgid "delimiter_character" msgstr "delimiter_character" -#: sql_help.c:1916 +#: sql_help.c:1947 msgid "null_string" msgstr "null_string" -#: sql_help.c:1918 +#: sql_help.c:1949 msgid "quote_character" msgstr "quote_character" -#: sql_help.c:1919 +#: sql_help.c:1950 msgid "escape_character" msgstr "escape_character" -#: sql_help.c:1923 +#: sql_help.c:1954 msgid "encoding_name" msgstr "encoding_name" -#: sql_help.c:1934 +#: sql_help.c:1965 msgid "access_method_type" msgstr "access_method_type" -#: sql_help.c:2005 sql_help.c:2024 sql_help.c:2027 +#: sql_help.c:2036 sql_help.c:2055 sql_help.c:2058 msgid "arg_data_type" msgstr "arg_data_type" -#: sql_help.c:2006 sql_help.c:2028 sql_help.c:2036 +#: sql_help.c:2037 sql_help.c:2059 sql_help.c:2067 msgid "sfunc" msgstr "sfunc" -#: sql_help.c:2007 sql_help.c:2029 sql_help.c:2037 +#: sql_help.c:2038 sql_help.c:2060 sql_help.c:2068 msgid "state_data_type" msgstr "state_data_type" -#: sql_help.c:2008 sql_help.c:2030 sql_help.c:2038 +#: sql_help.c:2039 sql_help.c:2061 sql_help.c:2069 msgid "state_data_size" msgstr "state_data_size" -#: sql_help.c:2009 sql_help.c:2031 sql_help.c:2039 +#: sql_help.c:2040 sql_help.c:2062 sql_help.c:2070 msgid "ffunc" msgstr "ffunc" -#: sql_help.c:2010 sql_help.c:2040 +#: sql_help.c:2041 sql_help.c:2071 msgid "combinefunc" msgstr "combinefunc" -#: sql_help.c:2011 sql_help.c:2041 +#: sql_help.c:2042 sql_help.c:2072 msgid "serialfunc" msgstr "serialfunc" -#: sql_help.c:2012 sql_help.c:2042 +#: sql_help.c:2043 sql_help.c:2073 msgid "deserialfunc" msgstr "deserialfunc" -#: sql_help.c:2013 sql_help.c:2032 sql_help.c:2043 +#: sql_help.c:2044 sql_help.c:2063 sql_help.c:2074 msgid "initial_condition" msgstr "initial_condition" -#: sql_help.c:2014 sql_help.c:2044 +#: sql_help.c:2045 sql_help.c:2075 msgid "msfunc" msgstr "msfunc" -#: sql_help.c:2015 sql_help.c:2045 +#: sql_help.c:2046 sql_help.c:2076 msgid "minvfunc" msgstr "minvfunc" -#: sql_help.c:2016 sql_help.c:2046 +#: sql_help.c:2047 sql_help.c:2077 msgid "mstate_data_type" msgstr "mstate_data_type" -#: sql_help.c:2017 sql_help.c:2047 +#: sql_help.c:2048 sql_help.c:2078 msgid "mstate_data_size" msgstr "mstate_data_size" -#: sql_help.c:2018 sql_help.c:2048 +#: sql_help.c:2049 sql_help.c:2079 msgid "mffunc" msgstr "mffunc" -#: sql_help.c:2019 sql_help.c:2049 +#: sql_help.c:2050 sql_help.c:2080 msgid "minitial_condition" msgstr "minitial_condition" -#: sql_help.c:2020 sql_help.c:2050 +#: sql_help.c:2051 sql_help.c:2081 msgid "sort_operator" msgstr "sort_operator" -#: sql_help.c:2033 +#: sql_help.c:2064 msgid "or the old syntax" msgstr "ή την παλαιά σύνταξη" -#: sql_help.c:2035 +#: sql_help.c:2066 msgid "base_type" msgstr "base_type" -#: sql_help.c:2092 sql_help.c:2133 +#: sql_help.c:2123 sql_help.c:2164 msgid "locale" msgstr "locale" -#: sql_help.c:2093 sql_help.c:2134 +#: sql_help.c:2124 sql_help.c:2165 msgid "lc_collate" msgstr "lc_collate" -#: sql_help.c:2094 sql_help.c:2135 +#: sql_help.c:2125 sql_help.c:2166 msgid "lc_ctype" msgstr "lc_ctype" -#: sql_help.c:2095 sql_help.c:4188 +#: sql_help.c:2126 sql_help.c:4297 msgid "provider" msgstr "provider" -#: sql_help.c:2097 sql_help.c:2189 +#: sql_help.c:2128 sql_help.c:2220 msgid "version" msgstr "version" -#: sql_help.c:2099 +#: sql_help.c:2130 msgid "existing_collation" msgstr "existing_collation" -#: sql_help.c:2109 +#: sql_help.c:2140 msgid "source_encoding" msgstr "source_encoding" -#: sql_help.c:2110 +#: sql_help.c:2141 msgid "dest_encoding" msgstr "dest_encoding" -#: sql_help.c:2131 sql_help.c:2917 +#: sql_help.c:2162 sql_help.c:2963 msgid "template" msgstr "template" -#: sql_help.c:2132 +#: sql_help.c:2163 msgid "encoding" msgstr "dest_encoding" -#: sql_help.c:2159 +#: sql_help.c:2190 msgid "constraint" msgstr "constraint" -#: sql_help.c:2160 +#: sql_help.c:2191 msgid "where constraint is:" msgstr "όπου constraint είναι:" -#: sql_help.c:2174 sql_help.c:2580 sql_help.c:2990 +#: sql_help.c:2205 sql_help.c:2615 sql_help.c:3036 msgid "event" msgstr "event" -#: sql_help.c:2175 +#: sql_help.c:2206 msgid "filter_variable" msgstr "filter_variable" -#: sql_help.c:2263 sql_help.c:2812 +#: sql_help.c:2294 sql_help.c:2858 msgid "where column_constraint is:" msgstr "όπου column_constraint είναι:" -#: sql_help.c:2300 +#: sql_help.c:2332 msgid "rettype" msgstr "rettype" -#: sql_help.c:2302 +#: sql_help.c:2334 msgid "column_type" msgstr "column_type" -#: sql_help.c:2311 sql_help.c:2511 +#: sql_help.c:2343 sql_help.c:2545 msgid "definition" msgstr "definition" -#: sql_help.c:2312 sql_help.c:2512 +#: sql_help.c:2344 sql_help.c:2546 msgid "obj_file" msgstr "obj_file" -#: sql_help.c:2313 sql_help.c:2513 +#: sql_help.c:2345 sql_help.c:2547 msgid "link_symbol" msgstr "link_symbol" -#: sql_help.c:2351 sql_help.c:2565 sql_help.c:3109 +#: sql_help.c:2346 sql_help.c:2548 +msgid "sql_body" +msgstr "" + +#: sql_help.c:2384 sql_help.c:2600 sql_help.c:3159 msgid "uid" msgstr "uid" -#: sql_help.c:2366 sql_help.c:2407 sql_help.c:2781 sql_help.c:2794 -#: sql_help.c:2808 sql_help.c:2873 +#: sql_help.c:2399 sql_help.c:2440 sql_help.c:2827 sql_help.c:2840 +#: sql_help.c:2854 sql_help.c:2919 msgid "method" msgstr "method" -#: sql_help.c:2371 +#: sql_help.c:2404 msgid "opclass_parameter" msgstr "opclass_parameter" -#: sql_help.c:2388 +#: sql_help.c:2421 msgid "call_handler" msgstr "call_handler" -#: sql_help.c:2389 +#: sql_help.c:2422 msgid "inline_handler" msgstr "inline_handler" -#: sql_help.c:2390 +#: sql_help.c:2423 msgid "valfunction" msgstr "valfunction" -#: sql_help.c:2429 +#: sql_help.c:2462 msgid "com_op" msgstr "com_op" -#: sql_help.c:2430 +#: sql_help.c:2463 msgid "neg_op" msgstr "neg_op" -#: sql_help.c:2448 +#: sql_help.c:2481 msgid "family_name" msgstr "family_name" -#: sql_help.c:2459 +#: sql_help.c:2492 msgid "storage_type" msgstr "storage_type" -#: sql_help.c:2586 sql_help.c:2997 +#: sql_help.c:2621 sql_help.c:3043 msgid "where event can be one of:" msgstr "όπου event μπορεί να είναι ένα από:" -#: sql_help.c:2605 sql_help.c:2607 +#: sql_help.c:2641 sql_help.c:2643 msgid "schema_element" msgstr "schema_element" -#: sql_help.c:2644 +#: sql_help.c:2680 msgid "server_type" msgstr "server_type" -#: sql_help.c:2645 +#: sql_help.c:2681 msgid "server_version" msgstr "server_version" -#: sql_help.c:2646 sql_help.c:3748 sql_help.c:4096 +#: sql_help.c:2682 sql_help.c:3817 sql_help.c:4197 msgid "fdw_name" msgstr "fdw_name" -#: sql_help.c:2659 +#: sql_help.c:2699 sql_help.c:2702 msgid "statistics_name" msgstr "statistics_name" -#: sql_help.c:2660 +#: sql_help.c:2703 msgid "statistics_kind" msgstr "statistics_kind" -#: sql_help.c:2674 +#: sql_help.c:2719 msgid "subscription_name" msgstr "subscription_name" -#: sql_help.c:2774 +#: sql_help.c:2820 msgid "source_table" msgstr "source_table" -#: sql_help.c:2775 +#: sql_help.c:2821 msgid "like_option" msgstr "like_option" -#: sql_help.c:2841 +#: sql_help.c:2887 msgid "and like_option is:" msgstr "και like_option είναι:" -#: sql_help.c:2890 +#: sql_help.c:2936 msgid "directory" msgstr "directory" -#: sql_help.c:2904 +#: sql_help.c:2950 msgid "parser_name" msgstr "parser_name" -#: sql_help.c:2905 +#: sql_help.c:2951 msgid "source_config" msgstr "source_config" -#: sql_help.c:2934 +#: sql_help.c:2980 msgid "start_function" msgstr "start_function" -#: sql_help.c:2935 +#: sql_help.c:2981 msgid "gettoken_function" msgstr "gettoken_function" -#: sql_help.c:2936 +#: sql_help.c:2982 msgid "end_function" msgstr "end_function" -#: sql_help.c:2937 +#: sql_help.c:2983 msgid "lextypes_function" msgstr "lextypes_function" -#: sql_help.c:2938 +#: sql_help.c:2984 msgid "headline_function" msgstr "headline_function" -#: sql_help.c:2950 +#: sql_help.c:2996 msgid "init_function" msgstr "init_function" -#: sql_help.c:2951 +#: sql_help.c:2997 msgid "lexize_function" msgstr "lexize_function" -#: sql_help.c:2964 +#: sql_help.c:3010 msgid "from_sql_function_name" msgstr "from_sql_function_name" -#: sql_help.c:2966 +#: sql_help.c:3012 msgid "to_sql_function_name" msgstr "to_sql_function_name" -#: sql_help.c:2992 +#: sql_help.c:3038 msgid "referenced_table_name" msgstr "referenced_table_name" -#: sql_help.c:2993 +#: sql_help.c:3039 msgid "transition_relation_name" msgstr "transition_relation_name" -#: sql_help.c:2996 +#: sql_help.c:3042 msgid "arguments" msgstr "arguments" -#: sql_help.c:3046 sql_help.c:4221 +#: sql_help.c:3094 sql_help.c:4330 msgid "label" msgstr "label" -#: sql_help.c:3048 +#: sql_help.c:3096 msgid "subtype" msgstr "subtype" -#: sql_help.c:3049 +#: sql_help.c:3097 msgid "subtype_operator_class" msgstr "subtype_operator_class" -#: sql_help.c:3051 +#: sql_help.c:3099 msgid "canonical_function" msgstr "canonical_function" -#: sql_help.c:3052 +#: sql_help.c:3100 msgid "subtype_diff_function" msgstr "subtype_diff_function" -#: sql_help.c:3054 +#: sql_help.c:3101 +#, fuzzy +#| msgid "storage_type" +msgid "multirange_type_name" +msgstr "storage_type" + +#: sql_help.c:3103 msgid "input_function" msgstr "input_function" -#: sql_help.c:3055 +#: sql_help.c:3104 msgid "output_function" msgstr "output_function" -#: sql_help.c:3056 +#: sql_help.c:3105 msgid "receive_function" msgstr "receive_function" -#: sql_help.c:3057 +#: sql_help.c:3106 msgid "send_function" msgstr "send_function" -#: sql_help.c:3058 +#: sql_help.c:3107 msgid "type_modifier_input_function" msgstr "type_modifier_input_function" -#: sql_help.c:3059 +#: sql_help.c:3108 msgid "type_modifier_output_function" msgstr "type_modifier_output_function" -#: sql_help.c:3060 +#: sql_help.c:3109 msgid "analyze_function" msgstr "analyze_function" -#: sql_help.c:3061 +#: sql_help.c:3110 +#, fuzzy +#| msgid "support_function" +msgid "subscript_function" +msgstr "support_function" + +#: sql_help.c:3111 msgid "internallength" msgstr "internallength" -#: sql_help.c:3062 +#: sql_help.c:3112 msgid "alignment" msgstr "alignment" -#: sql_help.c:3063 +#: sql_help.c:3113 msgid "storage" msgstr "storage" -#: sql_help.c:3064 +#: sql_help.c:3114 msgid "like_type" msgstr "like_type" -#: sql_help.c:3065 +#: sql_help.c:3115 msgid "category" msgstr "category" -#: sql_help.c:3066 +#: sql_help.c:3116 msgid "preferred" msgstr "preferred" -#: sql_help.c:3067 +#: sql_help.c:3117 msgid "default" msgstr "default" -#: sql_help.c:3068 +#: sql_help.c:3118 msgid "element" msgstr "element" -#: sql_help.c:3069 +#: sql_help.c:3119 msgid "delimiter" msgstr "delimiter" -#: sql_help.c:3070 +#: sql_help.c:3120 msgid "collatable" msgstr "collatable" -#: sql_help.c:3167 sql_help.c:3816 sql_help.c:4281 sql_help.c:4370 -#: sql_help.c:4520 sql_help.c:4620 sql_help.c:4740 +#: sql_help.c:3217 sql_help.c:3893 sql_help.c:4392 sql_help.c:4489 +#: sql_help.c:4641 sql_help.c:4749 sql_help.c:4873 msgid "with_query" msgstr "with_query" -#: sql_help.c:3169 sql_help.c:3818 sql_help.c:4300 sql_help.c:4306 -#: sql_help.c:4309 sql_help.c:4313 sql_help.c:4317 sql_help.c:4325 -#: sql_help.c:4539 sql_help.c:4545 sql_help.c:4548 sql_help.c:4552 -#: sql_help.c:4556 sql_help.c:4564 sql_help.c:4622 sql_help.c:4759 -#: sql_help.c:4765 sql_help.c:4768 sql_help.c:4772 sql_help.c:4776 -#: sql_help.c:4784 +#: sql_help.c:3219 sql_help.c:3895 sql_help.c:4411 sql_help.c:4417 +#: sql_help.c:4420 sql_help.c:4424 sql_help.c:4428 sql_help.c:4436 +#: sql_help.c:4660 sql_help.c:4666 sql_help.c:4669 sql_help.c:4673 +#: sql_help.c:4677 sql_help.c:4685 sql_help.c:4751 sql_help.c:4892 +#: sql_help.c:4898 sql_help.c:4901 sql_help.c:4905 sql_help.c:4909 +#: sql_help.c:4917 msgid "alias" msgstr "alias" -#: sql_help.c:3170 sql_help.c:4285 sql_help.c:4327 sql_help.c:4329 -#: sql_help.c:4375 sql_help.c:4524 sql_help.c:4566 sql_help.c:4568 -#: sql_help.c:4629 sql_help.c:4744 sql_help.c:4786 sql_help.c:4788 +#: sql_help.c:3220 sql_help.c:4396 sql_help.c:4438 sql_help.c:4440 +#: sql_help.c:4494 sql_help.c:4645 sql_help.c:4687 sql_help.c:4689 +#: sql_help.c:4758 sql_help.c:4877 sql_help.c:4919 sql_help.c:4921 msgid "from_item" msgstr "from_item" -#: sql_help.c:3172 sql_help.c:3653 sql_help.c:3897 sql_help.c:4631 +#: sql_help.c:3222 sql_help.c:3703 sql_help.c:3974 sql_help.c:4760 msgid "cursor_name" msgstr "cursor_name" -#: sql_help.c:3173 sql_help.c:3824 sql_help.c:4632 +#: sql_help.c:3223 sql_help.c:3901 sql_help.c:4761 msgid "output_expression" msgstr "output_expression" -#: sql_help.c:3174 sql_help.c:3825 sql_help.c:4284 sql_help.c:4373 -#: sql_help.c:4523 sql_help.c:4633 sql_help.c:4743 +#: sql_help.c:3224 sql_help.c:3902 sql_help.c:4395 sql_help.c:4492 +#: sql_help.c:4644 sql_help.c:4762 sql_help.c:4876 msgid "output_name" msgstr "output_name" -#: sql_help.c:3190 +#: sql_help.c:3240 msgid "code" msgstr "code" -#: sql_help.c:3595 +#: sql_help.c:3645 msgid "parameter" msgstr "parameter" -#: sql_help.c:3617 sql_help.c:3618 sql_help.c:3922 +#: sql_help.c:3667 sql_help.c:3668 sql_help.c:3999 msgid "statement" msgstr "statement" -#: sql_help.c:3652 sql_help.c:3896 +#: sql_help.c:3702 sql_help.c:3973 msgid "direction" msgstr "direction" -#: sql_help.c:3654 sql_help.c:3898 +#: sql_help.c:3704 sql_help.c:3975 msgid "where direction can be empty or one of:" msgstr "όπου direction μπορεί να είναι άδειο ή ένα από:" -#: sql_help.c:3655 sql_help.c:3656 sql_help.c:3657 sql_help.c:3658 -#: sql_help.c:3659 sql_help.c:3899 sql_help.c:3900 sql_help.c:3901 -#: sql_help.c:3902 sql_help.c:3903 sql_help.c:4294 sql_help.c:4296 -#: sql_help.c:4384 sql_help.c:4386 sql_help.c:4533 sql_help.c:4535 -#: sql_help.c:4688 sql_help.c:4690 sql_help.c:4753 sql_help.c:4755 +#: sql_help.c:3705 sql_help.c:3706 sql_help.c:3707 sql_help.c:3708 +#: sql_help.c:3709 sql_help.c:3976 sql_help.c:3977 sql_help.c:3978 +#: sql_help.c:3979 sql_help.c:3980 sql_help.c:4405 sql_help.c:4407 +#: sql_help.c:4503 sql_help.c:4505 sql_help.c:4654 sql_help.c:4656 +#: sql_help.c:4819 sql_help.c:4821 sql_help.c:4886 sql_help.c:4888 msgid "count" msgstr "count" -#: sql_help.c:3741 sql_help.c:4089 +#: sql_help.c:3807 sql_help.c:4187 msgid "sequence_name" msgstr "sequence_name" -#: sql_help.c:3754 sql_help.c:4102 +#: sql_help.c:3825 sql_help.c:4205 msgid "arg_name" msgstr "arg_name" -#: sql_help.c:3755 sql_help.c:4103 +#: sql_help.c:3826 sql_help.c:4206 msgid "arg_type" msgstr "arg_type" -#: sql_help.c:3760 sql_help.c:4108 +#: sql_help.c:3833 sql_help.c:4213 msgid "loid" msgstr "loid" -#: sql_help.c:3784 +#: sql_help.c:3861 msgid "remote_schema" msgstr "remote_schema" -#: sql_help.c:3787 +#: sql_help.c:3864 msgid "local_schema" msgstr "local_schema" -#: sql_help.c:3822 +#: sql_help.c:3899 msgid "conflict_target" msgstr "conflict_target" -#: sql_help.c:3823 +#: sql_help.c:3900 msgid "conflict_action" msgstr "conflict_action" -#: sql_help.c:3826 +#: sql_help.c:3903 msgid "where conflict_target can be one of:" msgstr "όπου conflict_target μπορεί να είναι ένα από:" -#: sql_help.c:3827 +#: sql_help.c:3904 msgid "index_column_name" msgstr "index_column_name" -#: sql_help.c:3828 +#: sql_help.c:3905 msgid "index_expression" msgstr "index_expression" -#: sql_help.c:3831 +#: sql_help.c:3908 msgid "index_predicate" msgstr "index_predicate" -#: sql_help.c:3833 +#: sql_help.c:3910 msgid "and conflict_action is one of:" msgstr "και conflict_action είναι ένα από:" -#: sql_help.c:3839 sql_help.c:4628 +#: sql_help.c:3916 sql_help.c:4757 msgid "sub-SELECT" msgstr "sub-SELECT" -#: sql_help.c:3848 sql_help.c:3911 sql_help.c:4604 +#: sql_help.c:3925 sql_help.c:3988 sql_help.c:4733 msgid "channel" msgstr "channel" -#: sql_help.c:3870 +#: sql_help.c:3947 msgid "lockmode" msgstr "lockmode" -#: sql_help.c:3871 +#: sql_help.c:3948 msgid "where lockmode is one of:" msgstr "όπου lockmode είναι ένα από:" -#: sql_help.c:3912 +#: sql_help.c:3989 msgid "payload" msgstr "payload" -#: sql_help.c:3939 +#: sql_help.c:4016 msgid "old_role" msgstr "old_role" -#: sql_help.c:3940 +#: sql_help.c:4017 msgid "new_role" msgstr "new_role" -#: sql_help.c:3971 sql_help.c:4143 sql_help.c:4151 +#: sql_help.c:4053 sql_help.c:4252 sql_help.c:4260 msgid "savepoint_name" msgstr "savepoint_name" -#: sql_help.c:4287 sql_help.c:4339 sql_help.c:4526 sql_help.c:4578 -#: sql_help.c:4746 sql_help.c:4798 +#: sql_help.c:4398 sql_help.c:4451 sql_help.c:4647 sql_help.c:4700 +#: sql_help.c:4879 sql_help.c:4932 msgid "grouping_element" msgstr "grouping_element" -#: sql_help.c:4289 sql_help.c:4379 sql_help.c:4528 sql_help.c:4748 +#: sql_help.c:4400 sql_help.c:4498 sql_help.c:4649 sql_help.c:4881 msgid "window_name" msgstr "window_name" -#: sql_help.c:4290 sql_help.c:4380 sql_help.c:4529 sql_help.c:4749 +#: sql_help.c:4401 sql_help.c:4499 sql_help.c:4650 sql_help.c:4882 msgid "window_definition" msgstr "window_definition" -#: sql_help.c:4291 sql_help.c:4305 sql_help.c:4343 sql_help.c:4381 -#: sql_help.c:4530 sql_help.c:4544 sql_help.c:4582 sql_help.c:4750 -#: sql_help.c:4764 sql_help.c:4802 +#: sql_help.c:4402 sql_help.c:4416 sql_help.c:4455 sql_help.c:4500 +#: sql_help.c:4651 sql_help.c:4665 sql_help.c:4704 sql_help.c:4883 +#: sql_help.c:4897 sql_help.c:4936 msgid "select" msgstr "select" -#: sql_help.c:4298 sql_help.c:4537 sql_help.c:4757 +#: sql_help.c:4409 sql_help.c:4658 sql_help.c:4890 msgid "where from_item can be one of:" msgstr "όπου from_item μπορεί να είναι ένα από:" -#: sql_help.c:4301 sql_help.c:4307 sql_help.c:4310 sql_help.c:4314 -#: sql_help.c:4326 sql_help.c:4540 sql_help.c:4546 sql_help.c:4549 -#: sql_help.c:4553 sql_help.c:4565 sql_help.c:4760 sql_help.c:4766 -#: sql_help.c:4769 sql_help.c:4773 sql_help.c:4785 +#: sql_help.c:4412 sql_help.c:4418 sql_help.c:4421 sql_help.c:4425 +#: sql_help.c:4437 sql_help.c:4661 sql_help.c:4667 sql_help.c:4670 +#: sql_help.c:4674 sql_help.c:4686 sql_help.c:4893 sql_help.c:4899 +#: sql_help.c:4902 sql_help.c:4906 sql_help.c:4918 msgid "column_alias" msgstr "column_alias" -#: sql_help.c:4302 sql_help.c:4541 sql_help.c:4761 +#: sql_help.c:4413 sql_help.c:4662 sql_help.c:4894 msgid "sampling_method" msgstr "sampling_method" -#: sql_help.c:4304 sql_help.c:4543 sql_help.c:4763 +#: sql_help.c:4415 sql_help.c:4664 sql_help.c:4896 msgid "seed" msgstr "seed" -#: sql_help.c:4308 sql_help.c:4341 sql_help.c:4547 sql_help.c:4580 -#: sql_help.c:4767 sql_help.c:4800 +#: sql_help.c:4419 sql_help.c:4453 sql_help.c:4668 sql_help.c:4702 +#: sql_help.c:4900 sql_help.c:4934 msgid "with_query_name" msgstr "with_query_name" -#: sql_help.c:4318 sql_help.c:4321 sql_help.c:4324 sql_help.c:4557 -#: sql_help.c:4560 sql_help.c:4563 sql_help.c:4777 sql_help.c:4780 -#: sql_help.c:4783 +#: sql_help.c:4429 sql_help.c:4432 sql_help.c:4435 sql_help.c:4678 +#: sql_help.c:4681 sql_help.c:4684 sql_help.c:4910 sql_help.c:4913 +#: sql_help.c:4916 msgid "column_definition" msgstr "column_definition" -#: sql_help.c:4328 sql_help.c:4567 sql_help.c:4787 +#: sql_help.c:4439 sql_help.c:4688 sql_help.c:4920 msgid "join_type" msgstr "join_type" -#: sql_help.c:4330 sql_help.c:4569 sql_help.c:4789 +#: sql_help.c:4441 sql_help.c:4690 sql_help.c:4922 msgid "join_condition" msgstr "join_condition" -#: sql_help.c:4331 sql_help.c:4570 sql_help.c:4790 +#: sql_help.c:4442 sql_help.c:4691 sql_help.c:4923 msgid "join_column" msgstr "join_column" -#: sql_help.c:4332 sql_help.c:4571 sql_help.c:4791 +#: sql_help.c:4443 sql_help.c:4692 sql_help.c:4924 +#, fuzzy +#| msgid "column_alias" +msgid "join_using_alias" +msgstr "column_alias" + +#: sql_help.c:4444 sql_help.c:4693 sql_help.c:4925 msgid "and grouping_element can be one of:" msgstr "και grouping_element μπορεί να είναι ένα από:" -#: sql_help.c:4340 sql_help.c:4579 sql_help.c:4799 +#: sql_help.c:4452 sql_help.c:4701 sql_help.c:4933 msgid "and with_query is:" msgstr "και with_query είναι:" -#: sql_help.c:4344 sql_help.c:4583 sql_help.c:4803 +#: sql_help.c:4456 sql_help.c:4705 sql_help.c:4937 msgid "values" msgstr "values" -#: sql_help.c:4345 sql_help.c:4584 sql_help.c:4804 +#: sql_help.c:4457 sql_help.c:4706 sql_help.c:4938 msgid "insert" msgstr "insert" -#: sql_help.c:4346 sql_help.c:4585 sql_help.c:4805 +#: sql_help.c:4458 sql_help.c:4707 sql_help.c:4939 msgid "update" msgstr "update" -#: sql_help.c:4347 sql_help.c:4586 sql_help.c:4806 +#: sql_help.c:4459 sql_help.c:4708 sql_help.c:4940 msgid "delete" msgstr "delete" -#: sql_help.c:4374 +#: sql_help.c:4461 sql_help.c:4710 sql_help.c:4942 +#, fuzzy +#| msgid "schema_name" +msgid "search_seq_col_name" +msgstr "schema_name" + +#: sql_help.c:4463 sql_help.c:4712 sql_help.c:4944 +#, fuzzy +#| msgid "schema_name" +msgid "cycle_mark_col_name" +msgstr "schema_name" + +#: sql_help.c:4464 sql_help.c:4713 sql_help.c:4945 +#, fuzzy +#| msgid "new_enum_value" +msgid "cycle_mark_value" +msgstr "new_enum_value" + +#: sql_help.c:4465 sql_help.c:4714 sql_help.c:4946 +msgid "cycle_mark_default" +msgstr "" + +#: sql_help.c:4466 sql_help.c:4715 sql_help.c:4947 +msgid "cycle_path_col_name" +msgstr "" + +#: sql_help.c:4493 msgid "new_table" msgstr "new_table" -#: sql_help.c:4399 +#: sql_help.c:4518 msgid "timezone" msgstr "timezone" -#: sql_help.c:4444 +#: sql_help.c:4563 msgid "snapshot_id" msgstr "snapshot_id" -#: sql_help.c:4686 +#: sql_help.c:4817 msgid "sort_expression" msgstr "sort_expression" -#: sql_help.c:4813 sql_help.c:5791 +#: sql_help.c:4954 sql_help.c:5932 msgid "abort the current transaction" msgstr "ματαιώστε την τρέχουσα συναλλαγή" -#: sql_help.c:4819 +#: sql_help.c:4960 msgid "change the definition of an aggregate function" msgstr "αλλάξτε τον ορισμό μιας συνάρτησης συγκεντρωτικών αποτελεσμάτων" -#: sql_help.c:4825 +#: sql_help.c:4966 msgid "change the definition of a collation" msgstr "αλλάξτε τον ορισμό συρραφής" -#: sql_help.c:4831 +#: sql_help.c:4972 msgid "change the definition of a conversion" msgstr "αλλάξτε τον ορισμό μίας μετατροπής" -#: sql_help.c:4837 +#: sql_help.c:4978 msgid "change a database" msgstr "αλλάξτε μία βάση δεδομένων" -#: sql_help.c:4843 +#: sql_help.c:4984 msgid "define default access privileges" msgstr "ορίσθε τα προεπιλεγμένα δικαιώματα πρόσβασης" -#: sql_help.c:4849 +#: sql_help.c:4990 msgid "change the definition of a domain" msgstr "αλλάξτε τον ορισμό ενός τομέα" -#: sql_help.c:4855 +#: sql_help.c:4996 msgid "change the definition of an event trigger" msgstr "αλλάξτε τον ορισμό μιας ενεργοποίησης συμβάντος" -#: sql_help.c:4861 +#: sql_help.c:5002 msgid "change the definition of an extension" msgstr "αλλάξτε τον ορισμό μίας προέκτασης" -#: sql_help.c:4867 +#: sql_help.c:5008 msgid "change the definition of a foreign-data wrapper" msgstr "αλλάξτε τον ορισιμό μιας περιτύλιξης ξένων δεδομένων" -#: sql_help.c:4873 +#: sql_help.c:5014 msgid "change the definition of a foreign table" msgstr "αλλάξτε τον ορισιμό ενός ξενικού πίνακα" -#: sql_help.c:4879 +#: sql_help.c:5020 msgid "change the definition of a function" msgstr "αλλάξτε τον ορισμό μιας συνάρτησης" -#: sql_help.c:4885 +#: sql_help.c:5026 msgid "change role name or membership" msgstr "αλλάξτε το όνομα ρόλου ή ιδιότητας μέλους" -#: sql_help.c:4891 +#: sql_help.c:5032 msgid "change the definition of an index" msgstr "αλλάξτε τον ορισμό ενός ευρετηρίου" -#: sql_help.c:4897 +#: sql_help.c:5038 msgid "change the definition of a procedural language" msgstr "αλλάξτε τον ορισμό μιας διαδικαστικής γλώσσας" -#: sql_help.c:4903 +#: sql_help.c:5044 msgid "change the definition of a large object" msgstr "αλλάξτε τον ορισιμό ενός μεγάλου αντικειμένου" -#: sql_help.c:4909 +#: sql_help.c:5050 msgid "change the definition of a materialized view" msgstr "αλλάξτε τον ορισμό μίας υλοποιημένης όψης" -#: sql_help.c:4915 +#: sql_help.c:5056 msgid "change the definition of an operator" msgstr "αλλάξτε τον ορισμό ενός χειριστή" -#: sql_help.c:4921 +#: sql_help.c:5062 msgid "change the definition of an operator class" msgstr "αλλάξτε τον ορισμό μίας κλάσης χειριστή" -#: sql_help.c:4927 +#: sql_help.c:5068 msgid "change the definition of an operator family" msgstr "αλλάξτε τον ορισμό μίας οικογένειας χειριστή" -#: sql_help.c:4933 -msgid "change the definition of a row level security policy" +#: sql_help.c:5074 +#, fuzzy +#| msgid "change the definition of a row level security policy" +msgid "change the definition of a row-level security policy" msgstr "αλλάξτε τον ορισιμό μιας πολιτική ασφάλειας επιπέδου σειράς" -#: sql_help.c:4939 +#: sql_help.c:5080 msgid "change the definition of a procedure" msgstr "αλλάξτε τον ορισμό μίας διαδικασίας" -#: sql_help.c:4945 +#: sql_help.c:5086 msgid "change the definition of a publication" msgstr "αλλάξτε τον ορισμό μίας δημοσίευσης" -#: sql_help.c:4951 sql_help.c:5053 +#: sql_help.c:5092 sql_help.c:5194 msgid "change a database role" msgstr "αλλάξτε τον ρόλο μίας βάσης δεδομένων" -#: sql_help.c:4957 +#: sql_help.c:5098 msgid "change the definition of a routine" msgstr "αλλάξτε τον ορισμό μιας ρουτίνας" -#: sql_help.c:4963 +#: sql_help.c:5104 msgid "change the definition of a rule" msgstr "αλλάξτε τον ορισμό ενός κανόνα" -#: sql_help.c:4969 +#: sql_help.c:5110 msgid "change the definition of a schema" msgstr "αλλάξτε τον ορισμό ενός σχήματος" -#: sql_help.c:4975 +#: sql_help.c:5116 msgid "change the definition of a sequence generator" msgstr "αλλάξτε τον ορισμό μίας γεννήτριας ακολουθίας" -#: sql_help.c:4981 +#: sql_help.c:5122 msgid "change the definition of a foreign server" msgstr "αλλάξτε τον ορισμό ενός ξενικού διακομιστή" -#: sql_help.c:4987 +#: sql_help.c:5128 msgid "change the definition of an extended statistics object" msgstr "αλλάξτε τον ορισμό ενός εκτεταμένου αντικειμένου στατιστικών" -#: sql_help.c:4993 +#: sql_help.c:5134 msgid "change the definition of a subscription" msgstr "αλλάξτε τον ορισμό μιας συνδρομής" -#: sql_help.c:4999 +#: sql_help.c:5140 msgid "change a server configuration parameter" msgstr "αλλάξτε μία παράμετρο διαμόρφωσης διακομιστή" -#: sql_help.c:5005 +#: sql_help.c:5146 msgid "change the definition of a table" msgstr "αλλάξτε τον ορισμό ενός πίνακα" -#: sql_help.c:5011 +#: sql_help.c:5152 msgid "change the definition of a tablespace" msgstr "αλλάξτε τον ορισμό ενός πινακοχώρου" -#: sql_help.c:5017 +#: sql_help.c:5158 msgid "change the definition of a text search configuration" msgstr "αλλάξτε τον ορισμό μίας διαμόρφωσης αναζήτησης κειμένου" -#: sql_help.c:5023 +#: sql_help.c:5164 msgid "change the definition of a text search dictionary" msgstr "αλλάξτε τον ορισμό ενός λεξικού αναζήτησης κειμένου" -#: sql_help.c:5029 +#: sql_help.c:5170 msgid "change the definition of a text search parser" msgstr "αλλάξτε τον ορισμό ενός αναλυτή αναζήτησης κειμένου" -#: sql_help.c:5035 +#: sql_help.c:5176 msgid "change the definition of a text search template" msgstr "αλλάξτε τον ορισμό ενός προτύπου αναζήτησης κειμένου" -#: sql_help.c:5041 +#: sql_help.c:5182 msgid "change the definition of a trigger" msgstr "αλλάξτε τον ορισμό μιας ενεργοποίησης" -#: sql_help.c:5047 +#: sql_help.c:5188 msgid "change the definition of a type" msgstr "αλλάξτε τον ορισμό ενός τύπου" -#: sql_help.c:5059 +#: sql_help.c:5200 msgid "change the definition of a user mapping" msgstr "αλλάξτε τον ορισμό μίας αντιστοίχισης χρήστη" -#: sql_help.c:5065 +#: sql_help.c:5206 msgid "change the definition of a view" msgstr "αλλάξτε τον ορισμό μίας όψης" -#: sql_help.c:5071 +#: sql_help.c:5212 msgid "collect statistics about a database" msgstr "συλλέξτε στατιστικά σχετικά με μία βάση δεδομένων" -#: sql_help.c:5077 sql_help.c:5869 +#: sql_help.c:5218 sql_help.c:6010 msgid "start a transaction block" msgstr "εκκινήστε ένα μπλοκ συναλλαγής" -#: sql_help.c:5083 +#: sql_help.c:5224 msgid "invoke a procedure" msgstr "κλήση διαδικασίας" -#: sql_help.c:5089 +#: sql_help.c:5230 msgid "force a write-ahead log checkpoint" -msgstr "" -"επιβάλλετε εισαγωγή ενός σημείου ελέγχου (checkpoint) του write-ahead log" +msgstr "επιβάλλετε εισαγωγή ενός σημείου ελέγχου (checkpoint) του write-ahead log" -#: sql_help.c:5095 +#: sql_help.c:5236 msgid "close a cursor" msgstr "κλείστε έναν δρομέα" -#: sql_help.c:5101 +#: sql_help.c:5242 msgid "cluster a table according to an index" msgstr "δημιουργείστε συστάδα ενός πίνακα σύμφωνα με ένα ευρετήριο" -#: sql_help.c:5107 +#: sql_help.c:5248 msgid "define or change the comment of an object" msgstr "ορίσετε ή αλλάξτε το σχόλιο ενός αντικειμένου" -#: sql_help.c:5113 sql_help.c:5671 +#: sql_help.c:5254 sql_help.c:5812 msgid "commit the current transaction" msgstr "ολοκληρώστε την τρέχουσας συναλλαγής" -#: sql_help.c:5119 +#: sql_help.c:5260 msgid "commit a transaction that was earlier prepared for two-phase commit" -msgstr "" -"ολοκληρώστε μία συναλλαγή που είχε προετοιμαστεί νωρίτερα για ολοκλήρωση σε " -"δύο φάσεις" +msgstr "ολοκληρώστε μία συναλλαγή που είχε προετοιμαστεί νωρίτερα για ολοκλήρωση σε δύο φάσεις" -#: sql_help.c:5125 +#: sql_help.c:5266 msgid "copy data between a file and a table" msgstr "αντιγράψτε δεδομένα μεταξύ ενός αρχείου και ενός πίνακα" -#: sql_help.c:5131 +#: sql_help.c:5272 msgid "define a new access method" msgstr "ορίσετε μία νέα μέθοδο πρόσβασης" -#: sql_help.c:5137 +#: sql_help.c:5278 msgid "define a new aggregate function" msgstr "ορίσετε μία νέα συνάρτηση συγκεντρωτικών αποτελεσμάτων" -#: sql_help.c:5143 +#: sql_help.c:5284 msgid "define a new cast" msgstr "ορίσετε ένα νέο καστ" -#: sql_help.c:5149 +#: sql_help.c:5290 msgid "define a new collation" msgstr "ορίσετε μία νέα συρραφή" -#: sql_help.c:5155 +#: sql_help.c:5296 msgid "define a new encoding conversion" msgstr "ορίσετε μία νέα μετατροπή κωδικοποίησης" -#: sql_help.c:5161 +#: sql_help.c:5302 msgid "create a new database" msgstr "δημιουργήστε μία νέα βάση δεδομένων" -#: sql_help.c:5167 +#: sql_help.c:5308 msgid "define a new domain" msgstr "ορίσετε ένα νέο πεδίο" -#: sql_help.c:5173 +#: sql_help.c:5314 msgid "define a new event trigger" msgstr "ορίσετε μία νέα ενεργοποίησης συμβάντος" -#: sql_help.c:5179 +#: sql_help.c:5320 msgid "install an extension" msgstr "εγκαταστήστε μία νέα προέκταση" -#: sql_help.c:5185 +#: sql_help.c:5326 msgid "define a new foreign-data wrapper" msgstr "ορίσετε μία νέα περιτύλιξη ξένων δεδομένων" -#: sql_help.c:5191 +#: sql_help.c:5332 msgid "define a new foreign table" msgstr "ορίσετε ένα νέο ξενικό πίνακα" -#: sql_help.c:5197 +#: sql_help.c:5338 msgid "define a new function" msgstr "ορίσετε μία νέα συνάρτηση" -#: sql_help.c:5203 sql_help.c:5263 sql_help.c:5365 +#: sql_help.c:5344 sql_help.c:5404 sql_help.c:5506 msgid "define a new database role" msgstr "ορίστε έναν νέο ρόλο βάσης δεδομένων" -#: sql_help.c:5209 +#: sql_help.c:5350 msgid "define a new index" msgstr "ορίστε ένα νέο ευρετήριο" -#: sql_help.c:5215 +#: sql_help.c:5356 msgid "define a new procedural language" msgstr "ορίστε μία νέα διαδικαστική γλώσσα" -#: sql_help.c:5221 +#: sql_help.c:5362 msgid "define a new materialized view" msgstr "Ορίστε μία νέα υλοποιημένη όψη" -#: sql_help.c:5227 +#: sql_help.c:5368 msgid "define a new operator" msgstr "ορίστε έναν νέο χειριστή" -#: sql_help.c:5233 +#: sql_help.c:5374 msgid "define a new operator class" msgstr "ορίστε μία νέα κλάση χειριστή" -#: sql_help.c:5239 +#: sql_help.c:5380 msgid "define a new operator family" msgstr "ορίστε μία νέα οικογένεια χειριστή" -#: sql_help.c:5245 -msgid "define a new row level security policy for a table" +#: sql_help.c:5386 +#, fuzzy +#| msgid "define a new row level security policy for a table" +msgid "define a new row-level security policy for a table" msgstr "ορίστε μία νέα πολιτική προστασίας σειράς για έναν πίνακα" -#: sql_help.c:5251 +#: sql_help.c:5392 msgid "define a new procedure" msgstr "ορίστε μία νέα διαδικασία" -#: sql_help.c:5257 +#: sql_help.c:5398 msgid "define a new publication" msgstr "ορίστε μία νέα κοινοποιήση" -#: sql_help.c:5269 +#: sql_help.c:5410 msgid "define a new rewrite rule" msgstr "ορίστε ένα νέο κανόνα επανεγγραφής" -#: sql_help.c:5275 +#: sql_help.c:5416 msgid "define a new schema" msgstr "ορίστε ένα νέο σχήμα" -#: sql_help.c:5281 +#: sql_help.c:5422 msgid "define a new sequence generator" msgstr "ορίστε ένα νέο παραγωγό ακολουθίων" -#: sql_help.c:5287 +#: sql_help.c:5428 msgid "define a new foreign server" msgstr "ορίστε ένα νέο ξενικό διακομιστή" -#: sql_help.c:5293 +#: sql_help.c:5434 msgid "define extended statistics" msgstr "ορίστε εκτεταμένα στατιστικά στοιχεία" -#: sql_help.c:5299 +#: sql_help.c:5440 msgid "define a new subscription" msgstr "ορίστε μία νέα συνδρομή" -#: sql_help.c:5305 +#: sql_help.c:5446 msgid "define a new table" msgstr "ορίσετε ένα νέο πίνακα" -#: sql_help.c:5311 sql_help.c:5827 +#: sql_help.c:5452 sql_help.c:5968 msgid "define a new table from the results of a query" msgstr "ορίστε ένα νέο πίνακα από τα αποτελέσματα ενός ερωτήματος" -#: sql_help.c:5317 +#: sql_help.c:5458 msgid "define a new tablespace" msgstr "ορίστε ένα νέο πινακοχώρο" -#: sql_help.c:5323 +#: sql_help.c:5464 msgid "define a new text search configuration" msgstr "ορίστε μία νέα διαμόρφωση αναζήτησης κειμένου" -#: sql_help.c:5329 +#: sql_help.c:5470 msgid "define a new text search dictionary" msgstr "ορίστε ένα νέο λεξικό αναζήτησης κειμένου" -#: sql_help.c:5335 +#: sql_help.c:5476 msgid "define a new text search parser" msgstr "ορίστε ένα νέο αναλυτή αναζήτησης κειμένου" -#: sql_help.c:5341 +#: sql_help.c:5482 msgid "define a new text search template" msgstr "ορίστε ένα νέο πρότυπο αναζήτησης κειμένου" -#: sql_help.c:5347 +#: sql_help.c:5488 msgid "define a new transform" msgstr "ορίστε μία νέα μετατροπή" -#: sql_help.c:5353 +#: sql_help.c:5494 msgid "define a new trigger" msgstr "ορίσετε μία νέα ενεργοποίηση" -#: sql_help.c:5359 +#: sql_help.c:5500 msgid "define a new data type" msgstr "ορίσετε ένα νέο τύπο δεδομένων" -#: sql_help.c:5371 +#: sql_help.c:5512 msgid "define a new mapping of a user to a foreign server" msgstr "ορίστε μία νέα αντιστοίχιση ενός χρήστη σε έναν ξένο διακομιστή" -#: sql_help.c:5377 +#: sql_help.c:5518 msgid "define a new view" msgstr "ορίστε μία νέα όψη" -#: sql_help.c:5383 +#: sql_help.c:5524 msgid "deallocate a prepared statement" msgstr "καταργήστε μία προετοιμασμένη δήλωση" -#: sql_help.c:5389 +#: sql_help.c:5530 msgid "define a cursor" msgstr "ορίστε έναν δρομέα" -#: sql_help.c:5395 +#: sql_help.c:5536 msgid "delete rows of a table" msgstr "διαγράψτε σειρές ενός πίνακα" -#: sql_help.c:5401 +#: sql_help.c:5542 msgid "discard session state" msgstr "καταργήστε την κατάσταση συνεδρίας" -#: sql_help.c:5407 +#: sql_help.c:5548 msgid "execute an anonymous code block" msgstr "εκτελέστε ανώνυμο μπλοκ κώδικα" -#: sql_help.c:5413 +#: sql_help.c:5554 msgid "remove an access method" msgstr "αφαιρέστε μία μέθοδο πρόσβασης" -#: sql_help.c:5419 +#: sql_help.c:5560 msgid "remove an aggregate function" msgstr "αφαιρέστε μία συνάρτηση συγκεντρωτικών αποτελεσμάτων" -#: sql_help.c:5425 +#: sql_help.c:5566 msgid "remove a cast" msgstr "αφαιρέστε ένα καστ" -#: sql_help.c:5431 +#: sql_help.c:5572 msgid "remove a collation" msgstr "αφαιρέστε μία συρραφή" -#: sql_help.c:5437 +#: sql_help.c:5578 msgid "remove a conversion" msgstr "αφαιρέστε μία μετατροπή" -#: sql_help.c:5443 +#: sql_help.c:5584 msgid "remove a database" msgstr "αφαιρέστε μία βάση δεδομένων" -#: sql_help.c:5449 +#: sql_help.c:5590 msgid "remove a domain" msgstr "αφαιρέστε ένα πεδίο" -#: sql_help.c:5455 +#: sql_help.c:5596 msgid "remove an event trigger" msgstr "αφαιρέστε μία ενεργοποίηση συμβάντος" -#: sql_help.c:5461 +#: sql_help.c:5602 msgid "remove an extension" msgstr "αφαιρέστε μία προέκταση" -#: sql_help.c:5467 +#: sql_help.c:5608 msgid "remove a foreign-data wrapper" msgstr "αφαιρέστε μία περιτύλιξη ξένων δεδομένων" -#: sql_help.c:5473 +#: sql_help.c:5614 msgid "remove a foreign table" msgstr "αφαιρέστε έναν ξενικό πίνακα" -#: sql_help.c:5479 +#: sql_help.c:5620 msgid "remove a function" msgstr "αφαιρέστε μία συνάρτηση" -#: sql_help.c:5485 sql_help.c:5551 sql_help.c:5653 +#: sql_help.c:5626 sql_help.c:5692 sql_help.c:5794 msgid "remove a database role" msgstr "αφαιρέστε έναν ρόλο μίας βάσης δεδομένων" -#: sql_help.c:5491 +#: sql_help.c:5632 msgid "remove an index" msgstr "αφαιρέστε ένα ευρετήριο" -#: sql_help.c:5497 +#: sql_help.c:5638 msgid "remove a procedural language" msgstr "αφαιρέστε μία διαδικαστική γλώσσα" -#: sql_help.c:5503 +#: sql_help.c:5644 msgid "remove a materialized view" msgstr "αφαιρέστε μία υλοποιημένη όψη" -#: sql_help.c:5509 +#: sql_help.c:5650 msgid "remove an operator" msgstr "αφαιρέστε έναν χειριστή" -#: sql_help.c:5515 +#: sql_help.c:5656 msgid "remove an operator class" msgstr "αφαιρέστε μία κλάση χειριστή" -#: sql_help.c:5521 +#: sql_help.c:5662 msgid "remove an operator family" msgstr "αφαιρέστε μία οικογένεια χειριστή" -#: sql_help.c:5527 +#: sql_help.c:5668 msgid "remove database objects owned by a database role" -msgstr "" -"αφαιρέστε αντικειμένα βάσης δεδομένων που ανήκουν σε ρόλο βάσης δεδομένων" +msgstr "αφαιρέστε αντικειμένα βάσης δεδομένων που ανήκουν σε ρόλο βάσης δεδομένων" -#: sql_help.c:5533 -msgid "remove a row level security policy from a table" +#: sql_help.c:5674 +#, fuzzy +#| msgid "remove a row level security policy from a table" +msgid "remove a row-level security policy from a table" msgstr "αφαιρέστε μία πολιτική ασφαλείας επιπέδου γραμμής από έναν πίνακα" -#: sql_help.c:5539 +#: sql_help.c:5680 msgid "remove a procedure" msgstr "αφαιρέστε μία διαδικασία" -#: sql_help.c:5545 +#: sql_help.c:5686 msgid "remove a publication" msgstr "αφαιρέστε μία δημοσίευση" -#: sql_help.c:5557 +#: sql_help.c:5698 msgid "remove a routine" msgstr "αφαιρέστε μία ρουτίνα" -#: sql_help.c:5563 +#: sql_help.c:5704 msgid "remove a rewrite rule" msgstr "αφαιρέστε έναν κανόνα επανεγγραφής" -#: sql_help.c:5569 +#: sql_help.c:5710 msgid "remove a schema" msgstr "αφαιρέστε ένα σχήμα" -#: sql_help.c:5575 +#: sql_help.c:5716 msgid "remove a sequence" msgstr "αφαιρέστε μία ακολουθία" -#: sql_help.c:5581 +#: sql_help.c:5722 msgid "remove a foreign server descriptor" msgstr "αφαιρέστε έναν περιγραφέα ξενικού διακομιστή" -#: sql_help.c:5587 +#: sql_help.c:5728 msgid "remove extended statistics" msgstr "αφαιρέστε εκτεταμένα στατιστικά στοιχεία" -#: sql_help.c:5593 +#: sql_help.c:5734 msgid "remove a subscription" msgstr "αφαιρέστε μία συνδρομή" -#: sql_help.c:5599 +#: sql_help.c:5740 msgid "remove a table" msgstr "αφαιρέστε έναν πίνακα" -#: sql_help.c:5605 +#: sql_help.c:5746 msgid "remove a tablespace" msgstr "αφαιρέστε έναν πινακοχώρο" -#: sql_help.c:5611 +#: sql_help.c:5752 msgid "remove a text search configuration" msgstr "αφαιρέστε μία διαμόρφωση αναζήτησης κειμένου" -#: sql_help.c:5617 +#: sql_help.c:5758 msgid "remove a text search dictionary" msgstr "αφαιρέστε ένα λεξικό αναζήτησης κειμένου" -#: sql_help.c:5623 +#: sql_help.c:5764 msgid "remove a text search parser" msgstr "αφαιρέστε έναν αναλυτή αναζήτησης κειμένου" -#: sql_help.c:5629 +#: sql_help.c:5770 msgid "remove a text search template" msgstr "αφαιρέστε ένα πρότυπο αναζήτησης κειμένου" -#: sql_help.c:5635 +#: sql_help.c:5776 msgid "remove a transform" msgstr "αφαιρέστε μία μετατροπή" -#: sql_help.c:5641 +#: sql_help.c:5782 msgid "remove a trigger" msgstr "αφαιρέστε μία ενεργοποίηση" -#: sql_help.c:5647 +#: sql_help.c:5788 msgid "remove a data type" msgstr "αφαιρέστε έναν τύπο δεδομένων" -#: sql_help.c:5659 +#: sql_help.c:5800 msgid "remove a user mapping for a foreign server" msgstr "αφαιρέστε μία αντιστοίχιση χρήστη για ξένο διακομιστή" -#: sql_help.c:5665 +#: sql_help.c:5806 msgid "remove a view" msgstr "αφαιρέστε μία όψη" -#: sql_help.c:5677 +#: sql_help.c:5818 msgid "execute a prepared statement" msgstr "εκτελέστε μία προεπιλεγμένη δήλωση" -#: sql_help.c:5683 +#: sql_help.c:5824 msgid "show the execution plan of a statement" msgstr "εμφανίστε το πλάνο εκτέλεσης μίας δήλωσης" -#: sql_help.c:5689 +#: sql_help.c:5830 msgid "retrieve rows from a query using a cursor" msgstr "ανακτήστε σειρές από ερώτημα μέσω δρομέα" -#: sql_help.c:5695 +#: sql_help.c:5836 msgid "define access privileges" msgstr "ορίσθε δικαιώματα πρόσβασης" -#: sql_help.c:5701 +#: sql_help.c:5842 msgid "import table definitions from a foreign server" msgstr "εισαγωγή ορισμών πίνακα από ξένο διακομιστή" -#: sql_help.c:5707 +#: sql_help.c:5848 msgid "create new rows in a table" msgstr "δημιουργήστε καινούργιες σειρές σε έναν πίνακα" -#: sql_help.c:5713 +#: sql_help.c:5854 msgid "listen for a notification" msgstr "ακούστε για μία κοινοποίηση" -#: sql_help.c:5719 +#: sql_help.c:5860 msgid "load a shared library file" msgstr "φορτώστε ένα αρχείο κοινόχρηστης βιβλιοθήκης" -#: sql_help.c:5725 +#: sql_help.c:5866 msgid "lock a table" msgstr "κλειδώστε έναν πίνακα" -#: sql_help.c:5731 +#: sql_help.c:5872 msgid "position a cursor" msgstr "τοποθετήστε έναν δρομέα" -#: sql_help.c:5737 +#: sql_help.c:5878 msgid "generate a notification" msgstr "δημιουργήστε μία κοινοποίηση" -#: sql_help.c:5743 +#: sql_help.c:5884 msgid "prepare a statement for execution" msgstr "προετοιμάστε μία δήλωση για εκτέλεση" -#: sql_help.c:5749 +#: sql_help.c:5890 msgid "prepare the current transaction for two-phase commit" msgstr "προετοιμάστε την τρέχουσας συναλλαγής για ολοκλήρωση σε δύο φάσεις" -#: sql_help.c:5755 +#: sql_help.c:5896 msgid "change the ownership of database objects owned by a database role" -msgstr "" -"αλλάξτε την κυριότητα αντικειμένων βάσης δεδομένων που ανήκουν σε ρόλο βάσης " -"δεδομένων" +msgstr "αλλάξτε την κυριότητα αντικειμένων βάσης δεδομένων που ανήκουν σε ρόλο βάσης δεδομένων" -#: sql_help.c:5761 +#: sql_help.c:5902 msgid "replace the contents of a materialized view" msgstr "αντικαθαστήστε τα περιεχόμενα μίας υλοποιημένης όψης" -#: sql_help.c:5767 +#: sql_help.c:5908 msgid "rebuild indexes" msgstr "επανακατασκευάστε ευρετήρια" -#: sql_help.c:5773 +#: sql_help.c:5914 msgid "destroy a previously defined savepoint" msgstr "καταστρέψτε ένα προηγούμενα ορισμένο σημείο αποθήκευσης" -#: sql_help.c:5779 +#: sql_help.c:5920 msgid "restore the value of a run-time parameter to the default value" -msgstr "" -"επαναφορά της τιμής μιας παραμέτρου χρόνου εκτέλεσης στην προεπιλεγμένη τιμή" +msgstr "επαναφορά της τιμής μιας παραμέτρου χρόνου εκτέλεσης στην προεπιλεγμένη τιμή" -#: sql_help.c:5785 +#: sql_help.c:5926 msgid "remove access privileges" msgstr "αφαιρέστε δικαιώματα πρόσβασης" -#: sql_help.c:5797 +#: sql_help.c:5938 msgid "cancel a transaction that was earlier prepared for two-phase commit" -msgstr "" -"Ακύρωση συναλλαγής που είχε προετοιμαστεί προηγουμένως για ολοκλήρωση σε δύο " -"φάσεις" +msgstr "Ακύρωση συναλλαγής που είχε προετοιμαστεί προηγουμένως για ολοκλήρωση σε δύο φάσεις" -#: sql_help.c:5803 +#: sql_help.c:5944 msgid "roll back to a savepoint" msgstr "επαναφορά σε σημείο αποθήκευσης" -#: sql_help.c:5809 +#: sql_help.c:5950 msgid "define a new savepoint within the current transaction" -msgstr "" -"ορίστε ένα νέο σημείο αποθήκευσης (savepoint) μέσα στην τρέχουσα συναλλαγή" +msgstr "ορίστε ένα νέο σημείο αποθήκευσης (savepoint) μέσα στην τρέχουσα συναλλαγή" -#: sql_help.c:5815 +#: sql_help.c:5956 msgid "define or change a security label applied to an object" -msgstr "" -"ορίστε ή αλλάξτε μία ετικέτα ασφαλείας που εφαρμόζεται σε ένα αντικείμενο" +msgstr "ορίστε ή αλλάξτε μία ετικέτα ασφαλείας που εφαρμόζεται σε ένα αντικείμενο" -#: sql_help.c:5821 sql_help.c:5875 sql_help.c:5911 +#: sql_help.c:5962 sql_help.c:6016 sql_help.c:6052 msgid "retrieve rows from a table or view" msgstr "ανακτήστε σειρές από πίνακα ή όψη" -#: sql_help.c:5833 +#: sql_help.c:5974 msgid "change a run-time parameter" msgstr "αλλάξτε μία παράμετρο χρόνου εκτέλεσης" -#: sql_help.c:5839 +#: sql_help.c:5980 msgid "set constraint check timing for the current transaction" msgstr "ορίστε τον χρονισμό ελέγχου περιορισμού για την τρέχουσα συναλλαγή" -#: sql_help.c:5845 +#: sql_help.c:5986 msgid "set the current user identifier of the current session" msgstr "ορίστε το αναγνωριστικό τρέχοντος χρήστη της τρέχουσας συνεδρίας" -#: sql_help.c:5851 -msgid "" -"set the session user identifier and the current user identifier of the " -"current session" -msgstr "" -"ορίστε το αναγνωριστικό χρήστη συνεδρίας και το αναγνωριστικό τρέχοντος " -"χρήστη της τρέχουσας συνεδρίας" +#: sql_help.c:5992 +msgid "set the session user identifier and the current user identifier of the current session" +msgstr "ορίστε το αναγνωριστικό χρήστη συνεδρίας και το αναγνωριστικό τρέχοντος χρήστη της τρέχουσας συνεδρίας" -#: sql_help.c:5857 +#: sql_help.c:5998 msgid "set the characteristics of the current transaction" msgstr "ορίστε τα χαρακτηριστικά της τρέχουσας συναλλαγής" -#: sql_help.c:5863 +#: sql_help.c:6004 msgid "show the value of a run-time parameter" msgstr "εμφάνιση της τιμής μιας παραμέτρου χρόνου εκτέλεσης" -#: sql_help.c:5881 +#: sql_help.c:6022 msgid "empty a table or set of tables" msgstr "αδειάστε έναν πίνακα ή ένα σύνολο πινάκων" -#: sql_help.c:5887 +#: sql_help.c:6028 msgid "stop listening for a notification" msgstr "σταματήστε να ακούτε μια κοινοποίηση" -#: sql_help.c:5893 +#: sql_help.c:6034 msgid "update rows of a table" msgstr "ενημέρωση σειρών πίνακα" -#: sql_help.c:5899 +#: sql_help.c:6040 msgid "garbage-collect and optionally analyze a database" msgstr "συλλογή απορριμμάτων και προαιρετική ανάλυση βάσης δεδομένων" -#: sql_help.c:5905 +#: sql_help.c:6046 msgid "compute a set of rows" msgstr "υπολογίστε ένα σύνολο σειρών" -#: startup.c:212 +#: startup.c:213 #, c-format msgid "-1 can only be used in non-interactive mode" msgstr "-1 μπορεί να χρησιμοποιηθεί μόνο σε μη διαδραστική λειτουργία" -#: startup.c:327 +#: startup.c:326 #, c-format msgid "could not open log file \"%s\": %m" msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου καταγραφής “%s”: %m" -#: startup.c:439 +#: startup.c:438 #, c-format msgid "" "Type \"help\" for help.\n" @@ -6697,27 +6486,27 @@ msgstr "" "Γράψτε “help” για βοήθεια.\n" "\n" -#: startup.c:589 +#: startup.c:591 #, c-format msgid "could not set printing parameter \"%s\"" msgstr "δεν ήταν δυνατός ο ορισμός παραμέτρου εκτύπωσης “%s”" -#: startup.c:697 +#: startup.c:699 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Δοκιμάστε “%s —help” για περισσότερες πληροφορίες.\n" -#: startup.c:714 +#: startup.c:716 #, c-format msgid "extra command-line argument \"%s\" ignored" msgstr "παραβλέπεται η πρόσθετη παράμετρος γραμμής εντολών \"%s\"" -#: startup.c:763 +#: startup.c:765 #, c-format msgid "could not find own program executable" msgstr "δεν ήταν δυνατή η εύρεση του ιδίου εκτελέσιμου προγράμματος" -#: tab-complete.c:4640 +#: tab-complete.c:4896 #, c-format msgid "" "tab completion query failed: %s\n" @@ -6751,3 +6540,9 @@ msgid "" msgstr "" "Μη αναγνωρίσιμη τιμή \"%s\" για \"%s\"\n" "Οι διαθέσιμες τιμές είναι: %s." + +#~ msgid "All connection parameters must be supplied because no database connection exists" +#~ msgstr "Πρέπει να δωθούν όλες οι παρέμετροι γιατί δεν υπάρχει σύνδεση με τη βάση δεδομένων" + +#~ msgid "pclose failed: %m" +#~ msgstr "απέτυχε η εντολή pclose: %m" diff --git a/src/bin/psql/po/es.po b/src/bin/psql/po/es.po index 59c3ffe42a972..80f5c974d48c3 100644 --- a/src/bin/psql/po/es.po +++ b/src/bin/psql/po/es.po @@ -6,21 +6,22 @@ # Alvaro Herrera, , 2003-2015 # Diego A. Gil , 2005 # Martín Marqués , 2013 +# Carlos Chapi , 2021 # msgid "" msgstr "" -"Project-Id-Version: psql (PostgreSQL) 12\n" +"Project-Id-Version: psql (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-14 19:45+0000\n" -"PO-Revision-Date: 2020-09-14 13:02-0300\n" -"Last-Translator: Álvaro Herrera \n" +"POT-Creation-Date: 2021-06-11 16:45+0000\n" +"PO-Revision-Date: 2021-06-14 20:11-0500\n" +"Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: BlackCAT 1.1\n" #: ../../../src/common/logging.c:259 #, c-format @@ -68,10 +69,9 @@ msgid "could not read symbolic link \"%s\": %m" msgstr "no se pudo leer el enlace simbólico «%s»: %m" #: ../../common/exec.c:409 -#, fuzzy, c-format -#| msgid "%s failed: %m" +#, c-format msgid "%s() failed: %m" -msgstr "%s falló: %m" +msgstr "%s() falló: %m" #: ../../common/exec.c:522 ../../common/exec.c:567 ../../common/exec.c:659 #: command.c:1315 command.c:3246 command.c:3295 command.c:3412 input.c:227 @@ -391,12 +391,12 @@ msgstr "Contraseña para usuario %s: " #: command.c:3104 #, c-format msgid "Do not give user, host, or port separately when using a connection string" -msgstr "" +msgstr "No proporcione usuario, host o puerto de forma separada al usar una cadena de conexión" #: command.c:3139 #, c-format msgid "No database connection exists to re-use parameters from" -msgstr "" +msgstr "No existe una conexión de base de datos para poder reusar sus parámetros" #: command.c:3440 #, c-format @@ -853,14 +853,9 @@ msgid "more than one row returned for \\gset" msgstr "\\gset retornó más de un renglón" #: common.c:791 -#, fuzzy, c-format -#| msgid "" -#| "List of specially treated variables\n" -#| "\n" +#, c-format msgid "attempt to \\gset into specially treated variable \"%s\" ignored" -msgstr "" -"Lista de variables con tratamiento especial\n" -"\n" +msgstr "se ignoró intentó de hacer \\gset a variable con tratamiento especial «%s»" #: common.c:1211 #, c-format @@ -1506,20 +1501,17 @@ msgid "Storage" msgstr "Almacenamiento" #: describe.c:2196 -#, fuzzy -#| msgid "expression" msgid "Compression" -msgstr "expresión" +msgstr "Compresión" #: describe.c:2198 msgid "Stats target" msgstr "Estadísticas" #: describe.c:2334 -#, fuzzy, c-format -#| msgid "Partition of: %s %s" +#, c-format msgid "Partition of: %s %s%s" -msgstr "Partición de: %s %s" +msgstr "Partición de: %s %s%s" #: describe.c:2347 msgid "No partition constraint" @@ -1837,10 +1829,8 @@ msgid "special" msgstr "especial" #: describe.c:4044 -#, fuzzy -#| msgid "TOAST table \"%s.%s\"" msgid "TOAST table" -msgstr "Tabla TOAST «%s.%s»" +msgstr "Tabla TOAST" #: describe.c:4047 describe.c:4270 msgid "partitioned index" @@ -1863,10 +1853,8 @@ msgid "Persistence" msgstr "Persistencia" #: describe.c:4091 -#, fuzzy -#| msgid "Access method: %s" msgid "Access method" -msgstr "Método de acceso: %s" +msgstr "Método de acceso" #: describe.c:4183 msgid "List of relations" @@ -1982,28 +1970,25 @@ msgid "List of event triggers" msgstr "Listado de disparadores por eventos" #: describe.c:4720 -#, fuzzy, c-format -#| msgid "The server (version %s) does not support extensions." +#, c-format msgid "The server (version %s) does not support extended statistics." -msgstr "El servidor (versión %s) no soporta extensiones." +msgstr "El servidor (versión %s) no soporta estadísticas extendidas." #: describe.c:4757 msgid "Ndistinct" -msgstr "" +msgstr "Ndistinct" #: describe.c:4758 msgid "Dependencies" -msgstr "" +msgstr "Dependencias" #: describe.c:4768 msgid "MCV" -msgstr "" +msgstr "MCV" #: describe.c:4787 -#, fuzzy -#| msgid "define extended statistics" msgid "List of extended statistics" -msgstr "define estadísticas extendidas" +msgstr "Lista de estadísticas extendidas" #: describe.c:4814 msgid "Source type" @@ -2330,11 +2315,11 @@ msgstr "Publicación" #: describe.c:6423 msgid "Binary" -msgstr "" +msgstr "Binario" #: describe.c:6424 msgid "Streaming" -msgstr "" +msgstr "De flujo" #: describe.c:6429 msgid "Synchronous commit" @@ -2961,22 +2946,22 @@ msgstr " \\dA[+] [PATRÓN] listar métodos de acceso\n" #: help.c:228 #, c-format msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" -msgstr " \\do[S] [PATRÓN] listar las clases de operadores\n" +msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] listar las clases de operadores\n" #: help.c:229 #, c-format msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" -msgstr " \\do[S] [PATRÓN] listar las familias de operadores\n" +msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] listar las familias de operadores\n" #: help.c:230 #, c-format msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" -msgstr " \\do[S] [PATRÓN] listar los operadores de la familia de operadores\n" +msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] listar los operadores de la familia de operadores\n" #: help.c:231 #, c-format -msgid " \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" -msgstr " \\dAp [AMPTRN [OPFPTRN]] enumera las funciones de la familia de operadores\n" +msgid " \\dAp[+] [AMPTRN [OPFPTRN]] list support functions of operator families\n" +msgstr " \\dAp[+] [AMPTRN [OPFPTRN]] enumera las funciones de la familia de operadores\n" #: help.c:232 #, c-format @@ -3034,12 +3019,13 @@ msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [PATRÓN] listar conectores de datos externos\n" #: help.c:243 -#, fuzzy, c-format -#| msgid " \\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] functions\n" +#, c-format msgid "" " \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" " list [only agg/normal/procedure/trigger/window] functions\n" -msgstr " \\df[anptw][S+] [PATRÓN] listar funciones [sólo ag./normal/proc./trigger/ventana]\n" +msgstr "" +" \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" +" listar funciones [sólo ag./normal/proc./trigger/ventana]\n" #: help.c:245 #, c-format @@ -3092,12 +3078,13 @@ msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [PATRÓN] listar esquemas\n" #: help.c:255 -#, fuzzy, c-format -#| msgid " \\do[S] [PATTERN] list operators\n" +#, c-format msgid "" -" \\do[S] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" +" \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" " list operators\n" -msgstr " \\do[S] [PATRÓN] listar operadores\n" +msgstr "" +" \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" +" listar operadores\n" #: help.c:257 #, c-format @@ -3160,15 +3147,14 @@ msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [PATRÓN] listar extensiones\n" #: help.c:269 -#, fuzzy, c-format -#| msgid " \\dy [PATTERN] list event triggers\n" +#, c-format msgid " \\dX [PATTERN] list extended statistics\n" -msgstr " \\dy [PATRÓN] listar disparadores por eventos\n" +msgstr " \\dX [PATRÓN] listar estadísticas extendidas\n" #: help.c:270 #, c-format -msgid " \\dy [PATTERN] list event triggers\n" -msgstr " \\dy [PATRÓN] listar disparadores por eventos\n" +msgid " \\dy[+] [PATTERN] list event triggers\n" +msgstr " \\dy[+] [PATRÓN] listar disparadores por eventos\n" #: help.c:271 #, c-format @@ -3457,13 +3443,10 @@ msgstr "" " (por omisión: 0=sin límite)\n" #: help.c:377 -#, fuzzy, c-format -#| msgid "" -#| " HIDE_TABLEAM\n" -#| " if set, table access methods are not displayed\n" +#, c-format msgid "" -" HIDE_TOAST_COMPRESSION\n" -" if set, compression methods are not displayed\n" +" HIDE_TABLEAM\n" +" if set, table access methods are not displayed\n" msgstr "" " HIDE_TABLEAM\n" " ocultar métodos de acceso de tabla\n" @@ -3471,11 +3454,11 @@ msgstr "" #: help.c:379 #, c-format msgid "" -" HIDE_TABLEAM\n" -" if set, table access methods are not displayed\n" +" HIDE_TOAST_COMPRESSION\n" +" if set, compression methods are not displayed\n" msgstr "" -" HIDE_TABLEAM\n" -" ocultar métodos de acceso de tabla\n" +" HIDE_TOAST_COMPRESSION\n" +" ocultar métodos de compresión\n" #: help.c:381 #, c-format @@ -3883,16 +3866,16 @@ msgstr " PGHOST igual que el parámetro de conexión host\n" #: help.c:492 #, c-format msgid "" -" PGPASSWORD\n" -" connection password (not recommended)\n" -msgstr " PGPASSWORD contraseña de la conexión (no recomendado)\n" +" PGPASSFILE\n" +" password file name\n" +msgstr " PGPASSFILE nombre de archivo de contraseñas\n" #: help.c:494 #, c-format msgid "" -" PGPASSFILE\n" -" password file name\n" -msgstr " PGPASSFILE nombre de archivo de contraseñas\n" +" PGPASSWORD\n" +" connection password (not recommended)\n" +msgstr " PGPASSWORD contraseña de la conexión (no recomendado)\n" #: help.c:496 #, c-format @@ -4132,46 +4115,46 @@ msgstr "%s: memoria agotada" #: sql_help.c:1083 sql_help.c:1095 sql_help.c:1097 sql_help.c:1099 #: sql_help.c:1101 sql_help.c:1119 sql_help.c:1121 sql_help.c:1125 #: sql_help.c:1129 sql_help.c:1133 sql_help.c:1136 sql_help.c:1137 -#: sql_help.c:1138 sql_help.c:1141 sql_help.c:1143 sql_help.c:1279 -#: sql_help.c:1281 sql_help.c:1284 sql_help.c:1287 sql_help.c:1289 -#: sql_help.c:1291 sql_help.c:1294 sql_help.c:1297 sql_help.c:1411 -#: sql_help.c:1413 sql_help.c:1415 sql_help.c:1418 sql_help.c:1439 -#: sql_help.c:1442 sql_help.c:1445 sql_help.c:1448 sql_help.c:1452 -#: sql_help.c:1454 sql_help.c:1456 sql_help.c:1458 sql_help.c:1472 -#: sql_help.c:1475 sql_help.c:1477 sql_help.c:1479 sql_help.c:1489 -#: sql_help.c:1491 sql_help.c:1501 sql_help.c:1503 sql_help.c:1513 -#: sql_help.c:1516 sql_help.c:1539 sql_help.c:1541 sql_help.c:1543 -#: sql_help.c:1545 sql_help.c:1548 sql_help.c:1550 sql_help.c:1553 -#: sql_help.c:1556 sql_help.c:1607 sql_help.c:1650 sql_help.c:1653 -#: sql_help.c:1655 sql_help.c:1657 sql_help.c:1660 sql_help.c:1662 -#: sql_help.c:1664 sql_help.c:1667 sql_help.c:1717 sql_help.c:1733 -#: sql_help.c:1964 sql_help.c:2033 sql_help.c:2052 sql_help.c:2065 -#: sql_help.c:2122 sql_help.c:2129 sql_help.c:2139 sql_help.c:2160 -#: sql_help.c:2186 sql_help.c:2204 sql_help.c:2231 sql_help.c:2327 -#: sql_help.c:2373 sql_help.c:2397 sql_help.c:2420 sql_help.c:2424 -#: sql_help.c:2458 sql_help.c:2478 sql_help.c:2500 sql_help.c:2514 -#: sql_help.c:2535 sql_help.c:2559 sql_help.c:2589 sql_help.c:2614 -#: sql_help.c:2661 sql_help.c:2949 sql_help.c:2962 sql_help.c:2979 -#: sql_help.c:2995 sql_help.c:3035 sql_help.c:3089 sql_help.c:3093 -#: sql_help.c:3095 sql_help.c:3102 sql_help.c:3121 sql_help.c:3148 -#: sql_help.c:3183 sql_help.c:3195 sql_help.c:3204 sql_help.c:3248 -#: sql_help.c:3262 sql_help.c:3290 sql_help.c:3298 sql_help.c:3310 -#: sql_help.c:3320 sql_help.c:3328 sql_help.c:3336 sql_help.c:3344 -#: sql_help.c:3352 sql_help.c:3361 sql_help.c:3372 sql_help.c:3380 -#: sql_help.c:3388 sql_help.c:3396 sql_help.c:3404 sql_help.c:3414 -#: sql_help.c:3423 sql_help.c:3432 sql_help.c:3440 sql_help.c:3450 -#: sql_help.c:3461 sql_help.c:3469 sql_help.c:3478 sql_help.c:3489 -#: sql_help.c:3498 sql_help.c:3506 sql_help.c:3514 sql_help.c:3522 -#: sql_help.c:3530 sql_help.c:3538 sql_help.c:3546 sql_help.c:3554 -#: sql_help.c:3562 sql_help.c:3570 sql_help.c:3578 sql_help.c:3595 -#: sql_help.c:3604 sql_help.c:3612 sql_help.c:3629 sql_help.c:3644 -#: sql_help.c:3946 sql_help.c:3997 sql_help.c:4026 sql_help.c:4041 -#: sql_help.c:4526 sql_help.c:4574 sql_help.c:4725 +#: sql_help.c:1138 sql_help.c:1141 sql_help.c:1143 sql_help.c:1278 +#: sql_help.c:1280 sql_help.c:1283 sql_help.c:1286 sql_help.c:1288 +#: sql_help.c:1290 sql_help.c:1293 sql_help.c:1296 sql_help.c:1409 +#: sql_help.c:1411 sql_help.c:1413 sql_help.c:1416 sql_help.c:1437 +#: sql_help.c:1440 sql_help.c:1443 sql_help.c:1446 sql_help.c:1450 +#: sql_help.c:1452 sql_help.c:1454 sql_help.c:1456 sql_help.c:1470 +#: sql_help.c:1473 sql_help.c:1475 sql_help.c:1477 sql_help.c:1487 +#: sql_help.c:1489 sql_help.c:1499 sql_help.c:1501 sql_help.c:1511 +#: sql_help.c:1514 sql_help.c:1537 sql_help.c:1539 sql_help.c:1541 +#: sql_help.c:1543 sql_help.c:1546 sql_help.c:1548 sql_help.c:1551 +#: sql_help.c:1554 sql_help.c:1605 sql_help.c:1648 sql_help.c:1651 +#: sql_help.c:1653 sql_help.c:1655 sql_help.c:1658 sql_help.c:1660 +#: sql_help.c:1662 sql_help.c:1665 sql_help.c:1715 sql_help.c:1731 +#: sql_help.c:1962 sql_help.c:2031 sql_help.c:2050 sql_help.c:2063 +#: sql_help.c:2120 sql_help.c:2127 sql_help.c:2137 sql_help.c:2158 +#: sql_help.c:2184 sql_help.c:2202 sql_help.c:2229 sql_help.c:2325 +#: sql_help.c:2371 sql_help.c:2395 sql_help.c:2418 sql_help.c:2422 +#: sql_help.c:2456 sql_help.c:2476 sql_help.c:2498 sql_help.c:2512 +#: sql_help.c:2533 sql_help.c:2557 sql_help.c:2587 sql_help.c:2612 +#: sql_help.c:2659 sql_help.c:2947 sql_help.c:2960 sql_help.c:2977 +#: sql_help.c:2993 sql_help.c:3033 sql_help.c:3087 sql_help.c:3091 +#: sql_help.c:3093 sql_help.c:3100 sql_help.c:3119 sql_help.c:3146 +#: sql_help.c:3181 sql_help.c:3193 sql_help.c:3202 sql_help.c:3246 +#: sql_help.c:3260 sql_help.c:3288 sql_help.c:3296 sql_help.c:3308 +#: sql_help.c:3318 sql_help.c:3326 sql_help.c:3334 sql_help.c:3342 +#: sql_help.c:3350 sql_help.c:3359 sql_help.c:3370 sql_help.c:3378 +#: sql_help.c:3386 sql_help.c:3394 sql_help.c:3402 sql_help.c:3412 +#: sql_help.c:3421 sql_help.c:3430 sql_help.c:3438 sql_help.c:3448 +#: sql_help.c:3459 sql_help.c:3467 sql_help.c:3476 sql_help.c:3487 +#: sql_help.c:3496 sql_help.c:3504 sql_help.c:3512 sql_help.c:3520 +#: sql_help.c:3528 sql_help.c:3536 sql_help.c:3544 sql_help.c:3552 +#: sql_help.c:3560 sql_help.c:3568 sql_help.c:3576 sql_help.c:3593 +#: sql_help.c:3602 sql_help.c:3610 sql_help.c:3627 sql_help.c:3642 +#: sql_help.c:3944 sql_help.c:3995 sql_help.c:4024 sql_help.c:4039 +#: sql_help.c:4524 sql_help.c:4572 sql_help.c:4723 msgid "name" msgstr "nombre" -#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1814 -#: sql_help.c:3263 sql_help.c:4302 +#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1812 +#: sql_help.c:3261 sql_help.c:4300 msgid "aggregate_signature" msgstr "signatura_func_agregación" @@ -4180,9 +4163,9 @@ msgstr "signatura_func_agregación" #: sql_help.c:590 sql_help.c:617 sql_help.c:668 sql_help.c:735 sql_help.c:790 #: sql_help.c:811 sql_help.c:850 sql_help.c:895 sql_help.c:937 sql_help.c:989 #: sql_help.c:1021 sql_help.c:1031 sql_help.c:1064 sql_help.c:1084 -#: sql_help.c:1098 sql_help.c:1144 sql_help.c:1288 sql_help.c:1412 -#: sql_help.c:1455 sql_help.c:1476 sql_help.c:1490 sql_help.c:1502 -#: sql_help.c:1515 sql_help.c:1542 sql_help.c:1608 sql_help.c:1661 +#: sql_help.c:1098 sql_help.c:1144 sql_help.c:1287 sql_help.c:1410 +#: sql_help.c:1453 sql_help.c:1474 sql_help.c:1488 sql_help.c:1500 +#: sql_help.c:1513 sql_help.c:1540 sql_help.c:1606 sql_help.c:1659 msgid "new_name" msgstr "nuevo_nombre" @@ -4190,21 +4173,21 @@ msgstr "nuevo_nombre" #: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:619 #: sql_help.c:628 sql_help.c:689 sql_help.c:709 sql_help.c:738 sql_help.c:793 #: sql_help.c:855 sql_help.c:893 sql_help.c:994 sql_help.c:1033 sql_help.c:1062 -#: sql_help.c:1082 sql_help.c:1096 sql_help.c:1142 sql_help.c:1351 -#: sql_help.c:1414 sql_help.c:1457 sql_help.c:1478 sql_help.c:1540 -#: sql_help.c:1656 sql_help.c:2935 +#: sql_help.c:1082 sql_help.c:1096 sql_help.c:1142 sql_help.c:1350 +#: sql_help.c:1412 sql_help.c:1455 sql_help.c:1476 sql_help.c:1538 +#: sql_help.c:1654 sql_help.c:2933 msgid "new_owner" msgstr "nuevo_dueño" #: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:252 sql_help.c:319 #: sql_help.c:448 sql_help.c:534 sql_help.c:670 sql_help.c:713 sql_help.c:741 #: sql_help.c:796 sql_help.c:860 sql_help.c:999 sql_help.c:1066 sql_help.c:1100 -#: sql_help.c:1290 sql_help.c:1459 sql_help.c:1480 sql_help.c:1492 -#: sql_help.c:1504 sql_help.c:1544 sql_help.c:1663 +#: sql_help.c:1289 sql_help.c:1457 sql_help.c:1478 sql_help.c:1490 +#: sql_help.c:1502 sql_help.c:1542 sql_help.c:1661 msgid "new_schema" msgstr "nuevo_esquema" -#: sql_help.c:44 sql_help.c:1878 sql_help.c:3264 sql_help.c:4331 +#: sql_help.c:44 sql_help.c:1876 sql_help.c:3262 sql_help.c:4329 msgid "where aggregate_signature is:" msgstr "donde signatura_func_agregación es:" @@ -4212,13 +4195,13 @@ msgstr "donde signatura_func_agregación es:" #: sql_help.c:354 sql_help.c:370 sql_help.c:373 sql_help.c:376 sql_help.c:516 #: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:842 #: sql_help.c:847 sql_help.c:852 sql_help.c:857 sql_help.c:862 sql_help.c:981 -#: sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1001 sql_help.c:1832 -#: sql_help.c:1849 sql_help.c:1855 sql_help.c:1879 sql_help.c:1882 -#: sql_help.c:1885 sql_help.c:2034 sql_help.c:2053 sql_help.c:2056 -#: sql_help.c:2328 sql_help.c:2536 sql_help.c:3265 sql_help.c:3268 -#: sql_help.c:3271 sql_help.c:3362 sql_help.c:3451 sql_help.c:3479 -#: sql_help.c:3824 sql_help.c:4204 sql_help.c:4308 sql_help.c:4315 -#: sql_help.c:4321 sql_help.c:4332 sql_help.c:4335 sql_help.c:4338 +#: sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1001 sql_help.c:1830 +#: sql_help.c:1847 sql_help.c:1853 sql_help.c:1877 sql_help.c:1880 +#: sql_help.c:1883 sql_help.c:2032 sql_help.c:2051 sql_help.c:2054 +#: sql_help.c:2326 sql_help.c:2534 sql_help.c:3263 sql_help.c:3266 +#: sql_help.c:3269 sql_help.c:3360 sql_help.c:3449 sql_help.c:3477 +#: sql_help.c:3822 sql_help.c:4202 sql_help.c:4306 sql_help.c:4313 +#: sql_help.c:4319 sql_help.c:4330 sql_help.c:4333 sql_help.c:4336 msgid "argmode" msgstr "modo_arg" @@ -4226,13 +4209,13 @@ msgstr "modo_arg" #: sql_help.c:355 sql_help.c:371 sql_help.c:374 sql_help.c:377 sql_help.c:517 #: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:843 #: sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:863 sql_help.c:982 -#: sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1002 sql_help.c:1833 -#: sql_help.c:1850 sql_help.c:1856 sql_help.c:1880 sql_help.c:1883 -#: sql_help.c:1886 sql_help.c:2035 sql_help.c:2054 sql_help.c:2057 -#: sql_help.c:2329 sql_help.c:2537 sql_help.c:3266 sql_help.c:3269 -#: sql_help.c:3272 sql_help.c:3363 sql_help.c:3452 sql_help.c:3480 -#: sql_help.c:4309 sql_help.c:4316 sql_help.c:4322 sql_help.c:4333 -#: sql_help.c:4336 sql_help.c:4339 +#: sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1002 sql_help.c:1831 +#: sql_help.c:1848 sql_help.c:1854 sql_help.c:1878 sql_help.c:1881 +#: sql_help.c:1884 sql_help.c:2033 sql_help.c:2052 sql_help.c:2055 +#: sql_help.c:2327 sql_help.c:2535 sql_help.c:3264 sql_help.c:3267 +#: sql_help.c:3270 sql_help.c:3361 sql_help.c:3450 sql_help.c:3478 +#: sql_help.c:4307 sql_help.c:4314 sql_help.c:4320 sql_help.c:4331 +#: sql_help.c:4334 sql_help.c:4337 msgid "argname" msgstr "nombre_arg" @@ -4240,54 +4223,54 @@ msgstr "nombre_arg" #: sql_help.c:356 sql_help.c:372 sql_help.c:375 sql_help.c:378 sql_help.c:518 #: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:844 #: sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:864 sql_help.c:983 -#: sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1003 sql_help.c:1834 -#: sql_help.c:1851 sql_help.c:1857 sql_help.c:1881 sql_help.c:1884 -#: sql_help.c:1887 sql_help.c:2330 sql_help.c:2538 sql_help.c:3267 -#: sql_help.c:3270 sql_help.c:3273 sql_help.c:3364 sql_help.c:3453 -#: sql_help.c:3481 sql_help.c:4310 sql_help.c:4317 sql_help.c:4323 -#: sql_help.c:4334 sql_help.c:4337 sql_help.c:4340 +#: sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1003 sql_help.c:1832 +#: sql_help.c:1849 sql_help.c:1855 sql_help.c:1879 sql_help.c:1882 +#: sql_help.c:1885 sql_help.c:2328 sql_help.c:2536 sql_help.c:3265 +#: sql_help.c:3268 sql_help.c:3271 sql_help.c:3362 sql_help.c:3451 +#: sql_help.c:3479 sql_help.c:4308 sql_help.c:4315 sql_help.c:4321 +#: sql_help.c:4332 sql_help.c:4335 sql_help.c:4338 msgid "argtype" msgstr "tipo_arg" #: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:931 -#: sql_help.c:1079 sql_help.c:1473 sql_help.c:1602 sql_help.c:1634 -#: sql_help.c:1686 sql_help.c:1749 sql_help.c:1935 sql_help.c:1942 -#: sql_help.c:2234 sql_help.c:2276 sql_help.c:2283 sql_help.c:2292 -#: sql_help.c:2374 sql_help.c:2590 sql_help.c:2683 sql_help.c:2964 -#: sql_help.c:3149 sql_help.c:3171 sql_help.c:3311 sql_help.c:3666 -#: sql_help.c:3865 sql_help.c:4040 sql_help.c:4788 +#: sql_help.c:1079 sql_help.c:1471 sql_help.c:1600 sql_help.c:1632 +#: sql_help.c:1684 sql_help.c:1747 sql_help.c:1933 sql_help.c:1940 +#: sql_help.c:2232 sql_help.c:2274 sql_help.c:2281 sql_help.c:2290 +#: sql_help.c:2372 sql_help.c:2588 sql_help.c:2681 sql_help.c:2962 +#: sql_help.c:3147 sql_help.c:3169 sql_help.c:3309 sql_help.c:3664 +#: sql_help.c:3863 sql_help.c:4038 sql_help.c:4786 msgid "option" msgstr "opción" -#: sql_help.c:113 sql_help.c:932 sql_help.c:1603 sql_help.c:2375 -#: sql_help.c:2591 sql_help.c:3150 sql_help.c:3312 +#: sql_help.c:113 sql_help.c:932 sql_help.c:1601 sql_help.c:2373 +#: sql_help.c:2589 sql_help.c:3148 sql_help.c:3310 msgid "where option can be:" msgstr "donde opción puede ser:" -#: sql_help.c:114 sql_help.c:2168 +#: sql_help.c:114 sql_help.c:2166 msgid "allowconn" msgstr "allowconn" -#: sql_help.c:115 sql_help.c:933 sql_help.c:1604 sql_help.c:2169 -#: sql_help.c:2376 sql_help.c:2592 sql_help.c:3151 +#: sql_help.c:115 sql_help.c:933 sql_help.c:1602 sql_help.c:2167 +#: sql_help.c:2374 sql_help.c:2590 sql_help.c:3149 msgid "connlimit" msgstr "límite_conexiones" -#: sql_help.c:116 sql_help.c:2170 +#: sql_help.c:116 sql_help.c:2168 msgid "istemplate" msgstr "esplantilla" -#: sql_help.c:122 sql_help.c:607 sql_help.c:673 sql_help.c:1293 sql_help.c:1344 -#: sql_help.c:4044 +#: sql_help.c:122 sql_help.c:607 sql_help.c:673 sql_help.c:1292 sql_help.c:1343 +#: sql_help.c:4042 msgid "new_tablespace" msgstr "nuevo_tablespace" #: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:544 sql_help.c:546 #: sql_help.c:547 sql_help.c:867 sql_help.c:869 sql_help.c:870 sql_help.c:940 #: sql_help.c:944 sql_help.c:947 sql_help.c:1008 sql_help.c:1010 -#: sql_help.c:1011 sql_help.c:1155 sql_help.c:1158 sql_help.c:1611 -#: sql_help.c:1615 sql_help.c:1618 sql_help.c:2340 sql_help.c:2542 -#: sql_help.c:4062 sql_help.c:4515 +#: sql_help.c:1011 sql_help.c:1155 sql_help.c:1158 sql_help.c:1609 +#: sql_help.c:1613 sql_help.c:1616 sql_help.c:2338 sql_help.c:2540 +#: sql_help.c:4060 sql_help.c:4513 msgid "configuration_parameter" msgstr "parámetro_de_configuración" @@ -4295,15 +4278,15 @@ msgstr "parámetro_de_configuración" #: sql_help.c:545 sql_help.c:599 sql_help.c:679 sql_help.c:687 sql_help.c:868 #: sql_help.c:891 sql_help.c:941 sql_help.c:1009 sql_help.c:1080 #: sql_help.c:1124 sql_help.c:1128 sql_help.c:1132 sql_help.c:1135 -#: sql_help.c:1140 sql_help.c:1156 sql_help.c:1157 sql_help.c:1324 -#: sql_help.c:1346 sql_help.c:1395 sql_help.c:1417 sql_help.c:1474 -#: sql_help.c:1558 sql_help.c:1612 sql_help.c:1635 sql_help.c:2235 -#: sql_help.c:2277 sql_help.c:2284 sql_help.c:2293 sql_help.c:2341 -#: sql_help.c:2342 sql_help.c:2405 sql_help.c:2408 sql_help.c:2442 -#: sql_help.c:2543 sql_help.c:2544 sql_help.c:2562 sql_help.c:2684 -#: sql_help.c:2723 sql_help.c:2829 sql_help.c:2842 sql_help.c:2856 -#: sql_help.c:2897 sql_help.c:2921 sql_help.c:2938 sql_help.c:2965 -#: sql_help.c:3172 sql_help.c:3866 sql_help.c:4516 sql_help.c:4517 +#: sql_help.c:1140 sql_help.c:1156 sql_help.c:1157 sql_help.c:1323 +#: sql_help.c:1345 sql_help.c:1393 sql_help.c:1415 sql_help.c:1472 +#: sql_help.c:1556 sql_help.c:1610 sql_help.c:1633 sql_help.c:2233 +#: sql_help.c:2275 sql_help.c:2282 sql_help.c:2291 sql_help.c:2339 +#: sql_help.c:2340 sql_help.c:2403 sql_help.c:2406 sql_help.c:2440 +#: sql_help.c:2541 sql_help.c:2542 sql_help.c:2560 sql_help.c:2682 +#: sql_help.c:2721 sql_help.c:2827 sql_help.c:2840 sql_help.c:2854 +#: sql_help.c:2895 sql_help.c:2919 sql_help.c:2936 sql_help.c:2963 +#: sql_help.c:3170 sql_help.c:3864 sql_help.c:4514 sql_help.c:4515 msgid "value" msgstr "valor" @@ -4311,9 +4294,9 @@ msgstr "valor" msgid "target_role" msgstr "rol_destino" -#: sql_help.c:198 sql_help.c:2219 sql_help.c:2639 sql_help.c:2644 -#: sql_help.c:3799 sql_help.c:3808 sql_help.c:3827 sql_help.c:3836 -#: sql_help.c:4179 sql_help.c:4188 sql_help.c:4207 sql_help.c:4216 +#: sql_help.c:198 sql_help.c:2217 sql_help.c:2637 sql_help.c:2642 +#: sql_help.c:3797 sql_help.c:3806 sql_help.c:3825 sql_help.c:3834 +#: sql_help.c:4177 sql_help.c:4186 sql_help.c:4205 sql_help.c:4214 msgid "schema_name" msgstr "nombre_de_esquema" @@ -4328,30 +4311,30 @@ msgstr "donde grant_o_revoke_abreviado es uno de:" #: sql_help.c:201 sql_help.c:202 sql_help.c:203 sql_help.c:204 sql_help.c:205 #: sql_help.c:206 sql_help.c:207 sql_help.c:208 sql_help.c:209 sql_help.c:210 #: sql_help.c:570 sql_help.c:606 sql_help.c:672 sql_help.c:814 sql_help.c:951 -#: sql_help.c:1292 sql_help.c:1622 sql_help.c:2379 sql_help.c:2380 -#: sql_help.c:2381 sql_help.c:2382 sql_help.c:2383 sql_help.c:2516 -#: sql_help.c:2595 sql_help.c:2596 sql_help.c:2597 sql_help.c:2598 -#: sql_help.c:2599 sql_help.c:3154 sql_help.c:3155 sql_help.c:3156 -#: sql_help.c:3157 sql_help.c:3158 sql_help.c:3845 sql_help.c:3849 -#: sql_help.c:4225 sql_help.c:4229 sql_help.c:4536 +#: sql_help.c:1291 sql_help.c:1620 sql_help.c:2377 sql_help.c:2378 +#: sql_help.c:2379 sql_help.c:2380 sql_help.c:2381 sql_help.c:2514 +#: sql_help.c:2593 sql_help.c:2594 sql_help.c:2595 sql_help.c:2596 +#: sql_help.c:2597 sql_help.c:3152 sql_help.c:3153 sql_help.c:3154 +#: sql_help.c:3155 sql_help.c:3156 sql_help.c:3843 sql_help.c:3847 +#: sql_help.c:4223 sql_help.c:4227 sql_help.c:4534 msgid "role_name" msgstr "nombre_de_rol" -#: sql_help.c:236 sql_help.c:459 sql_help.c:1308 sql_help.c:1310 -#: sql_help.c:1361 sql_help.c:1374 sql_help.c:1399 sql_help.c:1652 -#: sql_help.c:2189 sql_help.c:2193 sql_help.c:2296 sql_help.c:2301 -#: sql_help.c:2401 sql_help.c:2700 sql_help.c:2705 sql_help.c:2707 -#: sql_help.c:2824 sql_help.c:2837 sql_help.c:2851 sql_help.c:2860 -#: sql_help.c:2872 sql_help.c:2901 sql_help.c:3897 sql_help.c:3912 -#: sql_help.c:3914 sql_help.c:4393 sql_help.c:4394 sql_help.c:4403 -#: sql_help.c:4445 sql_help.c:4446 sql_help.c:4447 sql_help.c:4448 -#: sql_help.c:4449 sql_help.c:4450 sql_help.c:4490 sql_help.c:4491 -#: sql_help.c:4496 sql_help.c:4501 sql_help.c:4642 sql_help.c:4643 -#: sql_help.c:4652 sql_help.c:4694 sql_help.c:4695 sql_help.c:4696 -#: sql_help.c:4697 sql_help.c:4698 sql_help.c:4699 sql_help.c:4753 -#: sql_help.c:4755 sql_help.c:4816 sql_help.c:4874 sql_help.c:4875 -#: sql_help.c:4884 sql_help.c:4926 sql_help.c:4927 sql_help.c:4928 -#: sql_help.c:4929 sql_help.c:4930 sql_help.c:4931 +#: sql_help.c:236 sql_help.c:459 sql_help.c:1307 sql_help.c:1309 +#: sql_help.c:1360 sql_help.c:1372 sql_help.c:1397 sql_help.c:1650 +#: sql_help.c:2187 sql_help.c:2191 sql_help.c:2294 sql_help.c:2299 +#: sql_help.c:2399 sql_help.c:2698 sql_help.c:2703 sql_help.c:2705 +#: sql_help.c:2822 sql_help.c:2835 sql_help.c:2849 sql_help.c:2858 +#: sql_help.c:2870 sql_help.c:2899 sql_help.c:3895 sql_help.c:3910 +#: sql_help.c:3912 sql_help.c:4391 sql_help.c:4392 sql_help.c:4401 +#: sql_help.c:4443 sql_help.c:4444 sql_help.c:4445 sql_help.c:4446 +#: sql_help.c:4447 sql_help.c:4448 sql_help.c:4488 sql_help.c:4489 +#: sql_help.c:4494 sql_help.c:4499 sql_help.c:4640 sql_help.c:4641 +#: sql_help.c:4650 sql_help.c:4692 sql_help.c:4693 sql_help.c:4694 +#: sql_help.c:4695 sql_help.c:4696 sql_help.c:4697 sql_help.c:4751 +#: sql_help.c:4753 sql_help.c:4814 sql_help.c:4872 sql_help.c:4873 +#: sql_help.c:4882 sql_help.c:4924 sql_help.c:4925 sql_help.c:4926 +#: sql_help.c:4927 sql_help.c:4928 sql_help.c:4929 msgid "expression" msgstr "expresión" @@ -4360,14 +4343,14 @@ msgid "domain_constraint" msgstr "restricción_de_dominio" #: sql_help.c:241 sql_help.c:243 sql_help.c:246 sql_help.c:474 sql_help.c:475 -#: sql_help.c:1285 sql_help.c:1332 sql_help.c:1333 sql_help.c:1334 -#: sql_help.c:1360 sql_help.c:1373 sql_help.c:1390 sql_help.c:1820 -#: sql_help.c:1822 sql_help.c:2192 sql_help.c:2295 sql_help.c:2300 -#: sql_help.c:2859 sql_help.c:2871 sql_help.c:3909 +#: sql_help.c:1284 sql_help.c:1331 sql_help.c:1332 sql_help.c:1333 +#: sql_help.c:1359 sql_help.c:1371 sql_help.c:1388 sql_help.c:1818 +#: sql_help.c:1820 sql_help.c:2190 sql_help.c:2293 sql_help.c:2298 +#: sql_help.c:2857 sql_help.c:2869 sql_help.c:3907 msgid "constraint_name" msgstr "nombre_restricción" -#: sql_help.c:244 sql_help.c:1286 +#: sql_help.c:244 sql_help.c:1285 msgid "new_constraint_name" msgstr "nuevo_nombre_restricción" @@ -4387,82 +4370,82 @@ msgstr "dondo objeto_miembro es:" #: sql_help.c:334 sql_help.c:335 sql_help.c:340 sql_help.c:344 sql_help.c:346 #: sql_help.c:348 sql_help.c:357 sql_help.c:358 sql_help.c:359 sql_help.c:360 #: sql_help.c:361 sql_help.c:362 sql_help.c:363 sql_help.c:364 sql_help.c:367 -#: sql_help.c:368 sql_help.c:1812 sql_help.c:1817 sql_help.c:1824 -#: sql_help.c:1825 sql_help.c:1826 sql_help.c:1827 sql_help.c:1828 -#: sql_help.c:1829 sql_help.c:1830 sql_help.c:1835 sql_help.c:1837 -#: sql_help.c:1841 sql_help.c:1843 sql_help.c:1847 sql_help.c:1852 -#: sql_help.c:1853 sql_help.c:1860 sql_help.c:1861 sql_help.c:1862 -#: sql_help.c:1863 sql_help.c:1864 sql_help.c:1865 sql_help.c:1866 -#: sql_help.c:1867 sql_help.c:1868 sql_help.c:1869 sql_help.c:1870 -#: sql_help.c:1875 sql_help.c:1876 sql_help.c:4298 sql_help.c:4303 -#: sql_help.c:4304 sql_help.c:4305 sql_help.c:4306 sql_help.c:4312 -#: sql_help.c:4313 sql_help.c:4318 sql_help.c:4319 sql_help.c:4324 -#: sql_help.c:4325 sql_help.c:4326 sql_help.c:4327 sql_help.c:4328 -#: sql_help.c:4329 +#: sql_help.c:368 sql_help.c:1810 sql_help.c:1815 sql_help.c:1822 +#: sql_help.c:1823 sql_help.c:1824 sql_help.c:1825 sql_help.c:1826 +#: sql_help.c:1827 sql_help.c:1828 sql_help.c:1833 sql_help.c:1835 +#: sql_help.c:1839 sql_help.c:1841 sql_help.c:1845 sql_help.c:1850 +#: sql_help.c:1851 sql_help.c:1858 sql_help.c:1859 sql_help.c:1860 +#: sql_help.c:1861 sql_help.c:1862 sql_help.c:1863 sql_help.c:1864 +#: sql_help.c:1865 sql_help.c:1866 sql_help.c:1867 sql_help.c:1868 +#: sql_help.c:1873 sql_help.c:1874 sql_help.c:4296 sql_help.c:4301 +#: sql_help.c:4302 sql_help.c:4303 sql_help.c:4304 sql_help.c:4310 +#: sql_help.c:4311 sql_help.c:4316 sql_help.c:4317 sql_help.c:4322 +#: sql_help.c:4323 sql_help.c:4324 sql_help.c:4325 sql_help.c:4326 +#: sql_help.c:4327 msgid "object_name" msgstr "nombre_de_objeto" -#: sql_help.c:326 sql_help.c:1813 sql_help.c:4301 +#: sql_help.c:326 sql_help.c:1811 sql_help.c:4299 msgid "aggregate_name" msgstr "nombre_función_agregación" -#: sql_help.c:328 sql_help.c:1815 sql_help.c:2099 sql_help.c:2103 -#: sql_help.c:2105 sql_help.c:3281 +#: sql_help.c:328 sql_help.c:1813 sql_help.c:2097 sql_help.c:2101 +#: sql_help.c:2103 sql_help.c:3279 msgid "source_type" msgstr "tipo_fuente" -#: sql_help.c:329 sql_help.c:1816 sql_help.c:2100 sql_help.c:2104 -#: sql_help.c:2106 sql_help.c:3282 +#: sql_help.c:329 sql_help.c:1814 sql_help.c:2098 sql_help.c:2102 +#: sql_help.c:2104 sql_help.c:3280 msgid "target_type" msgstr "tipo_destino" -#: sql_help.c:336 sql_help.c:778 sql_help.c:1831 sql_help.c:2101 -#: sql_help.c:2142 sql_help.c:2207 sql_help.c:2459 sql_help.c:2490 -#: sql_help.c:3041 sql_help.c:4203 sql_help.c:4307 sql_help.c:4422 -#: sql_help.c:4426 sql_help.c:4430 sql_help.c:4433 sql_help.c:4671 -#: sql_help.c:4675 sql_help.c:4679 sql_help.c:4682 sql_help.c:4903 -#: sql_help.c:4907 sql_help.c:4911 sql_help.c:4914 +#: sql_help.c:336 sql_help.c:778 sql_help.c:1829 sql_help.c:2099 +#: sql_help.c:2140 sql_help.c:2205 sql_help.c:2457 sql_help.c:2488 +#: sql_help.c:3039 sql_help.c:4201 sql_help.c:4305 sql_help.c:4420 +#: sql_help.c:4424 sql_help.c:4428 sql_help.c:4431 sql_help.c:4669 +#: sql_help.c:4673 sql_help.c:4677 sql_help.c:4680 sql_help.c:4901 +#: sql_help.c:4905 sql_help.c:4909 sql_help.c:4912 msgid "function_name" msgstr "nombre_de_función" -#: sql_help.c:341 sql_help.c:771 sql_help.c:1838 sql_help.c:2483 +#: sql_help.c:341 sql_help.c:771 sql_help.c:1836 sql_help.c:2481 msgid "operator_name" msgstr "nombre_operador" -#: sql_help.c:342 sql_help.c:707 sql_help.c:711 sql_help.c:715 sql_help.c:1839 -#: sql_help.c:2460 sql_help.c:3405 +#: sql_help.c:342 sql_help.c:707 sql_help.c:711 sql_help.c:715 sql_help.c:1837 +#: sql_help.c:2458 sql_help.c:3403 msgid "left_type" msgstr "tipo_izq" -#: sql_help.c:343 sql_help.c:708 sql_help.c:712 sql_help.c:716 sql_help.c:1840 -#: sql_help.c:2461 sql_help.c:3406 +#: sql_help.c:343 sql_help.c:708 sql_help.c:712 sql_help.c:716 sql_help.c:1838 +#: sql_help.c:2459 sql_help.c:3404 msgid "right_type" msgstr "tipo_der" #: sql_help.c:345 sql_help.c:347 sql_help.c:734 sql_help.c:737 sql_help.c:740 #: sql_help.c:769 sql_help.c:781 sql_help.c:789 sql_help.c:792 sql_help.c:795 -#: sql_help.c:1379 sql_help.c:1842 sql_help.c:1844 sql_help.c:2480 -#: sql_help.c:2501 sql_help.c:2877 sql_help.c:3415 sql_help.c:3424 +#: sql_help.c:1377 sql_help.c:1840 sql_help.c:1842 sql_help.c:2478 +#: sql_help.c:2499 sql_help.c:2875 sql_help.c:3413 sql_help.c:3422 msgid "index_method" msgstr "método_de_índice" -#: sql_help.c:349 sql_help.c:1848 sql_help.c:4314 +#: sql_help.c:349 sql_help.c:1846 sql_help.c:4312 msgid "procedure_name" msgstr "nombre_de_procedimiento" -#: sql_help.c:353 sql_help.c:1854 sql_help.c:3823 sql_help.c:4320 +#: sql_help.c:353 sql_help.c:1852 sql_help.c:3821 sql_help.c:4318 msgid "routine_name" msgstr "nombre_de_rutina" -#: sql_help.c:365 sql_help.c:1350 sql_help.c:1871 sql_help.c:2336 -#: sql_help.c:2541 sql_help.c:2832 sql_help.c:3008 sql_help.c:3586 -#: sql_help.c:3842 sql_help.c:4222 +#: sql_help.c:365 sql_help.c:1349 sql_help.c:1869 sql_help.c:2334 +#: sql_help.c:2539 sql_help.c:2830 sql_help.c:3006 sql_help.c:3584 +#: sql_help.c:3840 sql_help.c:4220 msgid "type_name" msgstr "nombre_de_tipo" -#: sql_help.c:366 sql_help.c:1872 sql_help.c:2335 sql_help.c:2540 -#: sql_help.c:3009 sql_help.c:3239 sql_help.c:3587 sql_help.c:3830 -#: sql_help.c:4210 +#: sql_help.c:366 sql_help.c:1870 sql_help.c:2333 sql_help.c:2538 +#: sql_help.c:3007 sql_help.c:3237 sql_help.c:3585 sql_help.c:3828 +#: sql_help.c:4208 msgid "lang_name" msgstr "nombre_lenguaje" @@ -4470,142 +4453,142 @@ msgstr "nombre_lenguaje" msgid "and aggregate_signature is:" msgstr "y signatura_func_agregación es:" -#: sql_help.c:392 sql_help.c:1966 sql_help.c:2232 +#: sql_help.c:392 sql_help.c:1964 sql_help.c:2230 msgid "handler_function" msgstr "función_manejadora" -#: sql_help.c:393 sql_help.c:2233 +#: sql_help.c:393 sql_help.c:2231 msgid "validator_function" msgstr "función_validadora" #: sql_help.c:441 sql_help.c:519 sql_help.c:661 sql_help.c:845 sql_help.c:984 -#: sql_help.c:1280 sql_help.c:1549 +#: sql_help.c:1279 sql_help.c:1547 msgid "action" msgstr "acción" #: sql_help.c:443 sql_help.c:450 sql_help.c:454 sql_help.c:455 sql_help.c:458 #: sql_help.c:460 sql_help.c:461 sql_help.c:462 sql_help.c:464 sql_help.c:467 #: sql_help.c:469 sql_help.c:470 sql_help.c:665 sql_help.c:675 sql_help.c:677 -#: sql_help.c:680 sql_help.c:682 sql_help.c:683 sql_help.c:1060 sql_help.c:1282 -#: sql_help.c:1300 sql_help.c:1304 sql_help.c:1305 sql_help.c:1309 -#: sql_help.c:1311 sql_help.c:1312 sql_help.c:1313 sql_help.c:1314 -#: sql_help.c:1316 sql_help.c:1319 sql_help.c:1320 sql_help.c:1322 -#: sql_help.c:1325 sql_help.c:1327 sql_help.c:1328 sql_help.c:1375 -#: sql_help.c:1377 sql_help.c:1384 sql_help.c:1393 sql_help.c:1398 -#: sql_help.c:1651 sql_help.c:1654 sql_help.c:1658 sql_help.c:1694 -#: sql_help.c:1819 sql_help.c:1932 sql_help.c:1938 sql_help.c:1951 -#: sql_help.c:1952 sql_help.c:1953 sql_help.c:2274 sql_help.c:2287 -#: sql_help.c:2333 sql_help.c:2400 sql_help.c:2406 sql_help.c:2439 -#: sql_help.c:2669 sql_help.c:2704 sql_help.c:2706 sql_help.c:2814 -#: sql_help.c:2823 sql_help.c:2833 sql_help.c:2836 sql_help.c:2846 -#: sql_help.c:2850 sql_help.c:2873 sql_help.c:2875 sql_help.c:2882 -#: sql_help.c:2895 sql_help.c:2900 sql_help.c:2918 sql_help.c:3044 -#: sql_help.c:3184 sql_help.c:3802 sql_help.c:3803 sql_help.c:3896 -#: sql_help.c:3911 sql_help.c:3913 sql_help.c:3915 sql_help.c:4182 -#: sql_help.c:4183 sql_help.c:4300 sql_help.c:4454 sql_help.c:4460 -#: sql_help.c:4462 sql_help.c:4703 sql_help.c:4709 sql_help.c:4711 -#: sql_help.c:4752 sql_help.c:4754 sql_help.c:4756 sql_help.c:4804 -#: sql_help.c:4935 sql_help.c:4941 sql_help.c:4943 +#: sql_help.c:680 sql_help.c:682 sql_help.c:683 sql_help.c:1060 sql_help.c:1281 +#: sql_help.c:1299 sql_help.c:1303 sql_help.c:1304 sql_help.c:1308 +#: sql_help.c:1310 sql_help.c:1311 sql_help.c:1312 sql_help.c:1313 +#: sql_help.c:1315 sql_help.c:1318 sql_help.c:1319 sql_help.c:1321 +#: sql_help.c:1324 sql_help.c:1326 sql_help.c:1327 sql_help.c:1373 +#: sql_help.c:1375 sql_help.c:1382 sql_help.c:1391 sql_help.c:1396 +#: sql_help.c:1649 sql_help.c:1652 sql_help.c:1656 sql_help.c:1692 +#: sql_help.c:1817 sql_help.c:1930 sql_help.c:1936 sql_help.c:1949 +#: sql_help.c:1950 sql_help.c:1951 sql_help.c:2272 sql_help.c:2285 +#: sql_help.c:2331 sql_help.c:2398 sql_help.c:2404 sql_help.c:2437 +#: sql_help.c:2667 sql_help.c:2702 sql_help.c:2704 sql_help.c:2812 +#: sql_help.c:2821 sql_help.c:2831 sql_help.c:2834 sql_help.c:2844 +#: sql_help.c:2848 sql_help.c:2871 sql_help.c:2873 sql_help.c:2880 +#: sql_help.c:2893 sql_help.c:2898 sql_help.c:2916 sql_help.c:3042 +#: sql_help.c:3182 sql_help.c:3800 sql_help.c:3801 sql_help.c:3894 +#: sql_help.c:3909 sql_help.c:3911 sql_help.c:3913 sql_help.c:4180 +#: sql_help.c:4181 sql_help.c:4298 sql_help.c:4452 sql_help.c:4458 +#: sql_help.c:4460 sql_help.c:4701 sql_help.c:4707 sql_help.c:4709 +#: sql_help.c:4750 sql_help.c:4752 sql_help.c:4754 sql_help.c:4802 +#: sql_help.c:4933 sql_help.c:4939 sql_help.c:4941 msgid "column_name" msgstr "nombre_de_columna" -#: sql_help.c:444 sql_help.c:666 sql_help.c:1283 sql_help.c:1659 +#: sql_help.c:444 sql_help.c:666 sql_help.c:1282 sql_help.c:1657 msgid "new_column_name" msgstr "nuevo_nombre_de_columna" #: sql_help.c:449 sql_help.c:540 sql_help.c:674 sql_help.c:866 sql_help.c:1005 -#: sql_help.c:1299 sql_help.c:1559 +#: sql_help.c:1298 sql_help.c:1557 msgid "where action is one of:" msgstr "donde acción es una de:" -#: sql_help.c:451 sql_help.c:456 sql_help.c:1052 sql_help.c:1301 -#: sql_help.c:1306 sql_help.c:1561 sql_help.c:1565 sql_help.c:2187 -#: sql_help.c:2275 sql_help.c:2479 sql_help.c:2662 sql_help.c:2815 -#: sql_help.c:3091 sql_help.c:3998 +#: sql_help.c:451 sql_help.c:456 sql_help.c:1052 sql_help.c:1300 +#: sql_help.c:1305 sql_help.c:1559 sql_help.c:1563 sql_help.c:2185 +#: sql_help.c:2273 sql_help.c:2477 sql_help.c:2660 sql_help.c:2813 +#: sql_help.c:3089 sql_help.c:3996 msgid "data_type" msgstr "tipo_de_dato" -#: sql_help.c:452 sql_help.c:457 sql_help.c:1302 sql_help.c:1307 -#: sql_help.c:1562 sql_help.c:1566 sql_help.c:2188 sql_help.c:2278 -#: sql_help.c:2402 sql_help.c:2816 sql_help.c:2825 sql_help.c:2838 -#: sql_help.c:2852 sql_help.c:3092 sql_help.c:3098 sql_help.c:3906 +#: sql_help.c:452 sql_help.c:457 sql_help.c:1301 sql_help.c:1306 +#: sql_help.c:1560 sql_help.c:1564 sql_help.c:2186 sql_help.c:2276 +#: sql_help.c:2400 sql_help.c:2815 sql_help.c:2823 sql_help.c:2836 +#: sql_help.c:2850 sql_help.c:3090 sql_help.c:3096 sql_help.c:3904 msgid "collation" msgstr "ordenamiento" -#: sql_help.c:453 sql_help.c:1303 sql_help.c:2279 sql_help.c:2288 -#: sql_help.c:2818 sql_help.c:2834 sql_help.c:2847 +#: sql_help.c:453 sql_help.c:1302 sql_help.c:2277 sql_help.c:2286 +#: sql_help.c:2816 sql_help.c:2832 sql_help.c:2845 msgid "column_constraint" msgstr "restricción_de_columna" -#: sql_help.c:463 sql_help.c:604 sql_help.c:676 sql_help.c:1321 sql_help.c:4801 +#: sql_help.c:463 sql_help.c:604 sql_help.c:676 sql_help.c:1320 sql_help.c:4799 msgid "integer" msgstr "entero" -#: sql_help.c:465 sql_help.c:468 sql_help.c:678 sql_help.c:681 sql_help.c:1323 -#: sql_help.c:1326 +#: sql_help.c:465 sql_help.c:468 sql_help.c:678 sql_help.c:681 sql_help.c:1322 +#: sql_help.c:1325 msgid "attribute_option" msgstr "opción_de_atributo" -#: sql_help.c:473 sql_help.c:1330 sql_help.c:2280 sql_help.c:2289 -#: sql_help.c:2819 sql_help.c:2835 sql_help.c:2848 +#: sql_help.c:473 sql_help.c:1329 sql_help.c:2278 sql_help.c:2287 +#: sql_help.c:2817 sql_help.c:2833 sql_help.c:2846 msgid "table_constraint" msgstr "restricción_de_tabla" -#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1335 -#: sql_help.c:1336 sql_help.c:1337 sql_help.c:1338 sql_help.c:1873 +#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1334 +#: sql_help.c:1335 sql_help.c:1336 sql_help.c:1337 sql_help.c:1871 msgid "trigger_name" msgstr "nombre_disparador" -#: sql_help.c:480 sql_help.c:481 sql_help.c:1348 sql_help.c:1349 -#: sql_help.c:2281 sql_help.c:2286 sql_help.c:2822 sql_help.c:2845 +#: sql_help.c:480 sql_help.c:481 sql_help.c:1347 sql_help.c:1348 +#: sql_help.c:2279 sql_help.c:2284 sql_help.c:2820 sql_help.c:2843 msgid "parent_table" msgstr "tabla_padre" #: sql_help.c:539 sql_help.c:596 sql_help.c:663 sql_help.c:865 sql_help.c:1004 -#: sql_help.c:1518 sql_help.c:2218 +#: sql_help.c:1516 sql_help.c:2216 msgid "extension_name" msgstr "nombre_de_extensión" -#: sql_help.c:541 sql_help.c:1006 sql_help.c:2337 +#: sql_help.c:541 sql_help.c:1006 sql_help.c:2335 msgid "execution_cost" msgstr "costo_de_ejecución" -#: sql_help.c:542 sql_help.c:1007 sql_help.c:2338 +#: sql_help.c:542 sql_help.c:1007 sql_help.c:2336 msgid "result_rows" msgstr "núm_de_filas" -#: sql_help.c:543 sql_help.c:2339 +#: sql_help.c:543 sql_help.c:2337 msgid "support_function" msgstr "función_de_soporte" #: sql_help.c:565 sql_help.c:567 sql_help.c:930 sql_help.c:938 sql_help.c:942 -#: sql_help.c:945 sql_help.c:948 sql_help.c:1601 sql_help.c:1609 -#: sql_help.c:1613 sql_help.c:1616 sql_help.c:1619 sql_help.c:2640 -#: sql_help.c:2642 sql_help.c:2645 sql_help.c:2646 sql_help.c:3800 -#: sql_help.c:3801 sql_help.c:3805 sql_help.c:3806 sql_help.c:3809 -#: sql_help.c:3810 sql_help.c:3812 sql_help.c:3813 sql_help.c:3815 -#: sql_help.c:3816 sql_help.c:3818 sql_help.c:3819 sql_help.c:3821 -#: sql_help.c:3822 sql_help.c:3828 sql_help.c:3829 sql_help.c:3831 -#: sql_help.c:3832 sql_help.c:3834 sql_help.c:3835 sql_help.c:3837 -#: sql_help.c:3838 sql_help.c:3840 sql_help.c:3841 sql_help.c:3843 -#: sql_help.c:3844 sql_help.c:3846 sql_help.c:3847 sql_help.c:4180 -#: sql_help.c:4181 sql_help.c:4185 sql_help.c:4186 sql_help.c:4189 -#: sql_help.c:4190 sql_help.c:4192 sql_help.c:4193 sql_help.c:4195 -#: sql_help.c:4196 sql_help.c:4198 sql_help.c:4199 sql_help.c:4201 -#: sql_help.c:4202 sql_help.c:4208 sql_help.c:4209 sql_help.c:4211 -#: sql_help.c:4212 sql_help.c:4214 sql_help.c:4215 sql_help.c:4217 -#: sql_help.c:4218 sql_help.c:4220 sql_help.c:4221 sql_help.c:4223 -#: sql_help.c:4224 sql_help.c:4226 sql_help.c:4227 +#: sql_help.c:945 sql_help.c:948 sql_help.c:1599 sql_help.c:1607 +#: sql_help.c:1611 sql_help.c:1614 sql_help.c:1617 sql_help.c:2638 +#: sql_help.c:2640 sql_help.c:2643 sql_help.c:2644 sql_help.c:3798 +#: sql_help.c:3799 sql_help.c:3803 sql_help.c:3804 sql_help.c:3807 +#: sql_help.c:3808 sql_help.c:3810 sql_help.c:3811 sql_help.c:3813 +#: sql_help.c:3814 sql_help.c:3816 sql_help.c:3817 sql_help.c:3819 +#: sql_help.c:3820 sql_help.c:3826 sql_help.c:3827 sql_help.c:3829 +#: sql_help.c:3830 sql_help.c:3832 sql_help.c:3833 sql_help.c:3835 +#: sql_help.c:3836 sql_help.c:3838 sql_help.c:3839 sql_help.c:3841 +#: sql_help.c:3842 sql_help.c:3844 sql_help.c:3845 sql_help.c:4178 +#: sql_help.c:4179 sql_help.c:4183 sql_help.c:4184 sql_help.c:4187 +#: sql_help.c:4188 sql_help.c:4190 sql_help.c:4191 sql_help.c:4193 +#: sql_help.c:4194 sql_help.c:4196 sql_help.c:4197 sql_help.c:4199 +#: sql_help.c:4200 sql_help.c:4206 sql_help.c:4207 sql_help.c:4209 +#: sql_help.c:4210 sql_help.c:4212 sql_help.c:4213 sql_help.c:4215 +#: sql_help.c:4216 sql_help.c:4218 sql_help.c:4219 sql_help.c:4221 +#: sql_help.c:4222 sql_help.c:4224 sql_help.c:4225 msgid "role_specification" msgstr "especificación_de_rol" -#: sql_help.c:566 sql_help.c:568 sql_help.c:1632 sql_help.c:2161 -#: sql_help.c:2648 sql_help.c:3169 sql_help.c:3620 sql_help.c:4546 +#: sql_help.c:566 sql_help.c:568 sql_help.c:1630 sql_help.c:2159 +#: sql_help.c:2646 sql_help.c:3167 sql_help.c:3618 sql_help.c:4544 msgid "user_name" msgstr "nombre_de_usuario" -#: sql_help.c:569 sql_help.c:950 sql_help.c:1621 sql_help.c:2647 -#: sql_help.c:3848 sql_help.c:4228 +#: sql_help.c:569 sql_help.c:950 sql_help.c:1619 sql_help.c:2645 +#: sql_help.c:3846 sql_help.c:4226 msgid "where role_specification can be:" msgstr "donde especificación_de_rol puede ser:" @@ -4613,22 +4596,22 @@ msgstr "donde especificación_de_rol puede ser:" msgid "group_name" msgstr "nombre_de_grupo" -#: sql_help.c:592 sql_help.c:1396 sql_help.c:2167 sql_help.c:2409 -#: sql_help.c:2443 sql_help.c:2830 sql_help.c:2843 sql_help.c:2857 -#: sql_help.c:2898 sql_help.c:2922 sql_help.c:2934 sql_help.c:3839 -#: sql_help.c:4219 +#: sql_help.c:592 sql_help.c:1394 sql_help.c:2165 sql_help.c:2407 +#: sql_help.c:2441 sql_help.c:2828 sql_help.c:2841 sql_help.c:2855 +#: sql_help.c:2896 sql_help.c:2920 sql_help.c:2932 sql_help.c:3837 +#: sql_help.c:4217 msgid "tablespace_name" msgstr "nombre_de_tablespace" -#: sql_help.c:594 sql_help.c:685 sql_help.c:1343 sql_help.c:1352 -#: sql_help.c:1391 sql_help.c:1748 sql_help.c:1751 +#: sql_help.c:594 sql_help.c:685 sql_help.c:1342 sql_help.c:1351 +#: sql_help.c:1389 sql_help.c:1746 sql_help.c:1749 msgid "index_name" msgstr "nombre_índice" -#: sql_help.c:598 sql_help.c:601 sql_help.c:686 sql_help.c:688 sql_help.c:1345 -#: sql_help.c:1347 sql_help.c:1394 sql_help.c:2407 sql_help.c:2441 -#: sql_help.c:2828 sql_help.c:2841 sql_help.c:2855 sql_help.c:2896 -#: sql_help.c:2920 +#: sql_help.c:598 sql_help.c:601 sql_help.c:686 sql_help.c:688 sql_help.c:1344 +#: sql_help.c:1346 sql_help.c:1392 sql_help.c:2405 sql_help.c:2439 +#: sql_help.c:2826 sql_help.c:2839 sql_help.c:2853 sql_help.c:2894 +#: sql_help.c:2918 msgid "storage_parameter" msgstr "parámetro_de_almacenamiento" @@ -4636,114 +4619,112 @@ msgstr "parámetro_de_almacenamiento" msgid "column_number" msgstr "número_de_columna" -#: sql_help.c:627 sql_help.c:1836 sql_help.c:4311 +#: sql_help.c:627 sql_help.c:1834 sql_help.c:4309 msgid "large_object_oid" msgstr "oid_de_objeto_grande" -#: sql_help.c:684 sql_help.c:1329 sql_help.c:1367 sql_help.c:2817 -#, fuzzy -#| msgid "sampling_method" +#: sql_help.c:684 sql_help.c:1328 sql_help.c:2814 msgid "compression_method" -msgstr "método_de_sampleo" +msgstr "método_de_compresión" -#: sql_help.c:717 sql_help.c:2464 +#: sql_help.c:717 sql_help.c:2462 msgid "res_proc" msgstr "proc_res" -#: sql_help.c:718 sql_help.c:2465 +#: sql_help.c:718 sql_help.c:2463 msgid "join_proc" msgstr "proc_join" -#: sql_help.c:770 sql_help.c:782 sql_help.c:2482 +#: sql_help.c:770 sql_help.c:782 sql_help.c:2480 msgid "strategy_number" msgstr "número_de_estrategia" #: sql_help.c:772 sql_help.c:773 sql_help.c:776 sql_help.c:777 sql_help.c:783 -#: sql_help.c:784 sql_help.c:786 sql_help.c:787 sql_help.c:2484 sql_help.c:2485 -#: sql_help.c:2488 sql_help.c:2489 +#: sql_help.c:784 sql_help.c:786 sql_help.c:787 sql_help.c:2482 sql_help.c:2483 +#: sql_help.c:2486 sql_help.c:2487 msgid "op_type" msgstr "tipo_op" -#: sql_help.c:774 sql_help.c:2486 +#: sql_help.c:774 sql_help.c:2484 msgid "sort_family_name" msgstr "nombre_familia_ordenamiento" -#: sql_help.c:775 sql_help.c:785 sql_help.c:2487 +#: sql_help.c:775 sql_help.c:785 sql_help.c:2485 msgid "support_number" msgstr "número_de_soporte" -#: sql_help.c:779 sql_help.c:2102 sql_help.c:2491 sql_help.c:3011 -#: sql_help.c:3013 +#: sql_help.c:779 sql_help.c:2100 sql_help.c:2489 sql_help.c:3009 +#: sql_help.c:3011 msgid "argument_type" msgstr "tipo_argumento" #: sql_help.c:810 sql_help.c:813 sql_help.c:884 sql_help.c:886 sql_help.c:888 -#: sql_help.c:1020 sql_help.c:1059 sql_help.c:1514 sql_help.c:1517 -#: sql_help.c:1693 sql_help.c:1747 sql_help.c:1750 sql_help.c:1821 -#: sql_help.c:1846 sql_help.c:1859 sql_help.c:1874 sql_help.c:1931 -#: sql_help.c:1937 sql_help.c:2273 sql_help.c:2285 sql_help.c:2398 -#: sql_help.c:2438 sql_help.c:2515 sql_help.c:2560 sql_help.c:2616 -#: sql_help.c:2668 sql_help.c:2701 sql_help.c:2708 sql_help.c:2813 -#: sql_help.c:2831 sql_help.c:2844 sql_help.c:2917 sql_help.c:3037 -#: sql_help.c:3218 sql_help.c:3441 sql_help.c:3490 sql_help.c:3596 -#: sql_help.c:3798 sql_help.c:3804 sql_help.c:3862 sql_help.c:3894 -#: sql_help.c:4178 sql_help.c:4184 sql_help.c:4299 sql_help.c:4408 -#: sql_help.c:4410 sql_help.c:4467 sql_help.c:4506 sql_help.c:4657 -#: sql_help.c:4659 sql_help.c:4716 sql_help.c:4750 sql_help.c:4803 -#: sql_help.c:4889 sql_help.c:4891 sql_help.c:4948 +#: sql_help.c:1020 sql_help.c:1059 sql_help.c:1512 sql_help.c:1515 +#: sql_help.c:1691 sql_help.c:1745 sql_help.c:1748 sql_help.c:1819 +#: sql_help.c:1844 sql_help.c:1857 sql_help.c:1872 sql_help.c:1929 +#: sql_help.c:1935 sql_help.c:2271 sql_help.c:2283 sql_help.c:2396 +#: sql_help.c:2436 sql_help.c:2513 sql_help.c:2558 sql_help.c:2614 +#: sql_help.c:2666 sql_help.c:2699 sql_help.c:2706 sql_help.c:2811 +#: sql_help.c:2829 sql_help.c:2842 sql_help.c:2915 sql_help.c:3035 +#: sql_help.c:3216 sql_help.c:3439 sql_help.c:3488 sql_help.c:3594 +#: sql_help.c:3796 sql_help.c:3802 sql_help.c:3860 sql_help.c:3892 +#: sql_help.c:4176 sql_help.c:4182 sql_help.c:4297 sql_help.c:4406 +#: sql_help.c:4408 sql_help.c:4465 sql_help.c:4504 sql_help.c:4655 +#: sql_help.c:4657 sql_help.c:4714 sql_help.c:4748 sql_help.c:4801 +#: sql_help.c:4887 sql_help.c:4889 sql_help.c:4946 msgid "table_name" msgstr "nombre_de_tabla" -#: sql_help.c:815 sql_help.c:2517 +#: sql_help.c:815 sql_help.c:2515 msgid "using_expression" msgstr "expresión_using" -#: sql_help.c:816 sql_help.c:2518 +#: sql_help.c:816 sql_help.c:2516 msgid "check_expression" msgstr "expresión_check" -#: sql_help.c:890 sql_help.c:2561 +#: sql_help.c:890 sql_help.c:2559 msgid "publication_parameter" msgstr "parámetro_de_publicación" -#: sql_help.c:934 sql_help.c:1605 sql_help.c:2377 sql_help.c:2593 -#: sql_help.c:3152 +#: sql_help.c:934 sql_help.c:1603 sql_help.c:2375 sql_help.c:2591 +#: sql_help.c:3150 msgid "password" msgstr "contraseña" -#: sql_help.c:935 sql_help.c:1606 sql_help.c:2378 sql_help.c:2594 -#: sql_help.c:3153 +#: sql_help.c:935 sql_help.c:1604 sql_help.c:2376 sql_help.c:2592 +#: sql_help.c:3151 msgid "timestamp" msgstr "fecha_hora" -#: sql_help.c:939 sql_help.c:943 sql_help.c:946 sql_help.c:949 sql_help.c:1610 -#: sql_help.c:1614 sql_help.c:1617 sql_help.c:1620 sql_help.c:3811 -#: sql_help.c:4191 +#: sql_help.c:939 sql_help.c:943 sql_help.c:946 sql_help.c:949 sql_help.c:1608 +#: sql_help.c:1612 sql_help.c:1615 sql_help.c:1618 sql_help.c:3809 +#: sql_help.c:4189 msgid "database_name" msgstr "nombre_de_base_de_datos" -#: sql_help.c:1053 sql_help.c:2663 +#: sql_help.c:1053 sql_help.c:2661 msgid "increment" msgstr "incremento" -#: sql_help.c:1054 sql_help.c:2664 +#: sql_help.c:1054 sql_help.c:2662 msgid "minvalue" msgstr "valormin" -#: sql_help.c:1055 sql_help.c:2665 +#: sql_help.c:1055 sql_help.c:2663 msgid "maxvalue" msgstr "valormax" -#: sql_help.c:1056 sql_help.c:2666 sql_help.c:4406 sql_help.c:4504 -#: sql_help.c:4655 sql_help.c:4820 sql_help.c:4887 +#: sql_help.c:1056 sql_help.c:2664 sql_help.c:4404 sql_help.c:4502 +#: sql_help.c:4653 sql_help.c:4818 sql_help.c:4885 msgid "start" msgstr "inicio" -#: sql_help.c:1057 sql_help.c:1318 +#: sql_help.c:1057 sql_help.c:1317 msgid "restart" msgstr "reinicio" -#: sql_help.c:1058 sql_help.c:2667 +#: sql_help.c:1058 sql_help.c:2665 msgid "cache" msgstr "cache" @@ -4751,11 +4732,11 @@ msgstr "cache" msgid "new_target" msgstr "nuevo_valor" -#: sql_help.c:1120 sql_help.c:2720 +#: sql_help.c:1120 sql_help.c:2718 msgid "conninfo" msgstr "conninfo" -#: sql_help.c:1122 sql_help.c:1126 sql_help.c:1130 sql_help.c:2721 +#: sql_help.c:1122 sql_help.c:1126 sql_help.c:1130 sql_help.c:2719 msgid "publication_name" msgstr "nombre_de_publicación" @@ -4767,1659 +4748,1641 @@ msgstr "opción_de_conjunto_de_publicación" msgid "refresh_option" msgstr "opción_refresh" -#: sql_help.c:1139 sql_help.c:2722 +#: sql_help.c:1139 sql_help.c:2720 msgid "subscription_parameter" msgstr "parámetro_de_suscripción" -#: sql_help.c:1295 sql_help.c:1298 +#: sql_help.c:1294 sql_help.c:1297 msgid "partition_name" msgstr "nombre_de_partición" -#: sql_help.c:1296 sql_help.c:2290 sql_help.c:2849 +#: sql_help.c:1295 sql_help.c:2288 sql_help.c:2847 msgid "partition_bound_spec" msgstr "borde_de_partición" -#: sql_help.c:1315 sql_help.c:1364 sql_help.c:2863 +#: sql_help.c:1314 sql_help.c:1363 sql_help.c:2861 msgid "sequence_options" msgstr "opciones_de_secuencia" -#: sql_help.c:1317 +#: sql_help.c:1316 msgid "sequence_option" msgstr "opción_de_secuencia" -#: sql_help.c:1331 +#: sql_help.c:1330 msgid "table_constraint_using_index" msgstr "restricción_de_tabla_con_índice" -#: sql_help.c:1339 sql_help.c:1340 sql_help.c:1341 sql_help.c:1342 +#: sql_help.c:1338 sql_help.c:1339 sql_help.c:1340 sql_help.c:1341 msgid "rewrite_rule_name" msgstr "nombre_regla_de_reescritura" -#: sql_help.c:1353 sql_help.c:2888 +#: sql_help.c:1352 sql_help.c:2886 msgid "and partition_bound_spec is:" msgstr "y borde_de_partición es:" -#: sql_help.c:1354 sql_help.c:1355 sql_help.c:1356 sql_help.c:2889 -#: sql_help.c:2890 sql_help.c:2891 +#: sql_help.c:1353 sql_help.c:1354 sql_help.c:1355 sql_help.c:2887 +#: sql_help.c:2888 sql_help.c:2889 msgid "partition_bound_expr" msgstr "expresión_de_borde_de_partición" -#: sql_help.c:1357 sql_help.c:1358 sql_help.c:2892 sql_help.c:2893 +#: sql_help.c:1356 sql_help.c:1357 sql_help.c:2890 sql_help.c:2891 msgid "numeric_literal" msgstr "literal_numérico" -#: sql_help.c:1359 +#: sql_help.c:1358 msgid "and column_constraint is:" msgstr "donde restricción_de_columna es:" -#: sql_help.c:1362 sql_help.c:2297 sql_help.c:2331 sql_help.c:2539 -#: sql_help.c:2861 +#: sql_help.c:1361 sql_help.c:2295 sql_help.c:2329 sql_help.c:2537 +#: sql_help.c:2859 msgid "default_expr" msgstr "expr_por_omisión" -#: sql_help.c:1363 sql_help.c:2298 sql_help.c:2862 +#: sql_help.c:1362 sql_help.c:2296 sql_help.c:2860 msgid "generation_expr" msgstr "expr_de_generación" -#: sql_help.c:1365 sql_help.c:1366 sql_help.c:1376 sql_help.c:1378 -#: sql_help.c:1382 sql_help.c:2864 sql_help.c:2865 sql_help.c:2874 -#: sql_help.c:2876 sql_help.c:2880 +#: sql_help.c:1364 sql_help.c:1365 sql_help.c:1374 sql_help.c:1376 +#: sql_help.c:1380 sql_help.c:2862 sql_help.c:2863 sql_help.c:2872 +#: sql_help.c:2874 sql_help.c:2878 msgid "index_parameters" msgstr "parámetros_de_índice" -#: sql_help.c:1368 sql_help.c:1385 sql_help.c:2866 sql_help.c:2883 +#: sql_help.c:1366 sql_help.c:1383 sql_help.c:2864 sql_help.c:2881 msgid "reftable" msgstr "tabla_ref" -#: sql_help.c:1369 sql_help.c:1386 sql_help.c:2867 sql_help.c:2884 +#: sql_help.c:1367 sql_help.c:1384 sql_help.c:2865 sql_help.c:2882 msgid "refcolumn" msgstr "columna_ref" -#: sql_help.c:1370 sql_help.c:1371 sql_help.c:1387 sql_help.c:1388 -#: sql_help.c:2868 sql_help.c:2869 sql_help.c:2885 sql_help.c:2886 +#: sql_help.c:1368 sql_help.c:1369 sql_help.c:1385 sql_help.c:1386 +#: sql_help.c:2866 sql_help.c:2867 sql_help.c:2883 sql_help.c:2884 msgid "referential_action" msgstr "acción_referencial" -#: sql_help.c:1372 sql_help.c:2299 sql_help.c:2870 +#: sql_help.c:1370 sql_help.c:2297 sql_help.c:2868 msgid "and table_constraint is:" msgstr "y restricción_de_tabla es:" -#: sql_help.c:1380 sql_help.c:2878 +#: sql_help.c:1378 sql_help.c:2876 msgid "exclude_element" msgstr "elemento_de_exclusión" -#: sql_help.c:1381 sql_help.c:2879 sql_help.c:4404 sql_help.c:4502 -#: sql_help.c:4653 sql_help.c:4818 sql_help.c:4885 +#: sql_help.c:1379 sql_help.c:2877 sql_help.c:4402 sql_help.c:4500 +#: sql_help.c:4651 sql_help.c:4816 sql_help.c:4883 msgid "operator" msgstr "operador" -#: sql_help.c:1383 sql_help.c:2410 sql_help.c:2881 +#: sql_help.c:1381 sql_help.c:2408 sql_help.c:2879 msgid "predicate" msgstr "predicado" -#: sql_help.c:1389 +#: sql_help.c:1387 msgid "and table_constraint_using_index is:" msgstr "y restricción_de_tabla_con_índice es:" -#: sql_help.c:1392 sql_help.c:2894 +#: sql_help.c:1390 sql_help.c:2892 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "parámetros_de_índice en UNIQUE, PRIMARY KEY y EXCLUDE son:" -#: sql_help.c:1397 sql_help.c:2899 +#: sql_help.c:1395 sql_help.c:2897 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "elemento_de_exclusión en una restricción EXCLUDE es:" -#: sql_help.c:1400 sql_help.c:2403 sql_help.c:2826 sql_help.c:2839 -#: sql_help.c:2853 sql_help.c:2902 sql_help.c:3907 +#: sql_help.c:1398 sql_help.c:2401 sql_help.c:2824 sql_help.c:2837 +#: sql_help.c:2851 sql_help.c:2900 sql_help.c:3905 msgid "opclass" msgstr "clase_de_ops" -#: sql_help.c:1416 sql_help.c:1419 sql_help.c:2937 +#: sql_help.c:1414 sql_help.c:1417 sql_help.c:2935 msgid "tablespace_option" msgstr "opción_de_tablespace" -#: sql_help.c:1440 sql_help.c:1443 sql_help.c:1449 sql_help.c:1453 +#: sql_help.c:1438 sql_help.c:1441 sql_help.c:1447 sql_help.c:1451 msgid "token_type" msgstr "tipo_de_token" -#: sql_help.c:1441 sql_help.c:1444 +#: sql_help.c:1439 sql_help.c:1442 msgid "dictionary_name" msgstr "nombre_diccionario" -#: sql_help.c:1446 sql_help.c:1450 +#: sql_help.c:1444 sql_help.c:1448 msgid "old_dictionary" msgstr "diccionario_antiguo" -#: sql_help.c:1447 sql_help.c:1451 +#: sql_help.c:1445 sql_help.c:1449 msgid "new_dictionary" msgstr "diccionario_nuevo" -#: sql_help.c:1546 sql_help.c:1560 sql_help.c:1563 sql_help.c:1564 -#: sql_help.c:3090 +#: sql_help.c:1544 sql_help.c:1558 sql_help.c:1561 sql_help.c:1562 +#: sql_help.c:3088 msgid "attribute_name" msgstr "nombre_atributo" -#: sql_help.c:1547 +#: sql_help.c:1545 msgid "new_attribute_name" msgstr "nuevo_nombre_atributo" -#: sql_help.c:1551 sql_help.c:1555 +#: sql_help.c:1549 sql_help.c:1553 msgid "new_enum_value" msgstr "nuevo_valor_enum" -#: sql_help.c:1552 +#: sql_help.c:1550 msgid "neighbor_enum_value" msgstr "valor_enum_vecino" -#: sql_help.c:1554 +#: sql_help.c:1552 msgid "existing_enum_value" msgstr "valor_enum_existente" -#: sql_help.c:1557 +#: sql_help.c:1555 msgid "property" msgstr "propiedad" -#: sql_help.c:1633 sql_help.c:2282 sql_help.c:2291 sql_help.c:2679 -#: sql_help.c:3170 sql_help.c:3621 sql_help.c:3820 sql_help.c:3863 -#: sql_help.c:4200 +#: sql_help.c:1631 sql_help.c:2280 sql_help.c:2289 sql_help.c:2677 +#: sql_help.c:3168 sql_help.c:3619 sql_help.c:3818 sql_help.c:3861 +#: sql_help.c:4198 msgid "server_name" msgstr "nombre_de_servidor" -#: sql_help.c:1665 sql_help.c:1668 sql_help.c:3185 +#: sql_help.c:1663 sql_help.c:1666 sql_help.c:3183 msgid "view_option_name" msgstr "nombre_opción_de_vista" -#: sql_help.c:1666 sql_help.c:3186 +#: sql_help.c:1664 sql_help.c:3184 msgid "view_option_value" msgstr "valor_opción_de_vista" -#: sql_help.c:1687 sql_help.c:1688 sql_help.c:4789 sql_help.c:4790 +#: sql_help.c:1685 sql_help.c:1686 sql_help.c:4787 sql_help.c:4788 msgid "table_and_columns" msgstr "tabla_y_columnas" -#: sql_help.c:1689 sql_help.c:1752 sql_help.c:1943 sql_help.c:3669 -#: sql_help.c:4042 sql_help.c:4791 +#: sql_help.c:1687 sql_help.c:1750 sql_help.c:1941 sql_help.c:3667 +#: sql_help.c:4040 sql_help.c:4789 msgid "where option can be one of:" msgstr "donde opción puede ser una de:" -#: sql_help.c:1690 sql_help.c:1691 sql_help.c:1753 sql_help.c:1945 -#: sql_help.c:1948 sql_help.c:2127 sql_help.c:3670 sql_help.c:3671 -#: sql_help.c:3672 sql_help.c:3673 sql_help.c:3674 sql_help.c:3675 -#: sql_help.c:3676 sql_help.c:3677 sql_help.c:4043 sql_help.c:4045 -#: sql_help.c:4792 sql_help.c:4793 sql_help.c:4794 sql_help.c:4795 -#: sql_help.c:4796 sql_help.c:4797 sql_help.c:4798 sql_help.c:4799 -#: sql_help.c:4800 +#: sql_help.c:1688 sql_help.c:1689 sql_help.c:1751 sql_help.c:1943 +#: sql_help.c:1946 sql_help.c:2125 sql_help.c:3668 sql_help.c:3669 +#: sql_help.c:3670 sql_help.c:3671 sql_help.c:3672 sql_help.c:3673 +#: sql_help.c:3674 sql_help.c:3675 sql_help.c:4041 sql_help.c:4043 +#: sql_help.c:4790 sql_help.c:4791 sql_help.c:4792 sql_help.c:4793 +#: sql_help.c:4794 sql_help.c:4795 sql_help.c:4796 sql_help.c:4797 +#: sql_help.c:4798 msgid "boolean" msgstr "booleano" -#: sql_help.c:1692 sql_help.c:4802 +#: sql_help.c:1690 sql_help.c:4800 msgid "and table_and_columns is:" msgstr "y tabla_y_columnas es:" -#: sql_help.c:1708 sql_help.c:4562 sql_help.c:4564 sql_help.c:4588 +#: sql_help.c:1706 sql_help.c:4560 sql_help.c:4562 sql_help.c:4586 msgid "transaction_mode" msgstr "modo_de_transacción" -#: sql_help.c:1709 sql_help.c:4565 sql_help.c:4589 +#: sql_help.c:1707 sql_help.c:4563 sql_help.c:4587 msgid "where transaction_mode is one of:" msgstr "donde modo_de_transacción es uno de:" -#: sql_help.c:1718 sql_help.c:4414 sql_help.c:4423 sql_help.c:4427 -#: sql_help.c:4431 sql_help.c:4434 sql_help.c:4663 sql_help.c:4672 -#: sql_help.c:4676 sql_help.c:4680 sql_help.c:4683 sql_help.c:4895 -#: sql_help.c:4904 sql_help.c:4908 sql_help.c:4912 sql_help.c:4915 +#: sql_help.c:1716 sql_help.c:4412 sql_help.c:4421 sql_help.c:4425 +#: sql_help.c:4429 sql_help.c:4432 sql_help.c:4661 sql_help.c:4670 +#: sql_help.c:4674 sql_help.c:4678 sql_help.c:4681 sql_help.c:4893 +#: sql_help.c:4902 sql_help.c:4906 sql_help.c:4910 sql_help.c:4913 msgid "argument" msgstr "argumento" -#: sql_help.c:1818 +#: sql_help.c:1816 msgid "relation_name" msgstr "nombre_relación" -#: sql_help.c:1823 sql_help.c:3814 sql_help.c:4194 +#: sql_help.c:1821 sql_help.c:3812 sql_help.c:4192 msgid "domain_name" msgstr "nombre_de_dominio" -#: sql_help.c:1845 +#: sql_help.c:1843 msgid "policy_name" msgstr "nombre_de_política" -#: sql_help.c:1858 +#: sql_help.c:1856 msgid "rule_name" msgstr "nombre_regla" -#: sql_help.c:1877 +#: sql_help.c:1875 msgid "text" msgstr "texto" -#: sql_help.c:1902 sql_help.c:4007 sql_help.c:4244 +#: sql_help.c:1900 sql_help.c:4005 sql_help.c:4242 msgid "transaction_id" msgstr "id_de_transacción" -#: sql_help.c:1933 sql_help.c:1940 sql_help.c:3933 +#: sql_help.c:1931 sql_help.c:1938 sql_help.c:3931 msgid "filename" msgstr "nombre_de_archivo" -#: sql_help.c:1934 sql_help.c:1941 sql_help.c:2618 sql_help.c:2619 -#: sql_help.c:2620 +#: sql_help.c:1932 sql_help.c:1939 sql_help.c:2616 sql_help.c:2617 +#: sql_help.c:2618 msgid "command" msgstr "orden" -#: sql_help.c:1936 sql_help.c:2617 sql_help.c:3040 sql_help.c:3221 -#: sql_help.c:3917 sql_help.c:4397 sql_help.c:4399 sql_help.c:4495 -#: sql_help.c:4497 sql_help.c:4646 sql_help.c:4648 sql_help.c:4759 -#: sql_help.c:4878 sql_help.c:4880 +#: sql_help.c:1934 sql_help.c:2615 sql_help.c:3038 sql_help.c:3219 +#: sql_help.c:3915 sql_help.c:4395 sql_help.c:4397 sql_help.c:4493 +#: sql_help.c:4495 sql_help.c:4644 sql_help.c:4646 sql_help.c:4757 +#: sql_help.c:4876 sql_help.c:4878 msgid "condition" msgstr "condición" -#: sql_help.c:1939 sql_help.c:2444 sql_help.c:2923 sql_help.c:3187 -#: sql_help.c:3205 sql_help.c:3898 +#: sql_help.c:1937 sql_help.c:2442 sql_help.c:2921 sql_help.c:3185 +#: sql_help.c:3203 sql_help.c:3896 msgid "query" msgstr "consulta" -#: sql_help.c:1944 +#: sql_help.c:1942 msgid "format_name" msgstr "nombre_de_formato" -#: sql_help.c:1946 +#: sql_help.c:1944 msgid "delimiter_character" msgstr "carácter_delimitador" -#: sql_help.c:1947 +#: sql_help.c:1945 msgid "null_string" msgstr "cadena_null" -#: sql_help.c:1949 +#: sql_help.c:1947 msgid "quote_character" msgstr "carácter_de_comilla" -#: sql_help.c:1950 +#: sql_help.c:1948 msgid "escape_character" msgstr "carácter_de_escape" -#: sql_help.c:1954 +#: sql_help.c:1952 msgid "encoding_name" msgstr "nombre_codificación" -#: sql_help.c:1965 +#: sql_help.c:1963 msgid "access_method_type" msgstr "tipo_de_método_de_acceso" -#: sql_help.c:2036 sql_help.c:2055 sql_help.c:2058 +#: sql_help.c:2034 sql_help.c:2053 sql_help.c:2056 msgid "arg_data_type" msgstr "tipo_de_dato_arg" -#: sql_help.c:2037 sql_help.c:2059 sql_help.c:2067 +#: sql_help.c:2035 sql_help.c:2057 sql_help.c:2065 msgid "sfunc" msgstr "func_transición" -#: sql_help.c:2038 sql_help.c:2060 sql_help.c:2068 +#: sql_help.c:2036 sql_help.c:2058 sql_help.c:2066 msgid "state_data_type" msgstr "tipo_de_dato_de_estado" -#: sql_help.c:2039 sql_help.c:2061 sql_help.c:2069 +#: sql_help.c:2037 sql_help.c:2059 sql_help.c:2067 msgid "state_data_size" msgstr "tamaño_de_dato_de_estado" -#: sql_help.c:2040 sql_help.c:2062 sql_help.c:2070 +#: sql_help.c:2038 sql_help.c:2060 sql_help.c:2068 msgid "ffunc" msgstr "func_final" -#: sql_help.c:2041 sql_help.c:2071 +#: sql_help.c:2039 sql_help.c:2069 msgid "combinefunc" msgstr "func_combinación" -#: sql_help.c:2042 sql_help.c:2072 +#: sql_help.c:2040 sql_help.c:2070 msgid "serialfunc" msgstr "func_serial" -#: sql_help.c:2043 sql_help.c:2073 +#: sql_help.c:2041 sql_help.c:2071 msgid "deserialfunc" msgstr "func_deserial" -#: sql_help.c:2044 sql_help.c:2063 sql_help.c:2074 +#: sql_help.c:2042 sql_help.c:2061 sql_help.c:2072 msgid "initial_condition" msgstr "condición_inicial" -#: sql_help.c:2045 sql_help.c:2075 +#: sql_help.c:2043 sql_help.c:2073 msgid "msfunc" msgstr "func_transición_m" -#: sql_help.c:2046 sql_help.c:2076 +#: sql_help.c:2044 sql_help.c:2074 msgid "minvfunc" msgstr "func_inv_m" -#: sql_help.c:2047 sql_help.c:2077 +#: sql_help.c:2045 sql_help.c:2075 msgid "mstate_data_type" msgstr "tipo_de_dato_de_estado_m" -#: sql_help.c:2048 sql_help.c:2078 +#: sql_help.c:2046 sql_help.c:2076 msgid "mstate_data_size" msgstr "tamaño_de_dato_de_estado_m" -#: sql_help.c:2049 sql_help.c:2079 +#: sql_help.c:2047 sql_help.c:2077 msgid "mffunc" msgstr "func_final_m" -#: sql_help.c:2050 sql_help.c:2080 +#: sql_help.c:2048 sql_help.c:2078 msgid "minitial_condition" msgstr "condición_inicial_m" -#: sql_help.c:2051 sql_help.c:2081 +#: sql_help.c:2049 sql_help.c:2079 msgid "sort_operator" msgstr "operador_de_ordenamiento" -#: sql_help.c:2064 +#: sql_help.c:2062 msgid "or the old syntax" msgstr "o la sintaxis antigua" -#: sql_help.c:2066 +#: sql_help.c:2064 msgid "base_type" msgstr "tipo_base" -#: sql_help.c:2123 sql_help.c:2164 +#: sql_help.c:2121 sql_help.c:2162 msgid "locale" msgstr "configuración regional" -#: sql_help.c:2124 sql_help.c:2165 +#: sql_help.c:2122 sql_help.c:2163 msgid "lc_collate" msgstr "lc_collate" -#: sql_help.c:2125 sql_help.c:2166 +#: sql_help.c:2123 sql_help.c:2164 msgid "lc_ctype" msgstr "lc_ctype" -#: sql_help.c:2126 sql_help.c:4297 +#: sql_help.c:2124 sql_help.c:4295 msgid "provider" msgstr "proveedor" -#: sql_help.c:2128 sql_help.c:2220 +#: sql_help.c:2126 sql_help.c:2218 msgid "version" msgstr "versión" -#: sql_help.c:2130 +#: sql_help.c:2128 msgid "existing_collation" msgstr "ordenamiento_existente" -#: sql_help.c:2140 +#: sql_help.c:2138 msgid "source_encoding" msgstr "codificación_origen" -#: sql_help.c:2141 +#: sql_help.c:2139 msgid "dest_encoding" msgstr "codificación_destino" -#: sql_help.c:2162 sql_help.c:2963 +#: sql_help.c:2160 sql_help.c:2961 msgid "template" msgstr "plantilla" -#: sql_help.c:2163 +#: sql_help.c:2161 msgid "encoding" msgstr "codificación" -#: sql_help.c:2190 +#: sql_help.c:2188 msgid "constraint" msgstr "restricción" -#: sql_help.c:2191 +#: sql_help.c:2189 msgid "where constraint is:" msgstr "donde restricción es:" -#: sql_help.c:2205 sql_help.c:2615 sql_help.c:3036 +#: sql_help.c:2203 sql_help.c:2613 sql_help.c:3034 msgid "event" msgstr "evento" -#: sql_help.c:2206 +#: sql_help.c:2204 msgid "filter_variable" msgstr "variable_de_filtrado" -#: sql_help.c:2294 sql_help.c:2858 +#: sql_help.c:2292 sql_help.c:2856 msgid "where column_constraint is:" msgstr "donde restricción_de_columna es:" -#: sql_help.c:2332 +#: sql_help.c:2330 msgid "rettype" msgstr "tipo_ret" -#: sql_help.c:2334 +#: sql_help.c:2332 msgid "column_type" msgstr "tipo_columna" -#: sql_help.c:2343 sql_help.c:2545 +#: sql_help.c:2341 sql_help.c:2543 msgid "definition" msgstr "definición" -#: sql_help.c:2344 sql_help.c:2546 +#: sql_help.c:2342 sql_help.c:2544 msgid "obj_file" msgstr "archivo_obj" -#: sql_help.c:2345 sql_help.c:2547 +#: sql_help.c:2343 sql_help.c:2545 msgid "link_symbol" msgstr "símbolo_enlace" -#: sql_help.c:2346 sql_help.c:2548 +#: sql_help.c:2344 sql_help.c:2546 msgid "sql_body" -msgstr "" +msgstr "contenido_sql" -#: sql_help.c:2384 sql_help.c:2600 sql_help.c:3159 +#: sql_help.c:2382 sql_help.c:2598 sql_help.c:3157 msgid "uid" msgstr "uid" -#: sql_help.c:2399 sql_help.c:2440 sql_help.c:2827 sql_help.c:2840 -#: sql_help.c:2854 sql_help.c:2919 +#: sql_help.c:2397 sql_help.c:2438 sql_help.c:2825 sql_help.c:2838 +#: sql_help.c:2852 sql_help.c:2917 msgid "method" msgstr "método" -#: sql_help.c:2404 +#: sql_help.c:2402 msgid "opclass_parameter" msgstr "parámetro_opclass" -#: sql_help.c:2421 +#: sql_help.c:2419 msgid "call_handler" msgstr "manejador_de_llamada" -#: sql_help.c:2422 +#: sql_help.c:2420 msgid "inline_handler" msgstr "manejador_en_línea" -#: sql_help.c:2423 +#: sql_help.c:2421 msgid "valfunction" msgstr "función_val" -#: sql_help.c:2462 +#: sql_help.c:2460 msgid "com_op" msgstr "op_conm" -#: sql_help.c:2463 +#: sql_help.c:2461 msgid "neg_op" msgstr "op_neg" -#: sql_help.c:2481 +#: sql_help.c:2479 msgid "family_name" msgstr "nombre_familia" -#: sql_help.c:2492 +#: sql_help.c:2490 msgid "storage_type" msgstr "tipo_almacenamiento" -#: sql_help.c:2621 sql_help.c:3043 +#: sql_help.c:2619 sql_help.c:3041 msgid "where event can be one of:" msgstr "donde evento puede ser una de:" -#: sql_help.c:2641 sql_help.c:2643 +#: sql_help.c:2639 sql_help.c:2641 msgid "schema_element" msgstr "elemento_de_esquema" -#: sql_help.c:2680 +#: sql_help.c:2678 msgid "server_type" msgstr "tipo_de_servidor" -#: sql_help.c:2681 +#: sql_help.c:2679 msgid "server_version" msgstr "versión_de_servidor" -#: sql_help.c:2682 sql_help.c:3817 sql_help.c:4197 +#: sql_help.c:2680 sql_help.c:3815 sql_help.c:4195 msgid "fdw_name" msgstr "nombre_fdw" -#: sql_help.c:2699 sql_help.c:2702 +#: sql_help.c:2697 sql_help.c:2700 msgid "statistics_name" msgstr "nombre_de_estadística" -#: sql_help.c:2703 +#: sql_help.c:2701 msgid "statistics_kind" msgstr "tipo_de_estadística" -#: sql_help.c:2719 +#: sql_help.c:2717 msgid "subscription_name" msgstr "nombre_de_suscripción" -#: sql_help.c:2820 +#: sql_help.c:2818 msgid "source_table" msgstr "tabla_origen" -#: sql_help.c:2821 +#: sql_help.c:2819 msgid "like_option" msgstr "opción_de_like" -#: sql_help.c:2887 +#: sql_help.c:2885 msgid "and like_option is:" msgstr "y opción_de_like es:" -#: sql_help.c:2936 +#: sql_help.c:2934 msgid "directory" msgstr "directorio" -#: sql_help.c:2950 +#: sql_help.c:2948 msgid "parser_name" msgstr "nombre_de_parser" -#: sql_help.c:2951 +#: sql_help.c:2949 msgid "source_config" msgstr "config_origen" -#: sql_help.c:2980 +#: sql_help.c:2978 msgid "start_function" msgstr "función_inicio" -#: sql_help.c:2981 +#: sql_help.c:2979 msgid "gettoken_function" msgstr "función_gettoken" -#: sql_help.c:2982 +#: sql_help.c:2980 msgid "end_function" msgstr "función_fin" -#: sql_help.c:2983 +#: sql_help.c:2981 msgid "lextypes_function" msgstr "función_lextypes" -#: sql_help.c:2984 +#: sql_help.c:2982 msgid "headline_function" msgstr "función_headline" -#: sql_help.c:2996 +#: sql_help.c:2994 msgid "init_function" msgstr "función_init" -#: sql_help.c:2997 +#: sql_help.c:2995 msgid "lexize_function" msgstr "función_lexize" -#: sql_help.c:3010 +#: sql_help.c:3008 msgid "from_sql_function_name" msgstr "nombre_de_función_from" -#: sql_help.c:3012 +#: sql_help.c:3010 msgid "to_sql_function_name" msgstr "nombre_de_función_to" -#: sql_help.c:3038 +#: sql_help.c:3036 msgid "referenced_table_name" msgstr "nombre_tabla_referenciada" -#: sql_help.c:3039 +#: sql_help.c:3037 msgid "transition_relation_name" msgstr "nombre_de_relación_de_transición" -#: sql_help.c:3042 +#: sql_help.c:3040 msgid "arguments" msgstr "argumentos" -#: sql_help.c:3094 sql_help.c:4330 +#: sql_help.c:3092 sql_help.c:4328 msgid "label" msgstr "etiqueta" -#: sql_help.c:3096 +#: sql_help.c:3094 msgid "subtype" msgstr "subtipo" -#: sql_help.c:3097 +#: sql_help.c:3095 msgid "subtype_operator_class" msgstr "clase_de_operador_del_subtipo" -#: sql_help.c:3099 +#: sql_help.c:3097 msgid "canonical_function" msgstr "función_canónica" -#: sql_help.c:3100 +#: sql_help.c:3098 msgid "subtype_diff_function" msgstr "función_diff_del_subtipo" -#: sql_help.c:3101 -#, fuzzy -#| msgid "storage_type" +#: sql_help.c:3099 msgid "multirange_type_name" -msgstr "tipo_almacenamiento" +msgstr "nombre_de_tipo_de_rango_múltiple" -#: sql_help.c:3103 +#: sql_help.c:3101 msgid "input_function" msgstr "función_entrada" -#: sql_help.c:3104 +#: sql_help.c:3102 msgid "output_function" msgstr "función_salida" -#: sql_help.c:3105 +#: sql_help.c:3103 msgid "receive_function" msgstr "función_receive" -#: sql_help.c:3106 +#: sql_help.c:3104 msgid "send_function" msgstr "función_send" -#: sql_help.c:3107 +#: sql_help.c:3105 msgid "type_modifier_input_function" msgstr "función_entrada_del_modificador_de_tipo" -#: sql_help.c:3108 +#: sql_help.c:3106 msgid "type_modifier_output_function" msgstr "función_salida_del_modificador_de_tipo" -#: sql_help.c:3109 +#: sql_help.c:3107 msgid "analyze_function" msgstr "función_analyze" -#: sql_help.c:3110 -#, fuzzy -#| msgid "support_function" +#: sql_help.c:3108 msgid "subscript_function" -msgstr "función_de_soporte" +msgstr "función_de_subíndice" -#: sql_help.c:3111 +#: sql_help.c:3109 msgid "internallength" msgstr "largo_interno" -#: sql_help.c:3112 +#: sql_help.c:3110 msgid "alignment" msgstr "alineamiento" -#: sql_help.c:3113 +#: sql_help.c:3111 msgid "storage" msgstr "almacenamiento" -#: sql_help.c:3114 +#: sql_help.c:3112 msgid "like_type" msgstr "como_tipo" -#: sql_help.c:3115 +#: sql_help.c:3113 msgid "category" msgstr "categoría" -#: sql_help.c:3116 +#: sql_help.c:3114 msgid "preferred" msgstr "preferido" -#: sql_help.c:3117 +#: sql_help.c:3115 msgid "default" msgstr "valor_por_omisión" -#: sql_help.c:3118 +#: sql_help.c:3116 msgid "element" msgstr "elemento" -#: sql_help.c:3119 +#: sql_help.c:3117 msgid "delimiter" msgstr "delimitador" -#: sql_help.c:3120 +#: sql_help.c:3118 msgid "collatable" msgstr "ordenable" -#: sql_help.c:3217 sql_help.c:3893 sql_help.c:4392 sql_help.c:4489 -#: sql_help.c:4641 sql_help.c:4749 sql_help.c:4873 +#: sql_help.c:3215 sql_help.c:3891 sql_help.c:4390 sql_help.c:4487 +#: sql_help.c:4639 sql_help.c:4747 sql_help.c:4871 msgid "with_query" msgstr "consulta_with" -#: sql_help.c:3219 sql_help.c:3895 sql_help.c:4411 sql_help.c:4417 -#: sql_help.c:4420 sql_help.c:4424 sql_help.c:4428 sql_help.c:4436 -#: sql_help.c:4660 sql_help.c:4666 sql_help.c:4669 sql_help.c:4673 -#: sql_help.c:4677 sql_help.c:4685 sql_help.c:4751 sql_help.c:4892 -#: sql_help.c:4898 sql_help.c:4901 sql_help.c:4905 sql_help.c:4909 -#: sql_help.c:4917 +#: sql_help.c:3217 sql_help.c:3893 sql_help.c:4409 sql_help.c:4415 +#: sql_help.c:4418 sql_help.c:4422 sql_help.c:4426 sql_help.c:4434 +#: sql_help.c:4658 sql_help.c:4664 sql_help.c:4667 sql_help.c:4671 +#: sql_help.c:4675 sql_help.c:4683 sql_help.c:4749 sql_help.c:4890 +#: sql_help.c:4896 sql_help.c:4899 sql_help.c:4903 sql_help.c:4907 +#: sql_help.c:4915 msgid "alias" msgstr "alias" -#: sql_help.c:3220 sql_help.c:4396 sql_help.c:4438 sql_help.c:4440 -#: sql_help.c:4494 sql_help.c:4645 sql_help.c:4687 sql_help.c:4689 -#: sql_help.c:4758 sql_help.c:4877 sql_help.c:4919 sql_help.c:4921 +#: sql_help.c:3218 sql_help.c:4394 sql_help.c:4436 sql_help.c:4438 +#: sql_help.c:4492 sql_help.c:4643 sql_help.c:4685 sql_help.c:4687 +#: sql_help.c:4756 sql_help.c:4875 sql_help.c:4917 sql_help.c:4919 msgid "from_item" msgstr "item_de_from" -#: sql_help.c:3222 sql_help.c:3703 sql_help.c:3974 sql_help.c:4760 +#: sql_help.c:3220 sql_help.c:3701 sql_help.c:3972 sql_help.c:4758 msgid "cursor_name" msgstr "nombre_de_cursor" -#: sql_help.c:3223 sql_help.c:3901 sql_help.c:4761 +#: sql_help.c:3221 sql_help.c:3899 sql_help.c:4759 msgid "output_expression" msgstr "expresión_de_salida" -#: sql_help.c:3224 sql_help.c:3902 sql_help.c:4395 sql_help.c:4492 -#: sql_help.c:4644 sql_help.c:4762 sql_help.c:4876 +#: sql_help.c:3222 sql_help.c:3900 sql_help.c:4393 sql_help.c:4490 +#: sql_help.c:4642 sql_help.c:4760 sql_help.c:4874 msgid "output_name" msgstr "nombre_de_salida" -#: sql_help.c:3240 +#: sql_help.c:3238 msgid "code" msgstr "código" -#: sql_help.c:3645 +#: sql_help.c:3643 msgid "parameter" msgstr "parámetro" -#: sql_help.c:3667 sql_help.c:3668 sql_help.c:3999 +#: sql_help.c:3665 sql_help.c:3666 sql_help.c:3997 msgid "statement" msgstr "sentencia" -#: sql_help.c:3702 sql_help.c:3973 +#: sql_help.c:3700 sql_help.c:3971 msgid "direction" msgstr "dirección" -#: sql_help.c:3704 sql_help.c:3975 +#: sql_help.c:3702 sql_help.c:3973 msgid "where direction can be empty or one of:" msgstr "donde dirección puede ser vacío o uno de:" -#: sql_help.c:3705 sql_help.c:3706 sql_help.c:3707 sql_help.c:3708 -#: sql_help.c:3709 sql_help.c:3976 sql_help.c:3977 sql_help.c:3978 -#: sql_help.c:3979 sql_help.c:3980 sql_help.c:4405 sql_help.c:4407 -#: sql_help.c:4503 sql_help.c:4505 sql_help.c:4654 sql_help.c:4656 -#: sql_help.c:4819 sql_help.c:4821 sql_help.c:4886 sql_help.c:4888 +#: sql_help.c:3703 sql_help.c:3704 sql_help.c:3705 sql_help.c:3706 +#: sql_help.c:3707 sql_help.c:3974 sql_help.c:3975 sql_help.c:3976 +#: sql_help.c:3977 sql_help.c:3978 sql_help.c:4403 sql_help.c:4405 +#: sql_help.c:4501 sql_help.c:4503 sql_help.c:4652 sql_help.c:4654 +#: sql_help.c:4817 sql_help.c:4819 sql_help.c:4884 sql_help.c:4886 msgid "count" msgstr "cantidad" -#: sql_help.c:3807 sql_help.c:4187 +#: sql_help.c:3805 sql_help.c:4185 msgid "sequence_name" msgstr "nombre_secuencia" -#: sql_help.c:3825 sql_help.c:4205 +#: sql_help.c:3823 sql_help.c:4203 msgid "arg_name" msgstr "nombre_arg" -#: sql_help.c:3826 sql_help.c:4206 +#: sql_help.c:3824 sql_help.c:4204 msgid "arg_type" msgstr "tipo_arg" -#: sql_help.c:3833 sql_help.c:4213 +#: sql_help.c:3831 sql_help.c:4211 msgid "loid" msgstr "loid" -#: sql_help.c:3861 +#: sql_help.c:3859 msgid "remote_schema" msgstr "schema_remoto" -#: sql_help.c:3864 +#: sql_help.c:3862 msgid "local_schema" msgstr "schema_local" -#: sql_help.c:3899 +#: sql_help.c:3897 msgid "conflict_target" msgstr "destino_de_conflict" -#: sql_help.c:3900 +#: sql_help.c:3898 msgid "conflict_action" msgstr "acción_de_conflict" -#: sql_help.c:3903 +#: sql_help.c:3901 msgid "where conflict_target can be one of:" msgstr "donde destino_de_conflict puede ser uno de:" -#: sql_help.c:3904 +#: sql_help.c:3902 msgid "index_column_name" msgstr "nombre_de_columna_de_índice" -#: sql_help.c:3905 +#: sql_help.c:3903 msgid "index_expression" msgstr "expresión_de_índice" -#: sql_help.c:3908 +#: sql_help.c:3906 msgid "index_predicate" msgstr "predicado_de_índice" -#: sql_help.c:3910 +#: sql_help.c:3908 msgid "and conflict_action is one of:" msgstr "donde acción_de_conflict es una de:" -#: sql_help.c:3916 sql_help.c:4757 +#: sql_help.c:3914 sql_help.c:4755 msgid "sub-SELECT" msgstr "sub-SELECT" -#: sql_help.c:3925 sql_help.c:3988 sql_help.c:4733 +#: sql_help.c:3923 sql_help.c:3986 sql_help.c:4731 msgid "channel" msgstr "canal" -#: sql_help.c:3947 +#: sql_help.c:3945 msgid "lockmode" msgstr "modo_bloqueo" -#: sql_help.c:3948 +#: sql_help.c:3946 msgid "where lockmode is one of:" msgstr "donde modo_bloqueo es uno de:" -#: sql_help.c:3989 +#: sql_help.c:3987 msgid "payload" msgstr "carga" -#: sql_help.c:4016 +#: sql_help.c:4014 msgid "old_role" msgstr "rol_antiguo" -#: sql_help.c:4017 +#: sql_help.c:4015 msgid "new_role" msgstr "rol_nuevo" -#: sql_help.c:4053 sql_help.c:4252 sql_help.c:4260 +#: sql_help.c:4051 sql_help.c:4250 sql_help.c:4258 msgid "savepoint_name" msgstr "nombre_de_savepoint" -#: sql_help.c:4398 sql_help.c:4451 sql_help.c:4647 sql_help.c:4700 -#: sql_help.c:4879 sql_help.c:4932 +#: sql_help.c:4396 sql_help.c:4449 sql_help.c:4645 sql_help.c:4698 +#: sql_help.c:4877 sql_help.c:4930 msgid "grouping_element" msgstr "elemento_agrupante" -#: sql_help.c:4400 sql_help.c:4498 sql_help.c:4649 sql_help.c:4881 +#: sql_help.c:4398 sql_help.c:4496 sql_help.c:4647 sql_help.c:4879 msgid "window_name" msgstr "nombre_de_ventana" -#: sql_help.c:4401 sql_help.c:4499 sql_help.c:4650 sql_help.c:4882 +#: sql_help.c:4399 sql_help.c:4497 sql_help.c:4648 sql_help.c:4880 msgid "window_definition" msgstr "definición_de_ventana" -#: sql_help.c:4402 sql_help.c:4416 sql_help.c:4455 sql_help.c:4500 -#: sql_help.c:4651 sql_help.c:4665 sql_help.c:4704 sql_help.c:4883 -#: sql_help.c:4897 sql_help.c:4936 +#: sql_help.c:4400 sql_help.c:4414 sql_help.c:4453 sql_help.c:4498 +#: sql_help.c:4649 sql_help.c:4663 sql_help.c:4702 sql_help.c:4881 +#: sql_help.c:4895 sql_help.c:4934 msgid "select" msgstr "select" -#: sql_help.c:4409 sql_help.c:4658 sql_help.c:4890 +#: sql_help.c:4407 sql_help.c:4656 sql_help.c:4888 msgid "where from_item can be one of:" msgstr "donde item_de_from puede ser uno de:" -#: sql_help.c:4412 sql_help.c:4418 sql_help.c:4421 sql_help.c:4425 -#: sql_help.c:4437 sql_help.c:4661 sql_help.c:4667 sql_help.c:4670 -#: sql_help.c:4674 sql_help.c:4686 sql_help.c:4893 sql_help.c:4899 -#: sql_help.c:4902 sql_help.c:4906 sql_help.c:4918 +#: sql_help.c:4410 sql_help.c:4416 sql_help.c:4419 sql_help.c:4423 +#: sql_help.c:4435 sql_help.c:4659 sql_help.c:4665 sql_help.c:4668 +#: sql_help.c:4672 sql_help.c:4684 sql_help.c:4891 sql_help.c:4897 +#: sql_help.c:4900 sql_help.c:4904 sql_help.c:4916 msgid "column_alias" msgstr "alias_de_columna" -#: sql_help.c:4413 sql_help.c:4662 sql_help.c:4894 +#: sql_help.c:4411 sql_help.c:4660 sql_help.c:4892 msgid "sampling_method" msgstr "método_de_sampleo" -#: sql_help.c:4415 sql_help.c:4664 sql_help.c:4896 +#: sql_help.c:4413 sql_help.c:4662 sql_help.c:4894 msgid "seed" msgstr "semilla" -#: sql_help.c:4419 sql_help.c:4453 sql_help.c:4668 sql_help.c:4702 -#: sql_help.c:4900 sql_help.c:4934 +#: sql_help.c:4417 sql_help.c:4451 sql_help.c:4666 sql_help.c:4700 +#: sql_help.c:4898 sql_help.c:4932 msgid "with_query_name" msgstr "nombre_consulta_with" -#: sql_help.c:4429 sql_help.c:4432 sql_help.c:4435 sql_help.c:4678 -#: sql_help.c:4681 sql_help.c:4684 sql_help.c:4910 sql_help.c:4913 -#: sql_help.c:4916 +#: sql_help.c:4427 sql_help.c:4430 sql_help.c:4433 sql_help.c:4676 +#: sql_help.c:4679 sql_help.c:4682 sql_help.c:4908 sql_help.c:4911 +#: sql_help.c:4914 msgid "column_definition" msgstr "definición_de_columna" -#: sql_help.c:4439 sql_help.c:4688 sql_help.c:4920 +#: sql_help.c:4437 sql_help.c:4686 sql_help.c:4918 msgid "join_type" msgstr "tipo_de_join" -#: sql_help.c:4441 sql_help.c:4690 sql_help.c:4922 +#: sql_help.c:4439 sql_help.c:4688 sql_help.c:4920 msgid "join_condition" msgstr "condición_de_join" -#: sql_help.c:4442 sql_help.c:4691 sql_help.c:4923 +#: sql_help.c:4440 sql_help.c:4689 sql_help.c:4921 msgid "join_column" msgstr "columna_de_join" -#: sql_help.c:4443 sql_help.c:4692 sql_help.c:4924 -#, fuzzy -#| msgid "column_alias" +#: sql_help.c:4441 sql_help.c:4690 sql_help.c:4922 msgid "join_using_alias" -msgstr "alias_de_columna" +msgstr "join_con_alias" -#: sql_help.c:4444 sql_help.c:4693 sql_help.c:4925 +#: sql_help.c:4442 sql_help.c:4691 sql_help.c:4923 msgid "and grouping_element can be one of:" msgstr "donde elemento_agrupante puede ser una de:" -#: sql_help.c:4452 sql_help.c:4701 sql_help.c:4933 +#: sql_help.c:4450 sql_help.c:4699 sql_help.c:4931 msgid "and with_query is:" msgstr "y consulta_with es:" -#: sql_help.c:4456 sql_help.c:4705 sql_help.c:4937 +#: sql_help.c:4454 sql_help.c:4703 sql_help.c:4935 msgid "values" msgstr "valores" -#: sql_help.c:4457 sql_help.c:4706 sql_help.c:4938 +#: sql_help.c:4455 sql_help.c:4704 sql_help.c:4936 msgid "insert" msgstr "insert" -#: sql_help.c:4458 sql_help.c:4707 sql_help.c:4939 +#: sql_help.c:4456 sql_help.c:4705 sql_help.c:4937 msgid "update" msgstr "update" -#: sql_help.c:4459 sql_help.c:4708 sql_help.c:4940 +#: sql_help.c:4457 sql_help.c:4706 sql_help.c:4938 msgid "delete" msgstr "delete" -#: sql_help.c:4461 sql_help.c:4710 sql_help.c:4942 -#, fuzzy -#| msgid "schema_name" +#: sql_help.c:4459 sql_help.c:4708 sql_help.c:4940 msgid "search_seq_col_name" -msgstr "nombre_de_esquema" +msgstr "nombre_col_para_sec_de_búsqueda" -#: sql_help.c:4463 sql_help.c:4712 sql_help.c:4944 -#, fuzzy -#| msgid "schema_name" +#: sql_help.c:4461 sql_help.c:4710 sql_help.c:4942 msgid "cycle_mark_col_name" -msgstr "nombre_de_esquema" +msgstr "nombre_col_para_marca_de_ciclo" -#: sql_help.c:4464 sql_help.c:4713 sql_help.c:4945 -#, fuzzy -#| msgid "new_enum_value" +#: sql_help.c:4462 sql_help.c:4711 sql_help.c:4943 msgid "cycle_mark_value" -msgstr "nuevo_valor_enum" +msgstr "valor_marca_de_ciclo" -#: sql_help.c:4465 sql_help.c:4714 sql_help.c:4946 +#: sql_help.c:4463 sql_help.c:4712 sql_help.c:4944 msgid "cycle_mark_default" -msgstr "" +msgstr "valor_predet_marca_de_ciclo" -#: sql_help.c:4466 sql_help.c:4715 sql_help.c:4947 +#: sql_help.c:4464 sql_help.c:4713 sql_help.c:4945 msgid "cycle_path_col_name" -msgstr "" +msgstr "nombre_col_para_ruta_de_ciclo" -#: sql_help.c:4493 +#: sql_help.c:4491 msgid "new_table" msgstr "nueva_tabla" -#: sql_help.c:4518 +#: sql_help.c:4516 msgid "timezone" msgstr "huso_horario" -#: sql_help.c:4563 +#: sql_help.c:4561 msgid "snapshot_id" msgstr "id_de_snapshot" -#: sql_help.c:4817 +#: sql_help.c:4815 msgid "sort_expression" msgstr "expresión_orden" -#: sql_help.c:4954 sql_help.c:5932 +#: sql_help.c:4952 sql_help.c:5930 msgid "abort the current transaction" msgstr "aborta la transacción en curso" -#: sql_help.c:4960 +#: sql_help.c:4958 msgid "change the definition of an aggregate function" msgstr "cambia la definición de una función de agregación" -#: sql_help.c:4966 +#: sql_help.c:4964 msgid "change the definition of a collation" msgstr "cambia la definición de un ordenamiento" -#: sql_help.c:4972 +#: sql_help.c:4970 msgid "change the definition of a conversion" msgstr "cambia la definición de una conversión" -#: sql_help.c:4978 +#: sql_help.c:4976 msgid "change a database" msgstr "cambia una base de datos" -#: sql_help.c:4984 +#: sql_help.c:4982 msgid "define default access privileges" msgstr "define privilegios de acceso por omisión" -#: sql_help.c:4990 +#: sql_help.c:4988 msgid "change the definition of a domain" msgstr "cambia la definición de un dominio" -#: sql_help.c:4996 +#: sql_help.c:4994 msgid "change the definition of an event trigger" msgstr "cambia la definición de un disparador por evento" -#: sql_help.c:5002 +#: sql_help.c:5000 msgid "change the definition of an extension" msgstr "cambia la definición de una extensión" -#: sql_help.c:5008 +#: sql_help.c:5006 msgid "change the definition of a foreign-data wrapper" msgstr "cambia la definición de un conector de datos externos" -#: sql_help.c:5014 +#: sql_help.c:5012 msgid "change the definition of a foreign table" msgstr "cambia la definición de una tabla foránea" -#: sql_help.c:5020 +#: sql_help.c:5018 msgid "change the definition of a function" msgstr "cambia la definición de una función" -#: sql_help.c:5026 +#: sql_help.c:5024 msgid "change role name or membership" msgstr "cambiar nombre del rol o membresía" -#: sql_help.c:5032 +#: sql_help.c:5030 msgid "change the definition of an index" msgstr "cambia la definición de un índice" -#: sql_help.c:5038 +#: sql_help.c:5036 msgid "change the definition of a procedural language" msgstr "cambia la definición de un lenguaje procedural" -#: sql_help.c:5044 +#: sql_help.c:5042 msgid "change the definition of a large object" msgstr "cambia la definición de un objeto grande" -#: sql_help.c:5050 +#: sql_help.c:5048 msgid "change the definition of a materialized view" msgstr "cambia la definición de una vista materializada" -#: sql_help.c:5056 +#: sql_help.c:5054 msgid "change the definition of an operator" msgstr "cambia la definición de un operador" -#: sql_help.c:5062 +#: sql_help.c:5060 msgid "change the definition of an operator class" msgstr "cambia la definición de una clase de operadores" -#: sql_help.c:5068 +#: sql_help.c:5066 msgid "change the definition of an operator family" msgstr "cambia la definición de una familia de operadores" -#: sql_help.c:5074 -#, fuzzy -#| msgid "change the definition of a row level security policy" +#: sql_help.c:5072 msgid "change the definition of a row-level security policy" -msgstr "cambia la definición de una política de seguridad de registros" +msgstr "cambia la definición de una política de seguridad a nivel de registros" -#: sql_help.c:5080 +#: sql_help.c:5078 msgid "change the definition of a procedure" msgstr "cambia la definición de un procedimiento" -#: sql_help.c:5086 +#: sql_help.c:5084 msgid "change the definition of a publication" msgstr "cambia la definición de una publicación" -#: sql_help.c:5092 sql_help.c:5194 +#: sql_help.c:5090 sql_help.c:5192 msgid "change a database role" msgstr "cambia un rol de la base de datos" -#: sql_help.c:5098 +#: sql_help.c:5096 msgid "change the definition of a routine" msgstr "cambia la definición de una rutina" -#: sql_help.c:5104 +#: sql_help.c:5102 msgid "change the definition of a rule" msgstr "cambia la definición de una regla" -#: sql_help.c:5110 +#: sql_help.c:5108 msgid "change the definition of a schema" msgstr "cambia la definición de un esquema" -#: sql_help.c:5116 +#: sql_help.c:5114 msgid "change the definition of a sequence generator" msgstr "cambia la definición de un generador secuencial" -#: sql_help.c:5122 +#: sql_help.c:5120 msgid "change the definition of a foreign server" msgstr "cambia la definición de un servidor foráneo" -#: sql_help.c:5128 +#: sql_help.c:5126 msgid "change the definition of an extended statistics object" msgstr "cambia la definición de un objeto de estadísticas extendidas" -#: sql_help.c:5134 +#: sql_help.c:5132 msgid "change the definition of a subscription" msgstr "cambia la definición de una suscripción" -#: sql_help.c:5140 +#: sql_help.c:5138 msgid "change a server configuration parameter" msgstr "cambia un parámetro de configuración del servidor" -#: sql_help.c:5146 +#: sql_help.c:5144 msgid "change the definition of a table" msgstr "cambia la definición de una tabla" -#: sql_help.c:5152 +#: sql_help.c:5150 msgid "change the definition of a tablespace" msgstr "cambia la definición de un tablespace" -#: sql_help.c:5158 +#: sql_help.c:5156 msgid "change the definition of a text search configuration" msgstr "cambia la definición de una configuración de búsqueda en texto" -#: sql_help.c:5164 +#: sql_help.c:5162 msgid "change the definition of a text search dictionary" msgstr "cambia la definición de un diccionario de búsqueda en texto" -#: sql_help.c:5170 +#: sql_help.c:5168 msgid "change the definition of a text search parser" msgstr "cambia la definición de un analizador de búsqueda en texto" -#: sql_help.c:5176 +#: sql_help.c:5174 msgid "change the definition of a text search template" msgstr "cambia la definición de una plantilla de búsqueda en texto" -#: sql_help.c:5182 +#: sql_help.c:5180 msgid "change the definition of a trigger" msgstr "cambia la definición de un disparador" -#: sql_help.c:5188 +#: sql_help.c:5186 msgid "change the definition of a type" msgstr "cambia la definición de un tipo" -#: sql_help.c:5200 +#: sql_help.c:5198 msgid "change the definition of a user mapping" msgstr "cambia la definición de un mapeo de usuario" -#: sql_help.c:5206 +#: sql_help.c:5204 msgid "change the definition of a view" msgstr "cambia la definición de una vista" -#: sql_help.c:5212 +#: sql_help.c:5210 msgid "collect statistics about a database" msgstr "recolecta estadísticas sobre una base de datos" -#: sql_help.c:5218 sql_help.c:6010 +#: sql_help.c:5216 sql_help.c:6008 msgid "start a transaction block" msgstr "inicia un bloque de transacción" -#: sql_help.c:5224 +#: sql_help.c:5222 msgid "invoke a procedure" msgstr "invocar un procedimiento" -#: sql_help.c:5230 +#: sql_help.c:5228 msgid "force a write-ahead log checkpoint" msgstr "fuerza un checkpoint de wal" -#: sql_help.c:5236 +#: sql_help.c:5234 msgid "close a cursor" msgstr "cierra un cursor" -#: sql_help.c:5242 +#: sql_help.c:5240 msgid "cluster a table according to an index" msgstr "reordena una tabla siguiendo un índice" -#: sql_help.c:5248 +#: sql_help.c:5246 msgid "define or change the comment of an object" msgstr "define o cambia un comentario sobre un objeto" -#: sql_help.c:5254 sql_help.c:5812 +#: sql_help.c:5252 sql_help.c:5810 msgid "commit the current transaction" msgstr "compromete la transacción en curso" -#: sql_help.c:5260 +#: sql_help.c:5258 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "confirma una transacción que fue preparada para two-phase commit" -#: sql_help.c:5266 +#: sql_help.c:5264 msgid "copy data between a file and a table" msgstr "copia datos entre un archivo y una tabla" -#: sql_help.c:5272 +#: sql_help.c:5270 msgid "define a new access method" msgstr "define un nuevo método de acceso" -#: sql_help.c:5278 +#: sql_help.c:5276 msgid "define a new aggregate function" msgstr "define una nueva función de agregación" -#: sql_help.c:5284 +#: sql_help.c:5282 msgid "define a new cast" msgstr "define una nueva conversión de tipo" -#: sql_help.c:5290 +#: sql_help.c:5288 msgid "define a new collation" msgstr "define un nuevo ordenamiento" -#: sql_help.c:5296 +#: sql_help.c:5294 msgid "define a new encoding conversion" msgstr "define una nueva conversión de codificación" -#: sql_help.c:5302 +#: sql_help.c:5300 msgid "create a new database" msgstr "crea una nueva base de datos" -#: sql_help.c:5308 +#: sql_help.c:5306 msgid "define a new domain" msgstr "define un nuevo dominio" -#: sql_help.c:5314 +#: sql_help.c:5312 msgid "define a new event trigger" msgstr "define un nuevo disparador por evento" -#: sql_help.c:5320 +#: sql_help.c:5318 msgid "install an extension" msgstr "instala una extensión" -#: sql_help.c:5326 +#: sql_help.c:5324 msgid "define a new foreign-data wrapper" msgstr "define un nuevo conector de datos externos" -#: sql_help.c:5332 +#: sql_help.c:5330 msgid "define a new foreign table" msgstr "define una nueva tabla foránea" -#: sql_help.c:5338 +#: sql_help.c:5336 msgid "define a new function" msgstr "define una nueva función" -#: sql_help.c:5344 sql_help.c:5404 sql_help.c:5506 +#: sql_help.c:5342 sql_help.c:5402 sql_help.c:5504 msgid "define a new database role" msgstr "define un nuevo rol de la base de datos" -#: sql_help.c:5350 +#: sql_help.c:5348 msgid "define a new index" msgstr "define un nuevo índice" -#: sql_help.c:5356 +#: sql_help.c:5354 msgid "define a new procedural language" msgstr "define un nuevo lenguaje procedural" -#: sql_help.c:5362 +#: sql_help.c:5360 msgid "define a new materialized view" msgstr "define una nueva vista materializada" -#: sql_help.c:5368 +#: sql_help.c:5366 msgid "define a new operator" msgstr "define un nuevo operador" -#: sql_help.c:5374 +#: sql_help.c:5372 msgid "define a new operator class" msgstr "define una nueva clase de operadores" -#: sql_help.c:5380 +#: sql_help.c:5378 msgid "define a new operator family" msgstr "define una nueva familia de operadores" -#: sql_help.c:5386 -#, fuzzy -#| msgid "define a new row level security policy for a table" +#: sql_help.c:5384 msgid "define a new row-level security policy for a table" -msgstr "define una nueva política de seguridad de registros para una tabla" +msgstr "define una nueva política de seguridad a nivel de registros para una tabla" -#: sql_help.c:5392 +#: sql_help.c:5390 msgid "define a new procedure" msgstr "define un nuevo procedimiento" -#: sql_help.c:5398 +#: sql_help.c:5396 msgid "define a new publication" msgstr "define una nueva publicación" -#: sql_help.c:5410 +#: sql_help.c:5408 msgid "define a new rewrite rule" msgstr "define una nueva regla de reescritura" -#: sql_help.c:5416 +#: sql_help.c:5414 msgid "define a new schema" msgstr "define un nuevo schema" -#: sql_help.c:5422 +#: sql_help.c:5420 msgid "define a new sequence generator" msgstr "define un nuevo generador secuencial" -#: sql_help.c:5428 +#: sql_help.c:5426 msgid "define a new foreign server" msgstr "define un nuevo servidor foráneo" -#: sql_help.c:5434 +#: sql_help.c:5432 msgid "define extended statistics" msgstr "define estadísticas extendidas" -#: sql_help.c:5440 +#: sql_help.c:5438 msgid "define a new subscription" msgstr "define una nueva suscripción" -#: sql_help.c:5446 +#: sql_help.c:5444 msgid "define a new table" msgstr "define una nueva tabla" -#: sql_help.c:5452 sql_help.c:5968 +#: sql_help.c:5450 sql_help.c:5966 msgid "define a new table from the results of a query" msgstr "crea una nueva tabla usando los resultados de una consulta" -#: sql_help.c:5458 +#: sql_help.c:5456 msgid "define a new tablespace" msgstr "define un nuevo tablespace" -#: sql_help.c:5464 +#: sql_help.c:5462 msgid "define a new text search configuration" msgstr "define una nueva configuración de búsqueda en texto" -#: sql_help.c:5470 +#: sql_help.c:5468 msgid "define a new text search dictionary" msgstr "define un nuevo diccionario de búsqueda en texto" -#: sql_help.c:5476 +#: sql_help.c:5474 msgid "define a new text search parser" msgstr "define un nuevo analizador de búsqueda en texto" -#: sql_help.c:5482 +#: sql_help.c:5480 msgid "define a new text search template" msgstr "define una nueva plantilla de búsqueda en texto" -#: sql_help.c:5488 +#: sql_help.c:5486 msgid "define a new transform" msgstr "define una nueva transformación" -#: sql_help.c:5494 +#: sql_help.c:5492 msgid "define a new trigger" msgstr "define un nuevo disparador" -#: sql_help.c:5500 +#: sql_help.c:5498 msgid "define a new data type" msgstr "define un nuevo tipo de datos" -#: sql_help.c:5512 +#: sql_help.c:5510 msgid "define a new mapping of a user to a foreign server" msgstr "define un nuevo mapa de usuario a servidor foráneo" -#: sql_help.c:5518 +#: sql_help.c:5516 msgid "define a new view" msgstr "define una nueva vista" -#: sql_help.c:5524 +#: sql_help.c:5522 msgid "deallocate a prepared statement" msgstr "elimina una sentencia preparada" -#: sql_help.c:5530 +#: sql_help.c:5528 msgid "define a cursor" msgstr "define un nuevo cursor" -#: sql_help.c:5536 +#: sql_help.c:5534 msgid "delete rows of a table" msgstr "elimina filas de una tabla" -#: sql_help.c:5542 +#: sql_help.c:5540 msgid "discard session state" msgstr "descartar datos de la sesión" -#: sql_help.c:5548 +#: sql_help.c:5546 msgid "execute an anonymous code block" msgstr "ejecutar un bloque anónimo de código" -#: sql_help.c:5554 +#: sql_help.c:5552 msgid "remove an access method" msgstr "elimina un método de acceso" -#: sql_help.c:5560 +#: sql_help.c:5558 msgid "remove an aggregate function" msgstr "elimina una función de agregación" -#: sql_help.c:5566 +#: sql_help.c:5564 msgid "remove a cast" msgstr "elimina una conversión de tipo" -#: sql_help.c:5572 +#: sql_help.c:5570 msgid "remove a collation" msgstr "elimina un ordenamiento" -#: sql_help.c:5578 +#: sql_help.c:5576 msgid "remove a conversion" msgstr "elimina una conversión de codificación" -#: sql_help.c:5584 +#: sql_help.c:5582 msgid "remove a database" msgstr "elimina una base de datos" -#: sql_help.c:5590 +#: sql_help.c:5588 msgid "remove a domain" msgstr "elimina un dominio" -#: sql_help.c:5596 +#: sql_help.c:5594 msgid "remove an event trigger" msgstr "elimina un disparador por evento" -#: sql_help.c:5602 +#: sql_help.c:5600 msgid "remove an extension" msgstr "elimina una extensión" -#: sql_help.c:5608 +#: sql_help.c:5606 msgid "remove a foreign-data wrapper" msgstr "elimina un conector de datos externos" -#: sql_help.c:5614 +#: sql_help.c:5612 msgid "remove a foreign table" msgstr "elimina una tabla foránea" -#: sql_help.c:5620 +#: sql_help.c:5618 msgid "remove a function" msgstr "elimina una función" -#: sql_help.c:5626 sql_help.c:5692 sql_help.c:5794 +#: sql_help.c:5624 sql_help.c:5690 sql_help.c:5792 msgid "remove a database role" msgstr "elimina un rol de base de datos" -#: sql_help.c:5632 +#: sql_help.c:5630 msgid "remove an index" msgstr "elimina un índice" -#: sql_help.c:5638 +#: sql_help.c:5636 msgid "remove a procedural language" msgstr "elimina un lenguaje procedural" -#: sql_help.c:5644 +#: sql_help.c:5642 msgid "remove a materialized view" msgstr "elimina una vista materializada" -#: sql_help.c:5650 +#: sql_help.c:5648 msgid "remove an operator" msgstr "elimina un operador" -#: sql_help.c:5656 +#: sql_help.c:5654 msgid "remove an operator class" msgstr "elimina una clase de operadores" -#: sql_help.c:5662 +#: sql_help.c:5660 msgid "remove an operator family" msgstr "elimina una familia de operadores" -#: sql_help.c:5668 +#: sql_help.c:5666 msgid "remove database objects owned by a database role" msgstr "elimina objetos de propiedad de un rol de la base de datos" -#: sql_help.c:5674 -#, fuzzy -#| msgid "remove a row level security policy from a table" +#: sql_help.c:5672 msgid "remove a row-level security policy from a table" -msgstr "elimina una política de seguridad de registros de una tabla" +msgstr "elimina una política de seguridad a nivel de registros de una tabla" -#: sql_help.c:5680 +#: sql_help.c:5678 msgid "remove a procedure" msgstr "elimina un procedimiento" -#: sql_help.c:5686 +#: sql_help.c:5684 msgid "remove a publication" msgstr "elimina una publicación" -#: sql_help.c:5698 +#: sql_help.c:5696 msgid "remove a routine" msgstr "elimina una rutina" -#: sql_help.c:5704 +#: sql_help.c:5702 msgid "remove a rewrite rule" msgstr "elimina una regla de reescritura" -#: sql_help.c:5710 +#: sql_help.c:5708 msgid "remove a schema" msgstr "elimina un schema" -#: sql_help.c:5716 +#: sql_help.c:5714 msgid "remove a sequence" msgstr "elimina un generador secuencial" -#: sql_help.c:5722 +#: sql_help.c:5720 msgid "remove a foreign server descriptor" msgstr "elimina un descriptor de servidor foráneo" -#: sql_help.c:5728 +#: sql_help.c:5726 msgid "remove extended statistics" msgstr "elimina estadísticas extendidas" -#: sql_help.c:5734 +#: sql_help.c:5732 msgid "remove a subscription" msgstr "elimina una suscripción" -#: sql_help.c:5740 +#: sql_help.c:5738 msgid "remove a table" msgstr "elimina una tabla" -#: sql_help.c:5746 +#: sql_help.c:5744 msgid "remove a tablespace" msgstr "elimina un tablespace" -#: sql_help.c:5752 +#: sql_help.c:5750 msgid "remove a text search configuration" msgstr "elimina una configuración de búsqueda en texto" -#: sql_help.c:5758 +#: sql_help.c:5756 msgid "remove a text search dictionary" msgstr "elimina un diccionario de búsqueda en texto" -#: sql_help.c:5764 +#: sql_help.c:5762 msgid "remove a text search parser" msgstr "elimina un analizador de búsqueda en texto" -#: sql_help.c:5770 +#: sql_help.c:5768 msgid "remove a text search template" msgstr "elimina una plantilla de búsqueda en texto" -#: sql_help.c:5776 +#: sql_help.c:5774 msgid "remove a transform" msgstr "elimina una transformación" -#: sql_help.c:5782 +#: sql_help.c:5780 msgid "remove a trigger" msgstr "elimina un disparador" -#: sql_help.c:5788 +#: sql_help.c:5786 msgid "remove a data type" msgstr "elimina un tipo de datos" -#: sql_help.c:5800 +#: sql_help.c:5798 msgid "remove a user mapping for a foreign server" msgstr "elimina un mapeo de usuario para un servidor remoto" -#: sql_help.c:5806 +#: sql_help.c:5804 msgid "remove a view" msgstr "elimina una vista" -#: sql_help.c:5818 +#: sql_help.c:5816 msgid "execute a prepared statement" msgstr "ejecuta una sentencia preparada" -#: sql_help.c:5824 +#: sql_help.c:5822 msgid "show the execution plan of a statement" msgstr "muestra el plan de ejecución de una sentencia" -#: sql_help.c:5830 +#: sql_help.c:5828 msgid "retrieve rows from a query using a cursor" msgstr "recupera filas de una consulta usando un cursor" -#: sql_help.c:5836 +#: sql_help.c:5834 msgid "define access privileges" msgstr "define privilegios de acceso" -#: sql_help.c:5842 +#: sql_help.c:5840 msgid "import table definitions from a foreign server" msgstr "importa definiciones de tablas desde un servidor foráneo" -#: sql_help.c:5848 +#: sql_help.c:5846 msgid "create new rows in a table" msgstr "crea nuevas filas en una tabla" -#: sql_help.c:5854 +#: sql_help.c:5852 msgid "listen for a notification" msgstr "escucha notificaciones" -#: sql_help.c:5860 +#: sql_help.c:5858 msgid "load a shared library file" msgstr "carga un archivo de biblioteca compartida" -#: sql_help.c:5866 +#: sql_help.c:5864 msgid "lock a table" msgstr "bloquea una tabla" -#: sql_help.c:5872 +#: sql_help.c:5870 msgid "position a cursor" msgstr "reposiciona un cursor" -#: sql_help.c:5878 +#: sql_help.c:5876 msgid "generate a notification" msgstr "genera una notificación" -#: sql_help.c:5884 +#: sql_help.c:5882 msgid "prepare a statement for execution" msgstr "prepara una sentencia para ejecución" -#: sql_help.c:5890 +#: sql_help.c:5888 msgid "prepare the current transaction for two-phase commit" msgstr "prepara la transacción actual para two-phase commit" -#: sql_help.c:5896 +#: sql_help.c:5894 msgid "change the ownership of database objects owned by a database role" msgstr "cambia de dueño a los objetos de propiedad de un rol de la base de datos" -#: sql_help.c:5902 +#: sql_help.c:5900 msgid "replace the contents of a materialized view" msgstr "reemplaza los contenidos de una vista materializada" -#: sql_help.c:5908 +#: sql_help.c:5906 msgid "rebuild indexes" msgstr "reconstruye índices" -#: sql_help.c:5914 +#: sql_help.c:5912 msgid "destroy a previously defined savepoint" msgstr "destruye un savepoint previamente definido" -#: sql_help.c:5920 +#: sql_help.c:5918 msgid "restore the value of a run-time parameter to the default value" msgstr "restaura el valor de un parámetro de configuración al valor inicial" -#: sql_help.c:5926 +#: sql_help.c:5924 msgid "remove access privileges" msgstr "revoca privilegios de acceso" -#: sql_help.c:5938 +#: sql_help.c:5936 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "cancela una transacción que fue previamente preparada para two-phase commit" -#: sql_help.c:5944 +#: sql_help.c:5942 msgid "roll back to a savepoint" msgstr "descartar hacia un savepoint" -#: sql_help.c:5950 +#: sql_help.c:5948 msgid "define a new savepoint within the current transaction" msgstr "define un nuevo savepoint en la transacción en curso" -#: sql_help.c:5956 +#: sql_help.c:5954 msgid "define or change a security label applied to an object" msgstr "define o cambia una etiqueta de seguridad sobre un objeto" -#: sql_help.c:5962 sql_help.c:6016 sql_help.c:6052 +#: sql_help.c:5960 sql_help.c:6014 sql_help.c:6050 msgid "retrieve rows from a table or view" msgstr "recupera filas desde una tabla o vista" -#: sql_help.c:5974 +#: sql_help.c:5972 msgid "change a run-time parameter" msgstr "cambia un parámetro de configuración" -#: sql_help.c:5980 +#: sql_help.c:5978 msgid "set constraint check timing for the current transaction" msgstr "define el modo de verificación de las restricciones de la transacción en curso" -#: sql_help.c:5986 +#: sql_help.c:5984 msgid "set the current user identifier of the current session" msgstr "define el identificador de usuario actual de la sesión actual" -#: sql_help.c:5992 +#: sql_help.c:5990 msgid "set the session user identifier and the current user identifier of the current session" msgstr "" "define el identificador del usuario de sesión y el identificador\n" "del usuario actual de la sesión en curso" -#: sql_help.c:5998 +#: sql_help.c:5996 msgid "set the characteristics of the current transaction" msgstr "define las características de la transacción en curso" -#: sql_help.c:6004 +#: sql_help.c:6002 msgid "show the value of a run-time parameter" msgstr "muestra el valor de un parámetro de configuración" -#: sql_help.c:6022 +#: sql_help.c:6020 msgid "empty a table or set of tables" msgstr "vacía una tabla o conjunto de tablas" -#: sql_help.c:6028 +#: sql_help.c:6026 msgid "stop listening for a notification" msgstr "deja de escuchar una notificación" -#: sql_help.c:6034 +#: sql_help.c:6032 msgid "update rows of a table" msgstr "actualiza filas de una tabla" -#: sql_help.c:6040 +#: sql_help.c:6038 msgid "garbage-collect and optionally analyze a database" msgstr "recolecta basura y opcionalmente estadísticas sobre una base de datos" -#: sql_help.c:6046 +#: sql_help.c:6044 msgid "compute a set of rows" msgstr "calcula un conjunto de registros" @@ -6462,7 +6425,7 @@ msgstr "se ignoró argumento extra «%s» en línea de órdenes" msgid "could not find own program executable" msgstr "no se pudo encontrar el ejecutable propio" -#: tab-complete.c:4896 +#: tab-complete.c:4898 #, c-format msgid "" "tab completion query failed: %s\n" @@ -6497,14 +6460,14 @@ msgstr "" "valor «%s» no reconocido para «%s»\n" "Los valores disponibles son: %s." -#~ msgid "could not connect to server: %s" -#~ msgstr "no se pudo conectar al servidor: %s" - -#~ msgid "All connection parameters must be supplied because no database connection exists" -#~ msgstr "Debe proveer todos los parámetros de conexión porque no existe conexión a una base de datos" +#~ msgid "pclose failed: %m" +#~ msgstr "pclose falló: %m" #~ msgid "Could not send cancel request: %s" #~ msgstr "No se pudo enviar el paquete de cancelación: %s" -#~ msgid "pclose failed: %m" -#~ msgstr "pclose falló: %m" +#~ msgid "All connection parameters must be supplied because no database connection exists" +#~ msgstr "Debe proveer todos los parámetros de conexión porque no existe conexión a una base de datos" + +#~ msgid "could not connect to server: %s" +#~ msgstr "no se pudo conectar al servidor: %s" diff --git a/src/bin/psql/po/fr.po b/src/bin/psql/po/fr.po index 5b33183bcf99a..c6260d70ea77e 100644 --- a/src/bin/psql/po/fr.po +++ b/src/bin/psql/po/fr.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-26 06:45+0000\n" -"PO-Revision-Date: 2021-04-26 11:36+0200\n" +"POT-Creation-Date: 2021-06-14 06:15+0000\n" +"PO-Revision-Date: 2021-06-14 16:09+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 2.4.3\n" #: ../../../src/common/logging.c:259 #, c-format @@ -3022,8 +3022,8 @@ msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] affiche les opérateurs des familles d'o #: help.c:231 #, c-format -msgid " \\dAp [AMPTRN [OPFPTRN]] list support functions of operator families\n" -msgstr " \\dAp [AMPTRN [OPFPTRN]] liste les fonctions de support des familles d'opérateur\n" +msgid " \\dAp[+] [AMPTRN [OPFPTRN]] list support functions of operator families\n" +msgstr " \\dAp[+] [AMPTRN [OPFPTRN]] liste les fonctions de support des familles d'opérateur\n" #: help.c:232 #, c-format @@ -3154,11 +3154,11 @@ msgstr " \\dn[S+] [MODÈLE] affiche la liste des schémas\n" #: help.c:255 #, c-format msgid "" -" \\do[S] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" +" \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" " list operators\n" msgstr "" -" \\do[S] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" -" affiche la liste des opérateurs\n" +" \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" +" affiche la liste des opérateurs\n" #: help.c:257 #, c-format @@ -3229,8 +3229,8 @@ msgstr " \\dX [MODÈLE] affiche les statistiques étendues\n" #: help.c:270 #, c-format -msgid " \\dy [PATTERN] list event triggers\n" -msgstr " \\dy [MODÈLE] affiche les triggers sur évènement\n" +msgid " \\dy[+] [PATTERN] list event triggers\n" +msgstr " \\dy[+] [MODÈLE] affiche les triggers sur évènement\n" #: help.c:271 #, c-format @@ -3541,21 +3541,21 @@ msgstr "" #: help.c:377 #, c-format msgid "" -" HIDE_TOAST_COMPRESSION\n" -" if set, compression methods are not displayed\n" +" HIDE_TABLEAM\n" +" if set, table access methods are not displayed\n" msgstr "" -" HIDE_TOAST_COMPRESSION\n" -" si activé, les méthodes de compression methods ne sont pas affichées\n" -"\n" +" HIDE_TABLEAM\n" +" si activé, les méthodes d'accès ne sont pas affichées\n" #: help.c:379 #, c-format msgid "" -" HIDE_TABLEAM\n" -" if set, table access methods are not displayed\n" +" HIDE_TOAST_COMPRESSION\n" +" if set, compression methods are not displayed\n" msgstr "" -" HIDE_TABLEAM\n" -" si activé, les méthodes d'accès ne sont pas affichées\n" +" HIDE_TOAST_COMPRESSION\n" +" si activé, les méthodes de compression methods ne sont pas affichées\n" +"\n" #: help.c:381 #, c-format @@ -4026,20 +4026,20 @@ msgstr "" #: help.c:492 #, c-format msgid "" -" PGPASSWORD\n" -" connection password (not recommended)\n" +" PGPASSFILE\n" +" password file name\n" msgstr "" -" PGPASSWORD\n" -" mot de passe de connexion (non recommendé)\n" +" PGPASSFILE\n" +" nom du fichier de mot de passe\n" #: help.c:494 #, c-format msgid "" -" PGPASSFILE\n" -" password file name\n" +" PGPASSWORD\n" +" connection password (not recommended)\n" msgstr "" -" PGPASSFILE\n" -" nom du fichier de mot de passe\n" +" PGPASSWORD\n" +" mot de passe de connexion (non recommendé)\n" #: help.c:496 #, c-format @@ -4270,531 +4270,527 @@ msgstr "chaîne entre guillemets non terminée" msgid "%s: out of memory" msgstr "%s : mémoire épuisée" -#: sql_help.c:35 sql_help.c:38 sql_help.c:41 sql_help.c:63 sql_help.c:65 -#: sql_help.c:67 sql_help.c:78 sql_help.c:80 sql_help.c:82 sql_help.c:108 -#: sql_help.c:114 sql_help.c:116 sql_help.c:118 sql_help.c:120 sql_help.c:123 -#: sql_help.c:125 sql_help.c:127 sql_help.c:232 sql_help.c:234 sql_help.c:235 -#: sql_help.c:237 sql_help.c:239 sql_help.c:242 sql_help.c:244 sql_help.c:246 -#: sql_help.c:248 sql_help.c:260 sql_help.c:261 sql_help.c:262 sql_help.c:264 -#: sql_help.c:313 sql_help.c:315 sql_help.c:317 sql_help.c:319 sql_help.c:388 -#: sql_help.c:393 sql_help.c:395 sql_help.c:437 sql_help.c:439 sql_help.c:442 -#: sql_help.c:444 sql_help.c:512 sql_help.c:517 sql_help.c:522 sql_help.c:527 -#: sql_help.c:532 sql_help.c:587 sql_help.c:589 sql_help.c:591 sql_help.c:593 +#: sql_help.c:35 sql_help.c:38 sql_help.c:41 sql_help.c:65 sql_help.c:66 +#: sql_help.c:68 sql_help.c:70 sql_help.c:81 sql_help.c:83 sql_help.c:85 +#: sql_help.c:111 sql_help.c:117 sql_help.c:119 sql_help.c:121 sql_help.c:123 +#: sql_help.c:126 sql_help.c:128 sql_help.c:130 sql_help.c:235 sql_help.c:237 +#: sql_help.c:238 sql_help.c:240 sql_help.c:242 sql_help.c:245 sql_help.c:247 +#: sql_help.c:249 sql_help.c:251 sql_help.c:263 sql_help.c:264 sql_help.c:265 +#: sql_help.c:267 sql_help.c:316 sql_help.c:318 sql_help.c:320 sql_help.c:322 +#: sql_help.c:391 sql_help.c:396 sql_help.c:398 sql_help.c:440 sql_help.c:442 +#: sql_help.c:445 sql_help.c:447 sql_help.c:515 sql_help.c:520 sql_help.c:525 +#: sql_help.c:530 sql_help.c:535 sql_help.c:589 sql_help.c:591 sql_help.c:593 #: sql_help.c:595 sql_help.c:597 sql_help.c:600 sql_help.c:602 sql_help.c:605 -#: sql_help.c:616 sql_help.c:618 sql_help.c:659 sql_help.c:661 sql_help.c:663 -#: sql_help.c:666 sql_help.c:668 sql_help.c:670 sql_help.c:703 sql_help.c:707 -#: sql_help.c:711 sql_help.c:730 sql_help.c:733 sql_help.c:736 sql_help.c:765 -#: sql_help.c:777 sql_help.c:785 sql_help.c:788 sql_help.c:791 sql_help.c:806 -#: sql_help.c:809 sql_help.c:838 sql_help.c:843 sql_help.c:848 sql_help.c:853 -#: sql_help.c:858 sql_help.c:880 sql_help.c:882 sql_help.c:884 sql_help.c:886 -#: sql_help.c:889 sql_help.c:891 sql_help.c:933 sql_help.c:977 sql_help.c:982 -#: sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1016 sql_help.c:1027 -#: sql_help.c:1029 sql_help.c:1048 sql_help.c:1058 sql_help.c:1060 -#: sql_help.c:1062 sql_help.c:1074 sql_help.c:1078 sql_help.c:1080 -#: sql_help.c:1092 sql_help.c:1094 sql_help.c:1096 sql_help.c:1098 -#: sql_help.c:1116 sql_help.c:1118 sql_help.c:1122 sql_help.c:1126 -#: sql_help.c:1130 sql_help.c:1133 sql_help.c:1134 sql_help.c:1135 -#: sql_help.c:1138 sql_help.c:1140 sql_help.c:1276 sql_help.c:1278 -#: sql_help.c:1281 sql_help.c:1284 sql_help.c:1286 sql_help.c:1288 -#: sql_help.c:1291 sql_help.c:1294 sql_help.c:1408 sql_help.c:1410 -#: sql_help.c:1412 sql_help.c:1415 sql_help.c:1436 sql_help.c:1439 -#: sql_help.c:1442 sql_help.c:1445 sql_help.c:1449 sql_help.c:1451 -#: sql_help.c:1453 sql_help.c:1455 sql_help.c:1469 sql_help.c:1472 -#: sql_help.c:1474 sql_help.c:1476 sql_help.c:1486 sql_help.c:1488 -#: sql_help.c:1498 sql_help.c:1500 sql_help.c:1510 sql_help.c:1513 -#: sql_help.c:1536 sql_help.c:1538 sql_help.c:1540 sql_help.c:1542 -#: sql_help.c:1545 sql_help.c:1547 sql_help.c:1550 sql_help.c:1553 -#: sql_help.c:1604 sql_help.c:1647 sql_help.c:1650 sql_help.c:1652 -#: sql_help.c:1654 sql_help.c:1657 sql_help.c:1659 sql_help.c:1661 -#: sql_help.c:1664 sql_help.c:1714 sql_help.c:1730 sql_help.c:1961 -#: sql_help.c:2030 sql_help.c:2049 sql_help.c:2062 sql_help.c:2118 -#: sql_help.c:2124 sql_help.c:2134 sql_help.c:2155 sql_help.c:2181 -#: sql_help.c:2199 sql_help.c:2226 sql_help.c:2322 sql_help.c:2368 -#: sql_help.c:2392 sql_help.c:2415 sql_help.c:2419 sql_help.c:2453 -#: sql_help.c:2473 sql_help.c:2495 sql_help.c:2509 sql_help.c:2530 -#: sql_help.c:2554 sql_help.c:2584 sql_help.c:2609 sql_help.c:2656 -#: sql_help.c:2944 sql_help.c:2957 sql_help.c:2974 sql_help.c:2990 -#: sql_help.c:3030 sql_help.c:3084 sql_help.c:3088 sql_help.c:3090 -#: sql_help.c:3097 sql_help.c:3116 sql_help.c:3143 sql_help.c:3178 -#: sql_help.c:3190 sql_help.c:3199 sql_help.c:3243 sql_help.c:3257 -#: sql_help.c:3285 sql_help.c:3293 sql_help.c:3305 sql_help.c:3315 -#: sql_help.c:3323 sql_help.c:3331 sql_help.c:3339 sql_help.c:3347 -#: sql_help.c:3356 sql_help.c:3367 sql_help.c:3375 sql_help.c:3383 -#: sql_help.c:3391 sql_help.c:3399 sql_help.c:3409 sql_help.c:3418 -#: sql_help.c:3427 sql_help.c:3435 sql_help.c:3445 sql_help.c:3456 -#: sql_help.c:3464 sql_help.c:3473 sql_help.c:3484 sql_help.c:3493 -#: sql_help.c:3501 sql_help.c:3509 sql_help.c:3517 sql_help.c:3525 -#: sql_help.c:3533 sql_help.c:3541 sql_help.c:3549 sql_help.c:3557 -#: sql_help.c:3565 sql_help.c:3573 sql_help.c:3590 sql_help.c:3599 -#: sql_help.c:3607 sql_help.c:3624 sql_help.c:3639 sql_help.c:3941 -#: sql_help.c:3992 sql_help.c:4021 sql_help.c:4036 sql_help.c:4521 -#: sql_help.c:4569 sql_help.c:4720 +#: sql_help.c:616 sql_help.c:618 sql_help.c:660 sql_help.c:662 sql_help.c:664 +#: sql_help.c:667 sql_help.c:669 sql_help.c:671 sql_help.c:706 sql_help.c:710 +#: sql_help.c:714 sql_help.c:733 sql_help.c:736 sql_help.c:739 sql_help.c:768 +#: sql_help.c:780 sql_help.c:788 sql_help.c:791 sql_help.c:794 sql_help.c:809 +#: sql_help.c:812 sql_help.c:841 sql_help.c:846 sql_help.c:851 sql_help.c:856 +#: sql_help.c:861 sql_help.c:883 sql_help.c:885 sql_help.c:887 sql_help.c:889 +#: sql_help.c:892 sql_help.c:894 sql_help.c:936 sql_help.c:980 sql_help.c:985 +#: sql_help.c:990 sql_help.c:995 sql_help.c:1000 sql_help.c:1019 +#: sql_help.c:1030 sql_help.c:1032 sql_help.c:1051 sql_help.c:1061 +#: sql_help.c:1063 sql_help.c:1065 sql_help.c:1077 sql_help.c:1081 +#: sql_help.c:1083 sql_help.c:1095 sql_help.c:1097 sql_help.c:1099 +#: sql_help.c:1101 sql_help.c:1119 sql_help.c:1121 sql_help.c:1125 +#: sql_help.c:1129 sql_help.c:1133 sql_help.c:1136 sql_help.c:1137 +#: sql_help.c:1138 sql_help.c:1141 sql_help.c:1143 sql_help.c:1278 +#: sql_help.c:1280 sql_help.c:1283 sql_help.c:1286 sql_help.c:1288 +#: sql_help.c:1290 sql_help.c:1293 sql_help.c:1296 sql_help.c:1409 +#: sql_help.c:1411 sql_help.c:1413 sql_help.c:1416 sql_help.c:1437 +#: sql_help.c:1440 sql_help.c:1443 sql_help.c:1446 sql_help.c:1450 +#: sql_help.c:1452 sql_help.c:1454 sql_help.c:1456 sql_help.c:1470 +#: sql_help.c:1473 sql_help.c:1475 sql_help.c:1477 sql_help.c:1487 +#: sql_help.c:1489 sql_help.c:1499 sql_help.c:1501 sql_help.c:1511 +#: sql_help.c:1514 sql_help.c:1537 sql_help.c:1539 sql_help.c:1541 +#: sql_help.c:1543 sql_help.c:1546 sql_help.c:1548 sql_help.c:1551 +#: sql_help.c:1554 sql_help.c:1605 sql_help.c:1648 sql_help.c:1651 +#: sql_help.c:1653 sql_help.c:1655 sql_help.c:1658 sql_help.c:1660 +#: sql_help.c:1662 sql_help.c:1665 sql_help.c:1715 sql_help.c:1731 +#: sql_help.c:1962 sql_help.c:2031 sql_help.c:2050 sql_help.c:2063 +#: sql_help.c:2120 sql_help.c:2127 sql_help.c:2137 sql_help.c:2158 +#: sql_help.c:2184 sql_help.c:2202 sql_help.c:2229 sql_help.c:2325 +#: sql_help.c:2371 sql_help.c:2395 sql_help.c:2418 sql_help.c:2422 +#: sql_help.c:2456 sql_help.c:2476 sql_help.c:2498 sql_help.c:2512 +#: sql_help.c:2533 sql_help.c:2557 sql_help.c:2587 sql_help.c:2612 +#: sql_help.c:2659 sql_help.c:2947 sql_help.c:2960 sql_help.c:2977 +#: sql_help.c:2993 sql_help.c:3033 sql_help.c:3087 sql_help.c:3091 +#: sql_help.c:3093 sql_help.c:3100 sql_help.c:3119 sql_help.c:3146 +#: sql_help.c:3181 sql_help.c:3193 sql_help.c:3202 sql_help.c:3246 +#: sql_help.c:3260 sql_help.c:3288 sql_help.c:3296 sql_help.c:3308 +#: sql_help.c:3318 sql_help.c:3326 sql_help.c:3334 sql_help.c:3342 +#: sql_help.c:3350 sql_help.c:3359 sql_help.c:3370 sql_help.c:3378 +#: sql_help.c:3386 sql_help.c:3394 sql_help.c:3402 sql_help.c:3412 +#: sql_help.c:3421 sql_help.c:3430 sql_help.c:3438 sql_help.c:3448 +#: sql_help.c:3459 sql_help.c:3467 sql_help.c:3476 sql_help.c:3487 +#: sql_help.c:3496 sql_help.c:3504 sql_help.c:3512 sql_help.c:3520 +#: sql_help.c:3528 sql_help.c:3536 sql_help.c:3544 sql_help.c:3552 +#: sql_help.c:3560 sql_help.c:3568 sql_help.c:3576 sql_help.c:3593 +#: sql_help.c:3602 sql_help.c:3610 sql_help.c:3627 sql_help.c:3642 +#: sql_help.c:3944 sql_help.c:3995 sql_help.c:4024 sql_help.c:4039 +#: sql_help.c:4524 sql_help.c:4572 sql_help.c:4723 msgid "name" msgstr "nom" -#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:324 sql_help.c:1811 -#: sql_help.c:3258 sql_help.c:4297 +#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1812 +#: sql_help.c:3261 sql_help.c:4300 msgid "aggregate_signature" msgstr "signature_agrégat" -#: sql_help.c:37 sql_help.c:64 sql_help.c:79 sql_help.c:115 sql_help.c:247 -#: sql_help.c:265 sql_help.c:396 sql_help.c:443 sql_help.c:521 sql_help.c:569 -#: sql_help.c:588 sql_help.c:617 sql_help.c:667 sql_help.c:732 sql_help.c:787 -#: sql_help.c:808 sql_help.c:847 sql_help.c:892 sql_help.c:934 sql_help.c:986 -#: sql_help.c:1018 sql_help.c:1028 sql_help.c:1061 sql_help.c:1081 -#: sql_help.c:1095 sql_help.c:1141 sql_help.c:1285 sql_help.c:1409 -#: sql_help.c:1452 sql_help.c:1473 sql_help.c:1487 sql_help.c:1499 -#: sql_help.c:1512 sql_help.c:1539 sql_help.c:1605 sql_help.c:1658 +#: sql_help.c:37 sql_help.c:67 sql_help.c:82 sql_help.c:118 sql_help.c:250 +#: sql_help.c:268 sql_help.c:399 sql_help.c:446 sql_help.c:524 sql_help.c:572 +#: sql_help.c:590 sql_help.c:617 sql_help.c:668 sql_help.c:735 sql_help.c:790 +#: sql_help.c:811 sql_help.c:850 sql_help.c:895 sql_help.c:937 sql_help.c:989 +#: sql_help.c:1021 sql_help.c:1031 sql_help.c:1064 sql_help.c:1084 +#: sql_help.c:1098 sql_help.c:1144 sql_help.c:1287 sql_help.c:1410 +#: sql_help.c:1453 sql_help.c:1474 sql_help.c:1488 sql_help.c:1500 +#: sql_help.c:1513 sql_help.c:1540 sql_help.c:1606 sql_help.c:1659 msgid "new_name" msgstr "nouveau_nom" -#: sql_help.c:40 sql_help.c:66 sql_help.c:81 sql_help.c:117 sql_help.c:245 -#: sql_help.c:263 sql_help.c:394 sql_help.c:479 sql_help.c:526 sql_help.c:619 -#: sql_help.c:628 sql_help.c:686 sql_help.c:706 sql_help.c:735 sql_help.c:790 -#: sql_help.c:852 sql_help.c:890 sql_help.c:991 sql_help.c:1030 sql_help.c:1059 -#: sql_help.c:1079 sql_help.c:1093 sql_help.c:1139 sql_help.c:1348 -#: sql_help.c:1411 sql_help.c:1454 sql_help.c:1475 sql_help.c:1537 -#: sql_help.c:1653 sql_help.c:2930 +#: sql_help.c:40 sql_help.c:69 sql_help.c:84 sql_help.c:120 sql_help.c:248 +#: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:529 sql_help.c:619 +#: sql_help.c:628 sql_help.c:689 sql_help.c:709 sql_help.c:738 sql_help.c:793 +#: sql_help.c:855 sql_help.c:893 sql_help.c:994 sql_help.c:1033 sql_help.c:1062 +#: sql_help.c:1082 sql_help.c:1096 sql_help.c:1142 sql_help.c:1350 +#: sql_help.c:1412 sql_help.c:1455 sql_help.c:1476 sql_help.c:1538 +#: sql_help.c:1654 sql_help.c:2933 msgid "new_owner" msgstr "nouveau_propriétaire" -#: sql_help.c:43 sql_help.c:68 sql_help.c:83 sql_help.c:249 sql_help.c:316 -#: sql_help.c:445 sql_help.c:531 sql_help.c:669 sql_help.c:710 sql_help.c:738 -#: sql_help.c:793 sql_help.c:857 sql_help.c:996 sql_help.c:1063 sql_help.c:1097 -#: sql_help.c:1287 sql_help.c:1456 sql_help.c:1477 sql_help.c:1489 -#: sql_help.c:1501 sql_help.c:1541 sql_help.c:1660 +#: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:252 sql_help.c:319 +#: sql_help.c:448 sql_help.c:534 sql_help.c:670 sql_help.c:713 sql_help.c:741 +#: sql_help.c:796 sql_help.c:860 sql_help.c:999 sql_help.c:1066 sql_help.c:1100 +#: sql_help.c:1289 sql_help.c:1457 sql_help.c:1478 sql_help.c:1490 +#: sql_help.c:1502 sql_help.c:1542 sql_help.c:1661 msgid "new_schema" msgstr "nouveau_schéma" -#: sql_help.c:44 sql_help.c:1875 sql_help.c:3259 sql_help.c:4326 +#: sql_help.c:44 sql_help.c:1876 sql_help.c:3262 sql_help.c:4329 msgid "where aggregate_signature is:" msgstr "où signature_agrégat est :" -#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:334 sql_help.c:347 -#: sql_help.c:351 sql_help.c:367 sql_help.c:370 sql_help.c:373 sql_help.c:513 -#: sql_help.c:518 sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:839 -#: sql_help.c:844 sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:978 -#: sql_help.c:983 sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1829 -#: sql_help.c:1846 sql_help.c:1852 sql_help.c:1876 sql_help.c:1879 -#: sql_help.c:1882 sql_help.c:2031 sql_help.c:2050 sql_help.c:2053 -#: sql_help.c:2323 sql_help.c:2531 sql_help.c:3260 sql_help.c:3263 -#: sql_help.c:3266 sql_help.c:3357 sql_help.c:3446 sql_help.c:3474 -#: sql_help.c:3819 sql_help.c:4199 sql_help.c:4303 sql_help.c:4310 -#: sql_help.c:4316 sql_help.c:4327 sql_help.c:4330 sql_help.c:4333 +#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:337 sql_help.c:350 +#: sql_help.c:354 sql_help.c:370 sql_help.c:373 sql_help.c:376 sql_help.c:516 +#: sql_help.c:521 sql_help.c:526 sql_help.c:531 sql_help.c:536 sql_help.c:842 +#: sql_help.c:847 sql_help.c:852 sql_help.c:857 sql_help.c:862 sql_help.c:981 +#: sql_help.c:986 sql_help.c:991 sql_help.c:996 sql_help.c:1001 sql_help.c:1830 +#: sql_help.c:1847 sql_help.c:1853 sql_help.c:1877 sql_help.c:1880 +#: sql_help.c:1883 sql_help.c:2032 sql_help.c:2051 sql_help.c:2054 +#: sql_help.c:2326 sql_help.c:2534 sql_help.c:3263 sql_help.c:3266 +#: sql_help.c:3269 sql_help.c:3360 sql_help.c:3449 sql_help.c:3477 +#: sql_help.c:3822 sql_help.c:4202 sql_help.c:4306 sql_help.c:4313 +#: sql_help.c:4319 sql_help.c:4330 sql_help.c:4333 sql_help.c:4336 msgid "argmode" msgstr "mode_argument" -#: sql_help.c:46 sql_help.c:49 sql_help.c:52 sql_help.c:335 sql_help.c:348 -#: sql_help.c:352 sql_help.c:368 sql_help.c:371 sql_help.c:374 sql_help.c:514 -#: sql_help.c:519 sql_help.c:524 sql_help.c:529 sql_help.c:534 sql_help.c:840 -#: sql_help.c:845 sql_help.c:850 sql_help.c:855 sql_help.c:860 sql_help.c:979 -#: sql_help.c:984 sql_help.c:989 sql_help.c:994 sql_help.c:999 sql_help.c:1830 -#: sql_help.c:1847 sql_help.c:1853 sql_help.c:1877 sql_help.c:1880 -#: sql_help.c:1883 sql_help.c:2032 sql_help.c:2051 sql_help.c:2054 -#: sql_help.c:2324 sql_help.c:2532 sql_help.c:3261 sql_help.c:3264 -#: sql_help.c:3267 sql_help.c:3358 sql_help.c:3447 sql_help.c:3475 -#: sql_help.c:4304 sql_help.c:4311 sql_help.c:4317 sql_help.c:4328 -#: sql_help.c:4331 sql_help.c:4334 +#: sql_help.c:46 sql_help.c:49 sql_help.c:52 sql_help.c:338 sql_help.c:351 +#: sql_help.c:355 sql_help.c:371 sql_help.c:374 sql_help.c:377 sql_help.c:517 +#: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:843 +#: sql_help.c:848 sql_help.c:853 sql_help.c:858 sql_help.c:863 sql_help.c:982 +#: sql_help.c:987 sql_help.c:992 sql_help.c:997 sql_help.c:1002 sql_help.c:1831 +#: sql_help.c:1848 sql_help.c:1854 sql_help.c:1878 sql_help.c:1881 +#: sql_help.c:1884 sql_help.c:2033 sql_help.c:2052 sql_help.c:2055 +#: sql_help.c:2327 sql_help.c:2535 sql_help.c:3264 sql_help.c:3267 +#: sql_help.c:3270 sql_help.c:3361 sql_help.c:3450 sql_help.c:3478 +#: sql_help.c:4307 sql_help.c:4314 sql_help.c:4320 sql_help.c:4331 +#: sql_help.c:4334 sql_help.c:4337 msgid "argname" msgstr "nom_agrégat" -#: sql_help.c:47 sql_help.c:50 sql_help.c:53 sql_help.c:336 sql_help.c:349 -#: sql_help.c:353 sql_help.c:369 sql_help.c:372 sql_help.c:375 sql_help.c:515 -#: sql_help.c:520 sql_help.c:525 sql_help.c:530 sql_help.c:535 sql_help.c:841 -#: sql_help.c:846 sql_help.c:851 sql_help.c:856 sql_help.c:861 sql_help.c:980 -#: sql_help.c:985 sql_help.c:990 sql_help.c:995 sql_help.c:1000 sql_help.c:1831 -#: sql_help.c:1848 sql_help.c:1854 sql_help.c:1878 sql_help.c:1881 -#: sql_help.c:1884 sql_help.c:2325 sql_help.c:2533 sql_help.c:3262 -#: sql_help.c:3265 sql_help.c:3268 sql_help.c:3359 sql_help.c:3448 -#: sql_help.c:3476 sql_help.c:4305 sql_help.c:4312 sql_help.c:4318 -#: sql_help.c:4329 sql_help.c:4332 sql_help.c:4335 +#: sql_help.c:47 sql_help.c:50 sql_help.c:53 sql_help.c:339 sql_help.c:352 +#: sql_help.c:356 sql_help.c:372 sql_help.c:375 sql_help.c:378 sql_help.c:518 +#: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:844 +#: sql_help.c:849 sql_help.c:854 sql_help.c:859 sql_help.c:864 sql_help.c:983 +#: sql_help.c:988 sql_help.c:993 sql_help.c:998 sql_help.c:1003 sql_help.c:1832 +#: sql_help.c:1849 sql_help.c:1855 sql_help.c:1879 sql_help.c:1882 +#: sql_help.c:1885 sql_help.c:2328 sql_help.c:2536 sql_help.c:3265 +#: sql_help.c:3268 sql_help.c:3271 sql_help.c:3362 sql_help.c:3451 +#: sql_help.c:3479 sql_help.c:4308 sql_help.c:4315 sql_help.c:4321 +#: sql_help.c:4332 sql_help.c:4335 sql_help.c:4338 msgid "argtype" msgstr "type_argument" -#: sql_help.c:109 sql_help.c:391 sql_help.c:468 sql_help.c:480 sql_help.c:928 -#: sql_help.c:1076 sql_help.c:1470 sql_help.c:1599 sql_help.c:1631 -#: sql_help.c:1683 sql_help.c:1746 sql_help.c:1932 sql_help.c:1939 -#: sql_help.c:2229 sql_help.c:2271 sql_help.c:2278 sql_help.c:2287 -#: sql_help.c:2369 sql_help.c:2585 sql_help.c:2678 sql_help.c:2959 -#: sql_help.c:3144 sql_help.c:3166 sql_help.c:3306 sql_help.c:3661 -#: sql_help.c:3860 sql_help.c:4035 sql_help.c:4783 +#: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:931 +#: sql_help.c:1079 sql_help.c:1471 sql_help.c:1600 sql_help.c:1632 +#: sql_help.c:1684 sql_help.c:1747 sql_help.c:1933 sql_help.c:1940 +#: sql_help.c:2232 sql_help.c:2274 sql_help.c:2281 sql_help.c:2290 +#: sql_help.c:2372 sql_help.c:2588 sql_help.c:2681 sql_help.c:2962 +#: sql_help.c:3147 sql_help.c:3169 sql_help.c:3309 sql_help.c:3664 +#: sql_help.c:3863 sql_help.c:4038 sql_help.c:4786 msgid "option" msgstr "option" -#: sql_help.c:110 sql_help.c:929 sql_help.c:1600 sql_help.c:2370 -#: sql_help.c:2586 sql_help.c:3145 sql_help.c:3307 +#: sql_help.c:113 sql_help.c:932 sql_help.c:1601 sql_help.c:2373 +#: sql_help.c:2589 sql_help.c:3148 sql_help.c:3310 msgid "where option can be:" msgstr "où option peut être :" -#: sql_help.c:111 sql_help.c:2163 +#: sql_help.c:114 sql_help.c:2166 msgid "allowconn" msgstr "allowconn" -#: sql_help.c:112 sql_help.c:930 sql_help.c:1601 sql_help.c:2164 -#: sql_help.c:2371 sql_help.c:2587 sql_help.c:3146 +#: sql_help.c:115 sql_help.c:933 sql_help.c:1602 sql_help.c:2167 +#: sql_help.c:2374 sql_help.c:2590 sql_help.c:3149 msgid "connlimit" msgstr "limite_de_connexion" -#: sql_help.c:113 sql_help.c:2165 +#: sql_help.c:116 sql_help.c:2168 msgid "istemplate" msgstr "istemplate" -#: sql_help.c:119 sql_help.c:607 sql_help.c:672 sql_help.c:1290 sql_help.c:1341 -#: sql_help.c:4039 +#: sql_help.c:122 sql_help.c:607 sql_help.c:673 sql_help.c:1292 sql_help.c:1343 +#: sql_help.c:4042 msgid "new_tablespace" msgstr "nouveau_tablespace" -#: sql_help.c:121 sql_help.c:124 sql_help.c:126 sql_help.c:541 sql_help.c:543 -#: sql_help.c:544 sql_help.c:864 sql_help.c:866 sql_help.c:867 sql_help.c:937 -#: sql_help.c:941 sql_help.c:944 sql_help.c:1005 sql_help.c:1007 -#: sql_help.c:1008 sql_help.c:1152 sql_help.c:1155 sql_help.c:1608 -#: sql_help.c:1612 sql_help.c:1615 sql_help.c:2335 sql_help.c:2537 -#: sql_help.c:4057 sql_help.c:4510 +#: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:544 sql_help.c:546 +#: sql_help.c:547 sql_help.c:867 sql_help.c:869 sql_help.c:870 sql_help.c:940 +#: sql_help.c:944 sql_help.c:947 sql_help.c:1008 sql_help.c:1010 +#: sql_help.c:1011 sql_help.c:1155 sql_help.c:1158 sql_help.c:1609 +#: sql_help.c:1613 sql_help.c:1616 sql_help.c:2338 sql_help.c:2540 +#: sql_help.c:4060 sql_help.c:4513 msgid "configuration_parameter" msgstr "paramètre_configuration" -#: sql_help.c:122 sql_help.c:392 sql_help.c:463 sql_help.c:469 sql_help.c:481 -#: sql_help.c:542 sql_help.c:599 sql_help.c:678 sql_help.c:684 sql_help.c:865 -#: sql_help.c:888 sql_help.c:938 sql_help.c:1006 sql_help.c:1077 -#: sql_help.c:1121 sql_help.c:1125 sql_help.c:1129 sql_help.c:1132 -#: sql_help.c:1137 sql_help.c:1153 sql_help.c:1154 sql_help.c:1321 -#: sql_help.c:1343 sql_help.c:1392 sql_help.c:1414 sql_help.c:1471 -#: sql_help.c:1555 sql_help.c:1609 sql_help.c:1632 sql_help.c:2230 -#: sql_help.c:2272 sql_help.c:2279 sql_help.c:2288 sql_help.c:2336 -#: sql_help.c:2337 sql_help.c:2400 sql_help.c:2403 sql_help.c:2437 -#: sql_help.c:2538 sql_help.c:2539 sql_help.c:2557 sql_help.c:2679 -#: sql_help.c:2718 sql_help.c:2824 sql_help.c:2837 sql_help.c:2851 -#: sql_help.c:2892 sql_help.c:2916 sql_help.c:2933 sql_help.c:2960 -#: sql_help.c:3167 sql_help.c:3861 sql_help.c:4511 sql_help.c:4512 +#: sql_help.c:125 sql_help.c:395 sql_help.c:466 sql_help.c:472 sql_help.c:484 +#: sql_help.c:545 sql_help.c:599 sql_help.c:679 sql_help.c:687 sql_help.c:868 +#: sql_help.c:891 sql_help.c:941 sql_help.c:1009 sql_help.c:1080 +#: sql_help.c:1124 sql_help.c:1128 sql_help.c:1132 sql_help.c:1135 +#: sql_help.c:1140 sql_help.c:1156 sql_help.c:1157 sql_help.c:1323 +#: sql_help.c:1345 sql_help.c:1393 sql_help.c:1415 sql_help.c:1472 +#: sql_help.c:1556 sql_help.c:1610 sql_help.c:1633 sql_help.c:2233 +#: sql_help.c:2275 sql_help.c:2282 sql_help.c:2291 sql_help.c:2339 +#: sql_help.c:2340 sql_help.c:2403 sql_help.c:2406 sql_help.c:2440 +#: sql_help.c:2541 sql_help.c:2542 sql_help.c:2560 sql_help.c:2682 +#: sql_help.c:2721 sql_help.c:2827 sql_help.c:2840 sql_help.c:2854 +#: sql_help.c:2895 sql_help.c:2919 sql_help.c:2936 sql_help.c:2963 +#: sql_help.c:3170 sql_help.c:3864 sql_help.c:4514 sql_help.c:4515 msgid "value" msgstr "valeur" -#: sql_help.c:194 +#: sql_help.c:197 msgid "target_role" msgstr "rôle_cible" -#: sql_help.c:195 sql_help.c:2214 sql_help.c:2634 sql_help.c:2639 -#: sql_help.c:3794 sql_help.c:3803 sql_help.c:3822 sql_help.c:3831 -#: sql_help.c:4174 sql_help.c:4183 sql_help.c:4202 sql_help.c:4211 +#: sql_help.c:198 sql_help.c:2217 sql_help.c:2637 sql_help.c:2642 +#: sql_help.c:3797 sql_help.c:3806 sql_help.c:3825 sql_help.c:3834 +#: sql_help.c:4177 sql_help.c:4186 sql_help.c:4205 sql_help.c:4214 msgid "schema_name" msgstr "nom_schéma" -#: sql_help.c:196 +#: sql_help.c:199 msgid "abbreviated_grant_or_revoke" msgstr "grant_ou_revoke_raccourci" -#: sql_help.c:197 +#: sql_help.c:200 msgid "where abbreviated_grant_or_revoke is one of:" msgstr "où abbreviated_grant_or_revoke fait partie de :" -#: sql_help.c:198 sql_help.c:199 sql_help.c:200 sql_help.c:201 sql_help.c:202 -#: sql_help.c:203 sql_help.c:204 sql_help.c:205 sql_help.c:206 sql_help.c:207 -#: sql_help.c:567 sql_help.c:606 sql_help.c:671 sql_help.c:811 sql_help.c:948 -#: sql_help.c:1289 sql_help.c:1619 sql_help.c:2374 sql_help.c:2375 -#: sql_help.c:2376 sql_help.c:2377 sql_help.c:2378 sql_help.c:2511 -#: sql_help.c:2590 sql_help.c:2591 sql_help.c:2592 sql_help.c:2593 -#: sql_help.c:2594 sql_help.c:3149 sql_help.c:3150 sql_help.c:3151 -#: sql_help.c:3152 sql_help.c:3153 sql_help.c:3840 sql_help.c:3844 -#: sql_help.c:4220 sql_help.c:4224 sql_help.c:4531 +#: sql_help.c:201 sql_help.c:202 sql_help.c:203 sql_help.c:204 sql_help.c:205 +#: sql_help.c:206 sql_help.c:207 sql_help.c:208 sql_help.c:209 sql_help.c:210 +#: sql_help.c:570 sql_help.c:606 sql_help.c:672 sql_help.c:814 sql_help.c:951 +#: sql_help.c:1291 sql_help.c:1620 sql_help.c:2377 sql_help.c:2378 +#: sql_help.c:2379 sql_help.c:2380 sql_help.c:2381 sql_help.c:2514 +#: sql_help.c:2593 sql_help.c:2594 sql_help.c:2595 sql_help.c:2596 +#: sql_help.c:2597 sql_help.c:3152 sql_help.c:3153 sql_help.c:3154 +#: sql_help.c:3155 sql_help.c:3156 sql_help.c:3843 sql_help.c:3847 +#: sql_help.c:4223 sql_help.c:4227 sql_help.c:4534 msgid "role_name" msgstr "nom_rôle" -#: sql_help.c:233 sql_help.c:456 sql_help.c:1305 sql_help.c:1307 -#: sql_help.c:1358 sql_help.c:1371 sql_help.c:1396 sql_help.c:1649 -#: sql_help.c:2184 sql_help.c:2188 sql_help.c:2291 sql_help.c:2296 -#: sql_help.c:2396 sql_help.c:2695 sql_help.c:2700 sql_help.c:2702 -#: sql_help.c:2819 sql_help.c:2832 sql_help.c:2846 sql_help.c:2855 -#: sql_help.c:2867 sql_help.c:2896 sql_help.c:3892 sql_help.c:3907 -#: sql_help.c:3909 sql_help.c:4388 sql_help.c:4389 sql_help.c:4398 -#: sql_help.c:4440 sql_help.c:4441 sql_help.c:4442 sql_help.c:4443 -#: sql_help.c:4444 sql_help.c:4445 sql_help.c:4485 sql_help.c:4486 -#: sql_help.c:4491 sql_help.c:4496 sql_help.c:4637 sql_help.c:4638 -#: sql_help.c:4647 sql_help.c:4689 sql_help.c:4690 sql_help.c:4691 -#: sql_help.c:4692 sql_help.c:4693 sql_help.c:4694 sql_help.c:4748 -#: sql_help.c:4750 sql_help.c:4811 sql_help.c:4869 sql_help.c:4870 -#: sql_help.c:4879 sql_help.c:4921 sql_help.c:4922 sql_help.c:4923 -#: sql_help.c:4924 sql_help.c:4925 sql_help.c:4926 +#: sql_help.c:236 sql_help.c:459 sql_help.c:1307 sql_help.c:1309 +#: sql_help.c:1360 sql_help.c:1372 sql_help.c:1397 sql_help.c:1650 +#: sql_help.c:2187 sql_help.c:2191 sql_help.c:2294 sql_help.c:2299 +#: sql_help.c:2399 sql_help.c:2698 sql_help.c:2703 sql_help.c:2705 +#: sql_help.c:2822 sql_help.c:2835 sql_help.c:2849 sql_help.c:2858 +#: sql_help.c:2870 sql_help.c:2899 sql_help.c:3895 sql_help.c:3910 +#: sql_help.c:3912 sql_help.c:4391 sql_help.c:4392 sql_help.c:4401 +#: sql_help.c:4443 sql_help.c:4444 sql_help.c:4445 sql_help.c:4446 +#: sql_help.c:4447 sql_help.c:4448 sql_help.c:4488 sql_help.c:4489 +#: sql_help.c:4494 sql_help.c:4499 sql_help.c:4640 sql_help.c:4641 +#: sql_help.c:4650 sql_help.c:4692 sql_help.c:4693 sql_help.c:4694 +#: sql_help.c:4695 sql_help.c:4696 sql_help.c:4697 sql_help.c:4751 +#: sql_help.c:4753 sql_help.c:4814 sql_help.c:4872 sql_help.c:4873 +#: sql_help.c:4882 sql_help.c:4924 sql_help.c:4925 sql_help.c:4926 +#: sql_help.c:4927 sql_help.c:4928 sql_help.c:4929 msgid "expression" msgstr "expression" -#: sql_help.c:236 +#: sql_help.c:239 msgid "domain_constraint" msgstr "contrainte_domaine" -#: sql_help.c:238 sql_help.c:240 sql_help.c:243 sql_help.c:471 sql_help.c:472 -#: sql_help.c:1282 sql_help.c:1329 sql_help.c:1330 sql_help.c:1331 -#: sql_help.c:1357 sql_help.c:1370 sql_help.c:1387 sql_help.c:1817 -#: sql_help.c:1819 sql_help.c:2187 sql_help.c:2290 sql_help.c:2295 -#: sql_help.c:2854 sql_help.c:2866 sql_help.c:3904 +#: sql_help.c:241 sql_help.c:243 sql_help.c:246 sql_help.c:474 sql_help.c:475 +#: sql_help.c:1284 sql_help.c:1331 sql_help.c:1332 sql_help.c:1333 +#: sql_help.c:1359 sql_help.c:1371 sql_help.c:1388 sql_help.c:1818 +#: sql_help.c:1820 sql_help.c:2190 sql_help.c:2293 sql_help.c:2298 +#: sql_help.c:2857 sql_help.c:2869 sql_help.c:3907 msgid "constraint_name" msgstr "nom_contrainte" -#: sql_help.c:241 sql_help.c:1283 +#: sql_help.c:244 sql_help.c:1285 msgid "new_constraint_name" msgstr "nouvelle_nom_contrainte" -#: sql_help.c:314 sql_help.c:1075 +#: sql_help.c:317 sql_help.c:1078 msgid "new_version" msgstr "nouvelle_version" -#: sql_help.c:318 sql_help.c:320 +#: sql_help.c:321 sql_help.c:323 msgid "member_object" msgstr "objet_membre" -#: sql_help.c:321 +#: sql_help.c:324 msgid "where member_object is:" msgstr "où objet_membre fait partie de :" -#: sql_help.c:322 sql_help.c:327 sql_help.c:328 sql_help.c:329 sql_help.c:330 -#: sql_help.c:331 sql_help.c:332 sql_help.c:337 sql_help.c:341 sql_help.c:343 -#: sql_help.c:345 sql_help.c:354 sql_help.c:355 sql_help.c:356 sql_help.c:357 -#: sql_help.c:358 sql_help.c:359 sql_help.c:360 sql_help.c:361 sql_help.c:364 -#: sql_help.c:365 sql_help.c:1809 sql_help.c:1814 sql_help.c:1821 -#: sql_help.c:1822 sql_help.c:1823 sql_help.c:1824 sql_help.c:1825 -#: sql_help.c:1826 sql_help.c:1827 sql_help.c:1832 sql_help.c:1834 -#: sql_help.c:1838 sql_help.c:1840 sql_help.c:1844 sql_help.c:1849 -#: sql_help.c:1850 sql_help.c:1857 sql_help.c:1858 sql_help.c:1859 -#: sql_help.c:1860 sql_help.c:1861 sql_help.c:1862 sql_help.c:1863 -#: sql_help.c:1864 sql_help.c:1865 sql_help.c:1866 sql_help.c:1867 -#: sql_help.c:1872 sql_help.c:1873 sql_help.c:4293 sql_help.c:4298 -#: sql_help.c:4299 sql_help.c:4300 sql_help.c:4301 sql_help.c:4307 -#: sql_help.c:4308 sql_help.c:4313 sql_help.c:4314 sql_help.c:4319 -#: sql_help.c:4320 sql_help.c:4321 sql_help.c:4322 sql_help.c:4323 -#: sql_help.c:4324 +#: sql_help.c:325 sql_help.c:330 sql_help.c:331 sql_help.c:332 sql_help.c:333 +#: sql_help.c:334 sql_help.c:335 sql_help.c:340 sql_help.c:344 sql_help.c:346 +#: sql_help.c:348 sql_help.c:357 sql_help.c:358 sql_help.c:359 sql_help.c:360 +#: sql_help.c:361 sql_help.c:362 sql_help.c:363 sql_help.c:364 sql_help.c:367 +#: sql_help.c:368 sql_help.c:1810 sql_help.c:1815 sql_help.c:1822 +#: sql_help.c:1823 sql_help.c:1824 sql_help.c:1825 sql_help.c:1826 +#: sql_help.c:1827 sql_help.c:1828 sql_help.c:1833 sql_help.c:1835 +#: sql_help.c:1839 sql_help.c:1841 sql_help.c:1845 sql_help.c:1850 +#: sql_help.c:1851 sql_help.c:1858 sql_help.c:1859 sql_help.c:1860 +#: sql_help.c:1861 sql_help.c:1862 sql_help.c:1863 sql_help.c:1864 +#: sql_help.c:1865 sql_help.c:1866 sql_help.c:1867 sql_help.c:1868 +#: sql_help.c:1873 sql_help.c:1874 sql_help.c:4296 sql_help.c:4301 +#: sql_help.c:4302 sql_help.c:4303 sql_help.c:4304 sql_help.c:4310 +#: sql_help.c:4311 sql_help.c:4316 sql_help.c:4317 sql_help.c:4322 +#: sql_help.c:4323 sql_help.c:4324 sql_help.c:4325 sql_help.c:4326 +#: sql_help.c:4327 msgid "object_name" msgstr "nom_objet" -#: sql_help.c:323 sql_help.c:1810 sql_help.c:4296 +#: sql_help.c:326 sql_help.c:1811 sql_help.c:4299 msgid "aggregate_name" msgstr "nom_agrégat" -#: sql_help.c:325 sql_help.c:1812 sql_help.c:2096 sql_help.c:2100 -#: sql_help.c:2102 sql_help.c:3276 +#: sql_help.c:328 sql_help.c:1813 sql_help.c:2097 sql_help.c:2101 +#: sql_help.c:2103 sql_help.c:3279 msgid "source_type" msgstr "type_source" -#: sql_help.c:326 sql_help.c:1813 sql_help.c:2097 sql_help.c:2101 -#: sql_help.c:2103 sql_help.c:3277 +#: sql_help.c:329 sql_help.c:1814 sql_help.c:2098 sql_help.c:2102 +#: sql_help.c:2104 sql_help.c:3280 msgid "target_type" msgstr "type_cible" -#: sql_help.c:333 sql_help.c:775 sql_help.c:1828 sql_help.c:2098 -#: sql_help.c:2137 sql_help.c:2202 sql_help.c:2454 sql_help.c:2485 -#: sql_help.c:3036 sql_help.c:4198 sql_help.c:4302 sql_help.c:4417 -#: sql_help.c:4421 sql_help.c:4425 sql_help.c:4428 sql_help.c:4666 -#: sql_help.c:4670 sql_help.c:4674 sql_help.c:4677 sql_help.c:4898 -#: sql_help.c:4902 sql_help.c:4906 sql_help.c:4909 +#: sql_help.c:336 sql_help.c:778 sql_help.c:1829 sql_help.c:2099 +#: sql_help.c:2140 sql_help.c:2205 sql_help.c:2457 sql_help.c:2488 +#: sql_help.c:3039 sql_help.c:4201 sql_help.c:4305 sql_help.c:4420 +#: sql_help.c:4424 sql_help.c:4428 sql_help.c:4431 sql_help.c:4669 +#: sql_help.c:4673 sql_help.c:4677 sql_help.c:4680 sql_help.c:4901 +#: sql_help.c:4905 sql_help.c:4909 sql_help.c:4912 msgid "function_name" msgstr "nom_fonction" -#: sql_help.c:338 sql_help.c:768 sql_help.c:1835 sql_help.c:2478 +#: sql_help.c:341 sql_help.c:771 sql_help.c:1836 sql_help.c:2481 msgid "operator_name" msgstr "nom_opérateur" -#: sql_help.c:339 sql_help.c:704 sql_help.c:708 sql_help.c:712 sql_help.c:1836 -#: sql_help.c:2455 sql_help.c:3400 +#: sql_help.c:342 sql_help.c:707 sql_help.c:711 sql_help.c:715 sql_help.c:1837 +#: sql_help.c:2458 sql_help.c:3403 msgid "left_type" msgstr "type_argument_gauche" -#: sql_help.c:340 sql_help.c:705 sql_help.c:709 sql_help.c:713 sql_help.c:1837 -#: sql_help.c:2456 sql_help.c:3401 +#: sql_help.c:343 sql_help.c:708 sql_help.c:712 sql_help.c:716 sql_help.c:1838 +#: sql_help.c:2459 sql_help.c:3404 msgid "right_type" msgstr "type_argument_droit" -#: sql_help.c:342 sql_help.c:344 sql_help.c:731 sql_help.c:734 sql_help.c:737 -#: sql_help.c:766 sql_help.c:778 sql_help.c:786 sql_help.c:789 sql_help.c:792 -#: sql_help.c:1376 sql_help.c:1839 sql_help.c:1841 sql_help.c:2475 -#: sql_help.c:2496 sql_help.c:2872 sql_help.c:3410 sql_help.c:3419 +#: sql_help.c:345 sql_help.c:347 sql_help.c:734 sql_help.c:737 sql_help.c:740 +#: sql_help.c:769 sql_help.c:781 sql_help.c:789 sql_help.c:792 sql_help.c:795 +#: sql_help.c:1377 sql_help.c:1840 sql_help.c:1842 sql_help.c:2478 +#: sql_help.c:2499 sql_help.c:2875 sql_help.c:3413 sql_help.c:3422 msgid "index_method" msgstr "méthode_indexage" -#: sql_help.c:346 sql_help.c:1845 sql_help.c:4309 +#: sql_help.c:349 sql_help.c:1846 sql_help.c:4312 msgid "procedure_name" msgstr "nom_procédure" -#: sql_help.c:350 sql_help.c:1851 sql_help.c:3818 sql_help.c:4315 +#: sql_help.c:353 sql_help.c:1852 sql_help.c:3821 sql_help.c:4318 msgid "routine_name" msgstr "nom_routine" -#: sql_help.c:362 sql_help.c:1347 sql_help.c:1868 sql_help.c:2331 -#: sql_help.c:2536 sql_help.c:2827 sql_help.c:3003 sql_help.c:3581 -#: sql_help.c:3837 sql_help.c:4217 +#: sql_help.c:365 sql_help.c:1349 sql_help.c:1869 sql_help.c:2334 +#: sql_help.c:2539 sql_help.c:2830 sql_help.c:3006 sql_help.c:3584 +#: sql_help.c:3840 sql_help.c:4220 msgid "type_name" msgstr "nom_type" -#: sql_help.c:363 sql_help.c:1869 sql_help.c:2330 sql_help.c:2535 -#: sql_help.c:3004 sql_help.c:3234 sql_help.c:3582 sql_help.c:3825 -#: sql_help.c:4205 +#: sql_help.c:366 sql_help.c:1870 sql_help.c:2333 sql_help.c:2538 +#: sql_help.c:3007 sql_help.c:3237 sql_help.c:3585 sql_help.c:3828 +#: sql_help.c:4208 msgid "lang_name" msgstr "nom_langage" -#: sql_help.c:366 +#: sql_help.c:369 msgid "and aggregate_signature is:" msgstr "et signature_agrégat est :" -#: sql_help.c:389 sql_help.c:1963 sql_help.c:2227 +#: sql_help.c:392 sql_help.c:1964 sql_help.c:2230 msgid "handler_function" msgstr "fonction_gestionnaire" -#: sql_help.c:390 sql_help.c:2228 +#: sql_help.c:393 sql_help.c:2231 msgid "validator_function" msgstr "fonction_validateur" -#: sql_help.c:438 sql_help.c:516 sql_help.c:660 sql_help.c:842 sql_help.c:981 -#: sql_help.c:1277 sql_help.c:1546 +#: sql_help.c:441 sql_help.c:519 sql_help.c:661 sql_help.c:845 sql_help.c:984 +#: sql_help.c:1279 sql_help.c:1547 msgid "action" msgstr "action" -#: sql_help.c:440 sql_help.c:447 sql_help.c:451 sql_help.c:452 sql_help.c:455 -#: sql_help.c:457 sql_help.c:458 sql_help.c:459 sql_help.c:461 sql_help.c:464 -#: sql_help.c:466 sql_help.c:467 sql_help.c:664 sql_help.c:674 sql_help.c:676 -#: sql_help.c:679 sql_help.c:681 sql_help.c:1057 sql_help.c:1279 -#: sql_help.c:1297 sql_help.c:1301 sql_help.c:1302 sql_help.c:1306 -#: sql_help.c:1308 sql_help.c:1309 sql_help.c:1310 sql_help.c:1311 -#: sql_help.c:1313 sql_help.c:1316 sql_help.c:1317 sql_help.c:1319 -#: sql_help.c:1322 sql_help.c:1324 sql_help.c:1325 sql_help.c:1372 -#: sql_help.c:1374 sql_help.c:1381 sql_help.c:1390 sql_help.c:1395 -#: sql_help.c:1648 sql_help.c:1651 sql_help.c:1655 sql_help.c:1691 -#: sql_help.c:1816 sql_help.c:1929 sql_help.c:1935 sql_help.c:1948 -#: sql_help.c:1949 sql_help.c:1950 sql_help.c:2269 sql_help.c:2282 -#: sql_help.c:2328 sql_help.c:2395 sql_help.c:2401 sql_help.c:2434 -#: sql_help.c:2664 sql_help.c:2699 sql_help.c:2701 sql_help.c:2809 -#: sql_help.c:2818 sql_help.c:2828 sql_help.c:2831 sql_help.c:2841 -#: sql_help.c:2845 sql_help.c:2868 sql_help.c:2870 sql_help.c:2877 -#: sql_help.c:2890 sql_help.c:2895 sql_help.c:2913 sql_help.c:3039 -#: sql_help.c:3179 sql_help.c:3797 sql_help.c:3798 sql_help.c:3891 -#: sql_help.c:3906 sql_help.c:3908 sql_help.c:3910 sql_help.c:4177 -#: sql_help.c:4178 sql_help.c:4295 sql_help.c:4449 sql_help.c:4455 -#: sql_help.c:4457 sql_help.c:4698 sql_help.c:4704 sql_help.c:4706 -#: sql_help.c:4747 sql_help.c:4749 sql_help.c:4751 sql_help.c:4799 -#: sql_help.c:4930 sql_help.c:4936 sql_help.c:4938 +#: sql_help.c:443 sql_help.c:450 sql_help.c:454 sql_help.c:455 sql_help.c:458 +#: sql_help.c:460 sql_help.c:461 sql_help.c:462 sql_help.c:464 sql_help.c:467 +#: sql_help.c:469 sql_help.c:470 sql_help.c:665 sql_help.c:675 sql_help.c:677 +#: sql_help.c:680 sql_help.c:682 sql_help.c:683 sql_help.c:1060 sql_help.c:1281 +#: sql_help.c:1299 sql_help.c:1303 sql_help.c:1304 sql_help.c:1308 +#: sql_help.c:1310 sql_help.c:1311 sql_help.c:1312 sql_help.c:1313 +#: sql_help.c:1315 sql_help.c:1318 sql_help.c:1319 sql_help.c:1321 +#: sql_help.c:1324 sql_help.c:1326 sql_help.c:1327 sql_help.c:1373 +#: sql_help.c:1375 sql_help.c:1382 sql_help.c:1391 sql_help.c:1396 +#: sql_help.c:1649 sql_help.c:1652 sql_help.c:1656 sql_help.c:1692 +#: sql_help.c:1817 sql_help.c:1930 sql_help.c:1936 sql_help.c:1949 +#: sql_help.c:1950 sql_help.c:1951 sql_help.c:2272 sql_help.c:2285 +#: sql_help.c:2331 sql_help.c:2398 sql_help.c:2404 sql_help.c:2437 +#: sql_help.c:2667 sql_help.c:2702 sql_help.c:2704 sql_help.c:2812 +#: sql_help.c:2821 sql_help.c:2831 sql_help.c:2834 sql_help.c:2844 +#: sql_help.c:2848 sql_help.c:2871 sql_help.c:2873 sql_help.c:2880 +#: sql_help.c:2893 sql_help.c:2898 sql_help.c:2916 sql_help.c:3042 +#: sql_help.c:3182 sql_help.c:3800 sql_help.c:3801 sql_help.c:3894 +#: sql_help.c:3909 sql_help.c:3911 sql_help.c:3913 sql_help.c:4180 +#: sql_help.c:4181 sql_help.c:4298 sql_help.c:4452 sql_help.c:4458 +#: sql_help.c:4460 sql_help.c:4701 sql_help.c:4707 sql_help.c:4709 +#: sql_help.c:4750 sql_help.c:4752 sql_help.c:4754 sql_help.c:4802 +#: sql_help.c:4933 sql_help.c:4939 sql_help.c:4941 msgid "column_name" msgstr "nom_colonne" -#: sql_help.c:441 sql_help.c:665 sql_help.c:1280 sql_help.c:1656 +#: sql_help.c:444 sql_help.c:666 sql_help.c:1282 sql_help.c:1657 msgid "new_column_name" msgstr "nouvelle_nom_colonne" -#: sql_help.c:446 sql_help.c:537 sql_help.c:673 sql_help.c:863 sql_help.c:1002 -#: sql_help.c:1296 sql_help.c:1556 +#: sql_help.c:449 sql_help.c:540 sql_help.c:674 sql_help.c:866 sql_help.c:1005 +#: sql_help.c:1298 sql_help.c:1557 msgid "where action is one of:" msgstr "où action fait partie de :" -#: sql_help.c:448 sql_help.c:453 sql_help.c:1049 sql_help.c:1298 -#: sql_help.c:1303 sql_help.c:1558 sql_help.c:1562 sql_help.c:2182 -#: sql_help.c:2270 sql_help.c:2474 sql_help.c:2657 sql_help.c:2810 -#: sql_help.c:3086 sql_help.c:3993 +#: sql_help.c:451 sql_help.c:456 sql_help.c:1052 sql_help.c:1300 +#: sql_help.c:1305 sql_help.c:1559 sql_help.c:1563 sql_help.c:2185 +#: sql_help.c:2273 sql_help.c:2477 sql_help.c:2660 sql_help.c:2813 +#: sql_help.c:3089 sql_help.c:3996 msgid "data_type" msgstr "type_données" -#: sql_help.c:449 sql_help.c:454 sql_help.c:1299 sql_help.c:1304 -#: sql_help.c:1559 sql_help.c:1563 sql_help.c:2183 sql_help.c:2273 -#: sql_help.c:2397 sql_help.c:2811 sql_help.c:2820 sql_help.c:2833 -#: sql_help.c:2847 sql_help.c:3087 sql_help.c:3093 sql_help.c:3901 +#: sql_help.c:452 sql_help.c:457 sql_help.c:1301 sql_help.c:1306 +#: sql_help.c:1560 sql_help.c:1564 sql_help.c:2186 sql_help.c:2276 +#: sql_help.c:2400 sql_help.c:2815 sql_help.c:2823 sql_help.c:2836 +#: sql_help.c:2850 sql_help.c:3090 sql_help.c:3096 sql_help.c:3904 msgid "collation" msgstr "collationnement" -#: sql_help.c:450 sql_help.c:1300 sql_help.c:2274 sql_help.c:2283 -#: sql_help.c:2813 sql_help.c:2829 sql_help.c:2842 +#: sql_help.c:453 sql_help.c:1302 sql_help.c:2277 sql_help.c:2286 +#: sql_help.c:2816 sql_help.c:2832 sql_help.c:2845 msgid "column_constraint" msgstr "contrainte_colonne" -#: sql_help.c:460 sql_help.c:604 sql_help.c:675 sql_help.c:1318 sql_help.c:4796 +#: sql_help.c:463 sql_help.c:604 sql_help.c:676 sql_help.c:1320 sql_help.c:4799 msgid "integer" msgstr "entier" -#: sql_help.c:462 sql_help.c:465 sql_help.c:677 sql_help.c:680 sql_help.c:1320 -#: sql_help.c:1323 +#: sql_help.c:465 sql_help.c:468 sql_help.c:678 sql_help.c:681 sql_help.c:1322 +#: sql_help.c:1325 msgid "attribute_option" msgstr "option_attribut" -#: sql_help.c:470 sql_help.c:1327 sql_help.c:2275 sql_help.c:2284 -#: sql_help.c:2814 sql_help.c:2830 sql_help.c:2843 +#: sql_help.c:473 sql_help.c:1329 sql_help.c:2278 sql_help.c:2287 +#: sql_help.c:2817 sql_help.c:2833 sql_help.c:2846 msgid "table_constraint" msgstr "contrainte_table" -#: sql_help.c:473 sql_help.c:474 sql_help.c:475 sql_help.c:476 sql_help.c:1332 -#: sql_help.c:1333 sql_help.c:1334 sql_help.c:1335 sql_help.c:1870 +#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1334 +#: sql_help.c:1335 sql_help.c:1336 sql_help.c:1337 sql_help.c:1871 msgid "trigger_name" msgstr "nom_trigger" -#: sql_help.c:477 sql_help.c:478 sql_help.c:1345 sql_help.c:1346 -#: sql_help.c:2276 sql_help.c:2281 sql_help.c:2817 sql_help.c:2840 +#: sql_help.c:480 sql_help.c:481 sql_help.c:1347 sql_help.c:1348 +#: sql_help.c:2279 sql_help.c:2284 sql_help.c:2820 sql_help.c:2843 msgid "parent_table" msgstr "table_parent" -#: sql_help.c:536 sql_help.c:594 sql_help.c:662 sql_help.c:862 sql_help.c:1001 -#: sql_help.c:1515 sql_help.c:2213 +#: sql_help.c:539 sql_help.c:596 sql_help.c:663 sql_help.c:865 sql_help.c:1004 +#: sql_help.c:1516 sql_help.c:2216 msgid "extension_name" msgstr "nom_extension" -#: sql_help.c:538 sql_help.c:1003 sql_help.c:2332 +#: sql_help.c:541 sql_help.c:1006 sql_help.c:2335 msgid "execution_cost" msgstr "coût_exécution" -#: sql_help.c:539 sql_help.c:1004 sql_help.c:2333 +#: sql_help.c:542 sql_help.c:1007 sql_help.c:2336 msgid "result_rows" msgstr "lignes_de_résultat" -#: sql_help.c:540 sql_help.c:2334 +#: sql_help.c:543 sql_help.c:2337 msgid "support_function" msgstr "fonction_support" -#: sql_help.c:562 sql_help.c:564 sql_help.c:927 sql_help.c:935 sql_help.c:939 -#: sql_help.c:942 sql_help.c:945 sql_help.c:1598 sql_help.c:1606 -#: sql_help.c:1610 sql_help.c:1613 sql_help.c:1616 sql_help.c:2635 -#: sql_help.c:2637 sql_help.c:2640 sql_help.c:2641 sql_help.c:3795 -#: sql_help.c:3796 sql_help.c:3800 sql_help.c:3801 sql_help.c:3804 -#: sql_help.c:3805 sql_help.c:3807 sql_help.c:3808 sql_help.c:3810 -#: sql_help.c:3811 sql_help.c:3813 sql_help.c:3814 sql_help.c:3816 -#: sql_help.c:3817 sql_help.c:3823 sql_help.c:3824 sql_help.c:3826 -#: sql_help.c:3827 sql_help.c:3829 sql_help.c:3830 sql_help.c:3832 -#: sql_help.c:3833 sql_help.c:3835 sql_help.c:3836 sql_help.c:3838 -#: sql_help.c:3839 sql_help.c:3841 sql_help.c:3842 sql_help.c:4175 -#: sql_help.c:4176 sql_help.c:4180 sql_help.c:4181 sql_help.c:4184 -#: sql_help.c:4185 sql_help.c:4187 sql_help.c:4188 sql_help.c:4190 -#: sql_help.c:4191 sql_help.c:4193 sql_help.c:4194 sql_help.c:4196 -#: sql_help.c:4197 sql_help.c:4203 sql_help.c:4204 sql_help.c:4206 -#: sql_help.c:4207 sql_help.c:4209 sql_help.c:4210 sql_help.c:4212 -#: sql_help.c:4213 sql_help.c:4215 sql_help.c:4216 sql_help.c:4218 -#: sql_help.c:4219 sql_help.c:4221 sql_help.c:4222 +#: sql_help.c:565 sql_help.c:567 sql_help.c:930 sql_help.c:938 sql_help.c:942 +#: sql_help.c:945 sql_help.c:948 sql_help.c:1599 sql_help.c:1607 +#: sql_help.c:1611 sql_help.c:1614 sql_help.c:1617 sql_help.c:2638 +#: sql_help.c:2640 sql_help.c:2643 sql_help.c:2644 sql_help.c:3798 +#: sql_help.c:3799 sql_help.c:3803 sql_help.c:3804 sql_help.c:3807 +#: sql_help.c:3808 sql_help.c:3810 sql_help.c:3811 sql_help.c:3813 +#: sql_help.c:3814 sql_help.c:3816 sql_help.c:3817 sql_help.c:3819 +#: sql_help.c:3820 sql_help.c:3826 sql_help.c:3827 sql_help.c:3829 +#: sql_help.c:3830 sql_help.c:3832 sql_help.c:3833 sql_help.c:3835 +#: sql_help.c:3836 sql_help.c:3838 sql_help.c:3839 sql_help.c:3841 +#: sql_help.c:3842 sql_help.c:3844 sql_help.c:3845 sql_help.c:4178 +#: sql_help.c:4179 sql_help.c:4183 sql_help.c:4184 sql_help.c:4187 +#: sql_help.c:4188 sql_help.c:4190 sql_help.c:4191 sql_help.c:4193 +#: sql_help.c:4194 sql_help.c:4196 sql_help.c:4197 sql_help.c:4199 +#: sql_help.c:4200 sql_help.c:4206 sql_help.c:4207 sql_help.c:4209 +#: sql_help.c:4210 sql_help.c:4212 sql_help.c:4213 sql_help.c:4215 +#: sql_help.c:4216 sql_help.c:4218 sql_help.c:4219 sql_help.c:4221 +#: sql_help.c:4222 sql_help.c:4224 sql_help.c:4225 msgid "role_specification" msgstr "specification_role" -#: sql_help.c:563 sql_help.c:565 sql_help.c:1629 sql_help.c:2156 -#: sql_help.c:2643 sql_help.c:3164 sql_help.c:3615 sql_help.c:4541 +#: sql_help.c:566 sql_help.c:568 sql_help.c:1630 sql_help.c:2159 +#: sql_help.c:2646 sql_help.c:3167 sql_help.c:3618 sql_help.c:4544 msgid "user_name" msgstr "nom_utilisateur" -#: sql_help.c:566 sql_help.c:947 sql_help.c:1618 sql_help.c:2642 -#: sql_help.c:3843 sql_help.c:4223 +#: sql_help.c:569 sql_help.c:950 sql_help.c:1619 sql_help.c:2645 +#: sql_help.c:3846 sql_help.c:4226 msgid "where role_specification can be:" msgstr "où specification_role peut être :" -#: sql_help.c:568 +#: sql_help.c:571 msgid "group_name" msgstr "nom_groupe" -#: sql_help.c:590 sql_help.c:1393 sql_help.c:2162 sql_help.c:2404 -#: sql_help.c:2438 sql_help.c:2825 sql_help.c:2838 sql_help.c:2852 -#: sql_help.c:2893 sql_help.c:2917 sql_help.c:2929 sql_help.c:3834 -#: sql_help.c:4214 +#: sql_help.c:592 sql_help.c:1394 sql_help.c:2165 sql_help.c:2407 +#: sql_help.c:2441 sql_help.c:2828 sql_help.c:2841 sql_help.c:2855 +#: sql_help.c:2896 sql_help.c:2920 sql_help.c:2932 sql_help.c:3837 +#: sql_help.c:4217 msgid "tablespace_name" msgstr "nom_tablespace" -#: sql_help.c:592 sql_help.c:682 sql_help.c:1340 sql_help.c:1349 -#: sql_help.c:1388 sql_help.c:1745 sql_help.c:1748 +#: sql_help.c:594 sql_help.c:685 sql_help.c:1342 sql_help.c:1351 +#: sql_help.c:1389 sql_help.c:1746 sql_help.c:1749 msgid "index_name" msgstr "nom_index" -#: sql_help.c:596 -msgid "collation_name" -msgstr "nom_collation" - -#: sql_help.c:598 sql_help.c:601 sql_help.c:683 sql_help.c:685 sql_help.c:1342 -#: sql_help.c:1344 sql_help.c:1391 sql_help.c:2402 sql_help.c:2436 -#: sql_help.c:2823 sql_help.c:2836 sql_help.c:2850 sql_help.c:2891 -#: sql_help.c:2915 +#: sql_help.c:598 sql_help.c:601 sql_help.c:686 sql_help.c:688 sql_help.c:1344 +#: sql_help.c:1346 sql_help.c:1392 sql_help.c:2405 sql_help.c:2439 +#: sql_help.c:2826 sql_help.c:2839 sql_help.c:2853 sql_help.c:2894 +#: sql_help.c:2918 msgid "storage_parameter" msgstr "paramètre_stockage" @@ -4802,1774 +4798,1774 @@ msgstr "paramètre_stockage" msgid "column_number" msgstr "numéro_colonne" -#: sql_help.c:627 sql_help.c:1833 sql_help.c:4306 +#: sql_help.c:627 sql_help.c:1834 sql_help.c:4309 msgid "large_object_oid" msgstr "oid_large_object" -#: sql_help.c:714 sql_help.c:2459 +#: sql_help.c:684 sql_help.c:1328 sql_help.c:2814 +msgid "compression_method" +msgstr "méthode_compression" + +#: sql_help.c:717 sql_help.c:2462 msgid "res_proc" msgstr "res_proc" -#: sql_help.c:715 sql_help.c:2460 +#: sql_help.c:718 sql_help.c:2463 msgid "join_proc" msgstr "join_proc" -#: sql_help.c:767 sql_help.c:779 sql_help.c:2477 +#: sql_help.c:770 sql_help.c:782 sql_help.c:2480 msgid "strategy_number" msgstr "numéro_de_stratégie" -#: sql_help.c:769 sql_help.c:770 sql_help.c:773 sql_help.c:774 sql_help.c:780 -#: sql_help.c:781 sql_help.c:783 sql_help.c:784 sql_help.c:2479 sql_help.c:2480 -#: sql_help.c:2483 sql_help.c:2484 +#: sql_help.c:772 sql_help.c:773 sql_help.c:776 sql_help.c:777 sql_help.c:783 +#: sql_help.c:784 sql_help.c:786 sql_help.c:787 sql_help.c:2482 sql_help.c:2483 +#: sql_help.c:2486 sql_help.c:2487 msgid "op_type" msgstr "type_op" -#: sql_help.c:771 sql_help.c:2481 +#: sql_help.c:774 sql_help.c:2484 msgid "sort_family_name" msgstr "nom_famille_tri" -#: sql_help.c:772 sql_help.c:782 sql_help.c:2482 +#: sql_help.c:775 sql_help.c:785 sql_help.c:2485 msgid "support_number" msgstr "numéro_de_support" -#: sql_help.c:776 sql_help.c:2099 sql_help.c:2486 sql_help.c:3006 -#: sql_help.c:3008 +#: sql_help.c:779 sql_help.c:2100 sql_help.c:2489 sql_help.c:3009 +#: sql_help.c:3011 msgid "argument_type" msgstr "type_argument" -#: sql_help.c:807 sql_help.c:810 sql_help.c:881 sql_help.c:883 sql_help.c:885 -#: sql_help.c:1017 sql_help.c:1056 sql_help.c:1511 sql_help.c:1514 -#: sql_help.c:1690 sql_help.c:1744 sql_help.c:1747 sql_help.c:1818 -#: sql_help.c:1843 sql_help.c:1856 sql_help.c:1871 sql_help.c:1928 -#: sql_help.c:1934 sql_help.c:2268 sql_help.c:2280 sql_help.c:2393 -#: sql_help.c:2433 sql_help.c:2510 sql_help.c:2555 sql_help.c:2611 -#: sql_help.c:2663 sql_help.c:2696 sql_help.c:2703 sql_help.c:2808 -#: sql_help.c:2826 sql_help.c:2839 sql_help.c:2912 sql_help.c:3032 -#: sql_help.c:3213 sql_help.c:3436 sql_help.c:3485 sql_help.c:3591 -#: sql_help.c:3793 sql_help.c:3799 sql_help.c:3857 sql_help.c:3889 -#: sql_help.c:4173 sql_help.c:4179 sql_help.c:4294 sql_help.c:4403 -#: sql_help.c:4405 sql_help.c:4462 sql_help.c:4501 sql_help.c:4652 -#: sql_help.c:4654 sql_help.c:4711 sql_help.c:4745 sql_help.c:4798 -#: sql_help.c:4884 sql_help.c:4886 sql_help.c:4943 +#: sql_help.c:810 sql_help.c:813 sql_help.c:884 sql_help.c:886 sql_help.c:888 +#: sql_help.c:1020 sql_help.c:1059 sql_help.c:1512 sql_help.c:1515 +#: sql_help.c:1691 sql_help.c:1745 sql_help.c:1748 sql_help.c:1819 +#: sql_help.c:1844 sql_help.c:1857 sql_help.c:1872 sql_help.c:1929 +#: sql_help.c:1935 sql_help.c:2271 sql_help.c:2283 sql_help.c:2396 +#: sql_help.c:2436 sql_help.c:2513 sql_help.c:2558 sql_help.c:2614 +#: sql_help.c:2666 sql_help.c:2699 sql_help.c:2706 sql_help.c:2811 +#: sql_help.c:2829 sql_help.c:2842 sql_help.c:2915 sql_help.c:3035 +#: sql_help.c:3216 sql_help.c:3439 sql_help.c:3488 sql_help.c:3594 +#: sql_help.c:3796 sql_help.c:3802 sql_help.c:3860 sql_help.c:3892 +#: sql_help.c:4176 sql_help.c:4182 sql_help.c:4297 sql_help.c:4406 +#: sql_help.c:4408 sql_help.c:4465 sql_help.c:4504 sql_help.c:4655 +#: sql_help.c:4657 sql_help.c:4714 sql_help.c:4748 sql_help.c:4801 +#: sql_help.c:4887 sql_help.c:4889 sql_help.c:4946 msgid "table_name" msgstr "nom_table" -#: sql_help.c:812 sql_help.c:2512 +#: sql_help.c:815 sql_help.c:2515 msgid "using_expression" msgstr "expression_using" -#: sql_help.c:813 sql_help.c:2513 +#: sql_help.c:816 sql_help.c:2516 msgid "check_expression" msgstr "expression_check" -#: sql_help.c:887 sql_help.c:2556 +#: sql_help.c:890 sql_help.c:2559 msgid "publication_parameter" msgstr "paramètre_publication" -#: sql_help.c:931 sql_help.c:1602 sql_help.c:2372 sql_help.c:2588 -#: sql_help.c:3147 +#: sql_help.c:934 sql_help.c:1603 sql_help.c:2375 sql_help.c:2591 +#: sql_help.c:3150 msgid "password" msgstr "mot_de_passe" -#: sql_help.c:932 sql_help.c:1603 sql_help.c:2373 sql_help.c:2589 -#: sql_help.c:3148 +#: sql_help.c:935 sql_help.c:1604 sql_help.c:2376 sql_help.c:2592 +#: sql_help.c:3151 msgid "timestamp" msgstr "horodatage" -#: sql_help.c:936 sql_help.c:940 sql_help.c:943 sql_help.c:946 sql_help.c:1607 -#: sql_help.c:1611 sql_help.c:1614 sql_help.c:1617 sql_help.c:3806 -#: sql_help.c:4186 +#: sql_help.c:939 sql_help.c:943 sql_help.c:946 sql_help.c:949 sql_help.c:1608 +#: sql_help.c:1612 sql_help.c:1615 sql_help.c:1618 sql_help.c:3809 +#: sql_help.c:4189 msgid "database_name" msgstr "nom_base_de_donnée" -#: sql_help.c:1050 sql_help.c:2658 +#: sql_help.c:1053 sql_help.c:2661 msgid "increment" msgstr "incrément" -#: sql_help.c:1051 sql_help.c:2659 +#: sql_help.c:1054 sql_help.c:2662 msgid "minvalue" msgstr "valeur_min" -#: sql_help.c:1052 sql_help.c:2660 +#: sql_help.c:1055 sql_help.c:2663 msgid "maxvalue" msgstr "valeur_max" -#: sql_help.c:1053 sql_help.c:2661 sql_help.c:4401 sql_help.c:4499 -#: sql_help.c:4650 sql_help.c:4815 sql_help.c:4882 +#: sql_help.c:1056 sql_help.c:2664 sql_help.c:4404 sql_help.c:4502 +#: sql_help.c:4653 sql_help.c:4818 sql_help.c:4885 msgid "start" msgstr "début" -#: sql_help.c:1054 sql_help.c:1315 +#: sql_help.c:1057 sql_help.c:1317 msgid "restart" msgstr "nouveau_début" -#: sql_help.c:1055 sql_help.c:2662 +#: sql_help.c:1058 sql_help.c:2665 msgid "cache" msgstr "cache" -#: sql_help.c:1099 +#: sql_help.c:1102 msgid "new_target" msgstr "nouvelle_cible" -#: sql_help.c:1117 sql_help.c:2715 +#: sql_help.c:1120 sql_help.c:2718 msgid "conninfo" msgstr "conninfo" -#: sql_help.c:1119 sql_help.c:1123 sql_help.c:1127 sql_help.c:2716 +#: sql_help.c:1122 sql_help.c:1126 sql_help.c:1130 sql_help.c:2719 msgid "publication_name" msgstr "nom_publication" -#: sql_help.c:1120 sql_help.c:1124 sql_help.c:1128 +#: sql_help.c:1123 sql_help.c:1127 sql_help.c:1131 msgid "set_publication_option" msgstr "option_ensemble_publication" -#: sql_help.c:1131 +#: sql_help.c:1134 msgid "refresh_option" msgstr "option_rafraichissement" -#: sql_help.c:1136 sql_help.c:2717 +#: sql_help.c:1139 sql_help.c:2720 msgid "subscription_parameter" msgstr "paramètre_souscription" -#: sql_help.c:1292 sql_help.c:1295 +#: sql_help.c:1294 sql_help.c:1297 msgid "partition_name" msgstr "nom_partition" -#: sql_help.c:1293 sql_help.c:2285 sql_help.c:2844 +#: sql_help.c:1295 sql_help.c:2288 sql_help.c:2847 msgid "partition_bound_spec" msgstr "spec_limite_partition" -#: sql_help.c:1312 sql_help.c:1361 sql_help.c:2858 +#: sql_help.c:1314 sql_help.c:1363 sql_help.c:2861 msgid "sequence_options" msgstr "options_séquence" -#: sql_help.c:1314 +#: sql_help.c:1316 msgid "sequence_option" msgstr "option_séquence" -#: sql_help.c:1326 sql_help.c:1364 sql_help.c:2812 -msgid "compression_method" -msgstr "méthode_compression" - -#: sql_help.c:1328 +#: sql_help.c:1330 msgid "table_constraint_using_index" msgstr "contrainte_table_utilisant_index" -#: sql_help.c:1336 sql_help.c:1337 sql_help.c:1338 sql_help.c:1339 +#: sql_help.c:1338 sql_help.c:1339 sql_help.c:1340 sql_help.c:1341 msgid "rewrite_rule_name" msgstr "nom_règle_réécriture" -#: sql_help.c:1350 sql_help.c:2883 +#: sql_help.c:1352 sql_help.c:2886 msgid "and partition_bound_spec is:" msgstr "et partition_bound_spec est :" -#: sql_help.c:1351 sql_help.c:1352 sql_help.c:1353 sql_help.c:2884 -#: sql_help.c:2885 sql_help.c:2886 +#: sql_help.c:1353 sql_help.c:1354 sql_help.c:1355 sql_help.c:2887 +#: sql_help.c:2888 sql_help.c:2889 msgid "partition_bound_expr" msgstr "expr_limite_partition" -#: sql_help.c:1354 sql_help.c:1355 sql_help.c:2887 sql_help.c:2888 +#: sql_help.c:1356 sql_help.c:1357 sql_help.c:2890 sql_help.c:2891 msgid "numeric_literal" msgstr "numeric_literal" -#: sql_help.c:1356 +#: sql_help.c:1358 msgid "and column_constraint is:" msgstr "et contrainte_colonne est :" -#: sql_help.c:1359 sql_help.c:2292 sql_help.c:2326 sql_help.c:2534 -#: sql_help.c:2856 +#: sql_help.c:1361 sql_help.c:2295 sql_help.c:2329 sql_help.c:2537 +#: sql_help.c:2859 msgid "default_expr" msgstr "expression_par_défaut" -#: sql_help.c:1360 sql_help.c:2293 sql_help.c:2857 +#: sql_help.c:1362 sql_help.c:2296 sql_help.c:2860 msgid "generation_expr" msgstr "expression_génération" -#: sql_help.c:1362 sql_help.c:1363 sql_help.c:1373 sql_help.c:1375 -#: sql_help.c:1379 sql_help.c:2859 sql_help.c:2860 sql_help.c:2869 -#: sql_help.c:2871 sql_help.c:2875 +#: sql_help.c:1364 sql_help.c:1365 sql_help.c:1374 sql_help.c:1376 +#: sql_help.c:1380 sql_help.c:2862 sql_help.c:2863 sql_help.c:2872 +#: sql_help.c:2874 sql_help.c:2878 msgid "index_parameters" msgstr "paramètres_index" -#: sql_help.c:1365 sql_help.c:1382 sql_help.c:2861 sql_help.c:2878 +#: sql_help.c:1366 sql_help.c:1383 sql_help.c:2864 sql_help.c:2881 msgid "reftable" msgstr "table_référence" -#: sql_help.c:1366 sql_help.c:1383 sql_help.c:2862 sql_help.c:2879 +#: sql_help.c:1367 sql_help.c:1384 sql_help.c:2865 sql_help.c:2882 msgid "refcolumn" msgstr "colonne_référence" -#: sql_help.c:1367 sql_help.c:1368 sql_help.c:1384 sql_help.c:1385 -#: sql_help.c:2863 sql_help.c:2864 sql_help.c:2880 sql_help.c:2881 +#: sql_help.c:1368 sql_help.c:1369 sql_help.c:1385 sql_help.c:1386 +#: sql_help.c:2866 sql_help.c:2867 sql_help.c:2883 sql_help.c:2884 msgid "referential_action" msgstr "action" -#: sql_help.c:1369 sql_help.c:2294 sql_help.c:2865 +#: sql_help.c:1370 sql_help.c:2297 sql_help.c:2868 msgid "and table_constraint is:" msgstr "et contrainte_table est :" -#: sql_help.c:1377 sql_help.c:2873 +#: sql_help.c:1378 sql_help.c:2876 msgid "exclude_element" msgstr "élément_exclusion" -#: sql_help.c:1378 sql_help.c:2874 sql_help.c:4399 sql_help.c:4497 -#: sql_help.c:4648 sql_help.c:4813 sql_help.c:4880 +#: sql_help.c:1379 sql_help.c:2877 sql_help.c:4402 sql_help.c:4500 +#: sql_help.c:4651 sql_help.c:4816 sql_help.c:4883 msgid "operator" msgstr "opérateur" -#: sql_help.c:1380 sql_help.c:2405 sql_help.c:2876 +#: sql_help.c:1381 sql_help.c:2408 sql_help.c:2879 msgid "predicate" msgstr "prédicat" -#: sql_help.c:1386 +#: sql_help.c:1387 msgid "and table_constraint_using_index is:" msgstr "et contrainte_table_utilisant_index est :" -#: sql_help.c:1389 sql_help.c:2889 +#: sql_help.c:1390 sql_help.c:2892 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "dans les contraintes UNIQUE, PRIMARY KEY et EXCLUDE, les paramètres_index sont :" -#: sql_help.c:1394 sql_help.c:2894 +#: sql_help.c:1395 sql_help.c:2897 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "élément_exclusion dans une contrainte EXCLUDE est :" -#: sql_help.c:1397 sql_help.c:2398 sql_help.c:2821 sql_help.c:2834 -#: sql_help.c:2848 sql_help.c:2897 sql_help.c:3902 +#: sql_help.c:1398 sql_help.c:2401 sql_help.c:2824 sql_help.c:2837 +#: sql_help.c:2851 sql_help.c:2900 sql_help.c:3905 msgid "opclass" msgstr "classe_d_opérateur" -#: sql_help.c:1413 sql_help.c:1416 sql_help.c:2932 +#: sql_help.c:1414 sql_help.c:1417 sql_help.c:2935 msgid "tablespace_option" msgstr "option_tablespace" -#: sql_help.c:1437 sql_help.c:1440 sql_help.c:1446 sql_help.c:1450 +#: sql_help.c:1438 sql_help.c:1441 sql_help.c:1447 sql_help.c:1451 msgid "token_type" msgstr "type_jeton" -#: sql_help.c:1438 sql_help.c:1441 +#: sql_help.c:1439 sql_help.c:1442 msgid "dictionary_name" msgstr "nom_dictionnaire" -#: sql_help.c:1443 sql_help.c:1447 +#: sql_help.c:1444 sql_help.c:1448 msgid "old_dictionary" msgstr "ancien_dictionnaire" -#: sql_help.c:1444 sql_help.c:1448 +#: sql_help.c:1445 sql_help.c:1449 msgid "new_dictionary" msgstr "nouveau_dictionnaire" -#: sql_help.c:1543 sql_help.c:1557 sql_help.c:1560 sql_help.c:1561 -#: sql_help.c:3085 +#: sql_help.c:1544 sql_help.c:1558 sql_help.c:1561 sql_help.c:1562 +#: sql_help.c:3088 msgid "attribute_name" msgstr "nom_attribut" -#: sql_help.c:1544 +#: sql_help.c:1545 msgid "new_attribute_name" msgstr "nouveau_nom_attribut" -#: sql_help.c:1548 sql_help.c:1552 +#: sql_help.c:1549 sql_help.c:1553 msgid "new_enum_value" msgstr "nouvelle_valeur_enum" -#: sql_help.c:1549 +#: sql_help.c:1550 msgid "neighbor_enum_value" msgstr "valeur_enum_voisine" -#: sql_help.c:1551 +#: sql_help.c:1552 msgid "existing_enum_value" msgstr "valeur_enum_existante" -#: sql_help.c:1554 +#: sql_help.c:1555 msgid "property" msgstr "propriété" -#: sql_help.c:1630 sql_help.c:2277 sql_help.c:2286 sql_help.c:2674 -#: sql_help.c:3165 sql_help.c:3616 sql_help.c:3815 sql_help.c:3858 -#: sql_help.c:4195 +#: sql_help.c:1631 sql_help.c:2280 sql_help.c:2289 sql_help.c:2677 +#: sql_help.c:3168 sql_help.c:3619 sql_help.c:3818 sql_help.c:3861 +#: sql_help.c:4198 msgid "server_name" msgstr "nom_serveur" -#: sql_help.c:1662 sql_help.c:1665 sql_help.c:3180 +#: sql_help.c:1663 sql_help.c:1666 sql_help.c:3183 msgid "view_option_name" msgstr "nom_option_vue" -#: sql_help.c:1663 sql_help.c:3181 +#: sql_help.c:1664 sql_help.c:3184 msgid "view_option_value" msgstr "valeur_option_vue" -#: sql_help.c:1684 sql_help.c:1685 sql_help.c:4784 sql_help.c:4785 +#: sql_help.c:1685 sql_help.c:1686 sql_help.c:4787 sql_help.c:4788 msgid "table_and_columns" msgstr "table_et_colonnes" -#: sql_help.c:1686 sql_help.c:1749 sql_help.c:1940 sql_help.c:3664 -#: sql_help.c:4037 sql_help.c:4786 +#: sql_help.c:1687 sql_help.c:1750 sql_help.c:1941 sql_help.c:3667 +#: sql_help.c:4040 sql_help.c:4789 msgid "where option can be one of:" msgstr "où option fait partie de :" -#: sql_help.c:1687 sql_help.c:1688 sql_help.c:1750 sql_help.c:1942 -#: sql_help.c:1945 sql_help.c:2123 sql_help.c:3665 sql_help.c:3666 -#: sql_help.c:3667 sql_help.c:3668 sql_help.c:3669 sql_help.c:3670 -#: sql_help.c:3671 sql_help.c:3672 sql_help.c:4038 sql_help.c:4040 -#: sql_help.c:4787 sql_help.c:4788 sql_help.c:4789 sql_help.c:4790 -#: sql_help.c:4791 sql_help.c:4792 sql_help.c:4793 sql_help.c:4794 -#: sql_help.c:4795 +#: sql_help.c:1688 sql_help.c:1689 sql_help.c:1751 sql_help.c:1943 +#: sql_help.c:1946 sql_help.c:2125 sql_help.c:3668 sql_help.c:3669 +#: sql_help.c:3670 sql_help.c:3671 sql_help.c:3672 sql_help.c:3673 +#: sql_help.c:3674 sql_help.c:3675 sql_help.c:4041 sql_help.c:4043 +#: sql_help.c:4790 sql_help.c:4791 sql_help.c:4792 sql_help.c:4793 +#: sql_help.c:4794 sql_help.c:4795 sql_help.c:4796 sql_help.c:4797 +#: sql_help.c:4798 msgid "boolean" msgstr "boolean" -#: sql_help.c:1689 sql_help.c:4797 +#: sql_help.c:1690 sql_help.c:4800 msgid "and table_and_columns is:" msgstr "et table_et_colonnes est :" -#: sql_help.c:1705 sql_help.c:4557 sql_help.c:4559 sql_help.c:4583 +#: sql_help.c:1706 sql_help.c:4560 sql_help.c:4562 sql_help.c:4586 msgid "transaction_mode" msgstr "mode_transaction" -#: sql_help.c:1706 sql_help.c:4560 sql_help.c:4584 +#: sql_help.c:1707 sql_help.c:4563 sql_help.c:4587 msgid "where transaction_mode is one of:" msgstr "où mode_transaction fait partie de :" -#: sql_help.c:1715 sql_help.c:4409 sql_help.c:4418 sql_help.c:4422 -#: sql_help.c:4426 sql_help.c:4429 sql_help.c:4658 sql_help.c:4667 -#: sql_help.c:4671 sql_help.c:4675 sql_help.c:4678 sql_help.c:4890 -#: sql_help.c:4899 sql_help.c:4903 sql_help.c:4907 sql_help.c:4910 +#: sql_help.c:1716 sql_help.c:4412 sql_help.c:4421 sql_help.c:4425 +#: sql_help.c:4429 sql_help.c:4432 sql_help.c:4661 sql_help.c:4670 +#: sql_help.c:4674 sql_help.c:4678 sql_help.c:4681 sql_help.c:4893 +#: sql_help.c:4902 sql_help.c:4906 sql_help.c:4910 sql_help.c:4913 msgid "argument" msgstr "argument" -#: sql_help.c:1815 +#: sql_help.c:1816 msgid "relation_name" msgstr "nom_relation" -#: sql_help.c:1820 sql_help.c:3809 sql_help.c:4189 +#: sql_help.c:1821 sql_help.c:3812 sql_help.c:4192 msgid "domain_name" msgstr "nom_domaine" -#: sql_help.c:1842 +#: sql_help.c:1843 msgid "policy_name" msgstr "nom_politique" -#: sql_help.c:1855 +#: sql_help.c:1856 msgid "rule_name" msgstr "nom_règle" -#: sql_help.c:1874 +#: sql_help.c:1875 msgid "text" msgstr "texte" -#: sql_help.c:1899 sql_help.c:4002 sql_help.c:4239 +#: sql_help.c:1900 sql_help.c:4005 sql_help.c:4242 msgid "transaction_id" msgstr "id_transaction" -#: sql_help.c:1930 sql_help.c:1937 sql_help.c:3928 +#: sql_help.c:1931 sql_help.c:1938 sql_help.c:3931 msgid "filename" msgstr "nom_fichier" -#: sql_help.c:1931 sql_help.c:1938 sql_help.c:2613 sql_help.c:2614 -#: sql_help.c:2615 +#: sql_help.c:1932 sql_help.c:1939 sql_help.c:2616 sql_help.c:2617 +#: sql_help.c:2618 msgid "command" msgstr "commande" -#: sql_help.c:1933 sql_help.c:2612 sql_help.c:3035 sql_help.c:3216 -#: sql_help.c:3912 sql_help.c:4392 sql_help.c:4394 sql_help.c:4490 -#: sql_help.c:4492 sql_help.c:4641 sql_help.c:4643 sql_help.c:4754 -#: sql_help.c:4873 sql_help.c:4875 +#: sql_help.c:1934 sql_help.c:2615 sql_help.c:3038 sql_help.c:3219 +#: sql_help.c:3915 sql_help.c:4395 sql_help.c:4397 sql_help.c:4493 +#: sql_help.c:4495 sql_help.c:4644 sql_help.c:4646 sql_help.c:4757 +#: sql_help.c:4876 sql_help.c:4878 msgid "condition" msgstr "condition" -#: sql_help.c:1936 sql_help.c:2439 sql_help.c:2918 sql_help.c:3182 -#: sql_help.c:3200 sql_help.c:3893 +#: sql_help.c:1937 sql_help.c:2442 sql_help.c:2921 sql_help.c:3185 +#: sql_help.c:3203 sql_help.c:3896 msgid "query" msgstr "requête" -#: sql_help.c:1941 +#: sql_help.c:1942 msgid "format_name" msgstr "nom_format" -#: sql_help.c:1943 +#: sql_help.c:1944 msgid "delimiter_character" msgstr "caractère_délimiteur" -#: sql_help.c:1944 +#: sql_help.c:1945 msgid "null_string" msgstr "chaîne_null" -#: sql_help.c:1946 +#: sql_help.c:1947 msgid "quote_character" msgstr "caractère_guillemet" -#: sql_help.c:1947 +#: sql_help.c:1948 msgid "escape_character" msgstr "chaîne_d_échappement" -#: sql_help.c:1951 +#: sql_help.c:1952 msgid "encoding_name" msgstr "nom_encodage" -#: sql_help.c:1962 +#: sql_help.c:1963 msgid "access_method_type" msgstr "access_method_type" -#: sql_help.c:2033 sql_help.c:2052 sql_help.c:2055 +#: sql_help.c:2034 sql_help.c:2053 sql_help.c:2056 msgid "arg_data_type" msgstr "type_données_arg" -#: sql_help.c:2034 sql_help.c:2056 sql_help.c:2064 +#: sql_help.c:2035 sql_help.c:2057 sql_help.c:2065 msgid "sfunc" msgstr "sfunc" -#: sql_help.c:2035 sql_help.c:2057 sql_help.c:2065 +#: sql_help.c:2036 sql_help.c:2058 sql_help.c:2066 msgid "state_data_type" msgstr "type_de_données_statut" -#: sql_help.c:2036 sql_help.c:2058 sql_help.c:2066 +#: sql_help.c:2037 sql_help.c:2059 sql_help.c:2067 msgid "state_data_size" msgstr "taille_de_données_statut" -#: sql_help.c:2037 sql_help.c:2059 sql_help.c:2067 +#: sql_help.c:2038 sql_help.c:2060 sql_help.c:2068 msgid "ffunc" msgstr "ffunc" -#: sql_help.c:2038 sql_help.c:2068 +#: sql_help.c:2039 sql_help.c:2069 msgid "combinefunc" msgstr "combinefunc" -#: sql_help.c:2039 sql_help.c:2069 +#: sql_help.c:2040 sql_help.c:2070 msgid "serialfunc" msgstr "serialfunc" -#: sql_help.c:2040 sql_help.c:2070 +#: sql_help.c:2041 sql_help.c:2071 msgid "deserialfunc" msgstr "deserialfunc" -#: sql_help.c:2041 sql_help.c:2060 sql_help.c:2071 +#: sql_help.c:2042 sql_help.c:2061 sql_help.c:2072 msgid "initial_condition" msgstr "condition_initiale" -#: sql_help.c:2042 sql_help.c:2072 +#: sql_help.c:2043 sql_help.c:2073 msgid "msfunc" msgstr "msfunc" -#: sql_help.c:2043 sql_help.c:2073 +#: sql_help.c:2044 sql_help.c:2074 msgid "minvfunc" msgstr "minvfunc" -#: sql_help.c:2044 sql_help.c:2074 +#: sql_help.c:2045 sql_help.c:2075 msgid "mstate_data_type" msgstr "m_type_de_données_statut" -#: sql_help.c:2045 sql_help.c:2075 +#: sql_help.c:2046 sql_help.c:2076 msgid "mstate_data_size" msgstr "m_taille_de_données_statut" -#: sql_help.c:2046 sql_help.c:2076 +#: sql_help.c:2047 sql_help.c:2077 msgid "mffunc" msgstr "mffunc" -#: sql_help.c:2047 sql_help.c:2077 +#: sql_help.c:2048 sql_help.c:2078 msgid "minitial_condition" msgstr "m_condition_initiale" -#: sql_help.c:2048 sql_help.c:2078 +#: sql_help.c:2049 sql_help.c:2079 msgid "sort_operator" msgstr "opérateur_de_tri" -#: sql_help.c:2061 +#: sql_help.c:2062 msgid "or the old syntax" msgstr "ou l'ancienne syntaxe" -#: sql_help.c:2063 +#: sql_help.c:2064 msgid "base_type" msgstr "type_base" -#: sql_help.c:2119 sql_help.c:2159 +#: sql_help.c:2121 sql_help.c:2162 msgid "locale" msgstr "locale" -#: sql_help.c:2120 sql_help.c:2160 +#: sql_help.c:2122 sql_help.c:2163 msgid "lc_collate" msgstr "lc_collate" -#: sql_help.c:2121 sql_help.c:2161 +#: sql_help.c:2123 sql_help.c:2164 msgid "lc_ctype" msgstr "lc_ctype" -#: sql_help.c:2122 sql_help.c:4292 +#: sql_help.c:2124 sql_help.c:4295 msgid "provider" msgstr "fournisseur" -#: sql_help.c:2125 +#: sql_help.c:2126 sql_help.c:2218 +msgid "version" +msgstr "version" + +#: sql_help.c:2128 msgid "existing_collation" msgstr "collationnement_existant" -#: sql_help.c:2135 +#: sql_help.c:2138 msgid "source_encoding" msgstr "encodage_source" -#: sql_help.c:2136 +#: sql_help.c:2139 msgid "dest_encoding" msgstr "encodage_destination" -#: sql_help.c:2157 sql_help.c:2958 +#: sql_help.c:2160 sql_help.c:2961 msgid "template" msgstr "modèle" -#: sql_help.c:2158 +#: sql_help.c:2161 msgid "encoding" msgstr "encodage" -#: sql_help.c:2185 +#: sql_help.c:2188 msgid "constraint" msgstr "contrainte" -#: sql_help.c:2186 +#: sql_help.c:2189 msgid "where constraint is:" msgstr "où la contrainte est :" -#: sql_help.c:2200 sql_help.c:2610 sql_help.c:3031 +#: sql_help.c:2203 sql_help.c:2613 sql_help.c:3034 msgid "event" msgstr "événement" -#: sql_help.c:2201 +#: sql_help.c:2204 msgid "filter_variable" msgstr "filter_variable" -#: sql_help.c:2215 -msgid "version" -msgstr "version" - -#: sql_help.c:2289 sql_help.c:2853 +#: sql_help.c:2292 sql_help.c:2856 msgid "where column_constraint is:" msgstr "où contrainte_colonne est :" -#: sql_help.c:2327 +#: sql_help.c:2330 msgid "rettype" msgstr "type_en_retour" -#: sql_help.c:2329 +#: sql_help.c:2332 msgid "column_type" msgstr "type_colonne" -#: sql_help.c:2338 sql_help.c:2540 +#: sql_help.c:2341 sql_help.c:2543 msgid "definition" msgstr "définition" -#: sql_help.c:2339 sql_help.c:2541 +#: sql_help.c:2342 sql_help.c:2544 msgid "obj_file" msgstr "fichier_objet" -#: sql_help.c:2340 sql_help.c:2542 +#: sql_help.c:2343 sql_help.c:2545 msgid "link_symbol" msgstr "symbole_link" -#: sql_help.c:2341 sql_help.c:2543 +#: sql_help.c:2344 sql_help.c:2546 msgid "sql_body" msgstr "corps_sql" -#: sql_help.c:2379 sql_help.c:2595 sql_help.c:3154 +#: sql_help.c:2382 sql_help.c:2598 sql_help.c:3157 msgid "uid" msgstr "uid" -#: sql_help.c:2394 sql_help.c:2435 sql_help.c:2822 sql_help.c:2835 -#: sql_help.c:2849 sql_help.c:2914 +#: sql_help.c:2397 sql_help.c:2438 sql_help.c:2825 sql_help.c:2838 +#: sql_help.c:2852 sql_help.c:2917 msgid "method" msgstr "méthode" -#: sql_help.c:2399 +#: sql_help.c:2402 msgid "opclass_parameter" msgstr "paramètre_opclass" -#: sql_help.c:2416 +#: sql_help.c:2419 msgid "call_handler" msgstr "gestionnaire_d_appel" -#: sql_help.c:2417 +#: sql_help.c:2420 msgid "inline_handler" msgstr "gestionnaire_en_ligne" -#: sql_help.c:2418 +#: sql_help.c:2421 msgid "valfunction" msgstr "fonction_val" -#: sql_help.c:2457 +#: sql_help.c:2460 msgid "com_op" msgstr "com_op" -#: sql_help.c:2458 +#: sql_help.c:2461 msgid "neg_op" msgstr "neg_op" -#: sql_help.c:2476 +#: sql_help.c:2479 msgid "family_name" msgstr "nom_famille" -#: sql_help.c:2487 +#: sql_help.c:2490 msgid "storage_type" msgstr "type_stockage" -#: sql_help.c:2616 sql_help.c:3038 +#: sql_help.c:2619 sql_help.c:3041 msgid "where event can be one of:" msgstr "où événement fait partie de :" -#: sql_help.c:2636 sql_help.c:2638 +#: sql_help.c:2639 sql_help.c:2641 msgid "schema_element" msgstr "élément_schéma" -#: sql_help.c:2675 +#: sql_help.c:2678 msgid "server_type" msgstr "type_serveur" -#: sql_help.c:2676 +#: sql_help.c:2679 msgid "server_version" msgstr "version_serveur" -#: sql_help.c:2677 sql_help.c:3812 sql_help.c:4192 +#: sql_help.c:2680 sql_help.c:3815 sql_help.c:4195 msgid "fdw_name" msgstr "nom_fdw" -#: sql_help.c:2694 sql_help.c:2697 +#: sql_help.c:2697 sql_help.c:2700 msgid "statistics_name" msgstr "nom_statistique" -#: sql_help.c:2698 +#: sql_help.c:2701 msgid "statistics_kind" msgstr "statistics_kind" -#: sql_help.c:2714 +#: sql_help.c:2717 msgid "subscription_name" msgstr "nom_souscription" -#: sql_help.c:2815 +#: sql_help.c:2818 msgid "source_table" msgstr "table_source" -#: sql_help.c:2816 +#: sql_help.c:2819 msgid "like_option" msgstr "option_like" -#: sql_help.c:2882 +#: sql_help.c:2885 msgid "and like_option is:" msgstr "et option_like est :" -#: sql_help.c:2931 +#: sql_help.c:2934 msgid "directory" msgstr "répertoire" -#: sql_help.c:2945 +#: sql_help.c:2948 msgid "parser_name" msgstr "nom_analyseur" -#: sql_help.c:2946 +#: sql_help.c:2949 msgid "source_config" msgstr "configuration_source" -#: sql_help.c:2975 +#: sql_help.c:2978 msgid "start_function" msgstr "fonction_start" -#: sql_help.c:2976 +#: sql_help.c:2979 msgid "gettoken_function" msgstr "fonction_gettoken" -#: sql_help.c:2977 +#: sql_help.c:2980 msgid "end_function" msgstr "fonction_end" -#: sql_help.c:2978 +#: sql_help.c:2981 msgid "lextypes_function" msgstr "fonction_lextypes" -#: sql_help.c:2979 +#: sql_help.c:2982 msgid "headline_function" msgstr "fonction_headline" -#: sql_help.c:2991 +#: sql_help.c:2994 msgid "init_function" msgstr "fonction_init" -#: sql_help.c:2992 +#: sql_help.c:2995 msgid "lexize_function" msgstr "fonction_lexize" -#: sql_help.c:3005 +#: sql_help.c:3008 msgid "from_sql_function_name" msgstr "nom_fonction_from_sql" -#: sql_help.c:3007 +#: sql_help.c:3010 msgid "to_sql_function_name" msgstr "nom_fonction_to_sql" -#: sql_help.c:3033 +#: sql_help.c:3036 msgid "referenced_table_name" msgstr "nom_table_référencée" -#: sql_help.c:3034 +#: sql_help.c:3037 msgid "transition_relation_name" msgstr "nom_relation_transition" -#: sql_help.c:3037 +#: sql_help.c:3040 msgid "arguments" msgstr "arguments" -#: sql_help.c:3089 sql_help.c:4325 +#: sql_help.c:3092 sql_help.c:4328 msgid "label" msgstr "label" -#: sql_help.c:3091 +#: sql_help.c:3094 msgid "subtype" msgstr "sous_type" -#: sql_help.c:3092 +#: sql_help.c:3095 msgid "subtype_operator_class" msgstr "classe_opérateur_sous_type" -#: sql_help.c:3094 +#: sql_help.c:3097 msgid "canonical_function" msgstr "fonction_canonique" -#: sql_help.c:3095 +#: sql_help.c:3098 msgid "subtype_diff_function" msgstr "fonction_diff_sous_type" -#: sql_help.c:3096 +#: sql_help.c:3099 msgid "multirange_type_name" msgstr "nom_type_multirange" -#: sql_help.c:3098 +#: sql_help.c:3101 msgid "input_function" msgstr "fonction_en_sortie" -#: sql_help.c:3099 +#: sql_help.c:3102 msgid "output_function" msgstr "fonction_en_sortie" -#: sql_help.c:3100 +#: sql_help.c:3103 msgid "receive_function" msgstr "fonction_receive" -#: sql_help.c:3101 +#: sql_help.c:3104 msgid "send_function" msgstr "fonction_send" -#: sql_help.c:3102 +#: sql_help.c:3105 msgid "type_modifier_input_function" msgstr "fonction_en_entrée_modificateur_type" -#: sql_help.c:3103 +#: sql_help.c:3106 msgid "type_modifier_output_function" msgstr "fonction_en_sortie_modificateur_type" -#: sql_help.c:3104 +#: sql_help.c:3107 msgid "analyze_function" msgstr "fonction_analyze" -#: sql_help.c:3105 +#: sql_help.c:3108 msgid "subscript_function" msgstr "fonction_indice" -#: sql_help.c:3106 +#: sql_help.c:3109 msgid "internallength" msgstr "longueur_interne" -#: sql_help.c:3107 +#: sql_help.c:3110 msgid "alignment" msgstr "alignement" -#: sql_help.c:3108 +#: sql_help.c:3111 msgid "storage" msgstr "stockage" -#: sql_help.c:3109 +#: sql_help.c:3112 msgid "like_type" msgstr "type_like" -#: sql_help.c:3110 +#: sql_help.c:3113 msgid "category" msgstr "catégorie" -#: sql_help.c:3111 +#: sql_help.c:3114 msgid "preferred" msgstr "préféré" -#: sql_help.c:3112 +#: sql_help.c:3115 msgid "default" msgstr "par défaut" -#: sql_help.c:3113 +#: sql_help.c:3116 msgid "element" msgstr "élément" -#: sql_help.c:3114 +#: sql_help.c:3117 msgid "delimiter" msgstr "délimiteur" -#: sql_help.c:3115 +#: sql_help.c:3118 msgid "collatable" msgstr "collationnable" -#: sql_help.c:3212 sql_help.c:3888 sql_help.c:4387 sql_help.c:4484 -#: sql_help.c:4636 sql_help.c:4744 sql_help.c:4868 +#: sql_help.c:3215 sql_help.c:3891 sql_help.c:4390 sql_help.c:4487 +#: sql_help.c:4639 sql_help.c:4747 sql_help.c:4871 msgid "with_query" msgstr "requête_with" -#: sql_help.c:3214 sql_help.c:3890 sql_help.c:4406 sql_help.c:4412 -#: sql_help.c:4415 sql_help.c:4419 sql_help.c:4423 sql_help.c:4431 -#: sql_help.c:4655 sql_help.c:4661 sql_help.c:4664 sql_help.c:4668 -#: sql_help.c:4672 sql_help.c:4680 sql_help.c:4746 sql_help.c:4887 -#: sql_help.c:4893 sql_help.c:4896 sql_help.c:4900 sql_help.c:4904 -#: sql_help.c:4912 +#: sql_help.c:3217 sql_help.c:3893 sql_help.c:4409 sql_help.c:4415 +#: sql_help.c:4418 sql_help.c:4422 sql_help.c:4426 sql_help.c:4434 +#: sql_help.c:4658 sql_help.c:4664 sql_help.c:4667 sql_help.c:4671 +#: sql_help.c:4675 sql_help.c:4683 sql_help.c:4749 sql_help.c:4890 +#: sql_help.c:4896 sql_help.c:4899 sql_help.c:4903 sql_help.c:4907 +#: sql_help.c:4915 msgid "alias" msgstr "alias" -#: sql_help.c:3215 sql_help.c:4391 sql_help.c:4433 sql_help.c:4435 -#: sql_help.c:4489 sql_help.c:4640 sql_help.c:4682 sql_help.c:4684 -#: sql_help.c:4753 sql_help.c:4872 sql_help.c:4914 sql_help.c:4916 +#: sql_help.c:3218 sql_help.c:4394 sql_help.c:4436 sql_help.c:4438 +#: sql_help.c:4492 sql_help.c:4643 sql_help.c:4685 sql_help.c:4687 +#: sql_help.c:4756 sql_help.c:4875 sql_help.c:4917 sql_help.c:4919 msgid "from_item" msgstr "élément_from" -#: sql_help.c:3217 sql_help.c:3698 sql_help.c:3969 sql_help.c:4755 +#: sql_help.c:3220 sql_help.c:3701 sql_help.c:3972 sql_help.c:4758 msgid "cursor_name" msgstr "nom_curseur" -#: sql_help.c:3218 sql_help.c:3896 sql_help.c:4756 +#: sql_help.c:3221 sql_help.c:3899 sql_help.c:4759 msgid "output_expression" msgstr "expression_en_sortie" -#: sql_help.c:3219 sql_help.c:3897 sql_help.c:4390 sql_help.c:4487 -#: sql_help.c:4639 sql_help.c:4757 sql_help.c:4871 +#: sql_help.c:3222 sql_help.c:3900 sql_help.c:4393 sql_help.c:4490 +#: sql_help.c:4642 sql_help.c:4760 sql_help.c:4874 msgid "output_name" msgstr "nom_en_sortie" -#: sql_help.c:3235 +#: sql_help.c:3238 msgid "code" msgstr "code" -#: sql_help.c:3640 +#: sql_help.c:3643 msgid "parameter" msgstr "paramètre" -#: sql_help.c:3662 sql_help.c:3663 sql_help.c:3994 +#: sql_help.c:3665 sql_help.c:3666 sql_help.c:3997 msgid "statement" msgstr "instruction" -#: sql_help.c:3697 sql_help.c:3968 +#: sql_help.c:3700 sql_help.c:3971 msgid "direction" msgstr "direction" -#: sql_help.c:3699 sql_help.c:3970 +#: sql_help.c:3702 sql_help.c:3973 msgid "where direction can be empty or one of:" msgstr "où direction peut être vide ou faire partie de :" -#: sql_help.c:3700 sql_help.c:3701 sql_help.c:3702 sql_help.c:3703 -#: sql_help.c:3704 sql_help.c:3971 sql_help.c:3972 sql_help.c:3973 -#: sql_help.c:3974 sql_help.c:3975 sql_help.c:4400 sql_help.c:4402 -#: sql_help.c:4498 sql_help.c:4500 sql_help.c:4649 sql_help.c:4651 -#: sql_help.c:4814 sql_help.c:4816 sql_help.c:4881 sql_help.c:4883 +#: sql_help.c:3703 sql_help.c:3704 sql_help.c:3705 sql_help.c:3706 +#: sql_help.c:3707 sql_help.c:3974 sql_help.c:3975 sql_help.c:3976 +#: sql_help.c:3977 sql_help.c:3978 sql_help.c:4403 sql_help.c:4405 +#: sql_help.c:4501 sql_help.c:4503 sql_help.c:4652 sql_help.c:4654 +#: sql_help.c:4817 sql_help.c:4819 sql_help.c:4884 sql_help.c:4886 msgid "count" msgstr "nombre" -#: sql_help.c:3802 sql_help.c:4182 +#: sql_help.c:3805 sql_help.c:4185 msgid "sequence_name" msgstr "nom_séquence" -#: sql_help.c:3820 sql_help.c:4200 +#: sql_help.c:3823 sql_help.c:4203 msgid "arg_name" msgstr "nom_argument" -#: sql_help.c:3821 sql_help.c:4201 +#: sql_help.c:3824 sql_help.c:4204 msgid "arg_type" msgstr "type_arg" -#: sql_help.c:3828 sql_help.c:4208 +#: sql_help.c:3831 sql_help.c:4211 msgid "loid" msgstr "loid" -#: sql_help.c:3856 +#: sql_help.c:3859 msgid "remote_schema" msgstr "schema_distant" -#: sql_help.c:3859 +#: sql_help.c:3862 msgid "local_schema" msgstr "schéma_local" -#: sql_help.c:3894 +#: sql_help.c:3897 msgid "conflict_target" msgstr "cible_conflit" -#: sql_help.c:3895 +#: sql_help.c:3898 msgid "conflict_action" msgstr "action_conflit" -#: sql_help.c:3898 +#: sql_help.c:3901 msgid "where conflict_target can be one of:" msgstr "où cible_conflit fait partie de :" -#: sql_help.c:3899 +#: sql_help.c:3902 msgid "index_column_name" msgstr "index_nom_colonne" -#: sql_help.c:3900 +#: sql_help.c:3903 msgid "index_expression" msgstr "index_expression" -#: sql_help.c:3903 +#: sql_help.c:3906 msgid "index_predicate" msgstr "index_prédicat" -#: sql_help.c:3905 +#: sql_help.c:3908 msgid "and conflict_action is one of:" msgstr "où action_conflit fait partie de :" -#: sql_help.c:3911 sql_help.c:4752 +#: sql_help.c:3914 sql_help.c:4755 msgid "sub-SELECT" msgstr "sous-SELECT" -#: sql_help.c:3920 sql_help.c:3983 sql_help.c:4728 +#: sql_help.c:3923 sql_help.c:3986 sql_help.c:4731 msgid "channel" msgstr "canal" -#: sql_help.c:3942 +#: sql_help.c:3945 msgid "lockmode" msgstr "mode_de_verrou" -#: sql_help.c:3943 +#: sql_help.c:3946 msgid "where lockmode is one of:" msgstr "où mode_de_verrou fait partie de :" -#: sql_help.c:3984 +#: sql_help.c:3987 msgid "payload" msgstr "contenu" -#: sql_help.c:4011 +#: sql_help.c:4014 msgid "old_role" msgstr "ancien_rôle" -#: sql_help.c:4012 +#: sql_help.c:4015 msgid "new_role" msgstr "nouveau_rôle" -#: sql_help.c:4048 sql_help.c:4247 sql_help.c:4255 +#: sql_help.c:4051 sql_help.c:4250 sql_help.c:4258 msgid "savepoint_name" msgstr "nom_savepoint" -#: sql_help.c:4393 sql_help.c:4446 sql_help.c:4642 sql_help.c:4695 -#: sql_help.c:4874 sql_help.c:4927 +#: sql_help.c:4396 sql_help.c:4449 sql_help.c:4645 sql_help.c:4698 +#: sql_help.c:4877 sql_help.c:4930 msgid "grouping_element" msgstr "element_regroupement" -#: sql_help.c:4395 sql_help.c:4493 sql_help.c:4644 sql_help.c:4876 +#: sql_help.c:4398 sql_help.c:4496 sql_help.c:4647 sql_help.c:4879 msgid "window_name" msgstr "nom_window" -#: sql_help.c:4396 sql_help.c:4494 sql_help.c:4645 sql_help.c:4877 +#: sql_help.c:4399 sql_help.c:4497 sql_help.c:4648 sql_help.c:4880 msgid "window_definition" msgstr "définition_window" -#: sql_help.c:4397 sql_help.c:4411 sql_help.c:4450 sql_help.c:4495 -#: sql_help.c:4646 sql_help.c:4660 sql_help.c:4699 sql_help.c:4878 -#: sql_help.c:4892 sql_help.c:4931 +#: sql_help.c:4400 sql_help.c:4414 sql_help.c:4453 sql_help.c:4498 +#: sql_help.c:4649 sql_help.c:4663 sql_help.c:4702 sql_help.c:4881 +#: sql_help.c:4895 sql_help.c:4934 msgid "select" msgstr "sélection" -#: sql_help.c:4404 sql_help.c:4653 sql_help.c:4885 +#: sql_help.c:4407 sql_help.c:4656 sql_help.c:4888 msgid "where from_item can be one of:" msgstr "où élément_from fait partie de :" -#: sql_help.c:4407 sql_help.c:4413 sql_help.c:4416 sql_help.c:4420 -#: sql_help.c:4432 sql_help.c:4656 sql_help.c:4662 sql_help.c:4665 -#: sql_help.c:4669 sql_help.c:4681 sql_help.c:4888 sql_help.c:4894 -#: sql_help.c:4897 sql_help.c:4901 sql_help.c:4913 +#: sql_help.c:4410 sql_help.c:4416 sql_help.c:4419 sql_help.c:4423 +#: sql_help.c:4435 sql_help.c:4659 sql_help.c:4665 sql_help.c:4668 +#: sql_help.c:4672 sql_help.c:4684 sql_help.c:4891 sql_help.c:4897 +#: sql_help.c:4900 sql_help.c:4904 sql_help.c:4916 msgid "column_alias" msgstr "alias_colonne" -#: sql_help.c:4408 sql_help.c:4657 sql_help.c:4889 +#: sql_help.c:4411 sql_help.c:4660 sql_help.c:4892 msgid "sampling_method" msgstr "méthode_echantillonnage" -#: sql_help.c:4410 sql_help.c:4659 sql_help.c:4891 +#: sql_help.c:4413 sql_help.c:4662 sql_help.c:4894 msgid "seed" msgstr "graine" -#: sql_help.c:4414 sql_help.c:4448 sql_help.c:4663 sql_help.c:4697 -#: sql_help.c:4895 sql_help.c:4929 +#: sql_help.c:4417 sql_help.c:4451 sql_help.c:4666 sql_help.c:4700 +#: sql_help.c:4898 sql_help.c:4932 msgid "with_query_name" msgstr "nom_requête_with" -#: sql_help.c:4424 sql_help.c:4427 sql_help.c:4430 sql_help.c:4673 -#: sql_help.c:4676 sql_help.c:4679 sql_help.c:4905 sql_help.c:4908 -#: sql_help.c:4911 +#: sql_help.c:4427 sql_help.c:4430 sql_help.c:4433 sql_help.c:4676 +#: sql_help.c:4679 sql_help.c:4682 sql_help.c:4908 sql_help.c:4911 +#: sql_help.c:4914 msgid "column_definition" msgstr "définition_colonne" -#: sql_help.c:4434 sql_help.c:4683 sql_help.c:4915 +#: sql_help.c:4437 sql_help.c:4686 sql_help.c:4918 msgid "join_type" msgstr "type_de_jointure" -#: sql_help.c:4436 sql_help.c:4685 sql_help.c:4917 +#: sql_help.c:4439 sql_help.c:4688 sql_help.c:4920 msgid "join_condition" msgstr "condition_de_jointure" -#: sql_help.c:4437 sql_help.c:4686 sql_help.c:4918 +#: sql_help.c:4440 sql_help.c:4689 sql_help.c:4921 msgid "join_column" msgstr "colonne_de_jointure" -#: sql_help.c:4438 sql_help.c:4687 sql_help.c:4919 +#: sql_help.c:4441 sql_help.c:4690 sql_help.c:4922 msgid "join_using_alias" msgstr "join_utilisant_alias" -#: sql_help.c:4439 sql_help.c:4688 sql_help.c:4920 +#: sql_help.c:4442 sql_help.c:4691 sql_help.c:4923 msgid "and grouping_element can be one of:" msgstr "où element_regroupement fait partie de :" -#: sql_help.c:4447 sql_help.c:4696 sql_help.c:4928 +#: sql_help.c:4450 sql_help.c:4699 sql_help.c:4931 msgid "and with_query is:" msgstr "et requête_with est :" -#: sql_help.c:4451 sql_help.c:4700 sql_help.c:4932 +#: sql_help.c:4454 sql_help.c:4703 sql_help.c:4935 msgid "values" msgstr "valeurs" -#: sql_help.c:4452 sql_help.c:4701 sql_help.c:4933 +#: sql_help.c:4455 sql_help.c:4704 sql_help.c:4936 msgid "insert" msgstr "insert" -#: sql_help.c:4453 sql_help.c:4702 sql_help.c:4934 +#: sql_help.c:4456 sql_help.c:4705 sql_help.c:4937 msgid "update" msgstr "update" -#: sql_help.c:4454 sql_help.c:4703 sql_help.c:4935 +#: sql_help.c:4457 sql_help.c:4706 sql_help.c:4938 msgid "delete" msgstr "delete" -#: sql_help.c:4456 sql_help.c:4705 sql_help.c:4937 +#: sql_help.c:4459 sql_help.c:4708 sql_help.c:4940 msgid "search_seq_col_name" msgstr "nom_colonne_seq_recherche" -#: sql_help.c:4458 sql_help.c:4707 sql_help.c:4939 +#: sql_help.c:4461 sql_help.c:4710 sql_help.c:4942 msgid "cycle_mark_col_name" msgstr "nom_colonne_marque_cycle" -#: sql_help.c:4459 sql_help.c:4708 sql_help.c:4940 +#: sql_help.c:4462 sql_help.c:4711 sql_help.c:4943 msgid "cycle_mark_value" msgstr "valeur_marque_cycle" -#: sql_help.c:4460 sql_help.c:4709 sql_help.c:4941 +#: sql_help.c:4463 sql_help.c:4712 sql_help.c:4944 msgid "cycle_mark_default" msgstr "défaut_marque_cyle" -#: sql_help.c:4461 sql_help.c:4710 sql_help.c:4942 +#: sql_help.c:4464 sql_help.c:4713 sql_help.c:4945 msgid "cycle_path_col_name" msgstr "nom_colonne_chemin_cycle" -#: sql_help.c:4488 +#: sql_help.c:4491 msgid "new_table" msgstr "nouvelle_table" -#: sql_help.c:4513 +#: sql_help.c:4516 msgid "timezone" msgstr "fuseau_horaire" -#: sql_help.c:4558 +#: sql_help.c:4561 msgid "snapshot_id" msgstr "id_snapshot" -#: sql_help.c:4812 +#: sql_help.c:4815 msgid "sort_expression" msgstr "expression_de_tri" -#: sql_help.c:4949 sql_help.c:5927 +#: sql_help.c:4952 sql_help.c:5930 msgid "abort the current transaction" msgstr "abandonner la transaction en cours" -#: sql_help.c:4955 +#: sql_help.c:4958 msgid "change the definition of an aggregate function" msgstr "modifier la définition d'une fonction d'agrégation" -#: sql_help.c:4961 +#: sql_help.c:4964 msgid "change the definition of a collation" msgstr "modifier la définition d'un collationnement" -#: sql_help.c:4967 +#: sql_help.c:4970 msgid "change the definition of a conversion" msgstr "modifier la définition d'une conversion" -#: sql_help.c:4973 +#: sql_help.c:4976 msgid "change a database" msgstr "modifier une base de données" -#: sql_help.c:4979 +#: sql_help.c:4982 msgid "define default access privileges" msgstr "définir les droits d'accès par défaut" -#: sql_help.c:4985 +#: sql_help.c:4988 msgid "change the definition of a domain" msgstr "modifier la définition d'un domaine" -#: sql_help.c:4991 +#: sql_help.c:4994 msgid "change the definition of an event trigger" msgstr "modifier la définition d'un trigger sur évènement" -#: sql_help.c:4997 +#: sql_help.c:5000 msgid "change the definition of an extension" msgstr "modifier la définition d'une extension" -#: sql_help.c:5003 +#: sql_help.c:5006 msgid "change the definition of a foreign-data wrapper" msgstr "modifier la définition d'un wrapper de données distantes" -#: sql_help.c:5009 +#: sql_help.c:5012 msgid "change the definition of a foreign table" msgstr "modifier la définition d'une table distante" -#: sql_help.c:5015 +#: sql_help.c:5018 msgid "change the definition of a function" msgstr "modifier la définition d'une fonction" -#: sql_help.c:5021 +#: sql_help.c:5024 msgid "change role name or membership" msgstr "modifier le nom d'un groupe ou la liste des ses membres" -#: sql_help.c:5027 +#: sql_help.c:5030 msgid "change the definition of an index" msgstr "modifier la définition d'un index" -#: sql_help.c:5033 +#: sql_help.c:5036 msgid "change the definition of a procedural language" msgstr "modifier la définition d'un langage procédural" -#: sql_help.c:5039 +#: sql_help.c:5042 msgid "change the definition of a large object" msgstr "modifier la définition d'un « Large Object »" -#: sql_help.c:5045 +#: sql_help.c:5048 msgid "change the definition of a materialized view" msgstr "modifier la définition d'une vue matérialisée" -#: sql_help.c:5051 +#: sql_help.c:5054 msgid "change the definition of an operator" msgstr "modifier la définition d'un opérateur" -#: sql_help.c:5057 +#: sql_help.c:5060 msgid "change the definition of an operator class" msgstr "modifier la définition d'une classe d'opérateurs" -#: sql_help.c:5063 +#: sql_help.c:5066 msgid "change the definition of an operator family" msgstr "modifier la définition d'une famille d'opérateur" -#: sql_help.c:5069 +#: sql_help.c:5072 msgid "change the definition of a row-level security policy" msgstr "modifier la définition d'une politique de sécurité au niveau ligne" -#: sql_help.c:5075 +#: sql_help.c:5078 msgid "change the definition of a procedure" msgstr "modifier la définition d'une procédure" -#: sql_help.c:5081 +#: sql_help.c:5084 msgid "change the definition of a publication" msgstr "modifier la définition d'une publication" -#: sql_help.c:5087 sql_help.c:5189 +#: sql_help.c:5090 sql_help.c:5192 msgid "change a database role" msgstr "modifier un rôle" -#: sql_help.c:5093 +#: sql_help.c:5096 msgid "change the definition of a routine" msgstr "modifier la définition d'une routine" -#: sql_help.c:5099 +#: sql_help.c:5102 msgid "change the definition of a rule" msgstr "modifier la définition d'une règle" -#: sql_help.c:5105 +#: sql_help.c:5108 msgid "change the definition of a schema" msgstr "modifier la définition d'un schéma" -#: sql_help.c:5111 +#: sql_help.c:5114 msgid "change the definition of a sequence generator" msgstr "modifier la définition d'un générateur de séquence" -#: sql_help.c:5117 +#: sql_help.c:5120 msgid "change the definition of a foreign server" msgstr "modifier la définition d'un serveur distant" -#: sql_help.c:5123 +#: sql_help.c:5126 msgid "change the definition of an extended statistics object" msgstr "modifier la définition d'un objet de statistiques étendues" -#: sql_help.c:5129 +#: sql_help.c:5132 msgid "change the definition of a subscription" msgstr "modifier la définition d'une souscription" -#: sql_help.c:5135 +#: sql_help.c:5138 msgid "change a server configuration parameter" msgstr "modifie un paramètre de configuration du serveur" -#: sql_help.c:5141 +#: sql_help.c:5144 msgid "change the definition of a table" msgstr "modifier la définition d'une table" -#: sql_help.c:5147 +#: sql_help.c:5150 msgid "change the definition of a tablespace" msgstr "modifier la définition d'un tablespace" -#: sql_help.c:5153 +#: sql_help.c:5156 msgid "change the definition of a text search configuration" msgstr "modifier la définition d'une configuration de la recherche de texte" -#: sql_help.c:5159 +#: sql_help.c:5162 msgid "change the definition of a text search dictionary" msgstr "modifier la définition d'un dictionnaire de la recherche de texte" -#: sql_help.c:5165 +#: sql_help.c:5168 msgid "change the definition of a text search parser" msgstr "modifier la définition d'un analyseur de la recherche de texte" -#: sql_help.c:5171 +#: sql_help.c:5174 msgid "change the definition of a text search template" msgstr "modifier la définition d'un modèle de la recherche de texte" -#: sql_help.c:5177 +#: sql_help.c:5180 msgid "change the definition of a trigger" msgstr "modifier la définition d'un trigger" -#: sql_help.c:5183 +#: sql_help.c:5186 msgid "change the definition of a type" msgstr "modifier la définition d'un type" -#: sql_help.c:5195 +#: sql_help.c:5198 msgid "change the definition of a user mapping" msgstr "modifier la définition d'une correspondance d'utilisateur" -#: sql_help.c:5201 +#: sql_help.c:5204 msgid "change the definition of a view" msgstr "modifier la définition d'une vue" -#: sql_help.c:5207 +#: sql_help.c:5210 msgid "collect statistics about a database" msgstr "acquérir des statistiques concernant la base de données" -#: sql_help.c:5213 sql_help.c:6005 +#: sql_help.c:5216 sql_help.c:6008 msgid "start a transaction block" msgstr "débuter un bloc de transaction" -#: sql_help.c:5219 +#: sql_help.c:5222 msgid "invoke a procedure" msgstr "appeler une procédure" -#: sql_help.c:5225 +#: sql_help.c:5228 msgid "force a write-ahead log checkpoint" msgstr "forcer un point de vérification des journaux de transactions" -#: sql_help.c:5231 +#: sql_help.c:5234 msgid "close a cursor" msgstr "fermer un curseur" -#: sql_help.c:5237 +#: sql_help.c:5240 msgid "cluster a table according to an index" msgstr "réorganiser (cluster) une table en fonction d'un index" -#: sql_help.c:5243 +#: sql_help.c:5246 msgid "define or change the comment of an object" msgstr "définir ou modifier les commentaires d'un objet" -#: sql_help.c:5249 sql_help.c:5807 +#: sql_help.c:5252 sql_help.c:5810 msgid "commit the current transaction" msgstr "valider la transaction en cours" -#: sql_help.c:5255 +#: sql_help.c:5258 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "" "valider une transaction précédemment préparée pour une validation en deux\n" "phases" -#: sql_help.c:5261 +#: sql_help.c:5264 msgid "copy data between a file and a table" msgstr "copier des données entre un fichier et une table" -#: sql_help.c:5267 +#: sql_help.c:5270 msgid "define a new access method" msgstr "définir une nouvelle méthode d'accès" -#: sql_help.c:5273 +#: sql_help.c:5276 msgid "define a new aggregate function" msgstr "définir une nouvelle fonction d'agrégation" -#: sql_help.c:5279 +#: sql_help.c:5282 msgid "define a new cast" msgstr "définir un nouveau transtypage" -#: sql_help.c:5285 +#: sql_help.c:5288 msgid "define a new collation" msgstr "définir un nouveau collationnement" -#: sql_help.c:5291 +#: sql_help.c:5294 msgid "define a new encoding conversion" msgstr "définir une nouvelle conversion d'encodage" -#: sql_help.c:5297 +#: sql_help.c:5300 msgid "create a new database" msgstr "créer une nouvelle base de données" -#: sql_help.c:5303 +#: sql_help.c:5306 msgid "define a new domain" msgstr "définir un nouveau domaine" -#: sql_help.c:5309 +#: sql_help.c:5312 msgid "define a new event trigger" msgstr "définir un nouveau trigger sur évènement" -#: sql_help.c:5315 +#: sql_help.c:5318 msgid "install an extension" msgstr "installer une extension" -#: sql_help.c:5321 +#: sql_help.c:5324 msgid "define a new foreign-data wrapper" msgstr "définir un nouveau wrapper de données distantes" -#: sql_help.c:5327 +#: sql_help.c:5330 msgid "define a new foreign table" msgstr "définir une nouvelle table distante" -#: sql_help.c:5333 +#: sql_help.c:5336 msgid "define a new function" msgstr "définir une nouvelle fonction" -#: sql_help.c:5339 sql_help.c:5399 sql_help.c:5501 +#: sql_help.c:5342 sql_help.c:5402 sql_help.c:5504 msgid "define a new database role" msgstr "définir un nouveau rôle" -#: sql_help.c:5345 +#: sql_help.c:5348 msgid "define a new index" msgstr "définir un nouvel index" -#: sql_help.c:5351 +#: sql_help.c:5354 msgid "define a new procedural language" msgstr "définir un nouveau langage de procédures" -#: sql_help.c:5357 +#: sql_help.c:5360 msgid "define a new materialized view" msgstr "définir une nouvelle vue matérialisée" -#: sql_help.c:5363 +#: sql_help.c:5366 msgid "define a new operator" msgstr "définir un nouvel opérateur" -#: sql_help.c:5369 +#: sql_help.c:5372 msgid "define a new operator class" msgstr "définir une nouvelle classe d'opérateur" -#: sql_help.c:5375 +#: sql_help.c:5378 msgid "define a new operator family" msgstr "définir une nouvelle famille d'opérateur" -#: sql_help.c:5381 +#: sql_help.c:5384 msgid "define a new row-level security policy for a table" msgstr "définir une nouvelle politique de sécurité au niveau ligne pour une table" -#: sql_help.c:5387 +#: sql_help.c:5390 msgid "define a new procedure" msgstr "définir une nouvelle procédure" -#: sql_help.c:5393 +#: sql_help.c:5396 msgid "define a new publication" msgstr "définir une nouvelle publication" -#: sql_help.c:5405 +#: sql_help.c:5408 msgid "define a new rewrite rule" msgstr "définir une nouvelle règle de réécriture" -#: sql_help.c:5411 +#: sql_help.c:5414 msgid "define a new schema" msgstr "définir un nouveau schéma" -#: sql_help.c:5417 +#: sql_help.c:5420 msgid "define a new sequence generator" msgstr "définir un nouveau générateur de séquence" -#: sql_help.c:5423 +#: sql_help.c:5426 msgid "define a new foreign server" msgstr "définir un nouveau serveur distant" -#: sql_help.c:5429 +#: sql_help.c:5432 msgid "define extended statistics" msgstr "définir des statistiques étendues" -#: sql_help.c:5435 +#: sql_help.c:5438 msgid "define a new subscription" msgstr "définir une nouvelle souscription" -#: sql_help.c:5441 +#: sql_help.c:5444 msgid "define a new table" msgstr "définir une nouvelle table" -#: sql_help.c:5447 sql_help.c:5963 +#: sql_help.c:5450 sql_help.c:5966 msgid "define a new table from the results of a query" msgstr "définir une nouvelle table à partir des résultats d'une requête" -#: sql_help.c:5453 +#: sql_help.c:5456 msgid "define a new tablespace" msgstr "définir un nouveau tablespace" -#: sql_help.c:5459 +#: sql_help.c:5462 msgid "define a new text search configuration" msgstr "définir une nouvelle configuration de la recherche de texte" -#: sql_help.c:5465 +#: sql_help.c:5468 msgid "define a new text search dictionary" msgstr "définir un nouveau dictionnaire de la recherche de texte" -#: sql_help.c:5471 +#: sql_help.c:5474 msgid "define a new text search parser" msgstr "définir un nouvel analyseur de la recherche de texte" -#: sql_help.c:5477 +#: sql_help.c:5480 msgid "define a new text search template" msgstr "définir un nouveau modèle de la recherche de texte" -#: sql_help.c:5483 +#: sql_help.c:5486 msgid "define a new transform" msgstr "définir une nouvelle transformation" -#: sql_help.c:5489 +#: sql_help.c:5492 msgid "define a new trigger" msgstr "définir un nouveau trigger" -#: sql_help.c:5495 +#: sql_help.c:5498 msgid "define a new data type" msgstr "définir un nouveau type de données" -#: sql_help.c:5507 +#: sql_help.c:5510 msgid "define a new mapping of a user to a foreign server" msgstr "définit une nouvelle correspondance d'un utilisateur vers un serveur distant" -#: sql_help.c:5513 +#: sql_help.c:5516 msgid "define a new view" msgstr "définir une nouvelle vue" -#: sql_help.c:5519 +#: sql_help.c:5522 msgid "deallocate a prepared statement" msgstr "désallouer une instruction préparée" -#: sql_help.c:5525 +#: sql_help.c:5528 msgid "define a cursor" msgstr "définir un curseur" -#: sql_help.c:5531 +#: sql_help.c:5534 msgid "delete rows of a table" msgstr "supprimer des lignes d'une table" -#: sql_help.c:5537 +#: sql_help.c:5540 msgid "discard session state" msgstr "annuler l'état de la session" -#: sql_help.c:5543 +#: sql_help.c:5546 msgid "execute an anonymous code block" msgstr "exécute un bloc de code anonyme" -#: sql_help.c:5549 +#: sql_help.c:5552 msgid "remove an access method" msgstr "supprimer une méthode d'accès" -#: sql_help.c:5555 +#: sql_help.c:5558 msgid "remove an aggregate function" msgstr "supprimer une fonction d'agrégation" -#: sql_help.c:5561 +#: sql_help.c:5564 msgid "remove a cast" msgstr "supprimer un transtypage" -#: sql_help.c:5567 +#: sql_help.c:5570 msgid "remove a collation" msgstr "supprimer un collationnement" -#: sql_help.c:5573 +#: sql_help.c:5576 msgid "remove a conversion" msgstr "supprimer une conversion" -#: sql_help.c:5579 +#: sql_help.c:5582 msgid "remove a database" msgstr "supprimer une base de données" -#: sql_help.c:5585 +#: sql_help.c:5588 msgid "remove a domain" msgstr "supprimer un domaine" -#: sql_help.c:5591 +#: sql_help.c:5594 msgid "remove an event trigger" msgstr "supprimer un trigger sur évènement" -#: sql_help.c:5597 +#: sql_help.c:5600 msgid "remove an extension" msgstr "supprimer une extension" -#: sql_help.c:5603 +#: sql_help.c:5606 msgid "remove a foreign-data wrapper" msgstr "supprimer un wrapper de données distantes" -#: sql_help.c:5609 +#: sql_help.c:5612 msgid "remove a foreign table" msgstr "supprimer une table distante" -#: sql_help.c:5615 +#: sql_help.c:5618 msgid "remove a function" msgstr "supprimer une fonction" -#: sql_help.c:5621 sql_help.c:5687 sql_help.c:5789 +#: sql_help.c:5624 sql_help.c:5690 sql_help.c:5792 msgid "remove a database role" msgstr "supprimer un rôle de la base de données" -#: sql_help.c:5627 +#: sql_help.c:5630 msgid "remove an index" msgstr "supprimer un index" -#: sql_help.c:5633 +#: sql_help.c:5636 msgid "remove a procedural language" msgstr "supprimer un langage procédural" -#: sql_help.c:5639 +#: sql_help.c:5642 msgid "remove a materialized view" msgstr "supprimer une vue matérialisée" -#: sql_help.c:5645 +#: sql_help.c:5648 msgid "remove an operator" msgstr "supprimer un opérateur" -#: sql_help.c:5651 +#: sql_help.c:5654 msgid "remove an operator class" msgstr "supprimer une classe d'opérateur" -#: sql_help.c:5657 +#: sql_help.c:5660 msgid "remove an operator family" msgstr "supprimer une famille d'opérateur" -#: sql_help.c:5663 +#: sql_help.c:5666 msgid "remove database objects owned by a database role" msgstr "supprimer les objets appartenant à un rôle" -#: sql_help.c:5669 +#: sql_help.c:5672 msgid "remove a row-level security policy from a table" msgstr "supprimer une politique de sécurité au niveau ligne pour une table" -#: sql_help.c:5675 +#: sql_help.c:5678 msgid "remove a procedure" msgstr "supprimer une procédure" -#: sql_help.c:5681 +#: sql_help.c:5684 msgid "remove a publication" msgstr "supprimer une publication" -#: sql_help.c:5693 +#: sql_help.c:5696 msgid "remove a routine" msgstr "supprimer une routine" -#: sql_help.c:5699 +#: sql_help.c:5702 msgid "remove a rewrite rule" msgstr "supprimer une règle de réécriture" -#: sql_help.c:5705 +#: sql_help.c:5708 msgid "remove a schema" msgstr "supprimer un schéma" -#: sql_help.c:5711 +#: sql_help.c:5714 msgid "remove a sequence" msgstr "supprimer une séquence" -#: sql_help.c:5717 +#: sql_help.c:5720 msgid "remove a foreign server descriptor" msgstr "supprimer un descripteur de serveur distant" -#: sql_help.c:5723 +#: sql_help.c:5726 msgid "remove extended statistics" msgstr "supprimer des statistiques étendues" -#: sql_help.c:5729 +#: sql_help.c:5732 msgid "remove a subscription" msgstr "supprimer une souscription" -#: sql_help.c:5735 +#: sql_help.c:5738 msgid "remove a table" msgstr "supprimer une table" -#: sql_help.c:5741 +#: sql_help.c:5744 msgid "remove a tablespace" msgstr "supprimer un tablespace" -#: sql_help.c:5747 +#: sql_help.c:5750 msgid "remove a text search configuration" msgstr "supprimer une configuration de la recherche de texte" -#: sql_help.c:5753 +#: sql_help.c:5756 msgid "remove a text search dictionary" msgstr "supprimer un dictionnaire de la recherche de texte" -#: sql_help.c:5759 +#: sql_help.c:5762 msgid "remove a text search parser" msgstr "supprimer un analyseur de la recherche de texte" -#: sql_help.c:5765 +#: sql_help.c:5768 msgid "remove a text search template" msgstr "supprimer un modèle de la recherche de texte" -#: sql_help.c:5771 +#: sql_help.c:5774 msgid "remove a transform" msgstr "supprimer une transformation" -#: sql_help.c:5777 +#: sql_help.c:5780 msgid "remove a trigger" msgstr "supprimer un trigger" -#: sql_help.c:5783 +#: sql_help.c:5786 msgid "remove a data type" msgstr "supprimer un type de données" -#: sql_help.c:5795 +#: sql_help.c:5798 msgid "remove a user mapping for a foreign server" msgstr "supprime une correspondance utilisateur pour un serveur distant" -#: sql_help.c:5801 +#: sql_help.c:5804 msgid "remove a view" msgstr "supprimer une vue" -#: sql_help.c:5813 +#: sql_help.c:5816 msgid "execute a prepared statement" msgstr "exécuter une instruction préparée" -#: sql_help.c:5819 +#: sql_help.c:5822 msgid "show the execution plan of a statement" msgstr "afficher le plan d'exécution d'une instruction" -#: sql_help.c:5825 +#: sql_help.c:5828 msgid "retrieve rows from a query using a cursor" msgstr "extraire certaines lignes d'une requête à l'aide d'un curseur" -#: sql_help.c:5831 +#: sql_help.c:5834 msgid "define access privileges" msgstr "définir des privilèges d'accès" -#: sql_help.c:5837 +#: sql_help.c:5840 msgid "import table definitions from a foreign server" msgstr "importer la définition d'une table à partir d'un serveur distant" -#: sql_help.c:5843 +#: sql_help.c:5846 msgid "create new rows in a table" msgstr "créer de nouvelles lignes dans une table" -#: sql_help.c:5849 +#: sql_help.c:5852 msgid "listen for a notification" msgstr "se mettre à l'écoute d'une notification" -#: sql_help.c:5855 +#: sql_help.c:5858 msgid "load a shared library file" msgstr "charger un fichier de bibliothèque partagée" -#: sql_help.c:5861 +#: sql_help.c:5864 msgid "lock a table" msgstr "verrouiller une table" -#: sql_help.c:5867 +#: sql_help.c:5870 msgid "position a cursor" msgstr "positionner un curseur" -#: sql_help.c:5873 +#: sql_help.c:5876 msgid "generate a notification" msgstr "engendrer une notification" -#: sql_help.c:5879 +#: sql_help.c:5882 msgid "prepare a statement for execution" msgstr "préparer une instruction pour exécution" -#: sql_help.c:5885 +#: sql_help.c:5888 msgid "prepare the current transaction for two-phase commit" msgstr "préparer la transaction en cours pour une validation en deux phases" -#: sql_help.c:5891 +#: sql_help.c:5894 msgid "change the ownership of database objects owned by a database role" msgstr "changer le propriétaire des objets d'un rôle" -#: sql_help.c:5897 +#: sql_help.c:5900 msgid "replace the contents of a materialized view" msgstr "remplacer le contenu d'une vue matérialisée" -#: sql_help.c:5903 +#: sql_help.c:5906 msgid "rebuild indexes" msgstr "reconstruire des index" -#: sql_help.c:5909 +#: sql_help.c:5912 msgid "destroy a previously defined savepoint" msgstr "détruire un point de retournement précédemment défini" -#: sql_help.c:5915 +#: sql_help.c:5918 msgid "restore the value of a run-time parameter to the default value" msgstr "réinitialiser un paramètre d'exécution à sa valeur par défaut" -#: sql_help.c:5921 +#: sql_help.c:5924 msgid "remove access privileges" msgstr "supprimer des privilèges d'accès" -#: sql_help.c:5933 +#: sql_help.c:5936 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "" "annuler une transaction précédemment préparée pour une validation en deux\n" "phases" -#: sql_help.c:5939 +#: sql_help.c:5942 msgid "roll back to a savepoint" msgstr "annuler jusqu'au point de retournement" -#: sql_help.c:5945 +#: sql_help.c:5948 msgid "define a new savepoint within the current transaction" msgstr "définir un nouveau point de retournement pour la transaction en cours" -#: sql_help.c:5951 +#: sql_help.c:5954 msgid "define or change a security label applied to an object" msgstr "définir ou modifier un label de sécurité à un objet" -#: sql_help.c:5957 sql_help.c:6011 sql_help.c:6047 +#: sql_help.c:5960 sql_help.c:6014 sql_help.c:6050 msgid "retrieve rows from a table or view" msgstr "extraire des lignes d'une table ou d'une vue" -#: sql_help.c:5969 +#: sql_help.c:5972 msgid "change a run-time parameter" msgstr "modifier un paramètre d'exécution" -#: sql_help.c:5975 +#: sql_help.c:5978 msgid "set constraint check timing for the current transaction" msgstr "définir le moment de la vérification des contraintes pour la transaction en cours" -#: sql_help.c:5981 +#: sql_help.c:5984 msgid "set the current user identifier of the current session" msgstr "définir l'identifiant actuel de l'utilisateur de la session courante" -#: sql_help.c:5987 +#: sql_help.c:5990 msgid "set the session user identifier and the current user identifier of the current session" msgstr "" "définir l'identifiant de l'utilisateur de session et l'identifiant actuel de\n" "l'utilisateur de la session courante" -#: sql_help.c:5993 +#: sql_help.c:5996 msgid "set the characteristics of the current transaction" msgstr "définir les caractéristiques de la transaction en cours" -#: sql_help.c:5999 +#: sql_help.c:6002 msgid "show the value of a run-time parameter" msgstr "afficher la valeur d'un paramètre d'exécution" -#: sql_help.c:6017 +#: sql_help.c:6020 msgid "empty a table or set of tables" msgstr "vider une table ou un ensemble de tables" -#: sql_help.c:6023 +#: sql_help.c:6026 msgid "stop listening for a notification" msgstr "arrêter l'écoute d'une notification" -#: sql_help.c:6029 +#: sql_help.c:6032 msgid "update rows of a table" msgstr "actualiser les lignes d'une table" -#: sql_help.c:6035 +#: sql_help.c:6038 msgid "garbage-collect and optionally analyze a database" msgstr "compacter et optionnellement analyser une base de données" -#: sql_help.c:6041 +#: sql_help.c:6044 msgid "compute a set of rows" msgstr "calculer un ensemble de lignes" @@ -6612,7 +6608,7 @@ msgstr "option supplémentaire « %s » ignorée" msgid "could not find own program executable" msgstr "n'a pas pu trouver son propre exécutable" -#: tab-complete.c:4915 +#: tab-complete.c:4898 #, c-format msgid "" "tab completion query failed: %s\n" @@ -6647,341 +6643,344 @@ msgstr "" "valeur « %s » non reconnue pour « %s »\n" "Les valeurs disponibles sont : %s." -#~ msgid "All connection parameters must be supplied because no database connection exists" -#~ msgstr "Tous les paramètres de connexion doivent être fournis car il n'existe pas de connexion à une base de données" +#~ msgid "pclose failed: %m" +#~ msgstr "échec de pclose : %m" -#~ msgid "could not identify current directory: %s" -#~ msgstr "n'a pas pu identifier le répertoire courant : %s" +#~ msgid "Could not send cancel request: %s" +#~ msgstr "N'a pas pu envoyer la requête d'annulation : %s" -#~ msgid "could not change directory to \"%s\": %s" -#~ msgstr "n'a pas pu changer le répertoire par « %s » : %s" +#~ msgid "lock a named relation (table, etc)" +#~ msgstr "verrouille une relation nommée (table, etc)" -#~ msgid "could not read symbolic link \"%s\"" -#~ msgstr "n'a pas pu lire le lien symbolique « %s »" +#~ msgid "could not connect to server: %s" +#~ msgstr "n'a pas pu se connecter au serveur : %s" -#~ msgid "pclose failed: %s" -#~ msgstr "échec de pclose : %s" +#~ msgid "Report bugs to .\n" +#~ msgstr "Rapporter les bogues à .\n" -#~ msgid "child process was terminated by signal %s" -#~ msgstr "le processus fils a été terminé par le signal %s" +#~ msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" +#~ msgstr "" +#~ " \\g [FICHIER] ou ; envoie le tampon de requêtes au serveur (et les\n" +#~ " résultats au fichier ou |tube)\n" -#~ msgid "child process was terminated by signal %d" -#~ msgstr "le processus fils a été terminé par le signal %d" +#~ msgid "old_version" +#~ msgstr "ancienne_version" -#~ msgid "Invalid command \\%s. Try \\? for help.\n" -#~ msgstr "Commande \\%s invalide. Essayez \\? pour l'aide-mémoire.\n" +#~ msgid "from_list" +#~ msgstr "liste_from" -#~ msgid "%s: %s\n" -#~ msgstr "%s : %s\n" +#~ msgid "normal" +#~ msgstr "normal" -#~ msgid "could not open temporary file \"%s\": %s\n" -#~ msgstr "n'a pas pu ouvrir le fichier temporaire « %s » : %s\n" +#~ msgid "Procedure" +#~ msgstr "Procédure" -#~ msgid "could not execute command \"%s\": %s\n" -#~ msgstr "n'a pas pu exécuter la commande « %s » : %s\n" +#~ msgid " SERVER_VERSION_NAME server's version (short string)\n" +#~ msgstr " SERVER_VERSION_NAME version du serveur (chaîne courte)\n" -#~ msgid "could not stat file \"%s\": %s\n" -#~ msgstr "n'a pas pu tester le fichier « %s » : %s\n" +#~ msgid " VERSION psql's version (verbose string)\n" +#~ msgstr " VERSION version de psql (chaîne verbeuse)\n" -#~ msgid "could not close pipe to external command: %s\n" -#~ msgstr "n'a pas pu fermer le fichier pipe vers la commande externe : %s\n" +#~ msgid " VERSION_NAME psql's version (short string)\n" +#~ msgstr " VERSION_NAME version de psql (chaîne courte)\n" -#~ msgid "%s\n" -#~ msgstr "%s\n" +#~ msgid " VERSION_NUM psql's version (numeric format)\n" +#~ msgstr " VERSION_NUM version de psql (format numérique)\n" -#~ msgid "Report bugs to .\n" -#~ msgstr "Rapportez les bogues à .\n" +#~ msgid "attribute" +#~ msgstr "attribut" -#~ msgid "unterminated quoted string\n" -#~ msgstr "chaîne entre guillemets non terminée\n" +#~ msgid "No per-database role settings support in this server version.\n" +#~ msgstr "Pas de supprot des paramètres rôle par base de données pour la version de ce serveur.\n" -#~ msgid "string_literal" -#~ msgstr "littéral_chaîne" +#~ msgid "No matching settings found.\n" +#~ msgstr "Aucun paramètre correspondant trouvé.\n" -#~ msgid "%s: could not open log file \"%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le journal applicatif « %s » : %s\n" +#~ msgid "No settings found.\n" +#~ msgstr "Aucun paramètre trouvé.\n" -#~ msgid "Value" -#~ msgstr "Valeur" +#~ msgid "No matching relations found.\n" +#~ msgstr "Aucune relation correspondante trouvée.\n" -#~ msgid "statistic_type" -#~ msgstr "type_statistique" +#~ msgid "No relations found.\n" +#~ msgstr "Aucune relation trouvée.\n" -#~ msgid "serialtype" -#~ msgstr "serialtype" +#~ msgid "Password encryption failed.\n" +#~ msgstr "Échec du chiffrement du mot de passe.\n" -#~ msgid "SSL connection (unknown cipher)\n" -#~ msgstr "Connexion SSL (chiffrement inconnu)\n" +#~ msgid "\\%s: error while setting variable\n" +#~ msgstr "\\%s : erreur lors de l'initialisation de la variable\n" -#~ msgid " -?, --help show this help, then exit\n" -#~ msgstr " -?, --help affiche cette aide puis quitte\n" +#~ msgid "+ opt(%d) = |%s|\n" +#~ msgstr "+ opt(%d) = |%s|\n" -#~ msgid "(No rows)\n" -#~ msgstr "(Aucune ligne)\n" +#~ msgid "could not set variable \"%s\"\n" +#~ msgstr "n'a pas pu initialiser la variable « %s »\n" -#~ msgid " \"%s\"" -#~ msgstr " « %s »" +#~ msgid "Modifiers" +#~ msgstr "Modificateurs" -#~ msgid "?%c? \"%s.%s\"" -#~ msgstr "?%c? « %s.%s »" +#~ msgid "collate %s" +#~ msgstr "collationnement %s" -#~ msgid "Access privileges for database \"%s\"" -#~ msgstr "Droits d'accès pour la base de données « %s »" +#~ msgid "not null" +#~ msgstr "non NULL" -#~ msgid "" -#~ "WARNING: You are connected to a server with major version %d.%d,\n" -#~ "but your %s client is major version %d.%d. Some backslash commands,\n" -#~ "such as \\d, might not work properly.\n" -#~ "\n" -#~ msgstr "" -#~ "ATTENTION : vous êtes connecté sur un serveur dont la version majeure est\n" -#~ "%d.%d alors que votre client %s est en version majeure %d.%d. Certaines\n" -#~ "commandes avec antislashs, comme \\d, peuvent ne pas fonctionner\n" -#~ "correctement.\n" -#~ "\n" +#~ msgid "default %s" +#~ msgstr "Par défaut, %s" -#~ msgid "" -#~ "Welcome to %s %s, the PostgreSQL interactive terminal.\n" -#~ "\n" -#~ msgstr "" -#~ "Bienvenue dans %s %s, l'interface interactive de PostgreSQL.\n" -#~ "\n" +#~ msgid "Modifier" +#~ msgstr "Modificateur" -#~ msgid "" -#~ "Welcome to %s %s (server %s), the PostgreSQL interactive terminal.\n" -#~ "\n" -#~ msgstr "" -#~ "Bienvenue dans %s %s (serveur %s), l'interface interactive de PostgreSQL.\n" -#~ "\n" +#~ msgid "Object Description" +#~ msgstr "Description d'un objet" -#~ msgid "Copy, Large Object\n" -#~ msgstr "Copie, « Large Object »\n" +#~ msgid "%s: could not set variable \"%s\"\n" +#~ msgstr "%s : n'a pas pu initialiser la variable « %s »\n" -#~ msgid " \\z [PATTERN] list table, view, and sequence access privileges (same as \\dp)\n" -#~ msgstr "" -#~ " \\z [MODÈLE] affiche la liste des privilèges d'accès aux tables,\n" -#~ " vues et séquences (identique à \\dp)\n" +#~ msgid "Watch every %lds\t%s" +#~ msgstr "Vérifier chaque %lds\t%s" -#~ msgid " \\l list all databases (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\l affiche la liste des bases de données (ajouter « + »\n" -#~ " pour plus de détails)\n" +#~ msgid "Showing locale-adjusted numeric output." +#~ msgstr "Affichage de la sortie numérique adaptée à la locale." -#~ msgid " \\dT [PATTERN] list data types (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\dT [MODÈLE] affiche la liste des types de données (ajouter « + »\n" -#~ " pour plus de détails)\n" +#~ msgid "Showing only tuples." +#~ msgstr "Affichage des tuples seuls." -#~ msgid " \\dn [PATTERN] list schemas (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\dn [MODÈLE] affiche la liste des schémas (ajouter « + » pour\n" -#~ " plus de détails)\n" +#~ msgid "could not get current user name: %s\n" +#~ msgstr "n'a pas pu obtenir le nom d'utilisateur courant : %s\n" -#~ msgid " \\dFp [PATTERN] list text search parsers (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\dFp [MODÈLE] affiche la liste des analyseurs de la recherche de\n" -#~ " texte (ajouter « + » pour plus de détails)\n" +#~ msgid "agg_name" +#~ msgstr "nom_d_agrégat" -#~ msgid " \\dFd [PATTERN] list text search dictionaries (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\dFd [MODÈLE] affiche la liste des dictionnaires de la recherche\n" -#~ " de texte (ajouter « + » pour plus de détails)\n" +#~ msgid "agg_type" +#~ msgstr "type_aggrégat" -#~ msgid " \\df [PATTERN] list functions (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\df [MODÈLE] affiche la liste des fonctions (ajouter « + » pour\n" -#~ " plus de détails)\n" +#~ msgid "input_data_type" +#~ msgstr "type_de_données_en_entrée" -#~ msgid " \\db [PATTERN] list tablespaces (add \"+\" for more detail)\n" -#~ msgstr "" -#~ " \\db [MODÈLE] affiche la liste des tablespaces (ajouter « + » pour\n" -#~ " plus de détails)\n" +#~ msgid "could not change directory to \"%s\"" +#~ msgstr "n'a pas pu accéder au répertoire « %s »" -#~ msgid "" -#~ " \\d{t|i|s|v|S} [PATTERN] (add \"+\" for more detail)\n" -#~ " list tables/indexes/sequences/views/system tables\n" -#~ msgstr "" -#~ " \\d{t|i|s|v|S} [MODÈLE] (ajouter « + » pour plus de détails)\n" -#~ " affiche la liste des\n" -#~ " tables/index/séquences/vues/tables système\n" +#~ msgid "%s: pg_strdup: cannot duplicate null pointer (internal error)\n" +#~ msgstr "%s : pg_strdup : ne peut pas dupliquer le pointeur null (erreur interne)\n" -#~ msgid "(1 row)" -#~ msgid_plural "(%lu rows)" -#~ msgstr[0] "(1 ligne)" -#~ msgstr[1] "(%lu lignes)" +#~ msgid " \\l[+] list all databases\n" +#~ msgstr " \\l[+] affiche la liste des bases de données\n" -#~ msgid " \"%s\" IN %s %s" -#~ msgstr " \"%s\" DANS %s %s" +#~ msgid "\\%s: error\n" +#~ msgstr "\\%s : erreur\n" -#~ msgid "rolename" -#~ msgstr "nom_rôle" +#~ msgid "\\copy: %s" +#~ msgstr "\\copy : %s" -#~ msgid "Exclusion constraints:" -#~ msgstr "Contraintes d'exclusion :" +#~ msgid "\\copy: unexpected response (%d)\n" +#~ msgstr "\\copy : réponse inattendue (%d)\n" -#~ msgid "define a new constraint trigger" -#~ msgstr "définir une nouvelle contrainte de déclenchement" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help affiche cette aide, puis quitte\n" -#~ msgid " as user \"%s\"" -#~ msgstr " comme utilisateur « %s »" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version affiche la version, puis quitte\n" -#~ msgid " at port \"%s\"" -#~ msgstr " sur le port « %s »" +#~ msgid "contains support for command-line editing" +#~ msgstr "contient une gestion avancée de la ligne de commande" -#~ msgid " on host \"%s\"" -#~ msgstr " sur l'hôte « %s »" +#~ msgid "data type" +#~ msgstr "type de données" -#~ msgid "tablespace" -#~ msgstr "tablespace" +#~ msgid "column" +#~ msgstr "colonne" #~ msgid "new_column" #~ msgstr "nouvelle_colonne" -#~ msgid "column" -#~ msgstr "colonne" +#~ msgid "tablespace" +#~ msgstr "tablespace" -#~ msgid "data type" -#~ msgstr "type de données" +#~ msgid " on host \"%s\"" +#~ msgstr " sur l'hôte « %s »" -#~ msgid "contains support for command-line editing" -#~ msgstr "contient une gestion avancée de la ligne de commande" +#~ msgid " at port \"%s\"" +#~ msgstr " sur le port « %s »" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version, puis quitte\n" +#~ msgid " as user \"%s\"" +#~ msgstr " comme utilisateur « %s »" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide, puis quitte\n" +#~ msgid "define a new constraint trigger" +#~ msgstr "définir une nouvelle contrainte de déclenchement" -#~ msgid "\\copy: unexpected response (%d)\n" -#~ msgstr "\\copy : réponse inattendue (%d)\n" +#~ msgid "Exclusion constraints:" +#~ msgstr "Contraintes d'exclusion :" -#~ msgid "\\copy: %s" -#~ msgstr "\\copy : %s" +#~ msgid "rolename" +#~ msgstr "nom_rôle" -#~ msgid "\\%s: error\n" -#~ msgstr "\\%s : erreur\n" +#~ msgid " \"%s\" IN %s %s" +#~ msgstr " \"%s\" DANS %s %s" -#~ msgid " \\l[+] list all databases\n" -#~ msgstr " \\l[+] affiche la liste des bases de données\n" +#~ msgid "(1 row)" +#~ msgid_plural "(%lu rows)" +#~ msgstr[0] "(1 ligne)" +#~ msgstr[1] "(%lu lignes)" -#~ msgid "%s: pg_strdup: cannot duplicate null pointer (internal error)\n" -#~ msgstr "%s : pg_strdup : ne peut pas dupliquer le pointeur null (erreur interne)\n" +#~ msgid "" +#~ " \\d{t|i|s|v|S} [PATTERN] (add \"+\" for more detail)\n" +#~ " list tables/indexes/sequences/views/system tables\n" +#~ msgstr "" +#~ " \\d{t|i|s|v|S} [MODÈLE] (ajouter « + » pour plus de détails)\n" +#~ " affiche la liste des\n" +#~ " tables/index/séquences/vues/tables système\n" -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "n'a pas pu accéder au répertoire « %s »" +#~ msgid " \\db [PATTERN] list tablespaces (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\db [MODÈLE] affiche la liste des tablespaces (ajouter « + » pour\n" +#~ " plus de détails)\n" -#~ msgid "input_data_type" -#~ msgstr "type_de_données_en_entrée" +#~ msgid " \\df [PATTERN] list functions (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\df [MODÈLE] affiche la liste des fonctions (ajouter « + » pour\n" +#~ " plus de détails)\n" -#~ msgid "agg_type" -#~ msgstr "type_aggrégat" +#~ msgid " \\dFd [PATTERN] list text search dictionaries (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\dFd [MODÈLE] affiche la liste des dictionnaires de la recherche\n" +#~ " de texte (ajouter « + » pour plus de détails)\n" -#~ msgid "agg_name" -#~ msgstr "nom_d_agrégat" +#~ msgid " \\dFp [PATTERN] list text search parsers (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\dFp [MODÈLE] affiche la liste des analyseurs de la recherche de\n" +#~ " texte (ajouter « + » pour plus de détails)\n" -#~ msgid "could not get current user name: %s\n" -#~ msgstr "n'a pas pu obtenir le nom d'utilisateur courant : %s\n" +#~ msgid " \\dn [PATTERN] list schemas (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\dn [MODÈLE] affiche la liste des schémas (ajouter « + » pour\n" +#~ " plus de détails)\n" -#~ msgid "Showing only tuples." -#~ msgstr "Affichage des tuples seuls." +#~ msgid " \\dT [PATTERN] list data types (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\dT [MODÈLE] affiche la liste des types de données (ajouter « + »\n" +#~ " pour plus de détails)\n" -#~ msgid "Showing locale-adjusted numeric output." -#~ msgstr "Affichage de la sortie numérique adaptée à la locale." +#~ msgid " \\l list all databases (add \"+\" for more detail)\n" +#~ msgstr "" +#~ " \\l affiche la liste des bases de données (ajouter « + »\n" +#~ " pour plus de détails)\n" -#~ msgid "Watch every %lds\t%s" -#~ msgstr "Vérifier chaque %lds\t%s" +#~ msgid " \\z [PATTERN] list table, view, and sequence access privileges (same as \\dp)\n" +#~ msgstr "" +#~ " \\z [MODÈLE] affiche la liste des privilèges d'accès aux tables,\n" +#~ " vues et séquences (identique à \\dp)\n" -#~ msgid "%s: could not set variable \"%s\"\n" -#~ msgstr "%s : n'a pas pu initialiser la variable « %s »\n" +#~ msgid "Copy, Large Object\n" +#~ msgstr "Copie, « Large Object »\n" -#~ msgid "Object Description" -#~ msgstr "Description d'un objet" +#~ msgid "" +#~ "Welcome to %s %s (server %s), the PostgreSQL interactive terminal.\n" +#~ "\n" +#~ msgstr "" +#~ "Bienvenue dans %s %s (serveur %s), l'interface interactive de PostgreSQL.\n" +#~ "\n" -#~ msgid "Modifier" -#~ msgstr "Modificateur" +#~ msgid "" +#~ "Welcome to %s %s, the PostgreSQL interactive terminal.\n" +#~ "\n" +#~ msgstr "" +#~ "Bienvenue dans %s %s, l'interface interactive de PostgreSQL.\n" +#~ "\n" -#~ msgid "default %s" -#~ msgstr "Par défaut, %s" +#~ msgid "" +#~ "WARNING: You are connected to a server with major version %d.%d,\n" +#~ "but your %s client is major version %d.%d. Some backslash commands,\n" +#~ "such as \\d, might not work properly.\n" +#~ "\n" +#~ msgstr "" +#~ "ATTENTION : vous êtes connecté sur un serveur dont la version majeure est\n" +#~ "%d.%d alors que votre client %s est en version majeure %d.%d. Certaines\n" +#~ "commandes avec antislashs, comme \\d, peuvent ne pas fonctionner\n" +#~ "correctement.\n" +#~ "\n" -#~ msgid "not null" -#~ msgstr "non NULL" +#~ msgid "Access privileges for database \"%s\"" +#~ msgstr "Droits d'accès pour la base de données « %s »" -#~ msgid "collate %s" -#~ msgstr "collationnement %s" +#~ msgid "?%c? \"%s.%s\"" +#~ msgstr "?%c? « %s.%s »" -#~ msgid "Modifiers" -#~ msgstr "Modificateurs" +#~ msgid " \"%s\"" +#~ msgstr " « %s »" -#~ msgid "could not set variable \"%s\"\n" -#~ msgstr "n'a pas pu initialiser la variable « %s »\n" +#~ msgid "(No rows)\n" +#~ msgstr "(Aucune ligne)\n" -#~ msgid "+ opt(%d) = |%s|\n" -#~ msgstr "+ opt(%d) = |%s|\n" +#~ msgid " -?, --help show this help, then exit\n" +#~ msgstr " -?, --help affiche cette aide puis quitte\n" -#~ msgid "\\%s: error while setting variable\n" -#~ msgstr "\\%s : erreur lors de l'initialisation de la variable\n" +#~ msgid "SSL connection (unknown cipher)\n" +#~ msgstr "Connexion SSL (chiffrement inconnu)\n" -#~ msgid "Password encryption failed.\n" -#~ msgstr "Échec du chiffrement du mot de passe.\n" +#~ msgid "serialtype" +#~ msgstr "serialtype" -#~ msgid "No relations found.\n" -#~ msgstr "Aucune relation trouvée.\n" +#~ msgid "statistic_type" +#~ msgstr "type_statistique" -#~ msgid "No matching relations found.\n" -#~ msgstr "Aucune relation correspondante trouvée.\n" +#~ msgid "Value" +#~ msgstr "Valeur" -#~ msgid "No settings found.\n" -#~ msgstr "Aucun paramètre trouvé.\n" +#~ msgid "%s: could not open log file \"%s\": %s\n" +#~ msgstr "%s : n'a pas pu ouvrir le journal applicatif « %s » : %s\n" -#~ msgid "No matching settings found.\n" -#~ msgstr "Aucun paramètre correspondant trouvé.\n" +#~ msgid "string_literal" +#~ msgstr "littéral_chaîne" -#~ msgid "No per-database role settings support in this server version.\n" -#~ msgstr "Pas de supprot des paramètres rôle par base de données pour la version de ce serveur.\n" +#~ msgid "unterminated quoted string\n" +#~ msgstr "chaîne entre guillemets non terminée\n" -#~ msgid "attribute" -#~ msgstr "attribut" +#~ msgid "Report bugs to .\n" +#~ msgstr "Rapportez les bogues à .\n" -#~ msgid " VERSION_NUM psql's version (numeric format)\n" -#~ msgstr " VERSION_NUM version de psql (format numérique)\n" +#~ msgid "%s\n" +#~ msgstr "%s\n" -#~ msgid " VERSION_NAME psql's version (short string)\n" -#~ msgstr " VERSION_NAME version de psql (chaîne courte)\n" +#~ msgid "could not close pipe to external command: %s\n" +#~ msgstr "n'a pas pu fermer le fichier pipe vers la commande externe : %s\n" -#~ msgid " VERSION psql's version (verbose string)\n" -#~ msgstr " VERSION version de psql (chaîne verbeuse)\n" +#~ msgid "could not stat file \"%s\": %s\n" +#~ msgstr "n'a pas pu tester le fichier « %s » : %s\n" -#~ msgid " SERVER_VERSION_NAME server's version (short string)\n" -#~ msgstr " SERVER_VERSION_NAME version du serveur (chaîne courte)\n" +#~ msgid "could not execute command \"%s\": %s\n" +#~ msgstr "n'a pas pu exécuter la commande « %s » : %s\n" -#~ msgid "Procedure" -#~ msgstr "Procédure" +#~ msgid "could not open temporary file \"%s\": %s\n" +#~ msgstr "n'a pas pu ouvrir le fichier temporaire « %s » : %s\n" -#~ msgid "normal" -#~ msgstr "normal" +#~ msgid "%s: %s\n" +#~ msgstr "%s : %s\n" -#~ msgid "from_list" -#~ msgstr "liste_from" +#~ msgid "Invalid command \\%s. Try \\? for help.\n" +#~ msgstr "Commande \\%s invalide. Essayez \\? pour l'aide-mémoire.\n" -#~ msgid "old_version" -#~ msgstr "ancienne_version" +#~ msgid "child process was terminated by signal %d" +#~ msgstr "le processus fils a été terminé par le signal %d" -#~ msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" -#~ msgstr "" -#~ " \\g [FICHIER] ou ; envoie le tampon de requêtes au serveur (et les\n" -#~ " résultats au fichier ou |tube)\n" +#~ msgid "child process was terminated by signal %s" +#~ msgstr "le processus fils a été terminé par le signal %s" -#~ msgid "Report bugs to .\n" -#~ msgstr "Rapporter les bogues à .\n" +#~ msgid "pclose failed: %s" +#~ msgstr "échec de pclose : %s" -#~ msgid "could not connect to server: %s" -#~ msgstr "n'a pas pu se connecter au serveur : %s" +#~ msgid "could not read symbolic link \"%s\"" +#~ msgstr "n'a pas pu lire le lien symbolique « %s »" -#~ msgid "lock a named relation (table, etc)" -#~ msgstr "verrouille une relation nommée (table, etc)" +#~ msgid "could not change directory to \"%s\": %s" +#~ msgstr "n'a pas pu changer le répertoire par « %s » : %s" -#~ msgid "Could not send cancel request: %s" -#~ msgstr "N'a pas pu envoyer la requête d'annulation : %s" +#~ msgid "could not identify current directory: %s" +#~ msgstr "n'a pas pu identifier le répertoire courant : %s" -#~ msgid "pclose failed: %m" -#~ msgstr "échec de pclose : %m" +#~ msgid "All connection parameters must be supplied because no database connection exists" +#~ msgstr "Tous les paramètres de connexion doivent être fournis car il n'existe pas de connexion à une base de données" + +#~ msgid "collation_name" +#~ msgstr "nom_collation" diff --git a/src/bin/scripts/po/es.po b/src/bin/scripts/po/es.po index 335561c9342db..60caeb05acc89 100644 --- a/src/bin/scripts/po/es.po +++ b/src/bin/scripts/po/es.po @@ -5,23 +5,23 @@ # # Alvaro Herrera, , 2003-2013 # Jaime Casanova, , 2005 -# Carlos Chapi , 2013-2014 +# Carlos Chapi , 2013-2014, 2021 # # msgid "" msgstr "" -"Project-Id-Version: pgscripts (PostgreSQL) 10\n" +"Project-Id-Version: pgscripts (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-14 19:48+0000\n" -"PO-Revision-Date: 2020-10-16 16:01-0300\n" -"Last-Translator: Carlos Chapi \n" +"POT-Creation-Date: 2021-06-11 16:48+0000\n" +"PO-Revision-Date: 2021-06-14 20:04-0500\n" +"Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.0.2\n" +"X-Generator: BlackCAT 1.1\n" #: ../../../src/common/logging.c:259 #, c-format @@ -86,10 +86,9 @@ msgid "%s" msgstr "%s" #: ../../fe_utils/parallel_slot.c:302 -#, fuzzy, c-format -#| msgid "too many jobs for this platform -- try %d" +#, c-format msgid "too many jobs for this platform" -msgstr "demasiados procesos para esta plataforma -- intente con %d" +msgstr "demasiados procesos para esta plataforma" #: ../../fe_utils/parallel_slot.c:522 #, c-format @@ -910,70 +909,59 @@ msgstr "" "\n" #: reindexdb.c:795 -#, fuzzy, c-format -#| msgid " -a, --all reindex all databases\n" +#, c-format msgid " -a, --all reindex all databases\n" -msgstr " -a, --all reindexar todas las bases de datos\n" +msgstr " -a, --all reindexar todas las bases de datos\n" #: reindexdb.c:796 -#, fuzzy, c-format -#| msgid " --concurrently reindex concurrently\n" +#, c-format msgid " --concurrently reindex concurrently\n" -msgstr " --concurrently reindexar en modo concurrente\n" +msgstr " --concurrently reindexar en modo concurrente\n" #: reindexdb.c:797 -#, fuzzy, c-format -#| msgid " -d, --dbname=DBNAME database to reindex\n" +#, c-format msgid " -d, --dbname=DBNAME database to reindex\n" -msgstr " -d, --dbname=DBNAME base de datos a reindexar\n" +msgstr " -d, --dbname=BASE-DE-DATOS base de datos a reindexar\n" #: reindexdb.c:799 -#, fuzzy, c-format -#| msgid " -i, --index=INDEX recreate specific index(es) only\n" +#, c-format msgid " -i, --index=INDEX recreate specific index(es) only\n" -msgstr " -i, --index=INDEX recrear sólo este o estos índice(s)\n" +msgstr " -i, --index=ÍNDICE recrear sólo este o estos índice(s)\n" #: reindexdb.c:800 -#, fuzzy, c-format -#| msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n" +#, c-format msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n" -msgstr " -j, --jobs=NUM usar esta cantidad de conexiones concurrentes\n" +msgstr " -j, --jobs=NÚM usar esta cantidad de conexiones concurrentes\n" #: reindexdb.c:801 -#, fuzzy, c-format -#| msgid " -q, --quiet don't write any messages\n" +#, c-format msgid " -q, --quiet don't write any messages\n" -msgstr " -q, --quiet no desplegar mensajes\n" +msgstr " -q, --quiet no desplegar mensajes\n" #: reindexdb.c:802 -#, fuzzy, c-format -#| msgid " -s, --system reindex system catalogs\n" +#, c-format msgid " -s, --system reindex system catalogs\n" -msgstr " -s, --system reindexa los catálogos del sistema\n" +msgstr " -s, --system reindexar los catálogos del sistema\n" #: reindexdb.c:803 -#, fuzzy, c-format -#| msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" +#, c-format msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" -msgstr " -S, --schema=ESQUEMA reindexar sólo este o estos esquemas\n" +msgstr " -S, --schema=ESQUEMA reindexar sólo este o estos esquemas\n" #: reindexdb.c:804 -#, fuzzy, c-format -#| msgid " -t, --table=TABLE reindex specific table(s) only\n" +#, c-format msgid " -t, --table=TABLE reindex specific table(s) only\n" -msgstr " -t, --table=TABLE reindexar sólo esta(s) tabla(s)\n" +msgstr " -t, --table=TABLA reindexar sólo esta(s) tabla(s)\n" #: reindexdb.c:805 -#, fuzzy, c-format -#| msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n" +#, c-format msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n" -msgstr " -D, --tablespace=TBLSPC tablespace por omisión de la base de datos\n" +msgstr " --tablespace=TABLESPACE tablespace donde se reconstruirán los índices\n" #: reindexdb.c:806 -#, fuzzy, c-format -#| msgid " -v, --verbose write a lot of output\n" +#, c-format msgid " -v, --verbose write a lot of output\n" -msgstr " -v, --verbose desplegar varios mensajes informativos\n" +msgstr " -v, --verbose desplegar varios mensajes informativos\n" #: reindexdb.c:816 #, c-format @@ -986,8 +974,8 @@ msgstr "" #: vacuumdb.c:203 #, c-format -msgid "parallel vacuum degree must be a non-negative integer" -msgstr "el grado de vacuum paralelo debe ser un entero no negativo" +msgid "parallel workers for vacuum must be greater than or equal to zero" +msgstr "el número de procesos paralelos para vacuum debe ser mayor o igual que cero" #: vacuumdb.c:223 #, c-format @@ -1006,8 +994,7 @@ msgid "cannot use the \"%s\" option when performing only analyze" msgstr "no se puede usar la opción «%s» cuando se está sólo actualizando estadísticas" #: vacuumdb.c:320 -#, fuzzy, c-format -#| msgid "cannot use the \"%s\" option when performing full" +#, c-format msgid "cannot use the \"%s\" option when performing full vacuum" msgstr "no se puede usar la opción «%s» cuando se está ejecutando vacuum full" @@ -1110,23 +1097,22 @@ msgstr " --min-xid-age=EDAD_XID edad de ID de transacción mínima de #: vacuumdb.c:1000 #, c-format msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n" -msgstr "" +msgstr " --no-index-cleanup no eliminar entradas de índice que apunten a tuplas muertas\n" #: vacuumdb.c:1001 #, c-format msgid " --no-process-toast skip the TOAST table associated with the table to vacuum\n" -msgstr "" +msgstr " --no-process-toast Omitir la tabla TOAST asociada con la tabla a la que se hará vacuum\n" #: vacuumdb.c:1002 -#, fuzzy, c-format -#| msgid " -C, --create create the target database\n" +#, c-format msgid " --no-truncate don't truncate empty pages at the end of the table\n" -msgstr " -C, --create crea la base de datos de destino\n" +msgstr " --no-truncate no truncar las páginas vacías al final de la tabla\n" #: vacuumdb.c:1003 #, c-format -msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n" -msgstr " -P, --parallel=GRADO_PARALELISMO use esta cantidad de procesos para vacuum, si están disponibles\n" +msgid " -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n" +msgstr " -P, --parallel=PROC_PARALELOS usar esta cantidad de procesos para vacuum, si están disponibles\n" #: vacuumdb.c:1004 #, c-format @@ -1191,6 +1177,9 @@ msgstr "" "\n" "Lea la descripción de la orden VACUUM de SQL para obtener mayores detalles.\n" +#~ msgid "parallel vacuum degree must be a non-negative integer" +#~ msgstr "el grado de vacuum paralelo debe ser un entero no negativo" + #~ msgid "could not connect to database %s: %s" #~ msgstr "no se pudo conectar a la base de datos %s: %s" diff --git a/src/bin/scripts/po/fr.po b/src/bin/scripts/po/fr.po index a81141a48e431..163d147225167 100644 --- a/src/bin/scripts/po/fr.po +++ b/src/bin/scripts/po/fr.po @@ -9,15 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-16 02:48+0000\n" -"PO-Revision-Date: 2021-04-16 09:09+0200\n" +"POT-Creation-Date: 2021-06-19 16:17+0000\n" +"PO-Revision-Date: 2021-06-20 17:21+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: PostgreSQLfr \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 2.4.3\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../../../src/common/logging.c:259 @@ -68,6 +68,20 @@ msgstr "Requête d'annulation envoyée\n" msgid "Could not send cancel request: " msgstr "N'a pas pu envoyer la requête d'annulation : " +#: ../../fe_utils/connect_utils.c:49 ../../fe_utils/connect_utils.c:107 +msgid "Password: " +msgstr "Mot de passe : " + +#: ../../fe_utils/connect_utils.c:92 +#, c-format +msgid "could not connect to database %s: out of memory" +msgstr "n'a pas pu se connecter à la base de données %s : plus de mémoire" + +#: ../../fe_utils/connect_utils.c:120 pg_isready.c:145 +#, c-format +msgid "%s" +msgstr "%s" + #: ../../fe_utils/parallel_slot.c:302 #, c-format msgid "too many jobs for this platform" @@ -109,16 +123,26 @@ msgstr "" msgid "invalid output format (internal error): %d" msgstr "format de sortie invalide (erreur interne) : %d" +#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 +#, c-format +msgid "query failed: %s" +msgstr "échec de la requête : %s" + +#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 +#, c-format +msgid "query was: %s" +msgstr "la requête était : %s" + #: clusterdb.c:112 clusterdb.c:131 createdb.c:123 createdb.c:142 #: createuser.c:172 createuser.c:187 dropdb.c:103 dropdb.c:112 dropdb.c:120 #: dropuser.c:94 dropuser.c:109 dropuser.c:122 pg_isready.c:96 pg_isready.c:110 -#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:245 vacuumdb.c:264 +#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:251 vacuumdb.c:270 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayer « %s --help » pour plus d'informations.\n" #: clusterdb.c:129 createdb.c:140 createuser.c:185 dropdb.c:118 dropuser.c:107 -#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:262 +#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:268 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" @@ -159,18 +183,18 @@ msgstr "" "\n" #: clusterdb.c:268 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169 -#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:988 +#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:1032 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:989 +#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:1033 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [NOMBASE]\n" #: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171 -#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:990 +#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:1034 #, c-format msgid "" "\n" @@ -220,7 +244,7 @@ msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" #: clusterdb.c:279 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178 -#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1014 +#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1059 #, c-format msgid "" "\n" @@ -229,34 +253,34 @@ msgstr "" "\n" "Options de connexion :\n" -#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1015 +#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1060 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=HOTE hôte du serveur de bases de données ou\n" " répertoire des sockets\n" -#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1016 +#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1061 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT port du serveur de bases de données\n" -#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1017 +#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1062 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=NOMUTILISATEUR nom d'utilisateur pour la connexion\n" -#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1018 +#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1063 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password empêche la demande d'un mot de passe\n" -#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1019 +#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1064 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password force la demande d'un mot de passe\n" -#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1020 +#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1065 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=NOM_BASE indique une autre base par défaut\n" @@ -271,7 +295,7 @@ msgstr "" "Lire la description de la commande SQL CLUSTER pour de plus amples détails.\n" #: clusterdb.c:287 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184 -#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1022 +#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1067 #, c-format msgid "" "\n" @@ -281,7 +305,7 @@ msgstr "" "Rapporter les bogues à <%s>.\n" #: clusterdb.c:288 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185 -#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1023 +#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1068 #, c-format msgid "%s home page: <%s>\n" msgstr "page d'accueil %s : <%s>\n" @@ -716,11 +740,6 @@ msgstr "" " -U, --username=NOMUTILISATEUR nom de l'utilisateur pour la connexion (pas\n" " celui à supprimer)\n" -#: pg_isready.c:145 -#, c-format -msgid "%s" -msgstr "%s" - #: pg_isready.c:153 #, c-format msgid "could not fetch default options" @@ -809,7 +828,7 @@ msgstr "" msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=NOMUTILISATEUR nom d'utilisateur pour la connexion\n" -#: reindexdb.c:157 vacuumdb.c:195 +#: reindexdb.c:157 vacuumdb.c:198 #, c-format msgid "number of parallel jobs must be at least 1" msgstr "le nombre maximum de jobs en parallèle doit être au moins de 1" @@ -864,8 +883,9 @@ msgstr "ne peut pas utiliser plusieurs jobs pour réindexer les catalogues syst msgid "cannot use multiple jobs to reindex indexes" msgstr "ne peut pas utiliser plusieurs jobs pour réindexer les index" -#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:451 vacuumdb.c:459 vacuumdb.c:467 -#: vacuumdb.c:475 vacuumdb.c:483 vacuumdb.c:490 vacuumdb.c:497 vacuumdb.c:504 +#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:471 vacuumdb.c:479 vacuumdb.c:487 +#: vacuumdb.c:495 vacuumdb.c:503 vacuumdb.c:511 vacuumdb.c:518 vacuumdb.c:525 +#: vacuumdb.c:532 #, c-format msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s" msgstr "ne peut utiliser l'option « %s » sur des versions serveurs plus anciennes que PostgreSQL %s" @@ -980,75 +1000,80 @@ msgstr "" "\n" "Lire la description de la commande SQL REINDEX pour plus d'informations.\n" -#: vacuumdb.c:203 +#: vacuumdb.c:206 #, c-format -msgid "parallel vacuum degree must be a non-negative integer" -msgstr "le degré de parallélisation du VACUUM doit être un entier non négatif" +msgid "parallel workers for vacuum must be greater than or equal to zero" +msgstr "le nombre de processus parallélisés pour l VACUUM doit être supérieur à zéro" -#: vacuumdb.c:223 +#: vacuumdb.c:226 #, c-format msgid "minimum transaction ID age must be at least 1" msgstr "l'identifiant de la transaction (-x) doit valoir au moins 1" -#: vacuumdb.c:231 +#: vacuumdb.c:234 #, c-format msgid "minimum multixact ID age must be at least 1" msgstr "l'âge minimum de l'identifiant de multitransaction doit au moins être 1" -#: vacuumdb.c:272 vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 -#: vacuumdb.c:302 vacuumdb.c:314 +#: vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 vacuumdb.c:302 +#: vacuumdb.c:308 vacuumdb.c:314 vacuumdb.c:326 #, c-format msgid "cannot use the \"%s\" option when performing only analyze" msgstr "ne peut pas utiliser l'option « %s » lors de l'exécution d'un ANALYZE seul" -#: vacuumdb.c:320 +#: vacuumdb.c:332 #, c-format msgid "cannot use the \"%s\" option when performing full vacuum" msgstr "ne peut pas utiliser l'option « %s » lors de l'exécution d'un VACUUM FULL" -#: vacuumdb.c:343 +#: vacuumdb.c:341 +#, c-format +msgid "cannot use the \"%s\" option with the \"%s\" option" +msgstr "ne peut pas utiliser l'option « %s » lors de l'option « %s »" + +#: vacuumdb.c:363 #, c-format msgid "cannot vacuum all databases and a specific one at the same time" msgstr "ne peut pas exécuter VACUUM sur toutes les bases de données et sur une base spécifique en même temps" -#: vacuumdb.c:348 +#: vacuumdb.c:368 #, c-format msgid "cannot vacuum specific table(s) in all databases" msgstr "ne peut pas exécuter VACUUM sur une(des) table(s) spécifique(s) dans toutes les bases de données" -#: vacuumdb.c:438 +#: vacuumdb.c:458 msgid "Generating minimal optimizer statistics (1 target)" msgstr "Génération de statistiques minimales pour l'optimiseur (une cible)" -#: vacuumdb.c:439 +#: vacuumdb.c:459 msgid "Generating medium optimizer statistics (10 targets)" msgstr "Génération de statistiques moyennes pour l'optimiseur (dix cibles)" -#: vacuumdb.c:440 +#: vacuumdb.c:460 msgid "Generating default (full) optimizer statistics" msgstr "Génération de statistiques complètes pour l'optimiseur" -#: vacuumdb.c:512 +#: vacuumdb.c:540 #, c-format msgid "%s: processing database \"%s\": %s\n" msgstr "%s : traitement de la base de données « %s » %s\n" -#: vacuumdb.c:515 +#: vacuumdb.c:543 #, c-format msgid "%s: vacuuming database \"%s\"\n" msgstr "%s : exécution de VACUUM sur la base de données « %s »\n" -#: vacuumdb.c:976 +#: vacuumdb.c:1020 #, c-format msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s" msgstr "l'exécution de VACUUM sur la table « %s » dans la base de données « %s » a échoué : %s" -#: vacuumdb.c:979 +#: vacuumdb.c:1023 #, c-format msgid "vacuuming of database \"%s\" failed: %s" msgstr "l'exécution de VACUUM sur la base de données « %s » a échoué : %s" -#: vacuumdb.c:987 +#: vacuumdb.c:1031 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -1057,115 +1082,120 @@ msgstr "" "%s nettoie et analyse une base de données PostgreSQL.\n" "\n" -#: vacuumdb.c:991 +#: vacuumdb.c:1035 #, c-format msgid " -a, --all vacuum all databases\n" msgstr "" " -a, --all exécute VACUUM sur toutes les bases de\n" " données\n" -#: vacuumdb.c:992 +#: vacuumdb.c:1036 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=NOMBASE exécute VACUUM sur cette base de données\n" -#: vacuumdb.c:993 +#: vacuumdb.c:1037 #, c-format msgid " --disable-page-skipping disable all page-skipping behavior\n" msgstr " --disable-page-skipping désactive le comportement page-skipping\n" -#: vacuumdb.c:994 +#: vacuumdb.c:1038 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo affiche les commandes envoyées au serveur\n" -#: vacuumdb.c:995 +#: vacuumdb.c:1039 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full exécute VACUUM en mode FULL\n" -#: vacuumdb.c:996 +#: vacuumdb.c:1040 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr "" " -F, --freeze gèle les informations de transactions des\n" " lignes\n" -#: vacuumdb.c:997 +#: vacuumdb.c:1041 #, c-format msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n" msgstr "" " -j, --jobs=NUMERO utilise ce nombre de connexions concurrentes pour\n" " le VACUUM\n" -#: vacuumdb.c:998 +#: vacuumdb.c:1042 #, c-format msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n" msgstr " --min-mxid-age=MXID_AGE âge minimum des identifiants de multitransactions pour les tables à nettoyer\n" -#: vacuumdb.c:999 +#: vacuumdb.c:1043 #, c-format msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n" msgstr " --min-xid-age=XID_AGE âge minimum des identifiants de transactions pour les tables à nettoyer\n" -#: vacuumdb.c:1000 +#: vacuumdb.c:1044 #, c-format msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n" msgstr " --no-index-cleanup ne supprime pas les enregistrements dans l'index pointant vers des lignes mortes\n" -#: vacuumdb.c:1001 +#: vacuumdb.c:1045 +#, c-format +msgid " --force-index-cleanup always remove index entries that point to dead tuples\n" +msgstr " --force-index-cleanup supprime toujours les enregistrements dans l'index pointant vers des lignes mortes\n" + +#: vacuumdb.c:1046 #, c-format msgid " --no-process-toast skip the TOAST table associated with the table to vacuum\n" msgstr " --no-process-toast ignore la table TOAST associée à la table à traiter\n" -#: vacuumdb.c:1002 +#: vacuumdb.c:1047 #, c-format msgid " --no-truncate don't truncate empty pages at the end of the table\n" msgstr " --no-truncate ni supprime pas les pages vides à la fin de la table\n" -#: vacuumdb.c:1003 +#: vacuumdb.c:1048 #, c-format -msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n" -msgstr " -P, --parallel=DEGRE_PARALLEL utilise ce nombre de processus en tâche de fond pour le VACUUM, si possible\n" +msgid " -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n" +msgstr " -P, --parallel=PARALLEL_WORKERS utilise ce nombre de processus en tâche de fond pour le VACUUM, si possible\n" -#: vacuumdb.c:1004 +#: vacuumdb.c:1049 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet n'écrit aucun message\n" -#: vacuumdb.c:1005 +#: vacuumdb.c:1050 #, c-format msgid " --skip-locked skip relations that cannot be immediately locked\n" msgstr " --skip-locked ignore les relations qui ne peuvent pas être verrouillées immédiatement\n" -#: vacuumdb.c:1006 +#: vacuumdb.c:1051 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr " -t, --table='TABLE[(COLONNES)]' exécute VACUUM sur cette (ces) tables\n" -#: vacuumdb.c:1007 +#: vacuumdb.c:1052 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose mode verbeux\n" -#: vacuumdb.c:1008 +#: vacuumdb.c:1053 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: vacuumdb.c:1009 +#: vacuumdb.c:1054 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze met à jour les statistiques de l'optimiseur\n" -#: vacuumdb.c:1010 +#: vacuumdb.c:1055 #, c-format msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n" msgstr "" " -Z, --analyze-only met seulement à jour les statistiques de\n" " l'optimiseur ; pas de VACUUM\n" -#: vacuumdb.c:1011 +#: vacuumdb.c:1056 #, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in multiple\n" @@ -1175,12 +1205,12 @@ msgstr "" " l'optimiseur, en plusieurs étapes pour de\n" " meilleurs résultats ; pas de VACUUM\n" -#: vacuumdb.c:1013 +#: vacuumdb.c:1058 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: vacuumdb.c:1021 +#: vacuumdb.c:1066 #, c-format msgid "" "\n" @@ -1189,24 +1219,15 @@ msgstr "" "\n" "Lire la description de la commande SQL VACUUM pour plus d'informations.\n" +#~ msgid "parallel vacuum degree must be a non-negative integer" +#~ msgstr "le degré de parallélisation du VACUUM doit être un entier non négatif" + #~ msgid "Could not send cancel request: %s" #~ msgstr "N'a pas pu envoyer la requête d'annulation : %s" -#~ msgid "Password: " -#~ msgstr "Mot de passe : " - -#~ msgid "could not connect to database %s: out of memory" -#~ msgstr "n'a pas pu se connecter à la base de données %s : plus de mémoire" - #~ msgid "could not connect to database %s: %s" #~ msgstr "n'a pas pu se connecter à la base de données %s : %s" -#~ msgid "query failed: %s" -#~ msgstr "échec de la requête : %s" - -#~ msgid "query was: %s" -#~ msgstr "la requête était : %s" - #~ msgid "%s: too many command-line arguments (first is \"%s\")\n" #~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n" diff --git a/src/interfaces/ecpg/preproc/po/es.po b/src/interfaces/ecpg/preproc/po/es.po index 7f89bee56ebf3..9d3a2c90feba4 100644 --- a/src/interfaces/ecpg/preproc/po/es.po +++ b/src/interfaces/ecpg/preproc/po/es.po @@ -6,14 +6,14 @@ # Emanuel Calvo Franco , 2009. # Alvaro Herrera , 2009-2012 # Franco Catena, , 2009 -# Carlos Chapi , 2018 +# Carlos Chapi , 2018-2021 # msgid "" msgstr "" "Project-Id-Version: ecpg (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2021-05-14 19:39+0000\n" -"PO-Revision-Date: 2020-06-08 13:04-0400\n" +"PO-Revision-Date: 2021-05-19 22:22-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -21,7 +21,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: BlackCAT 1.0\n" +"X-Generator: Poedit 2.4.2\n" #: descriptor.c:64 #, c-format @@ -257,10 +257,9 @@ msgid "invalid bit string literal" msgstr "cadena de bits no válida" #: pgc.l:607 -#, fuzzy, c-format -#| msgid "invalid bit string literal" +#, c-format msgid "invalid hex string literal" -msgstr "cadena de bits no válida" +msgstr "cadena hexadecimal no válida" #: pgc.l:625 #, c-format @@ -444,10 +443,9 @@ msgid "COPY FROM STDIN is not implemented" msgstr "COPY FROM STDIN no está implementado" #: preproc.y:10031 preproc.y:17257 -#, fuzzy, c-format -#| msgid "%s cannot be used as a role name here" +#, c-format msgid "\"database\" cannot be used as cursor name in INFORMIX mode" -msgstr "%s no puede ser usado como nombre de rol aquí" +msgstr "no se puede usar «database» como nombre de cursor en modo INFORMIX" #: preproc.y:10038 preproc.y:17267 #, c-format @@ -525,10 +523,9 @@ msgid "unrecognized token \"%s\"" msgstr "elemento «%s» no reconocido" #: preproc.y:17219 -#, fuzzy, c-format -#| msgid "type \"%s\" is already defined" +#, c-format msgid "name \"%s\" is already declared" -msgstr "el tipo «%s» ya está definido" +msgstr "el nombre «%s» ya está declarado" #: preproc.y:17485 #, c-format diff --git a/src/interfaces/ecpg/preproc/po/fr.po b/src/interfaces/ecpg/preproc/po/fr.po index d91efe916f904..9519cb263e7f3 100644 --- a/src/interfaces/ecpg/preproc/po/fr.po +++ b/src/interfaces/ecpg/preproc/po/fr.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-14 05:39+0000\n" -"PO-Revision-Date: 2021-04-14 08:55+0200\n" +"POT-Creation-Date: 2021-05-28 00:39+0000\n" +"PO-Revision-Date: 2021-05-28 15:22+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: PostgreSQLfr \n" "Language: fr\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 2.4.3\n" #: descriptor.c:64 #, c-format @@ -223,12 +223,12 @@ msgstr "fin de la liste de recherche\n" msgid "%s: no input files specified\n" msgstr "%s : aucun fichier précisé en entrée\n" -#: ecpg.c:476 +#: ecpg.c:477 #, c-format msgid "cursor \"%s\" has been declared but not opened" msgstr "le curseur « %s » est déclaré mais non ouvert" -#: ecpg.c:489 preproc.y:130 +#: ecpg.c:490 preproc.y:130 #, c-format msgid "could not remove output file \"%s\"\n" msgstr "n'a pas pu supprimer le fichier « %s » en sortie\n" @@ -379,61 +379,61 @@ msgstr "initialiseur non autorisé dans la définition du type" msgid "type name \"string\" is reserved in Informix mode" msgstr "le nom du type « string » est réservé dans le mode Informix" -#: preproc.y:552 preproc.y:17675 +#: preproc.y:552 preproc.y:17695 #, c-format msgid "type \"%s\" is already defined" msgstr "le type « %s » est déjà défini" -#: preproc.y:577 preproc.y:18318 preproc.y:18643 variable.c:621 +#: preproc.y:577 preproc.y:18338 preproc.y:18663 variable.c:621 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "" "les tableaux multi-dimensionnels pour les types de données simples ne sont\n" "pas supportés" -#: preproc.y:1749 +#: preproc.y:1753 #, c-format msgid "AT option not allowed in CLOSE DATABASE statement" msgstr "option AT non autorisée dans une instruction CLOSE DATABASE" -#: preproc.y:1997 +#: preproc.y:2001 #, c-format msgid "AT option not allowed in CONNECT statement" msgstr "option AT non autorisée dans une instruction CONNECT" -#: preproc.y:2035 +#: preproc.y:2039 #, c-format msgid "AT option not allowed in DISCONNECT statement" msgstr "option AT non autorisée dans une instruction DISCONNECT" -#: preproc.y:2090 +#: preproc.y:2094 #, c-format msgid "AT option not allowed in SET CONNECTION statement" msgstr "option AT non autorisée dans une instruction SET CONNECTION" -#: preproc.y:2112 +#: preproc.y:2116 #, c-format msgid "AT option not allowed in TYPE statement" msgstr "option AT non autorisée dans une instruction TYPE" -#: preproc.y:2121 +#: preproc.y:2125 #, c-format msgid "AT option not allowed in VAR statement" msgstr "option AT non autorisée dans une instruction VAR" -#: preproc.y:2128 +#: preproc.y:2132 #, c-format msgid "AT option not allowed in WHENEVER statement" msgstr "option AT non autorisée dans une instruction WHENEVER" -#: preproc.y:2205 preproc.y:2377 preproc.y:2382 preproc.y:2505 preproc.y:4129 preproc.y:4793 -#: preproc.y:5326 preproc.y:5664 preproc.y:5964 preproc.y:7532 preproc.y:9100 preproc.y:9105 -#: preproc.y:11925 +#: preproc.y:2209 preproc.y:2381 preproc.y:2386 preproc.y:2509 preproc.y:4141 preproc.y:4805 +#: preproc.y:5338 preproc.y:5676 preproc.y:5976 preproc.y:7544 preproc.y:9112 preproc.y:9117 +#: preproc.y:11945 #, c-format msgid "unsupported feature will be passed to server" msgstr "la fonctionnalité non supportée sera passée au serveur" -#: preproc.y:2763 +#: preproc.y:2767 #, c-format msgid "SHOW ALL is not implemented" msgstr "SHOW ALL n'est pas implanté" @@ -443,139 +443,139 @@ msgstr "SHOW ALL n'est pas implanté" msgid "COPY FROM STDIN is not implemented" msgstr "COPY FROM STDIN n'est pas implanté" -#: preproc.y:10024 preproc.y:17250 +#: preproc.y:10044 preproc.y:17270 #, c-format msgid "\"database\" cannot be used as cursor name in INFORMIX mode" msgstr "« database » ne peut pas être utilisé comme nom de curseur dans le mode INFORMIX" -#: preproc.y:10031 preproc.y:17260 +#: preproc.y:10051 preproc.y:17280 #, c-format msgid "using variable \"%s\" in different declare statements is not supported" msgstr "" "l'utilisation de la variable « %s » dans différentes instructions de déclaration\n" "n'est pas supportée" -#: preproc.y:10033 preproc.y:17262 +#: preproc.y:10053 preproc.y:17282 #, c-format msgid "cursor \"%s\" is already defined" msgstr "le curseur « %s » est déjà défini" -#: preproc.y:10507 +#: preproc.y:10527 #, c-format msgid "no longer supported LIMIT #,# syntax passed to server" msgstr "la syntaxe obsolète LIMIT #,# a été passée au serveur" -#: preproc.y:10840 preproc.y:10847 +#: preproc.y:10860 preproc.y:10867 #, c-format msgid "subquery in FROM must have an alias" msgstr "la sous-requête du FROM doit avoir un alias" -#: preproc.y:16942 preproc.y:16949 +#: preproc.y:16962 preproc.y:16969 #, c-format msgid "CREATE TABLE AS cannot specify INTO" msgstr "CREATE TABLE AS ne peut pas indiquer INTO" -#: preproc.y:16985 +#: preproc.y:17005 #, c-format msgid "expected \"@\", found \"%s\"" msgstr "« @ » attendu, « %s » trouvé" -#: preproc.y:16997 +#: preproc.y:17017 #, c-format msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" msgstr "" "seuls les protocoles « tcp » et « unix » et les types de base de données\n" "« postgresql » sont supportés" -#: preproc.y:17000 +#: preproc.y:17020 #, c-format msgid "expected \"://\", found \"%s\"" msgstr "« :// » attendu, « %s » trouvé" -#: preproc.y:17005 +#: preproc.y:17025 #, c-format msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" msgstr "les sockets de domaine Unix fonctionnent seulement sur « localhost », mais pas sur « %s »" -#: preproc.y:17031 +#: preproc.y:17051 #, c-format msgid "expected \"postgresql\", found \"%s\"" msgstr "« postgresql » attendu, « %s » trouvé" -#: preproc.y:17034 +#: preproc.y:17054 #, c-format msgid "invalid connection type: %s" msgstr "type de connexion invalide : %s" -#: preproc.y:17043 +#: preproc.y:17063 #, c-format msgid "expected \"@\" or \"://\", found \"%s\"" msgstr "« @ » ou « :// » attendu, « %s » trouvé" -#: preproc.y:17118 preproc.y:17136 +#: preproc.y:17138 preproc.y:17156 #, c-format msgid "invalid data type" msgstr "type de données invalide" -#: preproc.y:17147 preproc.y:17164 +#: preproc.y:17167 preproc.y:17184 #, c-format msgid "incomplete statement" msgstr "instruction incomplète" -#: preproc.y:17150 preproc.y:17167 +#: preproc.y:17170 preproc.y:17187 #, c-format msgid "unrecognized token \"%s\"" msgstr "jeton « %s » non reconnu" -#: preproc.y:17212 +#: preproc.y:17232 #, c-format -msgid "declared name %s is already defined" -msgstr "le nom déclaré %s est déjà défini" +msgid "name \"%s\" is already declared" +msgstr "le nom « %s » est déjà défini" -#: preproc.y:17478 +#: preproc.y:17498 #, c-format msgid "only data types numeric and decimal have precision/scale argument" msgstr "" "seuls les types de données numeric et decimal ont des arguments de\n" "précision et d'échelle" -#: preproc.y:17490 +#: preproc.y:17510 #, c-format msgid "interval specification not allowed here" msgstr "interval de spécification non autorisé ici" -#: preproc.y:17650 preproc.y:17702 +#: preproc.y:17670 preproc.y:17722 #, c-format msgid "too many levels in nested structure/union definition" msgstr "trop de niveaux dans la définition de structure/union imbriquée" -#: preproc.y:17825 +#: preproc.y:17845 #, c-format msgid "pointers to varchar are not implemented" msgstr "les pointeurs sur des chaînes de caractères (varchar) ne sont pas implantés" -#: preproc.y:18012 preproc.y:18037 +#: preproc.y:18032 preproc.y:18057 #, c-format msgid "using unsupported DESCRIBE statement" msgstr "utilisation de l'instruction DESCRIBE non supporté" -#: preproc.y:18284 +#: preproc.y:18304 #, c-format msgid "initializer not allowed in EXEC SQL VAR command" msgstr "initialiseur non autorisé dans la commande EXEC SQL VAR" -#: preproc.y:18601 +#: preproc.y:18621 #, c-format msgid "arrays of indicators are not allowed on input" msgstr "les tableaux d'indicateurs ne sont pas autorisés en entrée" -#: preproc.y:18788 +#: preproc.y:18808 #, c-format msgid "operator not allowed in variable definition" msgstr "opérateur non autorisé dans la définition de la variable" #. translator: %s is typically the translation of "syntax error" -#: preproc.y:18829 +#: preproc.y:18849 #, c-format msgid "%s at or near \"%s\"" msgstr "%s sur ou près de « %s »" @@ -715,30 +715,33 @@ msgstr "ce type de données ne supporte pas les pointeurs de pointeur" msgid "multidimensional arrays for structures are not supported" msgstr "les tableaux multidimensionnels ne sont pas supportés pour les structures" -#~ msgid "COPY TO STDIN is not possible" -#~ msgstr "COPY TO STDIN n'est pas possible" +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Rapporter les bogues à .\n" -#~ msgid "COPY FROM STDOUT is not possible" -#~ msgstr "COPY FROM STDOUT n'est pas possible" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version affiche la version et quitte\n" -#~ msgid "NEW used in query that is not in a rule" -#~ msgstr "NEW utilisé dans une requête qui n'est pas dans une règle" +#~ msgid "AT option not allowed in DEALLOCATE statement" +#~ msgstr "option AT non autorisée dans une instruction DEALLOCATE" + +#~ msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" +#~ msgstr "une contrainte déclarée INITIALLY DEFERRED doit être DEFERRABLE" #~ msgid "OLD used in query that is not in a rule" #~ msgstr "OLD utilisé dans une requête qui n'est pas dans une règle" -#~ msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" -#~ msgstr "une contrainte déclarée INITIALLY DEFERRED doit être DEFERRABLE" +#~ msgid "NEW used in query that is not in a rule" +#~ msgstr "NEW utilisé dans une requête qui n'est pas dans une règle" -#~ msgid "AT option not allowed in DEALLOCATE statement" -#~ msgstr "option AT non autorisée dans une instruction DEALLOCATE" +#~ msgid "COPY FROM STDOUT is not possible" +#~ msgstr "COPY FROM STDOUT n'est pas possible" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version et quitte\n" +#~ msgid "COPY TO STDIN is not possible" +#~ msgstr "COPY TO STDIN n'est pas possible" -#~ msgid "" -#~ "\n" -#~ "Report bugs to .\n" -#~ msgstr "" -#~ "\n" -#~ "Rapporter les bogues à .\n" +#~ msgid "declared name %s is already defined" +#~ msgstr "le nom déclaré %s est déjà défini" diff --git a/src/interfaces/libpq/po/el.po b/src/interfaces/libpq/po/el.po index 93fe8d6f69b62..b55d9d75bb178 100644 --- a/src/interfaces/libpq/po/el.po +++ b/src/interfaces/libpq/po/el.po @@ -1,123 +1,128 @@ # Greek message translation file for libpq # Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the libpq (PostgreSQL) package. +# Georgios Kokolatos , 2021 # msgid "" msgstr "" "Project-Id-Version: libpq (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-03-12 17:39+0000\n" +"POT-Creation-Date: 2021-05-25 05:39+0000\n" "PO-Revision-Date: 2021-04-23 09:35+0200\n" +"Last-Translator: Georgios Kokolatos \n" "Language-Team: \n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.4.2\n" -"Last-Translator: Georgios Kokolatos \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Language: el\n" -#: fe-auth-scram.c:212 +#: fe-auth-scram.c:213 msgid "malformed SCRAM message (empty message)\n" msgstr "κακοσχηματισμένο μήνυμα SCRAM (κενό μήνυμα)\n" -#: fe-auth-scram.c:218 +#: fe-auth-scram.c:219 msgid "malformed SCRAM message (length mismatch)\n" msgstr "κακοσχηματισμένο μήνυμα SCRAM (αναντιστοιχία μήκους)\n" -#: fe-auth-scram.c:265 +#: fe-auth-scram.c:263 +#, fuzzy +#| msgid "could not get server version" +msgid "could not verify server signature\n" +msgstr "δεν ήταν δυνατή η απόκτηση έκδοσης διακομιστή" + +#: fe-auth-scram.c:270 msgid "incorrect server signature\n" msgstr "λανθασμένη υπογραφή διακομιστή\n" -#: fe-auth-scram.c:274 +#: fe-auth-scram.c:279 msgid "invalid SCRAM exchange state\n" msgstr "άκυρη κατάσταση ανταλλαγής SCRAM\n" -#: fe-auth-scram.c:296 +#: fe-auth-scram.c:306 #, c-format msgid "malformed SCRAM message (attribute \"%c\" expected)\n" msgstr "κακοσχηματισμένο μήνυμα SCRAM (αναμένεται χαρακτηριστικό \"%c\")\n" -#: fe-auth-scram.c:305 +#: fe-auth-scram.c:315 #, c-format -msgid "" -"malformed SCRAM message (expected character \"=\" for attribute \"%c\")\n" -msgstr "" -"κακοσχηματισμένο μήνυμα SCRAM (αναμένεται χαρακτήρας “=“ για το " -"χαρακτηριστικό \"%c\")\n" +msgid "malformed SCRAM message (expected character \"=\" for attribute \"%c\")\n" +msgstr "κακοσχηματισμένο μήνυμα SCRAM (αναμένεται χαρακτήρας “=“ για το χαρακτηριστικό \"%c\")\n" -#: fe-auth-scram.c:346 +#: fe-auth-scram.c:356 msgid "could not generate nonce\n" msgstr "δεν δύναται να δημιουργήσει nonce\n" -#: fe-auth-scram.c:356 fe-auth-scram.c:431 fe-auth-scram.c:579 -#: fe-auth-scram.c:600 fe-auth-scram.c:626 fe-auth-scram.c:641 -#: fe-auth-scram.c:691 fe-auth-scram.c:725 fe-auth.c:289 fe-auth.c:359 -#: fe-auth.c:394 fe-auth.c:611 fe-auth.c:770 fe-auth.c:1129 fe-auth.c:1277 -#: fe-connect.c:892 fe-connect.c:1419 fe-connect.c:1595 fe-connect.c:2200 -#: fe-connect.c:2223 fe-connect.c:2957 fe-connect.c:4605 fe-connect.c:4861 -#: fe-connect.c:4980 fe-connect.c:5233 fe-connect.c:5313 fe-connect.c:5412 -#: fe-connect.c:5668 fe-connect.c:5697 fe-connect.c:5769 fe-connect.c:5793 -#: fe-connect.c:5811 fe-connect.c:5912 fe-connect.c:5921 fe-connect.c:6277 -#: fe-connect.c:6427 fe-exec.c:2747 fe-exec.c:3494 fe-exec.c:3659 -#: fe-gssapi-common.c:111 fe-lobj.c:895 fe-protocol2.c:1207 fe-protocol3.c:961 -#: fe-protocol3.c:1665 fe-secure-common.c:110 fe-secure-gssapi.c:504 -#: fe-secure-openssl.c:440 fe-secure-openssl.c:1091 +#: fe-auth-scram.c:366 fe-auth-scram.c:441 fe-auth-scram.c:595 +#: fe-auth-scram.c:616 fe-auth-scram.c:642 fe-auth-scram.c:657 +#: fe-auth-scram.c:707 fe-auth-scram.c:746 fe-auth.c:290 fe-auth.c:362 +#: fe-auth.c:398 fe-auth.c:615 fe-auth.c:774 fe-auth.c:1132 fe-auth.c:1282 +#: fe-connect.c:912 fe-connect.c:1456 fe-connect.c:1625 fe-connect.c:2977 +#: fe-connect.c:4658 fe-connect.c:4919 fe-connect.c:5038 fe-connect.c:5282 +#: fe-connect.c:5364 fe-connect.c:5463 fe-connect.c:5719 fe-connect.c:5748 +#: fe-connect.c:5820 fe-connect.c:5844 fe-connect.c:5862 fe-connect.c:5963 +#: fe-connect.c:5972 fe-connect.c:6330 fe-connect.c:6480 fe-exec.c:1209 +#: fe-exec.c:2993 fe-exec.c:3145 fe-exec.c:3918 fe-exec.c:4083 +#: fe-gssapi-common.c:110 fe-lobj.c:881 fe-protocol3.c:1016 fe-protocol3.c:1724 +#: fe-secure-common.c:110 fe-secure-gssapi.c:504 fe-secure-openssl.c:440 +#: fe-secure-openssl.c:1129 msgid "out of memory\n" msgstr "έλλειψη μνήμης\n" -#: fe-auth-scram.c:364 +#: fe-auth-scram.c:374 msgid "could not encode nonce\n" msgstr "δεν δύναται να κωδικοποιήσει nonce\n" #: fe-auth-scram.c:563 +#, fuzzy +#| msgid "could not encode client proof\n" +msgid "could not calculate client proof\n" +msgstr "δεν δύναται να κωδικοποιήσει την απόδειξη του πελάτη\n" + +#: fe-auth-scram.c:579 msgid "could not encode client proof\n" msgstr "δεν δύναται να κωδικοποιήσει την απόδειξη του πελάτη\n" -#: fe-auth-scram.c:618 +#: fe-auth-scram.c:634 msgid "invalid SCRAM response (nonce mismatch)\n" msgstr "μη έγκυρη απόκριση SCRAM (ασυμφωνία nonce)\n" -#: fe-auth-scram.c:651 +#: fe-auth-scram.c:667 msgid "malformed SCRAM message (invalid salt)\n" msgstr "κακοσχηματισμένο μήνυμα SCRAM (άκυρο salt)\n" -#: fe-auth-scram.c:665 +#: fe-auth-scram.c:681 msgid "malformed SCRAM message (invalid iteration count)\n" msgstr "κακοσχηματισμένο μήνυμα SCRAM (άκυρη μέτρηση επαναλήψεων)\n" -#: fe-auth-scram.c:671 +#: fe-auth-scram.c:687 msgid "malformed SCRAM message (garbage at end of server-first-message)\n" -msgstr "" -"κακοσχηματισμένο μήνυμα SCRAM (σκουπίδια στο τέλος του πρώτου-μηνύματος-" -"διακομιστή)\n" +msgstr "κακοσχηματισμένο μήνυμα SCRAM (σκουπίδια στο τέλος του πρώτου-μηνύματος-διακομιστή)\n" -#: fe-auth-scram.c:702 +#: fe-auth-scram.c:723 #, c-format msgid "error received from server in SCRAM exchange: %s\n" msgstr "ελήφθει σφάλμα από τον διακομιστή κατά την ανταλλαγή SCRAM: %s\n" -#: fe-auth-scram.c:718 +#: fe-auth-scram.c:739 msgid "malformed SCRAM message (garbage at end of server-final-message)\n" -msgstr "" -"κακοσχηματισμένο μήνυμα SCRAM (σκουπίδια στο τέλος του τελικού-μηνύματος-" -"διακομιστή)\n" +msgstr "κακοσχηματισμένο μήνυμα SCRAM (σκουπίδια στο τέλος του τελικού-μηνύματος-διακομιστή)\n" -#: fe-auth-scram.c:737 +#: fe-auth-scram.c:758 msgid "malformed SCRAM message (invalid server signature)\n" msgstr "κακοσχηματισμένο μήνυμα SCRAM (άκυρη υπογραφή διακομιστή)\n" #: fe-auth.c:76 #, c-format msgid "out of memory allocating GSSAPI buffer (%d)\n" -msgstr "" -"η μνήμη δεν επαρκεί για την εκχώρηση της ενδιάμεσης μνήμης του GSSAPI (%d)\n" +msgstr "η μνήμη δεν επαρκεί για την εκχώρηση της ενδιάμεσης μνήμης του GSSAPI (%d)\n" #: fe-auth.c:131 msgid "GSSAPI continuation error" msgstr "σφάλμα συνέχισης GSSAPI" -#: fe-auth.c:158 fe-auth.c:388 fe-gssapi-common.c:98 fe-secure-common.c:98 +#: fe-auth.c:158 fe-auth.c:391 fe-gssapi-common.c:97 fe-secure-common.c:98 msgid "host name must be specified\n" msgstr "πρέπει να καθοριστεί το όνομα κεντρικού υπολογιστή\n" @@ -128,833 +133,716 @@ msgstr "διπλότυπη αίτηση ελέγχου ταυτότητας GSS\ #: fe-auth.c:230 #, c-format msgid "out of memory allocating SSPI buffer (%d)\n" -msgstr "" -"η μνήμη δεν επαρκεί για την εκχώρηση της ενδιάμεσης μνήμης του SSPI (%d)\n" +msgstr "η μνήμη δεν επαρκεί για την εκχώρηση της ενδιάμεσης μνήμης του SSPI (%d)\n" #: fe-auth.c:278 msgid "SSPI continuation error" msgstr "σφάλμα συνέχισης SSPI" -#: fe-auth.c:349 +#: fe-auth.c:351 msgid "duplicate SSPI authentication request\n" msgstr "διπλότυπη αίτηση ελέγχου ταυτότητας SSPI\n" -#: fe-auth.c:374 +#: fe-auth.c:377 msgid "could not acquire SSPI credentials" msgstr "δεν δύναται η απόκτηση διαπιστευτηρίων SSPI" -#: fe-auth.c:429 +#: fe-auth.c:433 msgid "channel binding required, but SSL not in use\n" msgstr "απαιτείται σύνδεση καναλιού, αλλά δεν χρησιμοποιείται SSL\n" -#: fe-auth.c:436 +#: fe-auth.c:440 msgid "duplicate SASL authentication request\n" msgstr "διπλότυπη αίτηση ελέγχου ταυτότητας SASL\n" -#: fe-auth.c:492 +#: fe-auth.c:496 msgid "channel binding is required, but client does not support it\n" msgstr "απαιτείται σύνδεση καναλιού, αλλά ο πελάτης δεν την υποστηρίζει\n" -#: fe-auth.c:509 -msgid "" -"server offered SCRAM-SHA-256-PLUS authentication over a non-SSL connection\n" -msgstr "" -"ο διακομιστής προσέφερε έλεγχο ταυτότητας SCRAM-SHA-256-PLUS μέσω σύνδεσης " -"που δεν είναι SSL\n" +#: fe-auth.c:513 +msgid "server offered SCRAM-SHA-256-PLUS authentication over a non-SSL connection\n" +msgstr "ο διακομιστής προσέφερε έλεγχο ταυτότητας SCRAM-SHA-256-PLUS μέσω σύνδεσης που δεν είναι SSL\n" -#: fe-auth.c:521 +#: fe-auth.c:525 msgid "none of the server's SASL authentication mechanisms are supported\n" -msgstr "" -"δεν υποστηρίζεται κανένας από τους μηχανισμούς ελέγχου ταυτότητας SASL του " -"διακομιστή\n" +msgstr "δεν υποστηρίζεται κανένας από τους μηχανισμούς ελέγχου ταυτότητας SASL του διακομιστή\n" -#: fe-auth.c:529 -msgid "" -"channel binding is required, but server did not offer an authentication " -"method that supports channel binding\n" -msgstr "" -"απαιτείται σύνδεση καναλιού, αλλά ο διακομιστής δεν προσέφερε καμία μέθοδο " -"ελέγχου ταυτότητας που να υποστηρίζει σύνδεση καναλιού\n" +#: fe-auth.c:533 +msgid "channel binding is required, but server did not offer an authentication method that supports channel binding\n" +msgstr "απαιτείται σύνδεση καναλιού, αλλά ο διακομιστής δεν προσέφερε καμία μέθοδο ελέγχου ταυτότητας που να υποστηρίζει σύνδεση καναλιού\n" -#: fe-auth.c:635 +#: fe-auth.c:639 #, c-format msgid "out of memory allocating SASL buffer (%d)\n" -msgstr "" -"η μνήμη δεν επαρκεί για την εκχώρηση της ενδιάμεσης μνήμης του SASL (%d)\n" +msgstr "η μνήμη δεν επαρκεί για την εκχώρηση της ενδιάμεσης μνήμης του SASL (%d)\n" -#: fe-auth.c:660 -msgid "" -"AuthenticationSASLFinal received from server, but SASL authentication was " -"not completed\n" -msgstr "" -"παραλήφθηκε AuthenticationSASLFinal από το διακομιστή, αλλά ο έλεγχος " -"ταυτότητας SASL έχει ολοκληρωθεί\n" +#: fe-auth.c:664 +msgid "AuthenticationSASLFinal received from server, but SASL authentication was not completed\n" +msgstr "παραλήφθηκε AuthenticationSASLFinal από το διακομιστή, αλλά ο έλεγχος ταυτότητας SASL έχει ολοκληρωθεί\n" -#: fe-auth.c:737 +#: fe-auth.c:741 msgid "SCM_CRED authentication method not supported\n" msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης SCM_CRED\n" #: fe-auth.c:836 -msgid "" -"channel binding required, but server authenticated client without channel " -"binding\n" -msgstr "" -"απαιτείται σύνδεση καναλιού, αλλά ο διακομιστής πιστοποίησε τον πελάτη χωρίς " -"σύνδεση καναλιού\n" +msgid "channel binding required, but server authenticated client without channel binding\n" +msgstr "απαιτείται σύνδεση καναλιού, αλλά ο διακομιστής πιστοποίησε τον πελάτη χωρίς σύνδεση καναλιού\n" #: fe-auth.c:842 -msgid "" -"channel binding required but not supported by server's authentication " -"request\n" -msgstr "" -"απαιτείται σύνδεση καναλιού αλλά αυτή δεν υποστηρίζεται από την αίτηση " -"ελέγχου ταυτότητας του διακομιστή\n" +msgid "channel binding required but not supported by server's authentication request\n" +msgstr "απαιτείται σύνδεση καναλιού αλλά αυτή δεν υποστηρίζεται από την αίτηση ελέγχου ταυτότητας του διακομιστή\n" -#: fe-auth.c:875 +#: fe-auth.c:877 msgid "Kerberos 4 authentication not supported\n" msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης Kerberos 4\n" -#: fe-auth.c:880 +#: fe-auth.c:882 msgid "Kerberos 5 authentication not supported\n" msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης Kerberos 5\n" -#: fe-auth.c:951 +#: fe-auth.c:953 msgid "GSSAPI authentication not supported\n" msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης GSSAPI\n" -#: fe-auth.c:983 +#: fe-auth.c:985 msgid "SSPI authentication not supported\n" msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης SSPI\n" -#: fe-auth.c:991 +#: fe-auth.c:993 msgid "Crypt authentication not supported\n" msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης Crypt\n" -#: fe-auth.c:1057 +#: fe-auth.c:1060 #, c-format msgid "authentication method %u not supported\n" msgstr "δεν υποστηρίζεται η μέθοδος πιστοποίησης %u\n" -#: fe-auth.c:1104 +#: fe-auth.c:1107 #, c-format msgid "user name lookup failure: error code %lu\n" msgstr "αποτυχία αναζήτησης ονόματος χρήστη: κωδικός σφάλματος % lu\n" -#: fe-auth.c:1114 fe-connect.c:2834 +#: fe-auth.c:1117 fe-connect.c:2852 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "δεν ήταν δυνατή η αναζήτηση ID τοπικού χρήστη %d: %s\n" -#: fe-auth.c:1119 fe-connect.c:2839 +#: fe-auth.c:1122 fe-connect.c:2857 #, c-format msgid "local user with ID %d does not exist\n" msgstr "δεν υπάρχει τοπικός χρήστης με ID %d\n" -#: fe-auth.c:1221 +#: fe-auth.c:1226 msgid "unexpected shape of result set returned for SHOW\n" -msgstr "" -"μη αναμενόμενο σχήμα συνόλου αποτελεσμάτων που επιστράφηκε από την εντολή " -"SHOW\n" +msgstr "μη αναμενόμενο σχήμα συνόλου αποτελεσμάτων που επιστράφηκε από την εντολή SHOW\n" -#: fe-auth.c:1230 +#: fe-auth.c:1235 msgid "password_encryption value too long\n" msgstr "πολύ μακρυά τιμή password_encryption\n" -#: fe-auth.c:1270 +#: fe-auth.c:1275 #, c-format msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "μη αναγνωρίσιμος αλγόριθμος κρυπτογράφησης “%s” κωδικού πρόσβασης\n" -#: fe-connect.c:1075 +#: fe-connect.c:1095 #, c-format msgid "could not match %d host names to %d hostaddr values\n" -msgstr "" -"δεν μπόρεσε να ταιριάξει %d ονομασίες διακομιστών με %d τιμές hostaddr\n" +msgstr "δεν μπόρεσε να ταιριάξει %d ονομασίες διακομιστών με %d τιμές hostaddr\n" -#: fe-connect.c:1156 +#: fe-connect.c:1176 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "δεν μπόρεσε να ταιριάξει %d αριθμούς θυρών με %d διακομιστές\n" -#: fe-connect.c:1249 -#, c-format -msgid "invalid channel_binding value: \"%s\"\n" -msgstr "άκυρη τιμή channel_binding: “%s”\n" - -#: fe-connect.c:1275 -#, c-format -msgid "invalid sslmode value: \"%s\"\n" +#: fe-connect.c:1269 fe-connect.c:1295 fe-connect.c:1337 fe-connect.c:1346 +#: fe-connect.c:1379 fe-connect.c:1423 +#, fuzzy, c-format +#| msgid "invalid sslmode value: \"%s\"\n" +msgid "invalid %s value: \"%s\"\n" msgstr "άκυρη τιμή sslmode: “%s”\n" -#: fe-connect.c:1296 +#: fe-connect.c:1316 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" -msgstr "" -"η τιμή SSLmode \"%s\" είναι άκυρη όταν η υποστήριξη SSL δεν έχει " -"μεταγλωττιστεί (compiled)\n" +msgstr "η τιμή SSLmode \"%s\" είναι άκυρη όταν η υποστήριξη SSL δεν έχει μεταγλωττιστεί (compiled)\n" -#: fe-connect.c:1317 -#, c-format -msgid "invalid ssl_min_protocol_version value: \"%s\"\n" -msgstr "άκυρη τιμή ssl_min_protocol_version: “%s”\n" - -#: fe-connect.c:1325 -#, c-format -msgid "invalid ssl_max_protocol_version value: \"%s\"\n" -msgstr "άκυρη τιμή ssl_max_protocol_version: “%s”\n" - -#: fe-connect.c:1342 +#: fe-connect.c:1364 msgid "invalid SSL protocol version range\n" msgstr "άκυρο εύρος εκδόσεων πρωτοκόλλου SSL\n" -#: fe-connect.c:1357 -#, c-format -msgid "invalid gssencmode value: \"%s\"\n" -msgstr "άκυρη τιμή gssencmode: “%s”\n" - -#: fe-connect.c:1366 -#, c-format -msgid "" -"gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" -msgstr "" -"η τιμή SSLmode \"%s\" είναι άκυρη όταν η υποστήριξη GSSAPI δεν έχει " -"μεταγλωττιστεί (compiled)\n" - -#: fe-connect.c:1401 +#: fe-connect.c:1389 #, c-format -msgid "invalid target_session_attrs value: \"%s\"\n" -msgstr "άκυρη τιμή target_session_attrs: “%s”\n" +msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" +msgstr "η τιμή SSLmode \"%s\" είναι άκυρη όταν η υποστήριξη GSSAPI δεν έχει μεταγλωττιστεί (compiled)\n" -#: fe-connect.c:1619 +#: fe-connect.c:1649 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" -msgstr "" -"δεν μπόρεσε να ορίσει τον υποδοχέα σε λειτουργία TCP χωρίς καθυστέρηση: %s\n" - -#: fe-connect.c:1680 -#, c-format -msgid "" -"could not connect to server: %s\n" -"\tIs the server running locally and accepting\n" -"\tconnections on Unix domain socket \"%s\"?\n" +msgstr "δεν μπόρεσε να ορίσει τον υποδοχέα σε λειτουργία TCP χωρίς καθυστέρηση: %s\n" + +#: fe-connect.c:1711 +#, fuzzy, c-format +#| msgid "connection to database \"%s\" failed: %s" +msgid "connection to server on socket \"%s\" failed: " +msgstr "σύνδεση στη βάση δεδομένων “%s” απέτυχε: %s" + +#: fe-connect.c:1738 +#, fuzzy, c-format +#| msgid "connection to database \"%s\" failed: %s" +msgid "connection to server at \"%s\" (%s), port %s failed: " +msgstr "σύνδεση στη βάση δεδομένων “%s” απέτυχε: %s" + +#: fe-connect.c:1743 +#, fuzzy, c-format +#| msgid "connection to database \"%s\" failed: %s" +msgid "connection to server at \"%s\", port %s failed: " +msgstr "σύνδεση στη βάση δεδομένων “%s” απέτυχε: %s" + +#: fe-connect.c:1768 +#, fuzzy +#| msgid "" +#| "could not connect to server: %s\n" +#| "\tIs the server running locally and accepting\n" +#| "\tconnections on Unix domain socket \"%s\"?\n" +msgid "\tIs the server running locally and accepting connections on that socket?\n" msgstr "" "δεν ήταν δυνατή η σύνδεση με το διακομιστή: %s\n" "\tΕκτελείται τοπικά ο διακομιστής και αποδέχεται\n" "\tσυνδέσεις στην υποδοχή πεδίου Unix \"%s\";\n" -#: fe-connect.c:1717 -#, c-format -msgid "" -"could not connect to server: %s\n" -"\tIs the server running on host \"%s\" (%s) and accepting\n" -"\tTCP/IP connections on port %s?\n" -msgstr "" -"δεν ήταν δυνατή η σύνδεση με το διακομιστή: %s\n" -"\tΕκτελείται ο διακομιστής στον κεντρικό υπολογιστή ”%s” (%s) και " -"αποδέχεται\n" -"\tσυνδέσεις TCP/IP στην θύρα %s;\n" - -#: fe-connect.c:1725 -#, c-format -msgid "" -"could not connect to server: %s\n" -"\tIs the server running on host \"%s\" and accepting\n" -"\tTCP/IP connections on port %s?\n" +#: fe-connect.c:1772 +#, fuzzy +#| msgid "" +#| "could not connect to server: %s\n" +#| "\tIs the server running on host \"%s\" and accepting\n" +#| "\tTCP/IP connections on port %s?\n" +msgid "\tIs the server running on that host and accepting TCP/IP connections?\n" msgstr "" "δεν ήταν δυνατή η σύνδεση με το διακομιστή: %s\n" "\tΕκτελείται ο διακομιστής στον κεντρικό υπολογιστή \"%s\" και αποδέχεται\n" "\tσυνδέσεις TCP/IP στην θύρα %s;\n" -#: fe-connect.c:1795 +#: fe-connect.c:1836 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "άκυρη τιμή ακεραίου ”%s” για την επιλογή σύνδεσης “%s”\n" -#: fe-connect.c:1825 fe-connect.c:1859 fe-connect.c:1894 fe-connect.c:1981 -#: fe-connect.c:2623 -#, c-format -msgid "setsockopt(%s) failed: %s\n" -msgstr "setsockopt(%s) απέτυχε: %s\n" +#: fe-connect.c:1866 fe-connect.c:1901 fe-connect.c:1937 fe-connect.c:2026 +#: fe-connect.c:2640 +#, fuzzy, c-format +#| msgid "%s() failed: %m" +msgid "%s(%s) failed: %s\n" +msgstr "%s () απέτυχε: %m" -#: fe-connect.c:1947 -#, c-format -msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" -msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) απέτυχε: %ui\n" +#: fe-connect.c:1991 +#, fuzzy, c-format +#| msgid "pgpipe: getsockname() failed: error code %d" +msgid "%s(%s) failed: error code %d\n" +msgstr "pgpipe: getsockname() απέτυχε: κωδικός σφάλματος %d" -#: fe-connect.c:2313 +#: fe-connect.c:2306 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "μη έγκυρη κατάσταση σύνδεσης, πιθανώς ενδεικτική αλλοίωσης μνήμης\n" -#: fe-connect.c:2379 +#: fe-connect.c:2385 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "μη έγκυρος αριθμός πύλης: “%s”\n" -#: fe-connect.c:2395 +#: fe-connect.c:2401 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" -msgstr "" -"δεν ήταν δυνατή η μετάφραση του ονόματος κεντρικού υπολογιστή \"%s\" στη " -"διεύθυνση: %s\n" +msgstr "δεν ήταν δυνατή η μετάφραση του ονόματος κεντρικού υπολογιστή \"%s\" στη διεύθυνση: %s\n" -#: fe-connect.c:2408 +#: fe-connect.c:2414 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "δεν ήταν δυνατή η ανάλυση της διεύθυνσης δικτύου \"%s\": %s\n" -#: fe-connect.c:2421 +#: fe-connect.c:2427 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" -msgstr "" -"η διαδρομή υποδοχής τομέα Unix \"%s\" είναι πολύ μακρυά (μέγιστο %d bytes)\n" +msgstr "η διαδρομή υποδοχής τομέα Unix \"%s\" είναι πολύ μακρυά (μέγιστο %d bytes)\n" -#: fe-connect.c:2436 +#: fe-connect.c:2442 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" -msgstr "" -"δεν ήταν δυνατή η μετάφραση της διαδρομής υποδοχής πεδίου-Unix \"%s\" στη " -"διεύθυνση: %s\n" +msgstr "δεν ήταν δυνατή η μετάφραση της διαδρομής υποδοχής πεδίου-Unix \"%s\" στη διεύθυνση: %s\n" -#: fe-connect.c:2560 +#: fe-connect.c:2568 #, c-format msgid "could not create socket: %s\n" msgstr "δεν ήταν δυνατή η δημιουργία υποδοχέα: %s\n" -#: fe-connect.c:2582 +#: fe-connect.c:2599 #, c-format msgid "could not set socket to nonblocking mode: %s\n" -msgstr "" -"δεν ήταν δυνατή η ρύθμιση της υποδοχής σε λειτουργία μη αποκλεισμού: %s\n" +msgstr "δεν ήταν δυνατή η ρύθμιση της υποδοχής σε λειτουργία μη αποκλεισμού: %s\n" -#: fe-connect.c:2592 +#: fe-connect.c:2609 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" -msgstr "" -"δεν ήταν δυνατή η ρύθμιση της υποδοχής σε λειτουργία close-on-exec: %s\n" +msgstr "δεν ήταν δυνατή η ρύθμιση της υποδοχής σε λειτουργία close-on-exec: %s\n" -#: fe-connect.c:2610 +#: fe-connect.c:2627 msgid "keepalives parameter must be an integer\n" msgstr "η παράμετρος keepalives πρέπει να είναι ακέραιος\n" -#: fe-connect.c:2750 +#: fe-connect.c:2768 #, c-format msgid "could not get socket error status: %s\n" msgstr "δεν ήταν δυνατή η απόκτηση κατάστασης σφάλματος της υποδοχής: %s\n" -#: fe-connect.c:2778 +#: fe-connect.c:2796 #, c-format msgid "could not get client address from socket: %s\n" msgstr "δεν ήταν δυνατή η απόκτηση διεύθυνσης πελάτη από την υποδοχή: %s\n" -#: fe-connect.c:2820 +#: fe-connect.c:2838 msgid "requirepeer parameter is not supported on this platform\n" msgstr "η παράμετρος requirepeer δεν υποστηρίζεται από την παρούσα πλατφόρμα\n" -#: fe-connect.c:2823 +#: fe-connect.c:2841 #, c-format msgid "could not get peer credentials: %s\n" msgstr "δεν ήταν δυνατή η απόκτηση διαπιστευτηρίων από peer: %s\n" -#: fe-connect.c:2847 +#: fe-connect.c:2865 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" -msgstr "" -"το requirepeer καθορίζει \"%s\", αλλά το πραγματικό όνομα ομότιμου χρήστη " -"είναι \"%s\"\n" +msgstr "το requirepeer καθορίζει \"%s\", αλλά το πραγματικό όνομα ομότιμου χρήστη είναι \"%s\"\n" -#: fe-connect.c:2887 +#: fe-connect.c:2905 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "δεν ήταν δυνατή η αποστολή GSSAPI πακέτου διαπραγμάτευσης: %s\n" -#: fe-connect.c:2899 -msgid "" -"GSSAPI encryption required but was impossible (possibly no credential cache, " -"no server support, or using a local socket)\n" -msgstr "" -"απαιτείται κρυπτογράφηση GSSAPI, αλλά ήταν αδύνατη (πιθανώς απουσία cache " -"διαπιστευτηρίων, απουσία υποστήριξης διακομιστή, ή χρησιμοποιεί τοπική " -"υποδοχή)\n" +#: fe-connect.c:2917 +msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" +msgstr "απαιτείται κρυπτογράφηση GSSAPI, αλλά ήταν αδύνατη (πιθανώς απουσία cache διαπιστευτηρίων, απουσία υποστήριξης διακομιστή, ή χρησιμοποιεί τοπική υποδοχή)\n" -#: fe-connect.c:2931 +#: fe-connect.c:2959 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "" "δεν ήταν δυνατή η αποστολή SSL πακέτου διαπραγμάτευσης: %s\n" "\n" -#: fe-connect.c:2970 +#: fe-connect.c:2990 #, c-format msgid "could not send startup packet: %s\n" msgstr "δεν ήταν δυνατή η αποστολή πακέτου εκκίνησης: %s\n" -#: fe-connect.c:3040 +#: fe-connect.c:3066 msgid "server does not support SSL, but SSL was required\n" msgstr "ο διακομιστής δεν υποστηρίζει SSL, αλλά απαιτείται SSL\n" -#: fe-connect.c:3067 +#: fe-connect.c:3093 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "έλαβε μη έγκυρη απάντηση κατά τη διαπραγμάτευση SSL: %c\n" -#: fe-connect.c:3156 +#: fe-connect.c:3182 msgid "server doesn't support GSSAPI encryption, but it was required\n" -msgstr "" -"ο διακομιστής δεν υποστηρίζει κρυπτογράφηση GSSAPI, αλλά αυτή ήταν " -"απαραίτητη\n" +msgstr "ο διακομιστής δεν υποστηρίζει κρυπτογράφηση GSSAPI, αλλά αυτή ήταν απαραίτητη\n" -#: fe-connect.c:3168 +#: fe-connect.c:3194 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "έλαβε μη έγκυρη απάντηση κατά τη διαπραγμάτευση GSSAPI: %c\n" -#: fe-connect.c:3234 fe-connect.c:3265 +#: fe-connect.c:3260 fe-connect.c:3285 #, c-format msgid "expected authentication request from server, but received %c\n" -msgstr "" -"ανέμενε αίτηση ελέγχου ταυτότητας από το διακομιστή, αλλά αντί αυτής ελήφθη " -"%c\n" +msgstr "ανέμενε αίτηση ελέγχου ταυτότητας από το διακομιστή, αλλά αντί αυτής ελήφθη %c\n" -#: fe-connect.c:3506 +#: fe-connect.c:3492 msgid "unexpected message from server during startup\n" msgstr "μη αναμενόμενο μήνυμα από το διακομιστή κατά την εκκίνηση\n" -#: fe-connect.c:3711 -#, c-format -msgid "could not make a writable connection to server \"%s:%s\"\n" +#: fe-connect.c:3584 +msgid "session is read-only\n" msgstr "" -"δεν ήταν δυνατή η πραγματοποίηση εγγράψιμης σύνδεσης με το διακομιστή \"%s:%s" -"\"\n" -#: fe-connect.c:3757 -#, c-format -msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" -msgstr "το τεστ “SHOW transaction_read_only” απέτυχε στον διακομιστή “%s:%s”\n" +#: fe-connect.c:3587 +msgid "session is not read-only\n" +msgstr "" + +#: fe-connect.c:3641 +#, fuzzy +#| msgid "%s: server did not start in time\n" +msgid "server is in hot standby mode\n" +msgstr "%s: ο διακομιστής δεν ξεκίνησε εγκαίρως\n" + +#: fe-connect.c:3644 +#, fuzzy +#| msgid "%s: cannot promote server; server is not in standby mode\n" +msgid "server is not in hot standby mode\n" +msgstr "%s: δεν είναι δυνατή η προβίβαση του διακομιστή· ο διακομιστής δεν βρίσκεται σε κατάσταση αναμονής\n" + +#: fe-connect.c:3755 fe-connect.c:3807 +#, fuzzy, c-format +#| msgid " failed\n" +msgid "\"%s\" failed\n" +msgstr " απέτυχε.\n" -#: fe-connect.c:3772 +#: fe-connect.c:3821 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" -msgstr "" -"κατάσταση μη έγκυρης σύνδεσης %d, πιθανώς ενδεικτική αλλοίωσης της μνήμης\n" +msgstr "κατάσταση μη έγκυρης σύνδεσης %d, πιθανώς ενδεικτική αλλοίωσης της μνήμης\n" -#: fe-connect.c:4211 fe-connect.c:4271 +#: fe-connect.c:4267 fe-connect.c:4327 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" -msgstr "" -"PGEventProc \"%s\" απέτυχε κατά τη διάρκεια συμβάντος PGEVT_CONNRESET\n" +msgstr "PGEventProc \"%s\" απέτυχε κατά τη διάρκεια συμβάντος PGEVT_CONNRESET\n" -#: fe-connect.c:4618 +#: fe-connect.c:4671 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" -msgstr "" -"άκυρη διεύθυνση URL LDAP \"%s\": ο συνδυασμός πρέπει να είναι ldap://\n" +msgstr "άκυρη διεύθυνση URL LDAP \"%s\": ο συνδυασμός πρέπει να είναι ldap://\n" -#: fe-connect.c:4633 +#: fe-connect.c:4686 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "άκυρη διεύθυνση URL LDAP \"%s\": λείπει το αποκλειστικό όνομα\n" -#: fe-connect.c:4645 fe-connect.c:4700 +#: fe-connect.c:4698 fe-connect.c:4756 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" -msgstr "" -"άκυρη διεύθυνση URL LDAP \"%s\": πρέπει να περιέχει ακριβώς ένα " -"χαρακτηριστικό\n" +msgstr "άκυρη διεύθυνση URL LDAP \"%s\": πρέπει να περιέχει ακριβώς ένα χαρακτηριστικό\n" -#: fe-connect.c:4656 fe-connect.c:4715 +#: fe-connect.c:4710 fe-connect.c:4772 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" -msgstr "" -"άκυρη διεύθυνση URL LDAP \"%s\": πρέπει να έχει εμβέλεια αναζήτησης (base/" -"one/sub)\n" +msgstr "άκυρη διεύθυνση URL LDAP \"%s\": πρέπει να έχει εμβέλεια αναζήτησης (base/one/sub)\n" -#: fe-connect.c:4667 +#: fe-connect.c:4722 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "άκυρη διεύθυνση URL LDAP “%s”: κανένα φίλτρο\n" -#: fe-connect.c:4688 +#: fe-connect.c:4744 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "άκυρη διεύθυνση URL LDAP “%s”: άκυρος αριθμός θύρας\n" -#: fe-connect.c:4724 +#: fe-connect.c:4782 msgid "could not create LDAP structure\n" msgstr "δεν ήταν δυνατή η δημιουργία δομής LDAP\n" -#: fe-connect.c:4800 +#: fe-connect.c:4858 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "απέτυχε η αναζήτηση στον διακομιστή LDAP: %s\n" -#: fe-connect.c:4811 +#: fe-connect.c:4869 msgid "more than one entry found on LDAP lookup\n" msgstr "βρέθηκαν περισσότερες από μία καταχωρήσεις στην αναζήτηση LDAP\n" -#: fe-connect.c:4812 fe-connect.c:4824 +#: fe-connect.c:4870 fe-connect.c:4882 msgid "no entry found on LDAP lookup\n" msgstr "δεν βρέθηκε καταχώρηση στην αναζήτηση LDAP\n" -#: fe-connect.c:4835 fe-connect.c:4848 +#: fe-connect.c:4893 fe-connect.c:4906 msgid "attribute has no values on LDAP lookup\n" msgstr "το χαρακτηριστικό δεν έχει τιμές στην αναζήτηση LDAP\n" -#: fe-connect.c:4900 fe-connect.c:4919 fe-connect.c:5451 +#: fe-connect.c:4958 fe-connect.c:4977 fe-connect.c:5502 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "λείπει το “=“ μετά από “%s” στην συμβολοσειρά πληροφορίας σύνδεσης\n" -#: fe-connect.c:4992 fe-connect.c:5636 fe-connect.c:6410 +#: fe-connect.c:5050 fe-connect.c:5687 fe-connect.c:6463 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "άκυρη επιλογή σύνδεσης “%s”\n" -#: fe-connect.c:5008 fe-connect.c:5500 +#: fe-connect.c:5066 fe-connect.c:5551 msgid "unterminated quoted string in connection info string\n" -msgstr "" -"ατερμάτιστη συμβολοσειρά με εισαγωγικά στην συμβολοσειρά πληροφορίας " -"σύνδεσης\n" +msgstr "ατερμάτιστη συμβολοσειρά με εισαγωγικά στην συμβολοσειρά πληροφορίας σύνδεσης\n" -#: fe-connect.c:5091 +#: fe-connect.c:5147 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "δεν βρέθηκε ο ορισμός της υπηρεσίας “%s”\n" -#: fe-connect.c:5114 +#: fe-connect.c:5173 #, c-format msgid "service file \"%s\" not found\n" msgstr "δεν βρέθηκε αρχείο υπηρεσίας “%s”\n" -#: fe-connect.c:5129 -#, c-format -msgid "line %d too long in service file \"%s\"\n" -msgstr "Πολύ μακρυά γραμμή %d στο αρχείο υπηρεσίας “%s”\n" - -#: fe-connect.c:5201 fe-connect.c:5245 +#: fe-connect.c:5250 fe-connect.c:5294 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "συντακτικό σφάλμα στο αρχείο υπηρεσίας “%s”, γραμμή %d\n" -#: fe-connect.c:5212 +#: fe-connect.c:5261 #, c-format -msgid "" -"nested service specifications not supported in service file \"%s\", line %d\n" -msgstr "" -"οι ένθετες προδιαγραφές υπηρεσίας δεν υποστηρίζονται στο αρχείο υπηρεσίας " -"\"%s\", γραμμή %d\n" +msgid "nested service specifications not supported in service file \"%s\", line %d\n" +msgstr "οι ένθετες προδιαγραφές υπηρεσίας δεν υποστηρίζονται στο αρχείο υπηρεσίας \"%s\", γραμμή %d\n" -#: fe-connect.c:5932 +#: fe-connect.c:5983 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "μη έγκυρο URI διαδόθηκε στη ρουτίνα εσωτερικής ανάλυσης: \"%s\"\n" -#: fe-connect.c:6009 +#: fe-connect.c:6060 #, c-format -msgid "" -"end of string reached when looking for matching \"]\" in IPv6 host address " -"in URI: \"%s\"\n" -msgstr "" -"έφτασε στο τέλος της συμβολοσειράς κατά την αναζήτηση αντίστοιχου \"]\" στη " -"διεύθυνση IPv6 κεντρικού υπολογιστή στο URI: \"%s\"\n" +msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" +msgstr "έφτασε στο τέλος της συμβολοσειράς κατά την αναζήτηση αντίστοιχου \"]\" στη διεύθυνση IPv6 κεντρικού υπολογιστή στο URI: \"%s\"\n" -#: fe-connect.c:6016 +#: fe-connect.c:6067 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" -msgstr "" -"η διεύθυνση IPv6 κεντρικού υπολογιστή δεν δύναται να είναι κενή στο URI: \"%s" -"\"\n" +msgstr "η διεύθυνση IPv6 κεντρικού υπολογιστή δεν δύναται να είναι κενή στο URI: \"%s\"\n" -#: fe-connect.c:6031 +#: fe-connect.c:6082 #, c-format -msgid "" -"unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): " -"\"%s\"\n" -msgstr "" -"μη αναμενόμενος χαρακτήρας \"%c\" στη θέση %d του URI (αναμένεται “:” ή \"/" -"\"): \"%s\"\n" +msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" +msgstr "μη αναμενόμενος χαρακτήρας \"%c\" στη θέση %d του URI (αναμένεται “:” ή \"/\"): \"%s\"\n" -#: fe-connect.c:6160 +#: fe-connect.c:6212 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" -msgstr "" -"επιπλέον διαχωριστικό κλειδιού/τιμής \"=\" στην παράμετρο ερωτήματος URI: " -"\"%s\"\n" +msgstr "επιπλέον διαχωριστικό κλειδιού/τιμής \"=\" στην παράμετρο ερωτήματος URI: \"%s\"\n" -#: fe-connect.c:6180 +#: fe-connect.c:6232 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" -msgstr "" -"λείπει διαχωριστικό κλειδιού/τιμής “=“ στην παράμετρο ερωτήματος URI: “%s”\n" +msgstr "λείπει διαχωριστικό κλειδιού/τιμής “=“ στην παράμετρο ερωτήματος URI: “%s”\n" -#: fe-connect.c:6231 +#: fe-connect.c:6284 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "άκυρη παράμετρος ερωτήματος URI: “%s”\n" -#: fe-connect.c:6305 +#: fe-connect.c:6358 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "άκυρο διακριτικό με κωδικοποίηση ποσοστού: \"%s\"\n" -#: fe-connect.c:6315 +#: fe-connect.c:6368 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "απαγορευμένη τιμή %%00 σε τιμή κωδικοποιημένου ποσοστού: \"%s\"\n" -#: fe-connect.c:6678 +#: fe-connect.c:6738 msgid "connection pointer is NULL\n" msgstr "ο δείκτης σύνδεσης είναι NULL\n" -#: fe-connect.c:6974 +#: fe-connect.c:7018 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" -msgstr "" -"ΠΡΟΕΙΔΟΠΟΙΗΣΗ: το αρχείο κωδικών πρόσβασης “%s” δεν είναι ένα απλό αρχείο\n" +msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: το αρχείο κωδικών πρόσβασης “%s” δεν είναι ένα απλό αρχείο\n" -#: fe-connect.c:6983 +#: fe-connect.c:7027 #, c-format -msgid "" -"WARNING: password file \"%s\" has group or world access; permissions should " -"be u=rw (0600) or less\n" -msgstr "" -"ΠΡΟΕΙΔΟΠΟΙΗΣΗ: το αρχείο κωδικού πρόσβασης \"%s\" έχει ομαδική ή παγκόσμια " -"πρόσβαση· τα δικαιώματα πρέπει να είναι U=RW (0600) ή λιγότερα\n" +msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" +msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: το αρχείο κωδικού πρόσβασης \"%s\" έχει ομαδική ή παγκόσμια πρόσβαση· τα δικαιώματα πρέπει να είναι U=RW (0600) ή λιγότερα\n" -#: fe-connect.c:7091 +#: fe-connect.c:7135 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "ο κωδικός πρόσβασης ελήφθει από αρχείο “%s”\n" -#: fe-exec.c:444 fe-exec.c:2821 +#: fe-exec.c:449 fe-exec.c:3219 #, c-format msgid "row number %d is out of range 0..%d" msgstr "ο αριθμός σειράς %d βρίσκεται εκτός εύρους 0..%d" -#: fe-exec.c:505 fe-protocol2.c:497 fe-protocol2.c:532 fe-protocol2.c:1050 -#: fe-protocol3.c:206 fe-protocol3.c:233 fe-protocol3.c:250 fe-protocol3.c:328 -#: fe-protocol3.c:692 fe-protocol3.c:920 +#: fe-exec.c:510 fe-protocol3.c:219 fe-protocol3.c:244 fe-protocol3.c:273 +#: fe-protocol3.c:291 fe-protocol3.c:371 fe-protocol3.c:743 fe-protocol3.c:975 msgid "out of memory" msgstr "έλλειψη μνήμης" -#: fe-exec.c:506 fe-protocol2.c:1396 fe-protocol3.c:1873 +#: fe-exec.c:511 fe-protocol3.c:1932 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:815 +#: fe-exec.c:778 msgid "write to server failed\n" msgstr "απέτυχε η εγγραφή στον διακομιστή\n" -#: fe-exec.c:896 +#: fe-exec.c:850 msgid "NOTICE" msgstr "NOTICE" -#: fe-exec.c:954 +#: fe-exec.c:908 msgid "PGresult cannot support more than INT_MAX tuples" -msgstr "" -"το PGresult δεν μπορεί να υποστηρίξει περισσότερες πλείαδες από INT_MAX" +msgstr "το PGresult δεν μπορεί να υποστηρίξει περισσότερες πλείαδες από INT_MAX" -#: fe-exec.c:966 +#: fe-exec.c:920 msgid "size_t overflow" msgstr "υπερχείλιση overflow" -#: fe-exec.c:1243 fe-exec.c:1301 fe-exec.c:1347 +#: fe-exec.c:1302 fe-exec.c:1403 fe-exec.c:1451 msgid "command string is a null pointer\n" msgstr "η συμβολοσειρά εντολής είναι ένας κενός δείκτης\n" -#: fe-exec.c:1307 fe-exec.c:1353 fe-exec.c:1448 +#: fe-exec.c:1409 fe-exec.c:1457 fe-exec.c:1554 msgid "number of parameters must be between 0 and 65535\n" msgstr "ο αριθμός των παραμέτρων πρέπει να είναι μεταξύ 0 και 65535\n" -#: fe-exec.c:1341 fe-exec.c:1442 +#: fe-exec.c:1445 fe-exec.c:1548 msgid "statement name is a null pointer\n" msgstr "η ονομασία της δήλωσης είναι ένας κενός δείκτης\n" -#: fe-exec.c:1361 fe-exec.c:1524 fe-exec.c:2233 fe-exec.c:2435 -msgid "function requires at least protocol version 3.0\n" -msgstr "η συνάρτηση απαιτεί πρωτόκολλο ελάχιστης έκδοσης 3.0\n" - -#: fe-exec.c:1479 +#: fe-exec.c:1589 msgid "no connection to the server\n" msgstr "καμία σύνδεση στον διακομιστή\n" -#: fe-exec.c:1486 +#: fe-exec.c:1598 msgid "another command is already in progress\n" msgstr "υπάρχει άλλη εντολή σε πρόοδο\n" -#: fe-exec.c:1600 +#: fe-exec.c:1627 +msgid "cannot queue commands during COPY\n" +msgstr "" + +#: fe-exec.c:1745 msgid "length must be given for binary parameter\n" msgstr "το μήκος πρέπει να περαστεί ως δυαδική παράμετρος\n" -#: fe-exec.c:1863 +#: fe-exec.c:2066 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "μη αναμενόμενο asyncStatus: %d\n" -#: fe-exec.c:1883 +#: fe-exec.c:2086 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEventProc “%s” κατά τη διάρκεια συμβάντος PGEVT_RESULTCREATE\n" -#: fe-exec.c:2043 -msgid "COPY terminated by new PQexec" -msgstr "COPY τερματίστηκε από νέο PQexec" - -#: fe-exec.c:2051 -msgid "COPY IN state must be terminated first\n" +#: fe-exec.c:2234 +msgid "synchronous command execution functions are not allowed in pipeline mode\n" msgstr "" -"πρέπει πρώτα να τερματιστεί η κατάσταση COPY IN\n" -"\n" -#: fe-exec.c:2071 -msgid "COPY OUT state must be terminated first\n" -msgstr "πρέπει πρώτα να τερματιστεί η κατάσταση COPY OUT\n" +#: fe-exec.c:2256 +msgid "COPY terminated by new PQexec" +msgstr "COPY τερματίστηκε από νέο PQexec" -#: fe-exec.c:2079 +#: fe-exec.c:2273 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec δεν επιτρέπεται κατά τη διάρκεια COPY BOTH\n" -#: fe-exec.c:2325 fe-exec.c:2392 fe-exec.c:2482 fe-protocol2.c:1353 -#: fe-protocol3.c:1804 +#: fe-exec.c:2502 fe-exec.c:2558 fe-exec.c:2627 fe-protocol3.c:1863 msgid "no COPY in progress\n" msgstr "κανένα COPY σε εξέλιξη\n" -#: fe-exec.c:2672 +#: fe-exec.c:2804 +msgid "PQfn not allowed in pipeline mode\n" +msgstr "" + +#: fe-exec.c:2812 msgid "connection in wrong state\n" msgstr "σύνδεση σε λανθάνουσα κατάσταση\n" -#: fe-exec.c:2703 +#: fe-exec.c:2856 +#, fuzzy +#| msgid "cannot determine OID of function lo_tell\n" +msgid "cannot enter pipeline mode, connection not idle\n" +msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_tell\n" + +#: fe-exec.c:2890 fe-exec.c:2907 +msgid "cannot exit pipeline mode with uncollected results\n" +msgstr "" + +#: fe-exec.c:2895 +msgid "cannot exit pipeline mode while busy\n" +msgstr "" + +#: fe-exec.c:3037 +msgid "cannot send pipeline when not in pipeline mode\n" +msgstr "" + +#: fe-exec.c:3108 msgid "invalid ExecStatusType code" msgstr "άκυρος κωδικός ExecStatusType" -#: fe-exec.c:2730 +#: fe-exec.c:3135 msgid "PGresult is not an error result\n" msgstr "PGresult δεν είναι ένα αποτέλεσμα σφάλματος\n" -#: fe-exec.c:2805 fe-exec.c:2828 +#: fe-exec.c:3203 fe-exec.c:3226 #, c-format msgid "column number %d is out of range 0..%d" msgstr "αριθμός στήλης %d βρίσκεται εκτός εύρους 0..%d" -#: fe-exec.c:2843 +#: fe-exec.c:3241 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "αριθμός παραμέτρου %d βρίσκεται εκτός εύρους 0..%d" -#: fe-exec.c:3153 +#: fe-exec.c:3551 #, c-format msgid "could not interpret result from server: %s" msgstr "δεν μπόρεσε να ερμηνεύσει το αποτέλεσμα από τον διακομιστή: %s" -#: fe-exec.c:3392 fe-exec.c:3476 +#: fe-exec.c:3811 fe-exec.c:3900 msgid "incomplete multibyte character\n" msgstr "ελλιπής χαρακτήρας πολλαπλών byte\n" -#: fe-gssapi-common.c:124 +#: fe-gssapi-common.c:123 msgid "GSSAPI name import error" msgstr "σφάλμα εισαγωγής ονόματος GSSAPI" -#: fe-lobj.c:154 -msgid "cannot determine OID of function lo_truncate\n" -msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_truncate\n" +#: fe-lobj.c:145 fe-lobj.c:210 fe-lobj.c:403 fe-lobj.c:494 fe-lobj.c:568 +#: fe-lobj.c:969 fe-lobj.c:977 fe-lobj.c:985 fe-lobj.c:993 fe-lobj.c:1001 +#: fe-lobj.c:1009 fe-lobj.c:1017 fe-lobj.c:1025 +#, fuzzy, c-format +#| msgid "cannot determine OID of function lo_close\n" +msgid "cannot determine OID of function %s\n" +msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_close\n" -#: fe-lobj.c:170 +#: fe-lobj.c:162 msgid "argument of lo_truncate exceeds integer range\n" msgstr "η παράμετρος του lo_truncate υπερβαίνει το εύρος ακέραιων\n" -#: fe-lobj.c:221 -msgid "cannot determine OID of function lo_truncate64\n" -msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_truncate64\n" - -#: fe-lobj.c:279 +#: fe-lobj.c:266 msgid "argument of lo_read exceeds integer range\n" msgstr "η παράμετρος του lo_read υπερβαίνει το εύρος ακέραιων\n" -#: fe-lobj.c:334 +#: fe-lobj.c:318 msgid "argument of lo_write exceeds integer range\n" msgstr "η παράμετρος του lo_write υπερβαίνει το εύρος ακέραιων\n" -#: fe-lobj.c:425 -msgid "cannot determine OID of function lo_lseek64\n" -msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_lseek64\n" - -#: fe-lobj.c:521 -msgid "cannot determine OID of function lo_create\n" -msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_create\n" - -#: fe-lobj.c:600 -msgid "cannot determine OID of function lo_tell64\n" -msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_tell64\n" - -#: fe-lobj.c:706 fe-lobj.c:815 +#: fe-lobj.c:678 fe-lobj.c:789 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου “%s”: %s\n" -#: fe-lobj.c:761 +#: fe-lobj.c:734 #, c-format msgid "could not read from file \"%s\": %s\n" msgstr "δεν ήταν δυνατή η ανάγνωση από το αρχείο “%s”: %s\n" -#: fe-lobj.c:835 fe-lobj.c:859 +#: fe-lobj.c:810 fe-lobj.c:834 #, c-format msgid "could not write to file \"%s\": %s\n" msgstr "δεν ήταν δυνατή η εγγραφή στο αρχείο ”%s”: %s\n" -#: fe-lobj.c:946 +#: fe-lobj.c:920 msgid "query to initialize large object functions did not return data\n" -msgstr "" -"το ερώτημα αρχικοποίησης συναρτήσεων μεγάλων αντικειμένων δεν επέστρεψε " -"δεδομένα\n" - -#: fe-lobj.c:995 -msgid "cannot determine OID of function lo_open\n" -msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_open\n" - -#: fe-lobj.c:1002 -msgid "cannot determine OID of function lo_close\n" -msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_close\n" +msgstr "το ερώτημα αρχικοποίησης συναρτήσεων μεγάλων αντικειμένων δεν επέστρεψε δεδομένα\n" -#: fe-lobj.c:1009 -msgid "cannot determine OID of function lo_creat\n" -msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_creat\n" - -#: fe-lobj.c:1016 -msgid "cannot determine OID of function lo_unlink\n" -msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_unlink\n" - -#: fe-lobj.c:1023 -msgid "cannot determine OID of function lo_lseek\n" -msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_lseek\n" - -#: fe-lobj.c:1030 -msgid "cannot determine OID of function lo_tell\n" -msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_tell\n" - -#: fe-lobj.c:1037 -msgid "cannot determine OID of function loread\n" -msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης loread\n" - -#: fe-lobj.c:1044 -msgid "cannot determine OID of function lowrite\n" -msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lowrite\n" - -#: fe-misc.c:289 +#: fe-misc.c:242 #, c-format msgid "integer of size %lu not supported by pqGetInt" msgstr "ακέραιος μεγέθους %lu δεν υποστηρίζεται από pqGetInt" -#: fe-misc.c:325 +#: fe-misc.c:275 #, c-format msgid "integer of size %lu not supported by pqPutInt" msgstr "ακέραιος μεγέθους %lu δεν υποστηρίζεται από pqPutInt" -#: fe-misc.c:636 fe-misc.c:869 +#: fe-misc.c:576 fe-misc.c:822 msgid "connection not open\n" msgstr "μη ανοικτή σύνδεση\n" -#: fe-misc.c:805 fe-secure-openssl.c:209 fe-secure-openssl.c:316 -#: fe-secure.c:267 fe-secure.c:383 +#: fe-misc.c:755 fe-secure-openssl.c:209 fe-secure-openssl.c:316 +#: fe-secure.c:260 fe-secure.c:373 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -964,217 +852,163 @@ msgstr "" "\tΑυτό πιθανώς σημαίνει ότι ο διακομιστής τερματίστηκε ασυνήθιστα\n" "\tπριν ή κατά την επεξεργασία του αιτήματος.\n" -#: fe-misc.c:1063 +#: fe-misc.c:1015 msgid "timeout expired\n" msgstr "έληξε το χρονικό όριο\n" -#: fe-misc.c:1108 +#: fe-misc.c:1060 msgid "invalid socket\n" msgstr "άκυρος υποδοχέας\n" -#: fe-misc.c:1131 -#, c-format -msgid "select() failed: %s\n" -msgstr "απέτυχε το select(): %s\n" - -#: fe-protocol2.c:87 -#, c-format -msgid "invalid setenv state %c, probably indicative of memory corruption\n" -msgstr "μη έγκυρη κατάσταση %c setenv, πιθανώς ενδεικτική αλλοίωσης μνήμης\n" +#: fe-misc.c:1083 +#, fuzzy, c-format +#| msgid "%s() failed: %m" +msgid "%s() failed: %s\n" +msgstr "%s () απέτυχε: %m" -#: fe-protocol2.c:384 -#, c-format -msgid "invalid state %c, probably indicative of memory corruption\n" -msgstr "μη έγκυρη κατάσταση %c, πιθανώς ενδεικτική αλλοίωσης μνήμης\n" - -#: fe-protocol2.c:473 fe-protocol3.c:183 +#: fe-protocol3.c:196 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "μήνυμα τύπου 0x%02x έφτασε από το διακομιστή ενώ αυτός ήταν αδρανής" -#: fe-protocol2.c:523 -#, c-format -msgid "unexpected character %c following empty query response (\"I\" message)" -msgstr "" -"μη αναμενόμενος χαρακτήρας %c μετά από κενή απόκριση ερωτήματος (“I” μήνυμα)" +#: fe-protocol3.c:403 +msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" +msgstr "ο διακομιστής έστειλε δεδομένα (“D” μήνυμα) χωρίς προηγούμενη περιγραφή γραμμής (“T” μήνυμα)\n" -#: fe-protocol2.c:589 -#, c-format -msgid "" -"server sent data (\"D\" message) without prior row description (\"T\" " -"message)" -msgstr "" -"ο διακομιστής έστειλε δεδομένα (“D” μήνυμα) χωρίς προηγούμενη περιγραφή " -"γραμμής (“T” μήνυμα)" - -#: fe-protocol2.c:607 -#, c-format -msgid "" -"server sent binary data (\"B\" message) without prior row description (\"T\" " -"message)" -msgstr "" -"ο διακομιστής έστειλε δυαδικά δεδομένα (“B” μήνυμα) χωρίς προηγούμενη " -"περιγραφή γραμμής (“T” μήνυμα)" - -#: fe-protocol2.c:626 fe-protocol3.c:403 +#: fe-protocol3.c:446 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" -msgstr "" -"μη αναμενόμενη απόκριση από το διακομιστή· πρώτος χαρακτήρας που ελήφθη ήταν " -"\"%c\"\n" - -#: fe-protocol2.c:755 fe-protocol2.c:930 fe-protocol3.c:603 fe-protocol3.c:809 -msgid "out of memory for query result" -msgstr "έλλειψη μνήμης για το αποτέλεσμα ερωτήματος" +msgstr "μη αναμενόμενη απόκριση από το διακομιστή· πρώτος χαρακτήρας που ελήφθη ήταν \"%c\"\n" -#: fe-protocol2.c:1408 -#, c-format -msgid "lost synchronization with server, resetting connection" -msgstr "χάθηκε ο συγχρονισμός με τον διακομιστή, επαναρυθμίζεται η σύνδεση" - -#: fe-protocol2.c:1530 fe-protocol2.c:1562 fe-protocol3.c:2061 -#, c-format -msgid "protocol error: id=0x%x\n" -msgstr "σφάλμα πρωτοκόλλου: id=0x%x\n" - -#: fe-protocol3.c:360 -msgid "" -"server sent data (\"D\" message) without prior row description (\"T\" " -"message)\n" -msgstr "" -"ο διακομιστής έστειλε δεδομένα (“D” μήνυμα) χωρίς προηγούμενη περιγραφή " -"γραμμής (“T” μήνυμα)\n" - -#: fe-protocol3.c:424 +#: fe-protocol3.c:471 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" -msgstr "" -"τα περιεχόμενα του μηνύματος δεν συμφωνούν με το μήκος του σε τύπο μηνύματος " -"\"%c\"\n" +msgstr "τα περιεχόμενα του μηνύματος δεν συμφωνούν με το μήκος του σε τύπο μηνύματος \"%c\"\n" -#: fe-protocol3.c:444 +#: fe-protocol3.c:491 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" -msgstr "" -"χάθηκε ο συγχρονισμός με το διακομιστή: ελήφθει τύπος μηνύματος \"%c\", " -"μήκους %d\n" +msgstr "χάθηκε ο συγχρονισμός με το διακομιστή: ελήφθει τύπος μηνύματος \"%c\", μήκους %d\n" -#: fe-protocol3.c:494 fe-protocol3.c:534 +#: fe-protocol3.c:543 fe-protocol3.c:583 msgid "insufficient data in \"T\" message" msgstr "ανεπαρκή δεδομένα σε “T” μήνυμα" -#: fe-protocol3.c:672 +#: fe-protocol3.c:654 fe-protocol3.c:860 +msgid "out of memory for query result" +msgstr "έλλειψη μνήμης για το αποτέλεσμα ερωτήματος" + +#: fe-protocol3.c:723 msgid "insufficient data in \"t\" message" msgstr "ανεπαρκή δεδομένα σε “t” μήνυμα" -#: fe-protocol3.c:731 fe-protocol3.c:763 fe-protocol3.c:781 +#: fe-protocol3.c:782 fe-protocol3.c:814 fe-protocol3.c:832 msgid "insufficient data in \"D\" message" msgstr "ανεπαρκή δεδομένα σε “D” μήνυμα" -#: fe-protocol3.c:737 +#: fe-protocol3.c:788 msgid "unexpected field count in \"D\" message" msgstr "μη αναμενόμενο πλήθος πεδίων σε ”D” μήνυμα" -#: fe-protocol3.c:974 +#: fe-protocol3.c:1029 msgid "no error message available\n" msgstr "κανένα μήνυμα σφάλματος διαθέσιμο\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1022 fe-protocol3.c:1041 +#: fe-protocol3.c:1077 fe-protocol3.c:1096 #, c-format msgid " at character %s" msgstr "σε χαρακτήρα %s" -#: fe-protocol3.c:1054 +#: fe-protocol3.c:1109 #, c-format msgid "DETAIL: %s\n" msgstr "DETAIL: %s\n" -#: fe-protocol3.c:1057 +#: fe-protocol3.c:1112 #, c-format msgid "HINT: %s\n" msgstr "HINT: %s\n" -#: fe-protocol3.c:1060 +#: fe-protocol3.c:1115 #, c-format msgid "QUERY: %s\n" msgstr "ΕΡΩΤΗΜΑ: %s\n" -#: fe-protocol3.c:1067 +#: fe-protocol3.c:1122 #, c-format msgid "CONTEXT: %s\n" msgstr "CONTEXT: %s\n" -#: fe-protocol3.c:1076 +#: fe-protocol3.c:1131 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "SCHEMA NAME: %s\n" -#: fe-protocol3.c:1080 +#: fe-protocol3.c:1135 #, c-format msgid "TABLE NAME: %s\n" msgstr "TABLE NAME: %s\n" -#: fe-protocol3.c:1084 +#: fe-protocol3.c:1139 #, c-format msgid "COLUMN NAME: %s\n" msgstr "COLUMN NAME: %s\n" -#: fe-protocol3.c:1088 +#: fe-protocol3.c:1143 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "DATATYPE NAME: %s\n" -#: fe-protocol3.c:1092 +#: fe-protocol3.c:1147 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "CONSTRAINT NAME: %s\n" -#: fe-protocol3.c:1104 +#: fe-protocol3.c:1159 msgid "LOCATION: " msgstr "LOCATION: " -#: fe-protocol3.c:1106 +#: fe-protocol3.c:1161 #, c-format msgid "%s, " msgstr "%s," -#: fe-protocol3.c:1108 +#: fe-protocol3.c:1163 #, c-format msgid "%s:%s" msgstr "%s: %s" -#: fe-protocol3.c:1303 +#: fe-protocol3.c:1358 #, c-format msgid "LINE %d: " msgstr "ΓΡΑΜΜΗ %d: " -#: fe-protocol3.c:1698 +#: fe-protocol3.c:1757 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: δεν κάνει το κείμενο COPY OUT\n" +#: fe-protocol3.c:2123 +#, c-format +msgid "protocol error: id=0x%x\n" +msgstr "σφάλμα πρωτοκόλλου: id=0x%x\n" + #: fe-secure-common.c:124 msgid "SSL certificate's name contains embedded null\n" msgstr "το όνομα του πιστοποιητικού SSL περιέχει ενσωματωμένο null\n" #: fe-secure-common.c:171 msgid "host name must be specified for a verified SSL connection\n" -msgstr "" -"το όνομα κεντρικού υπολογιστή πρέπει να έχει καθοριστεί για μια επαληθευμένη " -"σύνδεση SSL\n" +msgstr "το όνομα κεντρικού υπολογιστή πρέπει να έχει καθοριστεί για μια επαληθευμένη σύνδεση SSL\n" #: fe-secure-common.c:196 #, c-format msgid "server certificate for \"%s\" does not match host name \"%s\"\n" -msgstr "" -"το πιστοποιητικό διακομιστή για το \"%s\" δεν ταιριάζει με το όνομα " -"κεντρικού υπολογιστή \"%s\"\n" +msgstr "το πιστοποιητικό διακομιστή για το \"%s\" δεν ταιριάζει με το όνομα κεντρικού υπολογιστή \"%s\"\n" #: fe-secure-common.c:202 msgid "could not get server's host name from server certificate\n" -msgstr "" -"δεν ήταν δυνατή η απόκτηση του όνοματος κεντρικού υπολογιστή του διακομιστή " -"από το πιστοποιητικό διακομιστή\n" +msgstr "δεν ήταν δυνατή η απόκτηση του όνοματος κεντρικού υπολογιστή του διακομιστή από το πιστοποιητικό διακομιστή\n" #: fe-secure-gssapi.c:201 msgid "GSSAPI wrap error" @@ -1187,8 +1021,7 @@ msgstr "το εξερχόμενο μήνυμα GSSAPI δεν θα χρησιμο #: fe-secure-gssapi.c:217 #, c-format msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" -msgstr "" -"ο πελάτης προσπάθησε να στείλει υπερμέγεθες πακέτο GSSAPI (%zu > %zu)\n" +msgstr "ο πελάτης προσπάθησε να στείλει υπερμέγεθες πακέτο GSSAPI (%zu > %zu)\n" #: fe-secure-gssapi.c:354 fe-secure-gssapi.c:596 #, c-format @@ -1215,16 +1048,16 @@ msgstr "σφάλμα ελέγχου μεγέθους GSSAPI" msgid "GSSAPI context establishment error" msgstr "σφάλμα δημιουργίας περιεχομένου GSSAPI" -#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1291 +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1329 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "SSL SYSCALL σφάλμα: %s\n" -#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1295 +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1333 msgid "SSL SYSCALL error: EOF detected\n" msgstr "SSL SYSCALL σφάλμα: ανιχνεύτηκε EOF\n" -#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1304 +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1342 #, c-format msgid "SSL error: %s\n" msgstr "SSL σφάλμα: %s\n" @@ -1233,16 +1066,14 @@ msgstr "SSL σφάλμα: %s\n" msgid "SSL connection has been closed unexpectedly\n" msgstr "η σύνδεση SSL έκλεισε απροσδόκητα\n" -#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1354 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1392 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "μη αναγνωρίσιμος κωδικός σφάλματος SSL: %d\n" #: fe-secure-openssl.c:400 msgid "could not determine server certificate signature algorithm\n" -msgstr "" -"δεν μπόρεσε να προσδιορίσει τον αλγόριθμο υπογραφής πιστοποιητικού " -"διακομιστή\n" +msgstr "δεν μπόρεσε να προσδιορίσει τον αλγόριθμο υπογραφής πιστοποιητικού διακομιστή\n" #: fe-secure-openssl.c:421 #, c-format @@ -1257,161 +1088,151 @@ msgstr "Δεν ήταν δυνατή η δημιουργία ομότιμου π msgid "SSL certificate's name entry is missing\n" msgstr "λείπει καταχώρηση ονόματος του πιστοποιητικού SSL\n" -#: fe-secure-openssl.c:815 +#: fe-secure-openssl.c:822 #, c-format msgid "could not create SSL context: %s\n" msgstr "δεν ήταν δυνατή η δημιουργία περιεχομένου SSL: %s\n" -#: fe-secure-openssl.c:854 +#: fe-secure-openssl.c:861 #, c-format msgid "invalid value \"%s\" for minimum SSL protocol version\n" msgstr "άκυρη τιμή \"%s\" για την ελάχιστη έκδοση πρωτοκόλλου SSL\n" -#: fe-secure-openssl.c:865 +#: fe-secure-openssl.c:872 #, c-format msgid "could not set minimum SSL protocol version: %s\n" msgstr "δεν ήταν δυνατό να ορίσει ελάχιστη έκδοση πρωτοκόλλου SSL: %s\n" -#: fe-secure-openssl.c:883 +#: fe-secure-openssl.c:890 #, c-format msgid "invalid value \"%s\" for maximum SSL protocol version\n" msgstr "άκυρη τιμή “%s” για μέγιστη έκδοση πρωτοκόλλου SSL\n" -#: fe-secure-openssl.c:894 +#: fe-secure-openssl.c:901 #, c-format msgid "could not set maximum SSL protocol version: %s\n" msgstr "δεν ήταν δυνατό να ορίσει μέγιστη έκδοση πρωτοκόλλου SSL: %s\n" -#: fe-secure-openssl.c:930 +#: fe-secure-openssl.c:937 #, c-format msgid "could not read root certificate file \"%s\": %s\n" msgstr "δεν ήταν δυνατή η ανάγνωση βασικού αρχείου πιστοποιητικού “%s”: %s\n" -#: fe-secure-openssl.c:974 +#: fe-secure-openssl.c:990 msgid "" "could not get home directory to locate root certificate file\n" -"Either provide the file or change sslmode to disable server certificate " -"verification.\n" +"Either provide the file or change sslmode to disable server certificate verification.\n" msgstr "" -"δεν ήταν δυνατή η δημιουργία του προσωπικού καταλόγου για τον εντοπισμό " -"βασικού αρχείου πιστοποιητικού\n" -"Δώστε το αρχείο ή αλλάξτε το sslmode για να απενεργοποιήσετε την επαλήθευση " -"πιστοποιητικού διακομιστή.\n" +"δεν ήταν δυνατή η δημιουργία του προσωπικού καταλόγου για τον εντοπισμό βασικού αρχείου πιστοποιητικού\n" +"Δώστε το αρχείο ή αλλάξτε το sslmode για να απενεργοποιήσετε την επαλήθευση πιστοποιητικού διακομιστή.\n" -#: fe-secure-openssl.c:978 +#: fe-secure-openssl.c:994 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" -"Either provide the file or change sslmode to disable server certificate " -"verification.\n" +"Either provide the file or change sslmode to disable server certificate verification.\n" msgstr "" "βασικό αρχείο πιστοποιητικού \"%s\" δεν υπάρχει\n" -"Είτε παρουσιάστε το αρχείο ή αλλάξτε το sslmode για να απενεργοποιήσετε την " -"επαλήθευση πιστοποιητικού διακομιστή.\n" +"Είτε παρουσιάστε το αρχείο ή αλλάξτε το sslmode για να απενεργοποιήσετε την επαλήθευση πιστοποιητικού διακομιστή.\n" -#: fe-secure-openssl.c:1009 +#: fe-secure-openssl.c:1025 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου πιστοποιητικού “%s”: %s\n" -#: fe-secure-openssl.c:1028 +#: fe-secure-openssl.c:1044 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "δεν ήταν δυνατή η ανάγνωση αρχείου πιστοποιητικού “%s”: %s\n" -#: fe-secure-openssl.c:1053 +#: fe-secure-openssl.c:1069 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "δεν ήταν δυνατή η δημιουργία σύνδεσης SSL: %s\n" -#: fe-secure-openssl.c:1107 +#: fe-secure-openssl.c:1099 +#, fuzzy, c-format +#| msgid "could not send SSL negotiation packet: %s\n" +msgid "could not set SSL Server Name Indication (SNI): %s\n" +msgstr "" +"δεν ήταν δυνατή η αποστολή SSL πακέτου διαπραγμάτευσης: %s\n" +"\n" + +#: fe-secure-openssl.c:1145 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "δεν ήταν δυνατή η φόρτωση της μηχανής SSL \"%s\": %s\n" -#: fe-secure-openssl.c:1119 +#: fe-secure-openssl.c:1157 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "" "δεν ήταν δυνατή η εκκίνηση του κινητήρα SSL ”%s”: %s\n" "\n" -#: fe-secure-openssl.c:1135 +#: fe-secure-openssl.c:1173 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" -msgstr "" -"δεν ήταν δυνατή η ανάγνωση του ιδιωτικού κλειδιού SSL \"%s\" από την μηχανή " -"\"%s\": %s\n" +msgstr "δεν ήταν δυνατή η ανάγνωση του ιδιωτικού κλειδιού SSL \"%s\" από την μηχανή \"%s\": %s\n" -#: fe-secure-openssl.c:1149 +#: fe-secure-openssl.c:1187 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" -msgstr "" -"δεν ήταν δυνατή η φόρτωση του ιδιωτικού κλειδιού SSL \"%s\" από την μηχανή " -"\"%s\": %s\n" +msgstr "δεν ήταν δυνατή η φόρτωση του ιδιωτικού κλειδιού SSL \"%s\" από την μηχανή \"%s\": %s\n" -#: fe-secure-openssl.c:1186 +#: fe-secure-openssl.c:1224 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "υπάρχει πιστοποιητικό, αλλά όχι αρχείο ιδιωτικού κλειδιού \"%s\"\n" -#: fe-secure-openssl.c:1194 +#: fe-secure-openssl.c:1232 #, c-format -msgid "" -"private key file \"%s\" has group or world access; permissions should be " -"u=rw (0600) or less\n" -msgstr "" -"αρχείο ιδιωτικού κλειδιού \"%s\" έχει ομαδική ή παγκόσμια πρόσβαση· τα " -"δικαιώματα πρέπει να είναι U=RW (0600) ή λιγότερα\n" +msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" +msgstr "αρχείο ιδιωτικού κλειδιού \"%s\" έχει ομαδική ή παγκόσμια πρόσβαση· τα δικαιώματα πρέπει να είναι U=RW (0600) ή λιγότερα\n" -#: fe-secure-openssl.c:1219 +#: fe-secure-openssl.c:1257 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "δεν ήταν δυνατή η φόρτωση αρχείου ιδιωτικού κλειδιού “%s”: %s\n" -#: fe-secure-openssl.c:1237 +#: fe-secure-openssl.c:1275 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" -msgstr "" -"το πιστοποιητικό δεν ταιριάζει με το αρχείο ιδιωτικού κλειδιού “%s”: %s\n" +msgstr "το πιστοποιητικό δεν ταιριάζει με το αρχείο ιδιωτικού κλειδιού “%s”: %s\n" -#: fe-secure-openssl.c:1337 +#: fe-secure-openssl.c:1375 #, c-format -msgid "" -"This may indicate that the server does not support any SSL protocol version " -"between %s and %s.\n" -msgstr "" -"Αυτό μπορεί να υποδεικνύει ότι ο διακομιστής δεν υποστηρίζει καμία έκδοση " -"πρωτοκόλλου SSL μεταξύ %s και %s.\n" +msgid "This may indicate that the server does not support any SSL protocol version between %s and %s.\n" +msgstr "Αυτό μπορεί να υποδεικνύει ότι ο διακομιστής δεν υποστηρίζει καμία έκδοση πρωτοκόλλου SSL μεταξύ %s και %s.\n" -#: fe-secure-openssl.c:1373 +#: fe-secure-openssl.c:1411 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "" "δεν ήταν δυνατή η λήψη πιστοποιητικού: %s\n" "\n" -#: fe-secure-openssl.c:1462 +#: fe-secure-openssl.c:1517 #, c-format msgid "no SSL error reported" msgstr "δεν αναφέρθηκε κανένα σφάλμα SSL" -#: fe-secure-openssl.c:1471 +#: fe-secure-openssl.c:1526 #, c-format msgid "SSL error code %lu" msgstr "κωδικός σφάλματος SSL %lu" -#: fe-secure-openssl.c:1718 +#: fe-secure-openssl.c:1773 #, c-format msgid "WARNING: sslpassword truncated\n" msgstr "WARNING: περικομμένο sslpassword\n" -#: fe-secure.c:275 +#: fe-secure.c:267 #, c-format msgid "could not receive data from server: %s\n" msgstr "δεν ήταν δυνατή η λήψη δεδομένων από το διακομιστή: %s\n" -#: fe-secure.c:390 +#: fe-secure.c:380 #, c-format msgid "could not send data to server: %s\n" msgstr "δεν ήταν δυνατή η αποστολή δεδομένων στο διακομιστή: %s\n" @@ -1420,3 +1241,107 @@ msgstr "δεν ήταν δυνατή η αποστολή δεδομένων στ #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "μη αναγνωρίσιμο σφάλμα υποδοχής: 0x%08X/%d" + +#~ msgid "lost synchronization with server, resetting connection" +#~ msgstr "χάθηκε ο συγχρονισμός με τον διακομιστή, επαναρυθμίζεται η σύνδεση" + +#~ msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" +#~ msgstr "ο διακομιστής έστειλε δυαδικά δεδομένα (“B” μήνυμα) χωρίς προηγούμενη περιγραφή γραμμής (“T” μήνυμα)" + +#~ msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" +#~ msgstr "ο διακομιστής έστειλε δεδομένα (“D” μήνυμα) χωρίς προηγούμενη περιγραφή γραμμής (“T” μήνυμα)" + +#~ msgid "unexpected character %c following empty query response (\"I\" message)" +#~ msgstr "μη αναμενόμενος χαρακτήρας %c μετά από κενή απόκριση ερωτήματος (“I” μήνυμα)" + +#~ msgid "invalid state %c, probably indicative of memory corruption\n" +#~ msgstr "μη έγκυρη κατάσταση %c, πιθανώς ενδεικτική αλλοίωσης μνήμης\n" + +#~ msgid "invalid setenv state %c, probably indicative of memory corruption\n" +#~ msgstr "μη έγκυρη κατάσταση %c setenv, πιθανώς ενδεικτική αλλοίωσης μνήμης\n" + +#~ msgid "select() failed: %s\n" +#~ msgstr "απέτυχε το select(): %s\n" + +#~ msgid "cannot determine OID of function lowrite\n" +#~ msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lowrite\n" + +#~ msgid "cannot determine OID of function loread\n" +#~ msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης loread\n" + +#~ msgid "cannot determine OID of function lo_lseek\n" +#~ msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_lseek\n" + +#~ msgid "cannot determine OID of function lo_unlink\n" +#~ msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_unlink\n" + +#~ msgid "cannot determine OID of function lo_creat\n" +#~ msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_creat\n" + +#~ msgid "cannot determine OID of function lo_open\n" +#~ msgstr "δεν είναι δυνατός ο προσδιορισμός του OID της συνάρτησης lo_open\n" + +#~ msgid "cannot determine OID of function lo_tell64\n" +#~ msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_tell64\n" + +#~ msgid "cannot determine OID of function lo_create\n" +#~ msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_create\n" + +#~ msgid "cannot determine OID of function lo_lseek64\n" +#~ msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_lseek64\n" + +#~ msgid "cannot determine OID of function lo_truncate64\n" +#~ msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_truncate64\n" + +#~ msgid "cannot determine OID of function lo_truncate\n" +#~ msgstr "δεν μπόρεσε να προσδιορίσει το OID της συνάρτησης lo_truncate\n" + +#~ msgid "COPY OUT state must be terminated first\n" +#~ msgstr "πρέπει πρώτα να τερματιστεί η κατάσταση COPY OUT\n" + +#~ msgid "COPY IN state must be terminated first\n" +#~ msgstr "" +#~ "πρέπει πρώτα να τερματιστεί η κατάσταση COPY IN\n" +#~ "\n" + +#~ msgid "function requires at least protocol version 3.0\n" +#~ msgstr "η συνάρτηση απαιτεί πρωτόκολλο ελάχιστης έκδοσης 3.0\n" + +#~ msgid "line %d too long in service file \"%s\"\n" +#~ msgstr "Πολύ μακρυά γραμμή %d στο αρχείο υπηρεσίας “%s”\n" + +#~ msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" +#~ msgstr "το τεστ “SHOW transaction_read_only” απέτυχε στον διακομιστή “%s:%s”\n" + +#~ msgid "could not make a writable connection to server \"%s:%s\"\n" +#~ msgstr "δεν ήταν δυνατή η πραγματοποίηση εγγράψιμης σύνδεσης με το διακομιστή \"%s:%s\"\n" + +#~ msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" +#~ msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) απέτυχε: %ui\n" + +#~ msgid "setsockopt(%s) failed: %s\n" +#~ msgstr "setsockopt(%s) απέτυχε: %s\n" + +#~ msgid "" +#~ "could not connect to server: %s\n" +#~ "\tIs the server running on host \"%s\" (%s) and accepting\n" +#~ "\tTCP/IP connections on port %s?\n" +#~ msgstr "" +#~ "δεν ήταν δυνατή η σύνδεση με το διακομιστή: %s\n" +#~ "\tΕκτελείται ο διακομιστής στον κεντρικό υπολογιστή ”%s” (%s) και αποδέχεται\n" +#~ "\tσυνδέσεις TCP/IP στην θύρα %s;\n" + +#~ msgid "invalid target_session_attrs value: \"%s\"\n" +#~ msgstr "άκυρη τιμή target_session_attrs: “%s”\n" + +#~ msgid "invalid gssencmode value: \"%s\"\n" +#~ msgstr "άκυρη τιμή gssencmode: “%s”\n" + +#~ msgid "invalid ssl_max_protocol_version value: \"%s\"\n" +#~ msgstr "άκυρη τιμή ssl_max_protocol_version: “%s”\n" + +#~ msgid "invalid ssl_min_protocol_version value: \"%s\"\n" +#~ msgstr "άκυρη τιμή ssl_min_protocol_version: “%s”\n" + +#~ msgid "invalid channel_binding value: \"%s\"\n" +#~ msgstr "άκυρη τιμή channel_binding: “%s”\n" diff --git a/src/interfaces/libpq/po/es.po b/src/interfaces/libpq/po/es.po index becb90181ac13..1cb1dc86b7556 100644 --- a/src/interfaces/libpq/po/es.po +++ b/src/interfaces/libpq/po/es.po @@ -6,21 +6,21 @@ # Karim , 2002. # Alvaro Herrera , 2003-2013 # Mario González , 2005 -# Carlos Chapi , 2017, 2018 +# Carlos Chapi , 2017-2021 # msgid "" msgstr "" "Project-Id-Version: libpq (PostgreSQL) 12\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-14 19:39+0000\n" -"PO-Revision-Date: 2020-09-12 22:47-0300\n" +"POT-Creation-Date: 2021-06-11 16:39+0000\n" +"PO-Revision-Date: 2021-06-14 19:58-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: BlackCAT 1.1\n" #: fe-auth-scram.c:213 msgid "malformed SCRAM message (empty message)\n" @@ -31,10 +31,8 @@ msgid "malformed SCRAM message (length mismatch)\n" msgstr "mensaje SCRAM mal formado (longitud no coincide)\n" #: fe-auth-scram.c:263 -#, fuzzy -#| msgid "could not get server version" msgid "could not verify server signature\n" -msgstr "no se pudo obtener la versión del servidor" +msgstr "no se pudo verificar la signatura del servidor\n" #: fe-auth-scram.c:270 msgid "incorrect server signature\n" @@ -67,10 +65,10 @@ msgstr "no se pude generar nonce\n" #: fe-connect.c:5364 fe-connect.c:5463 fe-connect.c:5719 fe-connect.c:5748 #: fe-connect.c:5820 fe-connect.c:5844 fe-connect.c:5862 fe-connect.c:5963 #: fe-connect.c:5972 fe-connect.c:6330 fe-connect.c:6480 fe-exec.c:1209 -#: fe-exec.c:2993 fe-exec.c:3145 fe-exec.c:3918 fe-exec.c:4083 +#: fe-exec.c:2996 fe-exec.c:3148 fe-exec.c:3921 fe-exec.c:4086 #: fe-gssapi-common.c:110 fe-lobj.c:881 fe-protocol3.c:1016 fe-protocol3.c:1724 #: fe-secure-common.c:110 fe-secure-gssapi.c:504 fe-secure-openssl.c:440 -#: fe-secure-openssl.c:1129 +#: fe-secure-openssl.c:1133 msgid "out of memory\n" msgstr "memoria agotada\n" @@ -79,10 +77,8 @@ msgid "could not encode nonce\n" msgstr "no se pude generar nonce\n" #: fe-auth-scram.c:563 -#, fuzzy -#| msgid "could not encode client proof\n" msgid "could not calculate client proof\n" -msgstr "no se pudo codificar la prueba del cliente\n" +msgstr "no se pudo calcular la prueba del cliente\n" #: fe-auth-scram.c:579 msgid "could not encode client proof\n" @@ -261,10 +257,9 @@ msgstr "no se pudo emparejar %d números de puertos a %d hosts\n" #: fe-connect.c:1269 fe-connect.c:1295 fe-connect.c:1337 fe-connect.c:1346 #: fe-connect.c:1379 fe-connect.c:1423 -#, fuzzy, c-format -#| msgid "invalid sslmode value: \"%s\"\n" +#, c-format msgid "invalid %s value: \"%s\"\n" -msgstr "valor sslmode no válido: «%s»\n" +msgstr "valor %s no válido: «%s»\n" #: fe-connect.c:1316 #, c-format @@ -286,46 +281,27 @@ msgid "could not set socket to TCP no delay mode: %s\n" msgstr "no se pudo establecer el socket en modo TCP sin retardo: %s\n" #: fe-connect.c:1711 -#, fuzzy, c-format -#| msgid "connection to database \"%s\" failed: %s" +#, c-format msgid "connection to server on socket \"%s\" failed: " -msgstr "falló la conexión a la base de datos «%s»: %s" +msgstr "falló la conexión al servidor en el socket «%s»: " #: fe-connect.c:1738 -#, fuzzy, c-format -#| msgid "connection to database \"%s\" failed: %s" +#, c-format msgid "connection to server at \"%s\" (%s), port %s failed: " -msgstr "falló la conexión a la base de datos «%s»: %s" +msgstr "falló la conexión al servidor en «%s» (%s), puerto %s: " #: fe-connect.c:1743 -#, fuzzy, c-format -#| msgid "connection to database \"%s\" failed: %s" +#, c-format msgid "connection to server at \"%s\", port %s failed: " -msgstr "falló la conexión a la base de datos «%s»: %s" +msgstr "falló la conexión al servidor en «%s», puerto %s: " #: fe-connect.c:1768 -#, fuzzy -#| msgid "" -#| "could not connect to server: %s\n" -#| "\tIs the server running locally and accepting\n" -#| "\tconnections on Unix domain socket \"%s\"?\n" msgid "\tIs the server running locally and accepting connections on that socket?\n" -msgstr "" -"no se pudo conectar con el servidor: %s\n" -"\t¿Está el servidor en ejecución localmente y aceptando\n" -"\tconexiones en el socket de dominio Unix «%s»?\n" +msgstr "\t¿Está el servidor en ejecución localmente y aceptando conexiones en ese socket?\n" #: fe-connect.c:1772 -#, fuzzy -#| msgid "" -#| "could not connect to server: %s\n" -#| "\tIs the server running on host \"%s\" and accepting\n" -#| "\tTCP/IP connections on port %s?\n" msgid "\tIs the server running on that host and accepting TCP/IP connections?\n" -msgstr "" -"no se pudo conectar con el servidor: %s\n" -"\t¿Está el servidor en ejecución en el servidor «%s» y aceptando\n" -"\tconexiones TCP/IP en el puerto %s?\n" +msgstr "\t¿Está el servidor en ejecución en ese host y aceptando conexiones TCP/IP?\n" #: fe-connect.c:1836 #, c-format @@ -334,16 +310,14 @@ msgstr "valor entero «%s» no válido para la opción de conexión «%s»\n" #: fe-connect.c:1866 fe-connect.c:1901 fe-connect.c:1937 fe-connect.c:2026 #: fe-connect.c:2640 -#, fuzzy, c-format -#| msgid "%s failed: %s" +#, c-format msgid "%s(%s) failed: %s\n" -msgstr "%s falló: %s" +msgstr "%s(%s) falló: %s\n" #: fe-connect.c:1991 -#, fuzzy, c-format -#| msgid "pgpipe: getsockname() failed: error code %d" +#, c-format msgid "%s(%s) failed: error code %d\n" -msgstr "pgpipe: getsockname() falló: código de error %d" +msgstr "%s(%s) falló: código de error %d\n" #: fe-connect.c:2306 msgid "invalid connection state, probably indicative of memory corruption\n" @@ -465,31 +439,24 @@ msgstr "se ha recibido un mensaje inesperado del servidor durante el inicio\n" #: fe-connect.c:3584 msgid "session is read-only\n" -msgstr "" +msgstr "la sesión es de solo lectura\n" #: fe-connect.c:3587 msgid "session is not read-only\n" -msgstr "" +msgstr "la sesión no es de solo lectura\n" #: fe-connect.c:3641 -#, fuzzy -#| msgid "entering standby mode" msgid "server is in hot standby mode\n" -msgstr "entrando al modo standby" +msgstr "el servidor está en modo hot standby\n" #: fe-connect.c:3644 -#, fuzzy -#| msgid "%s: cannot promote server; server is not in standby mode\n" msgid "server is not in hot standby mode\n" -msgstr "" -"%s: no se puede promover el servidor;\n" -"el servidor no está en modo «standby»\n" +msgstr "el servidor no está en modo hot standby\n" #: fe-connect.c:3755 fe-connect.c:3807 -#, fuzzy, c-format -#| msgid " failed\n" +#, c-format msgid "\"%s\" failed\n" -msgstr " falló\n" +msgstr "«%s» falló\n" #: fe-connect.c:3821 #, c-format @@ -650,7 +617,7 @@ msgstr "ADVERTENCIA: El archivo de claves «%s» tiene permiso de lectura para e msgid "password retrieved from file \"%s\"\n" msgstr "contraseña obtenida desde el archivo «%s»\n" -#: fe-exec.c:449 fe-exec.c:3219 +#: fe-exec.c:449 fe-exec.c:3222 #, c-format msgid "row number %d is out of range 0..%d" msgstr "el número de fila %d está fuera del rango 0..%d" @@ -681,112 +648,109 @@ msgstr "PGresult no puede soportar un número de tuplas mayor que INT_MAX" msgid "size_t overflow" msgstr "desbordamiento de size_t" -#: fe-exec.c:1302 fe-exec.c:1403 fe-exec.c:1451 +#: fe-exec.c:1302 fe-exec.c:1403 fe-exec.c:1452 msgid "command string is a null pointer\n" msgstr "la cadena de orden es un puntero nulo\n" -#: fe-exec.c:1409 fe-exec.c:1457 fe-exec.c:1554 -msgid "number of parameters must be between 0 and 65535\n" -msgstr "el número de parámetros debe estar entre 0 y 65535\n" +#: fe-exec.c:1409 fe-exec.c:1458 fe-exec.c:1556 +#, c-format +msgid "number of parameters must be between 0 and %d\n" +msgstr "el número de parámetros debe estar entre 0 y %d\n" -#: fe-exec.c:1445 fe-exec.c:1548 +#: fe-exec.c:1446 fe-exec.c:1550 msgid "statement name is a null pointer\n" msgstr "el nombre de sentencia es un puntero nulo\n" -#: fe-exec.c:1589 +#: fe-exec.c:1592 msgid "no connection to the server\n" msgstr "no hay conexión con el servidor\n" -#: fe-exec.c:1598 +#: fe-exec.c:1601 msgid "another command is already in progress\n" msgstr "hay otra orden en ejecución\n" -#: fe-exec.c:1627 +#: fe-exec.c:1630 msgid "cannot queue commands during COPY\n" -msgstr "" +msgstr "no se puede agregar órdenes a la cola mientras se hace COPY\n" -#: fe-exec.c:1745 +#: fe-exec.c:1748 msgid "length must be given for binary parameter\n" msgstr "el largo debe ser especificado para un parámetro binario\n" -#: fe-exec.c:2066 +#: fe-exec.c:2069 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "asyncStatus no esperado: %d\n" -#: fe-exec.c:2086 +#: fe-exec.c:2089 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEventProc «%s» falló durante el evento PGEVT_RESULTCREATE\n" -#: fe-exec.c:2234 -#, fuzzy -#| msgid "set-returning functions are not allowed in partition bound" +#: fe-exec.c:2237 msgid "synchronous command execution functions are not allowed in pipeline mode\n" -msgstr "no se permiten funciones que retornan conjuntos en bordes de partición" +msgstr "no se permiten funciones que ejecuten órdenes sincrónicas en modo pipeline\n" -#: fe-exec.c:2256 +#: fe-exec.c:2259 msgid "COPY terminated by new PQexec" msgstr "COPY terminado por un nuevo PQexec" -#: fe-exec.c:2273 +#: fe-exec.c:2276 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec no está permitido durante COPY BOTH\n" -#: fe-exec.c:2502 fe-exec.c:2558 fe-exec.c:2627 fe-protocol3.c:1863 +#: fe-exec.c:2505 fe-exec.c:2561 fe-exec.c:2630 fe-protocol3.c:1863 msgid "no COPY in progress\n" msgstr "no hay COPY alguno en ejecución\n" -#: fe-exec.c:2804 +#: fe-exec.c:2807 msgid "PQfn not allowed in pipeline mode\n" -msgstr "" +msgstr "no se permite PQfn en modo pipeline\n" -#: fe-exec.c:2812 +#: fe-exec.c:2815 msgid "connection in wrong state\n" msgstr "la conexión está en un estado incorrecto\n" -#: fe-exec.c:2856 -#, fuzzy -#| msgid "cannot determine OID of function lo_tell\n" +#: fe-exec.c:2859 msgid "cannot enter pipeline mode, connection not idle\n" -msgstr "no se puede determinar el OID de la función lo_tell\n" +msgstr "no se puede entrar en modo pipeline, la conexión no está inactiva\n" -#: fe-exec.c:2890 fe-exec.c:2907 +#: fe-exec.c:2893 fe-exec.c:2910 msgid "cannot exit pipeline mode with uncollected results\n" -msgstr "" +msgstr "no se puede salir de modo pipeline al tener resultados sin recolectar\n" -#: fe-exec.c:2895 +#: fe-exec.c:2898 msgid "cannot exit pipeline mode while busy\n" -msgstr "" +msgstr "no se puede salir de modo pipeline mientras haya actividad\n" -#: fe-exec.c:3037 +#: fe-exec.c:3040 msgid "cannot send pipeline when not in pipeline mode\n" -msgstr "" +msgstr "no se puede enviar pipeline cuando no se está en modo pipeline\n" -#: fe-exec.c:3108 +#: fe-exec.c:3111 msgid "invalid ExecStatusType code" msgstr "el código de ExecStatusType no es válido" -#: fe-exec.c:3135 +#: fe-exec.c:3138 msgid "PGresult is not an error result\n" msgstr "PGresult no es un resultado de error\n" -#: fe-exec.c:3203 fe-exec.c:3226 +#: fe-exec.c:3206 fe-exec.c:3229 #, c-format msgid "column number %d is out of range 0..%d" msgstr "el número de columna %d está fuera del rango 0..%d" -#: fe-exec.c:3241 +#: fe-exec.c:3244 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "el número de parámetro %d está fuera del rango 0..%d" -#: fe-exec.c:3551 +#: fe-exec.c:3554 #, c-format msgid "could not interpret result from server: %s" msgstr "no se pudo interpretar el resultado del servidor: %s" -#: fe-exec.c:3811 fe-exec.c:3900 +#: fe-exec.c:3814 fe-exec.c:3903 msgid "incomplete multibyte character\n" msgstr "carácter multibyte incompleto\n" @@ -797,10 +761,9 @@ msgstr "error de importación de nombre de GSSAPI" #: fe-lobj.c:145 fe-lobj.c:210 fe-lobj.c:403 fe-lobj.c:494 fe-lobj.c:568 #: fe-lobj.c:969 fe-lobj.c:977 fe-lobj.c:985 fe-lobj.c:993 fe-lobj.c:1001 #: fe-lobj.c:1009 fe-lobj.c:1017 fe-lobj.c:1025 -#, fuzzy, c-format -#| msgid "cannot determine OID of function lo_close\n" +#, c-format msgid "cannot determine OID of function %s\n" -msgstr "no se puede determinar el OID de la función lo_close\n" +msgstr "no se puede determinar el OID de la función %s\n" #: fe-lobj.c:162 msgid "argument of lo_truncate exceeds integer range\n" @@ -867,10 +830,9 @@ msgid "invalid socket\n" msgstr "socket no válido\n" #: fe-misc.c:1083 -#, fuzzy, c-format -#| msgid "%s failed: %s" +#, c-format msgid "%s() failed: %s\n" -msgstr "%s falló: %s" +msgstr "%s() falló: %s\n" #: fe-protocol3.c:196 #, c-format @@ -905,10 +867,8 @@ msgid "out of memory for query result" msgstr "no hay suficiente memoria para el resultado de la consulta" #: fe-protocol3.c:723 -#, fuzzy -#| msgid "insufficient data in \"T\" message" msgid "insufficient data in \"t\" message" -msgstr "datos insuficientes en el mensaje «T»" +msgstr "datos insuficientes en el mensaje «t»" #: fe-protocol3.c:782 fe-protocol3.c:814 fe-protocol3.c:832 msgid "insufficient data in \"D\" message" @@ -1056,16 +1016,16 @@ msgstr "error de verificación de tamaño GSSAPI" msgid "GSSAPI context establishment error" msgstr "error de establecimiento de contexto de GSSAPI" -#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1329 +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1333 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "ERROR en llamada SSL: %s\n" -#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1333 +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1337 msgid "SSL SYSCALL error: EOF detected\n" msgstr "ERROR en llamada SSL: detectado fin de archivo\n" -#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1342 +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1346 #, c-format msgid "SSL error: %s\n" msgstr "error de SSL: %s\n" @@ -1074,7 +1034,7 @@ msgstr "error de SSL: %s\n" msgid "SSL connection has been closed unexpectedly\n" msgstr "la conexión SSL se ha cerrado inesperadamente\n" -#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1392 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1396 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "código de error SSL no reconocido: %d\n" @@ -1158,73 +1118,72 @@ msgstr "no se pudo leer el archivo de certificado «%s»: %s\n" msgid "could not establish SSL connection: %s\n" msgstr "no se pudo establecer conexión SSL: %s\n" -#: fe-secure-openssl.c:1099 -#, fuzzy, c-format -#| msgid "could not send SSL negotiation packet: %s\n" +#: fe-secure-openssl.c:1103 +#, c-format msgid "could not set SSL Server Name Indication (SNI): %s\n" -msgstr "no se pudo enviar el paquete de negociación SSL: %s\n" +msgstr "no se pudo establecer el Indicador de Nombre del Servidor (SNI) de SSL: %s\n" -#: fe-secure-openssl.c:1145 +#: fe-secure-openssl.c:1149 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "no se pudo cargar el motor SSL «%s»: %s\n" -#: fe-secure-openssl.c:1157 +#: fe-secure-openssl.c:1161 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "no se pudo inicializar el motor SSL «%s»: %s\n" -#: fe-secure-openssl.c:1173 +#: fe-secure-openssl.c:1177 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "no se pudo leer el archivo de la llave privada SSL «%s» desde el motor «%s»: %s\n" -#: fe-secure-openssl.c:1187 +#: fe-secure-openssl.c:1191 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "no se pudo leer la llave privada SSL «%s» desde el motor «%s»: %s\n" -#: fe-secure-openssl.c:1224 +#: fe-secure-openssl.c:1228 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "el certificado está presente, pero no la llave privada «%s»\n" -#: fe-secure-openssl.c:1232 +#: fe-secure-openssl.c:1236 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "el archivo de la llave privada «%s» tiene permiso de lectura para el grupo u otros; los permisos deberían ser u=rw (0600) o menos\n" -#: fe-secure-openssl.c:1257 +#: fe-secure-openssl.c:1261 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "no se pudo cargar el archivo de la llave privada «%s»: %s\n" -#: fe-secure-openssl.c:1275 +#: fe-secure-openssl.c:1279 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "el certificado no coincide con la llave privada «%s»: %s\n" -#: fe-secure-openssl.c:1375 +#: fe-secure-openssl.c:1379 #, c-format msgid "This may indicate that the server does not support any SSL protocol version between %s and %s.\n" msgstr "Esto puede indicar que el servidor no soporta ninguna versión del protocolo SSL entre %s and %s.\n" -#: fe-secure-openssl.c:1411 +#: fe-secure-openssl.c:1415 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "el certificado no pudo ser obtenido: %s\n" -#: fe-secure-openssl.c:1517 +#: fe-secure-openssl.c:1521 #, c-format msgid "no SSL error reported" msgstr "código de error SSL no reportado" -#: fe-secure-openssl.c:1526 +#: fe-secure-openssl.c:1530 #, c-format msgid "SSL error code %lu" msgstr "código de error SSL %lu" -#: fe-secure-openssl.c:1773 +#: fe-secure-openssl.c:1777 #, c-format msgid "WARNING: sslpassword truncated\n" msgstr "ADVERTENCIA: sslpassword truncada\n" @@ -1244,113 +1203,113 @@ msgstr "no se pudo enviar datos al servidor: %s\n" msgid "unrecognized socket error: 0x%08X/%d" msgstr "código de error de socket no reconocido: 0x%08X/%d" -#~ msgid "extraneous data in \"D\" message" -#~ msgstr "datos ininteligibles en mensaje «D»" +#~ msgid "invalid channel_binding value: \"%s\"\n" +#~ msgstr "valor cidr no válido: «%s»\n" -#~ msgid "extraneous data in \"t\" message" -#~ msgstr "datos ininteligibles en mensaje «t»" +#~ msgid "invalid ssl_min_protocol_version value: \"%s\"\n" +#~ msgstr "valor sslmode no válido: «%s»\n" -#~ msgid "extraneous data in \"T\" message" -#~ msgstr "datos ininteligibles en mensaje «T»" +#~ msgid "invalid ssl_max_protocol_version value: \"%s\"\n" +#~ msgstr "valor sslmode no válido: «%s»\n" -#~ msgid "lost synchronization with server, resetting connection" -#~ msgstr "se perdió la sincronía con el servidor, reseteando la conexión" +#~ msgid "invalid gssencmode value: \"%s\"\n" +#~ msgstr "valor gssencmode no válido: «%s»\n" -#~ msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" -#~ msgstr "el servidor envió datos binarios (mensaje «B») sin precederlos con una description de fila (mensaje «T»)" +#~ msgid "invalid target_session_attrs value: \"%s\"\n" +#~ msgstr "valor para target_session_attrs no válido: «%s»\n" -#~ msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" -#~ msgstr "el servidor envió datos (mensaje «D») sin precederlos con una descripción de fila (mensaje «T»)" +#~ msgid "" +#~ "could not connect to server: %s\n" +#~ "\tIs the server running on host \"%s\" (%s) and accepting\n" +#~ "\tTCP/IP connections on port %s?\n" +#~ msgstr "" +#~ "no se pudo conectar con el servidor: %s\n" +#~ "\t¿Está el servidor en ejecución en el servidor «%s» (%s) y aceptando\n" +#~ "\tconexiones TCP/IP en el puerto %s?\n" -#~ msgid "unexpected character %c following empty query response (\"I\" message)" -#~ msgstr "carácter %c no esperado, siguiendo una respuesta de consulta vacía (mensaje «I»)" +#~ msgid "setsockopt(%s) failed: %s\n" +#~ msgstr "setsockopt(%s) falló: %s\n" -#~ msgid "invalid state %c, probably indicative of memory corruption\n" -#~ msgstr "el estado %c no es válido, probablemente por corrupción de memoria\n" +#~ msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" +#~ msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" -#~ msgid "invalid setenv state %c, probably indicative of memory corruption\n" -#~ msgstr "el estado de setenv %c no es válido, probablemente por corrupción de memoria\n" +#~ msgid "could not make a writable connection to server \"%s:%s\"\n" +#~ msgstr "no se pudo establecer una conexión de escritura al servidor: «%s:%s»\n" -#~ msgid "select() failed: %s\n" -#~ msgstr "select() fallida: %s\n" +#~ msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" +#~ msgstr "la prueba «SHOW transaction_read_only» falló en el servidor «%s:%s»\n" -#~ msgid "cannot determine OID of function lowrite\n" -#~ msgstr "no se puede determinar el OID de la función lowrite\n" +#~ msgid "line %d too long in service file \"%s\"\n" +#~ msgstr "la línea %d es demasiado larga en archivo de servicio «%s»\n" -#~ msgid "cannot determine OID of function loread\n" -#~ msgstr "no se puede determinar el OID de la función loread\n" +#~ msgid "function requires at least protocol version 3.0\n" +#~ msgstr "la función requiere protocolo 3.0 o superior\n" -#~ msgid "cannot determine OID of function lo_lseek\n" -#~ msgstr "no se puede determinar el OID de la función lo_lseek\n" +#~ msgid "COPY IN state must be terminated first\n" +#~ msgstr "el estado COPY IN debe ser terminado primero\n" -#~ msgid "cannot determine OID of function lo_unlink\n" -#~ msgstr "no se puede determinar el OID de la función lo_unlink\n" +#~ msgid "COPY OUT state must be terminated first\n" +#~ msgstr "el estado COPY OUT debe ser terminado primero\n" -#~ msgid "cannot determine OID of function lo_creat\n" -#~ msgstr "no se puede determinar el OID de la función lo_creat\n" +#~ msgid "cannot determine OID of function lo_truncate\n" +#~ msgstr "no se puede determinar el OID de la función lo_truncate\n" -#~ msgid "cannot determine OID of function lo_open\n" -#~ msgstr "no se puede determinar el OID de la función lo_open\n" +#~ msgid "cannot determine OID of function lo_truncate64\n" +#~ msgstr "no se puede determinar el OID de la función lo_truncate64\n" -#~ msgid "cannot determine OID of function lo_tell64\n" -#~ msgstr "no se puede determinar el OID de la función lo_tell64\n" +#~ msgid "cannot determine OID of function lo_lseek64\n" +#~ msgstr "no se puede determinar el OID de la función lo_lseek64\n" #~ msgid "cannot determine OID of function lo_create\n" #~ msgstr "no se puede determinar el OID de la función lo_create\n" -#~ msgid "cannot determine OID of function lo_lseek64\n" -#~ msgstr "no se puede determinar el OID de la función lo_lseek64\n" +#~ msgid "cannot determine OID of function lo_tell64\n" +#~ msgstr "no se puede determinar el OID de la función lo_tell64\n" -#~ msgid "cannot determine OID of function lo_truncate64\n" -#~ msgstr "no se puede determinar el OID de la función lo_truncate64\n" +#~ msgid "cannot determine OID of function lo_open\n" +#~ msgstr "no se puede determinar el OID de la función lo_open\n" -#~ msgid "cannot determine OID of function lo_truncate\n" -#~ msgstr "no se puede determinar el OID de la función lo_truncate\n" +#~ msgid "cannot determine OID of function lo_creat\n" +#~ msgstr "no se puede determinar el OID de la función lo_creat\n" -#~ msgid "COPY OUT state must be terminated first\n" -#~ msgstr "el estado COPY OUT debe ser terminado primero\n" +#~ msgid "cannot determine OID of function lo_unlink\n" +#~ msgstr "no se puede determinar el OID de la función lo_unlink\n" -#~ msgid "COPY IN state must be terminated first\n" -#~ msgstr "el estado COPY IN debe ser terminado primero\n" +#~ msgid "cannot determine OID of function lo_lseek\n" +#~ msgstr "no se puede determinar el OID de la función lo_lseek\n" -#~ msgid "function requires at least protocol version 3.0\n" -#~ msgstr "la función requiere protocolo 3.0 o superior\n" +#~ msgid "cannot determine OID of function loread\n" +#~ msgstr "no se puede determinar el OID de la función loread\n" -#~ msgid "line %d too long in service file \"%s\"\n" -#~ msgstr "la línea %d es demasiado larga en archivo de servicio «%s»\n" +#~ msgid "cannot determine OID of function lowrite\n" +#~ msgstr "no se puede determinar el OID de la función lowrite\n" -#~ msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" -#~ msgstr "la prueba «SHOW transaction_read_only» falló en el servidor «%s:%s»\n" +#~ msgid "select() failed: %s\n" +#~ msgstr "select() fallida: %s\n" -#~ msgid "could not make a writable connection to server \"%s:%s\"\n" -#~ msgstr "no se pudo establecer una conexión de escritura al servidor: «%s:%s»\n" +#~ msgid "invalid setenv state %c, probably indicative of memory corruption\n" +#~ msgstr "el estado de setenv %c no es válido, probablemente por corrupción de memoria\n" -#~ msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" -#~ msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" +#~ msgid "invalid state %c, probably indicative of memory corruption\n" +#~ msgstr "el estado %c no es válido, probablemente por corrupción de memoria\n" -#~ msgid "setsockopt(%s) failed: %s\n" -#~ msgstr "setsockopt(%s) falló: %s\n" +#~ msgid "unexpected character %c following empty query response (\"I\" message)" +#~ msgstr "carácter %c no esperado, siguiendo una respuesta de consulta vacía (mensaje «I»)" -#~ msgid "" -#~ "could not connect to server: %s\n" -#~ "\tIs the server running on host \"%s\" (%s) and accepting\n" -#~ "\tTCP/IP connections on port %s?\n" -#~ msgstr "" -#~ "no se pudo conectar con el servidor: %s\n" -#~ "\t¿Está el servidor en ejecución en el servidor «%s» (%s) y aceptando\n" -#~ "\tconexiones TCP/IP en el puerto %s?\n" +#~ msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" +#~ msgstr "el servidor envió datos (mensaje «D») sin precederlos con una descripción de fila (mensaje «T»)" -#~ msgid "invalid target_session_attrs value: \"%s\"\n" -#~ msgstr "valor para target_session_attrs no válido: «%s»\n" +#~ msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" +#~ msgstr "el servidor envió datos binarios (mensaje «B») sin precederlos con una description de fila (mensaje «T»)" -#~ msgid "invalid gssencmode value: \"%s\"\n" -#~ msgstr "valor gssencmode no válido: «%s»\n" +#~ msgid "lost synchronization with server, resetting connection" +#~ msgstr "se perdió la sincronía con el servidor, reseteando la conexión" -#~ msgid "invalid ssl_max_protocol_version value: \"%s\"\n" -#~ msgstr "valor sslmode no válido: «%s»\n" +#~ msgid "extraneous data in \"T\" message" +#~ msgstr "datos ininteligibles en mensaje «T»" -#~ msgid "invalid ssl_min_protocol_version value: \"%s\"\n" -#~ msgstr "valor sslmode no válido: «%s»\n" +#~ msgid "extraneous data in \"t\" message" +#~ msgstr "datos ininteligibles en mensaje «t»" -#~ msgid "invalid channel_binding value: \"%s\"\n" -#~ msgstr "valor cidr no válido: «%s»\n" +#~ msgid "extraneous data in \"D\" message" +#~ msgstr "datos ininteligibles en mensaje «D»" diff --git a/src/interfaces/libpq/po/fr.po b/src/interfaces/libpq/po/fr.po index 76e321ae95339..890949e3c0918 100644 --- a/src/interfaces/libpq/po/fr.po +++ b/src/interfaces/libpq/po/fr.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-05-11 07:39+0000\n" -"PO-Revision-Date: 2021-05-11 10:17+0200\n" +"POT-Creation-Date: 2021-06-14 06:09+0000\n" +"PO-Revision-Date: 2021-06-14 16:10+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: PostgreSQLfr \n" "Language: fr\n" @@ -62,10 +62,10 @@ msgstr "n'a pas pu générer le nonce\n" #: fe-connect.c:5364 fe-connect.c:5463 fe-connect.c:5719 fe-connect.c:5748 #: fe-connect.c:5820 fe-connect.c:5844 fe-connect.c:5862 fe-connect.c:5963 #: fe-connect.c:5972 fe-connect.c:6330 fe-connect.c:6480 fe-exec.c:1209 -#: fe-exec.c:2993 fe-exec.c:3145 fe-exec.c:3918 fe-exec.c:4083 +#: fe-exec.c:3002 fe-exec.c:3154 fe-exec.c:3927 fe-exec.c:4092 #: fe-gssapi-common.c:110 fe-lobj.c:881 fe-protocol3.c:1016 fe-protocol3.c:1724 #: fe-secure-common.c:110 fe-secure-gssapi.c:504 fe-secure-openssl.c:440 -#: fe-secure-openssl.c:1129 +#: fe-secure-openssl.c:1133 msgid "out of memory\n" msgstr "mémoire épuisée\n" @@ -629,7 +629,7 @@ msgstr "" msgid "password retrieved from file \"%s\"\n" msgstr "mot de passe récupéré dans le fichier « %s »\n" -#: fe-exec.c:449 fe-exec.c:3219 +#: fe-exec.c:449 fe-exec.c:3228 #, c-format msgid "row number %d is out of range 0..%d" msgstr "le numéro de ligne %d est en dehors des limites 0..%d" @@ -660,108 +660,109 @@ msgstr "PGresult ne supporte pas plus de INT_MAX lignes" msgid "size_t overflow" msgstr "saturation de size_t" -#: fe-exec.c:1302 fe-exec.c:1403 fe-exec.c:1451 +#: fe-exec.c:1302 fe-exec.c:1409 fe-exec.c:1458 msgid "command string is a null pointer\n" msgstr "la chaîne de commande est un pointeur nul\n" -#: fe-exec.c:1409 fe-exec.c:1457 fe-exec.c:1554 -msgid "number of parameters must be between 0 and 65535\n" -msgstr "le nombre de paramètres doit être compris entre 0 et 65535\n" +#: fe-exec.c:1415 fe-exec.c:1464 fe-exec.c:1562 +#, c-format +msgid "number of parameters must be between 0 and %d\n" +msgstr "le nombre de paramètres doit être compris entre 0 et %d\n" -#: fe-exec.c:1445 fe-exec.c:1548 +#: fe-exec.c:1452 fe-exec.c:1556 msgid "statement name is a null pointer\n" msgstr "le nom de l'instruction est un pointeur nul\n" -#: fe-exec.c:1589 +#: fe-exec.c:1598 msgid "no connection to the server\n" msgstr "aucune connexion au serveur\n" -#: fe-exec.c:1598 +#: fe-exec.c:1607 msgid "another command is already in progress\n" msgstr "une autre commande est déjà en cours\n" -#: fe-exec.c:1627 +#: fe-exec.c:1636 msgid "cannot queue commands during COPY\n" msgstr "ne peut pas mettre en queue les commandes lors du COPY\n" -#: fe-exec.c:1745 +#: fe-exec.c:1754 msgid "length must be given for binary parameter\n" msgstr "la longueur doit être indiquée pour les paramètres binaires\n" -#: fe-exec.c:2066 +#: fe-exec.c:2075 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "asyncStatus inattendu : %d\n" -#: fe-exec.c:2086 +#: fe-exec.c:2095 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "échec de PGEventProc « %s » lors de l'événement PGEVT_RESULTCREATE\n" -#: fe-exec.c:2234 +#: fe-exec.c:2243 msgid "synchronous command execution functions are not allowed in pipeline mode\n" msgstr "les fonctions d'exécution de commande synchrone ne sont pas autorisées en mode pipeline\n" -#: fe-exec.c:2256 +#: fe-exec.c:2265 msgid "COPY terminated by new PQexec" msgstr "COPY terminé par un nouveau PQexec" -#: fe-exec.c:2273 +#: fe-exec.c:2282 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec non autorisé pendant COPY BOTH\n" -#: fe-exec.c:2502 fe-exec.c:2558 fe-exec.c:2627 fe-protocol3.c:1863 +#: fe-exec.c:2511 fe-exec.c:2567 fe-exec.c:2636 fe-protocol3.c:1863 msgid "no COPY in progress\n" msgstr "aucun COPY en cours\n" -#: fe-exec.c:2804 +#: fe-exec.c:2813 msgid "PQfn not allowed in pipeline mode\n" msgstr "PQfn non autorisé dans le mode pipeline\n" -#: fe-exec.c:2812 +#: fe-exec.c:2821 msgid "connection in wrong state\n" msgstr "connexion dans un état erroné\n" -#: fe-exec.c:2856 +#: fe-exec.c:2865 msgid "cannot enter pipeline mode, connection not idle\n" msgstr "ne peut pas entrer dans le mode pipeline, connexion active\n" -#: fe-exec.c:2890 fe-exec.c:2907 +#: fe-exec.c:2899 fe-exec.c:2916 msgid "cannot exit pipeline mode with uncollected results\n" msgstr "ne peut pas sortir du mode pipeline avec des résultats non récupérés\n" -#: fe-exec.c:2895 +#: fe-exec.c:2904 msgid "cannot exit pipeline mode while busy\n" msgstr "ne peut pas sortir du mode pipeline alors qu'il est occupé\n" -#: fe-exec.c:3037 +#: fe-exec.c:3046 msgid "cannot send pipeline when not in pipeline mode\n" msgstr "ne peut pas envoyer le pipeline lorsqu'il n'est pas en mode pipeline\n" -#: fe-exec.c:3108 +#: fe-exec.c:3117 msgid "invalid ExecStatusType code" msgstr "code ExecStatusType invalide" -#: fe-exec.c:3135 +#: fe-exec.c:3144 msgid "PGresult is not an error result\n" msgstr "PGresult n'est pas un résultat d'erreur\n" -#: fe-exec.c:3203 fe-exec.c:3226 +#: fe-exec.c:3212 fe-exec.c:3235 #, c-format msgid "column number %d is out of range 0..%d" msgstr "le numéro de colonne %d est en dehors des limites 0..%d" -#: fe-exec.c:3241 +#: fe-exec.c:3250 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "le numéro de paramètre %d est en dehors des limites 0..%d" -#: fe-exec.c:3551 +#: fe-exec.c:3560 #, c-format msgid "could not interpret result from server: %s" msgstr "n'a pas pu interpréter la réponse du serveur : %s" -#: fe-exec.c:3811 fe-exec.c:3900 +#: fe-exec.c:3820 fe-exec.c:3909 msgid "incomplete multibyte character\n" msgstr "caractère multi-octet incomplet\n" @@ -1035,16 +1036,16 @@ msgstr "erreur de vérification de la taille GSSAPI" msgid "GSSAPI context establishment error" msgstr "erreur d'établissement du contexte GSSAPI" -#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1329 +#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1333 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "erreur SYSCALL SSL : %s\n" -#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1333 +#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1337 msgid "SSL SYSCALL error: EOF detected\n" msgstr "erreur SYSCALL SSL : EOF détecté\n" -#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1342 +#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1346 #, c-format msgid "SSL error: %s\n" msgstr "erreur SSL : %s\n" @@ -1053,7 +1054,7 @@ msgstr "erreur SSL : %s\n" msgid "SSL connection has been closed unexpectedly\n" msgstr "la connexion SSL a été fermée de façon inattendu\n" -#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1392 +#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1396 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "code d'erreur SSL inconnu : %d\n" @@ -1139,37 +1140,37 @@ msgstr "n'a pas pu lire le certificat « %s » : %s\n" msgid "could not establish SSL connection: %s\n" msgstr "n'a pas pu établir la connexion SSL : %s\n" -#: fe-secure-openssl.c:1099 +#: fe-secure-openssl.c:1103 #, c-format msgid "could not set SSL Server Name Indication (SNI): %s\n" msgstr "n'a pas pu configurer le SSL Server Name Indication (SNI) : %s\n" -#: fe-secure-openssl.c:1145 +#: fe-secure-openssl.c:1149 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "n'a pas pu charger le moteur SSL « %s » : %s\n" -#: fe-secure-openssl.c:1157 +#: fe-secure-openssl.c:1161 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "n'a pas pu initialiser le moteur SSL « %s » : %s\n" -#: fe-secure-openssl.c:1173 +#: fe-secure-openssl.c:1177 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "n'a pas pu lire la clé privée SSL « %s » à partir du moteur « %s » : %s\n" -#: fe-secure-openssl.c:1187 +#: fe-secure-openssl.c:1191 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "n'a pas pu charger la clé privée SSL « %s » à partir du moteur « %s » : %s\n" -#: fe-secure-openssl.c:1224 +#: fe-secure-openssl.c:1228 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "le certificat est présent, mais la clé privée « %s » est absente\n" -#: fe-secure-openssl.c:1232 +#: fe-secure-openssl.c:1236 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "" @@ -1177,37 +1178,37 @@ msgstr "" "pour le groupe ou universel ; les droits devraient être u=rw (0600)\n" "ou inférieur\n" -#: fe-secure-openssl.c:1257 +#: fe-secure-openssl.c:1261 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "n'a pas pu charger le fichier de clé privée « %s » : %s\n" -#: fe-secure-openssl.c:1275 +#: fe-secure-openssl.c:1279 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "le certificat ne correspond pas à la clé privée « %s » : %s\n" -#: fe-secure-openssl.c:1375 +#: fe-secure-openssl.c:1379 #, c-format msgid "This may indicate that the server does not support any SSL protocol version between %s and %s.\n" msgstr "Ceci pourrait indiquer que le serveur ne supporte aucune des versions du protocole SSL entre %s et %s.\n" -#: fe-secure-openssl.c:1411 +#: fe-secure-openssl.c:1415 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "le certificat n'a pas pu être obtenu : %s\n" -#: fe-secure-openssl.c:1517 +#: fe-secure-openssl.c:1521 #, c-format msgid "no SSL error reported" msgstr "aucune erreur SSL reportée" -#: fe-secure-openssl.c:1526 +#: fe-secure-openssl.c:1530 #, c-format msgid "SSL error code %lu" msgstr "erreur SSL %lu" -#: fe-secure-openssl.c:1773 +#: fe-secure-openssl.c:1777 #, c-format msgid "WARNING: sslpassword truncated\n" msgstr "ATTENTION : sslpassword tronqué\n" @@ -1227,202 +1228,202 @@ msgstr "n'a pas pu transmettre les données au serveur : %s\n" msgid "unrecognized socket error: 0x%08X/%d" msgstr "erreur de socket non reconnue : 0x%08X/%d" -#~ msgid "setsockopt(%s) failed: %s\n" -#~ msgstr "setsockopt(%s) a échoué : %s\n" - -#~ msgid "select() failed: %s\n" -#~ msgstr "échec de select() : %s\n" - -#~ msgid "extraneous data in \"T\" message" -#~ msgstr "données supplémentaires dans le message « T »" - -#~ msgid "extraneous data in \"t\" message" -#~ msgstr "données supplémentaires dans le message « t »" +#~ msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %d\n" +#~ msgstr "échec de WSAIoctl(SIO_KEEPALIVE_VALS) : %d\n" -#~ msgid "extraneous data in \"D\" message" -#~ msgstr "données supplémentaires dans le message « D »" +#~ msgid "\"SHOW transaction_read_only\" failed\n" +#~ msgstr "\"SHOW transaction_read_only\" a échoué\n" -#~ msgid "no GSSAPI support; cannot require GSSAPI\n" -#~ msgstr "pas de support de GSSAPI : ne peut pas nécessiter GSSAPI\n" +#~ msgid "\"SELECT pg_is_in_recovery()\" failed\n" +#~ msgstr "\"SELECT pg_is_in_recovery()\" a échoué\n" -#~ msgid "failed to generate nonce\n" -#~ msgstr "échec pour la génération de nonce\n" +#~ msgid "invalid channel_binding value: \"%s\"\n" +#~ msgstr "valeur de channel_binding invalide : « %s »\n" -#~ msgid "socket not open\n" -#~ msgstr "socket non ouvert\n" +#~ msgid "invalid ssl_min_protocol_version value: \"%s\"\n" +#~ msgstr "valeur ssl_min_protocol_version invalide : « %s »\n" -#~ msgid "could not set socket to blocking mode: %s\n" -#~ msgstr "n'a pas pu activer le mode bloquant pour la socket : %s\n" +#~ msgid "invalid ssl_max_protocol_version value: \"%s\"\n" +#~ msgstr "valeur ssl_max_protocol_version invalide : « %s »\n" -#~ msgid "Kerberos 5 authentication rejected: %*s\n" -#~ msgstr "authentification Kerberos 5 rejetée : %*s\n" +#~ msgid "invalid gssencmode value: \"%s\"\n" +#~ msgstr "valeur gssencmode invalide : « %s »\n" -#~ msgid "could not restore nonblocking mode on socket: %s\n" -#~ msgstr "n'a pas pu rétablir le mode non-bloquant pour la socket : %s\n" +#~ msgid "invalid target_session_attrs value: \"%s\"\n" +#~ msgstr "valeur target_session_attrs invalide : « %s »\n" -#~ msgid "could not get home directory to locate client certificate files\n" +#~ msgid "" +#~ "could not connect to server: %s\n" +#~ "\tIs the server running on host \"%s\" (%s) and accepting\n" +#~ "\tTCP/IP connections on port %s?\n" #~ msgstr "" -#~ "n'a pas pu récupérer le répertoire personnel pour trouver les certificats\n" -#~ "du client\n" +#~ "n'a pas pu se connecter au serveur : %s\n" +#~ "\tLe serveur est-il actif sur l'hôte « %s » (%s)\n" +#~ "\tet accepte-t-il les connexionsTCP/IP sur le port %s ?\n" -#~ msgid "verified SSL connections are only supported when connecting to a host name\n" -#~ msgstr "" -#~ "les connexions SSL vérifiées ne sont supportées que lors de la connexion\n" -#~ "à un alias hôte\n" +#~ msgid "could not make a writable connection to server \"%s:%s\"\n" +#~ msgstr "n'a pas pu réaliser une connexion en écriture au serveur « %s » : %s\n" -#~ msgid "could not open private key file \"%s\": %s\n" -#~ msgstr "n'a pas pu ouvrir le fichier de clé privée « %s » : %s\n" +#~ msgid "line %d too long in service file \"%s\"\n" +#~ msgstr "ligne %d trop longue dans le fichier service « %s »\n" -#~ msgid "private key file \"%s\" changed during execution\n" -#~ msgstr "la clé privée « %s » a été modifiée durant l'exécution\n" +#~ msgid "function requires at least protocol version 3.0\n" +#~ msgstr "la fonction nécessite au minimum le protocole 3.0\n" -#~ msgid "could not read private key file \"%s\": %s\n" -#~ msgstr "n'a pas pu lire la clé privée « %s » : %s\n" +#~ msgid "COPY IN state must be terminated first\n" +#~ msgstr "l'état COPY IN doit d'abord être terminé\n" -#~ msgid "invalid appname state %d, probably indicative of memory corruption\n" -#~ msgstr "état appname %d invalide, indiquant probablement une corruption de la mémoire\n" +#~ msgid "COPY OUT state must be terminated first\n" +#~ msgstr "l'état COPY OUT doit d'abord être terminé\n" -#~ msgid "unrecognized return value from row processor" -#~ msgstr "valeur de retour du traitement de la ligne non reconnue" +#~ msgid "cannot determine OID of function lo_truncate\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_truncate\n" -#~ msgid "could not acquire mutex: %s\n" -#~ msgstr "n'a pas pu acquérir le mutex : %s\n" +#~ msgid "cannot determine OID of function lo_truncate64\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_truncate64\n" -#~ msgid "setsockopt(SO_KEEPALIVE) failed: %s\n" -#~ msgstr "setsockopt(SO_KEEPALIVE) a échoué : %s\n" +#~ msgid "cannot determine OID of function lo_lseek64\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_lseek64\n" -#~ msgid "setsockopt(TCP_KEEPINTVL) failed: %s\n" -#~ msgstr "setsockopt(TCP_KEEPINTVL) a échoué : %s\n" +#~ msgid "cannot determine OID of function lo_create\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_create\n" -#~ msgid "setsockopt(TCP_KEEPALIVE) failed: %s\n" -#~ msgstr "setsockopt(TCP_KEEPALIVE) a échoué : %s\n" +#~ msgid "cannot determine OID of function lo_tell64\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_tell64\n" -#~ msgid "setsockopt(TCP_KEEPIDLE) failed: %s\n" -#~ msgstr "setsockopt(TCP_KEEPIDLE) a échoué : %s\n" +#~ msgid "cannot determine OID of function lo_open\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_open\n" -#~ msgid "could not get home directory to locate service definition file" -#~ msgstr "" -#~ "n'a pas pu obtenir le répertoire personnel pour trouver le certificat de\n" -#~ "définition du service" +#~ msgid "cannot determine OID of function lo_creat\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_creat\n" -#~ msgid "could not get home directory to locate password file\n" -#~ msgstr "" -#~ "n'a pas pu obtenir le répertoire personnel pour trouver le fichier de\n" -#~ "mot de passe\n" +#~ msgid "cannot determine OID of function lo_unlink\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_unlink\n" -#~ msgid "SSL library does not support CRL certificates (file \"%s\")\n" -#~ msgstr "la bibliothèque SSL ne supporte pas les certificats CRL (fichier « %s »)\n" +#~ msgid "cannot determine OID of function lo_lseek\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_lseek\n" -#~ msgid "could not set maximum version of SSL protocol: %s\n" -#~ msgstr "n'a pas pu mettre en place la version maximale du protocole SSL : %s\n" +#~ msgid "cannot determine OID of function loread\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction loread\n" -#~ msgid "could not set minimum version of SSL protocol: %s\n" -#~ msgstr "n'a pas pu mettre en place la version minimale du protocole SSL : %s\n" +#~ msgid "cannot determine OID of function lowrite\n" +#~ msgstr "ne peut pas déterminer l'OID de la fonction lowrite\n" -#~ msgid "WARNING: line %d too long in password file \"%s\"\n" -#~ msgstr "ATTENTION : ligne %d trop longue dans le fichier de mots de passe « %s »\n" +#~ msgid "invalid setenv state %c, probably indicative of memory corruption\n" +#~ msgstr "état setenv %c invalide, indiquant probablement une corruption de la mémoire\n" -#~ msgid "lost synchronization with server, resetting connection" -#~ msgstr "synchronisation perdue avec le serveur, réinitialisation de la connexion" +#~ msgid "invalid state %c, probably indicative of memory corruption\n" +#~ msgstr "état %c invalide, indiquant probablement une corruption de la mémoire\n" -#~ msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" +#~ msgid "unexpected character %c following empty query response (\"I\" message)" #~ msgstr "" -#~ "le serveur a envoyé des données binaires (message « B ») sans description\n" -#~ "préalable de la ligne (message « T »)" +#~ "caractère %c inattendu à la suite d'une réponse de requête vide (message\n" +#~ "« I »)" #~ msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" #~ msgstr "" #~ "le serveur a envoyé des données (message « D ») sans description préalable\n" #~ "de la ligne (message « T »)" -#~ msgid "unexpected character %c following empty query response (\"I\" message)" +#~ msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" #~ msgstr "" -#~ "caractère %c inattendu à la suite d'une réponse de requête vide (message\n" -#~ "« I »)" +#~ "le serveur a envoyé des données binaires (message « B ») sans description\n" +#~ "préalable de la ligne (message « T »)" -#~ msgid "invalid state %c, probably indicative of memory corruption\n" -#~ msgstr "état %c invalide, indiquant probablement une corruption de la mémoire\n" +#~ msgid "lost synchronization with server, resetting connection" +#~ msgstr "synchronisation perdue avec le serveur, réinitialisation de la connexion" -#~ msgid "invalid setenv state %c, probably indicative of memory corruption\n" -#~ msgstr "état setenv %c invalide, indiquant probablement une corruption de la mémoire\n" +#~ msgid "WARNING: line %d too long in password file \"%s\"\n" +#~ msgstr "ATTENTION : ligne %d trop longue dans le fichier de mots de passe « %s »\n" -#~ msgid "cannot determine OID of function lowrite\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lowrite\n" +#~ msgid "could not set minimum version of SSL protocol: %s\n" +#~ msgstr "n'a pas pu mettre en place la version minimale du protocole SSL : %s\n" -#~ msgid "cannot determine OID of function loread\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction loread\n" +#~ msgid "could not set maximum version of SSL protocol: %s\n" +#~ msgstr "n'a pas pu mettre en place la version maximale du protocole SSL : %s\n" -#~ msgid "cannot determine OID of function lo_lseek\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_lseek\n" +#~ msgid "SSL library does not support CRL certificates (file \"%s\")\n" +#~ msgstr "la bibliothèque SSL ne supporte pas les certificats CRL (fichier « %s »)\n" -#~ msgid "cannot determine OID of function lo_unlink\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_unlink\n" +#~ msgid "could not get home directory to locate password file\n" +#~ msgstr "" +#~ "n'a pas pu obtenir le répertoire personnel pour trouver le fichier de\n" +#~ "mot de passe\n" -#~ msgid "cannot determine OID of function lo_creat\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_creat\n" +#~ msgid "could not get home directory to locate service definition file" +#~ msgstr "" +#~ "n'a pas pu obtenir le répertoire personnel pour trouver le certificat de\n" +#~ "définition du service" -#~ msgid "cannot determine OID of function lo_open\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_open\n" +#~ msgid "setsockopt(TCP_KEEPIDLE) failed: %s\n" +#~ msgstr "setsockopt(TCP_KEEPIDLE) a échoué : %s\n" -#~ msgid "cannot determine OID of function lo_tell64\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_tell64\n" +#~ msgid "setsockopt(TCP_KEEPALIVE) failed: %s\n" +#~ msgstr "setsockopt(TCP_KEEPALIVE) a échoué : %s\n" -#~ msgid "cannot determine OID of function lo_create\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_create\n" +#~ msgid "setsockopt(TCP_KEEPINTVL) failed: %s\n" +#~ msgstr "setsockopt(TCP_KEEPINTVL) a échoué : %s\n" -#~ msgid "cannot determine OID of function lo_lseek64\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_lseek64\n" +#~ msgid "setsockopt(SO_KEEPALIVE) failed: %s\n" +#~ msgstr "setsockopt(SO_KEEPALIVE) a échoué : %s\n" -#~ msgid "cannot determine OID of function lo_truncate64\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_truncate64\n" +#~ msgid "could not acquire mutex: %s\n" +#~ msgstr "n'a pas pu acquérir le mutex : %s\n" -#~ msgid "cannot determine OID of function lo_truncate\n" -#~ msgstr "ne peut pas déterminer l'OID de la fonction lo_truncate\n" +#~ msgid "unrecognized return value from row processor" +#~ msgstr "valeur de retour du traitement de la ligne non reconnue" -#~ msgid "COPY OUT state must be terminated first\n" -#~ msgstr "l'état COPY OUT doit d'abord être terminé\n" +#~ msgid "invalid appname state %d, probably indicative of memory corruption\n" +#~ msgstr "état appname %d invalide, indiquant probablement une corruption de la mémoire\n" -#~ msgid "COPY IN state must be terminated first\n" -#~ msgstr "l'état COPY IN doit d'abord être terminé\n" +#~ msgid "could not read private key file \"%s\": %s\n" +#~ msgstr "n'a pas pu lire la clé privée « %s » : %s\n" -#~ msgid "function requires at least protocol version 3.0\n" -#~ msgstr "la fonction nécessite au minimum le protocole 3.0\n" +#~ msgid "private key file \"%s\" changed during execution\n" +#~ msgstr "la clé privée « %s » a été modifiée durant l'exécution\n" -#~ msgid "line %d too long in service file \"%s\"\n" -#~ msgstr "ligne %d trop longue dans le fichier service « %s »\n" +#~ msgid "could not open private key file \"%s\": %s\n" +#~ msgstr "n'a pas pu ouvrir le fichier de clé privée « %s » : %s\n" -#~ msgid "could not make a writable connection to server \"%s:%s\"\n" -#~ msgstr "n'a pas pu réaliser une connexion en écriture au serveur « %s » : %s\n" +#~ msgid "verified SSL connections are only supported when connecting to a host name\n" +#~ msgstr "" +#~ "les connexions SSL vérifiées ne sont supportées que lors de la connexion\n" +#~ "à un alias hôte\n" -#~ msgid "" -#~ "could not connect to server: %s\n" -#~ "\tIs the server running on host \"%s\" (%s) and accepting\n" -#~ "\tTCP/IP connections on port %s?\n" +#~ msgid "could not get home directory to locate client certificate files\n" #~ msgstr "" -#~ "n'a pas pu se connecter au serveur : %s\n" -#~ "\tLe serveur est-il actif sur l'hôte « %s » (%s)\n" -#~ "\tet accepte-t-il les connexionsTCP/IP sur le port %s ?\n" +#~ "n'a pas pu récupérer le répertoire personnel pour trouver les certificats\n" +#~ "du client\n" -#~ msgid "invalid target_session_attrs value: \"%s\"\n" -#~ msgstr "valeur target_session_attrs invalide : « %s »\n" +#~ msgid "could not restore nonblocking mode on socket: %s\n" +#~ msgstr "n'a pas pu rétablir le mode non-bloquant pour la socket : %s\n" -#~ msgid "invalid gssencmode value: \"%s\"\n" -#~ msgstr "valeur gssencmode invalide : « %s »\n" +#~ msgid "Kerberos 5 authentication rejected: %*s\n" +#~ msgstr "authentification Kerberos 5 rejetée : %*s\n" -#~ msgid "invalid ssl_max_protocol_version value: \"%s\"\n" -#~ msgstr "valeur ssl_max_protocol_version invalide : « %s »\n" +#~ msgid "could not set socket to blocking mode: %s\n" +#~ msgstr "n'a pas pu activer le mode bloquant pour la socket : %s\n" -#~ msgid "invalid ssl_min_protocol_version value: \"%s\"\n" -#~ msgstr "valeur ssl_min_protocol_version invalide : « %s »\n" +#~ msgid "socket not open\n" +#~ msgstr "socket non ouvert\n" -#~ msgid "invalid channel_binding value: \"%s\"\n" -#~ msgstr "valeur de channel_binding invalide : « %s »\n" +#~ msgid "failed to generate nonce\n" +#~ msgstr "échec pour la génération de nonce\n" -#~ msgid "\"SELECT pg_is_in_recovery()\" failed\n" -#~ msgstr "\"SELECT pg_is_in_recovery()\" a échoué\n" +#~ msgid "no GSSAPI support; cannot require GSSAPI\n" +#~ msgstr "pas de support de GSSAPI : ne peut pas nécessiter GSSAPI\n" -#~ msgid "\"SHOW transaction_read_only\" failed\n" -#~ msgstr "\"SHOW transaction_read_only\" a échoué\n" +#~ msgid "extraneous data in \"D\" message" +#~ msgstr "données supplémentaires dans le message « D »" -#~ msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %d\n" -#~ msgstr "échec de WSAIoctl(SIO_KEEPALIVE_VALS) : %d\n" +#~ msgid "extraneous data in \"t\" message" +#~ msgstr "données supplémentaires dans le message « t »" + +#~ msgid "extraneous data in \"T\" message" +#~ msgstr "données supplémentaires dans le message « T »" + +#~ msgid "select() failed: %s\n" +#~ msgstr "échec de select() : %s\n" + +#~ msgid "setsockopt(%s) failed: %s\n" +#~ msgstr "setsockopt(%s) a échoué : %s\n" diff --git a/src/pl/plperl/nls.mk b/src/pl/plperl/nls.mk index 7c2fd99ac3b72..ccdf1c3316b6f 100644 --- a/src/pl/plperl/nls.mk +++ b/src/pl/plperl/nls.mk @@ -1,6 +1,6 @@ # src/pl/plperl/nls.mk CATALOG_NAME = plperl -AVAIL_LANGUAGES = cs de es fr it ja ko pl pt_BR ro ru sv tr uk vi zh_CN zh_TW +AVAIL_LANGUAGES = cs de el es fr it ja ko pl pt_BR ro ru sv tr uk vi zh_CN zh_TW GETTEXT_FILES = plperl.c SPI.c GETTEXT_TRIGGERS = $(BACKEND_COMMON_GETTEXT_TRIGGERS) GETTEXT_FLAGS = $(BACKEND_COMMON_GETTEXT_FLAGS) diff --git a/src/pl/plperl/po/el.po b/src/pl/plperl/po/el.po new file mode 100644 index 0000000000000..a5ed2bead9e37 --- /dev/null +++ b/src/pl/plperl/po/el.po @@ -0,0 +1,221 @@ +# Greek message translation file for plperl +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the plperl (PostgreSQL) package. +# Georgios Kokolatos , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: plperl (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-05-10 08:38+0000\n" +"PO-Revision-Date: 2021-05-11 10:41+0200\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" +"X-Generator: Poedit 2.4.3\n" + +#: plperl.c:405 +msgid "If true, trusted and untrusted Perl code will be compiled in strict mode." +msgstr "Εάν αληθής, αξιόπιστος και αναξιόπιστος κώδικας Perl θα μεταγλωττιστεί σε αυστηρή λειτουργία." + +#: plperl.c:419 +msgid "Perl initialization code to execute when a Perl interpreter is initialized." +msgstr "Κώδικας αρχικοποίησης Perl για να εκτελέσει όταν ένας διερμηνέας Perl αρχικοποιείται." + +#: plperl.c:441 +msgid "Perl initialization code to execute once when plperl is first used." +msgstr "Κώδικας αρχικοποίησης Perl για να εκτελέσει μία φορά όταν plperl χρησιμοποιείται για πρώτη φορά." + +#: plperl.c:449 +msgid "Perl initialization code to execute once when plperlu is first used." +msgstr "Κώδικας αρχικοποίησης Perl για να εκτελέσει μία φορά όταν plperlu χρησιμοποιείται για πρώτη φορά." + +#: plperl.c:643 +#, c-format +msgid "cannot allocate multiple Perl interpreters on this platform" +msgstr "δεν είναι δυνατή η εκχώρηση πολλαπλών διερμηνέων Perl σε αυτήν την πλατφόρμα" + +#: plperl.c:666 plperl.c:850 plperl.c:856 plperl.c:973 plperl.c:985 +#: plperl.c:1028 plperl.c:1051 plperl.c:2133 plperl.c:2241 plperl.c:2309 +#: plperl.c:2372 +#, c-format +msgid "%s" +msgstr "%s" + +#: plperl.c:667 +#, c-format +msgid "while executing PostgreSQL::InServer::SPI::bootstrap" +msgstr "κατά την εκτέλεση PostgreSQL::InServer::SPI::bootstrap" + +#: plperl.c:851 +#, c-format +msgid "while parsing Perl initialization" +msgstr "κατά την ανάλυση αρχικοποίησης Perl" + +#: plperl.c:857 +#, c-format +msgid "while running Perl initialization" +msgstr "κατά την εκτέλεση αρχικοποίησης Perl" + +#: plperl.c:974 +#, c-format +msgid "while executing PLC_TRUSTED" +msgstr "κατά την εκτέλεση PLC_TRUSTED" + +#: plperl.c:986 +#, c-format +msgid "while executing utf8fix" +msgstr "κατά την εκτέλεση utf8fix" + +#: plperl.c:1029 +#, c-format +msgid "while executing plperl.on_plperl_init" +msgstr "κατά την εκτέλεση plperl.on_plperl_init" + +#: plperl.c:1052 +#, c-format +msgid "while executing plperl.on_plperlu_init" +msgstr "κατά την εκτέλεση plperl.on_plperlu_init" + +#: plperl.c:1098 plperl.c:1786 +#, c-format +msgid "Perl hash contains nonexistent column \"%s\"" +msgstr "Κατατεμαχιστής Perl περιέχει ανύπαρκτη στήλη \"%s\"" + +#: plperl.c:1103 plperl.c:1791 +#, c-format +msgid "cannot set system attribute \"%s\"" +msgstr "δεν είναι δυνατός ο ορισμός του χαρακτηριστικού συστήματος \"%s\"" + +#: plperl.c:1191 +#, c-format +msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" +msgstr "ο αριθμός των διαστάσεων συστυχίας (%d) υπερβαίνει το μέγιστο επιτρεπόμενο (%d)" + +#: plperl.c:1203 plperl.c:1220 +#, c-format +msgid "multidimensional arrays must have array expressions with matching dimensions" +msgstr "πολυδιάστατες συστυχίες πρέπει να περιέχουν εκφράσεις συστυχίας με αντίστοιχο αριθμό διαστάσεων" + +#: plperl.c:1256 +#, c-format +msgid "cannot convert Perl array to non-array type %s" +msgstr "δεν είναι δυνατή η μετατροπή συστυχίας Perl σε τύπο μή-συστυχίας %s" + +#: plperl.c:1359 +#, c-format +msgid "cannot convert Perl hash to non-composite type %s" +msgstr "δεν είναι δυνατή η μετατροπή κατατμητή Perl σε μη-σύνθετος τύπο %s" + +#: plperl.c:1381 plperl.c:3279 +#, c-format +msgid "function returning record called in context that cannot accept type record" +msgstr "συνάρτηση που επιστρέφει εγγραφή καλείται σε περιεχόμενο που δεν δύναται να αποδεχτεί τύπο εγγραφής" + +#: plperl.c:1440 +#, c-format +msgid "lookup failed for type %s" +msgstr "αναζήτηση απέτυχε για τύπο %s" + +#: plperl.c:1761 +#, c-format +msgid "$_TD->{new} does not exist" +msgstr "$_TD->{new} δεν υπάρχει" + +#: plperl.c:1765 +#, c-format +msgid "$_TD->{new} is not a hash reference" +msgstr "Το >{new} $_TD δεν είναι αναφορά κατατμητή" + +#: plperl.c:1796 +#, c-format +msgid "cannot set generated column \"%s\"" +msgstr "δεν είναι δυνατός ο ορισμός δημιουργημένης στήλης \"%s\"" + +#: plperl.c:2008 plperl.c:2846 +#, c-format +msgid "PL/Perl functions cannot return type %s" +msgstr "PL/Tcl συναρτήσεις δεν είναι δυνατό να επιστρέψουν τύπο %s" + +#: plperl.c:2021 plperl.c:2885 +#, c-format +msgid "PL/Perl functions cannot accept type %s" +msgstr "PL/Tcl συναρτήσεις δεν είναι δυνατό να δεχτούν τύπο %s" + +#: plperl.c:2138 +#, c-format +msgid "didn't get a CODE reference from compiling function \"%s\"" +msgstr "δεν έλαβε μία αναφορά CODE από τη μεταγλώττιση της συνάρτησης \"%s\"" + +#: plperl.c:2229 +#, c-format +msgid "didn't get a return item from function" +msgstr "δεν έλαβε ένα στοιχείο επιστροφής από συνάρτηση" + +#: plperl.c:2273 plperl.c:2340 +#, c-format +msgid "couldn't fetch $_TD" +msgstr "δεν μπόρεσε να ανακτήσει $_TD" + +#: plperl.c:2297 plperl.c:2360 +#, c-format +msgid "didn't get a return item from trigger function" +msgstr "δεν έλαβε ένα στοιχείο επιστροφής από συνάρτηση ενεργοποίησης" + +#: plperl.c:2419 +#, c-format +msgid "set-valued function called in context that cannot accept a set" +msgstr "set-valued συνάρτηση καλείται σε περιεχόμενο που δεν μπορεί να δεχτεί ένα σύνολο" + +#: plperl.c:2464 +#, c-format +msgid "set-returning PL/Perl function must return reference to array or use return_next" +msgstr "συνάρτηση συνόλου PL/Perl πρέπει να επιστρέφει αναφορά σε συστοιχία ή να χρησιμοποιεί return_next" + +#: plperl.c:2585 +#, c-format +msgid "ignoring modified row in DELETE trigger" +msgstr "παράβλεψη τροποποιημένης σειράς σε εναύσμα DELETE" + +#: plperl.c:2593 +#, c-format +msgid "result of PL/Perl trigger function must be undef, \"SKIP\", or \"MODIFY\"" +msgstr "το αποτέλεσμα της συνάρτησης ενεργοποίησης PL/Perl πρέπει να είναι undef, \"SKIP\" ή \"MODIFY\"" + +#: plperl.c:2841 +#, c-format +msgid "trigger functions can only be called as triggers" +msgstr "συναρτήσεις εναυσμάτων μπορούν να κληθούν μόνο ως εναύσματα" + +#: plperl.c:3186 +#, c-format +msgid "query result has too many rows to fit in a Perl array" +msgstr "το αποτέλεσμα ερωτήματος περιέχει πάρα πολλές σειρές για να χωρέσει σε μία συστοιχία Perl" + +#: plperl.c:3256 +#, c-format +msgid "cannot use return_next in a non-SETOF function" +msgstr "δεν είναι δυνατή η χρήση return_next σε συνάρτηση non-SETOF" + +#: plperl.c:3330 +#, c-format +msgid "SETOF-composite-returning PL/Perl function must call return_next with reference to hash" +msgstr "συνάρτηση SETOF-composite-returning PL/Perl πρέπει να καλεί return_next με αναφορά σε κατάτμηση" + +#: plperl.c:4105 +#, c-format +msgid "PL/Perl function \"%s\"" +msgstr "PL/Perl συνάρτηση “%s”" + +#: plperl.c:4117 +#, c-format +msgid "compilation of PL/Perl function \"%s\"" +msgstr "μεταγλώτιση της συνάρτησης PL/Perl “%s”" + +#: plperl.c:4126 +#, c-format +msgid "PL/Perl anonymous code block" +msgstr "PL/Perl ανώνυμο μπλοκ κώδικα" diff --git a/src/pl/plpgsql/src/po/es.po b/src/pl/plpgsql/src/po/es.po index 0b4299da85c78..49108de0c1672 100644 --- a/src/pl/plpgsql/src/po/es.po +++ b/src/pl/plpgsql/src/po/es.po @@ -6,22 +6,22 @@ # Álvaro Herrera 2008-2013 # Emanuel Calvo Franco 2008 # Jaime Casanova 2010 -# Carlos Chapi 2013 +# Carlos Chapi 2013, 2021 # msgid "" msgstr "" -"Project-Id-Version: plpgsql (PostgreSQL) 12\n" +"Project-Id-Version: plpgsql (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2021-05-14 19:39+0000\n" -"PO-Revision-Date: 2020-09-18 18:36-0300\n" -"Last-Translator: Carlos Chapi \n" +"PO-Revision-Date: 2021-05-25 12:04-0500\n" +"Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Poedit 1.8.7\n" +"X-Generator: Poedit 2.4.3\n" #: pl_comp.c:438 pl_handler.c:496 #, c-format @@ -90,10 +90,9 @@ msgid "relation \"%s\" does not exist" msgstr "no existe la relación «%s»" #: pl_comp.c:1824 pl_comp.c:1866 -#, fuzzy, c-format -#| msgid "\"%s\" is not a composite type" +#, c-format msgid "relation \"%s\" does not have a composite type" -msgstr "«%s» no es un tipo compuesto" +msgstr "la relación «%s» no contiene un tipo compuesto" #: pl_comp.c:1932 #, c-format diff --git a/src/pl/plpython/nls.mk b/src/pl/plpython/nls.mk index 09778271b7615..c46e26200b77e 100644 --- a/src/pl/plpython/nls.mk +++ b/src/pl/plpython/nls.mk @@ -1,6 +1,6 @@ # src/pl/plpython/nls.mk CATALOG_NAME = plpython -AVAIL_LANGUAGES = cs de es fr it ja ko pl pt_BR ru sv tr uk vi zh_CN +AVAIL_LANGUAGES = cs de el es fr it ja ko pl pt_BR ru sv tr uk vi zh_CN GETTEXT_FILES = plpy_cursorobject.c plpy_elog.c plpy_exec.c plpy_main.c plpy_planobject.c plpy_plpymodule.c \ plpy_procedure.c plpy_resultobject.c plpy_spi.c plpy_subxactobject.c plpy_typeio.c plpy_util.c GETTEXT_TRIGGERS = $(BACKEND_COMMON_GETTEXT_TRIGGERS) PLy_elog:2 PLy_exception_set:2 PLy_exception_set_plural:2,3 diff --git a/src/pl/plpython/po/el.po b/src/pl/plpython/po/el.po new file mode 100644 index 0000000000000..63a5ddc1d8715 --- /dev/null +++ b/src/pl/plpython/po/el.po @@ -0,0 +1,460 @@ +# Greek message translation file for plpython +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the plpython (PostgreSQL) package. +# Georgios Kokolatos , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: plpython (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-05-24 01:08+0000\n" +"PO-Revision-Date: 2021-05-26 09:57+0200\n" +"Last-Translator: Georgios Kokolatos \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Language-Team: \n" +"X-Generator: Poedit 2.4.3\n" + +#: plpy_cursorobject.c:72 +#, c-format +msgid "plpy.cursor expected a query or a plan" +msgstr "plpy.cursor ανέμενε ένα ερώτημα ή ένα σχέδιο" + +#: plpy_cursorobject.c:155 +#, c-format +msgid "plpy.cursor takes a sequence as its second argument" +msgstr "plpy.cursor λαμβάνει μια ακολουθία ως τη δεύτερη παράμετρο" + +#: plpy_cursorobject.c:171 plpy_spi.c:207 +#, c-format +msgid "could not execute plan" +msgstr "δεν ήταν δυνατή η εκτέλεση του σχεδίου" + +#: plpy_cursorobject.c:174 plpy_spi.c:210 +#, c-format +msgid "Expected sequence of %d argument, got %d: %s" +msgid_plural "Expected sequence of %d arguments, got %d: %s" +msgstr[0] "Ανέμενε ακολουθία %d παραμέτρου, έλαβε %d: %s" +msgstr[1] "Ανέμενε ακολουθία %d παραμέτρων, έλαβε %d: %s" + +#: plpy_cursorobject.c:321 +#, c-format +msgid "iterating a closed cursor" +msgstr "επαναλαμβάνει έναν κλειστό δρομέα" + +#: plpy_cursorobject.c:329 plpy_cursorobject.c:395 +#, c-format +msgid "iterating a cursor in an aborted subtransaction" +msgstr "επαναλαμβάνει ένα δρομέα σε μία ματαιωμένη υποσυναλλαγή" + +#: plpy_cursorobject.c:387 +#, c-format +msgid "fetch from a closed cursor" +msgstr "ανάκτηση από κλειστό δρομέα" + +#: plpy_cursorobject.c:430 plpy_spi.c:403 +#, c-format +msgid "query result has too many rows to fit in a Python list" +msgstr "το αποτέλεσμα του ερωτήματος έχει πάρα πολλές σειρές για να χωρέσει σε μια λίστα Python" + +#: plpy_cursorobject.c:482 +#, c-format +msgid "closing a cursor in an aborted subtransaction" +msgstr "κλείσιμο ενός δρομέα σε μία ματαιωμένη υποσυναλλαγή" + +#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:548 +#, c-format +msgid "%s" +msgstr "%s" + +#: plpy_exec.c:139 +#, c-format +msgid "unsupported set function return mode" +msgstr "μη υποστηριζόμενο είδος επιστροφής συνάρτησης συνόλου" + +#: plpy_exec.c:140 +#, c-format +msgid "PL/Python set-returning functions only support returning one value per call." +msgstr "Οι λειτουργίες επιστροφής συνόλου PL/Python υποστηρίζουν μόνο την επιστροφή μίας τιμής ανά κλήση." + +#: plpy_exec.c:153 +#, c-format +msgid "returned object cannot be iterated" +msgstr "το επιστρεφόμενο αντικείμενο δεν μπορεί να επαναληφθεί" + +#: plpy_exec.c:154 +#, c-format +msgid "PL/Python set-returning functions must return an iterable object." +msgstr "Οι συναρτήσεις επιστροφής συνόλου PL/Python επιβάλλεται να επιστρέφουν ένα επαναλαμβανόμενο αντικείμενο." + +#: plpy_exec.c:168 +#, c-format +msgid "error fetching next item from iterator" +msgstr "σφάλμα κατά τη λήψη του επόμενου στοιχείου από το πρόγραμμα λήψης" + +#: plpy_exec.c:211 +#, c-format +msgid "PL/Python procedure did not return None" +msgstr "διεργασία PL/Python δεν επέστρεψε None" + +#: plpy_exec.c:215 +#, c-format +msgid "PL/Python function with return type \"void\" did not return None" +msgstr "συνάρτηση PL/Python με τύπο επιστροφής “void” δεν επέστρεψε None" + +#: plpy_exec.c:371 plpy_exec.c:397 +#, c-format +msgid "unexpected return value from trigger procedure" +msgstr "μη αναμενόμενη τιμή επιστροφής από διεργασία εναύσματος" + +#: plpy_exec.c:372 +#, c-format +msgid "Expected None or a string." +msgstr "Αναμενόταν None ή μία συμβολοσειρά." + +#: plpy_exec.c:387 +#, c-format +msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored" +msgstr "συνάρτηση εναύσματος PL/Python επέστρεψε \"MODIFY\" σε ένα έναυσμα DELETE -- παραβλέφθηκε" + +#: plpy_exec.c:398 +#, c-format +msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"." +msgstr "Αναμενόταν None, “OK”, “SKIP”, ή “MODIFY”." + +#: plpy_exec.c:443 +#, c-format +msgid "PyList_SetItem() failed, while setting up arguments" +msgstr "PyList_SetItem() απέτυχε, κατά τη διάρκεια ετοιμασίας των παραμέτρων" + +#: plpy_exec.c:447 +#, c-format +msgid "PyDict_SetItemString() failed, while setting up arguments" +msgstr "PyDict_SetItemString() απέτυχε, κατά τη διάρκεια ετοιμασίας των παραμέτρων" + +#: plpy_exec.c:459 +#, c-format +msgid "function returning record called in context that cannot accept type record" +msgstr "συνάρτηση που επιστρέφει εγγραφή καλείται σε περιεχόμενο που δεν δύναται να αποδεχτεί τύπο εγγραφής" + +#: plpy_exec.c:676 +#, c-format +msgid "while creating return value" +msgstr "κατά τη δημιουργία τιμής επιστροφής" + +#: plpy_exec.c:910 +#, c-format +msgid "TD[\"new\"] deleted, cannot modify row" +msgstr "TD[“new”] διαγράφηκε, δεν είναι δυνατή η μετατροπή σειράς" + +#: plpy_exec.c:915 +#, c-format +msgid "TD[\"new\"] is not a dictionary" +msgstr "TD[“new”] δεν είναι ένα λεξικό" + +#: plpy_exec.c:942 +#, c-format +msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string" +msgstr "TD[“new”] κλειδί λεξικού στη τακτή θέση %d δεν είναι μία συμβολοσειρά" + +#: plpy_exec.c:949 +#, c-format +msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row" +msgstr "κλειδί \"%s\" που βρίσκεται στο TD[\"New\"] δεν υπάρχει ως στήλη στη γραμμή εναύσματος" + +#: plpy_exec.c:954 +#, c-format +msgid "cannot set system attribute \"%s\"" +msgstr "δεν είναι δυνατός ο ορισμός του χαρακτηριστικού συστήματος \"%s\"" + +#: plpy_exec.c:959 +#, c-format +msgid "cannot set generated column \"%s\"" +msgstr "δεν είναι δυνατός ο ορισμός δημιουργημένης στήλης \"%s\"" + +#: plpy_exec.c:1017 +#, c-format +msgid "while modifying trigger row" +msgstr "κατά την τροποποίηση εναύσματος σειράς" + +#: plpy_exec.c:1075 +#, c-format +msgid "forcibly aborting a subtransaction that has not been exited" +msgstr "βίαιη ματαίωση μιας υποσυναλλαγής που δεν έχει εξέλθει" + +#: plpy_main.c:121 +#, c-format +msgid "multiple Python libraries are present in session" +msgstr "υπάρχουν πολλαπλές βιβλιοθήκες Python στη συνεδρία" + +#: plpy_main.c:122 +#, c-format +msgid "Only one Python major version can be used in one session." +msgstr "Μόνο μία κύρια έκδοση Python μπορεί να χρησιμοποιηθεί σε μία συνεδρία." + +#: plpy_main.c:138 +#, c-format +msgid "untrapped error in initialization" +msgstr "μη παγιδευμένο σφάλμα κατά την προετοιμασία" + +#: plpy_main.c:161 +#, c-format +msgid "could not import \"__main__\" module" +msgstr "δεν ήταν δυνατή η εισαγωγή του αρθρώματος “__main__”" + +#: plpy_main.c:170 +#, c-format +msgid "could not initialize globals" +msgstr "δεν ήταν δυνατή η αρχικοποίηση καθολικών μεταβλητών" + +#: plpy_main.c:393 +#, c-format +msgid "PL/Python procedure \"%s\"" +msgstr "διεργασία PL/Python “%s”" + +#: plpy_main.c:396 +#, c-format +msgid "PL/Python function \"%s\"" +msgstr "συνάρτηση PL/Python “%s”" + +#: plpy_main.c:404 +#, c-format +msgid "PL/Python anonymous code block" +msgstr "ονώνυμο μπλοκ κώδικα PL/Python" + +#: plpy_plpymodule.c:182 plpy_plpymodule.c:185 +#, c-format +msgid "could not import \"plpy\" module" +msgstr "δεν ήταν δυνατή η εισαγωγή του αρθρώματος “plpy”" + +#: plpy_plpymodule.c:200 +#, c-format +msgid "could not create the spiexceptions module" +msgstr "δεν ήταν δυνατή η δημιουργία του αρθρώματος spiexceptions" + +#: plpy_plpymodule.c:208 +#, c-format +msgid "could not add the spiexceptions module" +msgstr "δεν ήταν δυνατή η πρόσθεση του αρθρώματος spiexceptions" + +#: plpy_plpymodule.c:275 +#, c-format +msgid "could not generate SPI exceptions" +msgstr "δεν ήταν δυνατή η του αρθρώματος spiexceptions" + +#: plpy_plpymodule.c:443 +#, c-format +msgid "could not unpack arguments in plpy.elog" +msgstr "δεν ήταν δυνατή η αποσυσκευασία παραμέτρων στο plpy.elog" + +#: plpy_plpymodule.c:452 +msgid "could not parse error message in plpy.elog" +msgstr "δεν ήταν δυνατή η ανάλυση μηνυμάτος σφάλματος στο plpy.elog" + +#: plpy_plpymodule.c:469 +#, c-format +msgid "argument 'message' given by name and position" +msgstr "παράμετρος «μήνυμα» που δόθηκε με όνομα και θέση" + +#: plpy_plpymodule.c:496 +#, c-format +msgid "'%s' is an invalid keyword argument for this function" +msgstr "‘%s’ είναι μία άκυρη παράμετρος με λέξη-κλειδί για αυτή τη συνάρτηση" + +#: plpy_plpymodule.c:507 plpy_plpymodule.c:513 +#, c-format +msgid "invalid SQLSTATE code" +msgstr "μη έγκυρος κωδικός SQLSTATE" + +#: plpy_procedure.c:225 +#, c-format +msgid "trigger functions can only be called as triggers" +msgstr "συναρτήσεις εναυσμάτων μπορούν να κληθούν μόνο ως εναύσματα" + +#: plpy_procedure.c:229 +#, c-format +msgid "PL/Python functions cannot return type %s" +msgstr "οι συναρτήσεις PL/Python δεν μπορούν να επιστρέψουν τύπο %s" + +#: plpy_procedure.c:307 +#, c-format +msgid "PL/Python functions cannot accept type %s" +msgstr "οι συναρτήσεις PL/Python δεν μπορούν να δεχθούν τύπο %s" + +#: plpy_procedure.c:397 +#, c-format +msgid "could not compile PL/Python function \"%s\"" +msgstr "δεν ήταν δυνατή η μεταγλώττιση της συνάρτησης PL/Python \"%s\"" + +#: plpy_procedure.c:400 +#, c-format +msgid "could not compile anonymous PL/Python code block" +msgstr "δεν ήταν δυνατή η μεταγλώττιση ανώνυμου μπλοκ κώδικα PL/Python" + +#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169 +#, c-format +msgid "command did not produce a result set" +msgstr "η εντολή δεν παρήγαγε ένα σύνολο αποτελάσματων" + +#: plpy_spi.c:56 +#, c-format +msgid "second argument of plpy.prepare must be a sequence" +msgstr "η δεύτερη παράμετρος του plpy.prepare επιβάλλεται να είναι μία ακολουθία" + +#: plpy_spi.c:100 +#, c-format +msgid "plpy.prepare: type name at ordinal position %d is not a string" +msgstr "plpy.prepare: το όνομα τύπου στη τακτή θέση %d δεν είναι συμβολοσειρά" + +#: plpy_spi.c:172 +#, c-format +msgid "plpy.execute expected a query or a plan" +msgstr "plpy.execute ανέμενε ένα ερώτημα ή ένα σχέδιο" + +#: plpy_spi.c:191 +#, c-format +msgid "plpy.execute takes a sequence as its second argument" +msgstr "plpy.execute λαμβάνει μια ακολουθία ως δεύτερη παράμετρό του" + +#: plpy_spi.c:299 +#, c-format +msgid "SPI_execute_plan failed: %s" +msgstr "SPI_execute_plan απέτυχε: %s" + +#: plpy_spi.c:341 +#, c-format +msgid "SPI_execute failed: %s" +msgstr "SPI_execute απέτυχε: %s" + +#: plpy_subxactobject.c:92 +#, c-format +msgid "this subtransaction has already been entered" +msgstr "έχει εισέλθει ήδη σε αυτή τη υποσυναλλάγή" + +#: plpy_subxactobject.c:98 plpy_subxactobject.c:156 +#, c-format +msgid "this subtransaction has already been exited" +msgstr "έχει εξέλθει ήδη από αυτή τη υποσυναλλάγή" + +#: plpy_subxactobject.c:150 +#, c-format +msgid "this subtransaction has not been entered" +msgstr "δεν έχει εισέλθει σε αυτή τη υποσυναλλάγή" + +#: plpy_subxactobject.c:162 +#, c-format +msgid "there is no subtransaction to exit from" +msgstr "δεν υπάρχει υποσυναλλαγή από την οποία να εξέλθει" + +#: plpy_typeio.c:587 +#, c-format +msgid "could not import a module for Decimal constructor" +msgstr "δεν ήταν δυνατή η εισαγωγή αρθρώματος για τον κατασκευαστή Decimal" + +#: plpy_typeio.c:591 +#, c-format +msgid "no Decimal attribute in module" +msgstr "καμία ιδιότητα Decimal στο άρθρωμα" + +#: plpy_typeio.c:597 +#, c-format +msgid "conversion from numeric to Decimal failed" +msgstr "μετατροπή από αριθμητικό σε Decimal απέτυχε" + +#: plpy_typeio.c:911 +#, c-format +msgid "could not create bytes representation of Python object" +msgstr "δεν ήταν δυνατή η δημιουργία bytes αναπαράστασης του αντικειμένου Python" + +#: plpy_typeio.c:1056 +#, c-format +msgid "could not create string representation of Python object" +msgstr "δεν ήταν δυνατή η δημιουργία string αναπαράστασης του αντικειμένου Python" + +#: plpy_typeio.c:1067 +#, c-format +msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes" +msgstr "δεν ήταν δυνατή η μετατροπή του αντικειμένου Python σε cstring: Η αναπαράσταση συμβολοσειράς Python φαίνεται να περιέχει null bytes" + +#: plpy_typeio.c:1178 +#, c-format +msgid "number of array dimensions exceeds the maximum allowed (%d)" +msgstr "o αριθμός των διαστάσεων συστοιχίας υπερβαίνει το μέγιστο επιτρεπόμενο (%d)" + +#: plpy_typeio.c:1183 +#, c-format +msgid "could not determine sequence length for function return value" +msgstr "δεν ήταν δυνατός ο προσδιορισμός του μήκους της ακολουθίας για την τιμή επιστροφής της συνάρτησης" + +#: plpy_typeio.c:1188 plpy_typeio.c:1194 +#, c-format +msgid "array size exceeds the maximum allowed" +msgstr "το μέγεθος συστοιχίας υπερβαίνει το μέγιστο επιτρεπόμενο" + +#: plpy_typeio.c:1222 +#, c-format +msgid "return value of function with array return type is not a Python sequence" +msgstr "η τιμή επιστροφής της συνάρτησης με τύπο επιστροφής συστυχίας δεν είναι μία ακολουθία Python" + +#: plpy_typeio.c:1269 +#, c-format +msgid "wrong length of inner sequence: has length %d, but %d was expected" +msgstr "λάθος μήκος της εσωτερικής ακολουθίας: έχει μήκος %d , αλλά αναμενόταν %d" + +#: plpy_typeio.c:1271 +#, c-format +msgid "To construct a multidimensional array, the inner sequences must all have the same length." +msgstr "Για να κατασκευαστεί μια πολυδιάστατη συστυχία, οι εσωτερικές ακολουθίες πρέπει να έχουν όλες το ίδιο μήκος." + +#: plpy_typeio.c:1350 +#, c-format +msgid "malformed record literal: \"%s\"" +msgstr "κακοσχηματισμένο εγγραφή: “%s”" + +#: plpy_typeio.c:1351 +#, c-format +msgid "Missing left parenthesis." +msgstr "Λείπει δεξιά παρένθεση." + +#: plpy_typeio.c:1352 plpy_typeio.c:1553 +#, c-format +msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"." +msgstr "Για να επιστρέψετε έναν σύνθετο τύπο σε μία συστυχία, επιστρέψτε τον σύνθετο τύπο ως πλειάδα Python, π.χ. “[(‘foo’,)”." + +#: plpy_typeio.c:1399 +#, c-format +msgid "key \"%s\" not found in mapping" +msgstr "κλειδί “%s” δεν βρέθηκε σε αντιστοίχιση" + +#: plpy_typeio.c:1400 +#, c-format +msgid "To return null in a column, add the value None to the mapping with the key named after the column." +msgstr "Για να επιστρέψετε null σε μια στήλη, προσθέστε την τιμή None στην αντιστοίχιση με το κλειδί που ονομάστηκε από τη στήλη." + +#: plpy_typeio.c:1453 +#, c-format +msgid "length of returned sequence did not match number of columns in row" +msgstr "το μήκος της ακολουθίας που επιστράφηκε δεν ταίριαζε με τον αριθμό των στηλών στη γραμμή" + +#: plpy_typeio.c:1551 +#, c-format +msgid "attribute \"%s\" does not exist in Python object" +msgstr "η ιδιότητα “%s” δεν υπάρχει στο αντικείμενο Python" + +#: plpy_typeio.c:1554 +#, c-format +msgid "To return null in a column, let the returned object have an attribute named after column with value None." +msgstr "Για να επιστρέψετε null σε μια στήλη, αφήστε το αντικείμενο που επιστράφηκε να έχει ένα χαρακτηριστικό που ονομάζεται από την στήλη με τιμή None." + +#: plpy_util.c:31 +#, c-format +msgid "could not convert Python Unicode object to bytes" +msgstr "δεν ήταν δυνατή η μετατροπή του αντικειμένου Python Unicode σε bytes" + +#: plpy_util.c:37 +#, c-format +msgid "could not extract bytes from encoded string" +msgstr "δεν ήταν δυνατή η εξόρυξη bytes από κωδικοποιημένη συμβολοσειρά" diff --git a/src/pl/tcl/po/el.po b/src/pl/tcl/po/el.po index 5437cb49f46c9..5891530f2d32f 100644 --- a/src/pl/tcl/po/el.po +++ b/src/pl/tcl/po/el.po @@ -1,19 +1,20 @@ # Greek message translation file for pltcl # Copyright (C) 2021 PostgreSQL Global Development Group # This file is distributed under the same license as the pltcl (PostgreSQL) package. +# Georgios Kokolatos , 2021 # msgid "" msgstr "" "Project-Id-Version: pltcl (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-04-29 07:38+0000\n" +"POT-Creation-Date: 2021-05-25 05:38+0000\n" "PO-Revision-Date: 2021-05-04 13:48+0200\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Last-Translator: Georgios Kokolatos \n" -"Language-Team: \n" "X-Generator: Poedit 2.4.3\n" #: pltcl.c:463 From 8d29d45d9b3cab95a866efbcdd9138b3d76741b3 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Mon, 21 Jun 2021 23:11:23 +1200 Subject: [PATCH 505/671] Fix assert failure in expand_grouping_sets linitial_node() fails in assert enabled builds if the given pointer is not of the specified type. Here the type is IntList. The code thought it should be expecting List, but it was wrong. In the existing tests which run this code the initial list element is always NIL. Since linitial_node() allows NULL, we didn't trigger any assert failures in the existing regression tests. There is still some discussion as to whether we need a few more tests in this area, but for now, since beta2 is looming, fix the bug first. Bug: #17067 Discussion: https://postgr.es/m/17067-665d50fa321f79e0@postgresql.org Reported-by: Yaoguang Chen --- src/backend/parser/parse_agg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c index 9562ffcf3e2bc..a25f8d5b98991 100644 --- a/src/backend/parser/parse_agg.c +++ b/src/backend/parser/parse_agg.c @@ -1855,7 +1855,7 @@ expand_grouping_sets(List *groupingSets, bool groupDistinct, int limit) list_sort(result, cmp_list_len_contents_asc); /* Finally, remove duplicates */ - prev = linitial_node(List, result); + prev = linitial(result); for_each_from(cell, result, 1) { if (equal(lfirst(cell), prev)) From 5a1e1d83022b976ebdec5cfa8f255c4278b75b8e Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Mon, 21 Jun 2021 05:13:46 -0700 Subject: [PATCH 506/671] Use correct horizon when vacuuming catalog relations. In dc7420c2c92 I (Andres) accidentally used RelationIsAccessibleInLogicalDecoding() as the sole condition to use the non-shared catalog horizon in GetOldestNonRemovableTransactionId(). That is incorrect, as RelationIsAccessibleInLogicalDecoding() checks whether wal_level is logical. The correct check, as done e.g. in GlobalVisTestFor(), is to check IsCatalogRelation() and RelationIsAccessibleInLogicalDecoding(). The observed misbehavior of this bug was that there could be an endless loop in lazy_scan_prune(), because the horizons used in heap_page_prune() and the individual tuple liveliness checks did not match. Likely there are other potential consequences as well. A later commit will unify the determination which horizon has to be used, and add additional assertions to make it easier to catch a bug like this. Reported-By: Justin Pryzby Diagnosed-By: Matthias van de Meent Author: Matthias van de Meent Discussion: https://postgr.es/m/CAEze2Wg32Y9+WJfw=aofkRx1ZRFt_Ev6bNPc4PSaz7PjSFtZgQ@mail.gmail.com --- src/backend/storage/ipc/procarray.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 085bd1e40778e..e4c008e443f43 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -1971,9 +1971,10 @@ GetOldestNonRemovableTransactionId(Relation rel) ComputeXidHorizons(&horizons); /* select horizon appropriate for relation */ - if (rel == NULL || rel->rd_rel->relisshared) + if (rel == NULL || rel->rd_rel->relisshared || RecoveryInProgress()) return horizons.shared_oldest_nonremovable; - else if (RelationIsAccessibleInLogicalDecoding(rel)) + else if (IsCatalogRelation(rel) || + RelationIsAccessibleInLogicalDecoding(rel)) return horizons.catalog_oldest_nonremovable; else if (RELATION_IS_LOCAL(rel)) return horizons.temp_oldest_nonremovable; From bafad2c5b261a1449bed60ebac9e7918ebcc42b4 Mon Sep 17 00:00:00 2001 From: Joe Conway Date: Mon, 21 Jun 2021 17:07:55 -0400 Subject: [PATCH 507/671] Stamp 14beta2. --- configure | 18 +++++++++--------- configure.ac | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/configure b/configure index e9b98f442fe3e..a2c055f3cc247 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for PostgreSQL 14beta1. +# Generated by GNU Autoconf 2.69 for PostgreSQL 14beta2. # # Report bugs to . # @@ -582,8 +582,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='PostgreSQL' PACKAGE_TARNAME='postgresql' -PACKAGE_VERSION='14beta1' -PACKAGE_STRING='PostgreSQL 14beta1' +PACKAGE_VERSION='14beta2' +PACKAGE_STRING='PostgreSQL 14beta2' PACKAGE_BUGREPORT='pgsql-bugs@lists.postgresql.org' PACKAGE_URL='https://www.postgresql.org/' @@ -1443,7 +1443,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures PostgreSQL 14beta1 to adapt to many kinds of systems. +\`configure' configures PostgreSQL 14beta2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1508,7 +1508,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of PostgreSQL 14beta1:";; + short | recursive ) echo "Configuration of PostgreSQL 14beta2:";; esac cat <<\_ACEOF @@ -1679,7 +1679,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -PostgreSQL configure 14beta1 +PostgreSQL configure 14beta2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2432,7 +2432,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by PostgreSQL $as_me 14beta1, which was +It was created by PostgreSQL $as_me 14beta2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -20073,7 +20073,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by PostgreSQL $as_me 14beta1, which was +This file was extended by PostgreSQL $as_me 14beta2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -20144,7 +20144,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -PostgreSQL config.status 14beta1 +PostgreSQL config.status 14beta2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 3b42d8bdc9c05..3eb35583c1b0f 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl Read the Autoconf manual for details. dnl m4_pattern_forbid(^PGAC_)dnl to catch undefined macros -AC_INIT([PostgreSQL], [14beta1], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/]) +AC_INIT([PostgreSQL], [14beta2], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/]) m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.69], [], [m4_fatal([Autoconf version 2.69 is required. Untested combinations of 'autoconf' and PostgreSQL versions are not From 8e638845ff6bb255ad1dea15831089a234535391 Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Tue, 22 Jun 2021 09:06:32 -0700 Subject: [PATCH 508/671] Add list of ignorable pgindent commits for git-blame. Add a .git-blame-ignore-revs file with a list of pgindent, pgperlyidy, and reformat-dat-files commit hashes. Postgres hackers that configure git to use the ignore file will get git-blame output that avoids attributing line changes to the ignored indent commits. This makes git-blame output much easier to work with in practice. Author: Peter Geoghegan Reviewed-By: Tom Lane Discussion: https://postgr.es/m/CAH2-Wz=cVh3GHTP6SdLU-Gnmt2zRdF8vZkcrFdSzXQ=WhbWm9Q@mail.gmail.com --- .git-blame-ignore-revs | 219 ++++++++++++++++++++++++++++++++++++++ src/tools/RELEASE_CHANGES | 4 + src/tools/pgindent/README | 5 + 3 files changed, 228 insertions(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000000000..ae4e53d2cc1a0 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,219 @@ +# As of git 2.23, git-blame supports ignoring specific commits. This is useful +# with commits that make bulk formatting changes without truly changing any +# code. +# +# This file lists ignorable pgindent, pgperltidy, and reformat-dat-files +# related commits only. Please don't add commits that are not in this +# category. +# +# You can use the ignore list file by running: +# +# $ git config blame.ignoreRevsFile .git-blame-ignore-revs +# +# Add new entries by adding the output of the following to the top of the file: +# +# $ git log --pretty=format:"%H # %cd %n# %s" $PGINDENTGITHASH -1 + +def5b065ff22a16a80084587613599fe15627213 # 2021-05-12 13:14:10 -0400 +# Initial pgindent and pgperltidy run for v14. + +8b411b8ff41566a1aa601d1f05aeebbebbdb4a54 # 2021-01-13 16:14:38 -0500 +# Run reformat-dat-files to declutter the catalog data files. + +b5d69b7c22ee4c44b8bb99cfa0466ffaf3b5fab9 # 2020-06-07 16:57:08 -0400 +# pgindent run prior to branching v13. + +fa27dd40d5c5f56a1ee837a75c97549e992e32a4 # 2020-05-16 11:54:51 -0400 +# Run pgindent with new pg_bsd_indent version 2.1.1. + +e02ad575d8ab6b44500d2a3fd8c3212345e3aa2b # 2020-05-16 11:49:14 -0400 +# Final pgindent run with pg_bsd_indent version 2.1. + +5cbfce562f7cd2aab0cdc4694ce298ec3567930e # 2020-05-14 13:06:38 -0400 +# Initial pgindent and pgperltidy run for v13. + +b78542b9e975494bba6db2d2802439c3328d5ef7 # 2020-02-15 14:58:30 -0500 +# Run "make reformat-dat-files". + +c9d29775195922136c09cc980bb1b7091bf3d859 # 2020-01-30 13:42:14 -0300 +# Clean up newlines following left parentheses + +9e1c9f959422192bbe1b842a2a1ffaf76b080196 # 2019-07-01 12:37:52 -0400 +# pgindent run prior to branching v12. + +db6e2b4c52ade524f3db419d75084728e96e1f9c # 2019-05-22 13:36:19 -0400 +# Initial pgperltidy run for v12. + +8255c7a5eeba8f1a38b7a431c04909bde4f5e67d # 2019-05-22 13:04:48 -0400 +# Phase 2 pgindent run for v12. + +be76af171cdb3e7465c4ef234af403f97ad79b7b # 2019-05-22 12:55:34 -0400 +# Initial pgindent run for v12. + +d8421390996dcd762383a28e57d1f3f16cc5f76f # 2018-06-30 12:28:55 -0400 +# perltidy run prior to branching + +1e9c8580904625576871eeb2efec7f04d4c3bc1c # 2018-06-30 12:25:49 -0400 +# pgindent run prior to branching + +bdf46af748d0f15f257c99bf06e9e25aba6a24f9 # 2018-04-26 14:47:16 -0400 +# Post-feature-freeze pgindent run. + +f04d4ac919b9ae9b57e977523e4b40979aa8b951 # 2018-04-25 14:00:19 -0400 +# Reindent Perl files with perltidy version 20170521. + +eaedf0df7197b21182f6c341a44e4fdaa3cd6ea6 # 2017-11-29 09:24:24 -0500 +# Update typedefs.list and re-run pgindent + +21d304dfedb4f26d0d6587d9ac39b1b5c499bb55 # 2017-08-14 17:29:33 -0400 +# Final pgindent + perltidy run for v10. + +382ceffdf7f620d8f2d50e451b4167d291ae2348 # 2017-06-21 15:35:54 -0400 +# Phase 3 of pgindent updates. + +c7b8998ebbf310a156aa38022555a24d98fdbfb4 # 2017-06-21 15:18:54 -0400 +# Phase 2 of pgindent updates. + +e3860ffa4dd0dad0dd9eea4be9cc1412373a8c89 # 2017-06-21 14:39:04 -0400 +# Initial pgindent run with pg_bsd_indent version 2.0. + +9ef2dbefc7fb3ac22e1528bc22a41a5c6c6a9539 # 2017-06-21 14:09:24 -0400 +# Final pgindent run with old pg_bsd_indent (version 1.3). + +651902deb1551db8b401fdeab9bdb8a61cee7f9f # 2017-06-13 13:05:59 -0400 +# Re-run pgindent. + +ce554810329b9b8e862eade08b598148931eb456 # 2017-05-17 19:01:23 -0400 +# Post-PG 10 beta1 pgperltidy run + +a6fd7b7a5f7bf3a8aa3f3d076cf09d922c1c6dd2 # 2017-05-17 16:31:56 -0400 +# Post-PG 10 beta1 pgindent run + +b5bce6c1ec6061c8a4f730d927e162db7e2ce365 # 2016-08-15 13:42:51 -0400 +# Final pgindent + perltidy run for 9.6. + +3be0a62ffe58f0753d190cbe22acbeb8b4926b85 # 2016-06-12 04:19:56 -0400 +# Finish pgindent run for 9.6: Perl files. + +4bc424b968058c7f0aa685821d7039e86faac99c # 2016-06-09 18:02:36 -0400 +# pgindent run for 9.6 + +de94e2af184e25576b13cbda8cf825118835d1cd # 2016-04-06 11:34:02 -0400 +# Run pgindent on a batch of (mostly-planner-related) source files. + +d0cd7bda97a626049aa7d247374909c52399c413 # 2016-02-04 22:30:08 -0500 +# postgres_fdw: pgindent run. + +befa3e648ce018d84cd2a0df701927c56fe3da4e # 2015-05-24 21:44:57 -0400 +# Revert 9.5 pgindent changes to atomics directory files + +807b9e0dff663c5da875af7907a5106c0ff90673 # 2015-05-23 21:35:49 -0400 +# pgindent run for 9.5 + +785941cdc359c6e595201ffb0df9d28f3f7173a4 # 2015-03-26 14:03:19 -0400 +# Tweak __attribute__-wrapping macros for better pgindent results. + +7584649a1c58029a83a7a57d74cedcf1af434c97 # 2014-10-17 12:19:05 -0400 +# Re-pgindent src/bin/pg_dump/*. + +84288a86ac74dbeae486b6ff699c017f7d9517bb # 2014-05-06 20:39:28 -0400 +# With ecpg exclusion removed, re-run pgindent for 9.4 + +0a7832005792fa6dad171f9cadb8d587fe0dd800 # 2014-05-06 12:12:18 -0400 +# pgindent run for 9.4 + +9af4159fce6654aa0e081b00d02bca40b978745c # 2013-05-29 16:58:43 -0400 +# pgindent run for release 9.3 This is the first run of the Perl-based pgindent script. Also update pgindent instructions. + +927d61eeff78363ea3938c818d07e511ebaf75cf # 2012-06-10 15:20:04 -0400 +# Run pgindent on 9.2 source tree in preparation for first 9.3 commit-fest. + +6560407c7db2c7e32926a46f5fb52175ac10d9e5 # 2011-06-09 14:32:50 -0400 +# Pgindent run before 9.1 beta2. + +bf50caf105a901c4f83ac1df3cdaf910c26694a4 # 2011-04-10 11:42:00 -0400 +# pgindent run before PG 9.1 beta 1. + +239d769e7e05e0a5ef3bd6828e93e22ef3962780 # 2010-07-06 19:19:02 +0000 +# pgindent run for 9.0, second run + +65e806cba1f0f154d51caa7478e7192ce58d1056 # 2010-02-26 02:01:40 +0000 +# pgindent run for 9.0 + +d7471402794266078953f1bd113dab4913d631a1 # 2009-06-11 14:49:15 +0000 +# 8.4 pgindent run, with new combined Linux/FreeBSD/MinGW typedef list provided by Andrew. + +f6e8730d11ddfc720eda1dde23794d262ad8cc08 # 2007-11-15 22:25:18 +0000 +# Re-run pgindent with updated list of typedefs. (Updated README should avoid this problem in the future.) + +fdf5a5efb7b28c13085fe7313658de8d7b9914f6 # 2007-11-15 21:14:46 +0000 +# pgindent run for 8.3. + +f99a569a2ee3763b4ae174e81250c95ca0fdcbb6 # 2006-10-04 00:30:14 +0000 +# pgindent run for 8.2. + +436a2956d80db29ac1dff640b631620d856b4f70 # 2005-11-22 18:17:34 +0000 +# Re-run pgindent, fixing a problem where comment lines after a blank 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). + +1dc34982511d91ef8a2b71bdcb870f067c1b3da9 # 2005-10-15 02:49:52 +0000 +# Standard pgindent run for 8.1. + +15d3f9f6b7849a70281f151f0def7a6d335767d7 # 2004-08-30 02:54:42 +0000 +# Another pgindent run with lib typedefs added. + +b6b71b85bc45b49005b5aec87cba2c33fc8baf49 # 2004-08-29 05:07:03 +0000 +# Pgindent run for 8.0. + +46785776c42143af8f5433bb580ff13f2a9f65e1 # 2003-08-08 21:42:59 +0000 +# Another pgindent run with updated typedefs. + +089003fb462fcce46c02bf47322b429f73c33c50 # 2003-08-04 00:43:34 +0000 +# pgindent run. + +e50f52a074bdf0d6a9dc384840e641c4c0b0bb1a # 2002-09-04 20:31:48 +0000 +# pgindent run. + +ea08e6cd5542cb269ecd3e735f1dfa3bb61fbc4f # 2001-11-05 17:46:40 +0000 +# New pgindent run with fixes suggested by Tom. Patch manually reviewed, initdb/regression tests pass. + +6783b2372ef13c141649840a836ff0a954ea1d4d # 2001-10-28 06:26:15 +0000 +# Another pgindent run. Fixes enum indenting, and improves #endif spacing. Also adds space for one-line comments. + +b81844b1738c584d92330a5ccd0fbd8b603d2886 # 2001-10-25 05:50:21 +0000 +# pgindent run on all C files. Java run to follow. initdb/regression tests pass. + +0686d49da0a34ad92f61f791ea1039dec5d20f41 # 2001-03-22 06:16:21 +0000 +# Remove dashes in comments that don't need them, rewrap with pgindent. + +9e1552607a9dc6bc23e43d46770a9063ade4f3f0 # 2001-03-22 04:01:46 +0000 +# pgindent run. Make it all clean. + +52f77df613cea1803ce86321c37229626d9f213c # 2000-04-12 17:17:23 +0000 +# Ye-old pgindent run. Same 4-space tabs. + +fcff1cdf4eadbc6dcba4b9a2cd09f38f466ffa31 # 1999-05-25 22:43:53 +0000 +# Another pgindent run. Sorry folks. + +07842084fe3e11041f83563c851236395f481470 # 1999-05-25 16:15:34 +0000 +# pgindent run over code. + +fa1a8d6a97068295fe30ac646aec7493a6305bc2 # 1998-09-01 04:40:42 +0000 +# OK, folks, here is the pgindent output. + +af74855a608da4cd7ef88ceb2241ec1c75537f39 # 1998-09-01 03:29:17 +0000 +# Renaming cleanup, no pgindent yet. + +a32450a5855eed4bfd756ef292ee45d3c754665b # 1998-02-26 04:46:47 +0000 +# pgindent run before 6.3 release, with Thomas' requested changes. + +59f6a57e59fe8353f9edaa3703516ea67e06672b # 1997-09-08 21:56:23 +0000 +# Used modified version of indent that understands over 100 typedefs. + +075cede74858a9a04e97097b1ccd555121516c20 # 1997-09-08 20:59:27 +0000 +# Add typdefs to pgindent run. + +319dbfa7364721d3343af03a7ce063c2a2c9d385 # 1997-09-08 02:41:22 +0000 +# Another PGINDENT run that changes variable indenting and case label indenting. Also static variable indenting. + +1ccd423235a48739d6f7a4d7889705b5f9ecc69b # 1997-09-07 05:04:48 +0000 +# Massive commit to run PGINDENT on all *.c and *.h files. diff --git a/src/tools/RELEASE_CHANGES b/src/tools/RELEASE_CHANGES index ec45ae4c90859..5cf2a4dda3c4b 100644 --- a/src/tools/RELEASE_CHANGES +++ b/src/tools/RELEASE_CHANGES @@ -72,6 +72,10 @@ but there may be reasons to do them at other times as well. pgindent, pgperltidy, and "make reformat-dat-files" (see src/tools/pgindent/README) +* Update .git-blame-ignore-revs. It should contain all of the newly + created code beautification commits. Make sure that you use + full-length commit hashes for this. + * Renumber any manually-assigned OIDs between 8000 and 9999 to lower numbers, using renumber_oids.pl (see notes in bki.sgml) diff --git a/src/tools/pgindent/README b/src/tools/pgindent/README index d36f5088279c4..74412d29f8abf 100644 --- a/src/tools/pgindent/README +++ b/src/tools/pgindent/README @@ -80,6 +80,11 @@ VALIDATION: When you're done, "git commit" everything including the typedefs.list file you used. +4) Add the newly created commits to the .git-blame-ignore-revs file so + that "git blame" ignores the commits (for anybody that has opted-in + to using the ignore file). + +Another "git commit" will be required for your ignore file changes. --------------------------------------------------------------------------- From d102aafb6259a6a412803d4b1d8c4f00aa17f67e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 22 Jun 2021 17:48:39 -0400 Subject: [PATCH 509/671] Restore the portal-level snapshot for simple expressions, too. Commits 84f5c2908 et al missed the need to cover plpgsql's "simple expression" code path. If the first thing we execute after a COMMIT/ROLLBACK is one of those, rather than a full-fledged SPI command, we must explicitly do EnsurePortalSnapshotExists() to make sure we have an outer snapshot. Note that it wouldn't be good enough to just push a snapshot for the duration of the expression execution: what comes back might be toasted, so we'd better have a snapshot protecting it. The test case demonstrating this fact cheats a bit by marking a SQL function immutable even though it fetches from a table. That's nothing that users haven't been seen to do, though. Per report from Jim Nasby. Back-patch to v11, like the previous fix. Discussion: https://postgr.es/m/378885e4-f85f-fc28-6c91-c4d1c080bf26@amazon.com --- .../src/expected/plpgsql_transaction.out | 18 ++++++++++++++++ src/pl/plpgsql/src/pl_exec.c | 10 +++++++++ .../plpgsql/src/sql/plpgsql_transaction.sql | 21 +++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/src/pl/plpgsql/src/expected/plpgsql_transaction.out b/src/pl/plpgsql/src/expected/plpgsql_transaction.out index 76cbdca0c56aa..57ab0bc0e7d6e 100644 --- a/src/pl/plpgsql/src/expected/plpgsql_transaction.out +++ b/src/pl/plpgsql/src/expected/plpgsql_transaction.out @@ -430,6 +430,24 @@ SELECT * FROM test1; ---+--- (0 rows) +-- detoast result of simple expression after commit +CREATE TEMP TABLE test4(f1 text); +ALTER TABLE test4 ALTER COLUMN f1 SET STORAGE EXTERNAL; -- disable compression +INSERT INTO test4 SELECT repeat('xyzzy', 2000); +-- immutable mark is a bit of a lie, but it serves to make call a simple expr +-- that will return a still-toasted value +CREATE FUNCTION data_source(i int) RETURNS TEXT LANGUAGE sql +AS 'select f1 from test4' IMMUTABLE; +DO $$ +declare x text; +begin + for i in 1..3 loop + x := data_source(i); + commit; + end loop; + raise notice 'length(x) = %', length(x); +end $$; +NOTICE: length(x) = 10000 -- operations on composite types vs. internal transactions DO LANGUAGE plpgsql $$ declare diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 0ce382e123251..96bb77e0b1e30 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -38,6 +38,7 @@ #include "plpgsql.h" #include "storage/proc.h" #include "tcop/cmdtag.h" +#include "tcop/pquery.h" #include "tcop/tcopprot.h" #include "tcop/utility.h" #include "utils/array.h" @@ -5958,6 +5959,15 @@ exec_eval_simple_expr(PLpgSQL_execstate *estate, expr->expr_simple_lxid == curlxid) return false; + /* + * Ensure that there's a portal-level snapshot, in case this simple + * expression is the first thing evaluated after a COMMIT or ROLLBACK. + * We'd have to do this anyway before executing the expression, so we + * might as well do it now to ensure that any possible replanning doesn't + * need to take a new snapshot. + */ + EnsurePortalSnapshotExists(); + /* * Check to see if the cached plan has been invalidated. If not, and this * is the first use in the current transaction, save a plan refcount in diff --git a/src/pl/plpgsql/src/sql/plpgsql_transaction.sql b/src/pl/plpgsql/src/sql/plpgsql_transaction.sql index cc26788b9ae7c..8e4783c9a5149 100644 --- a/src/pl/plpgsql/src/sql/plpgsql_transaction.sql +++ b/src/pl/plpgsql/src/sql/plpgsql_transaction.sql @@ -354,6 +354,27 @@ $$; SELECT * FROM test1; +-- detoast result of simple expression after commit +CREATE TEMP TABLE test4(f1 text); +ALTER TABLE test4 ALTER COLUMN f1 SET STORAGE EXTERNAL; -- disable compression +INSERT INTO test4 SELECT repeat('xyzzy', 2000); + +-- immutable mark is a bit of a lie, but it serves to make call a simple expr +-- that will return a still-toasted value +CREATE FUNCTION data_source(i int) RETURNS TEXT LANGUAGE sql +AS 'select f1 from test4' IMMUTABLE; + +DO $$ +declare x text; +begin + for i in 1..3 loop + x := data_source(i); + commit; + end loop; + raise notice 'length(x) = %', length(x); +end $$; + + -- operations on composite types vs. internal transactions DO LANGUAGE plpgsql $$ declare From 741d7f1047fe52da7ced6fa9cea661ce9320c8d4 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 22 Jun 2021 21:43:12 -0400 Subject: [PATCH 510/671] Use annotations to reduce instability of isolation-test results. We've long contended with isolation test results that aren't entirely stable. Some test scripts insert long delays to try to force stable results, which is not terribly desirable; but other erratic failure modes remain, causing unrepeatable buildfarm failures. I've spent a fair amount of time trying to solve this by improving the server-side support code, without much success: that way is fundamentally unable to cope with diffs that stem from chance ordering of arrival of messages from different server processes. We can improve matters on the client side, however, by annotating the test scripts themselves to show the desired reporting order of events that might occur in different orders. This patch adds three types of annotations to deal with (a) test steps that might or might not complete their waits before the isolationtester can see them waiting; (b) test steps in different sessions that can legitimately complete in either order; and (c) NOTIFY messages that might arrive before or after the completion of a step in another session. We might need more annotation types later, but this seems to be enough to deal with the instabilities we've seen in the buildfarm. It also lets us get rid of all the long delays that were previously used, cutting more than a minute off the runtime of the isolation tests. Back-patch to all supported branches, because the buildfarm instabilities affect all the branches, and because it seems desirable to keep isolationtester's capabilities the same across all branches to simplify possible future back-patching of tests. Discussion: https://postgr.es/m/327948.1623725828@sss.pgh.pa.us --- .../expected/concurrent_ddl_dml.out | 2 +- src/test/isolation/README | 85 +- src/test/isolation/expected/alter-table-3.out | 32 +- src/test/isolation/expected/alter-table-4.out | 2 +- src/test/isolation/expected/deadlock-hard.out | 2 +- .../isolation/expected/deadlock-simple.out | 2 +- .../detach-partition-concurrently-3.out | 200 +++-- .../detach-partition-concurrently-4.out | 118 ++- .../expected/eval-plan-qual-trigger.out | 18 +- .../isolation/expected/eval-plan-qual.out | 6 +- .../isolation/expected/fk-deadlock2_1.out | 12 +- .../isolation/expected/fk-deadlock2_2.out | 12 +- src/test/isolation/expected/fk-deadlock_1.out | 12 +- .../isolation/expected/fk-partitioned-1.out | 12 +- .../isolation/expected/fk-partitioned-2.out | 12 +- .../expected/insert-conflict-do-nothing-2.out | 8 +- .../expected/insert-conflict-specconflict.out | 4 +- .../expected/lock-committed-keyupdate.out | 24 +- .../expected/lock-update-delete_1.out | 8 +- src/test/isolation/expected/multiple-cic.out | 3 +- .../isolation/expected/multiple-cic_1.out | 20 - .../expected/multixact-no-forget_1.out | 4 +- src/test/isolation/expected/nowait-4.out | 2 +- src/test/isolation/expected/nowait-4_1.out | 2 +- src/test/isolation/expected/nowait-5.out | 2 +- .../expected/partition-concurrent-attach.out | 6 +- .../expected/partition-key-update-1.out | 14 +- .../expected/partition-key-update-3.out | 12 +- .../expected/propagate-lock-delete.out | 16 +- .../expected/read-write-unique-2.out | 2 +- .../expected/read-write-unique-3.out | 2 +- .../expected/read-write-unique-4.out | 6 +- .../isolation/expected/read-write-unique.out | 2 +- src/test/isolation/expected/sequence-ddl.out | 2 +- .../isolation/expected/skip-locked-4_1.out | 2 +- src/test/isolation/expected/timeouts.out | 16 +- .../isolation/expected/tuplelock-update.out | 21 +- src/test/isolation/isolationtester.c | 780 +++++++++++------- src/test/isolation/isolationtester.h | 47 +- src/test/isolation/specparse.y | 87 +- src/test/isolation/specs/deadlock-hard.spec | 12 +- src/test/isolation/specs/deadlock-soft-2.spec | 15 +- .../detach-partition-concurrently-3.spec | 50 +- .../detach-partition-concurrently-4.spec | 34 +- .../specs/insert-conflict-specconflict.spec | 16 +- src/test/isolation/specs/multiple-cic.spec | 5 +- src/test/isolation/specs/timeouts.spec | 28 +- .../isolation/specs/tuplelock-update.spec | 9 +- src/test/isolation/specscanner.l | 12 + 49 files changed, 1077 insertions(+), 723 deletions(-) delete mode 100644 src/test/isolation/expected/multiple-cic_1.out diff --git a/contrib/test_decoding/expected/concurrent_ddl_dml.out b/contrib/test_decoding/expected/concurrent_ddl_dml.out index 1f9e7661b7539..53578c8ed60fb 100644 --- a/contrib/test_decoding/expected/concurrent_ddl_dml.out +++ b/contrib/test_decoding/expected/concurrent_ddl_dml.out @@ -257,7 +257,7 @@ step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); step s2_alter_tbl1_boolean: ALTER TABLE tbl1 ALTER COLUMN val2 TYPE boolean; step s1_commit: COMMIT; step s2_alter_tbl1_boolean: <... completed> -error in steps s1_commit s2_alter_tbl1_boolean: ERROR: column "val2" cannot be cast automatically to type boolean +ERROR: column "val2" cannot be cast automatically to type boolean step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); data diff --git a/src/test/isolation/README b/src/test/isolation/README index 6ae71523258a5..9d568e53543d4 100644 --- a/src/test/isolation/README +++ b/src/test/isolation/README @@ -57,11 +57,16 @@ Test specification ================== Each isolation test is defined by a specification file, stored in the specs -subdirectory. A test specification consists of four parts, in this order: +subdirectory. A test specification defines some SQL "steps", groups them +into "sessions" (where all the steps of one session will be run in the +same backend), and specifies the "permutations" or orderings of the steps +that are to be run. + +A test specification consists of four parts, in this order: setup { } - The given SQL block is executed once, in one session only, before running + The given SQL block is executed once (per permutation) before running the test. Create any test tables or other required objects here. This part is optional. Multiple setup blocks are allowed if needed; each is run separately, in the given order. (The reason for allowing multiple @@ -81,8 +86,8 @@ session "" session is executed in its own connection. A session part consists of three parts: setup, teardown and one or more "steps". The per-session setup and teardown parts have the same syntax as the per-test setup and - teardown described above, but they are executed in each session. The - setup part typically contains a "BEGIN" command to begin a transaction. + teardown described above, but they are executed in each session. The setup + part might, for example, contain a "BEGIN" command to begin a transaction. Each step has the syntax @@ -101,7 +106,8 @@ permutation "" ... order). Note that the list of steps in a manually specified "permutation" line doesn't actually have to be a permutation of the available steps; it could for instance repeat some steps more than once, - or leave others out. + or leave others out. Also, each step name can be annotated with some + parenthesized markers, which are described below. Lines beginning with a # are considered comments. @@ -110,7 +116,8 @@ specified in the spec file, or automatically generated), the isolation tester runs the main setup part, then per-session setup parts, then the selected session steps, then per-session teardown, then the main teardown script. Each selected step is sent to the connection associated -with its session. +with its session. The main setup and teardown scripts are run in a +separate "control" session. Support for blocking commands @@ -129,3 +136,69 @@ tests take a very long time to run, and they serve no useful testing purpose. Note that isolationtester recognizes that a command has blocked by looking to see if it is shown as waiting in the pg_locks view; therefore, only blocks on heavyweight locks will be detected. + + +Dealing with race conditions +============================ + +In some cases, the isolationtester's output for a test script may vary +due to timing issues. One way to deal with that is to create variant +expected-files, which follow the usual PG convention that variants for +foo.spec are named foo_1.out, foo_2.out, etc. However, this method is +discouraged since the extra files are a nuisance for maintenance. +Instead, it's usually possible to stabilize the test output by applying +special markers to some of the step names listed in a permutation line. + +The general form of a permutation entry is + + [ ( [ , ... ] ) ] + +where each marker defines a "blocking condition". The step will not be +reported as completed before all the blocking conditions are satisfied. +The possible markers are: + + * + + notices + +An asterisk marker, such as mystep(*), forces the isolationtester to +report the step as "waiting" as soon as it's been launched, regardless of +whether it would have been detected as waiting later. This is useful for +stabilizing cases that are sometimes reported as waiting and other times +reported as immediately completing, depending on the relative speeds of +the step and the isolationtester's status-monitoring queries. + +A marker consisting solely of a step name indicates that this step may +not be reported as completing until that other step has completed. +This allows stabilizing cases where two queries might be seen to complete +in either order. Note that this step can be *launched* before the other +step has completed. (If the other step is used more than once in the +current permutation, this step cannot complete while any of those +instances is active.) + +A marker of the form " notices " (where is a +positive integer) indicates that this step may not be reported as +completing until the other step's session has returned at least +NOTICE messages, counting from when this step is launched. This is useful +for stabilizing cases where a step can return NOTICE messages before it +actually completes, and those messages must be synchronized with the +completions of other steps. + +Notice that these markers can only delay reporting of the completion +of a step, not the launch of a step. The isolationtester will launch +the next step in a permutation as soon as (A) all prior steps of the +same session are done, and (B) the immediately preceding step in the +permutation is done or deemed blocked. For this purpose, "deemed +blocked" means that it has been seen to be waiting on a database lock, +or that it is complete but the report of its completion is delayed by +one of these markers. + +In some cases it is important not to launch a step until after the +completion of a step in another session that could have been deemed +blocked. An example is that if step s1 in session A is issuing a +cancel for step s2 in session B, we'd better not launch B's next step +till we're sure s1 is done. If s1 is blockable, trouble could ensue. +The best way to prevent that is to create an empty step in session A +and run it, without any markers, just before the next session B step. +The empty step cannot be launched until s1 is done, and in turn the +next session B step cannot be launched until the empty step finishes. diff --git a/src/test/isolation/expected/alter-table-3.out b/src/test/isolation/expected/alter-table-3.out index b4f3b5a86d1f3..aad837206977f 100644 --- a/src/test/isolation/expected/alter-table-3.out +++ b/src/test/isolation/expected/alter-table-3.out @@ -54,7 +54,7 @@ i step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s1a s1b s2a s1c s1d s2b s2c s2d @@ -97,7 +97,7 @@ i step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s1a s1b s2a s2b s1c s1d s2c s2d @@ -126,7 +126,7 @@ step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s1a s1b s2a s2b s2c s1c s1d s2d @@ -141,7 +141,7 @@ step s2c: INSERT INTO a VALUES (0); step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s1a s2a s1b s1c s1d s2b s2c s2d @@ -184,7 +184,7 @@ i step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s1a s2a s1b s2b s1c s1d s2c s2d @@ -213,7 +213,7 @@ step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s1a s2a s1b s2b s2c s1c s1d s2d @@ -228,7 +228,7 @@ step s2c: INSERT INTO a VALUES (0); step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s1a s2a s2b s1b s1c s1d s2c s2d @@ -257,7 +257,7 @@ step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s1a s2a s2b s1b s2c s1c s1d s2d @@ -272,7 +272,7 @@ step s2c: INSERT INTO a VALUES (0); step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s1a s2a s2b s2c s1b s1c s1d s2d @@ -371,7 +371,7 @@ i step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s2a s1a s1b s2b s1c s1d s2c s2d @@ -400,7 +400,7 @@ step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s2a s1a s1b s2b s2c s1c s1d s2d @@ -415,7 +415,7 @@ step s2c: INSERT INTO a VALUES (0); step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s2a s1a s2b s1b s1c s1d s2c s2d @@ -444,7 +444,7 @@ step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s2a s1a s2b s1b s2c s1c s1d s2d @@ -459,7 +459,7 @@ step s2c: INSERT INTO a VALUES (0); step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s2a s1a s2b s2c s1b s1c s1d s2d @@ -544,7 +544,7 @@ step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s2a s2b s1a s1b s2c s1c s1d s2d @@ -559,7 +559,7 @@ step s2c: INSERT INTO a VALUES (0); step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; step s2c: <... completed> -error in steps s1d s2c: ERROR: duplicate key value violates unique constraint "a_pkey" +ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; starting permutation: s2a s2b s1a s2c s1b s1c s1d s2d diff --git a/src/test/isolation/expected/alter-table-4.out b/src/test/isolation/expected/alter-table-4.out index d2dac0be09843..1009844f06f3d 100644 --- a/src/test/isolation/expected/alter-table-4.out +++ b/src/test/isolation/expected/alter-table-4.out @@ -50,7 +50,7 @@ step s1modc1a: ALTER TABLE c1 ALTER COLUMN a TYPE float; step s2sel: SELECT SUM(a) FROM p; step s1c: COMMIT; step s2sel: <... completed> -error in steps s1c s2sel: ERROR: attribute "a" of relation "c1" does not match parent's type +ERROR: attribute "a" of relation "c1" does not match parent's type step s2sel: SELECT SUM(a) FROM p; sum diff --git a/src/test/isolation/expected/deadlock-hard.out b/src/test/isolation/expected/deadlock-hard.out index b4ce01962d649..460653f2b86a6 100644 --- a/src/test/isolation/expected/deadlock-hard.out +++ b/src/test/isolation/expected/deadlock-hard.out @@ -18,8 +18,8 @@ step s6a7: LOCK TABLE a7; step s7a8: LOCK TABLE a8; step s8a1: LOCK TABLE a1; step s8a1: <... completed> +ERROR: deadlock detected step s7a8: <... completed> -error in steps s8a1 s7a8: ERROR: deadlock detected step s8c: COMMIT; step s7c: COMMIT; step s6a7: <... completed> diff --git a/src/test/isolation/expected/deadlock-simple.out b/src/test/isolation/expected/deadlock-simple.out index e0d2c4ef12be3..8be1538dd581c 100644 --- a/src/test/isolation/expected/deadlock-simple.out +++ b/src/test/isolation/expected/deadlock-simple.out @@ -5,7 +5,7 @@ step s1as: LOCK TABLE a1 IN ACCESS SHARE MODE; step s2as: LOCK TABLE a1 IN ACCESS SHARE MODE; step s1ae: LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; step s2ae: LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; +ERROR: deadlock detected step s1ae: <... completed> -error in steps s2ae s1ae: ERROR: deadlock detected step s1c: COMMIT; step s2c: COMMIT; diff --git a/src/test/isolation/expected/detach-partition-concurrently-3.out b/src/test/isolation/expected/detach-partition-concurrently-3.out index 96ee090d531cd..7ac22a6b15f07 100644 --- a/src/test/isolation/expected/detach-partition-concurrently-3.out +++ b/src/test/isolation/expected/detach-partition-concurrently-3.out @@ -1,6 +1,6 @@ Parsed test spec with 2 sessions -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1describe s1alter +starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1describe s1alter step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -8,13 +8,12 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s1describe: SELECT 'd3_listp' AS root, * FROM pg_partition_tree('d3_listp') UNION ALL SELECT 'd3_listp1', * FROM pg_partition_tree('d3_listp1'); @@ -26,7 +25,7 @@ d3_listp1 d3_listp1 t 0 step s1alter: ALTER TABLE d3_listp1 ALTER a DROP NOT NULL; ERROR: cannot alter partition "d3_listp1" with an incomplete detach -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1insert s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s1insert s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -34,18 +33,17 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1insert: INSERT INTO d3_listp VALUES (1); ERROR: no partition of relation "d3_listp" found for row step s1c: COMMIT; -starting permutation: s2snitch s1brr s1s s2detach s1cancel s2noop s1insert s1c s1spart +starting permutation: s2snitch s1brr s1s s2detach s1cancel s1insert s1c s1spart step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1s: SELECT * FROM d3_listp; @@ -53,13 +51,12 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1insert: INSERT INTO d3_listp VALUES (1); step s1c: COMMIT; step s1spart: SELECT * FROM d3_listp1; @@ -68,7 +65,7 @@ a 1 1 -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1insertpart +starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1insertpart step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -76,17 +73,16 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s1insertpart: INSERT INTO d3_listp1 VALUES (1); -starting permutation: s2snitch s1b s1s s2detach2 s1cancel s2noop s1c s1brr s1insert s1s s1insert s1c +starting permutation: s2snitch s1b s1s s2detach2 s1cancel s1c s1brr s1insert s1s s1insert s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -94,13 +90,12 @@ a 1 step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach2: <... completed> -error in steps s1cancel s2detach2: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1insert: INSERT INTO d3_listp VALUES (1); @@ -112,7 +107,7 @@ a step s1insert: INSERT INTO d3_listp VALUES (1); step s1c: COMMIT; -starting permutation: s2snitch s1b s1s s2detach2 s1cancel s2noop s1c s1brr s1s s1insert s1s s1c +starting permutation: s2snitch s1b s1s s2detach2 s1cancel s1c s1brr s1s s1insert s1s s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -120,13 +115,12 @@ a 1 step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach2: <... completed> -error in steps s1cancel s2detach2: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1s: SELECT * FROM d3_listp; @@ -141,7 +135,7 @@ a 1 step s1c: COMMIT; -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1drop s1list +starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1drop s1list step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -149,13 +143,12 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s1drop: DROP TABLE d3_listp; step s1list: SELECT relname FROM pg_catalog.pg_class @@ -163,7 +156,7 @@ step s1list: SELECT relname FROM pg_catalog.pg_class relname -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1trunc s1spart +starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1trunc s1spart step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -171,13 +164,12 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s1trunc: TRUNCATE TABLE d3_listp; step s1spart: SELECT * FROM d3_listp1; @@ -185,7 +177,7 @@ a 1 -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s2detach2 s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s1noop s2detach2 s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -193,18 +185,18 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request +step s1noop: step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; ERROR: partition "d3_listp1" already pending detach in partitioned table "public.d3_listp" step s1c: COMMIT; -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s2detachfinal s1c s2detach2 +starting permutation: s2snitch s1b s1s s2detach s1cancel s1noop s2detachfinal s1c s2detach2 step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -212,19 +204,19 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request +step s1noop: step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; step s1c: COMMIT; step s2detachfinal: <... completed> step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1droppart s2detach2 +starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1droppart s2detach2 step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -232,18 +224,17 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s1droppart: DROP TABLE d3_listp1; step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s2begin s2drop s1s s2commit +starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s2begin s2drop s1s s2commit step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -251,13 +242,12 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s2begin: BEGIN; step s2drop: DROP TABLE d3_listp1; @@ -267,7 +257,7 @@ step s1s: <... completed> a -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1b s1spart s2detachfinal s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1b s1spart s2detachfinal s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -275,13 +265,12 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s1b: BEGIN; step s1spart: SELECT * FROM d3_listp1; @@ -292,7 +281,7 @@ step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1b s1s s2detachfinal s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1b s1s s2detachfinal s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -300,13 +289,12 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -315,7 +303,7 @@ a step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; step s1c: COMMIT; -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s1b s1spart s2detachfinal s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1b s1spart s2detachfinal s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -323,13 +311,12 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s1b: BEGIN; step s1spart: SELECT * FROM d3_listp1; @@ -340,7 +327,7 @@ step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s2begin s2detachfinal s2commit +starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s2begin s2detachfinal s2commit step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -348,19 +335,18 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s2begin: BEGIN; step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; step s2commit: COMMIT; -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s2begin s2detachfinal s1spart s2commit +starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s2begin s2detachfinal s1spart s2commit step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -368,13 +354,12 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s2begin: BEGIN; step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; @@ -385,7 +370,7 @@ a 1 -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1c s2begin s2detachfinal s1insertpart s2commit +starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s2begin s2detachfinal s1insertpart s2commit step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -393,13 +378,12 @@ a 1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; -pg_cancel_backendpg_sleep +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: COMMIT; step s2begin: BEGIN; step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; diff --git a/src/test/isolation/expected/detach-partition-concurrently-4.out b/src/test/isolation/expected/detach-partition-concurrently-4.out index e5dc40d0769e4..d49736a17d548 100644 --- a/src/test/isolation/expected/detach-partition-concurrently-4.out +++ b/src/test/isolation/expected/detach-partition-concurrently-4.out @@ -1,6 +1,6 @@ Parsed test spec with 3 sessions -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s1insert s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1s: select * from d4_primary; @@ -9,13 +9,12 @@ a 1 2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; -pg_cancel_backendpg_sleep +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; @@ -30,11 +29,11 @@ a 2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1insert: insert into d4_fk values (1); +ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s2detach: <... completed> -error in steps s1insert s2detach: ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; -starting permutation: s2snitch s1brr s1s s2detach s1cancel s2noop s1insert s1c +starting permutation: s2snitch s1brr s1s s2detach s1cancel s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1brr: begin isolation level repeatable read; step s1s: select * from d4_primary; @@ -43,13 +42,12 @@ a 1 2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; -pg_cancel_backendpg_sleep +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; @@ -64,22 +62,21 @@ a 2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1insert: insert into d4_fk values (1); +ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s2detach: <... completed> -error in steps s1insert s2detach: ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; -starting permutation: s2snitch s1b s1declare s2detach s1cancel s2noop s1fetchall s1insert s1c +starting permutation: s2snitch s1b s1declare s2detach s1cancel s1fetchall s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1declare: declare f cursor for select * from d4_primary; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; -pg_cancel_backendpg_sleep +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1fetchall: fetch all from f; a @@ -100,22 +97,21 @@ a 1 2 step s1insert: insert into d4_fk values (1); +ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s2detach: <... completed> -error in steps s1insert s2detach: ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; -starting permutation: s2snitch s1b s1declare s2detach s1cancel s2noop s1svpt s1insert s1rollback s1fetchall s1c +starting permutation: s2snitch s1b s1declare s2detach s1cancel s1svpt s1insert s1rollback s1fetchall s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1declare: declare f cursor for select * from d4_primary; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; -pg_cancel_backendpg_sleep +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1svpt: savepoint f; step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" @@ -144,16 +140,15 @@ a step s1c: commit; step s2detach: <... completed> -starting permutation: s2snitch s1b s2detach s1declare s1cancel s2noop s1fetchall s1insert s1c +starting permutation: s2snitch s1b s2detach s1declare s1cancel s1fetchall s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1declare: declare f cursor for select * from d4_primary; -step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; -pg_cancel_backendpg_sleep +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +pg_cancel_backend -t -step s2noop: UNLISTEN noop; +t step s1fetchall: fetch all from f; a @@ -175,16 +170,15 @@ step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; -starting permutation: s2snitch s1b s2detach s1declare s1cancel s2noop s1svpt s1insert s1rollback s1fetchall s1c +starting permutation: s2snitch s1b s2detach s1declare s1cancel s1svpt s1insert s1rollback s1fetchall s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1declare: declare f cursor for select * from d4_primary; -step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; -pg_cancel_backendpg_sleep +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +pg_cancel_backend -t -step s2noop: UNLISTEN noop; +t step s1svpt: savepoint f; step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" @@ -210,7 +204,7 @@ a 2 step s1c: commit; -starting permutation: s2snitch s1brr s1declare2 s1fetchone s2detach s1cancel s2noop s1updcur s1c +starting permutation: s2snitch s1brr s1declare2 s1fetchone s2detach s1cancel s1updcur s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1brr: begin isolation level repeatable read; step s1declare2: declare f cursor for select * from d4_fk where a = 2; @@ -219,13 +213,12 @@ a 2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; -pg_cancel_backendpg_sleep +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1updcur: update d4_fk set a = 1 where current of f; ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; @@ -240,8 +233,8 @@ a 2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1updcur: update d4_fk set a = 1 where current of f; +ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s2detach: <... completed> -error in steps s1updcur s2detach: ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; starting permutation: s2snitch s1brr s1declare2 s1fetchone s1updcur s2detach s1c @@ -256,7 +249,7 @@ step s1updcur: update d4_fk set a = 1 where current of f; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1c: commit; step s2detach: <... completed> -error in steps s1c s2detach: ERROR: removing partition "d4_primary1" violates foreign key constraint "d4_fk_a_fkey1" +ERROR: removing partition "d4_primary1" violates foreign key constraint "d4_fk_a_fkey1" starting permutation: s2snitch s1b s1s s2detach s3insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); @@ -272,7 +265,7 @@ ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk step s1c: commit; step s2detach: <... completed> -starting permutation: s2snitch s1b s1s s2detach s3brr s3insert s3commit s1cancel s2noop s1c +starting permutation: s2snitch s1b s1s s2detach s3brr s3insert s3commit s1cancel s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1s: select * from d4_primary; @@ -285,13 +278,12 @@ step s3brr: begin isolation level repeatable read; step s3insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s3commit: commit; -step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; -pg_cancel_backendpg_sleep +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request step s1c: commit; starting permutation: s2snitch s1b s1s s2detach s3brr s3insert s3commit s1c @@ -310,7 +302,7 @@ step s3commit: commit; step s1c: commit; step s2detach: <... completed> -starting permutation: s2snitch s1brr s1s s2detach s1cancel s2noop s3vacfreeze s1s s1insert s1c +starting permutation: s2snitch s1brr s1s s2detach s1cancel s1noop s3vacfreeze s1s s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1brr: begin isolation level repeatable read; step s1s: select * from d4_primary; @@ -319,13 +311,13 @@ a 1 2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; -pg_cancel_backendpg_sleep +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request +step s1noop: step s3vacfreeze: vacuum freeze pg_catalog.pg_inherits; step s1s: select * from d4_primary; a @@ -336,7 +328,7 @@ step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; -starting permutation: s2snitch s1b s1s s2detach s1cancel s2noop s3vacfreeze s1s s1insert s1c +starting permutation: s2snitch s1b s1s s2detach s1cancel s1noop s3vacfreeze s1s s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1s: select * from d4_primary; @@ -345,13 +337,13 @@ a 1 2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; -pg_cancel_backendpg_sleep +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +pg_cancel_backend -t +t step s2detach: <... completed> -error in steps s1cancel s2detach: ERROR: canceling statement due to user request -step s2noop: UNLISTEN noop; +ERROR: canceling statement due to user request +step s1noop: step s3vacfreeze: vacuum freeze pg_catalog.pg_inherits; step s1s: select * from d4_primary; a diff --git a/src/test/isolation/expected/eval-plan-qual-trigger.out b/src/test/isolation/expected/eval-plan-qual-trigger.out index f0d975ce0c57c..833834afaaf0a 100644 --- a/src/test/isolation/expected/eval-plan-qual-trigger.out +++ b/src/test/isolation/expected/eval-plan-qual-trigger.out @@ -1,3 +1,9 @@ +unused step name: s2_r +unused step name: s3_b_rc +unused step name: s3_c +unused step name: s3_del_a +unused step name: s3_r +unused step name: s3_upd_a_data Parsed test spec with 4 sessions starting permutation: s1_trig_rep_b_u s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s1_c s2_upd_a_data s2_c s0_rep @@ -609,7 +615,7 @@ s2: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: step s1_c: COMMIT; step s2_ins_a: <... completed> -error in steps s1_c s2_ins_a: ERROR: duplicate key value violates unique constraint "trigtest_pkey" +ERROR: duplicate key value violates unique constraint "trigtest_pkey" step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data key data @@ -2023,7 +2029,7 @@ step s2_upd_a_data: step s1_c: COMMIT; step s2_upd_a_data: <... completed> -error in steps s1_c s2_upd_a_data: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data key data @@ -2136,7 +2142,7 @@ step s2_upd_a_data: step s1_c: COMMIT; step s2_upd_a_data: <... completed> -error in steps s1_c s2_upd_a_data: ERROR: could not serialize access due to concurrent delete +ERROR: could not serialize access due to concurrent delete step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data key data @@ -2202,9 +2208,3 @@ key data key-a val-a-s1-ups2 key-b val-b-s1 -unused step name: s2_r -unused step name: s3_b_rc -unused step name: s3_c -unused step name: s3_del_a -unused step name: s3_r -unused step name: s3_upd_a_data diff --git a/src/test/isolation/expected/eval-plan-qual.out b/src/test/isolation/expected/eval-plan-qual.out index 3e55a55c6347f..df8fa8b0a54b8 100644 --- a/src/test/isolation/expected/eval-plan-qual.out +++ b/src/test/isolation/expected/eval-plan-qual.out @@ -551,7 +551,7 @@ balance step updwctefail: WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *, update_checking(999)) UPDATE accounts a SET balance = doup.balance + 100 FROM doup RETURNING *; step c1: COMMIT; step updwctefail: <... completed> -error in steps c1 updwctefail: ERROR: tuple to be updated was already modified by an operation triggered by the current command +ERROR: tuple to be updated was already modified by an operation triggered by the current command step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; accountid balance @@ -584,7 +584,7 @@ balance step delwctefail: WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *, update_checking(999)) DELETE FROM accounts a USING doup RETURNING *; step c1: COMMIT; step delwctefail: <... completed> -error in steps c1 delwctefail: ERROR: tuple to be deleted was already modified by an operation triggered by the current command +ERROR: tuple to be deleted was already modified by an operation triggered by the current command step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; accountid balance @@ -931,7 +931,7 @@ step complexpartupdate_route_err1: step c1: COMMIT; step complexpartupdate_route_err1: <... completed> -error in steps c1 complexpartupdate_route_err1: ERROR: tuple to be locked was already moved to another partition due to concurrent update +ERROR: tuple to be locked was already moved to another partition due to concurrent update step c2: COMMIT; starting permutation: simplepartupdate_noroute complexpartupdate_route c1 c2 diff --git a/src/test/isolation/expected/fk-deadlock2_1.out b/src/test/isolation/expected/fk-deadlock2_1.out index 382734811cbbc..e1d8c692cbda1 100644 --- a/src/test/isolation/expected/fk-deadlock2_1.out +++ b/src/test/isolation/expected/fk-deadlock2_1.out @@ -14,7 +14,7 @@ step s1u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2u1: UPDATE B SET Col2 = 1 WHERE BID = 2; step s1c: COMMIT; step s2u1: <... completed> -error in steps s1c s2u1: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2u2: UPDATE B SET Col2 = 1 WHERE BID = 2; ERROR: current transaction is aborted, commands ignored until end of transaction block step s2c: COMMIT; @@ -26,7 +26,7 @@ step s1u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2c: COMMIT; step s1u2: <... completed> -error in steps s2c s1u2: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1c: COMMIT; starting permutation: s1u1 s2u1 s2u2 s1u2 s2c s1c @@ -36,7 +36,7 @@ step s2u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s1u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2c: COMMIT; step s1u2: <... completed> -error in steps s2c s1u2: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1c: COMMIT; starting permutation: s1u1 s2u1 s2u2 s2c s1u2 s1c @@ -55,7 +55,7 @@ step s1u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2c: COMMIT; step s1u2: <... completed> -error in steps s2c s1u2: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1c: COMMIT; starting permutation: s2u1 s1u1 s2u2 s1u2 s2c s1c @@ -65,7 +65,7 @@ step s2u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s1u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2c: COMMIT; step s1u2: <... completed> -error in steps s2c s1u2: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1c: COMMIT; starting permutation: s2u1 s1u1 s2u2 s2c s1u2 s1c @@ -84,7 +84,7 @@ step s1u1: UPDATE A SET Col1 = 1 WHERE AID = 1; step s1u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2c: COMMIT; step s1u2: <... completed> -error in steps s2c s1u2: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1c: COMMIT; starting permutation: s2u1 s2u2 s1u1 s2c s1u2 s1c diff --git a/src/test/isolation/expected/fk-deadlock2_2.out b/src/test/isolation/expected/fk-deadlock2_2.out index b6be4b98926be..97873709138a3 100644 --- a/src/test/isolation/expected/fk-deadlock2_2.out +++ b/src/test/isolation/expected/fk-deadlock2_2.out @@ -14,7 +14,7 @@ step s1u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2u1: UPDATE B SET Col2 = 1 WHERE BID = 2; step s1c: COMMIT; step s2u1: <... completed> -error in steps s1c s2u1: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2u2: UPDATE B SET Col2 = 1 WHERE BID = 2; ERROR: current transaction is aborted, commands ignored until end of transaction block step s2c: COMMIT; @@ -26,7 +26,7 @@ step s1u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2c: COMMIT; step s1u2: <... completed> -error in steps s2c s1u2: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1c: COMMIT; starting permutation: s1u1 s2u1 s2u2 s1u2 s2c s1c @@ -36,7 +36,7 @@ step s2u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s1u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2c: COMMIT; step s1u2: <... completed> -error in steps s2c s1u2: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1c: COMMIT; starting permutation: s1u1 s2u1 s2u2 s2c s1u2 s1c @@ -55,7 +55,7 @@ step s1u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2c: COMMIT; step s1u2: <... completed> -error in steps s2c s1u2: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1c: COMMIT; starting permutation: s2u1 s1u1 s2u2 s1u2 s2c s1c @@ -65,7 +65,7 @@ step s2u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s1u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2c: COMMIT; step s1u2: <... completed> -error in steps s2c s1u2: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1c: COMMIT; starting permutation: s2u1 s1u1 s2u2 s2c s1u2 s1c @@ -84,7 +84,7 @@ step s1u1: UPDATE A SET Col1 = 1 WHERE AID = 1; step s1u2: UPDATE B SET Col2 = 1 WHERE BID = 2; step s2c: COMMIT; step s1u2: <... completed> -error in steps s2c s1u2: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1c: COMMIT; starting permutation: s2u1 s2u2 s1u1 s2c s1u2 s1c diff --git a/src/test/isolation/expected/fk-deadlock_1.out b/src/test/isolation/expected/fk-deadlock_1.out index 0dae5d3a5a4f7..c951692744602 100644 --- a/src/test/isolation/expected/fk-deadlock_1.out +++ b/src/test/isolation/expected/fk-deadlock_1.out @@ -24,7 +24,7 @@ step s2i: INSERT INTO child VALUES (2, 1); step s2u: UPDATE parent SET aux = 'baz'; step s1c: COMMIT; step s2u: <... completed> -error in steps s1c s2u: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; starting permutation: s1i s2i s1u s1c s2u s2c @@ -43,7 +43,7 @@ step s1u: UPDATE parent SET aux = 'bar'; step s2u: UPDATE parent SET aux = 'baz'; step s1c: COMMIT; step s2u: <... completed> -error in steps s1c s2u: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; starting permutation: s1i s2i s2u s1u s2c s1c @@ -53,7 +53,7 @@ step s2u: UPDATE parent SET aux = 'baz'; step s1u: UPDATE parent SET aux = 'bar'; step s2c: COMMIT; step s1u: <... completed> -error in steps s2c s1u: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1c: COMMIT; starting permutation: s1i s2i s2u s2c s1u s1c @@ -81,7 +81,7 @@ step s1u: UPDATE parent SET aux = 'bar'; step s2u: UPDATE parent SET aux = 'baz'; step s1c: COMMIT; step s2u: <... completed> -error in steps s1c s2u: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; starting permutation: s2i s1i s2u s1u s2c s1c @@ -91,7 +91,7 @@ step s2u: UPDATE parent SET aux = 'baz'; step s1u: UPDATE parent SET aux = 'bar'; step s2c: COMMIT; step s1u: <... completed> -error in steps s2c s1u: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1c: COMMIT; starting permutation: s2i s1i s2u s2c s1u s1c @@ -110,7 +110,7 @@ step s1i: INSERT INTO child VALUES (1, 1); step s1u: UPDATE parent SET aux = 'bar'; step s2c: COMMIT; step s1u: <... completed> -error in steps s2c s1u: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1c: COMMIT; starting permutation: s2i s2u s1i s2c s1u s1c diff --git a/src/test/isolation/expected/fk-partitioned-1.out b/src/test/isolation/expected/fk-partitioned-1.out index aea2b6d56b446..45f2f8cba710d 100644 --- a/src/test/isolation/expected/fk-partitioned-1.out +++ b/src/test/isolation/expected/fk-partitioned-1.out @@ -25,7 +25,7 @@ step s2b: begin; step s2a: alter table pfk attach partition pfk1 for values in (1); step s1c: commit; step s2a: <... completed> -error in steps s1c s2a: ERROR: insert or update on table "pfk1" violates foreign key constraint "pfk_a_fkey" +ERROR: insert or update on table "pfk1" violates foreign key constraint "pfk_a_fkey" step s2c: commit; starting permutation: s1b s2b s1d s1c s2a s2c @@ -44,7 +44,7 @@ step s1d: delete from ppk1 where a = 1; step s2a: alter table pfk attach partition pfk1 for values in (1); step s1c: commit; step s2a: <... completed> -error in steps s1c s2a: ERROR: insert or update on table "pfk1" violates foreign key constraint "pfk_a_fkey" +ERROR: insert or update on table "pfk1" violates foreign key constraint "pfk_a_fkey" step s2c: commit; starting permutation: s1b s2b s2a s1d s2c s1c @@ -54,7 +54,7 @@ step s2a: alter table pfk attach partition pfk1 for values in (1); step s1d: delete from ppk1 where a = 1; step s2c: commit; step s1d: <... completed> -error in steps s2c s1d: ERROR: update or delete on table "ppk1" violates foreign key constraint "pfk_a_fkey1" on table "pfk" +ERROR: update or delete on table "ppk1" violates foreign key constraint "pfk_a_fkey1" on table "pfk" step s1c: commit; starting permutation: s1b s2b s2a s2c s1d s1c @@ -82,7 +82,7 @@ step s1d: delete from ppk1 where a = 1; step s2a: alter table pfk attach partition pfk1 for values in (1); step s1c: commit; step s2a: <... completed> -error in steps s1c s2a: ERROR: insert or update on table "pfk1" violates foreign key constraint "pfk_a_fkey" +ERROR: insert or update on table "pfk1" violates foreign key constraint "pfk_a_fkey" step s2c: commit; starting permutation: s2b s1b s2a s1d s2c s1c @@ -92,7 +92,7 @@ step s2a: alter table pfk attach partition pfk1 for values in (1); step s1d: delete from ppk1 where a = 1; step s2c: commit; step s1d: <... completed> -error in steps s2c s1d: ERROR: update or delete on table "ppk1" violates foreign key constraint "pfk_a_fkey1" on table "pfk" +ERROR: update or delete on table "ppk1" violates foreign key constraint "pfk_a_fkey1" on table "pfk" step s1c: commit; starting permutation: s2b s1b s2a s2c s1d s1c @@ -111,7 +111,7 @@ step s1b: begin; step s1d: delete from ppk1 where a = 1; step s2c: commit; step s1d: <... completed> -error in steps s2c s1d: ERROR: update or delete on table "ppk1" violates foreign key constraint "pfk_a_fkey1" on table "pfk" +ERROR: update or delete on table "ppk1" violates foreign key constraint "pfk_a_fkey1" on table "pfk" step s1c: commit; starting permutation: s2b s2a s1b s2c s1d s1c diff --git a/src/test/isolation/expected/fk-partitioned-2.out b/src/test/isolation/expected/fk-partitioned-2.out index 722b615c6ea38..278bec4fdfc3b 100644 --- a/src/test/isolation/expected/fk-partitioned-2.out +++ b/src/test/isolation/expected/fk-partitioned-2.out @@ -7,7 +7,7 @@ step s2b: begin; step s2i: insert into pfk values (1); step s1c: commit; step s2i: <... completed> -error in steps s1c s2i: ERROR: insert or update on table "pfk1" violates foreign key constraint "pfk_a_fkey" +ERROR: insert or update on table "pfk1" violates foreign key constraint "pfk_a_fkey" step s2c: commit; starting permutation: s1b s1d s2bs s2i s1c s2c @@ -20,7 +20,7 @@ step s2bs: begin isolation level serializable; select 1; step s2i: insert into pfk values (1); step s1c: commit; step s2i: <... completed> -error in steps s1c s2i: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: commit; starting permutation: s1b s2b s1d s2i s1c s2c @@ -30,7 +30,7 @@ step s1d: delete from ppk where a = 1; step s2i: insert into pfk values (1); step s1c: commit; step s2i: <... completed> -error in steps s1c s2i: ERROR: insert or update on table "pfk1" violates foreign key constraint "pfk_a_fkey" +ERROR: insert or update on table "pfk1" violates foreign key constraint "pfk_a_fkey" step s2c: commit; starting permutation: s1b s2bs s1d s2i s1c s2c @@ -43,7 +43,7 @@ step s1d: delete from ppk where a = 1; step s2i: insert into pfk values (1); step s1c: commit; step s2i: <... completed> -error in steps s1c s2i: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: commit; starting permutation: s1b s2b s2i s1d s2c s1c @@ -53,7 +53,7 @@ step s2i: insert into pfk values (1); step s1d: delete from ppk where a = 1; step s2c: commit; step s1d: <... completed> -error in steps s2c s1d: ERROR: update or delete on table "ppk1" violates foreign key constraint "pfk_a_fkey1" on table "pfk" +ERROR: update or delete on table "ppk1" violates foreign key constraint "pfk_a_fkey1" on table "pfk" step s1c: commit; starting permutation: s1b s2bs s2i s1d s2c s1c @@ -66,5 +66,5 @@ step s2i: insert into pfk values (1); step s1d: delete from ppk where a = 1; step s2c: commit; step s1d: <... completed> -error in steps s2c s1d: ERROR: update or delete on table "ppk1" violates foreign key constraint "pfk_a_fkey1" on table "pfk" +ERROR: update or delete on table "ppk1" violates foreign key constraint "pfk_a_fkey1" on table "pfk" step s1c: commit; diff --git a/src/test/isolation/expected/insert-conflict-do-nothing-2.out b/src/test/isolation/expected/insert-conflict-do-nothing-2.out index 2332f96978a95..c90002fd021c4 100644 --- a/src/test/isolation/expected/insert-conflict-do-nothing-2.out +++ b/src/test/isolation/expected/insert-conflict-do-nothing-2.out @@ -31,7 +31,7 @@ step donothing1: INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT step donothing2: INSERT INTO ints(key, val) VALUES(1, 'donothing2'), (1, 'donothing3') ON CONFLICT DO NOTHING; step c1: COMMIT; step donothing2: <... completed> -error in steps c1 donothing2: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step c2: COMMIT; step show: SELECT * FROM ints; key val @@ -45,7 +45,7 @@ step donothing2: INSERT INTO ints(key, val) VALUES(1, 'donothing2'), (1, 'donoth step donothing1: INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT DO NOTHING; step c2: COMMIT; step donothing1: <... completed> -error in steps c2 donothing1: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step c1: COMMIT; step show: SELECT * FROM ints; key val @@ -83,7 +83,7 @@ step donothing1: INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT step donothing2: INSERT INTO ints(key, val) VALUES(1, 'donothing2'), (1, 'donothing3') ON CONFLICT DO NOTHING; step c1: COMMIT; step donothing2: <... completed> -error in steps c1 donothing2: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step c2: COMMIT; step show: SELECT * FROM ints; key val @@ -97,7 +97,7 @@ step donothing2: INSERT INTO ints(key, val) VALUES(1, 'donothing2'), (1, 'donoth step donothing1: INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT DO NOTHING; step c2: COMMIT; step donothing1: <... completed> -error in steps c2 donothing1: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step c1: COMMIT; step show: SELECT * FROM ints; key val diff --git a/src/test/isolation/expected/insert-conflict-specconflict.out b/src/test/isolation/expected/insert-conflict-specconflict.out index ae361fbd03a44..8d319296ddf75 100644 --- a/src/test/isolation/expected/insert-conflict-specconflict.out +++ b/src/test/isolation/expected/insert-conflict-specconflict.out @@ -284,7 +284,7 @@ key data k1 inserted s1 with conflict update s2 -starting permutation: s1_create_non_unique_index s1_confirm_index_order controller_locks controller_show s2_begin s1_upsert s2_upsert controller_show controller_unlock_1_1 controller_unlock_2_1 controller_unlock_1_3 controller_unlock_2_3 controller_show controller_lock_2_4 controller_unlock_2_2 controller_show controller_unlock_1_2 controller_print_speculative_locks controller_unlock_2_4 controller_print_speculative_locks s2_commit controller_show controller_print_speculative_locks +starting permutation: s1_create_non_unique_index s1_confirm_index_order controller_locks controller_show s2_begin s1_upsert s2_upsert controller_show controller_unlock_1_1 controller_unlock_2_1 controller_unlock_1_3 controller_unlock_2_3 controller_show controller_lock_2_4 controller_unlock_2_2 controller_show controller_unlock_1_2 controller_print_speculative_locks controller_unlock_2_4 s2_noop controller_print_speculative_locks s2_commit s1_noop controller_show controller_print_speculative_locks step s1_create_non_unique_index: CREATE INDEX upserttest_key_idx ON upserttest((blurt_and_lock_4(key))); step s1_confirm_index_order: SELECT 'upserttest_key_uniq_idx'::regclass::int8 < 'upserttest_key_idx'::regclass::int8; ?column? @@ -380,6 +380,7 @@ t s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 s1: NOTICE: acquiring advisory lock on 2 step s2_upsert: <... completed> +step s2_noop: step controller_print_speculative_locks: SELECT pa.application_name, locktype, mode, granted FROM pg_locks pl JOIN pg_stat_activity pa USING (pid) @@ -398,6 +399,7 @@ step s2_commit: COMMIT; s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 s1: NOTICE: acquiring advisory lock on 2 step s1_upsert: <... completed> +step s1_noop: step controller_show: SELECT * FROM upserttest; key data diff --git a/src/test/isolation/expected/lock-committed-keyupdate.out b/src/test/isolation/expected/lock-committed-keyupdate.out index 69cdbfba0a7b7..2f13a19b9a899 100644 --- a/src/test/isolation/expected/lock-committed-keyupdate.out +++ b/src/test/isolation/expected/lock-committed-keyupdate.out @@ -192,7 +192,7 @@ pg_advisory_unlock t step s2l: <... completed> -error in steps s1ul s2l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all @@ -216,7 +216,7 @@ pg_advisory_unlock t step s2l: <... completed> -error in steps s1ul s2l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all @@ -240,7 +240,7 @@ t step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s2l: <... completed> -error in steps s1c s2l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all @@ -269,7 +269,7 @@ pg_advisory_unlock t step s2l: <... completed> -error in steps s1ul s2l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all @@ -298,7 +298,7 @@ pg_advisory_unlock t step s2l: <... completed> -error in steps s1ul s2l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all @@ -322,7 +322,7 @@ t step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s2l: <... completed> -error in steps s1c s2l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1hint: SELECT * FROM lcku_table; id value @@ -351,7 +351,7 @@ pg_advisory_unlock t step s2l: <... completed> -error in steps s1ul s2l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all @@ -375,7 +375,7 @@ pg_advisory_unlock t step s2l: <... completed> -error in steps s1ul s2l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all @@ -399,7 +399,7 @@ t step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s2l: <... completed> -error in steps s1c s2l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all @@ -428,7 +428,7 @@ pg_advisory_unlock t step s2l: <... completed> -error in steps s1ul s2l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all @@ -457,7 +457,7 @@ pg_advisory_unlock t step s2l: <... completed> -error in steps s1ul s2l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all @@ -481,7 +481,7 @@ t step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s2l: <... completed> -error in steps s1c s2l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1hint: SELECT * FROM lcku_table; id value diff --git a/src/test/isolation/expected/lock-update-delete_1.out b/src/test/isolation/expected/lock-update-delete_1.out index f1c1c7026f47a..77adde718d646 100644 --- a/src/test/isolation/expected/lock-update-delete_1.out +++ b/src/test/isolation/expected/lock-update-delete_1.out @@ -14,7 +14,7 @@ pg_advisory_unlock t step s2c: COMMIT; step s1l: <... completed> -error in steps s2c s1l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update starting permutation: s2b s1l s2u s2_blocker2 s2_unlock s2c pg_advisory_lock @@ -30,7 +30,7 @@ pg_advisory_unlock t step s2c: COMMIT; step s1l: <... completed> -error in steps s2c s1l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update starting permutation: s2b s1l s2u s2_blocker3 s2_unlock s2c pg_advisory_lock @@ -118,7 +118,7 @@ pg_advisory_unlock t step s1l: <... completed> -error in steps s2_unlock s1l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update starting permutation: s2b s1l s2u s2_blocker2 s2c s2_unlock pg_advisory_lock @@ -134,7 +134,7 @@ pg_advisory_unlock t step s1l: <... completed> -error in steps s2_unlock s1l: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update starting permutation: s2b s1l s2u s2_blocker3 s2c s2_unlock pg_advisory_lock diff --git a/src/test/isolation/expected/multiple-cic.out b/src/test/isolation/expected/multiple-cic.out index 2bf8fe365e1ff..e41e04a48044f 100644 --- a/src/test/isolation/expected/multiple-cic.out +++ b/src/test/isolation/expected/multiple-cic.out @@ -12,8 +12,9 @@ step s1i: step s2i: CREATE INDEX CONCURRENTLY mcic_two_pkey ON mcic_two (id) WHERE unlck(); - + step s1i: <... completed> +step s2i: <... completed> unlck t diff --git a/src/test/isolation/expected/multiple-cic_1.out b/src/test/isolation/expected/multiple-cic_1.out deleted file mode 100644 index e41e04a48044f..0000000000000 --- a/src/test/isolation/expected/multiple-cic_1.out +++ /dev/null @@ -1,20 +0,0 @@ -Parsed test spec with 2 sessions - -starting permutation: s2l s1i s2i -step s2l: SELECT pg_advisory_lock(281457); -pg_advisory_lock - - -step s1i: - CREATE INDEX CONCURRENTLY mcic_one_pkey ON mcic_one (id) - WHERE lck_shr(281457); - -step s2i: - CREATE INDEX CONCURRENTLY mcic_two_pkey ON mcic_two (id) - WHERE unlck(); - -step s1i: <... completed> -step s2i: <... completed> -unlck - -t diff --git a/src/test/isolation/expected/multixact-no-forget_1.out b/src/test/isolation/expected/multixact-no-forget_1.out index 1c37afef1a2cf..205a40099ce4a 100644 --- a/src/test/isolation/expected/multixact-no-forget_1.out +++ b/src/test/isolation/expected/multixact-no-forget_1.out @@ -83,7 +83,7 @@ step s1_commit: COMMIT; step s3_fornokeyupd: SELECT * FROM dont_forget FOR NO KEY UPDATE; step s2_commit: COMMIT; step s3_fornokeyupd: <... completed> -error in steps s2_commit s3_fornokeyupd: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update starting permutation: s1_lock s2_update s2_abort s3_forupd s1_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; @@ -123,4 +123,4 @@ step s1_commit: COMMIT; step s3_forupd: SELECT * FROM dont_forget FOR UPDATE; step s2_commit: COMMIT; step s3_forupd: <... completed> -error in steps s2_commit s3_forupd: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update diff --git a/src/test/isolation/expected/nowait-4.out b/src/test/isolation/expected/nowait-4.out index 26f59bef946b2..c1db66581b744 100644 --- a/src/test/isolation/expected/nowait-4.out +++ b/src/test/isolation/expected/nowait-4.out @@ -14,6 +14,6 @@ pg_advisory_unlock t step s1a: <... completed> -error in steps s2e s1a: ERROR: could not obtain lock on row in relation "foo" +ERROR: could not obtain lock on row in relation "foo" step s1b: COMMIT; step s2f: COMMIT; diff --git a/src/test/isolation/expected/nowait-4_1.out b/src/test/isolation/expected/nowait-4_1.out index 959d51baae32c..5fa6b3453acaf 100644 --- a/src/test/isolation/expected/nowait-4_1.out +++ b/src/test/isolation/expected/nowait-4_1.out @@ -14,6 +14,6 @@ pg_advisory_unlock t step s1a: <... completed> -error in steps s2e s1a: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1b: COMMIT; step s2f: COMMIT; diff --git a/src/test/isolation/expected/nowait-5.out b/src/test/isolation/expected/nowait-5.out index c88aae5ef60b0..2682ea1ab32cc 100644 --- a/src/test/isolation/expected/nowait-5.out +++ b/src/test/isolation/expected/nowait-5.out @@ -34,4 +34,4 @@ pg_advisory_unlock t step sl1_exec: <... completed> -error in steps upd_releaselock sl1_exec: ERROR: could not obtain lock on row in relation "test_nowait" +ERROR: could not obtain lock on row in relation "test_nowait" diff --git a/src/test/isolation/expected/partition-concurrent-attach.out b/src/test/isolation/expected/partition-concurrent-attach.out index 17fac39989823..4986ee25e8b7c 100644 --- a/src/test/isolation/expected/partition-concurrent-attach.out +++ b/src/test/isolation/expected/partition-concurrent-attach.out @@ -7,7 +7,7 @@ step s2b: begin; step s2i: insert into tpart values (110,'xxx'), (120, 'yyy'), (150, 'zzz'); step s1c: commit; step s2i: <... completed> -error in steps s1c s2i: ERROR: new row for relation "tpart_default" violates partition constraint +ERROR: new row for relation "tpart_default" violates partition constraint step s2c: commit; step s2s: select tableoid::regclass, * from tpart; tableoid i j @@ -23,7 +23,7 @@ step s2b: begin; step s2i2: insert into tpart_default (i, j) values (110, 'xxx'), (120, 'yyy'), (150, 'zzz'); step s1c: commit; step s2i2: <... completed> -error in steps s1c s2i2: ERROR: new row for relation "tpart_default" violates partition constraint +ERROR: new row for relation "tpart_default" violates partition constraint step s2c: commit; step s2s: select tableoid::regclass, * from tpart; tableoid i j @@ -39,7 +39,7 @@ step s2i: insert into tpart values (110,'xxx'), (120, 'yyy'), (150, 'zzz'); step s1a: alter table tpart attach partition tpart_2 for values from (100) to (200); step s2c: commit; step s1a: <... completed> -error in steps s2c s1a: ERROR: updated partition constraint for default partition "tpart_default_default" would be violated by some row +ERROR: updated partition constraint for default partition "tpart_default_default" would be violated by some row step s1c: commit; step s2s: select tableoid::regclass, * from tpart; tableoid i j diff --git a/src/test/isolation/expected/partition-key-update-1.out b/src/test/isolation/expected/partition-key-update-1.out index c1a9c56ae495e..7dee144f2ffb1 100644 --- a/src/test/isolation/expected/partition-key-update-1.out +++ b/src/test/isolation/expected/partition-key-update-1.out @@ -15,7 +15,7 @@ step s1u: UPDATE foo SET a=2 WHERE a=1; step s2d: DELETE FROM foo WHERE a=1; step s1c: COMMIT; step s2d: <... completed> -error in steps s1c s2d: ERROR: tuple to be locked was already moved to another partition due to concurrent update +ERROR: tuple to be locked was already moved to another partition due to concurrent update step s2c: COMMIT; starting permutation: s1b s2b s1u s2u s1c s2c @@ -25,7 +25,7 @@ step s1u: UPDATE foo SET a=2 WHERE a=1; step s2u: UPDATE foo SET b='EFG' WHERE a=1; step s1c: COMMIT; step s2u: <... completed> -error in steps s1c s2u: ERROR: tuple to be locked was already moved to another partition due to concurrent update +ERROR: tuple to be locked was already moved to another partition due to concurrent update step s2c: COMMIT; starting permutation: s1b s2b s2d s1u s2c s1c @@ -52,7 +52,7 @@ step s1u2: UPDATE footrg SET b='EFG' WHERE a=1; step s2u2: UPDATE footrg SET b='XYZ' WHERE a=1; step s1c: COMMIT; step s2u2: <... completed> -error in steps s1c s2u2: ERROR: tuple to be locked was already moved to another partition due to concurrent update +ERROR: tuple to be locked was already moved to another partition due to concurrent update step s2c: COMMIT; starting permutation: s1b s2b s2u2 s1u2 s2c s1c @@ -62,7 +62,7 @@ step s2u2: UPDATE footrg SET b='XYZ' WHERE a=1; step s1u2: UPDATE footrg SET b='EFG' WHERE a=1; step s2c: COMMIT; step s1u2: <... completed> -error in steps s2c s1u2: ERROR: tuple to be locked was already moved to another partition due to concurrent update +ERROR: tuple to be locked was already moved to another partition due to concurrent update step s1c: COMMIT; starting permutation: s1b s2b s1u3pc s2i s1c s2c @@ -72,7 +72,7 @@ step s1u3pc: UPDATE foo_range_parted SET a=11 WHERE a=7; step s2i: INSERT INTO bar VALUES(7); step s1c: COMMIT; step s2i: <... completed> -error in steps s1c s2i: ERROR: tuple to be locked was already moved to another partition due to concurrent update +ERROR: tuple to be locked was already moved to another partition due to concurrent update step s2c: COMMIT; starting permutation: s1b s2b s1u3pc s2i s1r s2c @@ -92,7 +92,7 @@ step s1u3pc: UPDATE foo_range_parted SET a=11 WHERE a=7; step s2i: INSERT INTO bar VALUES(7); step s1c: COMMIT; step s2i: <... completed> -error in steps s1c s2i: ERROR: tuple to be locked was already moved to another partition due to concurrent update +ERROR: tuple to be locked was already moved to another partition due to concurrent update step s2c: COMMIT; starting permutation: s1b s2b s1u3npc s1u3pc s2i s1r s2c @@ -114,7 +114,7 @@ step s1u3pc: UPDATE foo_range_parted SET a=11 WHERE a=7; step s2i: INSERT INTO bar VALUES(7); step s1c: COMMIT; step s2i: <... completed> -error in steps s1c s2i: ERROR: tuple to be locked was already moved to another partition due to concurrent update +ERROR: tuple to be locked was already moved to another partition due to concurrent update step s2c: COMMIT; starting permutation: s1b s2b s1u3npc s1u3pc s1u3pc s2i s1r s2c diff --git a/src/test/isolation/expected/partition-key-update-3.out b/src/test/isolation/expected/partition-key-update-3.out index 42dfe64ad31d1..a06af2d7196bd 100644 --- a/src/test/isolation/expected/partition-key-update-3.out +++ b/src/test/isolation/expected/partition-key-update-3.out @@ -23,7 +23,7 @@ step s1u: UPDATE foo SET a=2, b=b || ' -> moved by session-1' WHERE a=1; step s3donothing: INSERT INTO foo VALUES(2, 'session-3 donothing'), (2, 'session-3 donothing2') ON CONFLICT DO NOTHING; step s1c: COMMIT; step s3donothing: <... completed> -error in steps s1c s3donothing: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s3c: COMMIT; step s2donothing: INSERT INTO foo VALUES(1, 'session-2 donothing') ON CONFLICT DO NOTHING; step s2c: COMMIT; @@ -42,7 +42,7 @@ step s3donothing: INSERT INTO foo VALUES(2, 'session-3 donothing'), (2, 'session step s1c: COMMIT; step s2donothing: <... completed> step s3donothing: <... completed> -error in steps s1c s2donothing s3donothing: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; step s3c: COMMIT; step s2select: SELECT * FROM foo ORDER BY a; @@ -59,8 +59,8 @@ step s3donothing: INSERT INTO foo VALUES(2, 'session-3 donothing'), (2, 'session step s2donothing: INSERT INTO foo VALUES(1, 'session-2 donothing') ON CONFLICT DO NOTHING; step s1c: COMMIT; step s3donothing: <... completed> +ERROR: could not serialize access due to concurrent update step s2donothing: <... completed> -error in steps s1c s3donothing s2donothing: ERROR: could not serialize access due to concurrent update step s3c: COMMIT; step s2c: COMMIT; step s2select: SELECT * FROM foo ORDER BY a; @@ -92,7 +92,7 @@ step s1u: UPDATE foo SET a=2, b=b || ' -> moved by session-1' WHERE a=1; step s3donothing: INSERT INTO foo VALUES(2, 'session-3 donothing'), (2, 'session-3 donothing2') ON CONFLICT DO NOTHING; step s1c: COMMIT; step s3donothing: <... completed> -error in steps s1c s3donothing: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s3c: COMMIT; step s2donothing: INSERT INTO foo VALUES(1, 'session-2 donothing') ON CONFLICT DO NOTHING; step s2c: COMMIT; @@ -111,7 +111,7 @@ step s3donothing: INSERT INTO foo VALUES(2, 'session-3 donothing'), (2, 'session step s1c: COMMIT; step s2donothing: <... completed> step s3donothing: <... completed> -error in steps s1c s2donothing s3donothing: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s2c: COMMIT; step s3c: COMMIT; step s2select: SELECT * FROM foo ORDER BY a; @@ -128,8 +128,8 @@ step s3donothing: INSERT INTO foo VALUES(2, 'session-3 donothing'), (2, 'session step s2donothing: INSERT INTO foo VALUES(1, 'session-2 donothing') ON CONFLICT DO NOTHING; step s1c: COMMIT; step s3donothing: <... completed> +ERROR: could not serialize access due to concurrent update step s2donothing: <... completed> -error in steps s1c s3donothing s2donothing: ERROR: could not serialize access due to concurrent update step s3c: COMMIT; step s2c: COMMIT; step s2select: SELECT * FROM foo ORDER BY a; diff --git a/src/test/isolation/expected/propagate-lock-delete.out b/src/test/isolation/expected/propagate-lock-delete.out index b668b895f1a77..222b945fee2fb 100644 --- a/src/test/isolation/expected/propagate-lock-delete.out +++ b/src/test/isolation/expected/propagate-lock-delete.out @@ -11,7 +11,7 @@ step s3d: DELETE FROM parent; step s1c: COMMIT; step s2c: COMMIT; step s3d: <... completed> -error in steps s2c s3d: ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" +ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" step s3c: COMMIT; starting permutation: s1b s1l s2b s2l s3b s3u s3svu s3d s1c s2c s3c @@ -26,7 +26,7 @@ step s3d: DELETE FROM parent; step s1c: COMMIT; step s2c: COMMIT; step s3d: <... completed> -error in steps s2c s3d: ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" +ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" step s3c: COMMIT; starting permutation: s1b s1l s2b s2l s3b s3u2 s3d s1c s2c s3c @@ -40,7 +40,7 @@ step s3d: DELETE FROM parent; step s1c: COMMIT; step s2c: COMMIT; step s3d: <... completed> -error in steps s2c s3d: ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" +ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" step s3c: COMMIT; starting permutation: s1b s1l s2b s2l s3b s3u2 s3svu s3d s1c s2c s3c @@ -55,7 +55,7 @@ step s3d: DELETE FROM parent; step s1c: COMMIT; step s2c: COMMIT; step s3d: <... completed> -error in steps s2c s3d: ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" +ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" step s3c: COMMIT; starting permutation: s1b s1l s3b s3u s3d s1c s3c @@ -66,7 +66,7 @@ step s3u: UPDATE parent SET c=lower(c); step s3d: DELETE FROM parent; step s1c: COMMIT; step s3d: <... completed> -error in steps s1c s3d: ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" +ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" step s3c: COMMIT; starting permutation: s1b s1l s3b s3u s3svu s3d s1c s3c @@ -78,7 +78,7 @@ step s3svu: SAVEPOINT f; UPDATE parent SET c = 'bbb'; ROLLBACK TO f; step s3d: DELETE FROM parent; step s1c: COMMIT; step s3d: <... completed> -error in steps s1c s3d: ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" +ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" step s3c: COMMIT; starting permutation: s1b s1l s3b s3u2 s3d s1c s3c @@ -89,7 +89,7 @@ step s3u2: UPDATE parent SET i = i; step s3d: DELETE FROM parent; step s1c: COMMIT; step s3d: <... completed> -error in steps s1c s3d: ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" +ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" step s3c: COMMIT; starting permutation: s1b s1l s3b s3u2 s3svu s3d s1c s3c @@ -101,5 +101,5 @@ step s3svu: SAVEPOINT f; UPDATE parent SET c = 'bbb'; ROLLBACK TO f; step s3d: DELETE FROM parent; step s1c: COMMIT; step s3d: <... completed> -error in steps s1c s3d: ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" +ERROR: update or delete on table "parent" violates foreign key constraint "child_i_fkey" on table "child" step s3c: COMMIT; diff --git a/src/test/isolation/expected/read-write-unique-2.out b/src/test/isolation/expected/read-write-unique-2.out index 5e27f0adfd2a1..a36ae3a97c46e 100644 --- a/src/test/isolation/expected/read-write-unique-2.out +++ b/src/test/isolation/expected/read-write-unique-2.out @@ -11,7 +11,7 @@ step w1: INSERT INTO test VALUES (42); step w2: INSERT INTO test VALUES (42); step c1: COMMIT; step w2: <... completed> -error in steps c1 w2: ERROR: could not serialize access due to read/write dependencies among transactions +ERROR: could not serialize access due to read/write dependencies among transactions step c2: COMMIT; starting permutation: r1 w1 c1 r2 w2 c2 diff --git a/src/test/isolation/expected/read-write-unique-3.out b/src/test/isolation/expected/read-write-unique-3.out index edd3558930c78..5b308de981e55 100644 --- a/src/test/isolation/expected/read-write-unique-3.out +++ b/src/test/isolation/expected/read-write-unique-3.out @@ -8,5 +8,5 @@ insert_unique step rw2: SELECT insert_unique(1, '2'); step c1: COMMIT; step rw2: <... completed> -error in steps c1 rw2: ERROR: could not serialize access due to read/write dependencies among transactions +ERROR: could not serialize access due to read/write dependencies among transactions step c2: COMMIT; diff --git a/src/test/isolation/expected/read-write-unique-4.out b/src/test/isolation/expected/read-write-unique-4.out index 64ff157513009..5f36837702f2e 100644 --- a/src/test/isolation/expected/read-write-unique-4.out +++ b/src/test/isolation/expected/read-write-unique-4.out @@ -13,7 +13,7 @@ step w1: INSERT INTO invoice VALUES (2016, 3); step w2: INSERT INTO invoice VALUES (2016, 3); step c1: COMMIT; step w2: <... completed> -error in steps c1 w2: ERROR: could not serialize access due to read/write dependencies among transactions +ERROR: could not serialize access due to read/write dependencies among transactions step c2: COMMIT; starting permutation: r1 w1 w2 c1 c2 @@ -25,7 +25,7 @@ step w1: INSERT INTO invoice VALUES (2016, 3); step w2: INSERT INTO invoice VALUES (2016, 3); step c1: COMMIT; step w2: <... completed> -error in steps c1 w2: ERROR: duplicate key value violates unique constraint "invoice_pkey" +ERROR: duplicate key value violates unique constraint "invoice_pkey" step c2: COMMIT; starting permutation: r2 w1 w2 c1 c2 @@ -37,5 +37,5 @@ step w1: INSERT INTO invoice VALUES (2016, 3); step w2: INSERT INTO invoice VALUES (2016, 3); step c1: COMMIT; step w2: <... completed> -error in steps c1 w2: ERROR: duplicate key value violates unique constraint "invoice_pkey" +ERROR: duplicate key value violates unique constraint "invoice_pkey" step c2: COMMIT; diff --git a/src/test/isolation/expected/read-write-unique.out b/src/test/isolation/expected/read-write-unique.out index fb32ec32615a2..b438674230dbc 100644 --- a/src/test/isolation/expected/read-write-unique.out +++ b/src/test/isolation/expected/read-write-unique.out @@ -11,7 +11,7 @@ step w1: INSERT INTO test VALUES (42); step w2: INSERT INTO test VALUES (42); step c1: COMMIT; step w2: <... completed> -error in steps c1 w2: ERROR: could not serialize access due to read/write dependencies among transactions +ERROR: could not serialize access due to read/write dependencies among transactions step c2: COMMIT; starting permutation: r1 w1 c1 r2 w2 c2 diff --git a/src/test/isolation/expected/sequence-ddl.out b/src/test/isolation/expected/sequence-ddl.out index 6766c0aff61f0..5cf08d7f3c808 100644 --- a/src/test/isolation/expected/sequence-ddl.out +++ b/src/test/isolation/expected/sequence-ddl.out @@ -11,7 +11,7 @@ step s1alter: ALTER SEQUENCE seq1 MAXVALUE 10; step s2nv: SELECT nextval('seq1') FROM generate_series(1, 15); step s1commit: COMMIT; step s2nv: <... completed> -error in steps s1commit s2nv: ERROR: nextval: reached maximum value of sequence "seq1" (10) +ERROR: nextval: reached maximum value of sequence "seq1" (10) starting permutation: s1restart s2nv s1commit step s1restart: ALTER SEQUENCE seq1 RESTART WITH 5; diff --git a/src/test/isolation/expected/skip-locked-4_1.out b/src/test/isolation/expected/skip-locked-4_1.out index 552429ae89159..e7ea5d7a8d863 100644 --- a/src/test/isolation/expected/skip-locked-4_1.out +++ b/src/test/isolation/expected/skip-locked-4_1.out @@ -14,6 +14,6 @@ pg_advisory_unlock t step s1a: <... completed> -error in steps s2e s1a: ERROR: could not serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update step s1b: COMMIT; step s2f: COMMIT; diff --git a/src/test/isolation/expected/timeouts.out b/src/test/isolation/expected/timeouts.out index ff646279ecb7e..d9ecdc95325c8 100644 --- a/src/test/isolation/expected/timeouts.out +++ b/src/test/isolation/expected/timeouts.out @@ -6,7 +6,7 @@ accountid balance checking 600 savings 600 -step sto: SET statement_timeout = 5000; +step sto: SET statement_timeout = '10ms'; step locktbl: LOCK TABLE accounts; step locktbl: <... completed> ERROR: canceling statement due to statement timeout @@ -17,7 +17,7 @@ accountid balance checking 600 savings 600 -step lto: SET lock_timeout = 5000; +step lto: SET lock_timeout = '10ms'; step locktbl: LOCK TABLE accounts; step locktbl: <... completed> ERROR: canceling statement due to lock timeout @@ -28,7 +28,7 @@ accountid balance checking 600 savings 600 -step lsto: SET lock_timeout = 5000; SET statement_timeout = 6000; +step lsto: SET lock_timeout = '10ms'; SET statement_timeout = '10s'; step locktbl: LOCK TABLE accounts; step locktbl: <... completed> ERROR: canceling statement due to lock timeout @@ -39,35 +39,35 @@ accountid balance checking 600 savings 600 -step slto: SET lock_timeout = 6000; SET statement_timeout = 5000; +step slto: SET lock_timeout = '10s'; SET statement_timeout = '10ms'; step locktbl: LOCK TABLE accounts; step locktbl: <... completed> ERROR: canceling statement due to statement timeout starting permutation: wrtbl sto update step wrtbl: UPDATE accounts SET balance = balance + 100; -step sto: SET statement_timeout = 5000; +step sto: SET statement_timeout = '10ms'; step update: DELETE FROM accounts WHERE accountid = 'checking'; step update: <... completed> ERROR: canceling statement due to statement timeout starting permutation: wrtbl lto update step wrtbl: UPDATE accounts SET balance = balance + 100; -step lto: SET lock_timeout = 5000; +step lto: SET lock_timeout = '10ms'; step update: DELETE FROM accounts WHERE accountid = 'checking'; step update: <... completed> ERROR: canceling statement due to lock timeout starting permutation: wrtbl lsto update step wrtbl: UPDATE accounts SET balance = balance + 100; -step lsto: SET lock_timeout = 5000; SET statement_timeout = 6000; +step lsto: SET lock_timeout = '10ms'; SET statement_timeout = '10s'; step update: DELETE FROM accounts WHERE accountid = 'checking'; step update: <... completed> ERROR: canceling statement due to lock timeout starting permutation: wrtbl slto update step wrtbl: UPDATE accounts SET balance = balance + 100; -step slto: SET lock_timeout = 6000; SET statement_timeout = 5000; +step slto: SET lock_timeout = '10s'; SET statement_timeout = '10ms'; step update: DELETE FROM accounts WHERE accountid = 'checking'; step update: <... completed> ERROR: canceling statement due to statement timeout diff --git a/src/test/isolation/expected/tuplelock-update.out b/src/test/isolation/expected/tuplelock-update.out index ea63022e93467..7bd7bbf30a8b3 100644 --- a/src/test/isolation/expected/tuplelock-update.out +++ b/src/test/isolation/expected/tuplelock-update.out @@ -18,19 +18,22 @@ step s1_grablock: SELECT * FROM pktab FOR KEY SHARE; id data 1 2 -step s1_advunlock1: SELECT pg_advisory_unlock(142857); +step s1_advunlock1: SELECT pg_advisory_unlock(142857); +step s2_update: <... completed> +step s1_advunlock1: <... completed> pg_advisory_unlock t -step s2_update: <... completed> -step s1_advunlock2: SELECT pg_sleep(5), pg_advisory_unlock(285714); -pg_sleep pg_advisory_unlock - - t +step s1_advunlock2: SELECT pg_advisory_unlock(285714); step s3_update: <... completed> -step s1_advunlock3: SELECT pg_sleep(5), pg_advisory_unlock(571428); -pg_sleep pg_advisory_unlock +step s1_advunlock2: <... completed> +pg_advisory_unlock - t +t +step s1_advunlock3: SELECT pg_advisory_unlock(571428); step s4_update: <... completed> +step s1_advunlock3: <... completed> +pg_advisory_unlock + +t step s1_commit: COMMIT; diff --git a/src/test/isolation/isolationtester.c b/src/test/isolation/isolationtester.c index 0a73d38daeb39..71546bf923857 100644 --- a/src/test/isolation/isolationtester.c +++ b/src/test/isolation/isolationtester.c @@ -22,32 +22,55 @@ /* * conns[0] is the global setup, teardown, and watchdog connection. Additional - * connections represent spec-defined sessions. We also track the backend - * PID, in numeric and string formats, for each connection. + * connections represent spec-defined sessions. */ -static PGconn **conns = NULL; -static int *backend_pids = NULL; -static const char **backend_pid_strs = NULL; +typedef struct IsoConnInfo +{ + /* The libpq connection object for this connection. */ + PGconn *conn; + /* The backend PID, in numeric and string formats. */ + int backend_pid; + const char *backend_pid_str; + /* Name of the associated session. */ + const char *sessionname; + /* Active step on this connection, or NULL if idle. */ + PermutationStep *active_step; + /* Number of NOTICE messages received from connection. */ + int total_notices; +} IsoConnInfo; + +static IsoConnInfo *conns = NULL; static int nconns = 0; +/* Flag indicating some new NOTICE has arrived */ +static bool any_new_notice = false; + /* Maximum time to wait before giving up on a step (in usec) */ static int64 max_step_wait = 300 * USECS_PER_SEC; +static void check_testspec(TestSpec *testspec); static void run_testspec(TestSpec *testspec); static void run_all_permutations(TestSpec *testspec); static void run_all_permutations_recurse(TestSpec *testspec, int nsteps, - Step **steps); + PermutationStep **steps); static void run_named_permutations(TestSpec *testspec); -static void run_permutation(TestSpec *testspec, int nsteps, Step **steps); +static void run_permutation(TestSpec *testspec, int nsteps, + PermutationStep **steps); -#define STEP_NONBLOCK 0x1 /* return 0 as soon as cmd waits for a lock */ +/* Flag bits for try_complete_step(s) */ +#define STEP_NONBLOCK 0x1 /* return as soon as cmd waits for a lock */ #define STEP_RETRY 0x2 /* this is a retry of a previously-waiting cmd */ -static bool try_complete_step(TestSpec *testspec, Step *step, int flags); + +static int try_complete_steps(TestSpec *testspec, PermutationStep **waiting, + int nwaiting, int flags); +static bool try_complete_step(TestSpec *testspec, PermutationStep *pstep, + int flags); static int step_qsort_cmp(const void *a, const void *b); static int step_bsearch_cmp(const void *a, const void *b); +static bool step_has_blocker(PermutationStep *pstep); static void printResultSet(PGresult *res); static void isotesterNoticeProcessor(void *arg, const char *message); static void blackholeNoticeProcessor(void *arg, const char *message); @@ -58,8 +81,8 @@ disconnect_atexit(void) int i; for (i = 0; i < nconns; i++) - if (conns[i]) - PQfinish(conns[i]); + if (conns[i].conn) + PQfinish(conns[i].conn); } int @@ -68,14 +91,10 @@ main(int argc, char **argv) const char *conninfo; const char *env_wait; TestSpec *testspec; - int i, - j; - int n; PGresult *res; PQExpBufferData wait_query; int opt; - int nallsteps; - Step **allsteps; + int i; while ((opt = getopt(argc, argv, "V")) != -1) { @@ -120,35 +139,8 @@ main(int argc, char **argv) spec_yyparse(); testspec = &parseresult; - /* Create a lookup table of all steps. */ - nallsteps = 0; - for (i = 0; i < testspec->nsessions; i++) - nallsteps += testspec->sessions[i]->nsteps; - - allsteps = pg_malloc(nallsteps * sizeof(Step *)); - - n = 0; - for (i = 0; i < testspec->nsessions; i++) - { - for (j = 0; j < testspec->sessions[i]->nsteps; j++) - allsteps[n++] = testspec->sessions[i]->steps[j]; - } - - qsort(allsteps, nallsteps, sizeof(Step *), &step_qsort_cmp); - testspec->nallsteps = nallsteps; - testspec->allsteps = allsteps; - - /* Verify that all step names are unique */ - for (i = 1; i < testspec->nallsteps; i++) - { - if (strcmp(testspec->allsteps[i - 1]->name, - testspec->allsteps[i]->name) == 0) - { - fprintf(stderr, "duplicate step name: %s\n", - testspec->allsteps[i]->name); - exit(1); - } - } + /* Perform post-parse checking, and fill in linking fields */ + check_testspec(testspec); printf("Parsed test spec with %d sessions\n", testspec->nsessions); @@ -157,18 +149,21 @@ main(int argc, char **argv) * extra for lock wait detection and global work. */ nconns = 1 + testspec->nsessions; - conns = (PGconn **) pg_malloc0(nconns * sizeof(PGconn *)); - backend_pids = pg_malloc0(nconns * sizeof(*backend_pids)); - backend_pid_strs = pg_malloc0(nconns * sizeof(*backend_pid_strs)); + conns = (IsoConnInfo *) pg_malloc0(nconns * sizeof(IsoConnInfo)); atexit(disconnect_atexit); for (i = 0; i < nconns; i++) { - conns[i] = PQconnectdb(conninfo); - if (PQstatus(conns[i]) != CONNECTION_OK) + if (i == 0) + conns[i].sessionname = "control connection"; + else + conns[i].sessionname = testspec->sessions[i - 1]->name; + + conns[i].conn = PQconnectdb(conninfo); + if (PQstatus(conns[i].conn) != CONNECTION_OK) { fprintf(stderr, "Connection %d failed: %s", - i, PQerrorMessage(conns[i])); + i, PQerrorMessage(conns[i].conn)); exit(1); } @@ -179,27 +174,17 @@ main(int argc, char **argv) * messages). */ if (i != 0) - PQsetNoticeProcessor(conns[i], + PQsetNoticeProcessor(conns[i].conn, isotesterNoticeProcessor, - (void *) (testspec->sessions[i - 1]->name)); + (void *) &conns[i]); else - PQsetNoticeProcessor(conns[i], + PQsetNoticeProcessor(conns[i].conn, blackholeNoticeProcessor, NULL); /* Save each connection's backend PID for subsequent use. */ - backend_pids[i] = PQbackendPID(conns[i]); - backend_pid_strs[i] = psprintf("%d", backend_pids[i]); - } - - /* Set the session index fields in steps. */ - for (i = 0; i < testspec->nsessions; i++) - { - Session *session = testspec->sessions[i]; - int stepindex; - - for (stepindex = 0; stepindex < session->nsteps; stepindex++) - session->steps[stepindex]->session = i; + conns[i].backend_pid = PQbackendPID(conns[i].conn); + conns[i].backend_pid_str = psprintf("%d", conns[i].backend_pid); } /* @@ -214,16 +199,16 @@ main(int argc, char **argv) appendPQExpBufferStr(&wait_query, "SELECT pg_catalog.pg_isolation_test_session_is_blocked($1, '{"); /* The spec syntax requires at least one session; assume that here. */ - appendPQExpBufferStr(&wait_query, backend_pid_strs[1]); + appendPQExpBufferStr(&wait_query, conns[1].backend_pid_str); for (i = 2; i < nconns; i++) - appendPQExpBuffer(&wait_query, ",%s", backend_pid_strs[i]); + appendPQExpBuffer(&wait_query, ",%s", conns[i].backend_pid_str); appendPQExpBufferStr(&wait_query, "}')"); - res = PQprepare(conns[0], PREP_WAITING, wait_query.data, 0, NULL); + res = PQprepare(conns[0].conn, PREP_WAITING, wait_query.data, 0, NULL); if (PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "prepare of lock wait query failed: %s", - PQerrorMessage(conns[0])); + PQerrorMessage(conns[0].conn)); exit(1); } PQclear(res); @@ -238,6 +223,145 @@ main(int argc, char **argv) return 0; } +/* + * Validity-check the test spec and fill in cross-links between nodes. + */ +static void +check_testspec(TestSpec *testspec) +{ + int nallsteps; + Step **allsteps; + int i, + j, + k; + + /* Create a sorted lookup table of all steps. */ + nallsteps = 0; + for (i = 0; i < testspec->nsessions; i++) + nallsteps += testspec->sessions[i]->nsteps; + + allsteps = pg_malloc(nallsteps * sizeof(Step *)); + + k = 0; + for (i = 0; i < testspec->nsessions; i++) + { + for (j = 0; j < testspec->sessions[i]->nsteps; j++) + allsteps[k++] = testspec->sessions[i]->steps[j]; + } + + qsort(allsteps, nallsteps, sizeof(Step *), step_qsort_cmp); + + /* Verify that all step names are unique. */ + for (i = 1; i < nallsteps; i++) + { + if (strcmp(allsteps[i - 1]->name, + allsteps[i]->name) == 0) + { + fprintf(stderr, "duplicate step name: %s\n", + allsteps[i]->name); + exit(1); + } + } + + /* Set the session index fields in steps. */ + for (i = 0; i < testspec->nsessions; i++) + { + Session *session = testspec->sessions[i]; + + for (j = 0; j < session->nsteps; j++) + session->steps[j]->session = i; + } + + /* + * If we have manually-specified permutations, link PermutationSteps to + * Steps, and fill in blocker links. + */ + for (i = 0; i < testspec->npermutations; i++) + { + Permutation *p = testspec->permutations[i]; + + for (j = 0; j < p->nsteps; j++) + { + PermutationStep *pstep = p->steps[j]; + Step **this = (Step **) bsearch(pstep->name, + allsteps, + nallsteps, + sizeof(Step *), + step_bsearch_cmp); + + if (this == NULL) + { + fprintf(stderr, "undefined step \"%s\" specified in permutation\n", + pstep->name); + exit(1); + } + pstep->step = *this; + + /* Mark the step used, for check below */ + pstep->step->used = true; + } + + /* + * Identify any blocker steps. We search only the current + * permutation, since steps not used there couldn't be concurrent. + * Note that it's OK to reference later permutation steps, so this + * can't be combined with the previous loop. + */ + for (j = 0; j < p->nsteps; j++) + { + PermutationStep *pstep = p->steps[j]; + + for (k = 0; k < pstep->nblockers; k++) + { + PermutationStepBlocker *blocker = pstep->blockers[k]; + int n; + + if (blocker->blocktype == PSB_ONCE) + continue; /* nothing to link to */ + + blocker->step = NULL; + for (n = 0; n < p->nsteps; n++) + { + PermutationStep *otherp = p->steps[n]; + + if (strcmp(otherp->name, blocker->stepname) == 0) + { + blocker->step = otherp->step; + break; + } + } + if (blocker->step == NULL) + { + fprintf(stderr, "undefined blocking step \"%s\" referenced in permutation step \"%s\"\n", + blocker->stepname, pstep->name); + exit(1); + } + /* can't block on completion of step of own session */ + if (blocker->step->session == pstep->step->session) + { + fprintf(stderr, "permutation step \"%s\" cannot block on its own session\n", + pstep->name); + exit(1); + } + } + } + } + + /* + * If we have manually-specified permutations, verify that all steps have + * been used, warning about anything defined but not used. We can skip + * this when using automatically-generated permutations. + */ + if (testspec->permutations) + { + for (i = 0; i < nallsteps; i++) + { + if (!allsteps[i]->used) + fprintf(stderr, "unused step name: %s\n", allsteps[i]->name); + } + } +} + static int *piles; /* @@ -247,23 +371,10 @@ static int *piles; static void run_testspec(TestSpec *testspec) { - int i; - if (testspec->permutations) run_named_permutations(testspec); else run_all_permutations(testspec); - - /* - * Verify that all steps have been used, complaining about anything - * defined but not used. - */ - for (i = 0; i < testspec->nallsteps; i++) - { - if (!testspec->allsteps[i]->used) - fprintf(stderr, "unused step name: %s\n", - testspec->allsteps[i]->name); - } } /* @@ -274,14 +385,19 @@ run_all_permutations(TestSpec *testspec) { int nsteps; int i; - Step **steps; + PermutationStep *steps; + PermutationStep **stepptrs; /* Count the total number of steps in all sessions */ nsteps = 0; for (i = 0; i < testspec->nsessions; i++) nsteps += testspec->sessions[i]->nsteps; - steps = pg_malloc(sizeof(Step *) * nsteps); + /* Create PermutationStep workspace array */ + steps = (PermutationStep *) pg_malloc0(sizeof(PermutationStep) * nsteps); + stepptrs = (PermutationStep **) pg_malloc(sizeof(PermutationStep *) * nsteps); + for (i = 0; i < nsteps; i++) + stepptrs[i] = steps + i; /* * To generate the permutations, we conceptually put the steps of each @@ -296,28 +412,37 @@ run_all_permutations(TestSpec *testspec) for (i = 0; i < testspec->nsessions; i++) piles[i] = 0; - run_all_permutations_recurse(testspec, 0, steps); + run_all_permutations_recurse(testspec, 0, stepptrs); } static void -run_all_permutations_recurse(TestSpec *testspec, int nsteps, Step **steps) +run_all_permutations_recurse(TestSpec *testspec, int nsteps, PermutationStep **steps) { int i; - int found = 0; + bool found = false; for (i = 0; i < testspec->nsessions; i++) { /* If there's any more steps in this pile, pick it and recurse */ if (piles[i] < testspec->sessions[i]->nsteps) { - steps[nsteps] = testspec->sessions[i]->steps[piles[i]]; + Step *newstep = testspec->sessions[i]->steps[piles[i]]; + + /* + * These automatically-generated PermutationSteps never have + * blocker conditions. So we need only fill these fields, relying + * on run_all_permutations() to have zeroed the rest: + */ + steps[nsteps]->name = newstep->name; + steps[nsteps]->step = newstep; + piles[i]++; run_all_permutations_recurse(testspec, nsteps + 1, steps); piles[i]--; - found = 1; + found = true; } } @@ -332,38 +457,13 @@ run_all_permutations_recurse(TestSpec *testspec, int nsteps, Step **steps) static void run_named_permutations(TestSpec *testspec) { - int i, - j; + int i; for (i = 0; i < testspec->npermutations; i++) { Permutation *p = testspec->permutations[i]; - Step **steps; - - steps = pg_malloc(p->nsteps * sizeof(Step *)); - - /* Find all the named steps using the lookup table */ - for (j = 0; j < p->nsteps; j++) - { - Step **this = (Step **) bsearch(p->stepnames[j], - testspec->allsteps, - testspec->nallsteps, - sizeof(Step *), - &step_bsearch_cmp); - - if (this == NULL) - { - fprintf(stderr, "undefined step \"%s\" specified in permutation\n", - p->stepnames[j]); - exit(1); - } - steps[j] = *this; - } - - /* And run them */ - run_permutation(testspec, p->nsteps, steps); - free(steps); + run_permutation(testspec, p->nsteps, p->steps); } } @@ -385,102 +485,35 @@ step_bsearch_cmp(const void *a, const void *b) return strcmp(stepname, step->name); } -/* - * If a step caused an error to be reported, print it out and clear it. - */ -static void -report_error_message(Step *step) -{ - if (step->errormsg) - { - fprintf(stdout, "%s\n", step->errormsg); - free(step->errormsg); - step->errormsg = NULL; - } -} - -/* - * As above, but reports messages possibly emitted by multiple steps. This is - * useful when we have a blocked command awakened by another one; we want to - * report all messages identically, for the case where we don't care which - * one fails due to a timeout such as deadlock timeout. - */ -static void -report_multiple_error_messages(Step *step, int nextra, Step **extrastep) -{ - PQExpBufferData buffer; - int n; - - if (nextra == 0) - { - report_error_message(step); - return; - } - - initPQExpBuffer(&buffer); - appendPQExpBufferStr(&buffer, step->name); - - for (n = 0; n < nextra; ++n) - appendPQExpBuffer(&buffer, " %s", extrastep[n]->name); - - if (step->errormsg) - { - fprintf(stdout, "error in steps %s: %s\n", buffer.data, - step->errormsg); - free(step->errormsg); - step->errormsg = NULL; - } - - for (n = 0; n < nextra; ++n) - { - if (extrastep[n]->errormsg == NULL) - continue; - fprintf(stdout, "error in steps %s: %s\n", - buffer.data, extrastep[n]->errormsg); - free(extrastep[n]->errormsg); - extrastep[n]->errormsg = NULL; - } - - termPQExpBuffer(&buffer); -} - /* * Run one permutation */ static void -run_permutation(TestSpec *testspec, int nsteps, Step **steps) +run_permutation(TestSpec *testspec, int nsteps, PermutationStep **steps) { PGresult *res; int i; - int w; int nwaiting = 0; - int nerrorstep = 0; - Step **waiting; - Step **errorstep; + PermutationStep **waiting; - waiting = pg_malloc(sizeof(Step *) * testspec->nsessions); - errorstep = pg_malloc(sizeof(Step *) * testspec->nsessions); + waiting = pg_malloc(sizeof(PermutationStep *) * testspec->nsessions); printf("\nstarting permutation:"); for (i = 0; i < nsteps; i++) - { - /* Track the permutation as in-use */ - steps[i]->used = true; printf(" %s", steps[i]->name); - } printf("\n"); /* Perform setup */ for (i = 0; i < testspec->nsetupsqls; i++) { - res = PQexec(conns[0], testspec->setupsqls[i]); + res = PQexec(conns[0].conn, testspec->setupsqls[i]); if (PQresultStatus(res) == PGRES_TUPLES_OK) { printResultSet(res); } else if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "setup failed: %s", PQerrorMessage(conns[0])); + fprintf(stderr, "setup failed: %s", PQerrorMessage(conns[0].conn)); exit(1); } PQclear(res); @@ -491,7 +524,7 @@ run_permutation(TestSpec *testspec, int nsteps, Step **steps) { if (testspec->sessions[i]->setupsql) { - res = PQexec(conns[i + 1], testspec->sessions[i]->setupsql); + res = PQexec(conns[i + 1].conn, testspec->sessions[i]->setupsql); if (PQresultStatus(res) == PGRES_TUPLES_OK) { printResultSet(res); @@ -499,8 +532,8 @@ run_permutation(TestSpec *testspec, int nsteps, Step **steps) else if (PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "setup of session %s failed: %s", - testspec->sessions[i]->name, - PQerrorMessage(conns[i + 1])); + conns[i + 1].sessionname, + PQerrorMessage(conns[i + 1].conn)); exit(1); } PQclear(res); @@ -510,73 +543,96 @@ run_permutation(TestSpec *testspec, int nsteps, Step **steps) /* Perform steps */ for (i = 0; i < nsteps; i++) { - Step *step = steps[i]; - PGconn *conn = conns[1 + step->session]; - Step *oldstep = NULL; + PermutationStep *pstep = steps[i]; + Step *step = pstep->step; + IsoConnInfo *iconn = &conns[1 + step->session]; + PGconn *conn = iconn->conn; bool mustwait; + int j; /* * Check whether the session that needs to perform the next step is * still blocked on an earlier step. If so, wait for it to finish. - * - * (In older versions of this tool, we allowed precisely one session - * to be waiting at a time. If we reached a step that required that - * session to execute the next command, we would declare the whole - * permutation invalid, cancel everything, and move on to the next - * one. Unfortunately, that made it impossible to test the deadlock - * detector using this framework, unless the number of processes - * involved in the deadlock was precisely two. We now assume that if - * we reach a step that is still blocked, we need to wait for it to - * unblock itself.) */ - for (w = 0; w < nwaiting; ++w) + if (iconn->active_step != NULL) { - if (step->session == waiting[w]->session) - { - oldstep = waiting[w]; + struct timeval start_time; - /* Wait for previous step on this connection. */ - try_complete_step(testspec, oldstep, STEP_RETRY); - - /* Remove that step from the waiting[] array. */ - if (w + 1 < nwaiting) - memmove(&waiting[w], &waiting[w + 1], - (nwaiting - (w + 1)) * sizeof(Step *)); - nwaiting--; + gettimeofday(&start_time, NULL); - break; - } - } - if (oldstep != NULL) - { - /* - * Check for completion of any steps that were previously waiting. - * Remove any that have completed from waiting[], and include them - * in the list for report_multiple_error_messages(). - */ - w = 0; - nerrorstep = 0; - while (w < nwaiting) + while (iconn->active_step != NULL) { - if (try_complete_step(testspec, waiting[w], - STEP_NONBLOCK | STEP_RETRY)) - { - /* Still blocked on a lock, leave it alone. */ - w++; - } - else + PermutationStep *oldstep = iconn->active_step; + + /* + * Wait for oldstep. But even though we don't use + * STEP_NONBLOCK, it might not complete because of blocker + * conditions. + */ + if (!try_complete_step(testspec, oldstep, STEP_RETRY)) { - /* This one finished, too! */ - errorstep[nerrorstep++] = waiting[w]; + /* Done, so remove oldstep from the waiting[] array. */ + int w; + + for (w = 0; w < nwaiting; w++) + { + if (oldstep == waiting[w]) + break; + } + if (w >= nwaiting) + abort(); /* can't happen */ if (w + 1 < nwaiting) memmove(&waiting[w], &waiting[w + 1], - (nwaiting - (w + 1)) * sizeof(Step *)); + (nwaiting - (w + 1)) * sizeof(PermutationStep *)); nwaiting--; } - } - /* Report all errors together. */ - report_multiple_error_messages(oldstep, nerrorstep, errorstep); + /* + * Check for other steps that have finished. We should do + * this if oldstep completed, as it might have unblocked + * something. On the other hand, if oldstep hasn't completed, + * we must poll all the active steps in hopes of unblocking + * oldstep. So either way, poll them. + */ + nwaiting = try_complete_steps(testspec, waiting, nwaiting, + STEP_NONBLOCK | STEP_RETRY); + + /* + * If the target session is still busy, apply a timeout to + * keep from hanging indefinitely, which could happen with + * incorrect blocker annotations. Use the same 2 * + * max_step_wait limit as try_complete_step does for deciding + * to die. (We don't bother with trying to cancel anything, + * since it's unclear what to cancel in this case.) + */ + if (iconn->active_step != NULL) + { + struct timeval current_time; + int64 td; + + gettimeofday(¤t_time, NULL); + td = (int64) current_time.tv_sec - (int64) start_time.tv_sec; + td *= USECS_PER_SEC; + td += (int64) current_time.tv_usec - (int64) start_time.tv_usec; + if (td > 2 * max_step_wait) + { + fprintf(stderr, "step %s timed out after %d seconds\n", + iconn->active_step->name, + (int) (td / USECS_PER_SEC)); + fprintf(stderr, "active steps are:"); + for (j = 1; j < nconns; j++) + { + IsoConnInfo *oconn = &conns[j]; + + if (oconn->active_step != NULL) + fprintf(stderr, " %s", + oconn->active_step->name); + } + fprintf(stderr, "\n"); + exit(1); + } + } + } } /* Send the query for this step. */ @@ -587,40 +643,37 @@ run_permutation(TestSpec *testspec, int nsteps, Step **steps) exit(1); } - /* Try to complete this step without blocking. */ - mustwait = try_complete_step(testspec, step, STEP_NONBLOCK); + /* Remember we launched a step. */ + iconn->active_step = pstep; - /* Check for completion of any steps that were previously waiting. */ - w = 0; - nerrorstep = 0; - while (w < nwaiting) + /* Remember target number of NOTICEs for any blocker conditions. */ + for (j = 0; j < pstep->nblockers; j++) { - if (try_complete_step(testspec, waiting[w], - STEP_NONBLOCK | STEP_RETRY)) - w++; - else - { - errorstep[nerrorstep++] = waiting[w]; - if (w + 1 < nwaiting) - memmove(&waiting[w], &waiting[w + 1], - (nwaiting - (w + 1)) * sizeof(Step *)); - nwaiting--; - } + PermutationStepBlocker *blocker = pstep->blockers[j]; + + if (blocker->blocktype == PSB_NUM_NOTICES) + blocker->target_notices = blocker->num_notices + + conns[blocker->step->session + 1].total_notices; } - /* Report any error from this step, and any steps that it unblocked. */ - report_multiple_error_messages(step, nerrorstep, errorstep); + /* Try to complete this step without blocking. */ + mustwait = try_complete_step(testspec, pstep, STEP_NONBLOCK); + + /* Check for completion of any steps that were previously waiting. */ + nwaiting = try_complete_steps(testspec, waiting, nwaiting, + STEP_NONBLOCK | STEP_RETRY); /* If this step is waiting, add it to the array of waiters. */ if (mustwait) - waiting[nwaiting++] = step; + waiting[nwaiting++] = pstep; } /* Wait for any remaining queries. */ - for (w = 0; w < nwaiting; ++w) + nwaiting = try_complete_steps(testspec, waiting, nwaiting, STEP_RETRY); + if (nwaiting != 0) { - try_complete_step(testspec, waiting[w], STEP_RETRY); - report_error_message(waiting[w]); + fprintf(stderr, "failed to complete permutation due to mutually-blocking steps\n"); + exit(1); } /* Perform per-session teardown */ @@ -628,7 +681,7 @@ run_permutation(TestSpec *testspec, int nsteps, Step **steps) { if (testspec->sessions[i]->teardownsql) { - res = PQexec(conns[i + 1], testspec->sessions[i]->teardownsql); + res = PQexec(conns[i + 1].conn, testspec->sessions[i]->teardownsql); if (PQresultStatus(res) == PGRES_TUPLES_OK) { printResultSet(res); @@ -636,8 +689,8 @@ run_permutation(TestSpec *testspec, int nsteps, Step **steps) else if (PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "teardown of session %s failed: %s", - testspec->sessions[i]->name, - PQerrorMessage(conns[i + 1])); + conns[i + 1].sessionname, + PQerrorMessage(conns[i + 1].conn)); /* don't exit on teardown failure */ } PQclear(res); @@ -647,7 +700,7 @@ run_permutation(TestSpec *testspec, int nsteps, Step **steps) /* Perform teardown */ if (testspec->teardownsql) { - res = PQexec(conns[0], testspec->teardownsql); + res = PQexec(conns[0].conn, testspec->teardownsql); if (PQresultStatus(res) == PGRES_TUPLES_OK) { printResultSet(res); @@ -655,36 +708,90 @@ run_permutation(TestSpec *testspec, int nsteps, Step **steps) else if (PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "teardown failed: %s", - PQerrorMessage(conns[0])); + PQerrorMessage(conns[0].conn)); /* don't exit on teardown failure */ } PQclear(res); } free(waiting); - free(errorstep); +} + +/* + * Check for completion of any waiting step(s). + * Remove completed ones from the waiting[] array, + * and return the new value of nwaiting. + * See try_complete_step for the meaning of the flags. + */ +static int +try_complete_steps(TestSpec *testspec, PermutationStep **waiting, + int nwaiting, int flags) +{ + int old_nwaiting; + bool have_blocker; + + do + { + int w = 0; + + /* Reset latch; we only care about notices received within loop. */ + any_new_notice = false; + + /* Likewise, these variables reset for each retry. */ + old_nwaiting = nwaiting; + have_blocker = false; + + /* Scan the array, try to complete steps. */ + while (w < nwaiting) + { + if (try_complete_step(testspec, waiting[w], flags)) + { + /* Still blocked, leave it alone. */ + if (waiting[w]->nblockers > 0) + have_blocker = true; + w++; + } + else + { + /* Done, remove it from array. */ + if (w + 1 < nwaiting) + memmove(&waiting[w], &waiting[w + 1], + (nwaiting - (w + 1)) * sizeof(PermutationStep *)); + nwaiting--; + } + } + + /* + * If any of the still-waiting steps have blocker conditions attached, + * it's possible that one of the steps we examined afterwards has + * released them (either by completing, or by sending a NOTICE). If + * any step completions or NOTICEs happened, repeat the loop until + * none occurs. Without this provision, completion timing could vary + * depending on the order in which the steps appear in the array. + */ + } while (have_blocker && (nwaiting < old_nwaiting || any_new_notice)); + return nwaiting; } /* * Our caller already sent the query associated with this step. Wait for it - * to either complete or (if given the STEP_NONBLOCK flag) to block while - * waiting for a lock. We assume that any lock wait will persist until we - * have executed additional steps in the permutation. + * to either complete, or hit a blocking condition. * * When calling this function on behalf of a given step for a second or later - * time, pass the STEP_RETRY flag. This only affects the messages printed. - * - * If the query returns an error, the message is saved in step->errormsg. - * Caller should call report_error_message shortly after this, to have it - * printed and cleared. + * time, pass the STEP_RETRY flag. Do not pass it on the first call. * - * If the STEP_NONBLOCK flag was specified and the query is waiting to acquire - * a lock, returns true. Otherwise, returns false. + * Returns true if the step was *not* completed, false if it was completed. + * Reasons for non-completion are (a) the STEP_NONBLOCK flag was specified + * and the query is waiting to acquire a lock, or (b) the step has an + * unsatisfied blocker condition. When STEP_NONBLOCK is given, we assume + * that any lock wait will persist until we have executed additional steps. */ static bool -try_complete_step(TestSpec *testspec, Step *step, int flags) +try_complete_step(TestSpec *testspec, PermutationStep *pstep, int flags) { - PGconn *conn = conns[1 + step->session]; + Step *step = pstep->step; + IsoConnInfo *iconn = &conns[1 + step->session]; + PGconn *conn = iconn->conn; fd_set read_set; struct timeval start_time; struct timeval timeout; @@ -694,6 +801,28 @@ try_complete_step(TestSpec *testspec, Step *step, int flags) PGnotify *notify; bool canceled = false; + /* + * If the step is annotated with (*), then on the first call, force it to + * wait. This is useful for ensuring consistent output when the step + * might or might not complete so fast that we don't observe it waiting. + */ + if (!(flags & STEP_RETRY)) + { + int i; + + for (i = 0; i < pstep->nblockers; i++) + { + PermutationStepBlocker *blocker = pstep->blockers[i]; + + if (blocker->blocktype == PSB_ONCE) + { + printf("step %s: %s \n", + step->name, step->sql); + return true; + } + } + } + if (sock < 0) { fprintf(stderr, "invalid socket: %s", PQerrorMessage(conn)); @@ -727,14 +856,14 @@ try_complete_step(TestSpec *testspec, Step *step, int flags) { bool waiting; - res = PQexecPrepared(conns[0], PREP_WAITING, 1, - &backend_pid_strs[step->session + 1], + res = PQexecPrepared(conns[0].conn, PREP_WAITING, 1, + &conns[step->session + 1].backend_pid_str, NULL, NULL, 0); if (PQresultStatus(res) != PGRES_TUPLES_OK || PQntuples(res) != 1) { fprintf(stderr, "lock wait query failed: %s", - PQerrorMessage(conns[0])); + PQerrorMessage(conns[0].conn)); exit(1); } waiting = ((PQgetvalue(res, 0, 0))[0] == 't'); @@ -833,6 +962,19 @@ try_complete_step(TestSpec *testspec, Step *step, int flags) } } + /* + * The step is done, but we won't report it as complete so long as there + * are blockers. + */ + if (step_has_blocker(pstep)) + { + if (!(flags & STEP_RETRY)) + printf("step %s: %s \n", + step->name, step->sql); + return true; + } + + /* Otherwise, go ahead and complete it. */ if (flags & STEP_RETRY) printf("step %s: <... completed>\n", step->name); else @@ -843,16 +985,12 @@ try_complete_step(TestSpec *testspec, Step *step, int flags) switch (PQresultStatus(res)) { case PGRES_COMMAND_OK: + case PGRES_EMPTY_QUERY: break; case PGRES_TUPLES_OK: printResultSet(res); break; case PGRES_FATAL_ERROR: - if (step->errormsg != NULL) - { - printf("WARNING: this step had a leftover error message\n"); - printf("%s\n", step->errormsg); - } /* * Detail may contain XID values, so we want to just show @@ -866,9 +1004,9 @@ try_complete_step(TestSpec *testspec, Step *step, int flags) PG_DIAG_MESSAGE_PRIMARY); if (sev && msg) - step->errormsg = psprintf("%s: %s", sev, msg); + printf("%s: %s\n", sev, msg); else - step->errormsg = pg_strdup(PQresultErrorMessage(res)); + printf("%s\n", PQresultErrorMessage(res)); } break; default: @@ -885,12 +1023,13 @@ try_complete_step(TestSpec *testspec, Step *step, int flags) /* Try to identify which session it came from */ const char *sendername = NULL; char pidstring[32]; + int i; - for (int i = 0; i < testspec->nsessions; i++) + for (i = 0; i < testspec->nsessions; i++) { - if (notify->be_pid == backend_pids[i + 1]) + if (notify->be_pid == conns[i + 1].backend_pid) { - sendername = testspec->sessions[i]->name; + sendername = conns[i + 1].sessionname; break; } } @@ -907,6 +1046,43 @@ try_complete_step(TestSpec *testspec, Step *step, int flags) PQconsumeInput(conn); } + /* Connection is now idle. */ + iconn->active_step = NULL; + + return false; +} + +/* Detect whether a step has any unsatisfied blocker conditions */ +static bool +step_has_blocker(PermutationStep *pstep) +{ + int i; + + for (i = 0; i < pstep->nblockers; i++) + { + PermutationStepBlocker *blocker = pstep->blockers[i]; + IsoConnInfo *iconn; + + switch (blocker->blocktype) + { + case PSB_ONCE: + /* Ignore; try_complete_step handles this specially */ + break; + case PSB_OTHER_STEP: + /* Block if referenced step is active */ + iconn = &conns[1 + blocker->step->session]; + if (iconn->active_step && + iconn->active_step->step == blocker->step) + return true; + break; + case PSB_NUM_NOTICES: + /* Block if not enough notices received yet */ + iconn = &conns[1 + blocker->step->session]; + if (iconn->total_notices < blocker->target_notices) + return true; + break; + } + } return false; } @@ -932,11 +1108,17 @@ printResultSet(PGresult *res) } } -/* notice processor, prefixes each message with the session name */ +/* notice processor for regular user sessions */ static void isotesterNoticeProcessor(void *arg, const char *message) { - printf("%s: %s", (char *) arg, message); + IsoConnInfo *myconn = (IsoConnInfo *) arg; + + /* Prefix the backend's message with the session name. */ + printf("%s: %s", myconn->sessionname, message); + /* Record notices, since we may need this to decide to unblock a step. */ + myconn->total_notices++; + any_new_notice = true; } /* notice processor, hides the message */ diff --git a/src/test/isolation/isolationtester.h b/src/test/isolation/isolationtester.h index 488ff05928a09..5f300219c2032 100644 --- a/src/test/isolation/isolationtester.h +++ b/src/test/isolation/isolationtester.h @@ -14,31 +14,62 @@ #ifndef ISOLATIONTESTER_H #define ISOLATIONTESTER_H -typedef struct Session Session; +/* + * The structs declared here are used in the output of specparse.y. + * Except where noted, all fields are set in the grammar and not + * changed thereafter. + */ typedef struct Step Step; -struct Session +typedef struct { char *name; char *setupsql; char *teardownsql; Step **steps; int nsteps; -}; +} Session; struct Step { - int session; - bool used; char *name; char *sql; - char *errormsg; + /* These fields are filled by check_testspec(): */ + int session; /* identifies owning session */ + bool used; /* has step been used in a permutation? */ }; +typedef enum +{ + PSB_ONCE, /* force step to wait once */ + PSB_OTHER_STEP, /* wait for another step to complete first */ + PSB_NUM_NOTICES /* wait for N notices from another session */ +} PermutationStepBlockerType; + +typedef struct +{ + char *stepname; + PermutationStepBlockerType blocktype; + int num_notices; /* only used for PSB_NUM_NOTICES */ + /* These fields are filled by check_testspec(): */ + Step *step; /* link to referenced step (if any) */ + /* These fields are runtime workspace: */ + int target_notices; /* total notices needed from other session */ +} PermutationStepBlocker; + +typedef struct +{ + char *name; /* name of referenced Step */ + PermutationStepBlocker **blockers; + int nblockers; + /* These fields are filled by check_testspec(): */ + Step *step; /* link to referenced Step */ +} PermutationStep; + typedef struct { int nsteps; - char **stepnames; + PermutationStep **steps; } Permutation; typedef struct @@ -50,8 +81,6 @@ typedef struct int nsessions; Permutation **permutations; int npermutations; - Step **allsteps; - int nallsteps; } TestSpec; extern TestSpec parseresult; diff --git a/src/test/isolation/specparse.y b/src/test/isolation/specparse.y index ae3a99996136b..04dbb576a710b 100644 --- a/src/test/isolation/specparse.y +++ b/src/test/isolation/specparse.y @@ -25,9 +25,12 @@ TestSpec parseresult; /* result of parsing is left here */ %union { char *str; + int integer; Session *session; Step *step; Permutation *permutation; + PermutationStep *permutationstep; + PermutationStepBlocker *blocker; struct { void **elements; @@ -39,13 +42,16 @@ TestSpec parseresult; /* result of parsing is left here */ %type opt_setup opt_teardown %type setup %type step_list session_list permutation_list opt_permutation_list -%type string_literal_list +%type permutation_step_list blocker_list %type session %type step %type permutation +%type permutation_step +%type blocker %token sqlblock string_literal -%token PERMUTATION SESSION SETUP STEP TEARDOWN TEST +%token INTEGER +%token NOTICES PERMUTATION SESSION SETUP STEP TEARDOWN TEST %% @@ -145,8 +151,8 @@ step: $$ = pg_malloc(sizeof(Step)); $$->name = $2; $$->sql = $3; + $$->session = -1; /* until filled */ $$->used = false; - $$->errormsg = NULL; } ; @@ -180,23 +186,23 @@ permutation_list: permutation: - PERMUTATION string_literal_list + PERMUTATION permutation_step_list { $$ = pg_malloc(sizeof(Permutation)); - $$->stepnames = (char **) $2.elements; $$->nsteps = $2.nelements; + $$->steps = (PermutationStep **) $2.elements; } ; -string_literal_list: - string_literal_list string_literal +permutation_step_list: + permutation_step_list permutation_step { $$.elements = pg_realloc($1.elements, ($1.nelements + 1) * sizeof(void *)); $$.elements[$1.nelements] = $2; $$.nelements = $1.nelements + 1; } - | string_literal + | permutation_step { $$.nelements = 1; $$.elements = pg_malloc(sizeof(void *)); @@ -204,6 +210,71 @@ string_literal_list: } ; +permutation_step: + string_literal + { + $$ = pg_malloc(sizeof(PermutationStep)); + $$->name = $1; + $$->blockers = NULL; + $$->nblockers = 0; + $$->step = NULL; + } + | string_literal '(' blocker_list ')' + { + $$ = pg_malloc(sizeof(PermutationStep)); + $$->name = $1; + $$->blockers = (PermutationStepBlocker **) $3.elements; + $$->nblockers = $3.nelements; + $$->step = NULL; + } + ; + +blocker_list: + blocker_list ',' blocker + { + $$.elements = pg_realloc($1.elements, + ($1.nelements + 1) * sizeof(void *)); + $$.elements[$1.nelements] = $3; + $$.nelements = $1.nelements + 1; + } + | blocker + { + $$.nelements = 1; + $$.elements = pg_malloc(sizeof(void *)); + $$.elements[0] = $1; + } + ; + +blocker: + string_literal + { + $$ = pg_malloc(sizeof(PermutationStepBlocker)); + $$->stepname = $1; + $$->blocktype = PSB_OTHER_STEP; + $$->num_notices = -1; + $$->step = NULL; + $$->target_notices = -1; + } + | string_literal NOTICES INTEGER + { + $$ = pg_malloc(sizeof(PermutationStepBlocker)); + $$->stepname = $1; + $$->blocktype = PSB_NUM_NOTICES; + $$->num_notices = $3; + $$->step = NULL; + $$->target_notices = -1; + } + | '*' + { + $$ = pg_malloc(sizeof(PermutationStepBlocker)); + $$->stepname = NULL; + $$->blocktype = PSB_ONCE; + $$->num_notices = -1; + $$->step = NULL; + $$->target_notices = -1; + } + ; + %% #include "specscanner.c" diff --git a/src/test/isolation/specs/deadlock-hard.spec b/src/test/isolation/specs/deadlock-hard.spec index 67aad66e6638b..3316d75e953d5 100644 --- a/src/test/isolation/specs/deadlock-hard.spec +++ b/src/test/isolation/specs/deadlock-hard.spec @@ -63,9 +63,17 @@ step "s7a8" { LOCK TABLE a8; } step "s7c" { COMMIT; } session "s8" -setup { BEGIN; SET deadlock_timeout = '10s'; } +setup { BEGIN; SET deadlock_timeout = '10ms'; } step "s8a8" { LOCK TABLE a8; } step "s8a1" { LOCK TABLE a1; } step "s8c" { COMMIT; } -permutation "s1a1" "s2a2" "s3a3" "s4a4" "s5a5" "s6a6" "s7a7" "s8a8" "s1a2" "s2a3" "s3a4" "s4a5" "s5a6" "s6a7" "s7a8" "s8a1" "s8c" "s7c" "s6c" "s5c" "s4c" "s3c" "s2c" "s1c" +# Note: when s8a1 detects the deadlock and fails, s7a8 is released, making +# it timing-dependent which query completion is received first by the tester. +# To ensure output stability, add a blocking mark to force s8a1's completion +# to be reported first. There is a second timing dependency, too: the tester +# might or might not observe s8a1 during its short lock wait state. Apply a +# dummy blocking mark to s8a1 to ensure it will be reported as "waiting" +# regardless of that. + +permutation "s1a1" "s2a2" "s3a3" "s4a4" "s5a5" "s6a6" "s7a7" "s8a8" "s1a2" "s2a3" "s3a4" "s4a5" "s5a6" "s6a7" "s7a8"("s8a1") "s8a1"(*) "s8c" "s7c" "s6c" "s5c" "s4c" "s3c" "s2c" "s1c" diff --git a/src/test/isolation/specs/deadlock-soft-2.spec b/src/test/isolation/specs/deadlock-soft-2.spec index 46b73bc0823f9..6ff915f6061d2 100644 --- a/src/test/isolation/specs/deadlock-soft-2.spec +++ b/src/test/isolation/specs/deadlock-soft-2.spec @@ -2,12 +2,6 @@ # jump over both s3 and s4 and acquire the lock on a2 immediately, # since s3 and s4 are hard-blocked on a1. -# The expected output for this test assumes that isolationtester will -# detect step s1b as waiting before the deadlock detector runs and -# releases s1 from its blocked state. To leave enough time for that -# to happen even in very slow (CLOBBER_CACHE_ALWAYS) cases, we must -# increase deadlock_timeout. - setup { CREATE TABLE a1 (); @@ -20,7 +14,7 @@ teardown } session "s1" -setup { BEGIN; SET deadlock_timeout = '5s'; } +setup { BEGIN; SET deadlock_timeout = '10ms'; } step "s1a" { LOCK TABLE a1 IN SHARE UPDATE EXCLUSIVE MODE; } step "s1b" { LOCK TABLE a2 IN SHARE UPDATE EXCLUSIVE MODE; } step "s1c" { COMMIT; } @@ -41,4 +35,9 @@ setup { BEGIN; SET deadlock_timeout = '100s'; } step "s4a" { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; } step "s4c" { COMMIT; } -permutation "s1a" "s2a" "s2b" "s3a" "s4a" "s1b" "s1c" "s2c" "s3c" "s4c" +# The expected output for this test assumes that isolationtester will +# detect step s1b as waiting before the deadlock detector runs and +# releases s1 from its blocked state. To ensure that happens even in +# very slow (CLOBBER_CACHE_ALWAYS) cases, apply a (*) annotation. + +permutation "s1a" "s2a" "s2b" "s3a" "s4a" "s1b"(*) "s1c" "s2c" "s3c" "s4c" diff --git a/src/test/isolation/specs/detach-partition-concurrently-3.spec b/src/test/isolation/specs/detach-partition-concurrently-3.spec index 13ad84ac03739..5c8d45fee5dd0 100644 --- a/src/test/isolation/specs/detach-partition-concurrently-3.spec +++ b/src/test/isolation/specs/detach-partition-concurrently-3.spec @@ -1,8 +1,11 @@ # Try various things to happen to a partition with an incomplete detach # -# Note: Always keep "s2noop" right after "s1cancel" in permutations. This -# reduces the probability of the timing problem that the cancel error report -# is shown together with the next query instead of with the cancel query. +# Note: When using "s1cancel", mark the target step (the one to be canceled) +# as being blocked by "s1cancel". This ensures consistent reporting regardless +# of whether "s1cancel" returns before or after the other step reports failure. +# Also, ensure the step after "s1cancel" is also an s1 step (use "s1noop" if +# necessary). This ensures we won't move on to the next step until the cancel +# is complete. setup { @@ -22,8 +25,8 @@ step "s1b" { BEGIN; } step "s1brr" { BEGIN ISOLATION LEVEL REPEATABLE READ; } step "s1s" { SELECT * FROM d3_listp; } step "s1spart" { SELECT * FROM d3_listp1; } -# Sleep 0.1s after sending cancel, to give s2 time to react -step "s1cancel" { SELECT pg_cancel_backend(pid), pg_sleep(0.1) FROM d3_pid; } +step "s1cancel" { SELECT pg_cancel_backend(pid) FROM d3_pid; } +step "s1noop" { } step "s1c" { COMMIT; } step "s1alter" { ALTER TABLE d3_listp1 ALTER a DROP NOT NULL; } step "s1insert" { INSERT INTO d3_listp VALUES (1); } @@ -41,44 +44,43 @@ step "s2begin" { BEGIN; } step "s2snitch" { INSERT INTO d3_pid SELECT pg_backend_pid(); } step "s2detach" { ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; } step "s2detach2" { ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; } -step "s2noop" { UNLISTEN noop; } step "s2detachfinal" { ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; } step "s2drop" { DROP TABLE d3_listp1; } step "s2commit" { COMMIT; } # Try various things while the partition is in "being detached" state, with # no session waiting. -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1describe" "s1alter" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1insert" "s1c" -permutation "s2snitch" "s1brr" "s1s" "s2detach" "s1cancel" "s2noop" "s1insert" "s1c" "s1spart" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1insertpart" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1describe" "s1alter" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1insert" "s1c" +permutation "s2snitch" "s1brr" "s1s" "s2detach"("s1cancel") "s1cancel" "s1insert" "s1c" "s1spart" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1insertpart" # Test partition descriptor caching -permutation "s2snitch" "s1b" "s1s" "s2detach2" "s1cancel" "s2noop" "s1c" "s1brr" "s1insert" "s1s" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach2" "s1cancel" "s2noop" "s1c" "s1brr" "s1s" "s1insert" "s1s" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach2"("s1cancel") "s1cancel" "s1c" "s1brr" "s1insert" "s1s" "s1insert" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach2"("s1cancel") "s1cancel" "s1c" "s1brr" "s1s" "s1insert" "s1s" "s1c" # "drop" here does both tables -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1drop" "s1list" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1drop" "s1list" # "truncate" only does parent, not partition -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1trunc" "s1spart" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1trunc" "s1spart" # If a partition pending detach exists, we cannot drop another one -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s2detach2" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s2detachfinal" "s1c" "s2detach2" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1droppart" "s2detach2" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1noop" "s2detach2" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1noop" "s2detachfinal" "s1c" "s2detach2" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1droppart" "s2detach2" # When a partition with incomplete detach is dropped, we grab lock on parent too. -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s2begin" "s2drop" "s1s" "s2commit" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s2begin" "s2drop" "s1s" "s2commit" # Partially detach, then select and try to complete the detach. Reading # from partition blocks (AEL is required on partition); reading from parent # does not block. -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1b" "s1spart" "s2detachfinal" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1b" "s1s" "s2detachfinal" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1b" "s1spart" "s2detachfinal" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1b" "s1s" "s2detachfinal" "s1c" # DETACH FINALIZE in a transaction block. No insert/select on the partition # is allowed concurrently with that. -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s1b" "s1spart" "s2detachfinal" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s2begin" "s2detachfinal" "s2commit" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s2begin" "s2detachfinal" "s1spart" "s2commit" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1c" "s2begin" "s2detachfinal" "s1insertpart" "s2commit" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1b" "s1spart" "s2detachfinal" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s2begin" "s2detachfinal" "s2commit" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s2begin" "s2detachfinal" "s1spart" "s2commit" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s2begin" "s2detachfinal" "s1insertpart" "s2commit" diff --git a/src/test/isolation/specs/detach-partition-concurrently-4.spec b/src/test/isolation/specs/detach-partition-concurrently-4.spec index 5e4c0018d151b..208808bc3d48d 100644 --- a/src/test/isolation/specs/detach-partition-concurrently-4.spec +++ b/src/test/isolation/specs/detach-partition-concurrently-4.spec @@ -4,9 +4,12 @@ # because the locking situation is completely different. I didn't verify # that keeping both variants adds any extra coverage.) # -# Note: Always keep "s2noop" right after "s1cancel" in permutations. This -# reduces the probability of the timing problem that the cancel error report -# is shown together with the next query instead of with the cancel query. +# Note: When using "s1cancel", mark the target step (the one to be canceled) +# as being blocked by "s1cancel". This ensures consistent reporting regardless +# of whether "s1cancel" returns before or after the other step reports failure. +# Also, ensure the step after "s1cancel" is also an s1 step (use "s1noop" if +# necessary). This ensures we won't move on to the next step until the cancel +# is complete. setup { drop table if exists d4_primary, d4_primary1, d4_fk, d4_pid; @@ -24,8 +27,8 @@ session "s1" step "s1b" { begin; } step "s1brr" { begin isolation level repeatable read; } step "s1s" { select * from d4_primary; } -# Sleep 0.1s after sending cancel, to give s2 time to react -step "s1cancel" { select pg_cancel_backend(pid), pg_sleep(0.1) from d4_pid; } +step "s1cancel" { select pg_cancel_backend(pid) from d4_pid; } +step "s1noop" { } step "s1insert" { insert into d4_fk values (1); } step "s1c" { commit; } step "s1declare" { declare f cursor for select * from d4_primary; } @@ -39,7 +42,6 @@ step "s1rollback" { rollback to f; } session "s2" step "s2snitch" { insert into d4_pid select pg_backend_pid(); } step "s2detach" { alter table d4_primary detach partition d4_primary1 concurrently; } -step "s2noop" { UNLISTEN noop; } session "s3" step "s3brr" { begin isolation level repeatable read; } @@ -48,34 +50,34 @@ step "s3commit" { commit; } step "s3vacfreeze" { vacuum freeze pg_catalog.pg_inherits; } # Trying to insert into a partially detached partition is rejected -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s1insert" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1insert" "s1c" permutation "s2snitch" "s1b" "s1s" "s2detach" "s1insert" "s1c" # ... even under REPEATABLE READ mode. -permutation "s2snitch" "s1brr" "s1s" "s2detach" "s1cancel" "s2noop" "s1insert" "s1c" +permutation "s2snitch" "s1brr" "s1s" "s2detach"("s1cancel") "s1cancel" "s1insert" "s1c" permutation "s2snitch" "s1brr" "s1s" "s2detach" "s1insert" "s1c" # If you read the referenced table using a cursor, you can see a row that the # RI query does not see. -permutation "s2snitch" "s1b" "s1declare" "s2detach" "s1cancel" "s2noop" "s1fetchall" "s1insert" "s1c" +permutation "s2snitch" "s1b" "s1declare" "s2detach"("s1cancel") "s1cancel" "s1fetchall" "s1insert" "s1c" permutation "s2snitch" "s1b" "s1declare" "s2detach" "s1fetchall" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s1declare" "s2detach" "s1cancel" "s2noop" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" +permutation "s2snitch" "s1b" "s1declare" "s2detach"("s1cancel") "s1cancel" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" permutation "s2snitch" "s1b" "s1declare" "s2detach" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" -permutation "s2snitch" "s1b" "s2detach" "s1declare" "s1cancel" "s2noop" "s1fetchall" "s1insert" "s1c" +permutation "s2snitch" "s1b" "s2detach"("s1cancel") "s1declare" "s1cancel" "s1fetchall" "s1insert" "s1c" permutation "s2snitch" "s1b" "s2detach" "s1declare" "s1fetchall" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s2detach" "s1declare" "s1cancel" "s2noop" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" +permutation "s2snitch" "s1b" "s2detach"("s1cancel") "s1declare" "s1cancel" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" permutation "s2snitch" "s1b" "s2detach" "s1declare" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" # Creating the referencing row using a cursor -permutation "s2snitch" "s1brr" "s1declare2" "s1fetchone" "s2detach" "s1cancel" "s2noop" "s1updcur" "s1c" +permutation "s2snitch" "s1brr" "s1declare2" "s1fetchone" "s2detach"("s1cancel") "s1cancel" "s1updcur" "s1c" permutation "s2snitch" "s1brr" "s1declare2" "s1fetchone" "s2detach" "s1updcur" "s1c" permutation "s2snitch" "s1brr" "s1declare2" "s1fetchone" "s1updcur" "s2detach" "s1c" # Try reading the table from an independent session. permutation "s2snitch" "s1b" "s1s" "s2detach" "s3insert" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s3brr" "s3insert" "s3commit" "s1cancel" "s2noop" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s3brr" "s3insert" "s3commit" "s1cancel" "s1c" permutation "s2snitch" "s1b" "s1s" "s2detach" "s3brr" "s3insert" "s3commit" "s1c" # Try one where we VACUUM FREEZE pg_inherits (to verify that xmin change is # handled correctly). -permutation "s2snitch" "s1brr" "s1s" "s2detach" "s1cancel" "s2noop" "s3vacfreeze" "s1s" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1cancel" "s2noop" "s3vacfreeze" "s1s" "s1insert" "s1c" +permutation "s2snitch" "s1brr" "s1s" "s2detach"("s1cancel") "s1cancel" "s1noop" "s3vacfreeze" "s1s" "s1insert" "s1c" +permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1noop" "s3vacfreeze" "s1s" "s1insert" "s1c" diff --git a/src/test/isolation/specs/insert-conflict-specconflict.spec b/src/test/isolation/specs/insert-conflict-specconflict.spec index 60283974915d1..3bc2bf0630268 100644 --- a/src/test/isolation/specs/insert-conflict-specconflict.spec +++ b/src/test/isolation/specs/insert-conflict-specconflict.spec @@ -83,6 +83,7 @@ step "s1_confirm_index_order" { SELECT 'upserttest_key_uniq_idx'::regclass::int8 step "s1_upsert" { INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s1') ON CONFLICT (blurt_and_lock_123(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s1'; } step "s1_insert_toast" { INSERT INTO upserttest VALUES('k2', ctoast_large_val()) ON CONFLICT DO NOTHING; } step "s1_commit" { COMMIT; } +step "s1_noop" { } session "s2" setup @@ -95,6 +96,7 @@ step "s2_begin" { BEGIN; } step "s2_upsert" { INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s2') ON CONFLICT (blurt_and_lock_123(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s2'; } step "s2_insert_toast" { INSERT INTO upserttest VALUES('k2', ctoast_large_val()) ON CONFLICT DO NOTHING; } step "s2_commit" { COMMIT; } +step "s2_noop" { } # Test that speculative locks are correctly acquired and released, s2 # inserts, s1 updates. @@ -223,7 +225,8 @@ permutation "controller_show" "s2_begin" # Both sessions wait on advisory locks - "s1_upsert" "s2_upsert" + # (but don't show s2_upsert as complete till we've seen all of s1's notices) + "s1_upsert" "s2_upsert" ("s1_upsert" notices 10) "controller_show" # Switch both sessions to wait on the other lock next time (the speculative insertion) "controller_unlock_1_1" "controller_unlock_2_1" @@ -244,14 +247,15 @@ permutation "controller_unlock_1_2" # Should report s1 is waiting on speculative lock "controller_print_speculative_locks" - # Allow s2 to insert into the non-unique index and complete s1 will + # Allow s2 to insert into the non-unique index and complete. s1 will # no longer wait on speculative lock, but proceed to wait on the - # transaction to finish. - "controller_unlock_2_4" - # Should report that s1 is now waiting for s1 to commit + # transaction to finish. The no-op step is needed to ensure that + # we don't advance to the reporting step until s2_upsert has completed. + "controller_unlock_2_4" "s2_noop" + # Should report that s1 is now waiting for s2 to commit "controller_print_speculative_locks" # Once s2 commits, s1 is finally free to continue to update - "s2_commit" + "s2_commit" "s1_noop" # This should now show a successful UPSERT "controller_show" # Ensure no unexpected locks survive diff --git a/src/test/isolation/specs/multiple-cic.spec b/src/test/isolation/specs/multiple-cic.spec index 3199667be2c74..3ac1d39d86d4c 100644 --- a/src/test/isolation/specs/multiple-cic.spec +++ b/src/test/isolation/specs/multiple-cic.spec @@ -37,4 +37,7 @@ step "s2i" { WHERE unlck(); } -permutation "s2l" "s1i" "s2i" +# (*) marker ensures that s2i is reported as "waiting", even if it +# completes very quickly + +permutation "s2l" "s1i" "s2i"(*) diff --git a/src/test/isolation/specs/timeouts.spec b/src/test/isolation/specs/timeouts.spec index 7f821d44d0e62..e167e1885af90 100644 --- a/src/test/isolation/specs/timeouts.spec +++ b/src/test/isolation/specs/timeouts.spec @@ -19,27 +19,31 @@ teardown { ABORT; } session "s2" setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "sto" { SET statement_timeout = 5000; } -step "lto" { SET lock_timeout = 5000; } -step "lsto" { SET lock_timeout = 5000; SET statement_timeout = 6000; } -step "slto" { SET lock_timeout = 6000; SET statement_timeout = 5000; } +step "sto" { SET statement_timeout = '10ms'; } +step "lto" { SET lock_timeout = '10ms'; } +step "lsto" { SET lock_timeout = '10ms'; SET statement_timeout = '10s'; } +step "slto" { SET lock_timeout = '10s'; SET statement_timeout = '10ms'; } step "locktbl" { LOCK TABLE accounts; } step "update" { DELETE FROM accounts WHERE accountid = 'checking'; } teardown { ABORT; } +# It's possible that the isolation tester will not observe the final +# steps as "waiting", thanks to the relatively short timeouts we use. +# We can ensure consistent test output by marking those steps with (*). + # statement timeout, table-level lock -permutation "rdtbl" "sto" "locktbl" +permutation "rdtbl" "sto" "locktbl"(*) # lock timeout, table-level lock -permutation "rdtbl" "lto" "locktbl" +permutation "rdtbl" "lto" "locktbl"(*) # lock timeout expires first, table-level lock -permutation "rdtbl" "lsto" "locktbl" +permutation "rdtbl" "lsto" "locktbl"(*) # statement timeout expires first, table-level lock -permutation "rdtbl" "slto" "locktbl" +permutation "rdtbl" "slto" "locktbl"(*) # statement timeout, row-level lock -permutation "wrtbl" "sto" "update" +permutation "wrtbl" "sto" "update"(*) # lock timeout, row-level lock -permutation "wrtbl" "lto" "update" +permutation "wrtbl" "lto" "update"(*) # lock timeout expires first, row-level lock -permutation "wrtbl" "lsto" "update" +permutation "wrtbl" "lsto" "update"(*) # statement timeout expires first, row-level lock -permutation "wrtbl" "slto" "update" +permutation "wrtbl" "slto" "update"(*) diff --git a/src/test/isolation/specs/tuplelock-update.spec b/src/test/isolation/specs/tuplelock-update.spec index 8f5a1f7314ad5..d3de0bcbc7880 100644 --- a/src/test/isolation/specs/tuplelock-update.spec +++ b/src/test/isolation/specs/tuplelock-update.spec @@ -18,8 +18,8 @@ step "s1_chain" { UPDATE pktab SET data = DEFAULT; } step "s1_begin" { BEGIN; } step "s1_grablock" { SELECT * FROM pktab FOR KEY SHARE; } step "s1_advunlock1" { SELECT pg_advisory_unlock(142857); } -step "s1_advunlock2" { SELECT pg_sleep(5), pg_advisory_unlock(285714); } -step "s1_advunlock3" { SELECT pg_sleep(5), pg_advisory_unlock(571428); } +step "s1_advunlock2" { SELECT pg_advisory_unlock(285714); } +step "s1_advunlock3" { SELECT pg_advisory_unlock(571428); } step "s1_commit" { COMMIT; } session "s2" @@ -31,4 +31,7 @@ step "s3_update" { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared session "s4" step "s4_update" { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(571428) IS NOT NULL; } -permutation "s1_advlock" "s2_update" "s3_update" "s4_update" "s1_chain" "s1_begin" "s1_grablock" "s1_advunlock1" "s1_advunlock2" "s1_advunlock3" "s1_commit" +# We use blocker annotations on the s1_advunlockN steps so that we will not +# move on to the next step until the other session's released step finishes. +# This ensures stable ordering of the test output. +permutation "s1_advlock" "s2_update" "s3_update" "s4_update" "s1_chain" "s1_begin" "s1_grablock" "s1_advunlock1"("s2_update") "s1_advunlock2"("s3_update") "s1_advunlock3"("s4_update") "s1_commit" diff --git a/src/test/isolation/specscanner.l b/src/test/isolation/specscanner.l index 19883c265b334..a733bcf3554da 100644 --- a/src/test/isolation/specscanner.l +++ b/src/test/isolation/specscanner.l @@ -36,6 +36,10 @@ static void addlitchar(char c); %x sql %x qstr +digit [0123456789] + +self [,()*] + non_newline [^\n\r] space [ \t\r\f] @@ -48,12 +52,20 @@ comment ("#"{non_newline}*) litbufsize = LITBUF_INIT; %} +notices { return NOTICES; } permutation { return PERMUTATION; } session { return SESSION; } setup { return SETUP; } step { return STEP; } teardown { return TEARDOWN; } +{digit}+ { + yylval.integer = atoi(yytext); + return INTEGER; + } + +{self} { return yytext[0]; } + [\n] { yyline++; } {comment} { /* ignore */ } {space} { /* ignore */ } From 24043c27b46f873211177e3460ab09dc011802a5 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Wed, 23 Jun 2021 09:53:18 -0400 Subject: [PATCH 511/671] Add test case for obsoleting slot with active walsender, take 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The code to signal a running walsender when its reserved WAL size grows too large is completely uncovered before this commit; this adds coverage for that case. This test involves sending SIGSTOP to walsender and walreceiver, then advancing enough WAL for a checkpoint to trigger, then sending SIGCONT. There's no precedent for STOP signalling in Perl tests, and my reading of relevant manpages says it's likely to fail on Windows. Because of this, this test is always skipped on that platform. This version fixes a couple of rarely hit race conditions in the previous attempt 09126984a263; most notably, both LOG string searches are loops, not just the second one; we acquire the start-of-log position before STOP-signalling; and reference the correct process name in the test description. All per Tom Lane. Author: Álvaro Herrera Discussion: https://postgr.es/m/202106102202.mjw4huiix7lo@alvherre.pgsql --- src/test/recovery/t/019_replslot_limit.pl | 97 ++++++++++++++++++++++- 1 file changed, 94 insertions(+), 3 deletions(-) diff --git a/src/test/recovery/t/019_replslot_limit.pl b/src/test/recovery/t/019_replslot_limit.pl index 7094aa0704b20..d4b9ff705f089 100644 --- a/src/test/recovery/t/019_replslot_limit.pl +++ b/src/test/recovery/t/019_replslot_limit.pl @@ -11,7 +11,7 @@ use PostgresNode; use File::Path qw(rmtree); -use Test::More tests => 14; +use Test::More tests => $TestLib::windows_os ? 14 : 18; use Time::HiRes qw(usleep); $ENV{PGDATABASE} = 'postgres'; @@ -211,8 +211,8 @@ } ok($failed, 'check that replication has been broken'); -$node_primary->stop('immediate'); -$node_standby->stop('immediate'); +$node_primary->stop; +$node_standby->stop; my $node_primary2 = get_new_node('primary2'); $node_primary2->init(allows_streaming => 1); @@ -253,6 +253,97 @@ timeout => '60')); is($result[1], 'finished', 'check if checkpoint command is not blocked'); +$node_primary2->stop; +$node_standby->stop; + +# The next test depends on Perl's `kill`, which apparently is not +# portable to Windows. (It would be nice to use Test::More's `subtest`, +# but that's not in the ancient version we require.) +if ($TestLib::windows_os) +{ + done_testing(); + exit; +} + +# Get a slot terminated while the walsender is active +# We do this by sending SIGSTOP to the walsender. Skip this on Windows. +my $node_primary3 = get_new_node('primary3'); +$node_primary3->init(allows_streaming => 1, extra => ['--wal-segsize=1']); +$node_primary3->append_conf( + 'postgresql.conf', qq( + min_wal_size = 2MB + max_wal_size = 2MB + log_checkpoints = yes + max_slot_wal_keep_size = 1MB + )); +$node_primary3->start; +$node_primary3->safe_psql('postgres', + "SELECT pg_create_physical_replication_slot('rep3')"); +# Take backup +$backup_name = 'my_backup'; +$node_primary3->backup($backup_name); +# Create standby +my $node_standby3 = get_new_node('standby_3'); +$node_standby3->init_from_backup($node_primary3, $backup_name, + has_streaming => 1); +$node_standby3->append_conf('postgresql.conf', "primary_slot_name = 'rep3'"); +$node_standby3->start; +$node_primary3->wait_for_catchup($node_standby3->name, 'replay'); +my $senderpid = $node_primary3->safe_psql('postgres', + "SELECT pid FROM pg_stat_activity WHERE backend_type = 'walsender'"); +like($senderpid, qr/^[0-9]+$/, "have walsender pid $senderpid"); +my $receiverpid = $node_standby3->safe_psql('postgres', + "SELECT pid FROM pg_stat_activity WHERE backend_type = 'walreceiver'"); +like($receiverpid, qr/^[0-9]+$/, "have walreceiver pid $receiverpid"); + +$logstart = get_log_size($node_primary3); +# freeze walsender and walreceiver. Slot will still be active, but walreceiver +# won't get anything anymore. +kill 'STOP', $senderpid, $receiverpid; +advance_wal($node_primary3, 2); + +my $max_attempts = 180; +while ($max_attempts-- >= 0) +{ + if (find_in_log( + $node_primary3, + "terminating process $senderpid to release replication slot \"rep3\"", + $logstart)) + { + ok(1, "walsender termination logged"); + last; + } + sleep 1; +} + +# Now let the walsender continue; slot should be killed now. +# (Must not let walreceiver run yet; otherwise the standby could start another +# one before the slot can be killed) +kill 'CONT', $senderpid; +$node_primary3->poll_query_until('postgres', + "SELECT wal_status FROM pg_replication_slots WHERE slot_name = 'rep3'", + "lost") + or die "timed out waiting for slot to be lost"; + +$max_attempts = 180; +while ($max_attempts-- >= 0) +{ + if (find_in_log( + $node_primary3, + 'invalidating slot "rep3" because its restart_lsn', $logstart)) + { + ok(1, "slot invalidation logged"); + last; + } + sleep 1; +} + +# Now let the walreceiver continue, so that the node can be stopped cleanly +kill 'CONT', $receiverpid; + +$node_primary3->stop; +$node_standby3->stop; + ##################################### # Advance WAL of $node by $n segments sub advance_wal From 4a054069a36032a59afceb07f3b837f09ab1a2e9 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 23 Jun 2021 11:12:31 -0400 Subject: [PATCH 512/671] Improve display of query results in isolation tests. Previously, isolationtester displayed SQL query results using some ad-hoc code that clearly hadn't had much effort expended on it. Field values longer than 14 characters weren't separated from the next field, and usually caused misalignment of the columns too. Also there was no visual separation of a query's result from subsequent isolationtester output. This made test result files confusing and hard to read. To improve matters, let's use libpq's PQprint() function. Although that's long since unused by psql, it's still plenty good enough for the purpose here. Like 741d7f104, back-patch to all supported branches, so that this isn't a stumbling block for back-patching isolation test changes. Discussion: https://postgr.es/m/582362.1623798221@sss.pgh.pa.us --- .../expected/concurrent_ddl_dml.out | 676 +- .../expected/concurrent_stream.out | 16 +- .../expected/delayed_startup.out | 40 +- contrib/test_decoding/expected/mxact.out | 80 +- .../test_decoding/expected/oldest_xmin.out | 30 +- .../test_decoding/expected/ondisk_startup.out | 60 +- .../expected/snapshot_transfer.out | 48 +- .../expected/subxact_without_top.out | 32 +- .../expected/twophase_snapshot.out | 46 +- .../isolation/expected/aborted-keyrevoke.out | 168 +- src/test/isolation/expected/alter-table-1.out | 2192 +- src/test/isolation/expected/alter-table-2.out | 576 +- src/test/isolation/expected/alter-table-3.out | 288 +- src/test/isolation/expected/alter-table-4.out | 42 +- src/test/isolation/expected/async-notify.out | 48 +- .../expected/classroom-scheduling.out | 240 +- .../isolation/expected/create-trigger.out | 150 +- .../isolation/expected/deadlock-parallel.out | 42 +- .../expected/delete-abort-savept-2.out | 72 +- .../expected/delete-abort-savept.out | 84 +- .../detach-partition-concurrently-1.out | 202 +- .../detach-partition-concurrently-2.out | 40 +- .../detach-partition-concurrently-3.out | 256 +- .../detach-partition-concurrently-4.out | 200 +- .../expected/drop-index-concurrently-1.out | 50 +- .../expected/drop-index-concurrently-1_2.out | 46 +- .../expected/eval-plan-qual-trigger.out | 1598 +- .../isolation/expected/eval-plan-qual.out | 772 +- .../isolation/expected/fk-partitioned-2.out | 18 +- .../isolation/expected/freeze-the-dead.out | 26 +- src/test/isolation/expected/horizons.out | 162 +- src/test/isolation/expected/inherit-temp.out | 252 +- .../expected/insert-conflict-do-nothing-2.out | 48 +- .../expected/insert-conflict-do-nothing.out | 12 +- .../expected/insert-conflict-do-update-2.out | 12 +- .../expected/insert-conflict-do-update-3.out | 20 +- .../expected/insert-conflict-do-update.out | 12 +- .../expected/insert-conflict-specconflict.out | 376 +- .../expected/lock-committed-keyupdate.out | 408 +- .../expected/lock-committed-update.out | 600 +- .../isolation/expected/lock-update-delete.out | 160 +- .../expected/lock-update-delete_1.out | 144 +- .../expected/lock-update-traversal.out | 36 +- src/test/isolation/expected/multiple-cic.out | 10 +- .../expected/multiple-row-versions.out | 18 +- .../expected/multixact-no-deadlock.out | 24 +- .../expected/multixact-no-forget.out | 114 +- .../expected/multixact-no-forget_1.out | 102 +- src/test/isolation/expected/nowait-2.out | 36 +- src/test/isolation/expected/nowait-3.out | 12 +- src/test/isolation/expected/nowait-4.out | 8 +- src/test/isolation/expected/nowait-4_1.out | 8 +- src/test/isolation/expected/nowait-5.out | 14 +- src/test/isolation/expected/nowait.out | 48 +- src/test/isolation/expected/partial-index.out | 998 +- .../expected/partition-concurrent-attach.out | 30 +- .../expected/partition-key-update-2.out | 14 +- .../expected/partition-key-update-3.out | 64 +- .../expected/partition-key-update-4.out | 34 +- src/test/isolation/expected/plpgsql-toast.out | 104 +- src/test/isolation/expected/predicate-gin.out | 372 +- .../isolation/expected/predicate-gist.out | 480 +- .../isolation/expected/predicate-hash.out | 480 +- .../expected/predicate-lock-hot-tuple.out | 16 +- .../expected/prepared-transactions-cic.out | 6 +- .../expected/prepared-transactions.out | 26724 ++++++++++++---- .../isolation/expected/project-manager.out | 240 +- .../expected/read-only-anomaly-2.out | 44 +- .../expected/read-only-anomaly-3.out | 26 +- .../isolation/expected/read-only-anomaly.out | 26 +- .../expected/read-write-unique-2.out | 18 +- .../expected/read-write-unique-3.out | 6 +- .../expected/read-write-unique-4.out | 24 +- .../isolation/expected/read-write-unique.out | 18 +- .../isolation/expected/receipt-report.out | 2964 +- .../expected/referential-integrity.out | 560 +- .../expected/reindex-concurrently.out | 36 +- src/test/isolation/expected/ri-trigger.out | 60 +- src/test/isolation/expected/sequence-ddl.out | 102 +- .../expected/serializable-parallel-2.out | 72 +- .../expected/serializable-parallel.out | 44 +- src/test/isolation/expected/skip-locked-2.out | 54 +- src/test/isolation/expected/skip-locked-3.out | 18 +- src/test/isolation/expected/skip-locked-4.out | 14 +- .../isolation/expected/skip-locked-4_1.out | 8 +- src/test/isolation/expected/skip-locked.out | 480 +- .../expected/temporal-range-integrity.out | 240 +- src/test/isolation/expected/timeouts.out | 32 +- src/test/isolation/expected/total-cash.out | 204 +- .../isolation/expected/truncate-conflict.out | 48 +- .../isolation/expected/tuplelock-conflict.out | 480 +- .../expected/tuplelock-partition.out | 12 +- .../isolation/expected/tuplelock-update.out | 24 +- .../tuplelock-upgrade-no-deadlock.out | 172 +- src/test/isolation/expected/two-ids.out | 540 +- .../expected/update-conflict-out.out | 8 +- .../isolation/expected/vacuum-reltuples.out | 24 +- src/test/isolation/isolationtester.c | 22 +- ...summarization-and-inprogress-insertion.out | 38 +- .../expected/partition-addition.out | 14 +- .../expected/partition-removal-1.out | 146 +- .../expected/sto_using_cursor.out | 66 +- .../expected/sto_using_hash_index.out | 12 +- .../expected/sto_using_select.out | 54 +- 104 files changed, 33268 insertions(+), 13778 deletions(-) diff --git a/contrib/test_decoding/expected/concurrent_ddl_dml.out b/contrib/test_decoding/expected/concurrent_ddl_dml.out index 53578c8ed60fb..3742a2a2474ff 100644 --- a/contrib/test_decoding/expected/concurrent_ddl_dml.out +++ b/contrib/test_decoding/expected/concurrent_ddl_dml.out @@ -2,30 +2,38 @@ Parsed test spec with 2 sessions starting permutation: s1_init s1_begin s1_insert_tbl1 s2_alter_tbl2_float s1_insert_tbl2 s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s2_alter_tbl2_float: ALTER TABLE tbl2 ALTER COLUMN val2 TYPE float; step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); step s1_commit: COMMIT; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +data +------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[double precision]:1 -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s2_alter_tbl1_float s1_insert_tbl2 s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s2_alter_tbl1_float: ALTER TABLE tbl1 ALTER COLUMN val2 TYPE float; @@ -33,42 +41,54 @@ step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); step s1_commit: COMMIT; step s2_alter_tbl1_float: <... completed> step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +---------------------------------------------------------- +BEGIN table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s2_alter_tbl2_char s1_insert_tbl2 s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s2_alter_tbl2_char: ALTER TABLE tbl2 ALTER COLUMN val2 TYPE character varying; step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); step s1_commit: COMMIT; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +data +---------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[character varying]:'1' -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s2_alter_tbl1_char s1_insert_tbl2 s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s2_alter_tbl1_char: ALTER TABLE tbl1 ALTER COLUMN val2 TYPE character varying; @@ -76,21 +96,27 @@ step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); step s1_commit: COMMIT; step s2_alter_tbl1_char: <... completed> step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +---------------------------------------------------------- +BEGIN table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s1_insert_tbl2 s2_alter_tbl1_float s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); @@ -98,21 +124,27 @@ step s2_alter_tbl1_float: ALTER TABLE tbl1 ALTER COLUMN val2 TYPE float; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +---------------------------------------------------------- +BEGIN table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s1_insert_tbl2 s2_alter_tbl1_char s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); @@ -120,21 +152,27 @@ step s2_alter_tbl1_char: ALTER TABLE tbl1 ALTER COLUMN val2 TYPE character varyi step s1_commit: COMMIT; step s2_alter_tbl1_char: <... completed> step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +---------------------------------------------------------- +BEGIN table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s2_alter_tbl2_float s1_insert_tbl2 s2_alter_tbl1_float s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s2_alter_tbl2_float: ALTER TABLE tbl2 ALTER COLUMN val2 TYPE float; @@ -143,21 +181,27 @@ step s2_alter_tbl1_float: ALTER TABLE tbl1 ALTER COLUMN val2 TYPE float; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +data +------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[double precision]:1 -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s2_alter_tbl2_char s1_insert_tbl2 s2_alter_tbl1_char s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s2_alter_tbl2_char: ALTER TABLE tbl2 ALTER COLUMN val2 TYPE character varying; @@ -166,21 +210,27 @@ step s2_alter_tbl1_char: ALTER TABLE tbl1 ALTER COLUMN val2 TYPE character varyi step s1_commit: COMMIT; step s2_alter_tbl1_char: <... completed> step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +data +---------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[character varying]:'1' -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s2_alter_tbl2_char s1_begin s1_insert_tbl1 s2_alter_tbl2_text s1_insert_tbl2 s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s2_alter_tbl2_char: ALTER TABLE tbl2 ALTER COLUMN val2 TYPE character varying; step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); @@ -188,21 +238,27 @@ step s2_alter_tbl2_text: ALTER TABLE tbl2 ALTER COLUMN val2 TYPE text; step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); step s1_commit: COMMIT; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +---------------------------------------------------------- +BEGIN table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 -table public.tbl2: INSERT: val1[integer]:1 val2[text]:'1' -COMMIT -?column? +table public.tbl2: INSERT: val1[integer]:1 val2[text]:'1' +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s2_alter_tbl2_char s1_begin s1_insert_tbl1 s2_alter_tbl2_text s1_insert_tbl2 s2_alter_tbl1_char s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s2_alter_tbl2_char: ALTER TABLE tbl2 ALTER COLUMN val2 TYPE character varying; step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); @@ -212,21 +268,27 @@ step s2_alter_tbl1_char: ALTER TABLE tbl1 ALTER COLUMN val2 TYPE character varyi step s1_commit: COMMIT; step s2_alter_tbl1_char: <... completed> step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +---------------------------------------------------------- +BEGIN table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 -table public.tbl2: INSERT: val1[integer]:1 val2[text]:'1' -COMMIT -?column? +table public.tbl2: INSERT: val1[integer]:1 val2[text]:'1' +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s2_alter_tbl2_boolean s1_insert_tbl2 s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s2_alter_tbl2_boolean: ALTER TABLE tbl2 ALTER COLUMN val2 TYPE boolean; @@ -234,21 +296,27 @@ ERROR: column "val2" cannot be cast automatically to type boolean step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); step s1_commit: COMMIT; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +---------------------------------------------------------- +BEGIN table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s2_alter_tbl2_boolean s1_insert_tbl2 s2_alter_tbl1_boolean s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s2_alter_tbl2_boolean: ALTER TABLE tbl2 ALTER COLUMN val2 TYPE boolean; @@ -259,42 +327,54 @@ step s1_commit: COMMIT; step s2_alter_tbl1_boolean: <... completed> ERROR: column "val2" cannot be cast automatically to type boolean step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +---------------------------------------------------------- +BEGIN table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s2_alter_tbl2_add_int s1_insert_tbl2_3col s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s2_alter_tbl2_add_int: ALTER TABLE tbl2 ADD COLUMN val3 INTEGER; step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); step s1_commit: COMMIT; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +data +-------------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[integer]:1 -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s1_insert_tbl2 s1_commit s1_begin s2_alter_tbl2_add_int s1_insert_tbl2_3col s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); @@ -304,45 +384,57 @@ step s2_alter_tbl2_add_int: ALTER TABLE tbl2 ADD COLUMN val3 INTEGER; step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); step s1_commit: COMMIT; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 -table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 -COMMIT -BEGIN +data +-------------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 +COMMIT +BEGIN table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[integer]:1 -COMMIT -?column? +COMMIT +(7 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s2_alter_tbl2_add_float s1_insert_tbl2_3col s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s2_alter_tbl2_add_float: ALTER TABLE tbl2 ADD COLUMN val3 FLOAT; step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); step s1_commit: COMMIT; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +data +----------------------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[double precision]:1 -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s1_insert_tbl2 s1_commit s1_begin s2_alter_tbl2_add_float s1_insert_tbl2_3col s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); @@ -352,45 +444,57 @@ step s2_alter_tbl2_add_float: ALTER TABLE tbl2 ADD COLUMN val3 FLOAT; step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); step s1_commit: COMMIT; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 -table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 -COMMIT -BEGIN +data +----------------------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 +COMMIT +BEGIN table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[double precision]:1 -COMMIT -?column? +COMMIT +(7 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s2_alter_tbl2_add_char s1_insert_tbl2_3col s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s2_alter_tbl2_add_char: ALTER TABLE tbl2 ADD COLUMN val3 character varying; step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); step s1_commit: COMMIT; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +data +-------------------------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[character varying]:'1' -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s1_begin s1_insert_tbl1 s1_insert_tbl2 s1_commit s1_begin s2_alter_tbl2_add_char s1_insert_tbl2_3col s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); @@ -400,24 +504,30 @@ step s2_alter_tbl2_add_char: ALTER TABLE tbl2 ADD COLUMN val3 character varying; step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); step s1_commit: COMMIT; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 -table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 -COMMIT -BEGIN +data +-------------------------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 +COMMIT +BEGIN table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[character varying]:'1' -COMMIT -?column? +COMMIT +(7 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s2_alter_tbl2_add_int s1_begin s1_insert_tbl2_3col s2_alter_tbl2_drop_3rd_col s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s2_alter_tbl2_add_int: ALTER TABLE tbl2 ADD COLUMN val3 INTEGER; step s1_begin: BEGIN; step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); @@ -425,20 +535,26 @@ step s2_alter_tbl2_drop_3rd_col: ALTER TABLE tbl2 DROP COLUMN val3; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +-------------------------------------------------------------------------- +BEGIN table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[integer]:1 -COMMIT -?column? +COMMIT +(3 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s2_alter_tbl2_add_int s1_begin s1_insert_tbl2_3col s2_alter_tbl2_drop_3rd_col s1_insert_tbl2 s1_commit s1_insert_tbl2 s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s2_alter_tbl2_add_int: ALTER TABLE tbl2 ADD COLUMN val3 INTEGER; step s1_begin: BEGIN; step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); @@ -448,24 +564,30 @@ step s1_commit: COMMIT; step s2_alter_tbl2_drop_3rd_col: <... completed> step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[integer]:1 +data +----------------------------------------------------------------------------- +BEGIN +table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[integer]:null -COMMIT -BEGIN -table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 -COMMIT -?column? +COMMIT +BEGIN +table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 +COMMIT +(7 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s2_alter_tbl2_add_int s1_begin s1_insert_tbl2_3col s2_alter_tbl2_drop_3rd_col s1_commit s2_get_changes s2_alter_tbl2_add_text s1_begin s1_insert_tbl2_3col s2_alter_tbl2_3rd_char s1_insert_tbl2_3col s1_commit s2_get_changes s2_alter_tbl2_3rd_int s1_insert_tbl2_3col s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s2_alter_tbl2_add_int: ALTER TABLE tbl2 ADD COLUMN val3 INTEGER; step s1_begin: BEGIN; step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); @@ -473,11 +595,13 @@ step s2_alter_tbl2_drop_3rd_col: ALTER TABLE tbl2 DROP COLUMN val3; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +-------------------------------------------------------------------------- +BEGIN table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[integer]:1 -COMMIT +COMMIT +(3 rows) + step s2_alter_tbl2_add_text: ALTER TABLE tbl2 ADD COLUMN val3 TEXT; step s1_begin: BEGIN; step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); @@ -486,29 +610,37 @@ step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); step s1_commit: COMMIT; step s2_alter_tbl2_3rd_char: <... completed> step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +------------------------------------------------------------------------- +BEGIN table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[text]:'1' table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[text]:'1' -COMMIT +COMMIT +(4 rows) + step s2_alter_tbl2_3rd_int: ALTER TABLE tbl2 ALTER COLUMN val3 TYPE int USING val3::integer; step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +-------------------------------------------------------------------------- +BEGIN table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[integer]:1 -COMMIT -?column? +COMMIT +(3 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s2_alter_tbl2_add_char s1_begin s1_insert_tbl1 s1_insert_tbl2_3col s2_alter_tbl2_3rd_text s1_insert_tbl2_3col s1_commit s1_insert_tbl2_3col s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s2_alter_tbl2_add_char: ALTER TABLE tbl2 ADD COLUMN val3 character varying; step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); @@ -519,25 +651,31 @@ step s1_commit: COMMIT; step s2_alter_tbl2_3rd_text: <... completed> step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +data +-------------------------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[character varying]:'1' table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[character varying]:'1' -COMMIT -BEGIN -table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[text]:'1' -COMMIT -?column? +COMMIT +BEGIN +table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[text]:'1' +COMMIT +(8 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s2_alter_tbl2_add_text s1_begin s1_insert_tbl1 s1_insert_tbl2_3col s2_alter_tbl2_3rd_char s1_insert_tbl2_3col s1_commit s1_insert_tbl2_3col s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s2_alter_tbl2_add_text: ALTER TABLE tbl2 ADD COLUMN val3 TEXT; step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); @@ -548,25 +686,31 @@ step s1_commit: COMMIT; step s2_alter_tbl2_3rd_char: <... completed> step s1_insert_tbl2_3col: INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 -table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[text]:'1' -table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[text]:'1' -COMMIT -BEGIN +data +-------------------------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[text]:'1' +table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[text]:'1' +COMMIT +BEGIN table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[character varying]:'1' -COMMIT -?column? +COMMIT +(8 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s2_alter_tbl2_add_char s1_begin s1_insert_tbl1 s2_alter_tbl2_3rd_text s1_insert_tbl2_3col s1_commit s2_alter_tbl2_drop_3rd_col s1_insert_tbl2 s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s2_alter_tbl2_add_char: ALTER TABLE tbl2 ADD COLUMN val3 character varying; step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); @@ -576,24 +720,30 @@ step s1_commit: COMMIT; step s2_alter_tbl2_drop_3rd_col: ALTER TABLE tbl2 DROP COLUMN val3; step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +data +------------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[text]:'1' -COMMIT -BEGIN -table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 -COMMIT -?column? +COMMIT +BEGIN +table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 +COMMIT +(7 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s2_alter_tbl2_add_text s1_begin s1_insert_tbl1 s2_alter_tbl2_3rd_char s1_insert_tbl2_3col s1_commit s2_alter_tbl2_drop_3rd_col s1_insert_tbl2 s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s2_alter_tbl2_add_text: ALTER TABLE tbl2 ADD COLUMN val3 TEXT; step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); @@ -603,24 +753,30 @@ step s1_commit: COMMIT; step s2_alter_tbl2_drop_3rd_col: ALTER TABLE tbl2 DROP COLUMN val3; step s1_insert_tbl2: INSERT INTO tbl2 (val1, val2) VALUES (1, 1); step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 +data +-------------------------------------------------------------------------------------- +BEGIN +table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 val3[character varying]:'1' -COMMIT -BEGIN -table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 -COMMIT -?column? +COMMIT +BEGIN +table public.tbl2: INSERT: val1[integer]:1 val2[integer]:1 +COMMIT +(7 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s1_init s2_alter_tbl2_add_char s1_begin s1_insert_tbl1 s2_alter_tbl2_drop_3rd_col s1_insert_tbl1 s1_commit s2_get_changes step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s2_alter_tbl2_add_char: ALTER TABLE tbl2 ADD COLUMN val3 character varying; step s1_begin: BEGIN; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); @@ -628,12 +784,16 @@ step s2_alter_tbl2_drop_3rd_col: ALTER TABLE tbl2 DROP COLUMN val3; step s1_insert_tbl1: INSERT INTO tbl1 (val1, val2) VALUES (1, 1); step s1_commit: COMMIT; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +---------------------------------------------------------- +BEGIN table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 table public.tbl1: INSERT: val1[integer]:1 val2[integer]:1 -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop diff --git a/contrib/test_decoding/expected/concurrent_stream.out b/contrib/test_decoding/expected/concurrent_stream.out index 6f8b2176db50e..bf1e1326c6196 100644 --- a/contrib/test_decoding/expected/concurrent_stream.out +++ b/contrib/test_decoding/expected/concurrent_stream.out @@ -9,12 +9,16 @@ step s1_toast_insert: INSERT INTO stream_test SELECT large_val(); step s2_ddl: CREATE TABLE stream_test2(data text); step s1_commit: COMMIT; step s1_get_stream_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL,NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'stream-changes', '1'); -data - +data +---------------------------------------- opening a streamed block for transaction -streaming change for transaction +streaming change for transaction closing a streamed block for transaction -committing streamed transaction -?column? +committing streamed transaction +(4 rows) + +?column? +-------- +stop +(1 row) -stop diff --git a/contrib/test_decoding/expected/delayed_startup.out b/contrib/test_decoding/expected/delayed_startup.out index db8c525ac408b..d10de3658acc8 100644 --- a/contrib/test_decoding/expected/delayed_startup.out +++ b/contrib/test_decoding/expected/delayed_startup.out @@ -6,33 +6,45 @@ step s1w: INSERT INTO do_write DEFAULT VALUES; step s2init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); step s1c: COMMIT; step s2init: <... completed> -?column? +?column? +-------- +init +(1 row) -init step s2start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false'); -data +data +---- +(0 rows) step s1b: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1w: INSERT INTO do_write DEFAULT VALUES; step s1c: COMMIT; step s2start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false'); -data - -BEGIN +data +-------------------------------------------- +BEGIN table public.do_write: INSERT: id[integer]:2 -COMMIT +COMMIT +(3 rows) + step s1b: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1w: INSERT INTO do_write DEFAULT VALUES; step s2start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false'); -data +data +---- +(0 rows) step s1c: COMMIT; step s2start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false'); -data - -BEGIN +data +-------------------------------------------- +BEGIN table public.do_write: INSERT: id[integer]:3 -COMMIT -?column? +COMMIT +(3 rows) + +?column? +-------- +stop +(1 row) -stop diff --git a/contrib/test_decoding/expected/mxact.out b/contrib/test_decoding/expected/mxact.out index f0d96cc67d0b2..03ad3df099968 100644 --- a/contrib/test_decoding/expected/mxact.out +++ b/contrib/test_decoding/expected/mxact.out @@ -2,65 +2,89 @@ Parsed test spec with 3 sessions starting permutation: s0init s0start s1begin s1sharepgclass s2begin s2sharepgclass s0w s0start s2commit s1commit step s0init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s0start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false'); -data +data +---- +(0 rows) step s1begin: BEGIN; step s1sharepgclass: SELECT count(*) > 1 FROM (SELECT * FROM pg_class FOR SHARE) s; -?column? +?column? +-------- +t +(1 row) -t step s2begin: BEGIN; step s2sharepgclass: SELECT count(*) > 1 FROM (SELECT * FROM pg_class FOR SHARE) s; -?column? +?column? +-------- +t +(1 row) -t step s0w: INSERT INTO do_write DEFAULT VALUES; step s0start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false'); -data - -BEGIN +data +-------------------------------------------- +BEGIN table public.do_write: INSERT: id[integer]:1 -COMMIT +COMMIT +(3 rows) + step s2commit: COMMIT; step s1commit: COMMIT; -?column? +?column? +-------- +stop +(1 row) -stop starting permutation: s0init s0start s1begin s1keysharepgclass s2begin s2keysharepgclass s0alter s0w s0start s2commit s1commit step s0init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -?column? +?column? +-------- +init +(1 row) -init step s0start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false'); -data +data +---- +(0 rows) step s1begin: BEGIN; step s1keysharepgclass: SELECT count(*) > 1 FROM (SELECT * FROM pg_class FOR KEY SHARE) s; -?column? +?column? +-------- +t +(1 row) -t step s2begin: BEGIN; step s2keysharepgclass: SELECT count(*) > 1 FROM (SELECT * FROM pg_class FOR KEY SHARE) s; -?column? +?column? +-------- +t +(1 row) -t step s0alter: ALTER TABLE do_write ADD column ts timestamptz; step s0w: INSERT INTO do_write DEFAULT VALUES; step s0start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false'); -data - -BEGIN -COMMIT -BEGIN +data +------------------------------------------------------------------------------ +BEGIN +COMMIT +BEGIN table public.do_write: INSERT: id[integer]:1 ts[timestamp with time zone]:null -COMMIT +COMMIT +(5 rows) + step s2commit: COMMIT; step s1commit: COMMIT; -?column? +?column? +-------- +stop +(1 row) -stop diff --git a/contrib/test_decoding/expected/oldest_xmin.out b/contrib/test_decoding/expected/oldest_xmin.out index 02a091398fc15..dd6053f9c1f4b 100644 --- a/contrib/test_decoding/expected/oldest_xmin.out +++ b/contrib/test_decoding/expected/oldest_xmin.out @@ -3,28 +3,38 @@ Parsed test spec with 2 sessions starting permutation: s0_begin s0_getxid s1_begin s1_insert s0_alter s0_commit s0_checkpoint s0_get_changes s0_get_changes s1_commit s0_vacuum s0_get_changes step s0_begin: BEGIN; step s0_getxid: SELECT pg_current_xact_id() IS NULL; -?column? +?column? +-------- +f +(1 row) -f step s1_begin: BEGIN; step s1_insert: INSERT INTO harvest VALUES ((1, 2, 3)); step s0_alter: ALTER TYPE basket DROP ATTRIBUTE mangos; step s0_commit: COMMIT; step s0_checkpoint: CHECKPOINT; step s0_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data +data +---- +(0 rows) step s0_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data +data +---- +(0 rows) step s1_commit: COMMIT; step s0_vacuum: VACUUM pg_attribute; step s0_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +------------------------------------------------------ +BEGIN table public.harvest: INSERT: fruits[basket]:'(1,2,3)' -COMMIT -?column? +COMMIT +(3 rows) + +?column? +-------- +stop +(1 row) -stop diff --git a/contrib/test_decoding/expected/ondisk_startup.out b/contrib/test_decoding/expected/ondisk_startup.out index 586b03d75dbb8..bc7ff07164879 100644 --- a/contrib/test_decoding/expected/ondisk_startup.out +++ b/contrib/test_decoding/expected/ondisk_startup.out @@ -3,50 +3,64 @@ Parsed test spec with 3 sessions starting permutation: s2b s2txid s1init s3b s3txid s2alter s2c s2b s2txid s3c s2c s1insert s1checkpoint s1start s1insert s1alter s1insert s1start step s2b: BEGIN; step s2txid: SELECT pg_current_xact_id() IS NULL; -?column? +?column? +-------- +f +(1 row) -f step s1init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); step s3b: BEGIN; step s3txid: SELECT pg_current_xact_id() IS NULL; -?column? +?column? +-------- +f +(1 row) -f step s2alter: ALTER TABLE do_write ADD COLUMN addedbys2 int; step s2c: COMMIT; step s2b: BEGIN; step s2txid: SELECT pg_current_xact_id() IS NULL; -?column? +?column? +-------- +f +(1 row) -f step s3c: COMMIT; step s1init: <... completed> -?column? +?column? +-------- +init +(1 row) -init step s2c: COMMIT; step s1insert: INSERT INTO do_write DEFAULT VALUES; step s1checkpoint: CHECKPOINT; step s1start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false'); -data - -BEGIN +data +-------------------------------------------------------------------- +BEGIN table public.do_write: INSERT: id[integer]:1 addedbys2[integer]:null -COMMIT +COMMIT +(3 rows) + step s1insert: INSERT INTO do_write DEFAULT VALUES; step s1alter: ALTER TABLE do_write ADD COLUMN addedbys1 int; step s1insert: INSERT INTO do_write DEFAULT VALUES; step s1start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false'); -data - -BEGIN -table public.do_write: INSERT: id[integer]:2 addedbys2[integer]:null -COMMIT -BEGIN -COMMIT -BEGIN +data +-------------------------------------------------------------------------------------------- +BEGIN +table public.do_write: INSERT: id[integer]:2 addedbys2[integer]:null +COMMIT +BEGIN +COMMIT +BEGIN table public.do_write: INSERT: id[integer]:3 addedbys2[integer]:null addedbys1[integer]:null -COMMIT -?column? +COMMIT +(8 rows) + +?column? +-------- +stop +(1 row) -stop diff --git a/contrib/test_decoding/expected/snapshot_transfer.out b/contrib/test_decoding/expected/snapshot_transfer.out index c3a00009946be..833f47874cbcc 100644 --- a/contrib/test_decoding/expected/snapshot_transfer.out +++ b/contrib/test_decoding/expected/snapshot_transfer.out @@ -4,32 +4,40 @@ starting permutation: s0_begin s0_begin_sub0 s0_log_assignment s0_sub_get_base_s step s0_begin: BEGIN; step s0_begin_sub0: SAVEPOINT s0; step s0_log_assignment: SELECT pg_current_xact_id() IS NULL; -?column? +?column? +-------- +f +(1 row) -f step s0_sub_get_base_snap: INSERT INTO dummy VALUES (0); step s1_produce_new_snap: ALTER TABLE harvest ADD COLUMN mangos int; step s0_insert: INSERT INTO harvest VALUES (1, 2, 3); step s0_end_sub0: RELEASE SAVEPOINT s0; step s0_commit: COMMIT; step s0_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.dummy: INSERT: i[integer]:0 +data +---------------------------------------------------------------------------------- +BEGIN +table public.dummy: INSERT: i[integer]:0 table public.harvest: INSERT: apples[integer]:1 pears[integer]:2 mangos[integer]:3 -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop starting permutation: s0_begin s0_begin_sub0 s0_log_assignment s0_begin_sub1 s0_sub_get_base_snap s1_produce_new_snap s0_insert s0_end_sub1 s0_end_sub0 s0_commit s0_get_changes step s0_begin: BEGIN; step s0_begin_sub0: SAVEPOINT s0; step s0_log_assignment: SELECT pg_current_xact_id() IS NULL; -?column? +?column? +-------- +f +(1 row) -f step s0_begin_sub1: SAVEPOINT s1; step s0_sub_get_base_snap: INSERT INTO dummy VALUES (0); step s1_produce_new_snap: ALTER TABLE harvest ADD COLUMN mangos int; @@ -38,12 +46,16 @@ step s0_end_sub1: RELEASE SAVEPOINT s1; step s0_end_sub0: RELEASE SAVEPOINT s0; step s0_commit: COMMIT; step s0_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN -table public.dummy: INSERT: i[integer]:0 +data +---------------------------------------------------------------------------------- +BEGIN +table public.dummy: INSERT: i[integer]:0 table public.harvest: INSERT: apples[integer]:1 pears[integer]:2 mangos[integer]:3 -COMMIT -?column? +COMMIT +(4 rows) + +?column? +-------- +stop +(1 row) -stop diff --git a/contrib/test_decoding/expected/subxact_without_top.out b/contrib/test_decoding/expected/subxact_without_top.out index 99ce998822570..4241b0015bd66 100644 --- a/contrib/test_decoding/expected/subxact_without_top.out +++ b/contrib/test_decoding/expected/subxact_without_top.out @@ -15,25 +15,35 @@ step s2_checkpoint: CHECKPOINT; step s1_begin: BEGIN; step s1_dml: INSERT INTO harvest VALUES (43); step s0_many_subxacts: select subxacts(); -subxacts +subxacts +-------- + +(1 row) - step s0_commit: COMMIT; step s2_checkpoint: CHECKPOINT; step s2_get_changes_suppress_output: SELECT null n FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1') GROUP BY n; -n +n +- + +(1 row) - step s2_get_changes_suppress_output: SELECT null n FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1') GROUP BY n; -n +n +- +(0 rows) step s1_commit: COMMIT; step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); -data - -BEGIN +data +------------------------------------------------ +BEGIN table public.harvest: INSERT: apples[integer]:43 -COMMIT -?column? +COMMIT +(3 rows) + +?column? +-------- +stop +(1 row) -stop diff --git a/contrib/test_decoding/expected/twophase_snapshot.out b/contrib/test_decoding/expected/twophase_snapshot.out index 0e8e1f50fe497..f555ffddf74f8 100644 --- a/contrib/test_decoding/expected/twophase_snapshot.out +++ b/contrib/test_decoding/expected/twophase_snapshot.out @@ -3,39 +3,51 @@ Parsed test spec with 3 sessions starting permutation: s2b s2txid s1init s3b s3txid s2c s2b s2insert s2p s3c s1insert s1start s2cp s1start step s2b: BEGIN; step s2txid: SELECT pg_current_xact_id() IS NULL; -?column? +?column? +-------- +f +(1 row) -f step s1init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding', false, true); step s3b: BEGIN; step s3txid: SELECT pg_current_xact_id() IS NULL; -?column? +?column? +-------- +f +(1 row) -f step s2c: COMMIT; step s2b: BEGIN; step s2insert: INSERT INTO do_write DEFAULT VALUES; step s2p: PREPARE TRANSACTION 'test1'; step s3c: COMMIT; step s1init: <... completed> -?column? +?column? +-------- +init +(1 row) -init step s1insert: INSERT INTO do_write DEFAULT VALUES; step s1start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false', 'skip-empty-xacts', '1'); -data - -BEGIN +data +-------------------------------------------- +BEGIN table public.do_write: INSERT: id[integer]:2 -COMMIT +COMMIT +(3 rows) + step s2cp: COMMIT PREPARED 'test1'; step s1start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false', 'skip-empty-xacts', '1'); -data - -BEGIN +data +-------------------------------------------- +BEGIN table public.do_write: INSERT: id[integer]:1 -PREPARE TRANSACTION 'test1' -COMMIT PREPARED 'test1' -?column? +PREPARE TRANSACTION 'test1' +COMMIT PREPARED 'test1' +(4 rows) + +?column? +-------- +stop +(1 row) -stop diff --git a/src/test/isolation/expected/aborted-keyrevoke.out b/src/test/isolation/expected/aborted-keyrevoke.out index c93762394ffa4..a03542636faa0 100644 --- a/src/test/isolation/expected/aborted-keyrevoke.out +++ b/src/test/isolation/expected/aborted-keyrevoke.out @@ -5,14 +5,18 @@ step s1s: SAVEPOINT f; step s1u: UPDATE foo SET key = 2; step s1r: ROLLBACK TO f; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1c: COMMIT; step s2l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; starting permutation: s1s s1u s1r s1l s2l s1c s2c @@ -20,13 +24,17 @@ step s1s: SAVEPOINT f; step s1u: UPDATE foo SET key = 2; step s1r: ROLLBACK TO f; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1c: COMMIT; step s2c: COMMIT; @@ -35,13 +43,17 @@ step s1s: SAVEPOINT f; step s1u: UPDATE foo SET key = 2; step s1r: ROLLBACK TO f; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; step s1c: COMMIT; @@ -50,13 +62,17 @@ step s1s: SAVEPOINT f; step s1u: UPDATE foo SET key = 2; step s1r: ROLLBACK TO f; step s2l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1c: COMMIT; step s2c: COMMIT; @@ -65,13 +81,17 @@ step s1s: SAVEPOINT f; step s1u: UPDATE foo SET key = 2; step s1r: ROLLBACK TO f; step s2l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; step s1c: COMMIT; @@ -80,14 +100,18 @@ step s1s: SAVEPOINT f; step s1u: UPDATE foo SET key = 2; step s1r: ROLLBACK TO f; step s2l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1c: COMMIT; starting permutation: s1s s1u s2l s1r s1l s1c s2c @@ -96,13 +120,17 @@ step s1u: UPDATE foo SET key = 2; step s2l: SELECT * FROM foo FOR KEY SHARE; step s1r: ROLLBACK TO f; step s2l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1c: COMMIT; step s2c: COMMIT; @@ -112,13 +140,17 @@ step s1u: UPDATE foo SET key = 2; step s2l: SELECT * FROM foo FOR KEY SHARE; step s1r: ROLLBACK TO f; step s2l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; step s1c: COMMIT; @@ -128,89 +160,113 @@ step s1u: UPDATE foo SET key = 2; step s2l: SELECT * FROM foo FOR KEY SHARE; step s1r: ROLLBACK TO f; step s2l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1c: COMMIT; starting permutation: s1s s2l s1u s2c s1r s1l s1c step s1s: SAVEPOINT f; step s2l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1u: UPDATE foo SET key = 2; step s2c: COMMIT; step s1u: <... completed> step s1r: ROLLBACK TO f; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1c: COMMIT; starting permutation: s1s s2l s2c s1u s1r s1l s1c step s1s: SAVEPOINT f; step s2l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; step s1u: UPDATE foo SET key = 2; step s1r: ROLLBACK TO f; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1c: COMMIT; starting permutation: s2l s1s s1u s2c s1r s1l s1c step s2l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1s: SAVEPOINT f; step s1u: UPDATE foo SET key = 2; step s2c: COMMIT; step s1u: <... completed> step s1r: ROLLBACK TO f; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1c: COMMIT; starting permutation: s2l s1s s2c s1u s1r s1l s1c step s2l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1s: SAVEPOINT f; step s2c: COMMIT; step s1u: UPDATE foo SET key = 2; step s1r: ROLLBACK TO f; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1c: COMMIT; starting permutation: s2l s2c s1s s1u s1r s1l s1c step s2l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; step s1s: SAVEPOINT f; step s1u: UPDATE foo SET key = 2; step s1r: ROLLBACK TO f; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1c: COMMIT; diff --git a/src/test/isolation/expected/alter-table-1.out b/src/test/isolation/expected/alter-table-1.out index dd5d8b11b6153..5e88174be4ff6 100644 --- a/src/test/isolation/expected/alter-table-1.out +++ b/src/test/isolation/expected/alter-table-1.out @@ -8,16 +8,20 @@ step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 sc1 s2 at2 rx1 sc2 wx rx3 c2 @@ -27,17 +31,21 @@ step sc1: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc2: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 sc1 s2 at2 rx1 wx sc2 rx3 c2 @@ -47,17 +55,21 @@ step sc1: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 sc1 s2 at2 rx1 wx rx3 sc2 c2 @@ -67,16 +79,20 @@ step sc1: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; @@ -87,16 +103,20 @@ step sc1: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; @@ -106,18 +126,22 @@ step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) N step sc1: COMMIT; step s2: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 sc1 s2 rx1 at2 wx sc2 rx3 c2 @@ -126,18 +150,22 @@ step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) N step sc1: COMMIT; step s2: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 sc1 s2 rx1 at2 wx rx3 sc2 c2 @@ -146,17 +174,21 @@ step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) N step sc1: COMMIT; step s2: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; @@ -166,17 +198,21 @@ step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) N step sc1: COMMIT; step s2: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; @@ -186,18 +222,22 @@ step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) N step sc1: COMMIT; step s2: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 sc1 s2 rx1 wx at2 rx3 sc2 c2 @@ -206,17 +246,21 @@ step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) N step sc1: COMMIT; step s2: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; @@ -226,17 +270,21 @@ step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) N step sc1: COMMIT; step s2: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; @@ -246,16 +294,20 @@ step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) N step sc1: COMMIT; step s2: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step c2: COMMIT; @@ -266,16 +318,20 @@ step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) N step sc1: COMMIT; step s2: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; step sc2: COMMIT; @@ -286,16 +342,20 @@ step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) N step sc1: COMMIT; step s2: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -305,19 +365,23 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 sc1 rx1 s2 at2 wx sc2 rx3 c2 @@ -325,19 +389,23 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 sc1 rx1 s2 at2 wx rx3 sc2 c2 @@ -345,18 +413,22 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; @@ -365,18 +437,22 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; @@ -385,19 +461,23 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 sc1 rx1 s2 wx at2 rx3 sc2 c2 @@ -405,18 +485,22 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; @@ -425,18 +509,22 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; @@ -445,17 +533,21 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step c2: COMMIT; @@ -465,17 +557,21 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; step sc2: COMMIT; @@ -485,17 +581,21 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -505,19 +605,23 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 sc1 rx1 wx s2 at2 rx3 sc2 c2 @@ -525,18 +629,22 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; @@ -545,18 +653,22 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; @@ -565,17 +677,21 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step c2: COMMIT; @@ -585,17 +701,21 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; step sc2: COMMIT; @@ -605,17 +725,21 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -625,16 +749,20 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -645,16 +773,20 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; @@ -665,16 +797,20 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -685,16 +821,20 @@ step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -704,59 +844,71 @@ starting permutation: s1 at1 rx1 sc1 s2 at2 sc2 wx rx3 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 rx1 sc1 s2 at2 wx sc2 rx3 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 rx1 sc1 s2 at2 wx rx3 sc2 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; @@ -764,19 +916,23 @@ starting permutation: s1 at1 rx1 sc1 s2 at2 wx rx3 c2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; @@ -784,39 +940,47 @@ starting permutation: s1 at1 rx1 sc1 s2 wx at2 sc2 rx3 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 rx1 sc1 s2 wx at2 rx3 sc2 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; @@ -824,19 +988,23 @@ starting permutation: s1 at1 rx1 sc1 s2 wx at2 rx3 c2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; @@ -844,18 +1012,22 @@ starting permutation: s1 at1 rx1 sc1 s2 wx rx3 at2 sc2 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step c2: COMMIT; @@ -864,18 +1036,22 @@ starting permutation: s1 at1 rx1 sc1 s2 wx rx3 at2 c2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; step sc2: COMMIT; @@ -884,18 +1060,22 @@ starting permutation: s1 at1 rx1 sc1 s2 wx rx3 c2 at2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -904,39 +1084,47 @@ starting permutation: s1 at1 rx1 sc1 wx s2 at2 sc2 rx3 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 rx1 sc1 wx s2 at2 rx3 sc2 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; @@ -944,19 +1132,23 @@ starting permutation: s1 at1 rx1 sc1 wx s2 at2 rx3 c2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; @@ -964,18 +1156,22 @@ starting permutation: s1 at1 rx1 sc1 wx s2 rx3 at2 sc2 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step c2: COMMIT; @@ -984,18 +1180,22 @@ starting permutation: s1 at1 rx1 sc1 wx s2 rx3 at2 c2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; step sc2: COMMIT; @@ -1004,18 +1204,22 @@ starting permutation: s1 at1 rx1 sc1 wx s2 rx3 c2 at2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -1024,17 +1228,21 @@ starting permutation: s1 at1 rx1 sc1 wx rx3 s2 at2 sc2 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -1044,17 +1252,21 @@ starting permutation: s1 at1 rx1 sc1 wx rx3 s2 at2 c2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; @@ -1064,17 +1276,21 @@ starting permutation: s1 at1 rx1 sc1 wx rx3 s2 c2 at2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -1084,17 +1300,21 @@ starting permutation: s1 at1 rx1 sc1 wx rx3 c2 s2 at2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -1104,9 +1324,11 @@ starting permutation: s1 at1 rx1 wx sc1 s2 at2 sc2 rx3 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> @@ -1114,31 +1336,37 @@ step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 at1 rx1 wx sc1 s2 at2 rx3 sc2 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; @@ -1146,20 +1374,24 @@ starting permutation: s1 at1 rx1 wx sc1 s2 at2 rx3 c2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; @@ -1167,19 +1399,23 @@ starting permutation: s1 at1 rx1 wx sc1 s2 rx3 at2 sc2 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step c2: COMMIT; @@ -1188,19 +1424,23 @@ starting permutation: s1 at1 rx1 wx sc1 s2 rx3 at2 c2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; step sc2: COMMIT; @@ -1209,19 +1449,23 @@ starting permutation: s1 at1 rx1 wx sc1 s2 rx3 c2 at2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -1230,18 +1474,22 @@ starting permutation: s1 at1 rx1 wx sc1 rx3 s2 at2 sc2 c2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -1251,18 +1499,22 @@ starting permutation: s1 at1 rx1 wx sc1 rx3 s2 at2 c2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; @@ -1272,18 +1524,22 @@ starting permutation: s1 at1 rx1 wx sc1 rx3 s2 c2 at2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -1293,18 +1549,22 @@ starting permutation: s1 at1 rx1 wx sc1 rx3 c2 s2 at2 sc2 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -1313,9 +1573,11 @@ step sc2: COMMIT; starting permutation: s1 rx1 at1 sc1 s2 at2 sc2 wx rx3 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step s2: BEGIN; @@ -1323,19 +1585,23 @@ step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 rx1 at1 sc1 s2 at2 wx sc2 rx3 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step s2: BEGIN; @@ -1343,59 +1609,71 @@ step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 rx1 at1 sc1 s2 at2 wx rx3 sc2 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; starting permutation: s1 rx1 at1 sc1 s2 at2 wx rx3 c2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; starting permutation: s1 rx1 at1 sc1 s2 wx at2 sc2 rx3 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step s2: BEGIN; @@ -1403,69 +1681,83 @@ step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 rx1 at1 sc1 s2 wx at2 rx3 sc2 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; starting permutation: s1 rx1 at1 sc1 s2 wx at2 rx3 c2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; starting permutation: s1 rx1 at1 sc1 s2 wx rx3 at2 sc2 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step c2: COMMIT; @@ -1473,19 +1765,23 @@ step c2: COMMIT; starting permutation: s1 rx1 at1 sc1 s2 wx rx3 at2 c2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; step sc2: COMMIT; @@ -1493,19 +1789,23 @@ step sc2: COMMIT; starting permutation: s1 rx1 at1 sc1 s2 wx rx3 c2 at2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -1513,9 +1813,11 @@ step sc2: COMMIT; starting permutation: s1 rx1 at1 sc1 wx s2 at2 sc2 rx3 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); @@ -1523,69 +1825,83 @@ step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 rx1 at1 sc1 wx s2 at2 rx3 sc2 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; starting permutation: s1 rx1 at1 sc1 wx s2 at2 rx3 c2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; starting permutation: s1 rx1 at1 sc1 wx s2 rx3 at2 sc2 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step c2: COMMIT; @@ -1593,19 +1909,23 @@ step c2: COMMIT; starting permutation: s1 rx1 at1 sc1 wx s2 rx3 at2 c2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; step sc2: COMMIT; @@ -1613,19 +1933,23 @@ step sc2: COMMIT; starting permutation: s1 rx1 at1 sc1 wx s2 rx3 c2 at2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -1633,18 +1957,22 @@ step sc2: COMMIT; starting permutation: s1 rx1 at1 sc1 wx rx3 s2 at2 sc2 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -1653,18 +1981,22 @@ step c2: COMMIT; starting permutation: s1 rx1 at1 sc1 wx rx3 s2 at2 c2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; @@ -1673,18 +2005,22 @@ step sc2: COMMIT; starting permutation: s1 rx1 at1 sc1 wx rx3 s2 c2 at2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -1693,18 +2029,22 @@ step sc2: COMMIT; starting permutation: s1 rx1 at1 sc1 wx rx3 c2 s2 at2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -1713,9 +2053,11 @@ step sc2: COMMIT; starting permutation: s1 rx1 at1 wx sc1 s2 at2 sc2 rx3 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; @@ -1724,19 +2066,23 @@ step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: s1 rx1 at1 wx sc1 s2 at2 rx3 sc2 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; @@ -1744,20 +2090,24 @@ step wx: <... completed> step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; starting permutation: s1 rx1 at1 wx sc1 s2 at2 rx3 c2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; @@ -1765,31 +2115,37 @@ step wx: <... completed> step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; starting permutation: s1 rx1 at1 wx sc1 s2 rx3 at2 sc2 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step c2: COMMIT; @@ -1797,20 +2153,24 @@ step c2: COMMIT; starting permutation: s1 rx1 at1 wx sc1 s2 rx3 at2 c2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; step sc2: COMMIT; @@ -1818,20 +2178,24 @@ step sc2: COMMIT; starting permutation: s1 rx1 at1 wx sc1 s2 rx3 c2 at2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -1839,19 +2203,23 @@ step sc2: COMMIT; starting permutation: s1 rx1 at1 wx sc1 rx3 s2 at2 sc2 c2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -1860,19 +2228,23 @@ step c2: COMMIT; starting permutation: s1 rx1 at1 wx sc1 rx3 s2 at2 c2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; @@ -1881,19 +2253,23 @@ step sc2: COMMIT; starting permutation: s1 rx1 at1 wx sc1 rx3 s2 c2 at2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -1902,19 +2278,23 @@ step sc2: COMMIT; starting permutation: s1 rx1 at1 wx sc1 rx3 c2 s2 at2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -1923,17 +2303,21 @@ step sc2: COMMIT; starting permutation: s1 rx1 wx at1 rx3 c2 sc1 s2 at2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at1: <... completed> step sc1: COMMIT; @@ -1944,16 +2328,20 @@ step sc2: COMMIT; starting permutation: s1 rx1 wx rx3 at1 c2 sc1 s2 at2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step c2: COMMIT; step at1: <... completed> @@ -1965,16 +2353,20 @@ step sc2: COMMIT; starting permutation: s1 rx1 wx rx3 c2 at1 sc1 s2 at2 sc2 step s1: BEGIN; step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; @@ -1984,9 +2376,11 @@ step sc2: COMMIT; starting permutation: rx1 s1 at1 sc1 s2 at2 sc2 wx rx3 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; @@ -1995,18 +2389,22 @@ step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: rx1 s1 at1 sc1 s2 at2 wx sc2 rx3 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; @@ -2015,18 +2413,22 @@ step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: rx1 s1 at1 sc1 s2 at2 wx rx3 sc2 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; @@ -2034,19 +2436,23 @@ step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; starting permutation: rx1 s1 at1 sc1 s2 at2 wx rx3 c2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; @@ -2054,19 +2460,23 @@ step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; starting permutation: rx1 s1 at1 sc1 s2 wx at2 sc2 rx3 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; @@ -2075,18 +2485,22 @@ step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: rx1 s1 at1 sc1 s2 wx at2 rx3 sc2 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; @@ -2094,19 +2508,23 @@ step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; starting permutation: rx1 s1 at1 sc1 s2 wx at2 rx3 c2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; @@ -2114,79 +2532,95 @@ step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; starting permutation: rx1 s1 at1 sc1 s2 wx rx3 at2 sc2 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step c2: COMMIT; starting permutation: rx1 s1 at1 sc1 s2 wx rx3 at2 c2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; step sc2: COMMIT; starting permutation: rx1 s1 at1 sc1 s2 wx rx3 c2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step s2: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; starting permutation: rx1 s1 at1 sc1 wx s2 at2 sc2 rx3 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; @@ -2195,18 +2629,22 @@ step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: rx1 s1 at1 sc1 wx s2 at2 rx3 sc2 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; @@ -2214,19 +2652,23 @@ step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; starting permutation: rx1 s1 at1 sc1 wx s2 at2 rx3 c2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; @@ -2234,89 +2676,107 @@ step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; starting permutation: rx1 s1 at1 sc1 wx s2 rx3 at2 sc2 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step c2: COMMIT; starting permutation: rx1 s1 at1 sc1 wx s2 rx3 at2 c2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; step sc2: COMMIT; starting permutation: rx1 s1 at1 sc1 wx s2 rx3 c2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; starting permutation: rx1 s1 at1 sc1 wx rx3 s2 at2 sc2 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -2324,19 +2784,23 @@ step c2: COMMIT; starting permutation: rx1 s1 at1 sc1 wx rx3 s2 at2 c2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; @@ -2344,19 +2808,23 @@ step sc2: COMMIT; starting permutation: rx1 s1 at1 sc1 wx rx3 s2 c2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -2364,19 +2832,23 @@ step sc2: COMMIT; starting permutation: rx1 s1 at1 sc1 wx rx3 c2 s2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -2384,9 +2856,11 @@ step sc2: COMMIT; starting permutation: rx1 s1 at1 wx sc1 s2 at2 sc2 rx3 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); @@ -2396,18 +2870,22 @@ step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; starting permutation: rx1 s1 at1 wx sc1 s2 at2 rx3 sc2 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); @@ -2416,19 +2894,23 @@ step wx: <... completed> step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step sc2: COMMIT; step c2: COMMIT; starting permutation: rx1 s1 at1 wx sc1 s2 at2 rx3 c2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); @@ -2437,19 +2919,23 @@ step wx: <... completed> step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step sc2: COMMIT; starting permutation: rx1 s1 at1 wx sc1 s2 rx3 at2 sc2 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); @@ -2457,20 +2943,24 @@ step sc1: COMMIT; step wx: <... completed> step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; step c2: COMMIT; starting permutation: rx1 s1 at1 wx sc1 s2 rx3 at2 c2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); @@ -2478,20 +2968,24 @@ step sc1: COMMIT; step wx: <... completed> step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; step sc2: COMMIT; starting permutation: rx1 s1 at1 wx sc1 s2 rx3 c2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); @@ -2499,31 +2993,37 @@ step sc1: COMMIT; step wx: <... completed> step s2: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; starting permutation: rx1 s1 at1 wx sc1 rx3 s2 at2 sc2 c2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step sc2: COMMIT; @@ -2531,20 +3031,24 @@ step c2: COMMIT; starting permutation: rx1 s1 at1 wx sc1 rx3 s2 at2 c2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; step c2: COMMIT; @@ -2552,20 +3056,24 @@ step sc2: COMMIT; starting permutation: rx1 s1 at1 wx sc1 rx3 s2 c2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s2: BEGIN; step c2: COMMIT; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -2573,20 +3081,24 @@ step sc2: COMMIT; starting permutation: rx1 s1 at1 wx sc1 rx3 c2 s2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step wx: INSERT INTO b VALUES (0); step sc1: COMMIT; step wx: <... completed> step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step s2: BEGIN; step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk; @@ -2594,18 +3106,22 @@ step sc2: COMMIT; starting permutation: rx1 s1 wx at1 rx3 c2 sc1 s2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step wx: INSERT INTO b VALUES (0); step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at1: <... completed> step sc1: COMMIT; @@ -2615,17 +3131,21 @@ step sc2: COMMIT; starting permutation: rx1 s1 wx rx3 at1 c2 sc1 s2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step c2: COMMIT; step at1: <... completed> @@ -2636,17 +3156,21 @@ step sc2: COMMIT; starting permutation: rx1 s1 wx rx3 c2 at1 sc1 s2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step s1: BEGIN; step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; @@ -2656,18 +3180,22 @@ step sc2: COMMIT; starting permutation: rx1 wx s1 at1 rx3 c2 sc1 s2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at1: <... completed> step sc1: COMMIT; @@ -2677,17 +3205,21 @@ step sc2: COMMIT; starting permutation: rx1 wx s1 rx3 at1 c2 sc1 s2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step s1: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step c2: COMMIT; step at1: <... completed> @@ -2698,17 +3230,21 @@ step sc2: COMMIT; starting permutation: rx1 wx s1 rx3 c2 at1 sc1 s2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step s1: BEGIN; step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step sc1: COMMIT; @@ -2718,16 +3254,20 @@ step sc2: COMMIT; starting permutation: rx1 wx rx3 s1 at1 c2 sc1 s2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step c2: COMMIT; @@ -2739,16 +3279,20 @@ step sc2: COMMIT; starting permutation: rx1 wx rx3 s1 c2 at1 sc1 s2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step s1: BEGIN; step c2: COMMIT; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; @@ -2759,16 +3303,20 @@ step sc2: COMMIT; starting permutation: rx1 wx rx3 c2 s1 at1 sc1 s2 at2 sc2 step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx: INSERT INTO b VALUES (0); step rx3: SELECT * FROM b WHERE a_id = 3 LIMIT 3; -a_id +a_id +---- + 3 + 3 + 3 +(3 rows) -3 -3 -3 step c2: COMMIT; step s1: BEGIN; step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; diff --git a/src/test/isolation/expected/alter-table-2.out b/src/test/isolation/expected/alter-table-2.out index 33ea4421138ca..819bc332e52d9 100644 --- a/src/test/isolation/expected/alter-table-2.out +++ b/src/test/isolation/expected/alter-table-2.out @@ -6,13 +6,17 @@ step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) N step s1c: COMMIT; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; @@ -23,13 +27,17 @@ step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) N step s2a: BEGIN; step s1c: COMMIT; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; @@ -39,14 +47,18 @@ step s1a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1c: COMMIT; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; @@ -56,13 +68,17 @@ step s1a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1c: COMMIT; step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); @@ -73,13 +89,17 @@ step s1a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s1c: COMMIT; step s2d: <... completed> @@ -92,13 +112,17 @@ step s2a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s1c: COMMIT; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; @@ -108,14 +132,18 @@ step s1a: BEGIN; step s2a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1c: COMMIT; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; @@ -125,13 +153,17 @@ step s1a: BEGIN; step s2a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1c: COMMIT; step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); @@ -142,13 +174,17 @@ step s1a: BEGIN; step s2a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s1c: COMMIT; step s2d: <... completed> @@ -159,15 +195,19 @@ starting permutation: s1a s2a s2b s1b s1c s2c s2d s2e s2f step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s1c: COMMIT; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; @@ -176,14 +216,18 @@ starting permutation: s1a s2a s2b s1b s2c s1c s2d s2e s2f step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1c: COMMIT; step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); @@ -193,14 +237,18 @@ starting permutation: s1a s2a s2b s1b s2c s2d s1c s2e s2f step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s1c: COMMIT; step s2d: <... completed> @@ -211,13 +259,17 @@ starting permutation: s1a s2a s2b s2c s1b s1c s2d s2e s2f step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s1c: COMMIT; step s2d: INSERT INTO b VALUES (0); @@ -228,13 +280,17 @@ starting permutation: s1a s2a s2b s2c s1b s2d s1c s2e s2f step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2d: INSERT INTO b VALUES (0); step s1c: COMMIT; @@ -246,13 +302,17 @@ starting permutation: s1a s2a s2b s2c s2d s1b s2e s2f s1c step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2e: INSERT INTO a VALUES (4); @@ -264,13 +324,17 @@ starting permutation: s1a s2a s2b s2c s2d s2e s1b s2f s1c step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; @@ -282,13 +346,17 @@ starting permutation: s1a s2a s2b s2c s2d s2e s2f s1b s1c step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; @@ -301,13 +369,17 @@ step s1a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s1c: COMMIT; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; @@ -317,14 +389,18 @@ step s2a: BEGIN; step s1a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1c: COMMIT; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; @@ -334,13 +410,17 @@ step s2a: BEGIN; step s1a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1c: COMMIT; step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); @@ -351,13 +431,17 @@ step s2a: BEGIN; step s1a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s1c: COMMIT; step s2d: <... completed> @@ -368,15 +452,19 @@ starting permutation: s2a s1a s2b s1b s1c s2c s2d s2e s2f step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s1c: COMMIT; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; @@ -385,14 +473,18 @@ starting permutation: s2a s1a s2b s1b s2c s1c s2d s2e s2f step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1c: COMMIT; step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); @@ -402,14 +494,18 @@ starting permutation: s2a s1a s2b s1b s2c s2d s1c s2e s2f step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s1c: COMMIT; step s2d: <... completed> @@ -420,13 +516,17 @@ starting permutation: s2a s1a s2b s2c s1b s1c s2d s2e s2f step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s1c: COMMIT; step s2d: INSERT INTO b VALUES (0); @@ -437,13 +537,17 @@ starting permutation: s2a s1a s2b s2c s1b s2d s1c s2e s2f step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2d: INSERT INTO b VALUES (0); step s1c: COMMIT; @@ -455,13 +559,17 @@ starting permutation: s2a s1a s2b s2c s2d s1b s2e s2f s1c step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2e: INSERT INTO a VALUES (4); @@ -473,13 +581,17 @@ starting permutation: s2a s1a s2b s2c s2d s2e s1b s2f s1c step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; @@ -491,13 +603,17 @@ starting permutation: s2a s1a s2b s2c s2d s2e s2f s1b s1c step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; @@ -507,16 +623,20 @@ step s1c: COMMIT; starting permutation: s2a s2b s1a s1b s1c s2c s2d s2e s2f step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s1c: COMMIT; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; @@ -524,15 +644,19 @@ step s2f: COMMIT; starting permutation: s2a s2b s1a s1b s2c s1c s2d s2e s2f step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1c: COMMIT; step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); @@ -541,15 +665,19 @@ step s2f: COMMIT; starting permutation: s2a s2b s1a s1b s2c s2d s1c s2e s2f step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s1c: COMMIT; step s2d: <... completed> @@ -559,14 +687,18 @@ step s2f: COMMIT; starting permutation: s2a s2b s1a s2c s1b s1c s2d s2e s2f step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s1c: COMMIT; step s2d: INSERT INTO b VALUES (0); @@ -576,14 +708,18 @@ step s2f: COMMIT; starting permutation: s2a s2b s1a s2c s1b s2d s1c s2e s2f step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2d: INSERT INTO b VALUES (0); step s1c: COMMIT; @@ -594,14 +730,18 @@ step s2f: COMMIT; starting permutation: s2a s2b s1a s2c s2d s1b s2e s2f s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2e: INSERT INTO a VALUES (4); @@ -612,14 +752,18 @@ step s1c: COMMIT; starting permutation: s2a s2b s1a s2c s2d s2e s1b s2f s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; @@ -630,14 +774,18 @@ step s1c: COMMIT; starting permutation: s2a s2b s1a s2c s2d s2e s2f s1b s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; @@ -647,13 +795,17 @@ step s1c: COMMIT; starting permutation: s2a s2b s2c s1a s1b s1c s2d s2e s2f step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s1c: COMMIT; @@ -664,13 +816,17 @@ step s2f: COMMIT; starting permutation: s2a s2b s2c s1a s1b s2d s1c s2e s2f step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; step s2d: INSERT INTO b VALUES (0); @@ -682,13 +838,17 @@ step s2f: COMMIT; starting permutation: s2a s2b s2c s1a s2d s1b s2e s2f s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1a: BEGIN; step s2d: INSERT INTO b VALUES (0); step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; @@ -700,13 +860,17 @@ step s1c: COMMIT; starting permutation: s2a s2b s2c s1a s2d s2e s1b s2f s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1a: BEGIN; step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); @@ -718,13 +882,17 @@ step s1c: COMMIT; starting permutation: s2a s2b s2c s1a s2d s2e s2f s1b s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s1a: BEGIN; step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); @@ -735,13 +903,17 @@ step s1c: COMMIT; starting permutation: s2a s2b s2c s2d s1a s1b s2e s2f s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s1a: BEGIN; step s1b: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; @@ -753,13 +925,17 @@ step s1c: COMMIT; starting permutation: s2a s2b s2c s2d s1a s2e s1b s2f s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s1a: BEGIN; step s2e: INSERT INTO a VALUES (4); @@ -771,13 +947,17 @@ step s1c: COMMIT; starting permutation: s2a s2b s2c s2d s1a s2e s2f s1b s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s1a: BEGIN; step s2e: INSERT INTO a VALUES (4); @@ -788,13 +968,17 @@ step s1c: COMMIT; starting permutation: s2a s2b s2c s2d s2e s1a s1b s2f s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s1a: BEGIN; @@ -806,13 +990,17 @@ step s1c: COMMIT; starting permutation: s2a s2b s2c s2d s2e s1a s2f s1b s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s1a: BEGIN; @@ -823,13 +1011,17 @@ step s1c: COMMIT; starting permutation: s2a s2b s2c s2d s2e s2f s1a s1b s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; -a_id +a_id +---- + 3 +(1 row) -3 step s2d: INSERT INTO b VALUES (0); step s2e: INSERT INTO a VALUES (4); step s2f: COMMIT; diff --git a/src/test/isolation/expected/alter-table-3.out b/src/test/isolation/expected/alter-table-3.out index aad837206977f..427364ee89e54 100644 --- a/src/test/isolation/expected/alter-table-3.out +++ b/src/test/isolation/expected/alter-table-3.out @@ -7,9 +7,11 @@ step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; @@ -21,9 +23,11 @@ step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2a: BEGIN; step s1d: COMMIT; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; @@ -34,9 +38,11 @@ step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1d: COMMIT; step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" @@ -48,9 +54,11 @@ step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> @@ -64,9 +72,11 @@ step s2a: BEGIN; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; @@ -77,9 +87,11 @@ step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2a: BEGIN; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1d: COMMIT; step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" @@ -91,9 +103,11 @@ step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2a: BEGIN; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> @@ -105,9 +119,11 @@ step s1a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; step s2c: INSERT INTO a VALUES (0); @@ -119,9 +135,11 @@ step s1a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; @@ -134,9 +152,11 @@ step s1a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; @@ -151,9 +171,11 @@ step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; @@ -164,9 +186,11 @@ step s2a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1d: COMMIT; step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" @@ -178,9 +202,11 @@ step s2a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> @@ -192,9 +218,11 @@ step s1a: BEGIN; step s2a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; step s2c: INSERT INTO a VALUES (0); @@ -206,9 +234,11 @@ step s1a: BEGIN; step s2a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; @@ -221,9 +251,11 @@ step s1a: BEGIN; step s2a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; @@ -235,9 +267,11 @@ starting permutation: s1a s2a s2b s1b s1c s1d s2c s2d step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; @@ -249,9 +283,11 @@ starting permutation: s1a s2a s2b s1b s1c s2c s1d s2d step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); @@ -264,9 +300,11 @@ starting permutation: s1a s2a s2b s1b s2c s1c s1d s2d step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); step s1c: ALTER TABLE a ENABLE TRIGGER t; @@ -279,9 +317,11 @@ starting permutation: s1a s2a s2b s2c s1b s1c s1d s2d step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s1b: ALTER TABLE a DISABLE TRIGGER t; @@ -293,9 +333,11 @@ starting permutation: s1a s2a s2b s2c s1b s1c s2d s1d step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s1b: ALTER TABLE a DISABLE TRIGGER t; @@ -307,9 +349,11 @@ starting permutation: s1a s2a s2b s2c s1b s2d s1c s1d step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s1b: ALTER TABLE a DISABLE TRIGGER t; @@ -321,9 +365,11 @@ starting permutation: s1a s2a s2b s2c s2d s1b s1c s1d step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; @@ -338,9 +384,11 @@ step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; @@ -351,9 +399,11 @@ step s1a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1d: COMMIT; step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" @@ -365,9 +415,11 @@ step s1a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; step s2c: <... completed> @@ -379,9 +431,11 @@ step s2a: BEGIN; step s1a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; step s2c: INSERT INTO a VALUES (0); @@ -393,9 +447,11 @@ step s2a: BEGIN; step s1a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); step s1d: COMMIT; @@ -408,9 +464,11 @@ step s2a: BEGIN; step s1a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; @@ -422,9 +480,11 @@ starting permutation: s2a s1a s2b s1b s1c s1d s2c s2d step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s1d: COMMIT; @@ -436,9 +496,11 @@ starting permutation: s2a s1a s2b s1b s1c s2c s1d s2d step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); @@ -451,9 +513,11 @@ starting permutation: s2a s1a s2b s1b s2c s1c s1d s2d step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); step s1c: ALTER TABLE a ENABLE TRIGGER t; @@ -466,9 +530,11 @@ starting permutation: s2a s1a s2b s2c s1b s1c s1d s2d step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s1b: ALTER TABLE a DISABLE TRIGGER t; @@ -480,9 +546,11 @@ starting permutation: s2a s1a s2b s2c s1b s1c s2d s1d step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s1b: ALTER TABLE a DISABLE TRIGGER t; @@ -494,9 +562,11 @@ starting permutation: s2a s1a s2b s2c s1b s2d s1c s1d step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s1b: ALTER TABLE a DISABLE TRIGGER t; @@ -508,9 +578,11 @@ starting permutation: s2a s1a s2b s2c s2d s1b s1c s1d step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; @@ -521,9 +593,11 @@ step s1d: COMMIT; starting permutation: s2a s2b s1a s1b s1c s1d s2c s2d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; @@ -535,9 +609,11 @@ step s2d: COMMIT; starting permutation: s2a s2b s1a s1b s1c s2c s1d s2d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s1c: ALTER TABLE a ENABLE TRIGGER t; @@ -550,9 +626,11 @@ step s2d: COMMIT; starting permutation: s2a s2b s1a s1b s2c s1c s1d s2d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s1b: ALTER TABLE a DISABLE TRIGGER t; step s2c: INSERT INTO a VALUES (0); @@ -565,9 +643,11 @@ step s2d: COMMIT; starting permutation: s2a s2b s1a s2c s1b s1c s1d s2d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" @@ -579,9 +659,11 @@ step s2d: COMMIT; starting permutation: s2a s2b s1a s2c s1b s1c s2d s1d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" @@ -593,9 +675,11 @@ step s1d: COMMIT; starting permutation: s2a s2b s1a s2c s1b s2d s1c s1d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" @@ -607,9 +691,11 @@ step s1d: COMMIT; starting permutation: s2a s2b s1a s2c s2d s1b s1c s1d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" @@ -621,9 +707,11 @@ step s1d: COMMIT; starting permutation: s2a s2b s2c s1a s1b s1c s1d s2d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s1a: BEGIN; @@ -635,9 +723,11 @@ step s2d: COMMIT; starting permutation: s2a s2b s2c s1a s1b s1c s2d s1d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s1a: BEGIN; @@ -649,9 +739,11 @@ step s1d: COMMIT; starting permutation: s2a s2b s2c s1a s1b s2d s1c s1d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s1a: BEGIN; @@ -663,9 +755,11 @@ step s1d: COMMIT; starting permutation: s2a s2b s2c s1a s2d s1b s1c s1d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s1a: BEGIN; @@ -677,9 +771,11 @@ step s1d: COMMIT; starting permutation: s2a s2b s2c s2d s1a s1b s1c s1d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: INSERT INTO a VALUES (0); ERROR: duplicate key value violates unique constraint "a_pkey" step s2d: COMMIT; diff --git a/src/test/isolation/expected/alter-table-4.out b/src/test/isolation/expected/alter-table-4.out index 1009844f06f3d..fc579101c54a4 100644 --- a/src/test/isolation/expected/alter-table-4.out +++ b/src/test/isolation/expected/alter-table-4.out @@ -6,13 +6,17 @@ step s1delc1: ALTER TABLE c1 NO INHERIT p; step s2sel: SELECT SUM(a) FROM p; step s1c: COMMIT; step s2sel: <... completed> -sum +sum +--- + 11 +(1 row) -11 step s2sel: SELECT SUM(a) FROM p; -sum +sum +--- + 1 +(1 row) -1 starting permutation: s1b s1delc1 s1addc2 s2sel s1c s2sel step s1b: BEGIN; @@ -21,13 +25,17 @@ step s1addc2: ALTER TABLE c2 INHERIT p; step s2sel: SELECT SUM(a) FROM p; step s1c: COMMIT; step s2sel: <... completed> -sum +sum +--- + 11 +(1 row) -11 step s2sel: SELECT SUM(a) FROM p; -sum +sum +--- +101 +(1 row) -101 starting permutation: s1b s1dropc1 s2sel s1c s2sel step s1b: BEGIN; @@ -35,13 +43,17 @@ step s1dropc1: DROP TABLE c1; step s2sel: SELECT SUM(a) FROM p; step s1c: COMMIT; step s2sel: <... completed> -sum +sum +--- + 1 +(1 row) -1 step s2sel: SELECT SUM(a) FROM p; -sum +sum +--- + 1 +(1 row) -1 starting permutation: s1b s1delc1 s1modc1a s2sel s1c s2sel step s1b: BEGIN; @@ -52,6 +64,8 @@ step s1c: COMMIT; step s2sel: <... completed> ERROR: attribute "a" of relation "c1" does not match parent's type step s2sel: SELECT SUM(a) FROM p; -sum +sum +--- + 1 +(1 row) -1 diff --git a/src/test/isolation/expected/async-notify.out b/src/test/isolation/expected/async-notify.out index 79427789b1aeb..556e1805893a4 100644 --- a/src/test/isolation/expected/async-notify.out +++ b/src/test/isolation/expected/async-notify.out @@ -8,9 +8,11 @@ step notify2: NOTIFY c2, 'payload'; notifier: NOTIFY "c2" with payload "payload" from notifier step notify3: NOTIFY c3, 'payload3'; step notifyf: SELECT pg_notify('c2', NULL); -pg_notify +pg_notify +--------- + +(1 row) - notifier: NOTIFY "c2" with payload "" from notifier starting permutation: listenc notifyd1 notifyd2 notifys1 @@ -51,13 +53,17 @@ step notify1: NOTIFY c1; step notify2: NOTIFY c2, 'payload'; step notify3: NOTIFY c3, 'payload3'; step notifyf: SELECT pg_notify('c2', NULL); -pg_notify +pg_notify +--------- + +(1 row) - step lcheck: SELECT 1 AS x; -x +x +- +1 +(1 row) -1 listener: NOTIFY "c1" with payload "" from notifier listener: NOTIFY "c2" with payload "payload" from notifier listener: NOTIFY "c2" with payload "" from notifier @@ -71,14 +77,18 @@ step notify2: NOTIFY c2, 'payload'; notifier: NOTIFY "c2" with payload "payload" from notifier step notify3: NOTIFY c3, 'payload3'; step notifyf: SELECT pg_notify('c2', NULL); -pg_notify +pg_notify +--------- + +(1 row) - notifier: NOTIFY "c2" with payload "" from notifier step lcheck: SELECT 1 AS x; -x +x +- +1 +(1 row) -1 listener: NOTIFY "c1" with payload "" from notifier listener: NOTIFY "c2" with payload "payload" from notifier listener: NOTIFY "c2" with payload "" from notifier @@ -98,14 +108,20 @@ starting permutation: llisten lbegin usage bignotify usage step llisten: LISTEN c1; LISTEN c2; step lbegin: BEGIN; step usage: SELECT pg_notification_queue_usage() > 0 AS nonzero; -nonzero +nonzero +------- +f +(1 row) -f step bignotify: SELECT count(pg_notify('c1', s::text)) FROM generate_series(1, 1000) s; -count +count +----- + 1000 +(1 row) -1000 step usage: SELECT pg_notification_queue_usage() > 0 AS nonzero; -nonzero +nonzero +------- +t +(1 row) -t diff --git a/src/test/isolation/expected/classroom-scheduling.out b/src/test/isolation/expected/classroom-scheduling.out index f02638c0b55c5..1d7c885bc060b 100644 --- a/src/test/isolation/expected/classroom-scheduling.out +++ b/src/test/isolation/expected/classroom-scheduling.out @@ -2,28 +2,36 @@ Parsed test spec with 2 sessions starting permutation: rx1 wy1 c1 ry2 wx2 c2 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step c1: COMMIT; step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 1 +(1 row) -1 step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step c2: COMMIT; starting permutation: rx1 wy1 ry2 c1 wx2 c2 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step c1: COMMIT; step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; ERROR: could not serialize access due to read/write dependencies among transactions @@ -31,14 +39,18 @@ step c2: COMMIT; starting permutation: rx1 wy1 ry2 wx2 c1 c2 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step c1: COMMIT; step c2: COMMIT; @@ -46,14 +58,18 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 wy1 ry2 wx2 c2 c1 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step c2: COMMIT; step c1: COMMIT; @@ -61,13 +77,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wy1 c1 wx2 c2 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step c1: COMMIT; step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; @@ -76,13 +96,17 @@ step c2: COMMIT; starting permutation: rx1 ry2 wy1 wx2 c1 c2 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step c1: COMMIT; @@ -91,13 +115,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wy1 wx2 c2 c1 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step c2: COMMIT; @@ -106,13 +134,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wx2 wy1 c1 c2 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step c1: COMMIT; @@ -121,13 +153,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wx2 wy1 c2 c1 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step c2: COMMIT; @@ -136,13 +172,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wx2 c2 wy1 c1 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step c2: COMMIT; step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); @@ -151,13 +191,17 @@ step c1: COMMIT; starting permutation: ry2 rx1 wy1 c1 wx2 c2 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step c1: COMMIT; step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; @@ -166,13 +210,17 @@ step c2: COMMIT; starting permutation: ry2 rx1 wy1 wx2 c1 c2 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step c1: COMMIT; @@ -181,13 +229,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 rx1 wy1 wx2 c2 c1 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step c2: COMMIT; @@ -196,13 +248,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 rx1 wx2 wy1 c1 c2 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step c1: COMMIT; @@ -211,13 +267,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 rx1 wx2 wy1 c2 c1 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step c2: COMMIT; @@ -226,13 +286,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 rx1 wx2 c2 wy1 c1 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step c2: COMMIT; step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); @@ -241,14 +305,18 @@ step c1: COMMIT; starting permutation: ry2 wx2 rx1 wy1 c1 c2 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step c1: COMMIT; step c2: COMMIT; @@ -256,14 +324,18 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 wx2 rx1 wy1 c2 c1 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step c2: COMMIT; step c1: COMMIT; @@ -271,14 +343,18 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 wx2 rx1 c2 wy1 c1 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 0 +(1 row) -0 step c2: COMMIT; step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); ERROR: could not serialize access due to read/write dependencies among transactions @@ -286,14 +362,18 @@ step c1: COMMIT; starting permutation: ry2 wx2 c2 rx1 wy1 c1 step ry2: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; step c2: COMMIT; step rx1: SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); step c1: COMMIT; diff --git a/src/test/isolation/expected/create-trigger.out b/src/test/isolation/expected/create-trigger.out index 8deb64a8c0c38..7f9867804d1a5 100644 --- a/src/test/isolation/expected/create-trigger.out +++ b/src/test/isolation/expected/create-trigger.out @@ -6,9 +6,11 @@ step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s1c: COMMIT; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s2d: COMMIT; @@ -18,9 +20,11 @@ step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s2a: BEGIN; step s1c: COMMIT; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s2d: COMMIT; @@ -29,9 +33,11 @@ step s1a: BEGIN; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1c: COMMIT; step s2c: UPDATE a SET i = 4 WHERE i = 3; step s2d: COMMIT; @@ -41,9 +47,11 @@ step s1a: BEGIN; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s1c: COMMIT; step s2c: <... completed> @@ -55,9 +63,11 @@ step s2a: BEGIN; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s1c: COMMIT; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s2d: COMMIT; @@ -66,9 +76,11 @@ step s1a: BEGIN; step s2a: BEGIN; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1c: COMMIT; step s2c: UPDATE a SET i = 4 WHERE i = 3; step s2d: COMMIT; @@ -78,9 +90,11 @@ step s1a: BEGIN; step s2a: BEGIN; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s1c: COMMIT; step s2c: <... completed> @@ -90,9 +104,11 @@ starting permutation: s1a s2a s2b s1b s1c s2c s2d step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s1c: COMMIT; step s2c: UPDATE a SET i = 4 WHERE i = 3; @@ -102,9 +118,11 @@ starting permutation: s1a s2a s2b s1b s2c s1c s2d step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s2c: UPDATE a SET i = 4 WHERE i = 3; step s1c: COMMIT; @@ -115,9 +133,11 @@ starting permutation: s1a s2a s2b s2c s1b s2d s1c step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s2d: COMMIT; @@ -128,9 +148,11 @@ starting permutation: s1a s2a s2b s2c s2d s1b s1c step s1a: BEGIN; step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s2d: COMMIT; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); @@ -142,9 +164,11 @@ step s1a: BEGIN; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s1c: COMMIT; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s2d: COMMIT; @@ -153,9 +177,11 @@ step s2a: BEGIN; step s1a: BEGIN; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1c: COMMIT; step s2c: UPDATE a SET i = 4 WHERE i = 3; step s2d: COMMIT; @@ -165,9 +191,11 @@ step s2a: BEGIN; step s1a: BEGIN; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s1c: COMMIT; step s2c: <... completed> @@ -177,9 +205,11 @@ starting permutation: s2a s1a s2b s1b s1c s2c s2d step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s1c: COMMIT; step s2c: UPDATE a SET i = 4 WHERE i = 3; @@ -189,9 +219,11 @@ starting permutation: s2a s1a s2b s1b s2c s1c s2d step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s2c: UPDATE a SET i = 4 WHERE i = 3; step s1c: COMMIT; @@ -202,9 +234,11 @@ starting permutation: s2a s1a s2b s2c s1b s2d s1c step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s2d: COMMIT; @@ -215,9 +249,11 @@ starting permutation: s2a s1a s2b s2c s2d s1b s1c step s2a: BEGIN; step s1a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s2d: COMMIT; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); @@ -226,9 +262,11 @@ step s1c: COMMIT; starting permutation: s2a s2b s1a s1b s1c s2c s2d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s1c: COMMIT; @@ -238,9 +276,11 @@ step s2d: COMMIT; starting permutation: s2a s2b s1a s1b s2c s1c s2d step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); step s2c: UPDATE a SET i = 4 WHERE i = 3; @@ -251,9 +291,11 @@ step s2d: COMMIT; starting permutation: s2a s2b s1a s2c s1b s2d s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s2c: UPDATE a SET i = 4 WHERE i = 3; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); @@ -264,9 +306,11 @@ step s1c: COMMIT; starting permutation: s2a s2b s1a s2c s2d s1b s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s1a: BEGIN; step s2c: UPDATE a SET i = 4 WHERE i = 3; step s2d: COMMIT; @@ -276,9 +320,11 @@ step s1c: COMMIT; starting permutation: s2a s2b s2c s1a s1b s2d s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s1a: BEGIN; step s1b: CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); @@ -289,9 +335,11 @@ step s1c: COMMIT; starting permutation: s2a s2b s2c s1a s2d s1b s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s1a: BEGIN; step s2d: COMMIT; @@ -301,9 +349,11 @@ step s1c: COMMIT; starting permutation: s2a s2b s2c s2d s1a s1b s1c step s2a: BEGIN; step s2b: SELECT * FROM a WHERE i = 1 FOR UPDATE; -i +i +- +1 +(1 row) -1 step s2c: UPDATE a SET i = 4 WHERE i = 3; step s2d: COMMIT; step s1a: BEGIN; diff --git a/src/test/isolation/expected/deadlock-parallel.out b/src/test/isolation/expected/deadlock-parallel.out index cf4d07e61567b..6fe5e24a02b0a 100644 --- a/src/test/isolation/expected/deadlock-parallel.out +++ b/src/test/isolation/expected/deadlock-parallel.out @@ -2,13 +2,17 @@ Parsed test spec with 4 sessions starting permutation: d1a1 d2a2 e1l e2l d1a2 d2a1 d1c e1c d2c e2c step d1a1: SELECT lock_share(1,x), lock_excl(3,x) FROM bigt LIMIT 1; -lock_share lock_excl +lock_share|lock_excl +----------+--------- + 1| 1 +(1 row) -1 1 step d2a2: select lock_share(2,x) FROM bigt LIMIT 1; -lock_share +lock_share +---------- + 1 +(1 row) -1 step e1l: SELECT lock_excl(1,x) FROM bigt LIMIT 1; step e2l: SELECT lock_excl(2,x) FROM bigt LIMIT 1; step d1a2: SET force_parallel_mode = on; @@ -30,25 +34,35 @@ step d2a1: SET force_parallel_mode = on; RESET parallel_tuple_cost; SELECT lock_share(3,x) FROM bigt LIMIT 1; step d1a2: <... completed> -sum + sum +----- +10000 +(1 row) -10000 step d1c: COMMIT; step e1l: <... completed> -lock_excl +lock_excl +--------- + 1 +(1 row) -1 step d2a1: <... completed> -sum + sum +----- +10000 +(1 row) -10000 -lock_share +lock_share +---------- + 1 +(1 row) -1 step e1c: COMMIT; step d2c: COMMIT; step e2l: <... completed> -lock_excl +lock_excl +--------- + 1 +(1 row) -1 step e2c: COMMIT; diff --git a/src/test/isolation/expected/delete-abort-savept-2.out b/src/test/isolation/expected/delete-abort-savept-2.out index f66a90c6f0fbf..6fc991ae0096e 100644 --- a/src/test/isolation/expected/delete-abort-savept-2.out +++ b/src/test/isolation/expected/delete-abort-savept-2.out @@ -2,75 +2,99 @@ Parsed test spec with 2 sessions starting permutation: s1l s1svp s1d s1r s2l s1c s2c step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1svp: SAVEPOINT f; step s1d: SELECT * FROM foo FOR NO KEY UPDATE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1r: ROLLBACK TO f; step s2l: SELECT * FROM foo FOR UPDATE; step s1c: COMMIT; step s2l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; starting permutation: s1l s1svp s1d s2l s1r s1c s2c step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1svp: SAVEPOINT f; step s1d: SELECT * FROM foo FOR NO KEY UPDATE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2l: SELECT * FROM foo FOR UPDATE; step s1r: ROLLBACK TO f; step s1c: COMMIT; step s2l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; starting permutation: s1l s1svp s1d s1r s2l2 s1c s2c step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1svp: SAVEPOINT f; step s1d: SELECT * FROM foo FOR NO KEY UPDATE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1r: ROLLBACK TO f; step s2l2: SELECT * FROM foo FOR NO KEY UPDATE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1c: COMMIT; step s2c: COMMIT; starting permutation: s1l s1svp s1d s2l2 s1r s1c s2c step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1svp: SAVEPOINT f; step s1d: SELECT * FROM foo FOR NO KEY UPDATE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2l2: SELECT * FROM foo FOR NO KEY UPDATE; step s1r: ROLLBACK TO f; step s2l2: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1c: COMMIT; step s2c: COMMIT; diff --git a/src/test/isolation/expected/delete-abort-savept.out b/src/test/isolation/expected/delete-abort-savept.out index 284aa89d3534e..8f70bab45d40a 100644 --- a/src/test/isolation/expected/delete-abort-savept.out +++ b/src/test/isolation/expected/delete-abort-savept.out @@ -2,94 +2,118 @@ Parsed test spec with 2 sessions starting permutation: s1l s1svp s1d s1r s1c s2l s2c step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1svp: SAVEPOINT f; step s1d: DELETE FROM foo; step s1r: ROLLBACK TO f; step s1c: COMMIT; step s2l: SELECT * FROM foo FOR UPDATE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; starting permutation: s1l s1svp s1d s1r s2l s1c s2c step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1svp: SAVEPOINT f; step s1d: DELETE FROM foo; step s1r: ROLLBACK TO f; step s2l: SELECT * FROM foo FOR UPDATE; step s1c: COMMIT; step s2l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; starting permutation: s1l s1svp s1d s2l s1r s1c s2c step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1svp: SAVEPOINT f; step s1d: DELETE FROM foo; step s2l: SELECT * FROM foo FOR UPDATE; step s1r: ROLLBACK TO f; step s1c: COMMIT; step s2l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; starting permutation: s1l s1svp s2l s1d s1r s1c s2c step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1svp: SAVEPOINT f; step s2l: SELECT * FROM foo FOR UPDATE; step s1d: DELETE FROM foo; step s1r: ROLLBACK TO f; step s1c: COMMIT; step s2l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; starting permutation: s1l s2l s1svp s1d s1r s1c s2c step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2l: SELECT * FROM foo FOR UPDATE; step s1svp: SAVEPOINT f; step s1d: DELETE FROM foo; step s1r: ROLLBACK TO f; step s1c: COMMIT; step s2l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; starting permutation: s2l s1l s2c s1svp s1d s1r s1c step s2l: SELECT * FROM foo FOR UPDATE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1l: SELECT * FROM foo FOR KEY SHARE; step s2c: COMMIT; step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1svp: SAVEPOINT f; step s1d: DELETE FROM foo; step s1r: ROLLBACK TO f; @@ -97,14 +121,18 @@ step s1c: COMMIT; starting permutation: s2l s2c s1l s1svp s1d s1r s1c step s2l: SELECT * FROM foo FOR UPDATE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s1svp: SAVEPOINT f; step s1d: DELETE FROM foo; step s1r: ROLLBACK TO f; diff --git a/src/test/isolation/expected/detach-partition-concurrently-1.out b/src/test/isolation/expected/detach-partition-concurrently-1.out index 9b4526773efd7..bae53dd0b2279 100644 --- a/src/test/isolation/expected/detach-partition-concurrently-1.out +++ b/src/test/isolation/expected/detach-partition-concurrently-1.out @@ -3,120 +3,154 @@ Parsed test spec with 3 sessions starting permutation: s1b s1s s2detach s1s s1c s1s step s1b: BEGIN; step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; step s1s: SELECT * FROM d_listp; -a +a +- +1 +(1 row) -1 step s1c: COMMIT; step s2detach: <... completed> step s1s: SELECT * FROM d_listp; -a +a +- +1 +(1 row) -1 starting permutation: s1b s1s s2detach s1s s3s s3i s1c s3i s2drop s1s step s1b: BEGIN; step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; step s1s: SELECT * FROM d_listp; -a +a +- +1 +(1 row) -1 step s3s: SELECT * FROM d_listp; -a +a +- +1 +(1 row) -1 step s3i: SELECT relpartbound IS NULL FROM pg_class where relname = 'd_listp2'; -?column? +?column? +-------- +f +(1 row) -f step s1c: COMMIT; step s2detach: <... completed> step s3i: SELECT relpartbound IS NULL FROM pg_class where relname = 'd_listp2'; -?column? +?column? +-------- +t +(1 row) -t step s2drop: DROP TABLE d_listp2; step s1s: SELECT * FROM d_listp; -a +a +- +1 +(1 row) -1 starting permutation: s1b s1s s2detach s1ins s1s s1c step s1b: BEGIN; step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; step s1ins: INSERT INTO d_listp VALUES (1); step s1s: SELECT * FROM d_listp; -a +a +- +1 +1 +(2 rows) -1 -1 step s1c: COMMIT; step s2detach: <... completed> starting permutation: s1b s1s s1ins2 s2detach s1ins s1s s1c step s1b: BEGIN; step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s1ins2: INSERT INTO d_listp VALUES (2); step s2detach: ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; step s1ins: INSERT INTO d_listp VALUES (1); step s1s: SELECT * FROM d_listp; -a +a +- +1 +1 +(2 rows) -1 -1 step s1c: COMMIT; step s2detach: <... completed> starting permutation: s1brr s1s s2detach s1ins s1s s1c step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; step s1ins: INSERT INTO d_listp VALUES (1); step s1s: SELECT * FROM d_listp; -a +a +- +1 +1 +2 +(3 rows) -1 -1 -2 step s1c: COMMIT; step s2detach: <... completed> starting permutation: s1brr s1s s2detach s1s s1c step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s1c: COMMIT; step s2detach: <... completed> @@ -133,21 +167,27 @@ starting permutation: s1brr s1prep s1s s2detach s1s s1exec1 s3s s1dealloc s1c step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1prep: PREPARE f(int) AS INSERT INTO d_listp VALUES ($1); step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s1exec1: EXECUTE f(1); step s3s: SELECT * FROM d_listp; -a +a +- +1 +(1 row) -1 step s1dealloc: DEALLOCATE f; step s1c: COMMIT; step s2detach: <... completed> @@ -158,16 +198,20 @@ step s1prep: PREPARE f(int) AS INSERT INTO d_listp VALUES ($1); step s1exec2: EXECUTE f(2); step s2detach: ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +2 +(3 rows) -1 -2 -2 step s1exec2: EXECUTE f(2); step s3s: SELECT * FROM d_listp; -a +a +- +1 +(1 row) -1 step s1c: COMMIT; step s2detach: <... completed> step s1dealloc: DEALLOCATE f; @@ -176,16 +220,20 @@ starting permutation: s1brr s1prep s1s s2detach s1s s1exec2 s1c s1dealloc step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1prep: PREPARE f(int) AS INSERT INTO d_listp VALUES ($1); step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s1exec2: EXECUTE f(2); step s1c: COMMIT; step s2detach: <... completed> @@ -196,10 +244,12 @@ step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1prep: PREPARE f(int) AS INSERT INTO d_listp VALUES ($1); step s2detach: ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s1exec2: EXECUTE f(2); step s1c: COMMIT; step s2detach: <... completed> @@ -210,10 +260,12 @@ step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1prep1: PREPARE f(int) AS INSERT INTO d_listp VALUES (1); step s2detach: ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s1exec2: EXECUTE f(2); step s1c: COMMIT; step s2detach: <... completed> @@ -224,10 +276,12 @@ step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1prep2: PREPARE f(int) AS INSERT INTO d_listp VALUES (2); step s2detach: ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; step s1s: SELECT * FROM d_listp; -a +a +- +1 +2 +(2 rows) -1 -2 step s1exec2: EXECUTE f(2); step s1c: COMMIT; step s2detach: <... completed> diff --git a/src/test/isolation/expected/detach-partition-concurrently-2.out b/src/test/isolation/expected/detach-partition-concurrently-2.out index 85be707b404e7..6f025d81f5e04 100644 --- a/src/test/isolation/expected/detach-partition-concurrently-2.out +++ b/src/test/isolation/expected/detach-partition-concurrently-2.out @@ -3,10 +3,12 @@ Parsed test spec with 3 sessions starting permutation: s1b s1s s2d s3i1 s1c step s1b: BEGIN; step s1s: SELECT * FROM d_lp_fk; -a +a +- +1 +2 +(2 rows) -1 -2 step s2d: ALTER TABLE d_lp_fk DETACH PARTITION d_lp_fk_1 CONCURRENTLY; step s3i1: INSERT INTO d_lp_fk_r VALUES (1); ERROR: insert or update on table "d_lp_fk_r" violates foreign key constraint "d_lp_fk_r_a_fkey" @@ -16,10 +18,12 @@ step s2d: <... completed> starting permutation: s1b s1s s2d s3i2 s3i2 s1c step s1b: BEGIN; step s1s: SELECT * FROM d_lp_fk; -a +a +- +1 +2 +(2 rows) -1 -2 step s2d: ALTER TABLE d_lp_fk DETACH PARTITION d_lp_fk_1 CONCURRENTLY; step s3i2: INSERT INTO d_lp_fk_r VALUES (2); step s3i2: INSERT INTO d_lp_fk_r VALUES (2); @@ -29,10 +33,12 @@ step s2d: <... completed> starting permutation: s1b s1s s3i1 s2d s1c step s1b: BEGIN; step s1s: SELECT * FROM d_lp_fk; -a +a +- +1 +2 +(2 rows) -1 -2 step s3i1: INSERT INTO d_lp_fk_r VALUES (1); step s2d: ALTER TABLE d_lp_fk DETACH PARTITION d_lp_fk_1 CONCURRENTLY; ERROR: removing partition "d_lp_fk_1" violates foreign key constraint "d_lp_fk_r_a_fkey1" @@ -41,10 +47,12 @@ step s1c: COMMIT; starting permutation: s1b s1s s3i2 s2d s1c step s1b: BEGIN; step s1s: SELECT * FROM d_lp_fk; -a +a +- +1 +2 +(2 rows) -1 -2 step s3i2: INSERT INTO d_lp_fk_r VALUES (2); step s2d: ALTER TABLE d_lp_fk DETACH PARTITION d_lp_fk_1 CONCURRENTLY; step s1c: COMMIT; @@ -53,10 +61,12 @@ step s2d: <... completed> starting permutation: s1b s1s s3b s2d s3i1 s1c s3c step s1b: BEGIN; step s1s: SELECT * FROM d_lp_fk; -a +a +- +1 +2 +(2 rows) -1 -2 step s3b: BEGIN; step s2d: ALTER TABLE d_lp_fk DETACH PARTITION d_lp_fk_1 CONCURRENTLY; step s3i1: INSERT INTO d_lp_fk_r VALUES (1); diff --git a/src/test/isolation/expected/detach-partition-concurrently-3.out b/src/test/isolation/expected/detach-partition-concurrently-3.out index 7ac22a6b15f07..e7fb5f8307587 100644 --- a/src/test/isolation/expected/detach-partition-concurrently-3.out +++ b/src/test/isolation/expected/detach-partition-concurrently-3.out @@ -4,24 +4,30 @@ starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1describe s1alter step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; step s1describe: SELECT 'd3_listp' AS root, * FROM pg_partition_tree('d3_listp') UNION ALL SELECT 'd3_listp1', * FROM pg_partition_tree('d3_listp1'); -root relid parentrelid isleaf level +root |relid |parentrelid|isleaf|level +---------+---------+-----------+------+----- +d3_listp |d3_listp | |f | 0 +d3_listp |d3_listp2|d3_listp |t | 1 +d3_listp1|d3_listp1| |t | 0 +(3 rows) -d3_listp d3_listp f 0 -d3_listp d3_listp2 d3_listp t 1 -d3_listp1 d3_listp1 t 0 step s1alter: ALTER TABLE d3_listp1 ALTER a DROP NOT NULL; ERROR: cannot alter partition "d3_listp1" with an incomplete detach @@ -29,14 +35,18 @@ starting permutation: s2snitch s1b s1s s2detach s1cancel s1insert s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1insert: INSERT INTO d3_listp VALUES (1); @@ -47,36 +57,46 @@ starting permutation: s2snitch s1brr s1s s2detach s1cancel s1insert s1c s1spart step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1insert: INSERT INTO d3_listp VALUES (1); step s1c: COMMIT; step s1spart: SELECT * FROM d3_listp1; -a +a +- +1 +1 +(2 rows) -1 -1 starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1insertpart step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; @@ -86,24 +106,30 @@ starting permutation: s2snitch s1b s1s s2detach2 s1cancel s1c s1brr s1insert s1s step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach2: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1insert: INSERT INTO d3_listp VALUES (1); step s1s: SELECT * FROM d3_listp; -a +a +- +1 +1 +(2 rows) -1 -1 step s1insert: INSERT INTO d3_listp VALUES (1); step s1c: COMMIT; @@ -111,84 +137,108 @@ starting permutation: s2snitch s1b s1s s2detach2 s1cancel s1c s1brr s1s s1insert step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach2: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s1insert: INSERT INTO d3_listp VALUES (1); step s1s: SELECT * FROM d3_listp; -a +a +- +1 +1 +(2 rows) -1 -1 step s1c: COMMIT; starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1drop s1list step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; step s1drop: DROP TABLE d3_listp; step s1list: SELECT relname FROM pg_catalog.pg_class WHERE relname LIKE 'd3_listp%' ORDER BY 1; -relname +relname +------- +(0 rows) starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1trunc s1spart step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; step s1trunc: TRUNCATE TABLE d3_listp; step s1spart: SELECT * FROM d3_listp1; -a +a +- +1 +(1 row) -1 starting permutation: s2snitch s1b s1s s2detach s1cancel s1noop s2detach2 s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1noop: @@ -200,14 +250,18 @@ starting permutation: s2snitch s1b s1s s2detach s1cancel s1noop s2detachfinal s1 step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1noop: @@ -220,14 +274,18 @@ starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1droppart s2detach step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; @@ -238,14 +296,18 @@ starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s2begin s2drop s1s step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; @@ -254,29 +316,37 @@ step s2drop: DROP TABLE d3_listp1; step s1s: SELECT * FROM d3_listp; step s2commit: COMMIT; step s1s: <... completed> -a +a +- +(0 rows) starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1b s1spart s2detachfinal s1c step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; step s1b: BEGIN; step s1spart: SELECT * FROM d3_listp1; -a +a +- +1 +(1 row) -1 step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; step s1c: COMMIT; step s2detachfinal: <... completed> @@ -285,20 +355,26 @@ starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1b s1s s2detachfin step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +(0 rows) step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; step s1c: COMMIT; @@ -307,22 +383,28 @@ starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s1b s1spart s2detac step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; step s1b: BEGIN; step s1spart: SELECT * FROM d3_listp1; -a +a +- +1 +(1 row) -1 step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; step s1c: COMMIT; step s2detachfinal: <... completed> @@ -331,14 +413,18 @@ starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s2begin s2detachfin step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; @@ -350,14 +436,18 @@ starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s2begin s2detachfin step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; @@ -366,22 +456,28 @@ step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; step s1spart: SELECT * FROM d3_listp1; step s2commit: COMMIT; step s1spart: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s2snitch s1b s1s s2detach s1cancel s1c s2begin s2detachfinal s1insertpart s2commit step s2snitch: INSERT INTO d3_pid SELECT pg_backend_pid(); step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; -a +a +- +1 +(1 row) -1 step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1c: COMMIT; diff --git a/src/test/isolation/expected/detach-partition-concurrently-4.out b/src/test/isolation/expected/detach-partition-concurrently-4.out index d49736a17d548..d728ecdf4ca8e 100644 --- a/src/test/isolation/expected/detach-partition-concurrently-4.out +++ b/src/test/isolation/expected/detach-partition-concurrently-4.out @@ -4,15 +4,19 @@ starting permutation: s2snitch s1b s1s s2detach s1cancel s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1s: select * from d4_primary; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1cancel: select pg_cancel_backend(pid) from d4_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1insert: insert into d4_fk values (1); @@ -23,10 +27,12 @@ starting permutation: s2snitch s1b s1s s2detach s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1s: select * from d4_primary; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" @@ -37,15 +43,19 @@ starting permutation: s2snitch s1brr s1s s2detach s1cancel s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1brr: begin isolation level repeatable read; step s1s: select * from d4_primary; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1cancel: select pg_cancel_backend(pid) from d4_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1insert: insert into d4_fk values (1); @@ -56,10 +66,12 @@ starting permutation: s2snitch s1brr s1s s2detach s1insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1brr: begin isolation level repeatable read; step s1s: select * from d4_primary; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" @@ -73,15 +85,19 @@ step s1declare: declare f cursor for select * from d4_primary; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1cancel: select pg_cancel_backend(pid) from d4_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1fetchall: fetch all from f; -a +a +- +1 +2 +(2 rows) -1 -2 step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; @@ -92,10 +108,12 @@ step s1b: begin; step s1declare: declare f cursor for select * from d4_primary; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1fetchall: fetch all from f; -a +a +- +1 +2 +(2 rows) -1 -2 step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s2detach: <... completed> @@ -108,8 +126,10 @@ step s1declare: declare f cursor for select * from d4_primary; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1cancel: select pg_cancel_backend(pid) from d4_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1svpt: savepoint f; @@ -117,10 +137,12 @@ step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1rollback: rollback to f; step s1fetchall: fetch all from f; -a +a +- +1 +2 +(2 rows) -1 -2 step s1c: commit; starting permutation: s2snitch s1b s1declare s2detach s1svpt s1insert s1rollback s1fetchall s1c @@ -133,10 +155,12 @@ step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1rollback: rollback to f; step s1fetchall: fetch all from f; -a +a +- +1 +2 +(2 rows) -1 -2 step s1c: commit; step s2detach: <... completed> @@ -147,12 +171,16 @@ step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1declare: declare f cursor for select * from d4_primary; step s1cancel: select pg_cancel_backend(pid) from d4_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s1fetchall: fetch all from f; -a +a +- +2 +(1 row) -2 step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; @@ -163,9 +191,11 @@ step s1b: begin; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1declare: declare f cursor for select * from d4_primary; step s1fetchall: fetch all from f; -a +a +- +2 +(1 row) -2 step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; @@ -177,16 +207,20 @@ step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1declare: declare f cursor for select * from d4_primary; step s1cancel: select pg_cancel_backend(pid) from d4_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s1svpt: savepoint f; step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1rollback: rollback to f; step s1fetchall: fetch all from f; -a +a +- +2 +(1 row) -2 step s1c: commit; starting permutation: s2snitch s1b s2detach s1declare s1svpt s1insert s1rollback s1fetchall s1c @@ -199,9 +233,11 @@ step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1rollback: rollback to f; step s1fetchall: fetch all from f; -a +a +- +2 +(1 row) -2 step s1c: commit; starting permutation: s2snitch s1brr s1declare2 s1fetchone s2detach s1cancel s1updcur s1c @@ -209,14 +245,18 @@ step s2snitch: insert into d4_pid select pg_backend_pid(); step s1brr: begin isolation level repeatable read; step s1declare2: declare f cursor for select * from d4_fk where a = 2; step s1fetchone: fetch 1 from f; -a +a +- +2 +(1 row) -2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1cancel: select pg_cancel_backend(pid) from d4_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1updcur: update d4_fk set a = 1 where current of f; @@ -228,9 +268,11 @@ step s2snitch: insert into d4_pid select pg_backend_pid(); step s1brr: begin isolation level repeatable read; step s1declare2: declare f cursor for select * from d4_fk where a = 2; step s1fetchone: fetch 1 from f; -a +a +- +2 +(1 row) -2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1updcur: update d4_fk set a = 1 where current of f; ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" @@ -242,9 +284,11 @@ step s2snitch: insert into d4_pid select pg_backend_pid(); step s1brr: begin isolation level repeatable read; step s1declare2: declare f cursor for select * from d4_fk where a = 2; step s1fetchone: fetch 1 from f; -a +a +- +2 +(1 row) -2 step s1updcur: update d4_fk set a = 1 where current of f; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1c: commit; @@ -255,10 +299,12 @@ starting permutation: s2snitch s1b s1s s2detach s3insert s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1s: select * from d4_primary; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s3insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" @@ -269,10 +315,12 @@ starting permutation: s2snitch s1b s1s s2detach s3brr s3insert s3commit s1cancel step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1s: select * from d4_primary; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s3brr: begin isolation level repeatable read; step s3insert: insert into d4_fk values (1); @@ -280,8 +328,10 @@ ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk step s3commit: commit; step s1cancel: select pg_cancel_backend(pid) from d4_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1c: commit; @@ -290,10 +340,12 @@ starting permutation: s2snitch s1b s1s s2detach s3brr s3insert s3commit s1c step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1s: select * from d4_primary; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s3brr: begin isolation level repeatable read; step s3insert: insert into d4_fk values (1); @@ -306,24 +358,30 @@ starting permutation: s2snitch s1brr s1s s2detach s1cancel s1noop s3vacfreeze s1 step s2snitch: insert into d4_pid select pg_backend_pid(); step s1brr: begin isolation level repeatable read; step s1s: select * from d4_primary; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1cancel: select pg_cancel_backend(pid) from d4_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1noop: step s3vacfreeze: vacuum freeze pg_catalog.pg_inherits; step s1s: select * from d4_primary; -a +a +- +1 +2 +(2 rows) -1 -2 step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; @@ -332,23 +390,29 @@ starting permutation: s2snitch s1b s1s s2detach s1cancel s1noop s3vacfreeze s1s step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1s: select * from d4_primary; -a +a +- +1 +2 +(2 rows) -1 -2 step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; step s1cancel: select pg_cancel_backend(pid) from d4_pid; pg_cancel_backend +----------------- +t +(1 row) -t step s2detach: <... completed> ERROR: canceling statement due to user request step s1noop: step s3vacfreeze: vacuum freeze pg_catalog.pg_inherits; step s1s: select * from d4_primary; -a +a +- +2 +(1 row) -2 step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; diff --git a/src/test/isolation/expected/drop-index-concurrently-1.out b/src/test/isolation/expected/drop-index-concurrently-1.out index 8e6adb66bb147..97e1a6e77973e 100644 --- a/src/test/isolation/expected/drop-index-concurrently-1.out +++ b/src/test/isolation/expected/drop-index-concurrently-1.out @@ -4,41 +4,53 @@ starting permutation: noseq chkiso prepi preps begin explaini explains select2 d step noseq: SET enable_seqscan = false; step chkiso: SELECT (setting in ('read committed','read uncommitted')) AS is_read_committed FROM pg_settings WHERE name = 'default_transaction_isolation'; is_read_committed +----------------- +t +(1 row) -t step prepi: PREPARE getrow_idx AS SELECT * FROM test_dc WHERE data=34 ORDER BY id,data; step preps: PREPARE getrow_seq AS SELECT * FROM test_dc WHERE data::text=34::text ORDER BY id,data; step begin: BEGIN; step explaini: EXPLAIN (COSTS OFF) EXECUTE getrow_idx; -QUERY PLAN - -Sort - Sort Key: id +QUERY PLAN +---------------------------------------------- +Sort + Sort Key: id -> Index Scan using test_dc_data on test_dc - Index Cond: (data = 34) -step explains: EXPLAIN (COSTS OFF) EXECUTE getrow_seq; -QUERY PLAN + Index Cond: (data = 34) +(4 rows) -Sort - Sort Key: id, data +step explains: EXPLAIN (COSTS OFF) EXECUTE getrow_seq; +QUERY PLAN +---------------------------------------------- +Sort + Sort Key: id, data -> Index Scan using test_dc_pkey on test_dc - Filter: ((data)::text = '34'::text) + Filter: ((data)::text = '34'::text) +(4 rows) + step select2: SELECT * FROM test_dc WHERE data=34 ORDER BY id,data; -id data +id|data +--+---- +34| 34 +(1 row) -34 34 step drop: DROP INDEX CONCURRENTLY test_dc_data; step insert2: INSERT INTO test_dc(data) SELECT * FROM generate_series(1, 100); step end2: COMMIT; step selecti: EXECUTE getrow_idx; -id data + id|data +---+---- + 34| 34 +134| 34 +(2 rows) -34 34 -134 34 step selects: EXECUTE getrow_seq; -id data + id|data +---+---- + 34| 34 +134| 34 +(2 rows) -34 34 -134 34 step end: COMMIT; step drop: <... completed> diff --git a/src/test/isolation/expected/drop-index-concurrently-1_2.out b/src/test/isolation/expected/drop-index-concurrently-1_2.out index 87d07955d041c..04612d3cacca8 100644 --- a/src/test/isolation/expected/drop-index-concurrently-1_2.out +++ b/src/test/isolation/expected/drop-index-concurrently-1_2.out @@ -4,39 +4,51 @@ starting permutation: noseq chkiso prepi preps begin explaini explains select2 d step noseq: SET enable_seqscan = false; step chkiso: SELECT (setting in ('read committed','read uncommitted')) AS is_read_committed FROM pg_settings WHERE name = 'default_transaction_isolation'; is_read_committed +----------------- +f +(1 row) -f step prepi: PREPARE getrow_idx AS SELECT * FROM test_dc WHERE data=34 ORDER BY id,data; step preps: PREPARE getrow_seq AS SELECT * FROM test_dc WHERE data::text=34::text ORDER BY id,data; step begin: BEGIN; step explaini: EXPLAIN (COSTS OFF) EXECUTE getrow_idx; -QUERY PLAN - -Sort - Sort Key: id +QUERY PLAN +---------------------------------------------- +Sort + Sort Key: id -> Index Scan using test_dc_data on test_dc - Index Cond: (data = 34) -step explains: EXPLAIN (COSTS OFF) EXECUTE getrow_seq; -QUERY PLAN + Index Cond: (data = 34) +(4 rows) -Sort - Sort Key: id, data +step explains: EXPLAIN (COSTS OFF) EXECUTE getrow_seq; +QUERY PLAN +---------------------------------------------- +Sort + Sort Key: id, data -> Index Scan using test_dc_pkey on test_dc - Filter: ((data)::text = '34'::text) + Filter: ((data)::text = '34'::text) +(4 rows) + step select2: SELECT * FROM test_dc WHERE data=34 ORDER BY id,data; -id data +id|data +--+---- +34| 34 +(1 row) -34 34 step drop: DROP INDEX CONCURRENTLY test_dc_data; step insert2: INSERT INTO test_dc(data) SELECT * FROM generate_series(1, 100); step end2: COMMIT; step selecti: EXECUTE getrow_idx; -id data +id|data +--+---- +34| 34 +(1 row) -34 34 step selects: EXECUTE getrow_seq; -id data +id|data +--+---- +34| 34 +(1 row) -34 34 step end: COMMIT; step drop: <... completed> diff --git a/src/test/isolation/expected/eval-plan-qual-trigger.out b/src/test/isolation/expected/eval-plan-qual-trigger.out index 833834afaaf0a..f6714c2e599a1 100644 --- a/src/test/isolation/expected/eval-plan-qual-trigger.out +++ b/src/test/isolation/expected/eval-plan-qual-trigger.out @@ -10,21 +10,29 @@ starting permutation: s1_trig_rep_b_u s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -37,9 +45,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 step s1_c: COMMIT; s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: upd: text key-a = text key-a: t @@ -53,35 +63,47 @@ step s2_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------------ +key-a|val-a-s1-ups1-ups2 +(1 row) -key-a val-a-s1-ups1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------------ +key-a|val-a-s1-ups1-ups2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups1-ups2 -key-b val-b-s1 starting permutation: s1_trig_rep_b_u s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s1_r s2_upd_a_data s2_c s0_rep step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -94,9 +116,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 step s1_r: ROLLBACK; s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t @@ -110,15 +134,19 @@ step s2_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +(1 row) -key-a val-a-s1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups2 -key-b val-b-s1 starting permutation: s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s1_c s2_del_a s2_c s0_rep step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -126,21 +154,29 @@ step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -153,9 +189,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 step s1_c: COMMIT; s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: upd: text key-a = text key-a: t @@ -169,14 +207,18 @@ step s2_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 starting permutation: s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s1_r s2_del_a s2_c s0_rep step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -184,21 +226,29 @@ step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -211,9 +261,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 step s1_r: ROLLBACK; s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t @@ -227,34 +279,46 @@ step s2_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 starting permutation: s1_trig_rep_b_u s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s2_upd_a_data s1_c s2_c s0_rep step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -267,9 +331,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -286,35 +352,47 @@ s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (k s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1-ups1) new: (key-a,val-a-s1-ups1-ups2) step s2_upd_a_data: <... completed> -key data +key |data +-----+------------------ +key-a|val-a-s1-ups1-ups2 +(1 row) -key-a val-a-s1-ups1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------------ +key-a|val-a-s1-ups1-ups2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups1-ups2 -key-b val-b-s1 starting permutation: s1_trig_rep_b_u s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s2_upd_a_data s1_r s2_c s0_rep step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -327,9 +405,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -344,15 +424,19 @@ s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (k s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups2) step s2_upd_a_data: <... completed> -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +(1 row) -key-a val-a-s1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups2 -key-b val-b-s1 starting permutation: s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s2_upd_a_data s1_c s2_c s0_rep step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -360,21 +444,29 @@ step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -387,9 +479,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -406,15 +500,19 @@ s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (k s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1-ups1) new: (key-a,val-a-s1-ups1-ups2) step s2_upd_a_data: <... completed> -key data +key |data +-----+------------------ +key-a|val-a-s1-ups1-ups2 +(1 row) -key-a val-a-s1-ups1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------------ +key-a|val-a-s1-ups1-ups2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups1-ups2 -key-b val-b-s1 starting permutation: s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s2_upd_a_data s1_r s2_c s0_rep step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -422,21 +520,29 @@ step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -449,9 +555,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -466,15 +574,19 @@ s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (k s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups2) step s2_upd_a_data: <... completed> -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +(1 row) -key-a val-a-s1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups2 -key-b val-b-s1 starting permutation: s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_del_a s2_upd_a_data s1_c s2_c s0_rep step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -482,21 +594,29 @@ step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_d; when: BEFORE; lev: ROWs; op: DELETE; old: (key-a,val-a-s1) new: @@ -509,9 +629,11 @@ step s1_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -524,13 +646,17 @@ step s2_upd_a_data: step s1_c: COMMIT; s2: NOTICE: upd: text key-b = text key-a: f step s2_upd_a_data: <... completed> -key data +key|data +---+---- +(0 rows) step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 starting permutation: s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_del_a s2_upd_a_data s1_r s2_c s0_rep step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -538,21 +664,29 @@ step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_d; when: BEFORE; lev: ROWs; op: DELETE; old: (key-a,val-a-s1) new: @@ -565,9 +699,11 @@ step s1_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -582,15 +718,19 @@ s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (k s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups2) step s2_upd_a_data: <... completed> -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +(1 row) -key-a val-a-s1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups2 -key-b val-b-s1 starting permutation: s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_a_i s1_trig_rep_a_d s1_b_rc s2_b_rc s1_ins_a s2_ins_a s1_c s2_c s0_rep step s1_trig_rep_b_i: CREATE TRIGGER rep_b_i BEFORE INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -598,19 +738,25 @@ step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH step s1_trig_rep_a_i: CREATE TRIGGER rep_a_i AFTER INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) s1: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s2) step s2_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s2') RETURNING *; step s1_c: COMMIT; @@ -618,9 +764,11 @@ step s2_ins_a: <... completed> ERROR: duplicate key value violates unique constraint "trigtest_pkey" step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 starting permutation: s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_a_i s1_trig_rep_a_d s1_b_rc s2_b_rc s1_ins_a s2_ins_a s1_r s2_c s0_rep step s1_trig_rep_b_i: CREATE TRIGGER rep_b_i BEFORE INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -628,32 +776,42 @@ step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH step s1_trig_rep_a_i: CREATE TRIGGER rep_a_i AFTER INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) s1: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s2) step s2_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s2') RETURNING *; step s1_r: ROLLBACK; s2: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s2) step s2_ins_a: <... completed> -key data +key |data +-----+-------- +key-a|val-a-s2 +(1 row) -key-a val-a-s2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-a|val-a-s2 +(1 row) -key-a val-a-s2 starting permutation: s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s2_upsert_a_data s1_c s2_c s0_rep step s1_trig_rep_b_i: CREATE TRIGGER rep_b_i BEFORE INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -665,23 +823,31 @@ step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH R s1: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) s1: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s1: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-b,val-b-s1) s1: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-b,val-b-s1) step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -694,9 +860,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-upss2) step s2_upsert_a_data: INSERT INTO trigtest VALUES ('key-a', 'val-a-upss2') @@ -713,15 +881,19 @@ s2: NOTICE: upk: text val-a-s1-ups1 <> text mismatch: t s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1-ups1) new: (key-a,val-a-s1-ups1-upserts2) s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1-ups1) new: (key-a,val-a-s1-ups1-upserts2) step s2_upsert_a_data: <... completed> -key data +key |data +-----+---------------------- +key-a|val-a-s1-ups1-upserts2 +(1 row) -key-a val-a-s1-ups1-upserts2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+---------------------- +key-a|val-a-s1-ups1-upserts2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups1-upserts2 -key-b val-b-s1 starting permutation: s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s2_upsert_a_data s1_c s2_c s0_rep step s1_trig_rep_b_i: CREATE TRIGGER rep_b_i BEFORE INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -733,23 +905,31 @@ step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH R s1: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) s1: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s1: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-b,val-b-s1) s1: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-b,val-b-s1) step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -762,9 +942,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-upss2) step s2_upsert_a_data: INSERT INTO trigtest VALUES ('key-a', 'val-a-upss2') @@ -781,15 +963,19 @@ s2: NOTICE: upk: text val-a-s1-ups1 <> text mismatch: t s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1-ups1) new: (key-a,val-a-s1-ups1-upserts2) s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1-ups1) new: (key-a,val-a-s1-ups1-upserts2) step s2_upsert_a_data: <... completed> -key data +key |data +-----+---------------------- +key-a|val-a-s1-ups1-upserts2 +(1 row) -key-a val-a-s1-ups1-upserts2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+---------------------- +key-a|val-a-s1-ups1-upserts2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups1-upserts2 -key-b val-b-s1 starting permutation: s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u s1_b_rc s2_b_rc s1_ins_a s2_upsert_a_data s1_c s2_c s0_rep step s1_trig_rep_b_i: CREATE TRIGGER rep_b_i BEFORE INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -799,19 +985,25 @@ step s1_trig_rep_a_i: CREATE TRIGGER rep_a_i AFTER INSERT ON trigtest FOR EACH R step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) s1: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-upss2) step s2_upsert_a_data: INSERT INTO trigtest VALUES ('key-a', 'val-a-upss2') @@ -828,14 +1020,18 @@ s2: NOTICE: upk: text val-a-s1 <> text mismatch: t s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-upserts2) s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-upserts2) step s2_upsert_a_data: <... completed> -key data +key |data +-----+----------------- +key-a|val-a-s1-upserts2 +(1 row) -key-a val-a-s1-upserts2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+----------------- +key-a|val-a-s1-upserts2 +(1 row) -key-a val-a-s1-upserts2 starting permutation: s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u s1_b_rc s2_b_rc s1_ins_a s2_upsert_a_data s1_r s2_c s0_rep step s1_trig_rep_b_i: CREATE TRIGGER rep_b_i BEFORE INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -845,19 +1041,25 @@ step s1_trig_rep_a_i: CREATE TRIGGER rep_a_i AFTER INSERT ON trigtest FOR EACH R step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) s1: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-upss2) step s2_upsert_a_data: INSERT INTO trigtest VALUES ('key-a', 'val-a-upss2') @@ -871,14 +1073,18 @@ step s2_upsert_a_data: step s1_r: ROLLBACK; s2: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-a,val-a-upss2) step s2_upsert_a_data: <... completed> -key data +key |data +-----+----------- +key-a|val-a-upss2 +(1 row) -key-a val-a-upss2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+----------- +key-a|val-a-upss2 +(1 row) -key-a val-a-upss2 starting permutation: s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u s1_b_rc s2_b_rc s1_ins_a s1_upd_a_data s2_upsert_a_data s1_c s2_c s0_rep step s1_trig_rep_b_i: CREATE TRIGGER rep_b_i BEFORE INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -888,19 +1094,25 @@ step s1_trig_rep_a_i: CREATE TRIGGER rep_a_i AFTER INSERT ON trigtest FOR EACH R step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) s1: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -912,9 +1124,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-upss2) step s2_upsert_a_data: INSERT INTO trigtest VALUES ('key-a', 'val-a-upss2') @@ -931,14 +1145,18 @@ s2: NOTICE: upk: text val-a-s1-ups1 <> text mismatch: t s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1-ups1) new: (key-a,val-a-s1-ups1-upserts2) s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1-ups1) new: (key-a,val-a-s1-ups1-upserts2) step s2_upsert_a_data: <... completed> -key data +key |data +-----+---------------------- +key-a|val-a-s1-ups1-upserts2 +(1 row) -key-a val-a-s1-ups1-upserts2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+---------------------- +key-a|val-a-s1-ups1-upserts2 +(1 row) -key-a val-a-s1-ups1-upserts2 starting permutation: s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u s1_b_rc s2_b_rc s1_ins_a s1_upd_a_data s2_upsert_a_data s1_r s2_c s0_rep step s1_trig_rep_b_i: CREATE TRIGGER rep_b_i BEFORE INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -948,19 +1166,25 @@ step s1_trig_rep_a_i: CREATE TRIGGER rep_a_i AFTER INSERT ON trigtest FOR EACH R step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) s1: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -972,9 +1196,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-upss2) step s2_upsert_a_data: INSERT INTO trigtest VALUES ('key-a', 'val-a-upss2') @@ -988,33 +1214,45 @@ step s2_upsert_a_data: step s1_r: ROLLBACK; s2: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-a,val-a-upss2) step s2_upsert_a_data: <... completed> -key data +key |data +-----+----------- +key-a|val-a-upss2 +(1 row) -key-a val-a-upss2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+----------- +key-a|val-a-upss2 +(1 row) -key-a val-a-upss2 starting permutation: s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s2_upd_a_data s1_c s2_c s0_rep step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: upd: text key-b = text key-a: f @@ -1026,9 +1264,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -1044,34 +1284,46 @@ s2: NOTICE: upk: text val-a-s1-ups1 <> text mismatch: t s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1-ups1) new: (key-a,val-a-s1-ups1-ups2) step s2_upd_a_data: <... completed> -key data +key |data +-----+------------------ +key-a|val-a-s1-ups1-ups2 +(1 row) -key-a val-a-s1-ups1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------------ +key-a|val-a-s1-ups1-ups2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups1-ups2 -key-b val-b-s1 starting permutation: s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s2_upd_a_data s1_r s2_c s0_rep step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: upd: text key-b = text key-a: f @@ -1083,9 +1335,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -1099,35 +1353,47 @@ step s1_r: ROLLBACK; s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups2) step s2_upd_a_data: <... completed> -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +(1 row) -key-a val-a-s1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups2 -key-b val-b-s1 starting permutation: s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s2_del_a s1_c s2_c s0_rep step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: upd: text key-b = text key-a: f @@ -1139,9 +1405,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_del_a: @@ -1157,34 +1425,46 @@ s2: NOTICE: upk: text val-a-s1-ups1 <> text mismatch: t s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: trigger: name rep_a_d; when: AFTER; lev: ROWs; op: DELETE; old: (key-a,val-a-s1-ups1) new: step s2_del_a: <... completed> -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 starting permutation: s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s2_del_a s1_r s2_c s0_rep step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: upd: text key-b = text key-a: f @@ -1196,9 +1476,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_del_a: @@ -1212,34 +1494,46 @@ step s1_r: ROLLBACK; s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: trigger: name rep_a_d; when: AFTER; lev: ROWs; op: DELETE; old: (key-a,val-a-s1) new: step s2_del_a: <... completed> -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 starting permutation: s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_del_a s2_upd_a_data s1_c s2_c s0_rep step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: upd: text key-b = text key-a: f @@ -1251,9 +1545,11 @@ step s1_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -1266,33 +1562,45 @@ step s2_upd_a_data: step s1_c: COMMIT; s2: NOTICE: upd: text key-b = text key-a: f step s2_upd_a_data: <... completed> -key data +key|data +---+---- +(0 rows) step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 starting permutation: s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_del_a s2_upd_a_data s1_r s2_c s0_rep step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: upd: text key-b = text key-a: f @@ -1304,9 +1612,11 @@ step s1_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -1320,34 +1630,46 @@ step s1_r: ROLLBACK; s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups2) step s2_upd_a_data: <... completed> -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +(1 row) -key-a val-a-s1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups2 -key-b val-b-s1 starting permutation: s1_trig_rep_a_d s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_del_a s2_del_a s1_c s2_c s0_rep step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: upd: text key-b = text key-a: f @@ -1359,9 +1681,11 @@ step s1_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_del_a: @@ -1374,32 +1698,44 @@ step s2_del_a: step s1_c: COMMIT; s2: NOTICE: upd: text key-b = text key-a: f step s2_del_a: <... completed> -key data +key|data +---+---- +(0 rows) step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 starting permutation: s1_trig_rep_a_d s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_del_a s2_del_a s1_r s2_c s0_rep step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: upd: text key-b = text key-a: f @@ -1411,9 +1747,11 @@ step s1_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_del_a: @@ -1427,34 +1765,46 @@ step s1_r: ROLLBACK; s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: trigger: name rep_a_d; when: AFTER; lev: ROWs; op: DELETE; old: (key-a,val-a-s1) new: step s2_del_a: <... completed> -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 starting permutation: s1_trig_rep_b_u s1_trig_rep_a_u s1_ins_a s1_ins_c s1_b_rc s2_b_rc s1_upd_a_tob s2_upd_a_data s1_c s2_c s0_rep step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_c: INSERT INTO trigtest VALUES ('key-c', 'val-c-s1') RETURNING *; -key data +key |data +-----+-------- +key-c|val-c-s1 +(1 row) -key-c val-c-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upk: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-b,val-a-s1-tobs1) @@ -1467,9 +1817,11 @@ step s1_upd_a_tob: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+-------------- +key-b|val-a-s1-tobs1 +(1 row) -key-b val-a-s1-tobs1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -1483,34 +1835,46 @@ step s1_c: COMMIT; s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: upd: text key-c = text key-a: f step s2_upd_a_data: <... completed> -key data +key|data +---+---- +(0 rows) step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------------- +key-b|val-a-s1-tobs1 +key-c|val-c-s1 +(2 rows) -key-b val-a-s1-tobs1 -key-c val-c-s1 starting permutation: s1_trig_rep_b_u s1_trig_rep_a_u s1_ins_a s1_ins_c s1_b_rc s2_b_rc s1_upd_a_tob s2_upd_a_data s1_r s2_c s0_rep step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_c: INSERT INTO trigtest VALUES ('key-c', 'val-c-s1') RETURNING *; -key data +key |data +-----+-------- +key-c|val-c-s1 +(1 row) -key-c val-c-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upk: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-b,val-a-s1-tobs1) @@ -1523,9 +1887,11 @@ step s1_upd_a_tob: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+-------------- +key-b|val-a-s1-tobs1 +(1 row) -key-b val-a-s1-tobs1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -1540,35 +1906,47 @@ s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (k s2: NOTICE: upd: text key-c = text key-a: f s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups2) step s2_upd_a_data: <... completed> -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +(1 row) -key-a val-a-s1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +key-c|val-c-s1 +(2 rows) -key-a val-a-s1-ups2 -key-c val-c-s1 starting permutation: s1_trig_rep_b_u s1_trig_rep_a_u s1_ins_a s1_ins_c s1_b_rc s2_b_rc s1_upd_a_tob s2_upd_b_data s1_c s2_c s0_rep step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_c: INSERT INTO trigtest VALUES ('key-c', 'val-c-s1') RETURNING *; -key data +key |data +-----+-------- +key-c|val-c-s1 +(1 row) -key-c val-c-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upk: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-b,val-a-s1-tobs1) @@ -1581,9 +1959,11 @@ step s1_upd_a_tob: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+-------------- +key-b|val-a-s1-tobs1 +(1 row) -key-b val-a-s1-tobs1 s2: NOTICE: upd: text key-a = text key-b: f s2: NOTICE: upd: text key-c = text key-b: f step s2_upd_b_data: @@ -1593,35 +1973,47 @@ step s2_upd_b_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key|data +---+---- +(0 rows) step s1_c: COMMIT; step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------------- +key-b|val-a-s1-tobs1 +key-c|val-c-s1 +(2 rows) -key-b val-a-s1-tobs1 -key-c val-c-s1 starting permutation: s1_trig_rep_b_u s1_trig_rep_a_u s1_ins_a s1_ins_c s1_b_rc s2_b_rc s1_upd_a_tob s2_upd_all_data s1_c s2_c s0_rep step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_c: INSERT INTO trigtest VALUES ('key-c', 'val-c-s1') RETURNING *; -key data +key |data +-----+-------- +key-c|val-c-s1 +(1 row) -key-c val-c-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upk: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-b,val-a-s1-tobs1) @@ -1634,9 +2026,11 @@ step s1_upd_a_tob: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+-------------- +key-b|val-a-s1-tobs1 +(1 row) -key-b val-a-s1-tobs1 s2: NOTICE: upd: text key-a <> text mismatch: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_all_data: @@ -1656,16 +2050,20 @@ s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (k s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-b,val-a-s1-tobs1) new: (key-b,val-a-s1-tobs1-ups2) s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-c,val-c-s1) new: (key-c,val-c-s1-ups2) step s2_upd_all_data: <... completed> -key data +key |data +-----+------------------- +key-b|val-a-s1-tobs1-ups2 +key-c|val-c-s1-ups2 +(2 rows) -key-b val-a-s1-tobs1-ups2 -key-c val-c-s1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------------- +key-b|val-a-s1-tobs1-ups2 +key-c|val-c-s1-ups2 +(2 rows) -key-b val-a-s1-tobs1-ups2 -key-c val-c-s1-ups2 starting permutation: s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_c s1_b_rc s2_b_rc s1_del_a s2_upd_a_data s1_c s2_c s0_rep step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -1673,21 +2071,29 @@ step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_c: INSERT INTO trigtest VALUES ('key-c', 'val-c-s1') RETURNING *; -key data +key |data +-----+-------- +key-c|val-c-s1 +(1 row) -key-c val-c-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_d; when: BEFORE; lev: ROWs; op: DELETE; old: (key-a,val-a-s1) new: @@ -1700,9 +2106,11 @@ step s1_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -1715,13 +2123,17 @@ step s2_upd_a_data: step s1_c: COMMIT; s2: NOTICE: upd: text key-c = text key-a: f step s2_upd_a_data: <... completed> -key data +key|data +---+---- +(0 rows) step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-c|val-c-s1 +(1 row) -key-c val-c-s1 starting permutation: s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_c s1_b_rc s2_b_rc s1_del_a s2_upd_a_data s1_r s2_c s0_rep step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -1729,21 +2141,29 @@ step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_c: INSERT INTO trigtest VALUES ('key-c', 'val-c-s1') RETURNING *; -key data +key |data +-----+-------- +key-c|val-c-s1 +(1 row) -key-c val-c-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_d; when: BEFORE; lev: ROWs; op: DELETE; old: (key-a,val-a-s1) new: @@ -1756,9 +2176,11 @@ step s1_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -1773,35 +2195,47 @@ s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (k s2: NOTICE: upd: text key-c = text key-a: f s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups2) step s2_upd_a_data: <... completed> -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +(1 row) -key-a val-a-s1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +key-c|val-c-s1 +(2 rows) -key-a val-a-s1-ups2 -key-c val-c-s1 starting permutation: s1_trig_rep_b_d s1_trig_rep_a_d s1_ins_a s1_ins_c s1_b_rc s2_b_rc s1_del_a s2_del_a s1_c s2_c s0_rep step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_c: INSERT INTO trigtest VALUES ('key-c', 'val-c-s1') RETURNING *; -key data +key |data +-----+-------- +key-c|val-c-s1 +(1 row) -key-c val-c-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_d; when: BEFORE; lev: ROWs; op: DELETE; old: (key-a,val-a-s1) new: @@ -1814,9 +2248,11 @@ step s1_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_del_a: @@ -1829,33 +2265,45 @@ step s2_del_a: step s1_c: COMMIT; s2: NOTICE: upd: text key-c = text key-a: f step s2_del_a: <... completed> -key data +key|data +---+---- +(0 rows) step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-c|val-c-s1 +(1 row) -key-c val-c-s1 starting permutation: s1_trig_rep_b_d s1_trig_rep_a_d s1_ins_a s1_ins_c s1_b_rc s2_b_rc s1_del_a s2_del_a s1_r s2_c s0_rep step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_c: INSERT INTO trigtest VALUES ('key-c', 'val-c-s1') RETURNING *; -key data +key |data +-----+-------- +key-c|val-c-s1 +(1 row) -key-c val-c-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_d; when: BEFORE; lev: ROWs; op: DELETE; old: (key-a,val-a-s1) new: @@ -1868,9 +2316,11 @@ step s1_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_del_a: @@ -1885,14 +2335,18 @@ s2: NOTICE: trigger: name rep_b_d; when: BEFORE; lev: ROWs; op: DELETE; old: (k s2: NOTICE: upd: text key-c = text key-a: f s2: NOTICE: trigger: name rep_a_d; when: AFTER; lev: ROWs; op: DELETE; old: (key-a,val-a-s1) new: step s2_del_a: <... completed> -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-c|val-c-s1 +(1 row) -key-c val-c-s1 starting permutation: s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_b s1_b_rc s2_b_rc s1_ins_a s1_upd_b_data s2_upd_b_data s1_del_b s1_upd_a_tob s1_c s2_c s0_rep step s1_trig_rep_b_i: CREATE TRIGGER rep_b_i BEFORE INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -1904,23 +2358,31 @@ step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH R s1: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-b,val-b-s1) s1: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-b,val-b-s1) step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rc: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: trigger: name rep_b_i; when: BEFORE; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) s1: NOTICE: trigger: name rep_a_i; when: AFTER; lev: ROWs; op: INSERT; old: new: (key-a,val-a-s1) step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s1: NOTICE: upd: text key-b = text key-b: t s1: NOTICE: upk: text val-b-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-b,val-b-s1) new: (key-b,val-b-s1-ups1) @@ -1933,9 +2395,11 @@ step s1_upd_b_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-b|val-b-s1-ups1 +(1 row) -key-b val-b-s1-ups1 s2: NOTICE: upd: text key-b = text key-b: t s2: NOTICE: upk: text val-b-s1 <> text mismatch: t step s2_upd_b_data: @@ -1957,9 +2421,11 @@ step s1_del_b: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+------------- +key-b|val-b-s1-ups1 +(1 row) -key-b val-b-s1-ups1 s1: NOTICE: upk: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-b,val-a-s1-tobs1) @@ -1971,38 +2437,52 @@ step s1_upd_a_tob: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+-------------- +key-b|val-a-s1-tobs1 +(1 row) -key-b val-a-s1-tobs1 step s1_c: COMMIT; step s2_upd_b_data: <... completed> -key data +key|data +---+---- +(0 rows) step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------------- +key-b|val-a-s1-tobs1 +(1 row) -key-b val-a-s1-tobs1 starting permutation: s1_trig_rep_b_u s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rr s2_b_rr s1_upd_a_data s2_upd_a_data s1_c s2_c s0_rep step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rr: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rr: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -2015,9 +2495,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -2032,30 +2514,40 @@ step s2_upd_a_data: <... completed> ERROR: could not serialize access due to concurrent update step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups1 -key-b val-b-s1 starting permutation: s1_trig_rep_b_u s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rr s2_b_rr s1_upd_a_data s2_upd_a_data s1_r s2_c s0_rep step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rr: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rr: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups1) @@ -2068,9 +2560,11 @@ step s1_upd_a_data: noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; -key data +key |data +-----+------------- +key-a|val-a-s1-ups1 +(1 row) -key-a val-a-s1-ups1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -2085,15 +2579,19 @@ s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (k s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups2) step s2_upd_a_data: <... completed> -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +(1 row) -key-a val-a-s1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups2 -key-b val-b-s1 starting permutation: s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rr s2_b_rr s1_del_a s2_upd_a_data s1_c s2_c s0_rep step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -2101,21 +2599,29 @@ step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rr: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rr: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_d; when: BEFORE; lev: ROWs; op: DELETE; old: (key-a,val-a-s1) new: @@ -2128,9 +2634,11 @@ step s1_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -2145,9 +2653,11 @@ step s2_upd_a_data: <... completed> ERROR: could not serialize access due to concurrent delete step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 starting permutation: s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rr s2_b_rr s1_del_a s2_upd_a_data s1_r s2_c s0_rep step s1_trig_rep_b_d: CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); @@ -2155,21 +2665,29 @@ step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH step s1_trig_rep_a_d: CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_trig_rep_a_u: CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); step s1_ins_a: INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 step s1_ins_b: INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; -key data +key |data +-----+-------- +key-b|val-b-s1 +(1 row) -key-b val-b-s1 step s1_b_rr: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2_b_rr: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 s1: NOTICE: upd: text key-a = text key-a: t s1: NOTICE: upk: text val-a-s1 <> text mismatch: t s1: NOTICE: trigger: name rep_b_d; when: BEFORE; lev: ROWs; op: DELETE; old: (key-a,val-a-s1) new: @@ -2182,9 +2700,11 @@ step s1_del_a: noisy_oper('upk', data, '<>', 'mismatch') RETURNING * -key data +key |data +-----+-------- +key-a|val-a-s1 +(1 row) -key-a val-a-s1 s2: NOTICE: upd: text key-a = text key-a: t s2: NOTICE: upk: text val-a-s1 <> text mismatch: t step s2_upd_a_data: @@ -2199,12 +2719,16 @@ s2: NOTICE: trigger: name rep_b_u; when: BEFORE; lev: ROWs; op: UPDATE; old: (k s2: NOTICE: upd: text key-b = text key-a: f s2: NOTICE: trigger: name rep_a_u; when: AFTER; lev: ROWs; op: UPDATE; old: (key-a,val-a-s1) new: (key-a,val-a-s1-ups2) step s2_upd_a_data: <... completed> -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +(1 row) -key-a val-a-s1-ups2 step s2_c: COMMIT; step s0_rep: SELECT * FROM trigtest ORDER BY key, data -key data +key |data +-----+------------- +key-a|val-a-s1-ups2 +key-b|val-b-s1 +(2 rows) -key-a val-a-s1-ups2 -key-b val-b-s1 diff --git a/src/test/isolation/expected/eval-plan-qual.out b/src/test/isolation/expected/eval-plan-qual.out index df8fa8b0a54b8..d9063500d34e8 100644 --- a/src/test/isolation/expected/eval-plan-qual.out +++ b/src/test/isolation/expected/eval-plan-qual.out @@ -2,261 +2,353 @@ Parsed test spec with 3 sessions starting permutation: wx1 wx2 c1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; step c1: COMMIT; step wx2: <... completed> -balance +balance +------- + 850 +(1 row) -850 step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 850 +savings | 600 +(2 rows) -checking 850 -savings 600 starting permutation: wy1 wy2 c1 c2 read step wy1: UPDATE accounts SET balance = balance + 500 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 1100 +(1 row) -1100 step wy2: UPDATE accounts SET balance = balance + 1000 WHERE accountid = 'checking' AND balance < 1000 RETURNING balance; step c1: COMMIT; step wy2: <... completed> -balance +balance +------- +(0 rows) step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 1100 +savings | 600 +(2 rows) -checking 1100 -savings 600 starting permutation: wx1 wx2 r1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; step r1: ROLLBACK; step wx2: <... completed> -balance +balance +------- + 1050 +(1 row) -1050 step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 1050 +savings | 600 +(2 rows) -checking 1050 -savings 600 starting permutation: wy1 wy2 r1 c2 read step wy1: UPDATE accounts SET balance = balance + 500 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 1100 +(1 row) -1100 step wy2: UPDATE accounts SET balance = balance + 1000 WHERE accountid = 'checking' AND balance < 1000 RETURNING balance; step r1: ROLLBACK; step wy2: <... completed> -balance +balance +------- + 1600 +(1 row) -1600 step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 1600 +savings | 600 +(2 rows) -checking 1600 -savings 600 starting permutation: wx1 d1 wx2 c1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step d1: DELETE FROM accounts WHERE accountid = 'checking' AND balance < 1500 RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; step c1: COMMIT; step wx2: <... completed> -balance +balance +------- +(0 rows) step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +savings | 600 +(1 row) -savings 600 starting permutation: wx2 d1 c2 c1 read step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 1050 +(1 row) -1050 step d1: DELETE FROM accounts WHERE accountid = 'checking' AND balance < 1500 RETURNING balance; step c2: COMMIT; step d1: <... completed> -balance +balance +------- + 1050 +(1 row) -1050 step c1: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +savings | 600 +(1 row) -savings 600 starting permutation: wx2 wx2 d1 c2 c1 read step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 1050 +(1 row) -1050 step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 1500 +(1 row) -1500 step d1: DELETE FROM accounts WHERE accountid = 'checking' AND balance < 1500 RETURNING balance; step c2: COMMIT; step d1: <... completed> -balance +balance +------- +(0 rows) step c1: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 1500 +savings | 600 +(2 rows) -checking 1500 -savings 600 starting permutation: wx2 d2 d1 c2 c1 read step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 1050 +(1 row) -1050 step d2: DELETE FROM accounts WHERE accountid = 'checking'; step d1: DELETE FROM accounts WHERE accountid = 'checking' AND balance < 1500 RETURNING balance; step c2: COMMIT; step d1: <... completed> -balance +balance +------- +(0 rows) step c1: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +savings | 600 +(1 row) -savings 600 starting permutation: wx1 d1 wx2 r1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step d1: DELETE FROM accounts WHERE accountid = 'checking' AND balance < 1500 RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; step r1: ROLLBACK; step wx2: <... completed> -balance +balance +------- + 1050 +(1 row) -1050 step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 1050 +savings | 600 +(2 rows) -checking 1050 -savings 600 starting permutation: wx2 d1 r2 c1 read step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 1050 +(1 row) -1050 step d1: DELETE FROM accounts WHERE accountid = 'checking' AND balance < 1500 RETURNING balance; step r2: ROLLBACK; step d1: <... completed> -balance +balance +------- + 600 +(1 row) -600 step c1: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +savings | 600 +(1 row) -savings 600 starting permutation: wx2 wx2 d1 r2 c1 read step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 1050 +(1 row) -1050 step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 1500 +(1 row) -1500 step d1: DELETE FROM accounts WHERE accountid = 'checking' AND balance < 1500 RETURNING balance; step r2: ROLLBACK; step d1: <... completed> -balance +balance +------- + 600 +(1 row) -600 step c1: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +savings | 600 +(1 row) -savings 600 starting permutation: wx2 d2 d1 r2 c1 read step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 1050 +(1 row) -1050 step d2: DELETE FROM accounts WHERE accountid = 'checking'; step d1: DELETE FROM accounts WHERE accountid = 'checking' AND balance < 1500 RETURNING balance; step r2: ROLLBACK; step d1: <... completed> -balance +balance +------- + 600 +(1 row) -600 step c1: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +savings | 600 +(1 row) -savings 600 starting permutation: d1 wx2 c1 c2 read step d1: DELETE FROM accounts WHERE accountid = 'checking' AND balance < 1500 RETURNING balance; -balance +balance +------- + 600 +(1 row) -600 step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; step c1: COMMIT; step wx2: <... completed> -balance +balance +------- +(0 rows) step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +savings | 600 +(1 row) -savings 600 starting permutation: d1 wx2 r1 c2 read step d1: DELETE FROM accounts WHERE accountid = 'checking' AND balance < 1500 RETURNING balance; -balance +balance +------- + 600 +(1 row) -600 step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; step r1: ROLLBACK; step wx2: <... completed> -balance +balance +------- + 1050 +(1 row) -1050 step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 1050 +savings | 600 +(2 rows) -checking 1050 -savings 600 starting permutation: wnested2 c1 c2 read s2: NOTICE: upid: text checking = text checking: t @@ -279,20 +371,26 @@ step wnested2: step c1: COMMIT; step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | -600 +savings | 600 +(2 rows) -checking -600 -savings 600 starting permutation: wx1 wxext1 wnested2 c1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step wxext1: UPDATE accounts_ext SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 s2: NOTICE: upid: text checking = text checking: t s2: NOTICE: up: numeric 600 > numeric 200.0: t s2: NOTICE: lock_id: text checking = text checking: t @@ -322,24 +420,32 @@ s2: NOTICE: upid: text savings = text checking: f step wnested2: <... completed> step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | -800 +savings | 600 +(2 rows) -checking -800 -savings 600 starting permutation: wx1 wx1 wxext1 wnested2 c1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 200 +(1 row) -200 step wxext1: UPDATE accounts_ext SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 s2: NOTICE: upid: text checking = text checking: t s2: NOTICE: up: numeric 600 > numeric 200.0: t s2: NOTICE: lock_id: text checking = text checking: t @@ -365,28 +471,38 @@ s2: NOTICE: upid: text savings = text checking: f step wnested2: <... completed> step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 200 +savings | 600 +(2 rows) -checking 200 -savings 600 starting permutation: wx1 wx1 wxext1 wxext1 wnested2 c1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 200 +(1 row) -200 step wxext1: UPDATE accounts_ext SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step wxext1: UPDATE accounts_ext SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 200 +(1 row) -200 s2: NOTICE: upid: text checking = text checking: t s2: NOTICE: up: numeric 600 > numeric 200.0: t s2: NOTICE: lock_id: text checking = text checking: t @@ -411,24 +527,32 @@ s2: NOTICE: upid: text savings = text checking: f step wnested2: <... completed> step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 200 +savings | 600 +(2 rows) -checking 200 -savings 600 starting permutation: wx1 wxext1 wxext1 wnested2 c1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step wxext1: UPDATE accounts_ext SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step wxext1: UPDATE accounts_ext SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 200 +(1 row) -200 s2: NOTICE: upid: text checking = text checking: t s2: NOTICE: up: numeric 600 > numeric 200.0: t s2: NOTICE: lock_id: text checking = text checking: t @@ -453,16 +577,20 @@ s2: NOTICE: upid: text savings = text checking: f step wnested2: <... completed> step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 400 +savings | 600 +(2 rows) -checking 400 -savings 600 starting permutation: wx1 tocds1 wnested2 c1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step tocds1: UPDATE accounts SET accountid = 'cds' WHERE accountid = 'checking'; s2: NOTICE: upid: text checking = text checking: t s2: NOTICE: up: numeric 600 > numeric 200.0: t @@ -486,16 +614,20 @@ s2: NOTICE: upid: text savings = text checking: f step wnested2: <... completed> step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +cds | 400 +savings | 600 +(2 rows) -cds 400 -savings 600 starting permutation: wx1 tocdsext1 wnested2 c1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step tocdsext1: UPDATE accounts_ext SET accountid = 'cds' WHERE accountid = 'checking'; s2: NOTICE: upid: text checking = text checking: t s2: NOTICE: up: numeric 600 > numeric 200.0: t @@ -520,77 +652,99 @@ s2: NOTICE: upid: text savings = text checking: f step wnested2: <... completed> step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 400 +savings | 600 +(2 rows) -checking 400 -savings 600 starting permutation: wx1 updwcte c1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step updwcte: WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *) UPDATE accounts a SET balance = doup.balance + 100 FROM doup RETURNING *; step c1: COMMIT; step updwcte: <... completed> -accountid balance accountid balance +accountid|balance|accountid|balance +---------+-------+---------+------- +savings | 1600|checking | 1500 +(1 row) -savings 1600 checking 1500 step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 1500 +savings | 1600 +(2 rows) -checking 1500 -savings 1600 starting permutation: wx1 updwctefail c1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step updwctefail: WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *, update_checking(999)) UPDATE accounts a SET balance = doup.balance + 100 FROM doup RETURNING *; step c1: COMMIT; step updwctefail: <... completed> ERROR: tuple to be updated was already modified by an operation triggered by the current command step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 400 +savings | 600 +(2 rows) -checking 400 -savings 600 starting permutation: wx1 delwcte c1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step delwcte: WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *) DELETE FROM accounts a USING doup RETURNING *; step c1: COMMIT; step delwcte: <... completed> -accountid balance accountid balance +accountid|balance|accountid|balance +---------+-------+---------+------- +savings | 600|checking | 1500 +(1 row) -savings 600 checking 1500 step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 1500 +(1 row) -checking 1500 starting permutation: wx1 delwctefail c1 c2 read step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 400 +(1 row) -400 step delwctefail: WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *, update_checking(999)) DELETE FROM accounts a USING doup RETURNING *; step c1: COMMIT; step delwctefail: <... completed> ERROR: tuple to be deleted was already modified by an operation triggered by the current command step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 400 +savings | 600 +(2 rows) -checking 400 -savings 600 starting permutation: upsert1 upsert2 c1 c2 read step upsert1: @@ -613,32 +767,38 @@ step c1: COMMIT; step upsert2: <... completed> step c2: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 600 +savings | 2334 +(2 rows) -checking 600 -savings 2334 starting permutation: readp1 writep1 readp2 c1 c2 step readp1: SELECT tableoid::regclass, ctid, * FROM p WHERE b IN (0, 1) AND c = 0 FOR UPDATE; -tableoid ctid a b c - -c1 (0,1) 0 0 0 -c1 (0,4) 0 1 0 -c2 (0,1) 1 0 0 -c2 (0,4) 1 1 0 -c3 (0,1) 2 0 0 -c3 (0,4) 2 1 0 +tableoid|ctid |a|b|c +--------+-----+-+-+- +c1 |(0,1)|0|0|0 +c1 |(0,4)|0|1|0 +c2 |(0,1)|1|0|0 +c2 |(0,4)|1|1|0 +c3 |(0,1)|2|0|0 +c3 |(0,4)|2|1|0 +(6 rows) + step writep1: UPDATE p SET b = -1 WHERE a = 1 AND b = 1 AND c = 0; step readp2: SELECT tableoid::regclass, ctid, * FROM p WHERE b IN (0, 1) AND c = 0 FOR UPDATE; step c1: COMMIT; step readp2: <... completed> -tableoid ctid a b c +tableoid|ctid |a|b|c +--------+-----+-+-+- +c1 |(0,1)|0|0|0 +c1 |(0,4)|0|1|0 +c2 |(0,1)|1|0|0 +c3 |(0,1)|2|0|0 +c3 |(0,4)|2|1|0 +(5 rows) -c1 (0,1) 0 0 0 -c1 (0,4) 0 1 0 -c2 (0,1) 1 0 0 -c3 (0,1) 2 0 0 -c3 (0,4) 2 1 0 step c2: COMMIT; starting permutation: writep2 returningp1 c1 c2 @@ -649,28 +809,30 @@ step returningp1: step c1: COMMIT; step returningp1: <... completed> -a b c - -1 0 0 -1 0 1 -1 0 2 -1 -1 0 -1 1 1 -1 1 2 -1 -2 0 -1 2 1 -1 2 2 -1 -3 0 -2 0 0 -2 0 1 -2 0 2 -2 1 0 -2 1 1 -2 1 2 -2 2 0 -2 2 1 -2 2 2 -2 3 0 +a| b|c +-+--+- +1| 0|0 +1| 0|1 +1| 0|2 +1|-1|0 +1| 1|1 +1| 1|2 +1|-2|0 +1| 2|1 +1| 2|2 +1|-3|0 +2| 0|0 +2| 0|1 +2| 0|2 +2| 1|0 +2| 1|1 +2| 1|2 +2| 2|0 +2| 2|1 +2| 2|2 +2| 3|0 +(20 rows) + step c2: COMMIT; starting permutation: writep3a writep3b c1 c2 @@ -682,9 +844,11 @@ step c2: COMMIT; starting permutation: wx2 partiallock c2 c1 read step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 1050 +(1 row) -1050 step partiallock: SELECT * FROM accounts a1, accounts a2 WHERE a1.accountid = a2.accountid @@ -692,22 +856,28 @@ step partiallock: step c2: COMMIT; step partiallock: <... completed> -accountid balance accountid balance +accountid|balance|accountid|balance +---------+-------+---------+------- +checking | 1050|checking | 600 +savings | 600|savings | 600 +(2 rows) -checking 1050 checking 600 -savings 600 savings 600 step c1: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 1050 +savings | 600 +(2 rows) -checking 1050 -savings 600 starting permutation: wx2 lockwithvalues c2 c1 read step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; -balance +balance +------- + 1050 +(1 row) -1050 step lockwithvalues: -- Reference rowmark column that differs in type from targetlist at some attno. -- See CAHU7rYZo_C4ULsAx_LAj8az9zqgrD8WDd4hTegDTMM1LMqrBsg@mail.gmail.com @@ -717,16 +887,20 @@ step lockwithvalues: step c2: COMMIT; step lockwithvalues: <... completed> -accountid balance id +accountid|balance|id +---------+-------+-------- +checking | 1050|checking +savings | 600|savings +(2 rows) -checking 1050 checking -savings 600 savings step c1: COMMIT; step read: SELECT * FROM accounts ORDER BY accountid; -accountid balance +accountid|balance +---------+------- +checking | 1050 +savings | 600 +(2 rows) -checking 1050 -savings 600 starting permutation: wx2_ext partiallock_ext c2 c1 read_ext step wx2_ext: UPDATE accounts_ext SET balance = balance + 450; @@ -737,16 +911,20 @@ step partiallock_ext: step c2: COMMIT; step partiallock_ext: <... completed> -accountid balance other newcol newcol2 accountid balance other newcol newcol2 +accountid|balance|other|newcol|newcol2|accountid|balance|other|newcol|newcol2 +---------+-------+-----+------+-------+---------+-------+-----+------+------- +checking | 1050|other| 42| |checking | 600|other| 42| +savings | 1150| | 42| |savings | 700| | 42| +(2 rows) -checking 1050 other 42 checking 600 other 42 -savings 1150 42 savings 700 42 step c1: COMMIT; step read_ext: SELECT * FROM accounts_ext ORDER BY accountid; -accountid balance other newcol newcol2 +accountid|balance|other|newcol|newcol2 +---------+-------+-----+------+------- +checking | 1050|other| 42| +savings | 1150| | 42| +(2 rows) -checking 1050 other 42 -savings 1150 42 starting permutation: updateforss readforss c1 c2 step updateforss: @@ -762,9 +940,11 @@ step readforss: step c1: COMMIT; step readforss: <... completed> -ta_id ta_value tb_row +ta_id|ta_value |tb_row +-----+--------------+--------------- + 1|newTableAValue|(1,tableBValue) +(1 row) -1 newTableAValue (1,tableBValue) step c2: COMMIT; starting permutation: updateforcip updateforcip2 c1 c2 read_a @@ -778,9 +958,11 @@ step c1: COMMIT; step updateforcip2: <... completed> step c2: COMMIT; step read_a: SELECT * FROM table_a ORDER BY id; -id value +id|value +--+-------- + 1|newValue +(1 row) -1 newValue starting permutation: updateforcip updateforcip3 c1 c2 read_a step updateforcip: @@ -794,9 +976,11 @@ step c1: COMMIT; step updateforcip3: <... completed> step c2: COMMIT; step read_a: SELECT * FROM table_a ORDER BY id; -id value +id|value +--+-------- + 1|newValue +(1 row) -1 newValue starting permutation: wrtwcte readwcte c1 c2 step wrtwcte: UPDATE table_a SET value = 'tableAValue2' WHERE id = 1; @@ -815,9 +999,11 @@ step readwcte: step c1: COMMIT; step c2: COMMIT; step readwcte: <... completed> -id value +id|value +--+------------ + 1|tableAValue2 +(1 row) -1 tableAValue2 starting permutation: wrjt selectjoinforupdate c2 c1 step wrjt: UPDATE jointest SET data = 42 WHERE id = 7; @@ -831,25 +1017,29 @@ step selectjoinforupdate: step c2: COMMIT; step selectjoinforupdate: <... completed> -QUERY PLAN - -LockRows - -> Merge Join - Merge Cond: (a.id = b.id) +QUERY PLAN +---------------------------------------------------------- +LockRows + -> Merge Join + Merge Cond: (a.id = b.id) -> Index Scan using jointest_id_idx on jointest a -> Index Scan using jointest_id_idx on jointest b -id data id data +(5 rows) + +id|data|id|data +--+----+--+---- + 1| 0| 1| 0 + 2| 0| 2| 0 + 3| 0| 3| 0 + 4| 0| 4| 0 + 5| 0| 5| 0 + 6| 0| 6| 0 + 7| 42| 7| 42 + 8| 0| 8| 0 + 9| 0| 9| 0 +10| 0|10| 0 +(10 rows) -1 0 1 0 -2 0 2 0 -3 0 3 0 -4 0 4 0 -5 0 5 0 -6 0 6 0 -7 42 7 42 -8 0 8 0 -9 0 9 0 -10 0 10 0 step c1: COMMIT; starting permutation: wrjt selectresultforupdate c2 c1 @@ -868,27 +1058,33 @@ step selectresultforupdate: step c2: COMMIT; step selectresultforupdate: <... completed> -x y id value id data - -1 7 1 tableAValue 7 0 -QUERY PLAN - -LockRows - Output: 1, 7, a.id, a.value, jt.id, jt.data, jt.ctid, a.ctid - -> Nested Loop Left Join +x|y|id|value |id|data +-+-+--+-----------+--+---- +1|7| 1|tableAValue| 7| 0 +(1 row) + +QUERY PLAN +-------------------------------------------------------------------- +LockRows + Output: 1, 7, a.id, a.value, jt.id, jt.data, jt.ctid, a.ctid + -> Nested Loop Left Join Output: 1, 7, a.id, a.value, jt.id, jt.data, jt.ctid, a.ctid - -> Nested Loop - Output: jt.id, jt.data, jt.ctid - -> Seq Scan on public.jointest jt - Output: jt.id, jt.data, jt.ctid - Filter: (jt.id = 7) - -> Result - -> Seq Scan on public.table_a a - Output: a.id, a.value, a.ctid - Filter: (a.id = 1) -x y id value id data + -> Nested Loop + Output: jt.id, jt.data, jt.ctid + -> Seq Scan on public.jointest jt + Output: jt.id, jt.data, jt.ctid + Filter: (jt.id = 7) + -> Result + -> Seq Scan on public.table_a a + Output: a.id, a.value, a.ctid + Filter: (a.id = 1) +(13 rows) + +x|y|id|value |id|data +-+-+--+-----------+--+---- +1|7| 1|tableAValue| 7| 42 +(1 row) -1 7 1 tableAValue 7 42 step c1: COMMIT; starting permutation: wrtwcte multireadwcte c1 c2 @@ -902,9 +1098,11 @@ step multireadwcte: step c1: COMMIT; step c2: COMMIT; step multireadwcte: <... completed> -subid id +subid|id +-----+-- + 1| 1 +(1 row) -1 1 starting permutation: simplepartupdate complexpartupdate c1 c2 step simplepartupdate: @@ -922,9 +1120,11 @@ starting permutation: simplepartupdate_route1to2 complexpartupdate_route_err1 c1 step simplepartupdate_route1to2: update parttbl set a = 2 where c = 1 returning *; -a b c +a|b|c +-+-+- +2|1|1 +(1 row) -2 1 1 step complexpartupdate_route_err1: with u as (update another_parttbl set a = 1 returning another_parttbl.*) update parttbl p set a = u.a from u where p.a = u.a and p.c = 1 returning p.*; @@ -938,34 +1138,42 @@ starting permutation: simplepartupdate_noroute complexpartupdate_route c1 c2 step simplepartupdate_noroute: update parttbl set b = 2 where c = 1 returning *; -a b c +a|b|c +-+-+- +1|2|1 +(1 row) -1 2 1 step complexpartupdate_route: with u as (update another_parttbl set a = 1 returning another_parttbl.*) update parttbl p set a = p.b from u where p.a = u.a and p.c = 1 returning p.*; step c1: COMMIT; step complexpartupdate_route: <... completed> -a b c +a|b|c +-+-+- +2|2|1 +(1 row) -2 2 1 step c2: COMMIT; starting permutation: simplepartupdate_noroute complexpartupdate_doesnt_route c1 c2 step simplepartupdate_noroute: update parttbl set b = 2 where c = 1 returning *; -a b c +a|b|c +-+-+- +1|2|1 +(1 row) -1 2 1 step complexpartupdate_doesnt_route: with u as (update another_parttbl set a = 1 returning another_parttbl.*) update parttbl p set a = 3 - p.b from u where p.a = u.a and p.c = 1 returning p.*; step c1: COMMIT; step complexpartupdate_doesnt_route: <... completed> -a b c +a|b|c +-+-+- +1|2|1 +(1 row) -1 2 1 step c2: COMMIT; diff --git a/src/test/isolation/expected/fk-partitioned-2.out b/src/test/isolation/expected/fk-partitioned-2.out index 278bec4fdfc3b..8c6c714d0597f 100644 --- a/src/test/isolation/expected/fk-partitioned-2.out +++ b/src/test/isolation/expected/fk-partitioned-2.out @@ -14,9 +14,11 @@ starting permutation: s1b s1d s2bs s2i s1c s2c step s1b: begin; step s1d: delete from ppk where a = 1; step s2bs: begin isolation level serializable; select 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2i: insert into pfk values (1); step s1c: commit; step s2i: <... completed> @@ -36,9 +38,11 @@ step s2c: commit; starting permutation: s1b s2bs s1d s2i s1c s2c step s1b: begin; step s2bs: begin isolation level serializable; select 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s1d: delete from ppk where a = 1; step s2i: insert into pfk values (1); step s1c: commit; @@ -59,9 +63,11 @@ step s1c: commit; starting permutation: s1b s2bs s2i s1d s2c s1c step s1b: begin; step s2bs: begin isolation level serializable; select 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s2i: insert into pfk values (1); step s1d: delete from ppk where a = 1; step s2c: commit; diff --git a/src/test/isolation/expected/freeze-the-dead.out b/src/test/isolation/expected/freeze-the-dead.out index 8e638f132f955..88678bd04539c 100644 --- a/src/test/isolation/expected/freeze-the-dead.out +++ b/src/test/isolation/expected/freeze-the-dead.out @@ -6,13 +6,17 @@ step s2_begin: BEGIN; step s3_begin: BEGIN; step s1_update: UPDATE tab_freeze SET x = x + 1 WHERE id = 3; step s2_key_share: SELECT id FROM tab_freeze WHERE id = 3 FOR KEY SHARE; -id +id +-- + 3 +(1 row) -3 step s3_key_share: SELECT id FROM tab_freeze WHERE id = 3 FOR KEY SHARE; -id +id +-- + 3 +(1 row) -3 step s1_update: UPDATE tab_freeze SET x = x + 1 WHERE id = 3; step s1_commit: COMMIT; step s2_commit: COMMIT; @@ -24,13 +28,17 @@ step s1_selectone: SELECT * FROM tab_freeze WHERE id = 3; COMMIT; -id name x +id|name|x +--+----+- + 3| 333|2 +(1 row) -3 333 2 step s3_commit: COMMIT; step s2_vacuum: VACUUM FREEZE tab_freeze; step s1_selectall: SELECT * FROM tab_freeze ORDER BY name, id; -id name x +id|name|x +--+----+- + 1| 111|0 + 3| 333|2 +(2 rows) -1 111 0 -3 333 2 diff --git a/src/test/isolation/expected/horizons.out b/src/test/isolation/expected/horizons.out index 07bbc9832cdff..4150b2dee643a 100644 --- a/src/test/isolation/expected/horizons.out +++ b/src/test/isolation/expected/horizons.out @@ -9,31 +9,39 @@ step ll_start: BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step pruner_query_plan: EXPLAIN (COSTS OFF) SELECT * FROM horizons_tst ORDER BY data; -QUERY PLAN - +QUERY PLAN +----------------------------------------------------------- Index Only Scan using horizons_tst_data_key on horizons_tst +(1 row) + step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_delete: DELETE FROM horizons_tst; @@ -42,17 +50,21 @@ step pruner_query: EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step ll_commit: COMMIT; step pruner_drop: DROP TABLE horizons_tst; @@ -67,31 +79,39 @@ step ll_start: BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step pruner_query_plan: EXPLAIN (COSTS OFF) SELECT * FROM horizons_tst ORDER BY data; -QUERY PLAN - +QUERY PLAN +----------------------------------------------------------- Index Only Scan using horizons_tst_data_key on horizons_tst +(1 row) + step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_delete: DELETE FROM horizons_tst; @@ -100,17 +120,21 @@ step pruner_query: EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 0 +(1 row) -0 step ll_commit: COMMIT; step pruner_drop: DROP TABLE horizons_tst; @@ -125,25 +149,31 @@ step ll_start: BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_begin: BEGIN; step pruner_delete: DELETE FROM horizons_tst; @@ -153,17 +183,21 @@ step pruner_query: EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step ll_commit: COMMIT; step pruner_commit: COMMIT; step pruner_drop: @@ -179,25 +213,31 @@ step ll_start: BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_delete: DELETE FROM horizons_tst; @@ -209,17 +249,21 @@ step pruner_query: EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step ll_commit: COMMIT; step pruner_drop: DROP TABLE horizons_tst; @@ -234,25 +278,31 @@ step ll_start: BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 2 +(1 row) -2 step pruner_delete: DELETE FROM horizons_tst; @@ -264,17 +314,21 @@ step pruner_query: EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 0 +(1 row) -0 step pruner_query: SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) SELECT * FROM horizons_tst ORDER BY data;$$)->0->'Plan'->'Heap Fetches'; -?column? +?column? +-------- + 0 +(1 row) -0 step ll_commit: COMMIT; step pruner_drop: DROP TABLE horizons_tst; diff --git a/src/test/isolation/expected/inherit-temp.out b/src/test/isolation/expected/inherit-temp.out index edfc8f906cb22..e6f0f220e8a23 100644 --- a/src/test/isolation/expected/inherit-temp.out +++ b/src/test/isolation/expected/inherit-temp.out @@ -5,29 +5,37 @@ step s1_insert_p: INSERT INTO inh_parent VALUES (1), (2); step s1_insert_c: INSERT INTO inh_temp_child_s1 VALUES (3), (4); step s2_insert_c: INSERT INTO inh_temp_child_s2 VALUES (5), (6); step s1_select_p: SELECT a FROM inh_parent; -a +a +- +1 +2 +3 +4 +(4 rows) -1 -2 -3 -4 step s1_select_c: SELECT a FROM inh_temp_child_s1; -a +a +- +3 +4 +(2 rows) -3 -4 step s2_select_p: SELECT a FROM inh_parent; -a +a +- +1 +2 +5 +6 +(4 rows) -1 -2 -5 -6 step s2_select_c: SELECT a FROM inh_temp_child_s2; -a +a +- +5 +6 +(2 rows) -5 -6 starting permutation: s1_insert_p s1_insert_c s2_insert_c s1_update_p s1_update_c s1_select_p s1_select_c s2_select_p s2_select_c step s1_insert_p: INSERT INTO inh_parent VALUES (1), (2); @@ -36,29 +44,37 @@ step s2_insert_c: INSERT INTO inh_temp_child_s2 VALUES (5), (6); step s1_update_p: UPDATE inh_parent SET a = 11 WHERE a = 1; step s1_update_c: UPDATE inh_parent SET a = 13 WHERE a IN (3, 5); step s1_select_p: SELECT a FROM inh_parent; -a + a +-- + 2 +11 + 4 +13 +(4 rows) -2 -11 -4 -13 step s1_select_c: SELECT a FROM inh_temp_child_s1; -a + a +-- + 4 +13 +(2 rows) -4 -13 step s2_select_p: SELECT a FROM inh_parent; -a + a +-- + 2 +11 + 5 + 6 +(4 rows) -2 -11 -5 -6 step s2_select_c: SELECT a FROM inh_temp_child_s2; -a +a +- +5 +6 +(2 rows) -5 -6 starting permutation: s1_insert_p s1_insert_c s2_insert_c s2_update_c s1_select_p s1_select_c s2_select_p s2_select_c step s1_insert_p: INSERT INTO inh_parent VALUES (1), (2); @@ -66,29 +82,37 @@ step s1_insert_c: INSERT INTO inh_temp_child_s1 VALUES (3), (4); step s2_insert_c: INSERT INTO inh_temp_child_s2 VALUES (5), (6); step s2_update_c: UPDATE inh_parent SET a = 15 WHERE a IN (3, 5); step s1_select_p: SELECT a FROM inh_parent; -a +a +- +1 +2 +3 +4 +(4 rows) -1 -2 -3 -4 step s1_select_c: SELECT a FROM inh_temp_child_s1; -a +a +- +3 +4 +(2 rows) -3 -4 step s2_select_p: SELECT a FROM inh_parent; -a + a +-- + 1 + 2 + 6 +15 +(4 rows) -1 -2 -6 -15 step s2_select_c: SELECT a FROM inh_temp_child_s2; -a + a +-- + 6 +15 +(2 rows) -6 -15 starting permutation: s1_insert_p s1_insert_c s2_insert_c s1_delete_p s1_delete_c s1_select_p s1_select_c s2_select_p s2_select_c step s1_insert_p: INSERT INTO inh_parent VALUES (1), (2); @@ -97,25 +121,33 @@ step s2_insert_c: INSERT INTO inh_temp_child_s2 VALUES (5), (6); step s1_delete_p: DELETE FROM inh_parent WHERE a = 2; step s1_delete_c: DELETE FROM inh_parent WHERE a IN (4, 6); step s1_select_p: SELECT a FROM inh_parent; -a +a +- +1 +3 +(2 rows) -1 -3 step s1_select_c: SELECT a FROM inh_temp_child_s1; -a +a +- +3 +(1 row) -3 step s2_select_p: SELECT a FROM inh_parent; -a +a +- +1 +5 +6 +(3 rows) -1 -5 -6 step s2_select_c: SELECT a FROM inh_temp_child_s2; -a +a +- +5 +6 +(2 rows) -5 -6 starting permutation: s1_insert_p s1_insert_c s2_insert_c s2_delete_c s1_select_p s1_select_c s2_select_p s2_select_c step s1_insert_p: INSERT INTO inh_parent VALUES (1), (2); @@ -123,27 +155,35 @@ step s1_insert_c: INSERT INTO inh_temp_child_s1 VALUES (3), (4); step s2_insert_c: INSERT INTO inh_temp_child_s2 VALUES (5), (6); step s2_delete_c: DELETE FROM inh_parent WHERE a IN (4, 6); step s1_select_p: SELECT a FROM inh_parent; -a +a +- +1 +2 +3 +4 +(4 rows) -1 -2 -3 -4 step s1_select_c: SELECT a FROM inh_temp_child_s1; -a +a +- +3 +4 +(2 rows) -3 -4 step s2_select_p: SELECT a FROM inh_parent; -a +a +- +1 +2 +5 +(3 rows) -1 -2 -5 step s2_select_c: SELECT a FROM inh_temp_child_s2; -a +a +- +5 +(1 row) -5 starting permutation: s1_insert_p s1_insert_c s2_insert_c s1_truncate_p s1_select_p s1_select_c s2_select_p s2_select_c step s1_insert_p: INSERT INTO inh_parent VALUES (1), (2); @@ -151,21 +191,29 @@ step s1_insert_c: INSERT INTO inh_temp_child_s1 VALUES (3), (4); step s2_insert_c: INSERT INTO inh_temp_child_s2 VALUES (5), (6); step s1_truncate_p: TRUNCATE inh_parent; step s1_select_p: SELECT a FROM inh_parent; -a +a +- +(0 rows) step s1_select_c: SELECT a FROM inh_temp_child_s1; -a +a +- +(0 rows) step s2_select_p: SELECT a FROM inh_parent; -a +a +- +5 +6 +(2 rows) -5 -6 step s2_select_c: SELECT a FROM inh_temp_child_s2; -a +a +- +5 +6 +(2 rows) -5 -6 starting permutation: s1_insert_p s1_insert_c s2_insert_c s2_truncate_p s1_select_p s1_select_c s2_select_p s2_select_c step s1_insert_p: INSERT INTO inh_parent VALUES (1), (2); @@ -173,20 +221,28 @@ step s1_insert_c: INSERT INTO inh_temp_child_s1 VALUES (3), (4); step s2_insert_c: INSERT INTO inh_temp_child_s2 VALUES (5), (6); step s2_truncate_p: TRUNCATE inh_parent; step s1_select_p: SELECT a FROM inh_parent; -a +a +- +3 +4 +(2 rows) -3 -4 step s1_select_c: SELECT a FROM inh_temp_child_s1; -a +a +- +3 +4 +(2 rows) -3 -4 step s2_select_p: SELECT a FROM inh_parent; -a +a +- +(0 rows) step s2_select_c: SELECT a FROM inh_temp_child_s2; -a +a +- +(0 rows) starting permutation: s1_insert_p s1_insert_c s2_insert_c s1_begin s1_truncate_p s2_select_p s1_commit @@ -198,10 +254,12 @@ step s1_truncate_p: TRUNCATE inh_parent; step s2_select_p: SELECT a FROM inh_parent; step s1_commit: COMMIT; step s2_select_p: <... completed> -a +a +- +5 +6 +(2 rows) -5 -6 starting permutation: s1_insert_p s1_insert_c s2_insert_c s1_begin s1_truncate_p s2_select_c s1_commit step s1_insert_p: INSERT INTO inh_parent VALUES (1), (2); @@ -210,8 +268,10 @@ step s2_insert_c: INSERT INTO inh_temp_child_s2 VALUES (5), (6); step s1_begin: BEGIN; step s1_truncate_p: TRUNCATE inh_parent; step s2_select_c: SELECT a FROM inh_temp_child_s2; -a +a +- +5 +6 +(2 rows) -5 -6 step s1_commit: COMMIT; diff --git a/src/test/isolation/expected/insert-conflict-do-nothing-2.out b/src/test/isolation/expected/insert-conflict-do-nothing-2.out index c90002fd021c4..22d41d33ed07a 100644 --- a/src/test/isolation/expected/insert-conflict-do-nothing-2.out +++ b/src/test/isolation/expected/insert-conflict-do-nothing-2.out @@ -8,9 +8,11 @@ step c1: COMMIT; step donothing2: INSERT INTO ints(key, val) VALUES(1, 'donothing2'), (1, 'donothing3') ON CONFLICT DO NOTHING; step c2: COMMIT; step show: SELECT * FROM ints; -key val +key|val +---+---------- + 1|donothing1 +(1 row) -1 donothing1 starting permutation: beginrr1 beginrr2 donothing2 c2 donothing1 c1 show step beginrr1: BEGIN ISOLATION LEVEL REPEATABLE READ; @@ -20,9 +22,11 @@ step c2: COMMIT; step donothing1: INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT DO NOTHING; step c1: COMMIT; step show: SELECT * FROM ints; -key val +key|val +---+---------- + 1|donothing2 +(1 row) -1 donothing2 starting permutation: beginrr1 beginrr2 donothing1 donothing2 c1 c2 show step beginrr1: BEGIN ISOLATION LEVEL REPEATABLE READ; @@ -34,9 +38,11 @@ step donothing2: <... completed> ERROR: could not serialize access due to concurrent update step c2: COMMIT; step show: SELECT * FROM ints; -key val +key|val +---+---------- + 1|donothing1 +(1 row) -1 donothing1 starting permutation: beginrr1 beginrr2 donothing2 donothing1 c2 c1 show step beginrr1: BEGIN ISOLATION LEVEL REPEATABLE READ; @@ -48,9 +54,11 @@ step donothing1: <... completed> ERROR: could not serialize access due to concurrent update step c1: COMMIT; step show: SELECT * FROM ints; -key val +key|val +---+---------- + 1|donothing2 +(1 row) -1 donothing2 starting permutation: begins1 begins2 donothing1 c1 donothing2 c2 show step begins1: BEGIN ISOLATION LEVEL SERIALIZABLE; @@ -60,9 +68,11 @@ step c1: COMMIT; step donothing2: INSERT INTO ints(key, val) VALUES(1, 'donothing2'), (1, 'donothing3') ON CONFLICT DO NOTHING; step c2: COMMIT; step show: SELECT * FROM ints; -key val +key|val +---+---------- + 1|donothing1 +(1 row) -1 donothing1 starting permutation: begins1 begins2 donothing2 c2 donothing1 c1 show step begins1: BEGIN ISOLATION LEVEL SERIALIZABLE; @@ -72,9 +82,11 @@ step c2: COMMIT; step donothing1: INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT DO NOTHING; step c1: COMMIT; step show: SELECT * FROM ints; -key val +key|val +---+---------- + 1|donothing2 +(1 row) -1 donothing2 starting permutation: begins1 begins2 donothing1 donothing2 c1 c2 show step begins1: BEGIN ISOLATION LEVEL SERIALIZABLE; @@ -86,9 +98,11 @@ step donothing2: <... completed> ERROR: could not serialize access due to concurrent update step c2: COMMIT; step show: SELECT * FROM ints; -key val +key|val +---+---------- + 1|donothing1 +(1 row) -1 donothing1 starting permutation: begins1 begins2 donothing2 donothing1 c2 c1 show step begins1: BEGIN ISOLATION LEVEL SERIALIZABLE; @@ -100,6 +114,8 @@ step donothing1: <... completed> ERROR: could not serialize access due to concurrent update step c1: COMMIT; step show: SELECT * FROM ints; -key val +key|val +---+---------- + 1|donothing2 +(1 row) -1 donothing2 diff --git a/src/test/isolation/expected/insert-conflict-do-nothing.out b/src/test/isolation/expected/insert-conflict-do-nothing.out index 0a0958f034181..cadf46d06546a 100644 --- a/src/test/isolation/expected/insert-conflict-do-nothing.out +++ b/src/test/isolation/expected/insert-conflict-do-nothing.out @@ -6,9 +6,11 @@ step donothing2: INSERT INTO ints(key, val) VALUES(1, 'donothing2') ON CONFLICT step c1: COMMIT; step donothing2: <... completed> step select2: SELECT * FROM ints; -key val +key|val +---+---------- + 1|donothing1 +(1 row) -1 donothing1 step c2: COMMIT; starting permutation: donothing1 donothing2 a1 select2 c2 @@ -17,7 +19,9 @@ step donothing2: INSERT INTO ints(key, val) VALUES(1, 'donothing2') ON CONFLICT step a1: ABORT; step donothing2: <... completed> step select2: SELECT * FROM ints; -key val +key|val +---+---------- + 1|donothing2 +(1 row) -1 donothing2 step c2: COMMIT; diff --git a/src/test/isolation/expected/insert-conflict-do-update-2.out b/src/test/isolation/expected/insert-conflict-do-update-2.out index 05fb06f8d8d94..7acd1aef16837 100644 --- a/src/test/isolation/expected/insert-conflict-do-update-2.out +++ b/src/test/isolation/expected/insert-conflict-do-update-2.out @@ -6,9 +6,11 @@ step insert2: INSERT INTO upsert(key, payload) VALUES('FOOFOO', 'insert2') ON CO step c1: COMMIT; step insert2: <... completed> step select2: SELECT * FROM upsert; -key payload +key |payload +------+-------------------------- +FOOFOO|insert1 updated by insert2 +(1 row) -FOOFOO insert1 updated by insert2 step c2: COMMIT; starting permutation: insert1 insert2 a1 select2 c2 @@ -17,7 +19,9 @@ step insert2: INSERT INTO upsert(key, payload) VALUES('FOOFOO', 'insert2') ON CO step a1: ABORT; step insert2: <... completed> step select2: SELECT * FROM upsert; -key payload +key |payload +------+------- +FOOFOO|insert2 +(1 row) -FOOFOO insert2 step c2: COMMIT; diff --git a/src/test/isolation/expected/insert-conflict-do-update-3.out b/src/test/isolation/expected/insert-conflict-do-update-3.out index 6600410618333..2d7e0b8f1818a 100644 --- a/src/test/isolation/expected/insert-conflict-do-update-3.out +++ b/src/test/isolation/expected/insert-conflict-do-update-3.out @@ -12,15 +12,19 @@ step insert1: SELECT * FROM colors ORDER BY key; step c2: COMMIT; step insert1: <... completed> -key color is_active +key|color|is_active +---+-----+--------- + 1|Red |f + 2|Green|f + 3|Blue |f +(3 rows) -1 Red f -2 Green f -3 Blue f step select1surprise: SELECT * FROM colors ORDER BY key; -key color is_active +key|color|is_active +---+-----+--------- + 1|Brown|t + 2|Green|f + 3|Blue |f +(3 rows) -1 Brown t -2 Green f -3 Blue f step c1: COMMIT; diff --git a/src/test/isolation/expected/insert-conflict-do-update.out b/src/test/isolation/expected/insert-conflict-do-update.out index a634918784227..16c384c8363d7 100644 --- a/src/test/isolation/expected/insert-conflict-do-update.out +++ b/src/test/isolation/expected/insert-conflict-do-update.out @@ -6,9 +6,11 @@ step insert2: INSERT INTO upsert(key, val) VALUES(1, 'insert2') ON CONFLICT (key step c1: COMMIT; step insert2: <... completed> step select2: SELECT * FROM upsert; -key val +key|val +---+-------------------------- + 1|insert1 updated by insert2 +(1 row) -1 insert1 updated by insert2 step c2: COMMIT; starting permutation: insert1 insert2 a1 select2 c2 @@ -17,7 +19,9 @@ step insert2: INSERT INTO upsert(key, val) VALUES(1, 'insert2') ON CONFLICT (key step a1: ABORT; step insert2: <... completed> step select2: SELECT * FROM upsert; -key val +key|val +---+------- + 1|insert2 +(1 row) -1 insert2 step c2: COMMIT; diff --git a/src/test/isolation/expected/insert-conflict-specconflict.out b/src/test/isolation/expected/insert-conflict-specconflict.out index 8d319296ddf75..bb8f950f2cfbb 100644 --- a/src/test/isolation/expected/insert-conflict-specconflict.out +++ b/src/test/isolation/expected/insert-conflict-specconflict.out @@ -2,16 +2,20 @@ Parsed test spec with 3 sessions starting permutation: controller_locks controller_show s1_upsert s2_upsert controller_show controller_unlock_1_1 controller_unlock_2_1 controller_unlock_1_3 controller_unlock_2_3 controller_show controller_unlock_2_2 controller_show controller_unlock_1_2 controller_show step controller_locks: SELECT pg_advisory_lock(sess, lock), sess, lock FROM generate_series(1, 2) a(sess), generate_series(1,3) b(lock); -pg_advisory_locksess lock - - 1 1 - 1 2 - 1 3 - 2 1 - 2 2 - 2 3 +pg_advisory_lock|sess|lock +----------------+----+---- + | 1| 1 + | 1| 2 + | 1| 3 + | 2| 1 + | 2| 2 + | 2| 3 +(6 rows) + step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 s1: NOTICE: acquiring advisory lock on 3 @@ -20,66 +24,90 @@ s2: NOTICE: blurt_and_lock_123() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 3 step s2_upsert: INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s2') ON CONFLICT (blurt_and_lock_123(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s2'; step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step controller_unlock_1_1: SELECT pg_advisory_unlock(1, 1); pg_advisory_unlock +------------------ +t +(1 row) -t step controller_unlock_2_1: SELECT pg_advisory_unlock(2, 1); pg_advisory_unlock +------------------ +t +(1 row) -t step controller_unlock_1_3: SELECT pg_advisory_unlock(1, 3); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 s1: NOTICE: acquiring advisory lock on 2 step controller_unlock_2_3: SELECT pg_advisory_unlock(2, 3); pg_advisory_unlock +------------------ +t +(1 row) -t s2: NOTICE: blurt_and_lock_123() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 2 step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step controller_unlock_2_2: SELECT pg_advisory_unlock(2, 2); pg_advisory_unlock +------------------ +t +(1 row) -t step s2_upsert: <... completed> step controller_show: SELECT * FROM upserttest; -key data +key|data +---+----------- +k1 |inserted s2 +(1 row) -k1 inserted s2 step controller_unlock_1_2: SELECT pg_advisory_unlock(1, 2); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 s1: NOTICE: acquiring advisory lock on 2 s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 s1: NOTICE: acquiring advisory lock on 2 step s1_upsert: <... completed> step controller_show: SELECT * FROM upserttest; -key data +key|data +---+----------------------------------- +k1 |inserted s2 with conflict update s1 +(1 row) -k1 inserted s2 with conflict update s1 starting permutation: controller_locks controller_show s1_upsert s2_upsert controller_show controller_unlock_1_1 controller_unlock_2_1 controller_unlock_1_3 controller_unlock_2_3 controller_show controller_unlock_1_2 controller_show controller_unlock_2_2 controller_show step controller_locks: SELECT pg_advisory_lock(sess, lock), sess, lock FROM generate_series(1, 2) a(sess), generate_series(1,3) b(lock); -pg_advisory_locksess lock - - 1 1 - 1 2 - 1 3 - 2 1 - 2 2 - 2 3 +pg_advisory_lock|sess|lock +----------------+----+---- + | 1| 1 + | 1| 2 + | 1| 3 + | 2| 1 + | 2| 2 + | 2| 3 +(6 rows) + step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 s1: NOTICE: acquiring advisory lock on 3 @@ -88,66 +116,90 @@ s2: NOTICE: blurt_and_lock_123() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 3 step s2_upsert: INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s2') ON CONFLICT (blurt_and_lock_123(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s2'; step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step controller_unlock_1_1: SELECT pg_advisory_unlock(1, 1); pg_advisory_unlock +------------------ +t +(1 row) -t step controller_unlock_2_1: SELECT pg_advisory_unlock(2, 1); pg_advisory_unlock +------------------ +t +(1 row) -t step controller_unlock_1_3: SELECT pg_advisory_unlock(1, 3); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 s1: NOTICE: acquiring advisory lock on 2 step controller_unlock_2_3: SELECT pg_advisory_unlock(2, 3); pg_advisory_unlock +------------------ +t +(1 row) -t s2: NOTICE: blurt_and_lock_123() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 2 step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step controller_unlock_1_2: SELECT pg_advisory_unlock(1, 2); pg_advisory_unlock +------------------ +t +(1 row) -t step s1_upsert: <... completed> step controller_show: SELECT * FROM upserttest; -key data +key|data +---+----------- +k1 |inserted s1 +(1 row) -k1 inserted s1 step controller_unlock_2_2: SELECT pg_advisory_unlock(2, 2); pg_advisory_unlock +------------------ +t +(1 row) -t s2: NOTICE: blurt_and_lock_123() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 2 s2: NOTICE: blurt_and_lock_123() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 2 step s2_upsert: <... completed> step controller_show: SELECT * FROM upserttest; -key data +key|data +---+----------------------------------- +k1 |inserted s1 with conflict update s2 +(1 row) -k1 inserted s1 with conflict update s2 starting permutation: controller_locks controller_show s1_insert_toast s2_insert_toast controller_show controller_unlock_1_1 controller_unlock_2_1 controller_unlock_1_3 controller_unlock_2_3 controller_show controller_unlock_1_2 controller_show_count controller_unlock_2_2 controller_show_count step controller_locks: SELECT pg_advisory_lock(sess, lock), sess, lock FROM generate_series(1, 2) a(sess), generate_series(1,3) b(lock); -pg_advisory_locksess lock - - 1 1 - 1 2 - 1 3 - 2 1 - 2 2 - 2 3 +pg_advisory_lock|sess|lock +----------------+----+---- + | 1| 1 + | 1| 2 + | 1| 3 + | 2| 1 + | 2| 2 + | 2| 3 +(6 rows) + step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) s1: NOTICE: blurt_and_lock_123() called for k2 in session 1 s1: NOTICE: acquiring advisory lock on 3 @@ -156,66 +208,90 @@ s2: NOTICE: blurt_and_lock_123() called for k2 in session 2 s2: NOTICE: acquiring advisory lock on 3 step s2_insert_toast: INSERT INTO upserttest VALUES('k2', ctoast_large_val()) ON CONFLICT DO NOTHING; step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step controller_unlock_1_1: SELECT pg_advisory_unlock(1, 1); pg_advisory_unlock +------------------ +t +(1 row) -t step controller_unlock_2_1: SELECT pg_advisory_unlock(2, 1); pg_advisory_unlock +------------------ +t +(1 row) -t step controller_unlock_1_3: SELECT pg_advisory_unlock(1, 3); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: blurt_and_lock_123() called for k2 in session 1 s1: NOTICE: acquiring advisory lock on 2 step controller_unlock_2_3: SELECT pg_advisory_unlock(2, 3); pg_advisory_unlock +------------------ +t +(1 row) -t s2: NOTICE: blurt_and_lock_123() called for k2 in session 2 s2: NOTICE: acquiring advisory lock on 2 step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step controller_unlock_1_2: SELECT pg_advisory_unlock(1, 2); pg_advisory_unlock +------------------ +t +(1 row) -t step s1_insert_toast: <... completed> step controller_show_count: SELECT COUNT(*) FROM upserttest; -count +count +----- + 1 +(1 row) -1 step controller_unlock_2_2: SELECT pg_advisory_unlock(2, 2); pg_advisory_unlock +------------------ +t +(1 row) -t s2: NOTICE: blurt_and_lock_123() called for k2 in session 2 s2: NOTICE: acquiring advisory lock on 2 s2: NOTICE: blurt_and_lock_123() called for k2 in session 2 s2: NOTICE: acquiring advisory lock on 2 step s2_insert_toast: <... completed> step controller_show_count: SELECT COUNT(*) FROM upserttest; -count +count +----- + 1 +(1 row) -1 starting permutation: controller_locks controller_show s1_begin s2_begin s1_upsert s2_upsert controller_show controller_unlock_1_1 controller_unlock_2_1 controller_unlock_1_3 controller_unlock_2_3 controller_show controller_unlock_1_2 controller_show controller_unlock_2_2 controller_show s1_commit controller_show s2_commit controller_show step controller_locks: SELECT pg_advisory_lock(sess, lock), sess, lock FROM generate_series(1, 2) a(sess), generate_series(1,3) b(lock); -pg_advisory_locksess lock - - 1 1 - 1 2 - 1 3 - 2 1 - 2 2 - 2 3 +pg_advisory_lock|sess|lock +----------------+----+---- + | 1| 1 + | 1| 2 + | 1| 3 + | 2| 1 + | 2| 2 + | 2| 3 +(6 rows) + step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step s1_begin: BEGIN; step s2_begin: BEGIN; @@ -226,81 +302,111 @@ s2: NOTICE: blurt_and_lock_123() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 3 step s2_upsert: INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s2') ON CONFLICT (blurt_and_lock_123(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s2'; step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step controller_unlock_1_1: SELECT pg_advisory_unlock(1, 1); pg_advisory_unlock +------------------ +t +(1 row) -t step controller_unlock_2_1: SELECT pg_advisory_unlock(2, 1); pg_advisory_unlock +------------------ +t +(1 row) -t step controller_unlock_1_3: SELECT pg_advisory_unlock(1, 3); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 s1: NOTICE: acquiring advisory lock on 2 step controller_unlock_2_3: SELECT pg_advisory_unlock(2, 3); pg_advisory_unlock +------------------ +t +(1 row) -t s2: NOTICE: blurt_and_lock_123() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 2 step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step controller_unlock_1_2: SELECT pg_advisory_unlock(1, 2); pg_advisory_unlock +------------------ +t +(1 row) -t step s1_upsert: <... completed> step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step controller_unlock_2_2: SELECT pg_advisory_unlock(2, 2); pg_advisory_unlock +------------------ +t +(1 row) -t s2: NOTICE: blurt_and_lock_123() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 2 s2: NOTICE: blurt_and_lock_123() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 2 step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step s1_commit: COMMIT; s2: NOTICE: blurt_and_lock_123() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 2 step s2_upsert: <... completed> step controller_show: SELECT * FROM upserttest; -key data +key|data +---+----------- +k1 |inserted s1 +(1 row) -k1 inserted s1 step s2_commit: COMMIT; step controller_show: SELECT * FROM upserttest; -key data +key|data +---+----------------------------------- +k1 |inserted s1 with conflict update s2 +(1 row) -k1 inserted s1 with conflict update s2 starting permutation: s1_create_non_unique_index s1_confirm_index_order controller_locks controller_show s2_begin s1_upsert s2_upsert controller_show controller_unlock_1_1 controller_unlock_2_1 controller_unlock_1_3 controller_unlock_2_3 controller_show controller_lock_2_4 controller_unlock_2_2 controller_show controller_unlock_1_2 controller_print_speculative_locks controller_unlock_2_4 s2_noop controller_print_speculative_locks s2_commit s1_noop controller_show controller_print_speculative_locks step s1_create_non_unique_index: CREATE INDEX upserttest_key_idx ON upserttest((blurt_and_lock_4(key))); step s1_confirm_index_order: SELECT 'upserttest_key_uniq_idx'::regclass::int8 < 'upserttest_key_idx'::regclass::int8; -?column? +?column? +-------- +t +(1 row) -t step controller_locks: SELECT pg_advisory_lock(sess, lock), sess, lock FROM generate_series(1, 2) a(sess), generate_series(1,3) b(lock); -pg_advisory_locksess lock - - 1 1 - 1 2 - 1 3 - 2 1 - 2 2 - 2 3 +pg_advisory_lock|sess|lock +----------------+----+---- + | 1| 1 + | 1| 2 + | 1| 3 + | 2| 1 + | 2| 2 + | 2| 3 +(6 rows) + step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step s2_begin: BEGIN; s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 @@ -310,48 +416,68 @@ s2: NOTICE: blurt_and_lock_123() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 3 step s2_upsert: INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s2') ON CONFLICT (blurt_and_lock_123(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s2'; step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step controller_unlock_1_1: SELECT pg_advisory_unlock(1, 1); pg_advisory_unlock +------------------ +t +(1 row) -t step controller_unlock_2_1: SELECT pg_advisory_unlock(2, 1); pg_advisory_unlock +------------------ +t +(1 row) -t step controller_unlock_1_3: SELECT pg_advisory_unlock(1, 3); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 s1: NOTICE: acquiring advisory lock on 2 step controller_unlock_2_3: SELECT pg_advisory_unlock(2, 3); pg_advisory_unlock +------------------ +t +(1 row) -t s2: NOTICE: blurt_and_lock_123() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 2 step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step controller_lock_2_4: SELECT pg_advisory_lock(2, 4); pg_advisory_lock +---------------- + +(1 row) - step controller_unlock_2_2: SELECT pg_advisory_unlock(2, 2); pg_advisory_unlock +------------------ +t +(1 row) -t s2: NOTICE: blurt_and_lock_4() called for k1 in session 2 s2: NOTICE: acquiring advisory lock on 4 step controller_show: SELECT * FROM upserttest; -key data +key|data +---+---- +(0 rows) step controller_unlock_1_2: SELECT pg_advisory_unlock(1, 2); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: blurt_and_lock_4() called for k1 in session 1 s1: NOTICE: acquiring advisory lock on 4 s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 @@ -367,16 +493,20 @@ step controller_print_speculative_locks: AND pa.application_name LIKE 'isolation/insert-conflict-specconflict-s%' ORDER BY 1, 2, 3, 4; -application_namelocktype mode granted +application_name |locktype |mode |granted +-----------------------------------------+-------------+-------------+------- +isolation/insert-conflict-specconflict-s1|spectoken |ShareLock |f +isolation/insert-conflict-specconflict-s1|transactionid|ExclusiveLock|t +isolation/insert-conflict-specconflict-s2|spectoken |ExclusiveLock|t +isolation/insert-conflict-specconflict-s2|transactionid|ExclusiveLock|t +(4 rows) -isolation/insert-conflict-specconflict-s1spectoken ShareLock f -isolation/insert-conflict-specconflict-s1transactionid ExclusiveLock t -isolation/insert-conflict-specconflict-s2spectoken ExclusiveLock t -isolation/insert-conflict-specconflict-s2transactionid ExclusiveLock t step controller_unlock_2_4: SELECT pg_advisory_unlock(2, 4); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 s1: NOTICE: acquiring advisory lock on 2 step s2_upsert: <... completed> @@ -390,20 +520,24 @@ step controller_print_speculative_locks: AND pa.application_name LIKE 'isolation/insert-conflict-specconflict-s%' ORDER BY 1, 2, 3, 4; -application_namelocktype mode granted +application_name |locktype |mode |granted +-----------------------------------------+-------------+-------------+------- +isolation/insert-conflict-specconflict-s1|transactionid|ExclusiveLock|t +isolation/insert-conflict-specconflict-s1|transactionid|ShareLock |f +isolation/insert-conflict-specconflict-s2|transactionid|ExclusiveLock|t +(3 rows) -isolation/insert-conflict-specconflict-s1transactionid ExclusiveLock t -isolation/insert-conflict-specconflict-s1transactionid ShareLock f -isolation/insert-conflict-specconflict-s2transactionid ExclusiveLock t step s2_commit: COMMIT; s1: NOTICE: blurt_and_lock_123() called for k1 in session 1 s1: NOTICE: acquiring advisory lock on 2 step s1_upsert: <... completed> step s1_noop: step controller_show: SELECT * FROM upserttest; -key data +key|data +---+----------------------------------- +k1 |inserted s2 with conflict update s1 +(1 row) -k1 inserted s2 with conflict update s1 step controller_print_speculative_locks: SELECT pa.application_name, locktype, mode, granted FROM pg_locks pl JOIN pg_stat_activity pa USING (pid) @@ -413,5 +547,7 @@ step controller_print_speculative_locks: AND pa.application_name LIKE 'isolation/insert-conflict-specconflict-s%' ORDER BY 1, 2, 3, 4; -application_namelocktype mode granted +application_name|locktype|mode|granted +----------------+--------+----+------- +(0 rows) diff --git a/src/test/isolation/expected/lock-committed-keyupdate.out b/src/test/isolation/expected/lock-committed-keyupdate.out index 2f13a19b9a899..7de6bc68600ee 100644 --- a/src/test/isolation/expected/lock-committed-keyupdate.out +++ b/src/test/isolation/expected/lock-committed-keyupdate.out @@ -5,492 +5,666 @@ step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s1c: COMMIT; step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b1 s1l s1u s2l s1c s1ul s2c step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b1 s1l s1u s1ul s2l s1c s2c step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s2l: <... completed> -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b1 s1l s2l s1u s1c s1hint s1ul s2c step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s1c: COMMIT; step s1hint: SELECT * FROM lcku_table; -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b1 s1l s1u s2l s1c s1hint s1ul s2c step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s1hint: SELECT * FROM lcku_table; -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b1 s1l s1u s1ul s2l s1c s1hint s2c step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s2l: <... completed> -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s1hint: SELECT * FROM lcku_table; -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s2l s1u s1c s1ul s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s1c: COMMIT; step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s1u s2l s1c s1ul s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s1u s1ul s2l s1c s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s2l: <... completed> ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s2l s1u s1c s1hint s1ul s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s1c: COMMIT; step s1hint: SELECT * FROM lcku_table; -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s1u s2l s1c s1hint s1ul s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s1hint: SELECT * FROM lcku_table; -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s1u s1ul s2l s1c s1hint s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s2l: <... completed> ERROR: could not serialize access due to concurrent update step s1hint: SELECT * FROM lcku_table; -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s2l s1u s1c s1ul s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s1c: COMMIT; step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s1u s2l s1c s1ul s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s1u s1ul s2l s1c s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s2l: <... completed> ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s2l s1u s1c s1hint s1ul s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s1c: COMMIT; step s1hint: SELECT * FROM lcku_table; -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s1u s2l s1c s1hint s1ul s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s1hint: SELECT * FROM lcku_table; -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> ERROR: could not serialize access due to concurrent update step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s1u s1ul s2l s1c s1hint s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(578902068); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcku_table SET id = 2 WHERE id = 3; step s1ul: SELECT pg_advisory_unlock(578902068); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s2l: <... completed> ERROR: could not serialize access due to concurrent update step s1hint: SELECT * FROM lcku_table; -id value +id|value +--+----- + 1|one + 2|two +(2 rows) -1 one -2 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - diff --git a/src/test/isolation/expected/lock-committed-update.out b/src/test/isolation/expected/lock-committed-update.out index 88a6f23eaba91..84b9ce750960d 100644 --- a/src/test/isolation/expected/lock-committed-update.out +++ b/src/test/isolation/expected/lock-committed-update.out @@ -5,663 +5,927 @@ step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1c: COMMIT; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b1 s1l s1u s2l s1c s1ul s2c step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b1 s1l s2l s1ul s1u s1c s2c step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1c: COMMIT; step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b1 s1l s1u s1ul s2l s1c s2c step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; -id value +id|value +--+----- + 1|one +(1 row) -1 one step s1c: COMMIT; step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b1 s1l s2l s1u s1c s1hint s1ul s2c step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1c: COMMIT; step s1hint: SELECT * FROM lcu_table; -id value +id|value +--+----- + 1|two +(1 row) -1 two step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b1 s1l s1u s2l s1c s1hint s1ul s2c step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s1hint: SELECT * FROM lcu_table; -id value +id|value +--+----- + 1|two +(1 row) -1 two step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b1 s1l s2l s1ul s1u s1c s1hint s2c step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1c: COMMIT; step s1hint: SELECT * FROM lcu_table; -id value +id|value +--+----- + 1|two +(1 row) -1 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b1 s1l s1u s1ul s2l s1c s1hint s2c step s1b: BEGIN; step s2b1: BEGIN ISOLATION LEVEL READ COMMITTED; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; -id value +id|value +--+----- + 1|one +(1 row) -1 one step s1c: COMMIT; step s1hint: SELECT * FROM lcu_table; -id value +id|value +--+----- + 1|two +(1 row) -1 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s2l s1u s1c s1ul s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1c: COMMIT; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s1u s2l s1c s1ul s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s2l s1ul s1u s1c s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1c: COMMIT; step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s1u s1ul s2l s1c s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; -id value +id|value +--+----- + 1|one +(1 row) -1 one step s1c: COMMIT; step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s2l s1u s1c s1hint s1ul s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1c: COMMIT; step s1hint: SELECT * FROM lcu_table; -id value +id|value +--+----- + 1|two +(1 row) -1 two step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s1u s2l s1c s1hint s1ul s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s1hint: SELECT * FROM lcu_table; -id value +id|value +--+----- + 1|two +(1 row) -1 two step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s2l s1ul s1u s1c s1hint s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1c: COMMIT; step s1hint: SELECT * FROM lcu_table; -id value +id|value +--+----- + 1|two +(1 row) -1 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b2 s1l s1u s1ul s2l s1c s1hint s2c step s1b: BEGIN; step s2b2: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; -id value +id|value +--+----- + 1|one +(1 row) -1 one step s1c: COMMIT; step s1hint: SELECT * FROM lcu_table; -id value +id|value +--+----- + 1|two +(1 row) -1 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s2l s1u s1c s1ul s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1c: COMMIT; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s1u s2l s1c s1ul s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s2l s1ul s1u s1c s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1c: COMMIT; step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s1u s1ul s2l s1c s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; -id value +id|value +--+----- + 1|one +(1 row) -1 one step s1c: COMMIT; step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s2l s1u s1c s1hint s1ul s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1c: COMMIT; step s1hint: SELECT * FROM lcu_table; -id value +id|value +--+----- + 1|two +(1 row) -1 two step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s1u s2l s1c s1hint s1ul s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1c: COMMIT; step s1hint: SELECT * FROM lcu_table; -id value +id|value +--+----- + 1|two +(1 row) -1 two step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s2l s1ul s1u s1c s1hint s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: <... completed> -id value +id|value +--+----- + 1|one +(1 row) -1 one step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1c: COMMIT; step s1hint: SELECT * FROM lcu_table; -id value +id|value +--+----- + 1|two +(1 row) -1 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - starting permutation: s1b s2b3 s1l s1u s1ul s2l s1c s1hint s2c step s1b: BEGIN; step s2b3: BEGIN ISOLATION LEVEL SERIALIZABLE; step s1l: SELECT pg_advisory_lock(380170116); pg_advisory_lock +---------------- + +(1 row) - step s1u: UPDATE lcu_table SET value = 'two' WHERE id = 1; step s1ul: SELECT pg_advisory_unlock(380170116); pg_advisory_unlock +------------------ +t +(1 row) -t step s2l: SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; -id value +id|value +--+----- + 1|one +(1 row) -1 one step s1c: COMMIT; step s1hint: SELECT * FROM lcu_table; -id value +id|value +--+----- + 1|two +(1 row) -1 two step s2c: COMMIT; pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - diff --git a/src/test/isolation/expected/lock-update-delete.out b/src/test/isolation/expected/lock-update-delete.out index 3aa12539e28b0..f75e25f74b611 100644 --- a/src/test/isolation/expected/lock-update-delete.out +++ b/src/test/isolation/expected/lock-update-delete.out @@ -2,114 +2,152 @@ Parsed test spec with 2 sessions starting permutation: s2b s1l s2u s2_blocker1 s2_unlock s2c pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s2_blocker1: DELETE FROM foo; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s2c: COMMIT; step s1l: <... completed> -key value +key|value +---+----- +(0 rows) starting permutation: s2b s1l s2u s2_blocker2 s2_unlock s2c pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s2_blocker2: UPDATE foo SET key = 2 WHERE key = 1; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s2c: COMMIT; step s1l: <... completed> -key value +key|value +---+----- +(0 rows) starting permutation: s2b s1l s2u s2_blocker3 s2_unlock s2c pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s2_blocker3: UPDATE foo SET value = 2 WHERE key = 1; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; starting permutation: s2b s1l s2u s2_blocker1 s2_unlock s2r pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s2_blocker1: DELETE FROM foo; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s2r: ROLLBACK; step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 starting permutation: s2b s1l s2u s2_blocker2 s2_unlock s2r pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s2_blocker2: UPDATE foo SET key = 2 WHERE key = 1; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s2r: ROLLBACK; step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 starting permutation: s2b s1l s2u s2_blocker3 s2_unlock s2r pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s2_blocker3: UPDATE foo SET value = 2 WHERE key = 1; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2r: ROLLBACK; starting permutation: s2b s1l s2u s2_blocker1 s2c s2_unlock pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; @@ -117,16 +155,22 @@ step s2_blocker1: DELETE FROM foo; step s2c: COMMIT; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- +(0 rows) starting permutation: s2b s1l s2u s2_blocker2 s2c s2_unlock pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; @@ -134,16 +178,22 @@ step s2_blocker2: UPDATE foo SET key = 2 WHERE key = 1; step s2c: COMMIT; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- +(0 rows) starting permutation: s2b s1l s2u s2_blocker3 s2c s2_unlock pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; @@ -151,17 +201,23 @@ step s2_blocker3: UPDATE foo SET value = 2 WHERE key = 1; step s2c: COMMIT; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 starting permutation: s2b s1l s2u s2_blocker1 s2r s2_unlock pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; @@ -169,17 +225,23 @@ step s2_blocker1: DELETE FROM foo; step s2r: ROLLBACK; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 starting permutation: s2b s1l s2u s2_blocker2 s2r s2_unlock pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; @@ -187,17 +249,23 @@ step s2_blocker2: UPDATE foo SET key = 2 WHERE key = 1; step s2r: ROLLBACK; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 starting permutation: s2b s1l s2u s2_blocker3 s2r s2_unlock pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; @@ -205,9 +273,13 @@ step s2_blocker3: UPDATE foo SET value = 2 WHERE key = 1; step s2r: ROLLBACK; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 diff --git a/src/test/isolation/expected/lock-update-delete_1.out b/src/test/isolation/expected/lock-update-delete_1.out index 77adde718d646..c602ac8ac4752 100644 --- a/src/test/isolation/expected/lock-update-delete_1.out +++ b/src/test/isolation/expected/lock-update-delete_1.out @@ -2,112 +2,146 @@ Parsed test spec with 2 sessions starting permutation: s2b s1l s2u s2_blocker1 s2_unlock s2c pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s2_blocker1: DELETE FROM foo; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s2c: COMMIT; step s1l: <... completed> ERROR: could not serialize access due to concurrent update starting permutation: s2b s1l s2u s2_blocker2 s2_unlock s2c pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s2_blocker2: UPDATE foo SET key = 2 WHERE key = 1; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s2c: COMMIT; step s1l: <... completed> ERROR: could not serialize access due to concurrent update starting permutation: s2b s1l s2u s2_blocker3 s2_unlock s2c pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s2_blocker3: UPDATE foo SET value = 2 WHERE key = 1; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; starting permutation: s2b s1l s2u s2_blocker1 s2_unlock s2r pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s2_blocker1: DELETE FROM foo; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s2r: ROLLBACK; step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 starting permutation: s2b s1l s2u s2_blocker2 s2_unlock s2r pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s2_blocker2: UPDATE foo SET key = 2 WHERE key = 1; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s2r: ROLLBACK; step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 starting permutation: s2b s1l s2u s2_blocker3 s2_unlock s2r pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s2_blocker3: UPDATE foo SET value = 2 WHERE key = 1; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2r: ROLLBACK; starting permutation: s2b s1l s2u s2_blocker1 s2c s2_unlock pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; @@ -115,15 +149,19 @@ step s2_blocker1: DELETE FROM foo; step s2c: COMMIT; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> ERROR: could not serialize access due to concurrent update starting permutation: s2b s1l s2u s2_blocker2 s2c s2_unlock pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; @@ -131,15 +169,19 @@ step s2_blocker2: UPDATE foo SET key = 2 WHERE key = 1; step s2c: COMMIT; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> ERROR: could not serialize access due to concurrent update starting permutation: s2b s1l s2u s2_blocker3 s2c s2_unlock pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; @@ -147,17 +189,23 @@ step s2_blocker3: UPDATE foo SET value = 2 WHERE key = 1; step s2c: COMMIT; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 starting permutation: s2b s1l s2u s2_blocker1 s2r s2_unlock pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; @@ -165,17 +213,23 @@ step s2_blocker1: DELETE FROM foo; step s2r: ROLLBACK; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 starting permutation: s2b s1l s2u s2_blocker2 s2r s2_unlock pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; @@ -183,17 +237,23 @@ step s2_blocker2: UPDATE foo SET key = 2 WHERE key = 1; step s2r: ROLLBACK; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 starting permutation: s2b s1l s2u s2_blocker3 s2r s2_unlock pg_advisory_lock +---------------- + +(1 row) - step s2b: BEGIN; step s1l: SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; step s2u: UPDATE foo SET value = 2 WHERE key = 1; @@ -201,9 +261,13 @@ step s2_blocker3: UPDATE foo SET value = 2 WHERE key = 1; step s2r: ROLLBACK; step s2_unlock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1l: <... completed> -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 diff --git a/src/test/isolation/expected/lock-update-traversal.out b/src/test/isolation/expected/lock-update-traversal.out index e4e640575796e..6d6a97d46e73a 100644 --- a/src/test/isolation/expected/lock-update-traversal.out +++ b/src/test/isolation/expected/lock-update-traversal.out @@ -4,14 +4,18 @@ starting permutation: s1b s2b s1s s2u s1l s2c s2d1 s1c step s1b: BEGIN ISOLATION LEVEL REPEATABLE READ; step s2b: BEGIN; step s1s: SELECT * FROM foo; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; step s2d1: DELETE FROM foo WHERE key = 1; step s1c: COMMIT; @@ -21,14 +25,18 @@ starting permutation: s1b s2b s1s s2u s1l s2c s2d2 s1c step s1b: BEGIN ISOLATION LEVEL REPEATABLE READ; step s2b: BEGIN; step s1s: SELECT * FROM foo; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; step s2d2: UPDATE foo SET key = 3 WHERE key = 1; step s1c: COMMIT; @@ -38,14 +46,18 @@ starting permutation: s1b s2b s1s s2u s1l s2c s2d3 s1c step s1b: BEGIN ISOLATION LEVEL REPEATABLE READ; step s2b: BEGIN; step s1s: SELECT * FROM foo; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2u: UPDATE foo SET value = 2 WHERE key = 1; step s1l: SELECT * FROM foo FOR KEY SHARE; -key value +key|value +---+----- + 1| 1 +(1 row) -1 1 step s2c: COMMIT; step s2d3: UPDATE foo SET value = 3 WHERE key = 1; step s1c: COMMIT; diff --git a/src/test/isolation/expected/multiple-cic.out b/src/test/isolation/expected/multiple-cic.out index e41e04a48044f..7a0f326cdb6ae 100644 --- a/src/test/isolation/expected/multiple-cic.out +++ b/src/test/isolation/expected/multiple-cic.out @@ -3,8 +3,10 @@ Parsed test spec with 2 sessions starting permutation: s2l s1i s2i step s2l: SELECT pg_advisory_lock(281457); pg_advisory_lock +---------------- + +(1 row) - step s1i: CREATE INDEX CONCURRENTLY mcic_one_pkey ON mcic_one (id) WHERE lck_shr(281457); @@ -15,6 +17,8 @@ step s2i: step s1i: <... completed> step s2i: <... completed> -unlck +unlck +----- +t +(1 row) -t diff --git a/src/test/isolation/expected/multiple-row-versions.out b/src/test/isolation/expected/multiple-row-versions.out index d6a0c427fce0b..79f492ea42f38 100644 --- a/src/test/isolation/expected/multiple-row-versions.out +++ b/src/test/isolation/expected/multiple-row-versions.out @@ -2,21 +2,27 @@ Parsed test spec with 4 sessions starting permutation: rx1 wx2 c2 wx3 ry3 wy4 rz4 c4 c3 wz1 c1 step rx1: SELECT * FROM t WHERE id = 1000000; -id txt + id|txt +-------+--- +1000000| +(1 row) -1000000 step wx2: UPDATE t SET txt = 'b' WHERE id = 1000000; step c2: COMMIT; step wx3: UPDATE t SET txt = 'c' WHERE id = 1000000; step ry3: SELECT * FROM t WHERE id = 500000; -id txt + id|txt +------+--- +500000| +(1 row) -500000 step wy4: UPDATE t SET txt = 'd' WHERE id = 500000; step rz4: SELECT * FROM t WHERE id = 1; -id txt +id|txt +--+--- + 1| +(1 row) -1 step c4: COMMIT; step c3: COMMIT; step wz1: UPDATE t SET txt = 'a' WHERE id = 1; diff --git a/src/test/isolation/expected/multixact-no-deadlock.out b/src/test/isolation/expected/multixact-no-deadlock.out index 5ba2e7818e275..4b9ce7bfc364c 100644 --- a/src/test/isolation/expected/multixact-no-deadlock.out +++ b/src/test/isolation/expected/multixact-no-deadlock.out @@ -2,23 +2,31 @@ Parsed test spec with 3 sessions starting permutation: s1lock s2lock s1svpt s3lock s1lock2 s2c s1c s3c step s1lock: SELECT * FROM justthis FOR SHARE; -value +value +----- + 1 +(1 row) -1 step s2lock: SELECT * FROM justthis FOR SHARE; -value +value +----- + 1 +(1 row) -1 step s1svpt: SAVEPOINT foo; step s3lock: SELECT * FROM justthis FOR UPDATE; step s1lock2: SELECT * FROM justthis FOR SHARE; -value +value +----- + 1 +(1 row) -1 step s2c: COMMIT; step s1c: COMMIT; step s3lock: <... completed> -value +value +----- + 1 +(1 row) -1 step s3c: COMMIT; diff --git a/src/test/isolation/expected/multixact-no-forget.out b/src/test/isolation/expected/multixact-no-forget.out index 38466bf837476..ce06b38407984 100644 --- a/src/test/isolation/expected/multixact-no-forget.out +++ b/src/test/isolation/expected/multixact-no-forget.out @@ -2,129 +2,167 @@ Parsed test spec with 3 sessions starting permutation: s1_show s1_commit s2_commit step s1_show: SELECT current_setting('default_transaction_isolation') <> 'read committed'; -?column? +?column? +-------- +f +(1 row) -f step s1_commit: COMMIT; step s2_commit: COMMIT; starting permutation: s1_lock s2_update s2_abort s3_forkeyshr s1_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s2_abort: ROLLBACK; step s3_forkeyshr: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_lock s2_update s2_commit s3_forkeyshr s1_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s2_commit: COMMIT; step s3_forkeyshr: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 2 +(1 row) -2 step s1_commit: COMMIT; starting permutation: s1_lock s2_update s1_commit s3_forkeyshr s2_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s1_commit: COMMIT; step s3_forkeyshr: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_commit: COMMIT; starting permutation: s1_lock s2_update s2_abort s3_fornokeyupd s1_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s2_abort: ROLLBACK; step s3_fornokeyupd: SELECT * FROM dont_forget FOR NO KEY UPDATE; -value +value +----- + 1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_lock s2_update s2_commit s3_fornokeyupd s1_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s2_commit: COMMIT; step s3_fornokeyupd: SELECT * FROM dont_forget FOR NO KEY UPDATE; -value +value +----- + 2 +(1 row) -2 step s1_commit: COMMIT; starting permutation: s1_lock s2_update s1_commit s3_fornokeyupd s2_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s1_commit: COMMIT; step s3_fornokeyupd: SELECT * FROM dont_forget FOR NO KEY UPDATE; step s2_commit: COMMIT; step s3_fornokeyupd: <... completed> -value +value +----- + 2 +(1 row) -2 starting permutation: s1_lock s2_update s2_abort s3_forupd s1_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s2_abort: ROLLBACK; step s3_forupd: SELECT * FROM dont_forget FOR UPDATE; step s1_commit: COMMIT; step s3_forupd: <... completed> -value +value +----- + 1 +(1 row) -1 starting permutation: s1_lock s2_update s2_commit s3_forupd s1_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s2_commit: COMMIT; step s3_forupd: SELECT * FROM dont_forget FOR UPDATE; step s1_commit: COMMIT; step s3_forupd: <... completed> -value +value +----- + 2 +(1 row) -2 starting permutation: s1_lock s2_update s1_commit s3_forupd s2_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s1_commit: COMMIT; step s3_forupd: SELECT * FROM dont_forget FOR UPDATE; step s2_commit: COMMIT; step s3_forupd: <... completed> -value +value +----- + 2 +(1 row) -2 diff --git a/src/test/isolation/expected/multixact-no-forget_1.out b/src/test/isolation/expected/multixact-no-forget_1.out index 205a40099ce4a..f15a1e1809dd6 100644 --- a/src/test/isolation/expected/multixact-no-forget_1.out +++ b/src/test/isolation/expected/multixact-no-forget_1.out @@ -2,82 +2,106 @@ Parsed test spec with 3 sessions starting permutation: s1_show s1_commit s2_commit step s1_show: SELECT current_setting('default_transaction_isolation') <> 'read committed'; -?column? +?column? +-------- +t +(1 row) -t step s1_commit: COMMIT; step s2_commit: COMMIT; starting permutation: s1_lock s2_update s2_abort s3_forkeyshr s1_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s2_abort: ROLLBACK; step s3_forkeyshr: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_lock s2_update s2_commit s3_forkeyshr s1_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s2_commit: COMMIT; step s3_forkeyshr: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 2 +(1 row) -2 step s1_commit: COMMIT; starting permutation: s1_lock s2_update s1_commit s3_forkeyshr s2_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s1_commit: COMMIT; step s3_forkeyshr: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_commit: COMMIT; starting permutation: s1_lock s2_update s2_abort s3_fornokeyupd s1_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s2_abort: ROLLBACK; step s3_fornokeyupd: SELECT * FROM dont_forget FOR NO KEY UPDATE; -value +value +----- + 1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_lock s2_update s2_commit s3_fornokeyupd s1_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s2_commit: COMMIT; step s3_fornokeyupd: SELECT * FROM dont_forget FOR NO KEY UPDATE; -value +value +----- + 2 +(1 row) -2 step s1_commit: COMMIT; starting permutation: s1_lock s2_update s1_commit s3_fornokeyupd s2_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s1_commit: COMMIT; step s3_fornokeyupd: SELECT * FROM dont_forget FOR NO KEY UPDATE; @@ -87,37 +111,47 @@ ERROR: could not serialize access due to concurrent update starting permutation: s1_lock s2_update s2_abort s3_forupd s1_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s2_abort: ROLLBACK; step s3_forupd: SELECT * FROM dont_forget FOR UPDATE; step s1_commit: COMMIT; step s3_forupd: <... completed> -value +value +----- + 1 +(1 row) -1 starting permutation: s1_lock s2_update s2_commit s3_forupd s1_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s2_commit: COMMIT; step s3_forupd: SELECT * FROM dont_forget FOR UPDATE; step s1_commit: COMMIT; step s3_forupd: <... completed> -value +value +----- + 2 +(1 row) -2 starting permutation: s1_lock s2_update s1_commit s3_forupd s2_commit step s1_lock: SELECT * FROM dont_forget FOR KEY SHARE; -value +value +----- + 1 +(1 row) -1 step s2_update: UPDATE dont_forget SET value = 2; step s1_commit: COMMIT; step s3_forupd: SELECT * FROM dont_forget FOR UPDATE; diff --git a/src/test/isolation/expected/nowait-2.out b/src/test/isolation/expected/nowait-2.out index 6e24bbbf2682b..ba18fa77d45b1 100644 --- a/src/test/isolation/expected/nowait-2.out +++ b/src/test/isolation/expected/nowait-2.out @@ -2,13 +2,17 @@ Parsed test spec with 2 sessions starting permutation: s1a s2a s2b s1b s2c step s1a: SELECT * FROM foo FOR SHARE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s2a: SELECT * FROM foo FOR SHARE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s2b: SELECT * FROM foo FOR UPDATE NOWAIT; ERROR: could not obtain lock on row in relation "foo" step s1b: COMMIT; @@ -16,13 +20,17 @@ step s2c: COMMIT; starting permutation: s2a s1a s2b s1b s2c step s2a: SELECT * FROM foo FOR SHARE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s1a: SELECT * FROM foo FOR SHARE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s2b: SELECT * FROM foo FOR UPDATE NOWAIT; ERROR: could not obtain lock on row in relation "foo" step s1b: COMMIT; @@ -30,13 +38,17 @@ step s2c: COMMIT; starting permutation: s2a s2b s1a s1b s2c step s2a: SELECT * FROM foo FOR SHARE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s2b: SELECT * FROM foo FOR UPDATE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s1a: SELECT * FROM foo FOR SHARE NOWAIT; ERROR: could not obtain lock on row in relation "foo" step s1b: COMMIT; diff --git a/src/test/isolation/expected/nowait-3.out b/src/test/isolation/expected/nowait-3.out index 844464654a6fe..19a5b680bc82f 100644 --- a/src/test/isolation/expected/nowait-3.out +++ b/src/test/isolation/expected/nowait-3.out @@ -2,16 +2,20 @@ Parsed test spec with 3 sessions starting permutation: s1a s2a s3a s1b s2b s3b step s1a: SELECT * FROM foo FOR UPDATE; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s2a: SELECT * FROM foo FOR UPDATE; step s3a: SELECT * FROM foo FOR UPDATE NOWAIT; ERROR: could not obtain lock on row in relation "foo" step s1b: COMMIT; step s2a: <... completed> -id data +id|data +--+---- + 1|x +(1 row) -1 x step s2b: COMMIT; step s3b: COMMIT; diff --git a/src/test/isolation/expected/nowait-4.out b/src/test/isolation/expected/nowait-4.out index c1db66581b744..be0edbdd21daa 100644 --- a/src/test/isolation/expected/nowait-4.out +++ b/src/test/isolation/expected/nowait-4.out @@ -3,16 +3,20 @@ Parsed test spec with 2 sessions starting permutation: s2a s1a s2b s2c s2d s2e s1b s2f step s2a: SELECT pg_advisory_lock(0); pg_advisory_lock +---------------- + +(1 row) - step s1a: SELECT * FROM foo WHERE pg_advisory_lock(0) IS NOT NULL FOR UPDATE NOWAIT; step s2b: UPDATE foo SET data = data; step s2c: BEGIN; step s2d: UPDATE foo SET data = data; step s2e: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1a: <... completed> ERROR: could not obtain lock on row in relation "foo" step s1b: COMMIT; diff --git a/src/test/isolation/expected/nowait-4_1.out b/src/test/isolation/expected/nowait-4_1.out index 5fa6b3453acaf..05e2fcf2f654a 100644 --- a/src/test/isolation/expected/nowait-4_1.out +++ b/src/test/isolation/expected/nowait-4_1.out @@ -3,16 +3,20 @@ Parsed test spec with 2 sessions starting permutation: s2a s1a s2b s2c s2d s2e s1b s2f step s2a: SELECT pg_advisory_lock(0); pg_advisory_lock +---------------- + +(1 row) - step s1a: SELECT * FROM foo WHERE pg_advisory_lock(0) IS NOT NULL FOR UPDATE NOWAIT; step s2b: UPDATE foo SET data = data; step s2c: BEGIN; step s2d: UPDATE foo SET data = data; step s2e: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1a: <... completed> ERROR: could not serialize access due to concurrent update step s1b: COMMIT; diff --git a/src/test/isolation/expected/nowait-5.out b/src/test/isolation/expected/nowait-5.out index 2682ea1ab32cc..f1aae21c1fd82 100644 --- a/src/test/isolation/expected/nowait-5.out +++ b/src/test/isolation/expected/nowait-5.out @@ -8,8 +8,10 @@ step upd_getlock: SELECT pg_advisory_lock(0); pg_advisory_lock +---------------- + +(1 row) - step sl1_exec: BEGIN ISOLATION LEVEL READ COMMITTED; EXECUTE sl1_run; @@ -24,14 +26,18 @@ step lk1_doforshare: BEGIN ISOLATION LEVEL READ COMMITTED; SELECT id FROM test_nowait WHERE id % 2 = 0 FOR SHARE; -id +id +-- + 2 +(1 row) -2 step upd_releaselock: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step sl1_exec: <... completed> ERROR: could not obtain lock on row in relation "test_nowait" diff --git a/src/test/isolation/expected/nowait.out b/src/test/isolation/expected/nowait.out index a6343b4afa170..ea1cdf012a6b2 100644 --- a/src/test/isolation/expected/nowait.out +++ b/src/test/isolation/expected/nowait.out @@ -2,21 +2,27 @@ Parsed test spec with 2 sessions starting permutation: s1a s1b s2a s2b step s1a: SELECT * FROM foo FOR UPDATE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s1b: COMMIT; step s2a: SELECT * FROM foo FOR UPDATE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s2b: COMMIT; starting permutation: s1a s2a s1b s2b step s1a: SELECT * FROM foo FOR UPDATE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s2a: SELECT * FROM foo FOR UPDATE NOWAIT; ERROR: could not obtain lock on row in relation "foo" step s1b: COMMIT; @@ -24,9 +30,11 @@ step s2b: COMMIT; starting permutation: s1a s2a s2b s1b step s1a: SELECT * FROM foo FOR UPDATE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s2a: SELECT * FROM foo FOR UPDATE NOWAIT; ERROR: could not obtain lock on row in relation "foo" step s2b: COMMIT; @@ -34,9 +42,11 @@ step s1b: COMMIT; starting permutation: s2a s1a s1b s2b step s2a: SELECT * FROM foo FOR UPDATE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s1a: SELECT * FROM foo FOR UPDATE NOWAIT; ERROR: could not obtain lock on row in relation "foo" step s1b: COMMIT; @@ -44,9 +54,11 @@ step s2b: COMMIT; starting permutation: s2a s1a s2b s1b step s2a: SELECT * FROM foo FOR UPDATE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s1a: SELECT * FROM foo FOR UPDATE NOWAIT; ERROR: could not obtain lock on row in relation "foo" step s2b: COMMIT; @@ -54,12 +66,16 @@ step s1b: COMMIT; starting permutation: s2a s2b s1a s1b step s2a: SELECT * FROM foo FOR UPDATE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s2b: COMMIT; step s1a: SELECT * FROM foo FOR UPDATE NOWAIT; -id data +id|data +--+---- + 1|x +(1 row) -1 x step s1b: COMMIT; diff --git a/src/test/isolation/expected/partial-index.out b/src/test/isolation/expected/partial-index.out index d1f00c9b3ce09..d6cae902a9cb8 100644 --- a/src/test/isolation/expected/partial-index.out +++ b/src/test/isolation/expected/partial-index.out @@ -2,51 +2,57 @@ Parsed test spec with 2 sessions starting permutation: rxy1 wx1 c1 wy2 rxy2 c2 step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step c1: COMMIT; step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +(9 rows) + step c2: COMMIT; starting permutation: rxy1 wx1 wy2 c1 rxy2 c2 step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step c1: COMMIT; @@ -56,87 +62,97 @@ step c2: COMMIT; starting permutation: rxy1 wx1 wy2 rxy2 c1 c2 step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step c1: COMMIT; step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions starting permutation: rxy1 wx1 wy2 rxy2 c2 c1 step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step c2: COMMIT; step c1: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions starting permutation: rxy1 wy2 wx1 c1 rxy2 c2 step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step c1: COMMIT; @@ -146,101 +162,113 @@ step c2: COMMIT; starting permutation: rxy1 wy2 wx1 rxy2 c1 c2 step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step c1: COMMIT; step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions starting permutation: rxy1 wy2 wx1 rxy2 c2 c1 step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step c2: COMMIT; step c1: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions starting permutation: rxy1 wy2 rxy2 wx1 c1 c2 step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step c1: COMMIT; step c2: COMMIT; @@ -248,33 +276,37 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 wy2 rxy2 wx1 c2 c1 step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step c2: COMMIT; step c1: COMMIT; @@ -282,33 +314,37 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 wy2 rxy2 c2 wx1 c1 step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step c2: COMMIT; step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; ERROR: could not serialize access due to read/write dependencies among transactions @@ -317,19 +353,21 @@ step c1: COMMIT; starting permutation: wy2 rxy1 wx1 c1 rxy2 c2 step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step c1: COMMIT; step rxy2: select * from test_t where val2 = 1; @@ -339,33 +377,37 @@ step c2: COMMIT; starting permutation: wy2 rxy1 wx1 rxy2 c1 c2 step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step c1: COMMIT; step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -373,33 +415,37 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: wy2 rxy1 wx1 rxy2 c2 c1 step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step c2: COMMIT; step c1: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -407,32 +453,36 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: wy2 rxy1 rxy2 wx1 c1 c2 step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step c1: COMMIT; step c2: COMMIT; @@ -441,32 +491,36 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: wy2 rxy1 rxy2 wx1 c2 c1 step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step c2: COMMIT; step c1: COMMIT; @@ -475,32 +529,36 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: wy2 rxy1 rxy2 c2 wx1 c1 step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step c2: COMMIT; step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; ERROR: could not serialize access due to read/write dependencies among transactions @@ -509,32 +567,36 @@ step c1: COMMIT; starting permutation: wy2 rxy2 rxy1 wx1 c1 c2 step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step c1: COMMIT; step c2: COMMIT; @@ -543,32 +605,36 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: wy2 rxy2 rxy1 wx1 c2 c1 step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step c2: COMMIT; step c1: COMMIT; @@ -577,32 +643,36 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: wy2 rxy2 rxy1 c2 wx1 c1 step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -9 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 + 9|a | 1 +10|a | 1 +(11 rows) + step c2: COMMIT; step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; ERROR: could not serialize access due to read/write dependencies among transactions @@ -611,31 +681,35 @@ step c1: COMMIT; starting permutation: wy2 rxy2 c2 rxy1 wx1 c1 step wy2: update test_t set val2 = 2 where val2 = 1 and id = 9; step rxy2: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step c2: COMMIT; step rxy1: select * from test_t where val2 = 1; -id val1 val2 - -0 a 1 -1 a 1 -2 a 1 -3 a 1 -4 a 1 -5 a 1 -6 a 1 -7 a 1 -8 a 1 -10 a 1 +id|val1|val2 +--+----+---- + 0|a | 1 + 1|a | 1 + 2|a | 1 + 3|a | 1 + 4|a | 1 + 5|a | 1 + 6|a | 1 + 7|a | 1 + 8|a | 1 +10|a | 1 +(10 rows) + step wx1: update test_t set val2 = 2 where val2 = 1 and id = 10; step c1: COMMIT; diff --git a/src/test/isolation/expected/partition-concurrent-attach.out b/src/test/isolation/expected/partition-concurrent-attach.out index 4986ee25e8b7c..53775f431f9f3 100644 --- a/src/test/isolation/expected/partition-concurrent-attach.out +++ b/src/test/isolation/expected/partition-concurrent-attach.out @@ -10,11 +10,13 @@ step s2i: <... completed> ERROR: new row for relation "tpart_default" violates partition constraint step s2c: commit; step s2s: select tableoid::regclass, * from tpart; -tableoid i j +tableoid| i|j +--------+---+--- +tpart_2 |110|xxx +tpart_2 |120|yyy +tpart_2 |150|zzz +(3 rows) -tpart_2 110 xxx -tpart_2 120 yyy -tpart_2 150 zzz starting permutation: s1b s1a s2b s2i2 s1c s2c s2s step s1b: begin; @@ -26,11 +28,13 @@ step s2i2: <... completed> ERROR: new row for relation "tpart_default" violates partition constraint step s2c: commit; step s2s: select tableoid::regclass, * from tpart; -tableoid i j +tableoid| i|j +--------+---+--- +tpart_2 |110|xxx +tpart_2 |120|yyy +tpart_2 |150|zzz +(3 rows) -tpart_2 110 xxx -tpart_2 120 yyy -tpart_2 150 zzz starting permutation: s1b s2b s2i s1a s2c s1c s2s step s1b: begin; @@ -42,8 +46,10 @@ step s1a: <... completed> ERROR: updated partition constraint for default partition "tpart_default_default" would be violated by some row step s1c: commit; step s2s: select tableoid::regclass, * from tpart; -tableoid i j +tableoid | i|j +---------------------+---+--- +tpart_default_default|110|xxx +tpart_default_default|120|yyy +tpart_default_default|150|zzz +(3 rows) -tpart_default_default110 xxx -tpart_default_default120 yyy -tpart_default_default150 zzz diff --git a/src/test/isolation/expected/partition-key-update-2.out b/src/test/isolation/expected/partition-key-update-2.out index 363de0d69c242..f054de5ed9302 100644 --- a/src/test/isolation/expected/partition-key-update-2.out +++ b/src/test/isolation/expected/partition-key-update-2.out @@ -9,10 +9,12 @@ step s2donothing: <... completed> step s3donothing: <... completed> step s2c: COMMIT; step s3select: SELECT * FROM foo ORDER BY a; -a b +a|b +-+----------------------------------- +1|session-2 donothing +2|initial tuple -> moved by session-1 +(2 rows) -1 session-2 donothing -2 initial tuple -> moved by session-1 step s3c: COMMIT; starting permutation: s2donothing s1u s3donothing s1c s2c s3select s3c @@ -23,7 +25,9 @@ step s1c: COMMIT; step s3donothing: <... completed> step s2c: COMMIT; step s3select: SELECT * FROM foo ORDER BY a; -a b +a|b +-+----------------------------------- +2|initial tuple -> moved by session-1 +(1 row) -2 initial tuple -> moved by session-1 step s3c: COMMIT; diff --git a/src/test/isolation/expected/partition-key-update-3.out b/src/test/isolation/expected/partition-key-update-3.out index a06af2d7196bd..b5872b8b456a1 100644 --- a/src/test/isolation/expected/partition-key-update-3.out +++ b/src/test/isolation/expected/partition-key-update-3.out @@ -11,10 +11,12 @@ step s2c: COMMIT; step s3donothing: INSERT INTO foo VALUES(2, 'session-3 donothing'), (2, 'session-3 donothing2') ON CONFLICT DO NOTHING; step s3c: COMMIT; step s2select: SELECT * FROM foo ORDER BY a; -a b +a|b +-+----------------------------------- +1|session-2 donothing +2|initial tuple -> moved by session-1 +(2 rows) -1 session-2 donothing -2 initial tuple -> moved by session-1 starting permutation: s2beginrr s3beginrr s1u s3donothing s1c s3c s2donothing s2c s2select step s2beginrr: BEGIN ISOLATION LEVEL REPEATABLE READ; @@ -28,10 +30,12 @@ step s3c: COMMIT; step s2donothing: INSERT INTO foo VALUES(1, 'session-2 donothing') ON CONFLICT DO NOTHING; step s2c: COMMIT; step s2select: SELECT * FROM foo ORDER BY a; -a b +a|b +-+----------------------------------- +1|session-2 donothing +2|initial tuple -> moved by session-1 +(2 rows) -1 session-2 donothing -2 initial tuple -> moved by session-1 starting permutation: s2beginrr s3beginrr s1u s2donothing s3donothing s1c s2c s3c s2select step s2beginrr: BEGIN ISOLATION LEVEL REPEATABLE READ; @@ -46,10 +50,12 @@ ERROR: could not serialize access due to concurrent update step s2c: COMMIT; step s3c: COMMIT; step s2select: SELECT * FROM foo ORDER BY a; -a b +a|b +-+----------------------------------- +1|session-2 donothing +2|initial tuple -> moved by session-1 +(2 rows) -1 session-2 donothing -2 initial tuple -> moved by session-1 starting permutation: s2beginrr s3beginrr s1u s3donothing s2donothing s1c s3c s2c s2select step s2beginrr: BEGIN ISOLATION LEVEL REPEATABLE READ; @@ -64,10 +70,12 @@ step s2donothing: <... completed> step s3c: COMMIT; step s2c: COMMIT; step s2select: SELECT * FROM foo ORDER BY a; -a b +a|b +-+----------------------------------- +1|session-2 donothing +2|initial tuple -> moved by session-1 +(2 rows) -1 session-2 donothing -2 initial tuple -> moved by session-1 starting permutation: s2begins s3begins s1u s2donothing s1c s2c s3donothing s3c s2select step s2begins: BEGIN ISOLATION LEVEL SERIALIZABLE; @@ -80,10 +88,12 @@ step s2c: COMMIT; step s3donothing: INSERT INTO foo VALUES(2, 'session-3 donothing'), (2, 'session-3 donothing2') ON CONFLICT DO NOTHING; step s3c: COMMIT; step s2select: SELECT * FROM foo ORDER BY a; -a b +a|b +-+----------------------------------- +1|session-2 donothing +2|initial tuple -> moved by session-1 +(2 rows) -1 session-2 donothing -2 initial tuple -> moved by session-1 starting permutation: s2begins s3begins s1u s3donothing s1c s3c s2donothing s2c s2select step s2begins: BEGIN ISOLATION LEVEL SERIALIZABLE; @@ -97,10 +107,12 @@ step s3c: COMMIT; step s2donothing: INSERT INTO foo VALUES(1, 'session-2 donothing') ON CONFLICT DO NOTHING; step s2c: COMMIT; step s2select: SELECT * FROM foo ORDER BY a; -a b +a|b +-+----------------------------------- +1|session-2 donothing +2|initial tuple -> moved by session-1 +(2 rows) -1 session-2 donothing -2 initial tuple -> moved by session-1 starting permutation: s2begins s3begins s1u s2donothing s3donothing s1c s2c s3c s2select step s2begins: BEGIN ISOLATION LEVEL SERIALIZABLE; @@ -115,10 +127,12 @@ ERROR: could not serialize access due to concurrent update step s2c: COMMIT; step s3c: COMMIT; step s2select: SELECT * FROM foo ORDER BY a; -a b +a|b +-+----------------------------------- +1|session-2 donothing +2|initial tuple -> moved by session-1 +(2 rows) -1 session-2 donothing -2 initial tuple -> moved by session-1 starting permutation: s2begins s3begins s1u s3donothing s2donothing s1c s3c s2c s2select step s2begins: BEGIN ISOLATION LEVEL SERIALIZABLE; @@ -133,7 +147,9 @@ step s2donothing: <... completed> step s3c: COMMIT; step s2c: COMMIT; step s2select: SELECT * FROM foo ORDER BY a; -a b +a|b +-+----------------------------------- +1|session-2 donothing +2|initial tuple -> moved by session-1 +(2 rows) -1 session-2 donothing -2 initial tuple -> moved by session-1 diff --git a/src/test/isolation/expected/partition-key-update-4.out b/src/test/isolation/expected/partition-key-update-4.out index 774a7faf6ce0b..91fa0417fdeac 100644 --- a/src/test/isolation/expected/partition-key-update-4.out +++ b/src/test/isolation/expected/partition-key-update-4.out @@ -9,9 +9,11 @@ step s2c: COMMIT; step s1u: <... completed> step s1c: COMMIT; step s1s: SELECT tableoid::regclass, * FROM foo ORDER BY a; -tableoid a b +tableoid|a|b +--------+-+------------------- +foo2 |2|ABC update2 update1 +(1 row) -foo2 2 ABC update2 update1 starting permutation: s1b s2b s2ut1 s1ut s2c s1c s1st s1stl step s1b: BEGIN ISOLATION LEVEL READ COMMITTED; @@ -22,13 +24,17 @@ step s2c: COMMIT; step s1ut: <... completed> step s1c: COMMIT; step s1st: SELECT tableoid::regclass, * FROM footrg ORDER BY a; -tableoid a b +tableoid|a|b +--------+-+------------------- +footrg2 |2|ABC update2 update1 +(1 row) -footrg2 2 ABC update2 update1 step s1stl: SELECT * FROM triglog ORDER BY a; -a b +a|b +-+------------------- +1|ABC update2 trigger +(1 row) -1 ABC update2 trigger starting permutation: s1b s2b s2u2 s1u s2c s1c s1s step s1b: BEGIN ISOLATION LEVEL READ COMMITTED; @@ -39,9 +45,11 @@ step s2c: COMMIT; step s1u: <... completed> step s1c: COMMIT; step s1s: SELECT tableoid::regclass, * FROM foo ORDER BY a; -tableoid a b +tableoid|a|b +--------+-+--- +foo1 |1|EFG +(1 row) -foo1 1 EFG starting permutation: s1b s2b s2ut2 s1ut s2c s1c s1st s1stl step s1b: BEGIN ISOLATION LEVEL READ COMMITTED; @@ -52,9 +60,13 @@ step s2c: COMMIT; step s1ut: <... completed> step s1c: COMMIT; step s1st: SELECT tableoid::regclass, * FROM footrg ORDER BY a; -tableoid a b +tableoid|a|b +--------+-+--- +footrg1 |1|EFG +(1 row) -footrg1 1 EFG step s1stl: SELECT * FROM triglog ORDER BY a; -a b +a|b +-+- +(0 rows) diff --git a/src/test/isolation/expected/plpgsql-toast.out b/src/test/isolation/expected/plpgsql-toast.out index 213bddad4fde1..0fee7953acc3a 100644 --- a/src/test/isolation/expected/plpgsql-toast.out +++ b/src/test/isolation/expected/plpgsql-toast.out @@ -2,17 +2,23 @@ Parsed test spec with 2 sessions starting permutation: lock assign1 vacuum unlock pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - step lock: SELECT pg_advisory_lock(1); pg_advisory_lock +---------------- + +(1 row) - step assign1: do $$ declare @@ -33,24 +39,32 @@ step unlock: SELECT pg_advisory_unlock(1); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: length(x) = 6000 step assign1: <... completed> starting permutation: lock assign2 vacuum unlock pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - step lock: SELECT pg_advisory_lock(1); pg_advisory_lock +---------------- + +(1 row) - step assign2: do $$ declare @@ -71,24 +85,32 @@ step unlock: SELECT pg_advisory_unlock(1); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: length(x) = 6000 step assign2: <... completed> starting permutation: lock assign3 vacuum unlock pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - step lock: SELECT pg_advisory_lock(1); pg_advisory_lock +---------------- + +(1 row) - step assign3: do $$ declare @@ -110,24 +132,32 @@ step unlock: SELECT pg_advisory_unlock(1); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: length(r) = 6004 step assign3: <... completed> starting permutation: lock assign4 vacuum unlock pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - step lock: SELECT pg_advisory_lock(1); pg_advisory_lock +---------------- + +(1 row) - step assign4: do $$ declare @@ -148,24 +178,32 @@ step unlock: SELECT pg_advisory_unlock(1); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: length(r) = 6004 step assign4: <... completed> starting permutation: lock assign5 vacuum unlock pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - step lock: SELECT pg_advisory_lock(1); pg_advisory_lock +---------------- + +(1 row) - step assign5: do $$ declare @@ -188,24 +226,32 @@ step unlock: SELECT pg_advisory_unlock(1); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: length(r) = 6002 step assign5: <... completed> starting permutation: lock assign6 vacuum unlock pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - step lock: SELECT pg_advisory_lock(1); pg_advisory_lock +---------------- + +(1 row) - step assign6: do $$ declare @@ -229,8 +275,10 @@ step unlock: SELECT pg_advisory_unlock(1); pg_advisory_unlock +------------------ +t +(1 row) -t s1: NOTICE: length(r) = 6002 s1: NOTICE: length(r) = 9002 s1: NOTICE: length(r) = 12002 @@ -238,11 +286,15 @@ step assign6: <... completed> starting permutation: fetch-after-commit pg_advisory_unlock_all +---------------------- + +(1 row) - pg_advisory_unlock_all +---------------------- + +(1 row) - s1: NOTICE: length(t) = 6000 s1: NOTICE: length(t) = 9000 s1: NOTICE: length(t) = 12000 diff --git a/src/test/isolation/expected/predicate-gin.out b/src/test/isolation/expected/predicate-gin.out index 77eb5aaff79d9..c032804804bad 100644 --- a/src/test/isolation/expected/predicate-gin.out +++ b/src/test/isolation/expected/predicate-gin.out @@ -2,13 +2,17 @@ Parsed test spec with 3 sessions starting permutation: ra1 ro2 wo1 c1 wa2 c2 step ra1: select * from gin_tbl where p @> array[1] limit 1; -p +p +--- +{1} +(1 row) -{1} step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wo1: insert into other_tbl values (1); step c1: commit; step wa2: insert into gin_tbl values (array[1]); @@ -17,13 +21,17 @@ step c2: commit; starting permutation: ro2 ra1 wo1 c1 wa2 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step ra1: select * from gin_tbl where p @> array[1] limit 1; -p +p +--- +{1} +(1 row) -{1} step wo1: insert into other_tbl values (1); step c1: commit; step wa2: insert into gin_tbl values (array[1]); @@ -32,13 +40,17 @@ step c2: commit; starting permutation: ro2 ra1 wo1 wa2 c1 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step ra1: select * from gin_tbl where p @> array[1] limit 1; -p +p +--- +{1} +(1 row) -{1} step wo1: insert into other_tbl values (1); step wa2: insert into gin_tbl values (array[1]); step c1: commit; @@ -47,13 +59,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ra1 ro2 wa2 wo1 c1 c2 step ra1: select * from gin_tbl where p @> array[1] limit 1; -p +p +--- +{1} +(1 row) -{1} step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wa2: insert into gin_tbl values (array[1]); step wo1: insert into other_tbl values (1); step c1: commit; @@ -62,13 +78,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rb1 ro2 wo1 c1 wb2 c2 step rb1: select count(*) from gin_tbl where p @> array[2]; -count +count +----- + 1 +(1 row) -1 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wo1: insert into other_tbl values (1); step c1: commit; step wb2: insert into gin_tbl values (array[2]); @@ -77,13 +97,17 @@ step c2: commit; starting permutation: ro2 rb1 wo1 c1 wb2 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step rb1: select count(*) from gin_tbl where p @> array[2]; -count +count +----- + 1 +(1 row) -1 step wo1: insert into other_tbl values (1); step c1: commit; step wb2: insert into gin_tbl values (array[2]); @@ -92,13 +116,17 @@ step c2: commit; starting permutation: ro2 rb1 wo1 wb2 c1 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step rb1: select count(*) from gin_tbl where p @> array[2]; -count +count +----- + 1 +(1 row) -1 step wo1: insert into other_tbl values (1); step wb2: insert into gin_tbl values (array[2]); step c1: commit; @@ -107,13 +135,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rb1 ro2 wb2 wo1 c1 c2 step rb1: select count(*) from gin_tbl where p @> array[2]; -count +count +----- + 1 +(1 row) -1 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wb2: insert into gin_tbl values (array[2]); step wo1: insert into other_tbl values (1); step c1: commit; @@ -122,13 +154,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rc1 ro2 wo1 c1 wc2 c2 step rc1: select count(*) from gin_tbl where p @> array[800]; -count +count +----- + 1 +(1 row) -1 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wo1: insert into other_tbl values (1); step c1: commit; step wc2: insert into gin_tbl values (array[800]); @@ -137,13 +173,17 @@ step c2: commit; starting permutation: ro2 rc1 wo1 c1 wc2 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step rc1: select count(*) from gin_tbl where p @> array[800]; -count +count +----- + 1 +(1 row) -1 step wo1: insert into other_tbl values (1); step c1: commit; step wc2: insert into gin_tbl values (array[800]); @@ -152,13 +192,17 @@ step c2: commit; starting permutation: ro2 rc1 wo1 wc2 c1 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step rc1: select count(*) from gin_tbl where p @> array[800]; -count +count +----- + 1 +(1 row) -1 step wo1: insert into other_tbl values (1); step wc2: insert into gin_tbl values (array[800]); step c1: commit; @@ -167,13 +211,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rc1 ro2 wc2 wo1 c1 c2 step rc1: select count(*) from gin_tbl where p @> array[800]; -count +count +----- + 1 +(1 row) -1 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wc2: insert into gin_tbl values (array[800]); step wo1: insert into other_tbl values (1); step c1: commit; @@ -182,13 +230,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ra1 ro2 wo1 c1 wb2 c2 step ra1: select * from gin_tbl where p @> array[1] limit 1; -p +p +--- +{1} +(1 row) -{1} step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wo1: insert into other_tbl values (1); step c1: commit; step wb2: insert into gin_tbl values (array[2]); @@ -196,13 +248,17 @@ step c2: commit; starting permutation: ro2 ra1 wo1 c1 wc2 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step ra1: select * from gin_tbl where p @> array[1] limit 1; -p +p +--- +{1} +(1 row) -{1} step wo1: insert into other_tbl values (1); step c1: commit; step wc2: insert into gin_tbl values (array[800]); @@ -210,13 +266,17 @@ step c2: commit; starting permutation: ro2 rb1 wo1 wa2 c1 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step rb1: select count(*) from gin_tbl where p @> array[2]; -count +count +----- + 1 +(1 row) -1 step wo1: insert into other_tbl values (1); step wa2: insert into gin_tbl values (array[1]); step c1: commit; @@ -224,13 +284,17 @@ step c2: commit; starting permutation: rc1 ro2 wa2 wo1 c1 c2 step rc1: select count(*) from gin_tbl where p @> array[800]; -count +count +----- + 1 +(1 row) -1 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wa2: insert into gin_tbl values (array[1]); step wo1: insert into other_tbl values (1); step c1: commit; @@ -238,13 +302,17 @@ step c2: commit; starting permutation: rb1 ro2 wo1 c1 wa2 c2 step rb1: select count(*) from gin_tbl where p @> array[2]; -count +count +----- + 1 +(1 row) -1 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wo1: insert into other_tbl values (1); step c1: commit; step wa2: insert into gin_tbl values (array[1]); @@ -252,13 +320,17 @@ step c2: commit; starting permutation: ro2 rb1 wo1 c1 wc2 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step rb1: select count(*) from gin_tbl where p @> array[2]; -count +count +----- + 1 +(1 row) -1 step wo1: insert into other_tbl values (1); step c1: commit; step wc2: insert into gin_tbl values (array[800]); @@ -266,13 +338,17 @@ step c2: commit; starting permutation: ro2 ra1 wo1 wb2 c1 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step ra1: select * from gin_tbl where p @> array[1] limit 1; -p +p +--- +{1} +(1 row) -{1} step wo1: insert into other_tbl values (1); step wb2: insert into gin_tbl values (array[2]); step c1: commit; @@ -280,13 +356,17 @@ step c2: commit; starting permutation: rc1 ro2 wb2 wo1 c1 c2 step rc1: select count(*) from gin_tbl where p @> array[800]; -count +count +----- + 1 +(1 row) -1 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wb2: insert into gin_tbl values (array[2]); step wo1: insert into other_tbl values (1); step c1: commit; @@ -294,13 +374,17 @@ step c2: commit; starting permutation: rc1 ro2 wo1 c1 wa2 c2 step rc1: select count(*) from gin_tbl where p @> array[800]; -count +count +----- + 1 +(1 row) -1 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wo1: insert into other_tbl values (1); step c1: commit; step wa2: insert into gin_tbl values (array[1]); @@ -308,13 +392,17 @@ step c2: commit; starting permutation: ro2 rc1 wo1 c1 wb2 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step rc1: select count(*) from gin_tbl where p @> array[800]; -count +count +----- + 1 +(1 row) -1 step wo1: insert into other_tbl values (1); step c1: commit; step wb2: insert into gin_tbl values (array[2]); @@ -322,13 +410,17 @@ step c2: commit; starting permutation: ro2 ra1 wo1 wc2 c1 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step ra1: select * from gin_tbl where p @> array[1] limit 1; -p +p +--- +{1} +(1 row) -{1} step wo1: insert into other_tbl values (1); step wc2: insert into gin_tbl values (array[800]); step c1: commit; @@ -336,13 +428,17 @@ step c2: commit; starting permutation: rb1 ro2 wc2 wo1 c1 c2 step rb1: select count(*) from gin_tbl where p @> array[2]; -count +count +----- + 1 +(1 row) -1 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wc2: insert into gin_tbl values (array[800]); step wo1: insert into other_tbl values (1); step c1: commit; @@ -351,13 +447,17 @@ step c2: commit; starting permutation: fu ra1 ro2 wo1 c1 wa2 c2 step fu: alter index ginidx set (fastupdate = on); step ra1: select * from gin_tbl where p @> array[1] limit 1; -p +p +--- +{1} +(1 row) -{1} step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wo1: insert into other_tbl values (1); step c1: commit; step wa2: insert into gin_tbl values (array[1]); @@ -367,13 +467,17 @@ step c2: commit; starting permutation: fu ra1 ro2 wo1 c1 wb2 c2 step fu: alter index ginidx set (fastupdate = on); step ra1: select * from gin_tbl where p @> array[1] limit 1; -p +p +--- +{1} +(1 row) -{1} step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wo1: insert into other_tbl values (1); step c1: commit; step wb2: insert into gin_tbl values (array[2]); @@ -382,13 +486,17 @@ step c2: commit; starting permutation: ra1 ro2 wo1 c1 fu wa2 c2 step ra1: select * from gin_tbl where p @> array[1] limit 1; -p +p +--- +{1} +(1 row) -{1} step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wo1: insert into other_tbl values (1); step c1: commit; step fu: alter index ginidx set (fastupdate = on); @@ -398,13 +506,17 @@ step c2: commit; starting permutation: rd1 ro2 wo1 c1 wd2 c2 step rd1: select count(*) from gin_tbl where p @> array[2000]; -count +count +----- + 0 +(1 row) -0 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wo1: insert into other_tbl values (1); step c1: commit; step wd2: insert into gin_tbl values (array[2000]); @@ -413,13 +525,17 @@ step c2: commit; starting permutation: ro2 rd1 wo1 c1 wd2 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step rd1: select count(*) from gin_tbl where p @> array[2000]; -count +count +----- + 0 +(1 row) -0 step wo1: insert into other_tbl values (1); step c1: commit; step wd2: insert into gin_tbl values (array[2000]); @@ -428,13 +544,17 @@ step c2: commit; starting permutation: ro2 rd1 wo1 wd2 c1 c2 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step rd1: select count(*) from gin_tbl where p @> array[2000]; -count +count +----- + 0 +(1 row) -0 step wo1: insert into other_tbl values (1); step wd2: insert into gin_tbl values (array[2000]); step c1: commit; @@ -443,13 +563,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rd1 ro2 wd2 wo1 c1 c2 step rd1: select count(*) from gin_tbl where p @> array[2000]; -count +count +----- + 0 +(1 row) -0 step ro2: select count(*) from other_tbl; -count +count +----- + 0 +(1 row) -0 step wd2: insert into gin_tbl values (array[2000]); step wo1: insert into other_tbl values (1); step c1: commit; diff --git a/src/test/isolation/expected/predicate-gist.out b/src/test/isolation/expected/predicate-gist.out index 77a27958af135..ef5d38630da8d 100644 --- a/src/test/isolation/expected/predicate-gist.out +++ b/src/test/isolation/expected/predicate-gist.out @@ -2,79 +2,99 @@ Parsed test spec with 2 sessions starting permutation: rxy1 wx1 c1 rxy2 wy2 c2 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; step c1: commit; step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2233750 +(1 row) -2233750 step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; step c2: commit; starting permutation: rxy2 wy2 c2 rxy1 wx1 c1 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; step c2: commit; step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +316250 +(1 row) -316250 step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; step c1: commit; starting permutation: rxy3 wx3 c1 rxy4 wy4 c2 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; step c1: commit; step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; step c2: commit; starting permutation: rxy4 wy4 c2 rxy3 wx3 c1 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; step c2: commit; step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; step c1: commit; starting permutation: rxy1 wx1 rxy2 c1 wy2 c2 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step c1: commit; step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; @@ -83,15 +103,19 @@ step c2: commit; starting permutation: rxy1 wx1 rxy2 wy2 c1 c2 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; step c1: commit; @@ -100,15 +124,19 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 wx1 rxy2 wy2 c2 c1 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; step c2: commit; @@ -117,13 +145,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 rxy2 wx1 c1 wy2 c2 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; step c1: commit; @@ -134,13 +166,17 @@ step c2: commit; starting permutation: rxy1 rxy2 wx1 wy2 c1 c2 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; step wy2: insert into gist_point_tbl (id, p) @@ -151,13 +187,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 rxy2 wx1 wy2 c2 c1 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; step wy2: insert into gist_point_tbl (id, p) @@ -168,13 +208,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 rxy2 wy2 wx1 c1 c2 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; step wx1: insert into gist_point_tbl (id, p) @@ -185,13 +229,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 rxy2 wy2 wx1 c2 c1 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; step wx1: insert into gist_point_tbl (id, p) @@ -202,13 +250,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 rxy2 wy2 c2 wx1 c1 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; step c2: commit; @@ -219,13 +271,17 @@ step c1: commit; starting permutation: rxy2 rxy1 wx1 c1 wy2 c2 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; step c1: commit; @@ -236,13 +292,17 @@ step c2: commit; starting permutation: rxy2 rxy1 wx1 wy2 c1 c2 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; step wy2: insert into gist_point_tbl (id, p) @@ -253,13 +313,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy2 rxy1 wx1 wy2 c2 c1 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; step wy2: insert into gist_point_tbl (id, p) @@ -270,13 +334,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy2 rxy1 wy2 wx1 c1 c2 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; step wx1: insert into gist_point_tbl (id, p) @@ -287,13 +355,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy2 rxy1 wy2 wx1 c2 c1 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; step wx1: insert into gist_point_tbl (id, p) @@ -304,13 +376,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy2 rxy1 wy2 c2 wx1 c1 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; step c2: commit; @@ -321,15 +397,19 @@ step c1: commit; starting permutation: rxy2 wy2 rxy1 wx1 c1 c2 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; step c1: commit; @@ -338,15 +418,19 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy2 wy2 rxy1 wx1 c2 c1 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; step c2: commit; @@ -355,15 +439,19 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy2 wy2 rxy1 c2 wx1 c1 step rxy2: select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); -sum + sum +------- +2188750 +(1 row) -2188750 step wy2: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; step rxy1: select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); -sum + sum +------ +311250 +(1 row) -311250 step c2: commit; step wx1: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; @@ -372,15 +460,19 @@ step c1: commit; starting permutation: rxy3 wx3 rxy4 c1 wy4 c2 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step c1: commit; step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; @@ -388,15 +480,19 @@ step c2: commit; starting permutation: rxy3 wx3 rxy4 wy4 c1 c2 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; step c1: commit; @@ -404,15 +500,19 @@ step c2: commit; starting permutation: rxy3 wx3 rxy4 wy4 c2 c1 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; step c2: commit; @@ -420,13 +520,17 @@ step c1: commit; starting permutation: rxy3 rxy4 wx3 c1 wy4 c2 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; step c1: commit; @@ -436,13 +540,17 @@ step c2: commit; starting permutation: rxy3 rxy4 wx3 wy4 c1 c2 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; step wy4: insert into gist_point_tbl (id, p) @@ -452,13 +560,17 @@ step c2: commit; starting permutation: rxy3 rxy4 wx3 wy4 c2 c1 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; step wy4: insert into gist_point_tbl (id, p) @@ -468,13 +580,17 @@ step c1: commit; starting permutation: rxy3 rxy4 wy4 wx3 c1 c2 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; step wx3: insert into gist_point_tbl (id, p) @@ -484,13 +600,17 @@ step c2: commit; starting permutation: rxy3 rxy4 wy4 wx3 c2 c1 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; step wx3: insert into gist_point_tbl (id, p) @@ -500,13 +620,17 @@ step c1: commit; starting permutation: rxy3 rxy4 wy4 c2 wx3 c1 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; step c2: commit; @@ -516,13 +640,17 @@ step c1: commit; starting permutation: rxy4 rxy3 wx3 c1 wy4 c2 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; step c1: commit; @@ -532,13 +660,17 @@ step c2: commit; starting permutation: rxy4 rxy3 wx3 wy4 c1 c2 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; step wy4: insert into gist_point_tbl (id, p) @@ -548,13 +680,17 @@ step c2: commit; starting permutation: rxy4 rxy3 wx3 wy4 c2 c1 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; step wy4: insert into gist_point_tbl (id, p) @@ -564,13 +700,17 @@ step c1: commit; starting permutation: rxy4 rxy3 wy4 wx3 c1 c2 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; step wx3: insert into gist_point_tbl (id, p) @@ -580,13 +720,17 @@ step c2: commit; starting permutation: rxy4 rxy3 wy4 wx3 c2 c1 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; step wx3: insert into gist_point_tbl (id, p) @@ -596,13 +740,17 @@ step c1: commit; starting permutation: rxy4 rxy3 wy4 c2 wx3 c1 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; step c2: commit; @@ -612,15 +760,19 @@ step c1: commit; starting permutation: rxy4 wy4 rxy3 wx3 c1 c2 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; step c1: commit; @@ -628,15 +780,19 @@ step c2: commit; starting permutation: rxy4 wy4 rxy3 wx3 c2 c1 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; step c2: commit; @@ -644,15 +800,19 @@ step c1: commit; starting permutation: rxy4 wy4 rxy3 c2 wx3 c1 step rxy4: select sum(p[0]) from gist_point_tbl where p << point(1000,1000); -sum + sum +----- +49500 +(1 row) -49500 step wy4: insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; step rxy3: select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); -sum + sum +------- +3202000 +(1 row) -3202000 step c2: commit; step wx3: insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; diff --git a/src/test/isolation/expected/predicate-hash.out b/src/test/isolation/expected/predicate-hash.out index 53e500fd26fbf..2009252dca0bd 100644 --- a/src/test/isolation/expected/predicate-hash.out +++ b/src/test/isolation/expected/predicate-hash.out @@ -2,79 +2,99 @@ Parsed test spec with 2 sessions starting permutation: rxy1 wx1 c1 rxy2 wy2 c2 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; step c1: commit; step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +600 +(1 row) -600 step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; step c2: commit; starting permutation: rxy2 wy2 c2 rxy1 wx1 c1 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; step c2: commit; step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +400 +(1 row) -400 step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; step c1: commit; starting permutation: rxy3 wx3 c1 rxy4 wy4 c2 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; step c1: commit; step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; step c2: commit; starting permutation: rxy4 wy4 c2 rxy3 wx3 c1 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; step c2: commit; step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; step c1: commit; starting permutation: rxy1 wx1 rxy2 c1 wy2 c2 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step c1: commit; step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; @@ -83,15 +103,19 @@ step c2: commit; starting permutation: rxy1 wx1 rxy2 wy2 c1 c2 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; step c1: commit; @@ -100,15 +124,19 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 wx1 rxy2 wy2 c2 c1 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; step c2: commit; @@ -117,13 +145,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 rxy2 wx1 c1 wy2 c2 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; step c1: commit; @@ -134,13 +166,17 @@ step c2: commit; starting permutation: rxy1 rxy2 wx1 wy2 c1 c2 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; step wy2: insert into hash_tbl (id, p) @@ -151,13 +187,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 rxy2 wx1 wy2 c2 c1 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; step wy2: insert into hash_tbl (id, p) @@ -168,13 +208,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 rxy2 wy2 wx1 c1 c2 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; step wx1: insert into hash_tbl (id, p) @@ -185,13 +229,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 rxy2 wy2 wx1 c2 c1 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; step wx1: insert into hash_tbl (id, p) @@ -202,13 +250,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy1 rxy2 wy2 c2 wx1 c1 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; step c2: commit; @@ -219,13 +271,17 @@ step c1: commit; starting permutation: rxy2 rxy1 wx1 c1 wy2 c2 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; step c1: commit; @@ -236,13 +292,17 @@ step c2: commit; starting permutation: rxy2 rxy1 wx1 wy2 c1 c2 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; step wy2: insert into hash_tbl (id, p) @@ -253,13 +313,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy2 rxy1 wx1 wy2 c2 c1 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; step wy2: insert into hash_tbl (id, p) @@ -270,13 +334,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy2 rxy1 wy2 wx1 c1 c2 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; step wx1: insert into hash_tbl (id, p) @@ -287,13 +355,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy2 rxy1 wy2 wx1 c2 c1 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; step wx1: insert into hash_tbl (id, p) @@ -304,13 +376,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy2 rxy1 wy2 c2 wx1 c1 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; step c2: commit; @@ -321,15 +397,19 @@ step c1: commit; starting permutation: rxy2 wy2 rxy1 wx1 c1 c2 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; step c1: commit; @@ -338,15 +418,19 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy2 wy2 rxy1 wx1 c2 c1 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; step c2: commit; @@ -355,15 +439,19 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxy2 wy2 rxy1 c2 wx1 c1 step rxy2: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy2: insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; step rxy1: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step c2: commit; step wx1: insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; @@ -372,15 +460,19 @@ step c1: commit; starting permutation: rxy3 wx3 rxy4 c1 wy4 c2 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step c1: commit; step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; @@ -388,15 +480,19 @@ step c2: commit; starting permutation: rxy3 wx3 rxy4 wy4 c1 c2 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; step c1: commit; @@ -404,15 +500,19 @@ step c2: commit; starting permutation: rxy3 wx3 rxy4 wy4 c2 c1 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; step c2: commit; @@ -420,13 +520,17 @@ step c1: commit; starting permutation: rxy3 rxy4 wx3 c1 wy4 c2 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; step c1: commit; @@ -436,13 +540,17 @@ step c2: commit; starting permutation: rxy3 rxy4 wx3 wy4 c1 c2 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; step wy4: insert into hash_tbl (id, p) @@ -452,13 +560,17 @@ step c2: commit; starting permutation: rxy3 rxy4 wx3 wy4 c2 c1 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; step wy4: insert into hash_tbl (id, p) @@ -468,13 +580,17 @@ step c1: commit; starting permutation: rxy3 rxy4 wy4 wx3 c1 c2 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; step wx3: insert into hash_tbl (id, p) @@ -484,13 +600,17 @@ step c2: commit; starting permutation: rxy3 rxy4 wy4 wx3 c2 c1 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; step wx3: insert into hash_tbl (id, p) @@ -500,13 +620,17 @@ step c1: commit; starting permutation: rxy3 rxy4 wy4 c2 wx3 c1 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; step c2: commit; @@ -516,13 +640,17 @@ step c1: commit; starting permutation: rxy4 rxy3 wx3 c1 wy4 c2 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; step c1: commit; @@ -532,13 +660,17 @@ step c2: commit; starting permutation: rxy4 rxy3 wx3 wy4 c1 c2 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; step wy4: insert into hash_tbl (id, p) @@ -548,13 +680,17 @@ step c2: commit; starting permutation: rxy4 rxy3 wx3 wy4 c2 c1 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; step wy4: insert into hash_tbl (id, p) @@ -564,13 +700,17 @@ step c1: commit; starting permutation: rxy4 rxy3 wy4 wx3 c1 c2 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; step wx3: insert into hash_tbl (id, p) @@ -580,13 +720,17 @@ step c2: commit; starting permutation: rxy4 rxy3 wy4 wx3 c2 c1 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; step wx3: insert into hash_tbl (id, p) @@ -596,13 +740,17 @@ step c1: commit; starting permutation: rxy4 rxy3 wy4 c2 wx3 c1 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; step c2: commit; @@ -612,15 +760,19 @@ step c1: commit; starting permutation: rxy4 wy4 rxy3 wx3 c1 c2 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; step c1: commit; @@ -628,15 +780,19 @@ step c2: commit; starting permutation: rxy4 wy4 rxy3 wx3 c2 c1 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; step c2: commit; @@ -644,15 +800,19 @@ step c1: commit; starting permutation: rxy4 wy4 rxy3 c2 wx3 c1 step rxy4: select sum(p) from hash_tbl where p=30; -sum +sum +--- +300 +(1 row) -300 step wy4: insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; step rxy3: select sum(p) from hash_tbl where p=20; -sum +sum +--- +200 +(1 row) -200 step c2: commit; step wx3: insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; diff --git a/src/test/isolation/expected/predicate-lock-hot-tuple.out b/src/test/isolation/expected/predicate-lock-hot-tuple.out index d1c69bbbd0358..d316edbdaa3f7 100644 --- a/src/test/isolation/expected/predicate-lock-hot-tuple.out +++ b/src/test/isolation/expected/predicate-lock-hot-tuple.out @@ -4,15 +4,19 @@ starting permutation: b1 b2 r1 r2 w1 w2 c1 c2 step b1: BEGIN ISOLATION LEVEL SERIALIZABLE; step b2: BEGIN ISOLATION LEVEL SERIALIZABLE; step r1: SELECT * FROM test WHERE i IN (5, 7) -i t +i|t +-+---------------- +5|apple +7|pear_hot_updated +(2 rows) -5 apple -7 pear_hot_updated step r2: SELECT * FROM test WHERE i IN (5, 7) -i t +i|t +-+---------------- +5|apple +7|pear_hot_updated +(2 rows) -5 apple -7 pear_hot_updated step w1: UPDATE test SET t = 'pear_xact1' WHERE i = 7 step w2: UPDATE test SET t = 'apple_xact2' WHERE i = 5 step c1: COMMIT; diff --git a/src/test/isolation/expected/prepared-transactions-cic.out b/src/test/isolation/expected/prepared-transactions-cic.out index 043ec3c36362e..ac0ee69b82afc 100644 --- a/src/test/isolation/expected/prepared-transactions-cic.out +++ b/src/test/isolation/expected/prepared-transactions-cic.out @@ -13,6 +13,8 @@ step r2: SET enable_bitmapscan to off; SELECT * FROM cic_test WHERE a = 1; -a +a +- +1 +(1 row) -1 diff --git a/src/test/isolation/expected/prepared-transactions.out b/src/test/isolation/expected/prepared-transactions.out index fa672f1cb01d0..8a66bf9392bb3 100644 --- a/src/test/isolation/expected/prepared-transactions.out +++ b/src/test/isolation/expected/prepared-transactions.out @@ -1,15 +1,23 @@ Parsed test spec with 4 sessions starting permutation: r1 r2 w2 w3 p1 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -22,19 +30,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p1 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -47,19 +65,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p1 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -72,19 +100,29 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p1 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -97,19 +135,29 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p1 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -122,19 +170,29 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p1 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -147,19 +205,29 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p1 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -172,19 +240,29 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p2 p1 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -197,19 +275,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p2 p1 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -222,19 +310,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p2 p3 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -247,19 +345,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p2 p3 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -272,19 +380,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p2 p3 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -297,19 +415,29 @@ step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p2 p3 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -322,19 +450,29 @@ step p1: PREPARE TRANSACTION 's1'; step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p2 p3 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -347,19 +485,29 @@ step c2: COMMIT PREPARED 's2'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -372,19 +520,29 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -397,19 +555,29 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -422,19 +590,29 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -447,19 +625,29 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -472,19 +660,29 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -497,19 +695,29 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -522,19 +730,29 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -547,19 +765,29 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -572,19 +800,29 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -597,19 +835,29 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -622,19 +870,29 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -647,19 +905,29 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -672,19 +940,29 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -697,19 +975,29 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -722,19 +1010,29 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 w3 p3 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -747,19 +1045,29 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p1 w3 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -772,19 +1080,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p1 w3 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -797,19 +1115,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p1 w3 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -822,19 +1150,29 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p1 w3 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -847,19 +1185,29 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p1 w3 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -872,19 +1220,29 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p1 w3 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -897,19 +1255,29 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p1 w3 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -922,19 +1290,29 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p1 p2 w3 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -947,19 +1325,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p1 p2 w3 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -972,19 +1360,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p2 w3 p1 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -997,19 +1395,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p2 w3 p1 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -1022,19 +1430,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p2 w3 p3 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -1047,19 +1465,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p2 w3 p3 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -1072,19 +1500,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p2 w3 p3 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -1097,19 +1535,29 @@ step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p2 w3 p3 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -1122,19 +1570,29 @@ step p1: PREPARE TRANSACTION 's1'; step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p2 w3 p3 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -1147,19 +1605,29 @@ step c2: COMMIT PREPARED 's2'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p2 p1 w3 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -1172,19 +1640,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 w2 p2 p1 w3 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -1197,19 +1675,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 p1 w2 w3 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -1222,19 +1710,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 p1 w2 w3 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -1247,19 +1745,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 p1 w2 w3 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -1272,19 +1780,29 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 p1 w2 w3 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -1297,19 +1815,29 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 p1 w2 w3 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -1322,19 +1850,29 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 p1 w2 w3 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -1347,19 +1885,29 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 p1 w2 w3 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -1372,19 +1920,29 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 p1 w2 p2 w3 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -1397,19 +1955,29 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 r2 p1 w2 p2 w3 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -1422,21 +1990,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p1 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p2: PREPARE TRANSACTION 's2'; @@ -1447,21 +2025,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p1 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p2: PREPARE TRANSACTION 's2'; @@ -1472,21 +2060,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p1 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -1497,21 +2095,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p1 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -1522,21 +2130,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p1 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -1547,21 +2165,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p1 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -1572,21 +2200,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p1 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -1597,21 +2235,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p2 p1 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p1: PREPARE TRANSACTION 's1'; @@ -1622,21 +2270,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p2 p1 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p1: PREPARE TRANSACTION 's1'; @@ -1647,21 +2305,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p2 p3 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -1672,21 +2340,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p2 p3 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -1697,21 +2375,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p2 p3 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -1722,21 +2410,31 @@ step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p2 p3 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -1747,21 +2445,31 @@ step p1: PREPARE TRANSACTION 's1'; step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p2 p3 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -1772,21 +2480,31 @@ step c2: COMMIT PREPARED 's2'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -1797,21 +2515,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -1822,21 +2550,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -1847,21 +2585,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -1872,21 +2620,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -1897,21 +2655,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -1922,21 +2690,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -1947,21 +2725,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -1972,21 +2760,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -1997,21 +2795,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -2022,21 +2830,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -2047,21 +2865,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -2072,21 +2900,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -2097,21 +2935,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -2122,21 +2970,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -2147,21 +3005,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 r2 p3 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -2172,22 +3040,32 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 r2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -2197,22 +3075,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 r2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -2222,22 +3110,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 r2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -2247,22 +3145,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 r2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -2272,22 +3180,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 r2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -2297,22 +3215,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 r2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -2322,22 +3250,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 r2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -2347,16 +3285,24 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 p3 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2370,16 +3316,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 p3 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2393,16 +3347,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 p3 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2416,16 +3378,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 p3 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2439,16 +3409,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 p3 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2462,16 +3440,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 p3 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2485,16 +3471,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 p3 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2508,16 +3502,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 p3 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2531,16 +3533,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p1 p3 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2554,16 +3564,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2577,16 +3595,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2600,16 +3626,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2623,16 +3657,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2646,16 +3688,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2669,16 +3719,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2692,16 +3750,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2715,16 +3781,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2738,16 +3812,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2761,16 +3843,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2784,16 +3874,24 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2807,16 +3905,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2830,16 +3936,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2853,16 +3967,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2876,16 +3998,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2899,16 +4029,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 r2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2922,16 +4060,24 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 p1 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2945,16 +4091,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 p1 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2968,16 +4122,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 p1 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -2991,16 +4153,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 p1 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3014,16 +4184,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 p1 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3037,16 +4215,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 p1 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3060,16 +4246,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 p1 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3083,16 +4277,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 p1 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3106,16 +4308,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 p1 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3129,16 +4339,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 c3 r2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3152,16 +4370,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 c3 r2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3175,16 +4401,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 c3 r2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3198,16 +4432,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 c3 r2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3221,16 +4463,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 c3 r2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3244,16 +4494,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 c3 r2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3267,16 +4525,24 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 c3 p1 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3290,16 +4556,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 c3 p1 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3313,16 +4587,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 c3 p1 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3336,16 +4618,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 w3 p3 c3 p1 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -3359,22 +4649,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 r2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -3384,22 +4684,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 r2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -3409,22 +4719,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 r2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -3434,22 +4754,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 r2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -3459,22 +4789,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 r2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -3484,22 +4824,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 r2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -3509,22 +4859,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 r2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -3534,16 +4894,24 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 p3 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3557,16 +4925,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 p3 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3580,16 +4956,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 p3 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3603,16 +4987,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 p3 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3626,16 +5018,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 p3 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3649,16 +5049,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 p3 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3672,16 +5080,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 p3 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3695,16 +5111,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 p3 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3718,16 +5142,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w2 p1 w3 p3 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3741,20 +5173,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p1 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3766,20 +5208,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p1 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3791,20 +5243,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p1 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3816,20 +5278,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p1 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3841,20 +5313,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p1 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3866,20 +5348,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p1 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3891,20 +5383,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p1 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -3916,20 +5418,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p2 p1 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -3941,20 +5453,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p2 p1 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -3966,20 +5488,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p2 p3 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -3991,20 +5523,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p2 p3 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -4016,20 +5558,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p2 p3 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -4041,20 +5593,30 @@ step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p2 p3 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -4066,20 +5628,30 @@ step p1: PREPARE TRANSACTION 's1'; step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p2 p3 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -4091,20 +5663,30 @@ step c2: COMMIT PREPARED 's2'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4116,20 +5698,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4141,20 +5733,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4166,20 +5768,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4191,20 +5803,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4216,20 +5838,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4241,20 +5873,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4266,20 +5908,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4291,20 +5943,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4316,20 +5978,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4341,20 +6013,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4366,20 +6048,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4391,20 +6083,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4416,20 +6118,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4441,20 +6153,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4466,20 +6188,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 w2 p3 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -4491,20 +6223,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 w2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -4516,20 +6258,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 w2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -4541,20 +6293,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 w2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -4566,20 +6328,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 w2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -4591,20 +6363,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 w2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -4616,20 +6398,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 w2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -4641,20 +6433,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 w2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -4666,20 +6468,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 p3 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -4691,20 +6503,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 p3 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -4716,20 +6538,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 p3 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -4741,20 +6573,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 p3 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -4766,20 +6608,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 p3 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -4791,20 +6643,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 p3 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -4816,20 +6678,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 p3 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -4841,20 +6713,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 p3 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -4866,20 +6748,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p1 p3 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -4891,20 +6783,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -4916,20 +6818,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -4941,20 +6853,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -4966,20 +6888,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -4991,20 +6923,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -5016,20 +6958,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -5041,20 +6993,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -5066,20 +7028,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -5091,20 +7063,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -5116,20 +7098,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -5141,20 +7133,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -5166,20 +7168,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -5191,20 +7203,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -5216,20 +7238,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -5241,20 +7273,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -5266,20 +7308,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 w2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -5291,20 +7343,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 p1 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -5316,20 +7378,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 p1 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -5341,20 +7413,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 p1 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -5366,20 +7448,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 p1 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -5391,20 +7483,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 p1 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -5416,20 +7518,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 p1 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -5441,20 +7553,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 p1 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -5466,20 +7588,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 p1 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -5491,20 +7623,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 p1 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -5516,20 +7658,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 c3 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -5541,20 +7693,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 c3 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -5566,20 +7728,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 c3 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -5591,20 +7763,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 c3 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -5616,20 +7798,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 c3 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -5641,20 +7833,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 c3 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -5666,20 +7868,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 c3 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -5691,20 +7903,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 c3 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -5716,20 +7938,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 c3 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -5741,20 +7973,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 r2 p3 c3 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -5766,21 +8008,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p1 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p2: PREPARE TRANSACTION 's2'; @@ -5791,21 +8043,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p1 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p2: PREPARE TRANSACTION 's2'; @@ -5816,21 +8078,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p1 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -5841,21 +8113,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p1 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -5866,21 +8148,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p1 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -5891,21 +8183,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p1 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -5916,21 +8218,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p1 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -5941,21 +8253,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p2 p1 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p1: PREPARE TRANSACTION 's1'; @@ -5966,21 +8288,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p2 p1 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p1: PREPARE TRANSACTION 's1'; @@ -5991,21 +8323,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p2 p3 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -6016,21 +8358,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p2 p3 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -6041,21 +8393,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p2 p3 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -6066,21 +8428,31 @@ step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p2 p3 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -6091,21 +8463,31 @@ step p1: PREPARE TRANSACTION 's1'; step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p2 p3 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -6116,21 +8498,31 @@ step c2: COMMIT PREPARED 's2'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -6141,21 +8533,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -6166,21 +8568,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -6191,21 +8603,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -6216,21 +8638,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -6241,21 +8673,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -6266,21 +8708,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -6291,21 +8743,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -6316,21 +8778,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -6341,21 +8813,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -6366,21 +8848,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -6391,21 +8883,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -6416,21 +8918,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -6441,21 +8953,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -6466,21 +8988,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -6491,21 +9023,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 r2 p3 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -6516,22 +9058,32 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 r2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -6541,22 +9093,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 r2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -6566,22 +9128,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 r2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -6591,22 +9163,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 r2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -6616,22 +9198,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 r2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -6641,22 +9233,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 r2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -6666,22 +9268,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 r2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -6691,16 +9303,24 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 p3 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -6714,16 +9334,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 p3 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -6737,16 +9365,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 p3 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -6760,16 +9396,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 p3 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -6783,16 +9427,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 p3 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -6806,16 +9458,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 p3 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -6829,16 +9489,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 p3 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -6852,16 +9520,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 p3 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -6875,16 +9551,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p1 p3 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -6898,16 +9582,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -6921,16 +9613,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -6944,16 +9644,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -6967,16 +9675,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -6990,16 +9706,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7013,16 +9737,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7036,16 +9768,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7059,16 +9799,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7082,16 +9830,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7105,16 +9861,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7128,16 +9892,24 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7151,16 +9923,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7174,16 +9954,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7197,16 +9985,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7220,16 +10016,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7243,16 +10047,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 r2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7266,16 +10078,24 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 p1 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7289,16 +10109,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 p1 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7312,16 +10140,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 p1 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7335,16 +10171,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 p1 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7358,16 +10202,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 p1 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7381,16 +10233,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 p1 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7404,16 +10264,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 p1 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7427,16 +10295,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 p1 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7450,16 +10326,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 p1 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7473,16 +10357,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 c3 r2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7496,16 +10388,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 c3 r2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7519,16 +10419,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 c3 r2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7542,16 +10450,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 c3 r2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7565,16 +10481,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 c3 r2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7588,16 +10512,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 c3 r2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7611,16 +10543,24 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 c3 p1 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7634,16 +10574,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 c3 p1 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7657,16 +10605,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 c3 p1 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7680,16 +10636,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 w2 p3 c3 p1 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); @@ -7703,21 +10667,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 w2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -7728,21 +10702,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 w2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -7753,21 +10737,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 w2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -7778,21 +10772,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 w2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -7803,21 +10807,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 w2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -7828,21 +10842,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 w2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -7853,21 +10877,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 w2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -7878,21 +10912,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 p3 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -7903,21 +10947,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 p3 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -7928,21 +10982,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 p3 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -7953,21 +11017,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 p3 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -7978,21 +11052,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 p3 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -8003,21 +11087,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 p3 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -8028,21 +11122,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 p3 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -8053,21 +11157,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 p3 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -8078,21 +11192,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 r2 p3 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -8103,22 +11227,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 r2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -8128,22 +11262,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 r2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -8153,22 +11297,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 r2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -8178,22 +11332,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 r2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -8203,22 +11367,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 r2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -8228,22 +11402,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 r2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -8253,22 +11437,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 r2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -8278,16 +11472,24 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 p3 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8301,16 +11503,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 p3 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8324,16 +11534,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 p3 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8347,16 +11565,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 p3 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8370,16 +11596,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 p3 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8393,16 +11627,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 p3 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8416,16 +11658,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 p3 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8439,16 +11689,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 p3 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8462,16 +11720,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 w2 p3 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8485,22 +11751,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 r2 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -8510,22 +11786,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 r2 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -8535,22 +11821,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 r2 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -8560,22 +11856,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 r2 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -8585,22 +11891,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 r2 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -8610,22 +11926,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 r2 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -8635,22 +11961,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 r2 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -8660,22 +11996,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 r2 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -8685,22 +12031,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 r2 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step c1: COMMIT PREPARED 's1'; @@ -8710,16 +12066,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 w2 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8733,16 +12097,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 w2 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8756,16 +12128,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 w2 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8779,16 +12159,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 w2 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8802,16 +12190,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 w2 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8825,16 +12221,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 w2 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8848,16 +12252,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 w2 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8871,16 +12283,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 w2 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8894,16 +12314,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 w2 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -8917,23 +12345,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 c3 r2 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -8942,23 +12380,33 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 c3 r2 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -8967,23 +12415,33 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 c3 r2 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -8992,23 +12450,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 c3 r2 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c1: COMMIT PREPARED 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -9017,16 +12485,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 c3 w2 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -9040,16 +12516,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 c3 w2 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -9063,16 +12547,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 c3 w2 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -9086,16 +12578,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 c3 w2 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -9109,16 +12609,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 c3 c1 r2 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -9126,7 +12634,9 @@ step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step c1: COMMIT PREPARED 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9134,16 +12644,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p1 p3 c3 c1 w2 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -9157,21 +12675,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9182,21 +12710,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9207,21 +12745,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9232,21 +12780,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9257,21 +12815,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9282,21 +12850,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9307,21 +12885,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9332,21 +12920,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9357,21 +12955,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9382,21 +12990,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9407,21 +13025,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9432,21 +13060,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9457,21 +13095,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9482,21 +13130,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9507,21 +13165,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9532,21 +13200,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 w2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -9557,21 +13235,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 p1 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -9582,21 +13270,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 p1 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -9607,21 +13305,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 p1 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -9632,21 +13340,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 p1 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -9657,21 +13375,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 p1 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -9682,21 +13410,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 p1 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -9707,21 +13445,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 p1 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -9732,21 +13480,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 p1 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -9757,21 +13515,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 p1 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -9782,21 +13550,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 c3 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -9807,21 +13585,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 c3 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -9832,21 +13620,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 c3 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -9857,21 +13655,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 c3 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -9882,21 +13690,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 c3 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -9907,21 +13725,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 c3 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -9932,21 +13760,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 c3 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -9957,21 +13795,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 c3 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -9982,21 +13830,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 c3 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -10007,21 +13865,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 r2 c3 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -10032,16 +13900,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10055,16 +13931,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10078,16 +13962,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10101,16 +13993,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10124,16 +14024,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10147,16 +14055,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10170,16 +14086,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10193,16 +14117,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10216,16 +14148,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10239,16 +14179,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10262,16 +14210,24 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10285,16 +14241,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10308,16 +14272,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10331,16 +14303,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10354,16 +14334,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10377,16 +14365,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 r2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10400,16 +14396,24 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 p1 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10423,16 +14427,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 p1 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10446,16 +14458,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 p1 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10469,16 +14489,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 p1 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10492,16 +14520,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 p1 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10515,16 +14551,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 p1 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10538,16 +14582,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 p1 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10561,16 +14613,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 p1 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10584,16 +14644,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 p1 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10607,16 +14675,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 c3 r2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10630,16 +14706,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 c3 r2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10653,16 +14737,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 c3 r2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10676,16 +14768,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 c3 r2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10699,16 +14799,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 c3 r2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10722,16 +14830,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 c3 r2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10745,16 +14861,24 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 c3 p1 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10768,16 +14892,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 c3 p1 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10791,16 +14923,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 c3 p1 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10814,16 +14954,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 w2 c3 p1 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -10837,22 +14985,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 r2 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -10862,22 +15020,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 r2 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -10887,22 +15055,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 r2 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -10912,22 +15090,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 r2 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -10937,22 +15125,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 r2 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -10962,22 +15160,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 r2 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -10987,22 +15195,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 r2 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -11012,22 +15230,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 r2 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -11037,22 +15265,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 r2 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step c1: COMMIT PREPARED 's1'; @@ -11062,16 +15300,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 w2 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11085,16 +15331,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 w2 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11108,16 +15362,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 w2 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11131,16 +15393,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 w2 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11154,16 +15424,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 w2 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11177,16 +15455,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 w2 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11200,16 +15486,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 w2 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11223,16 +15517,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 w2 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11246,16 +15548,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 w2 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11269,23 +15579,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 c3 r2 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -11294,23 +15614,33 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 c3 r2 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -11319,23 +15649,33 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 c3 r2 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -11344,23 +15684,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 c3 r2 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c1: COMMIT PREPARED 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -11369,16 +15719,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 c3 w2 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11392,16 +15750,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 c3 w2 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11415,16 +15781,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 c3 w2 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11438,16 +15812,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 c3 w2 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11461,16 +15843,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 c3 c1 r2 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11478,7 +15868,9 @@ step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step c1: COMMIT PREPARED 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -11486,16 +15878,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 p1 c3 c1 w2 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11509,22 +15909,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 r2 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -11534,22 +15944,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 r2 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -11559,22 +15979,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 r2 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -11584,22 +16014,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 r2 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -11609,22 +16049,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 r2 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -11634,22 +16084,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 r2 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -11659,22 +16119,32 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 r2 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -11684,22 +16154,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 r2 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -11709,22 +16189,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 r2 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -11734,22 +16224,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 r2 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; @@ -11759,16 +16259,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 w2 r2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11782,16 +16290,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 w2 r2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11805,16 +16321,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 w2 r2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11828,16 +16352,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 w2 r2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11851,16 +16383,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 w2 r2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11874,16 +16414,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 w2 r2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11897,16 +16445,24 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 w2 p1 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11920,16 +16476,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 w2 p1 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11943,16 +16507,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 w2 p1 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11966,16 +16538,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 w2 p1 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -11989,23 +16569,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 p1 r2 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -12014,23 +16604,33 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 p1 r2 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -12039,23 +16639,33 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 p1 r2 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -12064,23 +16674,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 p1 r2 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c1: COMMIT PREPARED 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -12089,16 +16709,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 p1 w2 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -12112,16 +16740,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 p1 w2 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -12135,16 +16771,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 p1 w2 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -12158,16 +16802,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 p1 w2 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -12181,16 +16833,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 p1 c1 r2 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -12198,7 +16858,9 @@ step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -12206,16 +16868,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 w3 p3 c3 p1 c1 w2 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -12229,20 +16899,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 r2 w2 w3 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -12254,20 +16934,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 r2 w2 w3 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -12279,20 +16969,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 r2 w2 w3 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -12304,20 +17004,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 r2 w2 w3 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -12329,20 +17039,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 r2 w2 w3 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -12354,20 +17074,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 r2 w2 w3 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -12379,20 +17109,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 r2 w2 w3 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); @@ -12404,20 +17144,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 r2 w2 p2 w3 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -12429,20 +17179,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 r2 w2 p2 w3 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -12454,22 +17214,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 r2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -12479,22 +17249,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 r2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -12504,22 +17284,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 r2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -12529,22 +17319,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 r2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -12554,22 +17354,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 r2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -12579,22 +17389,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 r2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -12604,22 +17424,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 r2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -12629,16 +17459,24 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 p3 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -12652,16 +17490,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 p3 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -12675,16 +17521,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 p3 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -12698,16 +17552,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 p3 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -12721,16 +17583,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 p3 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -12744,16 +17614,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 p3 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -12767,16 +17645,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 p3 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -12790,16 +17676,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 p3 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -12813,16 +17707,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w2 w3 p3 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -12836,21 +17738,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 w2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -12861,21 +17773,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 w2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -12886,21 +17808,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 w2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -12911,21 +17843,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 w2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -12936,21 +17878,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 w2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -12961,21 +17913,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 w2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -12986,21 +17948,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 w2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -13011,21 +17983,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 p3 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -13036,21 +18018,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 p3 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -13061,21 +18053,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 p3 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -13086,21 +18088,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 p3 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -13111,21 +18123,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 p3 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -13136,21 +18158,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 p3 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -13161,21 +18193,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 p3 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -13186,21 +18228,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 p3 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -13211,21 +18263,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 r2 p3 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -13236,22 +18298,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 r2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -13261,22 +18333,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 r2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -13286,22 +18368,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 r2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -13311,22 +18403,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 r2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -13336,22 +18438,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 r2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -13361,22 +18473,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 r2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -13386,22 +18508,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 r2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -13411,16 +18543,24 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 p3 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13434,16 +18574,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 p3 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13457,16 +18605,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 p3 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13480,16 +18636,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 p3 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13503,16 +18667,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 p3 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13526,16 +18698,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 p3 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13549,16 +18729,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 p3 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13572,16 +18760,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 p3 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13595,16 +18791,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 w2 p3 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13618,22 +18822,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 r2 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -13643,22 +18857,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 r2 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -13668,22 +18892,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 r2 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -13693,22 +18927,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 r2 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -13718,22 +18962,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 r2 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -13743,22 +18997,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 r2 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -13768,22 +19032,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 r2 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -13793,22 +19067,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 r2 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -13818,22 +19102,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 r2 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step c1: COMMIT PREPARED 's1'; @@ -13843,16 +19137,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 w2 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13866,16 +19168,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 w2 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13889,16 +19199,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 w2 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13912,16 +19230,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 w2 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13935,16 +19261,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 w2 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13958,16 +19292,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 w2 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -13981,16 +19323,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 w2 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -14004,16 +19354,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 w2 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -14027,16 +19385,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 w2 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -14050,23 +19416,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 c3 r2 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -14075,23 +19451,33 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 c3 r2 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -14100,23 +19486,33 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 c3 r2 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -14125,23 +19521,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 c3 r2 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c1: COMMIT PREPARED 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -14150,16 +19556,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 c3 w2 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -14173,16 +19587,24 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 c3 w2 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -14196,16 +19618,24 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 c3 w2 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -14219,16 +19649,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 c3 w2 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -14242,16 +19680,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 c3 c1 r2 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -14259,7 +19705,9 @@ step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step c1: COMMIT PREPARED 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -14267,16 +19715,24 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: r1 p1 w3 p3 c3 c1 w2 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -14290,20 +19746,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p1 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -14315,20 +19781,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p1 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -14340,20 +19816,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p1 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -14365,20 +19851,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p1 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -14390,20 +19886,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p1 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -14415,20 +19921,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p1 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -14440,20 +19956,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p1 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -14465,20 +19991,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p2 p1 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p2: PREPARE TRANSACTION 's2'; @@ -14490,20 +20026,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p2 p1 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p2: PREPARE TRANSACTION 's2'; @@ -14515,20 +20061,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p2 p3 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p2: PREPARE TRANSACTION 's2'; @@ -14540,20 +20096,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p2 p3 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p2: PREPARE TRANSACTION 's2'; @@ -14565,20 +20131,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p2 p3 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p2: PREPARE TRANSACTION 's2'; @@ -14590,20 +20166,30 @@ step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p2 p3 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p2: PREPARE TRANSACTION 's2'; @@ -14615,20 +20201,30 @@ step p1: PREPARE TRANSACTION 's1'; step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p2 p3 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p2: PREPARE TRANSACTION 's2'; @@ -14640,20 +20236,30 @@ step c2: COMMIT PREPARED 's2'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14665,20 +20271,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14690,20 +20306,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14715,20 +20341,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14740,20 +20376,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14765,20 +20411,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14790,20 +20446,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14815,20 +20481,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14840,20 +20516,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14865,20 +20551,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14890,20 +20586,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14915,20 +20621,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14940,20 +20656,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14965,20 +20691,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -14990,20 +20726,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -15015,20 +20761,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 w3 p3 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -15040,20 +20796,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p1 w3 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -15065,20 +20831,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p1 w3 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -15090,20 +20866,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p1 w3 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -15115,20 +20901,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p1 w3 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -15140,20 +20936,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p1 w3 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -15165,20 +20971,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p1 w3 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -15190,20 +21006,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p1 w3 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -15215,20 +21041,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p1 p2 w3 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p2: PREPARE TRANSACTION 's2'; @@ -15240,20 +21076,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p1 p2 w3 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p2: PREPARE TRANSACTION 's2'; @@ -15265,20 +21111,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p2 w3 p1 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step w3: INSERT INTO test3 VALUES (3); @@ -15290,20 +21146,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p2 w3 p1 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step w3: INSERT INTO test3 VALUES (3); @@ -15315,20 +21181,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p2 w3 p3 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step w3: INSERT INTO test3 VALUES (3); @@ -15340,20 +21216,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p2 w3 p3 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step w3: INSERT INTO test3 VALUES (3); @@ -15365,20 +21251,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p2 w3 p3 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step w3: INSERT INTO test3 VALUES (3); @@ -15390,20 +21286,30 @@ step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p2 w3 p3 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step w3: INSERT INTO test3 VALUES (3); @@ -15415,20 +21321,30 @@ step p1: PREPARE TRANSACTION 's1'; step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p2 w3 p3 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step w3: INSERT INTO test3 VALUES (3); @@ -15440,20 +21356,30 @@ step c2: COMMIT PREPARED 's2'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p2 p1 w3 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p1: PREPARE TRANSACTION 's1'; @@ -15465,20 +21391,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 r2 p2 p1 w3 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p1: PREPARE TRANSACTION 's1'; @@ -15490,21 +21426,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p1 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p2: PREPARE TRANSACTION 's2'; @@ -15515,21 +21461,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p1 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p2: PREPARE TRANSACTION 's2'; @@ -15540,21 +21496,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p1 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -15565,21 +21531,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p1 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -15590,21 +21566,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p1 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -15615,21 +21601,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p1 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -15640,21 +21636,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p1 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -15665,21 +21671,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p2 p1 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p1: PREPARE TRANSACTION 's1'; @@ -15690,21 +21706,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p2 p1 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p1: PREPARE TRANSACTION 's1'; @@ -15715,21 +21741,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p2 p3 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -15740,21 +21776,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p2 p3 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -15765,21 +21811,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p2 p3 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -15790,21 +21846,31 @@ step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p2 p3 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -15815,21 +21881,31 @@ step p1: PREPARE TRANSACTION 's1'; step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p2 p3 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -15840,21 +21916,31 @@ step c2: COMMIT PREPARED 's2'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -15865,21 +21951,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -15890,21 +21986,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -15915,21 +22021,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -15940,21 +22056,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -15965,21 +22091,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -15990,21 +22126,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -16015,21 +22161,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -16040,21 +22196,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -16065,21 +22231,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -16090,21 +22266,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -16115,21 +22301,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -16140,21 +22336,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -16165,21 +22371,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -16190,21 +22406,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -16215,21 +22441,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 r2 p3 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -16240,22 +22476,32 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 r2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -16265,22 +22511,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 r2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -16290,22 +22546,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 r2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -16315,22 +22581,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 r2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -16340,22 +22616,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 r2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -16365,22 +22651,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 r2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -16390,22 +22686,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 r2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -16415,17 +22721,25 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 p3 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -16438,17 +22752,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 p3 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -16461,17 +22783,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 p3 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -16484,17 +22814,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 p3 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -16507,17 +22845,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 p3 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -16530,17 +22876,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 p3 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -16553,17 +22907,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 p3 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -16576,17 +22938,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 p3 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -16599,17 +22969,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p1 p3 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p1: PREPARE TRANSACTION 's1'; @@ -16622,17 +23000,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16645,17 +23031,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16668,17 +23062,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16691,17 +23093,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16714,17 +23124,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16737,17 +23155,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16760,17 +23186,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16783,17 +23217,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16806,17 +23248,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16829,17 +23279,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16852,17 +23310,25 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16875,17 +23341,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16898,17 +23372,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16921,17 +23403,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16944,17 +23434,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16967,17 +23465,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 r2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -16990,17 +23496,25 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 p1 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17013,17 +23527,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 p1 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17036,17 +23558,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 p1 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17059,17 +23589,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 p1 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17082,17 +23620,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 p1 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17105,17 +23651,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 p1 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17128,17 +23682,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 p1 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17151,17 +23713,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 p1 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17174,17 +23744,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 p1 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17197,17 +23775,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 c3 r2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17220,17 +23806,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 c3 r2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17243,17 +23837,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 c3 r2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17266,17 +23868,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 c3 r2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17289,17 +23899,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 c3 r2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17312,17 +23930,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 c3 r2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17335,17 +23961,25 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 c3 p1 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17358,17 +23992,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 c3 p1 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17381,17 +24023,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 c3 p1 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17404,17 +24054,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 w3 p3 c3 p1 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17427,21 +24085,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 r2 w3 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p2: PREPARE TRANSACTION 's2'; @@ -17452,21 +24120,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 r2 w3 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p2: PREPARE TRANSACTION 's2'; @@ -17477,21 +24155,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 r2 w3 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17502,21 +24190,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 r2 w3 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17527,21 +24225,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 r2 w3 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17552,21 +24260,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 r2 w3 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17577,21 +24295,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 r2 w3 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; @@ -17602,21 +24330,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 r2 p2 w3 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step w3: INSERT INTO test3 VALUES (3); @@ -17627,21 +24365,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 r2 p2 w3 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step w3: INSERT INTO test3 VALUES (3); @@ -17652,22 +24400,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 r2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -17677,22 +24435,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 r2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -17702,22 +24470,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 r2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -17727,22 +24505,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 r2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -17752,22 +24540,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 r2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -17777,22 +24575,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 r2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -17802,22 +24610,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 r2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -17827,17 +24645,25 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 p3 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -17850,17 +24676,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 p3 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -17873,17 +24707,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 p3 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -17896,17 +24738,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 p3 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -17919,17 +24769,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 p3 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -17942,17 +24800,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 p3 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -17965,17 +24831,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 p3 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -17988,17 +24862,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 p3 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -18011,17 +24893,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w2 r1 p1 w3 p3 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w3: INSERT INTO test3 VALUES (3); @@ -18034,20 +24924,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p1 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -18059,20 +24959,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p1 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -18084,20 +24994,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p1 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -18109,20 +25029,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p1 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -18134,20 +25064,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p1 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -18159,20 +25099,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p1 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -18184,20 +25134,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p1 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -18209,20 +25169,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p2 p1 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -18234,20 +25204,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p2 p1 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -18259,20 +25239,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p2 p3 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -18284,20 +25274,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p2 p3 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -18309,20 +25309,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p2 p3 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -18334,20 +25344,30 @@ step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p2 p3 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -18359,20 +25379,30 @@ step p1: PREPARE TRANSACTION 's1'; step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p2 p3 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -18384,20 +25414,30 @@ step c2: COMMIT PREPARED 's2'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18409,20 +25449,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18434,20 +25484,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18459,20 +25519,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18484,20 +25554,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18509,20 +25589,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18534,20 +25624,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18559,20 +25659,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18584,20 +25694,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18609,20 +25729,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18634,20 +25764,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18659,20 +25799,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18684,20 +25834,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18709,20 +25869,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18734,20 +25904,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18759,20 +25939,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 w2 p3 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -18784,20 +25974,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 w2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -18809,20 +26009,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 w2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -18834,20 +26044,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 w2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -18859,20 +26079,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 w2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -18884,20 +26114,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 w2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -18909,20 +26149,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 w2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -18934,20 +26184,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 w2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -18959,20 +26219,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 p3 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -18984,20 +26254,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 p3 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -19009,20 +26289,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 p3 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -19034,20 +26324,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 p3 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -19059,20 +26359,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 p3 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -19084,20 +26394,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 p3 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -19109,20 +26429,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 p3 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -19134,20 +26464,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 p3 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -19159,20 +26499,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p1 p3 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -19184,20 +26534,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19209,20 +26569,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19234,20 +26604,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19259,20 +26639,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19284,20 +26674,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19309,20 +26709,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19334,20 +26744,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19359,20 +26779,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19384,20 +26814,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19409,20 +26849,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19434,20 +26884,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19459,20 +26919,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19484,20 +26954,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19509,20 +26989,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19534,20 +27024,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19559,20 +27059,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 w2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -19584,20 +27094,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 p1 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -19609,20 +27129,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 p1 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -19634,20 +27164,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 p1 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -19659,20 +27199,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 p1 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -19684,20 +27234,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 p1 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -19709,20 +27269,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 p1 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -19734,20 +27304,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 p1 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -19759,20 +27339,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 p1 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -19784,20 +27374,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 p1 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -19809,20 +27409,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 c3 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -19834,20 +27444,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 c3 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -19859,20 +27479,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 c3 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -19884,20 +27514,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 c3 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -19909,20 +27549,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 c3 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -19934,20 +27584,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 c3 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -19959,20 +27619,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 c3 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -19984,20 +27654,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 c3 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -20009,20 +27689,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 c3 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -20034,20 +27724,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 r2 p3 c3 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -20059,21 +27759,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p1 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p2: PREPARE TRANSACTION 's2'; @@ -20084,21 +27794,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p1 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p2: PREPARE TRANSACTION 's2'; @@ -20109,21 +27829,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p1 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -20134,21 +27864,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p1 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -20159,21 +27899,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p1 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -20184,21 +27934,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p1 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -20209,21 +27969,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p1 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -20234,21 +28004,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p2 p1 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p1: PREPARE TRANSACTION 's1'; @@ -20259,21 +28039,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p2 p1 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p1: PREPARE TRANSACTION 's1'; @@ -20284,21 +28074,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p2 p3 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -20309,21 +28109,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p2 p3 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -20334,21 +28144,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p2 p3 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -20359,21 +28179,31 @@ step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p2 p3 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -20384,21 +28214,31 @@ step p1: PREPARE TRANSACTION 's1'; step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p2 p3 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -20409,21 +28249,31 @@ step c2: COMMIT PREPARED 's2'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -20434,21 +28284,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -20459,21 +28319,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -20484,21 +28354,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -20509,21 +28389,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -20534,21 +28424,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -20559,21 +28459,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -20584,21 +28494,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -20609,21 +28529,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -20634,21 +28564,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -20659,21 +28599,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -20684,21 +28634,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -20709,21 +28669,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -20734,21 +28704,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -20759,21 +28739,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -20784,21 +28774,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 r2 p3 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -20809,22 +28809,32 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 r2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -20834,22 +28844,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 r2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -20859,22 +28879,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 r2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -20884,22 +28914,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 r2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -20909,22 +28949,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 r2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -20934,22 +28984,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 r2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -20959,22 +29019,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 r2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -20984,17 +29054,25 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 p3 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -21007,17 +29085,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 p3 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -21030,17 +29116,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 p3 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -21053,17 +29147,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 p3 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -21076,17 +29178,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 p3 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -21099,17 +29209,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 p3 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -21122,17 +29240,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 p3 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -21145,17 +29271,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 p3 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -21168,17 +29302,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p1 p3 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -21191,17 +29333,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21214,17 +29364,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21237,17 +29395,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21260,17 +29426,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21283,17 +29457,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21306,17 +29488,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21329,17 +29519,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21352,17 +29550,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21375,17 +29581,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21398,17 +29612,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21421,17 +29643,25 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21444,17 +29674,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21467,17 +29705,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21490,17 +29736,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21513,17 +29767,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21536,17 +29798,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 r2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21559,17 +29829,25 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 p1 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21582,17 +29860,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 p1 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21605,17 +29891,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 p1 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21628,17 +29922,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 p1 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21651,17 +29953,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 p1 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21674,17 +29984,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 p1 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21697,17 +30015,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 p1 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21720,17 +30046,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 p1 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21743,17 +30077,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 p1 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21766,17 +30108,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 c3 r2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21789,17 +30139,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 c3 r2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21812,17 +30170,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 c3 r2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21835,17 +30201,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 c3 r2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21858,17 +30232,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 c3 r2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21881,17 +30263,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 c3 r2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21904,17 +30294,25 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 c3 p1 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21927,17 +30325,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 c3 p1 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21950,17 +30356,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 c3 p1 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21973,17 +30387,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 w2 p3 c3 p1 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -21996,21 +30418,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 w2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -22021,21 +30453,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 w2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -22046,21 +30488,31 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 w2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -22071,21 +30523,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 w2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -22096,21 +30558,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 w2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -22121,21 +30593,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 w2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -22146,21 +30628,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 w2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -22171,21 +30663,31 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 p3 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -22196,21 +30698,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 p3 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -22221,21 +30733,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 p3 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -22246,21 +30768,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 p3 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -22271,21 +30803,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 p3 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -22296,21 +30838,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 p3 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -22321,21 +30873,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 p3 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -22346,21 +30908,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 p3 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -22371,21 +30943,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 r2 p3 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -22396,22 +30978,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 r2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -22421,22 +31013,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 r2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p2: PREPARE TRANSACTION 's2'; step p3: PREPARE TRANSACTION 's3'; @@ -22446,22 +31048,32 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 r2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -22471,22 +31083,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 r2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p2: PREPARE TRANSACTION 's2'; @@ -22496,22 +31118,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 r2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -22521,22 +31153,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 r2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -22546,22 +31188,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 r2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -22571,17 +31223,25 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 p3 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -22594,17 +31254,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 p3 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -22617,17 +31285,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 p3 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -22640,17 +31316,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 p3 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -22663,17 +31347,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 p3 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -22686,17 +31378,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 p3 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -22709,17 +31409,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 p3 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -22732,17 +31440,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 p3 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -22755,17 +31471,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 w2 p3 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -22778,22 +31502,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 r2 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -22803,22 +31537,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 r2 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -22828,22 +31572,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 r2 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -22853,22 +31607,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 r2 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -22878,22 +31642,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 r2 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -22903,22 +31677,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 r2 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -22928,22 +31712,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 r2 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -22953,22 +31747,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 r2 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -22978,22 +31782,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 r2 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step c1: COMMIT PREPARED 's1'; @@ -23003,17 +31817,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 w2 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23026,17 +31848,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 w2 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23049,17 +31879,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 w2 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23072,17 +31910,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 w2 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23095,17 +31941,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 w2 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23118,17 +31972,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 w2 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23141,17 +32003,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 w2 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23164,17 +32034,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 w2 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23187,17 +32065,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 w2 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23210,23 +32096,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 c3 r2 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23235,23 +32131,33 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 c3 r2 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23260,23 +32166,33 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 c3 r2 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23285,23 +32201,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 c3 r2 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c1: COMMIT PREPARED 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -23310,17 +32236,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 c3 w2 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23333,17 +32267,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 c3 w2 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23356,17 +32298,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 c3 w2 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23379,17 +32329,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 c3 w2 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23402,24 +32360,34 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 c3 c1 r2 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step c1: COMMIT PREPARED 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23427,17 +32395,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p1 p3 c3 c1 w2 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -23450,21 +32426,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23475,21 +32461,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23500,21 +32496,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23525,21 +32531,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23550,21 +32566,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23575,21 +32601,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23600,21 +32636,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23625,21 +32671,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23650,21 +32706,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23675,21 +32741,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23700,21 +32776,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23725,21 +32811,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23750,21 +32846,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23775,21 +32881,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23800,21 +32916,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23825,21 +32951,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 w2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -23850,21 +32986,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 p1 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -23875,21 +33021,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 p1 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -23900,21 +33056,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 p1 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -23925,21 +33091,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 p1 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -23950,21 +33126,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 p1 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -23975,21 +33161,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 p1 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -24000,21 +33196,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 p1 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -24025,21 +33231,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 p1 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -24050,21 +33266,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 p1 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -24075,21 +33301,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 c3 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24100,21 +33336,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 c3 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24125,21 +33371,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 c3 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24150,21 +33406,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 c3 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24175,21 +33441,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 c3 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24200,21 +33476,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 c3 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24225,21 +33511,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 c3 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -24250,21 +33546,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 c3 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -24275,21 +33581,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 c3 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -24300,21 +33616,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 r2 c3 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -24325,17 +33651,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24348,17 +33682,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24371,17 +33713,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24394,17 +33744,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24417,17 +33775,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24440,17 +33806,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24463,17 +33837,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24486,17 +33868,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24509,17 +33899,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24532,17 +33930,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24555,17 +33961,25 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24578,17 +33992,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24601,17 +34023,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24624,17 +34054,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24647,17 +34085,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24670,17 +34116,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 r2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24693,17 +34147,25 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 p1 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24716,17 +34178,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 p1 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24739,17 +34209,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 p1 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24762,17 +34240,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 p1 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24785,17 +34271,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 p1 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24808,17 +34302,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 p1 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24831,17 +34333,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 p1 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24854,17 +34364,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 p1 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24877,17 +34395,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 p1 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24900,17 +34426,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 c3 r2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24923,17 +34457,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 c3 r2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24946,17 +34488,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 c3 r2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24969,17 +34519,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 c3 r2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -24992,17 +34550,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 c3 r2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -25015,17 +34581,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 c3 r2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -25038,17 +34612,25 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 c3 p1 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -25061,17 +34643,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 c3 p1 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -25084,17 +34674,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 c3 p1 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -25107,17 +34705,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 w2 c3 p1 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -25130,22 +34736,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 r2 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25155,22 +34771,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 r2 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25180,22 +34806,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 r2 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25205,22 +34841,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 r2 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25230,22 +34876,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 r2 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25255,22 +34911,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 r2 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -25280,22 +34946,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 r2 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -25305,22 +34981,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 r2 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -25330,22 +35016,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 r2 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step c1: COMMIT PREPARED 's1'; @@ -25355,17 +35051,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 w2 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25378,17 +35082,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 w2 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25401,17 +35113,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 w2 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25424,17 +35144,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 w2 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25447,17 +35175,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 w2 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25470,17 +35206,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 w2 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25493,17 +35237,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 w2 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25516,17 +35268,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 w2 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25539,17 +35299,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 w2 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25562,23 +35330,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 c3 r2 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25587,23 +35365,33 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 c3 r2 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25612,23 +35400,33 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 c3 r2 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25637,23 +35435,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 c3 r2 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c1: COMMIT PREPARED 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -25662,17 +35470,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 c3 w2 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25685,17 +35501,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 c3 w2 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25708,17 +35532,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 c3 w2 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25731,17 +35563,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 c3 w2 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25754,24 +35594,34 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 c3 c1 r2 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step c1: COMMIT PREPARED 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25779,17 +35629,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 p1 c3 c1 w2 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -25802,22 +35660,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 r2 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25827,22 +35695,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 r2 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25852,22 +35730,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 r2 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25877,22 +35765,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 r2 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25902,22 +35800,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 r2 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25927,22 +35835,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 r2 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -25952,22 +35870,32 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 r2 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -25977,22 +35905,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 r2 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -26002,22 +35940,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 r2 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -26027,22 +35975,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 r2 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; @@ -26052,17 +36010,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 w2 r2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26075,17 +36041,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 w2 r2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26098,17 +36072,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 w2 r2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26121,17 +36103,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 w2 r2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26144,17 +36134,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 w2 r2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26167,17 +36165,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 w2 r2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26190,17 +36196,25 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 w2 p1 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26213,17 +36227,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 w2 p1 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26236,17 +36258,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 w2 p1 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26259,17 +36289,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 w2 p1 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26282,23 +36320,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 p1 r2 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -26307,23 +36355,33 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 p1 r2 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -26332,23 +36390,33 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 p1 r2 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -26357,23 +36425,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 p1 r2 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c1: COMMIT PREPARED 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -26382,17 +36460,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 p1 w2 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26405,17 +36491,25 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 p1 w2 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26428,17 +36522,25 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 p1 w2 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26451,17 +36553,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 p1 w2 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26474,24 +36584,34 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 p1 c1 r2 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -26499,17 +36619,25 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r1 p3 c3 p1 c1 w2 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -26522,20 +36650,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p1 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -26547,20 +36685,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p1 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -26572,20 +36720,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p1 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -26597,20 +36755,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p1 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -26622,20 +36790,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p1 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -26647,20 +36825,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p1 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -26672,20 +36860,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p1 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -26697,20 +36895,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p2 p1 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -26722,20 +36930,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p2 p1 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -26747,20 +36965,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p2 p3 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -26772,20 +37000,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p2 p3 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -26797,20 +37035,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p2 p3 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -26822,20 +37070,30 @@ step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p2 p3 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -26847,20 +37105,30 @@ step p1: PREPARE TRANSACTION 's1'; step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p2 p3 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p2: PREPARE TRANSACTION 's2'; @@ -26872,20 +37140,30 @@ step c2: COMMIT PREPARED 's2'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -26897,20 +37175,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -26922,20 +37210,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -26947,20 +37245,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -26972,20 +37280,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -26997,20 +37315,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -27022,20 +37350,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -27047,20 +37385,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -27072,20 +37420,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -27097,20 +37455,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -27122,20 +37490,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -27147,20 +37525,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -27172,20 +37560,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -27197,20 +37595,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -27222,20 +37630,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -27247,20 +37665,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 w2 p3 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p3: PREPARE TRANSACTION 's3'; @@ -27272,20 +37700,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 w2 p2 p3 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -27297,20 +37735,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 w2 p2 p3 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -27322,20 +37770,30 @@ ERROR: prepared transaction with identifier "s3" does not exist step c2: COMMIT PREPARED 's2'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 w2 p3 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -27347,20 +37805,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 w2 p3 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -27372,20 +37840,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 w2 p3 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -27397,20 +37875,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 w2 p3 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -27422,20 +37910,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 w2 p3 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -27447,20 +37945,30 @@ ERROR: could not serialize access due to read/write dependencies among transact step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 p3 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -27472,20 +37980,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 p3 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -27497,20 +38015,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 p3 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -27522,20 +38050,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 p3 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -27547,20 +38085,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 p3 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -27572,20 +38120,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 p3 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -27597,20 +38155,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 p3 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -27622,20 +38190,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 p3 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -27647,20 +38225,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p1 p3 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step p3: PREPARE TRANSACTION 's3'; @@ -27672,20 +38260,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -27697,20 +38295,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -27722,20 +38330,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -27747,20 +38365,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -27772,20 +38400,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -27797,20 +38435,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -27822,20 +38470,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -27847,20 +38505,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -27872,20 +38540,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -27897,20 +38575,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -27922,20 +38610,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -27947,20 +38645,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -27972,20 +38680,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -27997,20 +38715,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -28022,20 +38750,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -28047,20 +38785,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 w2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -28072,20 +38820,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 p1 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -28097,20 +38855,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 p1 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -28122,20 +38890,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 p1 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -28147,20 +38925,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 p1 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -28172,20 +38960,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 p1 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -28197,20 +38995,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 p1 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -28222,20 +39030,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 p1 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -28247,20 +39065,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 p1 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -28272,20 +39100,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 p1 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -28297,20 +39135,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 c3 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -28322,20 +39170,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 c3 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -28347,20 +39205,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 c3 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -28372,20 +39240,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 c3 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -28397,20 +39275,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 c3 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -28422,20 +39310,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 c3 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -28447,20 +39345,30 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 c3 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -28472,20 +39380,30 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 c3 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -28497,20 +39415,30 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 c3 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -28522,20 +39450,30 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 r1 p3 c3 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; @@ -28547,21 +39485,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28572,21 +39520,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28597,21 +39555,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28622,21 +39590,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28647,21 +39625,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28672,21 +39660,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28697,21 +39695,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28722,21 +39730,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28747,21 +39765,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28772,21 +39800,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28797,21 +39835,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28822,21 +39870,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28847,21 +39905,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28872,21 +39940,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28897,21 +39975,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28922,21 +40010,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 w2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -28947,21 +40045,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 p1 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -28972,21 +40080,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 p1 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -28997,21 +40115,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 p1 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -29022,21 +40150,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 p1 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -29047,21 +40185,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 p1 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -29072,21 +40220,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 p1 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -29097,21 +40255,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 p1 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -29122,21 +40290,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 p1 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -29147,21 +40325,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 p1 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -29172,21 +40360,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 c3 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -29197,21 +40395,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 c3 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -29222,21 +40430,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 c3 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -29247,21 +40465,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 c3 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -29272,21 +40500,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 c3 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -29297,21 +40535,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 c3 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -29322,21 +40570,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 c3 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -29347,21 +40605,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 c3 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -29372,21 +40640,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 c3 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -29397,21 +40675,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 r1 c3 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -29422,22 +40710,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 c3 r1 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29447,22 +40745,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 c3 r1 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29472,22 +40780,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 c3 r1 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29497,22 +40815,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 c3 r1 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29522,22 +40850,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 c3 r1 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29547,22 +40885,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 c3 r1 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29572,22 +40920,32 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 c3 r1 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -29597,22 +40955,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 c3 r1 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -29622,22 +40990,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 c3 r1 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -29647,22 +41025,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 r2 p3 c3 r1 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; @@ -29672,21 +41060,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29697,21 +41095,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29722,21 +41130,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29747,21 +41165,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29772,21 +41200,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29797,21 +41235,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29822,21 +41270,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29847,21 +41305,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29872,21 +41340,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29897,21 +41375,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29922,21 +41410,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29947,21 +41445,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29972,21 +41480,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -29997,21 +41515,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -30022,21 +41550,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -30047,21 +41585,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 w2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -30072,21 +41620,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 p1 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -30097,21 +41655,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 p1 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -30122,21 +41690,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 p1 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -30147,21 +41725,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 p1 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -30172,21 +41760,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 p1 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -30197,21 +41795,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 p1 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -30222,21 +41830,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 p1 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -30247,21 +41865,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 p1 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -30272,21 +41900,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 p1 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -30297,21 +41935,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 c3 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -30322,21 +41970,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 c3 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -30347,21 +42005,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 c3 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -30372,21 +42040,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 c3 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -30397,21 +42075,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 c3 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -30422,21 +42110,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 c3 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -30447,21 +42145,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 c3 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -30472,21 +42180,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 c3 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -30497,21 +42215,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 c3 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -30522,21 +42250,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 r2 c3 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -30547,18 +42285,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30570,18 +42316,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30593,18 +42347,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30616,18 +42378,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30639,18 +42409,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30662,18 +42440,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30685,18 +42471,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30708,18 +42502,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30731,18 +42533,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30754,18 +42564,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30777,18 +42595,26 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30800,18 +42626,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30823,18 +42657,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30846,18 +42688,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30869,18 +42719,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30892,18 +42750,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 r2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -30915,18 +42781,26 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 p1 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -30938,18 +42812,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 p1 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -30961,18 +42843,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 p1 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -30984,18 +42874,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 p1 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -31007,18 +42905,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 p1 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -31030,18 +42936,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 p1 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -31053,18 +42967,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 p1 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -31076,18 +42998,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 p1 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -31099,18 +43029,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 p1 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -31122,18 +43060,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 c3 r2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step c3: COMMIT PREPARED 's3'; @@ -31145,18 +43091,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 c3 r2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step c3: COMMIT PREPARED 's3'; @@ -31168,18 +43122,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 c3 r2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step c3: COMMIT PREPARED 's3'; @@ -31191,18 +43153,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 c3 r2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step c3: COMMIT PREPARED 's3'; @@ -31214,18 +43184,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 c3 r2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step c3: COMMIT PREPARED 's3'; @@ -31237,18 +43215,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 c3 r2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step c3: COMMIT PREPARED 's3'; @@ -31260,18 +43246,26 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 c3 p1 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step c3: COMMIT PREPARED 's3'; @@ -31283,18 +43277,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 c3 p1 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step c3: COMMIT PREPARED 's3'; @@ -31306,18 +43308,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 c3 p1 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step c3: COMMIT PREPARED 's3'; @@ -31329,18 +43339,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 w2 c3 p1 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step c3: COMMIT PREPARED 's3'; @@ -31352,22 +43370,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 r2 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -31377,22 +43405,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 r2 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -31402,22 +43440,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 r2 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -31427,22 +43475,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 r2 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -31452,22 +43510,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 r2 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -31477,22 +43545,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 r2 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -31502,22 +43580,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 r2 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -31527,22 +43615,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 r2 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -31552,22 +43650,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 r2 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step c1: COMMIT PREPARED 's1'; @@ -31577,18 +43685,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 w2 r2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -31600,18 +43716,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 w2 r2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -31623,18 +43747,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 w2 r2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -31646,18 +43778,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 w2 r2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -31669,18 +43809,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 w2 r2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -31692,18 +43840,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 w2 c3 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -31715,18 +43871,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 w2 c3 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -31738,18 +43902,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 w2 c3 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -31761,18 +43933,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 w2 c3 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -31784,23 +43964,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 c3 r2 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -31809,23 +43999,33 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 c3 r2 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -31834,23 +44034,33 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 c3 r2 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -31859,23 +44069,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 c3 r2 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c1: COMMIT PREPARED 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -31884,18 +44104,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 c3 w2 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -31907,18 +44135,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 c3 w2 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -31930,18 +44166,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 c3 w2 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -31953,18 +44197,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 c3 w2 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -31976,24 +44228,34 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 c3 c1 r2 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; step c1: COMMIT PREPARED 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32001,18 +44263,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 p1 c3 c1 w2 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -32024,22 +44294,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 r2 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32049,22 +44329,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 r2 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32074,22 +44364,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 r2 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32099,22 +44399,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 r2 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32124,22 +44434,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 r2 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32149,22 +44469,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 r2 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32174,22 +44504,32 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 r2 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -32199,22 +44539,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 r2 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -32224,22 +44574,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 r2 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -32249,22 +44609,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 r2 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; @@ -32274,18 +44644,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 w2 r2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -32297,18 +44675,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 w2 r2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -32320,18 +44706,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 w2 r2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -32343,18 +44737,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 w2 r2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -32366,18 +44768,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 w2 r2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -32389,18 +44799,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 w2 r2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -32412,18 +44830,26 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 w2 p1 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -32435,18 +44861,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 w2 p1 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -32458,18 +44892,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 w2 p1 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -32481,18 +44923,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 w2 p1 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -32504,23 +44954,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 p1 r2 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32529,23 +44989,33 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 p1 r2 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32554,23 +45024,33 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 p1 r2 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32579,23 +45059,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 p1 r2 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c1: COMMIT PREPARED 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -32604,18 +45094,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 p1 w2 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -32627,18 +45125,26 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 p1 w2 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -32650,18 +45156,26 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 p1 w2 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -32673,18 +45187,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 p1 w2 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -32696,24 +45218,34 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 p1 c1 r2 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32721,18 +45253,26 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r1 c3 p1 c1 w2 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -32744,21 +45284,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 p1 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32769,21 +45319,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 p1 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32794,21 +45354,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 p1 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32819,21 +45389,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 p1 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32844,21 +45424,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 p1 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32869,21 +45459,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 p2 p1 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32894,21 +45494,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 p2 p1 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32919,21 +45529,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 p2 c3 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32944,21 +45564,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 p2 c3 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32969,21 +45599,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 p2 c3 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -32994,21 +45634,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 c3 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33019,21 +45669,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 c3 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33044,21 +45704,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 c3 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33069,21 +45739,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 c3 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33094,21 +45774,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 c3 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33119,21 +45809,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 w2 c3 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33144,21 +45844,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 p1 w2 p2 c3 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -33169,21 +45879,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 p1 w2 p2 c3 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -33194,21 +45914,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 p1 w2 c3 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -33219,21 +45949,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 p1 w2 c3 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -33244,21 +45984,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 p1 w2 c3 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -33269,21 +46019,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 p1 c3 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -33294,21 +46054,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 p1 c3 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -33319,21 +46089,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 p1 c3 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -33344,21 +46124,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 p1 c3 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c3: COMMIT PREPARED 's3'; @@ -33369,21 +46159,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 c3 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -33394,21 +46194,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 c3 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -33419,21 +46229,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 c3 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -33444,21 +46264,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 c3 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -33469,21 +46299,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 c3 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -33494,21 +46334,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 c3 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step w2: INSERT INTO test2 VALUES (2); @@ -33519,21 +46369,31 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 c3 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -33544,21 +46404,31 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 c3 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -33569,21 +46439,31 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 c3 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -33594,21 +46474,31 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 r1 c3 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step c3: COMMIT PREPARED 's3'; step p1: PREPARE TRANSACTION 's1'; @@ -33619,22 +46509,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 c3 r1 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33644,22 +46544,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 c3 r1 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33669,22 +46579,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 c3 r1 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33694,22 +46614,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 c3 r1 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33719,22 +46649,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 c3 r1 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33744,22 +46684,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 c3 r1 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33769,22 +46719,32 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 c3 r1 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -33794,22 +46754,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 c3 r1 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -33819,22 +46789,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 c3 r1 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -33844,22 +46824,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 r2 c3 r1 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; @@ -33869,22 +46859,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 r2 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33894,22 +46894,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 r2 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33919,22 +46929,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 r2 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33944,22 +46964,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 r2 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33969,22 +46999,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 r2 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -33994,22 +47034,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 r2 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -34019,22 +47069,32 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 r2 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -34044,22 +47104,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 r2 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -34069,22 +47139,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 r2 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -34094,22 +47174,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 r2 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step r2: SELECT * FROM test3; -c +c +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; @@ -34119,19 +47209,27 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 w2 r2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -34142,19 +47240,27 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 w2 r2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -34165,19 +47271,27 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 w2 r2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -34188,19 +47302,27 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 w2 r2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -34211,19 +47333,27 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 w2 r2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -34234,19 +47364,27 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 w2 r2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step r2: SELECT * FROM test3; @@ -34257,19 +47395,27 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 w2 p1 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -34280,19 +47426,27 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 w2 p1 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -34303,19 +47457,27 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 w2 p1 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -34326,19 +47488,27 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 w2 p1 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); step p1: PREPARE TRANSACTION 's1'; @@ -34349,23 +47519,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 p1 r2 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -34374,23 +47554,33 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 p1 r2 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -34399,23 +47589,33 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 p1 r2 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -34424,23 +47624,33 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 p1 r2 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step c1: COMMIT PREPARED 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -34449,19 +47659,27 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 p1 w2 r2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -34472,19 +47690,27 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 p1 w2 r2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -34495,19 +47721,27 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 p1 w2 r2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -34518,19 +47752,27 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 p1 w2 c1 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -34541,24 +47783,34 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 p1 c1 r2 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -34566,19 +47818,27 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r1 p1 c1 w2 r2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; @@ -34589,22 +47849,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r2 r1 w2 p1 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -34614,22 +47884,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r2 r1 w2 p1 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -34639,22 +47919,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r2 r1 w2 p1 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -34664,22 +47954,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r2 r1 w2 p2 p1 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -34689,22 +47989,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r2 r1 w2 p2 p1 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -34714,22 +48024,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r2 r1 w2 p2 c2 p1 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step w2: INSERT INTO test2 VALUES (2); ERROR: could not serialize access due to read/write dependencies among transactions @@ -34739,22 +48059,32 @@ ERROR: prepared transaction with identifier "s2" does not exist step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r2 r1 p1 w2 p2 c1 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -34764,22 +48094,32 @@ step c1: COMMIT PREPARED 's1'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r2 r1 p1 w2 p2 c2 c1 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -34789,22 +48129,32 @@ step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step c1: COMMIT PREPARED 's1'; step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r2 r1 p1 w2 c1 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step w2: INSERT INTO test2 VALUES (2); @@ -34814,22 +48164,32 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) starting permutation: w3 p3 c3 r2 r1 p1 c1 w2 p2 c2 check -a +a +- +(0 rows) -a +a +- +(0 rows) step w3: INSERT INTO test3 VALUES (3); step p3: PREPARE TRANSACTION 's3'; step c3: COMMIT PREPARED 's3'; step r2: SELECT * FROM test3; -c +c +- +(0 rows) step r1: SELECT * FROM test2; -b +b +- +(0 rows) step p1: PREPARE TRANSACTION 's1'; step c1: COMMIT PREPARED 's1'; @@ -34839,5 +48199,7 @@ step p2: PREPARE TRANSACTION 's2'; step c2: COMMIT PREPARED 's2'; ERROR: prepared transaction with identifier "s2" does not exist step check: SELECT * FROM test1,test2,test3; -a b c +a|b|c +-+-+- +(0 rows) diff --git a/src/test/isolation/expected/project-manager.out b/src/test/isolation/expected/project-manager.out index f85f5136ec3bf..902d188b70624 100644 --- a/src/test/isolation/expected/project-manager.out +++ b/src/test/isolation/expected/project-manager.out @@ -2,28 +2,36 @@ Parsed test spec with 2 sessions starting permutation: rx1 wy1 c1 ry2 wx2 c2 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step c1: COMMIT; step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 1 +(1 row) -1 step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step c2: COMMIT; starting permutation: rx1 wy1 ry2 c1 wx2 c2 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step c1: COMMIT; step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; ERROR: could not serialize access due to read/write dependencies among transactions @@ -31,14 +39,18 @@ step c2: COMMIT; starting permutation: rx1 wy1 ry2 wx2 c1 c2 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step c1: COMMIT; step c2: COMMIT; @@ -46,14 +58,18 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 wy1 ry2 wx2 c2 c1 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step c2: COMMIT; step c1: COMMIT; @@ -61,13 +77,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wy1 c1 wx2 c2 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step c1: COMMIT; step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; @@ -76,13 +96,17 @@ step c2: COMMIT; starting permutation: rx1 ry2 wy1 wx2 c1 c2 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step c1: COMMIT; @@ -91,13 +115,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wy1 wx2 c2 c1 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step c2: COMMIT; @@ -106,13 +134,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wx2 wy1 c1 c2 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step c1: COMMIT; @@ -121,13 +153,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wx2 wy1 c2 c1 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step c2: COMMIT; @@ -136,13 +172,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wx2 c2 wy1 c1 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step c2: COMMIT; step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); @@ -151,13 +191,17 @@ step c1: COMMIT; starting permutation: ry2 rx1 wy1 c1 wx2 c2 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step c1: COMMIT; step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; @@ -166,13 +210,17 @@ step c2: COMMIT; starting permutation: ry2 rx1 wy1 wx2 c1 c2 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step c1: COMMIT; @@ -181,13 +229,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 rx1 wy1 wx2 c2 c1 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step c2: COMMIT; @@ -196,13 +248,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 rx1 wx2 wy1 c1 c2 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step c1: COMMIT; @@ -211,13 +267,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 rx1 wx2 wy1 c2 c1 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step c2: COMMIT; @@ -226,13 +286,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 rx1 wx2 c2 wy1 c1 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step c2: COMMIT; step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); @@ -241,14 +305,18 @@ step c1: COMMIT; starting permutation: ry2 wx2 rx1 wy1 c1 c2 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step c1: COMMIT; step c2: COMMIT; @@ -256,14 +324,18 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 wx2 rx1 wy1 c2 c1 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step c2: COMMIT; step c1: COMMIT; @@ -271,14 +343,18 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 wx2 rx1 c2 wy1 c1 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 1 +(1 row) -1 step c2: COMMIT; step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); ERROR: could not serialize access due to read/write dependencies among transactions @@ -286,14 +362,18 @@ step c1: COMMIT; starting permutation: ry2 wx2 c2 rx1 wy1 c1 step ry2: SELECT count(*) FROM project WHERE project_manager = 1; -count +count +----- + 0 +(1 row) -0 step wx2: UPDATE person SET is_project_manager = false WHERE person_id = 1; step c2: COMMIT; step rx1: SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO project VALUES (101, 'Build Great Wall', 1); step c1: COMMIT; diff --git a/src/test/isolation/expected/read-only-anomaly-2.out b/src/test/isolation/expected/read-only-anomaly-2.out index f43aa6a2990ec..543ae89747e9d 100644 --- a/src/test/isolation/expected/read-only-anomaly-2.out +++ b/src/test/isolation/expected/read-only-anomaly-2.out @@ -2,17 +2,23 @@ Parsed test spec with 3 sessions starting permutation: s2rx s2ry s1ry s1wy s1c s2wx s2c s3c step s2rx: SELECT balance FROM bank_account WHERE id = 'X'; -balance +balance +------- + 0 +(1 row) -0 step s2ry: SELECT balance FROM bank_account WHERE id = 'Y'; -balance +balance +------- + 0 +(1 row) -0 step s1ry: SELECT balance FROM bank_account WHERE id = 'Y'; -balance +balance +------- + 0 +(1 row) -0 step s1wy: UPDATE bank_account SET balance = 20 WHERE id = 'Y'; step s1c: COMMIT; step s2wx: UPDATE bank_account SET balance = -11 WHERE id = 'X'; @@ -21,24 +27,32 @@ step s3c: COMMIT; starting permutation: s2rx s2ry s1ry s1wy s1c s3r s3c s2wx step s2rx: SELECT balance FROM bank_account WHERE id = 'X'; -balance +balance +------- + 0 +(1 row) -0 step s2ry: SELECT balance FROM bank_account WHERE id = 'Y'; -balance +balance +------- + 0 +(1 row) -0 step s1ry: SELECT balance FROM bank_account WHERE id = 'Y'; -balance +balance +------- + 0 +(1 row) -0 step s1wy: UPDATE bank_account SET balance = 20 WHERE id = 'Y'; step s1c: COMMIT; step s3r: SELECT id, balance FROM bank_account WHERE id IN ('X', 'Y') ORDER BY id; -id balance +id|balance +--+------- +X | 0 +Y | 20 +(2 rows) -X 0 -Y 20 step s3c: COMMIT; step s2wx: UPDATE bank_account SET balance = -11 WHERE id = 'X'; ERROR: could not serialize access due to read/write dependencies among transactions diff --git a/src/test/isolation/expected/read-only-anomaly-3.out b/src/test/isolation/expected/read-only-anomaly-3.out index 1c10ad7ebfe02..4f7d3f863d606 100644 --- a/src/test/isolation/expected/read-only-anomaly-3.out +++ b/src/test/isolation/expected/read-only-anomaly-3.out @@ -2,25 +2,33 @@ Parsed test spec with 3 sessions starting permutation: s2rx s2ry s1ry s1wy s1c s3r s2wx s2c s3c step s2rx: SELECT balance FROM bank_account WHERE id = 'X'; -balance +balance +------- + 0 +(1 row) -0 step s2ry: SELECT balance FROM bank_account WHERE id = 'Y'; -balance +balance +------- + 0 +(1 row) -0 step s1ry: SELECT balance FROM bank_account WHERE id = 'Y'; -balance +balance +------- + 0 +(1 row) -0 step s1wy: UPDATE bank_account SET balance = 20 WHERE id = 'Y'; step s1c: COMMIT; step s3r: SELECT id, balance FROM bank_account WHERE id IN ('X', 'Y') ORDER BY id; step s2wx: UPDATE bank_account SET balance = -11 WHERE id = 'X'; step s2c: COMMIT; step s3r: <... completed> -id balance +id|balance +--+------- +X | -11 +Y | 20 +(2 rows) -X -11 -Y 20 step s3c: COMMIT; diff --git a/src/test/isolation/expected/read-only-anomaly.out b/src/test/isolation/expected/read-only-anomaly.out index d40425df28cd6..96df5e2db5a12 100644 --- a/src/test/isolation/expected/read-only-anomaly.out +++ b/src/test/isolation/expected/read-only-anomaly.out @@ -2,24 +2,32 @@ Parsed test spec with 3 sessions starting permutation: s2rx s2ry s1ry s1wy s1c s3r s2wx s2c s3c step s2rx: SELECT balance FROM bank_account WHERE id = 'X'; -balance +balance +------- + 0 +(1 row) -0 step s2ry: SELECT balance FROM bank_account WHERE id = 'Y'; -balance +balance +------- + 0 +(1 row) -0 step s1ry: SELECT balance FROM bank_account WHERE id = 'Y'; -balance +balance +------- + 0 +(1 row) -0 step s1wy: UPDATE bank_account SET balance = 20 WHERE id = 'Y'; step s1c: COMMIT; step s3r: SELECT id, balance FROM bank_account WHERE id IN ('X', 'Y') ORDER BY id; -id balance +id|balance +--+------- +X | 0 +Y | 20 +(2 rows) -X 0 -Y 20 step s2wx: UPDATE bank_account SET balance = -11 WHERE id = 'X'; step s2c: COMMIT; step s3c: COMMIT; diff --git a/src/test/isolation/expected/read-write-unique-2.out b/src/test/isolation/expected/read-write-unique-2.out index a36ae3a97c46e..13b7cdc0979f8 100644 --- a/src/test/isolation/expected/read-write-unique-2.out +++ b/src/test/isolation/expected/read-write-unique-2.out @@ -2,10 +2,14 @@ Parsed test spec with 2 sessions starting permutation: r1 r2 w1 w2 c1 c2 step r1: SELECT * FROM test WHERE i = 42; -i +i +- +(0 rows) step r2: SELECT * FROM test WHERE i = 42; -i +i +- +(0 rows) step w1: INSERT INTO test VALUES (42); step w2: INSERT INTO test VALUES (42); @@ -16,14 +20,18 @@ step c2: COMMIT; starting permutation: r1 w1 c1 r2 w2 c2 step r1: SELECT * FROM test WHERE i = 42; -i +i +- +(0 rows) step w1: INSERT INTO test VALUES (42); step c1: COMMIT; step r2: SELECT * FROM test WHERE i = 42; -i + i +-- +42 +(1 row) -42 step w2: INSERT INTO test VALUES (42); ERROR: duplicate key value violates unique constraint "test_pkey" step c2: COMMIT; diff --git a/src/test/isolation/expected/read-write-unique-3.out b/src/test/isolation/expected/read-write-unique-3.out index 5b308de981e55..7735d5e1a56ae 100644 --- a/src/test/isolation/expected/read-write-unique-3.out +++ b/src/test/isolation/expected/read-write-unique-3.out @@ -2,9 +2,11 @@ Parsed test spec with 2 sessions starting permutation: rw1 rw2 c1 c2 step rw1: SELECT insert_unique(1, '1'); -insert_unique +insert_unique +------------- + +(1 row) - step rw2: SELECT insert_unique(1, '2'); step c1: COMMIT; step rw2: <... completed> diff --git a/src/test/isolation/expected/read-write-unique-4.out b/src/test/isolation/expected/read-write-unique-4.out index 5f36837702f2e..aa96530268341 100644 --- a/src/test/isolation/expected/read-write-unique-4.out +++ b/src/test/isolation/expected/read-write-unique-4.out @@ -2,13 +2,17 @@ Parsed test spec with 2 sessions starting permutation: r1 r2 w1 w2 c1 c2 step r1: SELECT COALESCE(MAX(invoice_number) + 1, 1) FROM invoice WHERE year = 2016; -coalesce +coalesce +-------- + 3 +(1 row) -3 step r2: SELECT COALESCE(MAX(invoice_number) + 1, 1) FROM invoice WHERE year = 2016; -coalesce +coalesce +-------- + 3 +(1 row) -3 step w1: INSERT INTO invoice VALUES (2016, 3); step w2: INSERT INTO invoice VALUES (2016, 3); step c1: COMMIT; @@ -18,9 +22,11 @@ step c2: COMMIT; starting permutation: r1 w1 w2 c1 c2 step r1: SELECT COALESCE(MAX(invoice_number) + 1, 1) FROM invoice WHERE year = 2016; -coalesce +coalesce +-------- + 3 +(1 row) -3 step w1: INSERT INTO invoice VALUES (2016, 3); step w2: INSERT INTO invoice VALUES (2016, 3); step c1: COMMIT; @@ -30,9 +36,11 @@ step c2: COMMIT; starting permutation: r2 w1 w2 c1 c2 step r2: SELECT COALESCE(MAX(invoice_number) + 1, 1) FROM invoice WHERE year = 2016; -coalesce +coalesce +-------- + 3 +(1 row) -3 step w1: INSERT INTO invoice VALUES (2016, 3); step w2: INSERT INTO invoice VALUES (2016, 3); step c1: COMMIT; diff --git a/src/test/isolation/expected/read-write-unique.out b/src/test/isolation/expected/read-write-unique.out index b438674230dbc..2abecc61075cd 100644 --- a/src/test/isolation/expected/read-write-unique.out +++ b/src/test/isolation/expected/read-write-unique.out @@ -2,10 +2,14 @@ Parsed test spec with 2 sessions starting permutation: r1 r2 w1 w2 c1 c2 step r1: SELECT * FROM test; -i +i +- +(0 rows) step r2: SELECT * FROM test; -i +i +- +(0 rows) step w1: INSERT INTO test VALUES (42); step w2: INSERT INTO test VALUES (42); @@ -16,14 +20,18 @@ step c2: COMMIT; starting permutation: r1 w1 c1 r2 w2 c2 step r1: SELECT * FROM test; -i +i +- +(0 rows) step w1: INSERT INTO test VALUES (42); step c1: COMMIT; step r2: SELECT * FROM test; -i + i +-- +42 +(1 row) -42 step w2: INSERT INTO test VALUES (42); ERROR: duplicate key value violates unique constraint "test_pkey" step c2: COMMIT; diff --git a/src/test/isolation/expected/receipt-report.out b/src/test/isolation/expected/receipt-report.out index bc68d676a012b..1f2501815f47b 100644 --- a/src/test/isolation/expected/receipt-report.out +++ b/src/test/isolation/expected/receipt-report.out @@ -6,15 +6,19 @@ step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; starting permutation: rxwy1 c1 wx2 rx3 c2 ry3 c3 @@ -22,16 +26,20 @@ step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; starting permutation: rxwy1 c1 wx2 rx3 ry3 c2 c3 @@ -39,15 +47,19 @@ step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c2: COMMIT; step c3: COMMIT; @@ -56,15 +68,19 @@ step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; step c2: COMMIT; @@ -72,33 +88,41 @@ starting permutation: rxwy1 c1 rx3 wx2 c2 ry3 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; starting permutation: rxwy1 c1 rx3 wx2 ry3 c2 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c2: COMMIT; step c3: COMMIT; @@ -106,16 +130,20 @@ starting permutation: rxwy1 c1 rx3 wx2 ry3 c3 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; step c2: COMMIT; @@ -123,15 +151,19 @@ starting permutation: rxwy1 c1 rx3 ry3 wx2 c2 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step c3: COMMIT; @@ -140,15 +172,19 @@ starting permutation: rxwy1 c1 rx3 ry3 wx2 c3 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; step c2: COMMIT; @@ -157,15 +193,19 @@ starting permutation: rxwy1 c1 rx3 ry3 c3 wx2 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; @@ -176,15 +216,19 @@ step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; starting permutation: rxwy1 wx2 c1 rx3 c2 ry3 c3 @@ -192,16 +236,20 @@ step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; starting permutation: rxwy1 wx2 c1 rx3 ry3 c2 c3 @@ -209,15 +257,19 @@ step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c2: COMMIT; step c3: COMMIT; @@ -226,15 +278,19 @@ step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; step c2: COMMIT; @@ -244,15 +300,19 @@ step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; starting permutation: rxwy1 wx2 c2 rx3 c1 ry3 c3 @@ -260,9 +320,11 @@ step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; ERROR: could not serialize access due to read/write dependencies among transactions @@ -273,14 +335,18 @@ step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions step c3: COMMIT; @@ -290,14 +356,18 @@ step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -306,31 +376,39 @@ starting permutation: rxwy1 wx2 rx3 c1 c2 ry3 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c1: COMMIT; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: rxwy1 wx2 rx3 c1 ry3 c2 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; @@ -338,15 +416,19 @@ starting permutation: rxwy1 wx2 rx3 c1 ry3 c3 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; @@ -354,31 +436,39 @@ starting permutation: rxwy1 wx2 rx3 c2 c1 ry3 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: rxwy1 wx2 rx3 c2 ry3 c1 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; @@ -386,15 +476,19 @@ starting permutation: rxwy1 wx2 rx3 c2 ry3 c3 c1 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; @@ -402,14 +496,18 @@ starting permutation: rxwy1 wx2 rx3 ry3 c1 c2 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c2: COMMIT; step c3: COMMIT; @@ -418,14 +516,18 @@ starting permutation: rxwy1 wx2 rx3 ry3 c1 c3 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; step c2: COMMIT; @@ -434,14 +536,18 @@ starting permutation: rxwy1 wx2 rx3 ry3 c2 c1 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c1: COMMIT; step c3: COMMIT; @@ -450,14 +556,18 @@ starting permutation: rxwy1 wx2 rx3 ry3 c2 c3 c1 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; step c1: COMMIT; @@ -466,14 +576,18 @@ starting permutation: rxwy1 wx2 rx3 ry3 c3 c1 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; step c2: COMMIT; @@ -482,14 +596,18 @@ starting permutation: rxwy1 wx2 rx3 ry3 c3 c2 c1 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; step c1: COMMIT; @@ -497,63 +615,79 @@ step c1: COMMIT; starting permutation: rxwy1 rx3 c1 wx2 c2 ry3 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: rxwy1 rx3 c1 wx2 ry3 c2 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; starting permutation: rxwy1 rx3 c1 wx2 ry3 c3 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; starting permutation: rxwy1 rx3 c1 ry3 wx2 c2 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step c3: COMMIT; @@ -561,15 +695,19 @@ step c3: COMMIT; starting permutation: rxwy1 rx3 c1 ry3 wx2 c3 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; step c2: COMMIT; @@ -577,15 +715,19 @@ step c2: COMMIT; starting permutation: rxwy1 rx3 c1 ry3 c3 wx2 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; @@ -593,111 +735,139 @@ step c2: COMMIT; starting permutation: rxwy1 rx3 wx2 c1 c2 ry3 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: rxwy1 rx3 wx2 c1 ry3 c2 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; starting permutation: rxwy1 rx3 wx2 c1 ry3 c3 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; starting permutation: rxwy1 rx3 wx2 c2 c1 ry3 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: rxwy1 rx3 wx2 c2 ry3 c1 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; starting permutation: rxwy1 rx3 wx2 c2 ry3 c3 c1 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; starting permutation: rxwy1 rx3 wx2 ry3 c1 c2 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c2: COMMIT; step c3: COMMIT; @@ -705,15 +875,19 @@ step c3: COMMIT; starting permutation: rxwy1 rx3 wx2 ry3 c1 c3 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; step c2: COMMIT; @@ -721,15 +895,19 @@ step c2: COMMIT; starting permutation: rxwy1 rx3 wx2 ry3 c2 c1 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c1: COMMIT; step c3: COMMIT; @@ -737,15 +915,19 @@ step c3: COMMIT; starting permutation: rxwy1 rx3 wx2 ry3 c2 c3 c1 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; step c1: COMMIT; @@ -753,15 +935,19 @@ step c1: COMMIT; starting permutation: rxwy1 rx3 wx2 ry3 c3 c1 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; step c2: COMMIT; @@ -769,15 +955,19 @@ step c2: COMMIT; starting permutation: rxwy1 rx3 wx2 ry3 c3 c2 c1 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; step c1: COMMIT; @@ -785,14 +975,18 @@ step c1: COMMIT; starting permutation: rxwy1 rx3 ry3 c1 wx2 c2 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; @@ -801,14 +995,18 @@ step c3: COMMIT; starting permutation: rxwy1 rx3 ry3 c1 wx2 c3 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; @@ -817,14 +1015,18 @@ step c2: COMMIT; starting permutation: rxwy1 rx3 ry3 c1 c3 wx2 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; @@ -833,14 +1035,18 @@ step c2: COMMIT; starting permutation: rxwy1 rx3 ry3 wx2 c1 c2 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step c2: COMMIT; @@ -849,14 +1055,18 @@ step c3: COMMIT; starting permutation: rxwy1 rx3 ry3 wx2 c1 c3 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step c3: COMMIT; @@ -865,14 +1075,18 @@ step c2: COMMIT; starting permutation: rxwy1 rx3 ry3 wx2 c2 c1 c3 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step c1: COMMIT; @@ -881,14 +1095,18 @@ step c3: COMMIT; starting permutation: rxwy1 rx3 ry3 wx2 c2 c3 c1 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step c3: COMMIT; @@ -897,14 +1115,18 @@ step c1: COMMIT; starting permutation: rxwy1 rx3 ry3 wx2 c3 c1 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; step c1: COMMIT; @@ -913,14 +1135,18 @@ step c2: COMMIT; starting permutation: rxwy1 rx3 ry3 wx2 c3 c2 c1 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; step c2: COMMIT; @@ -929,14 +1155,18 @@ step c1: COMMIT; starting permutation: rxwy1 rx3 ry3 c3 c1 wx2 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; @@ -945,14 +1175,18 @@ step c2: COMMIT; starting permutation: rxwy1 rx3 ry3 c3 wx2 c1 c2 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; @@ -961,14 +1195,18 @@ step c2: COMMIT; starting permutation: rxwy1 rx3 ry3 c3 wx2 c2 c1 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; @@ -980,15 +1218,19 @@ step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k step c1: COMMIT; step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; starting permutation: wx2 rxwy1 c1 rx3 c2 ry3 c3 @@ -996,16 +1238,20 @@ step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; starting permutation: wx2 rxwy1 c1 rx3 ry3 c2 c3 @@ -1013,15 +1259,19 @@ step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c2: COMMIT; step c3: COMMIT; @@ -1030,15 +1280,19 @@ step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; step c2: COMMIT; @@ -1048,15 +1302,19 @@ step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k step c2: COMMIT; step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 + 3| 12-22-2008| 4.00 +(3 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 -3 12-22-2008 4.00 step c3: COMMIT; starting permutation: wx2 rxwy1 c2 rx3 c1 ry3 c3 @@ -1064,9 +1322,11 @@ step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; ERROR: could not serialize access due to read/write dependencies among transactions @@ -1077,14 +1337,18 @@ step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions step c3: COMMIT; @@ -1094,14 +1358,18 @@ step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -1110,31 +1378,39 @@ starting permutation: wx2 rxwy1 rx3 c1 c2 ry3 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c1: COMMIT; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: wx2 rxwy1 rx3 c1 ry3 c2 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; @@ -1142,15 +1418,19 @@ starting permutation: wx2 rxwy1 rx3 c1 ry3 c3 c2 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; @@ -1158,31 +1438,39 @@ starting permutation: wx2 rxwy1 rx3 c2 c1 ry3 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: wx2 rxwy1 rx3 c2 ry3 c1 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; @@ -1190,15 +1478,19 @@ starting permutation: wx2 rxwy1 rx3 c2 ry3 c3 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; @@ -1206,14 +1498,18 @@ starting permutation: wx2 rxwy1 rx3 ry3 c1 c2 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c2: COMMIT; step c3: COMMIT; @@ -1222,14 +1518,18 @@ starting permutation: wx2 rxwy1 rx3 ry3 c1 c3 c2 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; step c2: COMMIT; @@ -1238,14 +1538,18 @@ starting permutation: wx2 rxwy1 rx3 ry3 c2 c1 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c1: COMMIT; step c3: COMMIT; @@ -1254,14 +1558,18 @@ starting permutation: wx2 rxwy1 rx3 ry3 c2 c3 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; step c1: COMMIT; @@ -1270,14 +1578,18 @@ starting permutation: wx2 rxwy1 rx3 ry3 c3 c1 c2 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; step c2: COMMIT; @@ -1286,14 +1598,18 @@ starting permutation: wx2 rxwy1 rx3 ry3 c3 c2 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; step c1: COMMIT; @@ -1304,14 +1620,18 @@ step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: wx2 c2 rxwy1 rx3 c1 ry3 c3 @@ -1319,15 +1639,19 @@ step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: wx2 c2 rxwy1 rx3 ry3 c1 c3 @@ -1335,14 +1659,18 @@ step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; @@ -1351,14 +1679,18 @@ step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; @@ -1366,31 +1698,39 @@ starting permutation: wx2 c2 rx3 rxwy1 c1 ry3 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: wx2 c2 rx3 rxwy1 ry3 c1 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; @@ -1398,15 +1738,19 @@ starting permutation: wx2 c2 rx3 rxwy1 ry3 c3 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; @@ -1414,14 +1758,18 @@ starting permutation: wx2 c2 rx3 ry3 rxwy1 c1 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step c3: COMMIT; @@ -1430,14 +1778,18 @@ starting permutation: wx2 c2 rx3 ry3 rxwy1 c3 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; step c1: COMMIT; @@ -1446,14 +1798,18 @@ starting permutation: wx2 c2 rx3 ry3 c3 rxwy1 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-23-2008 +(1 row) -receipt 12-23-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; @@ -1461,111 +1817,139 @@ step c1: COMMIT; starting permutation: wx2 rx3 rxwy1 c1 c2 ry3 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: wx2 rx3 rxwy1 c1 ry3 c2 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; starting permutation: wx2 rx3 rxwy1 c1 ry3 c3 c2 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; starting permutation: wx2 rx3 rxwy1 c2 c1 ry3 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: wx2 rx3 rxwy1 c2 ry3 c1 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; starting permutation: wx2 rx3 rxwy1 c2 ry3 c3 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; starting permutation: wx2 rx3 rxwy1 ry3 c1 c2 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c2: COMMIT; step c3: COMMIT; @@ -1573,15 +1957,19 @@ step c3: COMMIT; starting permutation: wx2 rx3 rxwy1 ry3 c1 c3 c2 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; step c2: COMMIT; @@ -1589,15 +1977,19 @@ step c2: COMMIT; starting permutation: wx2 rx3 rxwy1 ry3 c2 c1 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c1: COMMIT; step c3: COMMIT; @@ -1605,15 +1997,19 @@ step c3: COMMIT; starting permutation: wx2 rx3 rxwy1 ry3 c2 c3 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; step c1: COMMIT; @@ -1621,15 +2017,19 @@ step c1: COMMIT; starting permutation: wx2 rx3 rxwy1 ry3 c3 c1 c2 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; step c2: COMMIT; @@ -1637,15 +2037,19 @@ step c2: COMMIT; starting permutation: wx2 rx3 rxwy1 ry3 c3 c2 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; step c1: COMMIT; @@ -1653,63 +2057,79 @@ step c1: COMMIT; starting permutation: wx2 rx3 c2 rxwy1 c1 ry3 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: wx2 rx3 c2 rxwy1 ry3 c1 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; starting permutation: wx2 rx3 c2 rxwy1 ry3 c3 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; starting permutation: wx2 rx3 c2 ry3 rxwy1 c1 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step c3: COMMIT; @@ -1717,15 +2137,19 @@ step c3: COMMIT; starting permutation: wx2 rx3 c2 ry3 rxwy1 c3 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; step c1: COMMIT; @@ -1733,15 +2157,19 @@ step c1: COMMIT; starting permutation: wx2 rx3 c2 ry3 c3 rxwy1 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; @@ -1749,14 +2177,18 @@ step c1: COMMIT; starting permutation: wx2 rx3 ry3 rxwy1 c1 c2 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step c2: COMMIT; @@ -1765,14 +2197,18 @@ step c3: COMMIT; starting permutation: wx2 rx3 ry3 rxwy1 c1 c3 c2 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step c3: COMMIT; @@ -1781,14 +2217,18 @@ step c2: COMMIT; starting permutation: wx2 rx3 ry3 rxwy1 c2 c1 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; step c1: COMMIT; @@ -1797,14 +2237,18 @@ step c3: COMMIT; starting permutation: wx2 rx3 ry3 rxwy1 c2 c3 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; step c3: COMMIT; @@ -1813,14 +2257,18 @@ step c1: COMMIT; starting permutation: wx2 rx3 ry3 rxwy1 c3 c1 c2 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; step c1: COMMIT; @@ -1829,14 +2277,18 @@ step c2: COMMIT; starting permutation: wx2 rx3 ry3 rxwy1 c3 c2 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; step c2: COMMIT; @@ -1845,14 +2297,18 @@ step c1: COMMIT; starting permutation: wx2 rx3 ry3 c2 rxwy1 c1 c3 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; @@ -1861,14 +2317,18 @@ step c3: COMMIT; starting permutation: wx2 rx3 ry3 c2 rxwy1 c3 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; @@ -1877,14 +2337,18 @@ step c1: COMMIT; starting permutation: wx2 rx3 ry3 c2 c3 rxwy1 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); @@ -1893,14 +2357,18 @@ step c1: COMMIT; starting permutation: wx2 rx3 ry3 c3 rxwy1 c1 c2 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; @@ -1909,14 +2377,18 @@ step c2: COMMIT; starting permutation: wx2 rx3 ry3 c3 rxwy1 c2 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; @@ -1925,14 +2397,18 @@ step c1: COMMIT; starting permutation: wx2 rx3 ry3 c3 c2 rxwy1 c1 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); @@ -1940,303 +2416,379 @@ step c1: COMMIT; starting permutation: rx3 rxwy1 c1 wx2 c2 ry3 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: rx3 rxwy1 c1 wx2 ry3 c2 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; starting permutation: rx3 rxwy1 c1 wx2 ry3 c3 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; starting permutation: rx3 rxwy1 c1 ry3 wx2 c2 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step c3: COMMIT; starting permutation: rx3 rxwy1 c1 ry3 wx2 c3 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; step c2: COMMIT; starting permutation: rx3 rxwy1 c1 ry3 c3 wx2 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; starting permutation: rx3 rxwy1 wx2 c1 c2 ry3 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: rx3 rxwy1 wx2 c1 ry3 c2 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; starting permutation: rx3 rxwy1 wx2 c1 ry3 c3 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; starting permutation: rx3 rxwy1 wx2 c2 c1 ry3 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: rx3 rxwy1 wx2 c2 ry3 c1 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; starting permutation: rx3 rxwy1 wx2 c2 ry3 c3 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; starting permutation: rx3 rxwy1 wx2 ry3 c1 c2 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c2: COMMIT; step c3: COMMIT; starting permutation: rx3 rxwy1 wx2 ry3 c1 c3 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; step c2: COMMIT; starting permutation: rx3 rxwy1 wx2 ry3 c2 c1 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c1: COMMIT; step c3: COMMIT; starting permutation: rx3 rxwy1 wx2 ry3 c2 c3 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; step c1: COMMIT; starting permutation: rx3 rxwy1 wx2 ry3 c3 c1 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; step c2: COMMIT; starting permutation: rx3 rxwy1 wx2 ry3 c3 c2 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; step c1: COMMIT; starting permutation: rx3 rxwy1 ry3 c1 wx2 c2 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; @@ -2244,15 +2796,19 @@ step c3: COMMIT; starting permutation: rx3 rxwy1 ry3 c1 wx2 c3 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; @@ -2260,15 +2816,19 @@ step c2: COMMIT; starting permutation: rx3 rxwy1 ry3 c1 c3 wx2 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; @@ -2276,15 +2836,19 @@ step c2: COMMIT; starting permutation: rx3 rxwy1 ry3 wx2 c1 c2 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step c2: COMMIT; @@ -2292,15 +2856,19 @@ step c3: COMMIT; starting permutation: rx3 rxwy1 ry3 wx2 c1 c3 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; step c3: COMMIT; @@ -2308,15 +2876,19 @@ step c2: COMMIT; starting permutation: rx3 rxwy1 ry3 wx2 c2 c1 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step c1: COMMIT; @@ -2324,15 +2896,19 @@ step c3: COMMIT; starting permutation: rx3 rxwy1 ry3 wx2 c2 c3 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step c3: COMMIT; @@ -2340,15 +2916,19 @@ step c1: COMMIT; starting permutation: rx3 rxwy1 ry3 wx2 c3 c1 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; step c1: COMMIT; @@ -2356,15 +2936,19 @@ step c2: COMMIT; starting permutation: rx3 rxwy1 ry3 wx2 c3 c2 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; step c2: COMMIT; @@ -2372,15 +2956,19 @@ step c1: COMMIT; starting permutation: rx3 rxwy1 ry3 c3 c1 wx2 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; @@ -2388,15 +2976,19 @@ step c2: COMMIT; starting permutation: rx3 rxwy1 ry3 c3 wx2 c1 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; @@ -2404,15 +2996,19 @@ step c2: COMMIT; starting permutation: rx3 rxwy1 ry3 c3 wx2 c2 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; @@ -2420,303 +3016,379 @@ step c1: COMMIT; starting permutation: rx3 wx2 rxwy1 c1 c2 ry3 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: rx3 wx2 rxwy1 c1 ry3 c2 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; starting permutation: rx3 wx2 rxwy1 c1 ry3 c3 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; starting permutation: rx3 wx2 rxwy1 c2 c1 ry3 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: rx3 wx2 rxwy1 c2 ry3 c1 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; starting permutation: rx3 wx2 rxwy1 c2 ry3 c3 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; starting permutation: rx3 wx2 rxwy1 ry3 c1 c2 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c2: COMMIT; step c3: COMMIT; starting permutation: rx3 wx2 rxwy1 ry3 c1 c3 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; step c2: COMMIT; starting permutation: rx3 wx2 rxwy1 ry3 c2 c1 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c1: COMMIT; step c3: COMMIT; starting permutation: rx3 wx2 rxwy1 ry3 c2 c3 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; step c1: COMMIT; starting permutation: rx3 wx2 rxwy1 ry3 c3 c1 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; step c2: COMMIT; starting permutation: rx3 wx2 rxwy1 ry3 c3 c2 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; step c1: COMMIT; starting permutation: rx3 wx2 c2 rxwy1 c1 ry3 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; starting permutation: rx3 wx2 c2 rxwy1 ry3 c1 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c1: COMMIT; step c3: COMMIT; starting permutation: rx3 wx2 c2 rxwy1 ry3 c3 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c1: COMMIT; starting permutation: rx3 wx2 c2 ry3 rxwy1 c1 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step c3: COMMIT; starting permutation: rx3 wx2 c2 ry3 rxwy1 c3 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; step c1: COMMIT; starting permutation: rx3 wx2 c2 ry3 c3 rxwy1 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; starting permutation: rx3 wx2 ry3 rxwy1 c1 c2 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step c2: COMMIT; @@ -2724,15 +3396,19 @@ step c3: COMMIT; starting permutation: rx3 wx2 ry3 rxwy1 c1 c3 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step c3: COMMIT; @@ -2740,15 +3416,19 @@ step c2: COMMIT; starting permutation: rx3 wx2 ry3 rxwy1 c2 c1 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; step c1: COMMIT; @@ -2756,15 +3436,19 @@ step c3: COMMIT; starting permutation: rx3 wx2 ry3 rxwy1 c2 c3 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; step c3: COMMIT; @@ -2772,15 +3456,19 @@ step c1: COMMIT; starting permutation: rx3 wx2 ry3 rxwy1 c3 c1 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; step c1: COMMIT; @@ -2788,15 +3476,19 @@ step c2: COMMIT; starting permutation: rx3 wx2 ry3 rxwy1 c3 c2 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; step c2: COMMIT; @@ -2804,15 +3496,19 @@ step c1: COMMIT; starting permutation: rx3 wx2 ry3 c2 rxwy1 c1 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; @@ -2820,15 +3516,19 @@ step c3: COMMIT; starting permutation: rx3 wx2 ry3 c2 rxwy1 c3 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; @@ -2836,15 +3536,19 @@ step c1: COMMIT; starting permutation: rx3 wx2 ry3 c2 c3 rxwy1 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c2: COMMIT; step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); @@ -2852,15 +3556,19 @@ step c1: COMMIT; starting permutation: rx3 wx2 ry3 c3 rxwy1 c1 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; @@ -2868,15 +3576,19 @@ step c2: COMMIT; starting permutation: rx3 wx2 ry3 c3 rxwy1 c2 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; @@ -2884,15 +3596,19 @@ step c1: COMMIT; starting permutation: rx3 wx2 ry3 c3 c2 rxwy1 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); @@ -2900,14 +3616,18 @@ step c1: COMMIT; starting permutation: rx3 ry3 rxwy1 c1 wx2 c2 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; @@ -2916,14 +3636,18 @@ step c3: COMMIT; starting permutation: rx3 ry3 rxwy1 c1 wx2 c3 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; @@ -2932,14 +3656,18 @@ step c2: COMMIT; starting permutation: rx3 ry3 rxwy1 c1 c3 wx2 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; step c3: COMMIT; @@ -2948,14 +3676,18 @@ step c2: COMMIT; starting permutation: rx3 ry3 rxwy1 wx2 c1 c2 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; @@ -2964,14 +3696,18 @@ step c3: COMMIT; starting permutation: rx3 ry3 rxwy1 wx2 c1 c3 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c1: COMMIT; @@ -2980,14 +3716,18 @@ step c2: COMMIT; starting permutation: rx3 ry3 rxwy1 wx2 c2 c1 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; @@ -2996,14 +3736,18 @@ step c3: COMMIT; starting permutation: rx3 ry3 rxwy1 wx2 c2 c3 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; @@ -3012,14 +3756,18 @@ step c1: COMMIT; starting permutation: rx3 ry3 rxwy1 wx2 c3 c1 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; @@ -3028,14 +3776,18 @@ step c2: COMMIT; starting permutation: rx3 ry3 rxwy1 wx2 c3 c2 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; @@ -3044,14 +3796,18 @@ step c1: COMMIT; starting permutation: rx3 ry3 rxwy1 c3 c1 wx2 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; step c1: COMMIT; @@ -3060,14 +3816,18 @@ step c2: COMMIT; starting permutation: rx3 ry3 rxwy1 c3 wx2 c1 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; @@ -3076,14 +3836,18 @@ step c2: COMMIT; starting permutation: rx3 ry3 rxwy1 c3 wx2 c2 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; @@ -3092,14 +3856,18 @@ step c1: COMMIT; starting permutation: rx3 ry3 wx2 rxwy1 c1 c2 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; @@ -3108,14 +3876,18 @@ step c3: COMMIT; starting permutation: rx3 ry3 wx2 rxwy1 c1 c3 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; @@ -3124,14 +3896,18 @@ step c2: COMMIT; starting permutation: rx3 ry3 wx2 rxwy1 c2 c1 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; @@ -3140,14 +3916,18 @@ step c3: COMMIT; starting permutation: rx3 ry3 wx2 rxwy1 c2 c3 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c2: COMMIT; @@ -3156,14 +3936,18 @@ step c1: COMMIT; starting permutation: rx3 ry3 wx2 rxwy1 c3 c1 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; @@ -3172,14 +3956,18 @@ step c2: COMMIT; starting permutation: rx3 ry3 wx2 rxwy1 c3 c2 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c3: COMMIT; @@ -3188,14 +3976,18 @@ step c1: COMMIT; starting permutation: rx3 ry3 wx2 c2 rxwy1 c1 c3 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); @@ -3204,14 +3996,18 @@ step c3: COMMIT; starting permutation: rx3 ry3 wx2 c2 rxwy1 c3 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); @@ -3220,14 +4016,18 @@ step c1: COMMIT; starting permutation: rx3 ry3 wx2 c2 c3 rxwy1 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; step c3: COMMIT; @@ -3236,14 +4036,18 @@ step c1: COMMIT; starting permutation: rx3 ry3 wx2 c3 rxwy1 c1 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); @@ -3252,14 +4056,18 @@ step c2: COMMIT; starting permutation: rx3 ry3 wx2 c3 rxwy1 c2 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); @@ -3268,14 +4076,18 @@ step c1: COMMIT; starting permutation: rx3 ry3 wx2 c3 c2 rxwy1 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c3: COMMIT; step c2: COMMIT; @@ -3284,14 +4096,18 @@ step c1: COMMIT; starting permutation: rx3 ry3 c3 rxwy1 c1 wx2 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step c1: COMMIT; @@ -3300,14 +4116,18 @@ step c2: COMMIT; starting permutation: rx3 ry3 c3 rxwy1 wx2 c1 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; @@ -3316,14 +4136,18 @@ step c2: COMMIT; starting permutation: rx3 ry3 c3 rxwy1 wx2 c2 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; @@ -3332,14 +4156,18 @@ step c1: COMMIT; starting permutation: rx3 ry3 c3 wx2 rxwy1 c1 c2 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); @@ -3348,14 +4176,18 @@ step c2: COMMIT; starting permutation: rx3 ry3 c3 wx2 rxwy1 c2 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step rxwy1: INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); @@ -3364,14 +4196,18 @@ step c1: COMMIT; starting permutation: rx3 ry3 c3 wx2 c2 rxwy1 c1 step rx3: SELECT * FROM ctl WHERE k = 'receipt'; -k deposit_date +k |deposit_date +-------+------------ +receipt| 12-22-2008 +(1 row) -receipt 12-22-2008 step ry3: SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; -receipt_no deposit_date amount +receipt_no|deposit_date|amount +----------+------------+------ + 1| 12-22-2008| 1.00 + 2| 12-22-2008| 2.00 +(2 rows) -1 12-22-2008 1.00 -2 12-22-2008 2.00 step c3: COMMIT; step wx2: UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; step c2: COMMIT; diff --git a/src/test/isolation/expected/referential-integrity.out b/src/test/isolation/expected/referential-integrity.out index ba42efa39bee6..7679397eb2d77 100644 --- a/src/test/isolation/expected/referential-integrity.out +++ b/src/test/isolation/expected/referential-integrity.out @@ -2,35 +2,47 @@ Parsed test spec with 2 sessions starting permutation: rx1 wy1 c1 rx2 ry2 wx2 c2 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step c1: COMMIT; step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- + 1 +(1 row) -1 step wx2: DELETE FROM a WHERE i = 1; step c2: COMMIT; starting permutation: rx1 wy1 rx2 c1 ry2 wx2 c2 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step c1: COMMIT; step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; ERROR: could not serialize access due to read/write dependencies among transactions @@ -38,16 +50,22 @@ step c2: COMMIT; starting permutation: rx1 wy1 rx2 ry2 c1 wx2 c2 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step c1: COMMIT; step wx2: DELETE FROM a WHERE i = 1; @@ -56,16 +74,22 @@ step c2: COMMIT; starting permutation: rx1 wy1 rx2 ry2 wx2 c1 c2 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step c1: COMMIT; @@ -74,16 +98,22 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 wy1 rx2 ry2 wx2 c2 c1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step c2: COMMIT; @@ -92,17 +122,23 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 rx2 wy1 c1 ry2 wx2 c2 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step c1: COMMIT; step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; ERROR: could not serialize access due to read/write dependencies among transactions @@ -110,16 +146,22 @@ step c2: COMMIT; starting permutation: rx1 rx2 wy1 ry2 c1 wx2 c2 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step c1: COMMIT; step wx2: DELETE FROM a WHERE i = 1; @@ -128,16 +170,22 @@ step c2: COMMIT; starting permutation: rx1 rx2 wy1 ry2 wx2 c1 c2 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step c1: COMMIT; @@ -146,16 +194,22 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 rx2 wy1 ry2 wx2 c2 c1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step c2: COMMIT; @@ -164,15 +218,21 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 rx2 ry2 wy1 c1 wx2 c2 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wy1: INSERT INTO b VALUES (1); step c1: COMMIT; @@ -182,15 +242,21 @@ step c2: COMMIT; starting permutation: rx1 rx2 ry2 wy1 wx2 c1 c2 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wy1: INSERT INTO b VALUES (1); step wx2: DELETE FROM a WHERE i = 1; @@ -200,15 +266,21 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 rx2 ry2 wy1 wx2 c2 c1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wy1: INSERT INTO b VALUES (1); step wx2: DELETE FROM a WHERE i = 1; @@ -218,15 +290,21 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 rx2 ry2 wx2 wy1 c1 c2 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step wy1: INSERT INTO b VALUES (1); @@ -236,15 +314,21 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 rx2 ry2 wx2 wy1 c2 c1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step wy1: INSERT INTO b VALUES (1); @@ -254,15 +338,21 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 rx2 ry2 wx2 c2 wy1 c1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step c2: COMMIT; @@ -272,17 +362,23 @@ step c1: COMMIT; starting permutation: rx2 rx1 wy1 c1 ry2 wx2 c2 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step c1: COMMIT; step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; ERROR: could not serialize access due to read/write dependencies among transactions @@ -290,16 +386,22 @@ step c2: COMMIT; starting permutation: rx2 rx1 wy1 ry2 c1 wx2 c2 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step c1: COMMIT; step wx2: DELETE FROM a WHERE i = 1; @@ -308,16 +410,22 @@ step c2: COMMIT; starting permutation: rx2 rx1 wy1 ry2 wx2 c1 c2 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step c1: COMMIT; @@ -326,16 +434,22 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx2 rx1 wy1 ry2 wx2 c2 c1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step c2: COMMIT; @@ -344,15 +458,21 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx2 rx1 ry2 wy1 c1 wx2 c2 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wy1: INSERT INTO b VALUES (1); step c1: COMMIT; @@ -362,15 +482,21 @@ step c2: COMMIT; starting permutation: rx2 rx1 ry2 wy1 wx2 c1 c2 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wy1: INSERT INTO b VALUES (1); step wx2: DELETE FROM a WHERE i = 1; @@ -380,15 +506,21 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx2 rx1 ry2 wy1 wx2 c2 c1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wy1: INSERT INTO b VALUES (1); step wx2: DELETE FROM a WHERE i = 1; @@ -398,15 +530,21 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx2 rx1 ry2 wx2 wy1 c1 c2 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step wy1: INSERT INTO b VALUES (1); @@ -416,15 +554,21 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx2 rx1 ry2 wx2 wy1 c2 c1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step wy1: INSERT INTO b VALUES (1); @@ -434,15 +578,21 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx2 rx1 ry2 wx2 c2 wy1 c1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step c2: COMMIT; @@ -452,16 +602,22 @@ step c1: COMMIT; starting permutation: rx2 ry2 rx1 wy1 c1 wx2 c2 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step c1: COMMIT; step wx2: DELETE FROM a WHERE i = 1; @@ -470,16 +626,22 @@ step c2: COMMIT; starting permutation: rx2 ry2 rx1 wy1 wx2 c1 c2 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step wx2: DELETE FROM a WHERE i = 1; step c1: COMMIT; @@ -488,16 +650,22 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx2 ry2 rx1 wy1 wx2 c2 c1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step wx2: DELETE FROM a WHERE i = 1; step c2: COMMIT; @@ -506,16 +674,22 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx2 ry2 rx1 wx2 wy1 c1 c2 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wx2: DELETE FROM a WHERE i = 1; step wy1: INSERT INTO b VALUES (1); step c1: COMMIT; @@ -524,16 +698,22 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx2 ry2 rx1 wx2 wy1 c2 c1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wx2: DELETE FROM a WHERE i = 1; step wy1: INSERT INTO b VALUES (1); step c2: COMMIT; @@ -542,16 +722,22 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx2 ry2 rx1 wx2 c2 wy1 c1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wx2: DELETE FROM a WHERE i = 1; step c2: COMMIT; step wy1: INSERT INTO b VALUES (1); @@ -560,17 +746,23 @@ step c1: COMMIT; starting permutation: rx2 ry2 wx2 rx1 wy1 c1 c2 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step c1: COMMIT; step c2: COMMIT; @@ -578,17 +770,23 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx2 ry2 wx2 rx1 wy1 c2 c1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step wy1: INSERT INTO b VALUES (1); step c2: COMMIT; step c1: COMMIT; @@ -596,17 +794,23 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx2 ry2 wx2 rx1 c2 wy1 c1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step c2: COMMIT; step wy1: INSERT INTO b VALUES (1); ERROR: could not serialize access due to read/write dependencies among transactions @@ -614,16 +818,22 @@ step c1: COMMIT; starting permutation: rx2 ry2 wx2 c2 rx1 wy1 c1 step rx2: SELECT i FROM a WHERE i = 1; -i +i +- +1 +(1 row) -1 step ry2: SELECT a_id FROM b WHERE a_id = 1; -a_id +a_id +---- +(0 rows) step wx2: DELETE FROM a WHERE i = 1; step c2: COMMIT; step rx1: SELECT i FROM a WHERE i = 1; -i +i +- +(0 rows) step wy1: INSERT INTO b VALUES (1); step c1: COMMIT; diff --git a/src/test/isolation/expected/reindex-concurrently.out b/src/test/isolation/expected/reindex-concurrently.out index 9e04169b2fd6f..eea5b2b93c8c0 100644 --- a/src/test/isolation/expected/reindex-concurrently.out +++ b/src/test/isolation/expected/reindex-concurrently.out @@ -3,9 +3,11 @@ Parsed test spec with 3 sessions starting permutation: reindex sel1 upd2 ins2 del2 end1 end2 step reindex: REINDEX TABLE CONCURRENTLY reind_con_tab; step sel1: SELECT data FROM reind_con_tab WHERE id = 3; -data +data +---- +aaaa +(1 row) -aaaa step upd2: UPDATE reind_con_tab SET data = 'bbbb' WHERE id = 3; step ins2: INSERT INTO reind_con_tab(data) VALUES ('cccc'); step del2: DELETE FROM reind_con_tab WHERE data = 'cccc'; @@ -14,9 +16,11 @@ step end2: COMMIT; starting permutation: sel1 reindex upd2 ins2 del2 end1 end2 step sel1: SELECT data FROM reind_con_tab WHERE id = 3; -data +data +---- +aaaa +(1 row) -aaaa step reindex: REINDEX TABLE CONCURRENTLY reind_con_tab; step upd2: UPDATE reind_con_tab SET data = 'bbbb' WHERE id = 3; step ins2: INSERT INTO reind_con_tab(data) VALUES ('cccc'); @@ -27,9 +31,11 @@ step reindex: <... completed> starting permutation: sel1 upd2 reindex ins2 del2 end1 end2 step sel1: SELECT data FROM reind_con_tab WHERE id = 3; -data +data +---- +aaaa +(1 row) -aaaa step upd2: UPDATE reind_con_tab SET data = 'bbbb' WHERE id = 3; step reindex: REINDEX TABLE CONCURRENTLY reind_con_tab; step ins2: INSERT INTO reind_con_tab(data) VALUES ('cccc'); @@ -40,9 +46,11 @@ step reindex: <... completed> starting permutation: sel1 upd2 ins2 reindex del2 end1 end2 step sel1: SELECT data FROM reind_con_tab WHERE id = 3; -data +data +---- +aaaa +(1 row) -aaaa step upd2: UPDATE reind_con_tab SET data = 'bbbb' WHERE id = 3; step ins2: INSERT INTO reind_con_tab(data) VALUES ('cccc'); step reindex: REINDEX TABLE CONCURRENTLY reind_con_tab; @@ -53,9 +61,11 @@ step reindex: <... completed> starting permutation: sel1 upd2 ins2 del2 reindex end1 end2 step sel1: SELECT data FROM reind_con_tab WHERE id = 3; -data +data +---- +aaaa +(1 row) -aaaa step upd2: UPDATE reind_con_tab SET data = 'bbbb' WHERE id = 3; step ins2: INSERT INTO reind_con_tab(data) VALUES ('cccc'); step del2: DELETE FROM reind_con_tab WHERE data = 'cccc'; @@ -66,9 +76,11 @@ step reindex: <... completed> starting permutation: sel1 upd2 ins2 del2 end1 reindex end2 step sel1: SELECT data FROM reind_con_tab WHERE id = 3; -data +data +---- +aaaa +(1 row) -aaaa step upd2: UPDATE reind_con_tab SET data = 'bbbb' WHERE id = 3; step ins2: INSERT INTO reind_con_tab(data) VALUES ('cccc'); step del2: DELETE FROM reind_con_tab WHERE data = 'cccc'; diff --git a/src/test/isolation/expected/ri-trigger.out b/src/test/isolation/expected/ri-trigger.out index 88943287aa603..842df80a90b04 100644 --- a/src/test/isolation/expected/ri-trigger.out +++ b/src/test/isolation/expected/ri-trigger.out @@ -4,9 +4,11 @@ starting permutation: wxry1 c1 r2 wyrx2 c2 step wxry1: INSERT INTO child (parent_id) VALUES (0); step c1: COMMIT; step r2: SELECT TRUE; -bool +bool +---- +t +(1 row) -t step wyrx2: DELETE FROM parent WHERE parent_id = 0; ERROR: child row exists step c2: COMMIT; @@ -14,9 +16,11 @@ step c2: COMMIT; starting permutation: wxry1 r2 c1 wyrx2 c2 step wxry1: INSERT INTO child (parent_id) VALUES (0); step r2: SELECT TRUE; -bool +bool +---- +t +(1 row) -t step c1: COMMIT; step wyrx2: DELETE FROM parent WHERE parent_id = 0; ERROR: could not serialize access due to read/write dependencies among transactions @@ -25,9 +29,11 @@ step c2: COMMIT; starting permutation: wxry1 r2 wyrx2 c1 c2 step wxry1: INSERT INTO child (parent_id) VALUES (0); step r2: SELECT TRUE; -bool +bool +---- +t +(1 row) -t step wyrx2: DELETE FROM parent WHERE parent_id = 0; step c1: COMMIT; step c2: COMMIT; @@ -36,9 +42,11 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: wxry1 r2 wyrx2 c2 c1 step wxry1: INSERT INTO child (parent_id) VALUES (0); step r2: SELECT TRUE; -bool +bool +---- +t +(1 row) -t step wyrx2: DELETE FROM parent WHERE parent_id = 0; step c2: COMMIT; step c1: COMMIT; @@ -46,9 +54,11 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: r2 wxry1 c1 wyrx2 c2 step r2: SELECT TRUE; -bool +bool +---- +t +(1 row) -t step wxry1: INSERT INTO child (parent_id) VALUES (0); step c1: COMMIT; step wyrx2: DELETE FROM parent WHERE parent_id = 0; @@ -57,9 +67,11 @@ step c2: COMMIT; starting permutation: r2 wxry1 wyrx2 c1 c2 step r2: SELECT TRUE; -bool +bool +---- +t +(1 row) -t step wxry1: INSERT INTO child (parent_id) VALUES (0); step wyrx2: DELETE FROM parent WHERE parent_id = 0; step c1: COMMIT; @@ -68,9 +80,11 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: r2 wxry1 wyrx2 c2 c1 step r2: SELECT TRUE; -bool +bool +---- +t +(1 row) -t step wxry1: INSERT INTO child (parent_id) VALUES (0); step wyrx2: DELETE FROM parent WHERE parent_id = 0; step c2: COMMIT; @@ -79,9 +93,11 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: r2 wyrx2 wxry1 c1 c2 step r2: SELECT TRUE; -bool +bool +---- +t +(1 row) -t step wyrx2: DELETE FROM parent WHERE parent_id = 0; step wxry1: INSERT INTO child (parent_id) VALUES (0); step c1: COMMIT; @@ -90,9 +106,11 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: r2 wyrx2 wxry1 c2 c1 step r2: SELECT TRUE; -bool +bool +---- +t +(1 row) -t step wyrx2: DELETE FROM parent WHERE parent_id = 0; step wxry1: INSERT INTO child (parent_id) VALUES (0); step c2: COMMIT; @@ -101,9 +119,11 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: r2 wyrx2 c2 wxry1 c1 step r2: SELECT TRUE; -bool +bool +---- +t +(1 row) -t step wyrx2: DELETE FROM parent WHERE parent_id = 0; step c2: COMMIT; step wxry1: INSERT INTO child (parent_id) VALUES (0); diff --git a/src/test/isolation/expected/sequence-ddl.out b/src/test/isolation/expected/sequence-ddl.out index 5cf08d7f3c808..52b053835263b 100644 --- a/src/test/isolation/expected/sequence-ddl.out +++ b/src/test/isolation/expected/sequence-ddl.out @@ -18,67 +18,73 @@ step s1restart: ALTER SEQUENCE seq1 RESTART WITH 5; step s2nv: SELECT nextval('seq1') FROM generate_series(1, 15); step s1commit: COMMIT; step s2nv: <... completed> -nextval +nextval +------- + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 +(15 rows) -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 starting permutation: s1restart s2nv s1commit step s1restart: ALTER SEQUENCE seq1 RESTART WITH 5; step s2nv: SELECT nextval('seq1') FROM generate_series(1, 15); step s1commit: COMMIT; step s2nv: <... completed> -nextval +nextval +------- + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 +(15 rows) -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 starting permutation: s2begin s2nv s1alter2 s2commit s1commit step s2begin: BEGIN; step s2nv: SELECT nextval('seq1') FROM generate_series(1, 15); -nextval +nextval +------- + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 +(15 rows) -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 step s1alter2: ALTER SEQUENCE seq1 MAXVALUE 20; step s2commit: COMMIT; step s1alter2: <... completed> diff --git a/src/test/isolation/expected/serializable-parallel-2.out b/src/test/isolation/expected/serializable-parallel-2.out index 9a693c4dc629d..92753ccf39f7f 100644 --- a/src/test/isolation/expected/serializable-parallel-2.out +++ b/src/test/isolation/expected/serializable-parallel-2.out @@ -2,43 +2,49 @@ Parsed test spec with 2 sessions starting permutation: s1r s2r1 s1c s2r2 s2c step s1r: SELECT * FROM foo; -a + a +-- + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 +10 +(10 rows) -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 step s2r1: SELECT * FROM foo; -a + a +-- + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 +10 +(10 rows) -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 step s1c: COMMIT; step s2r2: SELECT * FROM foo; -a + a +-- + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 +10 +(10 rows) -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 step s2c: COMMIT; diff --git a/src/test/isolation/expected/serializable-parallel.out b/src/test/isolation/expected/serializable-parallel.out index f43aa6a2990ec..543ae89747e9d 100644 --- a/src/test/isolation/expected/serializable-parallel.out +++ b/src/test/isolation/expected/serializable-parallel.out @@ -2,17 +2,23 @@ Parsed test spec with 3 sessions starting permutation: s2rx s2ry s1ry s1wy s1c s2wx s2c s3c step s2rx: SELECT balance FROM bank_account WHERE id = 'X'; -balance +balance +------- + 0 +(1 row) -0 step s2ry: SELECT balance FROM bank_account WHERE id = 'Y'; -balance +balance +------- + 0 +(1 row) -0 step s1ry: SELECT balance FROM bank_account WHERE id = 'Y'; -balance +balance +------- + 0 +(1 row) -0 step s1wy: UPDATE bank_account SET balance = 20 WHERE id = 'Y'; step s1c: COMMIT; step s2wx: UPDATE bank_account SET balance = -11 WHERE id = 'X'; @@ -21,24 +27,32 @@ step s3c: COMMIT; starting permutation: s2rx s2ry s1ry s1wy s1c s3r s3c s2wx step s2rx: SELECT balance FROM bank_account WHERE id = 'X'; -balance +balance +------- + 0 +(1 row) -0 step s2ry: SELECT balance FROM bank_account WHERE id = 'Y'; -balance +balance +------- + 0 +(1 row) -0 step s1ry: SELECT balance FROM bank_account WHERE id = 'Y'; -balance +balance +------- + 0 +(1 row) -0 step s1wy: UPDATE bank_account SET balance = 20 WHERE id = 'Y'; step s1c: COMMIT; step s3r: SELECT id, balance FROM bank_account WHERE id IN ('X', 'Y') ORDER BY id; -id balance +id|balance +--+------- +X | 0 +Y | 20 +(2 rows) -X 0 -Y 20 step s3c: COMMIT; step s2wx: UPDATE bank_account SET balance = -11 WHERE id = 'X'; ERROR: could not serialize access due to read/write dependencies among transactions diff --git a/src/test/isolation/expected/skip-locked-2.out b/src/test/isolation/expected/skip-locked-2.out index 9240543f3f406..3302d2e98750f 100644 --- a/src/test/isolation/expected/skip-locked-2.out +++ b/src/test/isolation/expected/skip-locked-2.out @@ -2,48 +2,66 @@ Parsed test spec with 2 sessions starting permutation: s1a s2a s2b s1b s2c step s1a: SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2a: SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: COMMIT; step s2c: COMMIT; starting permutation: s2a s1a s2b s1b s2c step s2a: SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1a: SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: COMMIT; step s2c: COMMIT; starting permutation: s2a s2b s1a s1b s2c step s2a: SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1a: SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: COMMIT; step s2c: COMMIT; diff --git a/src/test/isolation/expected/skip-locked-3.out b/src/test/isolation/expected/skip-locked-3.out index fa8fe87d8a350..be1f84d51c2fe 100644 --- a/src/test/isolation/expected/skip-locked-3.out +++ b/src/test/isolation/expected/skip-locked-3.out @@ -2,18 +2,24 @@ Parsed test spec with 3 sessions starting permutation: s1a s2a s3a s1b s2b s3b step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE LIMIT 1; step s3a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: COMMIT; step s2a: <... completed> -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2b: COMMIT; step s3b: COMMIT; diff --git a/src/test/isolation/expected/skip-locked-4.out b/src/test/isolation/expected/skip-locked-4.out index 2c9cfe895e6b0..cfa9ae1e1ee19 100644 --- a/src/test/isolation/expected/skip-locked-4.out +++ b/src/test/isolation/expected/skip-locked-4.out @@ -3,19 +3,25 @@ Parsed test spec with 2 sessions starting permutation: s2a s1a s2b s2c s2d s2e s1b s2f step s2a: SELECT pg_advisory_lock(0); pg_advisory_lock +---------------- + +(1 row) - step s1a: SELECT * FROM foo WHERE pg_advisory_lock(0) IS NOT NULL ORDER BY id LIMIT 1 FOR UPDATE SKIP LOCKED; step s2b: UPDATE foo SET data = data WHERE id = 1; step s2c: BEGIN; step s2d: UPDATE foo SET data = data WHERE id = 1; step s2e: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1a: <... completed> -id data +id|data +--+---- + 2|x +(1 row) -2 x step s1b: COMMIT; step s2f: COMMIT; diff --git a/src/test/isolation/expected/skip-locked-4_1.out b/src/test/isolation/expected/skip-locked-4_1.out index e7ea5d7a8d863..489dcab5d5522 100644 --- a/src/test/isolation/expected/skip-locked-4_1.out +++ b/src/test/isolation/expected/skip-locked-4_1.out @@ -3,16 +3,20 @@ Parsed test spec with 2 sessions starting permutation: s2a s1a s2b s2c s2d s2e s1b s2f step s2a: SELECT pg_advisory_lock(0); pg_advisory_lock +---------------- + +(1 row) - step s1a: SELECT * FROM foo WHERE pg_advisory_lock(0) IS NOT NULL ORDER BY id LIMIT 1 FOR UPDATE SKIP LOCKED; step s2b: UPDATE foo SET data = data WHERE id = 1; step s2c: BEGIN; step s2d: UPDATE foo SET data = data WHERE id = 1; step s2e: SELECT pg_advisory_unlock(0); pg_advisory_unlock +------------------ +t +(1 row) -t step s1a: <... completed> ERROR: could not serialize access due to concurrent update step s1b: COMMIT; diff --git a/src/test/isolation/expected/skip-locked.out b/src/test/isolation/expected/skip-locked.out index f9b9cf28be6e5..3dc57683849b3 100644 --- a/src/test/isolation/expected/skip-locked.out +++ b/src/test/isolation/expected/skip-locked.out @@ -2,400 +2,560 @@ Parsed test spec with 2 sessions starting permutation: s1a s1b s1c s2a s2b s2c step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1c: COMMIT; step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2c: COMMIT; starting permutation: s1a s1b s2a s1c s2b s2c step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1c: COMMIT; step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2c: COMMIT; starting permutation: s1a s1b s2a s2b s1c s2c step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1c: COMMIT; step s2c: COMMIT; starting permutation: s1a s1b s2a s2b s2c s1c step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2c: COMMIT; step s1c: COMMIT; starting permutation: s1a s2a s1b s1c s2b s2c step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1c: COMMIT; step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2c: COMMIT; starting permutation: s1a s2a s1b s2b s1c s2c step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1c: COMMIT; step s2c: COMMIT; starting permutation: s1a s2a s1b s2b s2c s1c step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2c: COMMIT; step s1c: COMMIT; starting permutation: s1a s2a s2b s1b s1c s2c step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1c: COMMIT; step s2c: COMMIT; starting permutation: s1a s2a s2b s1b s2c s1c step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2c: COMMIT; step s1c: COMMIT; starting permutation: s1a s2a s2b s2c s1b s1c step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2c: COMMIT; step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1c: COMMIT; starting permutation: s2a s1a s1b s1c s2b s2c step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1c: COMMIT; step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2c: COMMIT; starting permutation: s2a s1a s1b s2b s1c s2c step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1c: COMMIT; step s2c: COMMIT; starting permutation: s2a s1a s1b s2b s2c s1c step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2c: COMMIT; step s1c: COMMIT; starting permutation: s2a s1a s2b s1b s1c s2c step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1c: COMMIT; step s2c: COMMIT; starting permutation: s2a s1a s2b s1b s2c s1c step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2c: COMMIT; step s1c: COMMIT; starting permutation: s2a s1a s2b s2c s1b s1c step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2c: COMMIT; step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1c: COMMIT; starting permutation: s2a s2b s1a s1b s1c s2c step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1c: COMMIT; step s2c: COMMIT; starting permutation: s2a s2b s1a s1b s2c s1c step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2c: COMMIT; step s1c: COMMIT; starting permutation: s2a s2b s1a s2c s1b s1c step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 2|bar |NEW +(1 row) -2 bar NEW step s2c: COMMIT; step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1c: COMMIT; starting permutation: s2a s2b s2c s1a s1b s1c step s2a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s2c: COMMIT; step s1a: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1b: SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; -id data status +id|data|status +--+----+------ + 1|foo |NEW +(1 row) -1 foo NEW step s1c: COMMIT; diff --git a/src/test/isolation/expected/temporal-range-integrity.out b/src/test/isolation/expected/temporal-range-integrity.out index f1b24023a2c09..039193e4d28cc 100644 --- a/src/test/isolation/expected/temporal-range-integrity.out +++ b/src/test/isolation/expected/temporal-range-integrity.out @@ -2,28 +2,36 @@ Parsed test spec with 2 sessions starting permutation: rx1 wy1 c1 ry2 wx2 c2 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step c1: COMMIT; step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 1 +(1 row) -1 step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step c2: COMMIT; starting permutation: rx1 wy1 ry2 c1 wx2 c2 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step c1: COMMIT; step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; ERROR: could not serialize access due to read/write dependencies among transactions @@ -31,14 +39,18 @@ step c2: COMMIT; starting permutation: rx1 wy1 ry2 wx2 c1 c2 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step c1: COMMIT; step c2: COMMIT; @@ -46,14 +58,18 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 wy1 ry2 wx2 c2 c1 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step c2: COMMIT; step c1: COMMIT; @@ -61,13 +77,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wy1 c1 wx2 c2 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step c1: COMMIT; step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; @@ -76,13 +96,17 @@ step c2: COMMIT; starting permutation: rx1 ry2 wy1 wx2 c1 c2 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step c1: COMMIT; @@ -91,13 +115,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wy1 wx2 c2 c1 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step c2: COMMIT; @@ -106,13 +134,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wx2 wy1 c1 c2 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step c1: COMMIT; @@ -121,13 +153,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wx2 wy1 c2 c1 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step c2: COMMIT; @@ -136,13 +172,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rx1 ry2 wx2 c2 wy1 c1 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step c2: COMMIT; step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); @@ -151,13 +191,17 @@ step c1: COMMIT; starting permutation: ry2 rx1 wy1 c1 wx2 c2 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step c1: COMMIT; step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; @@ -166,13 +210,17 @@ step c2: COMMIT; starting permutation: ry2 rx1 wy1 wx2 c1 c2 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step c1: COMMIT; @@ -181,13 +229,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 rx1 wy1 wx2 c2 c1 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step c2: COMMIT; @@ -196,13 +248,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 rx1 wx2 wy1 c1 c2 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step c1: COMMIT; @@ -211,13 +267,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 rx1 wx2 wy1 c2 c1 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step c2: COMMIT; @@ -226,13 +286,17 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 rx1 wx2 c2 wy1 c1 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step c2: COMMIT; step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); @@ -241,14 +305,18 @@ step c1: COMMIT; starting permutation: ry2 wx2 rx1 wy1 c1 c2 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step c1: COMMIT; step c2: COMMIT; @@ -256,14 +324,18 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 wx2 rx1 wy1 c2 c1 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step c2: COMMIT; step c1: COMMIT; @@ -271,14 +343,18 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry2 wx2 rx1 c2 wy1 c1 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 1 +(1 row) -1 step c2: COMMIT; step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); ERROR: could not serialize access due to read/write dependencies among transactions @@ -286,14 +362,18 @@ step c1: COMMIT; starting permutation: ry2 wx2 c2 rx1 wy1 c1 step ry2: SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; -count +count +----- + 0 +(1 row) -0 step wx2: DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; step c2: COMMIT; step rx1: SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); -count +count +----- + 0 +(1 row) -0 step wy1: INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); step c1: COMMIT; diff --git a/src/test/isolation/expected/timeouts.out b/src/test/isolation/expected/timeouts.out index d9ecdc95325c8..9328676f1ccb5 100644 --- a/src/test/isolation/expected/timeouts.out +++ b/src/test/isolation/expected/timeouts.out @@ -2,10 +2,12 @@ Parsed test spec with 2 sessions starting permutation: rdtbl sto locktbl step rdtbl: SELECT * FROM accounts; -accountid balance +accountid|balance +---------+------- +checking | 600 +savings | 600 +(2 rows) -checking 600 -savings 600 step sto: SET statement_timeout = '10ms'; step locktbl: LOCK TABLE accounts; step locktbl: <... completed> @@ -13,10 +15,12 @@ ERROR: canceling statement due to statement timeout starting permutation: rdtbl lto locktbl step rdtbl: SELECT * FROM accounts; -accountid balance +accountid|balance +---------+------- +checking | 600 +savings | 600 +(2 rows) -checking 600 -savings 600 step lto: SET lock_timeout = '10ms'; step locktbl: LOCK TABLE accounts; step locktbl: <... completed> @@ -24,10 +28,12 @@ ERROR: canceling statement due to lock timeout starting permutation: rdtbl lsto locktbl step rdtbl: SELECT * FROM accounts; -accountid balance +accountid|balance +---------+------- +checking | 600 +savings | 600 +(2 rows) -checking 600 -savings 600 step lsto: SET lock_timeout = '10ms'; SET statement_timeout = '10s'; step locktbl: LOCK TABLE accounts; step locktbl: <... completed> @@ -35,10 +41,12 @@ ERROR: canceling statement due to lock timeout starting permutation: rdtbl slto locktbl step rdtbl: SELECT * FROM accounts; -accountid balance +accountid|balance +---------+------- +checking | 600 +savings | 600 +(2 rows) -checking 600 -savings 600 step slto: SET lock_timeout = '10s'; SET statement_timeout = '10ms'; step locktbl: LOCK TABLE accounts; step locktbl: <... completed> diff --git a/src/test/isolation/expected/total-cash.out b/src/test/isolation/expected/total-cash.out index 5121edc710bdd..7b00e0d169f17 100644 --- a/src/test/isolation/expected/total-cash.out +++ b/src/test/isolation/expected/total-cash.out @@ -3,23 +3,29 @@ Parsed test spec with 2 sessions starting permutation: wx1 rxy1 c1 wy2 rxy2 c2 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c1: COMMIT; step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step rxy2: SELECT SUM(balance) FROM accounts; -sum +sum +--- +800 +(1 row) -800 step c2: COMMIT; starting permutation: wx1 rxy1 wy2 c1 rxy2 c2 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step c1: COMMIT; step rxy2: SELECT SUM(balance) FROM accounts; @@ -29,14 +35,18 @@ step c2: COMMIT; starting permutation: wx1 rxy1 wy2 rxy2 c1 c2 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c1: COMMIT; step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -44,14 +54,18 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: wx1 rxy1 wy2 rxy2 c2 c1 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c2: COMMIT; step c1: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -60,9 +74,11 @@ starting permutation: wx1 wy2 rxy1 c1 rxy2 c2 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c1: COMMIT; step rxy2: SELECT SUM(balance) FROM accounts; ERROR: could not serialize access due to read/write dependencies among transactions @@ -72,13 +88,17 @@ starting permutation: wx1 wy2 rxy1 rxy2 c1 c2 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c1: COMMIT; step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -87,13 +107,17 @@ starting permutation: wx1 wy2 rxy1 rxy2 c2 c1 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c2: COMMIT; step c1: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -102,13 +126,17 @@ starting permutation: wx1 wy2 rxy2 rxy1 c1 c2 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c1: COMMIT; step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -117,13 +145,17 @@ starting permutation: wx1 wy2 rxy2 rxy1 c2 c1 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c2: COMMIT; step c1: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -132,9 +164,11 @@ starting permutation: wx1 wy2 rxy2 c2 rxy1 c1 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c2: COMMIT; step rxy1: SELECT SUM(balance) FROM accounts; ERROR: could not serialize access due to read/write dependencies among transactions @@ -144,9 +178,11 @@ starting permutation: wy2 wx1 rxy1 c1 rxy2 c2 step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c1: COMMIT; step rxy2: SELECT SUM(balance) FROM accounts; ERROR: could not serialize access due to read/write dependencies among transactions @@ -156,13 +192,17 @@ starting permutation: wy2 wx1 rxy1 rxy2 c1 c2 step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c1: COMMIT; step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -171,13 +211,17 @@ starting permutation: wy2 wx1 rxy1 rxy2 c2 c1 step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c2: COMMIT; step c1: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -186,13 +230,17 @@ starting permutation: wy2 wx1 rxy2 rxy1 c1 c2 step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c1: COMMIT; step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -201,13 +249,17 @@ starting permutation: wy2 wx1 rxy2 rxy1 c2 c1 step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c2: COMMIT; step c1: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -216,9 +268,11 @@ starting permutation: wy2 wx1 rxy2 c2 rxy1 c1 step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c2: COMMIT; step rxy1: SELECT SUM(balance) FROM accounts; ERROR: could not serialize access due to read/write dependencies among transactions @@ -227,14 +281,18 @@ step c1: COMMIT; starting permutation: wy2 rxy2 wx1 rxy1 c1 c2 step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c1: COMMIT; step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -242,14 +300,18 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: wy2 rxy2 wx1 rxy1 c2 c1 step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step rxy1: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c2: COMMIT; step c1: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -257,9 +319,11 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: wy2 rxy2 wx1 c2 rxy1 c1 step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step c2: COMMIT; step rxy1: SELECT SUM(balance) FROM accounts; @@ -269,13 +333,17 @@ step c1: COMMIT; starting permutation: wy2 rxy2 c2 wx1 rxy1 c1 step wy2: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; step rxy2: SELECT SUM(balance) FROM accounts; -sum + sum +---- +1000 +(1 row) -1000 step c2: COMMIT; step wx1: UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; step rxy1: SELECT SUM(balance) FROM accounts; -sum +sum +--- +800 +(1 row) -800 step c1: COMMIT; diff --git a/src/test/isolation/expected/truncate-conflict.out b/src/test/isolation/expected/truncate-conflict.out index 2c10f8d40d43c..00d5ce37927d7 100644 --- a/src/test/isolation/expected/truncate-conflict.out +++ b/src/test/isolation/expected/truncate-conflict.out @@ -3,9 +3,11 @@ Parsed test spec with 2 sessions starting permutation: s1_begin s1_tab_lookup s2_auth s2_truncate s1_commit s2_reset step s1_begin: BEGIN; step s1_tab_lookup: SELECT count(*) >= 0 FROM truncate_tab; -?column? +?column? +-------- +t +(1 row) -t step s2_auth: SET ROLE regress_truncate_conflict; step s2_truncate: TRUNCATE truncate_tab; ERROR: permission denied for table truncate_tab @@ -18,9 +20,11 @@ step s2_auth: SET ROLE regress_truncate_conflict; step s2_truncate: TRUNCATE truncate_tab; ERROR: permission denied for table truncate_tab step s1_tab_lookup: SELECT count(*) >= 0 FROM truncate_tab; -?column? +?column? +-------- +t +(1 row) -t step s1_commit: COMMIT; step s2_reset: RESET ROLE; @@ -28,9 +32,11 @@ starting permutation: s1_begin s2_auth s1_tab_lookup s2_truncate s1_commit s2_re step s1_begin: BEGIN; step s2_auth: SET ROLE regress_truncate_conflict; step s1_tab_lookup: SELECT count(*) >= 0 FROM truncate_tab; -?column? +?column? +-------- +t +(1 row) -t step s2_truncate: TRUNCATE truncate_tab; ERROR: permission denied for table truncate_tab step s1_commit: COMMIT; @@ -42,18 +48,22 @@ step s2_truncate: TRUNCATE truncate_tab; ERROR: permission denied for table truncate_tab step s1_begin: BEGIN; step s1_tab_lookup: SELECT count(*) >= 0 FROM truncate_tab; -?column? +?column? +-------- +t +(1 row) -t step s1_commit: COMMIT; step s2_reset: RESET ROLE; starting permutation: s1_begin s1_tab_lookup s2_grant s2_auth s2_truncate s1_commit s2_reset step s1_begin: BEGIN; step s1_tab_lookup: SELECT count(*) >= 0 FROM truncate_tab; -?column? +?column? +-------- +t +(1 row) -t step s2_grant: GRANT TRUNCATE ON truncate_tab TO regress_truncate_conflict; step s2_auth: SET ROLE regress_truncate_conflict; step s2_truncate: TRUNCATE truncate_tab; @@ -67,9 +77,11 @@ step s2_grant: GRANT TRUNCATE ON truncate_tab TO regress_truncate_conflict; step s2_auth: SET ROLE regress_truncate_conflict; step s2_truncate: TRUNCATE truncate_tab; step s1_tab_lookup: SELECT count(*) >= 0 FROM truncate_tab; -?column? +?column? +-------- +t +(1 row) -t step s1_commit: COMMIT; step s2_reset: RESET ROLE; @@ -78,9 +90,11 @@ step s1_begin: BEGIN; step s2_grant: GRANT TRUNCATE ON truncate_tab TO regress_truncate_conflict; step s2_auth: SET ROLE regress_truncate_conflict; step s1_tab_lookup: SELECT count(*) >= 0 FROM truncate_tab; -?column? +?column? +-------- +t +(1 row) -t step s2_truncate: TRUNCATE truncate_tab; step s1_commit: COMMIT; step s2_truncate: <... completed> @@ -92,8 +106,10 @@ step s2_auth: SET ROLE regress_truncate_conflict; step s2_truncate: TRUNCATE truncate_tab; step s1_begin: BEGIN; step s1_tab_lookup: SELECT count(*) >= 0 FROM truncate_tab; -?column? +?column? +-------- +t +(1 row) -t step s1_commit: COMMIT; step s2_reset: RESET ROLE; diff --git a/src/test/isolation/expected/tuplelock-conflict.out b/src/test/isolation/expected/tuplelock-conflict.out index 1f5c142aee251..d629314cc8567 100644 --- a/src/test/isolation/expected/tuplelock-conflict.out +++ b/src/test/isolation/expected/tuplelock-conflict.out @@ -3,467 +3,627 @@ Parsed test spec with 2 sessions starting permutation: s1_begin s1_lcksvpt s1_tuplock1 s2_tuplock1 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_begin s1_lcksvpt s1_tuplock1 s2_tuplock2 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; -a +a +- +1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_begin s1_lcksvpt s1_tuplock1 s2_tuplock3 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; -a +a +- +1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_begin s1_lcksvpt s1_tuplock1 s2_tuplock4 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; step s1_commit: COMMIT; step s2_tuplock4: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_lcksvpt s1_tuplock2 s2_tuplock1 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_begin s1_lcksvpt s1_tuplock2 s2_tuplock2 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; -a +a +- +1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_begin s1_lcksvpt s1_tuplock2 s2_tuplock3 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; step s1_commit: COMMIT; step s2_tuplock3: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_lcksvpt s1_tuplock2 s2_tuplock4 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; step s1_commit: COMMIT; step s2_tuplock4: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_lcksvpt s1_tuplock3 s2_tuplock1 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_begin s1_lcksvpt s1_tuplock3 s2_tuplock2 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; step s1_commit: COMMIT; step s2_tuplock2: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_lcksvpt s1_tuplock3 s2_tuplock3 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; step s1_commit: COMMIT; step s2_tuplock3: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_lcksvpt s1_tuplock3 s2_tuplock4 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; step s1_commit: COMMIT; step s2_tuplock4: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_lcksvpt s1_tuplock4 s2_tuplock1 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; step s1_commit: COMMIT; step s2_tuplock1: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_lcksvpt s1_tuplock4 s2_tuplock2 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; step s1_commit: COMMIT; step s2_tuplock2: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_lcksvpt s1_tuplock4 s2_tuplock3 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; step s1_commit: COMMIT; step s2_tuplock3: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_lcksvpt s1_tuplock4 s2_tuplock4 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; -a +a +- +1 +(1 row) -1 step s1_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; step s1_commit: COMMIT; step s2_tuplock4: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_tuplock1 s2_tuplock1 s1_commit step s1_begin: BEGIN; step s1_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_begin s1_tuplock1 s2_tuplock2 s1_commit step s1_begin: BEGIN; step s1_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; -a +a +- +1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_begin s1_tuplock1 s2_tuplock3 s1_commit step s1_begin: BEGIN; step s1_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; -a +a +- +1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_begin s1_tuplock1 s2_tuplock4 s1_commit step s1_begin: BEGIN; step s1_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; step s1_commit: COMMIT; step s2_tuplock4: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_tuplock2 s2_tuplock1 s1_commit step s1_begin: BEGIN; step s1_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_begin s1_tuplock2 s2_tuplock2 s1_commit step s1_begin: BEGIN; step s1_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; -a +a +- +1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_begin s1_tuplock2 s2_tuplock3 s1_commit step s1_begin: BEGIN; step s1_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; step s1_commit: COMMIT; step s2_tuplock3: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_tuplock2 s2_tuplock4 s1_commit step s1_begin: BEGIN; step s1_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; -a +a +- +1 +(1 row) -1 step s2_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; step s1_commit: COMMIT; step s2_tuplock4: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_tuplock3 s2_tuplock1 s1_commit step s1_begin: BEGIN; step s1_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; -a +a +- +1 +(1 row) -1 step s1_commit: COMMIT; starting permutation: s1_begin s1_tuplock3 s2_tuplock2 s1_commit step s1_begin: BEGIN; step s1_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; step s1_commit: COMMIT; step s2_tuplock2: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_tuplock3 s2_tuplock3 s1_commit step s1_begin: BEGIN; step s1_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; step s1_commit: COMMIT; step s2_tuplock3: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_tuplock3 s2_tuplock4 s1_commit step s1_begin: BEGIN; step s1_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; step s1_commit: COMMIT; step s2_tuplock4: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_tuplock4 s2_tuplock1 s1_commit step s1_begin: BEGIN; step s1_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE; step s1_commit: COMMIT; step s2_tuplock1: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_tuplock4 s2_tuplock2 s1_commit step s1_begin: BEGIN; step s1_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; step s1_commit: COMMIT; step s2_tuplock2: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_tuplock4 s2_tuplock3 s1_commit step s1_begin: BEGIN; step s1_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; step s1_commit: COMMIT; step s2_tuplock3: <... completed> -a +a +- +1 +(1 row) -1 starting permutation: s1_begin s1_tuplock4 s2_tuplock4 s1_commit step s1_begin: BEGIN; step s1_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; -a +a +- +1 +(1 row) -1 step s2_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE; step s1_commit: COMMIT; step s2_tuplock4: <... completed> -a +a +- +1 +(1 row) -1 diff --git a/src/test/isolation/expected/tuplelock-partition.out b/src/test/isolation/expected/tuplelock-partition.out index dd6d37c577a8e..369ddf9c4e051 100644 --- a/src/test/isolation/expected/tuplelock-partition.out +++ b/src/test/isolation/expected/tuplelock-partition.out @@ -4,9 +4,11 @@ starting permutation: s1b s1update_nokey s2locktuple s1c step s1b: BEGIN; step s1update_nokey: INSERT INTO parttab (key, col1, col2) VALUES (1, 'a', 'b') ON CONFLICT (key) DO UPDATE SET col1 = 'x', col2 = 'y'; step s2locktuple: SELECT * FROM parttab FOR KEY SHARE; -col1 key col2 +col1|key|col2 +----+---+---- +a | 1|b +(1 row) -a 1 b step s1c: COMMIT; starting permutation: s1b s1update_key s2locktuple s1c @@ -15,6 +17,8 @@ step s1update_key: INSERT INTO parttab (key, col1, col2) VALUES (1, 'a', 'b') ON step s2locktuple: SELECT * FROM parttab FOR KEY SHARE; step s1c: COMMIT; step s2locktuple: <... completed> -col1 key col2 +col1|key|col2 +----+---+---- +a | 1|b +(1 row) -a 1 b diff --git a/src/test/isolation/expected/tuplelock-update.out b/src/test/isolation/expected/tuplelock-update.out index 7bd7bbf30a8b3..1d37d4587244e 100644 --- a/src/test/isolation/expected/tuplelock-update.out +++ b/src/test/isolation/expected/tuplelock-update.out @@ -6,34 +6,44 @@ step s1_advlock: pg_advisory_lock(285714), pg_advisory_lock(571428); -pg_advisory_lockpg_advisory_lockpg_advisory_lock +pg_advisory_lock|pg_advisory_lock|pg_advisory_lock +----------------+----------------+---------------- + | | +(1 row) - step s2_update: UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(142857) IS NOT NULL; step s3_update: UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(285714) IS NOT NULL; step s4_update: UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(571428) IS NOT NULL; step s1_chain: UPDATE pktab SET data = DEFAULT; step s1_begin: BEGIN; step s1_grablock: SELECT * FROM pktab FOR KEY SHARE; -id data +id|data +--+---- + 1| 2 +(1 row) -1 2 step s1_advunlock1: SELECT pg_advisory_unlock(142857); step s2_update: <... completed> step s1_advunlock1: <... completed> pg_advisory_unlock +------------------ +t +(1 row) -t step s1_advunlock2: SELECT pg_advisory_unlock(285714); step s3_update: <... completed> step s1_advunlock2: <... completed> pg_advisory_unlock +------------------ +t +(1 row) -t step s1_advunlock3: SELECT pg_advisory_unlock(571428); step s4_update: <... completed> step s1_advunlock3: <... completed> pg_advisory_unlock +------------------ +t +(1 row) -t step s1_commit: COMMIT; diff --git a/src/test/isolation/expected/tuplelock-upgrade-no-deadlock.out b/src/test/isolation/expected/tuplelock-upgrade-no-deadlock.out index 8e04a5439489a..2159092e96a77 100644 --- a/src/test/isolation/expected/tuplelock-upgrade-no-deadlock.out +++ b/src/test/isolation/expected/tuplelock-upgrade-no-deadlock.out @@ -2,132 +2,172 @@ Parsed test spec with 4 sessions starting permutation: s1_share s2_for_update s3_share s3_for_update s1_rollback s3_rollback s2_rollback step s1_share: select id from tlu_job where id = 1 for share; -id +id +-- + 1 +(1 row) -1 step s2_for_update: select id from tlu_job where id = 1 for update; step s3_share: select id from tlu_job where id = 1 for share; -id +id +-- + 1 +(1 row) -1 step s3_for_update: select id from tlu_job where id = 1 for update; step s1_rollback: rollback; step s3_for_update: <... completed> -id +id +-- + 1 +(1 row) -1 step s3_rollback: rollback; step s2_for_update: <... completed> -id +id +-- + 1 +(1 row) -1 step s2_rollback: rollback; starting permutation: s1_keyshare s2_for_update s3_keyshare s1_update s3_update s1_rollback s3_rollback s2_rollback step s1_keyshare: select id from tlu_job where id = 1 for key share; -id +id +-- + 1 +(1 row) -1 step s2_for_update: select id from tlu_job where id = 1 for update; step s3_keyshare: select id from tlu_job where id = 1 for key share; -id +id +-- + 1 +(1 row) -1 step s1_update: update tlu_job set name = 'b' where id = 1; step s3_update: update tlu_job set name = 'c' where id = 1; step s1_rollback: rollback; step s3_update: <... completed> step s3_rollback: rollback; step s2_for_update: <... completed> -id +id +-- + 1 +(1 row) -1 step s2_rollback: rollback; starting permutation: s1_keyshare s2_for_update s3_keyshare s1_update s3_update s1_commit s3_rollback s2_rollback step s1_keyshare: select id from tlu_job where id = 1 for key share; -id +id +-- + 1 +(1 row) -1 step s2_for_update: select id from tlu_job where id = 1 for update; step s3_keyshare: select id from tlu_job where id = 1 for key share; -id +id +-- + 1 +(1 row) -1 step s1_update: update tlu_job set name = 'b' where id = 1; step s3_update: update tlu_job set name = 'c' where id = 1; step s1_commit: commit; step s3_update: <... completed> step s3_rollback: rollback; step s2_for_update: <... completed> -id +id +-- + 1 +(1 row) -1 step s2_rollback: rollback; starting permutation: s1_keyshare s2_for_update s3_keyshare s3_delete s1_rollback s3_rollback s2_rollback step s1_keyshare: select id from tlu_job where id = 1 for key share; -id +id +-- + 1 +(1 row) -1 step s2_for_update: select id from tlu_job where id = 1 for update; step s3_keyshare: select id from tlu_job where id = 1 for key share; -id +id +-- + 1 +(1 row) -1 step s3_delete: delete from tlu_job where id = 1; step s1_rollback: rollback; step s3_delete: <... completed> step s3_rollback: rollback; step s2_for_update: <... completed> -id +id +-- + 1 +(1 row) -1 step s2_rollback: rollback; starting permutation: s1_keyshare s2_for_update s3_keyshare s3_delete s1_rollback s3_commit s2_rollback step s1_keyshare: select id from tlu_job where id = 1 for key share; -id +id +-- + 1 +(1 row) -1 step s2_for_update: select id from tlu_job where id = 1 for update; step s3_keyshare: select id from tlu_job where id = 1 for key share; -id +id +-- + 1 +(1 row) -1 step s3_delete: delete from tlu_job where id = 1; step s1_rollback: rollback; step s3_delete: <... completed> step s3_commit: commit; step s2_for_update: <... completed> -id +id +-- +(0 rows) step s2_rollback: rollback; starting permutation: s1_share s2_for_update s3_for_update s1_rollback s2_rollback s3_rollback step s1_share: select id from tlu_job where id = 1 for share; -id +id +-- + 1 +(1 row) -1 step s2_for_update: select id from tlu_job where id = 1 for update; step s3_for_update: select id from tlu_job where id = 1 for update; step s1_rollback: rollback; step s2_for_update: <... completed> -id +id +-- + 1 +(1 row) -1 step s2_rollback: rollback; step s3_for_update: <... completed> -id +id +-- + 1 +(1 row) -1 step s3_rollback: rollback; starting permutation: s1_share s2_update s3_update s1_rollback s2_rollback s3_rollback step s1_share: select id from tlu_job where id = 1 for share; -id +id +-- + 1 +(1 row) -1 step s2_update: update tlu_job set name = 'b' where id = 1; step s3_update: update tlu_job set name = 'c' where id = 1; step s1_rollback: rollback; @@ -138,9 +178,11 @@ step s3_rollback: rollback; starting permutation: s1_share s2_delete s3_delete s1_rollback s2_rollback s3_rollback step s1_share: select id from tlu_job where id = 1 for share; -id +id +-- + 1 +(1 row) -1 step s2_delete: delete from tlu_job where id = 1; step s3_delete: delete from tlu_job where id = 1; step s1_rollback: rollback; @@ -151,45 +193,61 @@ step s3_rollback: rollback; starting permutation: s1_keyshare s3_for_update s2_for_keyshare s1_savept_e s1_share s1_savept_f s1_fornokeyupd s2_fornokeyupd s0_begin s0_keyshare s1_rollback_f s0_keyshare s1_rollback_e s1_rollback s2_rollback s0_rollback s3_rollback step s1_keyshare: select id from tlu_job where id = 1 for key share; -id +id +-- + 1 +(1 row) -1 step s3_for_update: select id from tlu_job where id = 1 for update; step s2_for_keyshare: select id from tlu_job where id = 1 for key share; -id +id +-- + 1 +(1 row) -1 step s1_savept_e: savepoint s1_e; step s1_share: select id from tlu_job where id = 1 for share; -id +id +-- + 1 +(1 row) -1 step s1_savept_f: savepoint s1_f; step s1_fornokeyupd: select id from tlu_job where id = 1 for no key update; -id +id +-- + 1 +(1 row) -1 step s2_fornokeyupd: select id from tlu_job where id = 1 for no key update; step s0_begin: begin; step s0_keyshare: select id from tlu_job where id = 1 for key share; -id +id +-- + 1 +(1 row) -1 step s1_rollback_f: rollback to s1_f; step s0_keyshare: select id from tlu_job where id = 1 for key share; -id +id +-- + 1 +(1 row) -1 step s1_rollback_e: rollback to s1_e; step s2_fornokeyupd: <... completed> -id +id +-- + 1 +(1 row) -1 step s1_rollback: rollback; step s2_rollback: rollback; step s0_rollback: rollback; step s3_for_update: <... completed> -id +id +-- + 1 +(1 row) -1 step s3_rollback: rollback; diff --git a/src/test/isolation/expected/two-ids.out b/src/test/isolation/expected/two-ids.out index 2fbba1e2197dc..2ebd73feda6bf 100644 --- a/src/test/isolation/expected/two-ids.out +++ b/src/test/isolation/expected/two-ids.out @@ -6,9 +6,11 @@ step c1: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step ry3: select id from D2; -id +id +-- + 3 +(1 row) -3 step c3: COMMIT; starting permutation: wx1 c1 rxwy2 ry3 c2 c3 @@ -16,9 +18,11 @@ step wx1: update D1 set id = id + 1; step c1: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c2: COMMIT; step c3: COMMIT; @@ -27,9 +31,11 @@ step wx1: update D1 set id = id + 1; step c1: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step c2: COMMIT; @@ -37,9 +43,11 @@ starting permutation: wx1 c1 ry3 rxwy2 c2 c3 step wx1: update D1 set id = id + 1; step c1: COMMIT; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step c3: COMMIT; @@ -48,9 +56,11 @@ starting permutation: wx1 c1 ry3 rxwy2 c3 c2 step wx1: update D1 set id = id + 1; step c1: COMMIT; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c3: COMMIT; step c2: COMMIT; @@ -59,9 +69,11 @@ starting permutation: wx1 c1 ry3 c3 rxwy2 c2 step wx1: update D1 set id = id + 1; step c1: COMMIT; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; @@ -72,9 +84,11 @@ step rxwy2: update D2 set id = (select id+1 from D1); step c1: COMMIT; step c2: COMMIT; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step c3: COMMIT; starting permutation: wx1 rxwy2 c1 ry3 c2 c3 @@ -82,9 +96,11 @@ step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step c1: COMMIT; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions step c3: COMMIT; @@ -94,9 +110,11 @@ step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step c1: COMMIT; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -107,9 +125,11 @@ step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step c1: COMMIT; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step c3: COMMIT; starting permutation: wx1 rxwy2 c2 ry3 c1 c3 @@ -117,9 +137,11 @@ step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step c1: COMMIT; step c3: COMMIT; @@ -128,9 +150,11 @@ step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step c3: COMMIT; step c1: COMMIT; @@ -138,9 +162,11 @@ starting permutation: wx1 rxwy2 ry3 c1 c2 c3 step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c1: COMMIT; step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -150,9 +176,11 @@ starting permutation: wx1 rxwy2 ry3 c1 c3 c2 step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c1: COMMIT; step c3: COMMIT; step c2: COMMIT; @@ -162,9 +190,11 @@ starting permutation: wx1 rxwy2 ry3 c2 c1 c3 step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c2: COMMIT; step c1: COMMIT; step c3: COMMIT; @@ -173,9 +203,11 @@ starting permutation: wx1 rxwy2 ry3 c2 c3 c1 step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c2: COMMIT; step c3: COMMIT; step c1: COMMIT; @@ -184,9 +216,11 @@ starting permutation: wx1 rxwy2 ry3 c3 c1 c2 step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step c1: COMMIT; step c2: COMMIT; @@ -195,9 +229,11 @@ starting permutation: wx1 rxwy2 ry3 c3 c2 c1 step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step c2: COMMIT; step c1: COMMIT; @@ -205,9 +241,11 @@ step c1: COMMIT; starting permutation: wx1 ry3 c1 rxwy2 c2 c3 step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c1: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; @@ -216,9 +254,11 @@ step c3: COMMIT; starting permutation: wx1 ry3 c1 rxwy2 c3 c2 step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c1: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); step c3: COMMIT; @@ -227,9 +267,11 @@ step c2: COMMIT; starting permutation: wx1 ry3 c1 c3 rxwy2 c2 step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c1: COMMIT; step c3: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); @@ -238,9 +280,11 @@ step c2: COMMIT; starting permutation: wx1 ry3 rxwy2 c1 c2 c3 step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c1: COMMIT; step c2: COMMIT; @@ -250,9 +294,11 @@ step c3: COMMIT; starting permutation: wx1 ry3 rxwy2 c1 c3 c2 step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c1: COMMIT; step c3: COMMIT; @@ -262,9 +308,11 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: wx1 ry3 rxwy2 c2 c1 c3 step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step c1: COMMIT; @@ -273,9 +321,11 @@ step c3: COMMIT; starting permutation: wx1 ry3 rxwy2 c2 c3 c1 step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step c3: COMMIT; @@ -284,9 +334,11 @@ step c1: COMMIT; starting permutation: wx1 ry3 rxwy2 c3 c1 c2 step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c3: COMMIT; step c1: COMMIT; @@ -295,9 +347,11 @@ step c2: COMMIT; starting permutation: wx1 ry3 rxwy2 c3 c2 c1 step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c3: COMMIT; step c2: COMMIT; @@ -306,9 +360,11 @@ step c1: COMMIT; starting permutation: wx1 ry3 c3 c1 rxwy2 c2 step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step c1: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); @@ -317,9 +373,11 @@ step c2: COMMIT; starting permutation: wx1 ry3 c3 rxwy2 c1 c2 step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); step c1: COMMIT; @@ -328,9 +386,11 @@ step c2: COMMIT; starting permutation: wx1 ry3 c3 rxwy2 c2 c1 step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; @@ -342,9 +402,11 @@ step wx1: update D1 set id = id + 1; step c1: COMMIT; step c2: COMMIT; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step c3: COMMIT; starting permutation: rxwy2 wx1 c1 ry3 c2 c3 @@ -352,9 +414,11 @@ step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step c1: COMMIT; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions step c3: COMMIT; @@ -364,9 +428,11 @@ step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step c1: COMMIT; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -377,9 +443,11 @@ step wx1: update D1 set id = id + 1; step c2: COMMIT; step c1: COMMIT; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step c3: COMMIT; starting permutation: rxwy2 wx1 c2 ry3 c1 c3 @@ -387,9 +455,11 @@ step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step c2: COMMIT; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step c1: COMMIT; step c3: COMMIT; @@ -398,9 +468,11 @@ step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step c2: COMMIT; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step c3: COMMIT; step c1: COMMIT; @@ -408,9 +480,11 @@ starting permutation: rxwy2 wx1 ry3 c1 c2 c3 step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c1: COMMIT; step c2: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions @@ -420,9 +494,11 @@ starting permutation: rxwy2 wx1 ry3 c1 c3 c2 step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c1: COMMIT; step c3: COMMIT; step c2: COMMIT; @@ -432,9 +508,11 @@ starting permutation: rxwy2 wx1 ry3 c2 c1 c3 step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c2: COMMIT; step c1: COMMIT; step c3: COMMIT; @@ -443,9 +521,11 @@ starting permutation: rxwy2 wx1 ry3 c2 c3 c1 step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c2: COMMIT; step c3: COMMIT; step c1: COMMIT; @@ -454,9 +534,11 @@ starting permutation: rxwy2 wx1 ry3 c3 c1 c2 step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step c1: COMMIT; step c2: COMMIT; @@ -465,9 +547,11 @@ starting permutation: rxwy2 wx1 ry3 c3 c2 c1 step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step c2: COMMIT; step c1: COMMIT; @@ -478,9 +562,11 @@ step c2: COMMIT; step wx1: update D1 set id = id + 1; step c1: COMMIT; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step c3: COMMIT; starting permutation: rxwy2 c2 wx1 ry3 c1 c3 @@ -488,9 +574,11 @@ step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step c1: COMMIT; step c3: COMMIT; @@ -499,9 +587,11 @@ step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step wx1: update D1 set id = id + 1; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step c3: COMMIT; step c1: COMMIT; @@ -509,9 +599,11 @@ starting permutation: rxwy2 c2 ry3 wx1 c1 c3 step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step wx1: update D1 set id = id + 1; step c1: COMMIT; step c3: COMMIT; @@ -520,9 +612,11 @@ starting permutation: rxwy2 c2 ry3 wx1 c3 c1 step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step wx1: update D1 set id = id + 1; step c3: COMMIT; step c1: COMMIT; @@ -531,9 +625,11 @@ starting permutation: rxwy2 c2 ry3 c3 wx1 c1 step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step ry3: select id from D2; -id +id +-- + 2 +(1 row) -2 step c3: COMMIT; step wx1: update D1 set id = id + 1; step c1: COMMIT; @@ -541,9 +637,11 @@ step c1: COMMIT; starting permutation: rxwy2 ry3 wx1 c1 c2 c3 step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step c1: COMMIT; step c2: COMMIT; @@ -553,9 +651,11 @@ step c3: COMMIT; starting permutation: rxwy2 ry3 wx1 c1 c3 c2 step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step c1: COMMIT; step c3: COMMIT; @@ -565,9 +665,11 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: rxwy2 ry3 wx1 c2 c1 c3 step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step c2: COMMIT; step c1: COMMIT; @@ -576,9 +678,11 @@ step c3: COMMIT; starting permutation: rxwy2 ry3 wx1 c2 c3 c1 step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step c2: COMMIT; step c3: COMMIT; @@ -587,9 +691,11 @@ step c1: COMMIT; starting permutation: rxwy2 ry3 wx1 c3 c1 c2 step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step c3: COMMIT; step c1: COMMIT; @@ -598,9 +704,11 @@ step c2: COMMIT; starting permutation: rxwy2 ry3 wx1 c3 c2 c1 step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step c3: COMMIT; step c2: COMMIT; @@ -609,9 +717,11 @@ step c1: COMMIT; starting permutation: rxwy2 ry3 c2 wx1 c1 c3 step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c2: COMMIT; step wx1: update D1 set id = id + 1; step c1: COMMIT; @@ -620,9 +730,11 @@ step c3: COMMIT; starting permutation: rxwy2 ry3 c2 wx1 c3 c1 step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c2: COMMIT; step wx1: update D1 set id = id + 1; step c3: COMMIT; @@ -631,9 +743,11 @@ step c1: COMMIT; starting permutation: rxwy2 ry3 c2 c3 wx1 c1 step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c2: COMMIT; step c3: COMMIT; step wx1: update D1 set id = id + 1; @@ -642,9 +756,11 @@ step c1: COMMIT; starting permutation: rxwy2 ry3 c3 wx1 c1 c2 step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step wx1: update D1 set id = id + 1; step c1: COMMIT; @@ -653,9 +769,11 @@ step c2: COMMIT; starting permutation: rxwy2 ry3 c3 wx1 c2 c1 step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step wx1: update D1 set id = id + 1; step c2: COMMIT; @@ -664,9 +782,11 @@ step c1: COMMIT; starting permutation: rxwy2 ry3 c3 c2 wx1 c1 step rxwy2: update D2 set id = (select id+1 from D1); step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step c2: COMMIT; step wx1: update D1 set id = id + 1; @@ -674,9 +794,11 @@ step c1: COMMIT; starting permutation: ry3 wx1 c1 rxwy2 c2 c3 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step c1: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); @@ -685,9 +807,11 @@ step c3: COMMIT; starting permutation: ry3 wx1 c1 rxwy2 c3 c2 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step c1: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); @@ -696,9 +820,11 @@ step c2: COMMIT; starting permutation: ry3 wx1 c1 c3 rxwy2 c2 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step c1: COMMIT; step c3: COMMIT; @@ -707,9 +833,11 @@ step c2: COMMIT; starting permutation: ry3 wx1 rxwy2 c1 c2 c3 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step c1: COMMIT; @@ -719,9 +847,11 @@ step c3: COMMIT; starting permutation: ry3 wx1 rxwy2 c1 c3 c2 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step c1: COMMIT; @@ -731,9 +861,11 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry3 wx1 rxwy2 c2 c1 c3 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; @@ -742,9 +874,11 @@ step c3: COMMIT; starting permutation: ry3 wx1 rxwy2 c2 c3 c1 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; @@ -753,9 +887,11 @@ step c1: COMMIT; starting permutation: ry3 wx1 rxwy2 c3 c1 c2 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step c3: COMMIT; @@ -764,9 +900,11 @@ step c2: COMMIT; starting permutation: ry3 wx1 rxwy2 c3 c2 c1 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); step c3: COMMIT; @@ -775,9 +913,11 @@ step c1: COMMIT; starting permutation: ry3 wx1 c3 c1 rxwy2 c2 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step c3: COMMIT; step c1: COMMIT; @@ -786,9 +926,11 @@ step c2: COMMIT; starting permutation: ry3 wx1 c3 rxwy2 c1 c2 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step c3: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); @@ -797,9 +939,11 @@ step c2: COMMIT; starting permutation: ry3 wx1 c3 rxwy2 c2 c1 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step wx1: update D1 set id = id + 1; step c3: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); @@ -808,9 +952,11 @@ step c1: COMMIT; starting permutation: ry3 rxwy2 wx1 c1 c2 c3 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step c1: COMMIT; @@ -820,9 +966,11 @@ step c3: COMMIT; starting permutation: ry3 rxwy2 wx1 c1 c3 c2 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step c1: COMMIT; @@ -832,9 +980,11 @@ ERROR: could not serialize access due to read/write dependencies among transact starting permutation: ry3 rxwy2 wx1 c2 c1 c3 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step c2: COMMIT; @@ -843,9 +993,11 @@ step c3: COMMIT; starting permutation: ry3 rxwy2 wx1 c2 c3 c1 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step c2: COMMIT; @@ -854,9 +1006,11 @@ step c1: COMMIT; starting permutation: ry3 rxwy2 wx1 c3 c1 c2 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step c3: COMMIT; @@ -865,9 +1019,11 @@ step c2: COMMIT; starting permutation: ry3 rxwy2 wx1 c3 c2 c1 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; step c3: COMMIT; @@ -876,9 +1032,11 @@ step c1: COMMIT; starting permutation: ry3 rxwy2 c2 wx1 c1 c3 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step wx1: update D1 set id = id + 1; @@ -887,9 +1045,11 @@ step c3: COMMIT; starting permutation: ry3 rxwy2 c2 wx1 c3 c1 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step wx1: update D1 set id = id + 1; @@ -898,9 +1058,11 @@ step c1: COMMIT; starting permutation: ry3 rxwy2 c2 c3 wx1 c1 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; step c3: COMMIT; @@ -909,9 +1071,11 @@ step c1: COMMIT; starting permutation: ry3 rxwy2 c3 wx1 c1 c2 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c3: COMMIT; step wx1: update D1 set id = id + 1; @@ -920,9 +1084,11 @@ step c2: COMMIT; starting permutation: ry3 rxwy2 c3 wx1 c2 c1 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c3: COMMIT; step wx1: update D1 set id = id + 1; @@ -931,9 +1097,11 @@ step c1: COMMIT; starting permutation: ry3 rxwy2 c3 c2 wx1 c1 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step rxwy2: update D2 set id = (select id+1 from D1); step c3: COMMIT; step c2: COMMIT; @@ -942,9 +1110,11 @@ step c1: COMMIT; starting permutation: ry3 c3 wx1 c1 rxwy2 c2 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step wx1: update D1 set id = id + 1; step c1: COMMIT; @@ -953,9 +1123,11 @@ step c2: COMMIT; starting permutation: ry3 c3 wx1 rxwy2 c1 c2 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); @@ -964,9 +1136,11 @@ step c2: COMMIT; starting permutation: ry3 c3 wx1 rxwy2 c2 c1 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step wx1: update D1 set id = id + 1; step rxwy2: update D2 set id = (select id+1 from D1); @@ -975,9 +1149,11 @@ step c1: COMMIT; starting permutation: ry3 c3 rxwy2 wx1 c1 c2 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; @@ -986,9 +1162,11 @@ step c2: COMMIT; starting permutation: ry3 c3 rxwy2 wx1 c2 c1 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); step wx1: update D1 set id = id + 1; @@ -997,9 +1175,11 @@ step c1: COMMIT; starting permutation: ry3 c3 rxwy2 c2 wx1 c1 step ry3: select id from D2; -id +id +-- + 1 +(1 row) -1 step c3: COMMIT; step rxwy2: update D2 set id = (select id+1 from D1); step c2: COMMIT; diff --git a/src/test/isolation/expected/update-conflict-out.out b/src/test/isolation/expected/update-conflict-out.out index 32be3269b328b..1e82bd4de0388 100644 --- a/src/test/isolation/expected/update-conflict-out.out +++ b/src/test/isolation/expected/update-conflict-out.out @@ -2,7 +2,9 @@ Parsed test spec with 3 sessions starting permutation: foo_select bar_insert foo_insert foo_commit trouble_update bar_select bar_commit trouble_abort step foo_select: SELECT * FROM txn0 WHERE id = 42; -id val +id|val +--+--- +(0 rows) step bar_insert: INSERT INTO txn0 SELECT 42, 'bar_insert'; step foo_insert: INSERT INTO txn1 SELECT 7, 'foo_insert'; @@ -15,7 +17,9 @@ step trouble_abort: ABORT; starting permutation: foo_select bar_insert foo_insert foo_commit trouble_delete bar_select bar_commit trouble_abort step foo_select: SELECT * FROM txn0 WHERE id = 42; -id val +id|val +--+--- +(0 rows) step bar_insert: INSERT INTO txn0 SELECT 42, 'bar_insert'; step foo_insert: INSERT INTO txn1 SELECT 7, 'foo_insert'; diff --git a/src/test/isolation/expected/vacuum-reltuples.out b/src/test/isolation/expected/vacuum-reltuples.out index 337b7ab252880..cdbe7f3a6075a 100644 --- a/src/test/isolation/expected/vacuum-reltuples.out +++ b/src/test/isolation/expected/vacuum-reltuples.out @@ -11,9 +11,11 @@ step stats: select relpages, reltuples from pg_class where oid='smalltbl'::regclass; -relpages reltuples +relpages|reltuples +--------+--------- + 1| 21 +(1 row) -1 21 starting permutation: modify open fetch1 vac close stats step modify: @@ -26,9 +28,11 @@ step open: step fetch1: fetch next from c1; -dummy +dummy +----- + 1 +(1 row) -1 step vac: vacuum smalltbl; @@ -39,9 +43,11 @@ step stats: select relpages, reltuples from pg_class where oid='smalltbl'::regclass; -relpages reltuples +relpages|reltuples +--------+--------- + 1| 20 +(1 row) -1 20 starting permutation: modify vac stats step modify: @@ -54,6 +60,8 @@ step stats: select relpages, reltuples from pg_class where oid='smalltbl'::regclass; -relpages reltuples +relpages|reltuples +--------+--------- + 1| 21 +(1 row) -1 21 diff --git a/src/test/isolation/isolationtester.c b/src/test/isolation/isolationtester.c index 71546bf923857..01a420bcd3a1f 100644 --- a/src/test/isolation/isolationtester.c +++ b/src/test/isolation/isolationtester.c @@ -1089,23 +1089,13 @@ step_has_blocker(PermutationStep *pstep) static void printResultSet(PGresult *res) { - int nFields; - int i, - j; - - /* first, print out the attribute names */ - nFields = PQnfields(res); - for (i = 0; i < nFields; i++) - printf("%-15s", PQfname(res, i)); - printf("\n\n"); + PQprintOpt popt; - /* next, print out the rows */ - for (i = 0; i < PQntuples(res); i++) - { - for (j = 0; j < nFields; j++) - printf("%-15s", PQgetvalue(res, i, j)); - printf("\n"); - } + memset(&popt, 0, sizeof(popt)); + popt.header = true; + popt.align = true; + popt.fieldSep = "|"; + PQprint(stdout, res, &popt); } /* notice processor for regular user sessions */ diff --git a/src/test/modules/brin/expected/summarization-and-inprogress-insertion.out b/src/test/modules/brin/expected/summarization-and-inprogress-insertion.out index ddb90f4dba138..2a4755d099868 100644 --- a/src/test/modules/brin/expected/summarization-and-inprogress-insertion.out +++ b/src/test/modules/brin/expected/summarization-and-inprogress-insertion.out @@ -2,38 +2,50 @@ Parsed test spec with 2 sessions starting permutation: s2check s1b s2b s1i s2summ s1c s2c s2check step s2check: SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); -itemoffset blknum attnum allnulls hasnulls placeholder value +itemoffset|blknum|attnum|allnulls|hasnulls|placeholder|value +----------+------+------+--------+--------+-----------+-------- + 1| 0| 1|f |f |f |{1 .. 1} +(1 row) -1 0 1 f f f {1 .. 1} step s1b: BEGIN ISOLATION LEVEL REPEATABLE READ; step s2b: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; -?column? +?column? +-------- + 1 +(1 row) -1 step s1i: INSERT INTO brin_iso VALUES (1000); step s2summ: SELECT brin_summarize_new_values('brinidx'::regclass); brin_summarize_new_values +------------------------- + 1 +(1 row) -1 step s1c: COMMIT; step s2c: COMMIT; step s2check: SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); -itemoffset blknum attnum allnulls hasnulls placeholder value +itemoffset|blknum|attnum|allnulls|hasnulls|placeholder|value +----------+------+------+--------+--------+-----------+----------- + 1| 0| 1|f |f |f |{1 .. 1} + 2| 1| 1|f |f |f |{1 .. 1000} +(2 rows) -1 0 1 f f f {1 .. 1} -2 1 1 f f f {1 .. 1000} starting permutation: s2check s1b s1i s2vacuum s1c s2check step s2check: SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); -itemoffset blknum attnum allnulls hasnulls placeholder value +itemoffset|blknum|attnum|allnulls|hasnulls|placeholder|value +----------+------+------+--------+--------+-----------+-------- + 1| 0| 1|f |f |f |{1 .. 1} +(1 row) -1 0 1 f f f {1 .. 1} step s1b: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1i: INSERT INTO brin_iso VALUES (1000); step s2vacuum: VACUUM brin_iso; step s1c: COMMIT; step s2check: SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); -itemoffset blknum attnum allnulls hasnulls placeholder value +itemoffset|blknum|attnum|allnulls|hasnulls|placeholder|value +----------+------+------+--------+--------+-----------+----------- + 1| 0| 1|f |f |f |{1 .. 1} + 2| 1| 1|f |f |f |{1 .. 1000} +(2 rows) -1 0 1 f f f {1 .. 1} -2 1 1 f f f {1 .. 1000} diff --git a/src/test/modules/delay_execution/expected/partition-addition.out b/src/test/modules/delay_execution/expected/partition-addition.out index 7c91090eeff8c..7d6572b2db289 100644 --- a/src/test/modules/delay_execution/expected/partition-addition.out +++ b/src/test/modules/delay_execution/expected/partition-addition.out @@ -3,8 +3,10 @@ Parsed test spec with 2 sessions starting permutation: s2lock s1exec s2addp s2unlock step s2lock: SELECT pg_advisory_lock(12345); pg_advisory_lock +---------------- + +(1 row) - step s1exec: LOAD 'delay_execution'; SET delay_execution.post_planning_lock_id = 12345; SELECT * FROM foo WHERE a <> 1 AND a <> (SELECT 3); @@ -13,9 +15,13 @@ step s2addp: CREATE TABLE foo2 (LIKE foo); INSERT INTO foo VALUES (2, 'ADD2'); step s2unlock: SELECT pg_advisory_unlock(12345); pg_advisory_unlock +------------------ +t +(1 row) -t step s1exec: <... completed> -a b +a|b +-+--- +4|GHI +(1 row) -4 GHI diff --git a/src/test/modules/delay_execution/expected/partition-removal-1.out b/src/test/modules/delay_execution/expected/partition-removal-1.out index 427f41c9aae37..b81b9995e9a31 100644 --- a/src/test/modules/delay_execution/expected/partition-removal-1.out +++ b/src/test/modules/delay_execution/expected/partition-removal-1.out @@ -3,121 +3,161 @@ Parsed test spec with 3 sessions starting permutation: s3lock s1b s1exec s2remp s3check s3unlock s3check s1c step s3lock: SELECT pg_advisory_lock(12543); pg_advisory_lock +---------------- + +(1 row) - step s1b: BEGIN; step s1exec: SELECT * FROM partrem WHERE a <> 1 AND a <> (SELECT 3); step s2remp: ALTER TABLE partrem DETACH PARTITION partrem2 CONCURRENTLY; step s3check: SELECT * FROM partrem; -a b +a|b +-+--- +1|ABC +3|DEF +(2 rows) -1 ABC -3 DEF step s3unlock: SELECT pg_advisory_unlock(12543); pg_advisory_unlock +------------------ +t +(1 row) -t step s1exec: <... completed> -a b +a|b +-+--- +2|JKL +(1 row) -2 JKL step s3check: SELECT * FROM partrem; -a b +a|b +-+--- +1|ABC +3|DEF +(2 rows) -1 ABC -3 DEF step s1c: COMMIT; step s2remp: <... completed> starting permutation: s3lock s1brr s1exec s2remp s3check s3unlock s3check s1c step s3lock: SELECT pg_advisory_lock(12543); pg_advisory_lock +---------------- + +(1 row) - step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1exec: SELECT * FROM partrem WHERE a <> 1 AND a <> (SELECT 3); step s2remp: ALTER TABLE partrem DETACH PARTITION partrem2 CONCURRENTLY; step s3check: SELECT * FROM partrem; -a b +a|b +-+--- +1|ABC +3|DEF +(2 rows) -1 ABC -3 DEF step s3unlock: SELECT pg_advisory_unlock(12543); pg_advisory_unlock +------------------ +t +(1 row) -t step s1exec: <... completed> -a b +a|b +-+--- +2|JKL +(1 row) -2 JKL step s3check: SELECT * FROM partrem; -a b +a|b +-+--- +1|ABC +3|DEF +(2 rows) -1 ABC -3 DEF step s1c: COMMIT; step s2remp: <... completed> starting permutation: s3lock s1b s1exec2 s2remp s3unlock s1c step s3lock: SELECT pg_advisory_lock(12543); pg_advisory_lock +---------------- + +(1 row) - step s1b: BEGIN; step s1exec2: SELECT * FROM partrem WHERE a <> (SELECT 2) AND a <> 1; step s2remp: ALTER TABLE partrem DETACH PARTITION partrem2 CONCURRENTLY; step s3unlock: SELECT pg_advisory_unlock(12543); pg_advisory_unlock +------------------ +t +(1 row) -t step s1exec2: <... completed> -a b +a|b +-+--- +3|DEF +(1 row) -3 DEF step s1c: COMMIT; step s2remp: <... completed> starting permutation: s3lock s1brr s1exec2 s2remp s3unlock s1c step s3lock: SELECT pg_advisory_lock(12543); pg_advisory_lock +---------------- + +(1 row) - step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1exec2: SELECT * FROM partrem WHERE a <> (SELECT 2) AND a <> 1; step s2remp: ALTER TABLE partrem DETACH PARTITION partrem2 CONCURRENTLY; step s3unlock: SELECT pg_advisory_unlock(12543); pg_advisory_unlock +------------------ +t +(1 row) -t step s1exec2: <... completed> -a b +a|b +-+--- +3|DEF +(1 row) -3 DEF step s1c: COMMIT; step s2remp: <... completed> starting permutation: s3lock s1brr s1prepare s2remp s1execprep s3unlock s1check s1c s1check s1dealloc step s3lock: SELECT pg_advisory_lock(12543); pg_advisory_lock +---------------- + +(1 row) - step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1prepare: PREPARE ins AS INSERT INTO partrem VALUES ($1, 'GHI'); step s2remp: ALTER TABLE partrem DETACH PARTITION partrem2 CONCURRENTLY; step s1execprep: EXECUTE ins(2); step s3unlock: SELECT pg_advisory_unlock(12543); pg_advisory_unlock +------------------ +t +(1 row) -t step s1execprep: <... completed> step s1check: SELECT * FROM partrem WHERE b = 'GHI'; -a b +a|b +-+--- +2|GHI +(1 row) -2 GHI step s1c: COMMIT; step s2remp: <... completed> step s1check: SELECT * FROM partrem WHERE b = 'GHI'; -a b +a|b +-+- +(0 rows) step s1dealloc: DEALLOCATE ins; @@ -127,49 +167,67 @@ step s1prepare: PREPARE ins AS INSERT INTO partrem VALUES ($1, 'GHI'); step s2remp: ALTER TABLE partrem DETACH PARTITION partrem2 CONCURRENTLY; step s3lock: SELECT pg_advisory_lock(12543); pg_advisory_lock +---------------- + +(1 row) - step s1execprep: EXECUTE ins(2); step s3unlock: SELECT pg_advisory_unlock(12543); pg_advisory_unlock +------------------ +t +(1 row) -t step s1execprep: <... completed> step s1check: SELECT * FROM partrem WHERE b = 'GHI'; -a b +a|b +-+--- +2|GHI +(1 row) -2 GHI step s1c: COMMIT; step s2remp: <... completed> step s1check: SELECT * FROM partrem WHERE b = 'GHI'; -a b +a|b +-+- +(0 rows) step s1dealloc: DEALLOCATE ins; starting permutation: s1brr s1check s3lock s2remp s1prepare s1execprep s3unlock s1check s1c s1check s1dealloc step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1check: SELECT * FROM partrem WHERE b = 'GHI'; -a b +a|b +-+- +(0 rows) step s3lock: SELECT pg_advisory_lock(12543); pg_advisory_lock +---------------- + +(1 row) - step s2remp: ALTER TABLE partrem DETACH PARTITION partrem2 CONCURRENTLY; step s1prepare: PREPARE ins AS INSERT INTO partrem VALUES ($1, 'GHI'); step s1execprep: EXECUTE ins(2); step s3unlock: SELECT pg_advisory_unlock(12543); pg_advisory_unlock +------------------ +t +(1 row) -t step s1execprep: <... completed> step s1check: SELECT * FROM partrem WHERE b = 'GHI'; -a b +a|b +-+--- +2|GHI +(1 row) -2 GHI step s1c: COMMIT; step s2remp: <... completed> step s1check: SELECT * FROM partrem WHERE b = 'GHI'; -a b +a|b +-+- +(0 rows) step s1dealloc: DEALLOCATE ins; diff --git a/src/test/modules/snapshot_too_old/expected/sto_using_cursor.out b/src/test/modules/snapshot_too_old/expected/sto_using_cursor.out index 8cc29ec82f2b1..4359bf2ed9030 100644 --- a/src/test/modules/snapshot_too_old/expected/sto_using_cursor.out +++ b/src/test/modules/snapshot_too_old/expected/sto_using_cursor.out @@ -3,29 +3,39 @@ Parsed test spec with 2 sessions starting permutation: s1decl s1f1 s1sleep s1f2 s2u step s1decl: DECLARE cursor1 CURSOR FOR SELECT c FROM sto1; step s1f1: FETCH FIRST FROM cursor1; -c +c +- +1 +(1 row) -1 step s1sleep: SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; -setting pg_sleep +setting|pg_sleep +-------+-------- + 0| +(1 row) -0 step s1f2: FETCH FIRST FROM cursor1; -c +c +- +1 +(1 row) -1 step s2u: UPDATE sto1 SET c = 1001 WHERE c = 1; starting permutation: s1decl s1f1 s1sleep s2u s1f2 step s1decl: DECLARE cursor1 CURSOR FOR SELECT c FROM sto1; step s1f1: FETCH FIRST FROM cursor1; -c +c +- +1 +(1 row) -1 step s1sleep: SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; -setting pg_sleep +setting|pg_sleep +-------+-------- + 0| +(1 row) -0 step s2u: UPDATE sto1 SET c = 1001 WHERE c = 1; step s1f2: FETCH FIRST FROM cursor1; ERROR: snapshot too old @@ -33,14 +43,18 @@ ERROR: snapshot too old starting permutation: s1decl s1f1 s2u s1sleep s1f2 step s1decl: DECLARE cursor1 CURSOR FOR SELECT c FROM sto1; step s1f1: FETCH FIRST FROM cursor1; -c +c +- +1 +(1 row) -1 step s2u: UPDATE sto1 SET c = 1001 WHERE c = 1; step s1sleep: SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; -setting pg_sleep +setting|pg_sleep +-------+-------- + 0| +(1 row) -0 step s1f2: FETCH FIRST FROM cursor1; ERROR: snapshot too old @@ -48,13 +62,17 @@ starting permutation: s1decl s2u s1f1 s1sleep s1f2 step s1decl: DECLARE cursor1 CURSOR FOR SELECT c FROM sto1; step s2u: UPDATE sto1 SET c = 1001 WHERE c = 1; step s1f1: FETCH FIRST FROM cursor1; -c +c +- +1 +(1 row) -1 step s1sleep: SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; -setting pg_sleep +setting|pg_sleep +-------+-------- + 0| +(1 row) -0 step s1f2: FETCH FIRST FROM cursor1; ERROR: snapshot too old @@ -62,12 +80,16 @@ starting permutation: s2u s1decl s1f1 s1sleep s1f2 step s2u: UPDATE sto1 SET c = 1001 WHERE c = 1; step s1decl: DECLARE cursor1 CURSOR FOR SELECT c FROM sto1; step s1f1: FETCH FIRST FROM cursor1; -c +c +- +2 +(1 row) -2 step s1sleep: SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; -setting pg_sleep +setting|pg_sleep +-------+-------- + 0| +(1 row) -0 step s1f2: FETCH FIRST FROM cursor1; ERROR: snapshot too old diff --git a/src/test/modules/snapshot_too_old/expected/sto_using_hash_index.out b/src/test/modules/snapshot_too_old/expected/sto_using_hash_index.out index bf94054790479..11f827fbfedc2 100644 --- a/src/test/modules/snapshot_too_old/expected/sto_using_hash_index.out +++ b/src/test/modules/snapshot_too_old/expected/sto_using_hash_index.out @@ -3,13 +3,17 @@ Parsed test spec with 2 sessions starting permutation: noseq s1f1 s2sleep s2u s1f2 step noseq: SET enable_seqscan = false; step s1f1: SELECT c FROM sto1 where c = 1000; -c + c +---- +1000 +(1 row) -1000 step s2sleep: SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; -setting pg_sleep +setting|pg_sleep +-------+-------- + 0| +(1 row) -0 step s2u: UPDATE sto1 SET c = 1001 WHERE c = 1000; step s1f2: SELECT c FROM sto1 where c = 1001; ERROR: snapshot too old diff --git a/src/test/modules/snapshot_too_old/expected/sto_using_select.out b/src/test/modules/snapshot_too_old/expected/sto_using_select.out index eb15bc23bf919..3067e054547e2 100644 --- a/src/test/modules/snapshot_too_old/expected/sto_using_select.out +++ b/src/test/modules/snapshot_too_old/expected/sto_using_select.out @@ -2,54 +2,72 @@ Parsed test spec with 2 sessions starting permutation: s1f1 s1sleep s1f2 s2u step s1f1: SELECT c FROM sto1 ORDER BY c LIMIT 1; -c +c +- +1 +(1 row) -1 step s1sleep: SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; -setting pg_sleep +setting|pg_sleep +-------+-------- + 0| +(1 row) -0 step s1f2: SELECT c FROM sto1 ORDER BY c LIMIT 1; -c +c +- +1 +(1 row) -1 step s2u: UPDATE sto1 SET c = 1001 WHERE c = 1; starting permutation: s1f1 s1sleep s2u s1f2 step s1f1: SELECT c FROM sto1 ORDER BY c LIMIT 1; -c +c +- +1 +(1 row) -1 step s1sleep: SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; -setting pg_sleep +setting|pg_sleep +-------+-------- + 0| +(1 row) -0 step s2u: UPDATE sto1 SET c = 1001 WHERE c = 1; step s1f2: SELECT c FROM sto1 ORDER BY c LIMIT 1; ERROR: snapshot too old starting permutation: s1f1 s2u s1sleep s1f2 step s1f1: SELECT c FROM sto1 ORDER BY c LIMIT 1; -c +c +- +1 +(1 row) -1 step s2u: UPDATE sto1 SET c = 1001 WHERE c = 1; step s1sleep: SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; -setting pg_sleep +setting|pg_sleep +-------+-------- + 0| +(1 row) -0 step s1f2: SELECT c FROM sto1 ORDER BY c LIMIT 1; ERROR: snapshot too old starting permutation: s2u s1f1 s1sleep s1f2 step s2u: UPDATE sto1 SET c = 1001 WHERE c = 1; step s1f1: SELECT c FROM sto1 ORDER BY c LIMIT 1; -c +c +- +2 +(1 row) -2 step s1sleep: SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; -setting pg_sleep +setting|pg_sleep +-------+-------- + 0| +(1 row) -0 step s1f2: SELECT c FROM sto1 ORDER BY c LIMIT 1; ERROR: snapshot too old From 126cdaf47af275f76b2f2ddb023bfdc6f018ae30 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 23 Jun 2021 14:01:32 -0400 Subject: [PATCH 513/671] Don't assume GSSAPI result strings are null-terminated. Our uses of gss_display_status() and gss_display_name() assumed that the gss_buffer_desc strings returned by those functions are null-terminated. It appears that they generally are, given the lack of field complaints up to now. However, the available documentation does not promise this, and some man pages for gss_display_status() show examples that rely on the gss_buffer_desc.length field instead of expecting null termination. Also, we now have a report that on some implementations, clang's address sanitizer is of the opinion that the byte after the specified length is undefined. Hence, change the code to rely on the length field instead. This might well be cosmetic rather than fixing any real bug, but it's hard to be sure, so back-patch to all supported branches. While here, also back-patch the v12 changes that made pg_GSS_error deal honestly with multiple messages available from gss_display_status. Per report from Sudheer H R. Discussion: https://postgr.es/m/5372B6D4-8276-42C0-B8FB-BD0918826FC3@tekenlight.com --- src/backend/libpq/auth.c | 27 ++++++++++++++++--------- src/backend/libpq/be-gssapi-common.c | 11 +++++----- src/interfaces/libpq/fe-gssapi-common.c | 3 ++- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index 68372fcea87e3..967b5ef73cc3b 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -1213,6 +1213,7 @@ pg_GSS_checkauth(Port *port) min_stat, lmin_s; gss_buffer_desc gbuf; + char *princ; /* * Get the name of the user that authenticated, and compare it to the pg @@ -1226,6 +1227,15 @@ pg_GSS_checkauth(Port *port) return STATUS_ERROR; } + /* + * gbuf.value might not be null-terminated, so turn it into a regular + * null-terminated string. + */ + princ = palloc(gbuf.length + 1); + memcpy(princ, gbuf.value, gbuf.length); + princ[gbuf.length] = '\0'; + gss_release_buffer(&lmin_s, &gbuf); + /* * Copy the original name of the authenticated principal into our backend * memory for display later. @@ -1234,15 +1244,15 @@ pg_GSS_checkauth(Port *port) * waiting for the usermap check below, because authentication has already * succeeded and we want the log file to reflect that. */ - port->gss->princ = MemoryContextStrdup(TopMemoryContext, gbuf.value); - set_authn_id(port, gbuf.value); + port->gss->princ = MemoryContextStrdup(TopMemoryContext, princ); + set_authn_id(port, princ); /* * Split the username at the realm separator */ - if (strchr(gbuf.value, '@')) + if (strchr(princ, '@')) { - char *cp = strchr(gbuf.value, '@'); + char *cp = strchr(princ, '@'); /* * If we are not going to include the realm in the username that is @@ -1269,7 +1279,7 @@ pg_GSS_checkauth(Port *port) elog(DEBUG2, "GSSAPI realm (%s) and configured realm (%s) don't match", cp, port->hba->krb_realm); - gss_release_buffer(&lmin_s, &gbuf); + pfree(princ); return STATUS_ERROR; } } @@ -1278,15 +1288,14 @@ pg_GSS_checkauth(Port *port) { elog(DEBUG2, "GSSAPI did not return realm but realm matching was requested"); - - gss_release_buffer(&lmin_s, &gbuf); + pfree(princ); return STATUS_ERROR; } - ret = check_usermap(port->hba->usermap, port->user_name, gbuf.value, + ret = check_usermap(port->hba->usermap, port->user_name, princ, pg_krb_caseins_users); - gss_release_buffer(&lmin_s, &gbuf); + pfree(princ); return ret; } diff --git a/src/backend/libpq/be-gssapi-common.c b/src/backend/libpq/be-gssapi-common.c index cb2df0bfb3dff..38f58def25cc7 100644 --- a/src/backend/libpq/be-gssapi-common.c +++ b/src/backend/libpq/be-gssapi-common.c @@ -29,8 +29,6 @@ pg_GSS_error_int(char *s, size_t len, OM_uint32 stat, int type) OM_uint32 lmin_s, msg_ctx = 0; - s[0] = '\0'; /* just in case gss_display_status fails */ - do { if (gss_display_status(&lmin_s, stat, type, GSS_C_NO_OID, @@ -43,16 +41,19 @@ pg_GSS_error_int(char *s, size_t len, OM_uint32 stat, int type) i++; } if (i < len) - strlcpy(s + i, gmsg.value, len - i); + memcpy(s + i, gmsg.value, Min(len - i, gmsg.length)); i += gmsg.length; gss_release_buffer(&lmin_s, &gmsg); } while (msg_ctx); - if (i >= len) + /* add nul termination */ + if (i < len) + s[i] = '\0'; + else { elog(COMMERROR, "incomplete GSS error report"); - s[len - 1] = '\0'; /* ensure string is nul-terminated */ + s[len - 1] = '\0'; } } diff --git a/src/interfaces/libpq/fe-gssapi-common.c b/src/interfaces/libpq/fe-gssapi-common.c index b26fbf8a9f91e..9e8aeae11979f 100644 --- a/src/interfaces/libpq/fe-gssapi-common.c +++ b/src/interfaces/libpq/fe-gssapi-common.c @@ -34,7 +34,8 @@ pg_GSS_error_int(PQExpBuffer str, OM_uint32 stat, int type) if (gss_display_status(&lmin_s, stat, type, GSS_C_NO_OID, &msg_ctx, &lmsg) != GSS_S_COMPLETE) break; - appendPQExpBuffer(str, " %s", (char *) lmsg.value); + appendPQExpBufferChar(str, ' '); + appendBinaryPQExpBuffer(str, lmsg.value, lmsg.length); gss_release_buffer(&lmin_s, &lmsg); } while (msg_ctx); } From 2031e1668e5577e64cfed29da69a34903d5a5227 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 23 Jun 2021 14:27:13 -0400 Subject: [PATCH 514/671] Doc: fix confusion about LEAKPROOF in syntax summaries. The syntax summaries for CREATE FUNCTION and allied commands made it look like LEAKPROOF is an alternative to IMMUTABLE/STABLE/VOLATILE, when of course it is an orthogonal option. Improve that. Per gripe from aazamrafeeque0. Thanks to David Johnston for suggestions. Discussion: https://postgr.es/m/162444349581.694.5818572718530259025@wrigleys.postgresql.org --- doc/src/sgml/ref/alter_function.sgml | 3 ++- doc/src/sgml/ref/alter_routine.sgml | 3 ++- doc/src/sgml/ref/create_function.sgml | 7 ++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/doc/src/sgml/ref/alter_function.sgml b/doc/src/sgml/ref/alter_function.sgml index 54e61e7d78858..0ee756a94d926 100644 --- a/doc/src/sgml/ref/alter_function.sgml +++ b/doc/src/sgml/ref/alter_function.sgml @@ -35,7 +35,8 @@ ALTER FUNCTION name [ ( [ [ action is one of: CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT - IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF + IMMUTABLE | STABLE | VOLATILE + [ NOT ] LEAKPROOF [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER PARALLEL { UNSAFE | RESTRICTED | SAFE } COST execution_cost diff --git a/doc/src/sgml/ref/alter_routine.sgml b/doc/src/sgml/ref/alter_routine.sgml index aab4a497938f6..d6c9dea2ebc77 100644 --- a/doc/src/sgml/ref/alter_routine.sgml +++ b/doc/src/sgml/ref/alter_routine.sgml @@ -34,7 +34,8 @@ ALTER ROUTINE name [ ( [ [ action is one of: - IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF + IMMUTABLE | STABLE | VOLATILE + [ NOT ] LEAKPROOF [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER PARALLEL { UNSAFE | RESTRICTED | SAFE } COST execution_cost diff --git a/doc/src/sgml/ref/create_function.sgml b/doc/src/sgml/ref/create_function.sgml index 180e5f5c1f560..7e6d52c7dcf36 100644 --- a/doc/src/sgml/ref/create_function.sgml +++ b/doc/src/sgml/ref/create_function.sgml @@ -28,9 +28,10 @@ CREATE [ OR REPLACE ] FUNCTION { LANGUAGE lang_name | TRANSFORM { FOR TYPE type_name } [, ... ] | WINDOW - | IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF - | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT - | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER + | { IMMUTABLE | STABLE | VOLATILE } + | [ NOT ] LEAKPROOF + | { CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } + | { [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER } | PARALLEL { UNSAFE | RESTRICTED | SAFE } | COST execution_cost | ROWS result_rows From a443c1b2d6a646cf90a8afc193c07ed12a2bf045 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 23 Jun 2021 18:41:39 -0400 Subject: [PATCH 515/671] Allow non-quoted identifiers as isolation test session/step names. For no obvious reason, isolationtester has always insisted that session and step names be written with double quotes. This is fairly tedious and does little for test readability, especially since the names that people actually choose almost always look like normal identifiers. Hence, let's tweak the lexer to allow SQL-like identifiers not only double-quoted strings. (They're SQL-like, not exactly SQL, because I didn't add any case-folding logic. Also there's no provision for U&"..." names, not that anyone's likely to care.) There is one incompatibility introduced by this change: if you write "foo""bar" with no space, that used to be taken as two identifiers, but now it's just one identifier with an embedded quote mark. I converted all the src/test/isolation/ specfiles to remove unnecessary double quotes, but stopped there because my eyes were glazing over already. Like 741d7f104, back-patch to all supported branches, so that this isn't a stumbling block for back-patching isolation test changes. Discussion: https://postgr.es/m/759113.1623861959@sss.pgh.pa.us --- contrib/test_decoding/specs/oldest_xmin.spec | 2 +- src/test/isolation/README | 22 +- src/test/isolation/specparse.y | 14 +- .../isolation/specs/aborted-keyrevoke.spec | 46 +- src/test/isolation/specs/alter-table-1.spec | 298 +- src/test/isolation/specs/alter-table-2.spec | 118 +- src/test/isolation/specs/alter-table-3.spec | 116 +- src/test/isolation/specs/alter-table-4.spec | 26 +- src/test/isolation/specs/async-notify.spec | 56 +- .../isolation/specs/classroom-scheduling.spec | 16 +- src/test/isolation/specs/create-trigger.spec | 68 +- src/test/isolation/specs/deadlock-hard.spec | 66 +- .../isolation/specs/deadlock-parallel.spec | 30 +- src/test/isolation/specs/deadlock-simple.spec | 18 +- src/test/isolation/specs/deadlock-soft-2.spec | 30 +- src/test/isolation/specs/deadlock-soft.spec | 30 +- .../specs/delete-abort-savept-2.spec | 28 +- .../isolation/specs/delete-abort-savept.spec | 32 +- .../detach-partition-concurrently-1.spec | 66 +- .../detach-partition-concurrently-2.spec | 32 +- .../detach-partition-concurrently-3.spec | 84 +- .../detach-partition-concurrently-4.spec | 86 +- .../specs/drop-index-concurrently-1.spec | 36 +- .../specs/eval-plan-qual-trigger.spec | 420 +-- src/test/isolation/specs/eval-plan-qual.spec | 200 +- src/test/isolation/specs/fk-contention.spec | 10 +- src/test/isolation/specs/fk-deadlock.spec | 44 +- src/test/isolation/specs/fk-deadlock2.spec | 38 +- .../isolation/specs/fk-partitioned-1.spec | 56 +- .../isolation/specs/fk-partitioned-2.spec | 30 +- src/test/isolation/specs/freeze-the-dead.spec | 48 +- src/test/isolation/specs/horizons.spec | 128 +- src/test/isolation/specs/index-only-scan.spec | 12 +- src/test/isolation/specs/inherit-temp.spec | 56 +- .../specs/insert-conflict-do-nothing-2.spec | 38 +- .../specs/insert-conflict-do-nothing.spec | 20 +- .../specs/insert-conflict-do-update-2.spec | 20 +- .../specs/insert-conflict-do-update-3.spec | 16 +- .../specs/insert-conflict-do-update.spec | 20 +- .../specs/insert-conflict-specconflict.spec | 192 +- .../specs/lock-committed-keyupdate.spec | 74 +- .../specs/lock-committed-update.spec | 84 +- .../isolation/specs/lock-update-delete.spec | 46 +- .../specs/lock-update-traversal.spec | 30 +- src/test/isolation/specs/multiple-cic.spec | 12 +- .../specs/multiple-row-versions.spec | 32 +- .../specs/multixact-no-deadlock.spec | 24 +- .../isolation/specs/multixact-no-forget.spec | 46 +- src/test/isolation/specs/nowait-2.spec | 20 +- src/test/isolation/specs/nowait-3.spec | 20 +- src/test/isolation/specs/nowait-4.spec | 22 +- src/test/isolation/specs/nowait-5.spec | 20 +- src/test/isolation/specs/nowait.spec | 12 +- src/test/isolation/specs/partial-index.spec | 16 +- .../specs/partition-concurrent-attach.spec | 26 +- .../specs/partition-key-update-1.spec | 56 +- .../specs/partition-key-update-2.spec | 24 +- .../specs/partition-key-update-3.spec | 44 +- .../specs/partition-key-update-4.spec | 38 +- src/test/isolation/specs/plpgsql-toast.spec | 34 +- src/test/isolation/specs/predicate-gin.spec | 94 +- src/test/isolation/specs/predicate-gist.spec | 104 +- src/test/isolation/specs/predicate-hash.spec | 104 +- .../specs/predicate-lock-hot-tuple.spec | 22 +- .../specs/prepared-transactions-cic.spec | 16 +- .../specs/prepared-transactions.spec | 2894 ++++++++--------- src/test/isolation/specs/project-manager.spec | 16 +- .../specs/propagate-lock-delete.spec | 46 +- .../isolation/specs/read-only-anomaly-2.spec | 28 +- .../isolation/specs/read-only-anomaly-3.spec | 26 +- .../isolation/specs/read-only-anomaly.spec | 26 +- .../isolation/specs/read-write-unique-2.spec | 20 +- .../isolation/specs/read-write-unique-3.spec | 14 +- .../isolation/specs/read-write-unique-4.spec | 22 +- .../isolation/specs/read-write-unique.spec | 20 +- src/test/isolation/specs/receipt-report.spec | 20 +- .../specs/referential-integrity.spec | 18 +- .../isolation/specs/reindex-concurrently.spec | 32 +- src/test/isolation/specs/reindex-schema.spec | 22 +- src/test/isolation/specs/ri-trigger.spec | 14 +- src/test/isolation/specs/sequence-ddl.spec | 28 +- .../specs/serializable-parallel-2.spec | 16 +- .../specs/serializable-parallel.spec | 28 +- .../isolation/specs/simple-write-skew.spec | 12 +- src/test/isolation/specs/skip-locked-2.spec | 20 +- src/test/isolation/specs/skip-locked-3.spec | 20 +- src/test/isolation/specs/skip-locked-4.spec | 22 +- src/test/isolation/specs/skip-locked.spec | 16 +- .../specs/temporal-range-integrity.spec | 16 +- src/test/isolation/specs/timeouts.spec | 36 +- src/test/isolation/specs/total-cash.spec | 16 +- .../isolation/specs/truncate-conflict.spec | 34 +- .../isolation/specs/tuplelock-conflict.spec | 90 +- .../isolation/specs/tuplelock-partition.spec | 18 +- .../isolation/specs/tuplelock-update.spec | 32 +- .../specs/tuplelock-upgrade-no-deadlock.spec | 78 +- src/test/isolation/specs/two-ids.spec | 18 +- .../isolation/specs/update-conflict-out.spec | 52 +- .../isolation/specs/update-locked-tuple.spec | 30 +- .../specs/vacuum-concurrent-drop.spec | 32 +- src/test/isolation/specs/vacuum-conflict.spec | 54 +- .../isolation/specs/vacuum-reltuples.spec | 22 +- .../isolation/specs/vacuum-skip-locked.spec | 58 +- src/test/isolation/specscanner.l | 54 +- 104 files changed, 3867 insertions(+), 3841 deletions(-) diff --git a/contrib/test_decoding/specs/oldest_xmin.spec b/contrib/test_decoding/specs/oldest_xmin.spec index da3a8cd512dba..88bd30f5ff76c 100644 --- a/contrib/test_decoding/specs/oldest_xmin.spec +++ b/contrib/test_decoding/specs/oldest_xmin.spec @@ -39,4 +39,4 @@ step "s1_commit" { COMMIT; } # composite type is a rare form of DDL which allows T1 to see the tuple which # will be removed (xmax set) before T1 commits. That is, interlocking doesn't # forbid modifying catalog after someone read it (and didn't commit yet). -permutation "s0_begin" "s0_getxid" "s1_begin" "s1_insert" "s0_alter" "s0_commit" "s0_checkpoint" "s0_get_changes" "s0_get_changes""s1_commit" "s0_vacuum" "s0_get_changes" +permutation "s0_begin" "s0_getxid" "s1_begin" "s1_insert" "s0_alter" "s0_commit" "s0_checkpoint" "s0_get_changes" "s0_get_changes" "s1_commit" "s0_vacuum" "s0_get_changes" diff --git a/src/test/isolation/README b/src/test/isolation/README index 9d568e53543d4..8457a5689fb36 100644 --- a/src/test/isolation/README +++ b/src/test/isolation/README @@ -80,7 +80,7 @@ teardown { } this to clean up in preparation for the next permutation, e.g dropping any test tables created by setup. This part is optional. -session "" +session There are normally several "session" parts in a spec file. Each session is executed in its own connection. A session part consists @@ -91,17 +91,17 @@ session "" Each step has the syntax - step "" { } + step { } - where is a name identifying this step, and SQL is a SQL statement + where is a name identifying this step, and is a SQL statement (or statements, separated by semicolons) that is executed in the step. Step names must be unique across the whole spec file. -permutation "" ... +permutation ... A permutation line specifies a list of steps that are run in that order. Any number of permutation lines can appear. If no permutation lines are - given, the test program automatically generates all possible orderings + given, the test program automatically runs all possible interleavings of the steps from each session (running the steps of any one session in order). Note that the list of steps in a manually specified "permutation" line doesn't actually have to be a permutation of the @@ -109,7 +109,17 @@ permutation "" ... or leave others out. Also, each step name can be annotated with some parenthesized markers, which are described below. -Lines beginning with a # are considered comments. +Session and step names are SQL identifiers, either plain or double-quoted. +A difference from standard SQL is that no case-folding occurs, so that +FOO and "FOO" are the same name while FOO and Foo are different, +whether you quote them or not. You must use quotes if you want to use +an isolation test keyword (such as "permutation") as a name. + +A # character begins a comment, which extends to the end of the line. +(This does not work inside blocks, however. Use the usual SQL +comment conventions there.) + +There is no way to include a "}" character in an block. For each permutation of the session steps (whether these are manually specified in the spec file, or automatically generated), the isolation diff --git a/src/test/isolation/specparse.y b/src/test/isolation/specparse.y index 04dbb576a710b..c25aa1a73fa57 100644 --- a/src/test/isolation/specparse.y +++ b/src/test/isolation/specparse.y @@ -49,7 +49,7 @@ TestSpec parseresult; /* result of parsing is left here */ %type permutation_step %type blocker -%token sqlblock string_literal +%token sqlblock identifier %token INTEGER %token NOTICES PERMUTATION SESSION SETUP STEP TEARDOWN TEST @@ -117,7 +117,7 @@ session_list: ; session: - SESSION string_literal opt_setup step_list opt_teardown + SESSION identifier opt_setup step_list opt_teardown { $$ = pg_malloc(sizeof(Session)); $$->name = $2; @@ -146,7 +146,7 @@ step_list: step: - STEP string_literal sqlblock + STEP identifier sqlblock { $$ = pg_malloc(sizeof(Step)); $$->name = $2; @@ -211,7 +211,7 @@ permutation_step_list: ; permutation_step: - string_literal + identifier { $$ = pg_malloc(sizeof(PermutationStep)); $$->name = $1; @@ -219,7 +219,7 @@ permutation_step: $$->nblockers = 0; $$->step = NULL; } - | string_literal '(' blocker_list ')' + | identifier '(' blocker_list ')' { $$ = pg_malloc(sizeof(PermutationStep)); $$->name = $1; @@ -246,7 +246,7 @@ blocker_list: ; blocker: - string_literal + identifier { $$ = pg_malloc(sizeof(PermutationStepBlocker)); $$->stepname = $1; @@ -255,7 +255,7 @@ blocker: $$->step = NULL; $$->target_notices = -1; } - | string_literal NOTICES INTEGER + | identifier NOTICES INTEGER { $$ = pg_malloc(sizeof(PermutationStepBlocker)); $$->stepname = $1; diff --git a/src/test/isolation/specs/aborted-keyrevoke.spec b/src/test/isolation/specs/aborted-keyrevoke.spec index 08945d8b31c5e..4f6f9027ccba9 100644 --- a/src/test/isolation/specs/aborted-keyrevoke.spec +++ b/src/test/isolation/specs/aborted-keyrevoke.spec @@ -17,30 +17,30 @@ teardown DROP TABLE foo; } -session "s1" +session s1 setup { BEGIN; } -step "s1s" { SAVEPOINT f; } -step "s1u" { UPDATE foo SET key = 2; } # obtain KEY REVOKE -step "s1r" { ROLLBACK TO f; } # lose KEY REVOKE -step "s1l" { SELECT * FROM foo FOR KEY SHARE; } -step "s1c" { COMMIT; } +step s1s { SAVEPOINT f; } +step s1u { UPDATE foo SET key = 2; } # obtain KEY REVOKE +step s1r { ROLLBACK TO f; } # lose KEY REVOKE +step s1l { SELECT * FROM foo FOR KEY SHARE; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "s2l" { SELECT * FROM foo FOR KEY SHARE; } -step "s2c" { COMMIT; } +step s2l { SELECT * FROM foo FOR KEY SHARE; } +step s2c { COMMIT; } -permutation "s1s" "s1u" "s1r" "s1l" "s1c" "s2l" "s2c" -permutation "s1s" "s1u" "s1r" "s1l" "s2l" "s1c" "s2c" -permutation "s1s" "s1u" "s1r" "s1l" "s2l" "s2c" "s1c" -permutation "s1s" "s1u" "s1r" "s2l" "s1l" "s1c" "s2c" -permutation "s1s" "s1u" "s1r" "s2l" "s1l" "s2c" "s1c" -permutation "s1s" "s1u" "s1r" "s2l" "s2c" "s1l" "s1c" -permutation "s1s" "s1u" "s2l" "s1r" "s1l" "s1c" "s2c" -permutation "s1s" "s1u" "s2l" "s1r" "s1l" "s2c" "s1c" -permutation "s1s" "s1u" "s2l" "s1r" "s2c" "s1l" "s1c" -permutation "s1s" "s2l" "s1u" "s2c" "s1r" "s1l" "s1c" -permutation "s1s" "s2l" "s2c" "s1u" "s1r" "s1l" "s1c" -permutation "s2l" "s1s" "s1u" "s2c" "s1r" "s1l" "s1c" -permutation "s2l" "s1s" "s2c" "s1u" "s1r" "s1l" "s1c" -permutation "s2l" "s2c" "s1s" "s1u" "s1r" "s1l" "s1c" +permutation s1s s1u s1r s1l s1c s2l s2c +permutation s1s s1u s1r s1l s2l s1c s2c +permutation s1s s1u s1r s1l s2l s2c s1c +permutation s1s s1u s1r s2l s1l s1c s2c +permutation s1s s1u s1r s2l s1l s2c s1c +permutation s1s s1u s1r s2l s2c s1l s1c +permutation s1s s1u s2l s1r s1l s1c s2c +permutation s1s s1u s2l s1r s1l s2c s1c +permutation s1s s1u s2l s1r s2c s1l s1c +permutation s1s s2l s1u s2c s1r s1l s1c +permutation s1s s2l s2c s1u s1r s1l s1c +permutation s2l s1s s1u s2c s1r s1l s1c +permutation s2l s1s s2c s1u s1r s1l s1c +permutation s2l s2c s1s s1u s1r s1l s1c diff --git a/src/test/isolation/specs/alter-table-1.spec b/src/test/isolation/specs/alter-table-1.spec index 10e463f6bcf3f..dfd0ce70945aa 100644 --- a/src/test/isolation/specs/alter-table-1.spec +++ b/src/test/isolation/specs/alter-table-1.spec @@ -16,155 +16,155 @@ teardown DROP TABLE a, b; } -session "s1" -step "s1" { BEGIN; } -step "at1" { ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; } -step "sc1" { COMMIT; } -step "s2" { BEGIN; } -step "at2" { ALTER TABLE b VALIDATE CONSTRAINT bfk; } -step "sc2" { COMMIT; } +session s1 +step s1 { BEGIN; } +step at1 { ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; } +step sc1 { COMMIT; } +step s2 { BEGIN; } +step at2 { ALTER TABLE b VALIDATE CONSTRAINT bfk; } +step sc2 { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "rx1" { SELECT * FROM b WHERE a_id = 1 LIMIT 1; } -step "wx" { INSERT INTO b VALUES (0); } -step "rx3" { SELECT * FROM b WHERE a_id = 3 LIMIT 3; } -step "c2" { COMMIT; } +step rx1 { SELECT * FROM b WHERE a_id = 1 LIMIT 1; } +step wx { INSERT INTO b VALUES (0); } +step rx3 { SELECT * FROM b WHERE a_id = 3 LIMIT 3; } +step c2 { COMMIT; } -permutation "s1" "at1" "sc1" "s2" "at2" "sc2" "rx1" "wx" "rx3" "c2" -permutation "s1" "at1" "sc1" "s2" "at2" "rx1" "sc2" "wx" "rx3" "c2" -permutation "s1" "at1" "sc1" "s2" "at2" "rx1" "wx" "sc2" "rx3" "c2" -permutation "s1" "at1" "sc1" "s2" "at2" "rx1" "wx" "rx3" "sc2" "c2" -permutation "s1" "at1" "sc1" "s2" "at2" "rx1" "wx" "rx3" "c2" "sc2" -permutation "s1" "at1" "sc1" "s2" "rx1" "at2" "sc2" "wx" "rx3" "c2" -permutation "s1" "at1" "sc1" "s2" "rx1" "at2" "wx" "sc2" "rx3" "c2" -permutation "s1" "at1" "sc1" "s2" "rx1" "at2" "wx" "rx3" "sc2" "c2" -permutation "s1" "at1" "sc1" "s2" "rx1" "at2" "wx" "rx3" "c2" "sc2" -permutation "s1" "at1" "sc1" "s2" "rx1" "wx" "at2" "sc2" "rx3" "c2" -permutation "s1" "at1" "sc1" "s2" "rx1" "wx" "at2" "rx3" "sc2" "c2" -permutation "s1" "at1" "sc1" "s2" "rx1" "wx" "at2" "rx3" "c2" "sc2" -permutation "s1" "at1" "sc1" "s2" "rx1" "wx" "rx3" "at2" "sc2" "c2" -permutation "s1" "at1" "sc1" "s2" "rx1" "wx" "rx3" "at2" "c2" "sc2" -permutation "s1" "at1" "sc1" "s2" "rx1" "wx" "rx3" "c2" "at2" "sc2" -permutation "s1" "at1" "sc1" "rx1" "s2" "at2" "sc2" "wx" "rx3" "c2" -permutation "s1" "at1" "sc1" "rx1" "s2" "at2" "wx" "sc2" "rx3" "c2" -permutation "s1" "at1" "sc1" "rx1" "s2" "at2" "wx" "rx3" "sc2" "c2" -permutation "s1" "at1" "sc1" "rx1" "s2" "at2" "wx" "rx3" "c2" "sc2" -permutation "s1" "at1" "sc1" "rx1" "s2" "wx" "at2" "sc2" "rx3" "c2" -permutation "s1" "at1" "sc1" "rx1" "s2" "wx" "at2" "rx3" "sc2" "c2" -permutation "s1" "at1" "sc1" "rx1" "s2" "wx" "at2" "rx3" "c2" "sc2" -permutation "s1" "at1" "sc1" "rx1" "s2" "wx" "rx3" "at2" "sc2" "c2" -permutation "s1" "at1" "sc1" "rx1" "s2" "wx" "rx3" "at2" "c2" "sc2" -permutation "s1" "at1" "sc1" "rx1" "s2" "wx" "rx3" "c2" "at2" "sc2" -permutation "s1" "at1" "sc1" "rx1" "wx" "s2" "at2" "sc2" "rx3" "c2" -permutation "s1" "at1" "sc1" "rx1" "wx" "s2" "at2" "rx3" "sc2" "c2" -permutation "s1" "at1" "sc1" "rx1" "wx" "s2" "at2" "rx3" "c2" "sc2" -permutation "s1" "at1" "sc1" "rx1" "wx" "s2" "rx3" "at2" "sc2" "c2" -permutation "s1" "at1" "sc1" "rx1" "wx" "s2" "rx3" "at2" "c2" "sc2" -permutation "s1" "at1" "sc1" "rx1" "wx" "s2" "rx3" "c2" "at2" "sc2" -permutation "s1" "at1" "sc1" "rx1" "wx" "rx3" "s2" "at2" "sc2" "c2" -permutation "s1" "at1" "sc1" "rx1" "wx" "rx3" "s2" "at2" "c2" "sc2" -permutation "s1" "at1" "sc1" "rx1" "wx" "rx3" "s2" "c2" "at2" "sc2" -permutation "s1" "at1" "sc1" "rx1" "wx" "rx3" "c2" "s2" "at2" "sc2" -permutation "s1" "at1" "rx1" "sc1" "s2" "at2" "sc2" "wx" "rx3" "c2" -permutation "s1" "at1" "rx1" "sc1" "s2" "at2" "wx" "sc2" "rx3" "c2" -permutation "s1" "at1" "rx1" "sc1" "s2" "at2" "wx" "rx3" "sc2" "c2" -permutation "s1" "at1" "rx1" "sc1" "s2" "at2" "wx" "rx3" "c2" "sc2" -permutation "s1" "at1" "rx1" "sc1" "s2" "wx" "at2" "sc2" "rx3" "c2" -permutation "s1" "at1" "rx1" "sc1" "s2" "wx" "at2" "rx3" "sc2" "c2" -permutation "s1" "at1" "rx1" "sc1" "s2" "wx" "at2" "rx3" "c2" "sc2" -permutation "s1" "at1" "rx1" "sc1" "s2" "wx" "rx3" "at2" "sc2" "c2" -permutation "s1" "at1" "rx1" "sc1" "s2" "wx" "rx3" "at2" "c2" "sc2" -permutation "s1" "at1" "rx1" "sc1" "s2" "wx" "rx3" "c2" "at2" "sc2" -permutation "s1" "at1" "rx1" "sc1" "wx" "s2" "at2" "sc2" "rx3" "c2" -permutation "s1" "at1" "rx1" "sc1" "wx" "s2" "at2" "rx3" "sc2" "c2" -permutation "s1" "at1" "rx1" "sc1" "wx" "s2" "at2" "rx3" "c2" "sc2" -permutation "s1" "at1" "rx1" "sc1" "wx" "s2" "rx3" "at2" "sc2" "c2" -permutation "s1" "at1" "rx1" "sc1" "wx" "s2" "rx3" "at2" "c2" "sc2" -permutation "s1" "at1" "rx1" "sc1" "wx" "s2" "rx3" "c2" "at2" "sc2" -permutation "s1" "at1" "rx1" "sc1" "wx" "rx3" "s2" "at2" "sc2" "c2" -permutation "s1" "at1" "rx1" "sc1" "wx" "rx3" "s2" "at2" "c2" "sc2" -permutation "s1" "at1" "rx1" "sc1" "wx" "rx3" "s2" "c2" "at2" "sc2" -permutation "s1" "at1" "rx1" "sc1" "wx" "rx3" "c2" "s2" "at2" "sc2" -permutation "s1" "at1" "rx1" "wx" "sc1" "s2" "at2" "sc2" "rx3" "c2" -permutation "s1" "at1" "rx1" "wx" "sc1" "s2" "at2" "rx3" "sc2" "c2" -permutation "s1" "at1" "rx1" "wx" "sc1" "s2" "at2" "rx3" "c2" "sc2" -permutation "s1" "at1" "rx1" "wx" "sc1" "s2" "rx3" "at2" "sc2" "c2" -permutation "s1" "at1" "rx1" "wx" "sc1" "s2" "rx3" "at2" "c2" "sc2" -permutation "s1" "at1" "rx1" "wx" "sc1" "s2" "rx3" "c2" "at2" "sc2" -permutation "s1" "at1" "rx1" "wx" "sc1" "rx3" "s2" "at2" "sc2" "c2" -permutation "s1" "at1" "rx1" "wx" "sc1" "rx3" "s2" "at2" "c2" "sc2" -permutation "s1" "at1" "rx1" "wx" "sc1" "rx3" "s2" "c2" "at2" "sc2" -permutation "s1" "at1" "rx1" "wx" "sc1" "rx3" "c2" "s2" "at2" "sc2" -permutation "s1" "rx1" "at1" "sc1" "s2" "at2" "sc2" "wx" "rx3" "c2" -permutation "s1" "rx1" "at1" "sc1" "s2" "at2" "wx" "sc2" "rx3" "c2" -permutation "s1" "rx1" "at1" "sc1" "s2" "at2" "wx" "rx3" "sc2" "c2" -permutation "s1" "rx1" "at1" "sc1" "s2" "at2" "wx" "rx3" "c2" "sc2" -permutation "s1" "rx1" "at1" "sc1" "s2" "wx" "at2" "sc2" "rx3" "c2" -permutation "s1" "rx1" "at1" "sc1" "s2" "wx" "at2" "rx3" "sc2" "c2" -permutation "s1" "rx1" "at1" "sc1" "s2" "wx" "at2" "rx3" "c2" "sc2" -permutation "s1" "rx1" "at1" "sc1" "s2" "wx" "rx3" "at2" "sc2" "c2" -permutation "s1" "rx1" "at1" "sc1" "s2" "wx" "rx3" "at2" "c2" "sc2" -permutation "s1" "rx1" "at1" "sc1" "s2" "wx" "rx3" "c2" "at2" "sc2" -permutation "s1" "rx1" "at1" "sc1" "wx" "s2" "at2" "sc2" "rx3" "c2" -permutation "s1" "rx1" "at1" "sc1" "wx" "s2" "at2" "rx3" "sc2" "c2" -permutation "s1" "rx1" "at1" "sc1" "wx" "s2" "at2" "rx3" "c2" "sc2" -permutation "s1" "rx1" "at1" "sc1" "wx" "s2" "rx3" "at2" "sc2" "c2" -permutation "s1" "rx1" "at1" "sc1" "wx" "s2" "rx3" "at2" "c2" "sc2" -permutation "s1" "rx1" "at1" "sc1" "wx" "s2" "rx3" "c2" "at2" "sc2" -permutation "s1" "rx1" "at1" "sc1" "wx" "rx3" "s2" "at2" "sc2" "c2" -permutation "s1" "rx1" "at1" "sc1" "wx" "rx3" "s2" "at2" "c2" "sc2" -permutation "s1" "rx1" "at1" "sc1" "wx" "rx3" "s2" "c2" "at2" "sc2" -permutation "s1" "rx1" "at1" "sc1" "wx" "rx3" "c2" "s2" "at2" "sc2" -permutation "s1" "rx1" "at1" "wx" "sc1" "s2" "at2" "sc2" "rx3" "c2" -permutation "s1" "rx1" "at1" "wx" "sc1" "s2" "at2" "rx3" "sc2" "c2" -permutation "s1" "rx1" "at1" "wx" "sc1" "s2" "at2" "rx3" "c2" "sc2" -permutation "s1" "rx1" "at1" "wx" "sc1" "s2" "rx3" "at2" "sc2" "c2" -permutation "s1" "rx1" "at1" "wx" "sc1" "s2" "rx3" "at2" "c2" "sc2" -permutation "s1" "rx1" "at1" "wx" "sc1" "s2" "rx3" "c2" "at2" "sc2" -permutation "s1" "rx1" "at1" "wx" "sc1" "rx3" "s2" "at2" "sc2" "c2" -permutation "s1" "rx1" "at1" "wx" "sc1" "rx3" "s2" "at2" "c2" "sc2" -permutation "s1" "rx1" "at1" "wx" "sc1" "rx3" "s2" "c2" "at2" "sc2" -permutation "s1" "rx1" "at1" "wx" "sc1" "rx3" "c2" "s2" "at2" "sc2" -permutation "s1" "rx1" "wx" "at1" "rx3" "c2" "sc1" "s2" "at2" "sc2" -permutation "s1" "rx1" "wx" "rx3" "at1" "c2" "sc1" "s2" "at2" "sc2" -permutation "s1" "rx1" "wx" "rx3" "c2" "at1" "sc1" "s2" "at2" "sc2" -permutation "rx1" "s1" "at1" "sc1" "s2" "at2" "sc2" "wx" "rx3" "c2" -permutation "rx1" "s1" "at1" "sc1" "s2" "at2" "wx" "sc2" "rx3" "c2" -permutation "rx1" "s1" "at1" "sc1" "s2" "at2" "wx" "rx3" "sc2" "c2" -permutation "rx1" "s1" "at1" "sc1" "s2" "at2" "wx" "rx3" "c2" "sc2" -permutation "rx1" "s1" "at1" "sc1" "s2" "wx" "at2" "sc2" "rx3" "c2" -permutation "rx1" "s1" "at1" "sc1" "s2" "wx" "at2" "rx3" "sc2" "c2" -permutation "rx1" "s1" "at1" "sc1" "s2" "wx" "at2" "rx3" "c2" "sc2" -permutation "rx1" "s1" "at1" "sc1" "s2" "wx" "rx3" "at2" "sc2" "c2" -permutation "rx1" "s1" "at1" "sc1" "s2" "wx" "rx3" "at2" "c2" "sc2" -permutation "rx1" "s1" "at1" "sc1" "s2" "wx" "rx3" "c2" "at2" "sc2" -permutation "rx1" "s1" "at1" "sc1" "wx" "s2" "at2" "sc2" "rx3" "c2" -permutation "rx1" "s1" "at1" "sc1" "wx" "s2" "at2" "rx3" "sc2" "c2" -permutation "rx1" "s1" "at1" "sc1" "wx" "s2" "at2" "rx3" "c2" "sc2" -permutation "rx1" "s1" "at1" "sc1" "wx" "s2" "rx3" "at2" "sc2" "c2" -permutation "rx1" "s1" "at1" "sc1" "wx" "s2" "rx3" "at2" "c2" "sc2" -permutation "rx1" "s1" "at1" "sc1" "wx" "s2" "rx3" "c2" "at2" "sc2" -permutation "rx1" "s1" "at1" "sc1" "wx" "rx3" "s2" "at2" "sc2" "c2" -permutation "rx1" "s1" "at1" "sc1" "wx" "rx3" "s2" "at2" "c2" "sc2" -permutation "rx1" "s1" "at1" "sc1" "wx" "rx3" "s2" "c2" "at2" "sc2" -permutation "rx1" "s1" "at1" "sc1" "wx" "rx3" "c2" "s2" "at2" "sc2" -permutation "rx1" "s1" "at1" "wx" "sc1" "s2" "at2" "sc2" "rx3" "c2" -permutation "rx1" "s1" "at1" "wx" "sc1" "s2" "at2" "rx3" "sc2" "c2" -permutation "rx1" "s1" "at1" "wx" "sc1" "s2" "at2" "rx3" "c2" "sc2" -permutation "rx1" "s1" "at1" "wx" "sc1" "s2" "rx3" "at2" "sc2" "c2" -permutation "rx1" "s1" "at1" "wx" "sc1" "s2" "rx3" "at2" "c2" "sc2" -permutation "rx1" "s1" "at1" "wx" "sc1" "s2" "rx3" "c2" "at2" "sc2" -permutation "rx1" "s1" "at1" "wx" "sc1" "rx3" "s2" "at2" "sc2" "c2" -permutation "rx1" "s1" "at1" "wx" "sc1" "rx3" "s2" "at2" "c2" "sc2" -permutation "rx1" "s1" "at1" "wx" "sc1" "rx3" "s2" "c2" "at2" "sc2" -permutation "rx1" "s1" "at1" "wx" "sc1" "rx3" "c2" "s2" "at2" "sc2" -permutation "rx1" "s1" "wx" "at1" "rx3" "c2" "sc1" "s2" "at2" "sc2" -permutation "rx1" "s1" "wx" "rx3" "at1" "c2" "sc1" "s2" "at2" "sc2" -permutation "rx1" "s1" "wx" "rx3" "c2" "at1" "sc1" "s2" "at2" "sc2" -permutation "rx1" "wx" "s1" "at1" "rx3" "c2" "sc1" "s2" "at2" "sc2" -permutation "rx1" "wx" "s1" "rx3" "at1" "c2" "sc1" "s2" "at2" "sc2" -permutation "rx1" "wx" "s1" "rx3" "c2" "at1" "sc1" "s2" "at2" "sc2" -permutation "rx1" "wx" "rx3" "s1" "at1" "c2" "sc1" "s2" "at2" "sc2" -permutation "rx1" "wx" "rx3" "s1" "c2" "at1" "sc1" "s2" "at2" "sc2" -permutation "rx1" "wx" "rx3" "c2" "s1" "at1" "sc1" "s2" "at2" "sc2" +permutation s1 at1 sc1 s2 at2 sc2 rx1 wx rx3 c2 +permutation s1 at1 sc1 s2 at2 rx1 sc2 wx rx3 c2 +permutation s1 at1 sc1 s2 at2 rx1 wx sc2 rx3 c2 +permutation s1 at1 sc1 s2 at2 rx1 wx rx3 sc2 c2 +permutation s1 at1 sc1 s2 at2 rx1 wx rx3 c2 sc2 +permutation s1 at1 sc1 s2 rx1 at2 sc2 wx rx3 c2 +permutation s1 at1 sc1 s2 rx1 at2 wx sc2 rx3 c2 +permutation s1 at1 sc1 s2 rx1 at2 wx rx3 sc2 c2 +permutation s1 at1 sc1 s2 rx1 at2 wx rx3 c2 sc2 +permutation s1 at1 sc1 s2 rx1 wx at2 sc2 rx3 c2 +permutation s1 at1 sc1 s2 rx1 wx at2 rx3 sc2 c2 +permutation s1 at1 sc1 s2 rx1 wx at2 rx3 c2 sc2 +permutation s1 at1 sc1 s2 rx1 wx rx3 at2 sc2 c2 +permutation s1 at1 sc1 s2 rx1 wx rx3 at2 c2 sc2 +permutation s1 at1 sc1 s2 rx1 wx rx3 c2 at2 sc2 +permutation s1 at1 sc1 rx1 s2 at2 sc2 wx rx3 c2 +permutation s1 at1 sc1 rx1 s2 at2 wx sc2 rx3 c2 +permutation s1 at1 sc1 rx1 s2 at2 wx rx3 sc2 c2 +permutation s1 at1 sc1 rx1 s2 at2 wx rx3 c2 sc2 +permutation s1 at1 sc1 rx1 s2 wx at2 sc2 rx3 c2 +permutation s1 at1 sc1 rx1 s2 wx at2 rx3 sc2 c2 +permutation s1 at1 sc1 rx1 s2 wx at2 rx3 c2 sc2 +permutation s1 at1 sc1 rx1 s2 wx rx3 at2 sc2 c2 +permutation s1 at1 sc1 rx1 s2 wx rx3 at2 c2 sc2 +permutation s1 at1 sc1 rx1 s2 wx rx3 c2 at2 sc2 +permutation s1 at1 sc1 rx1 wx s2 at2 sc2 rx3 c2 +permutation s1 at1 sc1 rx1 wx s2 at2 rx3 sc2 c2 +permutation s1 at1 sc1 rx1 wx s2 at2 rx3 c2 sc2 +permutation s1 at1 sc1 rx1 wx s2 rx3 at2 sc2 c2 +permutation s1 at1 sc1 rx1 wx s2 rx3 at2 c2 sc2 +permutation s1 at1 sc1 rx1 wx s2 rx3 c2 at2 sc2 +permutation s1 at1 sc1 rx1 wx rx3 s2 at2 sc2 c2 +permutation s1 at1 sc1 rx1 wx rx3 s2 at2 c2 sc2 +permutation s1 at1 sc1 rx1 wx rx3 s2 c2 at2 sc2 +permutation s1 at1 sc1 rx1 wx rx3 c2 s2 at2 sc2 +permutation s1 at1 rx1 sc1 s2 at2 sc2 wx rx3 c2 +permutation s1 at1 rx1 sc1 s2 at2 wx sc2 rx3 c2 +permutation s1 at1 rx1 sc1 s2 at2 wx rx3 sc2 c2 +permutation s1 at1 rx1 sc1 s2 at2 wx rx3 c2 sc2 +permutation s1 at1 rx1 sc1 s2 wx at2 sc2 rx3 c2 +permutation s1 at1 rx1 sc1 s2 wx at2 rx3 sc2 c2 +permutation s1 at1 rx1 sc1 s2 wx at2 rx3 c2 sc2 +permutation s1 at1 rx1 sc1 s2 wx rx3 at2 sc2 c2 +permutation s1 at1 rx1 sc1 s2 wx rx3 at2 c2 sc2 +permutation s1 at1 rx1 sc1 s2 wx rx3 c2 at2 sc2 +permutation s1 at1 rx1 sc1 wx s2 at2 sc2 rx3 c2 +permutation s1 at1 rx1 sc1 wx s2 at2 rx3 sc2 c2 +permutation s1 at1 rx1 sc1 wx s2 at2 rx3 c2 sc2 +permutation s1 at1 rx1 sc1 wx s2 rx3 at2 sc2 c2 +permutation s1 at1 rx1 sc1 wx s2 rx3 at2 c2 sc2 +permutation s1 at1 rx1 sc1 wx s2 rx3 c2 at2 sc2 +permutation s1 at1 rx1 sc1 wx rx3 s2 at2 sc2 c2 +permutation s1 at1 rx1 sc1 wx rx3 s2 at2 c2 sc2 +permutation s1 at1 rx1 sc1 wx rx3 s2 c2 at2 sc2 +permutation s1 at1 rx1 sc1 wx rx3 c2 s2 at2 sc2 +permutation s1 at1 rx1 wx sc1 s2 at2 sc2 rx3 c2 +permutation s1 at1 rx1 wx sc1 s2 at2 rx3 sc2 c2 +permutation s1 at1 rx1 wx sc1 s2 at2 rx3 c2 sc2 +permutation s1 at1 rx1 wx sc1 s2 rx3 at2 sc2 c2 +permutation s1 at1 rx1 wx sc1 s2 rx3 at2 c2 sc2 +permutation s1 at1 rx1 wx sc1 s2 rx3 c2 at2 sc2 +permutation s1 at1 rx1 wx sc1 rx3 s2 at2 sc2 c2 +permutation s1 at1 rx1 wx sc1 rx3 s2 at2 c2 sc2 +permutation s1 at1 rx1 wx sc1 rx3 s2 c2 at2 sc2 +permutation s1 at1 rx1 wx sc1 rx3 c2 s2 at2 sc2 +permutation s1 rx1 at1 sc1 s2 at2 sc2 wx rx3 c2 +permutation s1 rx1 at1 sc1 s2 at2 wx sc2 rx3 c2 +permutation s1 rx1 at1 sc1 s2 at2 wx rx3 sc2 c2 +permutation s1 rx1 at1 sc1 s2 at2 wx rx3 c2 sc2 +permutation s1 rx1 at1 sc1 s2 wx at2 sc2 rx3 c2 +permutation s1 rx1 at1 sc1 s2 wx at2 rx3 sc2 c2 +permutation s1 rx1 at1 sc1 s2 wx at2 rx3 c2 sc2 +permutation s1 rx1 at1 sc1 s2 wx rx3 at2 sc2 c2 +permutation s1 rx1 at1 sc1 s2 wx rx3 at2 c2 sc2 +permutation s1 rx1 at1 sc1 s2 wx rx3 c2 at2 sc2 +permutation s1 rx1 at1 sc1 wx s2 at2 sc2 rx3 c2 +permutation s1 rx1 at1 sc1 wx s2 at2 rx3 sc2 c2 +permutation s1 rx1 at1 sc1 wx s2 at2 rx3 c2 sc2 +permutation s1 rx1 at1 sc1 wx s2 rx3 at2 sc2 c2 +permutation s1 rx1 at1 sc1 wx s2 rx3 at2 c2 sc2 +permutation s1 rx1 at1 sc1 wx s2 rx3 c2 at2 sc2 +permutation s1 rx1 at1 sc1 wx rx3 s2 at2 sc2 c2 +permutation s1 rx1 at1 sc1 wx rx3 s2 at2 c2 sc2 +permutation s1 rx1 at1 sc1 wx rx3 s2 c2 at2 sc2 +permutation s1 rx1 at1 sc1 wx rx3 c2 s2 at2 sc2 +permutation s1 rx1 at1 wx sc1 s2 at2 sc2 rx3 c2 +permutation s1 rx1 at1 wx sc1 s2 at2 rx3 sc2 c2 +permutation s1 rx1 at1 wx sc1 s2 at2 rx3 c2 sc2 +permutation s1 rx1 at1 wx sc1 s2 rx3 at2 sc2 c2 +permutation s1 rx1 at1 wx sc1 s2 rx3 at2 c2 sc2 +permutation s1 rx1 at1 wx sc1 s2 rx3 c2 at2 sc2 +permutation s1 rx1 at1 wx sc1 rx3 s2 at2 sc2 c2 +permutation s1 rx1 at1 wx sc1 rx3 s2 at2 c2 sc2 +permutation s1 rx1 at1 wx sc1 rx3 s2 c2 at2 sc2 +permutation s1 rx1 at1 wx sc1 rx3 c2 s2 at2 sc2 +permutation s1 rx1 wx at1 rx3 c2 sc1 s2 at2 sc2 +permutation s1 rx1 wx rx3 at1 c2 sc1 s2 at2 sc2 +permutation s1 rx1 wx rx3 c2 at1 sc1 s2 at2 sc2 +permutation rx1 s1 at1 sc1 s2 at2 sc2 wx rx3 c2 +permutation rx1 s1 at1 sc1 s2 at2 wx sc2 rx3 c2 +permutation rx1 s1 at1 sc1 s2 at2 wx rx3 sc2 c2 +permutation rx1 s1 at1 sc1 s2 at2 wx rx3 c2 sc2 +permutation rx1 s1 at1 sc1 s2 wx at2 sc2 rx3 c2 +permutation rx1 s1 at1 sc1 s2 wx at2 rx3 sc2 c2 +permutation rx1 s1 at1 sc1 s2 wx at2 rx3 c2 sc2 +permutation rx1 s1 at1 sc1 s2 wx rx3 at2 sc2 c2 +permutation rx1 s1 at1 sc1 s2 wx rx3 at2 c2 sc2 +permutation rx1 s1 at1 sc1 s2 wx rx3 c2 at2 sc2 +permutation rx1 s1 at1 sc1 wx s2 at2 sc2 rx3 c2 +permutation rx1 s1 at1 sc1 wx s2 at2 rx3 sc2 c2 +permutation rx1 s1 at1 sc1 wx s2 at2 rx3 c2 sc2 +permutation rx1 s1 at1 sc1 wx s2 rx3 at2 sc2 c2 +permutation rx1 s1 at1 sc1 wx s2 rx3 at2 c2 sc2 +permutation rx1 s1 at1 sc1 wx s2 rx3 c2 at2 sc2 +permutation rx1 s1 at1 sc1 wx rx3 s2 at2 sc2 c2 +permutation rx1 s1 at1 sc1 wx rx3 s2 at2 c2 sc2 +permutation rx1 s1 at1 sc1 wx rx3 s2 c2 at2 sc2 +permutation rx1 s1 at1 sc1 wx rx3 c2 s2 at2 sc2 +permutation rx1 s1 at1 wx sc1 s2 at2 sc2 rx3 c2 +permutation rx1 s1 at1 wx sc1 s2 at2 rx3 sc2 c2 +permutation rx1 s1 at1 wx sc1 s2 at2 rx3 c2 sc2 +permutation rx1 s1 at1 wx sc1 s2 rx3 at2 sc2 c2 +permutation rx1 s1 at1 wx sc1 s2 rx3 at2 c2 sc2 +permutation rx1 s1 at1 wx sc1 s2 rx3 c2 at2 sc2 +permutation rx1 s1 at1 wx sc1 rx3 s2 at2 sc2 c2 +permutation rx1 s1 at1 wx sc1 rx3 s2 at2 c2 sc2 +permutation rx1 s1 at1 wx sc1 rx3 s2 c2 at2 sc2 +permutation rx1 s1 at1 wx sc1 rx3 c2 s2 at2 sc2 +permutation rx1 s1 wx at1 rx3 c2 sc1 s2 at2 sc2 +permutation rx1 s1 wx rx3 at1 c2 sc1 s2 at2 sc2 +permutation rx1 s1 wx rx3 c2 at1 sc1 s2 at2 sc2 +permutation rx1 wx s1 at1 rx3 c2 sc1 s2 at2 sc2 +permutation rx1 wx s1 rx3 at1 c2 sc1 s2 at2 sc2 +permutation rx1 wx s1 rx3 c2 at1 sc1 s2 at2 sc2 +permutation rx1 wx rx3 s1 at1 c2 sc1 s2 at2 sc2 +permutation rx1 wx rx3 s1 c2 at1 sc1 s2 at2 sc2 +permutation rx1 wx rx3 c2 s1 at1 sc1 s2 at2 sc2 diff --git a/src/test/isolation/specs/alter-table-2.spec b/src/test/isolation/specs/alter-table-2.spec index 9b17992d7d2c2..a3e3131e9f9da 100644 --- a/src/test/isolation/specs/alter-table-2.spec +++ b/src/test/isolation/specs/alter-table-2.spec @@ -16,64 +16,64 @@ teardown DROP TABLE a, b; } -session "s1" -step "s1a" { BEGIN; } -step "s1b" { ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; } -step "s1c" { COMMIT; } +session s1 +step s1a { BEGIN; } +step s1b { ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; } +step s1c { COMMIT; } -session "s2" -step "s2a" { BEGIN; } -step "s2b" { SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; } -step "s2c" { SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; } -step "s2d" { INSERT INTO b VALUES (0); } -step "s2e" { INSERT INTO a VALUES (4); } -step "s2f" { COMMIT; } +session s2 +step s2a { BEGIN; } +step s2b { SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; } +step s2c { SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; } +step s2d { INSERT INTO b VALUES (0); } +step s2e { INSERT INTO a VALUES (4); } +step s2f { COMMIT; } -permutation "s1a" "s1b" "s1c" "s2a" "s2b" "s2c" "s2d" "s2e" "s2f" -permutation "s1a" "s1b" "s2a" "s1c" "s2b" "s2c" "s2d" "s2e" "s2f" -permutation "s1a" "s1b" "s2a" "s2b" "s1c" "s2c" "s2d" "s2e" "s2f" -permutation "s1a" "s1b" "s2a" "s2b" "s2c" "s1c" "s2d" "s2e" "s2f" -permutation "s1a" "s1b" "s2a" "s2b" "s2c" "s2d" "s1c" "s2e" "s2f" -permutation "s1a" "s2a" "s1b" "s1c" "s2b" "s2c" "s2d" "s2e" "s2f" -permutation "s1a" "s2a" "s1b" "s2b" "s1c" "s2c" "s2d" "s2e" "s2f" -permutation "s1a" "s2a" "s1b" "s2b" "s2c" "s1c" "s2d" "s2e" "s2f" -permutation "s1a" "s2a" "s1b" "s2b" "s2c" "s2d" "s1c" "s2e" "s2f" -permutation "s1a" "s2a" "s2b" "s1b" "s1c" "s2c" "s2d" "s2e" "s2f" -permutation "s1a" "s2a" "s2b" "s1b" "s2c" "s1c" "s2d" "s2e" "s2f" -permutation "s1a" "s2a" "s2b" "s1b" "s2c" "s2d" "s1c" "s2e" "s2f" -permutation "s1a" "s2a" "s2b" "s2c" "s1b" "s1c" "s2d" "s2e" "s2f" -permutation "s1a" "s2a" "s2b" "s2c" "s1b" "s2d" "s1c" "s2e" "s2f" -permutation "s1a" "s2a" "s2b" "s2c" "s2d" "s1b" "s2e" "s2f" "s1c" -permutation "s1a" "s2a" "s2b" "s2c" "s2d" "s2e" "s1b" "s2f" "s1c" -permutation "s1a" "s2a" "s2b" "s2c" "s2d" "s2e" "s2f" "s1b" "s1c" -permutation "s2a" "s1a" "s1b" "s1c" "s2b" "s2c" "s2d" "s2e" "s2f" -permutation "s2a" "s1a" "s1b" "s2b" "s1c" "s2c" "s2d" "s2e" "s2f" -permutation "s2a" "s1a" "s1b" "s2b" "s2c" "s1c" "s2d" "s2e" "s2f" -permutation "s2a" "s1a" "s1b" "s2b" "s2c" "s2d" "s1c" "s2e" "s2f" -permutation "s2a" "s1a" "s2b" "s1b" "s1c" "s2c" "s2d" "s2e" "s2f" -permutation "s2a" "s1a" "s2b" "s1b" "s2c" "s1c" "s2d" "s2e" "s2f" -permutation "s2a" "s1a" "s2b" "s1b" "s2c" "s2d" "s1c" "s2e" "s2f" -permutation "s2a" "s1a" "s2b" "s2c" "s1b" "s1c" "s2d" "s2e" "s2f" -permutation "s2a" "s1a" "s2b" "s2c" "s1b" "s2d" "s1c" "s2e" "s2f" -permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s1b" "s2e" "s2f" "s1c" -permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s2e" "s1b" "s2f" "s1c" -permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s2e" "s2f" "s1b" "s1c" -permutation "s2a" "s2b" "s1a" "s1b" "s1c" "s2c" "s2d" "s2e" "s2f" -permutation "s2a" "s2b" "s1a" "s1b" "s2c" "s1c" "s2d" "s2e" "s2f" -permutation "s2a" "s2b" "s1a" "s1b" "s2c" "s2d" "s1c" "s2e" "s2f" -permutation "s2a" "s2b" "s1a" "s2c" "s1b" "s1c" "s2d" "s2e" "s2f" -permutation "s2a" "s2b" "s1a" "s2c" "s1b" "s2d" "s1c" "s2e" "s2f" -permutation "s2a" "s2b" "s1a" "s2c" "s2d" "s1b" "s2e" "s2f" "s1c" -permutation "s2a" "s2b" "s1a" "s2c" "s2d" "s2e" "s1b" "s2f" "s1c" -permutation "s2a" "s2b" "s1a" "s2c" "s2d" "s2e" "s2f" "s1b" "s1c" -permutation "s2a" "s2b" "s2c" "s1a" "s1b" "s1c" "s2d" "s2e" "s2f" -permutation "s2a" "s2b" "s2c" "s1a" "s1b" "s2d" "s1c" "s2e" "s2f" -permutation "s2a" "s2b" "s2c" "s1a" "s2d" "s1b" "s2e" "s2f" "s1c" -permutation "s2a" "s2b" "s2c" "s1a" "s2d" "s2e" "s1b" "s2f" "s1c" -permutation "s2a" "s2b" "s2c" "s1a" "s2d" "s2e" "s2f" "s1b" "s1c" -permutation "s2a" "s2b" "s2c" "s2d" "s1a" "s1b" "s2e" "s2f" "s1c" -permutation "s2a" "s2b" "s2c" "s2d" "s1a" "s2e" "s1b" "s2f" "s1c" -permutation "s2a" "s2b" "s2c" "s2d" "s1a" "s2e" "s2f" "s1b" "s1c" -permutation "s2a" "s2b" "s2c" "s2d" "s2e" "s1a" "s1b" "s2f" "s1c" -permutation "s2a" "s2b" "s2c" "s2d" "s2e" "s1a" "s2f" "s1b" "s1c" -permutation "s2a" "s2b" "s2c" "s2d" "s2e" "s2f" "s1a" "s1b" "s1c" +permutation s1a s1b s1c s2a s2b s2c s2d s2e s2f +permutation s1a s1b s2a s1c s2b s2c s2d s2e s2f +permutation s1a s1b s2a s2b s1c s2c s2d s2e s2f +permutation s1a s1b s2a s2b s2c s1c s2d s2e s2f +permutation s1a s1b s2a s2b s2c s2d s1c s2e s2f +permutation s1a s2a s1b s1c s2b s2c s2d s2e s2f +permutation s1a s2a s1b s2b s1c s2c s2d s2e s2f +permutation s1a s2a s1b s2b s2c s1c s2d s2e s2f +permutation s1a s2a s1b s2b s2c s2d s1c s2e s2f +permutation s1a s2a s2b s1b s1c s2c s2d s2e s2f +permutation s1a s2a s2b s1b s2c s1c s2d s2e s2f +permutation s1a s2a s2b s1b s2c s2d s1c s2e s2f +permutation s1a s2a s2b s2c s1b s1c s2d s2e s2f +permutation s1a s2a s2b s2c s1b s2d s1c s2e s2f +permutation s1a s2a s2b s2c s2d s1b s2e s2f s1c +permutation s1a s2a s2b s2c s2d s2e s1b s2f s1c +permutation s1a s2a s2b s2c s2d s2e s2f s1b s1c +permutation s2a s1a s1b s1c s2b s2c s2d s2e s2f +permutation s2a s1a s1b s2b s1c s2c s2d s2e s2f +permutation s2a s1a s1b s2b s2c s1c s2d s2e s2f +permutation s2a s1a s1b s2b s2c s2d s1c s2e s2f +permutation s2a s1a s2b s1b s1c s2c s2d s2e s2f +permutation s2a s1a s2b s1b s2c s1c s2d s2e s2f +permutation s2a s1a s2b s1b s2c s2d s1c s2e s2f +permutation s2a s1a s2b s2c s1b s1c s2d s2e s2f +permutation s2a s1a s2b s2c s1b s2d s1c s2e s2f +permutation s2a s1a s2b s2c s2d s1b s2e s2f s1c +permutation s2a s1a s2b s2c s2d s2e s1b s2f s1c +permutation s2a s1a s2b s2c s2d s2e s2f s1b s1c +permutation s2a s2b s1a s1b s1c s2c s2d s2e s2f +permutation s2a s2b s1a s1b s2c s1c s2d s2e s2f +permutation s2a s2b s1a s1b s2c s2d s1c s2e s2f +permutation s2a s2b s1a s2c s1b s1c s2d s2e s2f +permutation s2a s2b s1a s2c s1b s2d s1c s2e s2f +permutation s2a s2b s1a s2c s2d s1b s2e s2f s1c +permutation s2a s2b s1a s2c s2d s2e s1b s2f s1c +permutation s2a s2b s1a s2c s2d s2e s2f s1b s1c +permutation s2a s2b s2c s1a s1b s1c s2d s2e s2f +permutation s2a s2b s2c s1a s1b s2d s1c s2e s2f +permutation s2a s2b s2c s1a s2d s1b s2e s2f s1c +permutation s2a s2b s2c s1a s2d s2e s1b s2f s1c +permutation s2a s2b s2c s1a s2d s2e s2f s1b s1c +permutation s2a s2b s2c s2d s1a s1b s2e s2f s1c +permutation s2a s2b s2c s2d s1a s2e s1b s2f s1c +permutation s2a s2b s2c s2d s1a s2e s2f s1b s1c +permutation s2a s2b s2c s2d s2e s1a s1b s2f s1c +permutation s2a s2b s2c s2d s2e s1a s2f s1b s1c +permutation s2a s2b s2c s2d s2e s2f s1a s1b s1c diff --git a/src/test/isolation/specs/alter-table-3.spec b/src/test/isolation/specs/alter-table-3.spec index d07e3dde4186c..f70d9c079245d 100644 --- a/src/test/isolation/specs/alter-table-3.spec +++ b/src/test/isolation/specs/alter-table-3.spec @@ -17,63 +17,63 @@ teardown DROP FUNCTION f(); } -session "s1" -step "s1a" { BEGIN; } -step "s1b" { ALTER TABLE a DISABLE TRIGGER t; } -step "s1c" { ALTER TABLE a ENABLE TRIGGER t; } -step "s1d" { COMMIT; } +session s1 +step s1a { BEGIN; } +step s1b { ALTER TABLE a DISABLE TRIGGER t; } +step s1c { ALTER TABLE a ENABLE TRIGGER t; } +step s1d { COMMIT; } -session "s2" -step "s2a" { BEGIN; } -step "s2b" { SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; } -step "s2c" { INSERT INTO a VALUES (0); } -step "s2d" { COMMIT; } +session s2 +step s2a { BEGIN; } +step s2b { SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; } +step s2c { INSERT INTO a VALUES (0); } +step s2d { COMMIT; } -permutation "s1a" "s1b" "s1c" "s1d" "s2a" "s2b" "s2c" "s2d" -permutation "s1a" "s1b" "s1c" "s2a" "s1d" "s2b" "s2c" "s2d" -permutation "s1a" "s1b" "s1c" "s2a" "s2b" "s1d" "s2c" "s2d" -permutation "s1a" "s1b" "s1c" "s2a" "s2b" "s2c" "s1d" "s2d" -permutation "s1a" "s1b" "s2a" "s1c" "s1d" "s2b" "s2c" "s2d" -permutation "s1a" "s1b" "s2a" "s1c" "s2b" "s1d" "s2c" "s2d" -permutation "s1a" "s1b" "s2a" "s1c" "s2b" "s2c" "s1d" "s2d" -permutation "s1a" "s1b" "s2a" "s2b" "s1c" "s1d" "s2c" "s2d" -permutation "s1a" "s1b" "s2a" "s2b" "s1c" "s2c" "s1d" "s2d" -permutation "s1a" "s1b" "s2a" "s2b" "s2c" "s1c" "s1d" "s2d" -permutation "s1a" "s2a" "s1b" "s1c" "s1d" "s2b" "s2c" "s2d" -permutation "s1a" "s2a" "s1b" "s1c" "s2b" "s1d" "s2c" "s2d" -permutation "s1a" "s2a" "s1b" "s1c" "s2b" "s2c" "s1d" "s2d" -permutation "s1a" "s2a" "s1b" "s2b" "s1c" "s1d" "s2c" "s2d" -permutation "s1a" "s2a" "s1b" "s2b" "s1c" "s2c" "s1d" "s2d" -permutation "s1a" "s2a" "s1b" "s2b" "s2c" "s1c" "s1d" "s2d" -permutation "s1a" "s2a" "s2b" "s1b" "s1c" "s1d" "s2c" "s2d" -permutation "s1a" "s2a" "s2b" "s1b" "s1c" "s2c" "s1d" "s2d" -permutation "s1a" "s2a" "s2b" "s1b" "s2c" "s1c" "s1d" "s2d" -permutation "s1a" "s2a" "s2b" "s2c" "s1b" "s1c" "s1d" "s2d" -permutation "s1a" "s2a" "s2b" "s2c" "s1b" "s1c" "s2d" "s1d" -permutation "s1a" "s2a" "s2b" "s2c" "s1b" "s2d" "s1c" "s1d" -permutation "s1a" "s2a" "s2b" "s2c" "s2d" "s1b" "s1c" "s1d" -permutation "s2a" "s1a" "s1b" "s1c" "s1d" "s2b" "s2c" "s2d" -permutation "s2a" "s1a" "s1b" "s1c" "s2b" "s1d" "s2c" "s2d" -permutation "s2a" "s1a" "s1b" "s1c" "s2b" "s2c" "s1d" "s2d" -permutation "s2a" "s1a" "s1b" "s2b" "s1c" "s1d" "s2c" "s2d" -permutation "s2a" "s1a" "s1b" "s2b" "s1c" "s2c" "s1d" "s2d" -permutation "s2a" "s1a" "s1b" "s2b" "s2c" "s1c" "s1d" "s2d" -permutation "s2a" "s1a" "s2b" "s1b" "s1c" "s1d" "s2c" "s2d" -permutation "s2a" "s1a" "s2b" "s1b" "s1c" "s2c" "s1d" "s2d" -permutation "s2a" "s1a" "s2b" "s1b" "s2c" "s1c" "s1d" "s2d" -permutation "s2a" "s1a" "s2b" "s2c" "s1b" "s1c" "s1d" "s2d" -permutation "s2a" "s1a" "s2b" "s2c" "s1b" "s1c" "s2d" "s1d" -permutation "s2a" "s1a" "s2b" "s2c" "s1b" "s2d" "s1c" "s1d" -permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s1b" "s1c" "s1d" -permutation "s2a" "s2b" "s1a" "s1b" "s1c" "s1d" "s2c" "s2d" -permutation "s2a" "s2b" "s1a" "s1b" "s1c" "s2c" "s1d" "s2d" -permutation "s2a" "s2b" "s1a" "s1b" "s2c" "s1c" "s1d" "s2d" -permutation "s2a" "s2b" "s1a" "s2c" "s1b" "s1c" "s1d" "s2d" -permutation "s2a" "s2b" "s1a" "s2c" "s1b" "s1c" "s2d" "s1d" -permutation "s2a" "s2b" "s1a" "s2c" "s1b" "s2d" "s1c" "s1d" -permutation "s2a" "s2b" "s1a" "s2c" "s2d" "s1b" "s1c" "s1d" -permutation "s2a" "s2b" "s2c" "s1a" "s1b" "s1c" "s1d" "s2d" -permutation "s2a" "s2b" "s2c" "s1a" "s1b" "s1c" "s2d" "s1d" -permutation "s2a" "s2b" "s2c" "s1a" "s1b" "s2d" "s1c" "s1d" -permutation "s2a" "s2b" "s2c" "s1a" "s2d" "s1b" "s1c" "s1d" -permutation "s2a" "s2b" "s2c" "s2d" "s1a" "s1b" "s1c" "s1d" +permutation s1a s1b s1c s1d s2a s2b s2c s2d +permutation s1a s1b s1c s2a s1d s2b s2c s2d +permutation s1a s1b s1c s2a s2b s1d s2c s2d +permutation s1a s1b s1c s2a s2b s2c s1d s2d +permutation s1a s1b s2a s1c s1d s2b s2c s2d +permutation s1a s1b s2a s1c s2b s1d s2c s2d +permutation s1a s1b s2a s1c s2b s2c s1d s2d +permutation s1a s1b s2a s2b s1c s1d s2c s2d +permutation s1a s1b s2a s2b s1c s2c s1d s2d +permutation s1a s1b s2a s2b s2c s1c s1d s2d +permutation s1a s2a s1b s1c s1d s2b s2c s2d +permutation s1a s2a s1b s1c s2b s1d s2c s2d +permutation s1a s2a s1b s1c s2b s2c s1d s2d +permutation s1a s2a s1b s2b s1c s1d s2c s2d +permutation s1a s2a s1b s2b s1c s2c s1d s2d +permutation s1a s2a s1b s2b s2c s1c s1d s2d +permutation s1a s2a s2b s1b s1c s1d s2c s2d +permutation s1a s2a s2b s1b s1c s2c s1d s2d +permutation s1a s2a s2b s1b s2c s1c s1d s2d +permutation s1a s2a s2b s2c s1b s1c s1d s2d +permutation s1a s2a s2b s2c s1b s1c s2d s1d +permutation s1a s2a s2b s2c s1b s2d s1c s1d +permutation s1a s2a s2b s2c s2d s1b s1c s1d +permutation s2a s1a s1b s1c s1d s2b s2c s2d +permutation s2a s1a s1b s1c s2b s1d s2c s2d +permutation s2a s1a s1b s1c s2b s2c s1d s2d +permutation s2a s1a s1b s2b s1c s1d s2c s2d +permutation s2a s1a s1b s2b s1c s2c s1d s2d +permutation s2a s1a s1b s2b s2c s1c s1d s2d +permutation s2a s1a s2b s1b s1c s1d s2c s2d +permutation s2a s1a s2b s1b s1c s2c s1d s2d +permutation s2a s1a s2b s1b s2c s1c s1d s2d +permutation s2a s1a s2b s2c s1b s1c s1d s2d +permutation s2a s1a s2b s2c s1b s1c s2d s1d +permutation s2a s1a s2b s2c s1b s2d s1c s1d +permutation s2a s1a s2b s2c s2d s1b s1c s1d +permutation s2a s2b s1a s1b s1c s1d s2c s2d +permutation s2a s2b s1a s1b s1c s2c s1d s2d +permutation s2a s2b s1a s1b s2c s1c s1d s2d +permutation s2a s2b s1a s2c s1b s1c s1d s2d +permutation s2a s2b s1a s2c s1b s1c s2d s1d +permutation s2a s2b s1a s2c s1b s2d s1c s1d +permutation s2a s2b s1a s2c s2d s1b s1c s1d +permutation s2a s2b s2c s1a s1b s1c s1d s2d +permutation s2a s2b s2c s1a s1b s1c s2d s1d +permutation s2a s2b s2c s1a s1b s2d s1c s1d +permutation s2a s2b s2c s1a s2d s1b s1c s1d +permutation s2a s2b s2c s2d s1a s1b s1c s1d diff --git a/src/test/isolation/specs/alter-table-4.spec b/src/test/isolation/specs/alter-table-4.spec index a9c1a937238f4..f143b790d9619 100644 --- a/src/test/isolation/specs/alter-table-4.spec +++ b/src/test/isolation/specs/alter-table-4.spec @@ -15,23 +15,23 @@ teardown DROP TABLE IF EXISTS c1, c2, p; } -session "s1" -step "s1b" { BEGIN; } -step "s1delc1" { ALTER TABLE c1 NO INHERIT p; } -step "s1modc1a" { ALTER TABLE c1 ALTER COLUMN a TYPE float; } -step "s1addc2" { ALTER TABLE c2 INHERIT p; } -step "s1dropc1" { DROP TABLE c1; } -step "s1c" { COMMIT; } +session s1 +step s1b { BEGIN; } +step s1delc1 { ALTER TABLE c1 NO INHERIT p; } +step s1modc1a { ALTER TABLE c1 ALTER COLUMN a TYPE float; } +step s1addc2 { ALTER TABLE c2 INHERIT p; } +step s1dropc1 { DROP TABLE c1; } +step s1c { COMMIT; } -session "s2" -step "s2sel" { SELECT SUM(a) FROM p; } +session s2 +step s2sel { SELECT SUM(a) FROM p; } # NO INHERIT will not be visible to concurrent select, # since we identify children before locking them -permutation "s1b" "s1delc1" "s2sel" "s1c" "s2sel" +permutation s1b s1delc1 s2sel s1c s2sel # adding inheritance likewise is not seen if s1 commits after s2 locks p -permutation "s1b" "s1delc1" "s1addc2" "s2sel" "s1c" "s2sel" +permutation s1b s1delc1 s1addc2 s2sel s1c s2sel # but we do cope with DROP on a child table -permutation "s1b" "s1dropc1" "s2sel" "s1c" "s2sel" +permutation s1b s1dropc1 s2sel s1c s2sel # this case currently results in an error; doesn't seem worth preventing -permutation "s1b" "s1delc1" "s1modc1a" "s2sel" "s1c" "s2sel" +permutation s1b s1delc1 s1modc1a s2sel s1c s2sel diff --git a/src/test/isolation/specs/async-notify.spec b/src/test/isolation/specs/async-notify.spec index a7b2600d25c65..0b8cfd9108374 100644 --- a/src/test/isolation/specs/async-notify.spec +++ b/src/test/isolation/specs/async-notify.spec @@ -5,15 +5,15 @@ # Note we assume that each step is delivered to the backend as a single Query # message so it will run as one transaction. -session "notifier" -step "listenc" { LISTEN c1; LISTEN c2; } -step "notify1" { NOTIFY c1; } -step "notify2" { NOTIFY c2, 'payload'; } -step "notify3" { NOTIFY c3, 'payload3'; } # not listening to c3 -step "notifyf" { SELECT pg_notify('c2', NULL); } -step "notifyd1" { NOTIFY c2, 'payload'; NOTIFY c1; NOTIFY "c2", 'payload'; } -step "notifyd2" { NOTIFY c1; NOTIFY c1; NOTIFY c1, 'p1'; NOTIFY c1, 'p2'; } -step "notifys1" { +session notifier +step listenc { LISTEN c1; LISTEN c2; } +step notify1 { NOTIFY c1; } +step notify2 { NOTIFY c2, 'payload'; } +step notify3 { NOTIFY c3, 'payload3'; } # not listening to c3 +step notifyf { SELECT pg_notify('c2', NULL); } +step notifyd1 { NOTIFY c2, 'payload'; NOTIFY c1; NOTIFY "c2", 'payload'; } +step notifyd2 { NOTIFY c1; NOTIFY c1; NOTIFY c1, 'p1'; NOTIFY c1, 'p2'; } +step notifys1 { BEGIN; NOTIFY c1, 'payload'; NOTIFY "c2", 'payload'; NOTIFY c1, 'payload'; NOTIFY "c2", 'payload'; @@ -31,47 +31,47 @@ step "notifys1" { ROLLBACK TO SAVEPOINT s2; COMMIT; } -step "usage" { SELECT pg_notification_queue_usage() > 0 AS nonzero; } -step "bignotify" { SELECT count(pg_notify('c1', s::text)) FROM generate_series(1, 1000) s; } +step usage { SELECT pg_notification_queue_usage() > 0 AS nonzero; } +step bignotify { SELECT count(pg_notify('c1', s::text)) FROM generate_series(1, 1000) s; } teardown { UNLISTEN *; } # The listener session is used for cross-backend notify checks. -session "listener" -step "llisten" { LISTEN c1; LISTEN c2; } -step "lcheck" { SELECT 1 AS x; } -step "lbegin" { BEGIN; } -step "lbegins" { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "lcommit" { COMMIT; } +session listener +step llisten { LISTEN c1; LISTEN c2; } +step lcheck { SELECT 1 AS x; } +step lbegin { BEGIN; } +step lbegins { BEGIN ISOLATION LEVEL SERIALIZABLE; } +step lcommit { COMMIT; } teardown { UNLISTEN *; } # In some tests we need a second listener, just to block the queue. -session "listener2" -step "l2listen" { LISTEN c1; } -step "l2begin" { BEGIN; } -step "l2commit" { COMMIT; } -step "l2stop" { UNLISTEN *; } +session listener2 +step l2listen { LISTEN c1; } +step l2begin { BEGIN; } +step l2commit { COMMIT; } +step l2stop { UNLISTEN *; } # Trivial cases. -permutation "listenc" "notify1" "notify2" "notify3" "notifyf" +permutation listenc notify1 notify2 notify3 notifyf # Check simple and less-simple deduplication. -permutation "listenc" "notifyd1" "notifyd2" "notifys1" +permutation listenc notifyd1 notifyd2 notifys1 # Cross-backend notification delivery. We use a "select 1" to force the # listener session to check for notifies. In principle we could just wait # for delivery, but that would require extra support in isolationtester # and might have portability-of-timing issues. -permutation "llisten" "notify1" "notify2" "notify3" "notifyf" "lcheck" +permutation llisten notify1 notify2 notify3 notifyf lcheck # Again, with local delivery too. -permutation "listenc" "llisten" "notify1" "notify2" "notify3" "notifyf" "lcheck" +permutation listenc llisten notify1 notify2 notify3 notifyf lcheck # Check for bug when initial listen is only action in a serializable xact, # and notify queue is not empty -permutation "l2listen" "l2begin" "notify1" "lbegins" "llisten" "lcommit" "l2commit" "l2stop" +permutation l2listen l2begin notify1 lbegins llisten lcommit l2commit l2stop # Verify that pg_notification_queue_usage correctly reports a non-zero result, # after submitting notifications while another connection is listening for @@ -81,4 +81,4 @@ permutation "l2listen" "l2begin" "notify1" "lbegins" "llisten" "lcommit" "l2comm # commit the listener's transaction, so that it never reports these events. # Hence, this should be the last test in this script. -permutation "llisten" "lbegin" "usage" "bignotify" "usage" +permutation llisten lbegin usage bignotify usage diff --git a/src/test/isolation/specs/classroom-scheduling.spec b/src/test/isolation/specs/classroom-scheduling.spec index a31565b9cd759..770715b149daf 100644 --- a/src/test/isolation/specs/classroom-scheduling.spec +++ b/src/test/isolation/specs/classroom-scheduling.spec @@ -16,14 +16,14 @@ teardown DROP TABLE room_reservation; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "rx1" { SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; } -step "wy1" { INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); } -step "c1" { COMMIT; } +step rx1 { SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; } +step wy1 { INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "ry2" { SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; } -step "wx2" { UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; } -step "c2" { COMMIT; } +step ry2 { SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; } +step wx2 { UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; } +step c2 { COMMIT; } diff --git a/src/test/isolation/specs/create-trigger.spec b/src/test/isolation/specs/create-trigger.spec index caac381757d25..9d4710cbdde4a 100644 --- a/src/test/isolation/specs/create-trigger.spec +++ b/src/test/isolation/specs/create-trigger.spec @@ -16,39 +16,39 @@ teardown DROP FUNCTION f(); } -session "s1" -step "s1a" { BEGIN; } -step "s1b" { CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); } -step "s1c" { COMMIT; } +session s1 +step s1a { BEGIN; } +step s1b { CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); } +step s1c { COMMIT; } -session "s2" -step "s2a" { BEGIN; } -step "s2b" { SELECT * FROM a WHERE i = 1 FOR UPDATE; } -step "s2c" { UPDATE a SET i = 4 WHERE i = 3; } -step "s2d" { COMMIT; } +session s2 +step s2a { BEGIN; } +step s2b { SELECT * FROM a WHERE i = 1 FOR UPDATE; } +step s2c { UPDATE a SET i = 4 WHERE i = 3; } +step s2d { COMMIT; } -permutation "s1a" "s1b" "s1c" "s2a" "s2b" "s2c" "s2d" -permutation "s1a" "s1b" "s2a" "s1c" "s2b" "s2c" "s2d" -permutation "s1a" "s1b" "s2a" "s2b" "s1c" "s2c" "s2d" -permutation "s1a" "s1b" "s2a" "s2b" "s2c" "s1c" "s2d" -permutation "s1a" "s2a" "s1b" "s1c" "s2b" "s2c" "s2d" -permutation "s1a" "s2a" "s1b" "s2b" "s1c" "s2c" "s2d" -permutation "s1a" "s2a" "s1b" "s2b" "s2c" "s1c" "s2d" -permutation "s1a" "s2a" "s2b" "s1b" "s1c" "s2c" "s2d" -permutation "s1a" "s2a" "s2b" "s1b" "s2c" "s1c" "s2d" -permutation "s1a" "s2a" "s2b" "s2c" "s1b" "s2d" "s1c" -permutation "s1a" "s2a" "s2b" "s2c" "s2d" "s1b" "s1c" -permutation "s2a" "s1a" "s1b" "s1c" "s2b" "s2c" "s2d" -permutation "s2a" "s1a" "s1b" "s2b" "s1c" "s2c" "s2d" -permutation "s2a" "s1a" "s1b" "s2b" "s2c" "s1c" "s2d" -permutation "s2a" "s1a" "s2b" "s1b" "s1c" "s2c" "s2d" -permutation "s2a" "s1a" "s2b" "s1b" "s2c" "s1c" "s2d" -permutation "s2a" "s1a" "s2b" "s2c" "s1b" "s2d" "s1c" -permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s1b" "s1c" -permutation "s2a" "s2b" "s1a" "s1b" "s1c" "s2c" "s2d" -permutation "s2a" "s2b" "s1a" "s1b" "s2c" "s1c" "s2d" -permutation "s2a" "s2b" "s1a" "s2c" "s1b" "s2d" "s1c" -permutation "s2a" "s2b" "s1a" "s2c" "s2d" "s1b" "s1c" -permutation "s2a" "s2b" "s2c" "s1a" "s1b" "s2d" "s1c" -permutation "s2a" "s2b" "s2c" "s1a" "s2d" "s1b" "s1c" -permutation "s2a" "s2b" "s2c" "s2d" "s1a" "s1b" "s1c" +permutation s1a s1b s1c s2a s2b s2c s2d +permutation s1a s1b s2a s1c s2b s2c s2d +permutation s1a s1b s2a s2b s1c s2c s2d +permutation s1a s1b s2a s2b s2c s1c s2d +permutation s1a s2a s1b s1c s2b s2c s2d +permutation s1a s2a s1b s2b s1c s2c s2d +permutation s1a s2a s1b s2b s2c s1c s2d +permutation s1a s2a s2b s1b s1c s2c s2d +permutation s1a s2a s2b s1b s2c s1c s2d +permutation s1a s2a s2b s2c s1b s2d s1c +permutation s1a s2a s2b s2c s2d s1b s1c +permutation s2a s1a s1b s1c s2b s2c s2d +permutation s2a s1a s1b s2b s1c s2c s2d +permutation s2a s1a s1b s2b s2c s1c s2d +permutation s2a s1a s2b s1b s1c s2c s2d +permutation s2a s1a s2b s1b s2c s1c s2d +permutation s2a s1a s2b s2c s1b s2d s1c +permutation s2a s1a s2b s2c s2d s1b s1c +permutation s2a s2b s1a s1b s1c s2c s2d +permutation s2a s2b s1a s1b s2c s1c s2d +permutation s2a s2b s1a s2c s1b s2d s1c +permutation s2a s2b s1a s2c s2d s1b s1c +permutation s2a s2b s2c s1a s1b s2d s1c +permutation s2a s2b s2c s1a s2d s1b s1c +permutation s2a s2b s2c s2d s1a s1b s1c diff --git a/src/test/isolation/specs/deadlock-hard.spec b/src/test/isolation/specs/deadlock-hard.spec index 3316d75e953d5..60bedca237a48 100644 --- a/src/test/isolation/specs/deadlock-hard.spec +++ b/src/test/isolation/specs/deadlock-hard.spec @@ -20,53 +20,53 @@ teardown DROP TABLE a1, a2, a3, a4, a5, a6, a7, a8; } -session "s1" +session s1 setup { BEGIN; SET deadlock_timeout = '100s'; } -step "s1a1" { LOCK TABLE a1; } -step "s1a2" { LOCK TABLE a2; } -step "s1c" { COMMIT; } +step s1a1 { LOCK TABLE a1; } +step s1a2 { LOCK TABLE a2; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN; SET deadlock_timeout = '100s'; } -step "s2a2" { LOCK TABLE a2; } -step "s2a3" { LOCK TABLE a3; } -step "s2c" { COMMIT; } +step s2a2 { LOCK TABLE a2; } +step s2a3 { LOCK TABLE a3; } +step s2c { COMMIT; } -session "s3" +session s3 setup { BEGIN; SET deadlock_timeout = '100s'; } -step "s3a3" { LOCK TABLE a3; } -step "s3a4" { LOCK TABLE a4; } -step "s3c" { COMMIT; } +step s3a3 { LOCK TABLE a3; } +step s3a4 { LOCK TABLE a4; } +step s3c { COMMIT; } -session "s4" +session s4 setup { BEGIN; SET deadlock_timeout = '100s'; } -step "s4a4" { LOCK TABLE a4; } -step "s4a5" { LOCK TABLE a5; } -step "s4c" { COMMIT; } +step s4a4 { LOCK TABLE a4; } +step s4a5 { LOCK TABLE a5; } +step s4c { COMMIT; } -session "s5" +session s5 setup { BEGIN; SET deadlock_timeout = '100s'; } -step "s5a5" { LOCK TABLE a5; } -step "s5a6" { LOCK TABLE a6; } -step "s5c" { COMMIT; } +step s5a5 { LOCK TABLE a5; } +step s5a6 { LOCK TABLE a6; } +step s5c { COMMIT; } -session "s6" +session s6 setup { BEGIN; SET deadlock_timeout = '100s'; } -step "s6a6" { LOCK TABLE a6; } -step "s6a7" { LOCK TABLE a7; } -step "s6c" { COMMIT; } +step s6a6 { LOCK TABLE a6; } +step s6a7 { LOCK TABLE a7; } +step s6c { COMMIT; } -session "s7" +session s7 setup { BEGIN; SET deadlock_timeout = '100s'; } -step "s7a7" { LOCK TABLE a7; } -step "s7a8" { LOCK TABLE a8; } -step "s7c" { COMMIT; } +step s7a7 { LOCK TABLE a7; } +step s7a8 { LOCK TABLE a8; } +step s7c { COMMIT; } -session "s8" +session s8 setup { BEGIN; SET deadlock_timeout = '10ms'; } -step "s8a8" { LOCK TABLE a8; } -step "s8a1" { LOCK TABLE a1; } -step "s8c" { COMMIT; } +step s8a8 { LOCK TABLE a8; } +step s8a1 { LOCK TABLE a1; } +step s8c { COMMIT; } # Note: when s8a1 detects the deadlock and fails, s7a8 is released, making # it timing-dependent which query completion is received first by the tester. @@ -76,4 +76,4 @@ step "s8c" { COMMIT; } # dummy blocking mark to s8a1 to ensure it will be reported as "waiting" # regardless of that. -permutation "s1a1" "s2a2" "s3a3" "s4a4" "s5a5" "s6a6" "s7a7" "s8a8" "s1a2" "s2a3" "s3a4" "s4a5" "s5a6" "s6a7" "s7a8"("s8a1") "s8a1"(*) "s8c" "s7c" "s6c" "s5c" "s4c" "s3c" "s2c" "s1c" +permutation s1a1 s2a2 s3a3 s4a4 s5a5 s6a6 s7a7 s8a8 s1a2 s2a3 s3a4 s4a5 s5a6 s6a7 s7a8(s8a1) s8a1(*) s8c s7c s6c s5c s4c s3c s2c s1c diff --git a/src/test/isolation/specs/deadlock-parallel.spec b/src/test/isolation/specs/deadlock-parallel.spec index 7ad290c0bddf8..a050a4963ab94 100644 --- a/src/test/isolation/specs/deadlock-parallel.spec +++ b/src/test/isolation/specs/deadlock-parallel.spec @@ -53,33 +53,33 @@ teardown drop table bigt; } -session "d1" +session d1 setup { BEGIN isolation level repeatable read; SET force_parallel_mode = off; SET deadlock_timeout = '10s'; } # these locks will be taken in the leader, so they will persist: -step "d1a1" { SELECT lock_share(1,x), lock_excl(3,x) FROM bigt LIMIT 1; } +step d1a1 { SELECT lock_share(1,x), lock_excl(3,x) FROM bigt LIMIT 1; } # this causes all the parallel workers to take locks: -step "d1a2" { SET force_parallel_mode = on; +step d1a2 { SET force_parallel_mode = on; SET parallel_setup_cost = 0; SET parallel_tuple_cost = 0; SET min_parallel_table_scan_size = 0; SET parallel_leader_participation = off; SET max_parallel_workers_per_gather = 3; SELECT sum(lock_share(2,x)) FROM bigt; } -step "d1c" { COMMIT; } +step d1c { COMMIT; } -session "d2" +session d2 setup { BEGIN isolation level repeatable read; SET force_parallel_mode = off; SET deadlock_timeout = '10ms'; } # this lock will be taken in the leader, so it will persist: -step "d2a2" { select lock_share(2,x) FROM bigt LIMIT 1; } +step d2a2 { select lock_share(2,x) FROM bigt LIMIT 1; } # this causes all the parallel workers to take locks; # after which, make the leader take lock 3 to prevent client-driven deadlock -step "d2a1" { SET force_parallel_mode = on; +step d2a1 { SET force_parallel_mode = on; SET parallel_setup_cost = 0; SET parallel_tuple_cost = 0; SET min_parallel_table_scan_size = 0; @@ -90,24 +90,24 @@ step "d2a1" { SET force_parallel_mode = on; RESET parallel_setup_cost; RESET parallel_tuple_cost; SELECT lock_share(3,x) FROM bigt LIMIT 1; } -step "d2c" { COMMIT; } +step d2c { COMMIT; } -session "e1" +session e1 setup { BEGIN isolation level repeatable read; SET force_parallel_mode = on; SET deadlock_timeout = '10s'; } # this lock will be taken in a parallel worker, but we don't need it to persist -step "e1l" { SELECT lock_excl(1,x) FROM bigt LIMIT 1; } -step "e1c" { COMMIT; } +step e1l { SELECT lock_excl(1,x) FROM bigt LIMIT 1; } +step e1c { COMMIT; } -session "e2" +session e2 setup { BEGIN isolation level repeatable read; SET force_parallel_mode = on; SET deadlock_timeout = '10s'; } # this lock will be taken in a parallel worker, but we don't need it to persist -step "e2l" { SELECT lock_excl(2,x) FROM bigt LIMIT 1; } -step "e2c" { COMMIT; } +step e2l { SELECT lock_excl(2,x) FROM bigt LIMIT 1; } +step e2c { COMMIT; } -permutation "d1a1" "d2a2" "e1l" "e2l" "d1a2" "d2a1" "d1c" "e1c" "d2c" "e2c" +permutation d1a1 d2a2 e1l e2l d1a2 d2a1 d1c e1c d2c e2c diff --git a/src/test/isolation/specs/deadlock-simple.spec b/src/test/isolation/specs/deadlock-simple.spec index b1300ca77ceab..3086dc7c867ab 100644 --- a/src/test/isolation/specs/deadlock-simple.spec +++ b/src/test/isolation/specs/deadlock-simple.spec @@ -14,16 +14,16 @@ teardown DROP TABLE a1; } -session "s1" +session s1 setup { BEGIN; } -step "s1as" { LOCK TABLE a1 IN ACCESS SHARE MODE; } -step "s1ae" { LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; } -step "s1c" { COMMIT; } +step s1as { LOCK TABLE a1 IN ACCESS SHARE MODE; } +step s1ae { LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "s2as" { LOCK TABLE a1 IN ACCESS SHARE MODE; } -step "s2ae" { LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; } -step "s2c" { COMMIT; } +step s2as { LOCK TABLE a1 IN ACCESS SHARE MODE; } +step s2ae { LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; } +step s2c { COMMIT; } -permutation "s1as" "s2as" "s1ae" "s2ae" "s1c" "s2c" +permutation s1as s2as s1ae s2ae s1c s2c diff --git a/src/test/isolation/specs/deadlock-soft-2.spec b/src/test/isolation/specs/deadlock-soft-2.spec index 6ff915f6061d2..5b7d3db5036d2 100644 --- a/src/test/isolation/specs/deadlock-soft-2.spec +++ b/src/test/isolation/specs/deadlock-soft-2.spec @@ -13,31 +13,31 @@ teardown DROP TABLE a1, a2; } -session "s1" +session s1 setup { BEGIN; SET deadlock_timeout = '10ms'; } -step "s1a" { LOCK TABLE a1 IN SHARE UPDATE EXCLUSIVE MODE; } -step "s1b" { LOCK TABLE a2 IN SHARE UPDATE EXCLUSIVE MODE; } -step "s1c" { COMMIT; } +step s1a { LOCK TABLE a1 IN SHARE UPDATE EXCLUSIVE MODE; } +step s1b { LOCK TABLE a2 IN SHARE UPDATE EXCLUSIVE MODE; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN; SET deadlock_timeout = '100s'; } -step "s2a" { LOCK TABLE a2 IN ACCESS SHARE MODE; } -step "s2b" { LOCK TABLE a1 IN SHARE UPDATE EXCLUSIVE MODE; } -step "s2c" { COMMIT; } +step s2a { LOCK TABLE a2 IN ACCESS SHARE MODE; } +step s2b { LOCK TABLE a1 IN SHARE UPDATE EXCLUSIVE MODE; } +step s2c { COMMIT; } -session "s3" +session s3 setup { BEGIN; SET deadlock_timeout = '100s'; } -step "s3a" { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; } -step "s3c" { COMMIT; } +step s3a { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; } +step s3c { COMMIT; } -session "s4" +session s4 setup { BEGIN; SET deadlock_timeout = '100s'; } -step "s4a" { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; } -step "s4c" { COMMIT; } +step s4a { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; } +step s4c { COMMIT; } # The expected output for this test assumes that isolationtester will # detect step s1b as waiting before the deadlock detector runs and # releases s1 from its blocked state. To ensure that happens even in # very slow (CLOBBER_CACHE_ALWAYS) cases, apply a (*) annotation. -permutation "s1a" "s2a" "s2b" "s3a" "s4a" "s1b"(*) "s1c" "s2c" "s3c" "s4c" +permutation s1a s2a s2b s3a s4a s1b(*) s1c s2c s3c s4c diff --git a/src/test/isolation/specs/deadlock-soft.spec b/src/test/isolation/specs/deadlock-soft.spec index 49d16e027c4d0..bc9c6a7d438f2 100644 --- a/src/test/isolation/specs/deadlock-soft.spec +++ b/src/test/isolation/specs/deadlock-soft.spec @@ -15,26 +15,26 @@ teardown DROP TABLE a1, a2; } -session "d1" +session d1 setup { BEGIN; SET deadlock_timeout = '10s'; } -step "d1a1" { LOCK TABLE a1 IN ACCESS SHARE MODE; } -step "d1a2" { LOCK TABLE a2 IN ACCESS SHARE MODE; } -step "d1c" { COMMIT; } +step d1a1 { LOCK TABLE a1 IN ACCESS SHARE MODE; } +step d1a2 { LOCK TABLE a2 IN ACCESS SHARE MODE; } +step d1c { COMMIT; } -session "d2" +session d2 setup { BEGIN; SET deadlock_timeout = '10ms'; } -step "d2a2" { LOCK TABLE a2 IN ACCESS SHARE MODE; } -step "d2a1" { LOCK TABLE a1 IN ACCESS SHARE MODE; } -step "d2c" { COMMIT; } +step d2a2 { LOCK TABLE a2 IN ACCESS SHARE MODE; } +step d2a1 { LOCK TABLE a1 IN ACCESS SHARE MODE; } +step d2c { COMMIT; } -session "e1" +session e1 setup { BEGIN; SET deadlock_timeout = '10s'; } -step "e1l" { LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; } -step "e1c" { COMMIT; } +step e1l { LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; } +step e1c { COMMIT; } -session "e2" +session e2 setup { BEGIN; SET deadlock_timeout = '10s'; } -step "e2l" { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; } -step "e2c" { COMMIT; } +step e2l { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; } +step e2c { COMMIT; } -permutation "d1a1" "d2a2" "e1l" "e2l" "d1a2" "d2a1" "d1c" "e1c" "d2c" "e2c" +permutation d1a1 d2a2 e1l e2l d1a2 d2a1 d1c e1c d2c e2c diff --git a/src/test/isolation/specs/delete-abort-savept-2.spec b/src/test/isolation/specs/delete-abort-savept-2.spec index d35c67f670db6..65bd936dcca29 100644 --- a/src/test/isolation/specs/delete-abort-savept-2.spec +++ b/src/test/isolation/specs/delete-abort-savept-2.spec @@ -14,21 +14,21 @@ teardown DROP TABLE foo; } -session "s1" +session s1 setup { BEGIN; } -step "s1l" { SELECT * FROM foo FOR KEY SHARE; } -step "s1svp" { SAVEPOINT f; } -step "s1d" { SELECT * FROM foo FOR NO KEY UPDATE; } -step "s1r" { ROLLBACK TO f; } -step "s1c" { COMMIT; } +step s1l { SELECT * FROM foo FOR KEY SHARE; } +step s1svp { SAVEPOINT f; } +step s1d { SELECT * FROM foo FOR NO KEY UPDATE; } +step s1r { ROLLBACK TO f; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "s2l" { SELECT * FROM foo FOR UPDATE; } -step "s2l2" { SELECT * FROM foo FOR NO KEY UPDATE; } -step "s2c" { COMMIT; } +step s2l { SELECT * FROM foo FOR UPDATE; } +step s2l2 { SELECT * FROM foo FOR NO KEY UPDATE; } +step s2c { COMMIT; } -permutation "s1l" "s1svp" "s1d" "s1r" "s2l" "s1c" "s2c" -permutation "s1l" "s1svp" "s1d" "s2l" "s1r" "s1c" "s2c" -permutation "s1l" "s1svp" "s1d" "s1r" "s2l2" "s1c" "s2c" -permutation "s1l" "s1svp" "s1d" "s2l2" "s1r" "s1c" "s2c" +permutation s1l s1svp s1d s1r s2l s1c s2c +permutation s1l s1svp s1d s2l s1r s1c s2c +permutation s1l s1svp s1d s1r s2l2 s1c s2c +permutation s1l s1svp s1d s2l2 s1r s1c s2c diff --git a/src/test/isolation/specs/delete-abort-savept.spec b/src/test/isolation/specs/delete-abort-savept.spec index bc32e216829a5..498ffed32ab4b 100644 --- a/src/test/isolation/specs/delete-abort-savept.spec +++ b/src/test/isolation/specs/delete-abort-savept.spec @@ -15,23 +15,23 @@ teardown DROP TABLE foo; } -session "s1" +session s1 setup { BEGIN; } -step "s1l" { SELECT * FROM foo FOR KEY SHARE; } -step "s1svp" { SAVEPOINT f; } -step "s1d" { DELETE FROM foo; } -step "s1r" { ROLLBACK TO f; } -step "s1c" { COMMIT; } +step s1l { SELECT * FROM foo FOR KEY SHARE; } +step s1svp { SAVEPOINT f; } +step s1d { DELETE FROM foo; } +step s1r { ROLLBACK TO f; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "s2l" { SELECT * FROM foo FOR UPDATE; } -step "s2c" { COMMIT; } +step s2l { SELECT * FROM foo FOR UPDATE; } +step s2c { COMMIT; } -permutation "s1l" "s1svp" "s1d" "s1r" "s1c" "s2l" "s2c" -permutation "s1l" "s1svp" "s1d" "s1r" "s2l" "s1c" "s2c" -permutation "s1l" "s1svp" "s1d" "s2l" "s1r" "s1c" "s2c" -permutation "s1l" "s1svp" "s2l" "s1d" "s1r" "s1c" "s2c" -permutation "s1l" "s2l" "s1svp" "s1d" "s1r" "s1c" "s2c" -permutation "s2l" "s1l" "s2c" "s1svp" "s1d" "s1r" "s1c" -permutation "s2l" "s2c" "s1l" "s1svp" "s1d" "s1r" "s1c" +permutation s1l s1svp s1d s1r s1c s2l s2c +permutation s1l s1svp s1d s1r s2l s1c s2c +permutation s1l s1svp s1d s2l s1r s1c s2c +permutation s1l s1svp s2l s1d s1r s1c s2c +permutation s1l s2l s1svp s1d s1r s1c s2c +permutation s2l s1l s2c s1svp s1d s1r s1c +permutation s2l s2c s1l s1svp s1d s1r s1c diff --git a/src/test/isolation/specs/detach-partition-concurrently-1.spec b/src/test/isolation/specs/detach-partition-concurrently-1.spec index 6ca0adac1d062..835fe895401c3 100644 --- a/src/test/isolation/specs/detach-partition-concurrently-1.spec +++ b/src/test/isolation/specs/detach-partition-concurrently-1.spec @@ -14,56 +14,56 @@ teardown { DROP TABLE IF EXISTS d_listp, d_listp2, d_listp_foobar; } -session "s1" -step "s1b" { BEGIN; } -step "s1brr" { BEGIN ISOLATION LEVEL REPEATABLE READ; } -step "s1s" { SELECT * FROM d_listp; } -step "s1ins" { INSERT INTO d_listp VALUES (1); } -step "s1ins2" { INSERT INTO d_listp VALUES (2); } -step "s1prep" { PREPARE f(int) AS INSERT INTO d_listp VALUES ($1); } -step "s1prep1" { PREPARE f(int) AS INSERT INTO d_listp VALUES (1); } -step "s1prep2" { PREPARE f(int) AS INSERT INTO d_listp VALUES (2); } -step "s1exec1" { EXECUTE f(1); } -step "s1exec2" { EXECUTE f(2); } -step "s1dealloc" { DEALLOCATE f; } -step "s1c" { COMMIT; } +session s1 +step s1b { BEGIN; } +step s1brr { BEGIN ISOLATION LEVEL REPEATABLE READ; } +step s1s { SELECT * FROM d_listp; } +step s1ins { INSERT INTO d_listp VALUES (1); } +step s1ins2 { INSERT INTO d_listp VALUES (2); } +step s1prep { PREPARE f(int) AS INSERT INTO d_listp VALUES ($1); } +step s1prep1 { PREPARE f(int) AS INSERT INTO d_listp VALUES (1); } +step s1prep2 { PREPARE f(int) AS INSERT INTO d_listp VALUES (2); } +step s1exec1 { EXECUTE f(1); } +step s1exec2 { EXECUTE f(2); } +step s1dealloc { DEALLOCATE f; } +step s1c { COMMIT; } -session "s2" -step "s2detach" { ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; } -step "s2drop" { DROP TABLE d_listp2; } +session s2 +step s2detach { ALTER TABLE d_listp DETACH PARTITION d_listp2 CONCURRENTLY; } +step s2drop { DROP TABLE d_listp2; } -session "s3" -step "s3s" { SELECT * FROM d_listp; } -step "s3i" { SELECT relpartbound IS NULL FROM pg_class where relname = 'd_listp2'; } -step "s3ins2" { INSERT INTO d_listp VALUES (2); } +session s3 +step s3s { SELECT * FROM d_listp; } +step s3i { SELECT relpartbound IS NULL FROM pg_class where relname = 'd_listp2'; } +step s3ins2 { INSERT INTO d_listp VALUES (2); } # The transaction that detaches hangs until it sees any older transaction # terminate, as does anybody else. -permutation "s1b" "s1s" "s2detach" "s1s" "s1c" "s1s" +permutation s1b s1s s2detach s1s s1c s1s # relpartbound remains set until s1 commits # XXX this could be timing dependent :-( -permutation "s1b" "s1s" "s2detach" "s1s" "s3s" "s3i" "s1c" "s3i" "s2drop" "s1s" +permutation s1b s1s s2detach s1s s3s s3i s1c s3i s2drop s1s # In read-committed mode, the partition disappears from view of concurrent # transactions immediately. But if a write lock is held, then the detach # has to wait. -permutation "s1b" "s1s" "s2detach" "s1ins" "s1s" "s1c" -permutation "s1b" "s1s" "s1ins2" "s2detach" "s1ins" "s1s" "s1c" +permutation s1b s1s s2detach s1ins s1s s1c +permutation s1b s1s s1ins2 s2detach s1ins s1s s1c # In repeatable-read mode, the partition remains visible until commit even # if the to-be-detached partition is not locked for write. -permutation "s1brr" "s1s" "s2detach" "s1ins" "s1s" "s1c" -permutation "s1brr" "s1s" "s2detach" "s1s" "s1c" +permutation s1brr s1s s2detach s1ins s1s s1c +permutation s1brr s1s s2detach s1s s1c # Another process trying to acquire a write lock will be blocked behind the # detacher -permutation "s1b" "s1ins2" "s2detach" "s3ins2" "s1c" +permutation s1b s1ins2 s2detach s3ins2 s1c # a prepared query is not blocked -permutation "s1brr" "s1prep" "s1s" "s2detach" "s1s" "s1exec1" "s3s" "s1dealloc" "s1c" -permutation "s1brr" "s1prep" "s1exec2" "s2detach" "s1s" "s1exec2" "s3s" "s1c" "s1dealloc" -permutation "s1brr" "s1prep" "s1s" "s2detach" "s1s" "s1exec2" "s1c" "s1dealloc" -permutation "s1brr" "s1prep" "s2detach" "s1s" "s1exec2" "s1c" "s1dealloc" -permutation "s1brr" "s1prep1" "s2detach" "s1s" "s1exec2" "s1c" "s1dealloc" -permutation "s1brr" "s1prep2" "s2detach" "s1s" "s1exec2" "s1c" "s1dealloc" +permutation s1brr s1prep s1s s2detach s1s s1exec1 s3s s1dealloc s1c +permutation s1brr s1prep s1exec2 s2detach s1s s1exec2 s3s s1c s1dealloc +permutation s1brr s1prep s1s s2detach s1s s1exec2 s1c s1dealloc +permutation s1brr s1prep s2detach s1s s1exec2 s1c s1dealloc +permutation s1brr s1prep1 s2detach s1s s1exec2 s1c s1dealloc +permutation s1brr s1prep2 s2detach s1s s1exec2 s1c s1dealloc diff --git a/src/test/isolation/specs/detach-partition-concurrently-2.spec b/src/test/isolation/specs/detach-partition-concurrently-2.spec index 9281c80a69fab..fa767eaefe72a 100644 --- a/src/test/isolation/specs/detach-partition-concurrently-2.spec +++ b/src/test/isolation/specs/detach-partition-concurrently-2.spec @@ -15,27 +15,27 @@ setup teardown { DROP TABLE IF EXISTS d_lp_fk, d_lp_fk_1, d_lp_fk_2, d_lp_fk_r; } -session "s1" -step "s1b" { BEGIN; } -step "s1s" { SELECT * FROM d_lp_fk; } -step "s1c" { COMMIT; } +session s1 +step s1b { BEGIN; } +step s1s { SELECT * FROM d_lp_fk; } +step s1c { COMMIT; } -session "s2" -step "s2d" { ALTER TABLE d_lp_fk DETACH PARTITION d_lp_fk_1 CONCURRENTLY; } +session s2 +step s2d { ALTER TABLE d_lp_fk DETACH PARTITION d_lp_fk_1 CONCURRENTLY; } -session "s3" -step "s3b" { BEGIN; } -step "s3i1" { INSERT INTO d_lp_fk_r VALUES (1); } -step "s3i2" { INSERT INTO d_lp_fk_r VALUES (2); } -step "s3c" { COMMIT; } +session s3 +step s3b { BEGIN; } +step s3i1 { INSERT INTO d_lp_fk_r VALUES (1); } +step s3i2 { INSERT INTO d_lp_fk_r VALUES (2); } +step s3c { COMMIT; } # The transaction that detaches hangs until it sees any older transaction # terminate. -permutation "s1b" "s1s" "s2d" "s3i1" "s1c" -permutation "s1b" "s1s" "s2d" "s3i2" "s3i2" "s1c" +permutation s1b s1s s2d s3i1 s1c +permutation s1b s1s s2d s3i2 s3i2 s1c -permutation "s1b" "s1s" "s3i1" "s2d" "s1c" -permutation "s1b" "s1s" "s3i2" "s2d" "s1c" +permutation s1b s1s s3i1 s2d s1c +permutation s1b s1s s3i2 s2d s1c # what if s3 has an uncommitted insertion? -permutation "s1b" "s1s" "s3b" "s2d" "s3i1" "s1c" "s3c" +permutation s1b s1s s3b s2d s3i1 s1c s3c diff --git a/src/test/isolation/specs/detach-partition-concurrently-3.spec b/src/test/isolation/specs/detach-partition-concurrently-3.spec index 5c8d45fee5dd0..e74c73b93db64 100644 --- a/src/test/isolation/specs/detach-partition-concurrently-3.spec +++ b/src/test/isolation/specs/detach-partition-concurrently-3.spec @@ -20,67 +20,67 @@ teardown { DROP TABLE IF EXISTS d3_listp, d3_listp1, d3_listp2, d3_pid; } -session "s1" -step "s1b" { BEGIN; } -step "s1brr" { BEGIN ISOLATION LEVEL REPEATABLE READ; } -step "s1s" { SELECT * FROM d3_listp; } -step "s1spart" { SELECT * FROM d3_listp1; } -step "s1cancel" { SELECT pg_cancel_backend(pid) FROM d3_pid; } -step "s1noop" { } -step "s1c" { COMMIT; } -step "s1alter" { ALTER TABLE d3_listp1 ALTER a DROP NOT NULL; } -step "s1insert" { INSERT INTO d3_listp VALUES (1); } -step "s1insertpart" { INSERT INTO d3_listp1 VALUES (1); } -step "s1drop" { DROP TABLE d3_listp; } -step "s1droppart" { DROP TABLE d3_listp1; } -step "s1trunc" { TRUNCATE TABLE d3_listp; } -step "s1list" { SELECT relname FROM pg_catalog.pg_class +session s1 +step s1b { BEGIN; } +step s1brr { BEGIN ISOLATION LEVEL REPEATABLE READ; } +step s1s { SELECT * FROM d3_listp; } +step s1spart { SELECT * FROM d3_listp1; } +step s1cancel { SELECT pg_cancel_backend(pid) FROM d3_pid; } +step s1noop { } +step s1c { COMMIT; } +step s1alter { ALTER TABLE d3_listp1 ALTER a DROP NOT NULL; } +step s1insert { INSERT INTO d3_listp VALUES (1); } +step s1insertpart { INSERT INTO d3_listp1 VALUES (1); } +step s1drop { DROP TABLE d3_listp; } +step s1droppart { DROP TABLE d3_listp1; } +step s1trunc { TRUNCATE TABLE d3_listp; } +step s1list { SELECT relname FROM pg_catalog.pg_class WHERE relname LIKE 'd3_listp%' ORDER BY 1; } -step "s1describe" { SELECT 'd3_listp' AS root, * FROM pg_partition_tree('d3_listp') +step s1describe { SELECT 'd3_listp' AS root, * FROM pg_partition_tree('d3_listp') UNION ALL SELECT 'd3_listp1', * FROM pg_partition_tree('d3_listp1'); } -session "s2" -step "s2begin" { BEGIN; } -step "s2snitch" { INSERT INTO d3_pid SELECT pg_backend_pid(); } -step "s2detach" { ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; } -step "s2detach2" { ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; } -step "s2detachfinal" { ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; } -step "s2drop" { DROP TABLE d3_listp1; } -step "s2commit" { COMMIT; } +session s2 +step s2begin { BEGIN; } +step s2snitch { INSERT INTO d3_pid SELECT pg_backend_pid(); } +step s2detach { ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; } +step s2detach2 { ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; } +step s2detachfinal { ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; } +step s2drop { DROP TABLE d3_listp1; } +step s2commit { COMMIT; } # Try various things while the partition is in "being detached" state, with # no session waiting. -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1describe" "s1alter" -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1insert" "s1c" -permutation "s2snitch" "s1brr" "s1s" "s2detach"("s1cancel") "s1cancel" "s1insert" "s1c" "s1spart" -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1insertpart" +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1describe s1alter +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1insert s1c +permutation s2snitch s1brr s1s s2detach(s1cancel) s1cancel s1insert s1c s1spart +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1insertpart # Test partition descriptor caching -permutation "s2snitch" "s1b" "s1s" "s2detach2"("s1cancel") "s1cancel" "s1c" "s1brr" "s1insert" "s1s" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach2"("s1cancel") "s1cancel" "s1c" "s1brr" "s1s" "s1insert" "s1s" "s1c" +permutation s2snitch s1b s1s s2detach2(s1cancel) s1cancel s1c s1brr s1insert s1s s1insert s1c +permutation s2snitch s1b s1s s2detach2(s1cancel) s1cancel s1c s1brr s1s s1insert s1s s1c # "drop" here does both tables -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1drop" "s1list" +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1drop s1list # "truncate" only does parent, not partition -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1trunc" "s1spart" +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1trunc s1spart # If a partition pending detach exists, we cannot drop another one -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1noop" "s2detach2" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1noop" "s2detachfinal" "s1c" "s2detach2" -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1droppart" "s2detach2" +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1noop s2detach2 s1c +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1noop s2detachfinal s1c s2detach2 +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1droppart s2detach2 # When a partition with incomplete detach is dropped, we grab lock on parent too. -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s2begin" "s2drop" "s1s" "s2commit" +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s2begin s2drop s1s s2commit # Partially detach, then select and try to complete the detach. Reading # from partition blocks (AEL is required on partition); reading from parent # does not block. -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1b" "s1spart" "s2detachfinal" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1b" "s1s" "s2detachfinal" "s1c" +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1b s1spart s2detachfinal s1c +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1b s1s s2detachfinal s1c # DETACH FINALIZE in a transaction block. No insert/select on the partition # is allowed concurrently with that. -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s1b" "s1spart" "s2detachfinal" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s2begin" "s2detachfinal" "s2commit" -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s2begin" "s2detachfinal" "s1spart" "s2commit" -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1c" "s2begin" "s2detachfinal" "s1insertpart" "s2commit" +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1b s1spart s2detachfinal s1c +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s2begin s2detachfinal s2commit +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s2begin s2detachfinal s1spart s2commit +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s2begin s2detachfinal s1insertpart s2commit diff --git a/src/test/isolation/specs/detach-partition-concurrently-4.spec b/src/test/isolation/specs/detach-partition-concurrently-4.spec index 208808bc3d48d..8f998ed39a8ee 100644 --- a/src/test/isolation/specs/detach-partition-concurrently-4.spec +++ b/src/test/isolation/specs/detach-partition-concurrently-4.spec @@ -23,61 +23,61 @@ setup { create table d4_pid (pid int); } -session "s1" -step "s1b" { begin; } -step "s1brr" { begin isolation level repeatable read; } -step "s1s" { select * from d4_primary; } -step "s1cancel" { select pg_cancel_backend(pid) from d4_pid; } -step "s1noop" { } -step "s1insert" { insert into d4_fk values (1); } -step "s1c" { commit; } -step "s1declare" { declare f cursor for select * from d4_primary; } -step "s1declare2" { declare f cursor for select * from d4_fk where a = 2; } -step "s1fetchall" { fetch all from f; } -step "s1fetchone" { fetch 1 from f; } -step "s1updcur" { update d4_fk set a = 1 where current of f; } -step "s1svpt" { savepoint f; } -step "s1rollback" { rollback to f; } +session s1 +step s1b { begin; } +step s1brr { begin isolation level repeatable read; } +step s1s { select * from d4_primary; } +step s1cancel { select pg_cancel_backend(pid) from d4_pid; } +step s1noop { } +step s1insert { insert into d4_fk values (1); } +step s1c { commit; } +step s1declare { declare f cursor for select * from d4_primary; } +step s1declare2 { declare f cursor for select * from d4_fk where a = 2; } +step s1fetchall { fetch all from f; } +step s1fetchone { fetch 1 from f; } +step s1updcur { update d4_fk set a = 1 where current of f; } +step s1svpt { savepoint f; } +step s1rollback { rollback to f; } -session "s2" -step "s2snitch" { insert into d4_pid select pg_backend_pid(); } -step "s2detach" { alter table d4_primary detach partition d4_primary1 concurrently; } +session s2 +step s2snitch { insert into d4_pid select pg_backend_pid(); } +step s2detach { alter table d4_primary detach partition d4_primary1 concurrently; } -session "s3" -step "s3brr" { begin isolation level repeatable read; } -step "s3insert" { insert into d4_fk values (1); } -step "s3commit" { commit; } -step "s3vacfreeze" { vacuum freeze pg_catalog.pg_inherits; } +session s3 +step s3brr { begin isolation level repeatable read; } +step s3insert { insert into d4_fk values (1); } +step s3commit { commit; } +step s3vacfreeze { vacuum freeze pg_catalog.pg_inherits; } # Trying to insert into a partially detached partition is rejected -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s1insert" "s1c" +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1insert s1c +permutation s2snitch s1b s1s s2detach s1insert s1c # ... even under REPEATABLE READ mode. -permutation "s2snitch" "s1brr" "s1s" "s2detach"("s1cancel") "s1cancel" "s1insert" "s1c" -permutation "s2snitch" "s1brr" "s1s" "s2detach" "s1insert" "s1c" +permutation s2snitch s1brr s1s s2detach(s1cancel) s1cancel s1insert s1c +permutation s2snitch s1brr s1s s2detach s1insert s1c # If you read the referenced table using a cursor, you can see a row that the # RI query does not see. -permutation "s2snitch" "s1b" "s1declare" "s2detach"("s1cancel") "s1cancel" "s1fetchall" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s1declare" "s2detach" "s1fetchall" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s1declare" "s2detach"("s1cancel") "s1cancel" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" -permutation "s2snitch" "s1b" "s1declare" "s2detach" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" -permutation "s2snitch" "s1b" "s2detach"("s1cancel") "s1declare" "s1cancel" "s1fetchall" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s2detach" "s1declare" "s1fetchall" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s2detach"("s1cancel") "s1declare" "s1cancel" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" -permutation "s2snitch" "s1b" "s2detach" "s1declare" "s1svpt" "s1insert" "s1rollback" "s1fetchall" "s1c" +permutation s2snitch s1b s1declare s2detach(s1cancel) s1cancel s1fetchall s1insert s1c +permutation s2snitch s1b s1declare s2detach s1fetchall s1insert s1c +permutation s2snitch s1b s1declare s2detach(s1cancel) s1cancel s1svpt s1insert s1rollback s1fetchall s1c +permutation s2snitch s1b s1declare s2detach s1svpt s1insert s1rollback s1fetchall s1c +permutation s2snitch s1b s2detach(s1cancel) s1declare s1cancel s1fetchall s1insert s1c +permutation s2snitch s1b s2detach s1declare s1fetchall s1insert s1c +permutation s2snitch s1b s2detach(s1cancel) s1declare s1cancel s1svpt s1insert s1rollback s1fetchall s1c +permutation s2snitch s1b s2detach s1declare s1svpt s1insert s1rollback s1fetchall s1c # Creating the referencing row using a cursor -permutation "s2snitch" "s1brr" "s1declare2" "s1fetchone" "s2detach"("s1cancel") "s1cancel" "s1updcur" "s1c" -permutation "s2snitch" "s1brr" "s1declare2" "s1fetchone" "s2detach" "s1updcur" "s1c" -permutation "s2snitch" "s1brr" "s1declare2" "s1fetchone" "s1updcur" "s2detach" "s1c" +permutation s2snitch s1brr s1declare2 s1fetchone s2detach(s1cancel) s1cancel s1updcur s1c +permutation s2snitch s1brr s1declare2 s1fetchone s2detach s1updcur s1c +permutation s2snitch s1brr s1declare2 s1fetchone s1updcur s2detach s1c # Try reading the table from an independent session. -permutation "s2snitch" "s1b" "s1s" "s2detach" "s3insert" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s3brr" "s3insert" "s3commit" "s1cancel" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach" "s3brr" "s3insert" "s3commit" "s1c" +permutation s2snitch s1b s1s s2detach s3insert s1c +permutation s2snitch s1b s1s s2detach(s1cancel) s3brr s3insert s3commit s1cancel s1c +permutation s2snitch s1b s1s s2detach s3brr s3insert s3commit s1c # Try one where we VACUUM FREEZE pg_inherits (to verify that xmin change is # handled correctly). -permutation "s2snitch" "s1brr" "s1s" "s2detach"("s1cancel") "s1cancel" "s1noop" "s3vacfreeze" "s1s" "s1insert" "s1c" -permutation "s2snitch" "s1b" "s1s" "s2detach"("s1cancel") "s1cancel" "s1noop" "s3vacfreeze" "s1s" "s1insert" "s1c" +permutation s2snitch s1brr s1s s2detach(s1cancel) s1cancel s1noop s3vacfreeze s1s s1insert s1c +permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1noop s3vacfreeze s1s s1insert s1c diff --git a/src/test/isolation/specs/drop-index-concurrently-1.spec b/src/test/isolation/specs/drop-index-concurrently-1.spec index dd42b70ddf3fe..812b5de22617d 100644 --- a/src/test/isolation/specs/drop-index-concurrently-1.spec +++ b/src/test/isolation/specs/drop-index-concurrently-1.spec @@ -17,25 +17,25 @@ teardown DROP TABLE test_dc; } -session "s1" -step "noseq" { SET enable_seqscan = false; } -step "chkiso" { SELECT (setting in ('read committed','read uncommitted')) AS is_read_committed FROM pg_settings WHERE name = 'default_transaction_isolation'; } -step "prepi" { PREPARE getrow_idx AS SELECT * FROM test_dc WHERE data=34 ORDER BY id,data; } -step "preps" { PREPARE getrow_seq AS SELECT * FROM test_dc WHERE data::text=34::text ORDER BY id,data; } -step "begin" { BEGIN; } -step "explaini" { EXPLAIN (COSTS OFF) EXECUTE getrow_idx; } -step "explains" { EXPLAIN (COSTS OFF) EXECUTE getrow_seq; } -step "selecti" { EXECUTE getrow_idx; } -step "selects" { EXECUTE getrow_seq; } -step "end" { COMMIT; } +session s1 +step noseq { SET enable_seqscan = false; } +step chkiso { SELECT (setting in ('read committed','read uncommitted')) AS is_read_committed FROM pg_settings WHERE name = 'default_transaction_isolation'; } +step prepi { PREPARE getrow_idx AS SELECT * FROM test_dc WHERE data=34 ORDER BY id,data; } +step preps { PREPARE getrow_seq AS SELECT * FROM test_dc WHERE data::text=34::text ORDER BY id,data; } +step begin { BEGIN; } +step explaini { EXPLAIN (COSTS OFF) EXECUTE getrow_idx; } +step explains { EXPLAIN (COSTS OFF) EXECUTE getrow_seq; } +step selecti { EXECUTE getrow_idx; } +step selects { EXECUTE getrow_seq; } +step end { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "select2" { SELECT * FROM test_dc WHERE data=34 ORDER BY id,data; } -step "insert2" { INSERT INTO test_dc(data) SELECT * FROM generate_series(1, 100); } -step "end2" { COMMIT; } +step select2 { SELECT * FROM test_dc WHERE data=34 ORDER BY id,data; } +step insert2 { INSERT INTO test_dc(data) SELECT * FROM generate_series(1, 100); } +step end2 { COMMIT; } -session "s3" -step "drop" { DROP INDEX CONCURRENTLY test_dc_data; } +session s3 +step drop { DROP INDEX CONCURRENTLY test_dc_data; } -permutation "noseq" "chkiso" "prepi" "preps" "begin" "explaini" "explains" "select2" "drop" "insert2" "end2" "selecti" "selects" "end" +permutation noseq chkiso prepi preps begin explaini explains select2 drop insert2 end2 selecti selects end diff --git a/src/test/isolation/specs/eval-plan-qual-trigger.spec b/src/test/isolation/specs/eval-plan-qual-trigger.spec index d3b55b7d409e3..b512edd28798a 100644 --- a/src/test/isolation/specs/eval-plan-qual-trigger.spec +++ b/src/test/isolation/specs/eval-plan-qual-trigger.spec @@ -54,53 +54,53 @@ teardown } -session "s0" -step "s0_rep" { SELECT * FROM trigtest ORDER BY key, data } +session s0 +step s0_rep { SELECT * FROM trigtest ORDER BY key, data } -session "s1" +session s1 #setup { } -step "s1_b_rc" { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; } -step "s1_b_rr" { BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; } -step "s1_c" { COMMIT; } -step "s1_r" { ROLLBACK; } -step "s1_trig_rep_b_i" { CREATE TRIGGER rep_b_i BEFORE INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); } -step "s1_trig_rep_a_i" { CREATE TRIGGER rep_a_i AFTER INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); } -step "s1_trig_rep_b_u" { CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); } -step "s1_trig_rep_a_u" { CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); } -step "s1_trig_rep_b_d" { CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); } -step "s1_trig_rep_a_d" { CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); } -step "s1_ins_a" { INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; } -step "s1_ins_b" { INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; } -step "s1_ins_c" { INSERT INTO trigtest VALUES ('key-c', 'val-c-s1') RETURNING *; } -step "s1_del_a" { +step s1_b_rc { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; } +step s1_b_rr { BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; } +step s1_c { COMMIT; } +step s1_r { ROLLBACK; } +step s1_trig_rep_b_i { CREATE TRIGGER rep_b_i BEFORE INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); } +step s1_trig_rep_a_i { CREATE TRIGGER rep_a_i AFTER INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); } +step s1_trig_rep_b_u { CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); } +step s1_trig_rep_a_u { CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); } +step s1_trig_rep_b_d { CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); } +step s1_trig_rep_a_d { CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); } +step s1_ins_a { INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; } +step s1_ins_b { INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; } +step s1_ins_c { INSERT INTO trigtest VALUES ('key-c', 'val-c-s1') RETURNING *; } +step s1_del_a { DELETE FROM trigtest WHERE noisy_oper('upd', key, '=', 'key-a') AND noisy_oper('upk', data, '<>', 'mismatch') RETURNING * } -step "s1_del_b" { +step s1_del_b { DELETE FROM trigtest WHERE noisy_oper('upd', key, '=', 'key-b') AND noisy_oper('upk', data, '<>', 'mismatch') RETURNING * } -step "s1_upd_a_data" { +step s1_upd_a_data { UPDATE trigtest SET data = data || '-ups1' WHERE noisy_oper('upd', key, '=', 'key-a') AND noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; } -step "s1_upd_b_data" { +step s1_upd_b_data { UPDATE trigtest SET data = data || '-ups1' WHERE noisy_oper('upd', key, '=', 'key-b') AND noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; } -step "s1_upd_a_tob" { +step s1_upd_a_tob { UPDATE trigtest SET key = 'key-b', data = data || '-tobs1' WHERE noisy_oper('upk', key, '=', 'key-a') AND @@ -108,42 +108,42 @@ step "s1_upd_a_tob" { RETURNING *; } -session "s2" +session s2 #setup { } -step "s2_b_rc" { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; } -step "s2_b_rr" { BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; } -step "s2_c" { COMMIT; } -step "s2_r" { ROLLBACK; } -step "s2_ins_a" { INSERT INTO trigtest VALUES ('key-a', 'val-a-s2') RETURNING *; } -step "s2_del_a" { +step s2_b_rc { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; } +step s2_b_rr { BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; } +step s2_c { COMMIT; } +step s2_r { ROLLBACK; } +step s2_ins_a { INSERT INTO trigtest VALUES ('key-a', 'val-a-s2') RETURNING *; } +step s2_del_a { DELETE FROM trigtest WHERE noisy_oper('upd', key, '=', 'key-a') AND noisy_oper('upk', data, '<>', 'mismatch') RETURNING * } -step "s2_upd_a_data" { +step s2_upd_a_data { UPDATE trigtest SET data = data || '-ups2' WHERE noisy_oper('upd', key, '=', 'key-a') AND noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; } -step "s2_upd_b_data" { +step s2_upd_b_data { UPDATE trigtest SET data = data || '-ups2' WHERE noisy_oper('upd', key, '=', 'key-b') AND noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; } -step "s2_upd_all_data" { +step s2_upd_all_data { UPDATE trigtest SET data = data || '-ups2' WHERE noisy_oper('upd', key, '<>', 'mismatch') AND noisy_oper('upk', data, '<>', 'mismatch') RETURNING *; } -step "s2_upsert_a_data" { +step s2_upsert_a_data { INSERT INTO trigtest VALUES ('key-a', 'val-a-upss2') ON CONFLICT (key) DO UPDATE SET data = trigtest.data || '-upserts2' @@ -153,19 +153,19 @@ step "s2_upsert_a_data" { RETURNING *; } -session "s3" +session s3 #setup { } -step "s3_b_rc" { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; } -step "s3_c" { COMMIT; } -step "s3_r" { ROLLBACK; } -step "s3_del_a" { +step s3_b_rc { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; } +step s3_c { COMMIT; } +step s3_r { ROLLBACK; } +step s3_del_a { DELETE FROM trigtest WHERE noisy_oper('upd', key, '=', 'key-a') AND noisy_oper('upk', data, '<>', 'mismatch') RETURNING * } -step "s3_upd_a_data" { +step s3_upd_a_data { UPDATE trigtest SET data = data || '-ups3' WHERE noisy_oper('upd', key, '=', 'key-a') AND @@ -175,236 +175,236 @@ step "s3_upd_a_data" { ### base case verifying that triggers see performed modifications # s1 updates, s1 commits, s2 updates -permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s1_c" "s2_upd_a_data" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_u s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s1_c s2_upd_a_data s2_c + s0_rep # s1 updates, s1 rolls back, s2 updates -permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s1_r" "s2_upd_a_data" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_u s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s1_r s2_upd_a_data s2_c + s0_rep # s1 updates, s1 commits back, s2 deletes -permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s1_c" "s2_del_a" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s1_c s2_del_a s2_c + s0_rep # s1 updates, s1 rolls back back, s2 deletes -permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s1_r" "s2_del_a" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s1_r s2_del_a s2_c + s0_rep ### Verify EPQ is performed if necessary, and skipped if transaction rolled back # s1 updates, s2 updates, s1 commits, EPQ -permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s2_upd_a_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_u s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s2_upd_a_data s1_c s2_c + s0_rep # s1 updates, s2 updates, s1 rolls back, no EPQ -permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s2_upd_a_data" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_u s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s2_upd_a_data s1_r s2_c + s0_rep # s1 updates, s2 deletes, s1 commits, EPQ -permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s2_upd_a_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s2_upd_a_data s1_c s2_c + s0_rep # s1 updates, s2 deletes, s1 rolls back, no EPQ -permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s2_upd_a_data" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s2_upd_a_data s1_r s2_c + s0_rep # s1 deletes, s2 updates, s1 commits, EPQ -permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_del_a" "s2_upd_a_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_del_a s2_upd_a_data s1_c s2_c + s0_rep # s1 deletes, s2 updates, s1 rolls back, no EPQ -permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_del_a" "s2_upd_a_data" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_del_a s2_upd_a_data s1_r s2_c + s0_rep # s1 inserts, s2 inserts, s1 commits, s2 inserts, unique conflict -permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_a_i" "s1_trig_rep_a_d" - "s1_b_rc" "s2_b_rc" - "s1_ins_a" "s2_ins_a" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_a_i s1_trig_rep_a_d + s1_b_rc s2_b_rc + s1_ins_a s2_ins_a s1_c s2_c + s0_rep # s1 inserts, s2 inserts, s1 rolls back, s2 inserts, no unique conflict -permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_a_i" "s1_trig_rep_a_d" - "s1_b_rc" "s2_b_rc" - "s1_ins_a" "s2_ins_a" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_a_i s1_trig_rep_a_d + s1_b_rc s2_b_rc + s1_ins_a s2_ins_a s1_r s2_c + s0_rep # s1 updates, s2 upserts, s1 commits, EPQ -permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s2_upsert_a_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s2_upsert_a_data s1_c s2_c + s0_rep # s1 updates, s2 upserts, s1 rolls back, no EPQ -permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s2_upsert_a_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s2_upsert_a_data s1_c s2_c + s0_rep # s1 inserts, s2 upserts, s1 commits -permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_b_rc" "s2_b_rc" - "s1_ins_a" "s2_upsert_a_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u + s1_b_rc s2_b_rc + s1_ins_a s2_upsert_a_data s1_c s2_c + s0_rep # s1 inserts, s2 upserts, s1 rolls back -permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_b_rc" "s2_b_rc" - "s1_ins_a" "s2_upsert_a_data" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u + s1_b_rc s2_b_rc + s1_ins_a s2_upsert_a_data s1_r s2_c + s0_rep # s1 inserts, s2 upserts, s1 updates, s1 commits, EPQ -permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_b_rc" "s2_b_rc" - "s1_ins_a" "s1_upd_a_data" "s2_upsert_a_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u + s1_b_rc s2_b_rc + s1_ins_a s1_upd_a_data s2_upsert_a_data s1_c s2_c + s0_rep # s1 inserts, s2 upserts, s1 updates, s1 rolls back, no EPQ -permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_b_rc" "s2_b_rc" - "s1_ins_a" "s1_upd_a_data" "s2_upsert_a_data" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u + s1_b_rc s2_b_rc + s1_ins_a s1_upd_a_data s2_upsert_a_data s1_r s2_c + s0_rep ### Verify EPQ is performed if necessary, and skipped if transaction rolled back, ### just without before triggers (for comparison, no additional row locks) # s1 updates, s2 updates, s1 commits, EPQ -permutation "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s2_upd_a_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s2_upd_a_data s1_c s2_c + s0_rep # s1 updates, s2 updates, s1 rolls back, no EPQ -permutation "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s2_upd_a_data" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s2_upd_a_data s1_r s2_c + s0_rep # s1 updates, s2 deletes, s1 commits, EPQ -permutation "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s2_del_a" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s2_del_a s1_c s2_c + s0_rep # s1 updates, s2 deletes, s1 rolls back, no EPQ -permutation "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_upd_a_data" "s2_del_a" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_upd_a_data s2_del_a s1_r s2_c + s0_rep # s1 deletes, s2 updates, s1 commits, EPQ -permutation "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_del_a" "s2_upd_a_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_del_a s2_upd_a_data s1_c s2_c + s0_rep # s1 deletes, s2 updates, s1 rolls back, no EPQ -permutation "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_del_a" "s2_upd_a_data" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_del_a s2_upd_a_data s1_r s2_c + s0_rep # s1 deletes, s2 deletes, s1 commits, EPQ -permutation "s1_trig_rep_a_d" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_del_a" "s2_del_a" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_a_d + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_del_a s2_del_a s1_c s2_c + s0_rep # s1 deletes, s2 deletes, s1 rolls back, no EPQ -permutation "s1_trig_rep_a_d" - "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_del_a" "s2_del_a" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_a_d + s1_ins_a s1_ins_b s1_b_rc s2_b_rc + s1_del_a s2_del_a s1_r s2_c + s0_rep ### Verify that an update affecting a row that has been ### updated/deleted to not match the where clause anymore works ### correctly # s1 updates to different key, s2 updates old key, s1 commits, EPQ failure should lead to no update -permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc" - "s1_upd_a_tob" "s2_upd_a_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_u s1_trig_rep_a_u + s1_ins_a s1_ins_c s1_b_rc s2_b_rc + s1_upd_a_tob s2_upd_a_data s1_c s2_c + s0_rep # s1 updates to different key, s2 updates old key, s1 rolls back, no EPQ failure -permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc" - "s1_upd_a_tob" "s2_upd_a_data" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_u s1_trig_rep_a_u + s1_ins_a s1_ins_c s1_b_rc s2_b_rc + s1_upd_a_tob s2_upd_a_data s1_r s2_c + s0_rep # s1 updates to different key, s2 updates new key, s1 commits, s2 will # not see tuple with new key and not block -permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc" - "s1_upd_a_tob" "s2_upd_b_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_u s1_trig_rep_a_u + s1_ins_a s1_ins_c s1_b_rc s2_b_rc + s1_upd_a_tob s2_upd_b_data s1_c s2_c + s0_rep # s1 updates to different key, s2 updates all keys, s1 commits, s2, # will not see tuple with old key, but block on old, and then follow # the chain -permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc" - "s1_upd_a_tob" "s2_upd_all_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_u s1_trig_rep_a_u + s1_ins_a s1_ins_c s1_b_rc s2_b_rc + s1_upd_a_tob s2_upd_all_data s1_c s2_c + s0_rep # s1 deletes, s2 updates, s1 committs, EPQ failure should lead to no update -permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc" - "s1_del_a" "s2_upd_a_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_c s1_b_rc s2_b_rc + s1_del_a s2_upd_a_data s1_c s2_c + s0_rep # s1 deletes, s2 updates, s1 rolls back, no EPQ failure -permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc" - "s1_del_a" "s2_upd_a_data" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_c s1_b_rc s2_b_rc + s1_del_a s2_upd_a_data s1_r s2_c + s0_rep # s1 deletes, s2 deletes, s1 committs, EPQ failure should lead to no delete -permutation "s1_trig_rep_b_d" "s1_trig_rep_a_d" - "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc" - "s1_del_a" "s2_del_a" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_d s1_trig_rep_a_d + s1_ins_a s1_ins_c s1_b_rc s2_b_rc + s1_del_a s2_del_a s1_c s2_c + s0_rep # s1 deletes, s2 deletes, s1 rolls back, no EPQ failure -permutation "s1_trig_rep_b_d" "s1_trig_rep_a_d" - "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc" - "s1_del_a" "s2_del_a" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_d s1_trig_rep_a_d + s1_ins_a s1_ins_c s1_b_rc s2_b_rc + s1_del_a s2_del_a s1_r s2_c + s0_rep ### Verify EPQ with more than two participants works ## XXX: Disable tests, there is some potential for instability here that's not yet fully understood ## s1 updates, s2 updates, s3 updates, s1 commits, s2 EPQ, s2 commits, s3 EPQ -#permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u" -# "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" "s3_b_rc" -# "s1_upd_a_data" "s2_upd_a_data" "s3_upd_a_data" "s1_c" "s2_c" "s3_c" -# "s0_rep" +#permutation s1_trig_rep_b_u s1_trig_rep_a_u +# s1_ins_a s1_ins_b s1_b_rc s2_b_rc s3_b_rc +# s1_upd_a_data s2_upd_a_data s3_upd_a_data s1_c s2_c s3_c +# s0_rep ## s1 updates, s2 updates, s3 updates, s1 commits, s2 EPQ, s2 rolls back, s3 EPQ -#permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u" -# "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" "s3_b_rc" -# "s1_upd_a_data" "s2_upd_a_data" "s3_upd_a_data" "s1_c" "s2_r" "s3_c" -# "s0_rep" +#permutation s1_trig_rep_b_u s1_trig_rep_a_u +# s1_ins_a s1_ins_b s1_b_rc s2_b_rc s3_b_rc +# s1_upd_a_data s2_upd_a_data s3_upd_a_data s1_c s2_r s3_c +# s0_rep ## s1 updates, s3 updates, s2 upserts, s1 updates, s1 commits, s3 EPQ, s3 deletes, s3 commits, s2 inserts without EPQ recheck -#permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u" -# "s1_ins_a" "s1_b_rc" "s2_b_rc" "s3_b_rc" -# "s1_upd_a_data" "s3_upd_a_data" "s2_upsert_a_data" "s1_upd_a_data" "s1_c" "s3_del_a" "s3_c" "s2_c" -# "s0_rep" +#permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u +# s1_ins_a s1_b_rc s2_b_rc s3_b_rc +# s1_upd_a_data s3_upd_a_data s2_upsert_a_data s1_upd_a_data s1_c s3_del_a s3_c s2_c +# s0_rep ## s1 updates, s3 updates, s2 upserts, s1 updates, s1 commits, s3 EPQ, s3 deletes, s3 rolls back, s2 EPQ -#permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u" -# "s1_ins_a" "s1_b_rc" "s2_b_rc" "s3_b_rc" -# "s1_upd_a_data" "s3_upd_a_data" "s2_upsert_a_data" "s1_upd_a_data" "s1_c" "s3_del_a" "s3_r" "s2_c" -# "s0_rep" +#permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u +# s1_ins_a s1_b_rc s2_b_rc s3_b_rc +# s1_upd_a_data s3_upd_a_data s2_upsert_a_data s1_upd_a_data s1_c s3_del_a s3_r s2_c +# s0_rep ### Document that EPQ doesn't "leap" onto a tuple that would match after blocking # s1 inserts a, s1 updates b, s2 updates b, s1 deletes b, s1 updates a to b, s1 commits, s2 EPQ finds tuple deleted -permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_b" "s1_b_rc" "s2_b_rc" - "s1_ins_a" "s1_upd_b_data" "s2_upd_b_data" "s1_del_b" "s1_upd_a_tob" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_b s1_b_rc s2_b_rc + s1_ins_a s1_upd_b_data s2_upd_b_data s1_del_b s1_upd_a_tob s1_c s2_c + s0_rep ### Triggers for EPQ detect serialization failures # s1 updates, s2 updates, s1 commits, serialization failure -permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rr" "s2_b_rr" - "s1_upd_a_data" "s2_upd_a_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_u s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rr s2_b_rr + s1_upd_a_data s2_upd_a_data s1_c s2_c + s0_rep # s1 updates, s2 updates, s1 rolls back, s2 succeeds -permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rr" "s2_b_rr" - "s1_upd_a_data" "s2_upd_a_data" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_u s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rr s2_b_rr + s1_upd_a_data s2_upd_a_data s1_r s2_c + s0_rep # s1 deletes, s2 updates, s1 commits, serialization failure -permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rr" "s2_b_rr" - "s1_del_a" "s2_upd_a_data" "s1_c" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rr s2_b_rr + s1_del_a s2_upd_a_data s1_c s2_c + s0_rep # s1 deletes, s2 updates, s1 rolls back, s2 succeeds -permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u" - "s1_ins_a" "s1_ins_b" "s1_b_rr" "s2_b_rr" - "s1_del_a" "s2_upd_a_data" "s1_r" "s2_c" - "s0_rep" +permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u + s1_ins_a s1_ins_b s1_b_rr s2_b_rr + s1_del_a s2_upd_a_data s1_r s2_c + s0_rep diff --git a/src/test/isolation/specs/eval-plan-qual.spec b/src/test/isolation/specs/eval-plan-qual.spec index 70fa320fc4da4..4bb959504aa22 100644 --- a/src/test/isolation/specs/eval-plan-qual.spec +++ b/src/test/isolation/specs/eval-plan-qual.spec @@ -66,25 +66,25 @@ teardown DROP FUNCTION noisy_oper(text, anynonarray, text, anynonarray) } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } # wx1 then wx2 checks the basic case of re-fetching up-to-date values -step "wx1" { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; } +step wx1 { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; } # wy1 then wy2 checks the case where quals pass then fail -step "wy1" { UPDATE accounts SET balance = balance + 500 WHERE accountid = 'checking' RETURNING balance; } +step wy1 { UPDATE accounts SET balance = balance + 500 WHERE accountid = 'checking' RETURNING balance; } -step "wxext1" { UPDATE accounts_ext SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; } -step "tocds1" { UPDATE accounts SET accountid = 'cds' WHERE accountid = 'checking'; } -step "tocdsext1" { UPDATE accounts_ext SET accountid = 'cds' WHERE accountid = 'checking'; } +step wxext1 { UPDATE accounts_ext SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; } +step tocds1 { UPDATE accounts SET accountid = 'cds' WHERE accountid = 'checking'; } +step tocdsext1 { UPDATE accounts_ext SET accountid = 'cds' WHERE accountid = 'checking'; } # d1 then wx1 checks that update can deal with the updated row vanishing # wx2 then d1 checks that the delete affects the updated row # wx2, wx2 then d1 checks that the delete checks the quals correctly (balance too high) # wx2, d2, then d1 checks that delete handles a vanishing row correctly -step "d1" { DELETE FROM accounts WHERE accountid = 'checking' AND balance < 1500 RETURNING balance; } +step d1 { DELETE FROM accounts WHERE accountid = 'checking' AND balance < 1500 RETURNING balance; } # upsert tests are to check writable-CTE cases -step "upsert1" { +step upsert1 { WITH upsert AS (UPDATE accounts SET balance = balance + 500 WHERE accountid = 'savings' @@ -99,29 +99,29 @@ step "upsert1" { # writep2/returningp1 tests a memory allocation issue # writep3a/writep3b tests updates touching more than one table -step "readp1" { SELECT tableoid::regclass, ctid, * FROM p WHERE b IN (0, 1) AND c = 0 FOR UPDATE; } -step "writep1" { UPDATE p SET b = -1 WHERE a = 1 AND b = 1 AND c = 0; } -step "writep2" { UPDATE p SET b = -b WHERE a = 1 AND c = 0; } -step "writep3a" { UPDATE p SET b = -b WHERE c = 0; } -step "c1" { COMMIT; } -step "r1" { ROLLBACK; } +step readp1 { SELECT tableoid::regclass, ctid, * FROM p WHERE b IN (0, 1) AND c = 0 FOR UPDATE; } +step writep1 { UPDATE p SET b = -1 WHERE a = 1 AND b = 1 AND c = 0; } +step writep2 { UPDATE p SET b = -b WHERE a = 1 AND c = 0; } +step writep3a { UPDATE p SET b = -b WHERE c = 0; } +step c1 { COMMIT; } +step r1 { ROLLBACK; } # these tests are meant to exercise EvalPlanQualFetchRowMark, # ie, handling non-locked tables in an EvalPlanQual recheck -step "partiallock" { +step partiallock { SELECT * FROM accounts a1, accounts a2 WHERE a1.accountid = a2.accountid FOR UPDATE OF a1; } -step "lockwithvalues" { +step lockwithvalues { -- Reference rowmark column that differs in type from targetlist at some attno. -- See CAHU7rYZo_C4ULsAx_LAj8az9zqgrD8WDd4hTegDTMM1LMqrBsg@mail.gmail.com SELECT a1.*, v.id FROM accounts a1, (values('checking'::text, 'nan'::text),('savings', 'nan')) v(id, notnumeric) WHERE a1.accountid = v.id AND v.notnumeric != 'einszwei' FOR UPDATE OF a1; } -step "partiallock_ext" { +step partiallock_ext { SELECT * FROM accounts_ext a1, accounts_ext a2 WHERE a1.accountid = a2.accountid FOR UPDATE OF a1; @@ -130,7 +130,7 @@ step "partiallock_ext" { # these tests exercise EvalPlanQual with a SubLink sub-select (which should be # unaffected by any EPQ recheck behavior in the outer query); cf bug #14034 -step "updateforss" { +step updateforss { UPDATE table_a SET value = 'newTableAValue' WHERE id = 1; UPDATE table_b SET value = 'newTableBValue' WHERE id = 1; } @@ -138,13 +138,13 @@ step "updateforss" { # these tests exercise EvalPlanQual with conditional InitPlans which # have not been executed prior to the EPQ -step "updateforcip" { +step updateforcip { UPDATE table_a SET value = NULL WHERE id = 1; } # these tests exercise mark/restore during EPQ recheck, cf bug #15032 -step "selectjoinforupdate" { +step selectjoinforupdate { set local enable_nestloop to 0; set local enable_hashjoin to 0; set local enable_seqscan to 0; @@ -155,7 +155,7 @@ step "selectjoinforupdate" { # these tests exercise Result plan nodes participating in EPQ -step "selectresultforupdate" { +step selectresultforupdate { select * from (select 1 as x) ss1 join (select 7 as y) ss2 on true left join table_a a on a.id = x, jointest jt where jt.id = y; @@ -170,28 +170,28 @@ step "selectresultforupdate" { # test for EPQ on a partitioned result table -step "simplepartupdate" { +step simplepartupdate { update parttbl set a = a; } # test scenarios where update may cause row movement -step "simplepartupdate_route1to2" { +step simplepartupdate_route1to2 { update parttbl set a = 2 where c = 1 returning *; } -step "simplepartupdate_noroute" { +step simplepartupdate_noroute { update parttbl set b = 2 where c = 1 returning *; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "wx2" { UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; } -step "wy2" { UPDATE accounts SET balance = balance + 1000 WHERE accountid = 'checking' AND balance < 1000 RETURNING balance; } -step "d2" { DELETE FROM accounts WHERE accountid = 'checking'; } +step wx2 { UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; } +step wy2 { UPDATE accounts SET balance = balance + 1000 WHERE accountid = 'checking' AND balance < 1000 RETURNING balance; } +step d2 { DELETE FROM accounts WHERE accountid = 'checking'; } -step "upsert2" { +step upsert2 { WITH upsert AS (UPDATE accounts SET balance = balance + 1234 WHERE accountid = 'savings' @@ -199,45 +199,45 @@ step "upsert2" { INSERT INTO accounts SELECT 'savings', 1234 WHERE NOT EXISTS (SELECT 1 FROM upsert); } -step "wx2_ext" { UPDATE accounts_ext SET balance = balance + 450; } -step "readp2" { SELECT tableoid::regclass, ctid, * FROM p WHERE b IN (0, 1) AND c = 0 FOR UPDATE; } -step "returningp1" { +step wx2_ext { UPDATE accounts_ext SET balance = balance + 450; } +step readp2 { SELECT tableoid::regclass, ctid, * FROM p WHERE b IN (0, 1) AND c = 0 FOR UPDATE; } +step returningp1 { WITH u AS ( UPDATE p SET b = b WHERE a > 0 RETURNING * ) SELECT * FROM u; } -step "writep3b" { UPDATE p SET b = -b WHERE c = 0; } -step "readforss" { +step writep3b { UPDATE p SET b = -b WHERE c = 0; } +step readforss { SELECT ta.id AS ta_id, ta.value AS ta_value, (SELECT ROW(tb.id, tb.value) FROM table_b tb WHERE ta.id = tb.id) AS tb_row FROM table_a ta WHERE ta.id = 1 FOR UPDATE OF ta; } -step "updateforcip2" { +step updateforcip2 { UPDATE table_a SET value = COALESCE(value, (SELECT text 'newValue')) WHERE id = 1; } -step "updateforcip3" { +step updateforcip3 { WITH d(val) AS (SELECT text 'newValue' FROM generate_series(1,1)) UPDATE table_a SET value = COALESCE(value, (SELECT val FROM d)) WHERE id = 1; } -step "wrtwcte" { UPDATE table_a SET value = 'tableAValue2' WHERE id = 1; } -step "wrjt" { UPDATE jointest SET data = 42 WHERE id = 7; } -step "complexpartupdate" { +step wrtwcte { UPDATE table_a SET value = 'tableAValue2' WHERE id = 1; } +step wrjt { UPDATE jointest SET data = 42 WHERE id = 7; } +step complexpartupdate { with u as (update parttbl set a = a returning parttbl.*) update parttbl set a = u.a from u; } -step "complexpartupdate_route_err1" { +step complexpartupdate_route_err1 { with u as (update another_parttbl set a = 1 returning another_parttbl.*) update parttbl p set a = u.a from u where p.a = u.a and p.c = 1 returning p.*; } -step "complexpartupdate_route" { +step complexpartupdate_route { with u as (update another_parttbl set a = 1 returning another_parttbl.*) update parttbl p set a = p.b from u where p.a = u.a and p.c = 1 returning p.*; } -step "complexpartupdate_doesnt_route" { +step complexpartupdate_doesnt_route { with u as (update another_parttbl set a = 1 returning another_parttbl.*) update parttbl p set a = 3 - p.b from u where p.a = u.a and p.c = 1 returning p.*; } @@ -246,13 +246,13 @@ step "complexpartupdate_doesnt_route" { # (updated|deleted). The *fail versions of the tests additionally # perform an update, via a function, in a different command, to test # behaviour relating to that. -step "updwcte" { WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *) UPDATE accounts a SET balance = doup.balance + 100 FROM doup RETURNING *; } -step "updwctefail" { WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *, update_checking(999)) UPDATE accounts a SET balance = doup.balance + 100 FROM doup RETURNING *; } -step "delwcte" { WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *) DELETE FROM accounts a USING doup RETURNING *; } -step "delwctefail" { WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *, update_checking(999)) DELETE FROM accounts a USING doup RETURNING *; } +step updwcte { WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *) UPDATE accounts a SET balance = doup.balance + 100 FROM doup RETURNING *; } +step updwctefail { WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *, update_checking(999)) UPDATE accounts a SET balance = doup.balance + 100 FROM doup RETURNING *; } +step delwcte { WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *) DELETE FROM accounts a USING doup RETURNING *; } +step delwctefail { WITH doup AS (UPDATE accounts SET balance = balance + 1100 WHERE accountid = 'checking' RETURNING *, update_checking(999)) DELETE FROM accounts a USING doup RETURNING *; } # Check that nested EPQ works correctly -step "wnested2" { +step wnested2 { UPDATE accounts SET balance = balance - 1200 WHERE noisy_oper('upid', accountid, '=', 'checking') AND noisy_oper('up', balance, '>', 200.0) @@ -265,17 +265,17 @@ step "wnested2" { ); } -step "c2" { COMMIT; } -step "r2" { ROLLBACK; } +step c2 { COMMIT; } +step r2 { ROLLBACK; } -session "s3" +session s3 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "read" { SELECT * FROM accounts ORDER BY accountid; } -step "read_ext" { SELECT * FROM accounts_ext ORDER BY accountid; } -step "read_a" { SELECT * FROM table_a ORDER BY id; } +step read { SELECT * FROM accounts ORDER BY accountid; } +step read_ext { SELECT * FROM accounts_ext ORDER BY accountid; } +step read_a { SELECT * FROM table_a ORDER BY id; } # this test exercises EvalPlanQual with a CTE, cf bug #14328 -step "readwcte" { +step readwcte { WITH cte1 AS ( SELECT id FROM table_b WHERE value = 'tableBValue' @@ -289,7 +289,7 @@ step "readwcte" { } # this test exercises a different CTE misbehavior, cf bug #14870 -step "multireadwcte" { +step multireadwcte { WITH updated AS ( UPDATE table_a SET value = 'tableAValue3' WHERE id = 1 RETURNING id ) @@ -299,61 +299,61 @@ step "multireadwcte" { teardown { COMMIT; } # test that normal update follows update chains, and reverifies quals -permutation "wx1" "wx2" "c1" "c2" "read" -permutation "wy1" "wy2" "c1" "c2" "read" -permutation "wx1" "wx2" "r1" "c2" "read" -permutation "wy1" "wy2" "r1" "c2" "read" +permutation wx1 wx2 c1 c2 read +permutation wy1 wy2 c1 c2 read +permutation wx1 wx2 r1 c2 read +permutation wy1 wy2 r1 c2 read # test that deletes follow chains, and if necessary reverifies quals -permutation "wx1" "d1" "wx2" "c1" "c2" "read" -permutation "wx2" "d1" "c2" "c1" "read" -permutation "wx2" "wx2" "d1" "c2" "c1" "read" -permutation "wx2" "d2" "d1" "c2" "c1" "read" -permutation "wx1" "d1" "wx2" "r1" "c2" "read" -permutation "wx2" "d1" "r2" "c1" "read" -permutation "wx2" "wx2" "d1" "r2" "c1" "read" -permutation "wx2" "d2" "d1" "r2" "c1" "read" -permutation "d1" "wx2" "c1" "c2" "read" -permutation "d1" "wx2" "r1" "c2" "read" +permutation wx1 d1 wx2 c1 c2 read +permutation wx2 d1 c2 c1 read +permutation wx2 wx2 d1 c2 c1 read +permutation wx2 d2 d1 c2 c1 read +permutation wx1 d1 wx2 r1 c2 read +permutation wx2 d1 r2 c1 read +permutation wx2 wx2 d1 r2 c1 read +permutation wx2 d2 d1 r2 c1 read +permutation d1 wx2 c1 c2 read +permutation d1 wx2 r1 c2 read # Check that nested EPQ works correctly -permutation "wnested2" "c1" "c2" "read" -permutation "wx1" "wxext1" "wnested2" "c1" "c2" "read" -permutation "wx1" "wx1" "wxext1" "wnested2" "c1" "c2" "read" -permutation "wx1" "wx1" "wxext1" "wxext1" "wnested2" "c1" "c2" "read" -permutation "wx1" "wxext1" "wxext1" "wnested2" "c1" "c2" "read" -permutation "wx1" "tocds1" "wnested2" "c1" "c2" "read" -permutation "wx1" "tocdsext1" "wnested2" "c1" "c2" "read" +permutation wnested2 c1 c2 read +permutation wx1 wxext1 wnested2 c1 c2 read +permutation wx1 wx1 wxext1 wnested2 c1 c2 read +permutation wx1 wx1 wxext1 wxext1 wnested2 c1 c2 read +permutation wx1 wxext1 wxext1 wnested2 c1 c2 read +permutation wx1 tocds1 wnested2 c1 c2 read +permutation wx1 tocdsext1 wnested2 c1 c2 read # test that an update to a self-modified row is ignored when # previously updated by the same cid -permutation "wx1" "updwcte" "c1" "c2" "read" +permutation wx1 updwcte c1 c2 read # test that an update to a self-modified row throws error when # previously updated by a different cid -permutation "wx1" "updwctefail" "c1" "c2" "read" +permutation wx1 updwctefail c1 c2 read # test that a delete to a self-modified row is ignored when # previously updated by the same cid -permutation "wx1" "delwcte" "c1" "c2" "read" +permutation wx1 delwcte c1 c2 read # test that a delete to a self-modified row throws error when # previously updated by a different cid -permutation "wx1" "delwctefail" "c1" "c2" "read" - -permutation "upsert1" "upsert2" "c1" "c2" "read" -permutation "readp1" "writep1" "readp2" "c1" "c2" -permutation "writep2" "returningp1" "c1" "c2" -permutation "writep3a" "writep3b" "c1" "c2" -permutation "wx2" "partiallock" "c2" "c1" "read" -permutation "wx2" "lockwithvalues" "c2" "c1" "read" -permutation "wx2_ext" "partiallock_ext" "c2" "c1" "read_ext" -permutation "updateforss" "readforss" "c1" "c2" -permutation "updateforcip" "updateforcip2" "c1" "c2" "read_a" -permutation "updateforcip" "updateforcip3" "c1" "c2" "read_a" -permutation "wrtwcte" "readwcte" "c1" "c2" -permutation "wrjt" "selectjoinforupdate" "c2" "c1" -permutation "wrjt" "selectresultforupdate" "c2" "c1" -permutation "wrtwcte" "multireadwcte" "c1" "c2" - -permutation "simplepartupdate" "complexpartupdate" "c1" "c2" -permutation "simplepartupdate_route1to2" "complexpartupdate_route_err1" "c1" "c2" -permutation "simplepartupdate_noroute" "complexpartupdate_route" "c1" "c2" -permutation "simplepartupdate_noroute" "complexpartupdate_doesnt_route" "c1" "c2" +permutation wx1 delwctefail c1 c2 read + +permutation upsert1 upsert2 c1 c2 read +permutation readp1 writep1 readp2 c1 c2 +permutation writep2 returningp1 c1 c2 +permutation writep3a writep3b c1 c2 +permutation wx2 partiallock c2 c1 read +permutation wx2 lockwithvalues c2 c1 read +permutation wx2_ext partiallock_ext c2 c1 read_ext +permutation updateforss readforss c1 c2 +permutation updateforcip updateforcip2 c1 c2 read_a +permutation updateforcip updateforcip3 c1 c2 read_a +permutation wrtwcte readwcte c1 c2 +permutation wrjt selectjoinforupdate c2 c1 +permutation wrjt selectresultforupdate c2 c1 +permutation wrtwcte multireadwcte c1 c2 + +permutation simplepartupdate complexpartupdate c1 c2 +permutation simplepartupdate_route1to2 complexpartupdate_route_err1 c1 c2 +permutation simplepartupdate_noroute complexpartupdate_route c1 c2 +permutation simplepartupdate_noroute complexpartupdate_doesnt_route c1 c2 diff --git a/src/test/isolation/specs/fk-contention.spec b/src/test/isolation/specs/fk-contention.spec index 8481ae4e332fc..f11a1d8cefc47 100644 --- a/src/test/isolation/specs/fk-contention.spec +++ b/src/test/isolation/specs/fk-contention.spec @@ -10,10 +10,10 @@ teardown DROP TABLE foo, bar; } -session "s1" +session s1 setup { BEGIN; } -step "ins" { INSERT INTO bar VALUES (42); } -step "com" { COMMIT; } +step ins { INSERT INTO bar VALUES (42); } +step com { COMMIT; } -session "s2" -step "upd" { UPDATE foo SET b = 'Hello World'; } +session s2 +step upd { UPDATE foo SET b = 'Hello World'; } diff --git a/src/test/isolation/specs/fk-deadlock.spec b/src/test/isolation/specs/fk-deadlock.spec index 4f357c62ea560..b4970dd06fd70 100644 --- a/src/test/isolation/specs/fk-deadlock.spec +++ b/src/test/isolation/specs/fk-deadlock.spec @@ -18,29 +18,29 @@ teardown DROP TABLE parent, child; } -session "s1" +session s1 setup { BEGIN; SET deadlock_timeout = '100ms'; } -step "s1i" { INSERT INTO child VALUES (1, 1); } -step "s1u" { UPDATE parent SET aux = 'bar'; } -step "s1c" { COMMIT; } +step s1i { INSERT INTO child VALUES (1, 1); } +step s1u { UPDATE parent SET aux = 'bar'; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN; SET deadlock_timeout = '10s'; } -step "s2i" { INSERT INTO child VALUES (2, 1); } -step "s2u" { UPDATE parent SET aux = 'baz'; } -step "s2c" { COMMIT; } +step s2i { INSERT INTO child VALUES (2, 1); } +step s2u { UPDATE parent SET aux = 'baz'; } +step s2c { COMMIT; } -permutation "s1i" "s1u" "s1c" "s2i" "s2u" "s2c" -permutation "s1i" "s1u" "s2i" "s1c" "s2u" "s2c" -permutation "s1i" "s1u" "s2i" "s2u" "s1c" "s2c" -permutation "s1i" "s2i" "s1u" "s1c" "s2u" "s2c" -permutation "s1i" "s2i" "s1u" "s2u" "s1c" "s2c" -permutation "s1i" "s2i" "s2u" "s1u" "s2c" "s1c" -permutation "s1i" "s2i" "s2u" "s2c" "s1u" "s1c" -permutation "s2i" "s1i" "s1u" "s1c" "s2u" "s2c" -permutation "s2i" "s1i" "s1u" "s2u" "s1c" "s2c" -permutation "s2i" "s1i" "s2u" "s1u" "s2c" "s1c" -permutation "s2i" "s1i" "s2u" "s2c" "s1u" "s1c" -permutation "s2i" "s2u" "s1i" "s1u" "s2c" "s1c" -permutation "s2i" "s2u" "s1i" "s2c" "s1u" "s1c" -permutation "s2i" "s2u" "s2c" "s1i" "s1u" "s1c" +permutation s1i s1u s1c s2i s2u s2c +permutation s1i s1u s2i s1c s2u s2c +permutation s1i s1u s2i s2u s1c s2c +permutation s1i s2i s1u s1c s2u s2c +permutation s1i s2i s1u s2u s1c s2c +permutation s1i s2i s2u s1u s2c s1c +permutation s1i s2i s2u s2c s1u s1c +permutation s2i s1i s1u s1c s2u s2c +permutation s2i s1i s1u s2u s1c s2c +permutation s2i s1i s2u s1u s2c s1c +permutation s2i s1i s2u s2c s1u s1c +permutation s2i s2u s1i s1u s2c s1c +permutation s2i s2u s1i s2c s1u s1c +permutation s2i s2u s2c s1i s1u s1c diff --git a/src/test/isolation/specs/fk-deadlock2.spec b/src/test/isolation/specs/fk-deadlock2.spec index a8305246e13af..c8e0e4eb19a01 100644 --- a/src/test/isolation/specs/fk-deadlock2.spec +++ b/src/test/isolation/specs/fk-deadlock2.spec @@ -23,26 +23,26 @@ teardown DROP TABLE a, b; } -session "s1" +session s1 setup { BEGIN; SET deadlock_timeout = '100ms'; } -step "s1u1" { UPDATE A SET Col1 = 1 WHERE AID = 1; } -step "s1u2" { UPDATE B SET Col2 = 1 WHERE BID = 2; } -step "s1c" { COMMIT; } +step s1u1 { UPDATE A SET Col1 = 1 WHERE AID = 1; } +step s1u2 { UPDATE B SET Col2 = 1 WHERE BID = 2; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN; SET deadlock_timeout = '10s'; } -step "s2u1" { UPDATE B SET Col2 = 1 WHERE BID = 2; } -step "s2u2" { UPDATE B SET Col2 = 1 WHERE BID = 2; } -step "s2c" { COMMIT; } +step s2u1 { UPDATE B SET Col2 = 1 WHERE BID = 2; } +step s2u2 { UPDATE B SET Col2 = 1 WHERE BID = 2; } +step s2c { COMMIT; } -permutation "s1u1" "s1u2" "s1c" "s2u1" "s2u2" "s2c" -permutation "s1u1" "s1u2" "s2u1" "s1c" "s2u2" "s2c" -permutation "s1u1" "s2u1" "s1u2" "s2u2" "s2c" "s1c" -permutation "s1u1" "s2u1" "s2u2" "s1u2" "s2c" "s1c" -permutation "s1u1" "s2u1" "s2u2" "s2c" "s1u2" "s1c" -permutation "s2u1" "s1u1" "s1u2" "s2u2" "s2c" "s1c" -permutation "s2u1" "s1u1" "s2u2" "s1u2" "s2c" "s1c" -permutation "s2u1" "s1u1" "s2u2" "s2c" "s1u2" "s1c" -permutation "s2u1" "s2u2" "s1u1" "s1u2" "s2c" "s1c" -permutation "s2u1" "s2u2" "s1u1" "s2c" "s1u2" "s1c" -permutation "s2u1" "s2u2" "s2c" "s1u1" "s1u2" "s1c" +permutation s1u1 s1u2 s1c s2u1 s2u2 s2c +permutation s1u1 s1u2 s2u1 s1c s2u2 s2c +permutation s1u1 s2u1 s1u2 s2u2 s2c s1c +permutation s1u1 s2u1 s2u2 s1u2 s2c s1c +permutation s1u1 s2u1 s2u2 s2c s1u2 s1c +permutation s2u1 s1u1 s1u2 s2u2 s2c s1c +permutation s2u1 s1u1 s2u2 s1u2 s2c s1c +permutation s2u1 s1u1 s2u2 s2c s1u2 s1c +permutation s2u1 s2u2 s1u1 s1u2 s2c s1c +permutation s2u1 s2u2 s1u1 s2c s1u2 s1c +permutation s2u1 s2u2 s2c s1u1 s1u2 s1c diff --git a/src/test/isolation/specs/fk-partitioned-1.spec b/src/test/isolation/specs/fk-partitioned-1.spec index 4c760e89b343f..f71ee5cb17dfe 100644 --- a/src/test/isolation/specs/fk-partitioned-1.spec +++ b/src/test/isolation/specs/fk-partitioned-1.spec @@ -11,35 +11,35 @@ drop table if exists ppk, pfk, pfk1; insert into pfk1 values (1); } -session "s1" -step "s1b" { begin; } -step "s1d" { delete from ppk1 where a = 1; } -step "s1c" { commit; } +session s1 +step s1b { begin; } +step s1d { delete from ppk1 where a = 1; } +step s1c { commit; } -session "s2" -step "s2b" { begin; } -step "s2a" { alter table pfk attach partition pfk1 for values in (1); } -step "s2c" { commit; } +session s2 +step s2b { begin; } +step s2a { alter table pfk attach partition pfk1 for values in (1); } +step s2c { commit; } teardown { drop table ppk, pfk, pfk1; } -permutation "s1b" "s1d" "s1c" "s2b" "s2a" "s2c" -permutation "s1b" "s1d" "s2b" "s1c" "s2a" "s2c" -permutation "s1b" "s1d" "s2b" "s2a" "s1c" "s2c" -#permutation "s1b" "s1d" "s2b" "s2a" "s2c" "s1c" -permutation "s1b" "s2b" "s1d" "s1c" "s2a" "s2c" -permutation "s1b" "s2b" "s1d" "s2a" "s1c" "s2c" -#permutation "s1b" "s2b" "s1d" "s2a" "s2c" "s1c" -#permutation "s1b" "s2b" "s2a" "s1d" "s1c" "s2c" -permutation "s1b" "s2b" "s2a" "s1d" "s2c" "s1c" -permutation "s1b" "s2b" "s2a" "s2c" "s1d" "s1c" -permutation "s2b" "s1b" "s1d" "s1c" "s2a" "s2c" -permutation "s2b" "s1b" "s1d" "s2a" "s1c" "s2c" -#permutation "s2b" "s1b" "s1d" "s2a" "s2c" "s1c" -#permutation "s2b" "s1b" "s2a" "s1d" "s1c" "s2c" -permutation "s2b" "s1b" "s2a" "s1d" "s2c" "s1c" -permutation "s2b" "s1b" "s2a" "s2c" "s1d" "s1c" -#permutation "s2b" "s2a" "s1b" "s1d" "s1c" "s2c" -permutation "s2b" "s2a" "s1b" "s1d" "s2c" "s1c" -permutation "s2b" "s2a" "s1b" "s2c" "s1d" "s1c" -permutation "s2b" "s2a" "s2c" "s1b" "s1d" "s1c" +permutation s1b s1d s1c s2b s2a s2c +permutation s1b s1d s2b s1c s2a s2c +permutation s1b s1d s2b s2a s1c s2c +#permutation s1b s1d s2b s2a s2c s1c +permutation s1b s2b s1d s1c s2a s2c +permutation s1b s2b s1d s2a s1c s2c +#permutation s1b s2b s1d s2a s2c s1c +#permutation s1b s2b s2a s1d s1c s2c +permutation s1b s2b s2a s1d s2c s1c +permutation s1b s2b s2a s2c s1d s1c +permutation s2b s1b s1d s1c s2a s2c +permutation s2b s1b s1d s2a s1c s2c +#permutation s2b s1b s1d s2a s2c s1c +#permutation s2b s1b s2a s1d s1c s2c +permutation s2b s1b s2a s1d s2c s1c +permutation s2b s1b s2a s2c s1d s1c +#permutation s2b s2a s1b s1d s1c s2c +permutation s2b s2a s1b s1d s2c s1c +permutation s2b s2a s1b s2c s1d s1c +permutation s2b s2a s2c s1b s1d s1c diff --git a/src/test/isolation/specs/fk-partitioned-2.spec b/src/test/isolation/specs/fk-partitioned-2.spec index f1a76e801cf57..209ad59b3f376 100644 --- a/src/test/isolation/specs/fk-partitioned-2.spec +++ b/src/test/isolation/specs/fk-partitioned-2.spec @@ -8,22 +8,22 @@ setup { create table pfk1 partition of pfk for values in (1); } -session "s1" -step "s1b" { begin; } -step "s1d" { delete from ppk where a = 1; } -step "s1c" { commit; } +session s1 +step s1b { begin; } +step s1d { delete from ppk where a = 1; } +step s1c { commit; } -session "s2" -step "s2b" { begin; } -step "s2bs" { begin isolation level serializable; select 1; } -step "s2i" { insert into pfk values (1); } -step "s2c" { commit; } +session s2 +step s2b { begin; } +step s2bs { begin isolation level serializable; select 1; } +step s2i { insert into pfk values (1); } +step s2c { commit; } teardown { drop table ppk, pfk, pfk1; } -permutation "s1b" "s1d" "s2b" "s2i" "s1c" "s2c" -permutation "s1b" "s1d" "s2bs" "s2i" "s1c" "s2c" -permutation "s1b" "s2b" "s1d" "s2i" "s1c" "s2c" -permutation "s1b" "s2bs" "s1d" "s2i" "s1c" "s2c" -permutation "s1b" "s2b" "s2i" "s1d" "s2c" "s1c" -permutation "s1b" "s2bs" "s2i" "s1d" "s2c" "s1c" +permutation s1b s1d s2b s2i s1c s2c +permutation s1b s1d s2bs s2i s1c s2c +permutation s1b s2b s1d s2i s1c s2c +permutation s1b s2bs s1d s2i s1c s2c +permutation s1b s2b s2i s1d s2c s1c +permutation s1b s2bs s2i s1d s2c s1c diff --git a/src/test/isolation/specs/freeze-the-dead.spec b/src/test/isolation/specs/freeze-the-dead.spec index 915bf15b92514..6c349048d8042 100644 --- a/src/test/isolation/specs/freeze-the-dead.spec +++ b/src/test/isolation/specs/freeze-the-dead.spec @@ -15,29 +15,29 @@ teardown DROP TABLE tab_freeze; } -session "s1" -step "s1_begin" { BEGIN; } -step "s1_update" { UPDATE tab_freeze SET x = x + 1 WHERE id = 3; } -step "s1_commit" { COMMIT; } -step "s1_selectone" { +session s1 +step s1_begin { BEGIN; } +step s1_update { UPDATE tab_freeze SET x = x + 1 WHERE id = 3; } +step s1_commit { COMMIT; } +step s1_selectone { BEGIN; SET LOCAL enable_seqscan = false; SET LOCAL enable_bitmapscan = false; SELECT * FROM tab_freeze WHERE id = 3; COMMIT; } -step "s1_selectall" { SELECT * FROM tab_freeze ORDER BY name, id; } +step s1_selectall { SELECT * FROM tab_freeze ORDER BY name, id; } -session "s2" -step "s2_begin" { BEGIN; } -step "s2_key_share" { SELECT id FROM tab_freeze WHERE id = 3 FOR KEY SHARE; } -step "s2_commit" { COMMIT; } -step "s2_vacuum" { VACUUM FREEZE tab_freeze; } +session s2 +step s2_begin { BEGIN; } +step s2_key_share { SELECT id FROM tab_freeze WHERE id = 3 FOR KEY SHARE; } +step s2_commit { COMMIT; } +step s2_vacuum { VACUUM FREEZE tab_freeze; } -session "s3" -step "s3_begin" { BEGIN; } -step "s3_key_share" { SELECT id FROM tab_freeze WHERE id = 3 FOR KEY SHARE; } -step "s3_commit" { COMMIT; } +session s3 +step s3_begin { BEGIN; } +step s3_key_share { SELECT id FROM tab_freeze WHERE id = 3 FOR KEY SHARE; } +step s3_commit { COMMIT; } # This permutation verifies that a previous bug # https://postgr.es/m/E5711E62-8FDF-4DCA-A888-C200BF6B5742@amazon.com @@ -45,12 +45,12 @@ step "s3_commit" { COMMIT; } # is not reintroduced. We used to make wrong pruning / freezing # decision for multixacts, which could lead to a) broken hot chains b) # dead rows being revived. -permutation "s1_begin" "s2_begin" "s3_begin" # start transactions - "s1_update" "s2_key_share" "s3_key_share" # have xmax be a multi with an updater, updater being oldest xid - "s1_update" # create additional row version that has multis - "s1_commit" "s2_commit" # commit both updater and share locker - "s2_vacuum" # due to bug in freezing logic, we used to *not* prune updated row, and then froze it - "s1_selectone" # if hot chain is broken, the row can't be found via index scan - "s3_commit" # commit remaining open xact - "s2_vacuum" # pruning / freezing in broken hot chains would unset xmax, reviving rows - "s1_selectall" # show borkedness +permutation s1_begin s2_begin s3_begin # start transactions + s1_update s2_key_share s3_key_share # have xmax be a multi with an updater, updater being oldest xid + s1_update # create additional row version that has multis + s1_commit s2_commit # commit both updater and share locker + s2_vacuum # due to bug in freezing logic, we used to *not* prune updated row, and then froze it + s1_selectone # if hot chain is broken, the row can't be found via index scan + s3_commit # commit remaining open xact + s2_vacuum # pruning / freezing in broken hot chains would unset xmax, reviving rows + s1_selectall # show borkedness diff --git a/src/test/isolation/specs/horizons.spec b/src/test/isolation/specs/horizons.spec index f74035c42f4ab..d5239ff22870d 100644 --- a/src/test/isolation/specs/horizons.spec +++ b/src/test/isolation/specs/horizons.spec @@ -23,19 +23,19 @@ teardown { DROP FUNCTION explain_json(text); } -session "lifeline" +session lifeline # Start a transaction, force a snapshot to be held -step "ll_start" +step ll_start { BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT 1; } -step "ll_commit" { COMMIT; } +step ll_commit { COMMIT; } -session "pruner" +session pruner setup { @@ -44,13 +44,13 @@ setup SET enable_bitmapscan = false; } -step "pruner_create_temp" +step pruner_create_temp { CREATE TEMPORARY TABLE horizons_tst (data int unique) WITH (autovacuum_enabled = off); INSERT INTO horizons_tst(data) VALUES(1),(2); } -step "pruner_create_perm" +step pruner_create_perm { CREATE TABLE horizons_tst (data int unique) WITH (autovacuum_enabled = off); INSERT INTO horizons_tst(data) VALUES(1),(2); @@ -58,20 +58,20 @@ step "pruner_create_perm" # Temp tables cannot be dropped in the teardown, so just always do so # as part of the permutation -step "pruner_drop" +step pruner_drop { DROP TABLE horizons_tst; } -step "pruner_delete" +step pruner_delete { DELETE FROM horizons_tst; } -step "pruner_begin" { BEGIN; } -step "pruner_commit" { COMMIT; } +step pruner_begin { BEGIN; } +step pruner_commit { COMMIT; } -step "pruner_vacuum" +step pruner_vacuum { VACUUM horizons_tst; } @@ -79,7 +79,7 @@ step "pruner_vacuum" # Show the heap fetches of an ordered index-only-scan (other plans # have been forbidden above) - that tells us how many non-killed leaf # entries there are. -step "pruner_query" +step pruner_query { SELECT explain_json($$ EXPLAIN (FORMAT json, BUFFERS, ANALYZE) @@ -87,7 +87,7 @@ step "pruner_query" } # Verify that the query plan still is an IOS -step "pruner_query_plan" +step pruner_query_plan { EXPLAIN (COSTS OFF) SELECT * FROM horizons_tst ORDER BY data; } @@ -96,74 +96,74 @@ step "pruner_query_plan" # Show that with a permanent relation deleted rows cannot be pruned # away if there's a concurrent session still seeing the rows. permutation - "pruner_create_perm" - "ll_start" - "pruner_query_plan" + pruner_create_perm + ll_start + pruner_query_plan # Run query that could do pruning twice, first has chance to prune, # second would not perform heap fetches if first query did. - "pruner_query" - "pruner_query" - "pruner_delete" - "pruner_query" - "pruner_query" - "ll_commit" - "pruner_drop" + pruner_query + pruner_query + pruner_delete + pruner_query + pruner_query + ll_commit + pruner_drop # Show that with a temporary relation deleted rows can be pruned away, # even if there's a concurrent session with a snapshot from before the # deletion. That's safe because the session with the older snapshot # cannot access the temporary table. permutation - "pruner_create_temp" - "ll_start" - "pruner_query_plan" - "pruner_query" - "pruner_query" - "pruner_delete" - "pruner_query" - "pruner_query" - "ll_commit" - "pruner_drop" + pruner_create_temp + ll_start + pruner_query_plan + pruner_query + pruner_query + pruner_delete + pruner_query + pruner_query + ll_commit + pruner_drop # Verify that pruning in temporary relations doesn't remove rows still # visible in the current session permutation - "pruner_create_temp" - "ll_start" - "pruner_query" - "pruner_query" - "pruner_begin" - "pruner_delete" - "pruner_query" - "pruner_query" - "ll_commit" - "pruner_commit" - "pruner_drop" + pruner_create_temp + ll_start + pruner_query + pruner_query + pruner_begin + pruner_delete + pruner_query + pruner_query + ll_commit + pruner_commit + pruner_drop # Show that vacuum cannot remove deleted rows still visible to another # session's snapshot, when accessing a permanent table. permutation - "pruner_create_perm" - "ll_start" - "pruner_query" - "pruner_query" - "pruner_delete" - "pruner_vacuum" - "pruner_query" - "pruner_query" - "ll_commit" - "pruner_drop" + pruner_create_perm + ll_start + pruner_query + pruner_query + pruner_delete + pruner_vacuum + pruner_query + pruner_query + ll_commit + pruner_drop # Show that vacuum can remove deleted rows still visible to another # session's snapshot, when accessing a temporary table. permutation - "pruner_create_temp" - "ll_start" - "pruner_query" - "pruner_query" - "pruner_delete" - "pruner_vacuum" - "pruner_query" - "pruner_query" - "ll_commit" - "pruner_drop" + pruner_create_temp + ll_start + pruner_query + pruner_query + pruner_delete + pruner_vacuum + pruner_query + pruner_query + ll_commit + pruner_drop diff --git a/src/test/isolation/specs/index-only-scan.spec b/src/test/isolation/specs/index-only-scan.spec index 417bb02102e9d..4e4171ca80ee4 100644 --- a/src/test/isolation/specs/index-only-scan.spec +++ b/src/test/isolation/specs/index-only-scan.spec @@ -23,7 +23,7 @@ teardown DROP TABLE taby; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; @@ -31,10 +31,10 @@ setup SET LOCAL random_page_cost = 0.1; SET LOCAL cpu_tuple_cost = 0.03; } -step "rxwy1" { DELETE FROM taby WHERE id = (SELECT min(id) FROM tabx); } -step "c1" { COMMIT; } +step rxwy1 { DELETE FROM taby WHERE id = (SELECT min(id) FROM tabx); } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; @@ -42,5 +42,5 @@ setup SET LOCAL random_page_cost = 0.1; SET LOCAL cpu_tuple_cost = 0.03; } -step "rywx2" { DELETE FROM tabx WHERE id = (SELECT min(id) FROM taby); } -step "c2" { COMMIT; } +step rywx2 { DELETE FROM tabx WHERE id = (SELECT min(id) FROM taby); } +step c2 { COMMIT; } diff --git a/src/test/isolation/specs/inherit-temp.spec b/src/test/isolation/specs/inherit-temp.spec index 5cd251d0aaa46..644f919e8462a 100644 --- a/src/test/isolation/specs/inherit-temp.spec +++ b/src/test/isolation/specs/inherit-temp.spec @@ -19,60 +19,60 @@ teardown # Session 1 executes actions which act directly on both the parent and # its child. Abbreviation "c" is used for queries working on the child # and "p" on the parent. -session "s1" +session s1 setup { CREATE TEMPORARY TABLE inh_temp_child_s1 () INHERITS (inh_parent); } -step "s1_begin" { BEGIN; } -step "s1_truncate_p" { TRUNCATE inh_parent; } -step "s1_select_p" { SELECT a FROM inh_parent; } -step "s1_select_c" { SELECT a FROM inh_temp_child_s1; } -step "s1_insert_p" { INSERT INTO inh_parent VALUES (1), (2); } -step "s1_insert_c" { INSERT INTO inh_temp_child_s1 VALUES (3), (4); } -step "s1_update_p" { UPDATE inh_parent SET a = 11 WHERE a = 1; } -step "s1_update_c" { UPDATE inh_parent SET a = 13 WHERE a IN (3, 5); } -step "s1_delete_p" { DELETE FROM inh_parent WHERE a = 2; } -step "s1_delete_c" { DELETE FROM inh_parent WHERE a IN (4, 6); } -step "s1_commit" { COMMIT; } +step s1_begin { BEGIN; } +step s1_truncate_p { TRUNCATE inh_parent; } +step s1_select_p { SELECT a FROM inh_parent; } +step s1_select_c { SELECT a FROM inh_temp_child_s1; } +step s1_insert_p { INSERT INTO inh_parent VALUES (1), (2); } +step s1_insert_c { INSERT INTO inh_temp_child_s1 VALUES (3), (4); } +step s1_update_p { UPDATE inh_parent SET a = 11 WHERE a = 1; } +step s1_update_c { UPDATE inh_parent SET a = 13 WHERE a IN (3, 5); } +step s1_delete_p { DELETE FROM inh_parent WHERE a = 2; } +step s1_delete_c { DELETE FROM inh_parent WHERE a IN (4, 6); } +step s1_commit { COMMIT; } teardown { DROP TABLE inh_temp_child_s1; } # Session 2 executes actions on the parent which act only on the child. -session "s2" +session s2 setup { CREATE TEMPORARY TABLE inh_temp_child_s2 () INHERITS (inh_parent); } -step "s2_truncate_p" { TRUNCATE inh_parent; } -step "s2_select_p" { SELECT a FROM inh_parent; } -step "s2_select_c" { SELECT a FROM inh_temp_child_s2; } -step "s2_insert_c" { INSERT INTO inh_temp_child_s2 VALUES (5), (6); } -step "s2_update_c" { UPDATE inh_parent SET a = 15 WHERE a IN (3, 5); } -step "s2_delete_c" { DELETE FROM inh_parent WHERE a IN (4, 6); } +step s2_truncate_p { TRUNCATE inh_parent; } +step s2_select_p { SELECT a FROM inh_parent; } +step s2_select_c { SELECT a FROM inh_temp_child_s2; } +step s2_insert_c { INSERT INTO inh_temp_child_s2 VALUES (5), (6); } +step s2_update_c { UPDATE inh_parent SET a = 15 WHERE a IN (3, 5); } +step s2_delete_c { DELETE FROM inh_parent WHERE a IN (4, 6); } teardown { DROP TABLE inh_temp_child_s2; } # Check INSERT behavior across sessions -permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c" +permutation s1_insert_p s1_insert_c s2_insert_c s1_select_p s1_select_c s2_select_p s2_select_c # Check UPDATE behavior across sessions -permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s1_update_p" "s1_update_c" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c" -permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s2_update_c" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c" +permutation s1_insert_p s1_insert_c s2_insert_c s1_update_p s1_update_c s1_select_p s1_select_c s2_select_p s2_select_c +permutation s1_insert_p s1_insert_c s2_insert_c s2_update_c s1_select_p s1_select_c s2_select_p s2_select_c # Check DELETE behavior across sessions -permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s1_delete_p" "s1_delete_c" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c" -permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s2_delete_c" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c" +permutation s1_insert_p s1_insert_c s2_insert_c s1_delete_p s1_delete_c s1_select_p s1_select_c s2_select_p s2_select_c +permutation s1_insert_p s1_insert_c s2_insert_c s2_delete_c s1_select_p s1_select_c s2_select_p s2_select_c # Check TRUNCATE behavior across sessions -permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s1_truncate_p" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c" -permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s2_truncate_p" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c" +permutation s1_insert_p s1_insert_c s2_insert_c s1_truncate_p s1_select_p s1_select_c s2_select_p s2_select_c +permutation s1_insert_p s1_insert_c s2_insert_c s2_truncate_p s1_select_p s1_select_c s2_select_p s2_select_c # TRUNCATE on a parent tree does not block access to temporary child relation # of another session, and blocks when scanning the parent. -permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s1_begin" "s1_truncate_p" "s2_select_p" "s1_commit" -permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s1_begin" "s1_truncate_p" "s2_select_c" "s1_commit" +permutation s1_insert_p s1_insert_c s2_insert_c s1_begin s1_truncate_p s2_select_p s1_commit +permutation s1_insert_p s1_insert_c s2_insert_c s1_begin s1_truncate_p s2_select_c s1_commit diff --git a/src/test/isolation/specs/insert-conflict-do-nothing-2.spec b/src/test/isolation/specs/insert-conflict-do-nothing-2.spec index 8a8ec94447386..825b7d64900ca 100644 --- a/src/test/isolation/specs/insert-conflict-do-nothing-2.spec +++ b/src/test/isolation/specs/insert-conflict-do-nothing-2.spec @@ -11,24 +11,24 @@ teardown DROP TABLE ints; } -session "s1" -step "beginrr1" { BEGIN ISOLATION LEVEL REPEATABLE READ; } -step "begins1" { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "donothing1" { INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT DO NOTHING; } -step "c1" { COMMIT; } -step "show" { SELECT * FROM ints; } +session s1 +step beginrr1 { BEGIN ISOLATION LEVEL REPEATABLE READ; } +step begins1 { BEGIN ISOLATION LEVEL SERIALIZABLE; } +step donothing1 { INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT DO NOTHING; } +step c1 { COMMIT; } +step show { SELECT * FROM ints; } -session "s2" -step "beginrr2" { BEGIN ISOLATION LEVEL REPEATABLE READ; } -step "begins2" { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "donothing2" { INSERT INTO ints(key, val) VALUES(1, 'donothing2'), (1, 'donothing3') ON CONFLICT DO NOTHING; } -step "c2" { COMMIT; } +session s2 +step beginrr2 { BEGIN ISOLATION LEVEL REPEATABLE READ; } +step begins2 { BEGIN ISOLATION LEVEL SERIALIZABLE; } +step donothing2 { INSERT INTO ints(key, val) VALUES(1, 'donothing2'), (1, 'donothing3') ON CONFLICT DO NOTHING; } +step c2 { COMMIT; } -permutation "beginrr1" "beginrr2" "donothing1" "c1" "donothing2" "c2" "show" -permutation "beginrr1" "beginrr2" "donothing2" "c2" "donothing1" "c1" "show" -permutation "beginrr1" "beginrr2" "donothing1" "donothing2" "c1" "c2" "show" -permutation "beginrr1" "beginrr2" "donothing2" "donothing1" "c2" "c1" "show" -permutation "begins1" "begins2" "donothing1" "c1" "donothing2" "c2" "show" -permutation "begins1" "begins2" "donothing2" "c2" "donothing1" "c1" "show" -permutation "begins1" "begins2" "donothing1" "donothing2" "c1" "c2" "show" -permutation "begins1" "begins2" "donothing2" "donothing1" "c2" "c1" "show" +permutation beginrr1 beginrr2 donothing1 c1 donothing2 c2 show +permutation beginrr1 beginrr2 donothing2 c2 donothing1 c1 show +permutation beginrr1 beginrr2 donothing1 donothing2 c1 c2 show +permutation beginrr1 beginrr2 donothing2 donothing1 c2 c1 show +permutation begins1 begins2 donothing1 c1 donothing2 c2 show +permutation begins1 begins2 donothing2 c2 donothing1 c1 show +permutation begins1 begins2 donothing1 donothing2 c1 c2 show +permutation begins1 begins2 donothing2 donothing1 c2 c1 show diff --git a/src/test/isolation/specs/insert-conflict-do-nothing.spec b/src/test/isolation/specs/insert-conflict-do-nothing.spec index 71acc380c7a94..b0e6a3724765d 100644 --- a/src/test/isolation/specs/insert-conflict-do-nothing.spec +++ b/src/test/isolation/specs/insert-conflict-do-nothing.spec @@ -16,25 +16,25 @@ teardown DROP TABLE ints; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "donothing1" { INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT DO NOTHING; } -step "c1" { COMMIT; } -step "a1" { ABORT; } +step donothing1 { INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT DO NOTHING; } +step c1 { COMMIT; } +step a1 { ABORT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "donothing2" { INSERT INTO ints(key, val) VALUES(1, 'donothing2') ON CONFLICT DO NOTHING; } -step "select2" { SELECT * FROM ints; } -step "c2" { COMMIT; } +step donothing2 { INSERT INTO ints(key, val) VALUES(1, 'donothing2') ON CONFLICT DO NOTHING; } +step select2 { SELECT * FROM ints; } +step c2 { COMMIT; } # Regular case where one session block-waits on another to determine if it # should proceed with an insert or do nothing. -permutation "donothing1" "donothing2" "c1" "select2" "c2" -permutation "donothing1" "donothing2" "a1" "select2" "c2" +permutation donothing1 donothing2 c1 select2 c2 +permutation donothing1 donothing2 a1 select2 c2 diff --git a/src/test/isolation/specs/insert-conflict-do-update-2.spec b/src/test/isolation/specs/insert-conflict-do-update-2.spec index 12f6be8000f99..8a7c546f438df 100644 --- a/src/test/isolation/specs/insert-conflict-do-update-2.spec +++ b/src/test/isolation/specs/insert-conflict-do-update-2.spec @@ -15,26 +15,26 @@ teardown DROP TABLE upsert; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "insert1" { INSERT INTO upsert(key, payload) VALUES('FooFoo', 'insert1') ON CONFLICT (lower(key)) DO UPDATE set key = EXCLUDED.key, payload = upsert.payload || ' updated by insert1'; } -step "c1" { COMMIT; } -step "a1" { ABORT; } +step insert1 { INSERT INTO upsert(key, payload) VALUES('FooFoo', 'insert1') ON CONFLICT (lower(key)) DO UPDATE set key = EXCLUDED.key, payload = upsert.payload || ' updated by insert1'; } +step c1 { COMMIT; } +step a1 { ABORT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "insert2" { INSERT INTO upsert(key, payload) VALUES('FOOFOO', 'insert2') ON CONFLICT (lower(key)) DO UPDATE set key = EXCLUDED.key, payload = upsert.payload || ' updated by insert2'; } -step "select2" { SELECT * FROM upsert; } -step "c2" { COMMIT; } +step insert2 { INSERT INTO upsert(key, payload) VALUES('FOOFOO', 'insert2') ON CONFLICT (lower(key)) DO UPDATE set key = EXCLUDED.key, payload = upsert.payload || ' updated by insert2'; } +step select2 { SELECT * FROM upsert; } +step c2 { COMMIT; } # One session (session 2) block-waits on another (session 1) to determine if it # should proceed with an insert or update. The user can still usefully UPDATE # a column constrained by a unique index, as the example illustrates. -permutation "insert1" "insert2" "c1" "select2" "c2" -permutation "insert1" "insert2" "a1" "select2" "c2" +permutation insert1 insert2 c1 select2 c2 +permutation insert1 insert2 a1 select2 c2 diff --git a/src/test/isolation/specs/insert-conflict-do-update-3.spec b/src/test/isolation/specs/insert-conflict-do-update-3.spec index e282c3beca543..df6795467daff 100644 --- a/src/test/isolation/specs/insert-conflict-do-update-3.spec +++ b/src/test/isolation/specs/insert-conflict-do-update-3.spec @@ -37,12 +37,12 @@ teardown DROP TABLE colors; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "insert1" { +step insert1 { WITH t AS ( INSERT INTO colors(key, color, is_active) VALUES(1, 'Brown', true), (2, 'Gray', true) @@ -50,20 +50,20 @@ step "insert1" { SET color = EXCLUDED.color WHERE colors.is_active) SELECT * FROM colors ORDER BY key;} -step "select1surprise" { SELECT * FROM colors ORDER BY key; } -step "c1" { COMMIT; } +step select1surprise { SELECT * FROM colors ORDER BY key; } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "update2" { UPDATE colors SET is_active = true WHERE key = 1; } -step "c2" { COMMIT; } +step update2 { UPDATE colors SET is_active = true WHERE key = 1; } +step c2 { COMMIT; } # Perhaps surprisingly, the session 1 MVCC-snapshot-visible tuple (the tuple # with the pre-populated color 'Red') is denied the opportunity to prevent the # UPDATE from taking place -- only the conclusively-locked tuple version # matters, and so the tuple with key value 1 was updated to 'Brown' (but not # tuple with key value 2, since nothing changed there): -permutation "update2" "insert1" "c2" "select1surprise" "c1" +permutation update2 insert1 c2 select1surprise c1 diff --git a/src/test/isolation/specs/insert-conflict-do-update.spec b/src/test/isolation/specs/insert-conflict-do-update.spec index 7c8cb47100253..62cdafda98851 100644 --- a/src/test/isolation/specs/insert-conflict-do-update.spec +++ b/src/test/isolation/specs/insert-conflict-do-update.spec @@ -13,27 +13,27 @@ teardown DROP TABLE upsert; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "insert1" { INSERT INTO upsert(key, val) VALUES(1, 'insert1') ON CONFLICT (key) DO UPDATE set val = upsert.val || ' updated by insert1'; } -step "c1" { COMMIT; } -step "a1" { ABORT; } +step insert1 { INSERT INTO upsert(key, val) VALUES(1, 'insert1') ON CONFLICT (key) DO UPDATE set val = upsert.val || ' updated by insert1'; } +step c1 { COMMIT; } +step a1 { ABORT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "insert2" { INSERT INTO upsert(key, val) VALUES(1, 'insert2') ON CONFLICT (key) DO UPDATE set val = upsert.val || ' updated by insert2'; } -step "select2" { SELECT * FROM upsert; } -step "c2" { COMMIT; } +step insert2 { INSERT INTO upsert(key, val) VALUES(1, 'insert2') ON CONFLICT (key) DO UPDATE set val = upsert.val || ' updated by insert2'; } +step select2 { SELECT * FROM upsert; } +step c2 { COMMIT; } # One session (session 2) block-waits on another (session 1) to determine if it # should proceed with an insert or update. Notably, this entails updating a # tuple while there is no version of that tuple visible to the updating # session's snapshot. This is permitted only in READ COMMITTED mode. -permutation "insert1" "insert2" "c1" "select2" "c2" -permutation "insert1" "insert2" "a1" "select2" "c2" +permutation insert1 insert2 c1 select2 c2 +permutation insert1 insert2 a1 select2 c2 diff --git a/src/test/isolation/specs/insert-conflict-specconflict.spec b/src/test/isolation/specs/insert-conflict-specconflict.spec index 3bc2bf0630268..55b8bb100f4a5 100644 --- a/src/test/isolation/specs/insert-conflict-specconflict.spec +++ b/src/test/isolation/specs/insert-conflict-specconflict.spec @@ -43,24 +43,24 @@ teardown DROP TABLE upserttest; } -session "controller" +session controller setup { SET default_transaction_isolation = 'read committed'; SET application_name = 'isolation/insert-conflict-specconflict-controller'; } -step "controller_locks" {SELECT pg_advisory_lock(sess, lock), sess, lock FROM generate_series(1, 2) a(sess), generate_series(1,3) b(lock);} -step "controller_unlock_1_1" { SELECT pg_advisory_unlock(1, 1); } -step "controller_unlock_2_1" { SELECT pg_advisory_unlock(2, 1); } -step "controller_unlock_1_2" { SELECT pg_advisory_unlock(1, 2); } -step "controller_unlock_2_2" { SELECT pg_advisory_unlock(2, 2); } -step "controller_unlock_1_3" { SELECT pg_advisory_unlock(1, 3); } -step "controller_unlock_2_3" { SELECT pg_advisory_unlock(2, 3); } -step "controller_lock_2_4" { SELECT pg_advisory_lock(2, 4); } -step "controller_unlock_2_4" { SELECT pg_advisory_unlock(2, 4); } -step "controller_show" {SELECT * FROM upserttest; } -step "controller_show_count" {SELECT COUNT(*) FROM upserttest; } -step "controller_print_speculative_locks" { +step controller_locks {SELECT pg_advisory_lock(sess, lock), sess, lock FROM generate_series(1, 2) a(sess), generate_series(1,3) b(lock);} +step controller_unlock_1_1 { SELECT pg_advisory_unlock(1, 1); } +step controller_unlock_2_1 { SELECT pg_advisory_unlock(2, 1); } +step controller_unlock_1_2 { SELECT pg_advisory_unlock(1, 2); } +step controller_unlock_2_2 { SELECT pg_advisory_unlock(2, 2); } +step controller_unlock_1_3 { SELECT pg_advisory_unlock(1, 3); } +step controller_unlock_2_3 { SELECT pg_advisory_unlock(2, 3); } +step controller_lock_2_4 { SELECT pg_advisory_lock(2, 4); } +step controller_unlock_2_4 { SELECT pg_advisory_unlock(2, 4); } +step controller_show {SELECT * FROM upserttest; } +step controller_show_count {SELECT COUNT(*) FROM upserttest; } +step controller_print_speculative_locks { SELECT pa.application_name, locktype, mode, granted FROM pg_locks pl JOIN pg_stat_activity pa USING (pid) WHERE @@ -70,33 +70,33 @@ step "controller_print_speculative_locks" { ORDER BY 1, 2, 3, 4; } -session "s1" +session s1 setup { SET default_transaction_isolation = 'read committed'; SET spec.session = 1; SET application_name = 'isolation/insert-conflict-specconflict-s1'; } -step "s1_begin" { BEGIN; } -step "s1_create_non_unique_index" { CREATE INDEX upserttest_key_idx ON upserttest((blurt_and_lock_4(key))); } -step "s1_confirm_index_order" { SELECT 'upserttest_key_uniq_idx'::regclass::int8 < 'upserttest_key_idx'::regclass::int8; } -step "s1_upsert" { INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s1') ON CONFLICT (blurt_and_lock_123(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s1'; } -step "s1_insert_toast" { INSERT INTO upserttest VALUES('k2', ctoast_large_val()) ON CONFLICT DO NOTHING; } -step "s1_commit" { COMMIT; } -step "s1_noop" { } +step s1_begin { BEGIN; } +step s1_create_non_unique_index { CREATE INDEX upserttest_key_idx ON upserttest((blurt_and_lock_4(key))); } +step s1_confirm_index_order { SELECT 'upserttest_key_uniq_idx'::regclass::int8 < 'upserttest_key_idx'::regclass::int8; } +step s1_upsert { INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s1') ON CONFLICT (blurt_and_lock_123(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s1'; } +step s1_insert_toast { INSERT INTO upserttest VALUES('k2', ctoast_large_val()) ON CONFLICT DO NOTHING; } +step s1_commit { COMMIT; } +step s1_noop { } -session "s2" +session s2 setup { SET default_transaction_isolation = 'read committed'; SET spec.session = 2; SET application_name = 'isolation/insert-conflict-specconflict-s2'; } -step "s2_begin" { BEGIN; } -step "s2_upsert" { INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s2') ON CONFLICT (blurt_and_lock_123(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s2'; } -step "s2_insert_toast" { INSERT INTO upserttest VALUES('k2', ctoast_large_val()) ON CONFLICT DO NOTHING; } -step "s2_commit" { COMMIT; } -step "s2_noop" { } +step s2_begin { BEGIN; } +step s2_upsert { INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s2') ON CONFLICT (blurt_and_lock_123(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s2'; } +step s2_insert_toast { INSERT INTO upserttest VALUES('k2', ctoast_large_val()) ON CONFLICT DO NOTHING; } +step s2_commit { COMMIT; } +step s2_noop { } # Test that speculative locks are correctly acquired and released, s2 # inserts, s1 updates. @@ -105,23 +105,23 @@ permutation # blurt_and_lock_123 function acquires advisory locks that allow us to # continue after a) the optimistic conflict probe b) after the # insertion of the speculative tuple. - "controller_locks" - "controller_show" - "s1_upsert" "s2_upsert" - "controller_show" + controller_locks + controller_show + s1_upsert s2_upsert + controller_show # Switch both sessions to wait on the other lock next time (the speculative insertion) - "controller_unlock_1_1" "controller_unlock_2_1" + controller_unlock_1_1 controller_unlock_2_1 # Allow both sessions to continue - "controller_unlock_1_3" "controller_unlock_2_3" - "controller_show" + controller_unlock_1_3 controller_unlock_2_3 + controller_show # Allow the second session to finish insertion - "controller_unlock_2_2" + controller_unlock_2_2 # This should now show a successful insertion - "controller_show" + controller_show # Allow the first session to finish insertion - "controller_unlock_1_2" + controller_unlock_1_2 # This should now show a successful UPSERT - "controller_show" + controller_show # Test that speculative locks are correctly acquired and released, s1 # inserts, s2 updates. @@ -130,23 +130,23 @@ permutation # blurt_and_lock_123 function acquires advisory locks that allow us to # continue after a) the optimistic conflict probe b) after the # insertion of the speculative tuple. - "controller_locks" - "controller_show" - "s1_upsert" "s2_upsert" - "controller_show" + controller_locks + controller_show + s1_upsert s2_upsert + controller_show # Switch both sessions to wait on the other lock next time (the speculative insertion) - "controller_unlock_1_1" "controller_unlock_2_1" + controller_unlock_1_1 controller_unlock_2_1 # Allow both sessions to continue - "controller_unlock_1_3" "controller_unlock_2_3" - "controller_show" + controller_unlock_1_3 controller_unlock_2_3 + controller_show # Allow the first session to finish insertion - "controller_unlock_1_2" + controller_unlock_1_2 # This should now show a successful insertion - "controller_show" + controller_show # Allow the second session to finish insertion - "controller_unlock_2_2" + controller_unlock_2_2 # This should now show a successful UPSERT - "controller_show" + controller_show # Test that speculatively inserted toast rows do not cause conflicts. # s1 inserts successfully, s2 does not. @@ -155,23 +155,23 @@ permutation # blurt_and_lock_123 function acquires advisory locks that allow us to # continue after a) the optimistic conflict probe b) after the # insertion of the speculative tuple. - "controller_locks" - "controller_show" - "s1_insert_toast" "s2_insert_toast" - "controller_show" + controller_locks + controller_show + s1_insert_toast s2_insert_toast + controller_show # Switch both sessions to wait on the other lock next time (the speculative insertion) - "controller_unlock_1_1" "controller_unlock_2_1" + controller_unlock_1_1 controller_unlock_2_1 # Allow both sessions to continue - "controller_unlock_1_3" "controller_unlock_2_3" - "controller_show" + controller_unlock_1_3 controller_unlock_2_3 + controller_show # Allow the first session to finish insertion - "controller_unlock_1_2" + controller_unlock_1_2 # This should now show that 1 additional tuple was inserted successfully - "controller_show_count" + controller_show_count # Allow the second session to finish insertion and kill the speculatively inserted tuple - "controller_unlock_2_2" + controller_unlock_2_2 # This should show the same number of tuples as before s2 inserted - "controller_show_count" + controller_show_count # Test that speculative locks are correctly acquired and released, s2 # inserts, s1 updates. With the added complication that transactions @@ -181,28 +181,28 @@ permutation # blurt_and_lock_123 function acquires advisory locks that allow us to # continue after a) the optimistic conflict probe b) after the # insertion of the speculative tuple. - "controller_locks" - "controller_show" - "s1_begin" "s2_begin" - "s1_upsert" "s2_upsert" - "controller_show" + controller_locks + controller_show + s1_begin s2_begin + s1_upsert s2_upsert + controller_show # Switch both sessions to wait on the other lock next time (the speculative insertion) - "controller_unlock_1_1" "controller_unlock_2_1" + controller_unlock_1_1 controller_unlock_2_1 # Allow both sessions to continue - "controller_unlock_1_3" "controller_unlock_2_3" - "controller_show" + controller_unlock_1_3 controller_unlock_2_3 + controller_show # Allow the first session to finish insertion - "controller_unlock_1_2" + controller_unlock_1_2 # But the change isn't visible yet, nor should the second session continue - "controller_show" + controller_show # Allow the second session to finish insertion, but it's blocked - "controller_unlock_2_2" - "controller_show" + controller_unlock_2_2 + controller_show # But committing should unblock - "s1_commit" - "controller_show" - "s2_commit" - "controller_show" + s1_commit + controller_show + s2_commit + controller_show # Test that speculative wait is performed if a session sees a speculatively # inserted tuple. A speculatively inserted tuple is one which has been inserted @@ -218,45 +218,45 @@ permutation # create the second index here to avoid affecting the other # permutations. - "s1_create_non_unique_index" + s1_create_non_unique_index # confirm that the insertion into the unique index will happen first - "s1_confirm_index_order" - "controller_locks" - "controller_show" - "s2_begin" + s1_confirm_index_order + controller_locks + controller_show + s2_begin # Both sessions wait on advisory locks # (but don't show s2_upsert as complete till we've seen all of s1's notices) - "s1_upsert" "s2_upsert" ("s1_upsert" notices 10) - "controller_show" + s1_upsert s2_upsert (s1_upsert notices 10) + controller_show # Switch both sessions to wait on the other lock next time (the speculative insertion) - "controller_unlock_1_1" "controller_unlock_2_1" + controller_unlock_1_1 controller_unlock_2_1 # Allow both sessions to do the optimistic conflict probe and do the # speculative insertion into the table # They will then be waiting on another advisory lock when they attempt to # update the index - "controller_unlock_1_3" "controller_unlock_2_3" - "controller_show" + controller_unlock_1_3 controller_unlock_2_3 + controller_show # take lock to block second session after inserting in unique index but # before completing the speculative insert - "controller_lock_2_4" + controller_lock_2_4 # Allow the second session to move forward - "controller_unlock_2_2" + controller_unlock_2_2 # This should still not show a successful insertion - "controller_show" + controller_show # Allow the first session to continue, it should perform speculative wait - "controller_unlock_1_2" + controller_unlock_1_2 # Should report s1 is waiting on speculative lock - "controller_print_speculative_locks" + controller_print_speculative_locks # Allow s2 to insert into the non-unique index and complete. s1 will # no longer wait on speculative lock, but proceed to wait on the # transaction to finish. The no-op step is needed to ensure that # we don't advance to the reporting step until s2_upsert has completed. - "controller_unlock_2_4" "s2_noop" + controller_unlock_2_4 s2_noop # Should report that s1 is now waiting for s2 to commit - "controller_print_speculative_locks" + controller_print_speculative_locks # Once s2 commits, s1 is finally free to continue to update - "s2_commit" "s1_noop" + s2_commit s1_noop # This should now show a successful UPSERT - "controller_show" + controller_show # Ensure no unexpected locks survive - "controller_print_speculative_locks" + controller_print_speculative_locks diff --git a/src/test/isolation/specs/lock-committed-keyupdate.spec b/src/test/isolation/specs/lock-committed-keyupdate.spec index 3fb424af0ed74..487f0e0d95b80 100644 --- a/src/test/isolation/specs/lock-committed-keyupdate.spec +++ b/src/test/isolation/specs/lock-committed-keyupdate.spec @@ -18,49 +18,49 @@ teardown DROP TABLE lcku_table; } -session "s1" -step "s1b" { BEGIN; } -step "s1l" { SELECT pg_advisory_lock(578902068); } -step "s1u" { UPDATE lcku_table SET id = 2 WHERE id = 3; } -step "s1hint" { SELECT * FROM lcku_table; } -step "s1ul" { SELECT pg_advisory_unlock(578902068); } -step "s1c" { COMMIT; } +session s1 +step s1b { BEGIN; } +step s1l { SELECT pg_advisory_lock(578902068); } +step s1u { UPDATE lcku_table SET id = 2 WHERE id = 3; } +step s1hint { SELECT * FROM lcku_table; } +step s1ul { SELECT pg_advisory_unlock(578902068); } +step s1c { COMMIT; } teardown { SELECT pg_advisory_unlock_all(); } -session "s2" -step "s2b1" { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "s2b2" { BEGIN ISOLATION LEVEL REPEATABLE READ; } -step "s2b3" { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "s2l" { SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; } -step "s2c" { COMMIT; } +session s2 +step s2b1 { BEGIN ISOLATION LEVEL READ COMMITTED; } +step s2b2 { BEGIN ISOLATION LEVEL REPEATABLE READ; } +step s2b3 { BEGIN ISOLATION LEVEL SERIALIZABLE; } +step s2l { SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; } +step s2c { COMMIT; } teardown { SELECT pg_advisory_unlock_all(); } -permutation "s1b" "s2b1" "s1l" "s2l" "s1u" "s1c" "s1ul" "s2c" -permutation "s1b" "s2b1" "s1l" "s1u" "s2l" "s1c" "s1ul" "s2c" -#permutation "s1b" "s2b1" "s1l" "s2l" "s1ul" "s1u" "s1c" "s2c" -permutation "s1b" "s2b1" "s1l" "s1u" "s1ul" "s2l" "s1c" "s2c" +permutation s1b s2b1 s1l s2l s1u s1c s1ul s2c +permutation s1b s2b1 s1l s1u s2l s1c s1ul s2c +#permutation s1b s2b1 s1l s2l s1ul s1u s1c s2c +permutation s1b s2b1 s1l s1u s1ul s2l s1c s2c -permutation "s1b" "s2b1" "s1l" "s2l" "s1u" "s1c" "s1hint" "s1ul" "s2c" -permutation "s1b" "s2b1" "s1l" "s1u" "s2l" "s1c" "s1hint" "s1ul" "s2c" -#permutation "s1b" "s2b1" "s1l" "s2l" "s1ul" "s1u" "s1c" "s1hint" "s2c" -permutation "s1b" "s2b1" "s1l" "s1u" "s1ul" "s2l" "s1c" "s1hint" "s2c" +permutation s1b s2b1 s1l s2l s1u s1c s1hint s1ul s2c +permutation s1b s2b1 s1l s1u s2l s1c s1hint s1ul s2c +#permutation s1b s2b1 s1l s2l s1ul s1u s1c s1hint s2c +permutation s1b s2b1 s1l s1u s1ul s2l s1c s1hint s2c -permutation "s1b" "s2b2" "s1l" "s2l" "s1u" "s1c" "s1ul" "s2c" -permutation "s1b" "s2b2" "s1l" "s1u" "s2l" "s1c" "s1ul" "s2c" -#permutation "s1b" "s2b2" "s1l" "s2l" "s1ul" "s1u" "s1c" "s2c" -permutation "s1b" "s2b2" "s1l" "s1u" "s1ul" "s2l" "s1c" "s2c" +permutation s1b s2b2 s1l s2l s1u s1c s1ul s2c +permutation s1b s2b2 s1l s1u s2l s1c s1ul s2c +#permutation s1b s2b2 s1l s2l s1ul s1u s1c s2c +permutation s1b s2b2 s1l s1u s1ul s2l s1c s2c -permutation "s1b" "s2b2" "s1l" "s2l" "s1u" "s1c" "s1hint" "s1ul" "s2c" -permutation "s1b" "s2b2" "s1l" "s1u" "s2l" "s1c" "s1hint" "s1ul" "s2c" -#permutation "s1b" "s2b2" "s1l" "s2l" "s1ul" "s1u" "s1c" "s1hint" "s2c" -permutation "s1b" "s2b2" "s1l" "s1u" "s1ul" "s2l" "s1c" "s1hint" "s2c" +permutation s1b s2b2 s1l s2l s1u s1c s1hint s1ul s2c +permutation s1b s2b2 s1l s1u s2l s1c s1hint s1ul s2c +#permutation s1b s2b2 s1l s2l s1ul s1u s1c s1hint s2c +permutation s1b s2b2 s1l s1u s1ul s2l s1c s1hint s2c -permutation "s1b" "s2b3" "s1l" "s2l" "s1u" "s1c" "s1ul" "s2c" -permutation "s1b" "s2b3" "s1l" "s1u" "s2l" "s1c" "s1ul" "s2c" -#permutation "s1b" "s2b3" "s1l" "s2l" "s1ul" "s1u" "s1c" "s2c" -permutation "s1b" "s2b3" "s1l" "s1u" "s1ul" "s2l" "s1c" "s2c" +permutation s1b s2b3 s1l s2l s1u s1c s1ul s2c +permutation s1b s2b3 s1l s1u s2l s1c s1ul s2c +#permutation s1b s2b3 s1l s2l s1ul s1u s1c s2c +permutation s1b s2b3 s1l s1u s1ul s2l s1c s2c -permutation "s1b" "s2b3" "s1l" "s2l" "s1u" "s1c" "s1hint" "s1ul" "s2c" -permutation "s1b" "s2b3" "s1l" "s1u" "s2l" "s1c" "s1hint" "s1ul" "s2c" -#permutation "s1b" "s2b3" "s1l" "s2l" "s1ul" "s1u" "s1c" "s1hint" "s2c" -permutation "s1b" "s2b3" "s1l" "s1u" "s1ul" "s2l" "s1c" "s1hint" "s2c" +permutation s1b s2b3 s1l s2l s1u s1c s1hint s1ul s2c +permutation s1b s2b3 s1l s1u s2l s1c s1hint s1ul s2c +#permutation s1b s2b3 s1l s2l s1ul s1u s1c s1hint s2c +permutation s1b s2b3 s1l s1u s1ul s2l s1c s1hint s2c diff --git a/src/test/isolation/specs/lock-committed-update.spec b/src/test/isolation/specs/lock-committed-update.spec index 0495c115707bb..74d80d53e614e 100644 --- a/src/test/isolation/specs/lock-committed-update.spec +++ b/src/test/isolation/specs/lock-committed-update.spec @@ -14,49 +14,49 @@ teardown DROP TABLE lcu_table; } -session "s1" -step "s1b" { BEGIN; } -step "s1l" { SELECT pg_advisory_lock(380170116); } -step "s1u" { UPDATE lcu_table SET value = 'two' WHERE id = 1; } -step "s1hint" { SELECT * FROM lcu_table; } -step "s1ul" { SELECT pg_advisory_unlock(380170116); } -step "s1c" { COMMIT; } +session s1 +step s1b { BEGIN; } +step s1l { SELECT pg_advisory_lock(380170116); } +step s1u { UPDATE lcu_table SET value = 'two' WHERE id = 1; } +step s1hint { SELECT * FROM lcu_table; } +step s1ul { SELECT pg_advisory_unlock(380170116); } +step s1c { COMMIT; } teardown { SELECT pg_advisory_unlock_all(); } -session "s2" -step "s2b1" { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "s2b2" { BEGIN ISOLATION LEVEL REPEATABLE READ; } -step "s2b3" { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "s2l" { SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; } -step "s2c" { COMMIT; } +session s2 +step s2b1 { BEGIN ISOLATION LEVEL READ COMMITTED; } +step s2b2 { BEGIN ISOLATION LEVEL REPEATABLE READ; } +step s2b3 { BEGIN ISOLATION LEVEL SERIALIZABLE; } +step s2l { SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; } +step s2c { COMMIT; } teardown { SELECT pg_advisory_unlock_all(); } -permutation "s1b" "s2b1" "s1l" "s2l" "s1u" "s1c" "s1ul" "s2c" -permutation "s1b" "s2b1" "s1l" "s1u" "s2l" "s1c" "s1ul" "s2c" -permutation "s1b" "s2b1" "s1l" "s2l" "s1ul" "s1u" "s1c" "s2c" -permutation "s1b" "s2b1" "s1l" "s1u" "s1ul" "s2l" "s1c" "s2c" - -permutation "s1b" "s2b1" "s1l" "s2l" "s1u" "s1c" "s1hint" "s1ul" "s2c" -permutation "s1b" "s2b1" "s1l" "s1u" "s2l" "s1c" "s1hint" "s1ul" "s2c" -permutation "s1b" "s2b1" "s1l" "s2l" "s1ul" "s1u" "s1c" "s1hint" "s2c" -permutation "s1b" "s2b1" "s1l" "s1u" "s1ul" "s2l" "s1c" "s1hint" "s2c" - -permutation "s1b" "s2b2" "s1l" "s2l" "s1u" "s1c" "s1ul" "s2c" -permutation "s1b" "s2b2" "s1l" "s1u" "s2l" "s1c" "s1ul" "s2c" -permutation "s1b" "s2b2" "s1l" "s2l" "s1ul" "s1u" "s1c" "s2c" -permutation "s1b" "s2b2" "s1l" "s1u" "s1ul" "s2l" "s1c" "s2c" - -permutation "s1b" "s2b2" "s1l" "s2l" "s1u" "s1c" "s1hint" "s1ul" "s2c" -permutation "s1b" "s2b2" "s1l" "s1u" "s2l" "s1c" "s1hint" "s1ul" "s2c" -permutation "s1b" "s2b2" "s1l" "s2l" "s1ul" "s1u" "s1c" "s1hint" "s2c" -permutation "s1b" "s2b2" "s1l" "s1u" "s1ul" "s2l" "s1c" "s1hint" "s2c" - -permutation "s1b" "s2b3" "s1l" "s2l" "s1u" "s1c" "s1ul" "s2c" -permutation "s1b" "s2b3" "s1l" "s1u" "s2l" "s1c" "s1ul" "s2c" -permutation "s1b" "s2b3" "s1l" "s2l" "s1ul" "s1u" "s1c" "s2c" -permutation "s1b" "s2b3" "s1l" "s1u" "s1ul" "s2l" "s1c" "s2c" - -permutation "s1b" "s2b3" "s1l" "s2l" "s1u" "s1c" "s1hint" "s1ul" "s2c" -permutation "s1b" "s2b3" "s1l" "s1u" "s2l" "s1c" "s1hint" "s1ul" "s2c" -permutation "s1b" "s2b3" "s1l" "s2l" "s1ul" "s1u" "s1c" "s1hint" "s2c" -permutation "s1b" "s2b3" "s1l" "s1u" "s1ul" "s2l" "s1c" "s1hint" "s2c" +permutation s1b s2b1 s1l s2l s1u s1c s1ul s2c +permutation s1b s2b1 s1l s1u s2l s1c s1ul s2c +permutation s1b s2b1 s1l s2l s1ul s1u s1c s2c +permutation s1b s2b1 s1l s1u s1ul s2l s1c s2c + +permutation s1b s2b1 s1l s2l s1u s1c s1hint s1ul s2c +permutation s1b s2b1 s1l s1u s2l s1c s1hint s1ul s2c +permutation s1b s2b1 s1l s2l s1ul s1u s1c s1hint s2c +permutation s1b s2b1 s1l s1u s1ul s2l s1c s1hint s2c + +permutation s1b s2b2 s1l s2l s1u s1c s1ul s2c +permutation s1b s2b2 s1l s1u s2l s1c s1ul s2c +permutation s1b s2b2 s1l s2l s1ul s1u s1c s2c +permutation s1b s2b2 s1l s1u s1ul s2l s1c s2c + +permutation s1b s2b2 s1l s2l s1u s1c s1hint s1ul s2c +permutation s1b s2b2 s1l s1u s2l s1c s1hint s1ul s2c +permutation s1b s2b2 s1l s2l s1ul s1u s1c s1hint s2c +permutation s1b s2b2 s1l s1u s1ul s2l s1c s1hint s2c + +permutation s1b s2b3 s1l s2l s1u s1c s1ul s2c +permutation s1b s2b3 s1l s1u s2l s1c s1ul s2c +permutation s1b s2b3 s1l s2l s1ul s1u s1c s2c +permutation s1b s2b3 s1l s1u s1ul s2l s1c s2c + +permutation s1b s2b3 s1l s2l s1u s1c s1hint s1ul s2c +permutation s1b s2b3 s1l s1u s2l s1c s1hint s1ul s2c +permutation s1b s2b3 s1l s2l s1ul s1u s1c s1hint s2c +permutation s1b s2b3 s1l s1u s1ul s2l s1c s1hint s2c diff --git a/src/test/isolation/specs/lock-update-delete.spec b/src/test/isolation/specs/lock-update-delete.spec index b7b796fc0195d..b9dd7d12a999b 100644 --- a/src/test/isolation/specs/lock-update-delete.spec +++ b/src/test/isolation/specs/lock-update-delete.spec @@ -31,31 +31,31 @@ teardown DROP TABLE foo; } -session "s1" +session s1 # obtain lock on the tuple, traversing its update chain -step "s1l" { SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; } +step s1l { SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; } -session "s2" +session s2 setup { SELECT pg_advisory_lock(0); } -step "s2b" { BEGIN; } -step "s2u" { UPDATE foo SET value = 2 WHERE key = 1; } -step "s2_blocker1" { DELETE FROM foo; } -step "s2_blocker2" { UPDATE foo SET key = 2 WHERE key = 1; } -step "s2_blocker3" { UPDATE foo SET value = 2 WHERE key = 1; } -step "s2_unlock" { SELECT pg_advisory_unlock(0); } -step "s2c" { COMMIT; } -step "s2r" { ROLLBACK; } +step s2b { BEGIN; } +step s2u { UPDATE foo SET value = 2 WHERE key = 1; } +step s2_blocker1 { DELETE FROM foo; } +step s2_blocker2 { UPDATE foo SET key = 2 WHERE key = 1; } +step s2_blocker3 { UPDATE foo SET value = 2 WHERE key = 1; } +step s2_unlock { SELECT pg_advisory_unlock(0); } +step s2c { COMMIT; } +step s2r { ROLLBACK; } -permutation "s2b" "s1l" "s2u" "s2_blocker1" "s2_unlock" "s2c" -permutation "s2b" "s1l" "s2u" "s2_blocker2" "s2_unlock" "s2c" -permutation "s2b" "s1l" "s2u" "s2_blocker3" "s2_unlock" "s2c" -permutation "s2b" "s1l" "s2u" "s2_blocker1" "s2_unlock" "s2r" -permutation "s2b" "s1l" "s2u" "s2_blocker2" "s2_unlock" "s2r" -permutation "s2b" "s1l" "s2u" "s2_blocker3" "s2_unlock" "s2r" +permutation s2b s1l s2u s2_blocker1 s2_unlock s2c +permutation s2b s1l s2u s2_blocker2 s2_unlock s2c +permutation s2b s1l s2u s2_blocker3 s2_unlock s2c +permutation s2b s1l s2u s2_blocker1 s2_unlock s2r +permutation s2b s1l s2u s2_blocker2 s2_unlock s2r +permutation s2b s1l s2u s2_blocker3 s2_unlock s2r -permutation "s2b" "s1l" "s2u" "s2_blocker1" "s2c" "s2_unlock" -permutation "s2b" "s1l" "s2u" "s2_blocker2" "s2c" "s2_unlock" -permutation "s2b" "s1l" "s2u" "s2_blocker3" "s2c" "s2_unlock" -permutation "s2b" "s1l" "s2u" "s2_blocker1" "s2r" "s2_unlock" -permutation "s2b" "s1l" "s2u" "s2_blocker2" "s2r" "s2_unlock" -permutation "s2b" "s1l" "s2u" "s2_blocker3" "s2r" "s2_unlock" +permutation s2b s1l s2u s2_blocker1 s2c s2_unlock +permutation s2b s1l s2u s2_blocker2 s2c s2_unlock +permutation s2b s1l s2u s2_blocker3 s2c s2_unlock +permutation s2b s1l s2u s2_blocker1 s2r s2_unlock +permutation s2b s1l s2u s2_blocker2 s2r s2_unlock +permutation s2b s1l s2u s2_blocker3 s2r s2_unlock diff --git a/src/test/isolation/specs/lock-update-traversal.spec b/src/test/isolation/specs/lock-update-traversal.spec index 2ffe87d152b17..9d3d32de423dd 100644 --- a/src/test/isolation/specs/lock-update-traversal.spec +++ b/src/test/isolation/specs/lock-update-traversal.spec @@ -20,20 +20,20 @@ teardown DROP TABLE foo; } -session "s1" -step "s1b" { BEGIN ISOLATION LEVEL REPEATABLE READ; } -step "s1s" { SELECT * FROM foo; } # obtain snapshot -step "s1l" { SELECT * FROM foo FOR KEY SHARE; } # obtain lock -step "s1c" { COMMIT; } +session s1 +step s1b { BEGIN ISOLATION LEVEL REPEATABLE READ; } +step s1s { SELECT * FROM foo; } # obtain snapshot +step s1l { SELECT * FROM foo FOR KEY SHARE; } # obtain lock +step s1c { COMMIT; } -session "s2" -step "s2b" { BEGIN; } -step "s2u" { UPDATE foo SET value = 2 WHERE key = 1; } -step "s2c" { COMMIT; } -step "s2d1" { DELETE FROM foo WHERE key = 1; } -step "s2d2" { UPDATE foo SET key = 3 WHERE key = 1; } -step "s2d3" { UPDATE foo SET value = 3 WHERE key = 1; } +session s2 +step s2b { BEGIN; } +step s2u { UPDATE foo SET value = 2 WHERE key = 1; } +step s2c { COMMIT; } +step s2d1 { DELETE FROM foo WHERE key = 1; } +step s2d2 { UPDATE foo SET key = 3 WHERE key = 1; } +step s2d3 { UPDATE foo SET value = 3 WHERE key = 1; } -permutation "s1b" "s2b" "s1s" "s2u" "s1l" "s2c" "s2d1" "s1c" -permutation "s1b" "s2b" "s1s" "s2u" "s1l" "s2c" "s2d2" "s1c" -permutation "s1b" "s2b" "s1s" "s2u" "s1l" "s2c" "s2d3" "s1c" +permutation s1b s2b s1s s2u s1l s2c s2d1 s1c +permutation s1b s2b s1s s2u s1l s2c s2d2 s1c +permutation s1b s2b s1s s2u s1l s2c s2d3 s1c diff --git a/src/test/isolation/specs/multiple-cic.spec b/src/test/isolation/specs/multiple-cic.spec index 3ac1d39d86d4c..e34a6b0f9b53c 100644 --- a/src/test/isolation/specs/multiple-cic.spec +++ b/src/test/isolation/specs/multiple-cic.spec @@ -22,17 +22,17 @@ teardown DROP FUNCTION unlck(); } -session "s1" -step "s1i" { +session s1 +step s1i { CREATE INDEX CONCURRENTLY mcic_one_pkey ON mcic_one (id) WHERE lck_shr(281457); } teardown { SELECT unlck(); } -session "s2" -step "s2l" { SELECT pg_advisory_lock(281457); } -step "s2i" { +session s2 +step s2l { SELECT pg_advisory_lock(281457); } +step s2i { CREATE INDEX CONCURRENTLY mcic_two_pkey ON mcic_two (id) WHERE unlck(); } @@ -40,4 +40,4 @@ step "s2i" { # (*) marker ensures that s2i is reported as "waiting", even if it # completes very quickly -permutation "s2l" "s1i" "s2i"(*) +permutation s2l s1i s2i(*) diff --git a/src/test/isolation/specs/multiple-row-versions.spec b/src/test/isolation/specs/multiple-row-versions.spec index 1bb5b4e8ba25e..0779ea09b8db3 100644 --- a/src/test/isolation/specs/multiple-row-versions.spec +++ b/src/test/isolation/specs/multiple-row-versions.spec @@ -19,29 +19,29 @@ teardown DROP TABLE t; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "rx1" { SELECT * FROM t WHERE id = 1000000; } +step rx1 { SELECT * FROM t WHERE id = 1000000; } # delay until after T3 commits -step "wz1" { UPDATE t SET txt = 'a' WHERE id = 1; } -step "c1" { COMMIT; } +step wz1 { UPDATE t SET txt = 'a' WHERE id = 1; } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "wx2" { UPDATE t SET txt = 'b' WHERE id = 1000000; } -step "c2" { COMMIT; } +step wx2 { UPDATE t SET txt = 'b' WHERE id = 1000000; } +step c2 { COMMIT; } -session "s3" +session s3 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "wx3" { UPDATE t SET txt = 'c' WHERE id = 1000000; } -step "ry3" { SELECT * FROM t WHERE id = 500000; } +step wx3 { UPDATE t SET txt = 'c' WHERE id = 1000000; } +step ry3 { SELECT * FROM t WHERE id = 500000; } # delay until after T4 commits -step "c3" { COMMIT; } +step c3 { COMMIT; } -session "s4" +session s4 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "wy4" { UPDATE t SET txt = 'd' WHERE id = 500000; } -step "rz4" { SELECT * FROM t WHERE id = 1; } -step "c4" { COMMIT; } +step wy4 { UPDATE t SET txt = 'd' WHERE id = 500000; } +step rz4 { SELECT * FROM t WHERE id = 1; } +step c4 { COMMIT; } -permutation "rx1" "wx2" "c2" "wx3" "ry3" "wy4" "rz4" "c4" "c3" "wz1" "c1" +permutation rx1 wx2 c2 wx3 ry3 wy4 rz4 c4 c3 wz1 c1 diff --git a/src/test/isolation/specs/multixact-no-deadlock.spec b/src/test/isolation/specs/multixact-no-deadlock.spec index 205658b897ed3..a8af724e58b14 100644 --- a/src/test/isolation/specs/multixact-no-deadlock.spec +++ b/src/test/isolation/specs/multixact-no-deadlock.spec @@ -15,21 +15,21 @@ teardown DROP TABLE justthis; } -session "s1" +session s1 setup { BEGIN; } -step "s1lock" { SELECT * FROM justthis FOR SHARE; } -step "s1svpt" { SAVEPOINT foo; } -step "s1lock2" { SELECT * FROM justthis FOR SHARE; } -step "s1c" { COMMIT; } +step s1lock { SELECT * FROM justthis FOR SHARE; } +step s1svpt { SAVEPOINT foo; } +step s1lock2 { SELECT * FROM justthis FOR SHARE; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "s2lock" { SELECT * FROM justthis FOR SHARE; } # ensure it's a multi -step "s2c" { COMMIT; } +step s2lock { SELECT * FROM justthis FOR SHARE; } # ensure it's a multi +step s2c { COMMIT; } -session "s3" +session s3 setup { BEGIN; } -step "s3lock" { SELECT * FROM justthis FOR UPDATE; } -step "s3c" { COMMIT; } +step s3lock { SELECT * FROM justthis FOR UPDATE; } +step s3c { COMMIT; } -permutation "s1lock" "s2lock" "s1svpt" "s3lock" "s1lock2" "s2c" "s1c" "s3c" +permutation s1lock s2lock s1svpt s3lock s1lock2 s2c s1c s3c diff --git a/src/test/isolation/specs/multixact-no-forget.spec b/src/test/isolation/specs/multixact-no-forget.spec index 7fb93c1e34421..7f8a38b51b67d 100644 --- a/src/test/isolation/specs/multixact-no-forget.spec +++ b/src/test/isolation/specs/multixact-no-forget.spec @@ -14,31 +14,31 @@ teardown DROP TABLE dont_forget; } -session "s1" +session s1 setup { BEGIN; } -step "s1_show" { SELECT current_setting('default_transaction_isolation') <> 'read committed'; } -step "s1_lock" { SELECT * FROM dont_forget FOR KEY SHARE; } -step "s1_commit" { COMMIT; } +step s1_show { SELECT current_setting('default_transaction_isolation') <> 'read committed'; } +step s1_lock { SELECT * FROM dont_forget FOR KEY SHARE; } +step s1_commit { COMMIT; } -session "s2" -setup { BEGIN; } -step "s2_update" { UPDATE dont_forget SET value = 2; } -step "s2_abort" { ROLLBACK; } -step "s2_commit" { COMMIT; } +session s2 +setup { BEGIN; } +step s2_update { UPDATE dont_forget SET value = 2; } +step s2_abort { ROLLBACK; } +step s2_commit { COMMIT; } -session "s3" +session s3 # try cases with both a non-conflicting lock with s1's and a conflicting one -step "s3_forkeyshr" { SELECT * FROM dont_forget FOR KEY SHARE; } -step "s3_fornokeyupd" { SELECT * FROM dont_forget FOR NO KEY UPDATE; } -step "s3_forupd" { SELECT * FROM dont_forget FOR UPDATE; } +step s3_forkeyshr { SELECT * FROM dont_forget FOR KEY SHARE; } +step s3_fornokeyupd { SELECT * FROM dont_forget FOR NO KEY UPDATE; } +step s3_forupd { SELECT * FROM dont_forget FOR UPDATE; } -permutation "s1_show" "s1_commit" "s2_commit" -permutation "s1_lock" "s2_update" "s2_abort" "s3_forkeyshr" "s1_commit" -permutation "s1_lock" "s2_update" "s2_commit" "s3_forkeyshr" "s1_commit" -permutation "s1_lock" "s2_update" "s1_commit" "s3_forkeyshr" "s2_commit" -permutation "s1_lock" "s2_update" "s2_abort" "s3_fornokeyupd" "s1_commit" -permutation "s1_lock" "s2_update" "s2_commit" "s3_fornokeyupd" "s1_commit" -permutation "s1_lock" "s2_update" "s1_commit" "s3_fornokeyupd" "s2_commit" -permutation "s1_lock" "s2_update" "s2_abort" "s3_forupd" "s1_commit" -permutation "s1_lock" "s2_update" "s2_commit" "s3_forupd" "s1_commit" -permutation "s1_lock" "s2_update" "s1_commit" "s3_forupd" "s2_commit" +permutation s1_show s1_commit s2_commit +permutation s1_lock s2_update s2_abort s3_forkeyshr s1_commit +permutation s1_lock s2_update s2_commit s3_forkeyshr s1_commit +permutation s1_lock s2_update s1_commit s3_forkeyshr s2_commit +permutation s1_lock s2_update s2_abort s3_fornokeyupd s1_commit +permutation s1_lock s2_update s2_commit s3_fornokeyupd s1_commit +permutation s1_lock s2_update s1_commit s3_fornokeyupd s2_commit +permutation s1_lock s2_update s2_abort s3_forupd s1_commit +permutation s1_lock s2_update s2_commit s3_forupd s1_commit +permutation s1_lock s2_update s1_commit s3_forupd s2_commit diff --git a/src/test/isolation/specs/nowait-2.spec b/src/test/isolation/specs/nowait-2.spec index 69ce5edd81a5e..cf892f2cbecad 100644 --- a/src/test/isolation/specs/nowait-2.spec +++ b/src/test/isolation/specs/nowait-2.spec @@ -14,24 +14,24 @@ teardown DROP TABLE foo; } -session "s1" +session s1 setup { BEGIN; } -step "s1a" { SELECT * FROM foo FOR SHARE NOWAIT; } -step "s1b" { COMMIT; } +step s1a { SELECT * FROM foo FOR SHARE NOWAIT; } +step s1b { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "s2a" { SELECT * FROM foo FOR SHARE NOWAIT; } -step "s2b" { SELECT * FROM foo FOR UPDATE NOWAIT; } -step "s2c" { COMMIT; } +step s2a { SELECT * FROM foo FOR SHARE NOWAIT; } +step s2b { SELECT * FROM foo FOR UPDATE NOWAIT; } +step s2c { COMMIT; } # s1 and s2 both get SHARE lock, creating a multixact lock, then s2 # tries to upgrade to UPDATE but aborts because it cannot acquire a # multi-xact lock -permutation "s1a" "s2a" "s2b" "s1b" "s2c" +permutation s1a s2a s2b s1b s2c # the same but with the SHARE locks acquired in a different order, so # s2 again aborts because it can't acquired a multi-xact lock -permutation "s2a" "s1a" "s2b" "s1b" "s2c" +permutation s2a s1a s2b s1b s2c # s2 acquires SHARE then UPDATE, then s1 tries to acquire SHARE but # can't so aborts because it can't acquire a regular lock -permutation "s2a" "s2b" "s1a" "s1b" "s2c" +permutation s2a s2b s1a s1b s2c diff --git a/src/test/isolation/specs/nowait-3.spec b/src/test/isolation/specs/nowait-3.spec index 9e6b994fddcd4..06fb7624c3ce6 100644 --- a/src/test/isolation/specs/nowait-3.spec +++ b/src/test/isolation/specs/nowait-3.spec @@ -14,20 +14,20 @@ teardown DROP TABLE foo; } -session "s1" +session s1 setup { BEGIN; } -step "s1a" { SELECT * FROM foo FOR UPDATE; } -step "s1b" { COMMIT; } +step s1a { SELECT * FROM foo FOR UPDATE; } +step s1b { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "s2a" { SELECT * FROM foo FOR UPDATE; } -step "s2b" { COMMIT; } +step s2a { SELECT * FROM foo FOR UPDATE; } +step s2b { COMMIT; } -session "s3" +session s3 setup { BEGIN; } -step "s3a" { SELECT * FROM foo FOR UPDATE NOWAIT; } -step "s3b" { COMMIT; } +step s3a { SELECT * FROM foo FOR UPDATE NOWAIT; } +step s3b { COMMIT; } # s3 skips to second record due to tuple lock held by s2 -permutation "s1a" "s2a" "s3a" "s1b" "s2b" "s3b" +permutation s1a s2a s3a s1b s2b s3b diff --git a/src/test/isolation/specs/nowait-4.spec b/src/test/isolation/specs/nowait-4.spec index 48ac777d78a18..da80330a62b3f 100644 --- a/src/test/isolation/specs/nowait-4.spec +++ b/src/test/isolation/specs/nowait-4.spec @@ -14,22 +14,22 @@ teardown DROP TABLE foo; } -session "s1" +session s1 setup { BEGIN; } -step "s1a" { SELECT * FROM foo WHERE pg_advisory_lock(0) IS NOT NULL FOR UPDATE NOWAIT; } -step "s1b" { COMMIT; } +step s1a { SELECT * FROM foo WHERE pg_advisory_lock(0) IS NOT NULL FOR UPDATE NOWAIT; } +step s1b { COMMIT; } -session "s2" -step "s2a" { SELECT pg_advisory_lock(0); } -step "s2b" { UPDATE foo SET data = data; } -step "s2c" { BEGIN; } -step "s2d" { UPDATE foo SET data = data; } -step "s2e" { SELECT pg_advisory_unlock(0); } -step "s2f" { COMMIT; } +session s2 +step s2a { SELECT pg_advisory_lock(0); } +step s2b { UPDATE foo SET data = data; } +step s2c { BEGIN; } +step s2d { UPDATE foo SET data = data; } +step s2e { SELECT pg_advisory_unlock(0); } +step s2f { COMMIT; } # s1 takes a snapshot but then waits on an advisory lock, then s2 # updates the row in one transaction, then again in another without # committing, before allowing s1 to proceed to try to lock a row; # because it has a snapshot that sees the older version, we reach the # waiting code in EvalPlanQualFetch which ereports when in NOWAIT mode. -permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s2e" "s1b" "s2f" +permutation s2a s1a s2b s2c s2d s2e s1b s2f diff --git a/src/test/isolation/specs/nowait-5.spec b/src/test/isolation/specs/nowait-5.spec index 75e9462fc1fd9..46108de16d4c0 100644 --- a/src/test/isolation/specs/nowait-5.spec +++ b/src/test/isolation/specs/nowait-5.spec @@ -18,11 +18,11 @@ teardown DROP TABLE test_nowait; } -session "sl1" -step "sl1_prep" { +session sl1 +step sl1_prep { PREPARE sl1_run AS SELECT id FROM test_nowait WHERE pg_advisory_lock(0) is not null FOR UPDATE NOWAIT; } -step "sl1_exec" { +step sl1_exec { BEGIN ISOLATION LEVEL READ COMMITTED; EXECUTE sl1_run; SELECT xmin, xmax, ctid, * FROM test_nowait; @@ -31,22 +31,22 @@ teardown { COMMIT; } # A session that's used for an UPDATE of the rows to be locked, for when we're testing ctid # chain following. -session "upd" -step "upd_getlock" { +session upd +step upd_getlock { SELECT pg_advisory_lock(0); } -step "upd_doupdate" { +step upd_doupdate { BEGIN ISOLATION LEVEL READ COMMITTED; UPDATE test_nowait SET value = value WHERE id % 2 = 0; COMMIT; } -step "upd_releaselock" { +step upd_releaselock { SELECT pg_advisory_unlock(0); } # A session that acquires locks that sl1 is supposed to avoid blocking on -session "lk1" -step "lk1_doforshare" { +session lk1 +step lk1_doforshare { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT id FROM test_nowait WHERE id % 2 = 0 FOR SHARE; } @@ -54,4 +54,4 @@ teardown { COMMIT; } -permutation "sl1_prep" "upd_getlock" "sl1_exec" "upd_doupdate" "lk1_doforshare" "upd_releaselock" +permutation sl1_prep upd_getlock sl1_exec upd_doupdate lk1_doforshare upd_releaselock diff --git a/src/test/isolation/specs/nowait.spec b/src/test/isolation/specs/nowait.spec index 73580cd1b2a28..a75e54cc67b42 100644 --- a/src/test/isolation/specs/nowait.spec +++ b/src/test/isolation/specs/nowait.spec @@ -14,12 +14,12 @@ teardown DROP TABLE foo; } -session "s1" +session s1 setup { BEGIN; } -step "s1a" { SELECT * FROM foo FOR UPDATE NOWAIT; } -step "s1b" { COMMIT; } +step s1a { SELECT * FROM foo FOR UPDATE NOWAIT; } +step s1b { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "s2a" { SELECT * FROM foo FOR UPDATE NOWAIT; } -step "s2b" { COMMIT; } +step s2a { SELECT * FROM foo FOR UPDATE NOWAIT; } +step s2b { COMMIT; } diff --git a/src/test/isolation/specs/partial-index.spec b/src/test/isolation/specs/partial-index.spec index 74e72645d9720..c0338418a8dfd 100644 --- a/src/test/isolation/specs/partial-index.spec +++ b/src/test/isolation/specs/partial-index.spec @@ -19,14 +19,14 @@ teardown DROP TABLE test_t; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "rxy1" { select * from test_t where val2 = 1; } -step "wx1" { update test_t set val2 = 2 where val2 = 1 and id = 10; } -step "c1" { COMMIT; } +step rxy1 { select * from test_t where val2 = 1; } +step wx1 { update test_t set val2 = 2 where val2 = 1 and id = 10; } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "wy2" { update test_t set val2 = 2 where val2 = 1 and id = 9; } -step "rxy2" { select * from test_t where val2 = 1; } -step "c2" { COMMIT; } +step wy2 { update test_t set val2 = 2 where val2 = 1 and id = 9; } +step rxy2 { select * from test_t where val2 = 1; } +step c2 { COMMIT; } diff --git a/src/test/isolation/specs/partition-concurrent-attach.spec b/src/test/isolation/specs/partition-concurrent-attach.spec index 48c3f83e0c8b9..fcd4dce7ec589 100644 --- a/src/test/isolation/specs/partition-concurrent-attach.spec +++ b/src/test/isolation/specs/partition-concurrent-attach.spec @@ -15,29 +15,29 @@ setup { insert into tpart_2 values (110,'xxx'), (120, 'yyy'), (150, 'zzz'); } -session "s1" -step "s1b" { begin; } -step "s1a" { alter table tpart attach partition tpart_2 for values from (100) to (200); } -step "s1c" { commit; } +session s1 +step s1b { begin; } +step s1a { alter table tpart attach partition tpart_2 for values from (100) to (200); } +step s1c { commit; } -session "s2" -step "s2b" { begin; } -step "s2i" { insert into tpart values (110,'xxx'), (120, 'yyy'), (150, 'zzz'); } -step "s2i2" { insert into tpart_default (i, j) values (110, 'xxx'), (120, 'yyy'), (150, 'zzz'); } -step "s2c" { commit; } -step "s2s" { select tableoid::regclass, * from tpart; } +session s2 +step s2b { begin; } +step s2i { insert into tpart values (110,'xxx'), (120, 'yyy'), (150, 'zzz'); } +step s2i2 { insert into tpart_default (i, j) values (110, 'xxx'), (120, 'yyy'), (150, 'zzz'); } +step s2c { commit; } +step s2s { select tableoid::regclass, * from tpart; } teardown { drop table tpart; } # insert into tpart by s2 which routes to tpart_default due to not seeing # concurrently added tpart_2 should fail, because the partition constraint # of tpart_default would have changed due to tpart_2 having been added -permutation "s1b" "s1a" "s2b" "s2i" "s1c" "s2c" "s2s" +permutation s1b s1a s2b s2i s1c s2c s2s # similar to above, but now insert into sub-partitioned tpart_default -permutation "s1b" "s1a" "s2b" "s2i2" "s1c" "s2c" "s2s" +permutation s1b s1a s2b s2i2 s1c s2c s2s # reverse: now the insert into tpart_default by s2 occurs first followed by # attach in s1, which should fail when it scans the leaf default partition # find the violating rows -permutation "s1b" "s2b" "s2i" "s1a" "s2c" "s1c" "s2s" +permutation s1b s2b s2i s1a s2c s1c s2s diff --git a/src/test/isolation/specs/partition-key-update-1.spec b/src/test/isolation/specs/partition-key-update-1.spec index 79db1d0f3077a..6b5f4228c5e7d 100644 --- a/src/test/isolation/specs/partition-key-update-1.spec +++ b/src/test/isolation/specs/partition-key-update-1.spec @@ -46,41 +46,41 @@ teardown DROP TABLE bar, foo_range_parted; } -session "s1" -step "s1b" { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "s1u" { UPDATE foo SET a=2 WHERE a=1; } -step "s1u2" { UPDATE footrg SET b='EFG' WHERE a=1; } -step "s1u3pc" { UPDATE foo_range_parted SET a=11 WHERE a=7; } -step "s1u3npc" { UPDATE foo_range_parted SET b='XYZ' WHERE a=7; } -step "s1c" { COMMIT; } -step "s1r" { ROLLBACK; } +session s1 +step s1b { BEGIN ISOLATION LEVEL READ COMMITTED; } +step s1u { UPDATE foo SET a=2 WHERE a=1; } +step s1u2 { UPDATE footrg SET b='EFG' WHERE a=1; } +step s1u3pc { UPDATE foo_range_parted SET a=11 WHERE a=7; } +step s1u3npc { UPDATE foo_range_parted SET b='XYZ' WHERE a=7; } +step s1c { COMMIT; } +step s1r { ROLLBACK; } -session "s2" -step "s2b" { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "s2u" { UPDATE foo SET b='EFG' WHERE a=1; } -step "s2u2" { UPDATE footrg SET b='XYZ' WHERE a=1; } -step "s2i" { INSERT INTO bar VALUES(7); } -step "s2d" { DELETE FROM foo WHERE a=1; } -step "s2c" { COMMIT; } +session s2 +step s2b { BEGIN ISOLATION LEVEL READ COMMITTED; } +step s2u { UPDATE foo SET b='EFG' WHERE a=1; } +step s2u2 { UPDATE footrg SET b='XYZ' WHERE a=1; } +step s2i { INSERT INTO bar VALUES(7); } +step s2d { DELETE FROM foo WHERE a=1; } +step s2c { COMMIT; } # Concurrency error from ExecUpdate and ExecDelete. -permutation "s1b" "s2b" "s1u" "s1c" "s2d" "s2c" -permutation "s1b" "s2b" "s1u" "s2d" "s1c" "s2c" -permutation "s1b" "s2b" "s1u" "s2u" "s1c" "s2c" -permutation "s1b" "s2b" "s2d" "s1u" "s2c" "s1c" +permutation s1b s2b s1u s1c s2d s2c +permutation s1b s2b s1u s2d s1c s2c +permutation s1b s2b s1u s2u s1c s2c +permutation s1b s2b s2d s1u s2c s1c # Concurrency error from GetTupleForTrigger -permutation "s1b" "s2b" "s1u2" "s1c" "s2u2" "s2c" -permutation "s1b" "s2b" "s1u2" "s2u2" "s1c" "s2c" -permutation "s1b" "s2b" "s2u2" "s1u2" "s2c" "s1c" +permutation s1b s2b s1u2 s1c s2u2 s2c +permutation s1b s2b s1u2 s2u2 s1c s2c +permutation s1b s2b s2u2 s1u2 s2c s1c # Concurrency error from ExecLockRows # test waiting for moved row itself -permutation "s1b" "s2b" "s1u3pc" "s2i" "s1c" "s2c" -permutation "s1b" "s2b" "s1u3pc" "s2i" "s1r" "s2c" +permutation s1b s2b s1u3pc s2i s1c s2c +permutation s1b s2b s1u3pc s2i s1r s2c # test waiting for in-partition update, followed by cross-partition move -permutation "s1b" "s2b" "s1u3npc" "s1u3pc" "s2i" "s1c" "s2c" -permutation "s1b" "s2b" "s1u3npc" "s1u3pc" "s2i" "s1r" "s2c" +permutation s1b s2b s1u3npc s1u3pc s2i s1c s2c +permutation s1b s2b s1u3npc s1u3pc s2i s1r s2c # test waiting for in-partition update, followed by cross-partition move -permutation "s1b" "s2b" "s1u3npc" "s1u3pc" "s1u3pc" "s2i" "s1c" "s2c" -permutation "s1b" "s2b" "s1u3npc" "s1u3pc" "s1u3pc" "s2i" "s1r" "s2c" +permutation s1b s2b s1u3npc s1u3pc s1u3pc s2i s1c s2c +permutation s1b s2b s1u3npc s1u3pc s1u3pc s2i s1r s2c diff --git a/src/test/isolation/specs/partition-key-update-2.spec b/src/test/isolation/specs/partition-key-update-2.spec index 699e2e727f784..d4cd09b48831b 100644 --- a/src/test/isolation/specs/partition-key-update-2.spec +++ b/src/test/isolation/specs/partition-key-update-2.spec @@ -23,23 +23,23 @@ teardown DROP TABLE foo; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "s1u" { UPDATE foo SET a=2, b=b || ' -> moved by session-1' WHERE a=1; } -step "s1c" { COMMIT; } +step s1u { UPDATE foo SET a=2, b=b || ' -> moved by session-1' WHERE a=1; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "s2donothing" { INSERT INTO foo VALUES(1, 'session-2 donothing') ON CONFLICT DO NOTHING; } -step "s2c" { COMMIT; } +step s2donothing { INSERT INTO foo VALUES(1, 'session-2 donothing') ON CONFLICT DO NOTHING; } +step s2c { COMMIT; } -session "s3" +session s3 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "s3donothing" { INSERT INTO foo VALUES(2, 'session-3 donothing') ON CONFLICT DO NOTHING; } -step "s3select" { SELECT * FROM foo ORDER BY a; } -step "s3c" { COMMIT; } +step s3donothing { INSERT INTO foo VALUES(2, 'session-3 donothing') ON CONFLICT DO NOTHING; } +step s3select { SELECT * FROM foo ORDER BY a; } +step s3c { COMMIT; } # Regular case where one session block-waits on another to determine if it # should proceed with an insert or do nothing. -permutation "s1u" "s2donothing" "s3donothing" "s1c" "s2c" "s3select" "s3c" -permutation "s2donothing" "s1u" "s3donothing" "s1c" "s2c" "s3select" "s3c" +permutation s1u s2donothing s3donothing s1c s2c s3select s3c +permutation s2donothing s1u s3donothing s1c s2c s3select s3c diff --git a/src/test/isolation/specs/partition-key-update-3.spec b/src/test/isolation/specs/partition-key-update-3.spec index a6efea1381731..d2883e34a5772 100644 --- a/src/test/isolation/specs/partition-key-update-3.spec +++ b/src/test/isolation/specs/partition-key-update-3.spec @@ -16,29 +16,29 @@ teardown DROP TABLE foo; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "s1u" { UPDATE foo SET a=2, b=b || ' -> moved by session-1' WHERE a=1; } -step "s1c" { COMMIT; } +step s1u { UPDATE foo SET a=2, b=b || ' -> moved by session-1' WHERE a=1; } +step s1c { COMMIT; } -session "s2" -step "s2beginrr" { BEGIN ISOLATION LEVEL REPEATABLE READ; } -step "s2begins" { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "s2donothing" { INSERT INTO foo VALUES(1, 'session-2 donothing') ON CONFLICT DO NOTHING; } -step "s2c" { COMMIT; } -step "s2select" { SELECT * FROM foo ORDER BY a; } +session s2 +step s2beginrr { BEGIN ISOLATION LEVEL REPEATABLE READ; } +step s2begins { BEGIN ISOLATION LEVEL SERIALIZABLE; } +step s2donothing { INSERT INTO foo VALUES(1, 'session-2 donothing') ON CONFLICT DO NOTHING; } +step s2c { COMMIT; } +step s2select { SELECT * FROM foo ORDER BY a; } -session "s3" -step "s3beginrr" { BEGIN ISOLATION LEVEL REPEATABLE READ; } -step "s3begins" { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "s3donothing" { INSERT INTO foo VALUES(2, 'session-3 donothing'), (2, 'session-3 donothing2') ON CONFLICT DO NOTHING; } -step "s3c" { COMMIT; } +session s3 +step s3beginrr { BEGIN ISOLATION LEVEL REPEATABLE READ; } +step s3begins { BEGIN ISOLATION LEVEL SERIALIZABLE; } +step s3donothing { INSERT INTO foo VALUES(2, 'session-3 donothing'), (2, 'session-3 donothing2') ON CONFLICT DO NOTHING; } +step s3c { COMMIT; } -permutation "s2beginrr" "s3beginrr" "s1u" "s2donothing" "s1c" "s2c" "s3donothing" "s3c" "s2select" -permutation "s2beginrr" "s3beginrr" "s1u" "s3donothing" "s1c" "s3c" "s2donothing" "s2c" "s2select" -permutation "s2beginrr" "s3beginrr" "s1u" "s2donothing" "s3donothing" "s1c" "s2c" "s3c" "s2select" -permutation "s2beginrr" "s3beginrr" "s1u" "s3donothing" "s2donothing" "s1c" "s3c" "s2c" "s2select" -permutation "s2begins" "s3begins" "s1u" "s2donothing" "s1c" "s2c" "s3donothing" "s3c" "s2select" -permutation "s2begins" "s3begins" "s1u" "s3donothing" "s1c" "s3c" "s2donothing" "s2c" "s2select" -permutation "s2begins" "s3begins" "s1u" "s2donothing" "s3donothing" "s1c" "s2c" "s3c" "s2select" -permutation "s2begins" "s3begins" "s1u" "s3donothing" "s2donothing" "s1c" "s3c" "s2c" "s2select" +permutation s2beginrr s3beginrr s1u s2donothing s1c s2c s3donothing s3c s2select +permutation s2beginrr s3beginrr s1u s3donothing s1c s3c s2donothing s2c s2select +permutation s2beginrr s3beginrr s1u s2donothing s3donothing s1c s2c s3c s2select +permutation s2beginrr s3beginrr s1u s3donothing s2donothing s1c s3c s2c s2select +permutation s2begins s3begins s1u s2donothing s1c s2c s3donothing s3c s2select +permutation s2begins s3begins s1u s3donothing s1c s3c s2donothing s2c s2select +permutation s2begins s3begins s1u s2donothing s3donothing s1c s2c s3c s2select +permutation s2begins s3begins s1u s3donothing s2donothing s1c s3c s2c s2select diff --git a/src/test/isolation/specs/partition-key-update-4.spec b/src/test/isolation/specs/partition-key-update-4.spec index 3d1579b244ea5..6c70816f1e738 100644 --- a/src/test/isolation/specs/partition-key-update-4.spec +++ b/src/test/isolation/specs/partition-key-update-4.spec @@ -44,33 +44,33 @@ teardown DROP TABLE triglog; } -session "s1" -step "s1b" { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "s1u" { UPDATE foo SET a = a + 1, b = b || ' update1' WHERE b like '%ABC%'; } -step "s1ut" { UPDATE footrg SET a = a + 1, b = b || ' update1' WHERE b like '%ABC%'; } -step "s1s" { SELECT tableoid::regclass, * FROM foo ORDER BY a; } -step "s1st" { SELECT tableoid::regclass, * FROM footrg ORDER BY a; } -step "s1stl" { SELECT * FROM triglog ORDER BY a; } -step "s1c" { COMMIT; } +session s1 +step s1b { BEGIN ISOLATION LEVEL READ COMMITTED; } +step s1u { UPDATE foo SET a = a + 1, b = b || ' update1' WHERE b like '%ABC%'; } +step s1ut { UPDATE footrg SET a = a + 1, b = b || ' update1' WHERE b like '%ABC%'; } +step s1s { SELECT tableoid::regclass, * FROM foo ORDER BY a; } +step s1st { SELECT tableoid::regclass, * FROM footrg ORDER BY a; } +step s1stl { SELECT * FROM triglog ORDER BY a; } +step s1c { COMMIT; } -session "s2" -step "s2b" { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "s2u1" { UPDATE foo SET b = b || ' update2' WHERE a = 1; } -step "s2u2" { UPDATE foo SET b = 'EFG' WHERE a = 1; } -step "s2ut1" { UPDATE footrg SET b = b || ' update2' WHERE a = 1; } -step "s2ut2" { UPDATE footrg SET b = 'EFG' WHERE a = 1; } -step "s2c" { COMMIT; } +session s2 +step s2b { BEGIN ISOLATION LEVEL READ COMMITTED; } +step s2u1 { UPDATE foo SET b = b || ' update2' WHERE a = 1; } +step s2u2 { UPDATE foo SET b = 'EFG' WHERE a = 1; } +step s2ut1 { UPDATE footrg SET b = b || ' update2' WHERE a = 1; } +step s2ut2 { UPDATE footrg SET b = 'EFG' WHERE a = 1; } +step s2c { COMMIT; } # Session s1 is moving a row into another partition, but is waiting for # another session s2 that is updating the original row. The row that ends up # in the new partition should contain the changes made by session s2. -permutation "s1b" "s2b" "s2u1" "s1u" "s2c" "s1c" "s1s" +permutation s1b s2b s2u1 s1u s2c s1c s1s # Same as above, except, session s1 is waiting in GetTupleForTrigger(). -permutation "s1b" "s2b" "s2ut1" "s1ut" "s2c" "s1c" "s1st" "s1stl" +permutation s1b s2b s2ut1 s1ut s2c s1c s1st s1stl # Below two cases are similar to the above two; except that the session s1 # fails EvalPlanQual() test, so partition key update does not happen. -permutation "s1b" "s2b" "s2u2" "s1u" "s2c" "s1c" "s1s" -permutation "s1b" "s2b" "s2ut2" "s1ut" "s2c" "s1c" "s1st" "s1stl" +permutation s1b s2b s2u2 s1u s2c s1c s1s +permutation s1b s2b s2ut2 s1ut s2c s1c s1st s1stl diff --git a/src/test/isolation/specs/plpgsql-toast.spec b/src/test/isolation/specs/plpgsql-toast.spec index fb40588d4f01e..bb444fc9dede9 100644 --- a/src/test/isolation/specs/plpgsql-toast.spec +++ b/src/test/isolation/specs/plpgsql-toast.spec @@ -22,7 +22,7 @@ teardown DROP TYPE test2; } -session "s1" +session s1 setup { @@ -30,7 +30,7 @@ setup } # assign_simple_var() -step "assign1" +step assign1 { do $$ declare @@ -46,7 +46,7 @@ $$; } # assign_simple_var() -step "assign2" +step assign2 { do $$ declare @@ -62,7 +62,7 @@ $$; } # expanded_record_set_field() -step "assign3" +step assign3 { do $$ declare @@ -79,7 +79,7 @@ $$; } # expanded_record_set_fields() -step "assign4" +step assign4 { do $$ declare @@ -95,7 +95,7 @@ $$; } # expanded_record_set_tuple() -step "assign5" +step assign5 { do $$ declare @@ -113,7 +113,7 @@ $$; } # FOR loop must not hold any fetched-but-not-detoasted values across commit -step "assign6" +step assign6 { do $$ declare @@ -151,28 +151,28 @@ do $$ $$; } -session "s2" +session s2 setup { SELECT pg_advisory_unlock_all(); } -step "lock" +step lock { SELECT pg_advisory_lock(1); } -step "vacuum" +step vacuum { VACUUM test1; } -step "unlock" +step unlock { SELECT pg_advisory_unlock(1); } -permutation "lock" "assign1" "vacuum" "unlock" -permutation "lock" "assign2" "vacuum" "unlock" -permutation "lock" "assign3" "vacuum" "unlock" -permutation "lock" "assign4" "vacuum" "unlock" -permutation "lock" "assign5" "vacuum" "unlock" -permutation "lock" "assign6" "vacuum" "unlock" +permutation lock assign1 vacuum unlock +permutation lock assign2 vacuum unlock +permutation lock assign3 vacuum unlock +permutation lock assign4 vacuum unlock +permutation lock assign5 vacuum unlock +permutation lock assign6 vacuum unlock permutation "fetch-after-commit" diff --git a/src/test/isolation/specs/predicate-gin.spec b/src/test/isolation/specs/predicate-gin.spec index 46fc51befd4a5..e279eaa11ad4d 100644 --- a/src/test/isolation/specs/predicate-gin.spec +++ b/src/test/isolation/specs/predicate-gin.spec @@ -24,92 +24,92 @@ teardown drop table other_tbl; } -session "s1" +session s1 setup { begin isolation level serializable; set enable_seqscan=off; } -step "ra1" { select * from gin_tbl where p @> array[1] limit 1; } -step "rb1" { select count(*) from gin_tbl where p @> array[2]; } -step "rc1" { select count(*) from gin_tbl where p @> array[800]; } -step "rd1" { select count(*) from gin_tbl where p @> array[2000]; } +step ra1 { select * from gin_tbl where p @> array[1] limit 1; } +step rb1 { select count(*) from gin_tbl where p @> array[2]; } +step rc1 { select count(*) from gin_tbl where p @> array[800]; } +step rd1 { select count(*) from gin_tbl where p @> array[2000]; } -step "wo1" { insert into other_tbl values (1); } +step wo1 { insert into other_tbl values (1); } -step "c1" { commit; } +step c1 { commit; } -session "s2" +session s2 setup { begin isolation level serializable; set enable_seqscan=off; } -step "ro2" { select count(*) from other_tbl; } +step ro2 { select count(*) from other_tbl; } -step "wa2" { insert into gin_tbl values (array[1]); } -step "wb2" { insert into gin_tbl values (array[2]); } -step "wc2" { insert into gin_tbl values (array[800]); } -step "wd2" { insert into gin_tbl values (array[2000]); } +step wa2 { insert into gin_tbl values (array[1]); } +step wb2 { insert into gin_tbl values (array[2]); } +step wc2 { insert into gin_tbl values (array[800]); } +step wd2 { insert into gin_tbl values (array[2000]); } -step "c2" { commit; } +step c2 { commit; } -session "s3" -step "fu" { alter index ginidx set (fastupdate = on); } +session s3 +step fu { alter index ginidx set (fastupdate = on); } # An index scan (from one transaction) and an index insert (from another # transaction) try to access the same part of the index. So, there is a # r-w conflict. -permutation "ra1" "ro2" "wo1" "c1" "wa2" "c2" -permutation "ro2" "ra1" "wo1" "c1" "wa2" "c2" -permutation "ro2" "ra1" "wo1" "wa2" "c1" "c2" -permutation "ra1" "ro2" "wa2" "wo1" "c1" "c2" +permutation ra1 ro2 wo1 c1 wa2 c2 +permutation ro2 ra1 wo1 c1 wa2 c2 +permutation ro2 ra1 wo1 wa2 c1 c2 +permutation ra1 ro2 wa2 wo1 c1 c2 -permutation "rb1" "ro2" "wo1" "c1" "wb2" "c2" -permutation "ro2" "rb1" "wo1" "c1" "wb2" "c2" -permutation "ro2" "rb1" "wo1" "wb2" "c1" "c2" -permutation "rb1" "ro2" "wb2" "wo1" "c1" "c2" +permutation rb1 ro2 wo1 c1 wb2 c2 +permutation ro2 rb1 wo1 c1 wb2 c2 +permutation ro2 rb1 wo1 wb2 c1 c2 +permutation rb1 ro2 wb2 wo1 c1 c2 -permutation "rc1" "ro2" "wo1" "c1" "wc2" "c2" -permutation "ro2" "rc1" "wo1" "c1" "wc2" "c2" -permutation "ro2" "rc1" "wo1" "wc2" "c1" "c2" -permutation "rc1" "ro2" "wc2" "wo1" "c1" "c2" +permutation rc1 ro2 wo1 c1 wc2 c2 +permutation ro2 rc1 wo1 c1 wc2 c2 +permutation ro2 rc1 wo1 wc2 c1 c2 +permutation rc1 ro2 wc2 wo1 c1 c2 # An index scan (from one transaction) and an index insert (from another # transaction) try to access different parts of the index. So, there is no # r-w conflict. -permutation "ra1" "ro2" "wo1" "c1" "wb2" "c2" -permutation "ro2" "ra1" "wo1" "c1" "wc2" "c2" -permutation "ro2" "rb1" "wo1" "wa2" "c1" "c2" -permutation "rc1" "ro2" "wa2" "wo1" "c1" "c2" +permutation ra1 ro2 wo1 c1 wb2 c2 +permutation ro2 ra1 wo1 c1 wc2 c2 +permutation ro2 rb1 wo1 wa2 c1 c2 +permutation rc1 ro2 wa2 wo1 c1 c2 -permutation "rb1" "ro2" "wo1" "c1" "wa2" "c2" -permutation "ro2" "rb1" "wo1" "c1" "wc2" "c2" -permutation "ro2" "ra1" "wo1" "wb2" "c1" "c2" -permutation "rc1" "ro2" "wb2" "wo1" "c1" "c2" +permutation rb1 ro2 wo1 c1 wa2 c2 +permutation ro2 rb1 wo1 c1 wc2 c2 +permutation ro2 ra1 wo1 wb2 c1 c2 +permutation rc1 ro2 wb2 wo1 c1 c2 -permutation "rc1" "ro2" "wo1" "c1" "wa2" "c2" -permutation "ro2" "rc1" "wo1" "c1" "wb2" "c2" -permutation "ro2" "ra1" "wo1" "wc2" "c1" "c2" -permutation "rb1" "ro2" "wc2" "wo1" "c1" "c2" +permutation rc1 ro2 wo1 c1 wa2 c2 +permutation ro2 rc1 wo1 c1 wb2 c2 +permutation ro2 ra1 wo1 wc2 c1 c2 +permutation rb1 ro2 wc2 wo1 c1 c2 # With fastupdate = on all index is under predicate lock. So we can't # distinguish particular keys. -permutation "fu" "ra1" "ro2" "wo1" "c1" "wa2" "c2" -permutation "fu" "ra1" "ro2" "wo1" "c1" "wb2" "c2" +permutation fu ra1 ro2 wo1 c1 wa2 c2 +permutation fu ra1 ro2 wo1 c1 wb2 c2 # Check fastupdate turned on concurrently. -permutation "ra1" "ro2" "wo1" "c1" "fu" "wa2" "c2" +permutation ra1 ro2 wo1 c1 fu wa2 c2 # Tests for conflicts with previously non-existing key -permutation "rd1" "ro2" "wo1" "c1" "wd2" "c2" -permutation "ro2" "rd1" "wo1" "c1" "wd2" "c2" -permutation "ro2" "rd1" "wo1" "wd2" "c1" "c2" -permutation "rd1" "ro2" "wd2" "wo1" "c1" "c2" +permutation rd1 ro2 wo1 c1 wd2 c2 +permutation ro2 rd1 wo1 c1 wd2 c2 +permutation ro2 rd1 wo1 wd2 c1 c2 +permutation rd1 ro2 wd2 wo1 c1 c2 diff --git a/src/test/isolation/specs/predicate-gist.spec b/src/test/isolation/specs/predicate-gist.spec index 6d6021f5e4d46..9016c6e46f614 100644 --- a/src/test/isolation/specs/predicate-gist.spec +++ b/src/test/isolation/specs/predicate-gist.spec @@ -21,7 +21,7 @@ teardown drop table gist_point_tbl; } -session "s1" +session s1 setup { begin isolation level serializable; @@ -30,16 +30,16 @@ setup set enable_indexonlyscan=on; } -step "rxy1" { select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); } -step "wx1" { insert into gist_point_tbl (id, p) +step rxy1 { select sum(p[0]) from gist_point_tbl where p << point(2500, 2500); } +step wx1 { insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(15, 20) g; } -step "rxy3" { select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); } -step "wx3" { insert into gist_point_tbl (id, p) +step rxy3 { select sum(p[0]) from gist_point_tbl where p >> point(6000,6000); } +step wx3 { insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(12, 18) g; } -step "c1" { commit; } +step c1 { commit; } -session "s2" +session s2 setup { begin isolation level serializable; @@ -48,70 +48,70 @@ setup set enable_indexonlyscan=on; } -step "rxy2" { select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); } -step "wy2" { insert into gist_point_tbl (id, p) +step rxy2 { select sum(p[0]) from gist_point_tbl where p >> point(7500,7500); } +step wy2 { insert into gist_point_tbl (id, p) select g, point(g*500, g*500) from generate_series(1, 5) g; } -step "rxy4" { select sum(p[0]) from gist_point_tbl where p << point(1000,1000); } -step "wy4" { insert into gist_point_tbl (id, p) +step rxy4 { select sum(p[0]) from gist_point_tbl where p << point(1000,1000); } +step wy4 { insert into gist_point_tbl (id, p) select g, point(g*50, g*50) from generate_series(1, 20) g; } -step "c2" { commit; } +step c2 { commit; } # An index scan (from one transaction) and an index insert (from another # transaction) try to access the same part of the index but one transaction # commits before other transaction begins so no r-w conflict. -permutation "rxy1" "wx1" "c1" "rxy2" "wy2" "c2" -permutation "rxy2" "wy2" "c2" "rxy1" "wx1" "c1" +permutation rxy1 wx1 c1 rxy2 wy2 c2 +permutation rxy2 wy2 c2 rxy1 wx1 c1 # An index scan (from one transaction) and an index insert (from another # transaction) try to access different parts of the index and also one # transaction commits before other transaction begins, so no r-w conflict. -permutation "rxy3" "wx3" "c1" "rxy4" "wy4" "c2" -permutation "rxy4" "wy4" "c2" "rxy3" "wx3" "c1" +permutation rxy3 wx3 c1 rxy4 wy4 c2 +permutation rxy4 wy4 c2 rxy3 wx3 c1 # An index scan (from one transaction) and an index insert (from another # transaction) try to access the same part of the index and one transaction # begins before other transaction commits so there is a r-w conflict. -permutation "rxy1" "wx1" "rxy2" "c1" "wy2" "c2" -permutation "rxy1" "wx1" "rxy2" "wy2" "c1" "c2" -permutation "rxy1" "wx1" "rxy2" "wy2" "c2" "c1" -permutation "rxy1" "rxy2" "wx1" "c1" "wy2" "c2" -permutation "rxy1" "rxy2" "wx1" "wy2" "c1" "c2" -permutation "rxy1" "rxy2" "wx1" "wy2" "c2" "c1" -permutation "rxy1" "rxy2" "wy2" "wx1" "c1" "c2" -permutation "rxy1" "rxy2" "wy2" "wx1" "c2" "c1" -permutation "rxy1" "rxy2" "wy2" "c2" "wx1" "c1" -permutation "rxy2" "rxy1" "wx1" "c1" "wy2" "c2" -permutation "rxy2" "rxy1" "wx1" "wy2" "c1" "c2" -permutation "rxy2" "rxy1" "wx1" "wy2" "c2" "c1" -permutation "rxy2" "rxy1" "wy2" "wx1" "c1" "c2" -permutation "rxy2" "rxy1" "wy2" "wx1" "c2" "c1" -permutation "rxy2" "rxy1" "wy2" "c2" "wx1" "c1" -permutation "rxy2" "wy2" "rxy1" "wx1" "c1" "c2" -permutation "rxy2" "wy2" "rxy1" "wx1" "c2" "c1" -permutation "rxy2" "wy2" "rxy1" "c2" "wx1" "c1" +permutation rxy1 wx1 rxy2 c1 wy2 c2 +permutation rxy1 wx1 rxy2 wy2 c1 c2 +permutation rxy1 wx1 rxy2 wy2 c2 c1 +permutation rxy1 rxy2 wx1 c1 wy2 c2 +permutation rxy1 rxy2 wx1 wy2 c1 c2 +permutation rxy1 rxy2 wx1 wy2 c2 c1 +permutation rxy1 rxy2 wy2 wx1 c1 c2 +permutation rxy1 rxy2 wy2 wx1 c2 c1 +permutation rxy1 rxy2 wy2 c2 wx1 c1 +permutation rxy2 rxy1 wx1 c1 wy2 c2 +permutation rxy2 rxy1 wx1 wy2 c1 c2 +permutation rxy2 rxy1 wx1 wy2 c2 c1 +permutation rxy2 rxy1 wy2 wx1 c1 c2 +permutation rxy2 rxy1 wy2 wx1 c2 c1 +permutation rxy2 rxy1 wy2 c2 wx1 c1 +permutation rxy2 wy2 rxy1 wx1 c1 c2 +permutation rxy2 wy2 rxy1 wx1 c2 c1 +permutation rxy2 wy2 rxy1 c2 wx1 c1 # An index scan (from one transaction) and an index insert (from another # transaction) try to access different parts of the index so no r-w conflict. -permutation "rxy3" "wx3" "rxy4" "c1" "wy4" "c2" -permutation "rxy3" "wx3" "rxy4" "wy4" "c1" "c2" -permutation "rxy3" "wx3" "rxy4" "wy4" "c2" "c1" -permutation "rxy3" "rxy4" "wx3" "c1" "wy4" "c2" -permutation "rxy3" "rxy4" "wx3" "wy4" "c1" "c2" -permutation "rxy3" "rxy4" "wx3" "wy4" "c2" "c1" -permutation "rxy3" "rxy4" "wy4" "wx3" "c1" "c2" -permutation "rxy3" "rxy4" "wy4" "wx3" "c2" "c1" -permutation "rxy3" "rxy4" "wy4" "c2" "wx3" "c1" -permutation "rxy4" "rxy3" "wx3" "c1" "wy4" "c2" -permutation "rxy4" "rxy3" "wx3" "wy4" "c1" "c2" -permutation "rxy4" "rxy3" "wx3" "wy4" "c2" "c1" -permutation "rxy4" "rxy3" "wy4" "wx3" "c1" "c2" -permutation "rxy4" "rxy3" "wy4" "wx3" "c2" "c1" -permutation "rxy4" "rxy3" "wy4" "c2" "wx3" "c1" -permutation "rxy4" "wy4" "rxy3" "wx3" "c1" "c2" -permutation "rxy4" "wy4" "rxy3" "wx3" "c2" "c1" -permutation "rxy4" "wy4" "rxy3" "c2" "wx3" "c1" +permutation rxy3 wx3 rxy4 c1 wy4 c2 +permutation rxy3 wx3 rxy4 wy4 c1 c2 +permutation rxy3 wx3 rxy4 wy4 c2 c1 +permutation rxy3 rxy4 wx3 c1 wy4 c2 +permutation rxy3 rxy4 wx3 wy4 c1 c2 +permutation rxy3 rxy4 wx3 wy4 c2 c1 +permutation rxy3 rxy4 wy4 wx3 c1 c2 +permutation rxy3 rxy4 wy4 wx3 c2 c1 +permutation rxy3 rxy4 wy4 c2 wx3 c1 +permutation rxy4 rxy3 wx3 c1 wy4 c2 +permutation rxy4 rxy3 wx3 wy4 c1 c2 +permutation rxy4 rxy3 wx3 wy4 c2 c1 +permutation rxy4 rxy3 wy4 wx3 c1 c2 +permutation rxy4 rxy3 wy4 wx3 c2 c1 +permutation rxy4 rxy3 wy4 c2 wx3 c1 +permutation rxy4 wy4 rxy3 wx3 c1 c2 +permutation rxy4 wy4 rxy3 wx3 c2 c1 +permutation rxy4 wy4 rxy3 c2 wx3 c1 diff --git a/src/test/isolation/specs/predicate-hash.spec b/src/test/isolation/specs/predicate-hash.spec index 852c1ca29df13..7ca193b108721 100644 --- a/src/test/isolation/specs/predicate-hash.spec +++ b/src/test/isolation/specs/predicate-hash.spec @@ -27,7 +27,7 @@ teardown drop table hash_tbl; } -session "s1" +session s1 setup { begin isolation level serializable; @@ -35,16 +35,16 @@ setup set enable_bitmapscan=off; set enable_indexonlyscan=on; } -step "rxy1" { select sum(p) from hash_tbl where p=20; } -step "wx1" { insert into hash_tbl (id, p) +step rxy1 { select sum(p) from hash_tbl where p=20; } +step wx1 { insert into hash_tbl (id, p) select g, 30 from generate_series(41, 50) g; } -step "rxy3" { select sum(p) from hash_tbl where p=20; } -step "wx3" { insert into hash_tbl (id, p) +step rxy3 { select sum(p) from hash_tbl where p=20; } +step wx3 { insert into hash_tbl (id, p) select g, 50 from generate_series(41, 50) g; } -step "c1" { commit; } +step c1 { commit; } -session "s2" +session s2 setup { begin isolation level serializable; @@ -52,71 +52,71 @@ setup set enable_bitmapscan=off; set enable_indexonlyscan=on; } -step "rxy2" { select sum(p) from hash_tbl where p=30; } -step "wy2" { insert into hash_tbl (id, p) +step rxy2 { select sum(p) from hash_tbl where p=30; } +step wy2 { insert into hash_tbl (id, p) select g, 20 from generate_series(51, 60) g; } -step "rxy4" { select sum(p) from hash_tbl where p=30; } -step "wy4" { insert into hash_tbl (id, p) +step rxy4 { select sum(p) from hash_tbl where p=30; } +step wy4 { insert into hash_tbl (id, p) select g, 60 from generate_series(51, 60) g; } -step "c2" { commit; } +step c2 { commit; } # An index scan (from one transaction) and an index insert (from another # transaction) try to access the same bucket of the index but one transaction # commits before other transaction begins so no r-w conflict. -permutation "rxy1" "wx1" "c1" "rxy2" "wy2" "c2" -permutation "rxy2" "wy2" "c2" "rxy1" "wx1" "c1" +permutation rxy1 wx1 c1 rxy2 wy2 c2 +permutation rxy2 wy2 c2 rxy1 wx1 c1 # An index scan (from one transaction) and an index insert (from another # transaction) try to access different buckets of the index and also one # transaction commits before other transaction begins, so no r-w conflict. -permutation "rxy3" "wx3" "c1" "rxy4" "wy4" "c2" -permutation "rxy4" "wy4" "c2" "rxy3" "wx3" "c1" +permutation rxy3 wx3 c1 rxy4 wy4 c2 +permutation rxy4 wy4 c2 rxy3 wx3 c1 # An index scan (from one transaction) and an index insert (from another # transaction) try to access the same bucket of the index and one transaction # begins before other transaction commits so there is a r-w conflict. -permutation "rxy1" "wx1" "rxy2" "c1" "wy2" "c2" -permutation "rxy1" "wx1" "rxy2" "wy2" "c1" "c2" -permutation "rxy1" "wx1" "rxy2" "wy2" "c2" "c1" -permutation "rxy1" "rxy2" "wx1" "c1" "wy2" "c2" -permutation "rxy1" "rxy2" "wx1" "wy2" "c1" "c2" -permutation "rxy1" "rxy2" "wx1" "wy2" "c2" "c1" -permutation "rxy1" "rxy2" "wy2" "wx1" "c1" "c2" -permutation "rxy1" "rxy2" "wy2" "wx1" "c2" "c1" -permutation "rxy1" "rxy2" "wy2" "c2" "wx1" "c1" -permutation "rxy2" "rxy1" "wx1" "c1" "wy2" "c2" -permutation "rxy2" "rxy1" "wx1" "wy2" "c1" "c2" -permutation "rxy2" "rxy1" "wx1" "wy2" "c2" "c1" -permutation "rxy2" "rxy1" "wy2" "wx1" "c1" "c2" -permutation "rxy2" "rxy1" "wy2" "wx1" "c2" "c1" -permutation "rxy2" "rxy1" "wy2" "c2" "wx1" "c1" -permutation "rxy2" "wy2" "rxy1" "wx1" "c1" "c2" -permutation "rxy2" "wy2" "rxy1" "wx1" "c2" "c1" -permutation "rxy2" "wy2" "rxy1" "c2" "wx1" "c1" +permutation rxy1 wx1 rxy2 c1 wy2 c2 +permutation rxy1 wx1 rxy2 wy2 c1 c2 +permutation rxy1 wx1 rxy2 wy2 c2 c1 +permutation rxy1 rxy2 wx1 c1 wy2 c2 +permutation rxy1 rxy2 wx1 wy2 c1 c2 +permutation rxy1 rxy2 wx1 wy2 c2 c1 +permutation rxy1 rxy2 wy2 wx1 c1 c2 +permutation rxy1 rxy2 wy2 wx1 c2 c1 +permutation rxy1 rxy2 wy2 c2 wx1 c1 +permutation rxy2 rxy1 wx1 c1 wy2 c2 +permutation rxy2 rxy1 wx1 wy2 c1 c2 +permutation rxy2 rxy1 wx1 wy2 c2 c1 +permutation rxy2 rxy1 wy2 wx1 c1 c2 +permutation rxy2 rxy1 wy2 wx1 c2 c1 +permutation rxy2 rxy1 wy2 c2 wx1 c1 +permutation rxy2 wy2 rxy1 wx1 c1 c2 +permutation rxy2 wy2 rxy1 wx1 c2 c1 +permutation rxy2 wy2 rxy1 c2 wx1 c1 # An index scan (from one transaction) and an index insert (from another # transaction) try to access different buckets of the index so no r-w conflict. -permutation "rxy3" "wx3" "rxy4" "c1" "wy4" "c2" -permutation "rxy3" "wx3" "rxy4" "wy4" "c1" "c2" -permutation "rxy3" "wx3" "rxy4" "wy4" "c2" "c1" -permutation "rxy3" "rxy4" "wx3" "c1" "wy4" "c2" -permutation "rxy3" "rxy4" "wx3" "wy4" "c1" "c2" -permutation "rxy3" "rxy4" "wx3" "wy4" "c2" "c1" -permutation "rxy3" "rxy4" "wy4" "wx3" "c1" "c2" -permutation "rxy3" "rxy4" "wy4" "wx3" "c2" "c1" -permutation "rxy3" "rxy4" "wy4" "c2" "wx3" "c1" -permutation "rxy4" "rxy3" "wx3" "c1" "wy4" "c2" -permutation "rxy4" "rxy3" "wx3" "wy4" "c1" "c2" -permutation "rxy4" "rxy3" "wx3" "wy4" "c2" "c1" -permutation "rxy4" "rxy3" "wy4" "wx3" "c1" "c2" -permutation "rxy4" "rxy3" "wy4" "wx3" "c2" "c1" -permutation "rxy4" "rxy3" "wy4" "c2" "wx3" "c1" -permutation "rxy4" "wy4" "rxy3" "wx3" "c1" "c2" -permutation "rxy4" "wy4" "rxy3" "wx3" "c2" "c1" -permutation "rxy4" "wy4" "rxy3" "c2" "wx3" "c1" +permutation rxy3 wx3 rxy4 c1 wy4 c2 +permutation rxy3 wx3 rxy4 wy4 c1 c2 +permutation rxy3 wx3 rxy4 wy4 c2 c1 +permutation rxy3 rxy4 wx3 c1 wy4 c2 +permutation rxy3 rxy4 wx3 wy4 c1 c2 +permutation rxy3 rxy4 wx3 wy4 c2 c1 +permutation rxy3 rxy4 wy4 wx3 c1 c2 +permutation rxy3 rxy4 wy4 wx3 c2 c1 +permutation rxy3 rxy4 wy4 c2 wx3 c1 +permutation rxy4 rxy3 wx3 c1 wy4 c2 +permutation rxy4 rxy3 wx3 wy4 c1 c2 +permutation rxy4 rxy3 wx3 wy4 c2 c1 +permutation rxy4 rxy3 wy4 wx3 c1 c2 +permutation rxy4 rxy3 wy4 wx3 c2 c1 +permutation rxy4 rxy3 wy4 c2 wx3 c1 +permutation rxy4 wy4 rxy3 wx3 c1 c2 +permutation rxy4 wy4 rxy3 wx3 c2 c1 +permutation rxy4 wy4 rxy3 c2 wx3 c1 diff --git a/src/test/isolation/specs/predicate-lock-hot-tuple.spec b/src/test/isolation/specs/predicate-lock-hot-tuple.spec index d16fb60533b63..5b8aecc4ed0ed 100644 --- a/src/test/isolation/specs/predicate-lock-hot-tuple.spec +++ b/src/test/isolation/specs/predicate-lock-hot-tuple.spec @@ -22,16 +22,16 @@ teardown DROP TABLE test; } -session "s1" -step "b1" { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "r1" { SELECT * FROM test WHERE i IN (5, 7) } -step "w1" { UPDATE test SET t = 'pear_xact1' WHERE i = 7 } -step "c1" { COMMIT; } +session s1 +step b1 { BEGIN ISOLATION LEVEL SERIALIZABLE; } +step r1 { SELECT * FROM test WHERE i IN (5, 7) } +step w1 { UPDATE test SET t = 'pear_xact1' WHERE i = 7 } +step c1 { COMMIT; } -session "s2" -step "b2" { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "r2" { SELECT * FROM test WHERE i IN (5, 7) } -step "w2" { UPDATE test SET t = 'apple_xact2' WHERE i = 5 } -step "c2" { COMMIT; } +session s2 +step b2 { BEGIN ISOLATION LEVEL SERIALIZABLE; } +step r2 { SELECT * FROM test WHERE i IN (5, 7) } +step w2 { UPDATE test SET t = 'apple_xact2' WHERE i = 5 } +step c2 { COMMIT; } -permutation "b1" "b2" "r1" "r2" "w1" "w2" "c1" "c2" +permutation b1 b2 r1 r2 w1 w2 c1 c2 diff --git a/src/test/isolation/specs/prepared-transactions-cic.spec b/src/test/isolation/specs/prepared-transactions-cic.spec index c39eaf5ad0c52..626b1b686a26e 100644 --- a/src/test/isolation/specs/prepared-transactions-cic.spec +++ b/src/test/isolation/specs/prepared-transactions-cic.spec @@ -12,26 +12,26 @@ teardown # Sessions for CREATE INDEX CONCURRENTLY test -session "s1" -step "w1" { BEGIN; INSERT INTO cic_test VALUES (1); } -step "p1" { PREPARE TRANSACTION 's1'; } -step "c1" { COMMIT PREPARED 's1'; } +session s1 +step w1 { BEGIN; INSERT INTO cic_test VALUES (1); } +step p1 { PREPARE TRANSACTION 's1'; } +step c1 { COMMIT PREPARED 's1'; } -session "s2" +session s2 # The isolation tester never recognizes that a lock of s1 blocks s2, because a # prepared transaction's locks have no pid associated. While there's a slight # chance of timeout while waiting for an autovacuum-held lock, that wouldn't # change the output. Hence, no timeout is too short. setup { SET lock_timeout = 10; } -step "cic2" +step cic2 { CREATE INDEX CONCURRENTLY on cic_test(a); } -step "r2" +step r2 { SET enable_seqscan to off; SET enable_bitmapscan to off; SELECT * FROM cic_test WHERE a = 1; } -permutation "w1" "p1" "cic2" "c1" "r2" +permutation w1 p1 cic2 c1 r2 diff --git a/src/test/isolation/specs/prepared-transactions.spec b/src/test/isolation/specs/prepared-transactions.spec index bb9e154e6ea40..78b9d2c84ef27 100644 --- a/src/test/isolation/specs/prepared-transactions.spec +++ b/src/test/isolation/specs/prepared-transactions.spec @@ -32,30 +32,30 @@ teardown } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; INSERT INTO test1 VALUES (1); } -step "r1" { SELECT * FROM test2; } -step "p1" { PREPARE TRANSACTION 's1'; } -step "c1" { COMMIT PREPARED 's1'; } +step r1 { SELECT * FROM test2; } +step p1 { PREPARE TRANSACTION 's1'; } +step c1 { COMMIT PREPARED 's1'; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; SELECT * FROM force_snapshot; } -step "r2" { SELECT * FROM test3; } -step "w2" { INSERT INTO test2 VALUES (2); } -step "p2" { PREPARE TRANSACTION 's2'; } -step "c2" { COMMIT PREPARED 's2'; } +step r2 { SELECT * FROM test3; } +step w2 { INSERT INTO test2 VALUES (2); } +step p2 { PREPARE TRANSACTION 's2'; } +step c2 { COMMIT PREPARED 's2'; } -session "s3" +session s3 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; SELECT * FROM force_snapshot; } -step "w3" { INSERT INTO test3 VALUES (3); } -step "p3" { PREPARE TRANSACTION 's3'; } -step "c3" { COMMIT PREPARED 's3'; } +step w3 { INSERT INTO test3 VALUES (3); } +step p3 { PREPARE TRANSACTION 's3'; } +step c3 { COMMIT PREPARED 's3'; } # When run at the end of the permutations below, this SELECT statement # should never return any tuples, because at least one of the three # transactions involved should be aborted. -session "s4" -step "check" { SELECT * FROM test1,test2,test3; } +session s4 +step check { SELECT * FROM test1,test2,test3; } # We run on all permutations of the statements above subject to the # following constraints: @@ -73,1435 +73,1435 @@ step "check" { SELECT * FROM test1,test2,test3; } # This eliminates some redundant combinations. For example, it doesn't # matter if w2 happens before w3 as long as both come before the # conflicting reads. -permutation "r1" "r2" "w2" "w3" "p1" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p1" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p1" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p1" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p1" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p1" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p1" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p2" "p1" "p3" "c3" "c1" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p2" "p1" "p3" "c3" "c2" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p2" "p3" "p1" "c3" "c1" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p2" "p3" "p1" "c3" "c2" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p2" "p3" "c3" "p1" "c1" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p2" "p3" "c3" "p1" "c2" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p2" "p3" "c3" "c2" "p1" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p3" "p1" "p2" "c3" "c1" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p3" "p1" "p2" "c3" "c2" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p3" "p1" "c3" "p2" "c1" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p3" "p1" "c3" "p2" "c2" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p3" "p1" "c3" "c1" "p2" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p3" "p2" "p1" "c3" "c1" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p3" "p2" "p1" "c3" "c2" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p3" "p2" "c3" "p1" "c1" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p3" "p2" "c3" "p1" "c2" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p3" "p2" "c3" "c2" "p1" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p3" "c3" "p1" "p2" "c1" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p3" "c3" "p1" "p2" "c2" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p3" "c3" "p1" "c1" "p2" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p3" "c3" "p2" "p1" "c1" "c2" "check" -permutation "r1" "r2" "w2" "w3" "p3" "c3" "p2" "p1" "c2" "c1" "check" -permutation "r1" "r2" "w2" "w3" "p3" "c3" "p2" "c2" "p1" "c1" "check" -permutation "r1" "r2" "w2" "p1" "w3" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "r2" "w2" "p1" "w3" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "r2" "w2" "p1" "w3" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "r2" "w2" "p1" "w3" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "r2" "w2" "p1" "w3" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "r2" "w2" "p1" "w3" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "r2" "w2" "p1" "w3" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "r2" "w2" "p1" "p2" "w3" "p3" "c3" "c1" "c2" "check" -permutation "r1" "r2" "w2" "p1" "p2" "w3" "p3" "c3" "c2" "c1" "check" -permutation "r1" "r2" "w2" "p2" "w3" "p1" "p3" "c3" "c1" "c2" "check" -permutation "r1" "r2" "w2" "p2" "w3" "p1" "p3" "c3" "c2" "c1" "check" -permutation "r1" "r2" "w2" "p2" "w3" "p3" "p1" "c3" "c1" "c2" "check" -permutation "r1" "r2" "w2" "p2" "w3" "p3" "p1" "c3" "c2" "c1" "check" -permutation "r1" "r2" "w2" "p2" "w3" "p3" "c3" "p1" "c1" "c2" "check" -permutation "r1" "r2" "w2" "p2" "w3" "p3" "c3" "p1" "c2" "c1" "check" -permutation "r1" "r2" "w2" "p2" "w3" "p3" "c3" "c2" "p1" "c1" "check" -permutation "r1" "r2" "w2" "p2" "p1" "w3" "p3" "c3" "c1" "c2" "check" -permutation "r1" "r2" "w2" "p2" "p1" "w3" "p3" "c3" "c2" "c1" "check" -permutation "r1" "r2" "p1" "w2" "w3" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "r2" "p1" "w2" "w3" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "r2" "p1" "w2" "w3" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "r2" "p1" "w2" "w3" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "r2" "p1" "w2" "w3" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "r2" "p1" "w2" "w3" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "r2" "p1" "w2" "w3" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "r2" "p1" "w2" "p2" "w3" "p3" "c3" "c1" "c2" "check" -permutation "r1" "r2" "p1" "w2" "p2" "w3" "p3" "c3" "c2" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p1" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p1" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p1" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p1" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p1" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p1" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p1" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p2" "p1" "p3" "c3" "c1" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p2" "p1" "p3" "c3" "c2" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p2" "p3" "p1" "c3" "c1" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p2" "p3" "p1" "c3" "c2" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p2" "p3" "c3" "p1" "c1" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p2" "p3" "c3" "p1" "c2" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p2" "p3" "c3" "c2" "p1" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p3" "p1" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p3" "p1" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p3" "p1" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p3" "p1" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p3" "p1" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p3" "p2" "p1" "c3" "c1" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p3" "p2" "p1" "c3" "c2" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p3" "p2" "c3" "p1" "c1" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p3" "p2" "c3" "p1" "c2" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p3" "p2" "c3" "c2" "p1" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p3" "c3" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p3" "c3" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p3" "c3" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p3" "c3" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w2" "w3" "r2" "p3" "c3" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w2" "w3" "r2" "p3" "c3" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w2" "w3" "p1" "r2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p1" "r2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p1" "r2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p1" "r2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p1" "r2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p1" "r2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p1" "r2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w2" "w3" "p1" "p3" "r2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p1" "p3" "r2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p1" "p3" "r2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p1" "p3" "r2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p1" "p3" "r2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w2" "w3" "p1" "p3" "c3" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p1" "p3" "c3" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p1" "p3" "c3" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w2" "w3" "p1" "p3" "c3" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w2" "w3" "p3" "r2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p3" "r2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p3" "r2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p3" "r2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p3" "r2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w2" "w3" "p3" "r2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p3" "r2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p3" "r2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p3" "r2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p3" "r2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "r1" "w2" "w3" "p3" "r2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p3" "r2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p3" "r2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w2" "w3" "p3" "r2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p3" "r2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p3" "r2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w2" "w3" "p3" "p1" "r2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p3" "p1" "r2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p3" "p1" "r2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p3" "p1" "r2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p3" "p1" "r2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w2" "w3" "p3" "p1" "c3" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p3" "p1" "c3" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p3" "p1" "c3" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w2" "w3" "p3" "p1" "c3" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w2" "w3" "p3" "c3" "r2" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p3" "c3" "r2" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p3" "c3" "r2" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w2" "w3" "p3" "c3" "r2" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p3" "c3" "r2" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p3" "c3" "r2" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w2" "w3" "p3" "c3" "p1" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w2" "w3" "p3" "c3" "p1" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w2" "w3" "p3" "c3" "p1" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w2" "w3" "p3" "c3" "p1" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w2" "p1" "w3" "r2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "w2" "p1" "w3" "r2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "w2" "p1" "w3" "r2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w2" "p1" "w3" "r2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w2" "p1" "w3" "r2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w2" "p1" "w3" "r2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w2" "p1" "w3" "r2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w2" "p1" "w3" "p3" "r2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w2" "p1" "w3" "p3" "r2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w2" "p1" "w3" "p3" "r2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w2" "p1" "w3" "p3" "r2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w2" "p1" "w3" "p3" "r2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w2" "p1" "w3" "p3" "c3" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w2" "p1" "w3" "p3" "c3" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w2" "p1" "w3" "p3" "c3" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w2" "p1" "w3" "p3" "c3" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p1" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p1" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p1" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p1" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p1" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p1" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p1" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p2" "p1" "p3" "c3" "c1" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p2" "p1" "p3" "c3" "c2" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p2" "p3" "p1" "c3" "c1" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p2" "p3" "p1" "c3" "c2" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p2" "p3" "c3" "p1" "c1" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p2" "p3" "c3" "p1" "c2" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p2" "p3" "c3" "c2" "p1" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p3" "p1" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p3" "p1" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p3" "p1" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p3" "p1" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p3" "p1" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p3" "p2" "p1" "c3" "c1" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p3" "p2" "p1" "c3" "c2" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p3" "p2" "c3" "p1" "c1" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p3" "p2" "c3" "p1" "c2" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p3" "p2" "c3" "c2" "p1" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p3" "c3" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p3" "c3" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p3" "c3" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p3" "c3" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w3" "r2" "w2" "p3" "c3" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w3" "r2" "w2" "p3" "c3" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w3" "r2" "p1" "w2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p1" "w2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p1" "w2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p1" "w2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p1" "w2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p1" "w2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p1" "w2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "r2" "p1" "p3" "w2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p1" "p3" "w2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p1" "p3" "w2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p1" "p3" "w2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p1" "p3" "w2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "r2" "p1" "p3" "c3" "w2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p1" "p3" "c3" "w2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p1" "p3" "c3" "w2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "r2" "p1" "p3" "c3" "c1" "w2" "p2" "c2" "check" -permutation "r1" "w3" "r2" "p3" "w2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p3" "w2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p3" "w2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p3" "w2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p3" "w2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "r2" "p3" "w2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p3" "w2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p3" "w2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p3" "w2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p3" "w2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "r1" "w3" "r2" "p3" "w2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p3" "w2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p3" "w2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w3" "r2" "p3" "w2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p3" "w2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p3" "w2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w3" "r2" "p3" "p1" "w2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p3" "p1" "w2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p3" "p1" "w2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p3" "p1" "w2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p3" "p1" "w2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "r2" "p3" "p1" "c3" "w2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p3" "p1" "c3" "w2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p3" "p1" "c3" "w2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "r2" "p3" "p1" "c3" "c1" "w2" "p2" "c2" "check" -permutation "r1" "w3" "r2" "p3" "c3" "w2" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p3" "c3" "w2" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p3" "c3" "w2" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w3" "r2" "p3" "c3" "w2" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p3" "c3" "w2" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p3" "c3" "w2" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w3" "r2" "p3" "c3" "p1" "w2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "r2" "p3" "c3" "p1" "w2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "r2" "p3" "c3" "p1" "w2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "r2" "p3" "c3" "p1" "c1" "w2" "p2" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p1" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p1" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p1" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p1" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p1" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p1" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p1" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p2" "p1" "p3" "c3" "c1" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p2" "p1" "p3" "c3" "c2" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p2" "p3" "p1" "c3" "c1" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p2" "p3" "p1" "c3" "c2" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p2" "p3" "c3" "p1" "c1" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p2" "p3" "c3" "p1" "c2" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p2" "p3" "c3" "c2" "p1" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p3" "p1" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p3" "p1" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p3" "p1" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p3" "p1" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p3" "p1" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p3" "p2" "p1" "c3" "c1" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p3" "p2" "p1" "c3" "c2" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p3" "p2" "c3" "p1" "c1" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p3" "p2" "c3" "p1" "c2" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p3" "p2" "c3" "c2" "p1" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p3" "c3" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p3" "c3" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p3" "c3" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p3" "c3" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w3" "w2" "r2" "p3" "c3" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w3" "w2" "r2" "p3" "c3" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w3" "w2" "p1" "r2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p1" "r2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p1" "r2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p1" "r2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p1" "r2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p1" "r2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p1" "r2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "w2" "p1" "p3" "r2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p1" "p3" "r2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p1" "p3" "r2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p1" "p3" "r2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p1" "p3" "r2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "w2" "p1" "p3" "c3" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p1" "p3" "c3" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p1" "p3" "c3" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "w2" "p1" "p3" "c3" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w3" "w2" "p3" "r2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p3" "r2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p3" "r2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p3" "r2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p3" "r2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "w2" "p3" "r2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p3" "r2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p3" "r2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p3" "r2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p3" "r2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "r1" "w3" "w2" "p3" "r2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p3" "r2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p3" "r2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w3" "w2" "p3" "r2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p3" "r2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p3" "r2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w3" "w2" "p3" "p1" "r2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p3" "p1" "r2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p3" "p1" "r2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p3" "p1" "r2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p3" "p1" "r2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "w2" "p3" "p1" "c3" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p3" "p1" "c3" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p3" "p1" "c3" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "w2" "p3" "p1" "c3" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w3" "w2" "p3" "c3" "r2" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p3" "c3" "r2" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p3" "c3" "r2" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w3" "w2" "p3" "c3" "r2" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p3" "c3" "r2" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p3" "c3" "r2" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w3" "w2" "p3" "c3" "p1" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "w2" "p3" "c3" "p1" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "w2" "p3" "c3" "p1" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "w2" "p3" "c3" "p1" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w3" "p1" "r2" "w2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p1" "r2" "w2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p1" "r2" "w2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p1" "r2" "w2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p1" "r2" "w2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p1" "r2" "w2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p1" "r2" "w2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p1" "r2" "p3" "w2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p1" "r2" "p3" "w2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p1" "r2" "p3" "w2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p1" "r2" "p3" "w2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p1" "r2" "p3" "w2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p1" "r2" "p3" "c3" "w2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p1" "r2" "p3" "c3" "w2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p1" "r2" "p3" "c3" "w2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p1" "r2" "p3" "c3" "c1" "w2" "p2" "c2" "check" -permutation "r1" "w3" "p1" "w2" "r2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p1" "w2" "r2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p1" "w2" "r2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p1" "w2" "r2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p1" "w2" "r2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p1" "w2" "r2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p1" "w2" "r2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p1" "w2" "p3" "r2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p1" "w2" "p3" "r2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p1" "w2" "p3" "r2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p1" "w2" "p3" "r2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p1" "w2" "p3" "r2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p1" "w2" "p3" "c3" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p1" "w2" "p3" "c3" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p1" "w2" "p3" "c3" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p1" "w2" "p3" "c3" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w3" "p1" "p3" "r2" "w2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p1" "p3" "r2" "w2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p1" "p3" "r2" "w2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p1" "p3" "r2" "w2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p1" "p3" "r2" "w2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p1" "p3" "r2" "c3" "w2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p1" "p3" "r2" "c3" "w2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p1" "p3" "r2" "c3" "w2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p1" "p3" "r2" "c3" "c1" "w2" "p2" "c2" "check" -permutation "r1" "w3" "p1" "p3" "w2" "r2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p1" "p3" "w2" "r2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p1" "p3" "w2" "r2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p1" "p3" "w2" "r2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p1" "p3" "w2" "r2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p1" "p3" "w2" "c3" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p1" "p3" "w2" "c3" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p1" "p3" "w2" "c3" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p1" "p3" "w2" "c3" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w3" "p1" "p3" "c3" "r2" "w2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p1" "p3" "c3" "r2" "w2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p1" "p3" "c3" "r2" "w2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p1" "p3" "c3" "r2" "c1" "w2" "p2" "c2" "check" -permutation "r1" "w3" "p1" "p3" "c3" "w2" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p1" "p3" "c3" "w2" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p1" "p3" "c3" "w2" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p1" "p3" "c3" "w2" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w3" "p1" "p3" "c3" "c1" "r2" "w2" "p2" "c2" "check" -permutation "r1" "w3" "p1" "p3" "c3" "c1" "w2" "r2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "r2" "w2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p3" "r2" "w2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p3" "r2" "w2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "r2" "w2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "r2" "w2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "r2" "w2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p3" "r2" "w2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p3" "r2" "w2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "r1" "w3" "p3" "r2" "w2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "r1" "w3" "p3" "r2" "w2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "r1" "w3" "p3" "r2" "w2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "r2" "w2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "r2" "w2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "r2" "w2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w3" "p3" "r2" "w2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w3" "p3" "r2" "w2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w3" "p3" "r2" "p1" "w2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p3" "r2" "p1" "w2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p3" "r2" "p1" "w2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "r2" "p1" "w2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "r2" "p1" "w2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "r2" "p1" "c3" "w2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "r2" "p1" "c3" "w2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "r2" "p1" "c3" "w2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "r2" "p1" "c3" "c1" "w2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "r2" "c3" "w2" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "r2" "c3" "w2" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "r2" "c3" "w2" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "r2" "c3" "w2" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w3" "p3" "r2" "c3" "w2" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w3" "p3" "r2" "c3" "w2" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w3" "p3" "r2" "c3" "p1" "w2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "r2" "c3" "p1" "w2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "r2" "c3" "p1" "w2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "r2" "c3" "p1" "c1" "w2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "w2" "r2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p3" "w2" "r2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p3" "w2" "r2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "w2" "r2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "w2" "r2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "w2" "r2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p3" "w2" "r2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p3" "w2" "r2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "r1" "w3" "p3" "w2" "r2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "r1" "w3" "p3" "w2" "r2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "r1" "w3" "p3" "w2" "r2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "w2" "r2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "w2" "r2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "w2" "r2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w3" "p3" "w2" "r2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w3" "p3" "w2" "r2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w3" "p3" "w2" "p1" "r2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p3" "w2" "p1" "r2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p3" "w2" "p1" "r2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "w2" "p1" "r2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "w2" "p1" "r2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "w2" "p1" "c3" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "w2" "p1" "c3" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "w2" "p1" "c3" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "w2" "p1" "c3" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "w2" "c3" "r2" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "w2" "c3" "r2" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "w2" "c3" "r2" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "w2" "c3" "r2" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w3" "p3" "w2" "c3" "r2" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w3" "p3" "w2" "c3" "r2" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w3" "p3" "w2" "c3" "p1" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "w2" "c3" "p1" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "w2" "c3" "p1" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "w2" "c3" "p1" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "p1" "r2" "w2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p3" "p1" "r2" "w2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p3" "p1" "r2" "w2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "p1" "r2" "w2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "p1" "r2" "w2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "p1" "r2" "c3" "w2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "p1" "r2" "c3" "w2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "p1" "r2" "c3" "w2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "p1" "r2" "c3" "c1" "w2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "p1" "w2" "r2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "w3" "p3" "p1" "w2" "r2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "w3" "p3" "p1" "w2" "r2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "p1" "w2" "r2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "p1" "w2" "r2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "p1" "w2" "c3" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "p1" "w2" "c3" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "p1" "w2" "c3" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "p1" "w2" "c3" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "p1" "c3" "r2" "w2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "p1" "c3" "r2" "w2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "p1" "c3" "r2" "w2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "p1" "c3" "r2" "c1" "w2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "p1" "c3" "w2" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "p1" "c3" "w2" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "p1" "c3" "w2" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "p1" "c3" "w2" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "p1" "c3" "c1" "r2" "w2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "p1" "c3" "c1" "w2" "r2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "c3" "r2" "w2" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "c3" "r2" "w2" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "c3" "r2" "w2" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "c3" "r2" "w2" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w3" "p3" "c3" "r2" "w2" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w3" "p3" "c3" "r2" "w2" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w3" "p3" "c3" "r2" "p1" "w2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "c3" "r2" "p1" "w2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "c3" "r2" "p1" "w2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "c3" "r2" "p1" "c1" "w2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "c3" "w2" "r2" "p1" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "c3" "w2" "r2" "p1" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "c3" "w2" "r2" "p1" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "c3" "w2" "r2" "p2" "p1" "c1" "c2" "check" -permutation "r1" "w3" "p3" "c3" "w2" "r2" "p2" "p1" "c2" "c1" "check" -permutation "r1" "w3" "p3" "c3" "w2" "r2" "p2" "c2" "p1" "c1" "check" -permutation "r1" "w3" "p3" "c3" "w2" "p1" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "c3" "w2" "p1" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "c3" "w2" "p1" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "c3" "w2" "p1" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "c3" "p1" "r2" "w2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "c3" "p1" "r2" "w2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "c3" "p1" "r2" "w2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "c3" "p1" "r2" "c1" "w2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "c3" "p1" "w2" "r2" "p2" "c1" "c2" "check" -permutation "r1" "w3" "p3" "c3" "p1" "w2" "r2" "p2" "c2" "c1" "check" -permutation "r1" "w3" "p3" "c3" "p1" "w2" "r2" "c1" "p2" "c2" "check" -permutation "r1" "w3" "p3" "c3" "p1" "w2" "c1" "r2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "c3" "p1" "c1" "r2" "w2" "p2" "c2" "check" -permutation "r1" "w3" "p3" "c3" "p1" "c1" "w2" "r2" "p2" "c2" "check" -permutation "r1" "p1" "r2" "w2" "w3" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "p1" "r2" "w2" "w3" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "p1" "r2" "w2" "w3" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "p1" "r2" "w2" "w3" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "p1" "r2" "w2" "w3" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "p1" "r2" "w2" "w3" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "p1" "r2" "w2" "w3" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "p1" "r2" "w2" "p2" "w3" "p3" "c3" "c1" "c2" "check" -permutation "r1" "p1" "r2" "w2" "p2" "w3" "p3" "c3" "c2" "c1" "check" -permutation "r1" "p1" "w2" "w3" "r2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "p1" "w2" "w3" "r2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "p1" "w2" "w3" "r2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "p1" "w2" "w3" "r2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "p1" "w2" "w3" "r2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w2" "w3" "r2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w2" "w3" "r2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w2" "w3" "p3" "r2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "p1" "w2" "w3" "p3" "r2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "p1" "w2" "w3" "p3" "r2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w2" "w3" "p3" "r2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w2" "w3" "p3" "r2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w2" "w3" "p3" "c3" "r2" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w2" "w3" "p3" "c3" "r2" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w2" "w3" "p3" "c3" "r2" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w2" "w3" "p3" "c3" "c1" "r2" "p2" "c2" "check" -permutation "r1" "p1" "w3" "r2" "w2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "p1" "w3" "r2" "w2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "p1" "w3" "r2" "w2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "p1" "w3" "r2" "w2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "p1" "w3" "r2" "w2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w3" "r2" "w2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w3" "r2" "w2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w3" "r2" "p3" "w2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "p1" "w3" "r2" "p3" "w2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "p1" "w3" "r2" "p3" "w2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w3" "r2" "p3" "w2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w3" "r2" "p3" "w2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w3" "r2" "p3" "c3" "w2" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w3" "r2" "p3" "c3" "w2" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w3" "r2" "p3" "c3" "w2" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w3" "r2" "p3" "c3" "c1" "w2" "p2" "c2" "check" -permutation "r1" "p1" "w3" "w2" "r2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "r1" "p1" "w3" "w2" "r2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "r1" "p1" "w3" "w2" "r2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "r1" "p1" "w3" "w2" "r2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "r1" "p1" "w3" "w2" "r2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w3" "w2" "r2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w3" "w2" "r2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w3" "w2" "p3" "r2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "p1" "w3" "w2" "p3" "r2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "p1" "w3" "w2" "p3" "r2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w3" "w2" "p3" "r2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w3" "w2" "p3" "r2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w3" "w2" "p3" "c3" "r2" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w3" "w2" "p3" "c3" "r2" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w3" "w2" "p3" "c3" "r2" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w3" "w2" "p3" "c3" "c1" "r2" "p2" "c2" "check" -permutation "r1" "p1" "w3" "p3" "r2" "w2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "p1" "w3" "p3" "r2" "w2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "p1" "w3" "p3" "r2" "w2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w3" "p3" "r2" "w2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w3" "p3" "r2" "w2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w3" "p3" "r2" "c3" "w2" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w3" "p3" "r2" "c3" "w2" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w3" "p3" "r2" "c3" "w2" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w3" "p3" "r2" "c3" "c1" "w2" "p2" "c2" "check" -permutation "r1" "p1" "w3" "p3" "w2" "r2" "p2" "c3" "c1" "c2" "check" -permutation "r1" "p1" "w3" "p3" "w2" "r2" "p2" "c3" "c2" "c1" "check" -permutation "r1" "p1" "w3" "p3" "w2" "r2" "c3" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w3" "p3" "w2" "r2" "c3" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w3" "p3" "w2" "r2" "c3" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w3" "p3" "w2" "c3" "r2" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w3" "p3" "w2" "c3" "r2" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w3" "p3" "w2" "c3" "r2" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w3" "p3" "w2" "c3" "c1" "r2" "p2" "c2" "check" -permutation "r1" "p1" "w3" "p3" "c3" "r2" "w2" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w3" "p3" "c3" "r2" "w2" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w3" "p3" "c3" "r2" "w2" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w3" "p3" "c3" "r2" "c1" "w2" "p2" "c2" "check" -permutation "r1" "p1" "w3" "p3" "c3" "w2" "r2" "p2" "c1" "c2" "check" -permutation "r1" "p1" "w3" "p3" "c3" "w2" "r2" "p2" "c2" "c1" "check" -permutation "r1" "p1" "w3" "p3" "c3" "w2" "r2" "c1" "p2" "c2" "check" -permutation "r1" "p1" "w3" "p3" "c3" "w2" "c1" "r2" "p2" "c2" "check" -permutation "r1" "p1" "w3" "p3" "c3" "c1" "r2" "w2" "p2" "c2" "check" -permutation "r1" "p1" "w3" "p3" "c3" "c1" "w2" "r2" "p2" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p1" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p1" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p1" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p1" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p1" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p1" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p1" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p2" "p1" "p3" "c3" "c1" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p2" "p1" "p3" "c3" "c2" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p2" "p3" "p1" "c3" "c1" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p2" "p3" "p1" "c3" "c2" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p2" "p3" "c3" "p1" "c1" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p2" "p3" "c3" "p1" "c2" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p2" "p3" "c3" "c2" "p1" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p3" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p3" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p3" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p3" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p3" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p3" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p3" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p3" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p3" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p3" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p3" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p3" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p3" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p3" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w2" "r1" "r2" "w3" "p3" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w2" "r1" "r2" "w3" "p3" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w2" "r1" "r2" "p1" "w3" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w2" "r1" "r2" "p1" "w3" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w2" "r1" "r2" "p1" "w3" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w2" "r1" "r2" "p1" "w3" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w2" "r1" "r2" "p1" "w3" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w2" "r1" "r2" "p1" "w3" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w2" "r1" "r2" "p1" "w3" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w2" "r1" "r2" "p1" "p2" "w3" "p3" "c3" "c1" "c2" "check" -permutation "w2" "r1" "r2" "p1" "p2" "w3" "p3" "c3" "c2" "c1" "check" -permutation "w2" "r1" "r2" "p2" "w3" "p1" "p3" "c3" "c1" "c2" "check" -permutation "w2" "r1" "r2" "p2" "w3" "p1" "p3" "c3" "c2" "c1" "check" -permutation "w2" "r1" "r2" "p2" "w3" "p3" "p1" "c3" "c1" "c2" "check" -permutation "w2" "r1" "r2" "p2" "w3" "p3" "p1" "c3" "c2" "c1" "check" -permutation "w2" "r1" "r2" "p2" "w3" "p3" "c3" "p1" "c1" "c2" "check" -permutation "w2" "r1" "r2" "p2" "w3" "p3" "c3" "p1" "c2" "c1" "check" -permutation "w2" "r1" "r2" "p2" "w3" "p3" "c3" "c2" "p1" "c1" "check" -permutation "w2" "r1" "r2" "p2" "p1" "w3" "p3" "c3" "c1" "c2" "check" -permutation "w2" "r1" "r2" "p2" "p1" "w3" "p3" "c3" "c2" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p1" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p1" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p1" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p1" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p1" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p1" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p1" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p2" "p1" "p3" "c3" "c1" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p2" "p1" "p3" "c3" "c2" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p2" "p3" "p1" "c3" "c1" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p2" "p3" "p1" "c3" "c2" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p2" "p3" "c3" "p1" "c1" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p2" "p3" "c3" "p1" "c2" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p2" "p3" "c3" "c2" "p1" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p3" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p3" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p3" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p3" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p3" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p3" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p3" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p3" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p3" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p3" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p3" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p3" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p3" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p3" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w2" "r1" "w3" "r2" "p3" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w2" "r1" "w3" "r2" "p3" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w2" "r1" "w3" "p1" "r2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p1" "r2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p1" "r2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p1" "r2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p1" "r2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p1" "r2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p1" "r2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w2" "r1" "w3" "p1" "p3" "r2" "p2" "c3" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p1" "p3" "r2" "p2" "c3" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p1" "p3" "r2" "c3" "p2" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p1" "p3" "r2" "c3" "p2" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p1" "p3" "r2" "c3" "c1" "p2" "c2" "check" -permutation "w2" "r1" "w3" "p1" "p3" "c3" "r2" "p2" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p1" "p3" "c3" "r2" "p2" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p1" "p3" "c3" "r2" "c1" "p2" "c2" "check" -permutation "w2" "r1" "w3" "p1" "p3" "c3" "c1" "r2" "p2" "c2" "check" -permutation "w2" "r1" "w3" "p3" "r2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p3" "r2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p3" "r2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p3" "r2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p3" "r2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w2" "r1" "w3" "p3" "r2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p3" "r2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p3" "r2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p3" "r2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p3" "r2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w2" "r1" "w3" "p3" "r2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p3" "r2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p3" "r2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w2" "r1" "w3" "p3" "r2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p3" "r2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p3" "r2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w2" "r1" "w3" "p3" "p1" "r2" "p2" "c3" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p3" "p1" "r2" "p2" "c3" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p3" "p1" "r2" "c3" "p2" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p3" "p1" "r2" "c3" "p2" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p3" "p1" "r2" "c3" "c1" "p2" "c2" "check" -permutation "w2" "r1" "w3" "p3" "p1" "c3" "r2" "p2" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p3" "p1" "c3" "r2" "p2" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p3" "p1" "c3" "r2" "c1" "p2" "c2" "check" -permutation "w2" "r1" "w3" "p3" "p1" "c3" "c1" "r2" "p2" "c2" "check" -permutation "w2" "r1" "w3" "p3" "c3" "r2" "p1" "p2" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p3" "c3" "r2" "p1" "p2" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p3" "c3" "r2" "p1" "c1" "p2" "c2" "check" -permutation "w2" "r1" "w3" "p3" "c3" "r2" "p2" "p1" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p3" "c3" "r2" "p2" "p1" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p3" "c3" "r2" "p2" "c2" "p1" "c1" "check" -permutation "w2" "r1" "w3" "p3" "c3" "p1" "r2" "p2" "c1" "c2" "check" -permutation "w2" "r1" "w3" "p3" "c3" "p1" "r2" "p2" "c2" "c1" "check" -permutation "w2" "r1" "w3" "p3" "c3" "p1" "r2" "c1" "p2" "c2" "check" -permutation "w2" "r1" "w3" "p3" "c3" "p1" "c1" "r2" "p2" "c2" "check" -permutation "w2" "r1" "p1" "r2" "w3" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w2" "r1" "p1" "r2" "w3" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w2" "r1" "p1" "r2" "w3" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w2" "r1" "p1" "r2" "w3" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w2" "r1" "p1" "r2" "w3" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w2" "r1" "p1" "r2" "w3" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w2" "r1" "p1" "r2" "w3" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w2" "r1" "p1" "r2" "p2" "w3" "p3" "c3" "c1" "c2" "check" -permutation "w2" "r1" "p1" "r2" "p2" "w3" "p3" "c3" "c2" "c1" "check" -permutation "w2" "r1" "p1" "w3" "r2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w2" "r1" "p1" "w3" "r2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w2" "r1" "p1" "w3" "r2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w2" "r1" "p1" "w3" "r2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w2" "r1" "p1" "w3" "r2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w2" "r1" "p1" "w3" "r2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w2" "r1" "p1" "w3" "r2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w2" "r1" "p1" "w3" "p3" "r2" "p2" "c3" "c1" "c2" "check" -permutation "w2" "r1" "p1" "w3" "p3" "r2" "p2" "c3" "c2" "c1" "check" -permutation "w2" "r1" "p1" "w3" "p3" "r2" "c3" "p2" "c1" "c2" "check" -permutation "w2" "r1" "p1" "w3" "p3" "r2" "c3" "p2" "c2" "c1" "check" -permutation "w2" "r1" "p1" "w3" "p3" "r2" "c3" "c1" "p2" "c2" "check" -permutation "w2" "r1" "p1" "w3" "p3" "c3" "r2" "p2" "c1" "c2" "check" -permutation "w2" "r1" "p1" "w3" "p3" "c3" "r2" "p2" "c2" "c1" "check" -permutation "w2" "r1" "p1" "w3" "p3" "c3" "r2" "c1" "p2" "c2" "check" -permutation "w2" "r1" "p1" "w3" "p3" "c3" "c1" "r2" "p2" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p1" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p1" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p1" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p1" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p1" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p1" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p1" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p2" "p1" "p3" "c3" "c1" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p2" "p1" "p3" "c3" "c2" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p2" "p3" "p1" "c3" "c1" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p2" "p3" "p1" "c3" "c2" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p2" "p3" "c3" "p1" "c1" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p2" "p3" "c3" "p1" "c2" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p2" "p3" "c3" "c2" "p1" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p3" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p3" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p3" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p3" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p3" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p3" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p3" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p3" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p3" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p3" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p3" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p3" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p3" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p3" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r1" "r2" "w2" "p3" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r1" "r2" "w2" "p3" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r1" "r2" "p1" "w2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p1" "w2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p1" "w2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p1" "w2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p1" "w2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p1" "w2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p1" "w2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "r2" "p1" "p3" "w2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p1" "p3" "w2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p1" "p3" "w2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p1" "p3" "w2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p1" "p3" "w2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "r2" "p1" "p3" "c3" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p1" "p3" "c3" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p1" "p3" "c3" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "r2" "p1" "p3" "c3" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r1" "r2" "p3" "w2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p3" "w2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p3" "w2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p3" "w2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p3" "w2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "r2" "p3" "w2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p3" "w2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p3" "w2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p3" "w2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p3" "w2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w3" "r1" "r2" "p3" "w2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p3" "w2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p3" "w2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r1" "r2" "p3" "w2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p3" "w2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p3" "w2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r1" "r2" "p3" "p1" "w2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p3" "p1" "w2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p3" "p1" "w2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p3" "p1" "w2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p3" "p1" "w2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "r2" "p3" "p1" "c3" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p3" "p1" "c3" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p3" "p1" "c3" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "r2" "p3" "p1" "c3" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r1" "r2" "p3" "c3" "w2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p3" "c3" "w2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p3" "c3" "w2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r1" "r2" "p3" "c3" "w2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p3" "c3" "w2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p3" "c3" "w2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r1" "r2" "p3" "c3" "p1" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "r2" "p3" "c3" "p1" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "r2" "p3" "c3" "p1" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "r2" "p3" "c3" "p1" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p1" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p1" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p1" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p1" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p1" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p1" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p1" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p2" "p1" "p3" "c3" "c1" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p2" "p1" "p3" "c3" "c2" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p2" "p3" "p1" "c3" "c1" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p2" "p3" "p1" "c3" "c2" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p2" "p3" "c3" "p1" "c1" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p2" "p3" "c3" "p1" "c2" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p2" "p3" "c3" "c2" "p1" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p3" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p3" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p3" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p3" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p3" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p3" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p3" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p3" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p3" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p3" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p3" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p3" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p3" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p3" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r1" "w2" "r2" "p3" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r1" "w2" "r2" "p3" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r1" "w2" "p1" "r2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p1" "r2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p1" "r2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p1" "r2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p1" "r2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p1" "r2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p1" "r2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "w2" "p1" "p3" "r2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p1" "p3" "r2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p1" "p3" "r2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p1" "p3" "r2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p1" "p3" "r2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "w2" "p1" "p3" "c3" "r2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p1" "p3" "c3" "r2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p1" "p3" "c3" "r2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "w2" "p1" "p3" "c3" "c1" "r2" "p2" "c2" "check" -permutation "w3" "r1" "w2" "p3" "r2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p3" "r2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p3" "r2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p3" "r2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p3" "r2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "w2" "p3" "r2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p3" "r2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p3" "r2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p3" "r2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p3" "r2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w3" "r1" "w2" "p3" "r2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p3" "r2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p3" "r2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r1" "w2" "p3" "r2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p3" "r2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p3" "r2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r1" "w2" "p3" "p1" "r2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p3" "p1" "r2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p3" "p1" "r2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p3" "p1" "r2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p3" "p1" "r2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "w2" "p3" "p1" "c3" "r2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p3" "p1" "c3" "r2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p3" "p1" "c3" "r2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "w2" "p3" "p1" "c3" "c1" "r2" "p2" "c2" "check" -permutation "w3" "r1" "w2" "p3" "c3" "r2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p3" "c3" "r2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p3" "c3" "r2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r1" "w2" "p3" "c3" "r2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p3" "c3" "r2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p3" "c3" "r2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r1" "w2" "p3" "c3" "p1" "r2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "w2" "p3" "c3" "p1" "r2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "w2" "p3" "c3" "p1" "r2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "w2" "p3" "c3" "p1" "c1" "r2" "p2" "c2" "check" -permutation "w3" "r1" "p1" "r2" "w2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p1" "r2" "w2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p1" "r2" "w2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p1" "r2" "w2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p1" "r2" "w2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p1" "r2" "w2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p1" "r2" "w2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p1" "r2" "p3" "w2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p1" "r2" "p3" "w2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p1" "r2" "p3" "w2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p1" "r2" "p3" "w2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p1" "r2" "p3" "w2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p1" "r2" "p3" "c3" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p1" "r2" "p3" "c3" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p1" "r2" "p3" "c3" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p1" "r2" "p3" "c3" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r1" "p1" "w2" "r2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p1" "w2" "r2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p1" "w2" "r2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p1" "w2" "r2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p1" "w2" "r2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p1" "w2" "r2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p1" "w2" "r2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p1" "w2" "p3" "r2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p1" "w2" "p3" "r2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p1" "w2" "p3" "r2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p1" "w2" "p3" "r2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p1" "w2" "p3" "r2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p1" "w2" "p3" "c3" "r2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p1" "w2" "p3" "c3" "r2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p1" "w2" "p3" "c3" "r2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p1" "w2" "p3" "c3" "c1" "r2" "p2" "c2" "check" -permutation "w3" "r1" "p1" "p3" "r2" "w2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p1" "p3" "r2" "w2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p1" "p3" "r2" "w2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p1" "p3" "r2" "w2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p1" "p3" "r2" "w2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p1" "p3" "r2" "c3" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p1" "p3" "r2" "c3" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p1" "p3" "r2" "c3" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p1" "p3" "r2" "c3" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r1" "p1" "p3" "w2" "r2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p1" "p3" "w2" "r2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p1" "p3" "w2" "r2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p1" "p3" "w2" "r2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p1" "p3" "w2" "r2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p1" "p3" "w2" "c3" "r2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p1" "p3" "w2" "c3" "r2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p1" "p3" "w2" "c3" "r2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p1" "p3" "w2" "c3" "c1" "r2" "p2" "c2" "check" -permutation "w3" "r1" "p1" "p3" "c3" "r2" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p1" "p3" "c3" "r2" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p1" "p3" "c3" "r2" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p1" "p3" "c3" "r2" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r1" "p1" "p3" "c3" "w2" "r2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p1" "p3" "c3" "w2" "r2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p1" "p3" "c3" "w2" "r2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p1" "p3" "c3" "w2" "c1" "r2" "p2" "c2" "check" -permutation "w3" "r1" "p1" "p3" "c3" "c1" "r2" "w2" "p2" "c2" "check" -permutation "w3" "r1" "p1" "p3" "c3" "c1" "w2" "r2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "r2" "w2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p3" "r2" "w2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p3" "r2" "w2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "r2" "w2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "r2" "w2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "r2" "w2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p3" "r2" "w2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p3" "r2" "w2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w3" "r1" "p3" "r2" "w2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w3" "r1" "p3" "r2" "w2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w3" "r1" "p3" "r2" "w2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "r2" "w2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "r2" "w2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "r2" "w2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r1" "p3" "r2" "w2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r1" "p3" "r2" "w2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r1" "p3" "r2" "p1" "w2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p3" "r2" "p1" "w2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p3" "r2" "p1" "w2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "r2" "p1" "w2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "r2" "p1" "w2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "r2" "p1" "c3" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "r2" "p1" "c3" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "r2" "p1" "c3" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "r2" "p1" "c3" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "r2" "c3" "w2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "r2" "c3" "w2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "r2" "c3" "w2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "r2" "c3" "w2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r1" "p3" "r2" "c3" "w2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r1" "p3" "r2" "c3" "w2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r1" "p3" "r2" "c3" "p1" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "r2" "c3" "p1" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "r2" "c3" "p1" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "r2" "c3" "p1" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "w2" "r2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p3" "w2" "r2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p3" "w2" "r2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "w2" "r2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "w2" "r2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "w2" "r2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p3" "w2" "r2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p3" "w2" "r2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w3" "r1" "p3" "w2" "r2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w3" "r1" "p3" "w2" "r2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w3" "r1" "p3" "w2" "r2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "w2" "r2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "w2" "r2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "w2" "r2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r1" "p3" "w2" "r2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r1" "p3" "w2" "r2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r1" "p3" "w2" "p1" "r2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p3" "w2" "p1" "r2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p3" "w2" "p1" "r2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "w2" "p1" "r2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "w2" "p1" "r2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "w2" "p1" "c3" "r2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "w2" "p1" "c3" "r2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "w2" "p1" "c3" "r2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "w2" "p1" "c3" "c1" "r2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "w2" "c3" "r2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "w2" "c3" "r2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "w2" "c3" "r2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "w2" "c3" "r2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r1" "p3" "w2" "c3" "r2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r1" "p3" "w2" "c3" "r2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r1" "p3" "w2" "c3" "p1" "r2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "w2" "c3" "p1" "r2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "w2" "c3" "p1" "r2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "w2" "c3" "p1" "c1" "r2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "p1" "r2" "w2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p3" "p1" "r2" "w2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p3" "p1" "r2" "w2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "p1" "r2" "w2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "p1" "r2" "w2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "p1" "r2" "c3" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "p1" "r2" "c3" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "p1" "r2" "c3" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "p1" "r2" "c3" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "p1" "w2" "r2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r1" "p3" "p1" "w2" "r2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r1" "p3" "p1" "w2" "r2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "p1" "w2" "r2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "p1" "w2" "r2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "p1" "w2" "c3" "r2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "p1" "w2" "c3" "r2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "p1" "w2" "c3" "r2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "p1" "w2" "c3" "c1" "r2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "p1" "c3" "r2" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "p1" "c3" "r2" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "p1" "c3" "r2" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "p1" "c3" "r2" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "p1" "c3" "w2" "r2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "p1" "c3" "w2" "r2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "p1" "c3" "w2" "r2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "p1" "c3" "w2" "c1" "r2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "p1" "c3" "c1" "r2" "w2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "p1" "c3" "c1" "w2" "r2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "c3" "r2" "w2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "c3" "r2" "w2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "c3" "r2" "w2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "c3" "r2" "w2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r1" "p3" "c3" "r2" "w2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r1" "p3" "c3" "r2" "w2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r1" "p3" "c3" "r2" "p1" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "c3" "r2" "p1" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "c3" "r2" "p1" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "c3" "r2" "p1" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "c3" "w2" "r2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "c3" "w2" "r2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "c3" "w2" "r2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "c3" "w2" "r2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r1" "p3" "c3" "w2" "r2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r1" "p3" "c3" "w2" "r2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r1" "p3" "c3" "w2" "p1" "r2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "c3" "w2" "p1" "r2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "c3" "w2" "p1" "r2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "c3" "w2" "p1" "c1" "r2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "c3" "p1" "r2" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "c3" "p1" "r2" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "c3" "p1" "r2" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "c3" "p1" "r2" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "c3" "p1" "w2" "r2" "p2" "c1" "c2" "check" -permutation "w3" "r1" "p3" "c3" "p1" "w2" "r2" "p2" "c2" "c1" "check" -permutation "w3" "r1" "p3" "c3" "p1" "w2" "r2" "c1" "p2" "c2" "check" -permutation "w3" "r1" "p3" "c3" "p1" "w2" "c1" "r2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "c3" "p1" "c1" "r2" "w2" "p2" "c2" "check" -permutation "w3" "r1" "p3" "c3" "p1" "c1" "w2" "r2" "p2" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p1" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p1" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p1" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p1" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p1" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p1" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p1" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p2" "p1" "p3" "c3" "c1" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p2" "p1" "p3" "c3" "c2" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p2" "p3" "p1" "c3" "c1" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p2" "p3" "p1" "c3" "c2" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p2" "p3" "c3" "p1" "c1" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p2" "p3" "c3" "p1" "c2" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p2" "p3" "c3" "c2" "p1" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p3" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p3" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p3" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p3" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p3" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p3" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p3" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p3" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p3" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p3" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p3" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p3" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p3" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p3" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r2" "r1" "w2" "p3" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r2" "r1" "w2" "p3" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r2" "r1" "p1" "w2" "p2" "p3" "c3" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p1" "w2" "p2" "p3" "c3" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p1" "w2" "p3" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p1" "w2" "p3" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p1" "w2" "p3" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p1" "w2" "p3" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p1" "w2" "p3" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r2" "r1" "p1" "p3" "w2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p1" "p3" "w2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p1" "p3" "w2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p1" "p3" "w2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p1" "p3" "w2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r2" "r1" "p1" "p3" "c3" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p1" "p3" "c3" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p1" "p3" "c3" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r2" "r1" "p1" "p3" "c3" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r2" "r1" "p3" "w2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p3" "w2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p3" "w2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p3" "w2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p3" "w2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r2" "r1" "p3" "w2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p3" "w2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p3" "w2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p3" "w2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p3" "w2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w3" "r2" "r1" "p3" "w2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p3" "w2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p3" "w2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r2" "r1" "p3" "w2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p3" "w2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p3" "w2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r2" "r1" "p3" "p1" "w2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p3" "p1" "w2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p3" "p1" "w2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p3" "p1" "w2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p3" "p1" "w2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r2" "r1" "p3" "p1" "c3" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p3" "p1" "c3" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p3" "p1" "c3" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r2" "r1" "p3" "p1" "c3" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r2" "r1" "p3" "c3" "w2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p3" "c3" "w2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p3" "c3" "w2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r2" "r1" "p3" "c3" "w2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p3" "c3" "w2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p3" "c3" "w2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r2" "r1" "p3" "c3" "p1" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r2" "r1" "p3" "c3" "p1" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r2" "r1" "p3" "c3" "p1" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r2" "r1" "p3" "c3" "p1" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r2" "p3" "r1" "w2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r2" "p3" "r1" "w2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r2" "p3" "r1" "w2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r2" "p3" "r1" "w2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r2" "p3" "r1" "w2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r2" "p3" "r1" "w2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w3" "r2" "p3" "r1" "w2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w3" "r2" "p3" "r1" "w2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w3" "r2" "p3" "r1" "w2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w3" "r2" "p3" "r1" "w2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w3" "r2" "p3" "r1" "w2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r2" "p3" "r1" "w2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r2" "p3" "r1" "w2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r2" "p3" "r1" "w2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r2" "p3" "r1" "w2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r2" "p3" "r1" "w2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r2" "p3" "r1" "p1" "w2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "r2" "p3" "r1" "p1" "w2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "r2" "p3" "r1" "p1" "w2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "r2" "p3" "r1" "p1" "w2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "r2" "p3" "r1" "p1" "w2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "r2" "p3" "r1" "p1" "c3" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r2" "p3" "r1" "p1" "c3" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r2" "p3" "r1" "p1" "c3" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r2" "p3" "r1" "p1" "c3" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r2" "p3" "r1" "c3" "w2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r2" "p3" "r1" "c3" "w2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r2" "p3" "r1" "c3" "w2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r2" "p3" "r1" "c3" "w2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r2" "p3" "r1" "c3" "w2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r2" "p3" "r1" "c3" "w2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r2" "p3" "r1" "c3" "p1" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r2" "p3" "r1" "c3" "p1" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r2" "p3" "r1" "c3" "p1" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r2" "p3" "r1" "c3" "p1" "c1" "w2" "p2" "c2" "check" -permutation "w3" "r2" "p3" "c3" "r1" "w2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "r2" "p3" "c3" "r1" "w2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "r2" "p3" "c3" "r1" "w2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "r2" "p3" "c3" "r1" "w2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "r2" "p3" "c3" "r1" "w2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "r2" "p3" "c3" "r1" "w2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "r2" "p3" "c3" "r1" "p1" "w2" "p2" "c1" "c2" "check" -permutation "w3" "r2" "p3" "c3" "r1" "p1" "w2" "p2" "c2" "c1" "check" -permutation "w3" "r2" "p3" "c3" "r1" "p1" "w2" "c1" "p2" "c2" "check" -permutation "w3" "r2" "p3" "c3" "r1" "p1" "c1" "w2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "r2" "w2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w3" "p3" "r1" "r2" "w2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w3" "p3" "r1" "r2" "w2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "r2" "w2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "r2" "w2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "r2" "w2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w3" "p3" "r1" "r2" "w2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w3" "p3" "r1" "r2" "w2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w3" "p3" "r1" "r2" "w2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w3" "p3" "r1" "r2" "w2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w3" "p3" "r1" "r2" "w2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "r2" "w2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "r2" "w2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "r2" "w2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w3" "p3" "r1" "r2" "w2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w3" "p3" "r1" "r2" "w2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w3" "p3" "r1" "r2" "p1" "w2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "p3" "r1" "r2" "p1" "w2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "p3" "r1" "r2" "p1" "w2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "r2" "p1" "w2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "r2" "p1" "w2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "r2" "p1" "c3" "w2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "r2" "p1" "c3" "w2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "r2" "p1" "c3" "w2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "r2" "p1" "c3" "c1" "w2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "r2" "c3" "w2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "r2" "c3" "w2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "r2" "c3" "w2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "r2" "c3" "w2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "p3" "r1" "r2" "c3" "w2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "p3" "r1" "r2" "c3" "w2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "p3" "r1" "r2" "c3" "p1" "w2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "r2" "c3" "p1" "w2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "r2" "c3" "p1" "w2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "r2" "c3" "p1" "c1" "w2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "w2" "r2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w3" "p3" "r1" "w2" "r2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w3" "p3" "r1" "w2" "r2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "w2" "r2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "w2" "r2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "w2" "r2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w3" "p3" "r1" "w2" "r2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w3" "p3" "r1" "w2" "r2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w3" "p3" "r1" "w2" "r2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w3" "p3" "r1" "w2" "r2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w3" "p3" "r1" "w2" "r2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "w2" "r2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "w2" "r2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "w2" "r2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w3" "p3" "r1" "w2" "r2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w3" "p3" "r1" "w2" "r2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w3" "p3" "r1" "w2" "p1" "r2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "p3" "r1" "w2" "p1" "r2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "p3" "r1" "w2" "p1" "r2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "w2" "p1" "r2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "w2" "p1" "r2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "w2" "p1" "c3" "r2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "w2" "p1" "c3" "r2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "w2" "p1" "c3" "r2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "w2" "p1" "c3" "c1" "r2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "w2" "c3" "r2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "w2" "c3" "r2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "w2" "c3" "r2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "w2" "c3" "r2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "p3" "r1" "w2" "c3" "r2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "p3" "r1" "w2" "c3" "r2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "p3" "r1" "w2" "c3" "p1" "r2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "w2" "c3" "p1" "r2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "w2" "c3" "p1" "r2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "w2" "c3" "p1" "c1" "r2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "p1" "r2" "w2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "p3" "r1" "p1" "r2" "w2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "p3" "r1" "p1" "r2" "w2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "p1" "r2" "w2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "p1" "r2" "w2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "p1" "r2" "c3" "w2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "p1" "r2" "c3" "w2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "p1" "r2" "c3" "w2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "p1" "r2" "c3" "c1" "w2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "p1" "w2" "r2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "p3" "r1" "p1" "w2" "r2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "p3" "r1" "p1" "w2" "r2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "p1" "w2" "r2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "p1" "w2" "r2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "p1" "w2" "c3" "r2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "p1" "w2" "c3" "r2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "p1" "w2" "c3" "r2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "p1" "w2" "c3" "c1" "r2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "p1" "c3" "r2" "w2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "p1" "c3" "r2" "w2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "p1" "c3" "r2" "w2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "p1" "c3" "r2" "c1" "w2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "p1" "c3" "w2" "r2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "p1" "c3" "w2" "r2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "p1" "c3" "w2" "r2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "p1" "c3" "w2" "c1" "r2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "p1" "c3" "c1" "r2" "w2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "p1" "c3" "c1" "w2" "r2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "c3" "r2" "w2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "c3" "r2" "w2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "c3" "r2" "w2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "c3" "r2" "w2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "p3" "r1" "c3" "r2" "w2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "p3" "r1" "c3" "r2" "w2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "p3" "r1" "c3" "r2" "p1" "w2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "c3" "r2" "p1" "w2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "c3" "r2" "p1" "w2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "c3" "r2" "p1" "c1" "w2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "c3" "w2" "r2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "c3" "w2" "r2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "c3" "w2" "r2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "c3" "w2" "r2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "p3" "r1" "c3" "w2" "r2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "p3" "r1" "c3" "w2" "r2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "p3" "r1" "c3" "w2" "p1" "r2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "c3" "w2" "p1" "r2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "c3" "w2" "p1" "r2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "c3" "w2" "p1" "c1" "r2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "c3" "p1" "r2" "w2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "c3" "p1" "r2" "w2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "c3" "p1" "r2" "w2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "c3" "p1" "r2" "c1" "w2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "c3" "p1" "w2" "r2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r1" "c3" "p1" "w2" "r2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r1" "c3" "p1" "w2" "r2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r1" "c3" "p1" "w2" "c1" "r2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "c3" "p1" "c1" "r2" "w2" "p2" "c2" "check" -permutation "w3" "p3" "r1" "c3" "p1" "c1" "w2" "r2" "p2" "c2" "check" -permutation "w3" "p3" "r2" "r1" "w2" "p1" "p2" "c3" "c1" "c2" "check" -permutation "w3" "p3" "r2" "r1" "w2" "p1" "p2" "c3" "c2" "c1" "check" -permutation "w3" "p3" "r2" "r1" "w2" "p1" "c3" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r2" "r1" "w2" "p1" "c3" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r2" "r1" "w2" "p1" "c3" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r2" "r1" "w2" "p2" "p1" "c3" "c1" "c2" "check" -permutation "w3" "p3" "r2" "r1" "w2" "p2" "p1" "c3" "c2" "c1" "check" -permutation "w3" "p3" "r2" "r1" "w2" "p2" "c3" "p1" "c1" "c2" "check" -permutation "w3" "p3" "r2" "r1" "w2" "p2" "c3" "p1" "c2" "c1" "check" -permutation "w3" "p3" "r2" "r1" "w2" "p2" "c3" "c2" "p1" "c1" "check" -permutation "w3" "p3" "r2" "r1" "w2" "c3" "p1" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r2" "r1" "w2" "c3" "p1" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r2" "r1" "w2" "c3" "p1" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r2" "r1" "w2" "c3" "p2" "p1" "c1" "c2" "check" -permutation "w3" "p3" "r2" "r1" "w2" "c3" "p2" "p1" "c2" "c1" "check" -permutation "w3" "p3" "r2" "r1" "w2" "c3" "p2" "c2" "p1" "c1" "check" -permutation "w3" "p3" "r2" "r1" "p1" "w2" "p2" "c3" "c1" "c2" "check" -permutation "w3" "p3" "r2" "r1" "p1" "w2" "p2" "c3" "c2" "c1" "check" -permutation "w3" "p3" "r2" "r1" "p1" "w2" "c3" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r2" "r1" "p1" "w2" "c3" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r2" "r1" "p1" "w2" "c3" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r2" "r1" "p1" "c3" "w2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r2" "r1" "p1" "c3" "w2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r2" "r1" "p1" "c3" "w2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r2" "r1" "p1" "c3" "c1" "w2" "p2" "c2" "check" -permutation "w3" "p3" "r2" "r1" "c3" "w2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r2" "r1" "c3" "w2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r2" "r1" "c3" "w2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r2" "r1" "c3" "w2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "p3" "r2" "r1" "c3" "w2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "p3" "r2" "r1" "c3" "w2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "p3" "r2" "r1" "c3" "p1" "w2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r2" "r1" "c3" "p1" "w2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r2" "r1" "c3" "p1" "w2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r2" "r1" "c3" "p1" "c1" "w2" "p2" "c2" "check" -permutation "w3" "p3" "r2" "c3" "r1" "w2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r2" "c3" "r1" "w2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r2" "c3" "r1" "w2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r2" "c3" "r1" "w2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "p3" "r2" "c3" "r1" "w2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "p3" "r2" "c3" "r1" "w2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "p3" "r2" "c3" "r1" "p1" "w2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "r2" "c3" "r1" "p1" "w2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "r2" "c3" "r1" "p1" "w2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "r2" "c3" "r1" "p1" "c1" "w2" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r1" "r2" "w2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "p3" "c3" "r1" "r2" "w2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "p3" "c3" "r1" "r2" "w2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r1" "r2" "w2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "p3" "c3" "r1" "r2" "w2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "p3" "c3" "r1" "r2" "w2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "p3" "c3" "r1" "r2" "p1" "w2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "c3" "r1" "r2" "p1" "w2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "c3" "r1" "r2" "p1" "w2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r1" "r2" "p1" "c1" "w2" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r1" "w2" "r2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "p3" "c3" "r1" "w2" "r2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "p3" "c3" "r1" "w2" "r2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r1" "w2" "r2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "p3" "c3" "r1" "w2" "r2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "p3" "c3" "r1" "w2" "r2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "p3" "c3" "r1" "w2" "p1" "r2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "c3" "r1" "w2" "p1" "r2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "c3" "r1" "w2" "p1" "r2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r1" "w2" "p1" "c1" "r2" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r1" "p1" "r2" "w2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "c3" "r1" "p1" "r2" "w2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "c3" "r1" "p1" "r2" "w2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r1" "p1" "r2" "c1" "w2" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r1" "p1" "w2" "r2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "c3" "r1" "p1" "w2" "r2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "c3" "r1" "p1" "w2" "r2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r1" "p1" "w2" "c1" "r2" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r1" "p1" "c1" "r2" "w2" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r1" "p1" "c1" "w2" "r2" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r2" "r1" "w2" "p1" "p2" "c1" "c2" "check" -permutation "w3" "p3" "c3" "r2" "r1" "w2" "p1" "p2" "c2" "c1" "check" -permutation "w3" "p3" "c3" "r2" "r1" "w2" "p1" "c1" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r2" "r1" "w2" "p2" "p1" "c1" "c2" "check" -permutation "w3" "p3" "c3" "r2" "r1" "w2" "p2" "p1" "c2" "c1" "check" -permutation "w3" "p3" "c3" "r2" "r1" "w2" "p2" "c2" "p1" "c1" "check" -permutation "w3" "p3" "c3" "r2" "r1" "p1" "w2" "p2" "c1" "c2" "check" -permutation "w3" "p3" "c3" "r2" "r1" "p1" "w2" "p2" "c2" "c1" "check" -permutation "w3" "p3" "c3" "r2" "r1" "p1" "w2" "c1" "p2" "c2" "check" -permutation "w3" "p3" "c3" "r2" "r1" "p1" "c1" "w2" "p2" "c2" "check" +permutation r1 r2 w2 w3 p1 p2 p3 c3 c1 c2 check +permutation r1 r2 w2 w3 p1 p2 p3 c3 c2 c1 check +permutation r1 r2 w2 w3 p1 p3 p2 c3 c1 c2 check +permutation r1 r2 w2 w3 p1 p3 p2 c3 c2 c1 check +permutation r1 r2 w2 w3 p1 p3 c3 p2 c1 c2 check +permutation r1 r2 w2 w3 p1 p3 c3 p2 c2 c1 check +permutation r1 r2 w2 w3 p1 p3 c3 c1 p2 c2 check +permutation r1 r2 w2 w3 p2 p1 p3 c3 c1 c2 check +permutation r1 r2 w2 w3 p2 p1 p3 c3 c2 c1 check +permutation r1 r2 w2 w3 p2 p3 p1 c3 c1 c2 check +permutation r1 r2 w2 w3 p2 p3 p1 c3 c2 c1 check +permutation r1 r2 w2 w3 p2 p3 c3 p1 c1 c2 check +permutation r1 r2 w2 w3 p2 p3 c3 p1 c2 c1 check +permutation r1 r2 w2 w3 p2 p3 c3 c2 p1 c1 check +permutation r1 r2 w2 w3 p3 p1 p2 c3 c1 c2 check +permutation r1 r2 w2 w3 p3 p1 p2 c3 c2 c1 check +permutation r1 r2 w2 w3 p3 p1 c3 p2 c1 c2 check +permutation r1 r2 w2 w3 p3 p1 c3 p2 c2 c1 check +permutation r1 r2 w2 w3 p3 p1 c3 c1 p2 c2 check +permutation r1 r2 w2 w3 p3 p2 p1 c3 c1 c2 check +permutation r1 r2 w2 w3 p3 p2 p1 c3 c2 c1 check +permutation r1 r2 w2 w3 p3 p2 c3 p1 c1 c2 check +permutation r1 r2 w2 w3 p3 p2 c3 p1 c2 c1 check +permutation r1 r2 w2 w3 p3 p2 c3 c2 p1 c1 check +permutation r1 r2 w2 w3 p3 c3 p1 p2 c1 c2 check +permutation r1 r2 w2 w3 p3 c3 p1 p2 c2 c1 check +permutation r1 r2 w2 w3 p3 c3 p1 c1 p2 c2 check +permutation r1 r2 w2 w3 p3 c3 p2 p1 c1 c2 check +permutation r1 r2 w2 w3 p3 c3 p2 p1 c2 c1 check +permutation r1 r2 w2 w3 p3 c3 p2 c2 p1 c1 check +permutation r1 r2 w2 p1 w3 p2 p3 c3 c1 c2 check +permutation r1 r2 w2 p1 w3 p2 p3 c3 c2 c1 check +permutation r1 r2 w2 p1 w3 p3 p2 c3 c1 c2 check +permutation r1 r2 w2 p1 w3 p3 p2 c3 c2 c1 check +permutation r1 r2 w2 p1 w3 p3 c3 p2 c1 c2 check +permutation r1 r2 w2 p1 w3 p3 c3 p2 c2 c1 check +permutation r1 r2 w2 p1 w3 p3 c3 c1 p2 c2 check +permutation r1 r2 w2 p1 p2 w3 p3 c3 c1 c2 check +permutation r1 r2 w2 p1 p2 w3 p3 c3 c2 c1 check +permutation r1 r2 w2 p2 w3 p1 p3 c3 c1 c2 check +permutation r1 r2 w2 p2 w3 p1 p3 c3 c2 c1 check +permutation r1 r2 w2 p2 w3 p3 p1 c3 c1 c2 check +permutation r1 r2 w2 p2 w3 p3 p1 c3 c2 c1 check +permutation r1 r2 w2 p2 w3 p3 c3 p1 c1 c2 check +permutation r1 r2 w2 p2 w3 p3 c3 p1 c2 c1 check +permutation r1 r2 w2 p2 w3 p3 c3 c2 p1 c1 check +permutation r1 r2 w2 p2 p1 w3 p3 c3 c1 c2 check +permutation r1 r2 w2 p2 p1 w3 p3 c3 c2 c1 check +permutation r1 r2 p1 w2 w3 p2 p3 c3 c1 c2 check +permutation r1 r2 p1 w2 w3 p2 p3 c3 c2 c1 check +permutation r1 r2 p1 w2 w3 p3 p2 c3 c1 c2 check +permutation r1 r2 p1 w2 w3 p3 p2 c3 c2 c1 check +permutation r1 r2 p1 w2 w3 p3 c3 p2 c1 c2 check +permutation r1 r2 p1 w2 w3 p3 c3 p2 c2 c1 check +permutation r1 r2 p1 w2 w3 p3 c3 c1 p2 c2 check +permutation r1 r2 p1 w2 p2 w3 p3 c3 c1 c2 check +permutation r1 r2 p1 w2 p2 w3 p3 c3 c2 c1 check +permutation r1 w2 w3 r2 p1 p2 p3 c3 c1 c2 check +permutation r1 w2 w3 r2 p1 p2 p3 c3 c2 c1 check +permutation r1 w2 w3 r2 p1 p3 p2 c3 c1 c2 check +permutation r1 w2 w3 r2 p1 p3 p2 c3 c2 c1 check +permutation r1 w2 w3 r2 p1 p3 c3 p2 c1 c2 check +permutation r1 w2 w3 r2 p1 p3 c3 p2 c2 c1 check +permutation r1 w2 w3 r2 p1 p3 c3 c1 p2 c2 check +permutation r1 w2 w3 r2 p2 p1 p3 c3 c1 c2 check +permutation r1 w2 w3 r2 p2 p1 p3 c3 c2 c1 check +permutation r1 w2 w3 r2 p2 p3 p1 c3 c1 c2 check +permutation r1 w2 w3 r2 p2 p3 p1 c3 c2 c1 check +permutation r1 w2 w3 r2 p2 p3 c3 p1 c1 c2 check +permutation r1 w2 w3 r2 p2 p3 c3 p1 c2 c1 check +permutation r1 w2 w3 r2 p2 p3 c3 c2 p1 c1 check +permutation r1 w2 w3 r2 p3 p1 p2 c3 c1 c2 check +permutation r1 w2 w3 r2 p3 p1 p2 c3 c2 c1 check +permutation r1 w2 w3 r2 p3 p1 c3 p2 c1 c2 check +permutation r1 w2 w3 r2 p3 p1 c3 p2 c2 c1 check +permutation r1 w2 w3 r2 p3 p1 c3 c1 p2 c2 check +permutation r1 w2 w3 r2 p3 p2 p1 c3 c1 c2 check +permutation r1 w2 w3 r2 p3 p2 p1 c3 c2 c1 check +permutation r1 w2 w3 r2 p3 p2 c3 p1 c1 c2 check +permutation r1 w2 w3 r2 p3 p2 c3 p1 c2 c1 check +permutation r1 w2 w3 r2 p3 p2 c3 c2 p1 c1 check +permutation r1 w2 w3 r2 p3 c3 p1 p2 c1 c2 check +permutation r1 w2 w3 r2 p3 c3 p1 p2 c2 c1 check +permutation r1 w2 w3 r2 p3 c3 p1 c1 p2 c2 check +permutation r1 w2 w3 r2 p3 c3 p2 p1 c1 c2 check +permutation r1 w2 w3 r2 p3 c3 p2 p1 c2 c1 check +permutation r1 w2 w3 r2 p3 c3 p2 c2 p1 c1 check +permutation r1 w2 w3 p1 r2 p2 p3 c3 c1 c2 check +permutation r1 w2 w3 p1 r2 p2 p3 c3 c2 c1 check +permutation r1 w2 w3 p1 r2 p3 p2 c3 c1 c2 check +permutation r1 w2 w3 p1 r2 p3 p2 c3 c2 c1 check +permutation r1 w2 w3 p1 r2 p3 c3 p2 c1 c2 check +permutation r1 w2 w3 p1 r2 p3 c3 p2 c2 c1 check +permutation r1 w2 w3 p1 r2 p3 c3 c1 p2 c2 check +permutation r1 w2 w3 p1 p3 r2 p2 c3 c1 c2 check +permutation r1 w2 w3 p1 p3 r2 p2 c3 c2 c1 check +permutation r1 w2 w3 p1 p3 r2 c3 p2 c1 c2 check +permutation r1 w2 w3 p1 p3 r2 c3 p2 c2 c1 check +permutation r1 w2 w3 p1 p3 r2 c3 c1 p2 c2 check +permutation r1 w2 w3 p1 p3 c3 r2 p2 c1 c2 check +permutation r1 w2 w3 p1 p3 c3 r2 p2 c2 c1 check +permutation r1 w2 w3 p1 p3 c3 r2 c1 p2 c2 check +permutation r1 w2 w3 p1 p3 c3 c1 r2 p2 c2 check +permutation r1 w2 w3 p3 r2 p1 p2 c3 c1 c2 check +permutation r1 w2 w3 p3 r2 p1 p2 c3 c2 c1 check +permutation r1 w2 w3 p3 r2 p1 c3 p2 c1 c2 check +permutation r1 w2 w3 p3 r2 p1 c3 p2 c2 c1 check +permutation r1 w2 w3 p3 r2 p1 c3 c1 p2 c2 check +permutation r1 w2 w3 p3 r2 p2 p1 c3 c1 c2 check +permutation r1 w2 w3 p3 r2 p2 p1 c3 c2 c1 check +permutation r1 w2 w3 p3 r2 p2 c3 p1 c1 c2 check +permutation r1 w2 w3 p3 r2 p2 c3 p1 c2 c1 check +permutation r1 w2 w3 p3 r2 p2 c3 c2 p1 c1 check +permutation r1 w2 w3 p3 r2 c3 p1 p2 c1 c2 check +permutation r1 w2 w3 p3 r2 c3 p1 p2 c2 c1 check +permutation r1 w2 w3 p3 r2 c3 p1 c1 p2 c2 check +permutation r1 w2 w3 p3 r2 c3 p2 p1 c1 c2 check +permutation r1 w2 w3 p3 r2 c3 p2 p1 c2 c1 check +permutation r1 w2 w3 p3 r2 c3 p2 c2 p1 c1 check +permutation r1 w2 w3 p3 p1 r2 p2 c3 c1 c2 check +permutation r1 w2 w3 p3 p1 r2 p2 c3 c2 c1 check +permutation r1 w2 w3 p3 p1 r2 c3 p2 c1 c2 check +permutation r1 w2 w3 p3 p1 r2 c3 p2 c2 c1 check +permutation r1 w2 w3 p3 p1 r2 c3 c1 p2 c2 check +permutation r1 w2 w3 p3 p1 c3 r2 p2 c1 c2 check +permutation r1 w2 w3 p3 p1 c3 r2 p2 c2 c1 check +permutation r1 w2 w3 p3 p1 c3 r2 c1 p2 c2 check +permutation r1 w2 w3 p3 p1 c3 c1 r2 p2 c2 check +permutation r1 w2 w3 p3 c3 r2 p1 p2 c1 c2 check +permutation r1 w2 w3 p3 c3 r2 p1 p2 c2 c1 check +permutation r1 w2 w3 p3 c3 r2 p1 c1 p2 c2 check +permutation r1 w2 w3 p3 c3 r2 p2 p1 c1 c2 check +permutation r1 w2 w3 p3 c3 r2 p2 p1 c2 c1 check +permutation r1 w2 w3 p3 c3 r2 p2 c2 p1 c1 check +permutation r1 w2 w3 p3 c3 p1 r2 p2 c1 c2 check +permutation r1 w2 w3 p3 c3 p1 r2 p2 c2 c1 check +permutation r1 w2 w3 p3 c3 p1 r2 c1 p2 c2 check +permutation r1 w2 w3 p3 c3 p1 c1 r2 p2 c2 check +permutation r1 w2 p1 w3 r2 p2 p3 c3 c1 c2 check +permutation r1 w2 p1 w3 r2 p2 p3 c3 c2 c1 check +permutation r1 w2 p1 w3 r2 p3 p2 c3 c1 c2 check +permutation r1 w2 p1 w3 r2 p3 p2 c3 c2 c1 check +permutation r1 w2 p1 w3 r2 p3 c3 p2 c1 c2 check +permutation r1 w2 p1 w3 r2 p3 c3 p2 c2 c1 check +permutation r1 w2 p1 w3 r2 p3 c3 c1 p2 c2 check +permutation r1 w2 p1 w3 p3 r2 p2 c3 c1 c2 check +permutation r1 w2 p1 w3 p3 r2 p2 c3 c2 c1 check +permutation r1 w2 p1 w3 p3 r2 c3 p2 c1 c2 check +permutation r1 w2 p1 w3 p3 r2 c3 p2 c2 c1 check +permutation r1 w2 p1 w3 p3 r2 c3 c1 p2 c2 check +permutation r1 w2 p1 w3 p3 c3 r2 p2 c1 c2 check +permutation r1 w2 p1 w3 p3 c3 r2 p2 c2 c1 check +permutation r1 w2 p1 w3 p3 c3 r2 c1 p2 c2 check +permutation r1 w2 p1 w3 p3 c3 c1 r2 p2 c2 check +permutation r1 w3 r2 w2 p1 p2 p3 c3 c1 c2 check +permutation r1 w3 r2 w2 p1 p2 p3 c3 c2 c1 check +permutation r1 w3 r2 w2 p1 p3 p2 c3 c1 c2 check +permutation r1 w3 r2 w2 p1 p3 p2 c3 c2 c1 check +permutation r1 w3 r2 w2 p1 p3 c3 p2 c1 c2 check +permutation r1 w3 r2 w2 p1 p3 c3 p2 c2 c1 check +permutation r1 w3 r2 w2 p1 p3 c3 c1 p2 c2 check +permutation r1 w3 r2 w2 p2 p1 p3 c3 c1 c2 check +permutation r1 w3 r2 w2 p2 p1 p3 c3 c2 c1 check +permutation r1 w3 r2 w2 p2 p3 p1 c3 c1 c2 check +permutation r1 w3 r2 w2 p2 p3 p1 c3 c2 c1 check +permutation r1 w3 r2 w2 p2 p3 c3 p1 c1 c2 check +permutation r1 w3 r2 w2 p2 p3 c3 p1 c2 c1 check +permutation r1 w3 r2 w2 p2 p3 c3 c2 p1 c1 check +permutation r1 w3 r2 w2 p3 p1 p2 c3 c1 c2 check +permutation r1 w3 r2 w2 p3 p1 p2 c3 c2 c1 check +permutation r1 w3 r2 w2 p3 p1 c3 p2 c1 c2 check +permutation r1 w3 r2 w2 p3 p1 c3 p2 c2 c1 check +permutation r1 w3 r2 w2 p3 p1 c3 c1 p2 c2 check +permutation r1 w3 r2 w2 p3 p2 p1 c3 c1 c2 check +permutation r1 w3 r2 w2 p3 p2 p1 c3 c2 c1 check +permutation r1 w3 r2 w2 p3 p2 c3 p1 c1 c2 check +permutation r1 w3 r2 w2 p3 p2 c3 p1 c2 c1 check +permutation r1 w3 r2 w2 p3 p2 c3 c2 p1 c1 check +permutation r1 w3 r2 w2 p3 c3 p1 p2 c1 c2 check +permutation r1 w3 r2 w2 p3 c3 p1 p2 c2 c1 check +permutation r1 w3 r2 w2 p3 c3 p1 c1 p2 c2 check +permutation r1 w3 r2 w2 p3 c3 p2 p1 c1 c2 check +permutation r1 w3 r2 w2 p3 c3 p2 p1 c2 c1 check +permutation r1 w3 r2 w2 p3 c3 p2 c2 p1 c1 check +permutation r1 w3 r2 p1 w2 p2 p3 c3 c1 c2 check +permutation r1 w3 r2 p1 w2 p2 p3 c3 c2 c1 check +permutation r1 w3 r2 p1 w2 p3 p2 c3 c1 c2 check +permutation r1 w3 r2 p1 w2 p3 p2 c3 c2 c1 check +permutation r1 w3 r2 p1 w2 p3 c3 p2 c1 c2 check +permutation r1 w3 r2 p1 w2 p3 c3 p2 c2 c1 check +permutation r1 w3 r2 p1 w2 p3 c3 c1 p2 c2 check +permutation r1 w3 r2 p1 p3 w2 p2 c3 c1 c2 check +permutation r1 w3 r2 p1 p3 w2 p2 c3 c2 c1 check +permutation r1 w3 r2 p1 p3 w2 c3 p2 c1 c2 check +permutation r1 w3 r2 p1 p3 w2 c3 p2 c2 c1 check +permutation r1 w3 r2 p1 p3 w2 c3 c1 p2 c2 check +permutation r1 w3 r2 p1 p3 c3 w2 p2 c1 c2 check +permutation r1 w3 r2 p1 p3 c3 w2 p2 c2 c1 check +permutation r1 w3 r2 p1 p3 c3 w2 c1 p2 c2 check +permutation r1 w3 r2 p1 p3 c3 c1 w2 p2 c2 check +permutation r1 w3 r2 p3 w2 p1 p2 c3 c1 c2 check +permutation r1 w3 r2 p3 w2 p1 p2 c3 c2 c1 check +permutation r1 w3 r2 p3 w2 p1 c3 p2 c1 c2 check +permutation r1 w3 r2 p3 w2 p1 c3 p2 c2 c1 check +permutation r1 w3 r2 p3 w2 p1 c3 c1 p2 c2 check +permutation r1 w3 r2 p3 w2 p2 p1 c3 c1 c2 check +permutation r1 w3 r2 p3 w2 p2 p1 c3 c2 c1 check +permutation r1 w3 r2 p3 w2 p2 c3 p1 c1 c2 check +permutation r1 w3 r2 p3 w2 p2 c3 p1 c2 c1 check +permutation r1 w3 r2 p3 w2 p2 c3 c2 p1 c1 check +permutation r1 w3 r2 p3 w2 c3 p1 p2 c1 c2 check +permutation r1 w3 r2 p3 w2 c3 p1 p2 c2 c1 check +permutation r1 w3 r2 p3 w2 c3 p1 c1 p2 c2 check +permutation r1 w3 r2 p3 w2 c3 p2 p1 c1 c2 check +permutation r1 w3 r2 p3 w2 c3 p2 p1 c2 c1 check +permutation r1 w3 r2 p3 w2 c3 p2 c2 p1 c1 check +permutation r1 w3 r2 p3 p1 w2 p2 c3 c1 c2 check +permutation r1 w3 r2 p3 p1 w2 p2 c3 c2 c1 check +permutation r1 w3 r2 p3 p1 w2 c3 p2 c1 c2 check +permutation r1 w3 r2 p3 p1 w2 c3 p2 c2 c1 check +permutation r1 w3 r2 p3 p1 w2 c3 c1 p2 c2 check +permutation r1 w3 r2 p3 p1 c3 w2 p2 c1 c2 check +permutation r1 w3 r2 p3 p1 c3 w2 p2 c2 c1 check +permutation r1 w3 r2 p3 p1 c3 w2 c1 p2 c2 check +permutation r1 w3 r2 p3 p1 c3 c1 w2 p2 c2 check +permutation r1 w3 r2 p3 c3 w2 p1 p2 c1 c2 check +permutation r1 w3 r2 p3 c3 w2 p1 p2 c2 c1 check +permutation r1 w3 r2 p3 c3 w2 p1 c1 p2 c2 check +permutation r1 w3 r2 p3 c3 w2 p2 p1 c1 c2 check +permutation r1 w3 r2 p3 c3 w2 p2 p1 c2 c1 check +permutation r1 w3 r2 p3 c3 w2 p2 c2 p1 c1 check +permutation r1 w3 r2 p3 c3 p1 w2 p2 c1 c2 check +permutation r1 w3 r2 p3 c3 p1 w2 p2 c2 c1 check +permutation r1 w3 r2 p3 c3 p1 w2 c1 p2 c2 check +permutation r1 w3 r2 p3 c3 p1 c1 w2 p2 c2 check +permutation r1 w3 w2 r2 p1 p2 p3 c3 c1 c2 check +permutation r1 w3 w2 r2 p1 p2 p3 c3 c2 c1 check +permutation r1 w3 w2 r2 p1 p3 p2 c3 c1 c2 check +permutation r1 w3 w2 r2 p1 p3 p2 c3 c2 c1 check +permutation r1 w3 w2 r2 p1 p3 c3 p2 c1 c2 check +permutation r1 w3 w2 r2 p1 p3 c3 p2 c2 c1 check +permutation r1 w3 w2 r2 p1 p3 c3 c1 p2 c2 check +permutation r1 w3 w2 r2 p2 p1 p3 c3 c1 c2 check +permutation r1 w3 w2 r2 p2 p1 p3 c3 c2 c1 check +permutation r1 w3 w2 r2 p2 p3 p1 c3 c1 c2 check +permutation r1 w3 w2 r2 p2 p3 p1 c3 c2 c1 check +permutation r1 w3 w2 r2 p2 p3 c3 p1 c1 c2 check +permutation r1 w3 w2 r2 p2 p3 c3 p1 c2 c1 check +permutation r1 w3 w2 r2 p2 p3 c3 c2 p1 c1 check +permutation r1 w3 w2 r2 p3 p1 p2 c3 c1 c2 check +permutation r1 w3 w2 r2 p3 p1 p2 c3 c2 c1 check +permutation r1 w3 w2 r2 p3 p1 c3 p2 c1 c2 check +permutation r1 w3 w2 r2 p3 p1 c3 p2 c2 c1 check +permutation r1 w3 w2 r2 p3 p1 c3 c1 p2 c2 check +permutation r1 w3 w2 r2 p3 p2 p1 c3 c1 c2 check +permutation r1 w3 w2 r2 p3 p2 p1 c3 c2 c1 check +permutation r1 w3 w2 r2 p3 p2 c3 p1 c1 c2 check +permutation r1 w3 w2 r2 p3 p2 c3 p1 c2 c1 check +permutation r1 w3 w2 r2 p3 p2 c3 c2 p1 c1 check +permutation r1 w3 w2 r2 p3 c3 p1 p2 c1 c2 check +permutation r1 w3 w2 r2 p3 c3 p1 p2 c2 c1 check +permutation r1 w3 w2 r2 p3 c3 p1 c1 p2 c2 check +permutation r1 w3 w2 r2 p3 c3 p2 p1 c1 c2 check +permutation r1 w3 w2 r2 p3 c3 p2 p1 c2 c1 check +permutation r1 w3 w2 r2 p3 c3 p2 c2 p1 c1 check +permutation r1 w3 w2 p1 r2 p2 p3 c3 c1 c2 check +permutation r1 w3 w2 p1 r2 p2 p3 c3 c2 c1 check +permutation r1 w3 w2 p1 r2 p3 p2 c3 c1 c2 check +permutation r1 w3 w2 p1 r2 p3 p2 c3 c2 c1 check +permutation r1 w3 w2 p1 r2 p3 c3 p2 c1 c2 check +permutation r1 w3 w2 p1 r2 p3 c3 p2 c2 c1 check +permutation r1 w3 w2 p1 r2 p3 c3 c1 p2 c2 check +permutation r1 w3 w2 p1 p3 r2 p2 c3 c1 c2 check +permutation r1 w3 w2 p1 p3 r2 p2 c3 c2 c1 check +permutation r1 w3 w2 p1 p3 r2 c3 p2 c1 c2 check +permutation r1 w3 w2 p1 p3 r2 c3 p2 c2 c1 check +permutation r1 w3 w2 p1 p3 r2 c3 c1 p2 c2 check +permutation r1 w3 w2 p1 p3 c3 r2 p2 c1 c2 check +permutation r1 w3 w2 p1 p3 c3 r2 p2 c2 c1 check +permutation r1 w3 w2 p1 p3 c3 r2 c1 p2 c2 check +permutation r1 w3 w2 p1 p3 c3 c1 r2 p2 c2 check +permutation r1 w3 w2 p3 r2 p1 p2 c3 c1 c2 check +permutation r1 w3 w2 p3 r2 p1 p2 c3 c2 c1 check +permutation r1 w3 w2 p3 r2 p1 c3 p2 c1 c2 check +permutation r1 w3 w2 p3 r2 p1 c3 p2 c2 c1 check +permutation r1 w3 w2 p3 r2 p1 c3 c1 p2 c2 check +permutation r1 w3 w2 p3 r2 p2 p1 c3 c1 c2 check +permutation r1 w3 w2 p3 r2 p2 p1 c3 c2 c1 check +permutation r1 w3 w2 p3 r2 p2 c3 p1 c1 c2 check +permutation r1 w3 w2 p3 r2 p2 c3 p1 c2 c1 check +permutation r1 w3 w2 p3 r2 p2 c3 c2 p1 c1 check +permutation r1 w3 w2 p3 r2 c3 p1 p2 c1 c2 check +permutation r1 w3 w2 p3 r2 c3 p1 p2 c2 c1 check +permutation r1 w3 w2 p3 r2 c3 p1 c1 p2 c2 check +permutation r1 w3 w2 p3 r2 c3 p2 p1 c1 c2 check +permutation r1 w3 w2 p3 r2 c3 p2 p1 c2 c1 check +permutation r1 w3 w2 p3 r2 c3 p2 c2 p1 c1 check +permutation r1 w3 w2 p3 p1 r2 p2 c3 c1 c2 check +permutation r1 w3 w2 p3 p1 r2 p2 c3 c2 c1 check +permutation r1 w3 w2 p3 p1 r2 c3 p2 c1 c2 check +permutation r1 w3 w2 p3 p1 r2 c3 p2 c2 c1 check +permutation r1 w3 w2 p3 p1 r2 c3 c1 p2 c2 check +permutation r1 w3 w2 p3 p1 c3 r2 p2 c1 c2 check +permutation r1 w3 w2 p3 p1 c3 r2 p2 c2 c1 check +permutation r1 w3 w2 p3 p1 c3 r2 c1 p2 c2 check +permutation r1 w3 w2 p3 p1 c3 c1 r2 p2 c2 check +permutation r1 w3 w2 p3 c3 r2 p1 p2 c1 c2 check +permutation r1 w3 w2 p3 c3 r2 p1 p2 c2 c1 check +permutation r1 w3 w2 p3 c3 r2 p1 c1 p2 c2 check +permutation r1 w3 w2 p3 c3 r2 p2 p1 c1 c2 check +permutation r1 w3 w2 p3 c3 r2 p2 p1 c2 c1 check +permutation r1 w3 w2 p3 c3 r2 p2 c2 p1 c1 check +permutation r1 w3 w2 p3 c3 p1 r2 p2 c1 c2 check +permutation r1 w3 w2 p3 c3 p1 r2 p2 c2 c1 check +permutation r1 w3 w2 p3 c3 p1 r2 c1 p2 c2 check +permutation r1 w3 w2 p3 c3 p1 c1 r2 p2 c2 check +permutation r1 w3 p1 r2 w2 p2 p3 c3 c1 c2 check +permutation r1 w3 p1 r2 w2 p2 p3 c3 c2 c1 check +permutation r1 w3 p1 r2 w2 p3 p2 c3 c1 c2 check +permutation r1 w3 p1 r2 w2 p3 p2 c3 c2 c1 check +permutation r1 w3 p1 r2 w2 p3 c3 p2 c1 c2 check +permutation r1 w3 p1 r2 w2 p3 c3 p2 c2 c1 check +permutation r1 w3 p1 r2 w2 p3 c3 c1 p2 c2 check +permutation r1 w3 p1 r2 p3 w2 p2 c3 c1 c2 check +permutation r1 w3 p1 r2 p3 w2 p2 c3 c2 c1 check +permutation r1 w3 p1 r2 p3 w2 c3 p2 c1 c2 check +permutation r1 w3 p1 r2 p3 w2 c3 p2 c2 c1 check +permutation r1 w3 p1 r2 p3 w2 c3 c1 p2 c2 check +permutation r1 w3 p1 r2 p3 c3 w2 p2 c1 c2 check +permutation r1 w3 p1 r2 p3 c3 w2 p2 c2 c1 check +permutation r1 w3 p1 r2 p3 c3 w2 c1 p2 c2 check +permutation r1 w3 p1 r2 p3 c3 c1 w2 p2 c2 check +permutation r1 w3 p1 w2 r2 p2 p3 c3 c1 c2 check +permutation r1 w3 p1 w2 r2 p2 p3 c3 c2 c1 check +permutation r1 w3 p1 w2 r2 p3 p2 c3 c1 c2 check +permutation r1 w3 p1 w2 r2 p3 p2 c3 c2 c1 check +permutation r1 w3 p1 w2 r2 p3 c3 p2 c1 c2 check +permutation r1 w3 p1 w2 r2 p3 c3 p2 c2 c1 check +permutation r1 w3 p1 w2 r2 p3 c3 c1 p2 c2 check +permutation r1 w3 p1 w2 p3 r2 p2 c3 c1 c2 check +permutation r1 w3 p1 w2 p3 r2 p2 c3 c2 c1 check +permutation r1 w3 p1 w2 p3 r2 c3 p2 c1 c2 check +permutation r1 w3 p1 w2 p3 r2 c3 p2 c2 c1 check +permutation r1 w3 p1 w2 p3 r2 c3 c1 p2 c2 check +permutation r1 w3 p1 w2 p3 c3 r2 p2 c1 c2 check +permutation r1 w3 p1 w2 p3 c3 r2 p2 c2 c1 check +permutation r1 w3 p1 w2 p3 c3 r2 c1 p2 c2 check +permutation r1 w3 p1 w2 p3 c3 c1 r2 p2 c2 check +permutation r1 w3 p1 p3 r2 w2 p2 c3 c1 c2 check +permutation r1 w3 p1 p3 r2 w2 p2 c3 c2 c1 check +permutation r1 w3 p1 p3 r2 w2 c3 p2 c1 c2 check +permutation r1 w3 p1 p3 r2 w2 c3 p2 c2 c1 check +permutation r1 w3 p1 p3 r2 w2 c3 c1 p2 c2 check +permutation r1 w3 p1 p3 r2 c3 w2 p2 c1 c2 check +permutation r1 w3 p1 p3 r2 c3 w2 p2 c2 c1 check +permutation r1 w3 p1 p3 r2 c3 w2 c1 p2 c2 check +permutation r1 w3 p1 p3 r2 c3 c1 w2 p2 c2 check +permutation r1 w3 p1 p3 w2 r2 p2 c3 c1 c2 check +permutation r1 w3 p1 p3 w2 r2 p2 c3 c2 c1 check +permutation r1 w3 p1 p3 w2 r2 c3 p2 c1 c2 check +permutation r1 w3 p1 p3 w2 r2 c3 p2 c2 c1 check +permutation r1 w3 p1 p3 w2 r2 c3 c1 p2 c2 check +permutation r1 w3 p1 p3 w2 c3 r2 p2 c1 c2 check +permutation r1 w3 p1 p3 w2 c3 r2 p2 c2 c1 check +permutation r1 w3 p1 p3 w2 c3 r2 c1 p2 c2 check +permutation r1 w3 p1 p3 w2 c3 c1 r2 p2 c2 check +permutation r1 w3 p1 p3 c3 r2 w2 p2 c1 c2 check +permutation r1 w3 p1 p3 c3 r2 w2 p2 c2 c1 check +permutation r1 w3 p1 p3 c3 r2 w2 c1 p2 c2 check +permutation r1 w3 p1 p3 c3 r2 c1 w2 p2 c2 check +permutation r1 w3 p1 p3 c3 w2 r2 p2 c1 c2 check +permutation r1 w3 p1 p3 c3 w2 r2 p2 c2 c1 check +permutation r1 w3 p1 p3 c3 w2 r2 c1 p2 c2 check +permutation r1 w3 p1 p3 c3 w2 c1 r2 p2 c2 check +permutation r1 w3 p1 p3 c3 c1 r2 w2 p2 c2 check +permutation r1 w3 p1 p3 c3 c1 w2 r2 p2 c2 check +permutation r1 w3 p3 r2 w2 p1 p2 c3 c1 c2 check +permutation r1 w3 p3 r2 w2 p1 p2 c3 c2 c1 check +permutation r1 w3 p3 r2 w2 p1 c3 p2 c1 c2 check +permutation r1 w3 p3 r2 w2 p1 c3 p2 c2 c1 check +permutation r1 w3 p3 r2 w2 p1 c3 c1 p2 c2 check +permutation r1 w3 p3 r2 w2 p2 p1 c3 c1 c2 check +permutation r1 w3 p3 r2 w2 p2 p1 c3 c2 c1 check +permutation r1 w3 p3 r2 w2 p2 c3 p1 c1 c2 check +permutation r1 w3 p3 r2 w2 p2 c3 p1 c2 c1 check +permutation r1 w3 p3 r2 w2 p2 c3 c2 p1 c1 check +permutation r1 w3 p3 r2 w2 c3 p1 p2 c1 c2 check +permutation r1 w3 p3 r2 w2 c3 p1 p2 c2 c1 check +permutation r1 w3 p3 r2 w2 c3 p1 c1 p2 c2 check +permutation r1 w3 p3 r2 w2 c3 p2 p1 c1 c2 check +permutation r1 w3 p3 r2 w2 c3 p2 p1 c2 c1 check +permutation r1 w3 p3 r2 w2 c3 p2 c2 p1 c1 check +permutation r1 w3 p3 r2 p1 w2 p2 c3 c1 c2 check +permutation r1 w3 p3 r2 p1 w2 p2 c3 c2 c1 check +permutation r1 w3 p3 r2 p1 w2 c3 p2 c1 c2 check +permutation r1 w3 p3 r2 p1 w2 c3 p2 c2 c1 check +permutation r1 w3 p3 r2 p1 w2 c3 c1 p2 c2 check +permutation r1 w3 p3 r2 p1 c3 w2 p2 c1 c2 check +permutation r1 w3 p3 r2 p1 c3 w2 p2 c2 c1 check +permutation r1 w3 p3 r2 p1 c3 w2 c1 p2 c2 check +permutation r1 w3 p3 r2 p1 c3 c1 w2 p2 c2 check +permutation r1 w3 p3 r2 c3 w2 p1 p2 c1 c2 check +permutation r1 w3 p3 r2 c3 w2 p1 p2 c2 c1 check +permutation r1 w3 p3 r2 c3 w2 p1 c1 p2 c2 check +permutation r1 w3 p3 r2 c3 w2 p2 p1 c1 c2 check +permutation r1 w3 p3 r2 c3 w2 p2 p1 c2 c1 check +permutation r1 w3 p3 r2 c3 w2 p2 c2 p1 c1 check +permutation r1 w3 p3 r2 c3 p1 w2 p2 c1 c2 check +permutation r1 w3 p3 r2 c3 p1 w2 p2 c2 c1 check +permutation r1 w3 p3 r2 c3 p1 w2 c1 p2 c2 check +permutation r1 w3 p3 r2 c3 p1 c1 w2 p2 c2 check +permutation r1 w3 p3 w2 r2 p1 p2 c3 c1 c2 check +permutation r1 w3 p3 w2 r2 p1 p2 c3 c2 c1 check +permutation r1 w3 p3 w2 r2 p1 c3 p2 c1 c2 check +permutation r1 w3 p3 w2 r2 p1 c3 p2 c2 c1 check +permutation r1 w3 p3 w2 r2 p1 c3 c1 p2 c2 check +permutation r1 w3 p3 w2 r2 p2 p1 c3 c1 c2 check +permutation r1 w3 p3 w2 r2 p2 p1 c3 c2 c1 check +permutation r1 w3 p3 w2 r2 p2 c3 p1 c1 c2 check +permutation r1 w3 p3 w2 r2 p2 c3 p1 c2 c1 check +permutation r1 w3 p3 w2 r2 p2 c3 c2 p1 c1 check +permutation r1 w3 p3 w2 r2 c3 p1 p2 c1 c2 check +permutation r1 w3 p3 w2 r2 c3 p1 p2 c2 c1 check +permutation r1 w3 p3 w2 r2 c3 p1 c1 p2 c2 check +permutation r1 w3 p3 w2 r2 c3 p2 p1 c1 c2 check +permutation r1 w3 p3 w2 r2 c3 p2 p1 c2 c1 check +permutation r1 w3 p3 w2 r2 c3 p2 c2 p1 c1 check +permutation r1 w3 p3 w2 p1 r2 p2 c3 c1 c2 check +permutation r1 w3 p3 w2 p1 r2 p2 c3 c2 c1 check +permutation r1 w3 p3 w2 p1 r2 c3 p2 c1 c2 check +permutation r1 w3 p3 w2 p1 r2 c3 p2 c2 c1 check +permutation r1 w3 p3 w2 p1 r2 c3 c1 p2 c2 check +permutation r1 w3 p3 w2 p1 c3 r2 p2 c1 c2 check +permutation r1 w3 p3 w2 p1 c3 r2 p2 c2 c1 check +permutation r1 w3 p3 w2 p1 c3 r2 c1 p2 c2 check +permutation r1 w3 p3 w2 p1 c3 c1 r2 p2 c2 check +permutation r1 w3 p3 w2 c3 r2 p1 p2 c1 c2 check +permutation r1 w3 p3 w2 c3 r2 p1 p2 c2 c1 check +permutation r1 w3 p3 w2 c3 r2 p1 c1 p2 c2 check +permutation r1 w3 p3 w2 c3 r2 p2 p1 c1 c2 check +permutation r1 w3 p3 w2 c3 r2 p2 p1 c2 c1 check +permutation r1 w3 p3 w2 c3 r2 p2 c2 p1 c1 check +permutation r1 w3 p3 w2 c3 p1 r2 p2 c1 c2 check +permutation r1 w3 p3 w2 c3 p1 r2 p2 c2 c1 check +permutation r1 w3 p3 w2 c3 p1 r2 c1 p2 c2 check +permutation r1 w3 p3 w2 c3 p1 c1 r2 p2 c2 check +permutation r1 w3 p3 p1 r2 w2 p2 c3 c1 c2 check +permutation r1 w3 p3 p1 r2 w2 p2 c3 c2 c1 check +permutation r1 w3 p3 p1 r2 w2 c3 p2 c1 c2 check +permutation r1 w3 p3 p1 r2 w2 c3 p2 c2 c1 check +permutation r1 w3 p3 p1 r2 w2 c3 c1 p2 c2 check +permutation r1 w3 p3 p1 r2 c3 w2 p2 c1 c2 check +permutation r1 w3 p3 p1 r2 c3 w2 p2 c2 c1 check +permutation r1 w3 p3 p1 r2 c3 w2 c1 p2 c2 check +permutation r1 w3 p3 p1 r2 c3 c1 w2 p2 c2 check +permutation r1 w3 p3 p1 w2 r2 p2 c3 c1 c2 check +permutation r1 w3 p3 p1 w2 r2 p2 c3 c2 c1 check +permutation r1 w3 p3 p1 w2 r2 c3 p2 c1 c2 check +permutation r1 w3 p3 p1 w2 r2 c3 p2 c2 c1 check +permutation r1 w3 p3 p1 w2 r2 c3 c1 p2 c2 check +permutation r1 w3 p3 p1 w2 c3 r2 p2 c1 c2 check +permutation r1 w3 p3 p1 w2 c3 r2 p2 c2 c1 check +permutation r1 w3 p3 p1 w2 c3 r2 c1 p2 c2 check +permutation r1 w3 p3 p1 w2 c3 c1 r2 p2 c2 check +permutation r1 w3 p3 p1 c3 r2 w2 p2 c1 c2 check +permutation r1 w3 p3 p1 c3 r2 w2 p2 c2 c1 check +permutation r1 w3 p3 p1 c3 r2 w2 c1 p2 c2 check +permutation r1 w3 p3 p1 c3 r2 c1 w2 p2 c2 check +permutation r1 w3 p3 p1 c3 w2 r2 p2 c1 c2 check +permutation r1 w3 p3 p1 c3 w2 r2 p2 c2 c1 check +permutation r1 w3 p3 p1 c3 w2 r2 c1 p2 c2 check +permutation r1 w3 p3 p1 c3 w2 c1 r2 p2 c2 check +permutation r1 w3 p3 p1 c3 c1 r2 w2 p2 c2 check +permutation r1 w3 p3 p1 c3 c1 w2 r2 p2 c2 check +permutation r1 w3 p3 c3 r2 w2 p1 p2 c1 c2 check +permutation r1 w3 p3 c3 r2 w2 p1 p2 c2 c1 check +permutation r1 w3 p3 c3 r2 w2 p1 c1 p2 c2 check +permutation r1 w3 p3 c3 r2 w2 p2 p1 c1 c2 check +permutation r1 w3 p3 c3 r2 w2 p2 p1 c2 c1 check +permutation r1 w3 p3 c3 r2 w2 p2 c2 p1 c1 check +permutation r1 w3 p3 c3 r2 p1 w2 p2 c1 c2 check +permutation r1 w3 p3 c3 r2 p1 w2 p2 c2 c1 check +permutation r1 w3 p3 c3 r2 p1 w2 c1 p2 c2 check +permutation r1 w3 p3 c3 r2 p1 c1 w2 p2 c2 check +permutation r1 w3 p3 c3 w2 r2 p1 p2 c1 c2 check +permutation r1 w3 p3 c3 w2 r2 p1 p2 c2 c1 check +permutation r1 w3 p3 c3 w2 r2 p1 c1 p2 c2 check +permutation r1 w3 p3 c3 w2 r2 p2 p1 c1 c2 check +permutation r1 w3 p3 c3 w2 r2 p2 p1 c2 c1 check +permutation r1 w3 p3 c3 w2 r2 p2 c2 p1 c1 check +permutation r1 w3 p3 c3 w2 p1 r2 p2 c1 c2 check +permutation r1 w3 p3 c3 w2 p1 r2 p2 c2 c1 check +permutation r1 w3 p3 c3 w2 p1 r2 c1 p2 c2 check +permutation r1 w3 p3 c3 w2 p1 c1 r2 p2 c2 check +permutation r1 w3 p3 c3 p1 r2 w2 p2 c1 c2 check +permutation r1 w3 p3 c3 p1 r2 w2 p2 c2 c1 check +permutation r1 w3 p3 c3 p1 r2 w2 c1 p2 c2 check +permutation r1 w3 p3 c3 p1 r2 c1 w2 p2 c2 check +permutation r1 w3 p3 c3 p1 w2 r2 p2 c1 c2 check +permutation r1 w3 p3 c3 p1 w2 r2 p2 c2 c1 check +permutation r1 w3 p3 c3 p1 w2 r2 c1 p2 c2 check +permutation r1 w3 p3 c3 p1 w2 c1 r2 p2 c2 check +permutation r1 w3 p3 c3 p1 c1 r2 w2 p2 c2 check +permutation r1 w3 p3 c3 p1 c1 w2 r2 p2 c2 check +permutation r1 p1 r2 w2 w3 p2 p3 c3 c1 c2 check +permutation r1 p1 r2 w2 w3 p2 p3 c3 c2 c1 check +permutation r1 p1 r2 w2 w3 p3 p2 c3 c1 c2 check +permutation r1 p1 r2 w2 w3 p3 p2 c3 c2 c1 check +permutation r1 p1 r2 w2 w3 p3 c3 p2 c1 c2 check +permutation r1 p1 r2 w2 w3 p3 c3 p2 c2 c1 check +permutation r1 p1 r2 w2 w3 p3 c3 c1 p2 c2 check +permutation r1 p1 r2 w2 p2 w3 p3 c3 c1 c2 check +permutation r1 p1 r2 w2 p2 w3 p3 c3 c2 c1 check +permutation r1 p1 w2 w3 r2 p2 p3 c3 c1 c2 check +permutation r1 p1 w2 w3 r2 p2 p3 c3 c2 c1 check +permutation r1 p1 w2 w3 r2 p3 p2 c3 c1 c2 check +permutation r1 p1 w2 w3 r2 p3 p2 c3 c2 c1 check +permutation r1 p1 w2 w3 r2 p3 c3 p2 c1 c2 check +permutation r1 p1 w2 w3 r2 p3 c3 p2 c2 c1 check +permutation r1 p1 w2 w3 r2 p3 c3 c1 p2 c2 check +permutation r1 p1 w2 w3 p3 r2 p2 c3 c1 c2 check +permutation r1 p1 w2 w3 p3 r2 p2 c3 c2 c1 check +permutation r1 p1 w2 w3 p3 r2 c3 p2 c1 c2 check +permutation r1 p1 w2 w3 p3 r2 c3 p2 c2 c1 check +permutation r1 p1 w2 w3 p3 r2 c3 c1 p2 c2 check +permutation r1 p1 w2 w3 p3 c3 r2 p2 c1 c2 check +permutation r1 p1 w2 w3 p3 c3 r2 p2 c2 c1 check +permutation r1 p1 w2 w3 p3 c3 r2 c1 p2 c2 check +permutation r1 p1 w2 w3 p3 c3 c1 r2 p2 c2 check +permutation r1 p1 w3 r2 w2 p2 p3 c3 c1 c2 check +permutation r1 p1 w3 r2 w2 p2 p3 c3 c2 c1 check +permutation r1 p1 w3 r2 w2 p3 p2 c3 c1 c2 check +permutation r1 p1 w3 r2 w2 p3 p2 c3 c2 c1 check +permutation r1 p1 w3 r2 w2 p3 c3 p2 c1 c2 check +permutation r1 p1 w3 r2 w2 p3 c3 p2 c2 c1 check +permutation r1 p1 w3 r2 w2 p3 c3 c1 p2 c2 check +permutation r1 p1 w3 r2 p3 w2 p2 c3 c1 c2 check +permutation r1 p1 w3 r2 p3 w2 p2 c3 c2 c1 check +permutation r1 p1 w3 r2 p3 w2 c3 p2 c1 c2 check +permutation r1 p1 w3 r2 p3 w2 c3 p2 c2 c1 check +permutation r1 p1 w3 r2 p3 w2 c3 c1 p2 c2 check +permutation r1 p1 w3 r2 p3 c3 w2 p2 c1 c2 check +permutation r1 p1 w3 r2 p3 c3 w2 p2 c2 c1 check +permutation r1 p1 w3 r2 p3 c3 w2 c1 p2 c2 check +permutation r1 p1 w3 r2 p3 c3 c1 w2 p2 c2 check +permutation r1 p1 w3 w2 r2 p2 p3 c3 c1 c2 check +permutation r1 p1 w3 w2 r2 p2 p3 c3 c2 c1 check +permutation r1 p1 w3 w2 r2 p3 p2 c3 c1 c2 check +permutation r1 p1 w3 w2 r2 p3 p2 c3 c2 c1 check +permutation r1 p1 w3 w2 r2 p3 c3 p2 c1 c2 check +permutation r1 p1 w3 w2 r2 p3 c3 p2 c2 c1 check +permutation r1 p1 w3 w2 r2 p3 c3 c1 p2 c2 check +permutation r1 p1 w3 w2 p3 r2 p2 c3 c1 c2 check +permutation r1 p1 w3 w2 p3 r2 p2 c3 c2 c1 check +permutation r1 p1 w3 w2 p3 r2 c3 p2 c1 c2 check +permutation r1 p1 w3 w2 p3 r2 c3 p2 c2 c1 check +permutation r1 p1 w3 w2 p3 r2 c3 c1 p2 c2 check +permutation r1 p1 w3 w2 p3 c3 r2 p2 c1 c2 check +permutation r1 p1 w3 w2 p3 c3 r2 p2 c2 c1 check +permutation r1 p1 w3 w2 p3 c3 r2 c1 p2 c2 check +permutation r1 p1 w3 w2 p3 c3 c1 r2 p2 c2 check +permutation r1 p1 w3 p3 r2 w2 p2 c3 c1 c2 check +permutation r1 p1 w3 p3 r2 w2 p2 c3 c2 c1 check +permutation r1 p1 w3 p3 r2 w2 c3 p2 c1 c2 check +permutation r1 p1 w3 p3 r2 w2 c3 p2 c2 c1 check +permutation r1 p1 w3 p3 r2 w2 c3 c1 p2 c2 check +permutation r1 p1 w3 p3 r2 c3 w2 p2 c1 c2 check +permutation r1 p1 w3 p3 r2 c3 w2 p2 c2 c1 check +permutation r1 p1 w3 p3 r2 c3 w2 c1 p2 c2 check +permutation r1 p1 w3 p3 r2 c3 c1 w2 p2 c2 check +permutation r1 p1 w3 p3 w2 r2 p2 c3 c1 c2 check +permutation r1 p1 w3 p3 w2 r2 p2 c3 c2 c1 check +permutation r1 p1 w3 p3 w2 r2 c3 p2 c1 c2 check +permutation r1 p1 w3 p3 w2 r2 c3 p2 c2 c1 check +permutation r1 p1 w3 p3 w2 r2 c3 c1 p2 c2 check +permutation r1 p1 w3 p3 w2 c3 r2 p2 c1 c2 check +permutation r1 p1 w3 p3 w2 c3 r2 p2 c2 c1 check +permutation r1 p1 w3 p3 w2 c3 r2 c1 p2 c2 check +permutation r1 p1 w3 p3 w2 c3 c1 r2 p2 c2 check +permutation r1 p1 w3 p3 c3 r2 w2 p2 c1 c2 check +permutation r1 p1 w3 p3 c3 r2 w2 p2 c2 c1 check +permutation r1 p1 w3 p3 c3 r2 w2 c1 p2 c2 check +permutation r1 p1 w3 p3 c3 r2 c1 w2 p2 c2 check +permutation r1 p1 w3 p3 c3 w2 r2 p2 c1 c2 check +permutation r1 p1 w3 p3 c3 w2 r2 p2 c2 c1 check +permutation r1 p1 w3 p3 c3 w2 r2 c1 p2 c2 check +permutation r1 p1 w3 p3 c3 w2 c1 r2 p2 c2 check +permutation r1 p1 w3 p3 c3 c1 r2 w2 p2 c2 check +permutation r1 p1 w3 p3 c3 c1 w2 r2 p2 c2 check +permutation w2 r1 r2 w3 p1 p2 p3 c3 c1 c2 check +permutation w2 r1 r2 w3 p1 p2 p3 c3 c2 c1 check +permutation w2 r1 r2 w3 p1 p3 p2 c3 c1 c2 check +permutation w2 r1 r2 w3 p1 p3 p2 c3 c2 c1 check +permutation w2 r1 r2 w3 p1 p3 c3 p2 c1 c2 check +permutation w2 r1 r2 w3 p1 p3 c3 p2 c2 c1 check +permutation w2 r1 r2 w3 p1 p3 c3 c1 p2 c2 check +permutation w2 r1 r2 w3 p2 p1 p3 c3 c1 c2 check +permutation w2 r1 r2 w3 p2 p1 p3 c3 c2 c1 check +permutation w2 r1 r2 w3 p2 p3 p1 c3 c1 c2 check +permutation w2 r1 r2 w3 p2 p3 p1 c3 c2 c1 check +permutation w2 r1 r2 w3 p2 p3 c3 p1 c1 c2 check +permutation w2 r1 r2 w3 p2 p3 c3 p1 c2 c1 check +permutation w2 r1 r2 w3 p2 p3 c3 c2 p1 c1 check +permutation w2 r1 r2 w3 p3 p1 p2 c3 c1 c2 check +permutation w2 r1 r2 w3 p3 p1 p2 c3 c2 c1 check +permutation w2 r1 r2 w3 p3 p1 c3 p2 c1 c2 check +permutation w2 r1 r2 w3 p3 p1 c3 p2 c2 c1 check +permutation w2 r1 r2 w3 p3 p1 c3 c1 p2 c2 check +permutation w2 r1 r2 w3 p3 p2 p1 c3 c1 c2 check +permutation w2 r1 r2 w3 p3 p2 p1 c3 c2 c1 check +permutation w2 r1 r2 w3 p3 p2 c3 p1 c1 c2 check +permutation w2 r1 r2 w3 p3 p2 c3 p1 c2 c1 check +permutation w2 r1 r2 w3 p3 p2 c3 c2 p1 c1 check +permutation w2 r1 r2 w3 p3 c3 p1 p2 c1 c2 check +permutation w2 r1 r2 w3 p3 c3 p1 p2 c2 c1 check +permutation w2 r1 r2 w3 p3 c3 p1 c1 p2 c2 check +permutation w2 r1 r2 w3 p3 c3 p2 p1 c1 c2 check +permutation w2 r1 r2 w3 p3 c3 p2 p1 c2 c1 check +permutation w2 r1 r2 w3 p3 c3 p2 c2 p1 c1 check +permutation w2 r1 r2 p1 w3 p2 p3 c3 c1 c2 check +permutation w2 r1 r2 p1 w3 p2 p3 c3 c2 c1 check +permutation w2 r1 r2 p1 w3 p3 p2 c3 c1 c2 check +permutation w2 r1 r2 p1 w3 p3 p2 c3 c2 c1 check +permutation w2 r1 r2 p1 w3 p3 c3 p2 c1 c2 check +permutation w2 r1 r2 p1 w3 p3 c3 p2 c2 c1 check +permutation w2 r1 r2 p1 w3 p3 c3 c1 p2 c2 check +permutation w2 r1 r2 p1 p2 w3 p3 c3 c1 c2 check +permutation w2 r1 r2 p1 p2 w3 p3 c3 c2 c1 check +permutation w2 r1 r2 p2 w3 p1 p3 c3 c1 c2 check +permutation w2 r1 r2 p2 w3 p1 p3 c3 c2 c1 check +permutation w2 r1 r2 p2 w3 p3 p1 c3 c1 c2 check +permutation w2 r1 r2 p2 w3 p3 p1 c3 c2 c1 check +permutation w2 r1 r2 p2 w3 p3 c3 p1 c1 c2 check +permutation w2 r1 r2 p2 w3 p3 c3 p1 c2 c1 check +permutation w2 r1 r2 p2 w3 p3 c3 c2 p1 c1 check +permutation w2 r1 r2 p2 p1 w3 p3 c3 c1 c2 check +permutation w2 r1 r2 p2 p1 w3 p3 c3 c2 c1 check +permutation w2 r1 w3 r2 p1 p2 p3 c3 c1 c2 check +permutation w2 r1 w3 r2 p1 p2 p3 c3 c2 c1 check +permutation w2 r1 w3 r2 p1 p3 p2 c3 c1 c2 check +permutation w2 r1 w3 r2 p1 p3 p2 c3 c2 c1 check +permutation w2 r1 w3 r2 p1 p3 c3 p2 c1 c2 check +permutation w2 r1 w3 r2 p1 p3 c3 p2 c2 c1 check +permutation w2 r1 w3 r2 p1 p3 c3 c1 p2 c2 check +permutation w2 r1 w3 r2 p2 p1 p3 c3 c1 c2 check +permutation w2 r1 w3 r2 p2 p1 p3 c3 c2 c1 check +permutation w2 r1 w3 r2 p2 p3 p1 c3 c1 c2 check +permutation w2 r1 w3 r2 p2 p3 p1 c3 c2 c1 check +permutation w2 r1 w3 r2 p2 p3 c3 p1 c1 c2 check +permutation w2 r1 w3 r2 p2 p3 c3 p1 c2 c1 check +permutation w2 r1 w3 r2 p2 p3 c3 c2 p1 c1 check +permutation w2 r1 w3 r2 p3 p1 p2 c3 c1 c2 check +permutation w2 r1 w3 r2 p3 p1 p2 c3 c2 c1 check +permutation w2 r1 w3 r2 p3 p1 c3 p2 c1 c2 check +permutation w2 r1 w3 r2 p3 p1 c3 p2 c2 c1 check +permutation w2 r1 w3 r2 p3 p1 c3 c1 p2 c2 check +permutation w2 r1 w3 r2 p3 p2 p1 c3 c1 c2 check +permutation w2 r1 w3 r2 p3 p2 p1 c3 c2 c1 check +permutation w2 r1 w3 r2 p3 p2 c3 p1 c1 c2 check +permutation w2 r1 w3 r2 p3 p2 c3 p1 c2 c1 check +permutation w2 r1 w3 r2 p3 p2 c3 c2 p1 c1 check +permutation w2 r1 w3 r2 p3 c3 p1 p2 c1 c2 check +permutation w2 r1 w3 r2 p3 c3 p1 p2 c2 c1 check +permutation w2 r1 w3 r2 p3 c3 p1 c1 p2 c2 check +permutation w2 r1 w3 r2 p3 c3 p2 p1 c1 c2 check +permutation w2 r1 w3 r2 p3 c3 p2 p1 c2 c1 check +permutation w2 r1 w3 r2 p3 c3 p2 c2 p1 c1 check +permutation w2 r1 w3 p1 r2 p2 p3 c3 c1 c2 check +permutation w2 r1 w3 p1 r2 p2 p3 c3 c2 c1 check +permutation w2 r1 w3 p1 r2 p3 p2 c3 c1 c2 check +permutation w2 r1 w3 p1 r2 p3 p2 c3 c2 c1 check +permutation w2 r1 w3 p1 r2 p3 c3 p2 c1 c2 check +permutation w2 r1 w3 p1 r2 p3 c3 p2 c2 c1 check +permutation w2 r1 w3 p1 r2 p3 c3 c1 p2 c2 check +permutation w2 r1 w3 p1 p3 r2 p2 c3 c1 c2 check +permutation w2 r1 w3 p1 p3 r2 p2 c3 c2 c1 check +permutation w2 r1 w3 p1 p3 r2 c3 p2 c1 c2 check +permutation w2 r1 w3 p1 p3 r2 c3 p2 c2 c1 check +permutation w2 r1 w3 p1 p3 r2 c3 c1 p2 c2 check +permutation w2 r1 w3 p1 p3 c3 r2 p2 c1 c2 check +permutation w2 r1 w3 p1 p3 c3 r2 p2 c2 c1 check +permutation w2 r1 w3 p1 p3 c3 r2 c1 p2 c2 check +permutation w2 r1 w3 p1 p3 c3 c1 r2 p2 c2 check +permutation w2 r1 w3 p3 r2 p1 p2 c3 c1 c2 check +permutation w2 r1 w3 p3 r2 p1 p2 c3 c2 c1 check +permutation w2 r1 w3 p3 r2 p1 c3 p2 c1 c2 check +permutation w2 r1 w3 p3 r2 p1 c3 p2 c2 c1 check +permutation w2 r1 w3 p3 r2 p1 c3 c1 p2 c2 check +permutation w2 r1 w3 p3 r2 p2 p1 c3 c1 c2 check +permutation w2 r1 w3 p3 r2 p2 p1 c3 c2 c1 check +permutation w2 r1 w3 p3 r2 p2 c3 p1 c1 c2 check +permutation w2 r1 w3 p3 r2 p2 c3 p1 c2 c1 check +permutation w2 r1 w3 p3 r2 p2 c3 c2 p1 c1 check +permutation w2 r1 w3 p3 r2 c3 p1 p2 c1 c2 check +permutation w2 r1 w3 p3 r2 c3 p1 p2 c2 c1 check +permutation w2 r1 w3 p3 r2 c3 p1 c1 p2 c2 check +permutation w2 r1 w3 p3 r2 c3 p2 p1 c1 c2 check +permutation w2 r1 w3 p3 r2 c3 p2 p1 c2 c1 check +permutation w2 r1 w3 p3 r2 c3 p2 c2 p1 c1 check +permutation w2 r1 w3 p3 p1 r2 p2 c3 c1 c2 check +permutation w2 r1 w3 p3 p1 r2 p2 c3 c2 c1 check +permutation w2 r1 w3 p3 p1 r2 c3 p2 c1 c2 check +permutation w2 r1 w3 p3 p1 r2 c3 p2 c2 c1 check +permutation w2 r1 w3 p3 p1 r2 c3 c1 p2 c2 check +permutation w2 r1 w3 p3 p1 c3 r2 p2 c1 c2 check +permutation w2 r1 w3 p3 p1 c3 r2 p2 c2 c1 check +permutation w2 r1 w3 p3 p1 c3 r2 c1 p2 c2 check +permutation w2 r1 w3 p3 p1 c3 c1 r2 p2 c2 check +permutation w2 r1 w3 p3 c3 r2 p1 p2 c1 c2 check +permutation w2 r1 w3 p3 c3 r2 p1 p2 c2 c1 check +permutation w2 r1 w3 p3 c3 r2 p1 c1 p2 c2 check +permutation w2 r1 w3 p3 c3 r2 p2 p1 c1 c2 check +permutation w2 r1 w3 p3 c3 r2 p2 p1 c2 c1 check +permutation w2 r1 w3 p3 c3 r2 p2 c2 p1 c1 check +permutation w2 r1 w3 p3 c3 p1 r2 p2 c1 c2 check +permutation w2 r1 w3 p3 c3 p1 r2 p2 c2 c1 check +permutation w2 r1 w3 p3 c3 p1 r2 c1 p2 c2 check +permutation w2 r1 w3 p3 c3 p1 c1 r2 p2 c2 check +permutation w2 r1 p1 r2 w3 p2 p3 c3 c1 c2 check +permutation w2 r1 p1 r2 w3 p2 p3 c3 c2 c1 check +permutation w2 r1 p1 r2 w3 p3 p2 c3 c1 c2 check +permutation w2 r1 p1 r2 w3 p3 p2 c3 c2 c1 check +permutation w2 r1 p1 r2 w3 p3 c3 p2 c1 c2 check +permutation w2 r1 p1 r2 w3 p3 c3 p2 c2 c1 check +permutation w2 r1 p1 r2 w3 p3 c3 c1 p2 c2 check +permutation w2 r1 p1 r2 p2 w3 p3 c3 c1 c2 check +permutation w2 r1 p1 r2 p2 w3 p3 c3 c2 c1 check +permutation w2 r1 p1 w3 r2 p2 p3 c3 c1 c2 check +permutation w2 r1 p1 w3 r2 p2 p3 c3 c2 c1 check +permutation w2 r1 p1 w3 r2 p3 p2 c3 c1 c2 check +permutation w2 r1 p1 w3 r2 p3 p2 c3 c2 c1 check +permutation w2 r1 p1 w3 r2 p3 c3 p2 c1 c2 check +permutation w2 r1 p1 w3 r2 p3 c3 p2 c2 c1 check +permutation w2 r1 p1 w3 r2 p3 c3 c1 p2 c2 check +permutation w2 r1 p1 w3 p3 r2 p2 c3 c1 c2 check +permutation w2 r1 p1 w3 p3 r2 p2 c3 c2 c1 check +permutation w2 r1 p1 w3 p3 r2 c3 p2 c1 c2 check +permutation w2 r1 p1 w3 p3 r2 c3 p2 c2 c1 check +permutation w2 r1 p1 w3 p3 r2 c3 c1 p2 c2 check +permutation w2 r1 p1 w3 p3 c3 r2 p2 c1 c2 check +permutation w2 r1 p1 w3 p3 c3 r2 p2 c2 c1 check +permutation w2 r1 p1 w3 p3 c3 r2 c1 p2 c2 check +permutation w2 r1 p1 w3 p3 c3 c1 r2 p2 c2 check +permutation w3 r1 r2 w2 p1 p2 p3 c3 c1 c2 check +permutation w3 r1 r2 w2 p1 p2 p3 c3 c2 c1 check +permutation w3 r1 r2 w2 p1 p3 p2 c3 c1 c2 check +permutation w3 r1 r2 w2 p1 p3 p2 c3 c2 c1 check +permutation w3 r1 r2 w2 p1 p3 c3 p2 c1 c2 check +permutation w3 r1 r2 w2 p1 p3 c3 p2 c2 c1 check +permutation w3 r1 r2 w2 p1 p3 c3 c1 p2 c2 check +permutation w3 r1 r2 w2 p2 p1 p3 c3 c1 c2 check +permutation w3 r1 r2 w2 p2 p1 p3 c3 c2 c1 check +permutation w3 r1 r2 w2 p2 p3 p1 c3 c1 c2 check +permutation w3 r1 r2 w2 p2 p3 p1 c3 c2 c1 check +permutation w3 r1 r2 w2 p2 p3 c3 p1 c1 c2 check +permutation w3 r1 r2 w2 p2 p3 c3 p1 c2 c1 check +permutation w3 r1 r2 w2 p2 p3 c3 c2 p1 c1 check +permutation w3 r1 r2 w2 p3 p1 p2 c3 c1 c2 check +permutation w3 r1 r2 w2 p3 p1 p2 c3 c2 c1 check +permutation w3 r1 r2 w2 p3 p1 c3 p2 c1 c2 check +permutation w3 r1 r2 w2 p3 p1 c3 p2 c2 c1 check +permutation w3 r1 r2 w2 p3 p1 c3 c1 p2 c2 check +permutation w3 r1 r2 w2 p3 p2 p1 c3 c1 c2 check +permutation w3 r1 r2 w2 p3 p2 p1 c3 c2 c1 check +permutation w3 r1 r2 w2 p3 p2 c3 p1 c1 c2 check +permutation w3 r1 r2 w2 p3 p2 c3 p1 c2 c1 check +permutation w3 r1 r2 w2 p3 p2 c3 c2 p1 c1 check +permutation w3 r1 r2 w2 p3 c3 p1 p2 c1 c2 check +permutation w3 r1 r2 w2 p3 c3 p1 p2 c2 c1 check +permutation w3 r1 r2 w2 p3 c3 p1 c1 p2 c2 check +permutation w3 r1 r2 w2 p3 c3 p2 p1 c1 c2 check +permutation w3 r1 r2 w2 p3 c3 p2 p1 c2 c1 check +permutation w3 r1 r2 w2 p3 c3 p2 c2 p1 c1 check +permutation w3 r1 r2 p1 w2 p2 p3 c3 c1 c2 check +permutation w3 r1 r2 p1 w2 p2 p3 c3 c2 c1 check +permutation w3 r1 r2 p1 w2 p3 p2 c3 c1 c2 check +permutation w3 r1 r2 p1 w2 p3 p2 c3 c2 c1 check +permutation w3 r1 r2 p1 w2 p3 c3 p2 c1 c2 check +permutation w3 r1 r2 p1 w2 p3 c3 p2 c2 c1 check +permutation w3 r1 r2 p1 w2 p3 c3 c1 p2 c2 check +permutation w3 r1 r2 p1 p3 w2 p2 c3 c1 c2 check +permutation w3 r1 r2 p1 p3 w2 p2 c3 c2 c1 check +permutation w3 r1 r2 p1 p3 w2 c3 p2 c1 c2 check +permutation w3 r1 r2 p1 p3 w2 c3 p2 c2 c1 check +permutation w3 r1 r2 p1 p3 w2 c3 c1 p2 c2 check +permutation w3 r1 r2 p1 p3 c3 w2 p2 c1 c2 check +permutation w3 r1 r2 p1 p3 c3 w2 p2 c2 c1 check +permutation w3 r1 r2 p1 p3 c3 w2 c1 p2 c2 check +permutation w3 r1 r2 p1 p3 c3 c1 w2 p2 c2 check +permutation w3 r1 r2 p3 w2 p1 p2 c3 c1 c2 check +permutation w3 r1 r2 p3 w2 p1 p2 c3 c2 c1 check +permutation w3 r1 r2 p3 w2 p1 c3 p2 c1 c2 check +permutation w3 r1 r2 p3 w2 p1 c3 p2 c2 c1 check +permutation w3 r1 r2 p3 w2 p1 c3 c1 p2 c2 check +permutation w3 r1 r2 p3 w2 p2 p1 c3 c1 c2 check +permutation w3 r1 r2 p3 w2 p2 p1 c3 c2 c1 check +permutation w3 r1 r2 p3 w2 p2 c3 p1 c1 c2 check +permutation w3 r1 r2 p3 w2 p2 c3 p1 c2 c1 check +permutation w3 r1 r2 p3 w2 p2 c3 c2 p1 c1 check +permutation w3 r1 r2 p3 w2 c3 p1 p2 c1 c2 check +permutation w3 r1 r2 p3 w2 c3 p1 p2 c2 c1 check +permutation w3 r1 r2 p3 w2 c3 p1 c1 p2 c2 check +permutation w3 r1 r2 p3 w2 c3 p2 p1 c1 c2 check +permutation w3 r1 r2 p3 w2 c3 p2 p1 c2 c1 check +permutation w3 r1 r2 p3 w2 c3 p2 c2 p1 c1 check +permutation w3 r1 r2 p3 p1 w2 p2 c3 c1 c2 check +permutation w3 r1 r2 p3 p1 w2 p2 c3 c2 c1 check +permutation w3 r1 r2 p3 p1 w2 c3 p2 c1 c2 check +permutation w3 r1 r2 p3 p1 w2 c3 p2 c2 c1 check +permutation w3 r1 r2 p3 p1 w2 c3 c1 p2 c2 check +permutation w3 r1 r2 p3 p1 c3 w2 p2 c1 c2 check +permutation w3 r1 r2 p3 p1 c3 w2 p2 c2 c1 check +permutation w3 r1 r2 p3 p1 c3 w2 c1 p2 c2 check +permutation w3 r1 r2 p3 p1 c3 c1 w2 p2 c2 check +permutation w3 r1 r2 p3 c3 w2 p1 p2 c1 c2 check +permutation w3 r1 r2 p3 c3 w2 p1 p2 c2 c1 check +permutation w3 r1 r2 p3 c3 w2 p1 c1 p2 c2 check +permutation w3 r1 r2 p3 c3 w2 p2 p1 c1 c2 check +permutation w3 r1 r2 p3 c3 w2 p2 p1 c2 c1 check +permutation w3 r1 r2 p3 c3 w2 p2 c2 p1 c1 check +permutation w3 r1 r2 p3 c3 p1 w2 p2 c1 c2 check +permutation w3 r1 r2 p3 c3 p1 w2 p2 c2 c1 check +permutation w3 r1 r2 p3 c3 p1 w2 c1 p2 c2 check +permutation w3 r1 r2 p3 c3 p1 c1 w2 p2 c2 check +permutation w3 r1 w2 r2 p1 p2 p3 c3 c1 c2 check +permutation w3 r1 w2 r2 p1 p2 p3 c3 c2 c1 check +permutation w3 r1 w2 r2 p1 p3 p2 c3 c1 c2 check +permutation w3 r1 w2 r2 p1 p3 p2 c3 c2 c1 check +permutation w3 r1 w2 r2 p1 p3 c3 p2 c1 c2 check +permutation w3 r1 w2 r2 p1 p3 c3 p2 c2 c1 check +permutation w3 r1 w2 r2 p1 p3 c3 c1 p2 c2 check +permutation w3 r1 w2 r2 p2 p1 p3 c3 c1 c2 check +permutation w3 r1 w2 r2 p2 p1 p3 c3 c2 c1 check +permutation w3 r1 w2 r2 p2 p3 p1 c3 c1 c2 check +permutation w3 r1 w2 r2 p2 p3 p1 c3 c2 c1 check +permutation w3 r1 w2 r2 p2 p3 c3 p1 c1 c2 check +permutation w3 r1 w2 r2 p2 p3 c3 p1 c2 c1 check +permutation w3 r1 w2 r2 p2 p3 c3 c2 p1 c1 check +permutation w3 r1 w2 r2 p3 p1 p2 c3 c1 c2 check +permutation w3 r1 w2 r2 p3 p1 p2 c3 c2 c1 check +permutation w3 r1 w2 r2 p3 p1 c3 p2 c1 c2 check +permutation w3 r1 w2 r2 p3 p1 c3 p2 c2 c1 check +permutation w3 r1 w2 r2 p3 p1 c3 c1 p2 c2 check +permutation w3 r1 w2 r2 p3 p2 p1 c3 c1 c2 check +permutation w3 r1 w2 r2 p3 p2 p1 c3 c2 c1 check +permutation w3 r1 w2 r2 p3 p2 c3 p1 c1 c2 check +permutation w3 r1 w2 r2 p3 p2 c3 p1 c2 c1 check +permutation w3 r1 w2 r2 p3 p2 c3 c2 p1 c1 check +permutation w3 r1 w2 r2 p3 c3 p1 p2 c1 c2 check +permutation w3 r1 w2 r2 p3 c3 p1 p2 c2 c1 check +permutation w3 r1 w2 r2 p3 c3 p1 c1 p2 c2 check +permutation w3 r1 w2 r2 p3 c3 p2 p1 c1 c2 check +permutation w3 r1 w2 r2 p3 c3 p2 p1 c2 c1 check +permutation w3 r1 w2 r2 p3 c3 p2 c2 p1 c1 check +permutation w3 r1 w2 p1 r2 p2 p3 c3 c1 c2 check +permutation w3 r1 w2 p1 r2 p2 p3 c3 c2 c1 check +permutation w3 r1 w2 p1 r2 p3 p2 c3 c1 c2 check +permutation w3 r1 w2 p1 r2 p3 p2 c3 c2 c1 check +permutation w3 r1 w2 p1 r2 p3 c3 p2 c1 c2 check +permutation w3 r1 w2 p1 r2 p3 c3 p2 c2 c1 check +permutation w3 r1 w2 p1 r2 p3 c3 c1 p2 c2 check +permutation w3 r1 w2 p1 p3 r2 p2 c3 c1 c2 check +permutation w3 r1 w2 p1 p3 r2 p2 c3 c2 c1 check +permutation w3 r1 w2 p1 p3 r2 c3 p2 c1 c2 check +permutation w3 r1 w2 p1 p3 r2 c3 p2 c2 c1 check +permutation w3 r1 w2 p1 p3 r2 c3 c1 p2 c2 check +permutation w3 r1 w2 p1 p3 c3 r2 p2 c1 c2 check +permutation w3 r1 w2 p1 p3 c3 r2 p2 c2 c1 check +permutation w3 r1 w2 p1 p3 c3 r2 c1 p2 c2 check +permutation w3 r1 w2 p1 p3 c3 c1 r2 p2 c2 check +permutation w3 r1 w2 p3 r2 p1 p2 c3 c1 c2 check +permutation w3 r1 w2 p3 r2 p1 p2 c3 c2 c1 check +permutation w3 r1 w2 p3 r2 p1 c3 p2 c1 c2 check +permutation w3 r1 w2 p3 r2 p1 c3 p2 c2 c1 check +permutation w3 r1 w2 p3 r2 p1 c3 c1 p2 c2 check +permutation w3 r1 w2 p3 r2 p2 p1 c3 c1 c2 check +permutation w3 r1 w2 p3 r2 p2 p1 c3 c2 c1 check +permutation w3 r1 w2 p3 r2 p2 c3 p1 c1 c2 check +permutation w3 r1 w2 p3 r2 p2 c3 p1 c2 c1 check +permutation w3 r1 w2 p3 r2 p2 c3 c2 p1 c1 check +permutation w3 r1 w2 p3 r2 c3 p1 p2 c1 c2 check +permutation w3 r1 w2 p3 r2 c3 p1 p2 c2 c1 check +permutation w3 r1 w2 p3 r2 c3 p1 c1 p2 c2 check +permutation w3 r1 w2 p3 r2 c3 p2 p1 c1 c2 check +permutation w3 r1 w2 p3 r2 c3 p2 p1 c2 c1 check +permutation w3 r1 w2 p3 r2 c3 p2 c2 p1 c1 check +permutation w3 r1 w2 p3 p1 r2 p2 c3 c1 c2 check +permutation w3 r1 w2 p3 p1 r2 p2 c3 c2 c1 check +permutation w3 r1 w2 p3 p1 r2 c3 p2 c1 c2 check +permutation w3 r1 w2 p3 p1 r2 c3 p2 c2 c1 check +permutation w3 r1 w2 p3 p1 r2 c3 c1 p2 c2 check +permutation w3 r1 w2 p3 p1 c3 r2 p2 c1 c2 check +permutation w3 r1 w2 p3 p1 c3 r2 p2 c2 c1 check +permutation w3 r1 w2 p3 p1 c3 r2 c1 p2 c2 check +permutation w3 r1 w2 p3 p1 c3 c1 r2 p2 c2 check +permutation w3 r1 w2 p3 c3 r2 p1 p2 c1 c2 check +permutation w3 r1 w2 p3 c3 r2 p1 p2 c2 c1 check +permutation w3 r1 w2 p3 c3 r2 p1 c1 p2 c2 check +permutation w3 r1 w2 p3 c3 r2 p2 p1 c1 c2 check +permutation w3 r1 w2 p3 c3 r2 p2 p1 c2 c1 check +permutation w3 r1 w2 p3 c3 r2 p2 c2 p1 c1 check +permutation w3 r1 w2 p3 c3 p1 r2 p2 c1 c2 check +permutation w3 r1 w2 p3 c3 p1 r2 p2 c2 c1 check +permutation w3 r1 w2 p3 c3 p1 r2 c1 p2 c2 check +permutation w3 r1 w2 p3 c3 p1 c1 r2 p2 c2 check +permutation w3 r1 p1 r2 w2 p2 p3 c3 c1 c2 check +permutation w3 r1 p1 r2 w2 p2 p3 c3 c2 c1 check +permutation w3 r1 p1 r2 w2 p3 p2 c3 c1 c2 check +permutation w3 r1 p1 r2 w2 p3 p2 c3 c2 c1 check +permutation w3 r1 p1 r2 w2 p3 c3 p2 c1 c2 check +permutation w3 r1 p1 r2 w2 p3 c3 p2 c2 c1 check +permutation w3 r1 p1 r2 w2 p3 c3 c1 p2 c2 check +permutation w3 r1 p1 r2 p3 w2 p2 c3 c1 c2 check +permutation w3 r1 p1 r2 p3 w2 p2 c3 c2 c1 check +permutation w3 r1 p1 r2 p3 w2 c3 p2 c1 c2 check +permutation w3 r1 p1 r2 p3 w2 c3 p2 c2 c1 check +permutation w3 r1 p1 r2 p3 w2 c3 c1 p2 c2 check +permutation w3 r1 p1 r2 p3 c3 w2 p2 c1 c2 check +permutation w3 r1 p1 r2 p3 c3 w2 p2 c2 c1 check +permutation w3 r1 p1 r2 p3 c3 w2 c1 p2 c2 check +permutation w3 r1 p1 r2 p3 c3 c1 w2 p2 c2 check +permutation w3 r1 p1 w2 r2 p2 p3 c3 c1 c2 check +permutation w3 r1 p1 w2 r2 p2 p3 c3 c2 c1 check +permutation w3 r1 p1 w2 r2 p3 p2 c3 c1 c2 check +permutation w3 r1 p1 w2 r2 p3 p2 c3 c2 c1 check +permutation w3 r1 p1 w2 r2 p3 c3 p2 c1 c2 check +permutation w3 r1 p1 w2 r2 p3 c3 p2 c2 c1 check +permutation w3 r1 p1 w2 r2 p3 c3 c1 p2 c2 check +permutation w3 r1 p1 w2 p3 r2 p2 c3 c1 c2 check +permutation w3 r1 p1 w2 p3 r2 p2 c3 c2 c1 check +permutation w3 r1 p1 w2 p3 r2 c3 p2 c1 c2 check +permutation w3 r1 p1 w2 p3 r2 c3 p2 c2 c1 check +permutation w3 r1 p1 w2 p3 r2 c3 c1 p2 c2 check +permutation w3 r1 p1 w2 p3 c3 r2 p2 c1 c2 check +permutation w3 r1 p1 w2 p3 c3 r2 p2 c2 c1 check +permutation w3 r1 p1 w2 p3 c3 r2 c1 p2 c2 check +permutation w3 r1 p1 w2 p3 c3 c1 r2 p2 c2 check +permutation w3 r1 p1 p3 r2 w2 p2 c3 c1 c2 check +permutation w3 r1 p1 p3 r2 w2 p2 c3 c2 c1 check +permutation w3 r1 p1 p3 r2 w2 c3 p2 c1 c2 check +permutation w3 r1 p1 p3 r2 w2 c3 p2 c2 c1 check +permutation w3 r1 p1 p3 r2 w2 c3 c1 p2 c2 check +permutation w3 r1 p1 p3 r2 c3 w2 p2 c1 c2 check +permutation w3 r1 p1 p3 r2 c3 w2 p2 c2 c1 check +permutation w3 r1 p1 p3 r2 c3 w2 c1 p2 c2 check +permutation w3 r1 p1 p3 r2 c3 c1 w2 p2 c2 check +permutation w3 r1 p1 p3 w2 r2 p2 c3 c1 c2 check +permutation w3 r1 p1 p3 w2 r2 p2 c3 c2 c1 check +permutation w3 r1 p1 p3 w2 r2 c3 p2 c1 c2 check +permutation w3 r1 p1 p3 w2 r2 c3 p2 c2 c1 check +permutation w3 r1 p1 p3 w2 r2 c3 c1 p2 c2 check +permutation w3 r1 p1 p3 w2 c3 r2 p2 c1 c2 check +permutation w3 r1 p1 p3 w2 c3 r2 p2 c2 c1 check +permutation w3 r1 p1 p3 w2 c3 r2 c1 p2 c2 check +permutation w3 r1 p1 p3 w2 c3 c1 r2 p2 c2 check +permutation w3 r1 p1 p3 c3 r2 w2 p2 c1 c2 check +permutation w3 r1 p1 p3 c3 r2 w2 p2 c2 c1 check +permutation w3 r1 p1 p3 c3 r2 w2 c1 p2 c2 check +permutation w3 r1 p1 p3 c3 r2 c1 w2 p2 c2 check +permutation w3 r1 p1 p3 c3 w2 r2 p2 c1 c2 check +permutation w3 r1 p1 p3 c3 w2 r2 p2 c2 c1 check +permutation w3 r1 p1 p3 c3 w2 r2 c1 p2 c2 check +permutation w3 r1 p1 p3 c3 w2 c1 r2 p2 c2 check +permutation w3 r1 p1 p3 c3 c1 r2 w2 p2 c2 check +permutation w3 r1 p1 p3 c3 c1 w2 r2 p2 c2 check +permutation w3 r1 p3 r2 w2 p1 p2 c3 c1 c2 check +permutation w3 r1 p3 r2 w2 p1 p2 c3 c2 c1 check +permutation w3 r1 p3 r2 w2 p1 c3 p2 c1 c2 check +permutation w3 r1 p3 r2 w2 p1 c3 p2 c2 c1 check +permutation w3 r1 p3 r2 w2 p1 c3 c1 p2 c2 check +permutation w3 r1 p3 r2 w2 p2 p1 c3 c1 c2 check +permutation w3 r1 p3 r2 w2 p2 p1 c3 c2 c1 check +permutation w3 r1 p3 r2 w2 p2 c3 p1 c1 c2 check +permutation w3 r1 p3 r2 w2 p2 c3 p1 c2 c1 check +permutation w3 r1 p3 r2 w2 p2 c3 c2 p1 c1 check +permutation w3 r1 p3 r2 w2 c3 p1 p2 c1 c2 check +permutation w3 r1 p3 r2 w2 c3 p1 p2 c2 c1 check +permutation w3 r1 p3 r2 w2 c3 p1 c1 p2 c2 check +permutation w3 r1 p3 r2 w2 c3 p2 p1 c1 c2 check +permutation w3 r1 p3 r2 w2 c3 p2 p1 c2 c1 check +permutation w3 r1 p3 r2 w2 c3 p2 c2 p1 c1 check +permutation w3 r1 p3 r2 p1 w2 p2 c3 c1 c2 check +permutation w3 r1 p3 r2 p1 w2 p2 c3 c2 c1 check +permutation w3 r1 p3 r2 p1 w2 c3 p2 c1 c2 check +permutation w3 r1 p3 r2 p1 w2 c3 p2 c2 c1 check +permutation w3 r1 p3 r2 p1 w2 c3 c1 p2 c2 check +permutation w3 r1 p3 r2 p1 c3 w2 p2 c1 c2 check +permutation w3 r1 p3 r2 p1 c3 w2 p2 c2 c1 check +permutation w3 r1 p3 r2 p1 c3 w2 c1 p2 c2 check +permutation w3 r1 p3 r2 p1 c3 c1 w2 p2 c2 check +permutation w3 r1 p3 r2 c3 w2 p1 p2 c1 c2 check +permutation w3 r1 p3 r2 c3 w2 p1 p2 c2 c1 check +permutation w3 r1 p3 r2 c3 w2 p1 c1 p2 c2 check +permutation w3 r1 p3 r2 c3 w2 p2 p1 c1 c2 check +permutation w3 r1 p3 r2 c3 w2 p2 p1 c2 c1 check +permutation w3 r1 p3 r2 c3 w2 p2 c2 p1 c1 check +permutation w3 r1 p3 r2 c3 p1 w2 p2 c1 c2 check +permutation w3 r1 p3 r2 c3 p1 w2 p2 c2 c1 check +permutation w3 r1 p3 r2 c3 p1 w2 c1 p2 c2 check +permutation w3 r1 p3 r2 c3 p1 c1 w2 p2 c2 check +permutation w3 r1 p3 w2 r2 p1 p2 c3 c1 c2 check +permutation w3 r1 p3 w2 r2 p1 p2 c3 c2 c1 check +permutation w3 r1 p3 w2 r2 p1 c3 p2 c1 c2 check +permutation w3 r1 p3 w2 r2 p1 c3 p2 c2 c1 check +permutation w3 r1 p3 w2 r2 p1 c3 c1 p2 c2 check +permutation w3 r1 p3 w2 r2 p2 p1 c3 c1 c2 check +permutation w3 r1 p3 w2 r2 p2 p1 c3 c2 c1 check +permutation w3 r1 p3 w2 r2 p2 c3 p1 c1 c2 check +permutation w3 r1 p3 w2 r2 p2 c3 p1 c2 c1 check +permutation w3 r1 p3 w2 r2 p2 c3 c2 p1 c1 check +permutation w3 r1 p3 w2 r2 c3 p1 p2 c1 c2 check +permutation w3 r1 p3 w2 r2 c3 p1 p2 c2 c1 check +permutation w3 r1 p3 w2 r2 c3 p1 c1 p2 c2 check +permutation w3 r1 p3 w2 r2 c3 p2 p1 c1 c2 check +permutation w3 r1 p3 w2 r2 c3 p2 p1 c2 c1 check +permutation w3 r1 p3 w2 r2 c3 p2 c2 p1 c1 check +permutation w3 r1 p3 w2 p1 r2 p2 c3 c1 c2 check +permutation w3 r1 p3 w2 p1 r2 p2 c3 c2 c1 check +permutation w3 r1 p3 w2 p1 r2 c3 p2 c1 c2 check +permutation w3 r1 p3 w2 p1 r2 c3 p2 c2 c1 check +permutation w3 r1 p3 w2 p1 r2 c3 c1 p2 c2 check +permutation w3 r1 p3 w2 p1 c3 r2 p2 c1 c2 check +permutation w3 r1 p3 w2 p1 c3 r2 p2 c2 c1 check +permutation w3 r1 p3 w2 p1 c3 r2 c1 p2 c2 check +permutation w3 r1 p3 w2 p1 c3 c1 r2 p2 c2 check +permutation w3 r1 p3 w2 c3 r2 p1 p2 c1 c2 check +permutation w3 r1 p3 w2 c3 r2 p1 p2 c2 c1 check +permutation w3 r1 p3 w2 c3 r2 p1 c1 p2 c2 check +permutation w3 r1 p3 w2 c3 r2 p2 p1 c1 c2 check +permutation w3 r1 p3 w2 c3 r2 p2 p1 c2 c1 check +permutation w3 r1 p3 w2 c3 r2 p2 c2 p1 c1 check +permutation w3 r1 p3 w2 c3 p1 r2 p2 c1 c2 check +permutation w3 r1 p3 w2 c3 p1 r2 p2 c2 c1 check +permutation w3 r1 p3 w2 c3 p1 r2 c1 p2 c2 check +permutation w3 r1 p3 w2 c3 p1 c1 r2 p2 c2 check +permutation w3 r1 p3 p1 r2 w2 p2 c3 c1 c2 check +permutation w3 r1 p3 p1 r2 w2 p2 c3 c2 c1 check +permutation w3 r1 p3 p1 r2 w2 c3 p2 c1 c2 check +permutation w3 r1 p3 p1 r2 w2 c3 p2 c2 c1 check +permutation w3 r1 p3 p1 r2 w2 c3 c1 p2 c2 check +permutation w3 r1 p3 p1 r2 c3 w2 p2 c1 c2 check +permutation w3 r1 p3 p1 r2 c3 w2 p2 c2 c1 check +permutation w3 r1 p3 p1 r2 c3 w2 c1 p2 c2 check +permutation w3 r1 p3 p1 r2 c3 c1 w2 p2 c2 check +permutation w3 r1 p3 p1 w2 r2 p2 c3 c1 c2 check +permutation w3 r1 p3 p1 w2 r2 p2 c3 c2 c1 check +permutation w3 r1 p3 p1 w2 r2 c3 p2 c1 c2 check +permutation w3 r1 p3 p1 w2 r2 c3 p2 c2 c1 check +permutation w3 r1 p3 p1 w2 r2 c3 c1 p2 c2 check +permutation w3 r1 p3 p1 w2 c3 r2 p2 c1 c2 check +permutation w3 r1 p3 p1 w2 c3 r2 p2 c2 c1 check +permutation w3 r1 p3 p1 w2 c3 r2 c1 p2 c2 check +permutation w3 r1 p3 p1 w2 c3 c1 r2 p2 c2 check +permutation w3 r1 p3 p1 c3 r2 w2 p2 c1 c2 check +permutation w3 r1 p3 p1 c3 r2 w2 p2 c2 c1 check +permutation w3 r1 p3 p1 c3 r2 w2 c1 p2 c2 check +permutation w3 r1 p3 p1 c3 r2 c1 w2 p2 c2 check +permutation w3 r1 p3 p1 c3 w2 r2 p2 c1 c2 check +permutation w3 r1 p3 p1 c3 w2 r2 p2 c2 c1 check +permutation w3 r1 p3 p1 c3 w2 r2 c1 p2 c2 check +permutation w3 r1 p3 p1 c3 w2 c1 r2 p2 c2 check +permutation w3 r1 p3 p1 c3 c1 r2 w2 p2 c2 check +permutation w3 r1 p3 p1 c3 c1 w2 r2 p2 c2 check +permutation w3 r1 p3 c3 r2 w2 p1 p2 c1 c2 check +permutation w3 r1 p3 c3 r2 w2 p1 p2 c2 c1 check +permutation w3 r1 p3 c3 r2 w2 p1 c1 p2 c2 check +permutation w3 r1 p3 c3 r2 w2 p2 p1 c1 c2 check +permutation w3 r1 p3 c3 r2 w2 p2 p1 c2 c1 check +permutation w3 r1 p3 c3 r2 w2 p2 c2 p1 c1 check +permutation w3 r1 p3 c3 r2 p1 w2 p2 c1 c2 check +permutation w3 r1 p3 c3 r2 p1 w2 p2 c2 c1 check +permutation w3 r1 p3 c3 r2 p1 w2 c1 p2 c2 check +permutation w3 r1 p3 c3 r2 p1 c1 w2 p2 c2 check +permutation w3 r1 p3 c3 w2 r2 p1 p2 c1 c2 check +permutation w3 r1 p3 c3 w2 r2 p1 p2 c2 c1 check +permutation w3 r1 p3 c3 w2 r2 p1 c1 p2 c2 check +permutation w3 r1 p3 c3 w2 r2 p2 p1 c1 c2 check +permutation w3 r1 p3 c3 w2 r2 p2 p1 c2 c1 check +permutation w3 r1 p3 c3 w2 r2 p2 c2 p1 c1 check +permutation w3 r1 p3 c3 w2 p1 r2 p2 c1 c2 check +permutation w3 r1 p3 c3 w2 p1 r2 p2 c2 c1 check +permutation w3 r1 p3 c3 w2 p1 r2 c1 p2 c2 check +permutation w3 r1 p3 c3 w2 p1 c1 r2 p2 c2 check +permutation w3 r1 p3 c3 p1 r2 w2 p2 c1 c2 check +permutation w3 r1 p3 c3 p1 r2 w2 p2 c2 c1 check +permutation w3 r1 p3 c3 p1 r2 w2 c1 p2 c2 check +permutation w3 r1 p3 c3 p1 r2 c1 w2 p2 c2 check +permutation w3 r1 p3 c3 p1 w2 r2 p2 c1 c2 check +permutation w3 r1 p3 c3 p1 w2 r2 p2 c2 c1 check +permutation w3 r1 p3 c3 p1 w2 r2 c1 p2 c2 check +permutation w3 r1 p3 c3 p1 w2 c1 r2 p2 c2 check +permutation w3 r1 p3 c3 p1 c1 r2 w2 p2 c2 check +permutation w3 r1 p3 c3 p1 c1 w2 r2 p2 c2 check +permutation w3 r2 r1 w2 p1 p2 p3 c3 c1 c2 check +permutation w3 r2 r1 w2 p1 p2 p3 c3 c2 c1 check +permutation w3 r2 r1 w2 p1 p3 p2 c3 c1 c2 check +permutation w3 r2 r1 w2 p1 p3 p2 c3 c2 c1 check +permutation w3 r2 r1 w2 p1 p3 c3 p2 c1 c2 check +permutation w3 r2 r1 w2 p1 p3 c3 p2 c2 c1 check +permutation w3 r2 r1 w2 p1 p3 c3 c1 p2 c2 check +permutation w3 r2 r1 w2 p2 p1 p3 c3 c1 c2 check +permutation w3 r2 r1 w2 p2 p1 p3 c3 c2 c1 check +permutation w3 r2 r1 w2 p2 p3 p1 c3 c1 c2 check +permutation w3 r2 r1 w2 p2 p3 p1 c3 c2 c1 check +permutation w3 r2 r1 w2 p2 p3 c3 p1 c1 c2 check +permutation w3 r2 r1 w2 p2 p3 c3 p1 c2 c1 check +permutation w3 r2 r1 w2 p2 p3 c3 c2 p1 c1 check +permutation w3 r2 r1 w2 p3 p1 p2 c3 c1 c2 check +permutation w3 r2 r1 w2 p3 p1 p2 c3 c2 c1 check +permutation w3 r2 r1 w2 p3 p1 c3 p2 c1 c2 check +permutation w3 r2 r1 w2 p3 p1 c3 p2 c2 c1 check +permutation w3 r2 r1 w2 p3 p1 c3 c1 p2 c2 check +permutation w3 r2 r1 w2 p3 p2 p1 c3 c1 c2 check +permutation w3 r2 r1 w2 p3 p2 p1 c3 c2 c1 check +permutation w3 r2 r1 w2 p3 p2 c3 p1 c1 c2 check +permutation w3 r2 r1 w2 p3 p2 c3 p1 c2 c1 check +permutation w3 r2 r1 w2 p3 p2 c3 c2 p1 c1 check +permutation w3 r2 r1 w2 p3 c3 p1 p2 c1 c2 check +permutation w3 r2 r1 w2 p3 c3 p1 p2 c2 c1 check +permutation w3 r2 r1 w2 p3 c3 p1 c1 p2 c2 check +permutation w3 r2 r1 w2 p3 c3 p2 p1 c1 c2 check +permutation w3 r2 r1 w2 p3 c3 p2 p1 c2 c1 check +permutation w3 r2 r1 w2 p3 c3 p2 c2 p1 c1 check +permutation w3 r2 r1 p1 w2 p2 p3 c3 c1 c2 check +permutation w3 r2 r1 p1 w2 p2 p3 c3 c2 c1 check +permutation w3 r2 r1 p1 w2 p3 p2 c3 c1 c2 check +permutation w3 r2 r1 p1 w2 p3 p2 c3 c2 c1 check +permutation w3 r2 r1 p1 w2 p3 c3 p2 c1 c2 check +permutation w3 r2 r1 p1 w2 p3 c3 p2 c2 c1 check +permutation w3 r2 r1 p1 w2 p3 c3 c1 p2 c2 check +permutation w3 r2 r1 p1 p3 w2 p2 c3 c1 c2 check +permutation w3 r2 r1 p1 p3 w2 p2 c3 c2 c1 check +permutation w3 r2 r1 p1 p3 w2 c3 p2 c1 c2 check +permutation w3 r2 r1 p1 p3 w2 c3 p2 c2 c1 check +permutation w3 r2 r1 p1 p3 w2 c3 c1 p2 c2 check +permutation w3 r2 r1 p1 p3 c3 w2 p2 c1 c2 check +permutation w3 r2 r1 p1 p3 c3 w2 p2 c2 c1 check +permutation w3 r2 r1 p1 p3 c3 w2 c1 p2 c2 check +permutation w3 r2 r1 p1 p3 c3 c1 w2 p2 c2 check +permutation w3 r2 r1 p3 w2 p1 p2 c3 c1 c2 check +permutation w3 r2 r1 p3 w2 p1 p2 c3 c2 c1 check +permutation w3 r2 r1 p3 w2 p1 c3 p2 c1 c2 check +permutation w3 r2 r1 p3 w2 p1 c3 p2 c2 c1 check +permutation w3 r2 r1 p3 w2 p1 c3 c1 p2 c2 check +permutation w3 r2 r1 p3 w2 p2 p1 c3 c1 c2 check +permutation w3 r2 r1 p3 w2 p2 p1 c3 c2 c1 check +permutation w3 r2 r1 p3 w2 p2 c3 p1 c1 c2 check +permutation w3 r2 r1 p3 w2 p2 c3 p1 c2 c1 check +permutation w3 r2 r1 p3 w2 p2 c3 c2 p1 c1 check +permutation w3 r2 r1 p3 w2 c3 p1 p2 c1 c2 check +permutation w3 r2 r1 p3 w2 c3 p1 p2 c2 c1 check +permutation w3 r2 r1 p3 w2 c3 p1 c1 p2 c2 check +permutation w3 r2 r1 p3 w2 c3 p2 p1 c1 c2 check +permutation w3 r2 r1 p3 w2 c3 p2 p1 c2 c1 check +permutation w3 r2 r1 p3 w2 c3 p2 c2 p1 c1 check +permutation w3 r2 r1 p3 p1 w2 p2 c3 c1 c2 check +permutation w3 r2 r1 p3 p1 w2 p2 c3 c2 c1 check +permutation w3 r2 r1 p3 p1 w2 c3 p2 c1 c2 check +permutation w3 r2 r1 p3 p1 w2 c3 p2 c2 c1 check +permutation w3 r2 r1 p3 p1 w2 c3 c1 p2 c2 check +permutation w3 r2 r1 p3 p1 c3 w2 p2 c1 c2 check +permutation w3 r2 r1 p3 p1 c3 w2 p2 c2 c1 check +permutation w3 r2 r1 p3 p1 c3 w2 c1 p2 c2 check +permutation w3 r2 r1 p3 p1 c3 c1 w2 p2 c2 check +permutation w3 r2 r1 p3 c3 w2 p1 p2 c1 c2 check +permutation w3 r2 r1 p3 c3 w2 p1 p2 c2 c1 check +permutation w3 r2 r1 p3 c3 w2 p1 c1 p2 c2 check +permutation w3 r2 r1 p3 c3 w2 p2 p1 c1 c2 check +permutation w3 r2 r1 p3 c3 w2 p2 p1 c2 c1 check +permutation w3 r2 r1 p3 c3 w2 p2 c2 p1 c1 check +permutation w3 r2 r1 p3 c3 p1 w2 p2 c1 c2 check +permutation w3 r2 r1 p3 c3 p1 w2 p2 c2 c1 check +permutation w3 r2 r1 p3 c3 p1 w2 c1 p2 c2 check +permutation w3 r2 r1 p3 c3 p1 c1 w2 p2 c2 check +permutation w3 r2 p3 r1 w2 p1 p2 c3 c1 c2 check +permutation w3 r2 p3 r1 w2 p1 p2 c3 c2 c1 check +permutation w3 r2 p3 r1 w2 p1 c3 p2 c1 c2 check +permutation w3 r2 p3 r1 w2 p1 c3 p2 c2 c1 check +permutation w3 r2 p3 r1 w2 p1 c3 c1 p2 c2 check +permutation w3 r2 p3 r1 w2 p2 p1 c3 c1 c2 check +permutation w3 r2 p3 r1 w2 p2 p1 c3 c2 c1 check +permutation w3 r2 p3 r1 w2 p2 c3 p1 c1 c2 check +permutation w3 r2 p3 r1 w2 p2 c3 p1 c2 c1 check +permutation w3 r2 p3 r1 w2 p2 c3 c2 p1 c1 check +permutation w3 r2 p3 r1 w2 c3 p1 p2 c1 c2 check +permutation w3 r2 p3 r1 w2 c3 p1 p2 c2 c1 check +permutation w3 r2 p3 r1 w2 c3 p1 c1 p2 c2 check +permutation w3 r2 p3 r1 w2 c3 p2 p1 c1 c2 check +permutation w3 r2 p3 r1 w2 c3 p2 p1 c2 c1 check +permutation w3 r2 p3 r1 w2 c3 p2 c2 p1 c1 check +permutation w3 r2 p3 r1 p1 w2 p2 c3 c1 c2 check +permutation w3 r2 p3 r1 p1 w2 p2 c3 c2 c1 check +permutation w3 r2 p3 r1 p1 w2 c3 p2 c1 c2 check +permutation w3 r2 p3 r1 p1 w2 c3 p2 c2 c1 check +permutation w3 r2 p3 r1 p1 w2 c3 c1 p2 c2 check +permutation w3 r2 p3 r1 p1 c3 w2 p2 c1 c2 check +permutation w3 r2 p3 r1 p1 c3 w2 p2 c2 c1 check +permutation w3 r2 p3 r1 p1 c3 w2 c1 p2 c2 check +permutation w3 r2 p3 r1 p1 c3 c1 w2 p2 c2 check +permutation w3 r2 p3 r1 c3 w2 p1 p2 c1 c2 check +permutation w3 r2 p3 r1 c3 w2 p1 p2 c2 c1 check +permutation w3 r2 p3 r1 c3 w2 p1 c1 p2 c2 check +permutation w3 r2 p3 r1 c3 w2 p2 p1 c1 c2 check +permutation w3 r2 p3 r1 c3 w2 p2 p1 c2 c1 check +permutation w3 r2 p3 r1 c3 w2 p2 c2 p1 c1 check +permutation w3 r2 p3 r1 c3 p1 w2 p2 c1 c2 check +permutation w3 r2 p3 r1 c3 p1 w2 p2 c2 c1 check +permutation w3 r2 p3 r1 c3 p1 w2 c1 p2 c2 check +permutation w3 r2 p3 r1 c3 p1 c1 w2 p2 c2 check +permutation w3 r2 p3 c3 r1 w2 p1 p2 c1 c2 check +permutation w3 r2 p3 c3 r1 w2 p1 p2 c2 c1 check +permutation w3 r2 p3 c3 r1 w2 p1 c1 p2 c2 check +permutation w3 r2 p3 c3 r1 w2 p2 p1 c1 c2 check +permutation w3 r2 p3 c3 r1 w2 p2 p1 c2 c1 check +permutation w3 r2 p3 c3 r1 w2 p2 c2 p1 c1 check +permutation w3 r2 p3 c3 r1 p1 w2 p2 c1 c2 check +permutation w3 r2 p3 c3 r1 p1 w2 p2 c2 c1 check +permutation w3 r2 p3 c3 r1 p1 w2 c1 p2 c2 check +permutation w3 r2 p3 c3 r1 p1 c1 w2 p2 c2 check +permutation w3 p3 r1 r2 w2 p1 p2 c3 c1 c2 check +permutation w3 p3 r1 r2 w2 p1 p2 c3 c2 c1 check +permutation w3 p3 r1 r2 w2 p1 c3 p2 c1 c2 check +permutation w3 p3 r1 r2 w2 p1 c3 p2 c2 c1 check +permutation w3 p3 r1 r2 w2 p1 c3 c1 p2 c2 check +permutation w3 p3 r1 r2 w2 p2 p1 c3 c1 c2 check +permutation w3 p3 r1 r2 w2 p2 p1 c3 c2 c1 check +permutation w3 p3 r1 r2 w2 p2 c3 p1 c1 c2 check +permutation w3 p3 r1 r2 w2 p2 c3 p1 c2 c1 check +permutation w3 p3 r1 r2 w2 p2 c3 c2 p1 c1 check +permutation w3 p3 r1 r2 w2 c3 p1 p2 c1 c2 check +permutation w3 p3 r1 r2 w2 c3 p1 p2 c2 c1 check +permutation w3 p3 r1 r2 w2 c3 p1 c1 p2 c2 check +permutation w3 p3 r1 r2 w2 c3 p2 p1 c1 c2 check +permutation w3 p3 r1 r2 w2 c3 p2 p1 c2 c1 check +permutation w3 p3 r1 r2 w2 c3 p2 c2 p1 c1 check +permutation w3 p3 r1 r2 p1 w2 p2 c3 c1 c2 check +permutation w3 p3 r1 r2 p1 w2 p2 c3 c2 c1 check +permutation w3 p3 r1 r2 p1 w2 c3 p2 c1 c2 check +permutation w3 p3 r1 r2 p1 w2 c3 p2 c2 c1 check +permutation w3 p3 r1 r2 p1 w2 c3 c1 p2 c2 check +permutation w3 p3 r1 r2 p1 c3 w2 p2 c1 c2 check +permutation w3 p3 r1 r2 p1 c3 w2 p2 c2 c1 check +permutation w3 p3 r1 r2 p1 c3 w2 c1 p2 c2 check +permutation w3 p3 r1 r2 p1 c3 c1 w2 p2 c2 check +permutation w3 p3 r1 r2 c3 w2 p1 p2 c1 c2 check +permutation w3 p3 r1 r2 c3 w2 p1 p2 c2 c1 check +permutation w3 p3 r1 r2 c3 w2 p1 c1 p2 c2 check +permutation w3 p3 r1 r2 c3 w2 p2 p1 c1 c2 check +permutation w3 p3 r1 r2 c3 w2 p2 p1 c2 c1 check +permutation w3 p3 r1 r2 c3 w2 p2 c2 p1 c1 check +permutation w3 p3 r1 r2 c3 p1 w2 p2 c1 c2 check +permutation w3 p3 r1 r2 c3 p1 w2 p2 c2 c1 check +permutation w3 p3 r1 r2 c3 p1 w2 c1 p2 c2 check +permutation w3 p3 r1 r2 c3 p1 c1 w2 p2 c2 check +permutation w3 p3 r1 w2 r2 p1 p2 c3 c1 c2 check +permutation w3 p3 r1 w2 r2 p1 p2 c3 c2 c1 check +permutation w3 p3 r1 w2 r2 p1 c3 p2 c1 c2 check +permutation w3 p3 r1 w2 r2 p1 c3 p2 c2 c1 check +permutation w3 p3 r1 w2 r2 p1 c3 c1 p2 c2 check +permutation w3 p3 r1 w2 r2 p2 p1 c3 c1 c2 check +permutation w3 p3 r1 w2 r2 p2 p1 c3 c2 c1 check +permutation w3 p3 r1 w2 r2 p2 c3 p1 c1 c2 check +permutation w3 p3 r1 w2 r2 p2 c3 p1 c2 c1 check +permutation w3 p3 r1 w2 r2 p2 c3 c2 p1 c1 check +permutation w3 p3 r1 w2 r2 c3 p1 p2 c1 c2 check +permutation w3 p3 r1 w2 r2 c3 p1 p2 c2 c1 check +permutation w3 p3 r1 w2 r2 c3 p1 c1 p2 c2 check +permutation w3 p3 r1 w2 r2 c3 p2 p1 c1 c2 check +permutation w3 p3 r1 w2 r2 c3 p2 p1 c2 c1 check +permutation w3 p3 r1 w2 r2 c3 p2 c2 p1 c1 check +permutation w3 p3 r1 w2 p1 r2 p2 c3 c1 c2 check +permutation w3 p3 r1 w2 p1 r2 p2 c3 c2 c1 check +permutation w3 p3 r1 w2 p1 r2 c3 p2 c1 c2 check +permutation w3 p3 r1 w2 p1 r2 c3 p2 c2 c1 check +permutation w3 p3 r1 w2 p1 r2 c3 c1 p2 c2 check +permutation w3 p3 r1 w2 p1 c3 r2 p2 c1 c2 check +permutation w3 p3 r1 w2 p1 c3 r2 p2 c2 c1 check +permutation w3 p3 r1 w2 p1 c3 r2 c1 p2 c2 check +permutation w3 p3 r1 w2 p1 c3 c1 r2 p2 c2 check +permutation w3 p3 r1 w2 c3 r2 p1 p2 c1 c2 check +permutation w3 p3 r1 w2 c3 r2 p1 p2 c2 c1 check +permutation w3 p3 r1 w2 c3 r2 p1 c1 p2 c2 check +permutation w3 p3 r1 w2 c3 r2 p2 p1 c1 c2 check +permutation w3 p3 r1 w2 c3 r2 p2 p1 c2 c1 check +permutation w3 p3 r1 w2 c3 r2 p2 c2 p1 c1 check +permutation w3 p3 r1 w2 c3 p1 r2 p2 c1 c2 check +permutation w3 p3 r1 w2 c3 p1 r2 p2 c2 c1 check +permutation w3 p3 r1 w2 c3 p1 r2 c1 p2 c2 check +permutation w3 p3 r1 w2 c3 p1 c1 r2 p2 c2 check +permutation w3 p3 r1 p1 r2 w2 p2 c3 c1 c2 check +permutation w3 p3 r1 p1 r2 w2 p2 c3 c2 c1 check +permutation w3 p3 r1 p1 r2 w2 c3 p2 c1 c2 check +permutation w3 p3 r1 p1 r2 w2 c3 p2 c2 c1 check +permutation w3 p3 r1 p1 r2 w2 c3 c1 p2 c2 check +permutation w3 p3 r1 p1 r2 c3 w2 p2 c1 c2 check +permutation w3 p3 r1 p1 r2 c3 w2 p2 c2 c1 check +permutation w3 p3 r1 p1 r2 c3 w2 c1 p2 c2 check +permutation w3 p3 r1 p1 r2 c3 c1 w2 p2 c2 check +permutation w3 p3 r1 p1 w2 r2 p2 c3 c1 c2 check +permutation w3 p3 r1 p1 w2 r2 p2 c3 c2 c1 check +permutation w3 p3 r1 p1 w2 r2 c3 p2 c1 c2 check +permutation w3 p3 r1 p1 w2 r2 c3 p2 c2 c1 check +permutation w3 p3 r1 p1 w2 r2 c3 c1 p2 c2 check +permutation w3 p3 r1 p1 w2 c3 r2 p2 c1 c2 check +permutation w3 p3 r1 p1 w2 c3 r2 p2 c2 c1 check +permutation w3 p3 r1 p1 w2 c3 r2 c1 p2 c2 check +permutation w3 p3 r1 p1 w2 c3 c1 r2 p2 c2 check +permutation w3 p3 r1 p1 c3 r2 w2 p2 c1 c2 check +permutation w3 p3 r1 p1 c3 r2 w2 p2 c2 c1 check +permutation w3 p3 r1 p1 c3 r2 w2 c1 p2 c2 check +permutation w3 p3 r1 p1 c3 r2 c1 w2 p2 c2 check +permutation w3 p3 r1 p1 c3 w2 r2 p2 c1 c2 check +permutation w3 p3 r1 p1 c3 w2 r2 p2 c2 c1 check +permutation w3 p3 r1 p1 c3 w2 r2 c1 p2 c2 check +permutation w3 p3 r1 p1 c3 w2 c1 r2 p2 c2 check +permutation w3 p3 r1 p1 c3 c1 r2 w2 p2 c2 check +permutation w3 p3 r1 p1 c3 c1 w2 r2 p2 c2 check +permutation w3 p3 r1 c3 r2 w2 p1 p2 c1 c2 check +permutation w3 p3 r1 c3 r2 w2 p1 p2 c2 c1 check +permutation w3 p3 r1 c3 r2 w2 p1 c1 p2 c2 check +permutation w3 p3 r1 c3 r2 w2 p2 p1 c1 c2 check +permutation w3 p3 r1 c3 r2 w2 p2 p1 c2 c1 check +permutation w3 p3 r1 c3 r2 w2 p2 c2 p1 c1 check +permutation w3 p3 r1 c3 r2 p1 w2 p2 c1 c2 check +permutation w3 p3 r1 c3 r2 p1 w2 p2 c2 c1 check +permutation w3 p3 r1 c3 r2 p1 w2 c1 p2 c2 check +permutation w3 p3 r1 c3 r2 p1 c1 w2 p2 c2 check +permutation w3 p3 r1 c3 w2 r2 p1 p2 c1 c2 check +permutation w3 p3 r1 c3 w2 r2 p1 p2 c2 c1 check +permutation w3 p3 r1 c3 w2 r2 p1 c1 p2 c2 check +permutation w3 p3 r1 c3 w2 r2 p2 p1 c1 c2 check +permutation w3 p3 r1 c3 w2 r2 p2 p1 c2 c1 check +permutation w3 p3 r1 c3 w2 r2 p2 c2 p1 c1 check +permutation w3 p3 r1 c3 w2 p1 r2 p2 c1 c2 check +permutation w3 p3 r1 c3 w2 p1 r2 p2 c2 c1 check +permutation w3 p3 r1 c3 w2 p1 r2 c1 p2 c2 check +permutation w3 p3 r1 c3 w2 p1 c1 r2 p2 c2 check +permutation w3 p3 r1 c3 p1 r2 w2 p2 c1 c2 check +permutation w3 p3 r1 c3 p1 r2 w2 p2 c2 c1 check +permutation w3 p3 r1 c3 p1 r2 w2 c1 p2 c2 check +permutation w3 p3 r1 c3 p1 r2 c1 w2 p2 c2 check +permutation w3 p3 r1 c3 p1 w2 r2 p2 c1 c2 check +permutation w3 p3 r1 c3 p1 w2 r2 p2 c2 c1 check +permutation w3 p3 r1 c3 p1 w2 r2 c1 p2 c2 check +permutation w3 p3 r1 c3 p1 w2 c1 r2 p2 c2 check +permutation w3 p3 r1 c3 p1 c1 r2 w2 p2 c2 check +permutation w3 p3 r1 c3 p1 c1 w2 r2 p2 c2 check +permutation w3 p3 r2 r1 w2 p1 p2 c3 c1 c2 check +permutation w3 p3 r2 r1 w2 p1 p2 c3 c2 c1 check +permutation w3 p3 r2 r1 w2 p1 c3 p2 c1 c2 check +permutation w3 p3 r2 r1 w2 p1 c3 p2 c2 c1 check +permutation w3 p3 r2 r1 w2 p1 c3 c1 p2 c2 check +permutation w3 p3 r2 r1 w2 p2 p1 c3 c1 c2 check +permutation w3 p3 r2 r1 w2 p2 p1 c3 c2 c1 check +permutation w3 p3 r2 r1 w2 p2 c3 p1 c1 c2 check +permutation w3 p3 r2 r1 w2 p2 c3 p1 c2 c1 check +permutation w3 p3 r2 r1 w2 p2 c3 c2 p1 c1 check +permutation w3 p3 r2 r1 w2 c3 p1 p2 c1 c2 check +permutation w3 p3 r2 r1 w2 c3 p1 p2 c2 c1 check +permutation w3 p3 r2 r1 w2 c3 p1 c1 p2 c2 check +permutation w3 p3 r2 r1 w2 c3 p2 p1 c1 c2 check +permutation w3 p3 r2 r1 w2 c3 p2 p1 c2 c1 check +permutation w3 p3 r2 r1 w2 c3 p2 c2 p1 c1 check +permutation w3 p3 r2 r1 p1 w2 p2 c3 c1 c2 check +permutation w3 p3 r2 r1 p1 w2 p2 c3 c2 c1 check +permutation w3 p3 r2 r1 p1 w2 c3 p2 c1 c2 check +permutation w3 p3 r2 r1 p1 w2 c3 p2 c2 c1 check +permutation w3 p3 r2 r1 p1 w2 c3 c1 p2 c2 check +permutation w3 p3 r2 r1 p1 c3 w2 p2 c1 c2 check +permutation w3 p3 r2 r1 p1 c3 w2 p2 c2 c1 check +permutation w3 p3 r2 r1 p1 c3 w2 c1 p2 c2 check +permutation w3 p3 r2 r1 p1 c3 c1 w2 p2 c2 check +permutation w3 p3 r2 r1 c3 w2 p1 p2 c1 c2 check +permutation w3 p3 r2 r1 c3 w2 p1 p2 c2 c1 check +permutation w3 p3 r2 r1 c3 w2 p1 c1 p2 c2 check +permutation w3 p3 r2 r1 c3 w2 p2 p1 c1 c2 check +permutation w3 p3 r2 r1 c3 w2 p2 p1 c2 c1 check +permutation w3 p3 r2 r1 c3 w2 p2 c2 p1 c1 check +permutation w3 p3 r2 r1 c3 p1 w2 p2 c1 c2 check +permutation w3 p3 r2 r1 c3 p1 w2 p2 c2 c1 check +permutation w3 p3 r2 r1 c3 p1 w2 c1 p2 c2 check +permutation w3 p3 r2 r1 c3 p1 c1 w2 p2 c2 check +permutation w3 p3 r2 c3 r1 w2 p1 p2 c1 c2 check +permutation w3 p3 r2 c3 r1 w2 p1 p2 c2 c1 check +permutation w3 p3 r2 c3 r1 w2 p1 c1 p2 c2 check +permutation w3 p3 r2 c3 r1 w2 p2 p1 c1 c2 check +permutation w3 p3 r2 c3 r1 w2 p2 p1 c2 c1 check +permutation w3 p3 r2 c3 r1 w2 p2 c2 p1 c1 check +permutation w3 p3 r2 c3 r1 p1 w2 p2 c1 c2 check +permutation w3 p3 r2 c3 r1 p1 w2 p2 c2 c1 check +permutation w3 p3 r2 c3 r1 p1 w2 c1 p2 c2 check +permutation w3 p3 r2 c3 r1 p1 c1 w2 p2 c2 check +permutation w3 p3 c3 r1 r2 w2 p1 p2 c1 c2 check +permutation w3 p3 c3 r1 r2 w2 p1 p2 c2 c1 check +permutation w3 p3 c3 r1 r2 w2 p1 c1 p2 c2 check +permutation w3 p3 c3 r1 r2 w2 p2 p1 c1 c2 check +permutation w3 p3 c3 r1 r2 w2 p2 p1 c2 c1 check +permutation w3 p3 c3 r1 r2 w2 p2 c2 p1 c1 check +permutation w3 p3 c3 r1 r2 p1 w2 p2 c1 c2 check +permutation w3 p3 c3 r1 r2 p1 w2 p2 c2 c1 check +permutation w3 p3 c3 r1 r2 p1 w2 c1 p2 c2 check +permutation w3 p3 c3 r1 r2 p1 c1 w2 p2 c2 check +permutation w3 p3 c3 r1 w2 r2 p1 p2 c1 c2 check +permutation w3 p3 c3 r1 w2 r2 p1 p2 c2 c1 check +permutation w3 p3 c3 r1 w2 r2 p1 c1 p2 c2 check +permutation w3 p3 c3 r1 w2 r2 p2 p1 c1 c2 check +permutation w3 p3 c3 r1 w2 r2 p2 p1 c2 c1 check +permutation w3 p3 c3 r1 w2 r2 p2 c2 p1 c1 check +permutation w3 p3 c3 r1 w2 p1 r2 p2 c1 c2 check +permutation w3 p3 c3 r1 w2 p1 r2 p2 c2 c1 check +permutation w3 p3 c3 r1 w2 p1 r2 c1 p2 c2 check +permutation w3 p3 c3 r1 w2 p1 c1 r2 p2 c2 check +permutation w3 p3 c3 r1 p1 r2 w2 p2 c1 c2 check +permutation w3 p3 c3 r1 p1 r2 w2 p2 c2 c1 check +permutation w3 p3 c3 r1 p1 r2 w2 c1 p2 c2 check +permutation w3 p3 c3 r1 p1 r2 c1 w2 p2 c2 check +permutation w3 p3 c3 r1 p1 w2 r2 p2 c1 c2 check +permutation w3 p3 c3 r1 p1 w2 r2 p2 c2 c1 check +permutation w3 p3 c3 r1 p1 w2 r2 c1 p2 c2 check +permutation w3 p3 c3 r1 p1 w2 c1 r2 p2 c2 check +permutation w3 p3 c3 r1 p1 c1 r2 w2 p2 c2 check +permutation w3 p3 c3 r1 p1 c1 w2 r2 p2 c2 check +permutation w3 p3 c3 r2 r1 w2 p1 p2 c1 c2 check +permutation w3 p3 c3 r2 r1 w2 p1 p2 c2 c1 check +permutation w3 p3 c3 r2 r1 w2 p1 c1 p2 c2 check +permutation w3 p3 c3 r2 r1 w2 p2 p1 c1 c2 check +permutation w3 p3 c3 r2 r1 w2 p2 p1 c2 c1 check +permutation w3 p3 c3 r2 r1 w2 p2 c2 p1 c1 check +permutation w3 p3 c3 r2 r1 p1 w2 p2 c1 c2 check +permutation w3 p3 c3 r2 r1 p1 w2 p2 c2 c1 check +permutation w3 p3 c3 r2 r1 p1 w2 c1 p2 c2 check +permutation w3 p3 c3 r2 r1 p1 c1 w2 p2 c2 check diff --git a/src/test/isolation/specs/project-manager.spec b/src/test/isolation/specs/project-manager.spec index 884012dd89ce7..42e5fc53a2ea6 100644 --- a/src/test/isolation/specs/project-manager.spec +++ b/src/test/isolation/specs/project-manager.spec @@ -17,14 +17,14 @@ teardown DROP TABLE person, project; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "rx1" { SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; } -step "wy1" { INSERT INTO project VALUES (101, 'Build Great Wall', 1); } -step "c1" { COMMIT; } +step rx1 { SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; } +step wy1 { INSERT INTO project VALUES (101, 'Build Great Wall', 1); } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "ry2" { SELECT count(*) FROM project WHERE project_manager = 1; } -step "wx2" { UPDATE person SET is_project_manager = false WHERE person_id = 1; } -step "c2" { COMMIT; } +step ry2 { SELECT count(*) FROM project WHERE project_manager = 1; } +step wx2 { UPDATE person SET is_project_manager = false WHERE person_id = 1; } +step c2 { COMMIT; } diff --git a/src/test/isolation/specs/propagate-lock-delete.spec b/src/test/isolation/specs/propagate-lock-delete.spec index 857c36b3dbbe1..641fb842833fe 100644 --- a/src/test/isolation/specs/propagate-lock-delete.spec +++ b/src/test/isolation/specs/propagate-lock-delete.spec @@ -14,29 +14,29 @@ teardown drop table child, parent; } -session "s1" -step "s1b" { BEGIN; } -step "s1l" { INSERT INTO child VALUES (1); } -step "s1c" { COMMIT; } +session s1 +step s1b { BEGIN; } +step s1l { INSERT INTO child VALUES (1); } +step s1c { COMMIT; } -session "s2" -step "s2b" { BEGIN; } -step "s2l" { INSERT INTO child VALUES (1); } -step "s2c" { COMMIT; } +session s2 +step s2b { BEGIN; } +step s2l { INSERT INTO child VALUES (1); } +step s2c { COMMIT; } -session "s3" -step "s3b" { BEGIN; } -step "s3u" { UPDATE parent SET c=lower(c); } # no key update -step "s3u2" { UPDATE parent SET i = i; } # key update -step "s3svu" { SAVEPOINT f; UPDATE parent SET c = 'bbb'; ROLLBACK TO f; } -step "s3d" { DELETE FROM parent; } -step "s3c" { COMMIT; } +session s3 +step s3b { BEGIN; } +step s3u { UPDATE parent SET c=lower(c); } # no key update +step s3u2 { UPDATE parent SET i = i; } # key update +step s3svu { SAVEPOINT f; UPDATE parent SET c = 'bbb'; ROLLBACK TO f; } +step s3d { DELETE FROM parent; } +step s3c { COMMIT; } -permutation "s1b" "s1l" "s2b" "s2l" "s3b" "s3u" "s3d" "s1c" "s2c" "s3c" -permutation "s1b" "s1l" "s2b" "s2l" "s3b" "s3u" "s3svu" "s3d" "s1c" "s2c" "s3c" -permutation "s1b" "s1l" "s2b" "s2l" "s3b" "s3u2" "s3d" "s1c" "s2c" "s3c" -permutation "s1b" "s1l" "s2b" "s2l" "s3b" "s3u2" "s3svu" "s3d" "s1c" "s2c" "s3c" -permutation "s1b" "s1l" "s3b" "s3u" "s3d" "s1c" "s3c" -permutation "s1b" "s1l" "s3b" "s3u" "s3svu" "s3d" "s1c" "s3c" -permutation "s1b" "s1l" "s3b" "s3u2" "s3d" "s1c" "s3c" -permutation "s1b" "s1l" "s3b" "s3u2" "s3svu" "s3d" "s1c" "s3c" +permutation s1b s1l s2b s2l s3b s3u s3d s1c s2c s3c +permutation s1b s1l s2b s2l s3b s3u s3svu s3d s1c s2c s3c +permutation s1b s1l s2b s2l s3b s3u2 s3d s1c s2c s3c +permutation s1b s1l s2b s2l s3b s3u2 s3svu s3d s1c s2c s3c +permutation s1b s1l s3b s3u s3d s1c s3c +permutation s1b s1l s3b s3u s3svu s3d s1c s3c +permutation s1b s1l s3b s3u2 s3d s1c s3c +permutation s1b s1l s3b s3u2 s3svu s3d s1c s3c diff --git a/src/test/isolation/specs/read-only-anomaly-2.spec b/src/test/isolation/specs/read-only-anomaly-2.spec index 9812f49ee47ec..6b579a60c5bc8 100644 --- a/src/test/isolation/specs/read-only-anomaly-2.spec +++ b/src/test/isolation/specs/read-only-anomaly-2.spec @@ -17,26 +17,26 @@ teardown DROP TABLE bank_account; } -session "s1" +session s1 setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } -step "s1ry" { SELECT balance FROM bank_account WHERE id = 'Y'; } -step "s1wy" { UPDATE bank_account SET balance = 20 WHERE id = 'Y'; } -step "s1c" { COMMIT; } +step s1ry { SELECT balance FROM bank_account WHERE id = 'Y'; } +step s1wy { UPDATE bank_account SET balance = 20 WHERE id = 'Y'; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } -step "s2rx" { SELECT balance FROM bank_account WHERE id = 'X'; } -step "s2ry" { SELECT balance FROM bank_account WHERE id = 'Y'; } -step "s2wx" { UPDATE bank_account SET balance = -11 WHERE id = 'X'; } -step "s2c" { COMMIT; } +step s2rx { SELECT balance FROM bank_account WHERE id = 'X'; } +step s2ry { SELECT balance FROM bank_account WHERE id = 'Y'; } +step s2wx { UPDATE bank_account SET balance = -11 WHERE id = 'X'; } +step s2c { COMMIT; } -session "s3" +session s3 setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } -step "s3r" { SELECT id, balance FROM bank_account WHERE id IN ('X', 'Y') ORDER BY id; } -step "s3c" { COMMIT; } +step s3r { SELECT id, balance FROM bank_account WHERE id IN ('X', 'Y') ORDER BY id; } +step s3c { COMMIT; } # without s3, s1 and s2 commit -permutation "s2rx" "s2ry" "s1ry" "s1wy" "s1c" "s2wx" "s2c" "s3c" +permutation s2rx s2ry s1ry s1wy s1c s2wx s2c s3c # once s3 observes the data committed by s1, a cycle is created and s2 aborts -permutation "s2rx" "s2ry" "s1ry" "s1wy" "s1c" "s3r" "s3c" "s2wx" +permutation s2rx s2ry s1ry s1wy s1c s3r s3c s2wx diff --git a/src/test/isolation/specs/read-only-anomaly-3.spec b/src/test/isolation/specs/read-only-anomaly-3.spec index d43fc2e03f2ef..61d9c0b9e0f69 100644 --- a/src/test/isolation/specs/read-only-anomaly-3.spec +++ b/src/test/isolation/specs/read-only-anomaly-3.spec @@ -18,22 +18,22 @@ teardown DROP TABLE bank_account; } -session "s1" +session s1 setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } -step "s1ry" { SELECT balance FROM bank_account WHERE id = 'Y'; } -step "s1wy" { UPDATE bank_account SET balance = 20 WHERE id = 'Y'; } -step "s1c" { COMMIT; } +step s1ry { SELECT balance FROM bank_account WHERE id = 'Y'; } +step s1wy { UPDATE bank_account SET balance = 20 WHERE id = 'Y'; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } -step "s2rx" { SELECT balance FROM bank_account WHERE id = 'X'; } -step "s2ry" { SELECT balance FROM bank_account WHERE id = 'Y'; } -step "s2wx" { UPDATE bank_account SET balance = -11 WHERE id = 'X'; } -step "s2c" { COMMIT; } +step s2rx { SELECT balance FROM bank_account WHERE id = 'X'; } +step s2ry { SELECT balance FROM bank_account WHERE id = 'Y'; } +step s2wx { UPDATE bank_account SET balance = -11 WHERE id = 'X'; } +step s2c { COMMIT; } -session "s3" +session s3 setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY DEFERRABLE; } -step "s3r" { SELECT id, balance FROM bank_account WHERE id IN ('X', 'Y') ORDER BY id; } -step "s3c" { COMMIT; } +step s3r { SELECT id, balance FROM bank_account WHERE id IN ('X', 'Y') ORDER BY id; } +step s3c { COMMIT; } -permutation "s2rx" "s2ry" "s1ry" "s1wy" "s1c" "s3r" "s2wx" "s2c" "s3c" +permutation s2rx s2ry s1ry s1wy s1c s3r s2wx s2c s3c diff --git a/src/test/isolation/specs/read-only-anomaly.spec b/src/test/isolation/specs/read-only-anomaly.spec index d331e4200a79c..8ff1af551201a 100644 --- a/src/test/isolation/specs/read-only-anomaly.spec +++ b/src/test/isolation/specs/read-only-anomaly.spec @@ -17,22 +17,22 @@ teardown DROP TABLE bank_account; } -session "s1" +session s1 setup { BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; } -step "s1ry" { SELECT balance FROM bank_account WHERE id = 'Y'; } -step "s1wy" { UPDATE bank_account SET balance = 20 WHERE id = 'Y'; } -step "s1c" { COMMIT; } +step s1ry { SELECT balance FROM bank_account WHERE id = 'Y'; } +step s1wy { UPDATE bank_account SET balance = 20 WHERE id = 'Y'; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; } -step "s2rx" { SELECT balance FROM bank_account WHERE id = 'X'; } -step "s2ry" { SELECT balance FROM bank_account WHERE id = 'Y'; } -step "s2wx" { UPDATE bank_account SET balance = -11 WHERE id = 'X'; } -step "s2c" { COMMIT; } +step s2rx { SELECT balance FROM bank_account WHERE id = 'X'; } +step s2ry { SELECT balance FROM bank_account WHERE id = 'Y'; } +step s2wx { UPDATE bank_account SET balance = -11 WHERE id = 'X'; } +step s2c { COMMIT; } -session "s3" +session s3 setup { BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; } -step "s3r" { SELECT id, balance FROM bank_account WHERE id IN ('X', 'Y') ORDER BY id; } -step "s3c" { COMMIT; } +step s3r { SELECT id, balance FROM bank_account WHERE id IN ('X', 'Y') ORDER BY id; } +step s3c { COMMIT; } -permutation "s2rx" "s2ry" "s1ry" "s1wy" "s1c" "s3r" "s2wx" "s2c" "s3c" +permutation s2rx s2ry s1ry s1wy s1c s3r s2wx s2c s3c diff --git a/src/test/isolation/specs/read-write-unique-2.spec b/src/test/isolation/specs/read-write-unique-2.spec index 5e7cbf2cf544d..16c73e19c4348 100644 --- a/src/test/isolation/specs/read-write-unique-2.spec +++ b/src/test/isolation/specs/read-write-unique-2.spec @@ -10,27 +10,27 @@ teardown DROP TABLE test; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "r1" { SELECT * FROM test WHERE i = 42; } -step "w1" { INSERT INTO test VALUES (42); } -step "c1" { COMMIT; } +step r1 { SELECT * FROM test WHERE i = 42; } +step w1 { INSERT INTO test VALUES (42); } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "r2" { SELECT * FROM test WHERE i = 42; } -step "w2" { INSERT INTO test VALUES (42); } -step "c2" { COMMIT; } +step r2 { SELECT * FROM test WHERE i = 42; } +step w2 { INSERT INTO test VALUES (42); } +step c2 { COMMIT; } # Two SSI transactions see that there is no row with value 42 # in the table, then try to insert that value; T1 inserts, # and then T2 blocks waiting for T1 to commit. Finally, # T2 reports a serialization failure. -permutation "r1" "r2" "w1" "w2" "c1" "c2" +permutation r1 r2 w1 w2 c1 c2 # If the value is already visible before T2 begins, then a # regular unique constraint violation should still be raised # by T2. -permutation "r1" "w1" "c1" "r2" "w2" "c2" +permutation r1 w1 c1 r2 w2 c2 diff --git a/src/test/isolation/specs/read-write-unique-3.spec b/src/test/isolation/specs/read-write-unique-3.spec index 52d287721b1dc..cba2c4c0bc081 100644 --- a/src/test/isolation/specs/read-write-unique-3.spec +++ b/src/test/isolation/specs/read-write-unique-3.spec @@ -20,14 +20,14 @@ teardown DROP TABLE test; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "rw1" { SELECT insert_unique(1, '1'); } -step "c1" { COMMIT; } +step rw1 { SELECT insert_unique(1, '1'); } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "rw2" { SELECT insert_unique(1, '2'); } -step "c2" { COMMIT; } +step rw2 { SELECT insert_unique(1, '2'); } +step c2 { COMMIT; } -permutation "rw1" "rw2" "c1" "c2" +permutation rw1 rw2 c1 c2 diff --git a/src/test/isolation/specs/read-write-unique-4.spec b/src/test/isolation/specs/read-write-unique-4.spec index ec447823484cf..900224881131c 100644 --- a/src/test/isolation/specs/read-write-unique-4.spec +++ b/src/test/isolation/specs/read-write-unique-4.spec @@ -17,27 +17,27 @@ teardown DROP TABLE invoice; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "r1" { SELECT COALESCE(MAX(invoice_number) + 1, 1) FROM invoice WHERE year = 2016; } -step "w1" { INSERT INTO invoice VALUES (2016, 3); } -step "c1" { COMMIT; } +step r1 { SELECT COALESCE(MAX(invoice_number) + 1, 1) FROM invoice WHERE year = 2016; } +step w1 { INSERT INTO invoice VALUES (2016, 3); } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "r2" { SELECT COALESCE(MAX(invoice_number) + 1, 1) FROM invoice WHERE year = 2016; } -step "w2" { INSERT INTO invoice VALUES (2016, 3); } -step "c2" { COMMIT; } +step r2 { SELECT COALESCE(MAX(invoice_number) + 1, 1) FROM invoice WHERE year = 2016; } +step w2 { INSERT INTO invoice VALUES (2016, 3); } +step c2 { COMMIT; } # if they both read first then there should be an SSI conflict -permutation "r1" "r2" "w1" "w2" "c1" "c2" +permutation r1 r2 w1 w2 c1 c2 # cases where one session doesn't explicitly read before writing: # if s2 doesn't explicitly read, then trying to insert the value # generates a unique constraint violation after s1 commits, as if s2 # ran after s1 -permutation "r1" "w1" "w2" "c1" "c2" +permutation r1 w1 w2 c1 c2 # if s1 doesn't explicitly read, but s2 does, then s1 inserts and # commits first, should s2 experience an SSI failure instead of a @@ -45,4 +45,4 @@ permutation "r1" "w1" "w2" "c1" "c2" # (s1, s2) or (s2, s1) where s1 succeeds, and s2 doesn't see the row # in an explicit select but then fails to insert due to unique # constraint violation -permutation "r2" "w1" "w2" "c1" "c2" +permutation r2 w1 w2 c1 c2 diff --git a/src/test/isolation/specs/read-write-unique.spec b/src/test/isolation/specs/read-write-unique.spec index c782f10c43ebe..3ce059f5ceb29 100644 --- a/src/test/isolation/specs/read-write-unique.spec +++ b/src/test/isolation/specs/read-write-unique.spec @@ -10,17 +10,17 @@ teardown DROP TABLE test; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "r1" { SELECT * FROM test; } -step "w1" { INSERT INTO test VALUES (42); } -step "c1" { COMMIT; } +step r1 { SELECT * FROM test; } +step w1 { INSERT INTO test VALUES (42); } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "r2" { SELECT * FROM test; } -step "w2" { INSERT INTO test VALUES (42); } -step "c2" { COMMIT; } +step r2 { SELECT * FROM test; } +step w2 { INSERT INTO test VALUES (42); } +step c2 { COMMIT; } # Two SSI transactions see that there is no row with value 42 # in the table, then try to insert that value; T1 inserts, @@ -30,10 +30,10 @@ step "c2" { COMMIT; } # (In an earlier version of Postgres, T2 would report a unique # constraint violation). -permutation "r1" "r2" "w1" "w2" "c1" "c2" +permutation r1 r2 w1 w2 c1 c2 # If the value is already visible before T2 begins, then a # regular unique constraint violation should still be raised # by T2. -permutation "r1" "w1" "c1" "r2" "w2" "c2" +permutation r1 w1 c1 r2 w2 c2 diff --git a/src/test/isolation/specs/receipt-report.spec b/src/test/isolation/specs/receipt-report.spec index 5e1d51d0bd06d..85ac60fb9f0a0 100644 --- a/src/test/isolation/specs/receipt-report.spec +++ b/src/test/isolation/specs/receipt-report.spec @@ -30,18 +30,18 @@ teardown DROP TABLE ctl, receipt; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "rxwy1" { INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); } -step "c1" { COMMIT; } +step rxwy1 { INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "wx2" { UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; } -step "c2" { COMMIT; } +step wx2 { UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; } +step c2 { COMMIT; } -session "s3" +session s3 setup { BEGIN ISOLATION LEVEL SERIALIZABLE, READ ONLY; } -step "rx3" { SELECT * FROM ctl WHERE k = 'receipt'; } -step "ry3" { SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; } -step "c3" { COMMIT; } +step rx3 { SELECT * FROM ctl WHERE k = 'receipt'; } +step ry3 { SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; } +step c3 { COMMIT; } diff --git a/src/test/isolation/specs/referential-integrity.spec b/src/test/isolation/specs/referential-integrity.spec index 0bea3eab97350..ecaa9bba023c5 100644 --- a/src/test/isolation/specs/referential-integrity.spec +++ b/src/test/isolation/specs/referential-integrity.spec @@ -18,15 +18,15 @@ teardown DROP TABLE a, b; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "rx1" { SELECT i FROM a WHERE i = 1; } -step "wy1" { INSERT INTO b VALUES (1); } -step "c1" { COMMIT; } +step rx1 { SELECT i FROM a WHERE i = 1; } +step wy1 { INSERT INTO b VALUES (1); } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "rx2" { SELECT i FROM a WHERE i = 1; } -step "ry2" { SELECT a_id FROM b WHERE a_id = 1; } -step "wx2" { DELETE FROM a WHERE i = 1; } -step "c2" { COMMIT; } +step rx2 { SELECT i FROM a WHERE i = 1; } +step ry2 { SELECT a_id FROM b WHERE a_id = 1; } +step wx2 { DELETE FROM a WHERE i = 1; } +step c2 { COMMIT; } diff --git a/src/test/isolation/specs/reindex-concurrently.spec b/src/test/isolation/specs/reindex-concurrently.spec index eb59fe0cba48d..31844bdf8e346 100644 --- a/src/test/isolation/specs/reindex-concurrently.spec +++ b/src/test/isolation/specs/reindex-concurrently.spec @@ -17,24 +17,24 @@ teardown DROP TABLE reind_con_tab; } -session "s1" +session s1 setup { BEGIN; } -step "sel1" { SELECT data FROM reind_con_tab WHERE id = 3; } -step "end1" { COMMIT; } +step sel1 { SELECT data FROM reind_con_tab WHERE id = 3; } +step end1 { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "upd2" { UPDATE reind_con_tab SET data = 'bbbb' WHERE id = 3; } -step "ins2" { INSERT INTO reind_con_tab(data) VALUES ('cccc'); } -step "del2" { DELETE FROM reind_con_tab WHERE data = 'cccc'; } -step "end2" { COMMIT; } +step upd2 { UPDATE reind_con_tab SET data = 'bbbb' WHERE id = 3; } +step ins2 { INSERT INTO reind_con_tab(data) VALUES ('cccc'); } +step del2 { DELETE FROM reind_con_tab WHERE data = 'cccc'; } +step end2 { COMMIT; } -session "s3" -step "reindex" { REINDEX TABLE CONCURRENTLY reind_con_tab; } +session s3 +step reindex { REINDEX TABLE CONCURRENTLY reind_con_tab; } -permutation "reindex" "sel1" "upd2" "ins2" "del2" "end1" "end2" -permutation "sel1" "reindex" "upd2" "ins2" "del2" "end1" "end2" -permutation "sel1" "upd2" "reindex" "ins2" "del2" "end1" "end2" -permutation "sel1" "upd2" "ins2" "reindex" "del2" "end1" "end2" -permutation "sel1" "upd2" "ins2" "del2" "reindex" "end1" "end2" -permutation "sel1" "upd2" "ins2" "del2" "end1" "reindex" "end2" +permutation reindex sel1 upd2 ins2 del2 end1 end2 +permutation sel1 reindex upd2 ins2 del2 end1 end2 +permutation sel1 upd2 reindex ins2 del2 end1 end2 +permutation sel1 upd2 ins2 reindex del2 end1 end2 +permutation sel1 upd2 ins2 del2 reindex end1 end2 +permutation sel1 upd2 ins2 del2 end1 reindex end2 diff --git a/src/test/isolation/specs/reindex-schema.spec b/src/test/isolation/specs/reindex-schema.spec index feff8a5ec05d1..dee4ad76f03ba 100644 --- a/src/test/isolation/specs/reindex-schema.spec +++ b/src/test/isolation/specs/reindex-schema.spec @@ -15,18 +15,18 @@ teardown DROP SCHEMA reindex_schema CASCADE; } -session "s1" -step "begin1" { BEGIN; } -step "lock1" { LOCK reindex_schema.tab_locked IN SHARE UPDATE EXCLUSIVE MODE; } -step "end1" { COMMIT; } +session s1 +step begin1 { BEGIN; } +step lock1 { LOCK reindex_schema.tab_locked IN SHARE UPDATE EXCLUSIVE MODE; } +step end1 { COMMIT; } -session "s2" -step "reindex2" { REINDEX SCHEMA reindex_schema; } -step "reindex_conc2" { REINDEX SCHEMA CONCURRENTLY reindex_schema; } +session s2 +step reindex2 { REINDEX SCHEMA reindex_schema; } +step reindex_conc2 { REINDEX SCHEMA CONCURRENTLY reindex_schema; } -session "s3" -step "drop3" { DROP TABLE reindex_schema.tab_dropped; } +session s3 +step drop3 { DROP TABLE reindex_schema.tab_dropped; } # The table can be dropped while reindex is waiting. -permutation "begin1" "lock1" "reindex2" "drop3" "end1" -permutation "begin1" "lock1" "reindex_conc2" "drop3" "end1" +permutation begin1 lock1 reindex2 drop3 end1 +permutation begin1 lock1 reindex_conc2 drop3 end1 diff --git a/src/test/isolation/specs/ri-trigger.spec b/src/test/isolation/specs/ri-trigger.spec index 78d1f2f226de6..00fcdff414f24 100644 --- a/src/test/isolation/specs/ri-trigger.spec +++ b/src/test/isolation/specs/ri-trigger.spec @@ -41,13 +41,13 @@ teardown DROP FUNCTION ri_child(); } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "wxry1" { INSERT INTO child (parent_id) VALUES (0); } -step "c1" { COMMIT; } +step wxry1 { INSERT INTO child (parent_id) VALUES (0); } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "r2" { SELECT TRUE; } -step "wyrx2" { DELETE FROM parent WHERE parent_id = 0; } -step "c2" { COMMIT; } +step r2 { SELECT TRUE; } +step wyrx2 { DELETE FROM parent WHERE parent_id = 0; } +step c2 { COMMIT; } diff --git a/src/test/isolation/specs/sequence-ddl.spec b/src/test/isolation/specs/sequence-ddl.spec index f2a3ff628bfab..7ead8afad6255 100644 --- a/src/test/isolation/specs/sequence-ddl.spec +++ b/src/test/isolation/specs/sequence-ddl.spec @@ -10,32 +10,32 @@ teardown DROP SEQUENCE seq1; } -session "s1" +session s1 setup { BEGIN; } -step "s1alter" { ALTER SEQUENCE seq1 MAXVALUE 10; } -step "s1alter2" { ALTER SEQUENCE seq1 MAXVALUE 20; } -step "s1restart" { ALTER SEQUENCE seq1 RESTART WITH 5; } -step "s1commit" { COMMIT; } +step s1alter { ALTER SEQUENCE seq1 MAXVALUE 10; } +step s1alter2 { ALTER SEQUENCE seq1 MAXVALUE 20; } +step s1restart { ALTER SEQUENCE seq1 RESTART WITH 5; } +step s1commit { COMMIT; } -session "s2" -step "s2begin" { BEGIN; } -step "s2nv" { SELECT nextval('seq1') FROM generate_series(1, 15); } -step "s2commit" { COMMIT; } +session s2 +step s2begin { BEGIN; } +step s2nv { SELECT nextval('seq1') FROM generate_series(1, 15); } +step s2commit { COMMIT; } -permutation "s1alter" "s1commit" "s2nv" +permutation s1alter s1commit s2nv # Prior to PG10, the s2nv step would see the uncommitted s1alter # change, but now it waits. -permutation "s1alter" "s2nv" "s1commit" +permutation s1alter s2nv s1commit # Prior to PG10, the s2nv step would see the uncommitted s1restart # change, but now it waits. -permutation "s1restart" "s2nv" "s1commit" +permutation s1restart s2nv s1commit # In contrast to ALTER setval() is non-transactional, so it doesn't # have to wait. -permutation "s1restart" "s2nv" "s1commit" +permutation s1restart s2nv s1commit # nextval doesn't release lock until transaction end, so s1alter2 has # to wait for s2commit. -permutation "s2begin" "s2nv" "s1alter2" "s2commit" "s1commit" +permutation s2begin s2nv s1alter2 s2commit s1commit diff --git a/src/test/isolation/specs/serializable-parallel-2.spec b/src/test/isolation/specs/serializable-parallel-2.spec index 7f90f75d88245..f3941f786314d 100644 --- a/src/test/isolation/specs/serializable-parallel-2.spec +++ b/src/test/isolation/specs/serializable-parallel-2.spec @@ -12,19 +12,19 @@ teardown DROP TABLE foo; } -session "s1" +session s1 setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } -step "s1r" { SELECT * FROM foo; } -step "s1c" { COMMIT; } +step s1r { SELECT * FROM foo; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY; SET parallel_setup_cost = 0; SET parallel_tuple_cost = 0; } -step "s2r1" { SELECT * FROM foo; } -step "s2r2" { SELECT * FROM foo; } -step "s2c" { COMMIT; } +step s2r1 { SELECT * FROM foo; } +step s2r2 { SELECT * FROM foo; } +step s2c { COMMIT; } -permutation "s1r" "s2r1" "s1c" "s2r2" "s2c" +permutation s1r s2r1 s1c s2r2 s2c diff --git a/src/test/isolation/specs/serializable-parallel.spec b/src/test/isolation/specs/serializable-parallel.spec index a4f488adfc8c3..508648e80c5cb 100644 --- a/src/test/isolation/specs/serializable-parallel.spec +++ b/src/test/isolation/specs/serializable-parallel.spec @@ -19,29 +19,29 @@ teardown DROP TABLE bank_account; } -session "s1" +session s1 setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } -step "s1ry" { SELECT balance FROM bank_account WHERE id = 'Y'; } -step "s1wy" { UPDATE bank_account SET balance = 20 WHERE id = 'Y'; } -step "s1c" { COMMIT; } +step s1ry { SELECT balance FROM bank_account WHERE id = 'Y'; } +step s1wy { UPDATE bank_account SET balance = 20 WHERE id = 'Y'; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } -step "s2rx" { SELECT balance FROM bank_account WHERE id = 'X'; } -step "s2ry" { SELECT balance FROM bank_account WHERE id = 'Y'; } -step "s2wx" { UPDATE bank_account SET balance = -11 WHERE id = 'X'; } -step "s2c" { COMMIT; } +step s2rx { SELECT balance FROM bank_account WHERE id = 'X'; } +step s2ry { SELECT balance FROM bank_account WHERE id = 'Y'; } +step s2wx { UPDATE bank_account SET balance = -11 WHERE id = 'X'; } +step s2c { COMMIT; } -session "s3" +session s3 setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET force_parallel_mode = on; } -step "s3r" { SELECT id, balance FROM bank_account WHERE id IN ('X', 'Y') ORDER BY id; } -step "s3c" { COMMIT; } +step s3r { SELECT id, balance FROM bank_account WHERE id IN ('X', 'Y') ORDER BY id; } +step s3c { COMMIT; } # without s3, s1 and s2 commit -permutation "s2rx" "s2ry" "s1ry" "s1wy" "s1c" "s2wx" "s2c" "s3c" +permutation s2rx s2ry s1ry s1wy s1c s2wx s2c s3c # once s3 observes the data committed by s1, a cycle is created and s2 aborts -permutation "s2rx" "s2ry" "s1ry" "s1wy" "s1c" "s3r" "s3c" "s2wx" +permutation s2rx s2ry s1ry s1wy s1c s3r s3c s2wx diff --git a/src/test/isolation/specs/simple-write-skew.spec b/src/test/isolation/specs/simple-write-skew.spec index 0aee43f38eda1..ecabbf1ded4e7 100644 --- a/src/test/isolation/specs/simple-write-skew.spec +++ b/src/test/isolation/specs/simple-write-skew.spec @@ -19,12 +19,12 @@ teardown DROP TABLE test; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "rwx1" { UPDATE test SET t = 'apple' WHERE t = 'pear'; } -step "c1" { COMMIT; } +step rwx1 { UPDATE test SET t = 'apple' WHERE t = 'pear'; } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "rwx2" { UPDATE test SET t = 'pear' WHERE t = 'apple'} -step "c2" { COMMIT; } +step rwx2 { UPDATE test SET t = 'pear' WHERE t = 'apple'} +step c2 { COMMIT; } diff --git a/src/test/isolation/specs/skip-locked-2.spec b/src/test/isolation/specs/skip-locked-2.spec index a179d343534d3..cfdaa93878648 100644 --- a/src/test/isolation/specs/skip-locked-2.spec +++ b/src/test/isolation/specs/skip-locked-2.spec @@ -15,27 +15,27 @@ teardown DROP TABLE queue; } -session "s1" +session s1 setup { BEGIN; } -step "s1a" { SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; } -step "s1b" { COMMIT; } +step s1a { SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; } +step s1b { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "s2a" { SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; } -step "s2b" { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; } -step "s2c" { COMMIT; } +step s2a { SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; } +step s2b { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; } +step s2c { COMMIT; } # s1 and s2 both get SHARE lock, creating a multixact lock, then s2 # tries to update to UPDATE but skips the record because it can't # acquire a multixact lock -permutation "s1a" "s2a" "s2b" "s1b" "s2c" +permutation s1a s2a s2b s1b s2c # the same but with the SHARE locks acquired in a different order, so # s2 again skips because it can't acquired a multixact lock -permutation "s2a" "s1a" "s2b" "s1b" "s2c" +permutation s2a s1a s2b s1b s2c # s2 acquires SHARE then UPDATE, then s1 tries to acquire SHARE but # can't so skips the first record because it can't acquire a regular # lock -permutation "s2a" "s2b" "s1a" "s1b" "s2c" +permutation s2a s2b s1a s1b s2c diff --git a/src/test/isolation/specs/skip-locked-3.spec b/src/test/isolation/specs/skip-locked-3.spec index 30bf4c6b1a925..7921425ed8762 100644 --- a/src/test/isolation/specs/skip-locked-3.spec +++ b/src/test/isolation/specs/skip-locked-3.spec @@ -15,22 +15,22 @@ teardown DROP TABLE queue; } -session "s1" +session s1 setup { BEGIN; } -step "s1a" { SELECT * FROM queue ORDER BY id FOR UPDATE LIMIT 1; } -step "s1b" { COMMIT; } +step s1a { SELECT * FROM queue ORDER BY id FOR UPDATE LIMIT 1; } +step s1b { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "s2a" { SELECT * FROM queue ORDER BY id FOR UPDATE LIMIT 1; } -step "s2b" { COMMIT; } +step s2a { SELECT * FROM queue ORDER BY id FOR UPDATE LIMIT 1; } +step s2b { COMMIT; } -session "s3" +session s3 setup { BEGIN; } -step "s3a" { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; } -step "s3b" { COMMIT; } +step s3a { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; } +step s3b { COMMIT; } # s3 skips to the second record because it can't obtain the tuple lock # (s2 holds the tuple lock because it is next in line to obtain the # row lock, and s1 holds the row lock) -permutation "s1a" "s2a" "s3a" "s1b" "s2b" "s3b" +permutation s1a s2a s3a s1b s2b s3b diff --git a/src/test/isolation/specs/skip-locked-4.spec b/src/test/isolation/specs/skip-locked-4.spec index ef1823488011b..02994a37bcd99 100644 --- a/src/test/isolation/specs/skip-locked-4.spec +++ b/src/test/isolation/specs/skip-locked-4.spec @@ -14,18 +14,18 @@ teardown DROP TABLE foo; } -session "s1" +session s1 setup { BEGIN; } -step "s1a" { SELECT * FROM foo WHERE pg_advisory_lock(0) IS NOT NULL ORDER BY id LIMIT 1 FOR UPDATE SKIP LOCKED; } -step "s1b" { COMMIT; } +step s1a { SELECT * FROM foo WHERE pg_advisory_lock(0) IS NOT NULL ORDER BY id LIMIT 1 FOR UPDATE SKIP LOCKED; } +step s1b { COMMIT; } -session "s2" -step "s2a" { SELECT pg_advisory_lock(0); } -step "s2b" { UPDATE foo SET data = data WHERE id = 1; } -step "s2c" { BEGIN; } -step "s2d" { UPDATE foo SET data = data WHERE id = 1; } -step "s2e" { SELECT pg_advisory_unlock(0); } -step "s2f" { COMMIT; } +session s2 +step s2a { SELECT pg_advisory_lock(0); } +step s2b { UPDATE foo SET data = data WHERE id = 1; } +step s2c { BEGIN; } +step s2d { UPDATE foo SET data = data WHERE id = 1; } +step s2e { SELECT pg_advisory_unlock(0); } +step s2f { COMMIT; } # s1 takes a snapshot but then waits on an advisory lock, then s2 # updates the row in one transaction, then again in another without @@ -33,4 +33,4 @@ step "s2f" { COMMIT; } # because it has a snapshot that sees the older version, we reach the # waiting code in EvalPlanQualFetch which skips rows when in SKIP # LOCKED mode, so s1 sees the second row -permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s2e" "s1b" "s2f" +permutation s2a s1a s2b s2c s2d s2e s1b s2f diff --git a/src/test/isolation/specs/skip-locked.spec b/src/test/isolation/specs/skip-locked.spec index 3565963c455de..12168f8f8a90e 100644 --- a/src/test/isolation/specs/skip-locked.spec +++ b/src/test/isolation/specs/skip-locked.spec @@ -15,14 +15,14 @@ teardown DROP TABLE queue; } -session "s1" +session s1 setup { BEGIN; } -step "s1a" { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; } -step "s1b" { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; } -step "s1c" { COMMIT; } +step s1a { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; } +step s1b { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; } +step s1c { COMMIT; } -session "s2" +session s2 setup { BEGIN; } -step "s2a" { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; } -step "s2b" { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; } -step "s2c" { COMMIT; } +step s2a { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; } +step s2b { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; } +step s2c { COMMIT; } diff --git a/src/test/isolation/specs/temporal-range-integrity.spec b/src/test/isolation/specs/temporal-range-integrity.spec index 63784ce0a7801..2d4c59c21b146 100644 --- a/src/test/isolation/specs/temporal-range-integrity.spec +++ b/src/test/isolation/specs/temporal-range-integrity.spec @@ -25,14 +25,14 @@ teardown DROP TABLE statute, offense; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "rx1" { SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); } -step "wy1" { INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); } -step "c1" { COMMIT; } +step rx1 { SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); } +step wy1 { INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "ry2" { SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; } -step "wx2" { DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; } -step "c2" { COMMIT; } +step ry2 { SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; } +step wx2 { DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; } +step c2 { COMMIT; } diff --git a/src/test/isolation/specs/timeouts.spec b/src/test/isolation/specs/timeouts.spec index e167e1885af90..c747b4ae28dbf 100644 --- a/src/test/isolation/specs/timeouts.spec +++ b/src/test/isolation/specs/timeouts.spec @@ -11,20 +11,20 @@ teardown DROP TABLE accounts; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "rdtbl" { SELECT * FROM accounts; } -step "wrtbl" { UPDATE accounts SET balance = balance + 100; } +step rdtbl { SELECT * FROM accounts; } +step wrtbl { UPDATE accounts SET balance = balance + 100; } teardown { ABORT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } -step "sto" { SET statement_timeout = '10ms'; } -step "lto" { SET lock_timeout = '10ms'; } -step "lsto" { SET lock_timeout = '10ms'; SET statement_timeout = '10s'; } -step "slto" { SET lock_timeout = '10s'; SET statement_timeout = '10ms'; } -step "locktbl" { LOCK TABLE accounts; } -step "update" { DELETE FROM accounts WHERE accountid = 'checking'; } +step sto { SET statement_timeout = '10ms'; } +step lto { SET lock_timeout = '10ms'; } +step lsto { SET lock_timeout = '10ms'; SET statement_timeout = '10s'; } +step slto { SET lock_timeout = '10s'; SET statement_timeout = '10ms'; } +step locktbl { LOCK TABLE accounts; } +step update { DELETE FROM accounts WHERE accountid = 'checking'; } teardown { ABORT; } # It's possible that the isolation tester will not observe the final @@ -32,18 +32,18 @@ teardown { ABORT; } # We can ensure consistent test output by marking those steps with (*). # statement timeout, table-level lock -permutation "rdtbl" "sto" "locktbl"(*) +permutation rdtbl sto locktbl(*) # lock timeout, table-level lock -permutation "rdtbl" "lto" "locktbl"(*) +permutation rdtbl lto locktbl(*) # lock timeout expires first, table-level lock -permutation "rdtbl" "lsto" "locktbl"(*) +permutation rdtbl lsto locktbl(*) # statement timeout expires first, table-level lock -permutation "rdtbl" "slto" "locktbl"(*) +permutation rdtbl slto locktbl(*) # statement timeout, row-level lock -permutation "wrtbl" "sto" "update"(*) +permutation wrtbl sto update(*) # lock timeout, row-level lock -permutation "wrtbl" "lto" "update"(*) +permutation wrtbl lto update(*) # lock timeout expires first, row-level lock -permutation "wrtbl" "lsto" "update"(*) +permutation wrtbl lsto update(*) # statement timeout expires first, row-level lock -permutation "wrtbl" "slto" "update"(*) +permutation wrtbl slto update(*) diff --git a/src/test/isolation/specs/total-cash.spec b/src/test/isolation/specs/total-cash.spec index 843f41c77f2e4..d98121a5f8a39 100644 --- a/src/test/isolation/specs/total-cash.spec +++ b/src/test/isolation/specs/total-cash.spec @@ -15,14 +15,14 @@ teardown DROP TABLE accounts; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "wx1" { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; } -step "rxy1" { SELECT SUM(balance) FROM accounts; } -step "c1" { COMMIT; } +step wx1 { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; } +step rxy1 { SELECT SUM(balance) FROM accounts; } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "wy2" { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; } -step "rxy2" { SELECT SUM(balance) FROM accounts; } -step "c2" { COMMIT; } +step wy2 { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; } +step rxy2 { SELECT SUM(balance) FROM accounts; } +step c2 { COMMIT; } diff --git a/src/test/isolation/specs/truncate-conflict.spec b/src/test/isolation/specs/truncate-conflict.spec index 3c1b1d1b348be..0f77ff0d727dc 100644 --- a/src/test/isolation/specs/truncate-conflict.spec +++ b/src/test/isolation/specs/truncate-conflict.spec @@ -12,27 +12,27 @@ teardown DROP ROLE regress_truncate_conflict; } -session "s1" -step "s1_begin" { BEGIN; } -step "s1_tab_lookup" { SELECT count(*) >= 0 FROM truncate_tab; } -step "s1_commit" { COMMIT; } +session s1 +step s1_begin { BEGIN; } +step s1_tab_lookup { SELECT count(*) >= 0 FROM truncate_tab; } +step s1_commit { COMMIT; } -session "s2" -step "s2_grant" { GRANT TRUNCATE ON truncate_tab TO regress_truncate_conflict; } -step "s2_auth" { SET ROLE regress_truncate_conflict; } -step "s2_truncate" { TRUNCATE truncate_tab; } -step "s2_reset" { RESET ROLE; } +session s2 +step s2_grant { GRANT TRUNCATE ON truncate_tab TO regress_truncate_conflict; } +step s2_auth { SET ROLE regress_truncate_conflict; } +step s2_truncate { TRUNCATE truncate_tab; } +step s2_reset { RESET ROLE; } # The role doesn't have privileges to truncate the table, so TRUNCATE should # immediately fail without waiting for a lock. -permutation "s1_begin" "s1_tab_lookup" "s2_auth" "s2_truncate" "s1_commit" "s2_reset" -permutation "s1_begin" "s2_auth" "s2_truncate" "s1_tab_lookup" "s1_commit" "s2_reset" -permutation "s1_begin" "s2_auth" "s1_tab_lookup" "s2_truncate" "s1_commit" "s2_reset" -permutation "s2_auth" "s2_truncate" "s1_begin" "s1_tab_lookup" "s1_commit" "s2_reset" +permutation s1_begin s1_tab_lookup s2_auth s2_truncate s1_commit s2_reset +permutation s1_begin s2_auth s2_truncate s1_tab_lookup s1_commit s2_reset +permutation s1_begin s2_auth s1_tab_lookup s2_truncate s1_commit s2_reset +permutation s2_auth s2_truncate s1_begin s1_tab_lookup s1_commit s2_reset # The role has privileges to truncate the table, TRUNCATE will block if # another session holds a lock on the table and succeed in all cases. -permutation "s1_begin" "s1_tab_lookup" "s2_grant" "s2_auth" "s2_truncate" "s1_commit" "s2_reset" -permutation "s1_begin" "s2_grant" "s2_auth" "s2_truncate" "s1_tab_lookup" "s1_commit" "s2_reset" -permutation "s1_begin" "s2_grant" "s2_auth" "s1_tab_lookup" "s2_truncate" "s1_commit" "s2_reset" -permutation "s2_grant" "s2_auth" "s2_truncate" "s1_begin" "s1_tab_lookup" "s1_commit" "s2_reset" +permutation s1_begin s1_tab_lookup s2_grant s2_auth s2_truncate s1_commit s2_reset +permutation s1_begin s2_grant s2_auth s2_truncate s1_tab_lookup s1_commit s2_reset +permutation s1_begin s2_grant s2_auth s1_tab_lookup s2_truncate s1_commit s2_reset +permutation s2_grant s2_auth s2_truncate s1_begin s1_tab_lookup s1_commit s2_reset diff --git a/src/test/isolation/specs/tuplelock-conflict.spec b/src/test/isolation/specs/tuplelock-conflict.spec index 922b572f2d7fb..85582306c4163 100644 --- a/src/test/isolation/specs/tuplelock-conflict.spec +++ b/src/test/isolation/specs/tuplelock-conflict.spec @@ -11,53 +11,53 @@ teardown { DROP TABLE multixact_conflict; } -session "s1" -step "s1_begin" { BEGIN; } -step "s1_lcksvpt" { SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; } -step "s1_tuplock1" { SELECT * FROM multixact_conflict FOR KEY SHARE; } -step "s1_tuplock2" { SELECT * FROM multixact_conflict FOR SHARE; } -step "s1_tuplock3" { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; } -step "s1_tuplock4" { SELECT * FROM multixact_conflict FOR UPDATE; } -step "s1_commit" { COMMIT; } +session s1 +step s1_begin { BEGIN; } +step s1_lcksvpt { SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; } +step s1_tuplock1 { SELECT * FROM multixact_conflict FOR KEY SHARE; } +step s1_tuplock2 { SELECT * FROM multixact_conflict FOR SHARE; } +step s1_tuplock3 { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; } +step s1_tuplock4 { SELECT * FROM multixact_conflict FOR UPDATE; } +step s1_commit { COMMIT; } -session "s2" -step "s2_tuplock1" { SELECT * FROM multixact_conflict FOR KEY SHARE; } -step "s2_tuplock2" { SELECT * FROM multixact_conflict FOR SHARE; } -step "s2_tuplock3" { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; } -step "s2_tuplock4" { SELECT * FROM multixact_conflict FOR UPDATE; } +session s2 +step s2_tuplock1 { SELECT * FROM multixact_conflict FOR KEY SHARE; } +step s2_tuplock2 { SELECT * FROM multixact_conflict FOR SHARE; } +step s2_tuplock3 { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; } +step s2_tuplock4 { SELECT * FROM multixact_conflict FOR UPDATE; } # The version with savepoints test the multixact cases -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock1" "s2_tuplock1" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock1" "s2_tuplock2" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock1" "s2_tuplock3" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock1" "s2_tuplock4" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock2" "s2_tuplock1" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock2" "s2_tuplock2" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock2" "s2_tuplock3" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock2" "s2_tuplock4" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock3" "s2_tuplock1" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock3" "s2_tuplock2" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock3" "s2_tuplock3" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock3" "s2_tuplock4" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock4" "s2_tuplock1" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock4" "s2_tuplock2" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock4" "s2_tuplock3" "s1_commit" -permutation "s1_begin" "s1_lcksvpt" "s1_tuplock4" "s2_tuplock4" "s1_commit" +permutation s1_begin s1_lcksvpt s1_tuplock1 s2_tuplock1 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock1 s2_tuplock2 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock1 s2_tuplock3 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock1 s2_tuplock4 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock2 s2_tuplock1 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock2 s2_tuplock2 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock2 s2_tuplock3 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock2 s2_tuplock4 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock3 s2_tuplock1 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock3 s2_tuplock2 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock3 s2_tuplock3 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock3 s2_tuplock4 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock4 s2_tuplock1 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock4 s2_tuplock2 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock4 s2_tuplock3 s1_commit +permutation s1_begin s1_lcksvpt s1_tuplock4 s2_tuplock4 s1_commit # no multixacts here -permutation "s1_begin" "s1_tuplock1" "s2_tuplock1" "s1_commit" -permutation "s1_begin" "s1_tuplock1" "s2_tuplock2" "s1_commit" -permutation "s1_begin" "s1_tuplock1" "s2_tuplock3" "s1_commit" -permutation "s1_begin" "s1_tuplock1" "s2_tuplock4" "s1_commit" -permutation "s1_begin" "s1_tuplock2" "s2_tuplock1" "s1_commit" -permutation "s1_begin" "s1_tuplock2" "s2_tuplock2" "s1_commit" -permutation "s1_begin" "s1_tuplock2" "s2_tuplock3" "s1_commit" -permutation "s1_begin" "s1_tuplock2" "s2_tuplock4" "s1_commit" -permutation "s1_begin" "s1_tuplock3" "s2_tuplock1" "s1_commit" -permutation "s1_begin" "s1_tuplock3" "s2_tuplock2" "s1_commit" -permutation "s1_begin" "s1_tuplock3" "s2_tuplock3" "s1_commit" -permutation "s1_begin" "s1_tuplock3" "s2_tuplock4" "s1_commit" -permutation "s1_begin" "s1_tuplock4" "s2_tuplock1" "s1_commit" -permutation "s1_begin" "s1_tuplock4" "s2_tuplock2" "s1_commit" -permutation "s1_begin" "s1_tuplock4" "s2_tuplock3" "s1_commit" -permutation "s1_begin" "s1_tuplock4" "s2_tuplock4" "s1_commit" +permutation s1_begin s1_tuplock1 s2_tuplock1 s1_commit +permutation s1_begin s1_tuplock1 s2_tuplock2 s1_commit +permutation s1_begin s1_tuplock1 s2_tuplock3 s1_commit +permutation s1_begin s1_tuplock1 s2_tuplock4 s1_commit +permutation s1_begin s1_tuplock2 s2_tuplock1 s1_commit +permutation s1_begin s1_tuplock2 s2_tuplock2 s1_commit +permutation s1_begin s1_tuplock2 s2_tuplock3 s1_commit +permutation s1_begin s1_tuplock2 s2_tuplock4 s1_commit +permutation s1_begin s1_tuplock3 s2_tuplock1 s1_commit +permutation s1_begin s1_tuplock3 s2_tuplock2 s1_commit +permutation s1_begin s1_tuplock3 s2_tuplock3 s1_commit +permutation s1_begin s1_tuplock3 s2_tuplock4 s1_commit +permutation s1_begin s1_tuplock4 s2_tuplock1 s1_commit +permutation s1_begin s1_tuplock4 s2_tuplock2 s1_commit +permutation s1_begin s1_tuplock4 s2_tuplock3 s1_commit +permutation s1_begin s1_tuplock4 s2_tuplock4 s1_commit diff --git a/src/test/isolation/specs/tuplelock-partition.spec b/src/test/isolation/specs/tuplelock-partition.spec index 9a585cb161519..c267b2885159b 100644 --- a/src/test/isolation/specs/tuplelock-partition.spec +++ b/src/test/isolation/specs/tuplelock-partition.spec @@ -16,17 +16,17 @@ teardown DROP TABLE parttab; } -session "s1" -step "s1b" { BEGIN; } -step "s1update_nokey" { INSERT INTO parttab (key, col1, col2) VALUES (1, 'a', 'b') ON CONFLICT (key) DO UPDATE SET col1 = 'x', col2 = 'y'; } -step "s1update_key" { INSERT INTO parttab (key, col1, col2) VALUES (1, 'a', 'b') ON CONFLICT (key) DO UPDATE SET key=1; } -step "s1c" { COMMIT; } +session s1 +step s1b { BEGIN; } +step s1update_nokey { INSERT INTO parttab (key, col1, col2) VALUES (1, 'a', 'b') ON CONFLICT (key) DO UPDATE SET col1 = 'x', col2 = 'y'; } +step s1update_key { INSERT INTO parttab (key, col1, col2) VALUES (1, 'a', 'b') ON CONFLICT (key) DO UPDATE SET key=1; } +step s1c { COMMIT; } -session "s2" -step "s2locktuple" { SELECT * FROM parttab FOR KEY SHARE; } +session s2 +step s2locktuple { SELECT * FROM parttab FOR KEY SHARE; } # INSERT ON CONFLICT UPDATE, performs an UPDATE on non-key columns -permutation "s1b" "s1update_nokey" "s2locktuple" "s1c" +permutation s1b s1update_nokey s2locktuple s1c # INSERT ON CONFLICT UPDATE, performs an UPDATE on key column -permutation "s1b" "s1update_key" "s2locktuple" "s1c" +permutation s1b s1update_key s2locktuple s1c diff --git a/src/test/isolation/specs/tuplelock-update.spec b/src/test/isolation/specs/tuplelock-update.spec index d3de0bcbc7880..4b940bcb124fa 100644 --- a/src/test/isolation/specs/tuplelock-update.spec +++ b/src/test/isolation/specs/tuplelock-update.spec @@ -8,30 +8,30 @@ teardown { DROP TABLE pktab; } -session "s1" -step "s1_advlock" { +session s1 +step s1_advlock { SELECT pg_advisory_lock(142857), pg_advisory_lock(285714), pg_advisory_lock(571428); } -step "s1_chain" { UPDATE pktab SET data = DEFAULT; } -step "s1_begin" { BEGIN; } -step "s1_grablock" { SELECT * FROM pktab FOR KEY SHARE; } -step "s1_advunlock1" { SELECT pg_advisory_unlock(142857); } -step "s1_advunlock2" { SELECT pg_advisory_unlock(285714); } -step "s1_advunlock3" { SELECT pg_advisory_unlock(571428); } -step "s1_commit" { COMMIT; } +step s1_chain { UPDATE pktab SET data = DEFAULT; } +step s1_begin { BEGIN; } +step s1_grablock { SELECT * FROM pktab FOR KEY SHARE; } +step s1_advunlock1 { SELECT pg_advisory_unlock(142857); } +step s1_advunlock2 { SELECT pg_advisory_unlock(285714); } +step s1_advunlock3 { SELECT pg_advisory_unlock(571428); } +step s1_commit { COMMIT; } -session "s2" -step "s2_update" { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(142857) IS NOT NULL; } +session s2 +step s2_update { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(142857) IS NOT NULL; } -session "s3" -step "s3_update" { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(285714) IS NOT NULL; } +session s3 +step s3_update { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(285714) IS NOT NULL; } -session "s4" -step "s4_update" { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(571428) IS NOT NULL; } +session s4 +step s4_update { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(571428) IS NOT NULL; } # We use blocker annotations on the s1_advunlockN steps so that we will not # move on to the next step until the other session's released step finishes. # This ensures stable ordering of the test output. -permutation "s1_advlock" "s2_update" "s3_update" "s4_update" "s1_chain" "s1_begin" "s1_grablock" "s1_advunlock1"("s2_update") "s1_advunlock2"("s3_update") "s1_advunlock3"("s4_update") "s1_commit" +permutation s1_advlock s2_update s3_update s4_update s1_chain s1_begin s1_grablock s1_advunlock1(s2_update) s1_advunlock2(s3_update) s1_advunlock3(s4_update) s1_commit diff --git a/src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec b/src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec index 106c2465c0aeb..6221a27f4b0ba 100644 --- a/src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec +++ b/src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec @@ -16,54 +16,54 @@ teardown drop table tlu_job; } -session "s0" -step "s0_begin" { begin; } -step "s0_keyshare" { select id from tlu_job where id = 1 for key share;} -step "s0_rollback" { rollback; } +session s0 +step s0_begin { begin; } +step s0_keyshare { select id from tlu_job where id = 1 for key share;} +step s0_rollback { rollback; } -session "s1" +session s1 setup { begin; } -step "s1_keyshare" { select id from tlu_job where id = 1 for key share;} -step "s1_share" { select id from tlu_job where id = 1 for share; } -step "s1_fornokeyupd" { select id from tlu_job where id = 1 for no key update; } -step "s1_update" { update tlu_job set name = 'b' where id = 1; } -step "s1_savept_e" { savepoint s1_e; } -step "s1_savept_f" { savepoint s1_f; } -step "s1_rollback_e" { rollback to s1_e; } -step "s1_rollback_f" { rollback to s1_f; } -step "s1_rollback" { rollback; } -step "s1_commit" { commit; } +step s1_keyshare { select id from tlu_job where id = 1 for key share;} +step s1_share { select id from tlu_job where id = 1 for share; } +step s1_fornokeyupd { select id from tlu_job where id = 1 for no key update; } +step s1_update { update tlu_job set name = 'b' where id = 1; } +step s1_savept_e { savepoint s1_e; } +step s1_savept_f { savepoint s1_f; } +step s1_rollback_e { rollback to s1_e; } +step s1_rollback_f { rollback to s1_f; } +step s1_rollback { rollback; } +step s1_commit { commit; } -session "s2" +session s2 setup { begin; } -step "s2_for_keyshare" { select id from tlu_job where id = 1 for key share; } -step "s2_fornokeyupd" { select id from tlu_job where id = 1 for no key update; } -step "s2_for_update" { select id from tlu_job where id = 1 for update; } -step "s2_update" { update tlu_job set name = 'b' where id = 1; } -step "s2_delete" { delete from tlu_job where id = 1; } -step "s2_rollback" { rollback; } +step s2_for_keyshare { select id from tlu_job where id = 1 for key share; } +step s2_fornokeyupd { select id from tlu_job where id = 1 for no key update; } +step s2_for_update { select id from tlu_job where id = 1 for update; } +step s2_update { update tlu_job set name = 'b' where id = 1; } +step s2_delete { delete from tlu_job where id = 1; } +step s2_rollback { rollback; } -session "s3" +session s3 setup { begin; } -step "s3_keyshare" { select id from tlu_job where id = 1 for key share; } -step "s3_share" { select id from tlu_job where id = 1 for share; } -step "s3_for_update" { select id from tlu_job where id = 1 for update; } -step "s3_update" { update tlu_job set name = 'c' where id = 1; } -step "s3_delete" { delete from tlu_job where id = 1; } -step "s3_rollback" { rollback; } -step "s3_commit" { commit; } +step s3_keyshare { select id from tlu_job where id = 1 for key share; } +step s3_share { select id from tlu_job where id = 1 for share; } +step s3_for_update { select id from tlu_job where id = 1 for update; } +step s3_update { update tlu_job set name = 'c' where id = 1; } +step s3_delete { delete from tlu_job where id = 1; } +step s3_rollback { rollback; } +step s3_commit { commit; } # test that s2 will not deadlock with s3 when s1 is rolled back -permutation "s1_share" "s2_for_update" "s3_share" "s3_for_update" "s1_rollback" "s3_rollback" "s2_rollback" +permutation s1_share s2_for_update s3_share s3_for_update s1_rollback s3_rollback s2_rollback # test that update does not cause deadlocks if it can proceed -permutation "s1_keyshare" "s2_for_update" "s3_keyshare" "s1_update" "s3_update" "s1_rollback" "s3_rollback" "s2_rollback" -permutation "s1_keyshare" "s2_for_update" "s3_keyshare" "s1_update" "s3_update" "s1_commit" "s3_rollback" "s2_rollback" +permutation s1_keyshare s2_for_update s3_keyshare s1_update s3_update s1_rollback s3_rollback s2_rollback +permutation s1_keyshare s2_for_update s3_keyshare s1_update s3_update s1_commit s3_rollback s2_rollback # test that delete does not cause deadlocks if it can proceed -permutation "s1_keyshare" "s2_for_update" "s3_keyshare" "s3_delete" "s1_rollback" "s3_rollback" "s2_rollback" -permutation "s1_keyshare" "s2_for_update" "s3_keyshare" "s3_delete" "s1_rollback" "s3_commit" "s2_rollback" +permutation s1_keyshare s2_for_update s3_keyshare s3_delete s1_rollback s3_rollback s2_rollback +permutation s1_keyshare s2_for_update s3_keyshare s3_delete s1_rollback s3_commit s2_rollback # test that sessions that don't upgrade locks acquire them in order -permutation "s1_share" "s2_for_update" "s3_for_update" "s1_rollback" "s2_rollback" "s3_rollback" -permutation "s1_share" "s2_update" "s3_update" "s1_rollback" "s2_rollback" "s3_rollback" -permutation "s1_share" "s2_delete" "s3_delete" "s1_rollback" "s2_rollback" "s3_rollback" +permutation s1_share s2_for_update s3_for_update s1_rollback s2_rollback s3_rollback +permutation s1_share s2_update s3_update s1_rollback s2_rollback s3_rollback +permutation s1_share s2_delete s3_delete s1_rollback s2_rollback s3_rollback # test s2 retrying the overall tuple lock algorithm after initially avoiding deadlock -permutation "s1_keyshare" "s3_for_update" "s2_for_keyshare" "s1_savept_e" "s1_share" "s1_savept_f" "s1_fornokeyupd" "s2_fornokeyupd" "s0_begin" "s0_keyshare" "s1_rollback_f" "s0_keyshare" "s1_rollback_e" "s1_rollback" "s2_rollback" "s0_rollback" "s3_rollback" +permutation s1_keyshare s3_for_update s2_for_keyshare s1_savept_e s1_share s1_savept_f s1_fornokeyupd s2_fornokeyupd s0_begin s0_keyshare s1_rollback_f s0_keyshare s1_rollback_e s1_rollback s2_rollback s0_rollback s3_rollback diff --git a/src/test/isolation/specs/two-ids.spec b/src/test/isolation/specs/two-ids.spec index 277097125ac1a..fc0289f236d7d 100644 --- a/src/test/isolation/specs/two-ids.spec +++ b/src/test/isolation/specs/two-ids.spec @@ -24,17 +24,17 @@ teardown DROP TABLE D1, D2; } -session "s1" +session s1 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "wx1" { update D1 set id = id + 1; } -step "c1" { COMMIT; } +step wx1 { update D1 set id = id + 1; } +step c1 { COMMIT; } -session "s2" +session s2 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "rxwy2" { update D2 set id = (select id+1 from D1); } -step "c2" { COMMIT; } +step rxwy2 { update D2 set id = (select id+1 from D1); } +step c2 { COMMIT; } -session "s3" +session s3 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } -step "ry3" { select id from D2; } -step "c3" { COMMIT; } +step ry3 { select id from D2; } +step c3 { COMMIT; } diff --git a/src/test/isolation/specs/update-conflict-out.spec b/src/test/isolation/specs/update-conflict-out.spec index 25c27d4ca6572..8aad6aa661970 100644 --- a/src/test/isolation/specs/update-conflict-out.spec +++ b/src/test/isolation/specs/update-conflict-out.spec @@ -16,39 +16,39 @@ teardown DROP TABLE txn1; } -session "foo" +session foo setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } -step "foo_select" { SELECT * FROM txn0 WHERE id = 42; } -step "foo_insert" { INSERT INTO txn1 SELECT 7, 'foo_insert'; } -step "foo_commit" { COMMIT; } +step foo_select { SELECT * FROM txn0 WHERE id = 42; } +step foo_insert { INSERT INTO txn1 SELECT 7, 'foo_insert'; } +step foo_commit { COMMIT; } -session "bar" +session bar setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } -step "bar_select" { SELECT * FROM txn1 WHERE id = 7; } -step "bar_insert" { INSERT INTO txn0 SELECT 42, 'bar_insert'; } -step "bar_commit" { COMMIT; } +step bar_select { SELECT * FROM txn1 WHERE id = 7; } +step bar_insert { INSERT INTO txn0 SELECT 42, 'bar_insert'; } +step bar_commit { COMMIT; } # This session creates the conditions that confused bar's "conflict out" # handling in old releases affected by bug: -session "trouble" +session trouble setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } -step "trouble_update" { UPDATE txn1 SET val = 'add physical version for "bar_select"' WHERE id = 7; } -step "trouble_delete" { DELETE FROM txn1 WHERE id = 7; } -step "trouble_abort" { ABORT; } +step trouble_update { UPDATE txn1 SET val = 'add physical version for "bar_select"' WHERE id = 7; } +step trouble_delete { DELETE FROM txn1 WHERE id = 7; } +step trouble_abort { ABORT; } -permutation "foo_select" - "bar_insert" - "foo_insert" "foo_commit" - "trouble_update" # Updates tuple... - "bar_select" # Should observe one distinct XID per version - "bar_commit" # "bar" should fail here at the latest - "trouble_abort" +permutation foo_select + bar_insert + foo_insert foo_commit + trouble_update # Updates tuple... + bar_select # Should observe one distinct XID per version + bar_commit # "bar" should fail here at the latest + trouble_abort # Same as above, but "trouble" session DELETEs this time around -permutation "foo_select" - "bar_insert" - "foo_insert" "foo_commit" - "trouble_delete" # Deletes tuple... - "bar_select" # Should observe foo's XID - "bar_commit" # "bar" should fail here at the latest - "trouble_abort" +permutation foo_select + bar_insert + foo_insert foo_commit + trouble_delete # Deletes tuple... + bar_select # Should observe foo's XID + bar_commit # "bar" should fail here at the latest + trouble_abort diff --git a/src/test/isolation/specs/update-locked-tuple.spec b/src/test/isolation/specs/update-locked-tuple.spec index 10dd3ef3d23df..0dad792e79803 100644 --- a/src/test/isolation/specs/update-locked-tuple.spec +++ b/src/test/isolation/specs/update-locked-tuple.spec @@ -19,20 +19,20 @@ teardown DROP TABLE users, orders; } -session "s1" -step "s1b" { BEGIN ISOLATION LEVEL REPEATABLE READ; } -step "s1u1" { UPDATE orders SET name = 'order of olivier (2)', user_id = 1 WHERE id = 1; } -step "s1u2" { UPDATE orders SET name = 'order of olivier (3)', user_id = 1 WHERE id = 1; } -step "s1c" { COMMIT; } +session s1 +step s1b { BEGIN ISOLATION LEVEL REPEATABLE READ; } +step s1u1 { UPDATE orders SET name = 'order of olivier (2)', user_id = 1 WHERE id = 1; } +step s1u2 { UPDATE orders SET name = 'order of olivier (3)', user_id = 1 WHERE id = 1; } +step s1c { COMMIT; } -session "s2" -step "s2b" { BEGIN ISOLATION LEVEL REPEATABLE READ; } -step "s2u" { UPDATE users SET sometime = '1830-10-04' WHERE id = 1; } -step "s2c" { COMMIT; } +session s2 +step s2b { BEGIN ISOLATION LEVEL REPEATABLE READ; } +step s2u { UPDATE users SET sometime = '1830-10-04' WHERE id = 1; } +step s2c { COMMIT; } -permutation "s1b" "s2b" "s2u" "s2c" "s1u1" "s1u2" "s1c" -permutation "s1b" "s2b" "s2u" "s1u1" "s2c" "s1u2" "s1c" -permutation "s1b" "s2b" "s1u1" "s2u" "s2c" "s1u2" "s1c" -permutation "s1b" "s1u1" "s2b" "s2u" "s2c" "s1u2" "s1c" -permutation "s1b" "s1u1" "s2b" "s1u2" "s2u" "s2c" "s1c" -permutation "s1b" "s1u1" "s1u2" "s2b" "s2u" "s2c" "s1c" +permutation s1b s2b s2u s2c s1u1 s1u2 s1c +permutation s1b s2b s2u s1u1 s2c s1u2 s1c +permutation s1b s2b s1u1 s2u s2c s1u2 s1c +permutation s1b s1u1 s2b s2u s2c s1u2 s1c +permutation s1b s1u1 s2b s1u2 s2u s2c s1c +permutation s1b s1u1 s1u2 s2b s2u s2c s1c diff --git a/src/test/isolation/specs/vacuum-concurrent-drop.spec b/src/test/isolation/specs/vacuum-concurrent-drop.spec index cae40926677f1..148a2d5c5232a 100644 --- a/src/test/isolation/specs/vacuum-concurrent-drop.spec +++ b/src/test/isolation/specs/vacuum-concurrent-drop.spec @@ -17,29 +17,29 @@ teardown DROP TABLE IF EXISTS parted; } -session "s1" -step "lock" +session s1 +step lock { BEGIN; LOCK part1 IN SHARE MODE; } -step "drop_and_commit" +step drop_and_commit { DROP TABLE part2; COMMIT; } -session "s2" -step "vac_specified" { VACUUM part1, part2; } -step "vac_all_parts" { VACUUM parted; } -step "analyze_specified" { ANALYZE part1, part2; } -step "analyze_all_parts" { ANALYZE parted; } -step "vac_analyze_specified" { VACUUM ANALYZE part1, part2; } -step "vac_analyze_all_parts" { VACUUM ANALYZE parted; } +session s2 +step vac_specified { VACUUM part1, part2; } +step vac_all_parts { VACUUM parted; } +step analyze_specified { ANALYZE part1, part2; } +step analyze_all_parts { ANALYZE parted; } +step vac_analyze_specified { VACUUM ANALYZE part1, part2; } +step vac_analyze_all_parts { VACUUM ANALYZE parted; } -permutation "lock" "vac_specified" "drop_and_commit" -permutation "lock" "vac_all_parts" "drop_and_commit" -permutation "lock" "analyze_specified" "drop_and_commit" -permutation "lock" "analyze_all_parts" "drop_and_commit" -permutation "lock" "vac_analyze_specified" "drop_and_commit" -permutation "lock" "vac_analyze_all_parts" "drop_and_commit" +permutation lock vac_specified drop_and_commit +permutation lock vac_all_parts drop_and_commit +permutation lock analyze_specified drop_and_commit +permutation lock analyze_all_parts drop_and_commit +permutation lock vac_analyze_specified drop_and_commit +permutation lock vac_analyze_all_parts drop_and_commit diff --git a/src/test/isolation/specs/vacuum-conflict.spec b/src/test/isolation/specs/vacuum-conflict.spec index 9b45d26c65b7d..3cb89260dc1e0 100644 --- a/src/test/isolation/specs/vacuum-conflict.spec +++ b/src/test/isolation/specs/vacuum-conflict.spec @@ -12,40 +12,40 @@ teardown DROP ROLE regress_vacuum_conflict; } -session "s1" -step "s1_begin" { BEGIN; } -step "s1_lock" { LOCK vacuum_tab IN SHARE UPDATE EXCLUSIVE MODE; } -step "s1_commit" { COMMIT; } - -session "s2" -step "s2_grant" { ALTER TABLE vacuum_tab OWNER TO regress_vacuum_conflict; } -step "s2_auth" { SET ROLE regress_vacuum_conflict; } -step "s2_vacuum" { VACUUM vacuum_tab; } -step "s2_analyze" { ANALYZE vacuum_tab; } -step "s2_reset" { RESET ROLE; } +session s1 +step s1_begin { BEGIN; } +step s1_lock { LOCK vacuum_tab IN SHARE UPDATE EXCLUSIVE MODE; } +step s1_commit { COMMIT; } + +session s2 +step s2_grant { ALTER TABLE vacuum_tab OWNER TO regress_vacuum_conflict; } +step s2_auth { SET ROLE regress_vacuum_conflict; } +step s2_vacuum { VACUUM vacuum_tab; } +step s2_analyze { ANALYZE vacuum_tab; } +step s2_reset { RESET ROLE; } # The role doesn't have privileges to vacuum the table, so VACUUM should # immediately skip the table without waiting for a lock. -permutation "s1_begin" "s1_lock" "s2_auth" "s2_vacuum" "s1_commit" "s2_reset" -permutation "s1_begin" "s2_auth" "s2_vacuum" "s1_lock" "s1_commit" "s2_reset" -permutation "s1_begin" "s2_auth" "s1_lock" "s2_vacuum" "s1_commit" "s2_reset" -permutation "s2_auth" "s2_vacuum" "s1_begin" "s1_lock" "s1_commit" "s2_reset" +permutation s1_begin s1_lock s2_auth s2_vacuum s1_commit s2_reset +permutation s1_begin s2_auth s2_vacuum s1_lock s1_commit s2_reset +permutation s1_begin s2_auth s1_lock s2_vacuum s1_commit s2_reset +permutation s2_auth s2_vacuum s1_begin s1_lock s1_commit s2_reset # Same as previously for ANALYZE -permutation "s1_begin" "s1_lock" "s2_auth" "s2_analyze" "s1_commit" "s2_reset" -permutation "s1_begin" "s2_auth" "s2_analyze" "s1_lock" "s1_commit" "s2_reset" -permutation "s1_begin" "s2_auth" "s1_lock" "s2_analyze" "s1_commit" "s2_reset" -permutation "s2_auth" "s2_analyze" "s1_begin" "s1_lock" "s1_commit" "s2_reset" +permutation s1_begin s1_lock s2_auth s2_analyze s1_commit s2_reset +permutation s1_begin s2_auth s2_analyze s1_lock s1_commit s2_reset +permutation s1_begin s2_auth s1_lock s2_analyze s1_commit s2_reset +permutation s2_auth s2_analyze s1_begin s1_lock s1_commit s2_reset # The role has privileges to vacuum the table, VACUUM will block if # another session holds a lock on the table and succeed in all cases. -permutation "s1_begin" "s2_grant" "s1_lock" "s2_auth" "s2_vacuum" "s1_commit" "s2_reset" -permutation "s1_begin" "s2_grant" "s2_auth" "s2_vacuum" "s1_lock" "s1_commit" "s2_reset" -permutation "s1_begin" "s2_grant" "s2_auth" "s1_lock" "s2_vacuum" "s1_commit" "s2_reset" -permutation "s2_grant" "s2_auth" "s2_vacuum" "s1_begin" "s1_lock" "s1_commit" "s2_reset" +permutation s1_begin s2_grant s1_lock s2_auth s2_vacuum s1_commit s2_reset +permutation s1_begin s2_grant s2_auth s2_vacuum s1_lock s1_commit s2_reset +permutation s1_begin s2_grant s2_auth s1_lock s2_vacuum s1_commit s2_reset +permutation s2_grant s2_auth s2_vacuum s1_begin s1_lock s1_commit s2_reset # Same as previously for ANALYZE -permutation "s1_begin" "s2_grant" "s1_lock" "s2_auth" "s2_analyze" "s1_commit" "s2_reset" -permutation "s1_begin" "s2_grant" "s2_auth" "s2_analyze" "s1_lock" "s1_commit" "s2_reset" -permutation "s1_begin" "s2_grant" "s2_auth" "s1_lock" "s2_analyze" "s1_commit" "s2_reset" -permutation "s2_grant" "s2_auth" "s2_analyze" "s1_begin" "s1_lock" "s1_commit" "s2_reset" +permutation s1_begin s2_grant s1_lock s2_auth s2_analyze s1_commit s2_reset +permutation s1_begin s2_grant s2_auth s2_analyze s1_lock s1_commit s2_reset +permutation s1_begin s2_grant s2_auth s1_lock s2_analyze s1_commit s2_reset +permutation s2_grant s2_auth s2_analyze s1_begin s1_lock s1_commit s2_reset diff --git a/src/test/isolation/specs/vacuum-reltuples.spec b/src/test/isolation/specs/vacuum-reltuples.spec index 6d9fa010b3c0a..ae2f79b8fe89a 100644 --- a/src/test/isolation/specs/vacuum-reltuples.spec +++ b/src/test/isolation/specs/vacuum-reltuples.spec @@ -19,30 +19,30 @@ teardown { drop table smalltbl; } -session "worker" -step "open" { +session worker +step open { begin; declare c1 cursor for select 1 as dummy from smalltbl; } -step "fetch1" { +step fetch1 { fetch next from c1; } -step "close" { +step close { commit; } -step "stats" { +step stats { select relpages, reltuples from pg_class where oid='smalltbl'::regclass; } -session "vacuumer" -step "vac" { +session vacuumer +step vac { vacuum smalltbl; } -step "modify" { +step modify { insert into smalltbl select max(id)+1 from smalltbl; } -permutation "modify" "vac" "stats" -permutation "modify" "open" "fetch1" "vac" "close" "stats" -permutation "modify" "vac" "stats" +permutation modify vac stats +permutation modify open fetch1 vac close stats +permutation modify vac stats diff --git a/src/test/isolation/specs/vacuum-skip-locked.spec b/src/test/isolation/specs/vacuum-skip-locked.spec index 4f749e74b6aad..3fad6e1c92a58 100644 --- a/src/test/isolation/specs/vacuum-skip-locked.spec +++ b/src/test/isolation/specs/vacuum-skip-locked.spec @@ -17,45 +17,45 @@ teardown DROP TABLE IF EXISTS parted; } -session "s1" -step "lock_share" +session s1 +step lock_share { BEGIN; LOCK part1 IN SHARE MODE; } -step "lock_access_exclusive" +step lock_access_exclusive { BEGIN; LOCK part1 IN ACCESS EXCLUSIVE MODE; } -step "commit" +step commit { COMMIT; } -session "s2" -step "vac_specified" { VACUUM (SKIP_LOCKED) part1, part2; } -step "vac_all_parts" { VACUUM (SKIP_LOCKED) parted; } -step "analyze_specified" { ANALYZE (SKIP_LOCKED) part1, part2; } -step "analyze_all_parts" { ANALYZE (SKIP_LOCKED) parted; } -step "vac_analyze_specified" { VACUUM (ANALYZE, SKIP_LOCKED) part1, part2; } -step "vac_analyze_all_parts" { VACUUM (ANALYZE, SKIP_LOCKED) parted; } -step "vac_full_specified" { VACUUM (SKIP_LOCKED, FULL) part1, part2; } -step "vac_full_all_parts" { VACUUM (SKIP_LOCKED, FULL) parted; } +session s2 +step vac_specified { VACUUM (SKIP_LOCKED) part1, part2; } +step vac_all_parts { VACUUM (SKIP_LOCKED) parted; } +step analyze_specified { ANALYZE (SKIP_LOCKED) part1, part2; } +step analyze_all_parts { ANALYZE (SKIP_LOCKED) parted; } +step vac_analyze_specified { VACUUM (ANALYZE, SKIP_LOCKED) part1, part2; } +step vac_analyze_all_parts { VACUUM (ANALYZE, SKIP_LOCKED) parted; } +step vac_full_specified { VACUUM (SKIP_LOCKED, FULL) part1, part2; } +step vac_full_all_parts { VACUUM (SKIP_LOCKED, FULL) parted; } -permutation "lock_share" "vac_specified" "commit" -permutation "lock_share" "vac_all_parts" "commit" -permutation "lock_share" "analyze_specified" "commit" -permutation "lock_share" "analyze_all_parts" "commit" -permutation "lock_share" "vac_analyze_specified" "commit" -permutation "lock_share" "vac_analyze_all_parts" "commit" -permutation "lock_share" "vac_full_specified" "commit" -permutation "lock_share" "vac_full_all_parts" "commit" -permutation "lock_access_exclusive" "vac_specified" "commit" -permutation "lock_access_exclusive" "vac_all_parts" "commit" -permutation "lock_access_exclusive" "analyze_specified" "commit" -permutation "lock_access_exclusive" "analyze_all_parts" "commit" -permutation "lock_access_exclusive" "vac_analyze_specified" "commit" -permutation "lock_access_exclusive" "vac_analyze_all_parts" "commit" -permutation "lock_access_exclusive" "vac_full_specified" "commit" -permutation "lock_access_exclusive" "vac_full_all_parts" "commit" +permutation lock_share vac_specified commit +permutation lock_share vac_all_parts commit +permutation lock_share analyze_specified commit +permutation lock_share analyze_all_parts commit +permutation lock_share vac_analyze_specified commit +permutation lock_share vac_analyze_all_parts commit +permutation lock_share vac_full_specified commit +permutation lock_share vac_full_all_parts commit +permutation lock_access_exclusive vac_specified commit +permutation lock_access_exclusive vac_all_parts commit +permutation lock_access_exclusive analyze_specified commit +permutation lock_access_exclusive analyze_all_parts commit +permutation lock_access_exclusive vac_analyze_specified commit +permutation lock_access_exclusive vac_analyze_all_parts commit +permutation lock_access_exclusive vac_full_specified commit +permutation lock_access_exclusive vac_full_all_parts commit diff --git a/src/test/isolation/specscanner.l b/src/test/isolation/specscanner.l index a733bcf3554da..5de11abab510a 100644 --- a/src/test/isolation/specscanner.l +++ b/src/test/isolation/specscanner.l @@ -34,17 +34,21 @@ static void addlitchar(char c); %x sql -%x qstr - -digit [0123456789] - -self [,()*] +%x qident non_newline [^\n\r] space [ \t\r\f] comment ("#"{non_newline}*) +digit [0-9] +ident_start [A-Za-z\200-\377_] +ident_cont [A-Za-z\200-\377_0-9\$] + +identifier {ident_start}{ident_cont}* + +self [,()*] + %% %{ @@ -52,6 +56,7 @@ comment ("#"{non_newline}*) litbufsize = LITBUF_INIT; %} + /* Keywords (must appear before the {identifier} rule!) */ notices { return NOTICES; } permutation { return PERMUTATION; } session { return SESSION; } @@ -59,33 +64,35 @@ setup { return SETUP; } step { return STEP; } teardown { return TEARDOWN; } -{digit}+ { - yylval.integer = atoi(yytext); - return INTEGER; - } - -{self} { return yytext[0]; } - + /* Whitespace and comments */ [\n] { yyline++; } {comment} { /* ignore */ } {space} { /* ignore */ } - /* Quoted strings: "foo" */ + /* Plain identifiers */ +{identifier} { + yylval.str = pg_strdup(yytext); + return(identifier); + } + + /* Quoted identifiers: "foo" */ \" { litbufpos = 0; - BEGIN(qstr); + BEGIN(qident); } -\" { +\"\" { addlitchar(yytext[0]); } +\" { litbuf[litbufpos] = '\0'; yylval.str = pg_strdup(litbuf); BEGIN(INITIAL); - return(string_literal); + return(identifier); } -. { addlitchar(yytext[0]); } -\n { yyerror("unexpected newline in quoted string"); } -<> { yyerror("unterminated quoted string"); } +. { addlitchar(yytext[0]); } +\n { yyerror("unexpected newline in quoted identifier"); } +<> { yyerror("unterminated quoted identifier"); } /* SQL blocks: { UPDATE ... } */ + /* We trim leading/trailing whitespace, otherwise they're unprocessed */ "{"{space}* { litbufpos = 0; @@ -108,6 +115,15 @@ teardown { return TEARDOWN; } yyerror("unterminated sql block"); } + /* Numbers and punctuation */ +{digit}+ { + yylval.integer = atoi(yytext); + return INTEGER; + } + +{self} { return yytext[0]; } + + /* Anything else is an error */ . { fprintf(stderr, "syntax error at line %d: unexpected character \"%s\"\n", yyline, yytext); exit(1); From c66fb78ebb4f473bb4fd8773de3cda9339e14f81 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Thu, 24 Jun 2021 09:13:46 +0530 Subject: [PATCH 516/671] Doc: Update caveats in synchronous logical replication. Reported-by: Simon Riggs Author: Takamichi Osumi Reviewed-by: Amit Kapila Backpatch-through: 9.6 Discussion: https://www.postgresql.org/message-id/20210222222847.tpnb6eg3yiykzpky@alap3.anarazel.de --- doc/src/sgml/logicaldecoding.sgml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/doc/src/sgml/logicaldecoding.sgml b/doc/src/sgml/logicaldecoding.sgml index 1765ea6c87e6e..53f1466e429b9 100644 --- a/doc/src/sgml/logicaldecoding.sgml +++ b/doc/src/sgml/logicaldecoding.sgml @@ -1097,16 +1097,18 @@ OutputPluginWrite(ctx, true); In synchronous replication setup, a deadlock can happen, if the transaction - has locked [user] catalog tables exclusively. This is because logical decoding of - transactions can lock catalog tables to access them. To avoid this users - must refrain from taking an exclusive lock on [user] catalog tables. This can - happen in the following ways: + has locked [user] catalog tables exclusively. See + for information on user + catalog tables. This is because logical decoding of transactions can lock + catalog tables to access them. To avoid this users must refrain from taking + an exclusive lock on [user] catalog tables. This can happen in the following + ways: Issuing an explicit LOCK on pg_class - (or any other catalog table) in a transaction. + in a transaction. @@ -1141,6 +1143,10 @@ OutputPluginWrite(ctx, true); + + Note that these commands that can cause deadlock apply to not only explicitly + indicated system catalog tables above but also to any other [user] catalog + table. @@ -1311,7 +1317,7 @@ stream_commit_cb(...); <-- commit of the streamed transaction [user] catalog tables exclusively. To avoid this users must refrain from having locks on catalog tables (e.g. explicit LOCK command) in such transactions. - (See for the details.) + See for the details. From f08722cf83ab1fabee948a4e5754bf6236ad700b Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Thu, 24 Jun 2021 11:51:58 +0530 Subject: [PATCH 517/671] Doc: Update logical replication message formats. Commits 9de77b5453 and ac4645c015 missed to update the logical replication message formats section in the docs. Author: Brar Piening Reviewed-by: Amit Kapila Discussion: https://www.postgresql.org/message-id/cc70956c-e578-e54f-49e6-b5d68c89576f@gmx.de --- doc/src/sgml/protocol.sgml | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index bc2a2feb0b951..01e87617f4051 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -6498,6 +6498,18 @@ Message + + + + Int32 + + + + Length of the content. + + + + Byten @@ -7430,6 +7442,19 @@ TupleData + + Or + + + + Byte1('b') + + + + Identifies the data as binary formatted value. + + + Int32 @@ -7446,8 +7471,8 @@ TupleData - The value of the column, in text format. (A future release - might support additional formats.) + The value of the column, either in binary or in text format. + (As specified in the preceding format byte). n is the above length. From b6d8d2073f228d9f7198f1f9826d8f6ab643c219 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Thu, 24 Jun 2021 10:45:23 +0300 Subject: [PATCH 518/671] Prevent race condition while reading relmapper file. Contrary to the comment here, POSIX does not guarantee atomicity of a read(), if another process calls write() concurrently. Or at least Linux does not. Add locking to load_relmap_file() to avoid the race condition. Fixes bug #17064. Thanks to Alexander Lakhin for the report and test case. Backpatch-through: 9.6, all supported versions. Discussion: https://www.postgresql.org/message-id/17064-bb0d7904ef72add3@postgresql.org --- src/backend/utils/cache/relmapper.c | 34 +++++++++++++++++------------ 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/backend/utils/cache/relmapper.c b/src/backend/utils/cache/relmapper.c index 424624cf0dad2..34363b70c2019 100644 --- a/src/backend/utils/cache/relmapper.c +++ b/src/backend/utils/cache/relmapper.c @@ -136,7 +136,7 @@ static void apply_map_update(RelMapFile *map, Oid relationId, Oid fileNode, bool add_okay); static void merge_map_updates(RelMapFile *map, const RelMapFile *updates, bool add_okay); -static void load_relmap_file(bool shared); +static void load_relmap_file(bool shared, bool lock_held); static void write_relmap_file(bool shared, RelMapFile *newmap, bool write_wal, bool send_sinval, bool preserve_files, Oid dbid, Oid tsid, const char *dbpath); @@ -405,12 +405,12 @@ RelationMapInvalidate(bool shared) if (shared) { if (shared_map.magic == RELMAPPER_FILEMAGIC) - load_relmap_file(true); + load_relmap_file(true, false); } else { if (local_map.magic == RELMAPPER_FILEMAGIC) - load_relmap_file(false); + load_relmap_file(false, false); } } @@ -425,9 +425,9 @@ void RelationMapInvalidateAll(void) { if (shared_map.magic == RELMAPPER_FILEMAGIC) - load_relmap_file(true); + load_relmap_file(true, false); if (local_map.magic == RELMAPPER_FILEMAGIC) - load_relmap_file(false); + load_relmap_file(false, false); } /* @@ -612,7 +612,7 @@ RelationMapInitializePhase2(void) /* * Load the shared map file, die on error. */ - load_relmap_file(true); + load_relmap_file(true, false); } /* @@ -633,7 +633,7 @@ RelationMapInitializePhase3(void) /* * Load the local map file, die on error. */ - load_relmap_file(false); + load_relmap_file(false, false); } /* @@ -695,7 +695,7 @@ RestoreRelationMap(char *startAddress) * Note that the local case requires DatabasePath to be set up. */ static void -load_relmap_file(bool shared) +load_relmap_file(bool shared, bool lock_held) { RelMapFile *map; char mapfilename[MAXPGPATH]; @@ -725,12 +725,15 @@ load_relmap_file(bool shared) mapfilename))); /* - * Note: we could take RelationMappingLock in shared mode here, but it - * seems unnecessary since our read() should be atomic against any - * concurrent updater's write(). If the file is updated shortly after we - * look, the sinval signaling mechanism will make us re-read it before we - * are able to access any relation that's affected by the change. + * Grab the lock to prevent the file from being updated while we read it, + * unless the caller is already holding the lock. If the file is updated + * shortly after we look, the sinval signaling mechanism will make us + * re-read it before we are able to access any relation that's affected by + * the change. */ + if (!lock_held) + LWLockAcquire(RelationMappingLock, LW_SHARED); + pgstat_report_wait_start(WAIT_EVENT_RELATION_MAP_READ); r = read(fd, map, sizeof(RelMapFile)); if (r != sizeof(RelMapFile)) @@ -747,6 +750,9 @@ load_relmap_file(bool shared) } pgstat_report_wait_end(); + if (!lock_held) + LWLockRelease(RelationMappingLock); + if (CloseTransientFile(fd) != 0) ereport(FATAL, (errcode_for_file_access(), @@ -969,7 +975,7 @@ perform_relmap_update(bool shared, const RelMapFile *updates) LWLockAcquire(RelationMappingLock, LW_EXCLUSIVE); /* Be certain we see any other updates just made */ - load_relmap_file(shared); + load_relmap_file(shared, true); /* Prepare updated data in a local variable */ if (shared) From 9b8ed0f52bffceaccf6fa650ffe482e7da20fbf2 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Thu, 24 Jun 2021 11:19:03 +0300 Subject: [PATCH 519/671] Another fix to relmapper race condition. In previous commit, I missed that relmap_redo() was also not acquiring the RelationMappingLock. Thanks to Thomas Munro for pointing that out. Backpatch-through: 9.6, like previous commit. Discussion: https://www.postgresql.org/message-id/CA%2BhUKGLev%3DPpOSaL3WRZgOvgk217et%2BbxeJcRr4eR-NttP1F6Q%40mail.gmail.com --- src/backend/utils/cache/relmapper.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/cache/relmapper.c b/src/backend/utils/cache/relmapper.c index 34363b70c2019..a6e38adce307d 100644 --- a/src/backend/utils/cache/relmapper.c +++ b/src/backend/utils/cache/relmapper.c @@ -1030,12 +1030,13 @@ relmap_redo(XLogReaderState *record) * preserve files, either. * * There shouldn't be anyone else updating relmaps during WAL replay, - * so we don't bother to take the RelationMappingLock. We would need - * to do so if load_relmap_file needed to interlock against writers. + * but grab the lock to interlock against load_relmap_file(). */ + LWLockAcquire(RelationMappingLock, LW_EXCLUSIVE); write_relmap_file((xlrec->dbid == InvalidOid), &newmap, false, true, false, xlrec->dbid, xlrec->tsid, dbpath); + LWLockRelease(RelationMappingLock); pfree(dbpath); } From 802177090992511c610804da54a4603d4f50c594 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 24 Jun 2021 15:02:13 -0400 Subject: [PATCH 520/671] Further stabilize postgres_fdw test. The queries involving ft1_nopw don't stably return the same row anymore. I surmise that an autovacuum hitting "S 1"."T 1" right after the updates introduced by f61db909d/5843659d0 freed some space, changing where subsequent insertions get stored. It's only by good luck that these results were stable before, though, since a LIMIT without ORDER BY isn't well defined, and it's not like we've ever treated that table as append-only in this test script. Since we only really care whether these commands succeed or not, just replace "SELECT *" with "SELECT 1". Report: https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&dt=2021-06-23%2019%3A52%3A08 --- .../postgres_fdw/expected/postgres_fdw.out | 24 +++++++++---------- contrib/postgres_fdw/sql/postgres_fdw.sql | 12 +++++----- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index cc1cca30067f1..31b5de91addef 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -9225,7 +9225,7 @@ CREATE FOREIGN TABLE ft1_nopw ( c7 char(10) default 'ft1', c8 user_enum ) SERVER loopback_nopw OPTIONS (schema_name 'public', table_name 'ft1'); -SELECT * FROM ft1_nopw LIMIT 1; +SELECT 1 FROM ft1_nopw LIMIT 1; ERROR: password is required DETAIL: Non-superusers must provide a password in the user mapping. -- If we add a password to the connstr it'll fail, because we don't allow passwords @@ -9244,7 +9244,7 @@ PL/pgSQL function inline_code_block line 3 at EXECUTE -- -- This won't work with installcheck, but neither will most of the FDW checks. ALTER USER MAPPING FOR CURRENT_USER SERVER loopback_nopw OPTIONS (ADD password 'dummypw'); -SELECT * FROM ft1_nopw LIMIT 1; +SELECT 1 FROM ft1_nopw LIMIT 1; ERROR: password is required DETAIL: Non-superuser cannot connect if the server does not request a password. HINT: Target server's authentication method must be changed or password_required=false set in the user mapping attributes. @@ -9252,7 +9252,7 @@ HINT: Target server's authentication method must be changed or password_require ALTER USER MAPPING FOR CURRENT_USER SERVER loopback_nopw OPTIONS (ADD password_required 'false'); ERROR: password_required=false is superuser-only HINT: User mappings with the password_required option set to false may only be created or modified by the superuser -SELECT * FROM ft1_nopw LIMIT 1; +SELECT 1 FROM ft1_nopw LIMIT 1; ERROR: password is required DETAIL: Non-superuser cannot connect if the server does not request a password. HINT: Target server's authentication method must be changed or password_required=false set in the user mapping attributes. @@ -9261,10 +9261,10 @@ RESET ROLE; ALTER USER MAPPING FOR regress_nosuper SERVER loopback_nopw OPTIONS (ADD password_required 'false'); SET ROLE regress_nosuper; -- Should finally work now -SELECT * FROM ft1_nopw LIMIT 1; - c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -------+----+----+----+----+----+------------+---- - 1111 | 2 | | | | | ft1 | +SELECT 1 FROM ft1_nopw LIMIT 1; + ?column? +---------- + 1 (1 row) -- unpriv user also cannot set sslcert / sslkey on the user mapping @@ -9281,16 +9281,16 @@ HINT: User mappings with the sslcert or sslkey options set may only be created DROP USER MAPPING FOR CURRENT_USER SERVER loopback_nopw; -- This will fail again as it'll resolve the user mapping for public, which -- lacks password_required=false -SELECT * FROM ft1_nopw LIMIT 1; +SELECT 1 FROM ft1_nopw LIMIT 1; ERROR: password is required DETAIL: Non-superusers must provide a password in the user mapping. RESET ROLE; -- The user mapping for public is passwordless and lacks the password_required=false -- mapping option, but will work because the current user is a superuser. -SELECT * FROM ft1_nopw LIMIT 1; - c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -------+----+----+----+----+----+------------+---- - 1111 | 2 | | | | | ft1 | +SELECT 1 FROM ft1_nopw LIMIT 1; + ?column? +---------- + 1 (1 row) -- cleanup diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 8983209c74bac..286dd99573eb0 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -2746,7 +2746,7 @@ CREATE FOREIGN TABLE ft1_nopw ( c8 user_enum ) SERVER loopback_nopw OPTIONS (schema_name 'public', table_name 'ft1'); -SELECT * FROM ft1_nopw LIMIT 1; +SELECT 1 FROM ft1_nopw LIMIT 1; -- If we add a password to the connstr it'll fail, because we don't allow passwords -- in connstrs only in user mappings. @@ -2764,13 +2764,13 @@ $d$; ALTER USER MAPPING FOR CURRENT_USER SERVER loopback_nopw OPTIONS (ADD password 'dummypw'); -SELECT * FROM ft1_nopw LIMIT 1; +SELECT 1 FROM ft1_nopw LIMIT 1; -- Unpriv user cannot make the mapping passwordless ALTER USER MAPPING FOR CURRENT_USER SERVER loopback_nopw OPTIONS (ADD password_required 'false'); -SELECT * FROM ft1_nopw LIMIT 1; +SELECT 1 FROM ft1_nopw LIMIT 1; RESET ROLE; @@ -2780,7 +2780,7 @@ ALTER USER MAPPING FOR regress_nosuper SERVER loopback_nopw OPTIONS (ADD passwor SET ROLE regress_nosuper; -- Should finally work now -SELECT * FROM ft1_nopw LIMIT 1; +SELECT 1 FROM ft1_nopw LIMIT 1; -- unpriv user also cannot set sslcert / sslkey on the user mapping -- first set password_required so we see the right error messages @@ -2794,13 +2794,13 @@ DROP USER MAPPING FOR CURRENT_USER SERVER loopback_nopw; -- This will fail again as it'll resolve the user mapping for public, which -- lacks password_required=false -SELECT * FROM ft1_nopw LIMIT 1; +SELECT 1 FROM ft1_nopw LIMIT 1; RESET ROLE; -- The user mapping for public is passwordless and lacks the password_required=false -- mapping option, but will work because the current user is a superuser. -SELECT * FROM ft1_nopw LIMIT 1; +SELECT 1 FROM ft1_nopw LIMIT 1; -- cleanup DROP USER MAPPING FOR public SERVER loopback_nopw; From c13585fe9e55813cf9feac67fe7b65d3a78fff92 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 25 Jun 2021 06:52:36 +0900 Subject: [PATCH 521/671] Fix pattern matching logic for logs in TAP tests of pgbench The logic checking for the format of per-thread logs used grep() with directly "$re", which would cause the test to consider all the logs as a match without caring about their format at all. Using "/$re/" makes grep() perform a regex test, which is what we want here. While on it, improve some of the tests to be more picky with the patterns expected and add more comments to describe the tests. Issue discovered while digging into a separate patch. Author: Fabien Coelho, Michael Paquier Discussion: https://postgr.es/m/YNPsPAUoVDCpPOGk@paquier.xyz Backpatch-through: 11 --- src/bin/pgbench/t/001_pgbench_with_server.pl | 23 ++++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index 923203ea51750..0cf80aba972f4 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -1173,7 +1173,12 @@ sub list_files return map { $dir . '/' . $_ } @files; } -# check log contents and cleanup +# Check log contents and clean them up: +# $dir: directory holding logs +# $prefix: file prefix for per-thread logs +# $nb: number of expected files +# $min/$max: minimum and maximum number of lines in log files +# $re: regular expression each log line has to match sub check_pgbench_logs { local $Test::Builder::Level = $Test::Builder::Level + 1; @@ -1194,7 +1199,7 @@ sub check_pgbench_logs my $clen = @contents; ok( $min <= $clen && $clen <= $max, "transaction count for $log ($clen)"); - ok( grep($re, @contents) == $clen, + ok( grep(/$re/, @contents) == $clen, "transaction format for $prefix"); close $fh or die "$@"; }; @@ -1205,25 +1210,25 @@ sub check_pgbench_logs my $bdir = $node->basedir; -# with sampling rate +# Run with sampling rate, 2 clients with 50 transactions each. pgbench( "-n -S -t 50 -c 2 --log --sampling-rate=0.5", 0, [ qr{select only}, qr{processed: 100/100} ], [qr{^$}], 'pgbench logs', undef, "--log-prefix=$bdir/001_pgbench_log_2"); - +# The IDs of the clients (1st field) in the logs should be either 0 or 1. check_pgbench_logs($bdir, '001_pgbench_log_2', 1, 8, 92, - qr{^0 \d{1,2} \d+ \d \d+ \d+$}); + qr{^[01] \d{1,2} \d+ \d \d+ \d+$}); -# check log file in some detail +# Run with different read-only option pattern, 1 client with 10 transactions. pgbench( - "-n -b se -t 10 -l", 0, + "-n -b select-only -t 10 -l", 0, [ qr{select only}, qr{processed: 10/10} ], [qr{^$}], 'pgbench logs contents', undef, "--log-prefix=$bdir/001_pgbench_log_3"); - +# The ID of a single client (1st field) should match 0. check_pgbench_logs($bdir, '001_pgbench_log_3', 1, 10, 10, - qr{^\d \d{1,2} \d+ \d \d+ \d+$}); + qr{^0 \d{1,2} \d+ \d \d+ \d+$}); # done $node->safe_psql('postgres', 'DROP TABLESPACE regress_pgbench_tap_1_ts'); From 9b4e4cfe66ff133717c1b8ba3c2725d525c3e67c Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 25 Jun 2021 09:55:26 +1200 Subject: [PATCH 522/671] Prepare for forthcoming LLVM 13 API change. LLVM 13 (due out in September) has changed the semantics of LLVMOrcAbsoluteSymbols(), so we need to bump some reference counts to avoid a double-free that causes crashes and bad query results. A proactive change seems necessary to avoid having a window of time where our respective latest releases would interact badly. It's possible that the situation could change before then, though. Thanks to Fabien Coelho for monitoring bleeding edge LLVM and Andres Freund for tracking down the change. Back-patch to 11, where the JIT code arrived. Discussion: https://postgr.es/m/CA%2BhUKGLEy8mgtN7BNp0ooFAjUedDTJj5dME7NxLU-m91b85siA%40mail.gmail.com --- src/backend/jit/llvm/llvmjit.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c index 71029a39a989b..df691cbf1c539 100644 --- a/src/backend/jit/llvm/llvmjit.c +++ b/src/backend/jit/llvm/llvmjit.c @@ -1106,6 +1106,9 @@ llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx, { const char *name = LLVMOrcSymbolStringPoolEntryStr(LookupSet[i].Name); +#if LLVM_VERSION_MAJOR > 12 + LLVMOrcRetainSymbolStringPoolEntry(LookupSet[i].Name); +#endif symbols[i].Name = LookupSet[i].Name; symbols[i].Sym.Address = llvm_resolve_symbol(name, NULL); symbols[i].Sym.Flags.GenericFlags = LLVMJITSymbolGenericFlagsExported; From 797b0fc0b078c7b4c46ef9f2d9e47aa2d98c6c63 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 25 Jun 2021 08:40:16 +0900 Subject: [PATCH 523/671] doc: Move remove_temp_files_after_crash to section for developer options The main goal of this option is to allow inspecting temporary files for debugging purposes, so moving the parameter there is natural. Oversight in cd91de0. Reported-by: Justin Pryzby Author: Euler Taveira Discussion: https://postgr.es/m/20210612004347.GP16435@telsasoft.com --- doc/src/sgml/config.sgml | 41 +++++++++---------- src/backend/utils/misc/guc.c | 5 ++- src/backend/utils/misc/postgresql.conf.sample | 2 - 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index eeba2caa43f86..f5a753e5898c4 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -9863,28 +9863,6 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' - - remove_temp_files_after_crash (boolean) - - remove_temp_files_after_crash configuration parameter - - - - - When set to on, which is the default, - PostgreSQL will automatically remove - temporary files after a backend crash. If disabled, the files will be - retained and may be used for debugging, for example. Repeated crashes - may however result in accumulation of useless files. - - - - This parameter can only be set in the postgresql.conf - file or on the server command line. - - - - data_sync_retry (boolean) @@ -10912,6 +10890,25 @@ LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1) + + remove_temp_files_after_crash (boolean) + + remove_temp_files_after_crash configuration parameter + + + + + When set to on, which is the default, + PostgreSQL will automatically remove + temporary files after a backend crash. If disabled, the files will be + retained and may be used for debugging, for example. Repeated crashes + may however result in accumulation of useless files. This parameter + can only be set in the postgresql.conf file or on + the server command line. + + + + diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 68b62d523dc95..eaeeee58a0bd8 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -1404,9 +1404,10 @@ static struct config_bool ConfigureNamesBool[] = NULL, NULL, NULL }, { - {"remove_temp_files_after_crash", PGC_SIGHUP, ERROR_HANDLING_OPTIONS, + {"remove_temp_files_after_crash", PGC_SIGHUP, DEVELOPER_OPTIONS, gettext_noop("Remove temporary files after backend crash."), - NULL + NULL, + GUC_NOT_IN_SAMPLE }, &remove_temp_files_after_crash, true, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index ddbb6dc2be2c0..a5a7174b0e751 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -768,8 +768,6 @@ #exit_on_error = off # terminate session on any error? #restart_after_crash = on # reinitialize after backend crash? -#remove_temp_files_after_crash = on # remove temporary files after - # backend crash? #data_sync_retry = off # retry or panic on failure to fsync # data? # (change requires restart) From 87b2124dfa0782a697ea7b90aff15a6f6117a720 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 25 Jun 2021 09:56:44 +0900 Subject: [PATCH 524/671] Add more debugging information with log checks in TAP tests of pgbench fairywren is not happy with the pattern checks introduced by c13585f. I am not sure if this outlines a bug in pgbench or if the regex patterns used in the tests are too restrictive for this buildfarm member's environment. This adds more debugging information to show the log entries that do not match with the expected pattern, to help in finding out what's happening. That seems like a good addition in the long-term anyway as that may not be the only issue in this area. Discussion: https://postgr.es/m/YNUad2HvgW+6eXyo@paquier.xyz --- src/bin/pgbench/t/001_pgbench_with_server.pl | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index 0cf80aba972f4..ff5b31d4df14b 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -1199,8 +1199,18 @@ sub check_pgbench_logs my $clen = @contents; ok( $min <= $clen && $clen <= $max, "transaction count for $log ($clen)"); - ok( grep(/$re/, @contents) == $clen, - "transaction format for $prefix"); + my $clen_match = grep(/$re/, @contents); + ok($clen_match == $clen, "transaction format for $prefix"); + # Show more information if some logs don't match + # to help with debugging. + if ($clen_match != $clen) + { + foreach my $log (@contents) + { + print "# Log entry not matching: $log\n" + unless $log =~ /$re/; + } + } close $fh or die "$@"; }; } From 15ff5401d1719aaf6c9a47e5abea517cc2bcbaf1 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 25 Jun 2021 11:29:03 +0900 Subject: [PATCH 525/671] doc: Add acronyms for MITM and SNI This adds MITM and SNI as acronyms, as the documentation already had them marked up with . While on it, make sure to spell man-in-the-middle with dashes consistently, and add acronyms for those new terms where appropriate. Author: Daniel Gustafsson Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/CE12DD5C-4BB3-4166-BC9A-39779568734C@yesql.se --- doc/src/sgml/acronyms.sgml | 23 +++++++++++++++++++++++ doc/src/sgml/config.sgml | 2 +- doc/src/sgml/libpq.sgml | 13 ++++++------- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/doc/src/sgml/acronyms.sgml b/doc/src/sgml/acronyms.sgml index 13bd819eb1d63..9ed148ab84201 100644 --- a/doc/src/sgml/acronyms.sgml +++ b/doc/src/sgml/acronyms.sgml @@ -410,6 +410,17 @@ + + MITM + + + + Man-in-the-middle attack + + + + MSVC @@ -590,6 +601,18 @@ + + SNI + + + + Server Name Indication, + RFC 6066 + + + + SPI diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index f5a753e5898c4..03b33cfb7e453 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -1378,7 +1378,7 @@ include_dir 'conf.d' Disables anonymous cipher suites that do no authentication. Such - cipher suites are vulnerable to man-in-the-middle attacks and + cipher suites are vulnerable to MITM attacks and therefore should not be used. diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 441cc0da3a392..641970f2a612d 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -1783,18 +1783,17 @@ postgresql://%2Fvar%2Flib%2Fpostgresql/dbname By default, libpq sets the TLS extension Server Name - Indication (SNI) on SSL-enabled connections. See RFC 6066 - for details. By setting this parameter to 0, this is turned off. + Indication (SNI) on SSL-enabled connections. + By setting this parameter to 0, this is turned off. The Server Name Indication can be used by SSL-aware proxies to route connections without having to decrypt the SSL stream. (Note that this requires a proxy that is aware of the PostgreSQL protocol handshake, - not just any SSL proxy.) However, SNI makes the destination host name - appear in cleartext in the network traffic, so it might be undesirable - in some cases. + not just any SSL proxy.) However, SNI makes the + destination host name appear in cleartext in the network traffic, so + it might be undesirable in some cases. @@ -8430,7 +8429,7 @@ ldap://ldap.acme.com/cn=dbserver,cn=hosts?pgconnectinfo?base?(objectclass=*) - Man in the middle (MITM) + Man-in-the-middle (MITM) If a third party can modify the data while passing between the client and server, it can pretend to be the server and therefore see and From 847c62ee76cbc237b3a204ca94b1b12811d698e3 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Fri, 25 Jun 2021 08:22:44 +0530 Subject: [PATCH 526/671] Doc: Fix minor formatting issue in logicaldecoding.sgml. Author: Guillaume Lelarge Discussion: https://www.postgresql.org/message-id/CAECtzeXf3_oZoU6mgFCOy5+pDZ5n4XtH0Da4a5n_KacraVWiHQ@mail.gmail.com --- doc/src/sgml/logicaldecoding.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/logicaldecoding.sgml b/doc/src/sgml/logicaldecoding.sgml index 53f1466e429b9..5b8065901a4f2 100644 --- a/doc/src/sgml/logicaldecoding.sgml +++ b/doc/src/sgml/logicaldecoding.sgml @@ -1179,7 +1179,7 @@ OutputPluginWrite(ctx, true); (stream_start_cb, stream_stop_cb, stream_abort_cb, stream_commit_cb and stream_change_cb) and two optional callbacks - (stream_message_cb) and (stream_truncate_cb). + (stream_message_cb and stream_truncate_cb). From a60c4c5c1a99746485123ae93fbd3e58c78e5d62 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 25 Jun 2021 07:55:34 +0200 Subject: [PATCH 527/671] Remove redundant variable pageSize in gistinitpage In gistinitpage, pageSize variable looks redundant, instead just pass BLCKSZ. This will be consistent with its peers BloomInitPage, brin_page_init and SpGistInitPage. Author: Bharath Rupireddy Discussion: https://www.postgresql.org/message-id/flat/CALj2ACWj=V1k5591eeZK2sOg2FYuBUp6azFO8tMkBtGfXf8PMQ@mail.gmail.com --- src/backend/access/gist/gistutil.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/backend/access/gist/gistutil.c b/src/backend/access/gist/gistutil.c index 8dcd53c457799..43ba03b6eb97c 100644 --- a/src/backend/access/gist/gistutil.c +++ b/src/backend/access/gist/gistutil.c @@ -756,9 +756,8 @@ void gistinitpage(Page page, uint32 f) { GISTPageOpaque opaque; - Size pageSize = BLCKSZ; - PageInit(page, pageSize, sizeof(GISTPageOpaqueData)); + PageInit(page, BLCKSZ, sizeof(GISTPageOpaqueData)); opaque = GistPageGetOpaque(page); opaque->rightlink = InvalidBlockNumber; From 63e6d05bf34da58eef7cd1ed461b9c8315177a38 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 25 Jun 2021 08:11:10 +0200 Subject: [PATCH 528/671] doc: Change reloption data type spelling for consistency Use "floating point" rather than "float4", like everywhere else in this context. Author: Shinya11.Kato@nttdata.com Discussion: https://www.postgresql.org/message-id/flat/TYAPR01MB28965989AF84B57FC351B97BC40F9@TYAPR01MB2896.jpnprd01.prod.outlook.com --- doc/src/sgml/ref/create_table.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index ab33b7fb0ffc7..15aed2f251549 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -1565,7 +1565,7 @@ WITH ( MODULUS numeric_literal, REM - autovacuum_vacuum_insert_scale_factor, toast.autovacuum_vacuum_insert_scale_factor (float4) + autovacuum_vacuum_insert_scale_factor, toast.autovacuum_vacuum_insert_scale_factor (floating point) autovacuum_vacuum_insert_scale_factor storage parameter From e59d428f34297cd0eb67e3b4e4b8c8bc58504921 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 25 Jun 2021 09:51:24 +0200 Subject: [PATCH 529/671] Fixes in ALTER SUBSCRIPTION DROP PUBLICATION code ALTER SUBSCRIPTION DROP PUBLICATION does not actually support copy_data option, so remove it from tab completion. Also, reword the error message that is thrown when all the publications from a subscription are specified to be dropped. Also, made few doc and cosmetic adjustments. Author: Vignesh C Reviewed-by: Bharath Rupireddy Reviewed-by: Japin Li Discussion: https://www.postgresql.org/message-id/flat/CALDaNm21RwsDzs4xj14ApteAF7auyyomHNnp+NEL-sH8m-jMvQ@mail.gmail.com --- doc/src/sgml/ref/alter_subscription.sgml | 19 ++++++++++--------- src/backend/commands/subscriptioncmds.c | 6 +++--- src/bin/psql/tab-complete.c | 8 ++++++-- src/test/regress/expected/subscription.out | 2 +- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/doc/src/sgml/ref/alter_subscription.sgml b/doc/src/sgml/ref/alter_subscription.sgml index 367ac814f4b67..b3d173179f4cb 100644 --- a/doc/src/sgml/ref/alter_subscription.sgml +++ b/doc/src/sgml/ref/alter_subscription.sgml @@ -22,9 +22,9 @@ PostgreSQL documentation ALTER SUBSCRIPTION name CONNECTION 'conninfo' -ALTER SUBSCRIPTION name SET PUBLICATION publication_name [, ...] [ WITH ( set_publication_option [= value] [, ... ] ) ] -ALTER SUBSCRIPTION name ADD PUBLICATION publication_name [, ...] [ WITH ( set_publication_option [= value] [, ... ] ) ] -ALTER SUBSCRIPTION name DROP PUBLICATION publication_name [, ...] [ WITH ( set_publication_option [= value] [, ... ] ) ] +ALTER SUBSCRIPTION name SET PUBLICATION publication_name [, ...] [ WITH ( publication_option [= value] [, ... ] ) ] +ALTER SUBSCRIPTION name ADD PUBLICATION publication_name [, ...] [ WITH ( publication_option [= value] [, ... ] ) ] +ALTER SUBSCRIPTION name DROP PUBLICATION publication_name [, ...] [ WITH ( publication_option [= value] [, ... ] ) ] ALTER SUBSCRIPTION name REFRESH PUBLICATION [ WITH ( refresh_option [= value] [, ... ] ) ] ALTER SUBSCRIPTION name ENABLE ALTER SUBSCRIPTION name DISABLE @@ -102,17 +102,17 @@ ALTER SUBSCRIPTION name RENAME TO < Changes the list of subscribed publications. SET replaces the entire list of publications with a new list, - ADD adds additional publications, - DROP removes publications from the list of - publications. See for more - information. By default, this command will also act like + ADD adds additional publications to the list of + publications, and DROP removes the publications from + the list of publications. See + for more information. By default, this command will also act like REFRESH PUBLICATION, except that in case of ADD or DROP, only the added or dropped publications are refreshed. - set_publication_option specifies additional + publication_option specifies additional options for this operation. The supported options are: @@ -129,7 +129,8 @@ ALTER SUBSCRIPTION name RENAME TO < Additionally, refresh options as described - under REFRESH PUBLICATION may be specified. + under REFRESH PUBLICATION may be specified, + except in the case of DROP PUBLICATION. diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index 75e195f286e8c..e9a97db9a5579 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -953,8 +953,6 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) bool refresh; List *publist; - publist = merge_publications(sub->publications, stmt->publication, isadd, stmt->subname); - parse_subscription_options(stmt->options, NULL, /* no "connect" */ NULL, NULL, /* no "enabled" */ @@ -967,6 +965,8 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) NULL, NULL, /* no "binary" */ NULL, NULL); /* no "streaming" */ + publist = merge_publications(sub->publications, stmt->publication, isadd, stmt->subname); + values[Anum_pg_subscription_subpublications - 1] = publicationListToArray(publist); replaces[Anum_pg_subscription_subpublications - 1] = true; @@ -1676,7 +1676,7 @@ merge_publications(List *oldpublist, List *newpublist, bool addpub, const char * if (!oldpublist) ereport(ERROR, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), - errmsg("subscription must contain at least one publication"))); + errmsg("cannot drop all the publications from a subscription"))); return oldpublist; } diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 38af5682f2db4..0ebd5aa41a1ad 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1675,10 +1675,14 @@ psql_completion(const char *text, int start, int end) else if (HeadMatches("ALTER", "SUBSCRIPTION", MatchAny) && TailMatches("ADD|DROP|SET", "PUBLICATION", MatchAny)) COMPLETE_WITH("WITH ("); - /* ALTER SUBSCRIPTION ADD|DROP|SET PUBLICATION WITH ( */ + /* ALTER SUBSCRIPTION ADD|SET PUBLICATION WITH ( */ else if (HeadMatches("ALTER", "SUBSCRIPTION", MatchAny) && - TailMatches("ADD|DROP|SET", "PUBLICATION", MatchAny, "WITH", "(")) + TailMatches("ADD|SET", "PUBLICATION", MatchAny, "WITH", "(")) COMPLETE_WITH("copy_data", "refresh"); + /* ALTER SUBSCRIPTION DROP PUBLICATION WITH ( */ + else if (HeadMatches("ALTER", "SUBSCRIPTION", MatchAny) && + TailMatches("DROP", "PUBLICATION", MatchAny, "WITH", "(")) + COMPLETE_WITH("refresh"); /* ALTER SCHEMA */ else if (Matches("ALTER", "SCHEMA", MatchAny)) diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out index 09576c176b6fd..57f7dd9b0a735 100644 --- a/src/test/regress/expected/subscription.out +++ b/src/test/regress/expected/subscription.out @@ -223,7 +223,7 @@ ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub1 WITH (ref ERROR: publication name "testpub1" used more than once -- fail - all publications are deleted ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false); -ERROR: subscription must contain at least one publication +ERROR: cannot drop all the publications from a subscription -- fail - publication does not exist in subscription ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false); ERROR: publication "testpub3" is not in subscription "regress_testsub" From 3af10943ce21450e299b3915b9cad47cd90369e9 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 25 Jun 2021 11:40:06 +0200 Subject: [PATCH 530/671] Put option listing back into alphabetical order --- doc/src/sgml/ref/vacuumdb.sgml | 30 +++++++++++++++--------------- src/bin/scripts/vacuumdb.c | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/doc/src/sgml/ref/vacuumdb.sgml b/doc/src/sgml/ref/vacuumdb.sgml index d799804cdad01..223b986b920d4 100644 --- a/doc/src/sgml/ref/vacuumdb.sgml +++ b/doc/src/sgml/ref/vacuumdb.sgml @@ -151,6 +151,21 @@ PostgreSQL documentation + + + + + Always remove index entries pointing to dead tuples. + + + + This option is only available for servers running + PostgreSQL 12 and later. + + + + + @@ -244,21 +259,6 @@ PostgreSQL documentation - - - - - Always remove index entries pointing to dead tuples. - - - - This option is only available for servers running - PostgreSQL 12 and later. - - - - - diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c index 122e8932f1b55..61974baa78086 100644 --- a/src/bin/scripts/vacuumdb.c +++ b/src/bin/scripts/vacuumdb.c @@ -1038,11 +1038,11 @@ help(const char *progname) printf(_(" -e, --echo show the commands being sent to the server\n")); printf(_(" -f, --full do full vacuuming\n")); printf(_(" -F, --freeze freeze row transaction information\n")); + printf(_(" --force-index-cleanup always remove index entries that point to dead tuples\n")); printf(_(" -j, --jobs=NUM use this many concurrent connections to vacuum\n")); printf(_(" --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n")); printf(_(" --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n")); printf(_(" --no-index-cleanup don't remove index entries that point to dead tuples\n")); - printf(_(" --force-index-cleanup always remove index entries that point to dead tuples\n")); printf(_(" --no-process-toast skip the TOAST table associated with the table to vacuum\n")); printf(_(" --no-truncate don't truncate empty pages at the end of the table\n")); printf(_(" -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n")); From 38ff135d9466c35b506b1049fedef73047907be0 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 25 Jun 2021 20:15:24 +0900 Subject: [PATCH 531/671] Cleanup some code related to pgbench log checks in TAP tests This fixes a couple of problems within the so-said code of this commit subject: - Replace the use of open() with slurp_file(), fixing an issue reported by buildfarm member fairywren whose perl installation keep around CRLF characters, causing the matching patterns for the logs to fail. - Remove the eval block, which is not really necessary. This set of issues has come into light after fixing a different issue with c13585fe, and this is wrong since this code has been introduced. Reported-by: Andrew Dunstan, and buildfarm member fairywren Author: Michael Paquier Reviewed-by: Andrew Dunstan Discussion: https://postgr.es/m/0f49303e-7784-b3ee-200b-cbf67be2eb9e@dunslane.net Backpatch-through: 11 --- src/bin/pgbench/t/001_pgbench_with_server.pl | 37 ++++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index ff5b31d4df14b..781cc08fb17eb 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -1193,28 +1193,27 @@ sub check_pgbench_logs my $log_number = 0; for my $log (sort @logs) { - eval { - open my $fh, '<', $log or die "$@"; - my @contents = <$fh>; - my $clen = @contents; - ok( $min <= $clen && $clen <= $max, - "transaction count for $log ($clen)"); - my $clen_match = grep(/$re/, @contents); - ok($clen_match == $clen, "transaction format for $prefix"); - # Show more information if some logs don't match - # to help with debugging. - if ($clen_match != $clen) + # Check the contents of each log file. + my $contents_raw = slurp_file($log); + + my @contents = split(/\n/, $contents_raw); + my $clen = @contents; + ok( $min <= $clen && $clen <= $max, + "transaction count for $log ($clen)"); + my $clen_match = grep(/$re/, @contents); + ok($clen_match == $clen, "transaction format for $prefix"); + + # Show more information if some logs don't match + # to help with debugging. + if ($clen_match != $clen) + { + foreach my $log (@contents) { - foreach my $log (@contents) - { - print "# Log entry not matching: $log\n" - unless $log =~ /$re/; - } + print "# Log entry not matching: $log\n" + unless $log =~ /$re/; } - close $fh or die "$@"; - }; + } } - ok(unlink(@logs), "remove log files"); return; } From 8a80562d732c0da1ddcc9fb88dfb976f4b846577 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 25 Jun 2021 11:18:15 -0400 Subject: [PATCH 532/671] Doc: remove commit f560209c6 from v14 release notes. Now that this has been back-patched, it's no longer a new feature for v14. --- doc/src/sgml/release-14.sgml | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 33b7bf7d57044..72809732d50d1 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -1515,23 +1515,6 @@ Author: Amit Kapila - - - Improve pg_stat_activity - reporting of walsender processes (Tom Lane) - - - - Previously only SQL commands were reported. - - - - - From 5a0f1c8c0193f0dd7fba50c22d96781fa2414007 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 25 Jun 2021 13:59:38 -0400 Subject: [PATCH 533/671] Remove unnecessary failure cases in RemoveRoleFromObjectPolicy(). It's not really necessary for this function to open or lock the relation associated with the pg_policy entry it's modifying. The error checks it's making on the rel are if anything counterproductive (e.g., if we don't want to allow installation of policies on system catalogs, here is not the place to prevent that). In particular, it seems just wrong to insist on an ownership check. That has the net effect of forcing people to use superuser for DROP OWNED BY, which surely is not an effect we want. Also there is no point in rebuilding the dependencies of the policy expressions, which aren't being changed. Lastly, locking the table also seems counterproductive; it's not helping to prevent race conditions, since we failed to re-read the pg_policy row after acquiring the lock. That means that concurrent DDL would likely result in "tuple concurrently updated/deleted" errors; which is the same behavior this code will produce, with less overhead. Per discussion of bug #17062. Back-patch to all supported versions, as the failure cases this eliminates seem just as undesirable in 9.6 as in HEAD. Discussion: https://postgr.es/m/1573181.1624220108@sss.pgh.pa.us --- src/backend/commands/policy.c | 195 ++++++++-------------------------- 1 file changed, 47 insertions(+), 148 deletions(-) diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c index fc27fd013e51f..a225141cce810 100644 --- a/src/backend/commands/policy.c +++ b/src/backend/commands/policy.c @@ -404,13 +404,12 @@ RemovePolicyById(Oid policy_id) /* * RemoveRoleFromObjectPolicy - - * remove a role from a policy by its OID. If the role is not a member of - * the policy then an error is raised. False is returned to indicate that - * the role could not be removed due to being the only role on the policy - * and therefore the entire policy should be removed. + * remove a role from a policy's applicable-roles list. * - * Note that a warning will be thrown and true will be returned on a - * permission error, as the policy should not be removed in that case. + * Returns true if the role was successfully removed from the policy. + * Returns false if the role was not removed because it would have left + * polroles empty (which is disallowed, though perhaps it should not be). + * On false return, the caller should instead drop the policy altogether. * * roleid - the oid of the role to remove * classid - should always be PolicyRelationId @@ -424,11 +423,15 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id) ScanKeyData skey[1]; HeapTuple tuple; Oid relid; - Relation rel; ArrayType *policy_roles; Datum roles_datum; + Oid *roles; + int num_roles; + Datum *role_oids; bool attr_isnull; bool keep_policy = true; + int i, + j; Assert(classid == PolicyRelationId); @@ -451,26 +454,9 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id) if (!HeapTupleIsValid(tuple)) elog(ERROR, "could not find tuple for policy %u", policy_id); - /* - * Open and exclusive-lock the relation the policy belongs to. - */ + /* Identify rel the policy belongs to */ relid = ((Form_pg_policy) GETSTRUCT(tuple))->polrelid; - rel = relation_open(relid, AccessExclusiveLock); - - if (rel->rd_rel->relkind != RELKIND_RELATION && - rel->rd_rel->relkind != RELKIND_PARTITIONED_TABLE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table", - RelationGetRelationName(rel)))); - - if (!allowSystemTableMods && IsSystemRelation(rel)) - ereport(ERROR, - (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("permission denied: \"%s\" is a system catalog", - RelationGetRelationName(rel)))); - /* Get the current set of roles */ roles_datum = heap_getattr(tuple, Anum_pg_policy_polroles, @@ -480,34 +466,31 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id) Assert(!attr_isnull); policy_roles = DatumGetArrayTypePCopy(roles_datum); + roles = (Oid *) ARR_DATA_PTR(policy_roles); + num_roles = ARR_DIMS(policy_roles)[0]; - /* Must own relation. */ - if (!pg_class_ownercheck(relid, GetUserId())) - ereport(WARNING, - (errcode(ERRCODE_WARNING_PRIVILEGE_NOT_REVOKED), - errmsg("role \"%s\" could not be removed from policy \"%s\" on \"%s\"", - GetUserNameFromId(roleid, false), - NameStr(((Form_pg_policy) GETSTRUCT(tuple))->polname), - RelationGetRelationName(rel)))); - else + /* + * Rebuild the polroles array, without any mentions of the target role. + * Ordinarily there'd be exactly one, but we must cope with duplicate + * mentions, since CREATE/ALTER POLICY historically have allowed that. + */ + role_oids = (Datum *) palloc(num_roles * sizeof(Datum)); + for (i = 0, j = 0; i < num_roles; i++) { - int i, - j; - Oid *roles = (Oid *) ARR_DATA_PTR(policy_roles); - int num_roles = ARR_DIMS(policy_roles)[0]; - Datum *role_oids; - char *qual_value; - Node *qual_expr; - List *qual_parse_rtable = NIL; - char *with_check_value; - Node *with_check_qual; - List *with_check_parse_rtable = NIL; + if (roles[i] != roleid) + role_oids[j++] = ObjectIdGetDatum(roles[i]); + } + num_roles = j; + + /* If any roles remain, update the policy entry. */ + if (num_roles > 0) + { + ArrayType *role_ids; Datum values[Natts_pg_policy]; bool isnull[Natts_pg_policy]; bool replaces[Natts_pg_policy]; - Datum value_datum; - ArrayType *role_ids; HeapTuple new_tuple; + HeapTuple reltup; ObjectAddress target; ObjectAddress myself; @@ -516,77 +499,6 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id) memset(replaces, 0, sizeof(replaces)); memset(isnull, 0, sizeof(isnull)); - /* - * All of the dependencies will be removed from the policy and then - * re-added. In order to get them correct, we need to extract out the - * expressions in the policy and construct a parsestate just enough to - * build the range table(s) to then pass to recordDependencyOnExpr(). - */ - - /* Get policy qual, to update dependencies */ - value_datum = heap_getattr(tuple, Anum_pg_policy_polqual, - RelationGetDescr(pg_policy_rel), &attr_isnull); - if (!attr_isnull) - { - ParseState *qual_pstate; - - /* parsestate is built just to build the range table */ - qual_pstate = make_parsestate(NULL); - - qual_value = TextDatumGetCString(value_datum); - qual_expr = stringToNode(qual_value); - - /* Add this rel to the parsestate's rangetable, for dependencies */ - (void) addRangeTableEntryForRelation(qual_pstate, rel, - AccessShareLock, - NULL, false, false); - - qual_parse_rtable = qual_pstate->p_rtable; - free_parsestate(qual_pstate); - } - else - qual_expr = NULL; - - /* Get WITH CHECK qual, to update dependencies */ - value_datum = heap_getattr(tuple, Anum_pg_policy_polwithcheck, - RelationGetDescr(pg_policy_rel), &attr_isnull); - if (!attr_isnull) - { - ParseState *with_check_pstate; - - /* parsestate is built just to build the range table */ - with_check_pstate = make_parsestate(NULL); - - with_check_value = TextDatumGetCString(value_datum); - with_check_qual = stringToNode(with_check_value); - - /* Add this rel to the parsestate's rangetable, for dependencies */ - (void) addRangeTableEntryForRelation(with_check_pstate, rel, - AccessShareLock, - NULL, false, false); - - with_check_parse_rtable = with_check_pstate->p_rtable; - free_parsestate(with_check_pstate); - } - else - with_check_qual = NULL; - - /* - * Rebuild the roles array, without any mentions of the target role. - * Ordinarily there'd be exactly one, but we must cope with duplicate - * mentions, since CREATE/ALTER POLICY historically have allowed that. - */ - role_oids = (Datum *) palloc(num_roles * sizeof(Datum)); - for (i = 0, j = 0; i < num_roles; i++) - { - if (roles[i] != roleid) - role_oids[j++] = ObjectIdGetDatum(roles[i]); - } - num_roles = j; - - /* If any roles remain, update the policy entry. */ - if (num_roles > 0) - { /* This is the array for the new tuple */ role_ids = construct_array(role_oids, num_roles, OIDOID, sizeof(Oid), true, TYPALIGN_INT); @@ -599,33 +511,14 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id) values, isnull, replaces); CatalogTupleUpdate(pg_policy_rel, &new_tuple->t_self, new_tuple); - /* Remove all old dependencies. */ - deleteDependencyRecordsFor(PolicyRelationId, policy_id, false); - - /* Record the new set of dependencies */ - target.classId = RelationRelationId; - target.objectId = relid; - target.objectSubId = 0; + /* Remove all the old shared dependencies (roles) */ + deleteSharedDependencyRecordsFor(PolicyRelationId, policy_id, 0); + /* Record the new shared dependencies (roles) */ myself.classId = PolicyRelationId; myself.objectId = policy_id; myself.objectSubId = 0; - recordDependencyOn(&myself, &target, DEPENDENCY_AUTO); - - if (qual_expr) - recordDependencyOnExpr(&myself, qual_expr, qual_parse_rtable, - DEPENDENCY_NORMAL); - - if (with_check_qual) - recordDependencyOnExpr(&myself, with_check_qual, - with_check_parse_rtable, - DEPENDENCY_NORMAL); - - /* Remove all the old shared dependencies (roles) */ - deleteSharedDependencyRecordsFor(PolicyRelationId, policy_id, 0); - - /* Record the new shared dependencies (roles) */ target.classId = AuthIdRelationId; target.objectSubId = 0; for (i = 0; i < num_roles; i++) @@ -644,21 +537,27 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id) /* Make updates visible */ CommandCounterIncrement(); - /* Invalidate Relation Cache */ - CacheInvalidateRelcache(rel); - } - else + /* + * Invalidate relcache entry for rel the policy belongs to, to force + * redoing any dependent plans. In case of a race condition where the + * rel was just dropped, we need do nothing. + */ + reltup = SearchSysCache1(RELOID, ObjectIdGetDatum(relid)); + if (HeapTupleIsValid(reltup)) { - /* No roles would remain, so drop the policy instead */ - keep_policy = false; + CacheInvalidateRelcacheByTuple(reltup); + ReleaseSysCache(reltup); } } + else + { + /* No roles would remain, so drop the policy instead. */ + keep_policy = false; + } /* Clean up. */ systable_endscan(sscan); - relation_close(rel, NoLock); - table_close(pg_policy_rel, RowExclusiveLock); return keep_policy; From 704e1dbd9aa29a0b46c356f1803ad55cbdef2c20 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sat, 26 Jun 2021 12:39:54 +0900 Subject: [PATCH 534/671] Remove some useless logs from the TAP tests of pgbench MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 002_pgbench_no_server was printing some array pointers instead of the actual contents of those arrays for the expected outputs of stdout and stderr for a tested command. This does not add any new information that can help with debugging as the test names allow to track failure locations, if any. This commit simply removes those logs as the rest of the printed information is redundant with command_checks_all(). Per discussion with Andrew Dunstan and Álvaro Herrera. Discussion: https://postgr.es/m/YNXNFaG7IgkzZanD@paquier.xyz Backpatch-through: 11 --- src/bin/pgbench/t/002_pgbench_no_server.pl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/bin/pgbench/t/002_pgbench_no_server.pl b/src/bin/pgbench/t/002_pgbench_no_server.pl index 9023fac52d5b7..346a2667fcacf 100644 --- a/src/bin/pgbench/t/002_pgbench_no_server.pl +++ b/src/bin/pgbench/t/002_pgbench_no_server.pl @@ -26,7 +26,6 @@ sub pgbench local $Test::Builder::Level = $Test::Builder::Level + 1; my ($opts, $stat, $out, $err, $name) = @_; - print STDERR "opts=$opts, stat=$stat, out=$out, err=$err, name=$name"; command_checks_all([ 'pgbench', split(/\s+/, $opts) ], $stat, $out, $err, $name); return; From d5a2c413fcdd187dc16c4fab16610af7d4849cc1 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sat, 26 Jun 2021 13:52:48 +0900 Subject: [PATCH 535/671] Remove non-existing variable reference in MSVC's Solution.pm The version string is grabbed from PACKAGE_VERSION in pg_config.h in the MSVC build since 8f4fb4c6, but an error message referenced a variable that existed before that. This had no consequences except if one messes up enough with the version number of the build. Author: Anton Voloshin Discussion: https://postgr.es/m/af79ee1b-9962-b299-98e1-f90a289e19e6@postgrespro.ru Backpatch-through: 13 --- src/tools/msvc/Solution.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index a7b8f720b5586..fcb43b0ca05a4 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -176,7 +176,7 @@ sub GenerateFiles if ($package_version !~ /^(\d+)(?:\.(\d+))?/) { - confess "Bad format of version: $self->{strver}\n"; + confess "Bad format of version: $package_version\n"; } $majorver = sprintf("%d", $1); $minorver = sprintf("%d", $2 ? $2 : 0); From 8ec00dc5cd70e0e579e9fbf8661bc46f5ccd8078 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 26 Jun 2021 14:20:17 -0400 Subject: [PATCH 536/671] Remove undesirable libpq dependency on stringinfo.c. Commit c0cb87fbb unwisely introduced a dependency on the StringInfo machinery in fe-connect.c. We must not use that in libpq, because it will do a summary exit(1) if it hits OOM, and that is not appropriate behavior for a general-purpose library. The goal of allowing arbitrary line lengths in service files doesn't seem like it's worth a lot of effort, so revert back to the previous method of using a stack-allocated buffer and failing on buffer overflow. This isn't an exact revert though. I kept that patch's refactoring to have a single exit path, as that seems cleaner than having each error path know what to do to clean up. Also, I made the fixed-size buffer 1024 bytes not 256, just to push off the need for an expandable buffer some more. There is more to do here; in particular the lack of any mechanical check for this type of mistake now seems pretty hazardous. But this fix gets us back to the level of robustness we had in v13, anyway. Discussion: https://postgr.es/m/daeb22ec6ca8ef61e94d766a9b35fb03cabed38e.camel@vmware.com --- src/interfaces/libpq/fe-connect.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 80703698b81e0..3faf05a7e7187 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -28,7 +28,6 @@ #include "fe-auth.h" #include "libpq-fe.h" #include "libpq-int.h" -#include "lib/stringinfo.h" #include "mb/pg_wchar.h" #include "pg_config_paths.h" #include "port/pg_bswap.h" @@ -5163,7 +5162,7 @@ parseServiceFile(const char *serviceFile, i; FILE *f; char *line; - StringInfoData linebuf; + char buf[1024]; *group_found = false; @@ -5175,18 +5174,26 @@ parseServiceFile(const char *serviceFile, return 1; } - initStringInfo(&linebuf); - - while (pg_get_line_buf(f, &linebuf)) + while ((line = fgets(buf, sizeof(buf), f)) != NULL) { + int len; + linenr++; - /* ignore whitespace at end of line, especially the newline */ - while (linebuf.len > 0 && - isspace((unsigned char) linebuf.data[linebuf.len - 1])) - linebuf.data[--linebuf.len] = '\0'; + if (strlen(line) >= sizeof(buf) - 1) + { + appendPQExpBuffer(errorMessage, + libpq_gettext("line %d too long in service file \"%s\"\n"), + linenr, + serviceFile); + result = 2; + goto exit; + } - line = linebuf.data; + /* ignore whitespace at end of line, especially the newline */ + len = strlen(line); + while (len > 0 && isspace((unsigned char) line[len - 1])) + line[--len] = '\0'; /* ignore leading whitespace too */ while (*line && isspace((unsigned char) line[0])) @@ -5303,7 +5310,6 @@ parseServiceFile(const char *serviceFile, exit: fclose(f); - pfree(linebuf.data); return result; } From dcffc9ba8a1e0ab1b0a57e9b9d38e3dc9960f83f Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 26 Jun 2021 15:45:16 -0400 Subject: [PATCH 537/671] Doc: update v14 release notes for revert of commit c0cb87fbb. --- doc/src/sgml/release-14.sgml | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 72809732d50d1..000f4e64c42d9 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -3114,22 +3114,6 @@ Author: Alvaro Herrera - - - Allow the libpq service file - to have unlimited line lengths (Daniel Gustafsson) - - - - The previous limit was 255 bytes. - - - - - From c302a6139072fed9410204fa9e751d95930e05ff Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sun, 27 Jun 2021 09:41:16 +0200 Subject: [PATCH 538/671] Error message refactoring Take some untranslatable things out of the message and replace by format placeholders, to reduce translatable strings and reduce translation mistakes. --- src/backend/replication/logical/logical.c | 30 +++++++++++++++-------- src/backend/statistics/extended_stats.c | 3 ++- src/backend/utils/adt/numeric.c | 16 ++++++------ 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index ffc6160e9f380..d536a5f3ba3b5 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -865,7 +865,8 @@ begin_prepare_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn) if (ctx->callbacks.begin_prepare_cb == NULL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("logical replication at prepare time requires begin_prepare_cb callback"))); + errmsg("logical replication at prepare time requires a %s callback", + "begin_prepare_cb"))); /* do the actual work: call callback */ ctx->callbacks.begin_prepare_cb(ctx, txn); @@ -908,7 +909,8 @@ prepare_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn, if (ctx->callbacks.prepare_cb == NULL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("logical replication at prepare time requires prepare_cb callback"))); + errmsg("logical replication at prepare time requires a %s callback", + "prepare_cb"))); /* do the actual work: call callback */ ctx->callbacks.prepare_cb(ctx, txn, prepare_lsn); @@ -951,7 +953,8 @@ commit_prepared_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn, if (ctx->callbacks.commit_prepared_cb == NULL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("logical replication at prepare time requires commit_prepared_cb callback"))); + errmsg("logical replication at prepare time requires a %s callback", + "commit_prepared_cb"))); /* do the actual work: call callback */ ctx->callbacks.commit_prepared_cb(ctx, txn, commit_lsn); @@ -995,7 +998,8 @@ rollback_prepared_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn, if (ctx->callbacks.rollback_prepared_cb == NULL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("logical replication at prepare time requires rollback_prepared_cb callback"))); + errmsg("logical replication at prepare time requires a %s callback", + "rollback_prepared_cb"))); /* do the actual work: call callback */ ctx->callbacks.rollback_prepared_cb(ctx, txn, prepare_end_lsn, @@ -1217,7 +1221,8 @@ stream_start_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn, if (ctx->callbacks.stream_start_cb == NULL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("logical streaming requires a stream_start_cb callback"))); + errmsg("logical streaming requires a %s callback", + "stream_start_cb"))); ctx->callbacks.stream_start_cb(ctx, txn); @@ -1263,7 +1268,8 @@ stream_stop_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn, if (ctx->callbacks.stream_stop_cb == NULL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("logical streaming requires a stream_stop_cb callback"))); + errmsg("logical streaming requires a %s callback", + "stream_stop_cb"))); ctx->callbacks.stream_stop_cb(ctx, txn); @@ -1302,7 +1308,8 @@ stream_abort_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn, if (ctx->callbacks.stream_abort_cb == NULL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("logical streaming requires a stream_abort_cb callback"))); + errmsg("logical streaming requires a %s callback", + "stream_abort_cb"))); ctx->callbacks.stream_abort_cb(ctx, txn, abort_lsn); @@ -1345,7 +1352,8 @@ stream_prepare_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn, if (ctx->callbacks.stream_prepare_cb == NULL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("logical streaming at prepare time requires a stream_prepare_cb callback"))); + errmsg("logical streaming at prepare time requires a %s callback", + "stream_prepare_cb"))); ctx->callbacks.stream_prepare_cb(ctx, txn, prepare_lsn); @@ -1384,7 +1392,8 @@ stream_commit_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn, if (ctx->callbacks.stream_commit_cb == NULL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("logical streaming requires a stream_commit_cb callback"))); + errmsg("logical streaming requires a %s callback", + "stream_commit_cb"))); ctx->callbacks.stream_commit_cb(ctx, txn, commit_lsn); @@ -1430,7 +1439,8 @@ stream_change_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn, if (ctx->callbacks.stream_change_cb == NULL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("logical streaming requires a stream_change_cb callback"))); + errmsg("logical streaming requires a %s callback", + "stream_change_cb"))); ctx->callbacks.stream_change_cb(ctx, txn, relation, change); diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index b05e818ba9ede..2e55913bc8f39 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -2274,7 +2274,8 @@ serialize_expr_stats(AnlExprData *exprdata, int nexprs) if (!OidIsValid(typOid)) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("relation \"pg_statistic\" does not have a composite type"))); + errmsg("relation \"%s\" does not have a composite type", + "pg_statistic"))); for (exprno = 0; exprno < nexprs; exprno++) { diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index 9525ade1f7c9e..eb78f0b9c2a14 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -4182,11 +4182,11 @@ numeric_int4_opt_error(Numeric num, bool *have_error) if (NUMERIC_IS_NAN(num)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot convert NaN to integer"))); + errmsg("cannot convert NaN to %s", "integer"))); else ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot convert infinity to integer"))); + errmsg("cannot convert infinity to %s", "integer"))); } } @@ -4260,11 +4260,11 @@ numeric_int8(PG_FUNCTION_ARGS) if (NUMERIC_IS_NAN(num)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot convert NaN to bigint"))); + errmsg("cannot convert NaN to %s", "bigint"))); else ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot convert infinity to bigint"))); + errmsg("cannot convert infinity to %s", "bigint"))); } /* Convert to variable format and thence to int8 */ @@ -4301,11 +4301,11 @@ numeric_int2(PG_FUNCTION_ARGS) if (NUMERIC_IS_NAN(num)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot convert NaN to smallint"))); + errmsg("cannot convert NaN to %s", "smallint"))); else ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot convert infinity to smallint"))); + errmsg("cannot convert infinity to %s", "smallint"))); } /* Convert to variable format and thence to int8 */ @@ -4496,11 +4496,11 @@ numeric_pg_lsn(PG_FUNCTION_ARGS) if (NUMERIC_IS_NAN(num)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot convert NaN to pg_lsn"))); + errmsg("cannot convert NaN to %s", "pg_lsn"))); else ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot convert infinity to pg_lsn"))); + errmsg("cannot convert infinity to %s", "pg_lsn"))); } /* Convert to variable format and thence to pg_lsn */ From 642c0697c96b9c6ba5d194653a329f7820565f01 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 27 Jun 2021 12:45:04 -0400 Subject: [PATCH 539/671] Remove memory leaks in isolationtester. specscanner.l leaked a kilobyte of memory per token of the spec file. Apparently somebody thought that the introductory code block would be executed once; but it's once per yylex() call. A couple of functions in isolationtester.c leaked small amounts of memory due to not bothering to free one-time allocations. Might as well improve these so that valgrind gives this program a clean bill of health. Also get rid of an ugly static variable. Coverity complained about one of the one-time leaks, which led me to try valgrind'ing isolationtester, which led to discovery of the larger leak. --- src/test/isolation/isolationtester.c | 20 +++++++++++++------- src/test/isolation/specscanner.l | 8 ++++++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/test/isolation/isolationtester.c b/src/test/isolation/isolationtester.c index 01a420bcd3a1f..88594a3cb5dda 100644 --- a/src/test/isolation/isolationtester.c +++ b/src/test/isolation/isolationtester.c @@ -52,8 +52,8 @@ static int64 max_step_wait = 300 * USECS_PER_SEC; static void check_testspec(TestSpec *testspec); static void run_testspec(TestSpec *testspec); static void run_all_permutations(TestSpec *testspec); -static void run_all_permutations_recurse(TestSpec *testspec, int nsteps, - PermutationStep **steps); +static void run_all_permutations_recurse(TestSpec *testspec, int *piles, + int nsteps, PermutationStep **steps); static void run_named_permutations(TestSpec *testspec); static void run_permutation(TestSpec *testspec, int nsteps, PermutationStep **steps); @@ -360,9 +360,9 @@ check_testspec(TestSpec *testspec) fprintf(stderr, "unused step name: %s\n", allsteps[i]->name); } } -} -static int *piles; + free(allsteps); +} /* * Run the permutations specified in the spec, or all if none were @@ -387,6 +387,7 @@ run_all_permutations(TestSpec *testspec) int i; PermutationStep *steps; PermutationStep **stepptrs; + int *piles; /* Count the total number of steps in all sessions */ nsteps = 0; @@ -412,11 +413,16 @@ run_all_permutations(TestSpec *testspec) for (i = 0; i < testspec->nsessions; i++) piles[i] = 0; - run_all_permutations_recurse(testspec, 0, stepptrs); + run_all_permutations_recurse(testspec, piles, 0, stepptrs); + + free(steps); + free(stepptrs); + free(piles); } static void -run_all_permutations_recurse(TestSpec *testspec, int nsteps, PermutationStep **steps) +run_all_permutations_recurse(TestSpec *testspec, int *piles, + int nsteps, PermutationStep **steps) { int i; bool found = false; @@ -438,7 +444,7 @@ run_all_permutations_recurse(TestSpec *testspec, int nsteps, PermutationStep **s piles[i]++; - run_all_permutations_recurse(testspec, nsteps + 1, steps); + run_all_permutations_recurse(testspec, piles, nsteps + 1, steps); piles[i]--; diff --git a/src/test/isolation/specscanner.l b/src/test/isolation/specscanner.l index 5de11abab510a..d9fa6a5b54aa9 100644 --- a/src/test/isolation/specscanner.l +++ b/src/test/isolation/specscanner.l @@ -52,8 +52,12 @@ self [,()*] %% %{ - litbuf = pg_malloc(LITBUF_INIT); - litbufsize = LITBUF_INIT; + /* Allocate litbuf in first call of yylex() */ + if (litbuf == NULL) + { + litbuf = pg_malloc(LITBUF_INIT); + litbufsize = LITBUF_INIT; + } %} /* Keywords (must appear before the {identifier} rule!) */ From 09a69f6e23369847cf11cd03c999a0342d47bbcc Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 28 Jun 2021 11:17:05 +0900 Subject: [PATCH 540/671] Add test for CREATE INDEX CONCURRENTLY with not-so-immutable predicate 83158f7 has improved index_set_state_flags() so as it is possible to use transactional updates when updating pg_index state flags, but there was not really a test case which stressed directly the possibility it fixed. This commit adds such a test, using a predicate that looks valid in appearance but calls a stable function. Author: Andrey Lepikhov Discussion: https://postgr.es/m/9b905019-5297-7372-0ad2-e1a4bb66a719@postgrespro.ru Backpatch-through: 9.6 --- src/test/regress/expected/create_index.out | 12 ++++++++++++ src/test/regress/sql/create_index.sql | 13 ++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out index 49f2a158c1fb2..4750eac359a57 100644 --- a/src/test/regress/expected/create_index.out +++ b/src/test/regress/expected/create_index.out @@ -1397,6 +1397,18 @@ BEGIN; CREATE INDEX CONCURRENTLY concur_index7 ON concur_heap(f1); ERROR: CREATE INDEX CONCURRENTLY cannot run inside a transaction block COMMIT; +-- test where predicate is able to do a transactional update during +-- a concurrent build before switching pg_index state flags. +CREATE FUNCTION predicate_stable() RETURNS bool IMMUTABLE +LANGUAGE plpgsql AS $$ +BEGIN + EXECUTE 'SELECT txid_current()'; + RETURN true; +END; $$; +CREATE INDEX CONCURRENTLY concur_index8 ON concur_heap (f1) + WHERE predicate_stable(); +DROP INDEX concur_index8; +DROP FUNCTION predicate_stable(); -- But you can do a regular index build in a transaction BEGIN; CREATE INDEX std_index on concur_heap(f2); diff --git a/src/test/regress/sql/create_index.sql b/src/test/regress/sql/create_index.sql index 8bc76f7c6f187..22209b0691f9a 100644 --- a/src/test/regress/sql/create_index.sql +++ b/src/test/regress/sql/create_index.sql @@ -481,11 +481,22 @@ CREATE INDEX CONCURRENTLY concur_index4 on concur_heap(f2) WHERE f1='a'; CREATE INDEX CONCURRENTLY concur_index5 on concur_heap(f2) WHERE f1='x'; -- here we also check that you can default the index name CREATE INDEX CONCURRENTLY on concur_heap((f2||f1)); - -- You can't do a concurrent index build in a transaction BEGIN; CREATE INDEX CONCURRENTLY concur_index7 ON concur_heap(f1); COMMIT; +-- test where predicate is able to do a transactional update during +-- a concurrent build before switching pg_index state flags. +CREATE FUNCTION predicate_stable() RETURNS bool IMMUTABLE +LANGUAGE plpgsql AS $$ +BEGIN + EXECUTE 'SELECT txid_current()'; + RETURN true; +END; $$; +CREATE INDEX CONCURRENTLY concur_index8 ON concur_heap (f1) + WHERE predicate_stable(); +DROP INDEX concur_index8; +DROP FUNCTION predicate_stable(); -- But you can do a regular index build in a transaction BEGIN; From 79718c1c6c007c27e9c1b8e92bd96d17067606fa Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 28 Jun 2021 12:11:18 +0900 Subject: [PATCH 541/671] Fix variable initialization with ALTER SUBSCRIPTION DROP PUBLICATION copy_data is not a supported option with this sub-command of ALTER SUBSCRIPTION, which would not make a variable related to it initialized after parsing the option set in DefElems. A refresh could then refer to it. Author: Ranier Vilela Reviewed-by: Peter Smith Discussion: https://postgr.es/m/CAEudQAp5P8nr=ze2Gv=BMj=DJFZnrvendZCZcC-fos3QiDe2sg@mail.gmail.com --- src/backend/commands/subscriptioncmds.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index e9a97db9a5579..b862e59f1da8a 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -949,7 +949,7 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) case ALTER_SUBSCRIPTION_DROP_PUBLICATION: { bool isadd = stmt->kind == ALTER_SUBSCRIPTION_ADD_PUBLICATION; - bool copy_data; + bool copy_data = false; bool refresh; List *publist; From 34a8b64b4e5f0cd818e5cc7f98846de57938ea57 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Mon, 28 Jun 2021 15:17:43 +1200 Subject: [PATCH 542/671] Change recovery_init_sync_method to PGC_SIGHUP. The setting has no effect except during startup. It's still nice to be able to change it dynamically, which is expected to be pretty useful to an admin following crash recovery when restarting the cluster is not so appealing. Per discussions following commits 2941138e6 and 61752afb2. Author: Justin Pryzby Reviewed-by: Fujii Masao Reviewed-by: Michael Paquier Reviewed-by: Thomas Munro Discussion: https://postgr.es/m/20210529192321.GM2082%40telsasoft.com --- doc/src/sgml/config.sgml | 3 ++- src/backend/utils/misc/guc.c | 2 +- src/backend/utils/misc/postgresql.conf.sample | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 03b33cfb7e453..3eee9883595ff 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -9929,7 +9929,8 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' appear only in kernel logs. - This parameter can only be set at server start. + This parameter can only be set in the + postgresql.conf file or on the server command line. diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index eaeeee58a0bd8..297e705b806a6 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -4946,7 +4946,7 @@ static struct config_enum ConfigureNamesEnum[] = }, { - {"recovery_init_sync_method", PGC_POSTMASTER, ERROR_HANDLING_OPTIONS, + {"recovery_init_sync_method", PGC_SIGHUP, ERROR_HANDLING_OPTIONS, gettext_noop("Sets the method for synchronizing the data directory before crash recovery."), }, &recovery_init_sync_method, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index a5a7174b0e751..af04ec3c744e7 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -772,7 +772,6 @@ # data? # (change requires restart) #recovery_init_sync_method = fsync # fsync, syncfs (Linux 5.8+) - # (change requires restart) #------------------------------------------------------------------------------ From b786304c2904a4e444fe740bbc2e0b69efacc19d Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Mon, 28 Jun 2021 09:29:38 +0530 Subject: [PATCH 543/671] Fix race condition in TransactionGroupUpdateXidStatus(). When we cannot immediately acquire XactSLRULock in exclusive mode at commit time, we add ourselves to a list of processes that need their XIDs status update. We do this if the clog page where we need to update the current transaction status is the same as the group leader's clog page, otherwise, we allow the caller to clear it by itself. Now, when we can't add ourselves to any group, we were not clearing the current proc if it has already become a member of some group which was leading to an assertion failure when the same proc was assigned to another backend after the current backend exits. Reported-by: Alexander Lakhin Bug: 17072 Author: Amit Kapila Tested-By: Alexander Lakhin Backpatch-through: 11, where it was introduced Discussion: https://postgr.es/m/17072-2f8764857ef2c92a@postgresql.org --- src/backend/access/transam/clog.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/backend/access/transam/clog.c b/src/backend/access/transam/clog.c index 6fa4713fb4d8a..3ea16a270a8c6 100644 --- a/src/backend/access/transam/clog.c +++ b/src/backend/access/transam/clog.c @@ -451,7 +451,12 @@ TransactionGroupUpdateXidStatus(TransactionId xid, XidStatus status, if (nextidx != INVALID_PGPROCNO && ProcGlobal->allProcs[nextidx].clogGroupMemberPage != proc->clogGroupMemberPage) { + /* + * Ensure that this proc is not a member of any clog group that + * needs an XID status update. + */ proc->clogGroupMember = false; + pg_atomic_write_u32(&proc->clogGroupNext, INVALID_PGPROCNO); return false; } From ee3fdb8f3465b3a5937a7fe647b7b6584a600647 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Mon, 28 Jun 2021 10:56:53 +0530 Subject: [PATCH 544/671] Improve RelationGetIdentityKeyBitmap(). We were using RelationGetIndexList() to update the relation's replica identity index but instead, we can directly use RelationGetReplicaIndex() which uses the same functionality. This is a minor code readability improvement. Author: Japin Li Reviewed-By: Takamichi Osumi, Amit Kapila Discussion: https://postgr.es/m/4C99A862-69C8-431F-960A-81B1151F1B89@enterprisedb.com --- src/backend/utils/cache/relcache.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index d55ae016d090a..94fbf1aa190c4 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -5244,9 +5244,9 @@ Bitmapset * RelationGetIdentityKeyBitmap(Relation relation) { Bitmapset *idindexattrs = NULL; /* columns in the replica identity */ - List *indexoidlist; Relation indexDesc; int i; + Oid replidindex; MemoryContext oldcxt; /* Quick exit if we already computed the result */ @@ -5260,18 +5260,14 @@ RelationGetIdentityKeyBitmap(Relation relation) /* Historic snapshot must be set. */ Assert(HistoricSnapshotActive()); - indexoidlist = RelationGetIndexList(relation); - - /* Fall out if no indexes (but relhasindex was set) */ - if (indexoidlist == NIL) - return NULL; + replidindex = RelationGetReplicaIndex(relation); /* Fall out if there is no replica identity index */ - if (!OidIsValid(relation->rd_replidindex)) + if (!OidIsValid(replidindex)) return NULL; /* Look up the description for the replica identity index */ - indexDesc = RelationIdGetRelation(relation->rd_replidindex); + indexDesc = RelationIdGetRelation(replidindex); if (!RelationIsValid(indexDesc)) elog(ERROR, "could not open relation with OID %u", @@ -5295,7 +5291,6 @@ RelationGetIdentityKeyBitmap(Relation relation) } RelationClose(indexDesc); - list_free(indexoidlist); /* Don't leak the old values of these bitmaps, if any */ bms_free(relation->rd_idattr); From c31833779d5a4775d7220be4b9143bec66c9a9fd Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 28 Jun 2021 08:36:44 +0200 Subject: [PATCH 545/671] Message style improvements --- src/backend/access/common/toast_compression.c | 2 +- src/backend/catalog/catalog.c | 14 +++++++++----- src/backend/catalog/pg_inherits.c | 2 +- src/backend/commands/tablecmds.c | 2 +- src/backend/postmaster/pgstat.c | 2 +- src/backend/storage/file/fd.c | 4 ++-- src/backend/storage/ipc/standby.c | 18 +++++++++--------- src/backend/tcop/fastpath.c | 2 +- src/backend/utils/adt/multirangetypes.c | 4 ++-- src/test/regress/expected/compression_1.out | 10 +++++----- src/test/regress/expected/multirangetypes.out | 2 +- 11 files changed, 33 insertions(+), 29 deletions(-) diff --git a/src/backend/access/common/toast_compression.c b/src/backend/access/common/toast_compression.c index 9e9d4457aceaa..845618349fe0a 100644 --- a/src/backend/access/common/toast_compression.c +++ b/src/backend/access/common/toast_compression.c @@ -29,7 +29,7 @@ int default_toast_compression = TOAST_PGLZ_COMPRESSION; #define NO_LZ4_SUPPORT() \ ereport(ERROR, \ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), \ - errmsg("unsupported LZ4 compression method"), \ + errmsg("compression method lz4 not supported"), \ errdetail("This functionality requires the server to be built with lz4 support."), \ errhint("You need to rebuild PostgreSQL using %s.", "--with-lz4"))) diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c index 245d536372655..7cabe741c66e0 100644 --- a/src/backend/catalog/catalog.c +++ b/src/backend/catalog/catalog.c @@ -375,10 +375,12 @@ GetNewOidWithIndex(Relation relation, Oid indexId, AttrNumber oidcolumn) if (retries >= retries_before_log) { ereport(LOG, - (errmsg("still finding an unused OID within relation \"%s\"", + (errmsg("still searching for an unused OID in relation \"%s\"", RelationGetRelationName(relation)), - errdetail("OID candidates were checked \"%llu\" times, but no unused OID is yet found.", - (unsigned long long) retries))); + errdetail_plural("OID candidates have been checked %llu time, but no unused OID has been found yet.", + "OID candidates have been checked %llu times, but no unused OID has been found yet.", + retries, + (unsigned long long) retries))); /* * Double the number of retries to do before logging next until it @@ -400,8 +402,10 @@ GetNewOidWithIndex(Relation relation, Oid indexId, AttrNumber oidcolumn) if (retries > GETNEWOID_LOG_THRESHOLD) { ereport(LOG, - (errmsg("new OID has been assigned in relation \"%s\" after \"%llu\" retries", - RelationGetRelationName(relation), (unsigned long long) retries))); + (errmsg_plural("new OID has been assigned in relation \"%s\" after %llu retry", + "new OID has been assigned in relation \"%s\" after %llu retries", + retries, + RelationGetRelationName(relation), (unsigned long long) retries))); } return newOid; diff --git a/src/backend/catalog/pg_inherits.c b/src/backend/catalog/pg_inherits.c index 1c37a438c3915..ae990d487765a 100644 --- a/src/backend/catalog/pg_inherits.c +++ b/src/backend/catalog/pg_inherits.c @@ -593,7 +593,7 @@ DeleteInheritsTuple(Oid inhrelid, Oid inhparent, bool expect_detach_pending, errmsg("cannot detach partition \"%s\"", childname ? childname : "unknown relation"), errdetail("The partition is being detached concurrently or has an unfinished detach."), - errhint("Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation"))); + errhint("Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation."))); if (!detach_pending && expect_detach_pending) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 4e23c7fce5f49..97a9725df75c8 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -14773,7 +14773,7 @@ MarkInheritDetached(Relation child_rel, Relation parent_rel) get_rel_name(inhForm->inhrelid), get_namespace_name(parent_rel->rd_rel->relnamespace), RelationGetRelationName(parent_rel)), - errhint("Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the detach operation.")); + errhint("Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation.")); if (inhForm->inhrelid == RelationGetRelid(child_rel)) { diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index b0d07c0e0bb70..ce8888cc30074 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -1457,7 +1457,7 @@ pgstat_reset_shared_counters(const char *target) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("unrecognized reset target: \"%s\"", target), - errhint("Target must be \"archiver\", \"bgwriter\" or \"wal\"."))); + errhint("Target must be \"archiver\", \"bgwriter\", or \"wal\"."))); pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_RESETSHAREDCOUNTER); pgstat_send(&msg, sizeof(msg)); diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c index e8cd7ef0886cf..a340a5f6afe65 100644 --- a/src/backend/storage/file/fd.c +++ b/src/backend/storage/file/fd.c @@ -3295,13 +3295,13 @@ do_syncfs(const char *path) { ereport(LOG, (errcode_for_file_access(), - errmsg("could not open %s: %m", path))); + errmsg("could not open file \"%s\": %m", path))); return; } if (syncfs(fd) < 0) ereport(LOG, (errcode_for_file_access(), - errmsg("could not sync filesystem for \"%s\": %m", path))); + errmsg("could not synchronize file system for file \"%s\": %m", path))); CloseTransientFile(fd); } #endif diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index 553b6e5460354..aeecaf6cabf5b 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -303,7 +303,7 @@ LogRecoveryConflict(ProcSignalReason reason, TimestampTz wait_start, { ereport(LOG, errmsg("recovery still waiting after %ld.%03d ms: %s", - msecs, usecs, _(get_recovery_conflict_desc(reason))), + msecs, usecs, get_recovery_conflict_desc(reason)), nprocs > 0 ? errdetail_log_plural("Conflicting process: %s.", "Conflicting processes: %s.", nprocs, buf.data) : 0); @@ -312,7 +312,7 @@ LogRecoveryConflict(ProcSignalReason reason, TimestampTz wait_start, { ereport(LOG, errmsg("recovery finished waiting after %ld.%03d ms: %s", - msecs, usecs, _(get_recovery_conflict_desc(reason)))); + msecs, usecs, get_recovery_conflict_desc(reason))); } if (nprocs > 0) @@ -1418,27 +1418,27 @@ LogStandbyInvalidations(int nmsgs, SharedInvalidationMessage *msgs, static const char * get_recovery_conflict_desc(ProcSignalReason reason) { - const char *reasonDesc = gettext_noop("unknown reason"); + const char *reasonDesc = _("unknown reason"); switch (reason) { case PROCSIG_RECOVERY_CONFLICT_BUFFERPIN: - reasonDesc = gettext_noop("recovery conflict on buffer pin"); + reasonDesc = _("recovery conflict on buffer pin"); break; case PROCSIG_RECOVERY_CONFLICT_LOCK: - reasonDesc = gettext_noop("recovery conflict on lock"); + reasonDesc = _("recovery conflict on lock"); break; case PROCSIG_RECOVERY_CONFLICT_TABLESPACE: - reasonDesc = gettext_noop("recovery conflict on tablespace"); + reasonDesc = _("recovery conflict on tablespace"); break; case PROCSIG_RECOVERY_CONFLICT_SNAPSHOT: - reasonDesc = gettext_noop("recovery conflict on snapshot"); + reasonDesc = _("recovery conflict on snapshot"); break; case PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK: - reasonDesc = gettext_noop("recovery conflict on buffer deadlock"); + reasonDesc = _("recovery conflict on buffer deadlock"); break; case PROCSIG_RECOVERY_CONFLICT_DATABASE: - reasonDesc = gettext_noop("recovery conflict on database"); + reasonDesc = _("recovery conflict on database"); break; default: break; diff --git a/src/backend/tcop/fastpath.c b/src/backend/tcop/fastpath.c index 9fa8997cb30b7..6343dd269b45a 100644 --- a/src/backend/tcop/fastpath.c +++ b/src/backend/tcop/fastpath.c @@ -145,7 +145,7 @@ fetch_fp_info(Oid func_id, struct fp_info *fip) if (pp->prokind != PROKIND_FUNCTION || pp->proretset) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot call function %s via fastpath interface", + errmsg("cannot call function \"%s\" via fastpath interface", NameStr(pp->proname)))); /* watch out for catalog entries with more than FUNC_MAX_ARGS args */ diff --git a/src/backend/utils/adt/multirangetypes.c b/src/backend/utils/adt/multirangetypes.c index fbcc27d0726c7..7aeec7617fc5e 100644 --- a/src/backend/utils/adt/multirangetypes.c +++ b/src/backend/utils/adt/multirangetypes.c @@ -282,7 +282,7 @@ multirange_in(PG_FUNCTION_ARGS) (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("malformed multirange literal: \"%s\"", input_str), - errdetail("Junk after right brace."))); + errdetail("Junk after closing right brace."))); ret = make_multirange(mltrngtypoid, rangetyp, range_count, ranges); PG_RETURN_MULTIRANGE_P(ret); @@ -968,7 +968,7 @@ multirange_constructor2(PG_FUNCTION_ARGS) if (dims > 1) ereport(ERROR, (errcode(ERRCODE_CARDINALITY_VIOLATION), - errmsg("multiranges cannot be constructed from multi-dimensional arrays"))); + errmsg("multiranges cannot be constructed from multidimensional arrays"))); rngtypid = ARR_ELEMTYPE(rangeArray); if (rngtypid != rangetyp->type_id) diff --git a/src/test/regress/expected/compression_1.out b/src/test/regress/expected/compression_1.out index 15a23924ec719..1ce2962d556a5 100644 --- a/src/test/regress/expected/compression_1.out +++ b/src/test/regress/expected/compression_1.out @@ -14,7 +14,7 @@ Indexes: "idx" btree (f1) CREATE TABLE cmdata1(f1 TEXT COMPRESSION lz4); -ERROR: unsupported LZ4 compression method +ERROR: compression method lz4 not supported DETAIL: This functionality requires the server to be built with lz4 support. HINT: You need to rebuild PostgreSQL using --with-lz4. INSERT INTO cmdata1 VALUES(repeat('1234567890', 1004)); @@ -193,7 +193,7 @@ LINE 1: SELECT pg_column_compression(x) FROM compressmv; ^ -- test compression with partition CREATE TABLE cmpart(f1 text COMPRESSION lz4) PARTITION BY HASH(f1); -ERROR: unsupported LZ4 compression method +ERROR: compression method lz4 not supported DETAIL: This functionality requires the server to be built with lz4 support. HINT: You need to rebuild PostgreSQL using --with-lz4. CREATE TABLE cmpart1 PARTITION OF cmpart FOR VALUES WITH (MODULUS 2, REMAINDER 0); @@ -238,7 +238,7 @@ HINT: Available values: pglz. SET default_toast_compression = 'pglz'; -- test alter compression method ALTER TABLE cmdata ALTER COLUMN f1 SET COMPRESSION lz4; -ERROR: unsupported LZ4 compression method +ERROR: compression method lz4 not supported DETAIL: This functionality requires the server to be built with lz4 support. HINT: You need to rebuild PostgreSQL using --with-lz4. INSERT INTO cmdata VALUES (repeat('123456789', 4004)); @@ -272,7 +272,7 @@ ERROR: relation "compressmv" does not exist ALTER TABLE cmpart1 ALTER COLUMN f1 SET COMPRESSION pglz; ERROR: relation "cmpart1" does not exist ALTER TABLE cmpart2 ALTER COLUMN f1 SET COMPRESSION lz4; -ERROR: unsupported LZ4 compression method +ERROR: compression method lz4 not supported DETAIL: This functionality requires the server to be built with lz4 support. HINT: You need to rebuild PostgreSQL using --with-lz4. -- new data should be compressed with the current compression method @@ -312,7 +312,7 @@ SELECT pg_column_compression(f1) FROM cmdata; -- test expression index DROP TABLE cmdata2; CREATE TABLE cmdata2 (f1 TEXT COMPRESSION pglz, f2 TEXT COMPRESSION lz4); -ERROR: unsupported LZ4 compression method +ERROR: compression method lz4 not supported DETAIL: This functionality requires the server to be built with lz4 support. HINT: You need to rebuild PostgreSQL using --with-lz4. CREATE UNIQUE INDEX idx1 ON cmdata2 ((f1 || f2)); diff --git a/src/test/regress/expected/multirangetypes.out b/src/test/regress/expected/multirangetypes.out index 98ac592127b56..3e941aec68c46 100644 --- a/src/test/regress/expected/multirangetypes.out +++ b/src/test/regress/expected/multirangetypes.out @@ -17,7 +17,7 @@ select '{(,)}.'::textmultirange; ERROR: malformed multirange literal: "{(,)}." LINE 1: select '{(,)}.'::textmultirange; ^ -DETAIL: Junk after right brace. +DETAIL: Junk after closing right brace. select '{[a,c),}'::textmultirange; ERROR: malformed multirange literal: "{[a,c),}" LINE 1: select '{[a,c),}'::textmultirange; From e1c1c30f635390b6a3ae4993e8cac213a33e6e3f Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Mon, 28 Jun 2021 11:05:54 -0400 Subject: [PATCH 546/671] Pre branch pgindent / pgperltidy run Along the way make a slight adjustment to src/include/utils/queryjumble.h to avoid an unused typedef. --- src/backend/access/heap/hio.c | 4 +-- src/backend/catalog/genbki.pl | 10 +++--- src/backend/catalog/heap.c | 2 +- src/backend/executor/nodeModifyTable.c | 21 ++++++------ .../replication/logical/reorderbuffer.c | 4 +-- src/backend/replication/logical/tablesync.c | 2 +- src/backend/replication/pgoutput/pgoutput.c | 3 +- src/backend/storage/ipc/procarray.c | 2 +- src/bin/pgbench/t/001_pgbench_with_server.pl | 6 ++-- src/include/nodes/execnodes.h | 2 +- src/include/utils/queryjumble.h | 4 +-- src/test/perl/PostgresNode.pm | 4 +-- src/test/recovery/t/005_replay_delay.pl | 32 +++++++++---------- .../recovery/t/025_stuck_on_old_timeline.pl | 20 +++++++----- src/test/subscription/t/001_rep_changes.pl | 23 +++++++++---- src/test/subscription/t/010_truncate.pl | 9 ++---- src/test/subscription/t/013_partition.pl | 3 +- src/test/subscription/t/020_messages.pl | 9 +++--- src/tools/pgindent/typedefs.list | 10 ++++-- 19 files changed, 94 insertions(+), 76 deletions(-) diff --git a/src/backend/access/heap/hio.c b/src/backend/access/heap/hio.c index ffc89685bff6f..d34edb4190c8b 100644 --- a/src/backend/access/heap/hio.c +++ b/src/backend/access/heap/hio.c @@ -410,8 +410,8 @@ RelationGetBufferForTuple(Relation relation, Size len, } /* - * If the FSM knows nothing of the rel, try the last page before we - * give up and extend. This avoids one-tuple-per-page syndrome during + * If the FSM knows nothing of the rel, try the last page before we give + * up and extend. This avoids one-tuple-per-page syndrome during * bootstrapping or in a recently-started system. */ if (targetBlock == InvalidBlockNumber) diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index 81363a0710dcd..f023cb1209d5c 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -890,11 +890,11 @@ sub morph_row_for_pgattr # Copy the type data from pg_type, and add some type-dependent items my $type = $types{$atttype}; - $row->{atttypid} = $type->{oid}; - $row->{attlen} = $type->{typlen}; - $row->{attbyval} = $type->{typbyval}; - $row->{attalign} = $type->{typalign}; - $row->{attstorage} = $type->{typstorage}; + $row->{atttypid} = $type->{oid}; + $row->{attlen} = $type->{typlen}; + $row->{attbyval} = $type->{typbyval}; + $row->{attalign} = $type->{typalign}; + $row->{attstorage} = $type->{typstorage}; $row->{attcompression} = '\0'; # set attndims if it's an array type diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 1293dc04caa50..09370a8a5a0a4 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -2294,7 +2294,7 @@ StoreAttrDefault(Relation rel, AttrNumber attnum, valuesAtt[Anum_pg_attribute_atthasdef - 1] = true; replacesAtt[Anum_pg_attribute_atthasdef - 1] = true; - if (rel->rd_rel->relkind == RELKIND_RELATION && add_column_mode && + if (rel->rd_rel->relkind == RELKIND_RELATION && add_column_mode && !attgenerated) { expr2 = expression_planner(expr2); diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 143517bc760cc..c24684aa6fed4 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -704,16 +704,16 @@ ExecInsert(ModifyTableState *mtstate, } /* - * Initialize the batch slots. We don't know how many slots will be - * needed, so we initialize them as the batch grows, and we keep - * them across batches. To mitigate an inefficiency in how resource - * owner handles objects with many references (as with many slots - * all referencing the same tuple descriptor) we copy the tuple - * descriptor for each slot. + * Initialize the batch slots. We don't know how many slots will + * be needed, so we initialize them as the batch grows, and we + * keep them across batches. To mitigate an inefficiency in how + * resource owner handles objects with many references (as with + * many slots all referencing the same tuple descriptor) we copy + * the tuple descriptor for each slot. */ if (resultRelInfo->ri_NumSlots >= resultRelInfo->ri_NumSlotsInitialized) { - TupleDesc tdesc = CreateTupleDescCopy(slot->tts_tupleDescriptor); + TupleDesc tdesc = CreateTupleDescCopy(slot->tts_tupleDescriptor); resultRelInfo->ri_Slots[resultRelInfo->ri_NumSlots] = MakeSingleTupleTableSlot(tdesc, slot->tts_ops); @@ -3173,7 +3173,7 @@ ExecEndModifyTable(ModifyTableState *node) */ for (i = 0; i < node->mt_nrels; i++) { - int j; + int j; ResultRelInfo *resultRelInfo = node->resultRelInfo + i; if (!resultRelInfo->ri_usesFdwDirectModify && @@ -3183,8 +3183,9 @@ ExecEndModifyTable(ModifyTableState *node) resultRelInfo); /* - * Cleanup the initialized batch slots. This only matters for FDWs with - * batching, but the other cases will have ri_NumSlotsInitialized == 0. + * Cleanup the initialized batch slots. This only matters for FDWs + * with batching, but the other cases will have ri_NumSlotsInitialized + * == 0. */ for (j = 0; j < resultRelInfo->ri_NumSlotsInitialized; j++) { diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 19e96f3fd94ce..ad1c2bad01364 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -2215,8 +2215,8 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn, change_done: /* - * If speculative insertion was confirmed, the record isn't - * needed anymore. + * If speculative insertion was confirmed, the record + * isn't needed anymore. */ if (specinsert != NULL) { diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c index cc50eb875b1d1..682c107e7479e 100644 --- a/src/backend/replication/logical/tablesync.c +++ b/src/backend/replication/logical/tablesync.c @@ -759,7 +759,7 @@ fetch_remote_table_info(char *nspname, char *relname, " ORDER BY a.attnum", lrel->remoteid, (walrcv_server_version(LogRepWorkerWalRcvConn) >= 120000 ? - "AND a.attgenerated = ''" : ""), + "AND a.attgenerated = ''" : ""), lrel->remoteid); res = walrcv_exec(LogRepWorkerWalRcvConn, cmd.data, lengthof(attrRow), attrRow); diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index 63f108f960f75..abd5217ab1b5e 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -1031,7 +1031,8 @@ get_rel_sync_entry(PGOutputData *data, Oid relid) entry->pubactions.pubinsert = entry->pubactions.pubupdate = entry->pubactions.pubdelete = entry->pubactions.pubtruncate = false; entry->publish_as_relid = InvalidOid; - entry->map = NULL; /* will be set by maybe_send_schema() if needed */ + entry->map = NULL; /* will be set by maybe_send_schema() if + * needed */ } /* Validate the entry */ diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index e4c008e443f43..793df973b4248 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -1974,7 +1974,7 @@ GetOldestNonRemovableTransactionId(Relation rel) if (rel == NULL || rel->rd_rel->relisshared || RecoveryInProgress()) return horizons.shared_oldest_nonremovable; else if (IsCatalogRelation(rel) || - RelationIsAccessibleInLogicalDecoding(rel)) + RelationIsAccessibleInLogicalDecoding(rel)) return horizons.catalog_oldest_nonremovable; else if (RELATION_IS_LOCAL(rel)) return horizons.temp_oldest_nonremovable; diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index 781cc08fb17eb..3aa9d5d75309e 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -1093,7 +1093,7 @@ sub pgbench ], [ 'gset alone', 1, [qr{gset must follow an SQL command}], q{\gset} ], [ - 'gset no SQL', 1, + 'gset no SQL', 1, [qr{gset must follow an SQL command}], q{\set i +1 \gset} ], @@ -1102,7 +1102,7 @@ sub pgbench [qr{too many arguments}], q{SELECT 1 \gset a b} ], [ - 'gset after gset', 1, + 'gset after gset', 1, [qr{gset must follow an SQL command}], q{SELECT 1 AS i \gset \gset} ], @@ -1197,7 +1197,7 @@ sub check_pgbench_logs my $contents_raw = slurp_file($log); my @contents = split(/\n/, $contents_raw); - my $clen = @contents; + my $clen = @contents; ok( $min <= $clen && $clen <= $max, "transaction count for $log ($clen)"); my $clen_match = grep(/$re/, @contents); diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 9a5ca7b3dbf87..0ec5509e7e996 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -462,7 +462,7 @@ typedef struct ResultRelInfo /* batch insert stuff */ int ri_NumSlots; /* number of slots in the array */ - int ri_NumSlotsInitialized; /* number of initialized slots */ + int ri_NumSlotsInitialized; /* number of initialized slots */ int ri_BatchSize; /* max slots inserted in a single batch */ TupleTableSlot **ri_Slots; /* input tuples for batch insert */ TupleTableSlot **ri_PlanSlots; diff --git a/src/include/utils/queryjumble.h b/src/include/utils/queryjumble.h index 1f4d062babd27..7af6652f3e0be 100644 --- a/src/include/utils/queryjumble.h +++ b/src/include/utils/queryjumble.h @@ -53,12 +53,12 @@ typedef struct JumbleState } JumbleState; /* Values for the compute_query_id GUC */ -typedef enum +enum ComputeQueryIdType { COMPUTE_QUERY_ID_OFF, COMPUTE_QUERY_ID_ON, COMPUTE_QUERY_ID_AUTO -} ComputeQueryIdType; +}; /* GUC parameters */ extern int compute_query_id; diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index 2027cbf43d72b..ed5b4a1c4b53a 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -2126,8 +2126,8 @@ sub poll_query_until $expected = 't' unless defined($expected); # default value my $cmd = [ - $self->installed_command('psql'), - '-XAt', '-d', $self->connstr($dbname) + $self->installed_command('psql'), '-XAt', + '-d', $self->connstr($dbname) ]; my ($stdout, $stderr); my $max_attempts = 180 * 10; diff --git a/src/test/recovery/t/005_replay_delay.pl b/src/test/recovery/t/005_replay_delay.pl index 496fa40fe13f1..bd7ed4e30444b 100644 --- a/src/test/recovery/t/005_replay_delay.pl +++ b/src/test/recovery/t/005_replay_delay.pl @@ -64,9 +64,10 @@ $node_standby2->start; # Recovery is not yet paused. -is($node_standby2->safe_psql('postgres', - "SELECT pg_get_wal_replay_pause_state()"), - 'not paused', 'pg_get_wal_replay_pause_state() reports not paused'); +is( $node_standby2->safe_psql( + 'postgres', "SELECT pg_get_wal_replay_pause_state()"), + 'not paused', + 'pg_get_wal_replay_pause_state() reports not paused'); # Request to pause recovery and wait until it's actually paused. $node_standby2->safe_psql('postgres', "SELECT pg_wal_replay_pause()"); @@ -74,28 +75,28 @@ "INSERT INTO tab_int VALUES (generate_series(21,30))"); $node_standby2->poll_query_until('postgres', "SELECT pg_get_wal_replay_pause_state() = 'paused'") - or die "Timed out while waiting for recovery to be paused"; + or die "Timed out while waiting for recovery to be paused"; # Even if new WAL records are streamed from the primary, # recovery in the paused state doesn't replay them. -my $receive_lsn = $node_standby2->safe_psql('postgres', - "SELECT pg_last_wal_receive_lsn()"); -my $replay_lsn = $node_standby2->safe_psql('postgres', - "SELECT pg_last_wal_replay_lsn()"); +my $receive_lsn = + $node_standby2->safe_psql('postgres', "SELECT pg_last_wal_receive_lsn()"); +my $replay_lsn = + $node_standby2->safe_psql('postgres', "SELECT pg_last_wal_replay_lsn()"); $node_primary->safe_psql('postgres', "INSERT INTO tab_int VALUES (generate_series(31,40))"); $node_standby2->poll_query_until('postgres', "SELECT '$receive_lsn'::pg_lsn < pg_last_wal_receive_lsn()") - or die "Timed out while waiting for new WAL to be streamed"; -is($node_standby2->safe_psql('postgres', - "SELECT pg_last_wal_replay_lsn()"), - qq($replay_lsn), 'no WAL is replayed in the paused state'); + or die "Timed out while waiting for new WAL to be streamed"; +is( $node_standby2->safe_psql('postgres', "SELECT pg_last_wal_replay_lsn()"), + qq($replay_lsn), + 'no WAL is replayed in the paused state'); # Request to resume recovery and wait until it's actually resumed. $node_standby2->safe_psql('postgres', "SELECT pg_wal_replay_resume()"); $node_standby2->poll_query_until('postgres', - "SELECT pg_get_wal_replay_pause_state() = 'not paused' AND pg_last_wal_replay_lsn() > '$replay_lsn'::pg_lsn") - or die "Timed out while waiting for recovery to be resumed"; + "SELECT pg_get_wal_replay_pause_state() = 'not paused' AND pg_last_wal_replay_lsn() > '$replay_lsn'::pg_lsn" +) or die "Timed out while waiting for recovery to be resumed"; # Check that the paused state ends and promotion continues if a promotion # is triggered while recovery is paused. @@ -107,6 +108,5 @@ or die "Timed out while waiting for recovery to be paused"; $node_standby2->promote; -$node_standby2->poll_query_until('postgres', - "SELECT NOT pg_is_in_recovery()") +$node_standby2->poll_query_until('postgres', "SELECT NOT pg_is_in_recovery()") or die "Timed out while waiting for promotion to finish"; diff --git a/src/test/recovery/t/025_stuck_on_old_timeline.pl b/src/test/recovery/t/025_stuck_on_old_timeline.pl index dbaab8e6e6dc7..fb15f9576bec2 100644 --- a/src/test/recovery/t/025_stuck_on_old_timeline.pl +++ b/src/test/recovery/t/025_stuck_on_old_timeline.pl @@ -32,13 +32,14 @@ $perlbin =~ s!\\!/!g if $TestLib::windows_os; my $archivedir_primary = $node_primary->archive_dir; $archivedir_primary =~ s!\\!/!g if $TestLib::windows_os; -$node_primary->append_conf('postgresql.conf', qq( +$node_primary->append_conf( + 'postgresql.conf', qq( archive_command = '"$perlbin" "$FindBin::RealBin/cp_history_files" "%p" "$archivedir_primary/%f"' wal_keep_size=128MB )); # Make sure that Msys perl doesn't complain about difficulty in setting locale # when called from the archive_command. -local $ENV{PERL_BADLANG}=0; +local $ENV{PERL_BADLANG} = 0; $node_primary->start; # Take backup from primary @@ -47,8 +48,11 @@ # Create streaming standby linking to primary my $node_standby = get_new_node('standby'); -$node_standby->init_from_backup($node_primary, $backup_name, - allows_streaming => 1, has_streaming => 1, has_archiving => 1); +$node_standby->init_from_backup( + $node_primary, $backup_name, + allows_streaming => 1, + has_streaming => 1, + has_archiving => 1); $node_standby->start; # Take backup of standby, use -Xnone so that pg_wal is empty. @@ -60,7 +64,8 @@ $node_cascade->init_from_backup($node_standby, $backup_name, has_streaming => 1); $node_cascade->enable_restoring($node_primary); -$node_cascade->append_conf('postgresql.conf', qq( +$node_cascade->append_conf( + 'postgresql.conf', qq( recovery_target_timeline='latest' )); @@ -68,9 +73,8 @@ $node_standby->promote; # Wait for promotion to complete -$node_standby->poll_query_until('postgres', - "SELECT NOT pg_is_in_recovery();") - or die "Timed out while waiting for promotion"; +$node_standby->poll_query_until('postgres', "SELECT NOT pg_is_in_recovery();") + or die "Timed out while waiting for promotion"; # Find next WAL segment to be archived my $walfile_to_be_archived = $node_standby->safe_psql('postgres', diff --git a/src/test/subscription/t/001_rep_changes.pl b/src/test/subscription/t/001_rep_changes.pl index ca6cd2c646daf..dee5f5c30ad7a 100644 --- a/src/test/subscription/t/001_rep_changes.pl +++ b/src/test/subscription/t/001_rep_changes.pl @@ -51,8 +51,11 @@ "ALTER TABLE tab_nothing REPLICA IDENTITY NOTHING"); # Replicate the changes without replica identity index -$node_publisher->safe_psql('postgres', "CREATE TABLE tab_no_replidentity_index(c1 int)"); -$node_publisher->safe_psql('postgres', "CREATE INDEX idx_no_replidentity_index ON tab_no_replidentity_index(c1)"); +$node_publisher->safe_psql('postgres', + "CREATE TABLE tab_no_replidentity_index(c1 int)"); +$node_publisher->safe_psql('postgres', + "CREATE INDEX idx_no_replidentity_index ON tab_no_replidentity_index(c1)" +); # Setup structure on subscriber $node_subscriber->safe_psql('postgres', "CREATE TABLE tab_notrep (a int)"); @@ -78,8 +81,11 @@ ); # replication of the table without replica identity index -$node_subscriber->safe_psql('postgres', "CREATE TABLE tab_no_replidentity_index(c1 int)"); -$node_subscriber->safe_psql('postgres', "CREATE INDEX idx_no_replidentity_index ON tab_no_replidentity_index(c1)"); +$node_subscriber->safe_psql('postgres', + "CREATE TABLE tab_no_replidentity_index(c1 int)"); +$node_subscriber->safe_psql('postgres', + "CREATE INDEX idx_no_replidentity_index ON tab_no_replidentity_index(c1)" +); # Setup logical replication my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres'; @@ -137,7 +143,8 @@ "DELETE FROM tab_include WHERE a > 20"); $node_publisher->safe_psql('postgres', "UPDATE tab_include SET a = -a"); -$node_publisher->safe_psql('postgres', "INSERT INTO tab_no_replidentity_index VALUES(1)"); +$node_publisher->safe_psql('postgres', + "INSERT INTO tab_no_replidentity_index VALUES(1)"); $node_publisher->wait_for_catchup('tap_sub'); @@ -162,8 +169,10 @@ is($result, qq(20|-20|-1), 'check replicated changes with primary key index with included columns'); -is($node_subscriber->safe_psql('postgres', q(SELECT c1 FROM tab_no_replidentity_index)), - 1, "value replicated to subscriber without replica identity index"); +is( $node_subscriber->safe_psql( + 'postgres', q(SELECT c1 FROM tab_no_replidentity_index)), + 1, + "value replicated to subscriber without replica identity index"); # insert some duplicate rows $node_publisher->safe_psql('postgres', diff --git a/src/test/subscription/t/010_truncate.pl b/src/test/subscription/t/010_truncate.pl index 065f5b0a3c6a8..5617469a2c3d9 100644 --- a/src/test/subscription/t/010_truncate.pl +++ b/src/test/subscription/t/010_truncate.pl @@ -197,11 +197,9 @@ # test that truncate works for logical replication when there are multiple # subscriptions for a single table -$node_publisher->safe_psql('postgres', - "CREATE TABLE tab5 (a int)"); +$node_publisher->safe_psql('postgres', "CREATE TABLE tab5 (a int)"); -$node_subscriber->safe_psql('postgres', - "CREATE TABLE tab5 (a int)"); +$node_subscriber->safe_psql('postgres', "CREATE TABLE tab5 (a int)"); $node_publisher->safe_psql('postgres', "CREATE PUBLICATION pub5 FOR TABLE tab5"); @@ -235,8 +233,7 @@ $result = $node_subscriber->safe_psql('postgres', "SELECT count(*), min(a), max(a) FROM tab5"); -is($result, qq(0||), - 'truncate replicated for multiple subscriptions'); +is($result, qq(0||), 'truncate replicated for multiple subscriptions'); # check deadlocks $result = $node_subscriber->safe_psql('postgres', diff --git a/src/test/subscription/t/013_partition.pl b/src/test/subscription/t/013_partition.pl index e2e9290b84910..3478e4db8fdf7 100644 --- a/src/test/subscription/t/013_partition.pl +++ b/src/test/subscription/t/013_partition.pl @@ -673,7 +673,8 @@ BEGIN # check that the map to convert tuples from leaf partition to the root # table is correctly rebuilt when a new column is added $node_publisher->safe_psql('postgres', - "ALTER TABLE tab2 DROP b, ADD COLUMN c text DEFAULT 'pub_tab2', ADD b text"); + "ALTER TABLE tab2 DROP b, ADD COLUMN c text DEFAULT 'pub_tab2', ADD b text" +); $node_publisher->safe_psql('postgres', "INSERT INTO tab2 (a, b) VALUES (1, 'xxx'), (3, 'yyy'), (5, 'zzz')"); $node_publisher->safe_psql('postgres', diff --git a/src/test/subscription/t/020_messages.pl b/src/test/subscription/t/020_messages.pl index 52bd92df1dd6f..0e218e0048b4a 100644 --- a/src/test/subscription/t/020_messages.pl +++ b/src/test/subscription/t/020_messages.pl @@ -11,8 +11,7 @@ # Create publisher node my $node_publisher = get_new_node('publisher'); $node_publisher->init(allows_streaming => 'logical'); -$node_publisher->append_conf('postgresql.conf', - 'autovacuum = off'); +$node_publisher->append_conf('postgresql.conf', 'autovacuum = off'); $node_publisher->start; # Create subscriber node @@ -43,8 +42,10 @@ $node_subscriber->safe_psql('postgres', "ALTER SUBSCRIPTION tap_sub DISABLE"); # wait for the replication slot to become inactive in the publisher -$node_publisher->poll_query_until('postgres', - "SELECT COUNT(*) FROM pg_catalog.pg_replication_slots WHERE slot_name = 'tap_sub' AND active='f'", 1); +$node_publisher->poll_query_until( + 'postgres', + "SELECT COUNT(*) FROM pg_catalog.pg_replication_slots WHERE slot_name = 'tap_sub' AND active='f'", + 1); $node_publisher->safe_psql('postgres', "SELECT pg_logical_emit_message(true, 'pgoutput', 'a transactional message')" diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index abdb08319ca91..1b3da854214ce 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -113,6 +113,7 @@ Append AppendPath AppendRelInfo AppendState +ApplyExecutionData ApplySubXactData Archive ArchiveEntryPtrType @@ -1163,6 +1164,7 @@ IpcSemaphoreKey IsForeignPathAsyncCapable_function IsForeignRelUpdatable_function IsForeignScanParallelSafe_function +IsoConnInfo IspellDict Item ItemId @@ -1683,7 +1685,6 @@ PLpgSQL_stmt_return PLpgSQL_stmt_return_next PLpgSQL_stmt_return_query PLpgSQL_stmt_rollback -PLpgSQL_stmt_set PLpgSQL_stmt_type PLpgSQL_stmt_while PLpgSQL_trigtype @@ -1872,6 +1873,9 @@ PerlInterpreter Perl_check_t Perl_ppaddr_t Permutation +PermutationStep +PermutationStepBlocker +PermutationStepBlockerType PgArchData PgBackendGSSStatus PgBackendSSLStatus @@ -2416,7 +2420,6 @@ SlabBlock SlabChunk SlabContext SlabSlot -SlotAcquireBehavior SlotErrCallbackArg SlotNumber SlruCtl @@ -2496,6 +2499,7 @@ StatsData StatsElem StatsExtInfo StdAnalyzeData +StdRdOptIndexCleanup StdRdOptions Step StopList @@ -2777,7 +2781,7 @@ UserOpts VacAttrStats VacAttrStatsP VacErrPhase -VacOptTernaryValue +VacOptValue VacuumParams VacuumRelation VacuumStmt From 596b5af1d3675b58d4018acd64217e2f627da3e4 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Mon, 28 Jun 2021 11:31:16 -0400 Subject: [PATCH 547/671] Stamp HEAD as 15devel. Let the hacking begin ... --- configure | 18 +- configure.ac | 2 +- doc/src/sgml/filelist.sgml | 2 +- doc/src/sgml/release-14.sgml | 4034 ---------------------------------- doc/src/sgml/release-15.sgml | 16 + doc/src/sgml/release.sgml | 2 +- src/tools/git_changelog | 2 +- src/tools/version_stamp.pl | 2 +- 8 files changed, 30 insertions(+), 4048 deletions(-) delete mode 100644 doc/src/sgml/release-14.sgml create mode 100644 doc/src/sgml/release-15.sgml diff --git a/configure b/configure index a2c055f3cc247..e468def49e6e9 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for PostgreSQL 14beta2. +# Generated by GNU Autoconf 2.69 for PostgreSQL 15devel. # # Report bugs to . # @@ -582,8 +582,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='PostgreSQL' PACKAGE_TARNAME='postgresql' -PACKAGE_VERSION='14beta2' -PACKAGE_STRING='PostgreSQL 14beta2' +PACKAGE_VERSION='15devel' +PACKAGE_STRING='PostgreSQL 15devel' PACKAGE_BUGREPORT='pgsql-bugs@lists.postgresql.org' PACKAGE_URL='https://www.postgresql.org/' @@ -1443,7 +1443,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures PostgreSQL 14beta2 to adapt to many kinds of systems. +\`configure' configures PostgreSQL 15devel to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1508,7 +1508,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of PostgreSQL 14beta2:";; + short | recursive ) echo "Configuration of PostgreSQL 15devel:";; esac cat <<\_ACEOF @@ -1679,7 +1679,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -PostgreSQL configure 14beta2 +PostgreSQL configure 15devel generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2432,7 +2432,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by PostgreSQL $as_me 14beta2, which was +It was created by PostgreSQL $as_me 15devel, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -20073,7 +20073,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by PostgreSQL $as_me 14beta2, which was +This file was extended by PostgreSQL $as_me 15devel, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -20144,7 +20144,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -PostgreSQL config.status 14beta2 +PostgreSQL config.status 15devel configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 3eb35583c1b0f..39666f97277f6 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl Read the Autoconf manual for details. dnl m4_pattern_forbid(^PGAC_)dnl to catch undefined macros -AC_INIT([PostgreSQL], [14beta2], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/]) +AC_INIT([PostgreSQL], [15devel], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/]) m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.69], [], [m4_fatal([Autoconf version 2.69 is required. Untested combinations of 'autoconf' and PostgreSQL versions are not diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml index 45b701426b97e..596bfecf8e224 100644 --- a/doc/src/sgml/filelist.sgml +++ b/doc/src/sgml/filelist.sgml @@ -169,7 +169,7 @@ - + diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml deleted file mode 100644 index 000f4e64c42d9..0000000000000 --- a/doc/src/sgml/release-14.sgml +++ /dev/null @@ -1,4034 +0,0 @@ - - - - - Release 14 - - - Release date: - 2021-??-?? (AS OF 2021-06-20) - - - - Overview - - - PostgreSQL 14 contains many new features and - enhancements, including: - - - - - - - - - - - The above items and other new features - of PostgreSQL 14 are explained in more - detail in the sections below. - - - - - - - Migration to Version 14 - - - A dump/restore using or use of or logical replication is required for those - wishing to migrate data from any previous release. See for general information on migrating to new major - releases. - - - - Version 14 contains a number of changes that may affect compatibility - with previous releases. Observe the following incompatibilities: - - - - - - - - - Prevent the containment operators (<@ and @>) for from using GiST indexes (Tom Lane) - - - - Previously a full GiST index scan was required, so just avoid - that and scan the heap, which is faster. Indexes created for this - purpose should be removed. - - - - - - - - Remove deprecated containment operators @ and ~ for built-in - geometric data types and - contrib modules , , - , and (Justin Pryzby) - - - - The more consistent <@ and @> have been recommended for - many years. - - - - - - - - Fix to_tsquery() - and websearch_to_tsquery() to properly parse - query text containing discarded tokens (Alexander Korotkov) - - - - Certain discarded tokens, like underscore, caused the output of - these functions to produce incorrect tsquery output, e.g., both - websearch_to_tsquery('"pg_class pg"') and to_tsquery('pg_class - <-> pg') used to output '( pg & class ) <-> pg', - but now both output 'pg <-> class <-> pg'. - - - - - - - - Fix websearch_to_tsquery() - to properly parse multiple adjacent discarded tokens in quotes - (Alexander Korotkov) - - - - Previously, quoted text that contained multiple adjacent discarded - tokens were treated as multiple tokens, causing incorrect tsquery - output, e.g., websearch_to_tsquery('"aaa: bbb"') used to output - 'aaa <2> bbb', but now outputs 'aaa <-> bbb'. - - - - - - - - Change the default of the - server parameter to scram-sha-256 (Peter - Eisentraut) - - - - Previously it was md5. All new passwords will - be stored as SHA256 unless this server variable is changed or - the password is specified in md5 format. Also, the legacy (and - undocumented) boolean-like values which were previously synonyms - for md5 are no longer accepted. - - - - - - - - Overhaul the specification of clientcert in pg_hba.conf - (Kyotaro Horiguchi) - - - - Values - 1/0/no-verify - are no longer supported; only the strings - verify-ca and verify-full - can be used. Also, disallow verify-ca if cert - authentication is enabled since cert requires - verify-full checking. - - - - - - - - Remove support for SSL - compression (Daniel Gustafsson, Michael Paquier) - - - - This was already disabled by default in previous Postgres releases, - and most modern OpenSSL and TLS versions no - longer support it. - - - - - - - - Remove server and libpq support - for the version 2 wire protocol - (Heikki Linnakangas) - - - - This was last used as the default in Postgres 7.3 (year 2002). - - - - - - - - Change EXTRACT - to return the NUMERIC data type (Peter Eisentraut) - - - - EXTRACT(date) now throws an error for units - that are not part of the date data type. - - - - - - - - Fix handling of infinite window function ranges - (Tom Lane) - - - - Previously window frame clauses like 'inf' PRECEDING AND - 'inf' FOLLOWING returned incorrect results. - - - - - - - - Prevent 's function - normal_rand() from accepting negative values - (Ashutosh Bapat) - - - - Negative values produced undesirable results. - - - - - - - - Change var_samp() - and stddev_samp() with numeric parameters to - return NULL for a single NaN value (Tom Lane) - - - - Previously NaN was returned. - - - - - - - - User-defined objects that reference some built-in array functions - along with their argument types must be recreated (Tom Lane) - - - - Specifically, array_append(), - array_prepend(), - array_cat(), - array_position(), - array_positions(), - array_remove(), - array_replace(), or width_bucket() - used to take anyarray arguments but now take - anycompatiblearray. Therefore, user-defined objects - like aggregates and operators that reference old array function - signatures must be dropped before upgrading and recreated once the - upgrade completes. - - - - - - - - Remove factorial operators ! and - !! (Mark Dilger) - - - - The factorial() - function is still supported. Also remove function - numeric_fac(). - - - - - - - - Disallow factorial() of negative numbers - (Peter Eisentraut) - - - - Previously such cases returned 1. - - - - - - - - Remove support for postfix - (right-unary) operators (Mark Dilger) - - - - pg_dump and - pg_upgrade will warn if postfix operators - are being dumped. - - - - - - - - Allow \D and \W shorthands to - match newlines in regular - expression newline-sensitive mode (Tom Lane) - - - - Previously they did not match; [^[:digit:]] or - [^[:word:]] can be used to get the old behavior. - - - - - - - - Improve handling of regular expression back-references (Tom Lane) - - - - For example, disregard ^ in its expansion in - \1 in (^\d+).*\1. - - - - - - - - Disallow \w as range start/end in character - classes (Tom Lane) - - - - This previously was allowed but produced incorrect results. - - - - - - - - Require custom server - variable names to use only character which are valid for - unquoted SQL identifiers (Tom Lane) - - - - - - - - Remove server variable - vacuum_cleanup_index_scale_factor (Peter Geoghegan) - - - - This setting was ignored starting in - PostgreSQL version 13.3. - - - - - - - - Return false for has_column_privilege() - checks on non-existent or dropped columns when using attribute - numbers (Joe Conway) - - - - Previously such attribute numbers returned an invalid column error. - - - - - - - - Pass doubled quote marks in - SQL command strings literally (Tom Lane) - - - - Previously 'abc''def' was passed to the server - as 'abc'def', and "abc""def" - was passed as "abc"def". - - - - - - - - Disallow single-quoting of the language name in the - CREATE/DROP - LANGUAGE command (Peter Eisentraut) - - - - - - - - Remove contrib program pg_standby - (Justin Pryzby) - - - - - - - - Remove composite - types for sequences or toast tables (Tom Lane) - - - - - - - - Remove operator_precedence_warning setting - (Tom Lane) - - - - This was needed for warning applications about - PostgreSQL 9.5 changes. - - - - - - - - - Changes - - - Below you will find a detailed account of the changes between - PostgreSQL 14 and the previous major - release. - - - - Server - - - - - - - - Add predefined roles pg_read_all_data - and pg_write_all_data (Stephen Frost) - - - - These non-login roles can be used to give read or write permission - to all tables, views, and sequences. - - - - - - - - Add a predefined role to match the database owner (Noah Misch) - - - - It is called pg_database_owner; - this is useful in template databases. - - - - - - - - Remove temporary files after backend crashes (Euler Taveira) - - - - These files were previously retained for debugging - purposes; deletion can be disabled with . - - - - - - - - Allow long-running queries to be canceled if the client disconnects - (Sergey Cherkashin, Thomas Munro) - - - - The server variable allows some - supported operating systems to automatically cancel queries by - disconnected clients. - - - - - - - - Add an optional timeout parameter to pg_terminate_backend() - - - - - - - - Allow wide tuples to be always added to almost-empty heap pages - (John Naylor, Floris van Nee) - - - - Previously tuples whose insertion would have exceeded the page's - fill factor were instead - added to new pages. - - - - - - - - Add Server Name Indication (SNI) for - SSL connection packets (Peter Eisentraut) - - - - This can be disabled by turning off client option sslsni. - - - - - - - <link linkend="routine-vacuuming">Vacuuming</link> - - - - - - - - Allow vacuum to skip index vacuuming when the number of removable - index entries is insignificant (Masahiko Sawada, Peter Geoghegan) - - - - The vacuum parameter INDEX_CLEANUP has a - new default of auto to enable this optimization. - - - - - - - - Allow vacuum to eagerly add newly deleted btree pages to the free - space map (Peter Geoghegan) - - - - Previously vacuum could only place preexisting deleted pages in - the free space map. - - - - - - - - Allow vacuum to reclaim space used by unused trailing heap - line pointers (Matthias van de Meent, Peter Geoghegan) - - - - - - - - Speed up vacuuming of databases with many relations (Tatsuhito - Kasahara) - - - - - - - - Reduce the default value of to better reflects current - hardware capabilities (Peter Geoghegan) - - - - - - - - Add ability to skip vacuuming of TOAST tables - (Nathan Bossart) - - - - VACUUM now - has a PROCESS_TOAST option which can be set to - false to disable TOAST processing, and vacuumdb - has a option. - - - - - - - - Have COPY FREEZE - appropriately update page visibility bits (Anastasia Lubennikova, - Pavan Deolasee, Jeff Janes) - - - - - - - - Cause vacuum operations to be more aggressive if the table is near - xid or multixact wraparound (Masahiko Sawada, Peter Geoghegan) - - - - This is controlled by - and . - - - - - - - - Increase warning time and hard limit before transaction id and - multi-transaction wraparound (Noah Misch) - - - - This should reduce the possibility of failures that occur without - having issued warnings about wraparound. - - - - - - - - Autovacuum now analyzes - partitioned tables (Yuzuko Hosoya, Álvaro Herrera) - - - - Insert, update, and delete tuple counts from partitions are now - propagated to their parent tables so autovacuum knows when to - process them. - - - - - - - - Add per-index information to autovacuum logging - output (Masahiko Sawada) - - - - - - - - <link linkend="ddl-partitioning">Partitioning</link> - - - - - - - - Improve the performance of updates/deletes on partitioned tables - when only a few partitions are affected (Amit Langote, Tom Lane) - - - - This also allows updates/deletes on partitioned tables to use - execution-time partition pruning. - - - - - - - - Allow partitions to be detached in a non-blocking manner - (Álvaro Herrera) - - - - The syntax is ALTER TABLE ... DETACH PARTITION - ... CONCURRENTLY, and FINALIZE. - - - - - - - - Allow arbitrary collations of partition boundary values (Tom Lane) - - - - Previously it had to match the collation of the partition key. - - - - - - - - - Indexes - - - - - - - - Allow btree index additions to remove expired index entries - to prevent page splits (Peter Geoghegan) - - - - This is particularly helpful for reducing index bloat on tables - whose indexed columns are frequently updated. - - - - - - - - Allow BRIN indexes - to record multiple min/max values per range (Tomas Vondra) - - - - This is useful if there are groups of values in each page range. - - - - - - - - Allow BRIN indexes to use bloom filters - (Tomas Vondra) - - - - This allows BRIN indexes to be used effectively - with data that is not physically localized in the heap. - - - - - - - - Allow some GiST indexes to be built - by presorting the data (Andrey Borodin) - - - - Presorting happens automatically and allows for faster index - creation and smaller indexes. - - - - - - - - Allow SP-GiST to use - INCLUDE'd columns (Pavel Borisov) - - - - - - - - - Optimizer - - - - - - - - Allow hash lookup of IN clause with many - constants (James Coleman, David Rowley) - - - - Previously the only option was to sequentially scan the list - of constants. - - - - - - - - Increase the number of places extended statistics can - be used for OR clause estimation (Tomas Vondra, - Dean Rasheed) - - - - - - - - Allow extended statistics on expressions (Tomas Vondra) - - - - This allows statistics on a group of expressions and columns, - rather than only columns like previously. System view pg_stats_ext_exprs - reports such statistics. ALTER TABLE ... ALTER COLUMN - ... TYPE RESETS STASTISTICS? - - - - - - - - Allow efficient heap scanning of a range of TIDs (Edmund - Horner, David Rowley) - - - - Previously a sequential scan was required for non-equality - TID specifications. - - - - - - - - Fix EXPLAIN CREATE TABLE - AS and EXPLAIN CREATE MATERIALIZED - VIEW to honor IF NOT EXISTS - (Bharath Rupireddy) - - - - Previously, if the object already existed, - EXPLAIN would fail. - - - - - - - - - General Performance - - - - - - - - Improve the speed of computing MVCC visibility snapshots on systems with many - CPUs and high session counts (Andres Freund) - - - - This also improves performance when there are many idle sessions. - - - - - - - - Add executor method to cache results from the inner-side of nested - loop joins (David Rowley) - - - - This is useful if only a small percentage of rows is checked on - the inner side. - - - - - - - - Allow window functions - to perform incremental sorts (David Rowley) - - - - - - - - Improve the I/O performance of parallel sequential scans (Thomas - Munro, David Rowley) - - - - This was done by allocating blocks in groups to parallel workers. - - - - - - - - Allow a query referencing multiple foreign tables to perform - foreign table scans in parallel (Robert Haas, Kyotaro Horiguchi, - Thomas Munro, Etsuro Fujita) - - - - The postgres_fdw - supports these type of scans if async_capable - is set. - - - - - - - - Allow analyze to do - page prefetching (Stephen Frost) - - - - This is controlled by . - - - - - - - - Improve the performance of regular expression - comparisons (Tom Lane) - - - - - - - - Dramatically improve Unicode normalization (John Naylor) - - - - This speeds normalize() - and IS NORMALIZED. - - - - - - - - Add ability to use LZ4 - compression on TOAST data (Dilip Kumar) - - - - This can be set at the column level, or set as a default via server - setting . - The server must be compiled with - to support this feature; the default is still pglz. - - - - - - - - - Monitoring - - - - - - - - If server variable - is enabled, display the query id in pg_stat_activity, - EXPLAIN - VERBOSE, csvlog, and optionally in - (Julien Rouhaud) - - - - A query id computed by an extension will also be displayed. - - - - - - - - Add system view pg_backend_memory_contexts - to report session memory usage (Atsushi Torikoshi, Fujii Masao) - - - - - - - - Add function pg_log_backend_memory_contexts() - to output the memory contexts of arbitrary backends (Atsushi - Torikoshi) - - - - - - - - Improve logging of auto-vacuum - and auto-analyze (Stephen Frost, Jakub Wartak) - - - - This reports I/O timings for auto-vacuum and auto-analyze if is enabled. Also, report buffer - read and dirty rates for auto-analyze. - - - - - - - - Add information about the original user name supplied by the - client to the output of - (Jacob Champion) - - - - - - - - - System Views - - - - - - - - Add view pg_stat_progress_copy - to report COPY progress (Josef Šimánek, - Matthias van de Meent) - - - - - - - - Add session statistics to the pg_stat_database - system view (Laurenz Albe) - - - - - - - - Add columns to pg_prepared_statements - to report generic and custom plan counts (Atsushi Torikoshi, - Kyotaro Horiguchi) - - - - - - - - Add lock wait start time to pg_locks - (Atsushi Torikoshi) - - - - - - - - Add system view pg_stat_wal - which reports WAL activity (Masahiro Ikeda) - - - - - - - - Add system view pg_stat_replication_slots - to report replication slot activity (Sawada Masahiko, Amit Kapila, - Vignesh C) - - - - The function pg_stat_reset_replication_slot() - resets slot statistics. - - - - - - - - Make the archiver process visible in - pg_stat_activity (Kyotaro Horiguchi) - - - - - - - - Add wait event WalReceiverExit - to report WAL receiver exit wait time (Fujii - Masao) - - - - - - - - Implement information schema view routine_column_usage - to track columns referenced by function and procedure default - expressions (Peter Eisentraut) - - - - - - - - - <acronym>Authentication</acronym> - - - - - - - - Allow the certificate's distinguished name (DN) - to be matched for client certificate authentication (Andrew - Dunstan) - - - - The new pg_hba.conf - keyword clientname=DN allows comparison with - certificate attributes beyond the CN and can - be combined with ident maps. - - - - - - - - Allow pg_hba.conf and pg_ident.conf - records to span multiple lines (Fabien Coelho) - - - - A backslash at the end of a line allows record contents to be - continued on the next line. - - - - - - - - Allow the specification of a certificate revocation list - (CRL) directory (Kyotaro Horiguchi) - - - - This is controlled by server variable and libpq connection option sslcrldir. - Previously only CRL files could be specified. - - - - - - - - Allow passwords of an arbitrary length (Tom Lane, Nathan Bossart) - - - - - - - - - Server Configuration - - - - - - - - Add server setting - to close idle sessions (Li Japin) - - - - This is similar to . - - - - - - - - Change default - to 0.9 (Stephen Frost) - - - - The previous default was 0.5. - - - - - - - - Allow %P in to report the - parallel group leader (Justin Pryzby) - - - - - - - - Allow to specify - paths as individual, comma-separated quoted strings (Ian Lawrence - Barwick) - - - - Previously all the paths had to be in a single quoted string. - - - - - - - - Allow startup allocation of dynamic shared memory (Thomas Munro) - - - - This is controlled by . This allows more - use of huge pages. - - - - - - - - Add setting to control the - size of huge pages used on Linux (Odin Ugedal) - - - - - - - - - - - Streaming Replication and Recovery - - - - - - - - Allow standby servers to be rewound via pg_rewind - (Heikki Linnakangas) - - - - - - - - Allow setting to be changed - during a server reload (Sergei Kornilov) - - - - You can also set restore_command to an empty - string and reload to force recovery to only read from the pg_wal - directory. - - - - - - - - Add server variable to report long recovery - conflict wait times (Bertrand Drouvot, Masahiko Sawada) - - - - - - - - Pause recovery if the primary changes its parameters in a way that - prevents replay on the hot standby (Peter Eisentraut) - - - - Previously the standby would shut down immediately. - - - - - - - - Add function pg_get_wal_replay_pause_state() - to report the recovery state (Dilip Kumar) - - - - It gives more detailed information than pg_is_wal_replay_paused(), - which still exists. - - - - - - - - Add new server-side variable - (Haribabu Kommi, Greg Nancarrow, Tom Lane) - - - - - - - - Speed truncation of small tables during recovery on clusters with - a large number of shared buffers (Kirk Jamison) - - - - - - - - Allow file system sync at the start of crash recovery on Linux - (Thomas Munro) - - - - By default, Postgres opens and fsyncs every data file - at the start of crash recovery. This new setting, =syncfs, - instead syncs each filesystem used by the database cluster. - This allows for faster recovery on systems with many database files. - - - - - - - - Add function pg_xact_commit_timestamp_origin() - to return the commit timestamp and replication origin of the - specified transaction (Movead Li) - - - - - - - - Add the replication origin to the record returned by pg_last_committed_xact() - (Movead Li) - - - - - - - - Allow replication origin - functions to be controlled using standard function permission - controls (Martín Marqués) - - - - Previously these functions could only be executed by super-users, - and this is still the default. - - - - - - - - Improve signal handling reliability (Fujii Masao) - - - - GENERAL ENOUGH? - - - - - - - <link linkend="logical-replication">Logical Replication</link> - - - - - - - - Allow logical replication to stream long in-progress transactions - to subscribers (Dilip Kumar, Amit Kapila, Ajin - Cherian, Tomas Vondra, Nikhil Sontakke, Stas Kelvich) - - - - Previously transactions that exceeded were written to disk - until the transaction completed. - - - - - - - - Enhance the logical replication API to allow - streaming large in-progress transactions (Tomas Vondra, Dilip - Kumar, Amit Kapila) - - - - The output functions begin with stream. - test_decoding also supports these. - - - - - - - - Allow multiple transactions during table sync in logical - replication (Peter Smith, Amit Kapila, and Takamichi Osumi) - - - - - - - - Immediately WAL-log subtransaction and top-level - XID association (Tomas Vondra, Dilip Kumar, Amit - Kapila) - - - - This is useful for logical decoding. - - - - - - - - Enhance logical decoding APIs to handle two-phase commits (Ajin - Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich) - - - - This is controlled via pg_create_logical_replication_slot(). - - - - - - - - Generate WAL invalidation messages during - command completion when using logical replication (Dilip Kumar, - Tomas Vondra, Amit Kapila) - - - - When logical replication is disabled, WAL - invalidation messages are generated at transaction completion. - This allows logical streaming of in-progress transactions. - - - - - - - - Allow logical decoding to more efficiently process cache - invalidation messages (Dilip Kumar) - - - - This allows logical decoding - to work efficiently in presence of a large amount of - DDL. - - - - - - - - Allow control over whether logical decoding messages are sent to - the replication stream (David Pirotte, Euler Taveira) - - - - - - - - Allow logical replication subscriptions to use binary transfer mode - (Dave Cramer) - - - - This is faster than text mode, but slightly less robust. - - - - - - - - Allow logical decoding to be filtered by xid (Markus Wanner) - - - - - - - - - - <link linkend="sql-select"><command>SELECT</command></link>, <link linkend="sql-insert"><command>INSERT</command></link> - - - - - - - - Reduce the number of keywords that can't be used as column labels - without AS (Mark Dilger) - - - - There are now 90% fewer restricted keywords. - - - - - - - - Allow an alias to be specified for JOIN's - USING clause (Peter Eisentraut) - - - - The alias is created by using AS after the - USING clause and represents an alias for the - USING columns. - - - - - - - - Allow DISTINCT to be added to GROUP - BY to remove duplicate GROUPING SET - combinations (Vik Fearing) - - - - For example, GROUP BY CUBE (a,b), CUBE (b,c) - will generate duplicate grouping combinations without - DISTINCT. - - - - - - - - Properly handle DEFAULT values for columns in - multi-column inserts (Dean Rasheed) - - - - This used to throw an error. - - - - - - - - Add SQL-standard SEARCH - and CYCLE clauses for common table expressions (Peter - Eisentraut) - - - - This could be accomplished previously using existing syntax. - - - - - - - - Allow the WHERE clause of ON - CONFLICT to be table-qualified (Tom Lane) - - - - Only the target table can be referenced. - - - - - - - - - Utility Commands - - - - - - - - Allow REFRESH - MATERIALIZED VIEW to use parallelism (Bharath - Rupireddy) - - - - - - - - Allow REINDEX - to change the tablespace of the new index (Alexey Kondratov, - Michael Paquier, Justin Pryzby) - - - - This is done by specifying a TABLESPACE clause. - A option was also added to reindexdb - to control this. - - - - - - - - Allow REINDEX to process all child tables or - indexes of a partitioned relation (Justin Pryzby, Michael Paquier) - - - - - - - - Improve the performance of COPY - FROM in binary mode (Bharath Rupireddy, Amit - Langote) - - - - - - - - Preserve SQL standard syntax in view definitions, if possible - (Tom Lane) - - - - Previously non-function call - SQL standard syntax, e.g. EXTRACT, - were converted to non-SQL standard function - calls. - - - - - - - - Add the SQL-standard - clause GRANTED BY to GRANT and REVOKE (Peter - Eisentraut) - - - - - - - - Add OR REPLACE for CREATE TRIGGER - (Takamichi Osumi) - - - - This allows pre-existing triggers to be conditionally replaced. - - - - - - - - Allow TRUNCATE to - operate on foreign tables (Kazutaka Onishi, Kohei KaiGai) - - - - The postgres_fdw - module also now supports this. - - - - - - - - Allow publications to be more easily added and removed (Japin Li) - - - - The new syntax is ALTER SUBSCRIPTION - ... ADD/DROP PUBLICATION. This avoids having to - specify all publications to add/remove entries. - - - - - - - - Add primary keys, unique constraints, and foreign keys to system catalogs (Peter Eisentraut) - - - - This helps GUI tools analyze the system tables. - - - - - - - - Allow CURRENT_ROLE - every place CURRENT_USER is accepted (Peter - Eisentraut) - - - - - - - - - Data Types - - - - - - - - Allow extensions and built-in data types to implement subscripting (Dmitry Dolgov) - - - - Previously subscript handling was hard-coded into the server, so - that subscripting could only be applied to array types. This change - allows subscript notation to be used to extract or assign portions - of a value of any type for which the concept makes sense. - - - - - - - - Allow subscripting of JSONB (Dmitry Dolgov) - - - - JSONB subscripting can be used to extract and assign - to portions of JSONB documents. - - - - - - - - Add support for multirange data - types (Paul Jungwirth, Alexander Korotkov) - - - - These are like range data types, but they allow the specification - of multiple, ordered, non-overlapping ranges. All existing range - types now also support multirange versions. - - - - - - - - Add point operators - <<| and |>> to be strictly above/below geometry - (Emre Hasegeli) - - - - Previously >^ and <^ were marked as performing this test, but - non-point geometric operators used these operators for non-strict - comparisons, leading to confusion. The old operators still exist - but will be eventually removed. ACCURATE? - - - - - - - - Add support for the stemming of - languages Armenian, Basque, Catalan, Hindi, Serbian, and Yiddish - (Peter Eisentraut) - - - - - - - - Allow tsearch data - files to have unlimited line lengths (Tom Lane) - - - - The previous limit was 4k bytes. Also remove function - t_readline(). - - - - - - - - Add support for infinity and - -infinity values to the numeric data type (Tom Lane) - - - - Floating point data types already supported these. - - - - - - - - Improve the accuracy of floating point computations involving - infinity (Tom Lane) - - - - - - - - Have non-zero float values - divided by infinity return zero (Kyotaro Horiguchi) - - - - Previously such operations produced underflow errors. - - - - - - - - Cause floating-point division of NaN by zero to return NaN - (Tom Lane) - - - - Previously this returned an error. Division with Numerics always - returned NaN. - - - - - - - - Add operators to add and subtract LSN and numeric - (byte) values (Fujii Masao) - - - - - - - - Allow binary data - transfer to be more forgiving of array and record - OID mismatches (Tom Lane) - - - - - - - - Create composite array types for most system relations (Wenjing - Zeng) - - - - - - - - - Functions - - - - - - - - Allow SQL-language functions and procedures to use - SQL-standard function bodies (Peter Eisentraut) - - - - Previously only single-quoted or $$-quoted function bodies were - supported. - - - - - - - - Allow procedures to have - OUT parameters (Peter Eisentraut) - - - - - - - - Allow some array functions to operate on a mix of compatible data - types (Tom Lane) - - - - The functions are array_append(), - array_prepend(), - array_cat(), - array_position(), - array_positions(), - array_remove(), - array_replace(), and width_bucket(). - Previously only identical data types could be used. - - - - - - - - Add SQL-standard trim_array() - function (Vik Fearing) - - - - This can already be done with array slices. - - - - - - - - Add bytea equivalents of ltrim() - and rtrim() (Joel Jacobson) - - - - - - - - Support negative indexes in split_part() - (Nikhil Benesch) - - - - Negative values start from the last field and count backward. - - - - - - - - Add string_to_table() - function to split a string on delimiters (Pavel Stehule) - - - - This is similar to the regexp_split_to_table() - function. - - - - - - - - Add unistr() - function to allow Unicode characters to be specified as - backslash-hex escapes in strings (Pavel Stehule) - - - - This is similar to how Unicode can be specified in literal string. - - - - - - - - Add bit_xor() - XOR aggregate function (Alexey Bashtanov) - - - - - - - - Add function bit_count() - to return the number of bits set in a bit or byte string (David - Fetter) - - - - - - - - Add date_bin() - function (John Naylor) - - - - The function date_bin() "bins" the input - timestamp into a specified interval aligned with a specified origin. - - - - - - - - Allow make_timestamp()/make_timestamptz() - to accept negative years (Peter Eisentraut) - - - - They are interpreted as BC years. - - - - - - - - Add newer regular expression substring() - syntax (Peter Eisentraut) - - - - The new syntax is SUBSTRING(text SIMILAR pattern ESCAPE - escapechar). The previous standard syntax was - SUBSTRING(text FROM pattern FOR escapechar), - and is still supported by Postgres. - - - - - - - - Allow complemented character class escapes \D, \S, - and \W within regex brackets (Tom Lane) - - - - - - - - Add [[:word:]] - as a character class to match \w (Tom Lane) - - - - - - - - Allow more flexible data types for default values of lead() - and lag() window functions (Vik Fearing) - - - - - - - - Cause exp() and - power() for negative-infinity exponents to - return zero (Tom Lane) - - - - Previously they often returned underflow errors. - - - - - - - - Mark built-in type coercion functions as leakproof where possible - (Tom Lane) - - - - This allows more use of functions that require type conversion in - security-sensitive situations. - - - - - - - - Mark pg_stat_get_subscription() as returning - a set (Tom Lane) - - - - While it worked in previous releases, it didn't report proper - optimizer statistics and couldn't be used in the target list. - FUNCTION NOT DOCUMENTED. - - - - - - - - Prevent inet_server_addr() - and inet_server_port() from being run by - parallel workers (Masahiko Sawada) - - - - - - - - Change pg_describe_object(), - pg_identify_object(), and - pg_identify_object_as_address() to always report - helpful error messages for non-existent objects (Michael Paquier) - - - - - - - - - <link linkend="plpgsql">PL/pgSQL</link> - - - - - - - - Improve PL/pgSQL's expression and assignment parsing - (Tom Lane) - - - - This adds nested record and array slicing support. - - - - - - - - Allow plpgsql's RETURN - QUERY to execute its query using parallelism - (Tom Lane) - - - - - - - - Improve performance of repeated CALLs within plpgsql - procedures (Pavel Stehule, Tom Lane) - - - - - - - - - Client Interfaces - - - - - - - - Add pipeline mode - to libpq (Craig Ringer, Matthieu Garrigues, Álvaro Herrera) - - - - This allows multiple queries to be sent and only wait for completion - when a specific synchronization message is sent. - - - - - - - - Enhance libpq's - parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C, - Tom Lane) - - - - The new options are read-only, - primary, standby, and - prefer-standby. - - - - - - - - Improve the output format of libpq's PQtrace() - (Aya Iwata, Álvaro Herrera) - - - - - - - - Allow an ECPG SQL identifier to be linked to - a specific connection (Hayato Kuroda) - - - - This is done via DECLARE - ... STATEMENT. - - - - - - - - - Client Applications - - - - - - - - Allow vacuumdb - to skip index cleanup and truncation (Nathan Bossart) - - - - The options are and - . - - - - - - - - Allow pg_dump - to dump only certain extensions (Guillaume Lelarge) - - - - This is controlled by option . - - - - - - - - Add pgbench - permute() function to randomly shuffle values - (Fabien Coelho, Hironobu Suzuki, Dean Rasheed) - - - - - - - - Allow multiple verbose option specifications () - to increase the logging verbosity (Tom Lane) - - - - This is now supported by pg_dump, - pg_dumpall, - and pg_restore. - - - - - - - <xref linkend="app-psql"/> - - - - - - - - Allow psql's \df and \do commands to - specify function and operator argument types (Greg Sabino Mullane, - Tom Lane) - - - - This helps reduce the number of matches for overloaded entries. - - - - - - - - Add an access method column to psql's - \d[i|m|t]+ output (Georgios Kokolatos) - - - - - - - - Allow psql's \dt and \di to show - TOAST tables and their indexes (Justin Pryzby) - - - - - - - - Add psql command \dX to list extended - statistics objects (Tatsuro Yamada) - - - - - - - - Fix psql's \dT to understand array - syntax and backend grammar aliases, like "int" for "integer" - (Greg Sabino Mullane, Tom Lane) - - - - - - - - When editing the previous query or a file with - psql's \e, or using \ef and \ev, ignore - the contents if the editor exits without saving (Laurenz Albe) - - - - Previously, such edits would still execute the editor contents. - - - - - - - - Improve psql's handling of \connect - with (Tom Lane) - - - - Specifically, properly reuse the password previously specified, - and prompt for a new password if the previous one failed. - - - - - - - - Improve tab completion (Vignesh C, Michael Paquier, Justin Pryzby, - Georgios Kokolatos, Julien Rouhaud, ADD NAMES) - - - - - - - - - - - Server Applications - - - - - - - - Add command-line utility pg_amcheck - to simplify running contrib/amcheck operations on many relations - (Mark Dilger) - - - - - - - - Add option to initdb - (Magnus Hagander) - - - - This removes the server start instructions that are normally output. - - - - - - - - Stop pg_upgrade - from creating analyze_new_cluster script - (Michael Paquier) - - - - Instead, give comparable vacuumdb - instructions. - - - - - - - - Remove support for the postmaster - option (Magnus Hagander) - - - - This option was unnecessary since all passed options could already - be specified directly. - - - - - - - - - Documentation - - - - - - - - Rename "Default Roles" to "Predefined Roles" (Bruce Momjian, - Stephen Frost) - - - - - - - - Add documentation for the factorial() - function (Peter Eisentraut) - - - - With the removal of the ! operator in this release, - factorial() is the only built-in way to compute - a factorial. - - - - - - - - - Source Code - - - - - - - - Add configure option --with-ssl={openssl} - to behave like (Daniel Gustafsson, - Michael Paquier) - - - - The option is kept for - compatibility. - - - - - - - - Add support for abstract - Unix-domain sockets (Peter Eisentraut) - - - - This is currently supported on Linux - and Windows. - - - - - - - - Allow Windows to properly handle files larger than four gigabytes - (Juan José Santamaría Flecha) - - - - For example this allows COPY, WAL - files, and relation segment files to be larger than four gigabytes. - - - - - - - - Add - to control cache overwriting (Craig Ringer) - - - - Previously this could only be controlled at compile time and is - enabled only in assert builds. - - - - - - - - Various improvements in valgrind - detection (Álvaro Herrera, Peter Geoghegan) - - - - - - - - Add a test module for the regular expression package (Tom Lane) - - - - - - - - Add support for LLVM version 12 - (Andres Freund) - - - - - - - - Change SHA1, SHA2, and MD5 hash computations to use the - OpenSSL EVP API - (Michael Paquier) - - - - This is more modern and supports FIPS mode. - - - - - - - - Remove build control over the random library used (Daniel - Gustafsson) - - - - - - - - Add direct conversion routines between EUC_TW and Big5 (Heikki - Linnakangas) - - - - - - - - Add collation versions for FreeBSD - (Thomas Munro) - - - - - - - - Add amadjustmembers - to the index access method API (Tom Lane) - - - - REMOVE? - - - - - - - - - Additional Modules - - - - - - - - Allow subscripting of hstore values - (Tom Lane, Dmitry Dolgov) - - - - - - - - Allow GiST/GIN pg_trgm indexes - to do equality lookups (Julien Rouhaud) - - - - This is similar to LIKE except no wildcards - are honored. - - - - - - - - Allow the cube data type - to be transferred in binary mode (KaiGai Kohei) - - - - - - - - Allow pgstattuple_approx() to report on - TOAST tables (Peter Eisentraut) - - - - - - - - Add contrib module pg_surgery - which allows changes to row visibility (Ashutosh Sharma) - - - - This is useful for correcting database corruption. - - - - - - - - Add contrib module old_snapshot - to report the XID/time mapping used by an active - (Robert Haas) - - - - - - - - Allow amcheck to - also check heap pages (Mark Dilger) - - - - Previously it only checked B-Tree index pages. - - - - - - - - Allow pageinspect - to inspect GiST indexes (Andrey Borodin, Heikki Linnakangas) - - - - - - - - Change pageinspect block numbers - to be bigints - (Peter Eisentraut) - - - - - - - - Mark btree_gist - functions as parallel safe (Steven Winfield) - - - - - - - <link linkend="pgstatstatements">pg_stat_statements</link> - - - - - - - - Move query hash computation from - pg_stat_statements to the core server - (Julien Rouhaud) - - - - The new server variable 's - default of auto will automatically enable query - id computation when this extension is loaded. - - - - - - - - Allow pg_stat_statements to track top - and nested statements independently (Julien Rohaud) - - - - Previously, when tracking all statements, identical top and nested - statements were tracked together. - - - - - - - - Add row counts for utility commands to - pg_stat_statements (Fujii Masao, Katsuragi - Yuta, Seino Yuki) - - - - - - - - Add pg_stat_statements_info system view - to show pg_stat_statements activity - (Katsuragi Yuta, Yuki Seino, Naoki Nakamichi) - - - - - - - - - <link linkend="postgres-fdw"><application>postgres_fdw</application></link> - - - - - - - - Allow postgres_fdw to - INSERT rows in bulk (Takayuki Tsunakawa, Tomas - Vondra, Amit Langote) - - - - - - - - Allow postgres_fdw - to import table partitions if specified by IMPORT FOREIGN SCHEMA - ... LIMIT TO (Matthias van de Meent) - - - - By default, only the root of partitioned tables is imported. - - - - - - - - Add postgres_fdw function - postgres_fdw_get_connections() to report open - foreign server connections (Bharath Rupireddy) - - - - - - - - Allow control over whether foreign servers keep connections open - after transaction completion (Bharath Rupireddy) - - - - This is controlled by keep_connections and - defaults to on. - - - - - - - - Allow postgres_fdw to reestablish - foreign server connections if necessary (Bharath Rupireddy) - - - - Previously foreign server restarts could cause foreign table - access errors. - - - - - - - - Add postgres_fdw functions to discard - cached connections (Bharath Rupireddy) - - - - - - - - - - - - - Acknowledgments - - - The following individuals (in alphabetical order) have contributed - to this release as patch authors, committers, reviewers, testers, - or reporters of issues. - - - - - - - - diff --git a/doc/src/sgml/release-15.sgml b/doc/src/sgml/release-15.sgml new file mode 100644 index 0000000000000..4b78f0be91eb5 --- /dev/null +++ b/doc/src/sgml/release-15.sgml @@ -0,0 +1,16 @@ + + + + + Release 15 + + + Release date: + 2022-??-?? + + + + This is just a placeholder for now. + + + diff --git a/doc/src/sgml/release.sgml b/doc/src/sgml/release.sgml index 7451f2d4ce335..3ea5024956f0e 100644 --- a/doc/src/sgml/release.sgml +++ b/doc/src/sgml/release.sgml @@ -81,7 +81,7 @@ For new features, add links to the documentation sections. All the active branches have to be edited concurrently when doing that. --> -&release-14; +&release-15; Prior Releases diff --git a/src/tools/git_changelog b/src/tools/git_changelog index 30a64b371a84b..8a5d408d29e39 100755 --- a/src/tools/git_changelog +++ b/src/tools/git_changelog @@ -59,7 +59,7 @@ require IPC::Open2; # (We could get this from "git branches", but not worth the trouble.) # NB: master must be first! my @BRANCHES = qw(master - REL_13_STABLE + REL_14_STABLE REL_13_STABLE REL_12_STABLE REL_11_STABLE REL_10_STABLE REL9_6_STABLE REL9_5_STABLE REL9_4_STABLE REL9_3_STABLE REL9_2_STABLE REL9_1_STABLE REL9_0_STABLE REL8_4_STABLE REL8_3_STABLE REL8_2_STABLE REL8_1_STABLE REL8_0_STABLE diff --git a/src/tools/version_stamp.pl b/src/tools/version_stamp.pl index ee8f314b3cda5..4a4cbf7ca97ed 100755 --- a/src/tools/version_stamp.pl +++ b/src/tools/version_stamp.pl @@ -25,7 +25,7 @@ # Major version is hard-wired into the script. We update it when we branch # a new development version. -my $majorversion = 14; +my $majorversion = 15; # Validate argument and compute derived variables my $minor = shift; From ba135fa537ab5c2fca0d589c826ebb3ecf98b2f1 Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Mon, 28 Jun 2021 09:22:24 -0700 Subject: [PATCH 548/671] Add pgindent commit to git-blame-ignore-revs file. Add entry for recent commit e1c1c30f. --- .git-blame-ignore-revs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index ae4e53d2cc1a0..dd22b42912762 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -12,7 +12,10 @@ # # Add new entries by adding the output of the following to the top of the file: # -# $ git log --pretty=format:"%H # %cd %n# %s" $PGINDENTGITHASH -1 +# $ git log --pretty=format:"%H # %cd %n# %s" $PGINDENTGITHASH -1 --date=iso + +e1c1c30f635390b6a3ae4993e8cac213a33e6e3f # 2021-06-28 11:05:54 -0400 +# Pre branch pgindent / pgperltidy run def5b065ff22a16a80084587613599fe15627213 # 2021-05-12 13:14:10 -0400 # Initial pgindent and pgperltidy run for v14. From 01697e92a460b10fde43707b29391c8deb69573e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 28 Jun 2021 12:40:37 -0400 Subject: [PATCH 549/671] Don't depend on -fwrapv semantics in pgbench's random() function. Instead use the common/int.h functions to check for integer overflow in a more C-standard-compliant fashion. This is motivated by recent failures on buildfarm member moonjelly, where it appears that development-tip gcc is optimizing without regard to the -fwrapv switch. Presumably that's a gcc bug that will be fixed soon, but we might as well install cleaner coding here rather than wait. (This does not address the question of whether we'll ever be able to get rid of using -fwrapv. Testing shows that this spot is the only place where doing so creates visible regression test failures, but unfortunately that proves very little.) Back-patch to v12. The common/int.h functions exist in v11, but that branch doesn't use them in any client-side code. I judge that this case isn't interesting enough in the real world to take even a small risk of issues from being the first such use. Tom Lane and Fabien Coelho Discussion: https://postgr.es/m/73927.1624815543@sss.pgh.pa.us --- src/bin/pgbench/pgbench.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index e61055b6b7b70..4aeccd93af87a 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -2450,7 +2450,8 @@ evalStandardFunc(CState *st, case PGBENCH_RANDOM_ZIPFIAN: { int64 imin, - imax; + imax, + delta; Assert(nargs >= 2); @@ -2459,12 +2460,13 @@ evalStandardFunc(CState *st, return false; /* check random range */ - if (imin > imax) + if (unlikely(imin > imax)) { pg_log_error("empty range given to random"); return false; } - else if (imax - imin < 0 || (imax - imin) + 1 < 0) + else if (unlikely(pg_sub_s64_overflow(imax, imin, &delta) || + pg_add_s64_overflow(delta, 1, &delta))) { /* prevent int overflows in random functions */ pg_log_error("random range is too large"); From 6f5d9bce57a7bb29ba61f0bf4fd465a26de9fc28 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 28 Jun 2021 14:17:41 -0400 Subject: [PATCH 550/671] Don't use abort(3) in libpq's fe-print.c. Causing a core dump on out-of-memory seems pretty unfriendly, and surely is far outside the expected behavior of a general-purpose library. Just print an error message (as we did already) and return. These functions unfortunately don't have an error return convention, but code using them is probably just looking for a quick-n-dirty print method and wouldn't bother to check anyway. Although these functions are semi-deprecated, it still seems appropriate to back-patch this. In passing, also back-patch b90e6cef1, just to reduce cosmetic differences between the branches. Discussion: https://postgr.es/m/3122443.1624735363@sss.pgh.pa.us --- src/interfaces/libpq/fe-print.c | 81 +++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 34 deletions(-) diff --git a/src/interfaces/libpq/fe-print.c b/src/interfaces/libpq/fe-print.c index fc7d84844e104..09bbc668843f6 100644 --- a/src/interfaces/libpq/fe-print.c +++ b/src/interfaces/libpq/fe-print.c @@ -37,7 +37,7 @@ #include "libpq-int.h" -static void do_field(const PQprintOpt *po, const PGresult *res, +static bool do_field(const PQprintOpt *po, const PGresult *res, const int i, const int j, const int fs_len, char **fields, const int nFields, const char **fieldNames, @@ -80,12 +80,12 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po) unsigned char *fieldNotNum = NULL; char *border = NULL; char **fields = NULL; - const char **fieldNames; + const char **fieldNames = NULL; int fieldMaxLen = 0; int numFieldName; int fs_len = strlen(po->fieldSep); int total_line_length = 0; - int usePipe = 0; + bool usePipe = false; char *pagerenv; #if defined(ENABLE_THREAD_SAFETY) && !defined(WIN32) @@ -108,20 +108,13 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po) #endif nTups = PQntuples(res); - if (!(fieldNames = (const char **) calloc(nFields, sizeof(char *)))) + fieldNames = (const char **) calloc(nFields, sizeof(char *)); + fieldNotNum = (unsigned char *) calloc(nFields, 1); + fieldMax = (int *) calloc(nFields, sizeof(int)); + if (!fieldNames || !fieldNotNum || !fieldMax) { fprintf(stderr, libpq_gettext("out of memory\n")); - abort(); - } - if (!(fieldNotNum = (unsigned char *) calloc(nFields, 1))) - { - fprintf(stderr, libpq_gettext("out of memory\n")); - abort(); - } - if (!(fieldMax = (int *) calloc(nFields, sizeof(int)))) - { - fprintf(stderr, libpq_gettext("out of memory\n")); - abort(); + goto exit; } for (numFieldName = 0; po->fieldName && po->fieldName[numFieldName]; @@ -190,7 +183,7 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po) fout = popen(pagerenv, "w"); if (fout) { - usePipe = 1; + usePipe = true; #ifndef WIN32 #ifdef ENABLE_THREAD_SAFETY if (pq_block_sigpipe(&osigset, &sigpipe_pending) == 0) @@ -207,10 +200,12 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po) if (!po->expanded && (po->align || po->html3)) { - if (!(fields = (char **) calloc(nFields * (nTups + 1), sizeof(char *)))) + fields = (char **) calloc((size_t) nTups + 1, + nFields * sizeof(char *)); + if (!fields) { fprintf(stderr, libpq_gettext("out of memory\n")); - abort(); + goto exit; } } else if (po->header && !po->html3) @@ -264,9 +259,12 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po) fprintf(fout, libpq_gettext("-- RECORD %d --\n"), i); } for (j = 0; j < nFields; j++) - do_field(po, res, i, j, fs_len, fields, nFields, - fieldNames, fieldNotNum, - fieldMax, fieldMaxLen, fout); + { + if (!do_field(po, res, i, j, fs_len, fields, nFields, + fieldNames, fieldNotNum, + fieldMax, fieldMaxLen, fout)) + goto exit; + } if (po->html3 && po->expanded) fputs("
\n", fout); } @@ -297,18 +295,34 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po) for (i = 0; i < nTups; i++) output_row(fout, po, nFields, fields, fieldNotNum, fieldMax, border, i); - free(fields); - if (border) - free(border); } if (po->header && !po->html3) fprintf(fout, "(%d row%s)\n\n", PQntuples(res), (PQntuples(res) == 1) ? "" : "s"); if (po->html3 && !po->expanded) fputs("\n", fout); - free(fieldMax); - free(fieldNotNum); - free((void *) fieldNames); + +exit: + if (fieldMax) + free(fieldMax); + if (fieldNotNum) + free(fieldNotNum); + if (border) + free(border); + if (fields) + { + /* if calloc succeeded, this shouldn't overflow size_t */ + size_t numfields = ((size_t) nTups + 1) * (size_t) nFields; + + while (numfields-- > 0) + { + if (fields[numfields]) + free(fields[numfields]); + } + free(fields); + } + if (fieldNames) + free((void *) fieldNames); if (usePipe) { #ifdef WIN32 @@ -329,7 +343,7 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po) } -static void +static bool do_field(const PQprintOpt *po, const PGresult *res, const int i, const int j, const int fs_len, char **fields, @@ -397,7 +411,7 @@ do_field(const PQprintOpt *po, const PGresult *res, if (!(fields[i * nFields + j] = (char *) malloc(plen + 1))) { fprintf(stderr, libpq_gettext("out of memory\n")); - abort(); + return false; } strcpy(fields[i * nFields + j], pval); } @@ -440,6 +454,7 @@ do_field(const PQprintOpt *po, const PGresult *res, } } } + return true; } @@ -467,7 +482,7 @@ do_header(FILE *fout, const PQprintOpt *po, const int nFields, int *fieldMax, if (!border) { fprintf(stderr, libpq_gettext("out of memory\n")); - abort(); + return NULL; } p = border; if (po->standard) @@ -558,8 +573,6 @@ output_row(FILE *fout, const PQprintOpt *po, const int nFields, char **fields, if (po->standard || field_index + 1 < nFields) fputs(po->fieldSep, fout); } - if (p) - free(p); } if (po->html3) fputs("", fout); @@ -609,7 +622,7 @@ PQdisplayTuples(const PGresult *res, if (!fLength) { fprintf(stderr, libpq_gettext("out of memory\n")); - abort(); + return; } for (j = 0; j < nFields; j++) @@ -707,7 +720,7 @@ PQprintTuples(const PGresult *res, if (!tborder) { fprintf(stderr, libpq_gettext("out of memory\n")); - abort(); + return; } for (i = 0; i < width; i++) tborder[i] = '-'; From bc49ab3c277b6b478bdad80c1ae36f926a33b4a6 Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Mon, 28 Jun 2021 13:08:46 -0700 Subject: [PATCH 551/671] Improve pgindent release workflow. Update RELEASE_CHANGES to direct the reader towards completing the steps outlined in the pgindent README, both as a pre-beta task and as a task to be performed when starting a new development cycle. This makes it less likely that somebody will miss updating the .git-blame-ignore-revs file when running pgindent against the tree as a routine release change task. Author: Peter Geoghegan Reviewed-By: Tom Lane Discussion: https://postgr.es/m/CAH2-Wz=2PjF4As8dWECArsXxLKganYmQ-s0UeGqHHbHhqDKqeA@mail.gmail.com --- src/tools/RELEASE_CHANGES | 8 ++------ src/tools/pgindent/README | 3 ++- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/tools/RELEASE_CHANGES b/src/tools/RELEASE_CHANGES index 5cf2a4dda3c4b..fd9dae7e55d7b 100644 --- a/src/tools/RELEASE_CHANGES +++ b/src/tools/RELEASE_CHANGES @@ -70,11 +70,7 @@ but there may be reasons to do them at other times as well. * Run mechanical code beautification tools: pgindent, pgperltidy, and "make reformat-dat-files" - (see src/tools/pgindent/README) - -* Update .git-blame-ignore-revs. It should contain all of the newly - created code beautification commits. Make sure that you use - full-length commit hashes for this. + (complete steps from src/tools/pgindent/README) * Renumber any manually-assigned OIDs between 8000 and 9999 to lower numbers, using renumber_oids.pl (see notes in bki.sgml) @@ -90,7 +86,7 @@ Starting a New Development Cycle ================================ * Typically, we do pgindent and perltidy runs just before branching, - as well as before beta + as well as before beta (complete steps from src/tools/pgindent/README) * Create a branch in git for maintenance of the previous release o on master branch, do: diff --git a/src/tools/pgindent/README b/src/tools/pgindent/README index 74412d29f8abf..103970c1042d3 100644 --- a/src/tools/pgindent/README +++ b/src/tools/pgindent/README @@ -82,7 +82,8 @@ you used. 4) Add the newly created commits to the .git-blame-ignore-revs file so that "git blame" ignores the commits (for anybody that has opted-in - to using the ignore file). + to using the ignore file). Follow the instructions that appear at + the top of the .git-blame-ignore-revs file. Another "git commit" will be required for your ignore file changes. From 14b2ffaf7ffdd199937e8bcba8b459da5491bcb6 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 28 Jun 2021 18:05:46 -0400 Subject: [PATCH 552/671] Doc: further updates for RELEASE_CHANGES process notes. Mention expectations for email notifications of appropriate lists when a branch is made or retired. (I've been doing that informally for years, but it's better to have it written down.) --- src/tools/RELEASE_CHANGES | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/tools/RELEASE_CHANGES b/src/tools/RELEASE_CHANGES index fd9dae7e55d7b..e8de724fcd856 100644 --- a/src/tools/RELEASE_CHANGES +++ b/src/tools/RELEASE_CHANGES @@ -107,8 +107,14 @@ Starting a New Development Cycle placeholder), "git rm" the previous one, and update release.sgml and filelist.sgml to match. +* Notify the private committers email list, to ensure all committers + are aware of the new branch even if they're not paying close attention + to pgsql-hackers. + * Get the buildfarm's 'branches_of_interest.txt' file updated with the new - branch. + branch. Once the buildfarm server is accepting reports, notify the + buildfarm owners' email list, for the benefit of owners who use manual + branch scheduling. Creating Back-Branch Release Notes @@ -141,8 +147,12 @@ Creating Back-Branch Release Notes Retiring a Branch ================= +* Notify the private committers email list, to ensure all committers + are aware of the branch being dead. + * Get the buildfarm's 'branches_of_interest.txt' file updated to remove - the retired branch. + the retired branch. Then notify the buildfarm owners' email list, + for the benefit of owners who use manual branch scheduling. From a7a7be1f2fa6b9f0f48e69f12256d8f588af729b Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 28 Jun 2021 18:34:55 -0700 Subject: [PATCH 553/671] Dump public schema ownership and security labels. As a side effect, this corrects dumps of public schema ACLs in databases where the DBA dropped and recreated that schema. Reviewed by Asif Rehman. Discussion: https://postgr.es/m/20201229134924.GA1431748@rfd.leadboat.com --- src/bin/pg_dump/dumputils.c | 15 ++-- src/bin/pg_dump/dumputils.h | 1 + src/bin/pg_dump/pg_backup_archiver.c | 21 +++-- src/bin/pg_dump/pg_dump.c | 98 +++++++++++++++------ src/bin/pg_dump/pg_dump.h | 2 + src/bin/pg_dump/t/002_pg_dump.pl | 75 +++++++++++++++- src/test/modules/test_pg_dump/t/001_base.pl | 8 ++ 7 files changed, 177 insertions(+), 43 deletions(-) diff --git a/src/bin/pg_dump/dumputils.c b/src/bin/pg_dump/dumputils.c index 60d306e7c3a32..ea67e52a3f47e 100644 --- a/src/bin/pg_dump/dumputils.c +++ b/src/bin/pg_dump/dumputils.c @@ -725,6 +725,7 @@ void buildACLQueries(PQExpBuffer acl_subquery, PQExpBuffer racl_subquery, PQExpBuffer init_acl_subquery, PQExpBuffer init_racl_subquery, const char *acl_column, const char *acl_owner, + const char *initprivs_expr, const char *obj_kind, bool binary_upgrade) { /* @@ -765,23 +766,25 @@ buildACLQueries(PQExpBuffer acl_subquery, PQExpBuffer racl_subquery, "WITH ORDINALITY AS perm(acl,row_n) " "WHERE NOT EXISTS ( " "SELECT 1 FROM " - "pg_catalog.unnest(coalesce(pip.initprivs,pg_catalog.acldefault(%s,%s))) " + "pg_catalog.unnest(coalesce(%s,pg_catalog.acldefault(%s,%s))) " "AS init(init_acl) WHERE acl = init_acl)) as foo)", acl_column, obj_kind, acl_owner, + initprivs_expr, obj_kind, acl_owner); printfPQExpBuffer(racl_subquery, "(SELECT pg_catalog.array_agg(acl ORDER BY row_n) FROM " "(SELECT acl, row_n FROM " - "pg_catalog.unnest(coalesce(pip.initprivs,pg_catalog.acldefault(%s,%s))) " + "pg_catalog.unnest(coalesce(%s,pg_catalog.acldefault(%s,%s))) " "WITH ORDINALITY AS initp(acl,row_n) " "WHERE NOT EXISTS ( " "SELECT 1 FROM " "pg_catalog.unnest(coalesce(%s,pg_catalog.acldefault(%s,%s))) " "AS permp(orig_acl) WHERE acl = orig_acl)) as foo)", + initprivs_expr, obj_kind, acl_owner, acl_column, @@ -807,12 +810,13 @@ buildACLQueries(PQExpBuffer acl_subquery, PQExpBuffer racl_subquery, printfPQExpBuffer(init_acl_subquery, "CASE WHEN privtype = 'e' THEN " "(SELECT pg_catalog.array_agg(acl ORDER BY row_n) FROM " - "(SELECT acl, row_n FROM pg_catalog.unnest(pip.initprivs) " + "(SELECT acl, row_n FROM pg_catalog.unnest(%s) " "WITH ORDINALITY AS initp(acl,row_n) " "WHERE NOT EXISTS ( " "SELECT 1 FROM " "pg_catalog.unnest(pg_catalog.acldefault(%s,%s)) " "AS privm(orig_acl) WHERE acl = orig_acl)) as foo) END", + initprivs_expr, obj_kind, acl_owner); @@ -823,10 +827,11 @@ buildACLQueries(PQExpBuffer acl_subquery, PQExpBuffer racl_subquery, "pg_catalog.unnest(pg_catalog.acldefault(%s,%s)) " "WITH ORDINALITY AS privp(acl,row_n) " "WHERE NOT EXISTS ( " - "SELECT 1 FROM pg_catalog.unnest(pip.initprivs) " + "SELECT 1 FROM pg_catalog.unnest(%s) " "AS initp(init_acl) WHERE acl = init_acl)) as foo) END", obj_kind, - acl_owner); + acl_owner, + initprivs_expr); } else { diff --git a/src/bin/pg_dump/dumputils.h b/src/bin/pg_dump/dumputils.h index 6e97da7487ef1..f5465f19aee35 100644 --- a/src/bin/pg_dump/dumputils.h +++ b/src/bin/pg_dump/dumputils.h @@ -54,6 +54,7 @@ extern void emitShSecLabels(PGconn *conn, PGresult *res, extern void buildACLQueries(PQExpBuffer acl_subquery, PQExpBuffer racl_subquery, PQExpBuffer init_acl_subquery, PQExpBuffer init_racl_subquery, const char *acl_column, const char *acl_owner, + const char *initprivs_expr, const char *obj_kind, bool binary_upgrade); extern bool variable_is_guc_list_quote(const char *name); diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 24cc096255817..ee06dc68221ef 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -3538,10 +3538,12 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData) * Actually print the definition. * * Really crude hack for suppressing AUTHORIZATION clause that old pg_dump - * versions put into CREATE SCHEMA. We have to do this when --no-owner - * mode is selected. This is ugly, but I see no other good way ... + * versions put into CREATE SCHEMA. Don't mutate the variant for schema + * "public" that is a comment. We have to do this when --no-owner mode is + * selected. This is ugly, but I see no other good way ... */ - if (ropt->noOwner && strcmp(te->desc, "SCHEMA") == 0) + if (ropt->noOwner && + strcmp(te->desc, "SCHEMA") == 0 && strncmp(te->defn, "--", 2) != 0) { ahprintf(AH, "CREATE SCHEMA %s;\n\n\n", fmtId(te->tag)); } @@ -3553,11 +3555,16 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData) /* * If we aren't using SET SESSION AUTH to determine ownership, we must - * instead issue an ALTER OWNER command. We assume that anything without - * a DROP command is not a separately ownable object. All the categories - * with DROP commands must appear in one list or the other. + * instead issue an ALTER OWNER command. Schema "public" is special; when + * a dump emits a comment in lieu of creating it, we use ALTER OWNER even + * when using SET SESSION for all other objects. We assume that anything + * without a DROP command is not a separately ownable object. All the + * categories with DROP commands must appear in one list or the other. */ - if (!ropt->noOwner && !ropt->use_setsessauth && + if (!ropt->noOwner && + (!ropt->use_setsessauth || + (strcmp(te->desc, "SCHEMA") == 0 && + strncmp(te->defn, "--", 2) == 0)) && te->owner && strlen(te->owner) > 0 && te->dropStmt && strlen(te->dropStmt) > 0) { diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 8f53cc7c3b871..3078d9af11a1f 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -44,6 +44,7 @@ #include "catalog/pg_aggregate_d.h" #include "catalog/pg_am_d.h" #include "catalog/pg_attribute_d.h" +#include "catalog/pg_authid_d.h" #include "catalog/pg_cast_d.h" #include "catalog/pg_class_d.h" #include "catalog/pg_default_acl_d.h" @@ -1598,6 +1599,13 @@ checkExtensionMembership(DumpableObject *dobj, Archive *fout) static void selectDumpableNamespace(NamespaceInfo *nsinfo, Archive *fout) { + /* + * DUMP_COMPONENT_DEFINITION typically implies a CREATE SCHEMA statement + * and (for --clean) a DROP SCHEMA statement. (In the absence of + * DUMP_COMPONENT_DEFINITION, this value is irrelevant.) + */ + nsinfo->create = true; + /* * If specific tables are being dumped, do not dump any complete * namespaces. If specific namespaces are being dumped, dump just those @@ -1633,10 +1641,15 @@ selectDumpableNamespace(NamespaceInfo *nsinfo, Archive *fout) * no-mans-land between being a system object and a user object. We * don't want to dump creation or comment commands for it, because * that complicates matters for non-superuser use of pg_dump. But we - * should dump any ACL changes that have occurred for it, and of - * course we should dump contained objects. + * should dump any ownership changes, security labels, and ACL + * changes, and of course we should dump contained objects. pg_dump + * ties ownership to DUMP_COMPONENT_DEFINITION. Hence, unless the + * owner is the default, dump a "definition" bearing just a comment. */ - nsinfo->dobj.dump = DUMP_COMPONENT_ACL; + nsinfo->create = false; + nsinfo->dobj.dump = DUMP_COMPONENT_ALL & ~DUMP_COMPONENT_COMMENT; + if (nsinfo->nspowner == BOOTSTRAP_SUPERUSERID) + nsinfo->dobj.dump &= ~DUMP_COMPONENT_DEFINITION; nsinfo->dobj.dump_contains = DUMP_COMPONENT_ALL; } else @@ -3428,8 +3441,8 @@ getBlobs(Archive *fout) PQExpBuffer init_racl_subquery = createPQExpBuffer(); buildACLQueries(acl_subquery, racl_subquery, init_acl_subquery, - init_racl_subquery, "l.lomacl", "l.lomowner", "'L'", - dopt->binary_upgrade); + init_racl_subquery, "l.lomacl", "l.lomowner", + "pip.initprivs", "'L'", dopt->binary_upgrade); appendPQExpBuffer(blobQry, "SELECT l.oid, (%s l.lomowner) AS rolname, " @@ -4830,6 +4843,7 @@ getNamespaces(Archive *fout, int *numNamespaces) int i_tableoid; int i_oid; int i_nspname; + int i_nspowner; int i_rolname; int i_nspacl; int i_rnspacl; @@ -4849,11 +4863,27 @@ getNamespaces(Archive *fout, int *numNamespaces) PQExpBuffer init_acl_subquery = createPQExpBuffer(); PQExpBuffer init_racl_subquery = createPQExpBuffer(); + /* + * Bypass pg_init_privs.initprivs for the public schema. Dropping and + * recreating the schema detaches it from its pg_init_privs row, but + * an empty destination database starts with this ACL nonetheless. + * Also, we support dump/reload of public schema ownership changes. + * ALTER SCHEMA OWNER filters nspacl through aclnewowner(), but + * initprivs continues to reflect the initial owner (the bootstrap + * superuser). Hence, synthesize the value that nspacl will have + * after the restore's ALTER SCHEMA OWNER. + */ buildACLQueries(acl_subquery, racl_subquery, init_acl_subquery, - init_racl_subquery, "n.nspacl", "n.nspowner", "'n'", - dopt->binary_upgrade); + init_racl_subquery, "n.nspacl", "n.nspowner", + "CASE WHEN n.nspname = 'public' THEN array[" + " format('%s=UC/%s', " + " n.nspowner::regrole, n.nspowner::regrole)," + " format('=UC/%s', n.nspowner::regrole)]::aclitem[] " + "ELSE pip.initprivs END", + "'n'", dopt->binary_upgrade); appendPQExpBuffer(query, "SELECT n.tableoid, n.oid, n.nspname, " + "n.nspowner, " "(%s nspowner) AS rolname, " "%s as nspacl, " "%s as rnspacl, " @@ -4878,7 +4908,7 @@ getNamespaces(Archive *fout, int *numNamespaces) destroyPQExpBuffer(init_racl_subquery); } else - appendPQExpBuffer(query, "SELECT tableoid, oid, nspname, " + appendPQExpBuffer(query, "SELECT tableoid, oid, nspname, nspowner, " "(%s nspowner) AS rolname, " "nspacl, NULL as rnspacl, " "NULL AS initnspacl, NULL as initrnspacl " @@ -4894,6 +4924,7 @@ getNamespaces(Archive *fout, int *numNamespaces) i_tableoid = PQfnumber(res, "tableoid"); i_oid = PQfnumber(res, "oid"); i_nspname = PQfnumber(res, "nspname"); + i_nspowner = PQfnumber(res, "nspowner"); i_rolname = PQfnumber(res, "rolname"); i_nspacl = PQfnumber(res, "nspacl"); i_rnspacl = PQfnumber(res, "rnspacl"); @@ -4907,6 +4938,7 @@ getNamespaces(Archive *fout, int *numNamespaces) nsinfo[i].dobj.catId.oid = atooid(PQgetvalue(res, i, i_oid)); AssignDumpId(&nsinfo[i].dobj); nsinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_nspname)); + nsinfo[i].nspowner = atooid(PQgetvalue(res, i, i_nspowner)); nsinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname)); nsinfo[i].nspacl = pg_strdup(PQgetvalue(res, i, i_nspacl)); nsinfo[i].rnspacl = pg_strdup(PQgetvalue(res, i, i_rnspacl)); @@ -5098,8 +5130,8 @@ getTypes(Archive *fout, int *numTypes) PQExpBuffer initracl_subquery = createPQExpBuffer(); buildACLQueries(acl_subquery, racl_subquery, initacl_subquery, - initracl_subquery, "t.typacl", "t.typowner", "'T'", - dopt->binary_upgrade); + initracl_subquery, "t.typacl", "t.typowner", + "pip.initprivs", "'T'", dopt->binary_upgrade); appendPQExpBuffer(query, "SELECT t.tableoid, t.oid, t.typname, " "t.typnamespace, " @@ -5800,8 +5832,8 @@ getAggregates(Archive *fout, int *numAggs) const char *agg_check; buildACLQueries(acl_subquery, racl_subquery, initacl_subquery, - initracl_subquery, "p.proacl", "p.proowner", "'f'", - dopt->binary_upgrade); + initracl_subquery, "p.proacl", "p.proowner", + "pip.initprivs", "'f'", dopt->binary_upgrade); agg_check = (fout->remoteVersion >= 110000 ? "p.prokind = 'a'" : "p.proisagg"); @@ -6013,8 +6045,8 @@ getFuncs(Archive *fout, int *numFuncs) const char *not_agg_check; buildACLQueries(acl_subquery, racl_subquery, initacl_subquery, - initracl_subquery, "p.proacl", "p.proowner", "'f'", - dopt->binary_upgrade); + initracl_subquery, "p.proacl", "p.proowner", + "pip.initprivs", "'f'", dopt->binary_upgrade); not_agg_check = (fout->remoteVersion >= 110000 ? "p.prokind <> 'a'" : "NOT p.proisagg"); @@ -6310,13 +6342,14 @@ getTables(Archive *fout, int *numTables) buildACLQueries(acl_subquery, racl_subquery, initacl_subquery, initracl_subquery, "c.relacl", "c.relowner", + "pip.initprivs", "CASE WHEN c.relkind = " CppAsString2(RELKIND_SEQUENCE) " THEN 's' ELSE 'r' END::\"char\"", dopt->binary_upgrade); buildACLQueries(attacl_subquery, attracl_subquery, attinitacl_subquery, - attinitracl_subquery, "at.attacl", "c.relowner", "'c'", - dopt->binary_upgrade); + attinitracl_subquery, "at.attacl", "c.relowner", + "pip.initprivs", "'c'", dopt->binary_upgrade); appendPQExpBuffer(query, "SELECT c.tableoid, c.oid, c.relname, " @@ -8241,8 +8274,8 @@ getProcLangs(Archive *fout, int *numProcLangs) PQExpBuffer initracl_subquery = createPQExpBuffer(); buildACLQueries(acl_subquery, racl_subquery, initacl_subquery, - initracl_subquery, "l.lanacl", "l.lanowner", "'l'", - dopt->binary_upgrade); + initracl_subquery, "l.lanacl", "l.lanowner", + "pip.initprivs", "'l'", dopt->binary_upgrade); /* pg_language has a laninline column */ appendPQExpBuffer(query, "SELECT l.tableoid, l.oid, " @@ -9432,8 +9465,8 @@ getForeignDataWrappers(Archive *fout, int *numForeignDataWrappers) PQExpBuffer initracl_subquery = createPQExpBuffer(); buildACLQueries(acl_subquery, racl_subquery, initacl_subquery, - initracl_subquery, "f.fdwacl", "f.fdwowner", "'F'", - dopt->binary_upgrade); + initracl_subquery, "f.fdwacl", "f.fdwowner", + "pip.initprivs", "'F'", dopt->binary_upgrade); appendPQExpBuffer(query, "SELECT f.tableoid, f.oid, f.fdwname, " "(%s f.fdwowner) AS rolname, " @@ -9599,8 +9632,8 @@ getForeignServers(Archive *fout, int *numForeignServers) PQExpBuffer initracl_subquery = createPQExpBuffer(); buildACLQueries(acl_subquery, racl_subquery, initacl_subquery, - initracl_subquery, "f.srvacl", "f.srvowner", "'S'", - dopt->binary_upgrade); + initracl_subquery, "f.srvacl", "f.srvowner", + "pip.initprivs", "'S'", dopt->binary_upgrade); appendPQExpBuffer(query, "SELECT f.tableoid, f.oid, f.srvname, " "(%s f.srvowner) AS rolname, " @@ -9746,6 +9779,7 @@ getDefaultACLs(Archive *fout, int *numDefaultACLs) buildACLQueries(acl_subquery, racl_subquery, initacl_subquery, initracl_subquery, "defaclacl", "defaclrole", + "pip.initprivs", "CASE WHEN defaclobjtype = 'S' THEN 's' ELSE defaclobjtype END::\"char\"", dopt->binary_upgrade); @@ -10363,9 +10397,19 @@ dumpNamespace(Archive *fout, const NamespaceInfo *nspinfo) qnspname = pg_strdup(fmtId(nspinfo->dobj.name)); - appendPQExpBuffer(delq, "DROP SCHEMA %s;\n", qnspname); - - appendPQExpBuffer(q, "CREATE SCHEMA %s;\n", qnspname); + if (nspinfo->create) + { + appendPQExpBuffer(delq, "DROP SCHEMA %s;\n", qnspname); + appendPQExpBuffer(q, "CREATE SCHEMA %s;\n", qnspname); + } + else + { + /* see selectDumpableNamespace() */ + appendPQExpBufferStr(delq, + "-- *not* dropping schema, since initdb creates it\n"); + appendPQExpBufferStr(q, + "-- *not* creating schema, since initdb creates it\n"); + } if (dopt->binary_upgrade) binary_upgrade_extension_member(q, &nspinfo->dobj, @@ -15556,8 +15600,8 @@ dumpTable(Archive *fout, const TableInfo *tbinfo) PQExpBuffer initracl_subquery = createPQExpBuffer(); buildACLQueries(acl_subquery, racl_subquery, initacl_subquery, - initracl_subquery, "at.attacl", "c.relowner", "'c'", - dopt->binary_upgrade); + initracl_subquery, "at.attacl", "c.relowner", + "pip.initprivs", "'c'", dopt->binary_upgrade); appendPQExpBuffer(query, "SELECT at.attname, " diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h index 49e1b0a09c4ea..ba9bc6ddd210a 100644 --- a/src/bin/pg_dump/pg_dump.h +++ b/src/bin/pg_dump/pg_dump.h @@ -142,6 +142,8 @@ typedef struct _dumpableObject typedef struct _namespaceInfo { DumpableObject dobj; + bool create; /* CREATE SCHEMA, or just set owner? */ + Oid nspowner; char *rolname; /* name of owner, or empty string */ char *nspacl; char *rnspacl; diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index 244507c97c180..bd6314c289349 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -128,6 +128,14 @@ 'regress_pg_dump_test', ], }, + defaults_public_owner => { + database => 'regress_public_owner', + dump_cmd => [ + 'pg_dump', '--no-sync', '-f', + "$tempdir/defaults_public_owner.sql", + 'regress_public_owner', + ], + }, # Do not use --no-sync to give test coverage for data sync. defaults_custom_format => { @@ -620,6 +628,24 @@ unlike => { no_owner => 1, }, }, + 'ALTER SCHEMA public OWNER TO' => { + # see test "REVOKE CREATE ON SCHEMA public" for causative create_sql + regexp => qr/^ALTER SCHEMA public OWNER TO .+;/m, + like => { + %full_runs, section_pre_data => 1, + }, + unlike => { no_owner => 1, }, + }, + + 'ALTER SCHEMA public OWNER TO (w/o ACL changes)' => { + database => 'regress_public_owner', + create_order => 100, + create_sql => + 'ALTER SCHEMA public OWNER TO "regress_quoted \"" role";', + regexp => qr/^(GRANT|REVOKE)/m, + unlike => { defaults_public_owner => 1 }, + }, + 'ALTER SEQUENCE test_table_col1_seq' => { regexp => qr/^ \QALTER SEQUENCE dump_test.test_table_col1_seq OWNED BY dump_test.test_table.col1;\E @@ -955,6 +981,13 @@ like => {}, }, + 'COMMENT ON SCHEMA public' => { + regexp => qr/^COMMENT ON SCHEMA public IS .+;/m, + + # this shouldn't ever get emitted + like => {}, + }, + 'COMMENT ON TABLE dump_test.test_table' => { create_order => 36, create_sql => 'COMMENT ON TABLE dump_test.test_table @@ -1385,6 +1418,18 @@ }, }, + 'CREATE ROLE regress_quoted...' => { + create_order => 1, + create_sql => 'CREATE ROLE "regress_quoted \"" role";', + regexp => qr/^\QCREATE ROLE "regress_quoted \"" role";\E/m, + like => { + pg_dumpall_dbprivs => 1, + pg_dumpall_exclude => 1, + pg_dumpall_globals => 1, + pg_dumpall_globals_clean => 1, + }, + }, + 'CREATE ACCESS METHOD gist2' => { create_order => 52, create_sql => @@ -3333,6 +3378,23 @@ unlike => { no_privs => 1, }, }, + # With the exception of the public schema, we don't dump ownership changes + # for objects originating at initdb. Hence, any GRANT or REVOKE affecting + # owner privileges for those objects should reference the bootstrap + # superuser, not the dump-time owner. + 'REVOKE EXECUTE ON FUNCTION pg_stat_reset FROM regress_dump_test_role' => + { + create_order => 15, + create_sql => ' + ALTER FUNCTION pg_stat_reset OWNER TO regress_dump_test_role; + REVOKE EXECUTE ON FUNCTION pg_stat_reset + FROM regress_dump_test_role;', + regexp => qr/^[^-].*pg_stat_reset.* regress_dump_test_role/m, + + # this shouldn't ever get emitted + like => {}, + }, + 'REVOKE SELECT ON TABLE pg_proc FROM public' => { create_order => 45, create_sql => 'REVOKE SELECT ON TABLE pg_proc FROM public;', @@ -3344,9 +3406,13 @@ 'REVOKE CREATE ON SCHEMA public FROM public' => { create_order => 16, - create_sql => 'REVOKE CREATE ON SCHEMA public FROM public;', - regexp => qr/^ - \QREVOKE ALL ON SCHEMA public FROM PUBLIC;\E + create_sql => ' + REVOKE CREATE ON SCHEMA public FROM public; + ALTER SCHEMA public OWNER TO "regress_quoted \"" role"; + REVOKE ALL ON SCHEMA public FROM "regress_quoted \"" role";', + regexp => qr/^ + \QREVOKE ALL ON SCHEMA public FROM "regress_quoted \"" role";\E + \n\QREVOKE ALL ON SCHEMA public FROM PUBLIC;\E \n\QGRANT USAGE ON SCHEMA public TO PUBLIC;\E /xm, like => { %full_runs, section_pre_data => 1, }, @@ -3451,8 +3517,9 @@ # Determine whether build supports LZ4. my $supports_lz4 = check_pg_config("#define HAVE_LIBLZ4 1"); -# Create a second database for certain tests to work against +# Create additional databases for mutations of schema public $node->psql('postgres', 'create database regress_pg_dump_test;'); +$node->psql('postgres', 'create database regress_public_owner;'); # Start with number of command_fails_like()*2 tests below (each # command_fails_like is actually 2 tests) diff --git a/src/test/modules/test_pg_dump/t/001_base.pl b/src/test/modules/test_pg_dump/t/001_base.pl index 4baca365c6498..8511da5169ba0 100644 --- a/src/test/modules/test_pg_dump/t/001_base.pl +++ b/src/test/modules/test_pg_dump/t/001_base.pl @@ -318,6 +318,14 @@ like => { pg_dumpall_globals => 1, }, }, + 'CREATE SCHEMA public' => { + regexp => qr/^CREATE SCHEMA public;/m, + like => { + extension_schema => 1, + without_extension_explicit_schema => 1, + }, + }, + 'CREATE SEQUENCE regress_pg_dump_table_col1_seq' => { regexp => qr/^ \QCREATE SEQUENCE public.regress_pg_dump_table_col1_seq\E From 7ac10f692054e2690aa6f80efdd98bd283c94b10 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 28 Jun 2021 18:34:55 -0700 Subject: [PATCH 554/671] Dump COMMENT ON SCHEMA public. As we do for other attributes of the public schema, omit the COMMENT command when its payload would match what initdb had installed. For dumps that do carry this new COMMENT command, non-superusers restoring them are likely to get an error. Reviewed by Asif Rehman. Discussion: https://postgr.es/m/ab48a34c-60f6-e388-502a-3e5fe46a2dae@postgresfriends.org --- src/bin/pg_dump/pg_dump.c | 84 ++++++++++++++++++++++------ src/bin/pg_dump/t/002_pg_dump.pl | 14 ++++- src/include/catalog/pg_namespace.dat | 1 + 3 files changed, 79 insertions(+), 20 deletions(-) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 3078d9af11a1f..321152151dbb9 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -169,9 +169,15 @@ static NamespaceInfo *findNamespace(Oid nsoid); static void dumpTableData(Archive *fout, const TableDataInfo *tdinfo); static void refreshMatViewData(Archive *fout, const TableDataInfo *tdinfo); static void guessConstraintInheritance(TableInfo *tblinfo, int numTables); -static void dumpComment(Archive *fout, const char *type, const char *name, - const char *namespace, const char *owner, - CatalogId catalogId, int subid, DumpId dumpId); +static void dumpCommentExtended(Archive *fout, const char *type, + const char *name, const char *namespace, + const char *owner, CatalogId catalogId, + int subid, DumpId dumpId, + const char *initdb_comment); +static inline void dumpComment(Archive *fout, const char *type, + const char *name, const char *namespace, + const char *owner, CatalogId catalogId, + int subid, DumpId dumpId); static int findComments(Archive *fout, Oid classoid, Oid objoid, CommentItem **items); static int collectComments(Archive *fout, CommentItem **items); @@ -1638,16 +1644,13 @@ selectDumpableNamespace(NamespaceInfo *nsinfo, Archive *fout) { /* * The public schema is a strange beast that sits in a sort of - * no-mans-land between being a system object and a user object. We - * don't want to dump creation or comment commands for it, because - * that complicates matters for non-superuser use of pg_dump. But we - * should dump any ownership changes, security labels, and ACL - * changes, and of course we should dump contained objects. pg_dump - * ties ownership to DUMP_COMPONENT_DEFINITION. Hence, unless the - * owner is the default, dump a "definition" bearing just a comment. + * no-mans-land between being a system object and a user object. + * CREATE SCHEMA would fail, so its DUMP_COMPONENT_DEFINITION is just + * a comment and an indication of ownership. If the owner is the + * default, that DUMP_COMPONENT_DEFINITION is superfluous. */ nsinfo->create = false; - nsinfo->dobj.dump = DUMP_COMPONENT_ALL & ~DUMP_COMPONENT_COMMENT; + nsinfo->dobj.dump = DUMP_COMPONENT_ALL; if (nsinfo->nspowner == BOOTSTRAP_SUPERUSERID) nsinfo->dobj.dump &= ~DUMP_COMPONENT_DEFINITION; nsinfo->dobj.dump_contains = DUMP_COMPONENT_ALL; @@ -9873,7 +9876,7 @@ getDefaultACLs(Archive *fout, int *numDefaultACLs) } /* - * dumpComment -- + * dumpCommentExtended -- * * This routine is used to dump any comments associated with the * object handed to this routine. The routine takes the object type @@ -9896,9 +9899,11 @@ getDefaultACLs(Archive *fout, int *numDefaultACLs) * calling ArchiveEntry() for the specified object. */ static void -dumpComment(Archive *fout, const char *type, const char *name, - const char *namespace, const char *owner, - CatalogId catalogId, int subid, DumpId dumpId) +dumpCommentExtended(Archive *fout, const char *type, + const char *name, const char *namespace, + const char *owner, CatalogId catalogId, + int subid, DumpId dumpId, + const char *initdb_comment) { DumpOptions *dopt = fout->dopt; CommentItem *comments; @@ -9934,6 +9939,25 @@ dumpComment(Archive *fout, const char *type, const char *name, ncomments--; } + if (initdb_comment != NULL) + { + static CommentItem empty_comment = {.descr = ""}; + + /* + * initdb creates this object with a comment. Skip dumping the + * initdb-provided comment, which would complicate matters for + * non-superuser use of pg_dump. When the DBA has removed initdb's + * comment, replicate that. + */ + if (ncomments == 0) + { + comments = &empty_comment; + ncomments = 1; + } + else if (strcmp(comments->descr, initdb_comment) == 0) + ncomments = 0; + } + /* If a comment exists, build COMMENT ON statement */ if (ncomments > 0) { @@ -9969,6 +9993,21 @@ dumpComment(Archive *fout, const char *type, const char *name, } } +/* + * dumpComment -- + * + * Typical simplification of the above function. + */ +static inline void +dumpComment(Archive *fout, const char *type, + const char *name, const char *namespace, + const char *owner, CatalogId catalogId, + int subid, DumpId dumpId) +{ + dumpCommentExtended(fout, type, name, namespace, owner, + catalogId, subid, dumpId, NULL); +} + /* * dumpTableComment -- * @@ -10426,9 +10465,18 @@ dumpNamespace(Archive *fout, const NamespaceInfo *nspinfo) /* Dump Schema Comments and Security Labels */ if (nspinfo->dobj.dump & DUMP_COMPONENT_COMMENT) - dumpComment(fout, "SCHEMA", qnspname, - NULL, nspinfo->rolname, - nspinfo->dobj.catId, 0, nspinfo->dobj.dumpId); + { + const char *initdb_comment = NULL; + + if (!nspinfo->create && strcmp(qnspname, "public") == 0) + initdb_comment = (fout->remoteVersion >= 80300 ? + "standard public schema" : + "Standard public schema"); + dumpCommentExtended(fout, "SCHEMA", qnspname, + NULL, nspinfo->rolname, + nspinfo->dobj.catId, 0, nspinfo->dobj.dumpId, + initdb_comment); + } if (nspinfo->dobj.dump & DUMP_COMPONENT_SECLABEL) dumpSecLabel(fout, "SCHEMA", qnspname, diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index bd6314c289349..ac5d38ff4c4b9 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -983,9 +983,19 @@ 'COMMENT ON SCHEMA public' => { regexp => qr/^COMMENT ON SCHEMA public IS .+;/m, + # regress_public_owner emits this, due to create_sql of next test + like => { + pg_dumpall_dbprivs => 1, + pg_dumpall_exclude => 1, + }, + }, - # this shouldn't ever get emitted - like => {}, + 'COMMENT ON SCHEMA public IS NULL' => { + database => 'regress_public_owner', + create_order => 100, + create_sql => 'COMMENT ON SCHEMA public IS NULL;', + regexp => qr/^COMMENT ON SCHEMA public IS '';/m, + like => { defaults_public_owner => 1 }, }, 'COMMENT ON TABLE dump_test.test_table' => { diff --git a/src/include/catalog/pg_namespace.dat b/src/include/catalog/pg_namespace.dat index 2ed136b787ede..33992afd500f6 100644 --- a/src/include/catalog/pg_namespace.dat +++ b/src/include/catalog/pg_namespace.dat @@ -18,6 +18,7 @@ { oid => '99', oid_symbol => 'PG_TOAST_NAMESPACE', descr => 'reserved schema for TOAST tables', nspname => 'pg_toast', nspacl => '_null_' }, +# update dumpNamespace() if changing this descr { oid => '2200', oid_symbol => 'PG_PUBLIC_NAMESPACE', descr => 'standard public schema', nspname => 'public', nspacl => '_null_' }, From c53c6b98d38a4d238b2fe2ddcea63c33b0a61376 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 28 Jun 2021 18:34:55 -0700 Subject: [PATCH 555/671] Remove XLogFileInit() ability to skip ControlFileLock. Cold paths, initdb and end-of-recovery, used it. Don't optimize them. Discussion: https://postgr.es/m/20210202151416.GB3304930@rfd.leadboat.com --- src/backend/access/transam/xlog.c | 46 ++++++++------------------- src/backend/replication/walreceiver.c | 2 +- src/include/access/xlog.h | 2 +- 3 files changed, 16 insertions(+), 34 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 1b3a3d9beab9c..39a38ba0c3e57 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -913,8 +913,7 @@ static void AdvanceXLInsertBuffer(XLogRecPtr upto, bool opportunistic); static bool XLogCheckpointNeeded(XLogSegNo new_segno); static void XLogWrite(XLogwrtRqst WriteRqst, bool flexible); static bool InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, - bool find_free, XLogSegNo max_segno, - bool use_lock); + bool find_free, XLogSegNo max_segno); static int XLogFileRead(XLogSegNo segno, int emode, TimeLineID tli, XLogSource source, bool notfoundOk); static int XLogFileReadAnyTLI(XLogSegNo segno, int emode, XLogSource source); @@ -2492,7 +2491,7 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible) /* create/use new log file */ use_existent = true; - openLogFile = XLogFileInit(openLogSegNo, &use_existent, true); + openLogFile = XLogFileInit(openLogSegNo, &use_existent); ReserveExternalFD(); } @@ -3265,10 +3264,6 @@ XLogNeedsFlush(XLogRecPtr record) * pre-existing file will be deleted). On return, true if a pre-existing * file was used. * - * use_lock: if true, acquire ControlFileLock while moving file into - * place. This should be true except during bootstrap log creation. The - * caller must *not* hold the lock at call. - * * Returns FD of opened file. * * Note: errors here are ERROR not PANIC because we might or might not be @@ -3277,7 +3272,7 @@ XLogNeedsFlush(XLogRecPtr record) * in a critical section. */ int -XLogFileInit(XLogSegNo logsegno, bool *use_existent, bool use_lock) +XLogFileInit(XLogSegNo logsegno, bool *use_existent) { char path[MAXPGPATH]; char tmppath[MAXPGPATH]; @@ -3437,8 +3432,7 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent, bool use_lock) */ max_segno = logsegno + CheckPointSegments; if (!InstallXLogFileSegment(&installed_segno, tmppath, - *use_existent, max_segno, - use_lock)) + *use_existent, max_segno)) { /* * No need for any more future segments, or InstallXLogFileSegment() @@ -3592,7 +3586,7 @@ XLogFileCopy(XLogSegNo destsegno, TimeLineID srcTLI, XLogSegNo srcsegno, /* * Now move the segment into place with its final name. */ - if (!InstallXLogFileSegment(&destsegno, tmppath, false, 0, false)) + if (!InstallXLogFileSegment(&destsegno, tmppath, false, 0)) elog(ERROR, "InstallXLogFileSegment should not have failed"); } @@ -3616,29 +3610,20 @@ XLogFileCopy(XLogSegNo destsegno, TimeLineID srcTLI, XLogSegNo srcsegno, * free slot is found between *segno and max_segno. (Ignored when find_free * is false.) * - * use_lock: if true, acquire ControlFileLock while moving file into - * place. This should be true except during bootstrap log creation. The - * caller must *not* hold the lock at call. - * * Returns true if the file was installed successfully. false indicates that * max_segno limit was exceeded, or an error occurred while renaming the * file into place. */ static bool InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, - bool find_free, XLogSegNo max_segno, - bool use_lock) + bool find_free, XLogSegNo max_segno) { char path[MAXPGPATH]; struct stat stat_buf; XLogFilePath(path, ThisTimeLineID, *segno, wal_segment_size); - /* - * We want to be sure that only one process does this at a time. - */ - if (use_lock) - LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); + LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); if (!find_free) { @@ -3653,8 +3638,7 @@ InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, if ((*segno) >= max_segno) { /* Failed to find a free slot within specified range */ - if (use_lock) - LWLockRelease(ControlFileLock); + LWLockRelease(ControlFileLock); return false; } (*segno)++; @@ -3668,14 +3652,12 @@ InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, */ if (durable_rename_excl(tmppath, path, LOG) != 0) { - if (use_lock) - LWLockRelease(ControlFileLock); + LWLockRelease(ControlFileLock); /* durable_rename_excl already emitted log message */ return false; } - if (use_lock) - LWLockRelease(ControlFileLock); + LWLockRelease(ControlFileLock); return true; } @@ -3946,7 +3928,7 @@ PreallocXlogFiles(XLogRecPtr endptr) { _logSegNo++; use_existent = true; - lf = XLogFileInit(_logSegNo, &use_existent, true); + lf = XLogFileInit(_logSegNo, &use_existent); close(lf); if (!use_existent) CheckpointStats.ckpt_segs_added++; @@ -4223,7 +4205,7 @@ RemoveXlogFile(const char *segname, XLogSegNo recycleSegNo, *endlogSegNo <= recycleSegNo && lstat(path, &statbuf) == 0 && S_ISREG(statbuf.st_mode) && InstallXLogFileSegment(endlogSegNo, path, - true, recycleSegNo, true)) + true, recycleSegNo)) { ereport(DEBUG2, (errmsg_internal("recycled write-ahead log file \"%s\"", @@ -5341,7 +5323,7 @@ BootStrapXLOG(void) /* Create first XLOG segment file */ use_existent = false; - openLogFile = XLogFileInit(1, &use_existent, false); + openLogFile = XLogFileInit(1, &use_existent); /* * We needn't bother with Reserve/ReleaseExternalFD here, since we'll @@ -5650,7 +5632,7 @@ exitArchiveRecovery(TimeLineID endTLI, XLogRecPtr endOfLog) bool use_existent = true; int fd; - fd = XLogFileInit(startLogSegNo, &use_existent, true); + fd = XLogFileInit(startLogSegNo, &use_existent); if (close(fd) != 0) { diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index faeea9f0cc563..b00066ed2a71f 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -924,7 +924,7 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr) /* Create/use new log file */ XLByteToSeg(recptr, recvSegNo, wal_segment_size); use_existent = true; - recvFile = XLogFileInit(recvSegNo, &use_existent, true); + recvFile = XLogFileInit(recvSegNo, &use_existent); recvFileTLI = ThisTimeLineID; } diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 77187c12bebac..a1756490bf86e 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -296,7 +296,7 @@ extern XLogRecPtr XLogInsertRecord(struct XLogRecData *rdata, extern void XLogFlush(XLogRecPtr RecPtr); extern bool XLogBackgroundFlush(void); extern bool XLogNeedsFlush(XLogRecPtr RecPtr); -extern int XLogFileInit(XLogSegNo segno, bool *use_existent, bool use_lock); +extern int XLogFileInit(XLogSegNo segno, bool *use_existent); extern int XLogFileOpen(XLogSegNo segno); extern void CheckXLogRemoved(XLogSegNo segno, TimeLineID tli); From 85656bc3050f0846f53de95768b0f9f9df410560 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 28 Jun 2021 18:34:55 -0700 Subject: [PATCH 556/671] In XLogFileInit(), fix *use_existent postcondition to suit callers. Infrequently, the mismatch caused log_checkpoints messages and TRACE_POSTGRESQL_CHECKPOINT_DONE() to witness an "added" count too high by one. Since that consequence is so minor, no back-patch. Discussion: https://postgr.es/m/20210202151416.GB3304930@rfd.leadboat.com --- src/backend/access/transam/xlog.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 39a38ba0c3e57..073dabc96dc45 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -3261,8 +3261,8 @@ XLogNeedsFlush(XLogRecPtr record) * logsegno: identify segment to be created/opened. * * *use_existent: if true, OK to use a pre-existing file (else, any - * pre-existing file will be deleted). On return, true if a pre-existing - * file was used. + * pre-existing file will be deleted). On return, false iff this call added + * some segment on disk. * * Returns FD of opened file. * @@ -3431,8 +3431,10 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent) * CheckPointSegments. */ max_segno = logsegno + CheckPointSegments; - if (!InstallXLogFileSegment(&installed_segno, tmppath, - *use_existent, max_segno)) + if (InstallXLogFileSegment(&installed_segno, tmppath, + *use_existent, max_segno)) + *use_existent = false; + else { /* * No need for any more future segments, or InstallXLogFileSegment() @@ -3442,9 +3444,6 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent) unlink(tmppath); } - /* Set flag to tell caller there was no existent file */ - *use_existent = false; - /* Now open original target segment (might not be file I just made) */ fd = BasicOpenFile(path, O_RDWR | PG_BINARY | get_sync_bit(sync_method)); if (fd < 0) From 421484f79c0b80209fa766eb00dbc2453a753273 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 28 Jun 2021 18:34:56 -0700 Subject: [PATCH 557/671] Remove XLogFileInit() ability to unlink a pre-existing file. Only initdb used it. initdb refuses to operate on a non-empty directory and generally does not cope with pre-existing files of other kinds. Hence, use the opportunity to simplify. Discussion: https://postgr.es/m/20210202151416.GB3304930@rfd.leadboat.com --- src/backend/access/transam/xlog.c | 61 +++++++++++---------------- src/backend/replication/walreceiver.c | 5 +-- src/include/access/xlog.h | 2 +- 3 files changed, 28 insertions(+), 40 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 073dabc96dc45..1a31788071cf4 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -2424,7 +2424,7 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible) bool ispartialpage; bool last_iteration; bool finishing_seg; - bool use_existent; + bool added; int curridx; int npages; int startidx; @@ -2490,8 +2490,7 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible) wal_segment_size); /* create/use new log file */ - use_existent = true; - openLogFile = XLogFileInit(openLogSegNo, &use_existent); + openLogFile = XLogFileInit(openLogSegNo, &added); ReserveExternalFD(); } @@ -3260,9 +3259,7 @@ XLogNeedsFlush(XLogRecPtr record) * * logsegno: identify segment to be created/opened. * - * *use_existent: if true, OK to use a pre-existing file (else, any - * pre-existing file will be deleted). On return, false iff this call added - * some segment on disk. + * *added: on return, true if this call raised the number of extant segments. * * Returns FD of opened file. * @@ -3272,7 +3269,7 @@ XLogNeedsFlush(XLogRecPtr record) * in a critical section. */ int -XLogFileInit(XLogSegNo logsegno, bool *use_existent) +XLogFileInit(XLogSegNo logsegno, bool *added) { char path[MAXPGPATH]; char tmppath[MAXPGPATH]; @@ -3287,19 +3284,17 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent) /* * Try to use existent file (checkpoint maker may have created it already) */ - if (*use_existent) + *added = false; + fd = BasicOpenFile(path, O_RDWR | PG_BINARY | get_sync_bit(sync_method)); + if (fd < 0) { - fd = BasicOpenFile(path, O_RDWR | PG_BINARY | get_sync_bit(sync_method)); - if (fd < 0) - { - if (errno != ENOENT) - ereport(ERROR, - (errcode_for_file_access(), - errmsg("could not open file \"%s\": %m", path))); - } - else - return fd; + if (errno != ENOENT) + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not open file \"%s\": %m", path))); } + else + return fd; /* * Initialize an empty (all zeroes) segment. NOTE: it is possible that @@ -3412,12 +3407,9 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent) errmsg("could not close file \"%s\": %m", tmppath))); /* - * Now move the segment into place with its final name. - * - * If caller didn't want to use a pre-existing file, get rid of any - * pre-existing file. Otherwise, cope with possibility that someone else - * has created the file while we were filling ours: if so, use ours to - * pre-create a future log segment. + * Now move the segment into place with its final name. Cope with + * possibility that someone else has created the file while we were + * filling ours: if so, use ours to pre-create a future log segment. */ installed_segno = logsegno; @@ -3431,9 +3423,8 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent) * CheckPointSegments. */ max_segno = logsegno + CheckPointSegments; - if (InstallXLogFileSegment(&installed_segno, tmppath, - *use_existent, max_segno)) - *use_existent = false; + if (InstallXLogFileSegment(&installed_segno, tmppath, true, max_segno)) + *added = true; else { /* @@ -3918,7 +3909,7 @@ PreallocXlogFiles(XLogRecPtr endptr) { XLogSegNo _logSegNo; int lf; - bool use_existent; + bool added; uint64 offset; XLByteToPrevSeg(endptr, _logSegNo, wal_segment_size); @@ -3926,10 +3917,9 @@ PreallocXlogFiles(XLogRecPtr endptr) if (offset >= (uint32) (0.75 * wal_segment_size)) { _logSegNo++; - use_existent = true; - lf = XLogFileInit(_logSegNo, &use_existent); + lf = XLogFileInit(_logSegNo, &added); close(lf); - if (!use_existent) + if (added) CheckpointStats.ckpt_segs_added++; } } @@ -5224,7 +5214,7 @@ BootStrapXLOG(void) XLogLongPageHeader longpage; XLogRecord *record; char *recptr; - bool use_existent; + bool added; uint64 sysidentifier; struct timeval tv; pg_crc32c crc; @@ -5321,8 +5311,7 @@ BootStrapXLOG(void) record->xl_crc = crc; /* Create first XLOG segment file */ - use_existent = false; - openLogFile = XLogFileInit(1, &use_existent); + openLogFile = XLogFileInit(1, &added); /* * We needn't bother with Reserve/ReleaseExternalFD here, since we'll @@ -5628,10 +5617,10 @@ exitArchiveRecovery(TimeLineID endTLI, XLogRecPtr endOfLog) * The switch happened at a segment boundary, so just create the next * segment on the new timeline. */ - bool use_existent = true; + bool added; int fd; - fd = XLogFileInit(startLogSegNo, &use_existent); + fd = XLogFileInit(startLogSegNo, &added); if (close(fd) != 0) { diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index b00066ed2a71f..eadff8f908fe6 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -885,7 +885,7 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr) if (recvFile < 0 || !XLByteInSeg(recptr, recvSegNo, wal_segment_size)) { - bool use_existent; + bool added; /* * fsync() and close current file before we switch to next one. We @@ -923,8 +923,7 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr) /* Create/use new log file */ XLByteToSeg(recptr, recvSegNo, wal_segment_size); - use_existent = true; - recvFile = XLogFileInit(recvSegNo, &use_existent); + recvFile = XLogFileInit(recvSegNo, &added); recvFileTLI = ThisTimeLineID; } diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index a1756490bf86e..d8b8f59c4bd79 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -296,7 +296,7 @@ extern XLogRecPtr XLogInsertRecord(struct XLogRecData *rdata, extern void XLogFlush(XLogRecPtr RecPtr); extern bool XLogBackgroundFlush(void); extern bool XLogNeedsFlush(XLogRecPtr RecPtr); -extern int XLogFileInit(XLogSegNo segno, bool *use_existent); +extern int XLogFileInit(XLogSegNo segno, bool *added); extern int XLogFileOpen(XLogSegNo segno); extern void CheckXLogRemoved(XLogSegNo segno, TimeLineID tli); From 2b3e4672f7602a6bb46a0735a1b41b635508b290 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 28 Jun 2021 18:34:56 -0700 Subject: [PATCH 558/671] Don't ERROR on PreallocXlogFiles() race condition. Before a restartpoint finishes PreallocXlogFiles(), a startup process KeepFileRestoredFromArchive() call can unlink the preallocated segment. If a CHECKPOINT sql command had elicited the restartpoint experiencing the race condition, that sql command failed. Moreover, the restartpoint omitted its log_checkpoints message and some inessential resource reclamation. Prevent the ERROR by skipping open() of the segment. Since these consequences are so minor, no back-patch. Discussion: https://postgr.es/m/20210202151416.GB3304930@rfd.leadboat.com --- src/backend/access/transam/xlog.c | 79 +++++++++++++++++++-------- src/backend/replication/walreceiver.c | 4 +- src/include/access/xlog.h | 2 +- 3 files changed, 58 insertions(+), 27 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 1a31788071cf4..8cda20d803d56 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -2424,7 +2424,6 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible) bool ispartialpage; bool last_iteration; bool finishing_seg; - bool added; int curridx; int npages; int startidx; @@ -2490,7 +2489,7 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible) wal_segment_size); /* create/use new log file */ - openLogFile = XLogFileInit(openLogSegNo, &added); + openLogFile = XLogFileInit(openLogSegNo); ReserveExternalFD(); } @@ -3255,23 +3254,21 @@ XLogNeedsFlush(XLogRecPtr record) } /* - * Create a new XLOG file segment, or open a pre-existing one. + * Try to make a given XLOG file segment exist. * - * logsegno: identify segment to be created/opened. + * logsegno: identify segment. * * *added: on return, true if this call raised the number of extant segments. * - * Returns FD of opened file. + * path: on return, this char[MAXPGPATH] has the path to the logsegno file. * - * Note: errors here are ERROR not PANIC because we might or might not be - * inside a critical section (eg, during checkpoint there is no reason to - * take down the system on failure). They will promote to PANIC if we are - * in a critical section. + * Returns -1 or FD of opened file. A -1 here is not an error; a caller + * wanting an open segment should attempt to open "path", which usually will + * succeed. (This is weird, but it's efficient for the callers.) */ -int -XLogFileInit(XLogSegNo logsegno, bool *added) +static int +XLogFileInitInternal(XLogSegNo logsegno, bool *added, char *path) { - char path[MAXPGPATH]; char tmppath[MAXPGPATH]; PGAlignedXLogBlock zbuffer; XLogSegNo installed_segno; @@ -3424,26 +3421,53 @@ XLogFileInit(XLogSegNo logsegno, bool *added) */ max_segno = logsegno + CheckPointSegments; if (InstallXLogFileSegment(&installed_segno, tmppath, true, max_segno)) + { *added = true; + elog(DEBUG2, "done creating and filling new WAL file"); + } else { /* * No need for any more future segments, or InstallXLogFileSegment() - * failed to rename the file into place. If the rename failed, opening - * the file below will fail. + * failed to rename the file into place. If the rename failed, a + * caller opening the file may fail. */ unlink(tmppath); + elog(DEBUG2, "abandoned new WAL file"); } + return -1; +} + +/* + * Create a new XLOG file segment, or open a pre-existing one. + * + * logsegno: identify segment to be created/opened. + * + * Returns FD of opened file. + * + * Note: errors here are ERROR not PANIC because we might or might not be + * inside a critical section (eg, during checkpoint there is no reason to + * take down the system on failure). They will promote to PANIC if we are + * in a critical section. + */ +int +XLogFileInit(XLogSegNo logsegno) +{ + bool ignore_added; + char path[MAXPGPATH]; + int fd; + + fd = XLogFileInitInternal(logsegno, &ignore_added, path); + if (fd >= 0) + return fd; + /* Now open original target segment (might not be file I just made) */ fd = BasicOpenFile(path, O_RDWR | PG_BINARY | get_sync_bit(sync_method)); if (fd < 0) ereport(ERROR, (errcode_for_file_access(), errmsg("could not open file \"%s\": %m", path))); - - elog(DEBUG2, "done creating and filling new WAL file"); - return fd; } @@ -3903,6 +3927,15 @@ XLogFileClose(void) * High-volume systems will be OK once they've built up a sufficient set of * recycled log segments, but the startup transient is likely to include * a lot of segment creations by foreground processes, which is not so good. + * + * XLogFileInitInternal() can ereport(ERROR). All known causes indicate big + * trouble; for example, a full filesystem is one cause. The checkpoint WAL + * and/or ControlFile updates already completed. If a RequestCheckpoint() + * initiated the present checkpoint and an ERROR ends this function, the + * command that called RequestCheckpoint() fails. That's not ideal, but it's + * not worth contorting more functions to use caller-specified elevel values. + * (With or without RequestCheckpoint(), an ERROR forestalls some inessential + * reporting and resource reclamation.) */ static void PreallocXlogFiles(XLogRecPtr endptr) @@ -3910,6 +3943,7 @@ PreallocXlogFiles(XLogRecPtr endptr) XLogSegNo _logSegNo; int lf; bool added; + char path[MAXPGPATH]; uint64 offset; XLByteToPrevSeg(endptr, _logSegNo, wal_segment_size); @@ -3917,8 +3951,9 @@ PreallocXlogFiles(XLogRecPtr endptr) if (offset >= (uint32) (0.75 * wal_segment_size)) { _logSegNo++; - lf = XLogFileInit(_logSegNo, &added); - close(lf); + lf = XLogFileInitInternal(_logSegNo, &added, path); + if (lf >= 0) + close(lf); if (added) CheckpointStats.ckpt_segs_added++; } @@ -5214,7 +5249,6 @@ BootStrapXLOG(void) XLogLongPageHeader longpage; XLogRecord *record; char *recptr; - bool added; uint64 sysidentifier; struct timeval tv; pg_crc32c crc; @@ -5311,7 +5345,7 @@ BootStrapXLOG(void) record->xl_crc = crc; /* Create first XLOG segment file */ - openLogFile = XLogFileInit(1, &added); + openLogFile = XLogFileInit(1); /* * We needn't bother with Reserve/ReleaseExternalFD here, since we'll @@ -5617,10 +5651,9 @@ exitArchiveRecovery(TimeLineID endTLI, XLogRecPtr endOfLog) * The switch happened at a segment boundary, so just create the next * segment on the new timeline. */ - bool added; int fd; - fd = XLogFileInit(startLogSegNo, &added); + fd = XLogFileInit(startLogSegNo); if (close(fd) != 0) { diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index eadff8f908fe6..2be9ad967dc20 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -885,8 +885,6 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr) if (recvFile < 0 || !XLByteInSeg(recptr, recvSegNo, wal_segment_size)) { - bool added; - /* * fsync() and close current file before we switch to next one. We * would otherwise have to reopen this file to fsync it later @@ -923,7 +921,7 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr) /* Create/use new log file */ XLByteToSeg(recptr, recvSegNo, wal_segment_size); - recvFile = XLogFileInit(recvSegNo, &added); + recvFile = XLogFileInit(recvSegNo); recvFileTLI = ThisTimeLineID; } diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index d8b8f59c4bd79..7510e88228720 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -296,7 +296,7 @@ extern XLogRecPtr XLogInsertRecord(struct XLogRecData *rdata, extern void XLogFlush(XLogRecPtr RecPtr); extern bool XLogBackgroundFlush(void); extern bool XLogNeedsFlush(XLogRecPtr RecPtr); -extern int XLogFileInit(XLogSegNo segno, bool *added); +extern int XLogFileInit(XLogSegNo segno); extern int XLogFileOpen(XLogSegNo segno); extern void CheckXLogRemoved(XLogSegNo segno, TimeLineID tli); From cc2c7d65fc27e877c9f407587b0b92d46cd6dd16 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 28 Jun 2021 18:34:56 -0700 Subject: [PATCH 559/671] Skip WAL recycling and preallocation during archive recovery. The previous commit addressed the chief consequences of a race condition between InstallXLogFileSegment() and KeepFileRestoredFromArchive(). Fix three lesser consequences. A spurious durable_rename_excl() LOG message remained possible. KeepFileRestoredFromArchive() wasted the proceeds of WAL recycling and preallocation. Finally, XLogFileInitInternal() could return a descriptor for a file that KeepFileRestoredFromArchive() had already unlinked. That felt like a recipe for future bugs. Discussion: https://postgr.es/m/20210202151416.GB3304930@rfd.leadboat.com --- src/backend/access/transam/xlog.c | 65 +++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 8 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 8cda20d803d56..2c6e21bea5a81 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -662,6 +662,16 @@ typedef struct XLogCtlData */ bool SharedHotStandbyActive; + /* + * InstallXLogFileSegmentActive indicates whether the checkpointer should + * arrange for future segments by recycling and/or PreallocXlogFiles(). + * Protected by ControlFileLock. Only the startup process changes it. If + * true, anyone can use InstallXLogFileSegment(). If false, the startup + * process owns the exclusive right to install segments, by reading from + * the archive and possibly replacing existing files. + */ + bool InstallXLogFileSegmentActive; + /* * SharedPromoteIsTriggered indicates if a standby promotion has been * triggered. Protected by info_lck. @@ -921,6 +931,7 @@ static int XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, XLogRecPtr targetRecPtr, char *readBuf); static bool WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, bool fetching_ckpt, XLogRecPtr tliRecPtr); +static void XLogShutdownWalRcv(void); static int emode_for_corrupt_record(int emode, XLogRecPtr RecPtr); static void XLogFileClose(void); static void PreallocXlogFiles(XLogRecPtr endptr); @@ -3625,8 +3636,8 @@ XLogFileCopy(XLogSegNo destsegno, TimeLineID srcTLI, XLogSegNo srcsegno, * is false.) * * Returns true if the file was installed successfully. false indicates that - * max_segno limit was exceeded, or an error occurred while renaming the - * file into place. + * max_segno limit was exceeded, the startup process has disabled this + * function for now, or an error occurred while renaming the file into place. */ static bool InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, @@ -3638,6 +3649,11 @@ InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, XLogFilePath(path, ThisTimeLineID, *segno, wal_segment_size); LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); + if (!XLogCtl->InstallXLogFileSegmentActive) + { + LWLockRelease(ControlFileLock); + return false; + } if (!find_free) { @@ -3745,6 +3761,7 @@ XLogFileRead(XLogSegNo segno, int emode, TimeLineID tli, */ if (source == XLOG_FROM_ARCHIVE) { + Assert(!XLogCtl->InstallXLogFileSegmentActive); KeepFileRestoredFromArchive(path, xlogfname); /* @@ -3946,6 +3963,9 @@ PreallocXlogFiles(XLogRecPtr endptr) char path[MAXPGPATH]; uint64 offset; + if (!XLogCtl->InstallXLogFileSegmentActive) + return; /* unlocked check says no */ + XLByteToPrevSeg(endptr, _logSegNo, wal_segment_size); offset = XLogSegmentOffset(endptr - 1, wal_segment_size); if (offset >= (uint32) (0.75 * wal_segment_size)) @@ -4227,6 +4247,7 @@ RemoveXlogFile(const char *segname, XLogSegNo recycleSegNo, */ if (wal_recycle && *endlogSegNo <= recycleSegNo && + XLogCtl->InstallXLogFileSegmentActive && /* callee rechecks this */ lstat(path, &statbuf) == 0 && S_ISREG(statbuf.st_mode) && InstallXLogFileSegment(endlogSegNo, path, true, recycleSegNo)) @@ -4240,7 +4261,7 @@ RemoveXlogFile(const char *segname, XLogSegNo recycleSegNo, } else { - /* No need for any more future segments... */ + /* No need for any more future segments, or recycling failed ... */ int rc; ereport(DEBUG2, @@ -5226,6 +5247,7 @@ XLOGShmemInit(void) XLogCtl->XLogCacheBlck = XLOGbuffers - 1; XLogCtl->SharedRecoveryState = RECOVERY_STATE_CRASH; XLogCtl->SharedHotStandbyActive = false; + XLogCtl->InstallXLogFileSegmentActive = false; XLogCtl->SharedPromoteIsTriggered = false; XLogCtl->WalWriterSleeping = false; @@ -5253,6 +5275,11 @@ BootStrapXLOG(void) struct timeval tv; pg_crc32c crc; + /* allow ordinary WAL segment creation, like StartupXLOG() would */ + LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); + XLogCtl->InstallXLogFileSegmentActive = true; + LWLockRelease(ControlFileLock); + /* * Select a hopefully-unique system identifier code for this installation. * We use the result of gettimeofday(), including the fractional seconds @@ -7619,7 +7646,7 @@ StartupXLOG(void) * the startup checkpoint record. It will trump over the checkpoint and * subsequent records if it's still alive when we start writing WAL. */ - ShutdownWalRcv(); + XLogShutdownWalRcv(); /* * Reset unlogged relations to the contents of their INIT fork. This is @@ -7644,7 +7671,7 @@ StartupXLOG(void) * recovery, e.g., timeline history file) from archive or pg_wal. * * Note that standby mode must be turned off after killing WAL receiver, - * i.e., calling ShutdownWalRcv(). + * i.e., calling XLogShutdownWalRcv(). */ Assert(!WalRcvStreaming()); StandbyMode = false; @@ -7709,6 +7736,14 @@ StartupXLOG(void) */ oldestActiveXID = PrescanPreparedTransactions(NULL, NULL); + /* + * Allow ordinary WAL segment creation before any exitArchiveRecovery(), + * which sometimes creates a segment, and after the last ReadRecord(). + */ + LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); + XLogCtl->InstallXLogFileSegmentActive = true; + LWLockRelease(ControlFileLock); + /* * Consider whether we need to assign a new timeline ID. * @@ -12378,7 +12413,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, */ if (StandbyMode && CheckForStandbyTrigger()) { - ShutdownWalRcv(); + XLogShutdownWalRcv(); return false; } @@ -12426,7 +12461,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, * WAL that we restore from archive. */ if (WalRcvStreaming()) - ShutdownWalRcv(); + XLogShutdownWalRcv(); /* * Before we sleep, re-scan for possible new timelines if @@ -12553,7 +12588,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, */ if (pendingWalRcvRestart && !startWalReceiver) { - ShutdownWalRcv(); + XLogShutdownWalRcv(); /* * Re-scan for possible new timelines if we were @@ -12603,6 +12638,9 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, tli, curFileTLI); } curFileTLI = tli; + LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); + XLogCtl->InstallXLogFileSegmentActive = true; + LWLockRelease(ControlFileLock); RequestXLogStreaming(tli, ptr, PrimaryConnInfo, PrimarySlotName, wal_receiver_create_temp_slot); @@ -12770,6 +12808,17 @@ StartupRequestWalReceiverRestart(void) } } +/* Thin wrapper around ShutdownWalRcv(). */ +static void +XLogShutdownWalRcv(void) +{ + ShutdownWalRcv(); + + LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); + XLogCtl->InstallXLogFileSegmentActive = false; + LWLockRelease(ControlFileLock); +} + /* * Determine what log level should be used to report a corrupt WAL record * in the current WAL page, previously read by XLogPageRead(). From 4035cd5d4eee4dae797bfc77ab07f8dcd8781b41 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 29 Jun 2021 11:17:55 +0900 Subject: [PATCH 560/671] Add support for LZ4 with compression of full-page writes in WAL The logic is implemented so as there can be a choice in the compression used when building a WAL record, and an extra per-record bit is used to track down if a block is compressed with PGLZ, LZ4 or nothing. wal_compression, the existing parameter, is changed to an enum with support for the following backward-compatible values: - "off", the default, to not use compression. - "pglz" or "on", to compress FPWs with PGLZ. - "lz4", the new mode, to compress FPWs with LZ4. Benchmarking has showed that LZ4 outclasses easily PGLZ. ZSTD would be also an interesting choice, but going just with LZ4 for now makes the patch minimalistic as toast compression is already able to use LZ4, so there is no need to worry about any build-related needs for this implementation. Author: Andrey Borodin, Justin Pryzby Reviewed-by: Dilip Kumar, Michael Paquier Discussion: https://postgr.es/m/3037310D-ECB7-4BF1-AF20-01C10BB33A33@yandex-team.ru --- doc/src/sgml/config.sgml | 14 ++-- doc/src/sgml/install-windows.sgml | 2 +- doc/src/sgml/installation.sgml | 5 +- doc/src/sgml/standalone-profile.xsl | 4 + src/backend/access/transam/xlog.c | 2 +- src/backend/access/transam/xloginsert.c | 73 ++++++++++++++++--- src/backend/access/transam/xlogreader.c | 58 ++++++++++++--- src/backend/utils/misc/guc.c | 36 ++++++--- src/backend/utils/misc/postgresql.conf.sample | 3 +- src/bin/pg_waldump/pg_waldump.c | 19 ++++- src/include/access/xlog.h | 10 ++- src/include/access/xlogrecord.h | 16 ++-- src/tools/pgindent/typedefs.list | 1 + 13 files changed, 191 insertions(+), 52 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 3eee9883595ff..6098f6b0202ea 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -3128,23 +3128,27 @@ include_dir 'conf.d'
- wal_compression (boolean) + wal_compression (enum) wal_compression configuration parameter - When this parameter is on, the PostgreSQL + This parameter enables compression of WAL using the specified + compression method. + When enabled, the PostgreSQL server compresses full page images written to WAL when is on or during a base backup. A compressed page image will be decompressed during WAL replay. - The default value is off. - Only superusers can change this setting. + The supported methods are pglz and + lz4 (if PostgreSQL was + compiled with ). The default value is + off. Only superusers can change this setting. - Turning this parameter on can reduce the WAL volume without + Enabling compression can reduce the WAL volume without increasing the risk of unrecoverable data corruption, but at the cost of some extra CPU spent on the compression during WAL logging and on the decompression during WAL replay. diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgml index 312edc6f7aa3a..ba794b8c934b3 100644 --- a/doc/src/sgml/install-windows.sgml +++ b/doc/src/sgml/install-windows.sgml @@ -299,7 +299,7 @@ $ENV{MSBFLAGS}="/m"; LZ4 Required for supporting LZ4 compression - method for compressing the table data. Binaries and source can be + method for compressing table or WAL data. Binaries and source can be downloaded from . diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index 3c0aa118c76bf..61d0bc8c43f33 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -270,7 +270,8 @@ su - postgres You need LZ4, if you want to support compression of data with this method; see - . + and + . @@ -980,7 +981,7 @@ build-postgresql: Build with LZ4 compression support. This allows the use of LZ4 for - compression of table data. + compression of table and WAL data.
diff --git a/doc/src/sgml/standalone-profile.xsl b/doc/src/sgml/standalone-profile.xsl index 8bdf58632cd11..d748076a058e2 100644 --- a/doc/src/sgml/standalone-profile.xsl +++ b/doc/src/sgml/standalone-profile.xsl @@ -52,6 +52,10 @@ variant without links and references to the main documentation. the configuration parameter default_toast_compression + + the configuration parameter wal_compression + + the documentation diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 2c6e21bea5a81..9cbca6392d337 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -98,7 +98,7 @@ char *XLogArchiveCommand = NULL; bool EnableHotStandby = false; bool fullPageWrites = true; bool wal_log_hints = false; -bool wal_compression = false; +int wal_compression = WAL_COMPRESSION_NONE; char *wal_consistency_checking_string = NULL; bool *wal_consistency_checking = NULL; bool wal_init_zero = true; diff --git a/src/backend/access/transam/xloginsert.c b/src/backend/access/transam/xloginsert.c index 32b4cc84e79aa..10b3b09053519 100644 --- a/src/backend/access/transam/xloginsert.c +++ b/src/backend/access/transam/xloginsert.c @@ -33,8 +33,20 @@ #include "storage/proc.h" #include "utils/memutils.h" -/* Buffer size required to store a compressed version of backup block image */ -#define PGLZ_MAX_BLCKSZ PGLZ_MAX_OUTPUT(BLCKSZ) +/* + * Guess the maximum buffer size required to store a compressed version of + * backup block image. + */ +#ifdef USE_LZ4 +#include +#define LZ4_MAX_BLCKSZ LZ4_COMPRESSBOUND(BLCKSZ) +#else +#define LZ4_MAX_BLCKSZ 0 +#endif + +#define PGLZ_MAX_BLCKSZ PGLZ_MAX_OUTPUT(BLCKSZ) + +#define COMPRESS_BUFSIZE Max(PGLZ_MAX_BLCKSZ, LZ4_MAX_BLCKSZ) /* * For each block reference registered with XLogRegisterBuffer, we fill in @@ -58,7 +70,7 @@ typedef struct * backup block data in XLogRecordAssemble() */ /* buffer to store a compressed version of backup block image */ - char compressed_page[PGLZ_MAX_BLCKSZ]; + char compressed_page[COMPRESS_BUFSIZE]; } registered_buffer; static registered_buffer *registered_buffers; @@ -628,7 +640,7 @@ XLogRecordAssemble(RmgrId rmid, uint8 info, /* * Try to compress a block image if wal_compression is enabled */ - if (wal_compression) + if (wal_compression != WAL_COMPRESSION_NONE) { is_compressed = XLogCompressBackupBlock(page, bimg.hole_offset, @@ -665,8 +677,29 @@ XLogRecordAssemble(RmgrId rmid, uint8 info, if (is_compressed) { + /* The current compression is stored in the WAL record */ bimg.length = compressed_len; - bimg.bimg_info |= BKPIMAGE_IS_COMPRESSED; + + /* Set the compression method used for this block */ + switch ((WalCompression) wal_compression) + { + case WAL_COMPRESSION_PGLZ: + bimg.bimg_info |= BKPIMAGE_COMPRESS_PGLZ; + break; + + case WAL_COMPRESSION_LZ4: +#ifdef USE_LZ4 + bimg.bimg_info |= BKPIMAGE_COMPRESS_LZ4; +#else + elog(ERROR, "LZ4 is not supported by this build"); +#endif + break; + + case WAL_COMPRESSION_NONE: + Assert(false); /* cannot happen */ + break; + /* no default case, so that compiler will warn */ + } rdt_datas_last->data = regbuf->compressed_page; rdt_datas_last->len = compressed_len; @@ -853,12 +886,34 @@ XLogCompressBackupBlock(char *page, uint16 hole_offset, uint16 hole_length, else source = page; + switch ((WalCompression) wal_compression) + { + case WAL_COMPRESSION_PGLZ: + len = pglz_compress(source, orig_len, dest, PGLZ_strategy_default); + break; + + case WAL_COMPRESSION_LZ4: +#ifdef USE_LZ4 + len = LZ4_compress_default(source, dest, orig_len, + COMPRESS_BUFSIZE); + if (len <= 0) + len = -1; /* failure */ +#else + elog(ERROR, "LZ4 is not supported by this build"); +#endif + break; + + case WAL_COMPRESSION_NONE: + Assert(false); /* cannot happen */ + break; + /* no default case, so that compiler will warn */ + } + /* - * We recheck the actual size even if pglz_compress() reports success and - * see if the number of bytes saved by compression is larger than the - * length of extra data needed for the compressed version of block image. + * We recheck the actual size even if compression reports success and see + * if the number of bytes saved by compression is larger than the length + * of extra data needed for the compressed version of block image. */ - len = pglz_compress(source, orig_len, dest, PGLZ_strategy_default); if (len >= 0 && len + extra_bytes < orig_len) { diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index 42738eb940c2c..9a2cdf888e281 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -18,6 +18,9 @@ #include "postgres.h" #include +#ifdef USE_LZ4 +#include +#endif #include "access/transam.h" #include "access/xlog_internal.h" @@ -1290,7 +1293,7 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg) blk->apply_image = ((blk->bimg_info & BKPIMAGE_APPLY) != 0); - if (blk->bimg_info & BKPIMAGE_IS_COMPRESSED) + if (BKPIMAGE_COMPRESSED(blk->bimg_info)) { if (blk->bimg_info & BKPIMAGE_HAS_HOLE) COPY_HEADER_FIELD(&blk->hole_length, sizeof(uint16)); @@ -1335,29 +1338,28 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg) } /* - * cross-check that bimg_len < BLCKSZ if the IS_COMPRESSED - * flag is set. + * Cross-check that bimg_len < BLCKSZ if it is compressed. */ - if ((blk->bimg_info & BKPIMAGE_IS_COMPRESSED) && + if (BKPIMAGE_COMPRESSED(blk->bimg_info) && blk->bimg_len == BLCKSZ) { report_invalid_record(state, - "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X", + "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X", (unsigned int) blk->bimg_len, LSN_FORMAT_ARGS(state->ReadRecPtr)); goto err; } /* - * cross-check that bimg_len = BLCKSZ if neither HAS_HOLE nor - * IS_COMPRESSED flag is set. + * cross-check that bimg_len = BLCKSZ if neither HAS_HOLE is + * set nor COMPRESSED(). */ if (!(blk->bimg_info & BKPIMAGE_HAS_HOLE) && - !(blk->bimg_info & BKPIMAGE_IS_COMPRESSED) && + !BKPIMAGE_COMPRESSED(blk->bimg_info) && blk->bimg_len != BLCKSZ) { report_invalid_record(state, - "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X", + "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X", (unsigned int) blk->data_len, LSN_FORMAT_ARGS(state->ReadRecPtr)); goto err; @@ -1555,17 +1557,49 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page) bkpb = &record->blocks[block_id]; ptr = bkpb->bkp_image; - if (bkpb->bimg_info & BKPIMAGE_IS_COMPRESSED) + if (BKPIMAGE_COMPRESSED(bkpb->bimg_info)) { /* If a backup block image is compressed, decompress it */ - if (pglz_decompress(ptr, bkpb->bimg_len, tmp.data, - BLCKSZ - bkpb->hole_length, true) < 0) + bool decomp_success = true; + + if ((bkpb->bimg_info & BKPIMAGE_COMPRESS_PGLZ) != 0) + { + if (pglz_decompress(ptr, bkpb->bimg_len, tmp.data, + BLCKSZ - bkpb->hole_length, true) < 0) + decomp_success = false; + } + else if ((bkpb->bimg_info & BKPIMAGE_COMPRESS_LZ4) != 0) + { +#ifdef USE_LZ4 + if (LZ4_decompress_safe(ptr, tmp.data, + bkpb->bimg_len, BLCKSZ - bkpb->hole_length) <= 0) + decomp_success = false; +#else + report_invalid_record(record, "image at %X/%X compressed with %s not supported by build, block %d", + (uint32) (record->ReadRecPtr >> 32), + (uint32) record->ReadRecPtr, + "LZ4", + block_id); + return false; +#endif + } + else + { + report_invalid_record(record, "image at %X/%X compressed with unknown method, block %d", + (uint32) (record->ReadRecPtr >> 32), + (uint32) record->ReadRecPtr, + block_id); + return false; + } + + if (!decomp_success) { report_invalid_record(record, "invalid compressed image at %X/%X, block %d", LSN_FORMAT_ARGS(record->ReadRecPtr), block_id); return false; } + ptr = tmp.data; } diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 297e705b806a6..480e8cd19914e 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -540,6 +540,22 @@ static struct config_enum_entry default_toast_compression_options[] = { {NULL, 0, false} }; +static const struct config_enum_entry wal_compression_options[] = { + {"pglz", WAL_COMPRESSION_PGLZ, false}, +#ifdef USE_LZ4 + {"lz4", WAL_COMPRESSION_LZ4, false}, +#endif + {"on", WAL_COMPRESSION_PGLZ, false}, + {"off", WAL_COMPRESSION_NONE, false}, + {"true", WAL_COMPRESSION_PGLZ, true}, + {"false", WAL_COMPRESSION_NONE, true}, + {"yes", WAL_COMPRESSION_PGLZ, true}, + {"no", WAL_COMPRESSION_NONE, true}, + {"1", WAL_COMPRESSION_PGLZ, true}, + {"0", WAL_COMPRESSION_NONE, true}, + {NULL, 0, false} +}; + /* * Options for enum values stored in other modules */ @@ -1304,16 +1320,6 @@ static struct config_bool ConfigureNamesBool[] = NULL, NULL, NULL }, - { - {"wal_compression", PGC_SUSET, WAL_SETTINGS, - gettext_noop("Compresses full-page writes written in WAL file."), - NULL - }, - &wal_compression, - false, - NULL, NULL, NULL - }, - { {"wal_init_zero", PGC_SUSET, WAL_SETTINGS, gettext_noop("Writes zeroes to new WAL files before first use."), @@ -4816,6 +4822,16 @@ static struct config_enum ConfigureNamesEnum[] = NULL, NULL, NULL }, + { + {"wal_compression", PGC_SUSET, WAL_SETTINGS, + gettext_noop("Compresses full-page writes written in WAL file with specified method."), + NULL + }, + &wal_compression, + WAL_COMPRESSION_NONE, wal_compression_options, + NULL, NULL, NULL + }, + { {"wal_level", PGC_POSTMASTER, WAL_SETTINGS, gettext_noop("Sets the level of information written to the WAL."), diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index af04ec3c744e7..b696abfe54112 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -218,7 +218,8 @@ #full_page_writes = on # recover from partial page writes #wal_log_hints = off # also do full page writes of non-critical updates # (change requires restart) -#wal_compression = off # enable compression of full-page writes +#wal_compression = off # enables compression of full-page writes; + # off, pglz, lz4, or on #wal_init_zero = on # zero-fill new WAL files #wal_recycle = on # recycle WAL files #wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c index f8b8afe4a7beb..d83847b276deb 100644 --- a/src/bin/pg_waldump/pg_waldump.c +++ b/src/bin/pg_waldump/pg_waldump.c @@ -537,18 +537,29 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogReaderState *record) blk); if (XLogRecHasBlockImage(record, block_id)) { - if (record->blocks[block_id].bimg_info & - BKPIMAGE_IS_COMPRESSED) + uint8 bimg_info = record->blocks[block_id].bimg_info; + + if (BKPIMAGE_COMPRESSED(bimg_info)) { + const char *method; + + if ((bimg_info & BKPIMAGE_COMPRESS_PGLZ) != 0) + method = "pglz"; + else if ((bimg_info & BKPIMAGE_COMPRESS_LZ4) != 0) + method = "lz4"; + else + method = "unknown"; + printf(" (FPW%s); hole: offset: %u, length: %u, " - "compression saved: %u", + "compression saved: %u, method: %s", XLogRecBlockImageApply(record, block_id) ? "" : " for WAL verification", record->blocks[block_id].hole_offset, record->blocks[block_id].hole_length, BLCKSZ - record->blocks[block_id].hole_length - - record->blocks[block_id].bimg_len); + record->blocks[block_id].bimg_len, + method); } else { diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 7510e88228720..ccfcf43d62a72 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -116,7 +116,7 @@ extern char *XLogArchiveCommand; extern bool EnableHotStandby; extern bool fullPageWrites; extern bool wal_log_hints; -extern bool wal_compression; +extern int wal_compression; extern bool wal_init_zero; extern bool wal_recycle; extern bool *wal_consistency_checking; @@ -167,6 +167,14 @@ typedef enum WalLevel WAL_LEVEL_LOGICAL } WalLevel; +/* Compression algorithms for WAL */ +typedef enum WalCompression +{ + WAL_COMPRESSION_NONE = 0, + WAL_COMPRESSION_PGLZ, + WAL_COMPRESSION_LZ4 +} WalCompression; + /* Recovery states */ typedef enum RecoveryState { diff --git a/src/include/access/xlogrecord.h b/src/include/access/xlogrecord.h index 80c92a2498a32..e06ee92a5e54e 100644 --- a/src/include/access/xlogrecord.h +++ b/src/include/access/xlogrecord.h @@ -114,8 +114,8 @@ typedef struct XLogRecordBlockHeader * present is (BLCKSZ - ). * * Additionally, when wal_compression is enabled, we will try to compress full - * page images using the PGLZ compression algorithm, after removing the "hole". - * This can reduce the WAL volume, but at some extra cost of CPU spent + * page images using one of the supported algorithms, after removing the + * "hole". This can reduce the WAL volume, but at some extra cost of CPU spent * on the compression during WAL logging. In this case, since the "hole" * length cannot be calculated by subtracting the number of page image bytes * from BLCKSZ, basically it needs to be stored as an extra information. @@ -134,7 +134,7 @@ typedef struct XLogRecordBlockImageHeader uint8 bimg_info; /* flag bits, see below */ /* - * If BKPIMAGE_HAS_HOLE and BKPIMAGE_IS_COMPRESSED, an + * If BKPIMAGE_HAS_HOLE and BKPIMAGE_COMPRESSED(), an * XLogRecordBlockCompressHeader struct follows. */ } XLogRecordBlockImageHeader; @@ -144,9 +144,13 @@ typedef struct XLogRecordBlockImageHeader /* Information stored in bimg_info */ #define BKPIMAGE_HAS_HOLE 0x01 /* page image has "hole" */ -#define BKPIMAGE_IS_COMPRESSED 0x02 /* page image is compressed */ -#define BKPIMAGE_APPLY 0x04 /* page image should be restored during - * replay */ +#define BKPIMAGE_APPLY 0x02 /* page image should be restored + * during replay */ +/* compression methods supported */ +#define BKPIMAGE_COMPRESS_PGLZ 0x04 +#define BKPIMAGE_COMPRESS_LZ4 0x08 +#define BKPIMAGE_COMPRESSED(info) \ + ((info & (BKPIMAGE_COMPRESS_PGLZ | BKPIMAGE_COMPRESS_LZ4)) != 0) /* * Extra header information used when page image has "hole" and diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 1b3da854214ce..64c06cf952359 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -2843,6 +2843,7 @@ WaitEventSet WaitEventTimeout WaitPMResult WalCloseMethod +WalCompression WalLevel WalRcvData WalRcvExecResult From 47f514dd9a0022a04d321b627b2e991cb85396e2 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 29 Jun 2021 11:54:11 +0900 Subject: [PATCH 561/671] Fix compilation warning in xloginsert.c This is reproducible with gcc using at least -O0. The last checks validating the compression of a block could not be reached with this variable not set, but let's be clean. Oversight in 4035cd5, per buildfarm member lapwing. --- src/backend/access/transam/xloginsert.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/access/transam/xloginsert.c b/src/backend/access/transam/xloginsert.c index 10b3b09053519..3d2c9c3e8cf52 100644 --- a/src/backend/access/transam/xloginsert.c +++ b/src/backend/access/transam/xloginsert.c @@ -863,7 +863,7 @@ XLogCompressBackupBlock(char *page, uint16 hole_offset, uint16 hole_length, char *dest, uint16 *dlen) { int32 orig_len = BLCKSZ - hole_length; - int32 len; + int32 len = -1; int32 extra_bytes = 0; char *source; PGAlignedBlock tmp; From 445e36ad4e14480a3c97d0f973a3532912424e85 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 29 Jun 2021 13:57:45 +0900 Subject: [PATCH 562/671] Bump XLOG_PAGE_MAGIC for format changes related to FPW compression Oversight in 4035cd5, spotted by Tom Lane. Discussion: https://postgr.es/m/365778.1624941613@sss.pgh.pa.us --- src/include/access/xlog_internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/access/xlog_internal.h b/src/include/access/xlog_internal.h index 26a743b6b6c39..3b5eceff65842 100644 --- a/src/include/access/xlog_internal.h +++ b/src/include/access/xlog_internal.h @@ -31,7 +31,7 @@ /* * Each page of XLOG file has a header like this: */ -#define XLOG_PAGE_MAGIC 0xD10D /* can be used as WAL version indicator */ +#define XLOG_PAGE_MAGIC 0xD10E /* can be used as WAL version indicator */ typedef struct XLogPageHeaderData { From 6a6389a08b228aa6bd21ced7a9c5151bf6f7f0a2 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 29 Jun 2021 07:57:16 +0200 Subject: [PATCH 563/671] Add index OID macro argument to DECLARE_INDEX Instead of defining symbols such as AmOidIndexId explicitly, include them as an argument of DECLARE_INDEX() and have genbki.pl generate the way as the table OID symbols from the CATALOG() declaration. Reviewed-by: John Naylor Discussion: https://www.postgresql.org/message-id/flat/ccef1e46-a404-25b1-9b4c-85f2c08e1f28%40enterprisedb.com --- src/backend/catalog/Catalog.pm | 5 +++-- src/backend/catalog/genbki.pl | 8 ++++++++ src/backend/utils/cache/syscache.c | 4 ++-- src/include/catalog/genbki.h | 6 +++--- src/include/catalog/pg_aggregate.h | 3 +-- src/include/catalog/pg_am.h | 6 ++---- src/include/catalog/pg_amop.h | 9 +++------ src/include/catalog/pg_amproc.h | 6 ++---- src/include/catalog/pg_attrdef.h | 6 ++---- src/include/catalog/pg_attribute.h | 6 ++---- src/include/catalog/pg_auth_members.h | 6 ++---- src/include/catalog/pg_authid.h | 6 ++---- src/include/catalog/pg_cast.h | 6 ++---- src/include/catalog/pg_class.h | 9 +++------ src/include/catalog/pg_collation.h | 6 ++---- src/include/catalog/pg_constraint.h | 15 +++++---------- src/include/catalog/pg_conversion.h | 9 +++------ src/include/catalog/pg_database.h | 6 ++---- src/include/catalog/pg_db_role_setting.h | 3 +-- src/include/catalog/pg_default_acl.h | 6 ++---- src/include/catalog/pg_depend.h | 6 ++---- src/include/catalog/pg_description.h | 3 +-- src/include/catalog/pg_enum.h | 9 +++------ src/include/catalog/pg_event_trigger.h | 6 ++---- src/include/catalog/pg_extension.h | 6 ++---- src/include/catalog/pg_foreign_data_wrapper.h | 6 ++---- src/include/catalog/pg_foreign_server.h | 6 ++---- src/include/catalog/pg_foreign_table.h | 3 +-- src/include/catalog/pg_index.h | 6 ++---- src/include/catalog/pg_inherits.h | 6 ++---- src/include/catalog/pg_init_privs.h | 3 +-- src/include/catalog/pg_language.h | 6 ++---- src/include/catalog/pg_largeobject.h | 3 +-- src/include/catalog/pg_largeobject_metadata.h | 3 +-- src/include/catalog/pg_namespace.h | 6 ++---- src/include/catalog/pg_opclass.h | 6 ++---- src/include/catalog/pg_operator.h | 6 ++---- src/include/catalog/pg_opfamily.h | 6 ++---- src/include/catalog/pg_partitioned_table.h | 3 +-- src/include/catalog/pg_policy.h | 6 ++---- src/include/catalog/pg_proc.h | 6 ++---- src/include/catalog/pg_publication.h | 6 ++---- src/include/catalog/pg_publication_rel.h | 6 ++---- src/include/catalog/pg_range.h | 8 ++------ src/include/catalog/pg_replication_origin.h | 6 ++---- src/include/catalog/pg_rewrite.h | 6 ++---- src/include/catalog/pg_seclabel.h | 3 +-- src/include/catalog/pg_sequence.h | 3 +-- src/include/catalog/pg_shdepend.h | 6 ++---- src/include/catalog/pg_shdescription.h | 3 +-- src/include/catalog/pg_shseclabel.h | 3 +-- src/include/catalog/pg_statistic.h | 3 +-- src/include/catalog/pg_statistic_ext.h | 9 +++------ src/include/catalog/pg_statistic_ext_data.h | 3 +-- src/include/catalog/pg_subscription.h | 6 ++---- src/include/catalog/pg_subscription_rel.h | 3 +-- src/include/catalog/pg_tablespace.h | 6 ++---- src/include/catalog/pg_transform.h | 6 ++---- src/include/catalog/pg_trigger.h | 9 +++------ src/include/catalog/pg_ts_config.h | 6 ++---- src/include/catalog/pg_ts_config_map.h | 3 +-- src/include/catalog/pg_ts_dict.h | 6 ++---- src/include/catalog/pg_ts_parser.h | 6 ++---- src/include/catalog/pg_ts_template.h | 6 ++---- src/include/catalog/pg_type.h | 6 ++---- src/include/catalog/pg_user_mapping.h | 6 ++---- 66 files changed, 133 insertions(+), 243 deletions(-) diff --git a/src/backend/catalog/Catalog.pm b/src/backend/catalog/Catalog.pm index a5e9869378b97..6eef0bc680db7 100644 --- a/src/backend/catalog/Catalog.pm +++ b/src/backend/catalog/Catalog.pm @@ -95,7 +95,7 @@ sub ParseHeader { parent_table => $1, toast_oid => $2, toast_index_oid => $3 }; } elsif ( - /^DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*(\w+),\s*(\d+),\s*(.+)\)/) + /^DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*(\w+),\s*(\d+),\s*(\w+),\s*(.+)\)/) { push @{ $catalog{indexing} }, { @@ -103,7 +103,8 @@ sub ParseHeader is_pkey => $2 ? 1 : 0, index_name => $3, index_oid => $4, - index_decl => $5 + index_oid_macro => $5, + index_decl => $6 }; } elsif ( diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index f023cb1209d5c..968737609373c 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -469,6 +469,14 @@ printf $def "#define %s %s\n", $catalog->{rowtype_oid_macro}, $catalog->{rowtype_oid} if $catalog->{rowtype_oid_macro}; + + foreach my $index (@{ $catalog->{indexing} }) + { + printf $def "#define %s %s\n", + $index->{index_oid_macro}, $index->{index_oid} + if $index->{index_oid_macro}; + } + print $def "\n"; # .bki CREATE command for this catalog diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c index e4dc4ee34eebf..d6cb78dea8d8f 100644 --- a/src/backend/utils/cache/syscache.c +++ b/src/backend/utils/cache/syscache.c @@ -96,8 +96,8 @@ There must be a unique index underlying each syscache (ie, an index whose key is the same as that of the cache). If there is not one - already, add definitions for it to include/catalog/pg_*.h: you need - to add a DECLARE_UNIQUE_INDEX macro and a #define for the index OID. + already, add the definition for it to include/catalog/pg_*.h using + DECLARE_UNIQUE_INDEX. (Adding an index requires a catversion.h update, while simply adding/deleting caches only requires a recompile.) diff --git a/src/include/catalog/genbki.h b/src/include/catalog/genbki.h index b1fee54d3c290..0b373ccac7351 100644 --- a/src/include/catalog/genbki.h +++ b/src/include/catalog/genbki.h @@ -76,9 +76,9 @@ * * The macro definitions are just to keep the C compiler from spitting up. */ -#define DECLARE_INDEX(name,oid,decl) extern int no_such_variable -#define DECLARE_UNIQUE_INDEX(name,oid,decl) extern int no_such_variable -#define DECLARE_UNIQUE_INDEX_PKEY(name,oid,decl) extern int no_such_variable +#define DECLARE_INDEX(name,oid,oidmacro,decl) extern int no_such_variable +#define DECLARE_UNIQUE_INDEX(name,oid,oidmacro,decl) extern int no_such_variable +#define DECLARE_UNIQUE_INDEX_PKEY(name,oid,oidmacro,decl) extern int no_such_variable /* * These lines are processed by genbki.pl to create a table for use diff --git a/src/include/catalog/pg_aggregate.h b/src/include/catalog/pg_aggregate.h index 25feb41678ff0..08c9379ba778e 100644 --- a/src/include/catalog/pg_aggregate.h +++ b/src/include/catalog/pg_aggregate.h @@ -110,8 +110,7 @@ typedef FormData_pg_aggregate *Form_pg_aggregate; DECLARE_TOAST(pg_aggregate, 4159, 4160); -DECLARE_UNIQUE_INDEX_PKEY(pg_aggregate_fnoid_index, 2650, on pg_aggregate using btree(aggfnoid oid_ops)); -#define AggregateFnoidIndexId 2650 +DECLARE_UNIQUE_INDEX_PKEY(pg_aggregate_fnoid_index, 2650, AggregateFnoidIndexId, on pg_aggregate using btree(aggfnoid oid_ops)); #ifdef EXPOSE_TO_CLIENT_CODE diff --git a/src/include/catalog/pg_am.h b/src/include/catalog/pg_am.h index ced86faef8494..62559feb5ceb9 100644 --- a/src/include/catalog/pg_am.h +++ b/src/include/catalog/pg_am.h @@ -47,10 +47,8 @@ CATALOG(pg_am,2601,AccessMethodRelationId) */ typedef FormData_pg_am *Form_pg_am; -DECLARE_UNIQUE_INDEX(pg_am_name_index, 2651, on pg_am using btree(amname name_ops)); -#define AmNameIndexId 2651 -DECLARE_UNIQUE_INDEX_PKEY(pg_am_oid_index, 2652, on pg_am using btree(oid oid_ops)); -#define AmOidIndexId 2652 +DECLARE_UNIQUE_INDEX(pg_am_name_index, 2651, AmNameIndexId, on pg_am using btree(amname name_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_am_oid_index, 2652, AmOidIndexId, on pg_am using btree(oid oid_ops)); #ifdef EXPOSE_TO_CLIENT_CODE diff --git a/src/include/catalog/pg_amop.h b/src/include/catalog/pg_amop.h index e1cca35e312a3..126ec10c2c14d 100644 --- a/src/include/catalog/pg_amop.h +++ b/src/include/catalog/pg_amop.h @@ -87,12 +87,9 @@ CATALOG(pg_amop,2602,AccessMethodOperatorRelationId) */ typedef FormData_pg_amop *Form_pg_amop; -DECLARE_UNIQUE_INDEX(pg_amop_fam_strat_index, 2653, on pg_amop using btree(amopfamily oid_ops, amoplefttype oid_ops, amoprighttype oid_ops, amopstrategy int2_ops)); -#define AccessMethodStrategyIndexId 2653 -DECLARE_UNIQUE_INDEX(pg_amop_opr_fam_index, 2654, on pg_amop using btree(amopopr oid_ops, amoppurpose char_ops, amopfamily oid_ops)); -#define AccessMethodOperatorIndexId 2654 -DECLARE_UNIQUE_INDEX_PKEY(pg_amop_oid_index, 2756, on pg_amop using btree(oid oid_ops)); -#define AccessMethodOperatorOidIndexId 2756 +DECLARE_UNIQUE_INDEX(pg_amop_fam_strat_index, 2653, AccessMethodStrategyIndexId, on pg_amop using btree(amopfamily oid_ops, amoplefttype oid_ops, amoprighttype oid_ops, amopstrategy int2_ops)); +DECLARE_UNIQUE_INDEX(pg_amop_opr_fam_index, 2654, AccessMethodOperatorIndexId, on pg_amop using btree(amopopr oid_ops, amoppurpose char_ops, amopfamily oid_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_amop_oid_index, 2756, AccessMethodOperatorOidIndexId, on pg_amop using btree(oid oid_ops)); #ifdef EXPOSE_TO_CLIENT_CODE diff --git a/src/include/catalog/pg_amproc.h b/src/include/catalog/pg_amproc.h index 8a727c359a4e7..824a312b56d33 100644 --- a/src/include/catalog/pg_amproc.h +++ b/src/include/catalog/pg_amproc.h @@ -67,9 +67,7 @@ CATALOG(pg_amproc,2603,AccessMethodProcedureRelationId) */ typedef FormData_pg_amproc *Form_pg_amproc; -DECLARE_UNIQUE_INDEX(pg_amproc_fam_proc_index, 2655, on pg_amproc using btree(amprocfamily oid_ops, amproclefttype oid_ops, amprocrighttype oid_ops, amprocnum int2_ops)); -#define AccessMethodProcedureIndexId 2655 -DECLARE_UNIQUE_INDEX_PKEY(pg_amproc_oid_index, 2757, on pg_amproc using btree(oid oid_ops)); -#define AccessMethodProcedureOidIndexId 2757 +DECLARE_UNIQUE_INDEX(pg_amproc_fam_proc_index, 2655, AccessMethodProcedureIndexId, on pg_amproc using btree(amprocfamily oid_ops, amproclefttype oid_ops, amprocrighttype oid_ops, amprocnum int2_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_amproc_oid_index, 2757, AccessMethodProcedureOidIndexId, on pg_amproc using btree(oid oid_ops)); #endif /* PG_AMPROC_H */ diff --git a/src/include/catalog/pg_attrdef.h b/src/include/catalog/pg_attrdef.h index d689ca20c8590..0bcf2b7d33f80 100644 --- a/src/include/catalog/pg_attrdef.h +++ b/src/include/catalog/pg_attrdef.h @@ -49,10 +49,8 @@ typedef FormData_pg_attrdef *Form_pg_attrdef; DECLARE_TOAST(pg_attrdef, 2830, 2831); -DECLARE_UNIQUE_INDEX(pg_attrdef_adrelid_adnum_index, 2656, on pg_attrdef using btree(adrelid oid_ops, adnum int2_ops)); -#define AttrDefaultIndexId 2656 -DECLARE_UNIQUE_INDEX_PKEY(pg_attrdef_oid_index, 2657, on pg_attrdef using btree(oid oid_ops)); -#define AttrDefaultOidIndexId 2657 +DECLARE_UNIQUE_INDEX(pg_attrdef_adrelid_adnum_index, 2656, AttrDefaultIndexId, on pg_attrdef using btree(adrelid oid_ops, adnum int2_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_attrdef_oid_index, 2657, AttrDefaultOidIndexId, on pg_attrdef using btree(oid oid_ops)); DECLARE_FOREIGN_KEY((adrelid, adnum), pg_attribute, (attrelid, attnum)); diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h index 603392fe81b04..5c1ec9313ed14 100644 --- a/src/include/catalog/pg_attribute.h +++ b/src/include/catalog/pg_attribute.h @@ -206,10 +206,8 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, */ typedef FormData_pg_attribute *Form_pg_attribute; -DECLARE_UNIQUE_INDEX(pg_attribute_relid_attnam_index, 2658, on pg_attribute using btree(attrelid oid_ops, attname name_ops)); -#define AttributeRelidNameIndexId 2658 -DECLARE_UNIQUE_INDEX_PKEY(pg_attribute_relid_attnum_index, 2659, on pg_attribute using btree(attrelid oid_ops, attnum int2_ops)); -#define AttributeRelidNumIndexId 2659 +DECLARE_UNIQUE_INDEX(pg_attribute_relid_attnam_index, 2658, AttributeRelidNameIndexId, on pg_attribute using btree(attrelid oid_ops, attname name_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_attribute_relid_attnum_index, 2659, AttributeRelidNumIndexId, on pg_attribute using btree(attrelid oid_ops, attnum int2_ops)); #ifdef EXPOSE_TO_CLIENT_CODE diff --git a/src/include/catalog/pg_auth_members.h b/src/include/catalog/pg_auth_members.h index 76ab90c9395b3..b9d3ffd1c586e 100644 --- a/src/include/catalog/pg_auth_members.h +++ b/src/include/catalog/pg_auth_members.h @@ -42,9 +42,7 @@ CATALOG(pg_auth_members,1261,AuthMemRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_ */ typedef FormData_pg_auth_members *Form_pg_auth_members; -DECLARE_UNIQUE_INDEX_PKEY(pg_auth_members_role_member_index, 2694, on pg_auth_members using btree(roleid oid_ops, member oid_ops)); -#define AuthMemRoleMemIndexId 2694 -DECLARE_UNIQUE_INDEX(pg_auth_members_member_role_index, 2695, on pg_auth_members using btree(member oid_ops, roleid oid_ops)); -#define AuthMemMemRoleIndexId 2695 +DECLARE_UNIQUE_INDEX_PKEY(pg_auth_members_role_member_index, 2694, AuthMemRoleMemIndexId, on pg_auth_members using btree(roleid oid_ops, member oid_ops)); +DECLARE_UNIQUE_INDEX(pg_auth_members_member_role_index, 2695, AuthMemMemRoleIndexId, on pg_auth_members using btree(member oid_ops, roleid oid_ops)); #endif /* PG_AUTH_MEMBERS_H */ diff --git a/src/include/catalog/pg_authid.h b/src/include/catalog/pg_authid.h index 609bd7fcbcc3c..2d7115e31df77 100644 --- a/src/include/catalog/pg_authid.h +++ b/src/include/catalog/pg_authid.h @@ -59,9 +59,7 @@ DECLARE_TOAST(pg_authid, 4175, 4176); #define PgAuthidToastTable 4175 #define PgAuthidToastIndex 4176 -DECLARE_UNIQUE_INDEX(pg_authid_rolname_index, 2676, on pg_authid using btree(rolname name_ops)); -#define AuthIdRolnameIndexId 2676 -DECLARE_UNIQUE_INDEX_PKEY(pg_authid_oid_index, 2677, on pg_authid using btree(oid oid_ops)); -#define AuthIdOidIndexId 2677 +DECLARE_UNIQUE_INDEX(pg_authid_rolname_index, 2676, AuthIdRolnameIndexId, on pg_authid using btree(rolname name_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_authid_oid_index, 2677, AuthIdOidIndexId, on pg_authid using btree(oid oid_ops)); #endif /* PG_AUTHID_H */ diff --git a/src/include/catalog/pg_cast.h b/src/include/catalog/pg_cast.h index f64a9df54ce3a..c1a84070e4196 100644 --- a/src/include/catalog/pg_cast.h +++ b/src/include/catalog/pg_cast.h @@ -56,10 +56,8 @@ CATALOG(pg_cast,2605,CastRelationId) */ typedef FormData_pg_cast *Form_pg_cast; -DECLARE_UNIQUE_INDEX_PKEY(pg_cast_oid_index, 2660, on pg_cast using btree(oid oid_ops)); -#define CastOidIndexId 2660 -DECLARE_UNIQUE_INDEX(pg_cast_source_target_index, 2661, on pg_cast using btree(castsource oid_ops, casttarget oid_ops)); -#define CastSourceTargetIndexId 2661 +DECLARE_UNIQUE_INDEX_PKEY(pg_cast_oid_index, 2660, CastOidIndexId, on pg_cast using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_cast_source_target_index, 2661, CastSourceTargetIndexId, on pg_cast using btree(castsource oid_ops, casttarget oid_ops)); #ifdef EXPOSE_TO_CLIENT_CODE diff --git a/src/include/catalog/pg_class.h b/src/include/catalog/pg_class.h index 3e377294361ca..3458d9560617c 100644 --- a/src/include/catalog/pg_class.h +++ b/src/include/catalog/pg_class.h @@ -152,12 +152,9 @@ CATALOG(pg_class,1259,RelationRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83,Relat */ typedef FormData_pg_class *Form_pg_class; -DECLARE_UNIQUE_INDEX_PKEY(pg_class_oid_index, 2662, on pg_class using btree(oid oid_ops)); -#define ClassOidIndexId 2662 -DECLARE_UNIQUE_INDEX(pg_class_relname_nsp_index, 2663, on pg_class using btree(relname name_ops, relnamespace oid_ops)); -#define ClassNameNspIndexId 2663 -DECLARE_INDEX(pg_class_tblspc_relfilenode_index, 3455, on pg_class using btree(reltablespace oid_ops, relfilenode oid_ops)); -#define ClassTblspcRelfilenodeIndexId 3455 +DECLARE_UNIQUE_INDEX_PKEY(pg_class_oid_index, 2662, ClassOidIndexId, on pg_class using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_class_relname_nsp_index, 2663, ClassNameNspIndexId, on pg_class using btree(relname name_ops, relnamespace oid_ops)); +DECLARE_INDEX(pg_class_tblspc_relfilenode_index, 3455, ClassTblspcRelfilenodeIndexId, on pg_class using btree(reltablespace oid_ops, relfilenode oid_ops)); #ifdef EXPOSE_TO_CLIENT_CODE diff --git a/src/include/catalog/pg_collation.h b/src/include/catalog/pg_collation.h index 6adbeab690bd1..03bd4cb5d4015 100644 --- a/src/include/catalog/pg_collation.h +++ b/src/include/catalog/pg_collation.h @@ -57,10 +57,8 @@ typedef FormData_pg_collation *Form_pg_collation; DECLARE_TOAST(pg_collation, 6175, 6176); -DECLARE_UNIQUE_INDEX(pg_collation_name_enc_nsp_index, 3164, on pg_collation using btree(collname name_ops, collencoding int4_ops, collnamespace oid_ops)); -#define CollationNameEncNspIndexId 3164 -DECLARE_UNIQUE_INDEX_PKEY(pg_collation_oid_index, 3085, on pg_collation using btree(oid oid_ops)); -#define CollationOidIndexId 3085 +DECLARE_UNIQUE_INDEX(pg_collation_name_enc_nsp_index, 3164, CollationNameEncNspIndexId, on pg_collation using btree(collname name_ops, collencoding int4_ops, collnamespace oid_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_collation_oid_index, 3085, CollationOidIndexId, on pg_collation using btree(oid oid_ops)); #ifdef EXPOSE_TO_CLIENT_CODE diff --git a/src/include/catalog/pg_constraint.h b/src/include/catalog/pg_constraint.h index 63f0f8bf41852..e75baa8e1ed1c 100644 --- a/src/include/catalog/pg_constraint.h +++ b/src/include/catalog/pg_constraint.h @@ -160,16 +160,11 @@ typedef FormData_pg_constraint *Form_pg_constraint; DECLARE_TOAST(pg_constraint, 2832, 2833); -DECLARE_INDEX(pg_constraint_conname_nsp_index, 2664, on pg_constraint using btree(conname name_ops, connamespace oid_ops)); -#define ConstraintNameNspIndexId 2664 -DECLARE_UNIQUE_INDEX(pg_constraint_conrelid_contypid_conname_index, 2665, on pg_constraint using btree(conrelid oid_ops, contypid oid_ops, conname name_ops)); -#define ConstraintRelidTypidNameIndexId 2665 -DECLARE_INDEX(pg_constraint_contypid_index, 2666, on pg_constraint using btree(contypid oid_ops)); -#define ConstraintTypidIndexId 2666 -DECLARE_UNIQUE_INDEX_PKEY(pg_constraint_oid_index, 2667, on pg_constraint using btree(oid oid_ops)); -#define ConstraintOidIndexId 2667 -DECLARE_INDEX(pg_constraint_conparentid_index, 2579, on pg_constraint using btree(conparentid oid_ops)); -#define ConstraintParentIndexId 2579 +DECLARE_INDEX(pg_constraint_conname_nsp_index, 2664, ConstraintNameNspIndexId, on pg_constraint using btree(conname name_ops, connamespace oid_ops)); +DECLARE_UNIQUE_INDEX(pg_constraint_conrelid_contypid_conname_index, 2665, ConstraintRelidTypidNameIndexId, on pg_constraint using btree(conrelid oid_ops, contypid oid_ops, conname name_ops)); +DECLARE_INDEX(pg_constraint_contypid_index, 2666, ConstraintTypidIndexId, on pg_constraint using btree(contypid oid_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_constraint_oid_index, 2667, ConstraintOidIndexId, on pg_constraint using btree(oid oid_ops)); +DECLARE_INDEX(pg_constraint_conparentid_index, 2579, ConstraintParentIndexId, on pg_constraint using btree(conparentid oid_ops)); /* conkey can contain zero (InvalidAttrNumber) if a whole-row Var is used */ DECLARE_ARRAY_FOREIGN_KEY_OPT((conrelid, conkey), pg_attribute, (attrelid, attnum)); diff --git a/src/include/catalog/pg_conversion.h b/src/include/catalog/pg_conversion.h index ca556f6030f0d..5a2c32afacdb4 100644 --- a/src/include/catalog/pg_conversion.h +++ b/src/include/catalog/pg_conversion.h @@ -60,12 +60,9 @@ CATALOG(pg_conversion,2607,ConversionRelationId) */ typedef FormData_pg_conversion *Form_pg_conversion; -DECLARE_UNIQUE_INDEX(pg_conversion_default_index, 2668, on pg_conversion using btree(connamespace oid_ops, conforencoding int4_ops, contoencoding int4_ops, oid oid_ops)); -#define ConversionDefaultIndexId 2668 -DECLARE_UNIQUE_INDEX(pg_conversion_name_nsp_index, 2669, on pg_conversion using btree(conname name_ops, connamespace oid_ops)); -#define ConversionNameNspIndexId 2669 -DECLARE_UNIQUE_INDEX_PKEY(pg_conversion_oid_index, 2670, on pg_conversion using btree(oid oid_ops)); -#define ConversionOidIndexId 2670 +DECLARE_UNIQUE_INDEX(pg_conversion_default_index, 2668, ConversionDefaultIndexId, on pg_conversion using btree(connamespace oid_ops, conforencoding int4_ops, contoencoding int4_ops, oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_conversion_name_nsp_index, 2669, ConversionNameNspIndexId, on pg_conversion using btree(conname name_ops, connamespace oid_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_conversion_oid_index, 2670, ConversionOidIndexId, on pg_conversion using btree(oid oid_ops)); extern ObjectAddress ConversionCreate(const char *conname, Oid connamespace, diff --git a/src/include/catalog/pg_database.h b/src/include/catalog/pg_database.h index d3de45821c2f9..43f3beb6a33c6 100644 --- a/src/include/catalog/pg_database.h +++ b/src/include/catalog/pg_database.h @@ -84,9 +84,7 @@ DECLARE_TOAST(pg_database, 4177, 4178); #define PgDatabaseToastTable 4177 #define PgDatabaseToastIndex 4178 -DECLARE_UNIQUE_INDEX(pg_database_datname_index, 2671, on pg_database using btree(datname name_ops)); -#define DatabaseNameIndexId 2671 -DECLARE_UNIQUE_INDEX_PKEY(pg_database_oid_index, 2672, on pg_database using btree(oid oid_ops)); -#define DatabaseOidIndexId 2672 +DECLARE_UNIQUE_INDEX(pg_database_datname_index, 2671, DatabaseNameIndexId, on pg_database using btree(datname name_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_database_oid_index, 2672, DatabaseOidIndexId, on pg_database using btree(oid oid_ops)); #endif /* PG_DATABASE_H */ diff --git a/src/include/catalog/pg_db_role_setting.h b/src/include/catalog/pg_db_role_setting.h index 705f698ae79fb..ecf03a954fc74 100644 --- a/src/include/catalog/pg_db_role_setting.h +++ b/src/include/catalog/pg_db_role_setting.h @@ -50,8 +50,7 @@ DECLARE_TOAST(pg_db_role_setting, 2966, 2967); #define PgDbRoleSettingToastTable 2966 #define PgDbRoleSettingToastIndex 2967 -DECLARE_UNIQUE_INDEX_PKEY(pg_db_role_setting_databaseid_rol_index, 2965, on pg_db_role_setting using btree(setdatabase oid_ops, setrole oid_ops)); -#define DbRoleSettingDatidRolidIndexId 2965 +DECLARE_UNIQUE_INDEX_PKEY(pg_db_role_setting_databaseid_rol_index, 2965, DbRoleSettingDatidRolidIndexId, on pg_db_role_setting using btree(setdatabase oid_ops, setrole oid_ops)); /* * prototypes for functions in pg_db_role_setting.h diff --git a/src/include/catalog/pg_default_acl.h b/src/include/catalog/pg_default_acl.h index 156fc0712da74..eb72dd629389d 100644 --- a/src/include/catalog/pg_default_acl.h +++ b/src/include/catalog/pg_default_acl.h @@ -51,10 +51,8 @@ typedef FormData_pg_default_acl *Form_pg_default_acl; DECLARE_TOAST(pg_default_acl, 4143, 4144); -DECLARE_UNIQUE_INDEX(pg_default_acl_role_nsp_obj_index, 827, on pg_default_acl using btree(defaclrole oid_ops, defaclnamespace oid_ops, defaclobjtype char_ops)); -#define DefaultAclRoleNspObjIndexId 827 -DECLARE_UNIQUE_INDEX_PKEY(pg_default_acl_oid_index, 828, on pg_default_acl using btree(oid oid_ops)); -#define DefaultAclOidIndexId 828 +DECLARE_UNIQUE_INDEX(pg_default_acl_role_nsp_obj_index, 827, DefaultAclRoleNspObjIndexId, on pg_default_acl using btree(defaclrole oid_ops, defaclnamespace oid_ops, defaclobjtype char_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_default_acl_oid_index, 828, DefaultAclOidIndexId, on pg_default_acl using btree(oid oid_ops)); #ifdef EXPOSE_TO_CLIENT_CODE diff --git a/src/include/catalog/pg_depend.h b/src/include/catalog/pg_depend.h index e0bc1141457e3..f41ae3add12a6 100644 --- a/src/include/catalog/pg_depend.h +++ b/src/include/catalog/pg_depend.h @@ -72,9 +72,7 @@ CATALOG(pg_depend,2608,DependRelationId) */ typedef FormData_pg_depend *Form_pg_depend; -DECLARE_INDEX(pg_depend_depender_index, 2673, on pg_depend using btree(classid oid_ops, objid oid_ops, objsubid int4_ops)); -#define DependDependerIndexId 2673 -DECLARE_INDEX(pg_depend_reference_index, 2674, on pg_depend using btree(refclassid oid_ops, refobjid oid_ops, refobjsubid int4_ops)); -#define DependReferenceIndexId 2674 +DECLARE_INDEX(pg_depend_depender_index, 2673, DependDependerIndexId, on pg_depend using btree(classid oid_ops, objid oid_ops, objsubid int4_ops)); +DECLARE_INDEX(pg_depend_reference_index, 2674, DependReferenceIndexId, on pg_depend using btree(refclassid oid_ops, refobjid oid_ops, refobjsubid int4_ops)); #endif /* PG_DEPEND_H */ diff --git a/src/include/catalog/pg_description.h b/src/include/catalog/pg_description.h index adc06a854d9a5..69dee00e81c86 100644 --- a/src/include/catalog/pg_description.h +++ b/src/include/catalog/pg_description.h @@ -65,8 +65,7 @@ typedef FormData_pg_description * Form_pg_description; DECLARE_TOAST(pg_description, 2834, 2835); -DECLARE_UNIQUE_INDEX_PKEY(pg_description_o_c_o_index, 2675, on pg_description using btree(objoid oid_ops, classoid oid_ops, objsubid int4_ops)); -#define DescriptionObjIndexId 2675 +DECLARE_UNIQUE_INDEX_PKEY(pg_description_o_c_o_index, 2675, DescriptionObjIndexId, on pg_description using btree(objoid oid_ops, classoid oid_ops, objsubid int4_ops)); /* We do not use BKI_LOOKUP here because it causes problems for genbki.pl */ DECLARE_FOREIGN_KEY((classoid), pg_class, (oid)); diff --git a/src/include/catalog/pg_enum.h b/src/include/catalog/pg_enum.h index 78a183b27d4bc..3a4cdf5f04cb4 100644 --- a/src/include/catalog/pg_enum.h +++ b/src/include/catalog/pg_enum.h @@ -43,12 +43,9 @@ CATALOG(pg_enum,3501,EnumRelationId) */ typedef FormData_pg_enum *Form_pg_enum; -DECLARE_UNIQUE_INDEX_PKEY(pg_enum_oid_index, 3502, on pg_enum using btree(oid oid_ops)); -#define EnumOidIndexId 3502 -DECLARE_UNIQUE_INDEX(pg_enum_typid_label_index, 3503, on pg_enum using btree(enumtypid oid_ops, enumlabel name_ops)); -#define EnumTypIdLabelIndexId 3503 -DECLARE_UNIQUE_INDEX(pg_enum_typid_sortorder_index, 3534, on pg_enum using btree(enumtypid oid_ops, enumsortorder float4_ops)); -#define EnumTypIdSortOrderIndexId 3534 +DECLARE_UNIQUE_INDEX_PKEY(pg_enum_oid_index, 3502, EnumOidIndexId, on pg_enum using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_enum_typid_label_index, 3503, EnumTypIdLabelIndexId, on pg_enum using btree(enumtypid oid_ops, enumlabel name_ops)); +DECLARE_UNIQUE_INDEX(pg_enum_typid_sortorder_index, 3534, EnumTypIdSortOrderIndexId, on pg_enum using btree(enumtypid oid_ops, enumsortorder float4_ops)); /* * prototypes for functions in pg_enum.c diff --git a/src/include/catalog/pg_event_trigger.h b/src/include/catalog/pg_event_trigger.h index eeaa6be518447..72ca4bc53ad57 100644 --- a/src/include/catalog/pg_event_trigger.h +++ b/src/include/catalog/pg_event_trigger.h @@ -51,9 +51,7 @@ typedef FormData_pg_event_trigger *Form_pg_event_trigger; DECLARE_TOAST(pg_event_trigger, 4145, 4146); -DECLARE_UNIQUE_INDEX(pg_event_trigger_evtname_index, 3467, on pg_event_trigger using btree(evtname name_ops)); -#define EventTriggerNameIndexId 3467 -DECLARE_UNIQUE_INDEX_PKEY(pg_event_trigger_oid_index, 3468, on pg_event_trigger using btree(oid oid_ops)); -#define EventTriggerOidIndexId 3468 +DECLARE_UNIQUE_INDEX(pg_event_trigger_evtname_index, 3467, EventTriggerNameIndexId, on pg_event_trigger using btree(evtname name_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_event_trigger_oid_index, 3468, EventTriggerOidIndexId, on pg_event_trigger using btree(oid oid_ops)); #endif /* PG_EVENT_TRIGGER_H */ diff --git a/src/include/catalog/pg_extension.h b/src/include/catalog/pg_extension.h index 2d6ad9fa88881..4ef4b556da2f5 100644 --- a/src/include/catalog/pg_extension.h +++ b/src/include/catalog/pg_extension.h @@ -53,9 +53,7 @@ typedef FormData_pg_extension *Form_pg_extension; DECLARE_TOAST(pg_extension, 4147, 4148); -DECLARE_UNIQUE_INDEX_PKEY(pg_extension_oid_index, 3080, on pg_extension using btree(oid oid_ops)); -#define ExtensionOidIndexId 3080 -DECLARE_UNIQUE_INDEX(pg_extension_name_index, 3081, on pg_extension using btree(extname name_ops)); -#define ExtensionNameIndexId 3081 +DECLARE_UNIQUE_INDEX_PKEY(pg_extension_oid_index, 3080, ExtensionOidIndexId, on pg_extension using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_extension_name_index, 3081, ExtensionNameIndexId, on pg_extension using btree(extname name_ops)); #endif /* PG_EXTENSION_H */ diff --git a/src/include/catalog/pg_foreign_data_wrapper.h b/src/include/catalog/pg_foreign_data_wrapper.h index f6240d9eb326b..a1b950bcdcc90 100644 --- a/src/include/catalog/pg_foreign_data_wrapper.h +++ b/src/include/catalog/pg_foreign_data_wrapper.h @@ -52,9 +52,7 @@ typedef FormData_pg_foreign_data_wrapper *Form_pg_foreign_data_wrapper; DECLARE_TOAST(pg_foreign_data_wrapper, 4149, 4150); -DECLARE_UNIQUE_INDEX_PKEY(pg_foreign_data_wrapper_oid_index, 112, on pg_foreign_data_wrapper using btree(oid oid_ops)); -#define ForeignDataWrapperOidIndexId 112 -DECLARE_UNIQUE_INDEX(pg_foreign_data_wrapper_name_index, 548, on pg_foreign_data_wrapper using btree(fdwname name_ops)); -#define ForeignDataWrapperNameIndexId 548 +DECLARE_UNIQUE_INDEX_PKEY(pg_foreign_data_wrapper_oid_index, 112, ForeignDataWrapperOidIndexId, on pg_foreign_data_wrapper using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_foreign_data_wrapper_name_index, 548, ForeignDataWrapperNameIndexId, on pg_foreign_data_wrapper using btree(fdwname name_ops)); #endif /* PG_FOREIGN_DATA_WRAPPER_H */ diff --git a/src/include/catalog/pg_foreign_server.h b/src/include/catalog/pg_foreign_server.h index a173699aef6bc..200d172027c62 100644 --- a/src/include/catalog/pg_foreign_server.h +++ b/src/include/catalog/pg_foreign_server.h @@ -49,9 +49,7 @@ typedef FormData_pg_foreign_server *Form_pg_foreign_server; DECLARE_TOAST(pg_foreign_server, 4151, 4152); -DECLARE_UNIQUE_INDEX_PKEY(pg_foreign_server_oid_index, 113, on pg_foreign_server using btree(oid oid_ops)); -#define ForeignServerOidIndexId 113 -DECLARE_UNIQUE_INDEX(pg_foreign_server_name_index, 549, on pg_foreign_server using btree(srvname name_ops)); -#define ForeignServerNameIndexId 549 +DECLARE_UNIQUE_INDEX_PKEY(pg_foreign_server_oid_index, 113, ForeignServerOidIndexId, on pg_foreign_server using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_foreign_server_name_index, 549, ForeignServerNameIndexId, on pg_foreign_server using btree(srvname name_ops)); #endif /* PG_FOREIGN_SERVER_H */ diff --git a/src/include/catalog/pg_foreign_table.h b/src/include/catalog/pg_foreign_table.h index 3b6221b0e64b5..f14960c4fdd36 100644 --- a/src/include/catalog/pg_foreign_table.h +++ b/src/include/catalog/pg_foreign_table.h @@ -44,7 +44,6 @@ typedef FormData_pg_foreign_table *Form_pg_foreign_table; DECLARE_TOAST(pg_foreign_table, 4153, 4154); -DECLARE_UNIQUE_INDEX_PKEY(pg_foreign_table_relid_index, 3119, on pg_foreign_table using btree(ftrelid oid_ops)); -#define ForeignTableRelidIndexId 3119 +DECLARE_UNIQUE_INDEX_PKEY(pg_foreign_table_relid_index, 3119, ForeignTableRelidIndexId, on pg_foreign_table using btree(ftrelid oid_ops)); #endif /* PG_FOREIGN_TABLE_H */ diff --git a/src/include/catalog/pg_index.h b/src/include/catalog/pg_index.h index 00d0b439f5c94..a5a6075d4d705 100644 --- a/src/include/catalog/pg_index.h +++ b/src/include/catalog/pg_index.h @@ -68,10 +68,8 @@ CATALOG(pg_index,2610,IndexRelationId) BKI_SCHEMA_MACRO */ typedef FormData_pg_index *Form_pg_index; -DECLARE_INDEX(pg_index_indrelid_index, 2678, on pg_index using btree(indrelid oid_ops)); -#define IndexIndrelidIndexId 2678 -DECLARE_UNIQUE_INDEX_PKEY(pg_index_indexrelid_index, 2679, on pg_index using btree(indexrelid oid_ops)); -#define IndexRelidIndexId 2679 +DECLARE_INDEX(pg_index_indrelid_index, 2678, IndexIndrelidIndexId, on pg_index using btree(indrelid oid_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_index_indexrelid_index, 2679, IndexRelidIndexId, on pg_index using btree(indexrelid oid_ops)); /* indkey can contain zero (InvalidAttrNumber) to represent expressions */ DECLARE_ARRAY_FOREIGN_KEY_OPT((indrelid, indkey), pg_attribute, (attrelid, attnum)); diff --git a/src/include/catalog/pg_inherits.h b/src/include/catalog/pg_inherits.h index f47c0a8cd84f2..e0e6072be6dbf 100644 --- a/src/include/catalog/pg_inherits.h +++ b/src/include/catalog/pg_inherits.h @@ -44,10 +44,8 @@ CATALOG(pg_inherits,2611,InheritsRelationId) */ typedef FormData_pg_inherits *Form_pg_inherits; -DECLARE_UNIQUE_INDEX_PKEY(pg_inherits_relid_seqno_index, 2680, on pg_inherits using btree(inhrelid oid_ops, inhseqno int4_ops)); -#define InheritsRelidSeqnoIndexId 2680 -DECLARE_INDEX(pg_inherits_parent_index, 2187, on pg_inherits using btree(inhparent oid_ops)); -#define InheritsParentIndexId 2187 +DECLARE_UNIQUE_INDEX_PKEY(pg_inherits_relid_seqno_index, 2680, InheritsRelidSeqnoIndexId, on pg_inherits using btree(inhrelid oid_ops, inhseqno int4_ops)); +DECLARE_INDEX(pg_inherits_parent_index, 2187, InheritsParentIndexId, on pg_inherits using btree(inhparent oid_ops)); extern List *find_inheritance_children(Oid parentrelId, LOCKMODE lockmode); diff --git a/src/include/catalog/pg_init_privs.h b/src/include/catalog/pg_init_privs.h index 4aafeb246d7e1..9790dcf285c82 100644 --- a/src/include/catalog/pg_init_privs.h +++ b/src/include/catalog/pg_init_privs.h @@ -65,8 +65,7 @@ typedef FormData_pg_init_privs * Form_pg_init_privs; DECLARE_TOAST(pg_init_privs, 4155, 4156); -DECLARE_UNIQUE_INDEX_PKEY(pg_init_privs_o_c_o_index, 3395, on pg_init_privs using btree(objoid oid_ops, classoid oid_ops, objsubid int4_ops)); -#define InitPrivsObjIndexId 3395 +DECLARE_UNIQUE_INDEX_PKEY(pg_init_privs_o_c_o_index, 3395, InitPrivsObjIndexId, on pg_init_privs using btree(objoid oid_ops, classoid oid_ops, objsubid int4_ops)); /* * It is important to know if the initial privileges are from initdb or from an diff --git a/src/include/catalog/pg_language.h b/src/include/catalog/pg_language.h index 3e56597ece7f1..d447d6ba9de6c 100644 --- a/src/include/catalog/pg_language.h +++ b/src/include/catalog/pg_language.h @@ -66,9 +66,7 @@ typedef FormData_pg_language *Form_pg_language; DECLARE_TOAST(pg_language, 4157, 4158); -DECLARE_UNIQUE_INDEX(pg_language_name_index, 2681, on pg_language using btree(lanname name_ops)); -#define LanguageNameIndexId 2681 -DECLARE_UNIQUE_INDEX_PKEY(pg_language_oid_index, 2682, on pg_language using btree(oid oid_ops)); -#define LanguageOidIndexId 2682 +DECLARE_UNIQUE_INDEX(pg_language_name_index, 2681, LanguageNameIndexId, on pg_language using btree(lanname name_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_language_oid_index, 2682, LanguageOidIndexId, on pg_language using btree(oid oid_ops)); #endif /* PG_LANGUAGE_H */ diff --git a/src/include/catalog/pg_largeobject.h b/src/include/catalog/pg_largeobject.h index 32225f4de7d37..ee1036e6f7579 100644 --- a/src/include/catalog/pg_largeobject.h +++ b/src/include/catalog/pg_largeobject.h @@ -44,8 +44,7 @@ CATALOG(pg_largeobject,2613,LargeObjectRelationId) */ typedef FormData_pg_largeobject *Form_pg_largeobject; -DECLARE_UNIQUE_INDEX_PKEY(pg_largeobject_loid_pn_index, 2683, on pg_largeobject using btree(loid oid_ops, pageno int4_ops)); -#define LargeObjectLOidPNIndexId 2683 +DECLARE_UNIQUE_INDEX_PKEY(pg_largeobject_loid_pn_index, 2683, LargeObjectLOidPNIndexId, on pg_largeobject using btree(loid oid_ops, pageno int4_ops)); extern Oid LargeObjectCreate(Oid loid); extern void LargeObjectDrop(Oid loid); diff --git a/src/include/catalog/pg_largeobject_metadata.h b/src/include/catalog/pg_largeobject_metadata.h index 9b689bab849bd..6c124ce10dce6 100644 --- a/src/include/catalog/pg_largeobject_metadata.h +++ b/src/include/catalog/pg_largeobject_metadata.h @@ -46,7 +46,6 @@ CATALOG(pg_largeobject_metadata,2995,LargeObjectMetadataRelationId) */ typedef FormData_pg_largeobject_metadata *Form_pg_largeobject_metadata; -DECLARE_UNIQUE_INDEX_PKEY(pg_largeobject_metadata_oid_index, 2996, on pg_largeobject_metadata using btree(oid oid_ops)); -#define LargeObjectMetadataOidIndexId 2996 +DECLARE_UNIQUE_INDEX_PKEY(pg_largeobject_metadata_oid_index, 2996, LargeObjectMetadataOidIndexId, on pg_largeobject_metadata using btree(oid oid_ops)); #endif /* PG_LARGEOBJECT_METADATA_H */ diff --git a/src/include/catalog/pg_namespace.h b/src/include/catalog/pg_namespace.h index fe87a947ee792..4cd2af097c32e 100644 --- a/src/include/catalog/pg_namespace.h +++ b/src/include/catalog/pg_namespace.h @@ -53,10 +53,8 @@ typedef FormData_pg_namespace *Form_pg_namespace; DECLARE_TOAST(pg_namespace, 4163, 4164); -DECLARE_UNIQUE_INDEX(pg_namespace_nspname_index, 2684, on pg_namespace using btree(nspname name_ops)); -#define NamespaceNameIndexId 2684 -DECLARE_UNIQUE_INDEX_PKEY(pg_namespace_oid_index, 2685, on pg_namespace using btree(oid oid_ops)); -#define NamespaceOidIndexId 2685 +DECLARE_UNIQUE_INDEX(pg_namespace_nspname_index, 2684, NamespaceNameIndexId, on pg_namespace using btree(nspname name_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_namespace_oid_index, 2685, NamespaceOidIndexId, on pg_namespace using btree(oid oid_ops)); /* * prototypes for functions in pg_namespace.c diff --git a/src/include/catalog/pg_opclass.h b/src/include/catalog/pg_opclass.h index 7b2cf259208ad..712f76dfc7cff 100644 --- a/src/include/catalog/pg_opclass.h +++ b/src/include/catalog/pg_opclass.h @@ -82,9 +82,7 @@ CATALOG(pg_opclass,2616,OperatorClassRelationId) */ typedef FormData_pg_opclass *Form_pg_opclass; -DECLARE_UNIQUE_INDEX(pg_opclass_am_name_nsp_index, 2686, on pg_opclass using btree(opcmethod oid_ops, opcname name_ops, opcnamespace oid_ops)); -#define OpclassAmNameNspIndexId 2686 -DECLARE_UNIQUE_INDEX_PKEY(pg_opclass_oid_index, 2687, on pg_opclass using btree(oid oid_ops)); -#define OpclassOidIndexId 2687 +DECLARE_UNIQUE_INDEX(pg_opclass_am_name_nsp_index, 2686, OpclassAmNameNspIndexId, on pg_opclass using btree(opcmethod oid_ops, opcname name_ops, opcnamespace oid_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_opclass_oid_index, 2687, OpclassOidIndexId, on pg_opclass using btree(oid oid_ops)); #endif /* PG_OPCLASS_H */ diff --git a/src/include/catalog/pg_operator.h b/src/include/catalog/pg_operator.h index d32fcdc64e6f9..ac6755746c67f 100644 --- a/src/include/catalog/pg_operator.h +++ b/src/include/catalog/pg_operator.h @@ -82,10 +82,8 @@ CATALOG(pg_operator,2617,OperatorRelationId) */ typedef FormData_pg_operator *Form_pg_operator; -DECLARE_UNIQUE_INDEX_PKEY(pg_operator_oid_index, 2688, on pg_operator using btree(oid oid_ops)); -#define OperatorOidIndexId 2688 -DECLARE_UNIQUE_INDEX(pg_operator_oprname_l_r_n_index, 2689, on pg_operator using btree(oprname name_ops, oprleft oid_ops, oprright oid_ops, oprnamespace oid_ops)); -#define OperatorNameNspIndexId 2689 +DECLARE_UNIQUE_INDEX_PKEY(pg_operator_oid_index, 2688, OperatorOidIndexId, on pg_operator using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_operator_oprname_l_r_n_index, 2689, OperatorNameNspIndexId, on pg_operator using btree(oprname name_ops, oprleft oid_ops, oprright oid_ops, oprnamespace oid_ops)); extern ObjectAddress OperatorCreate(const char *operatorName, diff --git a/src/include/catalog/pg_opfamily.h b/src/include/catalog/pg_opfamily.h index 129102b57679d..29ea00c350487 100644 --- a/src/include/catalog/pg_opfamily.h +++ b/src/include/catalog/pg_opfamily.h @@ -50,10 +50,8 @@ CATALOG(pg_opfamily,2753,OperatorFamilyRelationId) */ typedef FormData_pg_opfamily *Form_pg_opfamily; -DECLARE_UNIQUE_INDEX(pg_opfamily_am_name_nsp_index, 2754, on pg_opfamily using btree(opfmethod oid_ops, opfname name_ops, opfnamespace oid_ops)); -#define OpfamilyAmNameNspIndexId 2754 -DECLARE_UNIQUE_INDEX_PKEY(pg_opfamily_oid_index, 2755, on pg_opfamily using btree(oid oid_ops)); -#define OpfamilyOidIndexId 2755 +DECLARE_UNIQUE_INDEX(pg_opfamily_am_name_nsp_index, 2754, OpfamilyAmNameNspIndexId, on pg_opfamily using btree(opfmethod oid_ops, opfname name_ops, opfnamespace oid_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_opfamily_oid_index, 2755, OpfamilyOidIndexId, on pg_opfamily using btree(oid oid_ops)); #ifdef EXPOSE_TO_CLIENT_CODE diff --git a/src/include/catalog/pg_partitioned_table.h b/src/include/catalog/pg_partitioned_table.h index 48cbaf30ff8ef..01ee69f75d48f 100644 --- a/src/include/catalog/pg_partitioned_table.h +++ b/src/include/catalog/pg_partitioned_table.h @@ -66,8 +66,7 @@ typedef FormData_pg_partitioned_table *Form_pg_partitioned_table; DECLARE_TOAST(pg_partitioned_table, 4165, 4166); -DECLARE_UNIQUE_INDEX_PKEY(pg_partitioned_table_partrelid_index, 3351, on pg_partitioned_table using btree(partrelid oid_ops)); -#define PartitionedRelidIndexId 3351 +DECLARE_UNIQUE_INDEX_PKEY(pg_partitioned_table_partrelid_index, 3351, PartitionedRelidIndexId, on pg_partitioned_table using btree(partrelid oid_ops)); /* partattrs can contain zero (InvalidAttrNumber) to represent expressions */ DECLARE_ARRAY_FOREIGN_KEY_OPT((partrelid, partattrs), pg_attribute, (attrelid, attnum)); diff --git a/src/include/catalog/pg_policy.h b/src/include/catalog/pg_policy.h index 645b8fe498c54..d3d39ef752266 100644 --- a/src/include/catalog/pg_policy.h +++ b/src/include/catalog/pg_policy.h @@ -52,9 +52,7 @@ typedef FormData_pg_policy *Form_pg_policy; DECLARE_TOAST(pg_policy, 4167, 4168); -DECLARE_UNIQUE_INDEX_PKEY(pg_policy_oid_index, 3257, on pg_policy using btree(oid oid_ops)); -#define PolicyOidIndexId 3257 -DECLARE_UNIQUE_INDEX(pg_policy_polrelid_polname_index, 3258, on pg_policy using btree(polrelid oid_ops, polname name_ops)); -#define PolicyPolrelidPolnameIndexId 3258 +DECLARE_UNIQUE_INDEX_PKEY(pg_policy_oid_index, 3257, PolicyOidIndexId, on pg_policy using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_policy_polrelid_polname_index, 3258, PolicyPolrelidPolnameIndexId, on pg_policy using btree(polrelid oid_ops, polname name_ops)); #endif /* PG_POLICY_H */ diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index a65afe7bc4b62..b33b8b0134108 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -137,10 +137,8 @@ typedef FormData_pg_proc *Form_pg_proc; DECLARE_TOAST(pg_proc, 2836, 2837); -DECLARE_UNIQUE_INDEX_PKEY(pg_proc_oid_index, 2690, on pg_proc using btree(oid oid_ops)); -#define ProcedureOidIndexId 2690 -DECLARE_UNIQUE_INDEX(pg_proc_proname_args_nsp_index, 2691, on pg_proc using btree(proname name_ops, proargtypes oidvector_ops, pronamespace oid_ops)); -#define ProcedureNameArgsNspIndexId 2691 +DECLARE_UNIQUE_INDEX_PKEY(pg_proc_oid_index, 2690, ProcedureOidIndexId, on pg_proc using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_proc_proname_args_nsp_index, 2691, ProcedureNameArgsNspIndexId, on pg_proc using btree(proname name_ops, proargtypes oidvector_ops, pronamespace oid_ops)); #ifdef EXPOSE_TO_CLIENT_CODE diff --git a/src/include/catalog/pg_publication.h b/src/include/catalog/pg_publication.h index 1b31fee9e3cfa..f332bad4d4104 100644 --- a/src/include/catalog/pg_publication.h +++ b/src/include/catalog/pg_publication.h @@ -63,10 +63,8 @@ CATALOG(pg_publication,6104,PublicationRelationId) */ typedef FormData_pg_publication *Form_pg_publication; -DECLARE_UNIQUE_INDEX_PKEY(pg_publication_oid_index, 6110, on pg_publication using btree(oid oid_ops)); -#define PublicationObjectIndexId 6110 -DECLARE_UNIQUE_INDEX(pg_publication_pubname_index, 6111, on pg_publication using btree(pubname name_ops)); -#define PublicationNameIndexId 6111 +DECLARE_UNIQUE_INDEX_PKEY(pg_publication_oid_index, 6110, PublicationObjectIndexId, on pg_publication using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_publication_pubname_index, 6111, PublicationNameIndexId, on pg_publication using btree(pubname name_ops)); typedef struct PublicationActions { diff --git a/src/include/catalog/pg_publication_rel.h b/src/include/catalog/pg_publication_rel.h index aecf53b3b3976..b5d5504cbb230 100644 --- a/src/include/catalog/pg_publication_rel.h +++ b/src/include/catalog/pg_publication_rel.h @@ -40,9 +40,7 @@ CATALOG(pg_publication_rel,6106,PublicationRelRelationId) */ typedef FormData_pg_publication_rel *Form_pg_publication_rel; -DECLARE_UNIQUE_INDEX_PKEY(pg_publication_rel_oid_index, 6112, on pg_publication_rel using btree(oid oid_ops)); -#define PublicationRelObjectIndexId 6112 -DECLARE_UNIQUE_INDEX(pg_publication_rel_prrelid_prpubid_index, 6113, on pg_publication_rel using btree(prrelid oid_ops, prpubid oid_ops)); -#define PublicationRelPrrelidPrpubidIndexId 6113 +DECLARE_UNIQUE_INDEX_PKEY(pg_publication_rel_oid_index, 6112, PublicationRelObjectIndexId, on pg_publication_rel using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_publication_rel_prrelid_prpubid_index, 6113, PublicationRelPrrelidPrpubidIndexId, on pg_publication_rel using btree(prrelid oid_ops, prpubid oid_ops)); #endif /* PG_PUBLICATION_REL_H */ diff --git a/src/include/catalog/pg_range.h b/src/include/catalog/pg_range.h index 5dfa4eef8baf9..cde29114ba547 100644 --- a/src/include/catalog/pg_range.h +++ b/src/include/catalog/pg_range.h @@ -57,12 +57,8 @@ CATALOG(pg_range,3541,RangeRelationId) */ typedef FormData_pg_range *Form_pg_range; -DECLARE_UNIQUE_INDEX_PKEY(pg_range_rngtypid_index, 3542, on pg_range using btree(rngtypid oid_ops)); -#define RangeTypidIndexId 3542 - -DECLARE_UNIQUE_INDEX(pg_range_rngmultitypid_index, 2228, on pg_range using btree(rngmultitypid oid_ops)); -#define RangeMultirangeTypidIndexId 2228 - +DECLARE_UNIQUE_INDEX_PKEY(pg_range_rngtypid_index, 3542, RangeTypidIndexId, on pg_range using btree(rngtypid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_range_rngmultitypid_index, 2228, RangeMultirangeTypidIndexId, on pg_range using btree(rngmultitypid oid_ops)); /* * prototypes for functions in pg_range.c diff --git a/src/include/catalog/pg_replication_origin.h b/src/include/catalog/pg_replication_origin.h index 184f2403ceb0f..8d9034ef3774b 100644 --- a/src/include/catalog/pg_replication_origin.h +++ b/src/include/catalog/pg_replication_origin.h @@ -58,9 +58,7 @@ DECLARE_TOAST(pg_replication_origin, 4181, 4182); #define PgReplicationOriginToastTable 4181 #define PgReplicationOriginToastIndex 4182 -DECLARE_UNIQUE_INDEX_PKEY(pg_replication_origin_roiident_index, 6001, on pg_replication_origin using btree(roident oid_ops)); -#define ReplicationOriginIdentIndex 6001 -DECLARE_UNIQUE_INDEX(pg_replication_origin_roname_index, 6002, on pg_replication_origin using btree(roname text_ops)); -#define ReplicationOriginNameIndex 6002 +DECLARE_UNIQUE_INDEX_PKEY(pg_replication_origin_roiident_index, 6001, ReplicationOriginIdentIndex, on pg_replication_origin using btree(roident oid_ops)); +DECLARE_UNIQUE_INDEX(pg_replication_origin_roname_index, 6002, ReplicationOriginNameIndex, on pg_replication_origin using btree(roname text_ops)); #endif /* PG_REPLICATION_ORIGIN_H */ diff --git a/src/include/catalog/pg_rewrite.h b/src/include/catalog/pg_rewrite.h index 89c72545d0bfb..2a87c5aa30bd7 100644 --- a/src/include/catalog/pg_rewrite.h +++ b/src/include/catalog/pg_rewrite.h @@ -53,9 +53,7 @@ typedef FormData_pg_rewrite *Form_pg_rewrite; DECLARE_TOAST(pg_rewrite, 2838, 2839); -DECLARE_UNIQUE_INDEX_PKEY(pg_rewrite_oid_index, 2692, on pg_rewrite using btree(oid oid_ops)); -#define RewriteOidIndexId 2692 -DECLARE_UNIQUE_INDEX(pg_rewrite_rel_rulename_index, 2693, on pg_rewrite using btree(ev_class oid_ops, rulename name_ops)); -#define RewriteRelRulenameIndexId 2693 +DECLARE_UNIQUE_INDEX_PKEY(pg_rewrite_oid_index, 2692, RewriteOidIndexId, on pg_rewrite using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_rewrite_rel_rulename_index, 2693, RewriteRelRulenameIndexId, on pg_rewrite using btree(ev_class oid_ops, rulename name_ops)); #endif /* PG_REWRITE_H */ diff --git a/src/include/catalog/pg_seclabel.h b/src/include/catalog/pg_seclabel.h index 0a12225eb70fe..9530b6ced2255 100644 --- a/src/include/catalog/pg_seclabel.h +++ b/src/include/catalog/pg_seclabel.h @@ -40,7 +40,6 @@ CATALOG(pg_seclabel,3596,SecLabelRelationId) DECLARE_TOAST(pg_seclabel, 3598, 3599); -DECLARE_UNIQUE_INDEX_PKEY(pg_seclabel_object_index, 3597, on pg_seclabel using btree(objoid oid_ops, classoid oid_ops, objsubid int4_ops, provider text_ops)); -#define SecLabelObjectIndexId 3597 +DECLARE_UNIQUE_INDEX_PKEY(pg_seclabel_object_index, 3597, SecLabelObjectIndexId, on pg_seclabel using btree(objoid oid_ops, classoid oid_ops, objsubid int4_ops, provider text_ops)); #endif /* PG_SECLABEL_H */ diff --git a/src/include/catalog/pg_sequence.h b/src/include/catalog/pg_sequence.h index 8d0a00baf69e8..aea586d66bbd1 100644 --- a/src/include/catalog/pg_sequence.h +++ b/src/include/catalog/pg_sequence.h @@ -39,7 +39,6 @@ CATALOG(pg_sequence,2224,SequenceRelationId) */ typedef FormData_pg_sequence *Form_pg_sequence; -DECLARE_UNIQUE_INDEX_PKEY(pg_sequence_seqrelid_index, 5002, on pg_sequence using btree(seqrelid oid_ops)); -#define SequenceRelidIndexId 5002 +DECLARE_UNIQUE_INDEX_PKEY(pg_sequence_seqrelid_index, 5002, SequenceRelidIndexId, on pg_sequence using btree(seqrelid oid_ops)); #endif /* PG_SEQUENCE_H */ diff --git a/src/include/catalog/pg_shdepend.h b/src/include/catalog/pg_shdepend.h index 4faa95794db94..c77452c5846bc 100644 --- a/src/include/catalog/pg_shdepend.h +++ b/src/include/catalog/pg_shdepend.h @@ -72,9 +72,7 @@ CATALOG(pg_shdepend,1214,SharedDependRelationId) BKI_SHARED_RELATION */ typedef FormData_pg_shdepend *Form_pg_shdepend; -DECLARE_INDEX(pg_shdepend_depender_index, 1232, on pg_shdepend using btree(dbid oid_ops, classid oid_ops, objid oid_ops, objsubid int4_ops)); -#define SharedDependDependerIndexId 1232 -DECLARE_INDEX(pg_shdepend_reference_index, 1233, on pg_shdepend using btree(refclassid oid_ops, refobjid oid_ops)); -#define SharedDependReferenceIndexId 1233 +DECLARE_INDEX(pg_shdepend_depender_index, 1232, SharedDependDependerIndexId, on pg_shdepend using btree(dbid oid_ops, classid oid_ops, objid oid_ops, objsubid int4_ops)); +DECLARE_INDEX(pg_shdepend_reference_index, 1233, SharedDependReferenceIndexId, on pg_shdepend using btree(refclassid oid_ops, refobjid oid_ops)); #endif /* PG_SHDEPEND_H */ diff --git a/src/include/catalog/pg_shdescription.h b/src/include/catalog/pg_shdescription.h index 543e216710b5b..7e60015b0ba45 100644 --- a/src/include/catalog/pg_shdescription.h +++ b/src/include/catalog/pg_shdescription.h @@ -59,8 +59,7 @@ DECLARE_TOAST(pg_shdescription, 2846, 2847); #define PgShdescriptionToastTable 2846 #define PgShdescriptionToastIndex 2847 -DECLARE_UNIQUE_INDEX_PKEY(pg_shdescription_o_c_index, 2397, on pg_shdescription using btree(objoid oid_ops, classoid oid_ops)); -#define SharedDescriptionObjIndexId 2397 +DECLARE_UNIQUE_INDEX_PKEY(pg_shdescription_o_c_index, 2397, SharedDescriptionObjIndexId, on pg_shdescription using btree(objoid oid_ops, classoid oid_ops)); /* We do not use BKI_LOOKUP here because it causes problems for genbki.pl */ DECLARE_FOREIGN_KEY((classoid), pg_class, (oid)); diff --git a/src/include/catalog/pg_shseclabel.h b/src/include/catalog/pg_shseclabel.h index 5d6864cf8cf0e..4feb20d189710 100644 --- a/src/include/catalog/pg_shseclabel.h +++ b/src/include/catalog/pg_shseclabel.h @@ -43,7 +43,6 @@ DECLARE_TOAST(pg_shseclabel, 4060, 4061); #define PgShseclabelToastTable 4060 #define PgShseclabelToastIndex 4061 -DECLARE_UNIQUE_INDEX_PKEY(pg_shseclabel_object_index, 3593, on pg_shseclabel using btree(objoid oid_ops, classoid oid_ops, provider text_ops)); -#define SharedSecLabelObjectIndexId 3593 +DECLARE_UNIQUE_INDEX_PKEY(pg_shseclabel_object_index, 3593, SharedSecLabelObjectIndexId, on pg_shseclabel using btree(objoid oid_ops, classoid oid_ops, provider text_ops)); #endif /* PG_SHSECLABEL_H */ diff --git a/src/include/catalog/pg_statistic.h b/src/include/catalog/pg_statistic.h index d1827858e2d76..4f95d7ade471c 100644 --- a/src/include/catalog/pg_statistic.h +++ b/src/include/catalog/pg_statistic.h @@ -136,8 +136,7 @@ typedef FormData_pg_statistic *Form_pg_statistic; DECLARE_TOAST(pg_statistic, 2840, 2841); -DECLARE_UNIQUE_INDEX_PKEY(pg_statistic_relid_att_inh_index, 2696, on pg_statistic using btree(starelid oid_ops, staattnum int2_ops, stainherit bool_ops)); -#define StatisticRelidAttnumInhIndexId 2696 +DECLARE_UNIQUE_INDEX_PKEY(pg_statistic_relid_att_inh_index, 2696, StatisticRelidAttnumInhIndexId, on pg_statistic using btree(starelid oid_ops, staattnum int2_ops, stainherit bool_ops)); DECLARE_FOREIGN_KEY((starelid, staattnum), pg_attribute, (attrelid, attnum)); diff --git a/src/include/catalog/pg_statistic_ext.h b/src/include/catalog/pg_statistic_ext.h index 36912ce528e00..da286d16b10dd 100644 --- a/src/include/catalog/pg_statistic_ext.h +++ b/src/include/catalog/pg_statistic_ext.h @@ -70,12 +70,9 @@ typedef FormData_pg_statistic_ext *Form_pg_statistic_ext; DECLARE_TOAST(pg_statistic_ext, 3439, 3440); -DECLARE_UNIQUE_INDEX_PKEY(pg_statistic_ext_oid_index, 3380, on pg_statistic_ext using btree(oid oid_ops)); -#define StatisticExtOidIndexId 3380 -DECLARE_UNIQUE_INDEX(pg_statistic_ext_name_index, 3997, on pg_statistic_ext using btree(stxname name_ops, stxnamespace oid_ops)); -#define StatisticExtNameIndexId 3997 -DECLARE_INDEX(pg_statistic_ext_relid_index, 3379, on pg_statistic_ext using btree(stxrelid oid_ops)); -#define StatisticExtRelidIndexId 3379 +DECLARE_UNIQUE_INDEX_PKEY(pg_statistic_ext_oid_index, 3380, StatisticExtOidIndexId, on pg_statistic_ext using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_statistic_ext_name_index, 3997, StatisticExtNameIndexId, on pg_statistic_ext using btree(stxname name_ops, stxnamespace oid_ops)); +DECLARE_INDEX(pg_statistic_ext_relid_index, 3379, StatisticExtRelidIndexId, on pg_statistic_ext using btree(stxrelid oid_ops)); DECLARE_ARRAY_FOREIGN_KEY((stxrelid, stxkeys), pg_attribute, (attrelid, attnum)); diff --git a/src/include/catalog/pg_statistic_ext_data.h b/src/include/catalog/pg_statistic_ext_data.h index 572915438377a..7b73b790d2e30 100644 --- a/src/include/catalog/pg_statistic_ext_data.h +++ b/src/include/catalog/pg_statistic_ext_data.h @@ -53,7 +53,6 @@ typedef FormData_pg_statistic_ext_data * Form_pg_statistic_ext_data; DECLARE_TOAST(pg_statistic_ext_data, 3430, 3431); -DECLARE_UNIQUE_INDEX_PKEY(pg_statistic_ext_data_stxoid_index, 3433, on pg_statistic_ext_data using btree(stxoid oid_ops)); -#define StatisticExtDataStxoidIndexId 3433 +DECLARE_UNIQUE_INDEX_PKEY(pg_statistic_ext_data_stxoid_index, 3433, StatisticExtDataStxoidIndexId, on pg_statistic_ext_data using btree(stxoid oid_ops)); #endif /* PG_STATISTIC_EXT_DATA_H */ diff --git a/src/include/catalog/pg_subscription.h b/src/include/catalog/pg_subscription.h index 0060ebfb4099f..750d46912a570 100644 --- a/src/include/catalog/pg_subscription.h +++ b/src/include/catalog/pg_subscription.h @@ -78,10 +78,8 @@ DECLARE_TOAST(pg_subscription, 4183, 4184); #define PgSubscriptionToastTable 4183 #define PgSubscriptionToastIndex 4184 -DECLARE_UNIQUE_INDEX_PKEY(pg_subscription_oid_index, 6114, on pg_subscription using btree(oid oid_ops)); -#define SubscriptionObjectIndexId 6114 -DECLARE_UNIQUE_INDEX(pg_subscription_subname_index, 6115, on pg_subscription using btree(subdbid oid_ops, subname name_ops)); -#define SubscriptionNameIndexId 6115 +DECLARE_UNIQUE_INDEX_PKEY(pg_subscription_oid_index, 6114, SubscriptionObjectIndexId, on pg_subscription using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_subscription_subname_index, 6115, SubscriptionNameIndexId, on pg_subscription using btree(subdbid oid_ops, subname name_ops)); typedef struct Subscription { diff --git a/src/include/catalog/pg_subscription_rel.h b/src/include/catalog/pg_subscription_rel.h index ed94f57baa137..4d2056318db2d 100644 --- a/src/include/catalog/pg_subscription_rel.h +++ b/src/include/catalog/pg_subscription_rel.h @@ -49,8 +49,7 @@ CATALOG(pg_subscription_rel,6102,SubscriptionRelRelationId) typedef FormData_pg_subscription_rel *Form_pg_subscription_rel; -DECLARE_UNIQUE_INDEX_PKEY(pg_subscription_rel_srrelid_srsubid_index, 6117, on pg_subscription_rel using btree(srrelid oid_ops, srsubid oid_ops)); -#define SubscriptionRelSrrelidSrsubidIndexId 6117 +DECLARE_UNIQUE_INDEX_PKEY(pg_subscription_rel_srrelid_srsubid_index, 6117, SubscriptionRelSrrelidSrsubidIndexId, on pg_subscription_rel using btree(srrelid oid_ops, srsubid oid_ops)); #ifdef EXPOSE_TO_CLIENT_CODE diff --git a/src/include/catalog/pg_tablespace.h b/src/include/catalog/pg_tablespace.h index 58bb1087a3e8e..bc5779a9eebed 100644 --- a/src/include/catalog/pg_tablespace.h +++ b/src/include/catalog/pg_tablespace.h @@ -51,9 +51,7 @@ DECLARE_TOAST(pg_tablespace, 4185, 4186); #define PgTablespaceToastTable 4185 #define PgTablespaceToastIndex 4186 -DECLARE_UNIQUE_INDEX_PKEY(pg_tablespace_oid_index, 2697, on pg_tablespace using btree(oid oid_ops)); -#define TablespaceOidIndexId 2697 -DECLARE_UNIQUE_INDEX(pg_tablespace_spcname_index, 2698, on pg_tablespace using btree(spcname name_ops)); -#define TablespaceNameIndexId 2698 +DECLARE_UNIQUE_INDEX_PKEY(pg_tablespace_oid_index, 2697, TablespaceOidIndexId, on pg_tablespace using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_tablespace_spcname_index, 2698, TablespaceNameIndexId, on pg_tablespace using btree(spcname name_ops)); #endif /* PG_TABLESPACE_H */ diff --git a/src/include/catalog/pg_transform.h b/src/include/catalog/pg_transform.h index d60324613857f..7d0c4d30b3848 100644 --- a/src/include/catalog/pg_transform.h +++ b/src/include/catalog/pg_transform.h @@ -42,9 +42,7 @@ CATALOG(pg_transform,3576,TransformRelationId) */ typedef FormData_pg_transform *Form_pg_transform; -DECLARE_UNIQUE_INDEX_PKEY(pg_transform_oid_index, 3574, on pg_transform using btree(oid oid_ops)); -#define TransformOidIndexId 3574 -DECLARE_UNIQUE_INDEX(pg_transform_type_lang_index, 3575, on pg_transform using btree(trftype oid_ops, trflang oid_ops)); -#define TransformTypeLangIndexId 3575 +DECLARE_UNIQUE_INDEX_PKEY(pg_transform_oid_index, 3574, TransformOidIndexId, on pg_transform using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_transform_type_lang_index, 3575, TransformTypeLangIndexId, on pg_transform using btree(trftype oid_ops, trflang oid_ops)); #endif /* PG_TRANSFORM_H */ diff --git a/src/include/catalog/pg_trigger.h b/src/include/catalog/pg_trigger.h index 2e3d2338763f3..8b9ea909d7127 100644 --- a/src/include/catalog/pg_trigger.h +++ b/src/include/catalog/pg_trigger.h @@ -81,12 +81,9 @@ typedef FormData_pg_trigger *Form_pg_trigger; DECLARE_TOAST(pg_trigger, 2336, 2337); -DECLARE_INDEX(pg_trigger_tgconstraint_index, 2699, on pg_trigger using btree(tgconstraint oid_ops)); -#define TriggerConstraintIndexId 2699 -DECLARE_UNIQUE_INDEX(pg_trigger_tgrelid_tgname_index, 2701, on pg_trigger using btree(tgrelid oid_ops, tgname name_ops)); -#define TriggerRelidNameIndexId 2701 -DECLARE_UNIQUE_INDEX_PKEY(pg_trigger_oid_index, 2702, on pg_trigger using btree(oid oid_ops)); -#define TriggerOidIndexId 2702 +DECLARE_INDEX(pg_trigger_tgconstraint_index, 2699, TriggerConstraintIndexId, on pg_trigger using btree(tgconstraint oid_ops)); +DECLARE_UNIQUE_INDEX(pg_trigger_tgrelid_tgname_index, 2701, TriggerRelidNameIndexId, on pg_trigger using btree(tgrelid oid_ops, tgname name_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_trigger_oid_index, 2702, TriggerOidIndexId, on pg_trigger using btree(oid oid_ops)); DECLARE_ARRAY_FOREIGN_KEY((tgrelid, tgattr), pg_attribute, (attrelid, attnum)); diff --git a/src/include/catalog/pg_ts_config.h b/src/include/catalog/pg_ts_config.h index 2e0263962df3b..8250d78cdca6a 100644 --- a/src/include/catalog/pg_ts_config.h +++ b/src/include/catalog/pg_ts_config.h @@ -47,9 +47,7 @@ CATALOG(pg_ts_config,3602,TSConfigRelationId) typedef FormData_pg_ts_config *Form_pg_ts_config; -DECLARE_UNIQUE_INDEX(pg_ts_config_cfgname_index, 3608, on pg_ts_config using btree(cfgname name_ops, cfgnamespace oid_ops)); -#define TSConfigNameNspIndexId 3608 -DECLARE_UNIQUE_INDEX_PKEY(pg_ts_config_oid_index, 3712, on pg_ts_config using btree(oid oid_ops)); -#define TSConfigOidIndexId 3712 +DECLARE_UNIQUE_INDEX(pg_ts_config_cfgname_index, 3608, TSConfigNameNspIndexId, on pg_ts_config using btree(cfgname name_ops, cfgnamespace oid_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_ts_config_oid_index, 3712, TSConfigOidIndexId, on pg_ts_config using btree(oid oid_ops)); #endif /* PG_TS_CONFIG_H */ diff --git a/src/include/catalog/pg_ts_config_map.h b/src/include/catalog/pg_ts_config_map.h index f39d14fd79579..8a615bfc1825a 100644 --- a/src/include/catalog/pg_ts_config_map.h +++ b/src/include/catalog/pg_ts_config_map.h @@ -44,7 +44,6 @@ CATALOG(pg_ts_config_map,3603,TSConfigMapRelationId) typedef FormData_pg_ts_config_map *Form_pg_ts_config_map; -DECLARE_UNIQUE_INDEX_PKEY(pg_ts_config_map_index, 3609, on pg_ts_config_map using btree(mapcfg oid_ops, maptokentype int4_ops, mapseqno int4_ops)); -#define TSConfigMapIndexId 3609 +DECLARE_UNIQUE_INDEX_PKEY(pg_ts_config_map_index, 3609, TSConfigMapIndexId, on pg_ts_config_map using btree(mapcfg oid_ops, maptokentype int4_ops, mapseqno int4_ops)); #endif /* PG_TS_CONFIG_MAP_H */ diff --git a/src/include/catalog/pg_ts_dict.h b/src/include/catalog/pg_ts_dict.h index e53eead82901b..4ab50fdb0e371 100644 --- a/src/include/catalog/pg_ts_dict.h +++ b/src/include/catalog/pg_ts_dict.h @@ -53,9 +53,7 @@ typedef FormData_pg_ts_dict *Form_pg_ts_dict; DECLARE_TOAST(pg_ts_dict, 4169, 4170); -DECLARE_UNIQUE_INDEX(pg_ts_dict_dictname_index, 3604, on pg_ts_dict using btree(dictname name_ops, dictnamespace oid_ops)); -#define TSDictionaryNameNspIndexId 3604 -DECLARE_UNIQUE_INDEX_PKEY(pg_ts_dict_oid_index, 3605, on pg_ts_dict using btree(oid oid_ops)); -#define TSDictionaryOidIndexId 3605 +DECLARE_UNIQUE_INDEX(pg_ts_dict_dictname_index, 3604, TSDictionaryNameNspIndexId, on pg_ts_dict using btree(dictname name_ops, dictnamespace oid_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_ts_dict_oid_index, 3605, TSDictionaryOidIndexId, on pg_ts_dict using btree(oid oid_ops)); #endif /* PG_TS_DICT_H */ diff --git a/src/include/catalog/pg_ts_parser.h b/src/include/catalog/pg_ts_parser.h index 0231051cee38f..8ebf9e85958f9 100644 --- a/src/include/catalog/pg_ts_parser.h +++ b/src/include/catalog/pg_ts_parser.h @@ -54,9 +54,7 @@ CATALOG(pg_ts_parser,3601,TSParserRelationId) typedef FormData_pg_ts_parser *Form_pg_ts_parser; -DECLARE_UNIQUE_INDEX(pg_ts_parser_prsname_index, 3606, on pg_ts_parser using btree(prsname name_ops, prsnamespace oid_ops)); -#define TSParserNameNspIndexId 3606 -DECLARE_UNIQUE_INDEX_PKEY(pg_ts_parser_oid_index, 3607, on pg_ts_parser using btree(oid oid_ops)); -#define TSParserOidIndexId 3607 +DECLARE_UNIQUE_INDEX(pg_ts_parser_prsname_index, 3606, TSParserNameNspIndexId, on pg_ts_parser using btree(prsname name_ops, prsnamespace oid_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_ts_parser_oid_index, 3607, TSParserOidIndexId, on pg_ts_parser using btree(oid oid_ops)); #endif /* PG_TS_PARSER_H */ diff --git a/src/include/catalog/pg_ts_template.h b/src/include/catalog/pg_ts_template.h index 194b921136209..8fd494ab7e29d 100644 --- a/src/include/catalog/pg_ts_template.h +++ b/src/include/catalog/pg_ts_template.h @@ -45,9 +45,7 @@ CATALOG(pg_ts_template,3764,TSTemplateRelationId) typedef FormData_pg_ts_template *Form_pg_ts_template; -DECLARE_UNIQUE_INDEX(pg_ts_template_tmplname_index, 3766, on pg_ts_template using btree(tmplname name_ops, tmplnamespace oid_ops)); -#define TSTemplateNameNspIndexId 3766 -DECLARE_UNIQUE_INDEX_PKEY(pg_ts_template_oid_index, 3767, on pg_ts_template using btree(oid oid_ops)); -#define TSTemplateOidIndexId 3767 +DECLARE_UNIQUE_INDEX(pg_ts_template_tmplname_index, 3766, TSTemplateNameNspIndexId, on pg_ts_template using btree(tmplname name_ops, tmplnamespace oid_ops)); +DECLARE_UNIQUE_INDEX_PKEY(pg_ts_template_oid_index, 3767, TSTemplateOidIndexId, on pg_ts_template using btree(oid oid_ops)); #endif /* PG_TS_TEMPLATE_H */ diff --git a/src/include/catalog/pg_type.h b/src/include/catalog/pg_type.h index 33557760e1902..b05db9641aefa 100644 --- a/src/include/catalog/pg_type.h +++ b/src/include/catalog/pg_type.h @@ -262,10 +262,8 @@ typedef FormData_pg_type *Form_pg_type; DECLARE_TOAST(pg_type, 4171, 4172); -DECLARE_UNIQUE_INDEX_PKEY(pg_type_oid_index, 2703, on pg_type using btree(oid oid_ops)); -#define TypeOidIndexId 2703 -DECLARE_UNIQUE_INDEX(pg_type_typname_nsp_index, 2704, on pg_type using btree(typname name_ops, typnamespace oid_ops)); -#define TypeNameNspIndexId 2704 +DECLARE_UNIQUE_INDEX_PKEY(pg_type_oid_index, 2703, TypeOidIndexId, on pg_type using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_type_typname_nsp_index, 2704, TypeNameNspIndexId, on pg_type using btree(typname name_ops, typnamespace oid_ops)); #ifdef EXPOSE_TO_CLIENT_CODE diff --git a/src/include/catalog/pg_user_mapping.h b/src/include/catalog/pg_user_mapping.h index d440c67da191f..16f16b89a795f 100644 --- a/src/include/catalog/pg_user_mapping.h +++ b/src/include/catalog/pg_user_mapping.h @@ -49,9 +49,7 @@ typedef FormData_pg_user_mapping *Form_pg_user_mapping; DECLARE_TOAST(pg_user_mapping, 4173, 4174); -DECLARE_UNIQUE_INDEX_PKEY(pg_user_mapping_oid_index, 174, on pg_user_mapping using btree(oid oid_ops)); -#define UserMappingOidIndexId 174 -DECLARE_UNIQUE_INDEX(pg_user_mapping_user_server_index, 175, on pg_user_mapping using btree(umuser oid_ops, umserver oid_ops)); -#define UserMappingUserServerIndexId 175 +DECLARE_UNIQUE_INDEX_PKEY(pg_user_mapping_oid_index, 174, UserMappingOidIndexId, on pg_user_mapping using btree(oid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_user_mapping_user_server_index, 175, UserMappingUserServerIndexId, on pg_user_mapping using btree(umuser oid_ops, umserver oid_ops)); #endif /* PG_USER_MAPPING_H */ From 48cb244fb9aca1620e35a14617ca5869b3ea065a Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Tue, 29 Jun 2021 00:44:57 -0700 Subject: [PATCH 564/671] Remove literal backslash from Perl \Q ... \E. The behavior changed sometime after Perl 5.8.9, and "man perlre" says it "may lead to confusing results." Per buildfarm member gaur. This repairs commit a7a7be1f2fa6b9f0f48e69f12256d8f588af729b. Discussion: https://postgr.es/m/20210629053627.GA2061079@rfd.leadboat.com --- src/bin/pg_dump/t/002_pg_dump.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index ac5d38ff4c4b9..448b1be26ce67 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -1431,7 +1431,7 @@ 'CREATE ROLE regress_quoted...' => { create_order => 1, create_sql => 'CREATE ROLE "regress_quoted \"" role";', - regexp => qr/^\QCREATE ROLE "regress_quoted \"" role";\E/m, + regexp => qr/^CREATE ROLE "regress_quoted \\"" role";/m, like => { pg_dumpall_dbprivs => 1, pg_dumpall_exclude => 1, @@ -3421,7 +3421,7 @@ ALTER SCHEMA public OWNER TO "regress_quoted \"" role"; REVOKE ALL ON SCHEMA public FROM "regress_quoted \"" role";', regexp => qr/^ - \QREVOKE ALL ON SCHEMA public FROM "regress_quoted \"" role";\E + \QREVOKE ALL ON SCHEMA public FROM "regress_quoted \E\\""\ role"; \n\QREVOKE ALL ON SCHEMA public FROM PUBLIC;\E \n\QGRANT USAGE ON SCHEMA public TO PUBLIC;\E /xm, From aaddf6ba09e25878e792f0d15f725370e19396df Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 29 Jun 2021 11:31:08 -0400 Subject: [PATCH 565/671] Remove libpq's use of abort(3) to handle mutex failure cases. Doing an abort() seems all right in development builds, but not in production builds of general-purpose libraries. However, the functions that were doing this lack any way to report a failure back up to their callers. It seems like we can just get away with ignoring failures in production builds, since (a) no such failures have been reported in the dozen years that the code's been like this, and (b) failure to enforce mutual exclusion during fe-auth.c operations would likely not cause any problems anyway in most cases. (The OpenSSL callbacks that use this macro are obsolete, so even less likely to cause interesting problems.) Possibly a better answer would be to break compatibility of the pgthreadlock_t callback API, but in the absence of field problem reports, it doesn't really seem worth the trouble. Discussion: https://postgr.es/m/3131385.1624746109@sss.pgh.pa.us --- src/interfaces/libpq/fe-connect.c | 11 ++++++++--- src/interfaces/libpq/fe-secure-openssl.c | 9 +++++++-- src/interfaces/libpq/libpq-int.h | 7 ------- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 3faf05a7e7187..fc65e490ef824 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -7254,6 +7254,11 @@ pqGetHomeDirectory(char *buf, int bufsize) /* * To keep the API consistent, the locking stubs are always provided, even * if they are not required. + * + * Since we neglected to provide any error-return convention in the + * pgthreadlock_t API, we can't do much except Assert upon failure of any + * mutex primitive. Fortunately, such failures appear to be nonexistent in + * the field. */ static void @@ -7273,7 +7278,7 @@ default_threadlock(int acquire) if (singlethread_lock == NULL) { if (pthread_mutex_init(&singlethread_lock, NULL)) - PGTHREAD_ERROR("failed to initialize mutex"); + Assert(false); } InterlockedExchange(&mutex_initlock, 0); } @@ -7281,12 +7286,12 @@ default_threadlock(int acquire) if (acquire) { if (pthread_mutex_lock(&singlethread_lock)) - PGTHREAD_ERROR("failed to lock mutex"); + Assert(false); } else { if (pthread_mutex_unlock(&singlethread_lock)) - PGTHREAD_ERROR("failed to unlock mutex"); + Assert(false); } #endif } diff --git a/src/interfaces/libpq/fe-secure-openssl.c b/src/interfaces/libpq/fe-secure-openssl.c index 67feaedc4e07b..2ee5a0a40aad9 100644 --- a/src/interfaces/libpq/fe-secure-openssl.c +++ b/src/interfaces/libpq/fe-secure-openssl.c @@ -611,15 +611,20 @@ static pthread_mutex_t *pq_lockarray; static void pq_lockingcallback(int mode, int n, const char *file, int line) { + /* + * There's no way to report a mutex-primitive failure, so we just Assert + * in development builds, and ignore any errors otherwise. Fortunately + * this is all obsolete in modern OpenSSL. + */ if (mode & CRYPTO_LOCK) { if (pthread_mutex_lock(&pq_lockarray[n])) - PGTHREAD_ERROR("failed to lock mutex"); + Assert(false); } else { if (pthread_mutex_unlock(&pq_lockarray[n])) - PGTHREAD_ERROR("failed to unlock mutex"); + Assert(false); } } #endif /* ENABLE_THREAD_SAFETY && HAVE_CRYPTO_LOCK */ diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h index e81dc37906b8b..6b7fd2c267ad2 100644 --- a/src/interfaces/libpq/libpq-int.h +++ b/src/interfaces/libpq/libpq-int.h @@ -626,13 +626,6 @@ extern bool pqGetHomeDirectory(char *buf, int bufsize); #ifdef ENABLE_THREAD_SAFETY extern pgthreadlock_t pg_g_threadlock; -#define PGTHREAD_ERROR(msg) \ - do { \ - fprintf(stderr, "%s\n", msg); \ - abort(); \ - } while (0) - - #define pglock_thread() pg_g_threadlock(true) #define pgunlock_thread() pg_g_threadlock(false) #else From dc227eb82ea8bf6919cd81a182a084589ddce7f3 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 29 Jun 2021 11:46:17 -0400 Subject: [PATCH 566/671] Add a build-time check that libpq doesn't call exit() or abort(). Directly exiting or aborting seems like poor form for a general-purpose library. Now that libpq liberally uses bits out of src/common/, it's very easy to accidentally include code that would do something unwanted like calling exit(1) after OOM --- see for example 8ec00dc5c. Hence, add a simple cross-check that no such calls have made it into libpq.so. The cross-check depends on nm(1) being available and being able to work on a shared library, which probably isn't true everywhere. But we can just make the test silently do nothing if nm fails. As long as the check is effective on common platforms, that should be good enough. (By the same logic, I've not worried about providing an equivalent test in MSVC builds.) Discussion: https://postgr.es/m/3128896.1624742969@sss.pgh.pa.us --- src/interfaces/libpq/Makefile | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/interfaces/libpq/Makefile b/src/interfaces/libpq/Makefile index 0c4e55b6ad34d..e8cd07e9c9996 100644 --- a/src/interfaces/libpq/Makefile +++ b/src/interfaces/libpq/Makefile @@ -96,12 +96,19 @@ SHLIB_EXPORTS = exports.txt PKG_CONFIG_REQUIRES_PRIVATE = libssl libcrypto -all: all-lib +all: all-lib check-libpq-refs # Shared library stuff include $(top_srcdir)/src/Makefile.shlib backend_src = $(top_srcdir)/src/backend +# Check for functions that libpq must not call, currently abort() and exit(). +# If nm doesn't exist or doesn't work on shlibs, this test will silently +# do nothing, which is fine. The exclusion of _eprintf.o is to prevent +# complaining about infrastructure on ancient macOS releases. +.PHONY: check-libpq-refs +check-libpq-refs: $(shlib) + ! nm -A -g -u $< 2>/dev/null | grep -v '_eprintf\.o:' | grep -e abort -e exit # Make dependencies on pg_config_paths.h visible in all builds. fe-connect.o: fe-connect.c $(top_builddir)/src/port/pg_config_paths.h From dd2364ced98553e0217bfe8f621cd4b0970db74a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 29 Jun 2021 14:34:31 -0400 Subject: [PATCH 567/671] Fix bogus logic for reporting which hash partition conflicts. Commit efbfb6424 added logic for reporting exactly which existing partition conflicts when complaining that a new hash partition's modulus isn't compatible with the existing ones. However, it misunderstood the partitioning data structure, and would select the wrong partition in some cases, or crash outright due to fetching a bogus table OID in other cases. Per bug #17076 from Alexander Lakhin. Fix by Amit Langote; some further work on the code comments by me. Discussion: https://postgr.es/m/17076-89a16ae835d329b9@postgresql.org --- src/backend/partitioning/partbounds.c | 26 +++++++++++++++------- src/test/regress/expected/create_table.out | 10 +++++++-- src/test/regress/sql/create_table.sql | 3 +++ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index 7925fcce3b355..7096d3bf4504a 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -2838,12 +2838,15 @@ check_new_partition_bound(char *relname, Relation parent, /* * Check rule that every modulus must be a factor of the - * next larger modulus. For example, if you have a bunch + * next larger modulus. (For example, if you have a bunch * of partitions that all have modulus 5, you can add a * new partition with modulus 10 or a new partition with * modulus 15, but you cannot add both a partition with * modulus 10 and a partition with modulus 15, because 10 - * is not a factor of 15. + * is not a factor of 15.) We need only check the next + * smaller and next larger existing moduli, relying on + * previous enforcement of this rule to be sure that the + * rest are in line. */ /* @@ -2870,15 +2873,16 @@ check_new_partition_bound(char *relname, Relation parent, errmsg("every hash partition modulus must be a factor of the next larger modulus"), errdetail("The new modulus %d is not a factor of %d, the modulus of existing partition \"%s\".", spec->modulus, next_modulus, - get_rel_name(partdesc->oids[boundinfo->indexes[0]])))); + get_rel_name(partdesc->oids[0])))); } else { int prev_modulus; /* - * We found the largest modulus less than or equal to - * ours. + * We found the largest (modulus, remainder) pair less + * than or equal to the new one. That modulus must be + * a divisor of, or equal to, the new modulus. */ prev_modulus = DatumGetInt32(boundinfo->datums[offset][0]); @@ -2889,13 +2893,19 @@ check_new_partition_bound(char *relname, Relation parent, errdetail("The new modulus %d is not divisible by %d, the modulus of existing partition \"%s\".", spec->modulus, prev_modulus, - get_rel_name(partdesc->oids[boundinfo->indexes[offset]])))); + get_rel_name(partdesc->oids[offset])))); if (offset + 1 < boundinfo->ndatums) { int next_modulus; - /* Look at the next higher modulus */ + /* + * Look at the next higher (modulus, remainder) + * pair. That could have the same modulus and a + * larger remainder than the new pair, in which + * case we're good. If it has a larger modulus, + * the new modulus must divide that one. + */ next_modulus = DatumGetInt32(boundinfo->datums[offset + 1][0]); if (next_modulus % spec->modulus != 0) @@ -2904,7 +2914,7 @@ check_new_partition_bound(char *relname, Relation parent, errmsg("every hash partition modulus must be a factor of the next larger modulus"), errdetail("The new modulus %d is not a factor of %d, the modulus of existing partition \"%s\".", spec->modulus, next_modulus, - get_rel_name(partdesc->oids[boundinfo->indexes[offset + 1]])))); + get_rel_name(partdesc->oids[offset + 1])))); } } diff --git a/src/test/regress/expected/create_table.out b/src/test/regress/expected/create_table.out index ad89dd05c142e..96bf426d98ee2 100644 --- a/src/test/regress/expected/create_table.out +++ b/src/test/regress/expected/create_table.out @@ -780,14 +780,20 @@ CREATE TABLE hash_parted ( CREATE TABLE hpart_1 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 10, REMAINDER 0); CREATE TABLE hpart_2 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 50, REMAINDER 1); CREATE TABLE hpart_3 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 200, REMAINDER 2); +CREATE TABLE hpart_4 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 10, REMAINDER 3); -- modulus 25 is factor of modulus of 50 but 10 is not a factor of 25. CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 25, REMAINDER 3); ERROR: every hash partition modulus must be a factor of the next larger modulus -DETAIL: The new modulus 25 is not divisible by 10, the modulus of existing partition "hpart_1". +DETAIL: The new modulus 25 is not divisible by 10, the modulus of existing partition "hpart_4". -- previous modulus 50 is factor of 150 but this modulus is not a factor of next modulus 200. CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 150, REMAINDER 3); ERROR: every hash partition modulus must be a factor of the next larger modulus DETAIL: The new modulus 150 is not a factor of 200, the modulus of existing partition "hpart_3". +-- overlapping remainders +CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 100, REMAINDER 3); +ERROR: partition "fail_part" would overlap partition "hpart_4" +LINE 1: ...BLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODU... + ^ -- trying to specify range for the hash partitioned table CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES FROM ('a', 1) TO ('z'); ERROR: invalid bound specification for a hash partition @@ -1100,7 +1106,7 @@ Number of partitions: 3 (Use \d+ to list them.) --------+---------+-----------+----------+--------- a | integer | | | Partition key: HASH (a) -Number of partitions: 3 (Use \d+ to list them.) +Number of partitions: 4 (Use \d+ to list them.) -- check that we get the expected partition constraints CREATE TABLE range_parted4 (a int, b int, c int) PARTITION BY RANGE (abs(a), abs(b), c); diff --git a/src/test/regress/sql/create_table.sql b/src/test/regress/sql/create_table.sql index 54cbf6c0595f0..cc41f58ba22a7 100644 --- a/src/test/regress/sql/create_table.sql +++ b/src/test/regress/sql/create_table.sql @@ -631,10 +631,13 @@ CREATE TABLE hash_parted ( CREATE TABLE hpart_1 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 10, REMAINDER 0); CREATE TABLE hpart_2 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 50, REMAINDER 1); CREATE TABLE hpart_3 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 200, REMAINDER 2); +CREATE TABLE hpart_4 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 10, REMAINDER 3); -- modulus 25 is factor of modulus of 50 but 10 is not a factor of 25. CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 25, REMAINDER 3); -- previous modulus 50 is factor of 150 but this modulus is not a factor of next modulus 200. CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 150, REMAINDER 3); +-- overlapping remainders +CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 100, REMAINDER 3); -- trying to specify range for the hash partitioned table CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES FROM ('a', 1) TO ('z'); -- trying to specify list value for the hash partitioned table From a7192326c74da417d024a189da4d33c1bf1b40b6 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Tue, 29 Jun 2021 14:37:39 -0400 Subject: [PATCH 568/671] Add PQsendFlushRequest to libpq MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This new libpq function allows the application to send an 'H' message, which instructs the server to flush its outgoing buffer. This hasn't been needed so far because the Sync message already requests a buffer; and I failed to realize that this was needed in pipeline mode because PQpipelineSync also causes the buffer to be flushed. However, sometimes it is useful to request a flush without establishing a synchronization point. Backpatch to 14, where pipeline mode was introduced in libpq. Reported-by: Boris Kolpackov Author: Álvaro Herrera Discussion: https://postgr.es/m/202106252350.t76x73nt643j@alvherre.pgsql --- doc/src/sgml/libpq.sgml | 33 +++++++++++++++++++++++++++-- src/interfaces/libpq/exports.txt | 3 ++- src/interfaces/libpq/fe-exec.c | 36 ++++++++++++++++++++++++++++++++ src/interfaces/libpq/libpq-fe.h | 1 + 4 files changed, 70 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 641970f2a612d..59e3e678f9e76 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -5102,10 +5102,13 @@ int PQflush(PGconn *conn); The server executes statements, and returns results, in the order the client sends them. The server will begin executing the commands in the pipeline immediately, not waiting for the end of the pipeline. + Note that results are buffered on the server side; the server flushes + that buffer when a synchronization point is established with + PQpipelineSync, or when + PQsendFlushRequest is called. If any statement encounters an error, the server aborts the current transaction and does not execute any subsequent command in the queue - until the next synchronization point established by - PQpipelineSync; + until the next synchronization point; a PGRES_PIPELINE_ABORTED result is produced for each such command. (This remains true even if the commands in the pipeline would rollback @@ -5399,6 +5402,32 @@ int PQpipelineSync(PGconn *conn); + + + PQsendFlushRequestPQsendFlushRequest + + + + Sends a request for the server to flush its output buffer. + +int PQsendFlushRequest(PGconn *conn); + + + + + Returns 1 for success. Returns 0 on any failure. + + + The server flushes its output buffer automatically as a result of + PQpipelineSync being called, or + on any request when not in pipeline mode; this function is useful + to cause the server to flush its output buffer in pipeline mode + without establishing a synchronization point. + Note that the request is not itself flushed to the server automatically; + use PQflush if necessary. + + + diff --git a/src/interfaces/libpq/exports.txt b/src/interfaces/libpq/exports.txt index 824a03ffbdc88..e8bcc88370916 100644 --- a/src/interfaces/libpq/exports.txt +++ b/src/interfaces/libpq/exports.txt @@ -184,4 +184,5 @@ PQexitPipelineMode 181 PQpipelineSync 182 PQpipelineStatus 183 PQsetTraceFlags 184 -PQmblenBounded 185 +PQmblenBounded 185 +PQsendFlushRequest 186 diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 7bd5b3a7b9da3..c1b1269672585 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -3099,6 +3099,42 @@ PQpipelineSync(PGconn *conn) return 0; } +/* + * PQsendFlushRequest + * Send request for server to flush its buffer. Useful in pipeline + * mode when a sync point is not desired. + */ +int +PQsendFlushRequest(PGconn *conn) +{ + if (!conn) + return 0; + + /* Don't try to send if we know there's no live connection. */ + if (conn->status != CONNECTION_OK) + { + appendPQExpBufferStr(&conn->errorMessage, + libpq_gettext("no connection to the server\n")); + return 0; + } + + /* Can't send while already busy, either, unless enqueuing for later */ + if (conn->asyncStatus != PGASYNC_IDLE && + conn->pipelineStatus == PQ_PIPELINE_OFF) + { + appendPQExpBufferStr(&conn->errorMessage, + libpq_gettext("another command is already in progress\n")); + return false; + } + + if (pqPutMsgStart('H', conn) < 0 || + pqPutMsgEnd(conn) < 0) + { + return 0; + } + + return 1; +} /* ====== accessor funcs for PGresult ======== */ diff --git a/src/interfaces/libpq/libpq-fe.h b/src/interfaces/libpq/libpq-fe.h index cc6032b15bd95..a6fd69acebcc8 100644 --- a/src/interfaces/libpq/libpq-fe.h +++ b/src/interfaces/libpq/libpq-fe.h @@ -470,6 +470,7 @@ extern int PQconsumeInput(PGconn *conn); extern int PQenterPipelineMode(PGconn *conn); extern int PQexitPipelineMode(PGconn *conn); extern int PQpipelineSync(PGconn *conn); +extern int PQsendFlushRequest(PGconn *conn); /* LISTEN/NOTIFY support */ extern PGnotify *PQnotifies(PGconn *conn); From b71a9cb31e46b08aeac35a4355936165648b3c49 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Tue, 29 Jun 2021 15:01:29 -0400 Subject: [PATCH 569/671] Fix libpq state machine in pipeline mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The original coding required that PQpipelineSync had been called before the first call to PQgetResult, and failure to do that would result in an unexpected NULL result being returned. Fix by setting the right state when a query is sent, rather than leaving it unchanged and having PQpipelineSync apply the necessary state change. A new test case to verify the behavior is added, which relies on the new PQsendFlushRequest() function added by commit a7192326c74d. Backpatch to 14, where pipeline mode was added. Reported-by: Boris Kolpackov Author: Álvaro Herrera Discussion: https://postgr.es/m/boris.20210616110321@codesynthesis.com --- src/interfaces/libpq/fe-exec.c | 19 +--- .../modules/libpq_pipeline/libpq_pipeline.c | 90 ++++++++++++++++++ .../libpq_pipeline/t/001_libpq_pipeline.pl | 2 +- .../libpq_pipeline/traces/nosync.trace | 92 +++++++++++++++++++ 4 files changed, 188 insertions(+), 15 deletions(-) create mode 100644 src/test/modules/libpq_pipeline/traces/nosync.trace diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index c1b1269672585..b13ddab393be5 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -1375,8 +1375,7 @@ PQsendQueryInternal(PGconn *conn, const char *query, bool newQuery) /* OK, it's launched! */ pqAppendCmdQueueEntry(conn, entry); - if (conn->pipelineStatus == PQ_PIPELINE_OFF) - conn->asyncStatus = PGASYNC_BUSY; + conn->asyncStatus = PGASYNC_BUSY; return 1; sendFailed: @@ -1513,8 +1512,7 @@ PQsendPrepare(PGconn *conn, pqAppendCmdQueueEntry(conn, entry); - if (conn->pipelineStatus == PQ_PIPELINE_OFF) - conn->asyncStatus = PGASYNC_BUSY; + conn->asyncStatus = PGASYNC_BUSY; /* * Give the data a push (in pipeline mode, only if we're past the size @@ -1817,8 +1815,7 @@ PQsendQueryGuts(PGconn *conn, /* OK, it's launched! */ pqAppendCmdQueueEntry(conn, entry); - if (conn->pipelineStatus == PQ_PIPELINE_OFF) - conn->asyncStatus = PGASYNC_BUSY; + conn->asyncStatus = PGASYNC_BUSY; return 1; sendFailed: @@ -2448,8 +2445,7 @@ PQsendDescribe(PGconn *conn, char desc_type, const char *desc_target) /* OK, it's launched! */ pqAppendCmdQueueEntry(conn, entry); - if (conn->pipelineStatus == PQ_PIPELINE_OFF) - conn->asyncStatus = PGASYNC_BUSY; + conn->asyncStatus = PGASYNC_BUSY; return 1; sendFailed: @@ -3084,12 +3080,7 @@ PQpipelineSync(PGconn *conn) */ if (PQflush(conn) < 0) goto sendFailed; - - /* - * Call pqPipelineProcessQueue so the user can call start calling - * PQgetResult. - */ - pqPipelineProcessQueue(conn); + conn->asyncStatus = PGASYNC_BUSY; return 1; diff --git a/src/test/modules/libpq_pipeline/libpq_pipeline.c b/src/test/modules/libpq_pipeline/libpq_pipeline.c index 71eedb6dbb4b8..249ee22105c18 100644 --- a/src/test/modules/libpq_pipeline/libpq_pipeline.c +++ b/src/test/modules/libpq_pipeline/libpq_pipeline.c @@ -230,6 +230,93 @@ test_multi_pipelines(PGconn *conn) fprintf(stderr, "ok\n"); } +/* + * Test behavior when a pipeline dispatches a number of commands that are + * not flushed by a sync point. + */ +static void +test_nosync(PGconn *conn) +{ + int numqueries = 10; + int results = 0; + int sock = PQsocket(conn); + + fprintf(stderr, "nosync... "); + + if (sock < 0) + pg_fatal("invalid socket"); + + if (PQenterPipelineMode(conn) != 1) + pg_fatal("could not enter pipeline mode"); + for (int i = 0; i < numqueries; i++) + { + fd_set input_mask; + struct timeval tv; + + if (PQsendQueryParams(conn, "SELECT repeat('xyzxz', 12)", + 0, NULL, NULL, NULL, NULL, 0) != 1) + pg_fatal("error sending select: %s", PQerrorMessage(conn)); + PQflush(conn); + + /* + * If the server has written anything to us, read (some of) it now. + */ + FD_ZERO(&input_mask); + FD_SET(sock, &input_mask); + tv.tv_sec = 0; + tv.tv_usec = 0; + if (select(sock + 1, &input_mask, NULL, NULL, &tv) < 0) + { + fprintf(stderr, "select() failed: %s\n", strerror(errno)); + exit_nicely(conn); + } + if (FD_ISSET(sock, &input_mask) && PQconsumeInput(conn) != 1) + pg_fatal("failed to read from server: %s", PQerrorMessage(conn)); + } + + /* tell server to flush its output buffer */ + if (PQsendFlushRequest(conn) != 1) + pg_fatal("failed to send flush request"); + PQflush(conn); + + /* Now read all results */ + for (;;) + { + PGresult *res; + + res = PQgetResult(conn); + + /* NULL results are only expected after TUPLES_OK */ + if (res == NULL) + pg_fatal("got unexpected NULL result after %d results", results); + + /* We expect exactly one TUPLES_OK result for each query we sent */ + if (PQresultStatus(res) == PGRES_TUPLES_OK) + { + PGresult *res2; + + /* and one NULL result should follow each */ + res2 = PQgetResult(conn); + if (res2 != NULL) + pg_fatal("expected NULL, got %s", + PQresStatus(PQresultStatus(res2))); + PQclear(res); + results++; + + /* if we're done, we're done */ + if (results == numqueries) + break; + + continue; + } + + /* anything else is unexpected */ + pg_fatal("got unexpected %s\n", PQresStatus(PQresultStatus(res))); + } + + fprintf(stderr, "ok\n"); +} + /* * When an operation in a pipeline fails the rest of the pipeline is flushed. We * still have to get results for each pipeline item, but the item will just be @@ -1237,6 +1324,7 @@ print_test_list(void) { printf("disallowed_in_pipeline\n"); printf("multi_pipelines\n"); + printf("nosync\n"); printf("pipeline_abort\n"); printf("pipelined_insert\n"); printf("prepared\n"); @@ -1334,6 +1422,8 @@ main(int argc, char **argv) test_disallowed_in_pipeline(conn); else if (strcmp(testname, "multi_pipelines") == 0) test_multi_pipelines(conn); + else if (strcmp(testname, "nosync") == 0) + test_nosync(conn); else if (strcmp(testname, "pipeline_abort") == 0) test_pipeline_abort(conn); else if (strcmp(testname, "pipelined_insert") == 0) diff --git a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl index 2bc0e6c223683..4101ef950ee46 100644 --- a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl +++ b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl @@ -26,7 +26,7 @@ { my @extraargs = ('-r', $numrows); my $cmptrace = grep(/^$testname$/, - qw(simple_pipeline multi_pipelines prepared singlerow + qw(simple_pipeline nosync multi_pipelines prepared singlerow pipeline_abort transaction disallowed_in_pipeline)) > 0; # For a bunch of tests, generate a libpq trace file too. diff --git a/src/test/modules/libpq_pipeline/traces/nosync.trace b/src/test/modules/libpq_pipeline/traces/nosync.trace new file mode 100644 index 0000000000000..d99aac649dba1 --- /dev/null +++ b/src/test/modules/libpq_pipeline/traces/nosync.trace @@ -0,0 +1,92 @@ +F 34 Parse "" "SELECT repeat('xyzxz', 12)" 0 +F 14 Bind "" "" 0 0 1 0 +F 6 Describe P "" +F 9 Execute "" 0 +F 34 Parse "" "SELECT repeat('xyzxz', 12)" 0 +F 14 Bind "" "" 0 0 1 0 +F 6 Describe P "" +F 9 Execute "" 0 +F 34 Parse "" "SELECT repeat('xyzxz', 12)" 0 +F 14 Bind "" "" 0 0 1 0 +F 6 Describe P "" +F 9 Execute "" 0 +F 34 Parse "" "SELECT repeat('xyzxz', 12)" 0 +F 14 Bind "" "" 0 0 1 0 +F 6 Describe P "" +F 9 Execute "" 0 +F 34 Parse "" "SELECT repeat('xyzxz', 12)" 0 +F 14 Bind "" "" 0 0 1 0 +F 6 Describe P "" +F 9 Execute "" 0 +F 34 Parse "" "SELECT repeat('xyzxz', 12)" 0 +F 14 Bind "" "" 0 0 1 0 +F 6 Describe P "" +F 9 Execute "" 0 +F 34 Parse "" "SELECT repeat('xyzxz', 12)" 0 +F 14 Bind "" "" 0 0 1 0 +F 6 Describe P "" +F 9 Execute "" 0 +F 34 Parse "" "SELECT repeat('xyzxz', 12)" 0 +F 14 Bind "" "" 0 0 1 0 +F 6 Describe P "" +F 9 Execute "" 0 +F 34 Parse "" "SELECT repeat('xyzxz', 12)" 0 +F 14 Bind "" "" 0 0 1 0 +F 6 Describe P "" +F 9 Execute "" 0 +F 34 Parse "" "SELECT repeat('xyzxz', 12)" 0 +F 14 Bind "" "" 0 0 1 0 +F 6 Describe P "" +F 9 Execute "" 0 +F 4 Flush +B 4 ParseComplete +B 4 BindComplete +B 31 RowDescription 1 "repeat" NNNN 0 NNNN 65535 -1 0 +B 70 DataRow 1 60 'xyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxz' +B 13 CommandComplete "SELECT 1" +B 4 ParseComplete +B 4 BindComplete +B 31 RowDescription 1 "repeat" NNNN 0 NNNN 65535 -1 0 +B 70 DataRow 1 60 'xyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxz' +B 13 CommandComplete "SELECT 1" +B 4 ParseComplete +B 4 BindComplete +B 31 RowDescription 1 "repeat" NNNN 0 NNNN 65535 -1 0 +B 70 DataRow 1 60 'xyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxz' +B 13 CommandComplete "SELECT 1" +B 4 ParseComplete +B 4 BindComplete +B 31 RowDescription 1 "repeat" NNNN 0 NNNN 65535 -1 0 +B 70 DataRow 1 60 'xyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxz' +B 13 CommandComplete "SELECT 1" +B 4 ParseComplete +B 4 BindComplete +B 31 RowDescription 1 "repeat" NNNN 0 NNNN 65535 -1 0 +B 70 DataRow 1 60 'xyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxz' +B 13 CommandComplete "SELECT 1" +B 4 ParseComplete +B 4 BindComplete +B 31 RowDescription 1 "repeat" NNNN 0 NNNN 65535 -1 0 +B 70 DataRow 1 60 'xyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxz' +B 13 CommandComplete "SELECT 1" +B 4 ParseComplete +B 4 BindComplete +B 31 RowDescription 1 "repeat" NNNN 0 NNNN 65535 -1 0 +B 70 DataRow 1 60 'xyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxz' +B 13 CommandComplete "SELECT 1" +B 4 ParseComplete +B 4 BindComplete +B 31 RowDescription 1 "repeat" NNNN 0 NNNN 65535 -1 0 +B 70 DataRow 1 60 'xyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxz' +B 13 CommandComplete "SELECT 1" +B 4 ParseComplete +B 4 BindComplete +B 31 RowDescription 1 "repeat" NNNN 0 NNNN 65535 -1 0 +B 70 DataRow 1 60 'xyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxz' +B 13 CommandComplete "SELECT 1" +B 4 ParseComplete +B 4 BindComplete +B 31 RowDescription 1 "repeat" NNNN 0 NNNN 65535 -1 0 +B 70 DataRow 1 60 'xyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxzxyzxz' +B 13 CommandComplete "SELECT 1" +F 4 Terminate From 178ec460db0a0ced46ac5a01a28a704ca6251e53 Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Tue, 29 Jun 2021 23:18:09 +0300 Subject: [PATCH 570/671] Fixes for multirange selectivity estimation * Fix enumeration of the multirange operators in calc_multirangesel() and calc_multirangesel() switches. * Add more regression tests for matching to empty ranges/multiranges. Reported-by: Alexander Lakhin Discussion: https://postgr.es/m/c5269c65-f967-77c5-ff7c-15e621c47f6a%40gmail.com Author: Alexander Korotkov Backpatch-through: 14, where multiranges were introduced --- .../utils/adt/multirangetypes_selfuncs.c | 38 ++-- src/test/regress/expected/multirangetypes.out | 210 ++++++++++++++++++ src/test/regress/sql/multirangetypes.sql | 37 +++ 3 files changed, 272 insertions(+), 13 deletions(-) diff --git a/src/backend/utils/adt/multirangetypes_selfuncs.c b/src/backend/utils/adt/multirangetypes_selfuncs.c index 551176bc21377..191cc1f002f10 100644 --- a/src/backend/utils/adt/multirangetypes_selfuncs.c +++ b/src/backend/utils/adt/multirangetypes_selfuncs.c @@ -347,16 +347,15 @@ calc_multirangesel(TypeCacheEntry *typcache, VariableStatData *vardata, switch (operator) { /* these return false if either argument is empty */ - case OID_RANGE_OVERLAPS_MULTIRANGE_OP: case OID_MULTIRANGE_OVERLAPS_RANGE_OP: case OID_MULTIRANGE_OVERLAPS_MULTIRANGE_OP: - case OID_RANGE_OVERLAPS_LEFT_MULTIRANGE_OP: case OID_MULTIRANGE_OVERLAPS_LEFT_RANGE_OP: case OID_MULTIRANGE_OVERLAPS_LEFT_MULTIRANGE_OP: - case OID_RANGE_OVERLAPS_RIGHT_MULTIRANGE_OP: case OID_MULTIRANGE_OVERLAPS_RIGHT_RANGE_OP: case OID_MULTIRANGE_OVERLAPS_RIGHT_MULTIRANGE_OP: + case OID_MULTIRANGE_LEFT_RANGE_OP: case OID_MULTIRANGE_LEFT_MULTIRANGE_OP: + case OID_MULTIRANGE_RIGHT_RANGE_OP: case OID_MULTIRANGE_RIGHT_MULTIRANGE_OP: /* nothing is less than an empty multirange */ case OID_MULTIRANGE_LESS_OP: @@ -367,7 +366,7 @@ calc_multirangesel(TypeCacheEntry *typcache, VariableStatData *vardata, * only empty multiranges can be contained by an empty * multirange */ - case OID_MULTIRANGE_RANGE_CONTAINED_OP: + case OID_RANGE_MULTIRANGE_CONTAINED_OP: case OID_MULTIRANGE_MULTIRANGE_CONTAINED_OP: /* only empty ranges are <= an empty multirange */ case OID_MULTIRANGE_LESS_EQUAL_OP: @@ -388,8 +387,18 @@ calc_multirangesel(TypeCacheEntry *typcache, VariableStatData *vardata, break; /* an element cannot be empty */ - case OID_MULTIRANGE_ELEM_CONTAINED_OP: case OID_MULTIRANGE_CONTAINS_ELEM_OP: + + /* filtered out by multirangesel() */ + case OID_RANGE_OVERLAPS_MULTIRANGE_OP: + case OID_RANGE_OVERLAPS_LEFT_MULTIRANGE_OP: + case OID_RANGE_OVERLAPS_RIGHT_MULTIRANGE_OP: + case OID_RANGE_LEFT_MULTIRANGE_OP: + case OID_RANGE_RIGHT_MULTIRANGE_OP: + case OID_RANGE_CONTAINS_MULTIRANGE_OP: + case OID_MULTIRANGE_ELEM_CONTAINED_OP: + case OID_MULTIRANGE_RANGE_CONTAINED_OP: + default: elog(ERROR, "unexpected operator %u", operator); selec = 0.0; /* keep compiler quiet */ @@ -416,8 +425,7 @@ calc_multirangesel(TypeCacheEntry *typcache, VariableStatData *vardata, * calculations, realizing that the histogram covers only the * non-null, non-empty values. */ - if (operator == OID_MULTIRANGE_ELEM_CONTAINED_OP || - operator == OID_MULTIRANGE_RANGE_CONTAINED_OP || + if (operator == OID_RANGE_MULTIRANGE_CONTAINED_OP || operator == OID_MULTIRANGE_MULTIRANGE_CONTAINED_OP) { /* empty is contained by anything non-empty */ @@ -575,7 +583,6 @@ calc_hist_selectivity(TypeCacheEntry *typcache, VariableStatData *vardata, hist_lower, nhist, true); break; - case OID_RANGE_LEFT_MULTIRANGE_OP: case OID_MULTIRANGE_LEFT_RANGE_OP: case OID_MULTIRANGE_LEFT_MULTIRANGE_OP: /* var << const when upper(var) < lower(const) */ @@ -584,7 +591,6 @@ calc_hist_selectivity(TypeCacheEntry *typcache, VariableStatData *vardata, hist_upper, nhist, false); break; - case OID_RANGE_RIGHT_MULTIRANGE_OP: case OID_MULTIRANGE_RIGHT_RANGE_OP: case OID_MULTIRANGE_RIGHT_MULTIRANGE_OP: /* var >> const when lower(var) > upper(const) */ @@ -593,7 +599,6 @@ calc_hist_selectivity(TypeCacheEntry *typcache, VariableStatData *vardata, hist_lower, nhist, true); break; - case OID_RANGE_OVERLAPS_RIGHT_MULTIRANGE_OP: case OID_MULTIRANGE_OVERLAPS_RIGHT_RANGE_OP: case OID_MULTIRANGE_OVERLAPS_RIGHT_MULTIRANGE_OP: /* compare lower bounds */ @@ -602,7 +607,6 @@ calc_hist_selectivity(TypeCacheEntry *typcache, VariableStatData *vardata, hist_lower, nhist, false); break; - case OID_RANGE_OVERLAPS_LEFT_MULTIRANGE_OP: case OID_MULTIRANGE_OVERLAPS_LEFT_RANGE_OP: case OID_MULTIRANGE_OVERLAPS_LEFT_MULTIRANGE_OP: /* compare upper bounds */ @@ -611,7 +615,6 @@ calc_hist_selectivity(TypeCacheEntry *typcache, VariableStatData *vardata, hist_upper, nhist, true); break; - case OID_RANGE_OVERLAPS_MULTIRANGE_OP: case OID_MULTIRANGE_OVERLAPS_RANGE_OP: case OID_MULTIRANGE_OVERLAPS_MULTIRANGE_OP: case OID_MULTIRANGE_CONTAINS_ELEM_OP: @@ -647,7 +650,6 @@ calc_hist_selectivity(TypeCacheEntry *typcache, VariableStatData *vardata, lslot.values, lslot.nvalues); break; - case OID_MULTIRANGE_RANGE_CONTAINED_OP: case OID_MULTIRANGE_MULTIRANGE_CONTAINED_OP: case OID_RANGE_MULTIRANGE_CONTAINED_OP: if (const_lower.infinite) @@ -675,6 +677,16 @@ calc_hist_selectivity(TypeCacheEntry *typcache, VariableStatData *vardata, } break; + /* filtered out by multirangesel() */ + case OID_RANGE_OVERLAPS_MULTIRANGE_OP: + case OID_RANGE_OVERLAPS_LEFT_MULTIRANGE_OP: + case OID_RANGE_OVERLAPS_RIGHT_MULTIRANGE_OP: + case OID_RANGE_LEFT_MULTIRANGE_OP: + case OID_RANGE_RIGHT_MULTIRANGE_OP: + case OID_RANGE_CONTAINS_MULTIRANGE_OP: + case OID_MULTIRANGE_ELEM_CONTAINED_OP: + case OID_MULTIRANGE_RANGE_CONTAINED_OP: + default: elog(ERROR, "unknown multirange operator %u", operator); hist_selec = -1.0; /* keep compiler quiet */ diff --git a/src/test/regress/expected/multirangetypes.out b/src/test/regress/expected/multirangetypes.out index 3e941aec68c46..af3ef4a258cd7 100644 --- a/src/test/regress/expected/multirangetypes.out +++ b/src/test/regress/expected/multirangetypes.out @@ -2241,12 +2241,114 @@ analyze test_multirange_gist; SET enable_seqscan = t; SET enable_indexscan = f; SET enable_bitmapscan = f; +select count(*) from test_multirange_gist where mr = '{}'::int4multirange; + count +------- + 500 +(1 row) + select count(*) from test_multirange_gist where mr @> 'empty'::int4range; count ------- 3700 (1 row) +select count(*) from test_multirange_gist where mr && 'empty'::int4range; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr <@ 'empty'::int4range; + count +------- + 500 +(1 row) + +select count(*) from test_multirange_gist where mr << 'empty'::int4range; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr >> 'empty'::int4range; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr &< 'empty'::int4range; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr &> 'empty'::int4range; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr -|- 'empty'::int4range; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr @> '{}'::int4multirange; + count +------- + 3700 +(1 row) + +select count(*) from test_multirange_gist where mr @> '{}'::int4multirange; + count +------- + 3700 +(1 row) + +select count(*) from test_multirange_gist where mr && '{}'::int4multirange; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr <@ '{}'::int4multirange; + count +------- + 500 +(1 row) + +select count(*) from test_multirange_gist where mr << '{}'::int4multirange; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr >> '{}'::int4multirange; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr &< '{}'::int4multirange; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr &> '{}'::int4multirange; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr -|- '{}'::int4multirange; + count +------- + 0 +(1 row) + select count(*) from test_multirange_gist where mr = int4multirange(int4range(10,20), int4range(30,40), int4range(50,60)); count ------- @@ -2365,6 +2467,114 @@ select count(*) from test_multirange_gist where mr -|- int4multirange(int4range( SET enable_seqscan = f; SET enable_indexscan = t; SET enable_bitmapscan = f; +select count(*) from test_multirange_gist where mr = '{}'::int4multirange; + count +------- + 500 +(1 row) + +select count(*) from test_multirange_gist where mr @> 'empty'::int4range; + count +------- + 3700 +(1 row) + +select count(*) from test_multirange_gist where mr && 'empty'::int4range; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr <@ 'empty'::int4range; + count +------- + 500 +(1 row) + +select count(*) from test_multirange_gist where mr << 'empty'::int4range; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr >> 'empty'::int4range; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr &< 'empty'::int4range; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr &> 'empty'::int4range; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr -|- 'empty'::int4range; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr @> '{}'::int4multirange; + count +------- + 3700 +(1 row) + +select count(*) from test_multirange_gist where mr @> '{}'::int4multirange; + count +------- + 3700 +(1 row) + +select count(*) from test_multirange_gist where mr && '{}'::int4multirange; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr <@ '{}'::int4multirange; + count +------- + 500 +(1 row) + +select count(*) from test_multirange_gist where mr << '{}'::int4multirange; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr >> '{}'::int4multirange; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr &< '{}'::int4multirange; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr &> '{}'::int4multirange; + count +------- + 0 +(1 row) + +select count(*) from test_multirange_gist where mr -|- '{}'::int4multirange; + count +------- + 0 +(1 row) + select count(*) from test_multirange_gist where mr @> 'empty'::int4range; count ------- diff --git a/src/test/regress/sql/multirangetypes.sql b/src/test/regress/sql/multirangetypes.sql index 3cbebedcd4a11..b91a23e0d5aa7 100644 --- a/src/test/regress/sql/multirangetypes.sql +++ b/src/test/regress/sql/multirangetypes.sql @@ -435,7 +435,25 @@ SET enable_seqscan = t; SET enable_indexscan = f; SET enable_bitmapscan = f; +select count(*) from test_multirange_gist where mr = '{}'::int4multirange; select count(*) from test_multirange_gist where mr @> 'empty'::int4range; +select count(*) from test_multirange_gist where mr && 'empty'::int4range; +select count(*) from test_multirange_gist where mr <@ 'empty'::int4range; +select count(*) from test_multirange_gist where mr << 'empty'::int4range; +select count(*) from test_multirange_gist where mr >> 'empty'::int4range; +select count(*) from test_multirange_gist where mr &< 'empty'::int4range; +select count(*) from test_multirange_gist where mr &> 'empty'::int4range; +select count(*) from test_multirange_gist where mr -|- 'empty'::int4range; +select count(*) from test_multirange_gist where mr @> '{}'::int4multirange; +select count(*) from test_multirange_gist where mr @> '{}'::int4multirange; +select count(*) from test_multirange_gist where mr && '{}'::int4multirange; +select count(*) from test_multirange_gist where mr <@ '{}'::int4multirange; +select count(*) from test_multirange_gist where mr << '{}'::int4multirange; +select count(*) from test_multirange_gist where mr >> '{}'::int4multirange; +select count(*) from test_multirange_gist where mr &< '{}'::int4multirange; +select count(*) from test_multirange_gist where mr &> '{}'::int4multirange; +select count(*) from test_multirange_gist where mr -|- '{}'::int4multirange; + select count(*) from test_multirange_gist where mr = int4multirange(int4range(10,20), int4range(30,40), int4range(50,60)); select count(*) from test_multirange_gist where mr @> 10; select count(*) from test_multirange_gist where mr @> int4range(10,20); @@ -461,6 +479,25 @@ SET enable_seqscan = f; SET enable_indexscan = t; SET enable_bitmapscan = f; +select count(*) from test_multirange_gist where mr = '{}'::int4multirange; +select count(*) from test_multirange_gist where mr @> 'empty'::int4range; +select count(*) from test_multirange_gist where mr && 'empty'::int4range; +select count(*) from test_multirange_gist where mr <@ 'empty'::int4range; +select count(*) from test_multirange_gist where mr << 'empty'::int4range; +select count(*) from test_multirange_gist where mr >> 'empty'::int4range; +select count(*) from test_multirange_gist where mr &< 'empty'::int4range; +select count(*) from test_multirange_gist where mr &> 'empty'::int4range; +select count(*) from test_multirange_gist where mr -|- 'empty'::int4range; +select count(*) from test_multirange_gist where mr @> '{}'::int4multirange; +select count(*) from test_multirange_gist where mr @> '{}'::int4multirange; +select count(*) from test_multirange_gist where mr && '{}'::int4multirange; +select count(*) from test_multirange_gist where mr <@ '{}'::int4multirange; +select count(*) from test_multirange_gist where mr << '{}'::int4multirange; +select count(*) from test_multirange_gist where mr >> '{}'::int4multirange; +select count(*) from test_multirange_gist where mr &< '{}'::int4multirange; +select count(*) from test_multirange_gist where mr &> '{}'::int4multirange; +select count(*) from test_multirange_gist where mr -|- '{}'::int4multirange; + select count(*) from test_multirange_gist where mr @> 'empty'::int4range; select count(*) from test_multirange_gist where mr = int4multirange(int4range(10,20), int4range(30,40), int4range(50,60)); select count(*) from test_multirange_gist where mr @> 10; From 4c9f50d116461617848601e97dbc6f122b0a6f14 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 30 Jun 2021 09:58:59 +0900 Subject: [PATCH 571/671] Optimize pg_checksums --enable where checksum is already set This commit prevents pg_checksums to do a rewrite of a block if it has no need to, in the case where the computed checksum matches with what's already stored in the block read. This is helpful to accelerate successive runs of the tool when the previous ones got interrupted, for example. The number of blocks and files written is tracked and reported by the tool once finished. Note that the final flush of the data folder happens even if no blocks are written, as it could be possible that a previous interrupted run got stopped while doing a flush. Author: Greg Sabino Mullane Reviewed-by: Paquier Michael, Julien Rouhaud Discussion: https://postgr.es/m/CAKAnmmL+k6goxmVzQJB+0bAR0PN1sgo6GDUXJhyhUmVMze1QAw@mail.gmail.com --- doc/src/sgml/ref/pg_checksums.sgml | 3 ++- src/bin/pg_checksums/pg_checksums.c | 36 ++++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/doc/src/sgml/ref/pg_checksums.sgml b/doc/src/sgml/ref/pg_checksums.sgml index c84bc5c5b23d5..6a6aebed511a0 100644 --- a/doc/src/sgml/ref/pg_checksums.sgml +++ b/doc/src/sgml/ref/pg_checksums.sgml @@ -47,7 +47,8 @@ PostgreSQL documentation When verifying checksums, every file in the cluster is scanned. When - enabling checksums, every file in the cluster is rewritten in-place. + enabling checksums, each relation file block with a changed checksum is + rewritten in-place. Disabling checksums only updates the file pg_control. diff --git a/src/bin/pg_checksums/pg_checksums.c b/src/bin/pg_checksums/pg_checksums.c index 831cf42d3ad19..3c326906e21ed 100644 --- a/src/bin/pg_checksums/pg_checksums.c +++ b/src/bin/pg_checksums/pg_checksums.c @@ -31,8 +31,10 @@ #include "storage/checksum_impl.h" -static int64 files = 0; -static int64 blocks = 0; +static int64 files_scanned = 0; +static int64 files_written = 0; +static int64 blocks_scanned = 0; +static int64 blocks_written = 0; static int64 badblocks = 0; static ControlFileData *ControlFile; @@ -195,6 +197,7 @@ scan_file(const char *fn, BlockNumber segmentno) int f; BlockNumber blockno; int flags; + int64 blocks_written_in_file = 0; Assert(mode == PG_MODE_ENABLE || mode == PG_MODE_CHECK); @@ -208,7 +211,7 @@ scan_file(const char *fn, BlockNumber segmentno) exit(1); } - files++; + files_scanned++; for (blockno = 0;; blockno++) { @@ -227,7 +230,7 @@ scan_file(const char *fn, BlockNumber segmentno) blockno, fn, r, BLCKSZ); exit(1); } - blocks++; + blocks_scanned++; /* * Since the file size is counted as total_size for progress status @@ -256,6 +259,15 @@ scan_file(const char *fn, BlockNumber segmentno) { int w; + /* + * Do not rewrite if the checksum is already set to the expected + * value. + */ + if (header->pd_checksum == csum) + continue; + + blocks_written_in_file++; + /* Set checksum in page header */ header->pd_checksum = csum; @@ -292,6 +304,13 @@ scan_file(const char *fn, BlockNumber segmentno) pg_log_info("checksums enabled in file \"%s\"", fn); } + /* Update write counters if any write activity has happened */ + if (blocks_written_in_file > 0) + { + files_written++; + blocks_written += blocks_written_in_file; + } + close(f); } @@ -637,8 +656,8 @@ main(int argc, char *argv[]) progress_report(true); printf(_("Checksum operation completed\n")); - printf(_("Files scanned: %s\n"), psprintf(INT64_FORMAT, files)); - printf(_("Blocks scanned: %s\n"), psprintf(INT64_FORMAT, blocks)); + printf(_("Files scanned: %s\n"), psprintf(INT64_FORMAT, files_scanned)); + printf(_("Blocks scanned: %s\n"), psprintf(INT64_FORMAT, blocks_scanned)); if (mode == PG_MODE_CHECK) { printf(_("Bad checksums: %s\n"), psprintf(INT64_FORMAT, badblocks)); @@ -647,6 +666,11 @@ main(int argc, char *argv[]) if (badblocks > 0) exit(1); } + else if (mode == PG_MODE_ENABLE) + { + printf(_("Files written: %s\n"), psprintf(INT64_FORMAT, files_written)); + printf(_("Blocks written: %s\n"), psprintf(INT64_FORMAT, blocks_written)); + } } /* From 17707c059cf4bf610e3b1833df5ca17cf223fe5f Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 30 Jun 2021 11:48:53 +0900 Subject: [PATCH 572/671] Fix incorrect PITR message for transaction ROLLBACK PREPARED Reaching PITR on such a transaction would cause the generation of a LOG message mentioning a transaction committed, not aborted. Oversight in 4f1b890. Author: Simon Riggs Discussion: https://postgr.es/m/CANbhV-GJ6KijeCgdOrxqMCQ+C8QiK657EMhCy4csjrPcEUFv_Q@mail.gmail.com Backpatch-through: 9.6 --- src/backend/access/transam/xlog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 9cbca6392d337..7890e13d7a137 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -5838,7 +5838,7 @@ recoveryStopsBefore(XLogReaderState *record) xl_xact_abort *xlrec = (xl_xact_abort *) XLogRecGetData(record); xl_xact_parsed_abort parsed; - isCommit = true; + isCommit = false; ParseAbortRecord(XLogRecGetInfo(record), xlrec, &parsed); From cda03cfed6b8bd5f64567bccbc9578fba035691e Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Wed, 30 Jun 2021 08:45:47 +0530 Subject: [PATCH 573/671] Allow enabling two-phase option via replication protocol. Extend the replication command CREATE_REPLICATION_SLOT to support the TWO_PHASE option. This will allow decoding commands like PREPARE TRANSACTION, COMMIT PREPARED and ROLLBACK PREPARED for slots created with this option. The decoding of the transaction happens at prepare command. This patch also adds support of two-phase in pg_recvlogical via a new option --two-phase. This option will also be used by future patches that allow streaming of transactions at prepare time for built-in logical replication. With this, the out-of-core logical replication solutions can enable replication of two-phase transactions via replication protocol. Author: Ajin Cherian Reviewed-By: Jeff Davis, Vignesh C, Amit Kapila Discussion: https://postgr.es/m/02DA5F5E-CECE-4D9C-8B4B-418077E2C010@postgrespro.ru https://postgr.es/m/64b9f783c6e125f18f88fbc0c0234e34e71d8639.camel@j-davis.com --- doc/src/sgml/logicaldecoding.sgml | 23 +++++++++- doc/src/sgml/protocol.sgml | 16 ++++++- doc/src/sgml/ref/pg_recvlogical.sgml | 16 +++++++ src/backend/replication/repl_gram.y | 6 +++ src/backend/replication/repl_scanner.l | 1 + src/backend/replication/walsender.c | 18 ++++++-- src/bin/pg_basebackup/pg_basebackup.c | 2 +- src/bin/pg_basebackup/pg_receivewal.c | 2 +- src/bin/pg_basebackup/pg_recvlogical.c | 19 +++++++- src/bin/pg_basebackup/streamutil.c | 6 ++- src/bin/pg_basebackup/streamutil.h | 2 +- src/bin/pg_basebackup/t/030_pg_recvlogical.pl | 45 ++++++++++++++++++- 12 files changed, 143 insertions(+), 13 deletions(-) diff --git a/doc/src/sgml/logicaldecoding.sgml b/doc/src/sgml/logicaldecoding.sgml index 5b8065901a4f2..985db5ca11e72 100644 --- a/doc/src/sgml/logicaldecoding.sgml +++ b/doc/src/sgml/logicaldecoding.sgml @@ -144,16 +144,19 @@ postgres=# SELECT pg_drop_replication_slot('regression_slot'); - The following example shows how logical decoding is controlled over the + The following examples shows how logical decoding is controlled over the streaming replication protocol, using the program included in the PostgreSQL distribution. This requires that client authentication is set up to allow replication connections (see ) and that max_wal_senders is set sufficiently high to allow - an additional connection. + an additional connection. The second example shows how to stream two-phase + transactions. Before you use two-phase commands, you must set + to atleast 1. +Example 1: $ pg_recvlogical -d postgres --slot=test --create-slot $ pg_recvlogical -d postgres --slot=test --start -f - ControlZ @@ -164,6 +167,22 @@ table public.data: INSERT: id[integer]:4 data[text]:'4' COMMIT 693 ControlC $ pg_recvlogical -d postgres --slot=test --drop-slot + +Example 2: +$ pg_recvlogical -d postgres --slot=test --create-slot --two-phase +$ pg_recvlogical -d postgres --slot=test --start -f - +ControlZ +$ psql -d postgres -c "BEGIN;INSERT INTO data(data) VALUES('5');PREPARE TRANSACTION 'test';" +$ fg +BEGIN 694 +table public.data: INSERT: id[integer]:5 data[text]:'5' +PREPARE TRANSACTION 'test', txid 694 +ControlZ +$ psql -d postgres -c "COMMIT PREPARED 'test';" +$ fg +COMMIT PREPARED 'test', txid 694 +ControlC +$ pg_recvlogical -d postgres --slot=test --drop-slot diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index 01e87617f4051..a3562f3d0891d 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -1914,7 +1914,7 @@ The commands accepted in replication mode are: - CREATE_REPLICATION_SLOT slot_name [ TEMPORARY ] { PHYSICAL [ RESERVE_WAL ] | LOGICAL output_plugin [ EXPORT_SNAPSHOT | NOEXPORT_SNAPSHOT | USE_SNAPSHOT ] } + CREATE_REPLICATION_SLOT slot_name [ TEMPORARY ] { PHYSICAL [ RESERVE_WAL ] | LOGICAL output_plugin [ EXPORT_SNAPSHOT | NOEXPORT_SNAPSHOT | USE_SNAPSHOT | TWO_PHASE ] } CREATE_REPLICATION_SLOT @@ -1955,6 +1955,20 @@ The commands accepted in replication mode are: + + TWO_PHASE + + + Specify that this logical replication slot supports decoding of two-phase + transactions. With this option, two-phase commands like + PREPARE TRANSACTION, COMMIT PREPARED + and ROLLBACK PREPARED are decoded and transmitted. + The transaction will be decoded and transmitted at + PREPARE TRANSACTION time. + + + + RESERVE_WAL diff --git a/doc/src/sgml/ref/pg_recvlogical.sgml b/doc/src/sgml/ref/pg_recvlogical.sgml index 6b1d98d06ef1f..1a882254095c4 100644 --- a/doc/src/sgml/ref/pg_recvlogical.sgml +++ b/doc/src/sgml/ref/pg_recvlogical.sgml @@ -65,6 +65,11 @@ PostgreSQL documentation , for the database specified by . + + + The can be specified with + to enable two-phase decoding. + @@ -256,6 +261,17 @@ PostgreSQL documentation + + + + + + Enables two-phase decoding. This option should only be specified with + + + + + diff --git a/src/backend/replication/repl_gram.y b/src/backend/replication/repl_gram.y index eb283a86327c8..e1e8ec29cc4a5 100644 --- a/src/backend/replication/repl_gram.y +++ b/src/backend/replication/repl_gram.y @@ -84,6 +84,7 @@ static SQLCmd *make_sqlcmd(void); %token K_SLOT %token K_RESERVE_WAL %token K_TEMPORARY +%token K_TWO_PHASE %token K_EXPORT_SNAPSHOT %token K_NOEXPORT_SNAPSHOT %token K_USE_SNAPSHOT @@ -283,6 +284,11 @@ create_slot_opt: $$ = makeDefElem("reserve_wal", (Node *)makeInteger(true), -1); } + | K_TWO_PHASE + { + $$ = makeDefElem("two_phase", + (Node *)makeInteger(true), -1); + } ; /* DROP_REPLICATION_SLOT slot */ diff --git a/src/backend/replication/repl_scanner.l b/src/backend/replication/repl_scanner.l index dcc3c3fc515cb..c038a636c3839 100644 --- a/src/backend/replication/repl_scanner.l +++ b/src/backend/replication/repl_scanner.l @@ -103,6 +103,7 @@ RESERVE_WAL { return K_RESERVE_WAL; } LOGICAL { return K_LOGICAL; } SLOT { return K_SLOT; } TEMPORARY { return K_TEMPORARY; } +TWO_PHASE { return K_TWO_PHASE; } EXPORT_SNAPSHOT { return K_EXPORT_SNAPSHOT; } NOEXPORT_SNAPSHOT { return K_NOEXPORT_SNAPSHOT; } USE_SNAPSHOT { return K_USE_SNAPSHOT; } diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index 322453635613c..92c755f346eba 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -863,11 +863,13 @@ logical_read_xlog_page(XLogReaderState *state, XLogRecPtr targetPagePtr, int req static void parseCreateReplSlotOptions(CreateReplicationSlotCmd *cmd, bool *reserve_wal, - CRSSnapshotAction *snapshot_action) + CRSSnapshotAction *snapshot_action, + bool *two_phase) { ListCell *lc; bool snapshot_action_given = false; bool reserve_wal_given = false; + bool two_phase_given = false; /* Parse options */ foreach(lc, cmd->options) @@ -905,6 +907,15 @@ parseCreateReplSlotOptions(CreateReplicationSlotCmd *cmd, reserve_wal_given = true; *reserve_wal = true; } + else if (strcmp(defel->defname, "two_phase") == 0) + { + if (two_phase_given || cmd->kind != REPLICATION_KIND_LOGICAL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("conflicting or redundant options"))); + two_phase_given = true; + *two_phase = true; + } else elog(ERROR, "unrecognized option: %s", defel->defname); } @@ -920,6 +931,7 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd) char xloc[MAXFNAMELEN]; char *slot_name; bool reserve_wal = false; + bool two_phase = false; CRSSnapshotAction snapshot_action = CRS_EXPORT_SNAPSHOT; DestReceiver *dest; TupOutputState *tstate; @@ -929,7 +941,7 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd) Assert(!MyReplicationSlot); - parseCreateReplSlotOptions(cmd, &reserve_wal, &snapshot_action); + parseCreateReplSlotOptions(cmd, &reserve_wal, &snapshot_action, &two_phase); /* setup state for WalSndSegmentOpen */ sendTimeLineIsHistoric = false; @@ -954,7 +966,7 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd) */ ReplicationSlotCreate(cmd->slotname, true, cmd->temporary ? RS_TEMPORARY : RS_EPHEMERAL, - false); + two_phase); } if (cmd->kind == REPLICATION_KIND_LOGICAL) diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 16d8929b238fd..8bb0acf498eb7 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -646,7 +646,7 @@ StartLogStreamer(char *startpos, uint32 timeline, char *sysidentifier) if (temp_replication_slot || create_slot) { if (!CreateReplicationSlot(param->bgconn, replication_slot, NULL, - temp_replication_slot, true, true, false)) + temp_replication_slot, true, true, false, false)) exit(1); if (verbose) diff --git a/src/bin/pg_basebackup/pg_receivewal.c b/src/bin/pg_basebackup/pg_receivewal.c index 0d15012c295f6..c1334fad35710 100644 --- a/src/bin/pg_basebackup/pg_receivewal.c +++ b/src/bin/pg_basebackup/pg_receivewal.c @@ -741,7 +741,7 @@ main(int argc, char **argv) pg_log_info("creating replication slot \"%s\"", replication_slot); if (!CreateReplicationSlot(conn, replication_slot, NULL, false, true, false, - slot_exists_ok)) + slot_exists_ok, false)) exit(1); exit(0); } diff --git a/src/bin/pg_basebackup/pg_recvlogical.c b/src/bin/pg_basebackup/pg_recvlogical.c index 5efec160e8847..76bd153fac241 100644 --- a/src/bin/pg_basebackup/pg_recvlogical.c +++ b/src/bin/pg_basebackup/pg_recvlogical.c @@ -35,6 +35,7 @@ /* Global Options */ static char *outfile = NULL; static int verbose = 0; +static bool two_phase = false; static int noloop = 0; static int standby_message_timeout = 10 * 1000; /* 10 sec = default */ static int fsync_interval = 10 * 1000; /* 10 sec = default */ @@ -93,6 +94,7 @@ usage(void) printf(_(" -s, --status-interval=SECS\n" " time between status packets sent to server (default: %d)\n"), (standby_message_timeout / 1000)); printf(_(" -S, --slot=SLOTNAME name of the logical replication slot\n")); + printf(_(" -t, --two-phase enable two-phase decoding when creating a slot\n")); printf(_(" -v, --verbose output verbose messages\n")); printf(_(" -V, --version output version information, then exit\n")); printf(_(" -?, --help show this help, then exit\n")); @@ -678,6 +680,7 @@ main(int argc, char **argv) {"fsync-interval", required_argument, NULL, 'F'}, {"no-loop", no_argument, NULL, 'n'}, {"verbose", no_argument, NULL, 'v'}, + {"two-phase", no_argument, NULL, 't'}, {"version", no_argument, NULL, 'V'}, {"help", no_argument, NULL, '?'}, /* connection options */ @@ -726,7 +729,7 @@ main(int argc, char **argv) } } - while ((c = getopt_long(argc, argv, "E:f:F:nvd:h:p:U:wWI:o:P:s:S:", + while ((c = getopt_long(argc, argv, "E:f:F:nvtd:h:p:U:wWI:o:P:s:S:", long_options, &option_index)) != -1) { switch (c) @@ -749,6 +752,9 @@ main(int argc, char **argv) case 'v': verbose++; break; + case 't': + two_phase = true; + break; /* connection options */ case 'd': dbname = pg_strdup(optarg); @@ -920,6 +926,15 @@ main(int argc, char **argv) exit(1); } + if (two_phase && !do_create_slot) + { + pg_log_error("--two-phase may only be specified with --create-slot"); + fprintf(stderr, _("Try \"%s --help\" for more information.\n"), + progname); + exit(1); + } + + #ifndef WIN32 pqsignal(SIGINT, sigint_handler); pqsignal(SIGHUP, sighup_handler); @@ -976,7 +991,7 @@ main(int argc, char **argv) pg_log_info("creating replication slot \"%s\"", replication_slot); if (!CreateReplicationSlot(conn, replication_slot, plugin, false, - false, false, slot_exists_ok)) + false, false, slot_exists_ok, two_phase)) exit(1); startpos = InvalidXLogRecPtr; } diff --git a/src/bin/pg_basebackup/streamutil.c b/src/bin/pg_basebackup/streamutil.c index 99daf0e97278d..f5b3b476e5229 100644 --- a/src/bin/pg_basebackup/streamutil.c +++ b/src/bin/pg_basebackup/streamutil.c @@ -486,7 +486,7 @@ RunIdentifySystem(PGconn *conn, char **sysid, TimeLineID *starttli, bool CreateReplicationSlot(PGconn *conn, const char *slot_name, const char *plugin, bool is_temporary, bool is_physical, bool reserve_wal, - bool slot_exists_ok) + bool slot_exists_ok, bool two_phase) { PQExpBuffer query; PGresult *res; @@ -495,6 +495,7 @@ CreateReplicationSlot(PGconn *conn, const char *slot_name, const char *plugin, Assert((is_physical && plugin == NULL) || (!is_physical && plugin != NULL)); + Assert(!(two_phase && is_physical)); Assert(slot_name != NULL); /* Build query */ @@ -510,6 +511,9 @@ CreateReplicationSlot(PGconn *conn, const char *slot_name, const char *plugin, else { appendPQExpBuffer(query, " LOGICAL \"%s\"", plugin); + if (two_phase && PQserverVersion(conn) >= 150000) + appendPQExpBufferStr(query, " TWO_PHASE"); + if (PQserverVersion(conn) >= 100000) /* pg_recvlogical doesn't use an exported snapshot, so suppress */ appendPQExpBufferStr(query, " NOEXPORT_SNAPSHOT"); diff --git a/src/bin/pg_basebackup/streamutil.h b/src/bin/pg_basebackup/streamutil.h index 10f87ad0c14b3..504803b976354 100644 --- a/src/bin/pg_basebackup/streamutil.h +++ b/src/bin/pg_basebackup/streamutil.h @@ -34,7 +34,7 @@ extern PGconn *GetConnection(void); extern bool CreateReplicationSlot(PGconn *conn, const char *slot_name, const char *plugin, bool is_temporary, bool is_physical, bool reserve_wal, - bool slot_exists_ok); + bool slot_exists_ok, bool two_phase); extern bool DropReplicationSlot(PGconn *conn, const char *slot_name); extern bool RunIdentifySystem(PGconn *conn, char **sysid, TimeLineID *starttli, diff --git a/src/bin/pg_basebackup/t/030_pg_recvlogical.pl b/src/bin/pg_basebackup/t/030_pg_recvlogical.pl index 53f41814b0b20..bbbf9e21dba86 100644 --- a/src/bin/pg_basebackup/t/030_pg_recvlogical.pl +++ b/src/bin/pg_basebackup/t/030_pg_recvlogical.pl @@ -5,7 +5,7 @@ use warnings; use TestLib; use PostgresNode; -use Test::More tests => 15; +use Test::More tests => 20; program_help_ok('pg_recvlogical'); program_version_ok('pg_recvlogical'); @@ -22,6 +22,7 @@ max_wal_senders = 4 log_min_messages = 'debug1' log_error_verbosity = verbose +max_prepared_transactions = 10 }); $node->dump_info; $node->start; @@ -63,3 +64,45 @@ '--start', '--endpos', "$nextlsn", '--no-loop', '-f', '-' ], 'replayed a transaction'); + +$node->command_ok( + [ + 'pg_recvlogical', '-S', + 'test', '-d', + $node->connstr('postgres'), '--drop-slot' + ], + 'slot dropped'); + +#test with two-phase option enabled +$node->command_ok( + [ + 'pg_recvlogical', '-S', + 'test', '-d', + $node->connstr('postgres'), '--create-slot', '--two-phase' + ], + 'slot with two-phase created'); + +$slot = $node->slot('test'); +isnt($slot->{'restart_lsn'}, '', 'restart lsn is defined for new slot'); + +$node->safe_psql('postgres', + "BEGIN; INSERT INTO test_table values (11); PREPARE TRANSACTION 'test'"); +$node->safe_psql('postgres', + "COMMIT PREPARED 'test'"); +$nextlsn = + $node->safe_psql('postgres', 'SELECT pg_current_wal_insert_lsn()'); +chomp($nextlsn); + +$node->command_fails( + [ + 'pg_recvlogical', '-S', 'test', '-d', $node->connstr('postgres'), + '--start', '--endpos', "$nextlsn", '--two-phase', '--no-loop', '-f', '-' + ], + 'incorrect usage'); + +$node->command_ok( + [ + 'pg_recvlogical', '-S', 'test', '-d', $node->connstr('postgres'), + '--start', '--endpos', "$nextlsn", '--no-loop', '-f', '-' + ], + 'replayed a two-phase transaction'); From 52d26d560e272613c501e35b24fbf8d710de4b8a Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Wed, 30 Jun 2021 09:37:59 +0530 Subject: [PATCH 574/671] Allow streaming the changes after speculative aborts. Until now, we didn't allow to stream the changes in logical replication till we receive speculative confirm or the next DML change record after speculative inserts. The reason was that we never use to process speculative aborts but after commit 4daa140a2f it is possible to process them so we can allow streaming once we receive speculative abort after speculative insertion. We decided to backpatch to 14 where the feature for streaming in progress transactions have been introduced as this is a minor change and makes that functionality better. Author: Amit Kapila Reviewed-By: Dilip Kumar Backpatch-through: 14 Discussion: https://postgr.es/m/CAA4eK1KdqmTCtrBR6oFfGELrLLbDLDedL6zACcsUOQuTJBj1vw@mail.gmail.com --- src/backend/replication/logical/reorderbuffer.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index ad1c2bad01364..b8c5e2a44ecf5 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -182,9 +182,10 @@ typedef struct ReorderBufferDiskChange ( \ ((action) == REORDER_BUFFER_CHANGE_INTERNAL_SPEC_INSERT) \ ) -#define IsSpecConfirm(action) \ +#define IsSpecConfirmOrAbort(action) \ ( \ - ((action) == REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM) \ + (((action) == REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM) || \ + ((action) == REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT)) \ ) #define IsInsertOrUpdate(action) \ ( \ @@ -731,12 +732,13 @@ ReorderBufferProcessPartialChange(ReorderBuffer *rb, ReorderBufferTXN *txn, /* * Indicate a partial change for speculative inserts. The change will be - * considered as complete once we get the speculative confirm token. + * considered as complete once we get the speculative confirm or abort + * token. */ if (IsSpecInsert(change->action)) toptxn->txn_flags |= RBTXN_HAS_PARTIAL_CHANGE; else if (rbtxn_has_partial_change(toptxn) && - IsSpecConfirm(change->action)) + IsSpecConfirmOrAbort(change->action)) toptxn->txn_flags &= ~RBTXN_HAS_PARTIAL_CHANGE; /* From ab5e48f153cfea2c571dc177ae96faf4ab072b8e Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Wed, 30 Jun 2021 11:29:53 +0530 Subject: [PATCH 575/671] Replace magic constants used in pg_stat_get_replication_slot(). A few variables have been using 10 as a magic constant while PG_STAT_GET_REPLICATION_SLOT_COLS can be used instead. Author: Masahiko Sawada Reviewed-By: Amit Kapila Backpatch-through: 14, where it was introduced Discussion: https://postgr.es/m/CAD21AoBvqODDfmD17DkEuPCvV2KbruukXQ2Vwrv5Xi-TsAsTJA@mail.gmail.com --- src/backend/utils/adt/pgstatfuncs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 14056f53471d3..f0e09eae4d662 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -2317,8 +2317,8 @@ pg_stat_get_replication_slot(PG_FUNCTION_ARGS) text *slotname_text = PG_GETARG_TEXT_P(0); NameData slotname; TupleDesc tupdesc; - Datum values[10]; - bool nulls[10]; + Datum values[PG_STAT_GET_REPLICATION_SLOT_COLS]; + bool nulls[PG_STAT_GET_REPLICATION_SLOT_COLS]; PgStat_StatReplSlotEntry *slotent; PgStat_StatReplSlotEntry allzero; From 735dc1a09469002fd659a4b1f5d582377b318977 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 30 Jun 2021 08:29:03 +0200 Subject: [PATCH 576/671] genbki stricter error handling Instead of just writing warnings for invalid cross-catalog lookups, count the errors and error out at the end. Reviewed-by: Tom Lane Discussion: https://www.postgresql.org/message-id/flat/ca8ee41d-241b-1bf3-71f0-aaf1add6d3c5%40enterprisedb.com --- src/backend/catalog/genbki.pl | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index 968737609373c..b82df348b8d33 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -26,6 +26,8 @@ my $major_version; my $include_path; +my $num_errors = 0; + GetOptions( 'output:s' => \$output_path, 'set-version:s' => \$major_version, @@ -796,7 +798,7 @@ Catalog::RenameTempFile($fk_info_file, $tmpext); Catalog::RenameTempFile($constraints_file, $tmpext); -exit 0; +exit ($num_errors != 0 ? 1 : 0); #################### Subroutines ######################## @@ -1024,8 +1026,7 @@ sub morph_row_for_schemapg # Perform OID lookups on an array of OID names. # If we don't have a unique value to substitute, warn and # leave the entry unchanged. -# (A warning seems sufficient because the bootstrap backend will reject -# non-numeric values anyway. So we might as well detect multiple problems +# (We don't exit right away so that we can detect multiple problems # within this genbki.pl run.) sub lookup_oids { @@ -1045,16 +1046,20 @@ sub lookup_oids push @lookupoids, $lookupname; if ($lookupname eq '-' or $lookupname eq '0') { - warn sprintf - "invalid zero OID reference in %s.dat field %s line %s\n", - $catname, $attname, $bki_values->{line_number} - if !$lookup_opt; + if (!$lookup_opt) + { + warn sprintf + "invalid zero OID reference in %s.dat field %s line %s\n", + $catname, $attname, $bki_values->{line_number}; + $num_errors++; + } } else { warn sprintf "unresolved OID reference \"%s\" in %s.dat field %s line %s\n", $lookupname, $catname, $attname, $bki_values->{line_number}; + $num_errors++; } } } From 61d599ede7424d88bbd4006b968bae366b6b9f5d Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 30 Jun 2021 19:33:18 +0900 Subject: [PATCH 577/671] doc: Add type information for postgres_fdw parameters. Author: Shinya Kato Reviewed-by: Fujii Masao Discussion: https://postgr.es/m/TYAPR01MB2896DEB25C3B0D57F6139768C40F9@TYAPR01MB2896.jpnprd01.prod.outlook.com --- doc/src/sgml/postgres-fdw.sgml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/doc/src/sgml/postgres-fdw.sgml b/doc/src/sgml/postgres-fdw.sgml index d96c3d0f0cd3b..d7d2baafc9699 100644 --- a/doc/src/sgml/postgres-fdw.sgml +++ b/doc/src/sgml/postgres-fdw.sgml @@ -195,7 +195,7 @@ OPTIONS (ADD password_required 'false'); - schema_name + schema_name (string) This option, which can be specified for a foreign table, gives the @@ -206,7 +206,7 @@ OPTIONS (ADD password_required 'false'); - table_name + table_name (string) This option, which can be specified for a foreign table, gives the @@ -217,7 +217,7 @@ OPTIONS (ADD password_required 'false'); - column_name + column_name (string) This option, which can be specified for a column of a foreign table, @@ -249,7 +249,7 @@ OPTIONS (ADD password_required 'false'); - use_remote_estimate + use_remote_estimate (boolean) This option, which can be specified for a foreign table or a foreign @@ -263,7 +263,7 @@ OPTIONS (ADD password_required 'false'); - fdw_startup_cost + fdw_startup_cost (floating point) This option, which can be specified for a foreign server, is a numeric @@ -277,7 +277,7 @@ OPTIONS (ADD password_required 'false'); - fdw_tuple_cost + fdw_tuple_cost (floating point) This option, which can be specified for a foreign server, is a numeric @@ -329,7 +329,7 @@ OPTIONS (ADD password_required 'false'); - extensions + extensions (string) This option is a comma-separated list of names @@ -350,7 +350,7 @@ OPTIONS (ADD password_required 'false'); - fetch_size + fetch_size (integer) This option specifies the number of rows postgres_fdw @@ -363,7 +363,7 @@ OPTIONS (ADD password_required 'false'); - batch_size + batch_size (integer) This option specifies the number of rows postgres_fdw @@ -403,7 +403,7 @@ OPTIONS (ADD password_required 'false'); - async_capable + async_capable (boolean) This option controls whether postgres_fdw allows @@ -452,7 +452,7 @@ OPTIONS (ADD password_required 'false'); - updatable + updatable (boolean) This option controls whether postgres_fdw allows foreign @@ -489,7 +489,7 @@ OPTIONS (ADD password_required 'false'); - truncatable + truncatable (boolean) This option controls whether postgres_fdw allows @@ -528,7 +528,7 @@ OPTIONS (ADD password_required 'false'); - import_collate + import_collate (boolean) This option controls whether column COLLATE options @@ -541,7 +541,7 @@ OPTIONS (ADD password_required 'false'); - import_default + import_default (boolean) This option controls whether column DEFAULT expressions @@ -556,7 +556,7 @@ OPTIONS (ADD password_required 'false'); - import_not_null + import_not_null (boolean) This option controls whether column NOT NULL @@ -606,7 +606,7 @@ OPTIONS (ADD password_required 'false'); - keep_connections + keep_connections (boolean) This option controls whether postgres_fdw keeps From 3465c8a8692fb628bc2710fbeedb9aeb534b0400 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 30 Jun 2021 20:57:07 +0900 Subject: [PATCH 578/671] doc: Improve descriptions of tup_returned and tup_fetched in pg_stat_database Previously the descriptions of tup_returned and tup_fetched columns in pg_stat_database view were confusing. This commit improves them so that they represent the following formulas of those columns more accurately. * pg_stat_database.tup_returned = sum(pg_stat_all_tables.seq_tup_read) + sum(pg_stat_all_indexes.idx_tup_read) * pg_stat_database.tup_fetched = sum(pg_stat_all_tables.idx_tup_fetch) In these formulas, note that the counters for some system catalogs like pg_database shared across all databases of a cluster are excluded from the calculations of sum. Author: Masahiro Ikeda Reviewed-by: Fujii Masao Discussion: https://postgr.es/m/9eeeccdb-5dd7-90f9-2807-a4b5d2b76ca3@oss.nttdata.com --- doc/src/sgml/monitoring.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index dcbb10fb6ff32..07a042254f986 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -3712,7 +3712,7 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i tup_returned bigint - Number of rows returned by queries in this database + Number of live rows fetched by sequential scans and index entries returned by index scans in this database @@ -3721,7 +3721,7 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i tup_fetched bigint - Number of rows fetched by queries in this database + Number of live rows fetched by index scans in this database From e45b0dfa1f1028948decad3abd3b0f6e913a44b0 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 30 Jun 2021 10:52:20 -0400 Subject: [PATCH 579/671] Fix portability fallout from commit dc227eb82. Give up on trying to mechanically forbid abort() within libpq. Even though there are no such calls in the source code, we've now seen three different scenarios where build toolchains silently insert such calls: gcc does it for profiling, some platforms implement assert() using it, and icc does so for no visible reason. Checking for accidental use of exit() seems considerably more important than checking for abort(), so we'll settle for doing that for now. Also, filter out __cxa_atexit() to avoid a false match. It seems that OpenBSD inserts a call to that despite the fact that libpq contains no C++ code. Discussion: https://postgr.es/m/3128896.1624742969@sss.pgh.pa.us --- src/interfaces/libpq/Makefile | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/interfaces/libpq/Makefile b/src/interfaces/libpq/Makefile index e8cd07e9c9996..c2a35a488af92 100644 --- a/src/interfaces/libpq/Makefile +++ b/src/interfaces/libpq/Makefile @@ -102,13 +102,15 @@ all: all-lib check-libpq-refs include $(top_srcdir)/src/Makefile.shlib backend_src = $(top_srcdir)/src/backend -# Check for functions that libpq must not call, currently abort() and exit(). -# If nm doesn't exist or doesn't work on shlibs, this test will silently -# do nothing, which is fine. The exclusion of _eprintf.o is to prevent -# complaining about infrastructure on ancient macOS releases. +# Check for functions that libpq must not call, currently just exit(). +# (Ideally we'd reject abort() too, but there are various scenarios where +# build toolchains silently insert abort() calls, e.g. when profiling.) +# If nm doesn't exist or doesn't work on shlibs, this test will do nothing, +# which is fine. The exclusion of __cxa_atexit is necessary on OpenBSD, +# which seems to insert references to that even in pure C code. .PHONY: check-libpq-refs check-libpq-refs: $(shlib) - ! nm -A -g -u $< 2>/dev/null | grep -v '_eprintf\.o:' | grep -e abort -e exit + ! nm -A -g -u $< 2>/dev/null | grep -v __cxa_atexit | grep exit # Make dependencies on pg_config_paths.h visible in all builds. fe-connect.o: fe-connect.c $(top_builddir)/src/port/pg_config_paths.h From 3788c66788e9f8c6904c6fe903724c1f44812c4d Mon Sep 17 00:00:00 2001 From: David Rowley Date: Thu, 1 Jul 2021 15:29:06 +1200 Subject: [PATCH 580/671] Improve various places that double the size of a buffer Several places were performing a tight loop to determine the first power of 2 number that's > or >= the required memory. Instead of using a loop for that, we can use pg_nextpower2_32 or pg_nextpower2_64. When we need a power of 2 number equal to or greater than a given amount, we just pass the amount to the nextpower2 function. When we need a power of 2 greater than the amount, we just pass the amount + 1. Additionally, in tsearch there were a couple of locations that were performing a while loop when a simple "if" would have done. In both of these locations only 1 item is being added, so the loop could only have ever iterated once. Changing the loop into an if statement makes the code very slightly more optimal as the condition is checked once rather than twice. There are quite a few remaining locations that increase the size of the buffer in the following form: while (reqsize >= buflen) { buflen *= 2; buf = repalloc(buf, buflen); } These are not touched in this commit. repalloc will error out for sizes larger than MaxAllocSize. Changing these to use pg_nextpower2_32 would remove the chance of that error being raised. It's unclear from the code if the sizes could ever become that large, so err on the side of caution. Discussion: https://postgr.es/m/CAApHDvp=tns7RL4PH0ZR0M+M-YFLquK7218x=0B_zO+DbOma+w@mail.gmail.com Reviewed-by: Zhihong Yu --- src/backend/parser/scan.l | 6 ++---- src/backend/storage/ipc/shm_mq.c | 14 +++++++++----- src/backend/storage/lmgr/lwlock.c | 10 +++------- src/backend/tsearch/spell.c | 3 ++- src/backend/tsearch/ts_parse.c | 2 +- src/backend/utils/cache/inval.c | 4 ++-- src/backend/utils/cache/typcache.c | 6 ++---- 7 files changed, 21 insertions(+), 24 deletions(-) diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l index 9f9d8a17061d1..6e6824faebd28 100644 --- a/src/backend/parser/scan.l +++ b/src/backend/parser/scan.l @@ -39,6 +39,7 @@ #include "parser/gramparse.h" #include "parser/parser.h" /* only needed for GUC variables */ #include "parser/scansup.h" +#include "port/pg_bitutils.h" #include "mb/pg_wchar.h" } @@ -1253,10 +1254,7 @@ addlit(char *ytext, int yleng, core_yyscan_t yyscanner) /* enlarge buffer if needed */ if ((yyextra->literallen + yleng) >= yyextra->literalalloc) { - do - { - yyextra->literalalloc *= 2; - } while ((yyextra->literallen + yleng) >= yyextra->literalalloc); + yyextra->literalalloc = pg_nextpower2_32(yyextra->literallen + yleng + 1); yyextra->literalbuf = (char *) repalloc(yyextra->literalbuf, yyextra->literalalloc); } diff --git a/src/backend/storage/ipc/shm_mq.c b/src/backend/storage/ipc/shm_mq.c index 8a46962f939a3..446f20df4617e 100644 --- a/src/backend/storage/ipc/shm_mq.c +++ b/src/backend/storage/ipc/shm_mq.c @@ -20,6 +20,7 @@ #include "miscadmin.h" #include "pgstat.h" +#include "port/pg_bitutils.h" #include "postmaster/bgworker.h" #include "storage/procsignal.h" #include "storage/shm_mq.h" @@ -720,14 +721,17 @@ shm_mq_receive(shm_mq_handle *mqh, Size *nbytesp, void **datap, bool nowait) */ if (mqh->mqh_buflen < nbytes) { - Size newbuflen = Max(mqh->mqh_buflen, MQH_INITIAL_BUFSIZE); + Size newbuflen; /* - * Double the buffer size until the payload fits, but limit to - * MaxAllocSize. + * Increase size to the next power of 2 that's >= nbytes, but + * limit to MaxAllocSize. */ - while (newbuflen < nbytes) - newbuflen *= 2; +#if SIZEOF_SIZE_T == 4 + newbuflen = pg_nextpower2_32(nbytes); +#else + newbuflen = pg_nextpower2_64(nbytes); +#endif newbuflen = Min(newbuflen, MaxAllocSize); if (mqh->mqh_buffer != NULL) diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index 55b9d7970ec38..ffb6fa36cc508 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -79,6 +79,7 @@ #include "miscadmin.h" #include "pg_trace.h" #include "pgstat.h" +#include "port/pg_bitutils.h" #include "postmaster/postmaster.h" #include "replication/slot.h" #include "storage/ipc.h" @@ -659,9 +660,7 @@ LWLockRegisterTranche(int tranche_id, const char *tranche_name) { int newalloc; - newalloc = Max(LWLockTrancheNamesAllocated, 8); - while (newalloc <= tranche_id) - newalloc *= 2; + newalloc = pg_nextpower2_32(Max(8, tranche_id + 1)); if (LWLockTrancheNames == NULL) LWLockTrancheNames = (const char **) @@ -715,10 +714,7 @@ RequestNamedLWLockTranche(const char *tranche_name, int num_lwlocks) if (NamedLWLockTrancheRequests >= NamedLWLockTrancheRequestsAllocated) { - int i = NamedLWLockTrancheRequestsAllocated; - - while (i <= NamedLWLockTrancheRequests) - i *= 2; + int i = pg_nextpower2_32(NamedLWLockTrancheRequests + 1); NamedLWLockTrancheRequestArray = (NamedLWLockTrancheRequest *) repalloc(NamedLWLockTrancheRequestArray, diff --git a/src/backend/tsearch/spell.c b/src/backend/tsearch/spell.c index ebc89604ac207..934be3d7d33c7 100644 --- a/src/backend/tsearch/spell.c +++ b/src/backend/tsearch/spell.c @@ -1600,7 +1600,8 @@ MergeAffix(IspellDict *Conf, int a1, int a2) else if (*Conf->AffixData[a2] == '\0') return a1; - while (Conf->nAffixData + 1 >= Conf->lenAffixData) + /* Double the size of AffixData if there's not enough space */ + if (Conf->nAffixData + 1 >= Conf->lenAffixData) { Conf->lenAffixData *= 2; Conf->AffixData = (char **) repalloc(Conf->AffixData, diff --git a/src/backend/tsearch/ts_parse.c b/src/backend/tsearch/ts_parse.c index 92d95b4bd4971..d978c8850de98 100644 --- a/src/backend/tsearch/ts_parse.c +++ b/src/backend/tsearch/ts_parse.c @@ -436,7 +436,7 @@ parsetext(Oid cfgId, ParsedText *prs, char *buf, int buflen) static void hladdword(HeadlineParsedText *prs, char *buf, int buflen, int type) { - while (prs->curwords >= prs->lenwords) + if (prs->curwords >= prs->lenwords) { prs->lenwords *= 2; prs->words = (HeadlineWordEntry *) repalloc((void *) prs->words, prs->lenwords * sizeof(HeadlineWordEntry)); diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index dcfd9e83893e9..d22cc5a93b38f 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -106,6 +106,7 @@ #include "catalog/catalog.h" #include "catalog/pg_constraint.h" #include "miscadmin.h" +#include "port/pg_bitutils.h" #include "storage/sinval.h" #include "storage/smgr.h" #include "utils/catcache.h" @@ -799,8 +800,7 @@ MakeSharedInvalidMessagesArray(const SharedInvalidationMessage *msgs, int n) if ((numSharedInvalidMessagesArray + n) > maxSharedInvalidMessagesArray) { - while ((numSharedInvalidMessagesArray + n) > maxSharedInvalidMessagesArray) - maxSharedInvalidMessagesArray *= 2; + maxSharedInvalidMessagesArray = pg_nextpower2_32(numSharedInvalidMessagesArray + n); SharedInvalidMessagesArray = repalloc(SharedInvalidMessagesArray, maxSharedInvalidMessagesArray diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cache/typcache.c index de96e96c8fdd1..976bd9e61aac1 100644 --- a/src/backend/utils/cache/typcache.c +++ b/src/backend/utils/cache/typcache.c @@ -60,6 +60,7 @@ #include "executor/executor.h" #include "lib/dshash.h" #include "optimizer/optimizer.h" +#include "port/pg_bitutils.h" #include "storage/lwlock.h" #include "utils/builtins.h" #include "utils/catcache.h" @@ -1708,10 +1709,7 @@ ensure_record_cache_typmod_slot_exists(int32 typmod) if (typmod >= RecordCacheArrayLen) { - int32 newlen = RecordCacheArrayLen * 2; - - while (typmod >= newlen) - newlen *= 2; + int32 newlen = pg_nextpower2_32(typmod + 1); RecordCacheArray = (TupleDesc *) repalloc(RecordCacheArray, newlen * sizeof(TupleDesc)); From 71ba45a3602da0bdbb518e16e3990cfcf21e5f73 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 1 Jul 2021 09:17:44 +0200 Subject: [PATCH 581/671] Add tests for UNBOUNDED syntax ambiguity There is a syntactic ambiguity in the SQL standard. Since UNBOUNDED is a non-reserved word, it could be the name of a function parameter and be used as an expression. There is a grammar hack to resolve such cases as the keyword. Add some tests to record this behavior. Reviewed-by: Heikki Linnakangas Discussion: https://www.postgresql.org/message-id/flat/b2a09a77-3c8f-7c68-c9b7-824054f87d98%40enterprisedb.com --- src/test/regress/expected/window.out | 140 +++++++++++++++++++++++++++ src/test/regress/sql/window.sql | 66 +++++++++++++ 2 files changed, 206 insertions(+) diff --git a/src/test/regress/expected/window.out b/src/test/regress/expected/window.out index 19e2ac518afe9..bb9ff7f07b5a1 100644 --- a/src/test/regress/expected/window.out +++ b/src/test/regress/expected/window.out @@ -1839,6 +1839,146 @@ window w as | 43 | 42 | 43 (7 rows) +-- There is a syntactic ambiguity in the SQL standard. Since +-- UNBOUNDED is a non-reserved word, it could be the name of a +-- function parameter and be used as an expression. There is a +-- grammar hack to resolve such cases as the keyword. The following +-- tests record this behavior. +CREATE FUNCTION unbounded_syntax_test1a(x int) RETURNS TABLE (a int, b int, c int) +LANGUAGE SQL +BEGIN ATOMIC + SELECT sum(unique1) over (rows between x preceding and x following), + unique1, four + FROM tenk1 WHERE unique1 < 10; +END; +CREATE FUNCTION unbounded_syntax_test1b(x int) RETURNS TABLE (a int, b int, c int) +LANGUAGE SQL +AS $$ + SELECT sum(unique1) over (rows between x preceding and x following), + unique1, four + FROM tenk1 WHERE unique1 < 10; +$$; +-- These will apply the argument to the window specification inside the function. +SELECT * FROM unbounded_syntax_test1a(2); + a | b | c +----+---+--- + 7 | 4 | 0 + 13 | 2 | 2 + 22 | 1 | 1 + 26 | 6 | 2 + 29 | 9 | 1 + 31 | 8 | 0 + 32 | 5 | 1 + 23 | 3 | 3 + 15 | 7 | 3 + 10 | 0 | 0 +(10 rows) + +SELECT * FROM unbounded_syntax_test1b(2); + a | b | c +----+---+--- + 7 | 4 | 0 + 13 | 2 | 2 + 22 | 1 | 1 + 26 | 6 | 2 + 29 | 9 | 1 + 31 | 8 | 0 + 32 | 5 | 1 + 23 | 3 | 3 + 15 | 7 | 3 + 10 | 0 | 0 +(10 rows) + +CREATE FUNCTION unbounded_syntax_test2a(unbounded int) RETURNS TABLE (a int, b int, c int) +LANGUAGE SQL +BEGIN ATOMIC + SELECT sum(unique1) over (rows between unbounded preceding and unbounded following), + unique1, four + FROM tenk1 WHERE unique1 < 10; +END; +CREATE FUNCTION unbounded_syntax_test2b(unbounded int) RETURNS TABLE (a int, b int, c int) +LANGUAGE SQL +AS $$ + SELECT sum(unique1) over (rows between unbounded preceding and unbounded following), + unique1, four + FROM tenk1 WHERE unique1 < 10; +$$; +-- These will not apply the argument but instead treat UNBOUNDED as a keyword. +SELECT * FROM unbounded_syntax_test2a(2); + a | b | c +----+---+--- + 45 | 4 | 0 + 45 | 2 | 2 + 45 | 1 | 1 + 45 | 6 | 2 + 45 | 9 | 1 + 45 | 8 | 0 + 45 | 5 | 1 + 45 | 3 | 3 + 45 | 7 | 3 + 45 | 0 | 0 +(10 rows) + +SELECT * FROM unbounded_syntax_test2b(2); + a | b | c +----+---+--- + 45 | 4 | 0 + 45 | 2 | 2 + 45 | 1 | 1 + 45 | 6 | 2 + 45 | 9 | 1 + 45 | 8 | 0 + 45 | 5 | 1 + 45 | 3 | 3 + 45 | 7 | 3 + 45 | 0 | 0 +(10 rows) + +DROP FUNCTION unbounded_syntax_test1a, unbounded_syntax_test1b, + unbounded_syntax_test2a, unbounded_syntax_test2b; +-- Other tests with token UNBOUNDED in potentially problematic position +CREATE FUNCTION unbounded(x int) RETURNS int LANGUAGE SQL IMMUTABLE RETURN x; +SELECT sum(unique1) over (rows between 1 preceding and 1 following), + unique1, four +FROM tenk1 WHERE unique1 < 10; + sum | unique1 | four +-----+---------+------ + 6 | 4 | 0 + 7 | 2 | 2 + 9 | 1 | 1 + 16 | 6 | 2 + 23 | 9 | 1 + 22 | 8 | 0 + 16 | 5 | 1 + 15 | 3 | 3 + 10 | 7 | 3 + 7 | 0 | 0 +(10 rows) + +SELECT sum(unique1) over (rows between unbounded(1) preceding and unbounded(1) following), + unique1, four +FROM tenk1 WHERE unique1 < 10; + sum | unique1 | four +-----+---------+------ + 6 | 4 | 0 + 7 | 2 | 2 + 9 | 1 | 1 + 16 | 6 | 2 + 23 | 9 | 1 + 22 | 8 | 0 + 16 | 5 | 1 + 15 | 3 | 3 + 10 | 7 | 3 + 7 | 0 | 0 +(10 rows) + +SELECT sum(unique1) over (rows between unbounded.x preceding and unbounded.x following), + unique1, four +FROM tenk1, (values (1)) as unbounded(x) WHERE unique1 < 10; +ERROR: argument of ROWS must not contain variables +LINE 1: SELECT sum(unique1) over (rows between unbounded.x preceding... + ^ +DROP FUNCTION unbounded; -- Check overflow behavior for various integer sizes select x, last_value(x) over (order by x::smallint range between current row and 2147450884 following) from generate_series(32764, 32766) x; diff --git a/src/test/regress/sql/window.sql b/src/test/regress/sql/window.sql index eae5fa6017863..41a8e0d152c52 100644 --- a/src/test/regress/sql/window.sql +++ b/src/test/regress/sql/window.sql @@ -471,6 +471,72 @@ from window w as (order by x desc nulls last range between 2 preceding and 2 following); +-- There is a syntactic ambiguity in the SQL standard. Since +-- UNBOUNDED is a non-reserved word, it could be the name of a +-- function parameter and be used as an expression. There is a +-- grammar hack to resolve such cases as the keyword. The following +-- tests record this behavior. + +CREATE FUNCTION unbounded_syntax_test1a(x int) RETURNS TABLE (a int, b int, c int) +LANGUAGE SQL +BEGIN ATOMIC + SELECT sum(unique1) over (rows between x preceding and x following), + unique1, four + FROM tenk1 WHERE unique1 < 10; +END; + +CREATE FUNCTION unbounded_syntax_test1b(x int) RETURNS TABLE (a int, b int, c int) +LANGUAGE SQL +AS $$ + SELECT sum(unique1) over (rows between x preceding and x following), + unique1, four + FROM tenk1 WHERE unique1 < 10; +$$; + +-- These will apply the argument to the window specification inside the function. +SELECT * FROM unbounded_syntax_test1a(2); +SELECT * FROM unbounded_syntax_test1b(2); + +CREATE FUNCTION unbounded_syntax_test2a(unbounded int) RETURNS TABLE (a int, b int, c int) +LANGUAGE SQL +BEGIN ATOMIC + SELECT sum(unique1) over (rows between unbounded preceding and unbounded following), + unique1, four + FROM tenk1 WHERE unique1 < 10; +END; + +CREATE FUNCTION unbounded_syntax_test2b(unbounded int) RETURNS TABLE (a int, b int, c int) +LANGUAGE SQL +AS $$ + SELECT sum(unique1) over (rows between unbounded preceding and unbounded following), + unique1, four + FROM tenk1 WHERE unique1 < 10; +$$; + +-- These will not apply the argument but instead treat UNBOUNDED as a keyword. +SELECT * FROM unbounded_syntax_test2a(2); +SELECT * FROM unbounded_syntax_test2b(2); + +DROP FUNCTION unbounded_syntax_test1a, unbounded_syntax_test1b, + unbounded_syntax_test2a, unbounded_syntax_test2b; + +-- Other tests with token UNBOUNDED in potentially problematic position +CREATE FUNCTION unbounded(x int) RETURNS int LANGUAGE SQL IMMUTABLE RETURN x; + +SELECT sum(unique1) over (rows between 1 preceding and 1 following), + unique1, four +FROM tenk1 WHERE unique1 < 10; + +SELECT sum(unique1) over (rows between unbounded(1) preceding and unbounded(1) following), + unique1, four +FROM tenk1 WHERE unique1 < 10; + +SELECT sum(unique1) over (rows between unbounded.x preceding and unbounded.x following), + unique1, four +FROM tenk1, (values (1)) as unbounded(x) WHERE unique1 < 10; + +DROP FUNCTION unbounded; + -- Check overflow behavior for various integer sizes select x, last_value(x) over (order by x::smallint range between current row and 2147450884 following) From c8bf5098cbc4f32ca724d830d45d5ceb2ad7f96d Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Thu, 1 Jul 2021 15:32:57 +0300 Subject: [PATCH 582/671] Allow specifying pg_waldump --rmgr option multiple times. Before, if you specified multiple --rmgr options, only the last one took effect. It seems more sensible to select all the specified resource managers. Reviewed-By: Daniel Gustafsson, Julien Rouhaud Discussion: https://www.postgresql.org/message-id/98344bc2-e222-02ad-a75b-81ffc614c155%40iki.fi --- doc/src/sgml/ref/pg_waldump.sgml | 3 ++- src/bin/pg_waldump/pg_waldump.c | 16 +++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/doc/src/sgml/ref/pg_waldump.sgml b/doc/src/sgml/ref/pg_waldump.sgml index 5fcdfe210acb0..432254d2d5d19 100644 --- a/doc/src/sgml/ref/pg_waldump.sgml +++ b/doc/src/sgml/ref/pg_waldump.sgml @@ -142,7 +142,8 @@ PostgreSQL documentation - Only display records generated by the specified resource manager. + Only display records generated by the specified resource manager. You can + specify the option multiple times to select multiple resource managers. If list is passed as name, print a list of valid resource manager names, and exit. diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c index d83847b276deb..74664bef6a46b 100644 --- a/src/bin/pg_waldump/pg_waldump.c +++ b/src/bin/pg_waldump/pg_waldump.c @@ -49,7 +49,8 @@ typedef struct XLogDumpConfig bool stats_per_record; /* filter options */ - int filter_by_rmgr; + bool filter_by_rmgr[RM_MAX_ID + 1]; + bool filter_by_rmgr_enabled; TransactionId filter_by_xid; bool filter_by_xid_enabled; } XLogDumpConfig; @@ -825,7 +826,8 @@ main(int argc, char **argv) config.stop_after_records = -1; config.already_displayed_records = 0; config.follow = false; - config.filter_by_rmgr = -1; + /* filter_by_rmgr array was zeroed by memset above */ + config.filter_by_rmgr_enabled = false; config.filter_by_xid = InvalidTransactionId; config.filter_by_xid_enabled = false; config.stats = false; @@ -884,12 +886,12 @@ main(int argc, char **argv) { if (pg_strcasecmp(optarg, RmgrDescTable[i].rm_name) == 0) { - config.filter_by_rmgr = i; + config.filter_by_rmgr[i] = true; + config.filter_by_rmgr_enabled = true; break; } } - - if (config.filter_by_rmgr == -1) + if (i > RM_MAX_ID) { pg_log_error("resource manager \"%s\" does not exist", optarg); @@ -1098,8 +1100,8 @@ main(int argc, char **argv) } /* apply all specified filters */ - if (config.filter_by_rmgr != -1 && - config.filter_by_rmgr != record->xl_rmid) + if (config.filter_by_rmgr_enabled && + !config.filter_by_rmgr[record->xl_rmid]) continue; if (config.filter_by_xid_enabled && From a0fc813266467d666b8f09ccccaccb700326a296 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Thu, 1 Jul 2021 08:29:10 -0400 Subject: [PATCH 583/671] Fix prove_installcheck to use correct paths when used with PGXS The prove_installcheck recipe in src/Makefile.global.in was emitting bogus paths for a couple of elements when used with PGXS. Here we create a separate recipe for the PGXS case that does it correctly. We also take the opportunity to make the make the file more readable by breaking up the prove_installcheck and prove_check recipes across several lines, and to remove the setting for REGRESS_SHLIB to src/test/recovery/Makefile, which is the only set of tests that actually need it. Backpatch to all live branches Discussion: https://postgr.es/m/f2401388-936b-f4ef-a07c-a0bcc49b3300@dunslane.net --- src/Makefile.global.in | 23 +++++++++++++++++++++-- src/test/recovery/Makefile | 4 ++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/Makefile.global.in b/src/Makefile.global.in index 8f058408210fb..6e2f224cc46cd 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -444,16 +444,35 @@ with_temp_install = \ ifeq ($(enable_tap_tests),yes) +ifndef PGXS define prove_installcheck rm -rf '$(CURDIR)'/tmp_check $(MKDIR_P) '$(CURDIR)'/tmp_check -cd $(srcdir) && TESTDIR='$(CURDIR)' PATH="$(bindir):$$PATH" PGPORT='6$(DEF_PGPORT)' top_builddir='$(CURDIR)/$(top_builddir)' PG_REGRESS='$(CURDIR)/$(top_builddir)/src/test/regress/pg_regress' REGRESS_SHLIB='$(abs_top_builddir)/src/test/regress/regress$(DLSUFFIX)' $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) $(if $(PROVE_TESTS),$(PROVE_TESTS),t/*.pl) +cd $(srcdir) && \ + TESTDIR='$(CURDIR)' PATH="$(bindir):$$PATH" PGPORT='6$(DEF_PGPORT)' \ + top_builddir='$(CURDIR)/$(top_builddir)' \ + PG_REGRESS='$(CURDIR)/$(top_builddir)/src/test/regress/pg_regress' \ + $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) $(if $(PROVE_TESTS),$(PROVE_TESTS),t/*.pl) endef +else # PGXS case +define prove_installcheck +rm -rf '$(CURDIR)'/tmp_check +$(MKDIR_P) '$(CURDIR)'/tmp_check +cd $(srcdir) && \ + TESTDIR='$(CURDIR)' PATH="$(bindir):$$PATH" PGPORT='6$(DEF_PGPORT)' \ + top_builddir='$(top_builddir)' \ + PG_REGRESS='$(top_builddir)/src/test/regress/pg_regress' \ + $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) $(if $(PROVE_TESTS),$(PROVE_TESTS),t/*.pl) +endef +endif # PGXS define prove_check rm -rf '$(CURDIR)'/tmp_check $(MKDIR_P) '$(CURDIR)'/tmp_check -cd $(srcdir) && TESTDIR='$(CURDIR)' $(with_temp_install) PGPORT='6$(DEF_PGPORT)' PG_REGRESS='$(CURDIR)/$(top_builddir)/src/test/regress/pg_regress' REGRESS_SHLIB='$(abs_top_builddir)/src/test/regress/regress$(DLSUFFIX)' $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) $(if $(PROVE_TESTS),$(PROVE_TESTS),t/*.pl) +cd $(srcdir) && \ + TESTDIR='$(CURDIR)' $(with_temp_install) PGPORT='6$(DEF_PGPORT)' \ + PG_REGRESS='$(CURDIR)/$(top_builddir)/src/test/regress/pg_regress' \ + $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) $(if $(PROVE_TESTS),$(PROVE_TESTS),t/*.pl) endef else diff --git a/src/test/recovery/Makefile b/src/test/recovery/Makefile index 96442ceb4e8ba..288c04b86107c 100644 --- a/src/test/recovery/Makefile +++ b/src/test/recovery/Makefile @@ -15,6 +15,10 @@ subdir = src/test/recovery top_builddir = ../../.. include $(top_builddir)/src/Makefile.global +# required for 017_shm.pl +REGRESS_SHLIB=$(abs_top_builddir)/src/test/regress/regress$(DLSUFFIX) +export REGRESS_SHLIB + check: $(prove_check) From 2f7bae2f924d8213a76370f825dc15eb0aa79796 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 1 Jul 2021 10:45:12 -0400 Subject: [PATCH 584/671] Improve build-time check that libpq doesn't call exit(). Further fixes for commit dc227eb82. Per suggestion from Peter Eisentraut, use a stamp-file to control when the check is run, avoiding repeated executions during "make all". Also, remove "-g" switch for nm: it's useless and some versions of nm consider it to conflict with "-u". (Thanks to Noah Misch for running down that portability issue.) Discussion: https://postgr.es/m/3128896.1624742969@sss.pgh.pa.us --- src/interfaces/libpq/.gitignore | 1 + src/interfaces/libpq/Makefile | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/interfaces/libpq/.gitignore b/src/interfaces/libpq/.gitignore index a4afe7c1c6858..7478dc344ac34 100644 --- a/src/interfaces/libpq/.gitignore +++ b/src/interfaces/libpq/.gitignore @@ -1 +1,2 @@ /exports.list +/libpq-refs-stamp diff --git a/src/interfaces/libpq/Makefile b/src/interfaces/libpq/Makefile index c2a35a488af92..dcc693024f1a2 100644 --- a/src/interfaces/libpq/Makefile +++ b/src/interfaces/libpq/Makefile @@ -96,7 +96,7 @@ SHLIB_EXPORTS = exports.txt PKG_CONFIG_REQUIRES_PRIVATE = libssl libcrypto -all: all-lib check-libpq-refs +all: all-lib libpq-refs-stamp # Shared library stuff include $(top_srcdir)/src/Makefile.shlib @@ -108,9 +108,9 @@ backend_src = $(top_srcdir)/src/backend # If nm doesn't exist or doesn't work on shlibs, this test will do nothing, # which is fine. The exclusion of __cxa_atexit is necessary on OpenBSD, # which seems to insert references to that even in pure C code. -.PHONY: check-libpq-refs -check-libpq-refs: $(shlib) - ! nm -A -g -u $< 2>/dev/null | grep -v __cxa_atexit | grep exit +libpq-refs-stamp: $(shlib) + ! nm -A -u $< 2>/dev/null | grep -v __cxa_atexit | grep exit + touch $@ # Make dependencies on pg_config_paths.h visible in all builds. fe-connect.o: fe-connect.c $(top_builddir)/src/port/pg_config_paths.h @@ -141,7 +141,7 @@ uninstall: uninstall-lib clean distclean: clean-lib $(MAKE) -C test $@ - rm -f $(OBJS) pthread.h + rm -f $(OBJS) pthread.h libpq-refs-stamp # Might be left over from a Win32 client-only build rm -f pg_config_paths.h From d700518d744e53994fdded14b23ebc15b031b0dd Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 1 Jul 2021 12:56:30 -0400 Subject: [PATCH 585/671] Don't reset relhasindex for partitioned tables on ANALYZE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commit 0e69f705cc1a introduced code to analyze partitioned table; however, that code fails to preserve pg_class.relhasindex correctly. Fix by observing whether any indexes exist rather than accidentally falling through to assuming none do. Backpatch to 14. Author: Alexander Pyhalov Reviewed-by: Álvaro Herrera Reviewed-by: Zhihong Yu Discussion: https://postgr.es/m/CALNJ-vS1R3Qoe5t4tbzxrkpBtzRbPq1dDcW4RmA_a+oqweF30w@mail.gmail.com --- src/backend/commands/analyze.c | 32 ++++++++++++++++++++-------- src/test/regress/expected/vacuum.out | 22 +++++++++++++++++++ src/test/regress/sql/vacuum.sql | 16 ++++++++++++++ 3 files changed, 61 insertions(+), 9 deletions(-) diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 426c1e671092b..0c9591415e4b9 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -420,20 +420,34 @@ do_analyze_rel(Relation onerel, VacuumParams *params, /* * Open all indexes of the relation, and see if there are any analyzable * columns in the indexes. We do not analyze index columns if there was - * an explicit column list in the ANALYZE command, however. If we are - * doing a recursive scan, we don't want to touch the parent's indexes at - * all. + * an explicit column list in the ANALYZE command, however. + * + * If we are doing a recursive scan, we don't want to touch the parent's + * indexes at all. If we're processing a partitioned table, we need to + * know if there are any indexes, but we don't want to process them. */ - if (!inh) + if (onerel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) + { + List *idxs = RelationGetIndexList(onerel); + + Irel = NULL; + nindexes = 0; + hasindex = idxs != NIL; + list_free(idxs); + } + else if (!inh) + { vac_open_indexes(onerel, AccessShareLock, &nindexes, &Irel); + hasindex = nindexes > 0; + } else { Irel = NULL; nindexes = 0; + hasindex = false; } - hasindex = (nindexes > 0); indexdata = NULL; - if (hasindex) + if (nindexes > 0) { indexdata = (AnlIndexData *) palloc0(nindexes * sizeof(AnlIndexData)); for (ind = 0; ind < nindexes; ind++) @@ -572,7 +586,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params, MemoryContextResetAndDeleteChildren(col_context); } - if (hasindex) + if (nindexes > 0) compute_index_stats(onerel, totalrows, indexdata, nindexes, rows, numrows, @@ -660,10 +674,10 @@ do_analyze_rel(Relation onerel, VacuumParams *params, /* * Partitioned tables don't have storage, so we don't set any fields * in their pg_class entries except for reltuples, which is necessary - * for auto-analyze to work properly. + * for auto-analyze to work properly, and relhasindex. */ vac_update_relstats(onerel, -1, totalrows, - 0, false, InvalidTransactionId, + 0, hasindex, InvalidTransactionId, InvalidMultiXactId, in_outer_xact); } diff --git a/src/test/regress/expected/vacuum.out b/src/test/regress/expected/vacuum.out index e5771462d57b4..3e70e4c788e3c 100644 --- a/src/test/regress/expected/vacuum.out +++ b/src/test/regress/expected/vacuum.out @@ -199,6 +199,28 @@ VACUUM ANALYZE vacparted(a,b,a); ERROR: column "a" of relation "vacparted" appears more than once ANALYZE vacparted(a,b,b); ERROR: column "b" of relation "vacparted" appears more than once +-- partitioned table with index +CREATE TABLE vacparted_i (a int primary key, b varchar(100)) + PARTITION BY HASH (a); +CREATE TABLE vacparted_i1 PARTITION OF vacparted_i + FOR VALUES WITH (MODULUS 2, REMAINDER 0); +CREATE TABLE vacparted_i2 PARTITION OF vacparted_i + FOR VALUES WITH (MODULUS 2, REMAINDER 1); +INSERT INTO vacparted_i SELECT i, 'test_'|| i from generate_series(1,10) i; +VACUUM (ANALYZE) vacparted_i; +VACUUM (FULL) vacparted_i; +VACUUM (FREEZE) vacparted_i; +SELECT relname, relhasindex FROM pg_class + WHERE relname LIKE 'vacparted_i%' AND relkind IN ('p','r') + ORDER BY relname; + relname | relhasindex +--------------+------------- + vacparted_i | t + vacparted_i1 | t + vacparted_i2 | t +(3 rows) + +DROP TABLE vacparted_i; -- multiple tables specified VACUUM vaccluster, vactst; VACUUM vacparted, does_not_exist; diff --git a/src/test/regress/sql/vacuum.sql b/src/test/regress/sql/vacuum.sql index f220fc28a700a..18cb7fd08ac6d 100644 --- a/src/test/regress/sql/vacuum.sql +++ b/src/test/regress/sql/vacuum.sql @@ -170,6 +170,22 @@ VACUUM (FREEZE) vacparted; VACUUM ANALYZE vacparted(a,b,a); ANALYZE vacparted(a,b,b); +-- partitioned table with index +CREATE TABLE vacparted_i (a int primary key, b varchar(100)) + PARTITION BY HASH (a); +CREATE TABLE vacparted_i1 PARTITION OF vacparted_i + FOR VALUES WITH (MODULUS 2, REMAINDER 0); +CREATE TABLE vacparted_i2 PARTITION OF vacparted_i + FOR VALUES WITH (MODULUS 2, REMAINDER 1); +INSERT INTO vacparted_i SELECT i, 'test_'|| i from generate_series(1,10) i; +VACUUM (ANALYZE) vacparted_i; +VACUUM (FULL) vacparted_i; +VACUUM (FREEZE) vacparted_i; +SELECT relname, relhasindex FROM pg_class + WHERE relname LIKE 'vacparted_i%' AND relkind IN ('p','r') + ORDER BY relname; +DROP TABLE vacparted_i; + -- multiple tables specified VACUUM vaccluster, vactst; VACUUM vacparted, does_not_exist; From b741f4c3ee67666aa333dbb25bd71906b3474def Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 1 Jul 2021 13:33:05 -0400 Subject: [PATCH 586/671] Add --clobber-cache option to initdb, for CCA testing. Commit 4656e3d66 replaced the "#define CLOBBER_CACHE_ALWAYS" testing mechanism with a GUC, which has been a great help for doing cache-clobber testing in more efficient ways; but there is a gap in the implementation. The only way to do cache-clobber testing during an initdb run is to use the old method with #define, because one can't set the GUC from outside. Improve this by adding a switch to initdb for the purpose. (Perhaps someday we should let initdb pass through arbitrary "-c NAME=VALUE" switches. Quoting difficulties dissuaded me from attempting that right now, though.) Back-patch to v14 where 4656e3d66 came in. Discussion: https://postgr.es/m/1582507.1624227029@sss.pgh.pa.us --- doc/src/sgml/ref/initdb.sgml | 11 +++++++++++ src/bin/initdb/initdb.c | 26 ++++++++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/doc/src/sgml/ref/initdb.sgml b/doc/src/sgml/ref/initdb.sgml index afd344b4c0641..3077530c7b4e6 100644 --- a/doc/src/sgml/ref/initdb.sgml +++ b/doc/src/sgml/ref/initdb.sgml @@ -388,6 +388,17 @@ PostgreSQL documentation Other, less commonly used, options are also available: + + + + + Run the bootstrap backend with the + debug_invalidate_system_caches_always=1 option. + This takes a very long time and is only of use for deep debugging. + + + + diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 152d21e88bd29..0945d70061948 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -202,6 +202,9 @@ static bool authwarning = false; static const char *boot_options = "-F"; static const char *backend_options = "--single -F -O -j -c search_path=pg_catalog -c exit_on_error=true"; +/* Additional switches to pass to backend (either boot or standalone) */ +static char *extra_options = ""; + static const char *const subdirs[] = { "global", "pg_wal/archive_status", @@ -962,12 +965,12 @@ test_config_settings(void) test_buffs = MIN_BUFS_FOR_CONNS(test_conns); snprintf(cmd, sizeof(cmd), - "\"%s\" --boot -x0 %s " + "\"%s\" --boot -x0 %s %s " "-c max_connections=%d " "-c shared_buffers=%d " "-c dynamic_shared_memory_type=%s " "< \"%s\" > \"%s\" 2>&1", - backend_exec, boot_options, + backend_exec, boot_options, extra_options, test_conns, test_buffs, dynamic_shared_memory_type, DEVNULL, DEVNULL); @@ -998,12 +1001,12 @@ test_config_settings(void) } snprintf(cmd, sizeof(cmd), - "\"%s\" --boot -x0 %s " + "\"%s\" --boot -x0 %s %s " "-c max_connections=%d " "-c shared_buffers=%d " "-c dynamic_shared_memory_type=%s " "< \"%s\" > \"%s\" 2>&1", - backend_exec, boot_options, + backend_exec, boot_options, extra_options, n_connections, test_buffs, dynamic_shared_memory_type, DEVNULL, DEVNULL); @@ -1403,11 +1406,11 @@ bootstrap_template1(void) unsetenv("PGCLIENTENCODING"); snprintf(cmd, sizeof(cmd), - "\"%s\" --boot -x1 -X %u %s %s %s", + "\"%s\" --boot -x1 -X %u %s %s %s %s", backend_exec, wal_segment_size_mb * (1024 * 1024), data_checksums ? "-k" : "", - boot_options, + boot_options, extra_options, debug ? "-d 5" : ""); @@ -2263,6 +2266,7 @@ usage(const char *progname) printf(_(" -X, --waldir=WALDIR location for the write-ahead log directory\n")); printf(_(" --wal-segsize=SIZE size of WAL segments, in megabytes\n")); printf(_("\nLess commonly used options:\n")); + printf(_(" --clobber-cache use cache-clobbering debug option\n")); printf(_(" -d, --debug generate lots of debugging output\n")); printf(_(" -L DIRECTORY where to find the input files\n")); printf(_(" -n, --no-clean do not clean up after errors\n")); @@ -2863,8 +2867,8 @@ initialize_data_directory(void) fflush(stdout); snprintf(cmd, sizeof(cmd), - "\"%s\" %s template1 >%s", - backend_exec, backend_options, + "\"%s\" %s %s template1 >%s", + backend_exec, backend_options, extra_options, DEVNULL); PG_CMD_OPEN; @@ -2943,6 +2947,7 @@ main(int argc, char *argv[]) {"wal-segsize", required_argument, NULL, 12}, {"data-checksums", no_argument, NULL, 'k'}, {"allow-group-access", no_argument, NULL, 'g'}, + {"clobber-cache", no_argument, NULL, 14}, {NULL, 0, NULL, 0} }; @@ -3084,6 +3089,11 @@ main(int argc, char *argv[]) case 'g': SetDataDirectoryCreatePerm(PG_DIR_MODE_GROUP); break; + case 14: + extra_options = psprintf("%s %s", + extra_options, + "-c debug_invalidate_system_caches_always=1"); + break; default: /* getopt_long already emitted a complaint */ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), From b8c4261e5e8dc5c20d033970ec584991638ca041 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Thu, 1 Jul 2021 14:21:09 -0400 Subject: [PATCH 587/671] Add new make targets world-bin and install-world-bin These are the same as world and install-world respectively, but without building or installing the documentation. There are many reasons for wanting to be able to do this, including speed, lack of documentation building tools, and wanting to build other formats of the documentation. Plans for simplifying the buildfarm client code include using these targets. Backpatch to all live branches. Discussion: https://postgr.es/m/6a421136-d462-b043-a8eb-e75b2861f3df@dunslane.net --- GNUmakefile.in | 10 ++++++++++ doc/src/sgml/installation.sgml | 15 +++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/GNUmakefile.in b/GNUmakefile.in index afdfd9f0a6114..0ef3147738edc 100644 --- a/GNUmakefile.in +++ b/GNUmakefile.in @@ -23,6 +23,11 @@ world: # build src/ before contrib/ world-contrib-recurse: world-src-recurse +$(call recurse,world-bin,src config contrib,all) + +# build src/ before contrib/ +world-bin-contrib-recurse: world-bin-src-recurse + html man: $(MAKE) -C doc $@ @@ -39,6 +44,11 @@ install-world: # build src/ before contrib/ install-world-contrib-recurse: install-world-src-recurse +$(call recurse,install-world-bin,src config contrib,install) + +# build src/ before contrib/ +install-world-bin-contrib-recurse: install-world-bin-src-recurse + $(call recurse,installdirs uninstall init-po update-po,doc src config) $(call recurse,distprep coverage,doc src config contrib) diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index 61d0bc8c43f33..9968f2a61cc9b 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -473,6 +473,15 @@ All of PostgreSQL successfully made. Ready to install. The last line displayed should be: PostgreSQL, contrib, and documentation successfully made. Ready to install. + + + + + If you want to build everything that can be built, including the + additional modules (contrib), but without + the documentation, type instead: + +make world-bin @@ -552,6 +561,12 @@ build-postgresql: This also installs the documentation. + + If you built the world without the documentation above, type instead: + +make install-world-bin + + You can use make install-strip instead of make install to strip the executable files and From c0fdc963704983ebd5908dc5acfb4d52303091a4 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 1 Jul 2021 21:27:39 +0200 Subject: [PATCH 588/671] doc: Clean up title case use --- doc/src/sgml/appendix-obsolete-default-roles.sgml | 2 +- doc/src/sgml/btree.sgml | 2 +- doc/src/sgml/logicaldecoding.sgml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/appendix-obsolete-default-roles.sgml b/doc/src/sgml/appendix-obsolete-default-roles.sgml index dec3c50e581a3..ef252435bb63c 100644 --- a/doc/src/sgml/appendix-obsolete-default-roles.sgml +++ b/doc/src/sgml/appendix-obsolete-default-roles.sgml @@ -4,7 +4,7 @@ --> - Default Roles renamed to Predefined Roles + Default Roles Renamed to Predefined Roles default-roles diff --git a/doc/src/sgml/btree.sgml b/doc/src/sgml/btree.sgml index 2b716c6443984..f569f93f35234 100644 --- a/doc/src/sgml/btree.sgml +++ b/doc/src/sgml/btree.sgml @@ -630,7 +630,7 @@ options(relopts local_relopts *) returns - Bottom-up index deletion + Bottom-up Index Deletion B-Tree indexes are not directly aware that under MVCC, there might be multiple extant versions of the same logical table row; to an diff --git a/doc/src/sgml/logicaldecoding.sgml b/doc/src/sgml/logicaldecoding.sgml index 985db5ca11e72..002efc86b433f 100644 --- a/doc/src/sgml/logicaldecoding.sgml +++ b/doc/src/sgml/logicaldecoding.sgml @@ -1267,7 +1267,7 @@ stream_commit_cb(...); <-- commit of the streamed transaction - Two-phase commit support for Logical Decoding + Two-phase Commit Support for Logical Decoding With the basic output plugin callbacks (eg., begin_cb, From 7355c241ed002496d70882eccea6027726e2fb5a Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Thu, 1 Jul 2021 15:38:06 -0400 Subject: [PATCH 589/671] add missing tag from commit b8c4261e5e --- GNUmakefile.in | 10 ---------- doc/src/sgml/installation.sgml | 10 ++-------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/GNUmakefile.in b/GNUmakefile.in index 0ef3147738edc..2352fc1171aec 100644 --- a/GNUmakefile.in +++ b/GNUmakefile.in @@ -10,15 +10,10 @@ include $(top_builddir)/src/Makefile.global $(call recurse,all install,src config) -all: - +@echo "All of PostgreSQL successfully made. Ready to install." - docs: $(MAKE) -C doc all $(call recurse,world,doc src config contrib,all) -world: - +@echo "PostgreSQL, contrib, and documentation successfully made. Ready to install." # build src/ before contrib/ world-contrib-recurse: world-src-recurse @@ -31,15 +26,10 @@ world-bin-contrib-recurse: world-bin-src-recurse html man: $(MAKE) -C doc $@ -install: - +@echo "PostgreSQL installation complete." - install-docs: $(MAKE) -C doc install $(call recurse,install-world,doc src config contrib,install) -install-world: - +@echo "PostgreSQL, contrib, and documentation installation complete." # build src/ before contrib/ install-world-contrib-recurse: install-world-src-recurse diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index 9968f2a61cc9b..05b77ec8e6643 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -457,10 +457,7 @@ su - postgres (Remember to use GNU make.) The build will take a few minutes depending on your - hardware. The last line displayed should be: - -All of PostgreSQL successfully made. Ready to install. - + hardware. @@ -469,10 +466,6 @@ All of PostgreSQL successfully made. Ready to install. (contrib), type instead: make world - - The last line displayed should be: - -PostgreSQL, contrib, and documentation successfully made. Ready to install. @@ -565,6 +558,7 @@ build-postgresql: If you built the world without the documentation above, type instead: make install-world-bin + From 1708f6b38aaf1b9375b5ca82792425410c98d441 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 1 Jul 2021 22:23:37 +0200 Subject: [PATCH 590/671] doc: Remove inappropriate tags --- doc/src/sgml/brin.sgml | 2 +- doc/src/sgml/datatype.sgml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/brin.sgml b/doc/src/sgml/brin.sgml index ce7c2105755db..39c01dc680856 100644 --- a/doc/src/sgml/brin.sgml +++ b/doc/src/sgml/brin.sgml @@ -753,7 +753,7 @@ LOG: request for BRIN range summarization for index "brin_wi_idx" page 128 was - minmax-multi operator classes accept these parameters: + minmax-multi operator classes accept these parameters: diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index de561cded1e92..c473d6a746187 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -4925,7 +4925,7 @@ WHERE ...
- <acronym>pg_lsn Type</acronym> + <type>pg_lsn</type> Type pg_lsn From b44669b2ca6a510b2c81cbe74c704d59226d729c Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 2 Jul 2021 09:35:12 +0900 Subject: [PATCH 591/671] Simplify error handing of jsonapi.c for the frontend This commit removes a dependency to the central logging facilities in the JSON parsing routines of src/common/, which existed to log errors when seeing error codes that do not match any existing values in JsonParseErrorType, which is not something that should never happen. The routine providing a detailed error message based on the error code is made backend-only, the existing code being unsafe to use in the frontend as the error message may finish by being palloc'd or point to a static string, so there is no way to know if the memory of the message should be pfree'd or not. The only user of this routine in the frontend was pg_verifybackup, that is changed to use a more generic error message on parsing failure. Note that making this code more resilient to OOM failures if used in shared libraries would require much more work as a lot of code paths still rely on palloc() & friends, but we are not sure yet if we need to go down to that. Still, removing the dependency to logging is a step toward more portability. This cleans up the handling of check_stack_depth() while on it, as it exists only in the backend. Per discussion with Jacob Champion and Tom Lane. Discussion: https://postgr.es/m/YNwL7kXwn3Cckbd6@paquier.xyz --- src/bin/pg_verifybackup/parse_manifest.c | 2 +- src/bin/pg_verifybackup/t/005_bad_manifest.pl | 2 +- src/common/jsonapi.c | 61 +++++++++---------- 3 files changed, 32 insertions(+), 33 deletions(-) diff --git a/src/bin/pg_verifybackup/parse_manifest.c b/src/bin/pg_verifybackup/parse_manifest.c index 3b13ae5b8464a..c7ccc78c70176 100644 --- a/src/bin/pg_verifybackup/parse_manifest.c +++ b/src/bin/pg_verifybackup/parse_manifest.c @@ -147,7 +147,7 @@ json_parse_manifest(JsonManifestParseContext *context, char *buffer, /* Run the actual JSON parser. */ json_error = pg_parse_json(lex, &sem); if (json_error != JSON_SUCCESS) - json_manifest_parse_failure(context, json_errdetail(json_error, lex)); + json_manifest_parse_failure(context, "parsing failed"); if (parse.state != JM_EXPECT_EOF) json_manifest_parse_failure(context, "manifest ended unexpectedly"); diff --git a/src/bin/pg_verifybackup/t/005_bad_manifest.pl b/src/bin/pg_verifybackup/t/005_bad_manifest.pl index 9f8a100a716bf..4f5b8f5a4991b 100644 --- a/src/bin/pg_verifybackup/t/005_bad_manifest.pl +++ b/src/bin/pg_verifybackup/t/005_bad_manifest.pl @@ -16,7 +16,7 @@ test_bad_manifest( 'input string ended unexpectedly', - qr/could not parse backup manifest: The input string ended unexpectedly/, + qr/could not parse backup manifest: parsing failed/, <semstate); @@ -478,7 +469,9 @@ parse_array(JsonLexContext *lex, JsonSemAction *sem) json_struct_action aend = sem->array_end; JsonParseErrorType result; +#ifndef FRONTEND check_stack_depth(); +#endif if (astart != NULL) (*astart) (sem->semstate); @@ -1044,15 +1037,34 @@ report_parse_error(JsonParseContext ctx, JsonLexContext *lex) /* * We don't use a default: case, so that the compiler will warn about - * unhandled enum values. But this needs to be here anyway to cover the - * possibility of an incorrect input. + * unhandled enum values. */ - json_log_and_abort("unexpected json parse state: %d", (int) ctx); + Assert(false); return JSON_SUCCESS; /* silence stupider compilers */ } + +#ifndef FRONTEND +/* + * Extract the current token from a lexing context, for error reporting. + */ +static char * +extract_token(JsonLexContext *lex) +{ + int toklen = lex->token_terminator - lex->token_start; + char *token = palloc(toklen + 1); + + memcpy(token, lex->token_start, toklen); + token[toklen] = '\0'; + return token; +} + /* * Construct a detail message for a JSON error. + * + * Note that the error message generated by this routine may not be + * palloc'd, making it unsafe for frontend code as there is no way to + * know if this can be safery pfree'd or not. */ char * json_errdetail(JsonParseErrorType error, JsonLexContext *lex) @@ -1115,20 +1127,7 @@ json_errdetail(JsonParseErrorType error, JsonLexContext *lex) * unhandled enum values. But this needs to be here anyway to cover the * possibility of an incorrect input. */ - json_log_and_abort("unexpected json parse error type: %d", (int) error); - return NULL; /* silence stupider compilers */ -} - -/* - * Extract the current token from a lexing context, for error reporting. - */ -static char * -extract_token(JsonLexContext *lex) -{ - int toklen = lex->token_terminator - lex->token_start; - char *token = palloc(toklen + 1); - - memcpy(token, lex->token_start, toklen); - token[toklen] = '\0'; - return token; + elog(ERROR, "unexpected json parse error type: %d", (int) error); + return NULL; } +#endif From a2595e039c4745d82f361ea15d692cac114575cc Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 2 Jul 2021 13:07:16 +1200 Subject: [PATCH 592/671] Remove some dead stores. Remove redundant local variable assignments left behind by commit 2fc7af5e966. Author: Quan Zongliang Reviewed-by: Jacob Champion Discussion: https://postgr.es/m/de141d14-4fd6-3148-99bf-856b71aa948a%40yeah.net --- src/backend/storage/ipc/procarray.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 793df973b4248..4c91e721d0c57 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -4380,8 +4380,6 @@ RecordKnownAssignedTransactionIds(TransactionId xid) /* ShmemVariableCache->nextXid must be beyond any observed xid */ AdvanceNextFullTransactionIdPastXid(latestObservedXid); - next_expected_xid = latestObservedXid; - TransactionIdAdvance(next_expected_xid); } } From 70685385d70f8da73ab189a72f46311091ff09be Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 2 Jul 2021 12:58:34 +0900 Subject: [PATCH 593/671] Use WaitLatch() instead of pg_usleep() at end-of-vacuum truncation This has the advantage to make a process more responsive when the postmaster dies, even if the wait time was rather limited as there was only a 50ms timeout here. Another advantage of this change is for monitoring, as we gain a new wait event for the end-of-vacuum truncation. Author: Bharath Rupireddy Reviewed-by: Aleksander Alekseev, Thomas Munro, Michael Paquier Discussion: https://postgr.es/m/CALj2ACU4AdPCq6NLfcA-ZGwX7pPCK5FgEj-CAU0xCKzkASSy_A@mail.gmail.com --- doc/src/sgml/monitoring.sgml | 5 +++++ src/backend/access/heap/vacuumlazy.c | 6 +++++- src/backend/utils/activity/wait_event.c | 3 +++ src/include/utils/wait_event.h | 3 ++- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 07a042254f986..643e1ad49fd88 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -2242,6 +2242,11 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser VacuumDelay Waiting in a cost-based vacuum delay point. + + VacuumTruncate + Waiting to acquire an exclusive lock to truncate off any + empty pages at the end of a table vacuumed. + diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 44f198398c19d..2c04b69221f44 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -3236,7 +3236,11 @@ lazy_truncate_heap(LVRelState *vacrel) return; } - pg_usleep(VACUUM_TRUNCATE_LOCK_WAIT_INTERVAL * 1000L); + (void) WaitLatch(MyLatch, + WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH, + VACUUM_TRUNCATE_LOCK_WAIT_INTERVAL, + WAIT_EVENT_VACUUM_TRUNCATE); + ResetLatch(MyLatch); } /* diff --git a/src/backend/utils/activity/wait_event.c b/src/backend/utils/activity/wait_event.c index 6baf67740c7dd..ef7e6bfb779ff 100644 --- a/src/backend/utils/activity/wait_event.c +++ b/src/backend/utils/activity/wait_event.c @@ -485,6 +485,9 @@ pgstat_get_wait_timeout(WaitEventTimeout w) case WAIT_EVENT_VACUUM_DELAY: event_name = "VacuumDelay"; break; + case WAIT_EVENT_VACUUM_TRUNCATE: + event_name = "VacuumTruncate"; + break; /* no default case, so that compiler will warn */ } diff --git a/src/include/utils/wait_event.h b/src/include/utils/wait_event.h index 6c6ec2e7118fa..6007827b44588 100644 --- a/src/include/utils/wait_event.h +++ b/src/include/utils/wait_event.h @@ -140,7 +140,8 @@ typedef enum WAIT_EVENT_PG_SLEEP, WAIT_EVENT_RECOVERY_APPLY_DELAY, WAIT_EVENT_RECOVERY_RETRIEVE_RETRY_INTERVAL, - WAIT_EVENT_VACUUM_DELAY + WAIT_EVENT_VACUUM_DELAY, + WAIT_EVENT_VACUUM_TRUNCATE } WaitEventTimeout; /* ---------- From 6bd3ec62d9d7921fad2125bbeb5f2eafbbb261e5 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 2 Jul 2021 11:59:55 +0200 Subject: [PATCH 594/671] Use InvalidBucket instead of -1 where appropriate Reported-by: Ranier Vilela Discussion: https://www.postgresql.org/message-id/flat/CAEudQAp%3DZwKjrP4L%2BCzqV7SmWiaQidPPRqj4tqdjDG4KBx5yrg%40mail.gmail.com --- src/backend/access/hash/hash_xlog.c | 2 +- src/backend/access/hash/hashovfl.c | 4 ++-- src/backend/access/hash/hashpage.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/access/hash/hash_xlog.c b/src/backend/access/hash/hash_xlog.c index af35a991fc300..27475fcbd6d74 100644 --- a/src/backend/access/hash/hash_xlog.c +++ b/src/backend/access/hash/hash_xlog.c @@ -733,7 +733,7 @@ hash_xlog_squeeze_page(XLogReaderState *record) ovflopaque->hasho_prevblkno = InvalidBlockNumber; ovflopaque->hasho_nextblkno = InvalidBlockNumber; - ovflopaque->hasho_bucket = -1; + ovflopaque->hasho_bucket = InvalidBucket; ovflopaque->hasho_flag = LH_UNUSED_PAGE; ovflopaque->hasho_page_id = HASHO_PAGE_ID; diff --git a/src/backend/access/hash/hashovfl.c b/src/backend/access/hash/hashovfl.c index 1ff2e0c18ee0f..404f2b6221224 100644 --- a/src/backend/access/hash/hashovfl.c +++ b/src/backend/access/hash/hashovfl.c @@ -603,7 +603,7 @@ _hash_freeovflpage(Relation rel, Buffer bucketbuf, Buffer ovflbuf, ovflopaque->hasho_prevblkno = InvalidBlockNumber; ovflopaque->hasho_nextblkno = InvalidBlockNumber; - ovflopaque->hasho_bucket = -1; + ovflopaque->hasho_bucket = InvalidBucket; ovflopaque->hasho_flag = LH_UNUSED_PAGE; ovflopaque->hasho_page_id = HASHO_PAGE_ID; @@ -753,7 +753,7 @@ _hash_initbitmapbuffer(Buffer buf, uint16 bmsize, bool initpage) op = (HashPageOpaque) PageGetSpecialPointer(pg); op->hasho_prevblkno = InvalidBlockNumber; op->hasho_nextblkno = InvalidBlockNumber; - op->hasho_bucket = -1; + op->hasho_bucket = InvalidBucket; op->hasho_flag = LH_BITMAP_PAGE; op->hasho_page_id = HASHO_PAGE_ID; diff --git a/src/backend/access/hash/hashpage.c b/src/backend/access/hash/hashpage.c index 49a9867787689..c5c2382b36aff 100644 --- a/src/backend/access/hash/hashpage.c +++ b/src/backend/access/hash/hashpage.c @@ -531,7 +531,7 @@ _hash_init_metabuffer(Buffer buf, double num_tuples, RegProcedure procid, pageopaque = (HashPageOpaque) PageGetSpecialPointer(page); pageopaque->hasho_prevblkno = InvalidBlockNumber; pageopaque->hasho_nextblkno = InvalidBlockNumber; - pageopaque->hasho_bucket = -1; + pageopaque->hasho_bucket = InvalidBucket; pageopaque->hasho_flag = LH_META_PAGE; pageopaque->hasho_page_id = HASHO_PAGE_ID; @@ -1013,7 +1013,7 @@ _hash_alloc_buckets(Relation rel, BlockNumber firstblock, uint32 nblocks) ovflopaque->hasho_prevblkno = InvalidBlockNumber; ovflopaque->hasho_nextblkno = InvalidBlockNumber; - ovflopaque->hasho_bucket = -1; + ovflopaque->hasho_bucket = InvalidBucket; ovflopaque->hasho_flag = LH_UNUSED_PAGE; ovflopaque->hasho_page_id = HASHO_PAGE_ID; From 50371df266d4c8f4faaf448cbd789d9697443952 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 2 Jul 2021 16:04:54 -0400 Subject: [PATCH 595/671] Don't try to print data type names in slot_store_error_callback(). The existing code tried to do syscache lookups in an already-failed transaction, which is problematic to say the least. After some consideration of alternatives, the best fix seems to be to just drop type names from the error message altogether. The table and column names seem like sufficient localization. If the user is unsure what types are involved, she can check the local and remote table definitions. Having done that, we can also discard the LogicalRepTypMap hash table, which had no other use. Arguably, LOGICAL_REP_MSG_TYPE replication messages are now obsolete as well; but we should probably keep them in case some other use emerges. (The complexity of removing something from the replication protocol would likely outweigh any savings anyhow.) Masahiko Sawada and Bharath Rupireddy, per complaint from Andres Freund. Back-patch to v10 where this code originated. Discussion: https://postgr.es/m/20210106020229.ne5xnuu6wlondjpe@alap3.anarazel.de --- src/backend/replication/logical/relation.c | 105 +-------------------- src/backend/replication/logical/worker.c | 32 +------ src/include/replication/logicalrelation.h | 3 - 3 files changed, 6 insertions(+), 134 deletions(-) diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c index 4930f2ca348f9..c37e2a7e29d26 100644 --- a/src/backend/replication/logical/relation.c +++ b/src/backend/replication/logical/relation.c @@ -17,7 +17,6 @@ #include "postgres.h" -#include "access/sysattr.h" #include "access/table.h" #include "catalog/namespace.h" #include "catalog/pg_subscription_rel.h" @@ -25,16 +24,12 @@ #include "nodes/makefuncs.h" #include "replication/logicalrelation.h" #include "replication/worker_internal.h" -#include "utils/builtins.h" #include "utils/inval.h" -#include "utils/lsyscache.h" -#include "utils/memutils.h" -#include "utils/syscache.h" + static MemoryContext LogicalRepRelMapContext = NULL; static HTAB *LogicalRepRelMap = NULL; -static HTAB *LogicalRepTypMap = NULL; /* * Partition map (LogicalRepPartMap) @@ -118,15 +113,6 @@ logicalrep_relmap_init(void) LogicalRepRelMap = hash_create("logicalrep relation map cache", 128, &ctl, HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); - /* Initialize the type hash table. */ - ctl.keysize = sizeof(Oid); - ctl.entrysize = sizeof(LogicalRepTyp); - ctl.hcxt = LogicalRepRelMapContext; - - /* This will usually be small. */ - LogicalRepTypMap = hash_create("logicalrep type map cache", 2, &ctl, - HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); - /* Watch for invalidation events. */ CacheRegisterRelcacheCallback(logicalrep_relmap_invalidate_cb, (Datum) 0); @@ -450,95 +436,6 @@ logicalrep_rel_close(LogicalRepRelMapEntry *rel, LOCKMODE lockmode) rel->localrel = NULL; } -/* - * Free the type map cache entry data. - */ -static void -logicalrep_typmap_free_entry(LogicalRepTyp *entry) -{ - pfree(entry->nspname); - pfree(entry->typname); -} - -/* - * Add new entry or update existing entry in the type map cache. - */ -void -logicalrep_typmap_update(LogicalRepTyp *remotetyp) -{ - MemoryContext oldctx; - LogicalRepTyp *entry; - bool found; - - if (LogicalRepTypMap == NULL) - logicalrep_relmap_init(); - - /* - * HASH_ENTER returns the existing entry if present or creates a new one. - */ - entry = hash_search(LogicalRepTypMap, (void *) &remotetyp->remoteid, - HASH_ENTER, &found); - - if (found) - logicalrep_typmap_free_entry(entry); - - /* Make cached copy of the data */ - entry->remoteid = remotetyp->remoteid; - oldctx = MemoryContextSwitchTo(LogicalRepRelMapContext); - entry->nspname = pstrdup(remotetyp->nspname); - entry->typname = pstrdup(remotetyp->typname); - MemoryContextSwitchTo(oldctx); -} - -/* - * Fetch type name from the cache by remote type OID. - * - * Return a substitute value if we cannot find the data type; no message is - * sent to the log in that case, because this is used by error callback - * already. - */ -char * -logicalrep_typmap_gettypname(Oid remoteid) -{ - LogicalRepTyp *entry; - bool found; - - /* Internal types are mapped directly. */ - if (remoteid < FirstGenbkiObjectId) - { - if (!get_typisdefined(remoteid)) - { - /* - * This can be caused by having a publisher with a higher - * PostgreSQL major version than the subscriber. - */ - return psprintf("unrecognized %u", remoteid); - } - - return format_type_be(remoteid); - } - - if (LogicalRepTypMap == NULL) - { - /* - * If the typemap is not initialized yet, we cannot possibly attempt - * to search the hash table; but there's no way we know the type - * locally yet, since we haven't received a message about this type, - * so this is the best we can do. - */ - return psprintf("unrecognized %u", remoteid); - } - - /* search the mapping */ - entry = hash_search(LogicalRepTypMap, (void *) &remoteid, - HASH_FIND, &found); - if (!found) - return psprintf("unrecognized %u", remoteid); - - Assert(OidIsValid(entry->remoteid)); - return psprintf("%s.%s", entry->nspname, entry->typname); -} - /* * Partition cache: look up partition LogicalRepRelMapEntry's * diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index bbb659dad063e..5fc620c7f1900 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -132,7 +132,6 @@ static dlist_head lsn_mapping = DLIST_STATIC_INIT(lsn_mapping); typedef struct SlotErrCallbackArg { LogicalRepRelMapEntry *rel; - int local_attnum; int remote_attnum; } SlotErrCallbackArg; @@ -503,36 +502,23 @@ slot_fill_defaults(LogicalRepRelMapEntry *rel, EState *estate, } /* - * Error callback to give more context info about type conversion failure. + * Error callback to give more context info about data conversion failures + * while reading data from the remote server. */ static void slot_store_error_callback(void *arg) { SlotErrCallbackArg *errarg = (SlotErrCallbackArg *) arg; LogicalRepRelMapEntry *rel; - char *remotetypname; - Oid remotetypoid, - localtypoid; /* Nothing to do if remote attribute number is not set */ if (errarg->remote_attnum < 0) return; rel = errarg->rel; - remotetypoid = rel->remoterel.atttyps[errarg->remote_attnum]; - - /* Fetch remote type name from the LogicalRepTypMap cache */ - remotetypname = logicalrep_typmap_gettypname(remotetypoid); - - /* Fetch local type OID from the local sys cache */ - localtypoid = get_atttype(rel->localreloid, errarg->local_attnum + 1); - - errcontext("processing remote data for replication target relation \"%s.%s\" column \"%s\", " - "remote type %s, local type %s", + errcontext("processing remote data for replication target relation \"%s.%s\" column \"%s\"", rel->remoterel.nspname, rel->remoterel.relname, - rel->remoterel.attnames[errarg->remote_attnum], - remotetypname, - format_type_be(localtypoid)); + rel->remoterel.attnames[errarg->remote_attnum]); } /* @@ -553,7 +539,6 @@ slot_store_data(TupleTableSlot *slot, LogicalRepRelMapEntry *rel, /* Push callback + info on the error context stack */ errarg.rel = rel; - errarg.local_attnum = -1; errarg.remote_attnum = -1; errcallback.callback = slot_store_error_callback; errcallback.arg = (void *) &errarg; @@ -573,7 +558,6 @@ slot_store_data(TupleTableSlot *slot, LogicalRepRelMapEntry *rel, Assert(remoteattnum < tupleData->ncols); - errarg.local_attnum = i; errarg.remote_attnum = remoteattnum; if (tupleData->colstatus[remoteattnum] == LOGICALREP_COLUMN_TEXT) @@ -622,7 +606,6 @@ slot_store_data(TupleTableSlot *slot, LogicalRepRelMapEntry *rel, slot->tts_isnull[i] = true; } - errarg.local_attnum = -1; errarg.remote_attnum = -1; } else @@ -679,7 +662,6 @@ slot_modify_data(TupleTableSlot *slot, TupleTableSlot *srcslot, /* For error reporting, push callback + info on the error context stack */ errarg.rel = rel; - errarg.local_attnum = -1; errarg.remote_attnum = -1; errcallback.callback = slot_store_error_callback; errcallback.arg = (void *) &errarg; @@ -702,7 +684,6 @@ slot_modify_data(TupleTableSlot *slot, TupleTableSlot *srcslot, { StringInfo colvalue = &tupleData->colvalues[remoteattnum]; - errarg.local_attnum = i; errarg.remote_attnum = remoteattnum; if (tupleData->colstatus[remoteattnum] == LOGICALREP_COLUMN_TEXT) @@ -747,7 +728,6 @@ slot_modify_data(TupleTableSlot *slot, TupleTableSlot *srcslot, slot->tts_isnull[i] = true; } - errarg.local_attnum = -1; errarg.remote_attnum = -1; } } @@ -1217,8 +1197,7 @@ apply_handle_relation(StringInfo s) /* * Handle TYPE message. * - * Note we don't do local mapping here, that's done when the type is - * actually used. + * This is now vestigial; we read the info and discard it. */ static void apply_handle_type(StringInfo s) @@ -1229,7 +1208,6 @@ apply_handle_type(StringInfo s) return; logicalrep_read_typ(s, &typ); - logicalrep_typmap_update(&typ); } /* diff --git a/src/include/replication/logicalrelation.h b/src/include/replication/logicalrelation.h index 3f0b3deefb8ce..3c662d3abcf81 100644 --- a/src/include/replication/logicalrelation.h +++ b/src/include/replication/logicalrelation.h @@ -46,7 +46,4 @@ extern LogicalRepRelMapEntry *logicalrep_partition_open(LogicalRepRelMapEntry *r extern void logicalrep_rel_close(LogicalRepRelMapEntry *rel, LOCKMODE lockmode); -extern void logicalrep_typmap_update(LogicalRepTyp *remotetyp); -extern char *logicalrep_typmap_gettypname(Oid remoteid); - #endif /* LOGICALRELATION_H */ From c552e171d16e461c7af60cfe1a891c87be9cbbbf Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 2 Jul 2021 18:00:30 -0400 Subject: [PATCH 596/671] docs: clarify new aggressive vacuum mode for multi-xacts Reported-by: eric.mutta@gmail.com Discussion: https://postgr.es/m/162395467510.686.11947486273299446208@wrigleys.postgresql.org Backpatch-through: 14 --- doc/src/sgml/maintenance.sgml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml index 4b535809b63ed..998a48fc25798 100644 --- a/doc/src/sgml/maintenance.sgml +++ b/doc/src/sgml/maintenance.sgml @@ -697,14 +697,14 @@ HINT: Stop the postmaster and vacuum that database in single-user mode. - As a safety device, an aggressive vacuum scan will occur for any table - whose multixact-age is greater than - . Aggressive - vacuum scans will also occur progressively for all tables, starting with - those that have the oldest multixact-age, if the amount of used member - storage space exceeds the amount 50% of the addressable storage space. - Both of these kinds of aggressive scans will occur even if autovacuum is - nominally disabled. + As a safety device, an aggressive vacuum scan will + occur for any table whose multixact-age (see ) is greater than . Also, if the + storage occupied by multixacts members exceeds 2GB, aggressive vacuum + scans will occur more often for all tables, starting with those that + have the oldest multixact-age. Both of these kinds of aggressive + scans will occur even if autovacuum is nominally disabled. From d390bb62a6332f8a913c2c2021d56d6dba5a1dce Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 2 Jul 2021 20:42:46 -0400 Subject: [PATCH 597/671] doc: adjust "cities" example to be consistent with other SQL Reported-by: tom@crystae.net Discussion: https://postgr.es/m/162345756191.14472.9754568432103008703@wrigleys.postgresql.org Backpatch-through: 9.6 --- doc/src/sgml/advanced.sgml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/advanced.sgml b/doc/src/sgml/advanced.sgml index 2d4ab85d450c1..71ae423f631e1 100644 --- a/doc/src/sgml/advanced.sgml +++ b/doc/src/sgml/advanced.sgml @@ -46,7 +46,7 @@ CREATE VIEW myview AS - SELECT city, temp_lo, temp_hi, prcp, date, location + SELECT name, temp_lo, temp_hi, prcp, date, location FROM weather, cities WHERE city = name; @@ -101,12 +101,12 @@ SELECT * FROM myview; CREATE TABLE cities ( - city varchar(80) primary key, + name varchar(80) primary key, location point ); CREATE TABLE weather ( - city varchar(80) references cities(city), + city varchar(80) references cities(name), temp_lo int, temp_hi int, prcp real, From 792259591c0fc19c42247fc7668b1064d1e850d4 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 3 Jul 2021 11:21:40 -0400 Subject: [PATCH 598/671] Further restrict the scope of no-exit()-in-libpq test. Disable this check altogether in --enable-coverage builds, because newer versions of gcc insert exit() as well as abort() calls for that. Also disable it on AIX and Solaris, because those platforms tend to provide facilities such as libldap as static libraries, which then get included in libpq's shlib. We can't expect such libraries to honor our coding rules. (That platform list might need additional tweaking, but I think this is enough to keep the buildfarm happy.) Per reports from Jacob Champion and Noah Misch. Discussion: https://postgr.es/m/3128896.1624742969@sss.pgh.pa.us --- src/interfaces/libpq/Makefile | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/interfaces/libpq/Makefile b/src/interfaces/libpq/Makefile index dcc693024f1a2..94c3c73e41062 100644 --- a/src/interfaces/libpq/Makefile +++ b/src/interfaces/libpq/Makefile @@ -104,12 +104,20 @@ backend_src = $(top_srcdir)/src/backend # Check for functions that libpq must not call, currently just exit(). # (Ideally we'd reject abort() too, but there are various scenarios where -# build toolchains silently insert abort() calls, e.g. when profiling.) +# build toolchains insert abort() calls, e.g. to implement assert().) # If nm doesn't exist or doesn't work on shlibs, this test will do nothing, # which is fine. The exclusion of __cxa_atexit is necessary on OpenBSD, # which seems to insert references to that even in pure C code. +# Skip the test when profiling, as gcc may insert exit() calls for that. +# Also skip the test on platforms where libpq infrastructure may be provided +# by statically-linked libraries, as we can't expect them to honor this +# coding rule. libpq-refs-stamp: $(shlib) +ifneq ($(enable_coverage), yes) +ifeq (,$(filter aix solaris,$(PORTNAME))) ! nm -A -u $< 2>/dev/null | grep -v __cxa_atexit | grep exit +endif +endif touch $@ # Make dependencies on pg_config_paths.h visible in all builds. From 63b1af94375cc2be06a5d6a932db24cd8e9f45e9 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Sun, 4 Jul 2021 18:47:31 +1200 Subject: [PATCH 599/671] Cleanup some aggregate code in the executor Here we alter the code that calls build_pertrans_for_aggref() so that the function no longer needs to special-case whether it's dealing with an aggtransfn or an aggcombinefn. This allows us to reuse the build_aggregate_transfn_expr() function and just get rid of the build_aggregate_combinefn_expr() completely. All of the special case code that was in build_pertrans_for_aggref() has been moved up to the calling functions. This saves about a dozen lines of code in nodeAgg.c and a few dozen more in parse_agg.c Also, rename a few variables in nodeAgg.c to try to make it more clear that we're working with either a aggtransfn or an aggcombinefn. Some of the old names would have you believe that we were always working with an aggtransfn. Discussion: https://postgr.es/m/CAApHDvptMQ9FmF0D67zC_w88yVnoNVR2+kkOQGUrCmdxWxLULQ@mail.gmail.com --- src/backend/executor/nodeAgg.c | 234 ++++++++++++++++----------------- src/backend/parser/parse_agg.c | 34 +---- src/include/parser/parse_agg.h | 5 - 3 files changed, 118 insertions(+), 155 deletions(-) diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index 8440a76fbdc9e..914b02ceee48e 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -461,10 +461,11 @@ static void hashagg_tapeinfo_release(HashTapeInfo *tapeinfo, int tapenum); static Datum GetAggInitVal(Datum textInitVal, Oid transtype); static void build_pertrans_for_aggref(AggStatePerTrans pertrans, AggState *aggstate, EState *estate, - Aggref *aggref, Oid aggtransfn, Oid aggtranstype, - Oid aggserialfn, Oid aggdeserialfn, - Datum initValue, bool initValueIsNull, - Oid *inputTypes, int numArguments); + Aggref *aggref, Oid transfn_oid, + Oid aggtranstype, Oid aggserialfn, + Oid aggdeserialfn, Datum initValue, + bool initValueIsNull, Oid *inputTypes, + int numArguments); /* @@ -3724,8 +3725,8 @@ ExecInitAgg(Agg *node, EState *estate, int eflags) Aggref *aggref = lfirst(l); AggStatePerAgg peragg; AggStatePerTrans pertrans; - Oid inputTypes[FUNC_MAX_ARGS]; - int numArguments; + Oid aggTransFnInputTypes[FUNC_MAX_ARGS]; + int numAggTransFnArgs; int numDirectArgs; HeapTuple aggTuple; Form_pg_aggregate aggform; @@ -3859,14 +3860,15 @@ ExecInitAgg(Agg *node, EState *estate, int eflags) * could be different from the agg's declared input types, when the * agg accepts ANY or a polymorphic type. */ - numArguments = get_aggregate_argtypes(aggref, inputTypes); + numAggTransFnArgs = get_aggregate_argtypes(aggref, + aggTransFnInputTypes); /* Count the "direct" arguments, if any */ numDirectArgs = list_length(aggref->aggdirectargs); /* Detect how many arguments to pass to the finalfn */ if (aggform->aggfinalextra) - peragg->numFinalArgs = numArguments + 1; + peragg->numFinalArgs = numAggTransFnArgs + 1; else peragg->numFinalArgs = numDirectArgs + 1; @@ -3880,7 +3882,7 @@ ExecInitAgg(Agg *node, EState *estate, int eflags) */ if (OidIsValid(finalfn_oid)) { - build_aggregate_finalfn_expr(inputTypes, + build_aggregate_finalfn_expr(aggTransFnInputTypes, peragg->numFinalArgs, aggtranstype, aggref->aggtype, @@ -3911,7 +3913,7 @@ ExecInitAgg(Agg *node, EState *estate, int eflags) /* * If this aggregation is performing state combines, then instead * of using the transition function, we'll use the combine - * function + * function. */ if (DO_AGGSPLIT_COMBINE(aggstate->aggsplit)) { @@ -3924,8 +3926,7 @@ ExecInitAgg(Agg *node, EState *estate, int eflags) else transfn_oid = aggform->aggtransfn; - aclresult = pg_proc_aclcheck(transfn_oid, aggOwner, - ACL_EXECUTE); + aclresult = pg_proc_aclcheck(transfn_oid, aggOwner, ACL_EXECUTE); if (aclresult != ACLCHECK_OK) aclcheck_error(aclresult, OBJECT_FUNCTION, get_func_name(transfn_oid)); @@ -3943,11 +3944,72 @@ ExecInitAgg(Agg *node, EState *estate, int eflags) else initValue = GetAggInitVal(textInitVal, aggtranstype); - build_pertrans_for_aggref(pertrans, aggstate, estate, - aggref, transfn_oid, aggtranstype, - serialfn_oid, deserialfn_oid, - initValue, initValueIsNull, - inputTypes, numArguments); + if (DO_AGGSPLIT_COMBINE(aggstate->aggsplit)) + { + Oid combineFnInputTypes[] = {aggtranstype, + aggtranstype}; + + /* + * When combining there's only one input, the to-be-combined + * transition value. The transition value is not counted + * here. + */ + pertrans->numTransInputs = 1; + + /* aggcombinefn always has two arguments of aggtranstype */ + build_pertrans_for_aggref(pertrans, aggstate, estate, + aggref, transfn_oid, aggtranstype, + serialfn_oid, deserialfn_oid, + initValue, initValueIsNull, + combineFnInputTypes, 2); + + /* + * Ensure that a combine function to combine INTERNAL states + * is not strict. This should have been checked during CREATE + * AGGREGATE, but the strict property could have been changed + * since then. + */ + if (pertrans->transfn.fn_strict && aggtranstype == INTERNALOID) + ereport(ERROR, + (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), + errmsg("combine function with transition type %s must not be declared STRICT", + format_type_be(aggtranstype)))); + } + else + { + /* Detect how many arguments to pass to the transfn */ + if (AGGKIND_IS_ORDERED_SET(aggref->aggkind)) + pertrans->numTransInputs = list_length(aggref->args); + else + pertrans->numTransInputs = numAggTransFnArgs; + + build_pertrans_for_aggref(pertrans, aggstate, estate, + aggref, transfn_oid, aggtranstype, + serialfn_oid, deserialfn_oid, + initValue, initValueIsNull, + aggTransFnInputTypes, + numAggTransFnArgs); + + /* + * If the transfn is strict and the initval is NULL, make sure + * input type and transtype are the same (or at least + * binary-compatible), so that it's OK to use the first + * aggregated input value as the initial transValue. This + * should have been checked at agg definition time, but we + * must check again in case the transfn's strictness property + * has been changed. + */ + if (pertrans->transfn.fn_strict && pertrans->initValueIsNull) + { + if (numAggTransFnArgs <= numDirectArgs || + !IsBinaryCoercible(aggTransFnInputTypes[numDirectArgs], + aggtranstype)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), + errmsg("aggregate %u needs to have compatible input type and transition type", + aggref->aggfnoid))); + } + } } else pertrans->aggshared = true; @@ -4039,20 +4101,24 @@ ExecInitAgg(Agg *node, EState *estate, int eflags) * Build the state needed to calculate a state value for an aggregate. * * This initializes all the fields in 'pertrans'. 'aggref' is the aggregate - * to initialize the state for. 'aggtransfn', 'aggtranstype', and the rest + * to initialize the state for. 'transfn_oid', 'aggtranstype', and the rest * of the arguments could be calculated from 'aggref', but the caller has * calculated them already, so might as well pass them. + * + * 'transfn_oid' may be either the Oid of the aggtransfn or the aggcombinefn. */ static void build_pertrans_for_aggref(AggStatePerTrans pertrans, AggState *aggstate, EState *estate, Aggref *aggref, - Oid aggtransfn, Oid aggtranstype, + Oid transfn_oid, Oid aggtranstype, Oid aggserialfn, Oid aggdeserialfn, Datum initValue, bool initValueIsNull, Oid *inputTypes, int numArguments) { int numGroupingSets = Max(aggstate->maxsets, 1); + Expr *transfnexpr; + int numTransArgs; Expr *serialfnexpr = NULL; Expr *deserialfnexpr = NULL; ListCell *lc; @@ -4067,7 +4133,7 @@ build_pertrans_for_aggref(AggStatePerTrans pertrans, pertrans->aggref = aggref; pertrans->aggshared = false; pertrans->aggCollation = aggref->inputcollid; - pertrans->transfn_oid = aggtransfn; + pertrans->transfn_oid = transfn_oid; pertrans->serialfn_oid = aggserialfn; pertrans->deserialfn_oid = aggdeserialfn; pertrans->initValue = initValue; @@ -4081,111 +4147,34 @@ build_pertrans_for_aggref(AggStatePerTrans pertrans, pertrans->aggtranstype = aggtranstype; + /* account for the current transition state */ + numTransArgs = pertrans->numTransInputs + 1; + /* - * When combining states, we have no use at all for the aggregate - * function's transfn. Instead we use the combinefn. In this case, the - * transfn and transfn_oid fields of pertrans refer to the combine - * function rather than the transition function. + * Set up infrastructure for calling the transfn. Note that invtrans is + * not needed here. */ - if (DO_AGGSPLIT_COMBINE(aggstate->aggsplit)) - { - Expr *combinefnexpr; - size_t numTransArgs; - - /* - * When combining there's only one input, the to-be-combined added - * transition value from below (this node's transition value is - * counted separately). - */ - pertrans->numTransInputs = 1; - - /* account for the current transition state */ - numTransArgs = pertrans->numTransInputs + 1; - - build_aggregate_combinefn_expr(aggtranstype, - aggref->inputcollid, - aggtransfn, - &combinefnexpr); - fmgr_info(aggtransfn, &pertrans->transfn); - fmgr_info_set_expr((Node *) combinefnexpr, &pertrans->transfn); - - pertrans->transfn_fcinfo = - (FunctionCallInfo) palloc(SizeForFunctionCallInfo(2)); - InitFunctionCallInfoData(*pertrans->transfn_fcinfo, - &pertrans->transfn, - numTransArgs, - pertrans->aggCollation, - (void *) aggstate, NULL); - - /* - * Ensure that a combine function to combine INTERNAL states is not - * strict. This should have been checked during CREATE AGGREGATE, but - * the strict property could have been changed since then. - */ - if (pertrans->transfn.fn_strict && aggtranstype == INTERNALOID) - ereport(ERROR, - (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), - errmsg("combine function with transition type %s must not be declared STRICT", - format_type_be(aggtranstype)))); - } - else - { - Expr *transfnexpr; - size_t numTransArgs; - - /* Detect how many arguments to pass to the transfn */ - if (AGGKIND_IS_ORDERED_SET(aggref->aggkind)) - pertrans->numTransInputs = numInputs; - else - pertrans->numTransInputs = numArguments; + build_aggregate_transfn_expr(inputTypes, + numArguments, + numDirectArgs, + aggref->aggvariadic, + aggtranstype, + aggref->inputcollid, + transfn_oid, + InvalidOid, + &transfnexpr, + NULL); - /* account for the current transition state */ - numTransArgs = pertrans->numTransInputs + 1; + fmgr_info(transfn_oid, &pertrans->transfn); + fmgr_info_set_expr((Node *) transfnexpr, &pertrans->transfn); - /* - * Set up infrastructure for calling the transfn. Note that - * invtransfn is not needed here. - */ - build_aggregate_transfn_expr(inputTypes, - numArguments, - numDirectArgs, - aggref->aggvariadic, - aggtranstype, - aggref->inputcollid, - aggtransfn, - InvalidOid, - &transfnexpr, - NULL); - fmgr_info(aggtransfn, &pertrans->transfn); - fmgr_info_set_expr((Node *) transfnexpr, &pertrans->transfn); - - pertrans->transfn_fcinfo = - (FunctionCallInfo) palloc(SizeForFunctionCallInfo(numTransArgs)); - InitFunctionCallInfoData(*pertrans->transfn_fcinfo, - &pertrans->transfn, - numTransArgs, - pertrans->aggCollation, - (void *) aggstate, NULL); - - /* - * If the transfn is strict and the initval is NULL, make sure input - * type and transtype are the same (or at least binary-compatible), so - * that it's OK to use the first aggregated input value as the initial - * transValue. This should have been checked at agg definition time, - * but we must check again in case the transfn's strictness property - * has been changed. - */ - if (pertrans->transfn.fn_strict && pertrans->initValueIsNull) - { - if (numArguments <= numDirectArgs || - !IsBinaryCoercible(inputTypes[numDirectArgs], - aggtranstype)) - ereport(ERROR, - (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), - errmsg("aggregate %u needs to have compatible input type and transition type", - aggref->aggfnoid))); - } - } + pertrans->transfn_fcinfo = + (FunctionCallInfo) palloc(SizeForFunctionCallInfo(numTransArgs)); + InitFunctionCallInfoData(*pertrans->transfn_fcinfo, + &pertrans->transfn, + numTransArgs, + pertrans->aggCollation, + (void *) aggstate, NULL); /* get info about the state value's datatype */ get_typlenbyval(aggtranstype, @@ -4276,6 +4265,9 @@ build_pertrans_for_aggref(AggStatePerTrans pertrans, */ Assert(aggstate->aggstrategy != AGG_HASHED && aggstate->aggstrategy != AGG_MIXED); + /* ORDER BY aggregates are not supported with partial aggregation */ + Assert(!DO_AGGSPLIT_COMBINE(aggstate->aggsplit)); + /* If we have only one input, we need its len/byval info. */ if (numInputs == 1) { diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c index a25f8d5b98991..24268eb5024df 100644 --- a/src/backend/parser/parse_agg.c +++ b/src/backend/parser/parse_agg.c @@ -1959,6 +1959,11 @@ resolve_aggregate_transtype(Oid aggfuncid, * latter may be InvalidOid, however if invtransfn_oid is set then * transfn_oid must also be set. * + * transfn_oid may also be passed as the aggcombinefn when the *transfnexpr is + * to be used for a combine aggregate phase. We expect invtransfn_oid to be + * InvalidOid in this case since there is no such thing as an inverse + * combinefn. + * * Pointers to the constructed trees are returned into *transfnexpr, * *invtransfnexpr. If there is no invtransfn, the respective pointer is set * to NULL. Since use of the invtransfn is optional, NULL may be passed for @@ -2021,35 +2026,6 @@ build_aggregate_transfn_expr(Oid *agg_input_types, } } -/* - * Like build_aggregate_transfn_expr, but creates an expression tree for the - * combine function of an aggregate, rather than the transition function. - */ -void -build_aggregate_combinefn_expr(Oid agg_state_type, - Oid agg_input_collation, - Oid combinefn_oid, - Expr **combinefnexpr) -{ - Node *argp; - List *args; - FuncExpr *fexpr; - - /* combinefn takes two arguments of the aggregate state type */ - argp = make_agg_arg(agg_state_type, agg_input_collation); - - args = list_make2(argp, argp); - - fexpr = makeFuncExpr(combinefn_oid, - agg_state_type, - args, - InvalidOid, - agg_input_collation, - COERCE_EXPLICIT_CALL); - /* combinefn is currently never treated as variadic */ - *combinefnexpr = (Expr *) fexpr; -} - /* * Like build_aggregate_transfn_expr, but creates an expression tree for the * serialization function of an aggregate. diff --git a/src/include/parser/parse_agg.h b/src/include/parser/parse_agg.h index 4dea01752af3a..bffbb82df66cd 100644 --- a/src/include/parser/parse_agg.h +++ b/src/include/parser/parse_agg.h @@ -46,11 +46,6 @@ extern void build_aggregate_transfn_expr(Oid *agg_input_types, Expr **transfnexpr, Expr **invtransfnexpr); -extern void build_aggregate_combinefn_expr(Oid agg_state_type, - Oid agg_input_collation, - Oid combinefn_oid, - Expr **combinefnexpr); - extern void build_aggregate_serialfn_expr(Oid serialfn_oid, Expr **serialfnexpr); From ec34040af104a1d25233eccd5715863ace6cbb10 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Sun, 4 Jul 2021 22:28:38 +1200 Subject: [PATCH 600/671] Doc: mention that VACUUM can't utilize over 1GB of RAM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Document that setting maintenance_work_mem to values over 1GB has no effect on VACUUM. Reported-by: Martín Marqués Author: Laurenz Albe Discussion: https://postgr.es/m/CABeG9LsZ2ozUMcqtqWu_-GiFKB17ih3p8wBHXcpfnHqhCnsc7A%40mail.gmail.com Backpatch-through: 9.6, oldest supported release --- doc/src/sgml/config.sgml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 6098f6b0202ea..381d8636ab498 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -1893,6 +1893,12 @@ include_dir 'conf.d' too high. It may be useful to control for this by separately setting . + + Additionally, VACUUM is only able to utilize up to + a maximum of 1GB of memory, so + maintenance_work_mem values higher than this have + no effect on VACUUM. + From 0f06359fb3622b289485306727300dd31f96fd9d Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sun, 4 Jul 2021 20:59:04 +0900 Subject: [PATCH 601/671] doc: Mention requirement to --enable-tap-tests on section for TAP tests Author: Greg Sabino Mullane Discussion: https://postgr.es/m/CAKAnmmJYH2FBn_+Vwd2FD5SaKn8hjhAXOCHpZc6n4wXaUaW_SA@mail.gmail.com Backpatch-through: 9.6 --- doc/src/sgml/regress.sgml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/src/sgml/regress.sgml b/doc/src/sgml/regress.sgml index cb401a45b35ab..c35e036028b1a 100644 --- a/doc/src/sgml/regress.sgml +++ b/doc/src/sgml/regress.sgml @@ -801,6 +801,8 @@ make check PROVE_TESTS='t/001_test1.pl t/003_test3.pl' The TAP tests require the Perl module IPC::Run. This module is available from CPAN or an operating system package. + They also require PostgreSQL to be + configured with the option . From e360aa0530b6d1f9e43f2aca760203de0421ef5e Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Mon, 5 Jul 2021 09:36:11 +0530 Subject: [PATCH 602/671] Doc: Hash Indexes. A new chapter for Hash Indexes, designed to help users understand how they work and when to use them. Backpatch-through 10 where we have made hash indexes durable. Author: Simon Riggs Reviewed-By: Justin Pryzby, Amit Kapila Discussion: https://postgr.es/m/CANbhV-HRjNPYgHo--P1ewBrFJ-GpZPb9_25P7=Wgu7s7hy_sLQ@mail.gmail.com --- doc/src/sgml/filelist.sgml | 1 + doc/src/sgml/hash.sgml | 162 +++++++++++++++++++++++++++++++++++++ doc/src/sgml/postgres.sgml | 1 + 3 files changed, 164 insertions(+) create mode 100644 doc/src/sgml/hash.sgml diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml index 596bfecf8e224..89454e99b981d 100644 --- a/doc/src/sgml/filelist.sgml +++ b/doc/src/sgml/filelist.sgml @@ -89,6 +89,7 @@ + diff --git a/doc/src/sgml/hash.sgml b/doc/src/sgml/hash.sgml new file mode 100644 index 0000000000000..d29cd18b8f691 --- /dev/null +++ b/doc/src/sgml/hash.sgml @@ -0,0 +1,162 @@ + + + +Hash Indexes + + + index + Hash + + + + Overview + + + PostgreSQL + includes an implementation of persistent on-disk hash indexes, + which are fully crash recoverable. Any data type can be indexed by a + hash index, including data types that do not have a well-defined linear + ordering. Hash indexes store only the hash value of the data being + indexed, thus there are no restrictions on the size of the data column + being indexed. + + + + Hash indexes support only single-column indexes and do not allow + uniqueness checking. + + + + Hash indexes support only the = operator, + so WHERE clauses that specify range operations will not be able to take + advantage of hash indexes. + + + + Each hash index tuple stores just the 4-byte hash value, not the actual + column value. As a result, hash indexes may be much smaller than B-trees + when indexing longer data items such as UUIDs, URLs, etc. The absence of + the column value also makes all hash index scans lossy. Hash indexes may + take part in bitmap index scans and backward scans. + + + + Hash indexes are best optimized for SELECT and UPDATE-heavy workloads + that use equality scans on larger tables. In a B-tree index, searches must + descend through the tree until the leaf page is found. In tables with + millions of rows, this descent can increase access time to data. The + equivalent of a leaf page in a hash index is referred to as a bucket page. In + contrast, a hash index allows accessing the bucket pages directly, + thereby potentially reducing index access time in larger tables. This + reduction in "logical I/O" becomes even more pronounced on indexes/data + larger than shared_buffers/RAM. + + + + Hash indexes have been designed to cope with uneven distributions of + hash values. Direct access to the bucket pages works well if the hash + values are evenly distributed. When inserts mean that the bucket page + becomes full, additional overflow pages are chained to that specific + bucket page, locally expanding the storage for index tuples that match + that hash value. When scanning a hash bucket during queries, we need to + scan through all of the overflow pages. Thus an unbalanced hash index + might actually be worse than a B-tree in terms of number of block + accesses required, for some data. + + + + As a result of the overflow cases, we can say that hash indexes are + most suitable for unique, nearly unique data or data with a low number + of rows per hash bucket. + One possible way to avoid problems is to exclude highly non-unique + values from the index using a partial index condition, but this may + not be suitable in many cases. + + + + Like B-Trees, hash indexes perform simple index tuple deletion. This + is a deferred maintenance operation that deletes index tuples that are + known to be safe to delete (those whose item identifier's LP_DEAD bit + is already set). If an insert finds no space is available on a page we + try to avoid creating a new overflow page by attempting to remove dead + index tuples. Removal cannot occur if the page is pinned at that time. + Deletion of dead index pointers also occurs during VACUUM. + + + + If it can, VACUUM will also try to squeeze the index tuples onto as + few overflow pages as possible, minimizing the overflow chain. If an + overflow page becomes empty, overflow pages can be recycled for reuse + in other buckets, though we never return them to the operating system. + There is currently no provision to shrink a hash index, other than by + rebuilding it with REINDEX. + There is no provision for reducing the number of buckets, either. + + + + Hash indexes may expand the number of bucket pages as the number of + rows indexed grows. The hash key-to-bucket-number mapping is chosen so that + the index can be incrementally expanded. When a new bucket is to be added to + the index, exactly one existing bucket will need to be "split", with some of + its tuples being transferred to the new bucket according to the updated + key-to-bucket-number mapping. + + + + The expansion occurs in the foreground, which could increase execution + time for user inserts. Thus, hash indexes may not be suitable for tables + with rapidly increasing number of rows. + + + + + + Implementation + + + There are four kinds of pages in a hash index: the meta page (page zero), + which contains statically allocated control information; primary bucket + pages; overflow pages; and bitmap pages, which keep track of overflow + pages that have been freed and are available for re-use. For addressing + purposes, bitmap pages are regarded as a subset of the overflow pages. + + + + Both scanning the index and inserting tuples require locating the bucket + where a given tuple ought to be located. To do this, we need the bucket + count, highmask, and lowmask from the metapage; however, it's undesirable + for performance reasons to have to have to lock and pin the metapage for + every such operation. Instead, we retain a cached copy of the metapage + in each backend's relcache entry. This will produce the correct bucket + mapping as long as the target bucket hasn't been split since the last + cache refresh. + + + + Primary bucket pages and overflow pages are allocated independently since + any given index might need more or fewer overflow pages relative to its + number of buckets. The hash code uses an interesting set of addressing + rules to support a variable number of overflow pages while not having to + move primary bucket pages around after they are created. + + + + Each row in the table indexed is represented by a single index tuple in + the hash index. Hash index tuples are stored in bucket pages, and if + they exist, overflow pages. We speed up searches by keeping the index entries + in any one index page sorted by hash code, thus allowing binary search to be + used within an index page. Note however that there is *no* assumption about + the relative ordering of hash codes across different index pages of a bucket. + + + + The bucket splitting algorithms to expand the hash index are too complex to + be worthy of mention here, though are described in more detail in + src/backend/access/hash/README. + The split algorithm is crash safe and can be restarted if not completed + successfully. + + + + + diff --git a/doc/src/sgml/postgres.sgml b/doc/src/sgml/postgres.sgml index d453be390903d..dba9cf413f901 100644 --- a/doc/src/sgml/postgres.sgml +++ b/doc/src/sgml/postgres.sgml @@ -266,6 +266,7 @@ break is not needed in a wider output rendering. &spgist; &gin; &brin; + &hash; &storage; &bki; &planstats; From 903d9aa7801e3198ca24e90be805362ad11b6ec3 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 5 Jul 2021 08:26:00 +0200 Subject: [PATCH 603/671] doc: Fix quoting markup --- doc/src/sgml/appendix-obsolete-default-roles.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/appendix-obsolete-default-roles.sgml b/doc/src/sgml/appendix-obsolete-default-roles.sgml index ef252435bb63c..bf828b39ab406 100644 --- a/doc/src/sgml/appendix-obsolete-default-roles.sgml +++ b/doc/src/sgml/appendix-obsolete-default-roles.sgml @@ -11,9 +11,9 @@ - PostgreSQL 13 and below used the term 'Default Roles', however, as these + PostgreSQL 13 and below used the term Default Roles. However, as these roles are not able to actually be changed and are installed as part of the - system at initialization time, the more appropriate term to use is "Predefined Roles". + system at initialization time, the more appropriate term to use is Predefined Roles. See for current documentation regarding Predefined Roles, and the release notes for PostgreSQL 14 for details on this change. From f025f2390e13d7da69da595086fb982bbaf7f329 Mon Sep 17 00:00:00 2001 From: Dean Rasheed Date: Mon, 5 Jul 2021 10:16:42 +0100 Subject: [PATCH 604/671] Prevent numeric overflows in parallel numeric aggregates. Formerly various numeric aggregate functions supported parallel aggregation by having each worker convert partial aggregate values to Numeric and use numeric_send() as part of serializing their state. That's problematic, since the range of Numeric is smaller than that of NumericVar, so it's possible for it to overflow (on either side of the decimal point) in cases that would succeed in non-parallel mode. Fix by serializing NumericVars instead, to avoid the overflow risk and ensure that parallel and non-parallel modes work the same. A side benefit is that this improves the efficiency of the serialization/deserialization code, which can make a noticeable difference to performance with large numbers of parallel workers. No back-patch due to risk from changing the binary format of the aggregate serialization states, as well as lack of prior field complaints and low probability of such overflows in practice. Patch by me. Thanks to David Rowley for review and performance testing, and Ranier Vilela for an additional suggestion. Discussion: https://postgr.es/m/CAEZATCUmeFWCrq2dNzZpRj5+6LfN85jYiDoqm+ucSXhb9U2TbA@mail.gmail.com --- src/backend/utils/adt/numeric.c | 255 ++++++++++++-------------- src/test/regress/expected/numeric.out | 50 +++++ src/test/regress/sql/numeric.sql | 36 ++++ 3 files changed, 203 insertions(+), 138 deletions(-) diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index eb78f0b9c2a14..bc71326fc8af5 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -515,6 +515,9 @@ static void set_var_from_var(const NumericVar *value, NumericVar *dest); static char *get_str_from_var(const NumericVar *var); static char *get_str_from_var_sci(const NumericVar *var, int rscale); +static void numericvar_serialize(StringInfo buf, const NumericVar *var); +static void numericvar_deserialize(StringInfo buf, NumericVar *var); + static Numeric duplicate_numeric(Numeric num); static Numeric make_result(const NumericVar *var); static Numeric make_result_opt_error(const NumericVar *var, bool *error); @@ -4943,8 +4946,6 @@ numeric_avg_serialize(PG_FUNCTION_ARGS) { NumericAggState *state; StringInfoData buf; - Datum temp; - bytea *sumX; bytea *result; NumericVar tmp_var; @@ -4954,19 +4955,7 @@ numeric_avg_serialize(PG_FUNCTION_ARGS) state = (NumericAggState *) PG_GETARG_POINTER(0); - /* - * This is a little wasteful since make_result converts the NumericVar - * into a Numeric and numeric_send converts it back again. Is it worth - * splitting the tasks in numeric_send into separate functions to stop - * this? Doing so would also remove the fmgr call overhead. - */ init_var(&tmp_var); - accum_sum_final(&state->sumX, &tmp_var); - - temp = DirectFunctionCall1(numeric_send, - NumericGetDatum(make_result(&tmp_var))); - sumX = DatumGetByteaPP(temp); - free_var(&tmp_var); pq_begintypsend(&buf); @@ -4974,7 +4963,8 @@ numeric_avg_serialize(PG_FUNCTION_ARGS) pq_sendint64(&buf, state->N); /* sumX */ - pq_sendbytes(&buf, VARDATA_ANY(sumX), VARSIZE_ANY_EXHDR(sumX)); + accum_sum_final(&state->sumX, &tmp_var); + numericvar_serialize(&buf, &tmp_var); /* maxScale */ pq_sendint32(&buf, state->maxScale); @@ -4993,6 +4983,8 @@ numeric_avg_serialize(PG_FUNCTION_ARGS) result = pq_endtypsend(&buf); + free_var(&tmp_var); + PG_RETURN_BYTEA_P(result); } @@ -5006,15 +4998,16 @@ numeric_avg_deserialize(PG_FUNCTION_ARGS) { bytea *sstate; NumericAggState *result; - Datum temp; - NumericVar tmp_var; StringInfoData buf; + NumericVar tmp_var; if (!AggCheckCallContext(fcinfo, NULL)) elog(ERROR, "aggregate function called in non-aggregate context"); sstate = PG_GETARG_BYTEA_PP(0); + init_var(&tmp_var); + /* * Copy the bytea into a StringInfo so that we can "receive" it using the * standard recv-function infrastructure. @@ -5029,11 +5022,7 @@ numeric_avg_deserialize(PG_FUNCTION_ARGS) result->N = pq_getmsgint64(&buf); /* sumX */ - temp = DirectFunctionCall3(numeric_recv, - PointerGetDatum(&buf), - ObjectIdGetDatum(InvalidOid), - Int32GetDatum(-1)); - init_var_from_num(DatumGetNumeric(temp), &tmp_var); + numericvar_deserialize(&buf, &tmp_var); accum_sum_add(&(result->sumX), &tmp_var); /* maxScale */ @@ -5054,6 +5043,8 @@ numeric_avg_deserialize(PG_FUNCTION_ARGS) pq_getmsgend(&buf); pfree(buf.data); + free_var(&tmp_var); + PG_RETURN_POINTER(result); } @@ -5067,11 +5058,8 @@ numeric_serialize(PG_FUNCTION_ARGS) { NumericAggState *state; StringInfoData buf; - Datum temp; - bytea *sumX; - NumericVar tmp_var; - bytea *sumX2; bytea *result; + NumericVar tmp_var; /* Ensure we disallow calling when not in aggregate context */ if (!AggCheckCallContext(fcinfo, NULL)) @@ -5079,36 +5067,20 @@ numeric_serialize(PG_FUNCTION_ARGS) state = (NumericAggState *) PG_GETARG_POINTER(0); - /* - * This is a little wasteful since make_result converts the NumericVar - * into a Numeric and numeric_send converts it back again. Is it worth - * splitting the tasks in numeric_send into separate functions to stop - * this? Doing so would also remove the fmgr call overhead. - */ init_var(&tmp_var); - accum_sum_final(&state->sumX, &tmp_var); - temp = DirectFunctionCall1(numeric_send, - NumericGetDatum(make_result(&tmp_var))); - sumX = DatumGetByteaPP(temp); - - accum_sum_final(&state->sumX2, &tmp_var); - temp = DirectFunctionCall1(numeric_send, - NumericGetDatum(make_result(&tmp_var))); - sumX2 = DatumGetByteaPP(temp); - - free_var(&tmp_var); - pq_begintypsend(&buf); /* N */ pq_sendint64(&buf, state->N); /* sumX */ - pq_sendbytes(&buf, VARDATA_ANY(sumX), VARSIZE_ANY_EXHDR(sumX)); + accum_sum_final(&state->sumX, &tmp_var); + numericvar_serialize(&buf, &tmp_var); /* sumX2 */ - pq_sendbytes(&buf, VARDATA_ANY(sumX2), VARSIZE_ANY_EXHDR(sumX2)); + accum_sum_final(&state->sumX2, &tmp_var); + numericvar_serialize(&buf, &tmp_var); /* maxScale */ pq_sendint32(&buf, state->maxScale); @@ -5127,6 +5099,8 @@ numeric_serialize(PG_FUNCTION_ARGS) result = pq_endtypsend(&buf); + free_var(&tmp_var); + PG_RETURN_BYTEA_P(result); } @@ -5140,16 +5114,16 @@ numeric_deserialize(PG_FUNCTION_ARGS) { bytea *sstate; NumericAggState *result; - Datum temp; - NumericVar sumX_var; - NumericVar sumX2_var; StringInfoData buf; + NumericVar tmp_var; if (!AggCheckCallContext(fcinfo, NULL)) elog(ERROR, "aggregate function called in non-aggregate context"); sstate = PG_GETARG_BYTEA_PP(0); + init_var(&tmp_var); + /* * Copy the bytea into a StringInfo so that we can "receive" it using the * standard recv-function infrastructure. @@ -5164,20 +5138,12 @@ numeric_deserialize(PG_FUNCTION_ARGS) result->N = pq_getmsgint64(&buf); /* sumX */ - temp = DirectFunctionCall3(numeric_recv, - PointerGetDatum(&buf), - ObjectIdGetDatum(InvalidOid), - Int32GetDatum(-1)); - init_var_from_num(DatumGetNumeric(temp), &sumX_var); - accum_sum_add(&(result->sumX), &sumX_var); + numericvar_deserialize(&buf, &tmp_var); + accum_sum_add(&(result->sumX), &tmp_var); /* sumX2 */ - temp = DirectFunctionCall3(numeric_recv, - PointerGetDatum(&buf), - ObjectIdGetDatum(InvalidOid), - Int32GetDatum(-1)); - init_var_from_num(DatumGetNumeric(temp), &sumX2_var); - accum_sum_add(&(result->sumX2), &sumX2_var); + numericvar_deserialize(&buf, &tmp_var); + accum_sum_add(&(result->sumX2), &tmp_var); /* maxScale */ result->maxScale = pq_getmsgint(&buf, 4); @@ -5197,6 +5163,8 @@ numeric_deserialize(PG_FUNCTION_ARGS) pq_getmsgend(&buf); pfree(buf.data); + free_var(&tmp_var); + PG_RETURN_POINTER(result); } @@ -5459,9 +5427,8 @@ numeric_poly_serialize(PG_FUNCTION_ARGS) { PolyNumAggState *state; StringInfoData buf; - bytea *sumX; - bytea *sumX2; bytea *result; + NumericVar tmp_var; /* Ensure we disallow calling when not in aggregate context */ if (!AggCheckCallContext(fcinfo, NULL)) @@ -5477,32 +5444,8 @@ numeric_poly_serialize(PG_FUNCTION_ARGS) * day we might like to send these over to another server for further * processing and we want a standard format to work with. */ - { - Datum temp; - NumericVar num; - - init_var(&num); - -#ifdef HAVE_INT128 - int128_to_numericvar(state->sumX, &num); -#else - accum_sum_final(&state->sumX, &num); -#endif - temp = DirectFunctionCall1(numeric_send, - NumericGetDatum(make_result(&num))); - sumX = DatumGetByteaPP(temp); -#ifdef HAVE_INT128 - int128_to_numericvar(state->sumX2, &num); -#else - accum_sum_final(&state->sumX2, &num); -#endif - temp = DirectFunctionCall1(numeric_send, - NumericGetDatum(make_result(&num))); - sumX2 = DatumGetByteaPP(temp); - - free_var(&num); - } + init_var(&tmp_var); pq_begintypsend(&buf); @@ -5510,13 +5453,25 @@ numeric_poly_serialize(PG_FUNCTION_ARGS) pq_sendint64(&buf, state->N); /* sumX */ - pq_sendbytes(&buf, VARDATA_ANY(sumX), VARSIZE_ANY_EXHDR(sumX)); +#ifdef HAVE_INT128 + int128_to_numericvar(state->sumX, &tmp_var); +#else + accum_sum_final(&state->sumX, &tmp_var); +#endif + numericvar_serialize(&buf, &tmp_var); /* sumX2 */ - pq_sendbytes(&buf, VARDATA_ANY(sumX2), VARSIZE_ANY_EXHDR(sumX2)); +#ifdef HAVE_INT128 + int128_to_numericvar(state->sumX2, &tmp_var); +#else + accum_sum_final(&state->sumX2, &tmp_var); +#endif + numericvar_serialize(&buf, &tmp_var); result = pq_endtypsend(&buf); + free_var(&tmp_var); + PG_RETURN_BYTEA_P(result); } @@ -5530,17 +5485,16 @@ numeric_poly_deserialize(PG_FUNCTION_ARGS) { bytea *sstate; PolyNumAggState *result; - Datum sumX; - NumericVar sumX_var; - Datum sumX2; - NumericVar sumX2_var; StringInfoData buf; + NumericVar tmp_var; if (!AggCheckCallContext(fcinfo, NULL)) elog(ERROR, "aggregate function called in non-aggregate context"); sstate = PG_GETARG_BYTEA_PP(0); + init_var(&tmp_var); + /* * Copy the bytea into a StringInfo so that we can "receive" it using the * standard recv-function infrastructure. @@ -5555,34 +5509,26 @@ numeric_poly_deserialize(PG_FUNCTION_ARGS) result->N = pq_getmsgint64(&buf); /* sumX */ - sumX = DirectFunctionCall3(numeric_recv, - PointerGetDatum(&buf), - ObjectIdGetDatum(InvalidOid), - Int32GetDatum(-1)); - - /* sumX2 */ - sumX2 = DirectFunctionCall3(numeric_recv, - PointerGetDatum(&buf), - ObjectIdGetDatum(InvalidOid), - Int32GetDatum(-1)); - - init_var_from_num(DatumGetNumeric(sumX), &sumX_var); + numericvar_deserialize(&buf, &tmp_var); #ifdef HAVE_INT128 - numericvar_to_int128(&sumX_var, &result->sumX); + numericvar_to_int128(&tmp_var, &result->sumX); #else - accum_sum_add(&result->sumX, &sumX_var); + accum_sum_add(&result->sumX, &tmp_var); #endif - init_var_from_num(DatumGetNumeric(sumX2), &sumX2_var); + /* sumX2 */ + numericvar_deserialize(&buf, &tmp_var); #ifdef HAVE_INT128 - numericvar_to_int128(&sumX2_var, &result->sumX2); + numericvar_to_int128(&tmp_var, &result->sumX2); #else - accum_sum_add(&result->sumX2, &sumX2_var); + accum_sum_add(&result->sumX2, &tmp_var); #endif pq_getmsgend(&buf); pfree(buf.data); + free_var(&tmp_var); + PG_RETURN_POINTER(result); } @@ -5681,8 +5627,8 @@ int8_avg_serialize(PG_FUNCTION_ARGS) { PolyNumAggState *state; StringInfoData buf; - bytea *sumX; bytea *result; + NumericVar tmp_var; /* Ensure we disallow calling when not in aggregate context */ if (!AggCheckCallContext(fcinfo, NULL)) @@ -5698,23 +5644,8 @@ int8_avg_serialize(PG_FUNCTION_ARGS) * like to send these over to another server for further processing and we * want a standard format to work with. */ - { - Datum temp; - NumericVar num; - - init_var(&num); -#ifdef HAVE_INT128 - int128_to_numericvar(state->sumX, &num); -#else - accum_sum_final(&state->sumX, &num); -#endif - temp = DirectFunctionCall1(numeric_send, - NumericGetDatum(make_result(&num))); - sumX = DatumGetByteaPP(temp); - - free_var(&num); - } + init_var(&tmp_var); pq_begintypsend(&buf); @@ -5722,10 +5653,17 @@ int8_avg_serialize(PG_FUNCTION_ARGS) pq_sendint64(&buf, state->N); /* sumX */ - pq_sendbytes(&buf, VARDATA_ANY(sumX), VARSIZE_ANY_EXHDR(sumX)); +#ifdef HAVE_INT128 + int128_to_numericvar(state->sumX, &tmp_var); +#else + accum_sum_final(&state->sumX, &tmp_var); +#endif + numericvar_serialize(&buf, &tmp_var); result = pq_endtypsend(&buf); + free_var(&tmp_var); + PG_RETURN_BYTEA_P(result); } @@ -5739,14 +5677,15 @@ int8_avg_deserialize(PG_FUNCTION_ARGS) bytea *sstate; PolyNumAggState *result; StringInfoData buf; - Datum temp; - NumericVar num; + NumericVar tmp_var; if (!AggCheckCallContext(fcinfo, NULL)) elog(ERROR, "aggregate function called in non-aggregate context"); sstate = PG_GETARG_BYTEA_PP(0); + init_var(&tmp_var); + /* * Copy the bytea into a StringInfo so that we can "receive" it using the * standard recv-function infrastructure. @@ -5761,20 +5700,18 @@ int8_avg_deserialize(PG_FUNCTION_ARGS) result->N = pq_getmsgint64(&buf); /* sumX */ - temp = DirectFunctionCall3(numeric_recv, - PointerGetDatum(&buf), - ObjectIdGetDatum(InvalidOid), - Int32GetDatum(-1)); - init_var_from_num(DatumGetNumeric(temp), &num); + numericvar_deserialize(&buf, &tmp_var); #ifdef HAVE_INT128 - numericvar_to_int128(&num, &result->sumX); + numericvar_to_int128(&tmp_var, &result->sumX); #else - accum_sum_add(&result->sumX, &num); + accum_sum_add(&result->sumX, &tmp_var); #endif pq_getmsgend(&buf); pfree(buf.data); + free_var(&tmp_var); + PG_RETURN_POINTER(result); } @@ -7286,6 +7223,48 @@ get_str_from_var_sci(const NumericVar *var, int rscale) } +/* + * numericvar_serialize - serialize NumericVar to binary format + * + * At variable level, no checks are performed on the weight or dscale, allowing + * us to pass around intermediate values with higher precision than supported + * by the numeric type. Note: this is incompatible with numeric_send/recv(), + * which use 16-bit integers for these fields. + */ +static void +numericvar_serialize(StringInfo buf, const NumericVar *var) +{ + int i; + + pq_sendint32(buf, var->ndigits); + pq_sendint32(buf, var->weight); + pq_sendint32(buf, var->sign); + pq_sendint32(buf, var->dscale); + for (i = 0; i < var->ndigits; i++) + pq_sendint16(buf, var->digits[i]); +} + +/* + * numericvar_deserialize - deserialize binary format to NumericVar + */ +static void +numericvar_deserialize(StringInfo buf, NumericVar *var) +{ + int len, + i; + + len = pq_getmsgint(buf, sizeof(int32)); + + alloc_var(var, len); /* sets var->ndigits */ + + var->weight = pq_getmsgint(buf, sizeof(int32)); + var->sign = pq_getmsgint(buf, sizeof(int32)); + var->dscale = pq_getmsgint(buf, sizeof(int32)); + for (i = 0; i < len; i++) + var->digits[i] = pq_getmsgint(buf, sizeof(int16)); +} + + /* * duplicate_numeric() - copy a packed-format Numeric * diff --git a/src/test/regress/expected/numeric.out b/src/test/regress/expected/numeric.out index 30a5642b95849..4ad485130bda0 100644 --- a/src/test/regress/expected/numeric.out +++ b/src/test/regress/expected/numeric.out @@ -2966,6 +2966,56 @@ SELECT SUM((-9999)::numeric) FROM generate_series(1, 100000); -999900000 (1 row) +-- +-- Tests for VARIANCE() +-- +CREATE TABLE num_variance (a numeric); +INSERT INTO num_variance VALUES (0); +INSERT INTO num_variance VALUES (3e-500); +INSERT INTO num_variance VALUES (-3e-500); +INSERT INTO num_variance VALUES (4e-500 - 1e-16383); +INSERT INTO num_variance VALUES (-4e-500 + 1e-16383); +-- variance is just under 12.5e-1000 and so should round down to 12e-1000 +SELECT trim_scale(variance(a) * 1e1000) FROM num_variance; + trim_scale +------------ + 12 +(1 row) + +-- check that parallel execution produces the same result +BEGIN; +ALTER TABLE num_variance SET (parallel_workers = 4); +SET LOCAL parallel_setup_cost = 0; +SET LOCAL max_parallel_workers_per_gather = 4; +SELECT trim_scale(variance(a) * 1e1000) FROM num_variance; + trim_scale +------------ + 12 +(1 row) + +ROLLBACK; +-- case where sum of squares would overflow but variance does not +DELETE FROM num_variance; +INSERT INTO num_variance SELECT 9e131071 + x FROM generate_series(1, 5) x; +SELECT variance(a) FROM num_variance; + variance +-------------------- + 2.5000000000000000 +(1 row) + +-- check that parallel execution produces the same result +BEGIN; +ALTER TABLE num_variance SET (parallel_workers = 4); +SET LOCAL parallel_setup_cost = 0; +SET LOCAL max_parallel_workers_per_gather = 4; +SELECT variance(a) FROM num_variance; + variance +-------------------- + 2.5000000000000000 +(1 row) + +ROLLBACK; +DROP TABLE num_variance; -- -- Tests for GCD() -- diff --git a/src/test/regress/sql/numeric.sql b/src/test/regress/sql/numeric.sql index db812c813a39b..3784c5253d7ca 100644 --- a/src/test/regress/sql/numeric.sql +++ b/src/test/regress/sql/numeric.sql @@ -1277,6 +1277,42 @@ select trim_scale(1e100); SELECT SUM(9999::numeric) FROM generate_series(1, 100000); SELECT SUM((-9999)::numeric) FROM generate_series(1, 100000); +-- +-- Tests for VARIANCE() +-- +CREATE TABLE num_variance (a numeric); +INSERT INTO num_variance VALUES (0); +INSERT INTO num_variance VALUES (3e-500); +INSERT INTO num_variance VALUES (-3e-500); +INSERT INTO num_variance VALUES (4e-500 - 1e-16383); +INSERT INTO num_variance VALUES (-4e-500 + 1e-16383); + +-- variance is just under 12.5e-1000 and so should round down to 12e-1000 +SELECT trim_scale(variance(a) * 1e1000) FROM num_variance; + +-- check that parallel execution produces the same result +BEGIN; +ALTER TABLE num_variance SET (parallel_workers = 4); +SET LOCAL parallel_setup_cost = 0; +SET LOCAL max_parallel_workers_per_gather = 4; +SELECT trim_scale(variance(a) * 1e1000) FROM num_variance; +ROLLBACK; + +-- case where sum of squares would overflow but variance does not +DELETE FROM num_variance; +INSERT INTO num_variance SELECT 9e131071 + x FROM generate_series(1, 5) x; +SELECT variance(a) FROM num_variance; + +-- check that parallel execution produces the same result +BEGIN; +ALTER TABLE num_variance SET (parallel_workers = 4); +SET LOCAL parallel_setup_cost = 0; +SET LOCAL max_parallel_workers_per_gather = 4; +SELECT variance(a) FROM num_variance; +ROLLBACK; + +DROP TABLE num_variance; + -- -- Tests for GCD() -- From c04c767059b8460b99f6aa4aae5450ab3ee257a3 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 5 Jul 2021 14:34:47 -0400 Subject: [PATCH 605/671] Rethink blocking annotations in detach-partition-concurrently-[34]. In 741d7f104, I tried to make the reports from canceled steps come out after the pg_cancel_backend() steps, since that was the most common ordering before. However, that doesn't ensure that a canceled step doesn't report even later, as shown in a recent failure on buildfarm member idiacanthus. Rather than complicating things even more with additional annotations, let's just force the cancel's effect to be reported first. It's not *that* unnatural-looking. Back-patch to v14 where these test cases appeared. Report: https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=idiacanthus&dt=2021-07-02%2001%3A40%3A04 --- .../detach-partition-concurrently-3.out | 126 ++++++++++-------- .../detach-partition-concurrently-4.out | 56 ++++---- .../detach-partition-concurrently-3.spec | 40 +++--- .../detach-partition-concurrently-4.spec | 38 +++--- 4 files changed, 143 insertions(+), 117 deletions(-) diff --git a/src/test/isolation/expected/detach-partition-concurrently-3.out b/src/test/isolation/expected/detach-partition-concurrently-3.out index e7fb5f8307587..f23f46ad89be4 100644 --- a/src/test/isolation/expected/detach-partition-concurrently-3.out +++ b/src/test/isolation/expected/detach-partition-concurrently-3.out @@ -10,14 +10,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s1describe: SELECT 'd3_listp' AS root, * FROM pg_partition_tree('d3_listp') UNION ALL SELECT 'd3_listp1', * FROM pg_partition_tree('d3_listp1'); @@ -41,14 +42,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1insert: INSERT INTO d3_listp VALUES (1); ERROR: no partition of relation "d3_listp" found for row step s1c: COMMIT; @@ -63,14 +65,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1insert: INSERT INTO d3_listp VALUES (1); step s1c: COMMIT; step s1spart: SELECT * FROM d3_listp1; @@ -91,14 +94,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s1insertpart: INSERT INTO d3_listp1 VALUES (1); @@ -112,14 +116,15 @@ a (1 row) step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach2: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach2: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1insert: INSERT INTO d3_listp VALUES (1); @@ -143,14 +148,15 @@ a (1 row) step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach2: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach2: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s1brr: BEGIN ISOLATION LEVEL REPEATABLE READ; step s1s: SELECT * FROM d3_listp; @@ -179,14 +185,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s1drop: DROP TABLE d3_listp; step s1list: SELECT relname FROM pg_catalog.pg_class @@ -206,14 +213,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s1trunc: TRUNCATE TABLE d3_listp; step s1spart: SELECT * FROM d3_listp1; @@ -233,14 +241,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1noop: step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; ERROR: partition "d3_listp1" already pending detach in partitioned table "public.d3_listp" @@ -256,14 +265,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1noop: step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; step s1c: COMMIT; @@ -280,14 +290,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s1droppart: DROP TABLE d3_listp1; step s2detach2: ALTER TABLE d3_listp DETACH PARTITION d3_listp2 CONCURRENTLY; @@ -302,14 +313,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s2begin: BEGIN; step s2drop: DROP TABLE d3_listp1; @@ -331,14 +343,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s1b: BEGIN; step s1spart: SELECT * FROM d3_listp1; @@ -361,14 +374,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s1b: BEGIN; step s1s: SELECT * FROM d3_listp; @@ -389,14 +403,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s1b: BEGIN; step s1spart: SELECT * FROM d3_listp1; @@ -419,14 +434,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s2begin: BEGIN; step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; @@ -442,14 +458,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s2begin: BEGIN; step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; @@ -472,14 +489,15 @@ a (1 row) step s2detach: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 CONCURRENTLY; -step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s1cancel: SELECT pg_cancel_backend(pid) FROM d3_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1c: COMMIT; step s2begin: BEGIN; step s2detachfinal: ALTER TABLE d3_listp DETACH PARTITION d3_listp1 FINALIZE; diff --git a/src/test/isolation/expected/detach-partition-concurrently-4.out b/src/test/isolation/expected/detach-partition-concurrently-4.out index d728ecdf4ca8e..b652522e4248c 100644 --- a/src/test/isolation/expected/detach-partition-concurrently-4.out +++ b/src/test/isolation/expected/detach-partition-concurrently-4.out @@ -11,14 +11,15 @@ a (2 rows) step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; @@ -50,14 +51,15 @@ a (2 rows) step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; @@ -83,14 +85,15 @@ step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1declare: declare f cursor for select * from d4_primary; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1fetchall: fetch all from f; a - @@ -124,14 +127,15 @@ step s2snitch: insert into d4_pid select pg_backend_pid(); step s1b: begin; step s1declare: declare f cursor for select * from d4_primary; step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1svpt: savepoint f; step s1insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" @@ -251,14 +255,15 @@ a (1 row) step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1updcur: update d4_fk set a = 1 where current of f; ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s1c: commit; @@ -326,14 +331,15 @@ step s3brr: begin isolation level repeatable read; step s3insert: insert into d4_fk values (1); ERROR: insert or update on table "d4_fk" violates foreign key constraint "d4_fk_a_fkey" step s3commit: commit; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1c: commit; starting permutation: s2snitch s1b s1s s2detach s3brr s3insert s3commit s1c @@ -365,14 +371,15 @@ a (2 rows) step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1noop: step s3vacfreeze: vacuum freeze pg_catalog.pg_inherits; step s1s: select * from d4_primary; @@ -397,14 +404,15 @@ a (2 rows) step s2detach: alter table d4_primary detach partition d4_primary1 concurrently; -step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s1cancel: select pg_cancel_backend(pid) from d4_pid; +step s2detach: <... completed> +ERROR: canceling statement due to user request +step s1cancel: <... completed> pg_cancel_backend ----------------- t (1 row) -step s2detach: <... completed> -ERROR: canceling statement due to user request step s1noop: step s3vacfreeze: vacuum freeze pg_catalog.pg_inherits; step s1s: select * from d4_primary; diff --git a/src/test/isolation/specs/detach-partition-concurrently-3.spec b/src/test/isolation/specs/detach-partition-concurrently-3.spec index e74c73b93db64..31aa3080dafe2 100644 --- a/src/test/isolation/specs/detach-partition-concurrently-3.spec +++ b/src/test/isolation/specs/detach-partition-concurrently-3.spec @@ -1,8 +1,8 @@ # Try various things to happen to a partition with an incomplete detach # # Note: When using "s1cancel", mark the target step (the one to be canceled) -# as being blocked by "s1cancel". This ensures consistent reporting regardless -# of whether "s1cancel" returns before or after the other step reports failure. +# as blocking "s1cancel". This ensures consistent reporting regardless of +# whether "s1cancel" finishes before or after the other step reports failure. # Also, ensure the step after "s1cancel" is also an s1 step (use "s1noop" if # necessary). This ensures we won't move on to the next step until the cancel # is complete. @@ -50,37 +50,37 @@ step s2commit { COMMIT; } # Try various things while the partition is in "being detached" state, with # no session waiting. -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1describe s1alter -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1insert s1c -permutation s2snitch s1brr s1s s2detach(s1cancel) s1cancel s1insert s1c s1spart -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1insertpart +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1c s1describe s1alter +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1insert s1c +permutation s2snitch s1brr s1s s2detach s1cancel(s2detach) s1insert s1c s1spart +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1c s1insertpart # Test partition descriptor caching -permutation s2snitch s1b s1s s2detach2(s1cancel) s1cancel s1c s1brr s1insert s1s s1insert s1c -permutation s2snitch s1b s1s s2detach2(s1cancel) s1cancel s1c s1brr s1s s1insert s1s s1c +permutation s2snitch s1b s1s s2detach2 s1cancel(s2detach2) s1c s1brr s1insert s1s s1insert s1c +permutation s2snitch s1b s1s s2detach2 s1cancel(s2detach2) s1c s1brr s1s s1insert s1s s1c # "drop" here does both tables -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1drop s1list +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1c s1drop s1list # "truncate" only does parent, not partition -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1trunc s1spart +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1c s1trunc s1spart # If a partition pending detach exists, we cannot drop another one -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1noop s2detach2 s1c -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1noop s2detachfinal s1c s2detach2 -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1droppart s2detach2 +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1noop s2detach2 s1c +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1noop s2detachfinal s1c s2detach2 +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1c s1droppart s2detach2 # When a partition with incomplete detach is dropped, we grab lock on parent too. -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s2begin s2drop s1s s2commit +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1c s2begin s2drop s1s s2commit # Partially detach, then select and try to complete the detach. Reading # from partition blocks (AEL is required on partition); reading from parent # does not block. -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1b s1spart s2detachfinal s1c -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1b s1s s2detachfinal s1c +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1c s1b s1spart s2detachfinal s1c +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1c s1b s1s s2detachfinal s1c # DETACH FINALIZE in a transaction block. No insert/select on the partition # is allowed concurrently with that. -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s1b s1spart s2detachfinal s1c -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s2begin s2detachfinal s2commit -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s2begin s2detachfinal s1spart s2commit -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1c s2begin s2detachfinal s1insertpart s2commit +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1c s1b s1spart s2detachfinal s1c +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1c s2begin s2detachfinal s2commit +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1c s2begin s2detachfinal s1spart s2commit +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1c s2begin s2detachfinal s1insertpart s2commit diff --git a/src/test/isolation/specs/detach-partition-concurrently-4.spec b/src/test/isolation/specs/detach-partition-concurrently-4.spec index 8f998ed39a8ee..2c02cae4f1a24 100644 --- a/src/test/isolation/specs/detach-partition-concurrently-4.spec +++ b/src/test/isolation/specs/detach-partition-concurrently-4.spec @@ -5,8 +5,8 @@ # that keeping both variants adds any extra coverage.) # # Note: When using "s1cancel", mark the target step (the one to be canceled) -# as being blocked by "s1cancel". This ensures consistent reporting regardless -# of whether "s1cancel" returns before or after the other step reports failure. +# as blocking "s1cancel". This ensures consistent reporting regardless of +# whether "s1cancel" finishes before or after the other step reports failure. # Also, ensure the step after "s1cancel" is also an s1 step (use "s1noop" if # necessary). This ensures we won't move on to the next step until the cancel # is complete. @@ -50,34 +50,34 @@ step s3commit { commit; } step s3vacfreeze { vacuum freeze pg_catalog.pg_inherits; } # Trying to insert into a partially detached partition is rejected -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1insert s1c -permutation s2snitch s1b s1s s2detach s1insert s1c +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1insert s1c +permutation s2snitch s1b s1s s2detach s1insert s1c # ... even under REPEATABLE READ mode. -permutation s2snitch s1brr s1s s2detach(s1cancel) s1cancel s1insert s1c -permutation s2snitch s1brr s1s s2detach s1insert s1c +permutation s2snitch s1brr s1s s2detach s1cancel(s2detach) s1insert s1c +permutation s2snitch s1brr s1s s2detach s1insert s1c # If you read the referenced table using a cursor, you can see a row that the # RI query does not see. -permutation s2snitch s1b s1declare s2detach(s1cancel) s1cancel s1fetchall s1insert s1c -permutation s2snitch s1b s1declare s2detach s1fetchall s1insert s1c -permutation s2snitch s1b s1declare s2detach(s1cancel) s1cancel s1svpt s1insert s1rollback s1fetchall s1c -permutation s2snitch s1b s1declare s2detach s1svpt s1insert s1rollback s1fetchall s1c -permutation s2snitch s1b s2detach(s1cancel) s1declare s1cancel s1fetchall s1insert s1c -permutation s2snitch s1b s2detach s1declare s1fetchall s1insert s1c -permutation s2snitch s1b s2detach(s1cancel) s1declare s1cancel s1svpt s1insert s1rollback s1fetchall s1c -permutation s2snitch s1b s2detach s1declare s1svpt s1insert s1rollback s1fetchall s1c +permutation s2snitch s1b s1declare s2detach s1cancel(s2detach) s1fetchall s1insert s1c +permutation s2snitch s1b s1declare s2detach s1fetchall s1insert s1c +permutation s2snitch s1b s1declare s2detach s1cancel(s2detach) s1svpt s1insert s1rollback s1fetchall s1c +permutation s2snitch s1b s1declare s2detach s1svpt s1insert s1rollback s1fetchall s1c +permutation s2snitch s1b s2detach s1declare s1cancel(s2detach) s1fetchall s1insert s1c +permutation s2snitch s1b s2detach s1declare s1fetchall s1insert s1c +permutation s2snitch s1b s2detach s1declare s1cancel(s2detach) s1svpt s1insert s1rollback s1fetchall s1c +permutation s2snitch s1b s2detach s1declare s1svpt s1insert s1rollback s1fetchall s1c # Creating the referencing row using a cursor -permutation s2snitch s1brr s1declare2 s1fetchone s2detach(s1cancel) s1cancel s1updcur s1c -permutation s2snitch s1brr s1declare2 s1fetchone s2detach s1updcur s1c +permutation s2snitch s1brr s1declare2 s1fetchone s2detach s1cancel(s2detach) s1updcur s1c +permutation s2snitch s1brr s1declare2 s1fetchone s2detach s1updcur s1c permutation s2snitch s1brr s1declare2 s1fetchone s1updcur s2detach s1c # Try reading the table from an independent session. permutation s2snitch s1b s1s s2detach s3insert s1c -permutation s2snitch s1b s1s s2detach(s1cancel) s3brr s3insert s3commit s1cancel s1c +permutation s2snitch s1b s1s s2detach s3brr s3insert s3commit s1cancel(s2detach) s1c permutation s2snitch s1b s1s s2detach s3brr s3insert s3commit s1c # Try one where we VACUUM FREEZE pg_inherits (to verify that xmin change is # handled correctly). -permutation s2snitch s1brr s1s s2detach(s1cancel) s1cancel s1noop s3vacfreeze s1s s1insert s1c -permutation s2snitch s1b s1s s2detach(s1cancel) s1cancel s1noop s3vacfreeze s1s s1insert s1c +permutation s2snitch s1brr s1s s2detach s1cancel(s2detach) s1noop s3vacfreeze s1s s1insert s1c +permutation s2snitch s1b s1s s2detach s1cancel(s2detach) s1noop s3vacfreeze s1s s1insert s1c From 9753324b7d9eba0aaf7e12942f52c240bfc7da7c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 5 Jul 2021 16:51:57 -0400 Subject: [PATCH 606/671] Reduce overhead of cache-clobber testing in LookupOpclassInfo(). Commit 03ffc4d6d added logic to bypass all caching behavior in LookupOpclassInfo when CLOBBER_CACHE_ALWAYS is enabled. It doesn't look like I stopped to think much about what that would cost, but recent investigation shows that the cost is enormous: it roughly doubles the time needed for cache-clobber test runs. There does seem to be value in this behavior when trying to test the opclass-cache loading logic itself, but for other purposes the cost is excessive. Hence, let's back off to doing this only when debug_invalidate_system_caches_always is at least 3; or in older branches, when CLOBBER_CACHE_RECURSIVELY is defined. While here, clean up some other minor issues in LookupOpclassInfo. Re-order the code so we aren't left with broken cache entries (leading to later core dumps) in the unlikely case that we suffer OOM while trying to allocate space for a new entry. (That seems to be my oversight in 03ffc4d6d.) Also, in >= v13, stop allocating one array entry too many. That's evidently left over from sloppy reversion in 851b14b0c. Back-patch to all supported branches, mainly to reduce the runtime of cache-clobbering buildfarm animals. Discussion: https://postgr.es/m/1370856.1625428625@sss.pgh.pa.us --- src/backend/utils/cache/relcache.c | 44 ++++++++++++++++-------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 94fbf1aa190c4..5dac9f0696012 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -1594,14 +1594,14 @@ LookupOpclassInfo(Oid operatorClassOid, /* First time through: initialize the opclass cache */ HASHCTL ctl; + /* Also make sure CacheMemoryContext exists */ + if (!CacheMemoryContext) + CreateCacheMemoryContext(); + ctl.keysize = sizeof(Oid); ctl.entrysize = sizeof(OpClassCacheEnt); OpClassCache = hash_create("Operator class cache", 64, &ctl, HASH_ELEM | HASH_BLOBS); - - /* Also make sure CacheMemoryContext exists */ - if (!CacheMemoryContext) - CreateCacheMemoryContext(); } opcentry = (OpClassCacheEnt *) hash_search(OpClassCache, @@ -1610,16 +1610,10 @@ LookupOpclassInfo(Oid operatorClassOid, if (!found) { - /* Need to allocate memory for new entry */ + /* Initialize new entry */ opcentry->valid = false; /* until known OK */ opcentry->numSupport = numSupport; - - if (numSupport > 0) - opcentry->supportProcs = (RegProcedure *) - MemoryContextAllocZero(CacheMemoryContext, - (numSupport + 1) * sizeof(RegProcedure)); - else - opcentry->supportProcs = NULL; + opcentry->supportProcs = NULL; /* filled below */ } else { @@ -1627,14 +1621,17 @@ LookupOpclassInfo(Oid operatorClassOid, } /* - * When testing for cache-flush hazards, we intentionally disable the - * operator class cache and force reloading of the info on each call. This - * is helpful because we want to test the case where a cache flush occurs - * while we are loading the info, and it's very hard to provoke that if - * this happens only once per opclass per backend. + * When aggressively testing cache-flush hazards, we disable the operator + * class cache and force reloading of the info on each call. This models + * no real-world behavior, since the cache entries are never invalidated + * otherwise. However it can be helpful for detecting bugs in the cache + * loading logic itself, such as reliance on a non-nailed index. Given + * the limited use-case and the fact that this adds a great deal of + * expense, we enable it only for high values of + * debug_invalidate_system_caches_always. */ #ifdef CLOBBER_CACHE_ENABLED - if (debug_invalidate_system_caches_always > 0) + if (debug_invalidate_system_caches_always > 2) opcentry->valid = false; #endif @@ -1642,8 +1639,15 @@ LookupOpclassInfo(Oid operatorClassOid, return opcentry; /* - * Need to fill in new entry. - * + * Need to fill in new entry. First allocate space, unless we already did + * so in some previous attempt. + */ + if (opcentry->supportProcs == NULL && numSupport > 0) + opcentry->supportProcs = (RegProcedure *) + MemoryContextAllocZero(CacheMemoryContext, + numSupport * sizeof(RegProcedure)); + + /* * To avoid infinite recursion during startup, force heap scans if we're * looking up info for the opclasses used by the indexes we would like to * reference here. From 2aca19f2989aa938ece7306678f5494a984ece3f Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 6 Jul 2021 08:10:59 +0900 Subject: [PATCH 607/671] Use WaitLatch() instead of pg_usleep() at the end of backups This concerns pg_stop_backup() and BASE_BACKUP, when waiting for the WAL segments required for a backup to be archived. This simplifies a bit the handling of the wait event used in this code path. Author: Bharath Rupireddy Reviewed-by: Michael Paquier, Stephen Frost Discussion: https://postgr.es/m/CALj2ACU4AdPCq6NLfcA-ZGwX7pPCK5FgEj-CAU0xCKzkASSy_A@mail.gmail.com --- src/backend/access/transam/xlog.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 7890e13d7a137..c7c928f50bd94 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -11638,9 +11638,11 @@ do_pg_stop_backup(char *labelfile, bool waitforarchive, TimeLineID *stoptli_p) reported_waiting = true; } - pgstat_report_wait_start(WAIT_EVENT_BACKUP_WAIT_WAL_ARCHIVE); - pg_usleep(1000000L); - pgstat_report_wait_end(); + (void) WaitLatch(MyLatch, + WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH, + 1000L, + WAIT_EVENT_BACKUP_WAIT_WAL_ARCHIVE); + ResetLatch(MyLatch); if (++waits >= seconds_before_warning) { From 53d86957e980efa06f15232b8cff430d4cc6dd64 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Tue, 6 Jul 2021 12:24:43 +1200 Subject: [PATCH 608/671] Reduce the number of pallocs when building partition bounds In each of the create_*_bound() functions for LIST, RANGE and HASH partitioning, there were a large number of palloc calls which could be reduced down to a much smaller number. In each of these functions, an array was built so that we could qsort it before making the PartitionBoundInfo. For LIST and HASH partitioning, an array of pointers was allocated then each element was allocated within that array. Since the number of items of each dimension is known beforehand, we can just allocate a single chunk of memory for this. Similarly, with all partition strategies, we're able to reduce the number of allocations to build the ->datums field. This is an array of Datum pointers, but there's no need for the Datums that each element points to to be singly allocated. One big chunk will do. For RANGE partitioning, the PartitionBoundInfo->kind field can get the same treatment. We can apply the same optimizations to partition_bounds_copy(). Doing this might have a small effect on cache performance when searching for the correct partition during partition pruning or DML on a partitioned table. However, that's likely to be small and this is mostly about reducing palloc overhead. Author: Nitin Jadhav, Justin Pryzby, David Rowley Reviewed-by: Justin Pryzby, Zhihong Yu Discussion: https://postgr.es/m/flat/CAMm1aWYFTqEio3bURzZh47jveiHRwgQTiSDvBORczNEz2duZ1Q@mail.gmail.com --- src/backend/partitioning/partbounds.c | 194 ++++++++++++++++---------- 1 file changed, 123 insertions(+), 71 deletions(-) diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index 7096d3bf4504a..00c394445a830 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -358,10 +358,10 @@ create_hash_bounds(PartitionBoundSpec **boundspecs, int nparts, PartitionKey key, int **mapping) { PartitionBoundInfo boundinfo; - PartitionHashBound **hbounds = NULL; + PartitionHashBound *hbounds; int i; - int ndatums = 0; int greatest_modulus; + Datum *boundDatums; boundinfo = (PartitionBoundInfoData *) palloc0(sizeof(PartitionBoundInfoData)); @@ -370,9 +370,8 @@ create_hash_bounds(PartitionBoundSpec **boundspecs, int nparts, boundinfo->null_index = -1; boundinfo->default_index = -1; - ndatums = nparts; - hbounds = (PartitionHashBound **) - palloc(nparts * sizeof(PartitionHashBound *)); + hbounds = (PartitionHashBound *) + palloc(nparts * sizeof(PartitionHashBound)); /* Convert from node to the internal representation */ for (i = 0; i < nparts; i++) @@ -382,26 +381,33 @@ create_hash_bounds(PartitionBoundSpec **boundspecs, int nparts, if (spec->strategy != PARTITION_STRATEGY_HASH) elog(ERROR, "invalid strategy in partition bound spec"); - hbounds[i] = (PartitionHashBound *) palloc(sizeof(PartitionHashBound)); - hbounds[i]->modulus = spec->modulus; - hbounds[i]->remainder = spec->remainder; - hbounds[i]->index = i; + hbounds[i].modulus = spec->modulus; + hbounds[i].remainder = spec->remainder; + hbounds[i].index = i; } /* Sort all the bounds in ascending order */ - qsort(hbounds, nparts, sizeof(PartitionHashBound *), + qsort(hbounds, nparts, sizeof(PartitionHashBound), qsort_partition_hbound_cmp); /* After sorting, moduli are now stored in ascending order. */ - greatest_modulus = hbounds[ndatums - 1]->modulus; + greatest_modulus = hbounds[nparts - 1].modulus; - boundinfo->ndatums = ndatums; - boundinfo->datums = (Datum **) palloc0(ndatums * sizeof(Datum *)); + boundinfo->ndatums = nparts; + boundinfo->datums = (Datum **) palloc0(nparts * sizeof(Datum *)); + boundinfo->kind = NULL; boundinfo->nindexes = greatest_modulus; boundinfo->indexes = (int *) palloc(greatest_modulus * sizeof(int)); for (i = 0; i < greatest_modulus; i++) boundinfo->indexes[i] = -1; + /* + * In the loop below, to save from allocating a series of small datum + * arrays, here we just allocate a single array and below we'll just + * assign a portion of this array per partition. + */ + boundDatums = (Datum *) palloc(nparts * 2 * sizeof(Datum)); + /* * For hash partitioning, there are as many datums (modulus and remainder * pairs) as there are partitions. Indexes are simply values ranging from @@ -409,10 +415,10 @@ create_hash_bounds(PartitionBoundSpec **boundspecs, int nparts, */ for (i = 0; i < nparts; i++) { - int modulus = hbounds[i]->modulus; - int remainder = hbounds[i]->remainder; + int modulus = hbounds[i].modulus; + int remainder = hbounds[i].remainder; - boundinfo->datums[i] = (Datum *) palloc(2 * sizeof(Datum)); + boundinfo->datums[i] = &boundDatums[i * 2]; boundinfo->datums[i][0] = Int32GetDatum(modulus); boundinfo->datums[i][1] = Int32GetDatum(remainder); @@ -424,14 +430,39 @@ create_hash_bounds(PartitionBoundSpec **boundspecs, int nparts, remainder += modulus; } - (*mapping)[hbounds[i]->index] = i; - pfree(hbounds[i]); + (*mapping)[hbounds[i].index] = i; } pfree(hbounds); return boundinfo; } +/* + * get_non_null_list_datum_count + * Counts the number of non-null Datums in each partition. + */ +static int +get_non_null_list_datum_count(PartitionBoundSpec **boundspecs, int nparts) +{ + int i; + int count = 0; + + for (i = 0; i < nparts; i++) + { + ListCell *lc; + + foreach(lc, boundspecs[i]->listdatums) + { + Const *val = castNode(Const, lfirst(lc)); + + if (!val->constisnull) + count++; + } + } + + return count; +} + /* * create_list_bounds * Create a PartitionBoundInfo for a list partitioned table @@ -441,14 +472,14 @@ create_list_bounds(PartitionBoundSpec **boundspecs, int nparts, PartitionKey key, int **mapping) { PartitionBoundInfo boundinfo; - PartitionListValue **all_values = NULL; - ListCell *cell; - int i = 0; - int ndatums = 0; + PartitionListValue *all_values; + int i; + int j; + int ndatums; int next_index = 0; int default_index = -1; int null_index = -1; - List *non_null_values = NIL; + Datum *boundDatums; boundinfo = (PartitionBoundInfoData *) palloc0(sizeof(PartitionBoundInfoData)); @@ -457,8 +488,12 @@ create_list_bounds(PartitionBoundSpec **boundspecs, int nparts, boundinfo->null_index = -1; boundinfo->default_index = -1; + ndatums = get_non_null_list_datum_count(boundspecs, nparts); + all_values = (PartitionListValue *) + palloc(ndatums * sizeof(PartitionListValue)); + /* Create a unified list of non-null values across all partitions. */ - for (i = 0; i < nparts; i++) + for (j = 0, i = 0; i < nparts; i++) { PartitionBoundSpec *spec = boundspecs[i]; ListCell *c; @@ -480,14 +515,12 @@ create_list_bounds(PartitionBoundSpec **boundspecs, int nparts, foreach(c, spec->listdatums) { Const *val = castNode(Const, lfirst(c)); - PartitionListValue *list_value = NULL; if (!val->constisnull) { - list_value = (PartitionListValue *) - palloc0(sizeof(PartitionListValue)); - list_value->index = i; - list_value->value = val->constvalue; + all_values[j].index = i; + all_values[j].value = val->constvalue; + j++; } else { @@ -499,40 +532,28 @@ create_list_bounds(PartitionBoundSpec **boundspecs, int nparts, elog(ERROR, "found null more than once"); null_index = i; } - - if (list_value) - non_null_values = lappend(non_null_values, list_value); } } - ndatums = list_length(non_null_values); - - /* - * Collect all list values in one array. Alongside the value, we also save - * the index of partition the value comes from. - */ - all_values = (PartitionListValue **) - palloc(ndatums * sizeof(PartitionListValue *)); - i = 0; - foreach(cell, non_null_values) - { - PartitionListValue *src = lfirst(cell); - - all_values[i] = (PartitionListValue *) - palloc(sizeof(PartitionListValue)); - all_values[i]->value = src->value; - all_values[i]->index = src->index; - i++; - } + /* ensure we found a Datum for every slot in the all_values array */ + Assert(j == ndatums); - qsort_arg(all_values, ndatums, sizeof(PartitionListValue *), + qsort_arg(all_values, ndatums, sizeof(PartitionListValue), qsort_partition_list_value_cmp, (void *) key); boundinfo->ndatums = ndatums; boundinfo->datums = (Datum **) palloc0(ndatums * sizeof(Datum *)); + boundinfo->kind = NULL; boundinfo->nindexes = ndatums; boundinfo->indexes = (int *) palloc(ndatums * sizeof(int)); + /* + * In the loop below, to save from allocating a series of small datum + * arrays, here we just allocate a single array and below we'll just + * assign a portion of this array per datum. + */ + boundDatums = (Datum *) palloc(ndatums * sizeof(Datum)); + /* * Copy values. Canonical indexes are values ranging from 0 to (nparts - * 1) assigned to each partition such that all datums of a given partition @@ -541,10 +562,10 @@ create_list_bounds(PartitionBoundSpec **boundspecs, int nparts, */ for (i = 0; i < ndatums; i++) { - int orig_index = all_values[i]->index; + int orig_index = all_values[i].index; - boundinfo->datums[i] = (Datum *) palloc(sizeof(Datum)); - boundinfo->datums[i][0] = datumCopy(all_values[i]->value, + boundinfo->datums[i] = &boundDatums[i]; + boundinfo->datums[i][0] = datumCopy(all_values[i].value, key->parttypbyval[0], key->parttyplen[0]); @@ -555,6 +576,8 @@ create_list_bounds(PartitionBoundSpec **boundspecs, int nparts, boundinfo->indexes[i] = (*mapping)[orig_index]; } + pfree(all_values); + /* * Set the canonical value for null_index, if any. * @@ -603,10 +626,13 @@ create_range_bounds(PartitionBoundSpec **boundspecs, int nparts, PartitionRangeBound **all_bounds, *prev; int i, - k; + k, + partnatts; int ndatums = 0; int default_index = -1; int next_index = 0; + Datum *boundDatums; + PartitionRangeDatumKind *boundKinds; boundinfo = (PartitionBoundInfoData *) palloc0(sizeof(PartitionBoundInfoData)); @@ -707,6 +733,8 @@ create_range_bounds(PartitionBoundSpec **boundspecs, int nparts, prev = cur; } + pfree(all_bounds); + /* Update ndatums to hold the count of distinct datums. */ ndatums = k; @@ -731,16 +759,24 @@ create_range_bounds(PartitionBoundSpec **boundspecs, int nparts, boundinfo->nindexes = ndatums + 1; boundinfo->indexes = (int *) palloc((ndatums + 1) * sizeof(int)); + /* + * In the loop below, to save from allocating a series of small arrays, + * here we just allocate a single array for Datums and another for + * PartitionRangeDatumKinds, below we'll just assign a portion of these + * arrays in each loop. + */ + partnatts = key->partnatts; + boundDatums = (Datum *) palloc(ndatums * partnatts * sizeof(Datum)); + boundKinds = (PartitionRangeDatumKind *) palloc(ndatums * partnatts * + sizeof(PartitionRangeDatumKind)); + for (i = 0; i < ndatums; i++) { int j; - boundinfo->datums[i] = (Datum *) palloc(key->partnatts * - sizeof(Datum)); - boundinfo->kind[i] = (PartitionRangeDatumKind *) - palloc(key->partnatts * - sizeof(PartitionRangeDatumKind)); - for (j = 0; j < key->partnatts; j++) + boundinfo->datums[i] = &boundDatums[i * partnatts]; + boundinfo->kind[i] = &boundKinds[i * partnatts]; + for (j = 0; j < partnatts; j++) { if (rbounds[i]->kind[j] == PARTITION_RANGE_DATUM_VALUE) boundinfo->datums[i][j] = @@ -772,6 +808,8 @@ create_range_bounds(PartitionBoundSpec **boundspecs, int nparts, } } + pfree(rbounds); + /* Set the canonical value for default_index, if any. */ if (default_index != -1) { @@ -914,6 +952,7 @@ partition_bounds_copy(PartitionBoundInfo src, int partnatts; bool hash_part; int natts; + Datum *boundDatums; dest = (PartitionBoundInfo) palloc(sizeof(PartitionBoundInfoData)); @@ -929,15 +968,27 @@ partition_bounds_copy(PartitionBoundInfo src, if (src->kind != NULL) { + PartitionRangeDatumKind *boundKinds; + + /* only RANGE partition should have a non-NULL kind */ + Assert(key->strategy == PARTITION_STRATEGY_RANGE); + dest->kind = (PartitionRangeDatumKind **) palloc(ndatums * sizeof(PartitionRangeDatumKind *)); + + /* + * In the loop below, to save from allocating a series of small arrays + * for storing the PartitionRangeDatumKind, we allocate a single chunk + * here and use a smaller portion of it for each datum. + */ + boundKinds = (PartitionRangeDatumKind *) palloc(ndatums * partnatts * + sizeof(PartitionRangeDatumKind)); + for (i = 0; i < ndatums; i++) { - dest->kind[i] = (PartitionRangeDatumKind *) palloc(partnatts * - sizeof(PartitionRangeDatumKind)); - + dest->kind[i] = &boundKinds[i * partnatts]; memcpy(dest->kind[i], src->kind[i], - sizeof(PartitionRangeDatumKind) * key->partnatts); + sizeof(PartitionRangeDatumKind) * partnatts); } } else @@ -949,12 +1000,13 @@ partition_bounds_copy(PartitionBoundInfo src, */ hash_part = (key->strategy == PARTITION_STRATEGY_HASH); natts = hash_part ? 2 : partnatts; + boundDatums = palloc(ndatums * natts * sizeof(Datum)); for (i = 0; i < ndatums; i++) { int j; - dest->datums[i] = (Datum *) palloc(sizeof(Datum) * natts); + dest->datums[i] = &boundDatums[i * natts]; for (j = 0; j < natts; j++) { @@ -3682,8 +3734,8 @@ partition_hash_bsearch(PartitionBoundInfo boundinfo, static int32 qsort_partition_hbound_cmp(const void *a, const void *b) { - PartitionHashBound *h1 = (*(PartitionHashBound *const *) a); - PartitionHashBound *h2 = (*(PartitionHashBound *const *) b); + PartitionHashBound *const h1 = (PartitionHashBound *const) a; + PartitionHashBound *const h2 = (PartitionHashBound *const) b; return partition_hbound_cmp(h1->modulus, h1->remainder, h2->modulus, h2->remainder); @@ -3697,8 +3749,8 @@ qsort_partition_hbound_cmp(const void *a, const void *b) static int32 qsort_partition_list_value_cmp(const void *a, const void *b, void *arg) { - Datum val1 = (*(PartitionListValue *const *) a)->value, - val2 = (*(PartitionListValue *const *) b)->value; + Datum val1 = ((PartitionListValue *const) a)->value, + val2 = ((PartitionListValue *const) b)->value; PartitionKey key = (PartitionKey) arg; return DatumGetInt32(FunctionCall2Coll(&key->partsupfunc[0], From 9ee91cc583802c6507fbc31c348a79e63a10f956 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Tue, 6 Jul 2021 12:38:50 +1200 Subject: [PATCH 609/671] Fix typo in comment Author: James Coleman Discussion: https://postgr.es/m/CAAaqYe8f8ENA0i1PdBtUNWDd2sxHSMgscNYbjhaXMuAdfBrZcg@mail.gmail.com --- src/backend/optimizer/path/allpaths.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 353454b183e52..17febfff8aaa8 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -2794,8 +2794,8 @@ generate_useful_gather_paths(PlannerInfo *root, RelOptInfo *rel, bool override_r * gather merge path for every subpath that has pathkeys present. * * But since the subpath is already sorted, we know we don't need - * to consider adding a sort (other either kind) on top of it, so - * we can continue here. + * to consider adding a sort (full or incremental) on top of it, + * so we can continue here. */ if (is_sorted) continue; From 8aafb02616753f5c6c90bbc567636b73c0cbb9d4 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Tue, 6 Jul 2021 07:46:50 +0530 Subject: [PATCH 610/671] Refactor function parse_subscription_options. Instead of using multiple parameters in parse_subscription_options function signature, use the struct SubOpts that encapsulate all the subscription options and their values. It will be useful for future work where we need to add other options in the subscription. Also, use bitmaps to pass the supported and retrieve the specified options much like the way it is done in the commit a3dc926009. Author: Bharath Rupireddy Reviewed-By: Peter Smith, Amit Kapila, Alvaro Herrera Discussion: https://postgr.es/m/CALj2ACXtoQczfNsDQWobypVvHbX2DtgEHn8DawS0eGFwuo72kw@mail.gmail.com --- src/backend/commands/subscriptioncmds.c | 439 +++++++++++------------- src/tools/pgindent/typedefs.list | 1 + 2 files changed, 207 insertions(+), 233 deletions(-) diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index b862e59f1da8a..eb88d877a5032 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -46,6 +46,41 @@ #include "utils/memutils.h" #include "utils/syscache.h" +/* + * Options that can be specified by the user in CREATE/ALTER SUBSCRIPTION + * command. + */ +#define SUBOPT_CONNECT 0x00000001 +#define SUBOPT_ENABLED 0x00000002 +#define SUBOPT_CREATE_SLOT 0x00000004 +#define SUBOPT_SLOT_NAME 0x00000008 +#define SUBOPT_COPY_DATA 0x00000010 +#define SUBOPT_SYNCHRONOUS_COMMIT 0x00000020 +#define SUBOPT_REFRESH 0x00000040 +#define SUBOPT_BINARY 0x00000080 +#define SUBOPT_STREAMING 0x00000100 + +/* check if the 'val' has 'bits' set */ +#define IsSet(val, bits) (((val) & (bits)) == (bits)) + +/* + * Structure to hold a bitmap representing the user-provided CREATE/ALTER + * SUBSCRIPTION command options and the parsed/default values of each of them. + */ +typedef struct SubOpts +{ + bits32 specified_opts; + char *slot_name; + char *synchronous_commit; + bool connect; + bool enabled; + bool create_slot; + bool copy_data; + bool refresh; + bool binary; + bool streaming; +} SubOpts; + static List *fetch_table_list(WalReceiverConn *wrconn, List *publications); static void check_duplicates_in_publist(List *publist, Datum *datums); static List *merge_publications(List *oldpublist, List *newpublist, bool addpub, const char *subname); @@ -56,164 +91,151 @@ static void ReportSlotConnectionError(List *rstates, Oid subid, char *slotname, * Common option parsing function for CREATE and ALTER SUBSCRIPTION commands. * * Since not all options can be specified in both commands, this function - * will report an error on options if the target output pointer is NULL to - * accommodate that. + * will report an error if mutually exclusive options are specified. + * + * Caller is expected to have cleared 'opts'. */ static void -parse_subscription_options(List *options, - bool *connect, - bool *enabled_given, bool *enabled, - bool *create_slot, - bool *slot_name_given, char **slot_name, - bool *copy_data, - char **synchronous_commit, - bool *refresh, - bool *binary_given, bool *binary, - bool *streaming_given, bool *streaming) +parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *opts) { ListCell *lc; - bool connect_given = false; - bool create_slot_given = false; - bool copy_data_given = false; - bool refresh_given = false; - - /* If connect is specified, the others also need to be. */ - Assert(!connect || (enabled && create_slot && copy_data)); - if (connect) - *connect = true; - if (enabled) - { - *enabled_given = false; - *enabled = true; - } - if (create_slot) - *create_slot = true; - if (slot_name) - { - *slot_name_given = false; - *slot_name = NULL; - } - if (copy_data) - *copy_data = true; - if (synchronous_commit) - *synchronous_commit = NULL; - if (refresh) - *refresh = true; - if (binary) - { - *binary_given = false; - *binary = false; - } - if (streaming) - { - *streaming_given = false; - *streaming = false; - } + /* caller must expect some option */ + Assert(supported_opts != 0); + + /* If connect option is supported, these others also need to be. */ + Assert(!IsSet(supported_opts, SUBOPT_CONNECT) || + IsSet(supported_opts, SUBOPT_ENABLED | SUBOPT_CREATE_SLOT | + SUBOPT_COPY_DATA)); + + /* Set default values for the boolean supported options. */ + if (IsSet(supported_opts, SUBOPT_CONNECT)) + opts->connect = true; + if (IsSet(supported_opts, SUBOPT_ENABLED)) + opts->enabled = true; + if (IsSet(supported_opts, SUBOPT_CREATE_SLOT)) + opts->create_slot = true; + if (IsSet(supported_opts, SUBOPT_COPY_DATA)) + opts->copy_data = true; + if (IsSet(supported_opts, SUBOPT_REFRESH)) + opts->refresh = true; + if (IsSet(supported_opts, SUBOPT_BINARY)) + opts->binary = false; + if (IsSet(supported_opts, SUBOPT_STREAMING)) + opts->streaming = false; /* Parse options */ - foreach(lc, options) + foreach(lc, stmt_options) { DefElem *defel = (DefElem *) lfirst(lc); - if (strcmp(defel->defname, "connect") == 0 && connect) + if (IsSet(supported_opts, SUBOPT_CONNECT) && + strcmp(defel->defname, "connect") == 0) { - if (connect_given) + if (IsSet(opts->specified_opts, SUBOPT_CONNECT)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("conflicting or redundant options"))); - connect_given = true; - *connect = defGetBoolean(defel); + opts->specified_opts |= SUBOPT_CONNECT; + opts->connect = defGetBoolean(defel); } - else if (strcmp(defel->defname, "enabled") == 0 && enabled) + else if (IsSet(supported_opts, SUBOPT_ENABLED) && + strcmp(defel->defname, "enabled") == 0) { - if (*enabled_given) + if (IsSet(opts->specified_opts, SUBOPT_ENABLED)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("conflicting or redundant options"))); - *enabled_given = true; - *enabled = defGetBoolean(defel); + opts->specified_opts |= SUBOPT_ENABLED; + opts->enabled = defGetBoolean(defel); } - else if (strcmp(defel->defname, "create_slot") == 0 && create_slot) + else if (IsSet(supported_opts, SUBOPT_CREATE_SLOT) && + strcmp(defel->defname, "create_slot") == 0) { - if (create_slot_given) + if (IsSet(opts->specified_opts, SUBOPT_CREATE_SLOT)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("conflicting or redundant options"))); - create_slot_given = true; - *create_slot = defGetBoolean(defel); + opts->specified_opts |= SUBOPT_CREATE_SLOT; + opts->create_slot = defGetBoolean(defel); } - else if (strcmp(defel->defname, "slot_name") == 0 && slot_name) + else if (IsSet(supported_opts, SUBOPT_SLOT_NAME) && + strcmp(defel->defname, "slot_name") == 0) { - if (*slot_name_given) + if (IsSet(opts->specified_opts, SUBOPT_SLOT_NAME)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("conflicting or redundant options"))); - *slot_name_given = true; - *slot_name = defGetString(defel); + opts->specified_opts |= SUBOPT_SLOT_NAME; + opts->slot_name = defGetString(defel); /* Setting slot_name = NONE is treated as no slot name. */ - if (strcmp(*slot_name, "none") == 0) - *slot_name = NULL; + if (strcmp(opts->slot_name, "none") == 0) + opts->slot_name = NULL; } - else if (strcmp(defel->defname, "copy_data") == 0 && copy_data) + else if (IsSet(supported_opts, SUBOPT_COPY_DATA) && + strcmp(defel->defname, "copy_data") == 0) { - if (copy_data_given) + if (IsSet(opts->specified_opts, SUBOPT_COPY_DATA)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("conflicting or redundant options"))); - copy_data_given = true; - *copy_data = defGetBoolean(defel); + opts->specified_opts |= SUBOPT_COPY_DATA; + opts->copy_data = defGetBoolean(defel); } - else if (strcmp(defel->defname, "synchronous_commit") == 0 && - synchronous_commit) + else if (IsSet(supported_opts, SUBOPT_SYNCHRONOUS_COMMIT) && + strcmp(defel->defname, "synchronous_commit") == 0) { - if (*synchronous_commit) + if (IsSet(opts->specified_opts, SUBOPT_SYNCHRONOUS_COMMIT)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("conflicting or redundant options"))); - *synchronous_commit = defGetString(defel); + opts->specified_opts |= SUBOPT_SYNCHRONOUS_COMMIT; + opts->synchronous_commit = defGetString(defel); /* Test if the given value is valid for synchronous_commit GUC. */ - (void) set_config_option("synchronous_commit", *synchronous_commit, + (void) set_config_option("synchronous_commit", opts->synchronous_commit, PGC_BACKEND, PGC_S_TEST, GUC_ACTION_SET, false, 0, false); } - else if (strcmp(defel->defname, "refresh") == 0 && refresh) + else if (IsSet(supported_opts, SUBOPT_REFRESH) && + strcmp(defel->defname, "refresh") == 0) { - if (refresh_given) + if (IsSet(opts->specified_opts, SUBOPT_REFRESH)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("conflicting or redundant options"))); - refresh_given = true; - *refresh = defGetBoolean(defel); + opts->specified_opts |= SUBOPT_REFRESH; + opts->refresh = defGetBoolean(defel); } - else if (strcmp(defel->defname, "binary") == 0 && binary) + else if (IsSet(supported_opts, SUBOPT_BINARY) && + strcmp(defel->defname, "binary") == 0) { - if (*binary_given) + if (IsSet(opts->specified_opts, SUBOPT_BINARY)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("conflicting or redundant options"))); - *binary_given = true; - *binary = defGetBoolean(defel); + opts->specified_opts |= SUBOPT_BINARY; + opts->binary = defGetBoolean(defel); } - else if (strcmp(defel->defname, "streaming") == 0 && streaming) + else if (IsSet(supported_opts, SUBOPT_STREAMING) && + strcmp(defel->defname, "streaming") == 0) { - if (*streaming_given) + if (IsSet(opts->specified_opts, SUBOPT_STREAMING)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("conflicting or redundant options"))); - *streaming_given = true; - *streaming = defGetBoolean(defel); + opts->specified_opts |= SUBOPT_STREAMING; + opts->streaming = defGetBoolean(defel); } else ereport(ERROR, @@ -225,63 +247,81 @@ parse_subscription_options(List *options, * We've been explicitly asked to not connect, that requires some * additional processing. */ - if (connect && !*connect) + if (!opts->connect && IsSet(supported_opts, SUBOPT_CONNECT)) { /* Check for incompatible options from the user. */ - if (enabled && *enabled_given && *enabled) + if (opts->enabled && + IsSet(supported_opts, SUBOPT_ENABLED) && + IsSet(opts->specified_opts, SUBOPT_ENABLED)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), /*- translator: both %s are strings of the form "option = value" */ errmsg("%s and %s are mutually exclusive options", "connect = false", "enabled = true"))); - if (create_slot && create_slot_given && *create_slot) + if (opts->create_slot && + IsSet(supported_opts, SUBOPT_CREATE_SLOT) && + IsSet(opts->specified_opts, SUBOPT_CREATE_SLOT)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("%s and %s are mutually exclusive options", "connect = false", "create_slot = true"))); - if (copy_data && copy_data_given && *copy_data) + if (opts->copy_data && + IsSet(supported_opts, SUBOPT_COPY_DATA) && + IsSet(opts->specified_opts, SUBOPT_COPY_DATA)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("%s and %s are mutually exclusive options", "connect = false", "copy_data = true"))); /* Change the defaults of other options. */ - *enabled = false; - *create_slot = false; - *copy_data = false; + opts->enabled = false; + opts->create_slot = false; + opts->copy_data = false; } /* * Do additional checking for disallowed combination when slot_name = NONE * was used. */ - if (slot_name && *slot_name_given && !*slot_name) + if (!opts->slot_name && + IsSet(supported_opts, SUBOPT_SLOT_NAME) && + IsSet(opts->specified_opts, SUBOPT_SLOT_NAME)) { - if (enabled && *enabled_given && *enabled) + if (opts->enabled && + IsSet(supported_opts, SUBOPT_ENABLED) && + IsSet(opts->specified_opts, SUBOPT_ENABLED)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), /*- translator: both %s are strings of the form "option = value" */ errmsg("%s and %s are mutually exclusive options", "slot_name = NONE", "enabled = true"))); - if (create_slot && create_slot_given && *create_slot) + if (opts->create_slot && + IsSet(supported_opts, SUBOPT_CREATE_SLOT) && + IsSet(opts->specified_opts, SUBOPT_CREATE_SLOT)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), + /*- translator: both %s are strings of the form "option = value" */ errmsg("%s and %s are mutually exclusive options", "slot_name = NONE", "create_slot = true"))); - if (enabled && !*enabled_given && *enabled) + if (opts->enabled && + IsSet(supported_opts, SUBOPT_ENABLED) && + !IsSet(opts->specified_opts, SUBOPT_ENABLED)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), /*- translator: both %s are strings of the form "option = value" */ errmsg("subscription with %s must also set %s", "slot_name = NONE", "enabled = false"))); - if (create_slot && !create_slot_given && *create_slot) + if (opts->create_slot && + IsSet(supported_opts, SUBOPT_CREATE_SLOT) && + !IsSet(opts->specified_opts, SUBOPT_CREATE_SLOT)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), + /*- translator: both %s are strings of the form "option = value" */ errmsg("subscription with %s must also set %s", "slot_name = NONE", "create_slot = false"))); } @@ -331,37 +371,22 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) Datum values[Natts_pg_subscription]; Oid owner = GetUserId(); HeapTuple tup; - bool connect; - bool enabled_given; - bool enabled; - bool copy_data; - bool streaming; - bool streaming_given; - char *synchronous_commit; char *conninfo; - char *slotname; - bool slotname_given; - bool binary; - bool binary_given; char originname[NAMEDATALEN]; - bool create_slot; List *publications; + bits32 supported_opts; + SubOpts opts = {0}; /* * Parse and check options. * * Connection and publication should not be specified here. */ - parse_subscription_options(stmt->options, - &connect, - &enabled_given, &enabled, - &create_slot, - &slotname_given, &slotname, - ©_data, - &synchronous_commit, - NULL, /* no "refresh" */ - &binary_given, &binary, - &streaming_given, &streaming); + supported_opts = (SUBOPT_CONNECT | SUBOPT_ENABLED | SUBOPT_CREATE_SLOT | + SUBOPT_SLOT_NAME | SUBOPT_COPY_DATA | + SUBOPT_SYNCHRONOUS_COMMIT | SUBOPT_BINARY | + SUBOPT_STREAMING); + parse_subscription_options(stmt->options, supported_opts, &opts); /* * Since creating a replication slot is not transactional, rolling back @@ -369,7 +394,7 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) * CREATE SUBSCRIPTION inside a transaction block if creating a * replication slot. */ - if (create_slot) + if (opts.create_slot) PreventInTransactionBlock(isTopLevel, "CREATE SUBSCRIPTION ... WITH (create_slot = true)"); if (!superuser()) @@ -399,12 +424,13 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) stmt->subname))); } - if (!slotname_given && slotname == NULL) - slotname = stmt->subname; + if (!IsSet(opts.specified_opts, SUBOPT_SLOT_NAME) && + opts.slot_name == NULL) + opts.slot_name = stmt->subname; /* The default for synchronous_commit of subscriptions is off. */ - if (synchronous_commit == NULL) - synchronous_commit = "off"; + if (opts.synchronous_commit == NULL) + opts.synchronous_commit = "off"; conninfo = stmt->conninfo; publications = stmt->publication; @@ -426,18 +452,18 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) values[Anum_pg_subscription_subname - 1] = DirectFunctionCall1(namein, CStringGetDatum(stmt->subname)); values[Anum_pg_subscription_subowner - 1] = ObjectIdGetDatum(owner); - values[Anum_pg_subscription_subenabled - 1] = BoolGetDatum(enabled); - values[Anum_pg_subscription_subbinary - 1] = BoolGetDatum(binary); - values[Anum_pg_subscription_substream - 1] = BoolGetDatum(streaming); + values[Anum_pg_subscription_subenabled - 1] = BoolGetDatum(opts.enabled); + values[Anum_pg_subscription_subbinary - 1] = BoolGetDatum(opts.binary); + values[Anum_pg_subscription_substream - 1] = BoolGetDatum(opts.streaming); values[Anum_pg_subscription_subconninfo - 1] = CStringGetTextDatum(conninfo); - if (slotname) + if (opts.slot_name) values[Anum_pg_subscription_subslotname - 1] = - DirectFunctionCall1(namein, CStringGetDatum(slotname)); + DirectFunctionCall1(namein, CStringGetDatum(opts.slot_name)); else nulls[Anum_pg_subscription_subslotname - 1] = true; values[Anum_pg_subscription_subsynccommit - 1] = - CStringGetTextDatum(synchronous_commit); + CStringGetTextDatum(opts.synchronous_commit); values[Anum_pg_subscription_subpublications - 1] = publicationListToArray(publications); @@ -456,7 +482,7 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) * Connect to remote side to execute requested commands and fetch table * info. */ - if (connect) + if (opts.connect) { char *err; WalReceiverConn *wrconn; @@ -477,7 +503,7 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) * Set sync state based on if we were asked to do data copy or * not. */ - table_state = copy_data ? SUBREL_STATE_INIT : SUBREL_STATE_READY; + table_state = opts.copy_data ? SUBREL_STATE_INIT : SUBREL_STATE_READY; /* * Get the table list from publisher and build local table status @@ -504,15 +530,15 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) * won't use the initial snapshot for anything, so no need to * export it. */ - if (create_slot) + if (opts.create_slot) { - Assert(slotname); + Assert(opts.slot_name); - walrcv_create_slot(wrconn, slotname, false, + walrcv_create_slot(wrconn, opts.slot_name, false, CRS_NOEXPORT_SNAPSHOT, NULL); ereport(NOTICE, (errmsg("created replication slot \"%s\" on publisher", - slotname))); + opts.slot_name))); } } PG_FINALLY(); @@ -529,7 +555,7 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) table_close(rel, RowExclusiveLock); - if (enabled) + if (opts.enabled) ApplyLauncherWakeupAtCommit(); ObjectAddressSet(myself, SubscriptionRelationId, subid); @@ -764,6 +790,8 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) bool update_tuple = false; Subscription *sub; Form_pg_subscription form; + bits32 supported_opts; + SubOpts opts = {0}; rel = table_open(SubscriptionRelationId, RowExclusiveLock); @@ -799,59 +827,46 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) { case ALTER_SUBSCRIPTION_OPTIONS: { - char *slotname; - bool slotname_given; - char *synchronous_commit; - bool binary_given; - bool binary; - bool streaming_given; - bool streaming; - - parse_subscription_options(stmt->options, - NULL, /* no "connect" */ - NULL, NULL, /* no "enabled" */ - NULL, /* no "create_slot" */ - &slotname_given, &slotname, - NULL, /* no "copy_data" */ - &synchronous_commit, - NULL, /* no "refresh" */ - &binary_given, &binary, - &streaming_given, &streaming); - - if (slotname_given) + supported_opts = (SUBOPT_SLOT_NAME | + SUBOPT_SYNCHRONOUS_COMMIT | SUBOPT_BINARY | + SUBOPT_STREAMING); + + parse_subscription_options(stmt->options, supported_opts, &opts); + + if (IsSet(opts.specified_opts, SUBOPT_SLOT_NAME)) { - if (sub->enabled && !slotname) + if (sub->enabled && !opts.slot_name) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("cannot set %s for enabled subscription", "slot_name = NONE"))); - if (slotname) + if (opts.slot_name) values[Anum_pg_subscription_subslotname - 1] = - DirectFunctionCall1(namein, CStringGetDatum(slotname)); + DirectFunctionCall1(namein, CStringGetDatum(opts.slot_name)); else nulls[Anum_pg_subscription_subslotname - 1] = true; replaces[Anum_pg_subscription_subslotname - 1] = true; } - if (synchronous_commit) + if (opts.synchronous_commit) { values[Anum_pg_subscription_subsynccommit - 1] = - CStringGetTextDatum(synchronous_commit); + CStringGetTextDatum(opts.synchronous_commit); replaces[Anum_pg_subscription_subsynccommit - 1] = true; } - if (binary_given) + if (IsSet(opts.specified_opts, SUBOPT_BINARY)) { values[Anum_pg_subscription_subbinary - 1] = - BoolGetDatum(binary); + BoolGetDatum(opts.binary); replaces[Anum_pg_subscription_subbinary - 1] = true; } - if (streaming_given) + if (IsSet(opts.specified_opts, SUBOPT_STREAMING)) { values[Anum_pg_subscription_substream - 1] = - BoolGetDatum(streaming); + BoolGetDatum(opts.streaming); replaces[Anum_pg_subscription_substream - 1] = true; } @@ -861,31 +876,19 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) case ALTER_SUBSCRIPTION_ENABLED: { - bool enabled, - enabled_given; - - parse_subscription_options(stmt->options, - NULL, /* no "connect" */ - &enabled_given, &enabled, - NULL, /* no "create_slot" */ - NULL, NULL, /* no "slot_name" */ - NULL, /* no "copy_data" */ - NULL, /* no "synchronous_commit" */ - NULL, /* no "refresh" */ - NULL, NULL, /* no "binary" */ - NULL, NULL); /* no streaming */ - Assert(enabled_given); - - if (!sub->slotname && enabled) + parse_subscription_options(stmt->options, SUBOPT_ENABLED, &opts); + Assert(IsSet(opts.specified_opts, SUBOPT_ENABLED)); + + if (!sub->slotname && opts.enabled) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("cannot enable subscription that does not have a slot name"))); values[Anum_pg_subscription_subenabled - 1] = - BoolGetDatum(enabled); + BoolGetDatum(opts.enabled); replaces[Anum_pg_subscription_subenabled - 1] = true; - if (enabled) + if (opts.enabled) ApplyLauncherWakeupAtCommit(); update_tuple = true; @@ -906,19 +909,9 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) case ALTER_SUBSCRIPTION_SET_PUBLICATION: { - bool copy_data; - bool refresh; - - parse_subscription_options(stmt->options, - NULL, /* no "connect" */ - NULL, NULL, /* no "enabled" */ - NULL, /* no "create_slot" */ - NULL, NULL, /* no "slot_name" */ - ©_data, - NULL, /* no "synchronous_commit" */ - &refresh, - NULL, NULL, /* no "binary" */ - NULL, NULL); /* no "streaming" */ + supported_opts = SUBOPT_COPY_DATA | SUBOPT_REFRESH; + parse_subscription_options(stmt->options, supported_opts, &opts); + values[Anum_pg_subscription_subpublications - 1] = publicationListToArray(stmt->publication); replaces[Anum_pg_subscription_subpublications - 1] = true; @@ -926,7 +919,7 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) update_tuple = true; /* Refresh if user asked us to. */ - if (refresh) + if (opts.refresh) { if (!sub->enabled) ereport(ERROR, @@ -939,7 +932,7 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) /* Make sure refresh sees the new list of publications. */ sub->publications = stmt->publication; - AlterSubscription_refresh(sub, copy_data); + AlterSubscription_refresh(sub, opts.copy_data); } break; @@ -948,25 +941,16 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) case ALTER_SUBSCRIPTION_ADD_PUBLICATION: case ALTER_SUBSCRIPTION_DROP_PUBLICATION: { - bool isadd = stmt->kind == ALTER_SUBSCRIPTION_ADD_PUBLICATION; - bool copy_data = false; - bool refresh; List *publist; + bool isadd = stmt->kind == ALTER_SUBSCRIPTION_ADD_PUBLICATION; - parse_subscription_options(stmt->options, - NULL, /* no "connect" */ - NULL, NULL, /* no "enabled" */ - NULL, /* no "create_slot" */ - NULL, NULL, /* no "slot_name" */ - isadd ? ©_data : NULL, /* for drop, no - * "copy_data" */ - NULL, /* no "synchronous_commit" */ - &refresh, - NULL, NULL, /* no "binary" */ - NULL, NULL); /* no "streaming" */ + supported_opts = SUBOPT_REFRESH; + if (isadd) + supported_opts |= SUBOPT_COPY_DATA; - publist = merge_publications(sub->publications, stmt->publication, isadd, stmt->subname); + parse_subscription_options(stmt->options, supported_opts, &opts); + publist = merge_publications(sub->publications, stmt->publication, isadd, stmt->subname); values[Anum_pg_subscription_subpublications - 1] = publicationListToArray(publist); replaces[Anum_pg_subscription_subpublications - 1] = true; @@ -974,7 +958,7 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) update_tuple = true; /* Refresh if user asked us to. */ - if (refresh) + if (opts.refresh) { if (!sub->enabled) ereport(ERROR, @@ -987,7 +971,7 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) /* Only refresh the added/dropped list of publications. */ sub->publications = stmt->publication; - AlterSubscription_refresh(sub, copy_data); + AlterSubscription_refresh(sub, opts.copy_data); } break; @@ -995,27 +979,16 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) case ALTER_SUBSCRIPTION_REFRESH: { - bool copy_data; - if (!sub->enabled) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions"))); - parse_subscription_options(stmt->options, - NULL, /* no "connect" */ - NULL, NULL, /* no "enabled" */ - NULL, /* no "create_slot" */ - NULL, NULL, /* no "slot_name" */ - ©_data, - NULL, /* no "synchronous_commit" */ - NULL, /* no "refresh" */ - NULL, NULL, /* no "binary" */ - NULL, NULL); /* no "streaming" */ + parse_subscription_options(stmt->options, SUBOPT_COPY_DATA, &opts); PreventInTransactionBlock(isTopLevel, "ALTER SUBSCRIPTION ... REFRESH"); - AlterSubscription_refresh(sub, copy_data); + AlterSubscription_refresh(sub, opts.copy_data); break; } diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 64c06cf952359..a72d53a272f1d 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -2511,6 +2511,7 @@ StringInfoData StripnullState SubLink SubLinkType +SubOpts SubPlan SubPlanState SubRemoveRels From ab2e19987ff66f83dfb99b5c541d9e05e8b0ede3 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 6 Jul 2021 10:34:51 -0400 Subject: [PATCH 611/671] Doc: add info about timestamps with fractional-minute UTC offsets. Our code has supported fractional-minute UTC offsets for ages, but there was no mention of the possibility in the main docs, and only a very indirect reference in Appendix B. Improve that. Discussion: https://postgr.es/m/162543102827.697.5755498651217979813@wrigleys.postgresql.org --- doc/src/sgml/datatype.sgml | 46 +++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index c473d6a746187..e016f96fb4b60 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -2020,19 +2020,27 @@ MINUTE TO SECOND 04:05:06.789-8 - ISO 8601 + ISO 8601, with time zone as UTC offset 04:05:06-08:00 - ISO 8601 + ISO 8601, with time zone as UTC offset 04:05-08:00 - ISO 8601 + ISO 8601, with time zone as UTC offset 040506-08 - ISO 8601 + ISO 8601, with time zone as UTC offset + + + 040506+0730 + ISO 8601, with fractional-hour time zone as UTC offset + + + 040506+07:30:00 + UTC offset specified to seconds (not allowed in ISO 8601) 04:05:06 PST @@ -2068,17 +2076,21 @@ MINUTE TO SECOND PST8PDT POSIX-style time zone specification + + -8:00:00 + UTC offset for PST + -8:00 - ISO-8601 offset for PST + UTC offset for PST (ISO 8601 extended format) -800 - ISO-8601 offset for PST + UTC offset for PST (ISO 8601 basic format) -8 - ISO-8601 offset for PST + UTC offset for PST (ISO 8601 basic format) zulu @@ -2086,7 +2098,7 @@ MINUTE TO SECOND z - Short form of zulu + Short form of zulu (also in ISO 8601) @@ -2437,6 +2449,24 @@ TIMESTAMP WITH TIME ZONE '2004-10-19 10:23:54+02' + + In the ISO style, the time zone is always shown as + a signed numeric offset from UTC, with positive sign used for zones + east of Greenwich. The offset will be shown + as hh (hours only) if it is an integral + number of hours, else + as hh:mm if it + is an integral number of minutes, else as + hh:mm:ss. + (The third case is not possible with any modern time zone standard, + but it can appear when working with timestamps that predate the + adoption of standardized time zones.) + In the other date styles, the time zone is shown as an alphabetic + abbreviation if one is in common use in the current zone. Otherwise + it appears as a signed numeric offset in ISO 8601 basic format + (hh or hhmm). + + The date/time style can be selected by the user using the SET datestyle command, the Date: Tue, 6 Jul 2021 12:36:12 -0400 Subject: [PATCH 612/671] Avoid doing catalog lookups in postgres_fdw's conversion_error_callback. As in 50371df26, this is a bad idea since the callback can't really know what error is being thrown and thus whether or not it is safe to attempt catalog accesses. Rather than pushing said accesses into the mainline code where they'd usually be a waste of cycles, we can look at the query's rangetable instead. This change does mean that we'll be printing query aliases (if any were used) rather than the table or column's true name. But that doesn't seem like a bad thing: it's certainly a more useful definition in self-join cases, for instance. In any case, it seems unlikely that any applications would be depending on this detail, so it seems safe to change. Patch by me. Original complaint by Andres Freund; Bharath Rupireddy noted the connection to conversion_error_callback. Discussion: https://postgr.es/m/20210106020229.ne5xnuu6wlondjpe@alap3.anarazel.de --- .../postgres_fdw/expected/postgres_fdw.out | 14 ++-- contrib/postgres_fdw/postgres_fdw.c | 78 +++++++++---------- contrib/postgres_fdw/sql/postgres_fdw.sql | 8 +- 3 files changed, 49 insertions(+), 51 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 31b5de91addef..25112df916cd1 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -4096,15 +4096,17 @@ DROP TABLE reind_fdw_parent; -- conversion error -- =================================================================== ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE int; -SELECT * FROM ft1 WHERE c1 = 1; -- ERROR +SELECT * FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8) WHERE x1 = 1; -- ERROR ERROR: invalid input syntax for type integer: "foo" -CONTEXT: column "c8" of foreign table "ft1" -SELECT ft1.c1, ft2.c2, ft1.c8 FROM ft1, ft2 WHERE ft1.c1 = ft2.c1 AND ft1.c1 = 1; -- ERROR +CONTEXT: column "x8" of foreign table "ftx" +SELECT ftx.x1, ft2.c2, ftx.x8 FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 + WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1; -- ERROR ERROR: invalid input syntax for type integer: "foo" -CONTEXT: column "c8" of foreign table "ft1" -SELECT ft1.c1, ft2.c2, ft1 FROM ft1, ft2 WHERE ft1.c1 = ft2.c1 AND ft1.c1 = 1; -- ERROR +CONTEXT: column "x8" of foreign table "ftx" +SELECT ftx.x1, ft2.c2, ftx FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 + WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1; -- ERROR ERROR: invalid input syntax for type integer: "foo" -CONTEXT: whole-row reference to foreign table "ft1" +CONTEXT: whole-row reference to foreign table "ftx" SELECT sum(c2), array_agg(c8) FROM ft1 GROUP BY c8; -- ERROR ERROR: invalid input syntax for type integer: "foo" CONTEXT: processing expression at position 2 in select list diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index fafbab6b024d4..a5afac47ebda8 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -302,16 +302,8 @@ typedef struct */ typedef struct ConversionLocation { - Relation rel; /* foreign table's relcache entry. */ AttrNumber cur_attno; /* attribute number being processed, or 0 */ - - /* - * In case of foreign join push down, fdw_scan_tlist is used to identify - * the Var node corresponding to the error location and - * fsstate->ss.ps.state gives access to the RTEs of corresponding relation - * to get the relation name and attribute name. - */ - ForeignScanState *fsstate; + ForeignScanState *fsstate; /* plan node being processed */ } ConversionLocation; /* Callback argument for ec_member_matches_foreign */ @@ -7082,7 +7074,6 @@ make_tuple_from_result_row(PGresult *res, /* * Set up and install callback to report where conversion error occurs. */ - errpos.rel = rel; errpos.cur_attno = 0; errpos.fsstate = fsstate; errcallback.callback = conversion_error_callback; @@ -7185,34 +7176,32 @@ make_tuple_from_result_row(PGresult *res, /* * Callback function which is called when error occurs during column value * conversion. Print names of column and relation. + * + * Note that this function mustn't do any catalog lookups, since we are in + * an already-failed transaction. Fortunately, we can get the needed info + * from the query's rangetable instead. */ static void conversion_error_callback(void *arg) { + ConversionLocation *errpos = (ConversionLocation *) arg; + ForeignScanState *fsstate = errpos->fsstate; + ForeignScan *fsplan = castNode(ForeignScan, fsstate->ss.ps.plan); + int varno = 0; + AttrNumber colno = 0; const char *attname = NULL; const char *relname = NULL; bool is_wholerow = false; - ConversionLocation *errpos = (ConversionLocation *) arg; - if (errpos->rel) + if (fsplan->scan.scanrelid > 0) { /* error occurred in a scan against a foreign table */ - TupleDesc tupdesc = RelationGetDescr(errpos->rel); - Form_pg_attribute attr = TupleDescAttr(tupdesc, errpos->cur_attno - 1); - - if (errpos->cur_attno > 0 && errpos->cur_attno <= tupdesc->natts) - attname = NameStr(attr->attname); - else if (errpos->cur_attno == SelfItemPointerAttributeNumber) - attname = "ctid"; - - relname = RelationGetRelationName(errpos->rel); + varno = fsplan->scan.scanrelid; + colno = errpos->cur_attno; } else { /* error occurred in a scan against a foreign join */ - ForeignScanState *fsstate = errpos->fsstate; - ForeignScan *fsplan = castNode(ForeignScan, fsstate->ss.ps.plan); - EState *estate = fsstate->ss.ps.state; TargetEntry *tle; tle = list_nth_node(TargetEntry, fsplan->fdw_scan_tlist, @@ -7220,35 +7209,40 @@ conversion_error_callback(void *arg) /* * Target list can have Vars and expressions. For Vars, we can get - * its relation, however for expressions we can't. Thus for + * some information, however for expressions we can't. Thus for * expressions, just show generic context message. */ if (IsA(tle->expr, Var)) { - RangeTblEntry *rte; Var *var = (Var *) tle->expr; - rte = exec_rt_fetch(var->varno, estate); - - if (var->varattno == 0) - is_wholerow = true; - else - attname = get_attname(rte->relid, var->varattno, false); - - relname = get_rel_name(rte->relid); + varno = var->varno; + colno = var->varattno; } - else - errcontext("processing expression at position %d in select list", - errpos->cur_attno); } - if (relname) + if (varno > 0) { - if (is_wholerow) - errcontext("whole-row reference to foreign table \"%s\"", relname); - else if (attname) - errcontext("column \"%s\" of foreign table \"%s\"", attname, relname); + EState *estate = fsstate->ss.ps.state; + RangeTblEntry *rte = exec_rt_fetch(varno, estate); + + relname = rte->eref->aliasname; + + if (colno == 0) + is_wholerow = true; + else if (colno > 0 && colno <= list_length(rte->eref->colnames)) + attname = strVal(list_nth(rte->eref->colnames, colno - 1)); + else if (colno == SelfItemPointerAttributeNumber) + attname = "ctid"; } + + if (relname && is_wholerow) + errcontext("whole-row reference to foreign table \"%s\"", relname); + else if (relname && attname) + errcontext("column \"%s\" of foreign table \"%s\"", attname, relname); + else + errcontext("processing expression at position %d in select list", + errpos->cur_attno); } /* diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 286dd99573eb0..95862e38ed927 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -1129,9 +1129,11 @@ DROP TABLE reind_fdw_parent; -- conversion error -- =================================================================== ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE int; -SELECT * FROM ft1 WHERE c1 = 1; -- ERROR -SELECT ft1.c1, ft2.c2, ft1.c8 FROM ft1, ft2 WHERE ft1.c1 = ft2.c1 AND ft1.c1 = 1; -- ERROR -SELECT ft1.c1, ft2.c2, ft1 FROM ft1, ft2 WHERE ft1.c1 = ft2.c1 AND ft1.c1 = 1; -- ERROR +SELECT * FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8) WHERE x1 = 1; -- ERROR +SELECT ftx.x1, ft2.c2, ftx.x8 FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 + WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1; -- ERROR +SELECT ftx.x1, ft2.c2, ftx FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 + WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1; -- ERROR SELECT sum(c2), array_agg(c8) FROM ft1 GROUP BY c8; -- ERROR ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE user_enum; From 64919aaab45076445051245c9bcd48dd84abebe7 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 6 Jul 2021 14:23:09 -0400 Subject: [PATCH 613/671] Reduce the cost of planning deeply-nested views. Joel Jacobson reported that deep nesting of trivial (flattenable) views results in O(N^3) growth of planning time for N-deep nesting. It turns out that a large chunk of this cost comes from copying around the "subquery" sub-tree of each view's RTE_SUBQUERY RTE. But once we have successfully flattened the subquery, we don't need that anymore, because the planner isn't going to do anything else interesting with that RTE. We already zap the subquery pointer during setrefs.c (cf. add_rte_to_flat_rtable), but it's useless baggage earlier than that too. Clearing the pointer as soon as pull_up_simple_subquery is done with the RTE reduces the cost from O(N^3) to O(N^2); which is still not great, but it's quite a lot better. Further improvements will require rethinking of the RTE data structure, which is being considered in another thread. Patch by me; thanks to Dean Rasheed for review. Discussion: https://postgr.es/m/797aff54-b49b-4914-9ff9-aa42564a4d7d@www.fastmail.com --- src/backend/optimizer/prep/prepjointree.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index 62a16687963f7..99ac3351146c6 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -893,10 +893,9 @@ pull_up_simple_subquery(PlannerInfo *root, Node *jtnode, RangeTblEntry *rte, ListCell *lc; /* - * Need a modifiable copy of the subquery to hack on. Even if we didn't - * sometimes choose not to pull up below, we must do this to avoid - * problems if the same subquery is referenced from multiple jointree - * items (which can't happen normally, but might after rule rewriting). + * Make a modifiable copy of the subquery to hack on, so that the RTE will + * be left unchanged in case we decide below that we can't pull it up + * after all. */ subquery = copyObject(rte->subquery); @@ -1174,6 +1173,14 @@ pull_up_simple_subquery(PlannerInfo *root, Node *jtnode, RangeTblEntry *rte, Assert(root->placeholder_list == NIL); Assert(subroot->placeholder_list == NIL); + /* + * We no longer need the RTE's copy of the subquery's query tree. Getting + * rid of it saves nothing in particular so far as this level of query is + * concerned; but if this query level is in turn pulled up into a parent, + * we'd waste cycles copying the now-unused query tree. + */ + rte->subquery = NULL; + /* * Miscellaneous housekeeping. * From 5798ca529935698ab976780565fb2b4d8d34d810 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Tue, 6 Jul 2021 17:48:41 -0400 Subject: [PATCH 614/671] Improve TestLib::system_or_bail error reporting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The original coding was not quoting the complete failing command, and it wasn't printing the reason for the failure either. Do both. This is cosmetic only, so no backpatch. Author: Álvaro Herrera Reviewed-by: Tom Lane Reviewed-by: Daniel Gustafsson Discussion: https://postgr.es/m/202106301524.eq5pblzstapj@alvherre.pgsql --- src/test/perl/TestLib.pm | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index 26fbe08d4be82..15572abbea403 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -375,9 +375,29 @@ sub system_or_bail { if (system_log(@_) != 0) { - BAIL_OUT("system $_[0] failed"); + if ($? == -1) + { + BAIL_OUT( + sprintf( + "failed to execute command \"%s\": $!", join(" ", @_))); + } + elsif ($? & 127) + { + BAIL_OUT( + sprintf( + "command \"%s\" died with signal %d", + join(" ", @_), + $? & 127)); + } + else + { + BAIL_OUT( + sprintf( + "command \"%s\" exited with value %d", + join(" ", @_), + $? >> 8)); + } } - return; } =pod From 955b3e0f9269639fb916cee3dea37aee50b82df0 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 6 Jul 2021 18:10:11 -0400 Subject: [PATCH 615/671] Allow CustomScan providers to say whether they support projections. Previously, all CustomScan providers had to support projections, but there may be cases where this is inconvenient. Add a flag bit to say if it's supported. Important item for the release notes: this is non-backwards-compatible since the default is now to assume that CustomScan providers can't project, instead of assuming that they can. It's fail-soft, but could result in visible performance penalties due to adding unnecessary Result nodes. Sven Klemm, reviewed by Aleksander Alekseev; some cosmetic fiddling by me. Discussion: https://postgr.es/m/CAMCrgp1kyakOz6c8aKhNDJXjhQ1dEjEnp+6KNT3KxPrjNtsrDg@mail.gmail.com --- doc/src/sgml/custom-scan.sgml | 13 ++++++++++--- src/backend/executor/execAmi.c | 17 +++++------------ src/backend/optimizer/plan/createplan.c | 8 ++++++++ src/include/nodes/extensible.h | 4 +++- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/doc/src/sgml/custom-scan.sgml b/doc/src/sgml/custom-scan.sgml index 239ba29de72a4..93d96f2f56690 100644 --- a/doc/src/sgml/custom-scan.sgml +++ b/doc/src/sgml/custom-scan.sgml @@ -71,10 +71,17 @@ typedef struct CustomPath path must be initialized as for any other path, including the row-count estimate, start and total cost, and sort ordering provided - by this path. flags is a bit mask, which should include + by this path. flags is a bit mask, which + specifies whether the scan provider can support certain optional + capabilities. flags should include CUSTOMPATH_SUPPORT_BACKWARD_SCAN if the custom path can support - a backward scan and CUSTOMPATH_SUPPORT_MARK_RESTORE if it - can support mark and restore. Both capabilities are optional. + a backward scan, CUSTOMPATH_SUPPORT_MARK_RESTORE if it + can support mark and restore, + and CUSTOMPATH_SUPPORT_PROJECTION if it can perform + projections. (If CUSTOMPATH_SUPPORT_PROJECTION is not + set, the scan node will only be asked to produce Vars of the scanned + relation; while if that flag is set, the scan node must be able to + evaluate scalar expressions over these Vars.) An optional custom_paths is a list of Path nodes used by this custom-path node; these will be transformed into Plan nodes by planner. diff --git a/src/backend/executor/execAmi.c b/src/backend/executor/execAmi.c index 10f0b349b583a..522b1c2086377 100644 --- a/src/backend/executor/execAmi.c +++ b/src/backend/executor/execAmi.c @@ -438,13 +438,10 @@ ExecSupportsMarkRestore(Path *pathnode) return true; case T_CustomScan: - { - CustomPath *customPath = castNode(CustomPath, pathnode); + if (castNode(CustomPath, pathnode)->flags & CUSTOMPATH_SUPPORT_MARK_RESTORE) + return true; + return false; - if (customPath->flags & CUSTOMPATH_SUPPORT_MARK_RESTORE) - return true; - return false; - } case T_Result: /* @@ -567,12 +564,8 @@ ExecSupportsBackwardScan(Plan *node) return ExecSupportsBackwardScan(((SubqueryScan *) node)->subplan); case T_CustomScan: - { - uint32 flags = ((CustomScan *) node)->flags; - - if (flags & CUSTOMPATH_SUPPORT_BACKWARD_SCAN) - return true; - } + if (((CustomScan *) node)->flags & CUSTOMPATH_SUPPORT_BACKWARD_SCAN) + return true; return false; case T_SeqScan: diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 439e6b6426c8d..c13da7a879ffe 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -7046,6 +7046,10 @@ is_projection_capable_path(Path *path) case T_MergeAppend: case T_RecursiveUnion: return false; + case T_CustomScan: + if (castNode(CustomPath, path)->flags & CUSTOMPATH_SUPPORT_PROJECTION) + return true; + return false; case T_Append: /* @@ -7092,6 +7096,10 @@ is_projection_capable_plan(Plan *plan) case T_MergeAppend: case T_RecursiveUnion: return false; + case T_CustomScan: + if (((CustomScan *) plan)->flags & CUSTOMPATH_SUPPORT_PROJECTION) + return true; + return false; case T_ProjectSet: /* diff --git a/src/include/nodes/extensible.h b/src/include/nodes/extensible.h index 9e425e5651894..cc9b7e9928d2c 100644 --- a/src/include/nodes/extensible.h +++ b/src/include/nodes/extensible.h @@ -76,10 +76,12 @@ extern const ExtensibleNodeMethods *GetExtensibleNodeMethods(const char *name, /* * Flags for custom paths, indicating what capabilities the resulting scan - * will have. + * will have. The flags fields of CustomPath and CustomScan nodes are + * bitmasks of these flags. */ #define CUSTOMPATH_SUPPORT_BACKWARD_SCAN 0x0001 #define CUSTOMPATH_SUPPORT_MARK_RESTORE 0x0002 +#define CUSTOMPATH_SUPPORT_PROJECTION 0x0004 /* * Custom path methods. Mostly, we just need to know how to convert a From 9fd85570d179f10f93344d722005f7086b3c31ca Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 7 Jul 2021 10:55:15 +0900 Subject: [PATCH 616/671] Refactor SASL code with a generic interface for its mechanisms The code of SCRAM and SASL have been tightly linked together since SCRAM exists in the core code, making hard to apprehend the addition of new SASL mechanisms, but these are by design different facilities, with SCRAM being an option for SASL. This refactors the code related to both so as the backend and the frontend use a set of callbacks for SASL mechanisms, documenting while on it what is expected by anybody adding a new SASL mechanism. The separation between both layers is neat, using two sets of callbacks for the frontend and the backend to mark the frontier between both facilities. The shape of the callbacks is now directly inspired from the routines used by SCRAM, so the code change is straight-forward, and the SASL code is moved into its own set of files. These will likely change depending on how and if new SASL mechanisms get added in the future. Author: Jacob Champion Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/3d2a6f5d50e741117d6baf83eb67ebf1a8a35a11.camel@vmware.com --- src/backend/libpq/Makefile | 1 + src/backend/libpq/auth-sasl.c | 195 +++++++++++++++++++++++++++ src/backend/libpq/auth-scram.c | 51 ++++--- src/backend/libpq/auth.c | 167 +---------------------- src/include/libpq/auth.h | 2 + src/include/libpq/sasl.h | 136 +++++++++++++++++++ src/include/libpq/scram.h | 13 +- src/interfaces/libpq/fe-auth-sasl.h | 130 ++++++++++++++++++ src/interfaces/libpq/fe-auth-scram.c | 40 ++++-- src/interfaces/libpq/fe-auth.c | 18 ++- src/interfaces/libpq/fe-auth.h | 11 +- src/interfaces/libpq/fe-connect.c | 6 +- src/interfaces/libpq/libpq-int.h | 2 + src/tools/pgindent/typedefs.list | 2 + 14 files changed, 552 insertions(+), 222 deletions(-) create mode 100644 src/backend/libpq/auth-sasl.c create mode 100644 src/include/libpq/sasl.h create mode 100644 src/interfaces/libpq/fe-auth-sasl.h diff --git a/src/backend/libpq/Makefile b/src/backend/libpq/Makefile index 8d1d16b0fc54b..6d385fd6a450d 100644 --- a/src/backend/libpq/Makefile +++ b/src/backend/libpq/Makefile @@ -15,6 +15,7 @@ include $(top_builddir)/src/Makefile.global # be-fsstubs is here for historical reasons, probably belongs elsewhere OBJS = \ + auth-sasl.o \ auth-scram.o \ auth.o \ be-fsstubs.o \ diff --git a/src/backend/libpq/auth-sasl.c b/src/backend/libpq/auth-sasl.c new file mode 100644 index 0000000000000..3e4f763b609c7 --- /dev/null +++ b/src/backend/libpq/auth-sasl.c @@ -0,0 +1,195 @@ +/*------------------------------------------------------------------------- + * + * auth-sasl.c + * Routines to handle authentication via SASL + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * src/backend/libpq/auth-sasl.c + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#include "libpq/auth.h" +#include "libpq/libpq.h" +#include "libpq/pqformat.h" +#include "libpq/sasl.h" + +/* + * Maximum accepted size of SASL messages. + * + * The messages that the server or libpq generate are much smaller than this, + * but have some headroom. + */ +#define PG_MAX_SASL_MESSAGE_LENGTH 1024 + +/* + * Perform a SASL exchange with a libpq client, using a specific mechanism + * implementation. + * + * shadow_pass is an optional pointer to the stored secret of the role + * authenticated, from pg_authid.rolpassword. For mechanisms that use + * shadowed passwords, a NULL pointer here means that an entry could not + * be found for the role (or the user does not exist), and the mechanism + * should fail the authentication exchange. + * + * Mechanisms must take care not to reveal to the client that a user entry + * does not exist; ideally, the external failure mode is identical to that + * of an incorrect password. Mechanisms may instead use the logdetail + * output parameter to internally differentiate between failure cases and + * assist debugging by the server admin. + * + * A mechanism is not required to utilize a shadow entry, or even a password + * system at all; for these cases, shadow_pass may be ignored and the caller + * should just pass NULL. + */ +int +CheckSASLAuth(const pg_be_sasl_mech *mech, Port *port, char *shadow_pass, + char **logdetail) +{ + StringInfoData sasl_mechs; + int mtype; + StringInfoData buf; + void *opaq = NULL; + char *output = NULL; + int outputlen = 0; + const char *input; + int inputlen; + int result; + bool initial; + + /* + * Send the SASL authentication request to user. It includes the list of + * authentication mechanisms that are supported. + */ + initStringInfo(&sasl_mechs); + + mech->get_mechanisms(port, &sasl_mechs); + /* Put another '\0' to mark that list is finished. */ + appendStringInfoChar(&sasl_mechs, '\0'); + + sendAuthRequest(port, AUTH_REQ_SASL, sasl_mechs.data, sasl_mechs.len); + pfree(sasl_mechs.data); + + /* + * Loop through SASL message exchange. This exchange can consist of + * multiple messages sent in both directions. First message is always + * from the client. All messages from client to server are password + * packets (type 'p'). + */ + initial = true; + do + { + pq_startmsgread(); + mtype = pq_getbyte(); + if (mtype != 'p') + { + /* Only log error if client didn't disconnect. */ + if (mtype != EOF) + { + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("expected SASL response, got message type %d", + mtype))); + } + else + return STATUS_EOF; + } + + /* Get the actual SASL message */ + initStringInfo(&buf); + if (pq_getmessage(&buf, PG_MAX_SASL_MESSAGE_LENGTH)) + { + /* EOF - pq_getmessage already logged error */ + pfree(buf.data); + return STATUS_ERROR; + } + + elog(DEBUG4, "processing received SASL response of length %d", buf.len); + + /* + * The first SASLInitialResponse message is different from the others. + * It indicates which SASL mechanism the client selected, and contains + * an optional Initial Client Response payload. The subsequent + * SASLResponse messages contain just the SASL payload. + */ + if (initial) + { + const char *selected_mech; + + selected_mech = pq_getmsgrawstring(&buf); + + /* + * Initialize the status tracker for message exchanges. + * + * If the user doesn't exist, or doesn't have a valid password, or + * it's expired, we still go through the motions of SASL + * authentication, but tell the authentication method that the + * authentication is "doomed". That is, it's going to fail, no + * matter what. + * + * This is because we don't want to reveal to an attacker what + * usernames are valid, nor which users have a valid password. + */ + opaq = mech->init(port, selected_mech, shadow_pass); + + inputlen = pq_getmsgint(&buf, 4); + if (inputlen == -1) + input = NULL; + else + input = pq_getmsgbytes(&buf, inputlen); + + initial = false; + } + else + { + inputlen = buf.len; + input = pq_getmsgbytes(&buf, buf.len); + } + pq_getmsgend(&buf); + + /* + * The StringInfo guarantees that there's a \0 byte after the + * response. + */ + Assert(input == NULL || input[inputlen] == '\0'); + + /* + * Hand the incoming message to the mechanism implementation. + */ + result = mech->exchange(opaq, input, inputlen, + &output, &outputlen, + logdetail); + + /* input buffer no longer used */ + pfree(buf.data); + + if (output) + { + /* + * Negotiation generated data to be sent to the client. + */ + elog(DEBUG4, "sending SASL challenge of length %u", outputlen); + + if (result == PG_SASL_EXCHANGE_SUCCESS) + sendAuthRequest(port, AUTH_REQ_SASL_FIN, output, outputlen); + else + sendAuthRequest(port, AUTH_REQ_SASL_CONT, output, outputlen); + + pfree(output); + } + } while (result == PG_SASL_EXCHANGE_CONTINUE); + + /* Oops, Something bad happened */ + if (result != PG_SASL_EXCHANGE_SUCCESS) + { + return STATUS_ERROR; + } + + return STATUS_OK; +} diff --git a/src/backend/libpq/auth-scram.c b/src/backend/libpq/auth-scram.c index f9e1026a12c06..9df8f17837666 100644 --- a/src/backend/libpq/auth-scram.c +++ b/src/backend/libpq/auth-scram.c @@ -101,11 +101,25 @@ #include "common/sha2.h" #include "libpq/auth.h" #include "libpq/crypt.h" +#include "libpq/sasl.h" #include "libpq/scram.h" #include "miscadmin.h" #include "utils/builtins.h" #include "utils/timestamp.h" +static void scram_get_mechanisms(Port *port, StringInfo buf); +static void *scram_init(Port *port, const char *selected_mech, + const char *shadow_pass); +static int scram_exchange(void *opaq, const char *input, int inputlen, + char **output, int *outputlen, char **logdetail); + +/* Mechanism declaration */ +const pg_be_sasl_mech pg_be_scram_mech = { + scram_get_mechanisms, + scram_init, + scram_exchange +}; + /* * Status data for a SCRAM authentication exchange. This should be kept * internal to this file. @@ -170,16 +184,14 @@ static char *sanitize_str(const char *s); static char *scram_mock_salt(const char *username); /* - * pg_be_scram_get_mechanisms - * * Get a list of SASL mechanisms that this module supports. * * For the convenience of building the FE/BE packet that lists the * mechanisms, the names are appended to the given StringInfo buffer, * separated by '\0' bytes. */ -void -pg_be_scram_get_mechanisms(Port *port, StringInfo buf) +static void +scram_get_mechanisms(Port *port, StringInfo buf) { /* * Advertise the mechanisms in decreasing order of importance. So the @@ -199,15 +211,13 @@ pg_be_scram_get_mechanisms(Port *port, StringInfo buf) } /* - * pg_be_scram_init - * * Initialize a new SCRAM authentication exchange status tracker. This * needs to be called before doing any exchange. It will be filled later * after the beginning of the exchange with authentication information. * * 'selected_mech' identifies the SASL mechanism that the client selected. * It should be one of the mechanisms that we support, as returned by - * pg_be_scram_get_mechanisms(). + * scram_get_mechanisms(). * * 'shadow_pass' is the role's stored secret, from pg_authid.rolpassword. * The username was provided by the client in the startup message, and is @@ -215,10 +225,8 @@ pg_be_scram_get_mechanisms(Port *port, StringInfo buf) * an authentication exchange, but it will fail, as if an incorrect password * was given. */ -void * -pg_be_scram_init(Port *port, - const char *selected_mech, - const char *shadow_pass) +static void * +scram_init(Port *port, const char *selected_mech, const char *shadow_pass) { scram_state *state; bool got_secret; @@ -325,9 +333,9 @@ pg_be_scram_init(Port *port, * string at *logdetail that will be sent to the postmaster log (but not * the client). */ -int -pg_be_scram_exchange(void *opaq, const char *input, int inputlen, - char **output, int *outputlen, char **logdetail) +static int +scram_exchange(void *opaq, const char *input, int inputlen, + char **output, int *outputlen, char **logdetail) { scram_state *state = (scram_state *) opaq; int result; @@ -346,7 +354,7 @@ pg_be_scram_exchange(void *opaq, const char *input, int inputlen, *output = pstrdup(""); *outputlen = 0; - return SASL_EXCHANGE_CONTINUE; + return PG_SASL_EXCHANGE_CONTINUE; } /* @@ -379,7 +387,7 @@ pg_be_scram_exchange(void *opaq, const char *input, int inputlen, *output = build_server_first_message(state); state->state = SCRAM_AUTH_SALT_SENT; - result = SASL_EXCHANGE_CONTINUE; + result = PG_SASL_EXCHANGE_CONTINUE; break; case SCRAM_AUTH_SALT_SENT: @@ -408,7 +416,8 @@ pg_be_scram_exchange(void *opaq, const char *input, int inputlen, * erroring out in an application-specific way. We choose to do * the latter, so that the error message for invalid password is * the same for all authentication methods. The caller will call - * ereport(), when we return SASL_EXCHANGE_FAILURE with no output. + * ereport(), when we return PG_SASL_EXCHANGE_FAILURE with no + * output. * * NB: the order of these checks is intentional. We calculate the * client proof even in a mock authentication, even though it's @@ -417,7 +426,7 @@ pg_be_scram_exchange(void *opaq, const char *input, int inputlen, */ if (!verify_client_proof(state) || state->doomed) { - result = SASL_EXCHANGE_FAILURE; + result = PG_SASL_EXCHANGE_FAILURE; break; } @@ -425,16 +434,16 @@ pg_be_scram_exchange(void *opaq, const char *input, int inputlen, *output = build_server_final_message(state); /* Success! */ - result = SASL_EXCHANGE_SUCCESS; + result = PG_SASL_EXCHANGE_SUCCESS; state->state = SCRAM_AUTH_FINISHED; break; default: elog(ERROR, "invalid SCRAM exchange state"); - result = SASL_EXCHANGE_FAILURE; + result = PG_SASL_EXCHANGE_FAILURE; } - if (result == SASL_EXCHANGE_FAILURE && state->logdetail && logdetail) + if (result == PG_SASL_EXCHANGE_FAILURE && state->logdetail && logdetail) *logdetail = state->logdetail; if (*output) diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index 967b5ef73cc3b..8cc23ef7fb47d 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -26,11 +26,11 @@ #include "commands/user.h" #include "common/ip.h" #include "common/md5.h" -#include "common/scram-common.h" #include "libpq/auth.h" #include "libpq/crypt.h" #include "libpq/libpq.h" #include "libpq/pqformat.h" +#include "libpq/sasl.h" #include "libpq/scram.h" #include "miscadmin.h" #include "port/pg_bswap.h" @@ -45,8 +45,6 @@ * Global authentication functions *---------------------------------------------------------------- */ -static void sendAuthRequest(Port *port, AuthRequest areq, const char *extradata, - int extralen); static void auth_failed(Port *port, int status, char *logdetail); static char *recv_password_packet(Port *port); static void set_authn_id(Port *port, const char *id); @@ -60,7 +58,6 @@ static int CheckPasswordAuth(Port *port, char **logdetail); static int CheckPWChallengeAuth(Port *port, char **logdetail); static int CheckMD5Auth(Port *port, char *shadow_pass, char **logdetail); -static int CheckSCRAMAuth(Port *port, char *shadow_pass, char **logdetail); /*---------------------------------------------------------------- @@ -224,14 +221,6 @@ static int PerformRadiusTransaction(const char *server, const char *secret, cons */ #define PG_MAX_AUTH_TOKEN_LENGTH 65535 -/* - * Maximum accepted size of SASL messages. - * - * The messages that the server or libpq generate are much smaller than this, - * but have some headroom. - */ -#define PG_MAX_SASL_MESSAGE_LENGTH 1024 - /*---------------------------------------------------------------- * Global authentication functions *---------------------------------------------------------------- @@ -668,7 +657,7 @@ ClientAuthentication(Port *port) /* * Send an authentication request packet to the frontend. */ -static void +void sendAuthRequest(Port *port, AuthRequest areq, const char *extradata, int extralen) { StringInfoData buf; @@ -848,12 +837,14 @@ CheckPWChallengeAuth(Port *port, char **logdetail) * SCRAM secret, we must do SCRAM authentication. * * If MD5 authentication is not allowed, always use SCRAM. If the user - * had an MD5 password, CheckSCRAMAuth() will fail. + * had an MD5 password, CheckSASLAuth() with the SCRAM mechanism will + * fail. */ if (port->hba->auth_method == uaMD5 && pwtype == PASSWORD_TYPE_MD5) auth_result = CheckMD5Auth(port, shadow_pass, logdetail); else - auth_result = CheckSCRAMAuth(port, shadow_pass, logdetail); + auth_result = CheckSASLAuth(&pg_be_scram_mech, port, shadow_pass, + logdetail); if (shadow_pass) pfree(shadow_pass); @@ -911,152 +902,6 @@ CheckMD5Auth(Port *port, char *shadow_pass, char **logdetail) return result; } -static int -CheckSCRAMAuth(Port *port, char *shadow_pass, char **logdetail) -{ - StringInfoData sasl_mechs; - int mtype; - StringInfoData buf; - void *scram_opaq = NULL; - char *output = NULL; - int outputlen = 0; - const char *input; - int inputlen; - int result; - bool initial; - - /* - * Send the SASL authentication request to user. It includes the list of - * authentication mechanisms that are supported. - */ - initStringInfo(&sasl_mechs); - - pg_be_scram_get_mechanisms(port, &sasl_mechs); - /* Put another '\0' to mark that list is finished. */ - appendStringInfoChar(&sasl_mechs, '\0'); - - sendAuthRequest(port, AUTH_REQ_SASL, sasl_mechs.data, sasl_mechs.len); - pfree(sasl_mechs.data); - - /* - * Loop through SASL message exchange. This exchange can consist of - * multiple messages sent in both directions. First message is always - * from the client. All messages from client to server are password - * packets (type 'p'). - */ - initial = true; - do - { - pq_startmsgread(); - mtype = pq_getbyte(); - if (mtype != 'p') - { - /* Only log error if client didn't disconnect. */ - if (mtype != EOF) - { - ereport(ERROR, - (errcode(ERRCODE_PROTOCOL_VIOLATION), - errmsg("expected SASL response, got message type %d", - mtype))); - } - else - return STATUS_EOF; - } - - /* Get the actual SASL message */ - initStringInfo(&buf); - if (pq_getmessage(&buf, PG_MAX_SASL_MESSAGE_LENGTH)) - { - /* EOF - pq_getmessage already logged error */ - pfree(buf.data); - return STATUS_ERROR; - } - - elog(DEBUG4, "processing received SASL response of length %d", buf.len); - - /* - * The first SASLInitialResponse message is different from the others. - * It indicates which SASL mechanism the client selected, and contains - * an optional Initial Client Response payload. The subsequent - * SASLResponse messages contain just the SASL payload. - */ - if (initial) - { - const char *selected_mech; - - selected_mech = pq_getmsgrawstring(&buf); - - /* - * Initialize the status tracker for message exchanges. - * - * If the user doesn't exist, or doesn't have a valid password, or - * it's expired, we still go through the motions of SASL - * authentication, but tell the authentication method that the - * authentication is "doomed". That is, it's going to fail, no - * matter what. - * - * This is because we don't want to reveal to an attacker what - * usernames are valid, nor which users have a valid password. - */ - scram_opaq = pg_be_scram_init(port, selected_mech, shadow_pass); - - inputlen = pq_getmsgint(&buf, 4); - if (inputlen == -1) - input = NULL; - else - input = pq_getmsgbytes(&buf, inputlen); - - initial = false; - } - else - { - inputlen = buf.len; - input = pq_getmsgbytes(&buf, buf.len); - } - pq_getmsgend(&buf); - - /* - * The StringInfo guarantees that there's a \0 byte after the - * response. - */ - Assert(input == NULL || input[inputlen] == '\0'); - - /* - * we pass 'logdetail' as NULL when doing a mock authentication, - * because we should already have a better error message in that case - */ - result = pg_be_scram_exchange(scram_opaq, input, inputlen, - &output, &outputlen, - logdetail); - - /* input buffer no longer used */ - pfree(buf.data); - - if (output) - { - /* - * Negotiation generated data to be sent to the client. - */ - elog(DEBUG4, "sending SASL challenge of length %u", outputlen); - - if (result == SASL_EXCHANGE_SUCCESS) - sendAuthRequest(port, AUTH_REQ_SASL_FIN, output, outputlen); - else - sendAuthRequest(port, AUTH_REQ_SASL_CONT, output, outputlen); - - pfree(output); - } - } while (result == SASL_EXCHANGE_CONTINUE); - - /* Oops, Something bad happened */ - if (result != SASL_EXCHANGE_SUCCESS) - { - return STATUS_ERROR; - } - - return STATUS_OK; -} - /*---------------------------------------------------------------- * GSSAPI authentication system diff --git a/src/include/libpq/auth.h b/src/include/libpq/auth.h index 3610fae3fffef..3d6734f2536c7 100644 --- a/src/include/libpq/auth.h +++ b/src/include/libpq/auth.h @@ -21,6 +21,8 @@ extern bool pg_krb_caseins_users; extern char *pg_krb_realm; extern void ClientAuthentication(Port *port); +extern void sendAuthRequest(Port *port, AuthRequest areq, const char *extradata, + int extralen); /* Hook for plugins to get control in ClientAuthentication() */ typedef void (*ClientAuthentication_hook_type) (Port *, int); diff --git a/src/include/libpq/sasl.h b/src/include/libpq/sasl.h new file mode 100644 index 0000000000000..4c611bab6b8f0 --- /dev/null +++ b/src/include/libpq/sasl.h @@ -0,0 +1,136 @@ +/*------------------------------------------------------------------------- + * + * sasl.h + * Defines the SASL mechanism interface for the backend. + * + * Each SASL mechanism defines a frontend and a backend callback structure. + * + * See src/interfaces/libpq/fe-auth-sasl.h for the frontend counterpart. + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/libpq/sasl.h + * + *------------------------------------------------------------------------- + */ + +#ifndef PG_SASL_H +#define PG_SASL_H + +#include "lib/stringinfo.h" +#include "libpq/libpq-be.h" + +/* Status codes for message exchange */ +#define PG_SASL_EXCHANGE_CONTINUE 0 +#define PG_SASL_EXCHANGE_SUCCESS 1 +#define PG_SASL_EXCHANGE_FAILURE 2 + +/* + * Backend SASL mechanism callbacks. + * + * To implement a backend mechanism, declare a pg_be_sasl_mech struct with + * appropriate callback implementations. Then pass the mechanism to + * CheckSASLAuth() during ClientAuthentication(), once the server has decided + * which authentication method to use. + */ +typedef struct pg_be_sasl_mech +{ + /*--------- + * get_mechanisms() + * + * Retrieves the list of SASL mechanism names supported by this + * implementation. + * + * Input parameters: + * + * port: The client Port + * + * Output parameters: + * + * buf: A StringInfo buffer that the callback should populate with + * supported mechanism names. The names are appended into this + * StringInfo, each one ending with '\0' bytes. + *--------- + */ + void (*get_mechanisms) (Port *port, StringInfo buf); + + /*--------- + * init() + * + * Initializes mechanism-specific state for a connection. This callback + * must return a pointer to its allocated state, which will be passed + * as-is as the first argument to the other callbacks. + * + * Input paramters: + * + * port: The client Port. + * + * mech: The actual mechanism name in use by the client. + * + * shadow_pass: The stored secret for the role being authenticated, or + * NULL if one does not exist. Mechanisms that do not use + * shadow entries may ignore this parameter. If a + * mechanism uses shadow entries but shadow_pass is NULL, + * the implementation must continue the exchange as if the + * user existed and the password did not match, to avoid + * disclosing valid user names. + *--------- + */ + void *(*init) (Port *port, const char *mech, const char *shadow_pass); + + /*--------- + * exchange() + * + * Produces a server challenge to be sent to the client. The callback + * must return one of the PG_SASL_EXCHANGE_* values, depending on + * whether the exchange continues, has finished successfully, or has + * failed. + * + * Input parameters: + * + * state: The opaque mechanism state returned by init() + * + * input: The response data sent by the client, or NULL if the + * mechanism is client-first but the client did not send an + * initial response. (This can only happen during the first + * message from the client.) This is guaranteed to be + * null-terminated for safety, but SASL allows embedded + * nulls in responses, so mechanisms must be careful to + * check inputlen. + * + * inputlen: The length of the challenge data sent by the server, or + * -1 if the client did not send an initial response + * + * Output parameters, to be set by the callback function: + * + * output: A palloc'd buffer containing either the server's next + * challenge (if PG_SASL_EXCHANGE_CONTINUE is returned) or + * the server's outcome data (if PG_SASL_EXCHANGE_SUCCESS is + * returned and the mechanism requires data to be sent during + * a successful outcome). The callback should set this to + * NULL if the exchange is over and no output should be sent, + * which should correspond to either PG_SASL_EXCHANGE_FAILURE + * or a PG_SASL_EXCHANGE_SUCCESS with no outcome data. + * + * outputlen: The length of the challenge data. Ignored if *output is + * NULL. + * + * logdetail: Set to an optional DETAIL message to be printed to the + * server log, to disambiguate failure modes. (The client + * will only ever see the same generic authentication + * failure message.) Ignored if the exchange is completed + * with PG_SASL_EXCHANGE_SUCCESS. + *--------- + */ + int (*exchange) (void *state, + const char *input, int inputlen, + char **output, int *outputlen, + char **logdetail); +} pg_be_sasl_mech; + +/* Common implementation for auth.c */ +extern int CheckSASLAuth(const pg_be_sasl_mech *mech, Port *port, + char *shadow_pass, char **logdetail); + +#endif /* PG_SASL_H */ diff --git a/src/include/libpq/scram.h b/src/include/libpq/scram.h index 2c879150dacc7..3eb3d7f31bbad 100644 --- a/src/include/libpq/scram.h +++ b/src/include/libpq/scram.h @@ -15,17 +15,10 @@ #include "lib/stringinfo.h" #include "libpq/libpq-be.h" +#include "libpq/sasl.h" -/* Status codes for message exchange */ -#define SASL_EXCHANGE_CONTINUE 0 -#define SASL_EXCHANGE_SUCCESS 1 -#define SASL_EXCHANGE_FAILURE 2 - -/* Routines dedicated to authentication */ -extern void pg_be_scram_get_mechanisms(Port *port, StringInfo buf); -extern void *pg_be_scram_init(Port *port, const char *selected_mech, const char *shadow_pass); -extern int pg_be_scram_exchange(void *opaq, const char *input, int inputlen, - char **output, int *outputlen, char **logdetail); +/* SASL implementation callbacks */ +extern const pg_be_sasl_mech pg_be_scram_mech; /* Routines to handle and check SCRAM-SHA-256 secret */ extern char *pg_be_scram_build_secret(const char *password); diff --git a/src/interfaces/libpq/fe-auth-sasl.h b/src/interfaces/libpq/fe-auth-sasl.h new file mode 100644 index 0000000000000..0aec588a9eb26 --- /dev/null +++ b/src/interfaces/libpq/fe-auth-sasl.h @@ -0,0 +1,130 @@ +/*------------------------------------------------------------------------- + * + * fe-auth-sasl.h + * Defines the SASL mechanism interface for libpq. + * + * Each SASL mechanism defines a frontend and a backend callback structure. + * This is not part of the public API for applications. + * + * See src/include/libpq/sasl.h for the backend counterpart. + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/interfaces/libpq/fe-auth-sasl.h + * + *------------------------------------------------------------------------- + */ + +#ifndef FE_AUTH_SASL_H +#define FE_AUTH_SASL_H + +#include "libpq-fe.h" + +/* + * Frontend SASL mechanism callbacks. + * + * To implement a frontend mechanism, declare a pg_be_sasl_mech struct with + * appropriate callback implementations, then hook it into conn->sasl during + * pg_SASL_init()'s mechanism negotiation. + */ +typedef struct pg_fe_sasl_mech +{ + /*------- + * init() + * + * Initializes mechanism-specific state for a connection. This + * callback must return a pointer to its allocated state, which will + * be passed as-is as the first argument to the other callbacks. + * the free() callback is called to release any state resources. + * + * If state allocation fails, the implementation should return NULL to + * fail the authentication exchange. + * + * Input parameters: + * + * conn: The connection to the server + * + * password: The user's supplied password for the current connection + * + * mech: The mechanism name in use, for implementations that may + * advertise more than one name (such as *-PLUS variants). + *------- + */ + void *(*init) (PGconn *conn, const char *password, const char *mech); + + /*-------- + * exchange() + * + * Produces a client response to a server challenge. As a special case + * for client-first SASL mechanisms, exchange() is called with a NULL + * server response once at the start of the authentication exchange to + * generate an initial response. + * + * Input parameters: + * + * state: The opaque mechanism state returned by init() + * + * input: The challenge data sent by the server, or NULL when + * generating a client-first initial response (that is, when + * the server expects the client to send a message to start + * the exchange). This is guaranteed to be null-terminated + * for safety, but SASL allows embedded nulls in challenges, + * so mechanisms must be careful to check inputlen. + * + * inputlen: The length of the challenge data sent by the server, or -1 + * during client-first initial response generation. + * + * Output parameters, to be set by the callback function: + * + * output: A malloc'd buffer containing the client's response to + * the server, or NULL if the exchange should be aborted. + * (*success should be set to false in the latter case.) + * + * outputlen: The length of the client response buffer, or zero if no + * data should be sent due to an exchange failure + * + * done: Set to true if the SASL exchange should not continue, + * because the exchange is either complete or failed + * + * success: Set to true if the SASL exchange completed successfully. + * Ignored if *done is false. + *-------- + */ + void (*exchange) (void *state, char *input, int inputlen, + char **output, int *outputlen, + bool *done, bool *success); + + /*-------- + * channel_bound() + * + * Returns true if the connection has an established channel binding. A + * mechanism implementation must ensure that a SASL exchange has actually + * been completed, in addition to checking that channel binding is in use. + * + * Mechanisms that do not implement channel binding may simply return + * false. + * + * Input parameters: + * + * state: The opaque mechanism state returned by init() + *-------- + */ + bool (*channel_bound) (void *state); + + /*-------- + * free() + * + * Frees the state allocated by init(). This is called when the connection + * is dropped, not when the exchange is completed. + * + * Input parameters: + * + * state: The opaque mechanism state returned by init() + *-------- + */ + void (*free) (void *state); + +} pg_fe_sasl_mech; + +#endif /* FE_AUTH_SASL_H */ diff --git a/src/interfaces/libpq/fe-auth-scram.c b/src/interfaces/libpq/fe-auth-scram.c index 5881386e374d4..4337e89ce95d5 100644 --- a/src/interfaces/libpq/fe-auth-scram.c +++ b/src/interfaces/libpq/fe-auth-scram.c @@ -21,6 +21,22 @@ #include "fe-auth.h" +/* The exported SCRAM callback mechanism. */ +static void *scram_init(PGconn *conn, const char *password, + const char *sasl_mechanism); +static void scram_exchange(void *opaq, char *input, int inputlen, + char **output, int *outputlen, + bool *done, bool *success); +static bool scram_channel_bound(void *opaq); +static void scram_free(void *opaq); + +const pg_fe_sasl_mech pg_scram_mech = { + scram_init, + scram_exchange, + scram_channel_bound, + scram_free +}; + /* * Status of exchange messages used for SCRAM authentication via the * SASL protocol. @@ -72,10 +88,10 @@ static bool calculate_client_proof(fe_scram_state *state, /* * Initialize SCRAM exchange status. */ -void * -pg_fe_scram_init(PGconn *conn, - const char *password, - const char *sasl_mechanism) +static void * +scram_init(PGconn *conn, + const char *password, + const char *sasl_mechanism) { fe_scram_state *state; char *prep_password; @@ -128,8 +144,8 @@ pg_fe_scram_init(PGconn *conn, * Note that the caller must also ensure that the exchange was actually * successful. */ -bool -pg_fe_scram_channel_bound(void *opaq) +static bool +scram_channel_bound(void *opaq) { fe_scram_state *state = (fe_scram_state *) opaq; @@ -152,8 +168,8 @@ pg_fe_scram_channel_bound(void *opaq) /* * Free SCRAM exchange status */ -void -pg_fe_scram_free(void *opaq) +static void +scram_free(void *opaq) { fe_scram_state *state = (fe_scram_state *) opaq; @@ -188,10 +204,10 @@ pg_fe_scram_free(void *opaq) /* * Exchange a SCRAM message with backend. */ -void -pg_fe_scram_exchange(void *opaq, char *input, int inputlen, - char **output, int *outputlen, - bool *done, bool *success) +static void +scram_exchange(void *opaq, char *input, int inputlen, + char **output, int *outputlen, + bool *done, bool *success) { fe_scram_state *state = (fe_scram_state *) opaq; PGconn *conn = state->conn; diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c index e8062647e608e..eaba0ba56d7e9 100644 --- a/src/interfaces/libpq/fe-auth.c +++ b/src/interfaces/libpq/fe-auth.c @@ -41,6 +41,7 @@ #include "common/md5.h" #include "common/scram-common.h" #include "fe-auth.h" +#include "fe-auth-sasl.h" #include "libpq-fe.h" #ifdef ENABLE_GSS @@ -482,7 +483,10 @@ pg_SASL_init(PGconn *conn, int payloadlen) * channel_binding is not disabled. */ if (conn->channel_binding[0] != 'd') /* disable */ + { selected_mechanism = SCRAM_SHA_256_PLUS_NAME; + conn->sasl = &pg_scram_mech; + } #else /* * The client does not support channel binding. If it is @@ -516,7 +520,10 @@ pg_SASL_init(PGconn *conn, int payloadlen) } else if (strcmp(mechanism_buf.data, SCRAM_SHA_256_NAME) == 0 && !selected_mechanism) + { selected_mechanism = SCRAM_SHA_256_NAME; + conn->sasl = &pg_scram_mech; + } } if (!selected_mechanism) @@ -555,20 +562,22 @@ pg_SASL_init(PGconn *conn, int payloadlen) goto error; } + Assert(conn->sasl); + /* * Initialize the SASL state information with all the information gathered * during the initial exchange. * * Note: Only tls-unique is supported for the moment. */ - conn->sasl_state = pg_fe_scram_init(conn, + conn->sasl_state = conn->sasl->init(conn, password, selected_mechanism); if (!conn->sasl_state) goto oom_error; /* Get the mechanism-specific Initial Client Response, if any */ - pg_fe_scram_exchange(conn->sasl_state, + conn->sasl->exchange(conn->sasl_state, NULL, -1, &initialresponse, &initialresponselen, &done, &success); @@ -649,7 +658,7 @@ pg_SASL_continue(PGconn *conn, int payloadlen, bool final) /* For safety and convenience, ensure the buffer is NULL-terminated. */ challenge[payloadlen] = '\0'; - pg_fe_scram_exchange(conn->sasl_state, + conn->sasl->exchange(conn->sasl_state, challenge, payloadlen, &output, &outputlen, &done, &success); @@ -664,6 +673,7 @@ pg_SASL_continue(PGconn *conn, int payloadlen, bool final) libpq_gettext("AuthenticationSASLFinal received from server, but SASL authentication was not completed\n")); return STATUS_ERROR; } + if (outputlen != 0) { /* @@ -830,7 +840,7 @@ check_expected_areq(AuthRequest areq, PGconn *conn) case AUTH_REQ_SASL_FIN: break; case AUTH_REQ_OK: - if (!pg_fe_scram_channel_bound(conn->sasl_state)) + if (!conn->sasl || !conn->sasl->channel_bound(conn->sasl_state)) { appendPQExpBufferStr(&conn->errorMessage, libpq_gettext("channel binding required, but server authenticated client without channel binding\n")); diff --git a/src/interfaces/libpq/fe-auth.h b/src/interfaces/libpq/fe-auth.h index 7877dcbd09f13..63927480ee7af 100644 --- a/src/interfaces/libpq/fe-auth.h +++ b/src/interfaces/libpq/fe-auth.h @@ -22,15 +22,8 @@ extern int pg_fe_sendauth(AuthRequest areq, int payloadlen, PGconn *conn); extern char *pg_fe_getauthname(PQExpBuffer errorMessage); -/* Prototypes for functions in fe-auth-scram.c */ -extern void *pg_fe_scram_init(PGconn *conn, - const char *password, - const char *sasl_mechanism); -extern bool pg_fe_scram_channel_bound(void *opaq); -extern void pg_fe_scram_free(void *opaq); -extern void pg_fe_scram_exchange(void *opaq, char *input, int inputlen, - char **output, int *outputlen, - bool *done, bool *success); +/* Mechanisms in fe-auth-scram.c */ +extern const pg_fe_sasl_mech pg_scram_mech; extern char *pg_fe_scram_build_secret(const char *password); #endif /* FE_AUTH_H */ diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index fc65e490ef824..e950b41374baf 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -516,11 +516,7 @@ pqDropConnection(PGconn *conn, bool flushInput) #endif if (conn->sasl_state) { - /* - * XXX: if support for more authentication mechanisms is added, this - * needs to call the right 'free' function. - */ - pg_fe_scram_free(conn->sasl_state); + conn->sasl->free(conn->sasl_state); conn->sasl_state = NULL; } } diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h index 6b7fd2c267ad2..e9f214b61b9fc 100644 --- a/src/interfaces/libpq/libpq-int.h +++ b/src/interfaces/libpq/libpq-int.h @@ -41,6 +41,7 @@ #include "getaddrinfo.h" #include "libpq/pqcomm.h" /* include stuff found in fe only */ +#include "fe-auth-sasl.h" #include "pqexpbuffer.h" #ifdef ENABLE_GSS @@ -500,6 +501,7 @@ struct pg_conn PGresult *next_result; /* next result (used in single-row mode) */ /* Assorted state for SASL, SSL, GSS, etc */ + const pg_fe_sasl_mech *sasl; void *sasl_state; /* SSL structures */ diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index a72d53a272f1d..9a0936ead1ecd 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -3319,6 +3319,7 @@ pgParameterStatus pg_atomic_flag pg_atomic_uint32 pg_atomic_uint64 +pg_be_sasl_mech pg_checksum_context pg_checksum_raw_context pg_checksum_type @@ -3334,6 +3335,7 @@ pg_enc pg_enc2gettext pg_enc2name pg_encname +pg_fe_sasl_mech pg_funcptr_t pg_gssinfo pg_hmac_ctx From d854720df6df68cfe1432342e33c9e3020572a51 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 7 Jul 2021 11:13:40 +0900 Subject: [PATCH 617/671] postgres_fdw: Tighten up allowed values for batch_size, fetch_size options. Previously the values such as '100$%$#$#', '9,223,372,' were accepted and treated as valid integers for postgres_fdw options batch_size and fetch_size. Whereas this is not the case with fdw_startup_cost and fdw_tuple_cost options for which an error is thrown. This was because endptr was not used while converting strings to integers using strtol. This commit changes the logic so that it uses parse_int function instead of strtol as it serves the purpose by returning false in case if it is unable to convert the string to integer. Note that this function also rounds off the values such as '100.456' to 100 and '100.567' or '100.678' to 101. While on this, use parse_real for fdw_startup_cost and fdw_tuple_cost options. Since parse_int and parse_real are being used for reloptions and GUCs, it is more appropriate to use in postgres_fdw rather than using strtol and strtod directly. Back-patch to v14. Author: Bharath Rupireddy Reviewed-by: Ashutosh Bapat, Tom Lane, Kyotaro Horiguchi, Fujii Masao Discussion: https://postgr.es/m/CALj2ACVMO6wY5Pc4oe1OCgUOAtdjHuFsBDw8R5uoYR86eWFQDA@mail.gmail.com --- .../postgres_fdw/expected/postgres_fdw.out | 19 +++++++ contrib/postgres_fdw/option.c | 52 +++++++++++-------- contrib/postgres_fdw/postgres_fdw.c | 16 +++--- contrib/postgres_fdw/sql/postgres_fdw.sql | 16 ++++++ doc/src/sgml/postgres-fdw.sgml | 14 ++--- 5 files changed, 82 insertions(+), 35 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 25112df916cd1..b510322c4ea8e 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -10480,3 +10480,22 @@ DROP TABLE result_tbl; DROP TABLE join_tbl; ALTER SERVER loopback OPTIONS (DROP async_capable); ALTER SERVER loopback2 OPTIONS (DROP async_capable); +-- =================================================================== +-- test invalid server and foreign table options +-- =================================================================== +-- Invalid fdw_startup_cost option +CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw + OPTIONS(fdw_startup_cost '100$%$#$#'); +ERROR: invalid value for floating point option "fdw_startup_cost": 100$%$#$# +-- Invalid fdw_tuple_cost option +CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw + OPTIONS(fdw_tuple_cost '100$%$#$#'); +ERROR: invalid value for floating point option "fdw_tuple_cost": 100$%$#$# +-- Invalid fetch_size option +CREATE FOREIGN TABLE inv_fsz (c1 int ) + SERVER loopback OPTIONS (fetch_size '100$%$#$#'); +ERROR: invalid value for integer option "fetch_size": 100$%$#$# +-- Invalid batch_size option +CREATE FOREIGN TABLE inv_bsz (c1 int ) + SERVER loopback OPTIONS (batch_size '100$%$#$#'); +ERROR: invalid value for integer option "batch_size": 100$%$#$# diff --git a/contrib/postgres_fdw/option.c b/contrib/postgres_fdw/option.c index 672b55a808f4f..4593cbc540e4c 100644 --- a/contrib/postgres_fdw/option.c +++ b/contrib/postgres_fdw/option.c @@ -20,6 +20,7 @@ #include "commands/extension.h" #include "postgres_fdw.h" #include "utils/builtins.h" +#include "utils/guc.h" #include "utils/varlena.h" /* @@ -119,14 +120,23 @@ postgres_fdw_validator(PG_FUNCTION_ARGS) strcmp(def->defname, "fdw_tuple_cost") == 0) { /* these must have a non-negative numeric value */ - double val; - char *endp; + char *value; + double real_val; + bool is_parsed; - val = strtod(defGetString(def), &endp); - if (*endp || val < 0) + value = defGetString(def); + is_parsed = parse_real(value, &real_val, 0, NULL); + + if (!is_parsed) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid value for floating point option \"%s\": %s", + def->defname, value))); + + if (real_val < 0) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("%s requires a non-negative numeric value", + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("\"%s\" requires a non-negative floating point value", def->defname))); } else if (strcmp(def->defname, "extensions") == 0) @@ -134,26 +144,26 @@ postgres_fdw_validator(PG_FUNCTION_ARGS) /* check list syntax, warn about uninstalled extensions */ (void) ExtractExtensionList(defGetString(def), true); } - else if (strcmp(def->defname, "fetch_size") == 0) + else if (strcmp(def->defname, "fetch_size") == 0 || + strcmp(def->defname, "batch_size") == 0) { - int fetch_size; + char *value; + int int_val; + bool is_parsed; + + value = defGetString(def); + is_parsed = parse_int(value, &int_val, 0, NULL); - fetch_size = strtol(defGetString(def), NULL, 10); - if (fetch_size <= 0) + if (!is_parsed) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("%s requires a non-negative integer value", - def->defname))); - } - else if (strcmp(def->defname, "batch_size") == 0) - { - int batch_size; + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid value for integer option \"%s\": %s", + def->defname, value))); - batch_size = strtol(defGetString(def), NULL, 10); - if (batch_size <= 0) + if (int_val <= 0) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("%s requires a non-negative integer value", + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("\"%s\" requires a non-negative integer value", def->defname))); } else if (strcmp(def->defname, "password_required") == 0) diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index a5afac47ebda8..5cf10402a2023 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -5024,7 +5024,7 @@ postgresAcquireSampleRowsFunc(Relation relation, int elevel, if (strcmp(def->defname, "fetch_size") == 0) { - fetch_size = strtol(defGetString(def), NULL, 10); + (void) parse_int(defGetString(def), &fetch_size, 0, NULL); break; } } @@ -5034,7 +5034,7 @@ postgresAcquireSampleRowsFunc(Relation relation, int elevel, if (strcmp(def->defname, "fetch_size") == 0) { - fetch_size = strtol(defGetString(def), NULL, 10); + (void) parse_int(defGetString(def), &fetch_size, 0, NULL); break; } } @@ -5801,14 +5801,16 @@ apply_server_options(PgFdwRelationInfo *fpinfo) if (strcmp(def->defname, "use_remote_estimate") == 0) fpinfo->use_remote_estimate = defGetBoolean(def); else if (strcmp(def->defname, "fdw_startup_cost") == 0) - fpinfo->fdw_startup_cost = strtod(defGetString(def), NULL); + (void) parse_real(defGetString(def), &fpinfo->fdw_startup_cost, 0, + NULL); else if (strcmp(def->defname, "fdw_tuple_cost") == 0) - fpinfo->fdw_tuple_cost = strtod(defGetString(def), NULL); + (void) parse_real(defGetString(def), &fpinfo->fdw_tuple_cost, 0, + NULL); else if (strcmp(def->defname, "extensions") == 0) fpinfo->shippable_extensions = ExtractExtensionList(defGetString(def), false); else if (strcmp(def->defname, "fetch_size") == 0) - fpinfo->fetch_size = strtol(defGetString(def), NULL, 10); + (void) parse_int(defGetString(def), &fpinfo->fetch_size, 0, NULL); else if (strcmp(def->defname, "async_capable") == 0) fpinfo->async_capable = defGetBoolean(def); } @@ -5831,7 +5833,7 @@ apply_table_options(PgFdwRelationInfo *fpinfo) if (strcmp(def->defname, "use_remote_estimate") == 0) fpinfo->use_remote_estimate = defGetBoolean(def); else if (strcmp(def->defname, "fetch_size") == 0) - fpinfo->fetch_size = strtol(defGetString(def), NULL, 10); + (void) parse_int(defGetString(def), &fpinfo->fetch_size, 0, NULL); else if (strcmp(def->defname, "async_capable") == 0) fpinfo->async_capable = defGetBoolean(def); } @@ -7341,7 +7343,7 @@ get_batch_size_option(Relation rel) if (strcmp(def->defname, "batch_size") == 0) { - batch_size = strtol(defGetString(def), NULL, 10); + (void) parse_int(defGetString(def), &batch_size, 0, NULL); break; } } diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 95862e38ed927..911f171d812e7 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -3339,3 +3339,19 @@ DROP TABLE join_tbl; ALTER SERVER loopback OPTIONS (DROP async_capable); ALTER SERVER loopback2 OPTIONS (DROP async_capable); + +-- =================================================================== +-- test invalid server and foreign table options +-- =================================================================== +-- Invalid fdw_startup_cost option +CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw + OPTIONS(fdw_startup_cost '100$%$#$#'); +-- Invalid fdw_tuple_cost option +CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw + OPTIONS(fdw_tuple_cost '100$%$#$#'); +-- Invalid fetch_size option +CREATE FOREIGN TABLE inv_fsz (c1 int ) + SERVER loopback OPTIONS (fetch_size '100$%$#$#'); +-- Invalid batch_size option +CREATE FOREIGN TABLE inv_bsz (c1 int ) + SERVER loopback OPTIONS (batch_size '100$%$#$#'); diff --git a/doc/src/sgml/postgres-fdw.sgml b/doc/src/sgml/postgres-fdw.sgml index d7d2baafc9699..c9fce77599727 100644 --- a/doc/src/sgml/postgres-fdw.sgml +++ b/doc/src/sgml/postgres-fdw.sgml @@ -266,11 +266,11 @@ OPTIONS (ADD password_required 'false'); fdw_startup_cost (floating point) - This option, which can be specified for a foreign server, is a numeric - value that is added to the estimated startup cost of any foreign-table - scan on that server. This represents the additional overhead of - establishing a connection, parsing and planning the query on the - remote side, etc. + This option, which can be specified for a foreign server, is a floating + point value that is added to the estimated startup cost of any + foreign-table scan on that server. This represents the additional + overhead of establishing a connection, parsing and planning the query on + the remote side, etc. The default value is 100. @@ -280,8 +280,8 @@ OPTIONS (ADD password_required 'false'); fdw_tuple_cost (floating point) - This option, which can be specified for a foreign server, is a numeric - value that is used as extra cost per-tuple for foreign-table + This option, which can be specified for a foreign server, is a floating + point value that is used as extra cost per-tuple for foreign-table scans on that server. This represents the additional overhead of data transfer between servers. You might increase or decrease this number to reflect higher or lower network delay to the remote server. From 29f45e299e7ffa1df0db44b8452228625479487f Mon Sep 17 00:00:00 2001 From: David Rowley Date: Wed, 7 Jul 2021 16:29:17 +1200 Subject: [PATCH 618/671] Use a hash table to speed up NOT IN(values) Similar to 50e17ad28, which allowed hash tables to be used for IN clauses with a set of constants, here we add the same feature for NOT IN clauses. NOT IN evaluates the same as: WHERE a <> v1 AND a <> v2 AND a <> v3. Obviously, if we're using a hash table we must be exactly equivalent to that and return the same result taking into account that either side of the condition could contain a NULL. This requires a little bit of special handling to make work with the hash table version. When processing NOT IN, the ScalarArrayOpExpr's operator will be the <> operator. To be able to build and lookup a hash table we must use the <>'s negator operator. The planner checks if that exists and is hashable and sets the relevant fields in ScalarArrayOpExpr to instruct the executor to use hashing. Author: David Rowley, James Coleman Reviewed-by: James Coleman, Zhihong Yu Discussion: https://postgr.es/m/CAApHDvoF1mum_FRk6D621edcB6KSHBi2+GAgWmioj5AhOu2vwQ@mail.gmail.com --- src/backend/executor/execExpr.c | 24 +++++-- src/backend/executor/execExprInterp.c | 17 ++++- src/backend/nodes/copyfuncs.c | 1 + src/backend/nodes/equalfuncs.c | 6 ++ src/backend/nodes/outfuncs.c | 1 + src/backend/nodes/readfuncs.c | 1 + src/backend/optimizer/plan/setrefs.c | 3 + src/backend/optimizer/prep/prepqual.c | 1 + src/backend/optimizer/util/clauses.c | 76 +++++++++++++++----- src/backend/parser/parse_oper.c | 1 + src/backend/partitioning/partbounds.c | 1 + src/include/catalog/catversion.h | 2 +- src/include/executor/execExpr.h | 1 + src/include/nodes/primnodes.h | 18 +++-- src/test/regress/expected/expressions.out | 84 +++++++++++++++++++++++ src/test/regress/sql/expressions.sql | 30 ++++++++ 16 files changed, 240 insertions(+), 27 deletions(-) diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c index 8c9f8a6aeb624..2c8c414a14f72 100644 --- a/src/backend/executor/execExpr.c +++ b/src/backend/executor/execExpr.c @@ -1205,19 +1205,34 @@ ExecInitExprRec(Expr *node, ExprState *state, AclResult aclresult; FmgrInfo *hash_finfo; FunctionCallInfo hash_fcinfo; + Oid cmpfuncid; + + /* + * Select the correct comparison function. When we do hashed + * NOT IN clauses, the opfuncid will be the inequality + * comparison function and negfuncid will be set to equality. + * We need to use the equality function for hash probes. + */ + if (OidIsValid(opexpr->negfuncid)) + { + Assert(OidIsValid(opexpr->hashfuncid)); + cmpfuncid = opexpr->negfuncid; + } + else + cmpfuncid = opexpr->opfuncid; Assert(list_length(opexpr->args) == 2); scalararg = (Expr *) linitial(opexpr->args); arrayarg = (Expr *) lsecond(opexpr->args); /* Check permission to call function */ - aclresult = pg_proc_aclcheck(opexpr->opfuncid, + aclresult = pg_proc_aclcheck(cmpfuncid, GetUserId(), ACL_EXECUTE); if (aclresult != ACLCHECK_OK) aclcheck_error(aclresult, OBJECT_FUNCTION, - get_func_name(opexpr->opfuncid)); - InvokeFunctionExecuteHook(opexpr->opfuncid); + get_func_name(cmpfuncid)); + InvokeFunctionExecuteHook(cmpfuncid); if (OidIsValid(opexpr->hashfuncid)) { @@ -1233,7 +1248,7 @@ ExecInitExprRec(Expr *node, ExprState *state, /* Set up the primary fmgr lookup information */ finfo = palloc0(sizeof(FmgrInfo)); fcinfo = palloc0(SizeForFunctionCallInfo(2)); - fmgr_info(opexpr->opfuncid, finfo); + fmgr_info(cmpfuncid, finfo); fmgr_info_set_expr((Node *) node, finfo); InitFunctionCallInfoData(*fcinfo, finfo, 2, opexpr->inputcollid, NULL, NULL); @@ -1274,6 +1289,7 @@ ExecInitExprRec(Expr *node, ExprState *state, /* And perform the operation */ scratch.opcode = EEOP_HASHED_SCALARARRAYOP; + scratch.d.hashedscalararrayop.inclause = opexpr->useOr; scratch.d.hashedscalararrayop.finfo = finfo; scratch.d.hashedscalararrayop.fcinfo_data = fcinfo; scratch.d.hashedscalararrayop.fn_addr = finfo->fn_addr; diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c index 5483dee650798..eb49817cee452 100644 --- a/src/backend/executor/execExprInterp.c +++ b/src/backend/executor/execExprInterp.c @@ -3493,6 +3493,7 @@ ExecEvalHashedScalarArrayOp(ExprState *state, ExprEvalStep *op, ExprContext *eco { ScalarArrayOpExprHashTable *elements_tab = op->d.hashedscalararrayop.elements_tab; FunctionCallInfo fcinfo = op->d.hashedscalararrayop.fcinfo_data; + bool inclause = op->d.hashedscalararrayop.inclause; bool strictfunc = op->d.hashedscalararrayop.finfo->fn_strict; Datum scalar = fcinfo->args[0].value; bool scalar_isnull = fcinfo->args[0].isnull; @@ -3596,7 +3597,12 @@ ExecEvalHashedScalarArrayOp(ExprState *state, ExprEvalStep *op, ExprContext *eco /* Check the hash to see if we have a match. */ hashfound = NULL != saophash_lookup(elements_tab->hashtab, scalar); - result = BoolGetDatum(hashfound); + /* the result depends on if the clause is an IN or NOT IN clause */ + if (inclause) + result = BoolGetDatum(hashfound); /* IN */ + else + result = BoolGetDatum(!hashfound); /* NOT IN */ + resultnull = false; /* @@ -3605,7 +3611,7 @@ ExecEvalHashedScalarArrayOp(ExprState *state, ExprEvalStep *op, ExprContext *eco * hashtable, but instead marked if we found any when building the table * in has_nulls. */ - if (!DatumGetBool(result) && op->d.hashedscalararrayop.has_nulls) + if (!hashfound && op->d.hashedscalararrayop.has_nulls) { if (strictfunc) { @@ -3633,6 +3639,13 @@ ExecEvalHashedScalarArrayOp(ExprState *state, ExprEvalStep *op, ExprContext *eco result = op->d.hashedscalararrayop.fn_addr(fcinfo); resultnull = fcinfo->isnull; + + /* + * Reverse the result for NOT IN clauses since the above function + * is the equality function and we need not-equals. + */ + if (!inclause) + result = !result; } } diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index bd87f2378468a..6fef06795787f 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -1718,6 +1718,7 @@ _copyScalarArrayOpExpr(const ScalarArrayOpExpr *from) COPY_SCALAR_FIELD(opno); COPY_SCALAR_FIELD(opfuncid); COPY_SCALAR_FIELD(hashfuncid); + COPY_SCALAR_FIELD(negfuncid); COPY_SCALAR_FIELD(useOr); COPY_SCALAR_FIELD(inputcollid); COPY_NODE_FIELD(args); diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index dba3e6b31e681..b9cc7b199c0f3 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -414,6 +414,12 @@ _equalScalarArrayOpExpr(const ScalarArrayOpExpr *a, const ScalarArrayOpExpr *b) b->hashfuncid != 0) return false; + /* Likewise for the negfuncid */ + if (a->negfuncid != b->negfuncid && + a->negfuncid != 0 && + b->negfuncid != 0) + return false; + COMPARE_SCALAR_FIELD(useOr); COMPARE_SCALAR_FIELD(inputcollid); COMPARE_NODE_FIELD(args); diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index e32b92e2994d2..e09e4f77feadf 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -1311,6 +1311,7 @@ _outScalarArrayOpExpr(StringInfo str, const ScalarArrayOpExpr *node) WRITE_OID_FIELD(opno); WRITE_OID_FIELD(opfuncid); WRITE_OID_FIELD(hashfuncid); + WRITE_OID_FIELD(negfuncid); WRITE_BOOL_FIELD(useOr); WRITE_OID_FIELD(inputcollid); WRITE_NODE_FIELD(args); diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index f0b34ecface79..3dec0a2508ddf 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -832,6 +832,7 @@ _readScalarArrayOpExpr(void) READ_OID_FIELD(opno); READ_OID_FIELD(opfuncid); READ_OID_FIELD(hashfuncid); + READ_OID_FIELD(negfuncid); READ_BOOL_FIELD(useOr); READ_OID_FIELD(inputcollid); READ_NODE_FIELD(args); diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 61ccfd300b370..210c4b3b14cbf 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -1687,6 +1687,9 @@ fix_expr_common(PlannerInfo *root, Node *node) if (!OidIsValid(saop->hashfuncid)) record_plan_function_dependency(root, saop->hashfuncid); + + if (!OidIsValid(saop->negfuncid)) + record_plan_function_dependency(root, saop->negfuncid); } else if (IsA(node, Const)) { diff --git a/src/backend/optimizer/prep/prepqual.c b/src/backend/optimizer/prep/prepqual.c index 42c3e4dc0464d..8908a9652ed7b 100644 --- a/src/backend/optimizer/prep/prepqual.c +++ b/src/backend/optimizer/prep/prepqual.c @@ -128,6 +128,7 @@ negate_clause(Node *node) newopexpr->opno = negator; newopexpr->opfuncid = InvalidOid; newopexpr->hashfuncid = InvalidOid; + newopexpr->negfuncid = InvalidOid; newopexpr->useOr = !saopexpr->useOr; newopexpr->inputcollid = saopexpr->inputcollid; newopexpr->args = saopexpr->args; diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 059fa702549a1..8506165d68363 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -2140,27 +2140,71 @@ convert_saop_to_hashed_saop_walker(Node *node, void *context) Oid lefthashfunc; Oid righthashfunc; - if (saop->useOr && arrayarg && IsA(arrayarg, Const) && - !((Const *) arrayarg)->constisnull && - get_op_hash_functions(saop->opno, &lefthashfunc, &righthashfunc) && - lefthashfunc == righthashfunc) + if (arrayarg && IsA(arrayarg, Const) && + !((Const *) arrayarg)->constisnull) { - Datum arrdatum = ((Const *) arrayarg)->constvalue; - ArrayType *arr = (ArrayType *) DatumGetPointer(arrdatum); - int nitems; + if (saop->useOr) + { + if (get_op_hash_functions(saop->opno, &lefthashfunc, &righthashfunc) && + lefthashfunc == righthashfunc) + { + Datum arrdatum = ((Const *) arrayarg)->constvalue; + ArrayType *arr = (ArrayType *) DatumGetPointer(arrdatum); + int nitems; - /* - * Only fill in the hash functions if the array looks large enough - * for it to be worth hashing instead of doing a linear search. - */ - nitems = ArrayGetNItems(ARR_NDIM(arr), ARR_DIMS(arr)); + /* + * Only fill in the hash functions if the array looks + * large enough for it to be worth hashing instead of + * doing a linear search. + */ + nitems = ArrayGetNItems(ARR_NDIM(arr), ARR_DIMS(arr)); - if (nitems >= MIN_ARRAY_SIZE_FOR_HASHED_SAOP) + if (nitems >= MIN_ARRAY_SIZE_FOR_HASHED_SAOP) + { + /* Looks good. Fill in the hash functions */ + saop->hashfuncid = lefthashfunc; + } + return true; + } + } + else /* !saop->useOr */ { - /* Looks good. Fill in the hash functions */ - saop->hashfuncid = lefthashfunc; + Oid negator = get_negator(saop->opno); + + /* + * Check if this is a NOT IN using an operator whose negator + * is hashable. If so we can still build a hash table and + * just ensure the lookup items are not in the hash table. + */ + if (OidIsValid(negator) && + get_op_hash_functions(negator, &lefthashfunc, &righthashfunc) && + lefthashfunc == righthashfunc) + { + Datum arrdatum = ((Const *) arrayarg)->constvalue; + ArrayType *arr = (ArrayType *) DatumGetPointer(arrdatum); + int nitems; + + /* + * Only fill in the hash functions if the array looks + * large enough for it to be worth hashing instead of + * doing a linear search. + */ + nitems = ArrayGetNItems(ARR_NDIM(arr), ARR_DIMS(arr)); + + if (nitems >= MIN_ARRAY_SIZE_FOR_HASHED_SAOP) + { + /* Looks good. Fill in the hash functions */ + saop->hashfuncid = lefthashfunc; + + /* + * Also set the negfuncid. The executor will need + * that to perform hashtable lookups. + */ + saop->negfuncid = get_opcode(negator); + } + return true; + } } - return true; } } diff --git a/src/backend/parser/parse_oper.c b/src/backend/parser/parse_oper.c index 4e4607999036d..bc34a23afc658 100644 --- a/src/backend/parser/parse_oper.c +++ b/src/backend/parser/parse_oper.c @@ -895,6 +895,7 @@ make_scalar_array_op(ParseState *pstate, List *opname, result->opno = oprid(tup); result->opfuncid = opform->oprcode; result->hashfuncid = InvalidOid; + result->negfuncid = InvalidOid; result->useOr = useOr; /* inputcollid will be set by parse_collate.c */ result->args = args; diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index 00c394445a830..38baaefcda3a9 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -3878,6 +3878,7 @@ make_partition_op_expr(PartitionKey key, int keynum, saopexpr->opno = operoid; saopexpr->opfuncid = get_opcode(operoid); saopexpr->hashfuncid = InvalidOid; + saopexpr->negfuncid = InvalidOid; saopexpr->useOr = true; saopexpr->inputcollid = key->partcollation[keynum]; saopexpr->args = list_make2(arg1, arrexpr); diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 1b23c7c253bcb..e92ecaf34485f 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202106151 +#define CATALOG_VERSION_NO 202107071 #endif diff --git a/src/include/executor/execExpr.h b/src/include/executor/execExpr.h index 785600d04d09c..6a24341faa705 100644 --- a/src/include/executor/execExpr.h +++ b/src/include/executor/execExpr.h @@ -574,6 +574,7 @@ typedef struct ExprEvalStep struct { bool has_nulls; + bool inclause; /* true for IN and false for NOT IN */ struct ScalarArrayOpExprHashTable *elements_tab; FmgrInfo *finfo; /* function's lookup data */ FunctionCallInfo fcinfo_data; /* arguments etc */ diff --git a/src/include/nodes/primnodes.h b/src/include/nodes/primnodes.h index 9ae851d847715..996c3e40160a4 100644 --- a/src/include/nodes/primnodes.h +++ b/src/include/nodes/primnodes.h @@ -580,10 +580,18 @@ typedef OpExpr NullIfExpr; * the result type (or the collation) because it must be boolean. * * A ScalarArrayOpExpr with a valid hashfuncid is evaluated during execution - * by building a hash table containing the Const values from the rhs arg. - * This table is probed during expression evaluation. Only useOr=true - * ScalarArrayOpExpr with Const arrays on the rhs can have the hashfuncid - * field set. See convert_saop_to_hashed_saop(). + * by building a hash table containing the Const values from the RHS arg. + * This table is probed during expression evaluation. The planner will set + * hashfuncid to the hash function which must be used to build and probe the + * hash table. The executor determines if it should use hash-based checks or + * the more traditional means based on if the hashfuncid is set or not. + * + * When performing hashed NOT IN, the negfuncid will also be set to the + * equality function which the hash table must use to build and probe the hash + * table. opno and opfuncid will remain set to the <> operator and its + * corresponding function and won't be used during execution. For + * non-hashtable based NOT INs, negfuncid will be set to InvalidOid. See + * convert_saop_to_hashed_saop(). */ typedef struct ScalarArrayOpExpr { @@ -591,6 +599,8 @@ typedef struct ScalarArrayOpExpr Oid opno; /* PG_OPERATOR OID of the operator */ Oid opfuncid; /* PG_PROC OID of comparison function */ Oid hashfuncid; /* PG_PROC OID of hash func or InvalidOid */ + Oid negfuncid; /* PG_PROC OID of negator of opfuncid function + * or InvalidOid. See above */ bool useOr; /* true for ANY, false for ALL */ Oid inputcollid; /* OID of collation that operator should use */ List *args; /* the scalar and array operands */ diff --git a/src/test/regress/expected/expressions.out b/src/test/regress/expected/expressions.out index 5944dfd5e1a0d..84159cb21fc93 100644 --- a/src/test/regress/expected/expressions.out +++ b/src/test/regress/expected/expressions.out @@ -216,6 +216,55 @@ select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', ' t (1 row) +-- NOT IN +select return_int_input(1) not in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); + ?column? +---------- + f +(1 row) + +select return_int_input(1) not in (10, 9, 2, 8, 3, 7, 4, 6, 5, 0); + ?column? +---------- + t +(1 row) + +select return_int_input(1) not in (10, 9, 2, 8, 3, 7, 4, 6, 5, 2, null); + ?column? +---------- + +(1 row) + +select return_int_input(1) not in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null); + ?column? +---------- + f +(1 row) + +select return_int_input(1) not in (null, null, null, null, null, null, null, null, null, null, null); + ?column? +---------- + +(1 row) + +select return_int_input(null::int) not in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); + ?column? +---------- + +(1 row) + +select return_int_input(null::int) not in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); + ?column? +---------- + +(1 row) + +select return_text_input('a') not in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'); + ?column? +---------- + f +(1 row) + rollback; -- Test with non-strict equality function. -- We need to create our own type for this. @@ -242,6 +291,11 @@ begin end if; end; $$ language plpgsql immutable; +create function myintne(myint, myint) returns bool as $$ +begin + return not myinteq($1, $2); +end; +$$ language plpgsql immutable; create operator = ( leftarg = myint, rightarg = myint, @@ -252,6 +306,16 @@ create operator = ( join = eqjoinsel, merges ); +create operator <> ( + leftarg = myint, + rightarg = myint, + commutator = <>, + negator = =, + procedure = myintne, + restrict = eqsel, + join = eqjoinsel, + merges +); create operator class myint_ops default for type myint using hash as operator 1 = (myint, myint), @@ -266,6 +330,16 @@ select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint,6 (2 rows) +select * from inttest where a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); + a +--- +(0 rows) + +select * from inttest where a not in (0::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); + a +--- +(0 rows) + -- ensure the result matched with the non-hashed version. We simply remove -- some array elements so that we don't reach the hashing threshold. select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint, null); @@ -275,4 +349,14 @@ select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint, (2 rows) +select * from inttest where a not in (1::myint,2::myint,3::myint,4::myint,5::myint, null); + a +--- +(0 rows) + +select * from inttest where a not in (0::myint,2::myint,3::myint,4::myint,5::myint, null); + a +--- +(0 rows) + rollback; diff --git a/src/test/regress/sql/expressions.sql b/src/test/regress/sql/expressions.sql index b3fd1b5ecbac4..bf30f41505696 100644 --- a/src/test/regress/sql/expressions.sql +++ b/src/test/regress/sql/expressions.sql @@ -93,6 +93,15 @@ select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null); select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'); +-- NOT IN +select return_int_input(1) not in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); +select return_int_input(1) not in (10, 9, 2, 8, 3, 7, 4, 6, 5, 0); +select return_int_input(1) not in (10, 9, 2, 8, 3, 7, 4, 6, 5, 2, null); +select return_int_input(1) not in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null); +select return_int_input(1) not in (null, null, null, null, null, null, null, null, null, null, null); +select return_int_input(null::int) not in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); +select return_int_input(null::int) not in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); +select return_text_input('a') not in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'); rollback; @@ -124,6 +133,12 @@ begin end; $$ language plpgsql immutable; +create function myintne(myint, myint) returns bool as $$ +begin + return not myinteq($1, $2); +end; +$$ language plpgsql immutable; + create operator = ( leftarg = myint, rightarg = myint, @@ -135,6 +150,17 @@ create operator = ( merges ); +create operator <> ( + leftarg = myint, + rightarg = myint, + commutator = <>, + negator = =, + procedure = myintne, + restrict = eqsel, + join = eqjoinsel, + merges +); + create operator class myint_ops default for type myint using hash as operator 1 = (myint, myint), @@ -145,8 +171,12 @@ insert into inttest values(1::myint),(null); -- try an array with enough elements to cause hashing select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); +select * from inttest where a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); +select * from inttest where a not in (0::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); -- ensure the result matched with the non-hashed version. We simply remove -- some array elements so that we don't reach the hashing threshold. select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint, null); +select * from inttest where a not in (1::myint,2::myint,3::myint,4::myint,5::myint, null); +select * from inttest where a not in (0::myint,2::myint,3::myint,4::myint,5::myint, null); rollback; From 9d2a7757347cb1adb48599fce4dcde0f1fc9e9ae Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 7 Jul 2021 21:54:47 +0900 Subject: [PATCH 619/671] doc: Fix description about pg_stat_statements.track_planning. This commit fixes wrong wording like "a fewer kinds" in the description about track_planning option. Back-patch to v13 where pg_stat_statements.track_planning was added. Author: Justin Pryzby Reviewed-by: Julien Rouhaud, Fujii Masao Discussion: https://postgr.es/m/20210418233615.GB7256@telsasoft.com --- doc/src/sgml/pgstatstatements.sgml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/pgstatstatements.sgml b/doc/src/sgml/pgstatstatements.sgml index f20b255d4e425..1696a6e63694d 100644 --- a/doc/src/sgml/pgstatstatements.sgml +++ b/doc/src/sgml/pgstatstatements.sgml @@ -696,8 +696,9 @@ pg_stat_statements.track_planning controls whether planning operations and duration are tracked by the module. Enabling this parameter may incur a noticeable performance penalty, - especially when a fewer kinds of queries are executed on many - concurrent connections. + especially when statements with identical query structure are executed + by many concurrent connections which compete to update a small number of + pg_stat_statements entries. The default value is off. Only superusers can change this setting. From b9734c13f168ef0d487aa122e486ca9b6dd6aa59 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 7 Jul 2021 15:21:25 -0400 Subject: [PATCH 620/671] Fix crash in postgres_fdw for provably-empty remote UPDATE/DELETE. In 86dc90056, I'd written find_modifytable_subplan with the assumption that if the immediate child of a ModifyTable is a Result, it must be a projecting Result with a subplan. However, if the UPDATE or DELETE has a provably-constant-false WHERE clause, that's not so: we'll generate a dummy subplan with a childless Result. Add the missing null-check so we don't crash on such cases. Per report from Alexander Pyhalov. Discussion: https://postgr.es/m/b9a6f53549456b2f3e2fd150dcd79d72@postgrespro.ru --- .../postgres_fdw/expected/postgres_fdw.out | 20 +++++++++++++++++++ contrib/postgres_fdw/postgres_fdw.c | 4 +++- contrib/postgres_fdw/sql/postgres_fdw.sql | 4 ++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index b510322c4ea8e..b8561d6a3c49e 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -6853,6 +6853,26 @@ DROP TRIGGER trig_row_before ON rem1; DROP TRIGGER trig_row_after ON rem1; DROP TRIGGER trig_local_before ON loc1; -- Test direct foreign table modification functionality +EXPLAIN (verbose, costs off) +DELETE FROM rem1; -- can be pushed down + QUERY PLAN +--------------------------------------------- + Delete on public.rem1 + -> Foreign Delete on public.rem1 + Remote SQL: DELETE FROM public.loc1 +(3 rows) + +EXPLAIN (verbose, costs off) +DELETE FROM rem1 WHERE false; -- currently can't be pushed down + QUERY PLAN +------------------------------------------------------- + Delete on public.rem1 + Remote SQL: DELETE FROM public.loc1 WHERE ctid = $1 + -> Result + Output: ctid + One-Time Filter: false +(5 rows) + -- Test with statement-level triggers CREATE TRIGGER trig_stmt_before BEFORE DELETE OR INSERT OR UPDATE ON rem1 diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index 5cf10402a2023..f15c97ad7a482 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -2370,7 +2370,9 @@ find_modifytable_subplan(PlannerInfo *root, if (subplan_index < list_length(appendplan->appendplans)) subplan = (Plan *) list_nth(appendplan->appendplans, subplan_index); } - else if (IsA(subplan, Result) && IsA(outerPlan(subplan), Append)) + else if (IsA(subplan, Result) && + outerPlan(subplan) != NULL && + IsA(outerPlan(subplan), Append)) { Append *appendplan = (Append *) outerPlan(subplan); diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 911f171d812e7..c283e747154fb 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -1738,6 +1738,10 @@ DROP TRIGGER trig_local_before ON loc1; -- Test direct foreign table modification functionality +EXPLAIN (verbose, costs off) +DELETE FROM rem1; -- can be pushed down +EXPLAIN (verbose, costs off) +DELETE FROM rem1 WHERE false; -- currently can't be pushed down -- Test with statement-level triggers CREATE TRIGGER trig_stmt_before From 2ed532ee8c474e9767e76e1f3251cc3a0224358c Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 8 Jul 2021 09:38:52 +0200 Subject: [PATCH 621/671] Improve error messages about mismatching relkind Most error messages about a relkind that was not supported or appropriate for the command was of the pattern "relation \"%s\" is not a table, foreign table, or materialized view" This style can become verbose and tedious to maintain. Moreover, it's not very helpful: If I'm trying to create a comment on a TOAST table, which is not supported, then the information that I could have created a comment on a materialized view is pointless. Instead, write the primary error message shorter and saying more directly that what was attempted is not possible. Then, in the detail message, explain that the operation is not supported for the relkind the object was. To simplify that, add a new function errdetail_relkind_not_supported() that does this. In passing, make use of RELKIND_HAS_STORAGE() where appropriate, instead of listing out the relkinds individually. Reviewed-by: Michael Paquier Reviewed-by: Alvaro Herrera Discussion: https://www.postgresql.org/message-id/flat/dc35a398-37d0-75ce-07ea-1dd71d98f8ec@2ndquadrant.com --- contrib/amcheck/expected/check_heap.out | 15 +- contrib/amcheck/verify_heapam.c | 38 +- contrib/pageinspect/expected/page.out | 6 +- contrib/pageinspect/rawpage.c | 28 +- contrib/pg_surgery/expected/heap_surgery.out | 6 +- contrib/pg_surgery/heap_surgery.c | 54 ++- .../pg_visibility/expected/pg_visibility.out | 75 ++-- contrib/pg_visibility/pg_visibility.c | 5 +- contrib/pgstattuple/expected/pgstattuple.out | 30 +- contrib/pgstattuple/pgstatapprox.c | 5 +- contrib/pgstattuple/pgstatindex.c | 75 +--- contrib/pgstattuple/pgstattuple.c | 31 +- src/backend/catalog/Makefile | 1 + src/backend/catalog/pg_class.c | 52 +++ src/backend/catalog/toasting.c | 6 +- src/backend/commands/comment.c | 5 +- src/backend/commands/indexcmds.c | 16 +- src/backend/commands/lockcmds.c | 5 +- src/backend/commands/seclabel.c | 5 +- src/backend/commands/sequence.c | 5 +- src/backend/commands/statscmds.c | 5 +- src/backend/commands/tablecmds.c | 357 +++++++++++------- src/backend/commands/trigger.c | 15 +- src/backend/parser/parse_utilcmd.c | 5 +- src/backend/rewrite/rewriteDefine.c | 8 +- src/include/catalog/pg_class.h | 1 + src/test/regress/expected/alter_table.out | 9 +- .../regress/expected/create_table_like.out | 3 +- src/test/regress/expected/foreign_data.out | 6 +- src/test/regress/expected/indexing.out | 3 +- src/test/regress/expected/sequence.out | 3 +- src/test/regress/expected/stats_ext.out | 12 +- 32 files changed, 512 insertions(+), 378 deletions(-) create mode 100644 src/backend/catalog/pg_class.c diff --git a/contrib/amcheck/expected/check_heap.out b/contrib/amcheck/expected/check_heap.out index 1fb3823142902..ad3086d2aacdc 100644 --- a/contrib/amcheck/expected/check_heap.out +++ b/contrib/amcheck/expected/check_heap.out @@ -139,7 +139,8 @@ CREATE TABLE test_partitioned (a int, b text default repeat('x', 5000)) SELECT * FROM verify_heapam('test_partitioned', startblock := NULL, endblock := NULL); -ERROR: "test_partitioned" is not a table, materialized view, or TOAST table +ERROR: cannot check relation "test_partitioned" +DETAIL: This operation is not supported for partitioned tables. -- Check that valid options are not rejected nor corruption reported -- for an empty partition table (the child one) CREATE TABLE test_partition partition OF test_partitioned FOR VALUES IN (1); @@ -165,19 +166,22 @@ CREATE INDEX test_index ON test_partition (a); SELECT * FROM verify_heapam('test_index', startblock := NULL, endblock := NULL); -ERROR: "test_index" is not a table, materialized view, or TOAST table +ERROR: cannot check relation "test_index" +DETAIL: This operation is not supported for indexes. -- Check that views are rejected CREATE VIEW test_view AS SELECT 1; SELECT * FROM verify_heapam('test_view', startblock := NULL, endblock := NULL); -ERROR: "test_view" is not a table, materialized view, or TOAST table +ERROR: cannot check relation "test_view" +DETAIL: This operation is not supported for views. -- Check that sequences are rejected CREATE SEQUENCE test_sequence; SELECT * FROM verify_heapam('test_sequence', startblock := NULL, endblock := NULL); -ERROR: "test_sequence" is not a table, materialized view, or TOAST table +ERROR: cannot check relation "test_sequence" +DETAIL: This operation is not supported for sequences. -- Check that foreign tables are rejected CREATE FOREIGN DATA WRAPPER dummy; CREATE SERVER dummy_server FOREIGN DATA WRAPPER dummy; @@ -185,7 +189,8 @@ CREATE FOREIGN TABLE test_foreign_table () SERVER dummy_server; SELECT * FROM verify_heapam('test_foreign_table', startblock := NULL, endblock := NULL); -ERROR: "test_foreign_table" is not a table, materialized view, or TOAST table +ERROR: cannot check relation "test_foreign_table" +DETAIL: This operation is not supported for foreign tables. -- cleanup DROP TABLE heaptest; DROP TABLE test_partition; diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c index a3caee7cdd38c..226271923a89b 100644 --- a/contrib/amcheck/verify_heapam.c +++ b/contrib/amcheck/verify_heapam.c @@ -147,7 +147,6 @@ typedef struct HeapCheckContext } HeapCheckContext; /* Internal implementation */ -static void sanity_check_relation(Relation rel); static void check_tuple(HeapCheckContext *ctx); static void check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, ToastedAttribute *ta, int32 *expected_chunk_seq, @@ -300,7 +299,23 @@ verify_heapam(PG_FUNCTION_ARGS) /* Open relation, check relkind and access method */ ctx.rel = relation_open(relid, AccessShareLock); - sanity_check_relation(ctx.rel); + + /* + * Check that a relation's relkind and access method are both supported. + */ + if (ctx.rel->rd_rel->relkind != RELKIND_RELATION && + ctx.rel->rd_rel->relkind != RELKIND_MATVIEW && + ctx.rel->rd_rel->relkind != RELKIND_TOASTVALUE) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cannot check relation \"%s\"", + RelationGetRelationName(ctx.rel)), + errdetail_relkind_not_supported(ctx.rel->rd_rel->relkind))); + + if (ctx.rel->rd_rel->relam != HEAP_TABLE_AM_OID) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("only heap AM is supported"))); /* Early exit if the relation is empty */ nblocks = RelationGetNumberOfBlocks(ctx.rel); @@ -523,25 +538,6 @@ verify_heapam(PG_FUNCTION_ARGS) PG_RETURN_NULL(); } -/* - * Check that a relation's relkind and access method are both supported. - */ -static void -sanity_check_relation(Relation rel) -{ - if (rel->rd_rel->relkind != RELKIND_RELATION && - rel->rd_rel->relkind != RELKIND_MATVIEW && - rel->rd_rel->relkind != RELKIND_TOASTVALUE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, materialized view, or TOAST table", - RelationGetRelationName(rel)))); - if (rel->rd_rel->relam != HEAP_TABLE_AM_OID) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("only heap AM is supported"))); -} - /* * Shared internal implementation for report_corruption and * report_toast_corruption. diff --git a/contrib/pageinspect/expected/page.out b/contrib/pageinspect/expected/page.out index 4da28f0a1db58..4e325ae56dd84 100644 --- a/contrib/pageinspect/expected/page.out +++ b/contrib/pageinspect/expected/page.out @@ -180,9 +180,11 @@ DROP TABLE test1; create table test_partitioned (a int) partition by range (a); create index test_partitioned_index on test_partitioned (a); select get_raw_page('test_partitioned', 0); -- error about partitioned table -ERROR: cannot get raw page from partitioned table "test_partitioned" +ERROR: cannot get raw page from relation "test_partitioned" +DETAIL: This operation is not supported for partitioned tables. select get_raw_page('test_partitioned_index', 0); -- error about partitioned index -ERROR: cannot get raw page from partitioned index "test_partitioned_index" +ERROR: cannot get raw page from relation "test_partitioned_index" +DETAIL: This operation is not supported for partitioned indexes. -- a regular table which is a member of a partition set should work though create table test_part1 partition of test_partitioned for values from ( 1 ) to (100); select get_raw_page('test_part1', 0); -- get farther and error about empty table diff --git a/contrib/pageinspect/rawpage.c b/contrib/pageinspect/rawpage.c index 7272b21016869..e9fee73bc436f 100644 --- a/contrib/pageinspect/rawpage.c +++ b/contrib/pageinspect/rawpage.c @@ -155,32 +155,12 @@ get_raw_page_internal(text *relname, ForkNumber forknum, BlockNumber blkno) relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname)); rel = relation_openrv(relrv, AccessShareLock); - /* Check that this relation has storage */ - if (rel->rd_rel->relkind == RELKIND_VIEW) + if (!RELKIND_HAS_STORAGE(rel->rd_rel->relkind)) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("cannot get raw page from view \"%s\"", - RelationGetRelationName(rel)))); - if (rel->rd_rel->relkind == RELKIND_COMPOSITE_TYPE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("cannot get raw page from composite type \"%s\"", - RelationGetRelationName(rel)))); - if (rel->rd_rel->relkind == RELKIND_FOREIGN_TABLE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("cannot get raw page from foreign table \"%s\"", - RelationGetRelationName(rel)))); - if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("cannot get raw page from partitioned table \"%s\"", - RelationGetRelationName(rel)))); - if (rel->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("cannot get raw page from partitioned index \"%s\"", - RelationGetRelationName(rel)))); + errmsg("cannot get raw page from relation \"%s\"", + RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); /* * Reject attempts to read non-local temporary relations; we would be diff --git a/contrib/pg_surgery/expected/heap_surgery.out b/contrib/pg_surgery/expected/heap_surgery.out index d4a757ffa0145..df7d13b09086f 100644 --- a/contrib/pg_surgery/expected/heap_surgery.out +++ b/contrib/pg_surgery/expected/heap_surgery.out @@ -170,9 +170,11 @@ rollback; -- check that it fails on an unsupported relkind create view vw as select 1; select heap_force_kill('vw'::regclass, ARRAY['(0, 1)']::tid[]); -ERROR: "vw" is not a table, materialized view, or TOAST table +ERROR: cannot operate on relation "vw" +DETAIL: This operation is not supported for views. select heap_force_freeze('vw'::regclass, ARRAY['(0, 1)']::tid[]); -ERROR: "vw" is not a table, materialized view, or TOAST table +ERROR: cannot operate on relation "vw" +DETAIL: This operation is not supported for views. -- cleanup. drop view vw; drop extension pg_surgery; diff --git a/contrib/pg_surgery/heap_surgery.c b/contrib/pg_surgery/heap_surgery.c index d31e5f31fd42a..7edfe4f326f5b 100644 --- a/contrib/pg_surgery/heap_surgery.c +++ b/contrib/pg_surgery/heap_surgery.c @@ -37,7 +37,6 @@ static int32 tidcmp(const void *a, const void *b); static Datum heap_force_common(FunctionCallInfo fcinfo, HeapTupleForceOption heap_force_opt); static void sanity_check_tid_array(ArrayType *ta, int *ntids); -static void sanity_check_relation(Relation rel); static BlockNumber find_tids_one_page(ItemPointer tids, int ntids, OffsetNumber *next_start_ptr); @@ -101,8 +100,28 @@ heap_force_common(FunctionCallInfo fcinfo, HeapTupleForceOption heap_force_opt) rel = relation_open(relid, RowExclusiveLock); - /* Check target relation. */ - sanity_check_relation(rel); + /* + * Check target relation. + */ + if (rel->rd_rel->relkind != RELKIND_RELATION && + rel->rd_rel->relkind != RELKIND_MATVIEW && + rel->rd_rel->relkind != RELKIND_TOASTVALUE) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cannot operate on relation \"%s\"", + RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); + + if (rel->rd_rel->relam != HEAP_TABLE_AM_OID) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("only heap AM is supported"))); + + /* Must be owner of the table or superuser. */ + if (!pg_class_ownercheck(RelationGetRelid(rel), GetUserId())) + aclcheck_error(ACLCHECK_NOT_OWNER, + get_relkind_objtype(rel->rd_rel->relkind), + RelationGetRelationName(rel)); tids = ((ItemPointer) ARR_DATA_PTR(ta)); @@ -363,35 +382,6 @@ sanity_check_tid_array(ArrayType *ta, int *ntids) *ntids = ArrayGetNItems(ARR_NDIM(ta), ARR_DIMS(ta)); } -/*------------------------------------------------------------------------- - * sanity_check_relation() - * - * Perform sanity checks on the given relation. - * ------------------------------------------------------------------------ - */ -static void -sanity_check_relation(Relation rel) -{ - if (rel->rd_rel->relkind != RELKIND_RELATION && - rel->rd_rel->relkind != RELKIND_MATVIEW && - rel->rd_rel->relkind != RELKIND_TOASTVALUE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, materialized view, or TOAST table", - RelationGetRelationName(rel)))); - - if (rel->rd_rel->relam != HEAP_TABLE_AM_OID) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("only heap AM is supported"))); - - /* Must be owner of the table or superuser. */ - if (!pg_class_ownercheck(RelationGetRelid(rel), GetUserId())) - aclcheck_error(ACLCHECK_NOT_OWNER, - get_relkind_objtype(rel->rd_rel->relkind), - RelationGetRelationName(rel)); -} - /*------------------------------------------------------------------------- * find_tids_one_page() * diff --git a/contrib/pg_visibility/expected/pg_visibility.out b/contrib/pg_visibility/expected/pg_visibility.out index 315633bfea66c..9de54db2a2924 100644 --- a/contrib/pg_visibility/expected/pg_visibility.out +++ b/contrib/pg_visibility/expected/pg_visibility.out @@ -41,66 +41,91 @@ ROLLBACK; create table test_partitioned (a int) partition by list (a); -- these should all fail select pg_visibility('test_partitioned', 0); -ERROR: "test_partitioned" is not a table, materialized view, or TOAST table +ERROR: relation "test_partitioned" is of wrong relation kind +DETAIL: This operation is not supported for partitioned tables. select pg_visibility_map('test_partitioned'); -ERROR: "test_partitioned" is not a table, materialized view, or TOAST table +ERROR: relation "test_partitioned" is of wrong relation kind +DETAIL: This operation is not supported for partitioned tables. select pg_visibility_map_summary('test_partitioned'); -ERROR: "test_partitioned" is not a table, materialized view, or TOAST table +ERROR: relation "test_partitioned" is of wrong relation kind +DETAIL: This operation is not supported for partitioned tables. select pg_check_frozen('test_partitioned'); -ERROR: "test_partitioned" is not a table, materialized view, or TOAST table +ERROR: relation "test_partitioned" is of wrong relation kind +DETAIL: This operation is not supported for partitioned tables. select pg_truncate_visibility_map('test_partitioned'); -ERROR: "test_partitioned" is not a table, materialized view, or TOAST table +ERROR: relation "test_partitioned" is of wrong relation kind +DETAIL: This operation is not supported for partitioned tables. create table test_partition partition of test_partitioned for values in (1); create index test_index on test_partition (a); -- indexes do not, so these all fail select pg_visibility('test_index', 0); -ERROR: "test_index" is not a table, materialized view, or TOAST table +ERROR: relation "test_index" is of wrong relation kind +DETAIL: This operation is not supported for indexes. select pg_visibility_map('test_index'); -ERROR: "test_index" is not a table, materialized view, or TOAST table +ERROR: relation "test_index" is of wrong relation kind +DETAIL: This operation is not supported for indexes. select pg_visibility_map_summary('test_index'); -ERROR: "test_index" is not a table, materialized view, or TOAST table +ERROR: relation "test_index" is of wrong relation kind +DETAIL: This operation is not supported for indexes. select pg_check_frozen('test_index'); -ERROR: "test_index" is not a table, materialized view, or TOAST table +ERROR: relation "test_index" is of wrong relation kind +DETAIL: This operation is not supported for indexes. select pg_truncate_visibility_map('test_index'); -ERROR: "test_index" is not a table, materialized view, or TOAST table +ERROR: relation "test_index" is of wrong relation kind +DETAIL: This operation is not supported for indexes. create view test_view as select 1; -- views do not have VMs, so these all fail select pg_visibility('test_view', 0); -ERROR: "test_view" is not a table, materialized view, or TOAST table +ERROR: relation "test_view" is of wrong relation kind +DETAIL: This operation is not supported for views. select pg_visibility_map('test_view'); -ERROR: "test_view" is not a table, materialized view, or TOAST table +ERROR: relation "test_view" is of wrong relation kind +DETAIL: This operation is not supported for views. select pg_visibility_map_summary('test_view'); -ERROR: "test_view" is not a table, materialized view, or TOAST table +ERROR: relation "test_view" is of wrong relation kind +DETAIL: This operation is not supported for views. select pg_check_frozen('test_view'); -ERROR: "test_view" is not a table, materialized view, or TOAST table +ERROR: relation "test_view" is of wrong relation kind +DETAIL: This operation is not supported for views. select pg_truncate_visibility_map('test_view'); -ERROR: "test_view" is not a table, materialized view, or TOAST table +ERROR: relation "test_view" is of wrong relation kind +DETAIL: This operation is not supported for views. create sequence test_sequence; -- sequences do not have VMs, so these all fail select pg_visibility('test_sequence', 0); -ERROR: "test_sequence" is not a table, materialized view, or TOAST table +ERROR: relation "test_sequence" is of wrong relation kind +DETAIL: This operation is not supported for sequences. select pg_visibility_map('test_sequence'); -ERROR: "test_sequence" is not a table, materialized view, or TOAST table +ERROR: relation "test_sequence" is of wrong relation kind +DETAIL: This operation is not supported for sequences. select pg_visibility_map_summary('test_sequence'); -ERROR: "test_sequence" is not a table, materialized view, or TOAST table +ERROR: relation "test_sequence" is of wrong relation kind +DETAIL: This operation is not supported for sequences. select pg_check_frozen('test_sequence'); -ERROR: "test_sequence" is not a table, materialized view, or TOAST table +ERROR: relation "test_sequence" is of wrong relation kind +DETAIL: This operation is not supported for sequences. select pg_truncate_visibility_map('test_sequence'); -ERROR: "test_sequence" is not a table, materialized view, or TOAST table +ERROR: relation "test_sequence" is of wrong relation kind +DETAIL: This operation is not supported for sequences. create foreign data wrapper dummy; create server dummy_server foreign data wrapper dummy; create foreign table test_foreign_table () server dummy_server; -- foreign tables do not have VMs, so these all fail select pg_visibility('test_foreign_table', 0); -ERROR: "test_foreign_table" is not a table, materialized view, or TOAST table +ERROR: relation "test_foreign_table" is of wrong relation kind +DETAIL: This operation is not supported for foreign tables. select pg_visibility_map('test_foreign_table'); -ERROR: "test_foreign_table" is not a table, materialized view, or TOAST table +ERROR: relation "test_foreign_table" is of wrong relation kind +DETAIL: This operation is not supported for foreign tables. select pg_visibility_map_summary('test_foreign_table'); -ERROR: "test_foreign_table" is not a table, materialized view, or TOAST table +ERROR: relation "test_foreign_table" is of wrong relation kind +DETAIL: This operation is not supported for foreign tables. select pg_check_frozen('test_foreign_table'); -ERROR: "test_foreign_table" is not a table, materialized view, or TOAST table +ERROR: relation "test_foreign_table" is of wrong relation kind +DETAIL: This operation is not supported for foreign tables. select pg_truncate_visibility_map('test_foreign_table'); -ERROR: "test_foreign_table" is not a table, materialized view, or TOAST table +ERROR: relation "test_foreign_table" is of wrong relation kind +DETAIL: This operation is not supported for foreign tables. -- check some of the allowed relkinds create table regular_table (a int, b text); alter table regular_table alter column b set storage external; diff --git a/contrib/pg_visibility/pg_visibility.c b/contrib/pg_visibility/pg_visibility.c index dd0c124e6255e..c6d983183dbc1 100644 --- a/contrib/pg_visibility/pg_visibility.c +++ b/contrib/pg_visibility/pg_visibility.c @@ -781,6 +781,7 @@ check_relation_relkind(Relation rel) rel->rd_rel->relkind != RELKIND_TOASTVALUE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, materialized view, or TOAST table", - RelationGetRelationName(rel)))); + errmsg("relation \"%s\" is of wrong relation kind", + RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); } diff --git a/contrib/pgstattuple/expected/pgstattuple.out b/contrib/pgstattuple/expected/pgstattuple.out index 40f7825ddb4bf..e4ac86f9e30f8 100644 --- a/contrib/pgstattuple/expected/pgstattuple.out +++ b/contrib/pgstattuple/expected/pgstattuple.out @@ -155,13 +155,17 @@ create table test_partitioned (a int) partition by range (a); create index test_partitioned_index on test_partitioned(a); -- these should all fail select pgstattuple('test_partitioned'); -ERROR: "test_partitioned" (partitioned table) is not supported +ERROR: cannot get tuple-level statistics for relation "test_partitioned" +DETAIL: This operation is not supported for partitioned tables. select pgstattuple('test_partitioned_index'); -ERROR: "test_partitioned_index" (partitioned index) is not supported +ERROR: cannot get tuple-level statistics for relation "test_partitioned_index" +DETAIL: This operation is not supported for partitioned indexes. select pgstattuple_approx('test_partitioned'); -ERROR: "test_partitioned" is not a table, materialized view, or TOAST table +ERROR: relation "test_partitioned" is of wrong relation kind +DETAIL: This operation is not supported for partitioned tables. select pg_relpages('test_partitioned'); -ERROR: "test_partitioned" is not a table, index, materialized view, sequence, or TOAST table +ERROR: cannot get page count of relation "test_partitioned" +DETAIL: This operation is not supported for partitioned tables. select pgstatindex('test_partitioned'); ERROR: relation "test_partitioned" is not a btree index select pgstatginindex('test_partitioned'); @@ -171,11 +175,14 @@ ERROR: "test_partitioned" is not an index create view test_view as select 1; -- these should all fail select pgstattuple('test_view'); -ERROR: "test_view" (view) is not supported +ERROR: cannot get tuple-level statistics for relation "test_view" +DETAIL: This operation is not supported for views. select pgstattuple_approx('test_view'); -ERROR: "test_view" is not a table, materialized view, or TOAST table +ERROR: relation "test_view" is of wrong relation kind +DETAIL: This operation is not supported for views. select pg_relpages('test_view'); -ERROR: "test_view" is not a table, index, materialized view, sequence, or TOAST table +ERROR: cannot get page count of relation "test_view" +DETAIL: This operation is not supported for views. select pgstatindex('test_view'); ERROR: relation "test_view" is not a btree index select pgstatginindex('test_view'); @@ -187,11 +194,14 @@ create server dummy_server foreign data wrapper dummy; create foreign table test_foreign_table () server dummy_server; -- these should all fail select pgstattuple('test_foreign_table'); -ERROR: "test_foreign_table" (foreign table) is not supported +ERROR: cannot get tuple-level statistics for relation "test_foreign_table" +DETAIL: This operation is not supported for foreign tables. select pgstattuple_approx('test_foreign_table'); -ERROR: "test_foreign_table" is not a table, materialized view, or TOAST table +ERROR: relation "test_foreign_table" is of wrong relation kind +DETAIL: This operation is not supported for foreign tables. select pg_relpages('test_foreign_table'); -ERROR: "test_foreign_table" is not a table, index, materialized view, sequence, or TOAST table +ERROR: cannot get page count of relation "test_foreign_table" +DETAIL: This operation is not supported for foreign tables. select pgstatindex('test_foreign_table'); ERROR: relation "test_foreign_table" is not a btree index select pgstatginindex('test_foreign_table'); diff --git a/contrib/pgstattuple/pgstatapprox.c b/contrib/pgstattuple/pgstatapprox.c index 1fe193bb256f2..3b836f370e20b 100644 --- a/contrib/pgstattuple/pgstatapprox.c +++ b/contrib/pgstattuple/pgstatapprox.c @@ -289,8 +289,9 @@ pgstattuple_approx_internal(Oid relid, FunctionCallInfo fcinfo) rel->rd_rel->relkind == RELKIND_TOASTVALUE)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("\"%s\" is not a table, materialized view, or TOAST table", - RelationGetRelationName(rel)))); + errmsg("relation \"%s\" is of wrong relation kind", + RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); if (rel->rd_rel->relam != HEAP_TABLE_AM_OID) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), diff --git a/contrib/pgstattuple/pgstatindex.c b/contrib/pgstattuple/pgstatindex.c index 5368bb30f0c55..6c4b053dd0777 100644 --- a/contrib/pgstattuple/pgstatindex.c +++ b/contrib/pgstattuple/pgstatindex.c @@ -128,8 +128,8 @@ typedef struct HashIndexStat } HashIndexStat; static Datum pgstatindex_impl(Relation rel, FunctionCallInfo fcinfo); +static int64 pg_relpages_impl(Relation rel); static void GetHashPageStats(Page page, HashIndexStat *stats); -static void check_relation_relkind(Relation rel); /* ------------------------------------------------------ * pgstatindex() @@ -383,7 +383,6 @@ Datum pg_relpages(PG_FUNCTION_ARGS) { text *relname = PG_GETARG_TEXT_PP(0); - int64 relpages; Relation rel; RangeVar *relrv; @@ -395,16 +394,7 @@ pg_relpages(PG_FUNCTION_ARGS) relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname)); rel = relation_openrv(relrv, AccessShareLock); - /* only some relkinds have storage */ - check_relation_relkind(rel); - - /* note: this will work OK on non-local temp tables */ - - relpages = RelationGetNumberOfBlocks(rel); - - relation_close(rel, AccessShareLock); - - PG_RETURN_INT64(relpages); + PG_RETURN_INT64(pg_relpages_impl(rel)); } /* No need for superuser checks in v1.5, see above */ @@ -412,23 +402,13 @@ Datum pg_relpages_v1_5(PG_FUNCTION_ARGS) { text *relname = PG_GETARG_TEXT_PP(0); - int64 relpages; Relation rel; RangeVar *relrv; relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname)); rel = relation_openrv(relrv, AccessShareLock); - /* only some relkinds have storage */ - check_relation_relkind(rel); - - /* note: this will work OK on non-local temp tables */ - - relpages = RelationGetNumberOfBlocks(rel); - - relation_close(rel, AccessShareLock); - - PG_RETURN_INT64(relpages); + PG_RETURN_INT64(pg_relpages_impl(rel)); } /* Must keep superuser() check, see above. */ @@ -436,7 +416,6 @@ Datum pg_relpagesbyid(PG_FUNCTION_ARGS) { Oid relid = PG_GETARG_OID(0); - int64 relpages; Relation rel; if (!superuser()) @@ -446,16 +425,7 @@ pg_relpagesbyid(PG_FUNCTION_ARGS) rel = relation_open(relid, AccessShareLock); - /* only some relkinds have storage */ - check_relation_relkind(rel); - - /* note: this will work OK on non-local temp tables */ - - relpages = RelationGetNumberOfBlocks(rel); - - relation_close(rel, AccessShareLock); - - PG_RETURN_INT64(relpages); + PG_RETURN_INT64(pg_relpages_impl(rel)); } /* No need for superuser checks in v1.5, see above */ @@ -463,13 +433,24 @@ Datum pg_relpagesbyid_v1_5(PG_FUNCTION_ARGS) { Oid relid = PG_GETARG_OID(0); - int64 relpages; Relation rel; rel = relation_open(relid, AccessShareLock); - /* only some relkinds have storage */ - check_relation_relkind(rel); + PG_RETURN_INT64(pg_relpages_impl(rel)); +} + +static int64 +pg_relpages_impl(Relation rel) +{ + int64 relpages; + + if (!RELKIND_HAS_STORAGE(rel->rd_rel->relkind)) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cannot get page count of relation \"%s\"", + RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); /* note: this will work OK on non-local temp tables */ @@ -477,7 +458,7 @@ pg_relpagesbyid_v1_5(PG_FUNCTION_ARGS) relation_close(rel, AccessShareLock); - PG_RETURN_INT64(relpages); + return relpages; } /* ------------------------------------------------------ @@ -754,21 +735,3 @@ GetHashPageStats(Page page, HashIndexStat *stats) } stats->free_space += PageGetExactFreeSpace(page); } - -/* - * check_relation_relkind - convenience routine to check that relation - * is of the relkind supported by the callers - */ -static void -check_relation_relkind(Relation rel) -{ - if (rel->rd_rel->relkind != RELKIND_RELATION && - rel->rd_rel->relkind != RELKIND_INDEX && - rel->rd_rel->relkind != RELKIND_MATVIEW && - rel->rd_rel->relkind != RELKIND_SEQUENCE && - rel->rd_rel->relkind != RELKIND_TOASTVALUE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, index, materialized view, sequence, or TOAST table", - RelationGetRelationName(rel)))); -} diff --git a/contrib/pgstattuple/pgstattuple.c b/contrib/pgstattuple/pgstattuple.c index 21fdeff8afd54..f408e6d84dbc3 100644 --- a/contrib/pgstattuple/pgstattuple.c +++ b/contrib/pgstattuple/pgstattuple.c @@ -284,31 +284,20 @@ pgstat_relation(Relation rel, FunctionCallInfo fcinfo) err = "unknown index"; break; } + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("index \"%s\" (%s) is not supported", + RelationGetRelationName(rel), err))); break; - case RELKIND_VIEW: - err = "view"; - break; - case RELKIND_COMPOSITE_TYPE: - err = "composite type"; - break; - case RELKIND_FOREIGN_TABLE: - err = "foreign table"; - break; - case RELKIND_PARTITIONED_TABLE: - err = "partitioned table"; - break; - case RELKIND_PARTITIONED_INDEX: - err = "partitioned index"; - break; + default: - err = "unknown"; - break; + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot get tuple-level statistics for relation \"%s\"", + RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); } - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("\"%s\" (%s) is not supported", - RelationGetRelationName(rel), err))); return 0; /* should not happen */ } diff --git a/src/backend/catalog/Makefile b/src/backend/catalog/Makefile index 69f9dd51a7a2e..d297e773612f6 100644 --- a/src/backend/catalog/Makefile +++ b/src/backend/catalog/Makefile @@ -26,6 +26,7 @@ OBJS = \ partition.o \ pg_aggregate.o \ pg_cast.o \ + pg_class.o \ pg_collation.o \ pg_constraint.o \ pg_conversion.o \ diff --git a/src/backend/catalog/pg_class.c b/src/backend/catalog/pg_class.c new file mode 100644 index 0000000000000..304c0af808ed4 --- /dev/null +++ b/src/backend/catalog/pg_class.c @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------------- + * + * pg_class.c + * routines to support manipulation of the pg_class relation + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * src/backend/catalog/pg_class.c + * + *------------------------------------------------------------------------- + */ +#include "postgres.h" + +#include "catalog/pg_class.h" + +/* + * Issue an errdetail() informing that the relkind is not supported for this + * operation. + */ +int +errdetail_relkind_not_supported(char relkind) +{ + switch (relkind) + { + case RELKIND_RELATION: + return errdetail("This operation is not supported for tables."); + case RELKIND_INDEX: + return errdetail("This operation is not supported for indexes."); + case RELKIND_SEQUENCE: + return errdetail("This operation is not supported for sequences."); + case RELKIND_TOASTVALUE: + return errdetail("This operation is not supported for TOAST tables."); + case RELKIND_VIEW: + return errdetail("This operation is not supported for views."); + case RELKIND_MATVIEW: + return errdetail("This operation is not supported for materialized views."); + case RELKIND_COMPOSITE_TYPE: + return errdetail("This operation is not supported for composite types."); + case RELKIND_FOREIGN_TABLE: + return errdetail("This operation is not supported for foreign tables."); + case RELKIND_PARTITIONED_TABLE: + return errdetail("This operation is not supported for partitioned tables."); + case RELKIND_PARTITIONED_INDEX: + return errdetail("This operation is not supported for partitioned indexes."); + default: + elog(ERROR, "unrecognized relkind: '%c'", relkind); + return 0; + } +} diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c index bf81f6ccc5552..147b5abc190fb 100644 --- a/src/backend/catalog/toasting.c +++ b/src/backend/catalog/toasting.c @@ -99,10 +99,8 @@ BootstrapToastTable(char *relName, Oid toastOid, Oid toastIndexOid) if (rel->rd_rel->relkind != RELKIND_RELATION && rel->rd_rel->relkind != RELKIND_MATVIEW) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table or materialized view", - relName))); + elog(ERROR, "\"%s\" is not a table or materialized view", + relName); /* create_toast_table does all the work */ if (!create_toast_table(rel, toastOid, toastIndexOid, (Datum) 0, diff --git a/src/backend/commands/comment.c b/src/backend/commands/comment.c index 216b8d3068825..834f1a2a3f562 100644 --- a/src/backend/commands/comment.c +++ b/src/backend/commands/comment.c @@ -98,8 +98,9 @@ CommentObject(CommentStmt *stmt) relation->rd_rel->relkind != RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, view, materialized view, composite type, or foreign table", - RelationGetRelationName(relation)))); + errmsg("cannot set comment on relation \"%s\"", + RelationGetRelationName(relation)), + errdetail_relkind_not_supported(relation->rd_rel->relkind))); break; default: break; diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 76774dce06446..c14ca27c5edf2 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -650,22 +650,12 @@ DefineIndex(Oid relationId, case RELKIND_PARTITIONED_TABLE: /* OK */ break; - case RELKIND_FOREIGN_TABLE: - - /* - * Custom error message for FOREIGN TABLE since the term is close - * to a regular table and can confuse the user. - */ - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("cannot create index on foreign table \"%s\"", - RelationGetRelationName(rel)))); - break; default: ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table or materialized view", - RelationGetRelationName(rel)))); + errmsg("cannot create index on relation \"%s\"", + RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); break; } diff --git a/src/backend/commands/lockcmds.c b/src/backend/commands/lockcmds.c index 34f2270cedffc..62465bacd8116 100644 --- a/src/backend/commands/lockcmds.c +++ b/src/backend/commands/lockcmds.c @@ -89,8 +89,9 @@ RangeVarCallbackForLockTable(const RangeVar *rv, Oid relid, Oid oldrelid, relkind != RELKIND_VIEW) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table or view", - rv->relname))); + errmsg("cannot lock relation \"%s\"", + rv->relname), + errdetail_relkind_not_supported(relkind))); /* * Make note if a temporary relation has been accessed in this diff --git a/src/backend/commands/seclabel.c b/src/backend/commands/seclabel.c index 6906714298694..ddc019cb39a59 100644 --- a/src/backend/commands/seclabel.c +++ b/src/backend/commands/seclabel.c @@ -188,8 +188,9 @@ ExecSecLabelStmt(SecLabelStmt *stmt) relation->rd_rel->relkind != RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, view, materialized view, composite type, or foreign table", - RelationGetRelationName(relation)))); + errmsg("cannot set security label on relation \"%s\"", + RelationGetRelationName(relation)), + errdetail_relkind_not_supported(relation->rd_rel->relkind))); break; default: break; diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index 0415df9ccb7eb..e3f9f6d53d04b 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -1680,8 +1680,9 @@ process_owned_by(Relation seqrel, List *owned_by, bool for_identity) tablerel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("referenced relation \"%s\" is not a table or foreign table", - RelationGetRelationName(tablerel)))); + errmsg("sequence cannot be owned by relation \"%s\"", + RelationGetRelationName(tablerel)), + errdetail_relkind_not_supported(tablerel->rd_rel->relkind))); /* We insist on same owner and schema */ if (seqrel->rd_rel->relowner != tablerel->rd_rel->relowner) diff --git a/src/backend/commands/statscmds.c b/src/backend/commands/statscmds.c index b244a0fbd7bde..4856f4b41d699 100644 --- a/src/backend/commands/statscmds.c +++ b/src/backend/commands/statscmds.c @@ -135,8 +135,9 @@ CreateStatistics(CreateStatsStmt *stmt) rel->rd_rel->relkind != RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("relation \"%s\" is not a table, foreign table, or materialized view", - RelationGetRelationName(rel)))); + errmsg("cannot define statistics for relation \"%s\"", + RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); /* You must own the relation to create stats on it */ if (!pg_class_ownercheck(RelationGetRelid(rel), stxowner)) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 97a9725df75c8..03dfd2e7fa667 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -398,8 +398,7 @@ static void ATRewriteTables(AlterTableStmt *parsetree, AlterTableUtilityContext *context); static void ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode); static AlteredTableInfo *ATGetQueueEntry(List **wqueue, Relation rel); -static void ATSimplePermissions(Relation rel, int allowed_targets); -static void ATWrongRelkindError(Relation rel, int allowed_targets); +static void ATSimplePermissions(AlterTableType cmdtype, Relation rel, int allowed_targets); static void ATSimpleRecursion(List **wqueue, Relation rel, AlterTableCmd *cmd, bool recurse, LOCKMODE lockmode, AlterTableUtilityContext *context); @@ -3394,8 +3393,9 @@ renameatt_check(Oid myrelid, Form_pg_class classform, bool recursing) relkind != RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, view, materialized view, composite type, index, or foreign table", - NameStr(classform->relname)))); + errmsg("cannot rename columns of relation \"%s\"", + NameStr(classform->relname)), + errdetail_relkind_not_supported(relkind))); /* * permissions checking. only the owner of a class can change its schema. @@ -4422,7 +4422,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, switch (cmd->subtype) { case AT_AddColumn: /* ADD COLUMN */ - ATSimplePermissions(rel, + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_COMPOSITE_TYPE | ATT_FOREIGN_TABLE); ATPrepAddColumn(wqueue, rel, recurse, recursing, false, cmd, lockmode, context); @@ -4430,7 +4430,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, pass = AT_PASS_ADD_COL; break; case AT_AddColumnToView: /* add column via CREATE OR REPLACE VIEW */ - ATSimplePermissions(rel, ATT_VIEW); + ATSimplePermissions(cmd->subtype, rel, ATT_VIEW); ATPrepAddColumn(wqueue, rel, recurse, recursing, true, cmd, lockmode, context); /* Recursion occurs during execution phase */ @@ -4444,7 +4444,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, * substitutes default values into INSERTs before it expands * rules. */ - ATSimplePermissions(rel, ATT_TABLE | ATT_VIEW | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_VIEW | ATT_FOREIGN_TABLE); ATSimpleRecursion(wqueue, rel, cmd, recurse, lockmode, context); /* No command-specific prep needed */ pass = cmd->def ? AT_PASS_ADD_OTHERCONSTR : AT_PASS_DROP; @@ -4452,77 +4452,77 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, case AT_CookedColumnDefault: /* add a pre-cooked default */ /* This is currently used only in CREATE TABLE */ /* (so the permission check really isn't necessary) */ - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_FOREIGN_TABLE); /* This command never recurses */ pass = AT_PASS_ADD_OTHERCONSTR; break; case AT_AddIdentity: - ATSimplePermissions(rel, ATT_TABLE | ATT_VIEW | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_VIEW | ATT_FOREIGN_TABLE); /* This command never recurses */ pass = AT_PASS_ADD_OTHERCONSTR; break; case AT_SetIdentity: - ATSimplePermissions(rel, ATT_TABLE | ATT_VIEW | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_VIEW | ATT_FOREIGN_TABLE); /* This command never recurses */ /* This should run after AddIdentity, so do it in MISC pass */ pass = AT_PASS_MISC; break; case AT_DropIdentity: - ATSimplePermissions(rel, ATT_TABLE | ATT_VIEW | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_VIEW | ATT_FOREIGN_TABLE); /* This command never recurses */ pass = AT_PASS_DROP; break; case AT_DropNotNull: /* ALTER COLUMN DROP NOT NULL */ - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_FOREIGN_TABLE); ATPrepDropNotNull(rel, recurse, recursing); ATSimpleRecursion(wqueue, rel, cmd, recurse, lockmode, context); pass = AT_PASS_DROP; break; case AT_SetNotNull: /* ALTER COLUMN SET NOT NULL */ - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_FOREIGN_TABLE); /* Need command-specific recursion decision */ ATPrepSetNotNull(wqueue, rel, cmd, recurse, recursing, lockmode, context); pass = AT_PASS_COL_ATTRS; break; case AT_CheckNotNull: /* check column is already marked NOT NULL */ - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_FOREIGN_TABLE); ATSimpleRecursion(wqueue, rel, cmd, recurse, lockmode, context); /* No command-specific prep needed */ pass = AT_PASS_COL_ATTRS; break; case AT_DropExpression: /* ALTER COLUMN DROP EXPRESSION */ - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_FOREIGN_TABLE); ATSimpleRecursion(wqueue, rel, cmd, recurse, lockmode, context); ATPrepDropExpression(rel, cmd, recurse, recursing, lockmode); pass = AT_PASS_DROP; break; case AT_SetStatistics: /* ALTER COLUMN SET STATISTICS */ - ATSimplePermissions(rel, ATT_TABLE | ATT_MATVIEW | ATT_INDEX | ATT_PARTITIONED_INDEX | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_MATVIEW | ATT_INDEX | ATT_PARTITIONED_INDEX | ATT_FOREIGN_TABLE); ATSimpleRecursion(wqueue, rel, cmd, recurse, lockmode, context); /* No command-specific prep needed */ pass = AT_PASS_MISC; break; case AT_SetOptions: /* ALTER COLUMN SET ( options ) */ case AT_ResetOptions: /* ALTER COLUMN RESET ( options ) */ - ATSimplePermissions(rel, ATT_TABLE | ATT_MATVIEW | ATT_INDEX | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_MATVIEW | ATT_INDEX | ATT_FOREIGN_TABLE); /* This command never recurses */ pass = AT_PASS_MISC; break; case AT_SetStorage: /* ALTER COLUMN SET STORAGE */ - ATSimplePermissions(rel, ATT_TABLE | ATT_MATVIEW | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_MATVIEW | ATT_FOREIGN_TABLE); ATSimpleRecursion(wqueue, rel, cmd, recurse, lockmode, context); /* No command-specific prep needed */ pass = AT_PASS_MISC; break; case AT_SetCompression: /* ALTER COLUMN SET COMPRESSION */ - ATSimplePermissions(rel, ATT_TABLE | ATT_MATVIEW); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_MATVIEW); /* This command never recurses */ /* No command-specific prep needed */ pass = AT_PASS_MISC; break; case AT_DropColumn: /* DROP COLUMN */ - ATSimplePermissions(rel, + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_COMPOSITE_TYPE | ATT_FOREIGN_TABLE); ATPrepDropColumn(wqueue, rel, recurse, recursing, cmd, lockmode, context); @@ -4530,13 +4530,13 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, pass = AT_PASS_DROP; break; case AT_AddIndex: /* ADD INDEX */ - ATSimplePermissions(rel, ATT_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE); /* This command never recurses */ /* No command-specific prep needed */ pass = AT_PASS_ADD_INDEX; break; case AT_AddConstraint: /* ADD CONSTRAINT */ - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_FOREIGN_TABLE); /* Recursion occurs during execution phase */ /* No command-specific prep needed except saving recurse flag */ if (recurse) @@ -4544,13 +4544,13 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, pass = AT_PASS_ADD_CONSTR; break; case AT_AddIndexConstraint: /* ADD CONSTRAINT USING INDEX */ - ATSimplePermissions(rel, ATT_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE); /* This command never recurses */ /* No command-specific prep needed */ pass = AT_PASS_ADD_INDEXCONSTR; break; case AT_DropConstraint: /* DROP CONSTRAINT */ - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_FOREIGN_TABLE); ATCheckPartitionsNotInUse(rel, lockmode); /* Other recursion occurs during execution phase */ /* No command-specific prep needed except saving recurse flag */ @@ -4559,7 +4559,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, pass = AT_PASS_DROP; break; case AT_AlterColumnType: /* ALTER COLUMN TYPE */ - ATSimplePermissions(rel, + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_COMPOSITE_TYPE | ATT_FOREIGN_TABLE); /* See comments for ATPrepAlterColumnType */ cmd = ATParseTransformCmd(wqueue, tab, rel, cmd, recurse, lockmode, @@ -4571,7 +4571,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, pass = AT_PASS_ALTER_TYPE; break; case AT_AlterColumnGenericOptions: - ATSimplePermissions(rel, ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_FOREIGN_TABLE); /* This command never recurses */ /* No command-specific prep needed */ pass = AT_PASS_MISC; @@ -4583,13 +4583,13 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, break; case AT_ClusterOn: /* CLUSTER ON */ case AT_DropCluster: /* SET WITHOUT CLUSTER */ - ATSimplePermissions(rel, ATT_TABLE | ATT_MATVIEW); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_MATVIEW); /* These commands never recurse */ /* No command-specific prep needed */ pass = AT_PASS_MISC; break; case AT_SetLogged: /* SET LOGGED */ - ATSimplePermissions(rel, ATT_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE); if (tab->chgPersistence) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -4604,7 +4604,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, pass = AT_PASS_MISC; break; case AT_SetUnLogged: /* SET UNLOGGED */ - ATSimplePermissions(rel, ATT_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE); if (tab->chgPersistence) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -4619,11 +4619,11 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, pass = AT_PASS_MISC; break; case AT_DropOids: /* SET WITHOUT OIDS */ - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_FOREIGN_TABLE); pass = AT_PASS_DROP; break; case AT_SetTableSpace: /* SET TABLESPACE */ - ATSimplePermissions(rel, ATT_TABLE | ATT_MATVIEW | ATT_INDEX | + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_MATVIEW | ATT_INDEX | ATT_PARTITIONED_INDEX); /* This command never recurses */ ATPrepSetTableSpace(tab, rel, cmd->name, lockmode); @@ -4632,30 +4632,30 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, case AT_SetRelOptions: /* SET (...) */ case AT_ResetRelOptions: /* RESET (...) */ case AT_ReplaceRelOptions: /* reset them all, then set just these */ - ATSimplePermissions(rel, ATT_TABLE | ATT_VIEW | ATT_MATVIEW | ATT_INDEX); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_VIEW | ATT_MATVIEW | ATT_INDEX); /* This command never recurses */ /* No command-specific prep needed */ pass = AT_PASS_MISC; break; case AT_AddInherit: /* INHERIT */ - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_FOREIGN_TABLE); /* This command never recurses */ ATPrepAddInherit(rel); pass = AT_PASS_MISC; break; case AT_DropInherit: /* NO INHERIT */ - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_FOREIGN_TABLE); /* This command never recurses */ /* No command-specific prep needed */ pass = AT_PASS_MISC; break; case AT_AlterConstraint: /* ALTER CONSTRAINT */ - ATSimplePermissions(rel, ATT_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE); /* Recursion occurs during execution phase */ pass = AT_PASS_MISC; break; case AT_ValidateConstraint: /* VALIDATE CONSTRAINT */ - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_FOREIGN_TABLE); /* Recursion occurs during execution phase */ /* No command-specific prep needed except saving recurse flag */ if (recurse) @@ -4663,7 +4663,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, pass = AT_PASS_MISC; break; case AT_ReplicaIdentity: /* REPLICA IDENTITY ... */ - ATSimplePermissions(rel, ATT_TABLE | ATT_MATVIEW); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_MATVIEW); pass = AT_PASS_MISC; /* This command never recurses */ /* No command-specific prep needed */ @@ -4676,7 +4676,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, case AT_DisableTrig: /* DISABLE TRIGGER variants */ case AT_DisableTrigAll: case AT_DisableTrigUser: - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_FOREIGN_TABLE); if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) ATSimpleRecursion(wqueue, rel, cmd, recurse, lockmode, context); pass = AT_PASS_MISC; @@ -4691,28 +4691,28 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, case AT_DisableRowSecurity: case AT_ForceRowSecurity: case AT_NoForceRowSecurity: - ATSimplePermissions(rel, ATT_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE); /* These commands never recurse */ /* No command-specific prep needed */ pass = AT_PASS_MISC; break; case AT_GenericOptions: - ATSimplePermissions(rel, ATT_FOREIGN_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_FOREIGN_TABLE); /* No command-specific prep needed */ pass = AT_PASS_MISC; break; case AT_AttachPartition: - ATSimplePermissions(rel, ATT_TABLE | ATT_PARTITIONED_INDEX); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_PARTITIONED_INDEX); /* No command-specific prep needed */ pass = AT_PASS_MISC; break; case AT_DetachPartition: - ATSimplePermissions(rel, ATT_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE); /* No command-specific prep needed */ pass = AT_PASS_MISC; break; case AT_DetachPartitionFinalize: - ATSimplePermissions(rel, ATT_TABLE); + ATSimplePermissions(cmd->subtype, rel, ATT_TABLE); /* No command-specific prep needed */ pass = AT_PASS_MISC; break; @@ -5941,6 +5941,145 @@ ATGetQueueEntry(List **wqueue, Relation rel) return tab; } +static const char * +alter_table_type_to_string(AlterTableType cmdtype) +{ + switch (cmdtype) + { + case AT_AddColumn: + case AT_AddColumnRecurse: + case AT_AddColumnToView: + return "ADD COLUMN"; + case AT_ColumnDefault: + case AT_CookedColumnDefault: + return "ALTER COLUMN ... SET DEFAULT"; + case AT_DropNotNull: + return "ALTER COLUMN ... DROP NOT NULL"; + case AT_SetNotNull: + return "ALTER COLUMN ... SET NOT NULL"; + case AT_DropExpression: + return "ALTER COLUMN ... DROP EXPRESSION"; + case AT_CheckNotNull: + return NULL; /* not real grammar */ + case AT_SetStatistics: + return "ALTER COLUMN ... SET STATISTICS"; + case AT_SetOptions: + return "ALTER COLUMN ... SET"; + case AT_ResetOptions: + return "ALTER COLUMN ... RESET"; + case AT_SetStorage: + return "ALTER COLUMN ... SET STORAGE"; + case AT_SetCompression: + return "ALTER COLUMN ... SET COMPRESSION"; + case AT_DropColumn: + case AT_DropColumnRecurse: + return "DROP COLUMN"; + case AT_AddIndex: + case AT_ReAddIndex: + return NULL; /* not real grammar */ + case AT_AddConstraint: + case AT_AddConstraintRecurse: + case AT_ReAddConstraint: + case AT_ReAddDomainConstraint: + case AT_AddIndexConstraint: + return "ADD CONSTRAINT"; + case AT_AlterConstraint: + return "ALTER CONSTRAINT"; + case AT_ValidateConstraint: + case AT_ValidateConstraintRecurse: + return "VALIDATE CONSTRAINT"; + case AT_DropConstraint: + case AT_DropConstraintRecurse: + return "DROP CONSTRAINT"; + case AT_ReAddComment: + return NULL; /* not real grammar */ + case AT_AlterColumnType: + return "ALTER COLUMN ... SET DATA TYPE"; + case AT_AlterColumnGenericOptions: + return "ALTER COLUMN ... OPTIONS"; + case AT_ChangeOwner: + return "OWNER TO"; + case AT_ClusterOn: + return "CLUSTER ON"; + case AT_DropCluster: + return "SET WITHOUT CLUSTER"; + case AT_SetLogged: + return "SET LOGGED"; + case AT_SetUnLogged: + return "SET UNLOGGED"; + case AT_DropOids: + return "SET WITHOUT OIDS"; + case AT_SetTableSpace: + return "SET TABLESPACE"; + case AT_SetRelOptions: + return "SET"; + case AT_ResetRelOptions: + return "RESET"; + case AT_ReplaceRelOptions: + return NULL; /* not real grammar */ + case AT_EnableTrig: + return "ENABLE TRIGGER"; + case AT_EnableAlwaysTrig: + return "ENABLE ALWAYS TRIGGER"; + case AT_EnableReplicaTrig: + return "ENABLE REPLICA TRIGGER"; + case AT_DisableTrig: + return "DISABLE TRIGGER"; + case AT_EnableTrigAll: + return "ENABLE TRIGGER ALL"; + case AT_DisableTrigAll: + return "DISABLE TRIGGER ALL"; + case AT_EnableTrigUser: + return "ENABLE TRIGGER USER"; + case AT_DisableTrigUser: + return "DISABLE TRIGGER USER"; + case AT_EnableRule: + return "ENABLE RULE"; + case AT_EnableAlwaysRule: + return "ENABLE ALWAYS RULE"; + case AT_EnableReplicaRule: + return "ENABLE REPLICA RULE"; + case AT_DisableRule: + return "DISABLE RULE"; + case AT_AddInherit: + return "INHERIT"; + case AT_DropInherit: + return "NO INHERIT"; + case AT_AddOf: + return "OF"; + case AT_DropOf: + return "NOT OF"; + case AT_ReplicaIdentity: + return "REPLICA IDENTITY"; + case AT_EnableRowSecurity: + return "ENABLE ROW SECURITY"; + case AT_DisableRowSecurity: + return "DISABLE ROW SECURITY"; + case AT_ForceRowSecurity: + return "FORCE ROW SECURITY"; + case AT_NoForceRowSecurity: + return "NO FORCE ROW SECURITY"; + case AT_GenericOptions: + return "OPTIONS"; + case AT_AttachPartition: + return "ATTACH PARTITION"; + case AT_DetachPartition: + return "DETACH PARTITION"; + case AT_DetachPartitionFinalize: + return "DETACH PARTITION ... FINALIZE"; + case AT_AddIdentity: + return "ALTER COLUMN ... ADD IDENTITY"; + case AT_SetIdentity: + return "ALTER COLUMN ... SET"; + case AT_DropIdentity: + return "ALTER COLUMN ... DROP IDENTITY"; + case AT_ReAddStatistics: + return NULL; /* not real grammar */ + } + + return NULL; +} + /* * ATSimplePermissions * @@ -5949,7 +6088,7 @@ ATGetQueueEntry(List **wqueue, Relation rel) * - Ensure that it is not a system table */ static void -ATSimplePermissions(Relation rel, int allowed_targets) +ATSimplePermissions(AlterTableType cmdtype, Relation rel, int allowed_targets) { int actual_target; @@ -5984,7 +6123,21 @@ ATSimplePermissions(Relation rel, int allowed_targets) /* Wrong target type? */ if ((actual_target & allowed_targets) == 0) - ATWrongRelkindError(rel, allowed_targets); + { + const char *action_str = alter_table_type_to_string(cmdtype); + + if (action_str) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + /* translator: %s is a group of some SQL keywords */ + errmsg("ALTER action %s cannot be performed on relation \"%s\"", + action_str, RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); + else + /* internal error? */ + elog(ERROR, "invalid ALTER action attempted on relation \"%s\"", + RelationGetRelationName(rel)); + } /* Permissions checks */ if (!pg_class_ownercheck(RelationGetRelid(rel), GetUserId())) @@ -5998,66 +6151,6 @@ ATSimplePermissions(Relation rel, int allowed_targets) RelationGetRelationName(rel)))); } -/* - * ATWrongRelkindError - * - * Throw an error when a relation has been determined to be of the wrong - * type. - */ -static void -ATWrongRelkindError(Relation rel, int allowed_targets) -{ - char *msg; - - switch (allowed_targets) - { - case ATT_TABLE: - msg = _("\"%s\" is not a table"); - break; - case ATT_TABLE | ATT_VIEW: - msg = _("\"%s\" is not a table or view"); - break; - case ATT_TABLE | ATT_VIEW | ATT_FOREIGN_TABLE: - msg = _("\"%s\" is not a table, view, or foreign table"); - break; - case ATT_TABLE | ATT_VIEW | ATT_MATVIEW | ATT_INDEX: - msg = _("\"%s\" is not a table, view, materialized view, or index"); - break; - case ATT_TABLE | ATT_MATVIEW: - msg = _("\"%s\" is not a table or materialized view"); - break; - case ATT_TABLE | ATT_MATVIEW | ATT_INDEX: - msg = _("\"%s\" is not a table, materialized view, or index"); - break; - case ATT_TABLE | ATT_MATVIEW | ATT_FOREIGN_TABLE: - msg = _("\"%s\" is not a table, materialized view, or foreign table"); - break; - case ATT_TABLE | ATT_FOREIGN_TABLE: - msg = _("\"%s\" is not a table or foreign table"); - break; - case ATT_TABLE | ATT_COMPOSITE_TYPE | ATT_FOREIGN_TABLE: - msg = _("\"%s\" is not a table, composite type, or foreign table"); - break; - case ATT_TABLE | ATT_MATVIEW | ATT_INDEX | ATT_FOREIGN_TABLE: - msg = _("\"%s\" is not a table, materialized view, index, or foreign table"); - break; - case ATT_VIEW: - msg = _("\"%s\" is not a view"); - break; - case ATT_FOREIGN_TABLE: - msg = _("\"%s\" is not a foreign table"); - break; - default: - /* shouldn't get here, add all necessary cases above */ - msg = _("\"%s\" is of the wrong type"); - break; - } - - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg(msg, RelationGetRelationName(rel)))); -} - /* * ATSimpleRecursion * @@ -6452,7 +6545,7 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, /* At top level, permission check was done in ATPrepCmd, else do it */ if (recursing) - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions((*cmd)->subtype, rel, ATT_TABLE | ATT_FOREIGN_TABLE); if (rel->rd_rel->relispartition && !recursing) ereport(ERROR, @@ -8186,7 +8279,7 @@ ATExecDropColumn(List **wqueue, Relation rel, const char *colName, /* At top level, permission check was done in ATPrepCmd, else do it */ if (recursing) - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(AT_DropColumn, rel, ATT_TABLE | ATT_FOREIGN_TABLE); /* Initialize addrs on the first invocation */ Assert(!recursing || addrs != NULL); @@ -8670,7 +8763,7 @@ ATAddCheckConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel, /* At top level, permission check was done in ATPrepCmd, else do it */ if (recursing) - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(AT_AddConstraint, rel, ATT_TABLE | ATT_FOREIGN_TABLE); /* * Call AddRelationNewConstraints to do the work, making sure it works on @@ -11286,7 +11379,7 @@ ATExecDropConstraint(Relation rel, const char *constrName, /* At top level, permission check was done in ATPrepCmd, else do it */ if (recursing) - ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(AT_DropConstraint, rel, ATT_TABLE | ATT_FOREIGN_TABLE); conrel = table_open(ConstraintRelationId, RowExclusiveLock); @@ -13205,8 +13298,9 @@ ATExecChangeOwner(Oid relationOid, Oid newOwnerId, bool recursing, LOCKMODE lock default: ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, view, sequence, or foreign table", - NameStr(tuple_class->relname)))); + errmsg("cannot change owner of relation \"%s\"", + NameStr(tuple_class->relname)), + errdetail_relkind_not_supported(tuple_class->relkind))); } /* @@ -13621,8 +13715,9 @@ ATExecSetRelOptions(Relation rel, List *defList, AlterTableType operation, default: ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, view, materialized view, index, or TOAST table", - RelationGetRelationName(rel)))); + errmsg("cannot set options for relation \"%s\"", + RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); break; } @@ -14176,7 +14271,7 @@ ATExecAddInherit(Relation child_rel, RangeVar *parent, LOCKMODE lockmode) * Must be owner of both parent and child -- child was checked by * ATSimplePermissions call in ATPrepCmd */ - ATSimplePermissions(parent_rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(AT_AddInherit, parent_rel, ATT_TABLE | ATT_FOREIGN_TABLE); /* Permanent rels cannot inherit from temporary ones */ if (parent_rel->rd_rel->relpersistence == RELPERSISTENCE_TEMP && @@ -16505,17 +16600,27 @@ RangeVarCallbackForAlterRelation(const RangeVar *rv, Oid relid, Oid oldrelid, * Don't allow ALTER TABLE .. SET SCHEMA on relations that can't be moved * to a different schema, such as indexes and TOAST tables. */ - if (IsA(stmt, AlterObjectSchemaStmt) && - relkind != RELKIND_RELATION && - relkind != RELKIND_VIEW && - relkind != RELKIND_MATVIEW && - relkind != RELKIND_SEQUENCE && - relkind != RELKIND_FOREIGN_TABLE && - relkind != RELKIND_PARTITIONED_TABLE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, view, materialized view, sequence, or foreign table", - rv->relname))); + if (IsA(stmt, AlterObjectSchemaStmt)) + { + if (relkind == RELKIND_INDEX || relkind == RELKIND_PARTITIONED_INDEX) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cannot change schema of index \"%s\"", + rv->relname), + errhint("Change the schema of the table instead."))); + else if (relkind == RELKIND_COMPOSITE_TYPE) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cannot change schema of composite type \"%s\"", + rv->relname), + errhint("Use ALTER TYPE instead."))); + else if (relkind == RELKIND_TOASTVALUE) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cannot change schema of TOAST table \"%s\"", + rv->relname), + errhint("Change the schema of the table instead."))); + } ReleaseSysCache(tuple); } @@ -17077,7 +17182,7 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd, * Must be owner of both parent and source table -- parent was checked by * ATSimplePermissions call in ATPrepCmd */ - ATSimplePermissions(attachrel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimplePermissions(AT_AttachPartition, attachrel, ATT_TABLE | ATT_FOREIGN_TABLE); /* A partition can only have one parent */ if (attachrel->rd_rel->relispartition) diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 07c73f39de84a..952c8d582a114 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -286,8 +286,9 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString, else ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table or view", - RelationGetRelationName(rel)))); + errmsg("relation \"%s\" cannot have triggers", + RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); if (!allowSystemTableMods && IsSystemRelation(rel)) ereport(ERROR, @@ -1262,8 +1263,9 @@ RemoveTriggerById(Oid trigOid) rel->rd_rel->relkind != RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, view, or foreign table", - RelationGetRelationName(rel)))); + errmsg("relation \"%s\" cannot have triggers", + RelationGetRelationName(rel)), + errdetail_relkind_not_supported(rel->rd_rel->relkind))); if (!allowSystemTableMods && IsSystemRelation(rel)) ereport(ERROR, @@ -1368,8 +1370,9 @@ RangeVarCallbackForRenameTrigger(const RangeVar *rv, Oid relid, Oid oldrelid, form->relkind != RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, view, or foreign table", - rv->relname))); + errmsg("relation \"%s\" cannot have triggers", + rv->relname), + errdetail_relkind_not_supported(form->relkind))); /* you must own the table to rename one of its triggers */ if (!pg_class_ownercheck(relid, GetUserId())) diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 81d3e7990c6b7..3afcd6b5118f1 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -976,8 +976,9 @@ transformTableLikeClause(CreateStmtContext *cxt, TableLikeClause *table_like_cla relation->rd_rel->relkind != RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, view, materialized view, composite type, or foreign table", - RelationGetRelationName(relation)))); + errmsg("relation \"%s\" is invalid in LIKE clause", + RelationGetRelationName(relation)), + errdetail_relkind_not_supported(relation->rd_rel->relkind))); cancel_parser_errposition_callback(&pcbstate); diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c index 27e4ef911c8a7..6589345ac4cbd 100644 --- a/src/backend/rewrite/rewriteDefine.c +++ b/src/backend/rewrite/rewriteDefine.c @@ -268,8 +268,9 @@ DefineQueryRewrite(const char *rulename, event_relation->rd_rel->relkind != RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table or view", - RelationGetRelationName(event_relation)))); + errmsg("relation \"%s\" cannot have rules", + RelationGetRelationName(event_relation)), + errdetail_relkind_not_supported(event_relation->rd_rel->relkind))); if (!allowSystemTableMods && IsSystemRelation(event_relation)) ereport(ERROR, @@ -935,7 +936,8 @@ RangeVarCallbackForRenameRule(const RangeVar *rv, Oid relid, Oid oldrelid, form->relkind != RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table or view", rv->relname))); + errmsg("relation \"%s\" cannot have rules", rv->relname), + errdetail_relkind_not_supported(form->relkind))); if (!allowSystemTableMods && IsSystemClass(relid, form)) ereport(ERROR, diff --git a/src/include/catalog/pg_class.h b/src/include/catalog/pg_class.h index 3458d9560617c..fef9945ed8fff 100644 --- a/src/include/catalog/pg_class.h +++ b/src/include/catalog/pg_class.h @@ -198,6 +198,7 @@ DECLARE_INDEX(pg_class_tblspc_relfilenode_index, 3455, ClassTblspcRelfilenodeInd (relkind) == RELKIND_TOASTVALUE || \ (relkind) == RELKIND_MATVIEW) +extern int errdetail_relkind_not_supported(char relkind); #endif /* EXPOSE_TO_CLIENT_CODE */ diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out index f81bdf513b6bf..8dcb00ac67a69 100644 --- a/src/test/regress/expected/alter_table.out +++ b/src/test/regress/expected/alter_table.out @@ -1087,9 +1087,11 @@ ERROR: column "bar" of relation "atacc1" does not exist -- try creating a view and altering that, should fail create view myview as select * from atacc1; alter table myview alter column test drop not null; -ERROR: "myview" is not a table or foreign table +ERROR: ALTER action ALTER COLUMN ... DROP NOT NULL cannot be performed on relation "myview" +DETAIL: This operation is not supported for views. alter table myview alter column test set not null; -ERROR: "myview" is not a table or foreign table +ERROR: ALTER action ALTER COLUMN ... SET NOT NULL cannot be performed on relation "myview" +DETAIL: This operation is not supported for views. drop view myview; drop table atacc1; -- set not null verified by constraints @@ -1387,7 +1389,8 @@ select * from myview; (0 rows) alter table myview drop d; -ERROR: "myview" is not a table, composite type, or foreign table +ERROR: ALTER action DROP COLUMN cannot be performed on relation "myview" +DETAIL: This operation is not supported for views. drop view myview; -- test some commands to make sure they fail on the dropped column analyze atacc1(a); diff --git a/src/test/regress/expected/create_table_like.out b/src/test/regress/expected/create_table_like.out index 4dc5e6aa5fb89..7ad5fafe93688 100644 --- a/src/test/regress/expected/create_table_like.out +++ b/src/test/regress/expected/create_table_like.out @@ -504,9 +504,10 @@ DROP TABLE noinh_con_copy, noinh_con_copy1; CREATE TABLE ctlt4 (a int, b text); CREATE SEQUENCE ctlseq1; CREATE TABLE ctlt10 (LIKE ctlseq1); -- fail -ERROR: "ctlseq1" is not a table, view, materialized view, composite type, or foreign table +ERROR: relation "ctlseq1" is invalid in LIKE clause LINE 1: CREATE TABLE ctlt10 (LIKE ctlseq1); ^ +DETAIL: This operation is not supported for sequences. CREATE VIEW ctlv1 AS SELECT * FROM ctlt4; CREATE TABLE ctlt11 (LIKE ctlv1); CREATE TABLE ctlt11a (LIKE ctlv1 INCLUDING ALL); diff --git a/src/test/regress/expected/foreign_data.out b/src/test/regress/expected/foreign_data.out index 5385f98a0fe27..809d40a79a99c 100644 --- a/src/test/regress/expected/foreign_data.out +++ b/src/test/regress/expected/foreign_data.out @@ -740,7 +740,8 @@ FDW options: (delimiter ',', quote '"', "be quoted" 'value') (1 row) CREATE INDEX id_ft1_c2 ON ft1 (c2); -- ERROR -ERROR: cannot create index on foreign table "ft1" +ERROR: cannot create index on relation "ft1" +DETAIL: This operation is not supported for foreign tables. SELECT * FROM ft1; -- ERROR ERROR: foreign-data wrapper "dummy" has no handler EXPLAIN SELECT * FROM ft1; -- ERROR @@ -864,7 +865,8 @@ LINE 1: ALTER FOREIGN TABLE ft1 ADD PRIMARY KEY (c7); ^ ALTER FOREIGN TABLE ft1 ADD CONSTRAINT ft1_c9_check CHECK (c9 < 0) NOT VALID; ALTER FOREIGN TABLE ft1 ALTER CONSTRAINT ft1_c9_check DEFERRABLE; -- ERROR -ERROR: "ft1" is not a table +ERROR: ALTER action ALTER CONSTRAINT cannot be performed on relation "ft1" +DETAIL: This operation is not supported for foreign tables. ALTER FOREIGN TABLE ft1 DROP CONSTRAINT ft1_c9_check; ALTER FOREIGN TABLE ft1 DROP CONSTRAINT no_const; -- ERROR ERROR: constraint "no_const" of relation "ft1" does not exist diff --git a/src/test/regress/expected/indexing.out b/src/test/regress/expected/indexing.out index c93f4470c92ca..193f7801912df 100644 --- a/src/test/regress/expected/indexing.out +++ b/src/test/regress/expected/indexing.out @@ -137,7 +137,8 @@ select relname, relpartbound from pg_class (2 rows) alter table idxpart_c detach partition idxpart1_c; -ERROR: "idxpart_c" is not a table +ERROR: ALTER action DETACH PARTITION cannot be performed on relation "idxpart_c" +DETAIL: This operation is not supported for partitioned indexes. drop table idxpart; -- If a partition already has an index, don't create a duplicative one create table idxpart (a int, b int) partition by range (a, b); diff --git a/src/test/regress/expected/sequence.out b/src/test/regress/expected/sequence.out index 8b928b28882df..71c2b0f1dff42 100644 --- a/src/test/regress/expected/sequence.out +++ b/src/test/regress/expected/sequence.out @@ -21,7 +21,8 @@ CREATE SEQUENCE sequence_testx OWNED BY nobody; -- nonsense word ERROR: invalid OWNED BY option HINT: Specify OWNED BY table.column or OWNED BY NONE. CREATE SEQUENCE sequence_testx OWNED BY pg_class_oid_index.oid; -- not a table -ERROR: referenced relation "pg_class_oid_index" is not a table or foreign table +ERROR: sequence cannot be owned by relation "pg_class_oid_index" +DETAIL: This operation is not supported for indexes. CREATE SEQUENCE sequence_testx OWNED BY pg_class.relname; -- not same schema ERROR: sequence must be in same schema as table it is linked to CREATE TABLE sequence_test_table (a int); diff --git a/src/test/regress/expected/stats_ext.out b/src/test/regress/expected/stats_ext.out index 8c214d8dfc557..62b05c79f9eb5 100644 --- a/src/test/regress/expected/stats_ext.out +++ b/src/test/regress/expected/stats_ext.out @@ -211,14 +211,18 @@ CREATE TABLE tststats.pt (a int, b int, c text) PARTITION BY RANGE (a, b); CREATE TABLE tststats.pt1 PARTITION OF tststats.pt FOR VALUES FROM (-10, -10) TO (10, 10); CREATE STATISTICS tststats.s1 ON a, b FROM tststats.t; CREATE STATISTICS tststats.s2 ON a, b FROM tststats.ti; -ERROR: relation "ti" is not a table, foreign table, or materialized view +ERROR: cannot define statistics for relation "ti" +DETAIL: This operation is not supported for indexes. CREATE STATISTICS tststats.s3 ON a, b FROM tststats.s; -ERROR: relation "s" is not a table, foreign table, or materialized view +ERROR: cannot define statistics for relation "s" +DETAIL: This operation is not supported for sequences. CREATE STATISTICS tststats.s4 ON a, b FROM tststats.v; -ERROR: relation "v" is not a table, foreign table, or materialized view +ERROR: cannot define statistics for relation "v" +DETAIL: This operation is not supported for views. CREATE STATISTICS tststats.s5 ON a, b FROM tststats.mv; CREATE STATISTICS tststats.s6 ON a, b FROM tststats.ty; -ERROR: relation "ty" is not a table, foreign table, or materialized view +ERROR: cannot define statistics for relation "ty" +DETAIL: This operation is not supported for composite types. CREATE STATISTICS tststats.s7 ON a, b FROM tststats.f; CREATE STATISTICS tststats.s8 ON a, b FROM tststats.pt; CREATE STATISTICS tststats.s9 ON a, b FROM tststats.pt1; From 387925893edf2a3a30a8ddf2c6474d8a7eb056a5 Mon Sep 17 00:00:00 2001 From: Daniel Gustafsson Date: Thu, 8 Jul 2021 12:45:09 +0200 Subject: [PATCH 622/671] Fix typos in pgstat.c, reorderbuffer.c and pathnodes.h Reviewed-by: Thomas Munro Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/50250765-5B87-4AD7-9770-7FCED42A6175@yesql.se --- src/backend/postmaster/pgstat.c | 6 +++--- src/backend/replication/logical/reorderbuffer.c | 2 +- src/include/nodes/pathnodes.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index ce8888cc30074..11702f2a8040a 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -134,7 +134,7 @@ PgStat_MsgWal WalStats; /* * WAL usage counters saved from pgWALUsage at the previous call to * pgstat_send_wal(). This is used to calculate how much WAL usage - * happens between pgstat_send_wal() calls, by substracting + * happens between pgstat_send_wal() calls, by subtracting * the previous counters from the current ones. */ static WalUsage prevWalUsage; @@ -2929,7 +2929,7 @@ pgstat_initialize(void) { /* * Initialize prevWalUsage with pgWalUsage so that pgstat_send_wal() can - * calculate how much pgWalUsage counters are increased by substracting + * calculate how much pgWalUsage counters are increased by subtracting * prevWalUsage from pgWalUsage. */ prevWalUsage = pgWalUsage; @@ -3105,7 +3105,7 @@ pgstat_send_wal(bool force) /* * Calculate how much WAL usage counters were increased by - * substracting the previous counters from the current ones. Fill the + * subtracting the previous counters from the current ones. Fill the * results in WAL stats message. */ MemSet(&walusage, 0, sizeof(WalUsage)); diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index b8c5e2a44ecf5..1b4f4a528aafd 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -1545,7 +1545,7 @@ ReorderBufferCleanupTXN(ReorderBuffer *rb, ReorderBufferTXN *txn) * streaming or decoding them at PREPARE. Keep the remaining info - * transactions, tuplecids, invalidations and snapshots. * - * We additionaly remove tuplecids after decoding the transaction at prepare + * We additionally remove tuplecids after decoding the transaction at prepare * time as we only need to perform invalidation at rollback or commit prepared. * * 'txn_prepared' indicates that we have decoded the transaction at prepare diff --git a/src/include/nodes/pathnodes.h b/src/include/nodes/pathnodes.h index b7b2817a5de85..bebf774818fa6 100644 --- a/src/include/nodes/pathnodes.h +++ b/src/include/nodes/pathnodes.h @@ -1350,7 +1350,7 @@ typedef struct TidPath } TidPath; /* - * TidRangePath represents a scan by a continguous range of TIDs + * TidRangePath represents a scan by a contiguous range of TIDs * * tidrangequals is an implicitly AND'ed list of qual expressions of the form * "CTID relop pseudoconstant", where relop is one of >,>=,<,<=. From 55fe609387685de1c754332e260b2d0e17d257dc Mon Sep 17 00:00:00 2001 From: David Rowley Date: Fri, 9 Jul 2021 14:04:30 +1200 Subject: [PATCH 623/671] Fix incorrect return value in pg_size_pretty(bigint) Due to how pg_size_pretty(bigint) was implemented, it's possible that when given a negative number of bytes that the returning value would not match the equivalent positive return value when given the equivalent positive number of bytes. This was due to two separate issues. 1. The function used bit shifting to convert the number of bytes into larger units. The rounding performed by bit shifting is not the same as dividing. For example -3 >> 1 = -2, but -3 / 2 = -1. These two operations are only equivalent with positive numbers. 2. The half_rounded() macro rounded towards positive infinity. This meant that negative numbers rounded towards zero and positive numbers rounded away from zero. Here we fix #1 by dividing the values instead of bit shifting. We fix #2 by adjusting the half_rounded macro always to round away from zero. Additionally, adjust the pg_size_pretty(numeric) function to be more explicit that it's using division rather than bit shifting. A casual observer might have believed bit shifting was used due to a static function being named numeric_shift_right. However, that function was calculating the divisor from the number of bits and performed division. Here we make that more clear. This change is just cosmetic and does not affect the return value of the numeric version of the function. Here we also add a set of regression tests both versions of pg_size_pretty() which test the values directly before and after the function switches to the next unit. This bug was introduced in 8a1fab36a. Prior to that negative values were always displayed in bytes. Author: Dean Rasheed, David Rowley Discussion: https://postgr.es/m/CAEZATCXnNW4HsmZnxhfezR5FuiGgp+mkY4AzcL5eRGO4fuadWg@mail.gmail.com Backpatch-through: 9.6, where the bug was introduced. --- src/backend/utils/adt/dbsize.c | 37 +++++++++++++----------- src/test/regress/expected/dbsize.out | 42 ++++++++++++++++++++++++++++ src/test/regress/sql/dbsize.sql | 16 +++++++++++ 3 files changed, 79 insertions(+), 16 deletions(-) diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c index 9c39e7d3b343a..9de2ed09d994a 100644 --- a/src/backend/utils/adt/dbsize.c +++ b/src/backend/utils/adt/dbsize.c @@ -31,8 +31,8 @@ #include "utils/relmapper.h" #include "utils/syscache.h" -/* Divide by two and round towards positive infinity. */ -#define half_rounded(x) (((x) + ((x) < 0 ? 0 : 1)) / 2) +/* Divide by two and round away from zero */ +#define half_rounded(x) (((x) + ((x) < 0 ? -1 : 1)) / 2) /* Return physical size of directory contents, or 0 if dir doesn't exist */ static int64 @@ -542,25 +542,29 @@ pg_size_pretty(PG_FUNCTION_ARGS) snprintf(buf, sizeof(buf), INT64_FORMAT " bytes", size); else { - size >>= 9; /* keep one extra bit for rounding */ + /* + * We use divide instead of bit shifting so that behavior matches for + * both positive and negative size values. + */ + size /= (1 << 9); /* keep one extra bit for rounding */ if (Abs(size) < limit2) snprintf(buf, sizeof(buf), INT64_FORMAT " kB", half_rounded(size)); else { - size >>= 10; + size /= (1 << 10); if (Abs(size) < limit2) snprintf(buf, sizeof(buf), INT64_FORMAT " MB", half_rounded(size)); else { - size >>= 10; + size /= (1 << 10); if (Abs(size) < limit2) snprintf(buf, sizeof(buf), INT64_FORMAT " GB", half_rounded(size)); else { - size >>= 10; + size /= (1 << 10); snprintf(buf, sizeof(buf), INT64_FORMAT " TB", half_rounded(size)); } @@ -621,13 +625,13 @@ numeric_half_rounded(Numeric n) } static Numeric -numeric_shift_right(Numeric n, unsigned count) +numeric_truncated_divide(Numeric n, int64 divisor) { Datum d = NumericGetDatum(n); Datum divisor_numeric; Datum result; - divisor_numeric = NumericGetDatum(int64_to_numeric(((int64) 1) << count)); + divisor_numeric = NumericGetDatum(int64_to_numeric(divisor)); result = DirectFunctionCall2(numeric_div_trunc, d, divisor_numeric); return DatumGetNumeric(result); } @@ -650,8 +654,8 @@ pg_size_pretty_numeric(PG_FUNCTION_ARGS) else { /* keep one extra bit for rounding */ - /* size >>= 9 */ - size = numeric_shift_right(size, 9); + /* size /= (1 << 9) */ + size = numeric_truncated_divide(size, 1 << 9); if (numeric_is_less(numeric_absolute(size), limit2)) { @@ -660,8 +664,9 @@ pg_size_pretty_numeric(PG_FUNCTION_ARGS) } else { - /* size >>= 10 */ - size = numeric_shift_right(size, 10); + /* size /= (1 << 10) */ + size = numeric_truncated_divide(size, 1 << 10); + if (numeric_is_less(numeric_absolute(size), limit2)) { size = numeric_half_rounded(size); @@ -669,8 +674,8 @@ pg_size_pretty_numeric(PG_FUNCTION_ARGS) } else { - /* size >>= 10 */ - size = numeric_shift_right(size, 10); + /* size /= (1 << 10) */ + size = numeric_truncated_divide(size, 1 << 10); if (numeric_is_less(numeric_absolute(size), limit2)) { @@ -679,8 +684,8 @@ pg_size_pretty_numeric(PG_FUNCTION_ARGS) } else { - /* size >>= 10 */ - size = numeric_shift_right(size, 10); + /* size /= (1 << 10) */ + size = numeric_truncated_divide(size, 1 << 10); size = numeric_half_rounded(size); result = psprintf("%s TB", numeric_to_cstring(size)); } diff --git a/src/test/regress/expected/dbsize.out b/src/test/regress/expected/dbsize.out index e901a2c92a1fc..29804aee8b801 100644 --- a/src/test/regress/expected/dbsize.out +++ b/src/test/regress/expected/dbsize.out @@ -35,6 +35,48 @@ SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM 1000000000000000.5 | 909 TB | -909 TB (12 rows) +-- test where units change up +SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM + (VALUES (10239::bigint), (10240::bigint), + (10485247::bigint), (10485248::bigint), + (10736893951::bigint), (10736893952::bigint), + (10994579406847::bigint), (10994579406848::bigint), + (11258449312612351::bigint), (11258449312612352::bigint)) x(size); + size | pg_size_pretty | pg_size_pretty +-------------------+----------------+---------------- + 10239 | 10239 bytes | -10239 bytes + 10240 | 10 kB | -10 kB + 10485247 | 10239 kB | -10239 kB + 10485248 | 10 MB | -10 MB + 10736893951 | 10239 MB | -10239 MB + 10736893952 | 10 GB | -10 GB + 10994579406847 | 10239 GB | -10239 GB + 10994579406848 | 10 TB | -10 TB + 11258449312612351 | 10239 TB | -10239 TB + 11258449312612352 | 10240 TB | -10240 TB +(10 rows) + +SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM + (VALUES (10239::numeric), (10240::numeric), + (10485247::numeric), (10485248::numeric), + (10736893951::numeric), (10736893952::numeric), + (10994579406847::numeric), (10994579406848::numeric), + (11258449312612351::numeric), (11258449312612352::numeric)) x(size); + size | pg_size_pretty | pg_size_pretty +-------------------+----------------+---------------- + 10239 | 10239 bytes | -10239 bytes + 10240 | 10 kB | -10 kB + 10485247 | 10239 kB | -10239 kB + 10485248 | 10 MB | -10 MB + 10736893951 | 10239 MB | -10239 MB + 10736893952 | 10 GB | -10 GB + 10994579406847 | 10239 GB | -10239 GB + 10994579406848 | 10 TB | -10 TB + 11258449312612351 | 10239 TB | -10239 TB + 11258449312612352 | 10240 TB | -10240 TB +(10 rows) + +-- pg_size_bytes() tests SELECT size, pg_size_bytes(size) FROM (VALUES ('1'), ('123bytes'), ('1kB'), ('1MB'), (' 1 GB'), ('1.5 GB '), ('1TB'), ('3000 TB'), ('1e6 MB')) x(size); diff --git a/src/test/regress/sql/dbsize.sql b/src/test/regress/sql/dbsize.sql index d10a4d7f68a4f..6a45c5eb1cfd5 100644 --- a/src/test/regress/sql/dbsize.sql +++ b/src/test/regress/sql/dbsize.sql @@ -11,6 +11,22 @@ SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM (1000000000.5::numeric), (1000000000000.5::numeric), (1000000000000000.5::numeric)) x(size); +-- test where units change up +SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM + (VALUES (10239::bigint), (10240::bigint), + (10485247::bigint), (10485248::bigint), + (10736893951::bigint), (10736893952::bigint), + (10994579406847::bigint), (10994579406848::bigint), + (11258449312612351::bigint), (11258449312612352::bigint)) x(size); + +SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM + (VALUES (10239::numeric), (10240::numeric), + (10485247::numeric), (10485248::numeric), + (10736893951::numeric), (10736893952::numeric), + (10994579406847::numeric), (10994579406848::numeric), + (11258449312612351::numeric), (11258449312612352::numeric)) x(size); + +-- pg_size_bytes() tests SELECT size, pg_size_bytes(size) FROM (VALUES ('1'), ('123bytes'), ('1kB'), ('1MB'), (' 1 GB'), ('1.5 GB '), ('1TB'), ('3000 TB'), ('1e6 MB')) x(size); From 56ff8b29919f75a078969766393b9e20871a75c8 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Fri, 9 Jul 2021 16:29:02 +1200 Subject: [PATCH 624/671] Use a lookup table for units in pg_size_pretty and pg_size_bytes We've grown 2 versions of pg_size_pretty over the years, one for BIGINT and one for NUMERIC. Both should output the same, but keeping them in sync is harder than needed due to neither function sharing a source of truth about which units to use and how to transition to the next largest unit. Here we add a static array which defines the units that we recognize and have both pg_size_pretty and pg_size_pretty_numeric use it. This will make adding any units in the future a very simple task. The table contains all information required to allow us to also modify pg_size_bytes to use the lookup table, so adjust that too. There are no behavioral changes here. Author: David Rowley Reviewed-by: Dean Rasheed, Tom Lane, David Christensen Discussion: https://postgr.es/m/CAApHDvru1F7qsEVL-iOHeezJ+5WVxXnyD_Jo9nht+Eh85ekK-Q@mail.gmail.com --- src/backend/utils/adt/dbsize.c | 170 ++++++++++++++++----------------- 1 file changed, 80 insertions(+), 90 deletions(-) diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c index 9de2ed09d994a..6c381b02b7ec6 100644 --- a/src/backend/utils/adt/dbsize.c +++ b/src/backend/utils/adt/dbsize.c @@ -34,6 +34,27 @@ /* Divide by two and round away from zero */ #define half_rounded(x) (((x) + ((x) < 0 ? -1 : 1)) / 2) +/* Units used in pg_size_pretty functions. All units must be powers of 2 */ +struct size_pretty_unit +{ + const char *name; /* bytes, kB, MB, GB etc */ + uint32 limit; /* upper limit, prior to half rounding after + * converting to this unit. */ + bool round; /* do half rounding for this unit */ + uint8 unitbits; /* (1 << unitbits) bytes to make 1 of this + * unit */ +}; + +/* When adding units here also update the error message in pg_size_bytes */ +static const struct size_pretty_unit size_pretty_units[] = { + {"bytes", 10 * 1024, false, 0}, + {"kB", 20 * 1024 - 1, true, 10}, + {"MB", 20 * 1024 - 1, true, 20}, + {"GB", 20 * 1024 - 1, true, 30}, + {"TB", 20 * 1024 - 1, true, 40}, + {NULL, 0, false, 0} +}; + /* Return physical size of directory contents, or 0 if dir doesn't exist */ static int64 db_dir_size(const char *path) @@ -535,41 +556,34 @@ pg_size_pretty(PG_FUNCTION_ARGS) { int64 size = PG_GETARG_INT64(0); char buf[64]; - int64 limit = 10 * 1024; - int64 limit2 = limit * 2 - 1; + const struct size_pretty_unit *unit; - if (Abs(size) < limit) - snprintf(buf, sizeof(buf), INT64_FORMAT " bytes", size); - else + for (unit = size_pretty_units; unit->name != NULL; unit++) { - /* - * We use divide instead of bit shifting so that behavior matches for - * both positive and negative size values. - */ - size /= (1 << 9); /* keep one extra bit for rounding */ - if (Abs(size) < limit2) - snprintf(buf, sizeof(buf), INT64_FORMAT " kB", - half_rounded(size)); - else + uint8 bits; + + /* use this unit if there are no more units or we're below the limit */ + if (unit[1].name == NULL || Abs(size) < unit->limit) { - size /= (1 << 10); - if (Abs(size) < limit2) - snprintf(buf, sizeof(buf), INT64_FORMAT " MB", - half_rounded(size)); - else - { - size /= (1 << 10); - if (Abs(size) < limit2) - snprintf(buf, sizeof(buf), INT64_FORMAT " GB", - half_rounded(size)); - else - { - size /= (1 << 10); - snprintf(buf, sizeof(buf), INT64_FORMAT " TB", - half_rounded(size)); - } - } + if (unit->round) + size = half_rounded(size); + + snprintf(buf, sizeof(buf), INT64_FORMAT " %s", size, unit->name); + break; } + + /* + * Determine the number of bits to use to build the divisor. We may + * need to use 1 bit less than the difference between this and the + * next unit if the next unit uses half rounding. Or we may need to + * shift an extra bit if this unit uses half rounding and the next one + * does not. We use division rather than shifting right by this + * number of bits to ensure positive and negative values are rounded + * in the same way. + */ + bits = (unit[1].unitbits - unit->unitbits - (unit[1].round == true) + + (unit->round == true)); + size /= ((int64) 1) << bits; } PG_RETURN_TEXT_P(cstring_to_text(buf)); @@ -640,57 +654,35 @@ Datum pg_size_pretty_numeric(PG_FUNCTION_ARGS) { Numeric size = PG_GETARG_NUMERIC(0); - Numeric limit, - limit2; - char *result; - - limit = int64_to_numeric(10 * 1024); - limit2 = int64_to_numeric(10 * 1024 * 2 - 1); + char *result = NULL; + const struct size_pretty_unit *unit; - if (numeric_is_less(numeric_absolute(size), limit)) + for (unit = size_pretty_units; unit->name != NULL; unit++) { - result = psprintf("%s bytes", numeric_to_cstring(size)); - } - else - { - /* keep one extra bit for rounding */ - /* size /= (1 << 9) */ - size = numeric_truncated_divide(size, 1 << 9); + unsigned int shiftby; - if (numeric_is_less(numeric_absolute(size), limit2)) + /* use this unit if there are no more units or we're below the limit */ + if (unit[1].name == NULL || + numeric_is_less(numeric_absolute(size), + int64_to_numeric(unit->limit))) { - size = numeric_half_rounded(size); - result = psprintf("%s kB", numeric_to_cstring(size)); - } - else - { - /* size /= (1 << 10) */ - size = numeric_truncated_divide(size, 1 << 10); - - if (numeric_is_less(numeric_absolute(size), limit2)) - { + if (unit->round) size = numeric_half_rounded(size); - result = psprintf("%s MB", numeric_to_cstring(size)); - } - else - { - /* size /= (1 << 10) */ - size = numeric_truncated_divide(size, 1 << 10); - - if (numeric_is_less(numeric_absolute(size), limit2)) - { - size = numeric_half_rounded(size); - result = psprintf("%s GB", numeric_to_cstring(size)); - } - else - { - /* size /= (1 << 10) */ - size = numeric_truncated_divide(size, 1 << 10); - size = numeric_half_rounded(size); - result = psprintf("%s TB", numeric_to_cstring(size)); - } - } + + result = psprintf("%s %s", numeric_to_cstring(size), unit->name); + break; } + + /* + * Determine the number of bits to use to build the divisor. We may + * need to use 1 bit less than the difference between this and the + * next unit if the next unit uses half rounding. Or we may need to + * shift an extra bit if this unit uses half rounding and the next one + * does not. + */ + shiftby = (unit[1].unitbits - unit->unitbits - (unit[1].round == true) + + (unit->round == true)); + size = numeric_truncated_divide(size, ((int64) 1) << shiftby); } PG_RETURN_TEXT_P(cstring_to_text(result)); @@ -791,6 +783,7 @@ pg_size_bytes(PG_FUNCTION_ARGS) /* Handle possible unit */ if (*strptr != '\0') { + const struct size_pretty_unit *unit; int64 multiplier = 0; /* Trim any trailing whitespace */ @@ -802,21 +795,18 @@ pg_size_bytes(PG_FUNCTION_ARGS) endptr++; *endptr = '\0'; - /* Parse the unit case-insensitively */ - if (pg_strcasecmp(strptr, "bytes") == 0) - multiplier = (int64) 1; - else if (pg_strcasecmp(strptr, "kb") == 0) - multiplier = (int64) 1024; - else if (pg_strcasecmp(strptr, "mb") == 0) - multiplier = ((int64) 1024) * 1024; - - else if (pg_strcasecmp(strptr, "gb") == 0) - multiplier = ((int64) 1024) * 1024 * 1024; - - else if (pg_strcasecmp(strptr, "tb") == 0) - multiplier = ((int64) 1024) * 1024 * 1024 * 1024; + for (unit = size_pretty_units; unit->name != NULL; unit++) + { + /* Parse the unit case-insensitively */ + if (pg_strcasecmp(strptr, unit->name) == 0) + { + multiplier = ((int64) 1) << unit->unitbits; + break; + } + } - else + /* Verify we found a valid unit in the loop above */ + if (unit->name == NULL) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid size: \"%s\"", text_to_cstring(arg)), From 2f783380641db4cc598acd108186a446e4919290 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 9 Jul 2021 17:51:48 +1200 Subject: [PATCH 625/671] Remove more obsolete comments about semaphores. Commit 6753333f stopped using semaphores as the sleep/wake mechanism for heavyweight locks, but some obsolete references to that scheme remained in comments. As with similar commit 25b93a29, back-patch all the way. Reviewed-by: Daniel Gustafsson Discussion: https://postgr.es/m/CA%2BhUKGLafjB1uzXcy%3D%3D2L3cy7rjHkqOVn7qRYGBjk%3D%3DtMJE7Yg%40mail.gmail.com --- src/backend/storage/lmgr/lwlock.c | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index ffb6fa36cc508..862097352bb8e 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -1298,14 +1298,10 @@ LWLockAcquire(LWLock *lock, LWLockMode mode) /* * Wait until awakened. * - * Since we share the process wait semaphore with the regular lock - * manager and ProcWaitForSignal, and we may need to acquire an LWLock - * while one of those is pending, it is possible that we get awakened - * for a reason other than being signaled by LWLockRelease. If so, - * loop back and wait again. Once we've gotten the LWLock, - * re-increment the sema by the number of additional signals received, - * so that the lock manager or signal manager will see the received - * signal when it next waits. + * It is possible that we get awakened for a reason other than being + * signaled by LWLockRelease. If so, loop back and wait again. Once + * we've gotten the LWLock, re-increment the sema by the number of + * additional signals received. */ LOG_LWDEBUG("LWLockAcquire", lock, "waiting"); @@ -1470,8 +1466,7 @@ LWLockAcquireOrWait(LWLock *lock, LWLockMode mode) { /* * Wait until awakened. Like in LWLockAcquire, be prepared for - * bogus wakeups, because we share the semaphore with - * ProcWaitForSignal. + * bogus wakeups. */ LOG_LWDEBUG("LWLockAcquireOrWait", lock, "waiting"); @@ -1684,14 +1679,10 @@ LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval) /* * Wait until awakened. * - * Since we share the process wait semaphore with the regular lock - * manager and ProcWaitForSignal, and we may need to acquire an LWLock - * while one of those is pending, it is possible that we get awakened - * for a reason other than being signaled by LWLockRelease. If so, - * loop back and wait again. Once we've gotten the LWLock, - * re-increment the sema by the number of additional signals received, - * so that the lock manager or signal manager will see the received - * signal when it next waits. + * It is possible that we get awakened for a reason other than being + * signaled by LWLockRelease. If so, loop back and wait again. Once + * we've gotten the LWLock, re-increment the sema by the number of + * additional signals received. */ LOG_LWDEBUG("LWLockWaitForVar", lock, "waiting"); From 0f80b47d24b470babd61f2d9927d1956075f771d Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 9 Jul 2021 15:27:36 +0900 Subject: [PATCH 626/671] Add forgotten LSN_FORMAT_ARGS() in xlogreader.c These should have been part of 4035cd5, that introduced LZ4 support for wal_compression. --- src/backend/access/transam/xlogreader.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index 9a2cdf888e281..5cf74e181a1ee 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -1576,8 +1576,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page) decomp_success = false; #else report_invalid_record(record, "image at %X/%X compressed with %s not supported by build, block %d", - (uint32) (record->ReadRecPtr >> 32), - (uint32) record->ReadRecPtr, + LSN_FORMAT_ARGS(record->ReadRecPtr), "LZ4", block_id); return false; @@ -1586,8 +1585,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page) else { report_invalid_record(record, "image at %X/%X compressed with unknown method, block %d", - (uint32) (record->ReadRecPtr >> 32), - (uint32) record->ReadRecPtr, + LSN_FORMAT_ARGS(record->ReadRecPtr), block_id); return false; } From ca2e4472ba7b6e5e8cd8955eacffb90e4d88d085 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Fri, 9 Jul 2021 18:56:00 +1200 Subject: [PATCH 627/671] Teach pg_size_pretty and pg_size_bytes about petabytes There was talk about adding units all the way up to yottabytes but it seems quite far-fetched that anyone would need those. Since such large units are not exactly commonplace, it seems unlikely that having pg_size_pretty outputting unit any larger than petabytes would actually be helpful to anyone. Since petabytes are on the horizon, let's just add those only. Maybe one day we'll get to add additional units, but it will likely be a while before we'll need to think beyond petabytes in regards to the size of a database. Author: David Christensen Discussion: https://postgr.es/m/CAOxo6XKmHc_WZip-x5QwaOqFEiCq_SVD0B7sbTZQk+qqcn2qaw@mail.gmail.com --- src/backend/utils/adt/dbsize.c | 3 +- src/test/regress/expected/dbsize.out | 124 ++++++++++++++------------- src/test/regress/sql/dbsize.sql | 9 +- 3 files changed, 72 insertions(+), 64 deletions(-) diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c index 6c381b02b7ec6..d5a7fb13f3cc8 100644 --- a/src/backend/utils/adt/dbsize.c +++ b/src/backend/utils/adt/dbsize.c @@ -52,6 +52,7 @@ static const struct size_pretty_unit size_pretty_units[] = { {"MB", 20 * 1024 - 1, true, 20}, {"GB", 20 * 1024 - 1, true, 30}, {"TB", 20 * 1024 - 1, true, 40}, + {"PB", 20 * 1024 - 1, true, 50}, {NULL, 0, false, 0} }; @@ -811,7 +812,7 @@ pg_size_bytes(PG_FUNCTION_ARGS) (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid size: \"%s\"", text_to_cstring(arg)), errdetail("Invalid size unit: \"%s\".", strptr), - errhint("Valid units are \"bytes\", \"kB\", \"MB\", \"GB\", and \"TB\"."))); + errhint("Valid units are \"bytes\", \"kB\", \"MB\", \"GB\", \"TB\", and \"PB\"."))); if (multiplier > 1) { diff --git a/src/test/regress/expected/dbsize.out b/src/test/regress/expected/dbsize.out index 29804aee8b801..d8d6686b5f4be 100644 --- a/src/test/regress/expected/dbsize.out +++ b/src/test/regress/expected/dbsize.out @@ -53,7 +53,7 @@ SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM 10994579406847 | 10239 GB | -10239 GB 10994579406848 | 10 TB | -10 TB 11258449312612351 | 10239 TB | -10239 TB - 11258449312612352 | 10240 TB | -10240 TB + 11258449312612352 | 10 PB | -10 PB (10 rows) SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM @@ -61,71 +61,77 @@ SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM (10485247::numeric), (10485248::numeric), (10736893951::numeric), (10736893952::numeric), (10994579406847::numeric), (10994579406848::numeric), - (11258449312612351::numeric), (11258449312612352::numeric)) x(size); - size | pg_size_pretty | pg_size_pretty --------------------+----------------+---------------- - 10239 | 10239 bytes | -10239 bytes - 10240 | 10 kB | -10 kB - 10485247 | 10239 kB | -10239 kB - 10485248 | 10 MB | -10 MB - 10736893951 | 10239 MB | -10239 MB - 10736893952 | 10 GB | -10 GB - 10994579406847 | 10239 GB | -10239 GB - 10994579406848 | 10 TB | -10 TB - 11258449312612351 | 10239 TB | -10239 TB - 11258449312612352 | 10240 TB | -10240 TB -(10 rows) + (11258449312612351::numeric), (11258449312612352::numeric), + (11528652096115048447::numeric), (11528652096115048448::numeric)) x(size); + size | pg_size_pretty | pg_size_pretty +----------------------+----------------+---------------- + 10239 | 10239 bytes | -10239 bytes + 10240 | 10 kB | -10 kB + 10485247 | 10239 kB | -10239 kB + 10485248 | 10 MB | -10 MB + 10736893951 | 10239 MB | -10239 MB + 10736893952 | 10 GB | -10 GB + 10994579406847 | 10239 GB | -10239 GB + 10994579406848 | 10 TB | -10 TB + 11258449312612351 | 10239 TB | -10239 TB + 11258449312612352 | 10 PB | -10 PB + 11528652096115048447 | 10239 PB | -10239 PB + 11528652096115048448 | 10240 PB | -10240 PB +(12 rows) -- pg_size_bytes() tests SELECT size, pg_size_bytes(size) FROM (VALUES ('1'), ('123bytes'), ('1kB'), ('1MB'), (' 1 GB'), ('1.5 GB '), - ('1TB'), ('3000 TB'), ('1e6 MB')) x(size); - size | pg_size_bytes -----------+------------------ - 1 | 1 - 123bytes | 123 - 1kB | 1024 - 1MB | 1048576 - 1 GB | 1073741824 - 1.5 GB | 1610612736 - 1TB | 1099511627776 - 3000 TB | 3298534883328000 - 1e6 MB | 1048576000000 -(9 rows) + ('1TB'), ('3000 TB'), ('1e6 MB'), ('99 PB')) x(size); + size | pg_size_bytes +----------+-------------------- + 1 | 1 + 123bytes | 123 + 1kB | 1024 + 1MB | 1048576 + 1 GB | 1073741824 + 1.5 GB | 1610612736 + 1TB | 1099511627776 + 3000 TB | 3298534883328000 + 1e6 MB | 1048576000000 + 99 PB | 111464090777419776 +(10 rows) -- case-insensitive units are supported SELECT size, pg_size_bytes(size) FROM (VALUES ('1'), ('123bYteS'), ('1kb'), ('1mb'), (' 1 Gb'), ('1.5 gB '), - ('1tb'), ('3000 tb'), ('1e6 mb')) x(size); - size | pg_size_bytes -----------+------------------ - 1 | 1 - 123bYteS | 123 - 1kb | 1024 - 1mb | 1048576 - 1 Gb | 1073741824 - 1.5 gB | 1610612736 - 1tb | 1099511627776 - 3000 tb | 3298534883328000 - 1e6 mb | 1048576000000 -(9 rows) + ('1tb'), ('3000 tb'), ('1e6 mb'), ('99 pb')) x(size); + size | pg_size_bytes +----------+-------------------- + 1 | 1 + 123bYteS | 123 + 1kb | 1024 + 1mb | 1048576 + 1 Gb | 1073741824 + 1.5 gB | 1610612736 + 1tb | 1099511627776 + 3000 tb | 3298534883328000 + 1e6 mb | 1048576000000 + 99 pb | 111464090777419776 +(10 rows) -- negative numbers are supported SELECT size, pg_size_bytes(size) FROM (VALUES ('-1'), ('-123bytes'), ('-1kb'), ('-1mb'), (' -1 Gb'), ('-1.5 gB '), - ('-1tb'), ('-3000 TB'), ('-10e-1 MB')) x(size); - size | pg_size_bytes ------------+------------------- - -1 | -1 - -123bytes | -123 - -1kb | -1024 - -1mb | -1048576 - -1 Gb | -1073741824 - -1.5 gB | -1610612736 - -1tb | -1099511627776 - -3000 TB | -3298534883328000 - -10e-1 MB | -1048576 -(9 rows) + ('-1tb'), ('-3000 TB'), ('-10e-1 MB'), ('-99 PB')) x(size); + size | pg_size_bytes +-----------+--------------------- + -1 | -1 + -123bytes | -123 + -1kb | -1024 + -1mb | -1048576 + -1 Gb | -1073741824 + -1.5 gB | -1610612736 + -1tb | -1099511627776 + -3000 TB | -3298534883328000 + -10e-1 MB | -1048576 + -99 PB | -111464090777419776 +(10 rows) -- different cases with allowed points SELECT size, pg_size_bytes(size) FROM @@ -147,15 +153,15 @@ SELECT size, pg_size_bytes(size) FROM SELECT pg_size_bytes('1 AB'); ERROR: invalid size: "1 AB" DETAIL: Invalid size unit: "AB". -HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB". +HINT: Valid units are "bytes", "kB", "MB", "GB", "TB", and "PB". SELECT pg_size_bytes('1 AB A'); ERROR: invalid size: "1 AB A" DETAIL: Invalid size unit: "AB A". -HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB". +HINT: Valid units are "bytes", "kB", "MB", "GB", "TB", and "PB". SELECT pg_size_bytes('1 AB A '); ERROR: invalid size: "1 AB A " DETAIL: Invalid size unit: "AB A". -HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB". +HINT: Valid units are "bytes", "kB", "MB", "GB", "TB", and "PB". SELECT pg_size_bytes('9223372036854775807.9'); ERROR: bigint out of range SELECT pg_size_bytes('1e100'); @@ -165,7 +171,7 @@ ERROR: value overflows numeric format SELECT pg_size_bytes('1 byte'); -- the singular "byte" is not supported ERROR: invalid size: "1 byte" DETAIL: Invalid size unit: "byte". -HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB". +HINT: Valid units are "bytes", "kB", "MB", "GB", "TB", and "PB". SELECT pg_size_bytes(''); ERROR: invalid size: "" SELECT pg_size_bytes('kb'); @@ -183,6 +189,6 @@ ERROR: invalid size: ".+912" SELECT pg_size_bytes('+912+ kB'); ERROR: invalid size: "+912+ kB" DETAIL: Invalid size unit: "+ kB". -HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB". +HINT: Valid units are "bytes", "kB", "MB", "GB", "TB", and "PB". SELECT pg_size_bytes('++123 kB'); ERROR: invalid size: "++123 kB" diff --git a/src/test/regress/sql/dbsize.sql b/src/test/regress/sql/dbsize.sql index 6a45c5eb1cfd5..7df865271b681 100644 --- a/src/test/regress/sql/dbsize.sql +++ b/src/test/regress/sql/dbsize.sql @@ -24,22 +24,23 @@ SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM (10485247::numeric), (10485248::numeric), (10736893951::numeric), (10736893952::numeric), (10994579406847::numeric), (10994579406848::numeric), - (11258449312612351::numeric), (11258449312612352::numeric)) x(size); + (11258449312612351::numeric), (11258449312612352::numeric), + (11528652096115048447::numeric), (11528652096115048448::numeric)) x(size); -- pg_size_bytes() tests SELECT size, pg_size_bytes(size) FROM (VALUES ('1'), ('123bytes'), ('1kB'), ('1MB'), (' 1 GB'), ('1.5 GB '), - ('1TB'), ('3000 TB'), ('1e6 MB')) x(size); + ('1TB'), ('3000 TB'), ('1e6 MB'), ('99 PB')) x(size); -- case-insensitive units are supported SELECT size, pg_size_bytes(size) FROM (VALUES ('1'), ('123bYteS'), ('1kb'), ('1mb'), (' 1 Gb'), ('1.5 gB '), - ('1tb'), ('3000 tb'), ('1e6 mb')) x(size); + ('1tb'), ('3000 tb'), ('1e6 mb'), ('99 pb')) x(size); -- negative numbers are supported SELECT size, pg_size_bytes(size) FROM (VALUES ('-1'), ('-123bytes'), ('-1kb'), ('-1mb'), (' -1 Gb'), ('-1.5 gB '), - ('-1tb'), ('-3000 TB'), ('-10e-1 MB')) x(size); + ('-1tb'), ('-3000 TB'), ('-10e-1 MB'), ('-99 PB')) x(size); -- different cases with allowed points SELECT size, pg_size_bytes(size) FROM From a9da1934e971b38ab360ce80a352fbfc4d2d986b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 9 Jul 2021 11:02:26 -0400 Subject: [PATCH 628/671] Reject cases where a query in WITH rewrites to just NOTIFY. Since the executor can't cope with a utility statement appearing as a node of a plan tree, we can't support cases where a rewrite rule inserts a NOTIFY into an INSERT/UPDATE/DELETE command appearing in a WITH clause of a larger query. (One can imagine ways around that, but it'd be a new feature not a bug fix, and so far there's been no demand for it.) RewriteQuery checked for this, but it missed the case where the DML command rewrites to *only* a NOTIFY. That'd lead to crashes later on in planning. Add the missed check, and improve the level of testing of this area. Per bug #17094 from Yaoguang Chen. It's been busted since WITH was introduced, so back-patch to all supported branches. Discussion: https://postgr.es/m/17094-bf15dff55eaf2e28@postgresql.org --- src/backend/rewrite/rewriteHandler.c | 20 +++++++++++++++++--- src/test/regress/expected/with.out | 25 +++++++++++++++++++++++++ src/test/regress/sql/with.sql | 21 +++++++++++++++++++++ 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index 88a9e95e339f8..54fd6d6fb281e 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -3585,15 +3585,29 @@ RewriteQuery(Query *parsetree, List *rewrite_events) /* * Currently we can only handle unconditional, single-statement DO - * INSTEAD rules correctly; we have to get exactly one Query out of - * the rewrite operation to stuff back into the CTE node. + * INSTEAD rules correctly; we have to get exactly one non-utility + * Query out of the rewrite operation to stuff back into the CTE node. */ if (list_length(newstuff) == 1) { - /* Push the single Query back into the CTE node */ + /* Must check it's not a utility command */ ctequery = linitial_node(Query, newstuff); + if (!(ctequery->commandType == CMD_SELECT || + ctequery->commandType == CMD_UPDATE || + ctequery->commandType == CMD_INSERT || + ctequery->commandType == CMD_DELETE)) + { + /* + * Currently it could only be NOTIFY; this error message will + * need work if we ever allow other utility commands in rules. + */ + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH"))); + } /* WITH queries should never be canSetTag */ Assert(!ctequery->canSetTag); + /* Push the single Query back into the CTE node */ cte->ctequery = (Node *) ctequery; } else if (newstuff == NIL) diff --git a/src/test/regress/expected/with.out b/src/test/regress/expected/with.out index 584bdc6600b53..3523a7dcc1608 100644 --- a/src/test/regress/expected/with.out +++ b/src/test/regress/expected/with.out @@ -2969,6 +2969,31 @@ WITH t AS ( ) VALUES(FALSE); ERROR: conditional DO INSTEAD rules are not supported for data-modifying statements in WITH +CREATE OR REPLACE RULE y_rule AS ON INSERT TO y DO INSTEAD NOTHING; +WITH t AS ( + INSERT INTO y VALUES(0) +) +VALUES(FALSE); +ERROR: DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH +CREATE OR REPLACE RULE y_rule AS ON INSERT TO y DO INSTEAD NOTIFY foo; +WITH t AS ( + INSERT INTO y VALUES(0) +) +VALUES(FALSE); +ERROR: DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH +CREATE OR REPLACE RULE y_rule AS ON INSERT TO y DO ALSO NOTIFY foo; +WITH t AS ( + INSERT INTO y VALUES(0) +) +VALUES(FALSE); +ERROR: DO ALSO rules are not supported for data-modifying statements in WITH +CREATE OR REPLACE RULE y_rule AS ON INSERT TO y + DO INSTEAD (NOTIFY foo; NOTIFY bar); +WITH t AS ( + INSERT INTO y VALUES(0) +) +VALUES(FALSE); +ERROR: multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH DROP RULE y_rule ON y; -- check that parser lookahead for WITH doesn't cause any odd behavior create table foo (with baz); -- fail, WITH is a reserved word diff --git a/src/test/regress/sql/with.sql b/src/test/regress/sql/with.sql index 1a9bdc9f3ea45..8b213ee408659 100644 --- a/src/test/regress/sql/with.sql +++ b/src/test/regress/sql/with.sql @@ -1375,6 +1375,27 @@ WITH t AS ( INSERT INTO y VALUES(0) ) VALUES(FALSE); +CREATE OR REPLACE RULE y_rule AS ON INSERT TO y DO INSTEAD NOTHING; +WITH t AS ( + INSERT INTO y VALUES(0) +) +VALUES(FALSE); +CREATE OR REPLACE RULE y_rule AS ON INSERT TO y DO INSTEAD NOTIFY foo; +WITH t AS ( + INSERT INTO y VALUES(0) +) +VALUES(FALSE); +CREATE OR REPLACE RULE y_rule AS ON INSERT TO y DO ALSO NOTIFY foo; +WITH t AS ( + INSERT INTO y VALUES(0) +) +VALUES(FALSE); +CREATE OR REPLACE RULE y_rule AS ON INSERT TO y + DO INSTEAD (NOTIFY foo; NOTIFY bar); +WITH t AS ( + INSERT INTO y VALUES(0) +) +VALUES(FALSE); DROP RULE y_rule ON y; -- check that parser lookahead for WITH doesn't cause any odd behavior From d0a02bdb8c2576b5aa607f127320e444080bd579 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 9 Jul 2021 12:38:55 -0400 Subject: [PATCH 629/671] Update configure's probe for libldap to work with OpenLDAP 2.5. The separate libldap_r is gone and libldap itself is now always thread-safe. Unfortunately there seems no easy way to tell by inspection whether libldap is thread-safe, so we have to take it on faith that libldap is thread-safe if there's no libldap_r. That should be okay, as it appears that libldap_r was a standard part of the installation going back at least 20 years. Report and patch by Adrian Ho. Back-patch to all supported branches, since people might try to build any of them with a newer OpenLDAP. Discussion: https://postgr.es/m/17083-a19190d9591946a7@postgresql.org --- configure | 89 ++++++++++++++++++++++---------------- configure.ac | 20 +++++---- src/include/pg_config.h.in | 3 -- src/tools/msvc/Solution.pm | 1 - 4 files changed, 64 insertions(+), 49 deletions(-) diff --git a/configure b/configure index e468def49e6e9..f75214d4f89d7 100755 --- a/configure +++ b/configure @@ -12880,13 +12880,17 @@ fi if test "$with_ldap" = yes ; then _LIBS="$LIBS" if test "$PORTNAME" != "win32"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_bind in -lldap" >&5 -$as_echo_n "checking for ldap_bind in -lldap... " >&6; } -if ${ac_cv_lib_ldap_ldap_bind+:} false; then : + if test "$enable_thread_safety" = yes; then + # Use ldap_r for FE if available, else assume ldap is thread-safe. + # If ldap_r does exist, assume without checking that ldap does too. + # on some platforms ldap_r fails to link without PTHREAD_LIBS + LIBS="" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ldap_bind" >&5 +$as_echo_n "checking for library containing ldap_bind... " >&6; } +if ${ac_cv_search_ldap_bind+:} false; then : $as_echo_n "(cached) " >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lldap $EXTRA_LDAP_LIBS $LIBS" + ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12905,38 +12909,50 @@ return ldap_bind (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_ldap_ldap_bind=yes -else - ac_cv_lib_ldap_ldap_bind=no +for ac_lib in '' ldap_r ldap; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_ldap_bind=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + conftest$ac_exeext + if ${ac_cv_search_ldap_bind+:} false; then : + break fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ldap_ldap_bind" >&5 -$as_echo "$ac_cv_lib_ldap_ldap_bind" >&6; } -if test "x$ac_cv_lib_ldap_ldap_bind" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBLDAP 1 -_ACEOF +done +if ${ac_cv_search_ldap_bind+:} false; then : - LIBS="-lldap $LIBS" +else + ac_cv_search_ldap_bind=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ldap_bind" >&5 +$as_echo "$ac_cv_search_ldap_bind" >&6; } +ac_res=$ac_cv_search_ldap_bind +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "library 'ldap' is required for LDAP" "$LINENO" 5 fi - LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" - if test "$enable_thread_safety" = yes; then - # on some platforms ldap_r fails to link without PTHREAD_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_simple_bind in -lldap_r" >&5 -$as_echo_n "checking for ldap_simple_bind in -lldap_r... " >&6; } -if ${ac_cv_lib_ldap_r_ldap_simple_bind+:} false; then : + LDAP_LIBS_FE="$LIBS $EXTRA_LDAP_LIBS" + LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_bind in -lldap" >&5 +$as_echo_n "checking for ldap_bind in -lldap... " >&6; } +if ${ac_cv_lib_ldap_ldap_bind+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lldap_r $PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS $LIBS" +LIBS="-lldap $EXTRA_LDAP_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12946,40 +12962,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #ifdef __cplusplus extern "C" #endif -char ldap_simple_bind (); +char ldap_bind (); int main () { -return ldap_simple_bind (); +return ldap_bind (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_ldap_r_ldap_simple_bind=yes + ac_cv_lib_ldap_ldap_bind=yes else - ac_cv_lib_ldap_r_ldap_simple_bind=no + ac_cv_lib_ldap_ldap_bind=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ldap_r_ldap_simple_bind" >&5 -$as_echo "$ac_cv_lib_ldap_r_ldap_simple_bind" >&6; } -if test "x$ac_cv_lib_ldap_r_ldap_simple_bind" = xyes; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ldap_ldap_bind" >&5 +$as_echo "$ac_cv_lib_ldap_ldap_bind" >&6; } +if test "x$ac_cv_lib_ldap_ldap_bind" = xyes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_LIBLDAP_R 1 +#define HAVE_LIBLDAP 1 _ACEOF - LIBS="-lldap_r $LIBS" + LIBS="-lldap $LIBS" else - as_fn_error $? "library 'ldap_r' is required for LDAP" "$LINENO" 5 + as_fn_error $? "library 'ldap' is required for LDAP" "$LINENO" 5 fi - LDAP_LIBS_FE="-lldap_r $EXTRA_LDAP_LIBS" - else LDAP_LIBS_FE="-lldap $EXTRA_LDAP_LIBS" + LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" fi for ac_func in ldap_initialize do : diff --git a/configure.ac b/configure.ac index 39666f97277f6..9b79274ea7bba 100644 --- a/configure.ac +++ b/configure.ac @@ -1289,18 +1289,22 @@ fi if test "$with_ldap" = yes ; then _LIBS="$LIBS" if test "$PORTNAME" != "win32"; then - AC_CHECK_LIB(ldap, ldap_bind, [], - [AC_MSG_ERROR([library 'ldap' is required for LDAP])], - [$EXTRA_LDAP_LIBS]) - LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" if test "$enable_thread_safety" = yes; then + # Use ldap_r for FE if available, else assume ldap is thread-safe. + # If ldap_r does exist, assume without checking that ldap does too. # on some platforms ldap_r fails to link without PTHREAD_LIBS - AC_CHECK_LIB(ldap_r, ldap_simple_bind, [], - [AC_MSG_ERROR([library 'ldap_r' is required for LDAP])], - [$PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS]) - LDAP_LIBS_FE="-lldap_r $EXTRA_LDAP_LIBS" + LIBS="" + AC_SEARCH_LIBS(ldap_bind, [ldap_r ldap], [], + [AC_MSG_ERROR([library 'ldap' is required for LDAP])], + [$PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS]) + LDAP_LIBS_FE="$LIBS $EXTRA_LDAP_LIBS" + LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" else + AC_CHECK_LIB(ldap, ldap_bind, [], + [AC_MSG_ERROR([library 'ldap' is required for LDAP])], + [$EXTRA_LDAP_LIBS]) LDAP_LIBS_FE="-lldap $EXTRA_LDAP_LIBS" + LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" fi AC_CHECK_FUNCS([ldap_initialize]) else diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index 783b8fc1ba775..479c8fe0be765 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -322,9 +322,6 @@ /* Define to 1 if you have the `ldap' library (-lldap). */ #undef HAVE_LIBLDAP -/* Define to 1 if you have the `ldap_r' library (-lldap_r). */ -#undef HAVE_LIBLDAP_R - /* Define to 1 if you have the `lz4' library (-llz4). */ #undef HAVE_LIBLZ4 diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index fcb43b0ca05a4..b529f78a60131 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -302,7 +302,6 @@ sub GenerateFiles HAVE_LDAP_INITIALIZE => undef, HAVE_LIBCRYPTO => undef, HAVE_LIBLDAP => undef, - HAVE_LIBLDAP_R => undef, HAVE_LIBLZ4 => undef, HAVE_LIBM => undef, HAVE_LIBPAM => undef, From d23ac62afa646b7073a7f0db0a137308459a263b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 9 Jul 2021 13:38:24 -0400 Subject: [PATCH 630/671] Avoid creating a RESULT RTE that's marked LATERAL. Commit 7266d0997 added code to pull up simple constant function results, converting the RTE_FUNCTION RTE to a dummy RTE_RESULT RTE since it no longer need be scanned. But I forgot to clear the LATERAL flag if the RTE has it set. If the function reduced to a constant, it surely contains no lateral references so this simplification is logically OK. It's needed because various other places will Assert that RESULT RTEs aren't LATERAL. Per bug #17097 from Yaoguang Chen. Back-patch to v13 where the faulty code came in. Discussion: https://postgr.es/m/17097-3372ef9f798fc94f@postgresql.org --- src/backend/optimizer/prep/prepjointree.c | 5 ++++- src/test/regress/expected/join.out | 8 ++++++++ src/test/regress/sql/join.sql | 3 +++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index 99ac3351146c6..224c5153b1586 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -1808,10 +1808,13 @@ pull_up_constant_function(PlannerInfo *root, Node *jtnode, /* * Convert the RTE to be RTE_RESULT type, signifying that we don't need to - * scan it anymore, and zero out RTE_FUNCTION-specific fields. + * scan it anymore, and zero out RTE_FUNCTION-specific fields. Also make + * sure the RTE is not marked LATERAL, since elsewhere we don't expect + * RTE_RESULTs to be LATERAL. */ rte->rtekind = RTE_RESULT; rte->functions = NIL; + rte->lateral = false; /* * We can reuse the RangeTblRef node. diff --git a/src/test/regress/expected/join.out b/src/test/regress/expected/join.out index fec0325e73e58..19cd056987605 100644 --- a/src/test/regress/expected/join.out +++ b/src/test/regress/expected/join.out @@ -3469,6 +3469,14 @@ select unique1 from tenk1, lateral f_immutable_int4(1) x where x = unique1; Index Cond: (unique1 = 1) (2 rows) +explain (costs off) +select unique1 from tenk1, lateral f_immutable_int4(1) x where x in (select 17); + QUERY PLAN +-------------------------- + Result + One-Time Filter: false +(2 rows) + explain (costs off) select unique1, x from tenk1 join f_immutable_int4(1) x on unique1 = x; QUERY PLAN diff --git a/src/test/regress/sql/join.sql b/src/test/regress/sql/join.sql index 7f866c603b8d6..2a0e2d12d8320 100644 --- a/src/test/regress/sql/join.sql +++ b/src/test/regress/sql/join.sql @@ -1113,6 +1113,9 @@ select unique1 from tenk1, f_immutable_int4(1) x where x = unique1; explain (costs off) select unique1 from tenk1, lateral f_immutable_int4(1) x where x = unique1; +explain (costs off) +select unique1 from tenk1, lateral f_immutable_int4(1) x where x in (select 17); + explain (costs off) select unique1, x from tenk1 join f_immutable_int4(1) x on unique1 = x; From 31e8cfac5845fa57e1805f4ff81e00ab78dff025 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 9 Jul 2021 14:15:41 -0400 Subject: [PATCH 631/671] Un-break AIX build. In commit d0a02bdb8, I'd supposed that uniformly probing for ldap_bind would make the intent clearer. However, that seems not to work on AIX, for obscure reasons (maybe it's a macro there?). Revert to the former behavior of probing ldap_simple_bind for thread-safe cases and ldap_bind otherwise. Per buildfarm member hoverfly. Discussion: https://postgr.es/m/17083-a19190d9591946a7@postgresql.org --- configure | 27 ++++++++++++++------------- configure.ac | 5 +++-- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/configure b/configure index f75214d4f89d7..450241f4ba76d 100755 --- a/configure +++ b/configure @@ -12883,11 +12883,12 @@ if test "$with_ldap" = yes ; then if test "$enable_thread_safety" = yes; then # Use ldap_r for FE if available, else assume ldap is thread-safe. # If ldap_r does exist, assume without checking that ldap does too. - # on some platforms ldap_r fails to link without PTHREAD_LIBS + # On some platforms ldap_r fails to link without PTHREAD_LIBS; + # also, on AIX we must probe ldap_simple_bind not ldap_bind. LIBS="" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ldap_bind" >&5 -$as_echo_n "checking for library containing ldap_bind... " >&6; } -if ${ac_cv_search_ldap_bind+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ldap_simple_bind" >&5 +$as_echo_n "checking for library containing ldap_simple_bind... " >&6; } +if ${ac_cv_search_ldap_simple_bind+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS @@ -12900,11 +12901,11 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #ifdef __cplusplus extern "C" #endif -char ldap_bind (); +char ldap_simple_bind (); int main () { -return ldap_bind (); +return ldap_simple_bind (); ; return 0; } @@ -12917,25 +12918,25 @@ for ac_lib in '' ldap_r ldap; do LIBS="-l$ac_lib $PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_ldap_bind=$ac_res + ac_cv_search_ldap_simple_bind=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if ${ac_cv_search_ldap_bind+:} false; then : + if ${ac_cv_search_ldap_simple_bind+:} false; then : break fi done -if ${ac_cv_search_ldap_bind+:} false; then : +if ${ac_cv_search_ldap_simple_bind+:} false; then : else - ac_cv_search_ldap_bind=no + ac_cv_search_ldap_simple_bind=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ldap_bind" >&5 -$as_echo "$ac_cv_search_ldap_bind" >&6; } -ac_res=$ac_cv_search_ldap_bind +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ldap_simple_bind" >&5 +$as_echo "$ac_cv_search_ldap_simple_bind" >&6; } +ac_res=$ac_cv_search_ldap_simple_bind if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" diff --git a/configure.ac b/configure.ac index 9b79274ea7bba..be825a8113159 100644 --- a/configure.ac +++ b/configure.ac @@ -1292,9 +1292,10 @@ if test "$with_ldap" = yes ; then if test "$enable_thread_safety" = yes; then # Use ldap_r for FE if available, else assume ldap is thread-safe. # If ldap_r does exist, assume without checking that ldap does too. - # on some platforms ldap_r fails to link without PTHREAD_LIBS + # On some platforms ldap_r fails to link without PTHREAD_LIBS; + # also, on AIX we must probe ldap_simple_bind not ldap_bind. LIBS="" - AC_SEARCH_LIBS(ldap_bind, [ldap_r ldap], [], + AC_SEARCH_LIBS(ldap_simple_bind, [ldap_r ldap], [], [AC_MSG_ERROR([library 'ldap' is required for LDAP])], [$PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS]) LDAP_LIBS_FE="$LIBS $EXTRA_LDAP_LIBS" From 8e7811e952b4e0993330f7ac1fb1448a1ca69b9a Mon Sep 17 00:00:00 2001 From: Jeff Davis Date: Fri, 9 Jul 2021 08:48:19 -0700 Subject: [PATCH 632/671] Eliminate replication protocol error related to IDENTIFY_SYSTEM. The requirement that IDENTIFY_SYSTEM be run before START_REPLICATION was both undocumented and unnecessary. Remove the error and ensure that ThisTimeLineID is initialized in START_REPLICATION. Elect not to backport because this requirement was expected behavior (even if inconsistently enforced), and is not likely to cause any major problem. Author: Jeff Davis Reviewed-by: Andres Freund Discussion: https://postgr.es/m/de4bbf05b7cd94227841c433ea6ff71d2130c713.camel%40j-davis.com --- src/backend/replication/walsender.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index 92c755f346eba..3ca2a11389dc2 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -573,11 +573,6 @@ StartReplication(StartReplicationCmd *cmd) StringInfoData buf; XLogRecPtr FlushPtr; - if (ThisTimeLineID == 0) - ereport(ERROR, - (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("IDENTIFY_SYSTEM has not been run before START_REPLICATION"))); - /* create xlogreader for physical replication */ xlogreader = XLogReaderAllocate(wal_segment_size, NULL, @@ -619,6 +614,7 @@ StartReplication(StartReplicationCmd *cmd) * that. Otherwise use the timeline of the last replayed record, which is * kept in ThisTimeLineID. */ + am_cascading_walsender = RecoveryInProgress(); if (am_cascading_walsender) { /* this also updates ThisTimeLineID */ From ab09679429009bfed4bd894a6187afde0b7bdfcd Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 9 Jul 2021 15:57:59 -0400 Subject: [PATCH 633/671] libpq: Fix sending queries in pipeline aborted state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When sending queries in pipeline mode, we were careless about leaving the connection in the right state so that PQgetResult would behave correctly; trying to read further results after sending a query after having read a result with an error would sometimes hang. Fix by ensuring internal libpq state is changed properly. All the state changes were being done by the callers of pqAppendCmdQueueEntry(); it would have become too repetitious to have this logic in each of them, so instead put it all in that function and relieve callers of the responsibility. Add a test to verify this case. Without the code fix, this new test hangs sometimes. Also, document that PQisBusy() would return false when no queries are pending result. This is not intuitively obvious, and NULL would be obtained by calling PQgetResult() at that point, which is confusing. Wording by Boris Kolpackov. In passing, fix bogus use of "false" to mean "0", per Ranier Vilela. Backpatch to 14. Author: Álvaro Herrera Reported-by: Boris Kolpackov Discussion: https://postgr.es/m/boris.20210624103805@codesynthesis.com --- doc/src/sgml/libpq.sgml | 5 +- src/interfaces/libpq/fe-exec.c | 57 ++++- .../modules/libpq_pipeline/libpq_pipeline.c | 226 ++++++++++++++++++ 3 files changed, 274 insertions(+), 14 deletions(-) diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 59e3e678f9e76..2e4f615a6591b 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -5171,7 +5171,10 @@ int PQflush(PGconn *conn); PQisBusy, PQconsumeInput, etc - operate as normal when processing pipeline results. + operate as normal when processing pipeline results. In particular, + a call to PQisBusy in the middle of a pipeline + returns 0 if the results for all the queries issued so far have been + consumed. diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index b13ddab393be5..aca81890bb166 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -1223,7 +1223,8 @@ pqAllocCmdQueueEntry(PGconn *conn) /* * pqAppendCmdQueueEntry - * Append a caller-allocated command queue entry to the queue. + * Append a caller-allocated entry to the command queue, and update + * conn->asyncStatus to account for it. * * The query itself must already have been put in the output buffer by the * caller. @@ -1239,6 +1240,38 @@ pqAppendCmdQueueEntry(PGconn *conn, PGcmdQueueEntry *entry) conn->cmd_queue_tail->next = entry; conn->cmd_queue_tail = entry; + + switch (conn->pipelineStatus) + { + case PQ_PIPELINE_OFF: + case PQ_PIPELINE_ON: + + /* + * When not in pipeline aborted state, if there's a result ready + * to be consumed, let it be so (that is, don't change away from + * READY or READY_MORE); otherwise set us busy to wait for + * something to arrive from the server. + */ + if (conn->asyncStatus == PGASYNC_IDLE) + conn->asyncStatus = PGASYNC_BUSY; + break; + + case PQ_PIPELINE_ABORTED: + + /* + * In aborted pipeline state, we don't expect anything from the + * server (since we don't send any queries that are queued). + * Therefore, if IDLE then do what PQgetResult would do to let + * itself consume commands from the queue; if we're in any other + * state, we don't have to do anything. + */ + if (conn->asyncStatus == PGASYNC_IDLE) + { + resetPQExpBuffer(&conn->errorMessage); + pqPipelineProcessQueue(conn); + } + break; + } } /* @@ -1375,7 +1408,6 @@ PQsendQueryInternal(PGconn *conn, const char *query, bool newQuery) /* OK, it's launched! */ pqAppendCmdQueueEntry(conn, entry); - conn->asyncStatus = PGASYNC_BUSY; return 1; sendFailed: @@ -1510,10 +1542,6 @@ PQsendPrepare(PGconn *conn, /* if insufficient memory, query just winds up NULL */ entry->query = strdup(query); - pqAppendCmdQueueEntry(conn, entry); - - conn->asyncStatus = PGASYNC_BUSY; - /* * Give the data a push (in pipeline mode, only if we're past the size * threshold). In nonblock mode, don't complain if we're unable to send @@ -1522,6 +1550,9 @@ PQsendPrepare(PGconn *conn, if (pqPipelineFlush(conn) < 0) goto sendFailed; + /* OK, it's launched! */ + pqAppendCmdQueueEntry(conn, entry); + return 1; sendFailed: @@ -1815,7 +1846,7 @@ PQsendQueryGuts(PGconn *conn, /* OK, it's launched! */ pqAppendCmdQueueEntry(conn, entry); - conn->asyncStatus = PGASYNC_BUSY; + return 1; sendFailed: @@ -2445,7 +2476,7 @@ PQsendDescribe(PGconn *conn, char desc_type, const char *desc_target) /* OK, it's launched! */ pqAppendCmdQueueEntry(conn, entry); - conn->asyncStatus = PGASYNC_BUSY; + return 1; sendFailed: @@ -2948,7 +2979,7 @@ pqCommandQueueAdvance(PGconn *conn) * pqPipelineProcessQueue: subroutine for PQgetResult * In pipeline mode, start processing the results of the next query in the queue. */ -void +static void pqPipelineProcessQueue(PGconn *conn) { switch (conn->asyncStatus) @@ -3072,15 +3103,15 @@ PQpipelineSync(PGconn *conn) pqPutMsgEnd(conn) < 0) goto sendFailed; - pqAppendCmdQueueEntry(conn, entry); - /* * Give the data a push. In nonblock mode, don't complain if we're unable * to send it all; PQgetResult() will do any additional flushing needed. */ if (PQflush(conn) < 0) goto sendFailed; - conn->asyncStatus = PGASYNC_BUSY; + + /* OK, it's launched! */ + pqAppendCmdQueueEntry(conn, entry); return 1; @@ -3115,7 +3146,7 @@ PQsendFlushRequest(PGconn *conn) { appendPQExpBufferStr(&conn->errorMessage, libpq_gettext("another command is already in progress\n")); - return false; + return 0; } if (pqPutMsgStart('H', conn) < 0 || diff --git a/src/test/modules/libpq_pipeline/libpq_pipeline.c b/src/test/modules/libpq_pipeline/libpq_pipeline.c index 249ee22105c18..c27c4e0adaf05 100644 --- a/src/test/modules/libpq_pipeline/libpq_pipeline.c +++ b/src/test/modules/libpq_pipeline/libpq_pipeline.c @@ -28,6 +28,8 @@ static void exit_nicely(PGconn *conn); +static bool process_result(PGconn *conn, PGresult *res, int results, + int numsent); const char *const progname = "libpq_pipeline"; @@ -1307,6 +1309,227 @@ test_transaction(PGconn *conn) fprintf(stderr, "ok\n"); } +/* + * In this test mode we send a stream of queries, with one in the middle + * causing an error. Verify that we can still send some more after the + * error and have libpq work properly. + */ +static void +test_uniqviol(PGconn *conn) +{ + int sock = PQsocket(conn); + PGresult *res; + Oid paramTypes[2] = {INT8OID, INT8OID}; + const char *paramValues[2]; + char paramValue0[MAXINT8LEN]; + char paramValue1[MAXINT8LEN]; + int ctr = 0; + int numsent = 0; + int results = 0; + bool read_done = false; + bool write_done = false; + bool error_sent = false; + bool got_error = false; + int switched = 0; + int socketful = 0; + fd_set in_fds; + fd_set out_fds; + + fprintf(stderr, "uniqviol ..."); + + PQsetnonblocking(conn, 1); + + paramValues[0] = paramValue0; + paramValues[1] = paramValue1; + sprintf(paramValue1, "42"); + + res = PQexec(conn, "drop table if exists ppln_uniqviol;" + "create table ppln_uniqviol(id bigint primary key, idata bigint)"); + if (PQresultStatus(res) != PGRES_COMMAND_OK) + pg_fatal("failed to create table: %s", PQerrorMessage(conn)); + + res = PQexec(conn, "begin"); + if (PQresultStatus(res) != PGRES_COMMAND_OK) + pg_fatal("failed to begin transaction: %s", PQerrorMessage(conn)); + + res = PQprepare(conn, "insertion", + "insert into ppln_uniqviol values ($1, $2) returning id", + 2, paramTypes); + if (res == NULL || PQresultStatus(res) != PGRES_COMMAND_OK) + pg_fatal("failed to prepare query: %s", PQerrorMessage(conn)); + + if (PQenterPipelineMode(conn) != 1) + pg_fatal("failed to enter pipeline mode"); + + while (!read_done) + { + /* + * Avoid deadlocks by reading everything the server has sent before + * sending anything. (Special precaution is needed here to process + * PQisBusy before testing the socket for read-readiness, because the + * socket does not turn read-ready after "sending" queries in aborted + * pipeline mode.) + */ + while (PQisBusy(conn) == 0) + { + bool new_error; + + if (results >= numsent) + { + if (write_done) + read_done = true; + break; + } + + res = PQgetResult(conn); + new_error = process_result(conn, res, results, numsent); + if (new_error && got_error) + pg_fatal("got two errors"); + got_error |= new_error; + if (results++ >= numsent - 1) + { + if (write_done) + read_done = true; + break; + } + } + + if (read_done) + break; + + FD_ZERO(&out_fds); + FD_SET(sock, &out_fds); + + FD_ZERO(&in_fds); + FD_SET(sock, &in_fds); + + if (select(sock + 1, &in_fds, write_done ? NULL : &out_fds, NULL, NULL) == -1) + { + if (errno == EINTR) + continue; + pg_fatal("select() failed: %m"); + } + + if (FD_ISSET(sock, &in_fds) && PQconsumeInput(conn) == 0) + pg_fatal("PQconsumeInput failed: %s", PQerrorMessage(conn)); + + /* + * If the socket is writable and we haven't finished sending queries, + * send some. + */ + if (!write_done && FD_ISSET(sock, &out_fds)) + { + for (;;) + { + int flush; + + /* + * provoke uniqueness violation exactly once after having + * switched to read mode. + */ + if (switched >= 1 && !error_sent && ctr % socketful >= socketful / 2) + { + sprintf(paramValue0, "%d", numsent / 2); + fprintf(stderr, "E"); + error_sent = true; + } + else + { + fprintf(stderr, "."); + sprintf(paramValue0, "%d", ctr++); + } + + if (PQsendQueryPrepared(conn, "insertion", 2, paramValues, NULL, NULL, 0) != 1) + pg_fatal("failed to execute prepared query: %s", PQerrorMessage(conn)); + numsent++; + + /* Are we done writing? */ + if (socketful != 0 && numsent % socketful == 42 && error_sent) + { + if (PQsendFlushRequest(conn) != 1) + pg_fatal("failed to send flush request"); + write_done = true; + fprintf(stderr, "\ndone writing\n"); + PQflush(conn); + break; + } + + /* is the outgoing socket full? */ + flush = PQflush(conn); + if (flush == -1) + pg_fatal("failed to flush: %s", PQerrorMessage(conn)); + if (flush == 1) + { + if (socketful == 0) + socketful = numsent; + fprintf(stderr, "\nswitch to reading\n"); + switched++; + break; + } + } + } + } + + if (!got_error) + pg_fatal("did not get expected error"); + + fprintf(stderr, "ok\n"); +} + +/* + * Subroutine for test_uniqviol; given a PGresult, print it out and consume + * the expected NULL that should follow it. + * + * Returns true if we read a fatal error message, otherwise false. + */ +static bool +process_result(PGconn *conn, PGresult *res, int results, int numsent) +{ + PGresult *res2; + bool got_error = false; + + if (res == NULL) + pg_fatal("got unexpected NULL"); + + switch (PQresultStatus(res)) + { + case PGRES_FATAL_ERROR: + got_error = true; + fprintf(stderr, "result %d/%d (error): %s\n", results, numsent, PQerrorMessage(conn)); + PQclear(res); + + res2 = PQgetResult(conn); + if (res2 != NULL) + pg_fatal("expected NULL, got %s", + PQresStatus(PQresultStatus(res2))); + break; + + case PGRES_TUPLES_OK: + fprintf(stderr, "result %d/%d: %s\n", results, numsent, PQgetvalue(res, 0, 0)); + PQclear(res); + + res2 = PQgetResult(conn); + if (res2 != NULL) + pg_fatal("expected NULL, got %s", + PQresStatus(PQresultStatus(res2))); + break; + + case PGRES_PIPELINE_ABORTED: + fprintf(stderr, "result %d/%d: pipeline aborted\n", results, numsent); + res2 = PQgetResult(conn); + if (res2 != NULL) + pg_fatal("expected NULL, got %s", + PQresStatus(PQresultStatus(res2))); + break; + + default: + pg_fatal("got unexpected %s", PQresStatus(PQresultStatus(res))); + } + + return got_error; +} + + static void usage(const char *progname) { @@ -1331,6 +1554,7 @@ print_test_list(void) printf("simple_pipeline\n"); printf("singlerow\n"); printf("transaction\n"); + printf("uniqviol\n"); } int @@ -1436,6 +1660,8 @@ main(int argc, char **argv) test_singlerowmode(conn); else if (strcmp(testname, "transaction") == 0) test_transaction(conn); + else if (strcmp(testname, "uniqviol") == 0) + test_uniqviol(conn); else { fprintf(stderr, "\"%s\" is not a recognized test name\n", testname); From 53c38a086a8001d63401671755638bc95c7fa1c7 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 9 Jul 2021 16:59:07 -0400 Subject: [PATCH 634/671] Un-break AIX build, take 2. I incorrectly diagnosed the reason why hoverfly is unhappy. Looking closer, it appears that it fails to link libldap unless libssl is also present; so the problem was my idea of clearing LIBS before making the check. Revert to essentially the original coding, except that instead of failing when libldap_r isn't there, use libldap. Per buildfarm member hoverfly. Discussion: https://postgr.es/m/17083-a19190d9591946a7@postgresql.org --- configure | 97 +++++++++++++++++++++------------------------------- configure.ac | 26 +++++++------- 2 files changed, 51 insertions(+), 72 deletions(-) diff --git a/configure b/configure index 450241f4ba76d..4ef1d3a73d64d 100755 --- a/configure +++ b/configure @@ -12876,22 +12876,18 @@ fi fi -# Note: We can test for libldap_r only after we know PTHREAD_LIBS +# Note: We can test for libldap_r only after we know PTHREAD_LIBS; +# also, on AIX, we may need to have openssl in LIBS for this step. if test "$with_ldap" = yes ; then _LIBS="$LIBS" if test "$PORTNAME" != "win32"; then - if test "$enable_thread_safety" = yes; then - # Use ldap_r for FE if available, else assume ldap is thread-safe. - # If ldap_r does exist, assume without checking that ldap does too. - # On some platforms ldap_r fails to link without PTHREAD_LIBS; - # also, on AIX we must probe ldap_simple_bind not ldap_bind. - LIBS="" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ldap_simple_bind" >&5 -$as_echo_n "checking for library containing ldap_simple_bind... " >&6; } -if ${ac_cv_search_ldap_simple_bind+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_bind in -lldap" >&5 +$as_echo_n "checking for ldap_bind in -lldap... " >&6; } +if ${ac_cv_lib_ldap_ldap_bind+:} false; then : $as_echo_n "(cached) " >&6 else - ac_func_search_save_LIBS=$LIBS + ac_check_lib_save_LIBS=$LIBS +LIBS="-lldap $EXTRA_LDAP_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12901,59 +12897,49 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #ifdef __cplusplus extern "C" #endif -char ldap_simple_bind (); +char ldap_bind (); int main () { -return ldap_simple_bind (); +return ldap_bind (); ; return 0; } _ACEOF -for ac_lib in '' ldap_r ldap; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_ldap_simple_bind=$ac_res +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ldap_ldap_bind=yes +else + ac_cv_lib_ldap_ldap_bind=no fi rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_ldap_simple_bind+:} false; then : - break + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi -done -if ${ac_cv_search_ldap_simple_bind+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ldap_ldap_bind" >&5 +$as_echo "$ac_cv_lib_ldap_ldap_bind" >&6; } +if test "x$ac_cv_lib_ldap_ldap_bind" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBLDAP 1 +_ACEOF -else - ac_cv_search_ldap_simple_bind=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ldap_simple_bind" >&5 -$as_echo "$ac_cv_search_ldap_simple_bind" >&6; } -ac_res=$ac_cv_search_ldap_simple_bind -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + LIBS="-lldap $LIBS" else as_fn_error $? "library 'ldap' is required for LDAP" "$LINENO" 5 fi - LDAP_LIBS_FE="$LIBS $EXTRA_LDAP_LIBS" - LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_bind in -lldap" >&5 -$as_echo_n "checking for ldap_bind in -lldap... " >&6; } -if ${ac_cv_lib_ldap_ldap_bind+:} false; then : + LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" + if test "$enable_thread_safety" = yes; then + # Use ldap_r for FE if available, else assume ldap is thread-safe. + # On some platforms ldap_r fails to link without PTHREAD_LIBS. + LIBS="$_LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_bind in -lldap_r" >&5 +$as_echo_n "checking for ldap_bind in -lldap_r... " >&6; } +if ${ac_cv_lib_ldap_r_ldap_bind+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lldap $EXTRA_LDAP_LIBS $LIBS" +LIBS="-lldap_r $PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12973,29 +12959,24 @@ return ldap_bind (); } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_ldap_ldap_bind=yes + ac_cv_lib_ldap_r_ldap_bind=yes else - ac_cv_lib_ldap_ldap_bind=no + ac_cv_lib_ldap_r_ldap_bind=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ldap_ldap_bind" >&5 -$as_echo "$ac_cv_lib_ldap_ldap_bind" >&6; } -if test "x$ac_cv_lib_ldap_ldap_bind" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBLDAP 1 -_ACEOF - - LIBS="-lldap $LIBS" - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ldap_r_ldap_bind" >&5 +$as_echo "$ac_cv_lib_ldap_r_ldap_bind" >&6; } +if test "x$ac_cv_lib_ldap_r_ldap_bind" = xyes; then : + LDAP_LIBS_FE="-lldap_r $EXTRA_LDAP_LIBS" else - as_fn_error $? "library 'ldap' is required for LDAP" "$LINENO" 5 + LDAP_LIBS_FE="-lldap $EXTRA_LDAP_LIBS" fi + else LDAP_LIBS_FE="-lldap $EXTRA_LDAP_LIBS" - LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" fi for ac_func in ldap_initialize do : diff --git a/configure.ac b/configure.ac index be825a8113159..5f217c01e3810 100644 --- a/configure.ac +++ b/configure.ac @@ -1285,27 +1285,25 @@ if test "$with_lz4" = yes ; then AC_CHECK_LIB(lz4, LZ4_compress_default, [], [AC_MSG_ERROR([library 'lz4' is required for LZ4 support])]) fi -# Note: We can test for libldap_r only after we know PTHREAD_LIBS +# Note: We can test for libldap_r only after we know PTHREAD_LIBS; +# also, on AIX, we may need to have openssl in LIBS for this step. if test "$with_ldap" = yes ; then _LIBS="$LIBS" if test "$PORTNAME" != "win32"; then + AC_CHECK_LIB(ldap, ldap_bind, [], + [AC_MSG_ERROR([library 'ldap' is required for LDAP])], + [$EXTRA_LDAP_LIBS]) + LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" if test "$enable_thread_safety" = yes; then # Use ldap_r for FE if available, else assume ldap is thread-safe. - # If ldap_r does exist, assume without checking that ldap does too. - # On some platforms ldap_r fails to link without PTHREAD_LIBS; - # also, on AIX we must probe ldap_simple_bind not ldap_bind. - LIBS="" - AC_SEARCH_LIBS(ldap_simple_bind, [ldap_r ldap], [], - [AC_MSG_ERROR([library 'ldap' is required for LDAP])], - [$PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS]) - LDAP_LIBS_FE="$LIBS $EXTRA_LDAP_LIBS" - LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" + # On some platforms ldap_r fails to link without PTHREAD_LIBS. + LIBS="$_LIBS" + AC_CHECK_LIB(ldap_r, ldap_bind, + [LDAP_LIBS_FE="-lldap_r $EXTRA_LDAP_LIBS"], + [LDAP_LIBS_FE="-lldap $EXTRA_LDAP_LIBS"], + [$PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS]) else - AC_CHECK_LIB(ldap, ldap_bind, [], - [AC_MSG_ERROR([library 'ldap' is required for LDAP])], - [$EXTRA_LDAP_LIBS]) LDAP_LIBS_FE="-lldap $EXTRA_LDAP_LIBS" - LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" fi AC_CHECK_FUNCS([ldap_initialize]) else From e7fc488ad67caaad33f6d5177081884495cb81cb Mon Sep 17 00:00:00 2001 From: Dean Rasheed Date: Sat, 10 Jul 2021 12:42:59 +0100 Subject: [PATCH 635/671] Fix numeric_mul() overflow due to too many digits after decimal point. This fixes an overflow error when using the numeric * operator if the result has more than 16383 digits after the decimal point by rounding the result. Overflow errors should only occur if the result has too many digits *before* the decimal point. Discussion: https://postgr.es/m/CAEZATCUmeFWCrq2dNzZpRj5+6LfN85jYiDoqm+ucSXhb9U2TbA@mail.gmail.com --- src/backend/utils/adt/numeric.c | 10 +++++++++- src/test/regress/expected/numeric.out | 6 ++++++ src/test/regress/sql/numeric.sql | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index bc71326fc8af5..2a0f68f98b2af 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -233,6 +233,7 @@ struct NumericData */ #define NUMERIC_DSCALE_MASK 0x3FFF +#define NUMERIC_DSCALE_MAX NUMERIC_DSCALE_MASK #define NUMERIC_SIGN(n) \ (NUMERIC_IS_SHORT(n) ? \ @@ -2958,7 +2959,11 @@ numeric_mul_opt_error(Numeric num1, Numeric num2, bool *have_error) * Unlike add_var() and sub_var(), mul_var() will round its result. In the * case of numeric_mul(), which is invoked for the * operator on numerics, * we request exact representation for the product (rscale = sum(dscale of - * arg1, dscale of arg2)). + * arg1, dscale of arg2)). If the exact result has more digits after the + * decimal point than can be stored in a numeric, we round it. Rounding + * after computing the exact result ensures that the final result is + * correctly rounded (rounding in mul_var() using a truncated product + * would not guarantee this). */ init_var_from_num(num1, &arg1); init_var_from_num(num2, &arg2); @@ -2966,6 +2971,9 @@ numeric_mul_opt_error(Numeric num1, Numeric num2, bool *have_error) init_var(&result); mul_var(&arg1, &arg2, &result, arg1.dscale + arg2.dscale); + if (result.dscale > NUMERIC_DSCALE_MAX) + round_var(&result, NUMERIC_DSCALE_MAX); + res = make_result_opt_error(&result, have_error); free_var(&result); diff --git a/src/test/regress/expected/numeric.out b/src/test/regress/expected/numeric.out index 4ad485130bda0..385e963a75f13 100644 --- a/src/test/regress/expected/numeric.out +++ b/src/test/regress/expected/numeric.out @@ -2145,6 +2145,12 @@ select 4769999999999999999999999999999999999999999999999999999999999999999999999 47699999999999999999999999999999999999999999999999999999999999999999999999999999999999985230000000000000000000000000000000000000000000000000000000000000000000000000000000000001 (1 row) +select trim_scale((0.1 - 2e-16383) * (0.1 - 3e-16383)); + trim_scale +------------ + 0.01 +(1 row) + -- -- Test some corner cases for division -- diff --git a/src/test/regress/sql/numeric.sql b/src/test/regress/sql/numeric.sql index 3784c5253d7ca..7e17c28d51e39 100644 --- a/src/test/regress/sql/numeric.sql +++ b/src/test/regress/sql/numeric.sql @@ -1044,6 +1044,8 @@ select 4770999999999999999999999999999999999999999999999999999999999999999999999 select 4769999999999999999999999999999999999999999999999999999999999999999999999999999999999999 * 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; +select trim_scale((0.1 - 2e-16383) * (0.1 - 3e-16383)); + -- -- Test some corner cases for division -- From 44bd0126c70b5b90e8e2d604833a6476abbbffe6 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sat, 10 Jul 2021 21:45:28 +0900 Subject: [PATCH 636/671] Add more sanity checks in SASL exchanges The following checks are added, to make the SASL infrastructure more aware of defects when implementing new mechanisms: - Detect that no output is generated by a mechanism if an exchange fails in the backend, failing if there is a message waiting to be sent. - Handle zero-length messages in the frontend. The backend handles that already, and SCRAM would complain if sending empty messages as this is not authorized for this mechanism, but other mechanisms may want this capability (the SASL specification allows that). - Make sure that a mechanism generates a message in the middle of the exchange in the frontend. SCRAM, as implemented, respects all these requirements already, and the recent refactoring of SASL done in 9fd8557 helps in documenting that in a cleaner way. Analyzed-by: Jacob Champion Author: Michael Paquier Reviewed-by: Jacob Champion Discussion: https://postgr.es/m/3d2a6f5d50e741117d6baf83eb67ebf1a8a35a11.camel@vmware.com --- src/backend/libpq/auth-sasl.c | 7 +++++++ src/interfaces/libpq/fe-auth-sasl.h | 9 +++++---- src/interfaces/libpq/fe-auth.c | 17 ++++++++++++++++- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/backend/libpq/auth-sasl.c b/src/backend/libpq/auth-sasl.c index 3e4f763b609c7..6cfd90fa214e4 100644 --- a/src/backend/libpq/auth-sasl.c +++ b/src/backend/libpq/auth-sasl.c @@ -171,6 +171,13 @@ CheckSASLAuth(const pg_be_sasl_mech *mech, Port *port, char *shadow_pass, if (output) { + /* + * PG_SASL_EXCHANGE_FAILURE with some output is forbidden by SASL. + * Make sure here that the mechanism used got that right. + */ + if (result == PG_SASL_EXCHANGE_FAILURE) + elog(ERROR, "output message found after SASL exchange failure"); + /* * Negotiation generated data to be sent to the client. */ diff --git a/src/interfaces/libpq/fe-auth-sasl.h b/src/interfaces/libpq/fe-auth-sasl.h index 0aec588a9eb26..3d7ee576f2ae6 100644 --- a/src/interfaces/libpq/fe-auth-sasl.h +++ b/src/interfaces/libpq/fe-auth-sasl.h @@ -78,11 +78,12 @@ typedef struct pg_fe_sasl_mech * Output parameters, to be set by the callback function: * * output: A malloc'd buffer containing the client's response to - * the server, or NULL if the exchange should be aborted. - * (*success should be set to false in the latter case.) + * the server (can be empty), or NULL if the exchange should + * be aborted. (*success should be set to false in the + * latter case.) * - * outputlen: The length of the client response buffer, or zero if no - * data should be sent due to an exchange failure + * outputlen: The length (0 or higher) of the client response buffer, + * ignored if output is NULL. * * done: Set to true if the SASL exchange should not continue, * because the exchange is either complete or failed diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c index eaba0ba56d7e9..3421ed4685bf7 100644 --- a/src/interfaces/libpq/fe-auth.c +++ b/src/interfaces/libpq/fe-auth.c @@ -674,7 +674,22 @@ pg_SASL_continue(PGconn *conn, int payloadlen, bool final) return STATUS_ERROR; } - if (outputlen != 0) + /* + * If the exchange is not completed yet, we need to make sure that the + * SASL mechanism has generated a message to send back. + */ + if (output == NULL && !done) + { + appendPQExpBufferStr(&conn->errorMessage, + libpq_gettext("no client response found after SASL exchange success\n")); + return STATUS_ERROR; + } + + /* + * SASL allows zero-length responses, so this check uses "output" and not + * "outputlen" to allow the case of an empty message. + */ + if (output) { /* * Send the SASL response to the server. From 9f6be2e79f88c65cef7cfeb0580e8b2ba74974f6 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 10 Jul 2021 13:19:30 -0400 Subject: [PATCH 637/671] Fix busted test for ldap_initialize. Sigh ... I was expecting AC_CHECK_LIB to do something it didn't, namely update LIBS. This led to not finding ldap_initialize. Fix by moving the probe for ldap_initialize. In some sense this is more correct anyway, since (at least for now) we care about whether ldap_initialize exists in libldap not libldap_r. Per buildfarm member elver and local testing. Discussion: https://postgr.es/m/17083-a19190d9591946a7@postgresql.org --- configure | 23 ++++++++++++----------- configure.ac | 3 ++- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/configure b/configure index 4ef1d3a73d64d..9f0018b3906f5 100755 --- a/configure +++ b/configure @@ -12929,6 +12929,18 @@ else fi LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" + # This test is carried out against libldap. + for ac_func in ldap_initialize +do : + ac_fn_c_check_func "$LINENO" "ldap_initialize" "ac_cv_func_ldap_initialize" +if test "x$ac_cv_func_ldap_initialize" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LDAP_INITIALIZE 1 +_ACEOF + +fi +done + if test "$enable_thread_safety" = yes; then # Use ldap_r for FE if available, else assume ldap is thread-safe. # On some platforms ldap_r fails to link without PTHREAD_LIBS. @@ -12978,17 +12990,6 @@ fi else LDAP_LIBS_FE="-lldap $EXTRA_LDAP_LIBS" fi - for ac_func in ldap_initialize -do : - ac_fn_c_check_func "$LINENO" "ldap_initialize" "ac_cv_func_ldap_initialize" -if test "x$ac_cv_func_ldap_initialize" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LDAP_INITIALIZE 1 -_ACEOF - -fi -done - else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_bind in -lwldap32" >&5 $as_echo_n "checking for ldap_bind in -lwldap32... " >&6; } diff --git a/configure.ac b/configure.ac index 5f217c01e3810..cfe0a6acc2115 100644 --- a/configure.ac +++ b/configure.ac @@ -1294,6 +1294,8 @@ if test "$with_ldap" = yes ; then [AC_MSG_ERROR([library 'ldap' is required for LDAP])], [$EXTRA_LDAP_LIBS]) LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" + # This test is carried out against libldap. + AC_CHECK_FUNCS([ldap_initialize]) if test "$enable_thread_safety" = yes; then # Use ldap_r for FE if available, else assume ldap is thread-safe. # On some platforms ldap_r fails to link without PTHREAD_LIBS. @@ -1305,7 +1307,6 @@ if test "$with_ldap" = yes ; then else LDAP_LIBS_FE="-lldap $EXTRA_LDAP_LIBS" fi - AC_CHECK_FUNCS([ldap_initialize]) else AC_CHECK_LIB(wldap32, ldap_bind, [], [AC_MSG_ERROR([library 'wldap32' is required for LDAP])]) LDAP_LIBS_FE="-lwldap32" From dd0e37cc1598050ec38fa289908487d4f5c96dca Mon Sep 17 00:00:00 2001 From: Jeff Davis Date: Fri, 9 Jul 2021 14:15:48 -0700 Subject: [PATCH 638/671] Fix assign_record_type_typmod(). If an error occurred in the wrong place, it was possible to leave an unintialized entry in the hash table, leading to a crash. Fixed. Also, be more careful about the order of operations so that an allocation error doesn't leak memory in CacheMemoryContext or unnecessarily advance NextRecordTypmod. Backpatch through version 11. Earlier versions (prior to 35ea75632a5) do not exhibit the problem, because an uninitialized hash entry contains a valid empty list. Author: Sait Talha Nisanci Reviewed-by: Andres Freund Discussion: https://postgr.es/m/HE1PR8303MB009069D476225B9A9E194B8891779@HE1PR8303MB0090.EURPRD83.prod.outlook.com Backpatch-through: 11 --- src/backend/utils/cache/typcache.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cache/typcache.c index 976bd9e61aac1..326fae62e22b1 100644 --- a/src/backend/utils/cache/typcache.c +++ b/src/backend/utils/cache/typcache.c @@ -1968,10 +1968,14 @@ assign_record_type_typmod(TupleDesc tupDesc) CreateCacheMemoryContext(); } - /* Find or create a hashtable entry for this tuple descriptor */ + /* + * Find a hashtable entry for this tuple descriptor. We don't use + * HASH_ENTER yet, because if it's missing, we need to make sure that all + * the allocations succeed before we create the new entry. + */ recentry = (RecordCacheEntry *) hash_search(RecordCacheHash, (void *) &tupDesc, - HASH_ENTER, &found); + HASH_FIND, &found); if (found && recentry->tupdesc != NULL) { tupDesc->tdtypmod = recentry->tupdesc->tdtypmod; @@ -1979,25 +1983,39 @@ assign_record_type_typmod(TupleDesc tupDesc) } /* Not present, so need to manufacture an entry */ - recentry->tupdesc = NULL; oldcxt = MemoryContextSwitchTo(CacheMemoryContext); /* Look in the SharedRecordTypmodRegistry, if attached */ entDesc = find_or_make_matching_shared_tupledesc(tupDesc); if (entDesc == NULL) { + /* + * Make sure we have room before we CreateTupleDescCopy() or advance + * NextRecordTypmod. + */ + ensure_record_cache_typmod_slot_exists(NextRecordTypmod); + /* Reference-counted local cache only. */ entDesc = CreateTupleDescCopy(tupDesc); entDesc->tdrefcount = 1; entDesc->tdtypmod = NextRecordTypmod++; } - ensure_record_cache_typmod_slot_exists(entDesc->tdtypmod); + else + { + ensure_record_cache_typmod_slot_exists(entDesc->tdtypmod); + } + RecordCacheArray[entDesc->tdtypmod] = entDesc; - recentry->tupdesc = entDesc; /* Assign a unique tupdesc identifier, too. */ RecordIdentifierArray[entDesc->tdtypmod] = ++tupledesc_id_counter; + /* Fully initialized; create the hash table entry */ + recentry = (RecordCacheEntry *) hash_search(RecordCacheHash, + (void *) &tupDesc, + HASH_ENTER, NULL); + recentry->tupdesc = entDesc; + /* Update the caller's tuple descriptor. */ tupDesc->tdtypmod = entDesc->tdtypmod; From 0e39a608ed5545cc6b9d538ac937c3c1ee8cdc36 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Sun, 11 Jul 2021 19:50:55 +1200 Subject: [PATCH 639/671] Fix pgbench timestamp bugs. Commit 547f04e changed pgbench to use microsecond accounting, but introduced a couple of logging and aggregation bugs: 1. We print Unix epoch timestamps so that you can correlate them with other logs, but these were inadvertently changed to use a system-dependent reference epoch. Compute Unix timestamps, and begin aggregation intervals on the boundaries of whole Unix epoch seconds, as before. 2. The user-supplied aggregation interval needed to be scaled. Back-patch to 14. Author: Fabien COELHO Author: Yugo NAGATA Author: Kyotaro Horiguchi Reported-by: YoungHwan Joo Reported-by: Gregory Smith Discussion: https://postgr.es/m/CAF7igB1r6wRfSCEAB-iZBKxkowWY6%2BdFF2jObSdd9%2BiVK%2BvHJg%40mail.gmail.com Discussion: https://postgr.es/m/CAHLJuCW_8Vpcr0%3Dt6O_gozrg3wXXWXZXDioYJd3NhvKriqgpfQ%40mail.gmail.com --- src/bin/pgbench/pgbench.c | 43 +++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index 4aeccd93af87a..364b5a2e47d01 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -343,6 +343,12 @@ typedef struct StatsData SimpleStats lag; } StatsData; +/* + * For displaying Unix epoch timestamps, as some time functions may have + * another reference. + */ +pg_time_usec_t epoch_shift; + /* * Struct to keep random state. */ @@ -3772,16 +3778,17 @@ executeMetaCommand(CState *st, pg_time_usec_t *now) * Print log entry after completing one transaction. * * We print Unix-epoch timestamps in the log, so that entries can be - * correlated against other logs. On some platforms this could be obtained - * from the caller, but rather than get entangled with that, we just eat - * the cost of an extra syscall in all cases. + * correlated against other logs. + * + * XXX We could obtain the time from the caller and just shift it here, to + * avoid the cost of an extra call to pg_time_now(). */ static void doLog(TState *thread, CState *st, StatsData *agg, bool skipped, double latency, double lag) { FILE *logfile = thread->logfile; - pg_time_usec_t now = pg_time_now(); + pg_time_usec_t now = pg_time_now() + epoch_shift; Assert(use_log); @@ -3796,17 +3803,19 @@ doLog(TState *thread, CState *st, /* should we aggregate the results or not? */ if (agg_interval > 0) { + pg_time_usec_t next; + /* * Loop until we reach the interval of the current moment, and print * any empty intervals in between (this may happen with very low tps, * e.g. --rate=0.1). */ - while (agg->start_time + agg_interval <= now) + while ((next = agg->start_time + agg_interval * INT64CONST(1000000)) <= now) { /* print aggregated report to logfile */ fprintf(logfile, INT64_FORMAT " " INT64_FORMAT " %.0f %.0f %.0f %.0f", - agg->start_time, + agg->start_time / 1000000, /* seconds since Unix epoch */ agg->cnt, agg->latency.sum, agg->latency.sum2, @@ -3825,7 +3834,7 @@ doLog(TState *thread, CState *st, fputc('\n', logfile); /* reset data and move to next interval */ - initStats(agg, agg->start_time + agg_interval); + initStats(agg, next); } /* accumulate the current transaction */ @@ -5458,7 +5467,8 @@ printProgressReport(TState *threads, int64 test_start, pg_time_usec_t now, if (progress_timestamp) { - snprintf(tbuf, sizeof(tbuf), "%.3f s", PG_TIME_GET_DOUBLE(now)); + snprintf(tbuf, sizeof(tbuf), "%.3f s", + PG_TIME_GET_DOUBLE(now + epoch_shift)); } else { @@ -5808,6 +5818,14 @@ main(int argc, char **argv) char *env; int exit_code = 0; + struct timeval tv; + + /* + * Record difference between Unix time and instr_time time. We'll use + * this for logging and aggregation. + */ + gettimeofday(&tv, NULL); + epoch_shift = tv.tv_sec * INT64CONST(1000000) + tv.tv_usec - pg_time_now(); pg_logging_init(argv[0]); progname = get_progname(argv[0]); @@ -6637,7 +6655,14 @@ threadRun(void *arg) thread->bench_start = start; thread->throttle_trigger = start; - initStats(&aggs, start); + /* + * The log format currently has Unix epoch timestamps with whole numbers + * of seconds. Round the first aggregate's start time down to the nearest + * Unix epoch second (the very first aggregate might really have started a + * fraction of a second later, but later aggregates are measured from the + * whole number time that is actually logged). + */ + initStats(&aggs, (start + epoch_shift) / 1000000 * 1000000); last = aggs; /* loop till all clients have terminated */ From 626731db26ae2617e41536678440c3817128a006 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 11 Jul 2021 12:54:24 -0400 Subject: [PATCH 640/671] Lock the extension during ALTER EXTENSION ADD/DROP. Although we were careful to lock the object being added or dropped, we failed to get any sort of lock on the extension itself. This allowed the ALTER to proceed in parallel with a DROP EXTENSION, which is problematic for a couple of reasons. If both commands succeeded we'd be left with a dangling link in pg_depend, which would cause problems later. Also, if the ALTER failed for some reason, it might try to print the extension's name, and that could result in a crash or (in older branches) a silly error message complaining about extension "(null)". Per bug #17098 from Alexander Lakhin. Back-patch to all supported branches. Discussion: https://postgr.es/m/17098-b960f3616c861f83@postgresql.org --- src/backend/commands/extension.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index 41857feda9f5c..b37009bfec41f 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -3302,9 +3302,17 @@ ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt, break; } - extension.classId = ExtensionRelationId; - extension.objectId = get_extension_oid(stmt->extname, false); - extension.objectSubId = 0; + /* + * Find the extension and acquire a lock on it, to ensure it doesn't get + * dropped concurrently. A sharable lock seems sufficient: there's no + * reason not to allow other sorts of manipulations, such as add/drop of + * other objects, to occur concurrently. Concurrently adding/dropping the + * *same* object would be bad, but we prevent that by using a non-sharable + * lock on the individual object, below. + */ + extension = get_object_address(OBJECT_EXTENSION, + (Node *) makeString(stmt->extname), + &relation, AccessShareLock, false); /* Permission check: must own extension */ if (!pg_extension_ownercheck(extension.objectId, GetUserId())) From 127404fbe28455d6e8183fa58f3b7aefeba8f909 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 12 Jul 2021 11:05:27 +0900 Subject: [PATCH 641/671] pageinspect: Improve page_header() for pages of 32kB ld_upper, ld_lower, pd_special and the page size have been using smallint as return type, which could cause those fields to return negative values in certain cases for builds configures with a page size of 32kB. Bump pageinspect to 1.10. page_header() is able to handle the correct return type of those fields at runtime when using an older version of the extension, with some tests are added to cover that. Author: Quan Zongliang Reviewed-by: Michael Paquier, Bharath Rupireddy Discussion: https://postgr.es/m/8b8ec36e-61fe-14f9-005d-07bc85aa4eed@yeah.net --- contrib/pageinspect/Makefile | 2 +- .../pageinspect/expected/oldextversions.out | 16 ++++++++++ .../pageinspect/pageinspect--1.9--1.10.sql | 21 +++++++++++++ contrib/pageinspect/pageinspect.control | 2 +- contrib/pageinspect/rawpage.c | 31 ++++++++++++++++--- contrib/pageinspect/sql/oldextversions.sql | 6 ++++ 6 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 contrib/pageinspect/pageinspect--1.9--1.10.sql diff --git a/contrib/pageinspect/Makefile b/contrib/pageinspect/Makefile index 2d330ddb2857d..5c0736564abdc 100644 --- a/contrib/pageinspect/Makefile +++ b/contrib/pageinspect/Makefile @@ -13,7 +13,7 @@ OBJS = \ rawpage.o EXTENSION = pageinspect -DATA = pageinspect--1.8--1.9.sql \ +DATA = pageinspect--1.9--1.10.sql pageinspect--1.8--1.9.sql \ pageinspect--1.7--1.8.sql pageinspect--1.6--1.7.sql \ pageinspect--1.5.sql pageinspect--1.5--1.6.sql \ pageinspect--1.4--1.5.sql pageinspect--1.3--1.4.sql \ diff --git a/contrib/pageinspect/expected/oldextversions.out b/contrib/pageinspect/expected/oldextversions.out index 04dc7f8640eba..f5c4b61bd793f 100644 --- a/contrib/pageinspect/expected/oldextversions.out +++ b/contrib/pageinspect/expected/oldextversions.out @@ -36,5 +36,21 @@ SELECT * FROM bt_page_items('test1_a_idx', 1); 1 | (0,1) | 16 | f | f | 01 00 00 00 00 00 00 01 | f | (0,1) | (1 row) +-- page_header() uses int instead of smallint for lower, upper, special and +-- pagesize in pageinspect >= 1.10. +ALTER EXTENSION pageinspect UPDATE TO '1.9'; +\df page_header + List of functions + Schema | Name | Result data type | Argument data types | Type +--------+-------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------ + public | page_header | record | page bytea, OUT lsn pg_lsn, OUT checksum smallint, OUT flags smallint, OUT lower smallint, OUT upper smallint, OUT special smallint, OUT pagesize smallint, OUT version smallint, OUT prune_xid xid | func +(1 row) + +SELECT pagesize, version FROM page_header(get_raw_page('test1', 0)); + pagesize | version +----------+--------- + 8192 | 4 +(1 row) + DROP TABLE test1; DROP EXTENSION pageinspect; diff --git a/contrib/pageinspect/pageinspect--1.9--1.10.sql b/contrib/pageinspect/pageinspect--1.9--1.10.sql new file mode 100644 index 0000000000000..8dd9a27505390 --- /dev/null +++ b/contrib/pageinspect/pageinspect--1.9--1.10.sql @@ -0,0 +1,21 @@ +/* contrib/pageinspect/pageinspect--1.9--1.10.sql */ + +-- complain if script is sourced in psql, rather than via ALTER EXTENSION +\echo Use "ALTER EXTENSION pageinspect UPDATE TO '1.10'" to load this file. \quit + +-- +-- page_header() +-- +DROP FUNCTION page_header(IN page bytea); +CREATE FUNCTION page_header(IN page bytea, + OUT lsn pg_lsn, + OUT checksum smallint, + OUT flags smallint, + OUT lower int, + OUT upper int, + OUT special int, + OUT pagesize int, + OUT version smallint, + OUT prune_xid xid) +AS 'MODULE_PATHNAME', 'page_header' +LANGUAGE C STRICT PARALLEL SAFE; diff --git a/contrib/pageinspect/pageinspect.control b/contrib/pageinspect/pageinspect.control index bd716769a174c..7cdf37913dae2 100644 --- a/contrib/pageinspect/pageinspect.control +++ b/contrib/pageinspect/pageinspect.control @@ -1,5 +1,5 @@ # pageinspect extension comment = 'inspect the contents of database pages at a low level' -default_version = '1.9' +default_version = '1.10' module_pathname = '$libdir/pageinspect' relocatable = true diff --git a/contrib/pageinspect/rawpage.c b/contrib/pageinspect/rawpage.c index e9fee73bc436f..4bfa346c24a2b 100644 --- a/contrib/pageinspect/rawpage.c +++ b/contrib/pageinspect/rawpage.c @@ -296,10 +296,33 @@ page_header(PG_FUNCTION_ARGS) values[0] = LSNGetDatum(lsn); values[1] = UInt16GetDatum(page->pd_checksum); values[2] = UInt16GetDatum(page->pd_flags); - values[3] = UInt16GetDatum(page->pd_lower); - values[4] = UInt16GetDatum(page->pd_upper); - values[5] = UInt16GetDatum(page->pd_special); - values[6] = UInt16GetDatum(PageGetPageSize(page)); + + /* pageinspect >= 1.10 uses int4 instead of int2 for those fields */ + switch (TupleDescAttr(tupdesc, 3)->atttypid) + { + case INT2OID: + Assert(TupleDescAttr(tupdesc, 4)->atttypid == INT2OID && + TupleDescAttr(tupdesc, 5)->atttypid == INT2OID && + TupleDescAttr(tupdesc, 6)->atttypid == INT2OID); + values[3] = UInt16GetDatum(page->pd_lower); + values[4] = UInt16GetDatum(page->pd_upper); + values[5] = UInt16GetDatum(page->pd_special); + values[6] = UInt16GetDatum(PageGetPageSize(page)); + break; + case INT4OID: + Assert(TupleDescAttr(tupdesc, 4)->atttypid == INT4OID && + TupleDescAttr(tupdesc, 5)->atttypid == INT4OID && + TupleDescAttr(tupdesc, 6)->atttypid == INT4OID); + values[3] = Int32GetDatum(page->pd_lower); + values[4] = Int32GetDatum(page->pd_upper); + values[5] = Int32GetDatum(page->pd_special); + values[6] = Int32GetDatum(PageGetPageSize(page)); + break; + default: + elog(ERROR, "incorrect output types"); + break; + } + values[7] = UInt16GetDatum(PageGetPageLayoutVersion(page)); values[8] = TransactionIdGetDatum(page->pd_prune_xid); diff --git a/contrib/pageinspect/sql/oldextversions.sql b/contrib/pageinspect/sql/oldextversions.sql index 78e08f40e8247..9f953492c23c3 100644 --- a/contrib/pageinspect/sql/oldextversions.sql +++ b/contrib/pageinspect/sql/oldextversions.sql @@ -16,5 +16,11 @@ SELECT page_checksum(get_raw_page('test1', 0), 0) IS NOT NULL AS silly_checksum_ SELECT * FROM bt_page_stats('test1_a_idx', 1); SELECT * FROM bt_page_items('test1_a_idx', 1); +-- page_header() uses int instead of smallint for lower, upper, special and +-- pagesize in pageinspect >= 1.10. +ALTER EXTENSION pageinspect UPDATE TO '1.9'; +\df page_header +SELECT pagesize, version FROM page_header(get_raw_page('test1', 0)); + DROP TABLE test1; DROP EXTENSION pageinspect; From 54fb8c7ddf152629021cab3ac3596354217b7d81 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 12 Jul 2021 13:02:31 +0900 Subject: [PATCH 642/671] Fix issues with Windows' stat() for files pending on deletion The code introduced by bed9075 to enhance the stat() implementation on Windows for file sizes larger than 4GB fails to properly detect files pending for deletion with its method based on NtQueryInformationFile() or GetFileInformationByHandleEx(), as proved by Alexander Lakhin in a custom TAP test of his own. The method used in the implementation of open() to sleep and loop when when failing on ERROR_ACCESS_DENIED (EACCES) is showing much more stability, so switch to this method. This could still lead to issues if the permission problem stays around for much longer than the timeout of 1 second used, but that should (hopefully) never happen in performance-critical paths. Still, there could be a point in increasing the timeouts for the sake of machines that handle heavy loads. Note that WIN32's open() now uses microsoft_native_stat() as it should be similar to stat() when working around issues with concurrent file deletions. I have spent some time testing this patch with pgbench in combination of the SQL functions from genfile.c, as well as running the TAP test provided on the thread with MSVC builds, and this looks much more stable than the previous method. Author: Alexander Lakhin Reviewed-by: Tom Lane, Michael Paquier, Justin Pryzby Discussion: https://postgr.es/m/c3427edf-d7c0-ff57-90f6-b5de3bb62709@gmail.com Backpatch-through: 14 --- src/port/open.c | 4 +- src/port/win32stat.c | 177 ++++++++++++------------------------------- 2 files changed, 49 insertions(+), 132 deletions(-) diff --git a/src/port/open.c b/src/port/open.c index 14c6debba915c..4bd11ca9d9028 100644 --- a/src/port/open.c +++ b/src/port/open.c @@ -157,9 +157,9 @@ pgwin32_open(const char *fileName, int fileFlags,...) { if (loops < 10) { - struct stat st; + struct microsoft_native_stat st; - if (stat(fileName, &st) != 0) + if (microsoft_native_stat(fileName, &st) != 0) { pg_usleep(100000); loops++; diff --git a/src/port/win32stat.c b/src/port/win32stat.c index 2ad8ee13595c9..0257956f46b70 100644 --- a/src/port/win32stat.c +++ b/src/port/win32stat.c @@ -18,53 +18,6 @@ #include "c.h" #include -/* - * In order to support MinGW and MSVC2013 we use NtQueryInformationFile as an - * alternative for GetFileInformationByHandleEx. It is loaded from the ntdll - * library. - */ -#if _WIN32_WINNT < 0x0600 -#include - -#if !defined(__MINGW32__) && !defined(__MINGW64__) -/* MinGW includes this in , but it is missing in MSVC */ -typedef struct _FILE_STANDARD_INFORMATION -{ - LARGE_INTEGER AllocationSize; - LARGE_INTEGER EndOfFile; - ULONG NumberOfLinks; - BOOLEAN DeletePending; - BOOLEAN Directory; -} FILE_STANDARD_INFORMATION; -#define FileStandardInformation 5 -#endif /* !defined(__MINGW32__) && - * !defined(__MINGW64__) */ - -typedef NTSTATUS (NTAPI * PFN_NTQUERYINFORMATIONFILE) - (IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID FileInformation, - IN ULONG Length, - IN FILE_INFORMATION_CLASS FileInformationClass); - -static PFN_NTQUERYINFORMATIONFILE _NtQueryInformationFile = NULL; - -static HMODULE ntdll = NULL; - -/* - * Load DLL file just once regardless of how many functions we load/call in it. - */ -static void -LoadNtdll(void) -{ - if (ntdll != NULL) - return; - ntdll = LoadLibraryEx("ntdll.dll", NULL, 0); -} - -#endif /* _WIN32_WINNT < 0x0600 */ - - /* * Convert a FILETIME struct into a 64 bit time_t. */ @@ -163,115 +116,79 @@ _pgstat64(const char *name, struct stat *buf) { /* * We must use a handle so lstat() returns the information of the target - * file. To have a reliable test for ERROR_DELETE_PENDING, we use - * NtQueryInformationFile from Windows 2000 or - * GetFileInformationByHandleEx from Server 2008 / Vista. + * file. To have a reliable test for ERROR_DELETE_PENDING, this uses a + * method similar to open() with a loop using stat() and some waits when + * facing ERROR_ACCESS_DENIED. */ SECURITY_ATTRIBUTES sa; HANDLE hFile; int ret; -#if _WIN32_WINNT < 0x0600 - IO_STATUS_BLOCK ioStatus; - FILE_STANDARD_INFORMATION standardInfo; -#else - FILE_STANDARD_INFO standardInfo; -#endif + int loops = 0; if (name == NULL || buf == NULL) { errno = EINVAL; return -1; } - /* fast not-exists check */ if (GetFileAttributes(name) == INVALID_FILE_ATTRIBUTES) - { - _dosmaperr(GetLastError()); - return -1; - } - - /* get a file handle as lightweight as we can */ - sa.nLength = sizeof(SECURITY_ATTRIBUTES); - sa.bInheritHandle = TRUE; - sa.lpSecurityDescriptor = NULL; - hFile = CreateFile(name, - GENERIC_READ, - (FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE), - &sa, - OPEN_EXISTING, - (FILE_FLAG_NO_BUFFERING | FILE_FLAG_BACKUP_SEMANTICS | - FILE_FLAG_OVERLAPPED), - NULL); - if (hFile == INVALID_HANDLE_VALUE) { DWORD err = GetLastError(); - CloseHandle(hFile); - _dosmaperr(err); - return -1; - } - - memset(&standardInfo, 0, sizeof(standardInfo)); - -#if _WIN32_WINNT < 0x0600 - if (_NtQueryInformationFile == NULL) - { - /* First time through: load ntdll.dll and find NtQueryInformationFile */ - LoadNtdll(); - if (ntdll == NULL) - { - DWORD err = GetLastError(); - - CloseHandle(hFile); - _dosmaperr(err); - return -1; - } - - _NtQueryInformationFile = (PFN_NTQUERYINFORMATIONFILE) (pg_funcptr_t) - GetProcAddress(ntdll, "NtQueryInformationFile"); - if (_NtQueryInformationFile == NULL) + if (err != ERROR_ACCESS_DENIED) { - DWORD err = GetLastError(); - - CloseHandle(hFile); _dosmaperr(err); return -1; } } - if (!NT_SUCCESS(_NtQueryInformationFile(hFile, &ioStatus, &standardInfo, - sizeof(standardInfo), - FileStandardInformation))) - { - DWORD err = GetLastError(); - - CloseHandle(hFile); - _dosmaperr(err); - return -1; - } -#else - if (!GetFileInformationByHandleEx(hFile, FileStandardInfo, &standardInfo, - sizeof(standardInfo))) + /* get a file handle as lightweight as we can */ + sa.nLength = sizeof(SECURITY_ATTRIBUTES); + sa.bInheritHandle = TRUE; + sa.lpSecurityDescriptor = NULL; + while ((hFile = CreateFile(name, + GENERIC_READ, + (FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE), + &sa, + OPEN_EXISTING, + (FILE_FLAG_NO_BUFFERING | FILE_FLAG_BACKUP_SEMANTICS | + FILE_FLAG_OVERLAPPED), + NULL)) == INVALID_HANDLE_VALUE) { DWORD err = GetLastError(); - CloseHandle(hFile); - _dosmaperr(err); - return -1; - } -#endif /* _WIN32_WINNT < 0x0600 */ - - if (standardInfo.DeletePending) - { /* - * File has been deleted, but is not gone from the filesystem yet. - * This can happen when some process with FILE_SHARE_DELETE has it - * open, and it will be fully removed once that handle is closed. - * Meanwhile, we can't open it, so indicate that the file just doesn't - * exist. + * ERROR_ACCESS_DENIED is returned if the file is deleted but not yet + * gone (Windows NT status code is STATUS_DELETE_PENDING). In that + * case we want to wait a bit and try again, giving up after 1 second + * (since this condition should never persist very long). However, + * there are other commonly-hit cases that return ERROR_ACCESS_DENIED, + * so care is needed. In particular that happens if we try to open a + * directory, or of course if there's an actual file-permissions + * problem. To distinguish these cases, try a stat(). In the + * delete-pending case, it will either also get STATUS_DELETE_PENDING, + * or it will see the file as gone and fail with ENOENT. In other + * cases it will usually succeed. The only somewhat-likely case where + * this coding will uselessly wait is if there's a permissions problem + * with a containing directory, which we hope will never happen in any + * performance-critical code paths. */ - CloseHandle(hFile); - errno = ENOENT; + if (err == ERROR_ACCESS_DENIED) + { + if (loops < 10) + { + struct microsoft_native_stat st; + + if (microsoft_native_stat(name, &st) != 0) + { + pg_usleep(100000); + loops++; + continue; + } + } + } + + _dosmaperr(err); return -1; } From 2c9b46c090e76c62f24563b9be2c34e6b92e9329 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 12 Jul 2021 14:46:08 +0900 Subject: [PATCH 643/671] Revert "Fix issues with Windows' stat() for files pending on deletion" This reverts commit 54fb8c7, as per the issues reported by fairywren when it comes to MinGW because of the lack of microsoft_native_stat() there. Using just stat() for MSVC is not sufficient to take care of the concurrency problems with files pending on deletion. It may be possible to paint some __MINGW64__ in the code to switch to a different implementation of stat() in this build context, but I am not sure either if relying on the implementation of stat() in MinGW to take care of the problems we are trying to fix is enough or not. So this needs more study. Discussion: https://postgr.es/m/YOvOlfRrIO0yGtgw@paquier.xyz Backpatch-through: 14 --- src/port/open.c | 4 +- src/port/win32stat.c | 177 +++++++++++++++++++++++++++++++------------ 2 files changed, 132 insertions(+), 49 deletions(-) diff --git a/src/port/open.c b/src/port/open.c index 4bd11ca9d9028..14c6debba915c 100644 --- a/src/port/open.c +++ b/src/port/open.c @@ -157,9 +157,9 @@ pgwin32_open(const char *fileName, int fileFlags,...) { if (loops < 10) { - struct microsoft_native_stat st; + struct stat st; - if (microsoft_native_stat(fileName, &st) != 0) + if (stat(fileName, &st) != 0) { pg_usleep(100000); loops++; diff --git a/src/port/win32stat.c b/src/port/win32stat.c index 0257956f46b70..2ad8ee13595c9 100644 --- a/src/port/win32stat.c +++ b/src/port/win32stat.c @@ -18,6 +18,53 @@ #include "c.h" #include +/* + * In order to support MinGW and MSVC2013 we use NtQueryInformationFile as an + * alternative for GetFileInformationByHandleEx. It is loaded from the ntdll + * library. + */ +#if _WIN32_WINNT < 0x0600 +#include + +#if !defined(__MINGW32__) && !defined(__MINGW64__) +/* MinGW includes this in , but it is missing in MSVC */ +typedef struct _FILE_STANDARD_INFORMATION +{ + LARGE_INTEGER AllocationSize; + LARGE_INTEGER EndOfFile; + ULONG NumberOfLinks; + BOOLEAN DeletePending; + BOOLEAN Directory; +} FILE_STANDARD_INFORMATION; +#define FileStandardInformation 5 +#endif /* !defined(__MINGW32__) && + * !defined(__MINGW64__) */ + +typedef NTSTATUS (NTAPI * PFN_NTQUERYINFORMATIONFILE) + (IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass); + +static PFN_NTQUERYINFORMATIONFILE _NtQueryInformationFile = NULL; + +static HMODULE ntdll = NULL; + +/* + * Load DLL file just once regardless of how many functions we load/call in it. + */ +static void +LoadNtdll(void) +{ + if (ntdll != NULL) + return; + ntdll = LoadLibraryEx("ntdll.dll", NULL, 0); +} + +#endif /* _WIN32_WINNT < 0x0600 */ + + /* * Convert a FILETIME struct into a 64 bit time_t. */ @@ -116,81 +163,117 @@ _pgstat64(const char *name, struct stat *buf) { /* * We must use a handle so lstat() returns the information of the target - * file. To have a reliable test for ERROR_DELETE_PENDING, this uses a - * method similar to open() with a loop using stat() and some waits when - * facing ERROR_ACCESS_DENIED. + * file. To have a reliable test for ERROR_DELETE_PENDING, we use + * NtQueryInformationFile from Windows 2000 or + * GetFileInformationByHandleEx from Server 2008 / Vista. */ SECURITY_ATTRIBUTES sa; HANDLE hFile; int ret; - int loops = 0; +#if _WIN32_WINNT < 0x0600 + IO_STATUS_BLOCK ioStatus; + FILE_STANDARD_INFORMATION standardInfo; +#else + FILE_STANDARD_INFO standardInfo; +#endif if (name == NULL || buf == NULL) { errno = EINVAL; return -1; } + /* fast not-exists check */ if (GetFileAttributes(name) == INVALID_FILE_ATTRIBUTES) { - DWORD err = GetLastError(); - - if (err != ERROR_ACCESS_DENIED) - { - _dosmaperr(err); - return -1; - } + _dosmaperr(GetLastError()); + return -1; } /* get a file handle as lightweight as we can */ sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = TRUE; sa.lpSecurityDescriptor = NULL; - while ((hFile = CreateFile(name, - GENERIC_READ, - (FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE), - &sa, - OPEN_EXISTING, - (FILE_FLAG_NO_BUFFERING | FILE_FLAG_BACKUP_SEMANTICS | - FILE_FLAG_OVERLAPPED), - NULL)) == INVALID_HANDLE_VALUE) + hFile = CreateFile(name, + GENERIC_READ, + (FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE), + &sa, + OPEN_EXISTING, + (FILE_FLAG_NO_BUFFERING | FILE_FLAG_BACKUP_SEMANTICS | + FILE_FLAG_OVERLAPPED), + NULL); + if (hFile == INVALID_HANDLE_VALUE) { DWORD err = GetLastError(); - /* - * ERROR_ACCESS_DENIED is returned if the file is deleted but not yet - * gone (Windows NT status code is STATUS_DELETE_PENDING). In that - * case we want to wait a bit and try again, giving up after 1 second - * (since this condition should never persist very long). However, - * there are other commonly-hit cases that return ERROR_ACCESS_DENIED, - * so care is needed. In particular that happens if we try to open a - * directory, or of course if there's an actual file-permissions - * problem. To distinguish these cases, try a stat(). In the - * delete-pending case, it will either also get STATUS_DELETE_PENDING, - * or it will see the file as gone and fail with ENOENT. In other - * cases it will usually succeed. The only somewhat-likely case where - * this coding will uselessly wait is if there's a permissions problem - * with a containing directory, which we hope will never happen in any - * performance-critical code paths. - */ - if (err == ERROR_ACCESS_DENIED) + CloseHandle(hFile); + _dosmaperr(err); + return -1; + } + + memset(&standardInfo, 0, sizeof(standardInfo)); + +#if _WIN32_WINNT < 0x0600 + if (_NtQueryInformationFile == NULL) + { + /* First time through: load ntdll.dll and find NtQueryInformationFile */ + LoadNtdll(); + if (ntdll == NULL) + { + DWORD err = GetLastError(); + + CloseHandle(hFile); + _dosmaperr(err); + return -1; + } + + _NtQueryInformationFile = (PFN_NTQUERYINFORMATIONFILE) (pg_funcptr_t) + GetProcAddress(ntdll, "NtQueryInformationFile"); + if (_NtQueryInformationFile == NULL) { - if (loops < 10) - { - struct microsoft_native_stat st; - - if (microsoft_native_stat(name, &st) != 0) - { - pg_usleep(100000); - loops++; - continue; - } - } + DWORD err = GetLastError(); + + CloseHandle(hFile); + _dosmaperr(err); + return -1; } + } + if (!NT_SUCCESS(_NtQueryInformationFile(hFile, &ioStatus, &standardInfo, + sizeof(standardInfo), + FileStandardInformation))) + { + DWORD err = GetLastError(); + + CloseHandle(hFile); + _dosmaperr(err); + return -1; + } +#else + if (!GetFileInformationByHandleEx(hFile, FileStandardInfo, &standardInfo, + sizeof(standardInfo))) + { + DWORD err = GetLastError(); + + CloseHandle(hFile); _dosmaperr(err); return -1; } +#endif /* _WIN32_WINNT < 0x0600 */ + + if (standardInfo.DeletePending) + { + /* + * File has been deleted, but is not gone from the filesystem yet. + * This can happen when some process with FILE_SHARE_DELETE has it + * open, and it will be fully removed once that handle is closed. + * Meanwhile, we can't open it, so indicate that the file just doesn't + * exist. + */ + CloseHandle(hFile); + errno = ENOENT; + return -1; + } /* At last we can invoke fileinfo_to_stat */ ret = fileinfo_to_stat(hFile, buf); From 4c64b51dc51f8ff7e3e51eebfe8d10469a577df1 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Mon, 12 Jul 2021 11:13:33 +0300 Subject: [PATCH 644/671] Remove dead assignment to local variable. This should have been removed in commit 7e30c186da, which split the loop into two. Only the first loop uses the 'from' variable; updating it in the second loop is bogus. It was never read after the first loop, so this was harmless and surely optimized away by the compiler, but let's be tidy. Backpatch to all supported versions. Author: Ranier Vilela Discussion: https://www.postgresql.org/message-id/CAEudQAoWq%2BAL3BnELHu7gms2GN07k-np6yLbukGaxJ1vY-zeiQ%40mail.gmail.com --- src/backend/access/nbtree/nbtxlog.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c index c2e920f159ccb..786c08c0cea8a 100644 --- a/src/backend/access/nbtree/nbtxlog.c +++ b/src/backend/access/nbtree/nbtxlog.c @@ -77,7 +77,6 @@ _bt_restore_page(Page page, char *from, int len) if (PageAddItem(page, items[i], itemsizes[i], nitems - i, false, false) == InvalidOffsetNumber) elog(PANIC, "_bt_restore_page: cannot add item to page"); - from += itemsz; } } From 5b60cf35f566697030a2895dfe27dde2e34dd370 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 12 Jul 2021 22:07:35 +0200 Subject: [PATCH 645/671] doc: Fix typo in function prototype --- doc/src/sgml/indexam.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/indexam.sgml b/doc/src/sgml/indexam.sgml index b2326b72e3cf2..ceee5f3580c92 100644 --- a/doc/src/sgml/indexam.sgml +++ b/doc/src/sgml/indexam.sgml @@ -629,7 +629,7 @@ amrescan (IndexScanDesc scan, -boolean +bool amgettuple (IndexScanDesc scan, ScanDirection direction); From f10f0ae420ee62400876ab34dca2c09c20dcd030 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 12 Jul 2021 17:01:29 -0400 Subject: [PATCH 646/671] Replace RelationOpenSmgr() with RelationGetSmgr(). The idea behind this patch is to design out bugs like the one fixed by commit 9d523119f. Previously, once one did RelationOpenSmgr(rel), it was considered okay to access rel->rd_smgr directly for some not-very-clear interval. But since that pointer will be cleared by relcache flushes, we had bugs arising from overreliance on a previous RelationOpenSmgr call still being effective. Now, very little code except that in rel.h and relcache.c should ever touch the rd_smgr field directly. The normal coding rule is to use RelationGetSmgr(rel) and not expect the result to be valid for longer than one smgr function call. There are a couple of places where using the function every single time seemed like overkill, but they are now annotated with large warning comments. Amul Sul, after an idea of mine. Discussion: https://postgr.es/m/CANiYTQsU7yMFpQYnv=BrcRVqK_3U3mtAzAsJCaqtzsDHfsUbdQ@mail.gmail.com --- contrib/amcheck/verify_nbtree.c | 3 +- contrib/bloom/blinsert.c | 6 +-- contrib/pg_prewarm/autoprewarm.c | 4 +- contrib/pg_prewarm/pg_prewarm.c | 5 +-- contrib/pg_visibility/pg_visibility.c | 6 +-- src/backend/access/gist/gistbuild.c | 14 +++--- src/backend/access/hash/hashpage.c | 4 +- src/backend/access/heap/heapam_handler.c | 7 ++- src/backend/access/heap/rewriteheap.c | 15 ++----- src/backend/access/heap/visibilitymap.c | 53 ++++++++++++----------- src/backend/access/nbtree/nbtree.c | 6 +-- src/backend/access/nbtree/nbtsort.c | 14 ++---- src/backend/access/spgist/spginsert.c | 14 +++--- src/backend/access/table/tableam.c | 7 +-- src/backend/catalog/heap.c | 2 - src/backend/catalog/index.c | 5 +-- src/backend/catalog/storage.c | 46 +++++++++++++------- src/backend/commands/tablecmds.c | 7 ++- src/backend/storage/buffer/bufmgr.c | 24 +++------- src/backend/storage/freespace/freespace.c | 52 +++++++++++++--------- src/include/utils/rel.h | 37 ++++++++++------ 21 files changed, 165 insertions(+), 166 deletions(-) diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c index fdfc320e84f9b..d19f73127cd46 100644 --- a/contrib/amcheck/verify_nbtree.c +++ b/contrib/amcheck/verify_nbtree.c @@ -301,8 +301,7 @@ bt_index_check_internal(Oid indrelid, bool parentcheck, bool heapallindexed, bool heapkeyspace, allequalimage; - RelationOpenSmgr(indrel); - if (!smgrexists(indrel->rd_smgr, MAIN_FORKNUM)) + if (!smgrexists(RelationGetSmgr(indrel), MAIN_FORKNUM)) ereport(ERROR, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("index \"%s\" lacks a main relation fork", diff --git a/contrib/bloom/blinsert.c b/contrib/bloom/blinsert.c index c34a640d1c442..23661d1105ce5 100644 --- a/contrib/bloom/blinsert.c +++ b/contrib/bloom/blinsert.c @@ -177,9 +177,9 @@ blbuildempty(Relation index) * this even when wal_level=minimal. */ PageSetChecksumInplace(metapage, BLOOM_METAPAGE_BLKNO); - smgrwrite(index->rd_smgr, INIT_FORKNUM, BLOOM_METAPAGE_BLKNO, + smgrwrite(RelationGetSmgr(index), INIT_FORKNUM, BLOOM_METAPAGE_BLKNO, (char *) metapage, true); - log_newpage(&index->rd_smgr->smgr_rnode.node, INIT_FORKNUM, + log_newpage(&(RelationGetSmgr(index))->smgr_rnode.node, INIT_FORKNUM, BLOOM_METAPAGE_BLKNO, metapage, true); /* @@ -187,7 +187,7 @@ blbuildempty(Relation index) * write did not go through shared_buffers and therefore a concurrent * checkpoint may have moved the redo pointer past our xlog record. */ - smgrimmedsync(index->rd_smgr, INIT_FORKNUM); + smgrimmedsync(RelationGetSmgr(index), INIT_FORKNUM); } /* diff --git a/contrib/pg_prewarm/autoprewarm.c b/contrib/pg_prewarm/autoprewarm.c index b3f73ea92d651..0289ea657cb64 100644 --- a/contrib/pg_prewarm/autoprewarm.c +++ b/contrib/pg_prewarm/autoprewarm.c @@ -514,15 +514,13 @@ autoprewarm_database_main(Datum main_arg) old_blk->filenode != blk->filenode || old_blk->forknum != blk->forknum) { - RelationOpenSmgr(rel); - /* * smgrexists is not safe for illegal forknum, hence check whether * the passed forknum is valid before using it in smgrexists. */ if (blk->forknum > InvalidForkNumber && blk->forknum <= MAX_FORKNUM && - smgrexists(rel->rd_smgr, blk->forknum)) + smgrexists(RelationGetSmgr(rel), blk->forknum)) nblocks = RelationGetNumberOfBlocksInFork(rel, blk->forknum); else nblocks = 0; diff --git a/contrib/pg_prewarm/pg_prewarm.c b/contrib/pg_prewarm/pg_prewarm.c index 48d0132a0d0e1..0043823974928 100644 --- a/contrib/pg_prewarm/pg_prewarm.c +++ b/contrib/pg_prewarm/pg_prewarm.c @@ -109,8 +109,7 @@ pg_prewarm(PG_FUNCTION_ARGS) aclcheck_error(aclresult, get_relkind_objtype(rel->rd_rel->relkind), get_rel_name(relOid)); /* Check that the fork exists. */ - RelationOpenSmgr(rel); - if (!smgrexists(rel->rd_smgr, forkNumber)) + if (!smgrexists(RelationGetSmgr(rel), forkNumber)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("fork \"%s\" does not exist for this relation", @@ -178,7 +177,7 @@ pg_prewarm(PG_FUNCTION_ARGS) for (block = first_block; block <= last_block; ++block) { CHECK_FOR_INTERRUPTS(); - smgrread(rel->rd_smgr, forkNumber, block, blockbuffer.data); + smgrread(RelationGetSmgr(rel), forkNumber, block, blockbuffer.data); ++blocks_done; } } diff --git a/contrib/pg_visibility/pg_visibility.c b/contrib/pg_visibility/pg_visibility.c index c6d983183dbc1..b5362edcee5ba 100644 --- a/contrib/pg_visibility/pg_visibility.c +++ b/contrib/pg_visibility/pg_visibility.c @@ -391,14 +391,14 @@ pg_truncate_visibility_map(PG_FUNCTION_ARGS) /* Only some relkinds have a visibility map */ check_relation_relkind(rel); - RelationOpenSmgr(rel); - rel->rd_smgr->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM] = InvalidBlockNumber; + /* Forcibly reset cached file size */ + RelationGetSmgr(rel)->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM] = InvalidBlockNumber; block = visibilitymap_prepare_truncate(rel, 0); if (BlockNumberIsValid(block)) { fork = VISIBILITYMAP_FORKNUM; - smgrtruncate(rel->rd_smgr, &fork, 1, &block); + smgrtruncate(RelationGetSmgr(rel), &fork, 1, &block); } if (RelationNeedsWAL(rel)) diff --git a/src/backend/access/gist/gistbuild.c b/src/backend/access/gist/gistbuild.c index f46a42197c979..baad28c09fa46 100644 --- a/src/backend/access/gist/gistbuild.c +++ b/src/backend/access/gist/gistbuild.c @@ -409,8 +409,7 @@ gist_indexsortbuild(GISTBuildState *state) * replaced with the real root page at the end. */ page = palloc0(BLCKSZ); - RelationOpenSmgr(state->indexrel); - smgrextend(state->indexrel->rd_smgr, MAIN_FORKNUM, GIST_ROOT_BLKNO, + smgrextend(RelationGetSmgr(state->indexrel), MAIN_FORKNUM, GIST_ROOT_BLKNO, page, true); state->pages_allocated++; state->pages_written++; @@ -450,10 +449,9 @@ gist_indexsortbuild(GISTBuildState *state) gist_indexsortbuild_flush_ready_pages(state); /* Write out the root */ - RelationOpenSmgr(state->indexrel); PageSetLSN(pagestate->page, GistBuildLSN); PageSetChecksumInplace(pagestate->page, GIST_ROOT_BLKNO); - smgrwrite(state->indexrel->rd_smgr, MAIN_FORKNUM, GIST_ROOT_BLKNO, + smgrwrite(RelationGetSmgr(state->indexrel), MAIN_FORKNUM, GIST_ROOT_BLKNO, pagestate->page, true); if (RelationNeedsWAL(state->indexrel)) log_newpage(&state->indexrel->rd_node, MAIN_FORKNUM, GIST_ROOT_BLKNO, @@ -562,8 +560,6 @@ gist_indexsortbuild_flush_ready_pages(GISTBuildState *state) if (state->ready_num_pages == 0) return; - RelationOpenSmgr(state->indexrel); - for (int i = 0; i < state->ready_num_pages; i++) { Page page = state->ready_pages[i]; @@ -575,7 +571,8 @@ gist_indexsortbuild_flush_ready_pages(GISTBuildState *state) PageSetLSN(page, GistBuildLSN); PageSetChecksumInplace(page, blkno); - smgrextend(state->indexrel->rd_smgr, MAIN_FORKNUM, blkno, page, true); + smgrextend(RelationGetSmgr(state->indexrel), MAIN_FORKNUM, blkno, page, + true); state->pages_written++; } @@ -860,7 +857,8 @@ gistBuildCallback(Relation index, */ if ((buildstate->buildMode == GIST_BUFFERING_AUTO && buildstate->indtuples % BUFFERING_MODE_SWITCH_CHECK_STEP == 0 && - effective_cache_size < smgrnblocks(index->rd_smgr, MAIN_FORKNUM)) || + effective_cache_size < smgrnblocks(RelationGetSmgr(index), + MAIN_FORKNUM)) || (buildstate->buildMode == GIST_BUFFERING_STATS && buildstate->indtuples >= BUFFERING_MODE_TUPLE_SIZE_STATS_TARGET)) { diff --git a/src/backend/access/hash/hashpage.c b/src/backend/access/hash/hashpage.c index c5c2382b36aff..b73002535669d 100644 --- a/src/backend/access/hash/hashpage.c +++ b/src/backend/access/hash/hashpage.c @@ -1024,9 +1024,9 @@ _hash_alloc_buckets(Relation rel, BlockNumber firstblock, uint32 nblocks) zerobuf.data, true); - RelationOpenSmgr(rel); PageSetChecksumInplace(page, lastblock); - smgrextend(rel->rd_smgr, MAIN_FORKNUM, lastblock, zerobuf.data, false); + smgrextend(RelationGetSmgr(rel), MAIN_FORKNUM, lastblock, zerobuf.data, + false); return true; } diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index 1b8b640012a66..beb8f20708802 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -625,7 +625,6 @@ heapam_relation_copy_data(Relation rel, const RelFileNode *newrnode) SMgrRelation dstrel; dstrel = smgropen(*newrnode, rel->rd_backend); - RelationOpenSmgr(rel); /* * Since we copy the file directly without looking at the shared buffers, @@ -645,14 +644,14 @@ heapam_relation_copy_data(Relation rel, const RelFileNode *newrnode) RelationCreateStorage(*newrnode, rel->rd_rel->relpersistence); /* copy main fork */ - RelationCopyStorage(rel->rd_smgr, dstrel, MAIN_FORKNUM, + RelationCopyStorage(RelationGetSmgr(rel), dstrel, MAIN_FORKNUM, rel->rd_rel->relpersistence); /* copy those extra forks that exist */ for (ForkNumber forkNum = MAIN_FORKNUM + 1; forkNum <= MAX_FORKNUM; forkNum++) { - if (smgrexists(rel->rd_smgr, forkNum)) + if (smgrexists(RelationGetSmgr(rel), forkNum)) { smgrcreate(dstrel, forkNum, false); @@ -664,7 +663,7 @@ heapam_relation_copy_data(Relation rel, const RelFileNode *newrnode) (rel->rd_rel->relpersistence == RELPERSISTENCE_UNLOGGED && forkNum == INIT_FORKNUM)) log_smgrcreate(newrnode, forkNum); - RelationCopyStorage(rel->rd_smgr, dstrel, forkNum, + RelationCopyStorage(RelationGetSmgr(rel), dstrel, forkNum, rel->rd_rel->relpersistence); } } diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c index 1aff62cd423a1..986a776bbd541 100644 --- a/src/backend/access/heap/rewriteheap.c +++ b/src/backend/access/heap/rewriteheap.c @@ -326,9 +326,8 @@ end_heap_rewrite(RewriteState state) PageSetChecksumInplace(state->rs_buffer, state->rs_blockno); - RelationOpenSmgr(state->rs_new_rel); - smgrextend(state->rs_new_rel->rd_smgr, MAIN_FORKNUM, state->rs_blockno, - (char *) state->rs_buffer, true); + smgrextend(RelationGetSmgr(state->rs_new_rel), MAIN_FORKNUM, + state->rs_blockno, (char *) state->rs_buffer, true); } /* @@ -339,11 +338,7 @@ end_heap_rewrite(RewriteState state) * wrote before the checkpoint. */ if (RelationNeedsWAL(state->rs_new_rel)) - { - /* for an empty table, this could be first smgr access */ - RelationOpenSmgr(state->rs_new_rel); - smgrimmedsync(state->rs_new_rel->rd_smgr, MAIN_FORKNUM); - } + smgrimmedsync(RelationGetSmgr(state->rs_new_rel), MAIN_FORKNUM); logical_end_heap_rewrite(state); @@ -695,11 +690,9 @@ raw_heap_insert(RewriteState state, HeapTuple tup) * need for smgr to schedule an fsync for this write; we'll do it * ourselves in end_heap_rewrite. */ - RelationOpenSmgr(state->rs_new_rel); - PageSetChecksumInplace(page, state->rs_blockno); - smgrextend(state->rs_new_rel->rd_smgr, MAIN_FORKNUM, + smgrextend(RelationGetSmgr(state->rs_new_rel), MAIN_FORKNUM, state->rs_blockno, (char *) page, true); state->rs_blockno++; diff --git a/src/backend/access/heap/visibilitymap.c b/src/backend/access/heap/visibilitymap.c index e198df65d8276..4720b35ee5cdc 100644 --- a/src/backend/access/heap/visibilitymap.c +++ b/src/backend/access/heap/visibilitymap.c @@ -455,13 +455,11 @@ visibilitymap_prepare_truncate(Relation rel, BlockNumber nheapblocks) elog(DEBUG1, "vm_truncate %s %d", RelationGetRelationName(rel), nheapblocks); #endif - RelationOpenSmgr(rel); - /* * If no visibility map has been created yet for this relation, there's * nothing to truncate. */ - if (!smgrexists(rel->rd_smgr, VISIBILITYMAP_FORKNUM)) + if (!smgrexists(RelationGetSmgr(rel), VISIBILITYMAP_FORKNUM)) return InvalidBlockNumber; /* @@ -528,7 +526,7 @@ visibilitymap_prepare_truncate(Relation rel, BlockNumber nheapblocks) else newnblocks = truncBlock; - if (smgrnblocks(rel->rd_smgr, VISIBILITYMAP_FORKNUM) <= newnblocks) + if (smgrnblocks(RelationGetSmgr(rel), VISIBILITYMAP_FORKNUM) <= newnblocks) { /* nothing to do, the file was already smaller than requested size */ return InvalidBlockNumber; @@ -547,30 +545,29 @@ static Buffer vm_readbuf(Relation rel, BlockNumber blkno, bool extend) { Buffer buf; + SMgrRelation reln; /* - * We might not have opened the relation at the smgr level yet, or we - * might have been forced to close it by a sinval message. The code below - * won't necessarily notice relation extension immediately when extend = - * false, so we rely on sinval messages to ensure that our ideas about the - * size of the map aren't too far out of date. + * Caution: re-using this smgr pointer could fail if the relcache entry + * gets closed. It's safe as long as we only do smgr-level operations + * between here and the last use of the pointer. */ - RelationOpenSmgr(rel); + reln = RelationGetSmgr(rel); /* * If we haven't cached the size of the visibility map fork yet, check it * first. */ - if (rel->rd_smgr->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM] == InvalidBlockNumber) + if (reln->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM] == InvalidBlockNumber) { - if (smgrexists(rel->rd_smgr, VISIBILITYMAP_FORKNUM)) - smgrnblocks(rel->rd_smgr, VISIBILITYMAP_FORKNUM); + if (smgrexists(reln, VISIBILITYMAP_FORKNUM)) + smgrnblocks(reln, VISIBILITYMAP_FORKNUM); else - rel->rd_smgr->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM] = 0; + reln->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM] = 0; } /* Handle requests beyond EOF */ - if (blkno >= rel->rd_smgr->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM]) + if (blkno >= reln->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM]) { if (extend) vm_extend(rel, blkno + 1); @@ -618,6 +615,7 @@ vm_extend(Relation rel, BlockNumber vm_nblocks) { BlockNumber vm_nblocks_now; PGAlignedBlock pg; + SMgrRelation reln; PageInit((Page) pg.data, BLCKSZ, 0); @@ -633,29 +631,32 @@ vm_extend(Relation rel, BlockNumber vm_nblocks) */ LockRelationForExtension(rel, ExclusiveLock); - /* Might have to re-open if a cache flush happened */ - RelationOpenSmgr(rel); + /* + * Caution: re-using this smgr pointer could fail if the relcache entry + * gets closed. It's safe as long as we only do smgr-level operations + * between here and the last use of the pointer. + */ + reln = RelationGetSmgr(rel); /* * Create the file first if it doesn't exist. If smgr_vm_nblocks is * positive then it must exist, no need for an smgrexists call. */ - if ((rel->rd_smgr->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM] == 0 || - rel->rd_smgr->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM] == InvalidBlockNumber) && - !smgrexists(rel->rd_smgr, VISIBILITYMAP_FORKNUM)) - smgrcreate(rel->rd_smgr, VISIBILITYMAP_FORKNUM, false); + if ((reln->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM] == 0 || + reln->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM] == InvalidBlockNumber) && + !smgrexists(reln, VISIBILITYMAP_FORKNUM)) + smgrcreate(reln, VISIBILITYMAP_FORKNUM, false); /* Invalidate cache so that smgrnblocks() asks the kernel. */ - rel->rd_smgr->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM] = InvalidBlockNumber; - vm_nblocks_now = smgrnblocks(rel->rd_smgr, VISIBILITYMAP_FORKNUM); + reln->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM] = InvalidBlockNumber; + vm_nblocks_now = smgrnblocks(reln, VISIBILITYMAP_FORKNUM); /* Now extend the file */ while (vm_nblocks_now < vm_nblocks) { PageSetChecksumInplace((Page) pg.data, vm_nblocks_now); - smgrextend(rel->rd_smgr, VISIBILITYMAP_FORKNUM, vm_nblocks_now, - pg.data, false); + smgrextend(reln, VISIBILITYMAP_FORKNUM, vm_nblocks_now, pg.data, false); vm_nblocks_now++; } @@ -666,7 +667,7 @@ vm_extend(Relation rel, BlockNumber vm_nblocks) * to keep checking for creation or extension of the file, which happens * infrequently. */ - CacheInvalidateSmgr(rel->rd_smgr->smgr_rnode); + CacheInvalidateSmgr(reln->smgr_rnode); UnlockRelationForExtension(rel, ExclusiveLock); } diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 1360ab80c1e80..be23395dfbb2e 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -163,9 +163,9 @@ btbuildempty(Relation index) * this even when wal_level=minimal. */ PageSetChecksumInplace(metapage, BTREE_METAPAGE); - smgrwrite(index->rd_smgr, INIT_FORKNUM, BTREE_METAPAGE, + smgrwrite(RelationGetSmgr(index), INIT_FORKNUM, BTREE_METAPAGE, (char *) metapage, true); - log_newpage(&index->rd_smgr->smgr_rnode.node, INIT_FORKNUM, + log_newpage(&RelationGetSmgr(index)->smgr_rnode.node, INIT_FORKNUM, BTREE_METAPAGE, metapage, true); /* @@ -173,7 +173,7 @@ btbuildempty(Relation index) * write did not go through shared_buffers and therefore a concurrent * checkpoint may have moved the redo pointer past our xlog record. */ - smgrimmedsync(index->rd_smgr, INIT_FORKNUM); + smgrimmedsync(RelationGetSmgr(index), INIT_FORKNUM); } /* diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c index 5fa6ea8ad9a09..54c8eb1289d34 100644 --- a/src/backend/access/nbtree/nbtsort.c +++ b/src/backend/access/nbtree/nbtsort.c @@ -637,9 +637,6 @@ _bt_blnewpage(uint32 level) static void _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno) { - /* Ensure rd_smgr is open (could have been closed by relcache flush!) */ - RelationOpenSmgr(wstate->index); - /* XLOG stuff */ if (wstate->btws_use_wal) { @@ -659,7 +656,7 @@ _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno) if (!wstate->btws_zeropage) wstate->btws_zeropage = (Page) palloc0(BLCKSZ); /* don't set checksum for all-zero page */ - smgrextend(wstate->index->rd_smgr, MAIN_FORKNUM, + smgrextend(RelationGetSmgr(wstate->index), MAIN_FORKNUM, wstate->btws_pages_written++, (char *) wstate->btws_zeropage, true); @@ -674,14 +671,14 @@ _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno) if (blkno == wstate->btws_pages_written) { /* extending the file... */ - smgrextend(wstate->index->rd_smgr, MAIN_FORKNUM, blkno, + smgrextend(RelationGetSmgr(wstate->index), MAIN_FORKNUM, blkno, (char *) page, true); wstate->btws_pages_written++; } else { /* overwriting a block we zero-filled before */ - smgrwrite(wstate->index->rd_smgr, MAIN_FORKNUM, blkno, + smgrwrite(RelationGetSmgr(wstate->index), MAIN_FORKNUM, blkno, (char *) page, true); } @@ -1428,10 +1425,7 @@ _bt_load(BTWriteState *wstate, BTSpool *btspool, BTSpool *btspool2) * still not be on disk when the crash occurs. */ if (wstate->btws_use_wal) - { - RelationOpenSmgr(wstate->index); - smgrimmedsync(wstate->index->rd_smgr, MAIN_FORKNUM); - } + smgrimmedsync(RelationGetSmgr(wstate->index), MAIN_FORKNUM); } /* diff --git a/src/backend/access/spgist/spginsert.c b/src/backend/access/spgist/spginsert.c index 1af0af7da21f3..cc4394b1c8d62 100644 --- a/src/backend/access/spgist/spginsert.c +++ b/src/backend/access/spgist/spginsert.c @@ -169,27 +169,27 @@ spgbuildempty(Relation index) * replayed. */ PageSetChecksumInplace(page, SPGIST_METAPAGE_BLKNO); - smgrwrite(index->rd_smgr, INIT_FORKNUM, SPGIST_METAPAGE_BLKNO, + smgrwrite(RelationGetSmgr(index), INIT_FORKNUM, SPGIST_METAPAGE_BLKNO, (char *) page, true); - log_newpage(&index->rd_smgr->smgr_rnode.node, INIT_FORKNUM, + log_newpage(&(RelationGetSmgr(index))->smgr_rnode.node, INIT_FORKNUM, SPGIST_METAPAGE_BLKNO, page, true); /* Likewise for the root page. */ SpGistInitPage(page, SPGIST_LEAF); PageSetChecksumInplace(page, SPGIST_ROOT_BLKNO); - smgrwrite(index->rd_smgr, INIT_FORKNUM, SPGIST_ROOT_BLKNO, + smgrwrite(RelationGetSmgr(index), INIT_FORKNUM, SPGIST_ROOT_BLKNO, (char *) page, true); - log_newpage(&index->rd_smgr->smgr_rnode.node, INIT_FORKNUM, + log_newpage(&(RelationGetSmgr(index))->smgr_rnode.node, INIT_FORKNUM, SPGIST_ROOT_BLKNO, page, true); /* Likewise for the null-tuples root page. */ SpGistInitPage(page, SPGIST_LEAF | SPGIST_NULLS); PageSetChecksumInplace(page, SPGIST_NULL_BLKNO); - smgrwrite(index->rd_smgr, INIT_FORKNUM, SPGIST_NULL_BLKNO, + smgrwrite(RelationGetSmgr(index), INIT_FORKNUM, SPGIST_NULL_BLKNO, (char *) page, true); - log_newpage(&index->rd_smgr->smgr_rnode.node, INIT_FORKNUM, + log_newpage(&(RelationGetSmgr(index))->smgr_rnode.node, INIT_FORKNUM, SPGIST_NULL_BLKNO, page, true); /* @@ -197,7 +197,7 @@ spgbuildempty(Relation index) * writes did not go through shared buffers and therefore a concurrent * checkpoint may have moved the redo pointer past our xlog record. */ - smgrimmedsync(index->rd_smgr, INIT_FORKNUM); + smgrimmedsync(RelationGetSmgr(index), INIT_FORKNUM); } /* diff --git a/src/backend/access/table/tableam.c b/src/backend/access/table/tableam.c index 5ea5bdd810433..66f0f84386c43 100644 --- a/src/backend/access/table/tableam.c +++ b/src/backend/access/table/tableam.c @@ -629,17 +629,14 @@ table_block_relation_size(Relation rel, ForkNumber forkNumber) { uint64 nblocks = 0; - /* Open it at the smgr level if not already done */ - RelationOpenSmgr(rel); - /* InvalidForkNumber indicates returning the size for all forks */ if (forkNumber == InvalidForkNumber) { for (int i = 0; i < MAX_FORKNUM; i++) - nblocks += smgrnblocks(rel->rd_smgr, i); + nblocks += smgrnblocks(RelationGetSmgr(rel), i); } else - nblocks = smgrnblocks(rel->rd_smgr, forkNumber); + nblocks = smgrnblocks(RelationGetSmgr(rel), forkNumber); return nblocks * BLCKSZ; } diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 09370a8a5a0a4..83746d3fd91a4 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -415,8 +415,6 @@ heap_create(const char *relname, */ if (create_storage) { - RelationOpenSmgr(rel); - switch (rel->rd_rel->relkind) { case RELKIND_VIEW: diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 50b7a16bce94a..26bfa74ce7571 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -2982,10 +2982,9 @@ index_build(Relation heapRelation, * relfilenode won't change, and nothing needs to be done here. */ if (indexRelation->rd_rel->relpersistence == RELPERSISTENCE_UNLOGGED && - !smgrexists(indexRelation->rd_smgr, INIT_FORKNUM)) + !smgrexists(RelationGetSmgr(indexRelation), INIT_FORKNUM)) { - RelationOpenSmgr(indexRelation); - smgrcreate(indexRelation->rd_smgr, INIT_FORKNUM, false); + smgrcreate(RelationGetSmgr(indexRelation), INIT_FORKNUM, false); indexRelation->rd_indam->ambuildempty(indexRelation); } diff --git a/src/backend/catalog/storage.c b/src/backend/catalog/storage.c index cba7a9ada07e1..c5ad28d71febd 100644 --- a/src/backend/catalog/storage.c +++ b/src/backend/catalog/storage.c @@ -282,16 +282,16 @@ RelationTruncate(Relation rel, BlockNumber nblocks) ForkNumber forks[MAX_FORKNUM]; BlockNumber blocks[MAX_FORKNUM]; int nforks = 0; - - /* Open it at the smgr level if not already done */ - RelationOpenSmgr(rel); + SMgrRelation reln; /* - * Make sure smgr_targblock etc aren't pointing somewhere past new end + * Make sure smgr_targblock etc aren't pointing somewhere past new end. + * (Note: don't rely on this reln pointer below this loop.) */ - rel->rd_smgr->smgr_targblock = InvalidBlockNumber; + reln = RelationGetSmgr(rel); + reln->smgr_targblock = InvalidBlockNumber; for (int i = 0; i <= MAX_FORKNUM; ++i) - rel->rd_smgr->smgr_cached_nblocks[i] = InvalidBlockNumber; + reln->smgr_cached_nblocks[i] = InvalidBlockNumber; /* Prepare for truncation of MAIN fork of the relation */ forks[nforks] = MAIN_FORKNUM; @@ -299,7 +299,7 @@ RelationTruncate(Relation rel, BlockNumber nblocks) nforks++; /* Prepare for truncation of the FSM if it exists */ - fsm = smgrexists(rel->rd_smgr, FSM_FORKNUM); + fsm = smgrexists(RelationGetSmgr(rel), FSM_FORKNUM); if (fsm) { blocks[nforks] = FreeSpaceMapPrepareTruncateRel(rel, nblocks); @@ -312,7 +312,7 @@ RelationTruncate(Relation rel, BlockNumber nblocks) } /* Prepare for truncation of the visibility map too if it exists */ - vm = smgrexists(rel->rd_smgr, VISIBILITYMAP_FORKNUM); + vm = smgrexists(RelationGetSmgr(rel), VISIBILITYMAP_FORKNUM); if (vm) { blocks[nforks] = visibilitymap_prepare_truncate(rel, nblocks); @@ -364,7 +364,7 @@ RelationTruncate(Relation rel, BlockNumber nblocks) } /* Do the real work to truncate relation forks */ - smgrtruncate(rel->rd_smgr, forks, nforks, blocks); + smgrtruncate(RelationGetSmgr(rel), forks, nforks, blocks); /* * Update upper-level FSM pages to account for the truncation. This is @@ -389,9 +389,9 @@ RelationPreTruncate(Relation rel) if (!pendingSyncHash) return; - RelationOpenSmgr(rel); - pending = hash_search(pendingSyncHash, &(rel->rd_smgr->smgr_rnode.node), + pending = hash_search(pendingSyncHash, + &(RelationGetSmgr(rel)->smgr_rnode.node), HASH_FIND, NULL); if (pending) pending->is_truncated = true; @@ -403,6 +403,12 @@ RelationPreTruncate(Relation rel) * Note that this requires that there is no dirty data in shared buffers. If * it's possible that there are, callers need to flush those using * e.g. FlushRelationBuffers(rel). + * + * Also note that this is frequently called via locutions such as + * RelationCopyStorage(RelationGetSmgr(rel), ...); + * That's safe only because we perform only smgr and WAL operations here. + * If we invoked anything else, a relcache flush could cause our SMgrRelation + * argument to become a dangling pointer. */ void RelationCopyStorage(SMgrRelation src, SMgrRelation dst, @@ -445,13 +451,23 @@ RelationCopyStorage(SMgrRelation src, SMgrRelation dst, if (!PageIsVerifiedExtended(page, blkno, PIV_LOG_WARNING | PIV_REPORT_STAT)) + { + /* + * For paranoia's sake, capture the file path before invoking the + * ereport machinery. This guards against the possibility of a + * relcache flush caused by, e.g., an errcontext callback. + * (errcontext callbacks shouldn't be risking any such thing, but + * people have been known to forget that rule.) + */ + char *relpath = relpathbackend(src->smgr_rnode.node, + src->smgr_rnode.backend, + forkNum); + ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), errmsg("invalid page in block %u of relation %s", - blkno, - relpathbackend(src->smgr_rnode.node, - src->smgr_rnode.backend, - forkNum)))); + blkno, relpath))); + } /* * WAL-log the copied page. Unfortunately we don't know what kind of a diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 03dfd2e7fa667..dcf14b9dc0e54 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -14151,7 +14151,6 @@ index_copy_data(Relation rel, RelFileNode newrnode) SMgrRelation dstrel; dstrel = smgropen(newrnode, rel->rd_backend); - RelationOpenSmgr(rel); /* * Since we copy the file directly without looking at the shared buffers, @@ -14171,14 +14170,14 @@ index_copy_data(Relation rel, RelFileNode newrnode) RelationCreateStorage(newrnode, rel->rd_rel->relpersistence); /* copy main fork */ - RelationCopyStorage(rel->rd_smgr, dstrel, MAIN_FORKNUM, + RelationCopyStorage(RelationGetSmgr(rel), dstrel, MAIN_FORKNUM, rel->rd_rel->relpersistence); /* copy those extra forks that exist */ for (ForkNumber forkNum = MAIN_FORKNUM + 1; forkNum <= MAX_FORKNUM; forkNum++) { - if (smgrexists(rel->rd_smgr, forkNum)) + if (smgrexists(RelationGetSmgr(rel), forkNum)) { smgrcreate(dstrel, forkNum, false); @@ -14190,7 +14189,7 @@ index_copy_data(Relation rel, RelFileNode newrnode) (rel->rd_rel->relpersistence == RELPERSISTENCE_UNLOGGED && forkNum == INIT_FORKNUM)) log_smgrcreate(&newrnode, forkNum); - RelationCopyStorage(rel->rd_smgr, dstrel, forkNum, + RelationCopyStorage(RelationGetSmgr(rel), dstrel, forkNum, rel->rd_rel->relpersistence); } } diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 4b296a22c45a4..86ef607ff3811 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -589,9 +589,6 @@ PrefetchBuffer(Relation reln, ForkNumber forkNum, BlockNumber blockNum) Assert(RelationIsValid(reln)); Assert(BlockNumberIsValid(blockNum)); - /* Open it at the smgr level if not already done */ - RelationOpenSmgr(reln); - if (RelationUsesLocalBuffers(reln)) { /* see comments in ReadBufferExtended */ @@ -601,12 +598,12 @@ PrefetchBuffer(Relation reln, ForkNumber forkNum, BlockNumber blockNum) errmsg("cannot access temporary tables of other sessions"))); /* pass it off to localbuf.c */ - return PrefetchLocalBuffer(reln->rd_smgr, forkNum, blockNum); + return PrefetchLocalBuffer(RelationGetSmgr(reln), forkNum, blockNum); } else { /* pass it to the shared buffer version */ - return PrefetchSharedBuffer(reln->rd_smgr, forkNum, blockNum); + return PrefetchSharedBuffer(RelationGetSmgr(reln), forkNum, blockNum); } } @@ -747,9 +744,6 @@ ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, bool hit; Buffer buf; - /* Open it at the smgr level if not already done */ - RelationOpenSmgr(reln); - /* * Reject attempts to read non-local temporary relations; we would be * likely to get wrong data since we have no visibility into the owning @@ -765,7 +759,7 @@ ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, * miss. */ pgstat_count_buffer_read(reln); - buf = ReadBuffer_common(reln->rd_smgr, reln->rd_rel->relpersistence, + buf = ReadBuffer_common(RelationGetSmgr(reln), reln->rd_rel->relpersistence, forkNum, blockNum, mode, strategy, &hit); if (hit) pgstat_count_buffer_hit(reln); @@ -2949,10 +2943,7 @@ RelationGetNumberOfBlocksInFork(Relation relation, ForkNumber forkNum) case RELKIND_SEQUENCE: case RELKIND_INDEX: case RELKIND_PARTITIONED_INDEX: - /* Open it at the smgr level if not already done */ - RelationOpenSmgr(relation); - - return smgrnblocks(relation->rd_smgr, forkNum); + return smgrnblocks(RelationGetSmgr(relation), forkNum); case RELKIND_RELATION: case RELKIND_TOASTVALUE: @@ -3527,9 +3518,6 @@ FlushRelationBuffers(Relation rel) int i; BufferDesc *bufHdr; - /* Open rel at the smgr level if not already done */ - RelationOpenSmgr(rel); - if (RelationUsesLocalBuffers(rel)) { for (i = 0; i < NLocBuffer; i++) @@ -3554,7 +3542,7 @@ FlushRelationBuffers(Relation rel) PageSetChecksumInplace(localpage, bufHdr->tag.blockNum); - smgrwrite(rel->rd_smgr, + smgrwrite(RelationGetSmgr(rel), bufHdr->tag.forkNum, bufHdr->tag.blockNum, localpage, @@ -3595,7 +3583,7 @@ FlushRelationBuffers(Relation rel) { PinBuffer_Locked(bufHdr); LWLockAcquire(BufferDescriptorGetContentLock(bufHdr), LW_SHARED); - FlushBuffer(bufHdr, rel->rd_smgr); + FlushBuffer(bufHdr, RelationGetSmgr(rel)); LWLockRelease(BufferDescriptorGetContentLock(bufHdr)); UnpinBuffer(bufHdr, true); } diff --git a/src/backend/storage/freespace/freespace.c b/src/backend/storage/freespace/freespace.c index 8c12dda2380d0..09d4b16067dec 100644 --- a/src/backend/storage/freespace/freespace.c +++ b/src/backend/storage/freespace/freespace.c @@ -265,13 +265,11 @@ FreeSpaceMapPrepareTruncateRel(Relation rel, BlockNumber nblocks) uint16 first_removed_slot; Buffer buf; - RelationOpenSmgr(rel); - /* * If no FSM has been created yet for this relation, there's nothing to * truncate. */ - if (!smgrexists(rel->rd_smgr, FSM_FORKNUM)) + if (!smgrexists(RelationGetSmgr(rel), FSM_FORKNUM)) return InvalidBlockNumber; /* Get the location in the FSM of the first removed heap block */ @@ -317,7 +315,7 @@ FreeSpaceMapPrepareTruncateRel(Relation rel, BlockNumber nblocks) else { new_nfsmblocks = fsm_logical_to_physical(first_removed_address); - if (smgrnblocks(rel->rd_smgr, FSM_FORKNUM) <= new_nfsmblocks) + if (smgrnblocks(RelationGetSmgr(rel), FSM_FORKNUM) <= new_nfsmblocks) return InvalidBlockNumber; /* nothing to do; the FSM was already * smaller */ } @@ -532,8 +530,14 @@ fsm_readbuf(Relation rel, FSMAddress addr, bool extend) { BlockNumber blkno = fsm_logical_to_physical(addr); Buffer buf; + SMgrRelation reln; - RelationOpenSmgr(rel); + /* + * Caution: re-using this smgr pointer could fail if the relcache entry + * gets closed. It's safe as long as we only do smgr-level operations + * between here and the last use of the pointer. + */ + reln = RelationGetSmgr(rel); /* * If we haven't cached the size of the FSM yet, check it first. Also @@ -541,19 +545,19 @@ fsm_readbuf(Relation rel, FSMAddress addr, bool extend) * value might be stale. (We send smgr inval messages on truncation, but * not on extension.) */ - if (rel->rd_smgr->smgr_cached_nblocks[FSM_FORKNUM] == InvalidBlockNumber || - blkno >= rel->rd_smgr->smgr_cached_nblocks[FSM_FORKNUM]) + if (reln->smgr_cached_nblocks[FSM_FORKNUM] == InvalidBlockNumber || + blkno >= reln->smgr_cached_nblocks[FSM_FORKNUM]) { /* Invalidate the cache so smgrnblocks asks the kernel. */ - rel->rd_smgr->smgr_cached_nblocks[FSM_FORKNUM] = InvalidBlockNumber; - if (smgrexists(rel->rd_smgr, FSM_FORKNUM)) - smgrnblocks(rel->rd_smgr, FSM_FORKNUM); + reln->smgr_cached_nblocks[FSM_FORKNUM] = InvalidBlockNumber; + if (smgrexists(reln, FSM_FORKNUM)) + smgrnblocks(reln, FSM_FORKNUM); else - rel->rd_smgr->smgr_cached_nblocks[FSM_FORKNUM] = 0; + reln->smgr_cached_nblocks[FSM_FORKNUM] = 0; } /* Handle requests beyond EOF */ - if (blkno >= rel->rd_smgr->smgr_cached_nblocks[FSM_FORKNUM]) + if (blkno >= reln->smgr_cached_nblocks[FSM_FORKNUM]) { if (extend) fsm_extend(rel, blkno + 1); @@ -603,6 +607,7 @@ fsm_extend(Relation rel, BlockNumber fsm_nblocks) { BlockNumber fsm_nblocks_now; PGAlignedBlock pg; + SMgrRelation reln; PageInit((Page) pg.data, BLCKSZ, 0); @@ -618,28 +623,33 @@ fsm_extend(Relation rel, BlockNumber fsm_nblocks) */ LockRelationForExtension(rel, ExclusiveLock); - /* Might have to re-open if a cache flush happened */ - RelationOpenSmgr(rel); + /* + * Caution: re-using this smgr pointer could fail if the relcache entry + * gets closed. It's safe as long as we only do smgr-level operations + * between here and the last use of the pointer. + */ + reln = RelationGetSmgr(rel); /* * Create the FSM file first if it doesn't exist. If * smgr_cached_nblocks[FSM_FORKNUM] is positive then it must exist, no * need for an smgrexists call. */ - if ((rel->rd_smgr->smgr_cached_nblocks[FSM_FORKNUM] == 0 || - rel->rd_smgr->smgr_cached_nblocks[FSM_FORKNUM] == InvalidBlockNumber) && - !smgrexists(rel->rd_smgr, FSM_FORKNUM)) - smgrcreate(rel->rd_smgr, FSM_FORKNUM, false); + if ((reln->smgr_cached_nblocks[FSM_FORKNUM] == 0 || + reln->smgr_cached_nblocks[FSM_FORKNUM] == InvalidBlockNumber) && + !smgrexists(reln, FSM_FORKNUM)) + smgrcreate(reln, FSM_FORKNUM, false); /* Invalidate cache so that smgrnblocks() asks the kernel. */ - rel->rd_smgr->smgr_cached_nblocks[FSM_FORKNUM] = InvalidBlockNumber; - fsm_nblocks_now = smgrnblocks(rel->rd_smgr, FSM_FORKNUM); + reln->smgr_cached_nblocks[FSM_FORKNUM] = InvalidBlockNumber; + fsm_nblocks_now = smgrnblocks(reln, FSM_FORKNUM); + /* Extend as needed. */ while (fsm_nblocks_now < fsm_nblocks) { PageSetChecksumInplace((Page) pg.data, fsm_nblocks_now); - smgrextend(rel->rd_smgr, FSM_FORKNUM, fsm_nblocks_now, + smgrextend(reln, FSM_FORKNUM, fsm_nblocks_now, pg.data, false); fsm_nblocks_now++; } diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h index 77d176a93482c..b4faa1c12381e 100644 --- a/src/include/utils/rel.h +++ b/src/include/utils/rel.h @@ -24,6 +24,7 @@ #include "rewrite/prs2lock.h" #include "storage/block.h" #include "storage/relfilenode.h" +#include "storage/smgr.h" #include "utils/relcache.h" #include "utils/reltrigger.h" @@ -53,8 +54,7 @@ typedef LockInfoData *LockInfo; typedef struct RelationData { RelFileNode rd_node; /* relation physical identifier */ - /* use "struct" here to avoid needing to include smgr.h: */ - struct SMgrRelationData *rd_smgr; /* cached file handle, or NULL */ + SMgrRelation rd_smgr; /* cached file handle, or NULL */ int rd_refcnt; /* reference count */ BackendId rd_backend; /* owning backend id, if temporary relation */ bool rd_islocaltemp; /* rel is a temp rel of this session */ @@ -528,14 +528,25 @@ typedef struct ViewOptions ((relation)->rd_rel->relfilenode == InvalidOid)) /* - * RelationOpenSmgr - * Open the relation at the smgr level, if not already done. - */ -#define RelationOpenSmgr(relation) \ - do { \ - if ((relation)->rd_smgr == NULL) \ - smgrsetowner(&((relation)->rd_smgr), smgropen((relation)->rd_node, (relation)->rd_backend)); \ - } while (0) + * RelationGetSmgr + * Returns smgr file handle for a relation, opening it if needed. + * + * Very little code is authorized to touch rel->rd_smgr directly. Instead + * use this function to fetch its value. + * + * Note: since a relcache flush can cause the file handle to be closed again, + * it's unwise to hold onto the pointer returned by this function for any + * long period. Recommended practice is to just re-execute RelationGetSmgr + * each time you need to access the SMgrRelation. It's quite cheap in + * comparison to whatever an smgr function is going to do. + */ +static inline SMgrRelation +RelationGetSmgr(Relation rel) +{ + if (unlikely(rel->rd_smgr == NULL)) + smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend)); + return rel->rd_smgr; +} /* * RelationCloseSmgr @@ -557,7 +568,8 @@ typedef struct ViewOptions * Fetch relation's current insertion target block. * * Returns InvalidBlockNumber if there is no current target block. Note - * that the target block status is discarded on any smgr-level invalidation. + * that the target block status is discarded on any smgr-level invalidation, + * so there's no need to re-open the smgr handle if it's not currently open. */ #define RelationGetTargetBlock(relation) \ ( (relation)->rd_smgr != NULL ? (relation)->rd_smgr->smgr_targblock : InvalidBlockNumber ) @@ -568,8 +580,7 @@ typedef struct ViewOptions */ #define RelationSetTargetBlock(relation, targblock) \ do { \ - RelationOpenSmgr(relation); \ - (relation)->rd_smgr->smgr_targblock = (targblock); \ + RelationGetSmgr(relation)->smgr_targblock = (targblock); \ } while (0) /* From f014b1b9bb8eda4e82c1805969dbae2b07b7d54d Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 12 Jul 2021 19:17:35 -0400 Subject: [PATCH 647/671] Probe for preadv/pwritev in a more macOS-friendly way. Apple's mechanism for dealing with functions that are available in only some OS versions confuses AC_CHECK_FUNCS, and therefore AC_REPLACE_FUNCS. We can use AC_CHECK_DECLS instead, so long as we enable -Werror=unguarded-availability-new. This allows people compiling for macOS to control whether or not preadv/pwritev are used by setting MACOSX_DEPLOYMENT_TARGET, rather than supplying a back-rev SDK. (Of course, the latter still works, too.) James Hilliard Discussion: https://postgr.es/m/20210122193230.25295-1-james.hilliard1@gmail.com --- configure | 166 ++++++++++++++++++++++++++++++------ configure.ac | 11 ++- src/include/pg_config.h.in | 14 +-- src/include/port/pg_iovec.h | 4 +- src/tools/msvc/Solution.pm | 4 +- 5 files changed, 161 insertions(+), 38 deletions(-) diff --git a/configure b/configure index 9f0018b3906f5..1ea28a0d67d00 100755 --- a/configure +++ b/configure @@ -5383,6 +5383,98 @@ if test x"$pgac_cv_prog_CC_cflags__Werror_vla" = x"yes"; then fi + # On macOS, complain about usage of symbols newer than the deployment target + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} supports -Werror=unguarded-availability-new, for CFLAGS" >&5 +$as_echo_n "checking whether ${CC} supports -Werror=unguarded-availability-new, for CFLAGS... " >&6; } +if ${pgac_cv_prog_CC_cflags__Werror_unguarded_availability_new+:} false; then : + $as_echo_n "(cached) " >&6 +else + pgac_save_CFLAGS=$CFLAGS +pgac_save_CC=$CC +CC=${CC} +CFLAGS="${CFLAGS} -Werror=unguarded-availability-new" +ac_save_c_werror_flag=$ac_c_werror_flag +ac_c_werror_flag=yes +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + pgac_cv_prog_CC_cflags__Werror_unguarded_availability_new=yes +else + pgac_cv_prog_CC_cflags__Werror_unguarded_availability_new=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_c_werror_flag=$ac_save_c_werror_flag +CFLAGS="$pgac_save_CFLAGS" +CC="$pgac_save_CC" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CC_cflags__Werror_unguarded_availability_new" >&5 +$as_echo "$pgac_cv_prog_CC_cflags__Werror_unguarded_availability_new" >&6; } +if test x"$pgac_cv_prog_CC_cflags__Werror_unguarded_availability_new" = x"yes"; then + CFLAGS="${CFLAGS} -Werror=unguarded-availability-new" +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CXX} supports -Werror=unguarded-availability-new, for CXXFLAGS" >&5 +$as_echo_n "checking whether ${CXX} supports -Werror=unguarded-availability-new, for CXXFLAGS... " >&6; } +if ${pgac_cv_prog_CXX_cxxflags__Werror_unguarded_availability_new+:} false; then : + $as_echo_n "(cached) " >&6 +else + pgac_save_CXXFLAGS=$CXXFLAGS +pgac_save_CXX=$CXX +CXX=${CXX} +CXXFLAGS="${CXXFLAGS} -Werror=unguarded-availability-new" +ac_save_cxx_werror_flag=$ac_cxx_werror_flag +ac_cxx_werror_flag=yes +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + pgac_cv_prog_CXX_cxxflags__Werror_unguarded_availability_new=yes +else + pgac_cv_prog_CXX_cxxflags__Werror_unguarded_availability_new=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_cxx_werror_flag=$ac_save_cxx_werror_flag +CXXFLAGS="$pgac_save_CXXFLAGS" +CXX="$pgac_save_CXX" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CXX_cxxflags__Werror_unguarded_availability_new" >&5 +$as_echo "$pgac_cv_prog_CXX_cxxflags__Werror_unguarded_availability_new" >&6; } +if test x"$pgac_cv_prog_CXX_cxxflags__Werror_unguarded_availability_new" = x"yes"; then + CXXFLAGS="${CXXFLAGS} -Werror=unguarded-availability-new" +fi + + # -Wvla is not applicable for C++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} supports -Wendif-labels, for CFLAGS" >&5 @@ -15931,6 +16023,54 @@ cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRNLEN $ac_have_decl _ACEOF + +# We can't use AC_REPLACE_FUNCS to replace these functions, because it +# won't handle deployment target restrictions on macOS +ac_fn_c_check_decl "$LINENO" "preadv" "ac_cv_have_decl_preadv" "#include +" +if test "x$ac_cv_have_decl_preadv" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PREADV $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + case " $LIBOBJS " in + *" preadv.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS preadv.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_decl "$LINENO" "pwritev" "ac_cv_have_decl_pwritev" "#include +" +if test "x$ac_cv_have_decl_pwritev" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PWRITEV $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + case " $LIBOBJS " in + *" pwritev.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS pwritev.$ac_objext" + ;; +esac + +fi + + # This is probably only present on macOS, but may as well check always ac_fn_c_check_decl "$LINENO" "F_FULLFSYNC" "ac_cv_have_decl_F_FULLFSYNC" "#include " @@ -16144,19 +16284,6 @@ esac fi -ac_fn_c_check_func "$LINENO" "preadv" "ac_cv_func_preadv" -if test "x$ac_cv_func_preadv" = xyes; then : - $as_echo "#define HAVE_PREADV 1" >>confdefs.h - -else - case " $LIBOBJS " in - *" preadv.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS preadv.$ac_objext" - ;; -esac - -fi - ac_fn_c_check_func "$LINENO" "pwrite" "ac_cv_func_pwrite" if test "x$ac_cv_func_pwrite" = xyes; then : $as_echo "#define HAVE_PWRITE 1" >>confdefs.h @@ -16170,19 +16297,6 @@ esac fi -ac_fn_c_check_func "$LINENO" "pwritev" "ac_cv_func_pwritev" -if test "x$ac_cv_func_pwritev" = xyes; then : - $as_echo "#define HAVE_PWRITEV 1" >>confdefs.h - -else - case " $LIBOBJS " in - *" pwritev.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS pwritev.$ac_objext" - ;; -esac - -fi - ac_fn_c_check_func "$LINENO" "random" "ac_cv_func_random" if test "x$ac_cv_func_random" = xyes; then : $as_echo "#define HAVE_RANDOM 1" >>confdefs.h diff --git a/configure.ac b/configure.ac index cfe0a6acc2115..57336e1fb6ea6 100644 --- a/configure.ac +++ b/configure.ac @@ -494,6 +494,9 @@ if test "$GCC" = yes -a "$ICC" = no; then AC_SUBST(PERMIT_DECLARATION_AFTER_STATEMENT) # Really don't want VLAs to be used in our dialect of C PGAC_PROG_CC_CFLAGS_OPT([-Werror=vla]) + # On macOS, complain about usage of symbols newer than the deployment target + PGAC_PROG_CC_CFLAGS_OPT([-Werror=unguarded-availability-new]) + PGAC_PROG_CXX_CFLAGS_OPT([-Werror=unguarded-availability-new]) # -Wvla is not applicable for C++ PGAC_PROG_CC_CFLAGS_OPT([-Wendif-labels]) PGAC_PROG_CXX_CFLAGS_OPT([-Wendif-labels]) @@ -1749,6 +1752,12 @@ AC_CHECK_DECLS(posix_fadvise, [], [], [#include ]) AC_CHECK_DECLS(fdatasync, [], [], [#include ]) AC_CHECK_DECLS([strlcat, strlcpy, strnlen]) + +# We can't use AC_REPLACE_FUNCS to replace these functions, because it +# won't handle deployment target restrictions on macOS +AC_CHECK_DECLS([preadv], [], [AC_LIBOBJ(preadv)], [#include ]) +AC_CHECK_DECLS([pwritev], [], [AC_LIBOBJ(pwritev)], [#include ]) + # This is probably only present on macOS, but may as well check always AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include ]) @@ -1784,9 +1793,7 @@ AC_REPLACE_FUNCS(m4_normalize([ link mkdtemp pread - preadv pwrite - pwritev random srandom strlcat diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index 479c8fe0be765..d69d461ff2cd2 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -142,6 +142,14 @@ don't. */ #undef HAVE_DECL_POSIX_FADVISE +/* Define to 1 if you have the declaration of `preadv', and to 0 if you don't. + */ +#undef HAVE_DECL_PREADV + +/* Define to 1 if you have the declaration of `pwritev', and to 0 if you + don't. */ +#undef HAVE_DECL_PWRITEV + /* Define to 1 if you have the declaration of `RTLD_GLOBAL', and to 0 if you don't. */ #undef HAVE_DECL_RTLD_GLOBAL @@ -421,9 +429,6 @@ /* Define to 1 if you have the `pread' function. */ #undef HAVE_PREAD -/* Define to 1 if you have the `preadv' function. */ -#undef HAVE_PREADV - /* Define to 1 if you have the `pstat' function. */ #undef HAVE_PSTAT @@ -445,9 +450,6 @@ /* Define to 1 if you have the `pwrite' function. */ #undef HAVE_PWRITE -/* Define to 1 if you have the `pwritev' function. */ -#undef HAVE_PWRITEV - /* Define to 1 if you have the `random' function. */ #undef HAVE_RANDOM diff --git a/src/include/port/pg_iovec.h b/src/include/port/pg_iovec.h index 05d59e99fb639..88f6615dbc650 100644 --- a/src/include/port/pg_iovec.h +++ b/src/include/port/pg_iovec.h @@ -39,13 +39,13 @@ struct iovec /* Define a reasonable maximum that is safe to use on the stack. */ #define PG_IOV_MAX Min(IOV_MAX, 32) -#ifdef HAVE_PREADV +#if HAVE_DECL_PREADV #define pg_preadv preadv #else extern ssize_t pg_preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset); #endif -#ifdef HAVE_PWRITEV +#if HAVE_DECL_PWRITEV #define pg_pwritev pwritev #else extern ssize_t pg_pwritev(int fd, const struct iovec *iov, int iovcnt, off_t offset); diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index b529f78a60131..294b968dcdb5c 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -245,6 +245,8 @@ sub GenerateFiles HAVE_DECL_LLVMGETHOSTCPUFEATURES => 0, HAVE_DECL_LLVMORCGETSYMBOLADDRESSIN => 0, HAVE_DECL_POSIX_FADVISE => undef, + HAVE_DECL_PREADV => 0, + HAVE_DECL_PWRITEV => 0, HAVE_DECL_RTLD_GLOBAL => 0, HAVE_DECL_RTLD_NOW => 0, HAVE_DECL_STRLCAT => undef, @@ -335,7 +337,6 @@ sub GenerateFiles HAVE_PPC_LWARX_MUTEX_HINT => undef, HAVE_PPOLL => undef, HAVE_PREAD => undef, - HAVE_PREADV => undef, HAVE_PSTAT => undef, HAVE_PS_STRINGS => undef, HAVE_PTHREAD => undef, @@ -343,7 +344,6 @@ sub GenerateFiles HAVE_PTHREAD_IS_THREADED_NP => undef, HAVE_PTHREAD_PRIO_INHERIT => undef, HAVE_PWRITE => undef, - HAVE_PWRITEV => undef, HAVE_RANDOM => undef, HAVE_READLINE_H => undef, HAVE_READLINE_HISTORY_H => undef, From 7c09d2797ecdf779e5dc3289497be85675f3d134 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Tue, 13 Jul 2021 11:13:48 +1200 Subject: [PATCH 648/671] Add PSQL_WATCH_PAGER for psql's \watch command. Allow a pager to be used by the \watch command. This works but isn't very useful with traditional pagers like "less", so use a different environment variable. The popular open source tool "pspg" (also by Pavel) knows how to display the output if you set PSQL_WATCH_PAGER="pspg --stream". To make \watch react quickly when the user quits the pager or presses ^C, and also to increase the accuracy of its timing and decrease the rate of useless context switches, change the main loop of the \watch command to use sigwait() rather than a sleeping/polling loop, on Unix. Supported on Unix only for now (like pspg). Author: Pavel Stehule Author: Thomas Munro Discussion: https://postgr.es/m/CAFj8pRBfzUUPz-3gN5oAzto9SDuRSq-TQPfXU_P6h0L7hO%2BEhg%40mail.gmail.com --- doc/src/sgml/ref/psql-ref.sgml | 28 +++++++ src/bin/psql/command.c | 133 ++++++++++++++++++++++++++++++--- src/bin/psql/common.c | 11 ++- src/bin/psql/common.h | 2 +- src/bin/psql/help.c | 6 +- src/bin/psql/startup.c | 19 +++++ 6 files changed, 184 insertions(+), 15 deletions(-) diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index a8dfc41e40689..da5330685727e 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -3002,6 +3002,16 @@ lo_import 152801 (such as more) is used. + + When using the \watch command to execute a query + repeatedly, the environment variable PSQL_WATCH_PAGER + is used to find the pager program instead, on Unix systems. This is + configured separately because it may confuse traditional pagers, but + can be used to send output to tools that understand + psql's output format (such as + pspg --stream). + + When the pager option is off, the pager program is not used. When the pager option is @@ -4672,6 +4682,24 @@ PSQL_EDITOR_LINENUMBER_ARG='--line ' + + PSQL_WATCH_PAGER + + + + When a query is executed repeatedly with the \watch + command, a pager is not used by default. This behavior can be changed + by setting PSQL_WATCH_PAGER to a pager command, on Unix + systems. The pspg pager (not part of + PostgreSQL but available in many open source + software distributions) can display the output of + \watch if started with the option + --stream. + + + + + PSQLRC diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 543401c6d6a79..d704c4220c738 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -13,6 +13,7 @@ #include #ifndef WIN32 #include /* for stat() */ +#include /* for setitimer() */ #include /* open() flags */ #include /* for geteuid(), getpid(), stat() */ #else @@ -4894,8 +4895,17 @@ do_watch(PQExpBuffer query_buf, double sleep) const char *strftime_fmt; const char *user_title; char *title; + const char *pagerprog = NULL; + FILE *pagerpipe = NULL; int title_len; int res = 0; +#ifndef WIN32 + sigset_t sigalrm_sigchld_sigint; + sigset_t sigalrm_sigchld; + sigset_t sigint; + struct itimerval interval; + bool done = false; +#endif if (!query_buf || query_buf->len <= 0) { @@ -4903,6 +4913,58 @@ do_watch(PQExpBuffer query_buf, double sleep) return false; } +#ifndef WIN32 + sigemptyset(&sigalrm_sigchld_sigint); + sigaddset(&sigalrm_sigchld_sigint, SIGCHLD); + sigaddset(&sigalrm_sigchld_sigint, SIGALRM); + sigaddset(&sigalrm_sigchld_sigint, SIGINT); + + sigemptyset(&sigalrm_sigchld); + sigaddset(&sigalrm_sigchld, SIGCHLD); + sigaddset(&sigalrm_sigchld, SIGALRM); + + sigemptyset(&sigint); + sigaddset(&sigint, SIGINT); + + /* + * Block SIGALRM and SIGCHLD before we start the timer and the pager (if + * configured), to avoid races. sigwait() will receive them. + */ + sigprocmask(SIG_BLOCK, &sigalrm_sigchld, NULL); + + /* + * Set a timer to interrupt sigwait() so we can run the query at the + * requested intervals. + */ + interval.it_value.tv_sec = sleep_ms / 1000; + interval.it_value.tv_usec = (sleep_ms % 1000) * 1000; + interval.it_interval = interval.it_value; + if (setitimer(ITIMER_REAL, &interval, NULL) < 0) + { + pg_log_error("could not set timer: %m"); + done = true; + } +#endif + + /* + * For \watch, we ignore the size of the result and always use the pager + * if PSQL_WATCH_PAGER is set. We also ignore the regular PSQL_PAGER or + * PAGER environment variables, because traditional pagers probably won't + * be very useful for showing a stream of results. + */ +#ifndef WIN32 + pagerprog = getenv("PSQL_WATCH_PAGER"); +#endif + if (pagerprog && myopt.topt.pager) + { + disable_sigpipe_trap(); + pagerpipe = popen(pagerprog, "w"); + + if (!pagerpipe) + /* silently proceed without pager */ + restore_sigpipe_trap(); + } + /* * Choose format for timestamps. We might eventually make this a \pset * option. In the meantime, using a variable for the format suppresses @@ -4911,10 +4973,12 @@ do_watch(PQExpBuffer query_buf, double sleep) strftime_fmt = "%c"; /* - * Set up rendering options, in particular, disable the pager, because - * nobody wants to be prompted while watching the output of 'watch'. + * Set up rendering options, in particular, disable the pager unless + * PSQL_WATCH_PAGER was successfully launched. */ - myopt.topt.pager = 0; + if (!pagerpipe) + myopt.topt.pager = 0; + /* * If there's a title in the user configuration, make sure we have room @@ -4929,7 +4993,6 @@ do_watch(PQExpBuffer query_buf, double sleep) { time_t timer; char timebuf[128]; - long i; /* * Prepare title for output. Note that we intentionally include a @@ -4948,7 +5011,7 @@ do_watch(PQExpBuffer query_buf, double sleep) myopt.title = title; /* Run the query and print out the results */ - res = PSQLexecWatch(query_buf->data, &myopt); + res = PSQLexecWatch(query_buf->data, &myopt, pagerpipe); /* * PSQLexecWatch handles the case where we can no longer repeat the @@ -4957,6 +5020,11 @@ do_watch(PQExpBuffer query_buf, double sleep) if (res <= 0) break; + if (pagerpipe && ferror(pagerpipe)) + break; + +#ifdef WIN32 + /* * Set up cancellation of 'watch' via SIGINT. We redo this each time * through the loop since it's conceivable something inside @@ -4967,12 +5035,10 @@ do_watch(PQExpBuffer query_buf, double sleep) /* * Enable 'watch' cancellations and wait a while before running the - * query again. Break the sleep into short intervals (at most 1s) - * since pg_usleep isn't interruptible on some platforms. + * query again. Break the sleep into short intervals (at most 1s). */ sigint_interrupt_enabled = true; - i = sleep_ms; - while (i > 0) + for (long i = sleep_ms; i > 0;) { long s = Min(i, 1000L); @@ -4982,8 +5048,57 @@ do_watch(PQExpBuffer query_buf, double sleep) i -= s; } sigint_interrupt_enabled = false; +#else + /* sigwait() will handle SIGINT. */ + sigprocmask(SIG_BLOCK, &sigint, NULL); + if (cancel_pressed) + done = true; + + /* Wait for SIGINT, SIGCHLD or SIGALRM. */ + while (!done) + { + int signal_received; + + if (sigwait(&sigalrm_sigchld_sigint, &signal_received) < 0) + { + /* Some other signal arrived? */ + if (errno == EINTR) + continue; + else + { + pg_log_error("could not wait for signals: %m"); + done = true; + break; + } + } + /* On ^C or pager exit, it's time to stop running the query. */ + if (signal_received == SIGINT || signal_received == SIGCHLD) + done = true; + /* Otherwise, we must have SIGALRM. Time to run the query again. */ + break; + } + + /* Unblock SIGINT so that slow queries can be interrupted. */ + sigprocmask(SIG_UNBLOCK, &sigint, NULL); + if (done) + break; +#endif } + if (pagerpipe) + { + pclose(pagerpipe); + restore_sigpipe_trap(); + } + +#ifndef WIN32 + /* Disable the interval timer. */ + memset(&interval, 0, sizeof(interval)); + setitimer(ITIMER_REAL, &interval, NULL); + /* Unblock SIGINT, SIGCHLD and SIGALRM. */ + sigprocmask(SIG_UNBLOCK, &sigalrm_sigchld_sigint, NULL); +#endif + pg_free(title); return (res >= 0); } diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index 9a00499510929..56407866782e2 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -592,12 +592,13 @@ PSQLexec(const char *query) * e.g., because of the interrupt, -1 on error. */ int -PSQLexecWatch(const char *query, const printQueryOpt *opt) +PSQLexecWatch(const char *query, const printQueryOpt *opt, FILE *printQueryFout) { PGresult *res; double elapsed_msec = 0; instr_time before; instr_time after; + FILE *fout; if (!pset.db) { @@ -638,14 +639,16 @@ PSQLexecWatch(const char *query, const printQueryOpt *opt) return 0; } + fout = printQueryFout ? printQueryFout : pset.queryFout; + switch (PQresultStatus(res)) { case PGRES_TUPLES_OK: - printQuery(res, opt, pset.queryFout, false, pset.logfile); + printQuery(res, opt, fout, false, pset.logfile); break; case PGRES_COMMAND_OK: - fprintf(pset.queryFout, "%s\n%s\n\n", opt->title, PQcmdStatus(res)); + fprintf(fout, "%s\n%s\n\n", opt->title, PQcmdStatus(res)); break; case PGRES_EMPTY_QUERY: @@ -668,7 +671,7 @@ PSQLexecWatch(const char *query, const printQueryOpt *opt) PQclear(res); - fflush(pset.queryFout); + fflush(fout); /* Possible microtiming output */ if (pset.timing) diff --git a/src/bin/psql/common.h b/src/bin/psql/common.h index 041b2ac068a74..d8538a4e06cde 100644 --- a/src/bin/psql/common.h +++ b/src/bin/psql/common.h @@ -29,7 +29,7 @@ extern sigjmp_buf sigint_interrupt_jmp; extern void psql_setup_cancel_handler(void); extern PGresult *PSQLexec(const char *query); -extern int PSQLexecWatch(const char *query, const printQueryOpt *opt); +extern int PSQLexecWatch(const char *query, const printQueryOpt *opt, FILE *printQueryFout); extern bool SendQuery(const char *query); diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index 3c250d11cff9b..d3fda67edd38b 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -347,7 +347,7 @@ helpVariables(unsigned short int pager) * Windows builds currently print one more line than non-Windows builds. * Using the larger number is fine. */ - output = PageOutput(158, pager ? &(pset.popt.topt) : NULL); + output = PageOutput(160, pager ? &(pset.popt.topt) : NULL); fprintf(output, _("List of specially treated variables\n\n")); @@ -505,6 +505,10 @@ helpVariables(unsigned short int pager) " alternative location for the command history file\n")); fprintf(output, _(" PSQL_PAGER, PAGER\n" " name of external pager program\n")); +#ifndef WIN32 + fprintf(output, _(" PSQL_WATCH_PAGER\n" + " name of external pager program used for \\watch\n")); +#endif fprintf(output, _(" PSQLRC\n" " alternative location for the user's .psqlrc file\n")); fprintf(output, _(" SHELL\n" diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c index 110906a4e959b..5f36f0d1c6dcb 100644 --- a/src/bin/psql/startup.c +++ b/src/bin/psql/startup.c @@ -110,6 +110,13 @@ log_locus_callback(const char **filename, uint64 *lineno) } } +#ifndef WIN32 +static void +empty_signal_handler(SIGNAL_ARGS) +{ +} +#endif + /* * * main @@ -302,6 +309,18 @@ main(int argc, char *argv[]) psql_setup_cancel_handler(); +#ifndef WIN32 + + /* + * do_watch() needs signal handlers installed (otherwise sigwait() will + * filter them out on some platforms), but doesn't need them to do + * anything, and they shouldn't ever run (unless perhaps a stray SIGALRM + * arrives due to a race when do_watch() cancels an itimer). + */ + pqsignal(SIGCHLD, empty_signal_handler); + pqsignal(SIGALRM, empty_signal_handler); +#endif + PQsetNoticeProcessor(pset.db, NoticeProcessor, NULL); SyncVariables(); From 41469253e970b539a4ae75226dd4f226b7b2bc8c Mon Sep 17 00:00:00 2001 From: David Rowley Date: Tue, 13 Jul 2021 12:40:16 +1200 Subject: [PATCH 649/671] Fix theoretical bug in tuplesort This fixes a theoretical bug in tuplesort.c which, if a bounded sort was used in combination with a byval Datum sort (tuplesort_begin_datum), when switching the sort to a bounded heap in make_bounded_heap(), we'd call free_sort_tuple(). The problem was that when sorting Datums of a byval type, the tuple is NULL and free_sort_tuple() would free the memory for it regardless of that. This would result in a crash. Here we fix that simply by adding a check to see if the tuple is NULL before trying to disassociate and free any memory belonging to it. The reason this bug is only theoretical is that nowhere in the current code base do we do tuplesort_set_bound() when performing a Datum sort. However, let's backpatch a fix for this as if any extension uses the code in this way then it's likely to cause problems. Author: Ronan Dunklau Discussion: https://postgr.es/m/CAApHDvpdoqNC5FjDb3KUTSMs5dg6f+XxH4Bg_dVcLi8UYAG3EQ@mail.gmail.com Backpatch-through: 9.6, oldest supported version --- src/backend/utils/sort/tuplesort.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c index 22972071ff0d0..27069814de9df 100644 --- a/src/backend/utils/sort/tuplesort.c +++ b/src/backend/utils/sort/tuplesort.c @@ -4773,6 +4773,9 @@ leader_takeover_tapes(Tuplesortstate *state) static void free_sort_tuple(Tuplesortstate *state, SortTuple *stup) { - FREEMEM(state, GetMemoryChunkSpace(stup->tuple)); - pfree(stup->tuple); + if (stup->tuple) + { + FREEMEM(state, GetMemoryChunkSpace(stup->tuple)); + pfree(stup->tuple); + } } From 5bd38d2f2846c7e387d04a16c4372da0de7b1221 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Tue, 13 Jul 2021 13:27:05 +1200 Subject: [PATCH 650/671] Robustify tuplesort's free_sort_tuple function 41469253e went to the trouble of removing a theoretical bug from free_sort_tuple by checking if the tuple was NULL before freeing it. Let's make this a little more robust by also setting the tuple to NULL so that should we be called again we won't end up doing a pfree on the already pfree'd tuple. Per advice from Tom Lane. Discussion: https://postgr.es/m/3188192.1626136953@sss.pgh.pa.us Backpatch-through: 9.6, same as 41469253e --- src/backend/utils/sort/tuplesort.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c index 27069814de9df..b17347b21419e 100644 --- a/src/backend/utils/sort/tuplesort.c +++ b/src/backend/utils/sort/tuplesort.c @@ -4777,5 +4777,6 @@ free_sort_tuple(Tuplesortstate *state, SortTuple *stup) { FREEMEM(state, GetMemoryChunkSpace(stup->tuple)); pfree(stup->tuple); + stup->tuple = NULL; } } From e0271d5f1e871dd61efc26bda8a0b556c7935901 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Tue, 13 Jul 2021 13:56:59 +1200 Subject: [PATCH 651/671] Remove useless range checks on INT8 sequences There's no point in checking if an INT8 sequence has a seqmin and seqmax value is outside the range of the minimum and maximum values for an int64 type. These both use the same underlying types so an INT8 certainly cannot be outside the minimum and maximum values supported by int64. This code is fairly harmless and it seems likely that most compilers would optimize it out anyway, never-the-less, let's remove it replacing it with a small comment to mention why the check is not needed. Author: Greg Nancarrow, with the comment revised by David Rowley Discussion: https://postgr.es/m/CAJcOf-c9KBUZ8ow_6e%3DWSfbbEyTKfqV%3DVwoFuODQVYMySHtusw%40mail.gmail.com --- src/backend/commands/sequence.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index e3f9f6d53d04b..d22d767d2fa45 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -1460,9 +1460,9 @@ init_params(ParseState *pstate, List *options, bool for_identity, seqdataform->log_cnt = 0; } + /* Validate maximum value. No need to check INT8 as seqmax is an int64 */ if ((seqform->seqtypid == INT2OID && (seqform->seqmax < PG_INT16_MIN || seqform->seqmax > PG_INT16_MAX)) - || (seqform->seqtypid == INT4OID && (seqform->seqmax < PG_INT32_MIN || seqform->seqmax > PG_INT32_MAX)) - || (seqform->seqtypid == INT8OID && (seqform->seqmax < PG_INT64_MIN || seqform->seqmax > PG_INT64_MAX))) + || (seqform->seqtypid == INT4OID && (seqform->seqmax < PG_INT32_MIN || seqform->seqmax > PG_INT32_MAX))) { char bufx[100]; @@ -1497,9 +1497,9 @@ init_params(ParseState *pstate, List *options, bool for_identity, seqdataform->log_cnt = 0; } + /* Validate minimum value. No need to check INT8 as seqmin is an int64 */ if ((seqform->seqtypid == INT2OID && (seqform->seqmin < PG_INT16_MIN || seqform->seqmin > PG_INT16_MAX)) - || (seqform->seqtypid == INT4OID && (seqform->seqmin < PG_INT32_MIN || seqform->seqmin > PG_INT32_MAX)) - || (seqform->seqtypid == INT8OID && (seqform->seqmin < PG_INT64_MIN || seqform->seqmin > PG_INT64_MAX))) + || (seqform->seqtypid == INT4OID && (seqform->seqmin < PG_INT32_MIN || seqform->seqmin > PG_INT32_MAX))) { char bufm[100]; From d68a00391214be2020e49be4b55f761d47a5c229 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 13 Jul 2021 15:01:01 -0400 Subject: [PATCH 652/671] Rename debug_invalidate_system_caches_always to debug_discard_caches. The name introduced by commit 4656e3d66 was agreed to be unreasonably long. To match this change, rename initdb's recently-added --clobber-cache option to --discard-caches. Discussion: https://postgr.es/m/1374320.1625430433@sss.pgh.pa.us --- .../postgres_fdw/expected/postgres_fdw.out | 6 ++--- contrib/postgres_fdw/sql/postgres_fdw.sql | 6 ++--- doc/src/sgml/config.sgml | 8 +++--- doc/src/sgml/ref/initdb.sgml | 22 ++++++++-------- doc/src/sgml/regress.sgml | 2 +- src/backend/utils/adt/lockfuncs.c | 8 +++--- src/backend/utils/cache/inval.c | 16 ++++++------ src/backend/utils/cache/plancache.c | 5 ++-- src/backend/utils/cache/relcache.c | 17 ++++++------ src/backend/utils/misc/guc.c | 12 ++++----- src/bin/initdb/initdb.c | 6 ++--- src/include/pg_config_manual.h | 26 +++++++++---------- src/include/utils/inval.h | 2 +- src/pl/plpgsql/src/expected/plpgsql_cache.out | 12 ++++----- .../plpgsql/src/expected/plpgsql_cache_1.out | 12 ++++----- .../plpgsql/src/expected/plpgsql_record.out | 8 +++--- src/pl/plpgsql/src/sql/plpgsql_cache.sql | 12 ++++----- src/pl/plpgsql/src/sql/plpgsql_record.sql | 8 +++--- src/test/isolation/specs/deadlock-soft-2.spec | 2 +- 19 files changed, 94 insertions(+), 96 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index b8561d6a3c49e..e5bbf3b0af169 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -9340,11 +9340,11 @@ WARNING: there is no transaction in progress -- Change application_name of remote connection to special one -- so that we can easily terminate the connection later. ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check'); --- If debug_invalidate_system_caches_always is active, it results in +-- If debug_discard_caches is active, it results in -- dropping remote connections after every transaction, making it -- impossible to test termination meaningfully. So turn that off -- for this test. -SET debug_invalidate_system_caches_always = 0; +SET debug_discard_caches = 0; -- Make sure we have a remote connection. SELECT 1 FROM ft1 LIMIT 1; ?column? @@ -9386,7 +9386,7 @@ SELECT 1 FROM ft1 LIMIT 1; -- should fail ERROR: 08006 \set VERBOSITY default COMMIT; -RESET debug_invalidate_system_caches_always; +RESET debug_discard_caches; -- ============================================================================= -- test connection invalidation cases and postgres_fdw_get_connections function -- ============================================================================= diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index c283e747154fb..fe503ed6c34dd 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -2831,11 +2831,11 @@ ROLLBACK; -- so that we can easily terminate the connection later. ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check'); --- If debug_invalidate_system_caches_always is active, it results in +-- If debug_discard_caches is active, it results in -- dropping remote connections after every transaction, making it -- impossible to test termination meaningfully. So turn that off -- for this test. -SET debug_invalidate_system_caches_always = 0; +SET debug_discard_caches = 0; -- Make sure we have a remote connection. SELECT 1 FROM ft1 LIMIT 1; @@ -2861,7 +2861,7 @@ SELECT 1 FROM ft1 LIMIT 1; -- should fail \set VERBOSITY default COMMIT; -RESET debug_invalidate_system_caches_always; +RESET debug_discard_caches; -- ============================================================================= -- test connection invalidation cases and postgres_fdw_get_connections function diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 381d8636ab498..d1b889b80f607 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -10341,10 +10341,10 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' - - debug_invalidate_system_caches_always (integer) + + debug_discard_caches (integer) - debug_invalidate_system_caches_always configuration parameter + debug_discard_caches configuration parameter @@ -10369,7 +10369,7 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' This parameter is supported when - CLOBBER_CACHE_ENABLED was defined at compile time + DISCARD_CACHES_ENABLED was defined at compile time (which happens automatically when using the configure option ). In production builds, its value diff --git a/doc/src/sgml/ref/initdb.sgml b/doc/src/sgml/ref/initdb.sgml index 3077530c7b4e6..e62742850a3b8 100644 --- a/doc/src/sgml/ref/initdb.sgml +++ b/doc/src/sgml/ref/initdb.sgml @@ -388,17 +388,6 @@ PostgreSQL documentation Other, less commonly used, options are also available: - - - - - Run the bootstrap backend with the - debug_invalidate_system_caches_always=1 option. - This takes a very long time and is only of use for deep debugging. - - - - @@ -413,6 +402,17 @@ PostgreSQL documentation + + + + + Run the bootstrap backend with the + debug_discard_caches=1 option. + This takes a very long time and is only of use for deep debugging. + + + + diff --git a/doc/src/sgml/regress.sgml b/doc/src/sgml/regress.sgml index c35e036028b1a..acc7a50c2f2e2 100644 --- a/doc/src/sgml/regress.sgml +++ b/doc/src/sgml/regress.sgml @@ -373,7 +373,7 @@ make check EXTRA_REGRESS_OPTS="--temp-config=test_postgresql.conf" This can be useful to enable additional logging, adjust resource limits, or enable extra run-time checks such as . + linkend="guc-debug-discard-caches"/>. diff --git a/src/backend/utils/adt/lockfuncs.c b/src/backend/utils/adt/lockfuncs.c index 085fec3ea2044..5dc0a5882cf60 100644 --- a/src/backend/utils/adt/lockfuncs.c +++ b/src/backend/utils/adt/lockfuncs.c @@ -636,10 +636,10 @@ pg_isolation_test_session_is_blocked(PG_FUNCTION_ARGS) * Check if any of these are in the list of interesting PIDs, that being * the sessions that the isolation tester is running. We don't use * "arrayoverlaps" here, because it would lead to cache lookups and one of - * our goals is to run quickly with debug_invalidate_system_caches_always - * > 0. We expect blocking_pids to be usually empty and otherwise a very - * small number in isolation tester cases, so make that the outer loop of - * a naive search for a match. + * our goals is to run quickly with debug_discard_caches > 0. We expect + * blocking_pids to be usually empty and otherwise a very small number in + * isolation tester cases, so make that the outer loop of a naive search + * for a match. */ for (i = 0; i < num_blocking_pids; i++) for (j = 0; j < num_interesting_pids; j++) diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index d22cc5a93b38f..9c79775725b68 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -182,7 +182,7 @@ static int numSharedInvalidMessagesArray; static int maxSharedInvalidMessagesArray; /* GUC storage */ -int debug_invalidate_system_caches_always = 0; +int debug_discard_caches = 0; /* * Dynamically-registered callback functions. Current implementation @@ -690,7 +690,7 @@ AcceptInvalidationMessages(void) ReceiveSharedInvalidMessages(LocalExecuteInvalidationMessage, InvalidateSystemCaches); - /* + /*---------- * Test code to force cache flushes anytime a flush could happen. * * This helps detect intermittent faults caused by code that reads a cache @@ -698,28 +698,28 @@ AcceptInvalidationMessages(void) * rarely actually does so. This can spot issues that would otherwise * only arise with badly timed concurrent DDL, for example. * - * The default debug_invalidate_system_caches_always = 0 does no forced - * cache flushes. + * The default debug_discard_caches = 0 does no forced cache flushes. * * If used with CLOBBER_FREED_MEMORY, - * debug_invalidate_system_caches_always = 1 (CLOBBER_CACHE_ALWAYS) + * debug_discard_caches = 1 (formerly known as CLOBBER_CACHE_ALWAYS) * provides a fairly thorough test that the system contains no cache-flush * hazards. However, it also makes the system unbelievably slow --- the * regression tests take about 100 times longer than normal. * * If you're a glutton for punishment, try - * debug_invalidate_system_caches_always = 3 (CLOBBER_CACHE_RECURSIVELY). + * debug_discard_caches = 3 (formerly known as CLOBBER_CACHE_RECURSIVELY). * This slows things by at least a factor of 10000, so I wouldn't suggest * trying to run the entire regression tests that way. It's useful to try * a few simple tests, to make sure that cache reload isn't subject to * internal cache-flush hazards, but after you've done a few thousand * recursive reloads it's unlikely you'll learn more. + *---------- */ -#ifdef CLOBBER_CACHE_ENABLED +#ifdef DISCARD_CACHES_ENABLED { static int recursion_depth = 0; - if (recursion_depth < debug_invalidate_system_caches_always) + if (recursion_depth < debug_discard_caches) { recursion_depth++; InvalidateSystemCaches(); diff --git a/src/backend/utils/cache/plancache.c b/src/backend/utils/cache/plancache.c index 07b0145132735..6767eae8f204e 100644 --- a/src/backend/utils/cache/plancache.c +++ b/src/backend/utils/cache/plancache.c @@ -897,9 +897,8 @@ BuildCachedPlan(CachedPlanSource *plansource, List *qlist, * rejected a generic plan, it's possible to reach here with is_valid * false due to an invalidation while making the generic plan. In theory * the invalidation must be a false positive, perhaps a consequence of an - * sinval reset event or the debug_invalidate_system_caches_always code. - * But for safety, let's treat it as real and redo the - * RevalidateCachedQuery call. + * sinval reset event or the debug_discard_caches code. But for safety, + * let's treat it as real and redo the RevalidateCachedQuery call. */ if (!plansource->is_valid) qlist = RevalidateCachedQuery(plansource, queryEnv); diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 5dac9f0696012..13d9994af3e8d 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -97,7 +97,7 @@ #define MAYBE_RECOVER_RELATION_BUILD_MEMORY 1 #else #define RECOVER_RELATION_BUILD_MEMORY 0 -#ifdef CLOBBER_CACHE_ENABLED +#ifdef DISCARD_CACHES_ENABLED #define MAYBE_RECOVER_RELATION_BUILD_MEMORY 1 #endif #endif @@ -1011,10 +1011,10 @@ RelationBuildDesc(Oid targetRelId, bool insertIt) * data, reasoning that the caller's context is at worst of transaction * scope, and relcache loads shouldn't happen so often that it's essential * to recover transient data before end of statement/transaction. However - * that's definitely not true in clobber-cache test builds, and perhaps - * it's not true in other cases. + * that's definitely not true when debug_discard_caches is active, and + * perhaps it's not true in other cases. * - * When cache clobbering is enabled or when forced to by + * When debug_discard_caches is active or when forced to by * RECOVER_RELATION_BUILD_MEMORY=1, arrange to allocate the junk in a * temporary context that we'll free before returning. Make it a child of * caller's context so that it will get cleaned up appropriately if we @@ -1024,7 +1024,7 @@ RelationBuildDesc(Oid targetRelId, bool insertIt) MemoryContext tmpcxt = NULL; MemoryContext oldcxt = NULL; - if (RECOVER_RELATION_BUILD_MEMORY || debug_invalidate_system_caches_always > 0) + if (RECOVER_RELATION_BUILD_MEMORY || debug_discard_caches > 0) { tmpcxt = AllocSetContextCreate(CurrentMemoryContext, "RelationBuildDesc workspace", @@ -1627,11 +1627,10 @@ LookupOpclassInfo(Oid operatorClassOid, * otherwise. However it can be helpful for detecting bugs in the cache * loading logic itself, such as reliance on a non-nailed index. Given * the limited use-case and the fact that this adds a great deal of - * expense, we enable it only for high values of - * debug_invalidate_system_caches_always. + * expense, we enable it only for high values of debug_discard_caches. */ -#ifdef CLOBBER_CACHE_ENABLED - if (debug_invalidate_system_caches_always > 2) +#ifdef DISCARD_CACHES_ENABLED + if (debug_discard_caches > 2) opcentry->valid = false; #endif diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 480e8cd19914e..45a053ca40565 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -3513,13 +3513,13 @@ static struct config_int ConfigureNamesInt[] = }, { - {"debug_invalidate_system_caches_always", PGC_SUSET, DEVELOPER_OPTIONS, - gettext_noop("Aggressively invalidate system caches for debugging purposes."), + {"debug_discard_caches", PGC_SUSET, DEVELOPER_OPTIONS, + gettext_noop("Aggressively flush system caches for debugging purposes."), NULL, GUC_NOT_IN_SAMPLE }, - &debug_invalidate_system_caches_always, -#ifdef CLOBBER_CACHE_ENABLED + &debug_discard_caches, +#ifdef DISCARD_CACHES_ENABLED /* Set default based on older compile-time-only cache clobber macros */ #if defined(CLOBBER_CACHE_RECURSIVELY) 3, @@ -3529,9 +3529,9 @@ static struct config_int ConfigureNamesInt[] = 0, #endif 0, 5, -#else /* not CLOBBER_CACHE_ENABLED */ +#else /* not DISCARD_CACHES_ENABLED */ 0, 0, 0, -#endif /* not CLOBBER_CACHE_ENABLED */ +#endif /* not DISCARD_CACHES_ENABLED */ NULL, NULL, NULL }, diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 0945d70061948..77e621a76799e 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -2266,8 +2266,8 @@ usage(const char *progname) printf(_(" -X, --waldir=WALDIR location for the write-ahead log directory\n")); printf(_(" --wal-segsize=SIZE size of WAL segments, in megabytes\n")); printf(_("\nLess commonly used options:\n")); - printf(_(" --clobber-cache use cache-clobbering debug option\n")); printf(_(" -d, --debug generate lots of debugging output\n")); + printf(_(" --discard-caches set debug_discard_caches=1\n")); printf(_(" -L DIRECTORY where to find the input files\n")); printf(_(" -n, --no-clean do not clean up after errors\n")); printf(_(" -N, --no-sync do not wait for changes to be written safely to disk\n")); @@ -2947,7 +2947,7 @@ main(int argc, char *argv[]) {"wal-segsize", required_argument, NULL, 12}, {"data-checksums", no_argument, NULL, 'k'}, {"allow-group-access", no_argument, NULL, 'g'}, - {"clobber-cache", no_argument, NULL, 14}, + {"discard-caches", no_argument, NULL, 14}, {NULL, 0, NULL, 0} }; @@ -3092,7 +3092,7 @@ main(int argc, char *argv[]) case 14: extra_options = psprintf("%s %s", extra_options, - "-c debug_invalidate_system_caches_always=1"); + "-c debug_discard_caches=1"); break; default: /* getopt_long already emitted a complaint */ diff --git a/src/include/pg_config_manual.h b/src/include/pg_config_manual.h index 27da86e5e09af..614035e2159ef 100644 --- a/src/include/pg_config_manual.h +++ b/src/include/pg_config_manual.h @@ -322,36 +322,36 @@ /* #define RANDOMIZE_ALLOCATED_MEMORY */ /* - * For cache invalidation debugging, define CLOBBER_CACHE_ENABLED to enable - * use of the debug_invalidate_system_caches_always GUC to aggressively flush - * syscache/relcache entries whenever it's possible to deliver invalidations. - * See AcceptInvalidationMessages() in src/backend/utils/cache/inval.c for + * For cache-invalidation debugging, define DISCARD_CACHES_ENABLED to enable + * use of the debug_discard_caches GUC to aggressively flush syscache/relcache + * entries whenever it's possible to deliver invalidations. See + * AcceptInvalidationMessages() in src/backend/utils/cache/inval.c for * details. * * USE_ASSERT_CHECKING builds default to enabling this. It's possible to use - * CLOBBER_CACHE_ENABLED without a cassert build and the implied - * CLOBBER_FREED_MEMORY and MEMORY_CONTEXT_CHECKING options but it's unlikely + * DISCARD_CACHES_ENABLED without a cassert build and the implied + * CLOBBER_FREED_MEMORY and MEMORY_CONTEXT_CHECKING options, but it's unlikely * to be as effective at identifying problems. */ -/* #define CLOBBER_CACHE_ENABLED */ +/* #define DISCARD_CACHES_ENABLED */ -#if defined(USE_ASSERT_CHECKING) && !defined(CLOBBER_CACHE_ENABLED) -#define CLOBBER_CACHE_ENABLED +#if defined(USE_ASSERT_CHECKING) && !defined(DISCARD_CACHES_ENABLED) +#define DISCARD_CACHES_ENABLED #endif /* - * Backwards compatibility for the older compile-time-only cache clobber + * Backwards compatibility for the older compile-time-only clobber-cache * macros. */ -#if !defined(CLOBBER_CACHE_ENABLED) && (defined(CLOBBER_CACHE_ALWAYS) || defined(CLOBBER_CACHE_RECURSIVELY)) -#define CLOBBER_CACHE_ENABLED +#if !defined(DISCARD_CACHES_ENABLED) && (defined(CLOBBER_CACHE_ALWAYS) || defined(CLOBBER_CACHE_RECURSIVELY)) +#define DISCARD_CACHES_ENABLED #endif /* * Recover memory used for relcache entries when invalidated. See * RelationBuildDescr() in src/backend/utils/cache/relcache.c. * - * This is active automatically for clobber cache builds when clobbering is + * This is active automatically for clobber-cache builds when clobbering is * active, but can be overridden here by explicitly defining * RECOVER_RELATION_BUILD_MEMORY. Define to 1 to always free relation cache * memory even when clobber is off, or to 0 to never free relation cache diff --git a/src/include/utils/inval.h b/src/include/utils/inval.h index a7e04722d0149..770672890b03c 100644 --- a/src/include/utils/inval.h +++ b/src/include/utils/inval.h @@ -18,7 +18,7 @@ #include "storage/relfilenode.h" #include "utils/relcache.h" -extern PGDLLIMPORT int debug_invalidate_system_caches_always; +extern PGDLLIMPORT int debug_discard_caches; typedef void (*SyscacheCallbackFunction) (Datum arg, int cacheid, uint32 hashvalue); typedef void (*RelcacheCallbackFunction) (Datum arg, Oid relid); diff --git a/src/pl/plpgsql/src/expected/plpgsql_cache.out b/src/pl/plpgsql/src/expected/plpgsql_cache.out index cc0c57b8794f5..9df188ce56b17 100644 --- a/src/pl/plpgsql/src/expected/plpgsql_cache.out +++ b/src/pl/plpgsql/src/expected/plpgsql_cache.out @@ -3,10 +3,10 @@ -- -- These tests logically belong in plpgsql_record.sql, and perhaps someday -- can be merged back into it. For now, however, their results are different --- depending on debug_invalidate_system_caches_always, so we must have two --- expected-output files to cover both cases. To minimize the maintenance --- effort resulting from that, this file should contain only tests that --- do have different results under debug_invalidate_system_caches_always. +-- depending on debug_discard_caches, so we must have two expected-output +-- files to cover both cases. To minimize the maintenance effort resulting +-- from that, this file should contain only tests that do have different +-- results under debug_discard_caches. -- -- check behavior with changes of a named rowtype create table c_mutable(f1 int, f2 text); @@ -21,7 +21,7 @@ select c_sillyaddone(42); alter table c_mutable drop column f1; alter table c_mutable add column f1 float8; -- currently, this fails due to cached plan for "r.f1 + 1" expression --- (but if debug_invalidate_system_caches_always is on, it will succeed) +-- (but if debug_discard_caches is on, it will succeed) select c_sillyaddone(42); ERROR: type of parameter 4 (double precision) does not match that when preparing the plan (integer) CONTEXT: PL/pgSQL function c_sillyaddone(integer) line 1 at RETURN @@ -52,7 +52,7 @@ select show_result_type('select 1 as a'); (1 row) -- currently this fails due to cached plan for pg_typeof expression --- (but if debug_invalidate_system_caches_always is on, it will succeed) +-- (but if debug_discard_caches is on, it will succeed) select show_result_type('select 2.0 as a'); ERROR: type of parameter 5 (numeric) does not match that when preparing the plan (integer) CONTEXT: SQL statement "select pg_typeof(r.a)" diff --git a/src/pl/plpgsql/src/expected/plpgsql_cache_1.out b/src/pl/plpgsql/src/expected/plpgsql_cache_1.out index 2a42875747ea8..3b8c73af34c16 100644 --- a/src/pl/plpgsql/src/expected/plpgsql_cache_1.out +++ b/src/pl/plpgsql/src/expected/plpgsql_cache_1.out @@ -3,10 +3,10 @@ -- -- These tests logically belong in plpgsql_record.sql, and perhaps someday -- can be merged back into it. For now, however, their results are different --- depending on debug_invalidate_system_caches_always, so we must have two --- expected-output files to cover both cases. To minimize the maintenance --- effort resulting from that, this file should contain only tests that --- do have different results under debug_invalidate_system_caches_always. +-- depending on debug_discard_caches, so we must have two expected-output +-- files to cover both cases. To minimize the maintenance effort resulting +-- from that, this file should contain only tests that do have different +-- results under debug_discard_caches. -- -- check behavior with changes of a named rowtype create table c_mutable(f1 int, f2 text); @@ -21,7 +21,7 @@ select c_sillyaddone(42); alter table c_mutable drop column f1; alter table c_mutable add column f1 float8; -- currently, this fails due to cached plan for "r.f1 + 1" expression --- (but if debug_invalidate_system_caches_always is on, it will succeed) +-- (but if debug_discard_caches is on, it will succeed) select c_sillyaddone(42); c_sillyaddone --------------- @@ -55,7 +55,7 @@ select show_result_type('select 1 as a'); (1 row) -- currently this fails due to cached plan for pg_typeof expression --- (but if debug_invalidate_system_caches_always is on, it will succeed) +-- (but if debug_discard_caches is on, it will succeed) select show_result_type('select 2.0 as a'); show_result_type ------------------------ diff --git a/src/pl/plpgsql/src/expected/plpgsql_record.out b/src/pl/plpgsql/src/expected/plpgsql_record.out index 86d0665924172..4c5d95c79ecb6 100644 --- a/src/pl/plpgsql/src/expected/plpgsql_record.out +++ b/src/pl/plpgsql/src/expected/plpgsql_record.out @@ -426,7 +426,7 @@ select getf1(row(1,2)); 1 (1 row) --- the context stack is different when debug_invalidate_system_caches_always +-- the context stack is different when debug_discard_caches -- is set, so suppress context output \set SHOW_CONTEXT never select getf1(row(1,2)::two_int8s); @@ -507,7 +507,7 @@ select sillyaddone(42); -- test for change of type of column f1 should be here someday; -- for now see plpgsql_cache test alter table mutable drop column f1; --- the context stack is different when debug_invalidate_system_caches_always +-- the context stack is different when debug_discard_caches -- is set, so suppress context output \set SHOW_CONTEXT never select sillyaddone(42); -- fail @@ -527,7 +527,7 @@ select getf3(null::mutable); -- now it works (1 row) alter table mutable drop column f3; --- the context stack is different when debug_invalidate_system_caches_always +-- the context stack is different when debug_discard_caches -- is set, so suppress context output \set SHOW_CONTEXT never select getf3(null::mutable); -- fails again @@ -552,7 +552,7 @@ select sillyaddtwo(42); (1 row) drop table mutable2; --- the context stack is different when debug_invalidate_system_caches_always +-- the context stack is different when debug_discard_caches -- is set, so suppress context output \set SHOW_CONTEXT never select sillyaddtwo(42); -- fail diff --git a/src/pl/plpgsql/src/sql/plpgsql_cache.sql b/src/pl/plpgsql/src/sql/plpgsql_cache.sql index 061f674c9a6ea..a48f9b2afa7cc 100644 --- a/src/pl/plpgsql/src/sql/plpgsql_cache.sql +++ b/src/pl/plpgsql/src/sql/plpgsql_cache.sql @@ -3,10 +3,10 @@ -- -- These tests logically belong in plpgsql_record.sql, and perhaps someday -- can be merged back into it. For now, however, their results are different --- depending on debug_invalidate_system_caches_always, so we must have two --- expected-output files to cover both cases. To minimize the maintenance --- effort resulting from that, this file should contain only tests that --- do have different results under debug_invalidate_system_caches_always. +-- depending on debug_discard_caches, so we must have two expected-output +-- files to cover both cases. To minimize the maintenance effort resulting +-- from that, this file should contain only tests that do have different +-- results under debug_discard_caches. -- -- check behavior with changes of a named rowtype @@ -20,7 +20,7 @@ alter table c_mutable drop column f1; alter table c_mutable add column f1 float8; -- currently, this fails due to cached plan for "r.f1 + 1" expression --- (but if debug_invalidate_system_caches_always is on, it will succeed) +-- (but if debug_discard_caches is on, it will succeed) select c_sillyaddone(42); -- but it's OK if we force plan rebuilding @@ -42,7 +42,7 @@ $$; select show_result_type('select 1 as a'); -- currently this fails due to cached plan for pg_typeof expression --- (but if debug_invalidate_system_caches_always is on, it will succeed) +-- (but if debug_discard_caches is on, it will succeed) select show_result_type('select 2.0 as a'); -- but it's OK if we force plan rebuilding diff --git a/src/pl/plpgsql/src/sql/plpgsql_record.sql b/src/pl/plpgsql/src/sql/plpgsql_record.sql index 722048c7308b0..535a3407a4caa 100644 --- a/src/pl/plpgsql/src/sql/plpgsql_record.sql +++ b/src/pl/plpgsql/src/sql/plpgsql_record.sql @@ -257,7 +257,7 @@ create function getf1(x record) returns int language plpgsql as $$ begin return x.f1; end $$; select getf1(1); select getf1(row(1,2)); --- the context stack is different when debug_invalidate_system_caches_always +-- the context stack is different when debug_discard_caches -- is set, so suppress context output \set SHOW_CONTEXT never select getf1(row(1,2)::two_int8s); @@ -316,7 +316,7 @@ select sillyaddone(42); -- for now see plpgsql_cache test alter table mutable drop column f1; --- the context stack is different when debug_invalidate_system_caches_always +-- the context stack is different when debug_discard_caches -- is set, so suppress context output \set SHOW_CONTEXT never select sillyaddone(42); -- fail @@ -328,7 +328,7 @@ select getf3(null::mutable); -- doesn't work yet alter table mutable add column f3 int; select getf3(null::mutable); -- now it works alter table mutable drop column f3; --- the context stack is different when debug_invalidate_system_caches_always +-- the context stack is different when debug_discard_caches -- is set, so suppress context output \set SHOW_CONTEXT never select getf3(null::mutable); -- fails again @@ -346,7 +346,7 @@ select sillyaddtwo(42); -- fail create table mutable2(f1 int, f2 text); select sillyaddtwo(42); drop table mutable2; --- the context stack is different when debug_invalidate_system_caches_always +-- the context stack is different when debug_discard_caches -- is set, so suppress context output \set SHOW_CONTEXT never select sillyaddtwo(42); -- fail diff --git a/src/test/isolation/specs/deadlock-soft-2.spec b/src/test/isolation/specs/deadlock-soft-2.spec index 5b7d3db5036d2..26d9c62988dd2 100644 --- a/src/test/isolation/specs/deadlock-soft-2.spec +++ b/src/test/isolation/specs/deadlock-soft-2.spec @@ -38,6 +38,6 @@ step s4c { COMMIT; } # The expected output for this test assumes that isolationtester will # detect step s1b as waiting before the deadlock detector runs and # releases s1 from its blocked state. To ensure that happens even in -# very slow (CLOBBER_CACHE_ALWAYS) cases, apply a (*) annotation. +# very slow (debug_discard_caches) cases, apply a (*) annotation. permutation s1a s2a s2b s3a s4a s1b(*) s1c s2c s3c s4c From 83f4fcc65503c5d4e5d5eefc8e7a70d3c9a6496f Mon Sep 17 00:00:00 2001 From: David Rowley Date: Wed, 14 Jul 2021 12:43:58 +1200 Subject: [PATCH 653/671] Change the name of the Result Cache node to Memoize "Result Cache" was never a great name for this node, but nobody managed to come up with another name that anyone liked enough. That was until David Johnston mentioned "Node Memoization", which Tom Lane revised to just "Memoize". People seem to like "Memoize", so let's do the rename. Reviewed-by: Justin Pryzby Discussion: https://postgr.es/m/20210708165145.GG1176@momjian.us Backpatch-through: 14, where Result Cache was introduced --- .../postgres_fdw/expected/postgres_fdw.out | 6 +- contrib/postgres_fdw/sql/postgres_fdw.sql | 4 +- doc/src/sgml/config.sgml | 8 +- src/backend/commands/explain.c | 65 ++- src/backend/executor/Makefile | 2 +- src/backend/executor/execAmi.c | 6 +- src/backend/executor/execParallel.c | 21 +- src/backend/executor/execProcnode.c | 12 +- .../{nodeResultCache.c => nodeMemoize.c} | 484 +++++++++--------- src/backend/nodes/copyfuncs.c | 12 +- src/backend/nodes/outfuncs.c | 16 +- src/backend/nodes/readfuncs.c | 12 +- src/backend/optimizer/README | 2 +- src/backend/optimizer/path/allpaths.c | 6 +- src/backend/optimizer/path/costsize.c | 42 +- src/backend/optimizer/path/joinpath.c | 86 ++-- src/backend/optimizer/plan/createplan.c | 49 +- src/backend/optimizer/plan/initsplan.c | 18 +- src/backend/optimizer/plan/setrefs.c | 14 +- src/backend/optimizer/plan/subselect.c | 4 +- src/backend/optimizer/util/pathnode.c | 56 +- src/backend/utils/misc/guc.c | 6 +- src/backend/utils/misc/postgresql.conf.sample | 2 +- src/include/executor/nodeMemoize.h | 32 ++ src/include/executor/nodeResultCache.h | 32 -- src/include/nodes/execnodes.h | 48 +- src/include/nodes/nodes.h | 6 +- src/include/nodes/pathnodes.h | 12 +- src/include/nodes/plannodes.h | 6 +- src/include/optimizer/cost.h | 2 +- src/include/optimizer/pathnode.h | 14 +- src/test/regress/expected/aggregates.out | 4 +- src/test/regress/expected/join.out | 24 +- .../expected/{resultcache.out => memoize.out} | 30 +- src/test/regress/expected/partition_prune.out | 4 +- src/test/regress/expected/subselect.out | 2 +- src/test/regress/expected/sysviews.out | 2 +- src/test/regress/parallel_schedule | 2 +- src/test/regress/sql/aggregates.sql | 4 +- src/test/regress/sql/join.sql | 4 +- .../sql/{resultcache.sql => memoize.sql} | 16 +- src/test/regress/sql/partition_prune.sql | 4 +- src/tools/pgindent/typedefs.list | 20 +- 43 files changed, 595 insertions(+), 606 deletions(-) rename src/backend/executor/{nodeResultCache.c => nodeMemoize.c} (65%) create mode 100644 src/include/executor/nodeMemoize.h delete mode 100644 src/include/executor/nodeResultCache.h rename src/test/regress/expected/{resultcache.out => memoize.out} (88%) rename src/test/regress/sql/{resultcache.sql => memoize.sql} (88%) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index e5bbf3b0af169..ed25e7a743fbd 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -1602,7 +1602,7 @@ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL 20 | 0 | AAA020 (10 rows) -SET enable_resultcache TO off; +SET enable_memoize TO off; -- right outer join + left outer join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; @@ -1629,7 +1629,7 @@ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT 20 | 0 | AAA020 (10 rows) -RESET enable_resultcache; +RESET enable_memoize; -- left outer join + right outer join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; @@ -2149,7 +2149,7 @@ SELECT t1."C 1" FROM "S 1"."T 1" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM Output: t1."C 1" -> Index Scan using t1_pkey on "S 1"."T 1" t1 Output: t1."C 1", t1.c2, t1.c3, t1.c4, t1.c5, t1.c6, t1.c7, t1.c8 - -> Result Cache + -> Memoize Cache Key: t1.c2 -> Subquery Scan on q -> HashAggregate diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index fe503ed6c34dd..02a6b15a13f64 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -502,12 +502,12 @@ SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; -SET enable_resultcache TO off; +SET enable_memoize TO off; -- right outer join + left outer join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; -RESET enable_resultcache; +RESET enable_memoize; -- left outer join + right outer join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index d1b889b80f607..43772c2a98047 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -5018,15 +5018,15 @@ ANY num_sync ( - enable_resultcache (boolean) + + enable_memoize (boolean) - enable_resultcache configuration parameter + enable_memoize configuration parameter - Enables or disables the query planner's use of result cache plans for + Enables or disables the query planner's use of memoize plans for caching results from parameterized scans inside nested-loop joins. This plan type allows scans to the underlying plans to be skipped when the results for the current parameters are already in the cache. Less diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index e81b990092594..340db2bac4d06 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -109,8 +109,8 @@ static void show_sort_info(SortState *sortstate, ExplainState *es); static void show_incremental_sort_info(IncrementalSortState *incrsortstate, ExplainState *es); static void show_hash_info(HashState *hashstate, ExplainState *es); -static void show_resultcache_info(ResultCacheState *rcstate, List *ancestors, - ExplainState *es); +static void show_memoize_info(MemoizeState *mstate, List *ancestors, + ExplainState *es); static void show_hashagg_info(AggState *hashstate, ExplainState *es); static void show_tidbitmap_info(BitmapHeapScanState *planstate, ExplainState *es); @@ -1298,8 +1298,8 @@ ExplainNode(PlanState *planstate, List *ancestors, case T_Material: pname = sname = "Materialize"; break; - case T_ResultCache: - pname = sname = "Result Cache"; + case T_Memoize: + pname = sname = "Memoize"; break; case T_Sort: pname = sname = "Sort"; @@ -2013,9 +2013,9 @@ ExplainNode(PlanState *planstate, List *ancestors, case T_Hash: show_hash_info(castNode(HashState, planstate), es); break; - case T_ResultCache: - show_resultcache_info(castNode(ResultCacheState, planstate), - ancestors, es); + case T_Memoize: + show_memoize_info(castNode(MemoizeState, planstate), ancestors, + es); break; default: break; @@ -3085,13 +3085,12 @@ show_hash_info(HashState *hashstate, ExplainState *es) } /* - * Show information on result cache hits/misses/evictions and memory usage. + * Show information on memoize hits/misses/evictions and memory usage. */ static void -show_resultcache_info(ResultCacheState *rcstate, List *ancestors, - ExplainState *es) +show_memoize_info(MemoizeState *mstate, List *ancestors, ExplainState *es) { - Plan *plan = ((PlanState *) rcstate)->plan; + Plan *plan = ((PlanState *) mstate)->plan; ListCell *lc; List *context; StringInfoData keystr; @@ -3102,7 +3101,7 @@ show_resultcache_info(ResultCacheState *rcstate, List *ancestors, initStringInfo(&keystr); /* - * It's hard to imagine having a result cache with fewer than 2 RTEs, but + * It's hard to imagine having a memoize node with fewer than 2 RTEs, but * let's just keep the same useprefix logic as elsewhere in this file. */ useprefix = list_length(es->rtable) > 1 || es->verbose; @@ -3112,7 +3111,7 @@ show_resultcache_info(ResultCacheState *rcstate, List *ancestors, plan, ancestors); - foreach(lc, ((ResultCache *) plan)->param_exprs) + foreach(lc, ((Memoize *) plan)->param_exprs) { Node *expr = (Node *) lfirst(lc); @@ -3138,23 +3137,23 @@ show_resultcache_info(ResultCacheState *rcstate, List *ancestors, if (!es->analyze) return; - if (rcstate->stats.cache_misses > 0) + if (mstate->stats.cache_misses > 0) { /* * mem_peak is only set when we freed memory, so we must use mem_used * when mem_peak is 0. */ - if (rcstate->stats.mem_peak > 0) - memPeakKb = (rcstate->stats.mem_peak + 1023) / 1024; + if (mstate->stats.mem_peak > 0) + memPeakKb = (mstate->stats.mem_peak + 1023) / 1024; else - memPeakKb = (rcstate->mem_used + 1023) / 1024; + memPeakKb = (mstate->mem_used + 1023) / 1024; if (es->format != EXPLAIN_FORMAT_TEXT) { - ExplainPropertyInteger("Cache Hits", NULL, rcstate->stats.cache_hits, es); - ExplainPropertyInteger("Cache Misses", NULL, rcstate->stats.cache_misses, es); - ExplainPropertyInteger("Cache Evictions", NULL, rcstate->stats.cache_evictions, es); - ExplainPropertyInteger("Cache Overflows", NULL, rcstate->stats.cache_overflows, es); + ExplainPropertyInteger("Cache Hits", NULL, mstate->stats.cache_hits, es); + ExplainPropertyInteger("Cache Misses", NULL, mstate->stats.cache_misses, es); + ExplainPropertyInteger("Cache Evictions", NULL, mstate->stats.cache_evictions, es); + ExplainPropertyInteger("Cache Overflows", NULL, mstate->stats.cache_overflows, es); ExplainPropertyInteger("Peak Memory Usage", "kB", memPeakKb, es); } else @@ -3162,23 +3161,23 @@ show_resultcache_info(ResultCacheState *rcstate, List *ancestors, ExplainIndentText(es); appendStringInfo(es->str, "Hits: " UINT64_FORMAT " Misses: " UINT64_FORMAT " Evictions: " UINT64_FORMAT " Overflows: " UINT64_FORMAT " Memory Usage: " INT64_FORMAT "kB\n", - rcstate->stats.cache_hits, - rcstate->stats.cache_misses, - rcstate->stats.cache_evictions, - rcstate->stats.cache_overflows, + mstate->stats.cache_hits, + mstate->stats.cache_misses, + mstate->stats.cache_evictions, + mstate->stats.cache_overflows, memPeakKb); } } - if (rcstate->shared_info == NULL) + if (mstate->shared_info == NULL) return; /* Show details from parallel workers */ - for (int n = 0; n < rcstate->shared_info->num_workers; n++) + for (int n = 0; n < mstate->shared_info->num_workers; n++) { - ResultCacheInstrumentation *si; + MemoizeInstrumentation *si; - si = &rcstate->shared_info->sinstrument[n]; + si = &mstate->shared_info->sinstrument[n]; /* * Skip workers that didn't do any work. We needn't bother checking @@ -3191,10 +3190,10 @@ show_resultcache_info(ResultCacheState *rcstate, List *ancestors, ExplainOpenWorker(n, es); /* - * Since the worker's ResultCacheState.mem_used field is unavailable - * to us, ExecEndResultCache will have set the - * ResultCacheInstrumentation.mem_peak field for us. No need to do - * the zero checks like we did for the serial case above. + * Since the worker's MemoizeState.mem_used field is unavailable to + * us, ExecEndMemoize will have set the + * MemoizeInstrumentation.mem_peak field for us. No need to do the + * zero checks like we did for the serial case above. */ memPeakKb = (si->mem_peak + 1023) / 1024; diff --git a/src/backend/executor/Makefile b/src/backend/executor/Makefile index f08b282a5e613..11118d0ce0250 100644 --- a/src/backend/executor/Makefile +++ b/src/backend/executor/Makefile @@ -53,6 +53,7 @@ OBJS = \ nodeLimit.o \ nodeLockRows.o \ nodeMaterial.o \ + nodeMemoize.o \ nodeMergeAppend.o \ nodeMergejoin.o \ nodeModifyTable.o \ @@ -61,7 +62,6 @@ OBJS = \ nodeProjectSet.o \ nodeRecursiveunion.o \ nodeResult.o \ - nodeResultCache.o \ nodeSamplescan.o \ nodeSeqscan.o \ nodeSetOp.o \ diff --git a/src/backend/executor/execAmi.c b/src/backend/executor/execAmi.c index 522b1c2086377..d0c52a38b4e6d 100644 --- a/src/backend/executor/execAmi.c +++ b/src/backend/executor/execAmi.c @@ -36,6 +36,7 @@ #include "executor/nodeLimit.h" #include "executor/nodeLockRows.h" #include "executor/nodeMaterial.h" +#include "executor/nodeMemoize.h" #include "executor/nodeMergeAppend.h" #include "executor/nodeMergejoin.h" #include "executor/nodeModifyTable.h" @@ -44,7 +45,6 @@ #include "executor/nodeProjectSet.h" #include "executor/nodeRecursiveunion.h" #include "executor/nodeResult.h" -#include "executor/nodeResultCache.h" #include "executor/nodeSamplescan.h" #include "executor/nodeSeqscan.h" #include "executor/nodeSetOp.h" @@ -255,8 +255,8 @@ ExecReScan(PlanState *node) ExecReScanMaterial((MaterialState *) node); break; - case T_ResultCacheState: - ExecReScanResultCache((ResultCacheState *) node); + case T_MemoizeState: + ExecReScanMemoize((MemoizeState *) node); break; case T_SortState: diff --git a/src/backend/executor/execParallel.c b/src/backend/executor/execParallel.c index 12c41d746b25b..f8a4a40e7b503 100644 --- a/src/backend/executor/execParallel.c +++ b/src/backend/executor/execParallel.c @@ -35,7 +35,7 @@ #include "executor/nodeIncrementalSort.h" #include "executor/nodeIndexonlyscan.h" #include "executor/nodeIndexscan.h" -#include "executor/nodeResultCache.h" +#include "executor/nodeMemoize.h" #include "executor/nodeSeqscan.h" #include "executor/nodeSort.h" #include "executor/nodeSubplan.h" @@ -293,9 +293,9 @@ ExecParallelEstimate(PlanState *planstate, ExecParallelEstimateContext *e) /* even when not parallel-aware, for EXPLAIN ANALYZE */ ExecAggEstimate((AggState *) planstate, e->pcxt); break; - case T_ResultCacheState: + case T_MemoizeState: /* even when not parallel-aware, for EXPLAIN ANALYZE */ - ExecResultCacheEstimate((ResultCacheState *) planstate, e->pcxt); + ExecMemoizeEstimate((MemoizeState *) planstate, e->pcxt); break; default: break; @@ -517,9 +517,9 @@ ExecParallelInitializeDSM(PlanState *planstate, /* even when not parallel-aware, for EXPLAIN ANALYZE */ ExecAggInitializeDSM((AggState *) planstate, d->pcxt); break; - case T_ResultCacheState: + case T_MemoizeState: /* even when not parallel-aware, for EXPLAIN ANALYZE */ - ExecResultCacheInitializeDSM((ResultCacheState *) planstate, d->pcxt); + ExecMemoizeInitializeDSM((MemoizeState *) planstate, d->pcxt); break; default: break; @@ -997,7 +997,7 @@ ExecParallelReInitializeDSM(PlanState *planstate, case T_HashState: case T_SortState: case T_IncrementalSortState: - case T_ResultCacheState: + case T_MemoizeState: /* these nodes have DSM state, but no reinitialization is required */ break; @@ -1067,8 +1067,8 @@ ExecParallelRetrieveInstrumentation(PlanState *planstate, case T_AggState: ExecAggRetrieveInstrumentation((AggState *) planstate); break; - case T_ResultCacheState: - ExecResultCacheRetrieveInstrumentation((ResultCacheState *) planstate); + case T_MemoizeState: + ExecMemoizeRetrieveInstrumentation((MemoizeState *) planstate); break; default: break; @@ -1362,10 +1362,9 @@ ExecParallelInitializeWorker(PlanState *planstate, ParallelWorkerContext *pwcxt) /* even when not parallel-aware, for EXPLAIN ANALYZE */ ExecAggInitializeWorker((AggState *) planstate, pwcxt); break; - case T_ResultCacheState: + case T_MemoizeState: /* even when not parallel-aware, for EXPLAIN ANALYZE */ - ExecResultCacheInitializeWorker((ResultCacheState *) planstate, - pwcxt); + ExecMemoizeInitializeWorker((MemoizeState *) planstate, pwcxt); break; default: break; diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c index 753f46863b723..1752b9bfd81de 100644 --- a/src/backend/executor/execProcnode.c +++ b/src/backend/executor/execProcnode.c @@ -94,6 +94,7 @@ #include "executor/nodeLimit.h" #include "executor/nodeLockRows.h" #include "executor/nodeMaterial.h" +#include "executor/nodeMemoize.h" #include "executor/nodeMergeAppend.h" #include "executor/nodeMergejoin.h" #include "executor/nodeModifyTable.h" @@ -102,7 +103,6 @@ #include "executor/nodeProjectSet.h" #include "executor/nodeRecursiveunion.h" #include "executor/nodeResult.h" -#include "executor/nodeResultCache.h" #include "executor/nodeSamplescan.h" #include "executor/nodeSeqscan.h" #include "executor/nodeSetOp.h" @@ -326,9 +326,9 @@ ExecInitNode(Plan *node, EState *estate, int eflags) estate, eflags); break; - case T_ResultCache: - result = (PlanState *) ExecInitResultCache((ResultCache *) node, - estate, eflags); + case T_Memoize: + result = (PlanState *) ExecInitMemoize((Memoize *) node, estate, + eflags); break; case T_Group: @@ -720,8 +720,8 @@ ExecEndNode(PlanState *node) ExecEndIncrementalSort((IncrementalSortState *) node); break; - case T_ResultCacheState: - ExecEndResultCache((ResultCacheState *) node); + case T_MemoizeState: + ExecEndMemoize((MemoizeState *) node); break; case T_GroupState: diff --git a/src/backend/executor/nodeResultCache.c b/src/backend/executor/nodeMemoize.c similarity index 65% rename from src/backend/executor/nodeResultCache.c rename to src/backend/executor/nodeMemoize.c index 471900346f119..2fde4ebce69e8 100644 --- a/src/backend/executor/nodeResultCache.c +++ b/src/backend/executor/nodeMemoize.c @@ -1,6 +1,6 @@ /*------------------------------------------------------------------------- * - * nodeResultCache.c + * nodeMemoize.c * Routines to handle caching of results from parameterized nodes * * Portions Copyright (c) 2021, PostgreSQL Global Development Group @@ -8,9 +8,9 @@ * * * IDENTIFICATION - * src/backend/executor/nodeResultCache.c + * src/backend/executor/nodeMemoize.c * - * ResultCache nodes are intended to sit above parameterized nodes in the plan + * Memoize nodes are intended to sit above parameterized nodes in the plan * tree in order to cache results from them. The intention here is that a * repeat scan with a parameter value that has already been seen by the node * can fetch tuples from the cache rather than having to re-scan the outer @@ -43,24 +43,24 @@ * happens then we'll have already evicted all other cache entries. When * caching another tuple would cause us to exceed our memory budget, we must * free the entry that we're currently populating and move the state machine - * into RC_CACHE_BYPASS_MODE. This means that we'll not attempt to cache any - * further tuples for this particular scan. We don't have the memory for it. - * The state machine will be reset again on the next rescan. If the memory - * requirements to cache the next parameter's tuples are less demanding, then - * that may allow us to start putting useful entries back into the cache - * again. + * into MEMO_CACHE_BYPASS_MODE. This means that we'll not attempt to cache + * any further tuples for this particular scan. We don't have the memory for + * it. The state machine will be reset again on the next rescan. If the + * memory requirements to cache the next parameter's tuples are less + * demanding, then that may allow us to start putting useful entries back into + * the cache again. * * * INTERFACE ROUTINES - * ExecResultCache - lookup cache, exec subplan when not found - * ExecInitResultCache - initialize node and subnodes - * ExecEndResultCache - shutdown node and subnodes - * ExecReScanResultCache - rescan the result cache + * ExecMemoize - lookup cache, exec subplan when not found + * ExecInitMemoize - initialize node and subnodes + * ExecEndMemoize - shutdown node and subnodes + * ExecReScanMemoize - rescan the memoize node * - * ExecResultCacheEstimate estimates DSM space needed for parallel plan - * ExecResultCacheInitializeDSM initialize DSM for parallel plan - * ExecResultCacheInitializeWorker attach to DSM info in parallel worker - * ExecResultCacheRetrieveInstrumentation get instrumentation from worker + * ExecMemoizeEstimate estimates DSM space needed for parallel plan + * ExecMemoizeInitializeDSM initialize DSM for parallel plan + * ExecMemoizeInitializeWorker attach to DSM info in parallel worker + * ExecMemoizeRetrieveInstrumentation get instrumentation from worker *------------------------------------------------------------------------- */ @@ -68,79 +68,79 @@ #include "common/hashfn.h" #include "executor/executor.h" -#include "executor/nodeResultCache.h" +#include "executor/nodeMemoize.h" #include "lib/ilist.h" #include "miscadmin.h" #include "utils/lsyscache.h" -/* States of the ExecResultCache state machine */ -#define RC_CACHE_LOOKUP 1 /* Attempt to perform a cache lookup */ -#define RC_CACHE_FETCH_NEXT_TUPLE 2 /* Get another tuple from the cache */ -#define RC_FILLING_CACHE 3 /* Read outer node to fill cache */ -#define RC_CACHE_BYPASS_MODE 4 /* Bypass mode. Just read from our +/* States of the ExecMemoize state machine */ +#define MEMO_CACHE_LOOKUP 1 /* Attempt to perform a cache lookup */ +#define MEMO_CACHE_FETCH_NEXT_TUPLE 2 /* Get another tuple from the cache */ +#define MEMO_FILLING_CACHE 3 /* Read outer node to fill cache */ +#define MEMO_CACHE_BYPASS_MODE 4 /* Bypass mode. Just read from our * subplan without caching anything */ -#define RC_END_OF_SCAN 5 /* Ready for rescan */ +#define MEMO_END_OF_SCAN 5 /* Ready for rescan */ /* Helper macros for memory accounting */ -#define EMPTY_ENTRY_MEMORY_BYTES(e) (sizeof(ResultCacheEntry) + \ - sizeof(ResultCacheKey) + \ +#define EMPTY_ENTRY_MEMORY_BYTES(e) (sizeof(MemoizeEntry) + \ + sizeof(MemoizeKey) + \ (e)->key->params->t_len); -#define CACHE_TUPLE_BYTES(t) (sizeof(ResultCacheTuple) + \ +#define CACHE_TUPLE_BYTES(t) (sizeof(MemoizeTuple) + \ (t)->mintuple->t_len) - /* ResultCacheTuple Stores an individually cached tuple */ -typedef struct ResultCacheTuple + /* MemoizeTuple Stores an individually cached tuple */ +typedef struct MemoizeTuple { MinimalTuple mintuple; /* Cached tuple */ - struct ResultCacheTuple *next; /* The next tuple with the same parameter - * values or NULL if it's the last one */ -} ResultCacheTuple; + struct MemoizeTuple *next; /* The next tuple with the same parameter + * values or NULL if it's the last one */ +} MemoizeTuple; /* - * ResultCacheKey + * MemoizeKey * The hash table key for cached entries plus the LRU list link */ -typedef struct ResultCacheKey +typedef struct MemoizeKey { MinimalTuple params; dlist_node lru_node; /* Pointer to next/prev key in LRU list */ -} ResultCacheKey; +} MemoizeKey; /* - * ResultCacheEntry + * MemoizeEntry * The data struct that the cache hash table stores */ -typedef struct ResultCacheEntry +typedef struct MemoizeEntry { - ResultCacheKey *key; /* Hash key for hash table lookups */ - ResultCacheTuple *tuplehead; /* Pointer to the first tuple or NULL if - * no tuples are cached for this entry */ + MemoizeKey *key; /* Hash key for hash table lookups */ + MemoizeTuple *tuplehead; /* Pointer to the first tuple or NULL if no + * tuples are cached for this entry */ uint32 hash; /* Hash value (cached) */ char status; /* Hash status */ bool complete; /* Did we read the outer plan to completion? */ -} ResultCacheEntry; +} MemoizeEntry; -#define SH_PREFIX resultcache -#define SH_ELEMENT_TYPE ResultCacheEntry -#define SH_KEY_TYPE ResultCacheKey * +#define SH_PREFIX memoize +#define SH_ELEMENT_TYPE MemoizeEntry +#define SH_KEY_TYPE MemoizeKey * #define SH_SCOPE static inline #define SH_DECLARE #include "lib/simplehash.h" -static uint32 ResultCacheHash_hash(struct resultcache_hash *tb, - const ResultCacheKey *key); -static int ResultCacheHash_equal(struct resultcache_hash *tb, - const ResultCacheKey *params1, - const ResultCacheKey *params2); +static uint32 MemoizeHash_hash(struct memoize_hash *tb, + const MemoizeKey *key); +static int MemoizeHash_equal(struct memoize_hash *tb, + const MemoizeKey *params1, + const MemoizeKey *params2); -#define SH_PREFIX resultcache -#define SH_ELEMENT_TYPE ResultCacheEntry -#define SH_KEY_TYPE ResultCacheKey * +#define SH_PREFIX memoize +#define SH_ELEMENT_TYPE MemoizeEntry +#define SH_KEY_TYPE MemoizeKey * #define SH_KEY key -#define SH_HASH_KEY(tb, key) ResultCacheHash_hash(tb, key) -#define SH_EQUAL(tb, a, b) (ResultCacheHash_equal(tb, a, b) == 0) +#define SH_HASH_KEY(tb, key) MemoizeHash_hash(tb, key) +#define SH_EQUAL(tb, a, b) (MemoizeHash_equal(tb, a, b) == 0) #define SH_SCOPE static inline #define SH_STORE_HASH #define SH_GET_HASH(tb, a) a->hash @@ -148,20 +148,20 @@ static int ResultCacheHash_equal(struct resultcache_hash *tb, #include "lib/simplehash.h" /* - * ResultCacheHash_hash + * MemoizeHash_hash * Hash function for simplehash hashtable. 'key' is unused here as we - * require that all table lookups first populate the ResultCacheState's + * require that all table lookups first populate the MemoizeState's * probeslot with the key values to be looked up. */ static uint32 -ResultCacheHash_hash(struct resultcache_hash *tb, const ResultCacheKey *key) +MemoizeHash_hash(struct memoize_hash *tb, const MemoizeKey *key) { - ResultCacheState *rcstate = (ResultCacheState *) tb->private_data; - TupleTableSlot *pslot = rcstate->probeslot; + MemoizeState *mstate = (MemoizeState *) tb->private_data; + TupleTableSlot *pslot = mstate->probeslot; uint32 hashkey = 0; - int numkeys = rcstate->nkeys; - FmgrInfo *hashfunctions = rcstate->hashfunctions; - Oid *collations = rcstate->collations; + int numkeys = mstate->nkeys; + FmgrInfo *hashfunctions = mstate->hashfunctions; + Oid *collations = mstate->collations; for (int i = 0; i < numkeys; i++) { @@ -182,56 +182,54 @@ ResultCacheHash_hash(struct resultcache_hash *tb, const ResultCacheKey *key) } /* - * ResultCacheHash_equal + * MemoizeHash_equal * Equality function for confirming hash value matches during a hash - * table lookup. 'key2' is never used. Instead the ResultCacheState's + * table lookup. 'key2' is never used. Instead the MemoizeState's * probeslot is always populated with details of what's being looked up. */ static int -ResultCacheHash_equal(struct resultcache_hash *tb, const ResultCacheKey *key1, - const ResultCacheKey *key2) +MemoizeHash_equal(struct memoize_hash *tb, const MemoizeKey *key1, + const MemoizeKey *key2) { - ResultCacheState *rcstate = (ResultCacheState *) tb->private_data; - ExprContext *econtext = rcstate->ss.ps.ps_ExprContext; - TupleTableSlot *tslot = rcstate->tableslot; - TupleTableSlot *pslot = rcstate->probeslot; + MemoizeState *mstate = (MemoizeState *) tb->private_data; + ExprContext *econtext = mstate->ss.ps.ps_ExprContext; + TupleTableSlot *tslot = mstate->tableslot; + TupleTableSlot *pslot = mstate->probeslot; /* probeslot should have already been prepared by prepare_probe_slot() */ - ExecStoreMinimalTuple(key1->params, tslot, false); econtext->ecxt_innertuple = tslot; econtext->ecxt_outertuple = pslot; - return !ExecQualAndReset(rcstate->cache_eq_expr, econtext); + return !ExecQualAndReset(mstate->cache_eq_expr, econtext); } /* * Initialize the hash table to empty. */ static void -build_hash_table(ResultCacheState *rcstate, uint32 size) +build_hash_table(MemoizeState *mstate, uint32 size) { /* Make a guess at a good size when we're not given a valid size. */ if (size == 0) size = 1024; - /* resultcache_create will convert the size to a power of 2 */ - rcstate->hashtable = resultcache_create(rcstate->tableContext, size, - rcstate); + /* memoize_create will convert the size to a power of 2 */ + mstate->hashtable = memoize_create(mstate->tableContext, size, mstate); } /* * prepare_probe_slot - * Populate rcstate's probeslot with the values from the tuple stored + * Populate mstate's probeslot with the values from the tuple stored * in 'key'. If 'key' is NULL, then perform the population by evaluating - * rcstate's param_exprs. + * mstate's param_exprs. */ static inline void -prepare_probe_slot(ResultCacheState *rcstate, ResultCacheKey *key) +prepare_probe_slot(MemoizeState *mstate, MemoizeKey *key) { - TupleTableSlot *pslot = rcstate->probeslot; - TupleTableSlot *tslot = rcstate->tableslot; - int numKeys = rcstate->nkeys; + TupleTableSlot *pslot = mstate->probeslot; + TupleTableSlot *tslot = mstate->tableslot; + int numKeys = mstate->nkeys; ExecClearTuple(pslot); @@ -239,8 +237,8 @@ prepare_probe_slot(ResultCacheState *rcstate, ResultCacheKey *key) { /* Set the probeslot's values based on the current parameter values */ for (int i = 0; i < numKeys; i++) - pslot->tts_values[i] = ExecEvalExpr(rcstate->param_exprs[i], - rcstate->ss.ps.ps_ExprContext, + pslot->tts_values[i] = ExecEvalExpr(mstate->param_exprs[i], + mstate->ss.ps.ps_ExprContext, &pslot->tts_isnull[i]); } else @@ -262,14 +260,14 @@ prepare_probe_slot(ResultCacheState *rcstate, ResultCacheKey *key) * reflect the removal of the tuples. */ static inline void -entry_purge_tuples(ResultCacheState *rcstate, ResultCacheEntry *entry) +entry_purge_tuples(MemoizeState *mstate, MemoizeEntry *entry) { - ResultCacheTuple *tuple = entry->tuplehead; + MemoizeTuple *tuple = entry->tuplehead; uint64 freed_mem = 0; while (tuple != NULL) { - ResultCacheTuple *next = tuple->next; + MemoizeTuple *next = tuple->next; freed_mem += CACHE_TUPLE_BYTES(tuple); @@ -284,7 +282,7 @@ entry_purge_tuples(ResultCacheState *rcstate, ResultCacheEntry *entry) entry->tuplehead = NULL; /* Update the memory accounting */ - rcstate->mem_used -= freed_mem; + mstate->mem_used -= freed_mem; } /* @@ -292,24 +290,24 @@ entry_purge_tuples(ResultCacheState *rcstate, ResultCacheEntry *entry) * Remove 'entry' from the cache and free memory used by it. */ static void -remove_cache_entry(ResultCacheState *rcstate, ResultCacheEntry *entry) +remove_cache_entry(MemoizeState *mstate, MemoizeEntry *entry) { - ResultCacheKey *key = entry->key; + MemoizeKey *key = entry->key; dlist_delete(&entry->key->lru_node); /* Remove all of the tuples from this entry */ - entry_purge_tuples(rcstate, entry); + entry_purge_tuples(mstate, entry); /* * Update memory accounting. entry_purge_tuples should have already * subtracted the memory used for each cached tuple. Here we just update * the amount used by the entry itself. */ - rcstate->mem_used -= EMPTY_ENTRY_MEMORY_BYTES(entry); + mstate->mem_used -= EMPTY_ENTRY_MEMORY_BYTES(entry); /* Remove the entry from the cache */ - resultcache_delete_item(rcstate->hashtable, entry); + memoize_delete_item(mstate->hashtable, entry); pfree(key->params); pfree(key); @@ -319,37 +317,36 @@ remove_cache_entry(ResultCacheState *rcstate, ResultCacheEntry *entry) * cache_reduce_memory * Evict older and less recently used items from the cache in order to * reduce the memory consumption back to something below the - * ResultCacheState's mem_limit. + * MemoizeState's mem_limit. * * 'specialkey', if not NULL, causes the function to return false if the entry * which the key belongs to is removed from the cache. */ static bool -cache_reduce_memory(ResultCacheState *rcstate, ResultCacheKey *specialkey) +cache_reduce_memory(MemoizeState *mstate, MemoizeKey *specialkey) { bool specialkey_intact = true; /* for now */ dlist_mutable_iter iter; uint64 evictions = 0; /* Update peak memory usage */ - if (rcstate->mem_used > rcstate->stats.mem_peak) - rcstate->stats.mem_peak = rcstate->mem_used; + if (mstate->mem_used > mstate->stats.mem_peak) + mstate->stats.mem_peak = mstate->mem_used; /* We expect only to be called when we've gone over budget on memory */ - Assert(rcstate->mem_used > rcstate->mem_limit); + Assert(mstate->mem_used > mstate->mem_limit); /* Start the eviction process starting at the head of the LRU list. */ - dlist_foreach_modify(iter, &rcstate->lru_list) + dlist_foreach_modify(iter, &mstate->lru_list) { - ResultCacheKey *key = dlist_container(ResultCacheKey, lru_node, - iter.cur); - ResultCacheEntry *entry; + MemoizeKey *key = dlist_container(MemoizeKey, lru_node, iter.cur); + MemoizeEntry *entry; /* * Populate the hash probe slot in preparation for looking up this LRU * entry. */ - prepare_probe_slot(rcstate, key); + prepare_probe_slot(mstate, key); /* * Ideally the LRU list pointers would be stored in the entry itself @@ -362,7 +359,7 @@ cache_reduce_memory(ResultCacheState *rcstate, ResultCacheKey *specialkey) * pointer to the key here, we must perform a hash table lookup to * find the entry that the key belongs to. */ - entry = resultcache_lookup(rcstate->hashtable, NULL); + entry = memoize_lookup(mstate->hashtable, NULL); /* A good spot to check for corruption of the table and LRU list. */ Assert(entry != NULL); @@ -383,23 +380,23 @@ cache_reduce_memory(ResultCacheState *rcstate, ResultCacheKey *specialkey) /* * Finally remove the entry. This will remove from the LRU list too. */ - remove_cache_entry(rcstate, entry); + remove_cache_entry(mstate, entry); evictions++; /* Exit if we've freed enough memory */ - if (rcstate->mem_used <= rcstate->mem_limit) + if (mstate->mem_used <= mstate->mem_limit) break; } - rcstate->stats.cache_evictions += evictions; /* Update Stats */ + mstate->stats.cache_evictions += evictions; /* Update Stats */ return specialkey_intact; } /* * cache_lookup - * Perform a lookup to see if we've already cached results based on the + * Perform a lookup to see if we've already cached tuples based on the * scan's current parameters. If we find an existing entry we move it to * the end of the LRU list, set *found to true then return it. If we * don't find an entry then we create a new one and add it to the end of @@ -409,21 +406,21 @@ cache_reduce_memory(ResultCacheState *rcstate, ResultCacheKey *specialkey) * * Callers can assume we'll never return NULL when *found is true. */ -static ResultCacheEntry * -cache_lookup(ResultCacheState *rcstate, bool *found) +static MemoizeEntry * +cache_lookup(MemoizeState *mstate, bool *found) { - ResultCacheKey *key; - ResultCacheEntry *entry; + MemoizeKey *key; + MemoizeEntry *entry; MemoryContext oldcontext; /* prepare the probe slot with the current scan parameters */ - prepare_probe_slot(rcstate, NULL); + prepare_probe_slot(mstate, NULL); /* * Add the new entry to the cache. No need to pass a valid key since the - * hash function uses rcstate's probeslot, which we populated above. + * hash function uses mstate's probeslot, which we populated above. */ - entry = resultcache_insert(rcstate->hashtable, NULL, found); + entry = memoize_insert(mstate->hashtable, NULL, found); if (*found) { @@ -431,19 +428,19 @@ cache_lookup(ResultCacheState *rcstate, bool *found) * Move existing entry to the tail of the LRU list to mark it as the * most recently used item. */ - dlist_move_tail(&rcstate->lru_list, &entry->key->lru_node); + dlist_move_tail(&mstate->lru_list, &entry->key->lru_node); return entry; } - oldcontext = MemoryContextSwitchTo(rcstate->tableContext); + oldcontext = MemoryContextSwitchTo(mstate->tableContext); /* Allocate a new key */ - entry->key = key = (ResultCacheKey *) palloc(sizeof(ResultCacheKey)); - key->params = ExecCopySlotMinimalTuple(rcstate->probeslot); + entry->key = key = (MemoizeKey *) palloc(sizeof(MemoizeKey)); + key->params = ExecCopySlotMinimalTuple(mstate->probeslot); /* Update the total cache memory utilization */ - rcstate->mem_used += EMPTY_ENTRY_MEMORY_BYTES(entry); + mstate->mem_used += EMPTY_ENTRY_MEMORY_BYTES(entry); /* Initialize this entry */ entry->complete = false; @@ -453,9 +450,9 @@ cache_lookup(ResultCacheState *rcstate, bool *found) * Since this is the most recently used entry, push this entry onto the * end of the LRU list. */ - dlist_push_tail(&rcstate->lru_list, &entry->key->lru_node); + dlist_push_tail(&mstate->lru_list, &entry->key->lru_node); - rcstate->last_tuple = NULL; + mstate->last_tuple = NULL; MemoryContextSwitchTo(oldcontext); @@ -463,7 +460,7 @@ cache_lookup(ResultCacheState *rcstate, bool *found) * If we've gone over our memory budget, then we'll free up some space in * the cache. */ - if (rcstate->mem_used > rcstate->mem_limit) + if (mstate->mem_used > mstate->mem_limit) { /* * Try to free up some memory. It's highly unlikely that we'll fail @@ -471,7 +468,7 @@ cache_lookup(ResultCacheState *rcstate, bool *found) * any tuples and we're able to remove any other entry to reduce the * memory consumption. */ - if (unlikely(!cache_reduce_memory(rcstate, key))) + if (unlikely(!cache_reduce_memory(mstate, key))) return NULL; /* @@ -482,16 +479,16 @@ cache_lookup(ResultCacheState *rcstate, bool *found) * happened by seeing if the entry is still in use and that the key * pointer matches our expected key. */ - if (entry->status != resultcache_SH_IN_USE || entry->key != key) + if (entry->status != memoize_SH_IN_USE || entry->key != key) { /* * We need to repopulate the probeslot as lookups performed during * the cache evictions above will have stored some other key. */ - prepare_probe_slot(rcstate, key); + prepare_probe_slot(mstate, key); /* Re-find the newly added entry */ - entry = resultcache_lookup(rcstate->hashtable, NULL); + entry = memoize_lookup(mstate->hashtable, NULL); Assert(entry != NULL); } } @@ -501,29 +498,29 @@ cache_lookup(ResultCacheState *rcstate, bool *found) /* * cache_store_tuple - * Add the tuple stored in 'slot' to the rcstate's current cache entry. + * Add the tuple stored in 'slot' to the mstate's current cache entry. * The cache entry must have already been made with cache_lookup(). - * rcstate's last_tuple field must point to the tail of rcstate->entry's + * mstate's last_tuple field must point to the tail of mstate->entry's * list of tuples. */ static bool -cache_store_tuple(ResultCacheState *rcstate, TupleTableSlot *slot) +cache_store_tuple(MemoizeState *mstate, TupleTableSlot *slot) { - ResultCacheTuple *tuple; - ResultCacheEntry *entry = rcstate->entry; + MemoizeTuple *tuple; + MemoizeEntry *entry = mstate->entry; MemoryContext oldcontext; Assert(slot != NULL); Assert(entry != NULL); - oldcontext = MemoryContextSwitchTo(rcstate->tableContext); + oldcontext = MemoryContextSwitchTo(mstate->tableContext); - tuple = (ResultCacheTuple *) palloc(sizeof(ResultCacheTuple)); + tuple = (MemoizeTuple *) palloc(sizeof(MemoizeTuple)); tuple->mintuple = ExecCopySlotMinimalTuple(slot); tuple->next = NULL; /* Account for the memory we just consumed */ - rcstate->mem_used += CACHE_TUPLE_BYTES(tuple); + mstate->mem_used += CACHE_TUPLE_BYTES(tuple); if (entry->tuplehead == NULL) { @@ -536,21 +533,21 @@ cache_store_tuple(ResultCacheState *rcstate, TupleTableSlot *slot) else { /* push this tuple onto the tail of the list */ - rcstate->last_tuple->next = tuple; + mstate->last_tuple->next = tuple; } - rcstate->last_tuple = tuple; + mstate->last_tuple = tuple; MemoryContextSwitchTo(oldcontext); /* * If we've gone over our memory budget then free up some space in the * cache. */ - if (rcstate->mem_used > rcstate->mem_limit) + if (mstate->mem_used > mstate->mem_limit) { - ResultCacheKey *key = entry->key; + MemoizeKey *key = entry->key; - if (!cache_reduce_memory(rcstate, key)) + if (!cache_reduce_memory(mstate, key)) return false; /* @@ -561,17 +558,16 @@ cache_store_tuple(ResultCacheState *rcstate, TupleTableSlot *slot) * happened by seeing if the entry is still in use and that the key * pointer matches our expected key. */ - if (entry->status != resultcache_SH_IN_USE || entry->key != key) + if (entry->status != memoize_SH_IN_USE || entry->key != key) { /* * We need to repopulate the probeslot as lookups performed during * the cache evictions above will have stored some other key. */ - prepare_probe_slot(rcstate, key); + prepare_probe_slot(mstate, key); /* Re-find the entry */ - rcstate->entry = entry = resultcache_lookup(rcstate->hashtable, - NULL); + mstate->entry = entry = memoize_lookup(mstate->hashtable, NULL); Assert(entry != NULL); } } @@ -580,17 +576,17 @@ cache_store_tuple(ResultCacheState *rcstate, TupleTableSlot *slot) } static TupleTableSlot * -ExecResultCache(PlanState *pstate) +ExecMemoize(PlanState *pstate) { - ResultCacheState *node = castNode(ResultCacheState, pstate); + MemoizeState *node = castNode(MemoizeState, pstate); PlanState *outerNode; TupleTableSlot *slot; - switch (node->rc_status) + switch (node->mstatus) { - case RC_CACHE_LOOKUP: + case MEMO_CACHE_LOOKUP: { - ResultCacheEntry *entry; + MemoizeEntry *entry; TupleTableSlot *outerslot; bool found; @@ -618,7 +614,7 @@ ExecResultCache(PlanState *pstate) /* * Set last_tuple and entry so that the state - * RC_CACHE_FETCH_NEXT_TUPLE can easily find the next + * MEMO_CACHE_FETCH_NEXT_TUPLE can easily find the next * tuple for these parameters. */ node->last_tuple = entry->tuplehead; @@ -627,7 +623,7 @@ ExecResultCache(PlanState *pstate) /* Fetch the first cached tuple, if there is one */ if (entry->tuplehead) { - node->rc_status = RC_CACHE_FETCH_NEXT_TUPLE; + node->mstatus = MEMO_CACHE_FETCH_NEXT_TUPLE; slot = node->ss.ps.ps_ResultTupleSlot; ExecStoreMinimalTuple(entry->tuplehead->mintuple, @@ -637,7 +633,7 @@ ExecResultCache(PlanState *pstate) } /* The cache entry is void of any tuples. */ - node->rc_status = RC_END_OF_SCAN; + node->mstatus = MEMO_END_OF_SCAN; return NULL; } @@ -666,13 +662,13 @@ ExecResultCache(PlanState *pstate) * cache_lookup may have returned NULL due to failure to * free enough cache space, so ensure we don't do anything * here that assumes it worked. There's no need to go into - * bypass mode here as we're setting rc_status to end of + * bypass mode here as we're setting mstatus to end of * scan. */ if (likely(entry)) entry->complete = true; - node->rc_status = RC_END_OF_SCAN; + node->mstatus = MEMO_END_OF_SCAN; return NULL; } @@ -687,7 +683,7 @@ ExecResultCache(PlanState *pstate) { node->stats.cache_overflows += 1; /* stats update */ - node->rc_status = RC_CACHE_BYPASS_MODE; + node->mstatus = MEMO_CACHE_BYPASS_MODE; /* * No need to clear out last_tuple as we'll stay in bypass @@ -703,7 +699,7 @@ ExecResultCache(PlanState *pstate) * executed to completion. */ entry->complete = node->singlerow; - node->rc_status = RC_FILLING_CACHE; + node->mstatus = MEMO_FILLING_CACHE; } slot = node->ss.ps.ps_ResultTupleSlot; @@ -711,7 +707,7 @@ ExecResultCache(PlanState *pstate) return slot; } - case RC_CACHE_FETCH_NEXT_TUPLE: + case MEMO_CACHE_FETCH_NEXT_TUPLE: { /* We shouldn't be in this state if these are not set */ Assert(node->entry != NULL); @@ -723,7 +719,7 @@ ExecResultCache(PlanState *pstate) /* No more tuples in the cache */ if (node->last_tuple == NULL) { - node->rc_status = RC_END_OF_SCAN; + node->mstatus = MEMO_END_OF_SCAN; return NULL; } @@ -734,18 +730,18 @@ ExecResultCache(PlanState *pstate) return slot; } - case RC_FILLING_CACHE: + case MEMO_FILLING_CACHE: { TupleTableSlot *outerslot; - ResultCacheEntry *entry = node->entry; + MemoizeEntry *entry = node->entry; - /* entry should already have been set by RC_CACHE_LOOKUP */ + /* entry should already have been set by MEMO_CACHE_LOOKUP */ Assert(entry != NULL); /* - * When in the RC_FILLING_CACHE state, we've just had a cache - * miss and are populating the cache with the current scan - * tuples. + * When in the MEMO_FILLING_CACHE state, we've just had a + * cache miss and are populating the cache with the current + * scan tuples. */ outerNode = outerPlanState(node); outerslot = ExecProcNode(outerNode); @@ -753,7 +749,7 @@ ExecResultCache(PlanState *pstate) { /* No more tuples. Mark it as complete */ entry->complete = true; - node->rc_status = RC_END_OF_SCAN; + node->mstatus = MEMO_END_OF_SCAN; return NULL; } @@ -771,7 +767,7 @@ ExecResultCache(PlanState *pstate) /* Couldn't store it? Handle overflow */ node->stats.cache_overflows += 1; /* stats update */ - node->rc_status = RC_CACHE_BYPASS_MODE; + node->mstatus = MEMO_CACHE_BYPASS_MODE; /* * No need to clear out entry or last_tuple as we'll stay @@ -784,7 +780,7 @@ ExecResultCache(PlanState *pstate) return slot; } - case RC_CACHE_BYPASS_MODE: + case MEMO_CACHE_BYPASS_MODE: { TupleTableSlot *outerslot; @@ -797,7 +793,7 @@ ExecResultCache(PlanState *pstate) outerslot = ExecProcNode(outerNode); if (TupIsNull(outerslot)) { - node->rc_status = RC_END_OF_SCAN; + node->mstatus = MEMO_END_OF_SCAN; return NULL; } @@ -806,7 +802,7 @@ ExecResultCache(PlanState *pstate) return slot; } - case RC_END_OF_SCAN: + case MEMO_END_OF_SCAN: /* * We've already returned NULL for this scan, but just in case @@ -815,16 +811,16 @@ ExecResultCache(PlanState *pstate) return NULL; default: - elog(ERROR, "unrecognized resultcache state: %d", - (int) node->rc_status); + elog(ERROR, "unrecognized memoize state: %d", + (int) node->mstatus); return NULL; } /* switch */ } -ResultCacheState * -ExecInitResultCache(ResultCache *node, EState *estate, int eflags) +MemoizeState * +ExecInitMemoize(Memoize *node, EState *estate, int eflags) { - ResultCacheState *rcstate = makeNode(ResultCacheState); + MemoizeState *mstate = makeNode(MemoizeState); Plan *outerNode; int i; int nkeys; @@ -833,50 +829,50 @@ ExecInitResultCache(ResultCache *node, EState *estate, int eflags) /* check for unsupported flags */ Assert(!(eflags & (EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK))); - rcstate->ss.ps.plan = (Plan *) node; - rcstate->ss.ps.state = estate; - rcstate->ss.ps.ExecProcNode = ExecResultCache; + mstate->ss.ps.plan = (Plan *) node; + mstate->ss.ps.state = estate; + mstate->ss.ps.ExecProcNode = ExecMemoize; /* * Miscellaneous initialization * * create expression context for node */ - ExecAssignExprContext(estate, &rcstate->ss.ps); + ExecAssignExprContext(estate, &mstate->ss.ps); outerNode = outerPlan(node); - outerPlanState(rcstate) = ExecInitNode(outerNode, estate, eflags); + outerPlanState(mstate) = ExecInitNode(outerNode, estate, eflags); /* * Initialize return slot and type. No need to initialize projection info * because this node doesn't do projections. */ - ExecInitResultTupleSlotTL(&rcstate->ss.ps, &TTSOpsMinimalTuple); - rcstate->ss.ps.ps_ProjInfo = NULL; + ExecInitResultTupleSlotTL(&mstate->ss.ps, &TTSOpsMinimalTuple); + mstate->ss.ps.ps_ProjInfo = NULL; /* * Initialize scan slot and type. */ - ExecCreateScanSlotFromOuterPlan(estate, &rcstate->ss, &TTSOpsMinimalTuple); + ExecCreateScanSlotFromOuterPlan(estate, &mstate->ss, &TTSOpsMinimalTuple); /* * Set the state machine to lookup the cache. We won't find anything * until we cache something, but this saves a special case to create the * first entry. */ - rcstate->rc_status = RC_CACHE_LOOKUP; + mstate->mstatus = MEMO_CACHE_LOOKUP; - rcstate->nkeys = nkeys = node->numKeys; - rcstate->hashkeydesc = ExecTypeFromExprList(node->param_exprs); - rcstate->tableslot = MakeSingleTupleTableSlot(rcstate->hashkeydesc, - &TTSOpsMinimalTuple); - rcstate->probeslot = MakeSingleTupleTableSlot(rcstate->hashkeydesc, - &TTSOpsVirtual); + mstate->nkeys = nkeys = node->numKeys; + mstate->hashkeydesc = ExecTypeFromExprList(node->param_exprs); + mstate->tableslot = MakeSingleTupleTableSlot(mstate->hashkeydesc, + &TTSOpsMinimalTuple); + mstate->probeslot = MakeSingleTupleTableSlot(mstate->hashkeydesc, + &TTSOpsVirtual); - rcstate->param_exprs = (ExprState **) palloc(nkeys * sizeof(ExprState *)); - rcstate->collations = node->collations; /* Just point directly to the plan + mstate->param_exprs = (ExprState **) palloc(nkeys * sizeof(ExprState *)); + mstate->collations = node->collations; /* Just point directly to the plan * data */ - rcstate->hashfunctions = (FmgrInfo *) palloc(nkeys * sizeof(FmgrInfo)); + mstate->hashfunctions = (FmgrInfo *) palloc(nkeys * sizeof(FmgrInfo)); eqfuncoids = palloc(nkeys * sizeof(Oid)); @@ -891,34 +887,34 @@ ExecInitResultCache(ResultCache *node, EState *estate, int eflags) elog(ERROR, "could not find hash function for hash operator %u", hashop); - fmgr_info(left_hashfn, &rcstate->hashfunctions[i]); + fmgr_info(left_hashfn, &mstate->hashfunctions[i]); - rcstate->param_exprs[i] = ExecInitExpr(param_expr, (PlanState *) rcstate); + mstate->param_exprs[i] = ExecInitExpr(param_expr, (PlanState *) mstate); eqfuncoids[i] = get_opcode(hashop); } - rcstate->cache_eq_expr = ExecBuildParamSetEqual(rcstate->hashkeydesc, - &TTSOpsMinimalTuple, - &TTSOpsVirtual, - eqfuncoids, - node->collations, - node->param_exprs, - (PlanState *) rcstate); + mstate->cache_eq_expr = ExecBuildParamSetEqual(mstate->hashkeydesc, + &TTSOpsMinimalTuple, + &TTSOpsVirtual, + eqfuncoids, + node->collations, + node->param_exprs, + (PlanState *) mstate); pfree(eqfuncoids); - rcstate->mem_used = 0; + mstate->mem_used = 0; /* Limit the total memory consumed by the cache to this */ - rcstate->mem_limit = get_hash_mem() * 1024L; + mstate->mem_limit = get_hash_mem() * 1024L; /* A memory context dedicated for the cache */ - rcstate->tableContext = AllocSetContextCreate(CurrentMemoryContext, - "ResultCacheHashTable", - ALLOCSET_DEFAULT_SIZES); + mstate->tableContext = AllocSetContextCreate(CurrentMemoryContext, + "MemoizeHashTable", + ALLOCSET_DEFAULT_SIZES); - dlist_init(&rcstate->lru_list); - rcstate->last_tuple = NULL; - rcstate->entry = NULL; + dlist_init(&mstate->lru_list); + mstate->last_tuple = NULL; + mstate->entry = NULL; /* * Mark if we can assume the cache entry is completed after we get the @@ -928,34 +924,34 @@ ExecInitResultCache(ResultCache *node, EState *estate, int eflags) * matching inner tuple. In this case, the cache entry is complete after * getting the first tuple. This allows us to mark it as so. */ - rcstate->singlerow = node->singlerow; + mstate->singlerow = node->singlerow; /* Zero the statistics counters */ - memset(&rcstate->stats, 0, sizeof(ResultCacheInstrumentation)); + memset(&mstate->stats, 0, sizeof(MemoizeInstrumentation)); /* Allocate and set up the actual cache */ - build_hash_table(rcstate, node->est_entries); + build_hash_table(mstate, node->est_entries); - return rcstate; + return mstate; } void -ExecEndResultCache(ResultCacheState *node) +ExecEndMemoize(MemoizeState *node) { #ifdef USE_ASSERT_CHECKING /* Validate the memory accounting code is correct in assert builds. */ { int count; uint64 mem = 0; - resultcache_iterator i; - ResultCacheEntry *entry; + memoize_iterator i; + MemoizeEntry *entry; - resultcache_start_iterate(node->hashtable, &i); + memoize_start_iterate(node->hashtable, &i); count = 0; - while ((entry = resultcache_iterate(node->hashtable, &i)) != NULL) + while ((entry = memoize_iterate(node->hashtable, &i)) != NULL) { - ResultCacheTuple *tuple = entry->tuplehead; + MemoizeTuple *tuple = entry->tuplehead; mem += EMPTY_ENTRY_MEMORY_BYTES(entry); while (tuple != NULL) @@ -978,7 +974,7 @@ ExecEndResultCache(ResultCacheState *node) */ if (node->shared_info != NULL && IsParallelWorker()) { - ResultCacheInstrumentation *si; + MemoizeInstrumentation *si; /* Make mem_peak available for EXPLAIN */ if (node->stats.mem_peak == 0) @@ -986,7 +982,7 @@ ExecEndResultCache(ResultCacheState *node) Assert(ParallelWorkerNumber <= node->shared_info->num_workers); si = &node->shared_info->sinstrument[ParallelWorkerNumber]; - memcpy(si, &node->stats, sizeof(ResultCacheInstrumentation)); + memcpy(si, &node->stats, sizeof(MemoizeInstrumentation)); } /* Remove the cache context */ @@ -1008,12 +1004,12 @@ ExecEndResultCache(ResultCacheState *node) } void -ExecReScanResultCache(ResultCacheState *node) +ExecReScanMemoize(MemoizeState *node) { PlanState *outerPlan = outerPlanState(node); /* Mark that we must lookup the cache for a new set of parameters */ - node->rc_status = RC_CACHE_LOOKUP; + node->mstatus = MEMO_CACHE_LOOKUP; /* nullify pointers used for the last scan */ node->entry = NULL; @@ -1036,8 +1032,8 @@ ExecReScanResultCache(ResultCacheState *node) double ExecEstimateCacheEntryOverheadBytes(double ntuples) { - return sizeof(ResultCacheEntry) + sizeof(ResultCacheKey) + - sizeof(ResultCacheTuple) * ntuples; + return sizeof(MemoizeEntry) + sizeof(MemoizeKey) + sizeof(MemoizeTuple) * + ntuples; } /* ---------------------------------------------------------------- @@ -1046,13 +1042,13 @@ ExecEstimateCacheEntryOverheadBytes(double ntuples) */ /* ---------------------------------------------------------------- - * ExecResultCacheEstimate + * ExecMemoizeEstimate * - * Estimate space required to propagate result cache statistics. + * Estimate space required to propagate memoize statistics. * ---------------------------------------------------------------- */ void -ExecResultCacheEstimate(ResultCacheState *node, ParallelContext *pcxt) +ExecMemoizeEstimate(MemoizeState *node, ParallelContext *pcxt) { Size size; @@ -1060,20 +1056,20 @@ ExecResultCacheEstimate(ResultCacheState *node, ParallelContext *pcxt) if (!node->ss.ps.instrument || pcxt->nworkers == 0) return; - size = mul_size(pcxt->nworkers, sizeof(ResultCacheInstrumentation)); - size = add_size(size, offsetof(SharedResultCacheInfo, sinstrument)); + size = mul_size(pcxt->nworkers, sizeof(MemoizeInstrumentation)); + size = add_size(size, offsetof(SharedMemoizeInfo, sinstrument)); shm_toc_estimate_chunk(&pcxt->estimator, size); shm_toc_estimate_keys(&pcxt->estimator, 1); } /* ---------------------------------------------------------------- - * ExecResultCacheInitializeDSM + * ExecMemoizeInitializeDSM * - * Initialize DSM space for result cache statistics. + * Initialize DSM space for memoize statistics. * ---------------------------------------------------------------- */ void -ExecResultCacheInitializeDSM(ResultCacheState *node, ParallelContext *pcxt) +ExecMemoizeInitializeDSM(MemoizeState *node, ParallelContext *pcxt) { Size size; @@ -1081,8 +1077,8 @@ ExecResultCacheInitializeDSM(ResultCacheState *node, ParallelContext *pcxt) if (!node->ss.ps.instrument || pcxt->nworkers == 0) return; - size = offsetof(SharedResultCacheInfo, sinstrument) - + pcxt->nworkers * sizeof(ResultCacheInstrumentation); + size = offsetof(SharedMemoizeInfo, sinstrument) + + pcxt->nworkers * sizeof(MemoizeInstrumentation); node->shared_info = shm_toc_allocate(pcxt->toc, size); /* ensure any unfilled slots will contain zeroes */ memset(node->shared_info, 0, size); @@ -1092,35 +1088,35 @@ ExecResultCacheInitializeDSM(ResultCacheState *node, ParallelContext *pcxt) } /* ---------------------------------------------------------------- - * ExecResultCacheInitializeWorker + * ExecMemoizeInitializeWorker * - * Attach worker to DSM space for result cache statistics. + * Attach worker to DSM space for memoize statistics. * ---------------------------------------------------------------- */ void -ExecResultCacheInitializeWorker(ResultCacheState *node, ParallelWorkerContext *pwcxt) +ExecMemoizeInitializeWorker(MemoizeState *node, ParallelWorkerContext *pwcxt) { node->shared_info = shm_toc_lookup(pwcxt->toc, node->ss.ps.plan->plan_node_id, true); } /* ---------------------------------------------------------------- - * ExecResultCacheRetrieveInstrumentation + * ExecMemoizeRetrieveInstrumentation * - * Transfer result cache statistics from DSM to private memory. + * Transfer memoize statistics from DSM to private memory. * ---------------------------------------------------------------- */ void -ExecResultCacheRetrieveInstrumentation(ResultCacheState *node) +ExecMemoizeRetrieveInstrumentation(MemoizeState *node) { Size size; - SharedResultCacheInfo *si; + SharedMemoizeInfo *si; if (node->shared_info == NULL) return; - size = offsetof(SharedResultCacheInfo, sinstrument) - + node->shared_info->num_workers * sizeof(ResultCacheInstrumentation); + size = offsetof(SharedMemoizeInfo, sinstrument) + + node->shared_info->num_workers * sizeof(MemoizeInstrumentation); si = palloc(size); memcpy(si, node->shared_info, size); node->shared_info = si; diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 6fef06795787f..9d4893c50443f 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -950,12 +950,12 @@ _copyMaterial(const Material *from) /* - * _copyResultCache + * _copyMemoize */ -static ResultCache * -_copyResultCache(const ResultCache *from) +static Memoize * +_copyMemoize(const Memoize *from) { - ResultCache *newnode = makeNode(ResultCache); + Memoize *newnode = makeNode(Memoize); /* * copy node superclass fields @@ -5079,8 +5079,8 @@ copyObjectImpl(const void *from) case T_Material: retval = _copyMaterial(from); break; - case T_ResultCache: - retval = _copyResultCache(from); + case T_Memoize: + retval = _copyMemoize(from); break; case T_Sort: retval = _copySort(from); diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index e09e4f77feadf..e73be21bd6cd4 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -848,9 +848,9 @@ _outMaterial(StringInfo str, const Material *node) } static void -_outResultCache(StringInfo str, const ResultCache *node) +_outMemoize(StringInfo str, const Memoize *node) { - WRITE_NODE_TYPE("RESULTCACHE"); + WRITE_NODE_TYPE("MEMOIZE"); _outPlanInfo(str, (const Plan *) node); @@ -1949,9 +1949,9 @@ _outMaterialPath(StringInfo str, const MaterialPath *node) } static void -_outResultCachePath(StringInfo str, const ResultCachePath *node) +_outMemoizePath(StringInfo str, const MemoizePath *node) { - WRITE_NODE_TYPE("RESULTCACHEPATH"); + WRITE_NODE_TYPE("MEMOIZEPATH"); _outPathInfo(str, (const Path *) node); @@ -3961,8 +3961,8 @@ outNode(StringInfo str, const void *obj) case T_Material: _outMaterial(str, obj); break; - case T_ResultCache: - _outResultCache(str, obj); + case T_Memoize: + _outMemoize(str, obj); break; case T_Sort: _outSort(str, obj); @@ -4201,8 +4201,8 @@ outNode(StringInfo str, const void *obj) case T_MaterialPath: _outMaterialPath(str, obj); break; - case T_ResultCachePath: - _outResultCachePath(str, obj); + case T_MemoizePath: + _outMemoizePath(str, obj); break; case T_UniquePath: _outUniquePath(str, obj); diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 3dec0a2508ddf..77d082d8b488f 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -2216,12 +2216,12 @@ _readMaterial(void) } /* - * _readResultCache + * _readMemoize */ -static ResultCache * -_readResultCache(void) +static Memoize * +_readMemoize(void) { - READ_LOCALS(ResultCache); + READ_LOCALS(Memoize); ReadCommonPlan(&local_node->plan); @@ -2923,8 +2923,8 @@ parseNodeString(void) return_value = _readHashJoin(); else if (MATCH("MATERIAL", 8)) return_value = _readMaterial(); - else if (MATCH("RESULTCACHE", 11)) - return_value = _readResultCache(); + else if (MATCH("MEMOIZE", 7)) + return_value = _readMemoize(); else if (MATCH("SORT", 4)) return_value = _readSort(); else if (MATCH("INCREMENTALSORT", 15)) diff --git a/src/backend/optimizer/README b/src/backend/optimizer/README index 4aefde8bb18d6..2339347c24109 100644 --- a/src/backend/optimizer/README +++ b/src/backend/optimizer/README @@ -382,7 +382,7 @@ RelOptInfo - a relation or joined relations MergeAppendPath - merge multiple subpaths, preserving their common sort order GroupResultPath - childless Result plan node (used for degenerate grouping) MaterialPath - a Material plan node - ResultCachePath - a result cache plan node for caching tuples from sub-paths + MemoizePath - a Memoize plan node for caching tuples from sub-paths UniquePath - remove duplicate rows (either by hashing or sorting) GatherPath - collect the results of parallel workers GatherMergePath - collect parallel results, preserving their common sort order diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 17febfff8aaa8..671117314a107 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -4031,9 +4031,9 @@ print_path(PlannerInfo *root, Path *path, int indent) ptype = "Material"; subpath = ((MaterialPath *) path)->subpath; break; - case T_ResultCachePath: - ptype = "ResultCache"; - subpath = ((ResultCachePath *) path)->subpath; + case T_MemoizePath: + ptype = "Memoize"; + subpath = ((MemoizePath *) path)->subpath; break; case T_UniquePath: ptype = "Unique"; diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 8577c7b138975..b54cf34a8e113 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -79,7 +79,7 @@ #include "executor/executor.h" #include "executor/nodeAgg.h" #include "executor/nodeHash.h" -#include "executor/nodeResultCache.h" +#include "executor/nodeMemoize.h" #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" @@ -140,7 +140,7 @@ bool enable_incremental_sort = true; bool enable_hashagg = true; bool enable_nestloop = true; bool enable_material = true; -bool enable_resultcache = true; +bool enable_memoize = true; bool enable_mergejoin = true; bool enable_hashjoin = true; bool enable_gathermerge = true; @@ -2405,8 +2405,8 @@ cost_material(Path *path, } /* - * cost_resultcache_rescan - * Determines the estimated cost of rescanning a ResultCache node. + * cost_memoize_rescan + * Determines the estimated cost of rescanning a Memoize node. * * In order to estimate this, we must gain knowledge of how often we expect to * be called and how many distinct sets of parameters we are likely to be @@ -2418,15 +2418,15 @@ cost_material(Path *path, * hit and caching would be a complete waste of effort. */ static void -cost_resultcache_rescan(PlannerInfo *root, ResultCachePath *rcpath, - Cost *rescan_startup_cost, Cost *rescan_total_cost) +cost_memoize_rescan(PlannerInfo *root, MemoizePath *mpath, + Cost *rescan_startup_cost, Cost *rescan_total_cost) { EstimationInfo estinfo; - Cost input_startup_cost = rcpath->subpath->startup_cost; - Cost input_total_cost = rcpath->subpath->total_cost; - double tuples = rcpath->subpath->rows; - double calls = rcpath->calls; - int width = rcpath->subpath->pathtarget->width; + Cost input_startup_cost = mpath->subpath->startup_cost; + Cost input_total_cost = mpath->subpath->total_cost; + double tuples = mpath->subpath->rows; + double calls = mpath->calls; + int width = mpath->subpath->pathtarget->width; double hash_mem_bytes; double est_entry_bytes; @@ -2455,16 +2455,16 @@ cost_resultcache_rescan(PlannerInfo *root, ResultCachePath *rcpath, est_cache_entries = floor(hash_mem_bytes / est_entry_bytes); /* estimate on the distinct number of parameter values */ - ndistinct = estimate_num_groups(root, rcpath->param_exprs, calls, NULL, + ndistinct = estimate_num_groups(root, mpath->param_exprs, calls, NULL, &estinfo); /* * When the estimation fell back on using a default value, it's a bit too - * risky to assume that it's ok to use a Result Cache. The use of a - * default could cause us to use a Result Cache when it's really + * risky to assume that it's ok to use a Memoize node. The use of a + * default could cause us to use a Memoize node when it's really * inappropriate to do so. If we see that this has been done, then we'll * assume that every call will have unique parameters, which will almost - * certainly mean a ResultCachePath will never survive add_path(). + * certainly mean a MemoizePath will never survive add_path(). */ if ((estinfo.flags & SELFLAG_USED_DEFAULT) != 0) ndistinct = calls; @@ -2478,8 +2478,8 @@ cost_resultcache_rescan(PlannerInfo *root, ResultCachePath *rcpath, * size itself. Really this is not the right place to do this, but it's * convenient since everything is already calculated. */ - rcpath->est_entries = Min(Min(ndistinct, est_cache_entries), - PG_UINT32_MAX); + mpath->est_entries = Min(Min(ndistinct, est_cache_entries), + PG_UINT32_MAX); /* * When the number of distinct parameter values is above the amount we can @@ -4285,10 +4285,10 @@ cost_rescan(PlannerInfo *root, Path *path, *rescan_total_cost = run_cost; } break; - case T_ResultCache: - /* All the hard work is done by cost_resultcache_rescan */ - cost_resultcache_rescan(root, (ResultCachePath *) path, - rescan_startup_cost, rescan_total_cost); + case T_Memoize: + /* All the hard work is done by cost_memoize_rescan */ + cost_memoize_rescan(root, (MemoizePath *) path, + rescan_startup_cost, rescan_total_cost); break; default: *rescan_startup_cost = path->startup_cost; diff --git a/src/backend/optimizer/path/joinpath.c b/src/backend/optimizer/path/joinpath.c index b67b5177707b9..6407ede12a612 100644 --- a/src/backend/optimizer/path/joinpath.c +++ b/src/backend/optimizer/path/joinpath.c @@ -171,7 +171,7 @@ add_paths_to_joinrel(PlannerInfo *root, case JOIN_ANTI: /* - * XXX it may be worth proving this to allow a ResultCache to be + * XXX it may be worth proving this to allow a Memoize to be * considered for Nested Loop Semi/Anti Joins. */ extra.inner_unique = false; /* well, unproven */ @@ -395,7 +395,7 @@ paraminfo_get_equal_hashops(PlannerInfo *root, ParamPathInfo *param_info, OpExpr *opexpr; Node *expr; - /* can't use result cache without a valid hash equals operator */ + /* can't use a memoize node without a valid hash equals operator */ if (!OidIsValid(rinfo->hasheqoperator) || !clause_sides_match_join(rinfo, outerrel, innerrel)) { @@ -436,7 +436,7 @@ paraminfo_get_equal_hashops(PlannerInfo *root, ParamPathInfo *param_info, typentry = lookup_type_cache(exprType(expr), TYPECACHE_HASH_PROC | TYPECACHE_EQ_OPR); - /* can't use result cache without a valid hash equals operator */ + /* can't use a memoize node without a valid hash equals operator */ if (!OidIsValid(typentry->hash_proc) || !OidIsValid(typentry->eq_opr)) { list_free(*operators); @@ -448,27 +448,27 @@ paraminfo_get_equal_hashops(PlannerInfo *root, ParamPathInfo *param_info, *param_exprs = lappend(*param_exprs, expr); } - /* We're okay to use result cache */ + /* We're okay to use memoize */ return true; } /* - * get_resultcache_path - * If possible, make and return a Result Cache path atop of 'inner_path'. + * get_memoize_path + * If possible, make and return a Memoize path atop of 'inner_path'. * Otherwise return NULL. */ static Path * -get_resultcache_path(PlannerInfo *root, RelOptInfo *innerrel, - RelOptInfo *outerrel, Path *inner_path, - Path *outer_path, JoinType jointype, - JoinPathExtraData *extra) +get_memoize_path(PlannerInfo *root, RelOptInfo *innerrel, + RelOptInfo *outerrel, Path *inner_path, + Path *outer_path, JoinType jointype, + JoinPathExtraData *extra) { List *param_exprs; List *hash_operators; ListCell *lc; /* Obviously not if it's disabled */ - if (!enable_resultcache) + if (!enable_memoize) return NULL; /* @@ -481,7 +481,7 @@ get_resultcache_path(PlannerInfo *root, RelOptInfo *innerrel, return NULL; /* - * We can only have a result cache when there's some kind of cache key, + * We can only have a memoize node when there's some kind of cache key, * either parameterized path clauses or lateral Vars. No cache key sounds * more like something a Materialize node might be more useful for. */ @@ -493,8 +493,8 @@ get_resultcache_path(PlannerInfo *root, RelOptInfo *innerrel, /* * Currently we don't do this for SEMI and ANTI joins unless they're * marked as inner_unique. This is because nested loop SEMI/ANTI joins - * don't scan the inner node to completion, which will mean result cache - * cannot mark the cache entry as complete. + * don't scan the inner node to completion, which will mean memoize cannot + * mark the cache entry as complete. * * XXX Currently we don't attempt to mark SEMI/ANTI joins as inner_unique * = true. Should we? See add_paths_to_joinrel() @@ -504,8 +504,8 @@ get_resultcache_path(PlannerInfo *root, RelOptInfo *innerrel, return NULL; /* - * Result Cache normally marks cache entries as complete when it runs out - * of tuples to read from its subplan. However, with unique joins, Nested + * Memoize normally marks cache entries as complete when it runs out of + * tuples to read from its subplan. However, with unique joins, Nested * Loop will skip to the next outer tuple after finding the first matching * inner tuple. This means that we may not read the inner side of the * join to completion which leaves no opportunity to mark the cache entry @@ -516,11 +516,11 @@ get_resultcache_path(PlannerInfo *root, RelOptInfo *innerrel, * condition, we can't be sure which part of it causes the join to be * unique. This means there are no guarantees that only 1 tuple will be * read. We cannot mark the cache entry as complete after reading the - * first tuple without that guarantee. This means the scope of Result - * Cache's usefulness is limited to only outer rows that have no join + * first tuple without that guarantee. This means the scope of Memoize + * node's usefulness is limited to only outer rows that have no join * partner as this is the only case where Nested Loop would exhaust the * inner scan of a unique join. Since the scope is limited to that, we - * just don't bother making a result cache path in this case. + * just don't bother making a memoize path in this case. * * Lateral vars needn't be considered here as they're not considered when * determining if the join is unique. @@ -536,7 +536,7 @@ get_resultcache_path(PlannerInfo *root, RelOptInfo *innerrel, return NULL; /* - * We can't use a result cache if there are volatile functions in the + * We can't use a memoize node if there are volatile functions in the * inner rel's target list or restrict list. A cache hit could reduce the * number of calls to these functions. */ @@ -559,13 +559,13 @@ get_resultcache_path(PlannerInfo *root, RelOptInfo *innerrel, ¶m_exprs, &hash_operators)) { - return (Path *) create_resultcache_path(root, - innerrel, - inner_path, - param_exprs, - hash_operators, - extra->inner_unique, - outer_path->parent->rows); + return (Path *) create_memoize_path(root, + innerrel, + inner_path, + param_exprs, + hash_operators, + extra->inner_unique, + outer_path->parent->rows); } return NULL; @@ -1688,7 +1688,7 @@ match_unsorted_outer(PlannerInfo *root, foreach(lc2, innerrel->cheapest_parameterized_paths) { Path *innerpath = (Path *) lfirst(lc2); - Path *rcpath; + Path *mpath; try_nestloop_path(root, joinrel, @@ -1699,17 +1699,17 @@ match_unsorted_outer(PlannerInfo *root, extra); /* - * Try generating a result cache path and see if that makes - * the nested loop any cheaper. + * Try generating a memoize path and see if that makes the + * nested loop any cheaper. */ - rcpath = get_resultcache_path(root, innerrel, outerrel, - innerpath, outerpath, jointype, - extra); - if (rcpath != NULL) + mpath = get_memoize_path(root, innerrel, outerrel, + innerpath, outerpath, jointype, + extra); + if (mpath != NULL) try_nestloop_path(root, joinrel, outerpath, - rcpath, + mpath, merge_pathkeys, jointype, extra); @@ -1867,7 +1867,7 @@ consider_parallel_nestloop(PlannerInfo *root, foreach(lc2, innerrel->cheapest_parameterized_paths) { Path *innerpath = (Path *) lfirst(lc2); - Path *rcpath; + Path *mpath; /* Can't join to an inner path that is not parallel-safe */ if (!innerpath->parallel_safe) @@ -1894,14 +1894,14 @@ consider_parallel_nestloop(PlannerInfo *root, pathkeys, jointype, extra); /* - * Try generating a result cache path and see if that makes the - * nested loop any cheaper. + * Try generating a memoize path and see if that makes the nested + * loop any cheaper. */ - rcpath = get_resultcache_path(root, innerrel, outerrel, - innerpath, outerpath, jointype, - extra); - if (rcpath != NULL) - try_partial_nestloop_path(root, joinrel, outerpath, rcpath, + mpath = get_memoize_path(root, innerrel, outerrel, + innerpath, outerpath, jointype, + extra); + if (mpath != NULL) + try_partial_nestloop_path(root, joinrel, outerpath, mpath, pathkeys, jointype, extra); } } diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index c13da7a879ffe..d3f8639a40865 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -92,9 +92,8 @@ static Result *create_group_result_plan(PlannerInfo *root, static ProjectSet *create_project_set_plan(PlannerInfo *root, ProjectSetPath *best_path); static Material *create_material_plan(PlannerInfo *root, MaterialPath *best_path, int flags); -static ResultCache *create_resultcache_plan(PlannerInfo *root, - ResultCachePath *best_path, - int flags); +static Memoize *create_memoize_plan(PlannerInfo *root, MemoizePath *best_path, + int flags); static Plan *create_unique_plan(PlannerInfo *root, UniquePath *best_path, int flags); static Gather *create_gather_plan(PlannerInfo *root, GatherPath *best_path); @@ -278,11 +277,9 @@ static Sort *make_sort_from_groupcols(List *groupcls, AttrNumber *grpColIdx, Plan *lefttree); static Material *make_material(Plan *lefttree); -static ResultCache *make_resultcache(Plan *lefttree, Oid *hashoperators, - Oid *collations, - List *param_exprs, - bool singlerow, - uint32 est_entries); +static Memoize *make_memoize(Plan *lefttree, Oid *hashoperators, + Oid *collations, List *param_exprs, + bool singlerow, uint32 est_entries); static WindowAgg *make_windowagg(List *tlist, Index winref, int partNumCols, AttrNumber *partColIdx, Oid *partOperators, Oid *partCollations, int ordNumCols, AttrNumber *ordColIdx, Oid *ordOperators, Oid *ordCollations, @@ -459,10 +456,10 @@ create_plan_recurse(PlannerInfo *root, Path *best_path, int flags) (MaterialPath *) best_path, flags); break; - case T_ResultCache: - plan = (Plan *) create_resultcache_plan(root, - (ResultCachePath *) best_path, - flags); + case T_Memoize: + plan = (Plan *) create_memoize_plan(root, + (MemoizePath *) best_path, + flags); break; case T_Unique: if (IsA(best_path, UpperUniquePath)) @@ -1578,16 +1575,16 @@ create_material_plan(PlannerInfo *root, MaterialPath *best_path, int flags) } /* - * create_resultcache_plan - * Create a ResultCache plan for 'best_path' and (recursively) plans - * for its subpaths. + * create_memoize_plan + * Create a Memoize plan for 'best_path' and (recursively) plans for its + * subpaths. * * Returns a Plan node. */ -static ResultCache * -create_resultcache_plan(PlannerInfo *root, ResultCachePath *best_path, int flags) +static Memoize * +create_memoize_plan(PlannerInfo *root, MemoizePath *best_path, int flags) { - ResultCache *plan; + Memoize *plan; Plan *subplan; Oid *operators; Oid *collations; @@ -1619,8 +1616,8 @@ create_resultcache_plan(PlannerInfo *root, ResultCachePath *best_path, int flags i++; } - plan = make_resultcache(subplan, operators, collations, param_exprs, - best_path->singlerow, best_path->est_entries); + plan = make_memoize(subplan, operators, collations, param_exprs, + best_path->singlerow, best_path->est_entries); copy_generic_path_info(&plan->plan, (Path *) best_path); @@ -6417,11 +6414,11 @@ materialize_finished_plan(Plan *subplan) return matplan; } -static ResultCache * -make_resultcache(Plan *lefttree, Oid *hashoperators, Oid *collations, - List *param_exprs, bool singlerow, uint32 est_entries) +static Memoize * +make_memoize(Plan *lefttree, Oid *hashoperators, Oid *collations, + List *param_exprs, bool singlerow, uint32 est_entries) { - ResultCache *node = makeNode(ResultCache); + Memoize *node = makeNode(Memoize); Plan *plan = &node->plan; plan->targetlist = lefttree->targetlist; @@ -7035,7 +7032,7 @@ is_projection_capable_path(Path *path) { case T_Hash: case T_Material: - case T_ResultCache: + case T_Memoize: case T_Sort: case T_IncrementalSort: case T_Unique: @@ -7085,7 +7082,7 @@ is_projection_capable_plan(Plan *plan) { case T_Hash: case T_Material: - case T_ResultCache: + case T_Memoize: case T_Sort: case T_Unique: case T_SetOp: diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c index 3ac853d9efc4e..e25dc9a7ca7c2 100644 --- a/src/backend/optimizer/plan/initsplan.c +++ b/src/backend/optimizer/plan/initsplan.c @@ -78,7 +78,7 @@ static bool check_equivalence_delay(PlannerInfo *root, static bool check_redundant_nullability_qual(PlannerInfo *root, Node *clause); static void check_mergejoinable(RestrictInfo *restrictinfo); static void check_hashjoinable(RestrictInfo *restrictinfo); -static void check_resultcacheable(RestrictInfo *restrictinfo); +static void check_memoizable(RestrictInfo *restrictinfo); /***************************************************************************** @@ -2212,10 +2212,10 @@ distribute_restrictinfo_to_rels(PlannerInfo *root, /* * Likewise, check if the clause is suitable to be used with a - * Result Cache node to cache inner tuples during a parameterized + * Memoize node to cache inner tuples during a parameterized * nested loop. */ - check_resultcacheable(restrictinfo); + check_memoizable(restrictinfo); /* * Add clause to the join lists of all the relevant relations. @@ -2459,7 +2459,7 @@ build_implied_join_equality(PlannerInfo *root, /* Set mergejoinability/hashjoinability flags */ check_mergejoinable(restrictinfo); check_hashjoinable(restrictinfo); - check_resultcacheable(restrictinfo); + check_memoizable(restrictinfo); return restrictinfo; } @@ -2709,13 +2709,13 @@ check_hashjoinable(RestrictInfo *restrictinfo) } /* - * check_resultcacheable - * If the restrictinfo's clause is suitable to be used for a Result Cache - * node, set the hasheqoperator to the hash equality operator that will be - * needed during caching. + * check_memoizable + * If the restrictinfo's clause is suitable to be used for a Memoize node, + * set the hasheqoperator to the hash equality operator that will be needed + * during caching. */ static void -check_resultcacheable(RestrictInfo *restrictinfo) +check_memoizable(RestrictInfo *restrictinfo) { TypeCacheEntry *typentry; Expr *clause = restrictinfo->clause; diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 210c4b3b14cbf..26f6872b4b0a6 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -752,19 +752,19 @@ set_plan_refs(PlannerInfo *root, Plan *plan, int rtoffset) set_hash_references(root, plan, rtoffset); break; - case T_ResultCache: + case T_Memoize: { - ResultCache *rcplan = (ResultCache *) plan; + Memoize *mplan = (Memoize *) plan; /* - * Result Cache does not evaluate its targetlist. It just - * uses the same targetlist from its outer subnode. + * Memoize does not evaluate its targetlist. It just uses the + * same targetlist from its outer subnode. */ set_dummy_tlist_references(plan, rtoffset); - rcplan->param_exprs = fix_scan_list(root, rcplan->param_exprs, - rtoffset, - NUM_EXEC_TLIST(plan)); + mplan->param_exprs = fix_scan_list(root, mplan->param_exprs, + rtoffset, + NUM_EXEC_TLIST(plan)); break; } diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c index 0881a208acfce..b5a61f393351e 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -2745,8 +2745,8 @@ finalize_plan(PlannerInfo *root, Plan *plan, /* rescan_param does *not* get added to scan_params */ break; - case T_ResultCache: - finalize_primnode((Node *) ((ResultCache *) plan)->param_exprs, + case T_Memoize: + finalize_primnode((Node *) ((Memoize *) plan)->param_exprs, &context); break; diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 9ce5f95e3b137..0c94cbe767aa8 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -1577,20 +1577,19 @@ create_material_path(RelOptInfo *rel, Path *subpath) } /* - * create_resultcache_path - * Creates a path corresponding to a ResultCache plan, returning the - * pathnode. + * create_memoize_path + * Creates a path corresponding to a Memoize plan, returning the pathnode. */ -ResultCachePath * -create_resultcache_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, - List *param_exprs, List *hash_operators, - bool singlerow, double calls) +MemoizePath * +create_memoize_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, + List *param_exprs, List *hash_operators, + bool singlerow, double calls) { - ResultCachePath *pathnode = makeNode(ResultCachePath); + MemoizePath *pathnode = makeNode(MemoizePath); Assert(subpath->parent == rel); - pathnode->path.pathtype = T_ResultCache; + pathnode->path.pathtype = T_Memoize; pathnode->path.parent = rel; pathnode->path.pathtarget = rel->reltarget; pathnode->path.param_info = subpath->param_info; @@ -1607,17 +1606,16 @@ create_resultcache_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, pathnode->calls = calls; /* - * For now we set est_entries to 0. cost_resultcache_rescan() does all - * the hard work to determine how many cache entries there are likely to - * be, so it seems best to leave it up to that function to fill this field - * in. If left at 0, the executor will make a guess at a good value. + * For now we set est_entries to 0. cost_memoize_rescan() does all the + * hard work to determine how many cache entries there are likely to be, + * so it seems best to leave it up to that function to fill this field in. + * If left at 0, the executor will make a guess at a good value. */ pathnode->est_entries = 0; /* * Add a small additional charge for caching the first entry. All the - * harder calculations for rescans are performed in - * cost_resultcache_rescan(). + * harder calculations for rescans are performed in cost_memoize_rescan(). */ pathnode->path.startup_cost = subpath->startup_cost + cpu_tuple_cost; pathnode->path.total_cost = subpath->total_cost + cpu_tuple_cost; @@ -3936,16 +3934,16 @@ reparameterize_path(PlannerInfo *root, Path *path, apath->path.parallel_aware, -1); } - case T_ResultCache: + case T_Memoize: { - ResultCachePath *rcpath = (ResultCachePath *) path; - - return (Path *) create_resultcache_path(root, rel, - rcpath->subpath, - rcpath->param_exprs, - rcpath->hash_operators, - rcpath->singlerow, - rcpath->calls); + MemoizePath *mpath = (MemoizePath *) path; + + return (Path *) create_memoize_path(root, rel, + mpath->subpath, + mpath->param_exprs, + mpath->hash_operators, + mpath->singlerow, + mpath->calls); } default: break; @@ -4165,13 +4163,13 @@ do { \ } break; - case T_ResultCachePath: + case T_MemoizePath: { - ResultCachePath *rcpath; + MemoizePath *mpath; - FLAT_COPY_PATH(rcpath, path, ResultCachePath); - REPARAMETERIZE_CHILD_PATH(rcpath->subpath); - new_path = (Path *) rcpath; + FLAT_COPY_PATH(mpath, path, MemoizePath); + REPARAMETERIZE_CHILD_PATH(mpath->subpath); + new_path = (Path *) mpath; } break; diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 45a053ca40565..a2e0f8de7e740 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -1058,12 +1058,12 @@ static struct config_bool ConfigureNamesBool[] = NULL, NULL, NULL }, { - {"enable_resultcache", PGC_USERSET, QUERY_TUNING_METHOD, - gettext_noop("Enables the planner's use of result caching."), + {"enable_memoize", PGC_USERSET, QUERY_TUNING_METHOD, + gettext_noop("Enables the planner's use of memoization."), NULL, GUC_EXPLAIN }, - &enable_resultcache, + &enable_memoize, true, NULL, NULL, NULL }, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index b696abfe54112..ccaaf63850cf8 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -367,7 +367,7 @@ #enable_indexscan = on #enable_indexonlyscan = on #enable_material = on -#enable_resultcache = on +#enable_memoize = on #enable_mergejoin = on #enable_nestloop = on #enable_parallel_append = on diff --git a/src/include/executor/nodeMemoize.h b/src/include/executor/nodeMemoize.h new file mode 100644 index 0000000000000..898fa438163d8 --- /dev/null +++ b/src/include/executor/nodeMemoize.h @@ -0,0 +1,32 @@ +/*------------------------------------------------------------------------- + * + * nodeMemoize.h + * + * + * + * Portions Copyright (c) 2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/executor/nodeMemoize.h + * + *------------------------------------------------------------------------- + */ +#ifndef NODEMEMOIZE_H +#define NODEMEMOIZE_H + +#include "access/parallel.h" +#include "nodes/execnodes.h" + +extern MemoizeState *ExecInitMemoize(Memoize *node, EState *estate, int eflags); +extern void ExecEndMemoize(MemoizeState *node); +extern void ExecReScanMemoize(MemoizeState *node); +extern double ExecEstimateCacheEntryOverheadBytes(double ntuples); +extern void ExecMemoizeEstimate(MemoizeState *node, + ParallelContext *pcxt); +extern void ExecMemoizeInitializeDSM(MemoizeState *node, + ParallelContext *pcxt); +extern void ExecMemoizeInitializeWorker(MemoizeState *node, + ParallelWorkerContext *pwcxt); +extern void ExecMemoizeRetrieveInstrumentation(MemoizeState *node); + +#endif /* NODEMEMOIZE_H */ diff --git a/src/include/executor/nodeResultCache.h b/src/include/executor/nodeResultCache.h deleted file mode 100644 index e7a3e7ab9cdbf..0000000000000 --- a/src/include/executor/nodeResultCache.h +++ /dev/null @@ -1,32 +0,0 @@ -/*------------------------------------------------------------------------- - * - * nodeResultCache.h - * - * - * - * Portions Copyright (c) 2021, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * src/include/executor/nodeResultCache.h - * - *------------------------------------------------------------------------- - */ -#ifndef NODERESULTCACHE_H -#define NODERESULTCACHE_H - -#include "access/parallel.h" -#include "nodes/execnodes.h" - -extern ResultCacheState *ExecInitResultCache(ResultCache *node, EState *estate, int eflags); -extern void ExecEndResultCache(ResultCacheState *node); -extern void ExecReScanResultCache(ResultCacheState *node); -extern double ExecEstimateCacheEntryOverheadBytes(double ntuples); -extern void ExecResultCacheEstimate(ResultCacheState *node, - ParallelContext *pcxt); -extern void ExecResultCacheInitializeDSM(ResultCacheState *node, - ParallelContext *pcxt); -extern void ExecResultCacheInitializeWorker(ResultCacheState *node, - ParallelWorkerContext *pwcxt); -extern void ExecResultCacheRetrieveInstrumentation(ResultCacheState *node); - -#endif /* NODERESULTCACHE_H */ diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 0ec5509e7e996..105180764e1f2 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -2046,11 +2046,11 @@ typedef struct MaterialState Tuplestorestate *tuplestorestate; } MaterialState; -struct ResultCacheEntry; -struct ResultCacheTuple; -struct ResultCacheKey; +struct MemoizeEntry; +struct MemoizeTuple; +struct MemoizeKey; -typedef struct ResultCacheInstrumentation +typedef struct MemoizeInstrumentation { uint64 cache_hits; /* number of rescans where we've found the * scan parameter values to be cached */ @@ -2063,31 +2063,31 @@ typedef struct ResultCacheInstrumentation * able to free enough space to store the * current scan's tuples. */ uint64 mem_peak; /* peak memory usage in bytes */ -} ResultCacheInstrumentation; +} MemoizeInstrumentation; /* ---------------- - * Shared memory container for per-worker resultcache information + * Shared memory container for per-worker memoize information * ---------------- */ -typedef struct SharedResultCacheInfo +typedef struct SharedMemoizeInfo { int num_workers; - ResultCacheInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; -} SharedResultCacheInfo; + MemoizeInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; +} SharedMemoizeInfo; /* ---------------- - * ResultCacheState information + * MemoizeState information * - * resultcache nodes are used to cache recent and commonly seen results - * from a parameterized scan. + * memoize nodes are used to cache recent and commonly seen results from + * a parameterized scan. * ---------------- */ -typedef struct ResultCacheState +typedef struct MemoizeState { ScanState ss; /* its first field is NodeTag */ - int rc_status; /* value of ExecResultCache state machine */ + int mstatus; /* value of ExecMemoize state machine */ int nkeys; /* number of cache keys */ - struct resultcache_hash *hashtable; /* hash table for cache entries */ + struct memoize_hash *hashtable; /* hash table for cache entries */ TupleDesc hashkeydesc; /* tuple descriptor for cache keys */ TupleTableSlot *tableslot; /* min tuple slot for existing cache entries */ TupleTableSlot *probeslot; /* virtual slot used for hash lookups */ @@ -2100,17 +2100,17 @@ typedef struct ResultCacheState uint64 mem_limit; /* memory limit in bytes for the cache */ MemoryContext tableContext; /* memory context to store cache data */ dlist_head lru_list; /* least recently used entry list */ - struct ResultCacheTuple *last_tuple; /* Used to point to the last tuple - * returned during a cache hit and - * the tuple we last stored when - * populating the cache. */ - struct ResultCacheEntry *entry; /* the entry that 'last_tuple' belongs to - * or NULL if 'last_tuple' is NULL. */ + struct MemoizeTuple *last_tuple; /* Used to point to the last tuple + * returned during a cache hit and the + * tuple we last stored when + * populating the cache. */ + struct MemoizeEntry *entry; /* the entry that 'last_tuple' belongs to or + * NULL if 'last_tuple' is NULL. */ bool singlerow; /* true if the cache entry is to be marked as * complete after caching the first tuple. */ - ResultCacheInstrumentation stats; /* execution statistics */ - SharedResultCacheInfo *shared_info; /* statistics for parallel workers */ -} ResultCacheState; + MemoizeInstrumentation stats; /* execution statistics */ + SharedMemoizeInfo *shared_info; /* statistics for parallel workers */ +} MemoizeState; /* ---------------- * When performing sorting by multiple keys, it's possible that the input diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h index d9e417bcd7064..f7b009ec43b4b 100644 --- a/src/include/nodes/nodes.h +++ b/src/include/nodes/nodes.h @@ -74,7 +74,7 @@ typedef enum NodeTag T_MergeJoin, T_HashJoin, T_Material, - T_ResultCache, + T_Memoize, T_Sort, T_IncrementalSort, T_Group, @@ -133,7 +133,7 @@ typedef enum NodeTag T_MergeJoinState, T_HashJoinState, T_MaterialState, - T_ResultCacheState, + T_MemoizeState, T_SortState, T_IncrementalSortState, T_GroupState, @@ -244,7 +244,7 @@ typedef enum NodeTag T_MergeAppendPath, T_GroupResultPath, T_MaterialPath, - T_ResultCachePath, + T_MemoizePath, T_UniquePath, T_GatherPath, T_GatherMergePath, diff --git a/src/include/nodes/pathnodes.h b/src/include/nodes/pathnodes.h index bebf774818fa6..a692bcfb53a44 100644 --- a/src/include/nodes/pathnodes.h +++ b/src/include/nodes/pathnodes.h @@ -1495,11 +1495,11 @@ typedef struct MaterialPath } MaterialPath; /* - * ResultCachePath represents a ResultCache plan node, i.e., a cache that - * caches tuples from parameterized paths to save the underlying node from - * having to be rescanned for parameter values which are already cached. + * MemoizePath represents a Memoize plan node, i.e., a cache that caches + * tuples from parameterized paths to save the underlying node from having to + * be rescanned for parameter values which are already cached. */ -typedef struct ResultCachePath +typedef struct MemoizePath { Path path; Path *subpath; /* outerpath to cache tuples from */ @@ -1511,7 +1511,7 @@ typedef struct ResultCachePath uint32 est_entries; /* The maximum number of entries that the * planner expects will fit in the cache, or 0 * if unknown */ -} ResultCachePath; +} MemoizePath; /* * UniquePath represents elimination of distinct rows from the output of @@ -2111,7 +2111,7 @@ typedef struct RestrictInfo Selectivity left_mcvfreq; /* left side's most common val's freq */ Selectivity right_mcvfreq; /* right side's most common val's freq */ - /* hash equality operator used for result cache, else InvalidOid */ + /* hash equality operator used for memoize nodes, else InvalidOid */ Oid hasheqoperator; } RestrictInfo; diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h index aaa3b65d0492f..98a4c73f939e4 100644 --- a/src/include/nodes/plannodes.h +++ b/src/include/nodes/plannodes.h @@ -781,10 +781,10 @@ typedef struct Material } Material; /* ---------------- - * result cache node + * memoize node * ---------------- */ -typedef struct ResultCache +typedef struct Memoize { Plan plan; @@ -799,7 +799,7 @@ typedef struct ResultCache uint32 est_entries; /* The maximum number of entries that the * planner expects will fit in the cache, or 0 * if unknown */ -} ResultCache; +} Memoize; /* ---------------- * sort node diff --git a/src/include/optimizer/cost.h b/src/include/optimizer/cost.h index 0fe60d82e438d..2113bc82de0f6 100644 --- a/src/include/optimizer/cost.h +++ b/src/include/optimizer/cost.h @@ -57,7 +57,7 @@ extern PGDLLIMPORT bool enable_incremental_sort; extern PGDLLIMPORT bool enable_hashagg; extern PGDLLIMPORT bool enable_nestloop; extern PGDLLIMPORT bool enable_material; -extern PGDLLIMPORT bool enable_resultcache; +extern PGDLLIMPORT bool enable_memoize; extern PGDLLIMPORT bool enable_mergejoin; extern PGDLLIMPORT bool enable_hashjoin; extern PGDLLIMPORT bool enable_gathermerge; diff --git a/src/include/optimizer/pathnode.h b/src/include/optimizer/pathnode.h index 53261ee91fd9a..f704d399809e8 100644 --- a/src/include/optimizer/pathnode.h +++ b/src/include/optimizer/pathnode.h @@ -82,13 +82,13 @@ extern GroupResultPath *create_group_result_path(PlannerInfo *root, PathTarget *target, List *havingqual); extern MaterialPath *create_material_path(RelOptInfo *rel, Path *subpath); -extern ResultCachePath *create_resultcache_path(PlannerInfo *root, - RelOptInfo *rel, - Path *subpath, - List *param_exprs, - List *hash_operators, - bool singlerow, - double calls); +extern MemoizePath *create_memoize_path(PlannerInfo *root, + RelOptInfo *rel, + Path *subpath, + List *param_exprs, + List *hash_operators, + bool singlerow, + double calls); extern UniquePath *create_unique_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, SpecialJoinInfo *sjinfo); extern GatherPath *create_gather_path(PlannerInfo *root, diff --git a/src/test/regress/expected/aggregates.out b/src/test/regress/expected/aggregates.out index ca06d41dd048b..23b112b2af846 100644 --- a/src/test/regress/expected/aggregates.out +++ b/src/test/regress/expected/aggregates.out @@ -2584,7 +2584,7 @@ select v||'a', case when v||'a' = 'aa' then 1 else 0 end, count(*) -- Make sure that generation of HashAggregate for uniqification purposes -- does not lead to array overflow due to unexpected duplicate hash keys -- see CAFeeJoKKu0u+A_A9R9316djW-YW3-+Gtgvy3ju655qRHR3jtdA@mail.gmail.com -set enable_resultcache to off; +set enable_memoize to off; explain (costs off) select 1 from tenk1 where (hundred, thousand) in (select twothousand, twothousand from onek); @@ -2600,7 +2600,7 @@ explain (costs off) -> Seq Scan on onek (8 rows) -reset enable_resultcache; +reset enable_memoize; -- -- Hash Aggregation Spill tests -- diff --git a/src/test/regress/expected/join.out b/src/test/regress/expected/join.out index 19cd056987605..f3589d0dbb03f 100644 --- a/src/test/regress/expected/join.out +++ b/src/test/regress/expected/join.out @@ -2536,7 +2536,7 @@ reset enable_nestloop; -- set work_mem to '64kB'; set enable_mergejoin to off; -set enable_resultcache to off; +set enable_memoize to off; explain (costs off) select count(*) from tenk1 a, tenk1 b where a.hundred = b.thousand and (b.fivethous % 10) < 10; @@ -2560,7 +2560,7 @@ select count(*) from tenk1 a, tenk1 b reset work_mem; reset enable_mergejoin; -reset enable_resultcache; +reset enable_memoize; -- -- regression test for 8.2 bug with improper re-ordering of left joins -- @@ -3684,7 +3684,7 @@ where t1.unique1 = 1; Recheck Cond: (t1.hundred = hundred) -> Bitmap Index Scan on tenk1_hundred Index Cond: (hundred = t1.hundred) - -> Result Cache + -> Memoize Cache Key: t2.thousand -> Index Scan using tenk1_unique2 on tenk1 t3 Index Cond: (unique2 = t2.thousand) @@ -3706,7 +3706,7 @@ where t1.unique1 = 1; Recheck Cond: (t1.hundred = hundred) -> Bitmap Index Scan on tenk1_hundred Index Cond: (hundred = t1.hundred) - -> Result Cache + -> Memoize Cache Key: t2.thousand -> Index Scan using tenk1_unique2 on tenk1 t3 Index Cond: (unique2 = t2.thousand) @@ -4235,7 +4235,7 @@ where t1.f1 = ss.f1; -> Seq Scan on public.int8_tbl i8 Output: i8.q1, i8.q2 Filter: (i8.q2 = 123) - -> Result Cache + -> Memoize Output: (i8.q1), t2.f1 Cache Key: i8.q1 -> Limit @@ -4279,14 +4279,14 @@ where t1.f1 = ss2.f1; -> Seq Scan on public.int8_tbl i8 Output: i8.q1, i8.q2 Filter: (i8.q2 = 123) - -> Result Cache + -> Memoize Output: (i8.q1), t2.f1 Cache Key: i8.q1 -> Limit Output: (i8.q1), t2.f1 -> Seq Scan on public.text_tbl t2 Output: i8.q1, t2.f1 - -> Result Cache + -> Memoize Output: ((i8.q1)), (t2.f1) Cache Key: (i8.q1), t2.f1 -> Limit @@ -4339,7 +4339,7 @@ where tt1.f1 = ss1.c0; -> Seq Scan on public.text_tbl tt4 Output: tt4.f1 Filter: (tt4.f1 = 'foo'::text) - -> Result Cache + -> Memoize Output: ss1.c0 Cache Key: tt4.f1 -> Subquery Scan on ss1 @@ -5028,7 +5028,7 @@ explain (costs off) Aggregate -> Nested Loop -> Seq Scan on tenk1 a - -> Result Cache + -> Memoize Cache Key: a.two -> Function Scan on generate_series g (6 rows) @@ -5040,7 +5040,7 @@ explain (costs off) Aggregate -> Nested Loop -> Seq Scan on tenk1 a - -> Result Cache + -> Memoize Cache Key: a.two -> Function Scan on generate_series g (6 rows) @@ -5053,7 +5053,7 @@ explain (costs off) Aggregate -> Nested Loop -> Seq Scan on tenk1 a - -> Result Cache + -> Memoize Cache Key: a.two -> Function Scan on generate_series g (6 rows) @@ -5115,7 +5115,7 @@ explain (costs off) -> Nested Loop -> Index Only Scan using tenk1_unique1 on tenk1 a -> Values Scan on "*VALUES*" - -> Result Cache + -> Memoize Cache Key: "*VALUES*".column1 -> Index Only Scan using tenk1_unique2 on tenk1 b Index Cond: (unique2 = "*VALUES*".column1) diff --git a/src/test/regress/expected/resultcache.out b/src/test/regress/expected/memoize.out similarity index 88% rename from src/test/regress/expected/resultcache.out rename to src/test/regress/expected/memoize.out index 5b5dd6838e0f3..9a025c4a7ab9e 100644 --- a/src/test/regress/expected/resultcache.out +++ b/src/test/regress/expected/memoize.out @@ -1,9 +1,9 @@ --- Perform tests on the Result Cache node. --- The cache hits/misses/evictions from the Result Cache node can vary between +-- Perform tests on the Memoize node. +-- The cache hits/misses/evictions from the Memoize node can vary between -- machines. Let's just replace the number with an 'N'. In order to allow us -- to perform validation when the measure was zero, we replace a zero value -- with "Zero". All other numbers are replaced with 'N'. -create function explain_resultcache(query text, hide_hitmiss bool) returns setof text +create function explain_memoize(query text, hide_hitmiss bool) returns setof text language plpgsql as $$ declare @@ -28,21 +28,21 @@ begin end loop; end; $$; --- Ensure we get a result cache on the inner side of the nested loop +-- Ensure we get a memoize node on the inner side of the nested loop SET enable_hashjoin TO off; SET enable_bitmapscan TO off; -SELECT explain_resultcache(' +SELECT explain_memoize(' SELECT COUNT(*),AVG(t1.unique1) FROM tenk1 t1 INNER JOIN tenk1 t2 ON t1.unique1 = t2.twenty WHERE t2.unique1 < 1000;', false); - explain_resultcache + explain_memoize ------------------------------------------------------------------------------------------- Aggregate (actual rows=1 loops=N) -> Nested Loop (actual rows=1000 loops=N) -> Seq Scan on tenk1 t2 (actual rows=1000 loops=N) Filter: (unique1 < 1000) Rows Removed by Filter: 9000 - -> Result Cache (actual rows=1 loops=N) + -> Memoize (actual rows=1 loops=N) Cache Key: t2.twenty Hits: 980 Misses: 20 Evictions: Zero Overflows: 0 Memory Usage: NkB -> Index Only Scan using tenk1_unique1 on tenk1 t1 (actual rows=1 loops=N) @@ -60,18 +60,18 @@ WHERE t2.unique1 < 1000; (1 row) -- Try with LATERAL joins -SELECT explain_resultcache(' +SELECT explain_memoize(' SELECT COUNT(*),AVG(t2.unique1) FROM tenk1 t1, LATERAL (SELECT t2.unique1 FROM tenk1 t2 WHERE t1.twenty = t2.unique1) t2 WHERE t1.unique1 < 1000;', false); - explain_resultcache + explain_memoize ------------------------------------------------------------------------------------------- Aggregate (actual rows=1 loops=N) -> Nested Loop (actual rows=1000 loops=N) -> Seq Scan on tenk1 t1 (actual rows=1000 loops=N) Filter: (unique1 < 1000) Rows Removed by Filter: 9000 - -> Result Cache (actual rows=1 loops=N) + -> Memoize (actual rows=1 loops=N) Cache Key: t1.twenty Hits: 980 Misses: 20 Evictions: Zero Overflows: 0 Memory Usage: NkB -> Index Only Scan using tenk1_unique1 on tenk1 t2 (actual rows=1 loops=N) @@ -94,18 +94,18 @@ SET enable_mergejoin TO off; -- Ensure we get some evictions. We're unable to validate the hits and misses -- here as the number of entries that fit in the cache at once will vary -- between different machines. -SELECT explain_resultcache(' +SELECT explain_memoize(' SELECT COUNT(*),AVG(t1.unique1) FROM tenk1 t1 INNER JOIN tenk1 t2 ON t1.unique1 = t2.thousand WHERE t2.unique1 < 1200;', true); - explain_resultcache + explain_memoize ------------------------------------------------------------------------------------------- Aggregate (actual rows=1 loops=N) -> Nested Loop (actual rows=1200 loops=N) -> Seq Scan on tenk1 t2 (actual rows=1200 loops=N) Filter: (unique1 < 1200) Rows Removed by Filter: 8800 - -> Result Cache (actual rows=1 loops=N) + -> Memoize (actual rows=1 loops=N) Cache Key: t2.thousand Hits: N Misses: N Evictions: N Overflows: 0 Memory Usage: NkB -> Index Only Scan using tenk1_unique1 on tenk1 t1 (actual rows=1 loops=N) @@ -117,7 +117,7 @@ RESET enable_mergejoin; RESET work_mem; RESET enable_bitmapscan; RESET enable_hashjoin; --- Test parallel plans with Result Cache. +-- Test parallel plans with Memoize SET min_parallel_table_scan_size TO 0; SET parallel_setup_cost TO 0; SET parallel_tuple_cost TO 0; @@ -138,7 +138,7 @@ WHERE t1.unique1 < 1000; Recheck Cond: (unique1 < 1000) -> Bitmap Index Scan on tenk1_unique1 Index Cond: (unique1 < 1000) - -> Result Cache + -> Memoize Cache Key: t1.twenty -> Index Only Scan using tenk1_unique1 on tenk1 t2 Index Cond: (unique1 = t1.twenty) diff --git a/src/test/regress/expected/partition_prune.out b/src/test/regress/expected/partition_prune.out index 2c62e4a7a60d2..7555764c77948 100644 --- a/src/test/regress/expected/partition_prune.out +++ b/src/test/regress/expected/partition_prune.out @@ -2085,7 +2085,7 @@ create index ab_a3_b2_a_idx on ab_a3_b2 (a); create index ab_a3_b3_a_idx on ab_a3_b3 (a); set enable_hashjoin = 0; set enable_mergejoin = 0; -set enable_resultcache = 0; +set enable_memoize = 0; select explain_parallel_append('select avg(ab.a) from ab inner join lprt_a a on ab.a = a.a where a.a in(0, 0, 1)'); explain_parallel_append -------------------------------------------------------------------------------------------------------- @@ -2254,7 +2254,7 @@ select explain_parallel_append('select avg(ab.a) from ab inner join lprt_a a on reset enable_hashjoin; reset enable_mergejoin; -reset enable_resultcache; +reset enable_memoize; reset parallel_setup_cost; reset parallel_tuple_cost; reset min_parallel_table_scan_size; diff --git a/src/test/regress/expected/subselect.out b/src/test/regress/expected/subselect.out index c7986fb7fcce4..30615dd6bc735 100644 --- a/src/test/regress/expected/subselect.out +++ b/src/test/regress/expected/subselect.out @@ -1097,7 +1097,7 @@ where o.ten = 1; -> Nested Loop -> Seq Scan on onek o Filter: (ten = 1) - -> Result Cache + -> Memoize Cache Key: o.four -> CTE Scan on x CTE x diff --git a/src/test/regress/expected/sysviews.out b/src/test/regress/expected/sysviews.out index 0bb558d93c9d9..6e54f3e15e2de 100644 --- a/src/test/regress/expected/sysviews.out +++ b/src/test/regress/expected/sysviews.out @@ -104,6 +104,7 @@ select name, setting from pg_settings where name like 'enable%'; enable_indexonlyscan | on enable_indexscan | on enable_material | on + enable_memoize | on enable_mergejoin | on enable_nestloop | on enable_parallel_append | on @@ -111,7 +112,6 @@ select name, setting from pg_settings where name like 'enable%'; enable_partition_pruning | on enable_partitionwise_aggregate | off enable_partitionwise_join | off - enable_resultcache | on enable_seqscan | on enable_sort | on enable_tidscan | on diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule index 22b0d3584da94..7be89178f0fce 100644 --- a/src/test/regress/parallel_schedule +++ b/src/test/regress/parallel_schedule @@ -120,7 +120,7 @@ test: plancache limit plpgsql copy2 temp domain rangefuncs prepare conversion tr # ---------- # Another group of parallel tests # ---------- -test: partition_join partition_prune reloptions hash_part indexing partition_aggregate partition_info tuplesort explain compression resultcache +test: partition_join partition_prune reloptions hash_part indexing partition_aggregate partition_info tuplesort explain compression memoize # event triggers cannot run concurrently with any test that runs DDL # oidjoins is read-only, though, and should run late for best coverage diff --git a/src/test/regress/sql/aggregates.sql b/src/test/regress/sql/aggregates.sql index eb80a2fe06346..ed2d6b3bdfc25 100644 --- a/src/test/regress/sql/aggregates.sql +++ b/src/test/regress/sql/aggregates.sql @@ -1098,11 +1098,11 @@ select v||'a', case when v||'a' = 'aa' then 1 else 0 end, count(*) -- Make sure that generation of HashAggregate for uniqification purposes -- does not lead to array overflow due to unexpected duplicate hash keys -- see CAFeeJoKKu0u+A_A9R9316djW-YW3-+Gtgvy3ju655qRHR3jtdA@mail.gmail.com -set enable_resultcache to off; +set enable_memoize to off; explain (costs off) select 1 from tenk1 where (hundred, thousand) in (select twothousand, twothousand from onek); -reset enable_resultcache; +reset enable_memoize; -- -- Hash Aggregation Spill tests diff --git a/src/test/regress/sql/join.sql b/src/test/regress/sql/join.sql index 2a0e2d12d8320..cb1c2309140ac 100644 --- a/src/test/regress/sql/join.sql +++ b/src/test/regress/sql/join.sql @@ -550,7 +550,7 @@ reset enable_nestloop; set work_mem to '64kB'; set enable_mergejoin to off; -set enable_resultcache to off; +set enable_memoize to off; explain (costs off) select count(*) from tenk1 a, tenk1 b @@ -560,7 +560,7 @@ select count(*) from tenk1 a, tenk1 b reset work_mem; reset enable_mergejoin; -reset enable_resultcache; +reset enable_memoize; -- -- regression test for 8.2 bug with improper re-ordering of left joins diff --git a/src/test/regress/sql/resultcache.sql b/src/test/regress/sql/memoize.sql similarity index 88% rename from src/test/regress/sql/resultcache.sql rename to src/test/regress/sql/memoize.sql index 43a70d56a5118..548cc3eee3020 100644 --- a/src/test/regress/sql/resultcache.sql +++ b/src/test/regress/sql/memoize.sql @@ -1,10 +1,10 @@ --- Perform tests on the Result Cache node. +-- Perform tests on the Memoize node. --- The cache hits/misses/evictions from the Result Cache node can vary between +-- The cache hits/misses/evictions from the Memoize node can vary between -- machines. Let's just replace the number with an 'N'. In order to allow us -- to perform validation when the measure was zero, we replace a zero value -- with "Zero". All other numbers are replaced with 'N'. -create function explain_resultcache(query text, hide_hitmiss bool) returns setof text +create function explain_memoize(query text, hide_hitmiss bool) returns setof text language plpgsql as $$ declare @@ -30,11 +30,11 @@ begin end; $$; --- Ensure we get a result cache on the inner side of the nested loop +-- Ensure we get a memoize node on the inner side of the nested loop SET enable_hashjoin TO off; SET enable_bitmapscan TO off; -SELECT explain_resultcache(' +SELECT explain_memoize(' SELECT COUNT(*),AVG(t1.unique1) FROM tenk1 t1 INNER JOIN tenk1 t2 ON t1.unique1 = t2.twenty WHERE t2.unique1 < 1000;', false); @@ -45,7 +45,7 @@ INNER JOIN tenk1 t2 ON t1.unique1 = t2.twenty WHERE t2.unique1 < 1000; -- Try with LATERAL joins -SELECT explain_resultcache(' +SELECT explain_memoize(' SELECT COUNT(*),AVG(t2.unique1) FROM tenk1 t1, LATERAL (SELECT t2.unique1 FROM tenk1 t2 WHERE t1.twenty = t2.unique1) t2 WHERE t1.unique1 < 1000;', false); @@ -61,7 +61,7 @@ SET enable_mergejoin TO off; -- Ensure we get some evictions. We're unable to validate the hits and misses -- here as the number of entries that fit in the cache at once will vary -- between different machines. -SELECT explain_resultcache(' +SELECT explain_memoize(' SELECT COUNT(*),AVG(t1.unique1) FROM tenk1 t1 INNER JOIN tenk1 t2 ON t1.unique1 = t2.thousand WHERE t2.unique1 < 1200;', true); @@ -70,7 +70,7 @@ RESET work_mem; RESET enable_bitmapscan; RESET enable_hashjoin; --- Test parallel plans with Result Cache. +-- Test parallel plans with Memoize SET min_parallel_table_scan_size TO 0; SET parallel_setup_cost TO 0; SET parallel_tuple_cost TO 0; diff --git a/src/test/regress/sql/partition_prune.sql b/src/test/regress/sql/partition_prune.sql index 16c8dc5f1fadf..d70bd8610cb02 100644 --- a/src/test/regress/sql/partition_prune.sql +++ b/src/test/regress/sql/partition_prune.sql @@ -515,7 +515,7 @@ create index ab_a3_b3_a_idx on ab_a3_b3 (a); set enable_hashjoin = 0; set enable_mergejoin = 0; -set enable_resultcache = 0; +set enable_memoize = 0; select explain_parallel_append('select avg(ab.a) from ab inner join lprt_a a on ab.a = a.a where a.a in(0, 0, 1)'); @@ -534,7 +534,7 @@ select explain_parallel_append('select avg(ab.a) from ab inner join lprt_a a on reset enable_hashjoin; reset enable_mergejoin; -reset enable_resultcache; +reset enable_memoize; reset parallel_setup_cost; reset parallel_tuple_cost; reset min_parallel_table_scan_size; diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 9a0936ead1ecd..b287c29f64671 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -1421,6 +1421,13 @@ Material MaterialPath MaterialState MdfdVec +Memoize +MemoizeEntry +MemoizeInstrumentation +MemoizeKey +MemoizePath +MemoizeState +MemoizeTuple MemoryContext MemoryContextCallback MemoryContextCallbackFunction @@ -2222,13 +2229,6 @@ RestoreOptions RestorePass RestrictInfo Result -ResultCache -ResultCacheEntry -ResultCacheInstrumentation -ResultCacheKey -ResultCachePath -ResultCacheState -ResultCacheTuple ResultRelInfo ResultState ReturnSetInfo @@ -2384,10 +2384,10 @@ SharedInvalSmgrMsg SharedInvalSnapshotMsg SharedInvalidationMessage SharedJitInstrumentation +SharedMemoizeInfo SharedRecordTableEntry SharedRecordTableKey SharedRecordTypmodRegistry -SharedResultCacheInfo SharedSortInfo SharedTuplestore SharedTuplestoreAccessor @@ -3272,6 +3272,8 @@ mbcharacter_incrementer mbdisplaylen_converter mblen_converter mbstr_verifier +memoize_hash +memoize_iterator metastring mix_data_t mixedStruct @@ -3478,8 +3480,6 @@ remoteDep rendezvousHashEntry replace_rte_variables_callback replace_rte_variables_context -resultcache_hash -resultcache_iterator ret_type rewind_source rewrite_event From 6c9c2831668345122fd0f92280b30f3bbe2dd4e6 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 14 Jul 2021 10:37:26 +0900 Subject: [PATCH 654/671] Install properly fe-auth-sasl.h The internals of the frontend-side callbacks for SASL are visible in libpq-int.h, but the header was not getting installed. This would cause compilation failures for applications playing with the internals of libpq. Issue introduced in 9fd8557. Author: Mikhail Kulagin Reviewed-by: Jacob Champion Discussion: https://postgr.es/m/05ce01d777cb$40f31d60$c2d95820$@postgrespro.ru --- src/interfaces/libpq/Makefile | 2 ++ src/tools/msvc/Install.pm | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/interfaces/libpq/Makefile b/src/interfaces/libpq/Makefile index 94c3c73e41062..7cbdeb589bde0 100644 --- a/src/interfaces/libpq/Makefile +++ b/src/interfaces/libpq/Makefile @@ -131,6 +131,7 @@ install: all installdirs install-lib $(INSTALL_DATA) $(srcdir)/libpq-fe.h '$(DESTDIR)$(includedir)' $(INSTALL_DATA) $(srcdir)/libpq-events.h '$(DESTDIR)$(includedir)' $(INSTALL_DATA) $(srcdir)/libpq-int.h '$(DESTDIR)$(includedir_internal)' + $(INSTALL_DATA) $(srcdir)/fe-auth-sasl.h '$(DESTDIR)$(includedir_internal)' $(INSTALL_DATA) $(srcdir)/pqexpbuffer.h '$(DESTDIR)$(includedir_internal)' $(INSTALL_DATA) $(srcdir)/pg_service.conf.sample '$(DESTDIR)$(datadir)/pg_service.conf.sample' @@ -144,6 +145,7 @@ uninstall: uninstall-lib rm -f '$(DESTDIR)$(includedir)/libpq-fe.h' rm -f '$(DESTDIR)$(includedir)/libpq-events.h' rm -f '$(DESTDIR)$(includedir_internal)/libpq-int.h' + rm -f '$(DESTDIR)$(includedir_internal)/fe-auth-sasl.h' rm -f '$(DESTDIR)$(includedir_internal)/pqexpbuffer.h' rm -f '$(DESTDIR)$(datadir)/pg_service.conf.sample' diff --git a/src/tools/msvc/Install.pm b/src/tools/msvc/Install.pm index de22c9ba2c7ca..c932322e3557c 100644 --- a/src/tools/msvc/Install.pm +++ b/src/tools/msvc/Install.pm @@ -633,7 +633,8 @@ sub CopyIncludeFiles CopyFiles( 'Libpq internal headers', $target . '/include/internal/', - 'src/interfaces/libpq/', 'libpq-int.h', 'pqexpbuffer.h'); + 'src/interfaces/libpq/', 'libpq-int.h', 'fe-auth-sasl.h', + 'pqexpbuffer.h'); CopyFiles( 'Internal headers', From a8fd13cab0ba815e9925dc9676e6309f699b5f72 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Wed, 14 Jul 2021 07:33:50 +0530 Subject: [PATCH 655/671] Add support for prepared transactions to built-in logical replication. To add support for streaming transactions at prepare time into the built-in logical replication, we need to do the following things: * Modify the output plugin (pgoutput) to implement the new two-phase API callbacks, by leveraging the extended replication protocol. * Modify the replication apply worker, to properly handle two-phase transactions by replaying them on prepare. * Add a new SUBSCRIPTION option "two_phase" to allow users to enable two-phase transactions. We enable the two_phase once the initial data sync is over. We however must explicitly disable replication of two-phase transactions during replication slot creation, even if the plugin supports it. We don't need to replicate the changes accumulated during this phase, and moreover, we don't have a replication connection open so we don't know where to send the data anyway. The streaming option is not allowed with this new two_phase option. This can be done as a separate patch. We don't allow to toggle two_phase option of a subscription because it can lead to an inconsistent replica. For the same reason, we don't allow to refresh the publication once the two_phase is enabled for a subscription unless copy_data option is false. Author: Peter Smith, Ajin Cherian and Amit Kapila based on previous work by Nikhil Sontakke and Stas Kelvich Reviewed-by: Amit Kapila, Sawada Masahiko, Vignesh C, Dilip Kumar, Takamichi Osumi, Greg Nancarrow Tested-By: Haiying Tang Discussion: https://postgr.es/m/02DA5F5E-CECE-4D9C-8B4B-418077E2C010@postgrespro.ru Discussion: https://postgr.es/m/CAA4eK1+opiV4aFTmWWUF9h_32=HfPOW9vZASHarT0UA5oBrtGw@mail.gmail.com --- contrib/test_decoding/test_decoding.c | 12 +- doc/src/sgml/catalogs.sgml | 12 + doc/src/sgml/protocol.sgml | 291 +++++++++++++- doc/src/sgml/ref/alter_subscription.sgml | 5 + doc/src/sgml/ref/create_subscription.sgml | 37 ++ doc/src/sgml/ref/pg_dump.sgml | 7 +- src/backend/access/transam/twophase.c | 68 ++++ src/backend/catalog/pg_subscription.c | 34 ++ src/backend/catalog/system_views.sql | 2 +- src/backend/commands/subscriptioncmds.c | 131 ++++++- .../libpqwalreceiver/libpqwalreceiver.c | 10 +- src/backend/replication/logical/decode.c | 11 +- src/backend/replication/logical/logical.c | 31 +- src/backend/replication/logical/origin.c | 7 +- src/backend/replication/logical/proto.c | 217 ++++++++++- .../replication/logical/reorderbuffer.c | 25 +- src/backend/replication/logical/snapbuild.c | 33 +- src/backend/replication/logical/tablesync.c | 197 ++++++++-- src/backend/replication/logical/worker.c | 347 ++++++++++++++++- src/backend/replication/pgoutput/pgoutput.c | 201 ++++++++-- src/backend/replication/slot.c | 1 + src/backend/replication/walreceiver.c | 2 +- src/bin/pg_dump/pg_dump.c | 20 +- src/bin/pg_dump/pg_dump.h | 1 + src/bin/psql/describe.c | 8 +- src/bin/psql/tab-complete.c | 2 +- src/include/access/twophase.h | 2 + src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_subscription.h | 11 + src/include/catalog/pg_subscription_rel.h | 1 + src/include/replication/logical.h | 10 + src/include/replication/logicalproto.h | 73 +++- src/include/replication/pgoutput.h | 1 + src/include/replication/reorderbuffer.h | 8 +- src/include/replication/slot.h | 7 +- src/include/replication/snapbuild.h | 5 +- src/include/replication/walreceiver.h | 7 +- src/include/replication/worker_internal.h | 3 + src/test/regress/expected/subscription.out | 109 ++++-- src/test/regress/sql/subscription.sql | 25 ++ src/test/subscription/t/021_twophase.pl | 359 ++++++++++++++++++ .../subscription/t/022_twophase_cascade.pl | 235 ++++++++++++ src/tools/pgindent/typedefs.list | 3 + 43 files changed, 2382 insertions(+), 191 deletions(-) create mode 100644 src/test/subscription/t/021_twophase.pl create mode 100644 src/test/subscription/t/022_twophase_cascade.pl diff --git a/contrib/test_decoding/test_decoding.c b/contrib/test_decoding/test_decoding.c index de1b692658114..e5cd84e85e414 100644 --- a/contrib/test_decoding/test_decoding.c +++ b/contrib/test_decoding/test_decoding.c @@ -339,7 +339,7 @@ pg_decode_commit_txn(LogicalDecodingContext *ctx, ReorderBufferTXN *txn, if (data->include_timestamp) appendStringInfo(ctx->out, " (at %s)", - timestamptz_to_str(txn->commit_time)); + timestamptz_to_str(txn->xact_time.commit_time)); OutputPluginWrite(ctx, true); } @@ -382,7 +382,7 @@ pg_decode_prepare_txn(LogicalDecodingContext *ctx, ReorderBufferTXN *txn, if (data->include_timestamp) appendStringInfo(ctx->out, " (at %s)", - timestamptz_to_str(txn->commit_time)); + timestamptz_to_str(txn->xact_time.prepare_time)); OutputPluginWrite(ctx, true); } @@ -404,7 +404,7 @@ pg_decode_commit_prepared_txn(LogicalDecodingContext *ctx, ReorderBufferTXN *txn if (data->include_timestamp) appendStringInfo(ctx->out, " (at %s)", - timestamptz_to_str(txn->commit_time)); + timestamptz_to_str(txn->xact_time.commit_time)); OutputPluginWrite(ctx, true); } @@ -428,7 +428,7 @@ pg_decode_rollback_prepared_txn(LogicalDecodingContext *ctx, if (data->include_timestamp) appendStringInfo(ctx->out, " (at %s)", - timestamptz_to_str(txn->commit_time)); + timestamptz_to_str(txn->xact_time.commit_time)); OutputPluginWrite(ctx, true); } @@ -853,7 +853,7 @@ pg_decode_stream_prepare(LogicalDecodingContext *ctx, if (data->include_timestamp) appendStringInfo(ctx->out, " (at %s)", - timestamptz_to_str(txn->commit_time)); + timestamptz_to_str(txn->xact_time.prepare_time)); OutputPluginWrite(ctx, true); } @@ -882,7 +882,7 @@ pg_decode_stream_commit(LogicalDecodingContext *ctx, if (data->include_timestamp) appendStringInfo(ctx->out, " (at %s)", - timestamptz_to_str(txn->commit_time)); + timestamptz_to_str(txn->xact_time.commit_time)); OutputPluginWrite(ctx, true); } diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index f517a7d4aff23..0f5d25b948a3f 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -7641,6 +7641,18 @@ SCRAM-SHA-256$<iteration count>:&l + + + subtwophasestate char + + + State codes for two-phase mode: + d = disabled, + p = pending enablement, + e = enabled + + + subconninfo text diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index a3562f3d0891d..e8cb78ff1f377 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -2811,11 +2811,17 @@ The commands accepted in replication mode are: - Protocol version. Currently versions 1 and - 2 are supported. The version 2 - is supported only for server version 14 and above, and it allows - streaming of large in-progress transactions. - + Protocol version. Currently versions 1, 2, + and 3 are supported. + + + Version 2 is supported only for server version 14 + and above, and it allows streaming of large in-progress transactions. + + + Version 3 is supported only for server version 15 + and above, and it allows streaming of two-phase transactions. + @@ -2871,10 +2877,11 @@ The commands accepted in replication mode are: The logical replication protocol sends individual transactions one by one. This means that all messages between a pair of Begin and Commit messages - belong to the same transaction. It also sends changes of large in-progress - transactions between a pair of Stream Start and Stream Stop messages. The - last stream of such a transaction contains Stream Commit or Stream Abort - message. + belong to the same transaction. Similarly, all messages between a pair of + Begin Prepare and Prepare messages belong to the same transaction. + It also sends changes of large in-progress transactions between a pair of + Stream Start and Stream Stop messages. The last stream of such a transaction + contains a Stream Commit or Stream Abort message. @@ -7390,6 +7397,272 @@ Stream Abort + +The following messages (Begin Prepare, Prepare, Commit Prepared, Rollback Prepared) +are available since protocol version 3. + + + + + + +Begin Prepare + + + + + + +Byte1('b') + + Identifies the message as the beginning of a two-phase transaction message. + + + + +Int64 + + The LSN of the prepare. + + + + +Int64 + + The end LSN of the prepared transaction. + + + + +Int64 + + Prepare timestamp of the transaction. The value is in number + of microseconds since PostgreSQL epoch (2000-01-01). + + + + +Int32 + + Xid of the transaction. + + + + +String + + The user defined GID of the two-phase transaction. + + + + + + + + + + + +Prepare + + + + + + +Byte1('P') + + Identifies the message as a two-phase prepared transaction message. + + + + +Int8 + + Flags; currently unused (must be 0). + + + + +Int64 + + The LSN of the prepare. + + + + +Int64 + + The end LSN of the prepared transaction. + + + + +Int64 + + Prepare timestamp of the transaction. The value is in number + of microseconds since PostgreSQL epoch (2000-01-01). + + + + +Int32 + + Xid of the transaction. + + + + +String + + The user defined GID of the two-phase transaction. + + + + + + + + + + + +Commit Prepared + + + + + + +Byte1('K') + + Identifies the message as the commit of a two-phase transaction message. + + + + +Int8 + + Flags; currently unused (must be 0). + + + + +Int64 + + The LSN of the commit prepared. + + + + +Int64 + + The end LSN of the commit prepared transaction. + + + + +Int64 + + Commit timestamp of the transaction. The value is in number + of microseconds since PostgreSQL epoch (2000-01-01). + + + + +Int32 + + Xid of the transaction. + + + + +String + + The user defined GID of the two-phase transaction. + + + + + + + + + + + +Rollback Prepared + + + + + + +Byte1('r') + + Identifies the message as the rollback of a two-phase transaction message. + + + + +Int8 + + Flags; currently unused (must be 0). + + + + +Int64 + + The end LSN of the prepared transaction. + + + + +Int64 + + The end LSN of the rollback prepared transaction. + + + + +Int64 + + Prepare timestamp of the transaction. The value is in number + of microseconds since PostgreSQL epoch (2000-01-01). + + + + +Int64 + + Rollback timestamp of the transaction. The value is in number + of microseconds since PostgreSQL epoch (2000-01-01). + + + + +Int32 + + Xid of the transaction. + + + + +String + + The user defined GID of the two-phase transaction. + + + + + + + + + + + The following message parts are shared by the above messages. diff --git a/doc/src/sgml/ref/alter_subscription.sgml b/doc/src/sgml/ref/alter_subscription.sgml index b3d173179f4cb..a6f994450dc75 100644 --- a/doc/src/sgml/ref/alter_subscription.sgml +++ b/doc/src/sgml/ref/alter_subscription.sgml @@ -67,6 +67,11 @@ ALTER SUBSCRIPTION name RENAME TO < Commands ALTER SUBSCRIPTION ... REFRESH PUBLICATION and ALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ... with refresh option as true cannot be executed inside a transaction block. + + These commands also cannot be executed when the subscription has + two_phase commit enabled, unless copy_data = false. + See column subtwophasestate of + to know the actual two-phase state. diff --git a/doc/src/sgml/ref/create_subscription.sgml b/doc/src/sgml/ref/create_subscription.sgml index e812beee3738f..143390593d0d6 100644 --- a/doc/src/sgml/ref/create_subscription.sgml +++ b/doc/src/sgml/ref/create_subscription.sgml @@ -237,6 +237,43 @@ CREATE SUBSCRIPTION subscription_name + + + The streaming option cannot be used with the + two_phase option. + + + + + + two_phase (boolean) + + + Specifies whether two-phase commit is enabled for this subscription. + The default is false. + + + + When two-phase commit is enabled then the decoded transactions are sent + to the subscriber on the PREPARE TRANSACTION. By default, the transaction + prepared on the publisher is decoded as a normal transaction at commit. + + + + The two-phase commit implementation requires that the replication has + successfully passed the initial table synchronization phase. This means + even when two_phase is enabled for the subscription, the internal + two-phase state remains temporarily "pending" until the initialization + phase is completed. See column + subtwophasestate of + to know the actual two-phase state. + + + + The two_phase option cannot be used with the + streaming option. + + diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml index a6c0788592b06..7682226b9914c 100644 --- a/doc/src/sgml/ref/pg_dump.sgml +++ b/doc/src/sgml/ref/pg_dump.sgml @@ -1405,7 +1405,12 @@ CREATE DATABASE foo WITH TEMPLATE template0; servers. It is then up to the user to reactivate the subscriptions in a suitable way. If the involved hosts have changed, the connection information might have to be changed. It might also be appropriate to - truncate the target tables before initiating a new full table copy. + truncate the target tables before initiating a new full table copy. If users + intend to copy initial data during refresh they must create the slot with + two_phase = false. After the initial sync, the + two_phase option will be automatically enabled by the + subscriber if the subscription had been originally created with + two_phase = true option. diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index f67d813c56493..6d3efb49a40a0 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -2458,3 +2458,71 @@ PrepareRedoRemove(TransactionId xid, bool giveWarning) RemoveTwoPhaseFile(xid, giveWarning); RemoveGXact(gxact); } + +/* + * LookupGXact + * Check if the prepared transaction with the given GID, lsn and timestamp + * exists. + * + * Note that we always compare with the LSN where prepare ends because that is + * what is stored as origin_lsn in the 2PC file. + * + * This function is primarily used to check if the prepared transaction + * received from the upstream (remote node) already exists. Checking only GID + * is not sufficient because a different prepared xact with the same GID can + * exist on the same node. So, we are ensuring to match origin_lsn and + * origin_timestamp of prepared xact to avoid the possibility of a match of + * prepared xact from two different nodes. + */ +bool +LookupGXact(const char *gid, XLogRecPtr prepare_end_lsn, + TimestampTz origin_prepare_timestamp) +{ + int i; + bool found = false; + + LWLockAcquire(TwoPhaseStateLock, LW_SHARED); + for (i = 0; i < TwoPhaseState->numPrepXacts; i++) + { + GlobalTransaction gxact = TwoPhaseState->prepXacts[i]; + + /* Ignore not-yet-valid GIDs. */ + if (gxact->valid && strcmp(gxact->gid, gid) == 0) + { + char *buf; + TwoPhaseFileHeader *hdr; + + /* + * We are not expecting collisions of GXACTs (same gid) between + * publisher and subscribers, so we perform all I/O while holding + * TwoPhaseStateLock for simplicity. + * + * To move the I/O out of the lock, we need to ensure that no + * other backend commits the prepared xact in the meantime. We can + * do this optimization if we encounter many collisions in GID + * between publisher and subscriber. + */ + if (gxact->ondisk) + buf = ReadTwoPhaseFile(gxact->xid, false); + else + { + Assert(gxact->prepare_start_lsn); + XlogReadTwoPhaseData(gxact->prepare_start_lsn, &buf, NULL); + } + + hdr = (TwoPhaseFileHeader *) buf; + + if (hdr->origin_lsn == prepare_end_lsn && + hdr->origin_timestamp == origin_prepare_timestamp) + { + found = true; + pfree(buf); + break; + } + + pfree(buf); + } + } + LWLockRelease(TwoPhaseStateLock); + return found; +} diff --git a/src/backend/catalog/pg_subscription.c b/src/backend/catalog/pg_subscription.c index 29fc4218cd4bb..25021e25a4ca4 100644 --- a/src/backend/catalog/pg_subscription.c +++ b/src/backend/catalog/pg_subscription.c @@ -68,6 +68,7 @@ GetSubscription(Oid subid, bool missing_ok) sub->enabled = subform->subenabled; sub->binary = subform->subbinary; sub->stream = subform->substream; + sub->twophasestate = subform->subtwophasestate; /* Get conninfo */ datum = SysCacheGetAttr(SUBSCRIPTIONOID, @@ -450,6 +451,39 @@ RemoveSubscriptionRel(Oid subid, Oid relid) table_close(rel, RowExclusiveLock); } +/* + * Does the subscription have any relations? + * + * Use this function only to know true/false, and when you have no need for the + * List returned by GetSubscriptionRelations. + */ +bool +HasSubscriptionRelations(Oid subid) +{ + Relation rel; + ScanKeyData skey[1]; + SysScanDesc scan; + bool has_subrels; + + rel = table_open(SubscriptionRelRelationId, AccessShareLock); + + ScanKeyInit(&skey[0], + Anum_pg_subscription_rel_srsubid, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(subid)); + + scan = systable_beginscan(rel, InvalidOid, false, + NULL, 1, skey); + + /* If even a single tuple exists then the subscription has tables. */ + has_subrels = HeapTupleIsValid(systable_getnext(scan)); + + /* Cleanup */ + systable_endscan(scan); + table_close(rel, AccessShareLock); + + return has_subrels; +} /* * Get all relations for subscription. diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 999d9840683f6..55f6e3711d844 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -1255,5 +1255,5 @@ REVOKE ALL ON pg_replication_origin_status FROM public; -- All columns of pg_subscription except subconninfo are publicly readable. REVOKE ALL ON pg_subscription FROM public; GRANT SELECT (oid, subdbid, subname, subowner, subenabled, subbinary, - substream, subslotname, subsynccommit, subpublications) + substream, subtwophasestate, subslotname, subsynccommit, subpublications) ON pg_subscription TO public; diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index eb88d877a5032..5f834a9c300fe 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -59,6 +59,7 @@ #define SUBOPT_REFRESH 0x00000040 #define SUBOPT_BINARY 0x00000080 #define SUBOPT_STREAMING 0x00000100 +#define SUBOPT_TWOPHASE_COMMIT 0x00000200 /* check if the 'val' has 'bits' set */ #define IsSet(val, bits) (((val) & (bits)) == (bits)) @@ -79,6 +80,7 @@ typedef struct SubOpts bool refresh; bool binary; bool streaming; + bool twophase; } SubOpts; static List *fetch_table_list(WalReceiverConn *wrconn, List *publications); @@ -123,6 +125,8 @@ parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *o opts->binary = false; if (IsSet(supported_opts, SUBOPT_STREAMING)) opts->streaming = false; + if (IsSet(supported_opts, SUBOPT_TWOPHASE_COMMIT)) + opts->twophase = false; /* Parse options */ foreach(lc, stmt_options) @@ -237,6 +241,29 @@ parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *o opts->specified_opts |= SUBOPT_STREAMING; opts->streaming = defGetBoolean(defel); } + else if (strcmp(defel->defname, "two_phase") == 0) + { + /* + * Do not allow toggling of two_phase option. Doing so could cause + * missing of transactions and lead to an inconsistent replica. + * See comments atop worker.c + * + * Note: Unsupported twophase indicates that this call originated + * from AlterSubscription. + */ + if (!IsSet(supported_opts, SUBOPT_TWOPHASE_COMMIT)) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("unrecognized subscription parameter: \"%s\"", defel->defname))); + + if (IsSet(opts->specified_opts, SUBOPT_TWOPHASE_COMMIT)) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("conflicting or redundant options"))); + + opts->specified_opts |= SUBOPT_TWOPHASE_COMMIT; + opts->twophase = defGetBoolean(defel); + } else ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), @@ -325,6 +352,25 @@ parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *o errmsg("subscription with %s must also set %s", "slot_name = NONE", "create_slot = false"))); } + + /* + * Do additional checking for the disallowed combination of two_phase and + * streaming. While streaming and two_phase can theoretically be + * supported, it needs more analysis to allow them together. + */ + if (opts->twophase && + IsSet(supported_opts, SUBOPT_TWOPHASE_COMMIT) && + IsSet(opts->specified_opts, SUBOPT_TWOPHASE_COMMIT)) + { + if (opts->streaming && + IsSet(supported_opts, SUBOPT_STREAMING) && + IsSet(opts->specified_opts, SUBOPT_STREAMING)) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + /*- translator: both %s are strings of the form "option = value" */ + errmsg("%s and %s are mutually exclusive options", + "two_phase = true", "streaming = true"))); + } } /* @@ -385,7 +431,7 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) supported_opts = (SUBOPT_CONNECT | SUBOPT_ENABLED | SUBOPT_CREATE_SLOT | SUBOPT_SLOT_NAME | SUBOPT_COPY_DATA | SUBOPT_SYNCHRONOUS_COMMIT | SUBOPT_BINARY | - SUBOPT_STREAMING); + SUBOPT_STREAMING | SUBOPT_TWOPHASE_COMMIT); parse_subscription_options(stmt->options, supported_opts, &opts); /* @@ -455,6 +501,10 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) values[Anum_pg_subscription_subenabled - 1] = BoolGetDatum(opts.enabled); values[Anum_pg_subscription_subbinary - 1] = BoolGetDatum(opts.binary); values[Anum_pg_subscription_substream - 1] = BoolGetDatum(opts.streaming); + values[Anum_pg_subscription_subtwophasestate - 1] = + CharGetDatum(opts.twophase ? + LOGICALREP_TWOPHASE_STATE_PENDING : + LOGICALREP_TWOPHASE_STATE_DISABLED); values[Anum_pg_subscription_subconninfo - 1] = CStringGetTextDatum(conninfo); if (opts.slot_name) @@ -532,10 +582,35 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) */ if (opts.create_slot) { + bool twophase_enabled = false; + Assert(opts.slot_name); - walrcv_create_slot(wrconn, opts.slot_name, false, + /* + * Even if two_phase is set, don't create the slot with + * two-phase enabled. Will enable it once all the tables are + * synced and ready. This avoids race-conditions like prepared + * transactions being skipped due to changes not being applied + * due to checks in should_apply_changes_for_rel() when + * tablesync for the corresponding tables are in progress. See + * comments atop worker.c. + * + * Note that if tables were specified but copy_data is false + * then it is safe to enable two_phase up-front because those + * tables are already initially in READY state. When the + * subscription has no tables, we leave the twophase state as + * PENDING, to allow ALTER SUBSCRIPTION ... REFRESH + * PUBLICATION to work. + */ + if (opts.twophase && !opts.copy_data && tables != NIL) + twophase_enabled = true; + + walrcv_create_slot(wrconn, opts.slot_name, false, twophase_enabled, CRS_NOEXPORT_SNAPSHOT, NULL); + + if (twophase_enabled) + UpdateTwoPhaseState(subid, LOGICALREP_TWOPHASE_STATE_ENABLED); + ereport(NOTICE, (errmsg("created replication slot \"%s\" on publisher", opts.slot_name))); @@ -865,6 +940,12 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) if (IsSet(opts.specified_opts, SUBOPT_STREAMING)) { + if ((sub->twophasestate != LOGICALREP_TWOPHASE_STATE_DISABLED) && opts.streaming) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("cannot set %s for two-phase enabled subscription", + "streaming = true"))); + values[Anum_pg_subscription_substream - 1] = BoolGetDatum(opts.streaming); replaces[Anum_pg_subscription_substream - 1] = true; @@ -927,6 +1008,17 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) errmsg("ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions"), errhint("Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)."))); + /* + * See ALTER_SUBSCRIPTION_REFRESH for details why this is + * not allowed. + */ + if (sub->twophasestate == LOGICALREP_TWOPHASE_STATE_ENABLED && opts.copy_data) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("ALTER SUBSCRIPTION with refresh and copy_data is not allowed when two_phase is enabled"), + errhint("Use ALTER SUBSCRIPTION ...SET PUBLICATION with refresh = false, or with copy_data = false" + ", or use DROP/CREATE SUBSCRIPTION."))); + PreventInTransactionBlock(isTopLevel, "ALTER SUBSCRIPTION with refresh"); /* Make sure refresh sees the new list of publications. */ @@ -966,6 +1058,17 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) errmsg("ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions"), errhint("Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)."))); + /* + * See ALTER_SUBSCRIPTION_REFRESH for details why this is + * not allowed. + */ + if (sub->twophasestate == LOGICALREP_TWOPHASE_STATE_ENABLED && opts.copy_data) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("ALTER SUBSCRIPTION with refresh and copy_data is not allowed when two_phase is enabled"), + errhint("Use ALTER SUBSCRIPTION ...SET PUBLICATION with refresh = false, or with copy_data = false" + ", or use DROP/CREATE SUBSCRIPTION."))); + PreventInTransactionBlock(isTopLevel, "ALTER SUBSCRIPTION with refresh"); /* Only refresh the added/dropped list of publications. */ @@ -986,6 +1089,30 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) parse_subscription_options(stmt->options, SUBOPT_COPY_DATA, &opts); + /* + * The subscription option "two_phase" requires that + * replication has passed the initial table synchronization + * phase before the two_phase becomes properly enabled. + * + * But, having reached this two-phase commit "enabled" state + * we must not allow any subsequent table initialization to + * occur. So the ALTER SUBSCRIPTION ... REFRESH is disallowed + * when the user had requested two_phase = on mode. + * + * The exception to this restriction is when copy_data = + * false, because when copy_data is false the tablesync will + * start already in READY state and will exit directly without + * doing anything. + * + * For more details see comments atop worker.c. + */ + if (sub->twophasestate == LOGICALREP_TWOPHASE_STATE_ENABLED && opts.copy_data) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("ALTER SUBSCRIPTION ... REFRESH with copy_data is not allowed when two_phase is enabled"), + errhint("Use ALTER SUBSCRIPTION ... REFRESH with copy_data = false" + ", or use DROP/CREATE SUBSCRIPTION."))); + PreventInTransactionBlock(isTopLevel, "ALTER SUBSCRIPTION ... REFRESH"); AlterSubscription_refresh(sub, opts.copy_data); diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c index 6eaa84a0315a2..19ea159af4fb1 100644 --- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c +++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c @@ -73,6 +73,7 @@ static void libpqrcv_send(WalReceiverConn *conn, const char *buffer, static char *libpqrcv_create_slot(WalReceiverConn *conn, const char *slotname, bool temporary, + bool two_phase, CRSSnapshotAction snapshot_action, XLogRecPtr *lsn); static pid_t libpqrcv_get_backend_pid(WalReceiverConn *conn); @@ -436,6 +437,10 @@ libpqrcv_startstreaming(WalReceiverConn *conn, PQserverVersion(conn->streamConn) >= 140000) appendStringInfoString(&cmd, ", streaming 'on'"); + if (options->proto.logical.twophase && + PQserverVersion(conn->streamConn) >= 150000) + appendStringInfoString(&cmd, ", two_phase 'on'"); + pubnames = options->proto.logical.publication_names; pubnames_str = stringlist_to_identifierstr(conn->streamConn, pubnames); if (!pubnames_str) @@ -851,7 +856,7 @@ libpqrcv_send(WalReceiverConn *conn, const char *buffer, int nbytes) */ static char * libpqrcv_create_slot(WalReceiverConn *conn, const char *slotname, - bool temporary, CRSSnapshotAction snapshot_action, + bool temporary, bool two_phase, CRSSnapshotAction snapshot_action, XLogRecPtr *lsn) { PGresult *res; @@ -868,6 +873,9 @@ libpqrcv_create_slot(WalReceiverConn *conn, const char *slotname, if (conn->logical) { appendStringInfoString(&cmd, " LOGICAL pgoutput"); + if (two_phase) + appendStringInfoString(&cmd, " TWO_PHASE"); + switch (snapshot_action) { case CRS_EXPORT_SNAPSHOT: diff --git a/src/backend/replication/logical/decode.c b/src/backend/replication/logical/decode.c index 453efc51e1625..2874dc0612221 100644 --- a/src/backend/replication/logical/decode.c +++ b/src/backend/replication/logical/decode.c @@ -374,11 +374,10 @@ DecodeXactOp(LogicalDecodingContext *ctx, XLogRecordBuffer *buf) * * XXX Now, this can even lead to a deadlock if the prepare * transaction is waiting to get it logically replicated for - * distributed 2PC. Currently, we don't have an in-core - * implementation of prepares for distributed 2PC but some - * out-of-core logical replication solution can have such an - * implementation. They need to inform users to not have locks - * on catalog tables in such transactions. + * distributed 2PC. This can be avoided by disallowing + * preparing transactions that have locked [user] catalog + * tables exclusively but as of now, we ask users not to do + * such an operation. */ DecodePrepare(ctx, buf, &parsed); break; @@ -735,7 +734,7 @@ DecodeCommit(LogicalDecodingContext *ctx, XLogRecordBuffer *buf, if (two_phase) { ReorderBufferFinishPrepared(ctx->reorder, xid, buf->origptr, buf->endptr, - SnapBuildInitialConsistentPoint(ctx->snapshot_builder), + SnapBuildGetTwoPhaseAt(ctx->snapshot_builder), commit_time, origin_id, origin_lsn, parsed->twophase_gid, true); } diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index d536a5f3ba3b5..d61ef4cfada78 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -207,7 +207,7 @@ StartupDecodingContext(List *output_plugin_options, ctx->reorder = ReorderBufferAllocate(); ctx->snapshot_builder = AllocateSnapshotBuilder(ctx->reorder, xmin_horizon, start_lsn, - need_full_snapshot, slot->data.initial_consistent_point); + need_full_snapshot, slot->data.two_phase_at); ctx->reorder->private_data = ctx; @@ -432,10 +432,12 @@ CreateInitDecodingContext(const char *plugin, MemoryContextSwitchTo(old_context); /* - * We allow decoding of prepared transactions iff the two_phase option is - * enabled at the time of slot creation. + * We allow decoding of prepared transactions when the two_phase is + * enabled at the time of slot creation, or when the two_phase option is + * given at the streaming start, provided the plugin supports all the + * callbacks for two-phase. */ - ctx->twophase &= MyReplicationSlot->data.two_phase; + ctx->twophase &= slot->data.two_phase; ctx->reorder->output_rewrites = ctx->options.receive_rewrites; @@ -538,10 +540,22 @@ CreateDecodingContext(XLogRecPtr start_lsn, MemoryContextSwitchTo(old_context); /* - * We allow decoding of prepared transactions iff the two_phase option is - * enabled at the time of slot creation. + * We allow decoding of prepared transactions when the two_phase is + * enabled at the time of slot creation, or when the two_phase option is + * given at the streaming start, provided the plugin supports all the + * callbacks for two-phase. */ - ctx->twophase &= MyReplicationSlot->data.two_phase; + ctx->twophase &= (slot->data.two_phase || ctx->twophase_opt_given); + + /* Mark slot to allow two_phase decoding if not already marked */ + if (ctx->twophase && !slot->data.two_phase) + { + slot->data.two_phase = true; + slot->data.two_phase_at = start_lsn; + ReplicationSlotMarkDirty(); + ReplicationSlotSave(); + SnapBuildSetTwoPhaseAt(ctx->snapshot_builder, start_lsn); + } ctx->reorder->output_rewrites = ctx->options.receive_rewrites; @@ -602,7 +616,8 @@ DecodingContextFindStartpoint(LogicalDecodingContext *ctx) SpinLockAcquire(&slot->mutex); slot->data.confirmed_flush = ctx->reader->EndRecPtr; - slot->data.initial_consistent_point = ctx->reader->EndRecPtr; + if (slot->data.two_phase) + slot->data.two_phase_at = ctx->reader->EndRecPtr; SpinLockRelease(&slot->mutex); } diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c index cb42fcb34d120..2c191dec04503 100644 --- a/src/backend/replication/logical/origin.c +++ b/src/backend/replication/logical/origin.c @@ -973,8 +973,11 @@ replorigin_advance(RepOriginId node, /* * Due to - harmless - race conditions during a checkpoint we could see - * values here that are older than the ones we already have in memory. - * Don't overwrite those. + * values here that are older than the ones we already have in memory. We + * could also see older values for prepared transactions when the prepare + * is sent at a later point of time along with commit prepared and there + * are other transactions commits between prepare and commit prepared. See + * ReorderBufferFinishPrepared. Don't overwrite those. */ if (go_backward || replication_state->remote_lsn < remote_commit) replication_state->remote_lsn = remote_commit; diff --git a/src/backend/replication/logical/proto.c b/src/backend/replication/logical/proto.c index 1cf59e0fb0fae..13c8c3bd5bbdf 100644 --- a/src/backend/replication/logical/proto.c +++ b/src/backend/replication/logical/proto.c @@ -49,7 +49,7 @@ logicalrep_write_begin(StringInfo out, ReorderBufferTXN *txn) /* fixed fields */ pq_sendint64(out, txn->final_lsn); - pq_sendint64(out, txn->commit_time); + pq_sendint64(out, txn->xact_time.commit_time); pq_sendint32(out, txn->xid); } @@ -85,7 +85,7 @@ logicalrep_write_commit(StringInfo out, ReorderBufferTXN *txn, /* send fields */ pq_sendint64(out, commit_lsn); pq_sendint64(out, txn->end_lsn); - pq_sendint64(out, txn->commit_time); + pq_sendint64(out, txn->xact_time.commit_time); } /* @@ -106,6 +106,217 @@ logicalrep_read_commit(StringInfo in, LogicalRepCommitData *commit_data) commit_data->committime = pq_getmsgint64(in); } +/* + * Write BEGIN PREPARE to the output stream. + */ +void +logicalrep_write_begin_prepare(StringInfo out, ReorderBufferTXN *txn) +{ + pq_sendbyte(out, LOGICAL_REP_MSG_BEGIN_PREPARE); + + /* fixed fields */ + pq_sendint64(out, txn->final_lsn); + pq_sendint64(out, txn->end_lsn); + pq_sendint64(out, txn->xact_time.prepare_time); + pq_sendint32(out, txn->xid); + + /* send gid */ + pq_sendstring(out, txn->gid); +} + +/* + * Read transaction BEGIN PREPARE from the stream. + */ +void +logicalrep_read_begin_prepare(StringInfo in, LogicalRepPreparedTxnData *begin_data) +{ + /* read fields */ + begin_data->prepare_lsn = pq_getmsgint64(in); + if (begin_data->prepare_lsn == InvalidXLogRecPtr) + elog(ERROR, "prepare_lsn not set in begin prepare message"); + begin_data->end_lsn = pq_getmsgint64(in); + if (begin_data->end_lsn == InvalidXLogRecPtr) + elog(ERROR, "end_lsn not set in begin prepare message"); + begin_data->prepare_time = pq_getmsgint64(in); + begin_data->xid = pq_getmsgint(in, 4); + + /* read gid (copy it into a pre-allocated buffer) */ + strcpy(begin_data->gid, pq_getmsgstring(in)); +} + +/* + * Write PREPARE to the output stream. + */ +void +logicalrep_write_prepare(StringInfo out, ReorderBufferTXN *txn, + XLogRecPtr prepare_lsn) +{ + uint8 flags = 0; + + pq_sendbyte(out, LOGICAL_REP_MSG_PREPARE); + + /* + * This should only ever happen for two-phase commit transactions, in + * which case we expect to have a valid GID. + */ + Assert(txn->gid != NULL); + Assert(rbtxn_prepared(txn)); + + /* send the flags field */ + pq_sendbyte(out, flags); + + /* send fields */ + pq_sendint64(out, prepare_lsn); + pq_sendint64(out, txn->end_lsn); + pq_sendint64(out, txn->xact_time.prepare_time); + pq_sendint32(out, txn->xid); + + /* send gid */ + pq_sendstring(out, txn->gid); +} + +/* + * Read transaction PREPARE from the stream. + */ +void +logicalrep_read_prepare(StringInfo in, LogicalRepPreparedTxnData *prepare_data) +{ + /* read flags */ + uint8 flags = pq_getmsgbyte(in); + + if (flags != 0) + elog(ERROR, "unrecognized flags %u in prepare message", flags); + + /* read fields */ + prepare_data->prepare_lsn = pq_getmsgint64(in); + if (prepare_data->prepare_lsn == InvalidXLogRecPtr) + elog(ERROR, "prepare_lsn is not set in prepare message"); + prepare_data->end_lsn = pq_getmsgint64(in); + if (prepare_data->end_lsn == InvalidXLogRecPtr) + elog(ERROR, "end_lsn is not set in prepare message"); + prepare_data->prepare_time = pq_getmsgint64(in); + prepare_data->xid = pq_getmsgint(in, 4); + + /* read gid (copy it into a pre-allocated buffer) */ + strcpy(prepare_data->gid, pq_getmsgstring(in)); +} + +/* + * Write COMMIT PREPARED to the output stream. + */ +void +logicalrep_write_commit_prepared(StringInfo out, ReorderBufferTXN *txn, + XLogRecPtr commit_lsn) +{ + uint8 flags = 0; + + pq_sendbyte(out, LOGICAL_REP_MSG_COMMIT_PREPARED); + + /* + * This should only ever happen for two-phase commit transactions, in + * which case we expect to have a valid GID. + */ + Assert(txn->gid != NULL); + + /* send the flags field */ + pq_sendbyte(out, flags); + + /* send fields */ + pq_sendint64(out, commit_lsn); + pq_sendint64(out, txn->end_lsn); + pq_sendint64(out, txn->xact_time.commit_time); + pq_sendint32(out, txn->xid); + + /* send gid */ + pq_sendstring(out, txn->gid); +} + +/* + * Read transaction COMMIT PREPARED from the stream. + */ +void +logicalrep_read_commit_prepared(StringInfo in, LogicalRepCommitPreparedTxnData *prepare_data) +{ + /* read flags */ + uint8 flags = pq_getmsgbyte(in); + + if (flags != 0) + elog(ERROR, "unrecognized flags %u in commit prepared message", flags); + + /* read fields */ + prepare_data->commit_lsn = pq_getmsgint64(in); + if (prepare_data->commit_lsn == InvalidXLogRecPtr) + elog(ERROR, "commit_lsn is not set in commit prepared message"); + prepare_data->end_lsn = pq_getmsgint64(in); + if (prepare_data->end_lsn == InvalidXLogRecPtr) + elog(ERROR, "end_lsn is not set in commit prepared message"); + prepare_data->commit_time = pq_getmsgint64(in); + prepare_data->xid = pq_getmsgint(in, 4); + + /* read gid (copy it into a pre-allocated buffer) */ + strcpy(prepare_data->gid, pq_getmsgstring(in)); +} + +/* + * Write ROLLBACK PREPARED to the output stream. + */ +void +logicalrep_write_rollback_prepared(StringInfo out, ReorderBufferTXN *txn, + XLogRecPtr prepare_end_lsn, + TimestampTz prepare_time) +{ + uint8 flags = 0; + + pq_sendbyte(out, LOGICAL_REP_MSG_ROLLBACK_PREPARED); + + /* + * This should only ever happen for two-phase commit transactions, in + * which case we expect to have a valid GID. + */ + Assert(txn->gid != NULL); + + /* send the flags field */ + pq_sendbyte(out, flags); + + /* send fields */ + pq_sendint64(out, prepare_end_lsn); + pq_sendint64(out, txn->end_lsn); + pq_sendint64(out, prepare_time); + pq_sendint64(out, txn->xact_time.commit_time); + pq_sendint32(out, txn->xid); + + /* send gid */ + pq_sendstring(out, txn->gid); +} + +/* + * Read transaction ROLLBACK PREPARED from the stream. + */ +void +logicalrep_read_rollback_prepared(StringInfo in, + LogicalRepRollbackPreparedTxnData *rollback_data) +{ + /* read flags */ + uint8 flags = pq_getmsgbyte(in); + + if (flags != 0) + elog(ERROR, "unrecognized flags %u in rollback prepared message", flags); + + /* read fields */ + rollback_data->prepare_end_lsn = pq_getmsgint64(in); + if (rollback_data->prepare_end_lsn == InvalidXLogRecPtr) + elog(ERROR, "prepare_end_lsn is not set in rollback prepared message"); + rollback_data->rollback_end_lsn = pq_getmsgint64(in); + if (rollback_data->rollback_end_lsn == InvalidXLogRecPtr) + elog(ERROR, "rollback_end_lsn is not set in rollback prepared message"); + rollback_data->prepare_time = pq_getmsgint64(in); + rollback_data->rollback_time = pq_getmsgint64(in); + rollback_data->xid = pq_getmsgint(in, 4); + + /* read gid (copy it into a pre-allocated buffer) */ + strcpy(rollback_data->gid, pq_getmsgstring(in)); +} + /* * Write ORIGIN to the output stream. */ @@ -841,7 +1052,7 @@ logicalrep_write_stream_commit(StringInfo out, ReorderBufferTXN *txn, /* send fields */ pq_sendint64(out, commit_lsn); pq_sendint64(out, txn->end_lsn); - pq_sendint64(out, txn->commit_time); + pq_sendint64(out, txn->xact_time.commit_time); } /* diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 1b4f4a528aafd..7378beb684d97 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -2576,7 +2576,7 @@ ReorderBufferReplay(ReorderBufferTXN *txn, txn->final_lsn = commit_lsn; txn->end_lsn = end_lsn; - txn->commit_time = commit_time; + txn->xact_time.commit_time = commit_time; txn->origin_id = origin_id; txn->origin_lsn = origin_lsn; @@ -2667,7 +2667,7 @@ ReorderBufferRememberPrepareInfo(ReorderBuffer *rb, TransactionId xid, */ txn->final_lsn = prepare_lsn; txn->end_lsn = end_lsn; - txn->commit_time = prepare_time; + txn->xact_time.prepare_time = prepare_time; txn->origin_id = origin_id; txn->origin_lsn = origin_lsn; @@ -2714,7 +2714,7 @@ ReorderBufferPrepare(ReorderBuffer *rb, TransactionId xid, Assert(txn->final_lsn != InvalidXLogRecPtr); ReorderBufferReplay(txn, rb, xid, txn->final_lsn, txn->end_lsn, - txn->commit_time, txn->origin_id, txn->origin_lsn); + txn->xact_time.prepare_time, txn->origin_id, txn->origin_lsn); /* * We send the prepare for the concurrently aborted xacts so that later @@ -2734,7 +2734,7 @@ ReorderBufferPrepare(ReorderBuffer *rb, TransactionId xid, void ReorderBufferFinishPrepared(ReorderBuffer *rb, TransactionId xid, XLogRecPtr commit_lsn, XLogRecPtr end_lsn, - XLogRecPtr initial_consistent_point, + XLogRecPtr two_phase_at, TimestampTz commit_time, RepOriginId origin_id, XLogRecPtr origin_lsn, char *gid, bool is_commit) { @@ -2753,19 +2753,20 @@ ReorderBufferFinishPrepared(ReorderBuffer *rb, TransactionId xid, * be later used for rollback. */ prepare_end_lsn = txn->end_lsn; - prepare_time = txn->commit_time; + prepare_time = txn->xact_time.prepare_time; /* add the gid in the txn */ txn->gid = pstrdup(gid); /* * It is possible that this transaction is not decoded at prepare time - * either because by that time we didn't have a consistent snapshot or it - * was decoded earlier but we have restarted. We only need to send the - * prepare if it was not decoded earlier. We don't need to decode the xact - * for aborts if it is not done already. + * either because by that time we didn't have a consistent snapshot, or + * two_phase was not enabled, or it was decoded earlier but we have + * restarted. We only need to send the prepare if it was not decoded + * earlier. We don't need to decode the xact for aborts if it is not done + * already. */ - if ((txn->final_lsn < initial_consistent_point) && is_commit) + if ((txn->final_lsn < two_phase_at) && is_commit) { txn->txn_flags |= RBTXN_PREPARE; @@ -2783,12 +2784,12 @@ ReorderBufferFinishPrepared(ReorderBuffer *rb, TransactionId xid, * prepared after the restart. */ ReorderBufferReplay(txn, rb, xid, txn->final_lsn, txn->end_lsn, - txn->commit_time, txn->origin_id, txn->origin_lsn); + txn->xact_time.prepare_time, txn->origin_id, txn->origin_lsn); } txn->final_lsn = commit_lsn; txn->end_lsn = end_lsn; - txn->commit_time = commit_time; + txn->xact_time.commit_time = commit_time; txn->origin_id = origin_id; txn->origin_lsn = origin_lsn; diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c index 04f3355f60270..a14a3d69005ec 100644 --- a/src/backend/replication/logical/snapbuild.c +++ b/src/backend/replication/logical/snapbuild.c @@ -165,15 +165,15 @@ struct SnapBuild XLogRecPtr start_decoding_at; /* - * LSN at which we found a consistent point at the time of slot creation. - * This is also the point where we have exported a snapshot for the - * initial copy. + * LSN at which two-phase decoding was enabled or LSN at which we found a + * consistent point at the time of slot creation. * - * The prepared transactions that are not covered by initial snapshot - * needs to be sent later along with commit prepared and they must be - * before this point. + * The prepared transactions, that were skipped because previously + * two-phase was not enabled or are not covered by initial snapshot, need + * to be sent later along with commit prepared and they must be before + * this point. */ - XLogRecPtr initial_consistent_point; + XLogRecPtr two_phase_at; /* * Don't start decoding WAL until the "xl_running_xacts" information @@ -281,7 +281,7 @@ AllocateSnapshotBuilder(ReorderBuffer *reorder, TransactionId xmin_horizon, XLogRecPtr start_lsn, bool need_full_snapshot, - XLogRecPtr initial_consistent_point) + XLogRecPtr two_phase_at) { MemoryContext context; MemoryContext oldcontext; @@ -309,7 +309,7 @@ AllocateSnapshotBuilder(ReorderBuffer *reorder, builder->initial_xmin_horizon = xmin_horizon; builder->start_decoding_at = start_lsn; builder->building_full_snapshot = need_full_snapshot; - builder->initial_consistent_point = initial_consistent_point; + builder->two_phase_at = two_phase_at; MemoryContextSwitchTo(oldcontext); @@ -370,12 +370,21 @@ SnapBuildCurrentState(SnapBuild *builder) } /* - * Return the LSN at which the snapshot was exported + * Return the LSN at which the two-phase decoding was first enabled. */ XLogRecPtr -SnapBuildInitialConsistentPoint(SnapBuild *builder) +SnapBuildGetTwoPhaseAt(SnapBuild *builder) { - return builder->initial_consistent_point; + return builder->two_phase_at; +} + +/* + * Set the LSN at which two-phase decoding is enabled. + */ +void +SnapBuildSetTwoPhaseAt(SnapBuild *builder, XLogRecPtr ptr) +{ + builder->two_phase_at = ptr; } /* diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c index 682c107e7479e..f07983a43cb34 100644 --- a/src/backend/replication/logical/tablesync.c +++ b/src/backend/replication/logical/tablesync.c @@ -96,6 +96,7 @@ #include "access/table.h" #include "access/xact.h" +#include "catalog/indexing.h" #include "catalog/pg_subscription_rel.h" #include "catalog/pg_type.h" #include "commands/copy.h" @@ -114,8 +115,11 @@ #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/snapmgr.h" +#include "utils/syscache.h" static bool table_states_valid = false; +static List *table_states_not_ready = NIL; +static bool FetchTableStates(bool *started_tx); StringInfo copybuf = NULL; @@ -362,7 +366,6 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn) Oid relid; TimestampTz last_start_time; }; - static List *table_states = NIL; static HTAB *last_start_times = NULL; ListCell *lc; bool started_tx = false; @@ -370,42 +373,14 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn) Assert(!IsTransactionState()); /* We need up-to-date sync state info for subscription tables here. */ - if (!table_states_valid) - { - MemoryContext oldctx; - List *rstates; - ListCell *lc; - SubscriptionRelState *rstate; - - /* Clean the old list. */ - list_free_deep(table_states); - table_states = NIL; - - StartTransactionCommand(); - started_tx = true; - - /* Fetch all non-ready tables. */ - rstates = GetSubscriptionNotReadyRelations(MySubscription->oid); - - /* Allocate the tracking info in a permanent memory context. */ - oldctx = MemoryContextSwitchTo(CacheMemoryContext); - foreach(lc, rstates) - { - rstate = palloc(sizeof(SubscriptionRelState)); - memcpy(rstate, lfirst(lc), sizeof(SubscriptionRelState)); - table_states = lappend(table_states, rstate); - } - MemoryContextSwitchTo(oldctx); - - table_states_valid = true; - } + FetchTableStates(&started_tx); /* * Prepare a hash table for tracking last start times of workers, to avoid * immediate restarts. We don't need it if there are no tables that need * syncing. */ - if (table_states && !last_start_times) + if (table_states_not_ready && !last_start_times) { HASHCTL ctl; @@ -419,16 +394,38 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn) * Clean up the hash table when we're done with all tables (just to * release the bit of memory). */ - else if (!table_states && last_start_times) + else if (!table_states_not_ready && last_start_times) { hash_destroy(last_start_times); last_start_times = NULL; } + /* + * Even when the two_phase mode is requested by the user, it remains as + * 'pending' until all tablesyncs have reached READY state. + * + * When this happens, we restart the apply worker and (if the conditions + * are still ok) then the two_phase tri-state will become 'enabled' at + * that time. + * + * Note: If the subscription has no tables then leave the state as + * PENDING, which allows ALTER SUBSCRIPTION ... REFRESH PUBLICATION to + * work. + */ + if (MySubscription->twophasestate == LOGICALREP_TWOPHASE_STATE_PENDING && + AllTablesyncsReady()) + { + ereport(LOG, + (errmsg("logical replication apply worker for subscription \"%s\" will restart so that two_phase can be enabled", + MySubscription->name))); + + proc_exit(0); + } + /* * Process all tables that are being synchronized. */ - foreach(lc, table_states) + foreach(lc, table_states_not_ready) { SubscriptionRelState *rstate = (SubscriptionRelState *) lfirst(lc); @@ -1071,7 +1068,8 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) * slot leading to a dangling slot on the server. */ HOLD_INTERRUPTS(); - walrcv_create_slot(LogRepWorkerWalRcvConn, slotname, false /* permanent */ , + walrcv_create_slot(LogRepWorkerWalRcvConn, + slotname, false /* permanent */ , false /* two_phase */ , CRS_USE_SNAPSHOT, origin_startpos); RESUME_INTERRUPTS(); @@ -1158,3 +1156,134 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) wait_for_worker_state_change(SUBREL_STATE_CATCHUP); return slotname; } + +/* + * Common code to fetch the up-to-date sync state info into the static lists. + * + * Returns true if subscription has 1 or more tables, else false. + * + * Note: If this function started the transaction (indicated by the parameter) + * then it is the caller's responsibility to commit it. + */ +static bool +FetchTableStates(bool *started_tx) +{ + static bool has_subrels = false; + + *started_tx = false; + + if (!table_states_valid) + { + MemoryContext oldctx; + List *rstates; + ListCell *lc; + SubscriptionRelState *rstate; + + /* Clean the old lists. */ + list_free_deep(table_states_not_ready); + table_states_not_ready = NIL; + + if (!IsTransactionState()) + { + StartTransactionCommand(); + *started_tx = true; + } + + /* Fetch all non-ready tables. */ + rstates = GetSubscriptionNotReadyRelations(MySubscription->oid); + + /* Allocate the tracking info in a permanent memory context. */ + oldctx = MemoryContextSwitchTo(CacheMemoryContext); + foreach(lc, rstates) + { + rstate = palloc(sizeof(SubscriptionRelState)); + memcpy(rstate, lfirst(lc), sizeof(SubscriptionRelState)); + table_states_not_ready = lappend(table_states_not_ready, rstate); + } + MemoryContextSwitchTo(oldctx); + + /* + * Does the subscription have tables? + * + * If there were not-READY relations found then we know it does. But + * if table_state_not_ready was empty we still need to check again to + * see if there are 0 tables. + */ + has_subrels = (list_length(table_states_not_ready) > 0) || + HasSubscriptionRelations(MySubscription->oid); + + table_states_valid = true; + } + + return has_subrels; +} + +/* + * If the subscription has no tables then return false. + * + * Otherwise, are all tablesyncs READY? + * + * Note: This function is not suitable to be called from outside of apply or + * tablesync workers because MySubscription needs to be already initialized. + */ +bool +AllTablesyncsReady(void) +{ + bool started_tx = false; + bool has_subrels = false; + + /* We need up-to-date sync state info for subscription tables here. */ + has_subrels = FetchTableStates(&started_tx); + + if (started_tx) + { + CommitTransactionCommand(); + pgstat_report_stat(false); + } + + /* + * Return false when there are no tables in subscription or not all tables + * are in ready state; true otherwise. + */ + return has_subrels && list_length(table_states_not_ready) == 0; +} + +/* + * Update the two_phase state of the specified subscription in pg_subscription. + */ +void +UpdateTwoPhaseState(Oid suboid, char new_state) +{ + Relation rel; + HeapTuple tup; + bool nulls[Natts_pg_subscription]; + bool replaces[Natts_pg_subscription]; + Datum values[Natts_pg_subscription]; + + Assert(new_state == LOGICALREP_TWOPHASE_STATE_DISABLED || + new_state == LOGICALREP_TWOPHASE_STATE_PENDING || + new_state == LOGICALREP_TWOPHASE_STATE_ENABLED); + + rel = table_open(SubscriptionRelationId, RowExclusiveLock); + tup = SearchSysCacheCopy1(SUBSCRIPTIONOID, ObjectIdGetDatum(suboid)); + if (!HeapTupleIsValid(tup)) + elog(ERROR, + "cache lookup failed for subscription oid %u", + suboid); + + /* Form a new tuple. */ + memset(values, 0, sizeof(values)); + memset(nulls, false, sizeof(nulls)); + memset(replaces, false, sizeof(replaces)); + + /* And update/set two_phase state */ + values[Anum_pg_subscription_subtwophasestate - 1] = CharGetDatum(new_state); + replaces[Anum_pg_subscription_subtwophasestate - 1] = true; + + tup = heap_modify_tuple(tup, RelationGetDescr(rel), + values, nulls, replaces); + CatalogTupleUpdate(rel, &tup->t_self, tup); + + heap_freetuple(tup); + table_close(rel, RowExclusiveLock); +} diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 5fc620c7f1900..b9a7a7ffbb32d 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -49,6 +49,79 @@ * a new way to pass filenames to BufFile APIs so that we are allowed to open * the file we desired across multiple stream-open calls for the same * transaction. + * + * TWO_PHASE TRANSACTIONS + * ---------------------- + * Two phase transactions are replayed at prepare and then committed or + * rolled back at commit prepared and rollback prepared respectively. It is + * possible to have a prepared transaction that arrives at the apply worker + * when the tablesync is busy doing the initial copy. In this case, the apply + * worker skips all the prepared operations [e.g. inserts] while the tablesync + * is still busy (see the condition of should_apply_changes_for_rel). The + * tablesync worker might not get such a prepared transaction because say it + * was prior to the initial consistent point but might have got some later + * commits. Now, the tablesync worker will exit without doing anything for the + * prepared transaction skipped by the apply worker as the sync location for it + * will be already ahead of the apply worker's current location. This would lead + * to an "empty prepare", because later when the apply worker does the commit + * prepare, there is nothing in it (the inserts were skipped earlier). + * + * To avoid this, and similar prepare confusions the subscription's two_phase + * commit is enabled only after the initial sync is over. The two_phase option + * has been implemented as a tri-state with values DISABLED, PENDING, and + * ENABLED. + * + * Even if the user specifies they want a subscription with two_phase = on, + * internally it will start with a tri-state of PENDING which only becomes + * ENABLED after all tablesync initializations are completed - i.e. when all + * tablesync workers have reached their READY state. In other words, the value + * PENDING is only a temporary state for subscription start-up. + * + * Until the two_phase is properly available (ENABLED) the subscription will + * behave as if two_phase = off. When the apply worker detects that all + * tablesyncs have become READY (while the tri-state was PENDING) it will + * restart the apply worker process. This happens in + * process_syncing_tables_for_apply. + * + * When the (re-started) apply worker finds that all tablesyncs are READY for a + * two_phase tri-state of PENDING it start streaming messages with the + * two_phase option which in turn enables the decoding of two-phase commits at + * the publisher. Then, it updates the tri-state value from PENDING to ENABLED. + * Now, it is possible that during the time we have not enabled two_phase, the + * publisher (replication server) would have skipped some prepares but we + * ensure that such prepares are sent along with commit prepare, see + * ReorderBufferFinishPrepared. + * + * If the subscription has no tables then a two_phase tri-state PENDING is + * left unchanged. This lets the user still do an ALTER TABLE REFRESH + * PUBLICATION which might otherwise be disallowed (see below). + * + * If ever a user needs to be aware of the tri-state value, they can fetch it + * from the pg_subscription catalog (see column subtwophasestate). + * + * We don't allow to toggle two_phase option of a subscription because it can + * lead to an inconsistent replica. Consider, initially, it was on and we have + * received some prepare then we turn it off, now at commit time the server + * will send the entire transaction data along with the commit. With some more + * analysis, we can allow changing this option from off to on but not sure if + * that alone would be useful. + * + * Finally, to avoid problems mentioned in previous paragraphs from any + * subsequent (not READY) tablesyncs (need to toggle two_phase option from 'on' + * to 'off' and then again back to 'on') there is a restriction for + * ALTER SUBSCRIPTION REFRESH PUBLICATION. This command is not permitted when + * the two_phase tri-state is ENABLED, except when copy_data = false. + * + * We can get prepare of the same GID more than once for the genuine cases + * where we have defined multiple subscriptions for publications on the same + * server and prepared transaction has operations on tables subscribed to those + * subscriptions. For such cases, if we use the GID sent by publisher one of + * the prepares will be successful and others will fail, in which case the + * server will send them again. Now, this can lead to a deadlock if user has + * set synchronous_standby_names for all the subscriptions on subscriber. To + * avoid such deadlocks, we generate a unique GID (consisting of the + * subscription oid and the xid of the prepared transaction) for each prepare + * transaction on the subscriber. *------------------------------------------------------------------------- */ @@ -59,6 +132,7 @@ #include "access/table.h" #include "access/tableam.h" +#include "access/twophase.h" #include "access/xact.h" #include "access/xlog_internal.h" #include "catalog/catalog.h" @@ -256,6 +330,10 @@ static void apply_handle_tuple_routing(ApplyExecutionData *edata, LogicalRepTupleData *newtup, CmdType operation); +/* Compute GID for two_phase transactions */ +static void TwoPhaseTransactionGid(Oid subid, TransactionId xid, char *gid, int szgid); + + /* * Should this worker apply changes for given relation. * @@ -783,6 +861,185 @@ apply_handle_commit(StringInfo s) pgstat_report_activity(STATE_IDLE, NULL); } +/* + * Handle BEGIN PREPARE message. + */ +static void +apply_handle_begin_prepare(StringInfo s) +{ + LogicalRepPreparedTxnData begin_data; + + /* Tablesync should never receive prepare. */ + if (am_tablesync_worker()) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("tablesync worker received a BEGIN PREPARE message"))); + + logicalrep_read_begin_prepare(s, &begin_data); + + remote_final_lsn = begin_data.prepare_lsn; + + in_remote_transaction = true; + + pgstat_report_activity(STATE_RUNNING, NULL); +} + +/* + * Handle PREPARE message. + */ +static void +apply_handle_prepare(StringInfo s) +{ + LogicalRepPreparedTxnData prepare_data; + char gid[GIDSIZE]; + + logicalrep_read_prepare(s, &prepare_data); + + if (prepare_data.prepare_lsn != remote_final_lsn) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("incorrect prepare LSN %X/%X in prepare message (expected %X/%X)", + LSN_FORMAT_ARGS(prepare_data.prepare_lsn), + LSN_FORMAT_ARGS(remote_final_lsn)))); + + /* + * Compute unique GID for two_phase transactions. We don't use GID of + * prepared transaction sent by server as that can lead to deadlock when + * we have multiple subscriptions from same node point to publications on + * the same node. See comments atop worker.c + */ + TwoPhaseTransactionGid(MySubscription->oid, prepare_data.xid, + gid, sizeof(gid)); + + /* + * Unlike commit, here, we always prepare the transaction even though no + * change has happened in this transaction. It is done this way because at + * commit prepared time, we won't know whether we have skipped preparing a + * transaction because of no change. + * + * XXX, We can optimize such that at commit prepared time, we first check + * whether we have prepared the transaction or not but that doesn't seem + * worthwhile because such cases shouldn't be common. + */ + begin_replication_step(); + + /* + * BeginTransactionBlock is necessary to balance the EndTransactionBlock + * called within the PrepareTransactionBlock below. + */ + BeginTransactionBlock(); + CommitTransactionCommand(); /* Completes the preceding Begin command. */ + + /* + * Update origin state so we can restart streaming from correct position + * in case of crash. + */ + replorigin_session_origin_lsn = prepare_data.end_lsn; + replorigin_session_origin_timestamp = prepare_data.prepare_time; + + PrepareTransactionBlock(gid); + end_replication_step(); + CommitTransactionCommand(); + pgstat_report_stat(false); + + store_flush_position(prepare_data.end_lsn); + + in_remote_transaction = false; + + /* Process any tables that are being synchronized in parallel. */ + process_syncing_tables(prepare_data.end_lsn); + + pgstat_report_activity(STATE_IDLE, NULL); +} + +/* + * Handle a COMMIT PREPARED of a previously PREPARED transaction. + */ +static void +apply_handle_commit_prepared(StringInfo s) +{ + LogicalRepCommitPreparedTxnData prepare_data; + char gid[GIDSIZE]; + + logicalrep_read_commit_prepared(s, &prepare_data); + + /* Compute GID for two_phase transactions. */ + TwoPhaseTransactionGid(MySubscription->oid, prepare_data.xid, + gid, sizeof(gid)); + + /* There is no transaction when COMMIT PREPARED is called */ + begin_replication_step(); + + /* + * Update origin state so we can restart streaming from correct position + * in case of crash. + */ + replorigin_session_origin_lsn = prepare_data.end_lsn; + replorigin_session_origin_timestamp = prepare_data.commit_time; + + FinishPreparedTransaction(gid, true); + end_replication_step(); + CommitTransactionCommand(); + pgstat_report_stat(false); + + store_flush_position(prepare_data.end_lsn); + in_remote_transaction = false; + + /* Process any tables that are being synchronized in parallel. */ + process_syncing_tables(prepare_data.end_lsn); + + pgstat_report_activity(STATE_IDLE, NULL); +} + +/* + * Handle a ROLLBACK PREPARED of a previously PREPARED TRANSACTION. + */ +static void +apply_handle_rollback_prepared(StringInfo s) +{ + LogicalRepRollbackPreparedTxnData rollback_data; + char gid[GIDSIZE]; + + logicalrep_read_rollback_prepared(s, &rollback_data); + + /* Compute GID for two_phase transactions. */ + TwoPhaseTransactionGid(MySubscription->oid, rollback_data.xid, + gid, sizeof(gid)); + + /* + * It is possible that we haven't received prepare because it occurred + * before walsender reached a consistent point or the two_phase was still + * not enabled by that time, so in such cases, we need to skip rollback + * prepared. + */ + if (LookupGXact(gid, rollback_data.prepare_end_lsn, + rollback_data.prepare_time)) + { + /* + * Update origin state so we can restart streaming from correct + * position in case of crash. + */ + replorigin_session_origin_lsn = rollback_data.rollback_end_lsn; + replorigin_session_origin_timestamp = rollback_data.rollback_time; + + /* There is no transaction when ABORT/ROLLBACK PREPARED is called */ + begin_replication_step(); + FinishPreparedTransaction(gid, false); + end_replication_step(); + CommitTransactionCommand(); + } + + pgstat_report_stat(false); + + store_flush_position(rollback_data.rollback_end_lsn); + in_remote_transaction = false; + + /* Process any tables that are being synchronized in parallel. */ + process_syncing_tables(rollback_data.rollback_end_lsn); + + pgstat_report_activity(STATE_IDLE, NULL); +} + /* * Handle ORIGIN message. * @@ -2060,6 +2317,22 @@ apply_dispatch(StringInfo s) case LOGICAL_REP_MSG_STREAM_COMMIT: apply_handle_stream_commit(s); return; + + case LOGICAL_REP_MSG_BEGIN_PREPARE: + apply_handle_begin_prepare(s); + return; + + case LOGICAL_REP_MSG_PREPARE: + apply_handle_prepare(s); + return; + + case LOGICAL_REP_MSG_COMMIT_PREPARED: + apply_handle_commit_prepared(s); + return; + + case LOGICAL_REP_MSG_ROLLBACK_PREPARED: + apply_handle_rollback_prepared(s); + return; } ereport(ERROR, @@ -2539,6 +2812,9 @@ maybe_reread_subscription(void) /* !slotname should never happen when enabled is true. */ Assert(newsub->slotname); + /* two-phase should not be altered */ + Assert(newsub->twophasestate == MySubscription->twophasestate); + /* * Exit if any parameter that affects the remote connection was changed. * The launcher will start a new worker. @@ -3040,6 +3316,24 @@ cleanup_subxact_info() subxact_data.nsubxacts_max = 0; } +/* + * Form the prepared transaction GID for two_phase transactions. + * + * Return the GID in the supplied buffer. + */ +static void +TwoPhaseTransactionGid(Oid subid, TransactionId xid, char *gid, int szgid) +{ + Assert(subid != InvalidRepOriginId); + + if (!TransactionIdIsValid(xid)) + ereport(ERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg_internal("invalid two-phase transaction ID"))); + + snprintf(gid, szgid, "pg_gid_%u_%u", subid, xid); +} + /* Logical Replication Apply worker entry point */ void ApplyWorkerMain(Datum main_arg) @@ -3050,6 +3344,7 @@ ApplyWorkerMain(Datum main_arg) XLogRecPtr origin_startpos; char *myslotname; WalRcvStreamOptions options; + int server_version; /* Attach to slot */ logicalrep_worker_attach(worker_slot); @@ -3208,15 +3503,59 @@ ApplyWorkerMain(Datum main_arg) options.logical = true; options.startpoint = origin_startpos; options.slotname = myslotname; + + server_version = walrcv_server_version(LogRepWorkerWalRcvConn); options.proto.logical.proto_version = - walrcv_server_version(LogRepWorkerWalRcvConn) >= 140000 ? - LOGICALREP_PROTO_STREAM_VERSION_NUM : LOGICALREP_PROTO_VERSION_NUM; + server_version >= 150000 ? LOGICALREP_PROTO_TWOPHASE_VERSION_NUM : + server_version >= 140000 ? LOGICALREP_PROTO_STREAM_VERSION_NUM : + LOGICALREP_PROTO_VERSION_NUM; + options.proto.logical.publication_names = MySubscription->publications; options.proto.logical.binary = MySubscription->binary; options.proto.logical.streaming = MySubscription->stream; + options.proto.logical.twophase = false; + + if (!am_tablesync_worker()) + { + /* + * Even when the two_phase mode is requested by the user, it remains + * as the tri-state PENDING until all tablesyncs have reached READY + * state. Only then, can it become ENABLED. + * + * Note: If the subscription has no tables then leave the state as + * PENDING, which allows ALTER SUBSCRIPTION ... REFRESH PUBLICATION to + * work. + */ + if (MySubscription->twophasestate == LOGICALREP_TWOPHASE_STATE_PENDING && + AllTablesyncsReady()) + { + /* Start streaming with two_phase enabled */ + options.proto.logical.twophase = true; + walrcv_startstreaming(LogRepWorkerWalRcvConn, &options); - /* Start normal logical streaming replication. */ - walrcv_startstreaming(LogRepWorkerWalRcvConn, &options); + StartTransactionCommand(); + UpdateTwoPhaseState(MySubscription->oid, LOGICALREP_TWOPHASE_STATE_ENABLED); + MySubscription->twophasestate = LOGICALREP_TWOPHASE_STATE_ENABLED; + CommitTransactionCommand(); + } + else + { + walrcv_startstreaming(LogRepWorkerWalRcvConn, &options); + } + + ereport(DEBUG1, + (errmsg("logical replication apply worker for subscription \"%s\" two_phase is %s.", + MySubscription->name, + MySubscription->twophasestate == LOGICALREP_TWOPHASE_STATE_DISABLED ? "DISABLED" : + MySubscription->twophasestate == LOGICALREP_TWOPHASE_STATE_PENDING ? "PENDING" : + MySubscription->twophasestate == LOGICALREP_TWOPHASE_STATE_ENABLED ? "ENABLED" : + "?"))); + } + else + { + /* Start normal logical streaming replication. */ + walrcv_startstreaming(LogRepWorkerWalRcvConn, &options); + } /* Run the main loop. */ LogicalRepApplyLoop(origin_startpos); diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index abd5217ab1b5e..e4314af13ae6c 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -51,6 +51,16 @@ static void pgoutput_message(LogicalDecodingContext *ctx, Size sz, const char *message); static bool pgoutput_origin_filter(LogicalDecodingContext *ctx, RepOriginId origin_id); +static void pgoutput_begin_prepare_txn(LogicalDecodingContext *ctx, + ReorderBufferTXN *txn); +static void pgoutput_prepare_txn(LogicalDecodingContext *ctx, + ReorderBufferTXN *txn, XLogRecPtr prepare_lsn); +static void pgoutput_commit_prepared_txn(LogicalDecodingContext *ctx, + ReorderBufferTXN *txn, XLogRecPtr commit_lsn); +static void pgoutput_rollback_prepared_txn(LogicalDecodingContext *ctx, + ReorderBufferTXN *txn, + XLogRecPtr prepare_end_lsn, + TimestampTz prepare_time); static void pgoutput_stream_start(struct LogicalDecodingContext *ctx, ReorderBufferTXN *txn); static void pgoutput_stream_stop(struct LogicalDecodingContext *ctx, @@ -70,6 +80,9 @@ static void publication_invalidation_cb(Datum arg, int cacheid, uint32 hashvalue); static void send_relation_and_attrs(Relation relation, TransactionId xid, LogicalDecodingContext *ctx); +static void send_repl_origin(LogicalDecodingContext *ctx, + RepOriginId origin_id, XLogRecPtr origin_lsn, + bool send_origin); /* * Entry in the map used to remember which relation schemas we sent. @@ -145,6 +158,11 @@ _PG_output_plugin_init(OutputPluginCallbacks *cb) cb->truncate_cb = pgoutput_truncate; cb->message_cb = pgoutput_message; cb->commit_cb = pgoutput_commit_txn; + + cb->begin_prepare_cb = pgoutput_begin_prepare_txn; + cb->prepare_cb = pgoutput_prepare_txn; + cb->commit_prepared_cb = pgoutput_commit_prepared_txn; + cb->rollback_prepared_cb = pgoutput_rollback_prepared_txn; cb->filter_by_origin_cb = pgoutput_origin_filter; cb->shutdown_cb = pgoutput_shutdown; @@ -156,6 +174,8 @@ _PG_output_plugin_init(OutputPluginCallbacks *cb) cb->stream_change_cb = pgoutput_change; cb->stream_message_cb = pgoutput_message; cb->stream_truncate_cb = pgoutput_truncate; + /* transaction streaming - two-phase commit */ + cb->stream_prepare_cb = NULL; } static void @@ -167,10 +187,12 @@ parse_output_parameters(List *options, PGOutputData *data) bool binary_option_given = false; bool messages_option_given = false; bool streaming_given = false; + bool two_phase_option_given = false; data->binary = false; data->streaming = false; data->messages = false; + data->two_phase = false; foreach(lc, options) { @@ -246,8 +268,29 @@ parse_output_parameters(List *options, PGOutputData *data) data->streaming = defGetBoolean(defel); } + else if (strcmp(defel->defname, "two_phase") == 0) + { + if (two_phase_option_given) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("conflicting or redundant options"))); + two_phase_option_given = true; + + data->two_phase = defGetBoolean(defel); + } else elog(ERROR, "unrecognized pgoutput option: %s", defel->defname); + + /* + * Do additional checking for the disallowed combination of two_phase + * and streaming. While streaming and two_phase can theoretically be + * supported, it needs more analysis to allow them together. + */ + if (data->two_phase && data->streaming) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("%s and %s are mutually exclusive options", + "two_phase", "streaming"))); } } @@ -319,6 +362,27 @@ pgoutput_startup(LogicalDecodingContext *ctx, OutputPluginOptions *opt, /* Also remember we're currently not streaming any transaction. */ in_streaming = false; + /* + * Here, we just check whether the two-phase option is passed by + * plugin and decide whether to enable it at later point of time. It + * remains enabled if the previous start-up has done so. But we only + * allow the option to be passed in with sufficient version of the + * protocol, and when the output plugin supports it. + */ + if (!data->two_phase) + ctx->twophase_opt_given = false; + else if (data->protocol_version < LOGICALREP_PROTO_TWOPHASE_VERSION_NUM) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("requested proto_version=%d does not support two-phase commit, need %d or higher", + data->protocol_version, LOGICALREP_PROTO_TWOPHASE_VERSION_NUM))); + else if (!ctx->twophase) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("two-phase commit requested, but not supported by output plugin"))); + else + ctx->twophase_opt_given = true; + /* Init publication state. */ data->publications = NIL; publications_valid = false; @@ -331,8 +395,12 @@ pgoutput_startup(LogicalDecodingContext *ctx, OutputPluginOptions *opt, } else { - /* Disable the streaming during the slot initialization mode. */ + /* + * Disable the streaming and prepared transactions during the slot + * initialization mode. + */ ctx->streaming = false; + ctx->twophase = false; } } @@ -347,29 +415,8 @@ pgoutput_begin_txn(LogicalDecodingContext *ctx, ReorderBufferTXN *txn) OutputPluginPrepareWrite(ctx, !send_replication_origin); logicalrep_write_begin(ctx->out, txn); - if (send_replication_origin) - { - char *origin; - - /*---------- - * XXX: which behaviour do we want here? - * - * Alternatives: - * - don't send origin message if origin name not found - * (that's what we do now) - * - throw error - that will break replication, not good - * - send some special "unknown" origin - *---------- - */ - if (replorigin_by_oid(txn->origin_id, true, &origin)) - { - /* Message boundary */ - OutputPluginWrite(ctx, false); - OutputPluginPrepareWrite(ctx, true); - logicalrep_write_origin(ctx->out, origin, txn->origin_lsn); - } - - } + send_repl_origin(ctx, txn->origin_id, txn->origin_lsn, + send_replication_origin); OutputPluginWrite(ctx, true); } @@ -388,6 +435,68 @@ pgoutput_commit_txn(LogicalDecodingContext *ctx, ReorderBufferTXN *txn, OutputPluginWrite(ctx, true); } +/* + * BEGIN PREPARE callback + */ +static void +pgoutput_begin_prepare_txn(LogicalDecodingContext *ctx, ReorderBufferTXN *txn) +{ + bool send_replication_origin = txn->origin_id != InvalidRepOriginId; + + OutputPluginPrepareWrite(ctx, !send_replication_origin); + logicalrep_write_begin_prepare(ctx->out, txn); + + send_repl_origin(ctx, txn->origin_id, txn->origin_lsn, + send_replication_origin); + + OutputPluginWrite(ctx, true); +} + +/* + * PREPARE callback + */ +static void +pgoutput_prepare_txn(LogicalDecodingContext *ctx, ReorderBufferTXN *txn, + XLogRecPtr prepare_lsn) +{ + OutputPluginUpdateProgress(ctx); + + OutputPluginPrepareWrite(ctx, true); + logicalrep_write_prepare(ctx->out, txn, prepare_lsn); + OutputPluginWrite(ctx, true); +} + +/* + * COMMIT PREPARED callback + */ +static void +pgoutput_commit_prepared_txn(LogicalDecodingContext *ctx, ReorderBufferTXN *txn, + XLogRecPtr commit_lsn) +{ + OutputPluginUpdateProgress(ctx); + + OutputPluginPrepareWrite(ctx, true); + logicalrep_write_commit_prepared(ctx->out, txn, commit_lsn); + OutputPluginWrite(ctx, true); +} + +/* + * ROLLBACK PREPARED callback + */ +static void +pgoutput_rollback_prepared_txn(LogicalDecodingContext *ctx, + ReorderBufferTXN *txn, + XLogRecPtr prepare_end_lsn, + TimestampTz prepare_time) +{ + OutputPluginUpdateProgress(ctx); + + OutputPluginPrepareWrite(ctx, true); + logicalrep_write_rollback_prepared(ctx->out, txn, prepare_end_lsn, + prepare_time); + OutputPluginWrite(ctx, true); +} + /* * Write the current schema of the relation and its ancestor (if any) if not * done yet. @@ -839,18 +948,8 @@ pgoutput_stream_start(struct LogicalDecodingContext *ctx, OutputPluginPrepareWrite(ctx, !send_replication_origin); logicalrep_write_stream_start(ctx->out, txn->xid, !rbtxn_is_streamed(txn)); - if (send_replication_origin) - { - char *origin; - - if (replorigin_by_oid(txn->origin_id, true, &origin)) - { - /* Message boundary */ - OutputPluginWrite(ctx, false); - OutputPluginPrepareWrite(ctx, true); - logicalrep_write_origin(ctx->out, origin, InvalidXLogRecPtr); - } - } + send_repl_origin(ctx, txn->origin_id, InvalidXLogRecPtr, + send_replication_origin); OutputPluginWrite(ctx, true); @@ -1270,3 +1369,33 @@ rel_sync_cache_publication_cb(Datum arg, int cacheid, uint32 hashvalue) entry->pubactions.pubtruncate = false; } } + +/* Send Replication origin */ +static void +send_repl_origin(LogicalDecodingContext *ctx, RepOriginId origin_id, + XLogRecPtr origin_lsn, bool send_origin) +{ + if (send_origin) + { + char *origin; + + /*---------- + * XXX: which behaviour do we want here? + * + * Alternatives: + * - don't send origin message if origin name not found + * (that's what we do now) + * - throw error - that will break replication, not good + * - send some special "unknown" origin + *---------- + */ + if (replorigin_by_oid(origin_id, true, &origin)) + { + /* Message boundary */ + OutputPluginWrite(ctx, false); + OutputPluginPrepareWrite(ctx, true); + + logicalrep_write_origin(ctx->out, origin, origin_lsn); + } + } +} diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index 8c18b4ed05b56..33b85d86cc87e 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -283,6 +283,7 @@ ReplicationSlotCreate(const char *name, bool db_specific, slot->data.database = db_specific ? MyDatabaseId : InvalidOid; slot->data.persistency = persistency; slot->data.two_phase = two_phase; + slot->data.two_phase_at = InvalidXLogRecPtr; /* and then data only present in shared memory */ slot->just_dirtied = false; diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index 2be9ad967dc20..9a2bc37fd711b 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -370,7 +370,7 @@ WalReceiverMain(void) "pg_walreceiver_%lld", (long long int) walrcv_get_backend_pid(wrconn)); - walrcv_create_slot(wrconn, slotname, true, 0, NULL); + walrcv_create_slot(wrconn, slotname, true, false, 0, NULL); SpinLockAcquire(&walrcv->mutex); strlcpy(walrcv->slotname, slotname, NAMEDATALEN); diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 321152151dbb9..912144c43e34a 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -51,6 +51,7 @@ #include "catalog/pg_largeobject_d.h" #include "catalog/pg_largeobject_metadata_d.h" #include "catalog/pg_proc_d.h" +#include "catalog/pg_subscription.h" #include "catalog/pg_trigger_d.h" #include "catalog/pg_type_d.h" #include "common/connect.h" @@ -4320,6 +4321,7 @@ getSubscriptions(Archive *fout) int i_subname; int i_rolname; int i_substream; + int i_subtwophasestate; int i_subconninfo; int i_subslotname; int i_subsynccommit; @@ -4363,9 +4365,16 @@ getSubscriptions(Archive *fout) appendPQExpBufferStr(query, " false AS subbinary,\n"); if (fout->remoteVersion >= 140000) - appendPQExpBufferStr(query, " s.substream\n"); + appendPQExpBufferStr(query, " s.substream,\n"); else - appendPQExpBufferStr(query, " false AS substream\n"); + appendPQExpBufferStr(query, " false AS substream,\n"); + + if (fout->remoteVersion >= 150000) + appendPQExpBufferStr(query, " s.subtwophasestate\n"); + else + appendPQExpBuffer(query, + " '%c' AS subtwophasestate\n", + LOGICALREP_TWOPHASE_STATE_DISABLED); appendPQExpBufferStr(query, "FROM pg_subscription s\n" @@ -4386,6 +4395,7 @@ getSubscriptions(Archive *fout) i_subpublications = PQfnumber(res, "subpublications"); i_subbinary = PQfnumber(res, "subbinary"); i_substream = PQfnumber(res, "substream"); + i_subtwophasestate = PQfnumber(res, "subtwophasestate"); subinfo = pg_malloc(ntups * sizeof(SubscriptionInfo)); @@ -4411,6 +4421,8 @@ getSubscriptions(Archive *fout) pg_strdup(PQgetvalue(res, i, i_subbinary)); subinfo[i].substream = pg_strdup(PQgetvalue(res, i, i_substream)); + subinfo[i].subtwophasestate = + pg_strdup(PQgetvalue(res, i, i_subtwophasestate)); if (strlen(subinfo[i].rolname) == 0) pg_log_warning("owner of subscription \"%s\" appears to be invalid", @@ -4438,6 +4450,7 @@ dumpSubscription(Archive *fout, const SubscriptionInfo *subinfo) char **pubnames = NULL; int npubnames = 0; int i; + char two_phase_disabled[] = {LOGICALREP_TWOPHASE_STATE_DISABLED, '\0'}; if (!(subinfo->dobj.dump & DUMP_COMPONENT_DEFINITION)) return; @@ -4479,6 +4492,9 @@ dumpSubscription(Archive *fout, const SubscriptionInfo *subinfo) if (strcmp(subinfo->substream, "f") != 0) appendPQExpBufferStr(query, ", streaming = on"); + if (strcmp(subinfo->subtwophasestate, two_phase_disabled) != 0) + appendPQExpBufferStr(query, ", two_phase = on"); + if (strcmp(subinfo->subsynccommit, "off") != 0) appendPQExpBuffer(query, ", synchronous_commit = %s", fmtId(subinfo->subsynccommit)); diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h index ba9bc6ddd210a..efb8c30e71994 100644 --- a/src/bin/pg_dump/pg_dump.h +++ b/src/bin/pg_dump/pg_dump.h @@ -639,6 +639,7 @@ typedef struct _SubscriptionInfo char *subslotname; char *subbinary; char *substream; + char *subtwophasestate; char *subsynccommit; char *subpublications; } SubscriptionInfo; diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 2abf255798c0d..ba658f731b087 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -6389,7 +6389,7 @@ describeSubscriptions(const char *pattern, bool verbose) PGresult *res; printQueryOpt myopt = pset.popt; static const bool translate_columns[] = {false, false, false, false, - false, false, false, false}; + false, false, false, false, false}; if (pset.sversion < 100000) { @@ -6423,6 +6423,12 @@ describeSubscriptions(const char *pattern, bool verbose) gettext_noop("Binary"), gettext_noop("Streaming")); + /* Two_phase is only supported in v15 and higher */ + if (pset.sversion >= 150000) + appendPQExpBuffer(&buf, + ", subtwophasestate AS \"%s\"\n", + gettext_noop("Two phase commit")); + appendPQExpBuffer(&buf, ", subsynccommit AS \"%s\"\n" ", subconninfo AS \"%s\"\n", diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 0ebd5aa41a1ad..d6bf725971cdf 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -2764,7 +2764,7 @@ psql_completion(const char *text, int start, int end) else if (HeadMatches("CREATE", "SUBSCRIPTION") && TailMatches("WITH", "(")) COMPLETE_WITH("binary", "connect", "copy_data", "create_slot", "enabled", "slot_name", "streaming", - "synchronous_commit"); + "synchronous_commit", "two_phase"); /* CREATE TRIGGER --- is allowed inside CREATE SCHEMA, so use TailMatches */ diff --git a/src/include/access/twophase.h b/src/include/access/twophase.h index 91786da784273..e27e1a8fe8a0d 100644 --- a/src/include/access/twophase.h +++ b/src/include/access/twophase.h @@ -58,4 +58,6 @@ extern void PrepareRedoAdd(char *buf, XLogRecPtr start_lsn, XLogRecPtr end_lsn, RepOriginId origin_id); extern void PrepareRedoRemove(TransactionId xid, bool giveWarning); extern void restoreTwoPhaseData(void); +extern bool LookupGXact(const char *gid, XLogRecPtr prepare_at_lsn, + TimestampTz origin_prepare_timestamp); #endif /* TWOPHASE_H */ diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index e92ecaf34485f..f2ecafa1daac4 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202107071 +#define CATALOG_VERSION_NO 202107141 #endif diff --git a/src/include/catalog/pg_subscription.h b/src/include/catalog/pg_subscription.h index 750d46912a570..21061493ea270 100644 --- a/src/include/catalog/pg_subscription.h +++ b/src/include/catalog/pg_subscription.h @@ -22,6 +22,14 @@ #include "nodes/pg_list.h" +/* + * two_phase tri-state values. See comments atop worker.c to know more about + * these states. + */ +#define LOGICALREP_TWOPHASE_STATE_DISABLED 'd' +#define LOGICALREP_TWOPHASE_STATE_PENDING 'p' +#define LOGICALREP_TWOPHASE_STATE_ENABLED 'e' + /* ---------------- * pg_subscription definition. cpp turns this into * typedef struct FormData_pg_subscription @@ -57,6 +65,8 @@ CATALOG(pg_subscription,6100,SubscriptionRelationId) BKI_SHARED_RELATION BKI_ROW bool substream; /* Stream in-progress transactions. */ + char subtwophasestate; /* Stream two-phase transactions */ + #ifdef CATALOG_VARLEN /* variable-length fields start here */ /* Connection string to the publisher */ text subconninfo BKI_FORCE_NOT_NULL; @@ -92,6 +102,7 @@ typedef struct Subscription bool binary; /* Indicates if the subscription wants data in * binary format */ bool stream; /* Allow streaming in-progress transactions. */ + char twophasestate; /* Allow streaming two-phase transactions */ char *conninfo; /* Connection string to the publisher */ char *slotname; /* Name of the replication slot */ char *synccommit; /* Synchronous commit setting for worker */ diff --git a/src/include/catalog/pg_subscription_rel.h b/src/include/catalog/pg_subscription_rel.h index 4d2056318db2d..632381b4e3a5c 100644 --- a/src/include/catalog/pg_subscription_rel.h +++ b/src/include/catalog/pg_subscription_rel.h @@ -87,6 +87,7 @@ extern void UpdateSubscriptionRelState(Oid subid, Oid relid, char state, extern char GetSubscriptionRelState(Oid subid, Oid relid, XLogRecPtr *sublsn); extern void RemoveSubscriptionRel(Oid subid, Oid relid); +extern bool HasSubscriptionRelations(Oid subid); extern List *GetSubscriptionRelations(Oid subid); extern List *GetSubscriptionNotReadyRelations(Oid subid); diff --git a/src/include/replication/logical.h b/src/include/replication/logical.h index af551d6f4eea8..e0f513b77384f 100644 --- a/src/include/replication/logical.h +++ b/src/include/replication/logical.h @@ -89,6 +89,16 @@ typedef struct LogicalDecodingContext */ bool twophase; + /* + * Is two-phase option given by output plugin? + * + * This flag indicates that the plugin passed in the two-phase option as + * part of the START_STREAMING command. We can't rely solely on the + * twophase flag which only tells whether the plugin provided all the + * necessary two-phase callbacks. + */ + bool twophase_opt_given; + /* * State for writing output. */ diff --git a/src/include/replication/logicalproto.h b/src/include/replication/logicalproto.h index 55b90c03eacec..63de90d94a572 100644 --- a/src/include/replication/logicalproto.h +++ b/src/include/replication/logicalproto.h @@ -13,6 +13,7 @@ #ifndef LOGICAL_PROTO_H #define LOGICAL_PROTO_H +#include "access/xact.h" #include "replication/reorderbuffer.h" #include "utils/rel.h" @@ -26,12 +27,16 @@ * connect time. * * LOGICALREP_PROTO_STREAM_VERSION_NUM is the minimum protocol version with - * support for streaming large transactions. + * support for streaming large transactions. Introduced in PG14. + * + * LOGICALREP_PROTO_TWOPHASE_VERSION_NUM is the minimum protocol version with + * support for two-phase commit decoding (at prepare time). Introduced in PG15. */ #define LOGICALREP_PROTO_MIN_VERSION_NUM 1 #define LOGICALREP_PROTO_VERSION_NUM 1 #define LOGICALREP_PROTO_STREAM_VERSION_NUM 2 -#define LOGICALREP_PROTO_MAX_VERSION_NUM LOGICALREP_PROTO_STREAM_VERSION_NUM +#define LOGICALREP_PROTO_TWOPHASE_VERSION_NUM 3 +#define LOGICALREP_PROTO_MAX_VERSION_NUM LOGICALREP_PROTO_TWOPHASE_VERSION_NUM /* * Logical message types @@ -55,6 +60,10 @@ typedef enum LogicalRepMsgType LOGICAL_REP_MSG_RELATION = 'R', LOGICAL_REP_MSG_TYPE = 'Y', LOGICAL_REP_MSG_MESSAGE = 'M', + LOGICAL_REP_MSG_BEGIN_PREPARE = 'b', + LOGICAL_REP_MSG_PREPARE = 'P', + LOGICAL_REP_MSG_COMMIT_PREPARED = 'K', + LOGICAL_REP_MSG_ROLLBACK_PREPARED = 'r', LOGICAL_REP_MSG_STREAM_START = 'S', LOGICAL_REP_MSG_STREAM_END = 'E', LOGICAL_REP_MSG_STREAM_COMMIT = 'c', @@ -122,6 +131,48 @@ typedef struct LogicalRepCommitData TimestampTz committime; } LogicalRepCommitData; +/* + * Prepared transaction protocol information for begin_prepare, and prepare. + */ +typedef struct LogicalRepPreparedTxnData +{ + XLogRecPtr prepare_lsn; + XLogRecPtr end_lsn; + TimestampTz prepare_time; + TransactionId xid; + char gid[GIDSIZE]; +} LogicalRepPreparedTxnData; + +/* + * Prepared transaction protocol information for commit prepared. + */ +typedef struct LogicalRepCommitPreparedTxnData +{ + XLogRecPtr commit_lsn; + XLogRecPtr end_lsn; + TimestampTz commit_time; + TransactionId xid; + char gid[GIDSIZE]; +} LogicalRepCommitPreparedTxnData; + +/* + * Rollback Prepared transaction protocol information. The prepare information + * prepare_end_lsn and prepare_time are used to check if the downstream has + * received this prepared transaction in which case it can apply the rollback, + * otherwise, it can skip the rollback operation. The gid alone is not + * sufficient because the downstream node can have a prepared transaction with + * same identifier. + */ +typedef struct LogicalRepRollbackPreparedTxnData +{ + XLogRecPtr prepare_end_lsn; + XLogRecPtr rollback_end_lsn; + TimestampTz prepare_time; + TimestampTz rollback_time; + TransactionId xid; + char gid[GIDSIZE]; +} LogicalRepRollbackPreparedTxnData; + extern void logicalrep_write_begin(StringInfo out, ReorderBufferTXN *txn); extern void logicalrep_read_begin(StringInfo in, LogicalRepBeginData *begin_data); @@ -129,6 +180,24 @@ extern void logicalrep_write_commit(StringInfo out, ReorderBufferTXN *txn, XLogRecPtr commit_lsn); extern void logicalrep_read_commit(StringInfo in, LogicalRepCommitData *commit_data); +extern void logicalrep_write_begin_prepare(StringInfo out, ReorderBufferTXN *txn); +extern void logicalrep_read_begin_prepare(StringInfo in, + LogicalRepPreparedTxnData *begin_data); +extern void logicalrep_write_prepare(StringInfo out, ReorderBufferTXN *txn, + XLogRecPtr prepare_lsn); +extern void logicalrep_read_prepare(StringInfo in, + LogicalRepPreparedTxnData *prepare_data); +extern void logicalrep_write_commit_prepared(StringInfo out, ReorderBufferTXN *txn, + XLogRecPtr commit_lsn); +extern void logicalrep_read_commit_prepared(StringInfo in, + LogicalRepCommitPreparedTxnData *prepare_data); +extern void logicalrep_write_rollback_prepared(StringInfo out, ReorderBufferTXN *txn, + XLogRecPtr prepare_end_lsn, + TimestampTz prepare_time); +extern void logicalrep_read_rollback_prepared(StringInfo in, + LogicalRepRollbackPreparedTxnData *rollback_data); + + extern void logicalrep_write_origin(StringInfo out, const char *origin, XLogRecPtr origin_lsn); extern char *logicalrep_read_origin(StringInfo in, XLogRecPtr *origin_lsn); diff --git a/src/include/replication/pgoutput.h b/src/include/replication/pgoutput.h index 51e7c0348da3c..0dc460fb70a56 100644 --- a/src/include/replication/pgoutput.h +++ b/src/include/replication/pgoutput.h @@ -27,6 +27,7 @@ typedef struct PGOutputData bool binary; bool streaming; bool messages; + bool two_phase; } PGOutputData; #endif /* PGOUTPUT_H */ diff --git a/src/include/replication/reorderbuffer.h b/src/include/replication/reorderbuffer.h index ba257d81b511a..5b40ff75f796f 100644 --- a/src/include/replication/reorderbuffer.h +++ b/src/include/replication/reorderbuffer.h @@ -297,7 +297,11 @@ typedef struct ReorderBufferTXN * Commit or Prepare time, only known when we read the actual commit or * prepare record. */ - TimestampTz commit_time; + union + { + TimestampTz commit_time; + TimestampTz prepare_time; + } xact_time; /* * The base snapshot is used to decode all changes until either this @@ -636,7 +640,7 @@ void ReorderBufferCommit(ReorderBuffer *, TransactionId, TimestampTz commit_time, RepOriginId origin_id, XLogRecPtr origin_lsn); void ReorderBufferFinishPrepared(ReorderBuffer *rb, TransactionId xid, XLogRecPtr commit_lsn, XLogRecPtr end_lsn, - XLogRecPtr initial_consistent_point, + XLogRecPtr two_phase_at, TimestampTz commit_time, RepOriginId origin_id, XLogRecPtr origin_lsn, char *gid, bool is_commit); diff --git a/src/include/replication/slot.h b/src/include/replication/slot.h index 2eb7e3a530d43..34d95eac8e909 100644 --- a/src/include/replication/slot.h +++ b/src/include/replication/slot.h @@ -84,11 +84,10 @@ typedef struct ReplicationSlotPersistentData XLogRecPtr confirmed_flush; /* - * LSN at which we found a consistent point at the time of slot creation. - * This is also the point where we have exported a snapshot for the - * initial copy. + * LSN at which we enabled two_phase commit for this slot or LSN at which + * we found a consistent point at the time of slot creation. */ - XLogRecPtr initial_consistent_point; + XLogRecPtr two_phase_at; /* * Allow decoding of prepared transactions? diff --git a/src/include/replication/snapbuild.h b/src/include/replication/snapbuild.h index fbabce6764d31..de7212464af55 100644 --- a/src/include/replication/snapbuild.h +++ b/src/include/replication/snapbuild.h @@ -62,7 +62,7 @@ extern void CheckPointSnapBuild(void); extern SnapBuild *AllocateSnapshotBuilder(struct ReorderBuffer *cache, TransactionId xmin_horizon, XLogRecPtr start_lsn, bool need_full_snapshot, - XLogRecPtr initial_consistent_point); + XLogRecPtr two_phase_at); extern void FreeSnapshotBuilder(SnapBuild *cache); extern void SnapBuildSnapDecRefcount(Snapshot snap); @@ -76,7 +76,8 @@ extern Snapshot SnapBuildGetOrBuildSnapshot(SnapBuild *builder, TransactionId xid); extern bool SnapBuildXactNeedsSkip(SnapBuild *snapstate, XLogRecPtr ptr); -extern XLogRecPtr SnapBuildInitialConsistentPoint(SnapBuild *builder); +extern XLogRecPtr SnapBuildGetTwoPhaseAt(SnapBuild *builder); +extern void SnapBuildSetTwoPhaseAt(SnapBuild *builder, XLogRecPtr ptr); extern void SnapBuildCommitTxn(SnapBuild *builder, XLogRecPtr lsn, TransactionId xid, int nsubxacts, diff --git a/src/include/replication/walreceiver.h b/src/include/replication/walreceiver.h index 4fd7c25ea74e8..0b607ed777b7c 100644 --- a/src/include/replication/walreceiver.h +++ b/src/include/replication/walreceiver.h @@ -181,6 +181,8 @@ typedef struct List *publication_names; /* String list of publications */ bool binary; /* Ask publisher to use binary */ bool streaming; /* Streaming of large transactions */ + bool twophase; /* Streaming of two-phase transactions at + * prepare time */ } logical; } proto; } WalRcvStreamOptions; @@ -347,6 +349,7 @@ typedef void (*walrcv_send_fn) (WalReceiverConn *conn, typedef char *(*walrcv_create_slot_fn) (WalReceiverConn *conn, const char *slotname, bool temporary, + bool two_phase, CRSSnapshotAction snapshot_action, XLogRecPtr *lsn); @@ -420,8 +423,8 @@ extern PGDLLIMPORT WalReceiverFunctionsType *WalReceiverFunctions; WalReceiverFunctions->walrcv_receive(conn, buffer, wait_fd) #define walrcv_send(conn, buffer, nbytes) \ WalReceiverFunctions->walrcv_send(conn, buffer, nbytes) -#define walrcv_create_slot(conn, slotname, temporary, snapshot_action, lsn) \ - WalReceiverFunctions->walrcv_create_slot(conn, slotname, temporary, snapshot_action, lsn) +#define walrcv_create_slot(conn, slotname, temporary, two_phase, snapshot_action, lsn) \ + WalReceiverFunctions->walrcv_create_slot(conn, slotname, temporary, two_phase, snapshot_action, lsn) #define walrcv_get_backend_pid(conn) \ WalReceiverFunctions->walrcv_get_backend_pid(conn) #define walrcv_exec(conn, exec, nRetTypes, retTypes) \ diff --git a/src/include/replication/worker_internal.h b/src/include/replication/worker_internal.h index 179eb43900d51..41c7487393f9c 100644 --- a/src/include/replication/worker_internal.h +++ b/src/include/replication/worker_internal.h @@ -86,6 +86,9 @@ extern void ReplicationOriginNameForTablesync(Oid suboid, Oid relid, char *originname, int szorgname); extern char *LogicalRepSyncTableStart(XLogRecPtr *origin_startpos); +extern bool AllTablesyncsReady(void); +extern void UpdateTwoPhaseState(Oid suboid, char new_state); + void process_syncing_tables(XLogRecPtr current_lsn); void invalidate_syncing_table_states(Datum arg, int cacheid, uint32 hashvalue); diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out index 57f7dd9b0a735..ad6b4e4bd35fa 100644 --- a/src/test/regress/expected/subscription.out +++ b/src/test/regress/expected/subscription.out @@ -76,10 +76,10 @@ ALTER SUBSCRIPTION regress_testsub CONNECTION 'foobar'; ERROR: invalid connection string syntax: missing "=" after "foobar" in connection info string \dRs+ - List of subscriptions - Name | Owner | Enabled | Publication | Binary | Streaming | Synchronous commit | Conninfo ------------------+---------------------------+---------+-------------+--------+-----------+--------------------+----------------------------- - regress_testsub | regress_subscription_user | f | {testpub} | f | f | off | dbname=regress_doesnotexist + List of subscriptions + Name | Owner | Enabled | Publication | Binary | Streaming | Two phase commit | Synchronous commit | Conninfo +-----------------+---------------------------+---------+-------------+--------+-----------+------------------+--------------------+----------------------------- + regress_testsub | regress_subscription_user | f | {testpub} | f | f | d | off | dbname=regress_doesnotexist (1 row) ALTER SUBSCRIPTION regress_testsub SET PUBLICATION testpub2, testpub3 WITH (refresh = false); @@ -91,10 +91,10 @@ ERROR: subscription "regress_doesnotexist" does not exist ALTER SUBSCRIPTION regress_testsub SET (create_slot = false); ERROR: unrecognized subscription parameter: "create_slot" \dRs+ - List of subscriptions - Name | Owner | Enabled | Publication | Binary | Streaming | Synchronous commit | Conninfo ------------------+---------------------------+---------+---------------------+--------+-----------+--------------------+------------------------------ - regress_testsub | regress_subscription_user | f | {testpub2,testpub3} | f | f | off | dbname=regress_doesnotexist2 + List of subscriptions + Name | Owner | Enabled | Publication | Binary | Streaming | Two phase commit | Synchronous commit | Conninfo +-----------------+---------------------------+---------+---------------------+--------+-----------+------------------+--------------------+------------------------------ + regress_testsub | regress_subscription_user | f | {testpub2,testpub3} | f | f | d | off | dbname=regress_doesnotexist2 (1 row) BEGIN; @@ -126,10 +126,10 @@ ALTER SUBSCRIPTION regress_testsub_foo SET (synchronous_commit = foobar); ERROR: invalid value for parameter "synchronous_commit": "foobar" HINT: Available values: local, remote_write, remote_apply, on, off. \dRs+ - List of subscriptions - Name | Owner | Enabled | Publication | Binary | Streaming | Synchronous commit | Conninfo ----------------------+---------------------------+---------+---------------------+--------+-----------+--------------------+------------------------------ - regress_testsub_foo | regress_subscription_user | f | {testpub2,testpub3} | f | f | local | dbname=regress_doesnotexist2 + List of subscriptions + Name | Owner | Enabled | Publication | Binary | Streaming | Two phase commit | Synchronous commit | Conninfo +---------------------+---------------------------+---------+---------------------+--------+-----------+------------------+--------------------+------------------------------ + regress_testsub_foo | regress_subscription_user | f | {testpub2,testpub3} | f | f | d | local | dbname=regress_doesnotexist2 (1 row) -- rename back to keep the rest simple @@ -162,19 +162,19 @@ ERROR: binary requires a Boolean value CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false, binary = true); WARNING: tables were not subscribed, you will have to run ALTER SUBSCRIPTION ... REFRESH PUBLICATION to subscribe the tables \dRs+ - List of subscriptions - Name | Owner | Enabled | Publication | Binary | Streaming | Synchronous commit | Conninfo ------------------+---------------------------+---------+-------------+--------+-----------+--------------------+----------------------------- - regress_testsub | regress_subscription_user | f | {testpub} | t | f | off | dbname=regress_doesnotexist + List of subscriptions + Name | Owner | Enabled | Publication | Binary | Streaming | Two phase commit | Synchronous commit | Conninfo +-----------------+---------------------------+---------+-------------+--------+-----------+------------------+--------------------+----------------------------- + regress_testsub | regress_subscription_user | f | {testpub} | t | f | d | off | dbname=regress_doesnotexist (1 row) ALTER SUBSCRIPTION regress_testsub SET (binary = false); ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE); \dRs+ - List of subscriptions - Name | Owner | Enabled | Publication | Binary | Streaming | Synchronous commit | Conninfo ------------------+---------------------------+---------+-------------+--------+-----------+--------------------+----------------------------- - regress_testsub | regress_subscription_user | f | {testpub} | f | f | off | dbname=regress_doesnotexist + List of subscriptions + Name | Owner | Enabled | Publication | Binary | Streaming | Two phase commit | Synchronous commit | Conninfo +-----------------+---------------------------+---------+-------------+--------+-----------+------------------+--------------------+----------------------------- + regress_testsub | regress_subscription_user | f | {testpub} | f | f | d | off | dbname=regress_doesnotexist (1 row) DROP SUBSCRIPTION regress_testsub; @@ -185,19 +185,19 @@ ERROR: streaming requires a Boolean value CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false, streaming = true); WARNING: tables were not subscribed, you will have to run ALTER SUBSCRIPTION ... REFRESH PUBLICATION to subscribe the tables \dRs+ - List of subscriptions - Name | Owner | Enabled | Publication | Binary | Streaming | Synchronous commit | Conninfo ------------------+---------------------------+---------+-------------+--------+-----------+--------------------+----------------------------- - regress_testsub | regress_subscription_user | f | {testpub} | f | t | off | dbname=regress_doesnotexist + List of subscriptions + Name | Owner | Enabled | Publication | Binary | Streaming | Two phase commit | Synchronous commit | Conninfo +-----------------+---------------------------+---------+-------------+--------+-----------+------------------+--------------------+----------------------------- + regress_testsub | regress_subscription_user | f | {testpub} | f | t | d | off | dbname=regress_doesnotexist (1 row) ALTER SUBSCRIPTION regress_testsub SET (streaming = false); ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE); \dRs+ - List of subscriptions - Name | Owner | Enabled | Publication | Binary | Streaming | Synchronous commit | Conninfo ------------------+---------------------------+---------+-------------+--------+-----------+--------------------+----------------------------- - regress_testsub | regress_subscription_user | f | {testpub} | f | f | off | dbname=regress_doesnotexist + List of subscriptions + Name | Owner | Enabled | Publication | Binary | Streaming | Two phase commit | Synchronous commit | Conninfo +-----------------+---------------------------+---------+-------------+--------+-----------+------------------+--------------------+----------------------------- + regress_testsub | regress_subscription_user | f | {testpub} | f | f | d | off | dbname=regress_doesnotexist (1 row) -- fail - publication already exists @@ -212,10 +212,10 @@ ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refr ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false); ERROR: publication "testpub1" is already in subscription "regress_testsub" \dRs+ - List of subscriptions - Name | Owner | Enabled | Publication | Binary | Streaming | Synchronous commit | Conninfo ------------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+----------------------------- - regress_testsub | regress_subscription_user | f | {testpub,testpub1,testpub2} | f | f | off | dbname=regress_doesnotexist + List of subscriptions + Name | Owner | Enabled | Publication | Binary | Streaming | Two phase commit | Synchronous commit | Conninfo +-----------------+---------------------------+---------+-----------------------------+--------+-----------+------------------+--------------------+----------------------------- + regress_testsub | regress_subscription_user | f | {testpub,testpub1,testpub2} | f | f | d | off | dbname=regress_doesnotexist (1 row) -- fail - publication used more then once @@ -233,10 +233,10 @@ ERROR: unrecognized subscription parameter: "copy_data" -- ok - delete publications ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false); \dRs+ - List of subscriptions - Name | Owner | Enabled | Publication | Binary | Streaming | Synchronous commit | Conninfo ------------------+---------------------------+---------+-------------+--------+-----------+--------------------+----------------------------- - regress_testsub | regress_subscription_user | f | {testpub} | f | f | off | dbname=regress_doesnotexist + List of subscriptions + Name | Owner | Enabled | Publication | Binary | Streaming | Two phase commit | Synchronous commit | Conninfo +-----------------+---------------------------+---------+-------------+--------+-----------+------------------+--------------------+----------------------------- + regress_testsub | regress_subscription_user | f | {testpub} | f | f | d | off | dbname=regress_doesnotexist (1 row) DROP SUBSCRIPTION regress_testsub; @@ -263,6 +263,43 @@ ALTER SUBSCRIPTION regress_testsub DISABLE; ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE); DROP SUBSCRIPTION regress_testsub; DROP FUNCTION func; +-- fail - two_phase must be boolean +CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false, two_phase = foo); +ERROR: two_phase requires a Boolean value +-- now it works +CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false, two_phase = true); +WARNING: tables were not subscribed, you will have to run ALTER SUBSCRIPTION ... REFRESH PUBLICATION to subscribe the tables +\dRs+ + List of subscriptions + Name | Owner | Enabled | Publication | Binary | Streaming | Two phase commit | Synchronous commit | Conninfo +-----------------+---------------------------+---------+-------------+--------+-----------+------------------+--------------------+----------------------------- + regress_testsub | regress_subscription_user | f | {testpub} | f | f | p | off | dbname=regress_doesnotexist +(1 row) + +--fail - alter of two_phase option not supported. +ALTER SUBSCRIPTION regress_testsub SET (two_phase = false); +ERROR: unrecognized subscription parameter: "two_phase" +--fail - cannot set streaming when two_phase enabled +ALTER SUBSCRIPTION regress_testsub SET (streaming = true); +ERROR: cannot set streaming = true for two-phase enabled subscription +ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE); +\dRs+ + List of subscriptions + Name | Owner | Enabled | Publication | Binary | Streaming | Two phase commit | Synchronous commit | Conninfo +-----------------+---------------------------+---------+-------------+--------+-----------+------------------+--------------------+----------------------------- + regress_testsub | regress_subscription_user | f | {testpub} | f | f | p | off | dbname=regress_doesnotexist +(1 row) + +DROP SUBSCRIPTION regress_testsub; +-- fail - two_phase and streaming are mutually exclusive. +CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (streaming = true, two_phase = true); +ERROR: two_phase = true and streaming = true are mutually exclusive options +\dRs+ + List of subscriptions + Name | Owner | Enabled | Publication | Binary | Streaming | Two phase commit | Synchronous commit | Conninfo +------+-------+---------+-------------+--------+-----------+------------------+--------------------+---------- +(0 rows) + RESET SESSION AUTHORIZATION; DROP ROLE regress_subscription_user; DROP ROLE regress_subscription_user2; diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql index 308c098c144ac..b732871407211 100644 --- a/src/test/regress/sql/subscription.sql +++ b/src/test/regress/sql/subscription.sql @@ -202,6 +202,31 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE); DROP SUBSCRIPTION regress_testsub; DROP FUNCTION func; +-- fail - two_phase must be boolean +CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false, two_phase = foo); + +-- now it works +CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false, two_phase = true); + +\dRs+ +--fail - alter of two_phase option not supported. +ALTER SUBSCRIPTION regress_testsub SET (two_phase = false); + +--fail - cannot set streaming when two_phase enabled +ALTER SUBSCRIPTION regress_testsub SET (streaming = true); + +ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE); + +\dRs+ + +DROP SUBSCRIPTION regress_testsub; + +-- fail - two_phase and streaming are mutually exclusive. +CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (streaming = true, two_phase = true); + +\dRs+ + + RESET SESSION AUTHORIZATION; DROP ROLE regress_subscription_user; DROP ROLE regress_subscription_user2; diff --git a/src/test/subscription/t/021_twophase.pl b/src/test/subscription/t/021_twophase.pl new file mode 100644 index 0000000000000..c6ada92ff0a72 --- /dev/null +++ b/src/test/subscription/t/021_twophase.pl @@ -0,0 +1,359 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + +# logical replication of 2PC test +use strict; +use warnings; +use PostgresNode; +use TestLib; +use Test::More tests => 24; + +############################### +# Setup +############################### + +# Initialize publisher node +my $node_publisher = get_new_node('publisher'); +$node_publisher->init(allows_streaming => 'logical'); +$node_publisher->append_conf('postgresql.conf', + qq(max_prepared_transactions = 10)); +$node_publisher->start; + +# Create subscriber node +my $node_subscriber = get_new_node('subscriber'); +$node_subscriber->init(allows_streaming => 'logical'); +$node_subscriber->append_conf('postgresql.conf', + qq(max_prepared_transactions = 10)); +$node_subscriber->start; + +# Create some pre-existing content on publisher +$node_publisher->safe_psql('postgres', + "CREATE TABLE tab_full (a int PRIMARY KEY)"); +$node_publisher->safe_psql('postgres', " + BEGIN; + INSERT INTO tab_full SELECT generate_series(1,10); + PREPARE TRANSACTION 'some_initial_data'; + COMMIT PREPARED 'some_initial_data';"); + +# Setup structure on subscriber +$node_subscriber->safe_psql('postgres', + "CREATE TABLE tab_full (a int PRIMARY KEY)"); + +# Setup logical replication +my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres'; +$node_publisher->safe_psql('postgres', + "CREATE PUBLICATION tap_pub FOR TABLE tab_full"); + +my $appname = 'tap_sub'; +$node_subscriber->safe_psql('postgres', " + CREATE SUBSCRIPTION tap_sub + CONNECTION '$publisher_connstr application_name=$appname' + PUBLICATION tap_pub + WITH (two_phase = on)"); + +# Wait for subscriber to finish initialization +$node_publisher->wait_for_catchup($appname); + +# Also wait for initial table sync to finish +my $synced_query = + "SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');"; +$node_subscriber->poll_query_until('postgres', $synced_query) + or die "Timed out while waiting for subscriber to synchronize data"; + +# Also wait for two-phase to be enabled +my $twophase_query = + "SELECT count(1) = 0 FROM pg_subscription WHERE subtwophasestate NOT IN ('e');"; +$node_subscriber->poll_query_until('postgres', $twophase_query) + or die "Timed out while waiting for subscriber to enable twophase"; + +############################### +# check that 2PC gets replicated to subscriber +# then COMMIT PREPARED +############################### + +$node_publisher->safe_psql('postgres', " + BEGIN; + INSERT INTO tab_full VALUES (11); + PREPARE TRANSACTION 'test_prepared_tab_full';"); + +$node_publisher->wait_for_catchup($appname); + +# check that transaction is in prepared state on subscriber +my $result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(1), 'transaction is prepared on subscriber'); + +# check that 2PC gets committed on subscriber +$node_publisher->safe_psql('postgres', "COMMIT PREPARED 'test_prepared_tab_full';"); + +$node_publisher->wait_for_catchup($appname); + +# check that transaction is committed on subscriber +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab_full where a = 11;"); +is($result, qq(1), 'Row inserted via 2PC has committed on subscriber'); + +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(0), 'transaction is committed on subscriber'); + +############################### +# check that 2PC gets replicated to subscriber +# then ROLLBACK PREPARED +############################### + +$node_publisher->safe_psql('postgres'," + BEGIN; + INSERT INTO tab_full VALUES (12); + PREPARE TRANSACTION 'test_prepared_tab_full';"); + +$node_publisher->wait_for_catchup($appname); + +# check that transaction is in prepared state on subscriber +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(1), 'transaction is prepared on subscriber'); + +# check that 2PC gets aborted on subscriber +$node_publisher->safe_psql('postgres', "ROLLBACK PREPARED 'test_prepared_tab_full';"); + +$node_publisher->wait_for_catchup($appname); + +# check that transaction is aborted on subscriber +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab_full where a = 12;"); +is($result, qq(0), 'Row inserted via 2PC is not present on subscriber'); + +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(0), 'transaction is aborted on subscriber'); + +############################### +# Check that ROLLBACK PREPARED is decoded properly on crash restart +# (publisher and subscriber crash) +############################### + +$node_publisher->safe_psql('postgres', " + BEGIN; + INSERT INTO tab_full VALUES (12); + INSERT INTO tab_full VALUES (13); + PREPARE TRANSACTION 'test_prepared_tab';"); + +$node_subscriber->stop('immediate'); +$node_publisher->stop('immediate'); + +$node_publisher->start; +$node_subscriber->start; + +# rollback post the restart +$node_publisher->safe_psql('postgres', "ROLLBACK PREPARED 'test_prepared_tab';"); +$node_publisher->wait_for_catchup($appname); + +# check inserts are rolled back +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab_full where a IN (12,13);"); +is($result, qq(0), 'Rows rolled back are not on the subscriber'); + +############################### +# Check that COMMIT PREPARED is decoded properly on crash restart +# (publisher and subscriber crash) +############################### + +$node_publisher->safe_psql('postgres', " + BEGIN; + INSERT INTO tab_full VALUES (12); + INSERT INTO tab_full VALUES (13); + PREPARE TRANSACTION 'test_prepared_tab';"); + +$node_subscriber->stop('immediate'); +$node_publisher->stop('immediate'); + +$node_publisher->start; +$node_subscriber->start; + +# commit post the restart +$node_publisher->safe_psql('postgres', "COMMIT PREPARED 'test_prepared_tab';"); +$node_publisher->wait_for_catchup($appname); + +# check inserts are visible +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab_full where a IN (12,13);"); +is($result, qq(2), 'Rows inserted via 2PC are visible on the subscriber'); + +############################### +# Check that COMMIT PREPARED is decoded properly on crash restart +# (subscriber only crash) +############################### + +$node_publisher->safe_psql('postgres', " + BEGIN; + INSERT INTO tab_full VALUES (14); + INSERT INTO tab_full VALUES (15); + PREPARE TRANSACTION 'test_prepared_tab';"); + +$node_subscriber->stop('immediate'); +$node_subscriber->start; + +# commit post the restart +$node_publisher->safe_psql('postgres', "COMMIT PREPARED 'test_prepared_tab';"); +$node_publisher->wait_for_catchup($appname); + +# check inserts are visible +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab_full where a IN (14,15);"); +is($result, qq(2), 'Rows inserted via 2PC are visible on the subscriber'); + +############################### +# Check that COMMIT PREPARED is decoded properly on crash restart +# (publisher only crash) +############################### + +$node_publisher->safe_psql('postgres', " + BEGIN; + INSERT INTO tab_full VALUES (16); + INSERT INTO tab_full VALUES (17); + PREPARE TRANSACTION 'test_prepared_tab';"); + +$node_publisher->stop('immediate'); +$node_publisher->start; + +# commit post the restart +$node_publisher->safe_psql('postgres', "COMMIT PREPARED 'test_prepared_tab';"); +$node_publisher->wait_for_catchup($appname); + +# check inserts are visible +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab_full where a IN (16,17);"); +is($result, qq(2), 'Rows inserted via 2PC are visible on the subscriber'); + +############################### +# Test nested transaction with 2PC +############################### + +# check that 2PC gets replicated to subscriber +$node_publisher->safe_psql('postgres', " + BEGIN; + INSERT INTO tab_full VALUES (21); + SAVEPOINT sp_inner; + INSERT INTO tab_full VALUES (22); + ROLLBACK TO SAVEPOINT sp_inner; + PREPARE TRANSACTION 'outer'; + "); +$node_publisher->wait_for_catchup($appname); + +# check that transaction is in prepared state on subscriber +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(1), 'transaction is prepared on subscriber'); + +# COMMIT +$node_publisher->safe_psql('postgres', "COMMIT PREPARED 'outer';"); + +$node_publisher->wait_for_catchup($appname); + +# check the transaction state on subscriber +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(0), 'transaction is ended on subscriber'); + +# check inserts are visible. 22 should be rolled back. 21 should be committed. +$result = $node_subscriber->safe_psql('postgres', "SELECT a FROM tab_full where a IN (21,22);"); +is($result, qq(21), 'Rows committed are on the subscriber'); + +############################### +# Test using empty GID +############################### + +# check that 2PC gets replicated to subscriber +$node_publisher->safe_psql('postgres', " + BEGIN; + INSERT INTO tab_full VALUES (51); + PREPARE TRANSACTION '';"); +$node_publisher->wait_for_catchup($appname); + +# check that transaction is in prepared state on subscriber +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(1), 'transaction is prepared on subscriber'); + +# ROLLBACK +$node_publisher->safe_psql('postgres', "ROLLBACK PREPARED '';"); + +# check that 2PC gets aborted on subscriber +$node_publisher->wait_for_catchup($appname); + +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(0), 'transaction is aborted on subscriber'); + +############################### +# copy_data=false and two_phase +############################### + +#create some test tables for copy tests +$node_publisher->safe_psql('postgres', "CREATE TABLE tab_copy (a int PRIMARY KEY)"); +$node_publisher->safe_psql('postgres', "INSERT INTO tab_copy SELECT generate_series(1,5);"); +$node_subscriber->safe_psql('postgres', "CREATE TABLE tab_copy (a int PRIMARY KEY)"); +$node_subscriber->safe_psql('postgres', "INSERT INTO tab_copy VALUES (88);"); +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab_copy;"); +is($result, qq(1), 'initial data in subscriber table'); + +# Setup logical replication +$node_publisher->safe_psql('postgres', + "CREATE PUBLICATION tap_pub_copy FOR TABLE tab_copy;"); + +my $appname_copy = 'appname_copy'; +$node_subscriber->safe_psql('postgres', " + CREATE SUBSCRIPTION tap_sub_copy + CONNECTION '$publisher_connstr application_name=$appname_copy' + PUBLICATION tap_pub_copy + WITH (two_phase=on, copy_data=false);"); + +# Wait for subscriber to finish initialization +$node_publisher->wait_for_catchup($appname_copy); + +# Also wait for initial table sync to finish +$node_subscriber->poll_query_until('postgres', $synced_query) + or die "Timed out while waiting for subscriber to synchronize data"; + +# Also wait for two-phase to be enabled +$node_subscriber->poll_query_until('postgres', $twophase_query) + or die "Timed out while waiting for subscriber to enable twophase"; + +# Check that the initial table data was NOT replicated (because we said copy_data=false) +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab_copy;"); +is($result, qq(1), 'initial data in subscriber table'); + +# Now do a prepare on publisher and check that it IS replicated +$node_publisher->safe_psql('postgres', " + BEGIN; + INSERT INTO tab_copy VALUES (99); + PREPARE TRANSACTION 'mygid';"); + +$node_publisher->wait_for_catchup($appname_copy); + +# Check that the transaction has been prepared on the subscriber, there will be 2 +# prepared transactions for the 2 subscriptions. +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(2), 'transaction is prepared on subscriber'); + +# Now commit the insert and verify that it IS replicated +$node_publisher->safe_psql('postgres', "COMMIT PREPARED 'mygid';"); + +$result = $node_publisher->safe_psql('postgres', "SELECT count(*) FROM tab_copy;"); +is($result, qq(6), 'publisher inserted data'); + +$node_publisher->wait_for_catchup($appname_copy); + +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab_copy;"); +is($result, qq(2), 'replicated data in subscriber table'); + +$node_subscriber->safe_psql('postgres', "DROP SUBSCRIPTION tap_sub_copy;"); +$node_publisher->safe_psql('postgres', "DROP PUBLICATION tap_pub_copy;"); + +############################### +# check all the cleanup +############################### + +$node_subscriber->safe_psql('postgres', "DROP SUBSCRIPTION tap_sub"); + +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM pg_subscription"); +is($result, qq(0), 'check subscription was dropped on subscriber'); + +$result = $node_publisher->safe_psql('postgres', "SELECT count(*) FROM pg_replication_slots"); +is($result, qq(0), 'check replication slot was dropped on publisher'); + +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM pg_subscription_rel"); +is($result, qq(0), 'check subscription relation status was dropped on subscriber'); + +$result = $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM pg_replication_origin"); +is($result, qq(0), 'check replication origin was dropped on subscriber'); + +$node_subscriber->stop('fast'); +$node_publisher->stop('fast'); diff --git a/src/test/subscription/t/022_twophase_cascade.pl b/src/test/subscription/t/022_twophase_cascade.pl new file mode 100644 index 0000000000000..e61d28a48b114 --- /dev/null +++ b/src/test/subscription/t/022_twophase_cascade.pl @@ -0,0 +1,235 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + +# Test cascading logical replication of 2PC. +use strict; +use warnings; +use PostgresNode; +use TestLib; +use Test::More tests => 27; + +############################### +# Setup a cascade of pub/sub nodes. +# node_A -> node_B -> node_C +############################### + +# Initialize nodes +# node_A +my $node_A = get_new_node('node_A'); +$node_A->init(allows_streaming => 'logical'); +$node_A->append_conf('postgresql.conf', + qq(max_prepared_transactions = 10)); +$node_A->start; +# node_B +my $node_B = get_new_node('node_B'); +$node_B->init(allows_streaming => 'logical'); +$node_B->append_conf('postgresql.conf', + qq(max_prepared_transactions = 10)); +$node_B->start; +# node_C +my $node_C = get_new_node('node_C'); +$node_C->init(allows_streaming => 'logical'); +$node_C->append_conf('postgresql.conf', + qq(max_prepared_transactions = 10)); +$node_C->start; + +# Create some pre-existing content on node_A +$node_A->safe_psql('postgres', + "CREATE TABLE tab_full (a int PRIMARY KEY)"); +$node_A->safe_psql('postgres', " + INSERT INTO tab_full SELECT generate_series(1,10);"); + +# Create the same tables on node_B amd node_C +$node_B->safe_psql('postgres', + "CREATE TABLE tab_full (a int PRIMARY KEY)"); +$node_C->safe_psql('postgres', + "CREATE TABLE tab_full (a int PRIMARY KEY)"); + +# Setup logical replication + +# node_A (pub) -> node_B (sub) +my $node_A_connstr = $node_A->connstr . ' dbname=postgres'; +$node_A->safe_psql('postgres', + "CREATE PUBLICATION tap_pub_A FOR TABLE tab_full"); +my $appname_B = 'tap_sub_B'; +$node_B->safe_psql('postgres', " + CREATE SUBSCRIPTION tap_sub_B + CONNECTION '$node_A_connstr application_name=$appname_B' + PUBLICATION tap_pub_A + WITH (two_phase = on)"); + +# node_B (pub) -> node_C (sub) +my $node_B_connstr = $node_B->connstr . ' dbname=postgres'; +$node_B->safe_psql('postgres', + "CREATE PUBLICATION tap_pub_B FOR TABLE tab_full"); +my $appname_C = 'tap_sub_C'; +$node_C->safe_psql('postgres', " + CREATE SUBSCRIPTION tap_sub_C + CONNECTION '$node_B_connstr application_name=$appname_C' + PUBLICATION tap_pub_B + WITH (two_phase = on)"); + +# Wait for subscribers to finish initialization +$node_A->wait_for_catchup($appname_B); +$node_B->wait_for_catchup($appname_C); + +# Also wait for two-phase to be enabled +my $twophase_query = "SELECT count(1) = 0 FROM pg_subscription WHERE subtwophasestate NOT IN ('e');"; +$node_B->poll_query_until('postgres', $twophase_query) + or die "Timed out while waiting for subscriber to enable twophase"; +$node_C->poll_query_until('postgres', $twophase_query) + or die "Timed out while waiting for subscriber to enable twophase"; + +is(1,1, "Cascade setup is complete"); + +my $result; + +############################### +# check that 2PC gets replicated to subscriber(s) +# then COMMIT PREPARED +############################### + +# 2PC PREPARE +$node_A->safe_psql('postgres', " + BEGIN; + INSERT INTO tab_full VALUES (11); + PREPARE TRANSACTION 'test_prepared_tab_full';"); + +$node_A->wait_for_catchup($appname_B); +$node_B->wait_for_catchup($appname_C); + +# check the transaction state is prepared on subscriber(s) +$result = $node_B->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(1), 'transaction is prepared on subscriber B'); +$result = $node_C->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(1), 'transaction is prepared on subscriber C'); + +# 2PC COMMIT +$node_A->safe_psql('postgres', "COMMIT PREPARED 'test_prepared_tab_full';"); + +$node_A->wait_for_catchup($appname_B); +$node_B->wait_for_catchup($appname_C); + +# check that transaction was committed on subscriber(s) +$result = $node_B->safe_psql('postgres', "SELECT count(*) FROM tab_full where a = 11;"); +is($result, qq(1), 'Row inserted via 2PC has committed on subscriber B'); +$result = $node_C->safe_psql('postgres', "SELECT count(*) FROM tab_full where a = 11;"); +is($result, qq(1), 'Row inserted via 2PC has committed on subscriber C'); + +# check the transaction state is ended on subscriber(s) +$result = $node_B->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(0), 'transaction is committed on subscriber B'); +$result = $node_C->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(0), 'transaction is committed on subscriber C'); + +############################### +# check that 2PC gets replicated to subscriber(s) +# then ROLLBACK PREPARED +############################### + +# 2PC PREPARE +$node_A->safe_psql('postgres', " + BEGIN; + INSERT INTO tab_full VALUES (12); + PREPARE TRANSACTION 'test_prepared_tab_full';"); + +$node_A->wait_for_catchup($appname_B); +$node_B->wait_for_catchup($appname_C); + +# check the transaction state is prepared on subscriber(s) +$result = $node_B->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(1), 'transaction is prepared on subscriber B'); +$result = $node_C->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(1), 'transaction is prepared on subscriber C'); + +# 2PC ROLLBACK +$node_A->safe_psql('postgres', "ROLLBACK PREPARED 'test_prepared_tab_full';"); + +$node_A->wait_for_catchup($appname_B); +$node_B->wait_for_catchup($appname_C); + +# check that transaction is aborted on subscriber(s) +$result = $node_B->safe_psql('postgres', "SELECT count(*) FROM tab_full where a = 12;"); +is($result, qq(0), 'Row inserted via 2PC is not present on subscriber B'); +$result = $node_C->safe_psql('postgres', "SELECT count(*) FROM tab_full where a = 12;"); +is($result, qq(0), 'Row inserted via 2PC is not present on subscriber C'); + +# check the transaction state is ended on subscriber(s) +$result = $node_B->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(0), 'transaction is ended on subscriber B'); +$result = $node_C->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(0), 'transaction is ended on subscriber C'); + +############################### +# Test nested transactions with 2PC +############################### + +# 2PC PREPARE with a nested ROLLBACK TO SAVEPOINT +$node_A->safe_psql('postgres', " + BEGIN; + INSERT INTO tab_full VALUES (21); + SAVEPOINT sp_inner; + INSERT INTO tab_full VALUES (22); + ROLLBACK TO SAVEPOINT sp_inner; + PREPARE TRANSACTION 'outer'; + "); + +$node_A->wait_for_catchup($appname_B); +$node_B->wait_for_catchup($appname_C); + +# check the transaction state prepared on subscriber(s) +$result = $node_B->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(1), 'transaction is prepared on subscriber B'); +$result = $node_C->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(1), 'transaction is prepared on subscriber C'); + +# 2PC COMMIT +$node_A->safe_psql('postgres', "COMMIT PREPARED 'outer';"); + +$node_A->wait_for_catchup($appname_B); +$node_B->wait_for_catchup($appname_C); + +# check the transaction state is ended on subscriber +$result = $node_B->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(0), 'transaction is ended on subscriber B'); +$result = $node_C->safe_psql('postgres', "SELECT count(*) FROM pg_prepared_xacts;"); +is($result, qq(0), 'transaction is ended on subscriber C'); + +# check inserts are visible at subscriber(s). +# 22 should be rolled back. +# 21 should be committed. +$result = $node_B->safe_psql('postgres', "SELECT a FROM tab_full where a IN (21,22);"); +is($result, qq(21), 'Rows committed are present on subscriber B'); +$result = $node_C->safe_psql('postgres', "SELECT a FROM tab_full where a IN (21,22);"); +is($result, qq(21), 'Rows committed are present on subscriber C'); + +############################### +# check all the cleanup +############################### + +# cleanup the node_B => node_C pub/sub +$node_C->safe_psql('postgres', "DROP SUBSCRIPTION tap_sub_C"); +$result = $node_C->safe_psql('postgres', "SELECT count(*) FROM pg_subscription"); +is($result, qq(0), 'check subscription was dropped on subscriber node C'); +$result = $node_C->safe_psql('postgres', "SELECT count(*) FROM pg_subscription_rel"); +is($result, qq(0), 'check subscription relation status was dropped on subscriber node C'); +$result = $node_C->safe_psql('postgres', "SELECT count(*) FROM pg_replication_origin"); +is($result, qq(0), 'check replication origin was dropped on subscriber node C'); +$result = $node_B->safe_psql('postgres', "SELECT count(*) FROM pg_replication_slots"); +is($result, qq(0), 'check replication slot was dropped on publisher node B'); + +# cleanup the node_A => node_B pub/sub +$node_B->safe_psql('postgres', "DROP SUBSCRIPTION tap_sub_B"); +$result = $node_B->safe_psql('postgres', "SELECT count(*) FROM pg_subscription"); +is($result, qq(0), 'check subscription was dropped on subscriber node B'); +$result = $node_B->safe_psql('postgres', "SELECT count(*) FROM pg_subscription_rel"); +is($result, qq(0), 'check subscription relation status was dropped on subscriber node B'); +$result = $node_B->safe_psql('postgres', "SELECT count(*) FROM pg_replication_origin"); +is($result, qq(0), 'check replication origin was dropped on subscriber node B'); +$result = $node_A->safe_psql('postgres', "SELECT count(*) FROM pg_replication_slots"); +is($result, qq(0), 'check replication slot was dropped on publisher node A'); + +# shutdown +$node_C->stop('fast'); +$node_B->stop('fast'); +$node_A->stop('fast'); diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index b287c29f64671..37cf4b2f76bd3 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -1390,12 +1390,15 @@ LogicalOutputPluginWriterUpdateProgress LogicalOutputPluginWriterWrite LogicalRepBeginData LogicalRepCommitData +LogicalRepCommitPreparedTxnData LogicalRepCtxStruct LogicalRepMsgType LogicalRepPartMapEntry +LogicalRepPreparedTxnData LogicalRepRelId LogicalRepRelMapEntry LogicalRepRelation +LogicalRepRollbackPreparedTxnData LogicalRepTupleData LogicalRepTyp LogicalRepWorker From 55b2a2340758da8ff11357d719d169f264ac7112 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 14 Jul 2021 09:15:14 +0200 Subject: [PATCH 656/671] Fix lack of message pluralization --- src/backend/storage/ipc/signalfuncs.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/backend/storage/ipc/signalfuncs.c b/src/backend/storage/ipc/signalfuncs.c index 43386c5bb3274..de69d60e79e79 100644 --- a/src/backend/storage/ipc/signalfuncs.c +++ b/src/backend/storage/ipc/signalfuncs.c @@ -180,8 +180,10 @@ pg_wait_until_termination(int pid, int64 timeout) } while (remainingtime > 0); ereport(WARNING, - (errmsg("backend with PID %d did not terminate within %lld milliseconds", - pid, (long long int) timeout))); + (errmsg_plural("backend with PID %d did not terminate within %lld millisecond", + "backend with PID %d did not terminate within %lld milliseconds", + timeout, + pid, (long long int) timeout))); return false; } From b4deefc39b933b9808645667117f2d8208092794 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Wed, 14 Jul 2021 11:04:15 +0200 Subject: [PATCH 657/671] Clarify description of pg_stat_statements columns Reported-By: Peter Eisentraut Backpatch-through: 14 Discussion: https://postgr.es/m/8f5e63b8-e8ed-0f80-d8c4-68222624c200@enterprisedb.com --- doc/src/sgml/pgstatstatements.sgml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/pgstatstatements.sgml b/doc/src/sgml/pgstatstatements.sgml index 1696a6e63694d..542b197282cdc 100644 --- a/doc/src/sgml/pgstatstatements.sgml +++ b/doc/src/sgml/pgstatstatements.sgml @@ -42,9 +42,10 @@ The statistics gathered by the module are made available via a view named pg_stat_statements. This view - contains one row for each distinct database ID, user ID, query ID and - toplevel (up to the maximum number of distinct statements that the module - can track). The columns of the view are shown in + contains one row for each distinct combination of database ID, user + ID, query ID and whether it's a top level statement or not (up to + the maximum number of distinct statements that the module can track). + The columns of the view are shown in . From eec57115e4c866f26bdc8bcbe3e2e7be4c6d0450 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Wed, 14 Jul 2021 13:08:28 +0300 Subject: [PATCH 658/671] In psql \copy from, send data to server in larger chunks. Previously, we would send each line as a separate CopyData message. That's pretty wasteful if the table is narrow, as each CopyData message has 5 bytes of overhead. For efficiency, buffer up and pack 8 kB of input data into each CopyData message. The server also sends each line as a separate CopyData message in COPY TO STDOUT, and that's similarly wasteful. But that's documented in the FE/BE protocol description, so changing that would be a wire protocol break. Reviewed-by: Aleksander Alekseev Discussion: https://www.postgresql.org/message-id/40b2cec0-d0fb-3191-2ae1-9a3fe16a7e48%40iki.fi --- src/bin/psql/copy.c | 99 +++++++++++++++++++++++++-------------------- 1 file changed, 56 insertions(+), 43 deletions(-) diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c index e1fee8e0992ec..64ab40c4f75fe 100644 --- a/src/bin/psql/copy.c +++ b/src/bin/psql/copy.c @@ -581,13 +581,21 @@ handleCopyIn(PGconn *conn, FILE *copystream, bool isbinary, PGresult **res) else { bool copydone = false; + int buflen; + bool at_line_begin = true; + /* + * In text mode, we have to read the input one line at a time, so that + * we can stop reading at the EOF marker (\.). We mustn't read beyond + * the EOF marker, because if the data was inlined in a SQL script, we + * would eat up the commands after the EOF marker. + */ + buflen = 0; while (!copydone) - { /* for each input line ... */ - bool firstload; - bool linedone; + { + char *fgresult; - if (showprompt) + if (at_line_begin && showprompt) { const char *prompt = get_prompt(PROMPT_COPY, NULL); @@ -595,63 +603,68 @@ handleCopyIn(PGconn *conn, FILE *copystream, bool isbinary, PGresult **res) fflush(stdout); } - firstload = true; - linedone = false; - - while (!linedone) - { /* for each bufferload in line ... */ - int linelen; - char *fgresult; - - /* enable longjmp while waiting for input */ - sigint_interrupt_enabled = true; + /* enable longjmp while waiting for input */ + sigint_interrupt_enabled = true; - fgresult = fgets(buf, sizeof(buf), copystream); + fgresult = fgets(&buf[buflen], COPYBUFSIZ - buflen, copystream); - sigint_interrupt_enabled = false; + sigint_interrupt_enabled = false; - if (!fgresult) - { - copydone = true; - break; - } + if (!fgresult) + copydone = true; + else + { + int linelen; - linelen = strlen(buf); + linelen = strlen(fgresult); + buflen += linelen; /* current line is done? */ - if (linelen > 0 && buf[linelen - 1] == '\n') - linedone = true; - - /* check for EOF marker, but not on a partial line */ - if (firstload) + if (buf[buflen - 1] == '\n') { - /* - * This code erroneously assumes '\.' on a line alone - * inside a quoted CSV string terminates the \copy. - * https://www.postgresql.org/message-id/E1TdNVQ-0001ju-GO@wrigleys.postgresql.org - */ - if (strcmp(buf, "\\.\n") == 0 || - strcmp(buf, "\\.\r\n") == 0) + /* check for EOF marker, but not on a partial line */ + if (at_line_begin) { - copydone = true; - break; + /* + * This code erroneously assumes '\.' on a line alone + * inside a quoted CSV string terminates the \copy. + * https://www.postgresql.org/message-id/E1TdNVQ-0001ju-GO@wrigleys.postgresql.org + */ + if ((linelen == 3 && memcmp(fgresult, "\\.\n", 3) == 0) || + (linelen == 4 && memcmp(fgresult, "\\.\r\n", 4) == 0)) + { + copydone = true; + } } - firstload = false; + if (copystream == pset.cur_cmd_source) + { + pset.lineno++; + pset.stmt_lineno++; + } + at_line_begin = true; } + else + at_line_begin = false; + } - if (PQputCopyData(conn, buf, linelen) <= 0) + /* + * If the buffer is full, or we've reached the EOF, flush it. + * + * Make sure there's always space for four more bytes in the + * buffer, plus a NUL terminator. That way, an EOF marker is + * never split across two fgets() calls, which simplies the logic. + */ + if (buflen >= COPYBUFSIZ - 5 || (copydone && buflen > 0)) + { + if (PQputCopyData(conn, buf, buflen) <= 0) { OK = false; copydone = true; break; } - } - if (copystream == pset.cur_cmd_source) - { - pset.lineno++; - pset.stmt_lineno++; + buflen = 0; } } } From c203dcddf997180000bc574a60313f3437e35af9 Mon Sep 17 00:00:00 2001 From: John Naylor Date: Wed, 14 Jul 2021 09:52:04 -0400 Subject: [PATCH 659/671] Remove unused function parameter in get_qual_from_partbound Commit 0563a3a8b changed how partition constraints were generated such that this function no longer computes the mapping of parent attnos to child attnos. This is an external function that extensions could use, so this is potentially a breaking change. No external callers are known, however, and this will make it simpler to write such callers in the future. Author: Hou Zhijie Reviewed-by: David Rowley, Michael Paquier, Soumyadeep Chakraborty Discussion: https://www.postgresql.org/message-id/flat/OS0PR01MB5716A75A45BE46101A1B489894379@OS0PR01MB5716.jpnprd01.prod.outlook.com --- src/backend/commands/tablecmds.c | 2 +- src/backend/partitioning/partbounds.c | 3 +-- src/backend/utils/cache/partcache.c | 2 +- src/include/partitioning/partbounds.h | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index dcf14b9dc0e54..96375814a8f31 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -17350,7 +17350,7 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd, * If the parent itself is a partition, make sure to include its * constraint as well. */ - partBoundConstraint = get_qual_from_partbound(attachrel, rel, cmd->bound); + partBoundConstraint = get_qual_from_partbound(rel, cmd->bound); partConstraint = list_concat(partBoundConstraint, RelationGetPartitionQual(rel)); diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index 38baaefcda3a9..1ec141b9eb0ac 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -246,8 +246,7 @@ static List *get_range_nulltest(PartitionKey key); * expressions as partition constraint */ List * -get_qual_from_partbound(Relation rel, Relation parent, - PartitionBoundSpec *spec) +get_qual_from_partbound(Relation parent, PartitionBoundSpec *spec) { PartitionKey key = RelationGetPartitionKey(parent); List *my_qual = NIL; diff --git a/src/backend/utils/cache/partcache.c b/src/backend/utils/cache/partcache.c index 21e60f0c5e817..f2b48678864b5 100644 --- a/src/backend/utils/cache/partcache.c +++ b/src/backend/utils/cache/partcache.c @@ -376,7 +376,7 @@ generate_partition_qual(Relation rel) bound = castNode(PartitionBoundSpec, stringToNode(TextDatumGetCString(boundDatum))); - my_qual = get_qual_from_partbound(rel, parent, bound); + my_qual = get_qual_from_partbound(parent, bound); } ReleaseSysCache(tuple); diff --git a/src/include/partitioning/partbounds.h b/src/include/partitioning/partbounds.h index ebf3ff1f4973c..2f00f9aa3d785 100644 --- a/src/include/partitioning/partbounds.h +++ b/src/include/partitioning/partbounds.h @@ -85,7 +85,7 @@ extern int get_hash_partition_greatest_modulus(PartitionBoundInfo b); extern uint64 compute_partition_hash_value(int partnatts, FmgrInfo *partsupfunc, Oid *partcollation, Datum *values, bool *isnull); -extern List *get_qual_from_partbound(Relation rel, Relation parent, +extern List *get_qual_from_partbound(Relation parent, PartitionBoundSpec *spec); extern PartitionBoundInfo partition_bounds_create(PartitionBoundSpec **boundspecs, int nparts, PartitionKey key, int **mapping); From be850f1822e4b54d1d570eefa8a7242788011634 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 14 Jul 2021 14:15:12 -0400 Subject: [PATCH 660/671] Copy a Param's location field when replacing it with a Const. This allows Param substitution to produce just the same result as writing a constant value literally would have done. While it hardly matters so far as the current core code is concerned, extensions might take more interest in node location fields. Julien Rouhaud Discussion: https://postgr.es/m/20170311220932.GJ15188@nol.local --- src/backend/optimizer/util/clauses.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 8506165d68363..7187f17da5742 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -2329,6 +2329,7 @@ eval_const_expressions_mutator(Node *node, int16 typLen; bool typByVal; Datum pval; + Const *con; get_typlenbyval(param->paramtype, &typLen, &typByVal); @@ -2336,13 +2337,15 @@ eval_const_expressions_mutator(Node *node, pval = prm->value; else pval = datumCopy(prm->value, typByVal, typLen); - return (Node *) makeConst(param->paramtype, - param->paramtypmod, - param->paramcollid, - (int) typLen, - pval, - prm->isnull, - typByVal); + con = makeConst(param->paramtype, + param->paramtypmod, + param->paramcollid, + (int) typLen, + pval, + prm->isnull, + typByVal); + con->location = param->location; + return (Node *) con; } } } From 9aa8268faa0ec2904f55e85be5ec7b365c98edd1 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 14 Jul 2021 23:54:56 +0200 Subject: [PATCH 661/671] Fix some nonstandard C code indentation in grammar file --- src/backend/parser/gram.y | 44 +++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index eb241954387b8..10da5c5c51df6 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -3672,14 +3672,14 @@ ColConstraintElem: Constraint *n = makeNode(Constraint); n->contype = CONSTR_FOREIGN; n->location = @1; - n->pktable = $2; - n->fk_attrs = NIL; - n->pk_attrs = $3; - n->fk_matchtype = $4; - n->fk_upd_action = (char) ($5 >> 8); - n->fk_del_action = (char) ($5 & 0xFF); - n->skip_validation = false; - n->initially_valid = true; + n->pktable = $2; + n->fk_attrs = NIL; + n->pk_attrs = $3; + n->fk_matchtype = $4; + n->fk_upd_action = (char) ($5 >> 8); + n->fk_del_action = (char) ($5 & 0xFF); + n->skip_validation = false; + n->initially_valid = true; $$ = (Node *)n; } ; @@ -3865,13 +3865,13 @@ ConstraintElem: Constraint *n = makeNode(Constraint); n->contype = CONSTR_EXCLUSION; n->location = @1; - n->access_method = $2; - n->exclusions = $4; - n->including = $6; - n->options = $7; - n->indexname = NULL; - n->indexspace = $8; - n->where_clause = $9; + n->access_method = $2; + n->exclusions = $4; + n->including = $6; + n->options = $7; + n->indexname = NULL; + n->indexspace = $8; + n->where_clause = $9; processCASbits($10, @10, "EXCLUDE", &n->deferrable, &n->initdeferred, NULL, NULL, yyscanner); @@ -3883,12 +3883,12 @@ ConstraintElem: Constraint *n = makeNode(Constraint); n->contype = CONSTR_FOREIGN; n->location = @1; - n->pktable = $7; - n->fk_attrs = $4; - n->pk_attrs = $8; - n->fk_matchtype = $9; - n->fk_upd_action = (char) ($10 >> 8); - n->fk_del_action = (char) ($10 & 0xFF); + n->pktable = $7; + n->fk_attrs = $4; + n->pk_attrs = $8; + n->fk_matchtype = $9; + n->fk_upd_action = (char) ($10 >> 8); + n->fk_del_action = (char) ($10 & 0xFF); processCASbits($11, @11, "FOREIGN KEY", &n->deferrable, &n->initdeferred, &n->skip_validation, NULL, @@ -5747,7 +5747,7 @@ DefineStmt: { CreateRangeStmt *n = makeNode(CreateRangeStmt); n->typeName = $3; - n->params = $6; + n->params = $6; $$ = (Node *)n; } | CREATE TEXT_P SEARCH PARSER any_name definition From 5865e064abfbbe11ebfc09881be009c0f69b4dc2 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Thu, 15 Jul 2021 12:23:47 +1200 Subject: [PATCH 662/671] Portability fixes for sigwait. Build farm animals running ancient HPUX and Solaris have a non-standard sigwait() from draft versions of POSIX, so they didn't like commit 7c09d279. To avoid the problem in general, only try to use sigwait() if it's declared by and matches the expected declaration. To select the modern declaration on Solaris (even in non-threaded programs), move -D_POSIX_PTHREAD_SEMANTICS into the right place to affect all translation units. Also fix the error checking. Modern sigwait() doesn't set errno. Thanks to Tom Lane for help with this. Discussion: https://postgr.es/m/3187588.1626136248%40sss.pgh.pa.us --- config/thread_test.c | 4 -- configure | 75 +++++++++++++++++++++++++++++++++++--- configure.ac | 38 +++++++++++++++++-- src/bin/psql/command.c | 13 ++++--- src/bin/psql/startup.c | 4 +- src/include/pg_config.h.in | 7 ++++ src/tools/msvc/Solution.pm | 2 + 7 files changed, 122 insertions(+), 21 deletions(-) diff --git a/config/thread_test.c b/config/thread_test.c index 784f4fe8ce3cc..e2a9e62f49bde 100644 --- a/config/thread_test.c +++ b/config/thread_test.c @@ -43,10 +43,6 @@ #include #endif -/* Test for POSIX.1c 2-arg sigwait() and fail on single-arg version */ -#include -int sigwait(const sigset_t *set, int *sig); - #define TEMP_FILENAME_1 "thread_test.1" #define TEMP_FILENAME_2 "thread_test.2" diff --git a/configure b/configure index 1ea28a0d67d00..c85eb1bf55bfe 100755 --- a/configure +++ b/configure @@ -7194,6 +7194,12 @@ $as_echo "#define PROFILE_PID_DIR 1" >>confdefs.h fi fi +# On Solaris, we need this #define to get POSIX-conforming versions +# of many interfaces (sigwait, getpwuid_r, ...). +if test "$PORTNAME" = "solaris"; then + CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS" +fi + # We already have this in Makefile.win32, but configure needs it too if test "$PORTNAME" = "win32"; then CPPFLAGS="$CPPFLAGS -I$srcdir/src/include/port/win32" @@ -11296,9 +11302,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu # set thread flags # Some platforms use these, so just define them. They can't hurt if they -# are not supported. For example, on Solaris -D_POSIX_PTHREAD_SEMANTICS -# enables 5-arg getpwuid_r, among other things. -PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS" +# are not supported. +PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT -D_THREAD_SAFE" # Check for *_r functions _CFLAGS="$CFLAGS" @@ -15861,9 +15866,11 @@ $as_echo "#define HAVE_FSEEKO 1" >>confdefs.h fi -# posix_fadvise() is a no-op on Solaris, so don't incur function overhead -# by calling it, 2009-04-02 -# http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/posix_fadvise.c +# Make sure there's a declaration for sigwait(), then make sure +# that it conforms to the POSIX standard (there seem to still be +# some platforms out there with pre-POSIX sigwait()). On Solaris, +# _POSIX_PTHREAD_SEMANTICS affects the result, but we already +# added that to CPPFLAGS. # The Clang compiler raises a warning for an undeclared identifier that matches # a compiler builtin function. All extant Clang versions are affected, as of # Clang 3.6.0. Test a builtin known to every version. This problem affects the @@ -15952,6 +15959,62 @@ case $ac_cv_c_decl_report in *) ac_c_decl_warn_flag= ;; esac +ac_fn_c_check_decl "$LINENO" "sigwait" "ac_cv_have_decl_sigwait" "#include +" +if test "x$ac_cv_have_decl_sigwait" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SIGWAIT $ac_have_decl +_ACEOF + +if test "x$ac_cv_have_decl_sigwait" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for POSIX-conforming sigwait declaration" >&5 +$as_echo_n "checking for POSIX-conforming sigwait declaration... " >&6; } +if ${pgac_cv_have_posix_decl_sigwait+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + int sigwait(const sigset_t *set, int *sig); + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + pgac_cv_have_posix_decl_sigwait=yes +else + pgac_cv_have_posix_decl_sigwait=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_have_posix_decl_sigwait" >&5 +$as_echo "$pgac_cv_have_posix_decl_sigwait" >&6; } +fi +if test "x$pgac_cv_have_posix_decl_sigwait" = xyes; then + +$as_echo "#define HAVE_POSIX_DECL_SIGWAIT 1" >>confdefs.h + +else + # On non-Windows, libpq requires POSIX sigwait() for thread safety. + if test "$enable_thread_safety" = yes -a "$PORTNAME" != "win32"; then + as_fn_error $? "POSIX-conforming sigwait is required to enable thread safety." "$LINENO" 5 + fi +fi + +# posix_fadvise() is a no-op on Solaris, so don't incur function overhead +# by calling it, 2009-04-02 +# http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/posix_fadvise.c if test "$PORTNAME" != "solaris"; then : for ac_func in posix_fadvise diff --git a/configure.ac b/configure.ac index 57336e1fb6ea6..099c4a5a45d37 100644 --- a/configure.ac +++ b/configure.ac @@ -610,6 +610,12 @@ if test "$enable_profiling" = yes && test "$ac_cv_prog_cc_g" = yes; then fi fi +# On Solaris, we need this #define to get POSIX-conforming versions +# of many interfaces (sigwait, getpwuid_r, ...). +if test "$PORTNAME" = "solaris"; then + CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS" +fi + # We already have this in Makefile.win32, but configure needs it too if test "$PORTNAME" = "win32"; then CPPFLAGS="$CPPFLAGS -I$srcdir/src/include/port/win32" @@ -1122,9 +1128,8 @@ AS_IF([test "$enable_thread_safety" = yes -a "$PORTNAME" != "win32"], AX_PTHREAD # set thread flags # Some platforms use these, so just define them. They can't hurt if they -# are not supported. For example, on Solaris -D_POSIX_PTHREAD_SEMANTICS -# enables 5-arg getpwuid_r, among other things. -PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS" +# are not supported. +PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT -D_THREAD_SAFE" # Check for *_r functions _CFLAGS="$CFLAGS" @@ -1741,6 +1746,33 @@ PGAC_CHECK_BUILTIN_FUNC([__builtin_popcount], [unsigned int x]) # in case it finds that _LARGEFILE_SOURCE has to be #define'd for that. AC_FUNC_FSEEKO +# Make sure there's a declaration for sigwait(), then make sure +# that it conforms to the POSIX standard (there seem to still be +# some platforms out there with pre-POSIX sigwait()). On Solaris, +# _POSIX_PTHREAD_SEMANTICS affects the result, but we already +# added that to CPPFLAGS. +AC_CHECK_DECLS(sigwait, [], [], [#include ]) +if test "x$ac_cv_have_decl_sigwait" = xyes; then + AC_CACHE_CHECK([for POSIX-conforming sigwait declaration], + [pgac_cv_have_posix_decl_sigwait], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #include + int sigwait(const sigset_t *set, int *sig); + ], + [])], + [pgac_cv_have_posix_decl_sigwait=yes], + [pgac_cv_have_posix_decl_sigwait=no])]) +fi +if test "x$pgac_cv_have_posix_decl_sigwait" = xyes; then + AC_DEFINE(HAVE_POSIX_DECL_SIGWAIT, 1, + [Define to 1 if you have a POSIX-conforming sigwait declaration.]) +else + # On non-Windows, libpq requires POSIX sigwait() for thread safety. + if test "$enable_thread_safety" = yes -a "$PORTNAME" != "win32"; then + AC_MSG_ERROR([POSIX-conforming sigwait is required to enable thread safety.]) + fi +fi + # posix_fadvise() is a no-op on Solaris, so don't incur function overhead # by calling it, 2009-04-02 # http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/posix_fadvise.c diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index d704c4220c738..49d4c0e3ce258 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -4899,7 +4899,7 @@ do_watch(PQExpBuffer query_buf, double sleep) FILE *pagerpipe = NULL; int title_len; int res = 0; -#ifndef WIN32 +#ifdef HAVE_POSIX_DECL_SIGWAIT sigset_t sigalrm_sigchld_sigint; sigset_t sigalrm_sigchld; sigset_t sigint; @@ -4913,7 +4913,7 @@ do_watch(PQExpBuffer query_buf, double sleep) return false; } -#ifndef WIN32 +#ifdef HAVE_POSIX_DECL_SIGWAIT sigemptyset(&sigalrm_sigchld_sigint); sigaddset(&sigalrm_sigchld_sigint, SIGCHLD); sigaddset(&sigalrm_sigchld_sigint, SIGALRM); @@ -4952,7 +4952,7 @@ do_watch(PQExpBuffer query_buf, double sleep) * PAGER environment variables, because traditional pagers probably won't * be very useful for showing a stream of results. */ -#ifndef WIN32 +#ifdef HAVE_POSIX_DECL_SIGWAIT pagerprog = getenv("PSQL_WATCH_PAGER"); #endif if (pagerprog && myopt.topt.pager) @@ -5023,7 +5023,7 @@ do_watch(PQExpBuffer query_buf, double sleep) if (pagerpipe && ferror(pagerpipe)) break; -#ifdef WIN32 +#ifndef HAVE_POSIX_DECL_SIGWAIT /* * Set up cancellation of 'watch' via SIGINT. We redo this each time @@ -5059,7 +5059,8 @@ do_watch(PQExpBuffer query_buf, double sleep) { int signal_received; - if (sigwait(&sigalrm_sigchld_sigint, &signal_received) < 0) + errno = sigwait(&sigalrm_sigchld_sigint, &signal_received); + if (errno != 0) { /* Some other signal arrived? */ if (errno == EINTR) @@ -5091,7 +5092,7 @@ do_watch(PQExpBuffer query_buf, double sleep) restore_sigpipe_trap(); } -#ifndef WIN32 +#ifdef HAVE_POSIX_DECL_SIGWAIT /* Disable the interval timer. */ memset(&interval, 0, sizeof(interval)); setitimer(ITIMER_REAL, &interval, NULL); diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c index 5f36f0d1c6dcb..2931530f33853 100644 --- a/src/bin/psql/startup.c +++ b/src/bin/psql/startup.c @@ -110,7 +110,7 @@ log_locus_callback(const char **filename, uint64 *lineno) } } -#ifndef WIN32 +#ifdef HAVE_POSIX_DECL_SIGWAIT static void empty_signal_handler(SIGNAL_ARGS) { @@ -309,7 +309,7 @@ main(int argc, char *argv[]) psql_setup_cancel_handler(); -#ifndef WIN32 +#ifdef HAVE_POSIX_DECL_SIGWAIT /* * do_watch() needs signal handlers installed (otherwise sigwait() will diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index d69d461ff2cd2..15ffdd895aad9 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -158,6 +158,10 @@ don't. */ #undef HAVE_DECL_RTLD_NOW +/* Define to 1 if you have the declaration of `sigwait', and to 0 if you + don't. */ +#undef HAVE_DECL_SIGWAIT + /* Define to 1 if you have the declaration of `strlcat', and to 0 if you don't. */ #undef HAVE_DECL_STRLCAT @@ -414,6 +418,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_POLL_H +/* Define to 1 if you have a POSIX-conforming sigwait declaration. */ +#undef HAVE_POSIX_DECL_SIGWAIT + /* Define to 1 if you have the `posix_fadvise' function. */ #undef HAVE_POSIX_FADVISE diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index 294b968dcdb5c..c967743467b32 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -249,6 +249,7 @@ sub GenerateFiles HAVE_DECL_PWRITEV => 0, HAVE_DECL_RTLD_GLOBAL => 0, HAVE_DECL_RTLD_NOW => 0, + HAVE_DECL_SIGWAIT => 0, HAVE_DECL_STRLCAT => undef, HAVE_DECL_STRLCPY => undef, HAVE_DECL_STRNLEN => 1, @@ -332,6 +333,7 @@ sub GenerateFiles HAVE_PAM_PAM_APPL_H => undef, HAVE_POLL => undef, HAVE_POLL_H => undef, + HAVE_POSIX_DECL_SIGWAIT => undef, HAVE_POSIX_FADVISE => undef, HAVE_POSIX_FALLOCATE => undef, HAVE_PPC_LWARX_MUTEX_HINT => undef, From dc2db1eac365b97c9129393acfe11102859f9e23 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 15 Jul 2021 15:00:45 +0900 Subject: [PATCH 663/671] Remove unnecessary assertion in postmaster.c A code path asserted that the archiver was dead, but a check made that impossible to happen. Author: Bharath Rupireddy Discussion: https://postgr.es/m/CALj2ACW=CYE1ars+2XyPTEPq0wQvru4c0dPZ=Nrn3EqNBkksvQ@mail.gmail.com Backpatch-throgh: 14 --- src/backend/postmaster/postmaster.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 5a050898fec79..122c2b05bdb70 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -3934,7 +3934,6 @@ PostmasterStateMachine(void) Assert(CheckpointerPID == 0); Assert(WalWriterPID == 0); Assert(AutoVacPID == 0); - Assert(PgArchPID == 0); /* syslogger is not considered here */ pmState = PM_NO_CHILDREN; } From ffc9ddaea33f6dfd3dfa95828a0970fbb617bf8a Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 15 Jul 2021 15:53:20 +0900 Subject: [PATCH 664/671] Add TAP tests for ZLIB compression for pg_receivewal There is a non-trivial amount of code that handles ZLIB compression in pg_receivewal, from basics like the format name, the calculation of the start streaming position and of course the compression itself, but there was no automated coverage for it. This commit introduces a set of conditional tests (if the build supports ZLIB) to cover the creation of ZLIB-compressed WAL segments, the handling of the partial, compressed, WAL segments and the compression operation in itself. Note that there is an extra phase checking the validity of the generated files by using directly a gzip command, passed down by the Makefile of pg_receivewal. This part is skipped if the command cannot be found, something likely going to happen on Windows with MSVC except if one sets the variable GZIP_PROGRAM in the environment of the test. This set of tests will become handy for upcoming patches that add more options for the compression methods used by pg_receivewal, like LZ4, to make sure that no existing facilities are broken. Author: Georgios Kokolatos Reviewed-by: Gilles Darold, Michael Paquier Discussion: https://postgr.es/m/07BK3Mk5aEOsTwGaY77qBVyf9GjoEzn8TMgHLyPGfEFPIpTEmoQuP2P4c7teesjSg-LPeUafsp1flnPeQYINMSMB_UpggJDoduB5EDYBqaQ=@protonmail.com --- src/bin/pg_basebackup/Makefile | 6 +- src/bin/pg_basebackup/t/020_pg_receivewal.pl | 79 +++++++++++++++++++- 2 files changed, 82 insertions(+), 3 deletions(-) diff --git a/src/bin/pg_basebackup/Makefile b/src/bin/pg_basebackup/Makefile index 66e0070f1a4f3..459d514183d1f 100644 --- a/src/bin/pg_basebackup/Makefile +++ b/src/bin/pg_basebackup/Makefile @@ -18,8 +18,12 @@ subdir = src/bin/pg_basebackup top_builddir = ../../.. include $(top_builddir)/src/Makefile.global -# make this available to TAP test scripts +# make these available to TAP test scripts export TAR +# Note that GZIP cannot be used directly as this environment variable is +# used by the command "gzip" to pass down options, so stick with a different +# name. +export GZIP_PROGRAM=$(GZIP) override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) LDFLAGS_INTERNAL += -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport) diff --git a/src/bin/pg_basebackup/t/020_pg_receivewal.pl b/src/bin/pg_basebackup/t/020_pg_receivewal.pl index a547c97ef187e..305c501e2f225 100644 --- a/src/bin/pg_basebackup/t/020_pg_receivewal.pl +++ b/src/bin/pg_basebackup/t/020_pg_receivewal.pl @@ -5,7 +5,7 @@ use warnings; use TestLib; use PostgresNode; -use Test::More tests => 19; +use Test::More tests => 27; program_help_ok('pg_receivewal'); program_version_ok('pg_receivewal'); @@ -58,7 +58,9 @@ $primary->psql('postgres', 'INSERT INTO test_table VALUES (generate_series(1,100));'); -# Stream up to the given position. +# Stream up to the given position. This is necessary to have a fixed +# started point for the next commands done in this test, with or without +# compression involved. $primary->command_ok( [ 'pg_receivewal', '-D', $stream_dir, '--verbose', @@ -66,6 +68,79 @@ ], 'streaming some WAL with --synchronous'); +# Verify that one partial file was generated and keep track of it +my @partial_wals = glob "$stream_dir/*\.partial"; +is(scalar(@partial_wals), 1, "one partial WAL segment was created"); + +# Check ZLIB compression if available. +SKIP: +{ + skip "postgres was not built with ZLIB support", 5 + if (!check_pg_config("#define HAVE_LIBZ 1")); + + # Generate more WAL worth one completed, compressed, segment. + $primary->psql('postgres', 'SELECT pg_switch_wal();'); + $nextlsn = + $primary->safe_psql('postgres', 'SELECT pg_current_wal_insert_lsn();'); + chomp($nextlsn); + $primary->psql('postgres', + 'INSERT INTO test_table VALUES (generate_series(100,200));'); + + $primary->command_ok( + [ + 'pg_receivewal', '-D', $stream_dir, '--verbose', + '--endpos', $nextlsn, '--compress', '1' + ], + "streaming some WAL using ZLIB compression"); + + # Verify that the stored files are generated with their expected + # names. + my @zlib_wals = glob "$stream_dir/*.gz"; + is(scalar(@zlib_wals), 1, + "one WAL segment compressed with ZLIB was created"); + my @zlib_partial_wals = glob "$stream_dir/*.gz.partial"; + is(scalar(@zlib_partial_wals), + 1, "one partial WAL segment compressed with ZLIB was created"); + + # Verify that the start streaming position is computed correctly by + # comparing it with the partial file generated previously. The name + # of the previous partial, now-completed WAL segment is updated, keeping + # its base number. + $partial_wals[0] =~ s/\.partial$/.gz/; + is($zlib_wals[0] =~ m/$partial_wals[0]/, + 1, "one partial WAL segment is now completed"); + # Update the list of partial wals with the current one. + @partial_wals = @zlib_partial_wals; + + # There is one complete and one partial file compressed with ZLIB. + # Check the integrity of both, if gzip is a command available. + my $gzip = $ENV{GZIP_PROGRAM}; + skip "program gzip is not found in your system", 1 + if ( !defined $gzip + || $gzip eq '' + || system_log($gzip, '--version') != 0); + + push(@zlib_wals, @zlib_partial_wals); + my $gzip_is_valid = system_log($gzip, '--test', @zlib_wals); + is($gzip_is_valid, 0, + "gzip verified the integrity of compressed WAL segments"); +} + +# Verify that the start streaming position is computed and that the value is +# correct regardless of whether ZLIB is available. +$primary->psql('postgres', 'SELECT pg_switch_wal();'); +$nextlsn = + $primary->safe_psql('postgres', 'SELECT pg_current_wal_insert_lsn();'); +chomp($nextlsn); +$primary->psql('postgres', + 'INSERT INTO test_table VALUES (generate_series(200,300));'); +$primary->command_ok( + [ 'pg_receivewal', '-D', $stream_dir, '--verbose', '--endpos', $nextlsn ], + "streaming some WAL"); + +$partial_wals[0] =~ s/(\.gz)?.partial//; +ok(-e $partial_wals[0], "check that previously partial WAL is now complete"); + # Permissions on WAL files should be default SKIP: { From 2bfb50b3df11399ed80347dd03bfaf8cd5acf962 Mon Sep 17 00:00:00 2001 From: Dean Rasheed Date: Thu, 15 Jul 2021 08:49:45 +0100 Subject: [PATCH 665/671] Improve reporting of "conflicting or redundant options" errors. When reporting "conflicting or redundant options" errors, try to ensure that errposition() is used, to help the user identify the offending option. Formerly, errposition() was invoked in less than 60% of cases. This patch raises that to over 90%, but there remain a few places where the ParseState is not readily available. Using errdetail() might improve the error in such cases, but that is left as a task for the future. Additionally, since this error is thrown from over 100 places in the codebase, introduce a dedicated function to throw it, reducing code duplication. Extracted from a slightly larger patch by Vignesh C. Reviewed by Bharath Rupireddy, Alvaro Herrera, Dilip Kumar, Hou Zhijie, Peter Smith, Daniel Gustafsson, Julien Rouhaud and me. Discussion: https://postgr.es/m/CALDaNm33FFSS5tVyvmkoK2cCMuDVxcui=gFrjti9ROfynqSAGA@mail.gmail.com --- src/backend/catalog/aclchk.c | 11 +- src/backend/commands/copy.c | 59 +++-------- src/backend/commands/dbcommands.c | 70 +++---------- src/backend/commands/define.c | 12 +++ src/backend/commands/extension.c | 20 +--- src/backend/commands/foreigncmds.c | 18 ++-- src/backend/commands/functioncmds.c | 53 +++------- src/backend/commands/publicationcmds.c | 27 +++-- src/backend/commands/sequence.c | 45 ++------- src/backend/commands/subscriptioncmds.c | 66 +++++------- src/backend/commands/typecmds.c | 31 ++---- src/backend/commands/user.c | 112 +++++---------------- src/backend/parser/parse_utilcmd.c | 4 +- src/backend/tcop/utility.c | 20 ++-- src/include/commands/defrem.h | 7 +- src/include/commands/publicationcmds.h | 4 +- src/include/commands/subscriptioncmds.h | 4 +- src/include/commands/typecmds.h | 2 +- src/include/commands/user.h | 2 +- src/test/regress/expected/copy2.out | 2 + src/test/regress/expected/foreign_data.out | 4 + src/test/regress/expected/publication.out | 2 + 22 files changed, 180 insertions(+), 395 deletions(-) diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c index 53392414f1098..89792b154eee5 100644 --- a/src/backend/catalog/aclchk.c +++ b/src/backend/catalog/aclchk.c @@ -59,6 +59,7 @@ #include "catalog/pg_ts_template.h" #include "catalog/pg_type.h" #include "commands/dbcommands.h" +#include "commands/defrem.h" #include "commands/event_trigger.h" #include "commands/extension.h" #include "commands/proclang.h" @@ -921,19 +922,13 @@ ExecAlterDefaultPrivilegesStmt(ParseState *pstate, AlterDefaultPrivilegesStmt *s if (strcmp(defel->defname, "schemas") == 0) { if (dnspnames) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dnspnames = defel; } else if (strcmp(defel->defname, "roles") == 0) { if (drolespecs) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); drolespecs = defel; } else diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 8265b981ebdac..6b33951e0c9a7 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -357,10 +357,7 @@ ProcessCopyOptions(ParseState *pstate, char *fmt = defGetString(defel); if (format_specified) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); format_specified = true; if (strcmp(fmt, "text") == 0) /* default format */ ; @@ -377,66 +374,45 @@ ProcessCopyOptions(ParseState *pstate, else if (strcmp(defel->defname, "freeze") == 0) { if (freeze_specified) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); freeze_specified = true; opts_out->freeze = defGetBoolean(defel); } else if (strcmp(defel->defname, "delimiter") == 0) { if (opts_out->delim) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); opts_out->delim = defGetString(defel); } else if (strcmp(defel->defname, "null") == 0) { if (opts_out->null_print) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); opts_out->null_print = defGetString(defel); } else if (strcmp(defel->defname, "header") == 0) { if (header_specified) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); header_specified = true; opts_out->header_line = defGetBoolean(defel); } else if (strcmp(defel->defname, "quote") == 0) { if (opts_out->quote) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); opts_out->quote = defGetString(defel); } else if (strcmp(defel->defname, "escape") == 0) { if (opts_out->escape) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); opts_out->escape = defGetString(defel); } else if (strcmp(defel->defname, "force_quote") == 0) { if (opts_out->force_quote || opts_out->force_quote_all) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); if (defel->arg && IsA(defel->arg, A_Star)) opts_out->force_quote_all = true; else if (defel->arg && IsA(defel->arg, List)) @@ -451,10 +427,7 @@ ProcessCopyOptions(ParseState *pstate, else if (strcmp(defel->defname, "force_not_null") == 0) { if (opts_out->force_notnull) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); if (defel->arg && IsA(defel->arg, List)) opts_out->force_notnull = castNode(List, defel->arg); else @@ -467,9 +440,7 @@ ProcessCopyOptions(ParseState *pstate, else if (strcmp(defel->defname, "force_null") == 0) { if (opts_out->force_null) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); if (defel->arg && IsA(defel->arg, List)) opts_out->force_null = castNode(List, defel->arg); else @@ -487,10 +458,7 @@ ProcessCopyOptions(ParseState *pstate, * allowed for the column list to be NIL. */ if (opts_out->convert_selectively) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); opts_out->convert_selectively = true; if (defel->arg == NULL || IsA(defel->arg, List)) opts_out->convert_select = castNode(List, defel->arg); @@ -504,10 +472,7 @@ ProcessCopyOptions(ParseState *pstate, else if (strcmp(defel->defname, "encoding") == 0) { if (opts_out->file_encoding >= 0) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); opts_out->file_encoding = pg_char_to_encoding(defGetString(defel)); if (opts_out->file_encoding < 0) ereport(ERROR, diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index 2b159b60ebb33..029fab48df372 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -152,91 +152,61 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt) if (strcmp(defel->defname, "tablespace") == 0) { if (dtablespacename) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dtablespacename = defel; } else if (strcmp(defel->defname, "owner") == 0) { if (downer) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); downer = defel; } else if (strcmp(defel->defname, "template") == 0) { if (dtemplate) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dtemplate = defel; } else if (strcmp(defel->defname, "encoding") == 0) { if (dencoding) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dencoding = defel; } else if (strcmp(defel->defname, "locale") == 0) { if (dlocale) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dlocale = defel; } else if (strcmp(defel->defname, "lc_collate") == 0) { if (dcollate) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dcollate = defel; } else if (strcmp(defel->defname, "lc_ctype") == 0) { if (dctype) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dctype = defel; } else if (strcmp(defel->defname, "is_template") == 0) { if (distemplate) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); distemplate = defel; } else if (strcmp(defel->defname, "allow_connections") == 0) { if (dallowconnections) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dallowconnections = defel; } else if (strcmp(defel->defname, "connection_limit") == 0) { if (dconnlimit) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dconnlimit = defel; } else if (strcmp(defel->defname, "location") == 0) @@ -1497,37 +1467,25 @@ AlterDatabase(ParseState *pstate, AlterDatabaseStmt *stmt, bool isTopLevel) if (strcmp(defel->defname, "is_template") == 0) { if (distemplate) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); distemplate = defel; } else if (strcmp(defel->defname, "allow_connections") == 0) { if (dallowconnections) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dallowconnections = defel; } else if (strcmp(defel->defname, "connection_limit") == 0) { if (dconnlimit) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dconnlimit = defel; } else if (strcmp(defel->defname, "tablespace") == 0) { if (dtablespace) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dtablespace = defel; } else diff --git a/src/backend/commands/define.c b/src/backend/commands/define.c index 84487b7d4b426..aafd7554e4eb9 100644 --- a/src/backend/commands/define.c +++ b/src/backend/commands/define.c @@ -347,3 +347,15 @@ defGetStringList(DefElem *def) return (List *) def->arg; } + +/* + * Raise an error about a conflicting DefElem. + */ +void +errorConflictingDefElem(DefElem *defel, ParseState *pstate) +{ + ereport(ERROR, + errcode(ERRCODE_SYNTAX_ERROR), + errmsg("conflicting or redundant options"), + parser_errposition(pstate, defel->location)); +} diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index b37009bfec41f..eaa76af47b0fd 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -1731,30 +1731,21 @@ CreateExtension(ParseState *pstate, CreateExtensionStmt *stmt) if (strcmp(defel->defname, "schema") == 0) { if (d_schema) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); d_schema = defel; schemaName = defGetString(d_schema); } else if (strcmp(defel->defname, "new_version") == 0) { if (d_new_version) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); d_new_version = defel; versionName = defGetString(d_new_version); } else if (strcmp(defel->defname, "cascade") == 0) { if (d_cascade) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); d_cascade = defel; cascade = defGetBoolean(d_cascade); } @@ -3051,10 +3042,7 @@ ExecAlterExtensionStmt(ParseState *pstate, AlterExtensionStmt *stmt) if (strcmp(defel->defname, "new_version") == 0) { if (d_new_version) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); d_new_version = defel; } else diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c index bc36311d3834f..9b71beb1d38b6 100644 --- a/src/backend/commands/foreigncmds.c +++ b/src/backend/commands/foreigncmds.c @@ -515,7 +515,7 @@ lookup_fdw_validator_func(DefElem *validator) * Process function options of CREATE/ALTER FDW */ static void -parse_func_options(List *func_options, +parse_func_options(ParseState *pstate, List *func_options, bool *handler_given, Oid *fdwhandler, bool *validator_given, Oid *fdwvalidator) { @@ -534,18 +534,14 @@ parse_func_options(List *func_options, if (strcmp(def->defname, "handler") == 0) { if (*handler_given) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(def, pstate); *handler_given = true; *fdwhandler = lookup_fdw_handler_func(def); } else if (strcmp(def->defname, "validator") == 0) { if (*validator_given) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(def, pstate); *validator_given = true; *fdwvalidator = lookup_fdw_validator_func(def); } @@ -559,7 +555,7 @@ parse_func_options(List *func_options, * Create a foreign-data wrapper */ ObjectAddress -CreateForeignDataWrapper(CreateFdwStmt *stmt) +CreateForeignDataWrapper(ParseState *pstate, CreateFdwStmt *stmt) { Relation rel; Datum values[Natts_pg_foreign_data_wrapper]; @@ -611,7 +607,7 @@ CreateForeignDataWrapper(CreateFdwStmt *stmt) values[Anum_pg_foreign_data_wrapper_fdwowner - 1] = ObjectIdGetDatum(ownerId); /* Lookup handler and validator functions, if given */ - parse_func_options(stmt->func_options, + parse_func_options(pstate, stmt->func_options, &handler_given, &fdwhandler, &validator_given, &fdwvalidator); @@ -675,7 +671,7 @@ CreateForeignDataWrapper(CreateFdwStmt *stmt) * Alter foreign-data wrapper */ ObjectAddress -AlterForeignDataWrapper(AlterFdwStmt *stmt) +AlterForeignDataWrapper(ParseState *pstate, AlterFdwStmt *stmt) { Relation rel; HeapTuple tp; @@ -717,7 +713,7 @@ AlterForeignDataWrapper(AlterFdwStmt *stmt) memset(repl_null, false, sizeof(repl_null)); memset(repl_repl, false, sizeof(repl_repl)); - parse_func_options(stmt->func_options, + parse_func_options(pstate, stmt->func_options, &handler_given, &fdwhandler, &validator_given, &fdwvalidator); diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index 736d04780a753..79d875ab10be4 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -523,7 +523,7 @@ compute_common_attribute(ParseState *pstate, if (is_procedure) goto procedure_error; if (*volatility_item) - goto duplicate_error; + errorConflictingDefElem(defel, pstate); *volatility_item = defel; } @@ -532,14 +532,14 @@ compute_common_attribute(ParseState *pstate, if (is_procedure) goto procedure_error; if (*strict_item) - goto duplicate_error; + errorConflictingDefElem(defel, pstate); *strict_item = defel; } else if (strcmp(defel->defname, "security") == 0) { if (*security_item) - goto duplicate_error; + errorConflictingDefElem(defel, pstate); *security_item = defel; } @@ -548,7 +548,7 @@ compute_common_attribute(ParseState *pstate, if (is_procedure) goto procedure_error; if (*leakproof_item) - goto duplicate_error; + errorConflictingDefElem(defel, pstate); *leakproof_item = defel; } @@ -561,7 +561,7 @@ compute_common_attribute(ParseState *pstate, if (is_procedure) goto procedure_error; if (*cost_item) - goto duplicate_error; + errorConflictingDefElem(defel, pstate); *cost_item = defel; } @@ -570,7 +570,7 @@ compute_common_attribute(ParseState *pstate, if (is_procedure) goto procedure_error; if (*rows_item) - goto duplicate_error; + errorConflictingDefElem(defel, pstate); *rows_item = defel; } @@ -579,7 +579,7 @@ compute_common_attribute(ParseState *pstate, if (is_procedure) goto procedure_error; if (*support_item) - goto duplicate_error; + errorConflictingDefElem(defel, pstate); *support_item = defel; } @@ -588,7 +588,7 @@ compute_common_attribute(ParseState *pstate, if (is_procedure) goto procedure_error; if (*parallel_item) - goto duplicate_error; + errorConflictingDefElem(defel, pstate); *parallel_item = defel; } @@ -598,13 +598,6 @@ compute_common_attribute(ParseState *pstate, /* Recognized an option */ return true; -duplicate_error: - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); - return false; /* keep compiler quiet */ - procedure_error: ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), @@ -765,37 +758,25 @@ compute_function_attributes(ParseState *pstate, if (strcmp(defel->defname, "as") == 0) { if (as_item) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); as_item = defel; } else if (strcmp(defel->defname, "language") == 0) { if (language_item) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); language_item = defel; } else if (strcmp(defel->defname, "transform") == 0) { if (transform_item) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); transform_item = defel; } else if (strcmp(defel->defname, "window") == 0) { if (windowfunc_item) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); if (is_procedure) ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), @@ -2070,7 +2051,7 @@ IsThereFunctionInNamespace(const char *proname, int pronargs, * See at ExecuteCallStmt() about the atomic argument. */ void -ExecuteDoStmt(DoStmt *stmt, bool atomic) +ExecuteDoStmt(ParseState *pstate, DoStmt *stmt, bool atomic) { InlineCodeBlock *codeblock = makeNode(InlineCodeBlock); ListCell *arg; @@ -2089,17 +2070,13 @@ ExecuteDoStmt(DoStmt *stmt, bool atomic) if (strcmp(defel->defname, "as") == 0) { if (as_item) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); as_item = defel; } else if (strcmp(defel->defname, "language") == 0) { if (language_item) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); language_item = defel; } else diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index 95c253c8e08ee..12f9f8b6974a9 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -55,7 +55,8 @@ static void PublicationAddTables(Oid pubid, List *rels, bool if_not_exists, static void PublicationDropTables(Oid pubid, List *rels, bool missing_ok); static void -parse_publication_options(List *options, +parse_publication_options(ParseState *pstate, + List *options, bool *publish_given, PublicationActions *pubactions, bool *publish_via_partition_root_given, @@ -85,9 +86,7 @@ parse_publication_options(List *options, ListCell *lc; if (*publish_given) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); /* * If publish option was given only the explicitly listed actions @@ -128,9 +127,7 @@ parse_publication_options(List *options, else if (strcmp(defel->defname, "publish_via_partition_root") == 0) { if (*publish_via_partition_root_given) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); *publish_via_partition_root_given = true; *publish_via_partition_root = defGetBoolean(defel); } @@ -145,7 +142,7 @@ parse_publication_options(List *options, * Create new publication. */ ObjectAddress -CreatePublication(CreatePublicationStmt *stmt) +CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt) { Relation rel; ObjectAddress myself; @@ -192,7 +189,8 @@ CreatePublication(CreatePublicationStmt *stmt) DirectFunctionCall1(namein, CStringGetDatum(stmt->pubname)); values[Anum_pg_publication_pubowner - 1] = ObjectIdGetDatum(GetUserId()); - parse_publication_options(stmt->options, + parse_publication_options(pstate, + stmt->options, &publish_given, &pubactions, &publish_via_partition_root_given, &publish_via_partition_root); @@ -256,8 +254,8 @@ CreatePublication(CreatePublicationStmt *stmt) * Change options of a publication. */ static void -AlterPublicationOptions(AlterPublicationStmt *stmt, Relation rel, - HeapTuple tup) +AlterPublicationOptions(ParseState *pstate, AlterPublicationStmt *stmt, + Relation rel, HeapTuple tup) { bool nulls[Natts_pg_publication]; bool replaces[Natts_pg_publication]; @@ -269,7 +267,8 @@ AlterPublicationOptions(AlterPublicationStmt *stmt, Relation rel, ObjectAddress obj; Form_pg_publication pubform; - parse_publication_options(stmt->options, + parse_publication_options(pstate, + stmt->options, &publish_given, &pubactions, &publish_via_partition_root_given, &publish_via_partition_root); @@ -434,7 +433,7 @@ AlterPublicationTables(AlterPublicationStmt *stmt, Relation rel, * AlterPublicationTables. */ void -AlterPublication(AlterPublicationStmt *stmt) +AlterPublication(ParseState *pstate, AlterPublicationStmt *stmt) { Relation rel; HeapTuple tup; @@ -459,7 +458,7 @@ AlterPublication(AlterPublicationStmt *stmt) stmt->pubname); if (stmt->options) - AlterPublicationOptions(stmt, rel, tup); + AlterPublicationOptions(pstate, stmt, rel, tup); else AlterPublicationTables(stmt, rel, tup); diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index d22d767d2fa45..72bfdc07a49e8 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -1261,90 +1261,63 @@ init_params(ParseState *pstate, List *options, bool for_identity, if (strcmp(defel->defname, "as") == 0) { if (as_type) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); as_type = defel; *need_seq_rewrite = true; } else if (strcmp(defel->defname, "increment") == 0) { if (increment_by) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); increment_by = defel; *need_seq_rewrite = true; } else if (strcmp(defel->defname, "start") == 0) { if (start_value) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); start_value = defel; *need_seq_rewrite = true; } else if (strcmp(defel->defname, "restart") == 0) { if (restart_value) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); restart_value = defel; *need_seq_rewrite = true; } else if (strcmp(defel->defname, "maxvalue") == 0) { if (max_value) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); max_value = defel; *need_seq_rewrite = true; } else if (strcmp(defel->defname, "minvalue") == 0) { if (min_value) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); min_value = defel; *need_seq_rewrite = true; } else if (strcmp(defel->defname, "cache") == 0) { if (cache_value) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); cache_value = defel; *need_seq_rewrite = true; } else if (strcmp(defel->defname, "cycle") == 0) { if (is_cycled) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); is_cycled = defel; *need_seq_rewrite = true; } else if (strcmp(defel->defname, "owned_by") == 0) { if (*owned_by) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); *owned_by = defGetQualifiedName(defel); } else if (strcmp(defel->defname, "sequence_name") == 0) diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index 5f834a9c300fe..239d263f835e7 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -98,7 +98,8 @@ static void ReportSlotConnectionError(List *rstates, Oid subid, char *slotname, * Caller is expected to have cleared 'opts'. */ static void -parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *opts) +parse_subscription_options(ParseState *pstate, List *stmt_options, + bits32 supported_opts, SubOpts *opts) { ListCell *lc; @@ -137,9 +138,7 @@ parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *o strcmp(defel->defname, "connect") == 0) { if (IsSet(opts->specified_opts, SUBOPT_CONNECT)) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); opts->specified_opts |= SUBOPT_CONNECT; opts->connect = defGetBoolean(defel); @@ -148,9 +147,7 @@ parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *o strcmp(defel->defname, "enabled") == 0) { if (IsSet(opts->specified_opts, SUBOPT_ENABLED)) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); opts->specified_opts |= SUBOPT_ENABLED; opts->enabled = defGetBoolean(defel); @@ -159,9 +156,7 @@ parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *o strcmp(defel->defname, "create_slot") == 0) { if (IsSet(opts->specified_opts, SUBOPT_CREATE_SLOT)) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); opts->specified_opts |= SUBOPT_CREATE_SLOT; opts->create_slot = defGetBoolean(defel); @@ -170,9 +165,7 @@ parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *o strcmp(defel->defname, "slot_name") == 0) { if (IsSet(opts->specified_opts, SUBOPT_SLOT_NAME)) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); opts->specified_opts |= SUBOPT_SLOT_NAME; opts->slot_name = defGetString(defel); @@ -185,9 +178,7 @@ parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *o strcmp(defel->defname, "copy_data") == 0) { if (IsSet(opts->specified_opts, SUBOPT_COPY_DATA)) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); opts->specified_opts |= SUBOPT_COPY_DATA; opts->copy_data = defGetBoolean(defel); @@ -196,9 +187,7 @@ parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *o strcmp(defel->defname, "synchronous_commit") == 0) { if (IsSet(opts->specified_opts, SUBOPT_SYNCHRONOUS_COMMIT)) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); opts->specified_opts |= SUBOPT_SYNCHRONOUS_COMMIT; opts->synchronous_commit = defGetString(defel); @@ -212,9 +201,7 @@ parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *o strcmp(defel->defname, "refresh") == 0) { if (IsSet(opts->specified_opts, SUBOPT_REFRESH)) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); opts->specified_opts |= SUBOPT_REFRESH; opts->refresh = defGetBoolean(defel); @@ -223,9 +210,7 @@ parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *o strcmp(defel->defname, "binary") == 0) { if (IsSet(opts->specified_opts, SUBOPT_BINARY)) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); opts->specified_opts |= SUBOPT_BINARY; opts->binary = defGetBoolean(defel); @@ -234,9 +219,7 @@ parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *o strcmp(defel->defname, "streaming") == 0) { if (IsSet(opts->specified_opts, SUBOPT_STREAMING)) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); opts->specified_opts |= SUBOPT_STREAMING; opts->streaming = defGetBoolean(defel); @@ -257,9 +240,7 @@ parse_subscription_options(List *stmt_options, bits32 supported_opts, SubOpts *o errmsg("unrecognized subscription parameter: \"%s\"", defel->defname))); if (IsSet(opts->specified_opts, SUBOPT_TWOPHASE_COMMIT)) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); opts->specified_opts |= SUBOPT_TWOPHASE_COMMIT; opts->twophase = defGetBoolean(defel); @@ -408,7 +389,8 @@ publicationListToArray(List *publist) * Create new subscription. */ ObjectAddress -CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) +CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt, + bool isTopLevel) { Relation rel; ObjectAddress myself; @@ -432,7 +414,7 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) SUBOPT_SLOT_NAME | SUBOPT_COPY_DATA | SUBOPT_SYNCHRONOUS_COMMIT | SUBOPT_BINARY | SUBOPT_STREAMING | SUBOPT_TWOPHASE_COMMIT); - parse_subscription_options(stmt->options, supported_opts, &opts); + parse_subscription_options(pstate, stmt->options, supported_opts, &opts); /* * Since creating a replication slot is not transactional, rolling back @@ -853,7 +835,8 @@ AlterSubscription_refresh(Subscription *sub, bool copy_data) * Alter the existing subscription. */ ObjectAddress -AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) +AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, + bool isTopLevel) { Relation rel; ObjectAddress myself; @@ -906,7 +889,8 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) SUBOPT_SYNCHRONOUS_COMMIT | SUBOPT_BINARY | SUBOPT_STREAMING); - parse_subscription_options(stmt->options, supported_opts, &opts); + parse_subscription_options(pstate, stmt->options, + supported_opts, &opts); if (IsSet(opts.specified_opts, SUBOPT_SLOT_NAME)) { @@ -957,7 +941,8 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) case ALTER_SUBSCRIPTION_ENABLED: { - parse_subscription_options(stmt->options, SUBOPT_ENABLED, &opts); + parse_subscription_options(pstate, stmt->options, + SUBOPT_ENABLED, &opts); Assert(IsSet(opts.specified_opts, SUBOPT_ENABLED)); if (!sub->slotname && opts.enabled) @@ -991,7 +976,8 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) case ALTER_SUBSCRIPTION_SET_PUBLICATION: { supported_opts = SUBOPT_COPY_DATA | SUBOPT_REFRESH; - parse_subscription_options(stmt->options, supported_opts, &opts); + parse_subscription_options(pstate, stmt->options, + supported_opts, &opts); values[Anum_pg_subscription_subpublications - 1] = publicationListToArray(stmt->publication); @@ -1040,7 +1026,8 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) if (isadd) supported_opts |= SUBOPT_COPY_DATA; - parse_subscription_options(stmt->options, supported_opts, &opts); + parse_subscription_options(pstate, stmt->options, + supported_opts, &opts); publist = merge_publications(sub->publications, stmt->publication, isadd, stmt->subname); values[Anum_pg_subscription_subpublications - 1] = @@ -1087,7 +1074,8 @@ AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel) (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions"))); - parse_subscription_options(stmt->options, SUBOPT_COPY_DATA, &opts); + parse_subscription_options(pstate, stmt->options, + SUBOPT_COPY_DATA, &opts); /* * The subscription option "two_phase" requires that diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 58ec65c6afc10..93eeff950b15d 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -330,10 +330,7 @@ DefineType(ParseState *pstate, List *names, List *parameters) continue; } if (*defelp != NULL) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); *defelp = defel; } @@ -1336,7 +1333,7 @@ checkEnumOwner(HeapTuple tup) * and users might have queries with that same assumption. */ ObjectAddress -DefineRange(CreateRangeStmt *stmt) +DefineRange(ParseState *pstate, CreateRangeStmt *stmt) { char *typeName; Oid typeNamespace; @@ -1411,50 +1408,38 @@ DefineRange(CreateRangeStmt *stmt) if (strcmp(defel->defname, "subtype") == 0) { if (OidIsValid(rangeSubtype)) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); /* we can look up the subtype name immediately */ rangeSubtype = typenameTypeId(NULL, defGetTypeName(defel)); } else if (strcmp(defel->defname, "subtype_opclass") == 0) { if (rangeSubOpclassName != NIL) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); rangeSubOpclassName = defGetQualifiedName(defel); } else if (strcmp(defel->defname, "collation") == 0) { if (rangeCollationName != NIL) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); rangeCollationName = defGetQualifiedName(defel); } else if (strcmp(defel->defname, "canonical") == 0) { if (rangeCanonicalName != NIL) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); rangeCanonicalName = defGetQualifiedName(defel); } else if (strcmp(defel->defname, "subtype_diff") == 0) { if (rangeSubtypeDiffName != NIL) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); rangeSubtypeDiffName = defGetQualifiedName(defel); } else if (strcmp(defel->defname, "multirange_type_name") == 0) { if (multirangeTypeName != NULL) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); /* we can look up the subtype name immediately */ multirangeNamespace = QualifiedNameGetCreationNamespace(defGetQualifiedName(defel), &multirangeTypeName); diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index 65bb73395891d..aa69821be4963 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -27,6 +27,7 @@ #include "catalog/pg_db_role_setting.h" #include "commands/comment.h" #include "commands/dbcommands.h" +#include "commands/defrem.h" #include "commands/seclabel.h" #include "commands/user.h" #include "libpq/crypt.h" @@ -128,10 +129,7 @@ CreateRole(ParseState *pstate, CreateRoleStmt *stmt) if (strcmp(defel->defname, "password") == 0) { if (dpassword) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dpassword = defel; } else if (strcmp(defel->defname, "sysid") == 0) @@ -142,109 +140,73 @@ CreateRole(ParseState *pstate, CreateRoleStmt *stmt) else if (strcmp(defel->defname, "superuser") == 0) { if (dissuper) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dissuper = defel; } else if (strcmp(defel->defname, "inherit") == 0) { if (dinherit) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dinherit = defel; } else if (strcmp(defel->defname, "createrole") == 0) { if (dcreaterole) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dcreaterole = defel; } else if (strcmp(defel->defname, "createdb") == 0) { if (dcreatedb) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dcreatedb = defel; } else if (strcmp(defel->defname, "canlogin") == 0) { if (dcanlogin) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dcanlogin = defel; } else if (strcmp(defel->defname, "isreplication") == 0) { if (disreplication) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); disreplication = defel; } else if (strcmp(defel->defname, "connectionlimit") == 0) { if (dconnlimit) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dconnlimit = defel; } else if (strcmp(defel->defname, "addroleto") == 0) { if (daddroleto) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); daddroleto = defel; } else if (strcmp(defel->defname, "rolemembers") == 0) { if (drolemembers) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); drolemembers = defel; } else if (strcmp(defel->defname, "adminmembers") == 0) { if (dadminmembers) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dadminmembers = defel; } else if (strcmp(defel->defname, "validUntil") == 0) { if (dvalidUntil) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dvalidUntil = defel; } else if (strcmp(defel->defname, "bypassrls") == 0) { if (dbypassRLS) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); + errorConflictingDefElem(defel, pstate); dbypassRLS = defel; } else @@ -528,7 +490,7 @@ CreateRole(ParseState *pstate, CreateRoleStmt *stmt) * "ALTER ROLE role ROLE rolenames", we don't document it. */ Oid -AlterRole(AlterRoleStmt *stmt) +AlterRole(ParseState *pstate, AlterRoleStmt *stmt) { Datum new_record[Natts_pg_authid]; bool new_record_nulls[Natts_pg_authid]; @@ -577,90 +539,68 @@ AlterRole(AlterRoleStmt *stmt) if (strcmp(defel->defname, "password") == 0) { if (dpassword) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); dpassword = defel; } else if (strcmp(defel->defname, "superuser") == 0) { if (dissuper) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); dissuper = defel; } else if (strcmp(defel->defname, "inherit") == 0) { if (dinherit) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); dinherit = defel; } else if (strcmp(defel->defname, "createrole") == 0) { if (dcreaterole) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); dcreaterole = defel; } else if (strcmp(defel->defname, "createdb") == 0) { if (dcreatedb) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); dcreatedb = defel; } else if (strcmp(defel->defname, "canlogin") == 0) { if (dcanlogin) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); dcanlogin = defel; } else if (strcmp(defel->defname, "isreplication") == 0) { if (disreplication) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); disreplication = defel; } else if (strcmp(defel->defname, "connectionlimit") == 0) { if (dconnlimit) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); dconnlimit = defel; } else if (strcmp(defel->defname, "rolemembers") == 0 && stmt->action != 0) { if (drolemembers) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); drolemembers = defel; } else if (strcmp(defel->defname, "validUntil") == 0) { if (dvalidUntil) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); dvalidUntil = defel; } else if (strcmp(defel->defname, "bypassrls") == 0) { if (dbypassRLS) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, pstate); dbypassRLS = defel; } else diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 3afcd6b5118f1..9edd1f8d51b12 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -392,9 +392,7 @@ generateSerialExtraStmts(CreateStmtContext *cxt, ColumnDef *column, if (strcmp(defel->defname, "sequence_name") == 0) { if (nameEl) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"))); + errorConflictingDefElem(defel, cxt->pstate); nameEl = defel; nameEl_idx = foreach_current_index(option); } diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 7a2da9dab431f..27fbf1f3aae4a 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -708,7 +708,7 @@ standard_ProcessUtility(PlannedStmt *pstmt, break; case T_DoStmt: - ExecuteDoStmt((DoStmt *) parsetree, isAtomicContext); + ExecuteDoStmt(pstate, (DoStmt *) parsetree, isAtomicContext); break; case T_CreateTableSpaceStmt: @@ -888,7 +888,7 @@ standard_ProcessUtility(PlannedStmt *pstmt, case T_AlterRoleStmt: /* no event triggers for global objects */ - AlterRole((AlterRoleStmt *) parsetree); + AlterRole(pstate, (AlterRoleStmt *) parsetree); break; case T_AlterRoleSetStmt: @@ -1552,11 +1552,11 @@ ProcessUtilitySlow(ParseState *pstate, break; case T_CreateFdwStmt: - address = CreateForeignDataWrapper((CreateFdwStmt *) parsetree); + address = CreateForeignDataWrapper(pstate, (CreateFdwStmt *) parsetree); break; case T_AlterFdwStmt: - address = AlterForeignDataWrapper((AlterFdwStmt *) parsetree); + address = AlterForeignDataWrapper(pstate, (AlterFdwStmt *) parsetree); break; case T_CreateForeignServerStmt: @@ -1601,7 +1601,7 @@ ProcessUtilitySlow(ParseState *pstate, break; case T_CreateRangeStmt: /* CREATE TYPE AS RANGE */ - address = DefineRange((CreateRangeStmt *) parsetree); + address = DefineRange(pstate, (CreateRangeStmt *) parsetree); break; case T_AlterEnumStmt: /* ALTER TYPE (enum) */ @@ -1802,11 +1802,11 @@ ProcessUtilitySlow(ParseState *pstate, break; case T_CreatePublicationStmt: - address = CreatePublication((CreatePublicationStmt *) parsetree); + address = CreatePublication(pstate, (CreatePublicationStmt *) parsetree); break; case T_AlterPublicationStmt: - AlterPublication((AlterPublicationStmt *) parsetree); + AlterPublication(pstate, (AlterPublicationStmt *) parsetree); /* * AlterPublication calls EventTriggerCollectSimpleCommand @@ -1816,12 +1816,14 @@ ProcessUtilitySlow(ParseState *pstate, break; case T_CreateSubscriptionStmt: - address = CreateSubscription((CreateSubscriptionStmt *) parsetree, + address = CreateSubscription(pstate, + (CreateSubscriptionStmt *) parsetree, isTopLevel); break; case T_AlterSubscriptionStmt: - address = AlterSubscription((AlterSubscriptionStmt *) parsetree, + address = AlterSubscription(pstate, + (AlterSubscriptionStmt *) parsetree, isTopLevel); break; diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h index 42bf1c7519828..f84d09959cc09 100644 --- a/src/include/commands/defrem.h +++ b/src/include/commands/defrem.h @@ -56,7 +56,7 @@ extern ObjectAddress CreateCast(CreateCastStmt *stmt); extern ObjectAddress CreateTransform(CreateTransformStmt *stmt); extern void IsThereFunctionInNamespace(const char *proname, int pronargs, oidvector *proargtypes, Oid nspOid); -extern void ExecuteDoStmt(DoStmt *stmt, bool atomic); +extern void ExecuteDoStmt(ParseState *pstate, DoStmt *stmt, bool atomic); extern void ExecuteCallStmt(CallStmt *stmt, ParamListInfo params, bool atomic, DestReceiver *dest); extern TupleDesc CallStmtResultDesc(CallStmt *stmt); extern Oid get_transform_oid(Oid type_id, Oid lang_id, bool missing_ok); @@ -121,8 +121,8 @@ extern ObjectAddress AlterForeignServerOwner(const char *name, Oid newOwnerId); extern void AlterForeignServerOwner_oid(Oid, Oid newOwnerId); extern ObjectAddress AlterForeignDataWrapperOwner(const char *name, Oid newOwnerId); extern void AlterForeignDataWrapperOwner_oid(Oid fwdId, Oid newOwnerId); -extern ObjectAddress CreateForeignDataWrapper(CreateFdwStmt *stmt); -extern ObjectAddress AlterForeignDataWrapper(AlterFdwStmt *stmt); +extern ObjectAddress CreateForeignDataWrapper(ParseState *pstate, CreateFdwStmt *stmt); +extern ObjectAddress AlterForeignDataWrapper(ParseState *pstate, AlterFdwStmt *stmt); extern ObjectAddress CreateForeignServer(CreateForeignServerStmt *stmt); extern ObjectAddress AlterForeignServer(AlterForeignServerStmt *stmt); extern ObjectAddress CreateUserMapping(CreateUserMappingStmt *stmt); @@ -153,5 +153,6 @@ extern List *defGetQualifiedName(DefElem *def); extern TypeName *defGetTypeName(DefElem *def); extern int defGetTypeLength(DefElem *def); extern List *defGetStringList(DefElem *def); +extern void errorConflictingDefElem(DefElem *defel, ParseState *pstate) pg_attribute_noreturn(); #endif /* DEFREM_H */ diff --git a/src/include/commands/publicationcmds.h b/src/include/commands/publicationcmds.h index 00e2e626e6ce3..efea01f2a9352 100644 --- a/src/include/commands/publicationcmds.h +++ b/src/include/commands/publicationcmds.h @@ -18,8 +18,8 @@ #include "catalog/objectaddress.h" #include "nodes/parsenodes.h" -extern ObjectAddress CreatePublication(CreatePublicationStmt *stmt); -extern void AlterPublication(AlterPublicationStmt *stmt); +extern ObjectAddress CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt); +extern void AlterPublication(ParseState *pstate, AlterPublicationStmt *stmt); extern void RemovePublicationRelById(Oid proid); extern ObjectAddress AlterPublicationOwner(const char *name, Oid newOwnerId); diff --git a/src/include/commands/subscriptioncmds.h b/src/include/commands/subscriptioncmds.h index 3b926f35d7613..8bf25ee66c2a5 100644 --- a/src/include/commands/subscriptioncmds.h +++ b/src/include/commands/subscriptioncmds.h @@ -18,9 +18,9 @@ #include "catalog/objectaddress.h" #include "nodes/parsenodes.h" -extern ObjectAddress CreateSubscription(CreateSubscriptionStmt *stmt, +extern ObjectAddress CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt, bool isTopLevel); -extern ObjectAddress AlterSubscription(AlterSubscriptionStmt *stmt, bool isTopLevel); +extern ObjectAddress AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, bool isTopLevel); extern void DropSubscription(DropSubscriptionStmt *stmt, bool isTopLevel); extern ObjectAddress AlterSubscriptionOwner(const char *name, Oid newOwnerId); diff --git a/src/include/commands/typecmds.h b/src/include/commands/typecmds.h index 880679127b5e2..d5e22811d0d76 100644 --- a/src/include/commands/typecmds.h +++ b/src/include/commands/typecmds.h @@ -25,7 +25,7 @@ extern ObjectAddress DefineType(ParseState *pstate, List *names, List *parameter extern void RemoveTypeById(Oid typeOid); extern ObjectAddress DefineDomain(CreateDomainStmt *stmt); extern ObjectAddress DefineEnum(CreateEnumStmt *stmt); -extern ObjectAddress DefineRange(CreateRangeStmt *stmt); +extern ObjectAddress DefineRange(ParseState *pstate, CreateRangeStmt *stmt); extern ObjectAddress AlterEnum(AlterEnumStmt *stmt); extern ObjectAddress DefineCompositeType(RangeVar *typevar, List *coldeflist); extern Oid AssignTypeArrayOid(void); diff --git a/src/include/commands/user.h b/src/include/commands/user.h index 028e0dde568e6..0b7a3cd65fd26 100644 --- a/src/include/commands/user.h +++ b/src/include/commands/user.h @@ -25,7 +25,7 @@ typedef void (*check_password_hook_type) (const char *username, const char *shad extern PGDLLIMPORT check_password_hook_type check_password_hook; extern Oid CreateRole(ParseState *pstate, CreateRoleStmt *stmt); -extern Oid AlterRole(AlterRoleStmt *stmt); +extern Oid AlterRole(ParseState *pstate, AlterRoleStmt *stmt); extern Oid AlterRoleSet(AlterRoleSetStmt *stmt); extern void DropRole(DropRoleStmt *stmt); extern void GrantRole(GrantRoleStmt *stmt); diff --git a/src/test/regress/expected/copy2.out b/src/test/regress/expected/copy2.out index c64f0719e7b6c..5f3685e9efe52 100644 --- a/src/test/regress/expected/copy2.out +++ b/src/test/regress/expected/copy2.out @@ -67,6 +67,8 @@ LINE 1: COPY x from stdin (force_not_null (a), force_not_null (b)); ^ COPY x from stdin (force_null (a), force_null (b)); ERROR: conflicting or redundant options +LINE 1: COPY x from stdin (force_null (a), force_null (b)); + ^ COPY x from stdin (convert_selectively (a), convert_selectively (b)); ERROR: conflicting or redundant options LINE 1: COPY x from stdin (convert_selectively (a), convert_selectiv... diff --git a/src/test/regress/expected/foreign_data.out b/src/test/regress/expected/foreign_data.out index 809d40a79a99c..426080ae39b4c 100644 --- a/src/test/regress/expected/foreign_data.out +++ b/src/test/regress/expected/foreign_data.out @@ -95,6 +95,8 @@ CREATE FOREIGN DATA WRAPPER test_fdw HANDLER invalid_fdw_handler; -- ERROR ERROR: function invalid_fdw_handler must return type fdw_handler CREATE FOREIGN DATA WRAPPER test_fdw HANDLER test_fdw_handler HANDLER invalid_fdw_handler; -- ERROR ERROR: conflicting or redundant options +LINE 1: ...GN DATA WRAPPER test_fdw HANDLER test_fdw_handler HANDLER in... + ^ CREATE FOREIGN DATA WRAPPER test_fdw HANDLER test_fdw_handler; DROP FOREIGN DATA WRAPPER test_fdw; -- ALTER FOREIGN DATA WRAPPER @@ -201,6 +203,8 @@ ALTER FOREIGN DATA WRAPPER foo HANDLER invalid_fdw_handler; -- ERROR ERROR: function invalid_fdw_handler must return type fdw_handler ALTER FOREIGN DATA WRAPPER foo HANDLER test_fdw_handler HANDLER anything; -- ERROR ERROR: conflicting or redundant options +LINE 1: ...FOREIGN DATA WRAPPER foo HANDLER test_fdw_handler HANDLER an... + ^ ALTER FOREIGN DATA WRAPPER foo HANDLER test_fdw_handler; WARNING: changing the foreign-data wrapper handler can change behavior of existing foreign tables DROP FUNCTION invalid_fdw_handler(); diff --git a/src/test/regress/expected/publication.out b/src/test/regress/expected/publication.out index 63d6ab7a4ef26..b5b065a1b6fc2 100644 --- a/src/test/regress/expected/publication.out +++ b/src/test/regress/expected/publication.out @@ -27,6 +27,8 @@ CREATE PUBLICATION testpub_xxx WITH (publish = 'cluster, vacuum'); ERROR: unrecognized "publish" value: "cluster" CREATE PUBLICATION testpub_xxx WITH (publish_via_partition_root = 'true', publish_via_partition_root = '0'); ERROR: conflicting or redundant options +LINE 1: ...ub_xxx WITH (publish_via_partition_root = 'true', publish_vi... + ^ \dRp List of publications Name | Owner | All tables | Inserts | Updates | Deletes | Truncates | Via root From 768ea9bcf98120eef01a6deea9c5c6997b153ab1 Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Thu, 15 Jul 2021 14:18:19 +0300 Subject: [PATCH 666/671] Fix small inconsistencies in catalog definition of multirange operators This commit fixes the description of a couple of multirange operators and oprjoin for another multirange operator. The change of oprjoin is more cosmetic since both old and new functions return the same constant. These cosmetic changes don't worth catalog incompatibility between 14beta2 and 14beta3. So, catversion isn't bumped. Discussion: https://postgr.es/m/CAPpHfdv9OZEuZDqOQoUKpXhq%3Dmc-qa4gKCPmcgG5Vvesu7%3Ds1w%40mail.gmail.com Backpatch-throgh: 14 --- src/include/catalog/pg_operator.dat | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/include/catalog/pg_operator.dat b/src/include/catalog/pg_operator.dat index ec1615cccca6e..89c73acd68077 100644 --- a/src/include/catalog/pg_operator.dat +++ b/src/include/catalog/pg_operator.dat @@ -3320,13 +3320,13 @@ oprcode => 'range_overlaps_multirange', oprrest => 'multirangesel', oprjoin => 'areajoinsel' }, { oid => '2867', oid_symbol => 'OID_MULTIRANGE_OVERLAPS_RANGE_OP', - descr => 'contains', + descr => 'overlaps', oprname => '&&', oprleft => 'anymultirange', oprright => 'anyrange', oprresult => 'bool', oprcom => '&&(anyrange,anymultirange)', oprcode => 'multirange_overlaps_range', oprrest => 'multirangesel', oprjoin => 'areajoinsel' }, { oid => '2868', oid_symbol => 'OID_MULTIRANGE_OVERLAPS_MULTIRANGE_OP', - descr => 'contains', + descr => 'overlaps', oprname => '&&', oprleft => 'anymultirange', oprright => 'anymultirange', oprresult => 'bool', oprcom => '&&(anymultirange,anymultirange)', oprcode => 'multirange_overlaps_multirange', oprrest => 'multirangesel', @@ -3393,7 +3393,7 @@ descr => 'overlaps or is left of', oprname => '&<', oprleft => 'anymultirange', oprright => 'anymultirange', oprresult => 'bool', oprcode => 'multirange_overleft_multirange', - oprrest => 'multirangesel', oprjoin => 'scalargtjoinsel' }, + oprrest => 'multirangesel', oprjoin => 'scalarltjoinsel' }, { oid => '3585', oid_symbol => 'OID_RANGE_OVERLAPS_RIGHT_MULTIRANGE_OP', descr => 'overlaps or is right of', oprname => '&>', oprleft => 'anyrange', oprright => 'anymultirange', From 0da3c1bc3f7261d5157f5b86ade88e8b379f8686 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 15 Jul 2021 21:25:03 +0900 Subject: [PATCH 667/671] Fix portability issue with gzip in TAP test of pg_receivewal The OpenBSD implementation of gzip considers only files suffixed by "Z", "gz", "z", "tgz" or "taz" as valid targets, discarding anything else and making a command using --test exit with an error code of 512 if anything invalid is found. The test introduced in ffc9dda tested a WAL segment suffixed as .gz.partial, enough to make the test fail. Testing only a full segment is fine enough in terms of coverage, so simplify the code by discarding the .gz.partial segment in this check. This should be enough to make the test pass with OpenBSD environments. Per report from curculio. Discussion: https://postgr.es/m/YPAdf9r5aJbDoHoq@paquier.xyz --- src/bin/pg_basebackup/t/020_pg_receivewal.pl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/bin/pg_basebackup/t/020_pg_receivewal.pl b/src/bin/pg_basebackup/t/020_pg_receivewal.pl index 305c501e2f225..17fd71a450037 100644 --- a/src/bin/pg_basebackup/t/020_pg_receivewal.pl +++ b/src/bin/pg_basebackup/t/020_pg_receivewal.pl @@ -112,15 +112,14 @@ # Update the list of partial wals with the current one. @partial_wals = @zlib_partial_wals; - # There is one complete and one partial file compressed with ZLIB. - # Check the integrity of both, if gzip is a command available. + # Check the integrity of the completed segment, if gzip is a command + # available. my $gzip = $ENV{GZIP_PROGRAM}; skip "program gzip is not found in your system", 1 if ( !defined $gzip || $gzip eq '' || system_log($gzip, '--version') != 0); - push(@zlib_wals, @zlib_partial_wals); my $gzip_is_valid = system_log($gzip, '--test', @zlib_wals); is($gzip_is_valid, 0, "gzip verified the integrity of compressed WAL segments"); From e529b2dc37ac80ccebd76cdbb14966d3b40819c9 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 15 Jul 2021 11:00:43 -0400 Subject: [PATCH 668/671] Ensure HAVE_DECL_XXX macros in MSVC builds match those in Unix. Autoconf's AC_CHECK_DECLS() always defines HAVE_DECL_whatever as 1 or 0, but some of the entries in msvc/Solution.pm showed such symbols as "undef" instead of 0. Fix that for consistency. There's no live bug in current usages AFAICS, but it's not hard to imagine one creeping in if more-complex #if tests get added. Back-patch to v13, which is as far back as Solution.pm contains this data. The inconsistency still exists in the manually-filled pg_config_ext.h.win32 files of older branches; but as long as the problem is only latent, it doesn't seem worth the trouble to clean things up there. Discussion: https://postgr.es/m/3185430.1626133592@sss.pgh.pa.us --- src/tools/msvc/Solution.pm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index c967743467b32..165a93987ac4f 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -239,19 +239,19 @@ sub GenerateFiles HAVE_CRYPTO_LOCK => undef, HAVE_DECL_FDATASYNC => 0, HAVE_DECL_F_FULLFSYNC => 0, - HAVE_DECL_LLVMCREATEGDBREGISTRATIONLISTENER => undef, - HAVE_DECL_LLVMCREATEPERFJITEVENTLISTENER => undef, + HAVE_DECL_LLVMCREATEGDBREGISTRATIONLISTENER => 0, + HAVE_DECL_LLVMCREATEPERFJITEVENTLISTENER => 0, HAVE_DECL_LLVMGETHOSTCPUNAME => 0, HAVE_DECL_LLVMGETHOSTCPUFEATURES => 0, HAVE_DECL_LLVMORCGETSYMBOLADDRESSIN => 0, - HAVE_DECL_POSIX_FADVISE => undef, + HAVE_DECL_POSIX_FADVISE => 0, HAVE_DECL_PREADV => 0, HAVE_DECL_PWRITEV => 0, HAVE_DECL_RTLD_GLOBAL => 0, HAVE_DECL_RTLD_NOW => 0, HAVE_DECL_SIGWAIT => 0, - HAVE_DECL_STRLCAT => undef, - HAVE_DECL_STRLCPY => undef, + HAVE_DECL_STRLCAT => 0, + HAVE_DECL_STRLCPY => 0, HAVE_DECL_STRNLEN => 1, HAVE_DECL_STRTOLL => 1, HAVE_DECL_STRTOULL => 1, From a49d081235997c67e8aab7a523b17e8d1cb93184 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 15 Jul 2021 11:41:47 -0400 Subject: [PATCH 669/671] Replace explicit PIN entries in pg_depend with an OID range test. As of v14, pg_depend contains almost 7000 "pin" entries recording the OIDs of built-in objects. This is a fair amount of bloat for every database, and it adds time to pg_depend lookups as well as initdb. We can get rid of all of those entries in favor of an OID range check, i.e. "OIDs below FirstUnpinnedObjectId are pinned". (template1 and the public schema are exceptions. Those exceptions are now wired into IsPinnedObject() instead of initdb's code for filling pg_depend, but it's the same amount of cruft either way.) The contents of pg_shdepend are modified likewise. Discussion: https://postgr.es/m/3737988.1618451008@sss.pgh.pa.us --- doc/src/sgml/bki.sgml | 28 +++++-- doc/src/sgml/catalogs.sgml | 60 ++++++-------- src/backend/access/transam/varsup.c | 49 +++++++++++- src/backend/access/transam/xlog.c | 2 +- src/backend/catalog/catalog.c | 96 +++++++++++++++++++++-- src/backend/catalog/dependency.c | 32 +++----- src/backend/catalog/genbki.pl | 10 +-- src/backend/catalog/pg_depend.c | 66 ++++------------ src/backend/catalog/pg_publication.c | 2 +- src/backend/catalog/pg_shdepend.c | 92 +++++----------------- src/backend/commands/tablecmds.c | 16 ++-- src/backend/commands/tablespace.c | 4 +- src/backend/optimizer/plan/setrefs.c | 6 +- src/backend/storage/lmgr/predicate.c | 2 +- src/bin/initdb/initdb.c | 77 +----------------- src/bin/pg_resetwal/pg_resetwal.c | 2 +- src/include/access/transam.h | 16 ++-- src/include/catalog/catalog.h | 2 + src/include/catalog/catversion.h | 2 +- src/include/catalog/dependency.h | 18 ++--- src/include/catalog/pg_depend.h | 11 ++- src/include/catalog/pg_proc.dat | 4 + src/include/catalog/pg_shdepend.h | 12 +-- src/test/regress/expected/misc_sanity.out | 57 +------------- src/test/regress/sql/misc_sanity.sql | 58 ++------------ 25 files changed, 291 insertions(+), 433 deletions(-) diff --git a/doc/src/sgml/bki.sgml b/doc/src/sgml/bki.sgml index db1b3d5e9a028..f32208b550442 100644 --- a/doc/src/sgml/bki.sgml +++ b/doc/src/sgml/bki.sgml @@ -418,19 +418,33 @@ If genbki.pl needs to assign an OID to a catalog entry that does not have a manually-assigned OID, it will use a value in - the range 10000—11999. The server's OID counter is set to 12000 - at the start of a bootstrap run. Thus objects created by regular SQL - commands during the later phases of bootstrap, such as objects created - while running the information_schema.sql script, - receive OIDs of 12000 or above. + the range 10000—11999. The server's OID counter is set to 10000 + at the start of a bootstrap run, so that any objects created on-the-fly + during bootstrap processing also receive OIDs in this range. (The + usual OID assignment mechanism takes care of preventing any conflicts.) + + + + Objects with OIDs below FirstUnpinnedObjectId (12000) + are considered pinned, preventing them from being + deleted. (There are a small number of exceptions, which are + hard-wired into IsPinnedObject().) + initdb forces the OID counter up + to FirstUnpinnedObjectId as soon as it's ready to + create unpinned objects. Thus objects created during the later phases + of initdb, such as objects created while + running the information_schema.sql script, will + not be pinned, while all objects known + to genbki.pl will be. OIDs assigned during normal database operation are constrained to be 16384 or higher. This ensures that the range 10000—16383 is free for OIDs assigned automatically by genbki.pl or - during bootstrap. These automatically-assigned OIDs are not considered - stable, and may change from one installation to another. + during initdb. These + automatically-assigned OIDs are not considered stable, and may change + from one installation to another. diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 0f5d25b948a3f..5128f34d40732 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -3264,8 +3264,7 @@ SCRAM-SHA-256$<iteration count>:&l (references pg_class.oid) - The OID of the system catalog the dependent object is in, - or zero for a DEPENDENCY_PIN entry + The OID of the system catalog the dependent object is in @@ -3275,8 +3274,7 @@ SCRAM-SHA-256$<iteration count>:&l (references any OID column) - The OID of the specific dependent object, - or zero for a DEPENDENCY_PIN entry + The OID of the specific dependent object @@ -3467,19 +3465,6 @@ SCRAM-SHA-256$<iteration count>:&l - - - DEPENDENCY_PIN (p) - - - There is no dependent object; this type of entry is a signal - that the system itself depends on the referenced object, and so - that object must never be deleted. Entries of this type are - created only by initdb. The columns for the - dependent object contain zeroes. - - - Other dependency flavors might be needed in future. @@ -3498,6 +3483,19 @@ SCRAM-SHA-256$<iteration count>:&l must be satisfied. + + Most objects created during initdb are + considered pinned, which means that the system itself + depends on them. Therefore, they are never allowed to be dropped. + Also, knowing that pinned objects will not be dropped, the dependency + mechanism doesn't bother to make pg_depend + entries showing dependencies on them. Thus, for example, a table + column of type numeric notionally has + a NORMAL dependency on the numeric + data type, but no such entry actually appears + in pg_depend. + + @@ -6779,7 +6777,6 @@ SCRAM-SHA-256$<iteration count>:&l The OID of the database the dependent object is in, or zero for a shared object - or a SHARED_DEPENDENCY_PIN entry @@ -6789,8 +6786,7 @@ SCRAM-SHA-256$<iteration count>:&l (references pg_class.oid) - The OID of the system catalog the dependent object is in, - or zero for a SHARED_DEPENDENCY_PIN entry + The OID of the system catalog the dependent object is in @@ -6800,8 +6796,7 @@ SCRAM-SHA-256$<iteration count>:&l (references any OID column) - The OID of the specific dependent object, - or zero for a SHARED_DEPENDENCY_PIN entry + The OID of the specific dependent object @@ -6889,19 +6884,6 @@ SCRAM-SHA-256$<iteration count>:&l - - SHARED_DEPENDENCY_PIN (p) - - - There is no dependent object; this type of entry is a signal - that the system itself depends on the referenced object, and so - that object must never be deleted. Entries of this type are - created only by initdb. The columns for the - dependent object contain zeroes. - - - - SHARED_DEPENDENCY_TABLESPACE (t) @@ -6918,6 +6900,14 @@ SCRAM-SHA-256$<iteration count>:&l objects. + + As in the pg_depend catalog, most objects + created during initdb are + considered pinned. No entries are made + in pg_shdepend that would have a pinned + object as either referenced or dependent object. + +
diff --git a/src/backend/access/transam/varsup.c b/src/backend/access/transam/varsup.c index a22bf375f8514..5b4898bb7862b 100644 --- a/src/backend/access/transam/varsup.c +++ b/src/backend/access/transam/varsup.c @@ -541,11 +541,11 @@ GetNewObjectId(void) * FirstNormalObjectId since that range is reserved for initdb (see * IsCatalogRelationOid()). Note we are relying on unsigned comparison. * - * During initdb, we start the OID generator at FirstBootstrapObjectId, so - * we only wrap if before that point when in bootstrap or standalone mode. + * During initdb, we start the OID generator at FirstGenbkiObjectId, so we + * only wrap if before that point when in bootstrap or standalone mode. * The first time through this routine after normal postmaster start, the * counter will be forced up to FirstNormalObjectId. This mechanism - * leaves the OIDs between FirstBootstrapObjectId and FirstNormalObjectId + * leaves the OIDs between FirstGenbkiObjectId and FirstNormalObjectId * available for automatic assignment during initdb, while ensuring they * will never conflict with user-assigned OIDs. */ @@ -560,7 +560,7 @@ GetNewObjectId(void) else { /* we may be bootstrapping, so don't enforce the full range */ - if (ShmemVariableCache->nextOid < ((Oid) FirstBootstrapObjectId)) + if (ShmemVariableCache->nextOid < ((Oid) FirstGenbkiObjectId)) { /* wraparound in standalone mode (unlikely but possible) */ ShmemVariableCache->nextOid = FirstNormalObjectId; @@ -586,6 +586,47 @@ GetNewObjectId(void) return result; } +/* + * SetNextObjectId + * + * This may only be called during initdb; it advances the OID counter + * to the specified value. + */ +static void +SetNextObjectId(Oid nextOid) +{ + /* Safety check, this is only allowable during initdb */ + if (IsPostmasterEnvironment) + elog(ERROR, "cannot advance OID counter anymore"); + + /* Taking the lock is, therefore, just pro forma; but do it anyway */ + LWLockAcquire(OidGenLock, LW_EXCLUSIVE); + + if (ShmemVariableCache->nextOid > nextOid) + elog(ERROR, "too late to advance OID counter to %u, it is now %u", + nextOid, ShmemVariableCache->nextOid); + + ShmemVariableCache->nextOid = nextOid; + ShmemVariableCache->oidCount = 0; + + LWLockRelease(OidGenLock); +} + +/* + * StopGeneratingPinnedObjectIds + * + * This is called once during initdb to force the OID counter up to + * FirstUnpinnedObjectId. This supports letting initdb's post-bootstrap + * processing create some pinned objects early on. Once it's done doing + * so, it calls this (via pg_stop_making_pinned_objects()) so that the + * remaining objects it makes will be considered un-pinned. + */ +void +StopGeneratingPinnedObjectIds(void) +{ + SetNextObjectId(FirstUnpinnedObjectId); +} + #ifdef USE_ASSERT_CHECKING diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index c7c928f50bd94..edb15fe58d2fb 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -5318,7 +5318,7 @@ BootStrapXLOG(void) checkPoint.fullPageWrites = fullPageWrites; checkPoint.nextXid = FullTransactionIdFromEpochAndXid(0, FirstNormalTransactionId); - checkPoint.nextOid = FirstBootstrapObjectId; + checkPoint.nextOid = FirstGenbkiObjectId; checkPoint.nextMulti = FirstMultiXactId; checkPoint.nextMultiOffset = 0; checkPoint.oldestXid = FirstNormalTransactionId; diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c index 7cabe741c66e0..aa7d4d5456b4c 100644 --- a/src/backend/catalog/catalog.c +++ b/src/backend/catalog/catalog.c @@ -31,6 +31,7 @@ #include "catalog/pg_authid.h" #include "catalog/pg_database.h" #include "catalog/pg_db_role_setting.h" +#include "catalog/pg_largeobject.h" #include "catalog/pg_namespace.h" #include "catalog/pg_replication_origin.h" #include "catalog/pg_shdepend.h" @@ -120,9 +121,9 @@ bool IsCatalogRelationOid(Oid relid) { /* - * We consider a relation to be a system catalog if it has an OID that was - * manually assigned or assigned by genbki.pl. This includes all the - * defined catalogs, their indexes, and their TOAST tables and indexes. + * We consider a relation to be a system catalog if it has a pinned OID. + * This includes all the defined catalogs, their indexes, and their TOAST + * tables and indexes. * * This rule excludes the relations in information_schema, which are not * integral to the system and can be treated the same as user relations. @@ -132,7 +133,7 @@ IsCatalogRelationOid(Oid relid) * This test is reliable since an OID wraparound will skip this range of * OIDs; see GetNewObjectId(). */ - return (relid < (Oid) FirstBootstrapObjectId); + return (relid < (Oid) FirstUnpinnedObjectId); } /* @@ -294,6 +295,64 @@ IsSharedRelation(Oid relationId) return false; } +/* + * IsPinnedObject + * Given the class + OID identity of a database object, report whether + * it is "pinned", that is not droppable because the system requires it. + * + * We used to represent this explicitly in pg_depend, but that proved to be + * an undesirable amount of overhead, so now we rely on an OID range test. + */ +bool +IsPinnedObject(Oid classId, Oid objectId) +{ + /* + * Objects with OIDs above FirstUnpinnedObjectId are never pinned. Since + * the OID generator skips this range when wrapping around, this check + * guarantees that user-defined objects are never considered pinned. + */ + if (objectId >= FirstUnpinnedObjectId) + return false; + + /* + * Large objects are never pinned. We need this special case because + * their OIDs can be user-assigned. + */ + if (classId == LargeObjectRelationId) + return false; + + /* + * There are a few objects defined in the catalog .dat files that, as a + * matter of policy, we prefer not to treat as pinned. We used to handle + * that by excluding them from pg_depend, but it's just as easy to + * hard-wire their OIDs here. (If the user does indeed drop and recreate + * them, they'll have new but certainly-unpinned OIDs, so no problem.) + * + * Checking both classId and objectId is overkill, since OIDs below + * FirstGenbkiObjectId should be globally unique, but do it anyway for + * robustness. + */ + + /* template1 is not pinned */ + if (classId == DatabaseRelationId && + objectId == TemplateDbOid) + return false; + + /* the public namespace is not pinned */ + if (classId == NamespaceRelationId && + objectId == PG_PUBLIC_NAMESPACE) + return false; + + /* + * All other initdb-created objects are pinned. This is overkill (the + * system doesn't really depend on having every last weird datatype, for + * instance) but generating only the minimum required set of dependencies + * seems hard, and enforcing an accurate list would be much more expensive + * than the simple range test used here. + */ + return true; +} + /* * GetNewOidWithIndex @@ -533,7 +592,8 @@ pg_nextoid(PG_FUNCTION_ARGS) if (!superuser()) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("must be superuser to call pg_nextoid()"))); + errmsg("must be superuser to call %s()", + "pg_nextoid"))); rel = table_open(reloid, RowExclusiveLock); idx = index_open(idxoid, RowExclusiveLock); @@ -580,5 +640,29 @@ pg_nextoid(PG_FUNCTION_ARGS) table_close(rel, RowExclusiveLock); index_close(idx, RowExclusiveLock); - return newoid; + PG_RETURN_OID(newoid); +} + +/* + * SQL callable interface for StopGeneratingPinnedObjectIds(). + * + * This is only to be used by initdb, so it's intentionally not documented in + * the user facing docs. + */ +Datum +pg_stop_making_pinned_objects(PG_FUNCTION_ARGS) +{ + /* + * Belt-and-suspenders check, since StopGeneratingPinnedObjectIds will + * fail anyway in non-single-user mode. + */ + if (!superuser()) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("must be superuser to call %s()", + "pg_stop_making_pinned_objects"))); + + StopGeneratingPinnedObjectIds(); + + PG_RETURN_VOID(); } diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index 0c37fc1d53ff9..76b65e39c4430 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -18,6 +18,7 @@ #include "access/htup_details.h" #include "access/table.h" #include "access/xact.h" +#include "catalog/catalog.h" #include "catalog/dependency.h" #include "catalog/heap.h" #include "catalog/index.h" @@ -520,6 +521,16 @@ findDependentObjects(const ObjectAddress *object, if (object_address_present_add_flags(object, objflags, targetObjects)) return; + /* + * If the target object is pinned, we can just error out immediately; it + * won't have any objects recorded as depending on it. + */ + if (IsPinnedObject(object->classId, object->objectId)) + ereport(ERROR, + (errcode(ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST), + errmsg("cannot drop %s because it is required by the database system", + getObjectDescription(object, false)))); + /* * The target object might be internally dependent on some other object * (its "owner"), and/or be a member of an extension (also considered its @@ -783,15 +794,6 @@ findDependentObjects(const ObjectAddress *object, objflags |= DEPFLAG_IS_PART; break; - case DEPENDENCY_PIN: - - /* - * Should not happen; PIN dependencies should have zeroes in - * the depender fields... - */ - elog(ERROR, "incorrect use of PIN dependency with %s", - getObjectDescription(object, false)); - break; default: elog(ERROR, "unrecognized dependency type '%c' for %s", foundDep->deptype, getObjectDescription(object, false)); @@ -920,18 +922,6 @@ findDependentObjects(const ObjectAddress *object, case DEPENDENCY_EXTENSION: subflags = DEPFLAG_EXTENSION; break; - case DEPENDENCY_PIN: - - /* - * For a PIN dependency we just ereport immediately; there - * won't be any others to report. - */ - ereport(ERROR, - (errcode(ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST), - errmsg("cannot drop %s because it is required by the database system", - getObjectDescription(object, false)))); - subflags = 0; /* keep compiler quiet */ - break; default: elog(ERROR, "unrecognized dependency type '%c' for %s", foundDep->deptype, getObjectDescription(object, false)); diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index b82df348b8d33..70987b14876c0 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -170,14 +170,14 @@ # OIDs not specified in the input files are automatically assigned, -# starting at FirstGenbkiObjectId, extending up to FirstBootstrapObjectId. +# starting at FirstGenbkiObjectId, extending up to FirstUnpinnedObjectId. # We allow such OIDs to be assigned independently within each catalog. my $FirstGenbkiObjectId = Catalog::FindDefinedSymbol('access/transam.h', $include_path, 'FirstGenbkiObjectId'); -my $FirstBootstrapObjectId = +my $FirstUnpinnedObjectId = Catalog::FindDefinedSymbol('access/transam.h', $include_path, - 'FirstBootstrapObjectId'); + 'FirstUnpinnedObjectId'); # Hash of next available OID, indexed by catalog name. my %GenbkiNextOids; @@ -1101,8 +1101,8 @@ sub assign_next_oid # Check that we didn't overrun available OIDs die - "genbki OID counter for $catname reached $result, overrunning FirstBootstrapObjectId\n" - if $result >= $FirstBootstrapObjectId; + "genbki OID counter for $catname reached $result, overrunning FirstUnpinnedObjectId\n" + if $result >= $FirstUnpinnedObjectId; return $result; } diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c index 54688094f5848..10f311967008f 100644 --- a/src/backend/catalog/pg_depend.c +++ b/src/backend/catalog/pg_depend.c @@ -17,6 +17,7 @@ #include "access/genam.h" #include "access/htup_details.h" #include "access/table.h" +#include "catalog/catalog.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/pg_constraint.h" @@ -29,7 +30,7 @@ #include "utils/rel.h" -static bool isObjectPinned(const ObjectAddress *object, Relation rel); +static bool isObjectPinned(const ObjectAddress *object); /* @@ -69,8 +70,11 @@ recordMultipleDependencies(const ObjectAddress *depender, return; /* nothing to do */ /* - * During bootstrap, do nothing since pg_depend may not exist yet. initdb - * will fill in appropriate pg_depend entries after bootstrap. + * During bootstrap, do nothing since pg_depend may not exist yet. + * + * Objects created during bootstrap are most likely pinned, and the few + * that are not do not have dependencies on each other, so that there + * would be no need to make a pg_depend entry anyway. */ if (IsBootstrapProcessingMode()) return; @@ -99,7 +103,7 @@ recordMultipleDependencies(const ObjectAddress *depender, * need to record dependencies on it. This saves lots of space in * pg_depend, so it's worth the time taken to check. */ - if (isObjectPinned(referenced, dependDesc)) + if (isObjectPinned(referenced)) continue; if (slot_init_count < max_slots) @@ -399,8 +403,6 @@ changeDependencyFor(Oid classId, Oid objectId, bool oldIsPinned; bool newIsPinned; - depRel = table_open(DependRelationId, RowExclusiveLock); - /* * Check to see if either oldRefObjectId or newRefObjectId is pinned. * Pinned objects should not have any dependency entries pointing to them, @@ -411,16 +413,14 @@ changeDependencyFor(Oid classId, Oid objectId, objAddr.objectId = oldRefObjectId; objAddr.objectSubId = 0; - oldIsPinned = isObjectPinned(&objAddr, depRel); + oldIsPinned = isObjectPinned(&objAddr); objAddr.objectId = newRefObjectId; - newIsPinned = isObjectPinned(&objAddr, depRel); + newIsPinned = isObjectPinned(&objAddr); if (oldIsPinned) { - table_close(depRel, RowExclusiveLock); - /* * If both are pinned, we need do nothing. However, return 1 not 0, * else callers will think this is an error case. @@ -440,6 +440,8 @@ changeDependencyFor(Oid classId, Oid objectId, return 1; } + depRel = table_open(DependRelationId, RowExclusiveLock); + /* There should be existing dependency record(s), so search. */ ScanKeyInit(&key[0], Anum_pg_depend_classid, @@ -574,7 +576,7 @@ changeDependenciesOn(Oid refClassId, Oid oldRefObjectId, objAddr.objectId = oldRefObjectId; objAddr.objectSubId = 0; - if (isObjectPinned(&objAddr, depRel)) + if (isObjectPinned(&objAddr)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot remove dependency on %s because it is a system object", @@ -586,7 +588,7 @@ changeDependenciesOn(Oid refClassId, Oid oldRefObjectId, */ objAddr.objectId = newRefObjectId; - newIsPinned = isObjectPinned(&objAddr, depRel); + newIsPinned = isObjectPinned(&objAddr); /* Now search for dependency records */ ScanKeyInit(&key[0], @@ -634,50 +636,14 @@ changeDependenciesOn(Oid refClassId, Oid oldRefObjectId, * isObjectPinned() * * Test if an object is required for basic database functionality. - * Caller must already have opened pg_depend. * * The passed subId, if any, is ignored; we assume that only whole objects * are pinned (and that this implies pinning their components). */ static bool -isObjectPinned(const ObjectAddress *object, Relation rel) +isObjectPinned(const ObjectAddress *object) { - bool ret = false; - SysScanDesc scan; - HeapTuple tup; - ScanKeyData key[2]; - - ScanKeyInit(&key[0], - Anum_pg_depend_refclassid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(object->classId)); - - ScanKeyInit(&key[1], - Anum_pg_depend_refobjid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(object->objectId)); - - scan = systable_beginscan(rel, DependReferenceIndexId, true, - NULL, 2, key); - - /* - * Since we won't generate additional pg_depend entries for pinned - * objects, there can be at most one entry referencing a pinned object. - * Hence, it's sufficient to look at the first returned tuple; we don't - * need to loop. - */ - tup = systable_getnext(scan); - if (HeapTupleIsValid(tup)) - { - Form_pg_depend foundDep = (Form_pg_depend) GETSTRUCT(tup); - - if (foundDep->deptype == DEPENDENCY_PIN) - ret = true; - } - - systable_endscan(scan); - - return ret; + return IsPinnedObject(object->classId, object->objectId); } diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c index 86e415af8923f..36bfff9706981 100644 --- a/src/backend/catalog/pg_publication.c +++ b/src/backend/catalog/pg_publication.c @@ -85,7 +85,7 @@ check_publication_add_relation(Relation targetrel) * XXX This also excludes all tables with relid < FirstNormalObjectId, * ie all tables created during initdb. This mainly affects the preinstalled * information_schema. IsCatalogRelationOid() only excludes tables with - * relid < FirstBootstrapObjectId, making that test rather redundant, + * relid < FirstUnpinnedObjectId, making that test rather redundant, * but really we should get rid of the FirstNormalObjectId test not * IsCatalogRelationOid. We can't do so today because we don't want * information_schema tables to be considered publishable; but this test diff --git a/src/backend/catalog/pg_shdepend.c b/src/backend/catalog/pg_shdepend.c index 420ad965653e9..4b676f560786c 100644 --- a/src/backend/catalog/pg_shdepend.c +++ b/src/backend/catalog/pg_shdepend.c @@ -101,7 +101,6 @@ static void storeObjectDescription(StringInfo descs, ObjectAddress *object, SharedDependencyType deptype, int count); -static bool isSharedObjectPinned(Oid classId, Oid objectId, Relation sdepRel); /* @@ -140,8 +139,7 @@ recordSharedDependencyOn(ObjectAddress *depender, sdepRel = table_open(SharedDependRelationId, RowExclusiveLock); /* If the referenced object is pinned, do nothing. */ - if (!isSharedObjectPinned(referenced->classId, referenced->objectId, - sdepRel)) + if (!IsPinnedObject(referenced->classId, referenced->objectId)) { shdepAddDependency(sdepRel, depender->classId, depender->objectId, depender->objectSubId, @@ -255,7 +253,7 @@ shdepChangeDep(Relation sdepRel, systable_endscan(scan); - if (isSharedObjectPinned(refclassid, refobjid, sdepRel)) + if (IsPinnedObject(refclassid, refobjid)) { /* No new entry needed, so just delete existing entry if any */ if (oldtup) @@ -513,7 +511,7 @@ updateAclDependencies(Oid classId, Oid objectId, int32 objsubId, continue; /* Skip pinned roles; they don't need dependency entries */ - if (isSharedObjectPinned(AuthIdRelationId, roleid, sdepRel)) + if (IsPinnedObject(AuthIdRelationId, roleid)) continue; shdepAddDependency(sdepRel, classId, objectId, objsubId, @@ -531,7 +529,7 @@ updateAclDependencies(Oid classId, Oid objectId, int32 objsubId, continue; /* Skip pinned roles */ - if (isSharedObjectPinned(AuthIdRelationId, roleid, sdepRel)) + if (IsPinnedObject(AuthIdRelationId, roleid)) continue; shdepDropDependency(sdepRel, classId, objectId, objsubId, @@ -626,8 +624,6 @@ shared_dependency_comparator(const void *a, const void *b) * on objects local to other databases. We can (and do) provide descriptions * of the two former kinds of objects, but we can't do that for "remote" * objects, so we just provide a count of them. - * - * If we find a SHARED_DEPENDENCY_PIN entry, we can error out early. */ bool checkSharedDependencies(Oid classId, Oid objectId, @@ -649,6 +645,18 @@ checkSharedDependencies(Oid classId, Oid objectId, StringInfoData descs; StringInfoData alldescs; + /* This case can be dispatched quickly */ + if (IsPinnedObject(classId, objectId)) + { + object.classId = classId; + object.objectId = objectId; + object.objectSubId = 0; + ereport(ERROR, + (errcode(ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST), + errmsg("cannot drop %s because it is required by the database system", + getObjectDescription(&object, false)))); + } + /* * We limit the number of dependencies reported to the client to * MAX_REPORTED_DEPS, since client software may not deal well with @@ -685,18 +693,6 @@ checkSharedDependencies(Oid classId, Oid objectId, { Form_pg_shdepend sdepForm = (Form_pg_shdepend) GETSTRUCT(tup); - /* This case can be dispatched quickly */ - if (sdepForm->deptype == SHARED_DEPENDENCY_PIN) - { - object.classId = classId; - object.objectId = objectId; - object.objectSubId = 0; - ereport(ERROR, - (errcode(ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST), - errmsg("cannot drop %s because it is required by the database system", - getObjectDescription(&object, false)))); - } - object.classId = sdepForm->classid; object.objectId = sdepForm->objid; object.objectSubId = sdepForm->objsubid; @@ -1272,53 +1268,6 @@ storeObjectDescription(StringInfo descs, } -/* - * isSharedObjectPinned - * Return whether a given shared object has a SHARED_DEPENDENCY_PIN entry. - * - * sdepRel must be the pg_shdepend relation, already opened and suitably - * locked. - */ -static bool -isSharedObjectPinned(Oid classId, Oid objectId, Relation sdepRel) -{ - bool result = false; - ScanKeyData key[2]; - SysScanDesc scan; - HeapTuple tup; - - ScanKeyInit(&key[0], - Anum_pg_shdepend_refclassid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(classId)); - ScanKeyInit(&key[1], - Anum_pg_shdepend_refobjid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(objectId)); - - scan = systable_beginscan(sdepRel, SharedDependReferenceIndexId, true, - NULL, 2, key); - - /* - * Since we won't generate additional pg_shdepend entries for pinned - * objects, there can be at most one entry referencing a pinned object. - * Hence, it's sufficient to look at the first returned tuple; we don't - * need to loop. - */ - tup = systable_getnext(scan); - if (HeapTupleIsValid(tup)) - { - Form_pg_shdepend shdepForm = (Form_pg_shdepend) GETSTRUCT(tup); - - if (shdepForm->deptype == SHARED_DEPENDENCY_PIN) - result = true; - } - - systable_endscan(scan); - - return result; -} - /* * shdepDropOwned * @@ -1359,7 +1308,7 @@ shdepDropOwned(List *roleids, DropBehavior behavior) HeapTuple tuple; /* Doesn't work for pinned objects */ - if (isSharedObjectPinned(AuthIdRelationId, roleid, sdepRel)) + if (IsPinnedObject(AuthIdRelationId, roleid)) { ObjectAddress obj; @@ -1402,7 +1351,6 @@ shdepDropOwned(List *roleids, DropBehavior behavior) switch (sdepForm->deptype) { /* Shouldn't happen */ - case SHARED_DEPENDENCY_PIN: case SHARED_DEPENDENCY_INVALID: elog(ERROR, "unexpected dependency type"); break; @@ -1506,7 +1454,7 @@ shdepReassignOwned(List *roleids, Oid newrole) Oid roleid = lfirst_oid(cell); /* Refuse to work on pinned roles */ - if (isSharedObjectPinned(AuthIdRelationId, roleid, sdepRel)) + if (IsPinnedObject(AuthIdRelationId, roleid)) { ObjectAddress obj; @@ -1549,10 +1497,6 @@ shdepReassignOwned(List *roleids, Oid newrole) sdepForm->dbid != InvalidOid) continue; - /* Unexpected because we checked for pins above */ - if (sdepForm->deptype == SHARED_DEPENDENCY_PIN) - elog(ERROR, "unexpected shared pin"); - /* We leave non-owner dependencies alone */ if (sdepForm->deptype != SHARED_DEPENDENCY_OWNER) continue; diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 96375814a8f31..28b178f2089f1 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -5960,7 +5960,7 @@ alter_table_type_to_string(AlterTableType cmdtype) case AT_DropExpression: return "ALTER COLUMN ... DROP EXPRESSION"; case AT_CheckNotNull: - return NULL; /* not real grammar */ + return NULL; /* not real grammar */ case AT_SetStatistics: return "ALTER COLUMN ... SET STATISTICS"; case AT_SetOptions: @@ -5976,7 +5976,7 @@ alter_table_type_to_string(AlterTableType cmdtype) return "DROP COLUMN"; case AT_AddIndex: case AT_ReAddIndex: - return NULL; /* not real grammar */ + return NULL; /* not real grammar */ case AT_AddConstraint: case AT_AddConstraintRecurse: case AT_ReAddConstraint: @@ -5992,7 +5992,7 @@ alter_table_type_to_string(AlterTableType cmdtype) case AT_DropConstraintRecurse: return "DROP CONSTRAINT"; case AT_ReAddComment: - return NULL; /* not real grammar */ + return NULL; /* not real grammar */ case AT_AlterColumnType: return "ALTER COLUMN ... SET DATA TYPE"; case AT_AlterColumnGenericOptions: @@ -6016,7 +6016,7 @@ alter_table_type_to_string(AlterTableType cmdtype) case AT_ResetRelOptions: return "RESET"; case AT_ReplaceRelOptions: - return NULL; /* not real grammar */ + return NULL; /* not real grammar */ case AT_EnableTrig: return "ENABLE TRIGGER"; case AT_EnableAlwaysTrig: @@ -6074,7 +6074,7 @@ alter_table_type_to_string(AlterTableType cmdtype) case AT_DropIdentity: return "ALTER COLUMN ... DROP IDENTITY"; case AT_ReAddStatistics: - return NULL; /* not real grammar */ + return NULL; /* not real grammar */ } return NULL; @@ -6129,7 +6129,7 @@ ATSimplePermissions(AlterTableType cmdtype, Relation rel, int allowed_targets) if (action_str) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), - /* translator: %s is a group of some SQL keywords */ + /* translator: %s is a group of some SQL keywords */ errmsg("ALTER action %s cannot be performed on relation \"%s\"", action_str, RelationGetRelationName(rel)), errdetail_relkind_not_supported(rel->rd_rel->relkind))); @@ -12080,10 +12080,6 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel, Form_pg_depend foundDep = (Form_pg_depend) GETSTRUCT(depTup); ObjectAddress foundObject; - /* We don't expect any PIN dependencies on columns */ - if (foundDep->deptype == DEPENDENCY_PIN) - elog(ERROR, "cannot alter type of a pinned column"); - foundObject.classId = foundDep->classid; foundObject.objectId = foundDep->objid; foundObject.objectSubId = foundDep->objsubid; diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c index 69ea155d50278..0385fd61214d4 100644 --- a/src/backend/commands/tablespace.c +++ b/src/backend/commands/tablespace.c @@ -449,7 +449,6 @@ DropTableSpace(DropTableSpaceStmt *stmt) ereport(NOTICE, (errmsg("tablespace \"%s\" does not exist, skipping", tablespacename))); - /* XXX I assume I need one or both of these next two calls */ table_endscan(scandesc); table_close(rel, NoLock); } @@ -465,8 +464,7 @@ DropTableSpace(DropTableSpaceStmt *stmt) tablespacename); /* Disallow drop of the standard tablespaces, even by superuser */ - if (tablespaceoid == GLOBALTABLESPACE_OID || - tablespaceoid == DEFAULTTABLESPACE_OID) + if (IsPinnedObject(TableSpaceRelationId, tablespaceoid)) aclcheck_error(ACLCHECK_NO_PRIV, OBJECT_TABLESPACE, tablespacename); diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 26f6872b4b0a6..b145c5f45fd7b 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -2955,11 +2955,11 @@ record_plan_function_dependency(PlannerInfo *root, Oid funcid) * For performance reasons, we don't bother to track built-in functions; * we just assume they'll never change (or at least not in ways that'd * invalidate plans using them). For this purpose we can consider a - * built-in function to be one with OID less than FirstBootstrapObjectId. + * built-in function to be one with OID less than FirstUnpinnedObjectId. * Note that the OID generator guarantees never to generate such an OID * after startup, even at OID wraparound. */ - if (funcid >= (Oid) FirstBootstrapObjectId) + if (funcid >= (Oid) FirstUnpinnedObjectId) { PlanInvalItem *inval_item = makeNode(PlanInvalItem); @@ -2995,7 +2995,7 @@ record_plan_type_dependency(PlannerInfo *root, Oid typid) * As in record_plan_function_dependency, ignore the possibility that * someone would change a built-in domain. */ - if (typid >= (Oid) FirstBootstrapObjectId) + if (typid >= (Oid) FirstUnpinnedObjectId) { PlanInvalItem *inval_item = makeNode(PlanInvalItem); diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c index d493aeef0fc44..56267bdc3ce32 100644 --- a/src/backend/storage/lmgr/predicate.c +++ b/src/backend/storage/lmgr/predicate.c @@ -494,7 +494,7 @@ static void ReleasePredicateLocksLocal(void); static inline bool PredicateLockingNeededForRelation(Relation relation) { - return !(relation->rd_id < FirstBootstrapObjectId || + return !(relation->rd_id < FirstUnpinnedObjectId || RelationUsesLocalBuffers(relation) || relation->rd_rel->relkind == RELKIND_MATVIEW); } diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 77e621a76799e..994bf07f3ba19 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -1525,83 +1525,10 @@ setup_depend(FILE *cmdfd) const char *const *line; static const char *const pg_depend_setup[] = { /* - * Make PIN entries in pg_depend for all objects made so far in the - * tables that the dependency code handles. This is overkill (the - * system doesn't really depend on having every last weird datatype, - * for instance) but generating only the minimum required set of - * dependencies seems hard. - * - * Catalogs that are intentionally not scanned here are: - * - * pg_database: it's a feature, not a bug, that template1 is not + * Advance the OID counter so that subsequently-created objects aren't * pinned. - * - * pg_extension: a pinned extension isn't really an extension, hmm? - * - * pg_tablespace: tablespaces don't participate in the dependency - * code, and DropTableSpace() explicitly protects the built-in - * tablespaces. - * - * First delete any already-made entries; PINs override all else, and - * must be the only entries for their objects. - */ - "DELETE FROM pg_depend;\n\n", - "VACUUM pg_depend;\n\n", - "DELETE FROM pg_shdepend;\n\n", - "VACUUM pg_shdepend;\n\n", - - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_class;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_proc;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_type;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_cast;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_constraint;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_conversion;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_attrdef;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_language;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_operator;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_opclass;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_opfamily;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_am;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_amop;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_amproc;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_rewrite;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_trigger;\n\n", - - /* - * restriction here to avoid pinning the public namespace */ - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_namespace " - " WHERE nspname LIKE 'pg%';\n\n", - - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_ts_parser;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_ts_dict;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_ts_template;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_ts_config;\n\n", - "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " - " FROM pg_collation;\n\n", - "INSERT INTO pg_shdepend SELECT 0,0,0,0, tableoid,oid, 'p' " - " FROM pg_authid;\n\n", + "SELECT pg_stop_making_pinned_objects();\n\n", NULL }; diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c index 805dafef072b1..2601f70a047ab 100644 --- a/src/bin/pg_resetwal/pg_resetwal.c +++ b/src/bin/pg_resetwal/pg_resetwal.c @@ -686,7 +686,7 @@ GuessControlValues(void) ControlFile.checkPointCopy.fullPageWrites = false; ControlFile.checkPointCopy.nextXid = FullTransactionIdFromEpochAndXid(0, FirstNormalTransactionId); - ControlFile.checkPointCopy.nextOid = FirstBootstrapObjectId; + ControlFile.checkPointCopy.nextOid = FirstGenbkiObjectId; ControlFile.checkPointCopy.nextMulti = FirstMultiXactId; ControlFile.checkPointCopy.nextMultiOffset = 0; ControlFile.checkPointCopy.oldestXid = FirstNormalTransactionId; diff --git a/src/include/access/transam.h b/src/include/access/transam.h index 2fe8a59110523..d22de19c94ccc 100644 --- a/src/include/access/transam.h +++ b/src/include/access/transam.h @@ -165,10 +165,14 @@ FullTransactionIdAdvance(FullTransactionId *dest) * when the .dat files in src/include/catalog/ do not specify an OID * for a catalog entry that requires one. Note that genbki.pl assigns * these OIDs independently in each catalog, so they're not guaranteed - * to be globally unique. + * to be globally unique. Furthermore, the bootstrap backend and + * initdb's post-bootstrap processing can also assign OIDs in this range. + * The normal OID-generation logic takes care of any OID conflicts that + * might arise from that. * - * OIDS 12000-16383 are reserved for assignment during initdb - * using the OID generator. (We start the generator at 12000.) + * OIDs 12000-16383 are reserved for unpinned objects created by initdb's + * post-bootstrap processing. initdb forces the OID generator up to + * 12000 as soon as it's made the pinned objects it's responsible for. * * OIDs beginning at 16384 are assigned from the OID generator * during normal multiuser operation. (We force the generator up to @@ -184,11 +188,12 @@ FullTransactionIdAdvance(FullTransactionId *dest) * * NOTE: if the OID generator wraps around, we skip over OIDs 0-16383 * and resume with 16384. This minimizes the odds of OID conflict, by not - * reassigning OIDs that might have been assigned during initdb. + * reassigning OIDs that might have been assigned during initdb. Critically, + * it also ensures that no user-created object will be considered pinned. * ---------- */ #define FirstGenbkiObjectId 10000 -#define FirstBootstrapObjectId 12000 +#define FirstUnpinnedObjectId 12000 #define FirstNormalObjectId 16384 /* @@ -289,6 +294,7 @@ extern void SetTransactionIdLimit(TransactionId oldest_datfrozenxid, extern void AdvanceOldestClogXid(TransactionId oldest_datfrozenxid); extern bool ForceTransactionIdLimitUpdate(void); extern Oid GetNewObjectId(void); +extern void StopGeneratingPinnedObjectIds(void); #ifdef USE_ASSERT_CHECKING extern void AssertTransactionIdInAllowableRange(TransactionId xid); diff --git a/src/include/catalog/catalog.h b/src/include/catalog/catalog.h index f247be50b4d33..ef2e88fe4544b 100644 --- a/src/include/catalog/catalog.h +++ b/src/include/catalog/catalog.h @@ -34,6 +34,8 @@ extern bool IsReservedName(const char *name); extern bool IsSharedRelation(Oid relationId); +extern bool IsPinnedObject(Oid classId, Oid objectId); + extern Oid GetNewOidWithIndex(Relation relation, Oid indexId, AttrNumber oidcolumn); extern Oid GetNewRelFileNode(Oid reltablespace, Relation pg_class, diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index f2ecafa1daac4..358dfdbbd308a 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202107141 +#define CATALOG_VERSION_NO 202107151 #endif diff --git a/src/include/catalog/dependency.h b/src/include/catalog/dependency.h index fd44081e741ec..2885f35ccd28e 100644 --- a/src/include/catalog/dependency.h +++ b/src/include/catalog/dependency.h @@ -36,8 +36,7 @@ typedef enum DependencyType DEPENDENCY_PARTITION_PRI = 'P', DEPENDENCY_PARTITION_SEC = 'S', DEPENDENCY_EXTENSION = 'e', - DEPENDENCY_AUTO_EXTENSION = 'x', - DEPENDENCY_PIN = 'p' + DEPENDENCY_AUTO_EXTENSION = 'x' } DependencyType; /* @@ -47,27 +46,21 @@ typedef enum DependencyType * unless the dependent object is dropped at the same time. There are some * additional rules however: * - * (a) For a SHARED_DEPENDENCY_PIN entry, there is no dependent object -- - * rather, the referenced object is an essential part of the system. This - * applies to the initdb-created superuser. Entries of this type are only - * created by initdb; objects in this category don't need further pg_shdepend - * entries if more objects come to depend on them. - * - * (b) a SHARED_DEPENDENCY_OWNER entry means that the referenced object is + * (a) a SHARED_DEPENDENCY_OWNER entry means that the referenced object is * the role owning the dependent object. The referenced object must be * a pg_authid entry. * - * (c) a SHARED_DEPENDENCY_ACL entry means that the referenced object is + * (b) a SHARED_DEPENDENCY_ACL entry means that the referenced object is * a role mentioned in the ACL field of the dependent object. The referenced * object must be a pg_authid entry. (SHARED_DEPENDENCY_ACL entries are not * created for the owner of an object; hence two objects may be linked by * one or the other, but not both, of these dependency types.) * - * (d) a SHARED_DEPENDENCY_POLICY entry means that the referenced object is + * (c) a SHARED_DEPENDENCY_POLICY entry means that the referenced object is * a role mentioned in a policy object. The referenced object must be a * pg_authid entry. * - * (e) a SHARED_DEPENDENCY_TABLESPACE entry means that the referenced + * (d) a SHARED_DEPENDENCY_TABLESPACE entry means that the referenced * object is a tablespace mentioned in a relation without storage. The * referenced object must be a pg_tablespace entry. (Relations that have * storage don't need this: they are protected by the existence of a physical @@ -78,7 +71,6 @@ typedef enum DependencyType */ typedef enum SharedDependencyType { - SHARED_DEPENDENCY_PIN = 'p', SHARED_DEPENDENCY_OWNER = 'o', SHARED_DEPENDENCY_ACL = 'a', SHARED_DEPENDENCY_POLICY = 'r', diff --git a/src/include/catalog/pg_depend.h b/src/include/catalog/pg_depend.h index f41ae3add12a6..90a5699b6e480 100644 --- a/src/include/catalog/pg_depend.h +++ b/src/include/catalog/pg_depend.h @@ -4,8 +4,9 @@ * definition of the "dependency" system catalog (pg_depend) * * pg_depend has no preloaded contents, so there is no pg_depend.dat - * file; system-defined dependencies are loaded into it during a late stage - * of the initdb process. + * file; dependencies for system-defined objects are loaded into it + * on-the-fly during initdb. Most built-in objects are pinned anyway, + * and hence need no explicit entries in pg_depend. * * NOTE: we do not represent all possible dependency pairs in pg_depend; * for example, there's not much value in creating an explicit dependency @@ -42,11 +43,9 @@ CATALOG(pg_depend,2608,DependRelationId) { /* * Identification of the dependent (referencing) object. - * - * These fields are all zeroes for a DEPENDENCY_PIN entry. */ - Oid classid BKI_LOOKUP_OPT(pg_class); /* OID of table containing - * object */ + Oid classid BKI_LOOKUP(pg_class); /* OID of table containing + * object */ Oid objid; /* OID of object itself */ int32 objsubid; /* column number, or 0 if not used */ diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index fde251fa4f3e1..8bf9d704b70ef 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -3295,6 +3295,10 @@ proname => 'pg_nextoid', provolatile => 'v', proparallel => 'u', prorettype => 'oid', proargtypes => 'regclass name regclass', prosrc => 'pg_nextoid' }, +{ oid => '8922', descr => 'stop making pinned objects during initdb', + proname => 'pg_stop_making_pinned_objects', provolatile => 'v', + proparallel => 'u', prorettype => 'void', proargtypes => '', + prosrc => 'pg_stop_making_pinned_objects' }, { oid => '1579', descr => 'I/O', proname => 'varbit_in', prorettype => 'varbit', diff --git a/src/include/catalog/pg_shdepend.h b/src/include/catalog/pg_shdepend.h index c77452c5846bc..06616b908653b 100644 --- a/src/include/catalog/pg_shdepend.h +++ b/src/include/catalog/pg_shdepend.h @@ -4,8 +4,9 @@ * definition of the "shared dependency" system catalog (pg_shdepend) * * pg_shdepend has no preloaded contents, so there is no pg_shdepend.dat - * file; system-defined dependencies are loaded into it during a late stage - * of the initdb process. + * file; dependencies for system-defined objects are loaded into it + * on-the-fly during initdb. Most built-in objects are pinned anyway, + * and hence need no explicit entries in pg_shdepend. * * NOTE: we do not represent all possible dependency pairs in pg_shdepend; * for example, there's not much value in creating an explicit dependency @@ -39,13 +40,12 @@ CATALOG(pg_shdepend,1214,SharedDependRelationId) BKI_SHARED_RELATION /* * Identification of the dependent (referencing) object. * - * These fields are all zeroes for a DEPENDENCY_PIN entry. Also, dbid can - * be zero to denote a shared object. + * Note that dbid can be zero to denote a shared object. */ Oid dbid BKI_LOOKUP_OPT(pg_database); /* OID of database * containing object */ - Oid classid BKI_LOOKUP_OPT(pg_class); /* OID of table containing - * object */ + Oid classid BKI_LOOKUP(pg_class); /* OID of table containing + * object */ Oid objid; /* OID of object itself */ int32 objsubid; /* column number, or 0 if not used */ diff --git a/src/test/regress/expected/misc_sanity.out b/src/test/regress/expected/misc_sanity.out index a67f40198a45d..a57fd142a94de 100644 --- a/src/test/regress/expected/misc_sanity.out +++ b/src/test/regress/expected/misc_sanity.out @@ -11,75 +11,26 @@ -- NB: run this test early, because some later tests create bogus entries. -- **************** pg_depend **************** -- Look for illegal values in pg_depend fields. --- classid/objid can be zero, but only in 'p' entries SELECT * FROM pg_depend as d1 WHERE refclassid = 0 OR refobjid = 0 OR - deptype NOT IN ('a', 'e', 'i', 'n', 'p') OR - (deptype != 'p' AND (classid = 0 OR objid = 0)) OR - (deptype = 'p' AND (classid != 0 OR objid != 0 OR objsubid != 0)); + classid = 0 OR objid = 0 OR + deptype NOT IN ('a', 'e', 'i', 'n', 'x', 'P', 'S'); classid | objid | objsubid | refclassid | refobjid | refobjsubid | deptype ---------+-------+----------+------------+----------+-------------+--------- (0 rows) -- **************** pg_shdepend **************** -- Look for illegal values in pg_shdepend fields. --- classid/objid can be zero, but only in 'p' entries SELECT * FROM pg_shdepend as d1 WHERE refclassid = 0 OR refobjid = 0 OR - deptype NOT IN ('a', 'o', 'p', 'r') OR - (deptype != 'p' AND (classid = 0 OR objid = 0)) OR - (deptype = 'p' AND (dbid != 0 OR classid != 0 OR objid != 0 OR objsubid != 0)); + classid = 0 OR objid = 0 OR + deptype NOT IN ('a', 'o', 'r', 't'); dbid | classid | objid | objsubid | refclassid | refobjid | deptype ------+---------+-------+----------+------------+----------+--------- (0 rows) --- Check each OID-containing system catalog to see if its lowest-numbered OID --- is pinned. If not, and if that OID was generated during initdb, then --- perhaps initdb forgot to scan that catalog for pinnable entries. --- Generally, it's okay for a catalog to be listed in the output of this --- test if that catalog is scanned by initdb.c's setup_depend() function; --- whatever OID the test is complaining about must have been added later --- in initdb, where it intentionally isn't pinned. Legitimate exceptions --- to that rule are listed in the comments in setup_depend(). --- Currently, pg_rewrite is also listed by this check, even though it is --- covered by setup_depend(). That happens because there are no rules in --- the pinned data, but initdb creates some intentionally-not-pinned views. -do $$ -declare relnm text; - reloid oid; - shared bool; - lowoid oid; - pinned bool; -begin -for relnm, reloid, shared in - select relname, oid, relisshared from pg_class - where EXISTS( - SELECT * FROM pg_attribute - WHERE attrelid = pg_class.oid AND attname = 'oid') - and relkind = 'r' and oid < 16384 order by 1 -loop - execute 'select min(oid) from ' || relnm into lowoid; - continue when lowoid is null or lowoid >= 16384; - if shared then - pinned := exists(select 1 from pg_shdepend - where refclassid = reloid and refobjid = lowoid - and deptype = 'p'); - else - pinned := exists(select 1 from pg_depend - where refclassid = reloid and refobjid = lowoid - and deptype = 'p'); - end if; - if not pinned then - raise notice '% contains unpinned initdb-created object(s)', relnm; - end if; -end loop; -end$$; -NOTICE: pg_database contains unpinned initdb-created object(s) -NOTICE: pg_extension contains unpinned initdb-created object(s) -NOTICE: pg_rewrite contains unpinned initdb-created object(s) -NOTICE: pg_tablespace contains unpinned initdb-created object(s) -- **************** pg_class **************** -- Look for system tables with varlena columns but no toast table. All -- system tables with toastable columns should have toast tables, with diff --git a/src/test/regress/sql/misc_sanity.sql b/src/test/regress/sql/misc_sanity.sql index 9699f5cc3b3bc..2c0f87a651f1e 100644 --- a/src/test/regress/sql/misc_sanity.sql +++ b/src/test/regress/sql/misc_sanity.sql @@ -14,70 +14,24 @@ -- **************** pg_depend **************** -- Look for illegal values in pg_depend fields. --- classid/objid can be zero, but only in 'p' entries SELECT * FROM pg_depend as d1 WHERE refclassid = 0 OR refobjid = 0 OR - deptype NOT IN ('a', 'e', 'i', 'n', 'p') OR - (deptype != 'p' AND (classid = 0 OR objid = 0)) OR - (deptype = 'p' AND (classid != 0 OR objid != 0 OR objsubid != 0)); + classid = 0 OR objid = 0 OR + deptype NOT IN ('a', 'e', 'i', 'n', 'x', 'P', 'S'); + -- **************** pg_shdepend **************** -- Look for illegal values in pg_shdepend fields. --- classid/objid can be zero, but only in 'p' entries SELECT * FROM pg_shdepend as d1 WHERE refclassid = 0 OR refobjid = 0 OR - deptype NOT IN ('a', 'o', 'p', 'r') OR - (deptype != 'p' AND (classid = 0 OR objid = 0)) OR - (deptype = 'p' AND (dbid != 0 OR classid != 0 OR objid != 0 OR objsubid != 0)); - - --- Check each OID-containing system catalog to see if its lowest-numbered OID --- is pinned. If not, and if that OID was generated during initdb, then --- perhaps initdb forgot to scan that catalog for pinnable entries. --- Generally, it's okay for a catalog to be listed in the output of this --- test if that catalog is scanned by initdb.c's setup_depend() function; --- whatever OID the test is complaining about must have been added later --- in initdb, where it intentionally isn't pinned. Legitimate exceptions --- to that rule are listed in the comments in setup_depend(). --- Currently, pg_rewrite is also listed by this check, even though it is --- covered by setup_depend(). That happens because there are no rules in --- the pinned data, but initdb creates some intentionally-not-pinned views. - -do $$ -declare relnm text; - reloid oid; - shared bool; - lowoid oid; - pinned bool; -begin -for relnm, reloid, shared in - select relname, oid, relisshared from pg_class - where EXISTS( - SELECT * FROM pg_attribute - WHERE attrelid = pg_class.oid AND attname = 'oid') - and relkind = 'r' and oid < 16384 order by 1 -loop - execute 'select min(oid) from ' || relnm into lowoid; - continue when lowoid is null or lowoid >= 16384; - if shared then - pinned := exists(select 1 from pg_shdepend - where refclassid = reloid and refobjid = lowoid - and deptype = 'p'); - else - pinned := exists(select 1 from pg_depend - where refclassid = reloid and refobjid = lowoid - and deptype = 'p'); - end if; - if not pinned then - raise notice '% contains unpinned initdb-created object(s)', relnm; - end if; -end loop; -end$$; + classid = 0 OR objid = 0 OR + deptype NOT IN ('a', 'o', 'r', 't'); + -- **************** pg_class **************** From 830ef61bd8d0ac4c89c21a895047c1b3a6b202f3 Mon Sep 17 00:00:00 2001 From: Daniel Gustafsson Date: Thu, 15 Jul 2021 23:22:58 +0200 Subject: [PATCH 670/671] docs: fix inconsistencies in markup and case Ensure to properly mark up function parameters in text with , avoid using for terms which aren't acronyms and properly place the ", and" in a value list. The acronym removal is a follow-up to commit fb72a7b8c3 which removed it for minmax-multi. In passing, also fix an incorrectly cased word. Author: Ekaterina Kiryanova Reviewed-by: Laurenz Albe Discussion: https://postgr.es/m/c050ecbc-80b2-b360-3c1d-9fe6a6a11bb5@postgrespro.ru Backpatch-through: v14 --- doc/src/sgml/amcheck.sgml | 4 ++-- doc/src/sgml/brin.sgml | 2 +- doc/src/sgml/catalogs.sgml | 4 ++-- doc/src/sgml/config.sgml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/src/sgml/amcheck.sgml b/doc/src/sgml/amcheck.sgml index a2571d33ae67d..c570690b59c57 100644 --- a/doc/src/sgml/amcheck.sgml +++ b/doc/src/sgml/amcheck.sgml @@ -279,7 +279,7 @@ SET client_min_messages = DEBUG1; If specified, corruption checking begins at the specified block, skipping all previous blocks. It is an error to specify a - startblock outside the range of blocks in the + startblock outside the range of blocks in the target table. @@ -293,7 +293,7 @@ SET client_min_messages = DEBUG1; If specified, corruption checking ends at the specified block, skipping all remaining blocks. It is an error to specify an - endblock outside the range of blocks in the target + endblock outside the range of blocks in the target table. diff --git a/doc/src/sgml/brin.sgml b/doc/src/sgml/brin.sgml index 39c01dc680856..caf1ea4cef109 100644 --- a/doc/src/sgml/brin.sgml +++ b/doc/src/sgml/brin.sgml @@ -716,7 +716,7 @@ LOG: request for BRIN range summarization for index "brin_wi_idx" page 128 was - bloom operator classes accept these parameters: + bloom operator classes accept these parameters: diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 5128f34d40732..2b2c70a26e539 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -7393,8 +7393,8 @@ SCRAM-SHA-256$<iteration count>:&l An array containing codes for the enabled statistics kinds; valid values are: d for n-distinct statistics, - f for functional dependency statistics, and - m for most common values (MCV) list statistics + f for functional dependency statistics, + m for most common values (MCV) list statistics, and e for expression statistics diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 43772c2a98047..a23ae67ba52bd 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -7017,7 +7017,7 @@ local0.* /var/log/postgresql %Q - query identifier of the current query. Query + Query identifier of the current query. Query identifiers are not computed by default, so this field will be zero unless parameter is enabled or a third-party module that computes From 6cea447e6a10cd7ef511470e809a894a013e6a18 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 16 Jul 2021 13:21:18 +0900 Subject: [PATCH 671/671] Disable tests involving ZLIB on Windows for pg_receivewal As reported by buildfarm member bowerbird, those tests are unstable on Windows. The failure produced there points to a problem with gzflush(), that fails to sync a file freshly-opened, with a gzFile properly opened. While testing this myself with MSVC, I bumped into a different error where a file could simply not be opened, so this makes me rather doubtful that testing this area on Windows is a good idea if this finishes with random concurrency failures. This requires more investigation, and keeping this buildfarm member red is not a good thing in the long-term, so for now this just disables this set of tests on Windows. Discussion: https://postgr.es/m/YPDLz2x3o1aX2wRh@paquier.xyz --- src/bin/pg_basebackup/t/020_pg_receivewal.pl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/bin/pg_basebackup/t/020_pg_receivewal.pl b/src/bin/pg_basebackup/t/020_pg_receivewal.pl index 17fd71a450037..158f7d176fef5 100644 --- a/src/bin/pg_basebackup/t/020_pg_receivewal.pl +++ b/src/bin/pg_basebackup/t/020_pg_receivewal.pl @@ -72,11 +72,13 @@ my @partial_wals = glob "$stream_dir/*\.partial"; is(scalar(@partial_wals), 1, "one partial WAL segment was created"); -# Check ZLIB compression if available. +# Check ZLIB compression if available. On Windows, some old versions +# of zlib can cause some instabilities with this test, so disable it +# for now. SKIP: { - skip "postgres was not built with ZLIB support", 5 - if (!check_pg_config("#define HAVE_LIBZ 1")); + skip "postgres was not built with ZLIB support, or Windows is involved", 5 + if (!check_pg_config("#define HAVE_LIBZ 1") || $windows_os); # Generate more WAL worth one completed, compressed, segment. $primary->psql('postgres', 'SELECT pg_switch_wal();');